diff -Nrcpad gcc-3.4.3/BUGS gcc-4.0.0/BUGS
*** gcc-3.4.3/BUGS	Fri Nov  5 04:14:11 2004
--- gcc-4.0.0/BUGS	Thu Apr 21 07:04:15 2005
*************** References
*** 837,840 ****
    36. http://www.ncits.org/cplusplus.htm
    37. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html
    38. http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html
!   39. http://gcc.gnu.org/onlinedocs/gcc/C---Misunderstandings.html
--- 837,840 ----
    36. http://www.ncits.org/cplusplus.htm
    37. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html
    38. http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html
!   39. http://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Misunderstandings.html
diff -Nrcpad gcc-3.4.3/ChangeLog gcc-4.0.0/ChangeLog
*** gcc-3.4.3/ChangeLog	Fri Nov  5 03:33:10 2004
--- gcc-4.0.0/ChangeLog	Thu Apr 21 05:17:11 2005
***************
*** 1,6 ****
! 2004-11-04  Release Manager
  
! 	* GCC 3.4.3 released.
  
  2004-11-04  H.J. Lu  <hongjiu.lu@intel.com>
  
--- 1,288 ----
! 2005-04-20  Release Manager
  
! 	* GCC 4.0.0 released.
! 
! 2005-04-20  Geoffrey Keating  <geoffk@apple.com>
! 
! 	* configure.in (powerpc-*-darwin*): Add ${libgcj} to noconfigdirs.
! 	* configure: Regenerated.
! 
! 2005-04-19  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* configure: Regenerate after change to config/acx.m4.
! 
! 2005-04-14  Joseph S. Myers  <joseph@codesourcery.com>
! 
! 	* MAINTAINERS (Various Maintainers): Add self as i18n maintainer.
! 
! 2005-04-04  Thomas Koenig  <Thomas.Koenig@online.de>
! 
!         * MAINTAINERS (Write After Approval): Add myself.
! 
! 2005-03-25  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* configure.in (RPATH_ENVVAR): Set to DYLD_LIBRARY_PATH on Darwin.
! 	* configure: Regenerate.
! 
! 2005-03-14  Feng Wang  <fengwang@nudt.edu.cn>
! 
! 	* MAINTAINERS (Write After Approval): Add myself.
! 
! 2005-03-03  David Ayers  <d.ayers@inode.at>
! 
! 	* MAINTAINERS (Write After Approval): Add myself.
! 
! 2005-03-01  Alexandre Oliva  <aoliva@redhat.com>
! 
! 	PR libgcj/20160
! 	* ltmain.sh: Avoid creating archives with components that have
! 	duplicate basenames.
! 
! 2005-02-24  James A. Morrison  <phython@gcc.gnu.org>
! 
! 	* MAINTAINERS (Language Front Ends Maintainers): Add myself as
! 	treelang maintainer.
! 	(Write After Approval): Remove myself.
! 
! 2005-02-23  Paul Schlie  <schlie@comcast.net>
! 
! 	* configure.in: Allow darwin targeted ports to build tk, itcl and
! 	libgui.
! 	* configure: Regenerate.
! 
! 2005-02-21  Eric Botcazou  <ebotcazou@libertysurf.fr>
! 
! 	PR libgcj/10353
! 	* configure.in (noconfigdirs) <sparc-*-solaris2.[0-6]>: Add libgcj.
! 	* configure: Regenerate.
! 
! 2005-02-18  Steven G. Kargl  <kargl@gcc.gnu.org>
! 
! 	* MAINTAINERS (Write After Approval): Add myself.
! 
! 2005-02-10  Ian Lance Taylor  <ian@airs.com>
! 
! 	* MAINTAINERS: Update my e-mail address.
! 
! 2005-02-02  Richard Guenther  <rguenth@gcc.gnu.org>
! 
! 	* MAINTAINERS (Write After Approval): Add myself.
! 
! 2005-01-29  Hans-Peter Nilsson  <hp@axis.com>
! 
! 	* configure.in (noconfigdirs) <crisv32-*-*>: Match like cris-*-*.
! 	<crisv32-*-*, cris-*-*>: Only disable target-newlib and
! 	target-libgloss when not *-*-elf and *-*-aout.
! 	* configure: Regenerate.
! 
! 2005-01-23  Kazu Hirata  <kazu@cs.umass.edu>
! 
! 	* MAINTAINERS: Remove obsolete entries.
! 
! 	* MAINTAINERS (Write After Approval): Add Michael Matz.
! 
! 2005-01-19  Neil Booth  <neil@daikokuya.co.uk>
! 
! 	* MAINTAINERS: Remove self as cpplib maintainer.
! 
! 2005-01-17  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* install-sh, config.sub: Import from upstream.
! 
! 2005-01-17  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	PR bootstrap/18222
! 	* Makefile.def: Pass CPPFLAGS_FOR_TARGET.
! 	* Makefile.tpl: Define target CPPFLAGS on CPPFLAGS_FOR_TARGET.
! 	* Makefile.in: Regenerate.
! 
! 2005-01-16  Jason Thorpe  <thorpej@netbsd.org>
! 
! 	* MAINTAINERS: Update my email address.
! 
! 2005-01-12  David Edelsohn  <edelsohn@gnu.org>
! 	    Andreas Schwab  <schwab@suse.de>
! 
! 	PR bootstrap/18033
! 	* config-ml.in: Eval option if surrounded by single quotes.
! 
! 2005-01-03  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	Revert 2004-12-28 Makefile changes, a better fix will be
! 	applied to mainline and src after GCC 4.0 branches.
! 
! 2004-12-28  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	PR bootstrap/17383
! 
! 	* Makefile.def (target_modules): Remove stage parameter,
! 	it is always true now.
! 	* Makefile.tpl (configure-build-[+module+],
! 	configure-target-[+module+]): Always build symlink tree
! 	for the directory and for include.  BUILD_SUBDIR and
! 	TARGET_SUBDIR cannot be . anymore.
! 	* Makefile.in: Regenerate.
! 
! 2004-12-25  David Edelsohn  <edelsohn@gnu.org>
! 
! 	Revert 2004-12-08 Makefile changes.
! 
! 2004-12-17  Danny Smith  <dannysmith@users.sourceforge.net>
! 
! 	* MAINTAINERS: Move myself to OS Port Maintainers for windows,
! 	cygwin, mingw.
! 
! 2004-12-16  Andrew Stubbs  <andrew.stubbs@st.com>
! 
! 	* configure.in (sh64-*-*): Reenable gprof.
! 	* configure: Regenerate.
! 
! 2004-12-08  David Edelsohn  <edelsohn@gnu.org>
! 
! 	* Makefile.def (flags_to_pass): Add PICFLAG_FOR_TARGET.
! 	* Makefile.tpl (EXTRA_HOST_FLAGS): Add PICFLAG.
! 	(EXTRA_TARGET_FLAGS): Add PICFLAG.
! 	* Makefile.in: Regenerate.
! 
! 2004-12-08  Christopher Faylor  <cgf@gcc.gnu.org>
! 
! 	* MAINTAINERS: Update my email address.
! 
! 2004-12-07  Matt Kraai  <kraai@ftbfs.org>
! 
! 	* Makefile.tpl: Generate normal dependencies if the LHS module is
! 	not bootstrapped.
! 	* Makefile.in: Regenerate.
! 
! 2004-12-03  Richard Sandiford  <rsandifo@redhat.com>
! 
! 	* configure.in: Include config/gxx-include-dir.m4.  Use
! 	TL_AC_GXX_INCLUDE_DIR.  Remove some now-redundant AC_SUBSTs.
! 	* configure: Regenerate.
! 
! 2004-12-03  Richard Sandiford  <rsandifo@redhat.com>
! 
! 	* config.if: Delete.
! 	* configure.in: Set libstdcxx_incdir directly.
! 	* configure: Regenerate.
! 
! 2004-12-02  Eric Christopher  <echristo@redhat.com>
! 
! 	* Makefile.tpl (clean-target-libgcc): Make change in correct place.
! 	* Makefile.in: Regenerate.
! 
! 2004-12-02  Richard Sandiford  <rsandifo@redhat.com>
! 
! 	* configure.in: Clear gcc_version_trigger if the file doesn't exist.
! 	* configure: Regenerate.
! 
! 2004-12-02  Richard Sandiford  <rsandifo@redhat.com>
! 
! 	* configure.in: Include config/gcc-version.m4.  Use TL_AC_GCC_VERSION
! 	to set gcc_version_trigger.  Remove some now-redundant AC_SUBSTs.
! 	* configure: Regenerate.
! 
! 2004-12-01  Eric Christopher  <echristo@redhat.com>
! 
! 	* Makefile.in (clean-target-libgcc): Add stmp-dirs to list
! 	of things to remove.
! 
! 2004-11-29  Matt Kraai  <kraai@ftbfs.org>
! 
! 	* MAINTAINERS (Write After Approval): Update my e-mail address.
! 
! 2004-11-29  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* libtool.m4 (AC_DEPLIBS_CHECK_METHOD): Re-import linux-gnu case
! 	from CVS libtool to always pass_all.
! 
! 2004-11-25  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
! 
! 	* configure.in (hppa*-*-linux*): Don't add libgcj to noconfigdirs.
! 	(hppa*64*-*-*): Delete incorrect comment.
! 	* configure: Rebuilt.
! 
! 2004-11-24  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* libtool.m4 (AC_DEPLIBS_CHECK_METHOD): Revert previous change.
! 
! 2004-11-24  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* libtool.m4 (AC_DEPLIBS_CHECK_METHOD): Import linux-gnu case
! 	from CVS libtool to always pass_all.
! 
! 2004-11-15  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* install-sh, compile: Import from automake.
! 
! 2004-11-15  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* config.guess, config.sub:  Import from savannnah.
! 
! 2004-11-12  Scott Robert Ladd  <scott.ladd@coyotegulch.com>
! 
! 	* MAINTAINERS (Write After Approval): Add myself
! 
! 2004-11-12  Mike Stump  <mrs@apple.com>
! 
! 	* Makefile.def: Add html support.
! 	* Makefile.tpl: Likewise.
! 	* Makefile.in: Regenerate.
! 
! 2004-11-11  Geoffrey Keating  <geoffk@apple.com>
! 
! 	PR 18423
! 	* configure.in: Remove all instances of build-fixincludes from
! 	noconfigdirs.
! 	(build_configargs): Supply --target to subdirectories.
! 	* configure: Regenerate.
! 
! 	* Makefile.def: Make gcc install depend on fixincludes install.
! 	* Makefile.in: Regenerate.
! 
! 2004-11-10  Janis Johnson  <janis187@us.ibm.com>
! 
! 	* MAINTAINERS: Add myself as gcc testsuite maintainer.
! 
! 2004-11-11  Paul Brook  <paul@codesourcery.com>
! 
! 	* MAINTAINERS: Add self as arm maintainer.  Update email address.
! 
! 2004-11-08  Hans-Peter Nilsson  <hp@bitrange.com>
! 
! 	* configure.in (noconfigdirs) [mmix-*-*]: Disable
! 	target-libgfortran.
! 	* configure: Regenerate.
! 
! 2004-11-07  David Edelsohn  <edelsohn@gnu.org>
! 
! 	* config-ml.in: Pass FCFLAGS for multilibs, handle GFORTRAN
! 	like CC.
! 
! 2004-11-05  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* Makefile.def (host fixincludes): Specify missing targets.
! 	* Makefile.in: Regenerate.
! 
! 2004-11-05  Ralf Corsepius  <ralf.corsepius@rtems.org>
! 
! 	* MAINTAINERS: Add myself
! 
! 2004-11-05  Gabor Loki  <loki@inf.u-szeged.hu>
! 
! 	* MAINTAINERS (Write After Approval): Add myself.
! 
! 2004-11-04  Geoffrey Keating  <geoffk@apple.com>
! 
! 	* Makefile.def: Build fixincludes for the host, too.
! 	* Makefile.in: Regenerate.
! 	* configure.in (host_tools): Add fixincludes.
! 	* configure: Regenerate.
! 
! 2004-11-04  Daniel Jacobowitz  <dan@debian.org>
! 
! 	* configure.in (arm-*-oabi*, thumb-*-oabi*): Remove.
! 	* configure: Regenerated.
  
  2004-11-04  H.J. Lu  <hongjiu.lu@intel.com>
  
***************
*** 12,41 ****
  
  	* README.SCO: Update per FSF instructions.
  
  2004-10-06  Josef Zlomek  <josef.zlomek@email.cz>
  
  	* MAINTAINERS: Update my e-mail address.
  
  2004-09-24  Michael Roth  <mroth@nessie.de>
  
  	* configure.in (--without-headers): Add missing double quotes.
  	* configure: Regenerate.
  
  2004-09-23  H.J. Lu  <hongjiu.lu@intel.com>
  
  	PR bootstrap/17369
  	* Makefile.tpl (REALLY_SET_LIB_PATH): Add @SET_GCC_LIB_PATH@.
! 	(configure-target-[+module+]): Add @SET_GCC_LIB_PATH@. Set and
! 	export SET_GCC_LIB_PATH_CMD.
! 	(configure-gcc): Likewise.
  	* Makefile.in: Regenerated.
  
  	* configure.in (SET_GCC_LIB_PATH): Set and substitute.
  	* configure: Regenerated.
  
! 2004-09-06  Release Manager
  
! 	* GCC 3.4.2 released.
  
  2004-07-08 John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
  
--- 294,757 ----
  
  	* README.SCO: Update per FSF instructions.
  
+ 2004-10-28  Eric B. Weddington  <ericw@evcohs.com>
+ 
+ 	PR target/18151
+ 	* configure.in (case ${target}): Do not build fixincludes for avr.
+ 	* configure: Regenerated.
+ 
+ 2004-10-26  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* configure.in (case ${target}): Do not build fixincludes
+ 	on platforms where it is not used.
+ 	* configure: Regenerated.
+ 
+ 2004-10-23  Daniel Jacobowitz  <dan@debian.org>
+ 
+ 	* configure.in: Use an absolute path to install-sh.
+ 	* configure: Regenerated.
+ 
+ 2004-10-19  Aaron W. LaFramboise  <aaronavay62@aaronwl.com>
+ 
+ 	* MAINTAINERS (Write After Approval): Add myself.
+ 
+ 2004-10-19  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* MAINTAINERS: Remove from Write After Approval those that are
+ 	already maintainers.
+ 
+ 2004-10-19  Sebastian Pop  <pop@cri.ensmp.fr>
+ 
+ 	* MAINTAINERS:  Update my email address.
+ 
+ 2004-10-12  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* configure.in (*-*-cygwin*): Supress warning if newlib not present.
+ 	* configure: Regenerate.
+ 
+ 2004-10-07  J"orn Rennecke <joern.rennecke@st.com>
+ 
+ 	* MAINTAINERS:  Update my email address.
+ 
+ 2004-10-07  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* MAINTAINERS (Language Front Ends Maintainers): New.  Move
+ 	entries belonging to this category.
+ 
  2004-10-06  Josef Zlomek  <josef.zlomek@email.cz>
  
  	* MAINTAINERS: Update my e-mail address.
  
+ 2004-10-06  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	Fix wrong conflict resolution in:
+ 
+ 	2004-08-16  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* Makefile.in: Regenerate.
+ 	* Makefile.tpl (Autogenerated `all-*' targets): Invoke $(TARGET-*)
+ 	in the recursive `make', instead of hardwiring `all'.
+ 	(Autogenerated TARGET-* variables): New.
+ 
+ 2004-10-05  Tomer Levi  <Tomer.Levi@nsc.com>
+ 
+ 	* configure.in: Enable target-libgloss for crx-*-*.
+         * configure: Regenerate.
+ 
+ 2004-10-04  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* MAINTAINERS (Various Maintainers): Move the "windows,
+ 	cygwin, mingw" maintainer to ...
+ 	(OS Port Maintainers): ... here.
+ 
+ 2004-10-04  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* MAINTAINERS (Write After Approval): Remove those that are
+ 	maintainers of some subsystem.
+ 
+ 2004-10-02  P.J. Darcy  <darcypj@us.ibm.com>
+ 
+ 	* ltcf-c.sh (tpf*): Add ld_shlibs=yes.
+ 	* ltcf-cxx.sh (tpf*): Likewise.
+ 	* ltconfig (tpf*): Add TPF OS configuration support.
+ 
+ 2004-10-01  Bernd Schmidt  <bernds_cb1@t-online.de>
+ 
+ 	* MAINTAINERS: Change my email address to my new work account.
+ 
  2004-09-24  Michael Roth  <mroth@nessie.de>
  
  	* configure.in (--without-headers): Add missing double quotes.
  	* configure: Regenerate.
  
+ 2004-09-24  Kelley Cook <kcook@gcc.gnu.org>
+ 
+ 	* ylwrap: Revert to previous version.
+ 
  2004-09-23  H.J. Lu  <hongjiu.lu@intel.com>
  
  	PR bootstrap/17369
  	* Makefile.tpl (REALLY_SET_LIB_PATH): Add @SET_GCC_LIB_PATH@.
! 	(HOST_EXPORTS]): Add @SET_GCC_LIB_PATH@. Set and export
! 	SET_GCC_LIB_PATH_CMD.
! 	(BASE_TARGET_EXPORTS): Likewise.
  	* Makefile.in: Regenerated.
  
  	* configure.in (SET_GCC_LIB_PATH): Set and substitute.
  	* configure: Regenerated.
  
! 2004-09-23  Kelley Cook  <kcook@gcc.gnu.org>
  
! 	* config.guess: New upstream version
! 	* compile, depcomp, install-sh, ylwrap: Likewise.
! 
! 2004-09-19  Roger Sayle  <roger@eyesopen.com>
! 
! 	* config/mh-x86omitfp: New host makefile fragment.  Add
! 	-fomit-frame-pointer to the default BOOT_CFLAGS.
! 	* configure.in: Use it to speed up bootstrap on some IA-32 hosts.
! 	* configure: Regenerate.
! 
! 2004-09-15  Andrew Pinski  <pinskia@physics.uc.edu>
! 
! 	PR target/11572
! 	* configure.in (*-*-darwin*): Renable libobjc.
! 	* configure: Regenerate.
! 
! 2004-09-10  Nathan Sidwell  <nathan@codesourcery.com>
! 
! 	* MAINTAINERS: Add self as c++ and type-safe vector maintainer.
! 
! 2004-09-09  Daniel Berlin  <dberlin@dberlin.org>
! 
! 	* Makefile.def: Remove libbanshee.
! 	* Makefile.tpl: Ditto.
! 	* configure.in: Ditto.
! 	* Makefile.in: Regen.
! 	* configure: Ditto.
! 
! 2004-09-08  David Edelsohn  <edelsohn@gnu.org>
! 
! 	* ltmain.sh: Use $pic_object as $non_pic_object if
! 	$non_pic_object=none.
! 
! 2004-09-07  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* missing: Import latest version from master repository.
! 
! 2004-09-06  Nick Clifton  <nickc@redhat.com>
! 
! 	* config.sub: Import latest version from master repository.
! 	* config.guess: Likewise.
! 	This includes these changes:
! 
! 	2004-08-27  Hans-Peter Nilsson  <hp@axis.com>
! 
! 	* config.sub: Handle crisv32, alias etraxfs.
! 	* config.guess (crisv32:Linux:*:*): Handle.
! 
! 	2004-08-13  Brad Smith  <brad@comstyle.com>
! 
! 	* config.guess (*:OpenBSD:*:*): Remove defunct MIPS machines.
! 	(sgi:OpenBSD:*:*): Emit mips64, not mipseb.
! 
! 	2004-08-11  Paul Eggert  <eggert@cs.ucla.edu>
! 
! 	* config.guess (*:Darwin:*:*): If uname -p reports "unknown",
! 	assume the processor is a powerpc.  This is because coreutils
! 	uname (at least versions 4.5.7 through 5.2.1) outputs "unknown"
! 	in this case, due to a MacOS X bug that causes
! 	sysctl ((int[]) {CTL_HW, HW_MACHINE_ARCH}, 2, buffer, &bufsize, 0, 0)
! 	to return a negative number.
! 	Problem reported by Petter Reinholdtsen in:
! 	http://lists.gnu.org/archive/html/bug-gnu-utils/2003-02/msg00201.html
! 
! 	2004-07-19  Ben Elliston  <bje@gnu.org>
! 
! 	* config.guess (S7501:*:4.0:3.0): Handle NCR System V UNIX machine.
! 
! 	2004-06-24  Ben Elliston  <bje@gnu.org>
! 
! 	* config.guess: Update copyright years.
! 	* config.sub: Likewise.
! 
! 	2004-06-22  Robert Millan  <robertmh@gnu.org>
! 
! 	* config.guess (*:FreeBSD:*:*): Remove check for glibc (unneeded
! 	since GNU/kFreeBSD systems match *:GNU/*:*:* instead).
! 
! 	2004-06-22  Stanley F. Quayle <stan@stanq.com>
! 
! 	* config.guess (*:*VMS:*:*): New entry. Replaces
! 	Alpha:OpenVMS:*. Recognize and advertise all VMS flavors as dec
! 	manufacturer.
! 
! 	2004-06-22  Ben Elliston  <bje@gnu.org>
! 
! 	* config.guess: Cray fixes from Wendy Palm <wendyp@cray.com>.
! 	* config.sub: Likewise.
! 
! 	2004-06-22  Ben Elliston  <bje@gnu.org>
! 
! 	Reported by Hans-Peter Nilsson <hp@bitrange.com>:
! 	* config.sub: Correctly handle mmix-knuth and mmix-knuth-mmixware.
! 
! 	2004-06-11  Ben Elliston  <bje@gnu.org>
! 
! 	* config.guess (pegasos:OpenBSD:*:*): Remove.
! 
! 	2004-06-11  Ben Elliston  <bje@gnu.org>
! 
! 	From Wouter Verhelst <wouter@grep.be>:
! 	* config.guess (M68*:*:R3V[5678]:*): Detect R3V8.
! 
! 	2004-06-11  Ben Elliston  <bje@gnu.org>
! 
! 	* config.guess (luna88k:OpenBSD:*:*): New.
! 
! 	2004-03-12  Kazuhiro Inaoka  <inaoka.kazuhiro@renesas.com>
! 
! 	* config.guess (m32r*:Linux:*:*): New case.
! 	* config.sub: Handle m32rle.
! 
! 	2004-03-12  Ben Elliston  <bje@wasabisystems.com>
! 
! 	From Jens Petersen  <petersen@redhat.com>:
! 	* config.sub: Handle sparcv8.
! 
! 	2004-03-03  Ben Elliston  <bje@wasabisystems.com>
! 
! 	From Tom Smith <smith@cag.lkg.hp.com>:
! 	* config.guess: Version suffixes are equally significant on Tru64
! 	V4.* and V5.*, so do not ignore them on V5.*.  Handle a version
! 	prefix of "P" (patched kernel).
! 
! 	2004-02-23  Tal Agmon  <Tal.Agmon@nsc.com>
! 
! 	* config.sub: Add support for National Semiconductor CRX target.
! 
! 2004-09-03  Janis Johnson  <janis187@us.ibm.com>
! 
! 	* MAINTAINERS (Various Maintainers): Remove myself as web page
! 	maintainer, add myself as maintainer of build status lists.
! 
! 2004-09-03  Jan Beulich  <jbeulich@novell.com>
! 
! 	* configure.in: Remove target-libstdc++-v3 from noconfigdirs for
! 	*-*-netware, but add target-libmudflap.
! 	Consolidate *-*-netware targets (of which really only i?86 exists)
! 	into a single entry.
! 	* configure: Likewise.
! 
! 2004-09-01  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* Makefile.tpl (sorry): Remove.
! 	(clean-stage[+id+], clean-stage[+id+]-module): New targets.
! 	(cleanstrap targets): Depend on distclean, not distclean-stage1.
! 	(do-clean): Clean per-stage directories too.
! 	(do-distclean): Run distclean-stage1 too.
! 	(.NOTPARALLEL): Enable during toplevel bootstrap.
! 	(stage[+id+]-bubble): Enable parallel execution during
! 	the recursive invocation.
! 	* Makefile.in: Regenerate.
! 
! 	Fix previous checkin:
! 
! 	* Makefile.tpl: Move BOOT_CFLAGS above host makefile fragment
! 	include.
! 	* configure.in: Fix indentation.
! 	* configure: Regenerate.
! 
! 2004-08-31  Robert Bowdidge <bowdidge@apple.com>
! 
! 	* Makefile.in: Move BOOT_CFLAGS above host makefile fragment include.
! 	* configure.in: add test for powerpc-*-darwin* to specify makefile frag
! 	* configure: regenerate
! 	* config/mh-ppc-darwin: create file, override BOOT_CFLAGS for
!         -mdynamic-no-pic
! 
! 
! 2004-08-31  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* Makefile.def (build_modules): Add fixincludes.
! 	(dependencies): Make gcc depend on fixincludes.
! 	* configure.in (build_tools): Add fixincludes.
! 	(build_configdirs): Always include build_libs.
! 	* Makefile.in: Regenerate.
! 	* configure: Regenerate.
! 
! 2004-08-30  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* Makefile.def (bootstrap stages): Add 'lean' parameter.
! 	* Makefile.tpl (configure-stageN-*, all-stageN-*): Turned into
! 	phony targets; do not generate timestamp files.
! 	(distclean-stageN): Remove references to their timestamp files.
! 	(restageN, touch-stageN): Remove.
! 	(stageN-bubble): Rewritten.
! 	(compare): Support lean bootstraps.
! 	* Makefile.in: Regenerate.
! 
! 	* configure.in: Only warn when bootstrapping but
! 	build != host or build != target.  Support lean bootstraps.
! 	* configure: Regenerate.
! 
! 2004-08-26  Phil Edwards  <phil@codesourcery.com>
! 
! 	* configure.in:  Give a better error message if GMP/MPFR are missing
! 	and a language needing them has been requested.
! 	* configure:  Regenerated.
! 
! 2004-08-25  Phil Edwards  <phil@codesourcery.com>
! 
! 	* configure.in:  Print a list of available language front-ends if
! 	a requested one is missing.  Tidy stray tab characters.
! 	* configure:  Regenerated.
! 
! 2004-08-19  Michael Koch  <konqueror@gmx.de>
! 
! 	* gcc/doc/install.texi: Update entry about automake for libjava.
! 
! 2004-08-17  Robert Millan  <robertmh@gnu.org>
! 
! 	* configure.in: In noconfigdirs check, match GNU/k*BSD with GNU/Linux
! 	(instead of FreeBSD).
! 	* configure: Regenerate.
! 
! 2004-08-16  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* Makefile.in: Regenerate.
! 	* configure: Regenerate.
! 
! 	* Makefile.def (bootstrap-stage): Rename extra_*_flags to
! 	stage_*_flags.
! 	* Makefile.tpl (configure-[+module+], all-[+module+]): Exit
! 	for bootstrapped modules if toplevel bootstrap is going.
! 	(GCC bootstrap): Generate per-stage targets for all bootstrapped
! 	modules.  Adjust for changes in Makefile.def.  Enable several
! 	rules even in non-bootstrap mode, just to avoid peppering the
! 	template with unnecessary "@if/@endif gcc-bootstrap" pairs.
! 	(stage-[+prev+]-bubble): Remove.
! 
! 	* Makefile.def (Dependencies): Depend on all-build-bison,
! 	all-build-flex, all-build-byacc, all-build-texinfo, rather
! 	than the host variations.
! 	* Makefile.tpl (BUILD_DIR_PREFIX): Remove.  Replace throughout
! 	with BUILD_SUBDIR.
! 	(BISON): Update for recent Bisons.
! 	(YACC): Fix typo.
! 	(cross): Depend on all-build.
! 	(all): Do not depend on all-build.
! 	(prebootstrap): Remove.
! 	(dep-kind): Accept separate prefixes for MODULE and ON variables.
! 	(Prebootstrap dependencies): Add them to the per-stage targets
! 	and to all-prebootstrap.
! 	* configure.in (build_configdirs): Always enable build_tools.
! 	(BUILD_DIR_PREFIX): Remove.
! 
! 	* Makefile.def (gcc): Add target variable.
! 	(gdb, expect, guile, tk, tix): Replace with_x with extra_make_flags.
! 	* Makefile.tpl (Autogenerated `all-*' targets): Invoke $(TARGET-*)
! 	in the recursive `make', instead of hardwiring `all'.
! 	(Autogenerated TARGET-* variables): New.
! 
! 2004-08-13  Brian Booth  <bbooth@redhat.com>
! 
! 	* MAINTAINERS: Remove myself from write-after-approval.
! 
! 2004-08-12  Nathanael Nerode  <neroden@gcc.gnu.org>
! 
! 	* src-release: Stop distributing mmalloc with gdb (which doesn't
! 	use it).
! 	* Makefile.def: GDB doesn't depend on mmalloc anymore.
! 	* Makefile.in: Regenerate.
! 
! 2004-08-09  Mark Mitchell  <mark@codesourcery.com>
! 
! 	* configure.in (arm*-*-eabi*): New target.
! 	* configure: Regenerate.
! 
! 2004-08-06  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* Makefile.def (bfd, opcodes, gcc, zlib): Mark as bootstrap module.
! 	(bison, byacc, flex, texinfo): Do not mark as bootstrap module.
! 	(Dependencies): New section.
! 	* Makefile.tpl (Dependencies): Generate from Makefile.def.
! 	(configure-target-[+module+]): Depend on maybe-all-gcc
! 	(all-prebootstrap): New name of all-bootstrap.  Changed throughout.
! 	(toplevel profiledbootstrap): Fix dependencies.
! 	* Makefile.in: Regenerate.
! 
! 2004-08-03  Mark Mitchell  <mark@codesourcery.com>
! 
! 	* configure.in (arm*-*-symbianelf*): Add ${libgcj} and
! 	target-libiberty to noconfigdirs.
! 	* configure: Regenerate.
! 
! 2004-08-03  Paul Brook  <paul@codesourcery.com>
! 
! 	* configure.in: Check for MPFR as well as GMP.
! 	* configure: Regenerate.
! 
! 2004-08-01  Robert Millan  <robertmh@gnu.org>
! 
! 	* configure.in: Turn mt-linux into mt-gnu. Use mt-gnu and enable
! 	libmudflap for all GNU-based systems (with Glibc).
! 	* configure: Regenerate.
! 
! 2004-08-03 Paolo Bonzini <bonzini@gnu.org>
! 
! 	* Makefile.def (host-modules): Add gcc.
! 	* Makefile.in: Regenerate.
! 	* Makefile.tpl (sorry): New rule.
! 	(configure-host, all-host, [+make_target+]-host, do-check,
! 	install-host): Do not add gcc as a special case.
! 	(host modules): Add a small special-casing for gcc.  Export
! 	extra_make_flags through the environment.
! 	(maybe-configure-gcc, configure-gcc, maybe-all-gcc, all-gcc,
! 	maybe-check-gcc, check-gcc, maybe-install-gcc, install-gcc,
! 	other recursive targets for gcc): Remove.
! 
! 	(all, do-[+make_target+], do-check): Wrap between unstage and stage.
! 	(stage, unstage): New rules.
! 	(stage[+id+]-start, stage[+id+]-end, [+compare-target+],
! 	distclean-stage[+id+]): Use stage_current.
! 	([+bootstrap-target+], profiledbootstrap): Do not invoke manually
! 	the stage*-start rules.
! 
! 2004-08-02  Geoffrey Keating  <geoffk@apple.com>
! 
! 	* ltcf-cxx.sh: On Darwin, make archive multi-module, and don't
! 	use -all_load flag.
! 
! 2004-08-02  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* configure.in: Sync from src, add noconfigdirs for crx-*-*.
! 	* configure: Regenerate.
! 
! 2004-07-16  Toon Moene  <toon@moene.indiv.nluug.nl>
! 
! 	* maintainer-scripts/gcc_release: Revert yesterday's change.
! 
! 2004-07-16  Segher Boessenkool  <segher@kernel.crashing.org>
! 
! 	* MAINTAINERS: Add myself to write-after-approval.
! 
! 2004-07-15  Toon Moene  <toon@moene.indiv.nluug.nl>
! 
! 	* libf2c: Removed.
! 	* gcc/gccbug.in: Updated because of libf2c removal.
! 	* maintainer-scripts/gcc_release: Ditto.
! 
! 2004-07-09  Loren J. Rittle <ljrittle@acm.org>
! 
! 	* configure.in: Build libmudflap by default on FreeBSD.
! 	* configure: Regenerated.
! 
! 2004-07-09  Mark Mitchell  <mark@codesourcery.com>
! 
! 	* configure.in: Do not build libmudflap by default on non-GNU/Linux
! 	systems.
! 	* configure: Regenerated.
  
  2004-07-08 John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
  
***************
*** 44,54 ****
  	feedback based compiler.
  	* Makefile.in: Rebuilt.
  
! 2004-07-01  Release Manager
  
! 	* GCC 3.4.1 released.
  
! 2004-06-25  Nathanael Nerode  <neroden@gcc.gnu.org>
  
  	PR bootstrap/14760
  	* configure.in: When computing baseargs, strip *all* copies of
--- 760,1136 ----
  	feedback based compiler.
  	* Makefile.in: Rebuilt.
  
! 2004-07-08  Alexandre Oliva  <aoliva@redhat.com>
  
! 	* Makefile.def (host_modules): Set bootstrap=true for flex.
! 	* Makefile.tpl (all-gcc): Depend on texinfo and flex.
! 	* Makefile.in: Rebuilt.
  
! 2004-07-07  Jan Hubicka  <jh@suse.cz>
! 
! 	* MAINTAINERS: Add self as a profile feedback maintainer.
! 
! 2004-07-05  Phil Edwards  <phil@codesourcery.com>
! 
! 	* configure.in:  Do not prepend $srcdir to /dev/null in
! 	makefile fragments.
! 	* configure:  Regenerate.
! 
! 2004-07-01  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* Makefile.def (build_modules): Add bison, byacc, flex,
! 	m4, texinfo.
! 	(flags_to_pass): Add FLEX.
! 	* Makefile.tpl (BUILD_DIR_PREFIX, BASE_EXPORTS): New.
! 	(BUILD_EXPORTS, HOST_EXPORTS, BASE_TARGET_EXPORTS): Include it.
! 	(DEFAULT_YACC, USUAL_YACC, DEFAULT_LEX, USUAL_LEX, DEFAULT_M4,
! 	DEFAULT_MAKEINFO): Remove.
! 	(CONFIGURED_YACC, CONFIGURED_FLEX, CONFIGURED_BISON,
! 	CONFIGURED_LEX, CONFIGURED_M4, CONFIGURED_MAKEINFO): Substitute.
! 	(YACC, FLEX, BISON, LEX, M4, MAKEINFO): Define to look into
! 	objdir or else use configured tool.
! 	(all-build): New.
! 	(all): Depend on it.
! 	(Build module dependencies): Add.
! 	* Makefile.in: Regenerate.
! 	* configure.in: Better support for multiple build modules,
! 	matching what is done for host/target modules.  Do not look
! 	for "plausible" locations of build tools if Canadian cross.
! 	Use autoconf's AC_PROG_CC to find a C compiler.  Define
! 	BUILD_DIR_PREFIX.  Look for flex, makeinfo and m4.
! 	* configure: Regenerate.
! 
! 2004-06-22  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* Makefile.tpl (HOST_EXPORTS): Fix pasto.
! 	* Makefile.in: Regenerate.
! 
! 2004-06-22  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* Makefile.tpl (configure-build-[+module+],
! 	configure-[+module+], configure-target-[+module+]): Pass
! 	[+extra_configure_args+].
! 	(all-build-[+module+], all-[+module+], check-[+module+],
! 	install-[+module+], [+make_target+]-[+module+],
! 	all-target-[+module+], check-target-[+module+],
! 	install-target-[+module+], [+make_target+]-target-[+module+]):
! 	Pass [+extra_make_args+].
! 	(HOST_EXPORTS): Include the former GCC_HOST_EXPORTS.
! 	(GCC_HOST_EXPORTS): Remove.
! 	(configure-gcc, all-gcc, GCC_STRAP_TARGETS, profiledbootstrap,
! 	cross, check-gcc, check-gcc-c++, install-gcc,
! 	gcc-no-fixedincludes, [+make_target+]-gcc, stage[+id+]-bubble):
! 	Replace GCC_HOST_EXPORTS with HOST_EXPORTS.
! 	* Makefile.in: Regenerate.
! 
! 2004-06-21  Matthew Sachs  <msachs@apple.com>
! 
! 	* MAINTAINERS: Added self to write-after-approval.
! 
! 2004-06-21  Christopher Faylor  <cgf@alum.bu.edu>
! 
! 	* configure.in: Check for srcdir/winsup rather than build directory
! 	winsup.
! 	* configure: Regenerate.
! 
! 2004-06-17  Corinna Vinschen  <vinschen@redhat.com>
! 
! 	* configure.in: Don't build Cygwin native newlib if winsup
! 	directory is missing.  Emit warning instead.
! 	* configure: Regenerate.
! 
! 2004-06-09  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* Makefile.tpl (touch-stage[+id+]): New.
! 	(restage[+prev+]): Depend on touch-stage[+id+].
! 
! 	* Makefile.tpl (RECURSE_FLAGS_TO_PASS): New.
! 	Use it throughout.
! 
! 	* Makefile.def: Add profile and feedback bootstrap stages.
! 	Remove next field from bootstrap stages.
! 	* Makefile.tpl (LN, LN_S): Substitute.
! 	(stageN-start, stageN-end): Use double-colon rules, to
! 	provide a hook for additional setup commands.
! 	(distclean-stageN-gcc, restageN): Create dependencies from
! 	[+prev+], not from [+next+].
! 	(stageN-bubble): Add commands for successive stages from
! 	[+prev+], using double-colon rules.
! 	(all-stageN-gcc): Fix typo.
! 	(stagefeedback-start, profiledbootstrap): New.
! 	* Makefile.in: Regenerate.
! 	* configure.in: Call ACX_PROG_LN.
! 	* configure: Regenerate.
! 
! 2004-06-08  Canqun Yang  <canqun@nudt.edu.cn>
! 
! 	* MAINTAINERS (Write After Approval): Add myself.
! 
! 2004-06-03  Mark G. Adams  <mark.g.adams@sympatico.ca>
! 
! 	* MAINTAINERS (Write After Approval): Add myself.
! 
! 2004-06-03  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* configure.in: Fix --enable-bootstrap breakage introduced in trees
! 	without gcc.
! 	* configure: Regenerate.
! 
! 2004-06-01  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* Makefile.tpl: Fix typo.
! 	* Makefile.in: Regenerate.
! 
! 2004-06-01  Paolo Bonzini <bonzini@gnu.org>
! 
! 	* configure.in: Remove new- prefix from toplevel
! 	bootstrap targets.
! 	* configure: Regenerate.
! 
! 2004-06-01  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* Makefile.tpl (all.normal): Rename to all.
! 	(all): Replace with a rule to pick the default
! 	target from configure.
! 	(all-gcc, configure-gcc): Use conditionals to
! 	do nothing when toplevel bootstrap is going on.
! 	(GCC directory bootstrap) [gcc-bootstrap]: Disable.
! 	(Toplevel bootstrap) [gcc-no-bootstrap]: Disable.
! 	* configure.in: Support --enable-bootstrap.
! 
! 	* Makefile.def: Remove new- prefix from toplevel
! 	bootstrap targets.
! 	* Makefile.tpl: Likewise.
! 
! 	* Makefile.def: Add bootstrap_stage 4.  Add bootstrap2
! 	target.
! 
! 	* Makefile.tpl (Toplevel bootstrap): Pass $(BASE_FLAGS_TO_PASS)
! 	$(RECURSE_FLAGS) to recursive invocation of make.
! 
! 	* Makefile.in: Regenerate.
! 	* configure: Regenerate.
! 
! 2004-05-30  Andreas Jaeger  <aj@suse.de>
! 	    Jim Wilson <wilson@specifixinc.com>
! 
! 	* config-ml.in: Pass FFLAGS and ADAFLAGS for multilibs, handle F77
! 	like CC.
! 
! 2004-05-27  Daniel Jacobowitz  <dan@debian.org>
! 
! 	* configure.in: Fix sed invocation for GFORTRAN_FOR_TARGET.
! 	* configure: Regenerate.
! 
! 2004-05-25  Daniel Jacobowitz  <drow@false.org>
! 
! 	* Makefile.tpl (BUILD_EXPORTS, HOST_EXPORTS, GCC_HOST_EXPORTS)
! 	(STAGE_HOST_EXPORTS, BASE_TARGET_EXPORTS, RAW_CXX_TARGET_EXPORTS)
! 	(NORMAL_TARGET_EXPORTS): New macros.  Use them in all the recursive
! 	targets.
! 	* Makefile.in: Regenerate.
! 
! 2004-05-24  Paolo Bonzini <bonzini@gnu.org>
! 
! 	* configure.in: Test the ability to symlink directories.
! 	* configure: Regenerate.
! 
! 	* Makefile.def (bootstrap-stage): New definitions.
! 	* Makefile.tpl (configure-stage1-gcc,
! 	configure-stage2-gcc, configure-stage3-gcc,
! 	all-stage1-gcc, all-stage2-gcc, all-stage3-gcc,
! 	new-bootstrap, new-cleanstrap, new-restage1, new-restage2,
! 	new-restage3, compare): Autogenerate, see Makefile.in
! 	entry for behavioral changes.
! 	(distclean-stage1, new-stage1-start, new-stage1-end,
! 	new-stage1-bubble, distclean-stage2, new-stage2-start,
! 	new-stage2-end, new-stage2-bubble, distclean-stage3,
! 	new-stage3-start, new-stage3-end): New autogenerated targets.
! 	(objext, prebootstrap, BOOT_CFLAGS,
! 	POSTSTAGE1_FLAGS_TO_PASS): Move above the autogenerated
! 	targets.
! 
! 	* Makefile.in: Regenerate.
! 	(distclean-stage1, new-stage1-start, new-stage1-end,
! 	new-stage1-bubble, distclean-stage2, new-stage2-start,
! 	new-stage2-end, new-stage2-bubble, distclean-stage3,
! 	new-stage3-start, new-stage3-end): New targets.
! 	(all-stage1-gcc): Move prebootstrap dependency from here...
! 	(configure-stage1-gcc): ...to here.
! 	(new-bootstrap): Use bubble targets.
! 	(new-cleanstrap, new-restage1, new-restage2, new-restage3):
! 	Use per-stage distclean targets.
! 	(configure-stage1-gcc, configure-stage2-gcc,
! 	configure-stage3-gcc, all-stage1-gcc,
! 	all-stage2-gcc, all-stage3-gcc, new-bootstrap):
! 	Use new-stageN-start to prepare the tree.
! 
! 2004-05-23  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* Makefile.def (host_modules): add libcpp.
! 	* Makefile.tpl: Add dependencies on and for libcpp.
! 	* Makefile.in: Regenerate.
! 	* configure.in: Add libcpp host module.
! 	* configure: Regenerate.
! 
! 2004-05-21  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* Makefile.tpl: Whenever a recursive target is defined, wrap
! 	it in a special @if/@endif block, and prepare its maybe
! 	dependency in the @if/@endif block
! 	* configure.in: Instead of writing maybe dependencies, remove
! 	the @if/@endif statements, and remove the @if/@endif blocks
! 	that remain.
! 	* configure: Regenerate.
! 	* Makefile.in: Regenerate.
! 
! 2004-05-20  Janis Johnson  <janis187@us.ibm.com>
! 
! 	* MAINTAINERS (Various Maintainers): Add myself for compat testsuite.
! 
! 2004-05-18  Kaz Kojima  <kkojima@gcc.gnu.org>
! 
! 	PR bootstrap/15120
! 	* libtool.m4 (lt_cv_deplibs_check_method): Use pass_all on sh*.
! 	* */configure: Rebuilt.
! 
! 2004-05-17  Zack Weinberg  <zack@codesourcery.com>
! 
! 	* Makefile.def, Makefile.tpl, configure.in: Remove all mention
! 	of libf2c.
! 	* configure, Makefile.in: Regenerate.
! 
! 2004-05-13  Tobias Schlüter  <tobi@gcc.gnu.org>
! 
! 	* MAINTAINERS (Write After Approval): Add myself.
! 
! 2004-05-13  Diego Novillo  <dnovillo@redhat.com>
! 
! 	Merge from tree-ssa-20020619-branch.
! 
! 	* Makefile.def: Add libbanshee, libmudflap and libgfortran.
! 	* Makefile.tpl (BUILD_CONFIGDIRS): Add libbanshee.
! 	(HOST_GMPLIBS): Define.
! 	(HOST_GMPINC): Define.
! 	(TARGET_LIB_PATH): Add libmudflap.
! 	(GFORTRAN_FOR_TARGET): Define.
! 	(configure-build*): Export GFORTRAN.
! 	(configure-gcc): Export GMPLIBS and GMPINC.
! 	(all-gcc): Add maybe-all-libbanshee.
! 	(configure-target-libgfortran): Define.
! 	* Makefile.in: Regenerate.
! 	* configure.in (host_libs): Add libbanshee.
! 	(target_libraries): Add target-libmudflap and target-libgfortran.
! 	Add --with-libbanshee.
! 	Handle --disable-libmudflap.
! 	(*-*-freebsd*): Use with_gmp.
! 	Add $(libgcj) to noconfigdirs.
! 	* configure: Regenerate.
! 	* depcomp: New file.
! 	* MAINTAINERS: Add tree-ssa maintainers.
! 
! 2004-05-04  Vladimir Makarov  <vmakarov@redhat.com>
! 
! 	* MAINTAINERS (Various Maintainers): Add myself.
! 
! 2004-04-30  Brian Ford  <ford@vss.fsi.com>
! 
! 	* MAINTAINERS (Write After Approval): Add myself.
! 
! 2004-04-29  Uros Bizjak  <uros@kss-loka.si>
! 
! 	* MAINTAINERS (Write After Approval): Add myself.
! 
! 2004-04-28  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* config/acx.m4: Fix fastcompare support for new-bootstrap.
! 	* configure: Regenerate.
! 
! 2004-04-27  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	Revert:
! 	2004-04-26  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* Makefile.def (flags_to_pass): Remove *dir variables that
! 	are passed to the modules via TOPLEVEL_CONFIGURE_ARGUMENTS,
! 	as well as prefix and exec_prefix.
! 	* Makefile.in: Regenerate.
! 
! 2004-04-26  Robert Millan  <robertmh@gnu.org>
! 
! 	Add patches from libtool CVS.
! 	* libtool.m4: Add kfreebsd*-gnu and knetbsd*-gnu.
! 	* ltconfig: Likewise.
! 	* ltcf-c.sh: Likewise.
! 	* ltcf-cxx.sh: Likewise.
! 	* ltcf-gcj.sh: Likewise.
! 
! 2004-04-26  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* Makefile.def (host_modules): Mark with the bootstrap
! 	flag packages on which gcc depends.
! 	* Makefile.tpl (all-bootstrap): Use it.
! 	* Makefile.in: Regenerate.
! 
! 2004-04-26  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* Makefile.def (flags_to_pass): Remove *dir variables that
! 	are passed to the modules via TOPLEVEL_CONFIGURE_ARGUMENTS,
! 	as well as prefix and exec_prefix.
! 	* Makefile.in: Regenerate.
! 
! 2004-04-26  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* configure.in: Invoke ACX_PROG_CMP_IGNORE_INITIAL.
! 	* configure: Regenerate.
! 	* config/acx.m4: Mutuate ACX_PROG_CMP_IGNORE_INITIAL from gcc.
! 	* gcc/Makefile.tpl (compare): Use the result of the test.
! 	* gcc/Makefile.in: Regenerate.
! 
! 2004-04-23  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* Makefile.tpl (all-stage1-gcc, all-stage2-gcc, all-stage3-gcc):
! 	Always relocate gcc and prev-gcc to the original names, even
! 	if the build fails.
! 	(new-cleanstrap, new-restage1, new-restage2, new-restage3):
! 	New targets.
! 
! 2004-04-23  Laurent GUERBY <laurent@guerby.net>
! 
! 	* MAINTAINERS: Update my email address.
! 
! 2004-04-19  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
! 
! 	* configure.in (mips*-*-irix5*): Enable ld.
! 	* configure: Regenerate.
! 
! 2004-04-16  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
! 
! 	* configure: Regenerate.
! 
! 2004-04-15  James E Wilson  <wilson@specifixinc.com>
! 
! 	* Makefile.tpl (configure-[+module+], configure-gcc,
! 	configure-stage1-gcc, configure-stage2-gcc, configure-stage3-gcc):
! 	Set and export LDFLAGS.
! 	* Makefile.in: Regenerate.
! 
! 2004-04-12  Michael Chastain  <mec.gnu@mindspring.com>
! 
! 	* MAINTAINERS: Add myself to write-after-approval.
! 
! 2004-04-09  Nathanael Nerode  <neroden@gcc.gnu.org>
! 
! 	PR bootstrap/14871
! 	* Makefile.tpl: If we don't have built-in-tree target tools,
! 	use the ones found by configure rather than hacking around with
! 	program_transform_name.
! 	* configure.in: Give Makefile.tpl the information necessary
! 	to do that.
! 	* Makefile.in: Regenerate.
! 	* configure: Regenerate.
! 
! 2004-04-06  Nathanael Nerode  <neroden@gcc.gnu.org>
  
  	PR bootstrap/14760
  	* configure.in: When computing baseargs, strip *all* copies of
***************
*** 57,71 ****
  	only one space.
  	* configure: Regenerate.
  
! 2004-05-18  Kaz Kojima  <kkojima@gcc.gnu.org>
  
! 	PR bootstrap/15120
! 	* libtool.m4 (lt_cv_deplibs_check_method): Use pass_all on sh*.
! 	* */configure: Rebuilt.
!  
! 2004-04-18  Release Manager
  
! 	* GCC 3.4.0 released.
  
  2004-03-05  David Edelsohn  <edelsohn@gnu.org>
  
--- 1139,1268 ----
  	only one space.
  	* configure: Regenerate.
  
! 2004-04-06  David Edelsohn  <edelsohn@gnu.org>
  
! 	* configure.in (powerpc-*-aix*): Remove target-libada from noconfigdirs.
! 	(rs6000-*-aix*): Same.
! 	* configure: Regenerate.
  
! 2004-04-05  Ranjit Mathew  <rmathew@hotmail.com>
! 
! 	* MAINTAINERS: Add myself to write-after-approval.
! 
! 2004-04-03  Bud Davis  <bdavis9659@comcast.net>
! 
! 	* MAINTAINERS: Add myself to write-after-approval.
! 
! 2004-03-24  Nathanael Nerode  <neroden@gcc.gnu.org>
! 
! 	* Makefile.tpl (top level bootstrap support): Remove now-unneeded
! 	STRICT_WARN, WARN_CFLAGS flags passed down to make.
! 	* Makefile.in: Regenerate.
! 
! 	* configure.in (top level bootstrap support): Rework --enable-werror
! 	to set @stage2_werror_flag@.
! 	* configure: Regenerate.
! 	* Makefile.tpl (top level bootstrap support): Pass
! 	@stage2_werror_flag@ down to configure in stages 2 and 3.
! 	* Makefile.in: Regenerate.
! 
! 2004-03-23  Nathanael Nerode  <neroden@gcc.gnu.org>
! 
! 	* Makefile.tpl (new-bootstrap): Set CC and CC_FOR_BUILD in configure
! 	for stages 2 and 3 as well as in make.  As a consequence, remove
! 	OUTPUT_OPTION (now detected by configure) from the flags passed down
! 	to make.
! 	* Makefile.in: Regenerate.
! 
! 	* Makefile.tpl (new-bootstrap): Fix typo.
! 	* Makefile.in: Regenerate.
! 
! 2004-03-22  Nathanael Nerode  <neroden@gcc.gnu.org>
! 
! 	* Makefile.tpl: Rearrange by moving recursive_targets rules
! 	into their proper sections.
! 	* Makefile.tpl (top level bootstrap support): Move disabling
! 	of coverage flags from 'make' to 'configure'; improve comments.
! 	* Makefile.in: Regenerate.
! 
! 	* Makefile.tpl (experimental top level bootstrap) Move stage1
! 	language setting from all- target to configure- target; disable
! 	intermodule optimization in stage 1; prevent gratuitous rebuilds
! 	of stage 1.
! 	* Makefile.in: Regenerate.
! 	* configure.in: Comma-separate stage 1 language list for top
! 	level bootstrap.
! 	* configure: Regenerate.
! 
! 	* Makefile.tpl: Clean up experimental top level bootstrap support:
! 	note known problems; set CONFIG_SHELL; don't set BUILD_CC; relocate
! 	prev-gcc in configure- targets as well as all- targets.
! 	* Makefile.in: Regenerate.
! 
! 2004-03-21  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* compile: New file imported from automake.
! 
! 2004-03-17  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* configure.in: Remove symbolic link section.
! 	* configure: Regenerate.
! 	* Makefile.tpl (links): Remove.
! 	* Makefile.in: Regenerate.
! 
! 2004-03-15  Paolo Bonzini  <bonzini@gnu.org>
! 	    Nathanael Nerode  <neroden@gcc.gnu.org>
! 
! 	* configure.in (DEFAULT_YACC, DEFAULT_M4, DEFAULT_LEX):
! 	Set with AC_CHECK_PROGS.
! 	* configure.in: Fix comment typo from last patch.
! 	* configure: Regenerate.
! 
! 2004-03-15  Nathanael Nerode  <neroden@gcc.gnu.org>
! 
! 	* Makefile.tpl: Introduce experimental top level bootstrap support.
! 	* Makefile.in: Regenerate.
! 	* configure.in: Introduce support for top level bootstrap.
! 	* configure: Regenerate.
! 
! 2004-03-12  Eric Botcazou  <ebotcazou@gcc.gnu.org>
! 	    Paolo Bonzini  <bonzini@gnu.org>
! 
! 	PR bootstrap/14522
! 	* configure.in: Cope with shells that do not support unquoted ^
! 	* configure: Regenerate.
! 
! 2004-03-11  Eric Botcazou  <ebotcazou@gcc.gnu.org>
! 	    Paolo Bonzini  <bonzini@gnu.org>
! 
! 	PR bootstrap/14522
! 	* configure.in: Cope with shells that do not support nesting
! 	quotes inside quoted backquote substitutions.
! 	* configure: Regenerate.
! 
! 2004-03-10  Andrew Pinski  <pinskia@physics.uc.edu>
! 
! 	PR bootstrap/14522
! 	* configure.in: Fix escaping of $.
! 	* configure: Regenerate.
! 
! 2004-03-11  Nathanael Nerode  <neroden@gcc.gnu.org>
! 
! 	* configure: Regenerate, since I forgot to while committing Paolo's
! 	changes.
! 
! 2004-03-08  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	PR ada/14131
! 	Move language detection to the top level.
! 	* configure.in: Find default values for the tools as
! 	soon as possible.  Disable ada if GNAT is not found.
! 	Emit error message about missing languages.  Expand
! 	--enable-languages=all for the gcc subdirectory.
! 
! 2004-03-10  Ben Elliston  <bje@gnu.org>
! 
! 	* MAINTAINERS: Update my email address.
  
  2004-03-05  David Edelsohn  <edelsohn@gnu.org>
  
***************
*** 78,125 ****
  	and disable libgcj.
  	* configure: Regenerated.
  
! 2004-02-25  Nathanael Nerode  <neroden@gcc.gnu.org>
  
! 	PR bootstrap/11932
! 	* mkinstalldirs: Update to version 2004-02-15.20
  
! 2004-02-25  Kelley Cook  <kcook@gcc.gnu.org>
  
  	* MAINTAINERS: Add myself to write-after-approval.
  
! 2004-02-22  Matthias Klose  <doko@debian.org>
  
! 	* config.guess: Update from version 2003-10-16 to 2004-02-16.
! 	* config.sub: Update from version 2003-11-03 to 2004-02-16.
  
  2004-02-20  Andrew Pinski  <pinskia@physics.uc.edu>
  
  	* MAINTAINERS: Add Nicola Pero and myself as libobjc
  	maintainers.
  
  2004-02-14  Jerry Quinn  <jlquinn@optonline.net>
  
  	* MAINTAINERS: Added myself to write-after-approval.
  
  2004-02-12  Kazu Hirata  <kazu@cs.umass.edu>
  
  	* MAINTAINERS: Alphabetize.
  
! 2004-02-04  Geoffrey Keating  <geoffk@apple.com>
  
! 	Partial merge from upstream:
! 	* ltmain.in: When setting IFS to '~', be careful about user
! 	arguments that contain '~'.
  
  2004-02-05  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
  
  	* configure.in: Don't pass --with-stabs on IRIX 5 either.
  	* configure: Regenerate.
  
  2004-01-19  Paolo Carlini  <pcarlini@suse.de>
  
  	* MAINTAINERS: Update my email address.
  
  2004-01-17  Volker Reichelt  <reichelt@igpm.rwth-aachen.de>
  
  	* MAINTAINERS: Remove entries without email address.
--- 1275,1403 ----
  	and disable libgcj.
  	* configure: Regenerated.
  
! 2004-03-01  Brian Booth  <bbooth@redhat.com>
  
! 	* MAINTAINERS: Add myself to write-after-approval.
  
! 2004-03-01  Paolo Bonzini  <bonzini@gnu.org>
  
  	* MAINTAINERS: Add myself to write-after-approval.
  
! 2004-02-28  Nathanael Nerode  <neroden@gcc.gnu.org>
  
! 	PR bootstrap/7087
! 	* Makefile.tpl: Guard XFOO sed statements better.
! 	* Makefile.tpl: Add dependency for configure-target-libada.
! 	* Makefile.in: Regenerate (incidentally fixes broken
! 	commit when libada-branch was merged).
! 
! 2004-02-25  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* MAINTAINERS: Add myself to write-after-approval.
  
  2004-02-20  Andrew Pinski  <pinskia@physics.uc.edu>
  
  	* MAINTAINERS: Add Nicola Pero and myself as libobjc
  	maintainers.
  
+ 2004-02-20  Andrew Cagney  <cagney@redhat.com>
+ 
+ 	* config.guess: Update from version 2003-10-16 to 2004-02-16.
+ 	* config.sub: Update from version 2003-11-03 to 2004-02-16.
+ 
+ 2004-02-19  Nathanael Nerode  <neroden@gcc.gnu.org>
+ 
+ 	PR bootstrap/11932
+ 	* mkinstalldirs, install-sh: Import from automake CVS HEAD.
+ 
  2004-02-14  Jerry Quinn  <jlquinn@optonline.net>
  
  	* MAINTAINERS: Added myself to write-after-approval.
  
+ 2004-02-14  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* MAINTAINERS: Added myself to write-after-approval.
+ 
+ 2004-02-13  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* MAINTAINERS: Move Steve Chamberlain to write-after-approval.  Move
+ 	some OS port maintainers to OS port maintainers section.
+ 
+ 2004-02-13  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* MAINTAINERS: Add self.
+ 
  2004-02-12  Kazu Hirata  <kazu@cs.umass.edu>
  
  	* MAINTAINERS: Alphabetize.
  
! 2004-02-12  Paolo Bonzini  <bonzini@gnu.org>
  
! 	* MAINTAINERS: Remove myself.
! 
! 2004-02-11  David Edelsohn  <edelsohn@gnu.org>
! 
! 	* configure.in (powerpc-*-aix*): Add target-libada to noconfigdirs.
! 	(rs6000-*-aix*): Same.
! 	* configure: Regenerate.
! 
! 2004-02-11  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* configure.in (host): Add in missing $noconfigdirs to defines.
! 	* configure: Regenerate.
! 
! 2004-02-10  Arnaud Charlet  <charlet@act-europe.fr>,
! 	    Nathanael Nerode  <neroden@gcc.gnu.org>
! 
! 	PR ada/6637, PR ada/5911
! 	Merge with libada-branch:
! 	* configure.in, Makefile.tpl, Makefile.def: Add target-libada,
! 	with appropriate dependencies. Add --enable-libada configure switch.
! 	* configure, Makefile.in: Regenerate.
! 
! 2004-02-09  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* MAINTAINERS: Add myself to write-after-approval.
  
  2004-02-05  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
  
  	* configure.in: Don't pass --with-stabs on IRIX 5 either.
  	* configure: Regenerate.
  
+ 2004-02-04  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	Merge from upstream:
+ 
+ 	* ltmain.in: When setting IFS to '~', be careful about user
+ 	arguments that contain '~'.
+ 
+ 	2004-02-04  Peter O'Gorman  <peter@pogma.com>
+ 
+ 	* ltmain.in (infer_tag): Move tag inferrence to a shell function.
+ 	Also test $base_compile against $CC with escaped arguments. Bug
+ 	reported by Geoff Keating <geoffk@apple.com>.
+ 
+ 2004-02-04  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* MAINTAINERS: Remove i960 port.
+ 
+ 2004-01-23  DJ Delorie  <dj@redhat.com>
+ 
+ 	* Makefile.def (target_modules) [libiberty]: Don't stage.
+ 	* Makefile.in: Rebuilt.
+ 
+ 2004-01-20  Caroline Tice  <ctice@apple.com>
+ 
+ 	* MAINTAINERS: Add myself to write-after-approval.
+ 
  2004-01-19  Paolo Carlini  <pcarlini@suse.de>
  
  	* MAINTAINERS: Update my email address.
  
+ 2004-01-18  James A. Morrison  <ja2morri@uwaterloo.ca>
+ 
+ 	* MAINTAINERS: Add myself to write-after-approval.
+ 
  2004-01-17  Volker Reichelt  <reichelt@igpm.rwth-aachen.de>
  
  	* MAINTAINERS: Remove entries without email address.
***************
*** 189,195 ****
  	* MAINTAINERS: Remove the mn10200 maintainer.
  
  2003-12-21  Bernardo Innocenti  <bernie@develer.com>
!  
   	* configure.in (*-*-uclinux): Exclude newlib, libgloss and rda.
   	* configure: Regenerated.
  
--- 1467,1473 ----
  	* MAINTAINERS: Remove the mn10200 maintainer.
  
  2003-12-21  Bernardo Innocenti  <bernie@develer.com>
! 
   	* configure.in (*-*-uclinux): Exclude newlib, libgloss and rda.
   	* configure: Regenerated.
  
***************
*** 238,245 ****
  
  2003-11-14  Arnaud Charlet  <charlet@act-europe.fr>
  
!         * Makefile.tpl (EXTRA_GCC_FLAGS): Pass BOOT_ADAFLAGS.
!         * Makefile.in: Regenerate.
  
  2003-11-03  Ulrich Weigand  <uweigand@de.ibm.com>
  
--- 1516,1523 ----
  
  2003-11-14  Arnaud Charlet  <charlet@act-europe.fr>
  
! 	* Makefile.tpl (EXTRA_GCC_FLAGS): Pass BOOT_ADAFLAGS.
! 	* Makefile.in: Regenerate.
  
  2003-11-03  Ulrich Weigand  <uweigand@de.ibm.com>
  
***************
*** 387,393 ****
  2003-09-04  Robert Millan  <robertmh@gnu.org>
  
  	* configure.in: Match GNU/KFreeBSD with new kfreebsd*-gnu triplet.
! 	
  2003-09-02  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
  
  	* configure.in: Ensure arguments to sed are properly spaced.
--- 1665,1671 ----
  2003-09-04  Robert Millan  <robertmh@gnu.org>
  
  	* configure.in: Match GNU/KFreeBSD with new kfreebsd*-gnu triplet.
! 
  2003-09-02  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
  
  	* configure.in: Ensure arguments to sed are properly spaced.
***************
*** 426,432 ****
  	* configure.in: When testing with_libs and with_headers, treat
  	'no' as unset.  Based on a patch by Dan Kegel <dank@kegel.com>.
  	* configure: Regenerate.
! 	
  	* configure.in (TOPLEVEL_CONFIGURE_ARGUMENTS): Quote properly for
  	make, shell, etc.
  	(baseargs): Likewise.
--- 1704,1710 ----
  	* configure.in: When testing with_libs and with_headers, treat
  	'no' as unset.  Based on a patch by Dan Kegel <dank@kegel.com>.
  	* configure: Regenerate.
! 
  	* configure.in (TOPLEVEL_CONFIGURE_ARGUMENTS): Quote properly for
  	make, shell, etc.
  	(baseargs): Likewise.
***************
*** 445,452 ****
  
  	* config-ml.in, symlink-tree: Add license.
  
! 2003-08-03  Richard Stallman  <rms@gnu.org> 
!             Eben Moglen  <moglen@columbia.edu>
  
  	* README.SCO: New file.
  
--- 1723,1730 ----
  
  	* config-ml.in, symlink-tree: Add license.
  
! 2003-08-03  Richard Stallman  <rms@gnu.org>
! 	    Eben Moglen  <moglen@columbia.edu>
  
  	* README.SCO: New file.
  
diff -Nrcpad gcc-3.4.3/ChangeLog.tree-ssa gcc-4.0.0/ChangeLog.tree-ssa
*** gcc-3.4.3/ChangeLog.tree-ssa	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/ChangeLog.tree-ssa	Thu May 13 06:39:06 2004
***************
*** 0 ****
--- 1,110 ----
+ 2004-05-03  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* configure.in (GMP checking): s/save_CFLAGS/saved_CFLAGS.
+ 	* configure: Regenerate.
+ 
+ 2004-04-22  Loren J. Rittle <ljrittle@acm.org>
+ 
+ 	* configure.in (*-*-freebsd*): Use with_gmp to "Avoid crusty gmp.h."
+ 	* configure: Rebuilt (with autoconf version 2.13).
+ 
+ 2004-04-17  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* Makefile.tmp (EXTRA_HOST_FLAGS): Remove GMPLIBS and GMPINC.
+ 	(configure-gcc): Set GMPLIBS and GMPINC.
+ 	* Makefile.in: Regenerate.
+ 
+ 2004-04-14  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* Makefile.tmp (HOST_GMPLIBS, HOST_GMPINC): New variables.
+ 	(EXTRA_HOST_FLAGS): Pass them.
+ 	* configure.in: Add check for GMP.  Disable languages if not found.
+ 	* Makefile.in, configure: Regenrate.
+ 
+ 2004-03-29  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* configure.in: Set with_libbansshee to yes by default.
+ 	* configure: Regenerate.
+ 
+ 2004-03-28  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* configure.in: Fix handling of --without-libbanshee.
+ 	* configure: Regenerate.
+ 
+ 2004-03-26  Nathanael Nerode  <neroden@gcc.gnu.org>
+ 
+ 	* configure.in: Add support for --without-libbanshee.
+ 	* configure: Regenerated.
+ 
+ 2004-02-17  Brian Booth  <bbooth@redhat.com>
+ 
+ 	* MAINTAINERS.tree-ssa: Add self to write after approval.
+ 
+ 2004-02-13  Loren J. Rittle <ljrittle@acm.org>
+ 
+ 	* configure.in (*-*-freebsd*): Avoid crusty gmp.h.
+ 	(alpha*-*-*freebsd*, i[[3456789]]86-*-*freebsd*): Merge into above.
+ 	* configure: Rebuilt (with autoconf version 2.13).
+ 
+ 2003-10-22  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* configure.in: Add support for "--disable-libmudflap" option.
+ 	* configure: Regenerated.
+ 
+ 2003-09-22  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* MAINTAINERS.tree-ssa: Add Andrew MacLeod as global maintainer for
+ 	the branch.
+ 
+ 2003-08-23  Paul Brook  <paul@nowt.org>
+ 
+ 	* Makefile.in: Regenerate.
+ 
+ 2003-07-26  Paul Brook  <paul@nowt.org>
+ 
+ 	* Makefile.def: Add libgfortran and GFORTRAN_FOR_TARGET.
+ 	* Makefile.tmp: Ditto.
+ 	* configure.in: Ditto.
+ 	* depcomp: New file.
+ 	* maintainer-scripts/gcc_release: Add gcc-fortran.
+ 	* maintainer-scripts/snapshot-README: Ditto.
+ 	* maintainer-scripts/snapshot-index.html: Ditto.
+ 	* libgfortran: New target library.
+ 
+ 2003-06-05  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* Makefile.in: Regenerated to activate libmudflap builds.
+ 
+ 2003-04-25  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* MAINTAINERS.tree-ssa: New file.
+ 
+ 2003-01-29  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* configure.in: Use ac_configure_args for libbanshee option
+ 	* configure: regen.
+ 
+ 2002-11-27  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.tpl (all-gcc, all-bootstrap): Add dependency on 
+ 	all-libbanshee.
+ 	* Makefile.in: Regenerate.
+ 
+ 2002-11-25  Daniel Berlin  <dberlin@dberlin.org>
+ 	
+ 	* Makefile.def: Diego already did the libmudflap moving in a merge,
+ 	so remove the extra i added.
+ 	* Makefile.in: Regenerate.
+ 
+ 2002-11-24  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* configure.in: Add libbanshee related stuff.
+ 	* Makefile.in: Regenerate from Makefile.def.
+ 	* Makefile.def: Move libmudflap stuff to here, where it belongs.
+ 	Add libbanshee stuff.
+ 	* Makefile.tpl: Add libbanshee stuff.
+ 
+ 2002-08-12  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* Makefile.in (target-libmudflap): Add libmudflap-related targets.
+ 	* configure.in (target_libs): Ditto.
diff -Nrcpad gcc-3.4.3/INSTALL/binaries.html gcc-4.0.0/INSTALL/binaries.html
*** gcc-3.4.3/INSTALL/binaries.html	Fri Nov  5 04:14:12 2004
--- gcc-4.0.0/INSTALL/binaries.html	Thu Apr 21 07:04:15 2005
***************
*** 8,14 ****
  <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
  <!--
  Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
! 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
  
     Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.2 or
--- 8,14 ----
  <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
  <!--
  Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
! 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
  
     Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.2 or
*************** IRIX 6.5,
*** 91,97 ****
  Digital UNIX 4.0D and 5.1,
  GNU/Linux (i386),
  HP-UX 10.20, 11.00, and 11.11, and
! Solaris/SPARC 2.5.1, 2.6, 2.7, 8, and 9,
  
       <li><a href="http://www.openpkg.org/">OpenPKG</a> offers binaries for quite a
  number of platforms. 
--- 91,97 ----
  Digital UNIX 4.0D and 5.1,
  GNU/Linux (i386),
  HP-UX 10.20, 11.00, and 11.11, and
! Solaris/SPARC 2.5.1, 2.6, 7, 8, and 9.
  
       <li><a href="http://www.openpkg.org/">OpenPKG</a> offers binaries for quite a
  number of platforms. 
diff -Nrcpad gcc-3.4.3/INSTALL/build.html gcc-4.0.0/INSTALL/build.html
*** gcc-3.4.3/INSTALL/build.html	Fri Nov  5 04:14:11 2004
--- gcc-4.0.0/INSTALL/build.html	Thu Apr 21 07:04:15 2005
***************
*** 8,14 ****
  <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
  <!--
  Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
! 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
  
     Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.2 or
--- 8,14 ----
  <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
  <!--
  Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
! 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
  
     Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.2 or
*************** around this, by choosing <code>BOOT_CFLA
*** 132,137 ****
--- 132,142 ----
  stage1 compiler that were miscompiled, or by using <span class="samp">make
  bootstrap4</span> to increase the number of stages of bootstrap.
  
+    <p>Note that using non-standard <code>CFLAGS</code> can cause bootstrap to fail in
+ <span class="file">libiberty</span>, if these trigger a warning with the new compiler.  For
+ example using <span class="samp">-O2 -g -mcpu=i686</span> on <code>i686-pc-linux-gnu</code> will
+ cause bootstrap failure as <span class="option">-mcpu=</span> is deprecated in 3.4.0 and above.
+ 
     <p>If you used the flag <span class="option">--enable-languages=...</span> to restrict
  the compilers to be built, only those you've actually enabled will be
  built.  This will of course only build those runtime libraries, for
*************** and has a sufficiently recent version; i
*** 243,271 ****
  installed, the build will fail unless <span class="option">--enable-languages</span> is
  used to disable building the Ada front end.
  
-    <p>At the moment, the GNAT library and several tools for GNAT are not built
- by <span class="samp">make bootstrap</span>.  For a native build, you have to invoke
- <span class="samp">make gnatlib_and_tools</span> in the <var>objdir</var><span class="file">/gcc</span>
- subdirectory before proceeding with the next steps. 
- For a cross build, you need to invoke
- <span class="samp">make gnatlib cross-gnattools ada.all.cross</span>.  For a canadian
- cross you only need to invoke <span class="samp">make cross-gnattools</span>; the GNAT
- library would be the same as the one built for the cross compiler.
- 
-    <p>For example, you can build a native Ada compiler by issuing the
- following commands (assuming <span class="command">make</span> is GNU make):
- 
- <pre class="smallexample">         cd <var>objdir</var>
-          <var>srcdir</var>/configure --enable-languages=c,ada
-          cd <var>objdir</var>
-          make bootstrap
-          cd gcc
-          make gnatlib_and_tools
-          cd ..
- </pre>
-    <p>Currently, when compiling the Ada front end, you cannot use the parallel
- build feature described in the previous section.
- 
  <h3 class="section"><a name="TOC4"></a>0.5 Building with profile feedback</h3>
  
  <p>It is possible to use profile feedback to optimize the compiler itself.  This
--- 248,253 ----
diff -Nrcpad gcc-3.4.3/INSTALL/configure.html gcc-4.0.0/INSTALL/configure.html
*** gcc-3.4.3/INSTALL/configure.html	Fri Nov  5 04:14:11 2004
--- gcc-4.0.0/INSTALL/configure.html	Thu Apr 21 07:04:15 2005
***************
*** 8,14 ****
  <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
  <!--
  Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
! 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
  
     Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.2 or
--- 8,14 ----
  <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
  <!--
  Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
! 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
  
     Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.2 or
*************** provide a configure target when configur
*** 102,108 ****
  
       <li><var>target</var> must be specified as <span class="option">--target=</span><var>target</var>
  when configuring a cross compiler; examples of valid targets would be
! i960-rtems, m68k-coff, sh-elf, etc.
  
       <li>Specifying just <var>target</var> instead of <span class="option">--target=</span><var>target</var>
  implies that the host defaults to <var>target</var>. 
--- 102,108 ----
  
       <li><var>target</var> must be specified as <span class="option">--target=</span><var>target</var>
  when configuring a cross compiler; examples of valid targets would be
! m68k-coff, sh-elf, etc.
  
       <li>Specifying just <var>target</var> instead of <span class="option">--target=</span><var>target</var>
  implies that the host defaults to <var>target</var>. 
*************** the installation directory for G++ heade
*** 169,188 ****
       </dl>
  
       <br><dt><code>--program-prefix=</code><var>prefix</var><dd>GCC supports some transformations of the names of its programs when
! installing them. This option prepends <var>prefix</var> to the names of
! programs to install in <var>bindir</var> (see above). For example, specifying
  <span class="option">--program-prefix=foo-</span> would result in <span class="samp">gcc</span>
  being installed as <span class="file">/usr/local/bin/foo-gcc</span>.
  
       <br><dt><code>--program-suffix=</code><var>suffix</var><dd>Appends <var>suffix</var> to the names of programs to install in <var>bindir</var>
! (see above). For example, specifying <span class="option">--program-suffix=-3.1</span>
  would result in <span class="samp">gcc</span> being installed as
  <span class="file">/usr/local/bin/gcc-3.1</span>.
  
       <br><dt><code>--program-transform-name=</code><var>pattern</var><dd>Applies the <span class="samp">sed</span> script <var>pattern</var> to be applied to the names
! of programs to install in <var>bindir</var> (see above). <var>pattern</var> has to
  consist of one or more basic <span class="samp">sed</span> editing commands, separated by
! semicolons. For example, if you want the <span class="samp">gcc</span> program name to be
  transformed to the installed program <span class="file">/usr/local/bin/myowngcc</span> and
  the <span class="samp">g++</span> program name to be transformed to
  <span class="file">/usr/local/bin/gspecial++</span> without changing other program names,
--- 169,188 ----
       </dl>
  
       <br><dt><code>--program-prefix=</code><var>prefix</var><dd>GCC supports some transformations of the names of its programs when
! installing them.  This option prepends <var>prefix</var> to the names of
! programs to install in <var>bindir</var> (see above).  For example, specifying
  <span class="option">--program-prefix=foo-</span> would result in <span class="samp">gcc</span>
  being installed as <span class="file">/usr/local/bin/foo-gcc</span>.
  
       <br><dt><code>--program-suffix=</code><var>suffix</var><dd>Appends <var>suffix</var> to the names of programs to install in <var>bindir</var>
! (see above).  For example, specifying <span class="option">--program-suffix=-3.1</span>
  would result in <span class="samp">gcc</span> being installed as
  <span class="file">/usr/local/bin/gcc-3.1</span>.
  
       <br><dt><code>--program-transform-name=</code><var>pattern</var><dd>Applies the <span class="samp">sed</span> script <var>pattern</var> to be applied to the names
! of programs to install in <var>bindir</var> (see above).  <var>pattern</var> has to
  consist of one or more basic <span class="samp">sed</span> editing commands, separated by
! semicolons.  For example, if you want the <span class="samp">gcc</span> program name to be
  transformed to the installed program <span class="file">/usr/local/bin/myowngcc</span> and
  the <span class="samp">g++</span> program name to be transformed to
  <span class="file">/usr/local/bin/gspecial++</span> without changing other program names,
*************** you could use the pattern
*** 191,197 ****
  to achieve this effect.
  
       <p>All three options can be combined and used together, resulting in more
! complex conversion patterns. As a basic rule, <var>prefix</var> (and
  <var>suffix</var>) are prepended (appended) before further transformations
  can happen with a special transformation script <var>pattern</var>.
  
--- 191,197 ----
  to achieve this effect.
  
       <p>All three options can be combined and used together, resulting in more
! complex conversion patterns.  As a basic rule, <var>prefix</var> (and
  <var>suffix</var>) are prepended (appended) before further transformations
  can happen with a special transformation script <var>pattern</var>.
  
*************** transformation is explicitly asked for b
*** 201,208 ****
  
       <p>For native builds, some of the installed programs are also installed
  with the target alias in front of their name, as in
! <span class="samp">i686-pc-linux-gnu-gcc</span>. All of the above transformations happen
! before the target alias is prepended to the name - so, specifying
  <span class="option">--program-prefix=foo-</span> and <span class="option">program-suffix=-3.1</span>, the
  resulting binary would be installed as
  <span class="file">/usr/local/bin/i686-pc-linux-gnu-foo-gcc-3.1</span>.
--- 201,208 ----
  
       <p>For native builds, some of the installed programs are also installed
  with the target alias in front of their name, as in
! <span class="samp">i686-pc-linux-gnu-gcc</span>.  All of the above transformations happen
! before the target alias is prepended to the name&mdash;so, specifying
  <span class="option">--program-prefix=foo-</span> and <span class="option">program-suffix=-3.1</span>, the
  resulting binary would be installed as
  <span class="file">/usr/local/bin/i686-pc-linux-gnu-foo-gcc-3.1</span>.
*************** programs&mdash;perhaps many others.  (GC
*** 233,239 ****
  another directory which is based on the <span class="option">--prefix</span> value.)
  
       <p>Both the local-prefix include directory and the GCC-prefix include
! directory are part of GCC's "system include" directories.  Although these
  two directories are not fixed, they need to be searched in the proper
  order for the correct processing of the include_next directive.  The
  local-prefix include directory is searched before the GCC-prefix
--- 233,239 ----
  another directory which is based on the <span class="option">--prefix</span> value.)
  
       <p>Both the local-prefix include directory and the GCC-prefix include
! directory are part of GCC's &ldquo;system include&rdquo; directories.  Although these
  two directories are not fixed, they need to be searched in the proper
  order for the correct processing of the include_next directive.  The
  local-prefix include directory is searched before the GCC-prefix
*************** installing GCC creates the directory.
*** 283,301 ****
  
       <br><dt><code>--enable-shared[=</code><var>package</var><code>[,...]]</code><dd>Build shared versions of libraries, if shared libraries are supported on
  the target platform.  Unlike GCC 2.95.x and earlier, shared libraries
! are enabled by default on all platforms that support shared libraries,
! except for <span class="samp">libobjc</span> which is built as a static library only by
! default.
  
       <p>If a list of packages is given as an argument, build shared libraries
  only for the listed packages.  For other packages, only static libraries
  will be built.  Package names currently recognized in the GCC tree are
  <span class="samp">libgcc</span> (also known as <span class="samp">gcc</span>), <span class="samp">libstdc++</span> (not
! <span class="samp">libstdc++-v3</span>), <span class="samp">libffi</span>, <span class="samp">zlib</span>, <span class="samp">boehm-gc</span> and
! <span class="samp">libjava</span>.  Note that <span class="samp">libobjc</span> does not recognize itself by
! any name, so, if you list package names in <span class="option">--enable-shared</span>,
! you will only get static Objective-C libraries.  <span class="samp">libf2c</span> and
! <span class="samp">libiberty</span> do not support shared libraries at all.
  
       <p>Use <span class="option">--disable-shared</span> to build only static libraries.  Note that
  <span class="option">--disable-shared</span> does not accept a list of package names as
--- 283,297 ----
  
       <br><dt><code>--enable-shared[=</code><var>package</var><code>[,...]]</code><dd>Build shared versions of libraries, if shared libraries are supported on
  the target platform.  Unlike GCC 2.95.x and earlier, shared libraries
! are enabled by default on all platforms that support shared libraries.
  
       <p>If a list of packages is given as an argument, build shared libraries
  only for the listed packages.  For other packages, only static libraries
  will be built.  Package names currently recognized in the GCC tree are
  <span class="samp">libgcc</span> (also known as <span class="samp">gcc</span>), <span class="samp">libstdc++</span> (not
! <span class="samp">libstdc++-v3</span>), <span class="samp">libffi</span>, <span class="samp">zlib</span>, <span class="samp">boehm-gc</span>,
! <span class="samp">ada</span>, <span class="samp">libada</span>, <span class="samp">libjava</span> and <span class="samp">libobjc</span>. 
! Note <span class="samp">libiberty</span> does not support shared libraries at all.
  
       <p>Use <span class="option">--disable-shared</span> to build only static libraries.  Note that
  <span class="option">--disable-shared</span> does not accept a list of package names as
*************** whether you use the GNU assembler.  On a
*** 322,336 ****
  <li><span class="samp">m68k-hp-hpux</span>
  <li><span class="samp">m68000-hp-hpux</span>
  <li><span class="samp">m68000-att-sysv</span>
- <li><var>any</var><span class="samp">-lynx-lynxos</span>
- <li><span class="samp">mips-</span><var>any</var>
  <li><span class="samp">sparc-sun-solaris2.</span><var>any</var>
  <li><span class="samp">sparc64-</span><var>any</var><span class="samp">-solaris2.</span><var>any</var>
  </ul>
  
       <p>On the systems listed above (except for the HP-PA, the SPARC, for ISC on
! the 386, and for <span class="samp">mips-sgi-irix5.*</span>), if you use the GNU assembler,
! you should also use the GNU linker (and specify <span class="option">--with-gnu-ld</span>).
  
       <br><dt><code><a name="with_002das"></a>--with-as=</code><var>pathname</var><dd>Specify that the
  compiler should use the assembler pointed to by <var>pathname</var>, rather
--- 318,330 ----
  <li><span class="samp">m68k-hp-hpux</span>
  <li><span class="samp">m68000-hp-hpux</span>
  <li><span class="samp">m68000-att-sysv</span>
  <li><span class="samp">sparc-sun-solaris2.</span><var>any</var>
  <li><span class="samp">sparc64-</span><var>any</var><span class="samp">-solaris2.</span><var>any</var>
  </ul>
  
       <p>On the systems listed above (except for the HP-PA, the SPARC, for ISC on
! the 386, if you use the GNU assembler, you should also use the GNU linker
! (and specify <span class="option">--with-gnu-ld</span>).
  
       <br><dt><code><a name="with_002das"></a>--with-as=</code><var>pathname</var><dd>Specify that the
  compiler should use the assembler pointed to by <var>pathname</var>, rather
*************** directory, where <var>libexec</var> defa
*** 342,348 ****
  <var>exec-prefix</var><span class="file">/libexec</span> and <var>exec-prefix</var> defaults to
  <var>prefix</var> which defaults to <span class="file">/usr/local</span> unless overridden by
  the <span class="option">--prefix=</span><var>pathname</var> switch described
! above. <var>target</var> is the target system triple, such as
  <span class="samp">sparc-sun-solaris2.7</span>, and <var>version</var> denotes the GCC
  version, such as 3.0. 
  <li>Check operating system specific directories (e.g. <span class="file">/usr/ccs/bin</span> on
--- 336,342 ----
  <var>exec-prefix</var><span class="file">/libexec</span> and <var>exec-prefix</var> defaults to
  <var>prefix</var> which defaults to <span class="file">/usr/local</span> unless overridden by
  the <span class="option">--prefix=</span><var>pathname</var> switch described
! above.  <var>target</var> is the target system triple, such as
  <span class="samp">sparc-sun-solaris2.7</span>, and <var>version</var> denotes the GCC
  version, such as 3.0. 
  <li>Check operating system specific directories (e.g. <span class="file">/usr/ccs/bin</span> on
*************** like C++ and Java.  The possibilities fo
*** 432,438 ****
  <dt><code>aix</code><dd>AIX thread support. 
  <br><dt><code>dce</code><dd>DCE thread support. 
  <br><dt><code>gnat</code><dd>Ada tasking support.  For non-Ada programs, this setting is equivalent
! to <span class="samp">single</span>. When used in conjunction with the Ada run time, it
  causes GCC to use the same thread primitives as Ada uses.  This option
  is necessary when using both Ada and the back end exception handling,
  which is the default for most Ada targets. 
--- 426,432 ----
  <dt><code>aix</code><dd>AIX thread support. 
  <br><dt><code>dce</code><dd>DCE thread support. 
  <br><dt><code>gnat</code><dd>Ada tasking support.  For non-Ada programs, this setting is equivalent
! to <span class="samp">single</span>.  When used in conjunction with the Ada run time, it
  causes GCC to use the same thread primitives as Ada uses.  This option
  is necessary when using both Ada and the back end exception handling,
  which is the default for most Ada targets. 
*************** which is the default for most Ada target
*** 440,451 ****
  that the file needed to support this configuration, <span class="file">gthr-mach.h</span>, is
  missing and thus this setting will cause a known bootstrap failure.) 
  <br><dt><code>no</code><dd>This is an alias for <span class="samp">single</span>. 
! <br><dt><code>posix</code><dd>Generic POSIX thread support. 
  <br><dt><code>rtems</code><dd>RTEMS thread support. 
  <br><dt><code>single</code><dd>Disable thread support, should work for all platforms. 
  <br><dt><code>solaris</code><dd>Sun Solaris 2 thread support. 
  <br><dt><code>vxworks</code><dd>VxWorks thread support. 
  <br><dt><code>win32</code><dd>Microsoft Win32 API thread support. 
  </dl>
  
       <br><dt><code>--with-cpu=</code><var>cpu</var><dd>Specify which cpu variant the compiler should generate code for by default. 
--- 434,447 ----
  that the file needed to support this configuration, <span class="file">gthr-mach.h</span>, is
  missing and thus this setting will cause a known bootstrap failure.) 
  <br><dt><code>no</code><dd>This is an alias for <span class="samp">single</span>. 
! <br><dt><code>posix</code><dd>Generic POSIX/Unix98 thread support. 
! <br><dt><code>posix95</code><dd>Generic POSIX/Unix95 thread support. 
  <br><dt><code>rtems</code><dd>RTEMS thread support. 
  <br><dt><code>single</code><dd>Disable thread support, should work for all platforms. 
  <br><dt><code>solaris</code><dd>Sun Solaris 2 thread support. 
  <br><dt><code>vxworks</code><dd>VxWorks thread support. 
  <br><dt><code>win32</code><dd>Microsoft Win32 API thread support. 
+ <br><dt><code>nks</code><dd>Novell Kernel Services thread support. 
  </dl>
  
       <br><dt><code>--with-cpu=</code><var>cpu</var><dd>Specify which cpu variant the compiler should generate code for by default. 
*************** missing and thus this setting will cause
*** 453,474 ****
  This option is only supported on some targets, including ARM, i386, PowerPC,
  and SPARC.
  
!      <br><dt><code>--with-schedule=</code><var>cpu</var><dt><code>--with-arch=</code><var>cpu</var><dt><code>--with-tune=</code><var>cpu</var><dt><code>--with-abi=</code><var>abi</var><dt><code>--with-float=</code><var>type</var><dd>These configure options provide default values for the <span class="option">-mschedule=</span>,
! <span class="option">-march=</span>, <span class="option">-mtune=</span>, and <span class="option">-mabi=</span> options and for
! <span class="option">-mhard-float</span> or <span class="option">-msoft-float</span>.  As with <span class="option">--with-cpu</span>,
! which switches will be accepted and acceptable values of the arguments depend
! on the target.
  
!      <br><dt><code>--enable-altivec</code><dd>Specify that the target supports AltiVec vector enhancements.  This
! option will adjust the ABI for AltiVec enhancements, as well as generate
! AltiVec code when appropriate.  This option is only available for
! PowerPC systems.
  
       <br><dt><code>--enable-__cxa_atexit</code><dd>Define if you want to use __cxa_atexit, rather than atexit, to
  register C++ destructors for local statics and global objects. 
  This is essential for fully standards-compliant handling of
! destructors, but requires __cxa_atexit in libc. This option is currently
! only available on systems with GNU libc. When enabled, this will cause
  <span class="option">-fuse-cxa-exit</span> to be passed by default.
  
       <br><dt><code>--enable-target-optspace</code><dd>Specify that target
--- 449,474 ----
  This option is only supported on some targets, including ARM, i386, PowerPC,
  and SPARC.
  
!      <br><dt><code>--with-schedule=</code><var>cpu</var><dt><code>--with-arch=</code><var>cpu</var><dt><code>--with-tune=</code><var>cpu</var><dt><code>--with-abi=</code><var>abi</var><dt><code>--with-fpu=</code><var>type</var><dt><code>--with-float=</code><var>type</var><dd>These configure options provide default values for the <span class="option">-mschedule=</span>,
! <span class="option">-march=</span>, <span class="option">-mtune=</span>, <span class="option">-mabi=</span>, and <span class="option">-mfpu=</span>
! options and for <span class="option">-mhard-float</span> or <span class="option">-msoft-float</span>.  As with
! <span class="option">--with-cpu</span>, which switches will be accepted and acceptable values
! of the arguments depend on the target.
  
!      <br><dt><code>--with-divide=</code><var>type</var><dd>Specify how the compiler should generate code for checking for
! division by zero.  This option is only supported on the MIPS target. 
! The possibilities for <var>type</var> are:
!           <dl>
! <dt><code>traps</code><dd>Division by zero checks use conditional traps (this is the default on
! systems that support conditional traps). 
! <br><dt><code>breaks</code><dd>Division by zero checks use the break instruction. 
! </dl>
  
       <br><dt><code>--enable-__cxa_atexit</code><dd>Define if you want to use __cxa_atexit, rather than atexit, to
  register C++ destructors for local statics and global objects. 
  This is essential for fully standards-compliant handling of
! destructors, but requires __cxa_atexit in libc.  This option is currently
! only available on systems with GNU libc.  When enabled, this will cause
  <span class="option">-fuse-cxa-exit</span> to be passed by default.
  
       <br><dt><code>--enable-target-optspace</code><dd>Specify that target
*************** addition, <span class="samp">libstdc++</
*** 515,523 ****
  <var>libdir</var> unless you overruled it by using
  <span class="option">--with-gxx-include-dir=</span><var>dirname</var>.  Using this option is
  particularly useful if you intend to use several versions of GCC in
! parallel. This is currently supported by <span class="samp">libf2c</span> and
! <span class="samp">libstdc++</span>, and is the default for <span class="samp">libobjc</span> which cannot be
! changed in this case.
  
       <br><dt><code>--enable-languages=</code><var>lang1</var><code>,</code><var>lang2</var><code>,...</code><dd>Specify that only a particular subset of compilers and
  their runtime libraries should be built.  For a list of valid values for
--- 515,529 ----
  <var>libdir</var> unless you overruled it by using
  <span class="option">--with-gxx-include-dir=</span><var>dirname</var>.  Using this option is
  particularly useful if you intend to use several versions of GCC in
! parallel.  This is currently supported by <span class="samp">libgfortran</span>,
! <span class="samp">libjava</span>, <span class="samp">libmudflap</span>, <span class="samp">libstdc++</span>, and <span class="samp">libobjc</span>.
! 
!      <br><dt><code>--with-java-home=</code><var>dirname</var><dd>This <span class="samp">libjava</span> option overrides the default value of the
! <span class="samp">java.home</span> system property.  It is also used to set
! <span class="samp">sun.boot.class.path</span> to <var>dirname</var><span class="file">/lib/rt.jar</span>.  By
! default <span class="samp">java.home</span> is set to <var>prefix</var> and
! <span class="samp">sun.boot.class.path</span> to
! <var>datadir</var><span class="file">/java/libgcj-</span><var>version</var><span class="file">.jar</span>.
  
       <br><dt><code>--enable-languages=</code><var>lang1</var><code>,</code><var>lang2</var><code>,...</code><dd>Specify that only a particular subset of compilers and
  their runtime libraries should be built.  For a list of valid values for
*************** their runtime libraries should be built.
*** 526,538 ****
       <pre class="smallexample">          grep language= */config-lang.in
       </pre>
       <p>Currently, you can use any of the following:
! <code>ada</code>, <code>c</code>, <code>c++</code>, <code>f77</code>, <code>java</code>, <code>objc</code>. 
  Building the Ada compiler has special requirements, see below.<br>
  If you do not pass this flag, all languages available in the <span class="file">gcc</span>
  sub-tree will be configured.  Re-defining <code>LANGUAGES</code> when calling
  <span class="samp">make bootstrap</span> <strong>does not</strong> work anymore, as those
  language sub-directories might not have been configured!
  
       <br><dt><code>--with-dwarf2</code><dd>Specify that the compiler should
  use DWARF 2 debugging information as the default.
  
--- 532,550 ----
       <pre class="smallexample">          grep language= */config-lang.in
       </pre>
       <p>Currently, you can use any of the following:
! <code>ada</code>, <code>c</code>, <code>c++</code>, <code>f77</code>, <code>f95</code>, <code>java</code>,
! <code>objc</code>, <code>obj-c++</code>. 
  Building the Ada compiler has special requirements, see below.<br>
  If you do not pass this flag, all languages available in the <span class="file">gcc</span>
  sub-tree will be configured.  Re-defining <code>LANGUAGES</code> when calling
  <span class="samp">make bootstrap</span> <strong>does not</strong> work anymore, as those
  language sub-directories might not have been configured!
  
+      <br><dt><code>--disable-libada</code><dd>Specify that the run-time libraries and tools used by GNAT should not
+ be built.  This can be useful for debugging, or for compatibility with
+ previous Ada build procedures, when it was required to explicitly
+ do a <span class="samp">make -C gcc gnatlib_and_tools</span>.
+ 
       <br><dt><code>--with-dwarf2</code><dd>Specify that the compiler should
  use DWARF 2 debugging information as the default.
  
*************** to look up installations paths in the re
*** 542,548 ****
       <pre class="smallexample">          <code>HKEY_LOCAL_MACHINE\SOFTWARE\Free Software Foundation\</code><var>key</var>
       </pre>
       <p><var>key</var> defaults to GCC version number, and can be overridden by the
! <span class="option">--enable-win32-registry=</span><var>key</var> option. Vendors and distributors
  who use custom installers are encouraged to provide a different key,
  perhaps one comprised of vendor name and GCC version number, to
  avoid conflict with existing installations.  This feature is enabled
--- 554,560 ----
       <pre class="smallexample">          <code>HKEY_LOCAL_MACHINE\SOFTWARE\Free Software Foundation\</code><var>key</var>
       </pre>
       <p><var>key</var> defaults to GCC version number, and can be overridden by the
! <span class="option">--enable-win32-registry=</span><var>key</var> option.  Vendors and distributors
  who use custom installers are encouraged to provide a different key,
  perhaps one comprised of vendor name and GCC version number, to
  avoid conflict with existing installations.  This feature is enabled
*************** compiler and may only work properly if y
*** 568,593 ****
  with GCC.  This is on by default when building from CVS or snapshots,
  but off for releases.  More control over the checks may be had by
  specifying <var>list</var>; the categories of checks available are
! <span class="samp">misc</span>, <span class="samp">tree</span>, <span class="samp">gc</span>, <span class="samp">rtl</span>, <span class="samp">rtlflag</span>,
! <span class="samp">fold</span>, <span class="samp">gcac</span> and <span class="samp">valgrind</span>.  The check <span class="samp">valgrind</span>
! requires the external <span class="command">valgrind</span> simulator, available from
! <a href="http://valgrind.kde.org/">http://valgrind.kde.org/</a>.  The default when <var>list</var> is
! not specified is <span class="samp">misc,tree,gc,rtlflag</span>; the checks <span class="samp">rtl</span>,
! <span class="samp">gcac</span> and <span class="samp">valgrind</span> are very expensive.
  
       <br><dt><code>--enable-coverage</code><dt><code>--enable-coverage=</code><var>level</var><dd>With this option, the compiler is built to collect self coverage
! information, every time it is run. This is for internal development
! purposes, and only works when the compiler is being built with gcc. The
  <var>level</var> argument controls whether the compiler is built optimized or
! not, values are <span class="samp">opt</span> and <span class="samp">noopt</span>. For coverage analysis you
  want to disable optimization, for performance analysis you want to
! enable optimization. When coverage is enabled, the default level is
  without optimization.
  
       <br><dt><code>--enable-gather-detailed-mem-stats</code><dd>When this option is specified more detailed information on memory
  allocation is gathered.  This information is printed when using
  <span class="option">-fmem-report</span>.
  
       <br><dt><code>--enable-nls</code><dt><code>--disable-nls</code><dd>The <span class="option">--enable-nls</span> option enables Native Language Support (NLS),
  which lets GCC output diagnostics in languages other than American
  English.  Native Language Support is enabled by default if not doing a
--- 580,618 ----
  with GCC.  This is on by default when building from CVS or snapshots,
  but off for releases.  More control over the checks may be had by
  specifying <var>list</var>; the categories of checks available are
! <span class="samp">release</span>, <span class="samp">assert</span>, <span class="samp">misc</span>, <span class="samp">tree</span>, <span class="samp">gc</span>,
! <span class="samp">rtl</span>, <span class="samp">rtlflag</span>, <span class="samp">fold</span>, <span class="samp">gcac</span> and
! <span class="samp">valgrind</span>.  The <span class="samp">release</span> category enables only those checks
! suitable for release builds, currently this is just <span class="samp">assert</span>.  The
! check <span class="samp">valgrind</span> requires the external <span class="command">valgrind</span>
! simulator, available from <a href="http://valgrind.kde.org/">http://valgrind.kde.org/</a>.  The checks
! <span class="samp">rtl</span>, <span class="samp">gcac</span> and <span class="samp">valgrind</span> are very expensive.  The
! default when <var>list</var> is not specified is
! <span class="samp">assert,misc,tree,gc,rtlflag</span>.  That is also the default for
! development builds, when <span class="samp">--enable-checking</span> is not specified.  For
! release builds the default, when <span class="samp">--enable-checking</span> is not given,
! is <span class="samp">release</span>.  To disable all checking, <span class="samp">--disable-checking</span>
! must be explicitly requested.  Disabling assertions will make the
! compiler slightly faster but increase the risk of undetected internal
! errors causing wrong code to be generated.
  
       <br><dt><code>--enable-coverage</code><dt><code>--enable-coverage=</code><var>level</var><dd>With this option, the compiler is built to collect self coverage
! information, every time it is run.  This is for internal development
! purposes, and only works when the compiler is being built with gcc.  The
  <var>level</var> argument controls whether the compiler is built optimized or
! not, values are <span class="samp">opt</span> and <span class="samp">noopt</span>.  For coverage analysis you
  want to disable optimization, for performance analysis you want to
! enable optimization.  When coverage is enabled, the default level is
  without optimization.
  
       <br><dt><code>--enable-gather-detailed-mem-stats</code><dd>When this option is specified more detailed information on memory
  allocation is gathered.  This information is printed when using
  <span class="option">-fmem-report</span>.
  
+      <br><dt><code>--with-gc</code><dt><code>--with-gc=</code><var>choice</var><dd>With this option you can specify the garbage collector implementation
+ used during the compilation process.  <var>choice</var> can be one of
+ <span class="samp">page</span> and <span class="samp">zone</span>, where <span class="samp">page</span> is the default.
+ 
       <br><dt><code>--enable-nls</code><dt><code>--disable-nls</code><dd>The <span class="option">--enable-nls</span> option enables Native Language Support (NLS),
  which lets GCC output diagnostics in languages other than American
  English.  Native Language Support is enabled by default if not doing a
*************** omitted from <span class="file">libgcc.a
*** 657,663 ****
  <span class="samp">newlib</span>. 
  </dl>
  
! <h4 class="subheading"><a name="TOC3"></a>Java-Specific Options</h4>
  
  <p>The following option applies to the build of the Java front end.
  
--- 682,702 ----
  <span class="samp">newlib</span>. 
  </dl>
  
! <h4 class="subheading"><a name="TOC3"></a>Fortran-specific Option</h4>
! 
! <p>The following options apply to the build of the Fortran front end.
! 
!      <dl>
! <dt><code>--with-gmp=</code><var>pathname</var><dt><code>--with-mpfr=</code><var>pathname</var><dt><code>--with-gmp-dir=</code><var>pathname</var><dt><code>--with-mpfr-dir=</code><var>pathname</var><dd>If you don't have GMP (the GNU Multiple Precision library) and the MPFR
! Libraries installed in a standard location and you want to build the Fortran
! front-end, you can explicitly specify the directory where they are installed
! (<span class="samp">--with-gmp=gmpinstalldir</span>, <span class="samp">--with-mpfr=mpfrinstalldir</span>) or where
! you built them without installing (<span class="samp">--with-gmp-dir=gmpbuilddir</span>,
! <span class="samp">--with-mpfr-dir=gmpbuilddir</span>).
! 
!    </dl>
! 
! <h4 class="subheading"><a name="TOC4"></a>Java-Specific Options</h4>
  
  <p>The following option applies to the build of the Java front end.
  
*************** you may use <span class="option">--enabl
*** 677,720 ****
  
     <p>The following options apply to building <span class="samp">libgcj</span>.
  
! <h5 class="subsubheading"><a name="TOC4"></a>General Options</h5>
  
       <dl>
  <dt><code>--disable-getenv-properties</code><dd>Don't set system properties from <span class="env">GCJ_PROPERTIES</span>.
  
!      <br><dt><code>--enable-hash-synchronization</code><dd>Use a global hash table for monitor locks. Ordinarily,
  <span class="samp">libgcj</span>'s <span class="samp">configure</span> script automatically makes
! the correct choice for this option for your platform. Only use
  this if you know you need the library to be configured differently.
  
!      <br><dt><code>--enable-interpreter</code><dd>Enable the Java interpreter. The interpreter is automatically
! enabled by default on all platforms that support it. This option
  is really only useful if you want to disable the interpreter
  (using <span class="option">--disable-interpreter</span>).
  
!      <br><dt><code>--disable-java-net</code><dd>Disable java.net. This disables the native part of java.net only,
  using non-functional stubs for native method implementations.
  
       <br><dt><code>--disable-jvmpi</code><dd>Disable JVMPI support.
  
       <br><dt><code>--with-ecos</code><dd>Enable runtime eCos target support.
  
!      <br><dt><code>--without-libffi</code><dd>Don't use <span class="samp">libffi</span>. This will disable the interpreter and JNI
  support as well, as these require <span class="samp">libffi</span> to work.
  
       <br><dt><code>--enable-libgcj-debug</code><dd>Enable runtime debugging code.
  
       <br><dt><code>--enable-libgcj-multifile</code><dd>If specified, causes all <span class="file">.java</span> source files to be
  compiled into <span class="file">.class</span> files in one invocation of
! <span class="samp">gcj</span>. This can speed up build time, but is more
! resource-intensive. If this option is unspecified or
  disabled, <span class="samp">gcj</span> is invoked once for each <span class="file">.java</span>
  file to compile into a <span class="file">.class</span> file.
  
       <br><dt><code>--with-libiconv-prefix=DIR</code><dd>Search for libiconv in <span class="file">DIR/include</span> and <span class="file">DIR/lib</span>.
  
!      <br><dt><code>--enable-sjlj-exceptions</code><dd>Force use of <code>builtin_setjmp</code> for exceptions. <span class="samp">configure</span>
! ordinarily picks the correct value based on the platform. Only use
  this option if you are sure you need a different setting.
  
       <br><dt><code>--with-system-zlib</code><dd>Use installed <span class="samp">zlib</span> rather than that included with GCC.
--- 716,759 ----
  
     <p>The following options apply to building <span class="samp">libgcj</span>.
  
! <h5 class="subsubheading"><a name="TOC5"></a>General Options</h5>
  
       <dl>
  <dt><code>--disable-getenv-properties</code><dd>Don't set system properties from <span class="env">GCJ_PROPERTIES</span>.
  
!      <br><dt><code>--enable-hash-synchronization</code><dd>Use a global hash table for monitor locks.  Ordinarily,
  <span class="samp">libgcj</span>'s <span class="samp">configure</span> script automatically makes
! the correct choice for this option for your platform.  Only use
  this if you know you need the library to be configured differently.
  
!      <br><dt><code>--enable-interpreter</code><dd>Enable the Java interpreter.  The interpreter is automatically
! enabled by default on all platforms that support it.  This option
  is really only useful if you want to disable the interpreter
  (using <span class="option">--disable-interpreter</span>).
  
!      <br><dt><code>--disable-java-net</code><dd>Disable java.net.  This disables the native part of java.net only,
  using non-functional stubs for native method implementations.
  
       <br><dt><code>--disable-jvmpi</code><dd>Disable JVMPI support.
  
       <br><dt><code>--with-ecos</code><dd>Enable runtime eCos target support.
  
!      <br><dt><code>--without-libffi</code><dd>Don't use <span class="samp">libffi</span>.  This will disable the interpreter and JNI
  support as well, as these require <span class="samp">libffi</span> to work.
  
       <br><dt><code>--enable-libgcj-debug</code><dd>Enable runtime debugging code.
  
       <br><dt><code>--enable-libgcj-multifile</code><dd>If specified, causes all <span class="file">.java</span> source files to be
  compiled into <span class="file">.class</span> files in one invocation of
! <span class="samp">gcj</span>.  This can speed up build time, but is more
! resource-intensive.  If this option is unspecified or
  disabled, <span class="samp">gcj</span> is invoked once for each <span class="file">.java</span>
  file to compile into a <span class="file">.class</span> file.
  
       <br><dt><code>--with-libiconv-prefix=DIR</code><dd>Search for libiconv in <span class="file">DIR/include</span> and <span class="file">DIR/lib</span>.
  
!      <br><dt><code>--enable-sjlj-exceptions</code><dd>Force use of <code>builtin_setjmp</code> for exceptions.  <span class="samp">configure</span>
! ordinarily picks the correct value based on the platform.  Only use
  this option if you are sure you need a different setting.
  
       <br><dt><code>--with-system-zlib</code><dd>Use installed <span class="samp">zlib</span> rather than that included with GCC.
*************** this option if you are sure you need a d
*** 723,759 ****
  characters and the Win32 API.
            <dl>
  <dt><code>ansi</code><dd>Use the single-byte <code>char</code> and the Win32 A functions natively,
! translating to and from UNICODE when using these functions. If
  unspecified, this is the default.
  
!           <br><dt><code>unicows</code><dd>Use the <code>WCHAR</code> and Win32 W functions natively. Adds
  <code>-lunicows</code> to <span class="file">libgcj.spec</span> to link with <span class="samp">libunicows</span>. 
  <span class="file">unicows.dll</span> needs to be deployed on Microsoft Windows 9X machines
! running built executables. <span class="file">libunicows.a</span>, an open-source
  import library around Microsoft's <code>unicows.dll</code>, is obtained from
  <a href="http://libunicows.sourceforge.net/">http://libunicows.sourceforge.net/</a>, which also gives details
  on getting <span class="file">unicows.dll</span> from Microsoft.
  
!           <br><dt><code>unicode</code><dd>Use the <code>WCHAR</code> and Win32 W functions natively. Does <em>not</em>
! add <code>-lunicows</code> to <span class="file">libgcj.spec</span>. The built executables will
  only run on Microsoft Windows NT and above. 
  </dl>
       </dl>
  
! <h5 class="subsubheading"><a name="TOC5"></a>AWT-Specific Options</h5>
  
       <dl>
  <dt><code>--with-x</code><dd>Use the X Window System.
  
       <br><dt><code>--enable-java-awt=PEER(S)</code><dd>Specifies the AWT peer library or libraries to build alongside
! <span class="samp">libgcj</span>. If this option is unspecified or disabled, AWT
! will be non-functional. Current valid values are <span class="option">gtk</span> and
! <span class="option">xlib</span>. Multiple libraries should be separated by a
  comma (i.e. <span class="option">--enable-java-awt=gtk,xlib</span>).
  
       <br><dt><code>--enable-gtk-cairo</code><dd>Build the cairo Graphics2D implementation on GTK.
  
!      <br><dt><code>--enable-java-gc=TYPE</code><dd>Choose garbage collector. Defaults to <span class="option">boehm</span> if unspecified.
  
       <br><dt><code>--disable-gtktest</code><dd>Do not try to compile and run a test GTK+ program.
  
--- 762,798 ----
  characters and the Win32 API.
            <dl>
  <dt><code>ansi</code><dd>Use the single-byte <code>char</code> and the Win32 A functions natively,
! translating to and from UNICODE when using these functions.  If
  unspecified, this is the default.
  
!           <br><dt><code>unicows</code><dd>Use the <code>WCHAR</code> and Win32 W functions natively.  Adds
  <code>-lunicows</code> to <span class="file">libgcj.spec</span> to link with <span class="samp">libunicows</span>. 
  <span class="file">unicows.dll</span> needs to be deployed on Microsoft Windows 9X machines
! running built executables.  <span class="file">libunicows.a</span>, an open-source
  import library around Microsoft's <code>unicows.dll</code>, is obtained from
  <a href="http://libunicows.sourceforge.net/">http://libunicows.sourceforge.net/</a>, which also gives details
  on getting <span class="file">unicows.dll</span> from Microsoft.
  
!           <br><dt><code>unicode</code><dd>Use the <code>WCHAR</code> and Win32 W functions natively.  Does <em>not</em>
! add <code>-lunicows</code> to <span class="file">libgcj.spec</span>.  The built executables will
  only run on Microsoft Windows NT and above. 
  </dl>
       </dl>
  
! <h5 class="subsubheading"><a name="TOC6"></a>AWT-Specific Options</h5>
  
       <dl>
  <dt><code>--with-x</code><dd>Use the X Window System.
  
       <br><dt><code>--enable-java-awt=PEER(S)</code><dd>Specifies the AWT peer library or libraries to build alongside
! <span class="samp">libgcj</span>.  If this option is unspecified or disabled, AWT
! will be non-functional.  Current valid values are <span class="option">gtk</span> and
! <span class="option">xlib</span>.  Multiple libraries should be separated by a
  comma (i.e. <span class="option">--enable-java-awt=gtk,xlib</span>).
  
       <br><dt><code>--enable-gtk-cairo</code><dd>Build the cairo Graphics2D implementation on GTK.
  
!      <br><dt><code>--enable-java-gc=TYPE</code><dd>Choose garbage collector.  Defaults to <span class="option">boehm</span> if unspecified.
  
       <br><dt><code>--disable-gtktest</code><dd>Do not try to compile and run a test GTK+ program.
  
diff -Nrcpad gcc-3.4.3/INSTALL/download.html gcc-4.0.0/INSTALL/download.html
*** gcc-3.4.3/INSTALL/download.html	Fri Nov  5 04:14:11 2004
--- gcc-4.0.0/INSTALL/download.html	Thu Apr 21 07:04:15 2005
***************
*** 8,14 ****
  <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
  <!--
  Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
! 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
  
     Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.2 or
--- 8,14 ----
  <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
  <!--
  Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
! 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
  
     Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.2 or
*************** components.
*** 49,59 ****
     <p>Please refer to the <a href="http://gcc.gnu.org/releases.html">releases web page</a>
  for information on how to obtain GCC.
  
!    <p>The full distribution includes the C, C++, Objective-C, Fortran, Java,
! and Ada (in case of GCC 3.1 and later) compilers.  The full distribution
! also includes runtime libraries for C++, Objective-C, Fortran, and Java. 
! In GCC 3.0 and later versions, GNU compiler testsuites are also included
! in the full distribution.
  
     <p>If you choose to download specific components, you must download the core
  GCC distribution plus any language specific distributions you wish to
--- 49,59 ----
     <p>Please refer to the <a href="http://gcc.gnu.org/releases.html">releases web page</a>
  for information on how to obtain GCC.
  
!    <p>The full distribution includes the C, C++, Objective-C, Fortran 77, Fortran
! (in case of GCC 4.0 and later), Java, and Ada (in case of GCC 3.1 and later)
! compilers.  The full distribution also includes runtime libraries for C++,
! Objective-C, Fortran 77, Fortran, and Java.  In GCC 3.0 and later versions,
! GNU compiler testsuites are also included in the full distribution.
  
     <p>If you choose to download specific components, you must download the core
  GCC distribution plus any language specific distributions you wish to
diff -Nrcpad gcc-3.4.3/INSTALL/finalinstall.html gcc-4.0.0/INSTALL/finalinstall.html
*** gcc-3.4.3/INSTALL/finalinstall.html	Fri Nov  5 04:14:12 2004
--- gcc-4.0.0/INSTALL/finalinstall.html	Thu Apr 21 07:04:15 2005
***************
*** 8,14 ****
  <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
  <!--
  Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
! 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
  
     Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.2 or
--- 8,14 ----
  <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
  <!--
  Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
! 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
  
     Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.2 or
*************** printing with programs such as <span cla
*** 145,150 ****
--- 145,154 ----
  <a href="http://www.gnu.org/order/order.html">buy printed manuals from the Free Software Foundation</a>, though such manuals may not be for the most
  recent version of GCC.
  
+    <p>If you would like to generate online HTML documentation, do <span class="samp">cd
+ </span><var>objdir</var><span class="samp">; make html</span> and HTML will be generated for the manuals in
+ <var>objdir</var><span class="file">/HTML</span>.
+ 
     <p><hr />
  <p><a href="./index.html">Return to the GCC Installation page</a>
  
diff -Nrcpad gcc-3.4.3/INSTALL/gfdl.html gcc-4.0.0/INSTALL/gfdl.html
*** gcc-3.4.3/INSTALL/gfdl.html	Fri Nov  5 04:14:12 2004
--- gcc-4.0.0/INSTALL/gfdl.html	Thu Apr 21 07:04:15 2005
***************
*** 8,14 ****
  <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
  <!--
  Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
! 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
  
     Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.2 or
--- 8,14 ----
  <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
  <!--
  Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
! 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
  
     Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.2 or
diff -Nrcpad gcc-3.4.3/INSTALL/index.html gcc-4.0.0/INSTALL/index.html
*** gcc-3.4.3/INSTALL/index.html	Fri Nov  5 04:14:11 2004
--- gcc-4.0.0/INSTALL/index.html	Thu Apr 21 07:04:15 2005
***************
*** 8,14 ****
  <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
  <!--
  Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
! 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
  
     Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.2 or
--- 8,14 ----
  <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
  <!--
  Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
! 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
  
     Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.2 or
*************** not yet been merged into the main part o
*** 85,91 ****
  <p><a href="./index.html">Return to the GCC Installation page</a>
  
     <p>Copyright &copy; 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
! 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
     <pre class="sp">
  
  </pre>
--- 85,91 ----
  <p><a href="./index.html">Return to the GCC Installation page</a>
  
     <p>Copyright &copy; 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
! 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
     <pre class="sp">
  
  </pre>
diff -Nrcpad gcc-3.4.3/INSTALL/old.html gcc-4.0.0/INSTALL/old.html
*** gcc-3.4.3/INSTALL/old.html	Fri Nov  5 04:14:12 2004
--- gcc-4.0.0/INSTALL/old.html	Thu Apr 21 07:04:15 2005
***************
*** 8,14 ****
  <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
  <!--
  Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
! 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
  
     Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.2 or
--- 8,14 ----
  <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
  <!--
  Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
! 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
  
     Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.2 or
diff -Nrcpad gcc-3.4.3/INSTALL/prerequisites.html gcc-4.0.0/INSTALL/prerequisites.html
*** gcc-3.4.3/INSTALL/prerequisites.html	Fri Nov  5 04:14:11 2004
--- gcc-4.0.0/INSTALL/prerequisites.html	Thu Apr 21 07:04:15 2005
***************
*** 8,14 ****
  <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
  <!--
  Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
! 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
  
     Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.2 or
--- 8,14 ----
  <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
  <!--
  Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
! 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
  
     Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.2 or
*************** Necessary (only on some platforms) to un
*** 96,127 ****
  systems' <span class="command">tar</span> programs will also work, only try GNU
  <span class="command">tar</span> if you have problems.
  
  </dl>
  
  <h3 class="heading"><a name="TOC1"></a>Tools/packages necessary for modifying GCC</h3>
  
       <dl>
! <dt>autoconf versions 2.13 and 2.57<dt>GNU m4 version 1.4 (or later)<dd>
! Necessary when modifying <span class="file">configure.in</span>, <span class="file">aclocal.m4</span>, etc. 
  to regenerate <span class="file">configure</span> and <span class="file">config.in</span> files.  Most
! directories require autoconf 2.13 (exactly), but <span class="file">libiberty</span>,
! <span class="file">fastjar</span>, <span class="file">libstdc++-v3</span>, <span class="file">libjava/libltdl</span>, and <span class="file">gcc</span>
! require autoconf 2.57 (exactly).
  
!      <br><dt>automake versions 1.4-gcj and 1.7.9<dd>
  Necessary when modifying a <span class="file">Makefile.am</span> file to regenerate its
  associated <span class="file">Makefile.in</span>.
  
       <p>Much of GCC does not use automake, so directly edit the <span class="file">Makefile.in</span>
  file.  Specifically this applies to the <span class="file">gcc</span>, <span class="file">intl</span>,
! <span class="file">libf2c</span>, <span class="file">libiberty</span>, <span class="file">libobjc</span> directories as well as any
! of their subdirectories.
  
!      <p>The <span class="file">libstdc++-v3</span>, <span class="file">libjava/libltdl</span>, and <span class="file">fastjar</span>
! directories require automake 1.7.9.  However, the Java directories, which
! include <span class="file">boehm-gc</span>, <span class="file">libffi</span>, <span class="file">libjava</span>, and <span class="file">zlib</span>,
! require a modified version of automake 1.4 downloadable from
! <a href="ftp://gcc.gnu.org/pub/java/automake-gcj-1.4.tar.gz">ftp://gcc.gnu.org/pub/java/automake-gcj-1.4.tar.gz</a>.
  
       <br><dt>gettext version 0.12 (or later)<dd>
  Needed to regenerate <span class="file">gcc.pot</span>.
--- 96,138 ----
  systems' <span class="command">tar</span> programs will also work, only try GNU
  <span class="command">tar</span> if you have problems.
  
+      <br><dt>GNU Multiple Precision Library (GMP) version 4.0 (or later)<dd>
+ Necessary to build the Fortran frontend.  If you don't have it
+ installed in your library search path, you will have to configure with
+ the <span class="option">--with-gmp</span> or <span class="option">--with-gmp-dir</span> configure option.
+ 
+      <br><dt>MPFR Library<dd>
+ Necessary to build the Fortran frontend.  It can be downloaded from
+ <a href="http://www.mpfr.org/">http://www.mpfr.org/</a>.  It is also included in the current GMP
+ release (4.1.3) when configured with <span class="option">--enable-mpfr</span>.
+ 
+      <p>The <span class="option">--with-mpfr</span> or <span class="option">--with-mpfr-dir</span> configure option should
+ be used if your MPFR Library is not installed in your library search path.
+ 
  </dl>
  
  <h3 class="heading"><a name="TOC1"></a>Tools/packages necessary for modifying GCC</h3>
  
       <dl>
! <dt>autoconf versions 2.13 and 2.59<dt>GNU m4 version 1.4 (or later)<dd>
! Necessary when modifying <span class="file">configure.ac</span>, <span class="file">aclocal.m4</span>, etc. 
  to regenerate <span class="file">configure</span> and <span class="file">config.in</span> files.  Most
! directories require autoconf 2.59 (exactly), but the toplevel
! still requires autoconf 2.13 (exactly).
  
!      <br><dt>automake versions 1.9.3<dd>
  Necessary when modifying a <span class="file">Makefile.am</span> file to regenerate its
  associated <span class="file">Makefile.in</span>.
  
       <p>Much of GCC does not use automake, so directly edit the <span class="file">Makefile.in</span>
  file.  Specifically this applies to the <span class="file">gcc</span>, <span class="file">intl</span>,
! <span class="file">libcpp</span>, <span class="file">libiberty</span>, <span class="file">libobjc</span> directories as well
! as any of their subdirectories.
  
!      <p>For directories that use automake, GCC requires the latest release in
! the 1.9.x series, which is currently 1.9.3.  When regenerating a directory
! to a newer version, please update all the directories using an older 1.9.x
! to the latest released version.
  
       <br><dt>gettext version 0.12 (or later)<dd>
  Needed to regenerate <span class="file">gcc.pot</span>.
*************** Necessary when modifying <span class="co
*** 131,137 ****
  <span class="file">gcc/cp/cfns.gperf</span> to regenerate its associated header file, e.g. 
  <span class="file">gcc/cp/cfns.h</span>.
  
!      <br><dt>expect version ???<dt>tcl version ???<dt>dejagnu version ???<dd>
  Necessary to run the GCC testsuite.
  
       <br><dt>autogen version 5.5.4 (or later) and<dt>guile version 1.4.1 (or later)<dd>
--- 142,148 ----
  <span class="file">gcc/cp/cfns.gperf</span> to regenerate its associated header file, e.g. 
  <span class="file">gcc/cp/cfns.h</span>.
  
!      <br><dt>expect version ???<dt>tcl version ???<dt>dejagnu version 1.4.4 (or later)<dd>
  Necessary to run the GCC testsuite.
  
       <br><dt>autogen version 5.5.4 (or later) and<dt>guile version 1.4.1 (or later)<dd>
diff -Nrcpad gcc-3.4.3/INSTALL/specific.html gcc-4.0.0/INSTALL/specific.html
*** gcc-3.4.3/INSTALL/specific.html	Fri Nov  5 04:14:11 2004
--- gcc-4.0.0/INSTALL/specific.html	Thu Apr 21 07:04:15 2005
***************
*** 8,14 ****
  <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
  <!--
  Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
! 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
  
     Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.2 or
--- 8,14 ----
  <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
  <!--
  Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
! 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
  
     Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.2 or
*************** Please read this document carefully <em>
*** 45,112 ****
  GNU Compiler Collection on your machine.
  
       <ul>
! <li><a href="#alpha*-*-*">alpha*-*-*</a>
! <li><a href="#alpha*-dec-osf*">alpha*-dec-osf*</a>
! <li><a href="#alphaev5-cray-unicosmk*">alphaev5-cray-unicosmk*</a>
! <li><a href="#arc-*-elf">arc-*-elf</a>
! <li><a href="#arm-*-elf">arm-*-elf</a>
! <a href="#arm-*-coff">arm-*-coff</a>
! <a href="#arm-*-aout">arm-*-aout</a>
! <li><a href="#xscale-*-*">xscale-*-*</a>
  <li><a href="#avr">avr</a>
  <li><a href="#c4x">c4x</a>
  <li><a href="#dos">DOS</a>
! <li><a href="#dsp16xx">dsp16xx</a>
! <li><a href="#*-*-freebsd*">*-*-freebsd*</a>
  <li><a href="#h8300-hms">h8300-hms</a>
! <li><a href="#hppa*-hp-hpux*">hppa*-hp-hpux*</a>
! <li><a href="#hppa*-hp-hpux10">hppa*-hp-hpux10</a>
! <li><a href="#hppa*-hp-hpux11">hppa*-hp-hpux11</a>
! <li><a href="#i370-*-*">i370-*-*</a>
! <li><a href="#*-*-linux-gnu">*-*-linux-gnu</a>
! <li><a href="#ix86-*-linux*aout">i?86-*-linux*aout</a>
! <li><a href="#ix86-*-linux*">i?86-*-linux*</a>
! <li><a href="#ix86-*-sco3.2v5*">i?86-*-sco3.2v5*</a>
! <li><a href="#ix86-*-udk">i?86-*-udk</a>
! <li><a href="#ix86-*-esix">i?86-*-esix</a>
! <li><a href="#ia64-*-linux">ia64-*-linux</a>
! <li><a href="#ia64-*-hpux*">ia64-*-hpux*</a>
! <li><a href="#*-ibm-aix*">*-ibm-aix*</a>
! <li><a href="#ip2k-*-elf">ip2k-*-elf</a>
! <li><a href="#iq2000-*-elf">iq2000-*-elf</a>
! <li><a href="#m32r-*-elf">m32r-*-elf</a>
  <li><a href="#m6811-elf">m6811-elf</a>
  <li><a href="#m6812-elf">m6812-elf</a>
  <li><a href="#m68k-hp-hpux">m68k-hp-hpux</a>
! <li><a href="#mips-*-*">mips-*-*</a>
  <li><a href="#mips-sgi-irix5">mips-sgi-irix5</a>
  <li><a href="#mips-sgi-irix6">mips-sgi-irix6</a>
! <li><a href="#powerpc*-*-*">powerpc*-*-*</a> powerpc-*-sysv4
! <li><a href="#powerpc-*-darwin*">powerpc-*-darwin*</a>
! <li><a href="#powerpc-*-elf">powerpc-*-elf</a> powerpc-*-sysv4
! <li><a href="#powerpc-*-linux-gnu*">powerpc-*-linux-gnu*</a>
! <li><a href="#powerpc-*-netbsd*">powerpc-*-netbsd*</a>
! <li><a href="#powerpc-*-eabiaix">powerpc-*-eabiaix</a>
! <li><a href="#powerpc-*-eabisim">powerpc-*-eabisim</a>
! <li><a href="#powerpc-*-eabi">powerpc-*-eabi</a>
! <li><a href="#powerpcle-*-elf">powerpcle-*-elf</a> powerpcle-*-sysv4
! <li><a href="#powerpcle-*-eabisim">powerpcle-*-eabisim</a>
! <li><a href="#powerpcle-*-eabi">powerpcle-*-eabi</a>
! <li><a href="#s390-*-linux*">s390-*-linux*</a>
! <li><a href="#s390x-*-linux*">s390x-*-linux*</a>
! <li><a href="#s390x-ibm-tpf*">s390x-ibm-tpf*</a>
! <li><a href="#*-*-solaris2*">*-*-solaris2*</a>
! <li><a href="#sparc-sun-solaris2*">sparc-sun-solaris2*</a>
  <li><a href="#sparc-sun-solaris2.7">sparc-sun-solaris2.7</a>
! <li><a href="#sparc-*-linux*">sparc-*-linux*</a>
! <li><a href="#sparc64-*-solaris2*">sparc64-*-solaris2*</a>
! <li><a href="#sparcv9-*-solaris2*">sparcv9-*-solaris2*</a>
! <li><a href="#*-*-sysv*">*-*-sysv*</a>
  <li><a href="#vax-dec-ultrix">vax-dec-ultrix</a>
! <li><a href="#*-*-vxworks*">*-*-vxworks*</a>
! <li><a href="#x86_64-*-*">x86_64-*-*</a> amd64-*-*
! <li><a href="#xtensa-*-elf">xtensa-*-elf</a>
! <li><a href="#xtensa-*-linux*">xtensa-*-linux*</a>
  <li><a href="#windows">Microsoft Windows</a>
  <li><a href="#os2">OS/2</a>
  <li><a href="#older">Older systems</a>
--- 45,108 ----
  GNU Compiler Collection on your machine.
  
       <ul>
! <li><a href="#alpha-x-x">alpha*-*-*</a>
! <li><a href="#alpha-dec-osf">alpha*-dec-osf*</a>
! <li><a href="#alphaev5-cray-unicosmk">alphaev5-cray-unicosmk*</a>
! <li><a href="#arc-x-elf">arc-*-elf</a>
! <li><a href="#arm-x-elf">arm-*-elf</a>
! <a href="#arm-x-coff">arm-*-coff</a>
! <a href="#arm-x-aout">arm-*-aout</a>
! <li><a href="#xscale-x-x">xscale-*-*</a>
  <li><a href="#avr">avr</a>
  <li><a href="#c4x">c4x</a>
  <li><a href="#dos">DOS</a>
! <li><a href="#x-x-freebsd">*-*-freebsd*</a>
  <li><a href="#h8300-hms">h8300-hms</a>
! <li><a href="#hppa-hp-hpux">hppa*-hp-hpux*</a>
! <li><a href="#hppa-hp-hpux10">hppa*-hp-hpux10</a>
! <li><a href="#hppa-hp-hpux11">hppa*-hp-hpux11</a>
! <li><a href="#x-x-linux-gnu">*-*-linux-gnu</a>
! <li><a href="#ix86-x-linuxaout">i?86-*-linux*aout</a>
! <li><a href="#ix86-x-linux">i?86-*-linux*</a>
! <li><a href="#ix86-x-sco3.2v5">i?86-*-sco3.2v5*</a>
! <li><a href="#ix86-x-udk">i?86-*-udk</a>
! <li><a href="#ia64-x-linux">ia64-*-linux</a>
! <li><a href="#ia64-x-hpux">ia64-*-hpux*</a>
! <li><a href="#x-ibm-aix">*-ibm-aix*</a>
! <li><a href="#ip2k-x-elf">ip2k-*-elf</a>
! <li><a href="#iq2000-x-elf">iq2000-*-elf</a>
! <li><a href="#m32r-x-elf">m32r-*-elf</a>
  <li><a href="#m6811-elf">m6811-elf</a>
  <li><a href="#m6812-elf">m6812-elf</a>
  <li><a href="#m68k-hp-hpux">m68k-hp-hpux</a>
! <li><a href="#mips-x-x">mips-*-*</a>
  <li><a href="#mips-sgi-irix5">mips-sgi-irix5</a>
  <li><a href="#mips-sgi-irix6">mips-sgi-irix6</a>
! <li><a href="#powerpc-x-x">powerpc*-*-*</a> powerpc-*-sysv4
! <li><a href="#powerpc-x-darwin">powerpc-*-darwin*</a>
! <li><a href="#powerpc-x-elf">powerpc-*-elf</a> powerpc-*-sysv4
! <li><a href="#powerpc-x-linux-gnu">powerpc*-*-linux-gnu*</a>
! <li><a href="#powerpc-x-netbsd">powerpc-*-netbsd*</a>
! <li><a href="#powerpc-x-eabisim">powerpc-*-eabisim</a>
! <li><a href="#powerpc-x-eabi">powerpc-*-eabi</a>
! <li><a href="#powerpcle-x-elf">powerpcle-*-elf</a> powerpcle-*-sysv4
! <li><a href="#powerpcle-x-eabisim">powerpcle-*-eabisim</a>
! <li><a href="#powerpcle-x-eabi">powerpcle-*-eabi</a>
! <li><a href="#s390-x-linux">s390-*-linux*</a>
! <li><a href="#s390x-x-linux">s390x-*-linux*</a>
! <li><a href="#s390x-ibm-tpf">s390x-ibm-tpf*</a>
! <li><a href="#x-x-solaris2">*-*-solaris2*</a>
! <li><a href="#sparc-sun-solaris2">sparc-sun-solaris2*</a>
  <li><a href="#sparc-sun-solaris2.7">sparc-sun-solaris2.7</a>
! <li><a href="#sparc-x-linux">sparc-*-linux*</a>
! <li><a href="#sparc64-x-solaris2">sparc64-*-solaris2*</a>
! <li><a href="#sparcv9-x-solaris2">sparcv9-*-solaris2*</a>
! <li><a href="#x-x-sysv">*-*-sysv*</a>
  <li><a href="#vax-dec-ultrix">vax-dec-ultrix</a>
! <li><a href="#x-x-vxworks">*-*-vxworks*</a>
! <li><a href="#x86_64-x-x">x86_64-*-*</a> amd64-*-*
! <li><a href="#xtensa-x-elf">xtensa-*-elf</a>
! <li><a href="#xtensa-x-linux">xtensa-*-linux*</a>
  <li><a href="#windows">Microsoft Windows</a>
  <li><a href="#os2">OS/2</a>
  <li><a href="#older">Older systems</a>
*************** GNU Compiler Collection on your machine.
*** 119,125 ****
     <p><!-- -------- host/target specific issues start here ---------------- -->
  <hr />
  
! <h3 class="heading"><a name="TOC0"></a><a name="alpha_002a_002d_002a_002d_002a"></a>alpha*-*-*</h3>
  
  <p>This section contains general configuration information for all
  alpha-based platforms using ELF (in particular, ignore this section for
--- 115,121 ----
     <p><!-- -------- host/target specific issues start here ---------------- -->
  <hr />
  
! <h3 class="heading"><a name="TOC0"></a><a name="alpha_002dx_002dx"></a>alpha*-*-*</h3>
  
  <p>This section contains general configuration information for all
  alpha-based platforms using ELF (in particular, ignore this section for
*************** shared libraries.
*** 133,139 ****
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC1"></a><a name="alpha_002a_002ddec_002dosf_002a"></a>alpha*-dec-osf*</h3>
  
  <p>Systems using processors that implement the DEC Alpha architecture and
  are running the DEC/Compaq Unix (DEC OSF/1, Digital UNIX, or Compaq
--- 129,135 ----
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC1"></a><a name="alpha_002ddec_002dosf"></a>alpha*-dec-osf*</h3>
  
  <p>Systems using processors that implement the DEC Alpha architecture and
  are running the DEC/Compaq Unix (DEC OSF/1, Digital UNIX, or Compaq
*************** provide a fix shortly.
*** 210,216 ****
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC2"></a><a name="alphaev5_002dcray_002dunicosmk_002a"></a>alphaev5-cray-unicosmk*</h3>
  
  <p>Cray T3E systems running Unicos/Mk.
  
--- 206,212 ----
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC2"></a><a name="alphaev5_002dcray_002dunicosmk"></a>alphaev5-cray-unicosmk*</h3>
  
  <p>Cray T3E systems running Unicos/Mk.
  
*************** failure.
*** 235,250 ****
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC3"></a><a name="arc_002d_002a_002delf"></a>arc-*-elf</h3>
  
  <p>Argonaut ARC processor. 
  This configuration is intended for embedded systems.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC4"></a><a name="arm_002d_002a_002delf"></a>arm-*-elf</h3>
  
! <h3 class="heading"><a name="TOC5"></a><a name="xscale_002d_002a_002d_002a"></a>xscale-*-*</h3>
  
  <p>ARM-family processors.  Subtargets that use the ELF object format
  require GNU binutils 2.13 or newer.  Such subtargets include:
--- 231,246 ----
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC3"></a><a name="arc_002dx_002delf"></a>arc-*-elf</h3>
  
  <p>Argonaut ARC processor. 
  This configuration is intended for embedded systems.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC4"></a><a name="arm_002dx_002delf"></a>arm-*-elf</h3>
  
! <h3 class="heading"><a name="TOC5"></a><a name="xscale_002dx_002dx"></a>xscale-*-*</h3>
  
  <p>ARM-family processors.  Subtargets that use the ELF object format
  require GNU binutils 2.13 or newer.  Such subtargets include:
*************** require GNU binutils 2.13 or newer.  Suc
*** 253,259 ****
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC6"></a><a name="arm_002d_002a_002dcoff"></a>arm-*-coff</h3>
  
  <p>ARM-family processors.  Note that there are two different varieties
  of PE format subtarget supported: <code>arm-wince-pe</code> and
--- 249,255 ----
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC6"></a><a name="arm_002dx_002dcoff"></a>arm-*-coff</h3>
  
  <p>ARM-family processors.  Note that there are two different varieties
  of PE format subtarget supported: <code>arm-wince-pe</code> and
*************** of PE format subtarget supported: <code>
*** 261,267 ****
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC7"></a><a name="arm_002d_002a_002daout"></a>arm-*-aout</h3>
  
  <p>ARM-family processors.  These targets support the AOUT file format:
  <code>arm-*-aout</code>, <code>arm-*-netbsd</code>.
--- 257,263 ----
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC7"></a><a name="arm_002dx_002daout"></a>arm-*-aout</h3>
  
  <p>ARM-family processors.  These targets support the AOUT file format:
  <code>arm-*-aout</code>, <code>arm-*-netbsd</code>.
*************** and includes all the necessary compilati
*** 355,367 ****
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC12"></a><a name="dsp16xx"></a>dsp16xx</h3>
! 
! <p>A port to the AT&amp;T DSP1610 family of processors.
! 
!    <p><hr />
! 
! <h3 class="heading"><a name="TOC13"></a><a name="_002a_002d_002a_002dfreebsd_002a"></a>*-*-freebsd*</h3>
  
  <p>The version of binutils installed in <span class="file">/usr/bin</span> probably works with
  this release of GCC.  However, on FreeBSD 4, bootstrapping against the
--- 351,357 ----
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC12"></a><a name="x_002dx_002dfreebsd"></a>*-*-freebsd*</h3>
  
  <p>The version of binutils installed in <span class="file">/usr/bin</span> probably works with
  this release of GCC.  However, on FreeBSD 4, bootstrapping against the
*************** the very least, both boehm-gc and libffi
*** 408,414 ****
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC14"></a><a name="h8300_002dhms"></a>h8300-hms</h3>
  
  <p>Renesas H8/300 series of processors.
  
--- 398,404 ----
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC13"></a><a name="h8300_002dhms"></a>h8300-hms</h3>
  
  <p>Renesas H8/300 series of processors.
  
*************** longer a multiple of 2 bytes.
*** 421,439 ****
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC15"></a><a name="hppa_002a_002dhp_002dhpux_002a"></a>hppa*-hp-hpux*</h3>
  
  <p>Support for HP-UX version 9 and older was discontinued in GCC 3.4.
  
!    <p>We <em>highly</em> recommend using gas/binutils 2.8 or newer on all hppa
! platforms; you may encounter a variety of problems when using the HP
! assembler.
  
     <p>Specifically, <span class="option">-g</span> does not work on HP-UX (since that system
! uses a peculiar debugging format which GCC does not know about), unless you
! use GAS and GDB and configure GCC with the
  <a href="./configure.html#with-gnu-as"><span class="option">--with-gnu-as</span></a> and
! <span class="option">--with-as=...</span> options.
  
     <p>If you wish to use the pa-risc 2.0 architecture support with a 32-bit
  runtime, you must use either the HP assembler, or gas/binutils 2.11
--- 411,428 ----
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC14"></a><a name="hppa_002dhp_002dhpux"></a>hppa*-hp-hpux*</h3>
  
  <p>Support for HP-UX version 9 and older was discontinued in GCC 3.4.
  
!    <p>We <em>highly</em> recommend using gas/binutils on all hppa platforms;
! you may encounter a variety of problems when using the HP assembler.
  
     <p>Specifically, <span class="option">-g</span> does not work on HP-UX (since that system
! uses a peculiar debugging format which GCC does not know about), unless
! you use GAS and GDB.  It may be helpful to configure GCC with the
  <a href="./configure.html#with-gnu-as"><span class="option">--with-gnu-as</span></a> and
! <span class="option">--with-as=...</span> options to ensure that GCC can find GAS.
  
     <p>If you wish to use the pa-risc 2.0 architecture support with a 32-bit
  runtime, you must use either the HP assembler, or gas/binutils 2.11
*************** configuring if you want a model other th
*** 451,461 ****
  TARGET_SCHED_DEFAULT can be defined in BOOT_CFLAGS if a different
  default scheduling model is desired.
  
     <p>More specific information to <span class="samp">hppa*-hp-hpux*</span> targets follows.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC16"></a><a name="hppa_002a_002dhp_002dhpux10"></a>hppa*-hp-hpux10</h3>
  
  <p>For hpux10.20, we <em>highly</em> recommend you pick up the latest sed patch
  <code>PHCO_19798</code> from HP.  HP has two sites which provide patches free of
--- 440,460 ----
  TARGET_SCHED_DEFAULT can be defined in BOOT_CFLAGS if a different
  default scheduling model is desired.
  
+    <p>As of GCC 4.0, GCC uses the UNIX 95 namespace for HP-UX 10.10
+ through 11.00, and the UNIX 98 namespace for HP-UX 11.11 and later. 
+ This namespace change might cause problems when bootstrapping with
+ an earlier version of GCC or the HP compiler as essentially the same
+ namespace is required for an entire build.  This problem can be avoided
+ in a number of ways.  With HP cc, <span class="env">UNIX_STD</span> can be set to <span class="samp">95</span>
+ or <span class="samp">98</span>.  Another way is to add an appropriate set of predefines
+ to <span class="env">CC</span>.  The description for the <span class="option">munix=</span> option contains
+ a list of the predefines used with each standard.
+ 
     <p>More specific information to <span class="samp">hppa*-hp-hpux*</span> targets follows.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC15"></a><a name="hppa_002dhp_002dhpux10"></a>hppa*-hp-hpux10</h3>
  
  <p>For hpux10.20, we <em>highly</em> recommend you pick up the latest sed patch
  <code>PHCO_19798</code> from HP.  HP has two sites which provide patches free of
*************** the 3-stage comparison test to fail duri
*** 472,480 ****
  You should be able to continue by saying <span class="samp">make all</span> after getting
  the failure from <span class="samp">make bootstrap</span>.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC17"></a><a name="hppa_002a_002dhp_002dhpux11"></a>hppa*-hp-hpux11</h3>
  
  <p>GCC 3.0 and up support HP-UX 11.  GCC 2.95.x is not supported and cannot
  be used to compile GCC 3.0 and up.
--- 471,487 ----
  You should be able to continue by saying <span class="samp">make all</span> after getting
  the failure from <span class="samp">make bootstrap</span>.
  
+    <p>GCC 4.0 requires CVS binutils as of April 28, 2004 or later.  Earlier
+ versions require binutils 2.8 or later.
+ 
+    <p>The C++ ABI has changed incompatibly in GCC 4.0.  COMDAT subspaces are
+ used for one-only code and data.  This resolves many of the previous
+ problems in using C++ on this target.  However, the ABI is not compatible
+ with the one implemented under HP-UX 11 using secondary definitions.
+ 
     <p><hr />
  
! <h3 class="heading"><a name="TOC16"></a><a name="hppa_002dhp_002dhpux11"></a>hppa*-hp-hpux11</h3>
  
  <p>GCC 3.0 and up support HP-UX 11.  GCC 2.95.x is not supported and cannot
  be used to compile GCC 3.0 and up.
*************** result, it's not possible to switch link
*** 538,545 ****
  This has been been reported to sometimes occur in unified builds of
  binutils and GCC.
  
!    <p>With GCC 3.0 through 3.2, you must use binutils 2.11 or above.  As of
! GCC 3.3, binutils 2.14 or later is required.
  
     <p>Although the HP assembler can be used for an initial build, it shouldn't
  be used with any languages other than C and perhaps Fortran due to its
--- 545,552 ----
  This has been been reported to sometimes occur in unified builds of
  binutils and GCC.
  
!    <p>GCC 3.0 through 3.2 require binutils 2.11 or above.  GCC 3.3 through
! GCC 4.0 require binutils 2.14 or later.
  
     <p>Although the HP assembler can be used for an initial build, it shouldn't
  be used with any languages other than C and perhaps Fortran due to its
*************** library is not supported.
*** 605,618 ****
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC18"></a><a name="i370_002d_002a_002d_002a"></a>i370-*-*</h3>
! 
! <p>This port is very preliminary and has many known bugs.  We hope to
! have a higher-quality port for this machine soon.
! 
!    <p><hr />
! 
! <h3 class="heading"><a name="TOC19"></a><a name="_002a_002d_002a_002dlinux_002dgnu"></a>*-*-linux-gnu</h3>
  
  <p>Versions of libstdc++-v3 starting with 3.2.1 require bugfixes present
  in glibc 2.2.5 and later.  More information is available in the
--- 612,618 ----
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC17"></a><a name="x_002dx_002dlinux_002dgnu"></a>*-*-linux-gnu</h3>
  
  <p>Versions of libstdc++-v3 starting with 3.2.1 require bugfixes present
  in glibc 2.2.5 and later.  More information is available in the
*************** libstdc++-v3 documentation.
*** 620,633 ****
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC20"></a><a name="ix86_002d_002a_002dlinux_002aaout"></a>i?86-*-linux*aout</h3>
  
  <p>Use this configuration to generate <span class="file">a.out</span> binaries on Linux-based
  GNU systems.  This configuration is being superseded.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC21"></a><a name="ix86_002d_002a_002dlinux_002a"></a>i?86-*-linux*</h3>
  
  <p>As of GCC 3.3, binutils 2.13.1 or later is required for this platform. 
  See <a href="http://gcc.gnu.org/PR10877">bug 10877</a> for more information.
--- 620,633 ----
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC18"></a><a name="ix86_002dx_002dlinuxaout"></a>i?86-*-linux*aout</h3>
  
  <p>Use this configuration to generate <span class="file">a.out</span> binaries on Linux-based
  GNU systems.  This configuration is being superseded.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC19"></a><a name="ix86_002dx_002dlinux"></a>i?86-*-linux*</h3>
  
  <p>As of GCC 3.3, binutils 2.13.1 or later is required for this platform. 
  See <a href="http://gcc.gnu.org/PR10877">bug 10877</a> for more information.
*************** See <a href="http://gcc.gnu.org/PR10877"
*** 636,655 ****
  possible you have a hardware problem.  Further information on this can be
  found on <a href="http://www.bitwizard.nl/sig11/">www.bitwizard.nl</a>.
  
-    <p>Some recent versions of GNU/Linux, such as Fedora Core 1, support
- exec-shield-randomize.  Turning this on interferes with precompiled
- headers.  If you need to use precompiled headers,
- exec-shield-randomize can be turned off for the entire system by
- editing <span class="file">/etc/sysctl.conf</span> and adding a line:
- <pre class="smallexample">     kernel.exec-shield-randomize = 0
- </pre>
-    <p>You may then need to run <span class="samp">sysctl -p</span>.
- 
-    <p>This will be fixed in future releases of GCC.
- 
     <p><hr />
  
! <h3 class="heading"><a name="TOC22"></a><a name="ix86_002d_002a_002dsco3_002e2v5_002a"></a>i?86-*-sco3.2v5*</h3>
  
  <p>Use this for the SCO OpenServer Release 5 family of operating systems.
  
--- 636,644 ----
  possible you have a hardware problem.  Further information on this can be
  found on <a href="http://www.bitwizard.nl/sig11/">www.bitwizard.nl</a>.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC20"></a><a name="ix86_002dx_002dsco3_002e2v5"></a>i?86-*-sco3.2v5*</h3>
  
  <p>Use this for the SCO OpenServer Release 5 family of operating systems.
  
*************** you install Support Level Supplement OSS
*** 667,673 ****
  Supplement OSS631C or later.  If you are using release 5.0.7 of
  OpenServer, you must have at least the first maintenance pack installed
  (this includes the relevant portions of OSS646).  OSS646, also known as
! the "Execution Environment Update", provides updated link editors and
  assemblers, as well as updated standard C and math libraries.  The C
  startup modules are also updated to support the System V gABI draft, and
  GCC relies on that behavior.  OSS631 provides a collection of commonly
--- 656,662 ----
  Supplement OSS631C or later.  If you are using release 5.0.7 of
  OpenServer, you must have at least the first maintenance pack installed
  (this includes the relevant portions of OSS646).  OSS646, also known as
! the &ldquo;Execution Environment Update&rdquo;, provides updated link editors and
  assemblers, as well as updated standard C and math libraries.  The C
  startup modules are also updated to support the System V gABI draft, and
  GCC relies on that behavior.  OSS631 provides a collection of commonly
*************** use a modern version of GNU binutils.  V
*** 687,699 ****
  testing.  In general, only the <span class="option">--with-gnu-as</span> option is tested. 
  A modern bintuils (as well as a plethora of other development related
  GNU utilities) can be found in Support Level Supplement OSS658A, the
! "GNU Development Tools" package.  See the SCO web and ftp sites for details. 
! That package also contains the currently "officially supported" version of
  GCC, version 2.95.3.  It is useful for bootstrapping this version.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC23"></a><a name="ix86_002d_002a_002dudk"></a>i?86-*-udk</h3>
  
  <p>This target emulates the SCO Universal Development Kit and requires that
  package be installed.  (If it is installed, you will have a
--- 676,688 ----
  testing.  In general, only the <span class="option">--with-gnu-as</span> option is tested. 
  A modern bintuils (as well as a plethora of other development related
  GNU utilities) can be found in Support Level Supplement OSS658A, the
! &ldquo;GNU Development Tools&rdquo; package.  See the SCO web and ftp sites for details. 
! That package also contains the currently &ldquo;officially supported&rdquo; version of
  GCC, version 2.95.3.  It is useful for bootstrapping this version.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC21"></a><a name="ix86_002dx_002dudk"></a>i?86-*-udk</h3>
  
  <p>This target emulates the SCO Universal Development Kit and requires that
  package be installed.  (If it is installed, you will have a
*************** have installed.
*** 725,731 ****
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC24"></a><a name="ia64_002d_002a_002dlinux"></a>ia64-*-linux</h3>
  
  <p>IA-64 processor (also known as IPF, or Itanium Processor Family)
  running GNU/Linux.
--- 714,720 ----
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC22"></a><a name="ia64_002dx_002dlinux"></a>ia64-*-linux</h3>
  
  <p>IA-64 processor (also known as IPF, or Itanium Processor Family)
  running GNU/Linux.
*************** more major ABI changes are expected.
*** 745,772 ****
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC25"></a><a name="ia64_002d_002a_002dhpux_002a"></a>ia64-*-hpux*</h3>
  
! <p>Building GCC on this target requires the GNU Assembler. The bundled HP
! assembler will not work. To prevent GCC from using the wrong assembler,
  the option <span class="option">--with-gnu-as</span> may be necessary.
  
!    <p>The GCC libunwind library has not been ported to HPUX. This means that for
  GCC versions 3.2.3 and earlier, <span class="option">--enable-libunwind-exceptions</span>
! is required to build GCC. For GCC 3.3 and later, this is the default. 
  For gcc 3.4.3 and later, <span class="option">--enable-libunwind-exceptions</span> is
  removed and the system libunwind library will always be used.
  
     <p><hr />
  <!-- rs6000-ibm-aix*, powerpc-ibm-aix* -->
  
! <h3 class="heading"><a name="TOC26"></a><a name="_002a_002dibm_002daix_002a"></a>*-ibm-aix*</h3>
  
  <p>Support for AIX version 3 and older was discontinued in GCC 3.4.
  
     <p>AIX Make frequently has problems with GCC makefiles.  GNU Make 3.79.1 or
  newer is recommended to build on this platform.
  
     <p>To speed up the configuration phases of bootstrapping and installing GCC,
  one may use GNU Bash instead of AIX <span class="command">/bin/sh</span>, e.g.,
  
--- 734,765 ----
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC23"></a><a name="ia64_002dx_002dhpux"></a>ia64-*-hpux*</h3>
  
! <p>Building GCC on this target requires the GNU Assembler.  The bundled HP
! assembler will not work.  To prevent GCC from using the wrong assembler,
  the option <span class="option">--with-gnu-as</span> may be necessary.
  
!    <p>The GCC libunwind library has not been ported to HPUX.  This means that for
  GCC versions 3.2.3 and earlier, <span class="option">--enable-libunwind-exceptions</span>
! is required to build GCC.  For GCC 3.3 and later, this is the default. 
  For gcc 3.4.3 and later, <span class="option">--enable-libunwind-exceptions</span> is
  removed and the system libunwind library will always be used.
  
     <p><hr />
  <!-- rs6000-ibm-aix*, powerpc-ibm-aix* -->
  
! <h3 class="heading"><a name="TOC24"></a><a name="x_002dibm_002daix"></a>*-ibm-aix*</h3>
  
  <p>Support for AIX version 3 and older was discontinued in GCC 3.4.
  
     <p>AIX Make frequently has problems with GCC makefiles.  GNU Make 3.79.1 or
  newer is recommended to build on this platform.
  
+    <p>&ldquo;out of memory&rdquo; bootstrap failures may indicate a problem with
+ process resource limits (ulimit).  Hard limits are configured in the
+ <span class="file">/etc/security/limits</span> system configuration file.
+ 
     <p>To speed up the configuration phases of bootstrapping and installing GCC,
  one may use GNU Bash instead of AIX <span class="command">/bin/sh</span>, e.g.,
  
*************** switch and using the configure option <s
*** 877,883 ****
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC27"></a><a name="ip2k_002d_002a_002delf"></a>ip2k-*-elf</h3>
  
  <p>Ubicom IP2022 micro controller. 
  This configuration is intended for embedded systems. 
--- 870,876 ----
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC25"></a><a name="ip2k_002dx_002delf"></a>ip2k-*-elf</h3>
  
  <p>Ubicom IP2022 micro controller. 
  This configuration is intended for embedded systems. 
*************** There are no standard Unix configuration
*** 887,921 ****
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC28"></a><a name="iq2000_002d_002a_002delf"></a>iq2000-*-elf</h3>
  
  <p>Vitesse IQ2000 processors.  These are used in embedded
  applications.  There are no standard Unix configurations.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC29"></a><a name="m32r_002d_002a_002delf"></a>m32r-*-elf</h3>
  
  <p>Renesas M32R processor. 
  This configuration is intended for embedded systems.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC30"></a><a name="m6811_002delf"></a>m6811-elf</h3>
  
  <p>Motorola 68HC11 family micro controllers.  These are used in embedded
  applications.  There are no standard Unix configurations.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC31"></a><a name="m6812_002delf"></a>m6812-elf</h3>
  
  <p>Motorola 68HC12 family micro controllers.  These are used in embedded
  applications.  There are no standard Unix configurations.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC32"></a><a name="m68k_002dhp_002dhpux"></a>m68k-hp-hpux</h3>
  
  <p>HP 9000 series 300 or 400 running HP-UX.  HP-UX version 8.0 has a bug in
  the assembler that prevents compilation of GCC.  This
--- 880,914 ----
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC26"></a><a name="iq2000_002dx_002delf"></a>iq2000-*-elf</h3>
  
  <p>Vitesse IQ2000 processors.  These are used in embedded
  applications.  There are no standard Unix configurations.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC27"></a><a name="m32r_002dx_002delf"></a>m32r-*-elf</h3>
  
  <p>Renesas M32R processor. 
  This configuration is intended for embedded systems.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC28"></a><a name="m6811_002delf"></a>m6811-elf</h3>
  
  <p>Motorola 68HC11 family micro controllers.  These are used in embedded
  applications.  There are no standard Unix configurations.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC29"></a><a name="m6812_002delf"></a>m6812-elf</h3>
  
  <p>Motorola 68HC12 family micro controllers.  These are used in embedded
  applications.  There are no standard Unix configurations.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC30"></a><a name="m68k_002dhp_002dhpux"></a>m68k-hp-hpux</h3>
  
  <p>HP 9000 series 300 or 400 running HP-UX.  HP-UX version 8.0 has a bug in
  the assembler that prevents compilation of GCC.  This
*************** to look like:
*** 962,968 ****
  </pre>
     <p><hr />
  
! <h3 class="heading"><a name="TOC33"></a><a name="mips_002d_002a_002d_002a"></a>mips-*-*</h3>
  
  <p>If on a MIPS system you get an error message saying &ldquo;does not have gp
  sections for all it's [sic] sectons [sic]&rdquo;, don't worry about it.  This
--- 955,961 ----
  </pre>
     <p><hr />
  
! <h3 class="heading"><a name="TOC31"></a><a name="mips_002dx_002dx"></a>mips-*-*</h3>
  
  <p>If on a MIPS system you get an error message saying &ldquo;does not have gp
  sections for all it's [sic] sectons [sic]&rdquo;, don't worry about it.  This
*************** configure for <span class="samp">mipsel-
*** 980,985 ****
--- 973,988 ----
  <span class="samp">mips*-*-linux*</span> target continues to use the MIPS II routines.  More
  work on this is expected in future releases.
  
+    <p>MIPS systems check for division by zero (unless
+ <span class="option">-mno-check-zero-division</span> is passed to the compiler) by
+ generating either a conditional trap or a break instruction.  Using
+ trap results in smaller code, but is only supported on MIPS II and
+ later.  Also, some versions of the Linux kernel have a bug that
+ prevents trap from generating the proper signal (<code>SIGFPE</code>).  To enable
+ the use of break, use the <span class="option">--with-divide=breaks</span>
+ <span class="command">configure</span> option when configuring GCC.  The default is to
+ use traps on systems that support them.
+ 
     <p>Cross-compilers for the Mips as target using the Mips assembler
  currently do not work, because the auxiliary programs
  <span class="file">mips-tdump.c</span> and <span class="file">mips-tfile.c</span> can't be compiled on
*************** if you use the GNU assembler and linker.
*** 988,994 ****
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC34"></a><a name="mips_002dsgi_002dirix5"></a>mips-sgi-irix5</h3>
  
  <p>In order to compile GCC on an SGI running IRIX 5, the <span class="samp">compiler_dev.hdr</span>
  subsystem must be installed from the IDO CD-ROM supplied by SGI. 
--- 991,997 ----
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC32"></a><a name="mips_002dsgi_002dirix5"></a>mips-sgi-irix5</h3>
  
  <p>In order to compile GCC on an SGI running IRIX 5, the <span class="samp">compiler_dev.hdr</span>
  subsystem must be installed from the IDO CD-ROM supplied by SGI. 
*************** to increase its table size for switch st
*** 1001,1009 ****
  optimization option, you also need to use <span class="option">-Olimit 3000</span>.
  
     <p>To enable debugging under IRIX 5, you must use GNU binutils 2.15 or
! later, and use the <span class="option">--with-gnu-as</span> and <span class="option">--with-gnu-ld</span>
! <span class="command">configure</span> options when configuring GCC.  You need to use GNU
! <span class="command">ar</span> and <span class="command">nm</span>, also distributed with GNU binutils.
  
     <p>Some users have reported that <span class="command">/bin/sh</span> will hang during bootstrap. 
  This problem can be avoided by running the commands:
--- 1004,1012 ----
  optimization option, you also need to use <span class="option">-Olimit 3000</span>.
  
     <p>To enable debugging under IRIX 5, you must use GNU binutils 2.15 or
! later, and use the <span class="option">--with-gnu-ld</span> <span class="command">configure</span> option
! when configuring GCC.  You need to use GNU <span class="command">ar</span> and <span class="command">nm</span>,
! also distributed with GNU binutils.
  
     <p>Some users have reported that <span class="command">/bin/sh</span> will hang during bootstrap. 
  This problem can be avoided by running the commands:
*************** This problem can be avoided by running t
*** 1015,1021 ****
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC35"></a><a name="mips_002dsgi_002dirix6"></a>mips-sgi-irix6</h3>
  
  <p>If you are using SGI's MIPSpro <span class="command">cc</span> as your bootstrap compiler, you must
  ensure that the N32 ABI is in use.  To test this, compile a simple C
--- 1018,1024 ----
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC33"></a><a name="mips_002dsgi_002dirix6"></a>mips-sgi-irix6</h3>
  
  <p>If you are using SGI's MIPSpro <span class="command">cc</span> as your bootstrap compiler, you must
  ensure that the N32 ABI is in use.  To test this, compile a simple C
*************** resulting object file.  The output shoul
*** 1034,1045 ****
  </pre>
     <p>then your version of <span class="command">cc</span> uses the O32 or N64 ABI by default.  You
  should set the environment variable <span class="env">CC</span> to <span class="samp">cc -n32</span>
! before configuring GCC.  SGI's MIPSpro 7.2 assembler may misassemble
! parts of the compiler, causing bootstrap failures.  MIPSpro 7.3 is
! known to work.  MIPSpro C 7.4 may cause bootstrap failures, too, due
! to a bug when inlining <code>memcmp</code>.  Either add <code>-U__INLINE_INTRINSICS</code>
! to the <span class="env">CC</span> environment variable as a workaround or upgrade to
! MIPSpro C 7.4.1m.
  
     <p>If you want the resulting <span class="command">gcc</span> to run on old 32-bit systems
  with the MIPS R4400 CPU, you need to ensure that only code for the <span class="samp">mips3</span>
--- 1037,1043 ----
  </pre>
     <p>then your version of <span class="command">cc</span> uses the O32 or N64 ABI by default.  You
  should set the environment variable <span class="env">CC</span> to <span class="samp">cc -n32</span>
! before configuring GCC.
  
     <p>If you want the resulting <span class="command">gcc</span> to run on old 32-bit systems
  with the MIPS R4400 CPU, you need to ensure that only code for the <span class="samp">mips3</span>
*************** all on <span class="samp">mips3</span>-o
*** 1058,1063 ****
--- 1056,1065 ----
     <p>instead, you should set the environment variable <span class="env">CC</span> to <span class="samp">cc
  -n32 -mips3</span> or <span class="samp">gcc -mips3</span> respectively before configuring GCC.
  
+    <p>MIPSpro C 7.4 may cause bootstrap failures, due to a bug when inlining
+ <code>memcmp</code>.  Either add <code>-U__INLINE_INTRINSICS</code> to the <span class="env">CC</span>
+ environment variable as a workaround or upgrade to MIPSpro C 7.4.1m.
+ 
     <p>GCC on IRIX 6 is usually built to support the N32, O32 and N64 ABIs.  If
  you build GCC on a system that doesn't have the N64 libraries installed
  or cannot run 64-bit binaries,
*************** information about using GCC on IRIX plat
*** 1085,1136 ****
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC36"></a><a name="powerpc_002a_002d_002a_002d_002a"></a>powerpc-*-*</h3>
  
  <p>You can specify a default version for the <span class="option">-mcpu=</span><var>cpu_type</var>
  switch by using the configure option <span class="option">--with-cpu-</span><var>cpu_type</var>.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC37"></a><a name="powerpc_002d_002a_002ddarwin_002a"></a>powerpc-*-darwin*</h3>
  
  <p>PowerPC running Darwin (Mac OS X kernel).
  
     <p>Pre-installed versions of Mac OS X may not include any developer tools,
  meaning that you will not be able to build GCC from source.  Tool
  binaries are available at
! <a href="http://developer.apple.com/tools/compilers.html">http://developer.apple.com/tools/compilers.html</a> (free
  registration required).
  
!    <p>The default stack limit of 512K is too small, which may cause compiles
! to fail with 'Bus error'.  Set the stack larger, for instance
! by doing <span class="samp">limit stack 800</span>.  It's a good idea to use the GNU
! preprocessor instead of Apple's <span class="file">cpp-precomp</span> during the first stage of
! bootstrapping; this is automatic when doing <span class="samp">make bootstrap</span>, but
! to do it from the toplevel objdir you will need to say <span class="samp">make
! CC='cc -no-cpp-precomp' bootstrap</span>.
  
     <p>The version of GCC shipped by Apple typically includes a number of
  extensions not available in a standard GCC release.  These extensions
! are generally specific to Mac programming.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC38"></a><a name="powerpc_002d_002a_002delf"></a>powerpc-*-elf, powerpc-*-sysv4</h3>
  
  <p>PowerPC system in big endian mode, running System V.4.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC39"></a><a name="powerpc_002d_002a_002dlinux_002dgnu_002a"></a>powerpc-*-linux-gnu*</h3>
  
  <p>You will need
! <a href="ftp://ftp.kernel.org/pub/linux/devel/binutils">binutils 2.13.90.0.10</a>
  or newer for a working GCC.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC40"></a><a name="powerpc_002d_002a_002dnetbsd_002a"></a>powerpc-*-netbsd*</h3>
  
  <p>PowerPC system in big endian mode running NetBSD.  To build the
  documentation you will need Texinfo version 4.2 (NetBSD 1.5.1 included
--- 1087,1132 ----
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC34"></a><a name="powerpc_002dx_002dx"></a>powerpc-*-*</h3>
  
  <p>You can specify a default version for the <span class="option">-mcpu=</span><var>cpu_type</var>
  switch by using the configure option <span class="option">--with-cpu-</span><var>cpu_type</var>.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC35"></a><a name="powerpc_002dx_002ddarwin"></a>powerpc-*-darwin*</h3>
  
  <p>PowerPC running Darwin (Mac OS X kernel).
  
     <p>Pre-installed versions of Mac OS X may not include any developer tools,
  meaning that you will not be able to build GCC from source.  Tool
  binaries are available at
! <a href="http://developer.apple.com/darwin/projects/compiler/">http://developer.apple.com/darwin/projects/compiler/</a> (free
  registration required).
  
!    <p>This version of GCC requires at least cctools-528.
  
     <p>The version of GCC shipped by Apple typically includes a number of
  extensions not available in a standard GCC release.  These extensions
! are generally for backwards compatibility and best avoided.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC36"></a><a name="powerpc_002dx_002delf"></a>powerpc-*-elf, powerpc-*-sysv4</h3>
  
  <p>PowerPC system in big endian mode, running System V.4.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC37"></a><a name="powerpc_002dx_002dlinux_002dgnu"></a>powerpc*-*-linux-gnu*</h3>
  
  <p>You will need
! <a href="ftp://ftp.kernel.org/pub/linux/devel/binutils">binutils 2.15</a>
  or newer for a working GCC.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC38"></a><a name="powerpc_002dx_002dnetbsd"></a>powerpc-*-netbsd*</h3>
  
  <p>PowerPC system in big endian mode running NetBSD.  To build the
  documentation you will need Texinfo version 4.2 (NetBSD 1.5.1 included
*************** Texinfo version 3.12).
*** 1138,1188 ****
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC41"></a><a name="powerpc_002d_002a_002deabisim"></a>powerpc-*-eabisim</h3>
  
  <p>Embedded PowerPC system in big endian mode for use in running under the
  PSIM simulator.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC42"></a><a name="powerpc_002d_002a_002deabi"></a>powerpc-*-eabi</h3>
  
  <p>Embedded PowerPC system in big endian mode.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC43"></a><a name="powerpcle_002d_002a_002delf"></a>powerpcle-*-elf, powerpcle-*-sysv4</h3>
  
  <p>PowerPC system in little endian mode, running System V.4.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC44"></a><a name="powerpcle_002d_002a_002deabisim"></a>powerpcle-*-eabisim</h3>
  
  <p>Embedded PowerPC system in little endian mode for use in running under
  the PSIM simulator.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC45"></a><a name="powerpcle_002d_002a_002deabi"></a>powerpcle-*-eabi</h3>
  
  <p>Embedded PowerPC system in little endian mode.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC46"></a><a name="s390_002d_002a_002dlinux_002a"></a>s390-*-linux*</h3>
  
  <p>S/390 system running GNU/Linux for S/390.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC47"></a><a name="s390x_002d_002a_002dlinux_002a"></a>s390x-*-linux*</h3>
  
  <p>zSeries system (64-bit) running GNU/Linux for zSeries.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC48"></a><a name="s390x_002dibm_002dtpf_002a"></a>s390x-ibm-tpf*</h3>
  
  <p>zSeries system (64-bit) running TPF.  This platform is
  supported as cross-compilation target only.
--- 1134,1184 ----
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC39"></a><a name="powerpc_002dx_002deabisim"></a>powerpc-*-eabisim</h3>
  
  <p>Embedded PowerPC system in big endian mode for use in running under the
  PSIM simulator.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC40"></a><a name="powerpc_002dx_002deabi"></a>powerpc-*-eabi</h3>
  
  <p>Embedded PowerPC system in big endian mode.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC41"></a><a name="powerpcle_002dx_002delf"></a>powerpcle-*-elf, powerpcle-*-sysv4</h3>
  
  <p>PowerPC system in little endian mode, running System V.4.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC42"></a><a name="powerpcle_002dx_002deabisim"></a>powerpcle-*-eabisim</h3>
  
  <p>Embedded PowerPC system in little endian mode for use in running under
  the PSIM simulator.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC43"></a><a name="powerpcle_002dx_002deabi"></a>powerpcle-*-eabi</h3>
  
  <p>Embedded PowerPC system in little endian mode.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC44"></a><a name="s390_002dx_002dlinux"></a>s390-*-linux*</h3>
  
  <p>S/390 system running GNU/Linux for S/390.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC45"></a><a name="s390x_002dx_002dlinux"></a>s390x-*-linux*</h3>
  
  <p>zSeries system (64-bit) running GNU/Linux for zSeries.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC46"></a><a name="s390x_002dibm_002dtpf"></a>s390x-ibm-tpf*</h3>
  
  <p>zSeries system (64-bit) running TPF.  This platform is
  supported as cross-compilation target only.
*************** supported as cross-compilation target on
*** 1192,1198 ****
  <!-- SunOS 4 releases which we don't use to avoid confusion.  Solaris -->
  <!-- alone is too unspecific and must be avoided. -->
  
! <h3 class="heading"><a name="TOC49"></a><a name="_002a_002d_002a_002dsolaris2_002a"></a>*-*-solaris2*</h3>
  
  <p>Sun does not ship a C compiler with Solaris 2.  To bootstrap and install
  GCC you first have to install a pre-built compiler, see the
--- 1188,1194 ----
  <!-- SunOS 4 releases which we don't use to avoid confusion.  Solaris -->
  <!-- alone is too unspecific and must be avoided. -->
  
! <h3 class="heading"><a name="TOC47"></a><a name="x_002dx_002dsolaris2"></a>*-*-solaris2*</h3>
  
  <p>Sun does not ship a C compiler with Solaris 2.  To bootstrap and install
  GCC you first have to install a pre-built compiler, see the
*************** SPARC, 117172-11 or newer for Intel) tha
*** 1273,1279 ****
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC50"></a><a name="sparc_002dsun_002dsolaris2_002a"></a>sparc-sun-solaris2*</h3>
  
  <p>When GCC is configured to use binutils 2.11.2 or later the binaries
  produced are smaller than the ones produced using Sun's native tools;
--- 1269,1275 ----
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC48"></a><a name="sparc_002dsun_002dsolaris2"></a>sparc-sun-solaris2*</h3>
  
  <p>When GCC is configured to use binutils 2.11.2 or later the binaries
  produced are smaller than the ones produced using Sun's native tools;
*************** without getting messages similar to the 
*** 1329,1337 ****
     <p>To work around this problem, compile with <span class="option">-gstabs+</span> instead of
  plain <span class="option">-g</span>.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC51"></a><a name="sparc_002dsun_002dsolaris2_002e7"></a>sparc-sun-solaris2.7</h3>
  
  <p>Sun patch 107058-01 (1999-01-13) for Solaris 7/SPARC triggers a bug in
  the dynamic linker.  This problem (Sun bug 4210064) affects GCC 2.8
--- 1325,1339 ----
     <p>To work around this problem, compile with <span class="option">-gstabs+</span> instead of
  plain <span class="option">-g</span>.
  
+    <p>When configuring the GNU Multiple Precision Library (GMP) on a Solaris 7
+ or later system, the canonical target triplet must be specified as the
+ <span class="command">build</span> parameter on the configure line:
+ 
+ <pre class="smallexample">     ./configure --build=sparc-sun-solaris2.7 --prefix=xxx --enable-mpfr
+ </pre>
     <p><hr />
  
! <h3 class="heading"><a name="TOC49"></a><a name="sparc_002dsun_002dsolaris2_002e7"></a>sparc-sun-solaris2.7</h3>
  
  <p>Sun patch 107058-01 (1999-01-13) for Solaris 7/SPARC triggers a bug in
  the dynamic linker.  This problem (Sun bug 4210064) affects GCC 2.8
*************** the Solaris 7 Recommended Patch Cluster.
*** 1367,1373 ****
  
     <p>GCC 3.3 triggers a bug in version 5.0 Alpha 03/27/98 of the Sun assembler,
  which causes a bootstrap failure when linking the 64-bit shared version of
! libgcc. A typical error message is:
  
  <pre class="smallexample">     ld: fatal: relocation error: R_SPARC_32: file libgcc/sparcv9/_muldi3.o:
         symbol &lt;unknown&gt;:  offset 0xffffffff7ec133e7 is non-aligned.
--- 1369,1375 ----
  
     <p>GCC 3.3 triggers a bug in version 5.0 Alpha 03/27/98 of the Sun assembler,
  which causes a bootstrap failure when linking the 64-bit shared version of
! libgcc.  A typical error message is:
  
  <pre class="smallexample">     ld: fatal: relocation error: R_SPARC_32: file libgcc/sparcv9/_muldi3.o:
         symbol &lt;unknown&gt;:  offset 0xffffffff7ec133e7 is non-aligned.
*************** libgcc. A typical error message is:
*** 1376,1382 ****
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC52"></a><a name="sparc_002d_002a_002dlinux_002a"></a>sparc-*-linux*</h3>
  
  <p>GCC versions 3.0 and higher require binutils 2.11.2 and glibc 2.2.4
  or newer on this platform.  All earlier binutils and glibc
--- 1378,1384 ----
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC50"></a><a name="sparc_002dx_002dlinux"></a>sparc-*-linux*</h3>
  
  <p>GCC versions 3.0 and higher require binutils 2.11.2 and glibc 2.2.4
  or newer on this platform.  All earlier binutils and glibc
*************** releases mishandled unaligned relocation
*** 1384,1390 ****
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC53"></a><a name="sparc64_002d_002a_002dsolaris2_002a"></a>sparc64-*-solaris2*</h3>
  
  <p>The following compiler flags must be specified in the configure
  step in order to bootstrap this target with the Sun compiler:
--- 1386,1392 ----
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC51"></a><a name="sparc64_002dx_002dsolaris2"></a>sparc64-*-solaris2*</h3>
  
  <p>The following compiler flags must be specified in the configure
  step in order to bootstrap this target with the Sun compiler:
*************** specifies the SPARC-V9 architecture to t
*** 1396,1408 ****
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC54"></a><a name="sparcv9_002d_002a_002dsolaris2_002a"></a>sparcv9-*-solaris2*</h3>
  
  <p>This is a synonym for sparc64-*-solaris2*.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC55"></a><a name="_0023_002a_002d_002a_002dsysv_002a"></a>*-*-sysv*</h3>
  
  <p>On System V release 3, you may get this error message
  while linking:
--- 1398,1410 ----
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC52"></a><a name="sparcv9_002dx_002dsolaris2"></a>sparcv9-*-solaris2*</h3>
  
  <p>This is a synonym for sparc64-*-solaris2*.
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC53"></a><a name="x_002dx_002dsysv"></a>*-*-sysv*</h3>
  
  <p>On System V release 3, you may get this error message
  while linking:
*************** is said to work.  Smaller values may als
*** 1431,1444 ****
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC56"></a><a name="vax_002ddec_002dultrix"></a>vax-dec-ultrix</h3>
  
  <p>Don't try compiling with VAX C (<span class="command">vcc</span>).  It produces incorrect code
  in some cases (for example, when <code>alloca</code> is used).
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC57"></a><a name="_002a_002d_002a_002dvxworks_002a"></a>*-*-vxworks*</h3>
  
  <p>Support for VxWorks is in flux.  At present GCC supports <em>only</em> the
  very recent VxWorks 5.5 (aka Tornado 2.2) release, and only on PowerPC. 
--- 1433,1446 ----
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC54"></a><a name="vax_002ddec_002dultrix"></a>vax-dec-ultrix</h3>
  
  <p>Don't try compiling with VAX C (<span class="command">vcc</span>).  It produces incorrect code
  in some cases (for example, when <code>alloca</code> is used).
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC55"></a><a name="x_002dx_002dvxworks"></a>*-*-vxworks*</h3>
  
  <p>Support for VxWorks is in flux.  At present GCC supports <em>only</em> the
  very recent VxWorks 5.5 (aka Tornado 2.2) release, and only on PowerPC. 
*************** VxWorks will incorporate this module.)
*** 1473,1479 ****
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC58"></a><a name="x86_005f64_002d_002a_002d_002a"></a>x86_64-*-*, amd64-*-*</h3>
  
  <p>GCC supports the x86-64 architecture implemented by the AMD64 processor
  (amd64-*-* is an alias for x86_64-*-*) on GNU/Linux, FreeBSD and NetBSD. 
--- 1475,1481 ----
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC56"></a><a name="x86_005f64_002dx_002dx"></a>x86_64-*-*, amd64-*-*</h3>
  
  <p>GCC supports the x86-64 architecture implemented by the AMD64 processor
  (amd64-*-* is an alias for x86_64-*-*) on GNU/Linux, FreeBSD and NetBSD. 
*************** both 64-bit x86-64 and 32-bit x86 code (
*** 1482,1488 ****
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC59"></a><a name="xtensa_002d_002a_002delf"></a>xtensa-*-elf</h3>
  
  <p>This target is intended for embedded Xtensa systems using the
  <span class="samp">newlib</span> C library.  It uses ELF but does not support shared
--- 1484,1490 ----
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC57"></a><a name="xtensa_002dx_002delf"></a>xtensa-*-elf</h3>
  
  <p>This target is intended for embedded Xtensa systems using the
  <span class="samp">newlib</span> C library.  It uses ELF but does not support shared
*************** which you can use to replace the default
*** 1499,1505 ****
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC60"></a><a name="xtensa_002d_002a_002dlinux_002a"></a>xtensa-*-linux*</h3>
  
  <p>This target is for Xtensa systems running GNU/Linux.  It supports ELF
  shared objects and the GNU C library (glibc).  It also generates
--- 1501,1507 ----
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC58"></a><a name="xtensa_002dx_002dlinux"></a>xtensa-*-linux*</h3>
  
  <p>This target is for Xtensa systems running GNU/Linux.  It supports ELF
  shared objects and the GNU C library (glibc).  It also generates
*************** respects, this target is the same as the
*** 1510,1516 ****
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC61"></a><a name="windows"></a>Microsoft Windows (32-bit)</h3>
  
  <p>A port of GCC 2.95.2 and 3.x is included with the
  <a href="http://www.cygwin.com/">Cygwin environment</a>.
--- 1512,1518 ----
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC59"></a><a name="windows"></a>Microsoft Windows (32-bit)</h3>
  
  <p>A port of GCC 2.95.2 and 3.x is included with the
  <a href="http://www.cygwin.com/">Cygwin environment</a>.
*************** are no plans to make it do so.
*** 1523,1529 ****
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC62"></a><a name="os2"></a>OS/2</h3>
  
  <p>GCC does not currently support OS/2.  However, Andrew Zabolotny has been
  working on a generic OS/2 port with pgcc.  The current code can be found
--- 1525,1531 ----
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC60"></a><a name="os2"></a>OS/2</h3>
  
  <p>GCC does not currently support OS/2.  However, Andrew Zabolotny has been
  working on a generic OS/2 port with pgcc.  The current code can be found
*************** at <a href="http://www.goof.com/pcg/os2/
*** 1534,1540 ****
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC63"></a><a name="older"></a>Older systems</h3>
  
  <p>GCC contains support files for many older (1980s and early
  1990s) Unix variants.  For the most part, support for these systems
--- 1536,1542 ----
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC61"></a><a name="older"></a>Older systems</h3>
  
  <p>GCC contains support files for many older (1980s and early
  1990s) Unix variants.  For the most part, support for these systems
*************** current GCC) is to be found in the GCC t
*** 1578,1584 ****
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC64"></a><a name="elf_005ftargets"></a>all ELF targets (SVR4, Solaris 2, etc.)</h3>
  
  <p>C++ support is significantly better on ELF targets if you use the
  <a href="./configure.html#with-gnu-ld">GNU linker</a>; duplicate copies of
--- 1580,1586 ----
  
     <p><hr />
  
! <h3 class="heading"><a name="TOC62"></a><a name="elf_005ftargets"></a>all ELF targets (SVR4, Solaris 2, etc.)</h3>
  
  <p>C++ support is significantly better on ELF targets if you use the
  <a href="./configure.html#with-gnu-ld">GNU linker</a>; duplicate copies of
diff -Nrcpad gcc-3.4.3/INSTALL/test.html gcc-4.0.0/INSTALL/test.html
*** gcc-3.4.3/INSTALL/test.html	Fri Nov  5 04:14:11 2004
--- gcc-4.0.0/INSTALL/test.html	Thu Apr 21 07:04:15 2005
***************
*** 8,14 ****
  <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
  <!--
  Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
! 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
  
     Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.2 or
--- 8,14 ----
  <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
  <!--
  Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
! 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
  
     Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.2 or
*************** These are part of the full distribution,
*** 58,65 ****
  separately.
  
     <p>Second, you must have the testing tools installed.  This includes
! <a href="http://www.gnu.org/software/dejagnu/">DejaGnu</a> 1.4.1 or 1.4.3
! and later, Tcl, and Expect; the DejaGnu site has links to these.
  
     <p>If the directories where <span class="command">runtest</span> and <span class="command">expect</span> were
  installed are not in the <span class="env">PATH</span>, you may need to set the following
--- 58,65 ----
  separately.
  
     <p>Second, you must have the testing tools installed.  This includes
! <a href="http://www.gnu.org/software/dejagnu/">DejaGnu</a> 1.4.4 and later,
! Tcl, and Expect; the DejaGnu site has links to these.
  
     <p>If the directories where <span class="command">runtest</span> and <span class="command">expect</span> were
  installed are not in the <span class="env">PATH</span>, you may need to set the following
*************** slashes separate options.
*** 123,129 ****
     <p>You can run the testsuites multiple times using combinations of options
  with a syntax similar to the brace expansion of popular shells:
  
! <pre class="smallexample">         ..."--target_board=arm-sim{-mhard-float,-msoft-float}{-O1,-O2,-O3,}"
  </pre>
     <p>(Note the empty option caused by the trailing comma in the final group.) 
  The following will run each testsuite eight times using the <span class="samp">arm-sim</span>
--- 123,129 ----
     <p>You can run the testsuites multiple times using combinations of options
  with a syntax similar to the brace expansion of popular shells:
  
! <pre class="smallexample">         ..."--target_board=arm-sim/{-mhard-float,-msoft-float}{-O1,-O2,-O3,}"
  </pre>
     <p>(Note the empty option caused by the trailing comma in the final group.) 
  The following will run each testsuite eight times using the <span class="samp">arm-sim</span>
*************** testsuite at <span class="file">libjava/
*** 176,182 ****
  specifying the location of that tree when invoking <span class="samp">make</span>, as in
  <span class="samp">make MAUVEDIR=~/mauve check</span>.
  
!    <p><a href="http://www-124.ibm.com/developerworks/oss/cvs/jikes/~checkout~/jacks/jacks.html">Jacks</a>
  is a free testsuite that tests Java compiler front ends.  This suite
  can be run as part of libgcj testing by placing the Jacks tree within
  the libjava testsuite at <span class="file">libjava/testsuite/libjava.jacks/jacks</span>.
--- 176,182 ----
  specifying the location of that tree when invoking <span class="samp">make</span>, as in
  <span class="samp">make MAUVEDIR=~/mauve check</span>.
  
!    <p><a href="http://sources.redhat.com/mauve/">Jacks</a>
  is a free testsuite that tests Java compiler front ends.  This suite
  can be run as part of libgcj testing by placing the Jacks tree within
  the libjava testsuite at <span class="file">libjava/testsuite/libjava.jacks/jacks</span>.
diff -Nrcpad gcc-3.4.3/LAST_UPDATED gcc-4.0.0/LAST_UPDATED
*** gcc-3.4.3/LAST_UPDATED	Fri Nov  5 04:14:06 2004
--- gcc-4.0.0/LAST_UPDATED	Thu Apr 21 07:04:11 2005
***************
*** 1 ****
! Obtained from CVS: -rgcc_3_4_3_release 
--- 1 ----
! Obtained from CVS: -rgcc_4_0_0_release 
diff -Nrcpad gcc-3.4.3/MAINTAINERS gcc-4.0.0/MAINTAINERS
*** gcc-3.4.3/MAINTAINERS	Wed Oct  6 12:00:26 2004
--- gcc-4.0.0/MAINTAINERS	Thu Apr 14 22:56:33 2005
*************** Michael Meissner				gnu@the-meissners.or
*** 29,35 ****
  Jason Merrill					jason@redhat.com
  David S. Miller					davem@redhat.com
  Mark Mitchell					mark@codesourcery.com
! Bernd Schmidt					bernds@redhat.com
  Zack Weinberg					zack@codesourcery.com
  Jim Wilson					wilson@specifixinc.com
  
--- 29,35 ----
  Jason Merrill					jason@redhat.com
  David S. Miller					davem@redhat.com
  Mark Mitchell					mark@codesourcery.com
! Bernd Schmidt					bernd.schmidt@analog.com
  Zack Weinberg					zack@codesourcery.com
  Jim Wilson					wilson@specifixinc.com
  
*************** Jim Wilson					wilson@specifixinc.com
*** 39,56 ****
  alpha port		Richard Henderson	rth@redhat.com
  arm port		Nick Clifton		nickc@redhat.com
  arm port		Richard Earnshaw	rearnsha@arm.com
  avr port		Denis Chertykov		denisc@overta.ru
  avr port		Marek Michalkiewicz	marekm@amelek.gda.pl
  c4x port		Michael Hayes		m.hayes@elec.canterbury.ac.nz
  cris port		Hans-Peter Nilsson	hp@axis.com
  fr30 port		Nick Clifton		nickc@redhat.com
  h8 port			Jeff Law		law@redhat.com
  h8 port			Kazu Hirata		kazu@cs.umass.edu
  hppa port		Jeff Law		law@redhat.com
  hppa port		Dave Anglin		dave.anglin@nrc.ca
  i386 port		Richard Henderson	rth@redhat.com
  i860 port		Jason Eckhardt		jle@rice.edu
- i960 port		Jim Wilson		wilson@specifixinc.com
  ia64 port		Jim Wilson		wilson@specifixinc.com
  ip2k port		Denis Chertykov		denisc@overta.ru
  iq2000 port		Stan Cox		scox@redhat.com
--- 39,58 ----
  alpha port		Richard Henderson	rth@redhat.com
  arm port		Nick Clifton		nickc@redhat.com
  arm port		Richard Earnshaw	rearnsha@arm.com
+ arm port		Paul Brook		paul@codesourcery.com
  avr port		Denis Chertykov		denisc@overta.ru
  avr port		Marek Michalkiewicz	marekm@amelek.gda.pl
  c4x port		Michael Hayes		m.hayes@elec.canterbury.ac.nz
  cris port		Hans-Peter Nilsson	hp@axis.com
  fr30 port		Nick Clifton		nickc@redhat.com
+ frv port		Aldy Hernandez		aldyh@redhat.com
+ frv port		Alexandre Oliva		aoliva@redhat.com
  h8 port			Jeff Law		law@redhat.com
  h8 port			Kazu Hirata		kazu@cs.umass.edu
  hppa port		Jeff Law		law@redhat.com
  hppa port		Dave Anglin		dave.anglin@nrc.ca
  i386 port		Richard Henderson	rth@redhat.com
  i860 port		Jason Eckhardt		jle@rice.edu
  ia64 port		Jim Wilson		wilson@specifixinc.com
  ip2k port		Denis Chertykov		denisc@overta.ru
  iq2000 port		Stan Cox		scox@redhat.com
*************** rs6000 port		David Edelsohn		dje@watson.
*** 71,77 ****
  rs6000 vector extns	Aldy Hernandez		aldyh@redhat.com
  s390 port		Hartmut Penner		hpenner@de.ibm.com
  s390 port		Ulrich Weigand		uweigand@de.ibm.com
! sh port			Joern Rennecke		joern.rennecke@superh.com
  sh port			Alexandre Oliva		aoliva@redhat.com
  sparc port		Richard Henderson	rth@redhat.com
  sparc port		David S. Miller		davem@redhat.com
--- 73,79 ----
  rs6000 vector extns	Aldy Hernandez		aldyh@redhat.com
  s390 port		Hartmut Penner		hpenner@de.ibm.com
  s390 port		Ulrich Weigand		uweigand@de.ibm.com
! sh port			Joern Rennecke		joern.rennecke@st.com
  sh port			Alexandre Oliva		aoliva@redhat.com
  sparc port		Richard Henderson	rth@redhat.com
  sparc port		David S. Miller		davem@redhat.com
*************** xtensa port		Bob Wilson		bob.wilson@acm.
*** 87,123 ****
  			OS Port Maintainers	(OS alphabetical order)
  
  darwin port		Stan Shebs		shebs@apple.com
  freebsd			Loren J. Rittle		ljrittle@acm.org
! netbsd			Jason Thorpe		thorpej@wasabisystems.com
  sco5, unixware, sco udk	Kean Johnston		jkj@sco.com
  sh-linux-gnu		Kaz Kojima		kkojima@gcc.gnu.org
  
! 			Various Maintainers
  
  C front end/ISO C99	Joseph Myers		jsm@polyomino.org.uk
  C front end/ISO C99	Richard Henderson	rth@redhat.com
  Ada front end		Geert Bosch		bosch@gnat.com
  Ada front end		Robert Dewar		dewar@gnat.com
  Ada front end		Arnaud Charlet		charlet@act-europe.fr
! fortran			Richard Henderson	rth@redhat.com
! fortran			Toon Moene		toon@moene.indiv.nluug.nl
! fortran 95		Paul Brook		paul@nowt.org
  fortran 95		Steven Bosscher		stevenb@suse.de
  fortran 95		Toon Moene		toon@moene.indiv.nluug.nl
  c++			Jason Merrill		jason@redhat.com
  c++                     Mark Mitchell		mark@codesourcery.com
! cpplib			Dave Brolley		brolley@redhat.com
! cpplib			Per Bothner		per@bothner.com
! cpplib			Zack Weinberg		zack@codesourcery.com
! cpplib			Neil Booth		neil@daikokuya.co.uk
  java			Per Bothner		per@bothner.com
  java			Andrew Haley		aph@redhat.com
- libgcj			Tom Tromey		tromey@redhat.com
- libgcj			Bryce McKinlay		bryce@gcc.gnu.org
  mercury			Fergus Henderson	fjh@cs.mu.oz.au
  objective-c		Stan Shebs		shebs@apple.com
  objective-c		Ovidiu Predescu		ovidiu@cup.hp.com
  objective-c		Ziemowit Laski		zlaski@apple.com
  libobjc			Nicola Pero		n.pero@mi.flashnet.it
  libobjc			Andrew Pinski		pinskia@physics.uc.edu
  alias analysis		John Carr		jfc@mit.edu
--- 89,136 ----
  			OS Port Maintainers	(OS alphabetical order)
  
  darwin port		Stan Shebs		shebs@apple.com
+ darwin port		Dale Johannesen		dalej@apple.com
+ DJGPP			DJ Delorie		dj@delorie.com
  freebsd			Loren J. Rittle		ljrittle@acm.org
! netbsd			Jason Thorpe		thorpej@netbsd.org
  sco5, unixware, sco udk	Kean Johnston		jkj@sco.com
  sh-linux-gnu		Kaz Kojima		kkojima@gcc.gnu.org
+ RTEMS Ports		Joel Sherrill		joel@oarcorp.com
+ RTEMS Ports		Ralf Corsepius		ralf.corsepius@rtems.org
+ VxWorks ports		Zack Weinberg		zack@codesourcery.com
+ VxWorks ports		Nathan Sidwell		nathan@codesourcery.com
+ windows, cygwin, mingw	Christopher Faylor	cgf@gcc.gnu.org
+ windows, cygwin, mingw	Danny Smith		dannysmith@users.sourceforge.net
  
! 			Language Front Ends Maintainers
  
  C front end/ISO C99	Joseph Myers		jsm@polyomino.org.uk
  C front end/ISO C99	Richard Henderson	rth@redhat.com
  Ada front end		Geert Bosch		bosch@gnat.com
  Ada front end		Robert Dewar		dewar@gnat.com
  Ada front end		Arnaud Charlet		charlet@act-europe.fr
! fortran 95		Paul Brook		paul@codesourcery.com
  fortran 95		Steven Bosscher		stevenb@suse.de
  fortran 95		Toon Moene		toon@moene.indiv.nluug.nl
  c++			Jason Merrill		jason@redhat.com
  c++                     Mark Mitchell		mark@codesourcery.com
! c++			Nathan Sidwell		nathan@codesourcery.com
  java			Per Bothner		per@bothner.com
  java			Andrew Haley		aph@redhat.com
  mercury			Fergus Henderson	fjh@cs.mu.oz.au
  objective-c		Stan Shebs		shebs@apple.com
  objective-c		Ovidiu Predescu		ovidiu@cup.hp.com
  objective-c		Ziemowit Laski		zlaski@apple.com
+ treelang                Tim Josling             tej@melbpc.org.au
+ treelang                James A. Morrison	phython@gcc.gnu.org
+ 
+ 			Various Maintainers
+ 
+ cpplib			Dave Brolley		brolley@redhat.com
+ cpplib			Per Bothner		per@bothner.com
+ cpplib			Zack Weinberg		zack@codesourcery.com
+ libgcj			Tom Tromey		tromey@redhat.com
+ libgcj			Bryce McKinlay		bryce@gcc.gnu.org
  libobjc			Nicola Pero		n.pero@mi.flashnet.it
  libobjc			Andrew Pinski		pinskia@physics.uc.edu
  alias analysis		John Carr		jfc@mit.edu
*************** loop discovery		Michael Hayes		m.hayes@e
*** 126,131 ****
--- 139,145 ----
  scheduler (+ haifa)	Jim Wilson		wilson@specifixinc.com
  scheduler (+ haifa)	Michael Meissner	gnu@the-meissners.org
  scheduler (+ haifa)	Jeff Law		law@redhat.com
+ scheduler (+ haifa)	Vladimir Makarov	vmakarov@redhat.com
  reorg			Jeff Law		law@redhat.com
  caller-save.c		Jeff Law		law@redhat.com
  callgraph		Jan Hubicka		jh@suse.cz
*************** gcse.c 			Jeff Law		law@redhat.com
*** 144,176 ****
  global opt framework	Jeff Law		law@redhat.com
  jump.c			David S. Miller		davem@redhat.com
  web pages		Gerald Pfeifer		gerald@pfeifer.com
! web pages		Janis Johnson		janis187@us.ibm.com
  config.sub/config.guess	Ben Elliston		config-patches@gnu.org
  basic block reordering	Jason Eckhardt		jle@rice.edu
  i18n			Philipp Thomas		pthomas@suse.de
  diagnostic messages	Gabriel Dos Reis	gdr@integrable-solutions.net
- windows, cygwin, mingw	Christopher Faylor	cgf@redhat.com
- DJGPP			DJ Delorie		dj@delorie.com
  libiberty		DJ Delorie		dj@redhat.com
! libiberty		Ian Lance Taylor	ian@wasabisystems.com
  build machinery (*.in)	DJ Delorie		dj@redhat.com
  build machinery (*.in)	Nathanael Nerode	neroden@gcc.gnu.org
  build machinery (*.in)	Alexandre Oliva		aoliva@redhat.com
  docs co-maintainer	Gerald Pfeifer		gerald@pfeifer.com
  docs co-maintainer	Joseph Myers		jsm@polyomino.org.uk
- Pico-Java port		Steve Chamberlain	sac@transmeta.com
- RTEMS Ports		Joel Sherrill		joel@oarcorp.com
- VxWorks	ports		Zack Weinberg		zack@codesourcery.com
- VxWorks	ports		Nathan Sidwell		nathan@codesourcery.com
  predict.def		Jan Hubicka		jh@suse.cz
  contrib/regression	Geoff Keating		geoffk@geoffk.org
- treelang                Tim Josling             tej@melbpc.org.au
- new regalloc (ra*)	Michael Matz		matz@suse.de
  gcov			Jan Hubicka		jh@suse.cz
  gcov			Nathan Sidwell		nathan@codesourcery.com
  option handling		Neil Booth		neil@daikokuya.co.uk
  libffi testsuite	Andreas Tobler		andreast@gcc.gnu.org
  middle-end		Roger Sayle		roger@eyesopen.com
  
  Note individuals who maintain parts of the compiler need approval to check
  in changes outside of the parts of the compiler they maintain.
--- 158,191 ----
  global opt framework	Jeff Law		law@redhat.com
  jump.c			David S. Miller		davem@redhat.com
  web pages		Gerald Pfeifer		gerald@pfeifer.com
! build status lists	Janis Johnson		janis187@us.ibm.com
  config.sub/config.guess	Ben Elliston		config-patches@gnu.org
  basic block reordering	Jason Eckhardt		jle@rice.edu
  i18n			Philipp Thomas		pthomas@suse.de
+ i18n			Joseph Myers		jsm@polyomino.org.uk
  diagnostic messages	Gabriel Dos Reis	gdr@integrable-solutions.net
  libiberty		DJ Delorie		dj@redhat.com
! libiberty		Ian Lance Taylor	ian@airs.com
  build machinery (*.in)	DJ Delorie		dj@redhat.com
  build machinery (*.in)	Nathanael Nerode	neroden@gcc.gnu.org
  build machinery (*.in)	Alexandre Oliva		aoliva@redhat.com
  docs co-maintainer	Gerald Pfeifer		gerald@pfeifer.com
  docs co-maintainer	Joseph Myers		jsm@polyomino.org.uk
  predict.def		Jan Hubicka		jh@suse.cz
  contrib/regression	Geoff Keating		geoffk@geoffk.org
  gcov			Jan Hubicka		jh@suse.cz
  gcov			Nathan Sidwell		nathan@codesourcery.com
  option handling		Neil Booth		neil@daikokuya.co.uk
  libffi testsuite	Andreas Tobler		andreast@gcc.gnu.org
+ testsuite		Janis Johnson		janis187@us.ibm.com
  middle-end		Roger Sayle		roger@eyesopen.com
+ tree-ssa		Diego Novillo		dnovillo@redhat.com
+ tree-ssa		Andrew MacLeod		amacleod@redhat.com
+ PRE, points-to		Daniel Berlin		dberlin@dberlin.org
+ mudflap			Frank Ch. Eigler	fche@redhat.com
+ tree browser/unparser	Sebastian Pop		pop@cri.ensmp.fr
+ profile feedback	Jan Hubicka		jh@suse.cz
+ type-safe vectors	Nathan Sidwell		nathan@codesourcery.com
  
  Note individuals who maintain parts of the compiler need approval to check
  in changes outside of the parts of the compiler they maintain.
*************** in changes outside of the parts of the c
*** 178,215 ****
  
  			Write After Approval	(last name alphabetical order)
  
  Matt Austern                                    austern@apple.com
  Giovanni Bajo					giovannibajo@gcc.gnu.org
  Scott Bambrough					scottb@netwinder.org
  Wolfgang Bangerth				bangerth@dealii.org
- Daniel Berlin					dan@dberlin.org
  David Billinghurst				David.Billinghurst@riotinto.com
  Laurynas Biveinis			        laurynas.biveinis@mif.vu.lt
  Eric Blake					ericb@gcc.gnu.org
  Jim Blandy					jimb@redhat.com
  Phil Blundell					pb@futuretv.com
  Hans Boehm					hboehm@gcc.gnu.org
  Robert Bowdidge                                 bowdidge@apple.com
  Joel Brobecker					brobecker@gnat.com
  Kevin Buettner					kevinb@redhat.com
  Andrew Cagney					cagney@redhat.com
  Chandra Chavva					cchavva@redhat.com
  William Cohen					wcohen@redhat.com
  R. Kelley Cook					kcook@gcc.gnu.org
  Christian Cornelssen				ccorn@cs.tu-berlin.de
  David Daney					ddaney@avtrex.com
  Chris Demetriou					cgd@broadcom.com
  Zdenek Dvorak					dvorakz@suse.cz
  Steve Ellcey					sje@cup.hp.com
- Ben Elliston					bje@wasabisystems.com
  Mohan Embar					gnustuff@thisiscool.com
  Marc Espie					espie@cvs.openbsd.org
  Ansgar Esztermann				ansgar@thphy.uni-duesseldorf.de
  Doug Evans					dje@transmeta.com
  Kaveh Ghazi					ghazi@caip.rutgers.edu
  Matthew Gingell					gingell@gnat.com
  Anthony Green					green@redhat.com
! Laurent Guerby					guerby@acm.org
  Olivier Hainque					hainque@act-europe.fr
  Stuart Hastings					stuart@apple.com
  Matthew Hiller					hiller@redhat.com
--- 193,242 ----
  
  			Write After Approval	(last name alphabetical order)
  
+ Mark G. Adams                                   mark.g.adams@sympatico.ca
  Matt Austern                                    austern@apple.com
+ David Ayers					d.ayers@inode.at
  Giovanni Bajo					giovannibajo@gcc.gnu.org
  Scott Bambrough					scottb@netwinder.org
  Wolfgang Bangerth				bangerth@dealii.org
  David Billinghurst				David.Billinghurst@riotinto.com
  Laurynas Biveinis			        laurynas.biveinis@mif.vu.lt
+ Uros Bizjak					uros@kss-loka.si
  Eric Blake					ericb@gcc.gnu.org
  Jim Blandy					jimb@redhat.com
  Phil Blundell					pb@futuretv.com
  Hans Boehm					hboehm@gcc.gnu.org
+ Segher Boessenkool				segher@kernel.crashing.org
+ Paolo Bonzini					bonzini@gnu.org
+ Neil Booth					neil@daikokuya.co.uk
  Robert Bowdidge                                 bowdidge@apple.com
  Joel Brobecker					brobecker@gnat.com
  Kevin Buettner					kevinb@redhat.com
  Andrew Cagney					cagney@redhat.com
+ Steve Chamberlain				sac@transmeta.com
+ Michael Chastain				mec.gnu@mindspring.com
  Chandra Chavva					cchavva@redhat.com
  William Cohen					wcohen@redhat.com
  R. Kelley Cook					kcook@gcc.gnu.org
  Christian Cornelssen				ccorn@cs.tu-berlin.de
+ François-Xavier Coudert				coudert@clipper.ens.fr
  David Daney					ddaney@avtrex.com
+ Bud Davis					bdavis9659@comcast.net
  Chris Demetriou					cgd@broadcom.com
  Zdenek Dvorak					dvorakz@suse.cz
  Steve Ellcey					sje@cup.hp.com
  Mohan Embar					gnustuff@thisiscool.com
  Marc Espie					espie@cvs.openbsd.org
  Ansgar Esztermann				ansgar@thphy.uni-duesseldorf.de
  Doug Evans					dje@transmeta.com
+ Brian Ford					ford@vss.fsi.com
  Kaveh Ghazi					ghazi@caip.rutgers.edu
  Matthew Gingell					gingell@gnat.com
  Anthony Green					green@redhat.com
! Doug Gregor					doug.gregor@gmail.com
! Richard Guenther				rguenth@gcc.gnu.org
! Laurent Guerby					laurent@guerby.net
! Mostafa Hagog					hagog@gcc.gnu.org
  Olivier Hainque					hainque@act-europe.fr
  Stuart Hastings					stuart@apple.com
  Matthew Hiller					hiller@redhat.com
*************** Bernardo Innocenti				bernie@develer.com
*** 219,231 ****
  Daniel Jacobowitz				dan@debian.org
  Andreas Jaeger					aj@suse.de
  Fariborz Jahanian				fjahanian@apple.com
- Dale Johannesen 				dalej@apple.com
  Klaus Kaempf					kkaempf@progis.de
  Brendan Kehoe					brendan@zen.org
  Mumit Khan					khan@xraylith.wisc.edu
  Matthias Klose					doko@debian.org
  Jeff Knaggs					jknaggs@redhat.com
! Matt Kraai					kraai@alumni.cmu.edu
  Marc Lehmann					pcg@goof.com
  Alan Lehotsky					apl@alum.mit.edu
  James Lemke					jim@wasabisystems.com
--- 246,263 ----
  Daniel Jacobowitz				dan@debian.org
  Andreas Jaeger					aj@suse.de
  Fariborz Jahanian				fjahanian@apple.com
  Klaus Kaempf					kkaempf@progis.de
+ Steve Kargl					sgk@troutmask.apl.washington.edu
  Brendan Kehoe					brendan@zen.org
  Mumit Khan					khan@xraylith.wisc.edu
  Matthias Klose					doko@debian.org
  Jeff Knaggs					jknaggs@redhat.com
! Michael Koch					konqueror@gmx.de
! Thomas Koenig					Thomas.Koenig@online.de
! Matt Kraai					kraai@ftbfs.org
! Scott Robert Ladd				scott.ladd@coyotegulch.com
! Razya Ladelsky					razya@gcc.gnu.org
! Aaron W. LaFramboise				aaronavay62@aaronwl.com
  Marc Lehmann					pcg@goof.com
  Alan Lehotsky					apl@alum.mit.edu
  James Lemke					jim@wasabisystems.com
*************** Kriang Lerdsuwanakij				lerdsuwa@users.s
*** 233,243 ****
  Warren Levy					warrenl@cruzio.com
  Don Lindsay					dlindsay@redhat.com
  Ralph Loader					rcl@ihug.co.nz
  Dave Love					d.love@dl.ac.uk
  Martin v. Löwis					loewis@informatik.hu-berlin.de
  HJ Lu						hjl@lucon.org
! Andrew Macleod					amacleod@redhat.com
! Vladimir Makarov				vmakarov@redhat.com
  Greg McGary					gkm@gnu.org
  Adam Megacz					adam@xwt.org
  Alan Modra					amodra@bigpond.net.au
--- 265,276 ----
  Warren Levy					warrenl@cruzio.com
  Don Lindsay					dlindsay@redhat.com
  Ralph Loader					rcl@ihug.co.nz
+ Gabor Loki					loki@inf.u-szeged.hu
  Dave Love					d.love@dl.ac.uk
  Martin v. Löwis					loewis@informatik.hu-berlin.de
  HJ Lu						hjl@lucon.org
! Ranjit Mathew					rmathew@hotmail.com
! Michael Matz					matz@suse.de
  Greg McGary					gkm@gnu.org
  Adam Megacz					adam@xwt.org
  Alan Modra					amodra@bigpond.net.au
*************** Catherine Moore					clm@redhat.com
*** 245,251 ****
  Dorit Naishlos                                  dorit@il.ibm.com
  Adam Nemet					anemet@lnxw.com
  Dan Nicolaescu					dann@ics.uci.edu
- Diego Novillo					dnovillo@redhat.com
  David O'Brien					obrien@FreeBSD.org
  Turly O'Connor					turly@apple.com
  Jeffrey D. Oldham				oldham@codesourcery.com
--- 278,283 ----
*************** Devang Patel					dpatel@apple.com
*** 254,260 ****
  Graeme Peterson					gp@qnx.com
  Alexandre Petit-Bianco				apbianco@redhat.com
  Nicolas Pitre					nico@cam.org
- Sebastian Pop                                   s.pop@laposte.net
  Clinton Popetz					cpopetz@cpopetz.com
  Jerry Quinn					jlquinn@optonline.net
  Rolf Rasmussen					rolfwr@gcc.gnu.org
--- 286,291 ----
*************** Volker Reichelt					reichelt@igpm.rwth-a
*** 262,287 ****
  Tom Rix						trix@redhat.com
  Craig Rodrigues					rodrigc@gcc.gnu.org
  Gavin Romig-Koch				gavin@redhat.com
  Ira Ruben					ira@apple.com
  Douglas Rupp					rupp@gnat.com
  Alex Samuel					samuel@codesourcery.com
  Andreas Schwab					schwab@suse.de
  Svein Seldal                                    svein.seldal@solidas.com
  Franz Sirl					franz.sirl-kernel@lauterbach.com
- Danny Smith					dannysmith@users.sourceforge.net
  Michael Sokolov					msokolov@ivan.Harhan.ORG
  Richard Stallman				rms@gnu.org
  Graham Stott					graham.stott@btinternet.com
  Mike Stump					mrs@apple.com
  Jeff Sturm					jsturm@gcc.gnu.org
  Kresten Krab Thorup				krab@gcc.gnu.org
  Michael Tiemann					tiemann@redhat.com
  Jonathan Wakely					redi@gcc.gnu.org
  Krister Walfridsson				cato@df.lth.se
  John Wehle					john@feith.com
  Florian Weimer					fw@deneb.enyo.de
  Mark Wielaard					mark@gcc.gnu.org
  Carlo Wood					carlo@alinoe.com
  Josef Zlomek					josef.zlomek@email.cz
  
  Bug database only accounts
--- 293,324 ----
  Tom Rix						trix@redhat.com
  Craig Rodrigues					rodrigc@gcc.gnu.org
  Gavin Romig-Koch				gavin@redhat.com
+ Ira Rosen                                       irar@il.ibm.com
  Ira Ruben					ira@apple.com
  Douglas Rupp					rupp@gnat.com
+ Matthew Sachs					msachs@apple.com
  Alex Samuel					samuel@codesourcery.com
+ Tobias Schlüter					tobias.schlueter@physik.uni-muenchen.de
  Andreas Schwab					schwab@suse.de
  Svein Seldal                                    svein.seldal@solidas.com
  Franz Sirl					franz.sirl-kernel@lauterbach.com
  Michael Sokolov					msokolov@ivan.Harhan.ORG
  Richard Stallman				rms@gnu.org
  Graham Stott					graham.stott@btinternet.com
  Mike Stump					mrs@apple.com
  Jeff Sturm					jsturm@gcc.gnu.org
  Kresten Krab Thorup				krab@gcc.gnu.org
+ Caroline Tice					ctice@apple.com
  Michael Tiemann					tiemann@redhat.com
  Jonathan Wakely					redi@gcc.gnu.org
  Krister Walfridsson				cato@df.lth.se
+ Feng Wang					fengwang@nudt.edu.cn
  John Wehle					john@feith.com
  Florian Weimer					fw@deneb.enyo.de
  Mark Wielaard					mark@gcc.gnu.org
  Carlo Wood					carlo@alinoe.com
+ Canqun Yang					canqun@nudt.edu.cn
+ Jon Ziegler					jonz@apple.com
  Josef Zlomek					josef.zlomek@email.cz
  
  Bug database only accounts
diff -Nrcpad gcc-3.4.3/MD5SUMS gcc-4.0.0/MD5SUMS
*** gcc-3.4.3/MD5SUMS	Fri Nov  5 05:34:05 2004
--- gcc-4.0.0/MD5SUMS	Thu Apr 21 08:27:12 2005
***************
*** 1,33 ****
  757f7513a1cb3ac08fed2e7833000078  .cvsignore
  8c00452ef1e298846493ec8b239f93e2  ABOUT-NLS
! fc4e93d3ad89a6a7c5e9434dfc67d605  BUGS
  94d55d512a9ba36caa9b7df079bae19f  COPYING
  7fbc338309ac38fefcd64b04bb903e34  COPYING.LIB
! 2515d9ebd2c66519b7b88cad7c285a78  ChangeLog
  b0a6854a6b4c8c22dde51124e6cd7b51  FAQ
  23b8927fe1fb0ab321c09a4f0500aa4c  INSTALL/README
! c897e4f8cb534abfeaf44759d59395b2  INSTALL/binaries.html
! fc9b0324a3c395877790f6c4867414c8  INSTALL/build.html
! 29feef46775c49555a0d308bb6e30d2c  INSTALL/configure.html
! 10411821332d4d14b9f51d11a618ccea  INSTALL/download.html
! 1560915116813cb1c486e42b0aff7094  INSTALL/finalinstall.html
! bb7577123c5f8298d2fcd6800e601f51  INSTALL/gfdl.html
! a9fcd697dc6dcafdcd6f1f24c6aed994  INSTALL/index.html
! b349bd473a6997e0d76c10630ccc03a8  INSTALL/old.html
! 5d6de25454da263ca404719fa1449932  INSTALL/prerequisites.html
! 71ef18c577675cee98b42015976a8a1d  INSTALL/specific.html
! 0a1aecf4dbe174e3b397c7bd2056fa5d  INSTALL/test.html
! ce44a7ca77a07658c7f513021a47ba1e  LAST_UPDATED
! 7e6b35f6483044207ed73efa9c9c1ea7  MAINTAINERS
! fffd671f51fabeb12dd1b148070e5bde  Makefile.def
! b53d5ca47f0c7288646d5eb2974772a0  Makefile.in
! d605ff4d33b9395183faecade4501374  Makefile.tpl
! a852cf4f501a6fa32686a15b57701078  NEWS
  750a7546d281ac42eb2ce87949457731  README
! c63d2446c687f13238f28e9322abcef1  README.SCO
  b510a5285eb05298b5f3d9f5ae920588  boehm-gc/AmigaOS.c
! 761033ad4a2f6479bdf3b7002c9c0b9d  boehm-gc/BCC_MAKEFILE
! 6bfc053acdb5ddf8c42964c37eeab918  boehm-gc/ChangeLog
  c18075e3729cd116028480307a8e845d  boehm-gc/EMX_MAKEFILE
  3b7cc3be9ed3c2135bbda990e8a69303  boehm-gc/MacOS.c
  5cf7764626b7dd7272b2fe11403d1b6a  boehm-gc/MacProjects.sit.hqx
--- 1,45 ----
+ # This file contains the MD5 checksums of the files in the 
+ # gcc-4.0.0.tar.bz2 tarball.
+ #
+ # Besides verifying that all files in the tarball were correctly expanded,
+ # it also can be used to determine if any files have changed since the
+ # tarball was expanded or to verify that a patchfile was correctly applied.
+ #
+ # Suggested usage:
+ # md5sum -c MD5SUMS | grep -v "OK$"
+ 
  757f7513a1cb3ac08fed2e7833000078  .cvsignore
  8c00452ef1e298846493ec8b239f93e2  ABOUT-NLS
! 43c4fde33e570cf61c33ecd4ab52073d  BUGS
  94d55d512a9ba36caa9b7df079bae19f  COPYING
  7fbc338309ac38fefcd64b04bb903e34  COPYING.LIB
! 170877772724c57f4fa3cb8476a3aeee  ChangeLog
! 09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  b0a6854a6b4c8c22dde51124e6cd7b51  FAQ
  23b8927fe1fb0ab321c09a4f0500aa4c  INSTALL/README
! fc0cbb7f452c7ad028465c26fa684b6a  INSTALL/binaries.html
! 616d0e588b7bbcffb04ffb68103db56b  INSTALL/build.html
! b77eabaf4906c3d52cb4e8db89ed076b  INSTALL/configure.html
! 294ac495d0504b0e9db03305fb36dc1e  INSTALL/download.html
! b59d3504523aba12f45c02632d05d41f  INSTALL/finalinstall.html
! 7230c56d9d4ae3976081778f79ce8e29  INSTALL/gfdl.html
! 2eb1a6c0bd35303dfb16fd33854e3948  INSTALL/index.html
! a7b3c30926bc9b90264127d15bd283ae  INSTALL/old.html
! 8c1385591bb4d39277c0faa0f189dc4e  INSTALL/prerequisites.html
! b04733ccca68d42c8bbfc7777b364cbc  INSTALL/specific.html
! 14af33e799580ba6c993ef3fd2451d46  INSTALL/test.html
! 11a35f8caaf5d0f2a751da067ed02951  LAST_UPDATED
! a3795a78d7f20634498cb686c2494166  MAINTAINERS
! ebff42c8478937facd6fabf0493502cc  Makefile.def
! dc8d8a8ae975f7ade4fd99dd33c26c65  Makefile.in
! d9e508327dc904eb5552b0396b807c89  Makefile.tpl
! d3fe4d0aef5d2e141307c7b890d8ed6a  NEWS
  750a7546d281ac42eb2ce87949457731  README
! ae59822d95102d6ded3f6d03927d8e5b  README.SCO
! ac81461263c340d1f6c7ed86a63b06de  boehm-gc/.cvsignore
  b510a5285eb05298b5f3d9f5ae920588  boehm-gc/AmigaOS.c
! 2caafacabf758bb76a9dfce1fc544b97  boehm-gc/BCC_MAKEFILE
! 1c7218f9e2c49fa3d20dbbcaf27e0cd0  boehm-gc/ChangeLog
  c18075e3729cd116028480307a8e845d  boehm-gc/EMX_MAKEFILE
  3b7cc3be9ed3c2135bbda990e8a69303  boehm-gc/MacOS.c
  5cf7764626b7dd7272b2fe11403d1b6a  boehm-gc/MacProjects.sit.hqx
*************** e9d4bf13bdd11f9590788db857faf080  boehm-
*** 36,83 ****
  f5f78130ed0450ba9503ca3122244195  boehm-gc/Mac_files/dataend.c
  548c55b112b5d4766c7f87be96f79df2  boehm-gc/Mac_files/datastart.c
  8ef74141b1fb9a289228c259044f4934  boehm-gc/Makefile.DLLs
! b6b69ee286b432504760e97c30dba086  boehm-gc/Makefile.am
! 0922273b3a627e577e4d4f0ed6f9f661  boehm-gc/Makefile.direct
! 451244cc8bc78026ff221dc0a2d149d0  boehm-gc/Makefile.dist
! f993f948797c11f72735ba5f3f6abea7  boehm-gc/Makefile.dj
! 28d1fa6bf712726bad6f8ff4d28be855  boehm-gc/Makefile.in
! 02e425e4c53e3de9536087837f654607  boehm-gc/NT_MAKEFILE
  bc4287e5afadf75c1683ec57f0db80d0  boehm-gc/NT_THREADS_MAKEFILE
  749888b0f43759f836347841082757b1  boehm-gc/OS2_MAKEFILE
  67f3742d3ef2c7c24cc97c0b7d94c6ab  boehm-gc/PCR-Makefile
  57928d442dfe43ebee70ea781976e718  boehm-gc/SMakefile.amiga
  751b13e40754f777860f06b14b47d724  boehm-gc/WCC_MAKEFILE
! 6e718206e54cbaa2bceccfd6f5f45ab5  boehm-gc/acinclude.m4
! 705993f9528778b9149f77f3b72b3aa2  boehm-gc/aclocal.m4
  3ef1f8328d55e3c05194a06586ec6be9  boehm-gc/add_gc_prefix.c
! 70e5739dea49b7702efef2c03c43d374  boehm-gc/aix_irix_threads.c
! bde23c95ce1278619e841b1fab068255  boehm-gc/allchblk.c
! 2950c263802312c43a9e64bb7695692f  boehm-gc/alloc.c
  93d5f3e5da0bb1fd5fb37d041a3dab9d  boehm-gc/alpha_mach_dep.S
! 0edd371ecfce0b5ad49dd17560606ec1  boehm-gc/backgraph.c
  a2ed02a22235b4f27ab644ce4f3a9268  boehm-gc/blacklst.c
  b19b7b67bff97d0bceba827fedb07d32  boehm-gc/callprocs
! 54e78fc2c05e222974829de212cf8012  boehm-gc/checksums.c
! dd4451f9cdfc36cdb86703965f758ec2  boehm-gc/config.guess
! 6cdae8120da06ebd9981c7a5a813550b  boehm-gc/config.sub
! 147506ba7fd623f45603b7aa2da2c92c  boehm-gc/configure
! 94d0d40deeeff4a75fffb12fc53d84f4  boehm-gc/configure.host
! c7a1d6d52333e5eb8fe55784fc4c8ebb  boehm-gc/configure.in
  61ccb6486d45cc6d99201cc19f3c579c  boehm-gc/cord/cordbscs.c
! 80f590e0236ce7f644d8d757ed49eadd  boehm-gc/cord/cordprnt.c
! 6339c19bf76fdd2db761b5997df6652b  boehm-gc/cord/cordtest.c
! 9e187f0cf7bd783a4e6c836975a7ee95  boehm-gc/cord/cordxtra.c
! 12965cacfac8c4ac19e29500c195f852  boehm-gc/cord/de.c
  e6830f5dfe747bb9c367a7b407a8669b  boehm-gc/cord/de_cmds.h
  8ffecb4a3b71c2670c6213cea6856437  boehm-gc/cord/de_win.ICO
  61d6fc655984a59ff3b4f7605e3a3a1d  boehm-gc/cord/de_win.RC
  617e10fa7e3d54fe703c352812ecb59b  boehm-gc/cord/de_win.c
  1f6d14aeb448f45364976900ae64ab07  boehm-gc/cord/de_win.h
! ccc8e8d83155afce15258d8809cf39ce  boehm-gc/darwin_stop_world.c
! 4803dff11df628b2cabe4f1974bcefab  boehm-gc/dbg_mlc.c
  b0f2d18b1a8fbbdc04bd85e3c776ace6  boehm-gc/depcomp
  bcb2924e27fe26690ac7949544a13862  boehm-gc/digimars.mak
! 500b2db4d5f736164acfbe57f350e142  boehm-gc/doc/README
  8936cd906e8881ce9748c3b60ee8183f  boehm-gc/doc/README.DGUX386
  097df7d5411644d5c03bad94ec751cf3  boehm-gc/doc/README.Mac
  016e42eb7edb2ee9602c70643582bad9  boehm-gc/doc/README.MacOSX
--- 48,93 ----
  f5f78130ed0450ba9503ca3122244195  boehm-gc/Mac_files/dataend.c
  548c55b112b5d4766c7f87be96f79df2  boehm-gc/Mac_files/datastart.c
  8ef74141b1fb9a289228c259044f4934  boehm-gc/Makefile.DLLs
! 6e32ac28ccd3074beb6bbcd0612b8aff  boehm-gc/Makefile.am
! dfbca9ef8eed29378fa34ab88a644c95  boehm-gc/Makefile.direct
! dfbca9ef8eed29378fa34ab88a644c95  boehm-gc/Makefile.dist
! a50d3b2e14f6cf62519f1f7e557e7221  boehm-gc/Makefile.dj
! 06cc1e74278ffa057dcdee0d7b1f9c5e  boehm-gc/Makefile.in
! bdf166ac9229e7e18158c3c84eb77915  boehm-gc/NT_MAKEFILE
! 4c48a2eb34d18243e169564ded1eda87  boehm-gc/NT_STATIC_THREADS_MAKEFILE
  bc4287e5afadf75c1683ec57f0db80d0  boehm-gc/NT_THREADS_MAKEFILE
  749888b0f43759f836347841082757b1  boehm-gc/OS2_MAKEFILE
  67f3742d3ef2c7c24cc97c0b7d94c6ab  boehm-gc/PCR-Makefile
  57928d442dfe43ebee70ea781976e718  boehm-gc/SMakefile.amiga
  751b13e40754f777860f06b14b47d724  boehm-gc/WCC_MAKEFILE
! 4ad665eacc27b65fe601f4a5820b967c  boehm-gc/aclocal.m4
  3ef1f8328d55e3c05194a06586ec6be9  boehm-gc/add_gc_prefix.c
! d72fbf09c151791492615574a9785ee6  boehm-gc/aix_irix_threads.c
! 78424cf99cbd326b6a61bda6cda08e5c  boehm-gc/allchblk.c
! f3d67631e65cabf40b867ffc522960a4  boehm-gc/alloc.c
  93d5f3e5da0bb1fd5fb37d041a3dab9d  boehm-gc/alpha_mach_dep.S
! 4d95c32423ccd10a176d6fd1c8c12345  boehm-gc/backgraph.c
  a2ed02a22235b4f27ab644ce4f3a9268  boehm-gc/blacklst.c
  b19b7b67bff97d0bceba827fedb07d32  boehm-gc/callprocs
! 32e4857b7b4dbc4bc68e321f70f65dd4  boehm-gc/checksums.c
! 1d2bb75141fbbf7e1a962d6076df1519  boehm-gc/configure
! 7bd554fe6351fcb7b00c0f02c3cdbe7d  boehm-gc/configure.ac
! 56328341fbfbe66715779252aa61943e  boehm-gc/configure.host
  61ccb6486d45cc6d99201cc19f3c579c  boehm-gc/cord/cordbscs.c
! ff07f5cb893d15fa663c69fef1349882  boehm-gc/cord/cordprnt.c
! 119929f0a2d41ddbc16af923a401757b  boehm-gc/cord/cordtest.c
! fa6a069eb4f3568a1e844fb43078b30b  boehm-gc/cord/cordxtra.c
! 7d33b5ab9a3872847582496b7cfb6baf  boehm-gc/cord/de.c
  e6830f5dfe747bb9c367a7b407a8669b  boehm-gc/cord/de_cmds.h
  8ffecb4a3b71c2670c6213cea6856437  boehm-gc/cord/de_win.ICO
  61d6fc655984a59ff3b4f7605e3a3a1d  boehm-gc/cord/de_win.RC
  617e10fa7e3d54fe703c352812ecb59b  boehm-gc/cord/de_win.c
  1f6d14aeb448f45364976900ae64ab07  boehm-gc/cord/de_win.h
! c2f9af65ef5de257b223e18bcc7e1e0c  boehm-gc/darwin_stop_world.c
! 6de7591fc9f2a81e439e1693c514bac1  boehm-gc/dbg_mlc.c
  b0f2d18b1a8fbbdc04bd85e3c776ace6  boehm-gc/depcomp
  bcb2924e27fe26690ac7949544a13862  boehm-gc/digimars.mak
! fe5f64edf544df675a7c680362e70052  boehm-gc/doc/README
  8936cd906e8881ce9748c3b60ee8183f  boehm-gc/doc/README.DGUX386
  097df7d5411644d5c03bad94ec751cf3  boehm-gc/doc/README.Mac
  016e42eb7edb2ee9602c70643582bad9  boehm-gc/doc/README.MacOSX
*************** bcb2924e27fe26690ac7949544a13862  boehm-
*** 85,216 ****
  2a3a65aca359b73ff6fa768f921ff10f  boehm-gc/doc/README.amiga
  0d28d19a4f2f32c564dba6f92f975ad4  boehm-gc/doc/README.arm.cross
  cb6cbc1bf65596c6c3dbfe7d6390f728  boehm-gc/doc/README.autoconf
! 5a7bb0502b3912349e662212ebb359ea  boehm-gc/doc/README.changes
  57e880c9e260ce79f118306516df91c2  boehm-gc/doc/README.contributors
  b7c1bab59ecc8d66807d4822fe1533be  boehm-gc/doc/README.cords
! 8a96e79774c68d79630bf7608da94614  boehm-gc/doc/README.darwin
  e1c7153a3fa63e40ce139d181c499f79  boehm-gc/doc/README.dj
! 297b1e4b971164bb2e2c22a34a694192  boehm-gc/doc/README.environment
  bb02f05d4fa137ae6da66e56221e92d7  boehm-gc/doc/README.ews4800
  4e3dc72c08eae9f4d7aa77ad9947c0c0  boehm-gc/doc/README.hp
  2c49c9f2982e608958bbda464c68aa8d  boehm-gc/doc/README.linux
! 59861912a78c91417d78b6468b2b8f49  boehm-gc/doc/README.macros
  92d23d01dce1a06ad79e5f19c0f64fa3  boehm-gc/doc/README.rs6000
  ecd4ddc47cf9a58470469bbc9af217df  boehm-gc/doc/README.sgi
  762ba87e512736d44c84f0aea796d4e1  boehm-gc/doc/README.solaris2
  a095a2daca7ba15795e9a2bdf5ecc9f5  boehm-gc/doc/README.uts
! a48ab4145a1385a11d490e0d59f9b7c7  boehm-gc/doc/README.win32
  90424433bebc5d19580a6f19f8e90fdb  boehm-gc/doc/barrett_diagram
! b79b75a29d7e7a67e8523bebd5c7c930  boehm-gc/doc/debugging.html
! 1a907c06a092810efbea4b85389668bd  boehm-gc/doc/gc.man
! bfe8a13b92c0c05c273df95e2b3f7181  boehm-gc/doc/gcdescr.html
! 6e87411b25bcf012c6f7ddbc064ae681  boehm-gc/doc/gcinterface.html
  ac036c9b1fe98eb9c7f0a0064cd5083c  boehm-gc/doc/leak.html
  b83df9d6982432f48123f72e76bdad7b  boehm-gc/doc/scale.html
  abecadc7de21d3e0c7cc1ca9c4c86327  boehm-gc/doc/tree.html
! dc403f3111dd963a28cace19464df122  boehm-gc/dyn_load.c
! b1f6dd14e6d76f86d37f508d6a39b211  boehm-gc/finalize.c
  bc4287e5afadf75c1683ec57f0db80d0  boehm-gc/gc.mak
  9e05bd97b8b864b7c2bb28564235e96f  boehm-gc/gc_cpp.cc
  e6e7b9d7e4d0b9716d3e60f3c931b901  boehm-gc/gc_cpp.cpp
  dc46af8ac6358403e11c8f202555b583  boehm-gc/gc_dlopen.c
  81387b2921e93ea0f06257e231579273  boehm-gc/gcc_support.c
! ea59378f756efed8b529d0b15cf57bee  boehm-gc/gcj_mlc.c
  f0c93ff037adfd579b6822152d1912a8  boehm-gc/gcname.c
! 557c04bacca0922307eed285b7211bee  boehm-gc/headers.c
  72c120e90ac0f93bc73599dd41040122  boehm-gc/hpux_test_and_clear.s
  4e5b1cc54ea48eb0c6e64af274874fc2  boehm-gc/ia64_save_regs_in_stack.s
  214b7d9a2e0989b5e2d64c8eba365721  boehm-gc/if_mach.c
! cda4e45f2a37cbafc0cfdb4cc4ef4e57  boehm-gc/if_not_there.c
  c4374424ebf25df207b9be9d7c913d2e  boehm-gc/include/Makefile.am
! 2963ee93daa563bd37da890464da1d8b  boehm-gc/include/Makefile.in
  49d0db4f59bb4874db24c5942ed8c2ee  boehm-gc/include/cord.h
  b1d9c432f2e6709f4eed702f26126ac1  boehm-gc/include/ec.h
! 223974ad28921dc462d1308f19255e6f  boehm-gc/include/gc.h
  3a3e5cb86b6db1fe6ddc2c72b127d44e  boehm-gc/include/gc_alloc.h
! 844f9a2dbec0da5d6c12baa6edcc89cc  boehm-gc/include/gc_allocator.h
  4c84bb6de90f76072b336b30266759d3  boehm-gc/include/gc_amiga_redirects.h
  aab55efd952b275ba1609de52ff80f37  boehm-gc/include/gc_backptr.h
! f5c6dce2372804f3d782cd4e292e2a28  boehm-gc/include/gc_config_macros.h
! 108d88ee7af49f9dd391ec9e8a1d88e1  boehm-gc/include/gc_cpp.h
! ee7870981deacf10cd488047349d2f4e  boehm-gc/include/gc_gcj.h
  f52491fef440e8ceaaa0f8428c8fc70e  boehm-gc/include/gc_inl.h
  31c32d3776a31b9e5dd0d1a6475447a0  boehm-gc/include/gc_inline.h
! 1069f7d9c838131b681e46daeeb50e3f  boehm-gc/include/gc_local_alloc.h
! 93590a106ef80a6cf4c117ed557a6f31  boehm-gc/include/gc_mark.h
  67cc7d598bc1a0fd147a70c348a2c5a4  boehm-gc/include/gc_pthread_redirects.h
  124a9ee194ba655302058d53fbf7053f  boehm-gc/include/gc_typed.h
! 0521e1aec6e87b3136d1c691090552b5  boehm-gc/include/javaxfc.h
  ac6b413e2634fed719426fe40528704c  boehm-gc/include/leak_detector.h
! 64c46e49784eaa80bd7e8717e80538b7  boehm-gc/include/new_gc_alloc.h
  56abb788c2eb93713c1ae682c6ec9516  boehm-gc/include/private/cord_pos.h
  14a4a64df372dafcc6121c4d958ed00c  boehm-gc/include/private/darwin_semaphore.h
! a81043a07411d46ddb72d9f4ffb320b6  boehm-gc/include/private/darwin_stop_world.h
! 32913c705dd56687989499abe09b0f99  boehm-gc/include/private/dbg_mlc.h
  0a5763218eedbd180d2124ba8835ca50  boehm-gc/include/private/gc_hdrs.h
  dcf402d646df6f3e8d1a2f9777f3415d  boehm-gc/include/private/gc_locks.h
! 416679819bc19db10af8c309094918f2  boehm-gc/include/private/gc_pmark.h
! d983eda07a32723c530b3161674fabda  boehm-gc/include/private/gc_priv.h
! 4054abcb719e864a2bd6b0e2aa50ae83  boehm-gc/include/private/gcconfig.h
  fbe5032f5ffd11c46b1e9ae03a9fbc1b  boehm-gc/include/private/pthread_stop_world.h
! fad5730818daa7279a81bc32b2f1c648  boehm-gc/include/private/pthread_support.h
! 49fb24b2deb64ef9df1e605d5897cac4  boehm-gc/include/private/solaris_threads.h
! dca1d90e21bd926a3cee63696fef0ee9  boehm-gc/include/private/specific.h
  9479459c7cba9ce350f48863b51196c0  boehm-gc/include/weakpointer.h
! 5afe8eb5573965dfb58378e4e46f3813  boehm-gc/install-sh
! 331b3976068d431799112861e95d9649  boehm-gc/libtool.m4
! 49ce29bf7034199b126e13d51b99029d  boehm-gc/ltconfig
! bd0503850c015da26e8fa4995fc4aa5c  boehm-gc/ltmain.sh
! fd352f240fd0a1a62650002971529bee  boehm-gc/mach_dep.c
! 8dca846df3485629b8112a0222c3666c  boehm-gc/malloc.c
! a8e9ffb46cc342981c064a266ea26fb6  boehm-gc/mallocx.c
! 3b22d45b609e23e004941a6864596540  boehm-gc/mark.c
! 262c59e7d4da3cd4968097cd00d101a9  boehm-gc/mark_rts.c
  1db5a4f922cc162f4fa6447cbe5e7d53  boehm-gc/mips_sgi_mach_dep.s
  0827ad9a8c72cef5ef63abb18d5e7c78  boehm-gc/mips_ultrix_mach_dep.s
! 5c0af926e6b291609ffd99c0d8bac1be  boehm-gc/misc.c
! bc994884d395541d40c4192919a89a21  boehm-gc/mkinstalldirs
! 41f5ff1648fe32ba5f78cc53122ba3cf  boehm-gc/new_hblk.c
  e308d74d7779ecc729bad15d2cb03904  boehm-gc/obj_map.c
! c8bdf684444c79a9dc96f08093f2709f  boehm-gc/os_dep.c
  ebb806366e4b75f72ac42bfcdda1d318  boehm-gc/pc_excludes
  243e968dd0ce5897ecf1900c3ab8e5eb  boehm-gc/pcr_interface.c
! 97b0970bfe84a6ea60b3ced8a9305695  boehm-gc/powerpc_darwin_mach_dep.s
! bcfc62546907d4fb97cae2331f99a4cc  boehm-gc/pthread_stop_world.c
! aec5113a49c1bddfa9086703367f91d7  boehm-gc/pthread_support.c
  8df5132173bc2d55d2feaefc9067e97d  boehm-gc/ptr_chck.c
  89d7ce652a21c4bdfa74466317cf7a87  boehm-gc/real_malloc.c
  5a0c5c1fa15c4e1c7421ff9bcc93e3ca  boehm-gc/reclaim.c
  c697080a88f3f14a0f8971ad1f6d043a  boehm-gc/rs6000_mach_dep.s
  8ce34a0ae465c6c4286c4f6ccef330f0  boehm-gc/setjmp_t.c
! c202a6453525903c615af1a0510634a5  boehm-gc/solaris_pthreads.c
! 84a81fc92c7b8482e01e2dcb01f43aee  boehm-gc/solaris_threads.c
  7fd29c5a89f9e8a79e77fd44154442e8  boehm-gc/sparc_mach_dep.S
  2fb164a0b84a2a49c3cd41e877cd61e7  boehm-gc/sparc_netbsd_mach_dep.s
  49c028d85ab4e2cc597dcc811b63b463  boehm-gc/sparc_sunos4_mach_dep.s
! a5528c581ae5323ef7dfe03aaa16ea71  boehm-gc/specific.c
  f0d0015cd40ed8b45360730aed61c307  boehm-gc/stubborn.c
  1e9f5847f88371ff5e6c74282755efcf  boehm-gc/tests/leak_test.c
! bdd5fcc7fe714682c718d1367c4ca1e1  boehm-gc/tests/test.c
! be63b8535621eef2af539d7885fbf5cc  boehm-gc/tests/test_cpp.cc
  2d53997b339b2fc8260120aff1adffbf  boehm-gc/tests/thread_leak_test.c
! 418bb5a9fab9f45800e13a003da0b413  boehm-gc/tests/trace_test.c
! 526cf86c5b1f8810eeef81181ed36904  boehm-gc/threadlibs.c
! f5b1861a2f39c2c2bc8cb4a07c335a9f  boehm-gc/typd_mlc.c
! 81331ae81296a647f2a2d4c7875591a8  boehm-gc/version.h
! b1241072185fcd50c00644b37dff7a1d  boehm-gc/win32_threads.c
! e24f38098b6646377a9fe48b4b43ce08  bugs.html
! b1f75000fa90c6bd41148c49280e5dc6  config-ml.in
! dd4451f9cdfc36cdb86703965f758ec2  config.guess
! d41fc4b87cd95b533ca5abf5b4254969  config.if
  697e549e7b5504f8de63e95a7158a53d  config.rpath
! 6cdae8120da06ebd9981c7a5a813550b  config.sub
! 6225bf6f2333e27f0c7711d267f2a727  config/ChangeLog
! 1eaed99306a232c1f2579d48c964f565  config/accross.m4
! 8a438e0d0b59ce7f15a3fc38bd1b4714  config/acinclude.m4
! a1b1540fda3bb91674c5ac1ed659b9c8  config/acx.m4
  a96ef8eeef3f7a717f1ab8a9397d09f0  config/gcc-lib-path.m4
! ed78e916ef1ee530d9e2f35765cbebd8  config/gettext.m4
  9b65dc7f50a7134932aa278ac0378703  config/mh-armpic
  7b266c44c8a74cfd3aa47c7408b1d9d5  config/mh-cxux
  85f96b330d9ccaefa3b09568acdae202  config/mh-cygwin
--- 95,239 ----
  2a3a65aca359b73ff6fa768f921ff10f  boehm-gc/doc/README.amiga
  0d28d19a4f2f32c564dba6f92f975ad4  boehm-gc/doc/README.arm.cross
  cb6cbc1bf65596c6c3dbfe7d6390f728  boehm-gc/doc/README.autoconf
! 01a3dcca00caadac2f7c1c036f71a9ec  boehm-gc/doc/README.changes
  57e880c9e260ce79f118306516df91c2  boehm-gc/doc/README.contributors
  b7c1bab59ecc8d66807d4822fe1533be  boehm-gc/doc/README.cords
! b714ac7b6d2d6c9d9267889b7bd9db8b  boehm-gc/doc/README.darwin
  e1c7153a3fa63e40ce139d181c499f79  boehm-gc/doc/README.dj
! f73159903a93e3b8c81505912be9bc76  boehm-gc/doc/README.environment
  bb02f05d4fa137ae6da66e56221e92d7  boehm-gc/doc/README.ews4800
  4e3dc72c08eae9f4d7aa77ad9947c0c0  boehm-gc/doc/README.hp
  2c49c9f2982e608958bbda464c68aa8d  boehm-gc/doc/README.linux
! c68e4d31ce005094e154851412e4d210  boehm-gc/doc/README.macros
  92d23d01dce1a06ad79e5f19c0f64fa3  boehm-gc/doc/README.rs6000
  ecd4ddc47cf9a58470469bbc9af217df  boehm-gc/doc/README.sgi
  762ba87e512736d44c84f0aea796d4e1  boehm-gc/doc/README.solaris2
  a095a2daca7ba15795e9a2bdf5ecc9f5  boehm-gc/doc/README.uts
! 23c4d4ca98ee83594dec01521bd404b0  boehm-gc/doc/README.win32
  90424433bebc5d19580a6f19f8e90fdb  boehm-gc/doc/barrett_diagram
! 9c9a390a68826c7c08e7e05fe7e545ac  boehm-gc/doc/debugging.html
! b171385bd536606dff471225d452d05c  boehm-gc/doc/gc.man
! 53418291720710e859ee3a0c248b07d7  boehm-gc/doc/gcdescr.html
! 86c04d03fa277334d8c770affa774d95  boehm-gc/doc/gcinterface.html
  ac036c9b1fe98eb9c7f0a0064cd5083c  boehm-gc/doc/leak.html
  b83df9d6982432f48123f72e76bdad7b  boehm-gc/doc/scale.html
+ 6cff5d904d114969ee0462a192306e9a  boehm-gc/doc/simple_example.html
  abecadc7de21d3e0c7cc1ca9c4c86327  boehm-gc/doc/tree.html
! 9989e8db7c09bbc516c76c6aa5ed1ef0  boehm-gc/dyn_load.c
! 4e93962895bdd3e20d20278a9a13a9f4  boehm-gc/finalize.c
  bc4287e5afadf75c1683ec57f0db80d0  boehm-gc/gc.mak
  9e05bd97b8b864b7c2bb28564235e96f  boehm-gc/gc_cpp.cc
  e6e7b9d7e4d0b9716d3e60f3c931b901  boehm-gc/gc_cpp.cpp
  dc46af8ac6358403e11c8f202555b583  boehm-gc/gc_dlopen.c
  81387b2921e93ea0f06257e231579273  boehm-gc/gcc_support.c
! 3b153ea12a1fffd6c48c66ef2ede9680  boehm-gc/gcj_mlc.c
  f0c93ff037adfd579b6822152d1912a8  boehm-gc/gcname.c
! ab9d609f116e5a2127bc508d54674558  boehm-gc/headers.c
  72c120e90ac0f93bc73599dd41040122  boehm-gc/hpux_test_and_clear.s
  4e5b1cc54ea48eb0c6e64af274874fc2  boehm-gc/ia64_save_regs_in_stack.s
  214b7d9a2e0989b5e2d64c8eba365721  boehm-gc/if_mach.c
! 9f84bf3dd95cc4ebb3ed4f5abb1eba6f  boehm-gc/if_not_there.c
  c4374424ebf25df207b9be9d7c913d2e  boehm-gc/include/Makefile.am
! 48e14f6d648b6db33d793cfe5d237a99  boehm-gc/include/Makefile.in
  49d0db4f59bb4874db24c5942ed8c2ee  boehm-gc/include/cord.h
  b1d9c432f2e6709f4eed702f26126ac1  boehm-gc/include/ec.h
! 535b88069845fd95934ef08dc03428e8  boehm-gc/include/gc.h
  3a3e5cb86b6db1fe6ddc2c72b127d44e  boehm-gc/include/gc_alloc.h
! 240c625b7cd2744cd7e1f72d68c8afc2  boehm-gc/include/gc_allocator.h
  4c84bb6de90f76072b336b30266759d3  boehm-gc/include/gc_amiga_redirects.h
  aab55efd952b275ba1609de52ff80f37  boehm-gc/include/gc_backptr.h
! 6b4d33ce63eb4cdf0a8ad04a41a15b1b  boehm-gc/include/gc_config.h.in
! 401000abf3e0b0d0bef720fc3a10a904  boehm-gc/include/gc_config_macros.h
! 617d47a01f76458daeae9718e684aaca  boehm-gc/include/gc_cpp.h
! f8e1feb6b00395256694dd0409668f75  boehm-gc/include/gc_ext_config.h.in
! 779751ee403e83d548709213c0573578  boehm-gc/include/gc_gcj.h
  f52491fef440e8ceaaa0f8428c8fc70e  boehm-gc/include/gc_inl.h
  31c32d3776a31b9e5dd0d1a6475447a0  boehm-gc/include/gc_inline.h
! 4e5811ce2cbeed84aa76dd4b04cba258  boehm-gc/include/gc_local_alloc.h
! 2ab58b990328696f3547fd409f2d73c8  boehm-gc/include/gc_mark.h
  67cc7d598bc1a0fd147a70c348a2c5a4  boehm-gc/include/gc_pthread_redirects.h
  124a9ee194ba655302058d53fbf7053f  boehm-gc/include/gc_typed.h
! 0d4a889208f1b491f4aabcb4070b1eb2  boehm-gc/include/javaxfc.h
  ac6b413e2634fed719426fe40528704c  boehm-gc/include/leak_detector.h
! 6a3ceaf2e6bc12d77d8e87472d7c6be5  boehm-gc/include/new_gc_alloc.h
  56abb788c2eb93713c1ae682c6ec9516  boehm-gc/include/private/cord_pos.h
  14a4a64df372dafcc6121c4d958ed00c  boehm-gc/include/private/darwin_semaphore.h
! deb33a288bb6bee23ac46c1e0717708e  boehm-gc/include/private/darwin_stop_world.h
! 9e4ea67f2263535bd4e937de0afda512  boehm-gc/include/private/dbg_mlc.h
  0a5763218eedbd180d2124ba8835ca50  boehm-gc/include/private/gc_hdrs.h
  dcf402d646df6f3e8d1a2f9777f3415d  boehm-gc/include/private/gc_locks.h
! 4f7c11f389c4b9cc843d53da0534fc0e  boehm-gc/include/private/gc_pmark.h
! 0fad896ef645f9b618fc53728d560567  boehm-gc/include/private/gc_priv.h
! d9034cd7eb556ab57da640b3abe23623  boehm-gc/include/private/gcconfig.h
  fbe5032f5ffd11c46b1e9ae03a9fbc1b  boehm-gc/include/private/pthread_stop_world.h
! f112bb0b979fd12c4d5fc7590d4869b9  boehm-gc/include/private/pthread_support.h
! 85597deca0812f2d092cac8c1afd78a6  boehm-gc/include/private/solaris_threads.h
! a60de8578b76b4e565780c5ea9173bfc  boehm-gc/include/private/specific.h
  9479459c7cba9ce350f48863b51196c0  boehm-gc/include/weakpointer.h
! 83dbffad6e5161935b1306035c81b3d4  boehm-gc/mach_dep.c
! 6cc929b4bc3e9370b8db30e9d236baa7  boehm-gc/malloc.c
! 5097125c326dfc44306674b5b71481cc  boehm-gc/mallocx.c
! 3bef8347f4db09505d62f4c07f3a164e  boehm-gc/mark.c
! a0d99fa3be8006e8af6c64110e0c516e  boehm-gc/mark_rts.c
  1db5a4f922cc162f4fa6447cbe5e7d53  boehm-gc/mips_sgi_mach_dep.s
  0827ad9a8c72cef5ef63abb18d5e7c78  boehm-gc/mips_ultrix_mach_dep.s
! 678892d666129839985e2c9e126b9618  boehm-gc/misc.c
! f9c90c949db03af983f08385da6eac57  boehm-gc/new_hblk.c
  e308d74d7779ecc729bad15d2cb03904  boehm-gc/obj_map.c
! 00aa4370d4a2773945ac8141c4b08630  boehm-gc/os_dep.c
  ebb806366e4b75f72ac42bfcdda1d318  boehm-gc/pc_excludes
  243e968dd0ce5897ecf1900c3ab8e5eb  boehm-gc/pcr_interface.c
! 0d33b18655ae15ee7741ea0c91b336e1  boehm-gc/powerpc_darwin_mach_dep.s
! 3055ed694482f3286d2b8492011969ac  boehm-gc/pthread_stop_world.c
! 49cb6c0089aaec6394c736650fa5c8d5  boehm-gc/pthread_support.c
  8df5132173bc2d55d2feaefc9067e97d  boehm-gc/ptr_chck.c
  89d7ce652a21c4bdfa74466317cf7a87  boehm-gc/real_malloc.c
  5a0c5c1fa15c4e1c7421ff9bcc93e3ca  boehm-gc/reclaim.c
  c697080a88f3f14a0f8971ad1f6d043a  boehm-gc/rs6000_mach_dep.s
  8ce34a0ae465c6c4286c4f6ccef330f0  boehm-gc/setjmp_t.c
! 9f77d9e872b37e6fc83312c04ffdc70f  boehm-gc/solaris_pthreads.c
! 768146fbaeeb29c6de1b032159beddf1  boehm-gc/solaris_threads.c
  7fd29c5a89f9e8a79e77fd44154442e8  boehm-gc/sparc_mach_dep.S
  2fb164a0b84a2a49c3cd41e877cd61e7  boehm-gc/sparc_netbsd_mach_dep.s
  49c028d85ab4e2cc597dcc811b63b463  boehm-gc/sparc_sunos4_mach_dep.s
! d084437a10829db11cbd5a5b9ff583df  boehm-gc/specific.c
  f0d0015cd40ed8b45360730aed61c307  boehm-gc/stubborn.c
  1e9f5847f88371ff5e6c74282755efcf  boehm-gc/tests/leak_test.c
! 781d611d9c0b3378bd6076425ca51ba8  boehm-gc/tests/middle.c
! 6e2ec59db8d8828d0afa929939d39310  boehm-gc/tests/test.c
! 2ab602a1cde16f728ad785c0c1472b4e  boehm-gc/tests/test_cpp.cc
  2d53997b339b2fc8260120aff1adffbf  boehm-gc/tests/thread_leak_test.c
! 1b38a98e11b8c717be56b14d99a2b88c  boehm-gc/tests/trace_test.c
! 26d362e4dad5b64f08338fa53943417e  boehm-gc/threadlibs.c
! 40d32d7abf9aac98f33d23251e51ada6  boehm-gc/typd_mlc.c
! bb0b715643982dedc37b21ab14e46379  boehm-gc/version.h
! c868be89237c00b0429b27ae10704a97  boehm-gc/win32_threads.c
! aef4fc81ea236da8259b7f9b1346ca69  bugs.html
! a7ecc032b527a0d578545f19d3418073  compile
! 565073baae5cf6f08a4d77dfb4842456  config-ml.in
! f0792199f84c598881e291d7e2071c28  config.guess
  697e549e7b5504f8de63e95a7158a53d  config.rpath
! b25f26e8ac8c8d296fcb4a4879280286  config.sub
! df1d12d457503d07c2fd9c6cb894c300  config/ChangeLog
! c827fc9777ea4b057bf3b63e46c9eccf  config/accross.m4
! 6c7b0890dc93bdd97ec3e90d8436b384  config/acinclude.m4
! 1b759f50564639961f927b52d6cbe137  config/acx.m4
! 04bdbef77f5fd2e282f7dee0bde60444  config/codeset.m4
  a96ef8eeef3f7a717f1ab8a9397d09f0  config/gcc-lib-path.m4
! df253ba8b69beff8c72264dd4c8296e7  config/gcc-version.m4
! ed78e916ef1ee530d9e2f35765cbebd8  config/gettext-sister.m4
! 2056dbab474e474ab2ae01a42ad5359a  config/gettext.m4
! 29c9c3d57667bc9e6f14d625b2cd5894  config/glibc21.m4
! 07e86b55427ac59af782b552a554c09b  config/gxx-include-dir.m4
! 998940a8ee25ca89805ed7da63536782  config/iconv.m4
! 7cdde9f19fc614304e49342c660e2d47  config/intdiv0.m4
! e32906a3177f3b368bcd56f9e86a620c  config/inttypes-pri.m4
! b17ad59a69316040fae6c3b09187bcbc  config/inttypes.m4
! 0b63117973333c343e0d0819012b8187  config/inttypes_h.m4
! db111161c56fa9d53a03abfb188ad1d0  config/lcmessage.m4
! 77931c860806547ce9fc56097a731c6f  config/lib-ld.m4
! 50120e7fff340d87578219756e55a5e3  config/lib-link.m4
! 4455537cdae70977a1283180062a2d8d  config/lib-prefix.m4
  9b65dc7f50a7134932aa278ac0378703  config/mh-armpic
  7b266c44c8a74cfd3aa47c7408b1d9d5  config/mh-cxux
  85f96b330d9ccaefa3b09568acdae202  config/mh-cygwin
*************** d2eccbc26e9ac85d25fad721ba9264aa  config
*** 227,232 ****
--- 250,256 ----
  1970cc16887b91d667b9bbfb0f6e67af  config/mh-ncr3000
  fb9d7448a6dab87d4da003658fb4d66d  config/mh-necv4
  9b65dc7f50a7134932aa278ac0378703  config/mh-papic
+ 0780f1d062d01dc31050fc210ed3102f  config/mh-ppc-darwin
  9b65dc7f50a7134932aa278ac0378703  config/mh-ppcpic
  740855ebe34cb2d01fba1f1bcb4264cf  config/mh-s390pic
  ecf7a936c35e3c5a0e8d2b0721243b85  config/mh-sco
*************** e4353fd5127f79d601d85fde3925ac76  config
*** 234,625 ****
  fa84a282ce7cd6876d1eac368a31a368  config/mh-sparcpic
  2415a4da9726792701f226bdb0e5ac3f  config/mh-sysv4
  2415a4da9726792701f226bdb0e5ac3f  config/mh-sysv5
  740855ebe34cb2d01fba1f1bcb4264cf  config/mh-x86pic
  3755b5b077053b5de54ff0f781ca9295  config/mt-alphaieee
  96289d06809692c31d71e69c4bedb6d7  config/mt-d30v
! 945f54294ca11fd14c1aaaecde3ce7da  config/mt-linux
  2067ce86494ccb89791fe169eee8c198  config/mt-netware
  5aa8f75c6588d513ce199e2e44c206e2  config/mt-ospace
  9c67d61b28da389337cfaba76ac581ee  config/mt-v810
  12b3030d3d59526c374c15af4f5944dd  config/mt-wince
  b963319bdff419a7b32cb107b047433d  config/no-executables.m4
  d3cecf02bb97035177818aefbb0e0833  config/progtest.m4
! 0e4fb51f74caee42a8888ffa6de6552c  configure
! 4a4e933fb6fe66323e31652d3d404e20  configure.in
! ff9883aae2e16134bd3839856090a530  contrib/ChangeLog
! 04ba084a5d02480dcd6bdc57f6031682  contrib/analyze_brprob
  d718f7aa23da7d4f25b48a5607b9fc7c  contrib/compare_tests
! c023ea56fbc55a6e24d7a5cdcd09d903  contrib/convert_to_f2c
! 5589c59573f03394b25b2854f94b8c74  contrib/convert_to_g2c
! f581e79a8e2d0f1952218e94c2d9844b  contrib/download_f2c
  3060a6f740228ce0b4196fc05be4f0f1  contrib/gcc_build
! c81ed9f7667971057241b0f676220e83  contrib/gcc_update
  48cbb3050eaf94f8bfbee3c6899c54ec  contrib/gccbug.el
! 885a0d9a2b857f4802b2ba5ff0733ed4  contrib/gennews
  59304fc08afa489baa6b920cc76dc625  contrib/gthr_supp_vxw_5x.c
  fa945bac89ee68b410027dcfe1312f4b  contrib/index-prop
  20179e1289a3a0ff7a6869666b1252e1  contrib/newcvsroot
  1a7e182574673a0ba979ec4ebca2944c  contrib/paranoia.cc
! cfa8e4d68abb00690a6410ace47429fc  contrib/reghunt/ChangeLog
  ab31219466ac7df2a1aa15900540bc8a  contrib/reghunt/README
! c210204c3d2fb73e3b50091c96dc44bf  contrib/reghunt/reg_periodic
! 1e75f6b1b2d25ba1c3bb07f86ecb9ee2  contrib/reghunt/reg_search
  0ef47a46d2e384a9532935891338c161  contrib/reghunt/reg_test_template
! e9120f2637eb69650a8bff6f8c5d75c7  contrib/regression/ChangeLog
! 0fa02760faf8d2db000bacfd82f0deef  contrib/regression/README
! 9b00383d0f60b998dfce820ee67ff19d  contrib/regression/btest-gcc.sh
  57b2176bd936777562a9baa0812892a0  contrib/regression/objs-gcc.sh
  dc562ddb86567c65e82953825713dc4b  contrib/regression/site.exp
  a4460747c474747dccaa9dc5ed08e634  contrib/test_installed
  c4bf22fca12c3089a14e041a9c262797  contrib/test_summary
  bc07630ff35947fab2933666a48dbb20  contrib/texi2pod.pl
! c1739220c79bbaf9ebb9e5d4cb530c7e  contrib/warn_summary
  9f1b74d3fce1364cf74f135d09124aa7  faq.html
  dbe6dec25102f59632c7a62ec0e62158  fastjar/AUTHORS
  bdb1454b8697cdb175027e91b4834fdc  fastjar/CHANGES
  bae3019b4c6dc4138c217864bd04331f  fastjar/COPYING
! 926c9cf7adb275ca48df2626e2eb90d2  fastjar/ChangeLog
  209e12e13fbd7d098b1c8f52859c291f  fastjar/INSTALL
! 8bb1ce39f1b67fa99e968d5c967e20e8  fastjar/Makefile.am
! 8493faea54b91ce22541b493f8e38552  fastjar/Makefile.in
  b2237a769a55ab029df30e4cf3ffd29b  fastjar/NEWS
  c2520aec24d9c4f28b1da15fd4995a10  fastjar/README
! 97b5d851c1d09dc46cd4c8a1edf2c989  fastjar/acinclude.m4
! d90cbec543592f0cd43d9de4e8b4c6c0  fastjar/aclocal.m4
! 7bc9a341b252ac291e4646398091c6f4  fastjar/compress.c
! 70d8d117164b2a61342cae1841c959cc  fastjar/compress.h
! 7b2c05bdd6610df8ebb5bc44c7c5665f  fastjar/config.h.in
! 781e8758b7dc6ee5eb9b012181fe9e7c  fastjar/configure
! 4ff9ddb145f39e6adef242cab5457ee8  fastjar/configure.ac
  11d8607a786579eb40e9af1364ba7530  fastjar/dostime.c
  c44ff949fe567a1667a14d5973f62aef  fastjar/dostime.h
! 6fe54a0ab05ad7c95713cfea6adc9bbd  fastjar/fastjar.info
! 5ffbee2989d77015ad4ac966773e463b  fastjar/fastjar.texi
! 9babbd6fbc0198cf5ff74d6e1cc20c0d  fastjar/grepjar.1
  d66630536f4ad8fe249cb6cd115ae1d1  fastjar/install-defs.sh.in
- 4c8b9d0a30f59882bf470335264aee01  fastjar/jar.1
  4fc3b8f0c1af92661330be086741c2e4  fastjar/jargrep.c
  b88ab791613fcc11cb2dcc67d74a2552  fastjar/jargrep.h
! de1a944f9b2499b326fa958b1039d217  fastjar/jartool.c
! 66573cb1a91ff8cfd1110f2f11fa8933  fastjar/jartool.h
  af7fa69dffc8b8bb6ab233fbb95a7559  fastjar/pushback.c
  ea3af7dec309d1e773a6130c0f32a377  fastjar/pushback.h
! a0ca1c9b17d6ad55e954cf680fa88b8f  fastjar/zipfile.h
! ed3a9885d67984747babe5731898ed5a  gcc/.cvsignore
  3a3ffc0ce8bd3fa0865f001299994af3  gcc/ABOUT-GCC-NLS
  94d55d512a9ba36caa9b7df079bae19f  gcc/COPYING
  7fbc338309ac38fefcd64b04bb903e34  gcc/COPYING.LIB
! a6840698e36699b438f0ab67cc82151c  gcc/ChangeLog
  9f3eae1e23bcd4166785b0386b467eef  gcc/ChangeLog.0
  fc0aaf9fc3d0b7a20690add95f3bc80a  gcc/ChangeLog.1
! f2ccc60251a264a176216de47c552020  gcc/ChangeLog.10
  070098e9960d4f47a03c9d10070cfc61  gcc/ChangeLog.2
  7f91ddf5107166700482cc16857cb1d0  gcc/ChangeLog.3
  3d9964b41a57c6f184b022dec3e115a2  gcc/ChangeLog.4
! 05101fe42855d4bc01dc1683c386f246  gcc/ChangeLog.5
  04d99c442dd304d0d00b5234135057db  gcc/ChangeLog.6
! ff10b5d181f2ceabc865284c6a3873a8  gcc/ChangeLog.7
  98791e5d93f23a747cc8d47966a98427  gcc/ChangeLog.8
  cc09ce1ef3704378bfc6acf0f2c9cef4  gcc/ChangeLog.9
  98c5a6533d7e4507aba5dc4fd06014ed  gcc/ChangeLog.lib
  4804423c755a929408412852eb45e422  gcc/FSFChangeLog
  5af5721f6387aa8aa5fb200e025dd573  gcc/FSFChangeLog.10
  f7f665544fb6aa08551b37283f6c56de  gcc/FSFChangeLog.11
! e9338f95acc1e6aedc8de663291c4032  gcc/LANGUAGES
! 0c2b8ac4a9848a815c6010cb2c17e695  gcc/Makefile.in
  00919fda1a585fdc4a1be1fec2eeb0bb  gcc/ONEWS
- 455903ad4ff71fa5c5340ef7ae41a0e6  gcc/README-fixinc
  f88d9228718a255b827d6f417063d62d  gcc/README.Portability
  f44aeb578969621358194ef6a8c67093  gcc/SERVICE
! e9f82c0d09bab0d8f504688e43cfaa07  gcc/aclocal.m4
! 0ffdb470ad9fd051f1a3ac4f2dab513b  gcc/ada/1aexcept.adb
! bd1a0465e0b9da755c5174da00df8f99  gcc/ada/1aexcept.ads
! ad8304b1166585676f3033a8290a71b8  gcc/ada/1ic.ads
! 1206e93f3c65e98ff9c7803d295eb6f6  gcc/ada/1ssecsta.adb
! c376232b8a84a1b8b4af30d7124e5f62  gcc/ada/1ssecsta.ads
! 351aa90f4d16c7ed5df3793de320ca9f  gcc/ada/31soccon.ads
! 1ebad4ce57e4a212fa871a0c1f66702c  gcc/ada/31soliop.ads
! 27122560e6c47237044e9c292b6d1d66  gcc/ada/35soccon.ads
! 2bbc626a7abd7bde68ee5dd91ef19dc0  gcc/ada/3asoccon.ads
! 66b0a238d5997f72641947a13e249484  gcc/ada/3bsoccon.ads
! 14140b8deb3c99de5cf89b2090f935b6  gcc/ada/3gsoccon.ads
! d67298ee3dae68107cff65e365f4fd72  gcc/ada/3hsoccon.ads
! 5a1dcf13a200bc891515b47949e8c34e  gcc/ada/3psoccon.ads
! e35dabcc1a4e8b8fcbeec302bfca5a52  gcc/ada/3ssoccon.ads
! 7234add1126d245a6af5aa2257e767a0  gcc/ada/3ssoliop.ads
! 752154add6b018c00d563f1fbaebd943  gcc/ada/3veacodu.adb
! 3936e321029c12d4d27982510ead9afa  gcc/ada/3vexpect.adb
! 0e89af4c91e60ba706e95d50e1c48516  gcc/ada/3vsoccon.ads
! e8f5aab681ae03f628d6871b9a6bd92a  gcc/ada/3vsocthi.adb
! f550ba74dfdce2717cba41ed7c435628  gcc/ada/3vsocthi.ads
! d3b0b9c84d1b589056766325773724d0  gcc/ada/3vtrasym.adb
! 510cdfdc2f8a44fc46838b4e30865b7c  gcc/ada/3wsoccon.ads
! bd6cfc298682c7028f9b978ef8638fe9  gcc/ada/3wsocthi.adb
! ac8f575aa6ebeefea8f8a6ebe40d8b03  gcc/ada/3wsocthi.ads
! d7e972e2ffaa5bf966facc9f67b35eb9  gcc/ada/3wsoliop.ads
! c77176abd1e502296e78ac83343dac99  gcc/ada/3zsoccon.ads
! 7898b9f01da06422bf6e7edd12198cc1  gcc/ada/3zsocthi.adb
! cbf220a5927375477e06f931f2ab751b  gcc/ada/3zsocthi.ads
! c4da83e8c35940282af0b588c802a237  gcc/ada/41intnam.ads
! 84e1ba752dec74f6b3f1332a9c456395  gcc/ada/42intnam.ads
! 025a97ac90bd1496fa998417380a07cb  gcc/ada/45intnam.ads
! cc40d668282d66142be675dcd6eeec6d  gcc/ada/4aintnam.ads
! 6275cba9f81d833be06e112d8d20c546  gcc/ada/4cintnam.ads
! 83d44086644460c50f714ea15911437a  gcc/ada/4gintnam.ads
! 2c7843988a92f848db3011ec708b4406  gcc/ada/4hexcpol.adb
! aa5d3d3416a4bead679af61bfd0ee784  gcc/ada/4hintnam.ads
! 08bd0bf6734035fddf248e1e35cbd5c0  gcc/ada/4lintnam.ads
! dbc2a2f6b16effb0b28385109992c60e  gcc/ada/4nintnam.ads
! cf30d904e1121acdfed0e1188e7263e6  gcc/ada/4ointnam.ads
! 63a497335d0c9fdfad1f15e71bad237b  gcc/ada/4onumaux.ads
! 45422a7172b50d3874c27fdc98c4b3dc  gcc/ada/4pintnam.ads
! 32f33d78ab8c55e4746afae4267404ea  gcc/ada/4rintnam.ads
! d23caf40de4337cc9c65c82eeccd06fe  gcc/ada/4sintnam.ads
! 3d74afbc4fb2d012cb16fbe34e22e493  gcc/ada/4vcaldel.adb
! 338c267dfc96d492a6e07be089b99e7f  gcc/ada/4vcalend.adb
! 0b584a9f2b59ebf7f1490940e4803209  gcc/ada/4vcalend.ads
! 1957746bc54870313b9d7eccbe483ba8  gcc/ada/4vintnam.ads
! 82fa85cd259cf486b168cd800d8df6be  gcc/ada/4wcalend.adb
! 31d7549fa5b9367dfc5cc9b29c92f9c2  gcc/ada/4wexcpol.adb
! c4ee6725bf506fd03ded0b6ccbb66993  gcc/ada/4wintnam.ads
! ed8175a50d910a0c151175c281cf35a3  gcc/ada/4zintnam.ads
! cf16a5bb982594288c5aa23c108785e7  gcc/ada/4znumaux.ads
! d489ebc84c98518c06343ce16dc4ca72  gcc/ada/4zsytaco.adb
! 888f4475b715182f894384952eba1658  gcc/ada/4zsytaco.ads
! 25de7104e69ee55eadc7dff46f900e55  gcc/ada/50system.ads
! 3aa6b96f7f34ea075d5c538aa7ecedcb  gcc/ada/51osinte.adb
! c81cc5c6f29177d08b067cbf40acdf22  gcc/ada/51osinte.ads
! ce9de762eca230a4f8f15b4bb63a4911  gcc/ada/51system.ads
! 2e37059dbe44bacf36c514469c42fd52  gcc/ada/52osinte.adb
! 08a105185b9d67b0190167124347e7cb  gcc/ada/52osinte.ads
! 7ebeba6bef8f309a248984b6a79a454d  gcc/ada/53osinte.ads
! 7b8617bd0de4289770ca6e0b12601ebc  gcc/ada/54osinte.ads
! 3a4b90fa21ad19c8f131725bd37d66cf  gcc/ada/55osinte.adb
! a366e831e93580b092e8265363d33683  gcc/ada/55osinte.ads
! 640126f90c2564ad5c835fc529b66ee5  gcc/ada/55system.ads
! d200685a39b843864a37c15a833d7b56  gcc/ada/56osinte.adb
! 841c5ecffccb46b19820544e56cc1e98  gcc/ada/56osinte.ads
! fb297b244ae655f3234cbcbbc1948bbf  gcc/ada/56system.ads
! 8f09cb36b23befd0acc060d1659272f2  gcc/ada/56taprop.adb
! c66ea109b05d5b087044c7fc5b91c3c7  gcc/ada/56taspri.ads
! 4ff57586c22f03d6d6182c3aeed6b1cc  gcc/ada/56tpopsp.adb
! d4b09442cfd67ef8ea03aab5b3dbaaea  gcc/ada/57system.ads
! 3d8046bf9ea88f87eb605c254e280379  gcc/ada/58system.ads
! bbd412e9fd31fec428e77d7dd10e45b7  gcc/ada/59system.ads
! 9a160098d8a3f1084c69859f2e81f478  gcc/ada/5amastop.adb
! 069a90e0886c1859376bc2d1111cab70  gcc/ada/5aml-tgt.adb
! 36235ac1caa773779fde7c22dc473129  gcc/ada/5aosinte.adb
! 25514a9193dcf0252ce5b4564dba32f6  gcc/ada/5aosinte.ads
! 41f3f9f282fafd9cf2f56a659169479f  gcc/ada/5asystem.ads
! 2f8c912504ab3c02bf65513639c82322  gcc/ada/5ataprop.adb
! 5c597e23bf0d7467f786150f2ca5152c  gcc/ada/5atasinf.ads
! 346497b8f677224dbe1008f8656ae857  gcc/ada/5ataspri.ads
! 6f810382b592567af701fb195c7e66aa  gcc/ada/5atpopsp.adb
! fb0ca0b2d65da5c973fcd50257b252a1  gcc/ada/5avxwork.ads
! 8cfd90c4361dc9488a5dafc3fc2dab00  gcc/ada/5bml-tgt.adb
! 9bc0d096562c13579553062dd262b519  gcc/ada/5bosinte.adb
! fa505d18001be0600221b4d63f7034d8  gcc/ada/5bosinte.ads
! 6250f0675f0986f2f06850632973f066  gcc/ada/5bsystem.ads
! 1f9bf9528706a482b626615a0c7baf11  gcc/ada/5cosinte.ads
! 79557750283fe35d0ee308b3d6dc5671  gcc/ada/5csystem.ads
! 10abe193ba27983c0efd0bd2b11e9cc8  gcc/ada/5dsystem.ads
! 6c833fc5cf7fbe9f498977970865b02c  gcc/ada/5esystem.ads
! 6f07986dd2d9d9f2a4c300bc3e6d1b40  gcc/ada/5fintman.adb
! b61a777b08139409a647fbd83ec05b1c  gcc/ada/5fosinte.adb
! 84e584bd9114c4d644499f73c6f7dd77  gcc/ada/5fosinte.ads
! b13e73dfd9299e85baa78fbf69d67d1a  gcc/ada/5fsystem.ads
! 7ad20e21fb9d5533bdefea6a0a018949  gcc/ada/5ftaprop.adb
! 8404af95ad586f9663d5b4bb74f2b5c2  gcc/ada/5ftasinf.ads
! 6b42d7359ed5db5873913c664c9d59bc  gcc/ada/5ginterr.adb
! f0e5c8c5759bb8818f766bb0a4da13b5  gcc/ada/5gintman.adb
! 95687e594534981292ef0850253049a2  gcc/ada/5gmastop.adb
! 54da58f610ed76487b2550e6135e41a2  gcc/ada/5gml-tgt.adb
! f3d5fb563ba7e2514af2cfc541bb0106  gcc/ada/5gosinte.ads
! 470652dfef23d09495bf7db4f2d0ccda  gcc/ada/5gproinf.adb
! e731026149e4b3e4433fa74f03b7b221  gcc/ada/5gproinf.ads
! fa2bbeafb79f25b91280a28b457b1fd1  gcc/ada/5gsystem.ads
! 09a11c8db61099fbe196a52c79a5d23d  gcc/ada/5gtaprop.adb
! 8e07a21bdb063b82cb08c00bbeb1bf8d  gcc/ada/5gtasinf.adb
! 61a184ccc1cc94cc17ec3910f1297d48  gcc/ada/5gtasinf.ads
! 2550334b1e6709d6436bc8d3473491bf  gcc/ada/5gtpgetc.adb
! 442abac64c62d3bb72bfa88e3e348564  gcc/ada/5hml-tgt.adb
! e9181736fed556128a82ec70df686832  gcc/ada/5hosinte.adb
! b5b45dd0a6c4bd61b301b0fdd581c6f5  gcc/ada/5hosinte.ads
! 770add43fcd523769a5d06cbe008cf6d  gcc/ada/5hparame.ads
! cffd3b1ee880208df42214d8a406b808  gcc/ada/5hsystem.ads
! 46768077c773df3f962dccf9d617ca24  gcc/ada/5htaprop.adb
! 3fca1449846d25b40a022f90f4a59e3b  gcc/ada/5htaspri.ads
! 67c8473c8654d0b18a47e915795e31c9  gcc/ada/5htraceb.adb
! d9b70aceeeb5153563bce3eb2e9714b8  gcc/ada/5iosinte.adb
! 705b4acff6dc4812c943d73e321490ab  gcc/ada/5iosinte.ads
! 84ecce0dab9a19ed7ed4853da3cd334d  gcc/ada/5isystem.ads
! cf90f2ed07b14d074aa0449fc6343273  gcc/ada/5itaprop.adb
! d42fe0b357a26ee02d2818738326f71e  gcc/ada/5itaspri.ads
! 609c20233fd5a2e459f27bd14daa535f  gcc/ada/5ksystem.ads
! 4e114e658fe9e2ae3653e1dd8d024893  gcc/ada/5kvxwork.ads
! 807371848467a347975c91b41e07f299  gcc/ada/5lml-tgt.adb
! c470feaa9097a391620151f37f7298ae  gcc/ada/5losinte.ads
! ed6a6692bfad5d2698bd2c5b98c9e71b  gcc/ada/5lparame.adb
! 43c73fde3f4c32311ed60b1ac9ce5ab9  gcc/ada/5lsystem.ads
! f89d6118dd43f5e203b6bd2fae54e458  gcc/ada/5msystem.ads
! 8cef09be1dcbb7a4e4cf808549ba6591  gcc/ada/5mvxwork.ads
! 716f55f489b888c9be9f5e5c739c573c  gcc/ada/5ninmaop.adb
! 2f3aadde4e178b8b6e3ec6c0437014a1  gcc/ada/5nintman.adb
! faca2b27d7597d75ebe04325aa1981b8  gcc/ada/5nosinte.ads
! 798b4f3cf0b7df50d0fdd4696a51adcc  gcc/ada/5nsystem.ads
! 8d081933d6f87a7b6450d7228f1ffabd  gcc/ada/5ntaprop.adb
! ea7627d2294f346b65f028bb69b37892  gcc/ada/5ntaspri.ads
! f442e0fec38e7a39405706bd588ad321  gcc/ada/5ointerr.adb
! 88ff0640f1e3440a3ffca79d9a47e3bb  gcc/ada/5omastop.adb
! 7a75b6c92e999fe70c36f58e77444329  gcc/ada/5oosinte.adb
! 347f74e9ba1dfb12768c71de02685c01  gcc/ada/5oosinte.ads
! 8316664f47413497a14f9bffb71fa07a  gcc/ada/5oosprim.adb
! a0bd1a774c42c74d08ec839d2eb99f74  gcc/ada/5oparame.adb
! 7136786532783a71628644ff7d631785  gcc/ada/5osystem.ads
! ed2a926c2031a835cbf6df428759a3ac  gcc/ada/5otaprop.adb
! 2b1f83335f65f2edff8c93b9e05aee6d  gcc/ada/5otaspri.ads
! 845b9aea90469ba5fd62436280410b40  gcc/ada/5posinte.ads
! e529998dc07d1ecfe71ac1040f70c019  gcc/ada/5posprim.adb
! 52c692419b055b8f4b7772a1be63258a  gcc/ada/5psystem.ads
! 901f3ad4e6f31b418474d008bf499d5f  gcc/ada/5pvxwork.ads
! 5bffcdfcdeee1369c2bcc6c3678af105  gcc/ada/5rosinte.adb
! 4e6a0f202a739033c2cb1cef5bce58af  gcc/ada/5rosinte.ads
! 84a517fab35724ed785e717b1f5dfcbd  gcc/ada/5rparame.adb
! cc9d3b2dd02ca037594fe21529c5f0bd  gcc/ada/5rtpopsp.adb
! f65638bb6b5bff35025ee07180fcb84c  gcc/ada/5sintman.adb
! 28a92c5230fc7f0435f482a0e1dc8529  gcc/ada/5sml-tgt.adb
! 03930e168ab488f7570fd5d5427664a1  gcc/ada/5sosinte.adb
! 88fa196ff9b9a666f44dbccb1433ef3e  gcc/ada/5sosinte.ads
! 087014345587559bdea1a7b7d1346a4e  gcc/ada/5sosprim.adb
! d38d9f5a44aff668ce03612ecdf019eb  gcc/ada/5sparame.adb
! d4f7165638302bdbcb19ec989f991c61  gcc/ada/5ssystem.ads
! 3b3bc0132fdae78d1e4091d7c8c3a5ac  gcc/ada/5staprop.adb
! f3420d99d67f23c289631c5531bf5576  gcc/ada/5stasinf.adb
! d25bfd1fb80051fcc4602be176c61b24  gcc/ada/5stasinf.ads
! 3f012507a1cd27bc84077f20e62893c0  gcc/ada/5staspri.ads
! 9fa4055db0ee4e65a1ecf58d6071eb55  gcc/ada/5stpopsp.adb
! 91dd1f622f1ae5d9803d7cf1e0b91cbd  gcc/ada/5svxwork.ads
! f05953acd15a9d3524f0a11f7f4ad58c  gcc/ada/5tosinte.ads
! 49d504d472b747f6ad1de4cecc36b8c3  gcc/ada/5tsystem.ads
! e669271fb15e01caa1da301b79f1d857  gcc/ada/5usystem.ads
! a1c3f0c5886bb9da6886adacdeafc6d5  gcc/ada/5vasthan.adb
! 7c6741097bb0b3dff45ab78d17f7c119  gcc/ada/5vinmaop.adb
! 9e5f8e46a422d058c2bcac89f7db0bb6  gcc/ada/5vinterr.adb
! 918ea671929959d984b4819918dee0b4  gcc/ada/5vintman.adb
! 166dad41777258463eec097a972c5f1a  gcc/ada/5vintman.ads
! 5e11fcf7286f4b8fd01257ac25c88bc4  gcc/ada/5vmastop.adb
! af76f63cfd16b578e53f731fc9513aaf  gcc/ada/5vml-tgt.adb
! 0408ca9cd24b193daef12aba6386cd41  gcc/ada/5vosinte.adb
! a5c6a8a082912ce35657342c8be60911  gcc/ada/5vosinte.ads
! fb16a0d7bc64d558e361fc5e6c4939f6  gcc/ada/5vosprim.adb
! 0808dab9423092de17929f61c06b227e  gcc/ada/5vosprim.ads
! 2712585a404cfee5663daed3a974e732  gcc/ada/5vparame.ads
! b88549040d227bc0e4e79ae7384b64e0  gcc/ada/5vsymbol.adb
! bc4e401e26c120f639715cd5019e0028  gcc/ada/5vsystem.ads
! 9dda1722781e339a45c62653ddbfceaf  gcc/ada/5vtaprop.adb
! d4d1ce3fa1eacbf65392a49e4a68353a  gcc/ada/5vtaspri.ads
! a2683af9fb284399e7e262933bac4bdb  gcc/ada/5vtpopde.adb
! 8bd317080022a0f3ddcf673d4a1d8474  gcc/ada/5vtpopde.ads
! a9e71f1d6e68bfad86200ed598adbb49  gcc/ada/5vtraent.adb
! 8146f91c0f1e53831ca46f8887b00503  gcc/ada/5vtraent.ads
! 64e13ec79ffc9ac886eb33e4f3cf49bb  gcc/ada/5vvaflop.adb
! 072a39e95e704e31a7753e683aa0cbcc  gcc/ada/5wgloloc.adb
! 35e0129ee463b069d71f81a6f3defbdc  gcc/ada/5wintman.adb
! e575bf88b560332044bd8bb3baf31f6a  gcc/ada/5wmemory.adb
! 0db6838e12006d99cebae3f73a52df06  gcc/ada/5wml-tgt.adb
! e56866761ef9a05213410fe7c2e8517f  gcc/ada/5wosinte.ads
! 20c3576596ecb949449f96068d5eb394  gcc/ada/5wosprim.adb
! 94bd7e155f1bcc836aed4d07af889add  gcc/ada/5wsystem.ads
! 82dd194208f97fc2cda64d059d7b7956  gcc/ada/5wtaprop.adb
! 0e825c5c3e6e726940f00a89cc7c4eaf  gcc/ada/5wtaspri.ads
! 344ed8dfa057ee16a791aad079375f42  gcc/ada/5xparame.ads
! f3d70cdd33e3bc70308cbf7899731839  gcc/ada/5xsystem.ads
! 91a1312b04f451c2fe3fb6d5ee8af797  gcc/ada/5xvxwork.ads
! ab5ffeaa3ed125961e09bc35f4213a0f  gcc/ada/5yparame.ads
! 9c3ef7fddca25d4d801af41c8800242b  gcc/ada/5ysystem.ads
! 775351806dcb38dc99a868253d4eb4cd  gcc/ada/5zinit.adb
! 209744d7b796579b9936fffd93d9b586  gcc/ada/5zinterr.adb
! 53b70ac446ccac8ff16016112d61a0e9  gcc/ada/5zintman.adb
! 3fe6b135650dc083869bb1fadcfdb4ce  gcc/ada/5zintman.ads
! 8cfe6ed47281d270ca85bd697b71cfa3  gcc/ada/5zml-tgt.adb
! 2122c1846cf70241a13241b74967e267  gcc/ada/5zosinte.adb
! 727431d0e363a9715f0ca96d605cd298  gcc/ada/5zosinte.ads
! e1c0d4e0022150269c5f2a25cd8943e4  gcc/ada/5zosprim.adb
! c0f5c894f9499a36ce7d0ea3d84265d2  gcc/ada/5zparame.ads
! f8f07ac32a41755fd79851d7d36ba675  gcc/ada/5zsystem.ads
! b8ed7cdc9404db45b0f729c654ec2558  gcc/ada/5ztaprop.adb
! d4cdea56cb3e5917b0342a985dd59a63  gcc/ada/5ztaspri.ads
! 15bd1ba7359b6a008a58df29a652bfa3  gcc/ada/5ztfsetr.adb
! 1a8d4732cf214b920fa67b5bea6893d2  gcc/ada/5ztpopsp.adb
! 1a50d245c7e3c23d281286ae36bf3d5b  gcc/ada/6vcpp.adb
! 21a16510653b07d3c8c79387a3778a0c  gcc/ada/6vcstrea.adb
! 1cb3144a1aa42619d828292c2ebf0ca4  gcc/ada/6vinterf.ads
! eda1a9987f9294488446ce1cb6da150e  gcc/ada/7sinmaop.adb
! 6d865b55e67d3ffd41d37a0959741b87  gcc/ada/7sintman.adb
! f37d8b5e52a33f4f4f785d8b86c07fb7  gcc/ada/7sosinte.adb
! 887fc44a83d208eb575d9021bfae81db  gcc/ada/7sosprim.adb
! b0487596df93779168e4b8eaa318f2bc  gcc/ada/7staprop.adb
! ebc94655df0d68ac6dfc96e855a3ffb3  gcc/ada/7staspri.ads
! a0a1fcd5fc222087a37fdb6b046f7106  gcc/ada/7stfsetr.adb
! 706d689e2df99685af98bf2e0d111ab5  gcc/ada/7stpopsp.adb
! 0557b8b059913110276aa29018d1bba7  gcc/ada/7straceb.adb
! 8d4f6d3b49ed3a081faa922c59ea9f3f  gcc/ada/7straces.adb
! 93e87c25d41d5f9777d460ed9440804d  gcc/ada/7strafor.adb
! 7ba88114f79466f907e5a4a1f4c8bb8d  gcc/ada/7strafor.ads
! c537f947aadb891aa3f3df592556dac3  gcc/ada/7stratas.adb
! efd938244dc007371fa3fc3bcb03eee2  gcc/ada/86numaux.adb
! 91664ab38ca6f4c19c784e6323ea6329  gcc/ada/86numaux.ads
! ffb195b6cd01db5d43ffe386f26c6acb  gcc/ada/9drpc.adb
! cafc62f14081a04c310c837bb6ef8050  gcc/ada/ChangeLog
! bc0f6b466c2c392dc6ecea77af347cc9  gcc/ada/Make-lang.in
! fd9934e106e179122470edb6678e669f  gcc/ada/Makefile.adalib
! f869f8c1890c4ed120cbaf3310b43736  gcc/ada/Makefile.generic
! 4969a5d50ff486297a79ef864c49508b  gcc/ada/Makefile.in
! f4ede4c6609efa39ceff231b80cace32  gcc/ada/Makefile.prolog
! 5dc1ca55b5a6ec367a4194e0567adeff  gcc/ada/Makefile.rtl
  76d94bc0711500e3d4ba7fbd60430c4b  gcc/ada/a-astaco.adb
  de35fad803ed947dd50f32b6d15b4a0a  gcc/ada/a-astaco.ads
  2a52a7d7529d4880d5a6761d55581b69  gcc/ada/a-caldel.adb
  4f7bcbd657f8fa7287561aaec75e34c0  gcc/ada/a-caldel.ads
! 706d6879543c9a359b2879a8bf8682fd  gcc/ada/a-calend.adb
! b0d4f8daf944214dd0e578f3e4aee25c  gcc/ada/a-calend.ads
! 09d1407b22077c4b9463834d1fb7f131  gcc/ada/a-chahan.adb
! 279d27e955c01799a059aab431d0936d  gcc/ada/a-chahan.ads
  50488297e80d4725337450c20527d5aa  gcc/ada/a-charac.ads
  69db9ab461a8419e79cfcd7c8a64998c  gcc/ada/a-chlat1.ads
  ddeb2f881db9f22f33a31eacd6ff02c9  gcc/ada/a-chlat9.ads
  0b6d780714191552adae1a777682e470  gcc/ada/a-colien.adb
  55320cfe8cb20d518c2af277d2796a6d  gcc/ada/a-colien.ads
  cefddd201c493b252a00a0f8fc826199  gcc/ada/a-colire.adb
  939f189b812fc3464ba73fb964c41a62  gcc/ada/a-colire.ads
  86421a6455968e54fe0c10fb6c85e9fe  gcc/ada/a-comlin.adb
  dfba9cf9e4a412e7a6bd501fbc8e78c6  gcc/ada/a-comlin.ads
  c097d87327a95b6fe1e053c391d53eb0  gcc/ada/a-cwila1.ads
  2b3ac34ce3c7820c436dace658eb55cb  gcc/ada/a-cwila9.ads
  21fb645a3e47fcd41609774942c44fa5  gcc/ada/a-decima.adb
  3f3ab24f2c03c6a518398e5ca4f3f10d  gcc/ada/a-decima.ads
  2979a4ac23f6909304b1e819bc243d8d  gcc/ada/a-diocst.adb
  740cde317670242e61a80cc877ab18f7  gcc/ada/a-diocst.ads
! 65c47211de92597508134e901d5f376e  gcc/ada/a-direio.adb
! d00c15af10cbb94ab6e0669e9799f7ab  gcc/ada/a-direio.ads
! 88a4ee822d1df9fcbe827c98dd03726e  gcc/ada/a-dynpri.adb
  eb12cb8146a3d414cca0377dcec53888  gcc/ada/a-dynpri.ads
  cf472c65bbcc2fc8bbbd09239f7d49b5  gcc/ada/a-einuoc.adb
  4e49249f9afdc0f027bc66fd527637c0  gcc/ada/a-einuoc.ads
! cf523955f5148aeb44ad125bdcf4f254  gcc/ada/a-elchha.adb
  35b14d87d8f4d6033f4badac86898dec  gcc/ada/a-elchha.ads
  df54a47840d4cd505f4fcdf75931ee07  gcc/ada/a-excach.adb
! 564a9ef58f85600942d98ffe050a688e  gcc/ada/a-except.adb
  6c73faee0bba8ebc4f848083dcf414be  gcc/ada/a-except.ads
  43778735eef7989ee699f9fac917a1f7  gcc/ada/a-excpol.adb
  6496940e43e865c3d5cb2308667d4ef2  gcc/ada/a-exctra.adb
  008fdb434593df08a5d59993b5b3cb02  gcc/ada/a-exctra.ads
! e9c4080b2669af96320ac7b2ee98b9e5  gcc/ada/a-exexda.adb
! f5766383acfcfb01fd1d224b07421b6b  gcc/ada/a-exexpr.adb
! bd2266ec1c6df6c5a15df82945292e0e  gcc/ada/a-exextr.adb
  9d63d99e8860f6458d34206980aaade5  gcc/ada/a-exstat.adb
! d9d101d13bca6c1727fa2c648868239b  gcc/ada/a-filico.adb
! 7d1e2507ec349a93e76537fad48ab1ae  gcc/ada/a-filico.ads
  c4f200f87fe3ece98408cb377d4a5f09  gcc/ada/a-finali.adb
  48a4cdc3b0a041e5e85cb7b67a89bc75  gcc/ada/a-finali.ads
  506a89a31e2f2c9614f08e66a0de5bce  gcc/ada/a-flteio.ads
--- 258,596 ----
  fa84a282ce7cd6876d1eac368a31a368  config/mh-sparcpic
  2415a4da9726792701f226bdb0e5ac3f  config/mh-sysv4
  2415a4da9726792701f226bdb0e5ac3f  config/mh-sysv5
+ 84eaf9ea2c79436ff904518a6b7dc661  config/mh-x86omitfp
  740855ebe34cb2d01fba1f1bcb4264cf  config/mh-x86pic
  3755b5b077053b5de54ff0f781ca9295  config/mt-alphaieee
  96289d06809692c31d71e69c4bedb6d7  config/mt-d30v
! 945f54294ca11fd14c1aaaecde3ce7da  config/mt-gnu
  2067ce86494ccb89791fe169eee8c198  config/mt-netware
  5aa8f75c6588d513ce199e2e44c206e2  config/mt-ospace
  9c67d61b28da389337cfaba76ac581ee  config/mt-v810
  12b3030d3d59526c374c15af4f5944dd  config/mt-wince
+ 120ec56e3aa27739a2945bc1c8a2530a  config/nls.m4
  b963319bdff419a7b32cb107b047433d  config/no-executables.m4
+ 08ac6e38b61b5cee2fa4129284da8fb9  config/po.m4
  d3cecf02bb97035177818aefbb0e0833  config/progtest.m4
! 761497fd3445beb86a90919955d5aa20  config/stdint_h.m4
! 5e1e75893989d0ae3c0452451cf80280  config/uintmax_t.m4
! 6b1c349fb182e74fbc464c50c88fe2ee  config/ulonglong.m4
! de9f558443b4ed8bd1eb79e5210b2ac8  config/warnings.m4
! 64ba2c986571376c546acb481e2e84be  configure
! b1e366ce64d6d5c869612379b06a56ab  configure.in
! 04b8588bd165f02e22ab6ae0a4da34da  contrib/ChangeLog
! 7af8d2979bf1a7cfa88e30d05fa22be2  contrib/ChangeLog.tree-ssa
! e1f836909733092cad5c0695872da887  contrib/analyze_brprob
  d718f7aa23da7d4f25b48a5607b9fc7c  contrib/compare_tests
! 1630984090f8c7ed66e5a977c20664cf  contrib/filter_gcc_for_doxygen
! 84ad7a80afbaa3d0164cd4ee1fbce6c2  contrib/filter_knr2ansi.pl
! 58f9ffefd25533d3fa6e772f833336a1  contrib/filter_params.pl
  3060a6f740228ce0b4196fc05be4f0f1  contrib/gcc_build
! 278a343efba07ffef3f0051a17d9354e  contrib/gcc_update
  48cbb3050eaf94f8bfbee3c6899c54ec  contrib/gccbug.el
! ad3409eafc817c3aab1e6c745879d2fc  contrib/gennews
  59304fc08afa489baa6b920cc76dc625  contrib/gthr_supp_vxw_5x.c
  fa945bac89ee68b410027dcfe1312f4b  contrib/index-prop
  20179e1289a3a0ff7a6869666b1252e1  contrib/newcvsroot
  1a7e182574673a0ba979ec4ebca2944c  contrib/paranoia.cc
! 80a30ed6a98e5fd085b3caba288743e1  contrib/reghunt/ChangeLog
  ab31219466ac7df2a1aa15900540bc8a  contrib/reghunt/README
! 347de90be860ef3b72d5c3298e18e5df  contrib/reghunt/reg_periodic
! 3cce3997de3840363fc48b264eeaa837  contrib/reghunt/reg_search
  0ef47a46d2e384a9532935891338c161  contrib/reghunt/reg_test_template
! 2a24e44093832f59710eb531b09152d1  contrib/regression/ChangeLog
! b53356615593020467bc01e4845752af  contrib/regression/README
! 6b927b5fa9fc3fee8f52bf46893f0bd9  contrib/regression/btest-gcc.sh
  57b2176bd936777562a9baa0812892a0  contrib/regression/objs-gcc.sh
  dc562ddb86567c65e82953825713dc4b  contrib/regression/site.exp
  a4460747c474747dccaa9dc5ed08e634  contrib/test_installed
  c4bf22fca12c3089a14e041a9c262797  contrib/test_summary
  bc07630ff35947fab2933666a48dbb20  contrib/texi2pod.pl
! 888ab7bfb4e4a64a0e2717ab55f0e9e8  contrib/tree-ssa.doxy
! 10240873a22da60b881e516003c1f688  contrib/warn_summary
! e181e2c8720c60522c4c4c981108e367  depcomp
  9f1b74d3fce1364cf74f135d09124aa7  faq.html
+ ac81461263c340d1f6c7ed86a63b06de  fastjar/.cvsignore
  dbe6dec25102f59632c7a62ec0e62158  fastjar/AUTHORS
  bdb1454b8697cdb175027e91b4834fdc  fastjar/CHANGES
  bae3019b4c6dc4138c217864bd04331f  fastjar/COPYING
! 57517e12fa116d8ca28957d0985d2dfb  fastjar/ChangeLog
  209e12e13fbd7d098b1c8f52859c291f  fastjar/INSTALL
! 17e406950128873841484407a5b82e19  fastjar/Makefile.am
! 75ebf866bedf680ff96a6f690d56ffa3  fastjar/Makefile.in
  b2237a769a55ab029df30e4cf3ffd29b  fastjar/NEWS
  c2520aec24d9c4f28b1da15fd4995a10  fastjar/README
! f26f9d497a28bd6027a15b30ef4e5e62  fastjar/acinclude.m4
! e8d3e801f49a2082f8ae1603b93809ba  fastjar/aclocal.m4
! c33b65bba68f27c82efc44eec660156d  fastjar/compress.c
! b6ff72d8f7d601d6ba55c9e2020c1486  fastjar/compress.h
! 99c75ae4cdd67fe0611a3dc69a15351c  fastjar/config.h.in
! 26676fd1180bae265c0cc9936d7ba8c1  fastjar/configure
! 60f6005056567fc846a84be6a9f2d12a  fastjar/configure.ac
  11d8607a786579eb40e9af1364ba7530  fastjar/dostime.c
  c44ff949fe567a1667a14d5973f62aef  fastjar/dostime.h
! 36a7bdf5a6ee8b327c3f20e1c9c7c97c  fastjar/fastjar.1
! 2f6cac4ecbc1668dbe9dda7e604c44d3  fastjar/fastjar.info
! 391bafba03dcaf858f5005f73573340b  fastjar/fastjar.texi
! 3fc31f26cf4541972b33f33e0e6f167d  fastjar/grepjar.1
  d66630536f4ad8fe249cb6cd115ae1d1  fastjar/install-defs.sh.in
  4fc3b8f0c1af92661330be086741c2e4  fastjar/jargrep.c
  b88ab791613fcc11cb2dcc67d74a2552  fastjar/jargrep.h
! 97b04946a141f70bc7b5e2849af8a870  fastjar/jartool.c
! c2647d13f9b7b736f86b8b7f3bb62a06  fastjar/jartool.h
  af7fa69dffc8b8bb6ab233fbb95a7559  fastjar/pushback.c
  ea3af7dec309d1e773a6130c0f32a377  fastjar/pushback.h
! a93d2dfed0782b927260e0c75704fb72  fastjar/shift.c
! 2b92efef91b38f0919b4a668d126cf70  fastjar/shift.h
! c0aac0802a8e66b0adf42be9af5caac3  fastjar/zipfile.h
! ac81461263c340d1f6c7ed86a63b06de  fixincludes/.cvsignore
! 7b87f9f4142d8bb4676f18316d6249de  fixincludes/ChangeLog
! 17993354fac9b0f6d15fb796d8853c8f  fixincludes/Makefile.in
! e92bed26186314043444cd314759e996  fixincludes/README
! 455903ad4ff71fa5c5340ef7ae41a0e6  fixincludes/README-fixinc
! a734b306cd4fb813ad97ba4ef4a320db  fixincludes/aclocal.m4
! 5c12000ad0f94a344a013d3adfbad944  fixincludes/check.tpl
! 3ee1252aa32567b3a40c959760db813c  fixincludes/config.h.in
! c15cefd65ffc77c0fd6f949ed38f9877  fixincludes/configure
! 894299607ef8f55cc15aa84be8c3b268  fixincludes/configure.ac
! 84c1b4cf4d18a0135226683c961d30d0  fixincludes/fixfixes.c
! fae9454695f2020800d2f6e86642e07e  fixincludes/fixinc.in
! 55b19db3373031fc7f1b10e63d165356  fixincludes/fixincl.c
! 2a4b32e8670412700d3fb185983fa2b7  fixincludes/fixincl.tpl
! d1cfb40a5dcdd78bd41cb8f2b874cf73  fixincludes/fixincl.x
! b20d77e88064dda6bd5d37f9163d9d1c  fixincludes/fixlib.c
! 8691ace72b3e5f57defcdd4fa1b03d01  fixincludes/fixlib.h
! 131c487750a37d0654d2f180e8613da0  fixincludes/fixopts.c
! 7e845ae78ef215ef3d6aa2244427a8e6  fixincludes/fixtests.c
! 1c43d6f5f11937628b24287d8e3fcbd1  fixincludes/genfixes
! 4cd200abfb40f920b9e70cb7b92764bb  fixincludes/inclhack.def
! 6c07234c19d66eb66d1bd0d08e5c6c60  fixincludes/mkfixinc.sh
! 75e65138629db0b452ab1d146b05bba6  fixincludes/mkheaders.in
! dc2a018f4cbb8f31068ab14b259d8e71  fixincludes/procopen.c
! 3b8c554a3f8238b02a5ad08c855af559  fixincludes/server.c
! 8d15ce24d936a86ac055dd1319a35783  fixincludes/server.h
! 59a023480ef3a992a9fb015ac7fd9c6d  fixincludes/system.h
! fb44e29b7a8917825243dec10c890f3e  fixincludes/tests/base/AvailabilityMacros.h
! 9344637ef653af4f95f298c7addfdef5  fixincludes/tests/base/X11/ShellP.h
! 987eb6f39d92c1d3ad0964af03187956  fixincludes/tests/base/X11/Xmu.h
! 25f8801e496059592d88616167a1c9ec  fixincludes/tests/base/Xm/BaseClassI.h
! 35ab78a7d1f2c96ca81095bde5ed1b91  fixincludes/tests/base/Xm/Traversal.h
! 3a8a60d642d96668cc0fa5558994b3b9  fixincludes/tests/base/_G_config.h
! 1345522e326f071aeb69b1c490fc8fc2  fixincludes/tests/base/ansi/math.h
! fb543bca7c73da85f944600810ef2171  fixincludes/tests/base/ansi/stdlib.h
! d6a40f191014042c3a1bf44086be6773  fixincludes/tests/base/arch/i960/archI960.h
! 6ab96360e6a5c4764ca6ce3ec7505100  fixincludes/tests/base/arpa/inet.h
! 9743288574b1935e5982d8acba94190e  fixincludes/tests/base/assert.h
! 2a7dfec79ab9872aa927f9c685175fcc  fixincludes/tests/base/bsd/libc.h
! da032b0e10922af19cec10bde3ea8936  fixincludes/tests/base/c_asm.h
! 3e2bfa71664f5d54fa084387c5915349  fixincludes/tests/base/com_err.h
! 69f7247dd4e4cf4af4aff6d92ae29999  fixincludes/tests/base/ctrl-quotes-def-1.h
! 4887322d5ca3485f06af33e34f0b1e25  fixincludes/tests/base/ctype.h
! 454bd04221e478258462490dc2ed7ef2  fixincludes/tests/base/curses.h
! 3a4a1069077318929fc82027df39ca82  fixincludes/tests/base/fixinc-test-limits.h
! 3f4568cb6461596182fe8c54a9fc9d7b  fixincludes/tests/base/fs/rfs/rf_cache.h
! 7e364ced80dd56f237390965aa7f15d0  fixincludes/tests/base/hsfs/hsfs_spec.h
! 38235ba8906621781d2b926facc9cded  fixincludes/tests/base/internal/math_core.h
! 7438cf0cae4b37215cf293770e6fb229  fixincludes/tests/base/internal/sgimacros.h
! 4d059374c236cf20e8c8cf022c1512dc  fixincludes/tests/base/internal/wchar_core.h
! f3ee3d87cf64e99fd6e01ac3c4968b70  fixincludes/tests/base/inttypes.h
! 833e9408a49784184bee7981d665c911  fixincludes/tests/base/io-quotes-def-1.h
! ef2aa084505b9087cda56c9633002987  fixincludes/tests/base/locale.h
! 8ac97a3367b9a99503c5b21430993cd4  fixincludes/tests/base/mach-o/dyld.h
! 89c11963b284c5a43cca427c60a00a97  fixincludes/tests/base/machine/cpu.h
! 46501093f4cfd450cfd4b18d9fa4b385  fixincludes/tests/base/malloc.h
! 7074e2ac1af1947052a0baa436aa6f79  fixincludes/tests/base/math.h
! a911f5fbb127353024e77149fcf90596  fixincludes/tests/base/netdnet/dnetdb.h
! f690db296a82aeefa0bfe9ad74a2b71c  fixincludes/tests/base/netinet/in.h
! 2649ccca3396541aeb5e612d4b4a3141  fixincludes/tests/base/netinet/ip.h
! f4a72388e98f34c098a3467dce9aa4e1  fixincludes/tests/base/obstack.h
! c24d1be3b5afd871e9f78e1a67b9cb82  fixincludes/tests/base/pixrect/memvar.h
! 92b0b38b5d8e59777b1bce17680e536e  fixincludes/tests/base/pthread.h
! 0af417a4255222a48d182d9f602c145e  fixincludes/tests/base/reg_types.h
! 099702dfa122c22886a95f7c24ab7c13  fixincludes/tests/base/regex.h
! 723e68af94480e1ed60ef8abb667cfe6  fixincludes/tests/base/regexp.h
! d4a7add063789aa9f88d32157a4b4258  fixincludes/tests/base/rpc/auth.h
! 30de93181fcbc197c76bb32fc0d3cc1e  fixincludes/tests/base/rpc/rpc.h
! caad20924beb9f8253e1edb1c1be7c02  fixincludes/tests/base/rpc/svc.h
! a3bb3a605d4d6bfb8401a21e45bf8075  fixincludes/tests/base/rpc/xdr.h
! f2c427008762d44eef0afd8085e30e8d  fixincludes/tests/base/rpcsvc/rstat.h
! 9f7bb5e5ae8b8c14536a1e0fb8179835  fixincludes/tests/base/rpcsvc/rusers.h
! 03b938df568683225ee81ddf1d2498c3  fixincludes/tests/base/sparc/asm_linkage.h
! d0fcad5da41c4659704e010de6a222c3  fixincludes/tests/base/standards.h
! e6cc98bf40a27419dc1002e0f51d79d6  fixincludes/tests/base/stdio.h
! 1887d8bc1711dae9922852cda6027877  fixincludes/tests/base/stdio_tag.h
! 979538c4d8080e26fcbf2616d93e13ee  fixincludes/tests/base/stdlib.h
! 918dc04e2ba33f173fe1b873a378868e  fixincludes/tests/base/string.h
! a4ee1d1f3da6d0e87609b408d8e4308e  fixincludes/tests/base/strings.h
! 127183621f8b29d6912c683be6102135  fixincludes/tests/base/sundev/vuid_event.h
! 9b77f381300d6f48f8fca91cf82e8c31  fixincludes/tests/base/sunwindow/win_lock.h
! ca4183dcf93fc8b7e83160156d39aa64  fixincludes/tests/base/sym.h
! bf029365e9c459de36f0f0146b165970  fixincludes/tests/base/sys/asm.h
! 4487e9db842139965e48ecbfefc189b6  fixincludes/tests/base/sys/cdefs.h
! a3c7fe09a76b9aa1626801d30ddf2b18  fixincludes/tests/base/sys/file.h
! add3890f41c70949853ca9f14d7e2816  fixincludes/tests/base/sys/ioctl.h
! f3ce1ed321221d8270b1734adec9152a  fixincludes/tests/base/sys/limits.h
! cd61846311e14917693160c5e60ad2cd  fixincludes/tests/base/sys/machine.h
! d669f7372e28cb610f59526574b4c70a  fixincludes/tests/base/sys/mman.h
! a40d68fbd950045453359eb4da853754  fixincludes/tests/base/sys/regset.h
! 4ef7922e2fa168e9e4f0dd00e3b67d09  fixincludes/tests/base/sys/signal.h
! fa89792037e66d05c7a76ac07850be85  fixincludes/tests/base/sys/socket.h
! 58c647b7471bba144d18903e6c2d770a  fixincludes/tests/base/sys/spinlock.h
! 42178df0d482e159fe3fc2d8c4b216cc  fixincludes/tests/base/sys/stat.h
! 29bdea74f019f4f7e1363414d1d56965  fixincludes/tests/base/sys/time.h
! 05a4bcb2aec048e6ec9638c29cf69224  fixincludes/tests/base/sys/times.h
! baa779ef75a7c62a64485fb5178a77b9  fixincludes/tests/base/sys/types.h
! c340da8e13edf5d70941b01670df6228  fixincludes/tests/base/sys/ucontext.h
! 07da7d361959043f477e18c74874d783  fixincludes/tests/base/sys/utsname.h
! 6b77a52c112a1567fc4e8502f52ee30f  fixincludes/tests/base/sys/wait.h
! 9ecfe56af925dd7c6e2838a1696253e6  fixincludes/tests/base/testing.h
! 4c5eeb62a358a4c9140db2c1e93a8bd6  fixincludes/tests/base/time.h
! 7dc68f10756f3c5df014326605fe9efe  fixincludes/tests/base/tinfo.h
! 955462b555900ecd3934223c64e21fa7  fixincludes/tests/base/types/vxTypesBase.h
! b6494e752821a4f87a2114c27143856c  fixincludes/tests/base/unistd.h
! 4f59f83f073afacc3f59c39952ec8a7b  fixincludes/tests/base/wchar.h
! f86a4ea6000eba71d34c1b9a7bcd2c14  fixincludes/tests/base/widec.h
! 1ef5e5ddc14eaac69b9ac3b4a0782977  gcc/.cvsignore
  3a3ffc0ce8bd3fa0865f001299994af3  gcc/ABOUT-GCC-NLS
  94d55d512a9ba36caa9b7df079bae19f  gcc/COPYING
  7fbc338309ac38fefcd64b04bb903e34  gcc/COPYING.LIB
! c421526571b5b31156c4865563110182  gcc/ChangeLog
  9f3eae1e23bcd4166785b0386b467eef  gcc/ChangeLog.0
  fc0aaf9fc3d0b7a20690add95f3bc80a  gcc/ChangeLog.1
! f3d98ce0013c924cc026c266b5f09a2b  gcc/ChangeLog.10
! 18285f5da6270cc37adf891ee7be3812  gcc/ChangeLog.11
! 2d2d11b8a3e9e7e4124688336b07d9ab  gcc/ChangeLog.12
  070098e9960d4f47a03c9d10070cfc61  gcc/ChangeLog.2
  7f91ddf5107166700482cc16857cb1d0  gcc/ChangeLog.3
  3d9964b41a57c6f184b022dec3e115a2  gcc/ChangeLog.4
! b4e4afb3ce3f92318baad2c3ea30543b  gcc/ChangeLog.5
  04d99c442dd304d0d00b5234135057db  gcc/ChangeLog.6
! 035b26ab528034d6bfbb2a288b84cd1b  gcc/ChangeLog.7
  98791e5d93f23a747cc8d47966a98427  gcc/ChangeLog.8
  cc09ce1ef3704378bfc6acf0f2c9cef4  gcc/ChangeLog.9
  98c5a6533d7e4507aba5dc4fd06014ed  gcc/ChangeLog.lib
+ a0a7fda9e71c5bc63284bdefa915611a  gcc/ChangeLog.tree-ssa
  4804423c755a929408412852eb45e422  gcc/FSFChangeLog
  5af5721f6387aa8aa5fb200e025dd573  gcc/FSFChangeLog.10
  f7f665544fb6aa08551b37283f6c56de  gcc/FSFChangeLog.11
! d6c8d8f4cf325cd24a60d312bb247f46  gcc/LANGUAGES
! 8113184815845c8a74f0c04bb99987c5  gcc/Makefile.in
  00919fda1a585fdc4a1be1fec2eeb0bb  gcc/ONEWS
  f88d9228718a255b827d6f417063d62d  gcc/README.Portability
  f44aeb578969621358194ef6a8c67093  gcc/SERVICE
! 7b635a74d241195bc2159ebaac718d75  gcc/aclocal.m4
! 401d597164dec84fe7a3e26ad1edc72b  gcc/ada/5xcrtl.ads
! 2a02ea952619a60cad152ca038e605e7  gcc/ada/9drpc.adb
! 655b5798e177ab7875b02e3f805bb8fb  gcc/ada/ChangeLog
! ea6b5429aa670cb6f1b4f72087be2656  gcc/ada/ChangeLog.tree-ssa
! 59c750be3c5d1eca2107fa558b336f2a  gcc/ada/Make-lang.in
! 0caf6e36e9bd1860901bc7d958b6107b  gcc/ada/Makefile.generic
! 263a65feb5e7990845d5b3e5db274123  gcc/ada/Makefile.in
! 14b82e98d657dbd7d8aab79073120f6b  gcc/ada/Makefile.prolog
! c32099714cff77325746dee05f9368cc  gcc/ada/Makefile.rtl
  76d94bc0711500e3d4ba7fbd60430c4b  gcc/ada/a-astaco.adb
  de35fad803ed947dd50f32b6d15b4a0a  gcc/ada/a-astaco.ads
+ 3d74afbc4fb2d012cb16fbe34e22e493  gcc/ada/a-caldel-vms.adb
  2a52a7d7529d4880d5a6761d55581b69  gcc/ada/a-caldel.adb
  4f7bcbd657f8fa7287561aaec75e34c0  gcc/ada/a-caldel.ads
! 82fa85cd259cf486b168cd800d8df6be  gcc/ada/a-calend-mingw.adb
! 338c267dfc96d492a6e07be089b99e7f  gcc/ada/a-calend-vms.adb
! 0b584a9f2b59ebf7f1490940e4803209  gcc/ada/a-calend-vms.ads
! 17f5b5d76b994eb3dcebe403d88d094b  gcc/ada/a-calend.adb
! e5973b867004af990f0514217db11a94  gcc/ada/a-calend.ads
! 2707ede80396e01e87fe0e845a98f22b  gcc/ada/a-cdlili.adb
! 77a0bad6c680ad4eed0d59e35fa8b5e8  gcc/ada/a-cdlili.ads
! 3eed66db05e8e758c2f5ad6aa0080a02  gcc/ada/a-cgaaso.adb
! eb34975461a96365ee70219c205b09dc  gcc/ada/a-cgaaso.ads
! 6f0fee9f52c407c584dcd026d75f66c1  gcc/ada/a-cgarso.adb
! 88911b30f4a5f3a6c4efaf681c438831  gcc/ada/a-cgarso.ads
! d83d525c80c1b029593f9f92bdb5f96d  gcc/ada/a-cgcaso.adb
! a2a285034960313158ec81130fe74b75  gcc/ada/a-cgcaso.ads
! 7772f580de3e016358d967632e356f60  gcc/ada/a-chahan.adb
! de29cf3748a53b83ef330ec37612bc2c  gcc/ada/a-chahan.ads
  50488297e80d4725337450c20527d5aa  gcc/ada/a-charac.ads
  69db9ab461a8419e79cfcd7c8a64998c  gcc/ada/a-chlat1.ads
  ddeb2f881db9f22f33a31eacd6ff02c9  gcc/ada/a-chlat9.ads
+ e754e2aea5a42b9e774de6ed6bb5d00c  gcc/ada/a-chtgke.adb
+ de187aad39d41d602f6a33d7f232681b  gcc/ada/a-chtgke.ads
+ 7357946ad69f54ec38690c705e71daf0  gcc/ada/a-chtgop.adb
+ 7de3f9208d35419c7bd0d55516ec0891  gcc/ada/a-chtgop.ads
+ 1625e1ae135ca894e1949974c777470d  gcc/ada/a-chzla1.ads
+ 2e4d2e201b78dd86b85b948c631cd708  gcc/ada/a-chzla9.ads
+ edc3426ba8374fa5ccfe4c00746e09b8  gcc/ada/a-cidlli.adb
+ e8f2fa7982075907c7e911ff4c1ea628  gcc/ada/a-cidlli.ads
+ 31f0b0142e1c88bf8c4e73a374b6410b  gcc/ada/a-cihama.adb
+ 366d20b999f717f36eff6f2299134e9e  gcc/ada/a-cihama.ads
+ e6ccafe08cde69a1f5a4efcca9b462cc  gcc/ada/a-cihase.adb
+ 602bd835c74061cc11c73a2429161774  gcc/ada/a-cihase.ads
+ d1b14a7c8cda9730638e89e298cf5d76  gcc/ada/a-ciorma.adb
+ 3ce589a3f195989b7556a731e2fe8040  gcc/ada/a-ciorma.ads
+ 7697c854931f152cfed4efa41a0d94d8  gcc/ada/a-ciormu.adb
+ 7f1985e98bf0977a5998179c810d51e6  gcc/ada/a-ciormu.ads
+ 65a591dd7aeddf54e41cc459eeaa95cd  gcc/ada/a-ciorse.adb
+ 4997532c9c52b13f3458193bf9613294  gcc/ada/a-ciorse.ads
+ 98ae4e9bb99e1a6b2246d120db571aa6  gcc/ada/a-cohama.adb
+ 1d9deb0430bf8e8e13b0e200fa6f951d  gcc/ada/a-cohama.ads
+ 5d5afe7f13e6de8cf60b37c52875b077  gcc/ada/a-cohase.adb
+ 907d419b79cb29e996663de5505b4c3f  gcc/ada/a-cohase.ads
+ d1f28472e16c43931480308c369ce69f  gcc/ada/a-cohata.ads
+ 526a47791e3cc390177e20aebbce2a23  gcc/ada/a-coinve.adb
+ 4c568c08ae527cb8988b646f7fe06ca1  gcc/ada/a-coinve.ads
  0b6d780714191552adae1a777682e470  gcc/ada/a-colien.adb
  55320cfe8cb20d518c2af277d2796a6d  gcc/ada/a-colien.ads
  cefddd201c493b252a00a0f8fc826199  gcc/ada/a-colire.adb
  939f189b812fc3464ba73fb964c41a62  gcc/ada/a-colire.ads
  86421a6455968e54fe0c10fb6c85e9fe  gcc/ada/a-comlin.adb
  dfba9cf9e4a412e7a6bd501fbc8e78c6  gcc/ada/a-comlin.ads
+ 0c57f1462c34f92021f66e575ec9e10a  gcc/ada/a-contai.ads
+ f461a25ebf4f2b1d51193a1487ee7324  gcc/ada/a-convec.adb
+ 3c6f8857f1edb44936a0acd66fd84f93  gcc/ada/a-convec.ads
+ ebebb6468aa0bd3b52e074d84aa51362  gcc/ada/a-coorma.adb
+ 97e8801c288e639d99d05eea03c31d4c  gcc/ada/a-coorma.ads
+ c67cbf856c692645fb85f700a13c7192  gcc/ada/a-coormu.adb
+ 687764e5a9b8853847c7447ea72d1caa  gcc/ada/a-coormu.ads
+ 86954afd9c279417603dae00462b2864  gcc/ada/a-coorse.adb
+ 5e8614b3b93de54291a76b0319cef4aa  gcc/ada/a-coorse.ads
+ 4d1baa7f2ba60efd36df092362139078  gcc/ada/a-coprnu.adb
+ 88c5e33443ddeb9dd597732c89fcee3c  gcc/ada/a-coprnu.ads
+ ec57f3b19395396c0295b4246f4d9116  gcc/ada/a-crbltr.ads
+ 998819fc41bd6f27a73201092e82df9c  gcc/ada/a-crbtgk.adb
+ 56f1e0064170c535619b1ac76e05a4c9  gcc/ada/a-crbtgk.ads
+ 08f959211eb92ec744a8b34fe8307b1b  gcc/ada/a-crbtgo.adb
+ 5eb66f73211f234851aa026c53beac34  gcc/ada/a-crbtgo.ads
  c097d87327a95b6fe1e053c391d53eb0  gcc/ada/a-cwila1.ads
  2b3ac34ce3c7820c436dace658eb55cb  gcc/ada/a-cwila9.ads
  21fb645a3e47fcd41609774942c44fa5  gcc/ada/a-decima.adb
  3f3ab24f2c03c6a518398e5ca4f3f10d  gcc/ada/a-decima.ads
  2979a4ac23f6909304b1e819bc243d8d  gcc/ada/a-diocst.adb
  740cde317670242e61a80cc877ab18f7  gcc/ada/a-diocst.ads
! 6129927014de84324a271f9a41e1ef85  gcc/ada/a-direct.adb
! 39b8e349a11ceef0d41850f2cb0e6947  gcc/ada/a-direct.ads
! 11e1583522b6cc4769d389a70341f498  gcc/ada/a-direio.adb
! 3d642f3ee23413bc4718171c68153fe2  gcc/ada/a-direio.ads
! 2a19b0a5d0fbed38c48713a2b411d4ab  gcc/ada/a-dirval-mingw.adb
! b305694fed9f05d29ca1a4566b166419  gcc/ada/a-dirval-vms.adb
! 091b54e0408089667e1dbd6681effe11  gcc/ada/a-dirval.adb
! 606188f98673a186ba1bb00b4adcea1d  gcc/ada/a-dirval.ads
! e082214c97c2c984f722f64d125f0b57  gcc/ada/a-dynpri.adb
  eb12cb8146a3d414cca0377dcec53888  gcc/ada/a-dynpri.ads
  cf472c65bbcc2fc8bbbd09239f7d49b5  gcc/ada/a-einuoc.adb
  4e49249f9afdc0f027bc66fd527637c0  gcc/ada/a-einuoc.ads
! 841d56a65233868bde222ca88802b8f3  gcc/ada/a-elchha.adb
  35b14d87d8f4d6033f4badac86898dec  gcc/ada/a-elchha.ads
  df54a47840d4cd505f4fcdf75931ee07  gcc/ada/a-excach.adb
! bd18465bbc6c1df03fc999bbd9f93eb8  gcc/ada/a-except.adb
  6c73faee0bba8ebc4f848083dcf414be  gcc/ada/a-except.ads
+ 31d7549fa5b9367dfc5cc9b29c92f9c2  gcc/ada/a-excpol-abort.adb
+ 2c7843988a92f848db3011ec708b4406  gcc/ada/a-excpol-interix.adb
  43778735eef7989ee699f9fac917a1f7  gcc/ada/a-excpol.adb
  6496940e43e865c3d5cb2308667d4ef2  gcc/ada/a-exctra.adb
  008fdb434593df08a5d59993b5b3cb02  gcc/ada/a-exctra.ads
! 8191dd63f9492c2447be90e925199cef  gcc/ada/a-exexda.adb
! 363222ed1fe85c872904b4753ec53c65  gcc/ada/a-exexpr.adb
! a0acd4255c862e425fe46abe6c342759  gcc/ada/a-exextr.adb
  9d63d99e8860f6458d34206980aaade5  gcc/ada/a-exstat.adb
! bf629c583292d2d1d7219fd9f5115b14  gcc/ada/a-filico.adb
! 75bc37e666709c437ee44aba98f9a837  gcc/ada/a-filico.ads
  c4f200f87fe3ece98408cb377d4a5f09  gcc/ada/a-finali.adb
  48a4cdc3b0a041e5e85cb7b67a89bc75  gcc/ada/a-finali.ads
  506a89a31e2f2c9614f08e66a0de5bce  gcc/ada/a-flteio.ads
*************** c4f200f87fe3ece98408cb377d4a5f09  gcc/ad
*** 627,651 ****
  c625f70f320e11c463fed1210cdb0cc2  gcc/ada/a-inteio.ads
  add866185e7618abfefa2184747a55b3  gcc/ada/a-interr.adb
  abaebb74b0550b7b4c6b28dff2bbebf7  gcc/ada/a-interr.ads
  5e548e624db711cdc59cdf4e41b74b84  gcc/ada/a-intnam.ads
! 95f6831cf2a3bfd925ba86832a758687  gcc/ada/a-intsig.adb
  70235a8c237554ac3c5087399b5388ed  gcc/ada/a-intsig.ads
  2cb2afc78e41c5a89e5fd52e88b671a0  gcc/ada/a-ioexce.ads
  7610d5d545d62151798992abcd8971a3  gcc/ada/a-iwteio.ads
  b55d616a3c6f632eb84021b2738eacce  gcc/ada/a-lfteio.ads
  49b77fa1fd068cd6d4f59f86a75b2697  gcc/ada/a-lfwtio.ads
  e86c6ef6eef506cb1247c6305a3d6cd1  gcc/ada/a-liteio.ads
  7cae81f31ff922609ffc7051c2c76b88  gcc/ada/a-liwtio.ads
  a4795dd444bdc3a0923bfe0797b5e63c  gcc/ada/a-llftio.ads
  1f31f90026634d65a0945ff0e854b647  gcc/ada/a-llfwti.ads
  4722bf15cb9adf1e1329042bfc10d288  gcc/ada/a-llitio.ads
  f62dc8ad649354d05c766cbdc105d685  gcc/ada/a-lliwti.ads
  9b5cdb5bad35ac259b6216c2dd3eac93  gcc/ada/a-ncelfu.ads
  b04a6e00b02ce289c70b7151804a79b0  gcc/ada/a-ngcefu.adb
  cb9e3772a500b5ae74a0b2999d220dfa  gcc/ada/a-ngcefu.ads
! 29bad344de76fbbf9cb0521a58179ed3  gcc/ada/a-ngcoty.adb
  669cdf7fec6615f38f7db77ccb93b037  gcc/ada/a-ngcoty.ads
! 5eb7a2cf2d4ef0fbb7d31cec7e77f267  gcc/ada/a-ngelfu.adb
  e2001d7f1dde10ea37a0a0d0f11c2de5  gcc/ada/a-ngelfu.ads
  2875424e074b16aeb7035d4cf21a5f21  gcc/ada/a-nlcefu.ads
  6094a3d00586f82479c08bc32e6726b8  gcc/ada/a-nlcoty.ads
--- 598,643 ----
  c625f70f320e11c463fed1210cdb0cc2  gcc/ada/a-inteio.ads
  add866185e7618abfefa2184747a55b3  gcc/ada/a-interr.adb
  abaebb74b0550b7b4c6b28dff2bbebf7  gcc/ada/a-interr.ads
+ 6275cba9f81d833be06e112d8d20c546  gcc/ada/a-intnam-aix.ads
+ 9107032ac943ab7c2c4f994ef53c0809  gcc/ada/a-intnam-darwin.ads
+ dbc2a2f6b16effb0b28385109992c60e  gcc/ada/a-intnam-dummy.ads
+ 025a97ac90bd1496fa998417380a07cb  gcc/ada/a-intnam-freebsd.ads
+ aa5d3d3416a4bead679af61bfd0ee784  gcc/ada/a-intnam-hpux.ads
+ 45422a7172b50d3874c27fdc98c4b3dc  gcc/ada/a-intnam-interix.ads
+ 83d44086644460c50f714ea15911437a  gcc/ada/a-intnam-irix.ads
+ 08bd0bf6734035fddf248e1e35cbd5c0  gcc/ada/a-intnam-linux.ads
+ 84e1ba752dec74f6b3f1332a9c456395  gcc/ada/a-intnam-lynxos.ads
+ c4ee6725bf506fd03ded0b6ccbb66993  gcc/ada/a-intnam-mingw.ads
+ cf30d904e1121acdfed0e1188e7263e6  gcc/ada/a-intnam-os2.ads
+ 32f33d78ab8c55e4746afae4267404ea  gcc/ada/a-intnam-rtems.ads
+ d23caf40de4337cc9c65c82eeccd06fe  gcc/ada/a-intnam-solaris.ads
+ cc40d668282d66142be675dcd6eeec6d  gcc/ada/a-intnam-tru64.ads
+ c4da83e8c35940282af0b588c802a237  gcc/ada/a-intnam-unixware.ads
+ 1957746bc54870313b9d7eccbe483ba8  gcc/ada/a-intnam-vms.ads
+ ed8175a50d910a0c151175c281cf35a3  gcc/ada/a-intnam-vxworks.ads
  5e548e624db711cdc59cdf4e41b74b84  gcc/ada/a-intnam.ads
! 8ad834f7313f66bfc50dcafc886da703  gcc/ada/a-intsig.adb
  70235a8c237554ac3c5087399b5388ed  gcc/ada/a-intsig.ads
  2cb2afc78e41c5a89e5fd52e88b671a0  gcc/ada/a-ioexce.ads
  7610d5d545d62151798992abcd8971a3  gcc/ada/a-iwteio.ads
  b55d616a3c6f632eb84021b2738eacce  gcc/ada/a-lfteio.ads
  49b77fa1fd068cd6d4f59f86a75b2697  gcc/ada/a-lfwtio.ads
+ 6a25f639fa26a9b9b60ca8011736806f  gcc/ada/a-lfztio.ads
  e86c6ef6eef506cb1247c6305a3d6cd1  gcc/ada/a-liteio.ads
  7cae81f31ff922609ffc7051c2c76b88  gcc/ada/a-liwtio.ads
+ 5c154641ac3797bf76bff4f0ad0e7cb0  gcc/ada/a-liztio.ads
  a4795dd444bdc3a0923bfe0797b5e63c  gcc/ada/a-llftio.ads
  1f31f90026634d65a0945ff0e854b647  gcc/ada/a-llfwti.ads
+ fe378fe7b89f98d5964741adceb81d86  gcc/ada/a-llfzti.ads
  4722bf15cb9adf1e1329042bfc10d288  gcc/ada/a-llitio.ads
  f62dc8ad649354d05c766cbdc105d685  gcc/ada/a-lliwti.ads
+ 3a36435ce888e8f4d268558ab259349f  gcc/ada/a-llizti.ads
  9b5cdb5bad35ac259b6216c2dd3eac93  gcc/ada/a-ncelfu.ads
  b04a6e00b02ce289c70b7151804a79b0  gcc/ada/a-ngcefu.adb
  cb9e3772a500b5ae74a0b2999d220dfa  gcc/ada/a-ngcefu.ads
! 6c21a50feb5d794557b28dbd4c965d33  gcc/ada/a-ngcoty.adb
  669cdf7fec6615f38f7db77ccb93b037  gcc/ada/a-ngcoty.ads
! 99580107059c530bb1574e71b837feda  gcc/ada/a-ngelfu.adb
  e2001d7f1dde10ea37a0a0d0f11c2de5  gcc/ada/a-ngelfu.ads
  2875424e074b16aeb7035d4cf21a5f21  gcc/ada/a-nlcefu.ads
  6094a3d00586f82479c08bc32e6726b8  gcc/ada/a-nlcoty.ads
*************** b6821b59d9eb065ecd28a58611570b54  gcc/ad
*** 662,735 ****
  50b1ba3745800dfdd8d00e62b12377fc  gcc/ada/a-nuelfu.ads
  3eb293ba0b3b787e4072a05f1939206b  gcc/ada/a-nuflra.adb
  325c95376d7f37b75eab38f9aac1c721  gcc/ada/a-nuflra.ads
  7f18ef259d143373117b8faff7d82125  gcc/ada/a-numaux.ads
! 12df8a96e85aca4adf4b0593cbd822c6  gcc/ada/a-numeri.ads
  ac34c0c15eca6dae77bdef0f7122d52a  gcc/ada/a-reatim.adb
  49bc47e54e742859e994649e8b8b5088  gcc/ada/a-reatim.ads
! c91949d20bd004be46a92b660f9ca279  gcc/ada/a-retide.adb
  5d33ecd36e6fee4af8361344d20beee2  gcc/ada/a-retide.ads
  bc211489334965af5997fb5e65d4bbcd  gcc/ada/a-sequio.adb
! 4506e3a6a3f6c35c1f7c63aad10d4252  gcc/ada/a-sequio.ads
  301d80a2ddaced89e220a194f6a98012  gcc/ada/a-sfteio.ads
  5a93d98750508294b13767b08fec10e0  gcc/ada/a-sfwtio.ads
  5d3599f38d627ca520ccfef01f8d85c9  gcc/ada/a-siocst.adb
  c8ead672a944a7fb1f4f2bebf8e95d16  gcc/ada/a-siocst.ads
  ba739e99cd723aae6d79579fba4d12b5  gcc/ada/a-siteio.ads
  a953d7a1dc198f5cc35786e98cb6a418  gcc/ada/a-siwtio.ads
  07dc7d2712d0aa6cc06f4b322e06969b  gcc/ada/a-ssicst.adb
  f45f46f23aeb7be9c37f1ffee557a41e  gcc/ada/a-ssicst.ads
  8d64f7632f3f02f599d22d9c7565480b  gcc/ada/a-ssitio.ads
  bbb99001501fd721dbd8d8fdb80d09ee  gcc/ada/a-ssiwti.ads
! a02ab1065f89d2dbb0b7482e9999fb5a  gcc/ada/a-stmaco.ads
! f3788939e2e82b82a74608817b7f5aa0  gcc/ada/a-storio.adb
  b45e37576ae0407389ba7291607bdcc1  gcc/ada/a-storio.ads
! 698184227e4df8b46ef3b51a96c97b57  gcc/ada/a-strbou.adb
! 3b2c6e2ad2a89541a1c9bc1ae4b31d6e  gcc/ada/a-strbou.ads
  0a6b88922a9b9bcc32543df284640a74  gcc/ada/a-stream.ads
! 46327e2ccd6167fbe36759a97125cf60  gcc/ada/a-strfix.adb
! 3e17bf5a5ad9722fd2605cad91ca4bef  gcc/ada/a-strfix.ads
! 10c24cde8a9e4171d8b0f3b6b17784d0  gcc/ada/a-string.ads
! 6e0805cce67d28670994a14202146066  gcc/ada/a-strmap.adb
! 9a7037668465e99b36eba56635901ab3  gcc/ada/a-strmap.ads
! 27da418ce48ecaad3a670894a8cffb13  gcc/ada/a-strsea.adb
! 5a2230e1129246b6e7cb29039ea194d8  gcc/ada/a-strsea.ads
! 70e0e57f1f0d99bed4fcfc461c59badc  gcc/ada/a-strsup.adb
! 4182bf06e9b26ce9e847442dedfe3bb5  gcc/ada/a-strsup.ads
! 1362cadca22d5a625f60fbed0c638fcf  gcc/ada/a-strunb.adb
! bd390f4506070e1fc694afa7e0f77dd2  gcc/ada/a-strunb.ads
  8e387348e59f8204847d867b7e29be12  gcc/ada/a-ststio.adb
! 38cfc62229c82907536ce71950d535b2  gcc/ada/a-ststio.ads
! 4bc732f15bfc6373f4a8464f95a0591a  gcc/ada/a-stunau.adb
! 650b23d8f50eb34ff0c098e768cb89fd  gcc/ada/a-stunau.ads
! 9e45f27fef30548ff332dd99b7384e44  gcc/ada/a-stwibo.adb
! 9d380f10a60306c30d8a643a18d78914  gcc/ada/a-stwibo.ads
! d48c15fe6627724b6a2b56bf20309233  gcc/ada/a-stwifi.adb
! e98458c82c9edd02f778c30cd444a654  gcc/ada/a-stwifi.ads
! da5d6c0c15a6e291a6e604816c37b124  gcc/ada/a-stwima.adb
! 6657703c7322655e2ead71c31e1af14b  gcc/ada/a-stwima.ads
! 648cb08a49e6830c6b4b0e958e126f3d  gcc/ada/a-stwise.adb
! 2be9f658119a5192b65e7bd49e49fb25  gcc/ada/a-stwise.ads
! ebd62da6e41620a16bd942285226b8c5  gcc/ada/a-stwisu.adb
! 1bb24d6d6ea0ac301a8699fbdc263886  gcc/ada/a-stwisu.ads
! 4f473d5b63a9a3a0af8f0036c3389691  gcc/ada/a-stwiun.adb
! beace3703963dc5f6c2220f96986fa56  gcc/ada/a-stwiun.ads
! 2218a87f3e8a9a35bf0920924232f2fe  gcc/ada/a-suteio.adb
! d0abf0dc25fa2def2f7a60535c3db37f  gcc/ada/a-suteio.ads
  9b9d30c6c0f40693553ae3339cf3dba5  gcc/ada/a-swmwco.ads
! 59f02e56d8f2d45ef999c1c70af4df1b  gcc/ada/a-swuwti.adb
! 22bc2b8bbdc59bd702f1b5363b508f78  gcc/ada/a-swuwti.ads
  5289ef66423b9b55708f013ac505fb33  gcc/ada/a-sytaco.adb
  8a997f8824061ceeeb0429b4002fd3e5  gcc/ada/a-sytaco.ads
! 0db3d82b1dc4aaa9c70c80d347a97d4c  gcc/ada/a-tags.adb
! f5105c88bbfcd17ede1d804044cc8fbc  gcc/ada/a-tags.ads
! 1ca478bd7dff5cfa90fd6df2f6bb1f3c  gcc/ada/a-tasatt.adb
  70d4cc13246726366b7f8746c775af59  gcc/ada/a-tasatt.ads
! 2bf62214a58931ba48d8bc93eedf3fb0  gcc/ada/a-taside.adb
! a436e70eef0ca8c86aca685d8c26a009  gcc/ada/a-taside.ads
  a3200ff21d43196b5742779c8e995ebd  gcc/ada/a-teioed.adb
  8ee0c5f78702022ad1a6b72c3a0c7630  gcc/ada/a-teioed.ads
! e6765dd9b653471e512760c1dbeff4db  gcc/ada/a-textio.adb
! 406e26599526b368c083b79467d8f060  gcc/ada/a-textio.ads
  5eb61ccbe7b55c7ea5939fb633128663  gcc/ada/a-ticoau.adb
  bc0fcaad5e2b7326f2caed842e9d2b62  gcc/ada/a-ticoau.ads
  3a9ecd3dcfdfa243d0ddb3cb9898e2d0  gcc/ada/a-ticoio.adb
--- 654,777 ----
  50b1ba3745800dfdd8d00e62b12377fc  gcc/ada/a-nuelfu.ads
  3eb293ba0b3b787e4072a05f1939206b  gcc/ada/a-nuflra.adb
  325c95376d7f37b75eab38f9aac1c721  gcc/ada/a-nuflra.ads
+ d16b5921608afb35f2172ca96d720c4f  gcc/ada/a-numaux-darwin.adb
+ 904a9c964c19b175408ed2f45ad90255  gcc/ada/a-numaux-darwin.ads
+ 63a497335d0c9fdfad1f15e71bad237b  gcc/ada/a-numaux-libc-x86.ads
+ cf16a5bb982594288c5aa23c108785e7  gcc/ada/a-numaux-vxworks.ads
+ f80076972a57891ab7dbfd9e838d1806  gcc/ada/a-numaux-x86.adb
+ 91664ab38ca6f4c19c784e6323ea6329  gcc/ada/a-numaux-x86.ads
  7f18ef259d143373117b8faff7d82125  gcc/ada/a-numaux.ads
! dfd369b1d0d48d46cc547992fec68e4b  gcc/ada/a-numeri.ads
! 7b28d9ad2b6e0573dcb50ec59fd5d921  gcc/ada/a-rbtgso.adb
! 87cc01fa7ddc304af91cd0d2c1f409c8  gcc/ada/a-rbtgso.ads
  ac34c0c15eca6dae77bdef0f7122d52a  gcc/ada/a-reatim.adb
  49bc47e54e742859e994649e8b8b5088  gcc/ada/a-reatim.ads
! 5bc4a23cc752bea489841b695223ee55  gcc/ada/a-retide.adb
  5d33ecd36e6fee4af8361344d20beee2  gcc/ada/a-retide.ads
+ 490db98902a45e3a263333b8a89bc429  gcc/ada/a-secain.adb
+ 030524652cf00cb4c6a7e1b21c30f08a  gcc/ada/a-secain.ads
  bc211489334965af5997fb5e65d4bbcd  gcc/ada/a-sequio.adb
! cbf46199f3b4b14081d574aaf8d05a12  gcc/ada/a-sequio.ads
  301d80a2ddaced89e220a194f6a98012  gcc/ada/a-sfteio.ads
  5a93d98750508294b13767b08fec10e0  gcc/ada/a-sfwtio.ads
+ eccac47597dc901536cea6224d99e0f5  gcc/ada/a-sfztio.ads
+ 9ea3205479055dd8bf5dd1c9f4b8da73  gcc/ada/a-shcain.adb
+ b85a193d3c45d13bcd274ab6ff58ae0f  gcc/ada/a-shcain.ads
  5d3599f38d627ca520ccfef01f8d85c9  gcc/ada/a-siocst.adb
  c8ead672a944a7fb1f4f2bebf8e95d16  gcc/ada/a-siocst.ads
  ba739e99cd723aae6d79579fba4d12b5  gcc/ada/a-siteio.ads
  a953d7a1dc198f5cc35786e98cb6a418  gcc/ada/a-siwtio.ads
+ 0ba858ade80be8f195b05d8e2b6b14eb  gcc/ada/a-siztio.ads
+ cf5640209f7ae7fe1547ca5ecb5b7916  gcc/ada/a-slcain.adb
+ 98f37234ec7748f760e3e95f0265d6a1  gcc/ada/a-slcain.ads
  07dc7d2712d0aa6cc06f4b322e06969b  gcc/ada/a-ssicst.adb
  f45f46f23aeb7be9c37f1ffee557a41e  gcc/ada/a-ssicst.ads
  8d64f7632f3f02f599d22d9c7565480b  gcc/ada/a-ssitio.ads
  bbb99001501fd721dbd8d8fdb80d09ee  gcc/ada/a-ssiwti.ads
! 6e8181f05bf5e1a57009b696f3798583  gcc/ada/a-ssizti.ads
! cdb823846f5dec74b7e4991186ab5894  gcc/ada/a-stmaco.ads
! ce829efb311b960f064d002520566082  gcc/ada/a-storio.adb
  b45e37576ae0407389ba7291607bdcc1  gcc/ada/a-storio.ads
! 4047b647ea96107c7593ea5dfb0cf5c2  gcc/ada/a-strbou.adb
! 043b4ab58ca6d24f3bf7cbd418ef856c  gcc/ada/a-strbou.ads
  0a6b88922a9b9bcc32543df284640a74  gcc/ada/a-stream.ads
! b80e992f3f8ef228dc111093780f0e47  gcc/ada/a-strfix.adb
! f4da445818092e6749b6790dab098df1  gcc/ada/a-strfix.ads
! edc88520d7ca83f568073f3d0f638ae6  gcc/ada/a-strhas.adb
! 2c856487790007425e441d64fea243db  gcc/ada/a-strhas.ads
! 702554c9d0e3b9b0b388e5a111d2f1b1  gcc/ada/a-string.ads
! 12b8901af87038a11d52a743d55a4f2b  gcc/ada/a-strmap.adb
! 08d045da4b663f0489764930d7832f91  gcc/ada/a-strmap.ads
! fd9967a4c0c3af2796c4adfe1c75e327  gcc/ada/a-strsea.adb
! e39aca970e30d06ebb04f6404d15e10f  gcc/ada/a-strsea.ads
! be2e45f4acc9031c4a843445173f7d33  gcc/ada/a-strsup.adb
! ef10c2970f76a45ab7e5a857de4aac89  gcc/ada/a-strsup.ads
! f7c8ed2ec5fc2e01c35544c97304aa76  gcc/ada/a-strunb.adb
! 6b4e2d269c024bf6c8011f4bbae11b0f  gcc/ada/a-strunb.ads
  8e387348e59f8204847d867b7e29be12  gcc/ada/a-ststio.adb
! 28203f30f5411525c686763299fd776d  gcc/ada/a-ststio.ads
! 2aeba1f56e12898f9f8280e012a684a1  gcc/ada/a-stunau.adb
! 360f244f5f68642d6190ead4a23b3940  gcc/ada/a-stunau.ads
! d34ac3a539207394d09f26b577c2f324  gcc/ada/a-stunha.adb
! ef82812d7a86c5f245da50ba8ef2248d  gcc/ada/a-stunha.ads
! ddd6e34b400c2f3bc3cca2b160ad5e4e  gcc/ada/a-stwibo.adb
! 42c82b762fcbd97f04b420753c3c8f5c  gcc/ada/a-stwibo.ads
! f515ed4f83c87b29fc8eb100e05c0203  gcc/ada/a-stwifi.adb
! 57bbedc7c186c4df5eb504670b9afd10  gcc/ada/a-stwifi.ads
! 15808df8cb376fa5c5738c04299eb0db  gcc/ada/a-stwiha.adb
! 0b40a0b560115f5899f4991e890d4641  gcc/ada/a-stwiha.ads
! 5771c721d77f49c1256e54800f202cf3  gcc/ada/a-stwima.adb
! 021533ecdae2359b72b451135bd833df  gcc/ada/a-stwima.ads
! f163c429e6a932c584e10690e47c0779  gcc/ada/a-stwise.adb
! f23879fb1eba4cc4fa3fa2631231810e  gcc/ada/a-stwise.ads
! 9d5fe4262a76c605f2482376ff43727a  gcc/ada/a-stwisu.adb
! a9236efddc206996b0e00ec1860da07a  gcc/ada/a-stwisu.ads
! d04521f85530b41e400bb53e1f40fa51  gcc/ada/a-stwiun.adb
! 11fbf9328668954241c87e21c37a63c4  gcc/ada/a-stwiun.ads
! 5ea5febd49f1435fb3528d141e495684  gcc/ada/a-stzbou.adb
! 3ec21c219c07e2cd50be39e2d34bd542  gcc/ada/a-stzbou.ads
! 9be14fad25376a377e516acbd346a653  gcc/ada/a-stzfix.adb
! c76883a8fb0a2ad6a1cfd80a36b8e9fa  gcc/ada/a-stzfix.ads
! 5482ab664eddfbfcb6199c7f2ca6044e  gcc/ada/a-stzhas.adb
! 3e96065e1a7fefdfabb4be1a8527f0de  gcc/ada/a-stzhas.ads
! 41aabcd5095ed78105499d4b7515fb81  gcc/ada/a-stzmap.adb
! 425128c75a5ce58230e36fd47476a564  gcc/ada/a-stzmap.ads
! d8925540123ec64039e900cc86d774e1  gcc/ada/a-stzsea.adb
! e5f02a6691a1f4e9768d177833d07de7  gcc/ada/a-stzsea.ads
! aecfb8f9801b8457ecb61b234a3527ef  gcc/ada/a-stzsup.adb
! 569a75f883362921c1d8169f262204a8  gcc/ada/a-stzsup.ads
! 0bfdb589f5cc91e3b7c5910dd31883ad  gcc/ada/a-stzunb.adb
! af7f0d19d346a63e0c13ebfa5673d289  gcc/ada/a-stzunb.ads
! c190718cb43851ef1ad28bb4a5b9f881  gcc/ada/a-suteio.adb
! ae49660758d084ffcbe4c72462c0c8e9  gcc/ada/a-suteio.ads
  9b9d30c6c0f40693553ae3339cf3dba5  gcc/ada/a-swmwco.ads
! 418424a3fb59e3bd86e4703a8eb070ef  gcc/ada/a-swunau.adb
! c2a109ecb1075ab8b3aa5868edbb2c0d  gcc/ada/a-swunau.ads
! 7f4c73cd0208f045d88ee91589398f14  gcc/ada/a-swunha.adb
! 28e4e6759d7855d06a4b18fb59ca9f03  gcc/ada/a-swunha.ads
! 336fc4550c6f2542cb475fa84ed747ac  gcc/ada/a-swuwti.adb
! a5f365fb8a5a045042ceb2dba2801864  gcc/ada/a-swuwti.ads
! d489ebc84c98518c06343ce16dc4ca72  gcc/ada/a-sytaco-vxworks.adb
! 888f4475b715182f894384952eba1658  gcc/ada/a-sytaco-vxworks.ads
  5289ef66423b9b55708f013ac505fb33  gcc/ada/a-sytaco.adb
  8a997f8824061ceeeb0429b4002fd3e5  gcc/ada/a-sytaco.ads
! 934efc601e5beab71c3f8be2c45aa457  gcc/ada/a-szmzco.ads
! fb45353a8344ebccf789b264beca221c  gcc/ada/a-szunau.adb
! cd15c732f12e54b53030db9f68afc825  gcc/ada/a-szunau.ads
! fbb64d603b6cc8d9bdedc4f7540ad12d  gcc/ada/a-szunha.adb
! 612305d874eafba24ef10863963bdac7  gcc/ada/a-szunha.ads
! c1f9120567a23eebf859478fbdb37cf1  gcc/ada/a-szuzti.adb
! af1063458d645d8b2b7bd780bfabead3  gcc/ada/a-szuzti.ads
! 493aed74c9096621c12f72c0b706f708  gcc/ada/a-tags.adb
! 5e79319b6d31b0d015334e06fa0dd8c8  gcc/ada/a-tags.ads
! 01a16bf49962cdb2482e6ec1081f404e  gcc/ada/a-tasatt.adb
  70d4cc13246726366b7f8746c775af59  gcc/ada/a-tasatt.ads
! 79f6c26df8f74cdba3e654651eb3eaf8  gcc/ada/a-taside.adb
! aaae5dd4271754bde245dda5b6584f0e  gcc/ada/a-taside.ads
  a3200ff21d43196b5742779c8e995ebd  gcc/ada/a-teioed.adb
  8ee0c5f78702022ad1a6b72c3a0c7630  gcc/ada/a-teioed.ads
! 79e56622c21639dc2c921a2fd1ae0f8e  gcc/ada/a-textio.adb
! 7b4796de450042b2520c03332d588399  gcc/ada/a-textio.ads
  5eb61ccbe7b55c7ea5939fb633128663  gcc/ada/a-ticoau.adb
  bc0fcaad5e2b7326f2caed842e9d2b62  gcc/ada/a-ticoau.ads
  3a9ecd3dcfdfa243d0ddb3cb9898e2d0  gcc/ada/a-ticoio.adb
*************** a1647641bf250258e971ec02fcfe12c6  gcc/ad
*** 742,748 ****
  b59c9187aaf51b211be5b90ddac5ac1a  gcc/ada/a-tienau.ads
  85beb38e06368c5e7c8ac69c0e7fb3e4  gcc/ada/a-tienio.adb
  c8920f0f50ca0446466db1cb60c8defd  gcc/ada/a-tienio.ads
! b40dcc61d44e91d7f19e98995ae51acf  gcc/ada/a-tifiio.adb
  2de70cfb2921e55e89f049a90377b530  gcc/ada/a-tifiio.ads
  a5cea1082f68816a62631c7c7de75a02  gcc/ada/a-tiflau.adb
  39cb911a5fd3a17a4cd0d813d48264f6  gcc/ada/a-tiflau.ads
--- 784,790 ----
  b59c9187aaf51b211be5b90ddac5ac1a  gcc/ada/a-tienau.ads
  85beb38e06368c5e7c8ac69c0e7fb3e4  gcc/ada/a-tienio.adb
  c8920f0f50ca0446466db1cb60c8defd  gcc/ada/a-tienio.ads
! 33a3b11217ab1ed28ba381f9f373b21f  gcc/ada/a-tifiio.adb
  2de70cfb2921e55e89f049a90377b530  gcc/ada/a-tifiio.ads
  a5cea1082f68816a62631c7c7de75a02  gcc/ada/a-tiflau.adb
  39cb911a5fd3a17a4cd0d813d48264f6  gcc/ada/a-tiflau.ads
*************** d6ade58608d9a8c626affafd7e9a9daf  gcc/ad
*** 762,783 ****
  6c586c14e495b79ae8ad04544beb8f6e  gcc/ada/a-tiocst.ads
  03b1faece03f4b50839575a471c5cfa3  gcc/ada/a-titest.adb
  42e6cc181186f86c2e1ea89baa9452a3  gcc/ada/a-titest.ads
  89ad58452dbd76e8d0ebf6b332075ff6  gcc/ada/a-unccon.ads
  71408140aa85fc1937989b30a435ea8d  gcc/ada/a-uncdea.ads
! e470931454b9f17bc0512f6297c6f2a2  gcc/ada/a-witeio.adb
! 1a4325d1a18f3ba11a9c8cc069bf5f33  gcc/ada/a-witeio.ads
! 17c4d2b7fa6ac644d7f36cab442458c4  gcc/ada/a-wtcoau.adb
! 5139250fefaf39be1ca583f9f58ca8b5  gcc/ada/a-wtcoau.ads
! 71e91467b839292d86eb2c9ced24ddd6  gcc/ada/a-wtcoio.adb
! 9ed9076d854793cdc4653f39076db33a  gcc/ada/a-wtcoio.ads
  32fd68c775fc0aff5c5bbfcb7a322066  gcc/ada/a-wtcstr.adb
  46fbf38038608dd16ebcb6233189249c  gcc/ada/a-wtcstr.ads
  7074b5626b50c9e928872a6f8efe7d30  gcc/ada/a-wtdeau.adb
  aa05ca8f5ed066b6f6a51eb8eb47fe3e  gcc/ada/a-wtdeau.ads
  6f46121b1cb2200e38cd6e168dbbfa02  gcc/ada/a-wtdeio.adb
  bd08155b0156e595a2e2654bf0410295  gcc/ada/a-wtdeio.ads
! 8cd34beb8f82bc4b53ed9facefd0d4b7  gcc/ada/a-wtedit.adb
! 545a837bdd79713aaf2750224e2b4ee4  gcc/ada/a-wtedit.ads
  be75fa5871ee8810db9a421389eab7e4  gcc/ada/a-wtenau.adb
  81261d9d2b45f65bc0c4a60f24cacd55  gcc/ada/a-wtenau.ads
  88c5ba8074e42c3c17545d3d55c60f8d  gcc/ada/a-wtenio.adb
--- 804,826 ----
  6c586c14e495b79ae8ad04544beb8f6e  gcc/ada/a-tiocst.ads
  03b1faece03f4b50839575a471c5cfa3  gcc/ada/a-titest.adb
  42e6cc181186f86c2e1ea89baa9452a3  gcc/ada/a-titest.ads
+ 056f8ffdd0277e40365d9a344e2258ed  gcc/ada/a-tiunio.ads
  89ad58452dbd76e8d0ebf6b332075ff6  gcc/ada/a-unccon.ads
  71408140aa85fc1937989b30a435ea8d  gcc/ada/a-uncdea.ads
! 4643128e041bc008ec4cce9fa1396d7c  gcc/ada/a-witeio.adb
! 6143d0a05fd30e296e59cedc3eff0b3c  gcc/ada/a-witeio.ads
! f76a7b10c2ac65a86c156347057c60da  gcc/ada/a-wtcoau.adb
! 9cacad8c2d1f22b132d6c51371423d2b  gcc/ada/a-wtcoau.ads
! 3eb2495056c0d780e19933221361ddc0  gcc/ada/a-wtcoio.adb
! 1aee341755b4fc6a0d0660c5488d13a7  gcc/ada/a-wtcoio.ads
  32fd68c775fc0aff5c5bbfcb7a322066  gcc/ada/a-wtcstr.adb
  46fbf38038608dd16ebcb6233189249c  gcc/ada/a-wtcstr.ads
  7074b5626b50c9e928872a6f8efe7d30  gcc/ada/a-wtdeau.adb
  aa05ca8f5ed066b6f6a51eb8eb47fe3e  gcc/ada/a-wtdeau.ads
  6f46121b1cb2200e38cd6e168dbbfa02  gcc/ada/a-wtdeio.adb
  bd08155b0156e595a2e2654bf0410295  gcc/ada/a-wtdeio.ads
! 4fe6ff5ec6287be02f344898bfcefe34  gcc/ada/a-wtedit.adb
! 05a877da6470274141f15381d0be1e5c  gcc/ada/a-wtedit.ads
  be75fa5871ee8810db9a421389eab7e4  gcc/ada/a-wtenau.adb
  81261d9d2b45f65bc0c4a60f24cacd55  gcc/ada/a-wtenau.ads
  88c5ba8074e42c3c17545d3d55c60f8d  gcc/ada/a-wtenio.adb
*************** d94d07225c25a726f76635d65ed7088d  gcc/ad
*** 797,959 ****
  bbf41e6b7ded3a8115ec58b134f09283  gcc/ada/a-wtmoau.adb
  4f82b6ec3eeb6eb830cb35d62fcdbf04  gcc/ada/a-wtmoau.ads
  029aa1f06f02bbfb1552955824cefd92  gcc/ada/a-wtmoio.adb
! 043c3e8d856dd917c91e5e28472b4289  gcc/ada/a-wtmoio.ads
! 8b5634828253a1738c9a61bf77ead7eb  gcc/ada/a-wttest.adb
! e505effc3dfef0ee912d31a6e0dd3d35  gcc/ada/a-wttest.ads
! d3bb20d2fe402192ff1422bc92cbfe3b  gcc/ada/ada-tree.def
! 8c16427ce6ce33aa99094b86482fb371  gcc/ada/ada-tree.h
  cdb727a71e17034713b5ee012104324f  gcc/ada/ada.ads
  29d99ebb31291a3962ae7b6af0439559  gcc/ada/ada.h
  7109c469de813737cbccc967e9c3c501  gcc/ada/adadecode.c
  70e8e2f0414a677053c48523cf7d9e89  gcc/ada/adadecode.h
! 378c72520d34da698f465cc49f335643  gcc/ada/adaint.c
! 80cf2b5eef0770d6eb375d67da5030d4  gcc/ada/adaint.h
! 7b3602315a643d2dc54382c33068da55  gcc/ada/ali-util.adb
  1ab8f1c0a513ab99de28c014f9f19e36  gcc/ada/ali-util.ads
! 28447303864f32c524a5087291fe4a43  gcc/ada/ali.adb
! df9740aac87d2c5ad510eb1452b9e2ad  gcc/ada/ali.ads
  920a323feb9eb1711eaf500570106b77  gcc/ada/alloc.ads
  622785eb2e80c5bd835ed1bdc017a603  gcc/ada/argv.c
! da5498e03867f3aab8b93885dbb33b02  gcc/ada/atree.adb
! 892fb769ec4dd78a96609219b3ad1934  gcc/ada/atree.ads
! 0cf9c01e426bd0ecc1c9379e855a0a3f  gcc/ada/atree.h
  ff413fbb009f21a57d3a62472b0e487d  gcc/ada/aux-io.c
! 3c6c3c3660872f6105e625afba8653a8  gcc/ada/back_end.adb
  aa9f2285593a43bbe294a87c4c3bde4a  gcc/ada/back_end.ads
! ddb9e794777f959857ce33010e39f699  gcc/ada/bcheck.adb
  09aca8f2e6000cbca628802e9a54ce0d  gcc/ada/bcheck.ads
! 8722faec5f6da01d727d24735214aad1  gcc/ada/binde.adb
  bcf86e73ab618d4cf59eaa8adf42d7ee  gcc/ada/binde.ads
  b76aa5e8acf784c396bc4b2c23a43c13  gcc/ada/binderr.adb
  ce70df92bb5d0d1130e6c886e1ec82e0  gcc/ada/binderr.ads
! 7ee142dc3d2b5dd84a125efe4d0002b5  gcc/ada/bindgen.adb
! 8f9a6a33b66c706aae7e1ca763fad0aa  gcc/ada/bindgen.ads
! 538c5c85355bc4a5e07c1135409ae4c8  gcc/ada/bindusg.adb
  51dde0535709bf7f77b78ebf82f35fcc  gcc/ada/bindusg.ads
! cc5665fca180103a5f794b7c38c27de0  gcc/ada/bld-io.adb
! 3e6c360b8b23b3d1c39d1899053302c7  gcc/ada/bld-io.ads
! 853fb14f29dd678029cef25c96c87411  gcc/ada/bld.adb
! c6b37b276494e1a9ab17f1447c04724f  gcc/ada/bld.ads
! 6dc6908dae17da300368725b2a402174  gcc/ada/butil.adb
! 71d3addd1a8b0c12ab7d9212ab17e6d5  gcc/ada/butil.ads
  ca82fa8ce91681333083cdc79926133f  gcc/ada/cal.c
  4621b575af346085dfdb51313555b403  gcc/ada/calendar.ads
  0211df1d9a09469caa12d14d2d9e3754  gcc/ada/casing.adb
  68a906d68421040ef70674a903d95cc9  gcc/ada/casing.ads
  51a2f59e11bb6db1ea2c5d6fb4aa2f11  gcc/ada/ceinfo.adb
! 79c3ff5c324fe100229f0c8a61ab88d1  gcc/ada/checks.adb
! 0de5e06cc85023b54bd938869a85b634  gcc/ada/checks.ads
  302ccb5a723a9b9b6bd7943c96d68413  gcc/ada/cio.c
! 8536616f98a5e7233e2af0be10d81388  gcc/ada/clean.adb
  8d557cb95b0e60b37916ab7bfad74207  gcc/ada/clean.ads
! e6e0e7b5a8c4368068626f444a640ea6  gcc/ada/comperr.adb
  639cb8a9a3564282764866d590817926  gcc/ada/comperr.ads
! ba714dccd2b563235e2affb663b02f1e  gcc/ada/config-lang.in
! 7834475b88f3ad6addbb2bc0341c419f  gcc/ada/csets.adb
! a3ab2d0bf916e552b6a5427812e8be1c  gcc/ada/csets.ads
  c0e0a530e321634ba7a4527d750125bc  gcc/ada/csinfo.adb
! 72bfcd7370f23461cb69820d202edbb9  gcc/ada/cstand.adb
  d9cddf4a2e2ff47f5f96a4e8641678a9  gcc/ada/cstand.ads
  fd5541aedc6eaf48bed3457e3fdaeabc  gcc/ada/cstreams.c
  168f7201af8f40302de373398d45ca0d  gcc/ada/ctrl_c.c
! 1b76e9eae63cd81e83b48a54396c185d  gcc/ada/cuintp.c
! 6afaa8c56f6bfeaa547d143bfa9aa479  gcc/ada/debug.adb
  42924ba1f6ffe7947a7b110a7f8daf13  gcc/ada/debug.ads
  b28154ecd49bc23560efa2bf745aea27  gcc/ada/debug_a.adb
  9650fce2a828351bc1fc963795d4ebde  gcc/ada/debug_a.ads
  2f7494e11e51603bc6206f722cabef36  gcc/ada/dec-io.adb
  a85ab4f0bf6b03fa5b377c44c1f33fff  gcc/ada/dec-io.ads
  cbb5a74df9a450ab79f0bc8984d91568  gcc/ada/dec.ads
! a70234baabf1f61bf1619a17ca325712  gcc/ada/decl.c
  cc22a770e9d7a22caa17d3de508b48b4  gcc/ada/deftarg.c
  bc974e6405268b5fbc198416bb4f00d6  gcc/ada/directio.ads
! 8036d428943cc0dad4f3e1faefc2c6ea  gcc/ada/einfo.adb
! e498a3e8d8a535dbbd87bc5fcfe1cc89  gcc/ada/einfo.ads
! 5a36bee5d8e5bb99a69eff6ae561b4d9  gcc/ada/elists.adb
! 7c89f56d1fbc111212f9ba3fea4f022f  gcc/ada/elists.ads
  a88a79c40a3c279cb52aae091a9f37a3  gcc/ada/elists.h
  80e5a22fd78c8cd8c59e59580f282e79  gcc/ada/err_vars.ads
! 0c64502603399f54b64f9f7b80cff5e7  gcc/ada/errno.c
! ec32738088fcfa343d90bbd1eb247e5a  gcc/ada/errout.adb
! a7be2899abd084edb693f2368c8aff22  gcc/ada/errout.ads
! 6b82d65bd61b87f77ab626e67542aa46  gcc/ada/erroutc.adb
! bc6263e85fbd69633ab4f9d9baa67dbf  gcc/ada/erroutc.ads
  308ca0faac942f03e9bb64dca72bee2d  gcc/ada/errutil.adb
  68551af0552ea6d1e1bc493aa28ff35c  gcc/ada/errutil.ads
! 7a43131c495b63768df1132a01d448f1  gcc/ada/eval_fat.adb
! 04e8e28480bb6f808e7d7b7c5e8db5dd  gcc/ada/eval_fat.ads
  c6e55b109e0bc402cc284fd5c6ab21d8  gcc/ada/exit.c
! f3c3414ec5f5862dd3921961f5abfa01  gcc/ada/exp_aggr.adb
  5bb29eedba7e4edb1cc9af2d3a7d7fae  gcc/ada/exp_aggr.ads
! 0c2964fb0e6568f43fd81accfa132850  gcc/ada/exp_attr.adb
! 7f925d248ba7551bf4ad438afd461bc5  gcc/ada/exp_attr.ads
  abacd731e7c039849f3fa47eab6c2e87  gcc/ada/exp_ch10.ads
! dbc02fdeceb86b820ba602d9a8e200b2  gcc/ada/exp_ch11.adb
  a53bb77c8a063a2c52e25c620649d4f9  gcc/ada/exp_ch11.ads
  574582b239737fe8b66bbf45f191534c  gcc/ada/exp_ch12.adb
  d13de997e0d5b839b30984d93335d6db  gcc/ada/exp_ch12.ads
! f98f2dc5c20e1ae763209d67627d0a4d  gcc/ada/exp_ch13.adb
  9f51344f531f36d91574edb9755bc541  gcc/ada/exp_ch13.ads
! 4bdf25ca672df26f554c13e1c0ec9331  gcc/ada/exp_ch2.adb
  6c4b32cd5d1fbac1afbb5d9bb10fc182  gcc/ada/exp_ch2.ads
! f23d79071716a8c10bf52fd8d2d78c5a  gcc/ada/exp_ch3.adb
! 8b6d906a480289b1e7d66018cb3949e3  gcc/ada/exp_ch3.ads
! 0736e72e62d998dbd3f01b883eae5e0a  gcc/ada/exp_ch4.adb
  fc48a441f2b45a7154b30fd65fe043df  gcc/ada/exp_ch4.ads
! e40fd08b0334d96cf2f6a76aba570c73  gcc/ada/exp_ch5.adb
  67a7ce029d83258cb7212f6e777c4c0c  gcc/ada/exp_ch5.ads
! 854fc2fdba1e6bc83f8fd23eb4c76013  gcc/ada/exp_ch6.adb
  8431020d2dfb16ce3293690428fbb310  gcc/ada/exp_ch6.ads
! 47454364a4e35a7b515e8290fa649634  gcc/ada/exp_ch7.adb
! 1c3b493d8339c4e933be608db28224fe  gcc/ada/exp_ch7.ads
! df293722a03618c1b09a3c119fb76a3c  gcc/ada/exp_ch8.adb
  1d34d3cba4d7683505cbff2f541c2c01  gcc/ada/exp_ch8.ads
! fff1a1eae20cf6c445b240627ec13c01  gcc/ada/exp_ch9.adb
! 85eefb205f0dd534eaf306c27d6ced08  gcc/ada/exp_ch9.ads
! 26b5b341a7a190c1a38594b58b107767  gcc/ada/exp_code.adb
  6ce550c3698d232a231b9841094c9c03  gcc/ada/exp_code.ads
! 11db4852ebbfb680d89fd52498b62373  gcc/ada/exp_dbug.adb
! 4b6dc3be4c8c120a5022c93602059d1b  gcc/ada/exp_dbug.ads
! aaf99a833a60391f91bc06b9233deb8b  gcc/ada/exp_disp.adb
! 3c3f9dbff65f34504aa875c56496e02b  gcc/ada/exp_disp.ads
! 63d64ba4eb4f5e597fec276d390fbce7  gcc/ada/exp_dist.adb
! 0580663a8ea756ead452437d113ab3c0  gcc/ada/exp_dist.ads
! ba393cfe7df512775991e6c72212b7d1  gcc/ada/exp_fixd.adb
  b3d4f22b44404e0037bc1900835f5adf  gcc/ada/exp_fixd.ads
! ad25124b58b50bec7f4b1e75c27cdefd  gcc/ada/exp_imgv.adb
! d6b31ed1052ff575e975889ec206c592  gcc/ada/exp_imgv.ads
! 2fa6e829d6b244c2770dde9f3f043d79  gcc/ada/exp_intr.adb
  b0b5f49f75fa73ee2629fe0c2d072ea5  gcc/ada/exp_intr.ads
! c0149ac9cb291e087af006cfa9e70edf  gcc/ada/exp_pakd.adb
! 43ddb5008695a3dbd0faf089d9b8f8a1  gcc/ada/exp_pakd.ads
! 368e3643a73a07cd3c32a6a60809c39c  gcc/ada/exp_prag.adb
  449a8530a2d3f3b10457ac21933142f6  gcc/ada/exp_prag.ads
  9a8bf9ce0e267237e822fc42cd2cd11d  gcc/ada/exp_smem.adb
  927b96b673008fb0fe69f5bf11a89e9c  gcc/ada/exp_smem.ads
! 80f209476fc2c30bb52338a56a954f06  gcc/ada/exp_strm.adb
  7fbe0383ff78bb54dc070c5dc4a59995  gcc/ada/exp_strm.ads
  37488da513b4887feae0410e3b7fcc15  gcc/ada/exp_tss.adb
! 54748d314f102eb7cffb5683b8795135  gcc/ada/exp_tss.ads
! c4234a3d088c5c3c11526751446cd808  gcc/ada/exp_util.adb
! a194f63eac05b8c94d74ee54458a21f0  gcc/ada/exp_util.ads
  6a0599fecdbf8a4e685cdfc859be3e7b  gcc/ada/exp_vfpt.adb
  1e58265a39ce9df197a17d01d862fce1  gcc/ada/exp_vfpt.ads
  c5944caf9e22dacaf6bdfd29c92865ec  gcc/ada/expander.adb
  46cbd21047fe0ca4cc5e8f5ef554f75a  gcc/ada/expander.ads
! 37425312536ecd30662759e43826ce50  gcc/ada/expect.c
! 1a17a59a74135c3ff96b45b9e02959e5  gcc/ada/fe.h
  754231188f0384ef7266d82fe90a1014  gcc/ada/final.c
  dedc244a1b1003f569be9616b24f756a  gcc/ada/fmap.adb
  241da0229e83fe59386975b26908b713  gcc/ada/fmap.ads
! 2b7776e9bd1816457f56af9c18400b15  gcc/ada/fname-sf.adb
  59252f62eaae50888239981cb2a94acc  gcc/ada/fname-sf.ads
! d5e053bec6aed6195131a7180f032fb6  gcc/ada/fname-uf.adb
! f8a6939839065b46b8acedd5319bb446  gcc/ada/fname-uf.ads
! f4e4a507639ec55333e253546340c36a  gcc/ada/fname.adb
! 0242494c4944e016b53f466b00c2b76d  gcc/ada/fname.ads
! 3edf063287a9f077845f995a123bbf24  gcc/ada/freeze.adb
  3b5d9243ef2055fb7939a62de459fed2  gcc/ada/freeze.ads
! 366b1abe66aabfbdd8ff054f50282a0d  gcc/ada/frontend.adb
  1c3ab9a755577c47213e62837fdbd2d2  gcc/ada/frontend.ads
  c01e3f7560c9f7b9aa081a371b2fd09b  gcc/ada/g-arrspl.adb
  245494d280a78c02f41e7a7ef6539e49  gcc/ada/g-arrspl.ads
--- 840,1036 ----
  bbf41e6b7ded3a8115ec58b134f09283  gcc/ada/a-wtmoau.adb
  4f82b6ec3eeb6eb830cb35d62fcdbf04  gcc/ada/a-wtmoau.ads
  029aa1f06f02bbfb1552955824cefd92  gcc/ada/a-wtmoio.adb
! 7f29d067121d4e88620367d4edd47e6e  gcc/ada/a-wtmoio.ads
! ecc07bfc09a461049cab30ddf7c80a0c  gcc/ada/a-wttest.adb
! 87c656866c6078e0ed035831e2bc8a67  gcc/ada/a-wttest.ads
! e2f0f8a464d34a266586cbdafd66452f  gcc/ada/a-wwunio.ads
! 7001341f1df81b159616660827d7bde8  gcc/ada/a-ztcoau.adb
! 4bdb9a32e220ed83c422e1363956122c  gcc/ada/a-ztcoau.ads
! cda4187349c948c3f24c7ea06d886b0c  gcc/ada/a-ztcoio.adb
! ce424dfa209cd67cf1de0d658f9b9cbb  gcc/ada/a-ztcoio.ads
! 69422fc58b07752c10b752ce17a497ca  gcc/ada/a-ztcstr.adb
! 5aae519d9c426496a8cf9d3da3136718  gcc/ada/a-ztcstr.ads
! e61cfe9d9f1dd6aa6d94581fcc6ffa5c  gcc/ada/a-ztdeau.adb
! adf41ae2f9cb3fa3b3f0d11f54374a84  gcc/ada/a-ztdeau.ads
! b2e93b94ee76db2cfe27052bb0cfcbf2  gcc/ada/a-ztdeio.adb
! bfb363898de0d4feda55e7a65a4b5e97  gcc/ada/a-ztdeio.ads
! b98c8bfe7620425613a679349ba906bc  gcc/ada/a-ztedit.adb
! dbc1be7e66837b87f0e04b55ce06d291  gcc/ada/a-ztedit.ads
! 8af5b0597f99e3ad2ff2825d51f712b0  gcc/ada/a-ztenau.adb
! 17a5db0b4a7b27b7b3f136f1f624052f  gcc/ada/a-ztenau.ads
! db3f14edaff925f448905b109a48f81c  gcc/ada/a-ztenio.adb
! ef35fac97ac2226160bddf6b9af4c2e3  gcc/ada/a-ztenio.ads
! 2cfb823dd9dc940f008e3d047aaae1b3  gcc/ada/a-ztexio.adb
! c5a4eafcea89d4b019d65439a05b88b5  gcc/ada/a-ztexio.ads
! fd3daa88b14493ba74fad0f8c69898cd  gcc/ada/a-ztfiio.adb
! 7e28bc72a1465598234e2e653eb313d9  gcc/ada/a-ztfiio.ads
! a43f0ba65fc4a5001347c3ca013841df  gcc/ada/a-ztflau.adb
! d65fb489f1eb31ada5af8f7d85d7f705  gcc/ada/a-ztflau.ads
! 1f4db6d2ad540b2d3b8bc76a551bc526  gcc/ada/a-ztflio.adb
! a72b0aa76e6c20e50ee6154268adc26e  gcc/ada/a-ztflio.ads
! 5ff04b9cc2b31c169f27be0c44986be5  gcc/ada/a-ztgeau.adb
! cda056e7f0c64ab3d845859d8ebd049c  gcc/ada/a-ztgeau.ads
! 08ddf7fe3832ab0cc63cffd946c2d229  gcc/ada/a-ztinau.adb
! d7853891a14c7c6fd4d1b4f74bee4d38  gcc/ada/a-ztinau.ads
! ab8a0906a0d95055ec4f1e9fb876ea8d  gcc/ada/a-ztinio.adb
! 71c6de9461df5c21db07162560b3aac2  gcc/ada/a-ztinio.ads
! 721cdc07ad420b636c0fb1eaef724a92  gcc/ada/a-ztmoau.adb
! 3e494d74150d553aa58c56da1725fc37  gcc/ada/a-ztmoau.ads
! a7ab1d17eca6ddd9dac39c251515d446  gcc/ada/a-ztmoio.adb
! d00a906fe1144f6857b8621c89b557fd  gcc/ada/a-ztmoio.ads
! 0fc3c9c55c4a8e8a1c3eacdf5edf0418  gcc/ada/a-zttest.adb
! 474701469a874933077102106ba112c5  gcc/ada/a-zttest.ads
! 9c0f48f869b03aa97fc685c77a8aa9db  gcc/ada/a-zzunio.ads
! afc6422a8bd285201aa828979f21c586  gcc/ada/ada-tree.def
! df82507e6d1f3cedb92890c5e49eb7b7  gcc/ada/ada-tree.h
  cdb727a71e17034713b5ee012104324f  gcc/ada/ada.ads
  29d99ebb31291a3962ae7b6af0439559  gcc/ada/ada.h
  7109c469de813737cbccc967e9c3c501  gcc/ada/adadecode.c
  70e8e2f0414a677053c48523cf7d9e89  gcc/ada/adadecode.h
! cf3ad7b5a2edd667c035dada6985e3ba  gcc/ada/adaint.c
! 18907d993da032db81d851c36c1c8b94  gcc/ada/adaint.h
! 57bb28ebbef469c5684e1c14b2a10e7b  gcc/ada/ali-util.adb
  1ab8f1c0a513ab99de28c014f9f19e36  gcc/ada/ali-util.ads
! 69e202ebfc8513cb44a9fc1b4d2181d2  gcc/ada/ali.adb
! c4b69391bbd57715d4c2a52b2c8a0481  gcc/ada/ali.ads
  920a323feb9eb1711eaf500570106b77  gcc/ada/alloc.ads
  622785eb2e80c5bd835ed1bdc017a603  gcc/ada/argv.c
! f4e087a48052e699b823b4bca3975286  gcc/ada/atree.adb
! 638a39fadb85999c1f288cacd953ebf8  gcc/ada/atree.ads
! 03546cbeee451fb70a3d56ca0cc28cd0  gcc/ada/atree.h
  ff413fbb009f21a57d3a62472b0e487d  gcc/ada/aux-io.c
! 997d5b4fd67bddeb1741028dba8ca499  gcc/ada/back_end.adb
  aa9f2285593a43bbe294a87c4c3bde4a  gcc/ada/back_end.ads
! 33ef23f4b72df09db7df8264bf3faae6  gcc/ada/bcheck.adb
  09aca8f2e6000cbca628802e9a54ce0d  gcc/ada/bcheck.ads
! a03bb83cfc8e2429af6edba43b060c4e  gcc/ada/binde.adb
  bcf86e73ab618d4cf59eaa8adf42d7ee  gcc/ada/binde.ads
  b76aa5e8acf784c396bc4b2c23a43c13  gcc/ada/binderr.adb
  ce70df92bb5d0d1130e6c886e1ec82e0  gcc/ada/binderr.ads
! caa51b96d9040d428c7d743119285b90  gcc/ada/bindgen.adb
! 4e10cf2f3efa26eac246d739c54e9009  gcc/ada/bindgen.ads
! 813d47ab764332d16bd0f6f0cc67ec80  gcc/ada/bindusg.adb
  51dde0535709bf7f77b78ebf82f35fcc  gcc/ada/bindusg.ads
! 6423dd413d0819953d58b9b21ec393ef  gcc/ada/butil.adb
! 2b55b2c6e6aca42200cd03fcb9533cea  gcc/ada/butil.ads
  ca82fa8ce91681333083cdc79926133f  gcc/ada/cal.c
  4621b575af346085dfdb51313555b403  gcc/ada/calendar.ads
  0211df1d9a09469caa12d14d2d9e3754  gcc/ada/casing.adb
  68a906d68421040ef70674a903d95cc9  gcc/ada/casing.ads
  51a2f59e11bb6db1ea2c5d6fb4aa2f11  gcc/ada/ceinfo.adb
! 7941a1124e9c663056985c5c282ae7a1  gcc/ada/checks.adb
! cdd338b84893aad9f2410a98f25ca826  gcc/ada/checks.ads
  302ccb5a723a9b9b6bd7943c96d68413  gcc/ada/cio.c
! 731f6b84b8b248ca009dc15fefe31898  gcc/ada/clean.adb
  8d557cb95b0e60b37916ab7bfad74207  gcc/ada/clean.ads
! e42e5e3d7f4bfa57f63c2082c69ddc36  gcc/ada/comperr.adb
  639cb8a9a3564282764866d590817926  gcc/ada/comperr.ads
! ee950674cffc0767837850c0dc63b76d  gcc/ada/config-lang.in
! 091803b2cc75f5bb3216904a866cc7b4  gcc/ada/csets.adb
! 7d3d933497e495d6cf729cc3c6e36558  gcc/ada/csets.ads
  c0e0a530e321634ba7a4527d750125bc  gcc/ada/csinfo.adb
! e6a8c7bc3db1133ef037916fe6f90fd1  gcc/ada/cstand.adb
  d9cddf4a2e2ff47f5f96a4e8641678a9  gcc/ada/cstand.ads
  fd5541aedc6eaf48bed3457e3fdaeabc  gcc/ada/cstreams.c
  168f7201af8f40302de373398d45ca0d  gcc/ada/ctrl_c.c
! 1bd4d9b1c67ddb3c5a618a278e997525  gcc/ada/cuintp.c
! 241ae5186f4c5c4862475a1f41d8da23  gcc/ada/debug.adb
  42924ba1f6ffe7947a7b110a7f8daf13  gcc/ada/debug.ads
  b28154ecd49bc23560efa2bf745aea27  gcc/ada/debug_a.adb
  9650fce2a828351bc1fc963795d4ebde  gcc/ada/debug_a.ads
  2f7494e11e51603bc6206f722cabef36  gcc/ada/dec-io.adb
  a85ab4f0bf6b03fa5b377c44c1f33fff  gcc/ada/dec-io.ads
  cbb5a74df9a450ab79f0bc8984d91568  gcc/ada/dec.ads
! c7ba4cf6bef1614385f9dd3ee76678f4  gcc/ada/decl.c
  cc22a770e9d7a22caa17d3de508b48b4  gcc/ada/deftarg.c
  bc974e6405268b5fbc198416bb4f00d6  gcc/ada/directio.ads
! 5f1de5a1ff05a2e085b232fa2ef2c83c  gcc/ada/einfo.adb
! 8c2887cd229e239d4fe0470be3462768  gcc/ada/einfo.ads
! 5e4aa4fe11b10a843be3134de20cee91  gcc/ada/elists.adb
! 7575b2735c8ba071f08bf02f4bd55b05  gcc/ada/elists.ads
  a88a79c40a3c279cb52aae091a9f37a3  gcc/ada/elists.h
  80e5a22fd78c8cd8c59e59580f282e79  gcc/ada/err_vars.ads
! 5bdd7dc0c358cbf0ee4d662309a011bc  gcc/ada/errno.c
! 9d4279262d5c7d243da7a76a128ac8f2  gcc/ada/errout.adb
! b7dcd14e26fada682beb299acc45fcb7  gcc/ada/errout.ads
! 75ba72f26372c0bdfe7ceffee39bb316  gcc/ada/erroutc.adb
! 64d6a1f4f661502be87c033710aa41e0  gcc/ada/erroutc.ads
  308ca0faac942f03e9bb64dca72bee2d  gcc/ada/errutil.adb
  68551af0552ea6d1e1bc493aa28ff35c  gcc/ada/errutil.ads
! e50beda145d81c797703f715fffa2bfd  gcc/ada/eval_fat.adb
! 1ab27ac028c4c90370a2806a4ec1709e  gcc/ada/eval_fat.ads
  c6e55b109e0bc402cc284fd5c6ab21d8  gcc/ada/exit.c
! fb56c2c5b6e418097ff790841cf348e4  gcc/ada/exp_aggr.adb
  5bb29eedba7e4edb1cc9af2d3a7d7fae  gcc/ada/exp_aggr.ads
! a68a3243743277fb3a53a6869e2447ee  gcc/ada/exp_attr.adb
! 4d4faec236cf3aaa0e6be3c8137a5874  gcc/ada/exp_attr.ads
  abacd731e7c039849f3fa47eab6c2e87  gcc/ada/exp_ch10.ads
! e1c8c26af4722f94c7ce9cf416ab57f1  gcc/ada/exp_ch11.adb
  a53bb77c8a063a2c52e25c620649d4f9  gcc/ada/exp_ch11.ads
  574582b239737fe8b66bbf45f191534c  gcc/ada/exp_ch12.adb
  d13de997e0d5b839b30984d93335d6db  gcc/ada/exp_ch12.ads
! 89159c175cc32d9cc7e6e79d55ddc3a1  gcc/ada/exp_ch13.adb
  9f51344f531f36d91574edb9755bc541  gcc/ada/exp_ch13.ads
! 5a9b7b144e05ad6850faae6e2e359284  gcc/ada/exp_ch2.adb
  6c4b32cd5d1fbac1afbb5d9bb10fc182  gcc/ada/exp_ch2.ads
! 3b8372425bf649669154600ac119dcb5  gcc/ada/exp_ch3.adb
! 3c36e33e5c47c911e5d7b69c31ac6051  gcc/ada/exp_ch3.ads
! 6cc798d1fc2ba796e8e0305d1a41a06f  gcc/ada/exp_ch4.adb
  fc48a441f2b45a7154b30fd65fe043df  gcc/ada/exp_ch4.ads
! 23d4d1898eecbf221988827d01ae65d9  gcc/ada/exp_ch5.adb
  67a7ce029d83258cb7212f6e777c4c0c  gcc/ada/exp_ch5.ads
! fb0644b0e0524da2f2c57329ccc01211  gcc/ada/exp_ch6.adb
  8431020d2dfb16ce3293690428fbb310  gcc/ada/exp_ch6.ads
! 3ec267d84a1dadaf816fd40599470a07  gcc/ada/exp_ch7.adb
! fd5d5416b05c5696576be7182462654d  gcc/ada/exp_ch7.ads
! c2d3ef1d143a97cfe4fe91582220ee03  gcc/ada/exp_ch8.adb
  1d34d3cba4d7683505cbff2f541c2c01  gcc/ada/exp_ch8.ads
! 88189705216ff552eaf218771fa302a2  gcc/ada/exp_ch9.adb
! 7b0171fc59a43e0ef4159b3e144a77b6  gcc/ada/exp_ch9.ads
! 49734973ffae8dea986c6a9460811dfd  gcc/ada/exp_code.adb
  6ce550c3698d232a231b9841094c9c03  gcc/ada/exp_code.ads
! 44cadc2620eccafbc6ae9351cca27ece  gcc/ada/exp_dbug.adb
! cc9496c1dd15a00f566f2e0fd55b6b7c  gcc/ada/exp_dbug.ads
! 42751aa2d3c8af1a82e528b4de0e48dc  gcc/ada/exp_disp.adb
! beb99facc618d96c3fbc30fef7a0dbb3  gcc/ada/exp_disp.ads
! d471b12a6d728bb286da8089333bdf11  gcc/ada/exp_dist.adb
! f89c9fac0ea5d6935bb1fa1546adc783  gcc/ada/exp_dist.ads
! 23d84c1870ff37f4d759b6e01dd6dd03  gcc/ada/exp_fixd.adb
  b3d4f22b44404e0037bc1900835f5adf  gcc/ada/exp_fixd.ads
! 4973d471335e7146febdb582c7d13e5d  gcc/ada/exp_imgv.adb
! a5888b89ec582b77fd4113e475afe856  gcc/ada/exp_imgv.ads
! 2bc624c8bd40dc002abf13dbfab74cf3  gcc/ada/exp_intr.adb
  b0b5f49f75fa73ee2629fe0c2d072ea5  gcc/ada/exp_intr.ads
! 1200c7fd8636b9144f8db844d4dbdbd8  gcc/ada/exp_pakd.adb
! dfbccf34509f1799c5f8a23c540dc227  gcc/ada/exp_pakd.ads
! 57ef9bd00f0dca08f75275001b8f8c98  gcc/ada/exp_prag.adb
  449a8530a2d3f3b10457ac21933142f6  gcc/ada/exp_prag.ads
  9a8bf9ce0e267237e822fc42cd2cd11d  gcc/ada/exp_smem.adb
  927b96b673008fb0fe69f5bf11a89e9c  gcc/ada/exp_smem.ads
! 0c635d81d257d3ab30490ca2684cc2e5  gcc/ada/exp_strm.adb
  7fbe0383ff78bb54dc070c5dc4a59995  gcc/ada/exp_strm.ads
  37488da513b4887feae0410e3b7fcc15  gcc/ada/exp_tss.adb
! 7f7fef9e330666d4e740d207c41dbeb7  gcc/ada/exp_tss.ads
! 4ba30534f5ed9e83b24aa735c30477a5  gcc/ada/exp_util.adb
! 9f3740b7c58426c61a9723b998bb4a19  gcc/ada/exp_util.ads
  6a0599fecdbf8a4e685cdfc859be3e7b  gcc/ada/exp_vfpt.adb
  1e58265a39ce9df197a17d01d862fce1  gcc/ada/exp_vfpt.ads
  c5944caf9e22dacaf6bdfd29c92865ec  gcc/ada/expander.adb
  46cbd21047fe0ca4cc5e8f5ef554f75a  gcc/ada/expander.ads
! b390cf30841e844c5ae9c59936014b31  gcc/ada/expect.c
! f7681ca342f3bc6051da44a44ec19ceb  gcc/ada/fe.h
  754231188f0384ef7266d82fe90a1014  gcc/ada/final.c
  dedc244a1b1003f569be9616b24f756a  gcc/ada/fmap.adb
  241da0229e83fe59386975b26908b713  gcc/ada/fmap.ads
! 8d2b35cbfcccf679a78df86519989f9b  gcc/ada/fname-sf.adb
  59252f62eaae50888239981cb2a94acc  gcc/ada/fname-sf.ads
! 570b84d257930310a0ce71bd07a09754  gcc/ada/fname-uf.adb
! 9b70f0ee8eab8066e8571dedfd71292d  gcc/ada/fname-uf.ads
! ac6509bc5775c829ad041f1f5c0c0136  gcc/ada/fname.adb
! 033a8214c5efe430aa3ea085ac6949d6  gcc/ada/fname.ads
! 0a12d05f5481e52496e5007ba2d3f3f7  gcc/ada/freeze.adb
  3b5d9243ef2055fb7939a62de459fed2  gcc/ada/freeze.ads
! ee2f2bb02dfe1fa3d47e450acb781590  gcc/ada/frontend.adb
  1c3ab9a755577c47213e62837fdbd2d2  gcc/ada/frontend.ads
  c01e3f7560c9f7b9aa081a371b2fd09b  gcc/ada/g-arrspl.adb
  245494d280a78c02f41e7a7ef6539e49  gcc/ada/g-arrspl.ads
*************** de709b2f894f9911b584d85081b1ef8a  gcc/ad
*** 980,1013 ****
  30a42df8468403823f2fa056c0361cfd  gcc/ada/g-cgicoo.ads
  db64bc9c0def5ee52c571b5143bda89c  gcc/ada/g-cgideb.adb
  2952f1f194254c60745d15b30900e262  gcc/ada/g-cgideb.ads
! 28eaa45c048ccb87083beaa79d5f3d10  gcc/ada/g-comlin.adb
  6a160e5a009de1ddd3b0767b87e59f70  gcc/ada/g-comlin.ads
  edb9c667074d9246efecc02ddee8f1d9  gcc/ada/g-comver.adb
  a0f4b12c96f22fb479f12c4fa67a666b  gcc/ada/g-comver.ads
  11adf5c5b9c1f26da43c37cb5e35f0a8  gcc/ada/g-crc32.adb
! 101c028c8c8f39095a36cebcfb2c13ca  gcc/ada/g-crc32.ads
  2b710b84d9aba98e4d41f168f48b9768  gcc/ada/g-ctrl_c.ads
! 17db1268c42730c19e59bb87e5973b5a  gcc/ada/g-curexc.ads
! 1d170410ab5984c4816f23c659820a9a  gcc/ada/g-debpoo.adb
! 75a3cd479d8d79ce2c4a53d5fecc95ab  gcc/ada/g-debpoo.ads
  22daff8b77b9aa69a44406a24a100d5d  gcc/ada/g-debuti.adb
  4d1fe4f9bd2c5a2f0e75f5184c1b7cc8  gcc/ada/g-debuti.ads
  cafa0a13b98301fed05a13e9e716bc38  gcc/ada/g-diopit.adb
  10722d8155c24688d8568bd141ee03ea  gcc/ada/g-diopit.ads
! 483035e98f1c2c8eb07e81138b818c32  gcc/ada/g-dirope.adb
! d7d2015e7b07bcc0fbcaa402f6230636  gcc/ada/g-dirope.ads
! 46411e782d09473290649f1f08436244  gcc/ada/g-dynhta.adb
  ca151251dd7cd5b27594f01d2c65d58a  gcc/ada/g-dynhta.ads
! 650512c86affdd72dba44d7077388048  gcc/ada/g-dyntab.adb
  39c762bc8bfd70c167f084b7ff4bb723  gcc/ada/g-dyntab.ads
  3bd480e48560c6368660443553638aa7  gcc/ada/g-eacodu.adb
  376c0129be09f59d3991700721180088  gcc/ada/g-excact.adb
  c44dd60c895ac1059f6351ce679626dd  gcc/ada/g-excact.ads
  0a8f4642a5c1b65fc60e7e7265cde442  gcc/ada/g-except.ads
  e9f898150bd4ebba96e48eacb5baf66a  gcc/ada/g-exctra.adb
  28194d820f0a0f403cc21fa7b80a61d0  gcc/ada/g-exctra.ads
! c00e88343afc96ea43ece4b4c96be2c4  gcc/ada/g-expect.adb
! c8c6acca2bac3939ad7d170d5bbbbdbc  gcc/ada/g-expect.ads
  d68daa74cf95ac05e855becba7de6d47  gcc/ada/g-flocon.ads
  6eccf269a623a8983ae8904c7704573a  gcc/ada/g-heasor.adb
  bf46377a6cb02b2a646109a0876f90ad  gcc/ada/g-heasor.ads
--- 1057,1094 ----
  30a42df8468403823f2fa056c0361cfd  gcc/ada/g-cgicoo.ads
  db64bc9c0def5ee52c571b5143bda89c  gcc/ada/g-cgideb.adb
  2952f1f194254c60745d15b30900e262  gcc/ada/g-cgideb.ads
! 0b083591ce1369ecf7c8de18755fa0a5  gcc/ada/g-comlin.adb
  6a160e5a009de1ddd3b0767b87e59f70  gcc/ada/g-comlin.ads
  edb9c667074d9246efecc02ddee8f1d9  gcc/ada/g-comver.adb
  a0f4b12c96f22fb479f12c4fa67a666b  gcc/ada/g-comver.ads
  11adf5c5b9c1f26da43c37cb5e35f0a8  gcc/ada/g-crc32.adb
! c99dd2a8e9418f2115c7391684b157f5  gcc/ada/g-crc32.ads
  2b710b84d9aba98e4d41f168f48b9768  gcc/ada/g-ctrl_c.ads
! 2791fa9b82173d926cce95e8f9fd05d0  gcc/ada/g-curexc.ads
! 5bff02d082662b8e8805fd68ee0fcae7  gcc/ada/g-debpoo.adb
! 2dc89a7186457354912c25b694f6e675  gcc/ada/g-debpoo.ads
  22daff8b77b9aa69a44406a24a100d5d  gcc/ada/g-debuti.adb
  4d1fe4f9bd2c5a2f0e75f5184c1b7cc8  gcc/ada/g-debuti.ads
  cafa0a13b98301fed05a13e9e716bc38  gcc/ada/g-diopit.adb
  10722d8155c24688d8568bd141ee03ea  gcc/ada/g-diopit.ads
! 06765c320529a47812308358eeaf96f7  gcc/ada/g-dirope.adb
! ab45b28c3ec389a063d982963e575825  gcc/ada/g-dirope.ads
! cf02fc828cff8a52ec94f6b2cf0c785f  gcc/ada/g-dynhta.adb
  ca151251dd7cd5b27594f01d2c65d58a  gcc/ada/g-dynhta.ads
! cb4e384acb416dfbc2825ab13273b332  gcc/ada/g-dyntab.adb
  39c762bc8bfd70c167f084b7ff4bb723  gcc/ada/g-dyntab.ads
+ 752154add6b018c00d563f1fbaebd943  gcc/ada/g-eacodu-vms.adb
  3bd480e48560c6368660443553638aa7  gcc/ada/g-eacodu.adb
+ 35cfa87bf059b1234c51d8e736f0ef60  gcc/ada/g-enblsp-vms-alpha.adb
+ 4e82b4f94531c4d9560cfb768a4ba349  gcc/ada/g-enblsp-vms-ia64.adb
  376c0129be09f59d3991700721180088  gcc/ada/g-excact.adb
  c44dd60c895ac1059f6351ce679626dd  gcc/ada/g-excact.ads
  0a8f4642a5c1b65fc60e7e7265cde442  gcc/ada/g-except.ads
  e9f898150bd4ebba96e48eacb5baf66a  gcc/ada/g-exctra.adb
  28194d820f0a0f403cc21fa7b80a61d0  gcc/ada/g-exctra.ads
! 4c346b5b9841970844c50fedc8be095d  gcc/ada/g-expect-vms.adb
! b4aea33a3f9dd7ecd7303504c01becbe  gcc/ada/g-expect.adb
! be9a211e0a9030b612a9eb43a36fb2d9  gcc/ada/g-expect.ads
  d68daa74cf95ac05e855becba7de6d47  gcc/ada/g-flocon.ads
  6eccf269a623a8983ae8904c7704573a  gcc/ada/g-heasor.adb
  bf46377a6cb02b2a646109a0876f90ad  gcc/ada/g-heasor.ads
*************** ee8a723ad5a33e55f35569af40a120e6  gcc/ad
*** 1023,1060 ****
  5e8c09be49ed7ab689fe00063651e31f  gcc/ada/g-io_aux.ads
  bd07fc3c1a475f5137673305a0fda317  gcc/ada/g-locfil.adb
  181b5920d7ce594524f54a7c5c8f2137  gcc/ada/g-locfil.ads
! 94ff6f63c6776385d0531cd537f0db74  gcc/ada/g-md5.adb
! 9ce2d645e1221e6abc15fcad3236fee9  gcc/ada/g-md5.ads
  ec9b6cc9696ba5dc51b1587ca9d67bea  gcc/ada/g-memdum.adb
  40428c0981dd50c347d79894c48bcb24  gcc/ada/g-memdum.ads
  32e21631ceee0f7cbd814681d6785466  gcc/ada/g-moreex.adb
  ae6bf210a60003c0da5344c14f62f81e  gcc/ada/g-moreex.ads
! 5a1ce08ec44040e932cd3ff4978abbc1  gcc/ada/g-os_lib.adb
! a91b7e0e245d796a512378476d259a40  gcc/ada/g-os_lib.ads
! 0d674cfdb46dc9f4ad1c28844a8f126e  gcc/ada/g-pehage.adb
! d9450c6f988ada4ac852ff1ab4bb633d  gcc/ada/g-pehage.ads
! 694cc8cafb31781e900bb8f5be8d1f1d  gcc/ada/g-perhas.ads
! f83157fca243c40cdffde67190c0fb68  gcc/ada/g-regexp.adb
  08d663524dd9c5bf4a40d7c44a43eb7b  gcc/ada/g-regexp.ads
  8dbd746b22caea1638f67ed7cc4e9c46  gcc/ada/g-regist.adb
  65582c5c7d893b76d79faa5d81fdf19d  gcc/ada/g-regist.ads
! 2c1876635d3636f8a97271a58910b5fe  gcc/ada/g-regpat.adb
! 20d543a7b85069536881181d46d4973b  gcc/ada/g-regpat.ads
  9a7496ee21c72e90b4750c1524f5e78d  gcc/ada/g-semaph.adb
  a7a07e830670898334f641d315c5dbdb  gcc/ada/g-semaph.ads
  e924df5091763e8c82635129255de05a  gcc/ada/g-sestin.ads
  e5da8e3402fc1016371e3afe14134844  gcc/ada/g-signal.adb
  34d962f9f753b2c745237509ec156c8d  gcc/ada/g-signal.ads
! 104cc93214b62aeae9d534ddcd3662fe  gcc/ada/g-soccon.ads
! b75262739ff83fca08861b8bc75e9d1f  gcc/ada/g-socket.adb
! 4cdf6adb00523676e12dec78c30b57bb  gcc/ada/g-socket.ads
! 8bf5210721bcb29f79341fc6bd97e963  gcc/ada/g-socthi.adb
! f8bfc6ab4ead58e2430e14c60a048ecf  gcc/ada/g-socthi.ads
  b97c0713eef63e8f6cd73ac3966af974  gcc/ada/g-soliop.ads
  82f980f512409f013eef1a646d2a724a  gcc/ada/g-souinf.ads
  905247a89dfef802cebb56ee735680ee  gcc/ada/g-speche.adb
  1c8e4d0902c7f59af1b100ab9a2ae485  gcc/ada/g-speche.ads
! cb41a175f246ff3ca6af843e2a54df3a  gcc/ada/g-spipat.adb
  7bcd8c6bbdcb2855ef0b07d199b8245c  gcc/ada/g-spipat.ads
  f74bf8da6a79b49555670487e8c12a0a  gcc/ada/g-spitbo.adb
  ef10dd6b479c11dfe53cabf8afcf3ef5  gcc/ada/g-spitbo.ads
--- 1104,1161 ----
  5e8c09be49ed7ab689fe00063651e31f  gcc/ada/g-io_aux.ads
  bd07fc3c1a475f5137673305a0fda317  gcc/ada/g-locfil.adb
  181b5920d7ce594524f54a7c5c8f2137  gcc/ada/g-locfil.ads
! e938997d143fe3fd44e52641b2ca6a9b  gcc/ada/g-md5.adb
! 5f6c0f2efd729ce23cb27386d175d373  gcc/ada/g-md5.ads
  ec9b6cc9696ba5dc51b1587ca9d67bea  gcc/ada/g-memdum.adb
  40428c0981dd50c347d79894c48bcb24  gcc/ada/g-memdum.ads
  32e21631ceee0f7cbd814681d6785466  gcc/ada/g-moreex.adb
  ae6bf210a60003c0da5344c14f62f81e  gcc/ada/g-moreex.ads
! 818e6af6c3a8c33051e4d8f57b12a342  gcc/ada/g-os_lib.adb
! f3e7bf8173f63bba9084054a60c02a26  gcc/ada/g-os_lib.ads
! b4640937ebbebdbf2657f48541367ff5  gcc/ada/g-pehage.adb
! 99e69e01348c73ae7a380b1377112b6d  gcc/ada/g-pehage.ads
! df67c8a6a14a4813bd517a8bb61451d2  gcc/ada/g-regexp.adb
  08d663524dd9c5bf4a40d7c44a43eb7b  gcc/ada/g-regexp.ads
  8dbd746b22caea1638f67ed7cc4e9c46  gcc/ada/g-regist.adb
  65582c5c7d893b76d79faa5d81fdf19d  gcc/ada/g-regist.ads
! 5dec196da7e211b42d18c52a381cad31  gcc/ada/g-regpat.adb
! 0f48375abb3eb1a9e7212dbe740b572e  gcc/ada/g-regpat.ads
  9a7496ee21c72e90b4750c1524f5e78d  gcc/ada/g-semaph.adb
  a7a07e830670898334f641d315c5dbdb  gcc/ada/g-semaph.ads
  e924df5091763e8c82635129255de05a  gcc/ada/g-sestin.ads
  e5da8e3402fc1016371e3afe14134844  gcc/ada/g-signal.adb
  34d962f9f753b2c745237509ec156c8d  gcc/ada/g-signal.ads
! 3169cca01c7fa8bc4968316c477bf548  gcc/ada/g-soccon-aix.ads
! 7e0e71923f710f79c8734d01fe05a437  gcc/ada/g-soccon-darwin.ads
! 1b00b682d3362f15d8b4edb344c6ba5f  gcc/ada/g-soccon-freebsd.ads
! b4f06c31df62b1353259ebf971de08bd  gcc/ada/g-soccon-hpux.ads
! a97f78b6fa172eabb32b8fc920720993  gcc/ada/g-soccon-interix.ads
! 5358ab1695299bc30b62fb9d37d69c13  gcc/ada/g-soccon-irix.ads
! ebadde5d25a5861f101b741dc28c252e  gcc/ada/g-soccon-mingw.ads
! 12663412ec943b2e2a672974cf01348a  gcc/ada/g-soccon-solaris.ads
! 14e7c86fe7c78ecac8b02233e93255b0  gcc/ada/g-soccon-tru64.ads
! 829dc02e78e72dc345be36e98d533044  gcc/ada/g-soccon-unixware.ads
! 1eac384410bddfe8231b6b60dc5a3728  gcc/ada/g-soccon-vms.adb
! aa3db90e08294e91112b7ef8ce40559c  gcc/ada/g-soccon-vxworks.ads
! 64fcdf8ecd3556d7e6485c4b6b449fee  gcc/ada/g-soccon.ads
! b14b65b8a03112fa71310cea35ad5c15  gcc/ada/g-socket.adb
! a73a7a3b179872768974daec2177d510  gcc/ada/g-socket.ads
! c3b7d07d100cf6901a1a6f8b5be53f48  gcc/ada/g-socthi-mingw.adb
! 0fd73b23af339a5d0ec6a432a3c3530e  gcc/ada/g-socthi-mingw.ads
! bd7d52b51ea0bd87ca228e4f05764695  gcc/ada/g-socthi-vms.adb
! 3cb09c3cf63cff4566586ccbf3076f9c  gcc/ada/g-socthi-vms.ads
! e3648f5b615a85bb16faf2f9117e723f  gcc/ada/g-socthi-vxworks.adb
! 152fd40951ae2053a64dd73d16aa5fd1  gcc/ada/g-socthi-vxworks.ads
! 5ff64f654bf2ebad91446273a0b45510  gcc/ada/g-socthi.adb
! 8078d5b3e485fc95455a5a5ace848a7e  gcc/ada/g-socthi.ads
! d7e972e2ffaa5bf966facc9f67b35eb9  gcc/ada/g-soliop-mingw.ads
! 7234add1126d245a6af5aa2257e767a0  gcc/ada/g-soliop-solaris.ads
! 1ebad4ce57e4a212fa871a0c1f66702c  gcc/ada/g-soliop-unixware.ads
  b97c0713eef63e8f6cd73ac3966af974  gcc/ada/g-soliop.ads
  82f980f512409f013eef1a646d2a724a  gcc/ada/g-souinf.ads
  905247a89dfef802cebb56ee735680ee  gcc/ada/g-speche.adb
  1c8e4d0902c7f59af1b100ab9a2ae485  gcc/ada/g-speche.ads
! bb4a971c5d0bd105782b74c4ab079bf0  gcc/ada/g-spipat.adb
  7bcd8c6bbdcb2855ef0b07d199b8245c  gcc/ada/g-spipat.ads
  f74bf8da6a79b49555670487e8c12a0a  gcc/ada/g-spitbo.adb
  ef10dd6b479c11dfe53cabf8afcf3ef5  gcc/ada/g-spitbo.ads
*************** dbb07616b23b3fa7c4b64b7d81b19941  gcc/ad
*** 1064,1333 ****
  1e0f52ecd744925c95324696a9b29c0d  gcc/ada/g-string.adb
  ddefa3e96d47fedf73cef44e9cd62fc4  gcc/ada/g-string.ads
  e695fb6a73ed8ff26c0fc19317ff1196  gcc/ada/g-strspl.ads
! dd7dd7f74fac41cd4137a23c574d559c  gcc/ada/g-table.adb
  dabc3f643a5e1617f701e6081fe29df5  gcc/ada/g-table.ads
  0f23dfe990566d76bd3fc0fb4f2b4ac5  gcc/ada/g-tasloc.adb
  fbe6dcd3cac4b32c772bead6d2de0f15  gcc/ada/g-tasloc.ads
! bfd943d6020d6dae8dd3ab9bc5a0e625  gcc/ada/g-thread.adb
  b97c433cfcb50031f449ce364f9d7294  gcc/ada/g-thread.ads
  0932e01ea81abab209cacb2e83e2ca59  gcc/ada/g-traceb.adb
! dc7b123be513dce0f3ed0893217b61f9  gcc/ada/g-traceb.ads
  e6a617e0e88faf184fe353a4046adade  gcc/ada/g-trasym.adb
! 33d2a4ab1574b0b36151d27c3d94348e  gcc/ada/g-trasym.ads
  50d612ef30678ab686ed61ac7531fc2f  gcc/ada/g-wistsp.ads
  8ea1895ec59d1f544f27a0fe5530ac41  gcc/ada/get_targ.adb
! 82572b6aae23e4cb5d1dbff2fd637710  gcc/ada/get_targ.ads
! 1fd6d1923178920dd218baea792708f4  gcc/ada/gigi.h
  293e112ea5d7a8847d05b6bc8cdef063  gcc/ada/gmem.c
! 89cfc44af40fbf16517ef79afe282ede  gcc/ada/gnat-style.texi
  606cec13b1ab3c5b44fa74e92be28a7d  gcc/ada/gnat.ads
! 0966dcbc1e71a5e35a7d7621b3bc45f3  gcc/ada/gnat1drv.adb
  008bdc05f1d1dbe65f1b0571d73c74b5  gcc/ada/gnat1drv.ads
! 108f2e6eeafd723e6bfc70f41531105b  gcc/ada/gnat_rm.texi
! b9ccea0f385ef4d089f1074b7bcb8f12  gcc/ada/gnat_ugn.texi
! fa27315f0a2080ff4da7910bd92281a7  gcc/ada/gnatbind.adb
  020a7735312749bbc10788652db5ddec  gcc/ada/gnatbind.ads
! be4588ccb7aba9a60fb7d377e8ffef12  gcc/ada/gnatbl.c
! 46a91a50c1d280280a583de9ca3fffd9  gcc/ada/gnatchop.adb
  036eab7dc9c81666aa8602e18025c2b6  gcc/ada/gnatclean.adb
! 310a586c468eb3132820343d0ddbc5c1  gcc/ada/gnatcmd.adb
  fbe1116c14b71f75e1a2455074695e4d  gcc/ada/gnatcmd.ads
! a605d8defca88d8b0b985a8353cd7032  gcc/ada/gnatdll.adb
! 90a5a9e04ddb0341d1f9a27faef0ad4d  gcc/ada/gnatfind.adb
  775c6b745333a89fe8cce58983c970b7  gcc/ada/gnatkr.adb
  46a56a6bdb289623b5eaaf6e91fff0fe  gcc/ada/gnatkr.ads
! 4aa231565467548c5ff1a56e8eab4f65  gcc/ada/gnatlbr.adb
! 3c068315887bda52847a4f727c53f3aa  gcc/ada/gnatlink.adb
  3eb82357133ecbc15b8524ce11004eb8  gcc/ada/gnatlink.ads
! e8abba2fc100e01e642b986a8c2a8327  gcc/ada/gnatls.adb
  7b7191e2f224a210ce1254485889adfd  gcc/ada/gnatls.ads
  1cca3723e8b38d9fb96d59eadae42d8d  gcc/ada/gnatmake.adb
  dedeb982c75e4bd15e4caa01a8e9cb57  gcc/ada/gnatmake.ads
! ee4ee48c8e3e516130b16fc7c79d5b6d  gcc/ada/gnatmem.adb
! 7273553a1eeaff99c216b4893f26a7b9  gcc/ada/gnatname.adb
  7e57dfcbd58e385d87fcb98d7fa7af19  gcc/ada/gnatname.ads
  4efbc5251067655411443013103c62e8  gcc/ada/gnatprep.adb
  becf51fb65c6c499235b71f2123140b7  gcc/ada/gnatprep.ads
! cfafcd6476966eb8134380ef7b176c66  gcc/ada/gnatsym.adb
  2d18fdf6a974bc8a5f50c49f946274e1  gcc/ada/gnatvsn.adb
! 9b94364b5a9c5c24646025c926537a3a  gcc/ada/gnatvsn.ads
! 6ae51047e1442b88f00f8e7a04702264  gcc/ada/gnatxref.adb
! 603fb7cd5a2fdfa79cadda2a20d4dd6e  gcc/ada/gpr2make.adb
! 561b57a49a09d0d635100ed5aaa21e69  gcc/ada/gpr2make.ads
! 40df534ee5d35d153055c712fc5df7c7  gcc/ada/gprcmd.adb
! ebb5b7e890952ec2112a2ce0b0de498a  gcc/ada/gprep.adb
  c83369486373f647ff8713e93895b616  gcc/ada/gprep.ads
  2add79a54313dbd9e3887f98b2bfc0e6  gcc/ada/hlo.adb
  fbb835ce47663c293567d146f7390430  gcc/ada/hlo.ads
  56c55686087402f9a4844eb798878eb5  gcc/ada/hostparm.ads
! b044ab6966c9fc517262fa2e71c64a2f  gcc/ada/i-c.adb
! 287fa3d6fd6d940c42965d3c9232015d  gcc/ada/i-c.ads
  124ae15529669507cd097cd6e0f77fdd  gcc/ada/i-cexten.ads
! 44622d9d86c7dccd4fa51c3278d63cf8  gcc/ada/i-cobol.adb
! d431ef0789ae608e16dc47cd120e2d6d  gcc/ada/i-cobol.ads
! 051c9e71db8c3e9ad24f9e7cda3a0a70  gcc/ada/i-cpoint.adb
! 5ab93b4834c23ccf72ea74a8f9ea8de9  gcc/ada/i-cpoint.ads
! b4f5bc5b84e6ebc294fd9b4fa38b4a18  gcc/ada/i-cpp.adb
! 4e5c62b3a37f208ea039366690dcc404  gcc/ada/i-cpp.ads
  ccd534acb50e485a589590ec08c4a2d1  gcc/ada/i-cstrea.adb
  de33aac7ed6ba4bfb38c2a75989484b2  gcc/ada/i-cstrea.ads
! 35fa969f1940df7550e9ca961b1d4ec1  gcc/ada/i-cstrin.adb
! 81bfb9a32e0acfdcedfcfd00b693b048  gcc/ada/i-cstrin.ads
  6ff0139a4be5737079a4567d839d04f6  gcc/ada/i-fortra.adb
  0d684c90beab14ecd917c35e57779e1b  gcc/ada/i-fortra.ads
  7ed5b2ba787412d6393e9b5dc396a562  gcc/ada/i-os2err.ads
  c5268aa5330bb78945b52a79e4d669d3  gcc/ada/i-os2lib.adb
  cf515a7af484a065a636356650d4bd1d  gcc/ada/i-os2lib.ads
  63f7db6af5064d895596ead78bbd631f  gcc/ada/i-os2syn.ads
! 1a74a8988768947a872337f31bcb0c5a  gcc/ada/i-os2thr.ads
  511753e0427aa18c9842eb565ee65d9d  gcc/ada/i-pacdec.adb
  5317cda628ea361a66cde7ed190339e7  gcc/ada/i-pacdec.ads
  e499264e5e7c1e2135a191e9eae4d187  gcc/ada/i-vxwoio.adb
  2ca15dfca1afddaf6b72838e20f4f08b  gcc/ada/i-vxwoio.ads
  1b47a11464141121bef9d7ed6d0cd59a  gcc/ada/i-vxwork.ads
! 92f531a15b658eee52edf1846ccc442e  gcc/ada/impunit.adb
! d0515b297128612a34bde71b79c90d88  gcc/ada/impunit.ads
! 28c6a1b0997af0da41715d88cd2a5d80  gcc/ada/init.c
! 89121709084515e7fbcb86e3b7bb72ea  gcc/ada/inline.adb
  5ed57c4bb386a423f56bdf7c800ebb59  gcc/ada/inline.ads
! a1a52bdd76a6708c77439b0963f88985  gcc/ada/interfac.ads
  5d3b8598e6d928e3567692856864dee9  gcc/ada/ioexcept.ads
  e3e0f1721b43001acc74e93889ab1fc8  gcc/ada/itypes.adb
  4ce7d140186764dccbcb6f2490610ea5  gcc/ada/itypes.ads
! 1637365ec875d7503dd914772a167c21  gcc/ada/krunch.adb
! 99d765ec92c3f0611f0e3bb07b848793  gcc/ada/krunch.ads
! 360192ca14eb85cf285ceede12666769  gcc/ada/lang-specs.h
! ebfe710acb4354e80332ba678b0c7c87  gcc/ada/lang.opt
! 8d6b97efcfabbe275b569fa8c79faf47  gcc/ada/layout.adb
! d5d42fee7623617bf9f59b5ef93fa64b  gcc/ada/layout.ads
  217f035a370a94661a13b2b6776a13d0  gcc/ada/lib-list.adb
! b3e9c96f2915f36e8ebd4e59b6c95900  gcc/ada/lib-load.adb
! 4646977944cbad59ed2c0d1cdfb742ac  gcc/ada/lib-load.ads
  986be206367debdb5b85aa40c01574df  gcc/ada/lib-sort.adb
  d94296347b94c4d5a0c346be98553ca4  gcc/ada/lib-util.adb
  3ed46f007a20f90b87c02257c2bc9eb0  gcc/ada/lib-util.ads
! 93638d287f51658f917740d119c8a812  gcc/ada/lib-writ.adb
! 521a3b91e20ea791c5fa514600af3450  gcc/ada/lib-writ.ads
! b436ba4d49796a8aca2a57d97e222060  gcc/ada/lib-xref.adb
! 230d2221811a67459c94956bbb35a706  gcc/ada/lib-xref.ads
! d8ba823ec577832beadb6d2948b8c2cf  gcc/ada/lib.adb
! da601ca87265e61a74c2028e616fa12b  gcc/ada/lib.ads
! 86f3abb098df2ede42a75cc2385e771e  gcc/ada/link.c
  ef3ff7b8fe848d4516236c9311912098  gcc/ada/live.adb
  eabc4d8bc9781e40c4fa671268f7739f  gcc/ada/live.ads
  426e42acd80a6b13517d5bfadc23a870  gcc/ada/machcode.ads
! 195c0b5fc67df60b4aa4a4924dc9193f  gcc/ada/make.adb
! 7ea4fb3e2a006b82cd42d0957445882f  gcc/ada/make.ads
! 40eab7a4cfbf917c340b53e202ecfc0b  gcc/ada/makeusg.adb
  aeb66428686e6a45c1493da96a15c55a  gcc/ada/makeusg.ads
  13879fc778692dc33110a2419789523f  gcc/ada/math_lib.adb
  58b483be33d5a861337eef3025f1083b  gcc/ada/mdll-fil.adb
  65fb75ed5501bfc9e33533fa535ba37d  gcc/ada/mdll-fil.ads
! b2cbef20491075a945c106d8e100c9ed  gcc/ada/mdll-utl.adb
  2a3c12baade721dc3c4243f8bff871dd  gcc/ada/mdll-utl.ads
! f360cff7b5a3140cca7fca1b4e6bed6f  gcc/ada/mdll.adb
! 534e854219a87163794804f467515d54  gcc/ada/mdll.ads
  0c639cbdb2fb865729c044a7442b25bb  gcc/ada/memroot.adb
  69ff900b4fb0ccb42ee239f660f8456c  gcc/ada/memroot.ads
! 8588c0fb508c89b033f9b618d8578de0  gcc/ada/memtrack.adb
! 4a42d8b3c21c72f5895f62793fd0e622  gcc/ada/mingw32.h
! 9e78e7831294bbd0dc3167ca528bf01e  gcc/ada/misc.c
  8425d55ad04a61bd3aef140a1ae181cb  gcc/ada/mkdir.c
  d1248dc11b9816915744a2b176e0a599  gcc/ada/mlib-fil.adb
  5f0a67e6d1268c34b369d2aa06963315  gcc/ada/mlib-fil.ads
! beabb8d2a6700d5aaf0847da833f9812  gcc/ada/mlib-prj.adb
  c21b6fb8c9234f709f0b18b56acbd37c  gcc/ada/mlib-prj.ads
! e7fa144cac25fea222a2d4f5d43bdeb7  gcc/ada/mlib-tgt.adb
! 20bd242a49818ba83a605f07447532f6  gcc/ada/mlib-tgt.ads
! ccae5d6e889b84fb7f12443353c4d09c  gcc/ada/mlib-utl.adb
! 567a322c0444db5865c21cd11605c320  gcc/ada/mlib-utl.ads
! 4b73689c8955cefceecedc1bf1c8b622  gcc/ada/mlib.adb
! 241595282b87f59b587edccc8f3f22d6  gcc/ada/mlib.ads
! b38d12a60c67b283928acc2c131aa1cd  gcc/ada/namet.adb
! 2d82a5910b7560a30b88f767d4cdde0c  gcc/ada/namet.ads
  81278fa6544029c0063cb21fc447bd1b  gcc/ada/namet.h
! b89712c50417442e2f8076df9d269597  gcc/ada/nlists.adb
! 02198aab4478ba165f2b6f47844b64bb  gcc/ada/nlists.ads
  cc149709c76c0c8adce5f54152141b66  gcc/ada/nlists.h
  3fdd033811aa119029f5b33e66168df1  gcc/ada/nmake.adt
! e0eab907ad3f361ac6a45591a9a21b5d  gcc/ada/opt.adb
! 00c254dae02f581289eca1ac6da73fe2  gcc/ada/opt.ads
  185252534cc1ab33bb882ca57d894e7b  gcc/ada/osint-b.adb
  17977aacef2eccb0ce12756113b4a4f0  gcc/ada/osint-b.ads
! 40f5c2c6d0290cb698bad5a4f18f69c2  gcc/ada/osint-c.adb
  912581b75a817db68810eb1624c2de34  gcc/ada/osint-c.ads
  f0c63259717a4d7bfe39f6c1ffab36aa  gcc/ada/osint-l.adb
  a9d2245389878a7927ebd0b1ea00e990  gcc/ada/osint-l.ads
  9f3968abdab16c5db0d94e481e94f17c  gcc/ada/osint-m.adb
  d964f3fbd2b4aa6cd596eb5c2a8065d7  gcc/ada/osint-m.ads
! 92776a381016027d429d117e043a2ae0  gcc/ada/osint.adb
! aeb6caa81e5cc960f68120c86aca501f  gcc/ada/osint.ads
  08dcbc506f9193a7294c7c1b4851752e  gcc/ada/output.adb
  e8edcff9434f1380aeb64ba47231e520  gcc/ada/output.ads
! 49715010fbcf342f5f227c0925b31b63  gcc/ada/par-ch10.adb
! 3eba0010737d48360088698ff0a498ef  gcc/ada/par-ch11.adb
! 82de1245d8c67dd1d6c9d6dabb26833a  gcc/ada/par-ch12.adb
  f249596f6fc0338cc1eb53815c5dd689  gcc/ada/par-ch13.adb
! b9a347d101df29a46fd21187796afbef  gcc/ada/par-ch2.adb
! 586c6c6a2f810b4903f4dd8668431924  gcc/ada/par-ch3.adb
! ec5cf74a32074781855e6be028539224  gcc/ada/par-ch4.adb
! 05a53a9ec4b33fad4e3836ca6bb95a34  gcc/ada/par-ch5.adb
! 4a12e2e7661cf9a18c7bab256becca56  gcc/ada/par-ch6.adb
  303644aa4152ed5cf194aa7047d06f29  gcc/ada/par-ch7.adb
! 77ed4adac6541d779c0fdfc7f6ab2c5b  gcc/ada/par-ch8.adb
! db9b1ff3ccb08364b1f521a928bca7cd  gcc/ada/par-ch9.adb
  7abf80a7dff4384e998513d09e033bee  gcc/ada/par-endh.adb
! 1a4350ad64861192b572c0e41af4a80d  gcc/ada/par-labl.adb
! 67c80aa5a00e8a0bfe58273cbb1c04de  gcc/ada/par-load.adb
! 4cf194c664c35e2a791360a122e31778  gcc/ada/par-prag.adb
  0671a344a9ba41e6dc476d6416219336  gcc/ada/par-sync.adb
  794ff4b8ef21906c472e4f9dc9ae8cbf  gcc/ada/par-tchk.adb
! 88559cbe28b06a759ea5d3672f9ad9df  gcc/ada/par-util.adb
! 938332d1553d03bc93aa7bd6791317cf  gcc/ada/par.adb
  a21c9505980fcf129796c3cd552b064a  gcc/ada/par.ads
  dc7c35435a28eb782d46e6a7916b26b1  gcc/ada/prep.adb
  9b5c6ba7a0ac846f0a4778c15ab6b3ae  gcc/ada/prep.ads
  78c735a2ac2c955a27247be035c0b280  gcc/ada/prepcomp.adb
  ddd0ced35b887fbfb0ce346838af23cc  gcc/ada/prepcomp.ads
! 892e60942b020499c9dca66d2e240714  gcc/ada/prj-attr.adb
! 9d1d7e03a2bc9fce5cb0d7c1c1aaa81d  gcc/ada/prj-attr.ads
! dbc223d11322ef71b52941cb38b9cb27  gcc/ada/prj-com.adb
! 6e589aad62c49056928ddc3b9850e28c  gcc/ada/prj-com.ads
! 1b7449f42f3dd39a13c1acca9b685b21  gcc/ada/prj-dect.adb
  70186ce1863aa074bd448c6845d6410e  gcc/ada/prj-dect.ads
! 2257c47a11b3815dac739acc4e8c8a32  gcc/ada/prj-env.adb
! f0b2cb235d6e1c2ac48f846e4d88ce14  gcc/ada/prj-env.ads
! 7c411560be9679ad2aee0b2e0da425bf  gcc/ada/prj-err.adb
! 430c0d39d29fb949d9ec0f9c63f3e502  gcc/ada/prj-err.ads
! 0db2fd3b975865f9f0b719eb363a3ce6  gcc/ada/prj-ext.adb
! b0a81f29493aa5e4158d38087118a10a  gcc/ada/prj-ext.ads
! b29fe733b4b5e7ee7f56a30caed5db95  gcc/ada/prj-makr.adb
  79bd9e8a22d168b72687a3f5de7f767b  gcc/ada/prj-makr.ads
! 6e72058edab64d2b8c94307caa7b2c82  gcc/ada/prj-nmsc.adb
! c59c4b043db292bf38035fc9d1bc3766  gcc/ada/prj-nmsc.ads
! fee1f8581d0cddee1483f05d845bf041  gcc/ada/prj-pars.adb
! 814ed885e042daf315fa3d2bb4fae4fe  gcc/ada/prj-pars.ads
! e1e5ccac0688bd5f97e4f4491f3165a0  gcc/ada/prj-part.adb
  e9c115d06b99f4546cffdf2263247fbd  gcc/ada/prj-part.ads
! ac3a0063925dddcedbfe1e33c3c49c1a  gcc/ada/prj-pp.adb
  25b38059c888f6a24f6f7235a7e84d0a  gcc/ada/prj-pp.ads
! e04da59c831966183f6f7d5c603a2786  gcc/ada/prj-proc.adb
! 4138482d65a64f2254bd394346b87b09  gcc/ada/prj-proc.ads
! 1d7160324384292a1d5ea7592cad0606  gcc/ada/prj-strt.adb
! 152602aa956467c27a193c78207df1ca  gcc/ada/prj-strt.ads
! 09c8de723c4aea49b76f6e2d9f6c49d6  gcc/ada/prj-tree.adb
! 4558282e65e9fd27775160d927073c07  gcc/ada/prj-tree.ads
! 6b4e007a2a5c481a6e8cc35e113ce5a0  gcc/ada/prj-util.adb
! 850d06347a712b1bbdd7efac011759a1  gcc/ada/prj-util.ads
! 8cb9e9959dee594f8edc50fc61635239  gcc/ada/prj.adb
! e1f0dfb70be097584561a639d06a9f41  gcc/ada/prj.ads
! 1e71f9e93ed1afd708ad171e0e4f1047  gcc/ada/raise.c
! efbf9551113df08bb345b7e346bc6712  gcc/ada/raise.h
! 2bc489e39425e37d075229f7b15c8717  gcc/ada/repinfo.adb
! 072bf8822af757867ef21f707f3a6dad  gcc/ada/repinfo.ads
  047d0b6f6a2b9e31d764f4198c0e515e  gcc/ada/repinfo.h
! 154712290e40dd50ce062a5ee55a7eac  gcc/ada/restrict.adb
! ba4cb9623cfdef26f1c492b09c9c079e  gcc/ada/restrict.ads
  bc215f83e56b8da7f17c2ed802782343  gcc/ada/rident.ads
! b46b428f907fa1cbe4d6bd1e43735b47  gcc/ada/rtsfind.adb
! 9eb1cc185e1f849413e8da3b0dcf8cf0  gcc/ada/rtsfind.ads
  9284210a74c7d914c97c8099ab0b8cce  gcc/ada/s-addima.adb
  3ac9843097a5a4098263f58e1670ddfb  gcc/ada/s-addima.ads
! c0ad6613e5b8105414ac38d42870ff43  gcc/ada/s-arit64.adb
! a0a0ba8a05ea8fa82797b4ba4811d55d  gcc/ada/s-arit64.ads
  2288b85acd596fb7553c208bc36b9cc7  gcc/ada/s-assert.adb
  06e8a7e12e973cf38108f5af1e72c32f  gcc/ada/s-assert.ads
  2aaa55f5be752b18947be124dc763de5  gcc/ada/s-asthan.adb
  6f262aba19d340359bdef8b5fd10fc11  gcc/ada/s-asthan.ads
! 8f3cd247c44186b6afd1a45d5c1d8d9f  gcc/ada/s-atacco.adb
! f59bfe9790cb00ccfd01689c3dc42cc2  gcc/ada/s-atacco.ads
! 093adc21c50acb681a291a52f6acf403  gcc/ada/s-auxdec.adb
! 35fef5befe2e2498ed443b2caa0582bf  gcc/ada/s-auxdec.ads
! f3f43c291c356631933e14a6e72f58f4  gcc/ada/s-bitops.adb
! 7e817a791e1c3acf0c87536e3ff4762d  gcc/ada/s-bitops.ads
  b474f77cb76083fa1f3241a43834e22e  gcc/ada/s-boarop.ads
! 4d55a02f1c911789d096541889f65ca3  gcc/ada/s-carsi8.adb
! 3b7dd1fc8d54ca6ab475afe13fb025b4  gcc/ada/s-carsi8.ads
! f02d1ca1957578e5aa40b9895d0f40eb  gcc/ada/s-carun8.adb
! 871e4ac08c26b81b4e715dab78341175  gcc/ada/s-carun8.ads
! 807bcf86e1ed3b8d31f27ba0cc7c0bbc  gcc/ada/s-casi16.adb
! c15fbd643002095eaa0663a137de3a6a  gcc/ada/s-casi16.ads
! 7a503bcba5ad569f28710b0abfe0168c  gcc/ada/s-casi32.adb
! 9977735c08379ffff31e9ffb5cfdedc0  gcc/ada/s-casi32.ads
! 2aee71a8777e8fb7c0ebaf00443225c2  gcc/ada/s-casi64.adb
! 3d9d2baea8560a7c78c16c31f3c7d1b1  gcc/ada/s-casi64.ads
  da30dfb2255a4a334b76ddc827213191  gcc/ada/s-casuti.adb
  d04d4314a038b94c2418b1c19a3a740f  gcc/ada/s-casuti.ads
! 46f7c9c49d36fa058aa8ab9108fdf7a8  gcc/ada/s-caun16.adb
! c4b19e271d83119336cf4b9df4d87c8b  gcc/ada/s-caun16.ads
! ee4b2eec06a4b8a59cb2793a42a5db2b  gcc/ada/s-caun32.adb
! c0cf062f49ddc09289bd132845f4a6ce  gcc/ada/s-caun32.ads
! 79993c5449547099c29bcd4f351e7d3a  gcc/ada/s-caun64.adb
! 25d8469160b214468751048d2ba4d025  gcc/ada/s-caun64.ads
  13929ba0199240c60d171be0f38fb93f  gcc/ada/s-chepoo.ads
  07562e953e38733463bfcc034a98d7cf  gcc/ada/s-crc32.adb
  690c05efe3aa99d267db9edb6cad1ee7  gcc/ada/s-crc32.ads
! d1949910792e6ae148253924d8810223  gcc/ada/s-crtl.ads
  036f36295aadfea1f6cdb9476d6484fb  gcc/ada/s-direio.adb
  df567fcf5b56fe4c1da8fdd312a52431  gcc/ada/s-direio.ads
  d0f40d441a9dfefc4c41b404ce4f282f  gcc/ada/s-errrep.adb
--- 1165,1469 ----
  1e0f52ecd744925c95324696a9b29c0d  gcc/ada/g-string.adb
  ddefa3e96d47fedf73cef44e9cd62fc4  gcc/ada/g-string.ads
  e695fb6a73ed8ff26c0fc19317ff1196  gcc/ada/g-strspl.ads
! f6dcec131a9b435caa7c344d37e5f722  gcc/ada/g-table.adb
  dabc3f643a5e1617f701e6081fe29df5  gcc/ada/g-table.ads
  0f23dfe990566d76bd3fc0fb4f2b4ac5  gcc/ada/g-tasloc.adb
  fbe6dcd3cac4b32c772bead6d2de0f15  gcc/ada/g-tasloc.ads
! b9c47e5b9a3640289e891b566a592fb3  gcc/ada/g-thread.adb
  b97c433cfcb50031f449ce364f9d7294  gcc/ada/g-thread.ads
  0932e01ea81abab209cacb2e83e2ca59  gcc/ada/g-traceb.adb
! 00b8858ad2a2a30ecb8fc4f6628f068f  gcc/ada/g-traceb.ads
! d3b0b9c84d1b589056766325773724d0  gcc/ada/g-trasym-vms.adb
  e6a617e0e88faf184fe353a4046adade  gcc/ada/g-trasym.adb
! c8bf61dbcc740cf1ce50362d170d9adf  gcc/ada/g-trasym.ads
! 8ae5e8c385fcc05c48669ea85c3562dc  gcc/ada/g-utf_32.adb
! 40150eaa22868948219bf6535cff7f62  gcc/ada/g-utf_32.ads
  50d612ef30678ab686ed61ac7531fc2f  gcc/ada/g-wistsp.ads
+ e78fbc39d9f932201f627125f2450f91  gcc/ada/g-zstspl.ads
+ 673cd4404b55b6fcd6fcfa28014206e4  gcc/ada/gen-soccon.c
  8ea1895ec59d1f544f27a0fe5530ac41  gcc/ada/get_targ.adb
! b16e4cc782cc0fef3da8d697a0b69287  gcc/ada/get_targ.ads
! de2a10504c66df8f03f030ecabce6510  gcc/ada/gigi.h
  293e112ea5d7a8847d05b6bc8cdef063  gcc/ada/gmem.c
! 6a9ebb5753e10b92d2fb2710c6ebf6c1  gcc/ada/gnat-style.texi
  606cec13b1ab3c5b44fa74e92be28a7d  gcc/ada/gnat.ads
! b973c470cde69f8e9364084483800520  gcc/ada/gnat1drv.adb
  008bdc05f1d1dbe65f1b0571d73c74b5  gcc/ada/gnat1drv.ads
! 8288d09b12650bc95d06b4f0cc4005a0  gcc/ada/gnat_rm.texi
! 090a887f43bf8d13de45e94b0825de9e  gcc/ada/gnat_ugn.texi
! db75850f2c25b59025bbdde8dedea114  gcc/ada/gnatbind.adb
  020a7735312749bbc10788652db5ddec  gcc/ada/gnatbind.ads
! 0c20632bc8174dc0eb1510e599f1d3ec  gcc/ada/gnatbl.c
! b934a567c1644be122de1c19196bf805  gcc/ada/gnatchop.adb
  036eab7dc9c81666aa8602e18025c2b6  gcc/ada/gnatclean.adb
! 1c045d49ac686401d4f9894dcc8c8fb5  gcc/ada/gnatcmd.adb
  fbe1116c14b71f75e1a2455074695e4d  gcc/ada/gnatcmd.ads
! 089c6baf9d91850ee23208fdd0a9f7f5  gcc/ada/gnatdll.adb
! 1fa7a1775dd32976ce5cdfc88e748788  gcc/ada/gnatfind.adb
  775c6b745333a89fe8cce58983c970b7  gcc/ada/gnatkr.adb
  46a56a6bdb289623b5eaaf6e91fff0fe  gcc/ada/gnatkr.ads
! 324e6742c5eb04decf4a30d2a5d95578  gcc/ada/gnatlbr.adb
! d7b1fbbf1e2af1673b43572d95e34d53  gcc/ada/gnatlink.adb
  3eb82357133ecbc15b8524ce11004eb8  gcc/ada/gnatlink.ads
! 8ae89f5bf77e7dad9a5727f47c7358a8  gcc/ada/gnatls.adb
  7b7191e2f224a210ce1254485889adfd  gcc/ada/gnatls.ads
  1cca3723e8b38d9fb96d59eadae42d8d  gcc/ada/gnatmake.adb
  dedeb982c75e4bd15e4caa01a8e9cb57  gcc/ada/gnatmake.ads
! b01c1b135c3226487b05360eb7be4fe3  gcc/ada/gnatmem.adb
! 6fbb0375896d11479b7f76f9b579989d  gcc/ada/gnatname.adb
  7e57dfcbd58e385d87fcb98d7fa7af19  gcc/ada/gnatname.ads
  4efbc5251067655411443013103c62e8  gcc/ada/gnatprep.adb
  becf51fb65c6c499235b71f2123140b7  gcc/ada/gnatprep.ads
! 19cb73bf0eda2666bbee7d7d9756f47e  gcc/ada/gnatsym.adb
  2d18fdf6a974bc8a5f50c49f946274e1  gcc/ada/gnatvsn.adb
! 6c2fc78c5b665d6963d6d76799a7f242  gcc/ada/gnatvsn.ads
! 266aceb6a6321931b3e135ee8fc62bb6  gcc/ada/gnatxref.adb
! d3893022506359edf513082a5ea900f1  gcc/ada/gprep.adb
  c83369486373f647ff8713e93895b616  gcc/ada/gprep.ads
+ 75c1b98ca361850cd2c9c0434a7437ff  gcc/ada/gprmake.adb
+ 98f2cdf2768aa3508dc59802e32ce89f  gcc/ada/gsocket.h
  2add79a54313dbd9e3887f98b2bfc0e6  gcc/ada/hlo.adb
  fbb835ce47663c293567d146f7390430  gcc/ada/hlo.ads
  56c55686087402f9a4844eb798878eb5  gcc/ada/hostparm.ads
! e30cd697032e370c8323231e081758e1  gcc/ada/i-c.adb
! 8b952ddc06c8e3024b11fdec97188bea  gcc/ada/i-c.ads
  124ae15529669507cd097cd6e0f77fdd  gcc/ada/i-cexten.ads
! eddb103071ac148ea5c3facf6c000ff1  gcc/ada/i-cobol.adb
! 73a21738fadd13ce63e2624e7d039da9  gcc/ada/i-cobol.ads
! 23d9f366d4337119d0d5e7ac2dbf489b  gcc/ada/i-cpoint.adb
! 0e4ea91884845f161ec664d9a24b52e0  gcc/ada/i-cpoint.ads
! 1a50d245c7e3c23d281286ae36bf3d5b  gcc/ada/i-cpp-vms.adb
! 7097c61665215d35b6471c23702cf9e0  gcc/ada/i-cpp.adb
! 63092aa8d38b1e4a5039201aa40b65b3  gcc/ada/i-cpp.ads
! b320de309167e460ff0777f297f5ffeb  gcc/ada/i-cstrea-vms.adb
  ccd534acb50e485a589590ec08c4a2d1  gcc/ada/i-cstrea.adb
  de33aac7ed6ba4bfb38c2a75989484b2  gcc/ada/i-cstrea.ads
! 8c950d2a147572ca8f00a9d9ce1d770c  gcc/ada/i-cstrin.adb
! 308fe5f8dc53909494e5b0fca4533bde  gcc/ada/i-cstrin.ads
  6ff0139a4be5737079a4567d839d04f6  gcc/ada/i-fortra.adb
  0d684c90beab14ecd917c35e57779e1b  gcc/ada/i-fortra.ads
  7ed5b2ba787412d6393e9b5dc396a562  gcc/ada/i-os2err.ads
  c5268aa5330bb78945b52a79e4d669d3  gcc/ada/i-os2lib.adb
  cf515a7af484a065a636356650d4bd1d  gcc/ada/i-os2lib.ads
  63f7db6af5064d895596ead78bbd631f  gcc/ada/i-os2syn.ads
! 6abfff3ecc2a0009c9b39c1d5fde7c94  gcc/ada/i-os2thr.ads
  511753e0427aa18c9842eb565ee65d9d  gcc/ada/i-pacdec.adb
  5317cda628ea361a66cde7ed190339e7  gcc/ada/i-pacdec.ads
  e499264e5e7c1e2135a191e9eae4d187  gcc/ada/i-vxwoio.adb
  2ca15dfca1afddaf6b72838e20f4f08b  gcc/ada/i-vxwoio.ads
+ 3dd98975d9975ff393c60712b875033c  gcc/ada/i-vxwork-x86.ads
  1b47a11464141121bef9d7ed6d0cd59a  gcc/ada/i-vxwork.ads
! 25d3184b2992d94c4c05f70a7a0a0bce  gcc/ada/impunit.adb
! 137e56e1d20df32c9768cce55262be22  gcc/ada/impunit.ads
! 40b617cac72e16bd83539f6eb0e328f0  gcc/ada/indepsw-aix.adb
! a44b57cdefd2095251665c527d80e12f  gcc/ada/indepsw-linux.adb
! d497b1ffa4a080235fae931eff4a64c1  gcc/ada/indepsw-mingw.adb
! 56a9a5d66af22d6b3534426f0c621ce1  gcc/ada/indepsw.adb
! ab6ef2a489617036370802a051134126  gcc/ada/indepsw.ads
! d9adb3c8a3025773ba9afd051d1022a0  gcc/ada/init.c
! 55426165098aa3b47ae653b1893d72b3  gcc/ada/inline.adb
  5ed57c4bb386a423f56bdf7c800ebb59  gcc/ada/inline.ads
! 1cb3144a1aa42619d828292c2ebf0ca4  gcc/ada/interfac-vms.ads
! c1cadbf85c1dac6431cb9968be42d05b  gcc/ada/interfac.ads
  5d3b8598e6d928e3567692856864dee9  gcc/ada/ioexcept.ads
  e3e0f1721b43001acc74e93889ab1fc8  gcc/ada/itypes.adb
  4ce7d140186764dccbcb6f2490610ea5  gcc/ada/itypes.ads
! 9aa8df8bc742a3b364d6944716b92e5f  gcc/ada/krunch.adb
! 2bacff96221bd3f07c750e0ac0661589  gcc/ada/krunch.ads
! 6f5c573ec206bc7f6e77e5aaa6b6f1dc  gcc/ada/lang-specs.h
! f7ba213acd9449891e12ab338f3129d8  gcc/ada/lang.opt
! 6a6811bf3214087c6c6d3dc8c117b2f8  gcc/ada/layout.adb
! dd6a322a8c82e2b119466aeb3271dbdb  gcc/ada/layout.ads
  217f035a370a94661a13b2b6776a13d0  gcc/ada/lib-list.adb
! 762e90cc3c99aef5b92f46dc0d89e37b  gcc/ada/lib-load.adb
! 42025d4e775e893ea682f5eea00042cd  gcc/ada/lib-load.ads
  986be206367debdb5b85aa40c01574df  gcc/ada/lib-sort.adb
  d94296347b94c4d5a0c346be98553ca4  gcc/ada/lib-util.adb
  3ed46f007a20f90b87c02257c2bc9eb0  gcc/ada/lib-util.ads
! 8f871d9d5082c3bdf3fefbd2fde48bea  gcc/ada/lib-writ.adb
! 1fdc8fb9e9acddf12be85b84e5052090  gcc/ada/lib-writ.ads
! a5912b9e86861e5dff679fb6c4b7dcfd  gcc/ada/lib-xref.adb
! cda31da6f59a75b783917433fbdd9756  gcc/ada/lib-xref.ads
! 96df9d6199763a18911773a6a21429e7  gcc/ada/lib.adb
! caea7848ca04b9f5a7b4a68ffbcf4aa9  gcc/ada/lib.ads
! 1ad8b8c71f50af11bffa457c3afeb37e  gcc/ada/link.c
  ef3ff7b8fe848d4516236c9311912098  gcc/ada/live.adb
  eabc4d8bc9781e40c4fa671268f7739f  gcc/ada/live.ads
  426e42acd80a6b13517d5bfadc23a870  gcc/ada/machcode.ads
! 7b59f13233686a4023a0732a755365b6  gcc/ada/make.adb
! f9c0f9319460a8deca4fb6993a652cdc  gcc/ada/make.ads
! 48b941d6f2adffad542c05a4c3421ca2  gcc/ada/makegpr.adb
! 5a8c239a0fbd092e4ac8e4a728f314cc  gcc/ada/makegpr.ads
! 947e6ea8f593c1e2ce119bf582df9cd1  gcc/ada/makeusg.adb
  aeb66428686e6a45c1493da96a15c55a  gcc/ada/makeusg.ads
+ 8b4fd61d2485f5d367fd0858495595c0  gcc/ada/makeutl.adb
+ 48c93b247442804c2ffddc69b7ae9b16  gcc/ada/makeutl.ads
  13879fc778692dc33110a2419789523f  gcc/ada/math_lib.adb
  58b483be33d5a861337eef3025f1083b  gcc/ada/mdll-fil.adb
  65fb75ed5501bfc9e33533fa535ba37d  gcc/ada/mdll-fil.ads
! 756ad2d2e67b84fa1fe7623b04a3dc55  gcc/ada/mdll-utl.adb
  2a3c12baade721dc3c4243f8bff871dd  gcc/ada/mdll-utl.ads
! ccce07ef5244307a2f2f0714db119611  gcc/ada/mdll.adb
! 592fd57d24ba89f14d8b00ef3f006f1a  gcc/ada/mdll.ads
  0c639cbdb2fb865729c044a7442b25bb  gcc/ada/memroot.adb
  69ff900b4fb0ccb42ee239f660f8456c  gcc/ada/memroot.ads
! e32f7b6fe26bca1d506c532f6dc86591  gcc/ada/memtrack.adb
! f68235fc833b743155b6b98460f6492d  gcc/ada/mingw32.h
! 70587cff9e2da3897fb3c88ce3c9f169  gcc/ada/misc.c
  8425d55ad04a61bd3aef140a1ae181cb  gcc/ada/mkdir.c
  d1248dc11b9816915744a2b176e0a599  gcc/ada/mlib-fil.adb
  5f0a67e6d1268c34b369d2aa06963315  gcc/ada/mlib-fil.ads
! 565123ade52fa083dc137f42e63742ad  gcc/ada/mlib-prj.adb
  c21b6fb8c9234f709f0b18b56acbd37c  gcc/ada/mlib-prj.ads
! 22ad6612d68f911c332e9cc7ede66021  gcc/ada/mlib-tgt-aix.adb
! ebd647e9c5670148ede91fc9917f45d2  gcc/ada/mlib-tgt-darwin.adb
! 1e864f69336fee93ad1ab62e7d598c47  gcc/ada/mlib-tgt-hpux.adb
! 42ffdd0b7cbdd5c8de38492a02b340b1  gcc/ada/mlib-tgt-irix.adb
! 37c0953a23480bcf1c4bbbb7edc922e2  gcc/ada/mlib-tgt-linux.adb
! b745d5d1e7e76b9b8587ac7ffaaee0ea  gcc/ada/mlib-tgt-lynxos.adb
! 7828f69f16c8d1cc309d5ad467502b17  gcc/ada/mlib-tgt-mingw.adb
! 1af96f603ca9653b98f56a0f7617cdcb  gcc/ada/mlib-tgt-solaris.adb
! ca2b5343b73b023f3ccbe8a5f6c13485  gcc/ada/mlib-tgt-tru64.adb
! d20b40c3ad3b141430b2ab6aa1ecb827  gcc/ada/mlib-tgt-vms-alpha.adb
! 007bce7c63a1f69993f7d1462a48e22a  gcc/ada/mlib-tgt-vms-ia64.adb
! 7e63fca81180effe7a35dbf50c951e04  gcc/ada/mlib-tgt-vxworks.adb
! 5664c1edd7974eb69604405152259d4b  gcc/ada/mlib-tgt.adb
! 1feda372e344a3bddddbf6e6ae9d8ef2  gcc/ada/mlib-tgt.ads
! 799ede8edfe286431104e9db2a754849  gcc/ada/mlib-utl.adb
! 6eb9b794de07e2db5174e05b24f71376  gcc/ada/mlib-utl.ads
! b30353b3226d284da4ccebe978a2a199  gcc/ada/mlib.adb
! f5642a058fa2c9fefb549884ee15bd95  gcc/ada/mlib.ads
! 81601ffb77c7853490c6a9d029dd8403  gcc/ada/namet.adb
! 704a5ab175b8728ecfebd74dcdb72dff  gcc/ada/namet.ads
  81278fa6544029c0063cb21fc447bd1b  gcc/ada/namet.h
! 69b68ec69f83e32f4506f655165c49f1  gcc/ada/nlists.adb
! 3e8f802129895366d0b26b4ac0f750f6  gcc/ada/nlists.ads
  cc149709c76c0c8adce5f54152141b66  gcc/ada/nlists.h
  3fdd033811aa119029f5b33e66168df1  gcc/ada/nmake.adt
! 9e540a72889b283c9cca2ba947188b97  gcc/ada/opt.adb
! 1eec459861705feb52812ef57da824ba  gcc/ada/opt.ads
  185252534cc1ab33bb882ca57d894e7b  gcc/ada/osint-b.adb
  17977aacef2eccb0ce12756113b4a4f0  gcc/ada/osint-b.ads
! 90cd5b27a777f571c5755bd16164febf  gcc/ada/osint-c.adb
  912581b75a817db68810eb1624c2de34  gcc/ada/osint-c.ads
  f0c63259717a4d7bfe39f6c1ffab36aa  gcc/ada/osint-l.adb
  a9d2245389878a7927ebd0b1ea00e990  gcc/ada/osint-l.ads
  9f3968abdab16c5db0d94e481e94f17c  gcc/ada/osint-m.adb
  d964f3fbd2b4aa6cd596eb5c2a8065d7  gcc/ada/osint-m.ads
! 94d8b8d5a84ce3a90f7054250013f7a6  gcc/ada/osint.adb
! 06c55589ad77567228334a2905732dba  gcc/ada/osint.ads
  08dcbc506f9193a7294c7c1b4851752e  gcc/ada/output.adb
  e8edcff9434f1380aeb64ba47231e520  gcc/ada/output.ads
! ff8f0e67337c47212be17446a04b6c97  gcc/ada/par-ch10.adb
! 11642a43415b59d6b1df9ef4544e9d53  gcc/ada/par-ch11.adb
! a131a608300998ff192baf4d48b8426b  gcc/ada/par-ch12.adb
  f249596f6fc0338cc1eb53815c5dd689  gcc/ada/par-ch13.adb
! fcec01c5ee5113d24933bbe36f9576d7  gcc/ada/par-ch2.adb
! a80b37a9a69db854311ea8b352a66dd2  gcc/ada/par-ch3.adb
! d7f74cc37304c9991d134fd9b07d1810  gcc/ada/par-ch4.adb
! f39c313b76bae732b80f5b9d4fdd8221  gcc/ada/par-ch5.adb
! d6d915d42c0191011999306f6c5c21e8  gcc/ada/par-ch6.adb
  303644aa4152ed5cf194aa7047d06f29  gcc/ada/par-ch7.adb
! 6c04c8840344a9fefc188a1a077d89f9  gcc/ada/par-ch8.adb
! beab1f247b1a1db60da939bbc70eda93  gcc/ada/par-ch9.adb
  7abf80a7dff4384e998513d09e033bee  gcc/ada/par-endh.adb
! e626a3d7d0a8ef7156e1cd0b1a638f38  gcc/ada/par-labl.adb
! 69afb302066ca0b0409d6b90926e2c75  gcc/ada/par-load.adb
! 094ee8667f86afd85d06a0adb1653933  gcc/ada/par-prag.adb
  0671a344a9ba41e6dc476d6416219336  gcc/ada/par-sync.adb
  794ff4b8ef21906c472e4f9dc9ae8cbf  gcc/ada/par-tchk.adb
! edf0d21f3678d7db700564b2ec6bb05b  gcc/ada/par-util.adb
! e5b10ce266170a5c2510b8bbce448f58  gcc/ada/par.adb
  a21c9505980fcf129796c3cd552b064a  gcc/ada/par.ads
  dc7c35435a28eb782d46e6a7916b26b1  gcc/ada/prep.adb
  9b5c6ba7a0ac846f0a4778c15ab6b3ae  gcc/ada/prep.ads
  78c735a2ac2c955a27247be035c0b280  gcc/ada/prepcomp.adb
  ddd0ced35b887fbfb0ce346838af23cc  gcc/ada/prepcomp.ads
! 3dc20ae757bfb4733c69e7ef52e6bd53  gcc/ada/prj-attr-pm.adb
! 743cec26413340accd8f06c2ec593376  gcc/ada/prj-attr-pm.ads
! dff4f488ff2980fc2df1c5a0d1515781  gcc/ada/prj-attr.adb
! c3cb131f8c18adc282b43aae7eb5111a  gcc/ada/prj-attr.ads
! d428d6d78470895e91589efe0a1e9a5a  gcc/ada/prj-com.adb
! 677a7db3d9ef7361e7d1a5f1b93b9762  gcc/ada/prj-com.ads
! ea8e7cce8178d763645e5fd11eee7554  gcc/ada/prj-dect.adb
  70186ce1863aa074bd448c6845d6410e  gcc/ada/prj-dect.ads
! 9370f005d4d0f8d242d4928b8981b863  gcc/ada/prj-env.adb
! 806117b55efecc0cfa836a797b70cbe1  gcc/ada/prj-env.ads
! 39f00e5f67df1ad8b1fb1a8d34a8a51c  gcc/ada/prj-err.adb
! 8d8812ca3d49ccacaf328f05054a0c27  gcc/ada/prj-err.ads
! 9bb158f93ead589bff861456ed5e5d4a  gcc/ada/prj-ext.adb
! 8d1719bee09dedad53ace7bacdeeb8a7  gcc/ada/prj-ext.ads
! 4faddf476e2fc3ee56c573b41f30e078  gcc/ada/prj-makr.adb
  79bd9e8a22d168b72687a3f5de7f767b  gcc/ada/prj-makr.ads
! 8f9b5a8a61c3eeeaa87ae0ea5fb50223  gcc/ada/prj-nmsc.adb
! 691ea974e49657317d3d8cb9ec435ff9  gcc/ada/prj-nmsc.ads
! c718a3559d6a744b4ea0dc458db8d2e5  gcc/ada/prj-pars.adb
! e5972fa60d7c61d333a90128ddad98ee  gcc/ada/prj-pars.ads
! 7133e229435364f45a86d28794ab1099  gcc/ada/prj-part.adb
  e9c115d06b99f4546cffdf2263247fbd  gcc/ada/prj-part.ads
! 24a9856f83c587f3862c03b09ebf0ad5  gcc/ada/prj-pp.adb
  25b38059c888f6a24f6f7235a7e84d0a  gcc/ada/prj-pp.ads
! 8c9c0ef31504cf63f88f6dfb66eca4ca  gcc/ada/prj-proc.adb
! 8c844b531f9d53765ec65b00c6a7dee7  gcc/ada/prj-proc.ads
! fd44ee121197bbc844cbbfc122b0d51f  gcc/ada/prj-strt.adb
! 1e634c734277a279f1e6ea8a816103a6  gcc/ada/prj-strt.ads
! d8912bf291d44fbcccf031db8e1f074d  gcc/ada/prj-tree.adb
! e0a3108f4a5ef4e74b1023081ff0719d  gcc/ada/prj-tree.ads
! 39f51ce503449bd7416014bb1da020f3  gcc/ada/prj-util.adb
! 64cfc081f25d19db01bf04297c4d0c67  gcc/ada/prj-util.ads
! 160f1eb50eed64eb17e5fb253d429f50  gcc/ada/prj.adb
! 250f2f81da509374255606c6ffc1da68  gcc/ada/prj.ads
! 02425be31ded772c83cf1f8c343a2a5f  gcc/ada/raise.c
! fb37354214e7f17e006ca48a4704a0a8  gcc/ada/raise.h
! 8040c6a0b2782ea247a980e906d5a2be  gcc/ada/repinfo.adb
! 5d20b8340754b5678e234c2865c93ceb  gcc/ada/repinfo.ads
  047d0b6f6a2b9e31d764f4198c0e515e  gcc/ada/repinfo.h
! ef8abbf401f3f6be408107218cf56c8b  gcc/ada/restrict.adb
! 6906c6db945407d577e50e7584bcef7d  gcc/ada/restrict.ads
  bc215f83e56b8da7f17c2ed802782343  gcc/ada/rident.ads
! 8968d224c5583d0acb885401da02f037  gcc/ada/rtsfind.adb
! f9e4985467d17e35ab734e25d7290e47  gcc/ada/rtsfind.ads
  9284210a74c7d914c97c8099ab0b8cce  gcc/ada/s-addima.adb
  3ac9843097a5a4098263f58e1670ddfb  gcc/ada/s-addima.ads
! 1abc1d999013869ca081e2f47c95f37c  gcc/ada/s-addope.adb
! 0cb2dc65deca8a8892aa801233043788  gcc/ada/s-addope.ads
! 03430431630bab6c3e1f1a95d6396c02  gcc/ada/s-arit64.adb
! 9f747789d0323cfa70b3740eb203e6ee  gcc/ada/s-arit64.ads
  2288b85acd596fb7553c208bc36b9cc7  gcc/ada/s-assert.adb
  06e8a7e12e973cf38108f5af1e72c32f  gcc/ada/s-assert.ads
+ 481c7b10868f175cde1a17bb8af3a3cc  gcc/ada/s-asthan-vms-alpha.adb
  2aaa55f5be752b18947be124dc763de5  gcc/ada/s-asthan.adb
  6f262aba19d340359bdef8b5fd10fc11  gcc/ada/s-asthan.ads
! 4f09f644462c244a8a85e57a68db7cfc  gcc/ada/s-atacco.adb
! 71bd462546981f49eee5f98c6f3e5b01  gcc/ada/s-atacco.ads
! c8b1d8afe28d410a10557a75f3aed9b5  gcc/ada/s-auxdec-vms_64.ads
! 450b12685f51c085561600f31cb0edd1  gcc/ada/s-auxdec.adb
! 5dae815906e4ff460dafcdf566d25084  gcc/ada/s-auxdec.ads
! 40723f6020ba9b88914d2c910a234898  gcc/ada/s-bitops.adb
! d57b1889f1f5777bb958cf18d1e9ae63  gcc/ada/s-bitops.ads
  b474f77cb76083fa1f3241a43834e22e  gcc/ada/s-boarop.ads
! c49d111c4b456c13ebae7f990508963c  gcc/ada/s-carsi8.adb
! b86adba45682a3e0baa06d5e9e288bfc  gcc/ada/s-carsi8.ads
! bee3c1b711f061e015f170f83ffe4c37  gcc/ada/s-carun8.adb
! 32a0f0fc66307c5aa1ce08508ee3318d  gcc/ada/s-carun8.ads
! 831c51af3be4670d47ed09678777fef7  gcc/ada/s-casi16.adb
! f586bcd8c16c68ec991815c852443b4d  gcc/ada/s-casi16.ads
! ef8b9e8bf11931a2023619957ddc76c3  gcc/ada/s-casi32.adb
! 818d439a21b2d3d992719a9c440942cf  gcc/ada/s-casi32.ads
! de8de6beed5d8104340c687837cfd079  gcc/ada/s-casi64.adb
! ccfcc024c0cbf67a4d4dcbcf7f951764  gcc/ada/s-casi64.ads
  da30dfb2255a4a334b76ddc827213191  gcc/ada/s-casuti.adb
  d04d4314a038b94c2418b1c19a3a740f  gcc/ada/s-casuti.ads
! 96c0cd7eb7c21b144dc543780d641261  gcc/ada/s-caun16.adb
! 2dab24695f63620d704fd409e37e37f1  gcc/ada/s-caun16.ads
! 82cedd4ae24fab3dbbb0486c10aba167  gcc/ada/s-caun32.adb
! e5a0b053d71e6577707995101f43d206  gcc/ada/s-caun32.ads
! 42f93bec85327cf08f65c12179dbe4cb  gcc/ada/s-caun64.adb
! abdc0fbc42f31e10241f264fcfd1a938  gcc/ada/s-caun64.ads
  13929ba0199240c60d171be0f38fb93f  gcc/ada/s-chepoo.ads
  07562e953e38733463bfcc034a98d7cf  gcc/ada/s-crc32.adb
  690c05efe3aa99d267db9edb6cad1ee7  gcc/ada/s-crc32.ads
! 7b2e5ba1e06da79c3b8d9f825b27d6b8  gcc/ada/s-crtl.ads
  036f36295aadfea1f6cdb9476d6484fb  gcc/ada/s-direio.adb
  df567fcf5b56fe4c1da8fdd312a52431  gcc/ada/s-direio.ads
  d0f40d441a9dfefc4c41b404ce4f282f  gcc/ada/s-errrep.adb
*************** de87f3d78739ff199f9fefdb77c91820  gcc/ad
*** 1352,1377 ****
  4b458f6fac7718096c989b3be93398f3  gcc/ada/s-expuns.adb
  5a96fd2beeb5ed1033f10310d8d7317d  gcc/ada/s-expuns.ads
  7c717d3bcb84684de4c959e40a67fc67  gcc/ada/s-fatflt.ads
! 278f26ca0fc1ecca77287e921f9117fc  gcc/ada/s-fatgen.adb
  b43e8a8f622a80d21984b857a7e78d15  gcc/ada/s-fatgen.ads
  a2b3be9a62a8063bf1b766bfdf7b773f  gcc/ada/s-fatlfl.ads
  049334cb07fd23f64ffde6d071571eec  gcc/ada/s-fatllf.ads
  39c5617f1345e38499b7df1ddf5e2801  gcc/ada/s-fatsfl.ads
! 0d69fa2d0e629de7b6efc48a2e4fa601  gcc/ada/s-ficobl.ads
! cb6e016be2f293c311023b2bac4f96a5  gcc/ada/s-fileio.adb
! 87aa082bd572676973e1fbf9dfedbe34  gcc/ada/s-fileio.ads
! e6714d9360348309a35e5b071dd44240  gcc/ada/s-finimp.adb
! ff994e479a04929ae452faebc237af07  gcc/ada/s-finimp.ads
  52cc412b515f9945db49ee50aab2dde3  gcc/ada/s-finroo.adb
! 50bbee60ec635f6e9774d4281f5bae20  gcc/ada/s-finroo.ads
  ee59b6d32cf9a6ee06962e0622f74086  gcc/ada/s-fore.adb
  3e8ee093a6b1e8d008452b3a2d4e1fe5  gcc/ada/s-fore.ads
! adf4ba5494ef801cfdd5fcc47751b065  gcc/ada/s-geveop.adb
  b9688bd95cb0ad39dc307f7a50266690  gcc/ada/s-geveop.ads
  425c9d0f01b8768c4669db241b155eb7  gcc/ada/s-gloloc.adb
  09b18f454e56edfb133e540988b5b482  gcc/ada/s-gloloc.ads
  53ff9283fa13d2dfa269f48429e631ce  gcc/ada/s-hibaen.ads
! 2903168daabee674fdd29365c77cc870  gcc/ada/s-htable.adb
  218e378d0c5bcb1d57189520b086e8b1  gcc/ada/s-htable.ads
  49b55075f309867a841723d17a8e29c4  gcc/ada/s-imgbiu.adb
  67c2f1044a7680e2459100aeda74e0e5  gcc/ada/s-imgbiu.ads
--- 1488,1514 ----
  4b458f6fac7718096c989b3be93398f3  gcc/ada/s-expuns.adb
  5a96fd2beeb5ed1033f10310d8d7317d  gcc/ada/s-expuns.ads
  7c717d3bcb84684de4c959e40a67fc67  gcc/ada/s-fatflt.ads
! 265cee35fc853061ed284da0f6397571  gcc/ada/s-fatgen.adb
  b43e8a8f622a80d21984b857a7e78d15  gcc/ada/s-fatgen.ads
  a2b3be9a62a8063bf1b766bfdf7b773f  gcc/ada/s-fatlfl.ads
  049334cb07fd23f64ffde6d071571eec  gcc/ada/s-fatllf.ads
  39c5617f1345e38499b7df1ddf5e2801  gcc/ada/s-fatsfl.ads
! 5e5fb3e5f64e4cfed58945b2faf45555  gcc/ada/s-ficobl.ads
! afd74d3bd4195d655d6948ff76dcc4cc  gcc/ada/s-fileio.adb
! 44c14c82ba61727f487d79b3b8dafa53  gcc/ada/s-fileio.ads
! b8aae74e743557d086baa0c6af0c6ddb  gcc/ada/s-finimp.adb
! a47f06fa322c61b7d955d8beb23333cb  gcc/ada/s-finimp.ads
  52cc412b515f9945db49ee50aab2dde3  gcc/ada/s-finroo.adb
! fad42d75e4c1abc2694651c4176ed4be  gcc/ada/s-finroo.ads
  ee59b6d32cf9a6ee06962e0622f74086  gcc/ada/s-fore.adb
  3e8ee093a6b1e8d008452b3a2d4e1fe5  gcc/ada/s-fore.ads
! df0104645768da6d03c2b82013b6eba1  gcc/ada/s-geveop.adb
  b9688bd95cb0ad39dc307f7a50266690  gcc/ada/s-geveop.ads
+ 072a39e95e704e31a7753e683aa0cbcc  gcc/ada/s-gloloc-mingw.adb
  425c9d0f01b8768c4669db241b155eb7  gcc/ada/s-gloloc.adb
  09b18f454e56edfb133e540988b5b482  gcc/ada/s-gloloc.ads
  53ff9283fa13d2dfa269f48429e631ce  gcc/ada/s-hibaen.ads
! 05d4b85410913ae000d9892185e170ce  gcc/ada/s-htable.adb
  218e378d0c5bcb1d57189520b086e8b1  gcc/ada/s-htable.ads
  49b55075f309867a841723d17a8e29c4  gcc/ada/s-imgbiu.adb
  67c2f1044a7680e2459100aeda74e0e5  gcc/ada/s-imgbiu.ads
*************** c76fc335d3dc0b00d6b4c0ec0fee92eb  gcc/ad
*** 1399,1422 ****
  ce37f1a9f5538b32869846a63a478247  gcc/ada/s-imgrea.ads
  6fa04b04e9393d4f44b087f32d583f3a  gcc/ada/s-imguns.adb
  050816f1bff8b19bf875a0fc10ded953  gcc/ada/s-imguns.ads
! 506403713de8dad52b5ceb4b4e3beb88  gcc/ada/s-imgwch.adb
! 11cc798afb61c170d5206e2af26dbc93  gcc/ada/s-imgwch.ads
  46e6a74b2b2459ebb79a2271cc29970d  gcc/ada/s-imgwiu.adb
  a2f465f8d5b833a6a1a093cdf8b4b957  gcc/ada/s-imgwiu.ads
! 888b91e58fce1bf2fada197b5af5a58d  gcc/ada/s-inmaop.ads
! 908be390d120371b01f50d96117dc3fa  gcc/ada/s-interr.adb
! f8b3001d54ea664d7eb584701283ab95  gcc/ada/s-interr.ads
  60a18f3b6db54b281ed11ae6c6be39f9  gcc/ada/s-intman.ads
  e207c97358f5c1db0e22895c9ce1872e  gcc/ada/s-io.adb
  7806c318c86778e86d646582ea662177  gcc/ada/s-io.ads
! 86c63b507e76362c62797bb3e4969277  gcc/ada/s-maccod.ads
  7e6417c25a9db7ffc3602401b2e449bc  gcc/ada/s-mantis.adb
  3b377da6936967f59131c3a5eeb60b64  gcc/ada/s-mantis.ads
  664b8804b24e9f18ff40d965b34e6099  gcc/ada/s-mastop.adb
  fdd9f3d13a6cbf693846420fdac5fe30  gcc/ada/s-mastop.ads
  c81a1787b8e7f135d39e7e56fb81b58b  gcc/ada/s-memcop.ads
  300311e29e8871e43103c5582a6175d8  gcc/ada/s-memory.adb
  bfb681c7fb02d7b8edce48c08a502f66  gcc/ada/s-memory.ads
  dbe1e2b53384a3a2a24fb1c9adb5df35  gcc/ada/s-osprim.ads
  ecd38c8d2e8d4d991a3ec71af11a44a6  gcc/ada/s-pack03.adb
  9af27db5b99e1d7b85db98bc09bf0ed6  gcc/ada/s-pack03.ads
--- 1536,1631 ----
  ce37f1a9f5538b32869846a63a478247  gcc/ada/s-imgrea.ads
  6fa04b04e9393d4f44b087f32d583f3a  gcc/ada/s-imguns.adb
  050816f1bff8b19bf875a0fc10ded953  gcc/ada/s-imguns.ads
! c8da9ee7f0a66e4c6c135924d0d25812  gcc/ada/s-imgwch.adb
! 9a8b58f5d06a027d23c775463830e83c  gcc/ada/s-imgwch.ads
  46e6a74b2b2459ebb79a2271cc29970d  gcc/ada/s-imgwiu.adb
  a2f465f8d5b833a6a1a093cdf8b4b957  gcc/ada/s-imgwiu.ads
! 716f55f489b888c9be9f5e5c739c573c  gcc/ada/s-inmaop-dummy.adb
! eda1a9987f9294488446ce1cb6da150e  gcc/ada/s-inmaop-posix.adb
! b473fbaa2d207f9f9b48cbc01620e31f  gcc/ada/s-inmaop-vms.adb
! 93a2c7a78af72db3df4d1f955cc5c3f3  gcc/ada/s-inmaop.ads
! 2380f2094d529d757deeae29b55fdd0e  gcc/ada/s-interr-dummy.adb
! 04ccb4a894c8431a54dbe8db34ae8c92  gcc/ada/s-interr-sigaction.adb
! 376e0e96be4509204d48f7d92176c20f  gcc/ada/s-interr-vms.adb
! 8333781508c70e4ce8d60506df58712c  gcc/ada/s-interr-vxworks.adb
! 14aefc10e941d0d5169a2bb087f465b3  gcc/ada/s-interr.adb
! d28c810b137557878e587b272d756dca  gcc/ada/s-interr.ads
! 2f3aadde4e178b8b6e3ec6c0437014a1  gcc/ada/s-intman-dummy.adb
! f0e5c8c5759bb8818f766bb0a4da13b5  gcc/ada/s-intman-irix-athread.adb
! 6f07986dd2d9d9f2a4c300bc3e6d1b40  gcc/ada/s-intman-irix.adb
! 35e0129ee463b069d71f81a6f3defbdc  gcc/ada/s-intman-mingw.adb
! 6d865b55e67d3ffd41d37a0959741b87  gcc/ada/s-intman-posix.adb
! f65638bb6b5bff35025ee07180fcb84c  gcc/ada/s-intman-solaris.adb
! 918ea671929959d984b4819918dee0b4  gcc/ada/s-intman-vms.adb
! 166dad41777258463eec097a972c5f1a  gcc/ada/s-intman-vms.ads
! d8807c1b8a7f6c300700749664628b01  gcc/ada/s-intman-vxworks.adb
! 3fe6b135650dc083869bb1fadcfdb4ce  gcc/ada/s-intman-vxworks.ads
  60a18f3b6db54b281ed11ae6c6be39f9  gcc/ada/s-intman.ads
  e207c97358f5c1db0e22895c9ce1872e  gcc/ada/s-io.adb
  7806c318c86778e86d646582ea662177  gcc/ada/s-io.ads
! b0f05816b027bbff20ae1b526900d275  gcc/ada/s-maccod.ads
  7e6417c25a9db7ffc3602401b2e449bc  gcc/ada/s-mantis.adb
  3b377da6936967f59131c3a5eeb60b64  gcc/ada/s-mantis.ads
+ ade900fb546ed0c90f8ee56da9875285  gcc/ada/s-mastop-irix.adb
+ 9a160098d8a3f1084c69859f2e81f478  gcc/ada/s-mastop-tru64.adb
+ 5e11fcf7286f4b8fd01257ac25c88bc4  gcc/ada/s-mastop-vms.adb
+ bbdd838636189e222059d5264c8f3205  gcc/ada/s-mastop-x86.adb
  664b8804b24e9f18ff40d965b34e6099  gcc/ada/s-mastop.adb
  fdd9f3d13a6cbf693846420fdac5fe30  gcc/ada/s-mastop.ads
  c81a1787b8e7f135d39e7e56fb81b58b  gcc/ada/s-memcop.ads
+ e575bf88b560332044bd8bb3baf31f6a  gcc/ada/s-memory-mingw.adb
  300311e29e8871e43103c5582a6175d8  gcc/ada/s-memory.adb
  bfb681c7fb02d7b8edce48c08a502f66  gcc/ada/s-memory.ads
+ 9259d3a92df16987c9937fa8340fc8f4  gcc/ada/s-osinte-aix-fsu.ads
+ 9bc0d096562c13579553062dd262b519  gcc/ada/s-osinte-aix.adb
+ 317a8ae466028dc89f29d52d3f50455d  gcc/ada/s-osinte-aix.ads
+ 1808e3f7cf90781cface13935fe695c0  gcc/ada/s-osinte-darwin.adb
+ b408fb41bfc83e121b7673c7c77a857f  gcc/ada/s-osinte-darwin.ads
+ dc1d7000727d34a90db25bf66cbd356b  gcc/ada/s-osinte-dummy.ads
+ 3a4b90fa21ad19c8f131725bd37d66cf  gcc/ada/s-osinte-freebsd.adb
+ ae98cee4e2d795e8a479d0f930ab1659  gcc/ada/s-osinte-freebsd.ads
+ f37d8b5e52a33f4f4f785d8b86c07fb7  gcc/ada/s-osinte-fsu.adb
+ 6cd64f782a7b5f3c0a16087d8141f4b1  gcc/ada/s-osinte-hpux-dce.adb
+ 732ad2be817ef20cb9adf586fa2add59  gcc/ada/s-osinte-hpux-dce.ads
+ 335194ddebaac29031b63504120da8d1  gcc/ada/s-osinte-hpux.ads
+ ba37b5721e4f7d3ce19c40844a20e3cf  gcc/ada/s-osinte-interix.ads
+ 6ca92fdfebf847d8c5f234732ca91682  gcc/ada/s-osinte-irix-athread.ads
+ b61a777b08139409a647fbd83ec05b1c  gcc/ada/s-osinte-irix.adb
+ 97df677c640a7a13b429d797bef084ca  gcc/ada/s-osinte-irix.ads
+ 01e0448336ca859326baa13beeb75fa9  gcc/ada/s-osinte-linux-alpha.ads
+ b21947cd9b5a0c698be05d7f370c433e  gcc/ada/s-osinte-linux-fsu.ads
+ 4b49166d2c2e840eee12089c9979366b  gcc/ada/s-osinte-linux-hppa.ads
+ 16f7ee96dddcdc6a6c48c5562123adae  gcc/ada/s-osinte-linux.ads
+ 2e37059dbe44bacf36c514469c42fd52  gcc/ada/s-osinte-lynxos-3.adb
+ 7f164b58abb8ec008b60a20afdab5e0a  gcc/ada/s-osinte-lynxos-3.ads
+ d200685a39b843864a37c15a833d7b56  gcc/ada/s-osinte-lynxos.adb
+ 3ec4123708efd5904f6597703dda6cc3  gcc/ada/s-osinte-lynxos.ads
+ d103af0c3cf86ebfb3e2bf3c84e05ce9  gcc/ada/s-osinte-mingw.ads
+ 7a75b6c92e999fe70c36f58e77444329  gcc/ada/s-osinte-os2.adb
+ c968828695fd11f3ccea742bdf607f04  gcc/ada/s-osinte-os2.ads
+ d9b70aceeeb5153563bce3eb2e9714b8  gcc/ada/s-osinte-posix.adb
+ 5bffcdfcdeee1369c2bcc6c3678af105  gcc/ada/s-osinte-rtems.adb
+ c55593b97b448e798f85fab8d68e8045  gcc/ada/s-osinte-rtems.ads
+ 823752ff2adedca0c77fa7ace1d334e0  gcc/ada/s-osinte-solaris-fsu.ads
+ 345b2ab100615b07f9ae428e921fa317  gcc/ada/s-osinte-solaris-posix.ads
+ 03930e168ab488f7570fd5d5427664a1  gcc/ada/s-osinte-solaris.adb
+ 50d926b19ed1cc2306e2a663ad42e5f3  gcc/ada/s-osinte-solaris.ads
+ 36235ac1caa773779fde7c22dc473129  gcc/ada/s-osinte-tru64.adb
+ a5b6d4f7a50d8c82020e320aa7e368cf  gcc/ada/s-osinte-tru64.ads
+ 3aa6b96f7f34ea075d5c538aa7ecedcb  gcc/ada/s-osinte-unixware.adb
+ 2252e57d775fe63d79ef59dc5d1b9839  gcc/ada/s-osinte-unixware.ads
+ 0408ca9cd24b193daef12aba6386cd41  gcc/ada/s-osinte-vms.adb
+ 2b6b9fb4e635a1f860a8a238cd137cdd  gcc/ada/s-osinte-vms.ads
+ 2122c1846cf70241a13241b74967e267  gcc/ada/s-osinte-vxworks.adb
+ 95c32467efa274d3c028921728c1d8d3  gcc/ada/s-osinte-vxworks.ads
+ 20c3576596ecb949449f96068d5eb394  gcc/ada/s-osprim-mingw.adb
+ 8316664f47413497a14f9bffb71fa07a  gcc/ada/s-osprim-os2.adb
+ 887fc44a83d208eb575d9021bfae81db  gcc/ada/s-osprim-posix.adb
+ 087014345587559bdea1a7b7d1346a4e  gcc/ada/s-osprim-solaris.adb
+ e529998dc07d1ecfe71ac1040f70c019  gcc/ada/s-osprim-unix.adb
+ fb16a0d7bc64d558e361fc5e6c4939f6  gcc/ada/s-osprim-vms.adb
+ 0808dab9423092de17929f61c06b227e  gcc/ada/s-osprim-vms.ads
+ ffc21736c9d11a8d28e0bd4a87f831e0  gcc/ada/s-osprim-vxworks.adb
  dbe1e2b53384a3a2a24fb1c9adb5df35  gcc/ada/s-osprim.ads
  ecd38c8d2e8d4d991a3ec71af11a44a6  gcc/ada/s-pack03.adb
  9af27db5b99e1d7b85db98bc09bf0ed6  gcc/ada/s-pack03.ads
*************** dbea1739ffc58e7f43b54afee30298fd  gcc/ad
*** 1532,1638 ****
  7436d70ca5f1bbd3a897e354dd090302  gcc/ada/s-pack62.ads
  a08b72bb84a64b637750e22ac08dbc0a  gcc/ada/s-pack63.adb
  c2c530d4121c703113f0986f23e45d42  gcc/ada/s-pack63.ads
  912934ef1d814088fb62c338d43ff031  gcc/ada/s-parame.adb
  928bda6e8bfb5d621c219556134ace92  gcc/ada/s-parame.ads
! 31f0ae11647fd3d9ccbb66552abe9fcf  gcc/ada/s-parint.adb
! a6598bb1b632e3440e5f92a76ea58e85  gcc/ada/s-parint.ads
  45a4a1f7a1978d4d589ab9e52fdcb453  gcc/ada/s-pooglo.adb
! f6b71961a057c77c05c8ea9bc7d75b95  gcc/ada/s-pooglo.ads
  c7c8dd7ac7f232180b9d67845634fdd4  gcc/ada/s-pooloc.adb
  8230a5f89a7ba2b5f16eb6cc77207bcc  gcc/ada/s-pooloc.ads
! 28aa1bb31a3d75c10a055b6a66d30b60  gcc/ada/s-poosiz.adb
! 18a1a6020e5fbec8d5b2dad9b8c6a816  gcc/ada/s-poosiz.ads
  21ffbdbef84f208128c81d41ba7c23d6  gcc/ada/s-powtab.ads
  e0e504793d2a6fcaa1a9ed5775da05c8  gcc/ada/s-proinf.adb
  ebeb792f556c7839acd1e079eb7d6797  gcc/ada/s-proinf.ads
  6a418fc35dbf35c250104b2e5f77dc15  gcc/ada/s-purexc.ads
! b41098da0c66ef554786865a23763911  gcc/ada/s-rident.ads
! 7100b7f9aa61c84d0e9ca36194ce6fb0  gcc/ada/s-rpc.adb
  bb2d67daf3e06cd459971de715c24191  gcc/ada/s-rpc.ads
! 2594f6f07d9b0eee8a31a9ce42f914d3  gcc/ada/s-scaval.adb
! 8c3bb16761ddac837d762bb551e6ad8b  gcc/ada/s-scaval.ads
! 21a36b1c6ac2dc60b4ace60d2517ceb6  gcc/ada/s-secsta.adb
! 49b63dac56a4f36a090fb32f94f4298e  gcc/ada/s-secsta.ads
  bbf4616ec03ecfe5e4f218f67313aa43  gcc/ada/s-sequio.adb
  32192ea2b98021e59b78b14b7b16121f  gcc/ada/s-sequio.ads
  0d62316837084c5e4dcfd51654c61ac9  gcc/ada/s-shasto.adb
  b57d10911cfe5adfd1b5b682ad8cfb6e  gcc/ada/s-shasto.ads
  6a447e427e640cecc3a723feb60116da  gcc/ada/s-soflin.adb
! 4d0ab9f5423af49ac6731cfbd7cb5ad8  gcc/ada/s-soflin.ads
  1b2ecacd09dfee4ff976fedd65d0262a  gcc/ada/s-sopco3.adb
  c5d784388f95d22021d1f191303ac971  gcc/ada/s-sopco3.ads
  f6f1c4942e0bbf06a283ef8fcc39f7b1  gcc/ada/s-sopco4.adb
  2c934df2145a9c5348d4bb66ad327a9d  gcc/ada/s-sopco4.ads
  991b6aa7c976c8556e0851dfc7265bfa  gcc/ada/s-sopco5.adb
  63504024e3ed6aa8140de1b2ee51b833  gcc/ada/s-sopco5.ads
! 93ae1d4eba2a5f1ad29181dc2c93c3d3  gcc/ada/s-stache.adb
! 6e0cd93773f5217e1b126cfa4ee4b7dc  gcc/ada/s-stache.ads
  350f6a5a7dd8de813c87d82e9e76fe88  gcc/ada/s-stalib.adb
! 2b841ea8c9d4d5cfe5f2b5d2885cc107  gcc/ada/s-stalib.ads
! 7dc31b817638f84345f9fc59fe2d7e74  gcc/ada/s-stoele.adb
! 7eae70bd46620e6728811b97f6ab8566  gcc/ada/s-stoele.ads
  eedcb3c023757f70d7b775f5a6a4ddb9  gcc/ada/s-stopoo.adb
  d07e8ecc6165a0f1a8f59c659580e2d8  gcc/ada/s-stopoo.ads
! 9faff4a5a5eb05d32f93381aa819db58  gcc/ada/s-stratt.adb
  36567af6ad4984733ba35f9e2e96337f  gcc/ada/s-stratt.ads
  934e76257a7002f3ec9998ef73c7c7e6  gcc/ada/s-strcom.adb
  0384c61e05fb47aa0f1bb30506224a30  gcc/ada/s-strcom.ads
! e22a66d115b1f73a5b82bee388e2b8fd  gcc/ada/s-strops.adb
! 5a89c72296091d007bd3c670cb468cb9  gcc/ada/s-strops.ads
  30ba4d5da18129a7b9ebe12264b8f356  gcc/ada/s-strxdr.adb
! 39d3be26ce773fae943519f31b98c6ab  gcc/ada/s-taasde.adb
! 5468cd84338840481026c6d11cfe1843  gcc/ada/s-taasde.ads
  2c229f7d617dd30f8b46ea603ba63c6a  gcc/ada/s-tadeca.adb
  15a83d088796e0a31f1cca26e2df5964  gcc/ada/s-tadeca.ads
  2ac9d9bdbe856ec8c2b3a20aaaacc6d3  gcc/ada/s-tadert.adb
  10817739c7de59d1440562e07a7eaccd  gcc/ada/s-tadert.ads
! a8c16758634ecef13659b79828d268bf  gcc/ada/s-taenca.adb
! 0fd6421cd7d2bacca6a0cf5f187d6602  gcc/ada/s-taenca.ads
! fb2410c54f640f0545beffaad469c27f  gcc/ada/s-taprob.adb
  26d005113522a6b88d5eb2a625dccdfe  gcc/ada/s-taprob.ads
! 8532c286d78b0aa525a389ba4f35fda8  gcc/ada/s-taprop.ads
! e3a0c6179a338fcc0237ec8fceca1f27  gcc/ada/s-tarest.adb
! 2894d985c34ae20c030c0ea13e4a4567  gcc/ada/s-tarest.ads
! 338c303fd2dd0a4686839332ca8b03d1  gcc/ada/s-tasdeb.adb
! 7068ba6be60f119fb3a68fc35c9ec8c7  gcc/ada/s-tasdeb.ads
  b7dcb5e0b933abb4cedb9f7f6f175832  gcc/ada/s-tasinf.adb
  cd3f2faefd8bf4120d95c1134865d36e  gcc/ada/s-tasinf.ads
! db86918f8c479e44e657f65893d0e9b9  gcc/ada/s-tasini.adb
! 51939378ea8a1dc18064e608bccdcc9c  gcc/ada/s-tasini.ads
! a0d6e3849b3c6cc7c138b485f954f51a  gcc/ada/s-taskin.adb
! baeb415e433d617e9f6594e7ab90f360  gcc/ada/s-taskin.ads
! a59172cf36e92b312b18fe4eb3994aff  gcc/ada/s-tasque.adb
! 90235c41654ee47d926bfecc2c3b4358  gcc/ada/s-tasque.ads
! 82b70ef5f75b4004c6a18ada8b48811e  gcc/ada/s-tasren.adb
! 2fd315c8a57dec6242adeef2b67afca7  gcc/ada/s-tasren.ads
  b5ebc844760d704427674bf27dbb4cd7  gcc/ada/s-tasres.ads
! f86bc7cf29ed848c7ef77c1a2284c901  gcc/ada/s-tassta.adb
! f52e6a7eef811b757474abf274639010  gcc/ada/s-tassta.ads
! 935fb5164c0eb32ba7bb6ad216c26980  gcc/ada/s-tasuti.adb
! 79ac8e2ebc4945e86e50b647c37ea074  gcc/ada/s-tasuti.ads
! ec8faf872095aff176dc57664fba29a8  gcc/ada/s-tataat.adb
! bf301fe984d8be750f4bb40717587b9a  gcc/ada/s-tataat.ads
  0f8facca27f43350095fef78d3c57861  gcc/ada/s-thread.adb
! 17ad4ce9dc4acadd0693a29c73cee70a  gcc/ada/s-thread.ads
! bafe24e90b479b709026a25115f272f2  gcc/ada/s-tpinop.adb
! 3f9b2fffb0f2edd773c7b0905be03443  gcc/ada/s-tpinop.ads
! 6194ef9689f9076cb07f6a18798ae0be  gcc/ada/s-tpoben.adb
  4a6b12aa50b694d5937b9d20597dd5e6  gcc/ada/s-tpoben.ads
! a4caad1205bedaa02e561848435bd76b  gcc/ada/s-tpobop.adb
! bda6bbe7b44e988d16fed9de5721073c  gcc/ada/s-tpobop.ads
! 1817356e6ca335ee6f5ce12868b5572c  gcc/ada/s-tporft.adb
! b54f69ab5a3916f0878c98d3e23792a4  gcc/ada/s-tposen.adb
! c64af9b98a3f4ca3881f5bfbcebcfb87  gcc/ada/s-tposen.ads
  6bcfbc089c1d20f039f28b48b28211fd  gcc/ada/s-traceb.adb
  413168c1faab9bdd490b71d600411a7a  gcc/ada/s-traceb.ads
  14af7ad37db120ec8e306a781cfb83a2  gcc/ada/s-traces.adb
  67a22a2a10348d625be9320c7898d5f9  gcc/ada/s-traces.ads
  4cd225b7ec3161f082f65b2d0e849026  gcc/ada/s-traent.adb
  d34634f690d56153d24355e113d45173  gcc/ada/s-traent.ads
! 4637352142932849df542250949bdd56  gcc/ada/s-tratas.adb
! 29b8de4940a1644669548b1784445de9  gcc/ada/s-tratas.ads
! ab5e2d42b9708651c250b48b9ed9ed02  gcc/ada/s-unstyp.ads
! f6db458d8cde1d3e06512fcd20d00542  gcc/ada/s-vaflop.adb
  b57db9d88da51af18041b8f3dd36762f  gcc/ada/s-vaflop.ads
  c4b3b25ce34627daa585b9c4d6b360e7  gcc/ada/s-valboo.adb
  c14a9e60383f05120ed85b71893bb2a4  gcc/ada/s-valboo.ads
--- 1741,1914 ----
  7436d70ca5f1bbd3a897e354dd090302  gcc/ada/s-pack62.ads
  a08b72bb84a64b637750e22ac08dbc0a  gcc/ada/s-pack63.adb
  c2c530d4121c703113f0986f23e45d42  gcc/ada/s-pack63.ads
+ ab5ffeaa3ed125961e09bc35f4213a0f  gcc/ada/s-parame-ae653.ads
+ 770add43fcd523769a5d06cbe008cf6d  gcc/ada/s-parame-hpux.ads
+ a54aa2ef689bdb6bc32f5866a6b22a2d  gcc/ada/s-parame-linux.adb
+ 65f0160461b9b8576bba736493bb74f7  gcc/ada/s-parame-mingw.adb
+ a0bd1a774c42c74d08ec839d2eb99f74  gcc/ada/s-parame-os2.adb
+ 84a517fab35724ed785e717b1f5dfcbd  gcc/ada/s-parame-rtems.adb
+ d38d9f5a44aff668ce03612ecdf019eb  gcc/ada/s-parame-solaris.adb
+ 344ed8dfa057ee16a791aad079375f42  gcc/ada/s-parame-vms-restrict.ads
+ 2712585a404cfee5663daed3a974e732  gcc/ada/s-parame-vms.ads
+ c0f5c894f9499a36ce7d0ea3d84265d2  gcc/ada/s-parame-vxworks.ads
  912934ef1d814088fb62c338d43ff031  gcc/ada/s-parame.adb
  928bda6e8bfb5d621c219556134ace92  gcc/ada/s-parame.ads
! f43e8e0ee0ae50d2223d70fccfc54af0  gcc/ada/s-parint.adb
! e376ed83813fa82dad32feb573b46844  gcc/ada/s-parint.ads
  45a4a1f7a1978d4d589ab9e52fdcb453  gcc/ada/s-pooglo.adb
! aea11d4359dfc81d2ce28c6981a59e7c  gcc/ada/s-pooglo.ads
  c7c8dd7ac7f232180b9d67845634fdd4  gcc/ada/s-pooloc.adb
  8230a5f89a7ba2b5f16eb6cc77207bcc  gcc/ada/s-pooloc.ads
! ac3eb0e2c4b883a3fd515bd7b1f14fe2  gcc/ada/s-poosiz.adb
! 034d2d040cf3190d71b699d8d41d4d48  gcc/ada/s-poosiz.ads
  21ffbdbef84f208128c81d41ba7c23d6  gcc/ada/s-powtab.ads
+ 470652dfef23d09495bf7db4f2d0ccda  gcc/ada/s-proinf-irix-athread.adb
+ e731026149e4b3e4433fa74f03b7b221  gcc/ada/s-proinf-irix-athread.ads
  e0e504793d2a6fcaa1a9ed5775da05c8  gcc/ada/s-proinf.adb
  ebeb792f556c7839acd1e079eb7d6797  gcc/ada/s-proinf.ads
  6a418fc35dbf35c250104b2e5f77dc15  gcc/ada/s-purexc.ads
! 076c01244532a79ba8def4c6dfb822f6  gcc/ada/s-restri.adb
! f7535e5944bbeac139efa4d1af5ba73c  gcc/ada/s-restri.ads
! a12a9bf08e3c63b679b9be11803ae9b5  gcc/ada/s-rident.ads
! 77a1a589c5a8dfca1477d64a930cc153  gcc/ada/s-rpc.adb
  bb2d67daf3e06cd459971de715c24191  gcc/ada/s-rpc.ads
! 510dc2de938c61002ee96252f438bd7d  gcc/ada/s-scaval.adb
! 24089e60da840820abcddfc1aa3b9304  gcc/ada/s-scaval.ads
! 9d9363c8a6e066d60373f8358b98b3d4  gcc/ada/s-secsta.adb
! afff7b4850595cb6d5300e17498dd0c8  gcc/ada/s-secsta.ads
  bbf4616ec03ecfe5e4f218f67313aa43  gcc/ada/s-sequio.adb
  32192ea2b98021e59b78b14b7b16121f  gcc/ada/s-sequio.ads
  0d62316837084c5e4dcfd51654c61ac9  gcc/ada/s-shasto.adb
  b57d10911cfe5adfd1b5b682ad8cfb6e  gcc/ada/s-shasto.ads
  6a447e427e640cecc3a723feb60116da  gcc/ada/s-soflin.adb
! 1d92c2e5d603e0a10cc1404cbedaddc0  gcc/ada/s-soflin.ads
! 2b3d862a85d87ef12317768bd9a04309  gcc/ada/s-solita.adb
! a97e71387728d3f43a881c165a874cf1  gcc/ada/s-solita.ads
  1b2ecacd09dfee4ff976fedd65d0262a  gcc/ada/s-sopco3.adb
  c5d784388f95d22021d1f191303ac971  gcc/ada/s-sopco3.ads
  f6f1c4942e0bbf06a283ef8fcc39f7b1  gcc/ada/s-sopco4.adb
  2c934df2145a9c5348d4bb66ad327a9d  gcc/ada/s-sopco4.ads
  991b6aa7c976c8556e0851dfc7265bfa  gcc/ada/s-sopco5.adb
  63504024e3ed6aa8140de1b2ee51b833  gcc/ada/s-sopco5.ads
! 85a8a32541e840ff5f4e59b57a30e7da  gcc/ada/s-stache.adb
! d3d283c13b932284017c1c4965077fa7  gcc/ada/s-stache.ads
  350f6a5a7dd8de813c87d82e9e76fe88  gcc/ada/s-stalib.adb
! 05c1f4e39695d0bbbe9f0f5d1d789bfd  gcc/ada/s-stalib.ads
! 27e9c70e73bee7b60af2f047084de6a7  gcc/ada/s-stchop-vxworks.adb
! ab78bc28334ae3e5b4294581403322a8  gcc/ada/s-stchop.adb
! ecf7b27da92c96f0cda54f91e3b5fc14  gcc/ada/s-stchop.ads
! 42c7bb8e656e4c68f4f74e690c35571a  gcc/ada/s-stoele.adb
! 4a7eef6af2a4f5a33214224d969d1d58  gcc/ada/s-stoele.ads
  eedcb3c023757f70d7b775f5a6a4ddb9  gcc/ada/s-stopoo.adb
  d07e8ecc6165a0f1a8f59c659580e2d8  gcc/ada/s-stopoo.ads
! b84e3b5760c0d3f13c6436a99f7b992b  gcc/ada/s-stratt.adb
  36567af6ad4984733ba35f9e2e96337f  gcc/ada/s-stratt.ads
  934e76257a7002f3ec9998ef73c7c7e6  gcc/ada/s-strcom.adb
  0384c61e05fb47aa0f1bb30506224a30  gcc/ada/s-strcom.ads
! 21364781ccc3f75c8d21b14b024686d0  gcc/ada/s-strops.adb
! b4afa477f3300c057e359ed9445d21f7  gcc/ada/s-strops.ads
  30ba4d5da18129a7b9ebe12264b8f356  gcc/ada/s-strxdr.adb
! a2ddfde03e350e4c312e6d00486f0118  gcc/ada/s-taasde.adb
! 7a34c52c55f7c32be7f183e48f1344ce  gcc/ada/s-taasde.ads
  2c229f7d617dd30f8b46ea603ba63c6a  gcc/ada/s-tadeca.adb
  15a83d088796e0a31f1cca26e2df5964  gcc/ada/s-tadeca.ads
  2ac9d9bdbe856ec8c2b3a20aaaacc6d3  gcc/ada/s-tadert.adb
  10817739c7de59d1440562e07a7eaccd  gcc/ada/s-tadert.ads
! 99eeaf4d410b86464a7e8efb09747a46  gcc/ada/s-taenca.adb
! 814d50022ccb3deb138d043192644c08  gcc/ada/s-taenca.ads
! 6f700093818831ff7ba1f314583e1a8a  gcc/ada/s-taprob.adb
  26d005113522a6b88d5eb2a625dccdfe  gcc/ada/s-taprob.ads
! fd357f4b760a7148197d97cf5ebdc0df  gcc/ada/s-taprop-dummy.adb
! 90b2d3d570cfbdc697f8ad88b821bd9a  gcc/ada/s-taprop-hpux-dce.adb
! ba9985e9d79ba605f48dfbb3f0275b01  gcc/ada/s-taprop-irix-athread.adb
! 05c1e565c60130f1deb3467d8e2c288e  gcc/ada/s-taprop-irix.adb
! 03c9783ec56a554ed2075dccec4a241f  gcc/ada/s-taprop-linux.adb
! 25ac0d95b66e30690cf425b6b76d40ba  gcc/ada/s-taprop-lynxos.adb
! 9b9003faa51e9f16e4c610d4289aa7a2  gcc/ada/s-taprop-mingw.adb
! ec75347c257421973088eed780201be3  gcc/ada/s-taprop-os2.adb
! df6e52e4d32bde7882cbd4cc44ad9fea  gcc/ada/s-taprop-posix.adb
! 72a1e3831de2fff6f72a2b39dfc5baab  gcc/ada/s-taprop-solaris.adb
! 5b7dfbc50386597084a987845b2b0a13  gcc/ada/s-taprop-tru64.adb
! ed72cb1eb7a08cf3dffb423643e76be6  gcc/ada/s-taprop-vms.adb
! c1c21c14411f01bcbded82342721041a  gcc/ada/s-taprop-vxworks.adb
! 9a7c6950ef49dbe03e604dddb6bd57be  gcc/ada/s-taprop.ads
! 03012a5ff752876a3f06247809361d8b  gcc/ada/s-tarest.adb
! f41ef94013ae64744a130d6e5e059fcc  gcc/ada/s-tarest.ads
! 5deddccb1cda63bfac8ba47c4d774507  gcc/ada/s-tasdeb.adb
! 80f5105fc73c754d724ebe3be150450b  gcc/ada/s-tasdeb.ads
! f1f14318b2048caf7ec7c2df47a7d04c  gcc/ada/s-tasinf-irix-athread.adb
! 04767ed3e7ecb8404fc5be8eb702b08a  gcc/ada/s-tasinf-irix-athread.ads
! 8404af95ad586f9663d5b4bb74f2b5c2  gcc/ada/s-tasinf-irix.ads
! f3420d99d67f23c289631c5531bf5576  gcc/ada/s-tasinf-solaris.adb
! d25bfd1fb80051fcc4602be176c61b24  gcc/ada/s-tasinf-solaris.ads
! 5c597e23bf0d7467f786150f2ca5152c  gcc/ada/s-tasinf-tru64.ads
  b7dcb5e0b933abb4cedb9f7f6f175832  gcc/ada/s-tasinf.adb
  cd3f2faefd8bf4120d95c1134865d36e  gcc/ada/s-tasinf.ads
! a177e296325ec65eee0a72358a93778f  gcc/ada/s-tasini.adb
! 70238ee21ba3d51a6abd1edba9584304  gcc/ada/s-tasini.ads
! 7eba538e83bac08eec90c49c54384b38  gcc/ada/s-taskin.adb
! ca731a8cf4a44dade1269b3d7511bc6e  gcc/ada/s-taskin.ads
! ea7627d2294f346b65f028bb69b37892  gcc/ada/s-taspri-dummy.ads
! 3fca1449846d25b40a022f90f4a59e3b  gcc/ada/s-taspri-hpux-dce.ads
! d42fe0b357a26ee02d2818738326f71e  gcc/ada/s-taspri-linux.ads
! c66ea109b05d5b087044c7fc5b91c3c7  gcc/ada/s-taspri-lynxos.ads
! 0e825c5c3e6e726940f00a89cc7c4eaf  gcc/ada/s-taspri-mingw.ads
! 2b1f83335f65f2edff8c93b9e05aee6d  gcc/ada/s-taspri-os2.ads
! ebc94655df0d68ac6dfc96e855a3ffb3  gcc/ada/s-taspri-posix.ads
! 46e2ffda946fce31aea7f169315d4398  gcc/ada/s-taspri-solaris.ads
! 346497b8f677224dbe1008f8656ae857  gcc/ada/s-taspri-tru64.ads
! d4d1ce3fa1eacbf65392a49e4a68353a  gcc/ada/s-taspri-vms.ads
! d4cdea56cb3e5917b0342a985dd59a63  gcc/ada/s-taspri-vxworks.ads
! a3ce482610a20dc068a5ff13f769a865  gcc/ada/s-tasque.adb
! 26e979a215a2029040dafcd2483ac744  gcc/ada/s-tasque.ads
! 4a48a4306b447267e7aaf640e46db415  gcc/ada/s-tasren.adb
! 377523c783b2a453690c1ce22c9874c1  gcc/ada/s-tasren.ads
  b5ebc844760d704427674bf27dbb4cd7  gcc/ada/s-tasres.ads
! 5a85613f372dfd7147e1f5c247dfb60f  gcc/ada/s-tassta.adb
! 8bfa559334181d89709e87fa4a2aca36  gcc/ada/s-tassta.ads
! cf19de40020c5d7a6c256a00a77ff6ab  gcc/ada/s-tasuti.adb
! 1633cdbdb1441e2317d1faa8df238656  gcc/ada/s-tasuti.ads
! 2156b15751db33fe2b71f0904486728e  gcc/ada/s-tataat.adb
! 1433a3f125ef24228cb6b196f9b3ffec  gcc/ada/s-tataat.ads
! a0a1fcd5fc222087a37fdb6b046f7106  gcc/ada/s-tfsetr-default.adb
! 15bd1ba7359b6a008a58df29a652bfa3  gcc/ada/s-tfsetr-vxworks.adb
  0f8facca27f43350095fef78d3c57861  gcc/ada/s-thread.adb
! 4d70adeaaf695f604f748011e641fbff  gcc/ada/s-tpinop.adb
! 2984d19dbfeeb3a272991e73a2cb3598  gcc/ada/s-tpinop.ads
! 47550145dc8266f4d8d681e298c4c152  gcc/ada/s-tpoben.adb
  4a6b12aa50b694d5937b9d20597dd5e6  gcc/ada/s-tpoben.ads
! 58b06fa1f5a57d2a15b5448b49a58d5a  gcc/ada/s-tpobop.adb
! b71b45da801e1870ec40fe5b7dfbf4cd  gcc/ada/s-tpobop.ads
! 25c5a035c442be558f620e04168c200c  gcc/ada/s-tpopde-vms.adb
! 8bd317080022a0f3ddcf673d4a1d8474  gcc/ada/s-tpopde-vms.ads
! 19215b5ba21983642b1e3eb43ad04f91  gcc/ada/s-tpopsp-lynxos.adb
! 58e442eac7b8d30d95f3fc5930e69f65  gcc/ada/s-tpopsp-posix-foreign.adb
! cc6c3a33d1527d920e2dbb0adc38bc61  gcc/ada/s-tpopsp-posix.adb
! dba7c9d3bcbe7451295588f50de407d2  gcc/ada/s-tpopsp-rtems.adb
! 1e46851201ea9fb7b6bc7690b41b5104  gcc/ada/s-tpopsp-solaris.adb
! 8c05bdf1a29e74cfa0ede8c99022b15a  gcc/ada/s-tpopsp-vxworks.adb
! 01046ce0c42d5fd3ff60e679e198eade  gcc/ada/s-tporft.adb
! 400e29965b594d46e2a23be5ce7fad68  gcc/ada/s-tposen.adb
! 2adcff79bd3bf007aa5ade84a3529cba  gcc/ada/s-tposen.ads
! 67c8473c8654d0b18a47e915795e31c9  gcc/ada/s-traceb-hpux.adb
! 0557b8b059913110276aa29018d1bba7  gcc/ada/s-traceb-mastop.adb
  6bcfbc089c1d20f039f28b48b28211fd  gcc/ada/s-traceb.adb
  413168c1faab9bdd490b71d600411a7a  gcc/ada/s-traceb.ads
+ 8d4f6d3b49ed3a081faa922c59ea9f3f  gcc/ada/s-traces-default.adb
  14af7ad37db120ec8e306a781cfb83a2  gcc/ada/s-traces.adb
  67a22a2a10348d625be9320c7898d5f9  gcc/ada/s-traces.ads
+ a9e71f1d6e68bfad86200ed598adbb49  gcc/ada/s-traent-vms.adb
+ 8146f91c0f1e53831ca46f8887b00503  gcc/ada/s-traent-vms.ads
  4cd225b7ec3161f082f65b2d0e849026  gcc/ada/s-traent.adb
  d34634f690d56153d24355e113d45173  gcc/ada/s-traent.ads
! 93e87c25d41d5f9777d460ed9440804d  gcc/ada/s-trafor-default.adb
! 7ba88114f79466f907e5a4a1f4c8bb8d  gcc/ada/s-trafor-default.ads
! b80edc0810a1b991d8f01b6be29e1df0  gcc/ada/s-tratas-default.adb
! e30ac6ec6652cda503d5579164ff1667  gcc/ada/s-tratas.adb
! 2f1123c97be66cb8e7f3b32ac5c213cc  gcc/ada/s-tratas.ads
! 214d458d6fabe04450968a833a45783d  gcc/ada/s-unstyp.ads
! 64e13ec79ffc9ac886eb33e4f3cf49bb  gcc/ada/s-vaflop-vms-alpha.adb
! 7864d644ded9c28da338aa257a358e91  gcc/ada/s-vaflop.adb
  b57db9d88da51af18041b8f3dd36762f  gcc/ada/s-vaflop.ads
  c4b3b25ce34627daa585b9c4d6b360e7  gcc/ada/s-valboo.adb
  c14a9e60383f05120ed85b71893bb2a4  gcc/ada/s-valboo.ads
*************** fe9f5150e8b295bef2ed021dbbf411bc  gcc/ad
*** 1656,1679 ****
  53ac320a30db7c64710890edbf6e4cd9  gcc/ada/s-valuns.ads
  6e3e67c9b590f54b6f8998f08e0bbf2e  gcc/ada/s-valuti.adb
  1911566c737ce86033f5d69f99eaa750  gcc/ada/s-valuti.ads
! a069c02df62101fe0a3a8ebf734d0a98  gcc/ada/s-valwch.adb
! 66c03e05c9696792d7538db14222995b  gcc/ada/s-valwch.ads
  ca119aa4de512de7a930622df52a38f3  gcc/ada/s-veboop.adb
  2a29affcc34cd9d77857547a0365c8e8  gcc/ada/s-veboop.ads
  33e3419b256231403d87f743cca5a397  gcc/ada/s-vector.ads
  c1ce2bf39779166ac1df3cf151967082  gcc/ada/s-vercon.adb
  e78fb2e7657a2bb7806bd8e21faed74c  gcc/ada/s-vercon.ads
! ffc8c02bc56bbcd9471100cd665f3ef6  gcc/ada/s-vmexta.adb
! f8b82f436bfdf58f4bd56f4f677c623a  gcc/ada/s-vmexta.ads
! eb815ca17fb3259061d0e3d7e7c74460  gcc/ada/s-wchcnv.adb
! 869e56ef8406eba8610e046763d44c9e  gcc/ada/s-wchcnv.ads
! 833e8e393bafd27f355f31349a2ddd5b  gcc/ada/s-wchcon.ads
  5a8117b3e4febb1f217142362c64b2fd  gcc/ada/s-wchjis.adb
  916077b821a22d27024f9205e0ad169a  gcc/ada/s-wchjis.ads
! 21b1aaca5a6feb1df0212deb3660a4b5  gcc/ada/s-wchstw.adb
! ed203afb341b1d21245ef44c39364116  gcc/ada/s-wchstw.ads
! 0f6ea40843daf5f36ab3413b09abb74a  gcc/ada/s-wchwts.adb
! 2b557208f17e6d4af64c2dbfa956fcfd  gcc/ada/s-wchwts.ads
  df69ec84fee4138ba3521a588543366c  gcc/ada/s-widboo.adb
  c06b918308c2c7135735aaa77a4a0db5  gcc/ada/s-widboo.ads
  bb5063c5a174db913f205ddf221c9833  gcc/ada/s-widcha.adb
--- 1932,1962 ----
  53ac320a30db7c64710890edbf6e4cd9  gcc/ada/s-valuns.ads
  6e3e67c9b590f54b6f8998f08e0bbf2e  gcc/ada/s-valuti.adb
  1911566c737ce86033f5d69f99eaa750  gcc/ada/s-valuti.ads
! 7f0b9b5ebcd00bb2deaabfdc5fea4e1d  gcc/ada/s-valwch.adb
! 3d1cce587737e408de28cb98669d8046  gcc/ada/s-valwch.ads
  ca119aa4de512de7a930622df52a38f3  gcc/ada/s-veboop.adb
  2a29affcc34cd9d77857547a0365c8e8  gcc/ada/s-veboop.ads
  33e3419b256231403d87f743cca5a397  gcc/ada/s-vector.ads
  c1ce2bf39779166ac1df3cf151967082  gcc/ada/s-vercon.adb
  e78fb2e7657a2bb7806bd8e21faed74c  gcc/ada/s-vercon.ads
! e5f6c9ad10d6e175621d30b2bc89503d  gcc/ada/s-vmexta.adb
! 65663105d0fc453b49747aa832326829  gcc/ada/s-vmexta.ads
! fb0ca0b2d65da5c973fcd50257b252a1  gcc/ada/s-vxwork-alpha.ads
! 4e114e658fe9e2ae3653e1dd8d024893  gcc/ada/s-vxwork-m68k.ads
! 8cef09be1dcbb7a4e4cf808549ba6591  gcc/ada/s-vxwork-mips.ads
! 901f3ad4e6f31b418474d008bf499d5f  gcc/ada/s-vxwork-ppc.ads
! 91dd1f622f1ae5d9803d7cf1e0b91cbd  gcc/ada/s-vxwork-sparcv9.ads
! ad2f73765e7bd1e9fe666c56c4e5eefa  gcc/ada/s-vxwork-x86.ads
! 91a1312b04f451c2fe3fb6d5ee8af797  gcc/ada/s-vxwork-xscale.ads
! 24a04720ca35cbd50cf812e9c35be8d6  gcc/ada/s-wchcnv.adb
! 4bdbaf32b29aaf9615d0b9f95b46aae1  gcc/ada/s-wchcnv.ads
! ddd0e8eb8538efe3e3cf5947dba654b7  gcc/ada/s-wchcon.ads
  5a8117b3e4febb1f217142362c64b2fd  gcc/ada/s-wchjis.adb
  916077b821a22d27024f9205e0ad169a  gcc/ada/s-wchjis.ads
! 9b5ff72be35012c51687113e4a937df0  gcc/ada/s-wchstw.adb
! af82a52a45d9d1a25a3b669ae400f86f  gcc/ada/s-wchstw.ads
! 13e8b6019a0e85183f56580e0654bff5  gcc/ada/s-wchwts.adb
! 93d2c82917e05031297ac0b99d5ea639  gcc/ada/s-wchwts.ads
  df69ec84fee4138ba3521a588543366c  gcc/ada/s-widboo.adb
  c06b918308c2c7135735aaa77a4a0db5  gcc/ada/s-widboo.ads
  bb5063c5a174db913f205ddf221c9833  gcc/ada/s-widcha.adb
*************** b7736e0a8fcebf4789066f708c40cbd9  gcc/ad
*** 1684,1976 ****
  3c2b74793045dfac541ed4d974ba3022  gcc/ada/s-widlli.ads
  2dcbb1c16034a8c5c2b65ce9f13dc126  gcc/ada/s-widllu.adb
  8a6c0547d38120ee8d2d4bce7f051e1c  gcc/ada/s-widllu.ads
! 19ada96c4522a51455756b0b7f6e934c  gcc/ada/s-widwch.adb
! 3a97a6df94eb0dcae6e6ffed700e59df  gcc/ada/s-widwch.ads
! d72278edf7873b15841310c9929812e1  gcc/ada/s-wwdcha.adb
! b2a693593a20256f18f055f764a81131  gcc/ada/s-wwdcha.ads
! bcf12bcfb3daf3737ac2452ff07c2927  gcc/ada/s-wwdenu.adb
! 2b106403af38726697c6ad35b27e8d73  gcc/ada/s-wwdenu.ads
! 6d0d958c008acee9c2fbc142433f63eb  gcc/ada/s-wwdwch.adb
! f4c1a519821dbdb9a4a1473bc57a5780  gcc/ada/s-wwdwch.ads
  55fe0afe4349839af69bdc1700880ac9  gcc/ada/scans.adb
! c50aeed1a172267ed28d26c371117b60  gcc/ada/scans.ads
! a5251e2b6a7bd049924988879df8816a  gcc/ada/scn.adb
! b7fd1689bfb33475cd059d4050b85982  gcc/ada/scn.ads
! 9b336f740596187be8099b165cb5eeb3  gcc/ada/scng.adb
! 87f2b29d4c77f68f9a08cc313d4c570a  gcc/ada/scng.ads
  189df994310b603b92cb61b38070f5b9  gcc/ada/sdefault.ads
! cd67526249326b58ed5f64489b5aad91  gcc/ada/sem.adb
! 68d849512d340c93e59e9df2f8825d12  gcc/ada/sem.ads
! a677e8b74246e3dfc2f8f0ff678aeb1c  gcc/ada/sem_aggr.adb
  2fa7867e523a286223ecd3b8a52a2f0c  gcc/ada/sem_aggr.ads
! b495c60a08727b77b4c3c54ba166d00c  gcc/ada/sem_attr.adb
  277985011f152fa6d681f22cbf114e36  gcc/ada/sem_attr.ads
! 871a60a96d9f243d4a8732a14464603c  gcc/ada/sem_case.adb
  29e629233a0c490f5072f12cf932ba28  gcc/ada/sem_case.ads
! b91cd4d7713470932824d6e430785469  gcc/ada/sem_cat.adb
  8f61bc33259a5081eb522ddc22458e35  gcc/ada/sem_cat.ads
! 12c309e203601a2d5c3d76bb4eb0723d  gcc/ada/sem_ch10.adb
! 496f1dff3a99df2c985957953d1221ea  gcc/ada/sem_ch10.ads
! fe2ce07176712c305e87b78d9b9b7ad3  gcc/ada/sem_ch11.adb
  618f30e2ae7e6a60d24e9e9a7cf82dbb  gcc/ada/sem_ch11.ads
! 081e144cc98b8f957d8d15d8a1939179  gcc/ada/sem_ch12.adb
  fbd6351b8dd9b1f488f700d0a50dbb42  gcc/ada/sem_ch12.ads
! 943573a10901de2905096f5fa0301665  gcc/ada/sem_ch13.adb
! 8fb4779beae357cacd4c9fd82be60a63  gcc/ada/sem_ch13.ads
! 12206a4d06291c21e69c3008a9561872  gcc/ada/sem_ch2.adb
  bbbd33bef0a1199c3399b0836f99c571  gcc/ada/sem_ch2.ads
! 519b2c60fb30e578f05e741807019f78  gcc/ada/sem_ch3.adb
! ce16d14ff1b760f4788f4af02302deaf  gcc/ada/sem_ch3.ads
! fffe470ad6e93467f38f7bd7e0f07176  gcc/ada/sem_ch4.adb
  31c9e996c4f15c04ca07bbe55d002481  gcc/ada/sem_ch4.ads
! cb33f3216f3a8bb7d297ebea6d9e1297  gcc/ada/sem_ch5.adb
  9b5561d7fe7e7fbe480b67b56c877fe3  gcc/ada/sem_ch5.ads
! d758db1eb602902e680829cafe189f38  gcc/ada/sem_ch6.adb
  589903b1e52fbddfae3322c899e7aa1b  gcc/ada/sem_ch6.ads
! c6e2167d69486c8f8e2cdccabf35af91  gcc/ada/sem_ch7.adb
  94c7f641da57a315ec47682d2b860772  gcc/ada/sem_ch7.ads
! 1d4fbd78c678bca000a0e1a64b462400  gcc/ada/sem_ch8.adb
! 20ee0ccde03fbdc42a3abdc98603b9af  gcc/ada/sem_ch8.ads
! d4bd4c3bbbe2b224b1e669f1058fc9af  gcc/ada/sem_ch9.adb
  becd3aa032d2f77049f18e904d3a4aa3  gcc/ada/sem_ch9.ads
! 0e8425f5d42c870784f926503ad3247b  gcc/ada/sem_disp.adb
  6c81f3f6696aaeb0f827a9a0fbe44946  gcc/ada/sem_disp.ads
! 4a01e16f5725ef3abbb5741833faee0f  gcc/ada/sem_dist.adb
! 5eea17f56b881f061511c3567a12af01  gcc/ada/sem_dist.ads
! bf09cb5a0baf2ce2c7b33cb3e7d6c4fe  gcc/ada/sem_elab.adb
  2d2d3e7aa814783898ebe2fb52c72eff  gcc/ada/sem_elab.ads
! 9ca02ea4e4d0e392299daf300d1fe786  gcc/ada/sem_elim.adb
! 2eae37731101eca48c9fa502c44e9761  gcc/ada/sem_elim.ads
! 145ec47af2039f2b1693dd3e4402f329  gcc/ada/sem_eval.adb
! cad8ea4944f098dcca9034b5bcfaf380  gcc/ada/sem_eval.ads
  27a73b06810bd638fe4573ce1455e1a9  gcc/ada/sem_intr.adb
  e78adf8a709aa37ff87baed5fa36d9fe  gcc/ada/sem_intr.ads
  a461cad6d69b2ecd920aa36075636571  gcc/ada/sem_maps.adb
  f99da3253b3bec5d0df0eeaddf7eb2eb  gcc/ada/sem_maps.ads
  ad26afeadf07ae5d54b118f9387933d2  gcc/ada/sem_mech.adb
  a80072efaf515a6cceee8a3a80c7674d  gcc/ada/sem_mech.ads
! 84bd96b04ad6b21055ea2a6098a6fd8b  gcc/ada/sem_prag.adb
! a80124376940319fa97247ade2f2124d  gcc/ada/sem_prag.ads
! 7a565157b1aaca7a7410d1aaf05c6144  gcc/ada/sem_res.adb
  7c830aeab8aa51c0e37d30910a7dbf95  gcc/ada/sem_res.ads
  24e3f351459fd68a15a1175d3602bb3d  gcc/ada/sem_smem.adb
  2d964a99047d20828b9bee94b3a8330f  gcc/ada/sem_smem.ads
! e4c125a9d98984065e2fec5c21ff1edc  gcc/ada/sem_type.adb
! 8dd2cc56d349d39bd0369df5a391e08f  gcc/ada/sem_type.ads
! 0b729180b7090cc1ee9b690220e0e74d  gcc/ada/sem_util.adb
! 333c74c2b2a1c6056cd2e1d7863018ba  gcc/ada/sem_util.ads
  6c8b11390f678dac8a0eb5e3be6d4b94  gcc/ada/sem_vfpt.adb
  c001fb1556f3c287957109dff3c55dfb  gcc/ada/sem_vfpt.ads
! e96bb57b4d5d8b96dc9e2453c90363f6  gcc/ada/sem_warn.adb
  97164b827c37c9dc3d77b865f24a0438  gcc/ada/sem_warn.ads
  eff0ac4acd2ab040858d7c8e92770219  gcc/ada/sequenio.ads
! 612d347b1c126e82748643ec581b1bc8  gcc/ada/sfn_scan.adb
! 89f4740a2d55f7da4b106491fc850477  gcc/ada/sfn_scan.ads
  3ad2e7c963d4dfc6a9edb310aca37e48  gcc/ada/sinfo-cn.adb
  be6f8547b4847a849951561f11d301a3  gcc/ada/sinfo-cn.ads
! bebd9ba1f8557f99f0d1265fa665099f  gcc/ada/sinfo.adb
! 972b3805a09421a7020b64e7e616d25f  gcc/ada/sinfo.ads
! 1ec0abb23e36e391d83b11a03dda611b  gcc/ada/sinput-c.adb
! e33aa9dc34eb9e6b9944a5c130df76ca  gcc/ada/sinput-c.ads
  84506a9525874b92248b377aa43c8b29  gcc/ada/sinput-d.adb
  6839c4a29c40f33a262e2292a6c00b62  gcc/ada/sinput-d.ads
! a96645263494cfdbb9585596951b95b3  gcc/ada/sinput-l.adb
! 122b292fc5aca723ced19471ceb1b256  gcc/ada/sinput-l.ads
  eed7bf462842ce66325acf86157b430a  gcc/ada/sinput-p.adb
  5127919cea6fca8217fbc566f0e67b9b  gcc/ada/sinput-p.ads
! 40e40ccc9584d653f107709ba01b9199  gcc/ada/sinput.adb
! a3e5db6526b34d789ecb68d5174da5e1  gcc/ada/sinput.ads
! c6fc505ba39a207834f649cad63ed5aa  gcc/ada/snames.adb
! 9408d763872430d288b9bc6b367ae162  gcc/ada/snames.ads
! 5e214f3c664e440fdb1b3af093b9aff0  gcc/ada/snames.h
! 70c4c1898786db1d0df7c46470420b7e  gcc/ada/socket.c
! 248bf467ec690c0d045a991c105987bf  gcc/ada/sprint.adb
  14fa09ba32094ddb8c8bb35c97f6cc02  gcc/ada/sprint.ads
  1345f5c7d82d3975e223276fce95f75b  gcc/ada/stand.adb
! 32db1c399fb48f24182d1a5e1b8eccfa  gcc/ada/stand.ads
! b264d086a57e047b1a1eb0e1ec1261e3  gcc/ada/stringt.adb
! bfae79ede7f956b56403a772e6611e58  gcc/ada/stringt.ads
  1595cf4849923553febf03c00a9af021  gcc/ada/stringt.h
! 39e4f8d37dd1fbf9b94d7c68085d0cbc  gcc/ada/style.ads
! ceb89823da59a06263a994cfee7a7e6b  gcc/ada/styleg-c.adb
  77adec648a838532ff3b7185c35b1f23  gcc/ada/styleg-c.ads
! 2e7f2bedfbf0ef8482ff3a5d74e18658  gcc/ada/styleg.adb
! 4e21f2919d1a3df947c922614e486ee6  gcc/ada/styleg.ads
! ce0ad6b57998f1604780adb2e1c1a86f  gcc/ada/stylesw.adb
! becb6f6d920ed70f4b70ebe5bba2579b  gcc/ada/stylesw.ads
! e8e4de6f80a9c66df7cb422d07f87dd6  gcc/ada/switch-b.adb
  05595840e5499da53edd9e352bbcd4c2  gcc/ada/switch-b.ads
! 224cbb2063e53e6ccc8bebd3fa9d0381  gcc/ada/switch-c.adb
  9a9344995630035f56e579b3718142f0  gcc/ada/switch-c.ads
! cde0409a41e8332adf3c8f7d5a3aeeb7  gcc/ada/switch-m.adb
  ab1025512e257c0fb33ee6a4c3e5872e  gcc/ada/switch-m.ads
! 4215e6334fb5440a19a8fec4460f5394  gcc/ada/switch.adb
  c60b3f696e2b5ec1276d65fc37bfe2a7  gcc/ada/switch.ads
  2625d3d5d73037d825b2470e4b46bf18  gcc/ada/symbols.adb
! 9b9274741487374dccb9bc4531b66871  gcc/ada/symbols.ads
! de29b72ff69ca2f96e2d7fe1e9450728  gcc/ada/sysdep.c
! b34c169a5ac7759935a6dd43cb2bc4c5  gcc/ada/system.ads
! 20912ea15fa61503eeb7b81c27596a8c  gcc/ada/table.adb
  da14f5df2798690182d7a2032595aa6f  gcc/ada/table.ads
! 1673f028ab807a47a5f2788c402a9f41  gcc/ada/targparm.adb
! 572688725162dba6f40f52ddb6b14b42  gcc/ada/targparm.ads
! 831b978ecd542b69b0418b702152a5c9  gcc/ada/targtyps.c
  907bc51906a9800d9719f2613ba725b3  gcc/ada/tb-alvms.c
  a77975a17a063d70d79d61fe4105ea72  gcc/ada/tb-alvxw.c
! c76731a5e88fa978fc6c70ac9530c29a  gcc/ada/tbuild.adb
! dc8a6f149bad240e1b2f0ccc33cf5119  gcc/ada/tbuild.ads
  da4f1ef4c5546e0b43161a14be4ed6b5  gcc/ada/tempdir.adb
  797b8acde1dc4889010ff10e209c8bff  gcc/ada/tempdir.ads
  f5717a7760fca3b94072e1a9ca647291  gcc/ada/text_io.ads
! bcd1c2f40f9750938e6659beeec6255c  gcc/ada/tracebak.c
! 388829af27f579d51f98dbd231a25a07  gcc/ada/trans.c
  4ee604fc49a383e5489845161c250b00  gcc/ada/tree_gen.adb
  c0a26ebf76a3ca08bb9c19229536a510  gcc/ada/tree_gen.ads
  00ce657f8a61f603e044e1ee3d136b7b  gcc/ada/tree_in.adb
  f05f50ead0f88c5143fd2d24cfa3e860  gcc/ada/tree_in.ads
  e1b94dbcda2ca815bb2eeecb063273a1  gcc/ada/tree_io.adb
  960b494944ca2753245e4c9ba5b58536  gcc/ada/tree_io.ads
! 74d5b8cef4d7e7fc230eabbdf9959e39  gcc/ada/treepr.adb
  d771b2470d516c9782c85dc7a3b97903  gcc/ada/treepr.ads
  51a56ef22831b99523ec2c779765418d  gcc/ada/treeprs.adt
  ad91a479969fa8810534bd0cc11dd7b0  gcc/ada/ttypef.ads
! 8e8d948c9a65400837669476f15b8139  gcc/ada/ttypes.ads
! 3e65ce39e6b95e88b63adc403971e39a  gcc/ada/types.adb
! 28b33e8664635fbeeeca4d96e5903e45  gcc/ada/types.ads
! dd49741f52d52a52345ce5b97ea889ba  gcc/ada/types.h
! cae70f50e9586c6e08882718524b3cde  gcc/ada/ug_words
! cc91d2397bc0dd64e9031dc6abc3afeb  gcc/ada/uintp.adb
! 0ccdd59b25b651a2945043c521700e3b  gcc/ada/uintp.ads
! b82307f1fdf53f9754eba3aa7a51b2ad  gcc/ada/uintp.h
! 8bcc369287ff39b70990293e3fc2a670  gcc/ada/uname.adb
  2e0137be49c2e58672771b80ca09eafa  gcc/ada/uname.ads
  e2f3062fb49f7d82b4833291fa40307c  gcc/ada/unchconv.ads
  6bd5a24fef448adde6298f4677bb14ce  gcc/ada/unchdeal.ads
  7f8d2b9ddb2c580f308fe010cd1b4ff9  gcc/ada/urealp.adb
! 083b5fe1475a2562984aa7b4c0f987b8  gcc/ada/urealp.ads
  62d004f0ecd1dc03ee3a3b0575f49767  gcc/ada/urealp.h
! 765aa68fbbd5582e396a108094b0f310  gcc/ada/usage.adb
  7c4ba7bfa06a4aa92d14f8a6c38091aa  gcc/ada/usage.ads
! 6f2b63a69a23a9b1fc896737865574f9  gcc/ada/utils.c
! 166ba915eb9882bb4ac560561a12f953  gcc/ada/utils2.c
  8f1ff30a03238bdd6c707fbd98c36f4a  gcc/ada/validsw.adb
  ce3f24d2aa8662ac1c909c4cd92031f0  gcc/ada/validsw.ads
! 804143808d6f0b4b9a2eb3cf9fe76a51  gcc/ada/vms_conv.adb
! ff2d3727a66a7d9cc2d4109220b8ecb3  gcc/ada/vms_conv.ads
! f62ddfbb6540d1e1cedb1b88c5220071  gcc/ada/vms_data.ads
! 34f1a613e42bef44802ad0a634d1ac25  gcc/ada/vxaddr2line.adb
! 05691c2e9a26862b6f040343673e2ea8  gcc/ada/widechar.adb
! dbcbe994e37c043a93f8cdff9ae94965  gcc/ada/widechar.ads
  7840fcbd3ef32024b80396fbf532a8bf  gcc/ada/xeinfo.adb
! 53fb65dc7e554849ed470950cdb1ed78  gcc/ada/xgnatugn.adb
  164d80457843e39cf48814d52d103054  gcc/ada/xnmake.adb
! 1c69f94d93cb740265505cde39262858  gcc/ada/xr_tabls.adb
! f2ff55a7b728f5df593018038cb454ef  gcc/ada/xr_tabls.ads
  344279794c036b0e144c5f3ac5f24914  gcc/ada/xref_lib.adb
  35f9c53cce7ba90dcd2361c0f0da48aa  gcc/ada/xref_lib.ads
! 41d1bafe204a4cd55d4bb13ecb646ce8  gcc/ada/xsinfo.adb
! 759461159d5552a409fb2c996b33ec55  gcc/ada/xsnames.adb
! 778366cdded6f016c9592f02a0da4b26  gcc/ada/xtreeprs.adb
! 237bad9273d56f2145e29d6220ab3223  gcc/alias.c
! be1dd85992dfb012266f26aa39bff033  gcc/alloc-pool.c
  c279ff553669b088052503283575eb05  gcc/alloc-pool.h
! b3a05d0563502a0498501258e42871ba  gcc/attribs.c
! 4f98a5e3bafa477b6ce7d61b534c29c9  gcc/basic-block.h
! f83d570eb4b3476ee1d99708c5637981  gcc/bb-reorder.c
! 249b333abdb4723e09b932694315c9ad  gcc/bitmap.c
! d1ebc83778d01f8ef1336a882065bb6c  gcc/bitmap.h
! f9c5b6d4ad916d435b59739f764f5043  gcc/bt-load.c
! 6d9bbbbcf5850a7d937ff76b3e967f84  gcc/builtin-attrs.def
! 199ea5ae1396703cb25bd96babe1bb14  gcc/builtin-types.def
! c40c769fcbbd8835586f0ccd9f780f76  gcc/builtins.c
! 2951237f5506a15e20890d22e631379f  gcc/builtins.def
! 01ae51f8868f16dc3f7569a4d605eab9  gcc/c-aux-info.c
! 09285e5c67e2b8f0510f69b0547dcc3c  gcc/c-common.c
! e6dffbf568b0ed35c966882911960c61  gcc/c-common.def
! 08630772588f45dbaaaa6d47c0eb2f94  gcc/c-common.h
  8447e935bc81dc31a1f016d8dda2bd42  gcc/c-config-lang.in
! 3894f0b2ccc017e81ad527827aedacd5  gcc/c-convert.c
! 3efa472adcd828e631a5b586bd7aaf33  gcc/c-cppbuiltin.c
! c5746094bbef8a4acca29f921ef3c10b  gcc/c-decl.c
! 0c3e16e1538a5ca0fe56b7205f1c7352  gcc/c-dump.c
  0b8d0626fe8d8d96c5abe33672b9008e  gcc/c-errors.c
! 6896891c0a06aacf861998a42a08a189  gcc/c-format.c
! 44e5dbfe659545c12defce6f6e1193af  gcc/c-incpath.c
! 25bd62a48dbed14d2e1a165790e130dc  gcc/c-incpath.h
! 8f47217c0acd85106e93572bc99a888e  gcc/c-lang.c
! 2bfd4dca710e1379a7fa4b70a4400e74  gcc/c-lex.c
! 254b00fef5f384765a3beb7b148259e2  gcc/c-objc-common.c
! 35a7d14db6b4b02829a0d74c70d987ff  gcc/c-opts.c
! a64dbcc53d7c02bdd2f6f56e099ec434  gcc/c-parse.c
! 8b43b3f9b2ef816cb235953a09ad8a8b  gcc/c-parse.in
! 01426c1ce7817deb87acf849a72f9a04  gcc/c-parse.y
! 30280928b4893da39c43459e67da1127  gcc/c-pch.c
! 2d756a4945fd7ef4777d801dd056d1b5  gcc/c-ppoutput.c
! 810cb73f678afa008af44b97413de544  gcc/c-pragma.c
! 99cf443d6b47a9dd335f232a89da7363  gcc/c-pragma.h
! 1392bd7cc432acfd282e014563f12382  gcc/c-pretty-print.c
! e403bf531a21ac966e8af5945bab24a6  gcc/c-pretty-print.h
! b81abbecb9b9822b357b20bb8d995121  gcc/c-semantics.c
! d611226907b5a983e74827ce578121ef  gcc/c-tree.h
! c92fbaf4d708e1ebca42e50f2ea9498c  gcc/c-typeck.c
! 17bada4f4b99aa60efc4c4b50761993b  gcc/c.opt
! 6ec7744e0d705692f3a27013c3b31e82  gcc/caller-save.c
! 6630501faa36621bebb27093114b8d29  gcc/calls.c
! 3b4538be3c1ff8c161b35a5c0a8c8edf  gcc/cfg.c
! b396e0405d346a4c9d063994355c5ba5  gcc/cfganal.c
! 1a0b22a7bfad82e1e54fde7b646f7421  gcc/cfgbuild.c
! 26879645ab45840135cd7f6ac338a89a  gcc/cfgcleanup.c
! 0ca3165a606ae41ce2640d25c4b39e52  gcc/cfghooks.c
! 8f6808789a33a4288d7c427e2529b81d  gcc/cfghooks.h
! d5518a2d0c7489fd19a55ae538a6baec  gcc/cfglayout.c
! 01046519c8eb5b5a20c1523e0be08d95  gcc/cfglayout.h
! a4d67727547a945e6ae7fea2b353ab67  gcc/cfgloop.c
! f7ac0fce1358a4545f8afa5bbce76554  gcc/cfgloop.h
! 0d31e3e96ca1b5dbf6dd4f5e4d42fd41  gcc/cfgloopanal.c
! 02d4cf9066d0dd32ee73f18df745cbec  gcc/cfgloopmanip.c
! 9a16afa8b1c62078bcdeda145625bb09  gcc/cfgrtl.c
! 4a425602993c95b37216930a42664f64  gcc/cgraph.c
! 7a3a8efe361c219aae444414841154ac  gcc/cgraph.h
! 413ff6dcad1dea7d69fc8714f9c34038  gcc/cgraphunit.c
! 29b0638b3190e581371fba1308adb018  gcc/collect2.c
! a4ee0107ae740285068b14c374b02e9b  gcc/collect2.h
! 49b78c9958dbc39949c748a71d4969a7  gcc/combine.c
! d4ac664b1f1f9503f5f021e51d494548  gcc/common.opt
  153eba9df77c122c16c81291535eb8b9  gcc/conditions.h
  7268433f5f31ab6d3e611f124107d987  gcc/config.build
! f878d8c960de35ae9b750370756763b7  gcc/config.gcc
! 24e40268b898546fb6b8f2c58268b40b  gcc/config.host
! 7acb84d423d0571c3f4d2636ef182da8  gcc/config.in
  8e697813dc96ca90f5d0f4c196efe2cc  gcc/config/README
! cdbc22c1c4884517b199f895c2d5c9fc  gcc/config/alpha/alpha-modes.def
! 1456f8a17d381aca68c6342c6ea5166d  gcc/config/alpha/alpha-protos.h
! 5086267394b315fa737bd38a5ac203d2  gcc/config/alpha/alpha.c
! dc328308f315f46302d19117928150ff  gcc/config/alpha/alpha.h
! 6cf5378ea5dd710151d779b34d32e987  gcc/config/alpha/alpha.md
  b871fa4b646882b6d3edc34b07418cdf  gcc/config/alpha/crtfastmath.c
  f8b43ce21e17483c5615aeefcaa5e048  gcc/config/alpha/elf.h
! 04869f4c48d153c27b6bf3d9514829e4  gcc/config/alpha/ev4.md
! 173345538bc88f6fb745ed19169d86a3  gcc/config/alpha/ev5.md
! a0c5713417ca36c16a06ee540dcbfa6a  gcc/config/alpha/ev6.md
  b437b0390a031bbbd42654c955b9f3c1  gcc/config/alpha/freebsd.h
! 5debe3f13e9b02d8b16b9df0076baecf  gcc/config/alpha/gnu.h
  c884eadf2ce393715f69fec7587bf2c1  gcc/config/alpha/lib1funcs.asm
  50b6896f1731ba0084b1e6bdc6c6fec3  gcc/config/alpha/linux-elf.h
! 861d6b38cdc05be98aa67438e903f6f5  gcc/config/alpha/linux.h
! 9411ea05ddc2183085392d40b0a5a773  gcc/config/alpha/netbsd.h
  87ebb3978e34ff600b121dff3bd1540b  gcc/config/alpha/openbsd.h
! 0638cc7d95793385e92b699f4562dffd  gcc/config/alpha/osf.h
  badb0143395e80583210aa4ab17150c5  gcc/config/alpha/osf5.h
  0cc2c89dbf093a50f967387b828962be  gcc/config/alpha/qrnnd.asm
  3bbb1cf81aa0513ee0ee3521ef1a7275  gcc/config/alpha/t-alpha
  985c6b7b42c51c99cd3459e0f60e6158  gcc/config/alpha/t-crtfm
  b779aa9db141bfd9c1272f8d21e4b00e  gcc/config/alpha/t-ieee
  c6a2a791146d67d036100ec3e54c53e4  gcc/config/alpha/t-osf-pthread
! 30a44dbf9bf8c0441998af2978d344c0  gcc/config/alpha/t-osf4
  4098f940703b404acc95f6930ee5adea  gcc/config/alpha/t-unicosmk
  a55b683441d09dc8487a85470a557580  gcc/config/alpha/t-vms
  801c9903de067c653ed7a4b36af18c8c  gcc/config/alpha/t-vms64
! 214ccf16c157e2179a54ac3828c53e4d  gcc/config/alpha/unicosmk.h
  ea08f556c727bd62c2626f8b171bb96c  gcc/config/alpha/va_list.h
  9a6605659818d09589991a89b33a9313  gcc/config/alpha/vms-cc.c
  c84152e5c76d58d608afda84fa7de4a0  gcc/config/alpha/vms-crt0-64.c
--- 1967,2304 ----
  3c2b74793045dfac541ed4d974ba3022  gcc/ada/s-widlli.ads
  2dcbb1c16034a8c5c2b65ce9f13dc126  gcc/ada/s-widllu.adb
  8a6c0547d38120ee8d2d4bce7f051e1c  gcc/ada/s-widllu.ads
! 8c8b256b17456c48498f3082e2315a40  gcc/ada/s-widwch.adb
! 2ec4f736c1221e52b98376f8a5b2c83d  gcc/ada/s-widwch.ads
! e8917bd13aaa75d8b42e20b7404fdd55  gcc/ada/s-wwdcha.adb
! be2c55a8f7abb27746f7e7976ed698f4  gcc/ada/s-wwdcha.ads
! 3583579b8d2fe8675ae0c977a0f91dd5  gcc/ada/s-wwdenu.adb
! 0df5da7ea956eba6f6ac7dc9d7c5cfc1  gcc/ada/s-wwdenu.ads
! 3b384b6fc6932ad4f5afff04c0a79c0d  gcc/ada/s-wwdwch.adb
! dd82dbc86cf2c76e238c21df7d1a12b1  gcc/ada/s-wwdwch.ads
  55fe0afe4349839af69bdc1700880ac9  gcc/ada/scans.adb
! cfc6bcb32491e95e679be016c00700e8  gcc/ada/scans.ads
! 2f81f6a63ede5f24c17778476fa1d78b  gcc/ada/scn.adb
! c8a3d74cb4a78157ef85ebe6d7df06a1  gcc/ada/scn.ads
! 4fdf4008929ec1ab34051c57d7bffe87  gcc/ada/scng.adb
! b91d1fcf17bb74a1963f2fc2b8fa353a  gcc/ada/scng.ads
  189df994310b603b92cb61b38070f5b9  gcc/ada/sdefault.ads
! fe8b8f8522b4579f450311bbb6c76948  gcc/ada/seh_init.c
! f602831bffeb3cf2f00e797533039e1c  gcc/ada/sem.adb
! 6ed3374873d8d786f7cdfde41c19e756  gcc/ada/sem.ads
! 2cef228b175eb7c77a779863dec98872  gcc/ada/sem_aggr.adb
  2fa7867e523a286223ecd3b8a52a2f0c  gcc/ada/sem_aggr.ads
! 7d9bc369bd2b4b65fd59420ba14000e3  gcc/ada/sem_attr.adb
  277985011f152fa6d681f22cbf114e36  gcc/ada/sem_attr.ads
! db86dc1f44a3327f2f21f1003917a9c6  gcc/ada/sem_case.adb
  29e629233a0c490f5072f12cf932ba28  gcc/ada/sem_case.ads
! e7f39f07f116d5ac43a3bd2c61044bf9  gcc/ada/sem_cat.adb
  8f61bc33259a5081eb522ddc22458e35  gcc/ada/sem_cat.ads
! 0186563f25e5556cee52e35020fe6a5b  gcc/ada/sem_ch10.adb
! 0d0abd2e623eb930e2d041221ecf6f65  gcc/ada/sem_ch10.ads
! 238c237dab65be33edf459df294793d2  gcc/ada/sem_ch11.adb
  618f30e2ae7e6a60d24e9e9a7cf82dbb  gcc/ada/sem_ch11.ads
! dc95500632fd5e3b8d544bca9d08fdd2  gcc/ada/sem_ch12.adb
  fbd6351b8dd9b1f488f700d0a50dbb42  gcc/ada/sem_ch12.ads
! 3486b96205ff0f9543caf52a9f72ab99  gcc/ada/sem_ch13.adb
! 3916177aaed134461df693b45f32d6b5  gcc/ada/sem_ch13.ads
! 342e165750f687a77981fd6bb3ef5caa  gcc/ada/sem_ch2.adb
  bbbd33bef0a1199c3399b0836f99c571  gcc/ada/sem_ch2.ads
! 734625e4924a3863502d8c8a392bca11  gcc/ada/sem_ch3.adb
! 189e99c48f47bd60b84f390ba0ae2961  gcc/ada/sem_ch3.ads
! 9ab3b151dba3189ed3e3c8124b053cc0  gcc/ada/sem_ch4.adb
  31c9e996c4f15c04ca07bbe55d002481  gcc/ada/sem_ch4.ads
! 1ffc190c9f717d4a49d75e0d53af021d  gcc/ada/sem_ch5.adb
  9b5561d7fe7e7fbe480b67b56c877fe3  gcc/ada/sem_ch5.ads
! 7f34ee7b3167e98f7b0c6953b281cc19  gcc/ada/sem_ch6.adb
  589903b1e52fbddfae3322c899e7aa1b  gcc/ada/sem_ch6.ads
! 8af06aa2dae005ca9484ef31a57979aa  gcc/ada/sem_ch7.adb
  94c7f641da57a315ec47682d2b860772  gcc/ada/sem_ch7.ads
! 7313e8fc9211903707524e28045775b5  gcc/ada/sem_ch8.adb
! 1a19ae993eff737ca064f9cd5b7889b5  gcc/ada/sem_ch8.ads
! 1e1d256349e318f1f375f3ef75ba5019  gcc/ada/sem_ch9.adb
  becd3aa032d2f77049f18e904d3a4aa3  gcc/ada/sem_ch9.ads
! 56929ff219816edc366ce4aea04d8355  gcc/ada/sem_disp.adb
  6c81f3f6696aaeb0f827a9a0fbe44946  gcc/ada/sem_disp.ads
! c349d807f792ffffac1c8c93265d68cc  gcc/ada/sem_dist.adb
! 2d6ae68718627c185f9a2d5f5edb7a19  gcc/ada/sem_dist.ads
! 91f56ae11270e4d25dd8e576b0a7cd78  gcc/ada/sem_elab.adb
  2d2d3e7aa814783898ebe2fb52c72eff  gcc/ada/sem_elab.ads
! eb576485d44b50f2ec7c04ae39542b59  gcc/ada/sem_elim.adb
! b194e89468d108127ce8c9504ea5dd85  gcc/ada/sem_elim.ads
! 9b15177fe1c917731abeb4e5c993eae3  gcc/ada/sem_eval.adb
! 3653f6dff3eb78405ddfa7c97a04900b  gcc/ada/sem_eval.ads
  27a73b06810bd638fe4573ce1455e1a9  gcc/ada/sem_intr.adb
  e78adf8a709aa37ff87baed5fa36d9fe  gcc/ada/sem_intr.ads
  a461cad6d69b2ecd920aa36075636571  gcc/ada/sem_maps.adb
  f99da3253b3bec5d0df0eeaddf7eb2eb  gcc/ada/sem_maps.ads
  ad26afeadf07ae5d54b118f9387933d2  gcc/ada/sem_mech.adb
  a80072efaf515a6cceee8a3a80c7674d  gcc/ada/sem_mech.ads
! 61bca01fbacf5ecbea1b9c96e8985fed  gcc/ada/sem_prag.adb
! 0245317d410460ab658f90e942100e5a  gcc/ada/sem_prag.ads
! d506d1f53662143776b74e7051153f12  gcc/ada/sem_res.adb
  7c830aeab8aa51c0e37d30910a7dbf95  gcc/ada/sem_res.ads
  24e3f351459fd68a15a1175d3602bb3d  gcc/ada/sem_smem.adb
  2d964a99047d20828b9bee94b3a8330f  gcc/ada/sem_smem.ads
! 06f5d4e70c94fe4df7278c2ab610af12  gcc/ada/sem_type.adb
! 4935793d0750b21a3786f583aab43059  gcc/ada/sem_type.ads
! 8d43294cbccba681051e5523d878fc17  gcc/ada/sem_util.adb
! 2c8aa94de33f800e961f28ab784f9309  gcc/ada/sem_util.ads
  6c8b11390f678dac8a0eb5e3be6d4b94  gcc/ada/sem_vfpt.adb
  c001fb1556f3c287957109dff3c55dfb  gcc/ada/sem_vfpt.ads
! 252b926e4ab39b256620f9394597efa2  gcc/ada/sem_warn.adb
  97164b827c37c9dc3d77b865f24a0438  gcc/ada/sem_warn.ads
  eff0ac4acd2ab040858d7c8e92770219  gcc/ada/sequenio.ads
! 58367041fe8caf7625544f295aa9420e  gcc/ada/sfn_scan.adb
! deff4ec697e3fd4aa736fbc3499b82eb  gcc/ada/sfn_scan.ads
  3ad2e7c963d4dfc6a9edb310aca37e48  gcc/ada/sinfo-cn.adb
  be6f8547b4847a849951561f11d301a3  gcc/ada/sinfo-cn.ads
! 7f6f0d9d842e97e9df8ea6f43577b058  gcc/ada/sinfo.adb
! 71b0c3400dce3847e51977134898ff3b  gcc/ada/sinfo.ads
! 12cc74df2c773a7685242c27a11ab7dd  gcc/ada/sinput-c.adb
! ba709ee25e973f6920c5addddf6e4a8a  gcc/ada/sinput-c.ads
  84506a9525874b92248b377aa43c8b29  gcc/ada/sinput-d.adb
  6839c4a29c40f33a262e2292a6c00b62  gcc/ada/sinput-d.ads
! 976a1e629c354a950c7fdd46951113d6  gcc/ada/sinput-l.adb
! 9d4e27b4012a30263c6ab435bcee8998  gcc/ada/sinput-l.ads
  eed7bf462842ce66325acf86157b430a  gcc/ada/sinput-p.adb
  5127919cea6fca8217fbc566f0e67b9b  gcc/ada/sinput-p.ads
! aa36e173e1473931b3370657ae122c71  gcc/ada/sinput.adb
! 7acddc02fc34aede2c3dbfee6a900648  gcc/ada/sinput.ads
! 54ee2ce2e94f67cfef3246c464ad73a7  gcc/ada/snames.adb
! 54d3527d5448b19251101a22da611d49  gcc/ada/snames.ads
! 12ac675d12a78fd5fe77ef56b231eab9  gcc/ada/snames.h
! e229a6b673e842b1cf3a4301690e09b5  gcc/ada/socket.c
! 54586532d3d2e2038b73b8dd4f1e2232  gcc/ada/sprint.adb
  14fa09ba32094ddb8c8bb35c97f6cc02  gcc/ada/sprint.ads
  1345f5c7d82d3975e223276fce95f75b  gcc/ada/stand.adb
! c7b31905eafcc84ee7667a656a456f4b  gcc/ada/stand.ads
! ef6569a2f3dee8b5c9de148c88bfd340  gcc/ada/stringt.adb
! 78504c0bf21f9587b364e6dc5c6290f5  gcc/ada/stringt.ads
  1595cf4849923553febf03c00a9af021  gcc/ada/stringt.h
! 61b1fc7e09e9384f257bf86652a4def1  gcc/ada/style.ads
! 2ef3ef84441970ff7482b52e4768612c  gcc/ada/styleg-c.adb
  77adec648a838532ff3b7185c35b1f23  gcc/ada/styleg-c.ads
! ac0a445b58c2b8ad36ac648b923c4f14  gcc/ada/styleg.adb
! a4752f9c98b997f601c296b1b176857f  gcc/ada/styleg.ads
! b4349845ef1fb4e64cd0a6c74c31154c  gcc/ada/stylesw.adb
! 9f64b072fd2bd37c5bdb675a268b8695  gcc/ada/stylesw.ads
! c9fcb555f80bca03b721fadea5119391  gcc/ada/switch-b.adb
  05595840e5499da53edd9e352bbcd4c2  gcc/ada/switch-b.ads
! 1e000f3be0e293c706c3afbb861de486  gcc/ada/switch-c.adb
  9a9344995630035f56e579b3718142f0  gcc/ada/switch-c.ads
! e2a13293abaf44a4c899299e46ca1434  gcc/ada/switch-m.adb
  ab1025512e257c0fb33ee6a4c3e5872e  gcc/ada/switch-m.ads
! eb5e87facdba82df58285df0d00f3ae8  gcc/ada/switch.adb
  c60b3f696e2b5ec1276d65fc37bfe2a7  gcc/ada/switch.ads
+ 354b374f6ace76191361bfb218dd04c5  gcc/ada/symbols-vms-alpha.adb
  2625d3d5d73037d825b2470e4b46bf18  gcc/ada/symbols.adb
! 709b3972638ec12fc94cc355b248540d  gcc/ada/symbols.ads
! 8ac654c5831413344f180d40ee864fce  gcc/ada/sysdep.c
! df3302356640da90f0ac4a070ef9aa2d  gcc/ada/system-aix.ads
! 1a7a6209c60d00fbbf53fa732da02b28  gcc/ada/system-darwin-ppc.ads
! 5da4c546b8769c3a0e5579f1a50d1cb9  gcc/ada/system-freebsd-x86.ads
! 462f79e32995a757d7be24000f28f50a  gcc/ada/system-hpux.ads
! 0cf5d5a60816ee8f3a61ae02eefc7baf  gcc/ada/system-interix.ads
! 007aee35e1358f82a69b28c54ab17a2b  gcc/ada/system-irix-n32.ads
! 9a2ddbd138c1396d69ca9a8319712a08  gcc/ada/system-irix-o32.ads
! 5a609b3072467491b88ff76dbac25ef5  gcc/ada/system-linux-alpha.ads
! 682fbc74db29156eaeb7fc850a35349a  gcc/ada/system-linux-hppa.ads
! 7f4d8deb2b91bbd7d4eaad6a1fd71d15  gcc/ada/system-linux-ia64.ads
! c14dc9f45e6b4eabebea6548fc5f6f29  gcc/ada/system-linux-ppc.ads
! b34cf0102f40b29e688ca4799d230f64  gcc/ada/system-linux-s390.ads
! fd9a3e0ddd2aaac5c4f5ec36140cee5e  gcc/ada/system-linux-s390x.ads
! 40dcab9524a7704d9dc2239fa5aa60ab  gcc/ada/system-linux-sparc.ads
! 92b2ffb0b53274da685cef7c6f1ce155  gcc/ada/system-linux-x86.ads
! 6a03a7eee9455ca3cd694bfe0cad09ba  gcc/ada/system-linux-x86_64.ads
! b8c02bfae520591b95be99781b2a78b5  gcc/ada/system-lynxos-ppc.ads
! 09633fa3ef8ca0883750bcb750992d6d  gcc/ada/system-lynxos-x86.ads
! b44410a6e7f7e526a8848651f518c892  gcc/ada/system-mingw.ads
! 1f09d18242ddd7762fb4146cd9ed9966  gcc/ada/system-os2.ads
! 4dff3eb6fbbfff702226e0ead302ea70  gcc/ada/system-solaris-sparc.ads
! 210046b3bfe477649c9c0b6b08b47f8c  gcc/ada/system-solaris-sparcv9.ads
! 472e236568f129d750b661e676ea3c57  gcc/ada/system-solaris-x86.ads
! e1f5b92ad6730ccbc73270de0b7cd700  gcc/ada/system-tru64.ads
! af9bb76e17bf71922991fa5caa9e6be8  gcc/ada/system-unixware.ads
! b74d6f83da629bb403a28586e8cad668  gcc/ada/system-vms-zcx.ads
! 09cc087c0c7f218a3c99853956ba95b4  gcc/ada/system-vms.ads
! 3828f6cec6983710ad81afea0b29e8b2  gcc/ada/system-vms_64.ads
! 7c57309585baf0a29694dba733ece554  gcc/ada/system-vxworks-alpha.ads
! f2e7d5cc2c0e63375a4228e76e3c0a9a  gcc/ada/system-vxworks-m68k.ads
! 4c274bee79980ebb2df4fe1c75bfaa05  gcc/ada/system-vxworks-mips.ads
! 8c638551451b40d42c1c3a3647371f67  gcc/ada/system-vxworks-ppc.ads
! 0dd4630817888a8d785290ee240fb6f4  gcc/ada/system-vxworks-sparcv9.ads
! b7644bed171c3f90f1ea1a91bbef19fe  gcc/ada/system-vxworks-x86.ads
! be9258452c233af2fcfafb6604aeb8b8  gcc/ada/system-vxworks-xscale.ads
! d396eb59dfbff1859ffc8093aca763c7  gcc/ada/system.ads
! fb61f9bf1bb06cf1b164c32da0673afd  gcc/ada/table.adb
  da14f5df2798690182d7a2032595aa6f  gcc/ada/table.ads
! 6f15221a2e500db84e4731600ecccf85  gcc/ada/targparm.adb
! ebc11a80573d48ff9cbad96679930b4a  gcc/ada/targparm.ads
! 150c1f8b8e4301d43c583ac97c8000d3  gcc/ada/targtyps.c
  907bc51906a9800d9719f2613ba725b3  gcc/ada/tb-alvms.c
  a77975a17a063d70d79d61fe4105ea72  gcc/ada/tb-alvxw.c
! e9fa442db596100b9938b24b96e856b5  gcc/ada/tb-gcc.c
! bf8555486ae4e9003786f098500c26c8  gcc/ada/tbuild.adb
! 73484458cea50e6555af3b1cbaf66d71  gcc/ada/tbuild.ads
  da4f1ef4c5546e0b43161a14be4ed6b5  gcc/ada/tempdir.adb
  797b8acde1dc4889010ff10e209c8bff  gcc/ada/tempdir.ads
  f5717a7760fca3b94072e1a9ca647291  gcc/ada/text_io.ads
! 65ac74bd6f676bd42c116c9978c0e4ca  gcc/ada/tracebak.c
! bc1e066a7a5cb7d03debcff9b65ba012  gcc/ada/trans.c
  4ee604fc49a383e5489845161c250b00  gcc/ada/tree_gen.adb
  c0a26ebf76a3ca08bb9c19229536a510  gcc/ada/tree_gen.ads
  00ce657f8a61f603e044e1ee3d136b7b  gcc/ada/tree_in.adb
  f05f50ead0f88c5143fd2d24cfa3e860  gcc/ada/tree_in.ads
  e1b94dbcda2ca815bb2eeecb063273a1  gcc/ada/tree_io.adb
  960b494944ca2753245e4c9ba5b58536  gcc/ada/tree_io.ads
! 600e97103a47d061d05bf28c61d90859  gcc/ada/treepr.adb
  d771b2470d516c9782c85dc7a3b97903  gcc/ada/treepr.ads
  51a56ef22831b99523ec2c779765418d  gcc/ada/treeprs.adt
  ad91a479969fa8810534bd0cc11dd7b0  gcc/ada/ttypef.ads
! 3a4079f3cbeb165958b13b34b938c660  gcc/ada/ttypes.ads
! 625018a85f5c58c8204cae15d59b6cc2  gcc/ada/types.adb
! 62e92a1a5e91c75e4076af8397c53826  gcc/ada/types.ads
! cf1f2505a801c988b49957ea64f84e48  gcc/ada/types.h
! 5ec9671be8f1e8fea90e3146abb27faa  gcc/ada/ug_words
! cc3282b4f59045d0a181fa3ca60183bc  gcc/ada/uintp.adb
! 3cc2f47e8c52968370a973670fda7169  gcc/ada/uintp.ads
! b0a5053534cc039f0a90f7b2a483f068  gcc/ada/uintp.h
! 649186adeb69e8a878d9846fb17c8ab7  gcc/ada/uname.adb
  2e0137be49c2e58672771b80ca09eafa  gcc/ada/uname.ads
  e2f3062fb49f7d82b4833291fa40307c  gcc/ada/unchconv.ads
  6bd5a24fef448adde6298f4677bb14ce  gcc/ada/unchdeal.ads
  7f8d2b9ddb2c580f308fe010cd1b4ff9  gcc/ada/urealp.adb
! eb0f01faaf23aafd4b999badc1302b38  gcc/ada/urealp.ads
  62d004f0ecd1dc03ee3a3b0575f49767  gcc/ada/urealp.h
! 91fabfcdb8739d62e76d3ac277ebfca9  gcc/ada/usage.adb
  7c4ba7bfa06a4aa92d14f8a6c38091aa  gcc/ada/usage.ads
! b16230c794be67ac5e79bc2d54a08cea  gcc/ada/utils.c
! 15206ef508652341681ca56bc8b6fcdc  gcc/ada/utils2.c
  8f1ff30a03238bdd6c707fbd98c36f4a  gcc/ada/validsw.adb
  ce3f24d2aa8662ac1c909c4cd92031f0  gcc/ada/validsw.ads
! 8f63dc9282304fa1eead8bd4e0a88b17  gcc/ada/vms_conv.adb
! a483f91a5a9c4a0e483d0fdac523554e  gcc/ada/vms_conv.ads
! 259b639c014ba28ea0dfabfb1ff4006c  gcc/ada/vms_data.ads
! 938994f91ed391c1f6e5ce8cca3a7bd3  gcc/ada/vxaddr2line.adb
! b9e819d8cd30af44af4ae367a31d782a  gcc/ada/widechar.adb
! 96826d67b1dd18255ff3e2863025d8c7  gcc/ada/widechar.ads
  7840fcbd3ef32024b80396fbf532a8bf  gcc/ada/xeinfo.adb
! 25f98ffc5c38d51db36beb949e5d040d  gcc/ada/xgnatugn.adb
  164d80457843e39cf48814d52d103054  gcc/ada/xnmake.adb
! 0a66002038a229066a9c7dd51f9cd9cc  gcc/ada/xr_tabls.adb
! c1c3d6d7292eb3754fa7deb5dafc2e98  gcc/ada/xr_tabls.ads
  344279794c036b0e144c5f3ac5f24914  gcc/ada/xref_lib.adb
  35f9c53cce7ba90dcd2361c0f0da48aa  gcc/ada/xref_lib.ads
! a2e18664780250935fdeae3c32d6c27c  gcc/ada/xsinfo.adb
! 225d9524bcd5f2443f1e120c807d8806  gcc/ada/xsnames.adb
! 441eec42f886ec460c3c2c96a5e4b64a  gcc/ada/xtreeprs.adb
! e433b6705d3e4540b0fa7c7358cd96b5  gcc/alias.c
! 177cc307dc0e6190a724d244f7fe12ec  gcc/alias.h
! 2a5d8bede1f1595845755275abe3e2ed  gcc/alloc-pool.c
  c279ff553669b088052503283575eb05  gcc/alloc-pool.h
! ad91143ddcabf9fff945688894115770  gcc/attribs.c
! 5a9683177e557f911f8d6d8ae5dd9395  gcc/basic-block.h
! 9cd1d1c99e8ae94a03e85fb302f7bd00  gcc/bb-reorder.c
! 5d705d8743fc02b15da91a339c0e5b2d  gcc/bitmap.c
! d46f7b6d4be9ee3d6e2c695f66fc1af8  gcc/bitmap.h
! 88cd1483fc65c4cbc4ce914159bcf94f  gcc/bt-load.c
! d05292691f8390feba80bf188ee2db83  gcc/builtin-attrs.def
! ca5a1c15add0fa9991f95599217443e5  gcc/builtin-types.def
! fbbd76294d1ac1c1b54986a3b37cb6b2  gcc/builtins.c
! 486e3e1e12ab18d880e1bd9c09e3df8b  gcc/builtins.def
! 1f28c163b66b6a1efb4d09eded94dbb8  gcc/c-aux-info.c
! 1ec0cc901eb397da4cc9eb19daa98052  gcc/c-common.c
! 4c1fe0ff324a8e13de821616c34f8ab6  gcc/c-common.def
! 83842d158d84e384f10884dc69031e74  gcc/c-common.h
  8447e935bc81dc31a1f016d8dda2bd42  gcc/c-config-lang.in
! 68965575f63fe30d6c7160763e4ca0e8  gcc/c-convert.c
! bd51b483880bfd4bc92796628ec27f7e  gcc/c-cppbuiltin.c
! df91000683c4d17591ab8bb9256e192a  gcc/c-decl.c
! 199c9a78c187e91326821d29c91e9a75  gcc/c-dump.c
  0b8d0626fe8d8d96c5abe33672b9008e  gcc/c-errors.c
! ab3be0f2df501edd50a0d4b410a56914  gcc/c-format.c
! 861ba09c8f22365bc6dd4295caa8842d  gcc/c-format.h
! 42c5e999f435f95d94815ff8e601856b  gcc/c-gimplify.c
! 4548b5c38236552ce8db988b915c2af0  gcc/c-incpath.c
! bec6fd3e2e0c8fe102c83b0d09ef4c82  gcc/c-incpath.h
! c752adb9b362091eb7bf0f27f8cd11f8  gcc/c-lang.c
! 13a13fb4cea2814399c5699234a3da40  gcc/c-lex.c
! 636de2398cbf8ec90c95eb2327d43607  gcc/c-objc-common.c
! 133f68a26f7800212479edb5b68a4328  gcc/c-objc-common.h
! e797d80882d365364481118f10d42a80  gcc/c-opts.c
! b95ad9d2619c01c0b6417db83a2a83cb  gcc/c-parse.c
! 7c115dc32a16e55982dc91de54c8c786  gcc/c-parse.in
! 6e4e6e6e7e36f600cf4d148657cc61c6  gcc/c-parse.y
! 826eaa8c876d12cda19afce93031b3eb  gcc/c-pch.c
! 0cb8ba2b9d11d89e5ad2a59a59f0e7cd  gcc/c-ppoutput.c
! 0b6f0ceb36e0b8042272eade3f7cf304  gcc/c-pragma.c
! 045326316e3bb0c1f7ca3d49a04654ec  gcc/c-pragma.h
! 64dc28f0b09448ed4c3de3dc0c631a35  gcc/c-pretty-print.c
! c5dc78a9a07dd45cf2dd64dabf378ef7  gcc/c-pretty-print.h
! 917d2fd2f85a15e2ff3cb22a83673191  gcc/c-semantics.c
! b9a1e6ea6c1d7842b4d115917eab53aa  gcc/c-tree.h
! 07fc7484fc2e8946dcaf67b2491fa94d  gcc/c-typeck.c
! 0149375d4f755320e1d7ebefceb7d768  gcc/c.opt
! 6b867238ed9c316a272ebb0062efbcc2  gcc/caller-save.c
! 097b37a5eca23e53cc561b79c999d4ee  gcc/calls.c
! 0a4a04996c6bdb190fb0ad375f6e1690  gcc/cfg.c
! 1e8d68862212fdb99f7b29c94dee48b7  gcc/cfganal.c
! e6307fc5435ec40004e456710be1e915  gcc/cfgbuild.c
! 7eaf905ea3a821b3d8072b317b37ebd8  gcc/cfgcleanup.c
! 3bdeb0ea6f1dbf07b654da02e2c53a17  gcc/cfgexpand.c
! 6a6d94b7f433245eaef48634ee226cda  gcc/cfghooks.c
! 0185ca070d576e2a85cc20eb5b6f3786  gcc/cfghooks.h
! 7dde5b0e4c56769b3ba7f9870c763e0f  gcc/cfglayout.c
! cca2206f9e8e499da143c74276f3d2ef  gcc/cfglayout.h
! 6ec0ae4263307b0c1a6eef46e656bcec  gcc/cfgloop.c
! addcf9b308ad20fbde03b74efd9a79c3  gcc/cfgloop.h
! 6cb834a86d77c7e4b4bd00c29459b213  gcc/cfgloopanal.c
! e308a3f8abbbf76fef2c29ab61c93250  gcc/cfgloopmanip.c
! c0e6482581e7571833b75dbe16baeabc  gcc/cfgrtl.c
! cd8aa2f042490506cf074a85356ecbd2  gcc/cgraph.c
! 34fec02f814cfe5750beb30bb0b3e33f  gcc/cgraph.h
! b681157b53b3c1c9e488fccca5b814a4  gcc/cgraphunit.c
! 9e172b917adb5e33e4542a934f04da0b  gcc/collect2.c
! 55cea40dd56ebb7bc8ce9d614994b678  gcc/collect2.h
! c9e53570facfd86efc4e2866d4993a3b  gcc/combine.c
! 2a4c873b7e60f96cb17b1a5013eb2bc7  gcc/common.opt
  153eba9df77c122c16c81291535eb8b9  gcc/conditions.h
  7268433f5f31ab6d3e611f124107d987  gcc/config.build
! f987b3ae3f95fbb8d754cf7de065d156  gcc/config.gcc
! 0fa5156f5e54624d644707a8fe2de1b6  gcc/config.host
! 926730f22871957da91e04919d02cc5b  gcc/config.in
  8e697813dc96ca90f5d0f4c196efe2cc  gcc/config/README
! 1fb82997e7420ae305e28dae41d7d828  gcc/config/alpha/alpha-modes.def
! 33b2bdc5ac9d1f0a96ea589e80992679  gcc/config/alpha/alpha-protos.h
! 31dce5cd5a6e0cf10a0b7d482b625a4e  gcc/config/alpha/alpha.c
! a8d071810464daa26a90cb5b2ab0a6b0  gcc/config/alpha/alpha.h
! 5b3a43deae172253fd62b08c9be8e9ec  gcc/config/alpha/alpha.md
  b871fa4b646882b6d3edc34b07418cdf  gcc/config/alpha/crtfastmath.c
  f8b43ce21e17483c5615aeefcaa5e048  gcc/config/alpha/elf.h
! 7e994c87429724ac560cdf2229169e17  gcc/config/alpha/ev4.md
! 246a9a994766c387570bb3eaf0488b4f  gcc/config/alpha/ev5.md
! e31ab09fd01a8881ecb73531cadceed5  gcc/config/alpha/ev6.md
  b437b0390a031bbbd42654c955b9f3c1  gcc/config/alpha/freebsd.h
! d659ad53dc967d1a45c264dbf4f0f317  gcc/config/alpha/gnu.h
  c884eadf2ce393715f69fec7587bf2c1  gcc/config/alpha/lib1funcs.asm
  50b6896f1731ba0084b1e6bdc6c6fec3  gcc/config/alpha/linux-elf.h
! 561a7a158698ec07f80af68d3abef76d  gcc/config/alpha/linux-unwind.h
! eb73807deb35d86960faf709ba30e670  gcc/config/alpha/linux.h
! 4741127fdb095460f058ecf21c1ffbac  gcc/config/alpha/netbsd.h
  87ebb3978e34ff600b121dff3bd1540b  gcc/config/alpha/openbsd.h
! 4e512776d43e1f3be6f94b6b31e80067  gcc/config/alpha/osf.h
  badb0143395e80583210aa4ab17150c5  gcc/config/alpha/osf5.h
+ 5b056980ee89fdba127e6052b2da46c2  gcc/config/alpha/predicates.md
  0cc2c89dbf093a50f967387b828962be  gcc/config/alpha/qrnnd.asm
  3bbb1cf81aa0513ee0ee3521ef1a7275  gcc/config/alpha/t-alpha
  985c6b7b42c51c99cd3459e0f60e6158  gcc/config/alpha/t-crtfm
  b779aa9db141bfd9c1272f8d21e4b00e  gcc/config/alpha/t-ieee
  c6a2a791146d67d036100ec3e54c53e4  gcc/config/alpha/t-osf-pthread
! 85a82f4fea1595c5b6555fe0bd4034d1  gcc/config/alpha/t-osf4
  4098f940703b404acc95f6930ee5adea  gcc/config/alpha/t-unicosmk
  a55b683441d09dc8487a85470a557580  gcc/config/alpha/t-vms
  801c9903de067c653ed7a4b36af18c8c  gcc/config/alpha/t-vms64
! 00a8a9ac36da7ecd082a7326f81330f6  gcc/config/alpha/unicosmk.h
  ea08f556c727bd62c2626f8b171bb96c  gcc/config/alpha/va_list.h
  9a6605659818d09589991a89b33a9313  gcc/config/alpha/vms-cc.c
  c84152e5c76d58d608afda84fa7de4a0  gcc/config/alpha/vms-crt0-64.c
*************** fdd1ce1753ea1a3f3e1510ec1379bd3e  gcc/co
*** 1980,2073 ****
  1b9d82422ff511d31be0b83f2c89a0b7  gcc/config/alpha/vms-ld.c
  91df2d61f7db0f78bea85db9ea48d9c2  gcc/config/alpha/vms-psxcrt0-64.c
  a47441e875e8b09e8d0ddbe3d362e354  gcc/config/alpha/vms-psxcrt0.c
! 02524b7f9b706d10e1027ac64ada26e7  gcc/config/alpha/vms.h
  ab4eb2a463a2432add11e365fb5ed174  gcc/config/alpha/vms64.h
  10935f4a5ac7fbccbd6ace2ef2727a20  gcc/config/alpha/vms_tramp.asm
! 3a1125692fb0cb36229d7c6435d085b9  gcc/config/alpha/x-vms
! bc82b161a15b608894cd0d39ff5704c3  gcc/config/alpha/xm-vms.h
  0896280626e3f0d1b129f081d90655b6  gcc/config/arc/arc-modes.def
! 85230c0283967896cfe3c833d52be849  gcc/config/arc/arc-protos.h
! 31b3c31fe1b45a2d09eda7d63460bb8d  gcc/config/arc/arc.c
! cc55d56384cbf38f5c16f94d1e4da1a3  gcc/config/arc/arc.h
! 1812d664418a5625c83a18bf4e6ca91a  gcc/config/arc/arc.md
  164b12fbf9f62c635966f4f0e7292436  gcc/config/arc/initfini.c
! 767509c792486815416830604040936d  gcc/config/arc/lib1funcs.asm
  8716ec248f8b7b4307c4e712160acdeb  gcc/config/arc/t-arc
! e2ef2709a9fcbac870f018869a0d90b8  gcc/config/arm/README-interworking
! ab3c4301685d5368172781bd1011cfca  gcc/config/arm/aof.h
! 828bc13f93c69ef0e104bb437d2d69dc  gcc/config/arm/aout.h
! 3a303b7ce5cba3cc50b00c4f50ba8fe1  gcc/config/arm/arm-modes.def
! 2e32165adcb5c2fc9919805cae2461ff  gcc/config/arm/arm-protos.h
! 3eb03289d5c4f92d9124047fb04790ae  gcc/config/arm/arm.c
! 9f9cf014d527ad6cb5821612efcd1494  gcc/config/arm/arm.h
! 73d3d2df2973098d16443d87997be8ce  gcc/config/arm/arm.md
! 0fa7dac2eca4345e8a1ae9fb6db99e74  gcc/config/arm/cirrus.md
! 2687d51d6dcdf992acbabd6c2fed535c  gcc/config/arm/coff.h
! 01232e5e6e06b0b35e58aae62e3309ad  gcc/config/arm/crti.asm
! 334c4a27f5bccbfdf9c380fdcc3b1506  gcc/config/arm/crtn.asm
  579c231252aa3ae5e7401afeea0dfcd3  gcc/config/arm/ecos-elf.h
! 9bc7b8afd932eb2cde838afe221ab695  gcc/config/arm/elf.h
! 81f3bc11882cada797b114a0454667c2  gcc/config/arm/fpa.md
  7085442f45dad03c1280e353b07ce96c  gcc/config/arm/freebsd.h
! 3c0aae6a518f220a8d73cc84fcfaa982  gcc/config/arm/ieee754-df.S
! b465bfe442612df8a76960c51a8b42ed  gcc/config/arm/ieee754-sf.S
! d7dfe53d24b0761cd0c9b07f1817c040  gcc/config/arm/iwmmxt.md
  ca2bde1eefdda77b41938e5f9da85133  gcc/config/arm/kaos-arm.h
  62e13ca855ed6aa05a6b45e8d03846a9  gcc/config/arm/kaos-strongarm.h
! e9811e5c485839d26d0d925fbd1f9479  gcc/config/arm/lib1funcs.asm
! 576eb3e9832329795855c13d866bae0f  gcc/config/arm/linux-elf.h
! 65fe5e8a21ab2530088388c5796b65d0  gcc/config/arm/linux-gas.h
! fd6ebbc9201e281048ef3427808ebd63  gcc/config/arm/mmintrin.h
! c4c386acabf3d1c55c7fe9b16a2a11c9  gcc/config/arm/netbsd-elf.h
! 159f48281f1056a63c34666d179dc4b9  gcc/config/arm/netbsd.h
! 7b8ae9c989f9372620aff6af71bf29db  gcc/config/arm/pe.c
! fec5105bbe887394cadb88cfec9b5ebb  gcc/config/arm/pe.h
! cc18b775f876eaf404d59756a0a079e0  gcc/config/arm/rtems-elf.h
! 3aa6c63d596f0e41a724b9dd0cce4801  gcc/config/arm/semi.h
! 59825c65f50b5908a0ef5dfc0b59142a  gcc/config/arm/semiaof.h
  ff0d30158002a03eb306d7ea2b138a61  gcc/config/arm/strongarm-coff.h
  7e1c4313a2437dc4c37fbc20665db61c  gcc/config/arm/strongarm-elf.h
  6d77295e2963ff824175938a9d3fc2d7  gcc/config/arm/strongarm-pe.h
  5a8ef7705a4b2d9c6af43b0358baf865  gcc/config/arm/t-arm-coff
! ecda6c90717f527e9abaa26c6f7e77a8  gcc/config/arm/t-arm-elf
! 7ea9f71fee151194843ee36499b5c446  gcc/config/arm/t-linux
! 285d71972edf216f64f3164073919fef  gcc/config/arm/t-netbsd
! a38c693422d9e3e0bb4c4fb8dffcdabd  gcc/config/arm/t-pe
! 1c820b92bc6549b7e31bfb7ab041cc21  gcc/config/arm/t-semi
  be87610100021f1329b99bc0d755c9b5  gcc/config/arm/t-strongarm-elf
  2ade9b3cb641eb053c4ee8345e749d21  gcc/config/arm/t-strongarm-pe
  3c040dac3e0917fb5ff2b6d8ab597471  gcc/config/arm/t-vxworks
! a7ad1b74a9041fbec3e5f42ac5a9aef6  gcc/config/arm/t-wince-pe
! 01222651a72a4b71a97440d5c409cf40  gcc/config/arm/t-xscale-coff
! b1c033f511b2a800b5769baab8f982a0  gcc/config/arm/t-xscale-elf
! b8b9e03970c0271aa2efab762b806b14  gcc/config/arm/uclinux-elf.h
! 0c91e0bbb3ff44b2db070231e644cc7a  gcc/config/arm/unknown-elf.h
! 84c1ffe6a7a378a9a5fca1bf30c1e7fd  gcc/config/arm/vxworks.h
! d4b832c7aa27463b7c01fdd4a97e14cc  gcc/config/arm/wince-pe.h
  b5e25aee99e6c3e5a02d16e35c3bdb4c  gcc/config/arm/xscale-coff.h
  a44ceec913b6374da873a1e35bd09b76  gcc/config/arm/xscale-elf.h
! 00755ba12eb70fc9297effe31225a259  gcc/config/avr/avr-protos.h
! 51491b70c84055d7fdd5ad3bc5fe8fca  gcc/config/avr/avr.c
! ee4ab8e5b9fd24e0f9756df7b38c2bbd  gcc/config/avr/avr.h
! aec595a82af2dd4b3a35e28d869423a8  gcc/config/avr/avr.md
  03b995ccfb9f42f4958999fddb3f2af9  gcc/config/avr/libgcc.S
! 17f1ff647dff158caceed8af8760fe3b  gcc/config/avr/t-avr
  7aee29431880721e88d5d34448ed980f  gcc/config/c4x/c4x-c.c
! 9fcebfe82fd35cc045dc19a381087642  gcc/config/c4x/c4x-modes.def
! bec99aeeb55fb203d779799c92cb97b6  gcc/config/c4x/c4x-protos.h
! fd3cd34bfcc9ac4ba9abebe60bebcf3e  gcc/config/c4x/c4x.c
! bc2328d9302a20bc2489c621abd01ab7  gcc/config/c4x/c4x.h
! cbc9498c90cd56d8828b4f9302138b0b  gcc/config/c4x/c4x.md
  db4d38b6b73666d6246b1d13d88737ff  gcc/config/c4x/libgcc.S
  26c90a9d5977b200ec07ac587f4e10e8  gcc/config/c4x/rtems.h
  4fdf00f5884edc1e3e534a63ea4c63e7  gcc/config/c4x/t-c4x
  737a2a3d6832f92552c51f14df901ea0  gcc/config/chorus.h
! cd7ebb30894a53cd3affaf52411266d1  gcc/config/cris/aout.h
  c0124aeca2397b068b1bd9c7aae3ceba  gcc/config/cris/arit.c
! 7db2813958a927f49250626909adb0c3  gcc/config/cris/cris-protos.h
! f4bc17f640176350891f9cc045650aee  gcc/config/cris/cris.c
! cb43bcf9e6d5bd9bfd7fc318813221d7  gcc/config/cris/cris.h
! 4e413b3cc0b81e6019cde61aa6558480  gcc/config/cris/cris.md
  414fb6676277d06c6d26d142e737b6df  gcc/config/cris/cris_abi_symbol.c
  5f2bb7d8a0b9dc21848654ce0093f05a  gcc/config/cris/linux.h
  7e589512d4c3d6d7f9f7b1baae70d1f3  gcc/config/cris/mulsi3.asm
--- 2308,2423 ----
  1b9d82422ff511d31be0b83f2c89a0b7  gcc/config/alpha/vms-ld.c
  91df2d61f7db0f78bea85db9ea48d9c2  gcc/config/alpha/vms-psxcrt0-64.c
  a47441e875e8b09e8d0ddbe3d362e354  gcc/config/alpha/vms-psxcrt0.c
! 805bc7e06095c3d2acfea5a33d41e157  gcc/config/alpha/vms-unwind.h
! 55cb1d3017004fd61e6888128cae501c  gcc/config/alpha/vms.h
  ab4eb2a463a2432add11e365fb5ed174  gcc/config/alpha/vms64.h
  10935f4a5ac7fbccbd6ace2ef2727a20  gcc/config/alpha/vms_tramp.asm
! 63e5d6e90591610c137361a352736dc5  gcc/config/alpha/x-vms
! 72b105f2d2424078f658582cfe30e3b5  gcc/config/alpha/xm-vms.h
  0896280626e3f0d1b129f081d90655b6  gcc/config/arc/arc-modes.def
! b6f3e214db73d81a27b9b501d7a87555  gcc/config/arc/arc-protos.h
! a8b1c6629436c60be579a4e76d274fbe  gcc/config/arc/arc.c
! eeba863211b2f4562966e391b229ea69  gcc/config/arc/arc.h
! 11306501dd8ecbe08da440b72577fc05  gcc/config/arc/arc.md
  164b12fbf9f62c635966f4f0e7292436  gcc/config/arc/initfini.c
! 0f6cebc17e2ff7e0619853a662958c2b  gcc/config/arc/lib1funcs.asm
  8716ec248f8b7b4307c4e712160acdeb  gcc/config/arc/t-arc
! b4dc0e55b7eb81cbe53a2184760cf4c6  gcc/config/arm/README-interworking
! fcaa1796efbf8972cdf38f5409e45cc3  gcc/config/arm/aof.h
! 156439a49778f2c746d32b1bf1e6fc58  gcc/config/arm/aout.h
! 9b4680ae52dbbd7f5f587dd5d83864ba  gcc/config/arm/arm-cores.def
! e0fd2fb5f7dd0f1be2b5adacfd769a5a  gcc/config/arm/arm-generic.md
! 10f8ed2bc5018eab689e0b9e8262b91a  gcc/config/arm/arm-modes.def
! 899ddc5d5a201716ae6188b657366ac5  gcc/config/arm/arm-protos.h
! a9c6bb44ae33b82aa493b7046fe6a65a  gcc/config/arm/arm-tune.md
! d1075f93c20673ae9321096749572f41  gcc/config/arm/arm.c
! 60b12ecfdfc6168e257a7b4c7858da42  gcc/config/arm/arm.h
! 953de257c46193233a6d69260f8d65ff  gcc/config/arm/arm.md
! 6fa66b47d689a5c86da021ddb41f43c8  gcc/config/arm/arm1026ejs.md
! 1bd9b6e2cfdb43dad63bc22290c3d937  gcc/config/arm/arm1136jfs.md
! d9db2a7778609ef4f60ff86121680b41  gcc/config/arm/arm926ejs.md
! 290c7f676b1047a2ca4fc36863d27027  gcc/config/arm/bpabi.S
! 1a2fca510cf66a724af98cb389613db7  gcc/config/arm/bpabi.c
! b3056365f18e9ffc54b658137253bedf  gcc/config/arm/bpabi.h
! 32051db2d098a6cd6a59a3946091f1bb  gcc/config/arm/cirrus.md
! 6d68f609092393cd1cc4d634b5b8c333  gcc/config/arm/coff.h
! 0f8c48bdec1bbe110177fdd6e58bba79  gcc/config/arm/crti.asm
! 61e77d5c8487cea2a2171bd4584f596c  gcc/config/arm/crtn.asm
  579c231252aa3ae5e7401afeea0dfcd3  gcc/config/arm/ecos-elf.h
! d728818638c61e19009e4dbd62882895  gcc/config/arm/elf.h
! f9bd0fdf60f59457b78906ae945a1a4c  gcc/config/arm/fpa.md
  7085442f45dad03c1280e353b07ce96c  gcc/config/arm/freebsd.h
! 46d77360c255b528b1f33c3082a70fc0  gcc/config/arm/gentune.sh
! 5f20d68c2876c0af53dda2a0f33c6900  gcc/config/arm/ieee754-df.S
! fc87cda50a19df681c54aee7abd710b8  gcc/config/arm/ieee754-sf.S
! 074cbf83bafc0ac7b409b43c5ecf8431  gcc/config/arm/iwmmxt.md
  ca2bde1eefdda77b41938e5f9da85133  gcc/config/arm/kaos-arm.h
  62e13ca855ed6aa05a6b45e8d03846a9  gcc/config/arm/kaos-strongarm.h
! 4fcbf6e2908e47e4118a07371c18782d  gcc/config/arm/lib1funcs.asm
! 91d7869a372e1e80f22dca5da9b51ae3  gcc/config/arm/libgcc-bpabi.ver
! 45289a37186129da1cc013fab6cecb5d  gcc/config/arm/linux-elf.h
! 54784ee100777058908cc1059af32a57  gcc/config/arm/linux-gas.h
! c43acb8eabb09b7f1ac55949a281fdba  gcc/config/arm/mmintrin.h
! 0f8ba65998caf08198fec2beae983d3b  gcc/config/arm/netbsd-elf.h
! 10ada38365ec61baea89852e75a3736e  gcc/config/arm/netbsd.h
! 7050c6c4f91b00f8bb68de05672edf27  gcc/config/arm/pe.c
! 19e828dc55c26a29a427e6a113f66d4c  gcc/config/arm/pe.h
! 1d859257279b9911a4bc23b9c2305a8f  gcc/config/arm/predicates.md
! 8a0556e88b137ac40bc74e03439742ca  gcc/config/arm/rtems-elf.h
! 9512c41447a606b7b1ce23827eb9ee2f  gcc/config/arm/semi.h
! 74ca07ecacfb5db6d22983a5f4b2a604  gcc/config/arm/semiaof.h
  ff0d30158002a03eb306d7ea2b138a61  gcc/config/arm/strongarm-coff.h
  7e1c4313a2437dc4c37fbc20665db61c  gcc/config/arm/strongarm-elf.h
  6d77295e2963ff824175938a9d3fc2d7  gcc/config/arm/strongarm-pe.h
+ bba99b1b96adc49ddd8ceb77b85f9dde  gcc/config/arm/symbian.h
+ 3f8f64652caf06aeb610ceaa5582834f  gcc/config/arm/t-arm
  5a8ef7705a4b2d9c6af43b0358baf865  gcc/config/arm/t-arm-coff
! b63ebf3c4512053f58a576ec5ba280c6  gcc/config/arm/t-arm-elf
! 28a91290c2edd9ab82fcd2e63b773b99  gcc/config/arm/t-bpabi
! 62166bf3306a8c7da37af0830b172d23  gcc/config/arm/t-linux
! 5c3723d93866203c50f948bfc4a78da8  gcc/config/arm/t-netbsd
! 2bead4fd835842fced54e7275ce1f06f  gcc/config/arm/t-pe
! cbb317a4a7cd4064b379cd1aa2aa96cd  gcc/config/arm/t-rtems
! 3f4caf56c0d20024c789acf824ae52d7  gcc/config/arm/t-semi
  be87610100021f1329b99bc0d755c9b5  gcc/config/arm/t-strongarm-elf
  2ade9b3cb641eb053c4ee8345e749d21  gcc/config/arm/t-strongarm-pe
+ 9ef110c17aa93f8fd99aa96fea7b28da  gcc/config/arm/t-symbian
  3c040dac3e0917fb5ff2b6d8ab597471  gcc/config/arm/t-vxworks
! cedccdf9fd4b90a55ab429e4da5cc852  gcc/config/arm/t-wince-pe
! e508181c4788d80d5fd86025c9e0c82c  gcc/config/arm/t-xscale-coff
! 66f60bf42acddba90c2d485ff6a07a7b  gcc/config/arm/t-xscale-elf
! 2193be4df4c041109b17c69ec83dcdb0  gcc/config/arm/uclinux-elf.h
! 383961fc664abf9195f5e864bce54f1d  gcc/config/arm/unknown-elf.h
! ee71ab9ead3781b251f890970e612c6e  gcc/config/arm/vfp.md
! 646be3031ffadd157674bea9cccf4a7f  gcc/config/arm/vxworks.h
! 7a3b0330b967acf9471952776e7a3938  gcc/config/arm/wince-pe.h
  b5e25aee99e6c3e5a02d16e35c3bdb4c  gcc/config/arm/xscale-coff.h
  a44ceec913b6374da873a1e35bd09b76  gcc/config/arm/xscale-elf.h
! b9c4d40321bff60f6c6d61462a53f17b  gcc/config/avr/avr-protos.h
! 2a32d3473d913853d37812c1cbe8735f  gcc/config/avr/avr.c
! 4b6e6c37bc0c4973d33c1deb119c2bb7  gcc/config/avr/avr.h
! 6fb5cb85846f593abbf82b3a36a0ad8f  gcc/config/avr/avr.md
  03b995ccfb9f42f4958999fddb3f2af9  gcc/config/avr/libgcc.S
! 90768cd4cb6a0275699eacc523ee5cf1  gcc/config/avr/rtems.h
! c4a724ee82b22d6f33f65cf35c04050a  gcc/config/avr/t-avr
! 6aa29f64f366fd362ab1f548d54415cc  gcc/config/avr/t-rtems
  7aee29431880721e88d5d34448ed980f  gcc/config/c4x/c4x-c.c
! fba5ea0f83b1635631cc00311c0e1de7  gcc/config/c4x/c4x-modes.def
! 4fb43372379f3733084fe7876534addf  gcc/config/c4x/c4x-protos.h
! 41a0df19cd9da189a376642e9b8630d6  gcc/config/c4x/c4x.c
! 1b07c81e4da44c4817ffe023d2e57cf2  gcc/config/c4x/c4x.h
! ad21945e21257bfa40b66783ecf02de0  gcc/config/c4x/c4x.md
  db4d38b6b73666d6246b1d13d88737ff  gcc/config/c4x/libgcc.S
  26c90a9d5977b200ec07ac587f4e10e8  gcc/config/c4x/rtems.h
  4fdf00f5884edc1e3e534a63ea4c63e7  gcc/config/c4x/t-c4x
+ 279bb82d95432acaf7f5a5a352c812fa  gcc/config/c4x/t-rtems
  737a2a3d6832f92552c51f14df901ea0  gcc/config/chorus.h
! 2241d850f9f87db2427ad2ea1e79a1d9  gcc/config/cris/aout.h
  c0124aeca2397b068b1bd9c7aae3ceba  gcc/config/cris/arit.c
! 8f71d7c2a11be5a1a970e2af3b7ce995  gcc/config/cris/cris-protos.h
! 7844778b4d5a90c863a9f3a5a8187f43  gcc/config/cris/cris.c
! e9223325ac3583929716003e7b76db6c  gcc/config/cris/cris.h
! 32b4dccd7ea2cd714e40354232ace49b  gcc/config/cris/cris.md
  414fb6676277d06c6d26d142e737b6df  gcc/config/cris/cris_abi_symbol.c
  5f2bb7d8a0b9dc21848654ce0093f05a  gcc/config/cris/linux.h
  7e589512d4c3d6d7f9f7b1baae70d1f3  gcc/config/cris/mulsi3.asm
*************** b8ddfb88a35521172e3364ce4604727a  gcc/co
*** 2075,2232 ****
  b2c53f46db5790d2edda8866ba70276a  gcc/config/cris/t-cris
  5a26644635b6f845f691023911c91faf  gcc/config/cris/t-elfmulti
  f8fb31bb3a9a10b08e1cb042c5022288  gcc/config/cris/t-linux
! d7fa91d8fa7ff8bb493efe3f352e54ee  gcc/config/d30v/abi
! 4d86cdd5785902959230da1feadb768b  gcc/config/d30v/d30v-protos.h
! f53e8fb5d8d5cd9875a02fa07b166dd7  gcc/config/d30v/d30v.c
! f195723702d30be44093102bf0f60dcd  gcc/config/d30v/d30v.h
! ba308d9ca6a4931d5ffda779f3ee57d3  gcc/config/d30v/d30v.md
! 3de0c45b71e5ddb2e05a02bd8ca18db8  gcc/config/d30v/libgcc1.asm
! b5fd335d23d96cb9dcfd0e0851cf2f22  gcc/config/d30v/t-d30v
! 99d41cf1adcf89b2f852294a6d3d6423  gcc/config/darwin-c.c
! 592da989ab9024ce4307b34a0d535aeb  gcc/config/darwin-crt2.c
! fae5939c58c68d19e995b502ea230751  gcc/config/darwin-protos.h
! a6b66e5281221b7fa21a74f380808afd  gcc/config/darwin.c
! e8e02ece9cec61af3d4f8c2294c72f45  gcc/config/darwin.h
  a16576ae28c0a2ec2bbca2c6f747ff5d  gcc/config/dbx.h
! 94673fd9e9c2a780be2b28f30676566b  gcc/config/dbxcoff.h
! 20a2c759a243782af4ebe7f1e41ec33b  gcc/config/dbxelf.h
  dd973d9a715ff98057d5885b259f85a1  gcc/config/divmod.c
! 94cf7dcb6781a83d14e7fab1b7589736  gcc/config/dsp16xx/dsp16xx-modes.def
! fee8c384b2f31c3ecd48e292c2c7073d  gcc/config/dsp16xx/dsp16xx-protos.h
! f73cd048d31fa54dc34955c63170e813  gcc/config/dsp16xx/dsp16xx.c
! 83b8b32dd7af3b6b835b2f4c3eda79de  gcc/config/dsp16xx/dsp16xx.h
! 380faa032798db657e4cfa05e27b7804  gcc/config/dsp16xx/dsp16xx.md
! 5310f300221fa39d452d92768dbc2294  gcc/config/elfos.h
! bc4633fe95c0fcf2fa98908db3b1e9b4  gcc/config/fp-bit.c
  a5a5d825707cca377e28b99406d92ad0  gcc/config/fp-bit.h
  4212cc2416953fa657b1dfa98962168c  gcc/config/fr30/crti.asm
  a2355e2e8266b279cad6bf913c579a5f  gcc/config/fr30/crtn.asm
! 4e9421d9e881be1a800128b87d17dd63  gcc/config/fr30/fr30-protos.h
! 1ac39786cebe829dcc9be3c6955681a7  gcc/config/fr30/fr30.c
! 4da42c49d441b99a669ae7b3c2ee9aeb  gcc/config/fr30/fr30.h
! 21dd61762fadfe93ad6e8c263a46dc28  gcc/config/fr30/fr30.md
  4e833e43d8a4a49c563cf6f6a9e04dc7  gcc/config/fr30/lib1funcs.asm
  b11ea133da1b239a015796811b03e23b  gcc/config/fr30/t-fr30
  bf2176e1eee68deffe236a9735a8f3db  gcc/config/freebsd-nthr.h
! 095482cd1713e11ab16e41308588e6fe  gcc/config/freebsd-spec.h
  99c3be8b7f1d7a86ba300ef7d0a5c1c8  gcc/config/freebsd.h
  acbf95585222995e750d460be6be625b  gcc/config/frv/cmovd.c
  5ca13398f66879cea3a8bb4050f50d3b  gcc/config/frv/cmovh.c
  148f6f1138597ea3279d8b946302e784  gcc/config/frv/cmovw.c
! f5aeeb8db28e6cc740c6bcf77765cb89  gcc/config/frv/frv-abi.h
  38173b8edf724335e3a54587d13c49e9  gcc/config/frv/frv-asm.h
! dd346c78e05a0526be298e7e856a9b04  gcc/config/frv/frv-modes.def
! 5e56414c06fe16f1d84d96a972898c66  gcc/config/frv/frv-protos.h
! a9e31f3b80a6f9bff1e3211d26e321dd  gcc/config/frv/frv.c
! 1ebed4b2d038f0de8cc5cdbed713b1a4  gcc/config/frv/frv.h
! 5be5b19acab9c715ee225cbaac219fdd  gcc/config/frv/frv.md
! 0f60fc98bf64761fa7236a386acfa3d2  gcc/config/frv/frvbegin.c
! c1f20ea40de5032043083fca687670c8  gcc/config/frv/frvend.c
  c84f3efea3babe2f0a51bb40c78df30c  gcc/config/frv/lib1funcs.asm
  519042a46e82243706e07f0df8d12e35  gcc/config/frv/modi.c
! 4beec472a9af6e94c3709e2cda37641c  gcc/config/frv/t-frv
  614493d610e9da58f50094ed9d6c8528  gcc/config/frv/uitod.c
  a69068beb04e8a98db92cd1d366e5a6f  gcc/config/frv/uitof.c
  c363a68408b30fe1ae97782cfb8a4ac1  gcc/config/frv/ulltod.c
  8655cce7a18893493cc17391c6ce08d5  gcc/config/frv/ulltof.c
  756aa4a0c6f33a0203e0ea6594c19e38  gcc/config/frv/umodi.c
! 85b3ebcb7d878714b224e51d11222a09  gcc/config/gnu.h
! bdc68ba85c838fba4f9fb5706d8518c7  gcc/config/gofast.h
  f3b163359eb1338b35be1455781fb481  gcc/config/h8300/clzhi2.c
! 00332e6696650c20c4b5d5726ad28c45  gcc/config/h8300/coff.h
! cbf93bbe7db5230334c20e61e515f0d8  gcc/config/h8300/crti.asm
! d85586b16ac5886fe17d232cc7d41510  gcc/config/h8300/crtn.asm
  932415a9ba68173a13f30c07b1203de4  gcc/config/h8300/ctzhi2.c
! d0b1ad466fb6633aae88a59b846c80f3  gcc/config/h8300/elf.h
! 44fb80250abf03777d3d87b5560e4d34  gcc/config/h8300/fixunssfsi.c
! d6a0414c0779aa5b2edd0c083f3002a0  gcc/config/h8300/h8300-protos.h
! 69285b0187221ed95fdd201d35750cae  gcc/config/h8300/h8300.c
! 25c46f0b220f5697c517050017bc7097  gcc/config/h8300/h8300.h
! 29af06e266d93f1c5596cf35eaa686c5  gcc/config/h8300/h8300.md
! bd7d4b2b5c35161e8c779d705df64fc4  gcc/config/h8300/lib1funcs.asm
  0a17909e7e3f311b6265603b5a043674  gcc/config/h8300/parityhi2.c
  0e0c822e64cc35e772cc1413afa4a092  gcc/config/h8300/popcounthi2.c
  c0f2d063e2f37bb24deb1f0cafcef048  gcc/config/h8300/rtems.h
  e7797670314cc87228b0fcc1277e9ba3  gcc/config/h8300/t-elf
! 0ccaced178abdc2d29b63e91edcd4afb  gcc/config/h8300/t-h8300
  f1012b40b6d48a65690431bfbed4343d  gcc/config/h8300/t-rtems
! 5038a809c8f8b197eeb698ce2954b715  gcc/config/i370/README
! f7001fd60e364be482416ad8e23dddc3  gcc/config/i370/i370-c.c
! 38b97fcf69513094bce66e9abef37cba  gcc/config/i370/i370-protos.h
! 040b670468f1019bca5a0837dc2070e0  gcc/config/i370/i370.c
! d4e08875efda793b2331b54e88cbefcf  gcc/config/i370/i370.h
! 2a0b73bfc6795c415b8c03eaefa4f30e  gcc/config/i370/i370.md
! 6d4e75b8b3b61a2da6edcc1ae092a83b  gcc/config/i370/linux.h
! 74771b485bb9b5411b1079793e487115  gcc/config/i370/mvs.h
! ccd738e0d79be5579cfb5336a44a2ef7  gcc/config/i370/oe.h
! 586e35622689698e8cd86d0b174c005d  gcc/config/i370/t-i370
! 216921367096c10e9fc7307ec99e12a7  gcc/config/i386/athlon.md
  20ef648930f43661bab7ebea3e09894a  gcc/config/i386/att.h
! 5a33d2b213b1842915c51925eb1b8a58  gcc/config/i386/beos-elf.h
  efde24a6c96f8298b0f2bef86449ac5d  gcc/config/i386/biarch64.h
  d7d8c782b899d2204f2514b294680da9  gcc/config/i386/bsd.h
  636c8eb05f1d19aec09f0b979baa244b  gcc/config/i386/crtdll.h
! 790bf7406867cce6a821adf63fa39d3c  gcc/config/i386/cygming.h
  53ea09f0520426453dce8c956f2a977c  gcc/config/i386/cygwin.asm
! 07af59c661a925e3970e41e53259a37a  gcc/config/i386/cygwin.h
! eea864280d070bd8436c86f2654054d8  gcc/config/i386/cygwin1.c
  54754401e910c99d1f7511538c5ff139  gcc/config/i386/cygwin2.c
! 6c4605ee0785dbfb087cd1ce7971ee38  gcc/config/i386/darwin.h
  7519670b1eecca211c908cdc9408b8eb  gcc/config/i386/djgpp.h
! 3497d2fca4368efbb1bc9478c0c0f482  gcc/config/i386/emmintrin.h
! cab57e6c054354cef8eeda3be0749e09  gcc/config/i386/freebsd-aout.h
! 62adc44f6d77fb606e831ee05c802065  gcc/config/i386/freebsd.h
! 6d476ad513e9299cb75ab8b52a80a66f  gcc/config/i386/freebsd64.h
! cf85b36bdb63fe7fdc4dcee66b5039e2  gcc/config/i386/gas.h
  3d6c4acadac62736b94454830f7a63a4  gcc/config/i386/gmon-sol2.c
! e1dff66831f5affa27a1f28e5386192d  gcc/config/i386/gnu.h
  3349498ec85e12ac7055f4802239086c  gcc/config/i386/gstabs.h
! 019ce16f34cb79fe05cfb65d993999b1  gcc/config/i386/gthr-win32.c
  18664f7f6cad82f652e8698646bd5641  gcc/config/i386/i386-aout.h
! 72cec548264c865a141bd264bdc4fc1a  gcc/config/i386/i386-coff.h
! 816e38540e286cd1b1bae60b44180394  gcc/config/i386/i386-interix.h
  9c3634535b436138b84f40c4f8add917  gcc/config/i386/i386-interix3.h
! 23a503cc3aa922a8962eed0adb506c94  gcc/config/i386/i386-modes.def
! 9bc79e7140196dabab7f3533563ef58a  gcc/config/i386/i386-protos.h
! 875b8bdcc0e89a2172539b0e5b652770  gcc/config/i386/i386.c
! 0a6d3d085a76b92330dde7853bc307fc  gcc/config/i386/i386.h
! ee699268df70fc4c83c9d70a3ad67888  gcc/config/i386/i386.md
  5ffe40ec341446d7b52d9632bda88b3c  gcc/config/i386/i386elf.h
! 62ac88d540b38a9a4a45ad8fb13a2c69  gcc/config/i386/k6.md
  3d01dc4d505f2b80a9ede0b2d1aa03d4  gcc/config/i386/kaos-i386.h
! ff921a60a349ecf4c5bfbb4b733665c4  gcc/config/i386/kfreebsdgnu.h
  659bf816fd264115e6611b9a193893a7  gcc/config/i386/libgcc-x86_64-glibc.ver
! e44009a3fb93411e3dfa96ad0432b953  gcc/config/i386/linux-aout.h
! 0198ee7b93ef468d6702ab268ea661d0  gcc/config/i386/linux.h
! 377cb40b026c501fa46fdffe36906023  gcc/config/i386/linux64.h
! 7d1ee30122ba1bb256a79d49a2f361f6  gcc/config/i386/lynx-ng.h
! e6a46bfc23e22c8a7aa785ee9a562c0d  gcc/config/i386/lynx.h
  5e895df4995c0489965107367377218a  gcc/config/i386/mach.h
! e82dee6d5069324663cd0266eca418c0  gcc/config/i386/mingw32.h
! f518df3e6e40eb54c16318f52621c643  gcc/config/i386/mmintrin.h
! aa8ec8a4796b1cbcf5bdf3b51663fc0b  gcc/config/i386/moss.h
! 6f4f41384e3d2854c605cb85a30c7ee9  gcc/config/i386/netbsd-elf.h
  fc16dbeb0506d46a2b6d84763d171f5e  gcc/config/i386/netbsd.h
! 39b910f02fdc2dae19a31d68ce75e876  gcc/config/i386/netbsd64.h
! 6ffafbcda3821fb7fd02cdcf44c5dc05  gcc/config/i386/netware.h
  ce640a722e81f39b71071f934009294c  gcc/config/i386/nto.h
  fc009e092fc272161549f3a1cf0e370e  gcc/config/i386/openbsd.h
  50c17a98a04ff60cc2b0633ddcd34dc4  gcc/config/i386/pentium.md
! d1c43e6ca7a189490b1458aa6661eed1  gcc/config/i386/pmmintrin.h
! e4ecf5bf73068612e441ece94fb7a3f3  gcc/config/i386/ppro.md
  2794e81ef3568a7cddf47d2b96c95f84  gcc/config/i386/ptx4-i.h
  3df85171c88347ec45ba0c58597b1afd  gcc/config/i386/rtemself.h
! 31b27b36ed2f3e51d740c29280407409  gcc/config/i386/sco5.h
  963d9e3eecd2555c85b92a96be15b66f  gcc/config/i386/sol2-c1.asm
  f02e6ebd7ea8e20f6122a328058fb58d  gcc/config/i386/sol2-ci.asm
  2b8365986b4cb8fb7990003865baf9e0  gcc/config/i386/sol2-cn.asm
  8af4f5c7881226d40c3ce286459952a3  gcc/config/i386/sol2-gc1.asm
! 4ab276c5b69f3c712de0a30064228d4c  gcc/config/i386/sol2.h
! 33388522642ac08644c8c58b1cec470e  gcc/config/i386/svr3.ifile
! 8a47e24148ebf30daa43fe58c4416207  gcc/config/i386/svr3dbx.h
! d10fe20ff431314cc348a1a816a2a8a6  gcc/config/i386/svr3gas.h
! 3209c4fd8aedb404ed9870e5c45b338a  gcc/config/i386/svr3z.ifile
! cdf9f292044aa82f45ca6f2690af96e6  gcc/config/i386/sysv3.h
  6e76c810cd6539b90f9445849b435a16  gcc/config/i386/sysv4-cpp.h
  5ef8af0552c2b82a542ae258546eecf7  gcc/config/i386/sysv4.h
  4fedd4a35cff8b554e1bc67573e20887  gcc/config/i386/sysv5.h
--- 2425,2579 ----
  b2c53f46db5790d2edda8866ba70276a  gcc/config/cris/t-cris
  5a26644635b6f845f691023911c91faf  gcc/config/cris/t-elfmulti
  f8fb31bb3a9a10b08e1cb042c5022288  gcc/config/cris/t-linux
! b08571b196ee98b310f89c39edd3ff81  gcc/config/darwin-c.c
! fdc23aaf18e495ffb8d00d2b72e18572  gcc/config/darwin-crt2.c
! a72d3b187047ab1f0ffce2157695b5e4  gcc/config/darwin-protos.h
! 80ceb38c3c33f49b1a63ea7cb3817af5  gcc/config/darwin.c
! 24e4c33836ba68b7a87b3d35dd12d56a  gcc/config/darwin.h
! 8ec0d09229219da60d3a13bff822008e  gcc/config/darwin7.h
! 4af301c035ebd3b6ffa923a90da31823  gcc/config/darwin8.h
  a16576ae28c0a2ec2bbca2c6f747ff5d  gcc/config/dbx.h
! af9a178d969437c5916dbf310c3d3015  gcc/config/dbxcoff.h
! f52cac305c4a9b26ecb3600e7358a0cd  gcc/config/dbxelf.h
  dd973d9a715ff98057d5885b259f85a1  gcc/config/divmod.c
! 23a5cf4d710a2cbb251ad6ed0f4421f7  gcc/config/elfos.h
! 77167cf15406c53fb64035ab956973ce  gcc/config/fp-bit.c
  a5a5d825707cca377e28b99406d92ad0  gcc/config/fp-bit.h
  4212cc2416953fa657b1dfa98962168c  gcc/config/fr30/crti.asm
  a2355e2e8266b279cad6bf913c579a5f  gcc/config/fr30/crtn.asm
! 273088f6819c7fca232bf1ee35b44b3a  gcc/config/fr30/fr30-protos.h
! 1333619ba2e8f367a02f93b0d05a1451  gcc/config/fr30/fr30.c
! 89dbf6cbacca715c68ed48fcd94b9b34  gcc/config/fr30/fr30.h
! 3d710c7c0c2ec248e7901abdc1822cc9  gcc/config/fr30/fr30.md
  4e833e43d8a4a49c563cf6f6a9e04dc7  gcc/config/fr30/lib1funcs.asm
  b11ea133da1b239a015796811b03e23b  gcc/config/fr30/t-fr30
  bf2176e1eee68deffe236a9735a8f3db  gcc/config/freebsd-nthr.h
! b12ab66c830c8a0ae09b073eace0fbfb  gcc/config/freebsd-spec.h
  99c3be8b7f1d7a86ba300ef7d0a5c1c8  gcc/config/freebsd.h
  acbf95585222995e750d460be6be625b  gcc/config/frv/cmovd.c
  5ca13398f66879cea3a8bb4050f50d3b  gcc/config/frv/cmovh.c
  148f6f1138597ea3279d8b946302e784  gcc/config/frv/cmovw.c
! fc58f08a2cec12d4108a247f731d11d9  gcc/config/frv/frv-abi.h
  38173b8edf724335e3a54587d13c49e9  gcc/config/frv/frv-asm.h
! 7bc3ec20318dbcecfbf0c0cd91e6aa7c  gcc/config/frv/frv-modes.def
! 579b937332d254542f7d371e968831ae  gcc/config/frv/frv-protos.h
! 5b8fb9c14a915e811537101a0acfe6ca  gcc/config/frv/frv.c
! b6dc2fc3b9810f162925f78ad1881294  gcc/config/frv/frv.h
! 1d583db6e911087ea793f4959b80e01d  gcc/config/frv/frv.md
! d647a6fe22845a92810df241849b45f7  gcc/config/frv/frvbegin.c
! 6a01ef4b8e3aedba43db3d2cbfcac39b  gcc/config/frv/frvend.c
  c84f3efea3babe2f0a51bb40c78df30c  gcc/config/frv/lib1funcs.asm
+ d9e7d6c9a9149d02fb27cc3eaa5aca4c  gcc/config/frv/libgcc-frv.ver
+ f01bc48c719475863e4addad701d1366  gcc/config/frv/linux.h
  519042a46e82243706e07f0df8d12e35  gcc/config/frv/modi.c
! 47c1fa2f324633caf83ed1f1e23ae0f0  gcc/config/frv/t-frv
! 2084a08c7d0d9f8c610cbfd983b25cdc  gcc/config/frv/t-linux
  614493d610e9da58f50094ed9d6c8528  gcc/config/frv/uitod.c
  a69068beb04e8a98db92cd1d366e5a6f  gcc/config/frv/uitof.c
  c363a68408b30fe1ae97782cfb8a4ac1  gcc/config/frv/ulltod.c
  8655cce7a18893493cc17391c6ce08d5  gcc/config/frv/ulltof.c
  756aa4a0c6f33a0203e0ea6594c19e38  gcc/config/frv/umodi.c
! fc2a41b61b1c92467f82c06cd525f082  gcc/config/gnu.h
! d627a702b831f47f8cd4d588efb29de5  gcc/config/gofast.h
  f3b163359eb1338b35be1455781fb481  gcc/config/h8300/clzhi2.c
! 2f3aa402799fdccf0356e71aa80b9899  gcc/config/h8300/coff.h
! ee8ee7d8f9b322adeb1c0f90eda372f9  gcc/config/h8300/crti.asm
! 5c2d259bed8ae7f277707d598d0c68c0  gcc/config/h8300/crtn.asm
  932415a9ba68173a13f30c07b1203de4  gcc/config/h8300/ctzhi2.c
! 968c02f839f10930dbc80f50e79fb8ba  gcc/config/h8300/elf.h
! d37a3737914996e268d2cc518f734b82  gcc/config/h8300/fixunssfsi.c
! d0c4cd65e45c764b74cdafc357dd4553  gcc/config/h8300/genmova.sh
! b6099667c4e89b58cb7b92e2a735edea  gcc/config/h8300/h8300-protos.h
! d4ad2ddfaff016ccfa3df539e03737d2  gcc/config/h8300/h8300.c
! fc637116545a0864cd4ecbae166f458b  gcc/config/h8300/h8300.h
! 603740c5e0c23ffc3497333fd98b564e  gcc/config/h8300/h8300.md
! a67fd7403228da9bfe9a5da77aa3d7f6  gcc/config/h8300/lib1funcs.asm
! 57d66a7feb9498d420e1aeccf5f6487c  gcc/config/h8300/mova.md
  0a17909e7e3f311b6265603b5a043674  gcc/config/h8300/parityhi2.c
  0e0c822e64cc35e772cc1413afa4a092  gcc/config/h8300/popcounthi2.c
  c0f2d063e2f37bb24deb1f0cafcef048  gcc/config/h8300/rtems.h
  e7797670314cc87228b0fcc1277e9ba3  gcc/config/h8300/t-elf
! b9e7ccf39ad6f3e2028606eed7a6338a  gcc/config/h8300/t-h8300
  f1012b40b6d48a65690431bfbed4343d  gcc/config/h8300/t-rtems
! 05a2952e93eeadc87c0e1a1c724f58c3  gcc/config/host-linux.c
! d1169354d9fb0c002824b9515c9a2392  gcc/config/host-solaris.c
! 70ccbfd1a8499753d7f9dcf440cecf15  gcc/config/i386/athlon.md
  20ef648930f43661bab7ebea3e09894a  gcc/config/i386/att.h
! 74e637205f1f8423a986b0f7f74010fa  gcc/config/i386/beos-elf.h
  efde24a6c96f8298b0f2bef86449ac5d  gcc/config/i386/biarch64.h
  d7d8c782b899d2204f2514b294680da9  gcc/config/i386/bsd.h
  636c8eb05f1d19aec09f0b979baa244b  gcc/config/i386/crtdll.h
! 1ca5ece18656850f3dc1240009fd7203  gcc/config/i386/cygming.h
  53ea09f0520426453dce8c956f2a977c  gcc/config/i386/cygwin.asm
! fd2ff4edc5ad16e4b9007b48091840bd  gcc/config/i386/cygwin.h
! 1455938a0aa0fd1b7bfad25ecdc86747  gcc/config/i386/cygwin1.c
  54754401e910c99d1f7511538c5ff139  gcc/config/i386/cygwin2.c
! 28981362d92ed9874fa6846d4a7f558a  gcc/config/i386/darwin.h
  7519670b1eecca211c908cdc9408b8eb  gcc/config/i386/djgpp.h
! dabf2d05e998f8be6d4fd7d3d04cd2fb  gcc/config/i386/emmintrin.h
! e4cebfb7f75572d50a4570c6ac4ed48b  gcc/config/i386/freebsd.h
! f6df35fd8ee49fe1bcd795f3a863a3af  gcc/config/i386/freebsd64.h
! 07ad1af009bce570e426de5adb357db8  gcc/config/i386/gas.h
! e371c12e72d78120666728d2c8a61f79  gcc/config/i386/gmm_malloc.h
  3d6c4acadac62736b94454830f7a63a4  gcc/config/i386/gmon-sol2.c
! 9b26b0d2725a3764b0d94313af2fc2e8  gcc/config/i386/gnu.h
  3349498ec85e12ac7055f4802239086c  gcc/config/i386/gstabs.h
! cbf1c06251a3d4280f623559dace365c  gcc/config/i386/gthr-win32.c
! bdd1ba7481d8c9bfa8bb9aea7db5293a  gcc/config/i386/host-cygwin.c
! d4f89597a859ab8606358de41b9cb796  gcc/config/i386/host-mingw32.c
  18664f7f6cad82f652e8698646bd5641  gcc/config/i386/i386-aout.h
! 1b2d6ccb27f251b27fa7731dc4bfc0f1  gcc/config/i386/i386-coff.h
! 08f3af675568a1b5e166603f701470c5  gcc/config/i386/i386-interix.h
  9c3634535b436138b84f40c4f8add917  gcc/config/i386/i386-interix3.h
! 450af944a773e9fd3ad7d4ed849da7da  gcc/config/i386/i386-modes.def
! 201238a7ee060ff4fc8b935615e7f471  gcc/config/i386/i386-protos.h
! d94ab6240a26d54364d2171839ad9b9d  gcc/config/i386/i386.c
! e3832cb98835e3c98908a1c7cd8d53ee  gcc/config/i386/i386.h
! 653eba142cd868e45e9ea396a492971a  gcc/config/i386/i386.md
  5ffe40ec341446d7b52d9632bda88b3c  gcc/config/i386/i386elf.h
! a245104040e7966ceec333297c1c91e3  gcc/config/i386/k6.md
  3d01dc4d505f2b80a9ede0b2d1aa03d4  gcc/config/i386/kaos-i386.h
! a82856ece8a0980e5860506200d221e9  gcc/config/i386/kfreebsd-gnu.h
! 43816fe3b21805540e5e01e07c9fb45f  gcc/config/i386/knetbsd-gnu.h
  659bf816fd264115e6611b9a193893a7  gcc/config/i386/libgcc-x86_64-glibc.ver
! 7437ced838e262c3655a3c956afee651  gcc/config/i386/linux-unwind.h
! 31815cb87fbccb161a736ab928338f6b  gcc/config/i386/linux.h
! 4c931d501ebaa2a281334ad72b114a9f  gcc/config/i386/linux64.h
! bb44a3f60543b0e8cd4a84269bf8f3ed  gcc/config/i386/lynx.h
  5e895df4995c0489965107367377218a  gcc/config/i386/mach.h
! fe7dc1d728206353feb0505b9a7cc193  gcc/config/i386/mingw32.h
! e64edaae44560b6a6b8871557da86b7a  gcc/config/i386/mm3dnow.h
! c799d3bec533bd5c02c05f206b539276  gcc/config/i386/mmintrin.h
! 9a96a15c017b45995a598ee6a97428bf  gcc/config/i386/mmx.md
! 66744899d2acfd00c3b63cf7dcd99db0  gcc/config/i386/netbsd-elf.h
  fc16dbeb0506d46a2b6d84763d171f5e  gcc/config/i386/netbsd.h
! ff0b3b09697a1cb293496aceebb6c63a  gcc/config/i386/netbsd64.h
! 5b90890d246145be00b2281b8824e431  gcc/config/i386/netware-crt0.c
! 31645766117c33a1e332155aa86387ad  gcc/config/i386/netware-libgcc.c
! e888fa19487f9969472052fcb346b994  gcc/config/i386/netware-libgcc.def
! 5196a4fa1921772da8e99fa191ac30c9  gcc/config/i386/netware-libgcc.exp
! ac1d5d620dfc11d9dee153c749c60eea  gcc/config/i386/netware.c
! a5aa448ea97db3b498a00db13066aabf  gcc/config/i386/netware.h
  ce640a722e81f39b71071f934009294c  gcc/config/i386/nto.h
+ a70b94b0c64483c59f21d05bba06e7f3  gcc/config/i386/nwld.c
+ f22b4dfd2d26e39708eee04a84b72905  gcc/config/i386/nwld.h
  fc009e092fc272161549f3a1cf0e370e  gcc/config/i386/openbsd.h
+ aaf038dc8c67444e8f65de818a7e5993  gcc/config/i386/openbsdelf.h
  50c17a98a04ff60cc2b0633ddcd34dc4  gcc/config/i386/pentium.md
! 69a34b2ff0b86b0ae981eb98541a672c  gcc/config/i386/pmm_malloc.h
! 2c1858c3e09cabcfe717307c30fe84b6  gcc/config/i386/pmmintrin.h
! 477d4fa8e94a80dfe088eb7a090aba56  gcc/config/i386/ppro.md
! d10d190ebd0e3f8c2ec783b51005e979  gcc/config/i386/predicates.md
  2794e81ef3568a7cddf47d2b96c95f84  gcc/config/i386/ptx4-i.h
  3df85171c88347ec45ba0c58597b1afd  gcc/config/i386/rtemself.h
! 98bde1f207914be26222e713d2a31e26  gcc/config/i386/sco5.h
! 66feda30639b28a91d5474a351417aa5  gcc/config/i386/sol2-10.h
  963d9e3eecd2555c85b92a96be15b66f  gcc/config/i386/sol2-c1.asm
  f02e6ebd7ea8e20f6122a328058fb58d  gcc/config/i386/sol2-ci.asm
  2b8365986b4cb8fb7990003865baf9e0  gcc/config/i386/sol2-cn.asm
  8af4f5c7881226d40c3ce286459952a3  gcc/config/i386/sol2-gc1.asm
! 7a890b9fb85c145470d42d72fe0df8d8  gcc/config/i386/sol2.h
! 5cbfd316867b64dc0542ab6029422f8a  gcc/config/i386/sse.md
  6e76c810cd6539b90f9445849b435a16  gcc/config/i386/sysv4-cpp.h
  5ef8af0552c2b82a542ae258546eecf7  gcc/config/i386/sysv4.h
  4fedd4a35cff8b554e1bc67573e20887  gcc/config/i386/sysv5.h
*************** cdf9f292044aa82f45ca6f2690af96e6  gcc/co
*** 2236,2284 ****
  4d31ae7b4ad7166f3faf9e1a9a130d48  gcc/config/i386/t-cygming
  58ed2275bccf70db9040d133e6d436c0  gcc/config/i386/t-cygwin
  5417015d0073b5048d47c1bec551654a  gcc/config/i386/t-djgpp
  9d51cc32a6dd21f1d4ef90b0658c4880  gcc/config/i386/t-i386elf
  8a4a2e5c633f8ad4196a9f4553f97761  gcc/config/i386/t-interix
  61d2bd3dff8601512ec6968b9e03e923  gcc/config/i386/t-linux64
! 9689b3495212bdd336338c7c21bae688  gcc/config/i386/t-mingw32
  12bfaf1a85f439b287c609d894b2daf1  gcc/config/i386/t-nto
  9abfc00ef17b31f7b5211480044b9ca5  gcc/config/i386/t-openbsd
! b376172457472958a1f8789ca959dcc0  gcc/config/i386/t-rtems-i386
  f7adf22341fac379f3784888c33bfa79  gcc/config/i386/t-sco5
! 4b2405526f0fb1bb057f5c94aae4c5c3  gcc/config/i386/t-sol2
  82c942d4bb0ed544e14d2e46f33f2ec5  gcc/config/i386/t-svr3dbx
- 027da9c402b16f45c51fcc4fb2ac4804  gcc/config/i386/t-udk
  dbce08c57d256e16f93d0786d37b110c  gcc/config/i386/t-uwin
  bdb01fc64d0fac9664048539c841ec8a  gcc/config/i386/t-vxworks
- a1ad82f2def65fc0c5c504ded1dfb0e8  gcc/config/i386/udk.h
  d3394c9065d779420310216eb2238afa  gcc/config/i386/unix.h
  e51d9cc495ad644f33f2a5ac59f27b61  gcc/config/i386/uwin.asm
! 5f32aab457a09ea600d7f2e506fc7dbe  gcc/config/i386/uwin.h
! 68c96851f65ae081e4f283f1606698d4  gcc/config/i386/vsta.h
  99d60a95c1036c564b63cf9363eac59c  gcc/config/i386/vxworks.h
! 6b5ca27795b88eec211adf5c679301b0  gcc/config/i386/winnt.c
! 4a635f91869249794e69f7c73de35863  gcc/config/i386/x-mingw32
  ef1de2af09466da80b8294c0a694be56  gcc/config/i386/x86-64.h
  fd292f5653c26f052d65bd1cc27e0126  gcc/config/i386/xm-cygwin.h
! 668314b4a0c3700f19cad7a35945d172  gcc/config/i386/xm-djgpp.h
! e6bd75540e19f675a4aabe8556c1a732  gcc/config/i386/xm-mingw32.h
! bcb2405da40c72ee721d00ba154df55d  gcc/config/i386/xmmintrin.h
! 564ee508f26797504df9439703b92dcc  gcc/config/i860/i860-protos.h
! ae7033aac831b3dee55d408a11b52364  gcc/config/i860/i860.c
! 07d23f34e5a556bc7af8758eae9a365e  gcc/config/i860/i860.h
! 4ce8d56abd2ae040c22b317a21db615a  gcc/config/i860/i860.md
  1f85a5aaaed458ae9e427557c8901733  gcc/config/i860/sysv4.h
  0dec57792de47025a6f439c3af9a90f0  gcc/config/i860/t-i860
  3aa4566a652839547095820eaf60f6a0  gcc/config/i860/varargs.asm
  890f19499fbab548b7c8348574ee515f  gcc/config/i860/x-sysv4
- b16eb8a508c96e73c23b7832b177a0e3  gcc/config/i960/i960-c.c
- a56c709e778f3b8c5f965bf7469e3372  gcc/config/i960/i960-coff.h
- b396358b6561ecc18159beb29c1f39b4  gcc/config/i960/i960-modes.def
- fff25a1b98e84e09789760887b62895c  gcc/config/i960/i960-protos.h
- 3c93168aeab02687198310b1908e51b0  gcc/config/i960/i960.c
- 5847ba68b49e166001795f521c9638bb  gcc/config/i960/i960.h
- 404dec9aeaa7558a16279ec637e196ba  gcc/config/i960/i960.md
- 3195c6e287844d8588f5f927c6cd1ab8  gcc/config/i960/rtems.h
- 0fecca88175c50f5e95faa026708f48a  gcc/config/i960/t-960bare
  f7da40faedb20475f2da45f0137e4092  gcc/config/ia64/crtbegin.asm
  6128c200f72779e2d611996dfe9f1567  gcc/config/ia64/crtend.asm
  ff3f1b985cb846e7daa846b15484c370  gcc/config/ia64/crtfastmath.c
--- 2583,2625 ----
  4d31ae7b4ad7166f3faf9e1a9a130d48  gcc/config/i386/t-cygming
  58ed2275bccf70db9040d133e6d436c0  gcc/config/i386/t-cygwin
  5417015d0073b5048d47c1bec551654a  gcc/config/i386/t-djgpp
+ 3a1c0dac7740fd9ef48c7bdf5f313c9d  gcc/config/i386/t-gmm_malloc
  9d51cc32a6dd21f1d4ef90b0658c4880  gcc/config/i386/t-i386elf
  8a4a2e5c633f8ad4196a9f4553f97761  gcc/config/i386/t-interix
  61d2bd3dff8601512ec6968b9e03e923  gcc/config/i386/t-linux64
! d0e841868636ac5f0738f00d4da75975  gcc/config/i386/t-mingw32
! 9cc9cc3c49da224107490a5268053699  gcc/config/i386/t-netware
  12bfaf1a85f439b287c609d894b2daf1  gcc/config/i386/t-nto
+ b9586a6c0423e89e0b001125d7b156ae  gcc/config/i386/t-nwld
  9abfc00ef17b31f7b5211480044b9ca5  gcc/config/i386/t-openbsd
! 12a68576d3577a8da82089f18d60c613  gcc/config/i386/t-pmm_malloc
! 43bfa9aecc475d93fe6dbd9c8c36a7c3  gcc/config/i386/t-rtems-i386
  f7adf22341fac379f3784888c33bfa79  gcc/config/i386/t-sco5
! bf0d56b2a4ad597385b36422a351be66  gcc/config/i386/t-sol2
! 6de510e049d7e30fd77d3296380788b7  gcc/config/i386/t-sol2-10
  82c942d4bb0ed544e14d2e46f33f2ec5  gcc/config/i386/t-svr3dbx
  dbce08c57d256e16f93d0786d37b110c  gcc/config/i386/t-uwin
  bdb01fc64d0fac9664048539c841ec8a  gcc/config/i386/t-vxworks
  d3394c9065d779420310216eb2238afa  gcc/config/i386/unix.h
  e51d9cc495ad644f33f2a5ac59f27b61  gcc/config/i386/uwin.asm
! f955e9d3e06a48be823c51242c5b1331  gcc/config/i386/uwin.h
  99d60a95c1036c564b63cf9363eac59c  gcc/config/i386/vxworks.h
! 4a5320cded0a8870a39cf5040f3b95ed  gcc/config/i386/winnt.c
! d9c8250cf4a926f9994f312ea5cecf91  gcc/config/i386/x-cygwin
! 5c9c07d6e4c28f00c5ed6fa3096f3390  gcc/config/i386/x-mingw32
  ef1de2af09466da80b8294c0a694be56  gcc/config/i386/x86-64.h
  fd292f5653c26f052d65bd1cc27e0126  gcc/config/i386/xm-cygwin.h
! 2e17725338319a9367f4b6129890a4f0  gcc/config/i386/xm-djgpp.h
! 622b5d09fac469dbf273d2b3642d768f  gcc/config/i386/xm-mingw32.h
! d76ad63e98baad5f0444502858146b10  gcc/config/i386/xmmintrin.h
! c5db4fda58b872cb0638fbf0e546aa92  gcc/config/i860/i860-protos.h
! 63a8f10b84b969683259816fecfebb12  gcc/config/i860/i860.c
! 55bb8a2080a12c7d28f1f298458b2f57  gcc/config/i860/i860.h
! ebc0d683a4709e3b99b2735dfab02c1f  gcc/config/i860/i860.md
  1f85a5aaaed458ae9e427557c8901733  gcc/config/i860/sysv4.h
  0dec57792de47025a6f439c3af9a90f0  gcc/config/i860/t-i860
  3aa4566a652839547095820eaf60f6a0  gcc/config/i860/varargs.asm
  890f19499fbab548b7c8348574ee515f  gcc/config/i860/x-sysv4
  f7da40faedb20475f2da45f0137e4092  gcc/config/ia64/crtbegin.asm
  6128c200f72779e2d611996dfe9f1567  gcc/config/ia64/crtend.asm
  ff3f1b985cb846e7daa846b15484c370  gcc/config/ia64/crtfastmath.c
*************** ff3f1b985cb846e7daa846b15484c370  gcc/co
*** 2287,2388 ****
  5d28f948154e58980d3423de634cc19e  gcc/config/ia64/elf.h
  19e5759e9dd1e10d49f423604e6c2492  gcc/config/ia64/fde-glibc.c
  72262cc4088397e0e354295db724ddd6  gcc/config/ia64/freebsd.h
! ebe79e8a3811e474628e7e0e0f6d19be  gcc/config/ia64/hpux.h
! 2ea5d0d8d17961f9dd9e8f43a7f8361c  gcc/config/ia64/ia64-c.c
! 64e66c4ca2de187c73ee29acfaa58dce  gcc/config/ia64/ia64-modes.def
! 5a8a96ac67ae1451a506d6c02d8a8362  gcc/config/ia64/ia64-protos.h
! d331184b087f417c38550ab1728c5f69  gcc/config/ia64/ia64.c
! 8221e236274f1e0a3694ca9b43279069  gcc/config/ia64/ia64.h
! e885d34a0ced0946c776f7fbe3de3a32  gcc/config/ia64/ia64.md
! fe7f3a6aab48e459a74f8ab24519a4ac  gcc/config/ia64/ia64intrin.h
! 66b79885ab25056ff0392d3444b20db4  gcc/config/ia64/itanium1.md
! 2e7ec6b4e4a028f7b184e36a639c80c0  gcc/config/ia64/itanium2.md
! 27d3dacf10e0bc01e86d9c966f4783a7  gcc/config/ia64/lib1funcs.asm
  2671bfd958ca35452f338dd160f7423e  gcc/config/ia64/libgcc-ia64.ver
! 3389efdf91bb9b524968e92361c10729  gcc/config/ia64/linux.h
  7c9989fcf8b6631ee8c69d4e2586b759  gcc/config/ia64/quadlib.c
! dcebcd9b1d9b76ed614e5223aada7551  gcc/config/ia64/sysv4.h
  91f1bd175eb95ab632c7220d0aecfe26  gcc/config/ia64/t-glibc
  94b96507e57d80762054d9373f628698  gcc/config/ia64/t-glibc-libunwind
! 3638f53930989a47e6c7e2eef5c411f6  gcc/config/ia64/t-hpux
! f49737944e0698f08cb88692e12d85f8  gcc/config/ia64/t-ia64
! eeaa5a857cce8addad0ae324fa0c9536  gcc/config/ia64/unwind-ia64.c
! 736258182d2e7e25bc6506dd9a9f55bb  gcc/config/ia64/unwind-ia64.h
! 8f26b389e7e9bdb442723ce7e1cf889b  gcc/config/interix.h
  0bf57f10baef2fb83f26d79c4d0b0f48  gcc/config/interix3.h
  15155862f4a068eb6cf5a1de3a5414e8  gcc/config/ip2k/crt0.S
  a46b35d7abe52174d51d2104734a7bde  gcc/config/ip2k/ip2k-protos.h
! 419db8c88c68126798c55f3b74f4f56b  gcc/config/ip2k/ip2k.c
! 8e190c553ce3879e520925fa0f68dbd2  gcc/config/ip2k/ip2k.h
! 54925e6dffda58c4b1c9617b80a27c63  gcc/config/ip2k/ip2k.md
! d5f8fad21c103d1a7f0ecfc6915c3cd6  gcc/config/ip2k/libgcc.S
! 5a951462a810a087be97a80efb6c9509  gcc/config/ip2k/t-ip2k
  c89eb6a652ae6c0c7265cee0be74199c  gcc/config/iq2000/abi
! eb8b5cbba199a6636fcc135b8d612a5f  gcc/config/iq2000/iq2000-protos.h
! 4272a86f6cfe1acb82605b7fc53dceef  gcc/config/iq2000/iq2000.c
! 08e84eca91a0469c4a4bc515476e8f3d  gcc/config/iq2000/iq2000.h
! 2cf5d005820fbf86e11bd043b2ed336b  gcc/config/iq2000/iq2000.md
  9e50dc585921c4678f3a6132c5e8da80  gcc/config/iq2000/lib2extra-funcs.c
  2b523f5a1265cf196780f7cb6de968b3  gcc/config/iq2000/t-iq2000
  0313b3853cfa666ee0f8f65e3e8d360f  gcc/config/kaos.h
! c9f40e42d820534e0dc562e06b4ac135  gcc/config/kfreebsdgnu.h
  4dcbb5e53b0fd1f9cb4e68294b862551  gcc/config/libgcc-glibc.ver
! c3a33c10c9073fae428a97f0f672484f  gcc/config/libgloss.h
! 69588b16782cf58f49b664e6a35c40f5  gcc/config/linux-aout.h
! 0e9f18757d9b8f5dcd350e57f6cc6553  gcc/config/linux.h
! c0c3c7ef6d36f3a4fd74c7b77fa735e6  gcc/config/lynx-ng.h
! 373afac09a9d710e088f51f7b98449ce  gcc/config/lynx.h
  941cc07882b4e18e61b5c4a14d951586  gcc/config/m32r/initfini.c
! 5f5ddb189aa2bda660631eede53e8ec1  gcc/config/m32r/linux.h
  554520aaa68ce73728f30404914c4f3f  gcc/config/m32r/little.h
! 1f1818bb726c5d96ff2e8142fb96a1a8  gcc/config/m32r/m32r-protos.h
! eea4f831d90f159f64bf4f2ca658b59e  gcc/config/m32r/m32r.c
! 0083d969d110bed9a22860baf56d3652  gcc/config/m32r/m32r.h
! 04ff0ce86b512bfeaf1944f186d52767  gcc/config/m32r/m32r.md
! a4d2d7d2b372ee519a4bb7f167b40641  gcc/config/m32r/t-linux
  7741de8684459c1dac5b4b1264a7c698  gcc/config/m32r/t-m32r
  28bdaebb209b8f7fc35411e8791195ab  gcc/config/m32r/xm-linux.h
! 20294b3668e5aceb04de51da2dab9cd5  gcc/config/m32r/xm-m32r.h
  2cf39e4b12fa0ad92705a1541b27f234  gcc/config/m68hc11/larith.asm
  e4189515fd9cc06584fb07722c11ad97  gcc/config/m68hc11/m68hc11-crt0.S
! d0fccd1f2f2f01ae715c2512dcddddc8  gcc/config/m68hc11/m68hc11-protos.h
! b128109dc9ca03310c7169aefdcea791  gcc/config/m68hc11/m68hc11.c
! 80b189406d9beec4bddf8c60b34df12c  gcc/config/m68hc11/m68hc11.h
! 44462f81d93c2c1d6c49da01c3ec0cc4  gcc/config/m68hc11/m68hc11.md
  a4fb550a8d5a48b85e5dd0d8b36312bd  gcc/config/m68hc11/m68hc12.h
! 07954bea8040635671f07fdeaf95c2be  gcc/config/m68hc11/t-m68hc11-gas
! 855065df2da8b466dddb832afd1ee1d1  gcc/config/m68k/coff.h
  a8d7619893f57775eaa1c41c8d162394  gcc/config/m68k/crti.s
  1704b72f91721465cb4e1595eabbc96e  gcc/config/m68k/crtn.s
  d1c94eaa3c0ae8b76f991ae440fa0c26  gcc/config/m68k/fpgnulib.c
- cd932c759229f06f5ecb9e61be3cfb69  gcc/config/m68k/hp310.h
- 7021a24e1d71de0a222aa04b7210b429  gcc/config/m68k/hp320.h
- 456b28316e131eb0571cff196c18007a  gcc/config/m68k/hp320base.h
  58de450df613e3ae9be18a41635ffe1d  gcc/config/m68k/lb1sf68.asm
! 08105f315acc7925811f0b4a809a874e  gcc/config/m68k/linux.h
  a749f9d2254450ab4b154f54a0ee71fd  gcc/config/m68k/m68020-elf.h
  52b4bd9c70571c0e5a8343c7eec02b69  gcc/config/m68k/m68k-aout.h
! 4db1e12297bb49282279ffeaee143f1f  gcc/config/m68k/m68k-modes.def
  f5de3dccd7b69fee151f40dafa2551c5  gcc/config/m68k/m68k-none.h
! 9990f41ab296eb371847ece535071bd6  gcc/config/m68k/m68k-protos.h
! bce5b1d4bdb654f1257d8d22e2ceceb3  gcc/config/m68k/m68k.c
! 79c6a2d248479ffc38a88b8218624857  gcc/config/m68k/m68k.h
! a349141324cde96fbaf6e6bab4be155a  gcc/config/m68k/m68k.md
! 2fa92cd40256d295ed75316643552d2c  gcc/config/m68k/m68kelf.h
! ef0f37469caa7f0bf0ed937b442c9017  gcc/config/m68k/m68kemb.h
! cb1250897818d2842a21d60e3016590c  gcc/config/m68k/m68kv4.h
! 9363b439a91459d8099704b5bf3213ba  gcc/config/m68k/math-68881.h
! e6a4dd8c54b0a0c50fd17154b0abb77a  gcc/config/m68k/netbsd-elf.h
! 2c87c7b4c0463e86d81ea594a4462c50  gcc/config/m68k/netbsd.h
  de7e8c037722ffd4f5958ba64dc1b283  gcc/config/m68k/openbsd.h
  c4fedfc80928f902bbd737615843d4e5  gcc/config/m68k/rtemself.h
- a01aafe2c4bb48246460dbde37b9cb31  gcc/config/m68k/sgs.h
  8e994a5280e2eea4a4c6cc105e41e28d  gcc/config/m68k/t-crtstuff
- fe4f7dc0d15d86adb28e1948cbdf9c52  gcc/config/m68k/t-hp320
  24e375f411f35a73cacf2ee33b4bde26  gcc/config/m68k/t-m68kbare
  abcc59077f1d1920140fec58a5f5b19c  gcc/config/m68k/t-m68kelf
  6dc1bdac2a817f97d98ddda8c0715b01  gcc/config/m68k/t-openbsd
! fb3cf1c6d40474f87039394ca55d9a27  gcc/config/m68k/t-rtems
  4e281c631e54b8912258f84196fec9e6  gcc/config/m68k/t-slibgcc-elf-ver
  131f87f1a2db51ac653aeea4f3e2a774  gcc/config/m68k/t-uclinux
  09bd7397484de8dc53b51d6e8dc986ce  gcc/config/m68k/uclinux.h
--- 2628,2725 ----
  5d28f948154e58980d3423de634cc19e  gcc/config/ia64/elf.h
  19e5759e9dd1e10d49f423604e6c2492  gcc/config/ia64/fde-glibc.c
  72262cc4088397e0e354295db724ddd6  gcc/config/ia64/freebsd.h
! f34de4c7d6cfe771898f5ee3f2960105  gcc/config/ia64/hpux.h
! c07c75b029ef670559619d2d5f9401b2  gcc/config/ia64/ia64-c.c
! d3e6298bb4f4dd2ae34f65820574877c  gcc/config/ia64/ia64-modes.def
! 11365a615dfcf49d5d4817f78c3ad743  gcc/config/ia64/ia64-protos.h
! bd1bde7ecb5b7737a582d3ffee2de8ec  gcc/config/ia64/ia64.c
! ecdfb0f9f2f175a1ddd838f19c6e0ea7  gcc/config/ia64/ia64.h
! 785a1899bf389c8386b1e106ea3c6978  gcc/config/ia64/ia64.md
! 9f5dc40ef6cd2aebd9ce8c9a67cc3fbd  gcc/config/ia64/ia64intrin.h
! 49c36b4c462eb77af017a10209955413  gcc/config/ia64/itanium1.md
! bedeb78ca73eefc9aa19a512c2b3d473  gcc/config/ia64/itanium2.md
! 07cda703ae481233bd546896fc4086a4  gcc/config/ia64/lib1funcs.asm
  2671bfd958ca35452f338dd160f7423e  gcc/config/ia64/libgcc-ia64.ver
! 234572be9b1da837beb0e30fa47f558f  gcc/config/ia64/linux-unwind.h
! 4f56fd169a56421f761a0caf55dd8dc8  gcc/config/ia64/linux.h
! ccba0e11ba064f9e831bba91f6ba4d43  gcc/config/ia64/predicates.md
  7c9989fcf8b6631ee8c69d4e2586b759  gcc/config/ia64/quadlib.c
! c08027383bc18546ba1527bb0519cfb6  gcc/config/ia64/sysv4.h
  91f1bd175eb95ab632c7220d0aecfe26  gcc/config/ia64/t-glibc
  94b96507e57d80762054d9373f628698  gcc/config/ia64/t-glibc-libunwind
! fe30f60c7350d58aec4efe398b1b9edf  gcc/config/ia64/t-hpux
! 66abbf940ad680e6c9c203ca47bc8f5e  gcc/config/ia64/t-ia64
! 8227dd6feb135b0afc7902a48b82e1ff  gcc/config/ia64/unwind-ia64.c
! 83c10b57157589615d8cc0cf668c37a7  gcc/config/ia64/unwind-ia64.h
! 8453a3337155a3cfb30c63d7d41f86e8  gcc/config/ia64/vect.md
! f4b3c8635ae47788a197c87760a8928b  gcc/config/interix.h
  0bf57f10baef2fb83f26d79c4d0b0f48  gcc/config/interix3.h
  15155862f4a068eb6cf5a1de3a5414e8  gcc/config/ip2k/crt0.S
  a46b35d7abe52174d51d2104734a7bde  gcc/config/ip2k/ip2k-protos.h
! cbb5b64857c8a08849d3c84ca7ed14b6  gcc/config/ip2k/ip2k.c
! f4759dc4dc53be9132d44bd27a0b3fa8  gcc/config/ip2k/ip2k.h
! 191c60ac6619e7b3b034834fce067b24  gcc/config/ip2k/ip2k.md
! 9cb7d6a6a212295b25efeba4c068be04  gcc/config/ip2k/libgcc.S
! 07eaa16c93777236b46ae1f49c51c936  gcc/config/ip2k/t-ip2k
  c89eb6a652ae6c0c7265cee0be74199c  gcc/config/iq2000/abi
! 09fab2c1ee90f0818a9c08b8bf906afe  gcc/config/iq2000/iq2000-protos.h
! 6ed1cd64ef7e0a7cafc0c2a94d23c1c3  gcc/config/iq2000/iq2000.c
! 584cb1b7f929f79d267da5b4d6584dc3  gcc/config/iq2000/iq2000.h
! a4ffce90bec1c86594956784683f9336  gcc/config/iq2000/iq2000.md
  9e50dc585921c4678f3a6132c5e8da80  gcc/config/iq2000/lib2extra-funcs.c
  2b523f5a1265cf196780f7cb6de968b3  gcc/config/iq2000/t-iq2000
  0313b3853cfa666ee0f8f65e3e8d360f  gcc/config/kaos.h
! fe31931594516f60819b8dcc5d096f10  gcc/config/kfreebsd-gnu.h
! 4d22da20c572cc0370f9de6fd56dfc7b  gcc/config/knetbsd-gnu.h
  4dcbb5e53b0fd1f9cb4e68294b862551  gcc/config/libgcc-glibc.ver
! af4bbe807fb6dfe32208600ead3e72e7  gcc/config/libgloss.h
! abc55a5bcc5d7ef187feace4d2ac550b  gcc/config/linux.h
! af7c0ec324fb7bc3724ce371355fda6b  gcc/config/lynx.h
  941cc07882b4e18e61b5c4a14d951586  gcc/config/m32r/initfini.c
! 5de6ed801292676c3e38abd2c1e89d8e  gcc/config/m32r/libgcc-glibc.ver
! 47db78b3c68fa1f8f18e482207d9ce8a  gcc/config/m32r/linux.h
  554520aaa68ce73728f30404914c4f3f  gcc/config/m32r/little.h
! 97be71b491f2085d1c050d826666a148  gcc/config/m32r/m32r-protos.h
! afc87fd1d6f41fdb54f5dfbce75f0b36  gcc/config/m32r/m32r.c
! b9ae8714b18c731ed4507f0d7d3b0d71  gcc/config/m32r/m32r.h
! c4499d88c8da720bf0df0e6805704437  gcc/config/m32r/m32r.md
! de460ddffc08b535ee03e0e4eb86a0c3  gcc/config/m32r/t-linux
  7741de8684459c1dac5b4b1264a7c698  gcc/config/m32r/t-m32r
  28bdaebb209b8f7fc35411e8791195ab  gcc/config/m32r/xm-linux.h
! b83576b9672d6781f03fa5aba34bba9b  gcc/config/m32r/xm-m32r.h
  2cf39e4b12fa0ad92705a1541b27f234  gcc/config/m68hc11/larith.asm
  e4189515fd9cc06584fb07722c11ad97  gcc/config/m68hc11/m68hc11-crt0.S
! 415dd9a462ac5219d32027867a02e880  gcc/config/m68hc11/m68hc11-protos.h
! eee813ce9d4b0dc1f73c8942eb50c4ac  gcc/config/m68hc11/m68hc11.c
! bfc68acd0349ed26b5b7132c046d35cf  gcc/config/m68hc11/m68hc11.h
! 3509dd76b5438ec4ab6d2acac106c07f  gcc/config/m68hc11/m68hc11.md
  a4fb550a8d5a48b85e5dd0d8b36312bd  gcc/config/m68hc11/m68hc12.h
! 0bc2adfc56a4f29ef00fdb03c52a9614  gcc/config/m68hc11/t-m68hc11-gas
! 2a0013c35c2ee05bf62da0f108744854  gcc/config/m68k/coff.h
  a8d7619893f57775eaa1c41c8d162394  gcc/config/m68k/crti.s
  1704b72f91721465cb4e1595eabbc96e  gcc/config/m68k/crtn.s
  d1c94eaa3c0ae8b76f991ae440fa0c26  gcc/config/m68k/fpgnulib.c
  58de450df613e3ae9be18a41635ffe1d  gcc/config/m68k/lb1sf68.asm
! 1f86ced9a52c3461110e778e83ecbd82  gcc/config/m68k/linux.h
  a749f9d2254450ab4b154f54a0ee71fd  gcc/config/m68k/m68020-elf.h
  52b4bd9c70571c0e5a8343c7eec02b69  gcc/config/m68k/m68k-aout.h
! 5c423fb756a7b8a06711798169b4fb09  gcc/config/m68k/m68k-modes.def
  f5de3dccd7b69fee151f40dafa2551c5  gcc/config/m68k/m68k-none.h
! 33f51ad133c42065c1980755f059422b  gcc/config/m68k/m68k-protos.h
! fb624900bf5f7c0e33fc87f4b4ced8e9  gcc/config/m68k/m68k.c
! 8dce0bcb075901aae78c4f8e96692a84  gcc/config/m68k/m68k.h
! 06c0cffefca4ec858a650e1b394e270c  gcc/config/m68k/m68k.md
! 1a09d74f17cc3a7f16516c83e431bcde  gcc/config/m68k/m68kelf.h
! c6e316c1c81bfdd9faae41717478b076  gcc/config/m68k/m68kemb.h
! c0472199959f16fcb58702880954da6e  gcc/config/m68k/math-68881.h
! 5b56c2001463ff5741734da64a1a94ba  gcc/config/m68k/netbsd-elf.h
  de7e8c037722ffd4f5958ba64dc1b283  gcc/config/m68k/openbsd.h
  c4fedfc80928f902bbd737615843d4e5  gcc/config/m68k/rtemself.h
  8e994a5280e2eea4a4c6cc105e41e28d  gcc/config/m68k/t-crtstuff
  24e375f411f35a73cacf2ee33b4bde26  gcc/config/m68k/t-m68kbare
  abcc59077f1d1920140fec58a5f5b19c  gcc/config/m68k/t-m68kelf
  6dc1bdac2a817f97d98ddda8c0715b01  gcc/config/m68k/t-openbsd
! a21380e3e9882a8eab6009d1d07bf4f2  gcc/config/m68k/t-rtems
  4e281c631e54b8912258f84196fec9e6  gcc/config/m68k/t-slibgcc-elf-ver
  131f87f1a2db51ac653aeea4f3e2a774  gcc/config/m68k/t-uclinux
  09bd7397484de8dc53b51d6e8dc986ce  gcc/config/m68k/uclinux.h
*************** fb3cf1c6d40474f87039394ca55d9a27  gcc/co
*** 2390,2751 ****
  9c43067f303669682c4023e10d8db596  gcc/config/mcore/crtn.asm
  d89f7f9d4a68ea184652c4e109584825  gcc/config/mcore/lib1.asm
  3d4d4b35671ff9907374a56008162e2e  gcc/config/mcore/mcore-elf.h
! 2add83814d11e2a1798470106b213708  gcc/config/mcore/mcore-pe.h
! 4ab3773456c1e7fc68e477e3d68958e1  gcc/config/mcore/mcore-protos.h
! 8d4af5fab338f012c200b2ceb29dcac6  gcc/config/mcore/mcore.c
! 400efd51d3e38c27f1f2e16c8d085243  gcc/config/mcore/mcore.h
! 1660cb6a3d5fb5b9effe9c31d6641878  gcc/config/mcore/mcore.md
  7336dd6652ac1371fe713173f6ba12db  gcc/config/mcore/t-mcore
  13b4898d597c0d5c373ffcbc70ec1daf  gcc/config/mcore/t-mcore-pe
! 00d4ff0addaa5edc2958ef8ea02cdd62  gcc/config/mips/5400.md
! b904e317a91d34d10e21f8677b3910aa  gcc/config/mips/5500.md
! 2510c9b484d268819dad40cf2798e619  gcc/config/mips/7000.md
! bd1b17545a28b54b53700867c646b9a3  gcc/config/mips/9000.md
  e14be4312939b30aa2c225c2c915522d  gcc/config/mips/_tilib.c
  539ae79e02c8a7ad80f9e52cf9ed7a19  gcc/config/mips/cross64.h
  d82f3ae3376393010241cce24e044774  gcc/config/mips/crti.asm
  20de4ac90cc0b1ccf48c4aded700edf1  gcc/config/mips/crtn.asm
  6e3426453042c0e0af9d70cfd5679310  gcc/config/mips/dbxmdebug.h
! 311d8a9e56341a098a569b1f5fcb3554  gcc/config/mips/elf.h
! 6cb36503a7622e159cb503f09f19fa05  gcc/config/mips/elf64.h
  10e719a265ef45d11caff894fe4e1ffa  gcc/config/mips/elforion.h
! 8c587d6aadeec8dd23fe0f3d81fbcc30  gcc/config/mips/iris5.h
! 7ab074b18d596dd84933cfb827e50a12  gcc/config/mips/iris5gas.h
! dab134d211db3d8efe7d708ffde248cb  gcc/config/mips/iris5gld.h
! d0a24367a3d9175005c3785c4fdc32c3  gcc/config/mips/iris6.h
! e460cd69a2eee942c6e1774eea8df8ea  gcc/config/mips/iris6gas.h
! 367b520144b2d02016fc8b97e4036968  gcc/config/mips/iris6gld.h
! c8d44836220b6f4a57929907c98b08a8  gcc/config/mips/irix-crti.asm
! 42396be9b1dc43af7b41a45aa5b00883  gcc/config/mips/irix-crtn.asm
! 182be5ff1b5516846eca3001b562f54d  gcc/config/mips/linux.h
! 76fc30a7a040c322fe0a26b567987af3  gcc/config/mips/linux64.h
! f33c0228bbcfa36f548c647c5bd65519  gcc/config/mips/mips-modes.def
! 305ee3824846fce68c93d482a6e2bd6f  gcc/config/mips/mips-protos.h
! 18657ab85cd5f5ff748fc50cfa4c1635  gcc/config/mips/mips.c
! 85d78224da078d6b9f1a5e1d0727a120  gcc/config/mips/mips.h
! bd6396bc95b8605b361ae670351dc145  gcc/config/mips/mips.md
! d299778f4ca31c7cd3ac283066382595  gcc/config/mips/mips16.S
! ab4cb66144b038d6739168ef4402c35c  gcc/config/mips/netbsd.h
! 0a69e319493a873918100a6bfa1bb96b  gcc/config/mips/openbsd.h
! 2166bb35c6385f47c73500081eb4cf86  gcc/config/mips/r3900.h
! df5f2da58869fc1abaaa76608b49fe73  gcc/config/mips/rtems.h
! 162237af074f7e28d3085a1333465e16  gcc/config/mips/sdb.h
! 93247aef5e3c3b7406fbd6dcf2c22e1b  gcc/config/mips/sr71k.md
  c374af376daf2438512f7e59fb7afecc  gcc/config/mips/t-cross64
! d5e295ebb70908142b0b3980596671cb  gcc/config/mips/t-elf
  41a59bc0317c1fc34a93b74695f4879b  gcc/config/mips/t-gofast
! ed96473f0d376434f95534ae32043186  gcc/config/mips/t-iris
! b17ae64d9de3c78127a255f2e9256f5f  gcc/config/mips/t-iris5-6
! 8d9c52a313c8dda148febb3df5290628  gcc/config/mips/t-iris5-as
! 33e8bea4ccb3cec5965fc14eff836345  gcc/config/mips/t-iris5-gas
! 0400d6c41914d7ab711b4c0255f194d1  gcc/config/mips/t-iris6
! 77e1e72efff52fbc31614e04edf89b22  gcc/config/mips/t-irix-gld
! 10342797d8fec11617f3e7c7b3f73262  gcc/config/mips/t-isa3264
! d6db892422fb0c2ea46c8b84872f54f0  gcc/config/mips/t-linux64
  714dc7318069f8a2a1da3d1ef6753696  gcc/config/mips/t-mips
! 78731a3fc072919a3136edb1bce8d0b8  gcc/config/mips/t-r3900
! 73320fd2e7ab70c3cfcd3861451975a3  gcc/config/mips/t-rtems
  b0c5ffe42447cd0fba0800583dfb447e  gcc/config/mips/t-sr71k
! 3d2ba3cbe2e671727cb92956c510ff91  gcc/config/mips/t-vr
  59987eb573fab94df469dd55978c8ff2  gcc/config/mips/t-vxworks
! 609650bbf6c9681163735a79e1d81f8b  gcc/config/mips/vr.h
! a251826414288317ccdef5f201ca49ca  gcc/config/mips/vxworks.h
! bf93af7e121e2f0ea7c6132e44ade110  gcc/config/mips/windiss.h
  1fe67624bc282b332e00a9183e10489b  gcc/config/mmix/crti.asm
  c1bab78e87b655044a66a6e51920a5fb  gcc/config/mmix/crtn.asm
! 02554659568fc4120a81d73131c88910  gcc/config/mmix/mmix-modes.def
! 179dd5c788272fc5c6f0d28bce67ae90  gcc/config/mmix/mmix-protos.h
! eb4cff246ecd19d5c6472a54438cd404  gcc/config/mmix/mmix.c
! 6707e4d74932c2967e4119058dba673a  gcc/config/mmix/mmix.h
! 05622b80a7d3aa8f16e0a67b21ceaba4  gcc/config/mmix/mmix.md
  5ce13841c595af0f47c4466df9be3178  gcc/config/mmix/t-mmix
! 950f3d9bafa20f135dcb97e8b3008782  gcc/config/mn10300/linux.h
! cf44d29551e3f4b359443306f1d2354a  gcc/config/mn10300/mn10300-protos.h
! 4544020d62c4d23a68f566d2c1fbad75  gcc/config/mn10300/mn10300.c
! 7f2760f480bb7c37461f13e30112f966  gcc/config/mn10300/mn10300.h
! 5f260d5691c1aac25ede200a9ca9bd8c  gcc/config/mn10300/mn10300.md
  182cb9b782d5045a6da1a6ff3b7669a6  gcc/config/mn10300/t-linux
  b7d9ad1c46dcee95fcad3885d9462f03  gcc/config/mn10300/t-mn10300
  b937ac0ba17f75856115a8881b0968b9  gcc/config/netbsd-aout.h
  50408db2d60c4d5a1c86be38b0c1761b  gcc/config/netbsd-elf.h
! 5fb49132bdffb73dfec3812831e7730d  gcc/config/netbsd.h
! 618e92af65c53e1c8646415200f86573  gcc/config/netware.h
  e12063fac46f3a632aa5c2ae75396587  gcc/config/ns32k/NOTES
  dedcd00ba3eef6b05dfc0982edbc1162  gcc/config/ns32k/STATUS
  aa660542346e5d936727fa43b24f4d87  gcc/config/ns32k/__unorddf2.c
  70fc0c27945b4a75f41747bd68edb0dc  gcc/config/ns32k/__unordsf2.c
! ed70007d3f7b971fc68101edc73ec566  gcc/config/ns32k/netbsd.h
! 267b30b2ce6139587a76b2359af21933  gcc/config/ns32k/ns32k-protos.h
! 9c0a7e58e30dc217a401188830b8e310  gcc/config/ns32k/ns32k.c
! 398dd1304b60fe999ac09a3b68b7ae0c  gcc/config/ns32k/ns32k.h
! 3a9d686c2e7cb68023da7adcf54fcc13  gcc/config/ns32k/ns32k.md
  68bdfa7a687becd3e55a1c85731a7d8c  gcc/config/ns32k/t-ns32k
  5c76d3a5673713839b14e60a0277cbfc  gcc/config/openbsd-oldgas.h
! d472da6d16cebbfacad65753c3e36df9  gcc/config/openbsd.h
! f3d98ee5e7dd13be504924ff86914542  gcc/config/pa/elf.h
! 59e3708f09f3ab52b190a2d74eaef2c3  gcc/config/pa/fptr.c
  fbafb2bce7ca6f44830ac8a2cef89439  gcc/config/pa/lib2funcs.asm
! 38a36c39b738f59fa3bd41daadecb526  gcc/config/pa/milli64.S
! c27337888945f8fb651f229d5161d02e  gcc/config/pa/pa-64.h
! 0e94f807a8e96c26d9e37e2a0f791948  gcc/config/pa/pa-hpux.h
! 5389579f86e4ab20cf0e32dfcb7faf0a  gcc/config/pa/pa-hpux10.h
! 1f55539c1e2ddf98d0c0f059dd2db5e6  gcc/config/pa/pa-hpux11.h
! 3b71f7f778708bfe6c054f326a09f47a  gcc/config/pa/pa-linux.h
  b79db2bdff3ce59678cce0a5c7e2467c  gcc/config/pa/pa-modes.def
  862c6e19897c6a0a0f32163fe2c231b5  gcc/config/pa/pa-osf.h
! 5df394c483d137380a05dda57a118381  gcc/config/pa/pa-pro-end.h
! 08b3b3bee80e09bba9c9c8468a2e0b32  gcc/config/pa/pa-protos.h
! 996da2974f7384214a6d7b00b6c6e32c  gcc/config/pa/pa.c
! d5ffc22f97efe08293419c09c6b0bea5  gcc/config/pa/pa.h
! ae09261d69c052ccce9ad11c2843402a  gcc/config/pa/pa.md
! e1b345e438499b00ac01d9929c6f9870  gcc/config/pa/pa32-linux.h
! 6181a58a8cc47f511d232097ae22fa86  gcc/config/pa/pa32-regs.h
! aac038c1ddaf0561100958e71c855886  gcc/config/pa/pa64-hpux.h
  153df084b9b299f98ad273972036b95e  gcc/config/pa/pa64-linux.h
! c5bf1b16987ea3e6390b65784f3a4b6a  gcc/config/pa/pa64-regs.h
  a25807809b4fc78f47de63da8e52a14a  gcc/config/pa/pa64-start.h
! dff932eb9704f6fbcd289e8f4c47b4da  gcc/config/pa/quadlib.c
  c265f7851c0e0620098276f5f31521b3  gcc/config/pa/rtems.h
! fd4532420fa5f3da5ffd856bc7eb68e1  gcc/config/pa/som.h
  504fb8ee781c6f20c7a2b7ecfb8f3554  gcc/config/pa/t-dce-thr
! ed6bf19c8dad12d4ea856f4f57c264dd  gcc/config/pa/t-hpux-shlib
  b513dd09b88c32ec68b0a5560392b661  gcc/config/pa/t-linux
  015886f6086f4ace3337cdc1103513dc  gcc/config/pa/t-linux64
  22df8873a0ad9aa1be45fc3aa389a2bd  gcc/config/pa/t-pa
  8dd22c0c09ba499e0c652f510fdc3ea7  gcc/config/pa/t-pa-hpux
! e720df04a7cb8f73ee294707c74c88b3  gcc/config/pa/t-pa64
  fb6f74f1f1eee4fe3566f944a76e3d36  gcc/config/pa/t-pro
  4e281c631e54b8912258f84196fec9e6  gcc/config/pa/t-slibgcc-elf-ver
  82ebdff0138bf22fc79a9db388c8890e  gcc/config/pa/x-ada
  fd76ad552d96241b9f694872c5ee5271  gcc/config/pdp11/2bsd.h
! 61f4e54f7b248ffbef33eca4dc783da7  gcc/config/pdp11/pdp11-modes.def
! e3b484057a5d6a4df3342a2242026980  gcc/config/pdp11/pdp11-protos.h
! e5b488d91bdf111c49ac5c0fa3e01ab2  gcc/config/pdp11/pdp11.c
! 0dd7ede5b31cb4af0f569a5bbbdf0fc3  gcc/config/pdp11/pdp11.h
! 884976e43ac7397a90c1a434462922a0  gcc/config/pdp11/pdp11.md
! 28e72203137b3ab7322a0a3c23b67f4c  gcc/config/pdp11/t-pdp11
! cb41fbc7b544f0c3b51cd3672f290771  gcc/config/ptx4.h
! 4987968e6fd435d55640c5e56da1b894  gcc/config/rs6000/40x.md
! 04cd5bf78b4bb0a44919c09ddd34e524  gcc/config/rs6000/440.md
! 0ebd33649e540d1ff988d82165fe8760  gcc/config/rs6000/603.md
! e42f365c4dc68d9be4c0da14d3a64eab  gcc/config/rs6000/6xx.md
! 563a43cef8bad0c3e79af2fef4aea0f8  gcc/config/rs6000/7450.md
! ceab8b224fb0569f2db82943ca1111ae  gcc/config/rs6000/7xx.md
! 693312ae877ed987307571b1eebf7f7d  gcc/config/rs6000/8540.md
! 78c8f52e778fb3f315ca01a5173eff44  gcc/config/rs6000/aix.h
! 6f75d6ce45e79ee33b8d086538d53fea  gcc/config/rs6000/aix41.h
! f99fed51a3cf6c24f13b7a9356ccccf5  gcc/config/rs6000/aix43.h
! 0641a4c121ec609305c7fcc6b1869117  gcc/config/rs6000/aix51.h
! efab506ed61b9795ec3f198cabf521ee  gcc/config/rs6000/aix52.h
! f7ae12fa308ce5b1195abb20101ddec7  gcc/config/rs6000/altivec-defs.h
! 05224225702a90e33adf95bc69b1f0df  gcc/config/rs6000/altivec.h
! 193acd5cbc5f449cc827e33001d32c8f  gcc/config/rs6000/altivec.md
! 7e84a7177f7527c1b289109dcddb64c2  gcc/config/rs6000/beos.h
  5e7b07b7ea0018a0772373b56e518603  gcc/config/rs6000/biarch64.h
  e53c25b00eba3d11048da25e8b1d20e3  gcc/config/rs6000/crtsavres.asm
! 8595c2d7db07b66d65a36f149162f054  gcc/config/rs6000/darwin-ldouble.c
! c330fd6e7176747ff3f36ecebe0ce7af  gcc/config/rs6000/darwin-tramp.asm
! 463ebb2c33d561c9432c16b13c21be86  gcc/config/rs6000/darwin.h
  de31840d2de0f2dd095788f035caf5ac  gcc/config/rs6000/default64.h
  821e8058ed947674c62dd24a9654e003  gcc/config/rs6000/eabi-ci.asm
  1dcf66d378d4c24774769fca5258f2d6  gcc/config/rs6000/eabi-cn.asm
  b57e8c087d37e126819b4cb307b07525  gcc/config/rs6000/eabi.asm
! 7e9e9216bac9ee6d765ab02e40771c2b  gcc/config/rs6000/eabi.h
  855177ef60fc6547743fa10aeca62e4c  gcc/config/rs6000/eabialtivec.h
  90d057060650d4660bef935491bcee85  gcc/config/rs6000/eabisim.h
! f96e6ec2a04f9e35a918ea38114f44ff  gcc/config/rs6000/eabispe.h
  99e913245a6a32d7fb169d7e06186786  gcc/config/rs6000/freebsd.h
  4f85feb798be4b89d8e601904d386bb0  gcc/config/rs6000/gnu.h
! d316211dc3e4a7b1e9a5b7b8d5ebf3c5  gcc/config/rs6000/host-darwin.c
  da9f2136f559a122795f556795cfd9c7  gcc/config/rs6000/kaos-ppc.h
! 0dbf93569d415611fabe66bb70dfdcf2  gcc/config/rs6000/libgcc-ppc64.ver
! a738fa5f3c3cb3cecd1c8b5cd47d76fe  gcc/config/rs6000/linux.h
! 9fb7fd32cdc2542e05b00dfc028fe34c  gcc/config/rs6000/linux64.h
  ca186f2d12c7ece629ce74ff5ebd8d57  gcc/config/rs6000/linuxaltivec.h
! 49c493b2aa91786c8fc7be0f50a6cf55  gcc/config/rs6000/linuxspe.h
! facfd092f47e8807d3c91d76b39b6ac7  gcc/config/rs6000/lynx.h
! 313a07ce0b7159ff2b43b0f166cac8cb  gcc/config/rs6000/lynxbase.h
  0cc3c5f9101501b8253ce3176c3ffce4  gcc/config/rs6000/milli.exp
! 31471557c82a3b09c50de2f0d73e34d2  gcc/config/rs6000/mpc.md
  0d6257eafc1de2612e21bfa29394958b  gcc/config/rs6000/netbsd.h
! a3fa9fb37465c40a98d92cd7d8e90bc7  gcc/config/rs6000/power4.md
! cad3e0a6d5d6414f5f20a73fee037e27  gcc/config/rs6000/power5.md
  14cec5dfbee9d3f12e63eb6631f6c0cc  gcc/config/rs6000/ppc-asm.h
! e01aa578b9a0a1ad2d58bb7154b6b75c  gcc/config/rs6000/ppc64-fp.c
! 62ff5a4b38545da7beaea2664d0f50f6  gcc/config/rs6000/rios1.md
! e3c80d8d4e193edc7b033193cc3a9df0  gcc/config/rs6000/rios2.md
! c24dc8fe34068aeab43a2ab0c5fa7c85  gcc/config/rs6000/rs6000-c.c
! 2f8b4e7b226eb02133f6c2b65f867f21  gcc/config/rs6000/rs6000-modes.def
! 2518f1792b085e951b55c05c13391da8  gcc/config/rs6000/rs6000-protos.h
! 90ea33fcb31722fbc253c3ba5bf15e3a  gcc/config/rs6000/rs6000.c
! 3d183c6e169bf2ff6ac9f29a378d0b94  gcc/config/rs6000/rs6000.h
! c8222c7f4ae79bcbc68429580967a585  gcc/config/rs6000/rs6000.md
! 022825bbdaad18680fe32e0dd4b693bf  gcc/config/rs6000/rs64.md
! 73b686d454451acedb434f8ed48a8e0b  gcc/config/rs6000/rtems.h
  7a8546dc092c2e0a033f4b7cc7869fbf  gcc/config/rs6000/sol-ci.asm
  c33918bb488efdc2f45bc68097d0c0c1  gcc/config/rs6000/sol-cn.asm
! fc68ddb8310668f910a1bd6668b7b2ca  gcc/config/rs6000/spe.h
! 3ee4e9c6f21d3105fedb8d16d3a12788  gcc/config/rs6000/spe.md
! e292fc4b5ac51fb9e25071f41aac52cf  gcc/config/rs6000/sysv4.h
  c6acb0c963a6bdadf515c9394f7a08c3  gcc/config/rs6000/sysv4le.h
! 2a3f2a5192f151f7dec46de7e78b315e  gcc/config/rs6000/t-aix43
! 84def8776c0e018d10c389bc777559c3  gcc/config/rs6000/t-aix52
! ec4380f6ed553077f33577f7bbaa30d1  gcc/config/rs6000/t-beos
! 50967a7b6e0566dfb0f387d25f466aea  gcc/config/rs6000/t-darwin
  c16e6288fb9b5afba181974ccd9ca5cd  gcc/config/rs6000/t-fprules
  af5e3d318edacb7d0c8d957d005c0b47  gcc/config/rs6000/t-linux64
  5c45aee77bb799356d9f2ce892350021  gcc/config/rs6000/t-netbsd
! 1592fe0774f1cd8e8e0b7685670cbd62  gcc/config/rs6000/t-newas
  6d56f068aa410b3bde020ca31fc092b8  gcc/config/rs6000/t-ppccomm
  b8c287dddae5e63bdbe4aa255348541f  gcc/config/rs6000/t-ppcendian
  4b04e095dbd46aa9f97ea23e3682f902  gcc/config/rs6000/t-ppcgas
  1b8aba690a39464c4ea9c647d73d6983  gcc/config/rs6000/t-ppcos
  32455d65d4625b4d6054756aadddd40a  gcc/config/rs6000/t-rs6000
! 325c599a85995fe0f35a542520315388  gcc/config/rs6000/t-rtems
  f4705b3cd8498a0b439e98a74ef45a9a  gcc/config/rs6000/t-spe
  dbb0e58a422a2c1fcbf01fa1b11da737  gcc/config/rs6000/t-vxworks
  10170ecf836dff4c591070311ff8d766  gcc/config/rs6000/tramp.asm
  b5396a781b1ecbece31fb608cada7a15  gcc/config/rs6000/vxworks.h
  ecd4c68758beed6a3b4502d0cc36475c  gcc/config/rs6000/windiss.h
! fcf69c9342f4dc92270843ddd0b64594  gcc/config/rs6000/x-darwin
  8198b044d1803522a7144e695ceb51e0  gcc/config/rs6000/x-linux64
! 7f54c8c6f947771ae59bd41bf7723d00  gcc/config/rs6000/xcoff.h
! 166331625858aa315aa67f93fe06ebb4  gcc/config/rtems.h
! f2f06599e95ff27f472c90100dec125e  gcc/config/s390/2064.md
! 510129564da2378f1c585e9f44da0a5f  gcc/config/s390/2084.md
  8d59b5b2249f37b4555e6e261f3a4880  gcc/config/s390/fixdfdi.h
  c9c209648bc048a3f0ef7de19702d017  gcc/config/s390/libgcc-glibc.ver
! eeefd7039de87aa25aa1b1c6c11c2115  gcc/config/s390/linux.h
! 21959698e903bd005d92ac3cb4d2d9a7  gcc/config/s390/s390-modes.def
! e8eaae67381efe49f38462c3d80aab04  gcc/config/s390/s390-protos.h
! 625ae1463a806417448358cd1fa38b78  gcc/config/s390/s390.c
! 3cbf3ce14cf9a12df43584dcaad6a189  gcc/config/s390/s390.h
! 55e171dc30784154a81e7f76aed64910  gcc/config/s390/s390.md
  96bcc569e3d9eebb88a508768a5e540a  gcc/config/s390/s390x.h
  da95f4fa0b0ee7d381f39f1bad0c6eba  gcc/config/s390/t-crtstuff
  a4d892ee3aa5b2422dbb80fa4e5c8885  gcc/config/s390/t-linux64
! cb43ce73d409c1ca76f8420448a377d0  gcc/config/s390/t-tpf
! c2033c6a6bcdc37be8a9f18ab3a59c56  gcc/config/s390/tpf.h
  134619fe9d10cbcb81ea6c221bbba3d9  gcc/config/sh/coff.h
! 1f61b4e21ab5b15a11753b82252bc4f0  gcc/config/sh/crt1.asm
  f8ff2d24f238f9d34f2d373a85654a0c  gcc/config/sh/crti.asm
  7f2c0416a0c89aa0a371675927b23a64  gcc/config/sh/crtn.asm
! 6d1188134ba81849289f8598658a1f32  gcc/config/sh/elf.h
  233b944025ba0a51f77d9734e620acda  gcc/config/sh/embed-elf.h
  6403da65ebf65d597873061458690b86  gcc/config/sh/kaos-sh.h
! 7ed1f6c42dd1a7db9641ba3ede750333  gcc/config/sh/lib1funcs.asm
  44275c5268170e500bc78c3b859eca1e  gcc/config/sh/libgcc-glibc.ver
! 9a6cfeafc626b79f864144543579a8a0  gcc/config/sh/libgcc-std.ver
! 982159a032926f64bb2e037942eb7155  gcc/config/sh/linux.h
  44c72c26e0b4e424ab5f39e18c78d937  gcc/config/sh/little.h
! 1f4dca0c5870d686af236875ae612580  gcc/config/sh/netbsd-elf.h
  0a4c0fb3a1c46afbfdf1411f7b18d748  gcc/config/sh/rtems.h
  1496fa5d679b87206f3e8dd33fa49f27  gcc/config/sh/rtemself.h
! 331b2df0e620b6e1d53fcaab317cafe9  gcc/config/sh/sh-modes.def
! be9687ea85f06bf74392f81e4dd9f2fc  gcc/config/sh/sh-protos.h
! f103e349c8ba0200958d1213ab8d3de6  gcc/config/sh/sh.c
! 1ccb75a62aaf379562a00db7a09c4b48  gcc/config/sh/sh.h
! 0679a9bfc3d554c46691d77fdf672d38  gcc/config/sh/sh.md
! 93dbd5fb3e2126b4f1c4689fc674b37f  gcc/config/sh/sh64.h
  03e9503170a8a15a36a1f21d8c154f0d  gcc/config/sh/shmedia.h
  02453300c9160381bfe1762b4ad09d96  gcc/config/sh/sshmedia.h
! 7925692b53afb982a170ece73470aafb  gcc/config/sh/t-be
! 1157ceb83a14f8d530611cd43bcccc48  gcc/config/sh/t-elf
! f58a4b39243e873f18ba5acf3bd02039  gcc/config/sh/t-le
! e3570d2a3c8b832f4cbe13d0bf75476c  gcc/config/sh/t-linux
! 05933f7f72f996d1526360e1ae1a79a2  gcc/config/sh/t-monolib
! 67ce97b242853ada234ca99df198ca12  gcc/config/sh/t-netbsd
! 1da7c986f036e432f00501f55eb43c37  gcc/config/sh/t-netbsd-sh5
! edc44039cebf5c5966a84a1fb53a2fe0  gcc/config/sh/t-netbsd-sh5-64
! 160daec4d891811b3936ba9ad0042ca3  gcc/config/sh/t-sh
! ff486b5b1748867161941eadecc2fff1  gcc/config/sh/t-sh64
  cd23c0e6f888b67b2f6a6851cfc7a387  gcc/config/sh/t-vxworks
! f4e12afbd0e9976e31d00d3485a0506f  gcc/config/sh/ushmedia.h
  a6cccdfc4c9161c88d386fce5cf5d691  gcc/config/sh/vxworks.h
! b3ef8538469f4977efb6c49240354be6  gcc/config/sol2.h
! 2e655d07a7a8450eb0e00a77fe0a4f4c  gcc/config/sparc/aout.h
  75992171df6bd36aee746be9b6891eb4  gcc/config/sparc/biarch64.h
  edb018064f6c389445549d24b26c47a2  gcc/config/sparc/crtfastmath.c
  b75758fcfc8a8360b975b7156ea9097e  gcc/config/sparc/cypress.md
! b14d8131cdf93f083d261709db48439f  gcc/config/sparc/elf.h
! 45db9180d33c7f043a8529b46dfcc882  gcc/config/sparc/freebsd.h
  533401b84b81359ae153cabc27fc7741  gcc/config/sparc/gmon-sol2.c
  78d01c661527621620b6d2b9d3218ad4  gcc/config/sparc/hypersparc.md
  38890399560283d3053d6c66c5bfb517  gcc/config/sparc/lb1spc.asm
  288699866f7087498387137293356f0c  gcc/config/sparc/lb1spl.asm
  061a70dec63c8655361a862095ac0c1d  gcc/config/sparc/libgcc-sparc-glibc.ver
! 9ab5a65d4bdac86935c9e82d942b3752  gcc/config/sparc/linux.h
! fba4327866b696385414baf61dccf9b8  gcc/config/sparc/linux64.h
  abdd9ba41b33643bee5adddbd720ee99  gcc/config/sparc/lite.h
! ca72c2c8f8790c3d1dc7cf6f0bf6d148  gcc/config/sparc/litecoff.h
! 0413b8ded9885128e29b52fe562814ca  gcc/config/sparc/liteelf.h
! fd5aaa2326703a42f2cf7a6197cdce66  gcc/config/sparc/netbsd-elf.h
! 3b21174a6e94c02cb686e812143e9096  gcc/config/sparc/openbsd.h
  082f3edd9cadfbc505e4f9a2c29da338  gcc/config/sparc/openbsd1-64.h
! 55d388f1a48121c4d635f1a04a786f22  gcc/config/sparc/openbsd64.h
! f530aa61cd98a86ba66c1757737f8912  gcc/config/sparc/pbd.h
! 4eac4e9b1b4c88c9f0eab5b2728f539b  gcc/config/sparc/rtemself.h
! 1bdd4d32bca62303e65751f2cbc69cad  gcc/config/sparc/sol2-64.h
! e6a9c3de6cd1b9f89b46f7300eabea92  gcc/config/sparc/sol2-bi.h
  a32d8ed7c92f597be3744c7735e673a7  gcc/config/sparc/sol2-c1.asm
  22e8238b088938f6d11aa882d5983f37  gcc/config/sparc/sol2-ci.asm
  e53764002b6fbbc0dfa667cd847520c1  gcc/config/sparc/sol2-cn.asm
  8be586729cd965c170e47735f936cd52  gcc/config/sparc/sol2-gas-bi.h
  5c9a6c989580e362ce23c14e97313f8b  gcc/config/sparc/sol2-gld-bi.h
  f60a6317c6a87306eb56bda7d115c703  gcc/config/sparc/sol2-gld.h
! 397d5ab212a80eae1c22db66f3b00c4d  gcc/config/sparc/sol2.h
  ffc0b6716f91bcf3cff2caf72c99c1b5  gcc/config/sparc/sol26-sld.h
! 884ec3fc8a8e88d49f72cc73fcd53fd5  gcc/config/sparc/sp64-aout.h
! 16be6add1c1deaaf718d2b6d7b92999e  gcc/config/sparc/sp64-elf.h
! 30b31a9e109437b10fdc3c1325def7ac  gcc/config/sparc/sp86x-elf.h
! ee2d5eebea83685cb939e1d1d7dbc5d3  gcc/config/sparc/sparc-modes.def
! 4f8992e2f9b3ca37e7a125a744a9b909  gcc/config/sparc/sparc-protos.h
! 41dd653556b90020b2a3686770225eee  gcc/config/sparc/sparc.c
! aefc9b64b156e720e357113a164eaf93  gcc/config/sparc/sparc.h
! 8ad5c7d48755e1c5fcb4ddcbc1e83a3e  gcc/config/sparc/sparc.md
  9b0cb9f2cb03683a096d9494293e4295  gcc/config/sparc/sparclet.md
  9d78eb25a37f97fb89ba5be30dfcb23f  gcc/config/sparc/supersparc.md
! 11832fe821d55283ce56beea7ad922fe  gcc/config/sparc/sysv4-only.h
  ecff789a492d64ec9149c06056a19e43  gcc/config/sparc/sysv4.h
  ea7daa17a613a41bfe721bba0ab4e86e  gcc/config/sparc/t-crtfm
! 2be142a15db1f17ab7b3629070e2fb10  gcc/config/sparc/t-elf
  ade54ac9be7dbef6e4427f29cb3d3f93  gcc/config/sparc/t-linux64
  6f3f7caa856cae3d0684d223928518cf  gcc/config/sparc/t-netbsd64
  8b356fc61bbcbe16836e72ecdbc79da0  gcc/config/sparc/t-openbsd
  565cd2d41f0834dacb86326e1ebe761a  gcc/config/sparc/t-sol2
  9084abbcf42f55aa8e55f199dcebd230  gcc/config/sparc/t-sol2-64
  4718b641505610c0a7e9bb4f097b497e  gcc/config/sparc/t-sp86x
! 17d8a2a8f568f9430b40ebecf45ebb69  gcc/config/sparc/t-sparclite
! e69c0c6a7b9e93bf8d3c50479ab941fc  gcc/config/sparc/ultra1_2.md
! 2d642198452f97311ccc98058344b9e5  gcc/config/sparc/ultra3.md
  2430d0e0ec5fbc27769300bf9649de97  gcc/config/stormy16/stormy-abi
  cba38ed60783cf8ce3a67efb3445d8e7  gcc/config/stormy16/stormy16-lib2.c
! 3671ddd8536a1246e1ce9c3647fd2f86  gcc/config/stormy16/stormy16-protos.h
! 608d5aecebdfecd528162e06165a9d03  gcc/config/stormy16/stormy16.c
! 0df3b830e7731c22c62e5efec020407a  gcc/config/stormy16/stormy16.h
! 92e5eced5ca18accce77991dd6af9767  gcc/config/stormy16/stormy16.md
! bb28a6b5c73589f0d7088da318a3d31f  gcc/config/stormy16/t-stormy16
! f5d027dccecd4a70bc316568b03f0007  gcc/config/svr3.h
  f30e905169cf9e2351910b7f9667dd6a  gcc/config/svr4.h
! 61710bfb56c0c78457cc4a7be0e1e723  gcc/config/t-darwin
  c8e307e8ac576d4b0aee46452bf0c655  gcc/config/t-freebsd
  05daebbfe9f0862b4e9a6ca24bf1590a  gcc/config/t-freebsd-thread
  66b2c1d04f0e84800e44c1fcbced73de  gcc/config/t-gnu
- 0fc9e2556f584a2dd30a685f70f0f5d0  gcc/config/t-kfreebsd-gnu
  46a93030da9b91a06f6a8d7e0626f650  gcc/config/t-libc-ok
  2cb2759c288637060c10b81b36246d92  gcc/config/t-libgcc-pic
  752b06967c2c98ca6d2e86e1db9bb4fc  gcc/config/t-libunwind
! df302c7ef7c95a4be212176058cff44e  gcc/config/t-libunwind-elf
! 88f30960537d05ea858fbd4641a2e845  gcc/config/t-linux
! 012c2149fbe5852a7cf303d3c65e458f  gcc/config/t-linux-gnulibc1
  2dde17f4e3667ba8384394397d2e3147  gcc/config/t-netbsd
  24a2b54375feedb5eb220cf5e34d956c  gcc/config/t-openbsd
  6ebbcc6f5bc93a7e72157a6d9eb2b151  gcc/config/t-openbsd-thread
  41115ab7ca3dcd1adeb9a2e03da42f38  gcc/config/t-rtems
! 4020ebb8fd05fa4ba063791a379707ed  gcc/config/t-slibgcc-darwin
! ad08a9cedb5ef2571602fb11c99a3af6  gcc/config/t-slibgcc-elf-ver
  b5d3fe85dff400a82befa6b901b438ec  gcc/config/t-slibgcc-nolc-override
! d96782b8ea633c8db7bbf445629c922d  gcc/config/t-slibgcc-sld
  2549dfa298e48e738d53d1736544bd5f  gcc/config/t-svr4
  2d52a710de52f4c0ba1806c5a6ebfe01  gcc/config/t-vxworks
  17fd5cabcc31b720b23bad47cf7fe84c  gcc/config/tm-dwarf2.h
--- 2727,3151 ----
  9c43067f303669682c4023e10d8db596  gcc/config/mcore/crtn.asm
  d89f7f9d4a68ea184652c4e109584825  gcc/config/mcore/lib1.asm
  3d4d4b35671ff9907374a56008162e2e  gcc/config/mcore/mcore-elf.h
! 09b57f736e693888b16a893344ebca47  gcc/config/mcore/mcore-pe.h
! d20648c0c7f9b4b7ac58ed3d4ce63bfc  gcc/config/mcore/mcore-protos.h
! 017f313193cd8e39ef2167d60bc49679  gcc/config/mcore/mcore.c
! cf7674181c1c782f6334cb6ec4383088  gcc/config/mcore/mcore.h
! eb20800c2638ef001f2f484c58fc014a  gcc/config/mcore/mcore.md
  7336dd6652ac1371fe713173f6ba12db  gcc/config/mcore/t-mcore
  13b4898d597c0d5c373ffcbc70ec1daf  gcc/config/mcore/t-mcore-pe
! 06287f034722081687f831dcb61e986c  gcc/config/memcmp.c
! dad9e98504e8f79e6e97aa29c6b49d96  gcc/config/memcpy.c
! 135a2882c25ab6f90748b020a6cc2f02  gcc/config/memmove.c
! eb54d3066646204ecc21ba5ecb67d572  gcc/config/memset.c
! 54b24a4eb0854e39bc295552c3b584bb  gcc/config/mips/3000.md
! bf887c0c21a46a4103b65476aac2e317  gcc/config/mips/4000.md
! b33415c924642c89f1977217fdeae497  gcc/config/mips/4100.md
! 49ed2d1cd4fc6c1335c212ae8078dba0  gcc/config/mips/4130.md
! 9cdb243227fd0f3fdfa93c4de2a85646  gcc/config/mips/4300.md
! b551975fc3ba66aef055600a7d72ca9a  gcc/config/mips/4600.md
! 4fd0e601594eabecbf98872cacfa0464  gcc/config/mips/5000.md
! 31d385a02ef0fa69e1df31782c0efa84  gcc/config/mips/5400.md
! 2ad2458b3426685d7dfe25499afc5a44  gcc/config/mips/5500.md
! b038335faa998cf5c8ffffd62d97dafd  gcc/config/mips/6000.md
! 9cf0f62e17f34b9203a8bccefaa9bcc5  gcc/config/mips/7000.md
! be6894bb4fdd9ab66e7659d812b26d30  gcc/config/mips/9000.md
  e14be4312939b30aa2c225c2c915522d  gcc/config/mips/_tilib.c
  539ae79e02c8a7ad80f9e52cf9ed7a19  gcc/config/mips/cross64.h
  d82f3ae3376393010241cce24e044774  gcc/config/mips/crti.asm
  20de4ac90cc0b1ccf48c4aded700edf1  gcc/config/mips/crtn.asm
  6e3426453042c0e0af9d70cfd5679310  gcc/config/mips/dbxmdebug.h
! e97c1f7194ff7150c444ba90bbfc072d  gcc/config/mips/elf.h
  10e719a265ef45d11caff894fe4e1ffa  gcc/config/mips/elforion.h
! d78e93e677b510449d0494f3becbd401  gcc/config/mips/generic.md
! 586e87f401b05122fa91f3e7316031ed  gcc/config/mips/iris.h
! 5d4e77a7b86a743295f5c181b726cdad  gcc/config/mips/iris5.h
! 38186bb612d5dd7ae4553f732d88af8f  gcc/config/mips/iris6.h
! 131036eadc140e6323844bc1d5f275db  gcc/config/mips/irix-crti.asm
! 9367bc37dec2a0b5311a6dfc4895a1d1  gcc/config/mips/irix-crtn.asm
! 8cedf068a13b7a6305317653e2dda131  gcc/config/mips/linux-unwind.h
! 3d1357693d911856e271e464e5c90aae  gcc/config/mips/linux.h
! 91f64e04b0324a33d319b0e3069e6d9f  gcc/config/mips/linux64.h
! e1b7e3a68ae1b41df738a474a4bfeb66  gcc/config/mips/mips-modes.def
! cad31fb043766fb3ffc9ccdaf527ca87  gcc/config/mips/mips-protos.h
! a6cfba5c35f536fefa657367fcf57b59  gcc/config/mips/mips-ps-3d.md
! 28846f6914f1deee907ce22620f363a5  gcc/config/mips/mips.c
! e7b33a56d967f6983a6cb8d278dc1f99  gcc/config/mips/mips.h
! 44fb85ccb7fd9b02f15e0dffbe418a18  gcc/config/mips/mips.md
! 9b6d62489313f07251fa8e9dca40074f  gcc/config/mips/mips16.S
! 1739fcc3f08e0c9c97c6fcf2327d70e0  gcc/config/mips/netbsd.h
! 0de5852f59a5d30361b4be8807888c2e  gcc/config/mips/openbsd.h
! 8467208b03fe92ed28f82438564b1c90  gcc/config/mips/predicates.md
! 9ab382be4a4e45320846ed4188e15a0a  gcc/config/mips/r3900.h
! ed17df716c4a394e911f4f2233405a74  gcc/config/mips/rtems.h
! fb582590e44533a79ac5737076e1925b  gcc/config/mips/sb1.md
! 2c08d30ed37d4d6f04613025774228ef  gcc/config/mips/sdb.h
! 9b4a7af75e14cecad021b4df5e6dd8a0  gcc/config/mips/sr71k.md
  c374af376daf2438512f7e59fb7afecc  gcc/config/mips/t-cross64
! 97d6cb748e12f3fc58fb20e085b54601  gcc/config/mips/t-elf
  41a59bc0317c1fc34a93b74695f4879b  gcc/config/mips/t-gofast
! e7a281066dc2222690d1f55593b0b5c6  gcc/config/mips/t-iris
! 5e7936a13c48c80f067be5dd80ce39fc  gcc/config/mips/t-iris6
! e8e13a785c4c31ae1f3a19bde8402da4  gcc/config/mips/t-isa3264
! f5e532ad8d7d3a5da7746a563b924b94  gcc/config/mips/t-linux64
  714dc7318069f8a2a1da3d1ef6753696  gcc/config/mips/t-mips
! f8aea45c2091dc6dc9ba1651f6763fff  gcc/config/mips/t-r3900
! 6df9a9e50ef0f9860def1cb1da901ec8  gcc/config/mips/t-rtems
! 95bbd4fbb2b35482da155db647854c12  gcc/config/mips/t-slibgcc-irix
  b0c5ffe42447cd0fba0800583dfb447e  gcc/config/mips/t-sr71k
! d9b6a93e0b374a94f1c151e1a0bc2ab9  gcc/config/mips/t-vr
  59987eb573fab94df469dd55978c8ff2  gcc/config/mips/t-vxworks
! e93b96fc8a58764e03102123982be5c2  gcc/config/mips/vr.h
! 310cf77c3781cebd50ec98b2c77729e9  gcc/config/mips/vr4120-div.S
! d4e0ab51c875ef4f9c471037958d280b  gcc/config/mips/vxworks.h
! b1955b0b8037d624e71259f019084ded  gcc/config/mips/windiss.h
  1fe67624bc282b332e00a9183e10489b  gcc/config/mmix/crti.asm
  c1bab78e87b655044a66a6e51920a5fb  gcc/config/mmix/crtn.asm
! f34f492f67cc4d981c21b4c6d124dc2a  gcc/config/mmix/mmix-modes.def
! d3d7e52fa9915abc8061dc071605ef78  gcc/config/mmix/mmix-protos.h
! 9b84966310f08180fba9954659c66e43  gcc/config/mmix/mmix.c
! 0c9dd18d567725c232dce3ee2dc465cd  gcc/config/mmix/mmix.h
! db69e8a5a2ccc01f1005f6cd8b3284d0  gcc/config/mmix/mmix.md
  5ce13841c595af0f47c4466df9be3178  gcc/config/mmix/t-mmix
! c511eee1a99c4f4d86046352a4341b23  gcc/config/mn10300/linux.h
! 6aa4688ccc208d964818fe7e02263367  gcc/config/mn10300/mn10300-protos.h
! 339090922283d98b91e2badf41bb8372  gcc/config/mn10300/mn10300.c
! 1676ccff9aee57c026892b67aa5f9e10  gcc/config/mn10300/mn10300.h
! 400c55e49d8717fa7ef529ef34647a12  gcc/config/mn10300/mn10300.md
  182cb9b782d5045a6da1a6ff3b7669a6  gcc/config/mn10300/t-linux
  b7d9ad1c46dcee95fcad3885d9462f03  gcc/config/mn10300/t-mn10300
  b937ac0ba17f75856115a8881b0968b9  gcc/config/netbsd-aout.h
  50408db2d60c4d5a1c86be38b0c1761b  gcc/config/netbsd-elf.h
! ea9dacb89c9d5e0c1d1e80ecea18b50b  gcc/config/netbsd.h
  e12063fac46f3a632aa5c2ae75396587  gcc/config/ns32k/NOTES
  dedcd00ba3eef6b05dfc0982edbc1162  gcc/config/ns32k/STATUS
  aa660542346e5d936727fa43b24f4d87  gcc/config/ns32k/__unorddf2.c
  70fc0c27945b4a75f41747bd68edb0dc  gcc/config/ns32k/__unordsf2.c
! 7ac278dd144948ddf2d8094a1d94770c  gcc/config/ns32k/netbsd.h
! a188ed3b3cdd05573232fff1febcc6c4  gcc/config/ns32k/ns32k-protos.h
! 119e2cd63aff144275d0f0ab8670c595  gcc/config/ns32k/ns32k.c
! d58fe9f79ab120312d7d97084f3ae9f2  gcc/config/ns32k/ns32k.h
! a6fe25ab12d0adc6d6aace74c424ad1c  gcc/config/ns32k/ns32k.md
  68bdfa7a687becd3e55a1c85731a7d8c  gcc/config/ns32k/t-ns32k
  5c76d3a5673713839b14e60a0277cbfc  gcc/config/openbsd-oldgas.h
! 79c1eed7701cc50dbf5c4d44afdbb50b  gcc/config/openbsd.h
! 027ff50db12432f7b20bd1bae0d94709  gcc/config/pa/elf.h
! caee84ab509c96c71c541594c104d131  gcc/config/pa/fptr.c
  fbafb2bce7ca6f44830ac8a2cef89439  gcc/config/pa/lib2funcs.asm
! 52025c3ef0526f62c686bdb0d42ed64a  gcc/config/pa/linux-unwind.h
! afdcf2b09147dc7cafec36edfd4fff15  gcc/config/pa/milli64.S
! c2c3c46a3efe0751aaef754509b04503  gcc/config/pa/pa-64.h
! 9cfc3c7d29ba7f904d954689ce587406  gcc/config/pa/pa-host.c
! 8e8a48f817a9474e89653c4253a78cc1  gcc/config/pa/pa-hpux.h
! 8d450336c35fb876f5d09f34ccd83724  gcc/config/pa/pa-hpux10.h
! f01e36c193df377c741dbaa1d4ecaebb  gcc/config/pa/pa-hpux1010.h
! 83af5c3645fb2a1c2a3740ffd9c02b71  gcc/config/pa/pa-hpux11.h
! e51589aed093a0f10eb142754eafb687  gcc/config/pa/pa-hpux1111.h
! 1b810596e51256dd6f6e52882b5e778b  gcc/config/pa/pa-linux.h
  b79db2bdff3ce59678cce0a5c7e2467c  gcc/config/pa/pa-modes.def
  862c6e19897c6a0a0f32163fe2c231b5  gcc/config/pa/pa-osf.h
! 854fd2474d29263a6c8aee27d5607b3c  gcc/config/pa/pa-pro-end.h
! ed3585a02d538828e5edd6c5ead40d4f  gcc/config/pa/pa-protos.h
! 5e75c92866f2d8672d6e0c6af677b140  gcc/config/pa/pa.c
! eca8f49462d73eaeed7fcb7d3bf24fcf  gcc/config/pa/pa.h
! f05e66caa8a422315c719265fa65ae0d  gcc/config/pa/pa.md
! 879943302e74405d1cb84c8ed0b05098  gcc/config/pa/pa32-linux.h
! d75e2357d33a1914dbafac15dd978ea8  gcc/config/pa/pa32-regs.h
! ccbf2b217629061c1f45b2c942c5f005  gcc/config/pa/pa64-hpux.h
  153df084b9b299f98ad273972036b95e  gcc/config/pa/pa64-linux.h
! 8692163f8406720c9fc426bbd973e930  gcc/config/pa/pa64-regs.h
  a25807809b4fc78f47de63da8e52a14a  gcc/config/pa/pa64-start.h
! 9bbdc248dbeaf8c0911175723fb360d3  gcc/config/pa/quadlib.c
  c265f7851c0e0620098276f5f31521b3  gcc/config/pa/rtems.h
! 6644d007d1761da711cf950fb204ed95  gcc/config/pa/som.h
  504fb8ee781c6f20c7a2b7ecfb8f3554  gcc/config/pa/t-dce-thr
! 70fd364bd64c18d9a2aa451ee0d12d36  gcc/config/pa/t-hpux-shlib
  b513dd09b88c32ec68b0a5560392b661  gcc/config/pa/t-linux
  015886f6086f4ace3337cdc1103513dc  gcc/config/pa/t-linux64
  22df8873a0ad9aa1be45fc3aa389a2bd  gcc/config/pa/t-pa
  8dd22c0c09ba499e0c652f510fdc3ea7  gcc/config/pa/t-pa-hpux
! d0efe50978a41265ae88e9ece50ad296  gcc/config/pa/t-pa64
  fb6f74f1f1eee4fe3566f944a76e3d36  gcc/config/pa/t-pro
  4e281c631e54b8912258f84196fec9e6  gcc/config/pa/t-slibgcc-elf-ver
  82ebdff0138bf22fc79a9db388c8890e  gcc/config/pa/x-ada
+ ea2ae316c1432d11b7702f866ac07c55  gcc/config/pa/x-hpux
+ b10964ce2fd35c3864ca776b3f91e7d7  gcc/config/pa/x-linux
  fd76ad552d96241b9f694872c5ee5271  gcc/config/pdp11/2bsd.h
! 071259f6c7430b239a1428ee2a6f8761  gcc/config/pdp11/pdp11-modes.def
! 852dfdbf3ca5932bc558efe7154c9552  gcc/config/pdp11/pdp11-protos.h
! 882b9ff04c44faef478659f645d0fd3a  gcc/config/pdp11/pdp11.c
! 601d64aa463e8c2d07d71bfcde5125af  gcc/config/pdp11/pdp11.h
! 59b18171b76d5fce41e5774715d70cf6  gcc/config/pdp11/pdp11.md
! 9bbad893fcb3286a0493fd5cfbdaeaa7  gcc/config/pdp11/t-pdp11
! 48a54a7a1994553269f7cd569d1b53c8  gcc/config/ptx4.h
! 26ce6936ad1aa16c45205df9022cc2e6  gcc/config/rs6000/40x.md
! 5f61ee22b76efa0aee0ce56b2bcd5be6  gcc/config/rs6000/440.md
! 74e8f45a1cdfd607d5bda7e9da8cdead  gcc/config/rs6000/603.md
! 359d7b2247973a3de1de4f01c2388ba8  gcc/config/rs6000/6xx.md
! 226d372090829f17e8cdf0f8dc0a7dc5  gcc/config/rs6000/7450.md
! 21a44d1ba1a72dc2de59bf3d09c52ee6  gcc/config/rs6000/7xx.md
! a990ee2a833a836af90ccc8ec6065851  gcc/config/rs6000/8540.md
! 159be21df1ae8a7f823eecfefb0a58b9  gcc/config/rs6000/aix.h
! 1dc99fa4b1a9ca96de8c50b051d02360  gcc/config/rs6000/aix41.h
! aed5c92339d77fac50dfbdcea9c82674  gcc/config/rs6000/aix43.h
! d18eaf0bc0d9abcf5b77e9134c0577af  gcc/config/rs6000/aix51.h
! 1497c8fc487e7ff7239691c3b9e0cc99  gcc/config/rs6000/aix52.h
! e7f63f96581407c22db3f1e5044bd277  gcc/config/rs6000/altivec.h
! 1bd84a6e46f6efc7d1e881de91dae72f  gcc/config/rs6000/altivec.md
! 5a032c0209a706af7c113bb16d1aaf20  gcc/config/rs6000/beos.h
  5e7b07b7ea0018a0772373b56e518603  gcc/config/rs6000/biarch64.h
  e53c25b00eba3d11048da25e8b1d20e3  gcc/config/rs6000/crtsavres.asm
! 3a0f4d83b2fc4801137c7a716e33b053  gcc/config/rs6000/darwin-asm.h
! 41b119bf591f3c337526bd077ba3fa8a  gcc/config/rs6000/darwin-fallback.c
! 048bf916f65bde0ce3e38807c3886744  gcc/config/rs6000/darwin-fpsave.asm
! 51ed3133516e6f9ea803b29b09683617  gcc/config/rs6000/darwin-ldouble-format
! 2742d76dc8783cedde36c816ec6ae63b  gcc/config/rs6000/darwin-ldouble.c
! 4870493c9c79da70b3054a16b2f90cf1  gcc/config/rs6000/darwin-tramp.asm
! 0aca54ed989d33cf98e066048fc1b76f  gcc/config/rs6000/darwin-unwind.h
! 6069b0e0577058f8810367ad1df24eb5  gcc/config/rs6000/darwin-vecsave.asm
! eabfccdf4247c9b461a92941b0e54a45  gcc/config/rs6000/darwin-world.asm
! b95c9de6c21f05eaf248f22809b71e04  gcc/config/rs6000/darwin.h
! d0a66cb3cabf9389f377810237d3eca3  gcc/config/rs6000/darwin.md
  de31840d2de0f2dd095788f035caf5ac  gcc/config/rs6000/default64.h
+ f633d0226bdade988b41d6dcd105ccbf  gcc/config/rs6000/e500-double.h
  821e8058ed947674c62dd24a9654e003  gcc/config/rs6000/eabi-ci.asm
  1dcf66d378d4c24774769fca5258f2d6  gcc/config/rs6000/eabi-cn.asm
  b57e8c087d37e126819b4cb307b07525  gcc/config/rs6000/eabi.asm
! 27da470788e775c45d6b1a86661e4238  gcc/config/rs6000/eabi.h
  855177ef60fc6547743fa10aeca62e4c  gcc/config/rs6000/eabialtivec.h
  90d057060650d4660bef935491bcee85  gcc/config/rs6000/eabisim.h
! f7296a1f77f6287fd57565b360ef2d6f  gcc/config/rs6000/eabispe.h
  99e913245a6a32d7fb169d7e06186786  gcc/config/rs6000/freebsd.h
  4f85feb798be4b89d8e601904d386bb0  gcc/config/rs6000/gnu.h
! d3752e406b638299501b6d573eedbcec  gcc/config/rs6000/host-darwin.c
  da9f2136f559a122795f556795cfd9c7  gcc/config/rs6000/kaos-ppc.h
! 7aa6f4e782960be3e2b43998ef395330  gcc/config/rs6000/libgcc-ppc64.ver
! 904704e59a035d32d2dbc7dda4113576  gcc/config/rs6000/linux-unwind.h
! a451a7ed27bd694bd11ce5c6a6e6034d  gcc/config/rs6000/linux.h
! c8a90306191f8015021c608d55b42a02  gcc/config/rs6000/linux64.h
  ca186f2d12c7ece629ce74ff5ebd8d57  gcc/config/rs6000/linuxaltivec.h
! d202a4e17d92bf3e3c740e7064bb32b7  gcc/config/rs6000/linuxspe.h
! 810875491266d4b5e6ba0c4eb9030d9b  gcc/config/rs6000/lynx.h
  0cc3c5f9101501b8253ce3176c3ffce4  gcc/config/rs6000/milli.exp
! 136a473b8941f7201fef0105ad7d96cc  gcc/config/rs6000/mpc.md
  0d6257eafc1de2612e21bfa29394958b  gcc/config/rs6000/netbsd.h
! c1873a571d268c322c3c3f95dc698889  gcc/config/rs6000/power4.md
! 7c56efad83ce04b2d04678403f9d0bb5  gcc/config/rs6000/power5.md
  14cec5dfbee9d3f12e63eb6631f6c0cc  gcc/config/rs6000/ppc-asm.h
! ed8d976a0fa00c5f9ad6e9588101ce50  gcc/config/rs6000/ppc64-fp.c
! 34b9775963afab5ff1b15066ecdc7ffe  gcc/config/rs6000/rios1.md
! 895d6864152efa2e1cd03f5bd26f6ee1  gcc/config/rs6000/rios2.md
! 5af1f25a97690c44ee4251997882690a  gcc/config/rs6000/rs6000-c.c
! be122c26b032d4b7836921e3fa090fd4  gcc/config/rs6000/rs6000-modes.def
! a75770ca836e883462e89d59234deb65  gcc/config/rs6000/rs6000-protos.h
! 7b3ef875a7d68e6db1fea59d13c7e797  gcc/config/rs6000/rs6000.c
! 377278ed5c461ff87a0d3cdd3902196d  gcc/config/rs6000/rs6000.h
! fb5c9eccecfea14c1cfc16aaed1d49d9  gcc/config/rs6000/rs6000.md
! 0162545ea221a6bffa380944e7403086  gcc/config/rs6000/rs64.md
! 1ae8f607d193c9f68125d76b47c93e3a  gcc/config/rs6000/rtems.h
  7a8546dc092c2e0a033f4b7cc7869fbf  gcc/config/rs6000/sol-ci.asm
  c33918bb488efdc2f45bc68097d0c0c1  gcc/config/rs6000/sol-cn.asm
! df5c4d4353327164ec4cf08f5b513596  gcc/config/rs6000/spe.h
! 128ab5614a9a8a58aaa61570fbf5348e  gcc/config/rs6000/spe.md
! a4e2a5e9ef44cd4f5391a275ce942894  gcc/config/rs6000/sysv4.h
  c6acb0c963a6bdadf515c9394f7a08c3  gcc/config/rs6000/sysv4le.h
! f940f61a78ea18538bdb51dec6292ad1  gcc/config/rs6000/t-aix43
! 855671740011a9890cce9922894ef5fb  gcc/config/rs6000/t-aix52
! 1f94aa9c402b6482e06634ede3a1e1a6  gcc/config/rs6000/t-beos
! b0d2b65d99362fd528c50ab02fab9531  gcc/config/rs6000/t-darwin
! e32166113b1c26e4a131765a147d936d  gcc/config/rs6000/t-darwin8
  c16e6288fb9b5afba181974ccd9ca5cd  gcc/config/rs6000/t-fprules
  af5e3d318edacb7d0c8d957d005c0b47  gcc/config/rs6000/t-linux64
+ 33a1cdad7a31f32a11d1224f9f49860d  gcc/config/rs6000/t-lynx
  5c45aee77bb799356d9f2ce892350021  gcc/config/rs6000/t-netbsd
! 9ad2efda7a6d4d0f1c7479f2b1476ea6  gcc/config/rs6000/t-newas
  6d56f068aa410b3bde020ca31fc092b8  gcc/config/rs6000/t-ppccomm
  b8c287dddae5e63bdbe4aa255348541f  gcc/config/rs6000/t-ppcendian
  4b04e095dbd46aa9f97ea23e3682f902  gcc/config/rs6000/t-ppcgas
  1b8aba690a39464c4ea9c647d73d6983  gcc/config/rs6000/t-ppcos
  32455d65d4625b4d6054756aadddd40a  gcc/config/rs6000/t-rs6000
! dca9c03441600fd3aa17c05c0d62230c  gcc/config/rs6000/t-rtems
  f4705b3cd8498a0b439e98a74ef45a9a  gcc/config/rs6000/t-spe
  dbb0e58a422a2c1fcbf01fa1b11da737  gcc/config/rs6000/t-vxworks
  10170ecf836dff4c591070311ff8d766  gcc/config/rs6000/tramp.asm
  b5396a781b1ecbece31fb608cada7a15  gcc/config/rs6000/vxworks.h
  ecd4c68758beed6a3b4502d0cc36475c  gcc/config/rs6000/windiss.h
! 2e846dfa869ea953c423ec462d1d6d5b  gcc/config/rs6000/x-darwin
  8198b044d1803522a7144e695ceb51e0  gcc/config/rs6000/x-linux64
! 2abd2c023ba444432a510b69587c3f14  gcc/config/rs6000/xcoff.h
! fb346ce82cd022d3c37df9af1577238e  gcc/config/rtems.h
! 2c700250b7f5439e2031456feeccbef7  gcc/config/s390/2064.md
! cd454e14bf66b225342fa339f796e173  gcc/config/s390/2084.md
  8d59b5b2249f37b4555e6e261f3a4880  gcc/config/s390/fixdfdi.h
  c9c209648bc048a3f0ef7de19702d017  gcc/config/s390/libgcc-glibc.ver
! cda0ae69c42a1a91681f11fbae97916d  gcc/config/s390/linux-unwind.h
! e30a94728056fb22cb3eab9f5d3db02b  gcc/config/s390/linux.h
! 0b18a6398b0c27ce03d0e6a37e525dba  gcc/config/s390/s390-modes.def
! 540a5c4a01b8188217a96da95d0ddf72  gcc/config/s390/s390-protos.h
! d21aeafab68e5582b451a2650bc3ec36  gcc/config/s390/s390.c
! 6cc53a6ae831c775b1a36d118b2ec1d9  gcc/config/s390/s390.h
! cebeabc4776bc1c755506d70ced9924c  gcc/config/s390/s390.md
  96bcc569e3d9eebb88a508768a5e540a  gcc/config/s390/s390x.h
  da95f4fa0b0ee7d381f39f1bad0c6eba  gcc/config/s390/t-crtstuff
  a4d892ee3aa5b2422dbb80fa4e5c8885  gcc/config/s390/t-linux64
! 16543103dbad5e6bfab79d75c0c3fd90  gcc/config/s390/t-tpf
! e8c0daf8651063ef874594412e84aed2  gcc/config/s390/tpf-unwind.h
! becb20aea283b4c7e9649250e5d98c90  gcc/config/s390/tpf.h
  134619fe9d10cbcb81ea6c221bbba3d9  gcc/config/sh/coff.h
! e8b15b973f939263c84b8326b9574750  gcc/config/sh/crt1.asm
  f8ff2d24f238f9d34f2d373a85654a0c  gcc/config/sh/crti.asm
  7f2c0416a0c89aa0a371675927b23a64  gcc/config/sh/crtn.asm
! 6e72cc11e4b508c9371148d4d351f13e  gcc/config/sh/elf.h
  233b944025ba0a51f77d9734e620acda  gcc/config/sh/embed-elf.h
  6403da65ebf65d597873061458690b86  gcc/config/sh/kaos-sh.h
! a4f81ef3fd0ccccc9e7cc376f673684c  gcc/config/sh/lib1funcs.asm
! 157ec64c8735b407e490449e74e8ba9f  gcc/config/sh/libgcc-excl.ver
  44275c5268170e500bc78c3b859eca1e  gcc/config/sh/libgcc-glibc.ver
! 788a71e054b06fba88c425b53c0f8e4f  gcc/config/sh/linux-unwind.h
! 3b486959651db5ae011a934958ef7b9d  gcc/config/sh/linux.h
  44c72c26e0b4e424ab5f39e18c78d937  gcc/config/sh/little.h
! 7722c968ff6a26247a7f34dcbd1ce5b8  gcc/config/sh/netbsd-elf.h
  0a4c0fb3a1c46afbfdf1411f7b18d748  gcc/config/sh/rtems.h
  1496fa5d679b87206f3e8dd33fa49f27  gcc/config/sh/rtemself.h
! 3ea9c1283e7823b0e6116b72334bcf7b  gcc/config/sh/sh-modes.def
! 7ad618f66bf9385ac0c79295165f6a2d  gcc/config/sh/sh-protos.h
! d91d53c3e84313d7625feb13896aea25  gcc/config/sh/sh.c
! 44af8ec13335644d16b1ecee79672351  gcc/config/sh/sh.h
! 3347434422c2583d867c09906451a715  gcc/config/sh/sh.md
! b85a6979a98055e05d17d18d7c8f7e31  gcc/config/sh/sh1.md
! 65dcf0a8cef359cffaea9089f46f427d  gcc/config/sh/sh4.md
! 63ba173ebfa2135e2ebe10cbf7469ad1  gcc/config/sh/sh4a.md
! 744d2394a7b3f4824ffbced278d6884b  gcc/config/sh/sh64.h
  03e9503170a8a15a36a1f21d8c154f0d  gcc/config/sh/shmedia.h
+ 8ab28e70e4a0bafd45469ed58b99c383  gcc/config/sh/shmedia.md
  02453300c9160381bfe1762b4ad09d96  gcc/config/sh/sshmedia.h
! 44c5c7fe3cde17cad8d54363473c6f72  gcc/config/sh/symbian-post.h
! aaade0afae321e948431998bf99055a3  gcc/config/sh/symbian-pre.h
! 656930b4f3cb2b702447741425c8596f  gcc/config/sh/symbian.c
! 33a4c57d9b99ba2a5c3bd0cc3cdb324d  gcc/config/sh/t-1e
! 443d7921d857a0161be49685cadb9e1d  gcc/config/sh/t-elf
! d069ecf37203b5833ecf9c11bf7a238e  gcc/config/sh/t-linux
! 1a388da3bbebaf73d6a6b4a1bb1eb4e8  gcc/config/sh/t-linux64
! 8ef4e47dc8b643e6e4640ec4523892bf  gcc/config/sh/t-mlib-sh1
! 97f255bc283e1aef283834553e457b72  gcc/config/sh/t-mlib-sh2
! fce957e12629093c88f8c32937a65e6d  gcc/config/sh/t-mlib-sh2a
! 84b4d3748cfcab5ec5d4dbfc8f9c06d1  gcc/config/sh/t-mlib-sh2a-nofpu
! 7ca05a7ffbc8a7e35355cc2da2f263e9  gcc/config/sh/t-mlib-sh2a-single
! 4509b428983a7d8feedd79875eb0aa16  gcc/config/sh/t-mlib-sh2a-single-only
! d261709704768fa9959b6d844b06fc82  gcc/config/sh/t-mlib-sh2e
! b7d667ed3789ea2ad53a12ebd7bd955d  gcc/config/sh/t-mlib-sh3
! 39de8bdc67fe5e56104636d15071b68f  gcc/config/sh/t-mlib-sh3e
! f505bec13554ca7dd182c8a954f6161a  gcc/config/sh/t-mlib-sh4
! 90f37932e9f132a739661c9e59822e1f  gcc/config/sh/t-mlib-sh4-nofpu
! 6a507c7bb3193df0ad10e7be6c6a6a2f  gcc/config/sh/t-mlib-sh4-single
! 96080d0313dcace55b4dfe447b756f94  gcc/config/sh/t-mlib-sh4-single-only
! e537a9ce5b2f4bf80efeb46715acdefc  gcc/config/sh/t-mlib-sh4a
! c09527e72e625668f1f9aa265dfb7603  gcc/config/sh/t-mlib-sh4a-nofpu
! 37875d743fd0d580ab250a30ea13de5e  gcc/config/sh/t-mlib-sh4a-single
! 49dc51467d39385b8c43e07949fd026f  gcc/config/sh/t-mlib-sh4a-single-only
! d9f5f0ed716564a2815a67dcedcdb0c4  gcc/config/sh/t-mlib-sh4al
! ebeb41a64f603876b7587cacd489f8f1  gcc/config/sh/t-mlib-sh5-32media
! a0068d8d1a624afd64707321f69186bd  gcc/config/sh/t-mlib-sh5-32media-nofpu
! cef53d14a5744ac9b08a287bb89fd98f  gcc/config/sh/t-mlib-sh5-64media
! f4d42f110569c8c0301e8396922cd4da  gcc/config/sh/t-mlib-sh5-64media-nofpu
! 7f556d4052bb1f685c067afa3751162c  gcc/config/sh/t-mlib-sh5-compact
! 3cfe14cd2cbf07e816ce9bc59afe6941  gcc/config/sh/t-mlib-sh5-compact-nofpu
! b6c9342a618448645d5f89ef25b35d48  gcc/config/sh/t-netbsd
! 959d48612dfaf31382c677435816d011  gcc/config/sh/t-netbsd-sh5-64
! ad88281b142c81e6c7017a842c281d5f  gcc/config/sh/t-rtems
! da5297c33d88ead5e589a1d27ba911cf  gcc/config/sh/t-sh
! f3473549c39ff7b31576f8e35cd24c7f  gcc/config/sh/t-sh64
! 8a47f21c9a6295d45af8f3d24cd85cda  gcc/config/sh/t-symbian
  cd23c0e6f888b67b2f6a6851cfc7a387  gcc/config/sh/t-vxworks
! 0f02a857e66f8aa57382a2e14bf42b80  gcc/config/sh/ushmedia.h
  a6cccdfc4c9161c88d386fce5cf5d691  gcc/config/sh/vxworks.h
! 00ce2631b9015b3d779ffc70df30594f  gcc/config/sol2-c.c
! eaecd110350e07dbe068ee1ceb05828c  gcc/config/sol2-protos.h
! 09c05ff78e24184ee98eb37b24a2656b  gcc/config/sol2.c
! cd6fa39a6f08f4f8e067ae43dba75611  gcc/config/sol2.h
! 27b1b44dfd509c633704be10d0f75257  gcc/config/sol26.h
  75992171df6bd36aee746be9b6891eb4  gcc/config/sparc/biarch64.h
  edb018064f6c389445549d24b26c47a2  gcc/config/sparc/crtfastmath.c
  b75758fcfc8a8360b975b7156ea9097e  gcc/config/sparc/cypress.md
! 7f2480a7b2fffa98bca22e0fa2f81b94  gcc/config/sparc/freebsd.h
  533401b84b81359ae153cabc27fc7741  gcc/config/sparc/gmon-sol2.c
  78d01c661527621620b6d2b9d3218ad4  gcc/config/sparc/hypersparc.md
  38890399560283d3053d6c66c5bfb517  gcc/config/sparc/lb1spc.asm
  288699866f7087498387137293356f0c  gcc/config/sparc/lb1spl.asm
  061a70dec63c8655361a862095ac0c1d  gcc/config/sparc/libgcc-sparc-glibc.ver
! 54bcc755ef1d43b8fa293e4ed002c367  gcc/config/sparc/linux-unwind.h
! 7277e8a2ea8865bf266489614e463699  gcc/config/sparc/linux.h
! ac5946a077f684b946f434f6475fb624  gcc/config/sparc/linux64.h
  abdd9ba41b33643bee5adddbd720ee99  gcc/config/sparc/lite.h
! 8b34105840a9c6fcc9d3e4b33b4fbcb4  gcc/config/sparc/litecoff.h
! 15aa96d1d8c64ed25070909fdfeae3bd  gcc/config/sparc/liteelf.h
! 43392940f70e486d868a1e88b48536aa  gcc/config/sparc/netbsd-elf.h
! dade715d07714c3b985b2b47b07d2fca  gcc/config/sparc/openbsd.h
  082f3edd9cadfbc505e4f9a2c29da338  gcc/config/sparc/openbsd1-64.h
! 7f1d717a3d7e072a5d1c7498a204d72b  gcc/config/sparc/openbsd64.h
! a6116dd884312abbd08767df51ec319f  gcc/config/sparc/rtemself.h
! 17bb70cb372c01770c1e497b33b28668  gcc/config/sparc/sol2-64.h
! e80b8e9472ad3561799bac27348d84f8  gcc/config/sparc/sol2-bi.h
  a32d8ed7c92f597be3744c7735e673a7  gcc/config/sparc/sol2-c1.asm
  22e8238b088938f6d11aa882d5983f37  gcc/config/sparc/sol2-ci.asm
  e53764002b6fbbc0dfa667cd847520c1  gcc/config/sparc/sol2-cn.asm
  8be586729cd965c170e47735f936cd52  gcc/config/sparc/sol2-gas-bi.h
+ 948bb27a22efd2286399649cca05494e  gcc/config/sparc/sol2-gas.h
  5c9a6c989580e362ce23c14e97313f8b  gcc/config/sparc/sol2-gld-bi.h
  f60a6317c6a87306eb56bda7d115c703  gcc/config/sparc/sol2-gld.h
! 0f344b78bcfc0f0515b3fc32d152553f  gcc/config/sparc/sol2.h
  ffc0b6716f91bcf3cff2caf72c99c1b5  gcc/config/sparc/sol26-sld.h
! 15478e1d8551aa27e50b21ad27dba116  gcc/config/sparc/sp-elf.h
! ec6e465cfd2a5e161b3957a0247f32cf  gcc/config/sparc/sp64-elf.h
! 65bada1f38356bfeedc1ac1c59a6963b  gcc/config/sparc/sp86x-elf.h
! 98c43b7c694ce5a2b93c292bf743990d  gcc/config/sparc/sparc-modes.def
! 93055fdbc7c64d27a80a1474a971f501  gcc/config/sparc/sparc-protos.h
! 43186e394bbf31d29a349edc8efdf144  gcc/config/sparc/sparc.c
! 18c6496fcf02b4f4fd1666e492d7dab1  gcc/config/sparc/sparc.h
! d66da0098af0a54358954108f4f5149d  gcc/config/sparc/sparc.md
  9b0cb9f2cb03683a096d9494293e4295  gcc/config/sparc/sparclet.md
  9d78eb25a37f97fb89ba5be30dfcb23f  gcc/config/sparc/supersparc.md
! 0146b8e8b2276b878a22507898d0bf81  gcc/config/sparc/sysv4-only.h
  ecff789a492d64ec9149c06056a19e43  gcc/config/sparc/sysv4.h
  ea7daa17a613a41bfe721bba0ab4e86e  gcc/config/sparc/t-crtfm
! 858b81947397cb7b1eea2c16f1f87dc3  gcc/config/sparc/t-elf
  ade54ac9be7dbef6e4427f29cb3d3f93  gcc/config/sparc/t-linux64
  6f3f7caa856cae3d0684d223928518cf  gcc/config/sparc/t-netbsd64
  8b356fc61bbcbe16836e72ecdbc79da0  gcc/config/sparc/t-openbsd
  565cd2d41f0834dacb86326e1ebe761a  gcc/config/sparc/t-sol2
  9084abbcf42f55aa8e55f199dcebd230  gcc/config/sparc/t-sol2-64
  4718b641505610c0a7e9bb4f097b497e  gcc/config/sparc/t-sp86x
! 92f9a0b36de189f429020ecb2eee7093  gcc/config/sparc/t-sparclite
! a06e51ca5cb968bf3ee5e862fa1e4590  gcc/config/sparc/ultra1_2.md
! d97906681d15a3b78c2bca6133a365e7  gcc/config/sparc/ultra3.md
  2430d0e0ec5fbc27769300bf9649de97  gcc/config/stormy16/stormy-abi
  cba38ed60783cf8ce3a67efb3445d8e7  gcc/config/stormy16/stormy16-lib2.c
! 6cbcc14cabd849e53c7c241cf2b70564  gcc/config/stormy16/stormy16-protos.h
! 39c41f3604eb6efe90978fa315a91b1d  gcc/config/stormy16/stormy16.c
! b2229c47196490be4624cd404c7b148b  gcc/config/stormy16/stormy16.h
! 46e0418547dc89de886fa63a674455ce  gcc/config/stormy16/stormy16.md
! 83e3a843e188dd0e132955d72ff04c09  gcc/config/stormy16/t-stormy16
! 3f5c19a34f196ea59766518fb2a887ff  gcc/config/svr3.h
  f30e905169cf9e2351910b7f9667dd6a  gcc/config/svr4.h
! a0f7df1d33f4503d7d23f907d6039f4b  gcc/config/t-darwin
  c8e307e8ac576d4b0aee46452bf0c655  gcc/config/t-freebsd
  05daebbfe9f0862b4e9a6ca24bf1590a  gcc/config/t-freebsd-thread
  66b2c1d04f0e84800e44c1fcbced73de  gcc/config/t-gnu
  46a93030da9b91a06f6a8d7e0626f650  gcc/config/t-libc-ok
  2cb2759c288637060c10b81b36246d92  gcc/config/t-libgcc-pic
  752b06967c2c98ca6d2e86e1db9bb4fc  gcc/config/t-libunwind
! 686e54932f8b3030f0aaa42acef666df  gcc/config/t-libunwind-elf
! 1c0e9adb118dd70ce8c8afc53547bd37  gcc/config/t-linux
! c707625e89ff3493ea2fcbc5f2f91970  gcc/config/t-lynx
  2dde17f4e3667ba8384394397d2e3147  gcc/config/t-netbsd
  24a2b54375feedb5eb220cf5e34d956c  gcc/config/t-openbsd
  6ebbcc6f5bc93a7e72157a6d9eb2b151  gcc/config/t-openbsd-thread
  41115ab7ca3dcd1adeb9a2e03da42f38  gcc/config/t-rtems
! 33eb99564a5fd1e3ba15588b171bd6cd  gcc/config/t-slibgcc-darwin
! a253d3c6b0faf1b5daf4db04d971da8d  gcc/config/t-slibgcc-elf-ver
  b5d3fe85dff400a82befa6b901b438ec  gcc/config/t-slibgcc-nolc-override
! 068f4878a2c11051691b0efb71c66f9f  gcc/config/t-slibgcc-sld
! b241b04bca0de03218c83989000a571e  gcc/config/t-sol2
  2549dfa298e48e738d53d1736544bd5f  gcc/config/t-svr4
  2d52a710de52f4c0ba1806c5a6ebfe01  gcc/config/t-vxworks
  17fd5cabcc31b720b23bad47cf7fe84c  gcc/config/tm-dwarf2.h
*************** dd972a3178049196752c61bf3e182901  gcc/co
*** 2756,3498 ****
  3f0a71b3742ffa4840a16a4d0f9f6158  gcc/config/v850/t-v850
  859a4f4eabb77ce1fec496fefa01f9ef  gcc/config/v850/t-v850e
  54b7f7c77f7ee42692a33fe30693c5fb  gcc/config/v850/v850-c.c
! 62cd20cff7bf7a197f261f473e16ab24  gcc/config/v850/v850-protos.h
! 75e255de0720377ca5058cb3155c06c3  gcc/config/v850/v850.c
! be5ea03d0b97238ca9cf35ef0ef3f3d1  gcc/config/v850/v850.h
! 7d43f84e51ec7811ec64faceee51a2a3  gcc/config/v850/v850.md
  ff655bcfdac01dcda11710bf53d11036  gcc/config/vax/bsd.h
! 5a542d7ca9c9c1538fb4cf73d258c614  gcc/config/vax/elf.h
  7854beb9fd8abeb1e5a819b479a2ed7c  gcc/config/vax/netbsd-elf.h
  fc02bcf5b5b4f0bbf38fc0db67d7dbd9  gcc/config/vax/netbsd.h
  8ebdb700173106189a645cdc31e1eadb  gcc/config/vax/openbsd.h
  5227e52e38a9d92ebf5c98a6c05c385a  gcc/config/vax/openbsd1.h
  0d191ac74cfe5bf9ce95dd373780f5a9  gcc/config/vax/ultrix.h
  609d9fa53bbbd866343c5d2da437e5f0  gcc/config/vax/vax-modes.def
! 18a86c2f8411db5795b804404aca5b37  gcc/config/vax/vax-protos.h
! 2dbc24bca3dbbbd755c28723b32f0cd2  gcc/config/vax/vax.c
! c7ad49bc3904924a568ce7b009a78366  gcc/config/vax/vax.h
! f82322e9fb7f07c63334c1219ae829d5  gcc/config/vax/vax.md
  1bc2419e8ff3b94ad84f7fb45d3f481f  gcc/config/vax/vaxv.h
  c126c4de99d4774b096e7f0a805c46e6  gcc/config/vxlib.c
! 1ad81093d68cf1b320e37a00a7c87811  gcc/config/vxworks.h
  7486b37a20d96dbaab503b1aace6574c  gcc/config/windiss.h
  095ce8a2c17ff3008c87bc4041093d43  gcc/config/x-interix
  c77bff7a5307e960b7bcec0e3587ec91  gcc/config/xtensa/crti.asm
  0020ba3ba9a2612b029856b4a58c9703  gcc/config/xtensa/crtn.asm
! c265aea9ea96c8072e924a7e971c8617  gcc/config/xtensa/elf.h
  90b4b217704fb52fcc4c49fbf80b1ce4  gcc/config/xtensa/lib1funcs.asm
! fa4d3fa6f7d9b1fbc37b78a19760af10  gcc/config/xtensa/lib2funcs.S
  e955455a2d44ae397190dfd815b5eaf4  gcc/config/xtensa/linux.h
  8b7f87d40cffa52a9b218754a117ec74  gcc/config/xtensa/t-elf
  0c49731d95e228dbbfcb9d1eaf2777c3  gcc/config/xtensa/t-linux
  4ec1922febb63e1a911d26a7c7b52943  gcc/config/xtensa/t-xtensa
! 4eeb82b0515b5aa5c05652adeed287ae  gcc/config/xtensa/xtensa-protos.h
! a89dd0b8f86d62a4ad2394989f4cfa48  gcc/config/xtensa/xtensa.c
! 0cd36a8f8b1d9297973e7ab881d97f68  gcc/config/xtensa/xtensa.h
! 8db9c304ed17b7272abb0251fe9b07d9  gcc/config/xtensa/xtensa.md
! cba93add1e00835642499f3bdc5985d5  gcc/configure
! 873f634169a3bebe1d66d376b3f9e48b  gcc/configure.ac
! 17dbdc34cac134e5c8c5d1fa984f7897  gcc/conflict.c
! 36a3aa293be0fc065af8a15b63e73f42  gcc/convert.c
! 2e6366a1940cbf3d6ca17a3aa8d656ed  gcc/convert.h
! af6632153fa98ee29a45c6c80d4335a8  gcc/coretypes.h
! 943f8e628e329744c93ccf32d3a18e1c  gcc/coverage.c
! e4ad183c674fb7d59491dc2941d112d2  gcc/coverage.h
! 30cf1cc153b05fc4cda819c23809c85c  gcc/cp/ChangeLog
  d788e4824ae889eb5c8e067a9f94a419  gcc/cp/ChangeLog.1
  43a2f3aeb6c981482f5a0c2575d1e5ae  gcc/cp/ChangeLog.2
! b5d962198933688d83e8a77a5a2c2154  gcc/cp/ChangeLog.3
  b9cb813675d1e580dd01146a550faa7c  gcc/cp/ChangeLog.egcs
! 42ed50920d5a6097314b76a319f04827  gcc/cp/Make-lang.in
  625bd1bc9937427e1e1f2416a3e799a1  gcc/cp/NEWS
! ac26dd695b0278b16494178cfbea59a9  gcc/cp/call.c
  9f7a823f536eacdd59e2fc31ef4da831  gcc/cp/cfns.gperf
  11598cdaa5f12bb2b4dac5a4171ff165  gcc/cp/cfns.h
! 783c09205096efdc3debe252910005ea  gcc/cp/class.c
! 0579b0a7d724eeea2e0dbf1ce4f236ff  gcc/cp/config-lang.in
! 3f821469b8ed8d4b28c4e25be2706601  gcc/cp/cp-lang.c
! 9f0a6e9ee4872c7bf54486658c8e207f  gcc/cp/cp-tree.def
! 2f5cb2207f28cc0ed6292637f26c1c76  gcc/cp/cp-tree.h
! 955ba577aa6e9e937ea586f798fd6abf  gcc/cp/cvt.c
! c916b63f805bcac359fa0fcb6a1cae32  gcc/cp/cxx-pretty-print.c
! 7368f585c263db5cefe01a68f33ee302  gcc/cp/cxx-pretty-print.h
! 538647fab7f871cff16a274ddc97bcbd  gcc/cp/decl.c
! 9a79bd240dc78750256134315a9b09ba  gcc/cp/decl.h
! 498041f7a5ff898a2b7b8818cf5181a5  gcc/cp/decl2.c
! c9d166d9bec71e6e50bf9c4b648a1463  gcc/cp/dump.c
! 877a5ebeb1f15962552d691e7f2f62a5  gcc/cp/error.c
! 672b7afc3c5adb53767573fb34e5a185  gcc/cp/except.c
! 59d6f4c063f0604ea5a0ef97af43a686  gcc/cp/expr.c
! 84bbeb4fda515fd14310659de8729179  gcc/cp/friend.c
! d241a09e2725800322eca38edfa1a3ca  gcc/cp/g++spec.c
! fb42a3147f2ccdc0278332ac4ff0f7d4  gcc/cp/init.c
! ecce0410614e704b70014527424753ee  gcc/cp/lang-specs.h
! 817c8d2913f30ee30c3a223d61c20d02  gcc/cp/lex.c
! baa9b4f46b819a4f62f82398fafa95fb  gcc/cp/lex.h
! b3268b93b1b9b69a943473f328715dfe  gcc/cp/mangle.c
! 944b58791af34edbf13df0ff5c891eb5  gcc/cp/method.c
! 3b8bf5748615ab2a40b2f3a7043c61f8  gcc/cp/name-lookup.c
! c1bd1df229309799cf0bfcb778eeae14  gcc/cp/name-lookup.h
  c9cae6ab8d289fac682aaa9edc61f211  gcc/cp/operators.def
! 0e09ac1585be3a3dce0743202675e191  gcc/cp/optimize.c
! ad60e2e2d9818ff811d907c5577391ed  gcc/cp/parser.c
! 08068f7b70b018504116a37e761e9c58  gcc/cp/pt.c
! 92d2ef4f1daa8febc40f6a20a69c4e08  gcc/cp/ptree.c
! 9ac70d2224f6e0a2cf639ffe45637323  gcc/cp/repo.c
! 1c494d0eac82e0831e097ec95119896c  gcc/cp/rtti.c
! 9773431fb558784cf89051841a7ac7ea  gcc/cp/search.c
! 8b8d2006abf4f4ee5f6ca519fff55cf8  gcc/cp/semantics.c
! 916adb5cabd10cb5933e3017328c69ed  gcc/cp/tree.c
! 7b60bd165fe5783f6024ea243f80fd6e  gcc/cp/typeck.c
! c25b9539c9891684081b24e189ca5810  gcc/cp/typeck2.c
! 6fb4cde37c077f753da161c45523b144  gcc/cppcharset.c
! 55151294bbbb8c3d0978e59c37781789  gcc/cppdefault.c
! 331807fdb5674eb14564aa8585eb6148  gcc/cppdefault.h
! a3d4708c4b4fdf9e0402a13209465fac  gcc/cpperror.c
! 1505dde700ed30f254d798faed94df5b  gcc/cppexp.c
! 56a64f028c7d8f449a5d866dddde428d  gcc/cppfiles.c
! 6f0e3c0bb53c52c8f7d82375f3c79c0c  gcc/cpphash.c
! 1f571f64ee10009fb093a2e4a95582bc  gcc/cpphash.h
! a5fd2195ce24289fb2826f4586e43522  gcc/cppinit.c
! f82be3c5e8a6a6195219fb250d0e435f  gcc/cpplex.c
! 4f5e0ed4dad79ef54921e36489f04de7  gcc/cpplib.c
! 625272fd54898b148cb876e39039025f  gcc/cpplib.h
! 698198e057a0da7fe4ea6667257c55e8  gcc/cppmacro.c
! 9e244cf39c83e24fb6d96162ee28ac58  gcc/cpppch.c
  5a3952c6e4073ddd293b452fa2568f23  gcc/cppspec.c
! 3517fa440f5f36af8182e1c229393259  gcc/cpptrad.c
! 18b1a76a3d27894d6f678ac1fb9c1fde  gcc/cppucnid.h
! b39cac9c72b8bed17c033346e0c620a3  gcc/cppucnid.pl
! fa4ae38ee0d62c079fd6f214252c1a0c  gcc/cppucnid.tab
! 474c8b4b7cbecbfbe2ba4dd202ca9802  gcc/crtstuff.c
! 21350cf1e2d18a9c60dc4204675359d0  gcc/cse.c
! f7e1d92f3de1981d4111c323c35fad0f  gcc/cselib.c
! 4c163dea530058b46e705789a406e2ad  gcc/cselib.h
  1ded054093de910d9786c62bc4fe8cc6  gcc/cstamp-h.in
! f98ccb3eff776ad93263ff027329b435  gcc/dbxout.c
! 9e9c0b229148391e26bf1f8c31a89686  gcc/dbxout.h
! c05812eace9af8e653595d7dae1568fc  gcc/debug.c
! eeb3aa1d64466fdec1660ae30625763c  gcc/debug.h
! 5363065c04e1d85fac154b723156ad23  gcc/defaults.h
! 7d295534865060929bb196384834b91c  gcc/df.c
! 8d6de3ec1c3c0209b1ade893299b2c3c  gcc/df.h
! 8048000b20abb0f6a4a6d140ae21686c  gcc/diagnostic.c
  1de93ad5a7b72ea646d71c9785cee19a  gcc/diagnostic.def
! cde238506b6798633d2ac1e60523ea63  gcc/diagnostic.h
  bba4f994dc95873b01340b4dd0e723af  gcc/doc/bugreport.texi
! 08363263a2bb0b13cd87443755df20d2  gcc/doc/c-tree.texi
  e025c163542a9ac9aecf10594125f181  gcc/doc/collect2.texi
! 467ecd6ae4390913ab4effa49459707e  gcc/doc/compat.texi
  ede23db52c73d2fda739a3d4cedfd465  gcc/doc/configfiles.texi
  73b7f9aa052dde14853d1817153dfd24  gcc/doc/configterms.texi
! 374116ba974a63c7d654404d4a42fe36  gcc/doc/contrib.texi
  ad084b0cb2efc588cf805ebadcd5a612  gcc/doc/contribute.texi
! 81aaffbf5f062df16d26954912efe3b5  gcc/doc/cpp.1
! 5df91190ca926531cdc978998f40a90a  gcc/doc/cpp.info
! b9aa842a0973c8afb1291bb9d38a522d  gcc/doc/cpp.texi
  8462a717da44ca316c8c9ac975457a32  gcc/doc/cppenv.texi
! f2e6cb7a623d5d36704a9ef70089dd2a  gcc/doc/cppinternals.info
! 17a10233e69410bea41b943255699306  gcc/doc/cppinternals.texi
! 9c415a9bd1aa5d5fd772d36d88c41159  gcc/doc/cppopts.texi
! 00a860d659ecce38a82424b86f3c2375  gcc/doc/extend.texi
! 0a182921987a1f5dfb6889e06ca0b930  gcc/doc/fragments.texi
! 794bf237888e5f2a0bef4634a6671557  gcc/doc/frontends.texi
! 2c5054f3a34ffb1a7b158bf9da85ef7f  gcc/doc/fsf-funding.7
! 0e9bad52b0126a6599be62ae784821a7  gcc/doc/g++.1
! ce7d78847bd7b2dc6064cf29f68a4ccf  gcc/doc/g77.1
! 7a96f1eb56c956cca2dc0a3e007f0db6  gcc/doc/g77.info
! 0e9bad52b0126a6599be62ae784821a7  gcc/doc/gcc.1
! 194e2cba3ee6d4c0d07d5b2b883656e1  gcc/doc/gcc.info
! 3d74d81ba106be97401bfe812d6bd019  gcc/doc/gcc.texi
! 25987cafd9d4b8c0296eddc1e17c0d3f  gcc/doc/gccinstall.info
! 1cb5cdb69a28f9af7fbd01670f984541  gcc/doc/gccint.info
! 39a95becc7b0ff2318600bab6bfaaeb8  gcc/doc/gccint.texi
! dbc9256aa792d2af4bfa2b4a7b743808  gcc/doc/gcj.1
! 15002142d567543447ce9b9821e63e44  gcc/doc/gcj.info
! d877d4687fbe5a1924ef24368c13a6a3  gcc/doc/gcjh.1
! 2f1117b45855293b5b1ab50c4c12e64f  gcc/doc/gcov.1
! 35327af8210650ee899a23fc61fd0c11  gcc/doc/gcov.texi
! abb56a67e1c82461fc91c20aaffa4a22  gcc/doc/gfdl.7
! 15ee01ab9e293d46eef923522db1ab6f  gcc/doc/gij.1
  290370669f02bef1502ada9273e5261f  gcc/doc/gnu.texi
! d66f2e09e011d7494c222c0381bd6323  gcc/doc/gpl.7
! 8b3f292c260d2613f062b747ed6a77c3  gcc/doc/gty.texi
  12712ad63a56e9d549562b21b42b1454  gcc/doc/headerdirs.texi
! ff8a92e1b73b255dfe65ace7f5322285  gcc/doc/hostconfig.texi
  34dd22797a1a1ec22615f0386badf115  gcc/doc/include/fdl.texi
  8787976f426cd52da24a856cd41d87be  gcc/doc/include/funding.texi
! 919a0fb412c73c281a3d51879c2d61bf  gcc/doc/include/gcc-common.texi
  5dac6b15d38729f68fbadfcdefa2e05d  gcc/doc/include/gpl.texi
! ded88a6f9b9f1b8c68f5beacaffe3023  gcc/doc/include/texinfo.tex
  86355f77ae147b0b5ac0b6127c8259f8  gcc/doc/install-old.texi
! 5af3ad30cb9391d80e8dc7c78595184f  gcc/doc/install.texi
  4230bc26f282d5b487b41e5546fa1de3  gcc/doc/install.texi2html
! 732f10e680f98ce85fc5db413ff48bbf  gcc/doc/interface.texi
! 58335f97c9d4557f42439e2051cd4b8f  gcc/doc/invoke.texi
! 3818cb0617aa02c8bfb5f03c64c2530e  gcc/doc/jcf-dump.1
! fadfe6bda6d2b3f35fe41d6aced5df38  gcc/doc/jv-convert.1
! 28f46d95cd15e638e0ccb9f9e82158b8  gcc/doc/jv-scan.1
  a01aca1d7da7f482653b521ba6447f85  gcc/doc/languages.texi
! cc3ccd8f5888c75efd76e447ab90161a  gcc/doc/libgcc.texi
! 77649f91ce53bd17e41eebe557de78d8  gcc/doc/makefile.texi
! f8b9933c0e89d91b434cbb6bd497fd78  gcc/doc/md.texi
! ce76d9b16bf9ce9f0374043dccee7ea4  gcc/doc/objc.texi
! d46a1385eea00ff1f9882f43c805ed75  gcc/doc/passes.texi
! 4e14242c1266dfef1cade7a2e7cc32df  gcc/doc/portability.texi
! f1e0ddfcaae6e4dcf95762437ac039fb  gcc/doc/rmic.1
! 2d9384c0820e0afbd7c6f4cdbbbbf8ff  gcc/doc/rmiregistry.1
! c2e2a260c6b5cc74b7b871627ebc7504  gcc/doc/rtl.texi
  d57122b80f1dd7815e0cf707c38d0170  gcc/doc/service.texi
! 1bd94fce86fa54188259bc740b958a18  gcc/doc/sourcebuild.texi
! 457093d54d5854aea3c7c7c16d63a4b9  gcc/doc/standards.texi
! 742c9e63b2f579923c18daf05fca8bdb  gcc/doc/tm.texi
! 2384bc6b7ae0bd2315e10e6ef0e910be  gcc/doc/trouble.texi
! 8a7930a108c3dcc18f23fe5445882efc  gcc/dojump.c
! b80437a43c2204efd32911745d2f4a57  gcc/doloop.c
! 06aee37350a5002deac182abdb2c6cca  gcc/dominance.c
! 9a8ea6daf83078a3fa06dd9853a1eb49  gcc/dummy-conditions.c
! e445983cc5d8e47e145faaadb3c94e16  gcc/dwarf.h
! bb5e984d70c6c2898456bd5e57020127  gcc/dwarf2.h
! abdd0b4bc9c542591351a53745d1a376  gcc/dwarf2asm.c
! 5efb8a6aeedf982e29b4f1b2c4c81a85  gcc/dwarf2asm.h
! 2fd7f13ba2a9cbccaa7d36207760ebcd  gcc/dwarf2out.c
! a3d3f8c851d7a733d36146750a1b9039  gcc/dwarf2out.h
! 2ece8a345efe71d1ad7d07684f9a74bd  gcc/emit-rtl.c
! 571a33f4ef2f28cae37102e1e8fbc9dc  gcc/errors.c
! 46a60823056e57fd0de76822566fad99  gcc/errors.h
! ea65b358350ea688a008d76dbfcfdc76  gcc/et-forest.c
! 286331cc1f0914ac1fe768f5a5c76de8  gcc/et-forest.h
! 7cb1bcdb5f716783baa51c16f09ad425  gcc/except.c
! 0db82c43d88c4cdf8a089b0dbaf86b1d  gcc/except.h
! 3543d75933172901937870dc4f6e0a92  gcc/explow.c
! f980fed31a33f0dc985a42827aee82f1  gcc/expmed.c
! 1c4a5b148de5e4178053c598e31c2230  gcc/expr.c
! 31f3871d6b71bb6cb52e3acf90057ab0  gcc/expr.h
! c2e39e007618e4efd464bf7a2a81fcb2  gcc/f/BUGS
! 3738074fa5866d0a2de7e43132680894  gcc/f/ChangeLog
! 5c90d441df9e69a2e844c7702e2bfd28  gcc/f/ChangeLog.0
! afb733692115a21b7f7221d4aa639cc3  gcc/f/Make-lang.in
! c5a9080cdeb869a40dd66e4e4193e12e  gcc/f/NEWS
! 759808909c784b1135c264326f81c025  gcc/f/RELEASE-PREP
! ad57913954edb2ce0052dbb083802e2c  gcc/f/ansify.c
! a2a26866b633e5b6dd47aa94b93c0ebb  gcc/f/bad.c
! b56fb34f13bc1c973831dcc4b9d695d8  gcc/f/bad.def
! 71945694edcdb11f65fca92046dbc985  gcc/f/bad.h
! e33a6a017350841cb3e6cc8ff887d7ab  gcc/f/bit.c
! b748c277ff6904dfd3bf94844812b7b5  gcc/f/bit.h
! 5344c4c9a07f61ae51203f032128d33a  gcc/f/bld-op.def
! 85272bca4def0f379a645fb2d1f01482  gcc/f/bld.c
! cfb08e20dc4884bbbca5fe4fffe22fcc  gcc/f/bld.h
! 0391c789a8dca33471698acc56c551fd  gcc/f/bugs.texi
! 3318027c0870cc5fa65e1bd45c2fec99  gcc/f/bugs0.texi
! a838e4cf84ca80a90adca59bcefa8a79  gcc/f/com-rt.def
! dcee4426ca71cf5d32349fad0977f6fe  gcc/f/com.c
! ecf8b67b8b80b1c0a6bfe2922255476f  gcc/f/com.h
! a232b2d6d06ba6ec6f708a7c1940da82  gcc/f/config-lang.in
! ebbf0de2a1f8fed1d63526a9bbedbaca  gcc/f/data.c
! 450346fa08ea5b169c3248bfa726e5db  gcc/f/data.h
! cc664cb394b581945ef0a6b85e8509ce  gcc/f/equiv.c
! 261b1c5fead0663c7057462fa2a95302  gcc/f/equiv.h
! 9b0c4e99d5b42d0ac12de0cd4aa9472b  gcc/f/expr.c
! 257c3faa7a49d0b929a413b5f5185aa0  gcc/f/expr.h
! 93e0de68dd7fc2d316facb3a2dd7f53d  gcc/f/ffe.texi
! 6789f8d5013992307a9ef53775990601  gcc/f/fini.c
! 57bef6927ca03939209a9c908e69b21e  gcc/f/g77.texi
! 1bf990472bc2372340b91af998f50275  gcc/f/g77spec.c
! fd77e789c5ca37ea5a45ca03586bbdc4  gcc/f/global.c
! ba94b6a2f054e8b4dbd5d9eaa7df94e6  gcc/f/global.h
! bc4b09683d8f8aade9a01b11bf72ea96  gcc/f/implic.c
! b99c7a7bcadee91bdc4f6fa212d7c384  gcc/f/implic.h
! 1ee2b5f3a095941fa902604f391fa879  gcc/f/info-b.def
! d9d3c6d9385e49128abeae91acdf6eed  gcc/f/info-k.def
! 12e1845cde9c3ea322c657e7b12c5f21  gcc/f/info-w.def
! 5633489fc07224a651bc4377a987dbbd  gcc/f/info.c
! 5a654e2a5d7a22cec76579134f86ce48  gcc/f/info.h
! 1201f21391025d66dcaff78742d215d2  gcc/f/intdoc.c
! 5388fd6bf48a3c228bbc9559765f6c72  gcc/f/intdoc.in
! 9e074c1fe19252257968e463f2ae49c8  gcc/f/intdoc.texi
! 9ff30f456950edd1d0e3cb0044c929d5  gcc/f/intrin.c
! 08c71fdbf43c1c3a4fbb3850a3d73adb  gcc/f/intrin.def
! ccd0506859b909849d623c4bc8cc43ac  gcc/f/intrin.h
! 820524be5199a8b66fa116c173c0d9e4  gcc/f/invoke.texi
! bac86514b49988a0e81d6405167fd741  gcc/f/lab.c
! 3073dff7ef3725a3fb022a238a28b2b1  gcc/f/lab.h
! 75f2102593a90bfa0ff1136beddcf358  gcc/f/lang-specs.h
! b1ba4f141875febbe990379027ae377c  gcc/f/lang.opt
! d4e6f2a0e7cc2325b771452223c5219a  gcc/f/lex.c
! af231ee917c5bc26f8fdca69ed9b4a26  gcc/f/lex.h
! ce9c29d103f76334b3205b5051bd18b7  gcc/f/malloc.c
! 3562d2c7786c42761e2267758c274dc3  gcc/f/malloc.h
! 0bbf34f3f86ea1ffa25b5550c00ce6c8  gcc/f/name.c
! 55dc1c542145749f4c155de4a32d7e5d  gcc/f/name.h
! 0e0043352c323f3eb2efcd1b8755f485  gcc/f/news.texi
! f07488179decc7942089f1cc4740305f  gcc/f/news0.texi
! e0f41dde03adce96e1d2c3ed5b000bb4  gcc/f/parse.c
! 3cb424e53e208746d0f5052532ae01f0  gcc/f/proj.h
! 78492aaa5c03b047229e3e7d3acbfd83  gcc/f/root.texi
! 2f0669b59dd48fcc034560fc026a6cee  gcc/f/src.c
! fa55caf3ef5506d2917a145abdde75eb  gcc/f/src.h
! fc5732477708d96c92598e828a8a0842  gcc/f/st.c
! da8f7de76148eaf148719502a8d2bcf9  gcc/f/st.h
! 956bd21f39b04b70a7d77a0b1f36f086  gcc/f/sta.c
! 2e8337332e9120ddfca6da0bd2778c03  gcc/f/sta.h
! 8578c061b6fc4f793dfba0f67523ff17  gcc/f/stb.c
! 75d319550ed7e216320116773f3f697d  gcc/f/stb.h
! 5afd9b48546e309fc4ee7ce2d9e94fa7  gcc/f/stc.c
! 7b7cea6cc172d2162ab3aebd228d99a3  gcc/f/stc.h
! 1cb8eec6bccb7888940a11958f53c26c  gcc/f/std.c
! 3a422764843fe011a2d65d61588942cd  gcc/f/std.h
! 10b3804f39783ab4fefaba0d21b55739  gcc/f/ste.c
! b893d23e9cf218ec18458d17d8f6f8f4  gcc/f/ste.h
! 5437e12e45bd17a94a240cbb6fb46a50  gcc/f/storag.c
! d330eb0591a7c5b8c2c7407cb2d4dd71  gcc/f/storag.h
! f4cb8d358395424ef9d70cc613e97e69  gcc/f/stp.c
! 968000a193081cc42d4328acfeaf85f2  gcc/f/stp.h
! bbf57d579b09b29bf16addd99432f6f3  gcc/f/str-1t.fin
! c2eb47c4735e1be9719325e919cb43cb  gcc/f/str-2t.fin
! fa4d1649b60ba449841f77a667fb23eb  gcc/f/str-fo.fin
! df9116e461cb72af7d401dac0dcfd08f  gcc/f/str-io.fin
! e3b41698893dc5d3d354e626fd4f1540  gcc/f/str-nq.fin
! 0c271c8745e24cc3b046b34da4a9d72c  gcc/f/str-op.fin
! f0327ce4a88c20656ce2df3a980985b5  gcc/f/str-ot.fin
! 6039c34753412646fe94a035b4cd7e92  gcc/f/str.c
! 8918842361a4a7b596106b33c6b26821  gcc/f/str.h
! 78e7cc3fec106d07413e100d50d35580  gcc/f/sts.c
! 95cc2d1f9f0e3f0213b058d553a89ad5  gcc/f/sts.h
! dcc58a8a9ea42cd2a3375dbe0ffd3e96  gcc/f/stt.c
! 199d1ee121df4ab663d59fdd493060aa  gcc/f/stt.h
! 7becac03ead0f745ecb96838e4b2a95a  gcc/f/stu.c
! 2c29d1addacc3727c9f3b1e0f374e63c  gcc/f/stu.h
! 0f9cdc56858601c81913419380fe5794  gcc/f/stv.c
! 87a4365b5fac44c846439266d0085cf9  gcc/f/stv.h
! a079da556ab305b01dad6eceb42294b2  gcc/f/stw.c
! a9676e6a3a470e9bd3648d28ad076ff3  gcc/f/stw.h
! 96bef81438bd08e31221430139d37fbb  gcc/f/symbol.c
! 8bda01934baaa03350f593b308a1fc23  gcc/f/symbol.def
! fad102c0c9953f6c3c17eda58ca44d9f  gcc/f/symbol.h
! 280c57a39fbac1c1f9360bef2716a39d  gcc/f/target.c
! 4963b4944a960111d6653421408923f7  gcc/f/target.h
! 9fc0709562f0748069ff9e98a5d31b4a  gcc/f/top.c
! 9a9ba52d63cff0eaa4975eca07ef0a90  gcc/f/top.h
! 318bb00fe3426c9b2d971af80ff0d023  gcc/f/type.c
! f9e643d5b543dd0249b8a6838e77b4d7  gcc/f/type.h
! abc1098b3d5ab3ce87a76d0d463126d9  gcc/f/where.c
! 61b5c7a357c8a00ebabb03079f2963b9  gcc/f/where.h
! 34e6f189c95e9641192b856152f812ee  gcc/final.c
! acb773cdac83f1424ac032e75c1501a9  gcc/fix-header.c
! f9bc6e872ede6f032dc46d278cf3110e  gcc/fixinc/Makefile.in
! e92bed26186314043444cd314759e996  gcc/fixinc/README
! 5c12000ad0f94a344a013d3adfbad944  gcc/fixinc/check.tpl
! 32724dcc8479bc6335ac76215412ed7f  gcc/fixinc/fixfixes.c
! 816b238df6d90b9988e3f0da9e0f564d  gcc/fixinc/fixincl.c
! 053831fb64c48229d8356349d8ca06f4  gcc/fixinc/fixincl.sh
! 2a4b32e8670412700d3fb185983fa2b7  gcc/fixinc/fixincl.tpl
! eb04d45cf382c555acc741ba8b58d12a  gcc/fixinc/fixincl.x
! 024564e6838a43d2ca7e2ab8285a7035  gcc/fixinc/fixlib.c
! 4914b372bba8514a9d8ea9c082ad5492  gcc/fixinc/fixlib.h
! 71b706624ff689346a3b80f974205c81  gcc/fixinc/fixtests.c
! a92e41137ab2ca4b154694d02d5d9966  gcc/fixinc/genfixes
! 343630c2cd1b7bfe1d132ec0781fd7ee  gcc/fixinc/inclhack.def
! f58317f98d5df606f048b130e1fcc056  gcc/fixinc/mkfixinc.sh
! deedac06e3e01316aa1fb6d1aa44eb07  gcc/fixinc/procopen.c
! 3b8c554a3f8238b02a5ad08c855af559  gcc/fixinc/server.c
! 8d15ce24d936a86ac055dd1319a35783  gcc/fixinc/server.h
! 9344637ef653af4f95f298c7addfdef5  gcc/fixinc/tests/base/X11/ShellP.h
! 987eb6f39d92c1d3ad0964af03187956  gcc/fixinc/tests/base/X11/Xmu.h
! 25f8801e496059592d88616167a1c9ec  gcc/fixinc/tests/base/Xm/BaseClassI.h
! 35ab78a7d1f2c96ca81095bde5ed1b91  gcc/fixinc/tests/base/Xm/Traversal.h
! 3a8a60d642d96668cc0fa5558994b3b9  gcc/fixinc/tests/base/_G_config.h
! 1345522e326f071aeb69b1c490fc8fc2  gcc/fixinc/tests/base/ansi/math.h
! fb543bca7c73da85f944600810ef2171  gcc/fixinc/tests/base/ansi/stdlib.h
! d6a40f191014042c3a1bf44086be6773  gcc/fixinc/tests/base/arch/i960/archI960.h
! 6ab96360e6a5c4764ca6ce3ec7505100  gcc/fixinc/tests/base/arpa/inet.h
! 9743288574b1935e5982d8acba94190e  gcc/fixinc/tests/base/assert.h
! 2a7dfec79ab9872aa927f9c685175fcc  gcc/fixinc/tests/base/bsd/libc.h
! da032b0e10922af19cec10bde3ea8936  gcc/fixinc/tests/base/c_asm.h
! 69f7247dd4e4cf4af4aff6d92ae29999  gcc/fixinc/tests/base/ctrl-quotes-def-1.h
! 4887322d5ca3485f06af33e34f0b1e25  gcc/fixinc/tests/base/ctype.h
! dddb6085a025038373e6fbcef02cdbd2  gcc/fixinc/tests/base/curses.h
! 758a609e51415fc58225ae1ab79747a3  gcc/fixinc/tests/base/fcntl.h
! 3a4a1069077318929fc82027df39ca82  gcc/fixinc/tests/base/fixinc-test-limits.h
! 3f4568cb6461596182fe8c54a9fc9d7b  gcc/fixinc/tests/base/fs/rfs/rf_cache.h
! 7e364ced80dd56f237390965aa7f15d0  gcc/fixinc/tests/base/hsfs/hsfs_spec.h
! 38235ba8906621781d2b926facc9cded  gcc/fixinc/tests/base/internal/math_core.h
! 7438cf0cae4b37215cf293770e6fb229  gcc/fixinc/tests/base/internal/sgimacros.h
! 4d059374c236cf20e8c8cf022c1512dc  gcc/fixinc/tests/base/internal/wchar_core.h
! f3ee3d87cf64e99fd6e01ac3c4968b70  gcc/fixinc/tests/base/inttypes.h
! 833e9408a49784184bee7981d665c911  gcc/fixinc/tests/base/io-quotes-def-1.h
! ef2aa084505b9087cda56c9633002987  gcc/fixinc/tests/base/locale.h
! 8ac97a3367b9a99503c5b21430993cd4  gcc/fixinc/tests/base/mach-o/dyld.h
! 89c11963b284c5a43cca427c60a00a97  gcc/fixinc/tests/base/machine/cpu.h
! 46501093f4cfd450cfd4b18d9fa4b385  gcc/fixinc/tests/base/malloc.h
! 55f9cfb1e6915842a3569628f6e4dc7d  gcc/fixinc/tests/base/math.h
! a911f5fbb127353024e77149fcf90596  gcc/fixinc/tests/base/netdnet/dnetdb.h
! 2649ccca3396541aeb5e612d4b4a3141  gcc/fixinc/tests/base/netinet/ip.h
! f4a72388e98f34c098a3467dce9aa4e1  gcc/fixinc/tests/base/obstack.h
! c24d1be3b5afd871e9f78e1a67b9cb82  gcc/fixinc/tests/base/pixrect/memvar.h
! 5f72fc3ea7f9825984547094ad6edeec  gcc/fixinc/tests/base/pthread.h
! 0af417a4255222a48d182d9f602c145e  gcc/fixinc/tests/base/reg_types.h
! 099702dfa122c22886a95f7c24ab7c13  gcc/fixinc/tests/base/regex.h
! 723e68af94480e1ed60ef8abb667cfe6  gcc/fixinc/tests/base/regexp.h
! d4a7add063789aa9f88d32157a4b4258  gcc/fixinc/tests/base/rpc/auth.h
! 30de93181fcbc197c76bb32fc0d3cc1e  gcc/fixinc/tests/base/rpc/rpc.h
! caad20924beb9f8253e1edb1c1be7c02  gcc/fixinc/tests/base/rpc/svc.h
! a3bb3a605d4d6bfb8401a21e45bf8075  gcc/fixinc/tests/base/rpc/xdr.h
! f2c427008762d44eef0afd8085e30e8d  gcc/fixinc/tests/base/rpcsvc/rstat.h
! 9f7bb5e5ae8b8c14536a1e0fb8179835  gcc/fixinc/tests/base/rpcsvc/rusers.h
! 03b938df568683225ee81ddf1d2498c3  gcc/fixinc/tests/base/sparc/asm_linkage.h
! d0fcad5da41c4659704e010de6a222c3  gcc/fixinc/tests/base/standards.h
! e6cc98bf40a27419dc1002e0f51d79d6  gcc/fixinc/tests/base/stdio.h
! 1887d8bc1711dae9922852cda6027877  gcc/fixinc/tests/base/stdio_tag.h
! 477dda4984f9576162253fe399167c1d  gcc/fixinc/tests/base/stdlib.h
! 918dc04e2ba33f173fe1b873a378868e  gcc/fixinc/tests/base/string.h
! a4ee1d1f3da6d0e87609b408d8e4308e  gcc/fixinc/tests/base/strings.h
! 127183621f8b29d6912c683be6102135  gcc/fixinc/tests/base/sundev/vuid_event.h
! 9b77f381300d6f48f8fca91cf82e8c31  gcc/fixinc/tests/base/sunwindow/win_lock.h
! ca4183dcf93fc8b7e83160156d39aa64  gcc/fixinc/tests/base/sym.h
! bf029365e9c459de36f0f0146b165970  gcc/fixinc/tests/base/sys/asm.h
! 0722a1bdee15b7a4d0b6db17711c4dd6  gcc/fixinc/tests/base/sys/cdefs.h
! a3c7fe09a76b9aa1626801d30ddf2b18  gcc/fixinc/tests/base/sys/file.h
! add3890f41c70949853ca9f14d7e2816  gcc/fixinc/tests/base/sys/ioctl.h
! 0ecb3d89400018caba4201ff22a82c7b  gcc/fixinc/tests/base/sys/limits.h
! cd61846311e14917693160c5e60ad2cd  gcc/fixinc/tests/base/sys/machine.h
! d669f7372e28cb610f59526574b4c70a  gcc/fixinc/tests/base/sys/mman.h
! 026694acc4439124d7cfddb735d730ee  gcc/fixinc/tests/base/sys/param.h
! a40d68fbd950045453359eb4da853754  gcc/fixinc/tests/base/sys/regset.h
! 4ef7922e2fa168e9e4f0dd00e3b67d09  gcc/fixinc/tests/base/sys/signal.h
! fa89792037e66d05c7a76ac07850be85  gcc/fixinc/tests/base/sys/socket.h
! 58c647b7471bba144d18903e6c2d770a  gcc/fixinc/tests/base/sys/spinlock.h
! 42178df0d482e159fe3fc2d8c4b216cc  gcc/fixinc/tests/base/sys/stat.h
! bf2d1c1e407873d832d2a49317cdf6ed  gcc/fixinc/tests/base/sys/time.h
! 05a4bcb2aec048e6ec9638c29cf69224  gcc/fixinc/tests/base/sys/times.h
! baa779ef75a7c62a64485fb5178a77b9  gcc/fixinc/tests/base/sys/types.h
! 07da7d361959043f477e18c74874d783  gcc/fixinc/tests/base/sys/utsname.h
! 6b77a52c112a1567fc4e8502f52ee30f  gcc/fixinc/tests/base/sys/wait.h
! f5050625d1d67855d30956fcc8241f86  gcc/fixinc/tests/base/testing.h
! 4c5eeb62a358a4c9140db2c1e93a8bd6  gcc/fixinc/tests/base/time.h
! 7dc68f10756f3c5df014326605fe9efe  gcc/fixinc/tests/base/tinfo.h
! 955462b555900ecd3934223c64e21fa7  gcc/fixinc/tests/base/types/vxTypesBase.h
! b6494e752821a4f87a2114c27143856c  gcc/fixinc/tests/base/unistd.h
! 4f59f83f073afacc3f59c39952ec8a7b  gcc/fixinc/tests/base/wchar.h
! f86a4ea6000eba71d34c1b9a7bcd2c14  gcc/fixinc/tests/base/widec.h
  2a88dc3bb6779aec109127104e58611f  gcc/fixproto
! 5571a101d9aaa9774c5999094cde7ed3  gcc/flags.h
! 57e3c9704526d00902bcc4063c2a2161  gcc/flow.c
! 11e64f6495be9324e605a911ded4ed71  gcc/fold-const.c
  89cc2e2833c8dbd6c9952122fb17e762  gcc/fp-test.c
! 274f3d03805e275d7bb45a48be74ceb7  gcc/function.c
! 4afeff23d4e5f110c16027d1f84a3cd6  gcc/function.h
  8b236ba2888ff458e53cf4886134e68d  gcc/gbl-ctors.h
! a93f2be3d4cf0891d6d39df7438bfb31  gcc/gcc.c
! de62a6ecffd2f4fbe6e5cdab15c81088  gcc/gcc.h
! e1aff8af74ac7e252f83ffef79593dd9  gcc/gccbug.in
  6c8aa14d6e96a396e36ddef8e52b03a3  gcc/gccspec.c
! 250c6b3ddd85597182e5c82aa98222a7  gcc/gcov-dump.c
! fcf457697571171813c07eaff302deef  gcc/gcov-io.c
! 93c94f3ceb345fc4b1701f49e671d95f  gcc/gcov-io.h
  313ac1ad71ff80f61831c60c648e1e87  gcc/gcov-iov.c
! b5bb538e16213125af1b98aa281b299b  gcc/gcov.c
! c5ec82b5361ad6a9a338282c5f922634  gcc/gcse.c
! 6e654e4d72e6e1904fd62dc25352b3e7  gcc/gdbinit.in
! 00c9c3db11236ea1c51037376f0919d8  gcc/gen-protos.c
! d063f19e202d35bbf0fe9dfe35fd33ce  gcc/genattr.c
! 2977d2e9ed44dac8b467286905816b6b  gcc/genattrtab.c
  74e11c0709a7783805d7119bac140317  gcc/genattrtab.h
! d499e4e3e3a6de6a206a206d7d6a5407  gcc/genautomata.c
! c27ada8bc553966a729e79364da6c932  gcc/gencheck.c
! fa5c6e8dabab3dfdde032b2ca6f9c2a7  gcc/gencodes.c
! a846626af4e8f504d0bcdc04fc7d2524  gcc/genconditions.c
! 7a28fcaaad5c91496568a7c4b8b4e3ff  gcc/genconfig.c
! 97716dca0a1d2c66511bc064f92dbd7b  gcc/genconstants.c
! 6d62ad5dd9b37c89cfe0ebb5c96a48f3  gcc/genemit.c
! 1b17e9750816be217a4c2acf7873d2d7  gcc/genextract.c
! 6bf499d332c99b0a3852d6f7ac776026  gcc/genflags.c
! 6d25e5e6e71179d311d4ad2b652c0707  gcc/gengenrtl.c
! 5405e914f8fdd5eac576ea9e76b583ee  gcc/gengtype-lex.c
! 2a91a5a328687dbb743f2757d0574e9c  gcc/gengtype-lex.l
! 19a795a2ccda5db2643085bdc846967c  gcc/gengtype-yacc.c
! 62c5dbab166d3314cb12e2477971a8c7  gcc/gengtype-yacc.h
! 222c86b62da1f9271952f60d37ffcbb3  gcc/gengtype-yacc.y
! 378d875adf5af3648e23594e02953486  gcc/gengtype.c
! 8eac28a38ea04ed3c733e62deb4466f0  gcc/gengtype.h
! 0a7fa93f0a4225be5e61d4dbb2a9859a  gcc/genmodes.c
! 7dd7a74ea2fc595cbc900b20b17cee18  gcc/genmultilib
! 2423b28eba2a2e773abfa38ed1d8838f  gcc/genopinit.c
! d76e7d18563b435add5fba5345048904  gcc/genoutput.c
! da856aaae0988c2c4824fa23fc777b7e  gcc/genpeep.c
! 46cb223420afe788e12ff866b8d5b8ea  gcc/genpreds.c
! 1b1215af450c30572ca9223b3539f6b6  gcc/genrecog.c
! e4bbc90d0426347515c3f15c07bd017b  gcc/gensupport.c
! b7eef4f8dbd60d96d66ead96ffa1b488  gcc/gensupport.h
! f4a4e317baa96bbaadc6bc1e88b37316  gcc/ggc-common.c
! c65f72d7732a0ae2c1f537cd8d2c45bd  gcc/ggc-none.c
! 179bc62a0538c626f765908e7531eee3  gcc/ggc-page.c
! f4eed49c388e40e3a64d9e977d64ca74  gcc/ggc-simple.c
! 51e74c6e47c6ff5f8911d63991615317  gcc/ggc-zone.c
! c8ff826381894c5edc16ed9c9877b05f  gcc/ggc.h
  143d9eb1e7d7cc3a6c181fa57e344d0d  gcc/ginclude/float.h
  378da2dd3f4a6d9df12f8b0a43615739  gcc/ginclude/iso646.h
  2f4dffb1e27eac29d9981caa8ddbba08  gcc/ginclude/stdarg.h
  213baee904954855afe6b742d0dad427  gcc/ginclude/stdbool.h
! 60e59b30c1de005330d295313e8e7b12  gcc/ginclude/stddef.h
  8d9ecf0d6ef93c79623ce1d27a32a2cb  gcc/ginclude/varargs.h
  dee4eda8279ccb1cfcc9335d717234e7  gcc/glimits.h
! e49bf6ce1639431b78db467432e983f5  gcc/global.c
  3ccfd2aca4fc2b50e0783ca5763acaa1  gcc/gmon.c
! b5c27fbd4aafbc3c52ba66a0bfefbba5  gcc/graph.c
! 6d52f8fed7ef9340d18e2df8df0a0b20  gcc/graph.h
  24f1d20ea7f6ce8ce62a58c43a0ecf39  gcc/gstab.h
  f25fa25460fa1cdbc357f1ed15e2568e  gcc/gsyms.h
  c32a1d882e7039afe158bb9e59b65223  gcc/gsyslimits.h
  a902ff24afa88be00934822ffff33ad2  gcc/gthr-aix.h
! 9c6a68d0e580d7723df3d53ca1893dbc  gcc/gthr-dce.h
! c685086643070b2a30ceb3550a65dc08  gcc/gthr-gnat.c
! 09c4afc45a1eea8c120c453e145bb811  gcc/gthr-gnat.h
! e7f9c79d67296baa28e3cb5306d9fded  gcc/gthr-posix.c
! 07b9fa553d6518ff9ffec00022188b37  gcc/gthr-posix.h
! 35bde4c5020fcb99baa6d0b0c0957b2e  gcc/gthr-rtems.h
! 2a5a9264c5026bbf50789cbfa566d088  gcc/gthr-single.h
! 735b68d33b5cd9a45a6bd426757cadbd  gcc/gthr-solaris.h
! b607006dac7eb4f3f6517a70a5f867cc  gcc/gthr-vxworks.h
! b56e67abef3e974445315a025a8f52b0  gcc/gthr-win32.h
! 7b13e4274442ef1b74e43f7e39bcc54a  gcc/gthr.h
! ae93ffebf5417aa87b8a866074524de1  gcc/haifa-sched.c
! 86fb20b503633b650e8510bebfb40146  gcc/hard-reg-set.h
! 0b50595bc830cbe9fd8d922b4c726b99  gcc/hashtable.c
! 1fecbdaa9c8a85848af0e6556115a680  gcc/hashtable.h
! 8c3e3262c3bc86f92714cc92b443de4e  gcc/hooks.c
! 8b377a32023da5fb167f1329700d9084  gcc/hooks.h
  3a4b7a98629bd32b5dd9e7fec4d813cf  gcc/host-default.c
! e73624dc723fb1c72da2e7549cb57083  gcc/hosthooks-def.h
! 6085e86256ab9c99cfac9c66ad780b54  gcc/hosthooks.h
! 4c2e9d27c9035e8313d50f7dc8ab0bd8  gcc/hwint.h
! 710853be24a8c502ff6e09ad2cd457d2  gcc/ifcvt.c
! da41c7cbb9a3a1be416c2936c4b59ac6  gcc/input.h
  38986bb8bb03d989f72b67cd283a9bc1  gcc/insn-addr.h
! 1cd32d84da1131dc5e82eb3a390048e3  gcc/integrate.c
! 1aec4ad6eee1ebabcf9d25ec27a13f07  gcc/integrate.h
! f7e145dbb0e27f80eba7cc4f496a299d  gcc/intl.c
! f88029fd13fef0e2712cdc43aa4ba008  gcc/intl.h
! 7a56bca3d62a5c352307e6e020388ac2  gcc/java/ChangeLog
! 776cd001f0bc9170fe6c6160b2b383a6  gcc/java/Make-lang.in
! 1cb3550055fb303065aa028744f36575  gcc/java/boehm.c
  08db6bf4ea64d94892095b2f44f12e86  gcc/java/buffer.c
  fd12809851cafbf50d9a6d4148c8f25c  gcc/java/buffer.h
! d717db4aace564756dd55fab071a825c  gcc/java/builtins.c
  9194d7bf58de2a6826c3615620ad8a3e  gcc/java/chartables.h
! 450f63683fe595e665fb1c58887584f8  gcc/java/check-init.c
! 22399b3af3f6df285749245fea4dcbcb  gcc/java/class.c
  701c3fae2744bb1cba3a6be507521bbc  gcc/java/config-lang.in
! c95678571f75873457b8266ab2959760  gcc/java/constants.c
! 07092c7e4cfb65868a9fae86a02f0d8e  gcc/java/convert.h
! 6b76b398505470f4068d3e1332ccf19e  gcc/java/decl.c
! df65759f2d79c50c7c9d2784d1b9a000  gcc/java/except.c
! 20cd602c0af2485575e0fea9f3a3b600  gcc/java/expr.c
! 2cdd697784dda93d2fae59bac1c23e3e  gcc/java/gcj.texi
  e22d04d56400c3783d3d799871ce70d4  gcc/java/gen-table.pl
! 2baf181dee02a99a3a94b1a065dc4a2e  gcc/java/gjavah.c
! d33ffeff1f7d79d3c4f4c5c1dff1c545  gcc/java/java-except.h
! 1934fbe8ee4032c17cf8a3533c894877  gcc/java/java-opcodes.h
! 8bc8979172abd3bc6b93294abfe5ce22  gcc/java/java-tree.def
! e84ccea8898ffb2d85da829e31d10729  gcc/java/java-tree.h
  12dcb3b79f561c62beaa98f176fa55f1  gcc/java/javaop.def
  1b476d87b6145a64cd9c390dc18f0e40  gcc/java/javaop.h
  082e35bec4b881f7f7f059f694b2400f  gcc/java/jcf-depend.c
! bdbe689ed488e15adc52fa60ad668ae3  gcc/java/jcf-dump.c
! 4bb474be77eb6793326560d7c3ee337b  gcc/java/jcf-io.c
! d7038773b7d92b8303d093f37e58b5b6  gcc/java/jcf-parse.c
! 0ff928a38ba7f49ec26dbf2fb5a898e2  gcc/java/jcf-path.c
  bd43379870aba4a83983b67e069e8a6a  gcc/java/jcf-reader.c
! 9870f241f33185bf616a8dd3ed5dd3fa  gcc/java/jcf-write.c
! 6bae722d0c98e50420d48a4a100d144a  gcc/java/jcf.h
! 300f851ffe27f30166efd75a9fca7318  gcc/java/jv-scan.c
! 09b883396ac2c68f2a19c997502eefa0  gcc/java/jvgenmain.c
! 9e3602f81320032d4a066432a47c0ad6  gcc/java/jvspec.c
  01918aa9081c8f23a3700560e1c7dae4  gcc/java/keyword.gperf
  bb60189a6a5a720b184f61e9c3146c92  gcc/java/keyword.h
! effe1a7822b33bc9827fde743227ee3b  gcc/java/lang-specs.h
! 22facebf8b9af97c445daecb73763feb  gcc/java/lang.c
! 2212e05d0dcfa6cab71c60fb05a2c9a9  gcc/java/lang.opt
! 53ce8cdb3395fe6eb175a21e89f4ea4d  gcc/java/lex.c
! 56447dd486ffa23874db3d6ecd64156d  gcc/java/lex.h
  667e31da3f84bbec005e9c4393a17ec3  gcc/java/mangle.c
  5368f5e92c82d0f4a187ae6d359b5ce6  gcc/java/mangle_name.c
! 8ba107f2b37ddad3975627a7cc351b34  gcc/java/parse-scan.c
! 0effee30166d5c60230b5327f4c740f7  gcc/java/parse-scan.y
! db9f4d144a50c26cf5e7018c3239403d  gcc/java/parse.c
! 13263242f7d024d4cb1e314b2977f5d8  gcc/java/parse.h
! 21adc805edee22142b6e73709ae0889c  gcc/java/parse.y
! e451332301d4ed7169fa905c88984b9d  gcc/java/resource.c
! b3deff4e5bcf90ccd1494f8a9903fd5d  gcc/java/typeck.c
! c5dfb0eb3bd8dd176ee9c7687024cb52  gcc/java/verify.c
! 532971cffb0d52da7bb64d3b3084d65b  gcc/java/win32-host.c
! 1555ecf248d3a73c6aea04a413892dac  gcc/java/xref.c
! 884d1dcfd39ef0f86f2eb00ac26d9dce  gcc/java/xref.h
! 6ebc0220fbbb2fd117a8fcdba6bf271b  gcc/java/zextract.c
  6dd9595636fb64d33ad593a915f8102c  gcc/java/zipfile.h
! 9b9cee092f0b023e8e1a73228e337d57  gcc/jump.c
! d5dcaa94f8a2c7336818feb6b85c8e2a  gcc/langhooks-def.h
! ecf05d6e000a4dab2d6c834152ea2894  gcc/langhooks.c
! 12f5849f02028443fd7550b280f81b24  gcc/langhooks.h
! 52c6ed0e21aaf8ab1e2ed57f9e27c155  gcc/lcm.c
! 036c1e660d015cd94fb7767a6221206d  gcc/libfuncs.h
! 432d14d9de06312e4af4c41b6047bb33  gcc/libgcc-darwin.ver
! d3a01c48e9633a6ac18127851f9c111c  gcc/libgcc-std.ver
! ba5ddad42ca3c9823aacbafc68b0c3d1  gcc/libgcc2.c
! 98ca887ee727ba4ee1adf4a40a55cdbf  gcc/libgcc2.h
! 3234dc332eeb6ff111d6c705b5c604aa  gcc/libgcov.c
  d4f7140fcd55bba037803fb314146a6c  gcc/limitx.h
  83de5c6450456e215a5484083afcd32a  gcc/limity.h
! ddc5d3b017bfa0c33fe152d0b2990b97  gcc/line-map.c
! 73427c1ba66643c4116931ffeeacab5c  gcc/line-map.h
! e3f35e9013569a7fed522cf8c1c430e9  gcc/lists.c
! 92657b8eed381ba711d713d95c0e3924  gcc/local-alloc.c
! d24bdc3754695f1cd0da08352a01832b  gcc/longlong.h
! ea893626dd4c47e5aa5c2ad20b254b27  gcc/loop-init.c
! 58d7b87601accce8a01ee5c02aab3ab1  gcc/loop-unroll.c
! 9161f3442d6f73367be15096dcad61ea  gcc/loop-unswitch.c
! 836ab2d96c3a8be17f3f6e33baa05128  gcc/loop.c
! b79f95b8996e4a026ffd4242f6c97ccf  gcc/loop.h
! 831aa4b581ebf7711d1b342892e04687  gcc/machmode.def
  1fa8c1f9661c9c9bbdbe65997066ef49  gcc/machmode.h
  292b8ef5b5b9aeb19a4a6d534db3ad9a  gcc/main.c
! 772ce26a44eefa2d8151670c73654435  gcc/mips-tdump.c
! 8038e33eace8d9e2b60dbd8ca62abfe0  gcc/mips-tfile.c
  ebbcc540de127be8a3f11b9df28900ca  gcc/mkconfig.sh
! 3438b9227a1bfbd77f8ce9fe2a75b0c9  gcc/mkdeps.c
! e07a4ce298d00e87d6e4c46bc4e2c26b  gcc/mkdeps.h
! 92b0e4afe6208ef2030c71cec1a944b7  gcc/mkheaders.in
! 792922784eade1d03ecb1b33ba8bb7c3  gcc/mkinstalldirs
! a64a35d369e0d7be2e685d42c076c819  gcc/mklibgcc.in
! 85dbe75ce18922bdb045eec869db4a62  gcc/mkmap-flat.awk
! 49f7e44c95fc86df08f70fac7a5cb7a9  gcc/mkmap-symver.awk
  a1fa8244a5e0c628001f9393b8d02c54  gcc/mode-classes.def
! ad48719c30000aa9cbcfc93bd234d8f5  gcc/move-if-change
! 28315b2d6696c14034ba393176c045a2  gcc/objc/Make-lang.in
  aa5319dd541cdb0eb8622f9adf66b761  gcc/objc/README
! a00446fd001efffff303923c481bbd76  gcc/objc/config-lang.in
! 74e1475cc43d26c3293eaa077979d607  gcc/objc/lang-specs.h
! cb8c9e70e2003b3f8e486c3108a0b195  gcc/objc/objc-act.c
! 8a51b290d32c4422242bffcb7befe72f  gcc/objc/objc-act.h
! 7e5cffd66e310a7abeb76e71f45c19a2  gcc/objc/objc-lang.c
! 3ec32c7688fbee84b35a6fd27e74207e  gcc/objc/objc-parse.c
! 71cd572ad1d8ad3b091b9a2c1099092b  gcc/objc/objc-parse.y
! 37400b41deb099f320bbf6b4a944cb07  gcc/objc/objc-tree.def
! 1a175f454d16071eeec8bcc586b992ac  gcc/optabs.c
! bc090b22995723d4d55f0f566254b641  gcc/optabs.h
! 4444a8b1e087f9dc39f18b2751dd4ab1  gcc/opts.c
! 81c15fd69a56204de2f900d897ef4bb0  gcc/opts.h
! 9084f4c2fd15ddb2392ec960828cca8d  gcc/opts.sh
! 503acfa88e037c1d47d42eb3130ce97d  gcc/output.h
! c42c1b10924c32bba03c874cf3402b79  gcc/params.c
! 480f3054671a48e38808dc02ccdadfa1  gcc/params.def
! a19638b8d354d5305bcd57f5c8397e59  gcc/params.h
! bcd9db696e0e07cb41b79fceda1a735e  gcc/po/ChangeLog
  954b21fb36cc0d8e9f6e2d6507152f23  gcc/po/EXCLUDES
! 62f2f05d318d24c2145aa36d7a91ac05  gcc/po/be.gmo
! d3472c9b2b984a99d928d6cad8258854  gcc/po/be.po
! d992f55d0dfb4cce8832d3813fb3d012  gcc/po/ca.gmo
! 4ae5b581a9e177a34037a6bed8b9f355  gcc/po/ca.po
! 63887af0d144f7d5576bf53911a83015  gcc/po/da.gmo
! 7cc45eafda30db2b355c53d25e5b9ae4  gcc/po/da.po
! 3193bb5ab6d5c9978fe7707ad0b789df  gcc/po/de.gmo
! f1e5c22fd9f08f363d0b5b77f66a1586  gcc/po/de.po
! dd4c8810d444df577de95a95094972ba  gcc/po/el.gmo
! fe98240366be486ba549c3ecd31985cc  gcc/po/el.po
! a2ef987c960b9a3fa468575c74a50338  gcc/po/es.gmo
! db174ff0326b02584f6960fb09e6fc0f  gcc/po/es.po
! fd8238265f233a70935d9761e6d07674  gcc/po/exgettext
! afee0f697163a96c872f081942fd33c8  gcc/po/fr.gmo
! 4fd556089b55cdf10343ac409b39c281  gcc/po/fr.po
! 43b0dba8ce738c504a7f4918c61c5775  gcc/po/gcc.pot
! 24f6b420f45b73562d2389c3992590ea  gcc/po/ja.gmo
! f5f2e32e4702af9093f37b5e02c7951e  gcc/po/ja.po
! f9af4dddf50f5d669aed71a22fcf8516  gcc/po/nl.gmo
! 2eab0c4c18238940e7727e9c18f3f498  gcc/po/nl.po
! 9c9e8c38ac3eff0c157df348991da469  gcc/po/sv.gmo
! 9375efab5aefd93917cfd2ea937039f2  gcc/po/sv.po
! c6ed86d67775e27320fc9ada8d7b08a6  gcc/po/tr.gmo
! 35b6a7aaddc771015411c46944abd1e7  gcc/po/tr.po
! 51a3ba4957813621667e0433cf2c774b  gcc/postreload.c
! f2403a6545a20a383e40333c354daa77  gcc/predict.c
! 54f86796beba9bdcc34d522dba276d3a  gcc/predict.def
! c1cb919211df56d98aed3a477a3521dd  gcc/predict.h
! 06c0712e267a6d4c61fbb08ff6fd5a4c  gcc/prefix.c
  3df3fa596b628ba5ff43e0cbbf2538e4  gcc/prefix.h
! c2c326bc159784138eef0c2ea284e454  gcc/pretty-print.c
! 798afae00fa7b7de885475911952dc7f  gcc/pretty-print.h
! 3ed937658b9c328b7cf8a204a9e1bf92  gcc/print-rtl.c
! a1d7a3ead9f439c9ad80b1ae671044e6  gcc/print-tree.c
! 1e4db81ac3e125c6386aa3c56f1205e6  gcc/profile.c
! 2c292ad145001b06e7c5ae810c1dc9d9  gcc/protoize.c
! 571130c6b60b7e6edae5e819d8911ebd  gcc/ra-build.c
! 1584e13a0bd0f0c88a5c23bbe39616b3  gcc/ra-colorize.c
! 13b1ebfc873583fcdb1e549574c3b880  gcc/ra-debug.c
! 7fd2729a24566aa8810b954ef5199014  gcc/ra-rewrite.c
! 12d6f8864e183084b196ba7775b8e23c  gcc/ra.c
! 31c22bc8a26bd095b6e462c3320b4264  gcc/ra.h
! 0458517682318db3a45ae463072e2fa9  gcc/read-rtl.c
! 20e783d430cd770669c4dd8b2b35831b  gcc/real.c
! d290e4d8d6776a36f3b1c69ec1ba04af  gcc/real.h
! b03b893ff7b1db5aa085dd2fa2b3f0b0  gcc/recog.c
! a141a2e9d14adcd7a65b79c915501ad6  gcc/recog.h
! d0a006ef8e8e09b4a6fa022b238d9e8b  gcc/reg-stack.c
! 7db926625dabbdf77d11dc0874a32291  gcc/regclass.c
! 7c2cd1e82437b6f216dbd7b86cec0d8e  gcc/regmove.c
! 1df18460a030d4d89c1de57d75b8372c  gcc/regrename.c
! 3bb136e9484e9c0581f3f19239e1de65  gcc/regs.h
! 8b8f6e5d0cb8eba955aa6b2ace4068bd  gcc/reload.c
! 175c1af1dad98a50275ca027dc5da114  gcc/reload.h
! 6a12a4e39e8cbf33b38fab3782dd8c1f  gcc/reload1.c
! 1d07266cfedc2cc350961ea00bda010e  gcc/reorg.c
! 74992b7b7d258750dae9ad57af406c53  gcc/resource.c
! 55dba9f64045568e4b859a0fa9c0f7e6  gcc/resource.h
! bdf316b278b5ff854e7e8ff133d389a7  gcc/rtl-error.c
! a7acbbafc7308ff74aae0967936ae0a5  gcc/rtl.c
! d82f6c67b8226696924d3155c394a2e8  gcc/rtl.def
! 26748cbe79ba0597c389acf1d91967eb  gcc/rtl.h
! 465fde769e17fe603e54cbcd42190d5c  gcc/rtlanal.c
! 37937832e3c706f7458ff24d28fd54c7  gcc/sbitmap.c
! 43e955b2d025e5cdb76cf82085902467  gcc/sbitmap.h
! bafca97ac1dcffde0b6db3375cb36dad  gcc/scan-decls.c
  c42e740dbb03072238bc5c6f5d21f933  gcc/scan-types.sh
  2935e4147258c3a32d42032fe2260205  gcc/scan.c
! abbb31b5513b67548912cfdb29ef730f  gcc/scan.h
! 89def78707f97074b05b28be7b5aa727  gcc/sched-deps.c
! 2998879675939fdeb3836d06c5574f8b  gcc/sched-ebb.c
! 5a44b590d09fb6c37b170ae2166c40ef  gcc/sched-int.h
! 346c1a2f07b4d26ed0902a5a50f38ec9  gcc/sched-rgn.c
! 2ac75c6ef66451d4ebd6622d7eab26da  gcc/sched-vis.c
! 6ca19c2c7257639550759426490a819f  gcc/sdbout.c
  3e8309c186840a3b20db0f0245f8a172  gcc/sdbout.h
! 65bca147f56d8eb98ee80a2c9045cd86  gcc/sibcall.c
! b162aaa7a9ee5d431b459e6441889628  gcc/simplify-rtx.c
  8e865a71c4e2c43eae4afbcf143af4a6  gcc/sort-protos
! 47b3c183ec753b4378a943bca556277b  gcc/sreal.c
  ae128709f9021ffb7cc827cf20d60022  gcc/sreal.h
! 3c1836bf3db015568c96bde9cd408019  gcc/stab.def
! 5c570c2ba9c3775a914f603747bb1612  gcc/stack.h
! f5f49a0c965012109d20f2eaa2786c97  gcc/stmt.c
! 3eeaaa6297eddbfbab9fd36a2db29dc5  gcc/stor-layout.c
! 2a7ccc7a04d6a001297f60167175a2cf  gcc/stringpool.c
! 0d35d152f27d6d59aa10ef8a17de2b9c  gcc/stub-objc.c
  4218f3bf53b8358d1ec10de7823b848f  gcc/sys-protos.h
  31e2d9be63e3d9aff0d5dc9ef42e0223  gcc/sys-types.h
! 52c37143aaffa84660571d4ed418fab3  gcc/system.h
! af69905e10a2bdef1afc3b7d196d6bbe  gcc/target-def.h
! 262900dd91f9bab87894be0ac4fcea23  gcc/target.h
! 85919bb08e4e5b107f8fd9cd5df1f270  gcc/targhooks.c
! d9e3034ee194c839993c456cf319a77d  gcc/targhooks.h
! e64c73b67a25618979781f90dd4f7207  gcc/testsuite/ChangeLog
! ed685b45b94fbbca4d750830610dfec1  gcc/testsuite/README
! ed6044530cbd807a721e03d82623cb63  gcc/testsuite/README.QMTEST
! 9d7c37cd869e4bc7098e34c5a36e7a76  gcc/testsuite/README.compat
! 5f1457a630824cfd553a8a5693b18eca  gcc/testsuite/README.gcc
  4004844198395fe50ecb798ed5d30f4b  gcc/testsuite/ada/acats/elabd.lst
! af648bbf3e3cda21e98806ab0139e55e  gcc/testsuite/ada/acats/norun.lst
  d5748b449a081324237ae22a21f32a3f  gcc/testsuite/ada/acats/overflow.lst
! 294b37c06aa0f2acc7cb0382eaa1c6ad  gcc/testsuite/ada/acats/run_acats
! 074e791b9094b741dae6aa90a671134e  gcc/testsuite/ada/acats/run_all.sh
  d45e1c07702f81b7fa521c99282fd51b  gcc/testsuite/ada/acats/support/acats25.lst
  2f262cdb98b38922d7b7f84414f43b84  gcc/testsuite/ada/acats/support/checkfil.ada
  4edf20410814582eae331707f2ae2c77  gcc/testsuite/ada/acats/support/enumchek.ada
--- 3156,3767 ----
  3f0a71b3742ffa4840a16a4d0f9f6158  gcc/config/v850/t-v850
  859a4f4eabb77ce1fec496fefa01f9ef  gcc/config/v850/t-v850e
  54b7f7c77f7ee42692a33fe30693c5fb  gcc/config/v850/v850-c.c
! 19bef7526322d587fa5170da2abb7461  gcc/config/v850/v850-protos.h
! 1d6db7bf02195431293c5bb3e67fba74  gcc/config/v850/v850.c
! 3002e3696a068f93559a78312e504964  gcc/config/v850/v850.h
! d46a17fc99312e35ec8c1845b89a180b  gcc/config/v850/v850.md
  ff655bcfdac01dcda11710bf53d11036  gcc/config/vax/bsd.h
! 2ddd4662f9855a518186befb25a3c4bc  gcc/config/vax/elf.h
  7854beb9fd8abeb1e5a819b479a2ed7c  gcc/config/vax/netbsd-elf.h
  fc02bcf5b5b4f0bbf38fc0db67d7dbd9  gcc/config/vax/netbsd.h
  8ebdb700173106189a645cdc31e1eadb  gcc/config/vax/openbsd.h
  5227e52e38a9d92ebf5c98a6c05c385a  gcc/config/vax/openbsd1.h
+ 2d5751f5205ecd63bc583b33dd85c55b  gcc/config/vax/t-memfuncs
  0d191ac74cfe5bf9ce95dd373780f5a9  gcc/config/vax/ultrix.h
  609d9fa53bbbd866343c5d2da437e5f0  gcc/config/vax/vax-modes.def
! 7465a8155fe700ef0c95f23ffc171779  gcc/config/vax/vax-protos.h
! 069fb70653c2672590d531c0f611c4fd  gcc/config/vax/vax.c
! 575f75c21b9ed539b78a7452c7997d70  gcc/config/vax/vax.h
! 5d8378490fbedf1e785aceb592895198  gcc/config/vax/vax.md
  1bc2419e8ff3b94ad84f7fb45d3f481f  gcc/config/vax/vaxv.h
  c126c4de99d4774b096e7f0a805c46e6  gcc/config/vxlib.c
! 5b39b176ba3125c9886305c141b060d5  gcc/config/vxworks.h
  7486b37a20d96dbaab503b1aace6574c  gcc/config/windiss.h
  095ce8a2c17ff3008c87bc4041093d43  gcc/config/x-interix
+ 43b7c435b27723075fd77e04ec73684e  gcc/config/x-linux
+ 2966f5fb6241f177c43632efdafd7a98  gcc/config/x-solaris
  c77bff7a5307e960b7bcec0e3587ec91  gcc/config/xtensa/crti.asm
  0020ba3ba9a2612b029856b4a58c9703  gcc/config/xtensa/crtn.asm
! ee29c7c4785d04dbeed6e512a2ee5926  gcc/config/xtensa/elf.h
  90b4b217704fb52fcc4c49fbf80b1ce4  gcc/config/xtensa/lib1funcs.asm
! 878933b92a85f6fb9d522c61c249dc08  gcc/config/xtensa/lib2funcs.S
  e955455a2d44ae397190dfd815b5eaf4  gcc/config/xtensa/linux.h
  8b7f87d40cffa52a9b218754a117ec74  gcc/config/xtensa/t-elf
  0c49731d95e228dbbfcb9d1eaf2777c3  gcc/config/xtensa/t-linux
  4ec1922febb63e1a911d26a7c7b52943  gcc/config/xtensa/t-xtensa
! d8abb15c71d96b2ce552ad5a63a1a03e  gcc/config/xtensa/xtensa-protos.h
! 1ebb8d8c5c2d1b862164e636851f47ed  gcc/config/xtensa/xtensa.c
! fb5c9b9348876139ec0c944aa96d4644  gcc/config/xtensa/xtensa.h
! 2ad7d7226bf2b6ac0f559d774de0d0cb  gcc/config/xtensa/xtensa.md
! 9252af787765eb20d14f407f5401021c  gcc/configure
! e1e33e3a48357fbb4f5de067b327fcbf  gcc/configure.ac
! 40dab0d16deff6ef777accc4b417f70d  gcc/conflict.c
! f64a16966853cefc41c141fde640e5cd  gcc/convert.c
! 775654dea32f570db105d537400d35f0  gcc/convert.h
! acc532660979749a8aa04a04cc15425b  gcc/coretypes.h
! 3fd046c9dc658c97d3b2ee3b75b41a9c  gcc/coverage.c
! cd078f469abce230623d23740696dc3b  gcc/coverage.h
! f7bd0b008afd77ab1e8b41adc739940a  gcc/cp/ChangeLog
  d788e4824ae889eb5c8e067a9f94a419  gcc/cp/ChangeLog.1
  43a2f3aeb6c981482f5a0c2575d1e5ae  gcc/cp/ChangeLog.2
! e0e61bd2c27d4d8d5c48e5dce1daf88d  gcc/cp/ChangeLog.3
  b9cb813675d1e580dd01146a550faa7c  gcc/cp/ChangeLog.egcs
! 99bcc624735a26850b8e358cd0220462  gcc/cp/ChangeLog.tree-ssa
! 2345a767aa815c26918a132fd41c278d  gcc/cp/Make-lang.in
  625bd1bc9937427e1e1f2416a3e799a1  gcc/cp/NEWS
! 9fb40b1b35dabd5135db6c8c77184173  gcc/cp/call.c
  9f7a823f536eacdd59e2fc31ef4da831  gcc/cp/cfns.gperf
  11598cdaa5f12bb2b4dac5a4171ff165  gcc/cp/cfns.h
! 7c5455148393db71713f423beabf387a  gcc/cp/class.c
! 0b3826b6b2e003b1b12fab03e9252d29  gcc/cp/config-lang.in
! fbfc8b7f56b683d6bb14d813f0db58f2  gcc/cp/cp-gimplify.c
! 3821fd4a242d7007905b293aec77da54  gcc/cp/cp-lang.c
! f457acdf5ccb8d74b2c41fd0973fd554  gcc/cp/cp-objcp-common.c
! fa2d04264300703e8fb5725dbe93951e  gcc/cp/cp-objcp-common.h
! da5126f854272111e975bfc43fde2452  gcc/cp/cp-tree.def
! 9da3e126fd38e27d0b1fc09f1b4a646f  gcc/cp/cp-tree.h
! 5b36eae4562ec61eb0fc9c63a76dcca3  gcc/cp/cvt.c
! f3620bd47fa721fd30684d4c7d2d0b56  gcc/cp/cxx-pretty-print.c
! 8754f729ebdb923453fafe6e0935258f  gcc/cp/cxx-pretty-print.h
! 6e16ec4899562efdb0a98d92d2955bda  gcc/cp/decl.c
! 6b671474ac7c297aaac46504341dbfd5  gcc/cp/decl.h
! 370cc4b6af8c7e456a5ebe9c53b8133c  gcc/cp/decl2.c
! 15ea88757f3899ea182cadbb26504a54  gcc/cp/dump.c
! 72f51d97be9dca0facc8620415fdd85e  gcc/cp/error.c
! cb3f122e06aa47daf63ad3bee0a3db7f  gcc/cp/except.c
! 282a05db0d0a2d52000d122866f1a650  gcc/cp/expr.c
! 0fdfe3f00165853829d8a1f3ffadd776  gcc/cp/friend.c
! 775dde7f296f0f54fc4d82cf9b70e6bb  gcc/cp/g++spec.c
! 03fd9420f68af666d76a6aa98f5f9f2c  gcc/cp/init.c
! 3d67c90586a5d1c4f34a90efd0759619  gcc/cp/lang-specs.h
! fcd6fc66a1aec40803c0b76cc85348db  gcc/cp/lex.c
! cec31b01d60376419f6ae8e509861f55  gcc/cp/mangle.c
! f19cae0d380d84fac538ed5675593982  gcc/cp/method.c
! 7ca9e31e9e048ed1b31f5b6ce4711c17  gcc/cp/name-lookup.c
! c5053a99c729b7d679cf4edc4f466a29  gcc/cp/name-lookup.h
  c9cae6ab8d289fac682aaa9edc61f211  gcc/cp/operators.def
! c130d5facad4be0de4eafd1edb79abdd  gcc/cp/optimize.c
! f560e740677afe502b23da55a5809a5a  gcc/cp/parser.c
! 4b6a921a80e03dce035927384140d077  gcc/cp/pt.c
! 03430127d4f4d0a6442ac9023fde2785  gcc/cp/ptree.c
! 5fe684c4c7ed61edeb16253e845c5945  gcc/cp/repo.c
! fec9c4f3eec95207c0d5c11e833ea040  gcc/cp/rtti.c
! 4c24afb186284f46485546ce96a43af1  gcc/cp/search.c
! 30fd198668082dd5e94a844c7d193e57  gcc/cp/semantics.c
! e0e6d975068443a6f050033bdef373a6  gcc/cp/tree.c
! d1971f78cf2663c64961406ad49d564e  gcc/cp/typeck.c
! f4f44a5f6f72e5e3493166e9648b675c  gcc/cp/typeck2.c
! bcf866d982d6c3d97f5bd4561b373076  gcc/cppdefault.c
! 4bd5654bdd95f3589946e6643d93329d  gcc/cppdefault.h
  5a3952c6e4073ddd293b452fa2568f23  gcc/cppspec.c
! fbf24a053c1186d726fd2d5f3dac2629  gcc/crtstuff.c
! f3cf1d1f6bc91cbfb52d4c06bbb2315f  gcc/cse.c
! e4cb0828d0b25fd07420894d1674d11f  gcc/cselib.c
! 373f18abbab3b8cbd89cc37271e3fc5d  gcc/cselib.h
  1ded054093de910d9786c62bc4fe8cc6  gcc/cstamp-h.in
! ce3cd844cdcd8a4daa8c9eb54d46471d  gcc/dbxout.c
! d0b12b9db4e97f8025729fa256f54efa  gcc/dbxout.h
! 5c4fc26b4e7cf5a66d7ab83701d62f9f  gcc/ddg.c
! 15dae09e9194f7623a731bb4d18e644f  gcc/ddg.h
! 2687d088e09ec058d9c4b2d9fd48f40f  gcc/debug.c
! 88fc59e656cb5d13a8f7616f647e2f50  gcc/debug.h
! 345e433df0cb8968440454885d9ff4df  gcc/defaults.h
! c02a12280dfe430dcb8f3223ea0ee689  gcc/df.c
! 6f25ca77baa0e4505bd8c52f767054f9  gcc/df.h
! 42ae08c19cafdbf2648710049ad23e93  gcc/diagnostic.c
  1de93ad5a7b72ea646d71c9785cee19a  gcc/diagnostic.def
! 98845a15e985d05b38caaab6662c752a  gcc/diagnostic.h
  bba4f994dc95873b01340b4dd0e723af  gcc/doc/bugreport.texi
! 9ead49f166cc96d7ba5be6aa674eca72  gcc/doc/c-tree.texi
! b2d0f8e14f999ff4fb03e216a166ef54  gcc/doc/cfg.texi
  e025c163542a9ac9aecf10594125f181  gcc/doc/collect2.texi
! 817e2c2d921e25ad38a62858dc18ca37  gcc/doc/compat.texi
  ede23db52c73d2fda739a3d4cedfd465  gcc/doc/configfiles.texi
  73b7f9aa052dde14853d1817153dfd24  gcc/doc/configterms.texi
! 2af045846c02c160f35763432fcd910b  gcc/doc/contrib.texi
  ad084b0cb2efc588cf805ebadcd5a612  gcc/doc/contribute.texi
! f5f4a095bd9c8e8d7078181b2b191c94  gcc/doc/cpp.1
! 5d229078c2571b1f7cb001beddc4a8fc  gcc/doc/cpp.info
! 3fa91162d26f25eaf6f5a89acd31ef53  gcc/doc/cpp.texi
  8462a717da44ca316c8c9ac975457a32  gcc/doc/cppenv.texi
! 1c7a867908315d94051ec6e21ed22740  gcc/doc/cppinternals.info
! 852bcb46d783751296394fcdffe7e88f  gcc/doc/cppinternals.texi
! bc208658177e51356d1c676eda25c4ba  gcc/doc/cppopts.texi
! 3d4e85452c5bf5ac3200efaef2bc8907  gcc/doc/extend.texi
! db2ddd3f1e37c256410961b0eb41a92a  gcc/doc/fragments.texi
! b0318dd829535c6d2e012cb04c0144bb  gcc/doc/frontends.texi
! 2c40748a8ca262ed10639e9ee3507c7a  gcc/doc/fsf-funding.7
! db49c6abb5ad310a90a03ec51dbca27f  gcc/doc/g++.1
! db49c6abb5ad310a90a03ec51dbca27f  gcc/doc/gcc.1
! 25427c5900a258a4d7fb96189d7c06c5  gcc/doc/gcc.info
! 8754c65f56d3d1bda3fd371214441fde  gcc/doc/gcc.texi
! 06dac339b0239353d33ba5fe2b7db28f  gcc/doc/gccinstall.info
! 8078eb163a18af33c5bfbc48642142b7  gcc/doc/gccint.info
! 5163968fa7bff9b011b503fe2950f488  gcc/doc/gccint.texi
! 720a45e0db78664b49d531fa0539fd7b  gcc/doc/gcj-dbtool.1
! adb4e9c97a64a1d7a2d49c5cd890c650  gcc/doc/gcj.1
! 53e739d584239ae4454e6e0bb60cf699  gcc/doc/gcj.info
! 5dd130122cb487e960b1f30bdc43a592  gcc/doc/gcjh.1
! 7e1e263e1d2edd65f3cfcfb4a50945dc  gcc/doc/gcov.1
! c1f9c78ed6b3640f15cdcc91015df8c1  gcc/doc/gcov.texi
! 36479b486fd9589688a1275447e1dd66  gcc/doc/gfdl.7
! 0f86d075685af49f4e62a0edf7049e58  gcc/doc/gij.1
  290370669f02bef1502ada9273e5261f  gcc/doc/gnu.texi
! 73eb0cde6b0d190847aff605de037023  gcc/doc/gpl.7
! 51b57dc74525d1e53f6a6922f11ffdb4  gcc/doc/grmic.1
! 42473ec9acb2525b2d0da98c94f255f3  gcc/doc/grmiregistry.1
! 22760abaaf37d057cedbf138eb48e686  gcc/doc/gty.texi
  12712ad63a56e9d549562b21b42b1454  gcc/doc/headerdirs.texi
! d19ea13dc66f4da0833988888acc67bc  gcc/doc/hostconfig.texi
! 6f943bd6a17d46da5b9e44e40a6a31e4  gcc/doc/implement-c.texi
  34dd22797a1a1ec22615f0386badf115  gcc/doc/include/fdl.texi
  8787976f426cd52da24a856cd41d87be  gcc/doc/include/funding.texi
! f4fb0074ea9d8fdea291192e8487a2a9  gcc/doc/include/gcc-common.texi
  5dac6b15d38729f68fbadfcdefa2e05d  gcc/doc/include/gpl.texi
! 5b19812a4a2f49ca1335393aac53c46d  gcc/doc/include/texinfo.tex
  86355f77ae147b0b5ac0b6127c8259f8  gcc/doc/install-old.texi
! 4ad41d2c5187911e47b9743010b32080  gcc/doc/install.texi
  4230bc26f282d5b487b41e5546fa1de3  gcc/doc/install.texi2html
! 5407c66b804884426ce94dcac22864d1  gcc/doc/interface.texi
! 7f2f9f5d924d7539433e369254458e54  gcc/doc/invoke.texi
! 9291b8c80ad0e390e8ffebb4559a7390  gcc/doc/jcf-dump.1
! 1054c164a74977bb80840cfc1f324043  gcc/doc/jv-convert.1
! 84544fc5d3d8fe1ba41c4b5113ace61c  gcc/doc/jv-scan.1
  a01aca1d7da7f482653b521ba6447f85  gcc/doc/languages.texi
! 15e516d91479ef3e58d9d89162b6da01  gcc/doc/libgcc.texi
! 6a2d7e742f035d39e2b3fd9d2241c7c8  gcc/doc/makefile.texi
! 85fabcf0ba931cccb0520ae9fd864215  gcc/doc/md.texi
! fdb19507f65418fb9044d88c611e52d5  gcc/doc/objc.texi
! c51d8e0fbf4b091b0869dfb72d51a3a2  gcc/doc/passes.texi
! 72136dc6e58c1bb1790f0f25bbaf8897  gcc/doc/portability.texi
! 5c9d6361339b9f2055cb3ed69859e8f0  gcc/doc/rtl.texi
  d57122b80f1dd7815e0cf707c38d0170  gcc/doc/service.texi
! 63967d15aa61d44bffcd5498cc5a2382  gcc/doc/sourcebuild.texi
! 669b3cb57d97907281cd145e6fdf9425  gcc/doc/standards.texi
! 919565fc54e24bf04c8bfe700d811f97  gcc/doc/tm.texi
! 30156cc8de3e2e55fa0a7e86ab71a9ed  gcc/doc/tree-ssa.texi
! 922bf2a8cb783f155f5a3c195db51f0e  gcc/doc/trouble.texi
! 3dc822e938c2dbf7c15f71b98ae055e4  gcc/dojump.c
! b628aa84359e1bacb0d9ea564dd29dfb  gcc/dominance.c
! 7687e078d4061027d140e6e39996815c  gcc/domwalk.c
! 3ab4bd5c944c173e7bdead6752397011  gcc/domwalk.h
! 3b5764b080acec25b735fe552a93eee8  gcc/dummy-conditions.c
! af8305eb51caaf35735d10af319a77d8  gcc/dwarf.h
! 56ba259983cdde1e185f4ca83febcae1  gcc/dwarf2.h
! 32c1a642952b2ecd3eff081307485e9e  gcc/dwarf2asm.c
! 62f69587335c73ac17e25afee22c2286  gcc/dwarf2asm.h
! 345b1185d254b02676379334a5f28009  gcc/dwarf2out.c
! 1776c4094d77981e0cb2996c5f9df200  gcc/dwarf2out.h
! a11468235d004c57ca01476cab3358cb  gcc/emit-rtl.c
! 13c7ac97c340317eb70ef2efed00175b  gcc/emit-rtl.h
! 943085d96ef3a5008393cbec59416a48  gcc/errors.c
! 957842e26fc5a93ca0aa6bb4bb8e4a82  gcc/errors.h
! a73955d3d46ec12f7a381c85190f7d21  gcc/et-forest.c
! 23056b54748cbb46d07880c2c6764e26  gcc/et-forest.h
! 0e79759fe8fec012c3607fe07971ca4f  gcc/except.c
! d46cdf697a737f1741ccb0ae05e5a5dc  gcc/except.h
! 08abe89e0c217309f2cf53baad66406e  gcc/explow.c
! 0aaae5c06fb3ecd77cb584124478f5ba  gcc/expmed.c
! c127fe484392e2e4f38327a5f7be39a1  gcc/expr.c
! 759168c39fbebb501219e8497e7d36d3  gcc/expr.h
! 5509c61348d9af95d40483175e11ae7a  gcc/final.c
! 6afb3f4b3d41e1fd240c878d52757bf4  gcc/fix-header.c
  2a88dc3bb6779aec109127104e58611f  gcc/fixproto
! b939098d91f78c11f2de7b2b23d63a12  gcc/flags.h
! fe2bb9bae9fd9c0cd205a3f9f9259990  gcc/flow.c
! ddfed1ae37b0d7658d8babb0294ed20e  gcc/fold-const.c
! c8e664990466ed2b6f8b7698ac08cd6e  gcc/fortran/.cvsignore
! ea13fc32088b2318586830f4f12bfd15  gcc/fortran/ChangeLog
! aa29dfc60b927cb52beada0cfb11d232  gcc/fortran/Make-lang.in
! 77a0132e6076ebba8687a89a1f9b1ed8  gcc/fortran/arith.c
! 36d06ef037e273f5d339f262a90a7a02  gcc/fortran/arith.h
! 2deab46c50783ca039e286db9171f5f2  gcc/fortran/array.c
! 29258efcb443a9839109f0fecbde660e  gcc/fortran/bbt.c
! cd418b208df1049f9194e073ff15bd15  gcc/fortran/check.c
! fa78137047a101d436cf2c1e0ca3b6c7  gcc/fortran/config-lang.in
! 9e42203b4dcacfe5244e9c87e405b07d  gcc/fortran/convert.c
! 00fb46c8c5ee9759c05f635bdb008c6d  gcc/fortran/data.c
! c11e4d7d39c11c1cb23d4f8662749d83  gcc/fortran/decl.c
! 1a7508701ccc38df87c2508ebe0580b2  gcc/fortran/dependency.c
! 88d9b0794e6823f7fcb640ac5a7b3ff6  gcc/fortran/dependency.h
! 585638ad3aa1e435d7fd52c425a891c6  gcc/fortran/dump-parse-tree.c
! 07bff10e5e46dc600568124572cc0fdc  gcc/fortran/error.c
! 793f09cef11896dcedbe23fa61ca0c34  gcc/fortran/expr.c
! a6eabf89d48380f54b3a3300517863aa  gcc/fortran/f95-lang.c
! f1b8f5a494b0219669b4bae4db145bdf  gcc/fortran/gfortran.h
! f64677b12c98156c8fc812bae21c8bbf  gcc/fortran/gfortran.texi
! e5eacd5df0e661820c0842988768d3b8  gcc/fortran/gfortranspec.c
! 421957d07edc3ca1eb2085c2e9ab9a30  gcc/fortran/interface.c
! 9e979405a36f63da096890865fa8b73c  gcc/fortran/intrinsic.c
! 05369563ee2e5a69318378415fb5e591  gcc/fortran/intrinsic.h
! e9b3b35895618a76147d4c04609c52cd  gcc/fortran/intrinsic.texi
! 47d91f1d9b32fc841d2a818da142722b  gcc/fortran/invoke.texi
! 161376cc7aa1ce824b2c8028cbd227aa  gcc/fortran/io.c
! bac8b3b96a468ba2f006ea52f3bff4f2  gcc/fortran/iresolve.c
! 7d3cedd45a83ca625174db2bd3e7d651  gcc/fortran/lang-specs.h
! ba82fb3eb0b99e8a598109d6f6c9137b  gcc/fortran/lang.opt
! e803c0d89941dc08f5ef609873be6a20  gcc/fortran/match.c
! 79da1302ae40c220fab815ac8ca86067  gcc/fortran/match.h
! 4aca80671950f609de2573a148440493  gcc/fortran/matchexp.c
! c48d568c46da86448482ec9a52bf9c78  gcc/fortran/mathbuiltins.def
! b9ad2521239a537a7362a45645ab4f5d  gcc/fortran/misc.c
! 9a6401b5b013950e47283fe4b42a8447  gcc/fortran/module.c
! 24f594f5347d015ea1e1ff2c57ac343b  gcc/fortran/options.c
! c023017e1c022bcf6ec7aad15aac0747  gcc/fortran/parse.c
! 16095073319144499c0d9f55c717716f  gcc/fortran/parse.h
! e67a5b6356ea1ea6989b4090c10b0e8b  gcc/fortran/primary.c
! 09438f5c39ecc14c52ec4b31b59f5698  gcc/fortran/resolve.c
! f9951710db6a79074d5995aa07d6dc09  gcc/fortran/scanner.c
! bda99c25d3ff11ccdf8aafdbda7d7848  gcc/fortran/simplify.c
! 253df2a926a42687760307dd38a851d8  gcc/fortran/st.c
! 4b9c1db826c8dddea1af5506ed6ec023  gcc/fortran/symbol.c
! 7f5cb95f3044dd8a3c92fc2c9ee1ed4d  gcc/fortran/trans-array.c
! 0d70ee84521905db9ea4bde8e180385b  gcc/fortran/trans-array.h
! f47d65b559a280b80c627e14791bf199  gcc/fortran/trans-common.c
! e836c630e103db612ea468788f8b2bc5  gcc/fortran/trans-const.c
! ef25425b654c175759d5a60a98289095  gcc/fortran/trans-const.h
! f6c18bcb27faf5bb1adce2e698bad280  gcc/fortran/trans-decl.c
! 988c0278c75efa01caca86a03b643377  gcc/fortran/trans-expr.c
! 56b5c1c697a167b5fbcc2c97b408eefe  gcc/fortran/trans-intrinsic.c
! 8338e224964c8ee220f04c418c73bd16  gcc/fortran/trans-io.c
! bde32e83dba3cd5946a57a245ca6debd  gcc/fortran/trans-stmt.c
! e75f0e2e4b3dce1ce06795a5d24fdf4f  gcc/fortran/trans-stmt.h
! 5d886d2756bf7fab007a66088f5b8280  gcc/fortran/trans-types.c
! f2045f4021d26f52172a9f484b680f90  gcc/fortran/trans-types.h
! 27ad56dda22563e6364a50e760f76c2b  gcc/fortran/trans.c
! b786b33cb22b3a0aacf1e46ac38b7c09  gcc/fortran/trans.h
  89cc2e2833c8dbd6c9952122fb17e762  gcc/fp-test.c
! b630c48953926624e93cb87f7290b788  gcc/function.c
! d10bffb8b2ad45855f99493f2ab0d365  gcc/function.h
  8b236ba2888ff458e53cf4886134e68d  gcc/gbl-ctors.h
! ab6dbd48fa80a87966eeea86f91d53b4  gcc/gcc.c
! 404c79cd05285f38b937215a393bac19  gcc/gcc.h
! 26833dc3327cac9878c8ce0bfe25733a  gcc/gccbug.in
  6c8aa14d6e96a396e36ddef8e52b03a3  gcc/gccspec.c
! 551d90aa4e23786851d22cfa183ebce9  gcc/gcov-dump.c
! 91c6bf2b1707e7b4bd5440f930aa9e0d  gcc/gcov-io.c
! 8ce6a167aa81d8cced1567816237f1fb  gcc/gcov-io.h
  313ac1ad71ff80f61831c60c648e1e87  gcc/gcov-iov.c
! e06a7e7216e1b270f57af0c4e364a13e  gcc/gcov.c
! b6c23eaffccb81e23550c3ab10e08a2b  gcc/gcse.c
! b82d654516012b347970fec65e9ddd55  gcc/gdbinit.in
! 3704af2532adea4f64fa2206f2deeb71  gcc/gen-protos.c
! 656231f064bfbf6b8bab1dfec2d37e48  gcc/genattr.c
! fb1219faec895d9041386536004881ba  gcc/genattrtab.c
  74e11c0709a7783805d7119bac140317  gcc/genattrtab.h
! 8ad22afc9bce5462e9e374cda515b04b  gcc/genautomata.c
! 545181130ef38feb023a8220a80b6f7e  gcc/gencheck.c
! 91786c14fe226c40670e37e1c0f0eb21  gcc/gencodes.c
! f34c98f3133e8f73228a5b229598bb10  gcc/genconditions.c
! 45c036d5b96aab989411f2f1f9f1b48f  gcc/genconfig.c
! 701a1251c2a1568675470574e87e2054  gcc/genconstants.c
! c71649bbf56fadb3c861d408222db554  gcc/genemit.c
! e79f6eaa256db2e436812d7b7c1991b9  gcc/genextract.c
! 780c00b108bd303a19726b89c62a96b0  gcc/genflags.c
! 399c39e1661ef298c459a3c865383f5a  gcc/gengenrtl.c
! c235ff8e78157f196b2484cb14d55b76  gcc/gengtype-lex.c
! 6f267adb4c1cb09af9ef00141a32f07c  gcc/gengtype-lex.l
! ec857735edafc08838cc5bab0f72849c  gcc/gengtype-yacc.c
! 9e16dec4bdcb56747c7133c448d7f0d8  gcc/gengtype-yacc.h
! 2421077c6571d1bbc98381b8eb3c35f5  gcc/gengtype-yacc.y
! 669cb9bf9f5d6eec662700d044c84cab  gcc/gengtype.c
! 3070c61040ba65f02d34a83fb1227466  gcc/gengtype.h
! d97a5257b59e4d5ead895cf549ded49d  gcc/genmddeps.c
! fcf55d3f13854a3b1212b3948e1117e0  gcc/genmodes.c
! a97eb1dab42821d9073d0a4e7403f9b7  gcc/genmultilib
! 66c7bc6bc85b51a993450008711c1b3b  gcc/genopinit.c
! 7cbb770f3baefe575e2176cfb8f781f0  gcc/genoutput.c
! 8df1288657666b65e46c2f8e7d3905fb  gcc/genpeep.c
! 867e11771964fb71754244e574420a58  gcc/genpreds.c
! f2009b2967df93e27de26b596dbc7151  gcc/genrecog.c
! 5dc43ee2fec504f0b32df6b24785d67e  gcc/gensupport.c
! 39871d65af2e4cf257fc89fc8fe4f2fe  gcc/gensupport.h
! 97d03d00a4c1c289537fbe831c09e243  gcc/ggc-common.c
! c765317a2d2a56c8883950e9d1eb092e  gcc/ggc-none.c
! 53278cde0472fa414d5fbafc6904173c  gcc/ggc-page.c
! 067a72a18e44bcb62bfff9edef6ac9d9  gcc/ggc-zone.c
! 25c6147b4ea80c847bfeecefe822a666  gcc/ggc.h
! 649faca57a5a79f6dbafb79d1a1ad698  gcc/gimple-low.c
! 6b8468538325fdeef38035a3e57cc884  gcc/gimplify.c
  143d9eb1e7d7cc3a6c181fa57e344d0d  gcc/ginclude/float.h
  378da2dd3f4a6d9df12f8b0a43615739  gcc/ginclude/iso646.h
  2f4dffb1e27eac29d9981caa8ddbba08  gcc/ginclude/stdarg.h
  213baee904954855afe6b742d0dad427  gcc/ginclude/stdbool.h
! a778b154c1a329d3aa5f2b023596bdd8  gcc/ginclude/stddef.h
  8d9ecf0d6ef93c79623ce1d27a32a2cb  gcc/ginclude/varargs.h
  dee4eda8279ccb1cfcc9335d717234e7  gcc/glimits.h
! 39f4e2eddc4a8a10d4badf5af980f2e3  gcc/global.c
  3ccfd2aca4fc2b50e0783ca5763acaa1  gcc/gmon.c
! 282712c7215938812e7936e129a0484d  gcc/graph.c
! aeacee596ab8a1eeedd2c0d10c141393  gcc/graph.h
  24f1d20ea7f6ce8ce62a58c43a0ecf39  gcc/gstab.h
  f25fa25460fa1cdbc357f1ed15e2568e  gcc/gsyms.h
  c32a1d882e7039afe158bb9e59b65223  gcc/gsyslimits.h
  a902ff24afa88be00934822ffff33ad2  gcc/gthr-aix.h
! 9e30d33758cd0c9f9749a2a9b25d387e  gcc/gthr-dce.h
! 411f186f6e2843e82291963b0b152836  gcc/gthr-gnat.c
! d25c4c1ee06fa1a0d2ed63a5f893fc36  gcc/gthr-gnat.h
! 86d621fe9259d6f7df30d2a3116c771c  gcc/gthr-lynx.h
! 8989216d425c115b025808fc95aff766  gcc/gthr-nks.h
! c48f7f0d236136b3d0a3b90e6fbd8c5e  gcc/gthr-posix.c
! fb4d2c62ea6e753d8b1dbeb240b3b5fb  gcc/gthr-posix.h
! 2542264bbaecd8366a795ed6d1484d5d  gcc/gthr-posix95.h
! 6b9298ea5f8960db38c8ccffffb6ddd7  gcc/gthr-rtems.h
! 35473c80067bde47304bd77fdd017309  gcc/gthr-single.h
! 153a8598223fce65b26741656c62d5b0  gcc/gthr-solaris.h
! 520a019bee410b2157f9adf5fa917495  gcc/gthr-tpf.h
! 1f21f8d321fe6bd214a999278251f410  gcc/gthr-vxworks.h
! e8e204a3b0293b7b75fe3e9561512401  gcc/gthr-win32.h
! 62decbf5da7eceeafbfa7635b9d1bb88  gcc/gthr.h
! 67f7b8a35a1b201889b1ceeb4ead05a4  gcc/haifa-sched.c
! aac955e0c5bd08a648e6dc88a47fafdc  gcc/hard-reg-set.h
! bab7d98f577ca59b10b3b251fcbc9be3  gcc/hooks.c
! 4d745ffd8b0851abc3f04dd25210c85d  gcc/hooks.h
  3a4b7a98629bd32b5dd9e7fec4d813cf  gcc/host-default.c
! fd6a71d6c275890536cb8de543a8ae8e  gcc/hosthooks-def.h
! af372dbe34eafc896bac4ffac38cb5a7  gcc/hosthooks.h
! 7fef79f717bc952250a72c3ce88572a4  gcc/hwint.h
! c9a282ae29c871283fe1242378a350e6  gcc/ifcvt.c
! 05c0ef6e9b71ebdb873ae31a56041227  gcc/input.h
  38986bb8bb03d989f72b67cd283a9bc1  gcc/insn-addr.h
! e61431669b801d309020144ac56539dc  gcc/insn-notes.def
! b5c75a195e6fefb1d0a4ca158824a54b  gcc/integrate.c
! 15cd76ad545651cb4fc49c77a67f1cd4  gcc/integrate.h
! 769623ca8cc6c83ddf68f9cb656f9f1e  gcc/intl.c
! dce6c0fdcd511a7efda708338ff12372  gcc/intl.h
! a176547c3f1f5c36f6e87317425b2aba  gcc/java/ChangeLog
! f75c827a1e48218f1d103dcfc4d6525b  gcc/java/ChangeLog.tree-ssa
! d0cc27f536c8e4d8b5580684f51a6131  gcc/java/Make-lang.in
! 60d4e84c76bc62a5dca84ac586ef1d71  gcc/java/boehm.c
  08db6bf4ea64d94892095b2f44f12e86  gcc/java/buffer.c
  fd12809851cafbf50d9a6d4148c8f25c  gcc/java/buffer.h
! 58cefe2112e9950515fcb805900b9309  gcc/java/builtins.c
  9194d7bf58de2a6826c3615620ad8a3e  gcc/java/chartables.h
! 1dd01ca1802c9b84be527f3a98760ed9  gcc/java/check-init.c
! 0096511059d669038c1a44792ec7a91c  gcc/java/class.c
  701c3fae2744bb1cba3a6be507521bbc  gcc/java/config-lang.in
! 52c4f9504e427cbfd2412102f55f72b2  gcc/java/constants.c
! 1bbfd10a96707946d665b89a1038d987  gcc/java/convert.h
! 3f5908521146d34feb20f6443104792a  gcc/java/decl.c
! 7980a3057ef967f37332ee0672450cd8  gcc/java/except.c
! 3d31576b2debcabffe9d53c129d0743c  gcc/java/expr.c
! 42cb0fb2e635926e340cc30812c8b44b  gcc/java/gcj.texi
  e22d04d56400c3783d3d799871ce70d4  gcc/java/gen-table.pl
! 8eee0f44c6b64543d41ded34dcc722f5  gcc/java/gjavah.c
! 13519d5a84c859ad85140d999a0cc296  gcc/java/java-except.h
! a84744afba2b2623d3f0af604fd3c5b4  gcc/java/java-gimplify.c
! f55df0408fb0e26a03341f220e79bcaf  gcc/java/java-opcodes.h
! 0570657b31d89b10aeef8003bc274e6a  gcc/java/java-tree.def
! b7c56dacea6597845e4bf90981e5592b  gcc/java/java-tree.h
  12dcb3b79f561c62beaa98f176fa55f1  gcc/java/javaop.def
  1b476d87b6145a64cd9c390dc18f0e40  gcc/java/javaop.h
  082e35bec4b881f7f7f059f694b2400f  gcc/java/jcf-depend.c
! ddd4aa2ab1ddebdbc97f9a5b466c539c  gcc/java/jcf-dump.c
! 8e662e275f3d0fb21f188c4333afd1c7  gcc/java/jcf-io.c
! 6753e1abfd08037ff8c91ff3bd042ef1  gcc/java/jcf-parse.c
! bcbfa7a7a757a36c18ab91c6123500f3  gcc/java/jcf-path.c
  bd43379870aba4a83983b67e069e8a6a  gcc/java/jcf-reader.c
! 378060dd876d06272c1c8bc24fd18499  gcc/java/jcf-write.c
! be8794b5b1d6dabfb96c92b4af616695  gcc/java/jcf.h
! b9ba9a2c95584bec1e48c8246995f16f  gcc/java/jv-scan.c
! b4505f2d85a626e8c1163b1a7f6d89b6  gcc/java/jvgenmain.c
! 08617ad20cfc989e6fc240502f420a0a  gcc/java/jvspec.c
  01918aa9081c8f23a3700560e1c7dae4  gcc/java/keyword.gperf
  bb60189a6a5a720b184f61e9c3146c92  gcc/java/keyword.h
! 31170aa74a503291fc1f3c5c73ee84a6  gcc/java/lang-specs.h
! 65c8e9abfc197f80b8c7c57de7a837bb  gcc/java/lang.c
! 2cd5b0402f5039f93c194861123c3468  gcc/java/lang.opt
! 2ca5de31151add46a026c52a865f6d8a  gcc/java/lex.c
! f866dac98996068f7c2ec9327604e3fd  gcc/java/lex.h
  667e31da3f84bbec005e9c4393a17ec3  gcc/java/mangle.c
  5368f5e92c82d0f4a187ae6d359b5ce6  gcc/java/mangle_name.c
! 58e5e609de43a0a19a2d7d39d009ce8e  gcc/java/parse-scan.c
! b244b3466c9a18872ad2be831c030319  gcc/java/parse-scan.y
! ed64dab8bb20534e70466ccb115903dc  gcc/java/parse.c
! 4c3fd7651f241fb6fa217be5621139ae  gcc/java/parse.h
! caeef2d2f2fd3864926b7b0e10b132ed  gcc/java/parse.y
! 6c57146bd316ba872d28cf8abb49aab6  gcc/java/resource.c
! c7e16c70252eafe8f98bbe669ce0ea2e  gcc/java/typeck.c
! f87dbcbb26e413d9e1697d982e8254f3  gcc/java/verify-glue.c
! a7536fccb62a018e5b99a6204a672fa5  gcc/java/verify-impl.c
! 0c7a743537e86ee80f59dc53baf27a37  gcc/java/verify.c
! 1a6953ad8558ffdc356a98c2223b26db  gcc/java/verify.h
! 0f0800848eae39cd2aec832284756201  gcc/java/win32-host.c
! 3de3634d4233b003d1b2511e7e6f7589  gcc/java/xref.c
! e1f2852c6fed572a68ece25a6505c332  gcc/java/xref.h
! 4f66ebe28119824f0d7f5663bd5d62ca  gcc/java/zextract.c
  6dd9595636fb64d33ad593a915f8102c  gcc/java/zipfile.h
! b0ebb278701137a8019efc7e84800d5a  gcc/jump.c
! 1ff9f92982a3a3f0646f023407c80230  gcc/lambda-code.c
! 5f88929d996c02fd4fee4f000404e6f3  gcc/lambda-mat.c
! 7425f591225a6b02581f0f7efea9c93e  gcc/lambda-trans.c
! 836c76587ba76514f484ada4bf94cd63  gcc/lambda.h
! ec18ecb5bf2bbc1fddb657cee91c57ce  gcc/langhooks-def.h
! 78e3c0e40bbde4a1f0edd32f8cad3e41  gcc/langhooks.c
! 2ed99d8ca4dd701af5a28dee836ea743  gcc/langhooks.h
! cee037bd143f9020e92c223a9fa528de  gcc/lcm.c
! 2d40d3441853e439f7c9bbaf32d0fd10  gcc/libada-mk.in
! 8d1e66848e42bdb0233d68b1ce57e21f  gcc/libfuncs.h
! e9efd8a30b36aa57577d3f039381ab1e  gcc/libgcc-std.ver
! f34b001fb96411c40c4f2a4eba4173d1  gcc/libgcc2.c
! e290e90fc09f87eb95aec0d5d1611571  gcc/libgcc2.h
! 299fa23ae4f5fef215e3c04c7c4d44b6  gcc/libgcov.c
  d4f7140fcd55bba037803fb314146a6c  gcc/limitx.h
  83de5c6450456e215a5484083afcd32a  gcc/limity.h
! e87ed464ed1cb9d2816a5d9ebfb3516c  gcc/lists.c
! a4d2e6da15304275f639f0da5fdb3e98  gcc/local-alloc.c
! c65dc66091fe143bf065795a0aaff198  gcc/longlong.h
! 497c42c851f1390d3bfddaba877c5149  gcc/loop-doloop.c
! 1af846af3f1f49ea2592677b91d88886  gcc/loop-init.c
! 5a593d4070f25937add12a17ac1b38de  gcc/loop-invariant.c
! 74e5f9104c65ef774b511e5a3be6cbc7  gcc/loop-iv.c
! b1ed0bfafa0d55ebc7788bdf7b0f49ec  gcc/loop-unroll.c
! 14f61172d4fcab75236ad1df7107355e  gcc/loop-unswitch.c
! a12b9d42dd295e8584a914a58670020c  gcc/loop.c
! 0d9f87424259bc4114f4edf55b89c861  gcc/machmode.def
  1fa8c1f9661c9c9bbdbe65997066ef49  gcc/machmode.h
  292b8ef5b5b9aeb19a4a6d534db3ad9a  gcc/main.c
! 729457b2420eb2a64bc7ac6f39183f19  gcc/mips-tdump.c
! 3e22e541aa74bfeef6678c9fc3a8a650  gcc/mips-tfile.c
  ebbcc540de127be8a3f11b9df28900ca  gcc/mkconfig.sh
! 62fec9aa88e6507014bd6244685407cb  gcc/mklibgcc.in
! eda7d9ac78d58cf1f25c1a1caff11079  gcc/mkmap-flat.awk
! eee9b2d9b5df71374ad02f69c4bd1dc7  gcc/mkmap-symver.awk
  a1fa8244a5e0c628001f9393b8d02c54  gcc/mode-classes.def
! 6d55fcbb93ead52b905e54961030fdab  gcc/modulo-sched.c
! be34278ffd07e39fab7cf40be999d7ba  gcc/objc/ChangeLog
! ce5ca3a40b29140c4144f8d63efd2c92  gcc/objc/Make-lang.in
  aa5319dd541cdb0eb8622f9adf66b761  gcc/objc/README
! 76e314b4bf498fc031f6cfaf507f7d0e  gcc/objc/config-lang.in
! 4a7ddff8a5685155d892fe9191757a5b  gcc/objc/lang-specs.h
! 5abedf4d90c611701f667790c6d4e14a  gcc/objc/objc-act.c
! 65574fc2425689c411efe5c07c8927cd  gcc/objc/objc-act.h
! 2ed2c0cc30457c6db054244f31974e0d  gcc/objc/objc-lang.c
! 39ee70f665d00fad6e109e31982c278d  gcc/objc/objc-parse.c
! d44398caa2bdb6f5daf3de59f5afd2fb  gcc/objc/objc-parse.y
! 90051c1a9f58ad42df973bb7f38144e0  gcc/objc/objc-tree.def
! 65f8cf29292094016903a7718a526806  gcc/opt-functions.awk
! 11b7e72734c2c3afe0aaf68beb904554  gcc/opt-gather.awk
! b916019ee34f15b1c400ff4c817f5016  gcc/optabs.c
! a9c09ba215410295e41f9797b863d48c  gcc/optabs.h
! 598ecdb4aa999cd36c2a8bfe78e33e3e  gcc/optc-gen.awk
! b7881c3afcda9d0696d6df2ddb72203e  gcc/opth-gen.awk
! 9cbf5627213e6399f72b6cd26c54346e  gcc/opts.c
! ac91f347c93f09c7c12af480511854eb  gcc/opts.h
! c13588bc0a640c3bb11fc9457ef05ee7  gcc/output.h
! 77d05e95eb76e0736cef3fc602214693  gcc/params.c
! d1fda99a9c44855d5ca8443bdd7d7509  gcc/params.def
! 990a76ea5630ccffb8ddad0054d1f609  gcc/params.h
! 4eaf18706587b9d3b8f00f550f4f7805  gcc/passes.c
! 8b0d51525196452b2ffcd53356b3d7ac  gcc/po/ChangeLog
  954b21fb36cc0d8e9f6e2d6507152f23  gcc/po/EXCLUDES
! a10c7166bc1cb85aec9095ce0df7424c  gcc/po/be.gmo
! f2166fcb461b930086a8f548fc0c8878  gcc/po/be.po
! 21e5abc6d439df34d788fa5a6060936c  gcc/po/ca.gmo
! a5092e16f360435a455b09f02e62e705  gcc/po/ca.po
! f6e9ba5cb4d148467970c83ba9a297b2  gcc/po/da.gmo
! 7da659da2619252e071a5a5e8a2c55db  gcc/po/da.po
! 100a4063fb4eecc3e114b226240bb294  gcc/po/de.gmo
! a3f88581517612aacc3d95237af005a0  gcc/po/de.po
! 26b8f794db5026e79d0c0040e9300697  gcc/po/el.gmo
! 388db1b7aae97b34d15576373abf9a13  gcc/po/el.po
! 3f8f20a4b94a885c495e391ad70ab99a  gcc/po/es.gmo
! 2da6749b8ded27221ba782555e3c3d9e  gcc/po/es.po
! 0acb85227a7f2fb224cf9578651f3fde  gcc/po/exgettext
! 7850384efc0d74bcf736a08003567a01  gcc/po/fr.gmo
! 633fbd56a9eafb36899fd29176b9e399  gcc/po/fr.po
! 2aa933d464487dc2b671581c62628de7  gcc/po/gcc.pot
! 072a9e0cf6bf11703c9862886f9f4aa4  gcc/po/ja.gmo
! be3a262db440520e32ad3c5b06d83d52  gcc/po/ja.po
! 535ebdcd32a97789d35b31843cdb061a  gcc/po/nl.gmo
! f1b6ccb8ebfe5b7ba65ee58bdebfb526  gcc/po/nl.po
! 0c5a49740da817a830b2ee06a5f0c184  gcc/po/rw.gmo
! ae014f1047e4413eee09e95d07edcb06  gcc/po/rw.po
! 128283fffe64cb478b44c0eb8eb4cb0e  gcc/po/sv.gmo
! 958ac4e7f2e818c57ee366d3a3f63b66  gcc/po/sv.po
! 21917d6a82680dd842bf5315d6b6680f  gcc/po/tr.gmo
! a54b0e023cec9e8e894869c90e512202  gcc/po/tr.po
! 6710b393cb7d9b97ccc19947a219a3ec  gcc/pointer-set.c
! 680ca03cb20fd835028ce2a7895c1929  gcc/pointer-set.h
! 90f46ac06beedf5071fa4ea388d3b36e  gcc/postreload-gcse.c
! 2eba54fe1bcd87182eda0dd9b053da10  gcc/postreload.c
! 1cc4c19739b7e768117efec774f13649  gcc/predict.c
! 39e61532e4203748ed8afeb6c8735c1e  gcc/predict.def
! 6af2c790505b7dc186cbd01d107047e5  gcc/predict.h
! 44fe8bbeb67bcbc08830671bdec9530f  gcc/prefix.c
  3df3fa596b628ba5ff43e0cbbf2538e4  gcc/prefix.h
! 967192e180c55ddeb7412f934a71c36c  gcc/pretty-print.c
! 09d9971cc227e189e81d1ee5a89bdd73  gcc/pretty-print.h
! 9d521ca40958bd39332b61c08f21f5f2  gcc/print-rtl.c
! 0b602affc0ac6233cf6212c8e39a5f61  gcc/print-tree.c
! abdd955ca37b4aef201c89389ba8886c  gcc/profile.c
! 55993c3ab31298706abb0ae3b42b4fe6  gcc/protoize.c
! a698c3a9a33c00f5438611e7855df170  gcc/read-rtl.c
! f40e3363fcf0814a682bb623de4caa7e  gcc/real.c
! 5b84d8df614702b50134efd0f8c0852b  gcc/real.h
! 0827b28b67f63ac37b40800196d92ec2  gcc/recog.c
! 95e4395515cfaf1b4465e6e496f6c7fc  gcc/recog.h
! a5dd7b8cb76d4b35e97a2f6f21f7ce5e  gcc/reg-notes.def
! aba9f0bf5dd8e7848e11523601fb2703  gcc/reg-stack.c
! 85c854a419e26cf3ef548777b04bf637  gcc/regclass.c
! dc8856ab209d07a7663f9f24c4a73b94  gcc/regmove.c
! 3d4269a18e9bb87489cbe4d32fbc02e1  gcc/regrename.c
! e93c14bb95662971b2f94d958f5ead02  gcc/regs.h
! 23764d7a4ee168980e2632b503299805  gcc/reload.c
! 8057865c210e21265f48c780d7828e9e  gcc/reload.h
! 8da17e3eb7e31284b03c49dd7d3f9395  gcc/reload1.c
! cd5a528c88bcf3b4bb7eeb8dd52dc496  gcc/reorg.c
! f4ef0cb534d4319a8c11654d746a8c1d  gcc/resource.c
! 78a9e20da6abc6b49da37ba93216a01d  gcc/resource.h
! 1a23ebfea01f4bd8f7fb933cf0ecc8fe  gcc/rtl-error.c
! d38859923f9d8a4878d19061edf310a4  gcc/rtl-profile.c
! e44b146eddacf224dd279c53b2f036a3  gcc/rtl.c
! 0ca251f85dc27c9d63169aa6298f8e4f  gcc/rtl.def
! 8b5492f739d19f16e32a536dac2bbc64  gcc/rtl.h
! ee344350a1f34202b23a9bff92f8a568  gcc/rtlanal.c
! 2ee45132e5f9fdfc26b6064dc6b378db  gcc/rtlhooks-def.h
! 84da1804dc5bba8dc8fd3de9bc973223  gcc/rtlhooks.c
! 5f4888a9e3b99558a6bee65006b7ae1f  gcc/sbitmap.c
! 549e09b807f25c97633b68a803777db4  gcc/sbitmap.h
! bea43a9763ffc23f1c76ae636a4c1499  gcc/scan-decls.c
  c42e740dbb03072238bc5c6f5d21f933  gcc/scan-types.sh
  2935e4147258c3a32d42032fe2260205  gcc/scan.c
! 8303da860923890892eb43ed24fccc70  gcc/scan.h
! cb533c906dd7c24ee523111dc698094b  gcc/sched-deps.c
! 8b998dc59b54c6c0842ccc5c36036e4c  gcc/sched-ebb.c
! c1b3a9d17ba306fc7a34470daecf8de9  gcc/sched-int.h
! 1507f9947804419e3da169bf33ee48dd  gcc/sched-rgn.c
! 48eb7e3bb948915dfaf9e14e8fd01150  gcc/sched-vis.c
! f8d0b2a6d934e439fd8fcd58ca7ca4b8  gcc/sdbout.c
  3e8309c186840a3b20db0f0245f8a172  gcc/sdbout.h
! e542e52bd9a38d96c3a48599d36f703b  gcc/simplify-rtx.c
  8e865a71c4e2c43eae4afbcf143af4a6  gcc/sort-protos
! bfb6ce471a540b27cd6ed4faf8a81bc3  gcc/sreal.c
  ae128709f9021ffb7cc827cf20d60022  gcc/sreal.h
! ea76e38ab702ecf1e7f71d7b140471a2  gcc/stab.def
! 12c7131959262c9c01116ef852f6aeb7  gcc/statistics.h
! b41b81c970b677f05c3ba6ecf4377322  gcc/stmt.c
! 027b1ebc0a86ea35186f9b246f2b472d  gcc/stor-layout.c
! 1ea7cc76e71885073016a3a7c90a8bca  gcc/stringpool.c
! 0449c9ce626afa0b18c0fdf1dde340b2  gcc/stub-objc.c
  4218f3bf53b8358d1ec10de7823b848f  gcc/sys-protos.h
  31e2d9be63e3d9aff0d5dc9ef42e0223  gcc/sys-types.h
! f1fa895cd3f7b2f04b34a165e315a732  gcc/system.h
! 0cb9bc194a98f083bdf1bbe9b52e7a2b  gcc/target-def.h
! 4e27de0b4f05b94d065dbd6e9c315c56  gcc/target.h
! c8fd3f583e96a558a045ca03a2464085  gcc/targhooks.c
! ffbcedb11c5237101da7a354447c04c6  gcc/targhooks.h
! 482d3bedd267a78992ae26b46673e56d  gcc/testsuite/ChangeLog
! 84188c97269b593eb46274047b401b48  gcc/testsuite/ChangeLog.tree-ssa
! c2eb2f892b7b914e0a687ca43783d1f3  gcc/testsuite/README
! 728a7ee145c744b1a6d095227d991e8d  gcc/testsuite/README.QMTEST
! 82ca46e8cf02a305ac1890c499aae94e  gcc/testsuite/README.compat
! 5e6579080cca78e664effde8f586e1b4  gcc/testsuite/README.gcc
  4004844198395fe50ecb798ed5d30f4b  gcc/testsuite/ada/acats/elabd.lst
! a1ddc716dcb42567b9930947653b6807  gcc/testsuite/ada/acats/norun.lst
  d5748b449a081324237ae22a21f32a3f  gcc/testsuite/ada/acats/overflow.lst
! b89e17be4a44075d5547c401db5bee3c  gcc/testsuite/ada/acats/run_acats
! 0ada0d9c07eb2dcb881470be24e892a4  gcc/testsuite/ada/acats/run_all.sh
  d45e1c07702f81b7fa521c99282fd51b  gcc/testsuite/ada/acats/support/acats25.lst
  2f262cdb98b38922d7b7f84414f43b84  gcc/testsuite/ada/acats/support/checkfil.ada
  4edf20410814582eae331707f2ae2c77  gcc/testsuite/ada/acats/support/enumchek.ada
*************** f88af2b3eb53ad7c8700efbd0f878915  gcc/te
*** 3542,3554 ****
  56ba35dd56ea544c0eb9146769871492  gcc/testsuite/ada/acats/support/fxe2a00.a
  67770e9161b0f48f3fc9392bd3460272  gcc/testsuite/ada/acats/support/fxf2a00.a
  6628969f51dd10c56235f9d7420e2d44  gcc/testsuite/ada/acats/support/fxf3a00.a
  7d5e524b6ec7cfb08b38af7bccf39d8e  gcc/testsuite/ada/acats/support/impdef.a
  4f2f9bfdfcfd8c5ecaf503416d1cfc5f  gcc/testsuite/ada/acats/support/impdefd.a
  edf70d423a69adebd38e9b29f35a2ba1  gcc/testsuite/ada/acats/support/impdefe.a
  f4c51093f419176fbe553f5299e3791a  gcc/testsuite/ada/acats/support/impdefg.a
  5d9a0f98d9f15211e0773263febb974b  gcc/testsuite/ada/acats/support/impdefh.a
  f2604ccc5244696793b33e7b83c57c45  gcc/testsuite/ada/acats/support/lencheck.ada
! d90ee1da2485f2e63d2efaf2a3720c04  gcc/testsuite/ada/acats/support/macro.dfs
  72980ae1a3bbd5b71aa915cefeaebf6e  gcc/testsuite/ada/acats/support/macrodef.adb
  4d7b79a3ff077d1ab05a78ebcf5a1de3  gcc/testsuite/ada/acats/support/macrosub.ada
  72f1263dc9ff4e693aa8ec258a9b59df  gcc/testsuite/ada/acats/support/repbody.ada
--- 3811,3824 ----
  56ba35dd56ea544c0eb9146769871492  gcc/testsuite/ada/acats/support/fxe2a00.a
  67770e9161b0f48f3fc9392bd3460272  gcc/testsuite/ada/acats/support/fxf2a00.a
  6628969f51dd10c56235f9d7420e2d44  gcc/testsuite/ada/acats/support/fxf3a00.a
+ 6a9b6ce90538e9126e7e5badc62ddca2  gcc/testsuite/ada/acats/support/impbit.adb
  7d5e524b6ec7cfb08b38af7bccf39d8e  gcc/testsuite/ada/acats/support/impdef.a
  4f2f9bfdfcfd8c5ecaf503416d1cfc5f  gcc/testsuite/ada/acats/support/impdefd.a
  edf70d423a69adebd38e9b29f35a2ba1  gcc/testsuite/ada/acats/support/impdefe.a
  f4c51093f419176fbe553f5299e3791a  gcc/testsuite/ada/acats/support/impdefg.a
  5d9a0f98d9f15211e0773263febb974b  gcc/testsuite/ada/acats/support/impdefh.a
  f2604ccc5244696793b33e7b83c57c45  gcc/testsuite/ada/acats/support/lencheck.ada
! 6b2f1cd3290cd6ebb6f3e9ad1ae797de  gcc/testsuite/ada/acats/support/macro.dfs
  72980ae1a3bbd5b71aa915cefeaebf6e  gcc/testsuite/ada/acats/support/macrodef.adb
  4d7b79a3ff077d1ab05a78ebcf5a1de3  gcc/testsuite/ada/acats/support/macrosub.ada
  72f1263dc9ff4e693aa8ec258a9b59df  gcc/testsuite/ada/acats/support/repbody.ada
*************** add1a6bb172c420d5b75dd9efb48c6bd  gcc/te
*** 3999,4005 ****
  fdbaa3ed4337e597d16209533ad30839  gcc/testsuite/ada/acats/tests/c3/c392010.a
  8063c17c7054236de05a0d6a56818802  gcc/testsuite/ada/acats/tests/c3/c392011.a
  66f6cf830b25e4cba2aeaac6801b02e2  gcc/testsuite/ada/acats/tests/c3/c392013.a
! d2fec7bce7afd90e21b0efb3e4e87a7d  gcc/testsuite/ada/acats/tests/c3/c392014.a
  35f1f390e8606d404b61bb05a639d3be  gcc/testsuite/ada/acats/tests/c3/c392a01.a
  ddeb268075e3a716a055f61676497b78  gcc/testsuite/ada/acats/tests/c3/c392c05.a
  ee8edde3e11e29c877773403259133c0  gcc/testsuite/ada/acats/tests/c3/c392c07.a
--- 4269,4275 ----
  fdbaa3ed4337e597d16209533ad30839  gcc/testsuite/ada/acats/tests/c3/c392010.a
  8063c17c7054236de05a0d6a56818802  gcc/testsuite/ada/acats/tests/c3/c392011.a
  66f6cf830b25e4cba2aeaac6801b02e2  gcc/testsuite/ada/acats/tests/c3/c392013.a
! 3597acb12cde69e45603917fc97c80c0  gcc/testsuite/ada/acats/tests/c3/c392014.a
  35f1f390e8606d404b61bb05a639d3be  gcc/testsuite/ada/acats/tests/c3/c392a01.a
  ddeb268075e3a716a055f61676497b78  gcc/testsuite/ada/acats/tests/c3/c392c05.a
  ee8edde3e11e29c877773403259133c0  gcc/testsuite/ada/acats/tests/c3/c392c07.a
*************** f4b1217bc94832f638629b8949b7def2  gcc/te
*** 4270,4275 ****
--- 4540,4546 ----
  798f26e21ededa5b524a77eeece6382f  gcc/testsuite/ada/acats/tests/c4/c45532p.dep
  76101d98b4fab21c843f8c72a2bd9d19  gcc/testsuite/ada/acats/tests/c4/c45534b.ada
  b8ae84ef022a3c5728e841755e4bac5e  gcc/testsuite/ada/acats/tests/c4/c45536a.dep
+ 28591d736802ebfac3f139de9f8cf2e7  gcc/testsuite/ada/acats/tests/c4/c456001.a
  bc49b87b69b7e8faefa883dc0c55fb68  gcc/testsuite/ada/acats/tests/c4/c45611a.ada
  3be40e2b85d211f880f0c3afd51a63e8  gcc/testsuite/ada/acats/tests/c4/c45611b.dep
  969e8cbd817e50baf599dd80133f7e3d  gcc/testsuite/ada/acats/tests/c4/c45611c.dep
*************** f48458b6ea766af192adb8d401f368fc  gcc/te
*** 4779,4785 ****
  b04d09f1322f0d92c98d41398964503d  gcc/testsuite/ada/acats/tests/c9/c92002a.ada
  5cb78880eadfd9eac647aba39fa528da  gcc/testsuite/ada/acats/tests/c9/c92003a.ada
  bfa0af83fa76f2092a243ddded4670d8  gcc/testsuite/ada/acats/tests/c9/c92005a.ada
! 7c7eed9b7cf7237c048cf7210c8a3287  gcc/testsuite/ada/acats/tests/c9/c92005b.ada
  a47a031badac4df0d97db8bef1c3bc41  gcc/testsuite/ada/acats/tests/c9/c92006a.ada
  e4aee3e6761bfd67eaa5d1bd1ef57470  gcc/testsuite/ada/acats/tests/c9/c930001.a
  d21857231e61275a32c743ac514d1bc5  gcc/testsuite/ada/acats/tests/c9/c93001a.ada
--- 5050,5056 ----
  b04d09f1322f0d92c98d41398964503d  gcc/testsuite/ada/acats/tests/c9/c92002a.ada
  5cb78880eadfd9eac647aba39fa528da  gcc/testsuite/ada/acats/tests/c9/c92003a.ada
  bfa0af83fa76f2092a243ddded4670d8  gcc/testsuite/ada/acats/tests/c9/c92005a.ada
! 379c27e94764b3b61fffdc4a6886f267  gcc/testsuite/ada/acats/tests/c9/c92005b.ada
  a47a031badac4df0d97db8bef1c3bc41  gcc/testsuite/ada/acats/tests/c9/c92006a.ada
  e4aee3e6761bfd67eaa5d1bd1ef57470  gcc/testsuite/ada/acats/tests/c9/c930001.a
  d21857231e61275a32c743ac514d1bc5  gcc/testsuite/ada/acats/tests/c9/c93001a.ada
*************** ee7ec1f6b6ec4c5ef50b1d777026421a  gcc/te
*** 5794,5800 ****
  c4b3b8c1c9564099bdde092389cc2da4  gcc/testsuite/ada/acats/tests/cxa/cxa3001.a
  edb7feb6536121adfd4fd4a2f3d69a3f  gcc/testsuite/ada/acats/tests/cxa/cxa3002.a
  48392592efa08a198d6e5d7a1a663683  gcc/testsuite/ada/acats/tests/cxa/cxa3003.a
- 7eb11ccdd82615be75ded3c2d5c126d1  gcc/testsuite/ada/acats/tests/cxa/cxa3004.a
  587c9299b8e48a8519d98c13c91ad290  gcc/testsuite/ada/acats/tests/cxa/cxa4001.a
  448cbac61205b8887f79bf74d5666a04  gcc/testsuite/ada/acats/tests/cxa/cxa4002.a
  46d3d97d6347f9b5ec34b3513bcfab40  gcc/testsuite/ada/acats/tests/cxa/cxa4003.a
--- 6065,6070 ----
*************** bf39b2f4f07ed6a4665a9dda2b002ff4  gcc/te
*** 5888,5902 ****
  834af9fa57783899a0e35eb445000495  gcc/testsuite/ada/acats/tests/cxb/cxb30041.am
  1f7e6c754cd6392302f6a73881265fcb  gcc/testsuite/ada/acats/tests/cxb/cxb3005.a
  47cb358f8b5c39994c472ca6162c0605  gcc/testsuite/ada/acats/tests/cxb/cxb30060.c
- 43769c5f0a9930881f7e0db2f6a8a256  gcc/testsuite/ada/acats/tests/cxb/cxb30061.am
  593282429f5462d5ed18dcd8dcdb51d9  gcc/testsuite/ada/acats/tests/cxb/cxb3007.a
  f846172da7dd713a885e8d2a7d06687e  gcc/testsuite/ada/acats/tests/cxb/cxb3008.a
  d2f1180bb38e13d62efbd9773c8b157b  gcc/testsuite/ada/acats/tests/cxb/cxb3009.a
  02b32c32297cd44b0d911f2b531c9313  gcc/testsuite/ada/acats/tests/cxb/cxb3010.a
  f8edfe848dc0c6e6f48662c52fb4967d  gcc/testsuite/ada/acats/tests/cxb/cxb3011.a
! 4fe0212ad8a9f1959df0a77bd34fee28  gcc/testsuite/ada/acats/tests/cxb/cxb3012.a
  c26417c84de8dd0b5f98086031028262  gcc/testsuite/ada/acats/tests/cxb/cxb30130.c
! eae390de8200670cf56d3767659ec16b  gcc/testsuite/ada/acats/tests/cxb/cxb30131.c
  f10ef865b96ee70575c8e209dd789a5d  gcc/testsuite/ada/acats/tests/cxb/cxb30132.am
  1ddc4dd51346e5a28f96af27d7391476  gcc/testsuite/ada/acats/tests/cxb/cxb3014.a
  95d8e46749c34da8a75a52eda38a1557  gcc/testsuite/ada/acats/tests/cxb/cxb3015.a
--- 6158,6171 ----
  834af9fa57783899a0e35eb445000495  gcc/testsuite/ada/acats/tests/cxb/cxb30041.am
  1f7e6c754cd6392302f6a73881265fcb  gcc/testsuite/ada/acats/tests/cxb/cxb3005.a
  47cb358f8b5c39994c472ca6162c0605  gcc/testsuite/ada/acats/tests/cxb/cxb30060.c
  593282429f5462d5ed18dcd8dcdb51d9  gcc/testsuite/ada/acats/tests/cxb/cxb3007.a
  f846172da7dd713a885e8d2a7d06687e  gcc/testsuite/ada/acats/tests/cxb/cxb3008.a
  d2f1180bb38e13d62efbd9773c8b157b  gcc/testsuite/ada/acats/tests/cxb/cxb3009.a
  02b32c32297cd44b0d911f2b531c9313  gcc/testsuite/ada/acats/tests/cxb/cxb3010.a
  f8edfe848dc0c6e6f48662c52fb4967d  gcc/testsuite/ada/acats/tests/cxb/cxb3011.a
! 8a65d94bc5bfd4ba3ffa03803fd4161b  gcc/testsuite/ada/acats/tests/cxb/cxb3012.a
  c26417c84de8dd0b5f98086031028262  gcc/testsuite/ada/acats/tests/cxb/cxb30130.c
! 6869325a6624cae77fa352805a94bdba  gcc/testsuite/ada/acats/tests/cxb/cxb30131.c
  f10ef865b96ee70575c8e209dd789a5d  gcc/testsuite/ada/acats/tests/cxb/cxb30132.am
  1ddc4dd51346e5a28f96af27d7391476  gcc/testsuite/ada/acats/tests/cxb/cxb3014.a
  95d8e46749c34da8a75a52eda38a1557  gcc/testsuite/ada/acats/tests/cxb/cxb3015.a
*************** ab76335d91ab2dbdabbb5042f1e1c44e  gcc/te
*** 7736,7813 ****
  c40026a0e7923e5119a1e8c890b403ac  gcc/testsuite/consistency.vlad/layout/size-size.c
  62f94f0b98c5644b785f0a3ef9fb510b  gcc/testsuite/consistency.vlad/layout/size-wchar.c
  e00f32bee5283dd1db1d23df96944f2b  gcc/testsuite/consistency.vlad/vlad.exp
! dbd290584645a68caf67533164f40a59  gcc/testsuite/g++.dg/README
  79010a48f38b85833609624938452bc3  gcc/testsuite/g++.dg/abi/bitfield1.C
  9966069a163a3254b4d24ab2f38965c2  gcc/testsuite/g++.dg/abi/bitfield10.C
  e5e5ef8164ac7b43c7f20df7cfcd9b99  gcc/testsuite/g++.dg/abi/bitfield11.C
  3fd7e30befde66c7c5adb5b41e25923e  gcc/testsuite/g++.dg/abi/bitfield12.C
  173225a0187e4ebc6417355e8b87a8e9  gcc/testsuite/g++.dg/abi/bitfield2.C
! a2e12f1ac430fc553af29c4965394b45  gcc/testsuite/g++.dg/abi/bitfield3.C
  dbbdadc036ae50f91f29a85a9c43c584  gcc/testsuite/g++.dg/abi/bitfield4.C
! ca575dce5a5f32862c5dca28999c6f0a  gcc/testsuite/g++.dg/abi/bitfield5.C
  9c87e70c80da00c75493118cabefc7f7  gcc/testsuite/g++.dg/abi/bitfield6.C
  52af9e2f39dba23a45c367738de05a69  gcc/testsuite/g++.dg/abi/bitfield7.C
! 4d84fb0471d5dd6dae246544fa4e3f3c  gcc/testsuite/g++.dg/abi/bitfield8.C
  076024f0afaf3420463a8c8edf49ff06  gcc/testsuite/g++.dg/abi/bitfield9.C
  b587f170bbc6f95ef287e408bcafe1e3  gcc/testsuite/g++.dg/abi/cookie1.C
  3bd4bb420676c4310003c9fffe83abe9  gcc/testsuite/g++.dg/abi/cookie2.C
  16ddae14467c12ed70e65f2952905e5a  gcc/testsuite/g++.dg/abi/covariant1.C
  48d3c45fdd21d2b770ede675e1504c06  gcc/testsuite/g++.dg/abi/covariant2.C
  836325701db2acafab5dfd4a8eea9e11  gcc/testsuite/g++.dg/abi/covariant3.C
  5160def446afcb02d8ffb4cc4e8b5269  gcc/testsuite/g++.dg/abi/dcast1.C
! 8e060720c0bf4abfcefeac7058d3c704  gcc/testsuite/g++.dg/abi/dtor1.C
  a52edd14facd7ba603f78fb8bad62852  gcc/testsuite/g++.dg/abi/dtor2.C
! 1926374b0fdd1ef47db16567d0c94278  gcc/testsuite/g++.dg/abi/empty10.C
  5ce11bfa25802ab713c346269c112592  gcc/testsuite/g++.dg/abi/empty11.C
  47c3d191ca7e599a86988d8cfdf3dfce  gcc/testsuite/g++.dg/abi/empty4.C
  b3ca6b59f60c246ebf1e969e6120765f  gcc/testsuite/g++.dg/abi/empty5.C
! b37ae03d4cdad854f6cf96094bcd08f3  gcc/testsuite/g++.dg/abi/empty6.C
! 57362da16c8a5bbc2d2e63b7f562bfd1  gcc/testsuite/g++.dg/abi/empty7.C
  c5566cc05c36a22382128eb694f66bc5  gcc/testsuite/g++.dg/abi/empty8.C
! 665ad08b119340548a05859ad72fa40d  gcc/testsuite/g++.dg/abi/empty9.C
  7cbe4b1023b73117f1fca798569bc98d  gcc/testsuite/g++.dg/abi/enum1.C
  44d0f298ab4a8fb8dcb8f4930bac5fd0  gcc/testsuite/g++.dg/abi/layout1.C
  629ced02f7a4d9d57a9b120d8c7bbbde  gcc/testsuite/g++.dg/abi/layout2.C
! 69d76cede2f7c09ab3e9907b8de5c449  gcc/testsuite/g++.dg/abi/layout3.C
! 50406f5c8523d11f251c7b6f0b8c994a  gcc/testsuite/g++.dg/abi/layout4.C
  47b1f29300530040f4c65e1acb36904a  gcc/testsuite/g++.dg/abi/macro0.C
  5a7979aab90c38484879bf5742d1bfae  gcc/testsuite/g++.dg/abi/macro1.C
  06f0193b05c4ae743af4e38aec8d1122  gcc/testsuite/g++.dg/abi/macro2.C
  2e043f4f1db73efd7ba04afe8375a72e  gcc/testsuite/g++.dg/abi/mangle1.C
  e284ef1906cd5f1de0a8f3009ac761ff  gcc/testsuite/g++.dg/abi/mangle10.C
! dac79101d9aa1e68aeb866ac30549eaa  gcc/testsuite/g++.dg/abi/mangle11.C
! 0d86948b34e65b9102d4232cdb50c870  gcc/testsuite/g++.dg/abi/mangle12.C
  bcf6566eabf2af39caacb3af143f90c8  gcc/testsuite/g++.dg/abi/mangle13.C
  bdf640f5fa1612382253ce52bcaa462e  gcc/testsuite/g++.dg/abi/mangle14.C
  8ffaa1b19590f5f7ddf6464b1d009a9c  gcc/testsuite/g++.dg/abi/mangle15.C
  d6cfcf12071b19ad5863b84ad45b916e  gcc/testsuite/g++.dg/abi/mangle16.C
! f355d3a51dd10ffae56f619758310517  gcc/testsuite/g++.dg/abi/mangle17.C
  bfbdcf19399c74a6691d65ef0ba49cd3  gcc/testsuite/g++.dg/abi/mangle18-1.C
  ed08764439318b92bcfc00c24907e5eb  gcc/testsuite/g++.dg/abi/mangle18-2.C
  c987443e1c703fb66f78ea2786ae4cd5  gcc/testsuite/g++.dg/abi/mangle19-1.C
  af9f8cddd1244dd9ba598cbf9f64adf5  gcc/testsuite/g++.dg/abi/mangle19-2.C
  2fe54fcb3681eed20518e8a88f7e3849  gcc/testsuite/g++.dg/abi/mangle2.C
  dc5e5444adf348136bebba2aeea75a56  gcc/testsuite/g++.dg/abi/mangle20-1.C
! 06b0fe012cb3e9ab429680385b4b184e  gcc/testsuite/g++.dg/abi/mangle20-2.C
  19d5bab4f182e97a38690a5ff4541700  gcc/testsuite/g++.dg/abi/mangle21.C
  7ea778117a3d82dba90f3647d292b1c5  gcc/testsuite/g++.dg/abi/mangle3.C
  200f21813a4ee7cb051aaf6d88d18b5b  gcc/testsuite/g++.dg/abi/mangle4.C
  8d713f873b380f7cb5bf13fe8019b486  gcc/testsuite/g++.dg/abi/mangle5.C
! 56c28cb9d75f4d0d464cec2aca8b0050  gcc/testsuite/g++.dg/abi/mangle6.C
  3ca84e7c044b9a2c08f1b773db1d5f4f  gcc/testsuite/g++.dg/abi/mangle7.C
  cc6afae4c242d6e5a9083cec1a9a9907  gcc/testsuite/g++.dg/abi/mangle8.C
  7e14b0353ae53e5a5a8bcf850c4fcbc9  gcc/testsuite/g++.dg/abi/mangle9.C
  147dbc2e0bd1c6cde81aa6f1bd8c26ec  gcc/testsuite/g++.dg/abi/offsetof.C
  a6094bf319c105760bebe41768865b66  gcc/testsuite/g++.dg/abi/param1.C
  d90943e976dded1f4182aeb500d1f2c7  gcc/testsuite/g++.dg/abi/rtti1.C
  8deae0db66776c34c77f2551c9679b7c  gcc/testsuite/g++.dg/abi/rtti2.C
  51349b3acb94d1dc1909aec6ba384dae  gcc/testsuite/g++.dg/abi/structret1.C
! 20bb5d69b9db14a71eaf281f5b69cec2  gcc/testsuite/g++.dg/abi/thunk1.C
! e2734992f281b4dd0766482b1728e806  gcc/testsuite/g++.dg/abi/thunk2.C
! e1068600a27bf070080d4a3fb489ce21  gcc/testsuite/g++.dg/abi/vague1.C
  6b15aad70c63bb9bebfefe5096394d41  gcc/testsuite/g++.dg/abi/vbase1.C
! 8540767c92155f695a8fa9ca0cd1cc03  gcc/testsuite/g++.dg/abi/vbase10.C
! 43f95189f1ffa3e030e8a3b49814b424  gcc/testsuite/g++.dg/abi/vbase11.C
  90c43a38beef1adc9c358d0c1f470c6f  gcc/testsuite/g++.dg/abi/vbase12.C
  2c858a9c525d6228c68ebd9b6adc4724  gcc/testsuite/g++.dg/abi/vbase13.C
  530a9c9d639369e0e074a2ac0f3f8e59  gcc/testsuite/g++.dg/abi/vbase14.C
--- 8005,8093 ----
  c40026a0e7923e5119a1e8c890b403ac  gcc/testsuite/consistency.vlad/layout/size-size.c
  62f94f0b98c5644b785f0a3ef9fb510b  gcc/testsuite/consistency.vlad/layout/size-wchar.c
  e00f32bee5283dd1db1d23df96944f2b  gcc/testsuite/consistency.vlad/vlad.exp
! b87b115761d6eee98d4c2e225a2cbf3a  gcc/testsuite/g++.dg/README
! c7c251f16058a4d4f1db8e0df28385ff  gcc/testsuite/g++.dg/abi/align1.C
! 7f27f1e236616eb8595c717e087b1159  gcc/testsuite/g++.dg/abi/arm_cxa_vec1.C
! 1f9e050ee7f8c952e5a9e739fdf898c6  gcc/testsuite/g++.dg/abi/arm_rtti1.C
  79010a48f38b85833609624938452bc3  gcc/testsuite/g++.dg/abi/bitfield1.C
  9966069a163a3254b4d24ab2f38965c2  gcc/testsuite/g++.dg/abi/bitfield10.C
  e5e5ef8164ac7b43c7f20df7cfcd9b99  gcc/testsuite/g++.dg/abi/bitfield11.C
  3fd7e30befde66c7c5adb5b41e25923e  gcc/testsuite/g++.dg/abi/bitfield12.C
  173225a0187e4ebc6417355e8b87a8e9  gcc/testsuite/g++.dg/abi/bitfield2.C
! 95ebb8605baee8855cc6df12971992ed  gcc/testsuite/g++.dg/abi/bitfield3.C
  dbbdadc036ae50f91f29a85a9c43c584  gcc/testsuite/g++.dg/abi/bitfield4.C
! 7a715981fdef3b0ea85d77633f3443e9  gcc/testsuite/g++.dg/abi/bitfield5.C
  9c87e70c80da00c75493118cabefc7f7  gcc/testsuite/g++.dg/abi/bitfield6.C
  52af9e2f39dba23a45c367738de05a69  gcc/testsuite/g++.dg/abi/bitfield7.C
! 6ea4fffa5d155f3f76f7a828f13f4039  gcc/testsuite/g++.dg/abi/bitfield8.C
  076024f0afaf3420463a8c8edf49ff06  gcc/testsuite/g++.dg/abi/bitfield9.C
  b587f170bbc6f95ef287e408bcafe1e3  gcc/testsuite/g++.dg/abi/cookie1.C
  3bd4bb420676c4310003c9fffe83abe9  gcc/testsuite/g++.dg/abi/cookie2.C
  16ddae14467c12ed70e65f2952905e5a  gcc/testsuite/g++.dg/abi/covariant1.C
  48d3c45fdd21d2b770ede675e1504c06  gcc/testsuite/g++.dg/abi/covariant2.C
  836325701db2acafab5dfd4a8eea9e11  gcc/testsuite/g++.dg/abi/covariant3.C
+ a65da95a628d80d93aad25db51b4e19c  gcc/testsuite/g++.dg/abi/covariant4.C
  5160def446afcb02d8ffb4cc4e8b5269  gcc/testsuite/g++.dg/abi/dcast1.C
! 59b92433bd8b3d92f53638b25487e895  gcc/testsuite/g++.dg/abi/dtor1.C
  a52edd14facd7ba603f78fb8bad62852  gcc/testsuite/g++.dg/abi/dtor2.C
! bdfcee26ea13727b4fd9518694da0d57  gcc/testsuite/g++.dg/abi/empty10.C
  5ce11bfa25802ab713c346269c112592  gcc/testsuite/g++.dg/abi/empty11.C
  47c3d191ca7e599a86988d8cfdf3dfce  gcc/testsuite/g++.dg/abi/empty4.C
  b3ca6b59f60c246ebf1e969e6120765f  gcc/testsuite/g++.dg/abi/empty5.C
! 3e17773989628780c2b9f813f8a4ccba  gcc/testsuite/g++.dg/abi/empty6.C
! 62e722bc901721474542f63d88b4b2e8  gcc/testsuite/g++.dg/abi/empty7.C
  c5566cc05c36a22382128eb694f66bc5  gcc/testsuite/g++.dg/abi/empty8.C
! e200412d6a504ac7ffa6050561982de3  gcc/testsuite/g++.dg/abi/empty9.C
  7cbe4b1023b73117f1fca798569bc98d  gcc/testsuite/g++.dg/abi/enum1.C
+ 111786b8402b8dd840adfb9a53cf3aac  gcc/testsuite/g++.dg/abi/inline1.C
+ a128b5b94590dd451ff32844c5adb5e7  gcc/testsuite/g++.dg/abi/key1.C
  44d0f298ab4a8fb8dcb8f4930bac5fd0  gcc/testsuite/g++.dg/abi/layout1.C
  629ced02f7a4d9d57a9b120d8c7bbbde  gcc/testsuite/g++.dg/abi/layout2.C
! a806fb4b648827c007cd941700a51121  gcc/testsuite/g++.dg/abi/layout3.C
! ef06a1d881ee78fbb13fc891d175f8c7  gcc/testsuite/g++.dg/abi/layout4.C
! 1b56fef803fe85ec97121919ad3ba2b9  gcc/testsuite/g++.dg/abi/local1-a.cc
! 4ab5160617737559c38e1ffb650b797e  gcc/testsuite/g++.dg/abi/local1.C
  47b1f29300530040f4c65e1acb36904a  gcc/testsuite/g++.dg/abi/macro0.C
  5a7979aab90c38484879bf5742d1bfae  gcc/testsuite/g++.dg/abi/macro1.C
  06f0193b05c4ae743af4e38aec8d1122  gcc/testsuite/g++.dg/abi/macro2.C
  2e043f4f1db73efd7ba04afe8375a72e  gcc/testsuite/g++.dg/abi/mangle1.C
  e284ef1906cd5f1de0a8f3009ac761ff  gcc/testsuite/g++.dg/abi/mangle10.C
! b607e2ace0fdeea670b56e751bc27f27  gcc/testsuite/g++.dg/abi/mangle11.C
! 3de3f384e3accaeb680f27697b03affd  gcc/testsuite/g++.dg/abi/mangle12.C
  bcf6566eabf2af39caacb3af143f90c8  gcc/testsuite/g++.dg/abi/mangle13.C
  bdf640f5fa1612382253ce52bcaa462e  gcc/testsuite/g++.dg/abi/mangle14.C
  8ffaa1b19590f5f7ddf6464b1d009a9c  gcc/testsuite/g++.dg/abi/mangle15.C
  d6cfcf12071b19ad5863b84ad45b916e  gcc/testsuite/g++.dg/abi/mangle16.C
! f713d612b449a8bc202244d8b38880bb  gcc/testsuite/g++.dg/abi/mangle17.C
  bfbdcf19399c74a6691d65ef0ba49cd3  gcc/testsuite/g++.dg/abi/mangle18-1.C
  ed08764439318b92bcfc00c24907e5eb  gcc/testsuite/g++.dg/abi/mangle18-2.C
  c987443e1c703fb66f78ea2786ae4cd5  gcc/testsuite/g++.dg/abi/mangle19-1.C
  af9f8cddd1244dd9ba598cbf9f64adf5  gcc/testsuite/g++.dg/abi/mangle19-2.C
  2fe54fcb3681eed20518e8a88f7e3849  gcc/testsuite/g++.dg/abi/mangle2.C
  dc5e5444adf348136bebba2aeea75a56  gcc/testsuite/g++.dg/abi/mangle20-1.C
! 58664c1f709ce0a53e36f82e21474535  gcc/testsuite/g++.dg/abi/mangle20-2.C
  19d5bab4f182e97a38690a5ff4541700  gcc/testsuite/g++.dg/abi/mangle21.C
+ f27a51ea9de5c032fc80016778dbe5ec  gcc/testsuite/g++.dg/abi/mangle22.C
+ ae32a28f733f8cea6995e7bf6120d7ce  gcc/testsuite/g++.dg/abi/mangle23.C
  7ea778117a3d82dba90f3647d292b1c5  gcc/testsuite/g++.dg/abi/mangle3.C
  200f21813a4ee7cb051aaf6d88d18b5b  gcc/testsuite/g++.dg/abi/mangle4.C
  8d713f873b380f7cb5bf13fe8019b486  gcc/testsuite/g++.dg/abi/mangle5.C
! 91c28df1b9796be812f1b833d650c6b1  gcc/testsuite/g++.dg/abi/mangle6.C
  3ca84e7c044b9a2c08f1b773db1d5f4f  gcc/testsuite/g++.dg/abi/mangle7.C
  cc6afae4c242d6e5a9083cec1a9a9907  gcc/testsuite/g++.dg/abi/mangle8.C
  7e14b0353ae53e5a5a8bcf850c4fcbc9  gcc/testsuite/g++.dg/abi/mangle9.C
  147dbc2e0bd1c6cde81aa6f1bd8c26ec  gcc/testsuite/g++.dg/abi/offsetof.C
  a6094bf319c105760bebe41768865b66  gcc/testsuite/g++.dg/abi/param1.C
+ afc405c144dbb0308035897270d134fe  gcc/testsuite/g++.dg/abi/param2.C
  d90943e976dded1f4182aeb500d1f2c7  gcc/testsuite/g++.dg/abi/rtti1.C
  8deae0db66776c34c77f2551c9679b7c  gcc/testsuite/g++.dg/abi/rtti2.C
  51349b3acb94d1dc1909aec6ba384dae  gcc/testsuite/g++.dg/abi/structret1.C
! 2d7c32bff9d81432fde2ef3e662b4beb  gcc/testsuite/g++.dg/abi/thunk1.C
! 625a57a394193cf1df258188df3ed44a  gcc/testsuite/g++.dg/abi/thunk2.C
! 9266f22cfbaad15702320f26c3b6c146  gcc/testsuite/g++.dg/abi/vague1.C
  6b15aad70c63bb9bebfefe5096394d41  gcc/testsuite/g++.dg/abi/vbase1.C
! e36a8fd36846ca34b500150cfaf2d8fa  gcc/testsuite/g++.dg/abi/vbase10.C
! aae82b06e783f239c070fd6b34d818d4  gcc/testsuite/g++.dg/abi/vbase11.C
  90c43a38beef1adc9c358d0c1f470c6f  gcc/testsuite/g++.dg/abi/vbase12.C
  2c858a9c525d6228c68ebd9b6adc4724  gcc/testsuite/g++.dg/abi/vbase13.C
  530a9c9d639369e0e074a2ac0f3f8e59  gcc/testsuite/g++.dg/abi/vbase14.C
*************** cf73a61c2f7a372a6e32d4bbc343cd44  gcc/te
*** 7818,7828 ****
  aa7850bb832428b452c702abac4c2357  gcc/testsuite/g++.dg/abi/vbase9.C
  c88701df415b47ac9bf5cba84cf379ab  gcc/testsuite/g++.dg/abi/vcall1.C
  5acd6755c279afd8abbf0ca970932bf8  gcc/testsuite/g++.dg/abi/vthunk1.C
! 435453b2204b02f37e70cc929228a5e0  gcc/testsuite/g++.dg/abi/vthunk2.C
! 564fbcae5444d616ca891deab29d2f82  gcc/testsuite/g++.dg/abi/vthunk3.C
  59cdef1c2f5ac26231205b723cb9ea52  gcc/testsuite/g++.dg/abi/vtt1.C
! d9e116d4cb79f644c1df8c3c594897a8  gcc/testsuite/g++.dg/bprob/bprob.exp
  232269dc2a9b913c19e49f1e7a29bf08  gcc/testsuite/g++.dg/bprob/g++-bprob-1.C
  dbea3647effe634bcbcb88089a4a098e  gcc/testsuite/g++.dg/compat/abi/bitfield1.h
  65383cc7344893bdc19883ef6671ce90  gcc/testsuite/g++.dg/compat/abi/bitfield1_main.C
  10bb295f7a9df0b2649e585dcbf899a1  gcc/testsuite/g++.dg/compat/abi/bitfield1_x.C
--- 8098,8121 ----
  aa7850bb832428b452c702abac4c2357  gcc/testsuite/g++.dg/abi/vbase9.C
  c88701df415b47ac9bf5cba84cf379ab  gcc/testsuite/g++.dg/abi/vcall1.C
  5acd6755c279afd8abbf0ca970932bf8  gcc/testsuite/g++.dg/abi/vthunk1.C
! 3b0151845eebe63464fee62c4e406da4  gcc/testsuite/g++.dg/abi/vthunk2.C
! 40aba54a2bc68361721b0255427e2d31  gcc/testsuite/g++.dg/abi/vthunk3.C
  59cdef1c2f5ac26231205b723cb9ea52  gcc/testsuite/g++.dg/abi/vtt1.C
! e359f8dc361a36c3aacfa8533fe72fa8  gcc/testsuite/g++.dg/bprob/bprob.exp
  232269dc2a9b913c19e49f1e7a29bf08  gcc/testsuite/g++.dg/bprob/g++-bprob-1.C
+ 5d6eb1269c8738b70f3d15b9a148001f  gcc/testsuite/g++.dg/charset/asm1.c
+ c277dfaaf369abc23e9a10195435da17  gcc/testsuite/g++.dg/charset/asm2.c
+ bd34927c7e8ef0637a91744aa30c8e22  gcc/testsuite/g++.dg/charset/asm3.c
+ 95c9ba623a35c6483572e167a551f474  gcc/testsuite/g++.dg/charset/asm4.c
+ 13aa9df754ce327f35901d755310d167  gcc/testsuite/g++.dg/charset/asm5.c
+ 188e64ef71cd1832cf590f89eb899d5b  gcc/testsuite/g++.dg/charset/attribute1.c
+ c010406f76696ea1f21a7a904e9bf74d  gcc/testsuite/g++.dg/charset/attribute2.c
+ f0a8c8ffe793df7bb2808e995bc5cedf  gcc/testsuite/g++.dg/charset/charset.exp
+ c3f1b1efe5249f47d609a5022d321c0a  gcc/testsuite/g++.dg/charset/extern1.cc
+ 68ad1f3d1f8cb2517c260ad8c5a4e992  gcc/testsuite/g++.dg/charset/extern2.cc
+ 8c029ca8175e4d8995ea0dbac6040733  gcc/testsuite/g++.dg/charset/extern3.cc
+ 5314225894f8ef8a8d8249f4a0973380  gcc/testsuite/g++.dg/charset/function.cc
+ a59f9cb8c1327a655a207f133f19d6fb  gcc/testsuite/g++.dg/charset/string.c
  dbea3647effe634bcbcb88089a4a098e  gcc/testsuite/g++.dg/compat/abi/bitfield1.h
  65383cc7344893bdc19883ef6671ce90  gcc/testsuite/g++.dg/compat/abi/bitfield1_main.C
  10bb295f7a9df0b2649e585dcbf899a1  gcc/testsuite/g++.dg/compat/abi/bitfield1_x.C
*************** d9e96ae25c2319373bcfd08d3028762f  gcc/te
*** 7868,7874 ****
  c066ba2e23a50eda1497704cad37719c  gcc/testsuite/g++.dg/compat/break/vbase11_main.C
  cc9fd160c8ac0d554f08ed78757c1ad7  gcc/testsuite/g++.dg/compat/break/vbase11_x.C
  3af15235a86640de95ef01c264b9a669  gcc/testsuite/g++.dg/compat/break/vbase11_y.C
! 311f0692768f1e2b708f2d6c094bb325  gcc/testsuite/g++.dg/compat/compat.exp
  a6ee60e2015da31ed1aa06aae1c48e97  gcc/testsuite/g++.dg/compat/eh/ctor1.h
  74d8ae87a4aa4945c36db0894fcdbc87  gcc/testsuite/g++.dg/compat/eh/ctor1_main.C
  5919ecfa4fa000ff8d0708eff1caafd0  gcc/testsuite/g++.dg/compat/eh/ctor1_x.C
--- 8161,8167 ----
  c066ba2e23a50eda1497704cad37719c  gcc/testsuite/g++.dg/compat/break/vbase11_main.C
  cc9fd160c8ac0d554f08ed78757c1ad7  gcc/testsuite/g++.dg/compat/break/vbase11_x.C
  3af15235a86640de95ef01c264b9a669  gcc/testsuite/g++.dg/compat/break/vbase11_y.C
! 6c3e03d101b9b585138330d40e3da3b3  gcc/testsuite/g++.dg/compat/compat.exp
  a6ee60e2015da31ed1aa06aae1c48e97  gcc/testsuite/g++.dg/compat/eh/ctor1.h
  74d8ae87a4aa4945c36db0894fcdbc87  gcc/testsuite/g++.dg/compat/eh/ctor1_main.C
  5919ecfa4fa000ff8d0708eff1caafd0  gcc/testsuite/g++.dg/compat/eh/ctor1_x.C
*************** afd58e33c0f82e6f79a20b57f3d3d543  gcc/te
*** 7924,7938 ****
  7099b2ccdbe9faffb91a1279b3d9c958  gcc/testsuite/g++.dg/compat/init/init-ref2_main.C
  6599bf4c55d10d3d74d35fd52dc68f6c  gcc/testsuite/g++.dg/compat/init/init-ref2_x.C
  75bddd0f3c0ceb101b0c3111cedc4fb4  gcc/testsuite/g++.dg/compat/init/init-ref2_y.C
  3a1a08be0e7ef48d24c3effabe0bc96f  gcc/testsuite/g++.dg/conversion/cond1.C
  e588675f14c4bd6919f2de257b165dee  gcc/testsuite/g++.dg/conversion/cond2.C
  da146cc2c8fcbbcd080e02f0e3f733df  gcc/testsuite/g++.dg/conversion/cond3.C
  7a1a3b98a22e73124c10abe63b9e58eb  gcc/testsuite/g++.dg/conversion/cond6.C
  b0e427443037919ee45a88d886f4f4f9  gcc/testsuite/g++.dg/conversion/const1.C
  6c0d033c15abd71959655beebc0c3522  gcc/testsuite/g++.dg/conversion/op1.C
  3691f2fae514386b7e94bd8db99acd68  gcc/testsuite/g++.dg/conversion/op2.C
  23830a13c326c99bae67e56e30ebc0b4  gcc/testsuite/g++.dg/conversion/ptrmem1.C
! 255bd83d9108229b7e76ff4fe2838a04  gcc/testsuite/g++.dg/conversion/reinterpret1.C
  a3a3822acc6c0ae0b1c800209c7c3369  gcc/testsuite/g++.dg/conversion/to-virtual-base-1.C
  8ce78309bd631829da82f2798d24d628  gcc/testsuite/g++.dg/cpp/c++98-pedantic.C
  731959b0908b124d4eee4dab104d68bb  gcc/testsuite/g++.dg/cpp/c++98.C
--- 8217,8240 ----
  7099b2ccdbe9faffb91a1279b3d9c958  gcc/testsuite/g++.dg/compat/init/init-ref2_main.C
  6599bf4c55d10d3d74d35fd52dc68f6c  gcc/testsuite/g++.dg/compat/init/init-ref2_x.C
  75bddd0f3c0ceb101b0c3111cedc4fb4  gcc/testsuite/g++.dg/compat/init/init-ref2_y.C
+ 3cd5d1f28d7b9a35f56b0468e798225e  gcc/testsuite/g++.dg/conversion/ambig1.C
+ 8fd4aac31847c0c9e16276ac87169301  gcc/testsuite/g++.dg/conversion/cast1.C
  3a1a08be0e7ef48d24c3effabe0bc96f  gcc/testsuite/g++.dg/conversion/cond1.C
  e588675f14c4bd6919f2de257b165dee  gcc/testsuite/g++.dg/conversion/cond2.C
  da146cc2c8fcbbcd080e02f0e3f733df  gcc/testsuite/g++.dg/conversion/cond3.C
  7a1a3b98a22e73124c10abe63b9e58eb  gcc/testsuite/g++.dg/conversion/cond6.C
  b0e427443037919ee45a88d886f4f4f9  gcc/testsuite/g++.dg/conversion/const1.C
+ cd42b5b37923de04f2f1d946dfbd433c  gcc/testsuite/g++.dg/conversion/const2.C
+ 8dae0b4264c4a22a22f3c8abe5fbdf3b  gcc/testsuite/g++.dg/conversion/const3.C
+ 424f02c389b9f1fb60fa25d7cda32717  gcc/testsuite/g++.dg/conversion/dr195-1.C
+ b5c8d73c9f293b1ef3d1337e108f27fd  gcc/testsuite/g++.dg/conversion/dr195.C
  6c0d033c15abd71959655beebc0c3522  gcc/testsuite/g++.dg/conversion/op1.C
  3691f2fae514386b7e94bd8db99acd68  gcc/testsuite/g++.dg/conversion/op2.C
  23830a13c326c99bae67e56e30ebc0b4  gcc/testsuite/g++.dg/conversion/ptrmem1.C
! 6e5e81ebfb94f64d88135e578c526065  gcc/testsuite/g++.dg/conversion/reinterpret1.C
! da446c68ad3e26a27f1f02cfb80bb439  gcc/testsuite/g++.dg/conversion/reinterpret2.C
! d4e80e3dcc4416f9be4b4b9e390904bd  gcc/testsuite/g++.dg/conversion/reinterpret3.C
! 157823658a904b6f323a38b8b06a2cac  gcc/testsuite/g++.dg/conversion/simd1.C
  a3a3822acc6c0ae0b1c800209c7c3369  gcc/testsuite/g++.dg/conversion/to-virtual-base-1.C
  8ce78309bd631829da82f2798d24d628  gcc/testsuite/g++.dg/cpp/c++98-pedantic.C
  731959b0908b124d4eee4dab104d68bb  gcc/testsuite/g++.dg/cpp/c++98.C
*************** a3a3822acc6c0ae0b1c800209c7c3369  gcc/te
*** 7941,7946 ****
--- 8243,8249 ----
  d80eeb1b5ab70a413bed1a37f44a69d6  gcc/testsuite/g++.dg/cpp/truefalse.C
  e71a3440857a0df24410cbe91e45c678  gcc/testsuite/g++.dg/debug/anonunion1.C
  e4aee91d21a8cdbd286094f893319c70  gcc/testsuite/g++.dg/debug/const1.C
+ 2e4398a10938bba8e5fd13cd2d12e691  gcc/testsuite/g++.dg/debug/const2.C
  36f088b22dca6ab78668e7d505839fbd  gcc/testsuite/g++.dg/debug/crash1.C
  b355421542165951e4b0a59d2c644581  gcc/testsuite/g++.dg/debug/debug.exp
  2b6f3bdb657c8865549db08f96a15223  gcc/testsuite/g++.dg/debug/debug1.C
*************** aae7d3d75005a60ab912ae1b3feefdd9  gcc/te
*** 7952,7979 ****
  7981ed7658c588372c1da7bb75ab3d00  gcc/testsuite/g++.dg/debug/debug7.C
  f3e5e740f9e7210ccece705c6d548267  gcc/testsuite/g++.dg/debug/debug8.C
  475a95279bcd0b4ccd6e118ead65e106  gcc/testsuite/g++.dg/debug/minimal1.C
  7e13d86d33b17cfb7cdf61b7b8cca961  gcc/testsuite/g++.dg/debug/template1.C
  f50cc26d9a41a3cc4afb62032326372f  gcc/testsuite/g++.dg/debug/trivial.C
  863c8434199f0ac4d3a2d8d915bd5d1a  gcc/testsuite/g++.dg/debug/typedef1.C
! a35ccb07266692591a20b6d73ff358cb  gcc/testsuite/g++.dg/dg.exp
  9c84af759e7a0280e3b2d6a8cc5f8716  gcc/testsuite/g++.dg/eh/cleanup1.C
  39018f18e1fc86801376affc388c0539  gcc/testsuite/g++.dg/eh/cleanup2.C
  bd6bd3cc57144658b6137dc9123743ed  gcc/testsuite/g++.dg/eh/cond1.C
  9218246502a1a48c13f74d67b4b19c2d  gcc/testsuite/g++.dg/eh/cond2.C
  43098e3dd291c59e61245771f6e306d0  gcc/testsuite/g++.dg/eh/crash1.C
  365a9a74302377cb0e82e7f5f1a7bca9  gcc/testsuite/g++.dg/eh/crossjump1.C
  86be24a4005519ed1d807d772b94a617  gcc/testsuite/g++.dg/eh/ctor1.C
  1ca64f6d54bb332c6c32d876edf896c0  gcc/testsuite/g++.dg/eh/ctor2.C
  e917a91ae5be207defc427d0a079f7e9  gcc/testsuite/g++.dg/eh/dead1.C
  6d24a241b37d9461b161f8ce01317ab8  gcc/testsuite/g++.dg/eh/delayslot1.C
  1521a64435be961406151b3df9665c39  gcc/testsuite/g++.dg/eh/dtor1.C
  946e2e4e3fafd42b9f9d9e2594d511ac  gcc/testsuite/g++.dg/eh/dtor2.C
  c6ed6afa9f180a60e542789d58e23a4a  gcc/testsuite/g++.dg/eh/filter1.C
  12090d44df12e33d62fc4a9cf4bcd257  gcc/testsuite/g++.dg/eh/filter2.C
  055728c208a514b55ad1bc00856f6462  gcc/testsuite/g++.dg/eh/forced1.C
  a83ae49407ff7c3467b446d0472cf725  gcc/testsuite/g++.dg/eh/forced2.C
  4a0fe365b88b58b582b1d5fa8ecb0658  gcc/testsuite/g++.dg/eh/forced3.C
  77c2356058f632113452cfb64259952f  gcc/testsuite/g++.dg/eh/forced4.C
  83a9a4f114479e6635dd508a4994d73d  gcc/testsuite/g++.dg/eh/ia64-1.C
  8c375c2c927706fd09f5bb467654b648  gcc/testsuite/g++.dg/eh/loop1.C
  741a6b9a2519e96d9a6a3d7503d9cdfa  gcc/testsuite/g++.dg/eh/loop2.C
--- 8255,8295 ----
  7981ed7658c588372c1da7bb75ab3d00  gcc/testsuite/g++.dg/debug/debug7.C
  f3e5e740f9e7210ccece705c6d548267  gcc/testsuite/g++.dg/debug/debug8.C
  475a95279bcd0b4ccd6e118ead65e106  gcc/testsuite/g++.dg/debug/minimal1.C
+ 3664359ae921fdc20049297556d46cf2  gcc/testsuite/g++.dg/debug/namespace1.C
+ fcdc9d29f34ff56d1b7de0d55a1eaed7  gcc/testsuite/g++.dg/debug/pr15736.cc
  7e13d86d33b17cfb7cdf61b7b8cca961  gcc/testsuite/g++.dg/debug/template1.C
  f50cc26d9a41a3cc4afb62032326372f  gcc/testsuite/g++.dg/debug/trivial.C
  863c8434199f0ac4d3a2d8d915bd5d1a  gcc/testsuite/g++.dg/debug/typedef1.C
! 798848d35df1829cb7c468058c887871  gcc/testsuite/g++.dg/debug/typedef2.C
! de7626032b99ed0b36b4dc7fb3f18f9d  gcc/testsuite/g++.dg/debug/typedef3.C
! 261cdcb5a7c5cf143b8af9beb8258ebc  gcc/testsuite/g++.dg/debug/using1.C
! 3593446699a89b40a6e56ed843e4b4fa  gcc/testsuite/g++.dg/dg.exp
! c9b9c986ccf06431bb8cd55406c9555e  gcc/testsuite/g++.dg/eh/check-vect.h
  9c84af759e7a0280e3b2d6a8cc5f8716  gcc/testsuite/g++.dg/eh/cleanup1.C
  39018f18e1fc86801376affc388c0539  gcc/testsuite/g++.dg/eh/cleanup2.C
+ a779539302385f915a13ecb1283ac58c  gcc/testsuite/g++.dg/eh/cleanup3.C
+ fdfb8828613e7c687d87d7facb0e2135  gcc/testsuite/g++.dg/eh/cleanup4.C
+ aa6038fb3f955b6019e1a056cca60f0c  gcc/testsuite/g++.dg/eh/cleanup5.C
  bd6bd3cc57144658b6137dc9123743ed  gcc/testsuite/g++.dg/eh/cond1.C
  9218246502a1a48c13f74d67b4b19c2d  gcc/testsuite/g++.dg/eh/cond2.C
  43098e3dd291c59e61245771f6e306d0  gcc/testsuite/g++.dg/eh/crash1.C
  365a9a74302377cb0e82e7f5f1a7bca9  gcc/testsuite/g++.dg/eh/crossjump1.C
  86be24a4005519ed1d807d772b94a617  gcc/testsuite/g++.dg/eh/ctor1.C
  1ca64f6d54bb332c6c32d876edf896c0  gcc/testsuite/g++.dg/eh/ctor2.C
+ 3b611e1c78c9e6e4a13c7c40be364f83  gcc/testsuite/g++.dg/eh/ctor3.C
  e917a91ae5be207defc427d0a079f7e9  gcc/testsuite/g++.dg/eh/dead1.C
  6d24a241b37d9461b161f8ce01317ab8  gcc/testsuite/g++.dg/eh/delayslot1.C
  1521a64435be961406151b3df9665c39  gcc/testsuite/g++.dg/eh/dtor1.C
  946e2e4e3fafd42b9f9d9e2594d511ac  gcc/testsuite/g++.dg/eh/dtor2.C
+ b0ccd0dda5f78bbdc113e7d64bcbde3c  gcc/testsuite/g++.dg/eh/elide1.C
+ cff2161ef40bce6a9bb0205f7ce68baa  gcc/testsuite/g++.dg/eh/elide2.C
  c6ed6afa9f180a60e542789d58e23a4a  gcc/testsuite/g++.dg/eh/filter1.C
  12090d44df12e33d62fc4a9cf4bcd257  gcc/testsuite/g++.dg/eh/filter2.C
  055728c208a514b55ad1bc00856f6462  gcc/testsuite/g++.dg/eh/forced1.C
  a83ae49407ff7c3467b446d0472cf725  gcc/testsuite/g++.dg/eh/forced2.C
  4a0fe365b88b58b582b1d5fa8ecb0658  gcc/testsuite/g++.dg/eh/forced3.C
  77c2356058f632113452cfb64259952f  gcc/testsuite/g++.dg/eh/forced4.C
+ fa7c4733d09d80ea62bb08bcfe896fbb  gcc/testsuite/g++.dg/eh/goto1.C
  83a9a4f114479e6635dd508a4994d73d  gcc/testsuite/g++.dg/eh/ia64-1.C
  8c375c2c927706fd09f5bb467654b648  gcc/testsuite/g++.dg/eh/loop1.C
  741a6b9a2519e96d9a6a3d7503d9cdfa  gcc/testsuite/g++.dg/eh/loop2.C
*************** a83ae49407ff7c3467b446d0472cf725  gcc/te
*** 7982,7989 ****
  a3ef7b048ad30f60338e027efe30c558  gcc/testsuite/g++.dg/eh/omit-frame-pointer.C
  fe8770e81b72d2e0721318ab79b0091e  gcc/testsuite/g++.dg/eh/omit-frame-pointer2.C
  a9ed8d0335c982c533cb9ab886ed3a49  gcc/testsuite/g++.dg/eh/registers1.C
! 096b598fb7ef22caf0e4f94c3f18cbe7  gcc/testsuite/g++.dg/eh/simd-1.C
! 74b2fa026b94b1f0965c4a7b015a0e51  gcc/testsuite/g++.dg/eh/simd-2.C
  82939fb6cdaf944681687fca28788638  gcc/testsuite/g++.dg/eh/spec1.C
  d6ea4980c486b9a221bda79100d54cda  gcc/testsuite/g++.dg/eh/spec2.C
  7823eff4e33eebdc8a1d73389e14e7a7  gcc/testsuite/g++.dg/eh/spec3.C
--- 8298,8307 ----
  a3ef7b048ad30f60338e027efe30c558  gcc/testsuite/g++.dg/eh/omit-frame-pointer.C
  fe8770e81b72d2e0721318ab79b0091e  gcc/testsuite/g++.dg/eh/omit-frame-pointer2.C
  a9ed8d0335c982c533cb9ab886ed3a49  gcc/testsuite/g++.dg/eh/registers1.C
! 10cee1522872b7a635448041c93abb77  gcc/testsuite/g++.dg/eh/scope1.C
! aedb51a1352090a92bc38eb90e5d6523  gcc/testsuite/g++.dg/eh/shadow1.C
! be01150610790792610d9ec525f2dbe7  gcc/testsuite/g++.dg/eh/simd-1.C
! 78003a1b461e9ba51c33e96458a535b2  gcc/testsuite/g++.dg/eh/simd-2.C
  82939fb6cdaf944681687fca28788638  gcc/testsuite/g++.dg/eh/spec1.C
  d6ea4980c486b9a221bda79100d54cda  gcc/testsuite/g++.dg/eh/spec2.C
  7823eff4e33eebdc8a1d73389e14e7a7  gcc/testsuite/g++.dg/eh/spec3.C
*************** f51a05dd556d82ff2c27ab64681114bb  gcc/te
*** 7996,8001 ****
--- 8314,8321 ----
  289f5219cda86f80dc763b7ad32f8ae8  gcc/testsuite/g++.dg/eh/template1.C
  919151216cf8524a1a108c5d27a7f3d1  gcc/testsuite/g++.dg/eh/template2.C
  7549d75346531f9c6ff9ee0763a142b5  gcc/testsuite/g++.dg/eh/throw1.C
+ 7f4aab5cdb2954060fab6ebdbf157a33  gcc/testsuite/g++.dg/eh/throw2.C
+ 940efa25b5802522d77e589e9f985f05  gcc/testsuite/g++.dg/eh/uncaught1.C
  1ff41980dd5d1398018fd0852361341a  gcc/testsuite/g++.dg/eh/unexpected1.C
  0dc4fbd38ff3711ae26b36fe29263254  gcc/testsuite/g++.dg/expr/anew1.C
  512fe3c85ae0df55630635c0bf5be678  gcc/testsuite/g++.dg/expr/anew2.C
*************** f51a05dd556d82ff2c27ab64681114bb  gcc/te
*** 8005,8033 ****
  ce7b6234ca0490c5f395644574322ca2  gcc/testsuite/g++.dg/expr/call1.C
  11d589082fe10f4614aafaae41200569  gcc/testsuite/g++.dg/expr/call2.C
  2ef606c671097dddd5d5000c30530ba5  gcc/testsuite/g++.dg/expr/cast1.C
  0bfd27616952c8ba004102d8eaa6d65c  gcc/testsuite/g++.dg/expr/comma1.C
  3c180246d5162c05266af924ad6ac090  gcc/testsuite/g++.dg/expr/cond1.C
  28f617222c58f6ad34e32a6d85cc0f03  gcc/testsuite/g++.dg/expr/cond2.C
  0ee447faae923ac2c95505c9d02aa9f9  gcc/testsuite/g++.dg/expr/cond3.C
  d30ef5af28e6363dab6713f12d513bc9  gcc/testsuite/g++.dg/expr/cond4.C
- 60150cc84636c0dd7ad8f3a97088e5dc  gcc/testsuite/g++.dg/expr/cond5.C
  ed6decf76edd58d64d114a4410682b2e  gcc/testsuite/g++.dg/expr/cond6.C
! 88ba11786d0ab44b95183e29de9c5d15  gcc/testsuite/g++.dg/expr/constcast1.C
  5943e958df776a88c39dc200ec5d291c  gcc/testsuite/g++.dg/expr/crash-1.C
  9a872a2bf8f1aed0022e0882d65f599b  gcc/testsuite/g++.dg/expr/dtor1.C
  111307fdacdc039c0f0f30a644b1949d  gcc/testsuite/g++.dg/expr/dtor2.C
  bf7f67a5fc1bd44b05d5e417998e5219  gcc/testsuite/g++.dg/expr/dtor3.C
! e5795a9bb970d3cad282c133ced2c9f7  gcc/testsuite/g++.dg/expr/enum1.C
  4d4bd4c17e114aaf9f89d2929fc74cfe  gcc/testsuite/g++.dg/expr/for1.C
  a7b2ff0b7e3eb33ae39f51b9c2436899  gcc/testsuite/g++.dg/expr/incomplete1.C
  e9c430238d4efd57c1f944c12443406d  gcc/testsuite/g++.dg/expr/lval1.C
  0b5e348c921017780a4e80249591b84c  gcc/testsuite/g++.dg/expr/member-of-incomplete-type-1.C
  bfc765717772e72dbe7c96b44e14a330  gcc/testsuite/g++.dg/expr/pmf-1.C
  d108472b30fd8a2ccb535bb57ff25d0a  gcc/testsuite/g++.dg/expr/ptrmem1.C
- f1336a44dcc19f308b149c5abdc729a5  gcc/testsuite/g++.dg/expr/ptrmem2.C
- 97e0986c878075f756c9e706c2a51c0f  gcc/testsuite/g++.dg/expr/ptrmem3.C
  00a3281a5c60b23cc64b650f1e1bc13e  gcc/testsuite/g++.dg/expr/ptrmem4.C
  874b09468973f06e0b8fc01585a95d04  gcc/testsuite/g++.dg/expr/ptrmem5.C
  0aff78a2cc7b554bd2a283f999880d26  gcc/testsuite/g++.dg/expr/sizeof1.C
  1714277b99f69dbeee24b2fdf5626d32  gcc/testsuite/g++.dg/expr/sizeof2.C
  b39edf0129c7b02d40dd1f8360666a7c  gcc/testsuite/g++.dg/expr/sizeof3.C
--- 8325,8358 ----
  ce7b6234ca0490c5f395644574322ca2  gcc/testsuite/g++.dg/expr/call1.C
  11d589082fe10f4614aafaae41200569  gcc/testsuite/g++.dg/expr/call2.C
  2ef606c671097dddd5d5000c30530ba5  gcc/testsuite/g++.dg/expr/cast1.C
+ dc26302260e3f7ff5825d907b882eae8  gcc/testsuite/g++.dg/expr/cast2.C
+ 43b3f0cf8dc0665f8a82af5379392da1  gcc/testsuite/g++.dg/expr/cast3.C
  0bfd27616952c8ba004102d8eaa6d65c  gcc/testsuite/g++.dg/expr/comma1.C
  3c180246d5162c05266af924ad6ac090  gcc/testsuite/g++.dg/expr/cond1.C
  28f617222c58f6ad34e32a6d85cc0f03  gcc/testsuite/g++.dg/expr/cond2.C
  0ee447faae923ac2c95505c9d02aa9f9  gcc/testsuite/g++.dg/expr/cond3.C
  d30ef5af28e6363dab6713f12d513bc9  gcc/testsuite/g++.dg/expr/cond4.C
  ed6decf76edd58d64d114a4410682b2e  gcc/testsuite/g++.dg/expr/cond6.C
! f30409fd40ff04e848318e2beb14a1c7  gcc/testsuite/g++.dg/expr/cond7.C
! 40c29dc173bf365777a7de4d0970b286  gcc/testsuite/g++.dg/expr/copy1.C
  5943e958df776a88c39dc200ec5d291c  gcc/testsuite/g++.dg/expr/crash-1.C
+ 4ddfe508094ae855749b3a8b63fd8063  gcc/testsuite/g++.dg/expr/crash2.C
  9a872a2bf8f1aed0022e0882d65f599b  gcc/testsuite/g++.dg/expr/dtor1.C
  111307fdacdc039c0f0f30a644b1949d  gcc/testsuite/g++.dg/expr/dtor2.C
  bf7f67a5fc1bd44b05d5e417998e5219  gcc/testsuite/g++.dg/expr/dtor3.C
! fd680877ab1cfa7b118501bb1e133e2a  gcc/testsuite/g++.dg/expr/enum1.C
  4d4bd4c17e114aaf9f89d2929fc74cfe  gcc/testsuite/g++.dg/expr/for1.C
+ cd7f4946b61f298e733a92601139e8ef  gcc/testsuite/g++.dg/expr/for2.C
  a7b2ff0b7e3eb33ae39f51b9c2436899  gcc/testsuite/g++.dg/expr/incomplete1.C
  e9c430238d4efd57c1f944c12443406d  gcc/testsuite/g++.dg/expr/lval1.C
+ 512351301e4c678c8c359d27dd7ef411  gcc/testsuite/g++.dg/expr/lval2.C
  0b5e348c921017780a4e80249591b84c  gcc/testsuite/g++.dg/expr/member-of-incomplete-type-1.C
  bfc765717772e72dbe7c96b44e14a330  gcc/testsuite/g++.dg/expr/pmf-1.C
+ e0ba8ce6144da0b9ed7164d2baac70c5  gcc/testsuite/g++.dg/expr/pr19355-1.C
  d108472b30fd8a2ccb535bb57ff25d0a  gcc/testsuite/g++.dg/expr/ptrmem1.C
  00a3281a5c60b23cc64b650f1e1bc13e  gcc/testsuite/g++.dg/expr/ptrmem4.C
  874b09468973f06e0b8fc01585a95d04  gcc/testsuite/g++.dg/expr/ptrmem5.C
+ cfe9ff3c65c17e6ab2653583e3fd9e3c  gcc/testsuite/g++.dg/expr/return1.C
  0aff78a2cc7b554bd2a283f999880d26  gcc/testsuite/g++.dg/expr/sizeof1.C
  1714277b99f69dbeee24b2fdf5626d32  gcc/testsuite/g++.dg/expr/sizeof2.C
  b39edf0129c7b02d40dd1f8360666a7c  gcc/testsuite/g++.dg/expr/sizeof3.C
*************** b39edf0129c7b02d40dd1f8360666a7c  gcc/te
*** 8036,8056 ****
  3b36b8a6d9fd7f85f03904e5ac4eedd9  gcc/testsuite/g++.dg/expr/static_cast3.C
  3768ee52241cd5c440a86d1ecde9f029  gcc/testsuite/g++.dg/expr/static_cast4.C
  10a6604802b4ce916144cdc9ac8a3fc0  gcc/testsuite/g++.dg/expr/static_cast5.C
  8086207ba3911ed58a971e642fbfdd29  gcc/testsuite/g++.dg/ext/align1.C
  ae6df71fd3bee2754f2c1b710ca23b88  gcc/testsuite/g++.dg/ext/alignof1.C
  65bf2e604cdc2a2c9b6f58de6d2d616e  gcc/testsuite/g++.dg/ext/altivec-1.C
  42fb531a004003016c1aca0a6443a54b  gcc/testsuite/g++.dg/ext/altivec-10.C
  75bf2a09f5b3e1c43f00fbcf3179abe0  gcc/testsuite/g++.dg/ext/altivec-11.C
  805c0700b5fbe5689bb7be8aab416572  gcc/testsuite/g++.dg/ext/altivec-12.C
  e25377e5529526585f4fbc3830fc39ae  gcc/testsuite/g++.dg/ext/altivec-2.C
! 3602d3ddba0b44b0744c1db666bc4cd4  gcc/testsuite/g++.dg/ext/altivec-3.C
  e9ec0f8ed2d0574477bf5e63ae0213d8  gcc/testsuite/g++.dg/ext/altivec-4.C
  b8df8e7ce65a7b1905e45eab8ff3fdf2  gcc/testsuite/g++.dg/ext/altivec-5.C
  f96062c15331eb56f64b4bb08dbcc342  gcc/testsuite/g++.dg/ext/altivec-6.C
  9a264a0d99cd5c082f4e39d27e30b50e  gcc/testsuite/g++.dg/ext/altivec-7.C
  8156893b84c131c8e169410a06601d59  gcc/testsuite/g++.dg/ext/altivec-8.C
  ac105bc15b415cbf8f2ff1637ca7285a  gcc/testsuite/g++.dg/ext/altivec-9.C
! d33c2bd806a4555ed6b53df9fad39724  gcc/testsuite/g++.dg/ext/altivec_check.h
  5080c1dcd67db52ba793867cc63ba3a3  gcc/testsuite/g++.dg/ext/anon-struct1.C
  0e1fc7f945fafc3c224a24b23c1c2a76  gcc/testsuite/g++.dg/ext/anon-struct2.C
  5f70b0d4a3b1e3b8a10d06d54d63f427  gcc/testsuite/g++.dg/ext/anon-struct3.C
--- 8361,8388 ----
  3b36b8a6d9fd7f85f03904e5ac4eedd9  gcc/testsuite/g++.dg/expr/static_cast3.C
  3768ee52241cd5c440a86d1ecde9f029  gcc/testsuite/g++.dg/expr/static_cast4.C
  10a6604802b4ce916144cdc9ac8a3fc0  gcc/testsuite/g++.dg/expr/static_cast5.C
+ 8f5d773ab2c0fb76d721a88e7936dd2a  gcc/testsuite/g++.dg/expr/unary1.C
+ 61339fcff4901b417b1fa8ede6e4a521  gcc/testsuite/g++.dg/expr/unary2.C
  8086207ba3911ed58a971e642fbfdd29  gcc/testsuite/g++.dg/ext/align1.C
  ae6df71fd3bee2754f2c1b710ca23b88  gcc/testsuite/g++.dg/ext/alignof1.C
  65bf2e604cdc2a2c9b6f58de6d2d616e  gcc/testsuite/g++.dg/ext/altivec-1.C
  42fb531a004003016c1aca0a6443a54b  gcc/testsuite/g++.dg/ext/altivec-10.C
  75bf2a09f5b3e1c43f00fbcf3179abe0  gcc/testsuite/g++.dg/ext/altivec-11.C
  805c0700b5fbe5689bb7be8aab416572  gcc/testsuite/g++.dg/ext/altivec-12.C
+ dd366517b66f6207dfc524367533e256  gcc/testsuite/g++.dg/ext/altivec-13.C
  e25377e5529526585f4fbc3830fc39ae  gcc/testsuite/g++.dg/ext/altivec-2.C
! bf089b23b8f68552510c7183f5b751b8  gcc/testsuite/g++.dg/ext/altivec-3.C
  e9ec0f8ed2d0574477bf5e63ae0213d8  gcc/testsuite/g++.dg/ext/altivec-4.C
  b8df8e7ce65a7b1905e45eab8ff3fdf2  gcc/testsuite/g++.dg/ext/altivec-5.C
  f96062c15331eb56f64b4bb08dbcc342  gcc/testsuite/g++.dg/ext/altivec-6.C
  9a264a0d99cd5c082f4e39d27e30b50e  gcc/testsuite/g++.dg/ext/altivec-7.C
  8156893b84c131c8e169410a06601d59  gcc/testsuite/g++.dg/ext/altivec-8.C
  ac105bc15b415cbf8f2ff1637ca7285a  gcc/testsuite/g++.dg/ext/altivec-9.C
! 02ead8fde475b9f468518b068375ef25  gcc/testsuite/g++.dg/ext/altivec-types-1.C
! 2fabd70465808dc383437811778591e1  gcc/testsuite/g++.dg/ext/altivec-types-2.C
! dbcc5463fa4853b6308b2bd65d6d1dfc  gcc/testsuite/g++.dg/ext/altivec-types-3.C
! 67cee80632c505cdb26ab7ae4f85d040  gcc/testsuite/g++.dg/ext/altivec-types-4.C
! 3b9f8b0d6e2bf9b736ca14856dccd24f  gcc/testsuite/g++.dg/ext/altivec_check.h
  5080c1dcd67db52ba793867cc63ba3a3  gcc/testsuite/g++.dg/ext/anon-struct1.C
  0e1fc7f945fafc3c224a24b23c1c2a76  gcc/testsuite/g++.dg/ext/anon-struct2.C
  5f70b0d4a3b1e3b8a10d06d54d63f427  gcc/testsuite/g++.dg/ext/anon-struct3.C
*************** d33c2bd806a4555ed6b53df9fad39724  gcc/te
*** 8058,8087 ****
  691a47a228a5fa12f281a771f2c53825  gcc/testsuite/g++.dg/ext/array1.C
  d377fb4f9ef6d1ed2029c1551ddf7e3b  gcc/testsuite/g++.dg/ext/asm1.C
  80a3695697c7262c931be9b1380fa283  gcc/testsuite/g++.dg/ext/asm2.C
! d63108eb069dfc0e68f7e9dee960ce29  gcc/testsuite/g++.dg/ext/asm3.C
  f8da779ccf232ebdb2dee94530a1bf48  gcc/testsuite/g++.dg/ext/asm4.C
  e5f9fb7d1c25afe2ab0823f495d251e5  gcc/testsuite/g++.dg/ext/asm5.C
  81d7f5132402c3b9c67ba05f4d092697  gcc/testsuite/g++.dg/ext/asmspecInvalid.C
  5ee066fcb4d2f0a4b7244f6dfe4cf04b  gcc/testsuite/g++.dg/ext/asmspecValid.C
  6ce972d5686790fe9c2f5bbd08661b2f  gcc/testsuite/g++.dg/ext/attrib1.C
! a4b58c1bbb3dbe30a54ff4144c5e9479  gcc/testsuite/g++.dg/ext/attrib10.C
  7d199628520ab2d84e8e00fc3200e683  gcc/testsuite/g++.dg/ext/attrib11.C
  c460ffd02f4c4ad800649b58a60f30e1  gcc/testsuite/g++.dg/ext/attrib12.C
  3c5631b027ef64c7af2375ff8239a83f  gcc/testsuite/g++.dg/ext/attrib13.C
  39e052366a96099f26b671796340eb37  gcc/testsuite/g++.dg/ext/attrib15.C
  7b769337b45c87f3c5f62ad1dc100502  gcc/testsuite/g++.dg/ext/attrib2.C
  7d022bc15e4179e83cb22834a71091af  gcc/testsuite/g++.dg/ext/attrib3.C
  0689e86022776421672cfd3ac67e3153  gcc/testsuite/g++.dg/ext/attrib4.C
  ec01dbb0bb96c7cda806a516a5cf87d4  gcc/testsuite/g++.dg/ext/attrib5.C
  76284b29c6fce52f56ddbcc04acd3a97  gcc/testsuite/g++.dg/ext/attrib6.C
  7af1e9265de26187b4a3a3880f99ac11  gcc/testsuite/g++.dg/ext/attrib7.C
! 9388cf41ce35b88abe38dc6ef1cef881  gcc/testsuite/g++.dg/ext/attrib8.C
  d964d5665a54d859b38a6b6f92740463  gcc/testsuite/g++.dg/ext/attrib9.C
  ea8708497444a8e8d07b540409207c48  gcc/testsuite/g++.dg/ext/case-range1.C
  887aba2e9504f7104a2a8d1522d268e7  gcc/testsuite/g++.dg/ext/case-range2.C
  ffb89a53a39495dfeb8f71f1c7f053ad  gcc/testsuite/g++.dg/ext/case-range3.C
! cedd00555c45c69c50b31f3cd39d605d  gcc/testsuite/g++.dg/ext/complit1.C
  7350965e2763a3a6e1d4346deaa1e94e  gcc/testsuite/g++.dg/ext/complit2.C
  cfb1e3d3e6cedd5cd651ea51248b3822  gcc/testsuite/g++.dg/ext/cond1.C
  10abc828e1142ff735666c5c8f9d280f  gcc/testsuite/g++.dg/ext/construct1.C
  356f009d32e7c4d124b9aff9f08aa85b  gcc/testsuite/g++.dg/ext/conv1.C
--- 8390,8440 ----
  691a47a228a5fa12f281a771f2c53825  gcc/testsuite/g++.dg/ext/array1.C
  d377fb4f9ef6d1ed2029c1551ddf7e3b  gcc/testsuite/g++.dg/ext/asm1.C
  80a3695697c7262c931be9b1380fa283  gcc/testsuite/g++.dg/ext/asm2.C
! 08c7892fa7d47f47ca5b00bbe4dbaa29  gcc/testsuite/g++.dg/ext/asm3.C
  f8da779ccf232ebdb2dee94530a1bf48  gcc/testsuite/g++.dg/ext/asm4.C
  e5f9fb7d1c25afe2ab0823f495d251e5  gcc/testsuite/g++.dg/ext/asm5.C
+ 0689b61a59bc7c15432dc6d704aebb9f  gcc/testsuite/g++.dg/ext/asm6.C
  81d7f5132402c3b9c67ba05f4d092697  gcc/testsuite/g++.dg/ext/asmspecInvalid.C
  5ee066fcb4d2f0a4b7244f6dfe4cf04b  gcc/testsuite/g++.dg/ext/asmspecValid.C
  6ce972d5686790fe9c2f5bbd08661b2f  gcc/testsuite/g++.dg/ext/attrib1.C
! 7e9f8e5acd7da503c63f6342955e1873  gcc/testsuite/g++.dg/ext/attrib10.C
  7d199628520ab2d84e8e00fc3200e683  gcc/testsuite/g++.dg/ext/attrib11.C
  c460ffd02f4c4ad800649b58a60f30e1  gcc/testsuite/g++.dg/ext/attrib12.C
  3c5631b027ef64c7af2375ff8239a83f  gcc/testsuite/g++.dg/ext/attrib13.C
+ 845a5f363e415deac7c6f7a6419ae334  gcc/testsuite/g++.dg/ext/attrib14.C
  39e052366a96099f26b671796340eb37  gcc/testsuite/g++.dg/ext/attrib15.C
+ 1feb907828c5492b83a6bb325e5a8f9c  gcc/testsuite/g++.dg/ext/attrib16.C
+ 5ce9613d48cc00994b9fa919e8cc1293  gcc/testsuite/g++.dg/ext/attrib17.C
+ 82aaa143ec3c9deb77fe0ca5f7aa646f  gcc/testsuite/g++.dg/ext/attrib18.C
+ 156cb04363d25c08db71f92c962b39d7  gcc/testsuite/g++.dg/ext/attrib19.C
  7b769337b45c87f3c5f62ad1dc100502  gcc/testsuite/g++.dg/ext/attrib2.C
+ 488ab60ba6222fb65bc3fb61aaa3e44f  gcc/testsuite/g++.dg/ext/attrib20.C
+ 79dfce253a854fcefcd1eb3bf7e60934  gcc/testsuite/g++.dg/ext/attrib21.C
  7d022bc15e4179e83cb22834a71091af  gcc/testsuite/g++.dg/ext/attrib3.C
  0689e86022776421672cfd3ac67e3153  gcc/testsuite/g++.dg/ext/attrib4.C
  ec01dbb0bb96c7cda806a516a5cf87d4  gcc/testsuite/g++.dg/ext/attrib5.C
  76284b29c6fce52f56ddbcc04acd3a97  gcc/testsuite/g++.dg/ext/attrib6.C
  7af1e9265de26187b4a3a3880f99ac11  gcc/testsuite/g++.dg/ext/attrib7.C
! eae79488acceb2937bc3187837bb3fdc  gcc/testsuite/g++.dg/ext/attrib8.C
  d964d5665a54d859b38a6b6f92740463  gcc/testsuite/g++.dg/ext/attrib9.C
+ 4486cdae80c643406bd32bd56d9bdad2  gcc/testsuite/g++.dg/ext/attribute-test-1.C
+ e3dfcad023441158e57c89c0a9346e22  gcc/testsuite/g++.dg/ext/attribute-test-2.C
+ 14498b2ead3361852f3a2ac858857014  gcc/testsuite/g++.dg/ext/attribute-test-3.C
+ f80b68cc0b6a9a76d568a8872bb62dbb  gcc/testsuite/g++.dg/ext/attribute-test-4.C
+ f61922f06b005a2f6b3d676d7675131c  gcc/testsuite/g++.dg/ext/builtin1.C
+ 613da54d38b4da8f6fd733b55dc9b099  gcc/testsuite/g++.dg/ext/builtin2.C
+ 2eb79b8e493396d3b59ec091894971a4  gcc/testsuite/g++.dg/ext/builtin3.C
+ d0e4a0673fb68ac42869b8c996361788  gcc/testsuite/g++.dg/ext/builtin4.C
+ fb2e513e1e4562144ff7be35634bd225  gcc/testsuite/g++.dg/ext/builtin5.C
+ b7c9d67e055f43c68752eb5dee97ef5b  gcc/testsuite/g++.dg/ext/builtin6.C
+ f75543f5ea1a62d2e49f182ac3ff8f36  gcc/testsuite/g++.dg/ext/builtin7.C
+ f5cd77399383b76230ff688140e0b73d  gcc/testsuite/g++.dg/ext/builtin8.C
  ea8708497444a8e8d07b540409207c48  gcc/testsuite/g++.dg/ext/case-range1.C
  887aba2e9504f7104a2a8d1522d268e7  gcc/testsuite/g++.dg/ext/case-range2.C
  ffb89a53a39495dfeb8f71f1c7f053ad  gcc/testsuite/g++.dg/ext/case-range3.C
! 5163e6d885c069c6cf53f4a8afd5e3c8  gcc/testsuite/g++.dg/ext/complit1.C
  7350965e2763a3a6e1d4346deaa1e94e  gcc/testsuite/g++.dg/ext/complit2.C
+ b7b651bf5ed7db3fbe0f043be4d69c08  gcc/testsuite/g++.dg/ext/complit3.C
  cfb1e3d3e6cedd5cd651ea51248b3822  gcc/testsuite/g++.dg/ext/cond1.C
  10abc828e1142ff735666c5c8f9d280f  gcc/testsuite/g++.dg/ext/construct1.C
  356f009d32e7c4d124b9aff9f08aa85b  gcc/testsuite/g++.dg/ext/conv1.C
*************** cfb1e3d3e6cedd5cd651ea51248b3822  gcc/te
*** 8090,8104 ****
  6aa7306aa2bf445debe3d81c5b253dd4  gcc/testsuite/g++.dg/ext/dllexport-MI1.C
  4bc15b43bea65ed1a02904869e0e19d5  gcc/testsuite/g++.dg/ext/dllexport1.C
  8762efb9149a937554f3e867cca0e9d8  gcc/testsuite/g++.dg/ext/dllimport-MI1.C
! 9230c850acb171d9cbad092d3dc58cf2  gcc/testsuite/g++.dg/ext/dllimport1.C
  3c9b89ab2016a6038228f5d5b55923ac  gcc/testsuite/g++.dg/ext/dllimport10.C
! 9040ec00c0d9b4ba63e0e18a979967df  gcc/testsuite/g++.dg/ext/dllimport2.C
  67b8d78ccea2034f30a7e18fdd627ecc  gcc/testsuite/g++.dg/ext/dllimport3.C
  fd35f38ace1396ffcef38df842c574a7  gcc/testsuite/g++.dg/ext/dllimport4.C
  7bb028b3290ebbfb132c053c38ca17bd  gcc/testsuite/g++.dg/ext/dllimport5.C
  ce50f97235f91ecb9fd7c54323394d31  gcc/testsuite/g++.dg/ext/dllimport6.C
  fa792608bb6965293b0020c60bbb1f1e  gcc/testsuite/g++.dg/ext/dllimport7.C
! b6c8b0f899fade0ba72d8d598c054b43  gcc/testsuite/g++.dg/ext/dllimport8.C
  dd117255a19a422d965e9fd0580728ba  gcc/testsuite/g++.dg/ext/dllimport9.C
  c0dc41d4a72302e0ac9ef29725c83d30  gcc/testsuite/g++.dg/ext/flexary1.C
  b00280f53981a2f30c8d4b894c33962c  gcc/testsuite/g++.dg/ext/fnname1.C
--- 8443,8457 ----
  6aa7306aa2bf445debe3d81c5b253dd4  gcc/testsuite/g++.dg/ext/dllexport-MI1.C
  4bc15b43bea65ed1a02904869e0e19d5  gcc/testsuite/g++.dg/ext/dllexport1.C
  8762efb9149a937554f3e867cca0e9d8  gcc/testsuite/g++.dg/ext/dllimport-MI1.C
! 4eebf2d30dffbb52c5d6ba4c36b355e6  gcc/testsuite/g++.dg/ext/dllimport1.C
  3c9b89ab2016a6038228f5d5b55923ac  gcc/testsuite/g++.dg/ext/dllimport10.C
! cc7081ea84e2fcef60683e1f41e869d1  gcc/testsuite/g++.dg/ext/dllimport2.C
  67b8d78ccea2034f30a7e18fdd627ecc  gcc/testsuite/g++.dg/ext/dllimport3.C
  fd35f38ace1396ffcef38df842c574a7  gcc/testsuite/g++.dg/ext/dllimport4.C
  7bb028b3290ebbfb132c053c38ca17bd  gcc/testsuite/g++.dg/ext/dllimport5.C
  ce50f97235f91ecb9fd7c54323394d31  gcc/testsuite/g++.dg/ext/dllimport6.C
  fa792608bb6965293b0020c60bbb1f1e  gcc/testsuite/g++.dg/ext/dllimport7.C
! 3a7c34d8e8568a3a772ebf4eafae12c1  gcc/testsuite/g++.dg/ext/dllimport8.C
  dd117255a19a422d965e9fd0580728ba  gcc/testsuite/g++.dg/ext/dllimport9.C
  c0dc41d4a72302e0ac9ef29725c83d30  gcc/testsuite/g++.dg/ext/flexary1.C
  b00280f53981a2f30c8d4b894c33962c  gcc/testsuite/g++.dg/ext/fnname1.C
*************** cd4fed30cd2d12ab7d7ed0fd114114fc  gcc/te
*** 8112,8131 ****
  561bb7137df38a016a786156224c9769  gcc/testsuite/g++.dg/ext/instantiate3.C
  7448fb50d33d0e0b5699d1a46190acd0  gcc/testsuite/g++.dg/ext/label1.C
  bc46f1e1c4440b0f50439ed472661922  gcc/testsuite/g++.dg/ext/label2.C
! a95e56c5f31d4ab169379eda915ab429  gcc/testsuite/g++.dg/ext/lvaddr.C
  4d2204ac6e2ce03af82e6431536be376  gcc/testsuite/g++.dg/ext/lvalue1.C
  fc916d98d36fed4d9da40614102d5fdd  gcc/testsuite/g++.dg/ext/max.C
! c3d4817d42d9bee38243415ca6dc3c02  gcc/testsuite/g++.dg/ext/member-attr.C
  8f3e3432664712c939fe6dea74deb533  gcc/testsuite/g++.dg/ext/oper1.C
  de5f86b7a10350b9ce405e101438c412  gcc/testsuite/g++.dg/ext/packed2.C
  770238079a61068b47e3d076fe0aab49  gcc/testsuite/g++.dg/ext/packed3.C
  95291e3b1e495c6d88ede57ef934df95  gcc/testsuite/g++.dg/ext/packed4.C
  16a931c57f92231bf11258bf8610b8ca  gcc/testsuite/g++.dg/ext/packed5.C
  ae7890414c5bc0a5814823b6bca9beb4  gcc/testsuite/g++.dg/ext/packed6.C
  ae2794e104309a224e228d70e4cede48  gcc/testsuite/g++.dg/ext/pretty1.C
  faa8333681bedde3ba84daa60ec26ff8  gcc/testsuite/g++.dg/ext/pretty2.C
  171b60b2dd599842569025ee22f7703a  gcc/testsuite/g++.dg/ext/restrict1.C
! 3aa28eb06dcd446bbf0f03cd07e191fc  gcc/testsuite/g++.dg/ext/stmtexpr1.C
  e9d03f1964df6b0b82bc92f7cb17d1a2  gcc/testsuite/g++.dg/ext/typedef-init.C
  a55635b999e217d4900dcb3975178408  gcc/testsuite/g++.dg/ext/typename1.C
  797d2045e8822a50b44635725cab1028  gcc/testsuite/g++.dg/ext/typeof1.C
--- 8465,8491 ----
  561bb7137df38a016a786156224c9769  gcc/testsuite/g++.dg/ext/instantiate3.C
  7448fb50d33d0e0b5699d1a46190acd0  gcc/testsuite/g++.dg/ext/label1.C
  bc46f1e1c4440b0f50439ed472661922  gcc/testsuite/g++.dg/ext/label2.C
! 2f937b0172f68361eedae818d69b598b  gcc/testsuite/g++.dg/ext/label3.C
! 92a7056cf4009e7b4513a036edcef967  gcc/testsuite/g++.dg/ext/lvaddr.C
  4d2204ac6e2ce03af82e6431536be376  gcc/testsuite/g++.dg/ext/lvalue1.C
  fc916d98d36fed4d9da40614102d5fdd  gcc/testsuite/g++.dg/ext/max.C
! c4e42acfcbcd9ad619eaca5e54041c5c  gcc/testsuite/g++.dg/ext/member-attr.C
  8f3e3432664712c939fe6dea74deb533  gcc/testsuite/g++.dg/ext/oper1.C
  de5f86b7a10350b9ce405e101438c412  gcc/testsuite/g++.dg/ext/packed2.C
  770238079a61068b47e3d076fe0aab49  gcc/testsuite/g++.dg/ext/packed3.C
  95291e3b1e495c6d88ede57ef934df95  gcc/testsuite/g++.dg/ext/packed4.C
  16a931c57f92231bf11258bf8610b8ca  gcc/testsuite/g++.dg/ext/packed5.C
  ae7890414c5bc0a5814823b6bca9beb4  gcc/testsuite/g++.dg/ext/packed6.C
+ 2e29b33d9b093b6a30a0e49d1b42c6c8  gcc/testsuite/g++.dg/ext/packed7.C
+ 30d70c9b6d531cbcd6f6fe964838c28a  gcc/testsuite/g++.dg/ext/packed8.C
  ae2794e104309a224e228d70e4cede48  gcc/testsuite/g++.dg/ext/pretty1.C
  faa8333681bedde3ba84daa60ec26ff8  gcc/testsuite/g++.dg/ext/pretty2.C
  171b60b2dd599842569025ee22f7703a  gcc/testsuite/g++.dg/ext/restrict1.C
! 1f515ca30d28ec30600fee3e74e3f4f6  gcc/testsuite/g++.dg/ext/spe1.C
! 40ecbac4d27075e4005c73ce57fc001d  gcc/testsuite/g++.dg/ext/stmtexpr1.C
! e6bc1a09cf3c9d838c7ad4575c3d8740  gcc/testsuite/g++.dg/ext/stmtexpr2.C
! 15be25b1a07f94e4d65103bfb52d6406  gcc/testsuite/g++.dg/ext/stmtexpr3.C
! 7f4e8ebedb382ebc1349d7067b034121  gcc/testsuite/g++.dg/ext/stmtexpr4.C
  e9d03f1964df6b0b82bc92f7cb17d1a2  gcc/testsuite/g++.dg/ext/typedef-init.C
  a55635b999e217d4900dcb3975178408  gcc/testsuite/g++.dg/ext/typename1.C
  797d2045e8822a50b44635725cab1028  gcc/testsuite/g++.dg/ext/typeof1.C
*************** cac7810767ae23faa6823a798e9c3cea  gcc/te
*** 8138,8154 ****
  a9d136cfb86815cbf4d2e46089c90ce0  gcc/testsuite/g++.dg/ext/typeof8.C
  d7e6d10c23ed31b44c2e6c3268ab2b30  gcc/testsuite/g++.dg/ext/typeof9.C
  1e6ab4b0a8dd095b526fad3f97ec5a91  gcc/testsuite/g++.dg/ext/vector1.C
! f858bf7f067ef1547b0b8a9c2d4a1710  gcc/testsuite/g++.dg/ext/visibility-1.C
! 5df16dfb33d0d6edf7c23f430668d8e9  gcc/testsuite/g++.dg/ext/visibility-2.C
! f2921e3d8413f36933ddbc823829fad6  gcc/testsuite/g++.dg/ext/visibility-3.C
! 67853e155e3a21d642bba57f74641789  gcc/testsuite/g++.dg/ext/visibility-4.C
! 8c94e40ac42d3c33ab3f636d72329602  gcc/testsuite/g++.dg/ext/visibility-5.C
! 4f0b2684bb6649406e54a5b25952946f  gcc/testsuite/g++.dg/ext/visibility-6.C
! aa4d05c6dc738ed651d6edbc2d280910  gcc/testsuite/g++.dg/ext/visibility-7.C
! 49e5fa90222371e61e3278cae63ac4b6  gcc/testsuite/g++.dg/ext/vla1.C
  1a6b39e9b2ac0eb6646ffa34331be0ad  gcc/testsuite/g++.dg/ext/vla2.C
! e3ae75993d39c4c4f116b36560164a6b  gcc/testsuite/g++.dg/ext/vlm1.C
  678b0a6bbf7e0629efdf82de5e5ed01a  gcc/testsuite/g++.dg/ext/vlm2.C
  569d3a72f7308f3c9506d3faac9ee758  gcc/testsuite/g++.dg/gcov/gcov-1.C
  afab866e59f46409fb68aa64174f3acf  gcc/testsuite/g++.dg/gcov/gcov-2.C
  0e241a16c3faf2f0c387bd2978d2b824  gcc/testsuite/g++.dg/gcov/gcov-3.C
--- 8498,8533 ----
  a9d136cfb86815cbf4d2e46089c90ce0  gcc/testsuite/g++.dg/ext/typeof8.C
  d7e6d10c23ed31b44c2e6c3268ab2b30  gcc/testsuite/g++.dg/ext/typeof9.C
  1e6ab4b0a8dd095b526fad3f97ec5a91  gcc/testsuite/g++.dg/ext/vector1.C
! baebe8b558d0ca0786152594a8fc8041  gcc/testsuite/g++.dg/ext/visibility/arm1.C
! 9b9c7c100d92f227167622362ae81686  gcc/testsuite/g++.dg/ext/visibility/assign1.C
! 18d8a1310b12aec50bcac70a4583e44d  gcc/testsuite/g++.dg/ext/visibility/fvisibility-inlines-hidden.C
! 05621e547003978809101724b30f453e  gcc/testsuite/g++.dg/ext/visibility/fvisibility-override1.C
! 3f13700d39ac777487210f33e12d6d81  gcc/testsuite/g++.dg/ext/visibility/fvisibility-override2.C
! 3a72a00418a387a4b941484f8782c6dd  gcc/testsuite/g++.dg/ext/visibility/fvisibility.C
! d7e8086561549b3830b812ca5fcd9dd6  gcc/testsuite/g++.dg/ext/visibility/memfuncts.C
! 9a8d2d6de4dd65f8d370f81892ab674c  gcc/testsuite/g++.dg/ext/visibility/new1.C
! a5cf799f3717193ef5efd44a872e69bb  gcc/testsuite/g++.dg/ext/visibility/noPLT.C
! a8d59950cbc8ed898d19dfae9f599221  gcc/testsuite/g++.dg/ext/visibility/pragma-override1.C
! e4bb4a5f15deb500cb7920bd0a441fd2  gcc/testsuite/g++.dg/ext/visibility/pragma-override2.C
! 56d8136e642cb24cb4da8e83e4f943f7  gcc/testsuite/g++.dg/ext/visibility/pragma.C
! 6014ef7f9e80dffce855a18d78bf2212  gcc/testsuite/g++.dg/ext/visibility/staticdatamem.C
! f557224265cdd5e5b63d2ff669e9cabe  gcc/testsuite/g++.dg/ext/visibility/staticmemfuncts.C
! 871b12330fdac390784bb00c45740be6  gcc/testsuite/g++.dg/ext/visibility/symbian1.C
! 20cb6ae6a48cf6179e9be36a09cc215d  gcc/testsuite/g++.dg/ext/visibility/virtual.C
! b78959b2914362cd23e2ae31204c2305  gcc/testsuite/g++.dg/ext/visibility/visibility-1.C
! e84981f02dd8957761952e315dab0d86  gcc/testsuite/g++.dg/ext/visibility/visibility-2.C
! b9dc9fa8adc27f38cdd6d69f47df7504  gcc/testsuite/g++.dg/ext/visibility/visibility-3.C
! 9915a08c47035d39990d7918773f9236  gcc/testsuite/g++.dg/ext/visibility/visibility-4.C
! 29732097fb76e25fb0f4f81cb768aa61  gcc/testsuite/g++.dg/ext/visibility/visibility-5.C
! f810d8d490c2163100b8092bb733b17d  gcc/testsuite/g++.dg/ext/visibility/visibility-6.C
! 47a67b29187cc189e64d6b11782f0dba  gcc/testsuite/g++.dg/ext/visibility/visibility-7.C
! 1e3d15af5ef5d1e7ce91f6fb5b2ce876  gcc/testsuite/g++.dg/ext/visibility/visibility-8.C
! 27498380cd99bd4d04e094d9a1b7d227  gcc/testsuite/g++.dg/ext/vla1.C
  1a6b39e9b2ac0eb6646ffa34331be0ad  gcc/testsuite/g++.dg/ext/vla2.C
! 11bcf00b0a6402fad7b9569e02318690  gcc/testsuite/g++.dg/ext/vlm1.C
  678b0a6bbf7e0629efdf82de5e5ed01a  gcc/testsuite/g++.dg/ext/vlm2.C
+ 8c86ea641b4518800fb5154a1a151e06  gcc/testsuite/g++.dg/ext/weak1.C
+ d2a31eb19f78eba07ebeb256b409141a  gcc/testsuite/g++.dg/ext/weak2.C
  569d3a72f7308f3c9506d3faac9ee758  gcc/testsuite/g++.dg/gcov/gcov-1.C
  afab866e59f46409fb68aa64174f3acf  gcc/testsuite/g++.dg/gcov/gcov-2.C
  0e241a16c3faf2f0c387bd2978d2b824  gcc/testsuite/g++.dg/gcov/gcov-3.C
*************** afab866e59f46409fb68aa64174f3acf  gcc/te
*** 8160,8170 ****
--- 8539,8551 ----
  2ef6c26071aeff4bfc7114533bcbb6dc  gcc/testsuite/g++.dg/inherit/access4.C
  c2411e6f8a0da7e3d67e7b6f69f5a766  gcc/testsuite/g++.dg/inherit/access5.C
  953df2b1556d4072e312369e3d7273a1  gcc/testsuite/g++.dg/inherit/base1.C
+ 260417b2989a13a1902a4b8b6ec39008  gcc/testsuite/g++.dg/inherit/base2.C
  f3b3605ed6515de4b142977d92356815  gcc/testsuite/g++.dg/inherit/cond1.C
  860b10ddf83da89ca71e00e1586f331e  gcc/testsuite/g++.dg/inherit/conv1.C
  d5b9e7987bad7019aaec9e69eab66e85  gcc/testsuite/g++.dg/inherit/covariant1.C
  c45cf3d192b85a046a341359fd79b95f  gcc/testsuite/g++.dg/inherit/covariant10.C
  8799bf88ee0d1e0be597004c422cbda8  gcc/testsuite/g++.dg/inherit/covariant11.C
+ 024b0d1452f48d9188fd4c6f01697f03  gcc/testsuite/g++.dg/inherit/covariant12.C
  1a712ed4a3f761571bfe894372a9032b  gcc/testsuite/g++.dg/inherit/covariant2.C
  24ff947b4da8f1fcee6c7b66d8388009  gcc/testsuite/g++.dg/inherit/covariant3.C
  8c6bb6aaa56fa2bea8b375c52fab5688  gcc/testsuite/g++.dg/inherit/covariant4.C
*************** c5a6312f5be1ce7f30501a4b629453f3  gcc/te
*** 8174,8179 ****
--- 8555,8562 ----
  9a768cc9dfee9447ec4b15a45df32035  gcc/testsuite/g++.dg/inherit/covariant8.C
  b0b99a844e3a249dbe2e80770008c39f  gcc/testsuite/g++.dg/inherit/covariant9.C
  c788c5892d7d120b0357a3804e53f50a  gcc/testsuite/g++.dg/inherit/error1.C
+ 58a10b4567b6f89d8662c1fc4673d85e  gcc/testsuite/g++.dg/inherit/local1.C
+ 7ba23e93339cef0810a212036425afb3  gcc/testsuite/g++.dg/inherit/local2.C
  0538ccbaac8b13faa65f78233c14d00f  gcc/testsuite/g++.dg/inherit/multiple1.C
  2eaa83c0c5e1866b7dd9098e51c7f03c  gcc/testsuite/g++.dg/inherit/namespace-as-base.C
  929bd841afc583f6793a33214c34c08a  gcc/testsuite/g++.dg/inherit/null1.C
*************** fad492da1e6e9e175df8d618db9cf1fa  gcc/te
*** 8185,8204 ****
  11e5d1f68073db04c0dcb3d956d68731  gcc/testsuite/g++.dg/inherit/template-as-base.C
  f54f42efb01f78d530cd6440f416587e  gcc/testsuite/g++.dg/inherit/thunk1.C
  9b88ac0413e9487e8a758280c835a160  gcc/testsuite/g++.dg/inherit/thunk2.C
  543b190c9c0d744209af04ea332cc27e  gcc/testsuite/g++.dg/inherit/typedef1.C
  be87b303cd68bc0083e229657e8d162a  gcc/testsuite/g++.dg/inherit/typeinfo1.C
  8ac7470626f12e0cdefa40e25583472b  gcc/testsuite/g++.dg/inherit/union1.C
  68d63fe3703892061d4c4162a5385cdf  gcc/testsuite/g++.dg/inherit/using1.C
  26f51eac0b25566825aafb23697d10a4  gcc/testsuite/g++.dg/inherit/using2.C
  c9b550ead8867586800cdeee63308c31  gcc/testsuite/g++.dg/inherit/using3.C
  835b43db313003f4551ea74731f1362c  gcc/testsuite/g++.dg/init/addr-const1.C
  f6bd229ad72e1e0526a7e259faf50163  gcc/testsuite/g++.dg/init/aggr1.C
  a79ad2e50ca8d0ab6dd5b27254f204b5  gcc/testsuite/g++.dg/init/aggr2.C
  92960aa3fba7b251d088910f7ca36c73  gcc/testsuite/g++.dg/init/array1.C
! 2472f2e41a9c48cb89bc9e47b2cc078f  gcc/testsuite/g++.dg/init/array10.C
  277d5eaa0119e28a1c7aaa014f13a7c9  gcc/testsuite/g++.dg/init/array11.C
  cdd8bcf2d0f951ea0f042ff962ed9854  gcc/testsuite/g++.dg/init/array12.C
  d0bb03e714f655f56840d4e660ac77be  gcc/testsuite/g++.dg/init/array13.C
  fa5767203bb04480dc89d15d55d04ad1  gcc/testsuite/g++.dg/init/array2.C
  0212d2961b78684e39260cc7bf7ae66a  gcc/testsuite/g++.dg/init/array3.C
  dafd4fb071c88ff21250002b43675816  gcc/testsuite/g++.dg/init/array4.C
--- 8568,8596 ----
  11e5d1f68073db04c0dcb3d956d68731  gcc/testsuite/g++.dg/inherit/template-as-base.C
  f54f42efb01f78d530cd6440f416587e  gcc/testsuite/g++.dg/inherit/thunk1.C
  9b88ac0413e9487e8a758280c835a160  gcc/testsuite/g++.dg/inherit/thunk2.C
+ fbd285dcc7270a076d780f76a8ce05f4  gcc/testsuite/g++.dg/inherit/thunk3.C
  543b190c9c0d744209af04ea332cc27e  gcc/testsuite/g++.dg/inherit/typedef1.C
  be87b303cd68bc0083e229657e8d162a  gcc/testsuite/g++.dg/inherit/typeinfo1.C
  8ac7470626f12e0cdefa40e25583472b  gcc/testsuite/g++.dg/inherit/union1.C
  68d63fe3703892061d4c4162a5385cdf  gcc/testsuite/g++.dg/inherit/using1.C
  26f51eac0b25566825aafb23697d10a4  gcc/testsuite/g++.dg/inherit/using2.C
  c9b550ead8867586800cdeee63308c31  gcc/testsuite/g++.dg/inherit/using3.C
+ 768bdcc7042d268b87a11846a928e38c  gcc/testsuite/g++.dg/inherit/volatile1.C
  835b43db313003f4551ea74731f1362c  gcc/testsuite/g++.dg/init/addr-const1.C
  f6bd229ad72e1e0526a7e259faf50163  gcc/testsuite/g++.dg/init/aggr1.C
  a79ad2e50ca8d0ab6dd5b27254f204b5  gcc/testsuite/g++.dg/init/aggr2.C
+ 9f0814e4f47903c340ece647e3a040fa  gcc/testsuite/g++.dg/init/aggr3.C
  92960aa3fba7b251d088910f7ca36c73  gcc/testsuite/g++.dg/init/array1.C
! 52be26e8b242500ae671c570de13a1a7  gcc/testsuite/g++.dg/init/array10.C
  277d5eaa0119e28a1c7aaa014f13a7c9  gcc/testsuite/g++.dg/init/array11.C
  cdd8bcf2d0f951ea0f042ff962ed9854  gcc/testsuite/g++.dg/init/array12.C
  d0bb03e714f655f56840d4e660ac77be  gcc/testsuite/g++.dg/init/array13.C
+ 46ee7376992213a7ad7da95e9c59931d  gcc/testsuite/g++.dg/init/array14.C
+ 4b343cab41b920a5cd17c596fa24cc6f  gcc/testsuite/g++.dg/init/array15.C
+ 6edbe02baa73e2e039331eed39a96e9c  gcc/testsuite/g++.dg/init/array16.C
+ bebae7e64d01c783fefaf2f358272230  gcc/testsuite/g++.dg/init/array17.C
+ 2010ab8cabd116e1c5704c568327ae76  gcc/testsuite/g++.dg/init/array18.C
+ db737c897b3b257dcc015a0f7ff35dcc  gcc/testsuite/g++.dg/init/array19.C
  fa5767203bb04480dc89d15d55d04ad1  gcc/testsuite/g++.dg/init/array2.C
  0212d2961b78684e39260cc7bf7ae66a  gcc/testsuite/g++.dg/init/array3.C
  dafd4fb071c88ff21250002b43675816  gcc/testsuite/g++.dg/init/array4.C
*************** a9c79959ed517bc5d72a6a5d41cbf16b  gcc/te
*** 8215,8222 ****
--- 8607,8617 ----
  cf9c501be271cd3a122b94b489c28c30  gcc/testsuite/g++.dg/init/brace2.C
  c46d05cc9ceeb4d3a8a4d25cd908ba7a  gcc/testsuite/g++.dg/init/brace3.C
  8878c87dba0d0dc5af8198636c9944bc  gcc/testsuite/g++.dg/init/byval1.C
+ 37e3aaafda06e7a49338706d936ff70f  gcc/testsuite/g++.dg/init/call1.C
  0f1ff9d8ddbbe6eb6b3651aa40fa79db  gcc/testsuite/g++.dg/init/cleanup1.C
  7d94225f3f0c383bec9dd200a01a0b33  gcc/testsuite/g++.dg/init/cleanup2.C
+ 188aaf9a14e14dfb97cecb6f71b0dd05  gcc/testsuite/g++.dg/init/const1.C
+ 4db32f4d35d147ab0e7b83fc5a21a848  gcc/testsuite/g++.dg/init/const2.C
  641df0a856e9b4cd6a3fe6823eda796c  gcc/testsuite/g++.dg/init/copy1.C
  c268699333b239c371d1bdc906ea54ad  gcc/testsuite/g++.dg/init/copy2.C
  507c17431c10231f129d442ae2f706a2  gcc/testsuite/g++.dg/init/copy3.C
*************** c268699333b239c371d1bdc906ea54ad  gcc/te
*** 8227,8242 ****
  77ceed5edeb6a109374c44ef23679bef  gcc/testsuite/g++.dg/init/ctor1.C
  c92e60dfdc4e6ad1fcc8d9290be36f5f  gcc/testsuite/g++.dg/init/ctor2.C
  5922ec5514343fd09b90bff2a9853e0d  gcc/testsuite/g++.dg/init/ctor3.C
  0282b33cfb0b201499908c95a2e9b57d  gcc/testsuite/g++.dg/init/dtor1.C
  aa6675ad7ca1b7ce6a63c598c59f89a0  gcc/testsuite/g++.dg/init/dtor2.C
  5f5e01bbe7cb4844fd36654728665aa4  gcc/testsuite/g++.dg/init/dtor3.C
  fb8a48266ab2a995a88943828c7a824f  gcc/testsuite/g++.dg/init/elide1.C
  e657849b9797c7df684fd4fafe1341d1  gcc/testsuite/g++.dg/init/elide2.C
- e657849b9797c7df684fd4fafe1341d1  gcc/testsuite/g++.dg/init/elide3.C
  d2ea13322f402d3ce506a9a1106ee836  gcc/testsuite/g++.dg/init/empty1.C
  d5cf79bd277e32455485602b0608bbad  gcc/testsuite/g++.dg/init/enum1.C
  ca9a6dc8d27f3cf82314cfcd92133441  gcc/testsuite/g++.dg/init/enum2.C
  025511c7f18d8a1cc8f8d38b6d04dce0  gcc/testsuite/g++.dg/init/error1.C
  a2c1054568281f6408f992ee29e5680b  gcc/testsuite/g++.dg/init/goto1.C
  61b6e6a5b24a1cf0c1d82d1bad6d7600  gcc/testsuite/g++.dg/init/init-ref1.C
  c2e29d2071e0ec0563f5e74c45da4ecd  gcc/testsuite/g++.dg/init/init-ref2.C
--- 8622,8643 ----
  77ceed5edeb6a109374c44ef23679bef  gcc/testsuite/g++.dg/init/ctor1.C
  c92e60dfdc4e6ad1fcc8d9290be36f5f  gcc/testsuite/g++.dg/init/ctor2.C
  5922ec5514343fd09b90bff2a9853e0d  gcc/testsuite/g++.dg/init/ctor3.C
+ 5713ad79605ae49b1310214617dbbd2f  gcc/testsuite/g++.dg/init/ctor4.C
+ 27316aef2661ec451196e55a019579a8  gcc/testsuite/g++.dg/init/delete1.C
+ b34354a9fccb98f99f3ac0bc14d8f157  gcc/testsuite/g++.dg/init/dso_handle1.C
  0282b33cfb0b201499908c95a2e9b57d  gcc/testsuite/g++.dg/init/dtor1.C
  aa6675ad7ca1b7ce6a63c598c59f89a0  gcc/testsuite/g++.dg/init/dtor2.C
  5f5e01bbe7cb4844fd36654728665aa4  gcc/testsuite/g++.dg/init/dtor3.C
  fb8a48266ab2a995a88943828c7a824f  gcc/testsuite/g++.dg/init/elide1.C
  e657849b9797c7df684fd4fafe1341d1  gcc/testsuite/g++.dg/init/elide2.C
  d2ea13322f402d3ce506a9a1106ee836  gcc/testsuite/g++.dg/init/empty1.C
  d5cf79bd277e32455485602b0608bbad  gcc/testsuite/g++.dg/init/enum1.C
  ca9a6dc8d27f3cf82314cfcd92133441  gcc/testsuite/g++.dg/init/enum2.C
  025511c7f18d8a1cc8f8d38b6d04dce0  gcc/testsuite/g++.dg/init/error1.C
+ f93dc3d9c3bb926cb7922031698ecfef  gcc/testsuite/g++.dg/init/for1.C
+ 01eca483f7382cb5c35dcad5558f08b1  gcc/testsuite/g++.dg/init/for2.C
+ 07dcd9a47aa0d73fd3c9a976d1f3ba07  gcc/testsuite/g++.dg/init/for3.C
+ 4c0fd932ebbc4629dbb229edf363e946  gcc/testsuite/g++.dg/init/global1.C
  a2c1054568281f6408f992ee29e5680b  gcc/testsuite/g++.dg/init/goto1.C
  61b6e6a5b24a1cf0c1d82d1bad6d7600  gcc/testsuite/g++.dg/init/init-ref1.C
  c2e29d2071e0ec0563f5e74c45da4ecd  gcc/testsuite/g++.dg/init/init-ref2.C
*************** c2e29d2071e0ec0563f5e74c45da4ecd  gcc/te
*** 8244,8249 ****
--- 8645,8653 ----
  3f1579f55c69e948c03b96707c703c8c  gcc/testsuite/g++.dg/init/init-ref4.C
  41d2d4e5be3c0a2a40a1924f14ac4448  gcc/testsuite/g++.dg/init/inline1.C
  3dd2b2682d04e72fb7a9a8d137ec7e9d  gcc/testsuite/g++.dg/init/new1.C
+ 99032474a76d34492ef006f7c9ae5a81  gcc/testsuite/g++.dg/init/new10.C
+ 6f47ea3d49aa99edd7c65d0f6c52bdf3  gcc/testsuite/g++.dg/init/new11.C
+ bd503383d6a9825355b68023ee042168  gcc/testsuite/g++.dg/init/new12.C
  7502916c49c92544e10e7a1d3ce41eea  gcc/testsuite/g++.dg/init/new2.C
  2326f60a4e882ff67a8dd2802f7a0b8b  gcc/testsuite/g++.dg/init/new3.C
  19dcda79922ea7017c7e260394e77415  gcc/testsuite/g++.dg/init/new4.C
*************** ef95eb29955e54a2310be36a0828b0cb  gcc/te
*** 8259,8268 ****
--- 8663,8675 ----
  17e13ddd2f4151d2809753d82ad732b3  gcc/testsuite/g++.dg/init/pm1.C
  49c02c7ea8ff817fb850567f5e9bb9d8  gcc/testsuite/g++.dg/init/pm2.C
  b8f980c062ec4b3f73dffbda8276ec70  gcc/testsuite/g++.dg/init/pm3.C
+ 19c721af2055386319b10ee94a3d6a81  gcc/testsuite/g++.dg/init/pmf1.C
  d92713305e498425e3152fff2c8acf2d  gcc/testsuite/g++.dg/init/ptrmem1.C
+ 74ea9e49b5fe45a570f00a8474ac7198  gcc/testsuite/g++.dg/init/ptrmem2.C
  1b51fdd73c1758c6564cee1de0ae7aff  gcc/testsuite/g++.dg/init/ref1.C
  bad5721c186c4b7e163fcd05cffe528d  gcc/testsuite/g++.dg/init/ref10.C
  d0d8fbd7155549c25221fd9539a9ffc5  gcc/testsuite/g++.dg/init/ref11.C
+ b5056183793160d509fa082d596ab38f  gcc/testsuite/g++.dg/init/ref12.C
  753ffddceb5ce125cebb945a65a73cdf  gcc/testsuite/g++.dg/init/ref2.C
  e21984c05c21d067e3b20b37c68bec76  gcc/testsuite/g++.dg/init/ref3.C
  f21f65304dbc9a97b63efafb7bb1a6df  gcc/testsuite/g++.dg/init/ref4.C
*************** ded575d1c35757dbf89f635e5a86910d  gcc/te
*** 8276,8293 ****
  5790ab7ca9ca7303a8c59f3dbcb9058e  gcc/testsuite/g++.dg/init/static2.C
  8b181745d241d484dd529391acd12c57  gcc/testsuite/g++.dg/init/string1.C
  45abc8e0bdd04e2c0dd28c4de54e85c7  gcc/testsuite/g++.dg/init/struct1.C
  a94d2ff7c7a43d0764a116004fa30738  gcc/testsuite/g++.dg/init/union1.C
  f1339a059a53b8c932f6dd4870283209  gcc/testsuite/g++.dg/lookup/ambig1.C
  fa1ea4ed4c9f1ae996929481bd6de67c  gcc/testsuite/g++.dg/lookup/ambig2.C
  2f777984f797382f3dba7eab93665be9  gcc/testsuite/g++.dg/lookup/anon1.C
! 634128e6273203c482a442bdd398071e  gcc/testsuite/g++.dg/lookup/anon2.C
  563e134d27e728c49412fd9e968a6cd8  gcc/testsuite/g++.dg/lookup/anon3.C
  57709e2c9e6767a799d8af24fcd9fa61  gcc/testsuite/g++.dg/lookup/anon4.C
  ccc3c25dd361d4449e0d183046beace3  gcc/testsuite/g++.dg/lookup/class-member-1.C
  150d0e731cb43b0a2d8a3416484aa2a0  gcc/testsuite/g++.dg/lookup/class-member-2.C
  eca250664b688ff2d60db784a03646f6  gcc/testsuite/g++.dg/lookup/crash1.C
  6fc9e98dd31a974c79f311f71bfe2a82  gcc/testsuite/g++.dg/lookup/crash2.C
! 2926cafc16dce434f15124aa33291668  gcc/testsuite/g++.dg/lookup/crash3.C
  7f3fadfecc160e192db942c4e24b7c75  gcc/testsuite/g++.dg/lookup/decl1.C
  d64551040d13bf36f94a380b6b298ea5  gcc/testsuite/g++.dg/lookup/decl2.C
  d9678387006e999bc9d29de93e894ef7  gcc/testsuite/g++.dg/lookup/delete1.C
--- 8683,8712 ----
  5790ab7ca9ca7303a8c59f3dbcb9058e  gcc/testsuite/g++.dg/init/static2.C
  8b181745d241d484dd529391acd12c57  gcc/testsuite/g++.dg/init/string1.C
  45abc8e0bdd04e2c0dd28c4de54e85c7  gcc/testsuite/g++.dg/init/struct1.C
+ ab02e565927ee50b37c774159922e9d9  gcc/testsuite/g++.dg/init/synth1.C
  a94d2ff7c7a43d0764a116004fa30738  gcc/testsuite/g++.dg/init/union1.C
+ 75fa012514803aa0a98113ff8b7474c6  gcc/testsuite/g++.dg/init/vector1.C
  f1339a059a53b8c932f6dd4870283209  gcc/testsuite/g++.dg/lookup/ambig1.C
  fa1ea4ed4c9f1ae996929481bd6de67c  gcc/testsuite/g++.dg/lookup/ambig2.C
+ 0e636168c26983f9ef884688bb4917e7  gcc/testsuite/g++.dg/lookup/ambig3.C
  2f777984f797382f3dba7eab93665be9  gcc/testsuite/g++.dg/lookup/anon1.C
! 6033c13175be69110fc7dd58ad6aa1da  gcc/testsuite/g++.dg/lookup/anon2.C
  563e134d27e728c49412fd9e968a6cd8  gcc/testsuite/g++.dg/lookup/anon3.C
  57709e2c9e6767a799d8af24fcd9fa61  gcc/testsuite/g++.dg/lookup/anon4.C
+ 9b4af41a9b7ce52e2f2a1c0f80c2b16a  gcc/testsuite/g++.dg/lookup/builtin1.C
  ccc3c25dd361d4449e0d183046beace3  gcc/testsuite/g++.dg/lookup/class-member-1.C
  150d0e731cb43b0a2d8a3416484aa2a0  gcc/testsuite/g++.dg/lookup/class-member-2.C
+ 6762f9b22565b38865b048d0a28a7e78  gcc/testsuite/g++.dg/lookup/conv-1.C
+ b59dc1be1de7788c3e2134a73db76fc4  gcc/testsuite/g++.dg/lookup/conv-2.C
+ 5ea2bf1f15c014fc72f6b7b8c42b05e8  gcc/testsuite/g++.dg/lookup/conv-3.C
+ a96892a658bcb84c3b0bb4a492c464f0  gcc/testsuite/g++.dg/lookup/conv-4.C
+ 0e3bdcba06a0b268451ab07419fa8b6a  gcc/testsuite/g++.dg/lookup/conv-5.C
  eca250664b688ff2d60db784a03646f6  gcc/testsuite/g++.dg/lookup/crash1.C
  6fc9e98dd31a974c79f311f71bfe2a82  gcc/testsuite/g++.dg/lookup/crash2.C
! 2d694db02bac816df7c429ac8b59c18f  gcc/testsuite/g++.dg/lookup/crash3.C
! 7e5cb27f2cb8fd20d4617c4cfb845085  gcc/testsuite/g++.dg/lookup/crash4.C
! b829196dc637277366c74ac9ece4c7c6  gcc/testsuite/g++.dg/lookup/crash5.C
! ed885784cc184f53bc0506c07dec604c  gcc/testsuite/g++.dg/lookup/crash6.C
  7f3fadfecc160e192db942c4e24b7c75  gcc/testsuite/g++.dg/lookup/decl1.C
  d64551040d13bf36f94a380b6b298ea5  gcc/testsuite/g++.dg/lookup/decl2.C
  d9678387006e999bc9d29de93e894ef7  gcc/testsuite/g++.dg/lookup/delete1.C
*************** fb015b2936976958a6c9772e86df9bd9  gcc/te
*** 8295,8310 ****
  3920de89ada5d72255d7202c8a1f6da8  gcc/testsuite/g++.dg/lookup/enum1.C
  2284b69f8b484472d6345337a8a6a099  gcc/testsuite/g++.dg/lookup/exception1.C
  c961035d55063ab35ff011e8098d8ea9  gcc/testsuite/g++.dg/lookup/forscope1.C
  f095afdbf961d01e5ac006fff4dbda02  gcc/testsuite/g++.dg/lookup/friend1.C
! 174d2e4b1ee80cd6271263ff718ef864  gcc/testsuite/g++.dg/lookup/java1.C
! 40e4e171e0873c0f5dcc69b483c69b75  gcc/testsuite/g++.dg/lookup/java2.C
! 8d10025bf12a4e96a526c6e8ca385941  gcc/testsuite/g++.dg/lookup/koenig1.C
  c44c726de3c9ebad9efc6f0268a223d3  gcc/testsuite/g++.dg/lookup/koenig2.C
  0efd4ef624e1a631dad2972522c30301  gcc/testsuite/g++.dg/lookup/koenig3.C
  634eca78a66aff86cb1d96384411430c  gcc/testsuite/g++.dg/lookup/koenig4.C
  6438f8158c9b2b3fffe8884a62ce29af  gcc/testsuite/g++.dg/lookup/main1.C
  87fc629e5c4d461f8b0b8d07b9e85a50  gcc/testsuite/g++.dg/lookup/member1.C
  2aad717d2580b37ccf512edb71fd54a2  gcc/testsuite/g++.dg/lookup/nested1.C
  72c3a9b17a32af0585fa3bf9d370c39d  gcc/testsuite/g++.dg/lookup/ns1.C
  8fad00e146fe0525b4a78080a95a7ca8  gcc/testsuite/g++.dg/lookup/ns2.C
  9fc063d780e4510399927cfe832e8770  gcc/testsuite/g++.dg/lookup/pretty1.C
--- 8714,8741 ----
  3920de89ada5d72255d7202c8a1f6da8  gcc/testsuite/g++.dg/lookup/enum1.C
  2284b69f8b484472d6345337a8a6a099  gcc/testsuite/g++.dg/lookup/exception1.C
  c961035d55063ab35ff011e8098d8ea9  gcc/testsuite/g++.dg/lookup/forscope1.C
+ 0a537641a6f07027fc6b83c330555682  gcc/testsuite/g++.dg/lookup/forscope2.C
  f095afdbf961d01e5ac006fff4dbda02  gcc/testsuite/g++.dg/lookup/friend1.C
! 1d1b78e141263b9b6035a3fccc6af928  gcc/testsuite/g++.dg/lookup/friend2.C
! e51e64a92ddf4c4d012cb738bf62fde5  gcc/testsuite/g++.dg/lookup/friend3.C
! 96ad222df48d0097eb84d66dbf37d17d  gcc/testsuite/g++.dg/lookup/friend4.C
! 187ba092057b229619d98cf5e000c6e1  gcc/testsuite/g++.dg/lookup/friend5.C
! f00af47e1b16d7d6e6577ae76572b806  gcc/testsuite/g++.dg/lookup/friend6.C
! 982d219f3971a11f0bdf84813dcb1b80  gcc/testsuite/g++.dg/lookup/java1.C
! c640da1e1f515bb2b0001b9266b2da05  gcc/testsuite/g++.dg/lookup/java2.C
! 751d0b5e7453f5f49c388d10446f6515  gcc/testsuite/g++.dg/lookup/koenig1.C
  c44c726de3c9ebad9efc6f0268a223d3  gcc/testsuite/g++.dg/lookup/koenig2.C
  0efd4ef624e1a631dad2972522c30301  gcc/testsuite/g++.dg/lookup/koenig3.C
  634eca78a66aff86cb1d96384411430c  gcc/testsuite/g++.dg/lookup/koenig4.C
  6438f8158c9b2b3fffe8884a62ce29af  gcc/testsuite/g++.dg/lookup/main1.C
  87fc629e5c4d461f8b0b8d07b9e85a50  gcc/testsuite/g++.dg/lookup/member1.C
+ 6c99bf6f0c2260471ad74e39e36cdf71  gcc/testsuite/g++.dg/lookup/name-clash1.C
+ 924d0b82f921fb6c61ded452d74242a8  gcc/testsuite/g++.dg/lookup/name-clash2.C
+ 81599e15173d111c32e196e35a6bc5ed  gcc/testsuite/g++.dg/lookup/name-clash3.C
+ 8987951c940f83baf2c7608b76695a1a  gcc/testsuite/g++.dg/lookup/name-clash4.C
  2aad717d2580b37ccf512edb71fd54a2  gcc/testsuite/g++.dg/lookup/nested1.C
+ 29a86b7ef1cb72eef07f44a9c39198bf  gcc/testsuite/g++.dg/lookup/new1.C
+ 9acfc8706a0bca23685ea80c9dd6b524  gcc/testsuite/g++.dg/lookup/new2.C
  72c3a9b17a32af0585fa3bf9d370c39d  gcc/testsuite/g++.dg/lookup/ns1.C
  8fad00e146fe0525b4a78080a95a7ca8  gcc/testsuite/g++.dg/lookup/ns2.C
  9fc063d780e4510399927cfe832e8770  gcc/testsuite/g++.dg/lookup/pretty1.C
*************** b88e19f2a23c7934ff2d728a257a2a8e  gcc/te
*** 8324,8338 ****
  12515d02b3adf213d5151821057f38e3  gcc/testsuite/g++.dg/lookup/strong-using-3.C
  1591da0decee2f87beb828b2a559d801  gcc/testsuite/g++.dg/lookup/strong-using-4.C
  14a5eeccea742bec62851ac5c1d69945  gcc/testsuite/g++.dg/lookup/struct-hack1.C
! f4bf94f8fd485ddfa2f51fd1b7ceeba0  gcc/testsuite/g++.dg/lookup/struct1.C
  f7cc5bba605998b587366c1cb499ac4f  gcc/testsuite/g++.dg/lookup/struct2.C
  a793e64bb6b34881797f23d0f6a812f7  gcc/testsuite/g++.dg/lookup/template1.C
  7019845dfb6dbd2d5547a6f72b822068  gcc/testsuite/g++.dg/lookup/template2.C
  0f014086c6e90e67e8879d132fc019d6  gcc/testsuite/g++.dg/lookup/two-stage1.C
! 19273c23a7758f6e6f12fcbf1e809338  gcc/testsuite/g++.dg/lookup/used-before-declaration.C
  37ba62633a35db58ce53d2e965c7405c  gcc/testsuite/g++.dg/lookup/using-10.C
  e787b658f008402e539125d8744f57b8  gcc/testsuite/g++.dg/lookup/using.C
  3b1be5c1d7f024899683d6b51a3db2aa  gcc/testsuite/g++.dg/lookup/using11.C
  0b6e8b0a5d151134cc9e429382ecd4b8  gcc/testsuite/g++.dg/lookup/using2.C
  d56f4b6d96d8a5c73deddb44f985b2b0  gcc/testsuite/g++.dg/lookup/using3.C
  a9f8bb8a4c2ceef1805b242e53567377  gcc/testsuite/g++.dg/lookup/using4.C
--- 8755,8771 ----
  12515d02b3adf213d5151821057f38e3  gcc/testsuite/g++.dg/lookup/strong-using-3.C
  1591da0decee2f87beb828b2a559d801  gcc/testsuite/g++.dg/lookup/strong-using-4.C
  14a5eeccea742bec62851ac5c1d69945  gcc/testsuite/g++.dg/lookup/struct-hack1.C
! 8837a627a3630961e92a566cca5204fa  gcc/testsuite/g++.dg/lookup/struct1.C
  f7cc5bba605998b587366c1cb499ac4f  gcc/testsuite/g++.dg/lookup/struct2.C
  a793e64bb6b34881797f23d0f6a812f7  gcc/testsuite/g++.dg/lookup/template1.C
  7019845dfb6dbd2d5547a6f72b822068  gcc/testsuite/g++.dg/lookup/template2.C
  0f014086c6e90e67e8879d132fc019d6  gcc/testsuite/g++.dg/lookup/two-stage1.C
! 484cce6ae499098e15620d91582e9470  gcc/testsuite/g++.dg/lookup/used-before-declaration.C
  37ba62633a35db58ce53d2e965c7405c  gcc/testsuite/g++.dg/lookup/using-10.C
  e787b658f008402e539125d8744f57b8  gcc/testsuite/g++.dg/lookup/using.C
  3b1be5c1d7f024899683d6b51a3db2aa  gcc/testsuite/g++.dg/lookup/using11.C
+ f57e21af5bde1bbf87d54aa842022073  gcc/testsuite/g++.dg/lookup/using12.C
+ 48b254e1c2661f3029eb99d0e76ad5a5  gcc/testsuite/g++.dg/lookup/using13.C
  0b6e8b0a5d151134cc9e429382ecd4b8  gcc/testsuite/g++.dg/lookup/using2.C
  d56f4b6d96d8a5c73deddb44f985b2b0  gcc/testsuite/g++.dg/lookup/using3.C
  a9f8bb8a4c2ceef1805b242e53567377  gcc/testsuite/g++.dg/lookup/using4.C
*************** aca3573b271c9fdc8cdb4992f24d7a8a  gcc/te
*** 8345,8366 ****
  5cda4cf9c7e156adc1c95f82e00ca6a4  gcc/testsuite/g++.dg/opt/alias2.C
  91fe29b9b1f08a3ca87595896db03497  gcc/testsuite/g++.dg/opt/alias3.C
  a20397e7aec19ce67e72ee637a08a416  gcc/testsuite/g++.dg/opt/anonunion1.C
! 27b294f7a30553722c3df8445d0813fb  gcc/testsuite/g++.dg/opt/asm1.C
  def63acb8ef99a4c443fc492c744024e  gcc/testsuite/g++.dg/opt/call1.C
  0365760743a63e367398b52c1a1ac37e  gcc/testsuite/g++.dg/opt/cfg1.C
  2db7ebcb2c45714978fcb3cadb7cb570  gcc/testsuite/g++.dg/opt/cfg2.C
  edb10b502f24cdcc3e2d6bd03834f453  gcc/testsuite/g++.dg/opt/cfg3.C
  fb4da9867fcb6f2d50834331b8bd01b9  gcc/testsuite/g++.dg/opt/cleanup1.C
  d596297fb4b8cfc0dbc45507354819a3  gcc/testsuite/g++.dg/opt/cond1.C
  b879c3972fcf09a0bef4781d973dea10  gcc/testsuite/g++.dg/opt/conj1.C
  14ee709f09c311be02b0626ca4909c28  gcc/testsuite/g++.dg/opt/conj2.C
  815190a461caeca9af90923572df6303  gcc/testsuite/g++.dg/opt/const1.C
  4bcc868b38c719f7e50e39d9f302169b  gcc/testsuite/g++.dg/opt/const2.C
! cc1cca89a6dc8a430f1f841f1c8e4566  gcc/testsuite/g++.dg/opt/const3.C
  e98c78fcaf089947f989361b38fdf935  gcc/testsuite/g++.dg/opt/cse1.C
  9a12bb82b9156a36e80a88016920a736  gcc/testsuite/g++.dg/opt/cse2.C
  efd4841018dde44e1a577570a64e42de  gcc/testsuite/g++.dg/opt/dtor1.C
  c59d630e23488d9f894a7904300cdd96  gcc/testsuite/g++.dg/opt/eh1.C
  eb5f705d59dfe97f6ee0739884a4d329  gcc/testsuite/g++.dg/opt/emptyunion.C
  58fd998dee334068d9109db8a6d68eee  gcc/testsuite/g++.dg/opt/enum1.C
  a46d4940a485effb55a52f27a3660542  gcc/testsuite/g++.dg/opt/expect1.C
--- 8778,8809 ----
  5cda4cf9c7e156adc1c95f82e00ca6a4  gcc/testsuite/g++.dg/opt/alias2.C
  91fe29b9b1f08a3ca87595896db03497  gcc/testsuite/g++.dg/opt/alias3.C
  a20397e7aec19ce67e72ee637a08a416  gcc/testsuite/g++.dg/opt/anonunion1.C
! f5855f61cbf9d400a44f276598a5db21  gcc/testsuite/g++.dg/opt/array1.C
! 8ec7cd2bb0f2a747c58511cdba0677c9  gcc/testsuite/g++.dg/opt/asm1.C
! c9481d742a48253660d16743a6beecf9  gcc/testsuite/g++.dg/opt/asm2.C
! 2196be4aeda3f2fca55756098ae04451  gcc/testsuite/g++.dg/opt/bool1.C
! 15dd66151b129bfdbe9cd873521b3467  gcc/testsuite/g++.dg/opt/builtins1.C
  def63acb8ef99a4c443fc492c744024e  gcc/testsuite/g++.dg/opt/call1.C
  0365760743a63e367398b52c1a1ac37e  gcc/testsuite/g++.dg/opt/cfg1.C
  2db7ebcb2c45714978fcb3cadb7cb570  gcc/testsuite/g++.dg/opt/cfg2.C
  edb10b502f24cdcc3e2d6bd03834f453  gcc/testsuite/g++.dg/opt/cfg3.C
+ 2bb81d8b4e035fe5f91ce41ef3284779  gcc/testsuite/g++.dg/opt/cfg4.C
  fb4da9867fcb6f2d50834331b8bd01b9  gcc/testsuite/g++.dg/opt/cleanup1.C
  d596297fb4b8cfc0dbc45507354819a3  gcc/testsuite/g++.dg/opt/cond1.C
  b879c3972fcf09a0bef4781d973dea10  gcc/testsuite/g++.dg/opt/conj1.C
  14ee709f09c311be02b0626ca4909c28  gcc/testsuite/g++.dg/opt/conj2.C
  815190a461caeca9af90923572df6303  gcc/testsuite/g++.dg/opt/const1.C
  4bcc868b38c719f7e50e39d9f302169b  gcc/testsuite/g++.dg/opt/const2.C
! 45fe728a90ca30ef5afd18351211d63f  gcc/testsuite/g++.dg/opt/const3.C
! fe3330f4dcc4be90e5790ce38f643df9  gcc/testsuite/g++.dg/opt/covariant1.C
! 2b8e568482a37c0e98a0154aa649f58b  gcc/testsuite/g++.dg/opt/crash1.C
  e98c78fcaf089947f989361b38fdf935  gcc/testsuite/g++.dg/opt/cse1.C
  9a12bb82b9156a36e80a88016920a736  gcc/testsuite/g++.dg/opt/cse2.C
+ b78629432d8191727f95c1df6d1b5557  gcc/testsuite/g++.dg/opt/devirt1.C
  efd4841018dde44e1a577570a64e42de  gcc/testsuite/g++.dg/opt/dtor1.C
  c59d630e23488d9f894a7904300cdd96  gcc/testsuite/g++.dg/opt/eh1.C
+ 4bc90d9400a86fd4bca87067006586da  gcc/testsuite/g++.dg/opt/eh2.C
+ 18b23691d6af0cdfab89ec422af1cdb1  gcc/testsuite/g++.dg/opt/eh3.C
  eb5f705d59dfe97f6ee0739884a4d329  gcc/testsuite/g++.dg/opt/emptyunion.C
  58fd998dee334068d9109db8a6d68eee  gcc/testsuite/g++.dg/opt/enum1.C
  a46d4940a485effb55a52f27a3660542  gcc/testsuite/g++.dg/opt/expect1.C
*************** f8d8b6e43c65e932c2f62a1b6414e898  gcc/te
*** 8375,8517 ****
  255209f312d67a90af5347445715b3c5  gcc/testsuite/g++.dg/opt/inline4.C
  d6211992cdc6ec155a7621cf706f93dd  gcc/testsuite/g++.dg/opt/inline5.C
  5c520267c44f9ad56a86ee13778463ba  gcc/testsuite/g++.dg/opt/inline6.C
  bc09b3d36d6565d9d819a6e644798dc9  gcc/testsuite/g++.dg/opt/life1.C
  83a82f683c2ef38a1d683e0c8055bded  gcc/testsuite/g++.dg/opt/local1.C
  74049e3e36b5fbdab2f271b70320a6d8  gcc/testsuite/g++.dg/opt/longbranch1.C
! db4ba30ed024b772733b7edeb05ab8bb  gcc/testsuite/g++.dg/opt/longbranch2.C
  7138258a897096adae7238a76c0f3756  gcc/testsuite/g++.dg/opt/loop1.C
  7c7311ce5c4ba7400ec6dfbaa4dbd838  gcc/testsuite/g++.dg/opt/mmx1.C
  aae564cdd9b50225ee28c64cfe203a3b  gcc/testsuite/g++.dg/opt/noreturn-1.C
  835771d4b580573ed930662d2b25babf  gcc/testsuite/g++.dg/opt/nrv1.C
  360692bdb55de35cb68717ceb6c51fd7  gcc/testsuite/g++.dg/opt/nrv2.C
  42adcc800d5d2029a2b831e1453e8f32  gcc/testsuite/g++.dg/opt/nrv3.C
  b2773b15109a2fc43572a97edf29b236  gcc/testsuite/g++.dg/opt/nrv4.C
  13481653ab41a707cb4c4eed2199c57f  gcc/testsuite/g++.dg/opt/nrv5.C
  cc4e1f139fd98494395c4313684fa753  gcc/testsuite/g++.dg/opt/nrv6.C
  5778a352c750259fe850421e364893fa  gcc/testsuite/g++.dg/opt/operator1.C
  1b20239db4498d5cce85a900755fb433  gcc/testsuite/g++.dg/opt/placeholder1.C
  ce93d5cdf106ea7731b61f4421ac7fd8  gcc/testsuite/g++.dg/opt/pr15054.C
  e9ca94155e8ec94de58d712efe1ac359  gcc/testsuite/g++.dg/opt/pr15551.C
  9d59acc2f3b8629051cb020f4bf9a8c6  gcc/testsuite/g++.dg/opt/pr16372-1.C
  5464d960c9f938a5db5e2ec3cd1657fd  gcc/testsuite/g++.dg/opt/pr16693-1.C
  b33d962f4d889b6838bfcd5d254ef7bb  gcc/testsuite/g++.dg/opt/pr16693-2.C
  8ebdd0e826546bdb2f9be82a0c9a3631  gcc/testsuite/g++.dg/opt/pr18084-1.C
  ac2356162f00cd5e8804482480f1795a  gcc/testsuite/g++.dg/opt/pr6713.C
  1451eba24eea82cbd0c1ab87885c0f77  gcc/testsuite/g++.dg/opt/preinc1.C
  0841088f825be785d32663d712ecf675  gcc/testsuite/g++.dg/opt/ptrintsum1.C
  8ceccf2f02b3f64f372600e32148e146  gcc/testsuite/g++.dg/opt/ptrmem1.C
  5997c28e492c14900c6ecc330ea33744  gcc/testsuite/g++.dg/opt/ptrmem2.C
  d93fbf41edf6fc4e7f2bf3dcf3d66ef4  gcc/testsuite/g++.dg/opt/ptrmem3.C
! f470eb71814f8df25d94fc86dd49b40c  gcc/testsuite/g++.dg/opt/range-test-1.C
  8c97bd5e5c1c0f5ce05a0c69a6e6df27  gcc/testsuite/g++.dg/opt/reg-stack.C
  424e403345e23e621b477afd23b875db  gcc/testsuite/g++.dg/opt/reg-stack2.C
  3150d3bfe22de91401bf7cbcd067207d  gcc/testsuite/g++.dg/opt/reg-stack3.C
! 8f5f4cf7c25184dc1e7719a152db3909  gcc/testsuite/g++.dg/opt/reg-stack4.C
  25e9962e240d8c8ed05cecb4820f38d3  gcc/testsuite/g++.dg/opt/reload1.C
  eea08af86e12b2945858317c96c4626e  gcc/testsuite/g++.dg/opt/reload2.C
  823775aaa479e3ad245323d4d8a2605c  gcc/testsuite/g++.dg/opt/rtti1.C
  64cddd41580d4c444ced76036ddd036a  gcc/testsuite/g++.dg/opt/stack1.C
  58e8dee52431dafad875b7e31ec97e9b  gcc/testsuite/g++.dg/opt/static1.C
  8423b578cde01fb65b9fcfbfb4cf06cd  gcc/testsuite/g++.dg/opt/static2.C
! 1c99fe84ce810499255f54b137182db1  gcc/testsuite/g++.dg/opt/static3.C
! 778da72656f277cbf87ee7b175b08772  gcc/testsuite/g++.dg/opt/strength-reduce.C
  0146d1b3727676ef281dada91e18ba91  gcc/testsuite/g++.dg/opt/template1.C
  423a720c5d6fa9172e277e0cd1c91f34  gcc/testsuite/g++.dg/opt/thunk1.C
  240c5e869a8b5ad0a8bf6049a8d00862  gcc/testsuite/g++.dg/opt/tmp1.C
  5a0d1f452801f903b71f360e2af9dab9  gcc/testsuite/g++.dg/opt/unroll1.C
! 723b000ccaaf7c990c7bec4599adf5d0  gcc/testsuite/g++.dg/opt/vt1.C
  e9e95defc7549b659e2d8a149f686a98  gcc/testsuite/g++.dg/other/abstract1.C
  1952aeb9951f8c72a9b8ee8487e2991b  gcc/testsuite/g++.dg/other/access1.C
  65f203ac430205520ff2901caa9ed88f  gcc/testsuite/g++.dg/other/access2.C
  4a525e9796838f38d9c7110a0140c8eb  gcc/testsuite/g++.dg/other/anon-struct.C
  e7bda64a0fd9d0057a48814a978e1851  gcc/testsuite/g++.dg/other/anon-union.C
  25bec11b40119085408d52eaa5b86f6e  gcc/testsuite/g++.dg/other/anon2.C
  ceb0c0d2e878f1b7898a912bfe02d365  gcc/testsuite/g++.dg/other/array1.C
  2390d795aed3055b519caf1166461619  gcc/testsuite/g++.dg/other/big-struct.C
  f4cf136163ee3fd615e4a9643520781f  gcc/testsuite/g++.dg/other/bitfield1.C
! 1f9deab6de33410096a2cefb58d5c635  gcc/testsuite/g++.dg/other/classkey1.C
  9a9f2d37d50b140a185bd91a2353aaa8  gcc/testsuite/g++.dg/other/component1.C
  aefc8b529864476d506924ee05711a7a  gcc/testsuite/g++.dg/other/const1.C
  65c0a747dff974d4f19eda6304e002f9  gcc/testsuite/g++.dg/other/const2.C
  ff9cb67baddab7a5c96d0e2a37893445  gcc/testsuite/g++.dg/other/constref1.C
  192c9dfdcc513ccf5362da483582b639  gcc/testsuite/g++.dg/other/constref2.C
! 252e3d7b595f72027d2a6b224507c23d  gcc/testsuite/g++.dg/other/conversion1.C
  05e8006d99bfbd53319ecd928c0724ca  gcc/testsuite/g++.dg/other/copy1.C
  a8c217652f569c1ecbce8d12397e9abb  gcc/testsuite/g++.dg/other/copy2.C
  e7de4fdd2efa00c9e16713dbef6623d4  gcc/testsuite/g++.dg/other/crash-1.C
! 36834579517a9fe1bc975cfc9802cc90  gcc/testsuite/g++.dg/other/crash-2.C
  0d9c768cc6c1ceba304511794490d245  gcc/testsuite/g++.dg/other/crash-3.C
  5276b8901edfb83acb63fdaaaaa072fe  gcc/testsuite/g++.dg/other/cxa-atexit1.C
! d718af681c47225b710a5942afc2ff13  gcc/testsuite/g++.dg/other/do1.C
  c5b26d15a4924f5e39dad2e8b5b7608a  gcc/testsuite/g++.dg/other/enum1.C
  7228816342090a5efe94d0effa02c5bd  gcc/testsuite/g++.dg/other/error1.C
! 7fa2908fb037c24cbcbf103208551482  gcc/testsuite/g++.dg/other/error2.C
  3820027b29c821fc3271c5cd12393a28  gcc/testsuite/g++.dg/other/error3.C
  2a54dfbc2f51bbaad10a9a32a8c1f212  gcc/testsuite/g++.dg/other/error4.C
  020d0b10caad11a5c4a4ca0fa6bb4efc  gcc/testsuite/g++.dg/other/error5.C
  25cd5c280373cc356af58ccaff631391  gcc/testsuite/g++.dg/other/error6.C
  73c4d8cc6b8f7e4de49e1ba997e463e0  gcc/testsuite/g++.dg/other/error7.C
! 54397d68bee6e46410482c211795a005  gcc/testsuite/g++.dg/other/error8.C
  d41c759e6deb3e76ea2ad2bb0786f3a6  gcc/testsuite/g++.dg/other/field1.C
  a7eed4430c93d7a155722a5dad093aec  gcc/testsuite/g++.dg/other/first-global.C
  4e454805fdba784ccf383bf015fee2fc  gcc/testsuite/g++.dg/other/friend1.C
  73acd7749bd5e8d5aea359a56c89a202  gcc/testsuite/g++.dg/other/friend2.C
  32f21e74c5b90dde8aa8adfc0d8ea6f0  gcc/testsuite/g++.dg/other/gc1.C
  bc5371eb8e8dcf79efb0889828991560  gcc/testsuite/g++.dg/other/gc2.C
  970b6253f5cc2a45871fb517d1d1cbc5  gcc/testsuite/g++.dg/other/init1.C
  84228402757e3c8e700713d288e64c46  gcc/testsuite/g++.dg/other/init2.C
  f32a6142208532cc717bb64d8020d355  gcc/testsuite/g++.dg/other/java1.C
  b00a3ef2f2c7c47e551480d60abbc84f  gcc/testsuite/g++.dg/other/linkage1.C
! 3dd2b2682d04e72fb7a9a8d137ec7e9d  gcc/testsuite/g++.dg/other/new1.C
! 5e6409247dcee94b2286d269ff25e6db  gcc/testsuite/g++.dg/other/nontype-1.C
  f6c50007b333f25964b3ad2eb06e3773  gcc/testsuite/g++.dg/other/ns1.C
! 8a1c835a95596398964143f268b3b645  gcc/testsuite/g++.dg/other/offsetof1.C
  f22bc611fe66c01c402c287704531f43  gcc/testsuite/g++.dg/other/offsetof2.C
! 10afba579ab2b2767a78922fc0e4b90b  gcc/testsuite/g++.dg/other/offsetof3.C
  a23d17ae20fd87361daea5c89ea2bf18  gcc/testsuite/g++.dg/other/offsetof4.C
- 4fbd3931c472285bd910c3de9f732d60  gcc/testsuite/g++.dg/other/offsetof5.C
  07f9259feaaf8b8711fbfa3e7647eb57  gcc/testsuite/g++.dg/other/opaque-1.C
  b86da34d9d10fb29a8666c8f29ba5469  gcc/testsuite/g++.dg/other/opaque-2.C
  614f01ba0ef6ccbaf24bd56b706c02d2  gcc/testsuite/g++.dg/other/opaque-3.C
! 81cd1c34bef52fc9846ebe6872c4ab25  gcc/testsuite/g++.dg/other/packed1.C
  d21dda28ccc09de70408d08632e8b5a7  gcc/testsuite/g++.dg/other/pragma-ep-1.C
! 964ac747f597b4e916de96a94f59446d  gcc/testsuite/g++.dg/other/pragma-re-1.C
  f58740da9046e1b048adeaf5bd6ac01e  gcc/testsuite/g++.dg/other/pragma-re-2.C
  dd22b1f568e93b27c56cc7b3bf7485de  gcc/testsuite/g++.dg/other/profile1.C
  aeacbd129aa91e6acca9b9022f8e03ba  gcc/testsuite/g++.dg/other/ptrmem1.C
  c79782b762cef64300df319862fcdc0f  gcc/testsuite/g++.dg/other/ptrmem2.C
  aa501740c79db5668ed5a41a648546f6  gcc/testsuite/g++.dg/other/ptrmem3.C
  76b8bc4328319b30e522cbc6e57ff4ed  gcc/testsuite/g++.dg/other/ptrmem4.C
  22822b2c7eaa7d4e22eb88d6ce526a4c  gcc/testsuite/g++.dg/other/redecl1.C
  97e48186eadf96baa75dab50f7628d6a  gcc/testsuite/g++.dg/other/scope1.C
  23d79ad177c61b847e8d1f84b3f7397b  gcc/testsuite/g++.dg/other/static1.C
  4fb694535f14802a0f86e5b5e3804cc6  gcc/testsuite/g++.dg/other/static11.C
  011330497369cabefc975356fa978d82  gcc/testsuite/g++.dg/other/stdarg1.C
  6678e40619d5043af4bec1849f7634ae  gcc/testsuite/g++.dg/other/stdarg2.C
  5e0beb379071427ec23de04edb342301  gcc/testsuite/g++.dg/other/struct-va_list.C
  6312bd4cf43fd17e803778af8b1f2031  gcc/testsuite/g++.dg/other/switch1.C
! add359f24ea985cbb8f0a2e32cf653ce  gcc/testsuite/g++.dg/other/warning1.C
! 438ff59ba4babee80d41457c2bc8db1e  gcc/testsuite/g++.dg/overload/VLA.C
  31a1eb67025f875651678e52a1e2b3d1  gcc/testsuite/g++.dg/overload/addr1.C
  d023620009e9c8628189ca086290643b  gcc/testsuite/g++.dg/overload/ambig1.C
  ea3127f4b42d821f844905a93809eb92  gcc/testsuite/g++.dg/overload/ambig2.C
  c7adb71813a104a656c6a2e2baf25739  gcc/testsuite/g++.dg/overload/builtin1.C
  3a79826fd499e94593a88f2c06436f3d  gcc/testsuite/g++.dg/overload/builtin2.C
  63766fb1bce3bab4ad17a59d07a272d2  gcc/testsuite/g++.dg/overload/builtin3.C
  2808df88b455ae0dd789dc64c1e34b25  gcc/testsuite/g++.dg/overload/cond1.C
  cd7fc32695c20d66cd268621fac48753  gcc/testsuite/g++.dg/overload/error1.C
! 763a5cd546666852119fa016191efb08  gcc/testsuite/g++.dg/overload/koenig1.C
  53b4a1648421c533b9cf26423d529dc0  gcc/testsuite/g++.dg/overload/member1.C
  e5c64067fac4b9dcfc16ca552eabfc2c  gcc/testsuite/g++.dg/overload/member2.C
  9983af6c17d827ff5c5a0b0609fb569d  gcc/testsuite/g++.dg/overload/new1.C
  0b2f9fcba5861b39ff227c1cbfa754b7  gcc/testsuite/g++.dg/overload/operator-star-1.C
  ffc2123ab343a779a615e519a991e1d9  gcc/testsuite/g++.dg/overload/operator1.C
! 8bfa2cbc5a0969d6bb584dd01efd2d60  gcc/testsuite/g++.dg/overload/pmf1.C
  a436e857943377addaac3203f4d85eb4  gcc/testsuite/g++.dg/overload/prom1.C
  02856d8d11be85bdeb888d95d224df01  gcc/testsuite/g++.dg/overload/ref1.C
  1bd540977a3ebf0e74db36e595b11998  gcc/testsuite/g++.dg/overload/scope1.C
  1e6f1679bedcc11510f7cadcb011cec3  gcc/testsuite/g++.dg/overload/template1.C
  85ece6c01345af5b8d407b8e19d781f9  gcc/testsuite/g++.dg/overload/using1.C
  f0e44977493ab0fe59f740f65a694211  gcc/testsuite/g++.dg/overload/virtual1.C
  41352a2a4cc8c007e49113d208fc4fac  gcc/testsuite/g++.dg/parse/access1.C
  54c26f1516f9e36b3819b0dc7464c933  gcc/testsuite/g++.dg/parse/access2.C
--- 8818,9028 ----
  255209f312d67a90af5347445715b3c5  gcc/testsuite/g++.dg/opt/inline4.C
  d6211992cdc6ec155a7621cf706f93dd  gcc/testsuite/g++.dg/opt/inline5.C
  5c520267c44f9ad56a86ee13778463ba  gcc/testsuite/g++.dg/opt/inline6.C
+ b7cb98f473e1920797490085dbf7bb94  gcc/testsuite/g++.dg/opt/inline7.C
+ 9f754de8bb8b020810cf2dc268d5cffb  gcc/testsuite/g++.dg/opt/inline8.C
+ d843cdf6dd2d552130039968240a53fc  gcc/testsuite/g++.dg/opt/inline9.C
+ 2fbe08ba96a89a540c76bbf38b7e5e77  gcc/testsuite/g++.dg/opt/interface1-a.cc
+ 574ab4f3f6a358775de8a350d81a7251  gcc/testsuite/g++.dg/opt/interface1.C
+ 09696a226561fa381a83f8c1b56bd004  gcc/testsuite/g++.dg/opt/interface1.h
  bc09b3d36d6565d9d819a6e644798dc9  gcc/testsuite/g++.dg/opt/life1.C
  83a82f683c2ef38a1d683e0c8055bded  gcc/testsuite/g++.dg/opt/local1.C
  74049e3e36b5fbdab2f271b70320a6d8  gcc/testsuite/g++.dg/opt/longbranch1.C
! 74b451c9b41bdc96c320c7ba0f711c68  gcc/testsuite/g++.dg/opt/longbranch2.C
  7138258a897096adae7238a76c0f3756  gcc/testsuite/g++.dg/opt/loop1.C
+ 5ba0313c07c21269127514a7438b4baf  gcc/testsuite/g++.dg/opt/max1.C
  7c7311ce5c4ba7400ec6dfbaa4dbd838  gcc/testsuite/g++.dg/opt/mmx1.C
  aae564cdd9b50225ee28c64cfe203a3b  gcc/testsuite/g++.dg/opt/noreturn-1.C
+ 25116c5b072e5f10df5bd837649e0e1d  gcc/testsuite/g++.dg/opt/nothrow1.C
  835771d4b580573ed930662d2b25babf  gcc/testsuite/g++.dg/opt/nrv1.C
  360692bdb55de35cb68717ceb6c51fd7  gcc/testsuite/g++.dg/opt/nrv2.C
  42adcc800d5d2029a2b831e1453e8f32  gcc/testsuite/g++.dg/opt/nrv3.C
  b2773b15109a2fc43572a97edf29b236  gcc/testsuite/g++.dg/opt/nrv4.C
  13481653ab41a707cb4c4eed2199c57f  gcc/testsuite/g++.dg/opt/nrv5.C
  cc4e1f139fd98494395c4313684fa753  gcc/testsuite/g++.dg/opt/nrv6.C
+ b16ae5b90244df2461a7c023c7f3c88e  gcc/testsuite/g++.dg/opt/nrv7.C
  5778a352c750259fe850421e364893fa  gcc/testsuite/g++.dg/opt/operator1.C
  1b20239db4498d5cce85a900755fb433  gcc/testsuite/g++.dg/opt/placeholder1.C
+ 2896f5b1a96dd9fabb1dbb65cb4c5921  gcc/testsuite/g++.dg/opt/pr13066-1.C
+ 4f87f86b9f018cae74888e97468b2fe0  gcc/testsuite/g++.dg/opt/pr14029.C
+ 8fb7e68e9e9b5eb02628e03f5333e645  gcc/testsuite/g++.dg/opt/pr14888.C
  ce93d5cdf106ea7731b61f4421ac7fd8  gcc/testsuite/g++.dg/opt/pr15054.C
  e9ca94155e8ec94de58d712efe1ac359  gcc/testsuite/g++.dg/opt/pr15551.C
  9d59acc2f3b8629051cb020f4bf9a8c6  gcc/testsuite/g++.dg/opt/pr16372-1.C
  5464d960c9f938a5db5e2ec3cd1657fd  gcc/testsuite/g++.dg/opt/pr16693-1.C
  b33d962f4d889b6838bfcd5d254ef7bb  gcc/testsuite/g++.dg/opt/pr16693-2.C
+ e3aba5b07f3934dcb30e156cc679a866  gcc/testsuite/g++.dg/opt/pr17411-1.C
+ efb7827d1ecf7697e74820c9396cd46b  gcc/testsuite/g++.dg/opt/pr17624.C
+ 7567434940e9047da259cd3aa0e13fce  gcc/testsuite/g++.dg/opt/pr17697-1.C
+ d1fa1663bb88db015f7e2a7aa5c22e97  gcc/testsuite/g++.dg/opt/pr17697-2.C
+ 5f339ae81d9a0d16648303de092eefca  gcc/testsuite/g++.dg/opt/pr17697-3.C
+ 299566d461676c146df9f785903f6f2d  gcc/testsuite/g++.dg/opt/pr17724-1.C
+ a299f85d974b25dab25e2f0cd5ede318  gcc/testsuite/g++.dg/opt/pr17724-2.C
+ 159caaf3ecf96a86d91ffdb2a401e612  gcc/testsuite/g++.dg/opt/pr17724-3.C
+ a756ddc55da373498280cb4569b36df4  gcc/testsuite/g++.dg/opt/pr17724-4.C
+ cffbcf404312fe67a6054e66e6bb6ace  gcc/testsuite/g++.dg/opt/pr17724-5.C
+ 144b08c56b97351a4e649cf301cc3f38  gcc/testsuite/g++.dg/opt/pr17724-6.C
+ c4dea16df9a30d5151a70b435783f02b  gcc/testsuite/g++.dg/opt/pr17902.C
  8ebdd0e826546bdb2f9be82a0c9a3631  gcc/testsuite/g++.dg/opt/pr18084-1.C
+ b2ae3464686798e5eff26df852913eff  gcc/testsuite/g++.dg/opt/pr18683-1.C
+ 92af3809e34a8d30b737f310d7e57654  gcc/testsuite/g++.dg/opt/pr18968.C
+ 600947cbff5b96bdeb482a5d5adb992b  gcc/testsuite/g++.dg/opt/pr19108.C
+ 54b8c1cff65ae0ff69f7e0aa187f7747  gcc/testsuite/g++.dg/opt/pr19650.C
+ 45d19dda46c647dc885d443b5fced384  gcc/testsuite/g++.dg/opt/pr19768.C
+ 54c9b415ffbafe11bc784d68421c5e25  gcc/testsuite/g++.dg/opt/pr20991.C
  ac2356162f00cd5e8804482480f1795a  gcc/testsuite/g++.dg/opt/pr6713.C
+ 90bdbfd9313461944756a9e9f01ce788  gcc/testsuite/g++.dg/opt/pr7503-1.C
+ 9d698f5fee75fb4b0137bb9c1c9f7b92  gcc/testsuite/g++.dg/opt/pr7503-2.C
+ ef4c15bf3e032eab3fabae74421d5a82  gcc/testsuite/g++.dg/opt/pr7503-3.C
+ 3aa7e608b7e02acc1afbe794316b3c54  gcc/testsuite/g++.dg/opt/pr7503-4.C
+ 3d4f2fab3851f52422fdc23de17deb88  gcc/testsuite/g++.dg/opt/pr7503-5.C
  1451eba24eea82cbd0c1ab87885c0f77  gcc/testsuite/g++.dg/opt/preinc1.C
  0841088f825be785d32663d712ecf675  gcc/testsuite/g++.dg/opt/ptrintsum1.C
  8ceccf2f02b3f64f372600e32148e146  gcc/testsuite/g++.dg/opt/ptrmem1.C
  5997c28e492c14900c6ecc330ea33744  gcc/testsuite/g++.dg/opt/ptrmem2.C
  d93fbf41edf6fc4e7f2bf3dcf3d66ef4  gcc/testsuite/g++.dg/opt/ptrmem3.C
! 487df22214708e120d70825e74769ba6  gcc/testsuite/g++.dg/opt/ptrmem4.C
! 84530a6d66888302453a1415559319c5  gcc/testsuite/g++.dg/opt/ptrmem5.C
! b0d55030f465e0c394fac453469489e7  gcc/testsuite/g++.dg/opt/ptrmem6.C
! 3e608b206a9e9353b781f90189adf54f  gcc/testsuite/g++.dg/opt/range-test-1.C
! 19ded3e2a50942bf9bcc2f1fc4413e35  gcc/testsuite/g++.dg/opt/range-test-2.C
  8c97bd5e5c1c0f5ce05a0c69a6e6df27  gcc/testsuite/g++.dg/opt/reg-stack.C
  424e403345e23e621b477afd23b875db  gcc/testsuite/g++.dg/opt/reg-stack2.C
  3150d3bfe22de91401bf7cbcd067207d  gcc/testsuite/g++.dg/opt/reg-stack3.C
! e61c8c73e6e3841697c7773a9cbbadf1  gcc/testsuite/g++.dg/opt/reg-stack4.C
  25e9962e240d8c8ed05cecb4820f38d3  gcc/testsuite/g++.dg/opt/reload1.C
  eea08af86e12b2945858317c96c4626e  gcc/testsuite/g++.dg/opt/reload2.C
  823775aaa479e3ad245323d4d8a2605c  gcc/testsuite/g++.dg/opt/rtti1.C
  64cddd41580d4c444ced76036ddd036a  gcc/testsuite/g++.dg/opt/stack1.C
  58e8dee52431dafad875b7e31ec97e9b  gcc/testsuite/g++.dg/opt/static1.C
  8423b578cde01fb65b9fcfbfb4cf06cd  gcc/testsuite/g++.dg/opt/static2.C
! d314ec5e414fa9ff7becb1b3ec214a79  gcc/testsuite/g++.dg/opt/static3.C
! da113259afc60dbf3dd7e421650ce386  gcc/testsuite/g++.dg/opt/static4.C
! 2f8d12c5584c899c44076504f7d7a0d3  gcc/testsuite/g++.dg/opt/strength-reduce.C
! 5ed0d3826b9088598be9656c25162529  gcc/testsuite/g++.dg/opt/switch1.C
! bbefd5b6e2ed3c02c5af749a336d254b  gcc/testsuite/g++.dg/opt/switch2.C
! 0cc8575163405751cafdeec02c836cfb  gcc/testsuite/g++.dg/opt/switch3.C
! bcac8682c08da84f449c4cf469e24b26  gcc/testsuite/g++.dg/opt/switch4.C
! fef275baea684e27b49402e946869af7  gcc/testsuite/g++.dg/opt/temp1.C
  0146d1b3727676ef281dada91e18ba91  gcc/testsuite/g++.dg/opt/template1.C
  423a720c5d6fa9172e277e0cd1c91f34  gcc/testsuite/g++.dg/opt/thunk1.C
+ 178df7a1f97e8581d95b76bda27dc33d  gcc/testsuite/g++.dg/opt/thunk2.C
  240c5e869a8b5ad0a8bf6049a8d00862  gcc/testsuite/g++.dg/opt/tmp1.C
  5a0d1f452801f903b71f360e2af9dab9  gcc/testsuite/g++.dg/opt/unroll1.C
! 5f5238bea60e68ad7fb4777fc0d855cf  gcc/testsuite/g++.dg/opt/vt1.C
  e9e95defc7549b659e2d8a149f686a98  gcc/testsuite/g++.dg/other/abstract1.C
+ c1304f624beddbc034d900e8d3d8a3dc  gcc/testsuite/g++.dg/other/abstract2.C
  1952aeb9951f8c72a9b8ee8487e2991b  gcc/testsuite/g++.dg/other/access1.C
  65f203ac430205520ff2901caa9ed88f  gcc/testsuite/g++.dg/other/access2.C
+ 9badaf0d3171514f4d628f2da49a35a9  gcc/testsuite/g++.dg/other/access3.C
  4a525e9796838f38d9c7110a0140c8eb  gcc/testsuite/g++.dg/other/anon-struct.C
  e7bda64a0fd9d0057a48814a978e1851  gcc/testsuite/g++.dg/other/anon-union.C
  25bec11b40119085408d52eaa5b86f6e  gcc/testsuite/g++.dg/other/anon2.C
+ ddc1dc6e20da6c7a8449205caab8dc39  gcc/testsuite/g++.dg/other/anon3.C
  ceb0c0d2e878f1b7898a912bfe02d365  gcc/testsuite/g++.dg/other/array1.C
  2390d795aed3055b519caf1166461619  gcc/testsuite/g++.dg/other/big-struct.C
  f4cf136163ee3fd615e4a9643520781f  gcc/testsuite/g++.dg/other/bitfield1.C
! a33402d123eb961aa44a527290e451c2  gcc/testsuite/g++.dg/other/classkey1.C
! b0eb29945f04721ade114ff6651768e8  gcc/testsuite/g++.dg/other/complex1.C
  9a9f2d37d50b140a185bd91a2353aaa8  gcc/testsuite/g++.dg/other/component1.C
  aefc8b529864476d506924ee05711a7a  gcc/testsuite/g++.dg/other/const1.C
  65c0a747dff974d4f19eda6304e002f9  gcc/testsuite/g++.dg/other/const2.C
  ff9cb67baddab7a5c96d0e2a37893445  gcc/testsuite/g++.dg/other/constref1.C
  192c9dfdcc513ccf5362da483582b639  gcc/testsuite/g++.dg/other/constref2.C
! cfdc2115d36008e199bda75a789e43e3  gcc/testsuite/g++.dg/other/conversion1.C
  05e8006d99bfbd53319ecd928c0724ca  gcc/testsuite/g++.dg/other/copy1.C
  a8c217652f569c1ecbce8d12397e9abb  gcc/testsuite/g++.dg/other/copy2.C
  e7de4fdd2efa00c9e16713dbef6623d4  gcc/testsuite/g++.dg/other/crash-1.C
! f2c44da2d098b6e3329177d4a7f387ef  gcc/testsuite/g++.dg/other/crash-2.C
  0d9c768cc6c1ceba304511794490d245  gcc/testsuite/g++.dg/other/crash-3.C
+ 63b7b98a70bc3e591093a887e3c9dc16  gcc/testsuite/g++.dg/other/cv_func.C
  5276b8901edfb83acb63fdaaaaa072fe  gcc/testsuite/g++.dg/other/cxa-atexit1.C
! d3370c196d18a12979ef3db733309686  gcc/testsuite/g++.dg/other/do1.C
  c5b26d15a4924f5e39dad2e8b5b7608a  gcc/testsuite/g++.dg/other/enum1.C
  7228816342090a5efe94d0effa02c5bd  gcc/testsuite/g++.dg/other/error1.C
! a7f642f46d2d9259194f51e24e5b9ee6  gcc/testsuite/g++.dg/other/error2.C
  3820027b29c821fc3271c5cd12393a28  gcc/testsuite/g++.dg/other/error3.C
  2a54dfbc2f51bbaad10a9a32a8c1f212  gcc/testsuite/g++.dg/other/error4.C
  020d0b10caad11a5c4a4ca0fa6bb4efc  gcc/testsuite/g++.dg/other/error5.C
  25cd5c280373cc356af58ccaff631391  gcc/testsuite/g++.dg/other/error6.C
  73c4d8cc6b8f7e4de49e1ba997e463e0  gcc/testsuite/g++.dg/other/error7.C
! 70b98e678ee8569a618cb23d90ecc291  gcc/testsuite/g++.dg/other/error8.C
! b92370a23a79c9c243e1e6ba7329b0a7  gcc/testsuite/g++.dg/other/error9.C
  d41c759e6deb3e76ea2ad2bb0786f3a6  gcc/testsuite/g++.dg/other/field1.C
  a7eed4430c93d7a155722a5dad093aec  gcc/testsuite/g++.dg/other/first-global.C
  4e454805fdba784ccf383bf015fee2fc  gcc/testsuite/g++.dg/other/friend1.C
  73acd7749bd5e8d5aea359a56c89a202  gcc/testsuite/g++.dg/other/friend2.C
  32f21e74c5b90dde8aa8adfc0d8ea6f0  gcc/testsuite/g++.dg/other/gc1.C
  bc5371eb8e8dcf79efb0889828991560  gcc/testsuite/g++.dg/other/gc2.C
+ 78e796e41e24a5aabf8b9d7868a3129a  gcc/testsuite/g++.dg/other/infloop-1.C
  970b6253f5cc2a45871fb517d1d1cbc5  gcc/testsuite/g++.dg/other/init1.C
  84228402757e3c8e700713d288e64c46  gcc/testsuite/g++.dg/other/init2.C
  f32a6142208532cc717bb64d8020d355  gcc/testsuite/g++.dg/other/java1.C
  b00a3ef2f2c7c47e551480d60abbc84f  gcc/testsuite/g++.dg/other/linkage1.C
! 688ada87fb447bcc4f314e612d65b84b  gcc/testsuite/g++.dg/other/mmintrin.C
! 36156b7bb0f0bbac69e3b368b3b7bb86  gcc/testsuite/g++.dg/other/nontype-1.C
  f6c50007b333f25964b3ad2eb06e3773  gcc/testsuite/g++.dg/other/ns1.C
! ed6ba93ec64ee88b5ea998354c729e44  gcc/testsuite/g++.dg/other/offsetof1.C
  f22bc611fe66c01c402c287704531f43  gcc/testsuite/g++.dg/other/offsetof2.C
! 79080a10f4aca2a4c11a4d507c81dd4e  gcc/testsuite/g++.dg/other/offsetof3.C
  a23d17ae20fd87361daea5c89ea2bf18  gcc/testsuite/g++.dg/other/offsetof4.C
  07f9259feaaf8b8711fbfa3e7647eb57  gcc/testsuite/g++.dg/other/opaque-1.C
  b86da34d9d10fb29a8666c8f29ba5469  gcc/testsuite/g++.dg/other/opaque-2.C
  614f01ba0ef6ccbaf24bd56b706c02d2  gcc/testsuite/g++.dg/other/opaque-3.C
! a4c484df28fe2f3623e6d2667baf6d74  gcc/testsuite/g++.dg/other/packed1.C
  d21dda28ccc09de70408d08632e8b5a7  gcc/testsuite/g++.dg/other/pragma-ep-1.C
! 7459c97728e6ffd98a446fba2d38d258  gcc/testsuite/g++.dg/other/pragma-re-1.C
  f58740da9046e1b048adeaf5bd6ac01e  gcc/testsuite/g++.dg/other/pragma-re-2.C
  dd22b1f568e93b27c56cc7b3bf7485de  gcc/testsuite/g++.dg/other/profile1.C
  aeacbd129aa91e6acca9b9022f8e03ba  gcc/testsuite/g++.dg/other/ptrmem1.C
  c79782b762cef64300df319862fcdc0f  gcc/testsuite/g++.dg/other/ptrmem2.C
  aa501740c79db5668ed5a41a648546f6  gcc/testsuite/g++.dg/other/ptrmem3.C
  76b8bc4328319b30e522cbc6e57ff4ed  gcc/testsuite/g++.dg/other/ptrmem4.C
+ 713d0139b054494df9491738a1fefb6c  gcc/testsuite/g++.dg/other/ptrmem5.C
+ 6b08cb238dd6367be52907131a810d21  gcc/testsuite/g++.dg/other/ptrmem6.C
  22822b2c7eaa7d4e22eb88d6ce526a4c  gcc/testsuite/g++.dg/other/redecl1.C
+ c27eb56b8466512532ae3a8c1a327a60  gcc/testsuite/g++.dg/other/redecl2.C
  97e48186eadf96baa75dab50f7628d6a  gcc/testsuite/g++.dg/other/scope1.C
  23d79ad177c61b847e8d1f84b3f7397b  gcc/testsuite/g++.dg/other/static1.C
  4fb694535f14802a0f86e5b5e3804cc6  gcc/testsuite/g++.dg/other/static11.C
  011330497369cabefc975356fa978d82  gcc/testsuite/g++.dg/other/stdarg1.C
  6678e40619d5043af4bec1849f7634ae  gcc/testsuite/g++.dg/other/stdarg2.C
+ a7af26260d7a2dffb8d739810825afe7  gcc/testsuite/g++.dg/other/stdarg3.C
  5e0beb379071427ec23de04edb342301  gcc/testsuite/g++.dg/other/struct-va_list.C
  6312bd4cf43fd17e803778af8b1f2031  gcc/testsuite/g++.dg/other/switch1.C
! 9bae0d01ef429f94e58c536f39c9ca7b  gcc/testsuite/g++.dg/other/synth1.C
! 5c2adc76f21ce8f7182fe1930db8db73  gcc/testsuite/g++.dg/other/unreachable1.C
! 6aa48be6aef2630759f48ff66b6424bd  gcc/testsuite/g++.dg/other/vararg-1.C
! 60563e69386b8a906233c2d479c02e6b  gcc/testsuite/g++.dg/other/vararg-2.C
! bbbc42226f302577b317dbefbed13e8a  gcc/testsuite/g++.dg/other/vthunk1.C
! 3ab882b7c3b941e862b055e33a605891  gcc/testsuite/g++.dg/other/warning1.C
! e01d22af2bf54a4df755dfb677defefb  gcc/testsuite/g++.dg/overload/VLA.C
  31a1eb67025f875651678e52a1e2b3d1  gcc/testsuite/g++.dg/overload/addr1.C
  d023620009e9c8628189ca086290643b  gcc/testsuite/g++.dg/overload/ambig1.C
  ea3127f4b42d821f844905a93809eb92  gcc/testsuite/g++.dg/overload/ambig2.C
+ 573f0cb9d28274fe4776cc39b8a875ed  gcc/testsuite/g++.dg/overload/arg1.C
+ 4491935dbfe94276c1739fb569f323e7  gcc/testsuite/g++.dg/overload/arg2.C
+ c0080960cdfb00ad691b47805756a33b  gcc/testsuite/g++.dg/overload/arg3.C
+ bef3fe03bfa5bee8841e795fcab96f07  gcc/testsuite/g++.dg/overload/arg4.C
  c7adb71813a104a656c6a2e2baf25739  gcc/testsuite/g++.dg/overload/builtin1.C
  3a79826fd499e94593a88f2c06436f3d  gcc/testsuite/g++.dg/overload/builtin2.C
  63766fb1bce3bab4ad17a59d07a272d2  gcc/testsuite/g++.dg/overload/builtin3.C
  2808df88b455ae0dd789dc64c1e34b25  gcc/testsuite/g++.dg/overload/cond1.C
+ 1ad1044e609c7c71b9d825f8f0c46285  gcc/testsuite/g++.dg/overload/ellipsis1.C
  cd7fc32695c20d66cd268621fac48753  gcc/testsuite/g++.dg/overload/error1.C
! 9f3216fc0ae4a8a06ab126b5ce8c7180  gcc/testsuite/g++.dg/overload/koenig1.C
  53b4a1648421c533b9cf26423d529dc0  gcc/testsuite/g++.dg/overload/member1.C
  e5c64067fac4b9dcfc16ca552eabfc2c  gcc/testsuite/g++.dg/overload/member2.C
  9983af6c17d827ff5c5a0b0609fb569d  gcc/testsuite/g++.dg/overload/new1.C
  0b2f9fcba5861b39ff227c1cbfa754b7  gcc/testsuite/g++.dg/overload/operator-star-1.C
  ffc2123ab343a779a615e519a991e1d9  gcc/testsuite/g++.dg/overload/operator1.C
! e290ad6ee59a5ec0b5557a052568a78d  gcc/testsuite/g++.dg/overload/pmf1.C
  a436e857943377addaac3203f4d85eb4  gcc/testsuite/g++.dg/overload/prom1.C
  02856d8d11be85bdeb888d95d224df01  gcc/testsuite/g++.dg/overload/ref1.C
  1bd540977a3ebf0e74db36e595b11998  gcc/testsuite/g++.dg/overload/scope1.C
  1e6f1679bedcc11510f7cadcb011cec3  gcc/testsuite/g++.dg/overload/template1.C
+ 053bc5744de44c3637cdea4e8f67c443  gcc/testsuite/g++.dg/overload/template2.C
  85ece6c01345af5b8d407b8e19d781f9  gcc/testsuite/g++.dg/overload/using1.C
+ dc068d99ce0d483f9daf7da097089a1b  gcc/testsuite/g++.dg/overload/using2.C
  f0e44977493ab0fe59f740f65a694211  gcc/testsuite/g++.dg/overload/virtual1.C
  41352a2a4cc8c007e49113d208fc4fac  gcc/testsuite/g++.dg/parse/access1.C
  54c26f1516f9e36b3819b0dc7464c933  gcc/testsuite/g++.dg/parse/access2.C
*************** bc8c4ed875b2c4b0e6b1ec9bcec25d41  gcc/te
*** 8529,8558 ****
  daf5f5fa938643351cbd008ccc3bb60f  gcc/testsuite/g++.dg/parse/array-size1.C
  c51ee1846816a95e9af6e3d6b9e65695  gcc/testsuite/g++.dg/parse/attr-ctor1.C
  d84032d5d61187d741ca91d1d16ee607  gcc/testsuite/g++.dg/parse/attr1.C
  f804bc56f03de2883d5686276182c955  gcc/testsuite/g++.dg/parse/builtin1.C
  d8b50f7519f0c33caf6717bf07e5c8ae  gcc/testsuite/g++.dg/parse/builtin2.C
! f3d728b9f5406acac0e060b613e85e35  gcc/testsuite/g++.dg/parse/cast1.C
  173232583884d727bdecd6f7deef03db  gcc/testsuite/g++.dg/parse/cast2.C
  51e1b0497a2a8269c9cb3add880916ac  gcc/testsuite/g++.dg/parse/casting-operator1.C
! 7e88f85d6ce9840105ca7c38a26da170  gcc/testsuite/g++.dg/parse/casting-operator2.C
  b768f688a17e6fb93e41198625381298  gcc/testsuite/g++.dg/parse/class1.C
! 9f22e2644b1705f550f58acfee973744  gcc/testsuite/g++.dg/parse/comma1.C
  c20d14b721443c68f73728331d14fbe0  gcc/testsuite/g++.dg/parse/concat1.C
  88ea1494d81948e2d2af7b240440d149  gcc/testsuite/g++.dg/parse/condexpr1.C
  bfeb624c1fc667410d95e4596057c951  gcc/testsuite/g++.dg/parse/constant1.C
  b9d605265e28097c16a8dd9715ebcd23  gcc/testsuite/g++.dg/parse/constant2.C
  18865792b57aa709f57045520da4abd5  gcc/testsuite/g++.dg/parse/constant3.C
  ae683494d5f26653a04905a9f3115068  gcc/testsuite/g++.dg/parse/constant4.C
  4bbd76fea706d6a9331c87b6b7b8a538  gcc/testsuite/g++.dg/parse/constructor1.C
  372cd66c0636977b2eaf4be6b4310a42  gcc/testsuite/g++.dg/parse/constructor2.C
  5a399fbfb7b6718be8ad9eb3ea24af68  gcc/testsuite/g++.dg/parse/conv_op1.C
  721a281ff33124a1c49ed8d68d2419fb  gcc/testsuite/g++.dg/parse/crash1.C
! 1e554f2f41c7c2795d452076db98c5e3  gcc/testsuite/g++.dg/parse/crash10.C
! 664c5fd402a2d8f32c6f7d50cf493855  gcc/testsuite/g++.dg/parse/crash11.C
! fa4b6b5bc646f199087a3c238d1be6c9  gcc/testsuite/g++.dg/parse/crash12.C
! 0f1f99e6dcaa38da51ca733e97c1c0cb  gcc/testsuite/g++.dg/parse/crash13.C
  8fc5d6dab19b9f89401818b0138ffa98  gcc/testsuite/g++.dg/parse/crash14.C
  763dc11e85b1839d0dbe23a9460bf2df  gcc/testsuite/g++.dg/parse/crash2.C
  1893d49612e9a07e189ba50eff994ac3  gcc/testsuite/g++.dg/parse/crash3.C
  ea254dd6e59a027998efd9cbcb6f405d  gcc/testsuite/g++.dg/parse/crash4.C
  ca305e88317a3cd781d4bd8bf8fc3fc4  gcc/testsuite/g++.dg/parse/crash5.C
--- 9040,9087 ----
  daf5f5fa938643351cbd008ccc3bb60f  gcc/testsuite/g++.dg/parse/array-size1.C
  c51ee1846816a95e9af6e3d6b9e65695  gcc/testsuite/g++.dg/parse/attr-ctor1.C
  d84032d5d61187d741ca91d1d16ee607  gcc/testsuite/g++.dg/parse/attr1.C
+ 3d4935439f09d7756194078a14580819  gcc/testsuite/g++.dg/parse/attr2.C
+ bfad6471d257f993e34bea9952c00fbe  gcc/testsuite/g++.dg/parse/break-in-for.C
  f804bc56f03de2883d5686276182c955  gcc/testsuite/g++.dg/parse/builtin1.C
  d8b50f7519f0c33caf6717bf07e5c8ae  gcc/testsuite/g++.dg/parse/builtin2.C
! 012dcd0e9b2243e71ee6be0c01ac6a6d  gcc/testsuite/g++.dg/parse/cast1.C
  173232583884d727bdecd6f7deef03db  gcc/testsuite/g++.dg/parse/cast2.C
  51e1b0497a2a8269c9cb3add880916ac  gcc/testsuite/g++.dg/parse/casting-operator1.C
! 69f48dece672507159e28e5ae62e9640  gcc/testsuite/g++.dg/parse/casting-operator2.C
  b768f688a17e6fb93e41198625381298  gcc/testsuite/g++.dg/parse/class1.C
! cc7bbad3182c61322827fb53d2c0de46  gcc/testsuite/g++.dg/parse/comma1.C
  c20d14b721443c68f73728331d14fbe0  gcc/testsuite/g++.dg/parse/concat1.C
+ 73b5fec6848a7932aba299c38c57d8ed  gcc/testsuite/g++.dg/parse/cond1.C
+ 5b95db4d3d95193611271dcf7d869fe5  gcc/testsuite/g++.dg/parse/cond2.C
  88ea1494d81948e2d2af7b240440d149  gcc/testsuite/g++.dg/parse/condexpr1.C
  bfeb624c1fc667410d95e4596057c951  gcc/testsuite/g++.dg/parse/constant1.C
  b9d605265e28097c16a8dd9715ebcd23  gcc/testsuite/g++.dg/parse/constant2.C
  18865792b57aa709f57045520da4abd5  gcc/testsuite/g++.dg/parse/constant3.C
  ae683494d5f26653a04905a9f3115068  gcc/testsuite/g++.dg/parse/constant4.C
+ fbd5251a7743888cd0f874ad5d9fcd1c  gcc/testsuite/g++.dg/parse/constant5.C
+ 1f1ea9b1dfbfdad52826fde93326f9d6  gcc/testsuite/g++.dg/parse/constant6.C
+ e773e9fc506890dda1d6fbb37fd77ae4  gcc/testsuite/g++.dg/parse/constant7.C
  4bbd76fea706d6a9331c87b6b7b8a538  gcc/testsuite/g++.dg/parse/constructor1.C
  372cd66c0636977b2eaf4be6b4310a42  gcc/testsuite/g++.dg/parse/constructor2.C
  5a399fbfb7b6718be8ad9eb3ea24af68  gcc/testsuite/g++.dg/parse/conv_op1.C
  721a281ff33124a1c49ed8d68d2419fb  gcc/testsuite/g++.dg/parse/crash1.C
! 206fc7088f21a3e8ffcf7aaa9bb5d682  gcc/testsuite/g++.dg/parse/crash10.C
! 0e20fe99bab483b4815e6a1440a5891b  gcc/testsuite/g++.dg/parse/crash11.C
! 4a8547d6e5e9ad152ded7589f1f6f824  gcc/testsuite/g++.dg/parse/crash12.C
! 3b73d2a22d7abe1b3454cf524a31bd3c  gcc/testsuite/g++.dg/parse/crash13.C
  8fc5d6dab19b9f89401818b0138ffa98  gcc/testsuite/g++.dg/parse/crash14.C
+ a61247b0784709761dc6bf67cf0c5a0c  gcc/testsuite/g++.dg/parse/crash15.C
+ 886f2139bd5d589dfe753d49868c3d6d  gcc/testsuite/g++.dg/parse/crash16.C
+ c6c2edb9b4b6063b7b59ccdb42101a6a  gcc/testsuite/g++.dg/parse/crash17.C
+ 538f0f1bf0cea39406cc427e43ee96f9  gcc/testsuite/g++.dg/parse/crash18.C
+ 885300f8f442ade64d801eeb7dc2d3ec  gcc/testsuite/g++.dg/parse/crash19.C
  763dc11e85b1839d0dbe23a9460bf2df  gcc/testsuite/g++.dg/parse/crash2.C
+ 2aa78a265f417cad90be2f9570f9934b  gcc/testsuite/g++.dg/parse/crash20.C
+ 8444b86ea68112c837b56c5795ffea98  gcc/testsuite/g++.dg/parse/crash21.C
+ 935f48c0cb54ac17ff9501473c95ab77  gcc/testsuite/g++.dg/parse/crash22.C
+ 8b8f5d08ed05973b2184f7b2d97418e4  gcc/testsuite/g++.dg/parse/crash23.C
+ 2d0d8584a6096ef0ba4c486d09f3620e  gcc/testsuite/g++.dg/parse/crash24.C
+ e3496ce9889e97cda81ccaf581b0f310  gcc/testsuite/g++.dg/parse/crash25.C
  1893d49612e9a07e189ba50eff994ac3  gcc/testsuite/g++.dg/parse/crash3.C
  ea254dd6e59a027998efd9cbcb6f405d  gcc/testsuite/g++.dg/parse/crash4.C
  ca305e88317a3cd781d4bd8bf8fc3fc4  gcc/testsuite/g++.dg/parse/crash5.C
*************** ca305e88317a3cd781d4bd8bf8fc3fc4  gcc/te
*** 8560,8565 ****
--- 9089,9095 ----
  34393b72e5dec85fca930dee15e2f669  gcc/testsuite/g++.dg/parse/crash7.C
  7005dafb22f16db5b002267544ee383f  gcc/testsuite/g++.dg/parse/crash9.C
  5940e29a523673e2c47048c21c11d678  gcc/testsuite/g++.dg/parse/ctor1.C
+ 31da095055ef151d5be0868d53a4bdcb  gcc/testsuite/g++.dg/parse/ctor2.C
  7c7ea7012460ffe514a8512545b63e58  gcc/testsuite/g++.dg/parse/dce1.C
  df9db7311c0d595f6920ed8afb795193  gcc/testsuite/g++.dg/parse/decl-specifier-1.C
  c00f5fd7ac2236c50e1b9a1db2a54adb  gcc/testsuite/g++.dg/parse/def-tmpl-arg1.C
*************** cc3bbadad96b1783abf727940e6be572  gcc/te
*** 8570,8597 ****
  bdbfe5453980b13fed6df11afd4e2141  gcc/testsuite/g++.dg/parse/defarg5.C
  8649c92bbc4962e03bb01e44973f0119  gcc/testsuite/g++.dg/parse/defarg6.C
  df79a42075eeb5573f55e49dcd6c933e  gcc/testsuite/g++.dg/parse/defarg7.C
  a406f4dfcc4d1199effdd47c1f57d137  gcc/testsuite/g++.dg/parse/direct-initialization-2.C
  c8d90b5459dbdf7bf29e5b2a79f38d17  gcc/testsuite/g++.dg/parse/dtor1.C
  1d7ced46ba93cd282dde965b7f3d48b1  gcc/testsuite/g++.dg/parse/dtor2.C
! 563730976241b1fc542b14ba2dbb0a70  gcc/testsuite/g++.dg/parse/dtor3.C
  0e5bfee2fe061692451a1e06a97362d4  gcc/testsuite/g++.dg/parse/dtor4.C
  c2a5649592cbbe88e85ed2dcd1b7cc0f  gcc/testsuite/g++.dg/parse/dupl-tmpl-args1.C
! 0b205933b711e595594b0373985e2bab  gcc/testsuite/g++.dg/parse/elab1.C
! 483789f7fe65ac9a110022a53ba0da8e  gcc/testsuite/g++.dg/parse/elab2.C
  bffa59fb0720de69133074cfe6a10f52  gcc/testsuite/g++.dg/parse/enum1.C
  5899bb448a99b1043a6627a8f00344af  gcc/testsuite/g++.dg/parse/error1.C
  d656216ea9a3c459dc105586a70fc044  gcc/testsuite/g++.dg/parse/error10.C
! 19ec87503923204963d1e8247990b5ad  gcc/testsuite/g++.dg/parse/error11.C
  58b7fbfa77bd0093604a2e86ba4067c7  gcc/testsuite/g++.dg/parse/error12.C
  02573359d2754a9c808fe60eb0b1772f  gcc/testsuite/g++.dg/parse/error13.C
  3eee6eb286c85b86b1f6e10106c5e196  gcc/testsuite/g++.dg/parse/error14.C
! c4dca238ea883ea08d984e7a79d6f2aa  gcc/testsuite/g++.dg/parse/error16.C
  54e06c0eb136c04514ea5cc3d9a3d47c  gcc/testsuite/g++.dg/parse/error2.C
  084975cd7bb1d3eebc89ae616304cc2d  gcc/testsuite/g++.dg/parse/error20.C
! 92457f59b8c53b27d2abb5153dbd0e04  gcc/testsuite/g++.dg/parse/error21.C
! bd5fa47573be109567f5e6033cafb368  gcc/testsuite/g++.dg/parse/error22.C
  f63dab38cf31aff68685555cdb1ac7eb  gcc/testsuite/g++.dg/parse/error3.C
! 849036018bf7587c662f268d5fe15906  gcc/testsuite/g++.dg/parse/error4.C
  ea770bc8baba1ff568123ffafbe4b714  gcc/testsuite/g++.dg/parse/error5.C
  06dcf8d448f3c709a15f1fb7c56d6c14  gcc/testsuite/g++.dg/parse/error6.C
  dcc1266f8e17ee0091e4295c74f6786f  gcc/testsuite/g++.dg/parse/error7.C
--- 9100,9139 ----
  bdbfe5453980b13fed6df11afd4e2141  gcc/testsuite/g++.dg/parse/defarg5.C
  8649c92bbc4962e03bb01e44973f0119  gcc/testsuite/g++.dg/parse/defarg6.C
  df79a42075eeb5573f55e49dcd6c933e  gcc/testsuite/g++.dg/parse/defarg7.C
+ e2fbf3072476c0cbc11390fbb8a885c4  gcc/testsuite/g++.dg/parse/defarg8.C
  a406f4dfcc4d1199effdd47c1f57d137  gcc/testsuite/g++.dg/parse/direct-initialization-2.C
  c8d90b5459dbdf7bf29e5b2a79f38d17  gcc/testsuite/g++.dg/parse/dtor1.C
  1d7ced46ba93cd282dde965b7f3d48b1  gcc/testsuite/g++.dg/parse/dtor2.C
! 910d21c43d1e636c0d63d98205e45a4a  gcc/testsuite/g++.dg/parse/dtor3.C
  0e5bfee2fe061692451a1e06a97362d4  gcc/testsuite/g++.dg/parse/dtor4.C
+ 07c4924bc1a93f3f44905648f906e33c  gcc/testsuite/g++.dg/parse/dtor5.C
  c2a5649592cbbe88e85ed2dcd1b7cc0f  gcc/testsuite/g++.dg/parse/dupl-tmpl-args1.C
! 0901bd8fea5e1a75a81cb181e356de1b  gcc/testsuite/g++.dg/parse/elab1.C
! 785d047c5536a633da6511c5c90214a2  gcc/testsuite/g++.dg/parse/elab2.C
  bffa59fb0720de69133074cfe6a10f52  gcc/testsuite/g++.dg/parse/enum1.C
+ 06d19cbedd1d62affd5a8ee99eaa7c6c  gcc/testsuite/g++.dg/parse/enum2.C
  5899bb448a99b1043a6627a8f00344af  gcc/testsuite/g++.dg/parse/error1.C
  d656216ea9a3c459dc105586a70fc044  gcc/testsuite/g++.dg/parse/error10.C
! d224035dac6cc9f4c1e2b29711e16a3d  gcc/testsuite/g++.dg/parse/error11.C
  58b7fbfa77bd0093604a2e86ba4067c7  gcc/testsuite/g++.dg/parse/error12.C
  02573359d2754a9c808fe60eb0b1772f  gcc/testsuite/g++.dg/parse/error13.C
  3eee6eb286c85b86b1f6e10106c5e196  gcc/testsuite/g++.dg/parse/error14.C
! b5474a7e9a781d7edcbb1d71558b873b  gcc/testsuite/g++.dg/parse/error15.C
! c9f4bb9af3336d92cc417bce43ba5f1d  gcc/testsuite/g++.dg/parse/error16.C
! 548393227d64ea85d1a87126b077fd1d  gcc/testsuite/g++.dg/parse/error17.C
! f618f19eed12a2f42a90ed086fc71cf4  gcc/testsuite/g++.dg/parse/error18.C
! a2d11e8e72d5a1195c4fa858b2015762  gcc/testsuite/g++.dg/parse/error19.C
  54e06c0eb136c04514ea5cc3d9a3d47c  gcc/testsuite/g++.dg/parse/error2.C
  084975cd7bb1d3eebc89ae616304cc2d  gcc/testsuite/g++.dg/parse/error20.C
! a23885e9450835e05d8c560a10768c45  gcc/testsuite/g++.dg/parse/error21.C
! 78c701104f84a18e4522e93e298e7de1  gcc/testsuite/g++.dg/parse/error22.C
! 98d08f63be304cf6aaa6cea85945db38  gcc/testsuite/g++.dg/parse/error23.C
! 3682e1e81a4986578496954424fa75a1  gcc/testsuite/g++.dg/parse/error24.C
! c695ee4ac93b3b43ec8cb9fd7a5cb337  gcc/testsuite/g++.dg/parse/error25.C
! 26d04d49ef2df20c355c614977768a47  gcc/testsuite/g++.dg/parse/error26.C
! d35d2a18172ea4f58edad98fd1336d80  gcc/testsuite/g++.dg/parse/error27.C
  f63dab38cf31aff68685555cdb1ac7eb  gcc/testsuite/g++.dg/parse/error3.C
! 62ef99f818a9cbb6fa43de9db49745e6  gcc/testsuite/g++.dg/parse/error4.C
  ea770bc8baba1ff568123ffafbe4b714  gcc/testsuite/g++.dg/parse/error5.C
  06dcf8d448f3c709a15f1fb7c56d6c14  gcc/testsuite/g++.dg/parse/error6.C
  dcc1266f8e17ee0091e4295c74f6786f  gcc/testsuite/g++.dg/parse/error7.C
*************** dcc1266f8e17ee0091e4295c74f6786f  gcc/te
*** 8600,8621 ****
  6ce4845871d2fdf4427f15cf7d40570b  gcc/testsuite/g++.dg/parse/explicit1.C
  d5e1867a018baeb589c4bfc1ab21e892  gcc/testsuite/g++.dg/parse/expr1.C
  1105f7ddc8706bb30766e905fade9f55  gcc/testsuite/g++.dg/parse/expr2.C
  ce0d46f2d60d16814d3d9c5b74aa6e41  gcc/testsuite/g++.dg/parse/extern-C-1.C
  607c4c06d2daa0d87b677b1ad9fbc84b  gcc/testsuite/g++.dg/parse/friend1.C
! 3999ae939bf31a1ae1fe0ca8491611f8  gcc/testsuite/g++.dg/parse/friend2.C
  fcc030c9d8d11fcc0dc0610cd6499a55  gcc/testsuite/g++.dg/parse/friend3.C
  ead8df5d9d4cf435bf4e3cf134c0131c  gcc/testsuite/g++.dg/parse/friend4.C
  e8e9b52687fc710dc5ded14930091f3f  gcc/testsuite/g++.dg/parse/func-def1.C
  8bf1527135b5cd5516b6bbd9bd9c62d2  gcc/testsuite/g++.dg/parse/funptr1.C
  59cf3a0d4f7187fecece4eca6e3a2c71  gcc/testsuite/g++.dg/parse/fused-params1.C
  9326901f7db3032f59fb639815b474a6  gcc/testsuite/g++.dg/parse/inline1.C
! b4236696ac5f4b4ada11ac1056644a9d  gcc/testsuite/g++.dg/parse/int-as-enum1.C
  e005a8916811050710ecc80c202837ed  gcc/testsuite/g++.dg/parse/invalid-op1.C
  86c78a03857a188fc9175d78d5d62c34  gcc/testsuite/g++.dg/parse/lookup1.C
  467d03fdcc01cdf24c21d2264e026db6  gcc/testsuite/g++.dg/parse/lookup2.C
  8b453ceddcbffd0e3d6527b5b989a6e3  gcc/testsuite/g++.dg/parse/lookup3.C
  0df586078c3c48e038440a354879ed6a  gcc/testsuite/g++.dg/parse/lookup4.C
  5bf071422354fabefd854d62e3983105  gcc/testsuite/g++.dg/parse/missing-template1.C
  fe86870b21fda02350088a1a430beacb  gcc/testsuite/g++.dg/parse/named_ops.C
  da081f6d9aba0da47081b44fc4725588  gcc/testsuite/g++.dg/parse/namespace1.C
  00440bee143466373a89c2be7136a42b  gcc/testsuite/g++.dg/parse/namespace10.C
--- 9142,9166 ----
  6ce4845871d2fdf4427f15cf7d40570b  gcc/testsuite/g++.dg/parse/explicit1.C
  d5e1867a018baeb589c4bfc1ab21e892  gcc/testsuite/g++.dg/parse/expr1.C
  1105f7ddc8706bb30766e905fade9f55  gcc/testsuite/g++.dg/parse/expr2.C
+ 6d7be91bc2c8c6e24eeb0e2834b30879  gcc/testsuite/g++.dg/parse/expr3.C
  ce0d46f2d60d16814d3d9c5b74aa6e41  gcc/testsuite/g++.dg/parse/extern-C-1.C
  607c4c06d2daa0d87b677b1ad9fbc84b  gcc/testsuite/g++.dg/parse/friend1.C
! ae8288fe09de8b635d6006a2c82ededf  gcc/testsuite/g++.dg/parse/friend2.C
  fcc030c9d8d11fcc0dc0610cd6499a55  gcc/testsuite/g++.dg/parse/friend3.C
  ead8df5d9d4cf435bf4e3cf134c0131c  gcc/testsuite/g++.dg/parse/friend4.C
  e8e9b52687fc710dc5ded14930091f3f  gcc/testsuite/g++.dg/parse/func-def1.C
  8bf1527135b5cd5516b6bbd9bd9c62d2  gcc/testsuite/g++.dg/parse/funptr1.C
  59cf3a0d4f7187fecece4eca6e3a2c71  gcc/testsuite/g++.dg/parse/fused-params1.C
  9326901f7db3032f59fb639815b474a6  gcc/testsuite/g++.dg/parse/inline1.C
! 194fae02a7ea638b6847a1ab70d2bc49  gcc/testsuite/g++.dg/parse/int-as-enum1.C
  e005a8916811050710ecc80c202837ed  gcc/testsuite/g++.dg/parse/invalid-op1.C
+ 8365138adc32f061216ba303876a05da  gcc/testsuite/g++.dg/parse/local-class1.C
  86c78a03857a188fc9175d78d5d62c34  gcc/testsuite/g++.dg/parse/lookup1.C
  467d03fdcc01cdf24c21d2264e026db6  gcc/testsuite/g++.dg/parse/lookup2.C
  8b453ceddcbffd0e3d6527b5b989a6e3  gcc/testsuite/g++.dg/parse/lookup3.C
  0df586078c3c48e038440a354879ed6a  gcc/testsuite/g++.dg/parse/lookup4.C
  5bf071422354fabefd854d62e3983105  gcc/testsuite/g++.dg/parse/missing-template1.C
+ 2a6bb7eee1c4c9ef55c8fb4a46785607  gcc/testsuite/g++.dg/parse/mutable1.C
  fe86870b21fda02350088a1a430beacb  gcc/testsuite/g++.dg/parse/named_ops.C
  da081f6d9aba0da47081b44fc4725588  gcc/testsuite/g++.dg/parse/namespace1.C
  00440bee143466373a89c2be7136a42b  gcc/testsuite/g++.dg/parse/namespace10.C
*************** f2f11787a32c9c0f104d8d5887ef98b4  gcc/te
*** 8657,8667 ****
--- 9202,9219 ----
  0b6e70fcda1144496301b037c71b1b76  gcc/testsuite/g++.dg/parse/parse5.C
  6f332b616f8c038758d35e02dd2d6de3  gcc/testsuite/g++.dg/parse/parse6.C
  c203de39cbb4bd246d0e315aa6662a15  gcc/testsuite/g++.dg/parse/parse7.C
+ 5a9d33aff7826f90760a0154af35d9f0  gcc/testsuite/g++.dg/parse/pragma1.C
+ 7eaeb137f1381aa12b62c1f144a7a711  gcc/testsuite/g++.dg/parse/pragma2.C
  2ec4898222ed00ed700c0d02a75f2d1f  gcc/testsuite/g++.dg/parse/primary-expression-1.C
  a7c7523f78d6f162791c48963beb5abd  gcc/testsuite/g++.dg/parse/ptrmem1.C
+ 2f2fc795a372828b256da823dbe94a7a  gcc/testsuite/g++.dg/parse/ptrmem2.C
+ 67912a62c1c6def2348fa74a9f9f5549  gcc/testsuite/g++.dg/parse/ptrmem3.C
  ee6ac3b84366a978a8fd11d55b342fb7  gcc/testsuite/g++.dg/parse/qualified1.C
  824f236b15bcc9ff8b13f7275ea14210  gcc/testsuite/g++.dg/parse/qualified2.C
+ 322abe6d2d840b6218ecf16b70637d21  gcc/testsuite/g++.dg/parse/qualified3.C
+ 8d6d8891281e77e95edf66cda3bc270f  gcc/testsuite/g++.dg/parse/redef1.C
  176cd37bac0e17d41ebe5f535df4a12c  gcc/testsuite/g++.dg/parse/ref1.C
+ 4abcac0dee0cfac256d9277250176464  gcc/testsuite/g++.dg/parse/repo1.C
  b935282cf7b22d6ccc8bb31b59d7fc4e  gcc/testsuite/g++.dg/parse/ret-type1.C
  e15793f5a0e0612952ad2afcf4a24f88  gcc/testsuite/g++.dg/parse/ret-type2.C
  ae012a859dc73387cd1384e7e2c86bc9  gcc/testsuite/g++.dg/parse/saved1.C
*************** d4b9b09e269301b7b313930e30ee615a  gcc/te
*** 8672,8678 ****
  306b5f567acd6eaa85224e96d73ce3b9  gcc/testsuite/g++.dg/parse/stmtexpr1.C
  1b488068dbc8a397f00a9357343a316b  gcc/testsuite/g++.dg/parse/stmtexpr2.C
  ccb9c7711485ad860e4cdd6e7509872a  gcc/testsuite/g++.dg/parse/stmtexpr3.C
! dd7e62299b7edc7cc9a7ce18ebe05558  gcc/testsuite/g++.dg/parse/struct-as-enum1.C
  3dad07cbf6929262693afc2ecdc53b66  gcc/testsuite/g++.dg/parse/template1.C
  e09de720f2c9e56b0965a0866614ebb9  gcc/testsuite/g++.dg/parse/template10.C
  e27cd941f0cc2426c0ef84a7925d30a4  gcc/testsuite/g++.dg/parse/template11.C
--- 9224,9233 ----
  306b5f567acd6eaa85224e96d73ce3b9  gcc/testsuite/g++.dg/parse/stmtexpr1.C
  1b488068dbc8a397f00a9357343a316b  gcc/testsuite/g++.dg/parse/stmtexpr2.C
  ccb9c7711485ad860e4cdd6e7509872a  gcc/testsuite/g++.dg/parse/stmtexpr3.C
! bf3916285ed2309a4ee27696a63242d1  gcc/testsuite/g++.dg/parse/struct-1.C
! 7add62309fb207e986f0912f0444b18b  gcc/testsuite/g++.dg/parse/struct-2.C
! 9ea0f9eb74ca962b92bb9cd0d459bc60  gcc/testsuite/g++.dg/parse/struct-3.C
! 2849035c73e7279e59253069897dbb25  gcc/testsuite/g++.dg/parse/struct-as-enum1.C
  3dad07cbf6929262693afc2ecdc53b66  gcc/testsuite/g++.dg/parse/template1.C
  e09de720f2c9e56b0965a0866614ebb9  gcc/testsuite/g++.dg/parse/template10.C
  e27cd941f0cc2426c0ef84a7925d30a4  gcc/testsuite/g++.dg/parse/template11.C
*************** eb5012efbf2e76d0649338687d64eab1  gcc/te
*** 8688,8709 ****
  9d8fc7cacf35614d028c3c92df825236  gcc/testsuite/g++.dg/parse/template7.C
  a76a003b61428c2be731bd20905309c2  gcc/testsuite/g++.dg/parse/template8.C
  8d7f58bec6415ec7c0a530e4992c5857  gcc/testsuite/g++.dg/parse/template9.C
! ee3b912ad388a47c276d72bcbdd5db5c  gcc/testsuite/g++.dg/parse/tmpl-outside1.C
  46e5b7b0e2493a6b4b30cb9948f3f116  gcc/testsuite/g++.dg/parse/tmpl-tmpl-operator1.C
  e4f4b43529be2f0b5495a04aa36578d0  gcc/testsuite/g++.dg/parse/tmpl-tmpl-param1.C
! dfe24263058dc07b27b11df0f232c9db  gcc/testsuite/g++.dg/parse/too-many-tmpl-args1.C
  fe312b5e22af7a61d39446fc1257d020  gcc/testsuite/g++.dg/parse/try-catch-1.C
! c5e8a4100956e98fe9a54472546e9748  gcc/testsuite/g++.dg/parse/typedef1.C
  9ee9f56c9a70d5a91693ee906cc9e208  gcc/testsuite/g++.dg/parse/typedef2.C
! ad306b472383a2d022b240112ede2bf3  gcc/testsuite/g++.dg/parse/typedef3.C
! 30d8cbd7e95eecc1592ff4814fa0c53c  gcc/testsuite/g++.dg/parse/typedef4.C
! 14ab45db5ff0ca8deff7a3438ccab219  gcc/testsuite/g++.dg/parse/typedef5.C
  816e586cce785bd66d07622b7e076afe  gcc/testsuite/g++.dg/parse/typename1.C
  cbccebd52f80be1acc21283b8d2ec373  gcc/testsuite/g++.dg/parse/typename2.C
  395c7fdd493455c7e9ebc3b33b0a1c1c  gcc/testsuite/g++.dg/parse/typename3.C
  95be08d8904a9272cf1346d3a396852b  gcc/testsuite/g++.dg/parse/typename4.C
! 20204d9551f185474e9f17442cea7e02  gcc/testsuite/g++.dg/parse/typename5.C
! b0f5ec75318aa529434dbc4805531cdb  gcc/testsuite/g++.dg/parse/typename6.C
  ad9b24c5c7ea39c6bc5b3c4d8a5e8dee  gcc/testsuite/g++.dg/parse/undefined1.C
  0d9c002feba0c28525ef93144889e786  gcc/testsuite/g++.dg/parse/undefined2.C
  6e1b295c76607b6498e4d28f8752eeb8  gcc/testsuite/g++.dg/parse/undefined3.C
--- 9243,9267 ----
  9d8fc7cacf35614d028c3c92df825236  gcc/testsuite/g++.dg/parse/template7.C
  a76a003b61428c2be731bd20905309c2  gcc/testsuite/g++.dg/parse/template8.C
  8d7f58bec6415ec7c0a530e4992c5857  gcc/testsuite/g++.dg/parse/template9.C
! d1b85a75a7455c01de59c0e264c80d44  gcc/testsuite/g++.dg/parse/tmpl-outside1.C
  46e5b7b0e2493a6b4b30cb9948f3f116  gcc/testsuite/g++.dg/parse/tmpl-tmpl-operator1.C
  e4f4b43529be2f0b5495a04aa36578d0  gcc/testsuite/g++.dg/parse/tmpl-tmpl-param1.C
! 672686dff6805759367040aa46d134c3  gcc/testsuite/g++.dg/parse/too-many-tmpl-args1.C
  fe312b5e22af7a61d39446fc1257d020  gcc/testsuite/g++.dg/parse/try-catch-1.C
! 090e0ecfb088a06e2c98b34c59b893d6  gcc/testsuite/g++.dg/parse/typedef1.C
  9ee9f56c9a70d5a91693ee906cc9e208  gcc/testsuite/g++.dg/parse/typedef2.C
! 764a15535446568823450824bc4e3320  gcc/testsuite/g++.dg/parse/typedef3.C
! 01868060d91b3d4c08d8c0220dd7a8fc  gcc/testsuite/g++.dg/parse/typedef4.C
! 56fdf3d81f367c8975dfb60012affa35  gcc/testsuite/g++.dg/parse/typedef5.C
! 174e24e49c802ceec036dddc815a14ff  gcc/testsuite/g++.dg/parse/typedef6.C
! 71e8821fc281e76f6affdbe9259cfad2  gcc/testsuite/g++.dg/parse/typedef7.C
  816e586cce785bd66d07622b7e076afe  gcc/testsuite/g++.dg/parse/typename1.C
  cbccebd52f80be1acc21283b8d2ec373  gcc/testsuite/g++.dg/parse/typename2.C
  395c7fdd493455c7e9ebc3b33b0a1c1c  gcc/testsuite/g++.dg/parse/typename3.C
  95be08d8904a9272cf1346d3a396852b  gcc/testsuite/g++.dg/parse/typename4.C
! 979c20e0b12da5f2d9ab3fc8b1d0e674  gcc/testsuite/g++.dg/parse/typename5.C
! 4b927bd8b5a48134a8c3189cc3af28b3  gcc/testsuite/g++.dg/parse/typename6.C
! a784ae29947cdab5c0e0645aeae4d438  gcc/testsuite/g++.dg/parse/typename7.C
  ad9b24c5c7ea39c6bc5b3c4d8a5e8dee  gcc/testsuite/g++.dg/parse/undefined1.C
  0d9c002feba0c28525ef93144889e786  gcc/testsuite/g++.dg/parse/undefined2.C
  6e1b295c76607b6498e4d28f8752eeb8  gcc/testsuite/g++.dg/parse/undefined3.C
*************** ac80fae137a8a1ef9021d6e173ca8090  gcc/te
*** 8718,8723 ****
--- 9276,9285 ----
  87484ba10cbb539c4f84ec334125b020  gcc/testsuite/g++.dg/parse/wrong-inline1.C
  15aea326d8b4d518b4dadcac97f9f297  gcc/testsuite/g++.dg/pch/empty.C
  d41d8cd98f00b204e9800998ecf8427e  gcc/testsuite/g++.dg/pch/empty.Hs
+ 0fe6f1480902d6dccb349304faa9020c  gcc/testsuite/g++.dg/pch/externc-1.C
+ 51038396a6c08ae383fd050b30653dab  gcc/testsuite/g++.dg/pch/externc-1.Hs
+ 950e6e376ceab867a4fcf2d35904ab08  gcc/testsuite/g++.dg/pch/pch.C
+ 95603c8965412870090ed14011f4b123  gcc/testsuite/g++.dg/pch/pch.Hs
  e7fc9da1437a84380fb848e17fc9b2d4  gcc/testsuite/g++.dg/pch/pch.exp
  956a76bba7ed55fcdd73d80efdfa4c90  gcc/testsuite/g++.dg/pch/static-1.C
  4aaad0cfa4436b8cd8b37b1bf218edc8  gcc/testsuite/g++.dg/pch/static-1.Hs
*************** a5379c2bad433698a01b3bc2d5473a2e  gcc/te
*** 8727,8736 ****
  0c6d2560d6750bc4e884ee3e3fd8cb98  gcc/testsuite/g++.dg/pch/system-2.Hs
  5e2076ec1abc6d548370361f9390b543  gcc/testsuite/g++.dg/pch/uninst.C
  667e18d65092886bfa6db626eb370e7c  gcc/testsuite/g++.dg/pch/uninst.Hs
  7345c9463c7d47c7d425463846af6b14  gcc/testsuite/g++.dg/rtti/crash1.C
  7c2277ddbea5545cda84aae94fdb88ad  gcc/testsuite/g++.dg/rtti/cv1.C
  e99f9196ab382e1c6b73d9f555e7790c  gcc/testsuite/g++.dg/rtti/dyncast1.C
! 1dc043b9406a493c0f3b194f47a33de2  gcc/testsuite/g++.dg/rtti/tinfo1.C
  a4ca49fa3677bf87a27b0e961eab1cee  gcc/testsuite/g++.dg/rtti/typeid1.C
  f03a5377eca516c74e77fcf76b40f948  gcc/testsuite/g++.dg/rtti/typeid2.C
  3e23755748cd7e94d3bc13c5d2f78cc9  gcc/testsuite/g++.dg/rtti/typeid3.C
--- 9289,9300 ----
  0c6d2560d6750bc4e884ee3e3fd8cb98  gcc/testsuite/g++.dg/pch/system-2.Hs
  5e2076ec1abc6d548370361f9390b543  gcc/testsuite/g++.dg/pch/uninst.C
  667e18d65092886bfa6db626eb370e7c  gcc/testsuite/g++.dg/pch/uninst.Hs
+ 3c027648f765cf5846e0b1be267760f6  gcc/testsuite/g++.dg/pch/wchar-1.C
+ 67d1ff82e247bea84a92bc888972c000  gcc/testsuite/g++.dg/pch/wchar-1.Hs
  7345c9463c7d47c7d425463846af6b14  gcc/testsuite/g++.dg/rtti/crash1.C
  7c2277ddbea5545cda84aae94fdb88ad  gcc/testsuite/g++.dg/rtti/cv1.C
  e99f9196ab382e1c6b73d9f555e7790c  gcc/testsuite/g++.dg/rtti/dyncast1.C
! bfa84a2543ef0faf7b6418433067bbf0  gcc/testsuite/g++.dg/rtti/tinfo1.C
  a4ca49fa3677bf87a27b0e961eab1cee  gcc/testsuite/g++.dg/rtti/typeid1.C
  f03a5377eca516c74e77fcf76b40f948  gcc/testsuite/g++.dg/rtti/typeid2.C
  3e23755748cd7e94d3bc13c5d2f78cc9  gcc/testsuite/g++.dg/rtti/typeid3.C
*************** c2f61b50e48834b5d5d3a3ee446c0a75  gcc/te
*** 8744,8755 ****
--- 9308,9353 ----
  6207971ee12833ca8c60b82c3ec757f4  gcc/testsuite/g++.dg/special/conpr-4.C
  a4b2f7a79d25cf80aacd81a4102da546  gcc/testsuite/g++.dg/special/ecos.exp
  1d00d1c826d883bfd1e44ac751b5667d  gcc/testsuite/g++.dg/special/initp1.C
+ f660af37e71a300b94fc53e6bc686185  gcc/testsuite/g++.dg/tc1/dr1.C
+ 5ba9aee3df18dfefd98548e7c460f24d  gcc/testsuite/g++.dg/tc1/dr101.C
+ 0171a0e113ae996be50db625ac66d450  gcc/testsuite/g++.dg/tc1/dr108.C
+ 3592a0b845ee849a03440c75d39ae12b  gcc/testsuite/g++.dg/tc1/dr127.C
+ 1b0c9fccd7b07ffc338e9e9ca4dbb8c0  gcc/testsuite/g++.dg/tc1/dr128.C
+ 0af74303a4251b24669c368429e4af91  gcc/testsuite/g++.dg/tc1/dr135.C
+ a6b204a1733f1ef91a83ebba5d3a48be  gcc/testsuite/g++.dg/tc1/dr137.C
+ a6d46728c39c24256b63197af59b95f1  gcc/testsuite/g++.dg/tc1/dr142.C
+ f7329311a5df0c534f2191fee7f45ea7  gcc/testsuite/g++.dg/tc1/dr147.C
+ e07683f5144e2b0e6b8503adbfd283cd  gcc/testsuite/g++.dg/tc1/dr152.C
+ 9b56ad73b780b825e0de60463c83386f  gcc/testsuite/g++.dg/tc1/dr159.C
+ 62aa8921c6705fdab59b10a7be7f39b9  gcc/testsuite/g++.dg/tc1/dr161.C
+ 3e61e5bdc2b1492780331f39f942586f  gcc/testsuite/g++.dg/tc1/dr164.C
+ 06d562ccb2d6b2cac1cde8f7c8b14df7  gcc/testsuite/g++.dg/tc1/dr166.C
+ e179dfb3000fb9a0d490d2ace3e1f74b  gcc/testsuite/g++.dg/tc1/dr176.C
+ 54a7e43eb51f59e7eae694e23b7ef1f6  gcc/testsuite/g++.dg/tc1/dr179.C
+ 9704d0caf0975b804de4cf5a0218a1db  gcc/testsuite/g++.dg/tc1/dr185.C
+ 007afeacb36d4756871511f3e7e8ea6f  gcc/testsuite/g++.dg/tc1/dr188.C
+ 4054b08eabfa5224673bbaec6f055b6b  gcc/testsuite/g++.dg/tc1/dr193.C
+ 11d8e489cc200e109dbdfe58fd9c1fcf  gcc/testsuite/g++.dg/tc1/dr194.C
+ 0af12371ac925505bc0a0b0b9c2aa770  gcc/testsuite/g++.dg/tc1/dr20.C
+ aac5a5f3e293f7cd54bb405e8e82fa17  gcc/testsuite/g++.dg/tc1/dr213.C
+ d227f60fa4be5b52028628722cfa4992  gcc/testsuite/g++.dg/tc1/dr217.C
+ 9c539eaced56bf5f6dfcc87de03577a2  gcc/testsuite/g++.dg/tc1/dr48.C
+ 24d32bbd4bb8de8bd03020c359210754  gcc/testsuite/g++.dg/tc1/dr49.C
+ ab02334dcfe468c8b08f2a78eceb2b94  gcc/testsuite/g++.dg/tc1/dr52.C
+ 6a9b2ff3865ebd4b9b4a24ea9e5fa1e0  gcc/testsuite/g++.dg/tc1/dr68.C
+ 99fbd5404170a32ec3b81a4c87114aa9  gcc/testsuite/g++.dg/tc1/dr74.C
+ 4dd95811a9583fd5b2412c2c99d7dff9  gcc/testsuite/g++.dg/tc1/dr76.C
+ fddf6e4104e367506b1483b55a539b63  gcc/testsuite/g++.dg/tc1/dr80.C
+ c241bed1d85ccf57402c8efd46ab9b8c  gcc/testsuite/g++.dg/tc1/dr85.C
+ bf475bf32acceb9eb23c5b5b7013f7fe  gcc/testsuite/g++.dg/tc1/dr90.C
+ 2b6b832186c8ccf57001b2888f9dec54  gcc/testsuite/g++.dg/tc1/dr94.C
  1c360b630dc5835068452f918bda8fb6  gcc/testsuite/g++.dg/template/access1.C
  71d21b2797de6268bae8a876a61f64ac  gcc/testsuite/g++.dg/template/access10.C
  3e281e7d850dbc06f3a5f05af26acd3d  gcc/testsuite/g++.dg/template/access11.C
  20c6114a3d4d0119b052ef6635d54a2c  gcc/testsuite/g++.dg/template/access12.C
  76f5c8b19b7f609c01aedaee827b1931  gcc/testsuite/g++.dg/template/access13.C
  6c52ea9bb0501f9eab65ebd5d8a85cb9  gcc/testsuite/g++.dg/template/access14.C
+ fc82819a276388c85441dd10835850d1  gcc/testsuite/g++.dg/template/access15.C
  34713e6cecf3994070f0815b8298b83c  gcc/testsuite/g++.dg/template/access2.C
  b0b266d7d49c11a09888ad00208e4cf8  gcc/testsuite/g++.dg/template/access3.C
  7ea6af968e54287945d17d2352e36fd6  gcc/testsuite/g++.dg/template/access4.C
*************** baa333203039ed72606c24494f2ff44e  gcc/te
*** 8766,8771 ****
--- 9364,9372 ----
  f455d543dc6a4d6f270fe652fcc368e7  gcc/testsuite/g++.dg/template/arg3.C
  99d7b1deba3ad5e11fcbd2dc7d70e9ee  gcc/testsuite/g++.dg/template/array1-1.C
  075227803fea6455eb958b3d2d173e9b  gcc/testsuite/g++.dg/template/array1-2.C
+ 2960ad36eda739b652d2efa379834c5c  gcc/testsuite/g++.dg/template/array10.C
+ 5c9702e760be4db613f93c64564000c5  gcc/testsuite/g++.dg/template/array11.C
+ 29ac13549ace1bb08c2a718d6a2f3d31  gcc/testsuite/g++.dg/template/array13.C
  b197e9f6e5275f99d9ff3c22fe947550  gcc/testsuite/g++.dg/template/array2-1.C
  8da7cf5d73e9871b3bac6287dfe96d0a  gcc/testsuite/g++.dg/template/array2-2.C
  353ce65cd4b47cb87d4a7e33038e372d  gcc/testsuite/g++.dg/template/array3.C
*************** b197e9f6e5275f99d9ff3c22fe947550  gcc/te
*** 8773,8780 ****
--- 9374,9386 ----
  c557bdb58ff52b9fc368185880923627  gcc/testsuite/g++.dg/template/array5.C
  294448858892b33e7116237b86ab785a  gcc/testsuite/g++.dg/template/array6.C
  579905889abdf110f78879708a88d557  gcc/testsuite/g++.dg/template/array7.C
+ 9135445bfc294af3cf8b77142f5e8782  gcc/testsuite/g++.dg/template/array8.C
+ 9ff0e683b6d55fee7915dd8f28470138  gcc/testsuite/g++.dg/template/array9.C
+ 63a5e3d5f634ef4eb13aa4a9d62a8cd7  gcc/testsuite/g++.dg/template/assign1.C
  11d89720e8ea4a5f11553338c13ffab9  gcc/testsuite/g++.dg/template/call1.C
  e459df3ddd572b111e8694073c95e5b9  gcc/testsuite/g++.dg/template/call2.C
+ 3ec4b7824a9a83b377fe22af12deb661  gcc/testsuite/g++.dg/template/call3.C
+ dae4547b0ed98c262ad1adff2778e177  gcc/testsuite/g++.dg/template/cast1.C
  a8067ac68b36a7f6b81ed3e72bd5d218  gcc/testsuite/g++.dg/template/char1.C
  706f2857327f695c7b984df9d14be0b0  gcc/testsuite/g++.dg/template/class1.C
  4a9fdbf9e37ab379d97118860f6e5744  gcc/testsuite/g++.dg/template/class2.C
*************** a8067ac68b36a7f6b81ed3e72bd5d218  gcc/te
*** 8783,8788 ****
--- 9389,9395 ----
  4336c9181e48a94368c9c6bbf4270562  gcc/testsuite/g++.dg/template/cond2.C
  3dfcddf50f883d0eabd3e0a6a6f3be44  gcc/testsuite/g++.dg/template/cond3.C
  8e0316960b82711ee5f56b8b469d01b1  gcc/testsuite/g++.dg/template/cond4.C
+ b57e771003b4e6bae893080e79c82fbc  gcc/testsuite/g++.dg/template/cond5.C
  32f254d8ff7fc2dadfbb4100169c8710  gcc/testsuite/g++.dg/template/conv1.C
  383f6618c1ccaddea23b36ff23d6d35e  gcc/testsuite/g++.dg/template/conv2.C
  be5017725e9889a47d07ba0d3a3464ff  gcc/testsuite/g++.dg/template/conv3.C
*************** e50e217f7da35dc497156675b2547e44  gcc/te
*** 8802,8813 ****
  0b7b35a94bb1a8a5457b2c3bd299d5e2  gcc/testsuite/g++.dg/template/crash16.C
  78327c2d24f8befdc8bd1b4f71aa2928  gcc/testsuite/g++.dg/template/crash17.C
  3a58be91fa3ebac110f04aa317762b98  gcc/testsuite/g++.dg/template/crash18.C
! f106c764c1ea09eba893e334ab4c71d8  gcc/testsuite/g++.dg/template/crash19.C
  1518569fc4b985c190f2f25aa5e5e503  gcc/testsuite/g++.dg/template/crash2.C
  e11ee09376a4af9fd0b4e8a0131f1ad5  gcc/testsuite/g++.dg/template/crash21.C
  1a93146cc62f110f6b65fd8e3eb06d85  gcc/testsuite/g++.dg/template/crash22.C
  1cb212177b7a7b17863561096ca1b123  gcc/testsuite/g++.dg/template/crash24.C
  18fc9fd079fbcb8ff4e2ad941df67718  gcc/testsuite/g++.dg/template/crash3.C
  4565662b8ea1b02f11db4b1627917693  gcc/testsuite/g++.dg/template/crash4.C
  503d2ceca1151ace69073bc94b2e3181  gcc/testsuite/g++.dg/template/crash6.C
  60528c5a46bc3e76f4a191231f3cc608  gcc/testsuite/g++.dg/template/crash7.C
--- 9409,9434 ----
  0b7b35a94bb1a8a5457b2c3bd299d5e2  gcc/testsuite/g++.dg/template/crash16.C
  78327c2d24f8befdc8bd1b4f71aa2928  gcc/testsuite/g++.dg/template/crash17.C
  3a58be91fa3ebac110f04aa317762b98  gcc/testsuite/g++.dg/template/crash18.C
! 482f6588b4cd650830268422bd72523d  gcc/testsuite/g++.dg/template/crash19.C
  1518569fc4b985c190f2f25aa5e5e503  gcc/testsuite/g++.dg/template/crash2.C
+ 7d60f1e42e3a0cb9fb843525c06fc428  gcc/testsuite/g++.dg/template/crash20.C
  e11ee09376a4af9fd0b4e8a0131f1ad5  gcc/testsuite/g++.dg/template/crash21.C
  1a93146cc62f110f6b65fd8e3eb06d85  gcc/testsuite/g++.dg/template/crash22.C
+ 0ebb4bf976e610e29316a5634702a44e  gcc/testsuite/g++.dg/template/crash23.C
  1cb212177b7a7b17863561096ca1b123  gcc/testsuite/g++.dg/template/crash24.C
+ a9a41c255aa794f8caef16dd63a3534d  gcc/testsuite/g++.dg/template/crash25.C
+ 17d811daa3052b89558edc8df7e9ee0e  gcc/testsuite/g++.dg/template/crash26.C
+ 6ef1f361b05f74553ccdc456e5d76ea9  gcc/testsuite/g++.dg/template/crash27.C
+ 902d626992584b53e5dc2b44257c55a4  gcc/testsuite/g++.dg/template/crash28.C
+ ceec3c489e5f321a136749ba214020ac  gcc/testsuite/g++.dg/template/crash29.C
  18fc9fd079fbcb8ff4e2ad941df67718  gcc/testsuite/g++.dg/template/crash3.C
+ 4a6fae58852a7d58b5b482d48d97d11f  gcc/testsuite/g++.dg/template/crash30.C
+ e3731e3425655eda73d8d1ac61cdadb3  gcc/testsuite/g++.dg/template/crash31.C
+ 87893a60b74b135376629089c2649169  gcc/testsuite/g++.dg/template/crash32.C
+ 204eff887d15d36069d7065b01240cf5  gcc/testsuite/g++.dg/template/crash33.C
+ c1ad0abca1fcb788f91f39712cb4d025  gcc/testsuite/g++.dg/template/crash34.C
+ 4b59704e9c69fd39fc829312b324cb56  gcc/testsuite/g++.dg/template/crash35.C
+ f8bee91d29458817363bd2ca4c94d704  gcc/testsuite/g++.dg/template/crash36.C
  4565662b8ea1b02f11db4b1627917693  gcc/testsuite/g++.dg/template/crash4.C
  503d2ceca1151ace69073bc94b2e3181  gcc/testsuite/g++.dg/template/crash6.C
  60528c5a46bc3e76f4a191231f3cc608  gcc/testsuite/g++.dg/template/crash7.C
*************** eb5e9f0376abe643c647f3a9d5b69532  gcc/te
*** 8821,8852 ****
  05e0d875681f42cc0eb951378ac07bd0  gcc/testsuite/g++.dg/template/decl2.C
  a1ee69de58a5087bc0a5772d3b7f8309  gcc/testsuite/g++.dg/template/deduce1.C
  3cc52990bce905a42f91a2dab1c65c77  gcc/testsuite/g++.dg/template/deduce2.C
  e56cdb80a6b4148add333d45d0d83d9a  gcc/testsuite/g++.dg/template/defarg1.C
  21ce3e77355010aaab1b59936da8bfbb  gcc/testsuite/g++.dg/template/defarg2.C
  e55baeaf118c452b9f707b8236ee86b1  gcc/testsuite/g++.dg/template/defarg3.C
  64d2588370b2c020d9d5828deadfc7dc  gcc/testsuite/g++.dg/template/defarg4.C
  08e2480f72bcb72f3f0c69f74625bd4c  gcc/testsuite/g++.dg/template/delete1.C
  f9f88160ac0a908bdfd7daa99a6ea4d0  gcc/testsuite/g++.dg/template/dependent-expr1.C
  a012c762c225aa954561b51390054da7  gcc/testsuite/g++.dg/template/dependent-expr2.C
! 828128dfab47e31ddffd657ecf720f8c  gcc/testsuite/g++.dg/template/dependent-expr3.C
! 48e868e254420483abd493f22898c173  gcc/testsuite/g++.dg/template/dependent-expr4.C
  f23d748a70179cdd1a4176b5cf3a3e9b  gcc/testsuite/g++.dg/template/dependent-name1.C
  18d61b100652dfe4816b8b9c6cefa923  gcc/testsuite/g++.dg/template/dependent-name2.C
  c10faccbba72797e793c4697fe233f9c  gcc/testsuite/g++.dg/template/dtor1.C
  71d10b5b4cd6cb6cb8f6be930603b8e8  gcc/testsuite/g++.dg/template/dtor2.C
  9c78ecb5ca87b2a81cbd9c1796b2c13e  gcc/testsuite/g++.dg/template/eh1.C
  318b45c84de8e1474d71ee390dc7b68c  gcc/testsuite/g++.dg/template/elab1.C
  7c10af58e57cd68a834ce883259ef847  gcc/testsuite/g++.dg/template/enum1.C
  5fb321d2debea87feaa0815b488d0835  gcc/testsuite/g++.dg/template/enum2.C
  dfe8fe9abce8be55414485a111a8c15f  gcc/testsuite/g++.dg/template/enum3.C
  118d8ffd607a579db3ddbc9662179566  gcc/testsuite/g++.dg/template/enum4.C
  20225edc3aed6edaf1b6d1219318d2df  gcc/testsuite/g++.dg/template/error1.C
! 81a80cd0bc50e1e128a4df0c367d8392  gcc/testsuite/g++.dg/template/error10.C
  92cc57f022fdde0a0e1d5b1eb3c129b3  gcc/testsuite/g++.dg/template/error11.C
  6fe651ff5a3f3b8ff9d8a9597b35e055  gcc/testsuite/g++.dg/template/error12.C
  23d1d88880eac44a4f6c4209f4d1c9c0  gcc/testsuite/g++.dg/template/error13.C
  059b8fc25423ba0f718bb1feff4898e7  gcc/testsuite/g++.dg/template/error14.C
! acd723667286ce52622c9e14dba981f5  gcc/testsuite/g++.dg/template/error15.C
  40d71cae88dab51bbeef2ad00f2bbca8  gcc/testsuite/g++.dg/template/error2.C
  0e96862a75ffea6e3b8357e5251534dd  gcc/testsuite/g++.dg/template/error3.C
  85340063cfaafdde79cb0b7bff303541  gcc/testsuite/g++.dg/template/error4.C
--- 9442,9481 ----
  05e0d875681f42cc0eb951378ac07bd0  gcc/testsuite/g++.dg/template/decl2.C
  a1ee69de58a5087bc0a5772d3b7f8309  gcc/testsuite/g++.dg/template/deduce1.C
  3cc52990bce905a42f91a2dab1c65c77  gcc/testsuite/g++.dg/template/deduce2.C
+ c8c5dde19f7b188668caeeb506ac6852  gcc/testsuite/g++.dg/template/deduce3.C
  e56cdb80a6b4148add333d45d0d83d9a  gcc/testsuite/g++.dg/template/defarg1.C
  21ce3e77355010aaab1b59936da8bfbb  gcc/testsuite/g++.dg/template/defarg2.C
  e55baeaf118c452b9f707b8236ee86b1  gcc/testsuite/g++.dg/template/defarg3.C
  64d2588370b2c020d9d5828deadfc7dc  gcc/testsuite/g++.dg/template/defarg4.C
+ 84d085b3ed907df1747cc523efd8d714  gcc/testsuite/g++.dg/template/defarg5.C
  08e2480f72bcb72f3f0c69f74625bd4c  gcc/testsuite/g++.dg/template/delete1.C
  f9f88160ac0a908bdfd7daa99a6ea4d0  gcc/testsuite/g++.dg/template/dependent-expr1.C
  a012c762c225aa954561b51390054da7  gcc/testsuite/g++.dg/template/dependent-expr2.C
! c386ca54a462a789ddb63d04e8dfa817  gcc/testsuite/g++.dg/template/dependent-expr3.C
! b4bc25a86f512c4a58cc90654edd346f  gcc/testsuite/g++.dg/template/dependent-expr4.C
  f23d748a70179cdd1a4176b5cf3a3e9b  gcc/testsuite/g++.dg/template/dependent-name1.C
  18d61b100652dfe4816b8b9c6cefa923  gcc/testsuite/g++.dg/template/dependent-name2.C
  c10faccbba72797e793c4697fe233f9c  gcc/testsuite/g++.dg/template/dtor1.C
  71d10b5b4cd6cb6cb8f6be930603b8e8  gcc/testsuite/g++.dg/template/dtor2.C
+ 6a5f3c8b85f78b5e2f9ffd773a7cca5b  gcc/testsuite/g++.dg/template/dtor3.C
+ d36b25b301071f0b5e78a18397661427  gcc/testsuite/g++.dg/template/dtor4.C
  9c78ecb5ca87b2a81cbd9c1796b2c13e  gcc/testsuite/g++.dg/template/eh1.C
  318b45c84de8e1474d71ee390dc7b68c  gcc/testsuite/g++.dg/template/elab1.C
  7c10af58e57cd68a834ce883259ef847  gcc/testsuite/g++.dg/template/enum1.C
  5fb321d2debea87feaa0815b488d0835  gcc/testsuite/g++.dg/template/enum2.C
  dfe8fe9abce8be55414485a111a8c15f  gcc/testsuite/g++.dg/template/enum3.C
  118d8ffd607a579db3ddbc9662179566  gcc/testsuite/g++.dg/template/enum4.C
+ 109e68e063340fe9a814b152f4df9eb3  gcc/testsuite/g++.dg/template/enum5.C
  20225edc3aed6edaf1b6d1219318d2df  gcc/testsuite/g++.dg/template/error1.C
! 627734dfde951481bfc5e44cef796345  gcc/testsuite/g++.dg/template/error10.C
  92cc57f022fdde0a0e1d5b1eb3c129b3  gcc/testsuite/g++.dg/template/error11.C
  6fe651ff5a3f3b8ff9d8a9597b35e055  gcc/testsuite/g++.dg/template/error12.C
  23d1d88880eac44a4f6c4209f4d1c9c0  gcc/testsuite/g++.dg/template/error13.C
  059b8fc25423ba0f718bb1feff4898e7  gcc/testsuite/g++.dg/template/error14.C
! a59fe7dfb1e1084d1f2ddcf45eb89e0b  gcc/testsuite/g++.dg/template/error15.C
! 709638c9b094e580ab80981a248856e2  gcc/testsuite/g++.dg/template/error16.C
! 318fb5de2a600d72ad81c69f2a112f1c  gcc/testsuite/g++.dg/template/error17.C
! e0e0adf8e99a8d206f7e74340f4b67e5  gcc/testsuite/g++.dg/template/error18.C
  40d71cae88dab51bbeef2ad00f2bbca8  gcc/testsuite/g++.dg/template/error2.C
  0e96862a75ffea6e3b8357e5251534dd  gcc/testsuite/g++.dg/template/error3.C
  85340063cfaafdde79cb0b7bff303541  gcc/testsuite/g++.dg/template/error4.C
*************** a988dc6a097a8766258a32544791c7db  gcc/te
*** 8863,8868 ****
--- 9492,9499 ----
  3b0207ca15de6320946949f657d95b9a  gcc/testsuite/g++.dg/template/explicit3.C
  3f7c086b1b4dd5261f5ced979a21b04b  gcc/testsuite/g++.dg/template/explicit4.C
  bfbe469c91f678acc5c06f6a7a92f9c6  gcc/testsuite/g++.dg/template/explicit5.C
+ 0f1992cf38a7f4a3d4febc06bbe2dc39  gcc/testsuite/g++.dg/template/explicit6.C
+ d9a08dd82988a25d2840d767d582837f  gcc/testsuite/g++.dg/template/expr1.C
  f8aa89e0edae3ef78836a8cc046f0550  gcc/testsuite/g++.dg/template/field1.C
  c6cdc41eef6b33a55c43db84fd711a3f  gcc/testsuite/g++.dg/template/friend.C
  bdf8365204c19eeb87434d85b7139d2d  gcc/testsuite/g++.dg/template/friend10.C
*************** c81920c34b3ea8295fc494118d9e89af  gcc/te
*** 8887,8892 ****
--- 9518,9526 ----
  a0d74e429e0416fe8fd207b1ee020c7a  gcc/testsuite/g++.dg/template/friend29.C
  d4c8a44deef0bfb76c6964c75b741416  gcc/testsuite/g++.dg/template/friend3.C
  1d0be2d7ae4ecc088986fba42e7ee292  gcc/testsuite/g++.dg/template/friend30.C
+ d13d2ed4fcdd1cfd0d65b89c9308ee8b  gcc/testsuite/g++.dg/template/friend31.C
+ 1a310350de7fdb99dfff79d55a46d325  gcc/testsuite/g++.dg/template/friend32.C
+ ed2b58353effe4479fb3ba174d53040c  gcc/testsuite/g++.dg/template/friend33.C
  56e71f86759e703664c2ed50998932fd  gcc/testsuite/g++.dg/template/friend4.C
  c9137614e9385e52c606c2d6e976e585  gcc/testsuite/g++.dg/template/friend5.C
  d16da0e6f160e02bc23c4d98080f1644  gcc/testsuite/g++.dg/template/friend6.C
*************** d16da0e6f160e02bc23c4d98080f1644  gcc/te
*** 8894,8899 ****
--- 9528,9534 ----
  ceb858e95982ac0af2e9168f31aea229  gcc/testsuite/g++.dg/template/friend8.C
  96a3d94189ae209bcff5f2f75bc7ca6d  gcc/testsuite/g++.dg/template/friend9.C
  d5d24fc94d133229a10c5b13f44c253b  gcc/testsuite/g++.dg/template/func1.C
+ 43017cf348a37638085196f74ac68fe3  gcc/testsuite/g++.dg/template/incomplete1.C
  39b2eb7bc0411ced0e2b3d32a933c34c  gcc/testsuite/g++.dg/template/inherit.C
  13bd5309700c34e9e01c5bd7fd620d7b  gcc/testsuite/g++.dg/template/inherit2.C
  1c9360dccd50f544e413d4c00432d88e  gcc/testsuite/g++.dg/template/inherit3.C
*************** d5d24fc94d133229a10c5b13f44c253b  gcc/te
*** 8901,8910 ****
  f30fe425de51d4cb2ab5ff05b71d616a  gcc/testsuite/g++.dg/template/init1.C
  76f88c13708d18ca711ab8287d1caac9  gcc/testsuite/g++.dg/template/init2.C
  64314d0aa5b3600547adc69b42ab8e3c  gcc/testsuite/g++.dg/template/init3.C
  2d167e5f0ea8c84539b7c56039fb2785  gcc/testsuite/g++.dg/template/inline1.C
! 9829904512df361c8a9cdf7b59b02d8e  gcc/testsuite/g++.dg/template/instantiate1.C
  88e1ec74b340410f99e5bf69122404bd  gcc/testsuite/g++.dg/template/instantiate2.C
! 3e655c681987dbb85b7b254a1e676ba8  gcc/testsuite/g++.dg/template/instantiate3.C
  7d69f16e359b40571c6da6dde60dde8d  gcc/testsuite/g++.dg/template/instantiate4.C
  9c3723fb899f725987c18cd77571a105  gcc/testsuite/g++.dg/template/instantiate5.C
  1b065aa49cdac44198ed227ed0da9cb5  gcc/testsuite/g++.dg/template/instantiate6.C
--- 9536,9546 ----
  f30fe425de51d4cb2ab5ff05b71d616a  gcc/testsuite/g++.dg/template/init1.C
  76f88c13708d18ca711ab8287d1caac9  gcc/testsuite/g++.dg/template/init2.C
  64314d0aa5b3600547adc69b42ab8e3c  gcc/testsuite/g++.dg/template/init3.C
+ e920cba477d63f2866ea0710ce55a2ce  gcc/testsuite/g++.dg/template/init4.C
  2d167e5f0ea8c84539b7c56039fb2785  gcc/testsuite/g++.dg/template/inline1.C
! 5c4068d934fb1e5d161851d00744bfc8  gcc/testsuite/g++.dg/template/instantiate1.C
  88e1ec74b340410f99e5bf69122404bd  gcc/testsuite/g++.dg/template/instantiate2.C
! 3a83c5f6cd6ca2488c8e80403a7fa930  gcc/testsuite/g++.dg/template/instantiate3.C
  7d69f16e359b40571c6da6dde60dde8d  gcc/testsuite/g++.dg/template/instantiate4.C
  9c3723fb899f725987c18cd77571a105  gcc/testsuite/g++.dg/template/instantiate5.C
  1b065aa49cdac44198ed227ed0da9cb5  gcc/testsuite/g++.dg/template/instantiate6.C
*************** ca15724a75c249b0fc3b99b81ab59cf9  gcc/te
*** 8913,8921 ****
  5e527c865bacdb52386cdb2f216a99d4  gcc/testsuite/g++.dg/template/koenig2.C
  84d2678d3ce8241c254dd0501f0e4816  gcc/testsuite/g++.dg/template/koenig3.C
  56c1c2325d188ec369a6eca6c10766b7  gcc/testsuite/g++.dg/template/koenig4.C
! 943e0002dac4ec0ee5e03ce176acd99f  gcc/testsuite/g++.dg/template/local1.C
  d32b0f4cfabbf7cf6a3f55db155096d2  gcc/testsuite/g++.dg/template/local2.C
  e254df20b082728d0e04a8e1b3b18557  gcc/testsuite/g++.dg/template/local3.C
  858241029bc9c5f2b0eb96ca1ff057a8  gcc/testsuite/g++.dg/template/lookup1.C
  ef4080e7e34db3ddfd9daab5b8f9e3a3  gcc/testsuite/g++.dg/template/lookup2.C
  0287287b4b02081228b1429a9526248d  gcc/testsuite/g++.dg/template/lookup3.C
--- 9549,9559 ----
  5e527c865bacdb52386cdb2f216a99d4  gcc/testsuite/g++.dg/template/koenig2.C
  84d2678d3ce8241c254dd0501f0e4816  gcc/testsuite/g++.dg/template/koenig3.C
  56c1c2325d188ec369a6eca6c10766b7  gcc/testsuite/g++.dg/template/koenig4.C
! 02dae2280971fe5ff910e6472b7a407a  gcc/testsuite/g++.dg/template/koenig5.C
! b7860e67547fa0e658cae5b27a73d61b  gcc/testsuite/g++.dg/template/local1.C
  d32b0f4cfabbf7cf6a3f55db155096d2  gcc/testsuite/g++.dg/template/local2.C
  e254df20b082728d0e04a8e1b3b18557  gcc/testsuite/g++.dg/template/local3.C
+ 5af1dc0a99419b2b0585a3d675dba030  gcc/testsuite/g++.dg/template/local4.C
  858241029bc9c5f2b0eb96ca1ff057a8  gcc/testsuite/g++.dg/template/lookup1.C
  ef4080e7e34db3ddfd9daab5b8f9e3a3  gcc/testsuite/g++.dg/template/lookup2.C
  0287287b4b02081228b1429a9526248d  gcc/testsuite/g++.dg/template/lookup3.C
*************** ef4080e7e34db3ddfd9daab5b8f9e3a3  gcc/te
*** 8923,8936 ****
--- 9561,9585 ----
  3ab3f4b8b6e13f0c873ee865529608c0  gcc/testsuite/g++.dg/template/lookup5.C
  90ee492e747c2328ed39e4f06ad61d36  gcc/testsuite/g++.dg/template/lookup6.C
  863f99213222c2c03bf6c2f03bfc91c6  gcc/testsuite/g++.dg/template/lookup7.C
+ 33119bbc7489f718bc456a2baae44253  gcc/testsuite/g++.dg/template/mangle1.C
+ 60b56ccdf831c52444e531d3de0de848  gcc/testsuite/g++.dg/template/mem_func_ptr.C
  06216f93446b1e4df8acba1818eeb751  gcc/testsuite/g++.dg/template/member.C
  cabe816ff29ed547a0c78ab109ad97d0  gcc/testsuite/g++.dg/template/member2.C
  7485d7d4ac0efdee0b9c7fe84580e8a0  gcc/testsuite/g++.dg/template/member3.C
  7f0db13593e12c1671ab63412653ea6c  gcc/testsuite/g++.dg/template/member4.C
+ 2488e0cd89b19bc0b7c483d1683970d1  gcc/testsuite/g++.dg/template/member5.C
  8dca5b65d4eeaa3cbfa61a1861a850d2  gcc/testsuite/g++.dg/template/memclass1.C
  cdd15f6514749074086ff789caa565f2  gcc/testsuite/g++.dg/template/memclass2.C
  0d33a29a97363269ef67e175452d1251  gcc/testsuite/g++.dg/template/memclass3.C
  57fc8e37f6a64f03e3bea12e44f46909  gcc/testsuite/g++.dg/template/memfriend1.C
+ 88f5f474357358b46b62eb6b6fdc9b8a  gcc/testsuite/g++.dg/template/memfriend10.C
+ 63a099d4fd981493045dce1eefbf9723  gcc/testsuite/g++.dg/template/memfriend11.C
+ 3efbba635759c97e9b452f6d5ba9696a  gcc/testsuite/g++.dg/template/memfriend12.C
+ c4970b1b6d217a07e47b93130aff29c2  gcc/testsuite/g++.dg/template/memfriend13.C
+ cd21edd34d2428c1c7c7904f894a44f7  gcc/testsuite/g++.dg/template/memfriend14.C
+ e08c2136d93161deeca0717986d93ee6  gcc/testsuite/g++.dg/template/memfriend15.C
+ fcfe88e058915708cfbf56cfeebe4a5d  gcc/testsuite/g++.dg/template/memfriend16.C
+ 6c7d080fd1cf3570e2f76d476bedf92e  gcc/testsuite/g++.dg/template/memfriend17.C
  3087e3c10234e9ef3745a413e6043727  gcc/testsuite/g++.dg/template/memfriend2.C
  fb47ef062f1c0907f4bd591ea44dd1ea  gcc/testsuite/g++.dg/template/memfriend3.C
  9e0baac902249d16ec8e8d97a1ab2371  gcc/testsuite/g++.dg/template/memfriend4.C
*************** b29c5ddfeb79a3077e908d0877024b79  gcc/te
*** 8938,8953 ****
  29022970fa36eb1dc1ee175732b8befa  gcc/testsuite/g++.dg/template/memfriend6.C
  6ac454d02c2028076da019bddc22e1cc  gcc/testsuite/g++.dg/template/memfriend7.C
  975bbbbf89c7ed7467afe0db4642b444  gcc/testsuite/g++.dg/template/memfriend8.C
  c259108bcf2c6fa47c67d35e414eea37  gcc/testsuite/g++.dg/template/meminit1.C
! cb73e6c4aa13559bc0a8531ee661339a  gcc/testsuite/g++.dg/template/meminit2.C
  a028161f345a592e44b9dd2c85780ba8  gcc/testsuite/g++.dg/template/memtmpl1.C
  742c5d9c3baa52309d717d8a67cb74e7  gcc/testsuite/g++.dg/template/memtmpl2.C
  39db6def8c2ae0c295a9f6433ab39375  gcc/testsuite/g++.dg/template/nested1.C
  1cf2f3c9d70e586c16763a10c08d9972  gcc/testsuite/g++.dg/template/nested2.C
! c4e8c253794db761d08cd2c9a31e2af4  gcc/testsuite/g++.dg/template/nested3.C
  b12c9a151e46871b430564ee47c57714  gcc/testsuite/g++.dg/template/nested4.C
  da1df58fc40e198de8f0c5d88494d89e  gcc/testsuite/g++.dg/template/non-dependent1.C
  ac32a3394ac7dad60204cd2cccb6ba46  gcc/testsuite/g++.dg/template/non-dependent10.C
  3ce6c8331c1ddbc56b2c89ca07992343  gcc/testsuite/g++.dg/template/non-dependent2.C
  9c0fc4f566e5de8ff0339df3c3ef274d  gcc/testsuite/g++.dg/template/non-dependent3.C
  98272395e5eb6376be03fdae5b69bac7  gcc/testsuite/g++.dg/template/non-dependent4.C
--- 9587,9606 ----
  29022970fa36eb1dc1ee175732b8befa  gcc/testsuite/g++.dg/template/memfriend6.C
  6ac454d02c2028076da019bddc22e1cc  gcc/testsuite/g++.dg/template/memfriend7.C
  975bbbbf89c7ed7467afe0db4642b444  gcc/testsuite/g++.dg/template/memfriend8.C
+ 6602e9e6cba784386891556ebd44b430  gcc/testsuite/g++.dg/template/memfriend9.C
  c259108bcf2c6fa47c67d35e414eea37  gcc/testsuite/g++.dg/template/meminit1.C
! 73076fcefd97e2bd5133d759a000e987  gcc/testsuite/g++.dg/template/meminit2.C
  a028161f345a592e44b9dd2c85780ba8  gcc/testsuite/g++.dg/template/memtmpl1.C
  742c5d9c3baa52309d717d8a67cb74e7  gcc/testsuite/g++.dg/template/memtmpl2.C
  39db6def8c2ae0c295a9f6433ab39375  gcc/testsuite/g++.dg/template/nested1.C
  1cf2f3c9d70e586c16763a10c08d9972  gcc/testsuite/g++.dg/template/nested2.C
! 2dd76004142f83b603103df120fab7a4  gcc/testsuite/g++.dg/template/nested3.C
  b12c9a151e46871b430564ee47c57714  gcc/testsuite/g++.dg/template/nested4.C
+ 57b33208329c8d10ea904c3d123076a9  gcc/testsuite/g++.dg/template/new1.C
  da1df58fc40e198de8f0c5d88494d89e  gcc/testsuite/g++.dg/template/non-dependent1.C
  ac32a3394ac7dad60204cd2cccb6ba46  gcc/testsuite/g++.dg/template/non-dependent10.C
+ 6f26c028ea69c4705c77b4a0544f848d  gcc/testsuite/g++.dg/template/non-dependent11.C
+ c68de3013fc66d5b9ca387b1f0f294ad  gcc/testsuite/g++.dg/template/non-dependent12.C
  3ce6c8331c1ddbc56b2c89ca07992343  gcc/testsuite/g++.dg/template/non-dependent2.C
  9c0fc4f566e5de8ff0339df3c3ef274d  gcc/testsuite/g++.dg/template/non-dependent3.C
  98272395e5eb6376be03fdae5b69bac7  gcc/testsuite/g++.dg/template/non-dependent4.C
*************** d2f711147c60030525ec70290e759fca  gcc/te
*** 8959,8979 ****
  47543fc2c29d7d8415ae1a41c5ddbc18  gcc/testsuite/g++.dg/template/non-type-template-argument-1.C
  c68d85d18e13eca7b98c51e07b278cf0  gcc/testsuite/g++.dg/template/non-type1.C
  0841e0681f53f5792b711984e991f3a8  gcc/testsuite/g++.dg/template/nontype1.C
  00bcc57cb7d33b0250bf5efd8de34dbf  gcc/testsuite/g++.dg/template/nontype2.C
! eed47bfa7a7d094da7086e17ac45fbc2  gcc/testsuite/g++.dg/template/nontype3.C
! 43a5c7bfdea76685ff6530224fe58305  gcc/testsuite/g++.dg/template/nontype4.C
  e2fa53bda46650ba6012bfead2d13f3e  gcc/testsuite/g++.dg/template/nontype5.C
! cb9019dbb963d35aee9108870b38196e  gcc/testsuite/g++.dg/template/nontype6.C
  72688e70f855e78a966cd593acf9f923  gcc/testsuite/g++.dg/template/ntp1.C
  506fde7f525665b80bb8ae93c21fa34f  gcc/testsuite/g++.dg/template/ntp2.C
  585425c7c24e913a9ccd6656bd75e83e  gcc/testsuite/g++.dg/template/op1.C
  b690784559e05afd43e95b8cf36b03eb  gcc/testsuite/g++.dg/template/operator1.C
  08eba0ef43fd418e3505a0132a2e9c05  gcc/testsuite/g++.dg/template/operator2.C
  51da64bb1a35e2d4a874ecc36ed30236  gcc/testsuite/g++.dg/template/operator3.C
  7e567ad662951a97d90d67420df1d001  gcc/testsuite/g++.dg/template/operator4.C
  6cba2353f6c7917dd350506e390d9379  gcc/testsuite/g++.dg/template/overload1.C
  55cb3ca88be88700e7e00981ae5c08c6  gcc/testsuite/g++.dg/template/overload2.C
  98ebf130b836485f9a7ceae171151be5  gcc/testsuite/g++.dg/template/overload3.C
  e187a317d102d915368fe357726202ba  gcc/testsuite/g++.dg/template/partial-specialization.C
  bb04475dfd1abb6699b6daee337bc7ef  gcc/testsuite/g++.dg/template/partial1.C
  e2ea27f4d30c89986de472da016881a2  gcc/testsuite/g++.dg/template/partial2.C
--- 9612,9640 ----
  47543fc2c29d7d8415ae1a41c5ddbc18  gcc/testsuite/g++.dg/template/non-type-template-argument-1.C
  c68d85d18e13eca7b98c51e07b278cf0  gcc/testsuite/g++.dg/template/non-type1.C
  0841e0681f53f5792b711984e991f3a8  gcc/testsuite/g++.dg/template/nontype1.C
+ c2cc8082649ad5953b27efb310d1929e  gcc/testsuite/g++.dg/template/nontype10.C
+ 9ba9723e8601b19208ac3f8350ee6695  gcc/testsuite/g++.dg/template/nontype11.C
  00bcc57cb7d33b0250bf5efd8de34dbf  gcc/testsuite/g++.dg/template/nontype2.C
! d6f9c639ea162b5b3e91a6a5d10175bf  gcc/testsuite/g++.dg/template/nontype3.C
! f725d274103ab74a7c16aa6087ab401f  gcc/testsuite/g++.dg/template/nontype4.C
  e2fa53bda46650ba6012bfead2d13f3e  gcc/testsuite/g++.dg/template/nontype5.C
! 724d8bc838e222b639da5772510bd3e3  gcc/testsuite/g++.dg/template/nontype6.C
! cee023670861be047d45f0aa6daa937f  gcc/testsuite/g++.dg/template/nontype7.C
! 2db8591db13ac8e8cf2e26468f9d18e3  gcc/testsuite/g++.dg/template/nontype8.C
! 51239a3dafd7ee56283d919ab1900e0a  gcc/testsuite/g++.dg/template/nontype9.C
  72688e70f855e78a966cd593acf9f923  gcc/testsuite/g++.dg/template/ntp1.C
  506fde7f525665b80bb8ae93c21fa34f  gcc/testsuite/g++.dg/template/ntp2.C
+ 0278f61baf9894baa55e08be6e4d1217  gcc/testsuite/g++.dg/template/offsetof1.C
  585425c7c24e913a9ccd6656bd75e83e  gcc/testsuite/g++.dg/template/op1.C
  b690784559e05afd43e95b8cf36b03eb  gcc/testsuite/g++.dg/template/operator1.C
  08eba0ef43fd418e3505a0132a2e9c05  gcc/testsuite/g++.dg/template/operator2.C
  51da64bb1a35e2d4a874ecc36ed30236  gcc/testsuite/g++.dg/template/operator3.C
  7e567ad662951a97d90d67420df1d001  gcc/testsuite/g++.dg/template/operator4.C
+ 0e11abfb73c96739ad546cd85ff3c2e6  gcc/testsuite/g++.dg/template/operator5.C
  6cba2353f6c7917dd350506e390d9379  gcc/testsuite/g++.dg/template/overload1.C
  55cb3ca88be88700e7e00981ae5c08c6  gcc/testsuite/g++.dg/template/overload2.C
  98ebf130b836485f9a7ceae171151be5  gcc/testsuite/g++.dg/template/overload3.C
+ 7d2609e7f82311b3100345f65467e041  gcc/testsuite/g++.dg/template/overload4.C
  e187a317d102d915368fe357726202ba  gcc/testsuite/g++.dg/template/partial-specialization.C
  bb04475dfd1abb6699b6daee337bc7ef  gcc/testsuite/g++.dg/template/partial1.C
  e2ea27f4d30c89986de472da016881a2  gcc/testsuite/g++.dg/template/partial2.C
*************** e2ea27f4d30c89986de472da016881a2  gcc/te
*** 8981,8993 ****
  04907f98f8eab7c64ced6646f5140346  gcc/testsuite/g++.dg/template/pretty1.C
  30d2a35742944aa3c421d0b6d2b41781  gcc/testsuite/g++.dg/template/ptrmem1.C
  aa534276e0095c6eef1fe985651eee58  gcc/testsuite/g++.dg/template/ptrmem10.C
  84010e00560365f022f7d4c351fe97bf  gcc/testsuite/g++.dg/template/ptrmem2.C
  171d82f45a76129388539c01e3212ec9  gcc/testsuite/g++.dg/template/ptrmem3.C
  8e305818c46514392ab9d92800a99d43  gcc/testsuite/g++.dg/template/ptrmem4.C
  c1d71028a4f69f5c3fcfd2fd8a35f919  gcc/testsuite/g++.dg/template/ptrmem5.C
  5b6c44db5254307468bb7a0e6036d363  gcc/testsuite/g++.dg/template/ptrmem6.C
  71bf635a4274ef3549d8487b25847e94  gcc/testsuite/g++.dg/template/ptrmem7.C
! a7425592a9f4f8d88e005ea2096891fa  gcc/testsuite/g++.dg/template/ptrmem8.C
  6cdf7b7a7a495367d144ca4b7238a771  gcc/testsuite/g++.dg/template/ptrmem9.C
  5512deff68cfd95af05439dc39d36f5c  gcc/testsuite/g++.dg/template/qual1.C
  4bcab05d2626fd45890af6154fa22221  gcc/testsuite/g++.dg/template/qual2.C
--- 9642,9657 ----
  04907f98f8eab7c64ced6646f5140346  gcc/testsuite/g++.dg/template/pretty1.C
  30d2a35742944aa3c421d0b6d2b41781  gcc/testsuite/g++.dg/template/ptrmem1.C
  aa534276e0095c6eef1fe985651eee58  gcc/testsuite/g++.dg/template/ptrmem10.C
+ 3efda66f5cb0c71bc4fe744bf0d3d14a  gcc/testsuite/g++.dg/template/ptrmem11.C
+ adf178bf638c6b871c4bd9abf0c44c53  gcc/testsuite/g++.dg/template/ptrmem12.C
+ 97ddc530a1bd61b06c131cfdf61adbec  gcc/testsuite/g++.dg/template/ptrmem13.C
  84010e00560365f022f7d4c351fe97bf  gcc/testsuite/g++.dg/template/ptrmem2.C
  171d82f45a76129388539c01e3212ec9  gcc/testsuite/g++.dg/template/ptrmem3.C
  8e305818c46514392ab9d92800a99d43  gcc/testsuite/g++.dg/template/ptrmem4.C
  c1d71028a4f69f5c3fcfd2fd8a35f919  gcc/testsuite/g++.dg/template/ptrmem5.C
  5b6c44db5254307468bb7a0e6036d363  gcc/testsuite/g++.dg/template/ptrmem6.C
  71bf635a4274ef3549d8487b25847e94  gcc/testsuite/g++.dg/template/ptrmem7.C
! 576432fe3fc396a39fc60699f4f8925a  gcc/testsuite/g++.dg/template/ptrmem8.C
  6cdf7b7a7a495367d144ca4b7238a771  gcc/testsuite/g++.dg/template/ptrmem9.C
  5512deff68cfd95af05439dc39d36f5c  gcc/testsuite/g++.dg/template/qual1.C
  4bcab05d2626fd45890af6154fa22221  gcc/testsuite/g++.dg/template/qual2.C
*************** cf85da2c6ae4bcc2396f5f90e574f5cd  gcc/te
*** 8998,9010 ****
  f5d74cc14dee1391fe409d4d0258396e  gcc/testsuite/g++.dg/template/qualttp12.C
  bbc53060e714151a182a421e8691abd5  gcc/testsuite/g++.dg/template/qualttp13.C
  872b95cdec1729cec20c4f30444d01c5  gcc/testsuite/g++.dg/template/qualttp14.C
! 8031e0560e641a2ea2cb5408242bd0dd  gcc/testsuite/g++.dg/template/qualttp15.C
  d5117f3f1bc5abfa2a210383b5c90542  gcc/testsuite/g++.dg/template/qualttp16.C
  a7a6daf9801ba47ba9d71b2750b8819b  gcc/testsuite/g++.dg/template/qualttp17.C
  bbfca58649b8b1342b8f444ed2a5f1fd  gcc/testsuite/g++.dg/template/qualttp18.C
  5d01ff95ca3a7d8da4e70d7477555e72  gcc/testsuite/g++.dg/template/qualttp19.C
  e1b6f19153852a341aae2955eb8ea280  gcc/testsuite/g++.dg/template/qualttp2.C
! 4f595baf5a62bbf9184b31a100d523c4  gcc/testsuite/g++.dg/template/qualttp20.C
  d7668570c380f7a54655435e409395c9  gcc/testsuite/g++.dg/template/qualttp21.C
  3b637cecee1acb45f1c7f752a8c7732d  gcc/testsuite/g++.dg/template/qualttp22.C
  e76a3792e525e8332039a4589714ddf6  gcc/testsuite/g++.dg/template/qualttp3.C
--- 9662,9674 ----
  f5d74cc14dee1391fe409d4d0258396e  gcc/testsuite/g++.dg/template/qualttp12.C
  bbc53060e714151a182a421e8691abd5  gcc/testsuite/g++.dg/template/qualttp13.C
  872b95cdec1729cec20c4f30444d01c5  gcc/testsuite/g++.dg/template/qualttp14.C
! ebbe781125455c724f34cf709f9a1365  gcc/testsuite/g++.dg/template/qualttp15.C
  d5117f3f1bc5abfa2a210383b5c90542  gcc/testsuite/g++.dg/template/qualttp16.C
  a7a6daf9801ba47ba9d71b2750b8819b  gcc/testsuite/g++.dg/template/qualttp17.C
  bbfca58649b8b1342b8f444ed2a5f1fd  gcc/testsuite/g++.dg/template/qualttp18.C
  5d01ff95ca3a7d8da4e70d7477555e72  gcc/testsuite/g++.dg/template/qualttp19.C
  e1b6f19153852a341aae2955eb8ea280  gcc/testsuite/g++.dg/template/qualttp2.C
! 1a0fb53670ffdba6e518a96ff8d2e29f  gcc/testsuite/g++.dg/template/qualttp20.C
  d7668570c380f7a54655435e409395c9  gcc/testsuite/g++.dg/template/qualttp21.C
  3b637cecee1acb45f1c7f752a8c7732d  gcc/testsuite/g++.dg/template/qualttp22.C
  e76a3792e525e8332039a4589714ddf6  gcc/testsuite/g++.dg/template/qualttp3.C
*************** e66a5900a3714e938128d8f6ef253fd7  gcc/te
*** 9017,9023 ****
--- 9681,9693 ----
  f8629580795249bed77f06a71033ea6f  gcc/testsuite/g++.dg/template/recurse.C
  6a7ca5e4fd47fe37ca29d61be39ecdf2  gcc/testsuite/g++.dg/template/recurse1.C
  c7309345696ac164222361961daab266  gcc/testsuite/g++.dg/template/redecl1.C
+ 8c26da9476ca0b8d2908af7ab2348832  gcc/testsuite/g++.dg/template/redecl2.C
+ 49436cd5609a16d69d797b84c7f00598  gcc/testsuite/g++.dg/template/redecl3.C
  a4b5b3bea62fbee6f7491ea4badfcb0f  gcc/testsuite/g++.dg/template/ref1.C
+ a02f5612e9219b8cd807bc11c6baa86d  gcc/testsuite/g++.dg/template/ref2.C
+ f2fb23ea35e703f79d1cdc054ab2ef86  gcc/testsuite/g++.dg/template/repo1.C
+ 0348e555574e141fa224197155f08d82  gcc/testsuite/g++.dg/template/repo2.C
+ 18bb2e4cfdaa8860e7df2a542f962368  gcc/testsuite/g++.dg/template/repo3.C
  9e9322d04add76d1f767de02d143704b  gcc/testsuite/g++.dg/template/restrict1.C
  b8b893e1844c502297d1e4e9591779ef  gcc/testsuite/g++.dg/template/scope1.C
  e98caaa9887061e13fd115d5af2dd146  gcc/testsuite/g++.dg/template/scope2.C
*************** f459df99e9efaf925b83daefe81c3127  gcc/te
*** 9029,9041 ****
  70e0faea5b000e5fbde589a89ad950bd  gcc/testsuite/g++.dg/template/sizeof4.C
  3732e9c01b98ba779d2beb4a94b1f1a4  gcc/testsuite/g++.dg/template/sizeof5.C
  8d7b68da161169ea74382da5f4a8c8fb  gcc/testsuite/g++.dg/template/sizeof6.C
! 752074d624c5ac6e8baab3199b06d656  gcc/testsuite/g++.dg/template/sizeof7.C
  2c4280f67b1e22c2fbb0f60584f52297  gcc/testsuite/g++.dg/template/spec1.C
  ad21a3b2ad2780aa2209396893143af3  gcc/testsuite/g++.dg/template/spec10.C
  641e90d3e3434fc264671bb60336331b  gcc/testsuite/g++.dg/template/spec11.C
  5887f7286f7e8d72346052184c20f45e  gcc/testsuite/g++.dg/template/spec12.C
  e9df140ef024c36c2a7761c13a353434  gcc/testsuite/g++.dg/template/spec13.C
  3aa4f9ac6e238807a3c568af3718bf62  gcc/testsuite/g++.dg/template/spec17.C
  1133f61b139dcbae6d0d62799d821c00  gcc/testsuite/g++.dg/template/spec2.C
  f5581de159c7b5592926840478d5c5fb  gcc/testsuite/g++.dg/template/spec3.C
  2a1077a58e27e49e8f92e9122c330685  gcc/testsuite/g++.dg/template/spec4.C
--- 9699,9718 ----
  70e0faea5b000e5fbde589a89ad950bd  gcc/testsuite/g++.dg/template/sizeof4.C
  3732e9c01b98ba779d2beb4a94b1f1a4  gcc/testsuite/g++.dg/template/sizeof5.C
  8d7b68da161169ea74382da5f4a8c8fb  gcc/testsuite/g++.dg/template/sizeof6.C
! 0c4917a1350de8892aea4bca2d593036  gcc/testsuite/g++.dg/template/sizeof7.C
! 84c8e28b3b15370829046813c1fbb7b3  gcc/testsuite/g++.dg/template/sizeof8.C
! 12df473d69cf94653ec8c2821cfe853f  gcc/testsuite/g++.dg/template/sizeof9.C
  2c4280f67b1e22c2fbb0f60584f52297  gcc/testsuite/g++.dg/template/spec1.C
  ad21a3b2ad2780aa2209396893143af3  gcc/testsuite/g++.dg/template/spec10.C
  641e90d3e3434fc264671bb60336331b  gcc/testsuite/g++.dg/template/spec11.C
  5887f7286f7e8d72346052184c20f45e  gcc/testsuite/g++.dg/template/spec12.C
  e9df140ef024c36c2a7761c13a353434  gcc/testsuite/g++.dg/template/spec13.C
+ 8c1a1dce043f50d8d866a9779357c645  gcc/testsuite/g++.dg/template/spec14.C
+ 8b7c0af60c19361bb1633001dcfc804d  gcc/testsuite/g++.dg/template/spec15.C
+ 5a8a045ac6085df23731c4996caa4bf0  gcc/testsuite/g++.dg/template/spec16.C
  3aa4f9ac6e238807a3c568af3718bf62  gcc/testsuite/g++.dg/template/spec17.C
+ f9db6cb49e2fa6c6968fe9e4a6f2a111  gcc/testsuite/g++.dg/template/spec18.C
+ 5875d17f53135a37cf17b7694a214131  gcc/testsuite/g++.dg/template/spec19.C
  1133f61b139dcbae6d0d62799d821c00  gcc/testsuite/g++.dg/template/spec2.C
  f5581de159c7b5592926840478d5c5fb  gcc/testsuite/g++.dg/template/spec3.C
  2a1077a58e27e49e8f92e9122c330685  gcc/testsuite/g++.dg/template/spec4.C
*************** c815e2045db2912ff4ac5e6626f81264  gcc/te
*** 9045,9063 ****
--- 9722,9749 ----
  f52bdc68a6a195dec8e61722088ae977  gcc/testsuite/g++.dg/template/spec8.C
  03e26c658592047cdea1d686aa9cfacf  gcc/testsuite/g++.dg/template/spec9.C
  0511bd747b9cf7ef36970e1f15d3bb0b  gcc/testsuite/g++.dg/template/static1.C
+ 22b831fe887011fbf9bec264ae3b8112  gcc/testsuite/g++.dg/template/static10.C
+ d208baa6490e1bda86ed7140d7cc233b  gcc/testsuite/g++.dg/template/static11.C
+ 97b78f3262c5a9c8ea6c35ce97b1d10d  gcc/testsuite/g++.dg/template/static12.C
  aa3092ca5ce677694305032fa51a9486  gcc/testsuite/g++.dg/template/static2.C
  7df73f11db0cd12460178945538e192f  gcc/testsuite/g++.dg/template/static3.C
  aff424d9ff8963c8d5348142b8c5e169  gcc/testsuite/g++.dg/template/static4.C
  e5538275a590133055e80d957d76fab1  gcc/testsuite/g++.dg/template/static5.C
  40796a2389c81fb63a7c826d2e3a06af  gcc/testsuite/g++.dg/template/static6.C
+ eb951aea121806ff5e87bd2848d57e98  gcc/testsuite/g++.dg/template/static7.C
  6dbdfa91bc4e4ea29a3ec7f4b44ba16f  gcc/testsuite/g++.dg/template/static8.C
  a32b04831b19a5b704aa786b184b761b  gcc/testsuite/g++.dg/template/static9.C
+ 53fcc90b25ad8744232fbb7b915d3d89  gcc/testsuite/g++.dg/template/stmtexpr1.C
  3a8d2192bd70af17c62b2fedd505e1e1  gcc/testsuite/g++.dg/template/strlen1.C
  65ffda86719727c560bb58b2ddc37078  gcc/testsuite/g++.dg/template/subst1.C
  2f6494bf04dd960a886f4ba09c1a1bcf  gcc/testsuite/g++.dg/template/template-id-1.C
  0be4c2c5ddbd37c0d240eb1027a57b40  gcc/testsuite/g++.dg/template/template-id-2.C
  016674e9e056bbda052e457c8bf91720  gcc/testsuite/g++.dg/template/ttp1.C
  3ef16395deaff8acf9155525bf631589  gcc/testsuite/g++.dg/template/ttp10.C
+ 7bb81c37796ee57799e21215b653e144  gcc/testsuite/g++.dg/template/ttp11.C
+ 40c193a789a7cdd7cf2b6550ea810505  gcc/testsuite/g++.dg/template/ttp12.C
+ dcb32e2136f330749a2276bb4d351b2b  gcc/testsuite/g++.dg/template/ttp13.C
+ a99b4acb0aa2cbfbcb364a40252b33e0  gcc/testsuite/g++.dg/template/ttp14.C
  55545b6f734664ea7227a639a1393d4f  gcc/testsuite/g++.dg/template/ttp2.C
  dae42b78445fb03f0f7c80954fe880b4  gcc/testsuite/g++.dg/template/ttp3.C
  ab6711e26bfa413d472fc55475e7cc75  gcc/testsuite/g++.dg/template/ttp4.C
*************** ab6711e26bfa413d472fc55475e7cc75  gcc/te
*** 9065,9073 ****
  ede8e95c1aeeeb0cf1c4cfb0fd860e07  gcc/testsuite/g++.dg/template/ttp6.C
  8ef73a0d2fb7b35129f101b657888692  gcc/testsuite/g++.dg/template/ttp7.C
  ad156dec50f1d7aecc0ad4207046c838  gcc/testsuite/g++.dg/template/ttp8.C
  d7a01e97d99f1b74700f8e173b381e7e  gcc/testsuite/g++.dg/template/type1.C
  7bd261d29e895f70198d2995a62cbd35  gcc/testsuite/g++.dg/template/type2.C
! 8fe7741e568f03c7d5dd6282d8e18784  gcc/testsuite/g++.dg/template/typedef1.C
  5608e09eb5e126cbf511d7b99a577ef4  gcc/testsuite/g++.dg/template/typename1.C
  6f0e8ab81674c7673d0604ed5e32996d  gcc/testsuite/g++.dg/template/typename2.C
  baaa577db3fc32c6dd18e8cfa76705eb  gcc/testsuite/g++.dg/template/typename3.C
--- 9751,9761 ----
  ede8e95c1aeeeb0cf1c4cfb0fd860e07  gcc/testsuite/g++.dg/template/ttp6.C
  8ef73a0d2fb7b35129f101b657888692  gcc/testsuite/g++.dg/template/ttp7.C
  ad156dec50f1d7aecc0ad4207046c838  gcc/testsuite/g++.dg/template/ttp8.C
+ 32ec8290dcb76d620e429687f0236c40  gcc/testsuite/g++.dg/template/ttp9.C
  d7a01e97d99f1b74700f8e173b381e7e  gcc/testsuite/g++.dg/template/type1.C
  7bd261d29e895f70198d2995a62cbd35  gcc/testsuite/g++.dg/template/type2.C
! 3c8d3538984363bd4ff0ecceec6b5f59  gcc/testsuite/g++.dg/template/typedef1.C
! 9dbc8ad1aa7e6168259b0bedccb56f11  gcc/testsuite/g++.dg/template/typedef2.C
  5608e09eb5e126cbf511d7b99a577ef4  gcc/testsuite/g++.dg/template/typename1.C
  6f0e8ab81674c7673d0604ed5e32996d  gcc/testsuite/g++.dg/template/typename2.C
  baaa577db3fc32c6dd18e8cfa76705eb  gcc/testsuite/g++.dg/template/typename3.C
*************** baaa577db3fc32c6dd18e8cfa76705eb  gcc/te
*** 9075,9080 ****
--- 9763,9770 ----
  657b2e18e1c5bda47ab17e796163c009  gcc/testsuite/g++.dg/template/typename5.C
  ed39e1b4f163d77da95d420ba783410c  gcc/testsuite/g++.dg/template/typename6.C
  9108fc5e479d002dfe1d6280ab3a8e35  gcc/testsuite/g++.dg/template/typename7.C
+ a991f3b843fb36ef428fd3261f7cd8d6  gcc/testsuite/g++.dg/template/typename8.C
+ 951143bd9928716b4f5d4f181539733a  gcc/testsuite/g++.dg/template/typename9.C
  450c0b9e346d4201c85d9055f20ebf1a  gcc/testsuite/g++.dg/template/unify1.C
  4559d27962ac65b887c6f4a3a42dc70f  gcc/testsuite/g++.dg/template/unify2.C
  16808e8b62429d390bc5719fd2009b5c  gcc/testsuite/g++.dg/template/unify3.C
*************** cd698ebd98a80f55920d17ae629b4d9b  gcc/te
*** 9091,9134 ****
  6bc8a704452336d9d0ee978fef2a7f60  gcc/testsuite/g++.dg/template/using6.C
  b84e1ff61ee65ba43655de5d69616da1  gcc/testsuite/g++.dg/template/using7.C
  4b82993be36fd76cdb24298731b1c1e6  gcc/testsuite/g++.dg/template/using8.C
  371fd451d6e75ee687f0678fffede3d0  gcc/testsuite/g++.dg/template/varmod1.C
  98fb9a7526b5989b48ce49e7131f8f76  gcc/testsuite/g++.dg/template/vtable1.C
  5b9020bf992482a36833bb577ebb8d40  gcc/testsuite/g++.dg/template/warn1.C
  577a7a4f76f06bf7384ad303d275f983  gcc/testsuite/g++.dg/template/wrap1.C
  997487fdaa8d8f97009b2d9f2e2f3766  gcc/testsuite/g++.dg/tls/diag-1.C
! 2955c47f1dd8fa6e23e1d7495b2b7908  gcc/testsuite/g++.dg/tls/diag-2.C
  decd08e1eee840e8ad1abce9adf7f1ca  gcc/testsuite/g++.dg/tls/init-1.C
  adee194bbb7c00dd5f4aa91a5de8cced  gcc/testsuite/g++.dg/tls/init-2.C
  cadaf35c6f73680cbe360243df988817  gcc/testsuite/g++.dg/tls/tls.exp
  d0ff7b21e6cafbaa5dd1684c5d898a19  gcc/testsuite/g++.dg/tls/trivial.C
! 75217e420f9c41b3d3cbda837273d96a  gcc/testsuite/g++.dg/warn/Winline-1.C
  0e30443ee25811cad88723354c525b24  gcc/testsuite/g++.dg/warn/Winline-2.C
  e5e6d08567eb0a03fffadca1da754cde  gcc/testsuite/g++.dg/warn/Winline-3.C
  401a1cfacaa701f3e1459d7dcaf225d9  gcc/testsuite/g++.dg/warn/Winline-4.C
  4d3b7ed38b5e078db7e76014e7eab321  gcc/testsuite/g++.dg/warn/Woverloaded-1.C
  89a3835e86fc8dc3b194269fb1f54375  gcc/testsuite/g++.dg/warn/Wreorder-1.C
  39d7f3f2b6a28c609038dedf0f24d03c  gcc/testsuite/g++.dg/warn/Wreturn-1.C
! cf162e0f2eea49dab232dc30f17b06c8  gcc/testsuite/g++.dg/warn/Wshadow-1.C
  6a6527871d476c4275232fa53d041994  gcc/testsuite/g++.dg/warn/Wshadow-2.C
  2247cfbc59da044c90471731c49fe14d  gcc/testsuite/g++.dg/warn/Wsign-compare-1.C
! 30316f272ae9324c6eff2526a501076e  gcc/testsuite/g++.dg/warn/Wswitch-1.C
! 15d54a325dd44f2615507c18b3e01de1  gcc/testsuite/g++.dg/warn/Wswitch-2.C
  d08f8f4d2f55349741193b20c16afa1a  gcc/testsuite/g++.dg/warn/Wunused-1.C
  61051d6055a088efd9b196d7533030ea  gcc/testsuite/g++.dg/warn/Wunused-2.C
  19f1d5b223a75e9107f8207c10aa080c  gcc/testsuite/g++.dg/warn/Wunused-3.C
  3c7c2b442d4bd62310dcfdd99d91e1b2  gcc/testsuite/g++.dg/warn/Wunused-4.C
! 33878a9da8e50ae35fbb0fff902b70f9  gcc/testsuite/g++.dg/warn/Wunused-5.C
  716f99b28cebbf385c168497daeff7ae  gcc/testsuite/g++.dg/warn/Wunused-6.C
  c969e351f86316e8ad9196c0ce95cd3c  gcc/testsuite/g++.dg/warn/Wunused-7.C
  064f2d562e6ae3005fac3be98940a167  gcc/testsuite/g++.dg/warn/compare1.C
  85be959a24d4346758266af7cda69d72  gcc/testsuite/g++.dg/warn/conv1.C
  c06b80700617a1e18ca42c1666bae072  gcc/testsuite/g++.dg/warn/conv2.C
  a13aaa30037789e1fbc1e83bdcbaff93  gcc/testsuite/g++.dg/warn/conversion-function-1.C
  d5fcd483303360915cb089b93fa1cd74  gcc/testsuite/g++.dg/warn/ctor-dtor-privacy-1.C
  ca9f620c9a4fcfd05cfa551f64c2c55c  gcc/testsuite/g++.dg/warn/ctor-dtor-privacy-2.C
  85dc72a0303b57c698ce2804c195f5b0  gcc/testsuite/g++.dg/warn/ctor-init-1.C
! b333651566110b8f1792bb7b4878724f  gcc/testsuite/g++.dg/warn/deprecated.C
  5e598309e0a011e0e37afcaf0b658c4f  gcc/testsuite/g++.dg/warn/effc1.C
  931d147f4baed695f1a67ae899cebd03  gcc/testsuite/g++.dg/warn/format1.C
  77cfd7b8f34afd97ff68bc102b6c6fc6  gcc/testsuite/g++.dg/warn/format2.C
  449301e4fc095134d15ba50f081d6eb2  gcc/testsuite/g++.dg/warn/format3.C
--- 9781,9873 ----
  6bc8a704452336d9d0ee978fef2a7f60  gcc/testsuite/g++.dg/template/using6.C
  b84e1ff61ee65ba43655de5d69616da1  gcc/testsuite/g++.dg/template/using7.C
  4b82993be36fd76cdb24298731b1c1e6  gcc/testsuite/g++.dg/template/using8.C
+ dbaee67864534e72930b87dcda9ce27c  gcc/testsuite/g++.dg/template/using9.C
  371fd451d6e75ee687f0678fffede3d0  gcc/testsuite/g++.dg/template/varmod1.C
  98fb9a7526b5989b48ce49e7131f8f76  gcc/testsuite/g++.dg/template/vtable1.C
+ d55a534d0d8361d48d4f9895d5fb658a  gcc/testsuite/g++.dg/template/vtable2.C
  5b9020bf992482a36833bb577ebb8d40  gcc/testsuite/g++.dg/template/warn1.C
  577a7a4f76f06bf7384ad303d275f983  gcc/testsuite/g++.dg/template/wrap1.C
  997487fdaa8d8f97009b2d9f2e2f3766  gcc/testsuite/g++.dg/tls/diag-1.C
! 3edfb88c40a58b43f57851dc1d5aab10  gcc/testsuite/g++.dg/tls/diag-2.C
  decd08e1eee840e8ad1abce9adf7f1ca  gcc/testsuite/g++.dg/tls/init-1.C
  adee194bbb7c00dd5f4aa91a5de8cced  gcc/testsuite/g++.dg/tls/init-2.C
  cadaf35c6f73680cbe360243df988817  gcc/testsuite/g++.dg/tls/tls.exp
  d0ff7b21e6cafbaa5dd1684c5d898a19  gcc/testsuite/g++.dg/tls/trivial.C
! 2a1f9c8b1ccb241e4745f1e06c56fac3  gcc/testsuite/g++.dg/tree-ssa/20040317-1.C
! 7a59e09c4cb65bda7874f5d6af01a6f5  gcc/testsuite/g++.dg/tree-ssa/empty-1.C
! c9b744ac0d048c2d0eedbb567ad42de1  gcc/testsuite/g++.dg/tree-ssa/nothrow-1.C
! 2cc5b993a18aedb63c1af65362b05eaf  gcc/testsuite/g++.dg/tree-ssa/pointer-reference-alias.C
! 62600822d88828e393d9efe9f65e0fb1  gcc/testsuite/g++.dg/tree-ssa/pr15791-1.C
! 44258efc32e7a0390a4fd5cba4148adc  gcc/testsuite/g++.dg/tree-ssa/pr15791-2.C
! bb6527f80ae839bc430bdf7cb401919b  gcc/testsuite/g++.dg/tree-ssa/pr15791-3.C
! 921073cd26891c83517e9c9da29056bc  gcc/testsuite/g++.dg/tree-ssa/pr15791-4.C
! 7e96b720e93166ec35d98feb54ea6edf  gcc/testsuite/g++.dg/tree-ssa/pr15791-5.C
! 890d09382f8bad07b069d8f8fe14035c  gcc/testsuite/g++.dg/tree-ssa/pr16688.C
! c04d507a2753246aa9671b4cac28ff58  gcc/testsuite/g++.dg/tree-ssa/pr17153.C
! 84bb302e221d8cd2317c6c09441d615f  gcc/testsuite/g++.dg/tree-ssa/pr17400.C
! 3f50ad6afe1400d17f21f8b61d4be1a6  gcc/testsuite/g++.dg/tree-ssa/pr17517.C
! a425019d3ee630ab12baac6d527c530b  gcc/testsuite/g++.dg/tree-ssa/pr19786.C
! 36bc4e744d6fb50060ca8b029be1905c  gcc/testsuite/g++.dg/tree-ssa/pr19952.C
! a9d7f4347bccd1e6029d7c844680a5b4  gcc/testsuite/g++.dg/tree-ssa/pr20280.C
! 1c2e6372797b8ba65c8d70fe291f9223  gcc/testsuite/g++.dg/tree-ssa/ssa-cast-1.C
! e06398b5e02c23f0996d17408410239f  gcc/testsuite/g++.dg/tree-ssa/ssa-sra-1.C
! cc50d69b6951c5de8935700b7b67a11e  gcc/testsuite/g++.dg/tree-ssa/ssa-sra-2.C
! 1b493dbcf5783f5a71a5837748ccfb5b  gcc/testsuite/g++.dg/tree-ssa/ssa-sra-3.C
! 0fb08fd6d187247ae5872931e884061c  gcc/testsuite/g++.dg/tree-ssa/tmmti.C
! 701a0deaca8b82f35e40eb7d32cd3564  gcc/testsuite/g++.dg/vect/pr19951.cc
! 4c9cd65dd9660841bb75b56105b4bcfd  gcc/testsuite/g++.dg/vect/vect.exp
! d489a76c7b7ab5b0e165f2342a4e6974  gcc/testsuite/g++.dg/warn/Wbraces1.C
! b6f440088bcb927d61a2c0ed73f71874  gcc/testsuite/g++.dg/warn/Wbraces2.C
! ee0b4d9e331b2ed8b1a730e066fc0084  gcc/testsuite/g++.dg/warn/Wdtor1.C
! 6cbb434563bf5c0247156042fe84718d  gcc/testsuite/g++.dg/warn/Weff1.C
! 99a0635e430cefd28c2908b5aaf4a487  gcc/testsuite/g++.dg/warn/Winline-1.C
  0e30443ee25811cad88723354c525b24  gcc/testsuite/g++.dg/warn/Winline-2.C
  e5e6d08567eb0a03fffadca1da754cde  gcc/testsuite/g++.dg/warn/Winline-3.C
  401a1cfacaa701f3e1459d7dcaf225d9  gcc/testsuite/g++.dg/warn/Winline-4.C
+ 17ce52166f1ac71872bcacc58c562353  gcc/testsuite/g++.dg/warn/Wnvdtor.C
  4d3b7ed38b5e078db7e76014e7eab321  gcc/testsuite/g++.dg/warn/Woverloaded-1.C
+ d1f22f759809f81b1b677be34f938b02  gcc/testsuite/g++.dg/warn/Wparentheses-1.C
+ ea3c2716291fc812b8d00190b207f31b  gcc/testsuite/g++.dg/warn/Wparentheses-2.C
+ f54d3fb57e7ea75f1954d2671e769fd5  gcc/testsuite/g++.dg/warn/Wparentheses-3.C
+ 5cb9671988084dbee7c5cdf77fbbfa0c  gcc/testsuite/g++.dg/warn/Wparentheses-4.C
  89a3835e86fc8dc3b194269fb1f54375  gcc/testsuite/g++.dg/warn/Wreorder-1.C
  39d7f3f2b6a28c609038dedf0f24d03c  gcc/testsuite/g++.dg/warn/Wreturn-1.C
! 6a9ad99dea244e7a1d6655a1e95ccfea  gcc/testsuite/g++.dg/warn/Wreturn-2.C
! 784c916e3f956afe80f26ff565b29be6  gcc/testsuite/g++.dg/warn/Wreturn-type-1.C
! 1d81b4c94aef9d2c63d5599d4508e03a  gcc/testsuite/g++.dg/warn/Wreturn-type-2.C
! 0877959d4ff69bc477955ce1ceadb231  gcc/testsuite/g++.dg/warn/Wreturn-type-3.C
! 78a781a7fee9227b3174b6dee0ac20b3  gcc/testsuite/g++.dg/warn/Wsequence-point-1.C
! 5f3bcedcf90b0a88ec7f6f5dc569ce69  gcc/testsuite/g++.dg/warn/Wshadow-1.C
  6a6527871d476c4275232fa53d041994  gcc/testsuite/g++.dg/warn/Wshadow-2.C
+ c6d10f027652eb4c20869c7eaeebb358  gcc/testsuite/g++.dg/warn/Wshadow-3.C
  2247cfbc59da044c90471731c49fe14d  gcc/testsuite/g++.dg/warn/Wsign-compare-1.C
! 9f043716d56d5ecb10d2e43f4882b263  gcc/testsuite/g++.dg/warn/Wswitch-1.C
! 063811cae4064dfe33ddbcd11e9f93ee  gcc/testsuite/g++.dg/warn/Wswitch-2.C
! f3d80e4b7c90755533b6b7bd8812abae  gcc/testsuite/g++.dg/warn/Wunreachable-code-1.C
  d08f8f4d2f55349741193b20c16afa1a  gcc/testsuite/g++.dg/warn/Wunused-1.C
+ 09723811a7331dcc7580068bdfe05710  gcc/testsuite/g++.dg/warn/Wunused-10.C
+ 509e856e0fc2084da098b641f1d63e89  gcc/testsuite/g++.dg/warn/Wunused-11.C
  61051d6055a088efd9b196d7533030ea  gcc/testsuite/g++.dg/warn/Wunused-2.C
  19f1d5b223a75e9107f8207c10aa080c  gcc/testsuite/g++.dg/warn/Wunused-3.C
  3c7c2b442d4bd62310dcfdd99d91e1b2  gcc/testsuite/g++.dg/warn/Wunused-4.C
! a1eac98a6496704d61be03bb58327d0f  gcc/testsuite/g++.dg/warn/Wunused-5.C
  716f99b28cebbf385c168497daeff7ae  gcc/testsuite/g++.dg/warn/Wunused-6.C
  c969e351f86316e8ad9196c0ce95cd3c  gcc/testsuite/g++.dg/warn/Wunused-7.C
+ 0d99e205a486cf3984dae4b4c82a1c4f  gcc/testsuite/g++.dg/warn/Wunused-8.C
+ c028f96ef429d16acd56c46dd1ef7140  gcc/testsuite/g++.dg/warn/Wunused-9.C
  064f2d562e6ae3005fac3be98940a167  gcc/testsuite/g++.dg/warn/compare1.C
  85be959a24d4346758266af7cda69d72  gcc/testsuite/g++.dg/warn/conv1.C
  c06b80700617a1e18ca42c1666bae072  gcc/testsuite/g++.dg/warn/conv2.C
+ cc281c397d45da8c573eee459fc65fa7  gcc/testsuite/g++.dg/warn/conv3.C
  a13aaa30037789e1fbc1e83bdcbaff93  gcc/testsuite/g++.dg/warn/conversion-function-1.C
  d5fcd483303360915cb089b93fa1cd74  gcc/testsuite/g++.dg/warn/ctor-dtor-privacy-1.C
  ca9f620c9a4fcfd05cfa551f64c2c55c  gcc/testsuite/g++.dg/warn/ctor-dtor-privacy-2.C
  85dc72a0303b57c698ce2804c195f5b0  gcc/testsuite/g++.dg/warn/ctor-init-1.C
! 946888ec2ea97ac11876e77cc3c3ba32  gcc/testsuite/g++.dg/warn/deprecated-2.C
! ffc4336bd55125d0c8161da036a3471d  gcc/testsuite/g++.dg/warn/deprecated.C
  5e598309e0a011e0e37afcaf0b658c4f  gcc/testsuite/g++.dg/warn/effc1.C
+ ea529389c86d5a43c531a82630dfde8b  gcc/testsuite/g++.dg/warn/effc2.C
+ a09300084b0484d20d1e01b50584cbd6  gcc/testsuite/g++.dg/warn/effc3.C
  931d147f4baed695f1a67ae899cebd03  gcc/testsuite/g++.dg/warn/format1.C
  77cfd7b8f34afd97ff68bc102b6c6fc6  gcc/testsuite/g++.dg/warn/format2.C
  449301e4fc095134d15ba50f081d6eb2  gcc/testsuite/g++.dg/warn/format3.C
*************** b333651566110b8f1792bb7b4878724f  gcc/te
*** 9136,9147 ****
  947eb21e9808319dc342bbc45acb7e0c  gcc/testsuite/g++.dg/warn/implicit-typename1.C
  f69540cf16bb392d5bf1e5edfc8e067e  gcc/testsuite/g++.dg/warn/implicit-typename2.C
  5d559af51cd6e5fbe0dbb5a62a5d3366  gcc/testsuite/g++.dg/warn/implicit-typename3.C
! c5e0bd96a5323038be93149f120bb39b  gcc/testsuite/g++.dg/warn/incomplete1.C
  0c33b46fd2f31938e2ff6fb7fc3f0b90  gcc/testsuite/g++.dg/warn/inline1.C
  217f0311161c670d6ef0fbd06a3c6b91  gcc/testsuite/g++.dg/warn/main.C
  1902e5724627ee76d77f99218f859ac2  gcc/testsuite/g++.dg/warn/noeffect2.C
  bbae8b6a10a424fb379a1b06f32cb8ff  gcc/testsuite/g++.dg/warn/noeffect4.C
  58c48dbaffba495d57fb0bf370f50060  gcc/testsuite/g++.dg/warn/noeffect6.C
  acf9323dc369473d47e1a02ca5461933  gcc/testsuite/g++.dg/warn/noreturn-1.C
  10a2dc88ff4acf5169ed37d5b483050b  gcc/testsuite/g++.dg/warn/noreturn-2.C
  99162a062d0507c49cfdb62a0ec174e4  gcc/testsuite/g++.dg/warn/noreturn-3.C
--- 9875,9891 ----
  947eb21e9808319dc342bbc45acb7e0c  gcc/testsuite/g++.dg/warn/implicit-typename1.C
  f69540cf16bb392d5bf1e5edfc8e067e  gcc/testsuite/g++.dg/warn/implicit-typename2.C
  5d559af51cd6e5fbe0dbb5a62a5d3366  gcc/testsuite/g++.dg/warn/implicit-typename3.C
! 8ca4663e374bdf39d4e89678129dd5ac  gcc/testsuite/g++.dg/warn/incomplete1.C
  0c33b46fd2f31938e2ff6fb7fc3f0b90  gcc/testsuite/g++.dg/warn/inline1.C
  217f0311161c670d6ef0fbd06a3c6b91  gcc/testsuite/g++.dg/warn/main.C
+ 0f0e7dea39f9789574205f8f725f6fc5  gcc/testsuite/g++.dg/warn/minmax.C
+ 67d018f4028bfdad4712e6c50a3eefa7  gcc/testsuite/g++.dg/warn/missing-field-init-1.C
+ 5810653b0c8f7de9557f67564c81fa60  gcc/testsuite/g++.dg/warn/missing-field-init-2.C
  1902e5724627ee76d77f99218f859ac2  gcc/testsuite/g++.dg/warn/noeffect2.C
  bbae8b6a10a424fb379a1b06f32cb8ff  gcc/testsuite/g++.dg/warn/noeffect4.C
+ 66a1048126ecd634e1e4f71263be239e  gcc/testsuite/g++.dg/warn/noeffect5.C
  58c48dbaffba495d57fb0bf370f50060  gcc/testsuite/g++.dg/warn/noeffect6.C
+ 40efbe938691eeff621e7ef02235827f  gcc/testsuite/g++.dg/warn/nonnull1.C
  acf9323dc369473d47e1a02ca5461933  gcc/testsuite/g++.dg/warn/noreturn-1.C
  10a2dc88ff4acf5169ed37d5b483050b  gcc/testsuite/g++.dg/warn/noreturn-2.C
  99162a062d0507c49cfdb62a0ec174e4  gcc/testsuite/g++.dg/warn/noreturn-3.C
*************** acf9323dc369473d47e1a02ca5461933  gcc/te
*** 9149,9163 ****
  a17c4c0444990921d3c66161e1a84c51  gcc/testsuite/g++.dg/warn/pedantic1.C
  acd9eb52e3298cbde90941f636efb15f  gcc/testsuite/g++.dg/warn/pmf1.C
  8c096cfbcb0f16fa5bde02650ac4ab41  gcc/testsuite/g++.dg/warn/private1.C
  70f8973f83c648dfef793b81d7b5a128  gcc/testsuite/g++.dg/warn/return-reference.C
  6f90eb3a0f4a4e7f096197fba7797aff  gcc/testsuite/g++.dg/warn/template-1.C
! f792bf62e8771aa8c1b3a0f95549b7a7  gcc/testsuite/g++.dg/warn/weak1.C
  4337ac611022d7dd242cc3e5c1a89b2e  gcc/testsuite/g++.old-deja/g++.abi/aggregates.C
  d26e53209491cdf8c19fe39925d213f6  gcc/testsuite/g++.old-deja/g++.abi/align.C
! c5ce40b7ea5510f9f751e4e0e6187d22  gcc/testsuite/g++.old-deja/g++.abi/arraynew.C
  e0affb58596025232248081b61df0767  gcc/testsuite/g++.old-deja/g++.abi/bitfields.C
  cadb8d830b6294a594d395f81b7e01d7  gcc/testsuite/g++.old-deja/g++.abi/crash1.C
! b13f1bfb242bc37d5b5a962e1b4b4f92  gcc/testsuite/g++.old-deja/g++.abi/cxa_vec.C
  0986f0fa6e2b1e040a29e2f45b5ad7ab  gcc/testsuite/g++.old-deja/g++.abi/empty.C
  eac1428c6765ebdc4398f1b079c005c3  gcc/testsuite/g++.old-deja/g++.abi/empty2.C
  3008954886dc6032553976cfe7d8866b  gcc/testsuite/g++.old-deja/g++.abi/empty3.C
--- 9893,9909 ----
  a17c4c0444990921d3c66161e1a84c51  gcc/testsuite/g++.dg/warn/pedantic1.C
  acd9eb52e3298cbde90941f636efb15f  gcc/testsuite/g++.dg/warn/pmf1.C
  8c096cfbcb0f16fa5bde02650ac4ab41  gcc/testsuite/g++.dg/warn/private1.C
+ 74e731cf40a87ad46c69381e090331eb  gcc/testsuite/g++.dg/warn/register-var-1.C
+ ea73d6265dc16c3e8af8fcf468fbfdee  gcc/testsuite/g++.dg/warn/register-var-2.C
  70f8973f83c648dfef793b81d7b5a128  gcc/testsuite/g++.dg/warn/return-reference.C
  6f90eb3a0f4a4e7f096197fba7797aff  gcc/testsuite/g++.dg/warn/template-1.C
! db0369443832a167e3eafc656f0f0edc  gcc/testsuite/g++.dg/warn/weak1.C
  4337ac611022d7dd242cc3e5c1a89b2e  gcc/testsuite/g++.old-deja/g++.abi/aggregates.C
  d26e53209491cdf8c19fe39925d213f6  gcc/testsuite/g++.old-deja/g++.abi/align.C
! a1f690ad6c3c792df0758793160c4cda  gcc/testsuite/g++.old-deja/g++.abi/arraynew.C
  e0affb58596025232248081b61df0767  gcc/testsuite/g++.old-deja/g++.abi/bitfields.C
  cadb8d830b6294a594d395f81b7e01d7  gcc/testsuite/g++.old-deja/g++.abi/crash1.C
! f89727b8728825a3f34562ce78d862ad  gcc/testsuite/g++.old-deja/g++.abi/cxa_vec.C
  0986f0fa6e2b1e040a29e2f45b5ad7ab  gcc/testsuite/g++.old-deja/g++.abi/empty.C
  eac1428c6765ebdc4398f1b079c005c3  gcc/testsuite/g++.old-deja/g++.abi/empty2.C
  3008954886dc6032553976cfe7d8866b  gcc/testsuite/g++.old-deja/g++.abi/empty3.C
*************** d3a1d8c5e1eb5bb34389eea5ab4ba473  gcc/te
*** 9233,9239 ****
  1b14068d5cd59524944ff0e4282e9230  gcc/testsuite/g++.old-deja/g++.benjamin/tem05.C
  41b0c9f614d7008ceae61fc6d2fea5ad  gcc/testsuite/g++.old-deja/g++.benjamin/tem06.C
  7925d70b3542542fe6133d14532c6e4a  gcc/testsuite/g++.old-deja/g++.benjamin/tem07.C
! ad75fdc3e8b0c6ae9954c2afd6714626  gcc/testsuite/g++.old-deja/g++.benjamin/typedef01.C
  f2929f837162a135c11590ea2c8b94cd  gcc/testsuite/g++.old-deja/g++.benjamin/typedef03.C
  dc34add658f20519cb6e238d0aef91c0  gcc/testsuite/g++.old-deja/g++.benjamin/typeid01.C
  56e49f1c8229edeb65b0d075772cf7fe  gcc/testsuite/g++.old-deja/g++.benjamin/warn01.C
--- 9979,9985 ----
  1b14068d5cd59524944ff0e4282e9230  gcc/testsuite/g++.old-deja/g++.benjamin/tem05.C
  41b0c9f614d7008ceae61fc6d2fea5ad  gcc/testsuite/g++.old-deja/g++.benjamin/tem06.C
  7925d70b3542542fe6133d14532c6e4a  gcc/testsuite/g++.old-deja/g++.benjamin/tem07.C
! 74057c6a3feaefae028070f7004ef7f6  gcc/testsuite/g++.old-deja/g++.benjamin/typedef01.C
  f2929f837162a135c11590ea2c8b94cd  gcc/testsuite/g++.old-deja/g++.benjamin/typedef03.C
  dc34add658f20519cb6e238d0aef91c0  gcc/testsuite/g++.old-deja/g++.benjamin/typeid01.C
  56e49f1c8229edeb65b0d075772cf7fe  gcc/testsuite/g++.old-deja/g++.benjamin/warn01.C
*************** c9e7e0c2e854771ffa91e7877a31b32a  gcc/te
*** 9271,9277 ****
  d3e82cc7950befa975db3c1db7cb5bd8  gcc/testsuite/g++.old-deja/g++.brendan/array1.C
  dc09c52e242933d7d8122e9ef75476a1  gcc/testsuite/g++.old-deja/g++.brendan/asm-extn1.C
  71850593e8cd2b3b928db637dd968118  gcc/testsuite/g++.old-deja/g++.brendan/bit-fields1.C
! 49284a796055ec9cf57f9ccbcd1181c2  gcc/testsuite/g++.old-deja/g++.brendan/bit-fields2.C
  9b67849cb4ac27393dcb0106ad390716  gcc/testsuite/g++.old-deja/g++.brendan/bool1.C
  723ea3fbd94d850176380c81b9592351  gcc/testsuite/g++.old-deja/g++.brendan/code-gen1.C
  616f98f70864801a5abf83247a575d07  gcc/testsuite/g++.old-deja/g++.brendan/code-gen2.C
--- 10017,10023 ----
  d3e82cc7950befa975db3c1db7cb5bd8  gcc/testsuite/g++.old-deja/g++.brendan/array1.C
  dc09c52e242933d7d8122e9ef75476a1  gcc/testsuite/g++.old-deja/g++.brendan/asm-extn1.C
  71850593e8cd2b3b928db637dd968118  gcc/testsuite/g++.old-deja/g++.brendan/bit-fields1.C
! 1a5afe81ac27807110b2c7f1e488f194  gcc/testsuite/g++.old-deja/g++.brendan/bit-fields2.C
  9b67849cb4ac27393dcb0106ad390716  gcc/testsuite/g++.old-deja/g++.brendan/bool1.C
  723ea3fbd94d850176380c81b9592351  gcc/testsuite/g++.old-deja/g++.brendan/code-gen1.C
  616f98f70864801a5abf83247a575d07  gcc/testsuite/g++.old-deja/g++.brendan/code-gen2.C
*************** c487c2f1d306c4b5ffd996ab598aac07  gcc/te
*** 9295,9303 ****
  d2c6d1b4bd137d341cd780821a2e12ed  gcc/testsuite/g++.old-deja/g++.brendan/crash13.C
  4b3db8cbbfa7bf87638bbbff3162da29  gcc/testsuite/g++.old-deja/g++.brendan/crash14.C
  7529342852a16fca993789714b764021  gcc/testsuite/g++.old-deja/g++.brendan/crash15.C
! 9bb2ccf2399bd1901040edd8a19cac8c  gcc/testsuite/g++.old-deja/g++.brendan/crash16.C
  5e1a5f6e4a3153d0f97c463208c68dfc  gcc/testsuite/g++.old-deja/g++.brendan/crash17.C
! 61ae209b848b24bcd03624e6da75f97b  gcc/testsuite/g++.old-deja/g++.brendan/crash18.C
  3f31ad7a3d6312a1259fb61edfad7bec  gcc/testsuite/g++.old-deja/g++.brendan/crash2.C
  53a2dd1bdf710845adc926626d619e59  gcc/testsuite/g++.old-deja/g++.brendan/crash20.C
  7b2c605c6218e8948fecbe9842677c4b  gcc/testsuite/g++.old-deja/g++.brendan/crash22.C
--- 10041,10049 ----
  d2c6d1b4bd137d341cd780821a2e12ed  gcc/testsuite/g++.old-deja/g++.brendan/crash13.C
  4b3db8cbbfa7bf87638bbbff3162da29  gcc/testsuite/g++.old-deja/g++.brendan/crash14.C
  7529342852a16fca993789714b764021  gcc/testsuite/g++.old-deja/g++.brendan/crash15.C
! ceea8bd2dda9f31e3e4857c5526f1f0c  gcc/testsuite/g++.old-deja/g++.brendan/crash16.C
  5e1a5f6e4a3153d0f97c463208c68dfc  gcc/testsuite/g++.old-deja/g++.brendan/crash17.C
! 3e7a431e54812cbc89e33a4ea503b985  gcc/testsuite/g++.old-deja/g++.brendan/crash18.C
  3f31ad7a3d6312a1259fb61edfad7bec  gcc/testsuite/g++.old-deja/g++.brendan/crash2.C
  53a2dd1bdf710845adc926626d619e59  gcc/testsuite/g++.old-deja/g++.brendan/crash20.C
  7b2c605c6218e8948fecbe9842677c4b  gcc/testsuite/g++.old-deja/g++.brendan/crash22.C
*************** d5ee940012af3122df1f0a9b46ec0691  gcc/te
*** 9328,9343 ****
  5021dd2b75a24615fde95aee58b2241b  gcc/testsuite/g++.old-deja/g++.brendan/crash45.C
  04ce4fbaa4f8ef72247f66f12db00ef1  gcc/testsuite/g++.old-deja/g++.brendan/crash46.C
  d94800227b9326614c08ee7405b8e23b  gcc/testsuite/g++.old-deja/g++.brendan/crash47.C
! 9c55ea04d265badca5acea05d811c7a8  gcc/testsuite/g++.old-deja/g++.brendan/crash48.C
! db545468ce211399a18a38389706d225  gcc/testsuite/g++.old-deja/g++.brendan/crash49.C
  318cf0dc34fa93fdba1f0e7691d777a5  gcc/testsuite/g++.old-deja/g++.brendan/crash5.C
  fe9c4e2b4a3a15a9e55ab8ee900fc390  gcc/testsuite/g++.old-deja/g++.brendan/crash50.C
  405f96434188666195e1798efc513146  gcc/testsuite/g++.old-deja/g++.brendan/crash51.C
! 852c866ddf02b4ae5fab8f01d44d8714  gcc/testsuite/g++.old-deja/g++.brendan/crash52.C
  0d23b5f837eca50d6659a9747fa8e8bd  gcc/testsuite/g++.old-deja/g++.brendan/crash53.C
  76cab97db1c153ad14cd499c7d483fa7  gcc/testsuite/g++.old-deja/g++.brendan/crash54.C
! d93797cfd819d0e540a9f20408033eff  gcc/testsuite/g++.old-deja/g++.brendan/crash55.C
! 6b2ae7a9ec6bcad6b2d309b8af8a45c6  gcc/testsuite/g++.old-deja/g++.brendan/crash56.C
  f99628dfc0766d237ee572c05c96f5ef  gcc/testsuite/g++.old-deja/g++.brendan/crash57.C
  2ea8e7e4ddc11489cf2a94e03e54ed33  gcc/testsuite/g++.old-deja/g++.brendan/crash58.C
  fe6ac67b99c1ddd7b2d92896792a2eea  gcc/testsuite/g++.old-deja/g++.brendan/crash6.C
--- 10074,10089 ----
  5021dd2b75a24615fde95aee58b2241b  gcc/testsuite/g++.old-deja/g++.brendan/crash45.C
  04ce4fbaa4f8ef72247f66f12db00ef1  gcc/testsuite/g++.old-deja/g++.brendan/crash46.C
  d94800227b9326614c08ee7405b8e23b  gcc/testsuite/g++.old-deja/g++.brendan/crash47.C
! 50a191a0bbbd0d6a919b450d140b4228  gcc/testsuite/g++.old-deja/g++.brendan/crash48.C
! efe4265b25ae54dbf04cfbbd033499c1  gcc/testsuite/g++.old-deja/g++.brendan/crash49.C
  318cf0dc34fa93fdba1f0e7691d777a5  gcc/testsuite/g++.old-deja/g++.brendan/crash5.C
  fe9c4e2b4a3a15a9e55ab8ee900fc390  gcc/testsuite/g++.old-deja/g++.brendan/crash50.C
  405f96434188666195e1798efc513146  gcc/testsuite/g++.old-deja/g++.brendan/crash51.C
! 6258ff8a333db7497b0e30dfe07c8b1c  gcc/testsuite/g++.old-deja/g++.brendan/crash52.C
  0d23b5f837eca50d6659a9747fa8e8bd  gcc/testsuite/g++.old-deja/g++.brendan/crash53.C
  76cab97db1c153ad14cd499c7d483fa7  gcc/testsuite/g++.old-deja/g++.brendan/crash54.C
! 0b96580b8e7a3577418ef1b738de61e8  gcc/testsuite/g++.old-deja/g++.brendan/crash55.C
! 4910144bf7e6fdf74b7896fa17ad60fd  gcc/testsuite/g++.old-deja/g++.brendan/crash56.C
  f99628dfc0766d237ee572c05c96f5ef  gcc/testsuite/g++.old-deja/g++.brendan/crash57.C
  2ea8e7e4ddc11489cf2a94e03e54ed33  gcc/testsuite/g++.old-deja/g++.brendan/crash58.C
  fe6ac67b99c1ddd7b2d92896792a2eea  gcc/testsuite/g++.old-deja/g++.brendan/crash6.C
*************** fef44fa88ae32d141b474c51a371aa94  gcc/te
*** 9351,9357 ****
  ceface3afb873c88388917e015eb9333  gcc/testsuite/g++.old-deja/g++.brendan/crash67.C
  1978e1f61a11b5ee6839705fd2b801ae  gcc/testsuite/g++.old-deja/g++.brendan/crash68.C
  28ec61f5fa87819f7d63d551ee5c01c0  gcc/testsuite/g++.old-deja/g++.brendan/crash7.C
! 55827e6d1e49506bce99440a4c35e3ef  gcc/testsuite/g++.old-deja/g++.brendan/crash8.C
  962d23d791b7d37abfadfcf72231ed39  gcc/testsuite/g++.old-deja/g++.brendan/crash9.C
  ef0c32aa9cb62fa23978bbf6604a9c13  gcc/testsuite/g++.old-deja/g++.brendan/ctors1.C
  b976465fc875e08dc788220e951e9f2b  gcc/testsuite/g++.old-deja/g++.brendan/ctors2.C
--- 10097,10103 ----
  ceface3afb873c88388917e015eb9333  gcc/testsuite/g++.old-deja/g++.brendan/crash67.C
  1978e1f61a11b5ee6839705fd2b801ae  gcc/testsuite/g++.old-deja/g++.brendan/crash68.C
  28ec61f5fa87819f7d63d551ee5c01c0  gcc/testsuite/g++.old-deja/g++.brendan/crash7.C
! 6b64a687391a0cf3a98a8f7b82194214  gcc/testsuite/g++.old-deja/g++.brendan/crash8.C
  962d23d791b7d37abfadfcf72231ed39  gcc/testsuite/g++.old-deja/g++.brendan/crash9.C
  ef0c32aa9cb62fa23978bbf6604a9c13  gcc/testsuite/g++.old-deja/g++.brendan/ctors1.C
  b976465fc875e08dc788220e951e9f2b  gcc/testsuite/g++.old-deja/g++.brendan/ctors2.C
*************** e2a9f30a7ba6f25639381c312b380c4d  gcc/te
*** 9372,9378 ****
  0b35828a3baa2558fbffe3e9ac2165c9  gcc/testsuite/g++.old-deja/g++.brendan/enum-clash.C
  f4a6198b346287ed8325efbed8566b1d  gcc/testsuite/g++.old-deja/g++.brendan/enum1.C
  2082b04653c52e598d8ab0a387abe4bc  gcc/testsuite/g++.old-deja/g++.brendan/enum10.C
! 9322483e0307a7f674815d80f6359ea8  gcc/testsuite/g++.old-deja/g++.brendan/enum11.C
  6e6712bb465842808e9709b41ad09c15  gcc/testsuite/g++.old-deja/g++.brendan/enum12.C
  3ea57e60fd8bc5fc0eb4dcd8ebb05a7b  gcc/testsuite/g++.old-deja/g++.brendan/enum13.C
  b180e28476416bee81e2f1814451fa2a  gcc/testsuite/g++.old-deja/g++.brendan/enum14.C
--- 10118,10124 ----
  0b35828a3baa2558fbffe3e9ac2165c9  gcc/testsuite/g++.old-deja/g++.brendan/enum-clash.C
  f4a6198b346287ed8325efbed8566b1d  gcc/testsuite/g++.old-deja/g++.brendan/enum1.C
  2082b04653c52e598d8ab0a387abe4bc  gcc/testsuite/g++.old-deja/g++.brendan/enum10.C
! bab5848f837adb1bbeb182d86f19a11e  gcc/testsuite/g++.old-deja/g++.brendan/enum11.C
  6e6712bb465842808e9709b41ad09c15  gcc/testsuite/g++.old-deja/g++.brendan/enum12.C
  3ea57e60fd8bc5fc0eb4dcd8ebb05a7b  gcc/testsuite/g++.old-deja/g++.brendan/enum13.C
  b180e28476416bee81e2f1814451fa2a  gcc/testsuite/g++.old-deja/g++.brendan/enum14.C
*************** a88b4a73ce1ec205a26606c69baf3bc1  gcc/te
*** 9382,9389 ****
  fcf43316699bebcb1f1765e8f2b2d977  gcc/testsuite/g++.old-deja/g++.brendan/enum5.C
  417837f7736691e2a2f081e4fac41139  gcc/testsuite/g++.old-deja/g++.brendan/enum6.C
  074223d86f5c5fea05a015d01eb68675  gcc/testsuite/g++.old-deja/g++.brendan/enum7.C
! 738ccbd9c942f62ed7561b80e23ff040  gcc/testsuite/g++.old-deja/g++.brendan/enum8.C
! 56f08b811980288495fa6150b0c3c1c3  gcc/testsuite/g++.old-deja/g++.brendan/enum9.C
  94b84870c48c9080fde2075377b5d2e9  gcc/testsuite/g++.old-deja/g++.brendan/err-msg1.C
  2441f4634915a8657fe01d92aa58a45a  gcc/testsuite/g++.old-deja/g++.brendan/err-msg10.C
  94c75c3e0971db04d1f8bb06af164bc2  gcc/testsuite/g++.old-deja/g++.brendan/err-msg11.C
--- 10128,10135 ----
  fcf43316699bebcb1f1765e8f2b2d977  gcc/testsuite/g++.old-deja/g++.brendan/enum5.C
  417837f7736691e2a2f081e4fac41139  gcc/testsuite/g++.old-deja/g++.brendan/enum6.C
  074223d86f5c5fea05a015d01eb68675  gcc/testsuite/g++.old-deja/g++.brendan/enum7.C
! a1f55fe5fed08db051a0613003eb8f10  gcc/testsuite/g++.old-deja/g++.brendan/enum8.C
! 1b25732806de3aff6a92e6548039d784  gcc/testsuite/g++.old-deja/g++.brendan/enum9.C
  94b84870c48c9080fde2075377b5d2e9  gcc/testsuite/g++.old-deja/g++.brendan/err-msg1.C
  2441f4634915a8657fe01d92aa58a45a  gcc/testsuite/g++.old-deja/g++.brendan/err-msg10.C
  94c75c3e0971db04d1f8bb06af164bc2  gcc/testsuite/g++.old-deja/g++.brendan/err-msg11.C
*************** a14ce5b47e835ce3d50a055484c37e9a  gcc/te
*** 9399,9409 ****
  8fb3d1219e1b6bb6804f440fea6cc972  gcc/testsuite/g++.old-deja/g++.brendan/explicit1.C
  88f54cb5637017d0140fbe47b4d64a12  gcc/testsuite/g++.old-deja/g++.brendan/friend1.C
  89c2853b246bbebab91ee4249f3bd37f  gcc/testsuite/g++.old-deja/g++.brendan/friend2.C
! 527afb51ae09e81a4bcad547e5fa51f9  gcc/testsuite/g++.old-deja/g++.brendan/friend3.C
  79b84200b962840e29a51af53eeee72f  gcc/testsuite/g++.old-deja/g++.brendan/friend4.C
  c42688562e8873f0b3d710da92fd0eea  gcc/testsuite/g++.old-deja/g++.brendan/groff1.C
  e03dc940f61f56cd1996bf49e6201eee  gcc/testsuite/g++.old-deja/g++.brendan/init1.C
! 6e0fa80817d7c6d1e1c7acdc540b1781  gcc/testsuite/g++.old-deja/g++.brendan/init10.C
  9a287d5c1abd4ec24b10f2c76eab0f0a  gcc/testsuite/g++.old-deja/g++.brendan/init11.C
  62115c076d63c13cb74234ef6b624704  gcc/testsuite/g++.old-deja/g++.brendan/init12.C
  a305765b5b9a1e0b319b904df2c4a15d  gcc/testsuite/g++.old-deja/g++.brendan/init13.C
--- 10145,10155 ----
  8fb3d1219e1b6bb6804f440fea6cc972  gcc/testsuite/g++.old-deja/g++.brendan/explicit1.C
  88f54cb5637017d0140fbe47b4d64a12  gcc/testsuite/g++.old-deja/g++.brendan/friend1.C
  89c2853b246bbebab91ee4249f3bd37f  gcc/testsuite/g++.old-deja/g++.brendan/friend2.C
! d3e01a0d5a63b03e48f6aea49851d962  gcc/testsuite/g++.old-deja/g++.brendan/friend3.C
  79b84200b962840e29a51af53eeee72f  gcc/testsuite/g++.old-deja/g++.brendan/friend4.C
  c42688562e8873f0b3d710da92fd0eea  gcc/testsuite/g++.old-deja/g++.brendan/groff1.C
  e03dc940f61f56cd1996bf49e6201eee  gcc/testsuite/g++.old-deja/g++.brendan/init1.C
! 4e18b3936e86061811d3dfba8b2c4d31  gcc/testsuite/g++.old-deja/g++.brendan/init10.C
  9a287d5c1abd4ec24b10f2c76eab0f0a  gcc/testsuite/g++.old-deja/g++.brendan/init11.C
  62115c076d63c13cb74234ef6b624704  gcc/testsuite/g++.old-deja/g++.brendan/init12.C
  a305765b5b9a1e0b319b904df2c4a15d  gcc/testsuite/g++.old-deja/g++.brendan/init13.C
*************** f88bce394dffb1d830c0d26236adf218  gcc/te
*** 9421,9427 ****
  59cf9408e21fc287dfadefe86369088a  gcc/testsuite/g++.old-deja/g++.brendan/misc1.C
  398f13096520b38e320833aea7adaeed  gcc/testsuite/g++.old-deja/g++.brendan/misc10.C
  b23bbf6b98781ab53190b81124488a9b  gcc/testsuite/g++.old-deja/g++.brendan/misc11.C
! c0f6e0097415136ced9770d338a4b8f5  gcc/testsuite/g++.old-deja/g++.brendan/misc14.C
  9893e6edc662a5622bc8f4c0d8c89dfc  gcc/testsuite/g++.old-deja/g++.brendan/misc15.C
  926bd99f92e6fd4c7ad873dd3008323e  gcc/testsuite/g++.old-deja/g++.brendan/misc16.C
  c6dde39d37d2cab8d05e481b356b539b  gcc/testsuite/g++.old-deja/g++.brendan/misc17.C
--- 10167,10173 ----
  59cf9408e21fc287dfadefe86369088a  gcc/testsuite/g++.old-deja/g++.brendan/misc1.C
  398f13096520b38e320833aea7adaeed  gcc/testsuite/g++.old-deja/g++.brendan/misc10.C
  b23bbf6b98781ab53190b81124488a9b  gcc/testsuite/g++.old-deja/g++.brendan/misc11.C
! 7ebaf061672f83fca99a3f202292c438  gcc/testsuite/g++.old-deja/g++.brendan/misc14.C
  9893e6edc662a5622bc8f4c0d8c89dfc  gcc/testsuite/g++.old-deja/g++.brendan/misc15.C
  926bd99f92e6fd4c7ad873dd3008323e  gcc/testsuite/g++.old-deja/g++.brendan/misc16.C
  c6dde39d37d2cab8d05e481b356b539b  gcc/testsuite/g++.old-deja/g++.brendan/misc17.C
*************** cd228511a48f71249c67e69f03d3d6fc  gcc/te
*** 9455,9466 ****
  ce18ed55b4cb7e1075e495fefce8d00f  gcc/testsuite/g++.old-deja/g++.brendan/new-array.C
  718799fe9f078dd0e2bedf0e9597bd91  gcc/testsuite/g++.old-deja/g++.brendan/new1.C
  46f8297d90cafbb23e2ae0bf3a52be6f  gcc/testsuite/g++.old-deja/g++.brendan/new2.C
! 2194f4ad84838161c54ce42777f413c3  gcc/testsuite/g++.old-deja/g++.brendan/new3.C
  8a70a49dd8f898539a46d196782e0fe5  gcc/testsuite/g++.old-deja/g++.brendan/ns1.C
  2af972e38ef7cf8be77bddab49ea6e6b  gcc/testsuite/g++.old-deja/g++.brendan/operators1.C
  4ac6cb421f470728cde116dd27d0a9b5  gcc/testsuite/g++.old-deja/g++.brendan/operators2.C
  adee67364642085c61dd0cd25135210e  gcc/testsuite/g++.old-deja/g++.brendan/operators3.C
! 3116c06002032eaf92fd04edbfc25675  gcc/testsuite/g++.old-deja/g++.brendan/operators4.C
  a33203c9057b3652878436db19fd035d  gcc/testsuite/g++.old-deja/g++.brendan/operators5.C
  52b3628faa7d652f30e4e4cf72e3bae4  gcc/testsuite/g++.old-deja/g++.brendan/operators6.C
  fd824291529aa1c6337a009c9f68b953  gcc/testsuite/g++.old-deja/g++.brendan/operators7.C
--- 10201,10212 ----
  ce18ed55b4cb7e1075e495fefce8d00f  gcc/testsuite/g++.old-deja/g++.brendan/new-array.C
  718799fe9f078dd0e2bedf0e9597bd91  gcc/testsuite/g++.old-deja/g++.brendan/new1.C
  46f8297d90cafbb23e2ae0bf3a52be6f  gcc/testsuite/g++.old-deja/g++.brendan/new2.C
! d922f23818365494133a5e5397522ff5  gcc/testsuite/g++.old-deja/g++.brendan/new3.C
  8a70a49dd8f898539a46d196782e0fe5  gcc/testsuite/g++.old-deja/g++.brendan/ns1.C
  2af972e38ef7cf8be77bddab49ea6e6b  gcc/testsuite/g++.old-deja/g++.brendan/operators1.C
  4ac6cb421f470728cde116dd27d0a9b5  gcc/testsuite/g++.old-deja/g++.brendan/operators2.C
  adee67364642085c61dd0cd25135210e  gcc/testsuite/g++.old-deja/g++.brendan/operators3.C
! 31f44b889bbd132c8e562c15ad0f73fb  gcc/testsuite/g++.old-deja/g++.brendan/operators4.C
  a33203c9057b3652878436db19fd035d  gcc/testsuite/g++.old-deja/g++.brendan/operators5.C
  52b3628faa7d652f30e4e4cf72e3bae4  gcc/testsuite/g++.old-deja/g++.brendan/operators6.C
  fd824291529aa1c6337a009c9f68b953  gcc/testsuite/g++.old-deja/g++.brendan/operators7.C
*************** d7605b9eaacae4cf1ef4faec5b87a625  gcc/te
*** 9579,9593 ****
  e244eba70fd5a2dcd2e94411d647ecde  gcc/testsuite/g++.old-deja/g++.bugs/900127_02.C
  f03ee51aea223ecc3e1d9989152fcd9f  gcc/testsuite/g++.old-deja/g++.bugs/900205_02.C
  e74008410b3210b70933466865168b37  gcc/testsuite/g++.old-deja/g++.bugs/900205_03.C
! b83b157c78ac8278474abce42713007f  gcc/testsuite/g++.old-deja/g++.bugs/900205_04.C
  e93debd4450b4bd4c90f612064b8ce9b  gcc/testsuite/g++.old-deja/g++.bugs/900207_03.C
  de65ccdcb52c011f5be6425612645ce0  gcc/testsuite/g++.old-deja/g++.bugs/900208_02.C
  61d8cd21ad4d1060a0881672ce1b0133  gcc/testsuite/g++.old-deja/g++.bugs/900208_03.C
  4fb212343fadaeac90f3fbc8f76a766e  gcc/testsuite/g++.old-deja/g++.bugs/900208_04.C
  53a5eae1f920d333696f18640f990961  gcc/testsuite/g++.old-deja/g++.bugs/900209_01.C
! 0971c6bc52be108b8ac914f6cdceba78  gcc/testsuite/g++.old-deja/g++.bugs/900210_01.C
! b8aaa4f061ca3e860ce93f36f755e192  gcc/testsuite/g++.old-deja/g++.bugs/900210_02.C
! 5b74cf6b05e81227d1dde0edf1042e3c  gcc/testsuite/g++.old-deja/g++.bugs/900210_03.C
  d2e249bd273e50ba61f866d644ecc468  gcc/testsuite/g++.old-deja/g++.bugs/900210_05.C
  a8f1ea23e326c034a480ba87a1cbe8b8  gcc/testsuite/g++.old-deja/g++.bugs/900210_06.C
  25b8398da50b1cee3d0facbcb1a12fa5  gcc/testsuite/g++.old-deja/g++.bugs/900210_07.C
--- 10325,10339 ----
  e244eba70fd5a2dcd2e94411d647ecde  gcc/testsuite/g++.old-deja/g++.bugs/900127_02.C
  f03ee51aea223ecc3e1d9989152fcd9f  gcc/testsuite/g++.old-deja/g++.bugs/900205_02.C
  e74008410b3210b70933466865168b37  gcc/testsuite/g++.old-deja/g++.bugs/900205_03.C
! 593b19188b9d2a3feb76e6048b1f497c  gcc/testsuite/g++.old-deja/g++.bugs/900205_04.C
  e93debd4450b4bd4c90f612064b8ce9b  gcc/testsuite/g++.old-deja/g++.bugs/900207_03.C
  de65ccdcb52c011f5be6425612645ce0  gcc/testsuite/g++.old-deja/g++.bugs/900208_02.C
  61d8cd21ad4d1060a0881672ce1b0133  gcc/testsuite/g++.old-deja/g++.bugs/900208_03.C
  4fb212343fadaeac90f3fbc8f76a766e  gcc/testsuite/g++.old-deja/g++.bugs/900208_04.C
  53a5eae1f920d333696f18640f990961  gcc/testsuite/g++.old-deja/g++.bugs/900209_01.C
! 79390ee11aae50f0ebb8f4959b1d1e53  gcc/testsuite/g++.old-deja/g++.bugs/900210_01.C
! 339897012384e69ba0bf03042ca72e8f  gcc/testsuite/g++.old-deja/g++.bugs/900210_02.C
! b33ab90f692509c5ef0e0ac54be52859  gcc/testsuite/g++.old-deja/g++.bugs/900210_03.C
  d2e249bd273e50ba61f866d644ecc468  gcc/testsuite/g++.old-deja/g++.bugs/900210_05.C
  a8f1ea23e326c034a480ba87a1cbe8b8  gcc/testsuite/g++.old-deja/g++.bugs/900210_06.C
  25b8398da50b1cee3d0facbcb1a12fa5  gcc/testsuite/g++.old-deja/g++.bugs/900210_07.C
*************** d581b2639f5bf26e22714a3e979dc43c  gcc/te
*** 9630,9642 ****
  49d0547019a4a915bdd9b4f5f87b134c  gcc/testsuite/g++.old-deja/g++.bugs/900331_04.C
  41c2bae6ed7346172ccef788ddf8e9d7  gcc/testsuite/g++.old-deja/g++.bugs/900401_01.C
  b2c690f79b9e0981a2f96dcdcdf7e947  gcc/testsuite/g++.old-deja/g++.bugs/900402_01.C
! 5ff259ed2a8d77ec83f0cc6937e64c2d  gcc/testsuite/g++.old-deja/g++.bugs/900402_02.C
  f94f78525b0f62afaadc1a57a6b875f5  gcc/testsuite/g++.old-deja/g++.bugs/900403_01.C
  4216a63f8b9a5ea7ffd4163819a4b63e  gcc/testsuite/g++.old-deja/g++.bugs/900403_04.C
  9ce300e0f9e6df86bea8c5421165dc2b  gcc/testsuite/g++.old-deja/g++.bugs/900404_01.C
  154a87b721d11ed1738fbab683ce754a  gcc/testsuite/g++.old-deja/g++.bugs/900404_02.C
! d61d8b739f6949ffc1c4d248b99112c8  gcc/testsuite/g++.old-deja/g++.bugs/900404_03.C
! 32782205a765d2544511c9c2af3ba407  gcc/testsuite/g++.old-deja/g++.bugs/900404_04.C
  5390282e50e04854bcdcafbf527ddcca  gcc/testsuite/g++.old-deja/g++.bugs/900404_07.C
  4df342af36e75b7594742a38d8d90ee7  gcc/testsuite/g++.old-deja/g++.bugs/900405_01.C
  56b3109f93c4aee9592ddbf3c51a1730  gcc/testsuite/g++.old-deja/g++.bugs/900406_01.C
--- 10376,10388 ----
  49d0547019a4a915bdd9b4f5f87b134c  gcc/testsuite/g++.old-deja/g++.bugs/900331_04.C
  41c2bae6ed7346172ccef788ddf8e9d7  gcc/testsuite/g++.old-deja/g++.bugs/900401_01.C
  b2c690f79b9e0981a2f96dcdcdf7e947  gcc/testsuite/g++.old-deja/g++.bugs/900402_01.C
! 7ddab4ab373be7b60b25f124d05590fe  gcc/testsuite/g++.old-deja/g++.bugs/900402_02.C
  f94f78525b0f62afaadc1a57a6b875f5  gcc/testsuite/g++.old-deja/g++.bugs/900403_01.C
  4216a63f8b9a5ea7ffd4163819a4b63e  gcc/testsuite/g++.old-deja/g++.bugs/900403_04.C
  9ce300e0f9e6df86bea8c5421165dc2b  gcc/testsuite/g++.old-deja/g++.bugs/900404_01.C
  154a87b721d11ed1738fbab683ce754a  gcc/testsuite/g++.old-deja/g++.bugs/900404_02.C
! 35f2cf4423649f6d209ba40252d844ce  gcc/testsuite/g++.old-deja/g++.bugs/900404_03.C
! 556dbc5118f231ade8f41134ea065eb2  gcc/testsuite/g++.old-deja/g++.bugs/900404_04.C
  5390282e50e04854bcdcafbf527ddcca  gcc/testsuite/g++.old-deja/g++.bugs/900404_07.C
  4df342af36e75b7594742a38d8d90ee7  gcc/testsuite/g++.old-deja/g++.bugs/900405_01.C
  56b3109f93c4aee9592ddbf3c51a1730  gcc/testsuite/g++.old-deja/g++.bugs/900406_01.C
*************** d61d8b739f6949ffc1c4d248b99112c8  gcc/te
*** 9644,9650 ****
  98b233cef5cf2faa9c7403a4afd54462  gcc/testsuite/g++.old-deja/g++.bugs/900407_01.C
  4254712d86c1247e0bb7a4a557701342  gcc/testsuite/g++.old-deja/g++.bugs/900428_01.C
  40d55f0463f2346d367636ae29a2483e  gcc/testsuite/g++.old-deja/g++.bugs/900428_02.C
! 119ad0c5ae9df9559bcf8ad4b0d26642  gcc/testsuite/g++.old-deja/g++.bugs/900428_03.C
  b1c7b3e270e0d71b8936cef937980314  gcc/testsuite/g++.old-deja/g++.bugs/900511_01.C
  816e40831e0d42b36ac328d1c140f3b5  gcc/testsuite/g++.old-deja/g++.bugs/900511_02.C
  7c5fa26da82ab98b8a83c64d87bc1527  gcc/testsuite/g++.old-deja/g++.bugs/900511_03.C
--- 10390,10396 ----
  98b233cef5cf2faa9c7403a4afd54462  gcc/testsuite/g++.old-deja/g++.bugs/900407_01.C
  4254712d86c1247e0bb7a4a557701342  gcc/testsuite/g++.old-deja/g++.bugs/900428_01.C
  40d55f0463f2346d367636ae29a2483e  gcc/testsuite/g++.old-deja/g++.bugs/900428_02.C
! 7e515a8df49f2eaf093c9547f48bd446  gcc/testsuite/g++.old-deja/g++.bugs/900428_03.C
  b1c7b3e270e0d71b8936cef937980314  gcc/testsuite/g++.old-deja/g++.bugs/900511_01.C
  816e40831e0d42b36ac328d1c140f3b5  gcc/testsuite/g++.old-deja/g++.bugs/900511_02.C
  7c5fa26da82ab98b8a83c64d87bc1527  gcc/testsuite/g++.old-deja/g++.bugs/900511_03.C
*************** ac9a5240763e641aff84b4edf13031ce  gcc/te
*** 9664,9670 ****
  32f9838a2677f4322d6422963ad75321  gcc/testsuite/g++.old-deja/g++.bugs/900520_04.C
  e04f0d66f5d7d54dcb1732090fd6134e  gcc/testsuite/g++.old-deja/g++.bugs/900520_05.C
  365ad489a4b8cb4d59c97741b1d326bb  gcc/testsuite/g++.old-deja/g++.bugs/900520_06.C
! 273df0ae3b0f599b4f1755e193e190c7  gcc/testsuite/g++.old-deja/g++.eh/badalloc1.C
  f9b83360c3e457b4d7a952e5cfea8d08  gcc/testsuite/g++.old-deja/g++.eh/catch1.C
  1e641d82ee233ceda2ae0ab2028661f9  gcc/testsuite/g++.old-deja/g++.eh/catch10.C
  a83d60c4fb96f4454d525c1e8b6a33a7  gcc/testsuite/g++.old-deja/g++.eh/catch11.C
--- 10410,10416 ----
  32f9838a2677f4322d6422963ad75321  gcc/testsuite/g++.old-deja/g++.bugs/900520_04.C
  e04f0d66f5d7d54dcb1732090fd6134e  gcc/testsuite/g++.old-deja/g++.bugs/900520_05.C
  365ad489a4b8cb4d59c97741b1d326bb  gcc/testsuite/g++.old-deja/g++.bugs/900520_06.C
! 8ca25f6c472b75d7058fc8a9e72730bb  gcc/testsuite/g++.old-deja/g++.eh/badalloc1.C
  f9b83360c3e457b4d7a952e5cfea8d08  gcc/testsuite/g++.old-deja/g++.eh/catch1.C
  1e641d82ee233ceda2ae0ab2028661f9  gcc/testsuite/g++.old-deja/g++.eh/catch10.C
  a83d60c4fb96f4454d525c1e8b6a33a7  gcc/testsuite/g++.old-deja/g++.eh/catch11.C
*************** b2f69c1973b3d4b6b9e01df5ce3b43ba  gcc/te
*** 9750,9760 ****
  e82b542b0a0c5e5865a88d19fa40fca1  gcc/testsuite/g++.old-deja/g++.ext/arrnew.C
  c18d645703992bc6c135227ac629f48c  gcc/testsuite/g++.old-deja/g++.ext/arrnew2.C
  8caf0f252a94d1e8c8522f0e941e323a  gcc/testsuite/g++.old-deja/g++.ext/asmspec1.C
! f7bbbf8cf5fed79d67b2567d5a9b346b  gcc/testsuite/g++.old-deja/g++.ext/attrib1.C
! 427b87b67b7458f03bc6acb83337949e  gcc/testsuite/g++.old-deja/g++.ext/attrib2.C
! 3ec75355961179b2b993294de2b3148a  gcc/testsuite/g++.old-deja/g++.ext/attrib3.C
  ac9b53d93b7555f44ec60056f67897b6  gcc/testsuite/g++.old-deja/g++.ext/attrib4.C
! 3332915c9fa110dc0f3e23d861a6c6b1  gcc/testsuite/g++.old-deja/g++.ext/attrib5.C
  4a3cb5f4907fc2dd61b5a428d6f2a5eb  gcc/testsuite/g++.old-deja/g++.ext/attrib6.C
  3319bbc157c0ea8b1ee782f722a5788a  gcc/testsuite/g++.old-deja/g++.ext/bound1.C
  7e968cebb40357949b08db2dd18895f3  gcc/testsuite/g++.old-deja/g++.ext/constructor.C
--- 10496,10506 ----
  e82b542b0a0c5e5865a88d19fa40fca1  gcc/testsuite/g++.old-deja/g++.ext/arrnew.C
  c18d645703992bc6c135227ac629f48c  gcc/testsuite/g++.old-deja/g++.ext/arrnew2.C
  8caf0f252a94d1e8c8522f0e941e323a  gcc/testsuite/g++.old-deja/g++.ext/asmspec1.C
! 18cce16c27c18da40bd1aed1c39ca2cc  gcc/testsuite/g++.old-deja/g++.ext/attrib1.C
! a4fcabc75c7ec80a545f7adc963a57e9  gcc/testsuite/g++.old-deja/g++.ext/attrib2.C
! 1209be39344e477b07457ad84cb4d93a  gcc/testsuite/g++.old-deja/g++.ext/attrib3.C
  ac9b53d93b7555f44ec60056f67897b6  gcc/testsuite/g++.old-deja/g++.ext/attrib4.C
! 74b630c85e0a7d0bd7cc6ea294e424cd  gcc/testsuite/g++.old-deja/g++.ext/attrib5.C
  4a3cb5f4907fc2dd61b5a428d6f2a5eb  gcc/testsuite/g++.old-deja/g++.ext/attrib6.C
  3319bbc157c0ea8b1ee782f722a5788a  gcc/testsuite/g++.old-deja/g++.ext/bound1.C
  7e968cebb40357949b08db2dd18895f3  gcc/testsuite/g++.old-deja/g++.ext/constructor.C
*************** b1c35f1220768faee5ffeeaee105279a  gcc/te
*** 9850,9856 ****
  8609815143db722bd4431a37f59bb8dd  gcc/testsuite/g++.old-deja/g++.jason/cleanup.C
  5717fd1b0e6bcf41b721f303484a6ac1  gcc/testsuite/g++.old-deja/g++.jason/cleanup2.C
  a2ab5a0a642d863a09e42f9a8e848ae2  gcc/testsuite/g++.old-deja/g++.jason/complete1.C
! 9bbbfbbc105e0ad9c9d6c8f2db130885  gcc/testsuite/g++.old-deja/g++.jason/cond.C
  3e98a53b2fd5e64ea69c739618bd5668  gcc/testsuite/g++.old-deja/g++.jason/cond2.C
  fc4a6af03c5197badf1546ba01faa800  gcc/testsuite/g++.old-deja/g++.jason/condexp.C
  6ad12b9005b30cbeb1fba802dc27a7d5  gcc/testsuite/g++.old-deja/g++.jason/const.C
--- 10596,10602 ----
  8609815143db722bd4431a37f59bb8dd  gcc/testsuite/g++.old-deja/g++.jason/cleanup.C
  5717fd1b0e6bcf41b721f303484a6ac1  gcc/testsuite/g++.old-deja/g++.jason/cleanup2.C
  a2ab5a0a642d863a09e42f9a8e848ae2  gcc/testsuite/g++.old-deja/g++.jason/complete1.C
! 16b6bb00b4607e00fd44a395762041df  gcc/testsuite/g++.old-deja/g++.jason/cond.C
  3e98a53b2fd5e64ea69c739618bd5668  gcc/testsuite/g++.old-deja/g++.jason/cond2.C
  fc4a6af03c5197badf1546ba01faa800  gcc/testsuite/g++.old-deja/g++.jason/condexp.C
  6ad12b9005b30cbeb1fba802dc27a7d5  gcc/testsuite/g++.old-deja/g++.jason/const.C
*************** b908a684a68228cc43c1c82e98f30c15  gcc/te
*** 9874,9880 ****
  618c69032b7d5e2df7e9f844e2163432  gcc/testsuite/g++.old-deja/g++.jason/crash11.C
  0cd27db28b5911b4375c2bc740961e81  gcc/testsuite/g++.old-deja/g++.jason/crash12.C
  66c42c88e4f99ed7fcced398d13819d3  gcc/testsuite/g++.old-deja/g++.jason/crash3.C
! 7bbe254aef613c06e7f427ceb60a30d4  gcc/testsuite/g++.old-deja/g++.jason/crash4.C
  5723e0186bec62dede196f7a356a847b  gcc/testsuite/g++.old-deja/g++.jason/crash5.C
  708d8b60488e8033c68be64bdd4d3a10  gcc/testsuite/g++.old-deja/g++.jason/crash6.C
  4a4d87f783c83344aedc703f45458a29  gcc/testsuite/g++.old-deja/g++.jason/crash7.C
--- 10620,10626 ----
  618c69032b7d5e2df7e9f844e2163432  gcc/testsuite/g++.old-deja/g++.jason/crash11.C
  0cd27db28b5911b4375c2bc740961e81  gcc/testsuite/g++.old-deja/g++.jason/crash12.C
  66c42c88e4f99ed7fcced398d13819d3  gcc/testsuite/g++.old-deja/g++.jason/crash3.C
! 13d8905426885faa6eafe2778f295fe4  gcc/testsuite/g++.old-deja/g++.jason/crash4.C
  5723e0186bec62dede196f7a356a847b  gcc/testsuite/g++.old-deja/g++.jason/crash5.C
  708d8b60488e8033c68be64bdd4d3a10  gcc/testsuite/g++.old-deja/g++.jason/crash6.C
  4a4d87f783c83344aedc703f45458a29  gcc/testsuite/g++.old-deja/g++.jason/crash7.C
*************** b6d3a46381478f8b7d432201d4dc2c64  gcc/te
*** 9992,9998 ****
  e6e5909df623569b8a1afa024082f0a4  gcc/testsuite/g++.old-deja/g++.jason/overload19.C
  5ae6f5bc4522176f97d2cd841e1a7926  gcc/testsuite/g++.old-deja/g++.jason/overload2.C
  ce7af250f7d97a916c309fcb7bdf5997  gcc/testsuite/g++.old-deja/g++.jason/overload20.C
! 9d7fed42faa663a58b345e3f0b5e099f  gcc/testsuite/g++.old-deja/g++.jason/overload21.C
  bc7e41c42c6e2576b834163c75d5d78e  gcc/testsuite/g++.old-deja/g++.jason/overload22.C
  a9d1014c3fd283f29e67f5958d0ddb77  gcc/testsuite/g++.old-deja/g++.jason/overload23.C
  7c012da1d459fa7efbbe77bdacf46eb4  gcc/testsuite/g++.old-deja/g++.jason/overload24.C
--- 10738,10744 ----
  e6e5909df623569b8a1afa024082f0a4  gcc/testsuite/g++.old-deja/g++.jason/overload19.C
  5ae6f5bc4522176f97d2cd841e1a7926  gcc/testsuite/g++.old-deja/g++.jason/overload2.C
  ce7af250f7d97a916c309fcb7bdf5997  gcc/testsuite/g++.old-deja/g++.jason/overload20.C
! 8dfded660dfee2157b69050dee60eea0  gcc/testsuite/g++.old-deja/g++.jason/overload21.C
  bc7e41c42c6e2576b834163c75d5d78e  gcc/testsuite/g++.old-deja/g++.jason/overload22.C
  a9d1014c3fd283f29e67f5958d0ddb77  gcc/testsuite/g++.old-deja/g++.jason/overload23.C
  7c012da1d459fa7efbbe77bdacf46eb4  gcc/testsuite/g++.old-deja/g++.jason/overload24.C
*************** f2de5fe3e0d3eccd767f30d6ddb17d1b  gcc/te
*** 10043,10049 ****
  8171159f376db7eadc528db5c33bbb00  gcc/testsuite/g++.old-deja/g++.jason/pmf9.C
  04c40742143bf931e76c03c636795daf  gcc/testsuite/g++.old-deja/g++.jason/pmftemp.C
  a55282bfb97785a99ea82c5df50a774d  gcc/testsuite/g++.old-deja/g++.jason/precedence.C
! 0491b35319fb7e47f0c61b72b4b58fe4  gcc/testsuite/g++.old-deja/g++.jason/redecl1.C
  af741a2ea7ec1635196be2334010d100  gcc/testsuite/g++.old-deja/g++.jason/ref1.C
  5e43a7d7d89e730c493f6ba337b2dc0b  gcc/testsuite/g++.old-deja/g++.jason/ref10.C
  3468fe167ed24e45eddacb2d52bf2515  gcc/testsuite/g++.old-deja/g++.jason/ref11.C
--- 10789,10795 ----
  8171159f376db7eadc528db5c33bbb00  gcc/testsuite/g++.old-deja/g++.jason/pmf9.C
  04c40742143bf931e76c03c636795daf  gcc/testsuite/g++.old-deja/g++.jason/pmftemp.C
  a55282bfb97785a99ea82c5df50a774d  gcc/testsuite/g++.old-deja/g++.jason/precedence.C
! fb060d17ea08793e6aa9ab3c387a6fc5  gcc/testsuite/g++.old-deja/g++.jason/redecl1.C
  af741a2ea7ec1635196be2334010d100  gcc/testsuite/g++.old-deja/g++.jason/ref1.C
  5e43a7d7d89e730c493f6ba337b2dc0b  gcc/testsuite/g++.old-deja/g++.jason/ref10.C
  3468fe167ed24e45eddacb2d52bf2515  gcc/testsuite/g++.old-deja/g++.jason/ref11.C
*************** af741a2ea7ec1635196be2334010d100  gcc/te
*** 10056,10067 ****
  256c9d6626ad42870e64aface1ccd6e2  gcc/testsuite/g++.old-deja/g++.jason/ref7.C
  c409666afdfa0fc49074e974e734fc2c  gcc/testsuite/g++.old-deja/g++.jason/ref8.C
  fb8ee4111550f7c7dd3d408557af7094  gcc/testsuite/g++.old-deja/g++.jason/ref9.C
! 6a74ffbe03455e760ad50f980a23e27a  gcc/testsuite/g++.old-deja/g++.jason/report.C
  a291fe4b2802c42c5bf5ef02956040d9  gcc/testsuite/g++.old-deja/g++.jason/return.C
  696dd8eda2f32a76af21bed332c74dde  gcc/testsuite/g++.old-deja/g++.jason/return2.C
  514eeb1c7b3f52c448e1d96494b38cde  gcc/testsuite/g++.old-deja/g++.jason/return3.C
  c107b85655e25ea65c92d3bf5c5f8f9c  gcc/testsuite/g++.old-deja/g++.jason/rfg1.C
! a6b6a9a8952a314776e6f21174863fe6  gcc/testsuite/g++.old-deja/g++.jason/rfg10.C
  c01631c31e11d4cc9155124ca3be92ad  gcc/testsuite/g++.old-deja/g++.jason/rfg11.C
  b68e6789cb14c6dd5e693b769a6b3afb  gcc/testsuite/g++.old-deja/g++.jason/rfg12.C
  ffde7a25a76a6d04ac637d8dbfedd1be  gcc/testsuite/g++.old-deja/g++.jason/rfg13.C
--- 10802,10813 ----
  256c9d6626ad42870e64aface1ccd6e2  gcc/testsuite/g++.old-deja/g++.jason/ref7.C
  c409666afdfa0fc49074e974e734fc2c  gcc/testsuite/g++.old-deja/g++.jason/ref8.C
  fb8ee4111550f7c7dd3d408557af7094  gcc/testsuite/g++.old-deja/g++.jason/ref9.C
! 8237ffa09cf9c9b9121407b77036154b  gcc/testsuite/g++.old-deja/g++.jason/report.C
  a291fe4b2802c42c5bf5ef02956040d9  gcc/testsuite/g++.old-deja/g++.jason/return.C
  696dd8eda2f32a76af21bed332c74dde  gcc/testsuite/g++.old-deja/g++.jason/return2.C
  514eeb1c7b3f52c448e1d96494b38cde  gcc/testsuite/g++.old-deja/g++.jason/return3.C
  c107b85655e25ea65c92d3bf5c5f8f9c  gcc/testsuite/g++.old-deja/g++.jason/rfg1.C
! ef4717883aac926ce741042ce7edf73f  gcc/testsuite/g++.old-deja/g++.jason/rfg10.C
  c01631c31e11d4cc9155124ca3be92ad  gcc/testsuite/g++.old-deja/g++.jason/rfg11.C
  b68e6789cb14c6dd5e693b769a6b3afb  gcc/testsuite/g++.old-deja/g++.jason/rfg12.C
  ffde7a25a76a6d04ac637d8dbfedd1be  gcc/testsuite/g++.old-deja/g++.jason/rfg13.C
*************** f405fecefaac43877a03a51721990370  gcc/te
*** 10145,10151 ****
  55a4409b20effb409975701d8a1450dc  gcc/testsuite/g++.old-deja/g++.jason/template28.C
  df154678c22816af85a841d67d2cbe30  gcc/testsuite/g++.old-deja/g++.jason/template29.C
  04bedf6df6ecdffcb63b9a43eb255c70  gcc/testsuite/g++.old-deja/g++.jason/template3.C
! 08b3602cc3c76792a68ddc98148b8a58  gcc/testsuite/g++.old-deja/g++.jason/template30.C
  7b53efc0f56a895189f400db90bab773  gcc/testsuite/g++.old-deja/g++.jason/template31.C
  ad2c663d36d9a0f17dc938a311946155  gcc/testsuite/g++.old-deja/g++.jason/template32.C
  5f7be0c335bab3f21a9621c47f4ba64d  gcc/testsuite/g++.old-deja/g++.jason/template33.C
--- 10891,10897 ----
  55a4409b20effb409975701d8a1450dc  gcc/testsuite/g++.old-deja/g++.jason/template28.C
  df154678c22816af85a841d67d2cbe30  gcc/testsuite/g++.old-deja/g++.jason/template29.C
  04bedf6df6ecdffcb63b9a43eb255c70  gcc/testsuite/g++.old-deja/g++.jason/template3.C
! 2de41f4f01d5bf8a400dfca0bb38f216  gcc/testsuite/g++.old-deja/g++.jason/template30.C
  7b53efc0f56a895189f400db90bab773  gcc/testsuite/g++.old-deja/g++.jason/template31.C
  ad2c663d36d9a0f17dc938a311946155  gcc/testsuite/g++.old-deja/g++.jason/template32.C
  5f7be0c335bab3f21a9621c47f4ba64d  gcc/testsuite/g++.old-deja/g++.jason/template33.C
*************** e4681da1536da14176b6242aa0cde9a4  gcc/te
*** 10177,10184 ****
  0f465f011856318e4a82bae9e718ca27  gcc/testsuite/g++.old-deja/g++.jason/tempsub.C
  40fcdd9ac5d7df502c6154f385d814a8  gcc/testsuite/g++.old-deja/g++.jason/this.C
  9c846445e2018745dcc34b2f1642858c  gcc/testsuite/g++.old-deja/g++.jason/thunk1.C
! c9a8b2ee0b9f7bb4c12e681360d134ed  gcc/testsuite/g++.old-deja/g++.jason/thunk2.C
! e338a06c82c760888c9bca5dbccafd4b  gcc/testsuite/g++.old-deja/g++.jason/thunk3.C
  776a6eba4666d06b4325a2d0850afe81  gcc/testsuite/g++.old-deja/g++.jason/tredecl.C
  bed2e0f518532685396e3880a1588ea1  gcc/testsuite/g++.old-deja/g++.jason/tredecl2.C
  bb1e0f3963c848d63c1da72405f295ce  gcc/testsuite/g++.old-deja/g++.jason/tredecl3.C
--- 10923,10930 ----
  0f465f011856318e4a82bae9e718ca27  gcc/testsuite/g++.old-deja/g++.jason/tempsub.C
  40fcdd9ac5d7df502c6154f385d814a8  gcc/testsuite/g++.old-deja/g++.jason/this.C
  9c846445e2018745dcc34b2f1642858c  gcc/testsuite/g++.old-deja/g++.jason/thunk1.C
! ccacfcd55aa5fa82e49e7e051dbb5f97  gcc/testsuite/g++.old-deja/g++.jason/thunk2.C
! d4c86d3cad084be27dde69ee68464d52  gcc/testsuite/g++.old-deja/g++.jason/thunk3.C
  776a6eba4666d06b4325a2d0850afe81  gcc/testsuite/g++.old-deja/g++.jason/tredecl.C
  bed2e0f518532685396e3880a1588ea1  gcc/testsuite/g++.old-deja/g++.jason/tredecl2.C
  bb1e0f3963c848d63c1da72405f295ce  gcc/testsuite/g++.old-deja/g++.jason/tredecl3.C
*************** a527d9d80c0f8b1b8cc068fbe97dd294  gcc/te
*** 10203,10209 ****
  72dab6b8f0b29b602295c6af7a5f15be  gcc/testsuite/g++.old-deja/g++.jason/warning6.C
  68587f14a57035c7dcfe5788d601729c  gcc/testsuite/g++.old-deja/g++.jason/warning7.C
  a4a98da49e2e4b8c46f1e9653be42b53  gcc/testsuite/g++.old-deja/g++.jason/warning8.C
! a7d94378c3310a2d61742de04428a695  gcc/testsuite/g++.old-deja/g++.jason/warning9.C
  1c73e8224f5abf06d0756ccb118b07ce  gcc/testsuite/g++.old-deja/g++.law/access1.C
  f2d968b6cc92b14a86959b52a90a8990  gcc/testsuite/g++.old-deja/g++.law/access2.C
  9969f99108bad773ac33911d5a467ba4  gcc/testsuite/g++.old-deja/g++.law/access3.C
--- 10949,10955 ----
  72dab6b8f0b29b602295c6af7a5f15be  gcc/testsuite/g++.old-deja/g++.jason/warning6.C
  68587f14a57035c7dcfe5788d601729c  gcc/testsuite/g++.old-deja/g++.jason/warning7.C
  a4a98da49e2e4b8c46f1e9653be42b53  gcc/testsuite/g++.old-deja/g++.jason/warning8.C
! 314bec1817ea9c903efde451dc59d8d7  gcc/testsuite/g++.old-deja/g++.jason/warning9.C
  1c73e8224f5abf06d0756ccb118b07ce  gcc/testsuite/g++.old-deja/g++.law/access1.C
  f2d968b6cc92b14a86959b52a90a8990  gcc/testsuite/g++.old-deja/g++.law/access2.C
  9969f99108bad773ac33911d5a467ba4  gcc/testsuite/g++.old-deja/g++.law/access3.C
*************** f28b31a8801c7e65bbdbcc76c8f2ee8f  gcc/te
*** 10223,10229 ****
  423460a9aa0433071409edc0bb9877b2  gcc/testsuite/g++.old-deja/g++.law/arm1.C
  9ac5b9af9bf7f58a3a9618dde4a508e9  gcc/testsuite/g++.old-deja/g++.law/arm10.C
  587c835fb12312b7730448ae3399fdb6  gcc/testsuite/g++.old-deja/g++.law/arm11.C
! aa312ffcede4acccca74d83c8efcc805  gcc/testsuite/g++.old-deja/g++.law/arm12.C
  c05c2f1ee3a19b333421bc4f4791b463  gcc/testsuite/g++.old-deja/g++.law/arm13.C
  5a4d8804ee8bd4119db184fad7166f88  gcc/testsuite/g++.old-deja/g++.law/arm14.C
  6b9d818d286e7fcc3181ecc976c5356c  gcc/testsuite/g++.old-deja/g++.law/arm15.C
--- 10969,10975 ----
  423460a9aa0433071409edc0bb9877b2  gcc/testsuite/g++.old-deja/g++.law/arm1.C
  9ac5b9af9bf7f58a3a9618dde4a508e9  gcc/testsuite/g++.old-deja/g++.law/arm10.C
  587c835fb12312b7730448ae3399fdb6  gcc/testsuite/g++.old-deja/g++.law/arm11.C
! 39b5d67caa4d415cc767392982e5f975  gcc/testsuite/g++.old-deja/g++.law/arm12.C
  c05c2f1ee3a19b333421bc4f4791b463  gcc/testsuite/g++.old-deja/g++.law/arm13.C
  5a4d8804ee8bd4119db184fad7166f88  gcc/testsuite/g++.old-deja/g++.law/arm14.C
  6b9d818d286e7fcc3181ecc976c5356c  gcc/testsuite/g++.old-deja/g++.law/arm15.C
*************** d577d8c55e685042d83bba698f01886b  gcc/te
*** 10244,10250 ****
  822533128eb0e0a4bcaef22a20c38fad  gcc/testsuite/g++.old-deja/g++.law/bad-error6.C
  daaf68975d20f0ba1af45a1786dabcfb  gcc/testsuite/g++.old-deja/g++.law/bad-error7.C
  cc941aafb35ee4370727338c862b89a3  gcc/testsuite/g++.old-deja/g++.law/bit-fields1.C
! 122fdeff3fd2d92f2b78ea03b098769e  gcc/testsuite/g++.old-deja/g++.law/bit-fields2.C
  0367f254f4f882067f24c4d417963ff3  gcc/testsuite/g++.old-deja/g++.law/bit-fields3.C
  0261272f9b949fb8c1de6aa0afe5eb19  gcc/testsuite/g++.old-deja/g++.law/builtin1.C
  d064abffb69b49b904a86972c9b22300  gcc/testsuite/g++.old-deja/g++.law/casts1.C
--- 10990,10996 ----
  822533128eb0e0a4bcaef22a20c38fad  gcc/testsuite/g++.old-deja/g++.law/bad-error6.C
  daaf68975d20f0ba1af45a1786dabcfb  gcc/testsuite/g++.old-deja/g++.law/bad-error7.C
  cc941aafb35ee4370727338c862b89a3  gcc/testsuite/g++.old-deja/g++.law/bit-fields1.C
! ba1a7b1525e9a7cef0a59366e2ecede7  gcc/testsuite/g++.old-deja/g++.law/bit-fields2.C
  0367f254f4f882067f24c4d417963ff3  gcc/testsuite/g++.old-deja/g++.law/bit-fields3.C
  0261272f9b949fb8c1de6aa0afe5eb19  gcc/testsuite/g++.old-deja/g++.law/builtin1.C
  d064abffb69b49b904a86972c9b22300  gcc/testsuite/g++.old-deja/g++.law/casts1.C
*************** a3655db48ce5aa14618d4b6b4c59c540  gcc/te
*** 10272,10278 ****
  dc32c6d12d1a1b5cd5bb38c3c95f7d21  gcc/testsuite/g++.old-deja/g++.law/ctors21.C
  7fca46a172e3bee134b4a9f9b5e04bad  gcc/testsuite/g++.old-deja/g++.law/ctors3.C
  06ecb0ea3c8fc37c696d9abb04e7f082  gcc/testsuite/g++.old-deja/g++.law/ctors4.C
! 83a5e3972d2c4e83a78d179748007dd0  gcc/testsuite/g++.old-deja/g++.law/ctors5.C
  3c88f551fae35afe3700c32a9b86ba3b  gcc/testsuite/g++.old-deja/g++.law/ctors6.C
  6d1ecf0bf050305a618ec44c59b54db4  gcc/testsuite/g++.old-deja/g++.law/ctors7.C
  1c153aca2432c068fe35c65ebd6b24b9  gcc/testsuite/g++.old-deja/g++.law/ctors8.C
--- 11018,11024 ----
  dc32c6d12d1a1b5cd5bb38c3c95f7d21  gcc/testsuite/g++.old-deja/g++.law/ctors21.C
  7fca46a172e3bee134b4a9f9b5e04bad  gcc/testsuite/g++.old-deja/g++.law/ctors3.C
  06ecb0ea3c8fc37c696d9abb04e7f082  gcc/testsuite/g++.old-deja/g++.law/ctors4.C
! af675a9e37cf7f6ac03943a7d4b8815e  gcc/testsuite/g++.old-deja/g++.law/ctors5.C
  3c88f551fae35afe3700c32a9b86ba3b  gcc/testsuite/g++.old-deja/g++.law/ctors6.C
  6d1ecf0bf050305a618ec44c59b54db4  gcc/testsuite/g++.old-deja/g++.law/ctors7.C
  1c153aca2432c068fe35c65ebd6b24b9  gcc/testsuite/g++.old-deja/g++.law/ctors8.C
*************** cbae2bf0ce3e57fc66439d36da03e0d5  gcc/te
*** 10289,10295 ****
  1f68fb21dd289bc6d6073480ead2ce03  gcc/testsuite/g++.old-deja/g++.law/cvt18.C
  59c4dcdbd25a43a3d1379b1156ae3c08  gcc/testsuite/g++.old-deja/g++.law/cvt19.C
  15d1e6d8211f9560955e7b29645c20ea  gcc/testsuite/g++.old-deja/g++.law/cvt2.C
! fe37d2f10d93d1f444385d8d895306a4  gcc/testsuite/g++.old-deja/g++.law/cvt20.C
  f4d804181feaef36ad9e9c57d9ace840  gcc/testsuite/g++.old-deja/g++.law/cvt21.C
  9f4049af50feb8fc2d762b8fb72e4db2  gcc/testsuite/g++.old-deja/g++.law/cvt22.C
  7c3b8faaed2aac780d6da9e8a809304f  gcc/testsuite/g++.old-deja/g++.law/cvt23.C
--- 11035,11041 ----
  1f68fb21dd289bc6d6073480ead2ce03  gcc/testsuite/g++.old-deja/g++.law/cvt18.C
  59c4dcdbd25a43a3d1379b1156ae3c08  gcc/testsuite/g++.old-deja/g++.law/cvt19.C
  15d1e6d8211f9560955e7b29645c20ea  gcc/testsuite/g++.old-deja/g++.law/cvt2.C
! b0aa79232bd80769372e390c1e6a6c56  gcc/testsuite/g++.old-deja/g++.law/cvt20.C
  f4d804181feaef36ad9e9c57d9ace840  gcc/testsuite/g++.old-deja/g++.law/cvt21.C
  9f4049af50feb8fc2d762b8fb72e4db2  gcc/testsuite/g++.old-deja/g++.law/cvt22.C
  7c3b8faaed2aac780d6da9e8a809304f  gcc/testsuite/g++.old-deja/g++.law/cvt23.C
*************** c50a0f8a1377cfbb50605dafa54460db  gcc/te
*** 10312,10318 ****
  c9ea54961148714986505d5f61ba5e51  gcc/testsuite/g++.old-deja/g++.law/enum4.C
  2509a6d3dfafb6c8581c6d6baa1a2b55  gcc/testsuite/g++.old-deja/g++.law/enum6.C
  a148f19373f2b475268eafbb0a19cd4c  gcc/testsuite/g++.old-deja/g++.law/enum7.C
- b180e28476416bee81e2f1814451fa2a  gcc/testsuite/g++.old-deja/g++.law/enum8.C
  20c81497e4629a3f86d9c3b87ee9ba39  gcc/testsuite/g++.old-deja/g++.law/enum9.C
  fa91781a296ec68a2631735b5a3d93e8  gcc/testsuite/g++.old-deja/g++.law/except1.C
  78fafdc2ce65c395103fb31e50e03979  gcc/testsuite/g++.old-deja/g++.law/except2.C
--- 11058,11063 ----
*************** c6d0cbb7d9fb204d0d8d7175abbaec4f  gcc/te
*** 10326,10332 ****
  3dcbeb7d145ae39da345f01ab8299d61  gcc/testsuite/g++.old-deja/g++.law/global-init1.C
  48e16841a2d71a47ef942cdd221a4ce2  gcc/testsuite/g++.old-deja/g++.law/incdec1.C
  df21eb6157a9d19cdc13af01cce6cca5  gcc/testsuite/g++.old-deja/g++.law/init1.C
! 2035ec618e7bd981dacf3af496362a6e  gcc/testsuite/g++.old-deja/g++.law/init10.C
  3950c430bd280f39e8049a1f539a5785  gcc/testsuite/g++.old-deja/g++.law/init11.C
  c3e54fbfdc7acd00564d8782151e53d6  gcc/testsuite/g++.old-deja/g++.law/init13.C
  7c4b313b31666bebeda89f6c518a0fbe  gcc/testsuite/g++.old-deja/g++.law/init14.C
--- 11071,11077 ----
  3dcbeb7d145ae39da345f01ab8299d61  gcc/testsuite/g++.old-deja/g++.law/global-init1.C
  48e16841a2d71a47ef942cdd221a4ce2  gcc/testsuite/g++.old-deja/g++.law/incdec1.C
  df21eb6157a9d19cdc13af01cce6cca5  gcc/testsuite/g++.old-deja/g++.law/init1.C
! b75b5997a964f396d0bc1dff8ad95f60  gcc/testsuite/g++.old-deja/g++.law/init10.C
  3950c430bd280f39e8049a1f539a5785  gcc/testsuite/g++.old-deja/g++.law/init11.C
  c3e54fbfdc7acd00564d8782151e53d6  gcc/testsuite/g++.old-deja/g++.law/init13.C
  7c4b313b31666bebeda89f6c518a0fbe  gcc/testsuite/g++.old-deja/g++.law/init14.C
*************** e3dd9efb103bf1cc825765f67f73e977  gcc/te
*** 10336,10342 ****
  6b2391d549fd37a3bd0a45235a0e6fc4  gcc/testsuite/g++.old-deja/g++.law/init5.C
  3f386766c771d61bbe2022fb1a4adcc2  gcc/testsuite/g++.old-deja/g++.law/init6.C
  1ca2f1117952406b5dee95198e0122e6  gcc/testsuite/g++.old-deja/g++.law/init7.C
! bb7331570bf06977bcff3a73bd234185  gcc/testsuite/g++.old-deja/g++.law/init8.C
  f2e0e66a77f891c7ed59feea320b4691  gcc/testsuite/g++.old-deja/g++.law/init9.C
  d621cc9a35c3180103ded4695025f3cb  gcc/testsuite/g++.old-deja/g++.law/inline4.C
  07568fbf39d40eda3d02fd38a8c613c6  gcc/testsuite/g++.old-deja/g++.law/inline6.C
--- 11081,11087 ----
  6b2391d549fd37a3bd0a45235a0e6fc4  gcc/testsuite/g++.old-deja/g++.law/init5.C
  3f386766c771d61bbe2022fb1a4adcc2  gcc/testsuite/g++.old-deja/g++.law/init6.C
  1ca2f1117952406b5dee95198e0122e6  gcc/testsuite/g++.old-deja/g++.law/init7.C
! 3ca5c79a89b9017cae9e97f69ff0c2e5  gcc/testsuite/g++.old-deja/g++.law/init8.C
  f2e0e66a77f891c7ed59feea320b4691  gcc/testsuite/g++.old-deja/g++.law/init9.C
  d621cc9a35c3180103ded4695025f3cb  gcc/testsuite/g++.old-deja/g++.law/inline4.C
  07568fbf39d40eda3d02fd38a8c613c6  gcc/testsuite/g++.old-deja/g++.law/inline6.C
*************** a24fcf602f3d08b6fdaa6df61f40e188  gcc/te
*** 10392,10398 ****
  6c538e1ec51e48676485e007b0bd1ca5  gcc/testsuite/g++.old-deja/g++.law/parsing9.C
  db70425749f0bcf360ec8a3d2c5bdb73  gcc/testsuite/g++.old-deja/g++.law/patches1.C
  ba9f9c290ccad9db193e1e2b8b96a82e  gcc/testsuite/g++.old-deja/g++.law/pic1.C
! 2ada5417942cd7813740b18e2c0584d6  gcc/testsuite/g++.old-deja/g++.law/profile1.C
  ea41b2158ea1ad2d05dfc351c4f23a9d  gcc/testsuite/g++.old-deja/g++.law/refs1.C
  57c54b83f5425f794b19b867f0a27073  gcc/testsuite/g++.old-deja/g++.law/refs2.C
  ba81cc1584de7e22a78f9d7c3c75a0bb  gcc/testsuite/g++.old-deja/g++.law/refs3.C
--- 11137,11143 ----
  6c538e1ec51e48676485e007b0bd1ca5  gcc/testsuite/g++.old-deja/g++.law/parsing9.C
  db70425749f0bcf360ec8a3d2c5bdb73  gcc/testsuite/g++.old-deja/g++.law/patches1.C
  ba9f9c290ccad9db193e1e2b8b96a82e  gcc/testsuite/g++.old-deja/g++.law/pic1.C
! 51a2d74f53aababc3c7681e5ffeddd2a  gcc/testsuite/g++.old-deja/g++.law/profile1.C
  ea41b2158ea1ad2d05dfc351c4f23a9d  gcc/testsuite/g++.old-deja/g++.law/refs1.C
  57c54b83f5425f794b19b867f0a27073  gcc/testsuite/g++.old-deja/g++.law/refs2.C
  ba81cc1584de7e22a78f9d7c3c75a0bb  gcc/testsuite/g++.old-deja/g++.law/refs3.C
*************** ada624624ac329cec31588daed334d60  gcc/te
*** 10440,10446 ****
  dce4661dcbcb694a1167a86aab76bfea  gcc/testsuite/g++.old-deja/g++.law/visibility14.C
  d2997ded14d51717c762887d4392e84c  gcc/testsuite/g++.old-deja/g++.law/visibility15.C
  febe274567c48e215fa619cfe9f9810e  gcc/testsuite/g++.old-deja/g++.law/visibility16.C
! 140b1bc5be593f4b7051a300f4a24649  gcc/testsuite/g++.old-deja/g++.law/visibility17.C
  e3495b47d8941198b10d0377144a4b7a  gcc/testsuite/g++.old-deja/g++.law/visibility18.C
  6938f2fc6aa2411fa4c11e2e5fb89e8c  gcc/testsuite/g++.old-deja/g++.law/visibility19.C
  c00a327edcdac7ea82d049dfdef833de  gcc/testsuite/g++.old-deja/g++.law/visibility2.C
--- 11185,11191 ----
  dce4661dcbcb694a1167a86aab76bfea  gcc/testsuite/g++.old-deja/g++.law/visibility14.C
  d2997ded14d51717c762887d4392e84c  gcc/testsuite/g++.old-deja/g++.law/visibility15.C
  febe274567c48e215fa619cfe9f9810e  gcc/testsuite/g++.old-deja/g++.law/visibility16.C
! 5ba0516b7ceca15dab4eff4a92799239  gcc/testsuite/g++.old-deja/g++.law/visibility17.C
  e3495b47d8941198b10d0377144a4b7a  gcc/testsuite/g++.old-deja/g++.law/visibility18.C
  6938f2fc6aa2411fa4c11e2e5fb89e8c  gcc/testsuite/g++.old-deja/g++.law/visibility19.C
  c00a327edcdac7ea82d049dfdef833de  gcc/testsuite/g++.old-deja/g++.law/visibility2.C
*************** a24bfda97e2b33d0ab14a8f7ba45e74a  gcc/te
*** 10456,10462 ****
  f8897bc4bdbaf34851e3c4b9b65098db  gcc/testsuite/g++.old-deja/g++.law/visibility4.C
  3bd4251d02ab1e87eff95031ca47ebb7  gcc/testsuite/g++.old-deja/g++.law/visibility5.C
  7e90928363971d529814c3222a33b5ee  gcc/testsuite/g++.old-deja/g++.law/visibility6.C
! 9f9a3defcfa5396a0bd3adbdb8e9bfa0  gcc/testsuite/g++.old-deja/g++.law/visibility7.C
  ebcad15f2df16a055754c0803b28e6c6  gcc/testsuite/g++.old-deja/g++.law/visibility8.C
  6476bf88463c00ab0c5adf3d245d2a67  gcc/testsuite/g++.old-deja/g++.law/visibility9.C
  f3059608a1f797e501185505c8997b6d  gcc/testsuite/g++.old-deja/g++.law/vtable1.C
--- 11201,11207 ----
  f8897bc4bdbaf34851e3c4b9b65098db  gcc/testsuite/g++.old-deja/g++.law/visibility4.C
  3bd4251d02ab1e87eff95031ca47ebb7  gcc/testsuite/g++.old-deja/g++.law/visibility5.C
  7e90928363971d529814c3222a33b5ee  gcc/testsuite/g++.old-deja/g++.law/visibility6.C
! d8a41454edc8533e369074294d53c672  gcc/testsuite/g++.old-deja/g++.law/visibility7.C
  ebcad15f2df16a055754c0803b28e6c6  gcc/testsuite/g++.old-deja/g++.law/visibility8.C
  6476bf88463c00ab0c5adf3d245d2a67  gcc/testsuite/g++.old-deja/g++.law/visibility9.C
  f3059608a1f797e501185505c8997b6d  gcc/testsuite/g++.old-deja/g++.law/vtable1.C
*************** a5a20b474dfedd22ce291f83012e6f40  gcc/te
*** 10579,10585 ****
  8bf0ae9467ae58915d74cf8e2d3445f2  gcc/testsuite/g++.old-deja/g++.mike/misc1.C
  50eafe2d854e823c0502d93e211bcf29  gcc/testsuite/g++.old-deja/g++.mike/misc11.C
  da1ce6afddaab5620bf824cf528ecf55  gcc/testsuite/g++.old-deja/g++.mike/misc12.C
! 1616468b0f945922d84f837b6e852b05  gcc/testsuite/g++.old-deja/g++.mike/misc13.C
  93add0632516dbe14bb4b6b5c500f2eb  gcc/testsuite/g++.old-deja/g++.mike/misc14.C
  e7c9db1b2be675ff14addb88e2a90cef  gcc/testsuite/g++.old-deja/g++.mike/misc2.C
  1a0f7dba97bd99b0cc3581a3ed89d967  gcc/testsuite/g++.old-deja/g++.mike/misc3.C
--- 11324,11330 ----
  8bf0ae9467ae58915d74cf8e2d3445f2  gcc/testsuite/g++.old-deja/g++.mike/misc1.C
  50eafe2d854e823c0502d93e211bcf29  gcc/testsuite/g++.old-deja/g++.mike/misc11.C
  da1ce6afddaab5620bf824cf528ecf55  gcc/testsuite/g++.old-deja/g++.mike/misc12.C
! 5fd3339f10cb6e59bce87e7ba17cfc02  gcc/testsuite/g++.old-deja/g++.mike/misc13.C
  93add0632516dbe14bb4b6b5c500f2eb  gcc/testsuite/g++.old-deja/g++.mike/misc14.C
  e7c9db1b2be675ff14addb88e2a90cef  gcc/testsuite/g++.old-deja/g++.mike/misc2.C
  1a0f7dba97bd99b0cc3581a3ed89d967  gcc/testsuite/g++.old-deja/g++.mike/misc3.C
*************** c51d1f78f58b607ac993e87fbc6045be  gcc/te
*** 10632,10638 ****
  ae9a58636760037a1be36159d9da8e25  gcc/testsuite/g++.old-deja/g++.mike/net48.C
  e07d88b8b2e772bacad1496d54044434  gcc/testsuite/g++.old-deja/g++.mike/net6.C
  3b0a59fdf2e871154f766f5c2e0554f0  gcc/testsuite/g++.old-deja/g++.mike/net7.C
! de2dbddbd78622e211d14a670a6f26ed  gcc/testsuite/g++.old-deja/g++.mike/net8.C
  d131a415548d6bfa1dd4160ed055b1e3  gcc/testsuite/g++.old-deja/g++.mike/net9.C
  18b189c7ce9975404c5da7000eae77d6  gcc/testsuite/g++.old-deja/g++.mike/ns1.C
  80364ad5d626abafba75898156d3b9f1  gcc/testsuite/g++.old-deja/g++.mike/ns10.C
--- 11377,11383 ----
  ae9a58636760037a1be36159d9da8e25  gcc/testsuite/g++.old-deja/g++.mike/net48.C
  e07d88b8b2e772bacad1496d54044434  gcc/testsuite/g++.old-deja/g++.mike/net6.C
  3b0a59fdf2e871154f766f5c2e0554f0  gcc/testsuite/g++.old-deja/g++.mike/net7.C
! e55f41d9b8315270b0cd77d1763d4dfe  gcc/testsuite/g++.old-deja/g++.mike/net8.C
  d131a415548d6bfa1dd4160ed055b1e3  gcc/testsuite/g++.old-deja/g++.mike/net9.C
  18b189c7ce9975404c5da7000eae77d6  gcc/testsuite/g++.old-deja/g++.mike/ns1.C
  80364ad5d626abafba75898156d3b9f1  gcc/testsuite/g++.old-deja/g++.mike/ns10.C
*************** dbf61afb40127648f192a500027fa778  gcc/te
*** 10647,10662 ****
  303ff2317c6933ffa76cfc2da4659e58  gcc/testsuite/g++.old-deja/g++.mike/ns5.C
  807d61ee0b7b2a5e312665da5920e809  gcc/testsuite/g++.old-deja/g++.mike/ns6.C
  dbb22344b19b6a2c16027545d699efd3  gcc/testsuite/g++.old-deja/g++.mike/ns7.C
- 807d61ee0b7b2a5e312665da5920e809  gcc/testsuite/g++.old-deja/g++.mike/ns8.C
  4a3de2ed51c5c86f093a526a49706d78  gcc/testsuite/g++.old-deja/g++.mike/ns9.C
  3965fc19eb6663be08307c5616215720  gcc/testsuite/g++.old-deja/g++.mike/offset1.C
  33f8b01274afad390de5e0293e69a362  gcc/testsuite/g++.old-deja/g++.mike/opr-as1.C
  85a2185da4141e90bad27178d19ee7ae  gcc/testsuite/g++.old-deja/g++.mike/opr-dot1.C
! 1d0fa1b397088c6b54ac192e0b9a342c  gcc/testsuite/g++.old-deja/g++.mike/p10148.C
  2518f92cc28ff4e3f4df7b080c7cadbe  gcc/testsuite/g++.old-deja/g++.mike/p10247.C
  36792b07826db2b4c4f253c0d16d20f6  gcc/testsuite/g++.old-deja/g++.mike/p10416.C
  653cff7be2aed2432b42ba1821f0f61e  gcc/testsuite/g++.old-deja/g++.mike/p10511.C
- 79931e04d04eec832e104170b3b1bab4  gcc/testsuite/g++.old-deja/g++.mike/p10769a.C
  2aafb6ed42fcfe2b9aa819750e5c3c36  gcc/testsuite/g++.old-deja/g++.mike/p10769b.C
  3dcc8f21f5f9b0981a00f610b3528d2d  gcc/testsuite/g++.old-deja/g++.mike/p10849a.C
  2a5ad552fb34f7ba919d73e7f3207bbb  gcc/testsuite/g++.old-deja/g++.mike/p10951.C
--- 11392,11405 ----
  303ff2317c6933ffa76cfc2da4659e58  gcc/testsuite/g++.old-deja/g++.mike/ns5.C
  807d61ee0b7b2a5e312665da5920e809  gcc/testsuite/g++.old-deja/g++.mike/ns6.C
  dbb22344b19b6a2c16027545d699efd3  gcc/testsuite/g++.old-deja/g++.mike/ns7.C
  4a3de2ed51c5c86f093a526a49706d78  gcc/testsuite/g++.old-deja/g++.mike/ns9.C
  3965fc19eb6663be08307c5616215720  gcc/testsuite/g++.old-deja/g++.mike/offset1.C
  33f8b01274afad390de5e0293e69a362  gcc/testsuite/g++.old-deja/g++.mike/opr-as1.C
  85a2185da4141e90bad27178d19ee7ae  gcc/testsuite/g++.old-deja/g++.mike/opr-dot1.C
! e4699854bed66b3f68a770685ea0d61a  gcc/testsuite/g++.old-deja/g++.mike/p10148.C
  2518f92cc28ff4e3f4df7b080c7cadbe  gcc/testsuite/g++.old-deja/g++.mike/p10247.C
  36792b07826db2b4c4f253c0d16d20f6  gcc/testsuite/g++.old-deja/g++.mike/p10416.C
  653cff7be2aed2432b42ba1821f0f61e  gcc/testsuite/g++.old-deja/g++.mike/p10511.C
  2aafb6ed42fcfe2b9aa819750e5c3c36  gcc/testsuite/g++.old-deja/g++.mike/p10769b.C
  3dcc8f21f5f9b0981a00f610b3528d2d  gcc/testsuite/g++.old-deja/g++.mike/p10849a.C
  2a5ad552fb34f7ba919d73e7f3207bbb  gcc/testsuite/g++.old-deja/g++.mike/p10951.C
*************** b98078dc4c7d7d9d362631323df1a6e2  gcc/te
*** 10736,10742 ****
  475b47a42ee70abe78335897be8ea9d6  gcc/testsuite/g++.old-deja/g++.mike/p6058.C
  9ec5c6a4192bdb3c75ad240873354bbc  gcc/testsuite/g++.old-deja/g++.mike/p6149.C
  31d4b934b63d1ccd3fce41f3cdd4ee83  gcc/testsuite/g++.old-deja/g++.mike/p6311.C
! 022ed35927f186c1bc8c1134d0a4603d  gcc/testsuite/g++.old-deja/g++.mike/p646.C
  6305cff2956e86afbcf693994724bcc8  gcc/testsuite/g++.old-deja/g++.mike/p6578.C
  f6fc521ba74cbd275fa92d8670d497ac  gcc/testsuite/g++.old-deja/g++.mike/p658.C
  c08220ad297c848fcc61433677ce38a7  gcc/testsuite/g++.old-deja/g++.mike/p6610a.C
--- 11479,11485 ----
  475b47a42ee70abe78335897be8ea9d6  gcc/testsuite/g++.old-deja/g++.mike/p6058.C
  9ec5c6a4192bdb3c75ad240873354bbc  gcc/testsuite/g++.old-deja/g++.mike/p6149.C
  31d4b934b63d1ccd3fce41f3cdd4ee83  gcc/testsuite/g++.old-deja/g++.mike/p6311.C
! eff5694ca083d51c307325f9db7086dd  gcc/testsuite/g++.old-deja/g++.mike/p646.C
  6305cff2956e86afbcf693994724bcc8  gcc/testsuite/g++.old-deja/g++.mike/p6578.C
  f6fc521ba74cbd275fa92d8670d497ac  gcc/testsuite/g++.old-deja/g++.mike/p658.C
  c08220ad297c848fcc61433677ce38a7  gcc/testsuite/g++.old-deja/g++.mike/p6610a.C
*************** c08220ad297c848fcc61433677ce38a7  gcc/te
*** 10745,10752 ****
  cbfcdfb1f49d32d7e79c53a80b278c05  gcc/testsuite/g++.old-deja/g++.mike/p6746.C
  f2c302be5b4bfcfe6a838f96e32fd4d4  gcc/testsuite/g++.old-deja/g++.mike/p6901.C
  866dc96069d3e273437caf99e8bb5c1c  gcc/testsuite/g++.old-deja/g++.mike/p6927.C
! 08e47f12af30da07ae3d72b5a3ea39f5  gcc/testsuite/g++.old-deja/g++.mike/p700.C
! a4534dc53667649d48b39e313ec9ca8c  gcc/testsuite/g++.old-deja/g++.mike/p701.C
  e7b146af94ac9a8c09caf0f119938b97  gcc/testsuite/g++.old-deja/g++.mike/p710.C
  4f1b7fceb4b2604eeaa908c9d14306de  gcc/testsuite/g++.old-deja/g++.mike/p7180.C
  568923051a6f75c6fddc0d7ab86212bd  gcc/testsuite/g++.old-deja/g++.mike/p7476.C
--- 11488,11495 ----
  cbfcdfb1f49d32d7e79c53a80b278c05  gcc/testsuite/g++.old-deja/g++.mike/p6746.C
  f2c302be5b4bfcfe6a838f96e32fd4d4  gcc/testsuite/g++.old-deja/g++.mike/p6901.C
  866dc96069d3e273437caf99e8bb5c1c  gcc/testsuite/g++.old-deja/g++.mike/p6927.C
! 17db1cdeceb86c38b3f5ef49c309ee36  gcc/testsuite/g++.old-deja/g++.mike/p700.C
! 2eda20e839700921a077fcd8add67f61  gcc/testsuite/g++.old-deja/g++.mike/p701.C
  e7b146af94ac9a8c09caf0f119938b97  gcc/testsuite/g++.old-deja/g++.mike/p710.C
  4f1b7fceb4b2604eeaa908c9d14306de  gcc/testsuite/g++.old-deja/g++.mike/p7180.C
  568923051a6f75c6fddc0d7ab86212bd  gcc/testsuite/g++.old-deja/g++.mike/p7476.C
*************** c72b8635bd4c8a699c1f38ebb8414856  gcc/te
*** 10758,10764 ****
  368c01f3f90fe646e405891838c2f2f1  gcc/testsuite/g++.old-deja/g++.mike/p783.C
  b1814dd4aff2ecf1ced5ab368a1cda10  gcc/testsuite/g++.old-deja/g++.mike/p783a.C
  57d4e40988ddb63958724eff83209409  gcc/testsuite/g++.old-deja/g++.mike/p783b.C
! 0cbcb89d852c23c69ddab6a3e2068215  gcc/testsuite/g++.old-deja/g++.mike/p784.C
  21e877c6176145bd8bd48cbf0a107c6f  gcc/testsuite/g++.old-deja/g++.mike/p786.C
  480520bf49d17525acbe91efff31b383  gcc/testsuite/g++.old-deja/g++.mike/p7865.C
  10fbf12cb75d8a0bfcc4c2149def524d  gcc/testsuite/g++.old-deja/g++.mike/p7868.C
--- 11501,11507 ----
  368c01f3f90fe646e405891838c2f2f1  gcc/testsuite/g++.old-deja/g++.mike/p783.C
  b1814dd4aff2ecf1ced5ab368a1cda10  gcc/testsuite/g++.old-deja/g++.mike/p783a.C
  57d4e40988ddb63958724eff83209409  gcc/testsuite/g++.old-deja/g++.mike/p783b.C
! 0a48c70f4318ac70c60cc4514b37abff  gcc/testsuite/g++.old-deja/g++.mike/p784.C
  21e877c6176145bd8bd48cbf0a107c6f  gcc/testsuite/g++.old-deja/g++.mike/p786.C
  480520bf49d17525acbe91efff31b383  gcc/testsuite/g++.old-deja/g++.mike/p7865.C
  10fbf12cb75d8a0bfcc4c2149def524d  gcc/testsuite/g++.old-deja/g++.mike/p7868.C
*************** ea6f77e23475c14b010ae9424b10cf2c  gcc/te
*** 10770,10776 ****
  8472419124354902b61c57d6a82f2ee7  gcc/testsuite/g++.old-deja/g++.mike/p8039.C
  105eccba27c095e0f58ba5e1b288de63  gcc/testsuite/g++.old-deja/g++.mike/p807.C
  87475d2a67770f1c97e9126a1d13d8d7  gcc/testsuite/g++.old-deja/g++.mike/p807a.C
! 19552222c15343df84af26f8eddc6aea  gcc/testsuite/g++.old-deja/g++.mike/p811.C
  12f4c774ca8e5c065b8cc7fa2c31ea0e  gcc/testsuite/g++.old-deja/g++.mike/p8154.C
  cbdb4e245f3353232e9b4d18983cdeea  gcc/testsuite/g++.old-deja/g++.mike/p8155.C
  96f6e9e43b5a2118bfbd47489b1c0a5b  gcc/testsuite/g++.old-deja/g++.mike/p8175.C
--- 11513,11519 ----
  8472419124354902b61c57d6a82f2ee7  gcc/testsuite/g++.old-deja/g++.mike/p8039.C
  105eccba27c095e0f58ba5e1b288de63  gcc/testsuite/g++.old-deja/g++.mike/p807.C
  87475d2a67770f1c97e9126a1d13d8d7  gcc/testsuite/g++.old-deja/g++.mike/p807a.C
! 719feecb4b15a1fe26ce57186c64eb7d  gcc/testsuite/g++.old-deja/g++.mike/p811.C
  12f4c774ca8e5c065b8cc7fa2c31ea0e  gcc/testsuite/g++.old-deja/g++.mike/p8154.C
  cbdb4e245f3353232e9b4d18983cdeea  gcc/testsuite/g++.old-deja/g++.mike/p8155.C
  96f6e9e43b5a2118bfbd47489b1c0a5b  gcc/testsuite/g++.old-deja/g++.mike/p8175.C
*************** d98aace07ae1f94f01edf1afec351d59  gcc/te
*** 10812,10817 ****
--- 11555,11561 ----
  0ab0374962964cf99132d3da38867803  gcc/testsuite/g++.old-deja/g++.mike/s35520.C
  f9336f9cb5c37a66aec107290827a164  gcc/testsuite/g++.old-deja/g++.mike/s9959.C
  3adc1175a5b32a0ce0ca08c6f7bd6dc2  gcc/testsuite/g++.old-deja/g++.mike/scast1.C
+ d0afc2a3ff6b8a542115e2222fe77431  gcc/testsuite/g++.old-deja/g++.mike/sizeof.C
  cd57679bb2e5eddfd83825e786778b6d  gcc/testsuite/g++.old-deja/g++.mike/temp.C
  9e0cfc35c0d2295b4355e5a7b092450b  gcc/testsuite/g++.old-deja/g++.mike/thunk1.C
  136b4927aff7a9815802dcaef30303c3  gcc/testsuite/g++.old-deja/g++.mike/thunk2.C
*************** dd564b31d57cb02e5d6c101dbdedb0ea  gcc/te
*** 10864,10870 ****
  4b39531ed9b75627ccd39bd45bcce308  gcc/testsuite/g++.old-deja/g++.ns/alias2.C
  ff668e97c862ec9d9872e11a1ca7e91f  gcc/testsuite/g++.old-deja/g++.ns/alias3.C
  f251f052e0ffb2f3365f84e0177f0cee  gcc/testsuite/g++.old-deja/g++.ns/alias4.C
- 64c5d1a3167a533ce9cc98bfefdd1ebd  gcc/testsuite/g++.old-deja/g++.ns/alias5.C
  5a4c153472b2c8c1983aed495db2717b  gcc/testsuite/g++.old-deja/g++.ns/alias6.C
  5fe86212645da2b58490150f55889487  gcc/testsuite/g++.old-deja/g++.ns/alias7.C
  3f29778f04a48040d4674da3cb03f761  gcc/testsuite/g++.old-deja/g++.ns/anon1.C
--- 11608,11613 ----
*************** e93b5e47138610cc96cd1e47e5a6d555  gcc/te
*** 10892,10898 ****
  42d07132c8589b594e5fe06abcf87a15  gcc/testsuite/g++.old-deja/g++.ns/lookup4.C
  93d3fd278332d098b26a321966343d42  gcc/testsuite/g++.old-deja/g++.ns/lookup5.C
  9b951c773784c7c3cc13ada78ad54dc6  gcc/testsuite/g++.old-deja/g++.ns/main1.C
- 5480169eab50a7188b657178d80faf46  gcc/testsuite/g++.old-deja/g++.ns/new1.C
  12c3557fbe98239f95e9be8ad07692de  gcc/testsuite/g++.old-deja/g++.ns/ns1.C
  fc6a7e08ed0cee9d6e593a2555659ac0  gcc/testsuite/g++.old-deja/g++.ns/ns10.C
  ccd42fdc2dc6a2b87fb540bd4247eccf  gcc/testsuite/g++.old-deja/g++.ns/ns11.C
--- 11635,11640 ----
*************** f96f046ae42a16ff9abb1cb64171b3ce  gcc/te
*** 10922,10928 ****
  f15dc5f7af9a94c864dcd08798fbfe61  gcc/testsuite/g++.old-deja/g++.ns/template10.C
  6cb7cc1d655ff7d02bf6b115d27c2f20  gcc/testsuite/g++.old-deja/g++.ns/template11.C
  09d89e1d6a0ce7924dfddbbec1198053  gcc/testsuite/g++.old-deja/g++.ns/template12.C
! 2c32bddaa84fcd88d7d1494b5bd9707e  gcc/testsuite/g++.old-deja/g++.ns/template13.C
  afc2243e3e99fc8452d9346da94c86bd  gcc/testsuite/g++.old-deja/g++.ns/template14.C
  fb7efad85b5d9c15dafe0c0fe014f92e  gcc/testsuite/g++.old-deja/g++.ns/template15.C
  246a7c995987f869d396fc8ce59f41d6  gcc/testsuite/g++.old-deja/g++.ns/template16.C
--- 11664,11670 ----
  f15dc5f7af9a94c864dcd08798fbfe61  gcc/testsuite/g++.old-deja/g++.ns/template10.C
  6cb7cc1d655ff7d02bf6b115d27c2f20  gcc/testsuite/g++.old-deja/g++.ns/template11.C
  09d89e1d6a0ce7924dfddbbec1198053  gcc/testsuite/g++.old-deja/g++.ns/template12.C
! 254ee04717ff8c97d6d8d9f8f08ed6b9  gcc/testsuite/g++.old-deja/g++.ns/template13.C
  afc2243e3e99fc8452d9346da94c86bd  gcc/testsuite/g++.old-deja/g++.ns/template14.C
  fb7efad85b5d9c15dafe0c0fe014f92e  gcc/testsuite/g++.old-deja/g++.ns/template15.C
  246a7c995987f869d396fc8ce59f41d6  gcc/testsuite/g++.old-deja/g++.ns/template16.C
*************** c0116d02edfe6d83a6e0319b7ae43310  gcc/te
*** 10953,10959 ****
  ea73badcef0f5166a559e07a0c263a92  gcc/testsuite/g++.old-deja/g++.ns/using7.C
  e592ac6b9789af1e806b4791c984da05  gcc/testsuite/g++.old-deja/g++.ns/using8.C
  10a3890377e72341f4119f4affe2c8cb  gcc/testsuite/g++.old-deja/g++.ns/using9.C
! 51f3939e282daedb662eb3d18f30424a  gcc/testsuite/g++.old-deja/g++.oliva/ChangeLog
  c17ab5a5d39a20786219d5cb72e8a956  gcc/testsuite/g++.old-deja/g++.oliva/ctor1.C
  2a6be2a8952603f1259d7023b81ce14b  gcc/testsuite/g++.old-deja/g++.oliva/delete1.C
  8c0b3f49c2e5d5c224c1e0aae235e1d8  gcc/testsuite/g++.old-deja/g++.oliva/delete2.C
--- 11695,11701 ----
  ea73badcef0f5166a559e07a0c263a92  gcc/testsuite/g++.old-deja/g++.ns/using7.C
  e592ac6b9789af1e806b4791c984da05  gcc/testsuite/g++.old-deja/g++.ns/using8.C
  10a3890377e72341f4119f4affe2c8cb  gcc/testsuite/g++.old-deja/g++.ns/using9.C
! b628e9bee0a7091afb490a7bada125df  gcc/testsuite/g++.old-deja/g++.oliva/ChangeLog
  c17ab5a5d39a20786219d5cb72e8a956  gcc/testsuite/g++.old-deja/g++.oliva/ctor1.C
  2a6be2a8952603f1259d7023b81ce14b  gcc/testsuite/g++.old-deja/g++.oliva/delete1.C
  8c0b3f49c2e5d5c224c1e0aae235e1d8  gcc/testsuite/g++.old-deja/g++.oliva/delete2.C
*************** e0d3e8aef40e06d214dac0b24734a598  gcc/te
*** 10964,10970 ****
  d5ff02b45e8c1faae9dcfb837696cce1  gcc/testsuite/g++.old-deja/g++.oliva/dwarf2.C
  739f2bb8d3718cf270870067fb11e67d  gcc/testsuite/g++.old-deja/g++.oliva/dwarf3.C
  f8dc1e3b047760a647ca3fc66b22ab14  gcc/testsuite/g++.old-deja/g++.oliva/expr1.C
! 8593f42561f4d1e3de254f0a29553c9e  gcc/testsuite/g++.old-deja/g++.oliva/expr2.C
  0207e523c92eab8efadd6a868b5b3fe1  gcc/testsuite/g++.old-deja/g++.oliva/ext1.C
  157f8168456e389ac4f34a5082e75a7c  gcc/testsuite/g++.old-deja/g++.oliva/friend1.C
  410d7d1fd1d6e3575100642f8c9a65e8  gcc/testsuite/g++.old-deja/g++.oliva/inline1.C
--- 11706,11712 ----
  d5ff02b45e8c1faae9dcfb837696cce1  gcc/testsuite/g++.old-deja/g++.oliva/dwarf2.C
  739f2bb8d3718cf270870067fb11e67d  gcc/testsuite/g++.old-deja/g++.oliva/dwarf3.C
  f8dc1e3b047760a647ca3fc66b22ab14  gcc/testsuite/g++.old-deja/g++.oliva/expr1.C
! c0514fbc4a06765f363ceaa37f304896  gcc/testsuite/g++.old-deja/g++.oliva/expr2.C
  0207e523c92eab8efadd6a868b5b3fe1  gcc/testsuite/g++.old-deja/g++.oliva/ext1.C
  157f8168456e389ac4f34a5082e75a7c  gcc/testsuite/g++.old-deja/g++.oliva/friend1.C
  410d7d1fd1d6e3575100642f8c9a65e8  gcc/testsuite/g++.old-deja/g++.oliva/inline1.C
*************** a8f0075556adc14556aa2135bcce0a5a  gcc/te
*** 10981,10992 ****
  a656b8b55218fcec4683461b96e1edf2  gcc/testsuite/g++.old-deja/g++.oliva/partspec1.C
  3045485ad85eb1c3888d9993fa683b8b  gcc/testsuite/g++.old-deja/g++.oliva/stkalign.C
  a8b8c54396ac1e6e04840dd1bdd28507  gcc/testsuite/g++.old-deja/g++.oliva/template1.C
! 33972f5216260ffa89c59c2a3171566c  gcc/testsuite/g++.old-deja/g++.oliva/template10.C
  44b10a016f12e19d08675ac7ff78ec8e  gcc/testsuite/g++.old-deja/g++.oliva/template2.C
  443bfe7e24350c24cc6466f4ec914d30  gcc/testsuite/g++.old-deja/g++.oliva/template3.C
  4bf2b2de8531cb926b80c542226b064c  gcc/testsuite/g++.old-deja/g++.oliva/template4.C
  ca9037b495f56944f828e7c59cd45614  gcc/testsuite/g++.old-deja/g++.oliva/template5.C
! ef628eedc7e4d780491b996dcf821b32  gcc/testsuite/g++.old-deja/g++.oliva/template6.C
  653ffd8fb42a52f23da2a7d4afdb6109  gcc/testsuite/g++.old-deja/g++.oliva/template7.C
  27a944f8490905502531cd05059b838f  gcc/testsuite/g++.old-deja/g++.oliva/template8.C
  93d635e2216d2eb214eebfecea45eb1d  gcc/testsuite/g++.old-deja/g++.oliva/template9.C
--- 11723,11734 ----
  a656b8b55218fcec4683461b96e1edf2  gcc/testsuite/g++.old-deja/g++.oliva/partspec1.C
  3045485ad85eb1c3888d9993fa683b8b  gcc/testsuite/g++.old-deja/g++.oliva/stkalign.C
  a8b8c54396ac1e6e04840dd1bdd28507  gcc/testsuite/g++.old-deja/g++.oliva/template1.C
! 13f959e91589085e8519a7ce7cb5d4bc  gcc/testsuite/g++.old-deja/g++.oliva/template10.C
  44b10a016f12e19d08675ac7ff78ec8e  gcc/testsuite/g++.old-deja/g++.oliva/template2.C
  443bfe7e24350c24cc6466f4ec914d30  gcc/testsuite/g++.old-deja/g++.oliva/template3.C
  4bf2b2de8531cb926b80c542226b064c  gcc/testsuite/g++.old-deja/g++.oliva/template4.C
  ca9037b495f56944f828e7c59cd45614  gcc/testsuite/g++.old-deja/g++.oliva/template5.C
! 5a12a509e3ad4f540060b19515931b54  gcc/testsuite/g++.old-deja/g++.oliva/template6.C
  653ffd8fb42a52f23da2a7d4afdb6109  gcc/testsuite/g++.old-deja/g++.oliva/template7.C
  27a944f8490905502531cd05059b838f  gcc/testsuite/g++.old-deja/g++.oliva/template8.C
  93d635e2216d2eb214eebfecea45eb1d  gcc/testsuite/g++.old-deja/g++.oliva/template9.C
*************** aad0443f7c41b4a122886b6f70c3ee81  gcc/te
*** 11023,11029 ****
  4203b8d1bec88b84e8402433b5f6c3ed  gcc/testsuite/g++.old-deja/g++.other/anon9.C
  07f623c46574840e62286a03c4348b85  gcc/testsuite/g++.old-deja/g++.other/array1.C
  9065ffc68314b4aef3626b81b5f5328e  gcc/testsuite/g++.old-deja/g++.other/array2.C
! 24b518379682e1ab5470a379f1ebbca9  gcc/testsuite/g++.old-deja/g++.other/array3.C
  95a3df89db79879be49e39caf37b733d  gcc/testsuite/g++.old-deja/g++.other/array4.C
  ad371cb0e0e5569f8e4f12bdaefa7c0d  gcc/testsuite/g++.old-deja/g++.other/array5.C
  e3d968a14c4d5d023f855b46af29bb70  gcc/testsuite/g++.old-deja/g++.other/array6.C
--- 11765,11771 ----
  4203b8d1bec88b84e8402433b5f6c3ed  gcc/testsuite/g++.old-deja/g++.other/anon9.C
  07f623c46574840e62286a03c4348b85  gcc/testsuite/g++.old-deja/g++.other/array1.C
  9065ffc68314b4aef3626b81b5f5328e  gcc/testsuite/g++.old-deja/g++.other/array2.C
! 3bec1e5398fe3d1e7e5d9487c5d0e37a  gcc/testsuite/g++.old-deja/g++.other/array3.C
  95a3df89db79879be49e39caf37b733d  gcc/testsuite/g++.old-deja/g++.other/array4.C
  ad371cb0e0e5569f8e4f12bdaefa7c0d  gcc/testsuite/g++.old-deja/g++.other/array5.C
  e3d968a14c4d5d023f855b46af29bb70  gcc/testsuite/g++.old-deja/g++.other/array6.C
*************** e421748ca6191ef379db9252886457f1  gcc/te
*** 11067,11072 ****
--- 11809,11816 ----
  7a8997d0aa979264eb4d89a9620dac97  gcc/testsuite/g++.old-deja/g++.other/comdat3-aux.cc
  3cb11229a87ec97d36dc77b6c3b38fd3  gcc/testsuite/g++.old-deja/g++.other/comdat3.C
  7756a61db1fc4d85d7b1167d06769223  gcc/testsuite/g++.old-deja/g++.other/comdat3.h
+ d9b19cd1292a38bce623a404c5c14601  gcc/testsuite/g++.old-deja/g++.other/comdat4-aux.cc
+ f3481f025b2bc515a0e79ac333c18c02  gcc/testsuite/g++.old-deja/g++.other/comdat4.C
  7ce8357f84bf1c23ea2ef3e1897f0788  gcc/testsuite/g++.old-deja/g++.other/cond1.C
  adc0a6dcb5fd4ac47a11b684146ac09c  gcc/testsuite/g++.old-deja/g++.other/cond2.C
  a1c2753cfb142a358f8ffc3053ae4a4f  gcc/testsuite/g++.old-deja/g++.other/cond3.C
*************** ac66e95a7eb0f724b07b49df214cb0be  gcc/te
*** 11105,11111 ****
  4d21fb21f1a5c07669bf5bcc4701f5d6  gcc/testsuite/g++.old-deja/g++.other/crash22.C
  af65e288be12d726dd36d9f12b4a6332  gcc/testsuite/g++.old-deja/g++.other/crash23.C
  fe5be7534a0122ddef559d72c8fc4fc5  gcc/testsuite/g++.old-deja/g++.other/crash24.C
! fb0ccefe8d0489be68835d48fe82f6e5  gcc/testsuite/g++.old-deja/g++.other/crash25.C
  a9f67dc3be68b25679c337cb411fbadb  gcc/testsuite/g++.old-deja/g++.other/crash26.C
  ca920fbfee24aea8dd36d80beb365d07  gcc/testsuite/g++.old-deja/g++.other/crash27.C
  eb5fc8d3914bbcff1e195a301b96c52e  gcc/testsuite/g++.old-deja/g++.other/crash28.C
--- 11849,11855 ----
  4d21fb21f1a5c07669bf5bcc4701f5d6  gcc/testsuite/g++.old-deja/g++.other/crash22.C
  af65e288be12d726dd36d9f12b4a6332  gcc/testsuite/g++.old-deja/g++.other/crash23.C
  fe5be7534a0122ddef559d72c8fc4fc5  gcc/testsuite/g++.old-deja/g++.other/crash24.C
! c9e3fe2b8304a0a8f5d6a337d940cd4e  gcc/testsuite/g++.old-deja/g++.other/crash25.C
  a9f67dc3be68b25679c337cb411fbadb  gcc/testsuite/g++.old-deja/g++.other/crash26.C
  ca920fbfee24aea8dd36d80beb365d07  gcc/testsuite/g++.old-deja/g++.other/crash27.C
  eb5fc8d3914bbcff1e195a301b96c52e  gcc/testsuite/g++.old-deja/g++.other/crash28.C
*************** b23319808394ce6738b1508b7f4ec38d  gcc/te
*** 11148,11156 ****
  b82c1ff0b46d37526b002e9eadb7b5a2  gcc/testsuite/g++.old-deja/g++.other/debug9.C
  5676a661a2b6a27ccd1e71dbf5846d8d  gcc/testsuite/g++.old-deja/g++.other/decl1.C
  589daf00ab11a288c7fe3c5d5b24404c  gcc/testsuite/g++.old-deja/g++.other/decl2.C
! 398206ea98ccd090d01a4894dcb0cdcb  gcc/testsuite/g++.old-deja/g++.other/decl3.C
  87f1ee2bbfeb5481b12d8c5030343b02  gcc/testsuite/g++.old-deja/g++.other/decl4.C
! e0af1329140f62c2d975222da1f40533  gcc/testsuite/g++.old-deja/g++.other/decl5.C
  f1bafdb743032a2162ea7c270025c1dd  gcc/testsuite/g++.old-deja/g++.other/decl6.C
  b7922b62c66771d84dbb60a4b1b4545c  gcc/testsuite/g++.old-deja/g++.other/decl7.C
  70374012e8e3dd49e53dfd2d182ad64d  gcc/testsuite/g++.old-deja/g++.other/decl8.C
--- 11892,11900 ----
  b82c1ff0b46d37526b002e9eadb7b5a2  gcc/testsuite/g++.old-deja/g++.other/debug9.C
  5676a661a2b6a27ccd1e71dbf5846d8d  gcc/testsuite/g++.old-deja/g++.other/decl1.C
  589daf00ab11a288c7fe3c5d5b24404c  gcc/testsuite/g++.old-deja/g++.other/decl2.C
! fc8886f5e357bcd9cb0a93ffa6595a2c  gcc/testsuite/g++.old-deja/g++.other/decl3.C
  87f1ee2bbfeb5481b12d8c5030343b02  gcc/testsuite/g++.old-deja/g++.other/decl4.C
! dee61f6d0ffeea7df22a8d9aa000680e  gcc/testsuite/g++.old-deja/g++.other/decl5.C
  f1bafdb743032a2162ea7c270025c1dd  gcc/testsuite/g++.old-deja/g++.other/decl6.C
  b7922b62c66771d84dbb60a4b1b4545c  gcc/testsuite/g++.old-deja/g++.other/decl7.C
  70374012e8e3dd49e53dfd2d182ad64d  gcc/testsuite/g++.old-deja/g++.other/decl8.C
*************** d967c7f394d25e627016c2e15ede2890  gcc/te
*** 11185,11192 ****
  49cceaef10e394102fa51c269f289f67  gcc/testsuite/g++.old-deja/g++.other/dtor12.C
  a38327344ea63a8b5d5757b2bd02efc1  gcc/testsuite/g++.old-deja/g++.other/dtor13.C
  573c74f438072a08f4c7e076c4fde80a  gcc/testsuite/g++.old-deja/g++.other/dtor2.C
! f2d6bb820506b0d7d5b3ed36c4b0b1dd  gcc/testsuite/g++.old-deja/g++.other/dtor3.C
! ab910330c566a21ecfbc27ab4c0be6df  gcc/testsuite/g++.old-deja/g++.other/dtor4.C
  95142dab2cdf06c9a812ece53a941442  gcc/testsuite/g++.old-deja/g++.other/dtor5.C
  bec7fc1b3e53b667bbfb02f3caa7a751  gcc/testsuite/g++.old-deja/g++.other/dtor6.C
  8706c67091af1a99f99c926204a00007  gcc/testsuite/g++.old-deja/g++.other/dtor7.C
--- 11929,11936 ----
  49cceaef10e394102fa51c269f289f67  gcc/testsuite/g++.old-deja/g++.other/dtor12.C
  a38327344ea63a8b5d5757b2bd02efc1  gcc/testsuite/g++.old-deja/g++.other/dtor13.C
  573c74f438072a08f4c7e076c4fde80a  gcc/testsuite/g++.old-deja/g++.other/dtor2.C
! 8f3f1d766e7a640091d25ad94a1ffdb5  gcc/testsuite/g++.old-deja/g++.other/dtor3.C
! beaa62d9f1bf0ffca6cd65768337e910  gcc/testsuite/g++.old-deja/g++.other/dtor4.C
  95142dab2cdf06c9a812ece53a941442  gcc/testsuite/g++.old-deja/g++.other/dtor5.C
  bec7fc1b3e53b667bbfb02f3caa7a751  gcc/testsuite/g++.old-deja/g++.other/dtor6.C
  8706c67091af1a99f99c926204a00007  gcc/testsuite/g++.old-deja/g++.other/dtor7.C
*************** fff040d0461db3bb906852d2efd56a9d  gcc/te
*** 11204,11217 ****
  260c328a7fb09ba03925bbff7306c211  gcc/testsuite/g++.old-deja/g++.other/eh3.C
  6a8cb61c7e2c6936f70f770cc36db9e2  gcc/testsuite/g++.old-deja/g++.other/eh4.C
  50ccfaa907c448bee3f02ccdb3da5d91  gcc/testsuite/g++.old-deja/g++.other/eh5.C
! 39e01e52d5fb0f8171af00c2c5ca99d0  gcc/testsuite/g++.old-deja/g++.other/elab1.C
  ee6c301abacfe5428f15dcdccc0731da  gcc/testsuite/g++.old-deja/g++.other/empty1.C
  e0228ca9cb60d1437fd658fe2d597301  gcc/testsuite/g++.old-deja/g++.other/empty2.C
  5b6d9e3f0f202ed5f985699483d694c3  gcc/testsuite/g++.old-deja/g++.other/enum1.C
! 510356441b1fb7c789dd33c978b26beb  gcc/testsuite/g++.old-deja/g++.other/enum2.C
  703ef9888858691fda401137ea6e0340  gcc/testsuite/g++.old-deja/g++.other/enum3.C
  6fccda2d509c4bd94d69e288d4349789  gcc/testsuite/g++.old-deja/g++.other/enum4.C
! e528b2e44c3feaabe8bfd823e70978ef  gcc/testsuite/g++.old-deja/g++.other/enum5.C
  a062e6feea05b79de6f4a91e26e7acb3  gcc/testsuite/g++.old-deja/g++.other/explicit1.C
  d76dde025ff80c49abb21b777371b8ac  gcc/testsuite/g++.old-deja/g++.other/expr1.C
  cb97f0a4d350c5545ed921b0c95d1800  gcc/testsuite/g++.old-deja/g++.other/exprstmt1.C
--- 11948,11961 ----
  260c328a7fb09ba03925bbff7306c211  gcc/testsuite/g++.old-deja/g++.other/eh3.C
  6a8cb61c7e2c6936f70f770cc36db9e2  gcc/testsuite/g++.old-deja/g++.other/eh4.C
  50ccfaa907c448bee3f02ccdb3da5d91  gcc/testsuite/g++.old-deja/g++.other/eh5.C
! 5d7f93c2ec3abd2ea79f1736d302ce96  gcc/testsuite/g++.old-deja/g++.other/elab1.C
  ee6c301abacfe5428f15dcdccc0731da  gcc/testsuite/g++.old-deja/g++.other/empty1.C
  e0228ca9cb60d1437fd658fe2d597301  gcc/testsuite/g++.old-deja/g++.other/empty2.C
  5b6d9e3f0f202ed5f985699483d694c3  gcc/testsuite/g++.old-deja/g++.other/enum1.C
! feb92c7dc6c4aa9d4c55f0948efbc038  gcc/testsuite/g++.old-deja/g++.other/enum2.C
  703ef9888858691fda401137ea6e0340  gcc/testsuite/g++.old-deja/g++.other/enum3.C
  6fccda2d509c4bd94d69e288d4349789  gcc/testsuite/g++.old-deja/g++.other/enum4.C
! 989a20c8af821e747e17e6f4d9323de7  gcc/testsuite/g++.old-deja/g++.other/enum5.C
  a062e6feea05b79de6f4a91e26e7acb3  gcc/testsuite/g++.old-deja/g++.other/explicit1.C
  d76dde025ff80c49abb21b777371b8ac  gcc/testsuite/g++.old-deja/g++.other/expr1.C
  cb97f0a4d350c5545ed921b0c95d1800  gcc/testsuite/g++.old-deja/g++.other/exprstmt1.C
*************** dba3090eb844e8c6c1d4e88f5f742e83  gcc/te
*** 11233,11239 ****
  a81525f7456919fc54f1c69499313ca6  gcc/testsuite/g++.old-deja/g++.other/friend4.C
  0161e6b486d3b3dee4f0cf2bc41f3cd9  gcc/testsuite/g++.old-deja/g++.other/friend5.C
  e26bb2d530647d0754ac8e384371995b  gcc/testsuite/g++.old-deja/g++.other/friend6.C
! 3834bb8d1c495caa10e4132f9b55e5ed  gcc/testsuite/g++.old-deja/g++.other/friend7.C
  300e9a1ebba6e1b59b9aade1f7c72f54  gcc/testsuite/g++.old-deja/g++.other/friend8.C
  5eea2191994afdf9e4907504265a6124  gcc/testsuite/g++.old-deja/g++.other/friend9.C
  f7be1197051cef5c4a84228232f830bc  gcc/testsuite/g++.old-deja/g++.other/goto1.C
--- 11977,11983 ----
  a81525f7456919fc54f1c69499313ca6  gcc/testsuite/g++.old-deja/g++.other/friend4.C
  0161e6b486d3b3dee4f0cf2bc41f3cd9  gcc/testsuite/g++.old-deja/g++.other/friend5.C
  e26bb2d530647d0754ac8e384371995b  gcc/testsuite/g++.old-deja/g++.other/friend6.C
! a64b18f5e241c9cd94e6366c4fa85f1c  gcc/testsuite/g++.old-deja/g++.other/friend7.C
  300e9a1ebba6e1b59b9aade1f7c72f54  gcc/testsuite/g++.old-deja/g++.other/friend8.C
  5eea2191994afdf9e4907504265a6124  gcc/testsuite/g++.old-deja/g++.other/friend9.C
  f7be1197051cef5c4a84228232f830bc  gcc/testsuite/g++.old-deja/g++.other/goto1.C
*************** cc3c1af250386499471f365de78ad096  gcc/te
*** 11254,11260 ****
  09cdc6f15b9f59aca7cb90db7fa556d5  gcc/testsuite/g++.old-deja/g++.other/init2.C
  63abea026a929f3b0c80bcda371963b9  gcc/testsuite/g++.old-deja/g++.other/init3.C
  9586910c917e9757eb948e6ba2dc14d7  gcc/testsuite/g++.old-deja/g++.other/init4.C
! d5503b12041abd44bc5e96a8b3d92270  gcc/testsuite/g++.old-deja/g++.other/init5.C
  ef17244e8beb00b8e2b159085fa4524c  gcc/testsuite/g++.old-deja/g++.other/init6.C
  218366b1db7ad573de9089b8dc32b49f  gcc/testsuite/g++.old-deja/g++.other/init7.C
  8f1fad4a3628e33ecda8e9b1d591d956  gcc/testsuite/g++.old-deja/g++.other/init8.C
--- 11998,12004 ----
  09cdc6f15b9f59aca7cb90db7fa556d5  gcc/testsuite/g++.old-deja/g++.other/init2.C
  63abea026a929f3b0c80bcda371963b9  gcc/testsuite/g++.old-deja/g++.other/init3.C
  9586910c917e9757eb948e6ba2dc14d7  gcc/testsuite/g++.old-deja/g++.other/init4.C
! f117e5a3f3e741ccd01452cfb778e7b1  gcc/testsuite/g++.old-deja/g++.other/init5.C
  ef17244e8beb00b8e2b159085fa4524c  gcc/testsuite/g++.old-deja/g++.other/init6.C
  218366b1db7ad573de9089b8dc32b49f  gcc/testsuite/g++.old-deja/g++.other/init7.C
  8f1fad4a3628e33ecda8e9b1d591d956  gcc/testsuite/g++.old-deja/g++.other/init8.C
*************** ccfaa381b4b7ddc2ae21136f982f0584  gcc/te
*** 11289,11302 ****
  5e52821ca49563fbc530d8e6757296ea  gcc/testsuite/g++.old-deja/g++.other/lineno3.C
  259b00ebc759f1c2be8bf93afcc1c26c  gcc/testsuite/g++.old-deja/g++.other/lineno4.C
  e44ad22b26a06856bf4b7933f64ab19d  gcc/testsuite/g++.old-deja/g++.other/lineno5.C
! ae7da43512aae452545f4aedc5a4f6b9  gcc/testsuite/g++.old-deja/g++.other/linkage1.C
  7b3fb63fa48296d67b7bca86995e7e3c  gcc/testsuite/g++.old-deja/g++.other/linkage2.C
  42b8a76745e45d733d565ced3107d4fa  gcc/testsuite/g++.old-deja/g++.other/linkage3.C
  76738f98b7bbe8a3ed99abf08aec7f10  gcc/testsuite/g++.old-deja/g++.other/linkage4.C
  8f5f0bc1ea8aec63ad7e64ec0fb5a60d  gcc/testsuite/g++.old-deja/g++.other/linkage5.C
  031860326d5d4c1b03d2fa8b5333dc2b  gcc/testsuite/g++.old-deja/g++.other/linkage6.C
  9f0e982ef3a2802a121297c93371f22b  gcc/testsuite/g++.old-deja/g++.other/linkage7.C
! 3e3f3d6fc1fd722673bbb3019aaf81d1  gcc/testsuite/g++.old-deja/g++.other/local-alloc1.C
  f02d7bee1a6e33dff41829b90a2f55e5  gcc/testsuite/g++.old-deja/g++.other/local1.C
  b0c55f20739e7cf716fcd5af1b14be8b  gcc/testsuite/g++.old-deja/g++.other/local2.C
  d66fe3a8dd3fe648291bfe2f4d9cff5d  gcc/testsuite/g++.old-deja/g++.other/local3.C
--- 12033,12046 ----
  5e52821ca49563fbc530d8e6757296ea  gcc/testsuite/g++.old-deja/g++.other/lineno3.C
  259b00ebc759f1c2be8bf93afcc1c26c  gcc/testsuite/g++.old-deja/g++.other/lineno4.C
  e44ad22b26a06856bf4b7933f64ab19d  gcc/testsuite/g++.old-deja/g++.other/lineno5.C
! 9aafb5ae2a68d411c66cc1ee6ae4f61d  gcc/testsuite/g++.old-deja/g++.other/linkage1.C
  7b3fb63fa48296d67b7bca86995e7e3c  gcc/testsuite/g++.old-deja/g++.other/linkage2.C
  42b8a76745e45d733d565ced3107d4fa  gcc/testsuite/g++.old-deja/g++.other/linkage3.C
  76738f98b7bbe8a3ed99abf08aec7f10  gcc/testsuite/g++.old-deja/g++.other/linkage4.C
  8f5f0bc1ea8aec63ad7e64ec0fb5a60d  gcc/testsuite/g++.old-deja/g++.other/linkage5.C
  031860326d5d4c1b03d2fa8b5333dc2b  gcc/testsuite/g++.old-deja/g++.other/linkage6.C
  9f0e982ef3a2802a121297c93371f22b  gcc/testsuite/g++.old-deja/g++.other/linkage7.C
! b955eaddeae1b9576c7ee4f0048e0d24  gcc/testsuite/g++.old-deja/g++.other/local-alloc1.C
  f02d7bee1a6e33dff41829b90a2f55e5  gcc/testsuite/g++.old-deja/g++.other/local1.C
  b0c55f20739e7cf716fcd5af1b14be8b  gcc/testsuite/g++.old-deja/g++.other/local2.C
  d66fe3a8dd3fe648291bfe2f4d9cff5d  gcc/testsuite/g++.old-deja/g++.other/local3.C
*************** ebd8f7c10cb0f38aaab48d284f174530  gcc/te
*** 11326,11332 ****
  a9a74cf7de9ad7a2eaa872544ff3f96b  gcc/testsuite/g++.old-deja/g++.other/lookup9.C
  ff15837f3804b9245a281d67b6046de8  gcc/testsuite/g++.old-deja/g++.other/loop1.C
  d0ed38cceb3178f8c2ffeb15967bdd06  gcc/testsuite/g++.old-deja/g++.other/loop2.C
! 559daa65274ced0850727bee9b002879  gcc/testsuite/g++.old-deja/g++.other/main1.C
  3c711568f6920792b9d9ba90585265c2  gcc/testsuite/g++.old-deja/g++.other/main2.C
  cf3e71d84bec47a484318564617d434d  gcc/testsuite/g++.old-deja/g++.other/mangle10.C
  87f64d8c97e5d1f8d2473475b0171ff6  gcc/testsuite/g++.old-deja/g++.other/mangle2.C
--- 12070,12076 ----
  a9a74cf7de9ad7a2eaa872544ff3f96b  gcc/testsuite/g++.old-deja/g++.other/lookup9.C
  ff15837f3804b9245a281d67b6046de8  gcc/testsuite/g++.old-deja/g++.other/loop1.C
  d0ed38cceb3178f8c2ffeb15967bdd06  gcc/testsuite/g++.old-deja/g++.other/loop2.C
! cb44ff20f4d826e7c7f0fa3f72c74cc2  gcc/testsuite/g++.old-deja/g++.other/main1.C
  3c711568f6920792b9d9ba90585265c2  gcc/testsuite/g++.old-deja/g++.other/main2.C
  cf3e71d84bec47a484318564617d434d  gcc/testsuite/g++.old-deja/g++.other/mangle10.C
  87f64d8c97e5d1f8d2473475b0171ff6  gcc/testsuite/g++.old-deja/g++.other/mangle2.C
*************** a1138a47ec931001e0607755fd2357a9  gcc/te
*** 11342,11348 ****
  32154308cdeb3f9a775d1995218bf06b  gcc/testsuite/g++.old-deja/g++.other/new5.C
  c9d397e3e3767365ebc352a60e284d3f  gcc/testsuite/g++.old-deja/g++.other/new6.C
  183c9676ec93bdbec47a8769eab34fa8  gcc/testsuite/g++.old-deja/g++.other/new7.C
! 5815b4b6e53923113d12cc336d0ab6e7  gcc/testsuite/g++.old-deja/g++.other/null1.C
  3d711ec70ea8da8349b2ae221992e597  gcc/testsuite/g++.old-deja/g++.other/null2.C
  f8b25e8f3d0cef5866fb3d971ab4f1de  gcc/testsuite/g++.old-deja/g++.other/null3.C
  47d2d0b024512d64bb5cf3a664e78979  gcc/testsuite/g++.old-deja/g++.other/op1.C
--- 12086,12092 ----
  32154308cdeb3f9a775d1995218bf06b  gcc/testsuite/g++.old-deja/g++.other/new5.C
  c9d397e3e3767365ebc352a60e284d3f  gcc/testsuite/g++.old-deja/g++.other/new6.C
  183c9676ec93bdbec47a8769eab34fa8  gcc/testsuite/g++.old-deja/g++.other/new7.C
! 27b070799c2f790dcc4af0ad879ab17c  gcc/testsuite/g++.old-deja/g++.other/null1.C
  3d711ec70ea8da8349b2ae221992e597  gcc/testsuite/g++.old-deja/g++.other/null2.C
  f8b25e8f3d0cef5866fb3d971ab4f1de  gcc/testsuite/g++.old-deja/g++.other/null3.C
  47d2d0b024512d64bb5cf3a664e78979  gcc/testsuite/g++.old-deja/g++.other/op1.C
*************** d39d6de8da2a8229f976153f5c63cb57  gcc/te
*** 11392,11398 ****
  1d60521f061d28c897e281ab418cf2a2  gcc/testsuite/g++.old-deja/g++.other/ptrmem7.C
  2f3bfb2d0ddd03bacc4cdaf1b029aa77  gcc/testsuite/g++.old-deja/g++.other/ptrmem8.C
  11aead89d7c9ba7d1d714df900e9e821  gcc/testsuite/g++.old-deja/g++.other/ptrmem9.C
! afc0e6ebd18400ac34862bac15f2a4ba  gcc/testsuite/g++.old-deja/g++.other/qual1.C
  2f2163de7ae71b96b78dd69929d4f9eb  gcc/testsuite/g++.old-deja/g++.other/realloc.C
  550bbf8cfd71829a78758a156138e874  gcc/testsuite/g++.old-deja/g++.other/redecl1.C
  d72c157ac851acfe3ba94d9e3cfbc3d3  gcc/testsuite/g++.old-deja/g++.other/redecl2.C
--- 12136,12142 ----
  1d60521f061d28c897e281ab418cf2a2  gcc/testsuite/g++.old-deja/g++.other/ptrmem7.C
  2f3bfb2d0ddd03bacc4cdaf1b029aa77  gcc/testsuite/g++.old-deja/g++.other/ptrmem8.C
  11aead89d7c9ba7d1d714df900e9e821  gcc/testsuite/g++.old-deja/g++.other/ptrmem9.C
! 9a413d6cc2fc61c326d8be31a011267d  gcc/testsuite/g++.old-deja/g++.other/qual1.C
  2f2163de7ae71b96b78dd69929d4f9eb  gcc/testsuite/g++.old-deja/g++.other/realloc.C
  550bbf8cfd71829a78758a156138e874  gcc/testsuite/g++.old-deja/g++.other/redecl1.C
  d72c157ac851acfe3ba94d9e3cfbc3d3  gcc/testsuite/g++.old-deja/g++.other/redecl2.C
*************** a9cc0e1c16e568172282adb889a34614  gcc/te
*** 11424,11430 ****
  3b3f003bf4668f29ca853eeb7fb0819d  gcc/testsuite/g++.old-deja/g++.other/singleton.C
  a84ac2bbca6e4a347ff10c74435b64dc  gcc/testsuite/g++.old-deja/g++.other/sizeof1.C
  75d92301994fda91a18d2773a3cd71b0  gcc/testsuite/g++.old-deja/g++.other/sizeof2.C
! 5332ee13d16347985b2553e9c11c6fd7  gcc/testsuite/g++.old-deja/g++.other/sizeof3.C
  add3c3df9921a070d253f354f2ab7805  gcc/testsuite/g++.old-deja/g++.other/sizeof4.C
  4ca4b75456ba54e283ab183ea72ddd89  gcc/testsuite/g++.old-deja/g++.other/sizeof5.C
  94bc9e6417859abe314b0eb330f97196  gcc/testsuite/g++.old-deja/g++.other/static1.C
--- 12168,12174 ----
  3b3f003bf4668f29ca853eeb7fb0819d  gcc/testsuite/g++.old-deja/g++.other/singleton.C
  a84ac2bbca6e4a347ff10c74435b64dc  gcc/testsuite/g++.old-deja/g++.other/sizeof1.C
  75d92301994fda91a18d2773a3cd71b0  gcc/testsuite/g++.old-deja/g++.other/sizeof2.C
! 4fc019ae48048136a589dc3fc21ec8b9  gcc/testsuite/g++.old-deja/g++.other/sizeof3.C
  add3c3df9921a070d253f354f2ab7805  gcc/testsuite/g++.old-deja/g++.other/sizeof4.C
  4ca4b75456ba54e283ab183ea72ddd89  gcc/testsuite/g++.old-deja/g++.other/sizeof5.C
  94bc9e6417859abe314b0eb330f97196  gcc/testsuite/g++.old-deja/g++.other/static1.C
*************** b28df6285579d288eb89eb3ea95583cc  gcc/te
*** 11446,11460 ****
  23786dd5fb572a82513966937e1133a0  gcc/testsuite/g++.old-deja/g++.other/std1.C
  01e666c7606315a2bef1f5933007d6dc  gcc/testsuite/g++.old-deja/g++.other/stmtexpr1.C
  efe0ae4dc8f0b66c61c03ab2a35a0a2a  gcc/testsuite/g++.old-deja/g++.other/stmtexpr2.C
! 8dba2561a47431d87ea9817c10b67dc2  gcc/testsuite/g++.old-deja/g++.other/store-expr1.C
! c26d93ba5deb6e58426a977d55e8455d  gcc/testsuite/g++.old-deja/g++.other/store-expr2.C
  92b98ec5c36a99fa733a7b345e6d5d26  gcc/testsuite/g++.old-deja/g++.other/string1.C
  54063a09aa297bbbcf4708e110652da3  gcc/testsuite/g++.old-deja/g++.other/string2.C
! db0e502c9af9ba713004ea11c2db77a1  gcc/testsuite/g++.old-deja/g++.other/struct1.C
  ae4eba98ae301d865a86a5f999875b69  gcc/testsuite/g++.old-deja/g++.other/syntax1.C
  fef6c903a3c6e37acec0c8b57da07155  gcc/testsuite/g++.old-deja/g++.other/syntax2.C
  ea0aa7ca8d71e498d340c85c8bcc2ddf  gcc/testsuite/g++.old-deja/g++.other/syntax3.C
! d1ee0734e799fc9ea649be53208ff700  gcc/testsuite/g++.old-deja/g++.other/syntax4.C
  21e31c820eea768ab1908212d3565046  gcc/testsuite/g++.old-deja/g++.other/syshdr1.C
  5b478975b250ff7adfafa04082a3ca7b  gcc/testsuite/g++.old-deja/g++.other/temporary1.C
  4996212d38cb7834f6f2b4fecdb803ae  gcc/testsuite/g++.old-deja/g++.other/thunk1.C
--- 12190,12204 ----
  23786dd5fb572a82513966937e1133a0  gcc/testsuite/g++.old-deja/g++.other/std1.C
  01e666c7606315a2bef1f5933007d6dc  gcc/testsuite/g++.old-deja/g++.other/stmtexpr1.C
  efe0ae4dc8f0b66c61c03ab2a35a0a2a  gcc/testsuite/g++.old-deja/g++.other/stmtexpr2.C
! f7f8a22224e1f79a767b3cf011da64f5  gcc/testsuite/g++.old-deja/g++.other/store-expr1.C
! dd80ce3f43807388565a5bb67d791e72  gcc/testsuite/g++.old-deja/g++.other/store-expr2.C
  92b98ec5c36a99fa733a7b345e6d5d26  gcc/testsuite/g++.old-deja/g++.other/string1.C
  54063a09aa297bbbcf4708e110652da3  gcc/testsuite/g++.old-deja/g++.other/string2.C
! d0fef28f76677a1cd976d576a9a7fd19  gcc/testsuite/g++.old-deja/g++.other/struct1.C
  ae4eba98ae301d865a86a5f999875b69  gcc/testsuite/g++.old-deja/g++.other/syntax1.C
  fef6c903a3c6e37acec0c8b57da07155  gcc/testsuite/g++.old-deja/g++.other/syntax2.C
  ea0aa7ca8d71e498d340c85c8bcc2ddf  gcc/testsuite/g++.old-deja/g++.other/syntax3.C
! 312d7ad19f825aaab6319a917564cf29  gcc/testsuite/g++.old-deja/g++.other/syntax4.C
  21e31c820eea768ab1908212d3565046  gcc/testsuite/g++.old-deja/g++.other/syshdr1.C
  5b478975b250ff7adfafa04082a3ca7b  gcc/testsuite/g++.old-deja/g++.other/temporary1.C
  4996212d38cb7834f6f2b4fecdb803ae  gcc/testsuite/g++.old-deja/g++.other/thunk1.C
*************** d1ee0734e799fc9ea649be53208ff700  gcc/te
*** 11466,11472 ****
  2b0b70a2de4c754682872ec0b6788a74  gcc/testsuite/g++.old-deja/g++.other/typedef4.C
  f7a7e105c161d1bd575ee9abf15972ce  gcc/testsuite/g++.old-deja/g++.other/typedef5.C
  24954a094357425d2ce1a0a996eb4186  gcc/testsuite/g++.old-deja/g++.other/typedef6.C
! 736db2f20d29150f273db0f6b5701b2f  gcc/testsuite/g++.old-deja/g++.other/typedef7.C
  0651678ecc52b4445e30f811ecc33835  gcc/testsuite/g++.old-deja/g++.other/typedef8.C
  1d27cd1e6509508bee24a6470a13c2ee  gcc/testsuite/g++.old-deja/g++.other/typeid1.C
  b484a46bc776173d0149a8e516119f33  gcc/testsuite/g++.old-deja/g++.other/typeinfo1.C
--- 12210,12216 ----
  2b0b70a2de4c754682872ec0b6788a74  gcc/testsuite/g++.old-deja/g++.other/typedef4.C
  f7a7e105c161d1bd575ee9abf15972ce  gcc/testsuite/g++.old-deja/g++.other/typedef5.C
  24954a094357425d2ce1a0a996eb4186  gcc/testsuite/g++.old-deja/g++.other/typedef6.C
! 1f17b072c75d7737cd498c2318f8e0f4  gcc/testsuite/g++.old-deja/g++.other/typedef7.C
  0651678ecc52b4445e30f811ecc33835  gcc/testsuite/g++.old-deja/g++.other/typedef8.C
  1d27cd1e6509508bee24a6470a13c2ee  gcc/testsuite/g++.old-deja/g++.other/typeid1.C
  b484a46bc776173d0149a8e516119f33  gcc/testsuite/g++.old-deja/g++.other/typeinfo1.C
*************** c9308222bb88ae1582868992681d2514  gcc/te
*** 11495,11501 ****
  b40e169f8b79ca99a995c50951bcb176  gcc/testsuite/g++.old-deja/g++.other/vbase3.C
  69bf12b116250163342f3546f41dff4c  gcc/testsuite/g++.old-deja/g++.other/vbase4.C
  b15a88f072398bb5359ad5a15e6c576c  gcc/testsuite/g++.old-deja/g++.other/vbase5.C
- acec0a7fe32250197bfe1e5bef3eec9a  gcc/testsuite/g++.old-deja/g++.other/virtual1.C
  930c4b7b0bbff2696a8528cc462df701  gcc/testsuite/g++.old-deja/g++.other/virtual10.C
  c85db2d12c2f86f74278074a4ea6cbd7  gcc/testsuite/g++.old-deja/g++.other/virtual11.C
  facad90a3e09689495cfd0bb984b74ad  gcc/testsuite/g++.old-deja/g++.other/virtual2.C
--- 12239,12244 ----
*************** e0c5738b58b2d27b9f96b0529725fe5e  gcc/te
*** 11514,11520 ****
  06ca7f2bda2a3134a177b1c3ae16b9da  gcc/testsuite/g++.old-deja/g++.other/warn4.C
  fbe9ec3566cd58bff749af239478babb  gcc/testsuite/g++.old-deja/g++.other/warn5.C
  1590efed7b08e3e0a0e31739b2953e82  gcc/testsuite/g++.old-deja/g++.other/warn6.C
! 70f7f821521f55671d177940a32db098  gcc/testsuite/g++.old-deja/g++.other/warn7.C
  d83edbe52eb7bc716fbb4d703952fd5c  gcc/testsuite/g++.old-deja/g++.pt/alignof.C
  8f389b607e60e20702fac8c00986634f  gcc/testsuite/g++.old-deja/g++.pt/array1.C
  3b220deaab541cb68cedec5e541bfe9e  gcc/testsuite/g++.old-deja/g++.pt/array2.C
--- 12257,12263 ----
  06ca7f2bda2a3134a177b1c3ae16b9da  gcc/testsuite/g++.old-deja/g++.other/warn4.C
  fbe9ec3566cd58bff749af239478babb  gcc/testsuite/g++.old-deja/g++.other/warn5.C
  1590efed7b08e3e0a0e31739b2953e82  gcc/testsuite/g++.old-deja/g++.other/warn6.C
! c28a879506c3f174191552c356bfd7fe  gcc/testsuite/g++.old-deja/g++.other/warn7.C
  d83edbe52eb7bc716fbb4d703952fd5c  gcc/testsuite/g++.old-deja/g++.pt/alignof.C
  8f389b607e60e20702fac8c00986634f  gcc/testsuite/g++.old-deja/g++.pt/array1.C
  3b220deaab541cb68cedec5e541bfe9e  gcc/testsuite/g++.old-deja/g++.pt/array2.C
*************** d83edbe52eb7bc716fbb4d703952fd5c  gcc/te
*** 11523,11530 ****
  d54d7f76b19f79dd290e5553a5679f48  gcc/testsuite/g++.old-deja/g++.pt/array5.C
  9deafe0c23dcd9d4742de631c72fa4d3  gcc/testsuite/g++.old-deja/g++.pt/array6.C
  0bf7b9320971f79173514bee96bfc707  gcc/testsuite/g++.old-deja/g++.pt/array7.C
! a46b05130750303ae0038adb329200f2  gcc/testsuite/g++.old-deja/g++.pt/asm1.C
! 7688c85d854e679da371a2874a4fbfc2  gcc/testsuite/g++.old-deja/g++.pt/asm2.C
  f2dcc9a3c563edcf263bd13b5bfd990f  gcc/testsuite/g++.old-deja/g++.pt/assign1.C
  d4cf31c7ccc3352854005754527b4dab  gcc/testsuite/g++.old-deja/g++.pt/auto_ptr.C
  1adb535176b9d881aafd1bb9dc833b29  gcc/testsuite/g++.old-deja/g++.pt/bad-type.C
--- 12266,12273 ----
  d54d7f76b19f79dd290e5553a5679f48  gcc/testsuite/g++.old-deja/g++.pt/array5.C
  9deafe0c23dcd9d4742de631c72fa4d3  gcc/testsuite/g++.old-deja/g++.pt/array6.C
  0bf7b9320971f79173514bee96bfc707  gcc/testsuite/g++.old-deja/g++.pt/array7.C
! 39e58add05338af8d0985ac7132b1862  gcc/testsuite/g++.old-deja/g++.pt/asm1.C
! 6b8d98e605086ee36d9c37883403feae  gcc/testsuite/g++.old-deja/g++.pt/asm2.C
  f2dcc9a3c563edcf263bd13b5bfd990f  gcc/testsuite/g++.old-deja/g++.pt/assign1.C
  d4cf31c7ccc3352854005754527b4dab  gcc/testsuite/g++.old-deja/g++.pt/auto_ptr.C
  1adb535176b9d881aafd1bb9dc833b29  gcc/testsuite/g++.old-deja/g++.pt/bad-type.C
*************** c0f0a60cf74d252087303d25f5507357  gcc/te
*** 11544,11550 ****
  25d39394e96b80fde77f2b916b2c699b  gcc/testsuite/g++.old-deja/g++.pt/copy1.C
  dd98e99fef875456445a8b55b18ded46  gcc/testsuite/g++.old-deja/g++.pt/crash1.C
  193750e58e3f38e4488e13b04e298232  gcc/testsuite/g++.old-deja/g++.pt/crash10.C
! e350d95214f9be04729bf36709ecf777  gcc/testsuite/g++.old-deja/g++.pt/crash11.C
  3708c5f29bf66988accc70090bc416e5  gcc/testsuite/g++.old-deja/g++.pt/crash12.C
  fcadc5744a7361e664ae053c8da7d49f  gcc/testsuite/g++.old-deja/g++.pt/crash13.C
  8362f30058de81564a32b4120b51b1d4  gcc/testsuite/g++.old-deja/g++.pt/crash14.C
--- 12287,12293 ----
  25d39394e96b80fde77f2b916b2c699b  gcc/testsuite/g++.old-deja/g++.pt/copy1.C
  dd98e99fef875456445a8b55b18ded46  gcc/testsuite/g++.old-deja/g++.pt/crash1.C
  193750e58e3f38e4488e13b04e298232  gcc/testsuite/g++.old-deja/g++.pt/crash10.C
! 1d560401ba6ffe35e8585bd01c7043b0  gcc/testsuite/g++.old-deja/g++.pt/crash11.C
  3708c5f29bf66988accc70090bc416e5  gcc/testsuite/g++.old-deja/g++.pt/crash12.C
  fcadc5744a7361e664ae053c8da7d49f  gcc/testsuite/g++.old-deja/g++.pt/crash13.C
  8362f30058de81564a32b4120b51b1d4  gcc/testsuite/g++.old-deja/g++.pt/crash14.C
*************** d7866497f7e5839b6b2923ee09574812  gcc/te
*** 11571,11577 ****
  26b119db5e5fce06a8a493e4a51c0bcd  gcc/testsuite/g++.old-deja/g++.pt/crash33.C
  b8a43da58e14e7b6fd2c0512bd16c158  gcc/testsuite/g++.old-deja/g++.pt/crash34.C
  55b1abdb1a2e1df7825e673f1b1ac0d6  gcc/testsuite/g++.old-deja/g++.pt/crash35.C
! 6b6ab475f604dfdef6d0e85527a3a334  gcc/testsuite/g++.old-deja/g++.pt/crash36.C
  9d42fed92afdbda595ff8b94f6cbea98  gcc/testsuite/g++.old-deja/g++.pt/crash37.C
  d927b55815d9cbc44d1ce19f1d22e8a5  gcc/testsuite/g++.old-deja/g++.pt/crash38.C
  5aa83f41d9dd76aac5bd62155f035575  gcc/testsuite/g++.old-deja/g++.pt/crash39.C
--- 12314,12320 ----
  26b119db5e5fce06a8a493e4a51c0bcd  gcc/testsuite/g++.old-deja/g++.pt/crash33.C
  b8a43da58e14e7b6fd2c0512bd16c158  gcc/testsuite/g++.old-deja/g++.pt/crash34.C
  55b1abdb1a2e1df7825e673f1b1ac0d6  gcc/testsuite/g++.old-deja/g++.pt/crash35.C
! 222dbafd1435c0c04afdf9382b38c41a  gcc/testsuite/g++.old-deja/g++.pt/crash36.C
  9d42fed92afdbda595ff8b94f6cbea98  gcc/testsuite/g++.old-deja/g++.pt/crash37.C
  d927b55815d9cbc44d1ce19f1d22e8a5  gcc/testsuite/g++.old-deja/g++.pt/crash38.C
  5aa83f41d9dd76aac5bd62155f035575  gcc/testsuite/g++.old-deja/g++.pt/crash39.C
*************** f22cf44c7dbbb47eb64c9173b3afe6c9  gcc/te
*** 11611,11617 ****
  57c5d3a84b07c37790b3197eb54fd5f4  gcc/testsuite/g++.old-deja/g++.pt/crash8.C
  b6c28f8d9c60b1c777cf66332b3e36a9  gcc/testsuite/g++.old-deja/g++.pt/crash9.C
  175bbaa432316cf80ec13fb36b444aff  gcc/testsuite/g++.old-deja/g++.pt/ctor1.C
! 3848c0d0874d0c30f06c9f44d2b3be33  gcc/testsuite/g++.old-deja/g++.pt/ctor2.C
  ad2cc6cd72ed2f9aa4e2d8675680e0f2  gcc/testsuite/g++.old-deja/g++.pt/debug1.C
  7ff13cbadc027cf3969e195ccccf78aa  gcc/testsuite/g++.old-deja/g++.pt/decl1.C
  7842985d032379adae96073498651be5  gcc/testsuite/g++.old-deja/g++.pt/decl2.C
--- 12354,12360 ----
  57c5d3a84b07c37790b3197eb54fd5f4  gcc/testsuite/g++.old-deja/g++.pt/crash8.C
  b6c28f8d9c60b1c777cf66332b3e36a9  gcc/testsuite/g++.old-deja/g++.pt/crash9.C
  175bbaa432316cf80ec13fb36b444aff  gcc/testsuite/g++.old-deja/g++.pt/ctor1.C
! d6dc74584a2ef3f12aaa3209271d7ae1  gcc/testsuite/g++.old-deja/g++.pt/ctor2.C
  ad2cc6cd72ed2f9aa4e2d8675680e0f2  gcc/testsuite/g++.old-deja/g++.pt/debug1.C
  7ff13cbadc027cf3969e195ccccf78aa  gcc/testsuite/g++.old-deja/g++.pt/decl1.C
  7842985d032379adae96073498651be5  gcc/testsuite/g++.old-deja/g++.pt/decl2.C
*************** ee05018b3a3474e051d3aefc4620a8a4  gcc/te
*** 11655,11661 ****
  c1dd17dce0fa19e95a8a2c79c6a1d90b  gcc/testsuite/g++.old-deja/g++.pt/enum2.C
  d813a116a12ca2b98a36e5ef02510f85  gcc/testsuite/g++.old-deja/g++.pt/enum3.C
  5b19e434a6998b0c505946afafea7527  gcc/testsuite/g++.old-deja/g++.pt/enum4.C
! 47c5d6ee862751ca0f2e8f1aa3656027  gcc/testsuite/g++.old-deja/g++.pt/enum5.C
  ad32608eef1269ad91ecb9482b11691c  gcc/testsuite/g++.old-deja/g++.pt/enum6.C
  ce9d6550a9f34d8358557849e76b1559  gcc/testsuite/g++.old-deja/g++.pt/enum7.C
  f810b331320bcf7c26d40f2971ba5545  gcc/testsuite/g++.old-deja/g++.pt/enum8.C
--- 12398,12404 ----
  c1dd17dce0fa19e95a8a2c79c6a1d90b  gcc/testsuite/g++.old-deja/g++.pt/enum2.C
  d813a116a12ca2b98a36e5ef02510f85  gcc/testsuite/g++.old-deja/g++.pt/enum3.C
  5b19e434a6998b0c505946afafea7527  gcc/testsuite/g++.old-deja/g++.pt/enum4.C
! a8bc5961a15b11a7127925e409439cdd  gcc/testsuite/g++.old-deja/g++.pt/enum5.C
  ad32608eef1269ad91ecb9482b11691c  gcc/testsuite/g++.old-deja/g++.pt/enum6.C
  ce9d6550a9f34d8358557849e76b1559  gcc/testsuite/g++.old-deja/g++.pt/enum7.C
  f810b331320bcf7c26d40f2971ba5545  gcc/testsuite/g++.old-deja/g++.pt/enum8.C
*************** bd62ddf844767510d988a91418f1c5cb  gcc/te
*** 11785,11791 ****
  31398208b74ece771fe1f2f73fcba014  gcc/testsuite/g++.old-deja/g++.pt/friend41.C
  540fd956d325d0aa4769600acae7c0c2  gcc/testsuite/g++.old-deja/g++.pt/friend42.C
  301f35594b1f8e003468b70f0975722e  gcc/testsuite/g++.old-deja/g++.pt/friend43.C
! 240a690e7e4fc7f7dde6cebec46ba385  gcc/testsuite/g++.old-deja/g++.pt/friend44.C
  df7d01cb9e83b1ca1b006b7718b0b8bf  gcc/testsuite/g++.old-deja/g++.pt/friend45.C
  81e33521c902dd01bd10a901800a8b1c  gcc/testsuite/g++.old-deja/g++.pt/friend46.C
  7c69d10be073a85966d0fe1737fbf230  gcc/testsuite/g++.old-deja/g++.pt/friend47.C
--- 12528,12534 ----
  31398208b74ece771fe1f2f73fcba014  gcc/testsuite/g++.old-deja/g++.pt/friend41.C
  540fd956d325d0aa4769600acae7c0c2  gcc/testsuite/g++.old-deja/g++.pt/friend42.C
  301f35594b1f8e003468b70f0975722e  gcc/testsuite/g++.old-deja/g++.pt/friend43.C
! cdbb5542332d9ba2fba1f567d6e9e08c  gcc/testsuite/g++.old-deja/g++.pt/friend44.C
  df7d01cb9e83b1ca1b006b7718b0b8bf  gcc/testsuite/g++.old-deja/g++.pt/friend45.C
  81e33521c902dd01bd10a901800a8b1c  gcc/testsuite/g++.old-deja/g++.pt/friend46.C
  7c69d10be073a85966d0fe1737fbf230  gcc/testsuite/g++.old-deja/g++.pt/friend47.C
*************** f1363637cbb5dd90414cf0a0933c5159  gcc/te
*** 11892,11898 ****
  652ae1b58d6749944daad11f3f765054  gcc/testsuite/g++.old-deja/g++.pt/memtemp24.C
  1e75e85c15d51caa86b1f88f913409c0  gcc/testsuite/g++.old-deja/g++.pt/memtemp25.C
  12aa4b512a6963472981ee0025ca4de3  gcc/testsuite/g++.old-deja/g++.pt/memtemp26.C
- 652ae1b58d6749944daad11f3f765054  gcc/testsuite/g++.old-deja/g++.pt/memtemp27.C
  435c6c6661db967edab09bec8456f1e8  gcc/testsuite/g++.old-deja/g++.pt/memtemp28.C
  64001292d35e4546c05e29239be4d7ff  gcc/testsuite/g++.old-deja/g++.pt/memtemp29.C
  36d4d3c6025343e652003f710e36c1ba  gcc/testsuite/g++.old-deja/g++.pt/memtemp3.C
--- 12635,12640 ----
*************** f84505e827ff9d275724d3f7e2eef1ff  gcc/te
*** 12014,12020 ****
  42b546af24cd6a9e6b0bf9288a0c9adb  gcc/testsuite/g++.old-deja/g++.pt/ptrmem2.C
  fd6c9bbde46f9a741d3ea6fcf4196c71  gcc/testsuite/g++.old-deja/g++.pt/ptrmem3.C
  bf3497f7210e8501db836f12a50b4847  gcc/testsuite/g++.old-deja/g++.pt/ptrmem4.C
! 005edea99c86c8fc4bba6416425a39a9  gcc/testsuite/g++.old-deja/g++.pt/ptrmem5.C
  a502c5d9ab715358ae3280f9865dba06  gcc/testsuite/g++.old-deja/g++.pt/ptrmem6.C
  43af7526c15acf063c86ed2628da6ed1  gcc/testsuite/g++.old-deja/g++.pt/ptrmem7.C
  e52e6177e655a4986751dbd9747d4dc7  gcc/testsuite/g++.old-deja/g++.pt/ptrmem8.C
--- 12756,12762 ----
  42b546af24cd6a9e6b0bf9288a0c9adb  gcc/testsuite/g++.old-deja/g++.pt/ptrmem2.C
  fd6c9bbde46f9a741d3ea6fcf4196c71  gcc/testsuite/g++.old-deja/g++.pt/ptrmem3.C
  bf3497f7210e8501db836f12a50b4847  gcc/testsuite/g++.old-deja/g++.pt/ptrmem4.C
! 307b552baa37598a74e96cc36e240254  gcc/testsuite/g++.old-deja/g++.pt/ptrmem5.C
  a502c5d9ab715358ae3280f9865dba06  gcc/testsuite/g++.old-deja/g++.pt/ptrmem6.C
  43af7526c15acf063c86ed2628da6ed1  gcc/testsuite/g++.old-deja/g++.pt/ptrmem7.C
  e52e6177e655a4986751dbd9747d4dc7  gcc/testsuite/g++.old-deja/g++.pt/ptrmem8.C
*************** be4c4aaf4896a204dd3b537e9467220b  gcc/te
*** 12051,12057 ****
  6dea43e72960bc1d42aee3da9eaf0230  gcc/testsuite/g++.old-deja/g++.pt/spec2.C
  4f2ee8eba054c3fe2ba2daebef3df852  gcc/testsuite/g++.old-deja/g++.pt/spec20.C
  52d3bef899d8ffa7c94dcdd013dd1d9d  gcc/testsuite/g++.old-deja/g++.pt/spec21.C
! 6cc8ac2b4c131fc41fbc507df3af962e  gcc/testsuite/g++.old-deja/g++.pt/spec22.C
  367cdf2dd4f938be53439e37487c6a8f  gcc/testsuite/g++.old-deja/g++.pt/spec23.C
  c641e36402b485a24d11862e3fabfc28  gcc/testsuite/g++.old-deja/g++.pt/spec24.C
  791cb8011101118669713cbe197ead57  gcc/testsuite/g++.old-deja/g++.pt/spec25.C
--- 12793,12799 ----
  6dea43e72960bc1d42aee3da9eaf0230  gcc/testsuite/g++.old-deja/g++.pt/spec2.C
  4f2ee8eba054c3fe2ba2daebef3df852  gcc/testsuite/g++.old-deja/g++.pt/spec20.C
  52d3bef899d8ffa7c94dcdd013dd1d9d  gcc/testsuite/g++.old-deja/g++.pt/spec21.C
! 0daf4ca5de6ea5d8f88fdd6282e2453b  gcc/testsuite/g++.old-deja/g++.pt/spec22.C
  367cdf2dd4f938be53439e37487c6a8f  gcc/testsuite/g++.old-deja/g++.pt/spec23.C
  c641e36402b485a24d11862e3fabfc28  gcc/testsuite/g++.old-deja/g++.pt/spec24.C
  791cb8011101118669713cbe197ead57  gcc/testsuite/g++.old-deja/g++.pt/spec25.C
*************** cad9794eab82bd6f8f2d29e8df55bda4  gcc/te
*** 12077,12086 ****
  216b43891b00dedddfc46563fb1a5ea3  gcc/testsuite/g++.old-deja/g++.pt/spec6.C
  48eac1a120525c146e973dea81905b73  gcc/testsuite/g++.old-deja/g++.pt/spec7.C
  3612c391a5a866716ef9cd0a70802bfe  gcc/testsuite/g++.old-deja/g++.pt/spec8.C
! b05d301089728c37454fb6d1cd89d7d9  gcc/testsuite/g++.old-deja/g++.pt/spec9.C
  e0d0fe1b8240ee54372126de5a91f0c7  gcc/testsuite/g++.old-deja/g++.pt/static1.C
  37a7d6a67124f94d78e607a0f16123af  gcc/testsuite/g++.old-deja/g++.pt/static10.C
! c6ca5ba2638b97dfc03553b297e0799c  gcc/testsuite/g++.old-deja/g++.pt/static11.C
  b0ee25173b0e8adc17515578b0821f22  gcc/testsuite/g++.old-deja/g++.pt/static2.C
  cce93274cc52f32776c18c658a1f9dde  gcc/testsuite/g++.old-deja/g++.pt/static3.C
  589231529de4c0a45cb857d76c3e2a2e  gcc/testsuite/g++.old-deja/g++.pt/static4.C
--- 12819,12828 ----
  216b43891b00dedddfc46563fb1a5ea3  gcc/testsuite/g++.old-deja/g++.pt/spec6.C
  48eac1a120525c146e973dea81905b73  gcc/testsuite/g++.old-deja/g++.pt/spec7.C
  3612c391a5a866716ef9cd0a70802bfe  gcc/testsuite/g++.old-deja/g++.pt/spec8.C
! a8e3f81a6b6d012a1195ec088520808e  gcc/testsuite/g++.old-deja/g++.pt/spec9.C
  e0d0fe1b8240ee54372126de5a91f0c7  gcc/testsuite/g++.old-deja/g++.pt/static1.C
  37a7d6a67124f94d78e607a0f16123af  gcc/testsuite/g++.old-deja/g++.pt/static10.C
! 0a291e82989d5cef0104e90da5938b98  gcc/testsuite/g++.old-deja/g++.pt/static11.C
  b0ee25173b0e8adc17515578b0821f22  gcc/testsuite/g++.old-deja/g++.pt/static2.C
  cce93274cc52f32776c18c658a1f9dde  gcc/testsuite/g++.old-deja/g++.pt/static3.C
  589231529de4c0a45cb857d76c3e2a2e  gcc/testsuite/g++.old-deja/g++.pt/static4.C
*************** fc6613a2b4cdea9da335da10b446300a  gcc/te
*** 12194,12200 ****
  2117ae72852be8839191fb8e5bc6984a  gcc/testsuite/g++.old-deja/g++.pt/ttp5.C
  4b8e846d9ad0f88ab881eb5334dca868  gcc/testsuite/g++.old-deja/g++.pt/ttp50.C
  e21e64d5bf94549c995756027a97efdb  gcc/testsuite/g++.old-deja/g++.pt/ttp51.C
! 13e70b445dcebc8826ec90104e04f190  gcc/testsuite/g++.old-deja/g++.pt/ttp52.C
  20fb2043be6ad6f1486e40c6e4909168  gcc/testsuite/g++.old-deja/g++.pt/ttp53.C
  5d047fa0fb43bd8a4a3df486c8742dd9  gcc/testsuite/g++.old-deja/g++.pt/ttp54.C
  960d60e90f42a0eb908c58d544fbd322  gcc/testsuite/g++.old-deja/g++.pt/ttp55.C
--- 12936,12942 ----
  2117ae72852be8839191fb8e5bc6984a  gcc/testsuite/g++.old-deja/g++.pt/ttp5.C
  4b8e846d9ad0f88ab881eb5334dca868  gcc/testsuite/g++.old-deja/g++.pt/ttp50.C
  e21e64d5bf94549c995756027a97efdb  gcc/testsuite/g++.old-deja/g++.pt/ttp51.C
! a0ad3717d706ab0e38262e2cb1818205  gcc/testsuite/g++.old-deja/g++.pt/ttp52.C
  20fb2043be6ad6f1486e40c6e4909168  gcc/testsuite/g++.old-deja/g++.pt/ttp53.C
  5d047fa0fb43bd8a4a3df486c8742dd9  gcc/testsuite/g++.old-deja/g++.pt/ttp54.C
  960d60e90f42a0eb908c58d544fbd322  gcc/testsuite/g++.old-deja/g++.pt/ttp55.C
*************** e4bacbe47abba3ebf1104b50d7cf9249  gcc/te
*** 12272,12278 ****
  6cf6eee14bea81b2cce96fc7d78d3139  gcc/testsuite/g++.old-deja/g++.robertl/README
  7043c0e8dd58f93b9ec2d562d4af77b8  gcc/testsuite/g++.old-deja/g++.robertl/eb10.C
  ee83a1efbd7590614fbf204920c56047  gcc/testsuite/g++.old-deja/g++.robertl/eb102.C
! 2bb68df41896297e0e06bd72a86dd8e0  gcc/testsuite/g++.old-deja/g++.robertl/eb103.C
  d0815bd10637ef31f290d081ddbda880  gcc/testsuite/g++.old-deja/g++.robertl/eb104.C
  3659e47043ebbb544b5bad1e021405df  gcc/testsuite/g++.old-deja/g++.robertl/eb105.C
  b38ea5d6c4cb1484291fff04814081ca  gcc/testsuite/g++.old-deja/g++.robertl/eb106.C
--- 13014,13020 ----
  6cf6eee14bea81b2cce96fc7d78d3139  gcc/testsuite/g++.old-deja/g++.robertl/README
  7043c0e8dd58f93b9ec2d562d4af77b8  gcc/testsuite/g++.old-deja/g++.robertl/eb10.C
  ee83a1efbd7590614fbf204920c56047  gcc/testsuite/g++.old-deja/g++.robertl/eb102.C
! 9886b6c2178e1508f318b3027cdd915d  gcc/testsuite/g++.old-deja/g++.robertl/eb103.C
  d0815bd10637ef31f290d081ddbda880  gcc/testsuite/g++.old-deja/g++.robertl/eb104.C
  3659e47043ebbb544b5bad1e021405df  gcc/testsuite/g++.old-deja/g++.robertl/eb105.C
  b38ea5d6c4cb1484291fff04814081ca  gcc/testsuite/g++.old-deja/g++.robertl/eb106.C
*************** dda1730a666d8970244424705aa4b904  gcc/te
*** 12287,12297 ****
  3cfd21e032a7b6c6168c382e3a96ce06  gcc/testsuite/g++.old-deja/g++.robertl/eb114.C
  239088e4929f8dedbfa1d468b3145a0e  gcc/testsuite/g++.old-deja/g++.robertl/eb115.C
  eb3cdb3a22417c5582d0bab0b4742a3e  gcc/testsuite/g++.old-deja/g++.robertl/eb116.C
- 62d0e7e60193687b1f1b361da29f567a  gcc/testsuite/g++.old-deja/g++.robertl/eb118.C
  d7b5ad9dc89639b7fdb1139e9f51ce86  gcc/testsuite/g++.old-deja/g++.robertl/eb119.C
  8a824bc1662e2bc1e829ee6e0d13c4c1  gcc/testsuite/g++.old-deja/g++.robertl/eb12.C
  b0b80d381a13416603feedf9611b816d  gcc/testsuite/g++.old-deja/g++.robertl/eb120.C
! dbc6e9b0db464e1f3dbc66a3c38b4bea  gcc/testsuite/g++.old-deja/g++.robertl/eb121.C
  6cea022036005800b290af273d7eb4f5  gcc/testsuite/g++.old-deja/g++.robertl/eb122.C
  27414451cdd553e1e28ff5c414cae858  gcc/testsuite/g++.old-deja/g++.robertl/eb123.C
  41102a1c99ea009d5ff0a3074bf4f821  gcc/testsuite/g++.old-deja/g++.robertl/eb124.C
--- 13029,13038 ----
  3cfd21e032a7b6c6168c382e3a96ce06  gcc/testsuite/g++.old-deja/g++.robertl/eb114.C
  239088e4929f8dedbfa1d468b3145a0e  gcc/testsuite/g++.old-deja/g++.robertl/eb115.C
  eb3cdb3a22417c5582d0bab0b4742a3e  gcc/testsuite/g++.old-deja/g++.robertl/eb116.C
  d7b5ad9dc89639b7fdb1139e9f51ce86  gcc/testsuite/g++.old-deja/g++.robertl/eb119.C
  8a824bc1662e2bc1e829ee6e0d13c4c1  gcc/testsuite/g++.old-deja/g++.robertl/eb12.C
  b0b80d381a13416603feedf9611b816d  gcc/testsuite/g++.old-deja/g++.robertl/eb120.C
! 282c1b0f7110aef42ae9b46f4ed3798c  gcc/testsuite/g++.old-deja/g++.robertl/eb121.C
  6cea022036005800b290af273d7eb4f5  gcc/testsuite/g++.old-deja/g++.robertl/eb122.C
  27414451cdd553e1e28ff5c414cae858  gcc/testsuite/g++.old-deja/g++.robertl/eb123.C
  41102a1c99ea009d5ff0a3074bf4f821  gcc/testsuite/g++.old-deja/g++.robertl/eb124.C
*************** e1cc4c0a26466bcb288ed01f4b1e02c6  gcc/te
*** 12317,12323 ****
  8767b204079f14a768b1e30e16817c5c  gcc/testsuite/g++.old-deja/g++.robertl/eb2.C
  b8297fbb8ea21dd74224c4f583013d82  gcc/testsuite/g++.old-deja/g++.robertl/eb20.C
  dfa1bab9d1d1dbb5b57ebf2c698892d7  gcc/testsuite/g++.old-deja/g++.robertl/eb21.C
! deb3f00b5b81987639e3850a295a4c7b  gcc/testsuite/g++.old-deja/g++.robertl/eb22.C
  9d707a3f73b9ac5715f144793aab4cf0  gcc/testsuite/g++.old-deja/g++.robertl/eb23.C
  6746831f359d3159b992e820ac0aa390  gcc/testsuite/g++.old-deja/g++.robertl/eb24.C
  b59a32870ec05fd37278e2e977b4ceb3  gcc/testsuite/g++.old-deja/g++.robertl/eb26.C
--- 13058,13064 ----
  8767b204079f14a768b1e30e16817c5c  gcc/testsuite/g++.old-deja/g++.robertl/eb2.C
  b8297fbb8ea21dd74224c4f583013d82  gcc/testsuite/g++.old-deja/g++.robertl/eb20.C
  dfa1bab9d1d1dbb5b57ebf2c698892d7  gcc/testsuite/g++.old-deja/g++.robertl/eb21.C
! 1dc895037609f733493bda886c849e02  gcc/testsuite/g++.old-deja/g++.robertl/eb22.C
  9d707a3f73b9ac5715f144793aab4cf0  gcc/testsuite/g++.old-deja/g++.robertl/eb23.C
  6746831f359d3159b992e820ac0aa390  gcc/testsuite/g++.old-deja/g++.robertl/eb24.C
  b59a32870ec05fd37278e2e977b4ceb3  gcc/testsuite/g++.old-deja/g++.robertl/eb26.C
*************** d220747503f1cae3d8e04233dceb1d48  gcc/te
*** 12335,12341 ****
  d58ae7b46abd9e5199b3fb1440309bb9  gcc/testsuite/g++.old-deja/g++.robertl/eb37.C
  db68a817c3bdd5f97fe7e97593e0eee4  gcc/testsuite/g++.old-deja/g++.robertl/eb38.C
  b92d300c6fe701dce20422ebf6b69f31  gcc/testsuite/g++.old-deja/g++.robertl/eb39.C
! 3c528cf44800a33ade311b8a3429f28a  gcc/testsuite/g++.old-deja/g++.robertl/eb4.C
  a2554475431f18dfadd63645b06b9130  gcc/testsuite/g++.old-deja/g++.robertl/eb41.C
  4d36c802ed1bee4b70954e9468de52d3  gcc/testsuite/g++.old-deja/g++.robertl/eb43.C
  f7aec9dbbf21415a752638fc78bac67a  gcc/testsuite/g++.old-deja/g++.robertl/eb44.C
--- 13076,13082 ----
  d58ae7b46abd9e5199b3fb1440309bb9  gcc/testsuite/g++.old-deja/g++.robertl/eb37.C
  db68a817c3bdd5f97fe7e97593e0eee4  gcc/testsuite/g++.old-deja/g++.robertl/eb38.C
  b92d300c6fe701dce20422ebf6b69f31  gcc/testsuite/g++.old-deja/g++.robertl/eb39.C
! ca1d2b609a7f0d7cb1193e927e15448a  gcc/testsuite/g++.old-deja/g++.robertl/eb4.C
  a2554475431f18dfadd63645b06b9130  gcc/testsuite/g++.old-deja/g++.robertl/eb41.C
  4d36c802ed1bee4b70954e9468de52d3  gcc/testsuite/g++.old-deja/g++.robertl/eb43.C
  f7aec9dbbf21415a752638fc78bac67a  gcc/testsuite/g++.old-deja/g++.robertl/eb44.C
*************** be75e16bfbc653f4918a04c9b9ffb7ea  gcc/te
*** 12372,12378 ****
  dd81fcab77c6b0ad6ce03686438fbd51  gcc/testsuite/g++.old-deja/g++.robertl/eb76.C
  349f93b6aba01075501dbe0c1897a06a  gcc/testsuite/g++.old-deja/g++.robertl/eb77.C
  ffb7d66df8f3d547faff39baa7948154  gcc/testsuite/g++.old-deja/g++.robertl/eb79.C
! c15d6d5242f662fc64eaa3298ef23b5e  gcc/testsuite/g++.old-deja/g++.robertl/eb8.C
  1eb9a1d899e84b46785ab32efead0469  gcc/testsuite/g++.old-deja/g++.robertl/eb80.C
  78c03dfd8616d6624f4aa754373b8727  gcc/testsuite/g++.old-deja/g++.robertl/eb81.C
  bf4dffe16b0ade11667a1a290a8444f4  gcc/testsuite/g++.old-deja/g++.robertl/eb82.C
--- 13113,13119 ----
  dd81fcab77c6b0ad6ce03686438fbd51  gcc/testsuite/g++.old-deja/g++.robertl/eb76.C
  349f93b6aba01075501dbe0c1897a06a  gcc/testsuite/g++.old-deja/g++.robertl/eb77.C
  ffb7d66df8f3d547faff39baa7948154  gcc/testsuite/g++.old-deja/g++.robertl/eb79.C
! a085e6cf1eca394616113132643a792e  gcc/testsuite/g++.old-deja/g++.robertl/eb8.C
  1eb9a1d899e84b46785ab32efead0469  gcc/testsuite/g++.old-deja/g++.robertl/eb80.C
  78c03dfd8616d6624f4aa754373b8727  gcc/testsuite/g++.old-deja/g++.robertl/eb81.C
  bf4dffe16b0ade11667a1a290a8444f4  gcc/testsuite/g++.old-deja/g++.robertl/eb82.C
*************** c67a0b40ab41073ef2b127e44dfed166  gcc/te
*** 12405,12411 ****
  109add3f9d0f1266286de36607a6be27  gcc/testsuite/g++.old-deja/g++.robertl/ice990323-4.C
  1e0df75bb630426aaa9e32e30df6eeaf  gcc/testsuite/g++.old-deja/g++.robertl/ice990323-5.C
  c04c5df1af975e2555996996c93c2bc3  gcc/testsuite/g++.old-deja/g++.warn/cast-align1.C
! c85ed6e80dfca454736d3474c7007fb8  gcc/testsuite/g++.old-deja/g++.warn/compare1.C
  8e6c43e1ca88faef2525ef3c74453bb2  gcc/testsuite/g++.old-deja/g++.warn/flow1.C
  a4ef33e98df7e7110f4c560b41bcc721  gcc/testsuite/g++.old-deja/g++.warn/impint.C
  eb132b2311aaf54983cf7abacab06e28  gcc/testsuite/g++.old-deja/g++.warn/impint2.C
--- 13146,13152 ----
  109add3f9d0f1266286de36607a6be27  gcc/testsuite/g++.old-deja/g++.robertl/ice990323-4.C
  1e0df75bb630426aaa9e32e30df6eeaf  gcc/testsuite/g++.old-deja/g++.robertl/ice990323-5.C
  c04c5df1af975e2555996996c93c2bc3  gcc/testsuite/g++.old-deja/g++.warn/cast-align1.C
! 2e412f07943defebf213634723c56d4e  gcc/testsuite/g++.old-deja/g++.warn/compare1.C
  8e6c43e1ca88faef2525ef3c74453bb2  gcc/testsuite/g++.old-deja/g++.warn/flow1.C
  a4ef33e98df7e7110f4c560b41bcc721  gcc/testsuite/g++.old-deja/g++.warn/impint.C
  eb132b2311aaf54983cf7abacab06e28  gcc/testsuite/g++.old-deja/g++.warn/impint2.C
*************** ba26331ea379fdf3ed035f76593a9b92  gcc/te
*** 12413,12616 ****
  d53cb2073c8f36697f63dfe19779eb13  gcc/testsuite/g++.old-deja/g++.warn/iomanip.C
  8005975800b73ab7a05b4dd3e210a9c3  gcc/testsuite/g++.old-deja/g++.warn/virt1.C
  530c4c57e5ffb42aab11ba0b2750b505  gcc/testsuite/g++.old-deja/old-deja.exp
- d9ddadfe4a8de10d432d5bc53817f479  gcc/testsuite/g77.dg/12632.f
- 451ee44678703e51009b6270999b52c9  gcc/testsuite/g77.dg/20010216-1.f
- b24f067dcba71c9828e34889ff389717  gcc/testsuite/g77.dg/7388.f
- 6c00e8c4a01d8bc313adf56d8e1fb8b6  gcc/testsuite/g77.dg/bprob/bprob.exp
- 7c66c9dcd77be39b19bec3d151bb2dc6  gcc/testsuite/g77.dg/bprob/g77-bprob-1.f
- ea040c3c6109c18eb47756705aaf3cf4  gcc/testsuite/g77.dg/dg.exp
- 5f07e6fafeed89aeef7c7bdcad5664c7  gcc/testsuite/g77.dg/f77-edit-apostrophe-out.f
- 0d8a0ba8ae1d7da40a25931e3cfb1204  gcc/testsuite/g77.dg/f77-edit-colon-out.f
- 1f6781d6cf004a145321247795101e47  gcc/testsuite/g77.dg/f77-edit-h-out.f
- 3ab3437b2c71c67193ed2894a2c8f585  gcc/testsuite/g77.dg/f77-edit-i-in.f
- 8f39aa584914e46ad5898af506058a71  gcc/testsuite/g77.dg/f77-edit-i-out.f
- 145150b5b9e0b1b391be92bdde7298f6  gcc/testsuite/g77.dg/f77-edit-s-out.f
- 39e5bb2b521c5cc467963d1bde299b31  gcc/testsuite/g77.dg/f77-edit-slash-out.f
- 94f03005b32e68a8eb26fb9016c3cf82  gcc/testsuite/g77.dg/f77-edit-t-in.f
- 2fd189574e5e3e327e513bc9ad958b51  gcc/testsuite/g77.dg/f77-edit-t-out.f
- 49e0410fdfac2125fca85ce3148b9fde  gcc/testsuite/g77.dg/f77-edit-x-out.f
- 116e85f4dcee73c133920a6aef2e0d44  gcc/testsuite/g77.dg/fbackslash.f
- cb7ebad5361ad15661d9893ca5c0419e  gcc/testsuite/g77.dg/fcase-preserve.f
- 8a67d2a32583fd3f541c3aba2f604a69  gcc/testsuite/g77.dg/ff90-1.f
- 96977883421b175b67be1118b794bd56  gcc/testsuite/g77.dg/ffixed-form-1.f
- 29ff9a4381ca8c02a6e5817b0a713d27  gcc/testsuite/g77.dg/ffixed-form-2.f
- 57194471031e9d956071d8b5b26dad72  gcc/testsuite/g77.dg/ffixed-line-length-0.f
- 7739edaa117d533feb47c76dd60924a4  gcc/testsuite/g77.dg/ffixed-line-length-132.f
- b23b195adaa70fc12faa51019b4fc9d1  gcc/testsuite/g77.dg/ffixed-line-length-7.f
- 5e49908e5e0ef59516704cc29a9b3256  gcc/testsuite/g77.dg/ffixed-line-length-72.f
- 5d57315187c151cff340f72b4514f42c  gcc/testsuite/g77.dg/ffixed-line-length-none.f
- c34f0338bfd38cc5789eae9ef9b39d98  gcc/testsuite/g77.dg/ffree-form-1.f
- 646e9985c5cbdd264fc06153ea1769b3  gcc/testsuite/g77.dg/ffree-form-2.f
- 536d1ae729593f200381628d100a2b86  gcc/testsuite/g77.dg/ffree-form-3.f
- 712d818afc9227b951192f3056fa3ca3  gcc/testsuite/g77.dg/fno-backslash.f
- 0f42112680dc4791ee22fd157092d021  gcc/testsuite/g77.dg/fno-f90-1.f
- 314b5da344607e38fc4290b0d87f2c6f  gcc/testsuite/g77.dg/fno-fixed-form-1.f
- cdf679b89602a67fd9f742e98d109ec0  gcc/testsuite/g77.dg/fno-onetrip.f
- 926bd5cbaf0addac123c20f48c41a874  gcc/testsuite/g77.dg/fno-typeless-boz.f
- b76273e7af403caabc68f7f1973b211c  gcc/testsuite/g77.dg/fno-underscoring.f
- 0aeaaa3f24c9384af9022cc4e3d83b5f  gcc/testsuite/g77.dg/fno-vxt-1.f
- 63dd733e63a3289f3110e51c8bac58fc  gcc/testsuite/g77.dg/fonetrip.f
- 274ea17fc6b6f0e5659e4d263ef2a5cd  gcc/testsuite/g77.dg/ftypeless-boz.f
- 3c0aaed3247343176d0e341c32de73fe  gcc/testsuite/g77.dg/fugly-assumed.f
- 51a2c0c69a512565c359338191e9e39e  gcc/testsuite/g77.dg/funderscoring.f
- 0625bfe12a68274f9c694bcb29fef9ef  gcc/testsuite/g77.dg/fvxt-1.f
- 5af24fb1760634d1f352f407ae139165  gcc/testsuite/g77.dg/gcov/gcov-1.f
- 7387a84cb7c07c9f5d2cd6d3a57fd623  gcc/testsuite/g77.dg/gcov/gcov.exp
- fc67a60ce442d524e581c04cb42835f0  gcc/testsuite/g77.dg/pr3743-1.f
- 7677c057e1c5f04e8db39b839cf615fb  gcc/testsuite/g77.dg/pr3743-2.f
- 2dd336fde22b7015a70bcf170bd433fe  gcc/testsuite/g77.dg/pr3743-3.f
- 8adf5c0ef2b0cd39682d0df63c65d5a0  gcc/testsuite/g77.dg/pr3743-4.f
- 500c71c2e1aeb95b4af27a534193ade3  gcc/testsuite/g77.dg/pr5473.f
- 691fafc58780c19650ff4a4e6a443cee  gcc/testsuite/g77.dg/pr9258.f
- 632f6b94f0110d72eedbee7641bd627f  gcc/testsuite/g77.dg/strlen0.f
- 2c3ed5b9cfab56812fe87b063fd0af72  gcc/testsuite/g77.f-torture/compile/12002.f
- 6755fba2c6368eeb0d2595309c08b22c  gcc/testsuite/g77.f-torture/compile/13060.f
- 304a24662b282194ae80d5f181749495  gcc/testsuite/g77.f-torture/compile/19990218-0.f
- fa449bb0694007381fd16ad2276eca85  gcc/testsuite/g77.f-torture/compile/19990305-0.f
- 4ee297f5c02e38bf9a7462c909e1d652  gcc/testsuite/g77.f-torture/compile/19990419-0.f
- cfceef268ce051faf70a32b62ced88e3  gcc/testsuite/g77.f-torture/compile/19990502-0.f
- bf8966162e196e72794e870889b9844c  gcc/testsuite/g77.f-torture/compile/19990502-1.f
- ebafd266d3bd87ab589f4396356b67e6  gcc/testsuite/g77.f-torture/compile/19990525-0.f
- 29613880524902d57a86f064e77d2926  gcc/testsuite/g77.f-torture/compile/19990826-1.f
- 8ee4e90a7ff3bc92a5eb70a04e87db8e  gcc/testsuite/g77.f-torture/compile/19990826-3.f
- 40d0730a8f24134061f91e6875c9bdcb  gcc/testsuite/g77.f-torture/compile/19990905-0.f
- d14241eb4a9dca2e1b72c743b37eff46  gcc/testsuite/g77.f-torture/compile/19990905-2.f
- 14301f2a5e820351438999543af1ccab  gcc/testsuite/g77.f-torture/compile/20000412-1.f
- 0e1ed59bd06e6ef014de61a59f55a8ef  gcc/testsuite/g77.f-torture/compile/20000511-1.f
- a5f1502f73ba7d8a6e4ebc6a19867e32  gcc/testsuite/g77.f-torture/compile/20000511-2.f
- b9422b38aa5c55ec5deb2f1e81687f80  gcc/testsuite/g77.f-torture/compile/20000518.f
- c730200c483a5bedde13d09d31e98ea4  gcc/testsuite/g77.f-torture/compile/20000601-1.f
- 05e783f86eef8c36c5399f006c401b91  gcc/testsuite/g77.f-torture/compile/20000601-2.f
- 819694e8c94ba8146f454d7666f1a969  gcc/testsuite/g77.f-torture/compile/20000629-1.f
- ad632d583ea493fb8bed6d679998ed4f  gcc/testsuite/g77.f-torture/compile/20000630-2.f
- 0d15ac4bb82b02b471966f89397aa587  gcc/testsuite/g77.f-torture/compile/20010115.f
- ec4ecccaa1a9030adb5963357d13f685  gcc/testsuite/g77.f-torture/compile/20010321-1.f
- b049b7382c1392d3bd97d447de7e3157  gcc/testsuite/g77.f-torture/compile/20010426.f
- 80550fa40e094d8990486be18579b5ad  gcc/testsuite/g77.f-torture/compile/20010519-1.f
- 646a51c0b58ba454bff2c65533a2bea0  gcc/testsuite/g77.f-torture/compile/20020307-1.f
- 14edba6a5489a3718c6d665f68956830  gcc/testsuite/g77.f-torture/compile/20030115-1.c
- 5395bc2a5b8983d57e4507059fc87d18  gcc/testsuite/g77.f-torture/compile/20030326-1.f
- 137825041fa0343143f8a5cf974692d7  gcc/testsuite/g77.f-torture/compile/8485.f
- 3872654848cf0a3217a9ad523c83dc7d  gcc/testsuite/g77.f-torture/compile/960317-1.f
- cf99e1ab065dab5ae54dde1c11ade973  gcc/testsuite/g77.f-torture/compile/970125-0.f
- ab02b6a993572726d4ad15722d436554  gcc/testsuite/g77.f-torture/compile/970915-0.f
- 8c7d5ee128fa51c2568e05f21018c7c3  gcc/testsuite/g77.f-torture/compile/980310-1.f
- f2ffb6160eff5ba98c2625073a0f80bb  gcc/testsuite/g77.f-torture/compile/980310-2.f
- a2c57724ed12c69a29cad2a091ab7579  gcc/testsuite/g77.f-torture/compile/980310-3.f
- 168d8db44bb4c8be9ffe8f03ec232a1f  gcc/testsuite/g77.f-torture/compile/980310-4.f
- 08b0e84c4d808a6688edec4f094704cb  gcc/testsuite/g77.f-torture/compile/980310-6.f
- 4c0915f5865ea15f7ecd7074e30947c2  gcc/testsuite/g77.f-torture/compile/980310-7.f
- 3177f7ffd1982a68565bccf345eb7946  gcc/testsuite/g77.f-torture/compile/980310-8.f
- 4cdb991b0dafeb25befd7bfad0a40a0a  gcc/testsuite/g77.f-torture/compile/980419-2.f
- d3927749ee1e64e35fa30f1c4ea15d3d  gcc/testsuite/g77.f-torture/compile/980424-0.f
- 56d70c5fd67ef70cbe5cba8769b84bba  gcc/testsuite/g77.f-torture/compile/980427-0.f
- d344ab495720463a65d017810489ec85  gcc/testsuite/g77.f-torture/compile/980519-2.f
- e01ffddfd3bb4d0b6f5e83a238c4927e  gcc/testsuite/g77.f-torture/compile/980729-0.f
- 7873b61fbd675f9cf8882476aa957ef7  gcc/testsuite/g77.f-torture/compile/981117-1.f
- 48dff43f5e06e82ff6d22538fd79ab20  gcc/testsuite/g77.f-torture/compile/990115-1.f
- 285d272dfdc52d4e3860d31db3bd6ff1  gcc/testsuite/g77.f-torture/compile/alpha1.f
- 29fcd5b3027b8e1c1f0059df2781a7fa  gcc/testsuite/g77.f-torture/compile/alpha1.x
- dffb07f5c7baed46420b66442a6c798f  gcc/testsuite/g77.f-torture/compile/compile.exp
- ab8074520177c4e0b31fedf0165dc9d4  gcc/testsuite/g77.f-torture/compile/cpp.F
- 4d29e68e228bdea50e7db6d99a79486d  gcc/testsuite/g77.f-torture/compile/cpp2.F
- b305a8f63e6b672d1ca063bdd53e1336  gcc/testsuite/g77.f-torture/compile/toon_1.f
- 9554ff5730c98cfc2f93e0d845c27cda  gcc/testsuite/g77.f-torture/compile/xformat.f
- 319c6d55b381b343167af8f9eb4c4ff6  gcc/testsuite/g77.f-torture/execute/10197.f
- adc1dba1098fc41c1a1e30ef3f59a0b4  gcc/testsuite/g77.f-torture/execute/10197.x
- f54ab4b66cf0457421ec2a66c68c76a8  gcc/testsuite/g77.f-torture/execute/12884.f
- 690a038f89d89c983ec85c3be6fe4c33  gcc/testsuite/g77.f-torture/execute/13037.f
- ae5ede8723f83be3383b060dd1dce854  gcc/testsuite/g77.f-torture/execute/1832.f
- e30e2a0cdabc154c716720aebb68882d  gcc/testsuite/g77.f-torture/execute/19981119-0.f
- b24dd88a1b98119a610233804796bb62  gcc/testsuite/g77.f-torture/execute/19990313-0.f
- 62d2d900b575cf2760cca4cce251ee8d  gcc/testsuite/g77.f-torture/execute/19990313-1.f
- 0f389bfa95f4a665a70d333abf27be06  gcc/testsuite/g77.f-torture/execute/19990313-2.f
- 667fe17f380e4ffb59f84274cf02c1a9  gcc/testsuite/g77.f-torture/execute/19990313-3.f
- f5bcea9d378a788a093fc319398e6ecc  gcc/testsuite/g77.f-torture/execute/19990325-0.f
- cf3459171e03e8bdb4480dda178728d4  gcc/testsuite/g77.f-torture/execute/19990325-1.f
- bb853713e2395693dcb8192d2a24cfd9  gcc/testsuite/g77.f-torture/execute/19990419-1.f
- 090db0ac3e4ed7af7afe616253b7ea9c  gcc/testsuite/g77.f-torture/execute/19990826-0.f
- 15f4a8f4a4f570ccd218bf7e347cb801  gcc/testsuite/g77.f-torture/execute/19990826-2.f
- 39ab4fb050e66ff5fd9c5f9d45a323d3  gcc/testsuite/g77.f-torture/execute/20000503-1.f
- 7fa937b5b988c3aeec7fd03bbe4ca1f4  gcc/testsuite/g77.f-torture/execute/20001111.f
- 78eb47685a7bc50179006dd89683560a  gcc/testsuite/g77.f-torture/execute/20001201.f
- adc1dba1098fc41c1a1e30ef3f59a0b4  gcc/testsuite/g77.f-torture/execute/20001201.x
- 13f10e9aeedd5ab0dccbb0aa2334ff92  gcc/testsuite/g77.f-torture/execute/20010116.f
- afe1ddb8c47c042e2a22957a8a9dddf6  gcc/testsuite/g77.f-torture/execute/20010426.f
- 3759adfae8398ccd88fd54917453bd3d  gcc/testsuite/g77.f-torture/execute/20010430.f
- 0ec26aa0d940f38d49f3795ff8f7bde4  gcc/testsuite/g77.f-torture/execute/20010610.f
- 86b277dd1f925a910f8b02a5ffd8846d  gcc/testsuite/g77.f-torture/execute/5122.f
- 036e8fd18eab47c47b6a71d4c3423104  gcc/testsuite/g77.f-torture/execute/6177.f
- 6c8ee9f31d1738c45d474d56608de56f  gcc/testsuite/g77.f-torture/execute/6367.f
- b1012ed4321606da3c919260cdf4e684  gcc/testsuite/g77.f-torture/execute/6367.x
- 3b59cc5e1419b7141c883f9b987239ec  gcc/testsuite/g77.f-torture/execute/947.f
- 31d3bb4e55c7e41be53deae1e04eb0db  gcc/testsuite/g77.f-torture/execute/970625-2.f
- 5b220a6122f77de0b9f2b4d779282f7c  gcc/testsuite/g77.f-torture/execute/970816-3.f
- 47d7fc9e50a3d3309e588ef96b98b13a  gcc/testsuite/g77.f-torture/execute/971102-1.f
- 919b53a67c0fb0ec2c67f748684f46d3  gcc/testsuite/g77.f-torture/execute/980520-1.f
- 07e1d68f8a9664c4f29894f3194173c3  gcc/testsuite/g77.f-torture/execute/980628-0.f
- de0941aaa92c8710640d8a7eb96d1bff  gcc/testsuite/g77.f-torture/execute/980628-1.f
- 5f02d335be4cffb8cee7163f10cbfa28  gcc/testsuite/g77.f-torture/execute/980628-10.f
- fedf3be4055bd6528267face92a28511  gcc/testsuite/g77.f-torture/execute/980628-2.f
- 8fe7dd0fdbdee2d344f3c304ba466601  gcc/testsuite/g77.f-torture/execute/980628-3.f
- 270d19e8f91a0beaa4c1626b3d7736af  gcc/testsuite/g77.f-torture/execute/980628-4.f
- 29fcd5b3027b8e1c1f0059df2781a7fa  gcc/testsuite/g77.f-torture/execute/980628-4.x
- 58d2b2ec416c966f03dd02c40d50e95c  gcc/testsuite/g77.f-torture/execute/980628-5.f
- 29fcd5b3027b8e1c1f0059df2781a7fa  gcc/testsuite/g77.f-torture/execute/980628-5.x
- 03992b5713f891faf217e094da807f87  gcc/testsuite/g77.f-torture/execute/980628-6.f
- 29fcd5b3027b8e1c1f0059df2781a7fa  gcc/testsuite/g77.f-torture/execute/980628-6.x
- 21c4112479fcbd3b568a9bf2e469d01a  gcc/testsuite/g77.f-torture/execute/980628-7.f
- e930f5e9b4f7cd8f7910acdef0cbe139  gcc/testsuite/g77.f-torture/execute/980628-8.f
- 606b3968268e8c38c46ef9690091430e  gcc/testsuite/g77.f-torture/execute/980628-9.f
- 028d986838fcd4233316c95a0a11570a  gcc/testsuite/g77.f-torture/execute/980701-0.f
- 504273cea1d21e5f7a27350760a86fbd  gcc/testsuite/g77.f-torture/execute/980701-1.f
- 3a639f669325c1355c6239d2156cee32  gcc/testsuite/g77.f-torture/execute/alpha2.f
- 29fcd5b3027b8e1c1f0059df2781a7fa  gcc/testsuite/g77.f-torture/execute/alpha2.x
- af4665d5bd8a6b7fa05fe2c5e6fc56d7  gcc/testsuite/g77.f-torture/execute/auto0.f
- 29fcd5b3027b8e1c1f0059df2781a7fa  gcc/testsuite/g77.f-torture/execute/auto0.x
- 51651fbffd4bec3ea52b9851e74038cc  gcc/testsuite/g77.f-torture/execute/auto1.f
- 29fcd5b3027b8e1c1f0059df2781a7fa  gcc/testsuite/g77.f-torture/execute/auto1.x
- b6d73463afd828a2f896ef66d4e4e56f  gcc/testsuite/g77.f-torture/execute/cabs.f
- 2155a75d9b6fc52d85dd3005eb95fa83  gcc/testsuite/g77.f-torture/execute/claus.f
- c8c2ccdadc76fe6840711ac493f2dc8a  gcc/testsuite/g77.f-torture/execute/complex_1.f
- 0e8c503f26ffdcbb88baa9ba4635674c  gcc/testsuite/g77.f-torture/execute/cpp.F
- 0f6a935310340aab31ff57ddced37cd0  gcc/testsuite/g77.f-torture/execute/cpp2.F
- 63b15fe0412bc8fb6942bee169cc3de5  gcc/testsuite/g77.f-torture/execute/dcomplex.f
- 9f6065c4c53e8d066e73a799fe1904be  gcc/testsuite/g77.f-torture/execute/dnrm2.f
- 272741a4d1523f6a2f6ae0898177d364  gcc/testsuite/g77.f-torture/execute/erfc.f
- a8fa370af729baed12f953c4ae7eab16  gcc/testsuite/g77.f-torture/execute/execute.exp
- e98227c93da2f6c1a929e5a754bccdeb  gcc/testsuite/g77.f-torture/execute/exp.f
- e041657be191daf5f8c3b4af62e5bc10  gcc/testsuite/g77.f-torture/execute/f90-intrinsic-bit.f
- e3a1a1628acdacd741c125ed77695ad7  gcc/testsuite/g77.f-torture/execute/f90-intrinsic-mathematical.f
- 5dab7b2fe66c34578efc390f2357fa12  gcc/testsuite/g77.f-torture/execute/f90-intrinsic-numeric.f
- 06263339a8c02d37064916a3cb462810  gcc/testsuite/g77.f-torture/execute/int8421.f
- 881c7a742f7a963a7990d266f7ed033c  gcc/testsuite/g77.f-torture/execute/intrinsic-f2c-z.f
- 2ebf648f32085576e616ef991fad0700  gcc/testsuite/g77.f-torture/execute/intrinsic-unix-bessel.f
- 099a531a034d1bcae7033ff18859909a  gcc/testsuite/g77.f-torture/execute/intrinsic-unix-erf.f
- e470e77cff6b808658010eed2d70dfa9  gcc/testsuite/g77.f-torture/execute/intrinsic-vax-cd.f
- ce34882b93684cfeb94bf47c4c0fc0b8  gcc/testsuite/g77.f-torture/execute/intrinsic77.f
- 9b65675a51b27e662749a66af804c864  gcc/testsuite/g77.f-torture/execute/io0.f
- adc1dba1098fc41c1a1e30ef3f59a0b4  gcc/testsuite/g77.f-torture/execute/io0.x
- 81347cfbbd679b9d239b4d8f411ae215  gcc/testsuite/g77.f-torture/execute/io1.f
- adc1dba1098fc41c1a1e30ef3f59a0b4  gcc/testsuite/g77.f-torture/execute/io1.x
- 58e8d4360e4f7819b3062fe201ffb5bd  gcc/testsuite/g77.f-torture/execute/labug1.f
- d5e377cbaddbb97c451958aadc5d1e80  gcc/testsuite/g77.f-torture/execute/large_vec.f
- d9bf7f37a2f3b5111d7f9a0326837e03  gcc/testsuite/g77.f-torture/execute/le.f
- 08accda10fbd959133b82e7c14c31ca3  gcc/testsuite/g77.f-torture/execute/pr17541.f
- 8297bcec4a96d79e8aaa67bbdaeb3051  gcc/testsuite/g77.f-torture/execute/select.f
- c5c26650de0db13ccf48227b4cc6e5e4  gcc/testsuite/g77.f-torture/execute/short.f
- 6001508f2843bb0e878740d9ba68a88c  gcc/testsuite/g77.f-torture/execute/u77-test.f
- 1c35a74d1557ed3b51a0172b3914a28a  gcc/testsuite/g77.f-torture/execute/u77-test.x
- 113be0dcf9c992dc3d294a4104ede2bc  gcc/testsuite/g77.f-torture/noncompile/19981216-0.f
- 014c039856983211da77f93bb6ced6bd  gcc/testsuite/g77.f-torture/noncompile/19990218-1.f
- 4453bf856403d8051f3b18c5eca06db3  gcc/testsuite/g77.f-torture/noncompile/19990826-4.f
- ceac40fa9ffdd04d196261241f45c94b  gcc/testsuite/g77.f-torture/noncompile/19990905-1.f
- c0e3dc363bfe2ee330c2da2233660684  gcc/testsuite/g77.f-torture/noncompile/9263.f
- 2bb05f0afd419374a5fc0ead1347360b  gcc/testsuite/g77.f-torture/noncompile/970626-2.f
- 67befcffa64b16a1082b7120254b9e75  gcc/testsuite/g77.f-torture/noncompile/980615-0.f
- 3e47859ddcef4ed7fdf19be4693a11c7  gcc/testsuite/g77.f-torture/noncompile/980616-0.f
- e7505c34744e9ca93d34f52dab60d621  gcc/testsuite/g77.f-torture/noncompile/check0.f
- 88a1a5cbb3e99fcd18a8fa14c7b4a3a7  gcc/testsuite/g77.f-torture/noncompile/noncompile.exp
- c1cf896274b7e1c6e7544d3255472cbc  gcc/testsuite/g77.f-torture/noncompile/select_no_compile.f
  c788285b4507f5903b42472d63c693bf  gcc/testsuite/gcc.c-torture/ChangeLog.0
  84740fd4194274c1fbddfa5575623a40  gcc/testsuite/gcc.c-torture/compat/strct-layout.c
  3bb9d56b7cd137b146d286534c43ff8c  gcc/testsuite/gcc.c-torture/compat/struct-align.c
--- 13154,13159 ----
*************** ce39b4d06388030803b332cdd7ffa388  gcc/te
*** 12667,12674 ****
  274dc6620f97e836091352951757c4c0  gcc/testsuite/gcc.c-torture/compile/20000923-1.c
  615425c9767e3f016a8be91b201d6e4e  gcc/testsuite/gcc.c-torture/compile/20001018-1.c
  0ff31924d5aad8a7a8763b5a5f60d096  gcc/testsuite/gcc.c-torture/compile/20001024-1.c
! 3346600028152a1223005207cfba943c  gcc/testsuite/gcc.c-torture/compile/20001109-1.c
! db1007652e4f96c480bdbf739bd67cba  gcc/testsuite/gcc.c-torture/compile/20001109-2.c
  b6bd432fb49296440f56e2e067b37f04  gcc/testsuite/gcc.c-torture/compile/20001116-1.c
  fcdce816ffa791a50b81375597b661df  gcc/testsuite/gcc.c-torture/compile/20001121-1.c
  bc73cb8df3b277f4a2684bccb8bdc314  gcc/testsuite/gcc.c-torture/compile/20001123-1.c
--- 13210,13217 ----
  274dc6620f97e836091352951757c4c0  gcc/testsuite/gcc.c-torture/compile/20000923-1.c
  615425c9767e3f016a8be91b201d6e4e  gcc/testsuite/gcc.c-torture/compile/20001018-1.c
  0ff31924d5aad8a7a8763b5a5f60d096  gcc/testsuite/gcc.c-torture/compile/20001024-1.c
! 14c73d74420b3f14dac5aa397a9ad03d  gcc/testsuite/gcc.c-torture/compile/20001109-1.c
! 326955497359c83a763463814b567166  gcc/testsuite/gcc.c-torture/compile/20001109-2.c
  b6bd432fb49296440f56e2e067b37f04  gcc/testsuite/gcc.c-torture/compile/20001116-1.c
  fcdce816ffa791a50b81375597b661df  gcc/testsuite/gcc.c-torture/compile/20001121-1.c
  bc73cb8df3b277f4a2684bccb8bdc314  gcc/testsuite/gcc.c-torture/compile/20001123-1.c
*************** b693a0c971cbde8d4faa221663052b4d  gcc/te
*** 12706,12713 ****
  3e989687d5be62a120643d83ec235b00  gcc/testsuite/gcc.c-torture/compile/20010426-1.c
  817fadf0266ada74e7f22aa27c693475  gcc/testsuite/gcc.c-torture/compile/20010503-1.c
  f9cfcad063a043d5d39ecdcd3affa835  gcc/testsuite/gcc.c-torture/compile/20010510-1.c
! a71ca951a35fb894b45c93624f5ecd6a  gcc/testsuite/gcc.c-torture/compile/20010516-1.c
! 49759fb599ae838beb65c9702f331ca3  gcc/testsuite/gcc.c-torture/compile/20010518-1.c
  a7a5bb5eb109163ce0307478b48567c1  gcc/testsuite/gcc.c-torture/compile/20010518-2.c
  4acc6fcf5def90b9b14684ba57450a6e  gcc/testsuite/gcc.c-torture/compile/20010525-1.c
  2f8e8823570049ddc0bba9a4171d0a15  gcc/testsuite/gcc.c-torture/compile/20010605-1.c
--- 13249,13255 ----
  3e989687d5be62a120643d83ec235b00  gcc/testsuite/gcc.c-torture/compile/20010426-1.c
  817fadf0266ada74e7f22aa27c693475  gcc/testsuite/gcc.c-torture/compile/20010503-1.c
  f9cfcad063a043d5d39ecdcd3affa835  gcc/testsuite/gcc.c-torture/compile/20010510-1.c
! a9e89abeee4f87fc286636f8b7941abf  gcc/testsuite/gcc.c-torture/compile/20010518-1.c
  a7a5bb5eb109163ce0307478b48567c1  gcc/testsuite/gcc.c-torture/compile/20010518-2.c
  4acc6fcf5def90b9b14684ba57450a6e  gcc/testsuite/gcc.c-torture/compile/20010525-1.c
  2f8e8823570049ddc0bba9a4171d0a15  gcc/testsuite/gcc.c-torture/compile/20010605-1.c
*************** e7093d14b43b2ce6a32dd00e088d0825  gcc/te
*** 12734,12742 ****
  eebaa303251b603b5e12517aebb516eb  gcc/testsuite/gcc.c-torture/compile/20011114-2.c
  0cb21e10cef36c0127b0e6bc9a014858  gcc/testsuite/gcc.c-torture/compile/20011114-3.c
  ddfd40f73e53c84302c55f2b01659a9d  gcc/testsuite/gcc.c-torture/compile/20011114-4.c
! 53fd9c0351018e6cc87470ed834cefef  gcc/testsuite/gcc.c-torture/compile/20011119-1.c
! 7684307f6d040551879425607dbae32f  gcc/testsuite/gcc.c-torture/compile/20011119-2.c
! dcced706f155529a8be5165721699827  gcc/testsuite/gcc.c-torture/compile/20011130-1.c
  25d1b92ea196529699125132f4276af3  gcc/testsuite/gcc.c-torture/compile/20011130-2.c
  57121bfbb8fa116749b0090dd6f76eab  gcc/testsuite/gcc.c-torture/compile/20011205-1.c
  f77ec26cc7291109df638f30fc5329d1  gcc/testsuite/gcc.c-torture/compile/20011217-1.c
--- 13276,13284 ----
  eebaa303251b603b5e12517aebb516eb  gcc/testsuite/gcc.c-torture/compile/20011114-2.c
  0cb21e10cef36c0127b0e6bc9a014858  gcc/testsuite/gcc.c-torture/compile/20011114-3.c
  ddfd40f73e53c84302c55f2b01659a9d  gcc/testsuite/gcc.c-torture/compile/20011114-4.c
! 1da07108b92e7f013658368695d99cbf  gcc/testsuite/gcc.c-torture/compile/20011119-1.c
! 5b869472120a1eb48583bfb66da5c395  gcc/testsuite/gcc.c-torture/compile/20011119-2.c
! c77fc74e867dcbaf244e25c0527c1133  gcc/testsuite/gcc.c-torture/compile/20011130-1.c
  25d1b92ea196529699125132f4276af3  gcc/testsuite/gcc.c-torture/compile/20011130-2.c
  57121bfbb8fa116749b0090dd6f76eab  gcc/testsuite/gcc.c-torture/compile/20011205-1.c
  f77ec26cc7291109df638f30fc5329d1  gcc/testsuite/gcc.c-torture/compile/20011217-1.c
*************** a3c6367d399edb7ee7b57a792aa5c241  gcc/te
*** 12798,12805 ****
  647ca660bafd269675467b6ec1599c58  gcc/testsuite/gcc.c-torture/compile/20021119-1.c
  a7ac14fe75edc88d4246a0266034772b  gcc/testsuite/gcc.c-torture/compile/20021120-1.c
  46ed448e5d5cfd2d9e2dee698b493656  gcc/testsuite/gcc.c-torture/compile/20021120-2.c
- 000cb6210b264ef407f9e300acf4b493  gcc/testsuite/gcc.c-torture/compile/20021123-1.c
- 647ca660bafd269675467b6ec1599c58  gcc/testsuite/gcc.c-torture/compile/20021123-4.c
  294e10f3ab3ff6805015dde4cdd589be  gcc/testsuite/gcc.c-torture/compile/20021124-1.c
  54fa0def3f2efeaafbdf07ff0401d31a  gcc/testsuite/gcc.c-torture/compile/20021204-1.c
  4b4db7aea91b7b901ad15893780a235d  gcc/testsuite/gcc.c-torture/compile/20021205-1.c
--- 13340,13345 ----
*************** c30f1cac9cc5f1765ffbbed5a74d7609  gcc/te
*** 12814,12831 ****
  14a347277f72d1afe029475ad3e8f032  gcc/testsuite/gcc.c-torture/compile/20030220-1.c
  cc39a6e10ef28c72739bb697f7666011  gcc/testsuite/gcc.c-torture/compile/20030224-1.c
  602265393a5eef9bdf1d257df71173d9  gcc/testsuite/gcc.c-torture/compile/20030305-1.c
  a4174c863a6566eb8cb4be521a0ee3fb  gcc/testsuite/gcc.c-torture/compile/20030314-1.c
  04a8a9f37c8348589a3110b86c07ae26  gcc/testsuite/gcc.c-torture/compile/20030319-1.c
  71f5c8f878c4b3f998ae1a11448d0ecc  gcc/testsuite/gcc.c-torture/compile/20030320-1.c
  94d7088d3f5f8a2ae799c04f964efbfe  gcc/testsuite/gcc.c-torture/compile/20030323-1.c
  73bf3aed397c6b3c6218590a3f60d762  gcc/testsuite/gcc.c-torture/compile/20030330-1.c
  6948cd26b8e708cff8d37323f927fb52  gcc/testsuite/gcc.c-torture/compile/20030331-1.c
! 6ab0d927aa44fcf2fc7edc3dfada840c  gcc/testsuite/gcc.c-torture/compile/20030405-1.c
  c4fd77091527f2145295022bba574a5b  gcc/testsuite/gcc.c-torture/compile/20030410-1.c
  e60ee81e19d3fe57e3a4a4b1abd5ea23  gcc/testsuite/gcc.c-torture/compile/20030415-1.c
  c495a0c7eb3191ff180934c1d8d95672  gcc/testsuite/gcc.c-torture/compile/20030418-1.c
  a3df6261a4243fa97e37037673c87a69  gcc/testsuite/gcc.c-torture/compile/20030503-1.c
  3006b19667d1551ae936e3f6853acd20  gcc/testsuite/gcc.c-torture/compile/20030518-1.c
  a794d1ad4fd0e19f7034bbffaa303f61  gcc/testsuite/gcc.c-torture/compile/20030604-1.c
  a3d3898762bb8db0db0fd7318b6951a7  gcc/testsuite/gcc.c-torture/compile/20030605-1.c
  cd0033ae11cdb7921d19b320cf2708ca  gcc/testsuite/gcc.c-torture/compile/20030612-1.c
--- 13354,13376 ----
  14a347277f72d1afe029475ad3e8f032  gcc/testsuite/gcc.c-torture/compile/20030220-1.c
  cc39a6e10ef28c72739bb697f7666011  gcc/testsuite/gcc.c-torture/compile/20030224-1.c
  602265393a5eef9bdf1d257df71173d9  gcc/testsuite/gcc.c-torture/compile/20030305-1.c
+ 074f41310e1519169fe94916aedb4285  gcc/testsuite/gcc.c-torture/compile/20030310-1.c
  a4174c863a6566eb8cb4be521a0ee3fb  gcc/testsuite/gcc.c-torture/compile/20030314-1.c
  04a8a9f37c8348589a3110b86c07ae26  gcc/testsuite/gcc.c-torture/compile/20030319-1.c
  71f5c8f878c4b3f998ae1a11448d0ecc  gcc/testsuite/gcc.c-torture/compile/20030320-1.c
  94d7088d3f5f8a2ae799c04f964efbfe  gcc/testsuite/gcc.c-torture/compile/20030323-1.c
  73bf3aed397c6b3c6218590a3f60d762  gcc/testsuite/gcc.c-torture/compile/20030330-1.c
  6948cd26b8e708cff8d37323f927fb52  gcc/testsuite/gcc.c-torture/compile/20030331-1.c
! 36c33242c3e649582b3ffeb9ac506d48  gcc/testsuite/gcc.c-torture/compile/20030405-1.c
! 33f21afd9e643f5cea42f40965514cf3  gcc/testsuite/gcc.c-torture/compile/20030405-1.x
  c4fd77091527f2145295022bba574a5b  gcc/testsuite/gcc.c-torture/compile/20030410-1.c
  e60ee81e19d3fe57e3a4a4b1abd5ea23  gcc/testsuite/gcc.c-torture/compile/20030415-1.c
+ 4de5a5a4ec4c579a1da05a0040fa348f  gcc/testsuite/gcc.c-torture/compile/20030416-1.c
  c495a0c7eb3191ff180934c1d8d95672  gcc/testsuite/gcc.c-torture/compile/20030418-1.c
  a3df6261a4243fa97e37037673c87a69  gcc/testsuite/gcc.c-torture/compile/20030503-1.c
  3006b19667d1551ae936e3f6853acd20  gcc/testsuite/gcc.c-torture/compile/20030518-1.c
+ 9bed98e71f7cb889993dd7035aefb342  gcc/testsuite/gcc.c-torture/compile/20030530-1.c
+ e8604119e75439397851385c9469e73c  gcc/testsuite/gcc.c-torture/compile/20030530-3.c
  a794d1ad4fd0e19f7034bbffaa303f61  gcc/testsuite/gcc.c-torture/compile/20030604-1.c
  a3d3898762bb8db0db0fd7318b6951a7  gcc/testsuite/gcc.c-torture/compile/20030605-1.c
  cd0033ae11cdb7921d19b320cf2708ca  gcc/testsuite/gcc.c-torture/compile/20030612-1.c
*************** cd0033ae11cdb7921d19b320cf2708ca  gcc/te
*** 12834,12845 ****
--- 13379,13395 ----
  13596072d21818fcc0be9525053d46fb  gcc/testsuite/gcc.c-torture/compile/20030704-1.c
  ab9d3b99a08a9730e4d6760ef12bc358  gcc/testsuite/gcc.c-torture/compile/20030707-1.c
  11748a73273dfbb64dacbbef06a7fb12  gcc/testsuite/gcc.c-torture/compile/20030708-1.c
+ 293a7713e4f24b966e1a947f852cf430  gcc/testsuite/gcc.c-torture/compile/20030716-1.c
  cc4c6d7c9992ef86ac1144d3d9e56a2a  gcc/testsuite/gcc.c-torture/compile/20030725-1.c
  07135b756bbafbfacb08f18f22514ae0  gcc/testsuite/gcc.c-torture/compile/20030804-1.c
  529647f2b58e4c5e378ba1649c981e1a  gcc/testsuite/gcc.c-torture/compile/20030821-1.c
+ 56cd1622549b30c1c5d2ffcf3f1b0903  gcc/testsuite/gcc.c-torture/compile/20030823-1.c
+ bc29f13369e86949783fdc2ad2118811  gcc/testsuite/gcc.c-torture/compile/20030902-1.c
  28d74194e6cc90944730696a9c77b9b5  gcc/testsuite/gcc.c-torture/compile/20030903-1.c
  a94f6d3730628fc4fb440c5b38a13853  gcc/testsuite/gcc.c-torture/compile/20030904-1.c
  5d819584ba108dd4751d09e433068a7e  gcc/testsuite/gcc.c-torture/compile/20030907-1.c
+ d305547c1876902a5d54e8c76a048898  gcc/testsuite/gcc.c-torture/compile/20030910-1.c
+ e03b11842bc48e479e3d356df45f9038  gcc/testsuite/gcc.c-torture/compile/20030917-1.c
  1f716017d9ac4566b8e9927b8722814c  gcc/testsuite/gcc.c-torture/compile/20030921-1.c
  6e501772d901722ff538403a200897b0  gcc/testsuite/gcc.c-torture/compile/20031002-1.c
  0fec6ad5b25400ece3adaa7d51087aaa  gcc/testsuite/gcc.c-torture/compile/20031010-1.c
*************** a4a382d70401f0c1bbee8a77a1ca3751  gcc/te
*** 12854,12859 ****
--- 13404,13415 ----
  7555cb83636089e1282702e125ffb3ad  gcc/testsuite/gcc.c-torture/compile/20031102-1.c
  f2b4ccb2fc338aec4798a7ca46058c39  gcc/testsuite/gcc.c-torture/compile/20031112-1.c
  882c73c94b950d3efe0275d8927c7a9a  gcc/testsuite/gcc.c-torture/compile/20031113-1.c
+ cd26ecc749a47a69a39b7243342c3b66  gcc/testsuite/gcc.c-torture/compile/20031124-1.c
+ c6571ea7443da45dd9412bb3513aefd1  gcc/testsuite/gcc.c-torture/compile/20031125-1.c
+ 70ee8b4c347af8a8d3b55ace322f6ab1  gcc/testsuite/gcc.c-torture/compile/20031125-2.c
+ 6eb397ade69a4a7e52ca55fe2f4d2d70  gcc/testsuite/gcc.c-torture/compile/20031203-1.c
+ c94405f40b5ec5540fdaeb6729bc596e  gcc/testsuite/gcc.c-torture/compile/20031203-2.c
+ 225603b40c6e1095a5b7d4d93b9b87ff  gcc/testsuite/gcc.c-torture/compile/20031203-3.c
  93355fd661205acca0769498cfbd5f4d  gcc/testsuite/gcc.c-torture/compile/20031208-1.c
  9a7d1ce5d9eba8220a5455a3794c6e21  gcc/testsuite/gcc.c-torture/compile/20031220-1.c
  a01b457981b538b12cd285508a5e31f4  gcc/testsuite/gcc.c-torture/compile/20031220-2.c
*************** a01b457981b538b12cd285508a5e31f4  gcc/te
*** 12862,12879 ****
  4eef1205743e39c091b59f48c9dbb597  gcc/testsuite/gcc.c-torture/compile/20040101-1.c
  3801d49095f991ff69e59aa1c446e3c0  gcc/testsuite/gcc.c-torture/compile/20040109-1.c
  9f5db9267447850a1f5e74ffa5ecce8f  gcc/testsuite/gcc.c-torture/compile/20040121-1.c
! e871ab88d8631a3332ef51c6cc18d327  gcc/testsuite/gcc.c-torture/compile/20040130-1.c
  c783a4af3f2b6435cbc085881df31670  gcc/testsuite/gcc.c-torture/compile/20040209-1.c
  2007e088b687d647ae32990ead820391  gcc/testsuite/gcc.c-torture/compile/20040214-1.c
  dd14cd7290887c4bcd0fcc90ee4c855d  gcc/testsuite/gcc.c-torture/compile/20040214-2.c
! 4649fd5630e4b0a4c70d02c348037298  gcc/testsuite/gcc.c-torture/compile/20040304-1.c
! eed182bf0a5420cc760e8b9e2cbf2ed8  gcc/testsuite/gcc.c-torture/compile/20040531-1.c
  607929e32401a9b0b0fc0340d5d8fc55  gcc/testsuite/gcc.c-torture/compile/20040602-1.c
  b710c77ba866bb2d0c9e2ab046eb3945  gcc/testsuite/gcc.c-torture/compile/20040705-1.c
  faf81e645a44ed239db62a33068a7e18  gcc/testsuite/gcc.c-torture/compile/20040708-1.c
  7c58de04392c2d766b6ded98beae2039  gcc/testsuite/gcc.c-torture/compile/20040726-1.c
  a7bce681b208ff9ded92c34487e36e06  gcc/testsuite/gcc.c-torture/compile/20041007-1.c
  b5bd15b275391684a4cfa933f414e54a  gcc/testsuite/gcc.c-torture/compile/20041018-1.c
  ab32e65ea5976f9083dc8234dae65343  gcc/testsuite/gcc.c-torture/compile/900116-1.c
  19f66edc69de3cb6b5ca746e4dc7d9b5  gcc/testsuite/gcc.c-torture/compile/900216-1.c
  9c85c5a027876d1435b0499666da5dd8  gcc/testsuite/gcc.c-torture/compile/900313-1.c
--- 13418,13484 ----
  4eef1205743e39c091b59f48c9dbb597  gcc/testsuite/gcc.c-torture/compile/20040101-1.c
  3801d49095f991ff69e59aa1c446e3c0  gcc/testsuite/gcc.c-torture/compile/20040109-1.c
  9f5db9267447850a1f5e74ffa5ecce8f  gcc/testsuite/gcc.c-torture/compile/20040121-1.c
! dadfac33b9e7b9d514da2c1ccfdabb2b  gcc/testsuite/gcc.c-torture/compile/20040124-1.c
! 8839aa6fe44ef2bb86da73c897cfdac5  gcc/testsuite/gcc.c-torture/compile/20040130-1.c
! 953cb1c8d3976e4726412911fcef7e4f  gcc/testsuite/gcc.c-torture/compile/20040202-1.c
  c783a4af3f2b6435cbc085881df31670  gcc/testsuite/gcc.c-torture/compile/20040209-1.c
  2007e088b687d647ae32990ead820391  gcc/testsuite/gcc.c-torture/compile/20040214-1.c
  dd14cd7290887c4bcd0fcc90ee4c855d  gcc/testsuite/gcc.c-torture/compile/20040214-2.c
! 4844394352db1681059dbadd54ce2854  gcc/testsuite/gcc.c-torture/compile/20040216-1.c
! 5b70c083e89d32d775bc626e4f095e19  gcc/testsuite/gcc.c-torture/compile/20040219-1.c
! 8191d898bc37c912367b8eb0cd2f4ed7  gcc/testsuite/gcc.c-torture/compile/20040220-1.c
! 2d5941b36334df2b864ed79bae041a59  gcc/testsuite/gcc.c-torture/compile/20040303-1.c
! 311d1a38be397120a5d70598406b2391  gcc/testsuite/gcc.c-torture/compile/20040303-2.c
! d01d13e580ce843d84477175e781c25a  gcc/testsuite/gcc.c-torture/compile/20040304-1.c
! 529bf74dd8bb764a7ae17c7f8b8e2243  gcc/testsuite/gcc.c-torture/compile/20040309-1.c
! 84d42595b81c8ad79b1bc744b20b3874  gcc/testsuite/gcc.c-torture/compile/20040310-1.c
! fd64b182c5da4d9893626a607ed57ab3  gcc/testsuite/gcc.c-torture/compile/20040317-1.c
! cc4e9eea70736a733950c5b2c41cde76  gcc/testsuite/gcc.c-torture/compile/20040317-2.c
! e425f7d8deb0416b6dd9f9800ad112c6  gcc/testsuite/gcc.c-torture/compile/20040317-3.c
! 3b5643ca0aa010dfd28f5d8b99cd2d68  gcc/testsuite/gcc.c-torture/compile/20040323-1.c
! 163ac8acda689a0d6b0ec474278495d8  gcc/testsuite/gcc.c-torture/compile/20040401-1.c
! 87df3c585b6257ed285860a84f4c3633  gcc/testsuite/gcc.c-torture/compile/20040415-1.c
! 3d1a972e50cef92559f53c1b0e972596  gcc/testsuite/gcc.c-torture/compile/20040415-2.c
! 88586561ddcd77f6b4476bc12eac96ed  gcc/testsuite/gcc.c-torture/compile/20040419-1.c
  607929e32401a9b0b0fc0340d5d8fc55  gcc/testsuite/gcc.c-torture/compile/20040602-1.c
+ 8a595605be42bd945c31eb9b39222cc9  gcc/testsuite/gcc.c-torture/compile/20040610-1.c
+ 1b21a3137e71337577f57d480ced7a9c  gcc/testsuite/gcc.c-torture/compile/20040611-1.c
+ 35fd2c1e1e9b10844882b4e8bcc84ca0  gcc/testsuite/gcc.c-torture/compile/20040614-1.c
+ 4c0bd615a8cbb0b4c677f623446fbf27  gcc/testsuite/gcc.c-torture/compile/20040621-1.c
+ 21f6f62a0d5c69f3c7281b15dd1a3fed  gcc/testsuite/gcc.c-torture/compile/20040624-1.c
  b710c77ba866bb2d0c9e2ab046eb3945  gcc/testsuite/gcc.c-torture/compile/20040705-1.c
  faf81e645a44ed239db62a33068a7e18  gcc/testsuite/gcc.c-torture/compile/20040708-1.c
+ 0fc0b4fabadbb6a924f2125e48edf39f  gcc/testsuite/gcc.c-torture/compile/20040709-1.c
  7c58de04392c2d766b6ded98beae2039  gcc/testsuite/gcc.c-torture/compile/20040726-1.c
+ c571f9cae895efd692d23db91faec915  gcc/testsuite/gcc.c-torture/compile/20040726-2.c
+ 622e4a774720a1ba21070658c6a65e90  gcc/testsuite/gcc.c-torture/compile/20040727-1.c
+ 8f627169d91237dfeadb87401dca4990  gcc/testsuite/gcc.c-torture/compile/20040730-1.c
+ 01550434cb52e37a72c3e61b079e9826  gcc/testsuite/gcc.c-torture/compile/20040817-1.c
+ 8bcfaecd4ce9687b60ce24eca3edf725  gcc/testsuite/gcc.c-torture/compile/20040824-1.c
+ bc7587eab94309ed114c93a7250d2f94  gcc/testsuite/gcc.c-torture/compile/20040901-1.c
+ 4e29a31b89074374ccab1f12f1051989  gcc/testsuite/gcc.c-torture/compile/20040907-1.c
+ a1585ebaa0c0592a4d407ea1550a4764  gcc/testsuite/gcc.c-torture/compile/20040908-1.c
+ 8b97269922e6652c33409374427f618c  gcc/testsuite/gcc.c-torture/compile/20040909-1.c
+ 126e29e8a1548e89022784a1e6b57c32  gcc/testsuite/gcc.c-torture/compile/20040914-1.c
+ 8152c9cdb5967d9a5bbbf0c557636ad1  gcc/testsuite/gcc.c-torture/compile/20040916-1.c
+ e6b7153ebff4c79ffb86710d46b62613  gcc/testsuite/gcc.c-torture/compile/20041005-1.c
  a7bce681b208ff9ded92c34487e36e06  gcc/testsuite/gcc.c-torture/compile/20041007-1.c
  b5bd15b275391684a4cfa933f414e54a  gcc/testsuite/gcc.c-torture/compile/20041018-1.c
+ f7267d866e2c9994d6790ee48c297305  gcc/testsuite/gcc.c-torture/compile/20041026-1.c
+ c6449a8923abf15931148da535a307e5  gcc/testsuite/gcc.c-torture/compile/20041119-1.c
+ a65ce16daad930d2b2cb353a1b698c99  gcc/testsuite/gcc.c-torture/compile/20041211-1.c
+ 3ba7d89e5d94393d65afef34e6a8d19b  gcc/testsuite/gcc.c-torture/compile/20050105-1.c
+ 8e2d936b757c204110f8779a96c5e5ca  gcc/testsuite/gcc.c-torture/compile/20050113-1.c
+ d071b846a7b8e965e0599e525e8f58d0  gcc/testsuite/gcc.c-torture/compile/20050119-1.c
+ 1a067851d5b95cb9a8c742a85c3d0ed5  gcc/testsuite/gcc.c-torture/compile/20050122-1.c
+ e930f1e5748ef7592c280bc21148fa0a  gcc/testsuite/gcc.c-torture/compile/20050122-2.c
+ af80361df0a392139763b0db9136ab08  gcc/testsuite/gcc.c-torture/compile/20050202-1.c
+ da3c90ffe7566a5a1232dea877836509  gcc/testsuite/gcc.c-torture/compile/20050206-1.c
+ b57e3d3b479da247bbddb9d2df006db1  gcc/testsuite/gcc.c-torture/compile/20050210-1.c
+ e3da063bfb4d7a5e94be05aa622a23a8  gcc/testsuite/gcc.c-torture/compile/20050215-1.c
+ b171d9c25748de6c8f2491b9b133c6ed  gcc/testsuite/gcc.c-torture/compile/20050215-2.c
+ 91b967c4ee477fdb5040abdd2f189c07  gcc/testsuite/gcc.c-torture/compile/20050215-3.c
+ e8311784a21a4158ac10607871140455  gcc/testsuite/gcc.c-torture/compile/20050217-1.c
  ab32e65ea5976f9083dc8234dae65343  gcc/testsuite/gcc.c-torture/compile/900116-1.c
  19f66edc69de3cb6b5ca746e4dc7d9b5  gcc/testsuite/gcc.c-torture/compile/900216-1.c
  9c85c5a027876d1435b0499666da5dd8  gcc/testsuite/gcc.c-torture/compile/900313-1.c
*************** fbb0365bd4a5e1e85b901d387d74d038  gcc/te
*** 12928,12934 ****
  4491ec801676296103d18319456215d6  gcc/testsuite/gcc.c-torture/compile/920623-1.c
  2e8ffb1336c47a3b4e032a1d92985ae7  gcc/testsuite/gcc.c-torture/compile/920624-1.c
  e546959a6dbe165dbea7f68ef5707b8c  gcc/testsuite/gcc.c-torture/compile/920625-1.c
! d5bfd5defa2affce126d809991f1aea8  gcc/testsuite/gcc.c-torture/compile/920625-2.c
  0b85ce2389ae44cbd2156d91559d6ad3  gcc/testsuite/gcc.c-torture/compile/920626-1.c
  8bf5bbaec2abf711b620b212bbb252c6  gcc/testsuite/gcc.c-torture/compile/920701-1.c
  d5a819c893100ddb0e855fc74d121532  gcc/testsuite/gcc.c-torture/compile/920702-1.c
--- 13533,13539 ----
  4491ec801676296103d18319456215d6  gcc/testsuite/gcc.c-torture/compile/920623-1.c
  2e8ffb1336c47a3b4e032a1d92985ae7  gcc/testsuite/gcc.c-torture/compile/920624-1.c
  e546959a6dbe165dbea7f68ef5707b8c  gcc/testsuite/gcc.c-torture/compile/920625-1.c
! e3ec1dd5f2ab32b79cbb5b9364dc652d  gcc/testsuite/gcc.c-torture/compile/920625-2.c
  0b85ce2389ae44cbd2156d91559d6ad3  gcc/testsuite/gcc.c-torture/compile/920626-1.c
  8bf5bbaec2abf711b620b212bbb252c6  gcc/testsuite/gcc.c-torture/compile/920701-1.c
  d5a819c893100ddb0e855fc74d121532  gcc/testsuite/gcc.c-torture/compile/920702-1.c
*************** be99debbefa9212fbe28213c3639b701  gcc/te
*** 13081,13087 ****
  f3c9403d1cdf680a65b6f244593a2905  gcc/testsuite/gcc.c-torture/compile/961019-1.c
  7a218232480746aa0d40c4d0c84c0d87  gcc/testsuite/gcc.c-torture/compile/961031-1.c
  90a0fa161c3ee2ed7c2a33295e9b72e4  gcc/testsuite/gcc.c-torture/compile/961126-1.c
! 6a2837a3b2b070a4f841acc941f2e9bb  gcc/testsuite/gcc.c-torture/compile/961203-1.c
  adc4179398474fd9c1893c3104cf11aa  gcc/testsuite/gcc.c-torture/compile/970206-1.c
  15e9ddca3bd86005bd150a54a4449592  gcc/testsuite/gcc.c-torture/compile/970214-1.c
  6e765adbfef28c43ff9c511ae8a55ce6  gcc/testsuite/gcc.c-torture/compile/980329-1.c
--- 13686,13692 ----
  f3c9403d1cdf680a65b6f244593a2905  gcc/testsuite/gcc.c-torture/compile/961019-1.c
  7a218232480746aa0d40c4d0c84c0d87  gcc/testsuite/gcc.c-torture/compile/961031-1.c
  90a0fa161c3ee2ed7c2a33295e9b72e4  gcc/testsuite/gcc.c-torture/compile/961126-1.c
! 9a6005e07c32e6f581a6239c0b224f97  gcc/testsuite/gcc.c-torture/compile/961203-1.c
  adc4179398474fd9c1893c3104cf11aa  gcc/testsuite/gcc.c-torture/compile/970206-1.c
  15e9ddca3bd86005bd150a54a4449592  gcc/testsuite/gcc.c-torture/compile/970214-1.c
  6e765adbfef28c43ff9c511ae8a55ce6  gcc/testsuite/gcc.c-torture/compile/980329-1.c
*************** c07668154d28f6a33e69eae7511d4eb7  gcc/te
*** 13098,13109 ****
  627015550977fdb4f4c9e07197b22283  gcc/testsuite/gcc.c-torture/compile/980821-1.c
  7b21893e563c88bc6e33f5b44871f088  gcc/testsuite/gcc.c-torture/compile/980825-1.c
  fa2a9c7863fe2538782a916766ce16f0  gcc/testsuite/gcc.c-torture/compile/981001-1.c
! 99ccdb54668346440ef2ea32bf00f561  gcc/testsuite/gcc.c-torture/compile/981001-2.c
  c0ac477ec4713faf1b3839f0a0d61de1  gcc/testsuite/gcc.c-torture/compile/981001-3.c
  4a405eb381079e1b3ca5f7e5cb1f6084  gcc/testsuite/gcc.c-torture/compile/981001-4.c
  e902809dc8538b612fca032e6009ca52  gcc/testsuite/gcc.c-torture/compile/981006-1.c
  518a8ab9eaa98187f9e9a6f42cb936d9  gcc/testsuite/gcc.c-torture/compile/981007-1.c
- 3fa30ef99795cb0db8d71f9d402b9542  gcc/testsuite/gcc.c-torture/compile/981022-1.c
  ef01abdcbd332cdad2da9fa12056088f  gcc/testsuite/gcc.c-torture/compile/981107-1.c
  20d61809dcf0b862f8707c012933e53d  gcc/testsuite/gcc.c-torture/compile/981223-1.c
  645bf77d371b2940e330f469398f556f  gcc/testsuite/gcc.c-torture/compile/990107-1.c
--- 13703,13713 ----
  627015550977fdb4f4c9e07197b22283  gcc/testsuite/gcc.c-torture/compile/980821-1.c
  7b21893e563c88bc6e33f5b44871f088  gcc/testsuite/gcc.c-torture/compile/980825-1.c
  fa2a9c7863fe2538782a916766ce16f0  gcc/testsuite/gcc.c-torture/compile/981001-1.c
! 230fe09b43c6b38e7eaca461f8c60a0a  gcc/testsuite/gcc.c-torture/compile/981001-2.c
  c0ac477ec4713faf1b3839f0a0d61de1  gcc/testsuite/gcc.c-torture/compile/981001-3.c
  4a405eb381079e1b3ca5f7e5cb1f6084  gcc/testsuite/gcc.c-torture/compile/981001-4.c
  e902809dc8538b612fca032e6009ca52  gcc/testsuite/gcc.c-torture/compile/981006-1.c
  518a8ab9eaa98187f9e9a6f42cb936d9  gcc/testsuite/gcc.c-torture/compile/981007-1.c
  ef01abdcbd332cdad2da9fa12056088f  gcc/testsuite/gcc.c-torture/compile/981107-1.c
  20d61809dcf0b862f8707c012933e53d  gcc/testsuite/gcc.c-torture/compile/981223-1.c
  645bf77d371b2940e330f469398f556f  gcc/testsuite/gcc.c-torture/compile/990107-1.c
*************** f99fdfbaee2a48efe9bcefc56a39920a  gcc/te
*** 13135,13140 ****
--- 13739,13745 ----
  50c6e1dbaf3a5fc32d750e605e86e1d9  gcc/testsuite/gcc.c-torture/compile/991229-1.c
  6acbba8bbbcd6480232d4949dde69510  gcc/testsuite/gcc.c-torture/compile/991229-2.c
  fb4852342b5ce5f1c204522127ef6dec  gcc/testsuite/gcc.c-torture/compile/991229-3.c
+ e723553c4fbcebcf6413a00d68497e7d  gcc/testsuite/gcc.c-torture/compile/acc1.c
  17d58d0701bf8851c987840329edeb5c  gcc/testsuite/gcc.c-torture/compile/calls.c
  f5766202f628b43d0fac0910adc0eecb  gcc/testsuite/gcc.c-torture/compile/cmpdi-1.c
  646c27d881cf11bdfb63a423ffd3b604  gcc/testsuite/gcc.c-torture/compile/combine-hang.c
*************** a87e64aae03ac41e010753e916d8ee6d  gcc/te
*** 13143,13154 ****
  61451e07c954124f79273c9995d501cf  gcc/testsuite/gcc.c-torture/compile/cpp-1.c
  a4388070dfa15cbd678485953a9d6165  gcc/testsuite/gcc.c-torture/compile/cpp-2.c
  2dc63e26397ae576b22f03b6268e2db4  gcc/testsuite/gcc.c-torture/compile/dll.c
- 75ad6b1389cac1cd064dc9d575975fa4  gcc/testsuite/gcc.c-torture/compile/dll.x
  3e54676890789c1d8f48befac375030e  gcc/testsuite/gcc.c-torture/compile/fix-trunc-mem-1.c
  910ec6cdd9ef1877a8f857fb6a0d8076  gcc/testsuite/gcc.c-torture/compile/funcptr-1.c
  78da75b4922a8e04dca9b66779482a1f  gcc/testsuite/gcc.c-torture/compile/goto-1.c
  a3e8726e64979546c220bae5d0815be1  gcc/testsuite/gcc.c-torture/compile/iftrap-1.c
  377cbb2cfb8ba9c774664834ff124732  gcc/testsuite/gcc.c-torture/compile/iftrap-2.c
  3264c9a18f4664e9ccc409c48efe379c  gcc/testsuite/gcc.c-torture/compile/init-1.c
  5f2bc2b16008b297dbe17bc6e4ecbb5f  gcc/testsuite/gcc.c-torture/compile/init-2.c
  c41d7ceafdae826adfcc9513ad5122d6  gcc/testsuite/gcc.c-torture/compile/init-3.c
--- 13748,13759 ----
  61451e07c954124f79273c9995d501cf  gcc/testsuite/gcc.c-torture/compile/cpp-1.c
  a4388070dfa15cbd678485953a9d6165  gcc/testsuite/gcc.c-torture/compile/cpp-2.c
  2dc63e26397ae576b22f03b6268e2db4  gcc/testsuite/gcc.c-torture/compile/dll.c
  3e54676890789c1d8f48befac375030e  gcc/testsuite/gcc.c-torture/compile/fix-trunc-mem-1.c
  910ec6cdd9ef1877a8f857fb6a0d8076  gcc/testsuite/gcc.c-torture/compile/funcptr-1.c
  78da75b4922a8e04dca9b66779482a1f  gcc/testsuite/gcc.c-torture/compile/goto-1.c
  a3e8726e64979546c220bae5d0815be1  gcc/testsuite/gcc.c-torture/compile/iftrap-1.c
  377cbb2cfb8ba9c774664834ff124732  gcc/testsuite/gcc.c-torture/compile/iftrap-2.c
+ 6c63b6a4bc097369f09c4c92d1f1cf68  gcc/testsuite/gcc.c-torture/compile/iftrap-3.c
  3264c9a18f4664e9ccc409c48efe379c  gcc/testsuite/gcc.c-torture/compile/init-1.c
  5f2bc2b16008b297dbe17bc6e4ecbb5f  gcc/testsuite/gcc.c-torture/compile/init-2.c
  c41d7ceafdae826adfcc9513ad5122d6  gcc/testsuite/gcc.c-torture/compile/init-3.c
*************** f40c6f7bd73f37a2260b985ee6e8115c  gcc/te
*** 13162,13178 ****
  d1bc127695a19fe12bb78c52f7e0242d  gcc/testsuite/gcc.c-torture/compile/mipscop-2.c
  34dc99d674bf19b2595b2c4519cfed6b  gcc/testsuite/gcc.c-torture/compile/mipscop-3.c
  f3b3d48a1db9912931db52d683a87f6f  gcc/testsuite/gcc.c-torture/compile/mipscop-4.c
  e718d4157d90cf3f8d7bd118d0f100e0  gcc/testsuite/gcc.c-torture/compile/packed-1.c
  c0936e21d89cc7c88d88ba8f8d0d256e  gcc/testsuite/gcc.c-torture/compile/pr13889.c
  910c7d316034c03fbbe4ac8b9b0d8e36  gcc/testsuite/gcc.c-torture/compile/pr16566-1.c
  bd8d959a2c47c4c6a9958c73bee41be0  gcc/testsuite/gcc.c-torture/compile/pr16566-2.c
  c26a1a26e168c4a347da48f6a832b074  gcc/testsuite/gcc.c-torture/compile/pr16566-3.c
! 9b56bc660db2ff060496370e1b552e59  gcc/testsuite/gcc.c-torture/compile/simd-1.c
! 513ab9aa4706288337971638508bce00  gcc/testsuite/gcc.c-torture/compile/simd-2.c
! db0aa21579c1dfd4b71aab4d03c687b6  gcc/testsuite/gcc.c-torture/compile/simd-3.c
! ca53daafff335a5b58e9132f624b6eff  gcc/testsuite/gcc.c-torture/compile/simd-4.c
! b9c92c3c60f7180fcb6b7402e79f8e5e  gcc/testsuite/gcc.c-torture/compile/simd-5.c
! 3658010c29d9e31dc73545d35a427376  gcc/testsuite/gcc.c-torture/compile/simd-6.c
  af8cea0e5ca646832d01250c1bd04f16  gcc/testsuite/gcc.c-torture/compile/structs.c
  4302abbf3d54b15c2bf82ee3a5edb560  gcc/testsuite/gcc.c-torture/compile/trunctfdf.c
  1ef9d72af9160ad2a24b200fee9a616c  gcc/testsuite/gcc.c-torture/compile/widechar-1.c
--- 13767,13816 ----
  d1bc127695a19fe12bb78c52f7e0242d  gcc/testsuite/gcc.c-torture/compile/mipscop-2.c
  34dc99d674bf19b2595b2c4519cfed6b  gcc/testsuite/gcc.c-torture/compile/mipscop-3.c
  f3b3d48a1db9912931db52d683a87f6f  gcc/testsuite/gcc.c-torture/compile/mipscop-4.c
+ 68b74b4c589fbd82b11222546c0f445f  gcc/testsuite/gcc.c-torture/compile/nested-1.c
  e718d4157d90cf3f8d7bd118d0f100e0  gcc/testsuite/gcc.c-torture/compile/packed-1.c
+ 33c7141fcf5b1add3ddd2be0100f1f0d  gcc/testsuite/gcc.c-torture/compile/pr12517.c
+ ec16b12ab11c499bf321be18ea59da33  gcc/testsuite/gcc.c-torture/compile/pr12578.c
+ 86f3d5cf87d24e97aa663b79f2d0ac5d  gcc/testsuite/gcc.c-torture/compile/pr12899.c
+ 313f6ef65060506dfdf8ff0552bcf22a  gcc/testsuite/gcc.c-torture/compile/pr13066-1.c
  c0936e21d89cc7c88d88ba8f8d0d256e  gcc/testsuite/gcc.c-torture/compile/pr13889.c
+ 477c887bfb73d0754ececf044fb9fbc7  gcc/testsuite/gcc.c-torture/compile/pr14692.c
+ 44367927d5c234a7d30ed3f4b5642a8f  gcc/testsuite/gcc.c-torture/compile/pr14730.c
+ 498412a2fc22aa1f8708925def4d1abf  gcc/testsuite/gcc.c-torture/compile/pr15245.c
+ bc9302b244bd78725184f632efe23cc9  gcc/testsuite/gcc.c-torture/compile/pr16461.c
  910c7d316034c03fbbe4ac8b9b0d8e36  gcc/testsuite/gcc.c-torture/compile/pr16566-1.c
  bd8d959a2c47c4c6a9958c73bee41be0  gcc/testsuite/gcc.c-torture/compile/pr16566-2.c
  c26a1a26e168c4a347da48f6a832b074  gcc/testsuite/gcc.c-torture/compile/pr16566-3.c
! 2c599088952b8e02e3867682a915ab48  gcc/testsuite/gcc.c-torture/compile/pr16808.c
! e6c3e93e373de841413ba3d98c007ded  gcc/testsuite/gcc.c-torture/compile/pr17119.c
! bf9f2dd1b8103e560516d22c57e90963  gcc/testsuite/gcc.c-torture/compile/pr17273.c
! 2885dec162e0b9c9ba65738db3d0d7ed  gcc/testsuite/gcc.c-torture/compile/pr17397.c
! 922eec36854cc0b0cae5adbd68b4fa1f  gcc/testsuite/gcc.c-torture/compile/pr17407.c
! 38c1ad7603bd2b4d9c24c3d5b285c52e  gcc/testsuite/gcc.c-torture/compile/pr17408.c
! 28eac5f57a069e485059b40ffe2a14bf  gcc/testsuite/gcc.c-torture/compile/pr17529.c
! 5949f21847bc35c7c3ce185c1f8792d6  gcc/testsuite/gcc.c-torture/compile/pr17558.c
! dabad41f6a964efb6e69e11ec99e2fe1  gcc/testsuite/gcc.c-torture/compile/pr17656.c
! 471570579c41a98753947fd49ca89ea0  gcc/testsuite/gcc.c-torture/compile/pr17906.c
! a006256fb385251816337c8b0552856d  gcc/testsuite/gcc.c-torture/compile/pr18291.c
! c326329b4c5f916450c39656200ac2e8  gcc/testsuite/gcc.c-torture/compile/pr18712.c
! fce9d3c914662e854ce4fd8d7ff46a81  gcc/testsuite/gcc.c-torture/compile/pr18903.c
! 82bf258119e71bcba319c27851d7eba2  gcc/testsuite/gcc.c-torture/compile/pr19080.c
! 286651cc31c341c53927f7c592612b8b  gcc/testsuite/gcc.c-torture/compile/pr19121.c
! 5288b3384781b61527cac7a14179984a  gcc/testsuite/gcc.c-torture/compile/pr19357.c
! 36b4ee0a6653dce9bfd02ba9d430a226  gcc/testsuite/gcc.c-torture/compile/pr19736.c
! a71feaa4722b34df679da9af8757c600  gcc/testsuite/gcc.c-torture/compile/pr19853.c
! ba92e8189244ad6fe8a63df6a001e369  gcc/testsuite/gcc.c-torture/compile/pr20203.c
! 0a636b1124788e802c29c90565543b70  gcc/testsuite/gcc.c-torture/compile/pr20412.c
! a6f4280d6386bbc00f0a6e414140c808  gcc/testsuite/gcc.c-torture/compile/pr20539-1.c
! 8d869e3426345f0cf8837c5eaafd43b5  gcc/testsuite/gcc.c-torture/compile/simd-1.c
! 7249a75cf6b955efed52b5ec5cee3a79  gcc/testsuite/gcc.c-torture/compile/simd-2.c
! 7eed2e35ab9050f77879918802879f19  gcc/testsuite/gcc.c-torture/compile/simd-3.c
! f1396a13185fb3a1a1f5cb14db6e38a7  gcc/testsuite/gcc.c-torture/compile/simd-4.c
! 59348de0a2589f83f684f0efa6a8cbd9  gcc/testsuite/gcc.c-torture/compile/simd-5.c
! 7333a5d4f20186b6a070649e729d6831  gcc/testsuite/gcc.c-torture/compile/simd-6.c
! f4772e6c906520190f7700ef4c4a9dd7  gcc/testsuite/gcc.c-torture/compile/struct-non-lval-1.c
! 40337004510b6e09c7e3abfbdce53cb9  gcc/testsuite/gcc.c-torture/compile/struct-non-lval-2.c
! be6e57b38137101675705c04949f38a6  gcc/testsuite/gcc.c-torture/compile/struct-non-lval-3.c
  af8cea0e5ca646832d01250c1bd04f16  gcc/testsuite/gcc.c-torture/compile/structs.c
  4302abbf3d54b15c2bf82ee3a5edb560  gcc/testsuite/gcc.c-torture/compile/trunctfdf.c
  1ef9d72af9160ad2a24b200fee9a616c  gcc/testsuite/gcc.c-torture/compile/widechar-1.c
*************** e7ec99feb0b91cc3fb500621e5f495d4  gcc/te
*** 13207,13213 ****
  01e06c4ebc3b55cdddbf337a39e957af  gcc/testsuite/gcc.c-torture/execute/20000519-2.c
  a1b9bea3ca4630f7ab839e5f1eaa83d1  gcc/testsuite/gcc.c-torture/execute/20000523-1.c
  10866d7d8a73bd72f7bc55f739a39f01  gcc/testsuite/gcc.c-torture/execute/20000528-1.c
! 0f91d95827ac064a60b2a6c3d8707bd8  gcc/testsuite/gcc.c-torture/execute/20000603-1.c
  989132c007055e84166591d1f8c72f4f  gcc/testsuite/gcc.c-torture/execute/20000605-1.c
  3443d4a5e40aa2bbb94575e5eeabe287  gcc/testsuite/gcc.c-torture/execute/20000605-2.c
  fdc979c6274783eeafedf96c4e5b60e0  gcc/testsuite/gcc.c-torture/execute/20000605-3.c
--- 13845,13851 ----
  01e06c4ebc3b55cdddbf337a39e957af  gcc/testsuite/gcc.c-torture/execute/20000519-2.c
  a1b9bea3ca4630f7ab839e5f1eaa83d1  gcc/testsuite/gcc.c-torture/execute/20000523-1.c
  10866d7d8a73bd72f7bc55f739a39f01  gcc/testsuite/gcc.c-torture/execute/20000528-1.c
! 0104efb8c02c627cc52a9a807747ebc2  gcc/testsuite/gcc.c-torture/execute/20000603-1.c
  989132c007055e84166591d1f8c72f4f  gcc/testsuite/gcc.c-torture/execute/20000605-1.c
  3443d4a5e40aa2bbb94575e5eeabe287  gcc/testsuite/gcc.c-torture/execute/20000605-2.c
  fdc979c6274783eeafedf96c4e5b60e0  gcc/testsuite/gcc.c-torture/execute/20000605-3.c
*************** d1bcd160eae8755642c913c80474e993  gcc/te
*** 13276,13282 ****
  66edac85dc40f361e98d26e0a4b7decd  gcc/testsuite/gcc.c-torture/execute/20010123-1.c
  04ea9fe369592dbf54fbc7e63050fe87  gcc/testsuite/gcc.c-torture/execute/20010124-1.c
  37fbdd895e0ee384ef6a868d4eb29286  gcc/testsuite/gcc.c-torture/execute/20010129-1.c
! 373587084e5ae433527f93bc5998175a  gcc/testsuite/gcc.c-torture/execute/20010129-1.x
  c18230536067cf8a9040e9ad73bf1e2c  gcc/testsuite/gcc.c-torture/execute/20010206-1.c
  a252d8ffbf9e34d0afde4a07412cdf9b  gcc/testsuite/gcc.c-torture/execute/20010209-1.c
  17644ab90711dd889ec01064cccfe876  gcc/testsuite/gcc.c-torture/execute/20010221-1.c
--- 13914,13920 ----
  66edac85dc40f361e98d26e0a4b7decd  gcc/testsuite/gcc.c-torture/execute/20010123-1.c
  04ea9fe369592dbf54fbc7e63050fe87  gcc/testsuite/gcc.c-torture/execute/20010124-1.c
  37fbdd895e0ee384ef6a868d4eb29286  gcc/testsuite/gcc.c-torture/execute/20010129-1.c
! 1ea9becb10edaa1d9192f12151a65ca8  gcc/testsuite/gcc.c-torture/execute/20010129-1.x
  c18230536067cf8a9040e9ad73bf1e2c  gcc/testsuite/gcc.c-torture/execute/20010206-1.c
  a252d8ffbf9e34d0afde4a07412cdf9b  gcc/testsuite/gcc.c-torture/execute/20010209-1.c
  17644ab90711dd889ec01064cccfe876  gcc/testsuite/gcc.c-torture/execute/20010221-1.c
*************** b3bdd9169ba636f4a23cefb08384bbeb  gcc/te
*** 13291,13297 ****
  27f83745feda3c9c0cbd0e09af32d8b4  gcc/testsuite/gcc.c-torture/execute/20010518-2.c
  d996361f004a8f33ed60fd523746bdfa  gcc/testsuite/gcc.c-torture/execute/20010520-1.c
  1d826ce37c35665179c9829167251636  gcc/testsuite/gcc.c-torture/execute/20010604-1.c
! 9a7fc9dda02bc3dd0b44761346bcbfdc  gcc/testsuite/gcc.c-torture/execute/20010605-1.c
  ee02c6d781ec229eeebb3c1a5f826bff  gcc/testsuite/gcc.c-torture/execute/20010605-2.c
  bc996514739e74e3354ec57d0bd073cb  gcc/testsuite/gcc.c-torture/execute/20010711-1.c
  7f4ea0a812a4de88b8ae52bfa28840c4  gcc/testsuite/gcc.c-torture/execute/20010717-1.c
--- 13929,13935 ----
  27f83745feda3c9c0cbd0e09af32d8b4  gcc/testsuite/gcc.c-torture/execute/20010518-2.c
  d996361f004a8f33ed60fd523746bdfa  gcc/testsuite/gcc.c-torture/execute/20010520-1.c
  1d826ce37c35665179c9829167251636  gcc/testsuite/gcc.c-torture/execute/20010604-1.c
! 5bc96e1e637a3d7b2220054d285affca  gcc/testsuite/gcc.c-torture/execute/20010605-1.c
  ee02c6d781ec229eeebb3c1a5f826bff  gcc/testsuite/gcc.c-torture/execute/20010605-2.c
  bc996514739e74e3354ec57d0bd073cb  gcc/testsuite/gcc.c-torture/execute/20010711-1.c
  7f4ea0a812a4de88b8ae52bfa28840c4  gcc/testsuite/gcc.c-torture/execute/20010717-1.c
*************** ac01481b3223714f91b9753c6d745c48  gcc/te
*** 13336,13342 ****
  66e8c543b2054f9ff6e2312d99db8f28  gcc/testsuite/gcc.c-torture/execute/20020225-2.c
  0ce68759a20e3e977e40045456e2e867  gcc/testsuite/gcc.c-torture/execute/20020226-1.c
  810cc3650a604edc5247a38eb343a22f  gcc/testsuite/gcc.c-torture/execute/20020227-1.c
- 24b7f25a5fcb314aa0c8fed15b21ed03  gcc/testsuite/gcc.c-torture/execute/20020227-1.x
  6faecc7da6371feeb4c6607cdede1549  gcc/testsuite/gcc.c-torture/execute/20020307-1.c
  61b7eb57b8d5aedb023846a69ab16e50  gcc/testsuite/gcc.c-torture/execute/20020314-1.c
  a455f61709435004a057458df1666c32  gcc/testsuite/gcc.c-torture/execute/20020320-1.c
--- 13974,13979 ----
*************** e987501a98035f846cca884465c2ce7d  gcc/te
*** 13366,13374 ****
  f3ef9da4e1a8513ac2b338a46a6644e6  gcc/testsuite/gcc.c-torture/execute/20020619-1.c
  08b5a9d396dcfb91b81b22edeb6cbe0a  gcc/testsuite/gcc.c-torture/execute/20020716-1.c
  75fc13ebd1574057e2708c6c3af7626a  gcc/testsuite/gcc.c-torture/execute/20020720-1.c
! 38064fbc7a8ba91bdec4775e779e07f2  gcc/testsuite/gcc.c-torture/execute/20020720-1.x
  804da6eb201128cfc26d3423d9836f70  gcc/testsuite/gcc.c-torture/execute/20020805-1.c
  a21900002ca05043979b4c3a89cf6462  gcc/testsuite/gcc.c-torture/execute/20020810-1.c
  5a45c24a3407ffcafe0cd58fffd2dbd6  gcc/testsuite/gcc.c-torture/execute/20020904-1.c
  848bcae737e68da4e9a65821626c8d8f  gcc/testsuite/gcc.c-torture/execute/20020911-1.c
  759321bf53717e65270a18e43c30eaf1  gcc/testsuite/gcc.c-torture/execute/20020916-1.c
--- 14003,14012 ----
  f3ef9da4e1a8513ac2b338a46a6644e6  gcc/testsuite/gcc.c-torture/execute/20020619-1.c
  08b5a9d396dcfb91b81b22edeb6cbe0a  gcc/testsuite/gcc.c-torture/execute/20020716-1.c
  75fc13ebd1574057e2708c6c3af7626a  gcc/testsuite/gcc.c-torture/execute/20020720-1.c
! 7273144e91c4518986637f579dda2f09  gcc/testsuite/gcc.c-torture/execute/20020720-1.x
  804da6eb201128cfc26d3423d9836f70  gcc/testsuite/gcc.c-torture/execute/20020805-1.c
  a21900002ca05043979b4c3a89cf6462  gcc/testsuite/gcc.c-torture/execute/20020810-1.c
+ 1d5072bcbd3eefad5ab33ed0e55ec897  gcc/testsuite/gcc.c-torture/execute/20020819-1.c
  5a45c24a3407ffcafe0cd58fffd2dbd6  gcc/testsuite/gcc.c-torture/execute/20020904-1.c
  848bcae737e68da4e9a65821626c8d8f  gcc/testsuite/gcc.c-torture/execute/20020911-1.c
  759321bf53717e65270a18e43c30eaf1  gcc/testsuite/gcc.c-torture/execute/20020916-1.c
*************** e6cdd500d62c42bcae64a5625a5e1a04  gcc/te
*** 13380,13385 ****
--- 14018,14024 ----
  1f56a935023b953f25032d746d70ca9a  gcc/testsuite/gcc.c-torture/execute/20021024-1.c
  01d1e2d202f08554fb694e3d6b439910  gcc/testsuite/gcc.c-torture/execute/20021024-1.x
  1160af4b3fdee19614fd317bca08d84a  gcc/testsuite/gcc.c-torture/execute/20021111-1.c
+ eda1cc1c96a6c2eed31a1e6306959968  gcc/testsuite/gcc.c-torture/execute/20021113-1.c
  e1dcbcd1dff4d92f896e0534c58fdb17  gcc/testsuite/gcc.c-torture/execute/20021118-1.c
  4cc2fea2537ca3a18ebd141144a8ec66  gcc/testsuite/gcc.c-torture/execute/20021118-2.c
  028286a64da857532691502377b59871  gcc/testsuite/gcc.c-torture/execute/20021118-3.c
*************** c9f050391fcbef96fd21f19afe8f65de  gcc/te
*** 13412,13418 ****
--- 14051,14060 ----
  87d700af034e2b25f76a93fb24d03555  gcc/testsuite/gcc.c-torture/execute/20030323-1.c
  33d96b807cd77f10d9422dd98749750f  gcc/testsuite/gcc.c-torture/execute/20030330-1.c
  a9c89fcb4cfd9da50aaea22609bfccf3  gcc/testsuite/gcc.c-torture/execute/20030401-1.c
+ c947268ee8cb938dd414bb12a9e643a7  gcc/testsuite/gcc.c-torture/execute/20030403-1.c
+ 4b3e166c631937d3e830826d946d3c8e  gcc/testsuite/gcc.c-torture/execute/20030404-1.c
  5bb983b13203168236d604b8b9a63d96  gcc/testsuite/gcc.c-torture/execute/20030408-1.c
+ c2c9da451e0b6b9e137b0fe283ac4834  gcc/testsuite/gcc.c-torture/execute/20030501-1.c
  7fe74a8d75aa88abfb050ecf961fb805  gcc/testsuite/gcc.c-torture/execute/20030606-1.c
  6e6c62a56db47bac30ea6d336496052b  gcc/testsuite/gcc.c-torture/execute/20030613-1.c
  131227f1fe8e52cd86b7a3ac8ea8f33f  gcc/testsuite/gcc.c-torture/execute/20030626-1.c
*************** b9c9e263d4826af2bdd8bb43ff57c005  gcc/te
*** 13423,13438 ****
--- 14065,14090 ----
  c9e6e83c42fda89ad40f269108f25f4e  gcc/testsuite/gcc.c-torture/execute/20030718-1.c
  378a4f4fbc192545a4ffacab900ef0eb  gcc/testsuite/gcc.c-torture/execute/20030811-1.c
  7af51ab6432260b08be01e25d41fde45  gcc/testsuite/gcc.c-torture/execute/20030821-1.c
+ 5ea1f7024bf8519dcf3be31fbae58db6  gcc/testsuite/gcc.c-torture/execute/20030828-1.c
+ af7944c7866aae21515a5f06750115be  gcc/testsuite/gcc.c-torture/execute/20030828-2.c
+ d4590a5db2192faeb099f071bf41b3c4  gcc/testsuite/gcc.c-torture/execute/20030903-1.c
+ 92c8210b82afec1bdbdc252d6491e3b3  gcc/testsuite/gcc.c-torture/execute/20030909-1.c
+ 486d6a4dedd15509dda03949ae9571f8  gcc/testsuite/gcc.c-torture/execute/20030910-1.c
+ 3deb3628e116d2d4a60a1dd6d3937e2d  gcc/testsuite/gcc.c-torture/execute/20030913-1.c
  1c39eb1b275208926435be01b339f5aa  gcc/testsuite/gcc.c-torture/execute/20030914-1.c
  87a026d2a4d39797e020c422e3a89e92  gcc/testsuite/gcc.c-torture/execute/20030914-2.c
+ d3b854d7140a0f549cccd517e0455b09  gcc/testsuite/gcc.c-torture/execute/20030916-1.c
  957ac496a085ef963a4d641eae099951  gcc/testsuite/gcc.c-torture/execute/20030920-1.c
  91996536f463c1c81c689f60bc4c68ee  gcc/testsuite/gcc.c-torture/execute/20030928-1.c
  90922bc1369cccc337da8d38e2c42221  gcc/testsuite/gcc.c-torture/execute/20031003-1.c
+ 6ce0588cdc163a99e8f1fa413dfa4ff3  gcc/testsuite/gcc.c-torture/execute/20031010-1.c
  658d7b3b078715acc0fd17343437d0c8  gcc/testsuite/gcc.c-torture/execute/20031011-1.c
  0ae50da032f091729fdb8ac6b6e4364c  gcc/testsuite/gcc.c-torture/execute/20031012-1.c
  7bcc1838a33631276a41e7803ef37416  gcc/testsuite/gcc.c-torture/execute/20031020-1.c
  4c03997312260fe380664d5e3af9860d  gcc/testsuite/gcc.c-torture/execute/20031201-1.c
  7123beb9da10b2836d6aa7b0bf261980  gcc/testsuite/gcc.c-torture/execute/20031204-1.c
+ 0ce8d612ba08491ba2d35096298229fc  gcc/testsuite/gcc.c-torture/execute/20031211-1.c
+ 3c162445735440cab8d3f9fe8e93d2f2  gcc/testsuite/gcc.c-torture/execute/20031211-2.c
  60c726f4af3d2ed139b4742a94557aa8  gcc/testsuite/gcc.c-torture/execute/20031214-1.c
  69b042144871b352104dd81ec8c9fc3e  gcc/testsuite/gcc.c-torture/execute/20031215-1.c
  1bfa072efe73cd1c9cb9c4b1b05dc50b  gcc/testsuite/gcc.c-torture/execute/20031216-1.c
*************** c9e6e83c42fda89ad40f269108f25f4e  gcc/te
*** 13440,13455 ****
  8fa43d2d623422a7935461986deb3619  gcc/testsuite/gcc.c-torture/execute/20040208-2.c
  0d7466b45846715690d8de1c00e1f08f  gcc/testsuite/gcc.c-torture/execute/20040208-2.x
  abc17abb932af1032219d68109132095  gcc/testsuite/gcc.c-torture/execute/20040218-1.c
  ff5bcc82e33dd09026b8aaf2d92a0930  gcc/testsuite/gcc.c-torture/execute/20040302-1.c
  aca6a486b3b9bdeb6c89786f5ece5fd1  gcc/testsuite/gcc.c-torture/execute/20040307-1.c
  5ce54217010bef24e3f3e1f75ba0d5b3  gcc/testsuite/gcc.c-torture/execute/20040308-1.c
  60f74a250af358450582e43f4cfa84e1  gcc/testsuite/gcc.c-torture/execute/20040313-1.c
! 808adada1948e2f9ffd8b38b5fe570e3  gcc/testsuite/gcc.c-torture/execute/20040331-1.c
! 5e2f808289696a4906d3820df61e520b  gcc/testsuite/gcc.c-torture/execute/20040401-1.c
  ce05ca87c3350a7ebc954c28bf98202a  gcc/testsuite/gcc.c-torture/execute/20040625-1.c
  727c0d5b054eb9a22b184561112078f2  gcc/testsuite/gcc.c-torture/execute/20040706-1.c
  14de9340f54e424f581fba266dcc93a8  gcc/testsuite/gcc.c-torture/execute/20040707-1.c
  695236bbd612182e45f7e5b53bd4ed87  gcc/testsuite/gcc.c-torture/execute/20040831-1.c
  65f01ac7346bd4d47ed9c1ca94ab74ff  gcc/testsuite/gcc.c-torture/execute/900409-1.c
  5aefab4daab0bd29ecf2a389f3c44f40  gcc/testsuite/gcc.c-torture/execute/920202-1.c
  655936aaf9a63e991a555cbc16738485  gcc/testsuite/gcc.c-torture/execute/920302-1.c
--- 14092,14158 ----
  8fa43d2d623422a7935461986deb3619  gcc/testsuite/gcc.c-torture/execute/20040208-2.c
  0d7466b45846715690d8de1c00e1f08f  gcc/testsuite/gcc.c-torture/execute/20040208-2.x
  abc17abb932af1032219d68109132095  gcc/testsuite/gcc.c-torture/execute/20040218-1.c
+ 3fb224a3c4721bfecc76bb8c9993e48d  gcc/testsuite/gcc.c-torture/execute/20040223-1.c
  ff5bcc82e33dd09026b8aaf2d92a0930  gcc/testsuite/gcc.c-torture/execute/20040302-1.c
  aca6a486b3b9bdeb6c89786f5ece5fd1  gcc/testsuite/gcc.c-torture/execute/20040307-1.c
  5ce54217010bef24e3f3e1f75ba0d5b3  gcc/testsuite/gcc.c-torture/execute/20040308-1.c
+ 04256d17aeb67607ff04cde51744b4a0  gcc/testsuite/gcc.c-torture/execute/20040309-1.c
+ 7e4b8938e9221a488d2eab7cfc75da92  gcc/testsuite/gcc.c-torture/execute/20040311-1.c
  60f74a250af358450582e43f4cfa84e1  gcc/testsuite/gcc.c-torture/execute/20040313-1.c
! a41b11620b740726ba5c954f369e4c44  gcc/testsuite/gcc.c-torture/execute/20040319-1.c
! 1f15bebfdefc714a77e0cc025b144ccc  gcc/testsuite/gcc.c-torture/execute/20040331-1.c
! 7f10d405536114a660cac84fc1388e82  gcc/testsuite/gcc.c-torture/execute/20040409-1.c
! 71ff6919088558f41ecc8753f78329e4  gcc/testsuite/gcc.c-torture/execute/20040409-2.c
! d58cde7ef98d36589563b31f8b53810a  gcc/testsuite/gcc.c-torture/execute/20040409-3.c
! 603cd8ba58b42dc8630fc0d7ca6532a8  gcc/testsuite/gcc.c-torture/execute/20040411-1.c
! a3291f783bb702e3358147a1dc1d1106  gcc/testsuite/gcc.c-torture/execute/20040423-1.c
! c6d647d2e50c96e234eec4588a33360f  gcc/testsuite/gcc.c-torture/execute/20040520-1.c
  ce05ca87c3350a7ebc954c28bf98202a  gcc/testsuite/gcc.c-torture/execute/20040625-1.c
+ 2fc1aa5595718e938582f114fec7f151  gcc/testsuite/gcc.c-torture/execute/20040629-1.c
+ 92dbda52078e4cbbbbf4aa6341b279f5  gcc/testsuite/gcc.c-torture/execute/20040703-1.c
+ 47b8acc9cb8854495b70eba6ee86241a  gcc/testsuite/gcc.c-torture/execute/20040704-1.c
+ 4aa87908bde344e76aefd592e7e83e95  gcc/testsuite/gcc.c-torture/execute/20040705-1.c
+ d3bc1be3e6bb3e1642c6cc65f9e8ff08  gcc/testsuite/gcc.c-torture/execute/20040705-2.c
  727c0d5b054eb9a22b184561112078f2  gcc/testsuite/gcc.c-torture/execute/20040706-1.c
  14de9340f54e424f581fba266dcc93a8  gcc/testsuite/gcc.c-torture/execute/20040707-1.c
+ 78d9af5c5984f789e62a46dbd7a13245  gcc/testsuite/gcc.c-torture/execute/20040709-1.c
+ 387c1a5a5bd0752ee03e482104999e71  gcc/testsuite/gcc.c-torture/execute/20040709-2.c
+ 7074e9812a5e1bf10add1f261d950f62  gcc/testsuite/gcc.c-torture/execute/20040805-1.c
+ 862a49ae5576f203a70034d4bd0005bf  gcc/testsuite/gcc.c-torture/execute/20040811-1.c
+ 8447ba9c7e53c35ad32e5bab75dd5a68  gcc/testsuite/gcc.c-torture/execute/20040820-1.c
+ dc8ef6a2f62bcfea90605a1500ebf16b  gcc/testsuite/gcc.c-torture/execute/20040823-1.c
  695236bbd612182e45f7e5b53bd4ed87  gcc/testsuite/gcc.c-torture/execute/20040831-1.c
+ 94c71d01fb9e07bfbc7f7d6459a19a39  gcc/testsuite/gcc.c-torture/execute/20040917-1.c
+ 5cac9f96901f8210960993e10e610af8  gcc/testsuite/gcc.c-torture/execute/20041011-1.c
+ a9e9fda2b801a2197d791f63eb487a27  gcc/testsuite/gcc.c-torture/execute/20041112-1.c
+ ff13cc80beb96532eecd54a4912d4ab6  gcc/testsuite/gcc.c-torture/execute/20041113-1.c
+ 1c59ee76a2b16dfcfa57ab77201a6af1  gcc/testsuite/gcc.c-torture/execute/20041114-1.c
+ fcd9459f6a27c5bdf73f229e7f81fe6e  gcc/testsuite/gcc.c-torture/execute/20041124-1.c
+ 57ca42c345705f29b1c25e55a6c398e8  gcc/testsuite/gcc.c-torture/execute/20041126-1.c
+ b3940188294b2f3ab7b5e39eef6361a6  gcc/testsuite/gcc.c-torture/execute/20041201-1.c
+ d0769d76778f43714fc4bb0bd77ce183  gcc/testsuite/gcc.c-torture/execute/20041210-1.c
+ 222a951a1b83dda356d4ed7822726d68  gcc/testsuite/gcc.c-torture/execute/20041212-1.c
+ aabf84059193ef8f079c086fccf5031c  gcc/testsuite/gcc.c-torture/execute/20041213-2.c
+ 276c13b1129be354a8b457c71224a5aa  gcc/testsuite/gcc.c-torture/execute/20041214-1.c
+ c844f43572c5d01c372285cea683b3ff  gcc/testsuite/gcc.c-torture/execute/20041218-1.c
+ fdc8550ecfa098c28ccbd529e2b542e8  gcc/testsuite/gcc.c-torture/execute/20041218-2.c
+ a0ebbc7207f9bd6db5e3d5c049ce5295  gcc/testsuite/gcc.c-torture/execute/20050104-1.c
+ e35b6e0d1aa44c2a0cde946ed5d0e28e  gcc/testsuite/gcc.c-torture/execute/20050106-1.c
+ 5241de98d91dfc840cecc6262c82531a  gcc/testsuite/gcc.c-torture/execute/20050107-1.c
+ bf7be380df2f194345291de63b1a0c6c  gcc/testsuite/gcc.c-torture/execute/20050111-1.c
+ d6ecc0c4ae27c3fe1596c51858995a60  gcc/testsuite/gcc.c-torture/execute/20050119-1.c
+ 00182d3f96086353fc42aa33ccbc8232  gcc/testsuite/gcc.c-torture/execute/20050119-2.c
+ e118fc1ac0fc62cefe05a4367150acdb  gcc/testsuite/gcc.c-torture/execute/20050121-1.c
+ a11a5f657f81607f39a0e709d4dc3624  gcc/testsuite/gcc.c-torture/execute/20050124-1.c
+ e92928ca93da460089cf9d011020ee9e  gcc/testsuite/gcc.c-torture/execute/20050125-1.c
+ 00aa58320a2c3d5a44122c160a1f8711  gcc/testsuite/gcc.c-torture/execute/20050131-1.c
+ f1d51a349a640972c16400bd854c67ac  gcc/testsuite/gcc.c-torture/execute/20050203-1.c
+ b61a1ebbd753fe82a5897af2fb717b30  gcc/testsuite/gcc.c-torture/execute/20050215-1.c
+ 29bdc7c6be9a830931e2f0d973bc5833  gcc/testsuite/gcc.c-torture/execute/20050218-1.c
+ 6c8199c0ffd341030bef718b580100e9  gcc/testsuite/gcc.c-torture/execute/20050224-1.c
+ 411cd400984d0e08c3a1ad5e9337a8f8  gcc/testsuite/gcc.c-torture/execute/20050316-1.c
+ c289f0feea0c1b0e9230cb6fedf512cc  gcc/testsuite/gcc.c-torture/execute/20050410-1.c
+ 0a3b2d8210913095deb7d0acc7a6bf38  gcc/testsuite/gcc.c-torture/execute/20050414-1.c
  65f01ac7346bd4d47ed9c1ca94ab74ff  gcc/testsuite/gcc.c-torture/execute/900409-1.c
  5aefab4daab0bd29ecf2a389f3c44f40  gcc/testsuite/gcc.c-torture/execute/920202-1.c
  655936aaf9a63e991a555cbc16738485  gcc/testsuite/gcc.c-torture/execute/920302-1.c
*************** ce05ca87c3350a7ebc954c28bf98202a  gcc/te
*** 13459,13465 ****
  6366950afefe4393a30f31653d15c17d  gcc/testsuite/gcc.c-torture/execute/920415-1.c
  67630f32e9d397f90a610dc1a437d5b1  gcc/testsuite/gcc.c-torture/execute/920428-1.c
  5c2205a9ff4755594a1e61c9436410a0  gcc/testsuite/gcc.c-torture/execute/920428-2.c
- 858c4a5320bdd032c44573c126c0e3a4  gcc/testsuite/gcc.c-torture/execute/920428-2.x
  643e65b03432871f96441c1f3396d0d2  gcc/testsuite/gcc.c-torture/execute/920429-1.c
  63c04294b13a583bb3bdb61a81fc8636  gcc/testsuite/gcc.c-torture/execute/920501-1.c
  9c34a0796d9391421a3ad40464941f13  gcc/testsuite/gcc.c-torture/execute/920501-2.c
--- 14162,14167 ----
*************** a6b883b7971ffb6f3947415179b0223c  gcc/te
*** 13468,13474 ****
  79233ccff43ee2868014145f1299ddc7  gcc/testsuite/gcc.c-torture/execute/920501-5.c
  79ac46c4c2eddb5c72cd30872dbefb11  gcc/testsuite/gcc.c-torture/execute/920501-6.c
  bb5b259a6ab43d15258e5519dd63ef6e  gcc/testsuite/gcc.c-torture/execute/920501-7.c
- 858c4a5320bdd032c44573c126c0e3a4  gcc/testsuite/gcc.c-torture/execute/920501-7.x
  b197ed3ff6c10a78be28701584b6193d  gcc/testsuite/gcc.c-torture/execute/920501-8.c
  a02188854518030f3d80461cd4f7abd4  gcc/testsuite/gcc.c-torture/execute/920501-8.x
  e0d4fdcd868a1fca70f8050e878dc1d7  gcc/testsuite/gcc.c-torture/execute/920501-9.c
--- 14170,14175 ----
*************** a02188854518030f3d80461cd4f7abd4  gcc/te
*** 13540,13546 ****
  aa4898d359d97a7b1a5d1ed2427717ca  gcc/testsuite/gcc.c-torture/execute/930526-1.c
  bd6ecf2dc8a04d644399254634a11657  gcc/testsuite/gcc.c-torture/execute/930527-1.c
  8b031be239d98d363a9d222f876949b8  gcc/testsuite/gcc.c-torture/execute/930529-1.c
! f2de6c94b3fab47a06dc1efce87036a8  gcc/testsuite/gcc.c-torture/execute/930529-1.x
  cb56afca9f984f36d845373a46c63c8a  gcc/testsuite/gcc.c-torture/execute/930603-1.c
  bf11698e3b475ce2f211d4a272539c17  gcc/testsuite/gcc.c-torture/execute/930603-2.c
  46352c1d9c49989eb8d8ec6f4eff5889  gcc/testsuite/gcc.c-torture/execute/930603-3.c
--- 14241,14247 ----
  aa4898d359d97a7b1a5d1ed2427717ca  gcc/testsuite/gcc.c-torture/execute/930526-1.c
  bd6ecf2dc8a04d644399254634a11657  gcc/testsuite/gcc.c-torture/execute/930527-1.c
  8b031be239d98d363a9d222f876949b8  gcc/testsuite/gcc.c-torture/execute/930529-1.c
! 6f2d838b39088a31a361f58de8ede021  gcc/testsuite/gcc.c-torture/execute/930529-1.x
  cb56afca9f984f36d845373a46c63c8a  gcc/testsuite/gcc.c-torture/execute/930603-1.c
  bf11698e3b475ce2f211d4a272539c17  gcc/testsuite/gcc.c-torture/execute/930603-2.c
  46352c1d9c49989eb8d8ec6f4eff5889  gcc/testsuite/gcc.c-torture/execute/930603-3.c
*************** f7f9ec30f9865a4919e1c0e415c600e3  gcc/te
*** 13568,13573 ****
--- 14269,14275 ----
  dfe371c94b16773da9210adbaad4bc72  gcc/testsuite/gcc.c-torture/execute/931004-10.c
  3af771746061e12b7590d7cc2214be1f  gcc/testsuite/gcc.c-torture/execute/931004-11.c
  e773b892be057acd4199fa6a854321a7  gcc/testsuite/gcc.c-torture/execute/931004-12.c
+ 23839400eba7140ee5878e25bdf64b0e  gcc/testsuite/gcc.c-torture/execute/931004-12.x
  713b71212dd2b6a34fbffdccf7f10cca  gcc/testsuite/gcc.c-torture/execute/931004-13.c
  7e3b601fb94a8245671f88cc9fd2645e  gcc/testsuite/gcc.c-torture/execute/931004-14.c
  420ba647c7903ab0e28e35c52b5afad4  gcc/testsuite/gcc.c-torture/execute/931004-2.c
*************** ffa56b8f1da194136fe0dc42ec1c5396  gcc/te
*** 13744,13750 ****
  ea5cc37862d9328e904262478ea2dfb1  gcc/testsuite/gcc.c-torture/execute/991202-3.c
  65560526b18a8ad5b77cb2df4d247923  gcc/testsuite/gcc.c-torture/execute/991216-1.c
  50cee2e180267bd94fe3457f05373899  gcc/testsuite/gcc.c-torture/execute/991216-2.c
- 41223c309c6e053135585e7f6ebd163c  gcc/testsuite/gcc.c-torture/execute/991216-3.c
  3b0b5cb8c0c3a0f249580cdbec4ca332  gcc/testsuite/gcc.c-torture/execute/991216-4.c
  1f049cb48a0c18f9ccacbb678bd1772c  gcc/testsuite/gcc.c-torture/execute/991221-1.c
  ee18345ed511ceff311552d973c6426f  gcc/testsuite/gcc.c-torture/execute/991227-1.c
--- 14446,14451 ----
*************** cf491abd2df5513193c96d9605cc5bc8  gcc/te
*** 13766,13780 ****
  13161ca6281e2f9bdc34bea076292f17  gcc/testsuite/gcc.c-torture/execute/bf64-1.c
  c26ad1b1e8fd78b793c174b7c3f7ecbb  gcc/testsuite/gcc.c-torture/execute/bf64-1.x
  98152a763419b41838c8c9d841ad29a6  gcc/testsuite/gcc.c-torture/execute/bitfld-1.c
- e259afdc16aa12fbfcc906a7933053d3  gcc/testsuite/gcc.c-torture/execute/bitfld-1.x
  005d6505de633a2ed0991ac8a94c4b8e  gcc/testsuite/gcc.c-torture/execute/bitfld-2.c
  536807ccf111b49af6f06786f5b23305  gcc/testsuite/gcc.c-torture/execute/built-in-setjmp.c
- 38fe867993095a34d3de70e0ca1815c1  gcc/testsuite/gcc.c-torture/execute/builtin-abs-1.c
- ac7aa63ee5d7888cfe66b20bef6e37a7  gcc/testsuite/gcc.c-torture/execute/builtin-abs-2.c
  61f1b700664051d504fbab0af9bb9bd3  gcc/testsuite/gcc.c-torture/execute/builtin-bitops-1.c
- 655b622208c201476187509e720bc013  gcc/testsuite/gcc.c-torture/execute/builtin-complex-1.c
  264352088258b3552dbcb109c85f3a90  gcc/testsuite/gcc.c-torture/execute/builtin-constant.c
- 4763e2a935942d360dca91820a0d4a88  gcc/testsuite/gcc.c-torture/execute/builtin-constant.x
  330fd60fca3a8e792eac19693be6c239  gcc/testsuite/gcc.c-torture/execute/builtin-prefetch-1.c
  c0dec21fd7d4c5e903736c1c59109090  gcc/testsuite/gcc.c-torture/execute/builtin-prefetch-2.c
  dcd19abd13515d3297af326a1ab6eef3  gcc/testsuite/gcc.c-torture/execute/builtin-prefetch-3.c
--- 14467,14478 ----
  13161ca6281e2f9bdc34bea076292f17  gcc/testsuite/gcc.c-torture/execute/bf64-1.c
  c26ad1b1e8fd78b793c174b7c3f7ecbb  gcc/testsuite/gcc.c-torture/execute/bf64-1.x
  98152a763419b41838c8c9d841ad29a6  gcc/testsuite/gcc.c-torture/execute/bitfld-1.c
  005d6505de633a2ed0991ac8a94c4b8e  gcc/testsuite/gcc.c-torture/execute/bitfld-2.c
+ 99a449c3b4f58a78e441a461df3f513f  gcc/testsuite/gcc.c-torture/execute/bitfld-3.c
+ 3de572cfc2c8979d1fceb4c42c870a65  gcc/testsuite/gcc.c-torture/execute/bitfld-4.c
  536807ccf111b49af6f06786f5b23305  gcc/testsuite/gcc.c-torture/execute/built-in-setjmp.c
  61f1b700664051d504fbab0af9bb9bd3  gcc/testsuite/gcc.c-torture/execute/builtin-bitops-1.c
  264352088258b3552dbcb109c85f3a90  gcc/testsuite/gcc.c-torture/execute/builtin-constant.c
  330fd60fca3a8e792eac19693be6c239  gcc/testsuite/gcc.c-torture/execute/builtin-prefetch-1.c
  c0dec21fd7d4c5e903736c1c59109090  gcc/testsuite/gcc.c-torture/execute/builtin-prefetch-2.c
  dcd19abd13515d3297af326a1ab6eef3  gcc/testsuite/gcc.c-torture/execute/builtin-prefetch-3.c
*************** dcd19abd13515d3297af326a1ab6eef3  gcc/te
*** 13783,13823 ****
  80bffc0fa263de904bef23d3b28d7346  gcc/testsuite/gcc.c-torture/execute/builtin-prefetch-6.c
  617beda9a6776e6d6d8e4264b3f511d6  gcc/testsuite/gcc.c-torture/execute/builtin-types-compatible-p.c
  4ce1926ffaae1eb9088e1a51b052dae7  gcc/testsuite/gcc.c-torture/execute/builtins/abs-1-lib.c
! e6a48c5218ca74faea25ab8c3826718d  gcc/testsuite/gcc.c-torture/execute/builtins/abs-1.c
  9c1322a9e3a8c77348e4168e0edbd573  gcc/testsuite/gcc.c-torture/execute/builtins/abs-1.x
  30caf0ee310178672ba91b754d7959ef  gcc/testsuite/gcc.c-torture/execute/builtins/builtins.exp
! 8cfdd491294bd1a71e0c16dc839edacd  gcc/testsuite/gcc.c-torture/execute/builtins/lib/main.c
  41a70c49c677fed956bde61661377ac4  gcc/testsuite/gcc.c-torture/execute/builtins/lib/memcmp.c
  0b68684b187573c38bff310ec609a77b  gcc/testsuite/gcc.c-torture/execute/builtins/lib/memmove.c
  9904f34579ab8e5b4c9992f14fa40d00  gcc/testsuite/gcc.c-torture/execute/builtins/lib/mempcpy.c
  20da6ed8906eb46372fba38e04cd2f23  gcc/testsuite/gcc.c-torture/execute/builtins/lib/stpcpy.c
  868687ad66f052ce5f70219885fbf39c  gcc/testsuite/gcc.c-torture/execute/builtins/lib/strcat.c
  009658b17237fc00e786b2663b404243  gcc/testsuite/gcc.c-torture/execute/builtins/lib/strchr.c
  6396016fc1063b0a1ac58e04bbf132e2  gcc/testsuite/gcc.c-torture/execute/builtins/lib/strcmp.c
  23dbb83f86e79dc6c245a77105ed8ebf  gcc/testsuite/gcc.c-torture/execute/builtins/lib/strlen.c
  ff7efab3b51a7beae89d63eac86515c0  gcc/testsuite/gcc.c-torture/execute/builtins/lib/strrchr.c
! 617a49fbef352a5e184dd6839a291924  gcc/testsuite/gcc.c-torture/execute/builtins/string-1-lib.c
! 6ace8cfcfbe503223f0d87d9a6a96591  gcc/testsuite/gcc.c-torture/execute/builtins/string-1.c
! c42501d31de8be0291adc1ef673e52b2  gcc/testsuite/gcc.c-torture/execute/builtins/string-2-lib.c
! 31fdf27cdd554b1e8f28c2bdf18d74fc  gcc/testsuite/gcc.c-torture/execute/builtins/string-2.c
! 8bfb0c455dc381c1420ab14f2ae53e03  gcc/testsuite/gcc.c-torture/execute/builtins/string-3-lib.c
! 52867f894dd88e60bcf0182d12a00624  gcc/testsuite/gcc.c-torture/execute/builtins/string-3.c
! fecc9480544022b9bc1882c8be21a082  gcc/testsuite/gcc.c-torture/execute/builtins/string-4-lib.c
! 35f563629d450332b15c2143960bab6c  gcc/testsuite/gcc.c-torture/execute/builtins/string-4.c
! 90eec08ffcd86445e987c6e9d454668d  gcc/testsuite/gcc.c-torture/execute/builtins/string-5-lib.c
! d76d7d1b81e2f887cc590e44fbbacc09  gcc/testsuite/gcc.c-torture/execute/builtins/string-5.c
! d1600bd95a17ea4b6ccf940ce936c456  gcc/testsuite/gcc.c-torture/execute/builtins/string-6-lib.c
! 170bac3e97da49686e358126a74c9c6e  gcc/testsuite/gcc.c-torture/execute/builtins/string-6.c
! fecc9480544022b9bc1882c8be21a082  gcc/testsuite/gcc.c-torture/execute/builtins/string-7-lib.c
! fead7492d56b00462ffc500b41891cd1  gcc/testsuite/gcc.c-torture/execute/builtins/string-7.c
! aa38fed4e25baaf1fc6bc02c0adbde78  gcc/testsuite/gcc.c-torture/execute/builtins/string-8-lib.c
! ed4459bf0374b797d09aa1e1bdb8b898  gcc/testsuite/gcc.c-torture/execute/builtins/string-8.c
! d30a8e27b147083b189425af5fe05b2b  gcc/testsuite/gcc.c-torture/execute/builtins/string-9-lib.c
! 689752a4a911b668e7884876981c67a4  gcc/testsuite/gcc.c-torture/execute/builtins/string-9.c
! b78aba76f1523d23b319539bb90bb8d6  gcc/testsuite/gcc.c-torture/execute/builtins/string-asm-1-lib.c
! bb7f149cfe551a03856591be0fdfcef5  gcc/testsuite/gcc.c-torture/execute/builtins/string-asm-1.c
! d358bc8bcf9b451cabe9ba12353d9506  gcc/testsuite/gcc.c-torture/execute/builtins/string-asm-2-lib.c
! 71164dad638cc02a752274dd4ffe70cd  gcc/testsuite/gcc.c-torture/execute/builtins/string-asm-2.c
  390c8462863a047809ec0a272eada4f7  gcc/testsuite/gcc.c-torture/execute/cbrt.c
  dac7b8ec4720c2dc1cf479bbaf7d384b  gcc/testsuite/gcc.c-torture/execute/cmpdi-1.c
  6893dd4c6d9027e3efe459742565f4da  gcc/testsuite/gcc.c-torture/execute/cmpsi-1.c
--- 14481,14580 ----
  80bffc0fa263de904bef23d3b28d7346  gcc/testsuite/gcc.c-torture/execute/builtin-prefetch-6.c
  617beda9a6776e6d6d8e4264b3f511d6  gcc/testsuite/gcc.c-torture/execute/builtin-types-compatible-p.c
  4ce1926ffaae1eb9088e1a51b052dae7  gcc/testsuite/gcc.c-torture/execute/builtins/abs-1-lib.c
! caa74354806f94b1777d3d438547d909  gcc/testsuite/gcc.c-torture/execute/builtins/abs-1.c
  9c1322a9e3a8c77348e4168e0edbd573  gcc/testsuite/gcc.c-torture/execute/builtins/abs-1.x
+ 1dda6f7a5d9ce23a5db5f59c430ae29e  gcc/testsuite/gcc.c-torture/execute/builtins/abs-2-lib.c
+ d7d9ce89ee3d3fe0e8938f62790f051e  gcc/testsuite/gcc.c-torture/execute/builtins/abs-2.c
+ 1dda6f7a5d9ce23a5db5f59c430ae29e  gcc/testsuite/gcc.c-torture/execute/builtins/abs-3-lib.c
+ 8784d3bd9b264b3c2abfb7b7ea25ccb6  gcc/testsuite/gcc.c-torture/execute/builtins/abs-3.c
  30caf0ee310178672ba91b754d7959ef  gcc/testsuite/gcc.c-torture/execute/builtins/builtins.exp
! f36e146a2aececdc84d9199d53a363ec  gcc/testsuite/gcc.c-torture/execute/builtins/complex-1-lib.c
! 8b5a662c0134cd00115a5866e1c0b6c9  gcc/testsuite/gcc.c-torture/execute/builtins/complex-1.c
! 90337ef4b3870f5eb8816e67bf132f5b  gcc/testsuite/gcc.c-torture/execute/builtins/fprintf-lib.c
! 51fa50c96869ad8ddc8137d97c6768fe  gcc/testsuite/gcc.c-torture/execute/builtins/fprintf.c
! 355930485a66a22e995ae3155bc2e7d9  gcc/testsuite/gcc.c-torture/execute/builtins/fputs-lib.c
! 776d59b9d126692c44ed2285f94564ee  gcc/testsuite/gcc.c-torture/execute/builtins/fputs.c
! 9ea18a18c5c3a471a3eb8a80d6dcc4a3  gcc/testsuite/gcc.c-torture/execute/builtins/lib/abs.c
! 0eea2e705a43d55b8593567eab526834  gcc/testsuite/gcc.c-torture/execute/builtins/lib/fprintf.c
! fe2f070fcceec783fb4d4f588daa07d7  gcc/testsuite/gcc.c-torture/execute/builtins/lib/main.c
  41a70c49c677fed956bde61661377ac4  gcc/testsuite/gcc.c-torture/execute/builtins/lib/memcmp.c
  0b68684b187573c38bff310ec609a77b  gcc/testsuite/gcc.c-torture/execute/builtins/lib/memmove.c
  9904f34579ab8e5b4c9992f14fa40d00  gcc/testsuite/gcc.c-torture/execute/builtins/lib/mempcpy.c
+ 8bfb0c455dc381c1420ab14f2ae53e03  gcc/testsuite/gcc.c-torture/execute/builtins/lib/memset.c
+ 8a879bda2a3e6d08b50211ff9cba5212  gcc/testsuite/gcc.c-torture/execute/builtins/lib/printf.c
+ e40292bf2bfacaadd6567de8ee6b2b1e  gcc/testsuite/gcc.c-torture/execute/builtins/lib/sprintf.c
  20da6ed8906eb46372fba38e04cd2f23  gcc/testsuite/gcc.c-torture/execute/builtins/lib/stpcpy.c
  868687ad66f052ce5f70219885fbf39c  gcc/testsuite/gcc.c-torture/execute/builtins/lib/strcat.c
  009658b17237fc00e786b2663b404243  gcc/testsuite/gcc.c-torture/execute/builtins/lib/strchr.c
  6396016fc1063b0a1ac58e04bbf132e2  gcc/testsuite/gcc.c-torture/execute/builtins/lib/strcmp.c
+ 79eec0b499ddebbe3552770bddb2c535  gcc/testsuite/gcc.c-torture/execute/builtins/lib/strcpy.c
+ aacc72e7faa541dcb2e3e8186d0641b5  gcc/testsuite/gcc.c-torture/execute/builtins/lib/strcspn.c
  23dbb83f86e79dc6c245a77105ed8ebf  gcc/testsuite/gcc.c-torture/execute/builtins/lib/strlen.c
+ f0d40d891f08ce3689c571d0995812b0  gcc/testsuite/gcc.c-torture/execute/builtins/lib/strncat.c
+ 9798f577d1effbe24e29bd1cf49c4751  gcc/testsuite/gcc.c-torture/execute/builtins/lib/strncmp.c
+ 62a8deab86acab7544b08e6e53f04913  gcc/testsuite/gcc.c-torture/execute/builtins/lib/strncpy.c
+ d6ae29c2eed0beb666f6cde29ac3c1c4  gcc/testsuite/gcc.c-torture/execute/builtins/lib/strpbrk.c
  ff7efab3b51a7beae89d63eac86515c0  gcc/testsuite/gcc.c-torture/execute/builtins/lib/strrchr.c
! b520a098405015d0b46b0b158053109d  gcc/testsuite/gcc.c-torture/execute/builtins/lib/strspn.c
! dbd79d00018144a0be973bfba8ad5b90  gcc/testsuite/gcc.c-torture/execute/builtins/lib/strstr.c
! d1600bd95a17ea4b6ccf940ce936c456  gcc/testsuite/gcc.c-torture/execute/builtins/memcmp-lib.c
! c977723dd39905b49b9e53dde1d32e73  gcc/testsuite/gcc.c-torture/execute/builtins/memcmp.c
! 90eec08ffcd86445e987c6e9d454668d  gcc/testsuite/gcc.c-torture/execute/builtins/memmove-2-lib.c
! d967a23dc46c04f7d9929e01b6410b65  gcc/testsuite/gcc.c-torture/execute/builtins/memmove-2.c
! 90eec08ffcd86445e987c6e9d454668d  gcc/testsuite/gcc.c-torture/execute/builtins/memmove-lib.c
! 44fb33d720704bce79c5289fbaadfa38  gcc/testsuite/gcc.c-torture/execute/builtins/memmove.c
! d358bc8bcf9b451cabe9ba12353d9506  gcc/testsuite/gcc.c-torture/execute/builtins/memops-asm-lib.c
! 71164dad638cc02a752274dd4ffe70cd  gcc/testsuite/gcc.c-torture/execute/builtins/memops-asm.c
! 1a3ea4e36df441704d8d1b28df3bd7ed  gcc/testsuite/gcc.c-torture/execute/builtins/mempcpy-2-lib.c
! a465aeeb9de47b64d250c6d3491adbf8  gcc/testsuite/gcc.c-torture/execute/builtins/mempcpy-2.c
! 1a3ea4e36df441704d8d1b28df3bd7ed  gcc/testsuite/gcc.c-torture/execute/builtins/mempcpy-lib.c
! 5718f93c821cbb426d012b0091461089  gcc/testsuite/gcc.c-torture/execute/builtins/mempcpy.c
! 6f905cdc469586014bb19fd748162b58  gcc/testsuite/gcc.c-torture/execute/builtins/memset-lib.c
! 52867f894dd88e60bcf0182d12a00624  gcc/testsuite/gcc.c-torture/execute/builtins/memset.c
! 14c96022e21022ec2d7b36a67c48ef08  gcc/testsuite/gcc.c-torture/execute/builtins/printf-lib.c
! 44616bcce9d86e1e7a35aa04a31b49e6  gcc/testsuite/gcc.c-torture/execute/builtins/printf.c
! 8beff4ed5536d77b3917ad34bd3ca734  gcc/testsuite/gcc.c-torture/execute/builtins/sprintf-lib.c
! aa92bdcd5fbfe3cb673a1970666031da  gcc/testsuite/gcc.c-torture/execute/builtins/sprintf.c
! d30a8e27b147083b189425af5fe05b2b  gcc/testsuite/gcc.c-torture/execute/builtins/strcat-lib.c
! 689752a4a911b668e7884876981c67a4  gcc/testsuite/gcc.c-torture/execute/builtins/strcat.c
! c42501d31de8be0291adc1ef673e52b2  gcc/testsuite/gcc.c-torture/execute/builtins/strchr-lib.c
! 31fdf27cdd554b1e8f28c2bdf18d74fc  gcc/testsuite/gcc.c-torture/execute/builtins/strchr.c
! 2c4468f680ca92665115056d0121b6e9  gcc/testsuite/gcc.c-torture/execute/builtins/strcmp-lib.c
! ff52ed0b06289edabcc2b0f6f8f448b1  gcc/testsuite/gcc.c-torture/execute/builtins/strcmp.c
! f04fadc50b6e98e48602a5d15661e114  gcc/testsuite/gcc.c-torture/execute/builtins/strcpy-2-lib.c
! 12a68323d77bf047184825e4c1543639  gcc/testsuite/gcc.c-torture/execute/builtins/strcpy-2.c
! f04fadc50b6e98e48602a5d15661e114  gcc/testsuite/gcc.c-torture/execute/builtins/strcpy-lib.c
! 0fb0648c98cfe654d7afe0fa00e80ef0  gcc/testsuite/gcc.c-torture/execute/builtins/strcpy.c
! 4991954f9732f6d3d1f60cb416a07430  gcc/testsuite/gcc.c-torture/execute/builtins/strcspn-lib.c
! db37afe605f1b0c4fc4de1025bb29929  gcc/testsuite/gcc.c-torture/execute/builtins/strcspn.c
! aa38fed4e25baaf1fc6bc02c0adbde78  gcc/testsuite/gcc.c-torture/execute/builtins/strlen-2-lib.c
! 1a0e05bc5acf943980bb27ae87497629  gcc/testsuite/gcc.c-torture/execute/builtins/strlen-2.c
! aa38fed4e25baaf1fc6bc02c0adbde78  gcc/testsuite/gcc.c-torture/execute/builtins/strlen-3-lib.c
! d360011eb6ff19cba47e5d928209f8c0  gcc/testsuite/gcc.c-torture/execute/builtins/strlen-3.c
! aa38fed4e25baaf1fc6bc02c0adbde78  gcc/testsuite/gcc.c-torture/execute/builtins/strlen-lib.c
! b4c1aa0fbdea5628747cc9d62dba42c9  gcc/testsuite/gcc.c-torture/execute/builtins/strlen.c
! d3ca6e4899e5e5ad6176ba06eb9a7df2  gcc/testsuite/gcc.c-torture/execute/builtins/strncat-lib.c
! 3f477e836d2911883b0c9da0ef5b871e  gcc/testsuite/gcc.c-torture/execute/builtins/strncat.c
! e2e1da99ffb349bc8c328444b231e4f6  gcc/testsuite/gcc.c-torture/execute/builtins/strncmp-2-lib.c
! f91a867868c26004d2ae3669ea6ce7e9  gcc/testsuite/gcc.c-torture/execute/builtins/strncmp-2.c
! e2e1da99ffb349bc8c328444b231e4f6  gcc/testsuite/gcc.c-torture/execute/builtins/strncmp-lib.c
! 380ae53662ef18ff554128d3f9329e4a  gcc/testsuite/gcc.c-torture/execute/builtins/strncmp.c
! 89ee454ece7134e8578f3ee094c260c4  gcc/testsuite/gcc.c-torture/execute/builtins/strncpy-lib.c
! ee0f7c736647ec33b17d278338e3548d  gcc/testsuite/gcc.c-torture/execute/builtins/strncpy.c
! 5343de615126e3476133a6d32589f90e  gcc/testsuite/gcc.c-torture/execute/builtins/strpbrk-lib.c
! 0588c977070824dcb460a477087e29ba  gcc/testsuite/gcc.c-torture/execute/builtins/strpbrk.c
! 05ad1cada55de3aab76b019089846052  gcc/testsuite/gcc.c-torture/execute/builtins/strpcpy-2-lib.c
! e944267d000f7c657b52900387a59138  gcc/testsuite/gcc.c-torture/execute/builtins/strpcpy-2.c
! 05ad1cada55de3aab76b019089846052  gcc/testsuite/gcc.c-torture/execute/builtins/strpcpy-lib.c
! 564a2cc860e8483408ed1a7e9a3d4f1c  gcc/testsuite/gcc.c-torture/execute/builtins/strpcpy.c
! 900c73fd3a7f5d9837a5911538d44080  gcc/testsuite/gcc.c-torture/execute/builtins/strrchr-lib.c
! 840b781385fe62a54c716c7f7f06ed4d  gcc/testsuite/gcc.c-torture/execute/builtins/strrchr.c
! 91ec8a4c356d94a26b2da4f4d1b79d6d  gcc/testsuite/gcc.c-torture/execute/builtins/strspn-lib.c
! 7604d68698845f4dd5694961d180344d  gcc/testsuite/gcc.c-torture/execute/builtins/strspn.c
! b78aba76f1523d23b319539bb90bb8d6  gcc/testsuite/gcc.c-torture/execute/builtins/strstr-asm-lib.c
! bb7f149cfe551a03856591be0fdfcef5  gcc/testsuite/gcc.c-torture/execute/builtins/strstr-asm.c
! 2c4aa3d41b1deee5941ae83f5b8a1b8e  gcc/testsuite/gcc.c-torture/execute/builtins/strstr-lib.c
! 0bbef83f84e8387e587a22ccb8ec867f  gcc/testsuite/gcc.c-torture/execute/builtins/strstr.c
  390c8462863a047809ec0a272eada4f7  gcc/testsuite/gcc.c-torture/execute/cbrt.c
  dac7b8ec4720c2dc1cf479bbaf7d384b  gcc/testsuite/gcc.c-torture/execute/cmpdi-1.c
  6893dd4c6d9027e3efe459742565f4da  gcc/testsuite/gcc.c-torture/execute/cmpsi-1.c
*************** d1fb88dfc66950cce25732eda9376105  gcc/te
*** 13837,13850 ****
  a647fcb11d4e2029fe161f57a64e0547  gcc/testsuite/gcc.c-torture/execute/cvt-1.c
  26408bf742a70bc31f62ab92526114af  gcc/testsuite/gcc.c-torture/execute/cvt-1.x
  3db51bdc09b9722769818722b2e660b6  gcc/testsuite/gcc.c-torture/execute/dbra-1.c
  57c3b5a536065c99066468119a57b820  gcc/testsuite/gcc.c-torture/execute/divconst-1.c
  38af67c89878cf408a29338d3b8461aa  gcc/testsuite/gcc.c-torture/execute/divconst-2.c
  b88415410e81b02068f1474a644bd707  gcc/testsuite/gcc.c-torture/execute/divconst-3.c
  0a0fc31962c133c8409a816cab6e4e88  gcc/testsuite/gcc.c-torture/execute/divmod-1.c
  5e657aceefd7b81d4869a810c510818a  gcc/testsuite/gcc.c-torture/execute/eeprof-1.c
! 30595f64c1851d01123482feaf5bf5dd  gcc/testsuite/gcc.c-torture/execute/eeprof-1.x
  b75081070e5d6cda7c7fa71f2652e5c4  gcc/testsuite/gcc.c-torture/execute/enum-1.c
  0de8cd8896dc35069287acffcf0cf023  gcc/testsuite/gcc.c-torture/execute/enum-2.c
  6b6c5cd0760efacb4f541c71b316ba80  gcc/testsuite/gcc.c-torture/execute/execute.exp
  3f877fc808f2ba680241c6f0726afdb8  gcc/testsuite/gcc.c-torture/execute/extzvsi.c
  d2dbbb18d94c0dbb1f03952bbd682bdc  gcc/testsuite/gcc.c-torture/execute/ffs-1.c
--- 14594,14612 ----
  a647fcb11d4e2029fe161f57a64e0547  gcc/testsuite/gcc.c-torture/execute/cvt-1.c
  26408bf742a70bc31f62ab92526114af  gcc/testsuite/gcc.c-torture/execute/cvt-1.x
  3db51bdc09b9722769818722b2e660b6  gcc/testsuite/gcc.c-torture/execute/dbra-1.c
+ 9fdb02a19973b7df08e81d3e4fc8bcfd  gcc/testsuite/gcc.c-torture/execute/divcmp-1.c
+ cdf524d104432e118c43374a179694de  gcc/testsuite/gcc.c-torture/execute/divcmp-2.c
+ 62a76b1a6eca08816f8de51ec32567c5  gcc/testsuite/gcc.c-torture/execute/divcmp-3.c
+ 82043c2c78f569e2115de18cead8b6cc  gcc/testsuite/gcc.c-torture/execute/divcmp-4.c
  57c3b5a536065c99066468119a57b820  gcc/testsuite/gcc.c-torture/execute/divconst-1.c
  38af67c89878cf408a29338d3b8461aa  gcc/testsuite/gcc.c-torture/execute/divconst-2.c
  b88415410e81b02068f1474a644bd707  gcc/testsuite/gcc.c-torture/execute/divconst-3.c
  0a0fc31962c133c8409a816cab6e4e88  gcc/testsuite/gcc.c-torture/execute/divmod-1.c
  5e657aceefd7b81d4869a810c510818a  gcc/testsuite/gcc.c-torture/execute/eeprof-1.c
! 978629e412bb8a67a3521434b6937822  gcc/testsuite/gcc.c-torture/execute/eeprof-1.x
  b75081070e5d6cda7c7fa71f2652e5c4  gcc/testsuite/gcc.c-torture/execute/enum-1.c
  0de8cd8896dc35069287acffcf0cf023  gcc/testsuite/gcc.c-torture/execute/enum-2.c
+ 91b8922c3b6304ab6ab99942dbca6c66  gcc/testsuite/gcc.c-torture/execute/enum-3.c
  6b6c5cd0760efacb4f541c71b316ba80  gcc/testsuite/gcc.c-torture/execute/execute.exp
  3f877fc808f2ba680241c6f0726afdb8  gcc/testsuite/gcc.c-torture/execute/extzvsi.c
  d2dbbb18d94c0dbb1f03952bbd682bdc  gcc/testsuite/gcc.c-torture/execute/ffs-1.c
*************** e71614fc99f4d92507caf550d9cc771d  gcc/te
*** 13857,13888 ****
  9a403e9efb635de1dd6feff0713c8fc0  gcc/testsuite/gcc.c-torture/execute/ieee/20010226-1.c
  7a9152a2be076cf32265952db745498f  gcc/testsuite/gcc.c-torture/execute/ieee/20011123-1.c
  2489bc06d5e54c3697445d8bae567608  gcc/testsuite/gcc.c-torture/execute/ieee/20030331-1.c
  fd23ea723b80ea094e702cd44295c2b9  gcc/testsuite/gcc.c-torture/execute/ieee/920518-1.c
  f257f1810a40fe886447ca38d661c1d9  gcc/testsuite/gcc.c-torture/execute/ieee/920810-1.c
  dee465f305a29b6c469ddf0896a99e40  gcc/testsuite/gcc.c-torture/execute/ieee/930529-1.c
  a97c5124480e7231f6d6af194cc220f2  gcc/testsuite/gcc.c-torture/execute/ieee/980619-1.c
  8333aa4ca7917f9501e392d5cf0cedb2  gcc/testsuite/gcc.c-torture/execute/ieee/980619-1.x
  a9c5cebf6c2aa78eeda8f50446fa98aa  gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-1.c
  19bef3314fd27415d002fa6d59810e21  gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-2.c
  a9cd5b1496378f25fb5b0ae2e656c196  gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-3.c
! f463ed9ff5477ae168588fa5a5e4b4b3  gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-4.c
  b6187f5e7f437af55596d4899703c64d  gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-5.c
  a27940c41de4aa616b9a7838dcd2ff06  gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-6.c
  29aef7d959a16091b3ebad8b64980f25  gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-7.c
! 2cb06caa8fd9cf06dee9a81827175e03  gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-8.c
  eda53ee18df0e1666f58ac145f30c8bc  gcc/testsuite/gcc.c-torture/execute/ieee/hugeval.c
  99d35313773227ad3db5ac36f4378d55  gcc/testsuite/gcc.c-torture/execute/ieee/hugeval.x
! 4e6900cf7c159a0dc5a8f58b54538435  gcc/testsuite/gcc.c-torture/execute/ieee/ieee.exp
  becc504a322770453dcee9cedb700b2a  gcc/testsuite/gcc.c-torture/execute/ieee/inf-1.c
  d54974ae1bfac691ab0fc2678a0c5526  gcc/testsuite/gcc.c-torture/execute/ieee/inf-2.c
  2736a1631ef3bc3d1b07e98d9c11e15d  gcc/testsuite/gcc.c-torture/execute/ieee/minuszero.c
  e99609ac5dfa4c9884c4c4aaef18b7ba  gcc/testsuite/gcc.c-torture/execute/ieee/mzero2.c
  fb7fd7f587429cecf628de689fba7cff  gcc/testsuite/gcc.c-torture/execute/ieee/mzero2.x
  f45ca3b0c410537aa1ba72331b725ee3  gcc/testsuite/gcc.c-torture/execute/ieee/mzero3.c
  ca24b3bde293e0dc51664263dfbd7596  gcc/testsuite/gcc.c-torture/execute/ieee/mzero4.c
  706b37713beb55db2b6ffee8c94caad3  gcc/testsuite/gcc.c-torture/execute/ieee/mzero5.c
  d08148dfbcdf48e35ad4e101a660c58e  gcc/testsuite/gcc.c-torture/execute/ieee/rbug.c
  0b794ffb990f43fa9fe03c8d99bbee6c  gcc/testsuite/gcc.c-torture/execute/ieee/rbug.x
  0276373cd8135a78a877447ec6be5e3f  gcc/testsuite/gcc.c-torture/execute/index-1.c
  39b4709b291132e1529e9a6d8ad044e8  gcc/testsuite/gcc.c-torture/execute/inst-check.c
  faa4832387fde3461378ec0209713caf  gcc/testsuite/gcc.c-torture/execute/int-compare.c
--- 14619,14672 ----
  9a403e9efb635de1dd6feff0713c8fc0  gcc/testsuite/gcc.c-torture/execute/ieee/20010226-1.c
  7a9152a2be076cf32265952db745498f  gcc/testsuite/gcc.c-torture/execute/ieee/20011123-1.c
  2489bc06d5e54c3697445d8bae567608  gcc/testsuite/gcc.c-torture/execute/ieee/20030331-1.c
+ 0284337f51dd40cf4eb3cc6be3de1719  gcc/testsuite/gcc.c-torture/execute/ieee/20041213-1.c
  fd23ea723b80ea094e702cd44295c2b9  gcc/testsuite/gcc.c-torture/execute/ieee/920518-1.c
  f257f1810a40fe886447ca38d661c1d9  gcc/testsuite/gcc.c-torture/execute/ieee/920810-1.c
  dee465f305a29b6c469ddf0896a99e40  gcc/testsuite/gcc.c-torture/execute/ieee/930529-1.c
  a97c5124480e7231f6d6af194cc220f2  gcc/testsuite/gcc.c-torture/execute/ieee/980619-1.c
  8333aa4ca7917f9501e392d5cf0cedb2  gcc/testsuite/gcc.c-torture/execute/ieee/980619-1.x
+ 0c03d63f6fb50a233511d65f0eecd5da  gcc/testsuite/gcc.c-torture/execute/ieee/acc1.c
+ 80f1cec8ee9879e5f9cf1ee6b1704a17  gcc/testsuite/gcc.c-torture/execute/ieee/acc2.c
+ f0eeef1d82cfa9d661c40547e550431b  gcc/testsuite/gcc.c-torture/execute/ieee/compare-fp-1.c
+ e32051ed90e292b8eaee90f95a632a72  gcc/testsuite/gcc.c-torture/execute/ieee/compare-fp-2.c
+ 14f9a8ec89e8df86cfa9cf9d721ccc4c  gcc/testsuite/gcc.c-torture/execute/ieee/compare-fp-3.c
+ fee97375f1852586391d62e54dbf07b6  gcc/testsuite/gcc.c-torture/execute/ieee/compare-fp-3.x
+ 0296817f8b5c4660aeff0cda657bdc10  gcc/testsuite/gcc.c-torture/execute/ieee/compare-fp-4.c
+ fee97375f1852586391d62e54dbf07b6  gcc/testsuite/gcc.c-torture/execute/ieee/compare-fp-4.x
+ 6d63b32133901baa266b1719662d9096  gcc/testsuite/gcc.c-torture/execute/ieee/copysign1.c
+ bd3b794c238a54932649f2243578cfac  gcc/testsuite/gcc.c-torture/execute/ieee/copysign2.c
  a9c5cebf6c2aa78eeda8f50446fa98aa  gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-1.c
  19bef3314fd27415d002fa6d59810e21  gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-2.c
  a9cd5b1496378f25fb5b0ae2e656c196  gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-3.c
! 08b4d17891d1fdb1bc9be87f0a33b85e  gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-4.c
! 63eaf5e65da59266cdf1ee61a6f0e4cb  gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-4e.c
! b4829a5beb2ba9c854289ed59b149c87  gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-4f.c
! 84acc8b1076b65bc49262020bd723f48  gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-4l.c
  b6187f5e7f437af55596d4899703c64d  gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-5.c
  a27940c41de4aa616b9a7838dcd2ff06  gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-6.c
  29aef7d959a16091b3ebad8b64980f25  gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-7.c
! e6e4bf75b7bfe776a42e2d834c668aa0  gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-8.c
! 8269310d30e373a5b948feca34d5c256  gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-8e.c
! 80cb66b64dbc493a71cd89ff79bfe22a  gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-8f.c
! 987c92fc82b6f0a9fcd149cb6983020f  gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-8l.c
  eda53ee18df0e1666f58ac145f30c8bc  gcc/testsuite/gcc.c-torture/execute/ieee/hugeval.c
  99d35313773227ad3db5ac36f4378d55  gcc/testsuite/gcc.c-torture/execute/ieee/hugeval.x
! 5dbe6cdbec3ca9a12a68359611e48632  gcc/testsuite/gcc.c-torture/execute/ieee/ieee.exp
  becc504a322770453dcee9cedb700b2a  gcc/testsuite/gcc.c-torture/execute/ieee/inf-1.c
  d54974ae1bfac691ab0fc2678a0c5526  gcc/testsuite/gcc.c-torture/execute/ieee/inf-2.c
  2736a1631ef3bc3d1b07e98d9c11e15d  gcc/testsuite/gcc.c-torture/execute/ieee/minuszero.c
+ 7a7e4e5347d6b2a92cca55ee0c2be408  gcc/testsuite/gcc.c-torture/execute/ieee/mul-subnormal-single-1.c
+ 39adeb61127bf5e27785a7121d4150d8  gcc/testsuite/gcc.c-torture/execute/ieee/mul-subnormal-single-1.x
  e99609ac5dfa4c9884c4c4aaef18b7ba  gcc/testsuite/gcc.c-torture/execute/ieee/mzero2.c
  fb7fd7f587429cecf628de689fba7cff  gcc/testsuite/gcc.c-torture/execute/ieee/mzero2.x
  f45ca3b0c410537aa1ba72331b725ee3  gcc/testsuite/gcc.c-torture/execute/ieee/mzero3.c
  ca24b3bde293e0dc51664263dfbd7596  gcc/testsuite/gcc.c-torture/execute/ieee/mzero4.c
  706b37713beb55db2b6ffee8c94caad3  gcc/testsuite/gcc.c-torture/execute/ieee/mzero5.c
+ 863479e0e407e39a90ba2476bf1207e3  gcc/testsuite/gcc.c-torture/execute/ieee/mzero6.c
  d08148dfbcdf48e35ad4e101a660c58e  gcc/testsuite/gcc.c-torture/execute/ieee/rbug.c
  0b794ffb990f43fa9fe03c8d99bbee6c  gcc/testsuite/gcc.c-torture/execute/ieee/rbug.x
+ 3ac747f57d2697a5b6d03b2ec33c3d1c  gcc/testsuite/gcc.c-torture/execute/ieee/unsafe-fp-assoc-1.c
+ 82761f24b0b6519b8b92f35a92ea3ca6  gcc/testsuite/gcc.c-torture/execute/ieee/unsafe-fp-assoc.c
  0276373cd8135a78a877447ec6be5e3f  gcc/testsuite/gcc.c-torture/execute/index-1.c
  39b4709b291132e1529e9a6d8ad044e8  gcc/testsuite/gcc.c-torture/execute/inst-check.c
  faa4832387fde3461378ec0209713caf  gcc/testsuite/gcc.c-torture/execute/int-compare.c
*************** b7b8614a59a6ad84a931ec79d40897dc  gcc/te
*** 13899,13905 ****
  38fc2d2ce318dcb88d26212675393ad4  gcc/testsuite/gcc.c-torture/execute/loop-2c.c
  979b99705980f816276d46115167f788  gcc/testsuite/gcc.c-torture/execute/loop-2d.c
  56954338863780259bd848f23d1f5841  gcc/testsuite/gcc.c-torture/execute/loop-2e.c
- eb4f6bdb99bc56b490c093eebfc619e1  gcc/testsuite/gcc.c-torture/execute/loop-2e.x
  a800361391db2beb41752f8cd059e951  gcc/testsuite/gcc.c-torture/execute/loop-2f.c
  19db11847477c3a58088c33dfbfabaed  gcc/testsuite/gcc.c-torture/execute/loop-2g.c
  968b158d56c9a559e3e9a57fd9d3d8bc  gcc/testsuite/gcc.c-torture/execute/loop-3.c
--- 14683,14688 ----
*************** a800361391db2beb41752f8cd059e951  gcc/te
*** 13912,13921 ****
  a25b6945a36d26d0d6d4c8ea12859f4c  gcc/testsuite/gcc.c-torture/execute/loop-7.c
  40b29791fe4791dae26621d18ee4ed6c  gcc/testsuite/gcc.c-torture/execute/loop-8.c
  bde52ca8cfd224ec9a5a4b7ca60611ce  gcc/testsuite/gcc.c-torture/execute/loop-9.c
  2d39990f0058bb53e42ac0a0e3af5944  gcc/testsuite/gcc.c-torture/execute/lshrdi-1.c
  707a981156afeb194aec4b858a7fffce  gcc/testsuite/gcc.c-torture/execute/mayalias-1.c
  4b947eae575a6a921be4eb4213bba3d3  gcc/testsuite/gcc.c-torture/execute/medce-1.c
- 949ac7587c7b11c74999c2df33074428  gcc/testsuite/gcc.c-torture/execute/medce-2.c
  7ed7c30457360937f534a68f78c9195d  gcc/testsuite/gcc.c-torture/execute/memcpy-1.c
  be7246e0ee46215e735f89441e8d2f37  gcc/testsuite/gcc.c-torture/execute/memcpy-2.c
  2b82b4e258db05849e2199e1ad920212  gcc/testsuite/gcc.c-torture/execute/memcpy-bi.c
--- 14695,14705 ----
  a25b6945a36d26d0d6d4c8ea12859f4c  gcc/testsuite/gcc.c-torture/execute/loop-7.c
  40b29791fe4791dae26621d18ee4ed6c  gcc/testsuite/gcc.c-torture/execute/loop-8.c
  bde52ca8cfd224ec9a5a4b7ca60611ce  gcc/testsuite/gcc.c-torture/execute/loop-9.c
+ 02f28a11f4d2f3a015c8945152defd9d  gcc/testsuite/gcc.c-torture/execute/loop-ivopts-1.c
+ 462bac74cce6bcaf4babe1d60ee0dc37  gcc/testsuite/gcc.c-torture/execute/loop-ivopts-2.c
  2d39990f0058bb53e42ac0a0e3af5944  gcc/testsuite/gcc.c-torture/execute/lshrdi-1.c
  707a981156afeb194aec4b858a7fffce  gcc/testsuite/gcc.c-torture/execute/mayalias-1.c
  4b947eae575a6a921be4eb4213bba3d3  gcc/testsuite/gcc.c-torture/execute/medce-1.c
  7ed7c30457360937f534a68f78c9195d  gcc/testsuite/gcc.c-torture/execute/memcpy-1.c
  be7246e0ee46215e735f89441e8d2f37  gcc/testsuite/gcc.c-torture/execute/memcpy-2.c
  2b82b4e258db05849e2199e1ad920212  gcc/testsuite/gcc.c-torture/execute/memcpy-bi.c
*************** be7246e0ee46215e735f89441e8d2f37  gcc/te
*** 13923,13942 ****
  f9efa48ff343898059dcee91bc6de6c4  gcc/testsuite/gcc.c-torture/execute/memset-2.c
  3bf742ca40bebc5747f233592dd0d37f  gcc/testsuite/gcc.c-torture/execute/memset-3.c
  c47c383b81916dc5e055e857776ce98f  gcc/testsuite/gcc.c-torture/execute/mod-1.c
! 58dc983aca89baa366c14c0b41a7c92a  gcc/testsuite/gcc.c-torture/execute/multi-ix.c
! 29a49eaf2811bb3ef9d2048f01a5d076  gcc/testsuite/gcc.c-torture/execute/nest-stdar-1.c
  3fc3711523c60ede825fe7d2be3620e1  gcc/testsuite/gcc.c-torture/execute/nestfunc-1.c
  41499442e4d8bf92f1ed068c66da251b  gcc/testsuite/gcc.c-torture/execute/nestfunc-2.c
  8662acc6c14fb65b5f3a5361c00331d8  gcc/testsuite/gcc.c-torture/execute/nestfunc-3.c
  25e730a229a265f7a83d7513efd43f30  gcc/testsuite/gcc.c-torture/execute/nestfunc-4.c
  489f2903a8a0dfcc52821885bbfa9163  gcc/testsuite/gcc.c-torture/execute/nestfunc-5.c
  f3d238f62b20d860f70d778230edd96f  gcc/testsuite/gcc.c-torture/execute/nestfunc-6.c
  3c169902d628502c10f1402f266d1ce3  gcc/testsuite/gcc.c-torture/execute/packed-1.c
  800a3f99834a5cdcc44e2f924fa80443  gcc/testsuite/gcc.c-torture/execute/packed-2.c
  12785ab6e086a50cd8ab9f5bdb9a9bc5  gcc/testsuite/gcc.c-torture/execute/pending-4.c
  5edf8fe6edf222f102732e243da019fe  gcc/testsuite/gcc.c-torture/execute/pr15296.c
  eede5846406062fe63057e8df56a6ca6  gcc/testsuite/gcc.c-torture/execute/pr16790-1.c
  4fc9e57f7b945eb1b204095a3d029480  gcc/testsuite/gcc.c-torture/execute/pr17078-1.c
  25b0ab996245c8f0a89b359cb2f3d01b  gcc/testsuite/gcc.c-torture/execute/ptr-arith-1.c
  a28bd879356d47f1e472aeb9f6dd7b5e  gcc/testsuite/gcc.c-torture/execute/pure-1.c
  94f371d3aceb1a9327cc749ff6604e30  gcc/testsuite/gcc.c-torture/execute/regstack-1.c
--- 14707,14740 ----
  f9efa48ff343898059dcee91bc6de6c4  gcc/testsuite/gcc.c-torture/execute/memset-2.c
  3bf742ca40bebc5747f233592dd0d37f  gcc/testsuite/gcc.c-torture/execute/memset-3.c
  c47c383b81916dc5e055e857776ce98f  gcc/testsuite/gcc.c-torture/execute/mod-1.c
! 42a724c275e627732267a4990711c28b  gcc/testsuite/gcc.c-torture/execute/multdi-1.c
! cc76f739772e60cecc3a91b07767918d  gcc/testsuite/gcc.c-torture/execute/multi-ix.c
! b07a89f75cb6cca54f6a324b7bbae1ab  gcc/testsuite/gcc.c-torture/execute/nest-stdar-1.c
  3fc3711523c60ede825fe7d2be3620e1  gcc/testsuite/gcc.c-torture/execute/nestfunc-1.c
  41499442e4d8bf92f1ed068c66da251b  gcc/testsuite/gcc.c-torture/execute/nestfunc-2.c
  8662acc6c14fb65b5f3a5361c00331d8  gcc/testsuite/gcc.c-torture/execute/nestfunc-3.c
  25e730a229a265f7a83d7513efd43f30  gcc/testsuite/gcc.c-torture/execute/nestfunc-4.c
  489f2903a8a0dfcc52821885bbfa9163  gcc/testsuite/gcc.c-torture/execute/nestfunc-5.c
  f3d238f62b20d860f70d778230edd96f  gcc/testsuite/gcc.c-torture/execute/nestfunc-6.c
+ 5eba67090509852be2de7ea20c933a99  gcc/testsuite/gcc.c-torture/execute/p18298.c
  3c169902d628502c10f1402f266d1ce3  gcc/testsuite/gcc.c-torture/execute/packed-1.c
  800a3f99834a5cdcc44e2f924fa80443  gcc/testsuite/gcc.c-torture/execute/packed-2.c
  12785ab6e086a50cd8ab9f5bdb9a9bc5  gcc/testsuite/gcc.c-torture/execute/pending-4.c
+ 7758cb727d75f4fc1c0e483d503de146  gcc/testsuite/gcc.c-torture/execute/pr15262-1.c
+ 58dc249612dbc918d7fc4010e94deb8d  gcc/testsuite/gcc.c-torture/execute/pr15262-2.c
+ d9c36fc850771445c5e4b6ce6dae1a12  gcc/testsuite/gcc.c-torture/execute/pr15262.c
  5edf8fe6edf222f102732e243da019fe  gcc/testsuite/gcc.c-torture/execute/pr15296.c
  eede5846406062fe63057e8df56a6ca6  gcc/testsuite/gcc.c-torture/execute/pr16790-1.c
  4fc9e57f7b945eb1b204095a3d029480  gcc/testsuite/gcc.c-torture/execute/pr17078-1.c
+ 37ca25609a247860be8b02708b73fea7  gcc/testsuite/gcc.c-torture/execute/pr17252.c
+ 7ef169db579e43d58627ae1d4163458b  gcc/testsuite/gcc.c-torture/execute/pr17377.c
+ 2acb24beb962e468d2f1c1ea9dfc3777  gcc/testsuite/gcc.c-torture/execute/pr19515.c
+ 6b723e82c4f73f13efba759c6fdf97dd  gcc/testsuite/gcc.c-torture/execute/pr19687.c
+ 037f8f7054c3294a3c09f44a4360c1a2  gcc/testsuite/gcc.c-torture/execute/pr19689.c
+ 568fdc6c0308a2021fa0958fbb14e69d  gcc/testsuite/gcc.c-torture/execute/pr20100-1.c
+ f881996934b53f50e79ef53efa9360c5  gcc/testsuite/gcc.c-torture/execute/pr20527-1.c
+ c4d4100775bd3f164faa4568489656b5  gcc/testsuite/gcc.c-torture/execute/pr20601-1.c
+ ecfc31f12ce09d6ccbcced04ff04deba  gcc/testsuite/gcc.c-torture/execute/pr7284-1.c
  25b0ab996245c8f0a89b359cb2f3d01b  gcc/testsuite/gcc.c-torture/execute/ptr-arith-1.c
  a28bd879356d47f1e472aeb9f6dd7b5e  gcc/testsuite/gcc.c-torture/execute/pure-1.c
  94f371d3aceb1a9327cc749ff6604e30  gcc/testsuite/gcc.c-torture/execute/regstack-1.c
*************** d8f6a44dcbfc929191d5b0cd906ddfbb  gcc/te
*** 13945,13957 ****
  f50791a37994d67c24691f699bc1688f  gcc/testsuite/gcc.c-torture/execute/shiftdi.c
  01d1e2d202f08554fb694e3d6b439910  gcc/testsuite/gcc.c-torture/execute/shiftdi.x
  4d550e3078688ce41cf8511f99aa76c6  gcc/testsuite/gcc.c-torture/execute/shiftopt-1.c
! 0c3d7c5505267702075863a275885896  gcc/testsuite/gcc.c-torture/execute/simd-1.c
! e691aba4e81fbd191c4d49827a60d783  gcc/testsuite/gcc.c-torture/execute/simd-2.c
  fee32a848c751252ae3f2e9383cbf63f  gcc/testsuite/gcc.c-torture/execute/simd-4.c
! 4650827c662f042b97cf0fdb1f2f28b1  gcc/testsuite/gcc.c-torture/execute/simd-4.x
! d6cc9eb0fbea42c129ba8364b84e5486  gcc/testsuite/gcc.c-torture/execute/stdio-opt-1.c
! c65a3b988bbe34e960abbd5446d20931  gcc/testsuite/gcc.c-torture/execute/stdio-opt-2.c
! 0c86a31221198d24a42801fb403390e1  gcc/testsuite/gcc.c-torture/execute/stdio-opt-3.c
  da5af2794b49b79ee4c7895a065c6869  gcc/testsuite/gcc.c-torture/execute/strcmp-1.c
  e02a8cc44780d166c4850252ee9780d3  gcc/testsuite/gcc.c-torture/execute/strcpy-1.c
  f42301aa4457d7b5be6b911e739964e8  gcc/testsuite/gcc.c-torture/execute/strct-pack-1.c
--- 14743,14756 ----
  f50791a37994d67c24691f699bc1688f  gcc/testsuite/gcc.c-torture/execute/shiftdi.c
  01d1e2d202f08554fb694e3d6b439910  gcc/testsuite/gcc.c-torture/execute/shiftdi.x
  4d550e3078688ce41cf8511f99aa76c6  gcc/testsuite/gcc.c-torture/execute/shiftopt-1.c
! a48264dc541fca994e8b380b4bec5d16  gcc/testsuite/gcc.c-torture/execute/simd-1.c
! 42bf5fec543c226567dd609fbeda49e4  gcc/testsuite/gcc.c-torture/execute/simd-2.c
  fee32a848c751252ae3f2e9383cbf63f  gcc/testsuite/gcc.c-torture/execute/simd-4.c
! d04e26aea5ec30bccaca225cc8ada351  gcc/testsuite/gcc.c-torture/execute/simd-5.c
! c5ba016a76f2a079ff6974d341c9ec69  gcc/testsuite/gcc.c-torture/execute/simd-6.c
! cad28b37258cc811253fb37f3c3885e9  gcc/testsuite/gcc.c-torture/execute/stdarg-1.c
! 6060ec4c78d499b4859c40fbf4b4a995  gcc/testsuite/gcc.c-torture/execute/stdarg-2.c
! 0914d479399f22ad528c75c7cf45dd38  gcc/testsuite/gcc.c-torture/execute/stdarg-3.c
  da5af2794b49b79ee4c7895a065c6869  gcc/testsuite/gcc.c-torture/execute/strcmp-1.c
  e02a8cc44780d166c4850252ee9780d3  gcc/testsuite/gcc.c-torture/execute/strcpy-1.c
  f42301aa4457d7b5be6b911e739964e8  gcc/testsuite/gcc.c-torture/execute/strct-pack-1.c
*************** f42301aa4457d7b5be6b911e739964e8  gcc/te
*** 13960,13980 ****
  65c757d26937076e844af60bdc36ff13  gcc/testsuite/gcc.c-torture/execute/strct-pack-4.c
  3f6fa44f0ed4bebc3a51e3895976265e  gcc/testsuite/gcc.c-torture/execute/strct-stdarg-1.c
  c435a53e5f970746758c463fa3a97598  gcc/testsuite/gcc.c-torture/execute/strct-varg-1.c
- 242a174675fbf096b9b33412ee0b43d8  gcc/testsuite/gcc.c-torture/execute/string-opt-1.c
- 1a8c22526a1daf932f8776848ecb931b  gcc/testsuite/gcc.c-torture/execute/string-opt-10.c
- 3e27439a2d2c115a19db4b31b2dcb5f1  gcc/testsuite/gcc.c-torture/execute/string-opt-11.c
- 40cb9b41b56b059119d775fa30f0f4ae  gcc/testsuite/gcc.c-torture/execute/string-opt-12.c
- eee43b9de93dd1f9e4b76b1e7ddc1420  gcc/testsuite/gcc.c-torture/execute/string-opt-13.c
- 835af71a8bb03a79b4d4af0c2a7c6468  gcc/testsuite/gcc.c-torture/execute/string-opt-14.c
- 4b58f36528e0fdef35f480011473ff5e  gcc/testsuite/gcc.c-torture/execute/string-opt-15.c
- 884db66677e3b133f34aea85c3e70539  gcc/testsuite/gcc.c-torture/execute/string-opt-16.c
  062314f449792b77bb1d4f2a1751bf7d  gcc/testsuite/gcc.c-torture/execute/string-opt-17.c
  5b06512c7cb3de4c838911dd5a270b7a  gcc/testsuite/gcc.c-torture/execute/string-opt-18.c
- 0bf8d2d76971c6dd8858c4da99f60d75  gcc/testsuite/gcc.c-torture/execute/string-opt-2.c
  3ee0fe2c4448058e4af3b8e21db5b123  gcc/testsuite/gcc.c-torture/execute/string-opt-5.c
- cefff0faece58136fc8354183c69da75  gcc/testsuite/gcc.c-torture/execute/string-opt-6.c
- 062b7f42cfb6d69d4841beaa174d17c0  gcc/testsuite/gcc.c-torture/execute/string-opt-7.c
- a645d37ee9a7e2eb326c40418687ad39  gcc/testsuite/gcc.c-torture/execute/string-opt-8.c
  e9fd878ea9f033fd4b3b73c1a883fc29  gcc/testsuite/gcc.c-torture/execute/strlen-1.c
  cce1f9f0fc76abf4f2fa3e601faba666  gcc/testsuite/gcc.c-torture/execute/strncmp-1.c
  95454c6bf544eaafd61a30e4315982c9  gcc/testsuite/gcc.c-torture/execute/struct-cpy-1.c
--- 14759,14767 ----
*************** b425a062b6bb1fe929a1f13435a7aa58  gcc/te
*** 14003,14010 ****
  a725852feeaa4044c15de4d1cda1e42a  gcc/testsuite/gcc.c-torture/execute/va-arg-21.c
  047dfdad84a6cf61fd75aacb78168fcc  gcc/testsuite/gcc.c-torture/execute/va-arg-22.c
  209009debafe9bce37f0460ea94dea3e  gcc/testsuite/gcc.c-torture/execute/va-arg-23.c
  acf9b703b7e4341b3bbd112f87e26903  gcc/testsuite/gcc.c-torture/execute/va-arg-25.c
! 781fa13748aec0da4aa94e991f51883e  gcc/testsuite/gcc.c-torture/execute/va-arg-25.x
  bf42b087b1712e15e26672c4a0a28452  gcc/testsuite/gcc.c-torture/execute/va-arg-4.c
  e43858d7b08da492de947867d5e08d85  gcc/testsuite/gcc.c-torture/execute/va-arg-5.c
  1ecc2dc074f2da15c550c69969e4a140  gcc/testsuite/gcc.c-torture/execute/va-arg-6.c
--- 14790,14799 ----
  a725852feeaa4044c15de4d1cda1e42a  gcc/testsuite/gcc.c-torture/execute/va-arg-21.c
  047dfdad84a6cf61fd75aacb78168fcc  gcc/testsuite/gcc.c-torture/execute/va-arg-22.c
  209009debafe9bce37f0460ea94dea3e  gcc/testsuite/gcc.c-torture/execute/va-arg-23.c
+ d08f210553a53e7eec022f0ab5894009  gcc/testsuite/gcc.c-torture/execute/va-arg-24.c
  acf9b703b7e4341b3bbd112f87e26903  gcc/testsuite/gcc.c-torture/execute/va-arg-25.c
! 7c6af17ddcae00aab513d0c68742025f  gcc/testsuite/gcc.c-torture/execute/va-arg-25.x
! 7622feb6851cf1a43f58e8ccefdc0132  gcc/testsuite/gcc.c-torture/execute/va-arg-26.c
  bf42b087b1712e15e26672c4a0a28452  gcc/testsuite/gcc.c-torture/execute/va-arg-4.c
  e43858d7b08da492de947867d5e08d85  gcc/testsuite/gcc.c-torture/execute/va-arg-5.c
  1ecc2dc074f2da15c550c69969e4a140  gcc/testsuite/gcc.c-torture/execute/va-arg-6.c
*************** c1c992b583600c2fac7989b2407358f8  gcc/te
*** 14016,14021 ****
--- 14805,14811 ----
  9a5b8cfecfcc36f46dcf851ba6a19df1  gcc/testsuite/gcc.c-torture/execute/widechar-2.c
  540bc182381f68374a6cb9c7f45dd001  gcc/testsuite/gcc.c-torture/execute/zerolen-1.c
  ca00e4f2b164049efb51c27ea249ed6b  gcc/testsuite/gcc.c-torture/execute/zerolen-2.c
+ 94a3a67b41b3d1d739474b1f36b48495  gcc/testsuite/gcc.c-torture/pr18299-1.c
  852e36098cc2812427daeb61db6d8f71  gcc/testsuite/gcc.c-torture/unsorted/386.c
  9681568709601cbb39a156fa04526182  gcc/testsuite/gcc.c-torture/unsorted/86.c
  e0d381962f52ee4f081154c62b739e58  gcc/testsuite/gcc.c-torture/unsorted/BUG1.c
*************** cb3f23e30b535b53eb30442aaf9f9dd3  gcc/te
*** 14098,14104 ****
  2f68463e532b7d38041f86a15b3acb5f  gcc/testsuite/gcc.c-torture/unsorted/c1.c
  89300cc713ac395565489786b4f9931c  gcc/testsuite/gcc.c-torture/unsorted/c2.c
  ac3f5a1e6940caaccd4e900d235e2862  gcc/testsuite/gcc.c-torture/unsorted/call.c
! f760d8860ca03c862cd6026a8d4cae2f  gcc/testsuite/gcc.c-torture/unsorted/call386.c
  aa9ffc31a581daa1ab8cbf46f8f3a3d4  gcc/testsuite/gcc.c-torture/unsorted/callind.c
  d1a3151005fffdff8f22b4e953de39df  gcc/testsuite/gcc.c-torture/unsorted/cc.c
  03fca62fcb613435394e866da59abfa8  gcc/testsuite/gcc.c-torture/unsorted/charmtst.c
--- 14888,14894 ----
  2f68463e532b7d38041f86a15b3acb5f  gcc/testsuite/gcc.c-torture/unsorted/c1.c
  89300cc713ac395565489786b4f9931c  gcc/testsuite/gcc.c-torture/unsorted/c2.c
  ac3f5a1e6940caaccd4e900d235e2862  gcc/testsuite/gcc.c-torture/unsorted/call.c
! c5d1dad6316906edc5ae5ed2038faaaa  gcc/testsuite/gcc.c-torture/unsorted/call386.c
  aa9ffc31a581daa1ab8cbf46f8f3a3d4  gcc/testsuite/gcc.c-torture/unsorted/callind.c
  d1a3151005fffdff8f22b4e953de39df  gcc/testsuite/gcc.c-torture/unsorted/cc.c
  03fca62fcb613435394e866da59abfa8  gcc/testsuite/gcc.c-torture/unsorted/charmtst.c
*************** db8ad996166882b34241a0b5cdd3cc4b  gcc/te
*** 14252,14258 ****
  9f8c044356d25c0a6a3db2a3ceabbf48  gcc/testsuite/gcc.c-torture/unsorted/structret.c
  2988bc89bc3838047b3d37e6604181a4  gcc/testsuite/gcc.c-torture/unsorted/stuct.c
  e3ec4cac3286e3bde15684b24a43bee0  gcc/testsuite/gcc.c-torture/unsorted/sub32.c
! 76e1f23949169fb97eb74f25a6da187b  gcc/testsuite/gcc.c-torture/unsorted/subcc.c
  e90694051aa24fc5854f58f048e5fde1  gcc/testsuite/gcc.c-torture/unsorted/subcse.c
  66ffcf0fa9a4fa5faac380babfac340a  gcc/testsuite/gcc.c-torture/unsorted/sym.c
  4e64eee4187ef2b0a13cbc15e79d9b9f  gcc/testsuite/gcc.c-torture/unsorted/symconst.c
--- 15042,15048 ----
  9f8c044356d25c0a6a3db2a3ceabbf48  gcc/testsuite/gcc.c-torture/unsorted/structret.c
  2988bc89bc3838047b3d37e6604181a4  gcc/testsuite/gcc.c-torture/unsorted/stuct.c
  e3ec4cac3286e3bde15684b24a43bee0  gcc/testsuite/gcc.c-torture/unsorted/sub32.c
! d39dfba8904b6b3381e9d72fdf270488  gcc/testsuite/gcc.c-torture/unsorted/subcc.c
  e90694051aa24fc5854f58f048e5fde1  gcc/testsuite/gcc.c-torture/unsorted/subcse.c
  66ffcf0fa9a4fa5faac380babfac340a  gcc/testsuite/gcc.c-torture/unsorted/sym.c
  4e64eee4187ef2b0a13cbc15e79d9b9f  gcc/testsuite/gcc.c-torture/unsorted/symconst.c
*************** d8fa8929773b3d0a219154f7b8e2e6ba  gcc/te
*** 14296,14445 ****
  d6316deebf3ef6e8f24035468ac56c3e  gcc/testsuite/gcc.c-torture/unsorted/xzz.c
  d0289bfc068c575e2168df7bc156b45a  gcc/testsuite/gcc.dg/20000108-1.c
  586ef49702317acb226ba076aeea11ee  gcc/testsuite/gcc.dg/20000111-1.c
! 3f2e1ab037aacbba31c7df18ec7d17ae  gcc/testsuite/gcc.dg/20000609-1.c
  f2037030516bcbdbc2168697fa62f871  gcc/testsuite/gcc.dg/20000614-1.c
  ca2d3eef9f33e84d74a798acf86f3a11  gcc/testsuite/gcc.dg/20000614-2.c
  d8a5405adb98e221c4fa41ce145177c6  gcc/testsuite/gcc.dg/20000623-1.c
  d1a693baca2cba572e7105df5dd48125  gcc/testsuite/gcc.dg/20000629-1.c
  bdbfe54610915e4d33acf4b3a1ed7293  gcc/testsuite/gcc.dg/20000707-1.c
  f125813d8979781792ab95c79efe5ae8  gcc/testsuite/gcc.dg/20000715-1.c
! 8a0f492ec85495722ba4a5d6df5175c5  gcc/testsuite/gcc.dg/20000720-1.c
  a9f79c9cc568e5952d40adf0aff0f793  gcc/testsuite/gcc.dg/20000724-1.c
  4631c13a8bfa530217ed70d7d1ea3327  gcc/testsuite/gcc.dg/20000807-1.c
  9178336cfff0dcc5067488e18c473e81  gcc/testsuite/gcc.dg/20000904-1.c
  459b324f808517057405584375634672  gcc/testsuite/gcc.dg/20000906-1.c
  8f90e3d9f2e61c57bbb3c09bea849fff  gcc/testsuite/gcc.dg/20000926-1.c
  45bbc6e802e1d4a9cd6687ccd53fc605  gcc/testsuite/gcc.dg/20001009-1.c
! fce1c08824ff3c2726ae4d9c69a7a421  gcc/testsuite/gcc.dg/20001012-1.c
! c9aa8b689f6dc022da846520e437cf9d  gcc/testsuite/gcc.dg/20001012-2.c
! e13f480f36412424838ce2c3811fea43  gcc/testsuite/gcc.dg/20001013-1.c
! 25e3b270a3c4d6546def4fa0bba96cbb  gcc/testsuite/gcc.dg/20001023-1.c
! e37d57500e84a2fdad59f7c6e5ace76a  gcc/testsuite/gcc.dg/20001101-1.c
! 95309378e712137a3828d4e7e649f2bf  gcc/testsuite/gcc.dg/20001102-1.c
! 22ccc8fbf4aeba47c0d955b538fc4c71  gcc/testsuite/gcc.dg/20001108-1.c
! f72807918388f31364e1683779c8e05d  gcc/testsuite/gcc.dg/20001116-1.c
! 9aa0e2a61e643f3fa471e55a79aca51b  gcc/testsuite/gcc.dg/20001117-1.c
  040ca403876d533a3a471dba9a4c79f9  gcc/testsuite/gcc.dg/20001127-1.c
  f73c7ca8a6110c492ac08c3f2ef16d98  gcc/testsuite/gcc.dg/20001201-1.c
  b48bdb28ef372dfc058cdb2dbbe3e480  gcc/testsuite/gcc.dg/20001228-1.c
! 3cfc63c99b5d53097eb898f1a64bb88f  gcc/testsuite/gcc.dg/20010202-1.c
  1fcd3f666246e3e65b27ca65e0a2c7ba  gcc/testsuite/gcc.dg/20010405-1.c
  29ccf435035cbe4ecb0b7e8e463eed92  gcc/testsuite/gcc.dg/20010423-1.c
  2431ceebce12dc1ab32a5756d8a5c6b0  gcc/testsuite/gcc.dg/20010520-1.c
  0a64d1b22ab6fdd4e7634f6a2606d7b1  gcc/testsuite/gcc.dg/20010622-1.c
  d6a093b34cae63181747086a916286be  gcc/testsuite/gcc.dg/20010822-1.c
! cc517d1b2e596340868d80870028f384  gcc/testsuite/gcc.dg/20010912-1.c
  2e0947ca24a7e436edbc9809106a9223  gcc/testsuite/gcc.dg/20011008-1.c
! 69a7d8b11278e2addcf96cd2ae22dee9  gcc/testsuite/gcc.dg/20011008-2.c
  320397272eebbe8258e45588c016fd31  gcc/testsuite/gcc.dg/20011009-1.c
  d8044904e0b915a7f55dc14b951f2702  gcc/testsuite/gcc.dg/20011015-1.c
  606e0fd9f9014582eb7fd999c72ed03f  gcc/testsuite/gcc.dg/20011018-1.c
  fb9781f43d850b74cf126c8f9a3b3855  gcc/testsuite/gcc.dg/20011021-1.c
  368e87c13c3443f2d229e0a5b7443d3e  gcc/testsuite/gcc.dg/20011029-2.c
! 58472c197451d8d2402ee3da27af36c5  gcc/testsuite/gcc.dg/20011107-1.c
  7df3958507d4efafb483da643fe5d513  gcc/testsuite/gcc.dg/20011113-1.c
! fcef8882b934fa5dafe924488b56ff6c  gcc/testsuite/gcc.dg/20011119-1.c
  64b7e14c2a2f916c6bb309d687e944b1  gcc/testsuite/gcc.dg/20011127-1.c
! 1d931c6ca26694cde83320428b38e8fe  gcc/testsuite/gcc.dg/20011130-1.c
! 0323241cff71fd6a9980043d9b0487fe  gcc/testsuite/gcc.dg/20011214-1.c
! 00ce1e52cc6df03ccc64ba97d337af26  gcc/testsuite/gcc.dg/20020103-1.c
  94971217a1ac5772e8c5b56ebec74de4  gcc/testsuite/gcc.dg/20020104-1.c
! 814dab5c2febcb54ef05f000fa0784f2  gcc/testsuite/gcc.dg/20020108-1.c
  c69bc42cc08ae08138f337ef58c638f6  gcc/testsuite/gcc.dg/20020115-1.c
  15ad59848fef8b748253d14541f4c725  gcc/testsuite/gcc.dg/20020116-1.c
  6e18b390fad184ec9659967567060a38  gcc/testsuite/gcc.dg/20020116-2.c
! 593f6c3431d43f02d724db710adeb5db  gcc/testsuite/gcc.dg/20020118-1.c
  99334df3b382541c50c6fca65673c127  gcc/testsuite/gcc.dg/20020122-1.c
! 82d4c451fa14027fc58a04e11f617dc3  gcc/testsuite/gcc.dg/20020122-2.c
! 7df8eaae1fc4e18c297deb4002bc9ab6  gcc/testsuite/gcc.dg/20020122-3.c
  748f1f234dee745850443694622e23f7  gcc/testsuite/gcc.dg/20020122-4.c
! 4f9a511d9bb089970b6f06e401e26dd3  gcc/testsuite/gcc.dg/20020201-1.c
! 741dde44d29b838144e29221e7959e0f  gcc/testsuite/gcc.dg/20020201-3.c
! c9e94648ce91a77dcca1b7ac1f12d503  gcc/testsuite/gcc.dg/20020206-1.c
  08a65114d547473faf30f0e9b44e2237  gcc/testsuite/gcc.dg/20020210-1.c
! a87e19e5465d30bfbba95bb54e1d9f1f  gcc/testsuite/gcc.dg/20020218-1.c
  faeeaf3c8d498390d37e5540e331ad96  gcc/testsuite/gcc.dg/20020219-1.c
  190abf3030b76de527fcb49dc8dc9f83  gcc/testsuite/gcc.dg/20020220-1.c
  16fdabe231946b1fe11dc1bf4c662658  gcc/testsuite/gcc.dg/20020220-2.c
  b0b73c030d0d7412142654db09bd172a  gcc/testsuite/gcc.dg/20020222-1.c
  a5d3d31df4564c6981a550b3b79d51d2  gcc/testsuite/gcc.dg/20020224-1.c
! e2146f780daeb6ab82d8f13435900cbd  gcc/testsuite/gcc.dg/20020310-1.c
  f624e0acdc4cf507ceeea3c01ebd027f  gcc/testsuite/gcc.dg/20020312-1.c
! 1d18f6190b0bfff63c532dbfa98b63b4  gcc/testsuite/gcc.dg/20020312-2.c
  b1766d65a81dbabcdca92f8c496a047d  gcc/testsuite/gcc.dg/20020313-1.c
  0bc0a613df9e226c6994a04c3f7c16d7  gcc/testsuite/gcc.dg/20020319-1.c
  08ea616af09dcad3ded89b8ac8ca3871  gcc/testsuite/gcc.dg/20020326-1.c
! 91ee5f868e7acf3a1d6f1b967121f9d4  gcc/testsuite/gcc.dg/20020411-1.c
  ff6ee59337f9bf32bbc9df5b195953af  gcc/testsuite/gcc.dg/20020415-1.c
  d7d3530dd358895d55495baabac989b2  gcc/testsuite/gcc.dg/20020416-1.c
  1d036ae362015b7ba1593b2de5c7767a  gcc/testsuite/gcc.dg/20020418-1.c
! 7b29bd888f5d28a1b68bb54b92315660  gcc/testsuite/gcc.dg/20020418-2.c
  26b1b9df5ec9177a6c137833bf34a120  gcc/testsuite/gcc.dg/20020425-1.c
! 6fa41ed4e3002ddc89f46b37ab0ccad5  gcc/testsuite/gcc.dg/20020426-1.c
! 2399cf1090518ae701df25a911c7f80c  gcc/testsuite/gcc.dg/20020426-2.c
  4c89af555a3fcfd039406fe577f3fc84  gcc/testsuite/gcc.dg/20020430-1.c
! 61dfae61f78c696a33bf4df4a5a8de18  gcc/testsuite/gcc.dg/20020503-1.c
! b988b40e6faeb822f47cc1ff61225d13  gcc/testsuite/gcc.dg/20020517-1.c
! 32fc677c69f46dca3b94c487d22e0c65  gcc/testsuite/gcc.dg/20020523-1.c
! 7fb661d84a6e1f85589990d8b67ef14f  gcc/testsuite/gcc.dg/20020523-2.c
  38d21cc31f8e604491f4bf2679d3a411  gcc/testsuite/gcc.dg/20020525-1.c
  eba89ad67022c84bc992baf8fd3f5a6b  gcc/testsuite/gcc.dg/20020527-1.c
  234845b8848f5680ff818f62f351bd2d  gcc/testsuite/gcc.dg/20020530-1.c
! 0a7c9f99c5bd6c9ca857b29b19f668e8  gcc/testsuite/gcc.dg/20020531-1.c
  da093a504dd5180ba0a2d674a33283b6  gcc/testsuite/gcc.dg/20020607-1.c
  9460cc0e67fb619fc3dd04804f75c660  gcc/testsuite/gcc.dg/20020607-2.c
  62c562416e1495119078fc2e0b64a755  gcc/testsuite/gcc.dg/20020616-1.c
  049fdf73fa08bd82d7ab93cb7940aede  gcc/testsuite/gcc.dg/20020620-1.c
! d13ab7b4c6c91c32c3a8c9052ff0bb51  gcc/testsuite/gcc.dg/20020729-1.c
  2eb2a8ad64cffe4bcd867d90bd7623d9  gcc/testsuite/gcc.dg/20020919-1.c
  837d3cb3cd2315bdb64553e7d2c0b5e3  gcc/testsuite/gcc.dg/20020926-1.c
  ede74f556652c85db3cb45f485c69289  gcc/testsuite/gcc.dg/20021006-1.c
! 51f327c8850b857e9337c5bcdc6aa767  gcc/testsuite/gcc.dg/20021014-1.c
! 319758e49320349d08b18c76d2c449ed  gcc/testsuite/gcc.dg/20021018-1.c
  4f356dd4e909a0725dd94bd60773bffa  gcc/testsuite/gcc.dg/20021023-1.c
  c362dedec72015c32cd388e94ac084e2  gcc/testsuite/gcc.dg/20021029-1.c
  dbac8533c2d035b1062c392d57919926  gcc/testsuite/gcc.dg/20021029-2.c
  19fb8def52694e3762f9e2da261ce856  gcc/testsuite/gcc.dg/20021116-1.c
  bedede7f5ff92b5f18b454e64eef8087  gcc/testsuite/gcc.dg/20030107-1.c
  f073c3ddb52238e63cc1fd3baffe64a0  gcc/testsuite/gcc.dg/20030120-1.c
! 8c242cb04a75d44bc58fff931c46e161  gcc/testsuite/gcc.dg/20030121-1.c
! 510161488f737f8a455b685b7412eab7  gcc/testsuite/gcc.dg/20030123-1.c
  a9dfc0c164f85954d984a8e7a478535f  gcc/testsuite/gcc.dg/20030129-1.c
! b61428eac0ab65969001c2587f70520f  gcc/testsuite/gcc.dg/20030204-1.c
! 7694ec31e59a54bd953a88206eea2379  gcc/testsuite/gcc.dg/20030213-1.c
  1972f52a8e93b034e93a203266ab861d  gcc/testsuite/gcc.dg/20030217-1.c
! d42f508afa15e80f0ff9ab47af8481c1  gcc/testsuite/gcc.dg/20030218-1.c
! b765761163aca819f4a8fb7970b68ac6  gcc/testsuite/gcc.dg/20030225-1.c
! 49fe9bf6fc373391a38cc2997e7bbf77  gcc/testsuite/gcc.dg/20030225-2.c
  cbde639b603bc8481f09b366d5af77f1  gcc/testsuite/gcc.dg/20030309-1.c
  77336c5b710eff6e82519553aeef6ee8  gcc/testsuite/gcc.dg/20030321-1.c
  63be60a223d3a2ddec09968065c4fd69  gcc/testsuite/gcc.dg/20030323-1.c
  31685e6b66e130faa7a0f52cb357dcfe  gcc/testsuite/gcc.dg/20030324-1.c
! 91b48ef5bfee11dcd09fe4e2774ce4df  gcc/testsuite/gcc.dg/20030331-2.c
  0fd4db75bd5a72801ee571bed6692cf1  gcc/testsuite/gcc.dg/20030405-1.c
  5d54150f39cbb4e9b9985ecf99c5ef74  gcc/testsuite/gcc.dg/20030414-1.c
  6c9b33a7b2a588e199ea141abf4ad4b6  gcc/testsuite/gcc.dg/20030414-2.c
  b90c556060ead9eca4ae58eec1975294  gcc/testsuite/gcc.dg/20030505.c
! 5d5af522fadf859e83a0f2317646a9d5  gcc/testsuite/gcc.dg/20030612-1.c
  12636f2c4a6070d3b4149b67e5cb503f  gcc/testsuite/gcc.dg/20030625-1.c
  01600f04a5bc3600ff140ceb707ce243  gcc/testsuite/gcc.dg/20030626-1.c
  7b030115274cda25e38bbfd46a79ac3e  gcc/testsuite/gcc.dg/20030627-1.c
  1d70af232da295bfe04a23e751ad5362  gcc/testsuite/gcc.dg/20030702-1.c
  5fc6d99324dcfd47c490ca6d16eb7e24  gcc/testsuite/gcc.dg/20030707-1.c
! da7b9ba757267751920e5a4168d377ed  gcc/testsuite/gcc.dg/20030708-1.c
  8cb29d19b71006fc6b0f5802e0001f84  gcc/testsuite/gcc.dg/20030711-1.c
  ac938414908af64d993e7eb4c23921a8  gcc/testsuite/gcc.dg/20030717-1.c
  4d37c7f496e294a2df11087c63c6b60f  gcc/testsuite/gcc.dg/20030721-1.c
  f081843dc1b013a9073e9f5ccbe9ccd8  gcc/testsuite/gcc.dg/20030804-1.c
  9feeac7c880dea540f2127c4247141b2  gcc/testsuite/gcc.dg/20030811-1.c
! f390d920a39545a325eab5a06930ce64  gcc/testsuite/gcc.dg/20030815-1.c
  f4bfaaf3c8a2bfc8d0e0dafb2f00a6b0  gcc/testsuite/gcc.dg/20030820-1.c
  b6264f9cc3b2373e314903a774f304f5  gcc/testsuite/gcc.dg/20030826-1.c
! ba8783ee19a47cc2a525617b43698811  gcc/testsuite/gcc.dg/20030826-2.c
  fd0c97a136fd527613f92d0b915a2392  gcc/testsuite/gcc.dg/20030906-1.c
  66a213dc8af46e1e5e14bf19c6138d70  gcc/testsuite/gcc.dg/20030906-2.c
  cce46107c7dd3af0046a68526657d91a  gcc/testsuite/gcc.dg/20030909-1.c
! f76cb2c1bf2a51830779fc6300d83cdd  gcc/testsuite/gcc.dg/20030926-1.c
  5655763a17d49915d432045a28913415  gcc/testsuite/gcc.dg/20031002-1.c
  5c59001c6a09c828414e958fd47abb4f  gcc/testsuite/gcc.dg/20031012-1.c
  171554a6c49d6ee933d7d1b8d1c6ccf2  gcc/testsuite/gcc.dg/20031102-1.c
--- 15086,15236 ----
  d6316deebf3ef6e8f24035468ac56c3e  gcc/testsuite/gcc.c-torture/unsorted/xzz.c
  d0289bfc068c575e2168df7bc156b45a  gcc/testsuite/gcc.dg/20000108-1.c
  586ef49702317acb226ba076aeea11ee  gcc/testsuite/gcc.dg/20000111-1.c
! 73d4ea9a3539a34dcb4f0e58abe846d2  gcc/testsuite/gcc.dg/20000609-1.c
  f2037030516bcbdbc2168697fa62f871  gcc/testsuite/gcc.dg/20000614-1.c
  ca2d3eef9f33e84d74a798acf86f3a11  gcc/testsuite/gcc.dg/20000614-2.c
  d8a5405adb98e221c4fa41ce145177c6  gcc/testsuite/gcc.dg/20000623-1.c
  d1a693baca2cba572e7105df5dd48125  gcc/testsuite/gcc.dg/20000629-1.c
  bdbfe54610915e4d33acf4b3a1ed7293  gcc/testsuite/gcc.dg/20000707-1.c
  f125813d8979781792ab95c79efe5ae8  gcc/testsuite/gcc.dg/20000715-1.c
! dbd3b82b4bbfaf0636737500a2ffc723  gcc/testsuite/gcc.dg/20000720-1.c
  a9f79c9cc568e5952d40adf0aff0f793  gcc/testsuite/gcc.dg/20000724-1.c
  4631c13a8bfa530217ed70d7d1ea3327  gcc/testsuite/gcc.dg/20000807-1.c
  9178336cfff0dcc5067488e18c473e81  gcc/testsuite/gcc.dg/20000904-1.c
  459b324f808517057405584375634672  gcc/testsuite/gcc.dg/20000906-1.c
  8f90e3d9f2e61c57bbb3c09bea849fff  gcc/testsuite/gcc.dg/20000926-1.c
  45bbc6e802e1d4a9cd6687ccd53fc605  gcc/testsuite/gcc.dg/20001009-1.c
! 1018778766c23aa319c8761f6120546f  gcc/testsuite/gcc.dg/20001012-1.c
! 44fe2aa1012d00b2d0533e41f25cef93  gcc/testsuite/gcc.dg/20001012-2.c
! 6778b5da2101a62a89b37f6309efa8c9  gcc/testsuite/gcc.dg/20001013-1.c
! 5c2b616a946147d2f06759dbf8254b56  gcc/testsuite/gcc.dg/20001023-1.c
! b91479c9593fb862e8d00ffb9fce6f19  gcc/testsuite/gcc.dg/20001101-1.c
! f3085f7f3bbd239674a7d736480ef4aa  gcc/testsuite/gcc.dg/20001102-1.c
! f1f9c6701b53387745942330dd4c42c6  gcc/testsuite/gcc.dg/20001108-1.c
! ab53b32276e226d788c361eb6211743a  gcc/testsuite/gcc.dg/20001116-1.c
! 960f40e1d38eb810f150c74c49dfdf59  gcc/testsuite/gcc.dg/20001117-1.c
  040ca403876d533a3a471dba9a4c79f9  gcc/testsuite/gcc.dg/20001127-1.c
  f73c7ca8a6110c492ac08c3f2ef16d98  gcc/testsuite/gcc.dg/20001201-1.c
  b48bdb28ef372dfc058cdb2dbbe3e480  gcc/testsuite/gcc.dg/20001228-1.c
! d902bd64626de0e3bb75bb841974618c  gcc/testsuite/gcc.dg/20010202-1.c
  1fcd3f666246e3e65b27ca65e0a2c7ba  gcc/testsuite/gcc.dg/20010405-1.c
  29ccf435035cbe4ecb0b7e8e463eed92  gcc/testsuite/gcc.dg/20010423-1.c
+ fadfd239cf18e9787b056daa02185f49  gcc/testsuite/gcc.dg/20010516-1.c
  2431ceebce12dc1ab32a5756d8a5c6b0  gcc/testsuite/gcc.dg/20010520-1.c
  0a64d1b22ab6fdd4e7634f6a2606d7b1  gcc/testsuite/gcc.dg/20010622-1.c
  d6a093b34cae63181747086a916286be  gcc/testsuite/gcc.dg/20010822-1.c
! 945611e5223dd74308c9e3369d3789ef  gcc/testsuite/gcc.dg/20010912-1.c
  2e0947ca24a7e436edbc9809106a9223  gcc/testsuite/gcc.dg/20011008-1.c
! 2c0b6c99d0c00cbda18c2223f2af019b  gcc/testsuite/gcc.dg/20011008-2.c
  320397272eebbe8258e45588c016fd31  gcc/testsuite/gcc.dg/20011009-1.c
  d8044904e0b915a7f55dc14b951f2702  gcc/testsuite/gcc.dg/20011015-1.c
  606e0fd9f9014582eb7fd999c72ed03f  gcc/testsuite/gcc.dg/20011018-1.c
  fb9781f43d850b74cf126c8f9a3b3855  gcc/testsuite/gcc.dg/20011021-1.c
  368e87c13c3443f2d229e0a5b7443d3e  gcc/testsuite/gcc.dg/20011029-2.c
! ecf04c40ab935dabb00f8d8f5db1a302  gcc/testsuite/gcc.dg/20011107-1.c
  7df3958507d4efafb483da643fe5d513  gcc/testsuite/gcc.dg/20011113-1.c
! bf11e88497d23397cb86eeac1c2345d0  gcc/testsuite/gcc.dg/20011119-1.c
  64b7e14c2a2f916c6bb309d687e944b1  gcc/testsuite/gcc.dg/20011127-1.c
! 373763bb633dfa1a656ec53ca2130250  gcc/testsuite/gcc.dg/20011130-1.c
! c6fc7b20ac8cac4f07549ac5f6f21a77  gcc/testsuite/gcc.dg/20011214-1.c
! cc0a6b9415a203edbb6fceb8174db67c  gcc/testsuite/gcc.dg/20020103-1.c
  94971217a1ac5772e8c5b56ebec74de4  gcc/testsuite/gcc.dg/20020104-1.c
! 9a168efe3304cf5019f380d4ef66bddd  gcc/testsuite/gcc.dg/20020108-1.c
  c69bc42cc08ae08138f337ef58c638f6  gcc/testsuite/gcc.dg/20020115-1.c
  15ad59848fef8b748253d14541f4c725  gcc/testsuite/gcc.dg/20020116-1.c
  6e18b390fad184ec9659967567060a38  gcc/testsuite/gcc.dg/20020116-2.c
! 2eae00e26ad9fe436d4b551c56a71f2f  gcc/testsuite/gcc.dg/20020118-1.c
  99334df3b382541c50c6fca65673c127  gcc/testsuite/gcc.dg/20020122-1.c
! a01bea0da6800c586eaf93905e1f07df  gcc/testsuite/gcc.dg/20020122-2.c
! 3481f6e4dd0679785d22e867d5683551  gcc/testsuite/gcc.dg/20020122-3.c
  748f1f234dee745850443694622e23f7  gcc/testsuite/gcc.dg/20020122-4.c
! 67298862141da2077f8e263c294381ae  gcc/testsuite/gcc.dg/20020201-1.c
! 499fbd94244ebce430583c4516315849  gcc/testsuite/gcc.dg/20020201-3.c
! ea00c9b94289f4dfc1f2898413f14589  gcc/testsuite/gcc.dg/20020206-1.c
  08a65114d547473faf30f0e9b44e2237  gcc/testsuite/gcc.dg/20020210-1.c
! 5d6a23e95201895e2a959ecb9a25c163  gcc/testsuite/gcc.dg/20020218-1.c
  faeeaf3c8d498390d37e5540e331ad96  gcc/testsuite/gcc.dg/20020219-1.c
  190abf3030b76de527fcb49dc8dc9f83  gcc/testsuite/gcc.dg/20020220-1.c
  16fdabe231946b1fe11dc1bf4c662658  gcc/testsuite/gcc.dg/20020220-2.c
  b0b73c030d0d7412142654db09bd172a  gcc/testsuite/gcc.dg/20020222-1.c
  a5d3d31df4564c6981a550b3b79d51d2  gcc/testsuite/gcc.dg/20020224-1.c
! 014ca1c20896d4dd629d87c9c5ae01e6  gcc/testsuite/gcc.dg/20020310-1.c
  f624e0acdc4cf507ceeea3c01ebd027f  gcc/testsuite/gcc.dg/20020312-1.c
! f4450da5d1040245bc4fba01970f8bbe  gcc/testsuite/gcc.dg/20020312-2.c
  b1766d65a81dbabcdca92f8c496a047d  gcc/testsuite/gcc.dg/20020313-1.c
  0bc0a613df9e226c6994a04c3f7c16d7  gcc/testsuite/gcc.dg/20020319-1.c
  08ea616af09dcad3ded89b8ac8ca3871  gcc/testsuite/gcc.dg/20020326-1.c
! 5f74ccc3347ed15b74d74bbb96daa32c  gcc/testsuite/gcc.dg/20020411-1.c
  ff6ee59337f9bf32bbc9df5b195953af  gcc/testsuite/gcc.dg/20020415-1.c
  d7d3530dd358895d55495baabac989b2  gcc/testsuite/gcc.dg/20020416-1.c
  1d036ae362015b7ba1593b2de5c7767a  gcc/testsuite/gcc.dg/20020418-1.c
! 75752783c20df4d1cb40a9d86b16e8dd  gcc/testsuite/gcc.dg/20020418-2.c
  26b1b9df5ec9177a6c137833bf34a120  gcc/testsuite/gcc.dg/20020425-1.c
! d10e9af758a208cfdbec28f775e32432  gcc/testsuite/gcc.dg/20020426-1.c
! c40b88d1a4f165569a043eba35281552  gcc/testsuite/gcc.dg/20020426-2.c
  4c89af555a3fcfd039406fe577f3fc84  gcc/testsuite/gcc.dg/20020430-1.c
! 10d2fda09a9b651d2ec5ea46b1d1331e  gcc/testsuite/gcc.dg/20020503-1.c
! b93f17979f49477491f0fa75fe68a948  gcc/testsuite/gcc.dg/20020517-1.c
! ad00c9509babb2dff25c2da15b0a1134  gcc/testsuite/gcc.dg/20020523-1.c
! 22a38297eb099457b2da6c3489092d96  gcc/testsuite/gcc.dg/20020523-2.c
  38d21cc31f8e604491f4bf2679d3a411  gcc/testsuite/gcc.dg/20020525-1.c
  eba89ad67022c84bc992baf8fd3f5a6b  gcc/testsuite/gcc.dg/20020527-1.c
  234845b8848f5680ff818f62f351bd2d  gcc/testsuite/gcc.dg/20020530-1.c
! 305ee7b59dd8fa0c553a5a8bf5b01016  gcc/testsuite/gcc.dg/20020531-1.c
  da093a504dd5180ba0a2d674a33283b6  gcc/testsuite/gcc.dg/20020607-1.c
  9460cc0e67fb619fc3dd04804f75c660  gcc/testsuite/gcc.dg/20020607-2.c
  62c562416e1495119078fc2e0b64a755  gcc/testsuite/gcc.dg/20020616-1.c
  049fdf73fa08bd82d7ab93cb7940aede  gcc/testsuite/gcc.dg/20020620-1.c
! d3481b6a4a7c01553c5e3878202fdec4  gcc/testsuite/gcc.dg/20020729-1.c
  2eb2a8ad64cffe4bcd867d90bd7623d9  gcc/testsuite/gcc.dg/20020919-1.c
  837d3cb3cd2315bdb64553e7d2c0b5e3  gcc/testsuite/gcc.dg/20020926-1.c
  ede74f556652c85db3cb45f485c69289  gcc/testsuite/gcc.dg/20021006-1.c
! e699b8ee2ee5bf15430a58522c22ff55  gcc/testsuite/gcc.dg/20021014-1.c
! 9cc4ccd91d5584dd9e0aadbff33c0c45  gcc/testsuite/gcc.dg/20021018-1.c
  4f356dd4e909a0725dd94bd60773bffa  gcc/testsuite/gcc.dg/20021023-1.c
  c362dedec72015c32cd388e94ac084e2  gcc/testsuite/gcc.dg/20021029-1.c
  dbac8533c2d035b1062c392d57919926  gcc/testsuite/gcc.dg/20021029-2.c
  19fb8def52694e3762f9e2da261ce856  gcc/testsuite/gcc.dg/20021116-1.c
  bedede7f5ff92b5f18b454e64eef8087  gcc/testsuite/gcc.dg/20030107-1.c
  f073c3ddb52238e63cc1fd3baffe64a0  gcc/testsuite/gcc.dg/20030120-1.c
! ec6120ec7212919a62f6c6b97d74ff37  gcc/testsuite/gcc.dg/20030123-1.c
  a9dfc0c164f85954d984a8e7a478535f  gcc/testsuite/gcc.dg/20030129-1.c
! f8adfa49caf8d65c564cf289d0fbece0  gcc/testsuite/gcc.dg/20030204-1.c
! 8cfed911083207ae035f537debfb643f  gcc/testsuite/gcc.dg/20030213-1.c
  1972f52a8e93b034e93a203266ab861d  gcc/testsuite/gcc.dg/20030217-1.c
! f8eb6380d279ede14fb1a775a77e90fa  gcc/testsuite/gcc.dg/20030218-1.c
! c3736e50d0b15790de2f7243518ef9a5  gcc/testsuite/gcc.dg/20030225-1.c
! ac1bbdaac32a696a1e0dbe826399ed9c  gcc/testsuite/gcc.dg/20030225-2.c
  cbde639b603bc8481f09b366d5af77f1  gcc/testsuite/gcc.dg/20030309-1.c
  77336c5b710eff6e82519553aeef6ee8  gcc/testsuite/gcc.dg/20030321-1.c
  63be60a223d3a2ddec09968065c4fd69  gcc/testsuite/gcc.dg/20030323-1.c
  31685e6b66e130faa7a0f52cb357dcfe  gcc/testsuite/gcc.dg/20030324-1.c
! 39af42b2234f1eeb26edf952df5c89f2  gcc/testsuite/gcc.dg/20030331-2.c
  0fd4db75bd5a72801ee571bed6692cf1  gcc/testsuite/gcc.dg/20030405-1.c
  5d54150f39cbb4e9b9985ecf99c5ef74  gcc/testsuite/gcc.dg/20030414-1.c
  6c9b33a7b2a588e199ea141abf4ad4b6  gcc/testsuite/gcc.dg/20030414-2.c
  b90c556060ead9eca4ae58eec1975294  gcc/testsuite/gcc.dg/20030505.c
! b92bcd5cc5e644e163858c3751c8b202  gcc/testsuite/gcc.dg/20030612-1.c
  12636f2c4a6070d3b4149b67e5cb503f  gcc/testsuite/gcc.dg/20030625-1.c
  01600f04a5bc3600ff140ceb707ce243  gcc/testsuite/gcc.dg/20030626-1.c
  7b030115274cda25e38bbfd46a79ac3e  gcc/testsuite/gcc.dg/20030627-1.c
  1d70af232da295bfe04a23e751ad5362  gcc/testsuite/gcc.dg/20030702-1.c
  5fc6d99324dcfd47c490ca6d16eb7e24  gcc/testsuite/gcc.dg/20030707-1.c
! 93936012d7361c8f00049d63eb8a38dd  gcc/testsuite/gcc.dg/20030708-1.c
  8cb29d19b71006fc6b0f5802e0001f84  gcc/testsuite/gcc.dg/20030711-1.c
  ac938414908af64d993e7eb4c23921a8  gcc/testsuite/gcc.dg/20030717-1.c
  4d37c7f496e294a2df11087c63c6b60f  gcc/testsuite/gcc.dg/20030721-1.c
  f081843dc1b013a9073e9f5ccbe9ccd8  gcc/testsuite/gcc.dg/20030804-1.c
+ c1472ccfbb2e0d864160abbeb1da8b0e  gcc/testsuite/gcc.dg/20030805-1.c
  9feeac7c880dea540f2127c4247141b2  gcc/testsuite/gcc.dg/20030811-1.c
! ce0f92cef90bc8790dc8f531382e80ff  gcc/testsuite/gcc.dg/20030815-1.c
  f4bfaaf3c8a2bfc8d0e0dafb2f00a6b0  gcc/testsuite/gcc.dg/20030820-1.c
  b6264f9cc3b2373e314903a774f304f5  gcc/testsuite/gcc.dg/20030826-1.c
! 2684f81955b87538a781facdc6d842ea  gcc/testsuite/gcc.dg/20030826-2.c
  fd0c97a136fd527613f92d0b915a2392  gcc/testsuite/gcc.dg/20030906-1.c
  66a213dc8af46e1e5e14bf19c6138d70  gcc/testsuite/gcc.dg/20030906-2.c
  cce46107c7dd3af0046a68526657d91a  gcc/testsuite/gcc.dg/20030909-1.c
! d3e4241cd67a71d2a4fcf66b64bba2aa  gcc/testsuite/gcc.dg/20030926-1.c
  5655763a17d49915d432045a28913415  gcc/testsuite/gcc.dg/20031002-1.c
  5c59001c6a09c828414e958fd47abb4f  gcc/testsuite/gcc.dg/20031012-1.c
  171554a6c49d6ee933d7d1b8d1c6ccf2  gcc/testsuite/gcc.dg/20031102-1.c
*************** f76cb2c1bf2a51830779fc6300d83cdd  gcc/te
*** 14447,14484 ****
  7c7ea7012460ffe514a8512545b63e58  gcc/testsuite/gcc.dg/20031111-1.c
  fea0269ef731b7c33b15b64a09d312d8  gcc/testsuite/gcc.dg/20031201-1.c
  b7bd984eb5b7d4b89a35583b6c25f974  gcc/testsuite/gcc.dg/20031201-2.c
! 683cae0b95092b139f8fd28242be826a  gcc/testsuite/gcc.dg/20031202-1.c
! 0cc961b395aa2d640dee737b571c82d4  gcc/testsuite/gcc.dg/20031216-1.c
  914fb59271e3c601cb2e5e610f32a7b5  gcc/testsuite/gcc.dg/20031218-1.c
  0e31f15cce2c41678fc3e7f76a6d7da2  gcc/testsuite/gcc.dg/20031218-2.c
! 7a8e74cfad589173ecf81cab9c5d01c5  gcc/testsuite/gcc.dg/20031218-3.c
  9fe96201a56e928b8136e3d47faf364d  gcc/testsuite/gcc.dg/20031222-1.c
  f9134d46ec840532aee3913c7b86f7fb  gcc/testsuite/gcc.dg/20031223-1.c
  fd702924dd6dbd253be38cbf2122c11e  gcc/testsuite/gcc.dg/20040112-1.c
  a9c8dcbd471f438d0945eb02ab3198fb  gcc/testsuite/gcc.dg/20040123-1.c
  7e2e1a54addca114c33bf6ca2ba82886  gcc/testsuite/gcc.dg/20040127-1.c
  952a8389a64af90baf215a0c51ca1706  gcc/testsuite/gcc.dg/20040127-2.c
  2e026d33dbf5598aa7cd5b06ef0cd913  gcc/testsuite/gcc.dg/20040217-1.c
  62eeb79cb5e418cdae883aaa29ff5481  gcc/testsuite/gcc.dg/20040219-1.c
! 616bde6c28df683b39a4ba42c217d2f5  gcc/testsuite/gcc.dg/20040302-1.c
! 95b340b95ed171bdf9f5941a01c3ee7a  gcc/testsuite/gcc.dg/20040305-1.c
  2dabe19c203995b45e0d373cfc326fdd  gcc/testsuite/gcc.dg/20040306-1.c
  6391d068af0ba3f890b884727d3a40e1  gcc/testsuite/gcc.dg/20040310-1.c
  836a12029839c89c7e2773d4319edfff  gcc/testsuite/gcc.dg/20040311-2.c
  820c923595c05983d9a5c5e77f465111  gcc/testsuite/gcc.dg/20040322-1.c
  4fbce11a143127e000dc97e7378abcf7  gcc/testsuite/gcc.dg/20040331-1.c
  9cebdb0d41f76c02604643e5ec04b6ca  gcc/testsuite/gcc.dg/20040609-1.c
! 6f8deb863980437fb00800a8ac8d1c4e  gcc/testsuite/gcc.dg/20040625-1.c
! a57583557654a5a69050f592bb607aa1  gcc/testsuite/gcc.dg/20041024-1.c
  60c0beacbda48e01011c8cd9226edcd9  gcc/testsuite/gcc.dg/920413-1.c
! 9d0e8b94a93fcb17f121596bbf9d3afa  gcc/testsuite/gcc.dg/940409-1.c
  08759c1448bdc8e72051c03e81cf26f5  gcc/testsuite/gcc.dg/940510-1.c
  24a85b1944314d5648711e4b975d408d  gcc/testsuite/gcc.dg/951130-1.c
  1e6e7c81f663924899370f48efc9e350  gcc/testsuite/gcc.dg/980211-1.c
! ebdcfc34c4f479c68d707fc2142ddb5c  gcc/testsuite/gcc.dg/980217-1.c
! 84a9cf0231e2eb06e4805cbac13fd4a2  gcc/testsuite/gcc.dg/980226-1.c
! c992b2f20ed15c9ea7f9776b31265368  gcc/testsuite/gcc.dg/980312-1.c
! 9c9182bb321f5692e15eadba25f0446d  gcc/testsuite/gcc.dg/980313-1.c
  a5330e473b7b4d1d05f693486a832c5a  gcc/testsuite/gcc.dg/980414-1.c
  1a127e4f296e269ea42463b73bf0d0aa  gcc/testsuite/gcc.dg/980502-1.c
  3c791d3e7ff27e22bbf9f5b484323613  gcc/testsuite/gcc.dg/980520-1.c
--- 15238,15314 ----
  7c7ea7012460ffe514a8512545b63e58  gcc/testsuite/gcc.dg/20031111-1.c
  fea0269ef731b7c33b15b64a09d312d8  gcc/testsuite/gcc.dg/20031201-1.c
  b7bd984eb5b7d4b89a35583b6c25f974  gcc/testsuite/gcc.dg/20031201-2.c
! 48d66ad25c13649362129dcbe18fa42b  gcc/testsuite/gcc.dg/20031202-1.c
! 6cf9c79b68d9e3c49a851fec31ded1f8  gcc/testsuite/gcc.dg/20031216-1.c
  914fb59271e3c601cb2e5e610f32a7b5  gcc/testsuite/gcc.dg/20031218-1.c
  0e31f15cce2c41678fc3e7f76a6d7da2  gcc/testsuite/gcc.dg/20031218-2.c
! d88f26e336c418f871b1a921ead6b08a  gcc/testsuite/gcc.dg/20031218-3.c
  9fe96201a56e928b8136e3d47faf364d  gcc/testsuite/gcc.dg/20031222-1.c
  f9134d46ec840532aee3913c7b86f7fb  gcc/testsuite/gcc.dg/20031223-1.c
  fd702924dd6dbd253be38cbf2122c11e  gcc/testsuite/gcc.dg/20040112-1.c
+ ee737184c69185ff4d7409ed3d8ba237  gcc/testsuite/gcc.dg/20040121-1.c
  a9c8dcbd471f438d0945eb02ab3198fb  gcc/testsuite/gcc.dg/20040123-1.c
  7e2e1a54addca114c33bf6ca2ba82886  gcc/testsuite/gcc.dg/20040127-1.c
  952a8389a64af90baf215a0c51ca1706  gcc/testsuite/gcc.dg/20040127-2.c
+ 66a1048126ecd634e1e4f71263be239e  gcc/testsuite/gcc.dg/20040202-1.c
+ c98d25247d7774da4966675b06433f10  gcc/testsuite/gcc.dg/20040203-1.c
+ 47ae99bd5624db55e373fbe4c68f0272  gcc/testsuite/gcc.dg/20040206-1.c
  2e026d33dbf5598aa7cd5b06ef0cd913  gcc/testsuite/gcc.dg/20040217-1.c
  62eeb79cb5e418cdae883aaa29ff5481  gcc/testsuite/gcc.dg/20040219-1.c
! 6ab52c0bca0de8be36c37eabd2d31c97  gcc/testsuite/gcc.dg/20040223-1.c
! 3d5845aeb3ba005f3a25e2d552b072b7  gcc/testsuite/gcc.dg/20040303-1.c
! f90772c8bdd563eff57fe239ad1d4003  gcc/testsuite/gcc.dg/20040305-1.c
! 9c356c89bbe36761df84b5d3c45dc781  gcc/testsuite/gcc.dg/20040305-2.c
  2dabe19c203995b45e0d373cfc326fdd  gcc/testsuite/gcc.dg/20040306-1.c
+ aac5b7dd5982d8ac72db0d6c4bed3939  gcc/testsuite/gcc.dg/20040309-1.c
  6391d068af0ba3f890b884727d3a40e1  gcc/testsuite/gcc.dg/20040310-1.c
  836a12029839c89c7e2773d4319edfff  gcc/testsuite/gcc.dg/20040311-2.c
  820c923595c05983d9a5c5e77f465111  gcc/testsuite/gcc.dg/20040322-1.c
  4fbce11a143127e000dc97e7378abcf7  gcc/testsuite/gcc.dg/20040331-1.c
+ cbc66fee494d1a2762b59ab750e035f9  gcc/testsuite/gcc.dg/20040409-1.c
  9cebdb0d41f76c02604643e5ec04b6ca  gcc/testsuite/gcc.dg/20040609-1.c
! 7f3bd20634f73fc1deec8aa90c642fd6  gcc/testsuite/gcc.dg/20040622-1.c
! 955af0b886eb0bd63d3d79d631936c4f  gcc/testsuite/gcc.dg/20040622-2.c
! 227f5073f5d1ecee1ffa10d020ee5f96  gcc/testsuite/gcc.dg/20040625-1.c
! 774dcfdec92b7339ed81a07e4eb85ddd  gcc/testsuite/gcc.dg/20040627-1.c
! 8bd066ac7fe4c757d9af19e63148459b  gcc/testsuite/gcc.dg/20040813-1.c
! f6b89935794e56059d42e599dba92ec2  gcc/testsuite/gcc.dg/20040910-1.c
! e41c70826d2d2e86d16c489f982a0f1a  gcc/testsuite/gcc.dg/20040916-1.c
! b83c307108e223d5dad2856b28ee3386  gcc/testsuite/gcc.dg/20040920-1.c
! 5ae27069454d88f776d9b0d3129d529d  gcc/testsuite/gcc.dg/20041014-1.c
! 407551e532a5b62584f51ad6cb2a66e3  gcc/testsuite/gcc.dg/20041104-1.c
! fa55f7c54959b0abb467458fdaa456b5  gcc/testsuite/gcc.dg/20041106-1.c
! 33f28dc5a95622290ed5e82b01a385d8  gcc/testsuite/gcc.dg/20041109-1.c
! a0db9858c9cdf40b60373edd5e4386c1  gcc/testsuite/gcc.dg/20041111-1.c
! 4bc0d809539c2a74816ba6e952ff95f6  gcc/testsuite/gcc.dg/20041122-1.c
! a537bb28b33c19777ee80b181b33ae4b  gcc/testsuite/gcc.dg/20041213-1.c
! eaafd64526f33a9a1457b567a57954ea  gcc/testsuite/gcc.dg/20041216-1.c
! 8dbd236699adecb76664deb4da4d423f  gcc/testsuite/gcc.dg/20041219-1.c
! 359fc2f17378ce75bb6a4d3a7cf9a7c2  gcc/testsuite/gcc.dg/20041231-1.c
! d168807ce00bba3179c3371b7b5100e6  gcc/testsuite/gcc.dg/20050105-1.c
! 34cf82bacd1c9932010b6a50bd4f0048  gcc/testsuite/gcc.dg/20050105-2.c
! 8736cb55501cedc3ef4cd539579ebec7  gcc/testsuite/gcc.dg/20050111-1.c
! 3f23e1ca4e89021942ea442e650fdf5a  gcc/testsuite/gcc.dg/20050111-2.c
! b2bb539654ba2d8bde16ecceaf5266f2  gcc/testsuite/gcc.dg/20050113-1.c
! 0c0f4355c924fa44ee77d489a87d7948  gcc/testsuite/gcc.dg/20050121-1.c
! 6b4801db99785258ad0d6fdf2df389d8  gcc/testsuite/gcc.dg/20050121-2.c
! d75e2e831928738c29dcbe7834ecb877  gcc/testsuite/gcc.dg/20050209-1.c
! 964311fd8cdd1cfcbd7fef202a610618  gcc/testsuite/gcc.dg/20050307-1.c
! ceb65a0e2ed6a394985a71f235664991  gcc/testsuite/gcc.dg/20050309-1.c
! 602e3bca6fa8c1e659c7cf5c96c6170c  gcc/testsuite/gcc.dg/20050321-1.c
! bbb835055d05366f7c7f94c202600e8d  gcc/testsuite/gcc.dg/20050321-2.c
! 400dc3c37dbc05f13eefd9991f7398cb  gcc/testsuite/gcc.dg/20050325-1.c
! 70e072ce36471d98ebb25d1288d59f4f  gcc/testsuite/gcc.dg/20050330-1.c
! c32d36b0f0c456d89aeec106314610f3  gcc/testsuite/gcc.dg/20050409-1.c
  60c0beacbda48e01011c8cd9226edcd9  gcc/testsuite/gcc.dg/920413-1.c
! f0c1e347ff19d725e2d77496718dee0c  gcc/testsuite/gcc.dg/940409-1.c
  08759c1448bdc8e72051c03e81cf26f5  gcc/testsuite/gcc.dg/940510-1.c
  24a85b1944314d5648711e4b975d408d  gcc/testsuite/gcc.dg/951130-1.c
  1e6e7c81f663924899370f48efc9e350  gcc/testsuite/gcc.dg/980211-1.c
! 7756978846f5c17b9bc830d5906cf03a  gcc/testsuite/gcc.dg/980217-1.c
! dc91f7dafeff236963a98a83b713a885  gcc/testsuite/gcc.dg/980226-1.c
! 6876a9366bdf227d3df3118a212a8314  gcc/testsuite/gcc.dg/980312-1.c
! 6807f7e1e71273e0ac441a8149ac3311  gcc/testsuite/gcc.dg/980313-1.c
  a5330e473b7b4d1d05f693486a832c5a  gcc/testsuite/gcc.dg/980414-1.c
  1a127e4f296e269ea42463b73bf0d0aa  gcc/testsuite/gcc.dg/980502-1.c
  3c791d3e7ff27e22bbf9f5b484323613  gcc/testsuite/gcc.dg/980520-1.c
*************** a5330e473b7b4d1d05f693486a832c5a  gcc/te
*** 14487,14532 ****
  2d2a220ddee1e2349890e44df1900264  gcc/testsuite/gcc.dg/980709-1.c
  4ff7080689fc133ca1150219bdb4eef5  gcc/testsuite/gcc.dg/980816-1.c
  fbcbdfa94f40435fc4b96cfab7a6b7b1  gcc/testsuite/gcc.dg/980827-1.c
! 9cb4def48a2d02b9c3898b240ec8e742  gcc/testsuite/gcc.dg/990117-1.c
  3127f3001f9ed57f79434d2fb42aba3d  gcc/testsuite/gcc.dg/990130-1.c
  cda741cce59ba0dcd70871f300400003  gcc/testsuite/gcc.dg/990213-1.c
  8c562b587c2208a9f8f2f3c7730479e3  gcc/testsuite/gcc.dg/990213-2.c
  9f73397132e9b0726eeaab5d92a86c95  gcc/testsuite/gcc.dg/990214-1.c
! 611d51ab47124dce8eac96aa28fe5fec  gcc/testsuite/gcc.dg/990424-1.c
  cbd8b99477ce6cd603e35085b9624323  gcc/testsuite/gcc.dg/990506-0.c
! bb58d87b91e4987cf30b8e155182125d  gcc/testsuite/gcc.dg/990524-1.c
  1b0c204b2994c61bff054d37613f7136  gcc/testsuite/gcc.dg/991129-1.c
! 00d442d8e2d88c940cd26b3337ca98b7  gcc/testsuite/gcc.dg/991209-1.c
  758b7bd912c48eaa22ae0b4f74d6b252  gcc/testsuite/gcc.dg/991214-1.c
! 18c45b6d87017719792a016f308b6fa0  gcc/testsuite/gcc.dg/991230-1.c
  3479b5b63274f34f78d0092b07e15e3c  gcc/testsuite/gcc.dg/README
  ff86eba0ea2bdfb29bfb3b9660ec1663  gcc/testsuite/gcc.dg/Wconversion.c
  69ba1e82f7d0548193a29db951959ebc  gcc/testsuite/gcc.dg/Wdeclaration-after-statement-1.c
  7629c4ce6aea52f5653fed17febea075  gcc/testsuite/gcc.dg/Wdeclaration-after-statement-2.c
  623d989fba31af9cb3c8d7eab5cb6b66  gcc/testsuite/gcc.dg/Wlarger-than.c
! 937951bc34214922d171b9394050ee8e  gcc/testsuite/gcc.dg/Wold-style-definition-1.c
  8fa8c8f96ec9b62258e5040409f3e505  gcc/testsuite/gcc.dg/Wold-style-definition-2.c
! 55137427dca99f1de6fcb3a3032aa129  gcc/testsuite/gcc.dg/Wpadded.c
  06162d89f7d3c7f1c3938ea7cc7c0c0a  gcc/testsuite/gcc.dg/Wparentheses-1.c
  bd6aa9e16d771d36c8ebfcfedbab4197  gcc/testsuite/gcc.dg/Wredundant-decls-1.c
  6fe9a73749a8da4ecb255e790a1cc26f  gcc/testsuite/gcc.dg/Wreturn-type.c
! 912e971f9d06e4a244097cc52648d6b6  gcc/testsuite/gcc.dg/Wreturn-type2.c
  a2d08812c8a63205be8fe04175b7dede  gcc/testsuite/gcc.dg/Wshadow-1.c
! 8f07e4608fba54858ac19e2ecdb918d4  gcc/testsuite/gcc.dg/Wshadow-2.c
! 15d54a325dd44f2615507c18b3e01de1  gcc/testsuite/gcc.dg/Wswitch-2.c
! 8cbeb3080485626241cec6698d5f4d77  gcc/testsuite/gcc.dg/Wswitch-default.c
! a4afcb355a923371b289b924a7f64d5d  gcc/testsuite/gcc.dg/Wswitch-enum.c
! a75d02e6fc993ac13147fd953702b129  gcc/testsuite/gcc.dg/Wswitch.c
  0a0db17aec55a3ef88c1d7fa10d65db8  gcc/testsuite/gcc.dg/Wunknownprag.c
  b6ed2e28797ae760fc392cfb1ef38b34  gcc/testsuite/gcc.dg/Wunreachable-1.c
  22501230c322b58362b5f5fa110c23af  gcc/testsuite/gcc.dg/Wunreachable-2.c
  ca8446b4deea2e71ba110ce51cb0f64d  gcc/testsuite/gcc.dg/Wunreachable-3.c
  b8e0f294e7a0bd471aad5f58ec5e3a2a  gcc/testsuite/gcc.dg/Wunreachable-4.c
  722beafddd509f458b524877bb5d6f9b  gcc/testsuite/gcc.dg/Wunreachable-5.c
! de5e7158c2e779171e2e24dc8a6a3a41  gcc/testsuite/gcc.dg/Wunreachable-6.c
! a5c3dd7f2afaa2659e7bad38110eb01a  gcc/testsuite/gcc.dg/Wunreachable-7.c
! 5c030128564d1a013234d0d1152b235e  gcc/testsuite/gcc.dg/alias-1.c
! c5310ccf464bd481fd7fe6bafd407d5f  gcc/testsuite/gcc.dg/align-1.c
  1c9e454a96bdf68b22460af6474169db  gcc/testsuite/gcc.dg/alpha-base-1.c
  1589a8035db3f595b938510a21db3ec9  gcc/testsuite/gcc.dg/alpha-base-2.c
  a25e2111595c980d3d1db7fce98f3a29  gcc/testsuite/gcc.dg/alpha-cix-1.c
--- 15317,15385 ----
  2d2a220ddee1e2349890e44df1900264  gcc/testsuite/gcc.dg/980709-1.c
  4ff7080689fc133ca1150219bdb4eef5  gcc/testsuite/gcc.dg/980816-1.c
  fbcbdfa94f40435fc4b96cfab7a6b7b1  gcc/testsuite/gcc.dg/980827-1.c
! f7686d5f0a28c17af946f3f49cd4bb15  gcc/testsuite/gcc.dg/990117-1.c
  3127f3001f9ed57f79434d2fb42aba3d  gcc/testsuite/gcc.dg/990130-1.c
  cda741cce59ba0dcd70871f300400003  gcc/testsuite/gcc.dg/990213-1.c
  8c562b587c2208a9f8f2f3c7730479e3  gcc/testsuite/gcc.dg/990213-2.c
  9f73397132e9b0726eeaab5d92a86c95  gcc/testsuite/gcc.dg/990214-1.c
! f2a11081d3191b328927416c5ed88863  gcc/testsuite/gcc.dg/990424-1.c
  cbd8b99477ce6cd603e35085b9624323  gcc/testsuite/gcc.dg/990506-0.c
! a5d6346c087cf4d2735328188ffba36d  gcc/testsuite/gcc.dg/990524-1.c
  1b0c204b2994c61bff054d37613f7136  gcc/testsuite/gcc.dg/991129-1.c
! cebba8980d44af5b3715852e7f8ca6a4  gcc/testsuite/gcc.dg/991209-1.c
  758b7bd912c48eaa22ae0b4f74d6b252  gcc/testsuite/gcc.dg/991214-1.c
! 36ea535abc64e7889421b026041a3198  gcc/testsuite/gcc.dg/991230-1.c
  3479b5b63274f34f78d0092b07e15e3c  gcc/testsuite/gcc.dg/README
+ 3657d8392090a291a46e662e66ab20ac  gcc/testsuite/gcc.dg/Wbad-function-cast-1.c
+ 6e7a1e65f0cd6cfcd8a6a5c965c33b39  gcc/testsuite/gcc.dg/Wchar-subscripts-1.c
+ e79fce04ac99cde1a6500dcda59df9c1  gcc/testsuite/gcc.dg/Wconversion-2.c
  ff86eba0ea2bdfb29bfb3b9660ec1663  gcc/testsuite/gcc.dg/Wconversion.c
  69ba1e82f7d0548193a29db951959ebc  gcc/testsuite/gcc.dg/Wdeclaration-after-statement-1.c
  7629c4ce6aea52f5653fed17febea075  gcc/testsuite/gcc.dg/Wdeclaration-after-statement-2.c
  623d989fba31af9cb3c8d7eab5cb6b66  gcc/testsuite/gcc.dg/Wlarger-than.c
! 28016a8927b2ea374fbade3a1aad5294  gcc/testsuite/gcc.dg/Wnested-externs-1.c
! 78b26e55f8111808885390fc48d39f07  gcc/testsuite/gcc.dg/Wno-pointer-sign.c
! f2a2381de57e1957ce93d70c4cd029eb  gcc/testsuite/gcc.dg/Wold-style-definition-1.c
  8fa8c8f96ec9b62258e5040409f3e505  gcc/testsuite/gcc.dg/Wold-style-definition-2.c
! d427ada6342b87b59b9d1fb4ab7ee607  gcc/testsuite/gcc.dg/Wpadded.c
  06162d89f7d3c7f1c3938ea7cc7c0c0a  gcc/testsuite/gcc.dg/Wparentheses-1.c
+ 90f550c9f49f356129f57a4e73d28775  gcc/testsuite/gcc.dg/Wparentheses-10.c
+ f6f62dbb46f1e864eca46c4b31b0e83e  gcc/testsuite/gcc.dg/Wparentheses-2.c
+ 5c95b8dd44003f49595ab21613f2ecf8  gcc/testsuite/gcc.dg/Wparentheses-3.c
+ 2a8b847e79577357a66fdbe9ff0c2c13  gcc/testsuite/gcc.dg/Wparentheses-4.c
+ 8e41f06a61c51d51d6ecde7f0f1da968  gcc/testsuite/gcc.dg/Wparentheses-5.c
+ 42579a89b0619df25adb68bea2754c3c  gcc/testsuite/gcc.dg/Wparentheses-6.c
+ 62c82bd9750b3488374d128b387eaf55  gcc/testsuite/gcc.dg/Wparentheses-7.c
+ 078db4636bb2e603aa4154acfa78dd5a  gcc/testsuite/gcc.dg/Wparentheses-8.c
+ 733662f34bd059186239cd7a8f9bf45a  gcc/testsuite/gcc.dg/Wparentheses-9.c
  bd6aa9e16d771d36c8ebfcfedbab4197  gcc/testsuite/gcc.dg/Wredundant-decls-1.c
  6fe9a73749a8da4ecb255e790a1cc26f  gcc/testsuite/gcc.dg/Wreturn-type.c
! 13346214a933b039e18e4797462ec5c7  gcc/testsuite/gcc.dg/Wreturn-type2.c
  a2d08812c8a63205be8fe04175b7dede  gcc/testsuite/gcc.dg/Wshadow-1.c
! 976b3de3264afbbae8a2106e5bfd616b  gcc/testsuite/gcc.dg/Wshadow-2.c
! 063811cae4064dfe33ddbcd11e9f93ee  gcc/testsuite/gcc.dg/Wswitch-2.c
! fffa3daae0aa096b127d7b76b64fdeba  gcc/testsuite/gcc.dg/Wswitch-default.c
! 5de8c26c130b29826c22a098bc00194b  gcc/testsuite/gcc.dg/Wswitch-enum.c
! a3a9b2421bdbfff0e2b67a9df2a1e67e  gcc/testsuite/gcc.dg/Wswitch.c
  0a0db17aec55a3ef88c1d7fa10d65db8  gcc/testsuite/gcc.dg/Wunknownprag.c
  b6ed2e28797ae760fc392cfb1ef38b34  gcc/testsuite/gcc.dg/Wunreachable-1.c
  22501230c322b58362b5f5fa110c23af  gcc/testsuite/gcc.dg/Wunreachable-2.c
  ca8446b4deea2e71ba110ce51cb0f64d  gcc/testsuite/gcc.dg/Wunreachable-3.c
  b8e0f294e7a0bd471aad5f58ec5e3a2a  gcc/testsuite/gcc.dg/Wunreachable-4.c
  722beafddd509f458b524877bb5d6f9b  gcc/testsuite/gcc.dg/Wunreachable-5.c
! 2dc0d0e2137c199da3298e0cba6417e3  gcc/testsuite/gcc.dg/Wunreachable-6.c
! df206d4bbc5e67903226a355e9abfc37  gcc/testsuite/gcc.dg/Wunreachable-7.c
! e2c15001574216c5b54db7786ed3745f  gcc/testsuite/gcc.dg/Wunreachable-8.c
! aa377e85caf654024f5e996e8b1bc4ee  gcc/testsuite/gcc.dg/Wwrite-strings-1.c
! 83360ba7c5c31bdb669b27cb7239ed67  gcc/testsuite/gcc.dg/alias-1.c
! 09f343c08daf323df0bf00993bbdd9ab  gcc/testsuite/gcc.dg/alias-2.c
! 468bb869b3405c03cd5b0a29b3849245  gcc/testsuite/gcc.dg/alias-3.c
! a4dc0f78c6e8859ac3aee7cea562abb5  gcc/testsuite/gcc.dg/alias-4.c
! a015fbd6293bb654de6f42847beb62d6  gcc/testsuite/gcc.dg/alias-5.c
! eb4dade8877d21e8bb08fe3851d63835  gcc/testsuite/gcc.dg/alias-6.c
! a3f4ac11015647a31c68b55b51a9bd94  gcc/testsuite/gcc.dg/alias-7.c
! b87d726d798335bcf014c51ea61e9a4c  gcc/testsuite/gcc.dg/align-1.c
! 2a9f7a072b521ead14abddf254e99f4c  gcc/testsuite/gcc.dg/align-2.c
  1c9e454a96bdf68b22460af6474169db  gcc/testsuite/gcc.dg/alpha-base-1.c
  1589a8035db3f595b938510a21db3ec9  gcc/testsuite/gcc.dg/alpha-base-2.c
  a25e2111595c980d3d1db7fce98f3a29  gcc/testsuite/gcc.dg/alpha-cix-1.c
*************** da524158d6afb4e8a0c29d5f438ed17f  gcc/te
*** 14542,14548 ****
--- 15395,15404 ----
  d53d1211b5a5cd941d863285ecba5bd4  gcc/testsuite/gcc.dg/altivec-15.c
  42fb531a004003016c1aca0a6443a54b  gcc/testsuite/gcc.dg/altivec-16.c
  cd37a8c29916e7b0eab28733eeaa4897  gcc/testsuite/gcc.dg/altivec-17.c
+ 4c271776303074c2401391f9151d9e49  gcc/testsuite/gcc.dg/altivec-18.c
+ 3355c2f1ada94e89ae92e108e7ef613a  gcc/testsuite/gcc.dg/altivec-19.c
  7882ef20c7eb74852a4e9f9deff3e1dd  gcc/testsuite/gcc.dg/altivec-2.c
+ ad868252778f7a9f95861bcd61280ddb  gcc/testsuite/gcc.dg/altivec-20.c
  02156b86c28af4e6cb504d9483c55f51  gcc/testsuite/gcc.dg/altivec-3.c
  a24b312c47908b473332a4f135d2deb7  gcc/testsuite/gcc.dg/altivec-4.c
  521fee8b1c486df5b1049e8737721078  gcc/testsuite/gcc.dg/altivec-5.c
*************** a24b312c47908b473332a4f135d2deb7  gcc/te
*** 14550,14555 ****
--- 15406,15415 ----
  5d287a948344bdb2bb5994e0e9c93d2b  gcc/testsuite/gcc.dg/altivec-7.c
  e821ed1be7fd32d7445688e1246a36a7  gcc/testsuite/gcc.dg/altivec-8.c
  dac4effe71a7289bfae09dc712821e14  gcc/testsuite/gcc.dg/altivec-9.c
+ 3ffbad0a183253dd49a14c95e1f9e616  gcc/testsuite/gcc.dg/altivec-types-1.c
+ 2fabd70465808dc383437811778591e1  gcc/testsuite/gcc.dg/altivec-types-2.c
+ dbcc5463fa4853b6308b2bd65d6d1dfc  gcc/testsuite/gcc.dg/altivec-types-3.c
+ 67cee80632c505cdb26ab7ae4f85d040  gcc/testsuite/gcc.dg/altivec-types-4.c
  4391d8cacb7357fe90bf01894cdfa0ff  gcc/testsuite/gcc.dg/altivec-varargs-1.c
  375660d7437aba4961b96f917b1e7d29  gcc/testsuite/gcc.dg/altivec_check.h
  553fc39521f690bd15ca286bd5e1de87  gcc/testsuite/gcc.dg/always_inline.c
*************** dac4effe71a7289bfae09dc712821e14  gcc/te
*** 14558,14566 ****
  355bc34a661a4167bb37b449570df8dc  gcc/testsuite/gcc.dg/anon-struct-1.c
  596cce1a2948060bce3de3fd081944a5  gcc/testsuite/gcc.dg/anon-struct-2.c
  3eb838bd43dd39abc85333ede3483fb7  gcc/testsuite/gcc.dg/anon-struct-3.c
  774558fc38d6fbd96e9be03bba36b274  gcc/testsuite/gcc.dg/arm-asm.c
  a6c2a8dafee2b752fe3cba3c9186e574  gcc/testsuite/gcc.dg/arm-g2.c
! 7676ac5199d2d97198e078b7e6324497  gcc/testsuite/gcc.dg/arm-mmx-1.c
  29477ac07186d032dc88aca22f0d9bf9  gcc/testsuite/gcc.dg/arm-scd42-1.c
  ce498eafe103c2afe7c8102eb0d6b07d  gcc/testsuite/gcc.dg/arm-scd42-2.c
  148be1d62bbe8eaa01e9cb6ac3418b88  gcc/testsuite/gcc.dg/arm-scd42-3.c
--- 15418,15432 ----
  355bc34a661a4167bb37b449570df8dc  gcc/testsuite/gcc.dg/anon-struct-1.c
  596cce1a2948060bce3de3fd081944a5  gcc/testsuite/gcc.dg/anon-struct-2.c
  3eb838bd43dd39abc85333ede3483fb7  gcc/testsuite/gcc.dg/anon-struct-3.c
+ dd599d71ecd611032d937504578afcc1  gcc/testsuite/gcc.dg/anon-struct-4.c
+ 424e3b16959c59f33da083e5597904cc  gcc/testsuite/gcc.dg/anon-struct-5.c
+ 3f8a7261a890c286dca2b1520df95ef4  gcc/testsuite/gcc.dg/anon-struct-6.c
+ 527ed4f3567546d649918dc280d4a610  gcc/testsuite/gcc.dg/anon-struct-7.c
+ 6a16db51ef6eef4451521ec678a5b53b  gcc/testsuite/gcc.dg/anon-struct-8.c
  774558fc38d6fbd96e9be03bba36b274  gcc/testsuite/gcc.dg/arm-asm.c
+ b6cab3374c582d76eeef70b4822ab092  gcc/testsuite/gcc.dg/arm-eabi1.c
  a6c2a8dafee2b752fe3cba3c9186e574  gcc/testsuite/gcc.dg/arm-g2.c
! 74a48692b0fc4d4fc7924a5f3c181363  gcc/testsuite/gcc.dg/arm-mmx-1.c
  29477ac07186d032dc88aca22f0d9bf9  gcc/testsuite/gcc.dg/arm-scd42-1.c
  ce498eafe103c2afe7c8102eb0d6b07d  gcc/testsuite/gcc.dg/arm-scd42-2.c
  148be1d62bbe8eaa01e9cb6ac3418b88  gcc/testsuite/gcc.dg/arm-scd42-3.c
*************** ce498eafe103c2afe7c8102eb0d6b07d  gcc/te
*** 14568,14654 ****
  cc0b1549bd1f797e2044f7e749bebbae  gcc/testsuite/gcc.dg/array-2.c
  1c72c1697779b727d1e4d4a57e4e0eff  gcc/testsuite/gcc.dg/array-3.c
  00b3b746d57a8a5f6b269324cc52d6e7  gcc/testsuite/gcc.dg/array-4.c
! 66aa238cd22f771076aa99b02159ed58  gcc/testsuite/gcc.dg/array-5.c
  01dbbeac61e35ce32d422105d0a99f4a  gcc/testsuite/gcc.dg/array-6.c
! 5227b756ebd7dd4700e55b303a0aa922  gcc/testsuite/gcc.dg/array-quals-1.c
  483707ff02a653b11cbb6ce469737e0d  gcc/testsuite/gcc.dg/asm-1.c
  b8a6dfeb58832a8b8624357eed99557a  gcc/testsuite/gcc.dg/asm-2.c
  b911cf51d486403e3ca1c067a8a15675  gcc/testsuite/gcc.dg/asm-3.c
  2316d7eec0825a9853d1052f4da7f63a  gcc/testsuite/gcc.dg/asm-4.c
  a6e6a20bfb66616db39b1382efe3d81f  gcc/testsuite/gcc.dg/asm-5.c
  239874d675ee6f1b851be81d0f1a7928  gcc/testsuite/gcc.dg/asm-6.c
! 337ce5a5840079486140c13fd00a0f74  gcc/testsuite/gcc.dg/asm-7.c
  b480d858b39b79a443449bd8aaff9559  gcc/testsuite/gcc.dg/asm-8.c
  e370903640e76bf4ef407aafe0286689  gcc/testsuite/gcc.dg/asm-fs-1.c
  6c3cba24c3d3fbf660605697935b9be5  gcc/testsuite/gcc.dg/asm-names.c
! 7e9123fac67ff099c2e33d2894e9b53f  gcc/testsuite/gcc.dg/asmreg-1.c
  bff5bf12c7a752b89f17af335428c788  gcc/testsuite/gcc.dg/attr-alwaysinline.c
  460ba01d2c2d472f8d0bb00399dd3bba  gcc/testsuite/gcc.dg/attr-invalid.c
  2e8d579abde3b50be916cdcd11691f06  gcc/testsuite/gcc.dg/attr-nest.c
  9883b24101c5927c9d3eb8fc76b47a29  gcc/testsuite/gcc.dg/attr-noinline.c
  292821efd19a5d49bffff909953846d5  gcc/testsuite/gcc.dg/attr-used-2.c
  e123297fccae243c537f91e155c74a71  gcc/testsuite/gcc.dg/attr-used.c
  469df74770c7dec0525e6cd310092944  gcc/testsuite/gcc.dg/attr-warn-unused-result.c
  1119d66eeb90467d2bae27e88b92d6bf  gcc/testsuite/gcc.dg/bconstp-1.c
! 98810254a9373d4be18f23916e8255c6  gcc/testsuite/gcc.dg/bf-ms-attrib.c
  8e1df53077720e50550ca29c67f67c90  gcc/testsuite/gcc.dg/bf-ms-layout.c
  e090089f990b5c4d8a65df8844db30a1  gcc/testsuite/gcc.dg/bf-no-ms-layout.c
! c790eec2ea453a228ee2a2ade924a85b  gcc/testsuite/gcc.dg/bf-spl1.c
  d6eb381e794c5ffaa3dca7867f663df8  gcc/testsuite/gcc.dg/bitfld-1.c
! c3c68c734e8568392798dcc1fd65c7d9  gcc/testsuite/gcc.dg/bitfld-2.c
  38796e108aa68ea2dfb1b33c342cf867  gcc/testsuite/gcc.dg/bitfld-3.c
  b79035e9295f4ef4ced4f6b418e45b35  gcc/testsuite/gcc.dg/bitfld-4.c
  579283dba3dac1f39382575c193080d6  gcc/testsuite/gcc.dg/bitfld-5.c
  1796f24d3309ecb1a32d443b0f58fefa  gcc/testsuite/gcc.dg/bitfld-6.c
  b60ea9ce50ade1f6008751a751acd9a0  gcc/testsuite/gcc.dg/bitfld-7.c
  5e173732c86192eecfb5ca8741647d6d  gcc/testsuite/gcc.dg/bitfld-8.c
  b1edc038c34059aecce0deb693dc33c3  gcc/testsuite/gcc.dg/builtin-apply1.c
  dfd8cb769a07bf65b72b1976f33f8f8b  gcc/testsuite/gcc.dg/builtin-apply2.c
  6155415e6a9c81e35eba3dbe00f4cc71  gcc/testsuite/gcc.dg/builtin-apply3.c
  d07a3a7320e565e3928de7d9cfa008e1  gcc/testsuite/gcc.dg/builtin-choose-expr.c
! 48f51ff0b9bbfb87fceb511e9ed7606e  gcc/testsuite/gcc.dg/builtin-inf-1.c
! ab35651363b997b5111ef8040e7ad569  gcc/testsuite/gcc.dg/builtin-prefetch-1.c
  7417f03bbec90cbdedf38d88c232bef4  gcc/testsuite/gcc.dg/builtin-return-1.c
! afa6f7cf8475f02f8a61330b8eeb9826  gcc/testsuite/gcc.dg/builtins-1.c
! d49c7bf56a4b24cc8eb61d843a169ca5  gcc/testsuite/gcc.dg/builtins-10.c
  8601c0a71e7d1cdfd403a34911c56bcf  gcc/testsuite/gcc.dg/builtins-11.c
  31fba3ea2bbba3a61df667dd99beb26d  gcc/testsuite/gcc.dg/builtins-12.c
  dc837cbce372b65aca3276526dc5068a  gcc/testsuite/gcc.dg/builtins-13.c
  3b88273ac45effe9d2a80dd13149d195  gcc/testsuite/gcc.dg/builtins-14.c
  fb8a861f0df883044d474bffb2eb9153  gcc/testsuite/gcc.dg/builtins-15.c
  77d2c967af3a954c81bcf8e9dacd19c7  gcc/testsuite/gcc.dg/builtins-16.c
! 93ba4a33bfed410a8788a5d7103872c5  gcc/testsuite/gcc.dg/builtins-17.c
  d6800e35f69e3117066441a95b034d72  gcc/testsuite/gcc.dg/builtins-18.c
! 45b442c091aff07baead2628dfb9992c  gcc/testsuite/gcc.dg/builtins-19.c
! 03a6260d1357cf02cb4758abf1642416  gcc/testsuite/gcc.dg/builtins-2.c
! 9500d61f8aaa513790d2e7fda807efa4  gcc/testsuite/gcc.dg/builtins-20.c
! 377cb822bef1beb6522523741cbb02b4  gcc/testsuite/gcc.dg/builtins-21.c
  e80778ffff168210f09c92c87c4d7965  gcc/testsuite/gcc.dg/builtins-22.c
  97e2acd1f00df099c6286e60dd1d79bd  gcc/testsuite/gcc.dg/builtins-23.c
  9e19cea610e5195cf86571256d710068  gcc/testsuite/gcc.dg/builtins-24.c
- e3a80d5a8dfb8773c06d783636c3f4f2  gcc/testsuite/gcc.dg/builtins-25.c
  d05514a9f3c1d7b070ed85d1cd775e1b  gcc/testsuite/gcc.dg/builtins-26.c
  59babf06575d8142516915a3253f4dc3  gcc/testsuite/gcc.dg/builtins-27.c
  62b577dbe3bd44452c9adbe58857ab03  gcc/testsuite/gcc.dg/builtins-28.c
! c61305fdf59a2836c7074c03e1bcff5c  gcc/testsuite/gcc.dg/builtins-30.c
  d69eeaac13d2b5c1e59491bbfe70b4b1  gcc/testsuite/gcc.dg/builtins-35.c
  74b0490044a21687006890738ede5e8c  gcc/testsuite/gcc.dg/builtins-6.c
! 5b7fb426f3afdfd9bf2c33a260d7fdae  gcc/testsuite/gcc.dg/builtins-7.c
! 454af33ee6a5c794e853593ccc54b2cf  gcc/testsuite/gcc.dg/builtins-8.c
  6364406d43c3bf3c1af19d21027e1a8a  gcc/testsuite/gcc.dg/builtins-9.c
! 79ada06896bd93b93d22793df63a900b  gcc/testsuite/gcc.dg/builtins-config.h
  65e495bcc821b0c04c03e8e7c871913c  gcc/testsuite/gcc.dg/c90-array-lval-1.c
  37e70fabb75abb629dd8cb4a643c3b04  gcc/testsuite/gcc.dg/c90-array-lval-2.c
  2a4f797e3f246dcbf1e94b2150b31c2d  gcc/testsuite/gcc.dg/c90-array-lval-3.c
  7e3abd2770948c291dd217ec8ad41300  gcc/testsuite/gcc.dg/c90-array-lval-4.c
  548ffd73f2147ba058f384baca26bdb1  gcc/testsuite/gcc.dg/c90-array-lval-5.c
  430a54438ca76afd5524efd40b65c6ac  gcc/testsuite/gcc.dg/c90-array-lval-6.c
  dfe87ba3cb142447e210d27bf701de13  gcc/testsuite/gcc.dg/c90-arraydecl-1.c
  56da6c120e5bc69321d00b29c42eb01a  gcc/testsuite/gcc.dg/c90-complex-1.c
  b2710b891f3cdc34809e1174bec5b93c  gcc/testsuite/gcc.dg/c90-complit-1.c
  f1a5ae03b392f74106f5baaec9bab1c9  gcc/testsuite/gcc.dg/c90-const-expr-1.c
  ff76e6e2bb14e887b2d5fcf815075127  gcc/testsuite/gcc.dg/c90-const-expr-2.c
! ae03175a1626f9926d3b39a0b5c16147  gcc/testsuite/gcc.dg/c90-const-expr-3.c
  a29d9aae5471b142585071ca58081590  gcc/testsuite/gcc.dg/c90-digraph-1.c
  e5276aadb831e54d0b1946f2b38d598d  gcc/testsuite/gcc.dg/c90-dupqual-1.c
  17ae3df6421f28e9968577038819ebe9  gcc/testsuite/gcc.dg/c90-enum-comma-1.c
--- 15434,15567 ----
  cc0b1549bd1f797e2044f7e749bebbae  gcc/testsuite/gcc.dg/array-2.c
  1c72c1697779b727d1e4d4a57e4e0eff  gcc/testsuite/gcc.dg/array-3.c
  00b3b746d57a8a5f6b269324cc52d6e7  gcc/testsuite/gcc.dg/array-4.c
! 4e81c6cf1cab09118570623519c0f5d4  gcc/testsuite/gcc.dg/array-5.c
  01dbbeac61e35ce32d422105d0a99f4a  gcc/testsuite/gcc.dg/array-6.c
! 52b18d0d34cd07c4a2c060c8888f26fd  gcc/testsuite/gcc.dg/array-7.c
! 51109be91caf26e7e270f645b255e4c0  gcc/testsuite/gcc.dg/array-8.c
! 5b473d91c341753c37bbd58768ac6fa2  gcc/testsuite/gcc.dg/array-quals-1.c
! cf3b1a96abc750f6f181f5b35f3cb728  gcc/testsuite/gcc.dg/array-quals-2.c
  483707ff02a653b11cbb6ce469737e0d  gcc/testsuite/gcc.dg/asm-1.c
  b8a6dfeb58832a8b8624357eed99557a  gcc/testsuite/gcc.dg/asm-2.c
  b911cf51d486403e3ca1c067a8a15675  gcc/testsuite/gcc.dg/asm-3.c
  2316d7eec0825a9853d1052f4da7f63a  gcc/testsuite/gcc.dg/asm-4.c
  a6e6a20bfb66616db39b1382efe3d81f  gcc/testsuite/gcc.dg/asm-5.c
  239874d675ee6f1b851be81d0f1a7928  gcc/testsuite/gcc.dg/asm-6.c
! 364f23f60781d3e9acd1754da0633bbe  gcc/testsuite/gcc.dg/asm-7.c
  b480d858b39b79a443449bd8aaff9559  gcc/testsuite/gcc.dg/asm-8.c
+ c9481d742a48253660d16743a6beecf9  gcc/testsuite/gcc.dg/asm-9.c
+ bcbbadd260cb26dea44e22620dc945b0  gcc/testsuite/gcc.dg/asm-a.c
+ f31899dd392ba190be327bec1185df70  gcc/testsuite/gcc.dg/asm-b.c
  e370903640e76bf4ef407aafe0286689  gcc/testsuite/gcc.dg/asm-fs-1.c
  6c3cba24c3d3fbf660605697935b9be5  gcc/testsuite/gcc.dg/asm-names.c
! 1bafe5b89e4ed395ac3cf6a6402f3646  gcc/testsuite/gcc.dg/asm-qual-1.c
! 1595a83613f30a185d5b74d3f95171ae  gcc/testsuite/gcc.dg/asm-wide-1.c
! a5a76a31878bcc44537a13babdf4eac9  gcc/testsuite/gcc.dg/asmreg-1.c
! a26027e8bb2354fa867e30c37ca5de94  gcc/testsuite/gcc.dg/assign-warn-1.c
! 3e3451f76bb51f79a1a86c662b672aaa  gcc/testsuite/gcc.dg/assign-warn-2.c
! 0995442e27d091d9fc4f5e286fd8e86e  gcc/testsuite/gcc.dg/assign-warn-3.c
! bfcf3d61cfaeb70ffaf79290c46dc732  gcc/testsuite/gcc.dg/attr-alias-1.c
! e1871215b9eef07b10dc8c1bf21c038a  gcc/testsuite/gcc.dg/attr-alias-2.c
  bff5bf12c7a752b89f17af335428c788  gcc/testsuite/gcc.dg/attr-alwaysinline.c
  460ba01d2c2d472f8d0bb00399dd3bba  gcc/testsuite/gcc.dg/attr-invalid.c
+ dda577a8db5a9ac846b12e6d6d62a0dd  gcc/testsuite/gcc.dg/attr-may-alias-1.c
+ f298b442f1417f4a5a952b04dbe114b5  gcc/testsuite/gcc.dg/attr-mode-1.c
+ e427c17eb1d839cc3cf176d262cdffc0  gcc/testsuite/gcc.dg/attr-mode-2.c
  2e8d579abde3b50be916cdcd11691f06  gcc/testsuite/gcc.dg/attr-nest.c
  9883b24101c5927c9d3eb8fc76b47a29  gcc/testsuite/gcc.dg/attr-noinline.c
  292821efd19a5d49bffff909953846d5  gcc/testsuite/gcc.dg/attr-used-2.c
  e123297fccae243c537f91e155c74a71  gcc/testsuite/gcc.dg/attr-used.c
  469df74770c7dec0525e6cd310092944  gcc/testsuite/gcc.dg/attr-warn-unused-result.c
  1119d66eeb90467d2bae27e88b92d6bf  gcc/testsuite/gcc.dg/bconstp-1.c
! e8f408c5155fc185bd45ec08842876c7  gcc/testsuite/gcc.dg/bf-ms-attrib.c
  8e1df53077720e50550ca29c67f67c90  gcc/testsuite/gcc.dg/bf-ms-layout.c
  e090089f990b5c4d8a65df8844db30a1  gcc/testsuite/gcc.dg/bf-no-ms-layout.c
! 0484d2db4f17f8f14e407e0c2e6dccff  gcc/testsuite/gcc.dg/bf-spl1.c
  d6eb381e794c5ffaa3dca7867f663df8  gcc/testsuite/gcc.dg/bitfld-1.c
! 218ad3191b850bf5aa034c83f109c214  gcc/testsuite/gcc.dg/bitfld-10.c
! a4270c480cfd8514dd7e1126191c944f  gcc/testsuite/gcc.dg/bitfld-11.c
! ee49a418bb99331c4c3b86c9188f1466  gcc/testsuite/gcc.dg/bitfld-12.c
! 274ae4fe1ca57aa4b892cdf329e7bd39  gcc/testsuite/gcc.dg/bitfld-13.c
! 6e24ad6b2502d5ee4c338b598f5ed57c  gcc/testsuite/gcc.dg/bitfld-14.c
! 944c0a5046ab04618cc2722199b795c0  gcc/testsuite/gcc.dg/bitfld-2.c
  38796e108aa68ea2dfb1b33c342cf867  gcc/testsuite/gcc.dg/bitfld-3.c
  b79035e9295f4ef4ced4f6b418e45b35  gcc/testsuite/gcc.dg/bitfld-4.c
  579283dba3dac1f39382575c193080d6  gcc/testsuite/gcc.dg/bitfld-5.c
  1796f24d3309ecb1a32d443b0f58fefa  gcc/testsuite/gcc.dg/bitfld-6.c
  b60ea9ce50ade1f6008751a751acd9a0  gcc/testsuite/gcc.dg/bitfld-7.c
  5e173732c86192eecfb5ca8741647d6d  gcc/testsuite/gcc.dg/bitfld-8.c
+ f20dc29e83d58947caff33aa2702ed30  gcc/testsuite/gcc.dg/bitfld-9.c
  b1edc038c34059aecce0deb693dc33c3  gcc/testsuite/gcc.dg/builtin-apply1.c
  dfd8cb769a07bf65b72b1976f33f8f8b  gcc/testsuite/gcc.dg/builtin-apply2.c
  6155415e6a9c81e35eba3dbe00f4cc71  gcc/testsuite/gcc.dg/builtin-apply3.c
+ 16fa5311a59de774a657f7f9ac7ff9b2  gcc/testsuite/gcc.dg/builtin-apply4.c
+ 06a0c3dba9fe56f3e500044c2efa4a31  gcc/testsuite/gcc.dg/builtin-choose-expr-2.c
  d07a3a7320e565e3928de7d9cfa008e1  gcc/testsuite/gcc.dg/builtin-choose-expr.c
! 42a1a77675610e6120a1dc5b89a4cc2b  gcc/testsuite/gcc.dg/builtin-inf-1.c
! 8a97ebf058fb89f3b374807943c1fa63  gcc/testsuite/gcc.dg/builtin-prefetch-1.c
! 48192e5b69d73b862455c354ffe3202b  gcc/testsuite/gcc.dg/builtin-protos-1.c
  7417f03bbec90cbdedf38d88c232bef4  gcc/testsuite/gcc.dg/builtin-return-1.c
! b7d23eb2d461cabd0638f996b194cd11  gcc/testsuite/gcc.dg/builtins-1.c
! 4b8306967051dce8b37f3a3b1157dff9  gcc/testsuite/gcc.dg/builtins-10.c
  8601c0a71e7d1cdfd403a34911c56bcf  gcc/testsuite/gcc.dg/builtins-11.c
  31fba3ea2bbba3a61df667dd99beb26d  gcc/testsuite/gcc.dg/builtins-12.c
  dc837cbce372b65aca3276526dc5068a  gcc/testsuite/gcc.dg/builtins-13.c
  3b88273ac45effe9d2a80dd13149d195  gcc/testsuite/gcc.dg/builtins-14.c
  fb8a861f0df883044d474bffb2eb9153  gcc/testsuite/gcc.dg/builtins-15.c
  77d2c967af3a954c81bcf8e9dacd19c7  gcc/testsuite/gcc.dg/builtins-16.c
! 08090ce3f386d96e639f0161b5af4e65  gcc/testsuite/gcc.dg/builtins-17.c
  d6800e35f69e3117066441a95b034d72  gcc/testsuite/gcc.dg/builtins-18.c
! 902e71902800dce0624e70a4770794ae  gcc/testsuite/gcc.dg/builtins-19.c
! a5a7384e5b7cee40e9ab054cb0319ebd  gcc/testsuite/gcc.dg/builtins-2.c
! ec01b70859ae62b748f332b9f82819ee  gcc/testsuite/gcc.dg/builtins-20.c
! a45eb59032dd5afd3baaed5f20fcfee4  gcc/testsuite/gcc.dg/builtins-21.c
  e80778ffff168210f09c92c87c4d7965  gcc/testsuite/gcc.dg/builtins-22.c
  97e2acd1f00df099c6286e60dd1d79bd  gcc/testsuite/gcc.dg/builtins-23.c
  9e19cea610e5195cf86571256d710068  gcc/testsuite/gcc.dg/builtins-24.c
  d05514a9f3c1d7b070ed85d1cd775e1b  gcc/testsuite/gcc.dg/builtins-26.c
  59babf06575d8142516915a3253f4dc3  gcc/testsuite/gcc.dg/builtins-27.c
  62b577dbe3bd44452c9adbe58857ab03  gcc/testsuite/gcc.dg/builtins-28.c
! 35f5241741e159c760a77abb9eb3d29e  gcc/testsuite/gcc.dg/builtins-30.c
! 55b2d153e6c018c68549899385ae1a39  gcc/testsuite/gcc.dg/builtins-31.c
! 472c18722dee1f95e33866a86e47acc1  gcc/testsuite/gcc.dg/builtins-32.c
! 0d7fe370a8eba51bb8a7df86a88e0598  gcc/testsuite/gcc.dg/builtins-33.c
! c92862f3278577c4a7f24d10c6a94a89  gcc/testsuite/gcc.dg/builtins-34.c
  d69eeaac13d2b5c1e59491bbfe70b4b1  gcc/testsuite/gcc.dg/builtins-35.c
+ 646683e0f0fb7d0dc714e533639d6f4d  gcc/testsuite/gcc.dg/builtins-36.c
+ a036d780a44abc0e2b5056e6a8c46257  gcc/testsuite/gcc.dg/builtins-37.c
+ 38b6a501f4b6ce747ec65e6022480431  gcc/testsuite/gcc.dg/builtins-38.c
+ aba6bfb99076e0db80caf2664cddf941  gcc/testsuite/gcc.dg/builtins-39.c
+ b26884b869b1cbae2bea0eb391f803c4  gcc/testsuite/gcc.dg/builtins-40.c
+ 2ce5026df3d1b8adc472542a1e7906a4  gcc/testsuite/gcc.dg/builtins-41.c
+ 5f26c1513389a94f4461b4d890e1cf05  gcc/testsuite/gcc.dg/builtins-43.c
+ 468c8c89febe86bc5b722ae8ba879d16  gcc/testsuite/gcc.dg/builtins-44.c
+ e0c3b39c6ca94bf5ae51b9c20e6bd272  gcc/testsuite/gcc.dg/builtins-45.c
+ 6184f11cfe9bbc30a76839f4893889b5  gcc/testsuite/gcc.dg/builtins-46.c
+ 645a5b08cbad2371479fb9f982a43941  gcc/testsuite/gcc.dg/builtins-47.c
+ 2251c029a2c2f4db6807ee58eba05176  gcc/testsuite/gcc.dg/builtins-48.c
+ d356a5f2cacecd4d84c62758c4277dac  gcc/testsuite/gcc.dg/builtins-49.c
+ 2d4bd355128819609993501797dd1a26  gcc/testsuite/gcc.dg/builtins-50.c
+ 3c8415b2a182d4b7f3129f6deee6b474  gcc/testsuite/gcc.dg/builtins-51.c
+ 3c46dca0d5305df472be7eab69a458cd  gcc/testsuite/gcc.dg/builtins-52.c
  74b0490044a21687006890738ede5e8c  gcc/testsuite/gcc.dg/builtins-6.c
! 1863267706e2e098673111de96a7b9c7  gcc/testsuite/gcc.dg/builtins-7.c
! 09b9acbd7b317ff4b7211dc9813eaf47  gcc/testsuite/gcc.dg/builtins-8.c
  6364406d43c3bf3c1af19d21027e1a8a  gcc/testsuite/gcc.dg/builtins-9.c
! 4faf74f11b82d4431158cced8acf9f97  gcc/testsuite/gcc.dg/builtins-config.h
  65e495bcc821b0c04c03e8e7c871913c  gcc/testsuite/gcc.dg/c90-array-lval-1.c
  37e70fabb75abb629dd8cb4a643c3b04  gcc/testsuite/gcc.dg/c90-array-lval-2.c
  2a4f797e3f246dcbf1e94b2150b31c2d  gcc/testsuite/gcc.dg/c90-array-lval-3.c
  7e3abd2770948c291dd217ec8ad41300  gcc/testsuite/gcc.dg/c90-array-lval-4.c
  548ffd73f2147ba058f384baca26bdb1  gcc/testsuite/gcc.dg/c90-array-lval-5.c
  430a54438ca76afd5524efd40b65c6ac  gcc/testsuite/gcc.dg/c90-array-lval-6.c
+ 60c414bf9d24991ec230162a7e250680  gcc/testsuite/gcc.dg/c90-array-lval-7.c
+ ec0ea7a4a37d919a111d18227bfbf85c  gcc/testsuite/gcc.dg/c90-array-quals-2.c
+ eb67599b3babd964f32070e29a0b64b3  gcc/testsuite/gcc.dg/c90-array-quals.c
  dfe87ba3cb142447e210d27bf701de13  gcc/testsuite/gcc.dg/c90-arraydecl-1.c
  56da6c120e5bc69321d00b29c42eb01a  gcc/testsuite/gcc.dg/c90-complex-1.c
  b2710b891f3cdc34809e1174bec5b93c  gcc/testsuite/gcc.dg/c90-complit-1.c
  f1a5ae03b392f74106f5baaec9bab1c9  gcc/testsuite/gcc.dg/c90-const-expr-1.c
  ff76e6e2bb14e887b2d5fcf815075127  gcc/testsuite/gcc.dg/c90-const-expr-2.c
! 3f8dba81f2d566c33e8fe2929c105748  gcc/testsuite/gcc.dg/c90-const-expr-3.c
  a29d9aae5471b142585071ca58081590  gcc/testsuite/gcc.dg/c90-digraph-1.c
  e5276aadb831e54d0b1946f2b38d598d  gcc/testsuite/gcc.dg/c90-dupqual-1.c
  17ae3df6421f28e9968577038819ebe9  gcc/testsuite/gcc.dg/c90-enum-comma-1.c
*************** e08c815b6633c688e71c3ee0b30dd223  gcc/te
*** 14665,14675 ****
  574a9cf6ce774916c5606c24e9b48877  gcc/testsuite/gcc.dg/c90-impl-int-2.c
  215de2e5db74dfddc57070672f9eae0c  gcc/testsuite/gcc.dg/c90-init-1.c
  8ec2a9e430c02d028173e90b50b6a6a5  gcc/testsuite/gcc.dg/c90-intconst-1.c
  01805d9e83ade9d1b5b052880358c7b6  gcc/testsuite/gcc.dg/c90-longlong-1.c
  785645aefff1abaa248c406a8bd62ee2  gcc/testsuite/gcc.dg/c90-mixdecl-1.c
! cf707220a04e45bb14eb4ad6030bffc3  gcc/testsuite/gcc.dg/c90-restrict-1.c
  4036f50722c90308b5a60c44ab2124d6  gcc/testsuite/gcc.dg/c90-return-1.c
  cd99f3f3f6e51138397545b848e2e4d9  gcc/testsuite/gcc.dg/c90-scope-1.c
  5202464092107e32685dda23214603a1  gcc/testsuite/gcc.dg/c90-vla-1.c
  79d9bc4842e264f0790f26742ef722e6  gcc/testsuite/gcc.dg/c94-digraph-1.c
  ad3cd08a0228e34fe454954f771c5d30  gcc/testsuite/gcc.dg/c99-array-lval-1.c
--- 15578,15591 ----
  574a9cf6ce774916c5606c24e9b48877  gcc/testsuite/gcc.dg/c90-impl-int-2.c
  215de2e5db74dfddc57070672f9eae0c  gcc/testsuite/gcc.dg/c90-init-1.c
  8ec2a9e430c02d028173e90b50b6a6a5  gcc/testsuite/gcc.dg/c90-intconst-1.c
+ 0ca9535929bd4de1c3d6a6ffe1021421  gcc/testsuite/gcc.dg/c90-intprom-1.c
  01805d9e83ade9d1b5b052880358c7b6  gcc/testsuite/gcc.dg/c90-longlong-1.c
  785645aefff1abaa248c406a8bd62ee2  gcc/testsuite/gcc.dg/c90-mixdecl-1.c
! e27b75cdeed7ae634ebf3e61ac43bc37  gcc/testsuite/gcc.dg/c90-restrict-1.c
  4036f50722c90308b5a60c44ab2124d6  gcc/testsuite/gcc.dg/c90-return-1.c
  cd99f3f3f6e51138397545b848e2e4d9  gcc/testsuite/gcc.dg/c90-scope-1.c
+ f8d34a4702cbb345228d46c265e796ab  gcc/testsuite/gcc.dg/c90-static-1.c
+ 5112aefc9d228bd0fe34ebc2f73ffe5f  gcc/testsuite/gcc.dg/c90-typespec-1.c
  5202464092107e32685dda23214603a1  gcc/testsuite/gcc.dg/c90-vla-1.c
  79d9bc4842e264f0790f26742ef722e6  gcc/testsuite/gcc.dg/c94-digraph-1.c
  ad3cd08a0228e34fe454954f771c5d30  gcc/testsuite/gcc.dg/c99-array-lval-1.c
*************** ad3cd08a0228e34fe454954f771c5d30  gcc/te
*** 14678,14686 ****
  95537863a95ec33c3ef5090afbec2bcc  gcc/testsuite/gcc.dg/c99-array-lval-4.c
  e8c1c74b4fe734cb32bb87269e992c2c  gcc/testsuite/gcc.dg/c99-array-lval-5.c
  6c47831925ce9c7146b134280148ec22  gcc/testsuite/gcc.dg/c99-array-lval-6.c
  aafe4a0422bffff28202e4a048e18bd9  gcc/testsuite/gcc.dg/c99-array-nonobj-1.c
  043fb1f1e16c6a663e42a4212fd89721  gcc/testsuite/gcc.dg/c99-arraydecl-1.c
! 7736f4a7e1796402d5c3e316f5a1e125  gcc/testsuite/gcc.dg/c99-arraydecl-2.c
  b4de3b2e2ddeb5f17dbe13145e1a16c0  gcc/testsuite/gcc.dg/c99-bool-1.c
  a5ac557243536489e28fb79793ff0997  gcc/testsuite/gcc.dg/c99-complex-1.c
  60563d75fb72a3ec58f80f51f2612119  gcc/testsuite/gcc.dg/c99-complex-2.c
--- 15594,15603 ----
  95537863a95ec33c3ef5090afbec2bcc  gcc/testsuite/gcc.dg/c99-array-lval-4.c
  e8c1c74b4fe734cb32bb87269e992c2c  gcc/testsuite/gcc.dg/c99-array-lval-5.c
  6c47831925ce9c7146b134280148ec22  gcc/testsuite/gcc.dg/c99-array-lval-6.c
+ a702c8b267bd2fbef0921f46eb89d918  gcc/testsuite/gcc.dg/c99-array-lval-7.c
  aafe4a0422bffff28202e4a048e18bd9  gcc/testsuite/gcc.dg/c99-array-nonobj-1.c
  043fb1f1e16c6a663e42a4212fd89721  gcc/testsuite/gcc.dg/c99-arraydecl-1.c
! 7478141a3142498a969c4b60d0c04bc8  gcc/testsuite/gcc.dg/c99-arraydecl-2.c
  b4de3b2e2ddeb5f17dbe13145e1a16c0  gcc/testsuite/gcc.dg/c99-bool-1.c
  a5ac557243536489e28fb79793ff0997  gcc/testsuite/gcc.dg/c99-complex-1.c
  60563d75fb72a3ec58f80f51f2612119  gcc/testsuite/gcc.dg/c99-complex-2.c
*************** aa7bab141fd666c2a56be04f27bdeff3  gcc/te
*** 14696,14707 ****
  d58f496a6f922a17d937e750ba0c6501  gcc/testsuite/gcc.dg/c99-flex-array-1.c
  7d2ab62ce947a9225643fdacf7f0027b  gcc/testsuite/gcc.dg/c99-flex-array-2.c
  78cc42248bdb52d6652c4f541f002708  gcc/testsuite/gcc.dg/c99-flex-array-3.c
! 44342b04692037f5bcb0d6f3be41b3e6  gcc/testsuite/gcc.dg/c99-flex-array-4.c
  357defe1afec2f085b1d06de285a26d1  gcc/testsuite/gcc.dg/c99-float-1.c
  b9cefc3b995f8bed2031fe01ccec8a9d  gcc/testsuite/gcc.dg/c99-fordecl-1.c
  40948d2547b0d7616de8e5419f1012c3  gcc/testsuite/gcc.dg/c99-fordecl-2.c
  e143f6b5b7a174ccaec570aa87bb32b9  gcc/testsuite/gcc.dg/c99-func-1.c
! 9dbbc19841b544a1c12208a46ff3af53  gcc/testsuite/gcc.dg/c99-func-2.c
  1e18093fcd9a44bb9936630efd4fff29  gcc/testsuite/gcc.dg/c99-func-3.c
  99dfbe0c047292e19871d4abbc567df3  gcc/testsuite/gcc.dg/c99-func-4.c
  86b0883204030931b1dd5d4955d3516e  gcc/testsuite/gcc.dg/c99-hexfloat-1.c
--- 15613,15625 ----
  d58f496a6f922a17d937e750ba0c6501  gcc/testsuite/gcc.dg/c99-flex-array-1.c
  7d2ab62ce947a9225643fdacf7f0027b  gcc/testsuite/gcc.dg/c99-flex-array-2.c
  78cc42248bdb52d6652c4f541f002708  gcc/testsuite/gcc.dg/c99-flex-array-3.c
! 6275d7666851c39852114ed82735567e  gcc/testsuite/gcc.dg/c99-flex-array-5.c
  357defe1afec2f085b1d06de285a26d1  gcc/testsuite/gcc.dg/c99-float-1.c
  b9cefc3b995f8bed2031fe01ccec8a9d  gcc/testsuite/gcc.dg/c99-fordecl-1.c
  40948d2547b0d7616de8e5419f1012c3  gcc/testsuite/gcc.dg/c99-fordecl-2.c
+ 536c8aa324ff972f01f4e11d6983c00a  gcc/testsuite/gcc.dg/c99-fordecl-3.c
  e143f6b5b7a174ccaec570aa87bb32b9  gcc/testsuite/gcc.dg/c99-func-1.c
! 338864dd7cc81a81f92c6f1d9b55d5ef  gcc/testsuite/gcc.dg/c99-func-2.c
  1e18093fcd9a44bb9936630efd4fff29  gcc/testsuite/gcc.dg/c99-func-3.c
  99dfbe0c047292e19871d4abbc567df3  gcc/testsuite/gcc.dg/c99-func-4.c
  86b0883204030931b1dd5d4955d3516e  gcc/testsuite/gcc.dg/c99-hexfloat-1.c
*************** e5256d7b7151795561825606d8064ba2  gcc/te
*** 14714,14720 ****
--- 15632,15641 ----
  44d1690347b9a2bce9a5100ab03c5c99  gcc/testsuite/gcc.dg/c99-impl-int-2.c
  b70644875586b02f7adadec75d082b70  gcc/testsuite/gcc.dg/c99-init-1.c
  94fb1f235c1d19530bd9c3fa8c93263a  gcc/testsuite/gcc.dg/c99-init-2.c
+ 68c754defbd2d4f30dd04e21fabbf4b7  gcc/testsuite/gcc.dg/c99-init-3.c
+ c9fd4355215d2e2eab45300985916bbf  gcc/testsuite/gcc.dg/c99-init-4.c
  2afde1c42a1b534a699e7bb6dc19a998  gcc/testsuite/gcc.dg/c99-intconst-1.c
+ 948204f1a878c3ffc184111ac6ca6d4c  gcc/testsuite/gcc.dg/c99-intprom-1.c
  fec78b820c017ed35b0a8525c3c4f719  gcc/testsuite/gcc.dg/c99-longlong-1.c
  8637b4538a417c2d58ee5294049e63fc  gcc/testsuite/gcc.dg/c99-main-1.c
  7ca67f3f8acb9cefd81e65f2036d6e40  gcc/testsuite/gcc.dg/c99-mixdecl-1.c
*************** e1abd74129c9807dc7c05ec223797173  gcc/te
*** 14723,14746 ****
  a0dfad4f94401d17f6fcc84a7addff8e  gcc/testsuite/gcc.dg/c99-return-1.c
  083e01a62a75327d18541914e7f5ea55  gcc/testsuite/gcc.dg/c99-scope-1.c
  b96b4717d6559f968404758dabd5e68c  gcc/testsuite/gcc.dg/c99-scope-2.c
  29116650e1351b70fc93d7b3fc82e81d  gcc/testsuite/gcc.dg/c99-tag-1.c
  0c5395a91c85984f3d3fb3d6f5c43ac0  gcc/testsuite/gcc.dg/c99-vla-1.c
  f6b941711416a1d0f0a182376758c534  gcc/testsuite/gcc.dg/cast-function-1.c
! 2b8f2ac6527ef479fe117f891ff1619b  gcc/testsuite/gcc.dg/cast-lvalue-1.c
  7cdaaaf3eeef5db1f78cee824ad191e6  gcc/testsuite/gcc.dg/cast-qual-1.c
  dd7758008e0800aefdf053ec6be3d88b  gcc/testsuite/gcc.dg/cast-qual-2.c
  fe287e9d15ae209514d8db7c0c2cd9e7  gcc/testsuite/gcc.dg/cleanup-1.c
! 7deb3cfd04554f0156e7f3e8cb1e317f  gcc/testsuite/gcc.dg/cleanup-10.c
! 40aeed459390f00228841c835728cda4  gcc/testsuite/gcc.dg/cleanup-11.c
  78bae3132e2068a254f88515c6bf0640  gcc/testsuite/gcc.dg/cleanup-2.c
  c2a1d7446900f7baf929104c039559f3  gcc/testsuite/gcc.dg/cleanup-3.c
  fc4b23c0fc21775250b7d884eb0fe56e  gcc/testsuite/gcc.dg/cleanup-4.c
! 21679b2ce5368a41f449be10092ede49  gcc/testsuite/gcc.dg/cleanup-5.c
  d9e45b781a97ee5ac71b788011eae52c  gcc/testsuite/gcc.dg/cleanup-6.c
  63f9f4f172f1c35d6e9325335509bbae  gcc/testsuite/gcc.dg/cleanup-7.c
! 7a07650b17dba08692365497a66faf2b  gcc/testsuite/gcc.dg/cleanup-8.c
! dc5d8382d9f723ce1cc642517af5c498  gcc/testsuite/gcc.dg/cleanup-9.c
  bdf077f4875b4258b16a4864685f87f7  gcc/testsuite/gcc.dg/clobbers.c
  243a5845fa69dd1be55985444a123d91  gcc/testsuite/gcc.dg/compare1.c
  3e315196fd421ea8ce95987c57ee475f  gcc/testsuite/gcc.dg/compare2.c
  d69421ce8f4ddbba36c1551bcdec9246  gcc/testsuite/gcc.dg/compare3.c
--- 15644,15692 ----
  a0dfad4f94401d17f6fcc84a7addff8e  gcc/testsuite/gcc.dg/c99-return-1.c
  083e01a62a75327d18541914e7f5ea55  gcc/testsuite/gcc.dg/c99-scope-1.c
  b96b4717d6559f968404758dabd5e68c  gcc/testsuite/gcc.dg/c99-scope-2.c
+ 7f18ce1c2ba7c04541597ba1a2438163  gcc/testsuite/gcc.dg/c99-static-1.c
  29116650e1351b70fc93d7b3fc82e81d  gcc/testsuite/gcc.dg/c99-tag-1.c
+ 4ded0fbf4c885a50d6aabe51bc417569  gcc/testsuite/gcc.dg/c99-tag-2.c
+ 18ba45c5827dda6f3d26201ab9d5a92c  gcc/testsuite/gcc.dg/c99-tag-3.c
+ a83075734393e2c337de51f1933f2fe0  gcc/testsuite/gcc.dg/c99-typespec-1.c
  0c5395a91c85984f3d3fb3d6f5c43ac0  gcc/testsuite/gcc.dg/c99-vla-1.c
+ f3455c05f1c1e262d0e090c0088091df  gcc/testsuite/gcc.dg/cast-1.c
+ e1f84808b1e5792ebbce7a2e502ab8cd  gcc/testsuite/gcc.dg/cast-2.c
+ 4c753e21040ece532458b0ac41825aa5  gcc/testsuite/gcc.dg/cast-3.c
  f6b941711416a1d0f0a182376758c534  gcc/testsuite/gcc.dg/cast-function-1.c
! ab62c02479e5d93e2c7e4031a1cb1a1c  gcc/testsuite/gcc.dg/cast-lvalue-1.c
! ef9cdcc336fe0a345f163348251db810  gcc/testsuite/gcc.dg/cast-lvalue-2.c
  7cdaaaf3eeef5db1f78cee824ad191e6  gcc/testsuite/gcc.dg/cast-qual-1.c
  dd7758008e0800aefdf053ec6be3d88b  gcc/testsuite/gcc.dg/cast-qual-2.c
+ 9c1af6a5f1547d7888309e68fa1e645e  gcc/testsuite/gcc.dg/charset/asm1.c
+ de11a3779b8f68e37026c0989fe00062  gcc/testsuite/gcc.dg/charset/asm2.c
+ c277dfaaf369abc23e9a10195435da17  gcc/testsuite/gcc.dg/charset/asm3.c
+ bd34927c7e8ef0637a91744aa30c8e22  gcc/testsuite/gcc.dg/charset/asm4.c
+ 95c9ba623a35c6483572e167a551f474  gcc/testsuite/gcc.dg/charset/asm5.c
+ 13aa9df754ce327f35901d755310d167  gcc/testsuite/gcc.dg/charset/asm6.c
+ 188e64ef71cd1832cf590f89eb899d5b  gcc/testsuite/gcc.dg/charset/attribute1.c
+ f1b0caab2fba40cb96b5f676d3e5466e  gcc/testsuite/gcc.dg/charset/attribute2.c
+ d256d028f437be7e103b223e7c20fe96  gcc/testsuite/gcc.dg/charset/builtin1.c
+ 850025cbdd3b176ffa048d466ecd594f  gcc/testsuite/gcc.dg/charset/charset.exp
+ 8c029ca8175e4d8995ea0dbac6040733  gcc/testsuite/gcc.dg/charset/extern.c
+ 5314225894f8ef8a8d8249f4a0973380  gcc/testsuite/gcc.dg/charset/function.c
+ a59f9cb8c1327a655a207f133f19d6fb  gcc/testsuite/gcc.dg/charset/string.c
  fe287e9d15ae209514d8db7c0c2cd9e7  gcc/testsuite/gcc.dg/cleanup-1.c
! 4ad8763517023fa5567bd072fc2df927  gcc/testsuite/gcc.dg/cleanup-10.c
! 3f858e681be76edc2ea6cc0987d18154  gcc/testsuite/gcc.dg/cleanup-11.c
  78bae3132e2068a254f88515c6bf0640  gcc/testsuite/gcc.dg/cleanup-2.c
  c2a1d7446900f7baf929104c039559f3  gcc/testsuite/gcc.dg/cleanup-3.c
  fc4b23c0fc21775250b7d884eb0fe56e  gcc/testsuite/gcc.dg/cleanup-4.c
! 21fd4d1ea68395c18169fce83d854b92  gcc/testsuite/gcc.dg/cleanup-5.c
  d9e45b781a97ee5ac71b788011eae52c  gcc/testsuite/gcc.dg/cleanup-6.c
  63f9f4f172f1c35d6e9325335509bbae  gcc/testsuite/gcc.dg/cleanup-7.c
! 4bfe185a37b9ec6e785119565734e9f8  gcc/testsuite/gcc.dg/cleanup-8.c
! 2db88f3556d9bbe4b173031d196d31e6  gcc/testsuite/gcc.dg/cleanup-9.c
  bdf077f4875b4258b16a4864685f87f7  gcc/testsuite/gcc.dg/clobbers.c
+ 5df802dba7a30df3344497d28b7cab6c  gcc/testsuite/gcc.dg/comp-goto-1.c
+ ba41735f5c3b440d3bffdb1c635af97d  gcc/testsuite/gcc.dg/comp-goto-2.c
+ 1372946268c491d46a6d2c804a2d7a33  gcc/testsuite/gcc.dg/comp-goto-3.c
+ 78fe3f6717c09fb4c953681eb32836bf  gcc/testsuite/gcc.dg/comp-return-1.c
  243a5845fa69dd1be55985444a123d91  gcc/testsuite/gcc.dg/compare1.c
  3e315196fd421ea8ce95987c57ee475f  gcc/testsuite/gcc.dg/compare2.c
  d69421ce8f4ddbba36c1551bcdec9246  gcc/testsuite/gcc.dg/compare3.c
*************** b269b834350aa54824f18692ec18d2e2  gcc/te
*** 14748,14754 ****
  fb54850354fdbb7e291d2545619f020b  gcc/testsuite/gcc.dg/compare5.c
  04d6c776fe8f4b00302a1dba782d78cc  gcc/testsuite/gcc.dg/compare6.c
  284fb8580a68ffb43cd6989f7dd773ec  gcc/testsuite/gcc.dg/compare7.c
! eb6c5602961276d25b92bd0acb94820f  gcc/testsuite/gcc.dg/compat/compat-common.h
  1b59e9b616e3b7eddfb029ecc7dffe55  gcc/testsuite/gcc.dg/compat/compat.exp
  24894b4e4b3498731affefac610f0a05  gcc/testsuite/gcc.dg/compat/fnptr-by-value-1_main.c
  fe9eda5144c4b80c732bde86debf0550  gcc/testsuite/gcc.dg/compat/fnptr-by-value-1_x.c
--- 15694,15701 ----
  fb54850354fdbb7e291d2545619f020b  gcc/testsuite/gcc.dg/compare5.c
  04d6c776fe8f4b00302a1dba782d78cc  gcc/testsuite/gcc.dg/compare6.c
  284fb8580a68ffb43cd6989f7dd773ec  gcc/testsuite/gcc.dg/compare7.c
! b67b3401cc9029ef7560e597d5ad8905  gcc/testsuite/gcc.dg/compare8.c
! 2953f7137cafc5117041c87f712943eb  gcc/testsuite/gcc.dg/compat/compat-common.h
  1b59e9b616e3b7eddfb029ecc7dffe55  gcc/testsuite/gcc.dg/compat/compat.exp
  24894b4e4b3498731affefac610f0a05  gcc/testsuite/gcc.dg/compat/fnptr-by-value-1_main.c
  fe9eda5144c4b80c732bde86debf0550  gcc/testsuite/gcc.dg/compat/fnptr-by-value-1_x.c
*************** c68128b6c6689ee6c4932e83f20fca33  gcc/te
*** 14761,14769 ****
  f54063862700224653665ff7f4cd5e29  gcc/testsuite/gcc.dg/compat/fp2-struct-check.h
  107d53431c1b0540c6064bdcc553d976  gcc/testsuite/gcc.dg/compat/fp2-struct-defs.h
  59ca841f17677fc8a60f3e9b812cffb3  gcc/testsuite/gcc.dg/compat/fp2-struct-init.h
! f720ee8bc0e3f86f207591704a39a943  gcc/testsuite/gcc.dg/compat/mixed-struct-check.h
! 4a38fef7ca08b49b3cd52a7094696f9d  gcc/testsuite/gcc.dg/compat/mixed-struct-defs.h
! a39bbe3dd1d2b0677ecb1c3f822f4424  gcc/testsuite/gcc.dg/compat/mixed-struct-init.h
  fc5dafe10d6650cf4d9a8fd5fb187f59  gcc/testsuite/gcc.dg/compat/scalar-by-value-1_main.c
  34b45138296b5aa7dd411fa08de1df98  gcc/testsuite/gcc.dg/compat/scalar-by-value-1_x.c
  ebfa2ff6c25bd35bc7465e300b17eb47  gcc/testsuite/gcc.dg/compat/scalar-by-value-1_y.c
--- 15708,15719 ----
  f54063862700224653665ff7f4cd5e29  gcc/testsuite/gcc.dg/compat/fp2-struct-check.h
  107d53431c1b0540c6064bdcc553d976  gcc/testsuite/gcc.dg/compat/fp2-struct-defs.h
  59ca841f17677fc8a60f3e9b812cffb3  gcc/testsuite/gcc.dg/compat/fp2-struct-init.h
! e51cffd2b4e6986535bf4c0c08739b50  gcc/testsuite/gcc.dg/compat/generate-random.c
! d3ba3071933d8c1696a3d262882b54cc  gcc/testsuite/gcc.dg/compat/generate-random.h
! bf2390598d467fdc761ba4019854324b  gcc/testsuite/gcc.dg/compat/generate-random_r.c
! 96e66d811afbddf820fffec4485a28c5  gcc/testsuite/gcc.dg/compat/mixed-struct-check.h
! 33b111287b9ff87242fe27859d89a852  gcc/testsuite/gcc.dg/compat/mixed-struct-defs.h
! afd394c71967624882d06b437c9681ca  gcc/testsuite/gcc.dg/compat/mixed-struct-init.h
  fc5dafe10d6650cf4d9a8fd5fb187f59  gcc/testsuite/gcc.dg/compat/scalar-by-value-1_main.c
  34b45138296b5aa7dd411fa08de1df98  gcc/testsuite/gcc.dg/compat/scalar-by-value-1_x.c
  ebfa2ff6c25bd35bc7465e300b17eb47  gcc/testsuite/gcc.dg/compat/scalar-by-value-1_y.c
*************** ff234a7981f49027f0ac826701374e60  gcc/te
*** 14771,14781 ****
  d16d7f53eab914e86ef3d32e88d5524a  gcc/testsuite/gcc.dg/compat/scalar-by-value-2_x.c
  2169440223aee47ca7d4a431a245cb01  gcc/testsuite/gcc.dg/compat/scalar-by-value-2_y.c
  80aef5b6d5b7044172f4500aadb39ef6  gcc/testsuite/gcc.dg/compat/scalar-by-value-3_main.c
! 81ae44ad761fb1a11ed75a17e44dec8b  gcc/testsuite/gcc.dg/compat/scalar-by-value-3_x.c
! 4a01ec3e7cca7719a043b1d2fc3d21f5  gcc/testsuite/gcc.dg/compat/scalar-by-value-3_y.c
  ff992141ddbef75d5ec85d6757727224  gcc/testsuite/gcc.dg/compat/scalar-by-value-4_main.c
! 14c254e9f79ab689913a54d3a8b33b8e  gcc/testsuite/gcc.dg/compat/scalar-by-value-4_x.c
! 8cb8e1b1f2efd07263c9f573dc57cfeb  gcc/testsuite/gcc.dg/compat/scalar-by-value-4_y.c
  9b18f6af8dfd660bbe2e9858aa9a1a05  gcc/testsuite/gcc.dg/compat/scalar-return-1_main.c
  86d6fcbbe8142e697b86b9d5f59b97a9  gcc/testsuite/gcc.dg/compat/scalar-return-1_x.c
  fc2e94e907c5ff63fec70d21318bee01  gcc/testsuite/gcc.dg/compat/scalar-return-1_y.c
--- 15721,15731 ----
  d16d7f53eab914e86ef3d32e88d5524a  gcc/testsuite/gcc.dg/compat/scalar-by-value-2_x.c
  2169440223aee47ca7d4a431a245cb01  gcc/testsuite/gcc.dg/compat/scalar-by-value-2_y.c
  80aef5b6d5b7044172f4500aadb39ef6  gcc/testsuite/gcc.dg/compat/scalar-by-value-3_main.c
! 82c886af3bf1ab606d24b23b6116517d  gcc/testsuite/gcc.dg/compat/scalar-by-value-3_x.c
! 88495c53746a0b1b1f09e7bd822fb5a9  gcc/testsuite/gcc.dg/compat/scalar-by-value-3_y.c
  ff992141ddbef75d5ec85d6757727224  gcc/testsuite/gcc.dg/compat/scalar-by-value-4_main.c
! 70560b597d0c00587c2c8bea5abd6129  gcc/testsuite/gcc.dg/compat/scalar-by-value-4_x.c
! 32e9d286c69505574e5824aa57a108c0  gcc/testsuite/gcc.dg/compat/scalar-by-value-4_y.c
  9b18f6af8dfd660bbe2e9858aa9a1a05  gcc/testsuite/gcc.dg/compat/scalar-return-1_main.c
  86d6fcbbe8142e697b86b9d5f59b97a9  gcc/testsuite/gcc.dg/compat/scalar-return-1_x.c
  fc2e94e907c5ff63fec70d21318bee01  gcc/testsuite/gcc.dg/compat/scalar-return-1_y.c
*************** c6468d0763088c3aac754090592b3ba7  gcc/te
*** 14783,14808 ****
  958829a4632d8b7f5ca0df8c6a7efddf  gcc/testsuite/gcc.dg/compat/scalar-return-2_x.c
  e0f3fc5b3ac0fe016234a07d86b3f3a0  gcc/testsuite/gcc.dg/compat/scalar-return-2_y.c
  2ca5f0e17c10c9db4db432a782911e02  gcc/testsuite/gcc.dg/compat/scalar-return-3_main.c
! add3a3216676dcb0b893672c726b0acc  gcc/testsuite/gcc.dg/compat/scalar-return-3_x.c
! 1294e9e2362f0f3a97052f80db48cfbc  gcc/testsuite/gcc.dg/compat/scalar-return-3_y.c
  031cc87832d7ab1338495b03968e07d4  gcc/testsuite/gcc.dg/compat/scalar-return-4_main.c
! af261de56ce83baa3f07d5eaaf0502c5  gcc/testsuite/gcc.dg/compat/scalar-return-4_x.c
! 8e5619bfdc28caa30773ab0b350daffd  gcc/testsuite/gcc.dg/compat/scalar-return-4_y.c
  ebd670059d209cd3a2c3cd624c00d3de  gcc/testsuite/gcc.dg/compat/sdata-1_main.c
  7c351863616ccdc8bad787415e9338d6  gcc/testsuite/gcc.dg/compat/sdata-1_x.c
  65aaaa580150fc70553a2aa3179e8f4f  gcc/testsuite/gcc.dg/compat/sdata-1_y.c
! 45e285359159aca0d9be2a415271b49d  gcc/testsuite/gcc.dg/compat/sdata-section.h
  fc0f27be268e261a7898986b99c3ba79  gcc/testsuite/gcc.dg/compat/small-struct-check.h
  ff30140d989365aec0270f03f4b181ac  gcc/testsuite/gcc.dg/compat/small-struct-defs.h
  88c519e29784cdd6df712c51e20e94e8  gcc/testsuite/gcc.dg/compat/small-struct-init.h
  c92a3f21fa4d29054e448117c112774c  gcc/testsuite/gcc.dg/compat/struct-align-1.h
  e664fb8373b4bfae3effd58ec0c01c64  gcc/testsuite/gcc.dg/compat/struct-align-1_main.c
! 113edf10e86ca085bd714be017164a1e  gcc/testsuite/gcc.dg/compat/struct-align-1_x.c
  c8c2c64f45673569032f460335514238  gcc/testsuite/gcc.dg/compat/struct-align-1_y.c
  51a342e66efe803353bda7024ceae0aa  gcc/testsuite/gcc.dg/compat/struct-align-2.h
  5529328a4a12526f93961c52dee7f8ab  gcc/testsuite/gcc.dg/compat/struct-align-2_main.c
! 976bebcbee9e3131f9cb50924e26031b  gcc/testsuite/gcc.dg/compat/struct-align-2_x.c
! 76365a6c66e48a55e222bcc5704ce6d0  gcc/testsuite/gcc.dg/compat/struct-align-2_y.c
  ad8a2391bb4d672907e4a06bc0c19c7a  gcc/testsuite/gcc.dg/compat/struct-by-value-10_main.c
  505c2929f39eb04cb1a033934edf9a80  gcc/testsuite/gcc.dg/compat/struct-by-value-10_x.c
  f18eee2ef61e1dbbb57210ece3cb13fd  gcc/testsuite/gcc.dg/compat/struct-by-value-10_y.c
--- 15733,15758 ----
  958829a4632d8b7f5ca0df8c6a7efddf  gcc/testsuite/gcc.dg/compat/scalar-return-2_x.c
  e0f3fc5b3ac0fe016234a07d86b3f3a0  gcc/testsuite/gcc.dg/compat/scalar-return-2_y.c
  2ca5f0e17c10c9db4db432a782911e02  gcc/testsuite/gcc.dg/compat/scalar-return-3_main.c
! 6b38ddcc0be24cf64cc3b334f73e4790  gcc/testsuite/gcc.dg/compat/scalar-return-3_x.c
! b98e50177b68da25d885ef70273337d5  gcc/testsuite/gcc.dg/compat/scalar-return-3_y.c
  031cc87832d7ab1338495b03968e07d4  gcc/testsuite/gcc.dg/compat/scalar-return-4_main.c
! edfb66cebc97406e9820243fedb25399  gcc/testsuite/gcc.dg/compat/scalar-return-4_x.c
! 46187217082ad64ef63e19cd42cee761  gcc/testsuite/gcc.dg/compat/scalar-return-4_y.c
  ebd670059d209cd3a2c3cd624c00d3de  gcc/testsuite/gcc.dg/compat/sdata-1_main.c
  7c351863616ccdc8bad787415e9338d6  gcc/testsuite/gcc.dg/compat/sdata-1_x.c
  65aaaa580150fc70553a2aa3179e8f4f  gcc/testsuite/gcc.dg/compat/sdata-1_y.c
! 4d44d0b33dfa4149e83a21715d7560e7  gcc/testsuite/gcc.dg/compat/sdata-section.h
  fc0f27be268e261a7898986b99c3ba79  gcc/testsuite/gcc.dg/compat/small-struct-check.h
  ff30140d989365aec0270f03f4b181ac  gcc/testsuite/gcc.dg/compat/small-struct-defs.h
  88c519e29784cdd6df712c51e20e94e8  gcc/testsuite/gcc.dg/compat/small-struct-init.h
  c92a3f21fa4d29054e448117c112774c  gcc/testsuite/gcc.dg/compat/struct-align-1.h
  e664fb8373b4bfae3effd58ec0c01c64  gcc/testsuite/gcc.dg/compat/struct-align-1_main.c
! f4dc67391c68e99345e062173b20df83  gcc/testsuite/gcc.dg/compat/struct-align-1_x.c
  c8c2c64f45673569032f460335514238  gcc/testsuite/gcc.dg/compat/struct-align-1_y.c
  51a342e66efe803353bda7024ceae0aa  gcc/testsuite/gcc.dg/compat/struct-align-2.h
  5529328a4a12526f93961c52dee7f8ab  gcc/testsuite/gcc.dg/compat/struct-align-2_main.c
! 31247844d81c5283c0f7623c38058979  gcc/testsuite/gcc.dg/compat/struct-align-2_x.c
! 4860ced5ea015721dda46fef7a3869ed  gcc/testsuite/gcc.dg/compat/struct-align-2_y.c
  ad8a2391bb4d672907e4a06bc0c19c7a  gcc/testsuite/gcc.dg/compat/struct-by-value-10_main.c
  505c2929f39eb04cb1a033934edf9a80  gcc/testsuite/gcc.dg/compat/struct-by-value-10_x.c
  f18eee2ef61e1dbbb57210ece3cb13fd  gcc/testsuite/gcc.dg/compat/struct-by-value-10_y.c
*************** bd89a986baa3ba1a22c4ebeceedf0b08  gcc/te
*** 14839,14844 ****
--- 15789,15800 ----
  610474a2691b7f3361ae85e8b894eafd  gcc/testsuite/gcc.dg/compat/struct-by-value-20_main.c
  920f9e769c89b2ac3b48e2d1a15f2bd9  gcc/testsuite/gcc.dg/compat/struct-by-value-20_x.c
  12065d7a36e7b5d8cab93a400710f977  gcc/testsuite/gcc.dg/compat/struct-by-value-20_y.c
+ a6131c0890dbfb7b2249131495762f84  gcc/testsuite/gcc.dg/compat/struct-by-value-21_main.c
+ 104a9e2f1328c06c43946eda39dbddcd  gcc/testsuite/gcc.dg/compat/struct-by-value-21_x.c
+ d072570141ae7fb3f41bb5ece9c427b6  gcc/testsuite/gcc.dg/compat/struct-by-value-21_y.c
+ da508a4e164de599db6a358ca60c56ce  gcc/testsuite/gcc.dg/compat/struct-by-value-22_main.c
+ c76dcfe203ec3c3646b01d246c9da142  gcc/testsuite/gcc.dg/compat/struct-by-value-22_x.c
+ 190b82a7f0b224b544166a5ec95fca83  gcc/testsuite/gcc.dg/compat/struct-by-value-22_y.c
  562a4438b266cb96caef6cfefdd22c76  gcc/testsuite/gcc.dg/compat/struct-by-value-2_main.c
  b42d80595a23f3695b5941c67b698ed5  gcc/testsuite/gcc.dg/compat/struct-by-value-2_x.c
  fed8ffdf87e8cee85099542549d028bf  gcc/testsuite/gcc.dg/compat/struct-by-value-2_y.c
*************** d0e76d68e68fcbb8ff7b3eab70152dda  gcc/te
*** 14850,14877 ****
  54dbec8be26990b43f8801411235c91a  gcc/testsuite/gcc.dg/compat/struct-by-value-4_y.c
  089a37082ceb25eac96ccf386f1cb9e1  gcc/testsuite/gcc.dg/compat/struct-by-value-5a_main.c
  15f441b4f3abcebdf0291a662789b47e  gcc/testsuite/gcc.dg/compat/struct-by-value-5a_x.c
! 53338032b20a881bfda5b244fb94050c  gcc/testsuite/gcc.dg/compat/struct-by-value-5a_y.c
  7c203f10fc2ae459f2178fdfe44c9469  gcc/testsuite/gcc.dg/compat/struct-by-value-5b_main.c
  7c5a179b3c67b4d4ad23e6709380de52  gcc/testsuite/gcc.dg/compat/struct-by-value-5b_x.c
! 77ac21a68249b285843d4b6e1a207bb8  gcc/testsuite/gcc.dg/compat/struct-by-value-5b_y.c
  7ce41f41ae0ebc185215cb28494b2652  gcc/testsuite/gcc.dg/compat/struct-by-value-6a_main.c
  16d307d8fc4c58c379a0e6e30095ea7a  gcc/testsuite/gcc.dg/compat/struct-by-value-6a_x.c
! e9f508fd107cb9526d532aefd083c249  gcc/testsuite/gcc.dg/compat/struct-by-value-6a_y.c
  dcace251f440c1763bb8c6736cb73307  gcc/testsuite/gcc.dg/compat/struct-by-value-6b_main.c
  eafe3049a9f92eec1d9ea64e21b91e1c  gcc/testsuite/gcc.dg/compat/struct-by-value-6b_x.c
! 241168f1ab1830fbe7993758a58c2839  gcc/testsuite/gcc.dg/compat/struct-by-value-6b_y.c
  9805e7660f823f27d3c9c383d056bdbe  gcc/testsuite/gcc.dg/compat/struct-by-value-7a_main.c
  fd1b08e19d45ec879bddd02b060ebb78  gcc/testsuite/gcc.dg/compat/struct-by-value-7a_x.c
! 9075780932ab5a59bebc823a819f4603  gcc/testsuite/gcc.dg/compat/struct-by-value-7a_y.c
  187bc4d4a394cb09ea95c37a69553c26  gcc/testsuite/gcc.dg/compat/struct-by-value-7b_main.c
  b4a2fb76fa06707a0d8683f70ef2d725  gcc/testsuite/gcc.dg/compat/struct-by-value-7b_x.c
! 625ea2b1c985b0852309556d1cc1942e  gcc/testsuite/gcc.dg/compat/struct-by-value-7b_y.c
  098518ad5c3a414f31ab6905789cb564  gcc/testsuite/gcc.dg/compat/struct-by-value-8_main.c
  6684e89a6a1e9a6992771a151fcbcd41  gcc/testsuite/gcc.dg/compat/struct-by-value-8_x.c
  4b23050086e4e637e397b2a3bc7509d9  gcc/testsuite/gcc.dg/compat/struct-by-value-8_y.c
  e51319b81815e9a14eeb9f2abe3316cc  gcc/testsuite/gcc.dg/compat/struct-by-value-9_main.c
  17f28a30d000b362317144a26be8102e  gcc/testsuite/gcc.dg/compat/struct-by-value-9_x.c
  27d31c8434ac7b20af0c6ab64bcc9e67  gcc/testsuite/gcc.dg/compat/struct-by-value-9_y.c
  28713f0b6ca5db4fba8ac517cae5ef14  gcc/testsuite/gcc.dg/compat/struct-return-10_main.c
  3624a501dc6c7bba3c4c9dd88c09b120  gcc/testsuite/gcc.dg/compat/struct-return-10_x.c
  f17ea11ad034ab743e1d26b3376daac6  gcc/testsuite/gcc.dg/compat/struct-return-10_y.c
--- 15806,15848 ----
  54dbec8be26990b43f8801411235c91a  gcc/testsuite/gcc.dg/compat/struct-by-value-4_y.c
  089a37082ceb25eac96ccf386f1cb9e1  gcc/testsuite/gcc.dg/compat/struct-by-value-5a_main.c
  15f441b4f3abcebdf0291a662789b47e  gcc/testsuite/gcc.dg/compat/struct-by-value-5a_x.c
! 264df73efdb480a9b27f9487773f7cda  gcc/testsuite/gcc.dg/compat/struct-by-value-5a_y.c
  7c203f10fc2ae459f2178fdfe44c9469  gcc/testsuite/gcc.dg/compat/struct-by-value-5b_main.c
  7c5a179b3c67b4d4ad23e6709380de52  gcc/testsuite/gcc.dg/compat/struct-by-value-5b_x.c
! 37ed0da4f4c81326f2efce7e76cade31  gcc/testsuite/gcc.dg/compat/struct-by-value-5b_y.c
  7ce41f41ae0ebc185215cb28494b2652  gcc/testsuite/gcc.dg/compat/struct-by-value-6a_main.c
  16d307d8fc4c58c379a0e6e30095ea7a  gcc/testsuite/gcc.dg/compat/struct-by-value-6a_x.c
! 53e523edd14d2c62afc08802cb22b3aa  gcc/testsuite/gcc.dg/compat/struct-by-value-6a_y.c
  dcace251f440c1763bb8c6736cb73307  gcc/testsuite/gcc.dg/compat/struct-by-value-6b_main.c
  eafe3049a9f92eec1d9ea64e21b91e1c  gcc/testsuite/gcc.dg/compat/struct-by-value-6b_x.c
! e58eadabd4df8a58325a2ce02830e75a  gcc/testsuite/gcc.dg/compat/struct-by-value-6b_y.c
  9805e7660f823f27d3c9c383d056bdbe  gcc/testsuite/gcc.dg/compat/struct-by-value-7a_main.c
  fd1b08e19d45ec879bddd02b060ebb78  gcc/testsuite/gcc.dg/compat/struct-by-value-7a_x.c
! 98f5eae068a6188c33896efdce659192  gcc/testsuite/gcc.dg/compat/struct-by-value-7a_y.c
  187bc4d4a394cb09ea95c37a69553c26  gcc/testsuite/gcc.dg/compat/struct-by-value-7b_main.c
  b4a2fb76fa06707a0d8683f70ef2d725  gcc/testsuite/gcc.dg/compat/struct-by-value-7b_x.c
! e3fc27a5151a5bfdba2c2cf43de1964f  gcc/testsuite/gcc.dg/compat/struct-by-value-7b_y.c
  098518ad5c3a414f31ab6905789cb564  gcc/testsuite/gcc.dg/compat/struct-by-value-8_main.c
  6684e89a6a1e9a6992771a151fcbcd41  gcc/testsuite/gcc.dg/compat/struct-by-value-8_x.c
  4b23050086e4e637e397b2a3bc7509d9  gcc/testsuite/gcc.dg/compat/struct-by-value-8_y.c
  e51319b81815e9a14eeb9f2abe3316cc  gcc/testsuite/gcc.dg/compat/struct-by-value-9_main.c
  17f28a30d000b362317144a26be8102e  gcc/testsuite/gcc.dg/compat/struct-by-value-9_x.c
  27d31c8434ac7b20af0c6ab64bcc9e67  gcc/testsuite/gcc.dg/compat/struct-by-value-9_y.c
+ b13ce33543763e05e497e6e9b0b06afc  gcc/testsuite/gcc.dg/compat/struct-complex-1.h
+ 1f597ca9134ff15cdb56349490c465e5  gcc/testsuite/gcc.dg/compat/struct-complex-1_main.c
+ e900e9cc35754f91d5570a590603c431  gcc/testsuite/gcc.dg/compat/struct-complex-1_x.c
+ d50518b3ac56fc5bfd9f79c7987a2541  gcc/testsuite/gcc.dg/compat/struct-complex-1_y.c
+ 1a1253aacb41dc127e637a960cd47dd0  gcc/testsuite/gcc.dg/compat/struct-layout-1.exp
+ 6ba72df4569f03352d17ddb3be05af08  gcc/testsuite/gcc.dg/compat/struct-layout-1.h
+ 287c246da28c7a54a81b32718b3be785  gcc/testsuite/gcc.dg/compat/struct-layout-1_generate.c
+ c7ce8fc3152d27422fe50033109fcba7  gcc/testsuite/gcc.dg/compat/struct-layout-1_main.c
+ 514043e714114da65491203717baefe1  gcc/testsuite/gcc.dg/compat/struct-layout-1_test.h
+ 7a2c01872720f537c35327ff79b01fa3  gcc/testsuite/gcc.dg/compat/struct-layout-1_x.c
+ fb88355c7eda41a4bdf439b6e6025a23  gcc/testsuite/gcc.dg/compat/struct-layout-1_x1.h
+ 7d588bff78cea94dd3152a4c181ee8c9  gcc/testsuite/gcc.dg/compat/struct-layout-1_x2.h
+ 0aa732b2817aab8fc8f38ee82b862e86  gcc/testsuite/gcc.dg/compat/struct-layout-1_y.c
+ 540c5c4712244b57919a4e690783e793  gcc/testsuite/gcc.dg/compat/struct-layout-1_y1.h
+ 7dc3e674ef2752731b6cd90ebd1aeb0a  gcc/testsuite/gcc.dg/compat/struct-layout-1_y2.h
  28713f0b6ca5db4fba8ac517cae5ef14  gcc/testsuite/gcc.dg/compat/struct-return-10_main.c
  3624a501dc6c7bba3c4c9dd88c09b120  gcc/testsuite/gcc.dg/compat/struct-return-10_x.c
  f17ea11ad034ab743e1d26b3376daac6  gcc/testsuite/gcc.dg/compat/struct-return-10_y.c
*************** f17ea11ad034ab743e1d26b3376daac6  gcc/te
*** 14881,14886 ****
--- 15852,15860 ----
  3c4bf7bd3a89e28b9edcb643e7dc7ec1  gcc/testsuite/gcc.dg/compat/struct-return-20_main.c
  f0bc837f2230ff15c86703ba591a4dfb  gcc/testsuite/gcc.dg/compat/struct-return-20_x.c
  ca3896e54eed0200831710154f55f9a9  gcc/testsuite/gcc.dg/compat/struct-return-20_y.c
+ 9f7d87f1964f0cfd85f3106d6c973038  gcc/testsuite/gcc.dg/compat/struct-return-21_main.c
+ 2a44a1bb6b5914de26591abe44653017  gcc/testsuite/gcc.dg/compat/struct-return-21_x.c
+ 53fd08662562c799ecc9845bf835b2af  gcc/testsuite/gcc.dg/compat/struct-return-21_y.c
  ec82f76b921845a8befa4585810d322b  gcc/testsuite/gcc.dg/compat/struct-return-2_main.c
  cc420ca494ab8e484edecd9dae44f89e  gcc/testsuite/gcc.dg/compat/struct-return-2_x.c
  2908b46cf1d556208aec346d3bfb1321  gcc/testsuite/gcc.dg/compat/struct-return-2_y.c
*************** eb267873b81efdb29f2e973998cda2d0  gcc/te
*** 14893,14933 ****
  6e61a464bb84a72a26c677fdda9c5145  gcc/testsuite/gcc.dg/compat/union-check.h
  3eb5809860fa034797ad4c31a4733156  gcc/testsuite/gcc.dg/compat/union-defs.h
  bbac606ab4bf05fb0344b3f2c3fbb45b  gcc/testsuite/gcc.dg/compat/union-init.h
  e4449019b1294664801d1ef336214885  gcc/testsuite/gcc.dg/compat/union-return-1_main.c
  2530a9695c00ab01e9f58fa0aa5c4a32  gcc/testsuite/gcc.dg/compat/union-return-1_x.c
  ca32818d81a5718c7a1cf836b8c60560  gcc/testsuite/gcc.dg/compat/union-return-1_y.c
  282e8b8641be27d23d9f569ecbc15be5  gcc/testsuite/gcc.dg/compat/vector-1_main.c
! efad040ec64da8d240541b42c11f7d3d  gcc/testsuite/gcc.dg/compat/vector-1_x.c
! fa894031dee5eba09f6a646751433399  gcc/testsuite/gcc.dg/compat/vector-1_y.c
  3185a6ea8d4d8eae316c44bab95012e1  gcc/testsuite/gcc.dg/compat/vector-2_main.c
! 6a0b2ca03649f650e66f1de72598fdd7  gcc/testsuite/gcc.dg/compat/vector-2_x.c
! e12dd877a2e538cd498a49ef84f94759  gcc/testsuite/gcc.dg/compat/vector-2_y.c
  ed14a4c1cef7c9bb4754ac7ceb41e466  gcc/testsuite/gcc.dg/compat/vector-check.h
! a6bf4792ff6b090e33f70885f66fdc44  gcc/testsuite/gcc.dg/compat/vector-defs.h
  93bfc276687385df73f4ce6a198252ef  gcc/testsuite/gcc.dg/compat/vector-setup.h
  66b4de358b94a61c9a5ebac5a5372393  gcc/testsuite/gcc.dg/complete-port.c
  a86556f4f0c72c0bee2f104440830505  gcc/testsuite/gcc.dg/complex-1.c
! 94cde8d65ee011e5ad1fb98d68af37e8  gcc/testsuite/gcc.dg/compound-lvalue-1.c
! 809afa89c2646e2dfe4e041281d380df  gcc/testsuite/gcc.dg/concat.c
  fe6e67a4e564ca5642810bdf85534463  gcc/testsuite/gcc.dg/concat2.c
! 511837deab3f0f3a7d1ca33de3e75b2f  gcc/testsuite/gcc.dg/cond-lvalue-1.c
! 87388e8586cb7a98752e4f6d740fc43e  gcc/testsuite/gcc.dg/const-elim-1.c
  cf21c7554a864121ceeea5e07b0972a6  gcc/testsuite/gcc.dg/const-elim-2.c
  79de76f1d9fe6810bc65fa1f39adc1dc  gcc/testsuite/gcc.dg/conv-1.c
  efe7e7710c90559c2ce6e719d57e85cf  gcc/testsuite/gcc.dg/cpp/19921210-1.c
! 55600ce2493fed51ef9e9e3d63d00c74  gcc/testsuite/gcc.dg/cpp/19930510-1.c
! 2459b503e67dc2830c9fea8d3413b1c4  gcc/testsuite/gcc.dg/cpp/19940712-1.c
  774aca589d2053b28218f676881669bf  gcc/testsuite/gcc.dg/cpp/19940712-1.h
  aa9731c7fab940ed529ffa5748e897e5  gcc/testsuite/gcc.dg/cpp/19940712-1a.h
  d2cb31e53c80a723fcf645091264b661  gcc/testsuite/gcc.dg/cpp/19940712-1b.h
! 5610d5ac8aa4f5061c20924a9adc3e3c  gcc/testsuite/gcc.dg/cpp/19951025-1.c
  9924671630201db187f8e6a15ee1ac91  gcc/testsuite/gcc.dg/cpp/19951227-1.c
  e75f13a1d98942713890a087ba6d6788  gcc/testsuite/gcc.dg/cpp/19960224-1.c
  8baf8902791d208099e48c458107bb61  gcc/testsuite/gcc.dg/cpp/19990119-1.c
  df75c8d101d64a6cf41b3a04beab75e6  gcc/testsuite/gcc.dg/cpp/19990228-1.c
  5fd1627caefdf87372a9b11145707cc1  gcc/testsuite/gcc.dg/cpp/19990407-1.c
  991e6dec59f32fb2fa10bb5f317ddc1e  gcc/testsuite/gcc.dg/cpp/19990409-1.c
! 5c0cc4188d92c5436340fcb987faa349  gcc/testsuite/gcc.dg/cpp/19990413-1.c
  4046556fd9ea1755b619a2f5c6fd63b5  gcc/testsuite/gcc.dg/cpp/20000127-1.c
  68d7040fce1c7f29353c84cf3ec4fc39  gcc/testsuite/gcc.dg/cpp/20000129-1.c
  91380450992c2b046bc2b9d4e7f29b91  gcc/testsuite/gcc.dg/cpp/20000207-1.c
--- 15867,15917 ----
  6e61a464bb84a72a26c677fdda9c5145  gcc/testsuite/gcc.dg/compat/union-check.h
  3eb5809860fa034797ad4c31a4733156  gcc/testsuite/gcc.dg/compat/union-defs.h
  bbac606ab4bf05fb0344b3f2c3fbb45b  gcc/testsuite/gcc.dg/compat/union-init.h
+ 628b90f6dbcdc364b1b13508c725e200  gcc/testsuite/gcc.dg/compat/union-m128-1.h
+ c19d6e6ab091a3c1a31cdea31e72c2bd  gcc/testsuite/gcc.dg/compat/union-m128-1_main.c
+ 8c48ecea35c1bad9e0afa13017ce5b59  gcc/testsuite/gcc.dg/compat/union-m128-1_x.c
+ 728691a1df4c9119c322eded18c95931  gcc/testsuite/gcc.dg/compat/union-m128-1_y.c
  e4449019b1294664801d1ef336214885  gcc/testsuite/gcc.dg/compat/union-return-1_main.c
  2530a9695c00ab01e9f58fa0aa5c4a32  gcc/testsuite/gcc.dg/compat/union-return-1_x.c
  ca32818d81a5718c7a1cf836b8c60560  gcc/testsuite/gcc.dg/compat/union-return-1_y.c
  282e8b8641be27d23d9f569ecbc15be5  gcc/testsuite/gcc.dg/compat/vector-1_main.c
! 96c46e33d5f363776e63c33ee8801799  gcc/testsuite/gcc.dg/compat/vector-1_x.c
! 158d556210a5beb6bf568ffae640389f  gcc/testsuite/gcc.dg/compat/vector-1_y.c
  3185a6ea8d4d8eae316c44bab95012e1  gcc/testsuite/gcc.dg/compat/vector-2_main.c
! 50428551cfc683d40d226739cffe7bfc  gcc/testsuite/gcc.dg/compat/vector-2_x.c
! b71624327356e6490cdfd1ffcb09bb36  gcc/testsuite/gcc.dg/compat/vector-2_y.c
  ed14a4c1cef7c9bb4754ac7ceb41e466  gcc/testsuite/gcc.dg/compat/vector-check.h
! fa1ab496151791f4ef05043e7c0b673c  gcc/testsuite/gcc.dg/compat/vector-defs.h
  93bfc276687385df73f4ce6a198252ef  gcc/testsuite/gcc.dg/compat/vector-setup.h
  66b4de358b94a61c9a5ebac5a5372393  gcc/testsuite/gcc.dg/complete-port.c
  a86556f4f0c72c0bee2f104440830505  gcc/testsuite/gcc.dg/complex-1.c
! ec2d607c705e532267dc3c09849c554f  gcc/testsuite/gcc.dg/complex-2.c
! da2226add6799fd192e2b367404d1b0b  gcc/testsuite/gcc.dg/complex-2.h
! 7cbd734da9d8330b57f4e78af353b9f2  gcc/testsuite/gcc.dg/complex-3.c
! 9a8460b2b7be20ec936144c1267fdf4b  gcc/testsuite/gcc.dg/compound-lvalue-1.c
! a391524508e56b407f614b94ad4f54ea  gcc/testsuite/gcc.dg/concat.c
  fe6e67a4e564ca5642810bdf85534463  gcc/testsuite/gcc.dg/concat2.c
! 0115b0253f566ae848136edaa8f19b58  gcc/testsuite/gcc.dg/cond-lvalue-1.c
! 7dba1cb67fb225cf14f7060dc6cf578e  gcc/testsuite/gcc.dg/const-elim-1.c
  cf21c7554a864121ceeea5e07b0972a6  gcc/testsuite/gcc.dg/const-elim-2.c
  79de76f1d9fe6810bc65fa1f39adc1dc  gcc/testsuite/gcc.dg/conv-1.c
+ eeaf7e843fec74d7db09e07e6e903fc6  gcc/testsuite/gcc.dg/conv-2.c
+ 89b18c0becd2933f025acc401a0aeaf8  gcc/testsuite/gcc.dg/conv-3.c
+ e5ec9a1f71373127b27f8ee5cecf0fd7  gcc/testsuite/gcc.dg/convert-vec-1.c
  efe7e7710c90559c2ce6e719d57e85cf  gcc/testsuite/gcc.dg/cpp/19921210-1.c
! fd87d37c0d8c780e43c22463e7f47466  gcc/testsuite/gcc.dg/cpp/19930510-1.c
! 11a19f9e55b9a8cbe5ed9cea5ae4b3a0  gcc/testsuite/gcc.dg/cpp/19940712-1.c
  774aca589d2053b28218f676881669bf  gcc/testsuite/gcc.dg/cpp/19940712-1.h
  aa9731c7fab940ed529ffa5748e897e5  gcc/testsuite/gcc.dg/cpp/19940712-1a.h
  d2cb31e53c80a723fcf645091264b661  gcc/testsuite/gcc.dg/cpp/19940712-1b.h
! b419fc42efcaf72a0b82ffe4ca5a81cb  gcc/testsuite/gcc.dg/cpp/19951025-1.c
  9924671630201db187f8e6a15ee1ac91  gcc/testsuite/gcc.dg/cpp/19951227-1.c
  e75f13a1d98942713890a087ba6d6788  gcc/testsuite/gcc.dg/cpp/19960224-1.c
  8baf8902791d208099e48c458107bb61  gcc/testsuite/gcc.dg/cpp/19990119-1.c
  df75c8d101d64a6cf41b3a04beab75e6  gcc/testsuite/gcc.dg/cpp/19990228-1.c
  5fd1627caefdf87372a9b11145707cc1  gcc/testsuite/gcc.dg/cpp/19990407-1.c
  991e6dec59f32fb2fa10bb5f317ddc1e  gcc/testsuite/gcc.dg/cpp/19990409-1.c
! 8efc2de1158a7baeb5e50fb643b33678  gcc/testsuite/gcc.dg/cpp/19990413-1.c
  4046556fd9ea1755b619a2f5c6fd63b5  gcc/testsuite/gcc.dg/cpp/20000127-1.c
  68d7040fce1c7f29353c84cf3ec4fc39  gcc/testsuite/gcc.dg/cpp/20000129-1.c
  91380450992c2b046bc2b9d4e7f29b91  gcc/testsuite/gcc.dg/cpp/20000207-1.c
*************** f8275dd1b8cee4a3a0642955558cbed0  gcc/te
*** 14945,14956 ****
--- 15929,15947 ----
  1f04f1372289c7c3716b5900d84fdb03  gcc/testsuite/gcc.dg/cpp/20000628-1a.h
  5d995444f59f9ea763ed828bc80d64f6  gcc/testsuite/gcc.dg/cpp/20000725-1.c
  62d62f9fed6a71df95f49f9574768e27  gcc/testsuite/gcc.dg/cpp/20020927-1.c
+ ec29cfc495e7855f9a0af068957e07f8  gcc/testsuite/gcc.dg/cpp/20050215-1.c
+ 42be432a39a3cb0678ff4829a858bbcf  gcc/testsuite/gcc.dg/cpp/System/Library/Frameworks/Carbon.framework/Headers/Carbon.h
+ 132e1fcd7ade4da403ea562897e33563  gcc/testsuite/gcc.dg/cpp/Wmissingdirs.c
  83988ed16b982a766fdaadae26388404  gcc/testsuite/gcc.dg/cpp/Wsignprom.c
  86c463fba0cb8806b6e38fe0f5844002  gcc/testsuite/gcc.dg/cpp/Wtrigraphs-2.c
  7be7467a05ff7ff1e309b1776ef6557d  gcc/testsuite/gcc.dg/cpp/Wtrigraphs.c
  69752065d57bcf081fec6a8eee4c3e80  gcc/testsuite/gcc.dg/cpp/Wunknown-pragmas-1.c
  9133b60797fd27c2069996efa899ffac  gcc/testsuite/gcc.dg/cpp/Wunused.c
  722ce436983657fc4f00220b26f8fa36  gcc/testsuite/gcc.dg/cpp/Wunused.h
+ 2401520a72895753634940574a585756  gcc/testsuite/gcc.dg/cpp/Wvariadic-1.c
+ 4908fdae0d823bbf0d50775be10cb5d9  gcc/testsuite/gcc.dg/cpp/Wvariadic-2.c
+ a65febef7770d3d4e7759e08887a440a  gcc/testsuite/gcc.dg/cpp/Wvariadic-3.c
+ e31387a6e732d6bcf75a7fd6777a1907  gcc/testsuite/gcc.dg/cpp/Wvariadic-4.c
  5388674062a074cc0723f0e6d228395c  gcc/testsuite/gcc.dg/cpp/_Pragma1.c
  1f7698e36f2958d350b337a0b6241d15  gcc/testsuite/gcc.dg/cpp/_Pragma2.c
  4ad965e47218a9c79012912525ef612a  gcc/testsuite/gcc.dg/cpp/_Pragma3.c
*************** d2ceecccef1772ada3beff72d6faed3e  gcc/te
*** 14963,14969 ****
  5206719ac5a8351926ba0739392cdaf2  gcc/testsuite/gcc.dg/cpp/assert1.c
  26123c450b8ac44d3950df789e1d2118  gcc/testsuite/gcc.dg/cpp/assert2.c
  d5a4260d3994d6b7cf96b8ecd1966dc7  gcc/testsuite/gcc.dg/cpp/assert3.c
! 37f8118d82524543575fc3d4290dd457  gcc/testsuite/gcc.dg/cpp/assert4.c
  050b8215f4ddf9eb761a732729df2da2  gcc/testsuite/gcc.dg/cpp/avoidpaste1.c
  a0c74ddc6960d45447982ca784ab3b1b  gcc/testsuite/gcc.dg/cpp/avoidpaste2.c
  1d8a3a95741c925f4b6277037a477574  gcc/testsuite/gcc.dg/cpp/backslash.c
--- 15954,15960 ----
  5206719ac5a8351926ba0739392cdaf2  gcc/testsuite/gcc.dg/cpp/assert1.c
  26123c450b8ac44d3950df789e1d2118  gcc/testsuite/gcc.dg/cpp/assert2.c
  d5a4260d3994d6b7cf96b8ecd1966dc7  gcc/testsuite/gcc.dg/cpp/assert3.c
! e75e0ea246083e4e0bae0b7f911d21c7  gcc/testsuite/gcc.dg/cpp/assert4.c
  050b8215f4ddf9eb761a732729df2da2  gcc/testsuite/gcc.dg/cpp/avoidpaste1.c
  a0c74ddc6960d45447982ca784ab3b1b  gcc/testsuite/gcc.dg/cpp/avoidpaste2.c
  1d8a3a95741c925f4b6277037a477574  gcc/testsuite/gcc.dg/cpp/backslash.c
*************** cda0f2056759a55b2de15925fdb49edb  gcc/te
*** 14978,14985 ****
  06912c0987e6d78e38b3a1dd467a68fe  gcc/testsuite/gcc.dg/cpp/c99-pedantic.c
  aeac316eab59c566dcc054fa1448d931  gcc/testsuite/gcc.dg/cpp/c99.c
  d7fe9b5439dff2d4320ac5fa9fed372b  gcc/testsuite/gcc.dg/cpp/charconst-2.c
! 7bea8332aca99b6eca40de7cca9d399e  gcc/testsuite/gcc.dg/cpp/charconst-3.c
! cb2240e574e282122e58149e3f244e61  gcc/testsuite/gcc.dg/cpp/charconst-4.c
  1b4203cdd6d0a5aba53b08eaeb280371  gcc/testsuite/gcc.dg/cpp/charconst.c
  fb746197b268341775148b17b72a697b  gcc/testsuite/gcc.dg/cpp/cmdlne-C.c
  082290ee93725d85bcd5a0bd576395f5  gcc/testsuite/gcc.dg/cpp/cmdlne-C2.c
--- 15969,15976 ----
  06912c0987e6d78e38b3a1dd467a68fe  gcc/testsuite/gcc.dg/cpp/c99-pedantic.c
  aeac316eab59c566dcc054fa1448d931  gcc/testsuite/gcc.dg/cpp/c99.c
  d7fe9b5439dff2d4320ac5fa9fed372b  gcc/testsuite/gcc.dg/cpp/charconst-2.c
! b8f19314e3816f9e972f0bd68cec0211  gcc/testsuite/gcc.dg/cpp/charconst-3.c
! 61b07193a4be07d468921e439b0fa75f  gcc/testsuite/gcc.dg/cpp/charconst-4.c
  1b4203cdd6d0a5aba53b08eaeb280371  gcc/testsuite/gcc.dg/cpp/charconst.c
  fb746197b268341775148b17b72a697b  gcc/testsuite/gcc.dg/cpp/cmdlne-C.c
  082290ee93725d85bcd5a0bd576395f5  gcc/testsuite/gcc.dg/cpp/cmdlne-C2.c
*************** d77a661fbfed762f6397bfd3581e855e  gcc/te
*** 15000,15014 ****
  8af19f954e4c7d8397aa53ac210b124e  gcc/testsuite/gcc.dg/cpp/cxxcom2.h
  72be28368d49884b80cc84b5e34fdca2  gcc/testsuite/gcc.dg/cpp/defined.c
  7c767936cfc5aa6d5eb65700ff8f8bcf  gcc/testsuite/gcc.dg/cpp/digraph1.c
! 5d49f937bce8e259af21846e75ee7d6f  gcc/testsuite/gcc.dg/cpp/digraph2.c
  e8e1b44c9a259d5b1aa0058fcae995b0  gcc/testsuite/gcc.dg/cpp/digraphs.c
! 6bf4936ee124a6197a058b1b9850a5f7  gcc/testsuite/gcc.dg/cpp/direct2.c
! cc95bb1c1bde998dfa6febd85414fc2f  gcc/testsuite/gcc.dg/cpp/direct2s.c
  f7d33748385116eadf13c192e8243ef5  gcc/testsuite/gcc.dg/cpp/directiv.c
  af960c05f0a6ab2d5eb3aa99551fa658  gcc/testsuite/gcc.dg/cpp/endif-pedantic1.c
  fd47eb114e4fbc3ee2c3eacfcc532584  gcc/testsuite/gcc.dg/cpp/endif-pedantic2.c
  24433a4e764e479df8f2b0fafe6a0130  gcc/testsuite/gcc.dg/cpp/endif.c
  65db27307aa0cdf0b3c0323431e08a15  gcc/testsuite/gcc.dg/cpp/endif.h
  cd3796ff42aba377ef68a1587765d4b1  gcc/testsuite/gcc.dg/cpp/escape-1.c
  2550f35666b8ca81373ce448f62b6afb  gcc/testsuite/gcc.dg/cpp/escape-2.c
  6a21c34bfee0d7446e380cf17826ad37  gcc/testsuite/gcc.dg/cpp/escape.c
--- 15991,16007 ----
  8af19f954e4c7d8397aa53ac210b124e  gcc/testsuite/gcc.dg/cpp/cxxcom2.h
  72be28368d49884b80cc84b5e34fdca2  gcc/testsuite/gcc.dg/cpp/defined.c
  7c767936cfc5aa6d5eb65700ff8f8bcf  gcc/testsuite/gcc.dg/cpp/digraph1.c
! b515bc70dbcb64eaaea1e4edcd67bb80  gcc/testsuite/gcc.dg/cpp/digraph2.c
  e8e1b44c9a259d5b1aa0058fcae995b0  gcc/testsuite/gcc.dg/cpp/digraphs.c
! adb352d90e2c5b5ad6b8c7421188be22  gcc/testsuite/gcc.dg/cpp/direct2.c
! cb24eb19ef6cd11e2aa374a83f123f61  gcc/testsuite/gcc.dg/cpp/direct2s.c
  f7d33748385116eadf13c192e8243ef5  gcc/testsuite/gcc.dg/cpp/directiv.c
+ a2dd5b051236aad6b99d52b4affd80b0  gcc/testsuite/gcc.dg/cpp/empty-include.c
  af960c05f0a6ab2d5eb3aa99551fa658  gcc/testsuite/gcc.dg/cpp/endif-pedantic1.c
  fd47eb114e4fbc3ee2c3eacfcc532584  gcc/testsuite/gcc.dg/cpp/endif-pedantic2.c
  24433a4e764e479df8f2b0fafe6a0130  gcc/testsuite/gcc.dg/cpp/endif.c
  65db27307aa0cdf0b3c0323431e08a15  gcc/testsuite/gcc.dg/cpp/endif.h
+ 5d830c105d698a2ed6866844500b991c  gcc/testsuite/gcc.dg/cpp/error-1.c
  cd3796ff42aba377ef68a1587765d4b1  gcc/testsuite/gcc.dg/cpp/escape-1.c
  2550f35666b8ca81373ce448f62b6afb  gcc/testsuite/gcc.dg/cpp/escape-2.c
  6a21c34bfee0d7446e380cf17826ad37  gcc/testsuite/gcc.dg/cpp/escape.c
*************** b19455bfe628c1f37633132f031455a9  gcc/te
*** 15016,15030 ****
  1697ea407fa97ecff5a77eb6fbd88bfd  gcc/testsuite/gcc.dg/cpp/extratokens.c
  fda19d89b16a50257028dcce5a9a96b3  gcc/testsuite/gcc.dg/cpp/extratokens2.c
  0db3f308d305a4799ae225cb2bde1618  gcc/testsuite/gcc.dg/cpp/fpreprocessed.c
  6f35c1e2a6a28e958dce46f047684778  gcc/testsuite/gcc.dg/cpp/gnuc89-pedantic.c
  8b94742da0bc644e9a245d24ceeabac1  gcc/testsuite/gcc.dg/cpp/gnuc89.c
  893f399df5c3864c2a21f01cdf03a381  gcc/testsuite/gcc.dg/cpp/gnuc99-pedantic.c
  f2778a33710514f9a4c8d3438ba22b43  gcc/testsuite/gcc.dg/cpp/gnuc99.c
  375d1dbe4d24ca93028d40e42b4ec4d9  gcc/testsuite/gcc.dg/cpp/hash1.c
! 849feafd5322464f3408ac48e291580b  gcc/testsuite/gcc.dg/cpp/ident-1.c
  e8927cc2106afebe8faaec84e180e43a  gcc/testsuite/gcc.dg/cpp/ident.c
  cbcb149d5dadb7ecdbc1a719ae9bb868  gcc/testsuite/gcc.dg/cpp/if-1.c
! 638a70764a819f16e0b7c32f28000c4f  gcc/testsuite/gcc.dg/cpp/if-2.c
  23be95f29cfcfec324adf4f78cff1d04  gcc/testsuite/gcc.dg/cpp/if-4.c
  4eb1e1755efaea6ac2ec05e1595b42f3  gcc/testsuite/gcc.dg/cpp/if-5.c
  aed8cf985c74edd19f55a52aafa5d069  gcc/testsuite/gcc.dg/cpp/if-cexp.c
--- 16009,16027 ----
  1697ea407fa97ecff5a77eb6fbd88bfd  gcc/testsuite/gcc.dg/cpp/extratokens.c
  fda19d89b16a50257028dcce5a9a96b3  gcc/testsuite/gcc.dg/cpp/extratokens2.c
  0db3f308d305a4799ae225cb2bde1618  gcc/testsuite/gcc.dg/cpp/fpreprocessed.c
+ b28d91565a9d3d3c36d42433a970d0a8  gcc/testsuite/gcc.dg/cpp/frame/one.framework/Frameworks/OneSub.framework/Headers/A.h
+ b28d91565a9d3d3c36d42433a970d0a8  gcc/testsuite/gcc.dg/cpp/frame/one.framework/Frameworks/OneSub.framework/Headers/B.h
+ 5d89d576a9968b776fdfc226c6bffeab  gcc/testsuite/gcc.dg/cpp/frame/one.framework/Frameworks/OneSub.framework/Headers/C.h
+ 25ec68dbc03a8ee15912e94f21b09aad  gcc/testsuite/gcc.dg/cpp/frame/one.framework/Headers/one-includeSubs.h
  6f35c1e2a6a28e958dce46f047684778  gcc/testsuite/gcc.dg/cpp/gnuc89-pedantic.c
  8b94742da0bc644e9a245d24ceeabac1  gcc/testsuite/gcc.dg/cpp/gnuc89.c
  893f399df5c3864c2a21f01cdf03a381  gcc/testsuite/gcc.dg/cpp/gnuc99-pedantic.c
  f2778a33710514f9a4c8d3438ba22b43  gcc/testsuite/gcc.dg/cpp/gnuc99.c
  375d1dbe4d24ca93028d40e42b4ec4d9  gcc/testsuite/gcc.dg/cpp/hash1.c
! dc15fe1f1eb322d3dae3c8fa95b8c3e2  gcc/testsuite/gcc.dg/cpp/ident-1.c
  e8927cc2106afebe8faaec84e180e43a  gcc/testsuite/gcc.dg/cpp/ident.c
  cbcb149d5dadb7ecdbc1a719ae9bb868  gcc/testsuite/gcc.dg/cpp/if-1.c
! d479cb3383c9afeb20526df114ded92c  gcc/testsuite/gcc.dg/cpp/if-2.c
  23be95f29cfcfec324adf4f78cff1d04  gcc/testsuite/gcc.dg/cpp/if-4.c
  4eb1e1755efaea6ac2ec05e1595b42f3  gcc/testsuite/gcc.dg/cpp/if-5.c
  aed8cf985c74edd19f55a52aafa5d069  gcc/testsuite/gcc.dg/cpp/if-cexp.c
*************** d80b2aa963fd215a7777a1a8baf55cfb  gcc/te
*** 15040,15048 ****
--- 16037,16048 ----
  1b6bebf3a36a526d91d4bbfda830b854  gcc/testsuite/gcc.dg/cpp/import2.c
  f3446debe2a67d2b151f29f3006987bb  gcc/testsuite/gcc.dg/cpp/import2.h
  6a868772af8e7eec08feaf2285f62132  gcc/testsuite/gcc.dg/cpp/inc/foo.h
+ d71e5f2555710da19619d9adc4b88f6f  gcc/testsuite/gcc.dg/cpp/inc/pragma-once-1a.h
  ea76d1c8f9591251f749eaf0d4548910  gcc/testsuite/gcc.dg/cpp/include1.c
  118c2c16f6e0677ce6aec7a2130731de  gcc/testsuite/gcc.dg/cpp/include2.c
  b1294c835a9b544482538708e224cd87  gcc/testsuite/gcc.dg/cpp/include3.c
+ 10a60705ad3a511b1b8d4078bd299c37  gcc/testsuite/gcc.dg/cpp/isysroot-1.c
+ d2356c14719220729fca6a1807576fd6  gcc/testsuite/gcc.dg/cpp/isysroot-2.c
  6aec7ee07d2c4b1e4dbca7996c29c33d  gcc/testsuite/gcc.dg/cpp/lexident.c
  fe7756e15c7ab09a4caab2929cbeac8a  gcc/testsuite/gcc.dg/cpp/lexnum.c
  6811fd43be69eb0951e792de63facad3  gcc/testsuite/gcc.dg/cpp/lexstrng.c
*************** ec8b7c55e765d2fb094b7d63a6c2bc04  gcc/te
*** 15053,15058 ****
--- 16053,16059 ----
  9da43418b71e9aa193025099ea6b4c54  gcc/testsuite/gcc.dg/cpp/line5.c
  6d2dca73976a80ec91bc144348cc04ba  gcc/testsuite/gcc.dg/cpp/mac-dir-1.c
  26d1a646bf518f491c6ee2df95de995b  gcc/testsuite/gcc.dg/cpp/mac-dir-2.c
+ 113750304551cf66be21ae220198c164  gcc/testsuite/gcc.dg/cpp/mac-eol-at-eof.c
  2c89683241b80778a223c92fd888de5d  gcc/testsuite/gcc.dg/cpp/maccom1.c
  d9fce0fb2cf6289b5792e2415c450e31  gcc/testsuite/gcc.dg/cpp/maccom2.c
  b162396a757dd84463da2f46a9abd943  gcc/testsuite/gcc.dg/cpp/maccom3.c
*************** e981c3e0d4722656566000abbdcbd0bc  gcc/te
*** 15070,15075 ****
--- 16071,16078 ----
  e424a17217f72268dfa4029de6eaafc3  gcc/testsuite/gcc.dg/cpp/macro7.c
  f1f598cd4e451612c08917a32f4da51f  gcc/testsuite/gcc.dg/cpp/macro8.c
  7ea810f16f8f30514dc03940736c9fc1  gcc/testsuite/gcc.dg/cpp/macro9.c
+ 84bad18efe27e07fed68e52a37e36558  gcc/testsuite/gcc.dg/cpp/macspace1.c
+ 72c7fb3ca6985cbe47efe88d5492fbd5  gcc/testsuite/gcc.dg/cpp/macspace2.c
  67bfbb8a76526c00837a42839ad56775  gcc/testsuite/gcc.dg/cpp/macsyntx.c
  8adc2469865dbeff1ba0e918420d23ee  gcc/testsuite/gcc.dg/cpp/mi1.c
  777cf2c3e95b6b5ee7caed8bc88cf268  gcc/testsuite/gcc.dg/cpp/mi1c.h
*************** ea8d52c5fdbf6b8f3354e8edff72a230  gcc/te
*** 15086,15092 ****
  863916d69c5e3aaf29d0ee5bc27b3c91  gcc/testsuite/gcc.dg/cpp/mi3.h
  0545f5104f965995885459ae2d00c61e  gcc/testsuite/gcc.dg/cpp/mi4.c
  97b848921526900681d056fa4d0d443e  gcc/testsuite/gcc.dg/cpp/mi5.c
! 8c5852ad50a2efade7fafd8035bcd971  gcc/testsuite/gcc.dg/cpp/mi6.c
  521ac9d449ec695582b60b6f51804808  gcc/testsuite/gcc.dg/cpp/mi6a.h
  2882200c457faea366993a4b2e83694c  gcc/testsuite/gcc.dg/cpp/mi6b.h
  44ecd06f1199a044e6467b517e10e75f  gcc/testsuite/gcc.dg/cpp/mi6c.h
--- 16089,16095 ----
  863916d69c5e3aaf29d0ee5bc27b3c91  gcc/testsuite/gcc.dg/cpp/mi3.h
  0545f5104f965995885459ae2d00c61e  gcc/testsuite/gcc.dg/cpp/mi4.c
  97b848921526900681d056fa4d0d443e  gcc/testsuite/gcc.dg/cpp/mi5.c
! c8a765bee43e69a012464bc207263efb  gcc/testsuite/gcc.dg/cpp/mi6.c
  521ac9d449ec695582b60b6f51804808  gcc/testsuite/gcc.dg/cpp/mi6a.h
  2882200c457faea366993a4b2e83694c  gcc/testsuite/gcc.dg/cpp/mi6b.h
  44ecd06f1199a044e6467b517e10e75f  gcc/testsuite/gcc.dg/cpp/mi6c.h
*************** bad46dc3aecb70d53e1132e7986da491  gcc/te
*** 15104,15110 ****
  283196eb7fb5f23e39003bf6346a0424  gcc/testsuite/gcc.dg/cpp/paste13.c
  97a18dfd38dd2b940ad9587bcf12fec2  gcc/testsuite/gcc.dg/cpp/paste2.c
  43ec09ef85b5fcbf054f11e415cb78c6  gcc/testsuite/gcc.dg/cpp/paste3.c
! 0359919c44ed188910309995e69de716  gcc/testsuite/gcc.dg/cpp/paste4.c
  893a2ed3ae72221cec7a45734ebf93f6  gcc/testsuite/gcc.dg/cpp/paste5.c
  636c2b3ced8a67ec7b0f3c4741a34494  gcc/testsuite/gcc.dg/cpp/paste6.c
  bd895b136a241e12836f4d30e2b81b5b  gcc/testsuite/gcc.dg/cpp/paste7.c
--- 16107,16113 ----
  283196eb7fb5f23e39003bf6346a0424  gcc/testsuite/gcc.dg/cpp/paste13.c
  97a18dfd38dd2b940ad9587bcf12fec2  gcc/testsuite/gcc.dg/cpp/paste2.c
  43ec09ef85b5fcbf054f11e415cb78c6  gcc/testsuite/gcc.dg/cpp/paste3.c
! 66d0a4875cd871ad4414d45939b45356  gcc/testsuite/gcc.dg/cpp/paste4.c
  893a2ed3ae72221cec7a45734ebf93f6  gcc/testsuite/gcc.dg/cpp/paste5.c
  636c2b3ced8a67ec7b0f3c4741a34494  gcc/testsuite/gcc.dg/cpp/paste6.c
  bd895b136a241e12836f4d30e2b81b5b  gcc/testsuite/gcc.dg/cpp/paste7.c
*************** bb9ce99871246eec7e4f0065ef789603  gcc/te
*** 15113,15122 ****
  0d7b9ff67b5daa8b51c381f59d09b86f  gcc/testsuite/gcc.dg/cpp/poison.c
  bb6f89f258b90f6c631c8472c48f37c3  gcc/testsuite/gcc.dg/cpp/pragma-1.c
  1ba7daa609572d467db33a1eb827b621  gcc/testsuite/gcc.dg/cpp/pragma-2.c
  07384775502bd88399fa7426580eacf7  gcc/testsuite/gcc.dg/cpp/redef1.c
  c1d73c4510fcf1e4c0d10749167ba7ea  gcc/testsuite/gcc.dg/cpp/redef2.c
  dff1ad67780a4f4eb7a40b0d122249b1  gcc/testsuite/gcc.dg/cpp/redef3.c
! 20e652b17f9570f20151e9582d872df7  gcc/testsuite/gcc.dg/cpp/separate-1.c
  17d9d91e6b87e9f5986dbaf36072407a  gcc/testsuite/gcc.dg/cpp/skipping.c
  2660488e314396078f849a40c42d6ca0  gcc/testsuite/gcc.dg/cpp/skipping2.c
  3a7905ac79abad7b67a3f5c1d83164d6  gcc/testsuite/gcc.dg/cpp/spacing1.c
--- 16116,16129 ----
  0d7b9ff67b5daa8b51c381f59d09b86f  gcc/testsuite/gcc.dg/cpp/poison.c
  bb6f89f258b90f6c631c8472c48f37c3  gcc/testsuite/gcc.dg/cpp/pragma-1.c
  1ba7daa609572d467db33a1eb827b621  gcc/testsuite/gcc.dg/cpp/pragma-2.c
+ 63a5cc78041db6f5fe01fed974740942  gcc/testsuite/gcc.dg/cpp/pragma-once-1.c
+ 99bde0eaa7fe7e6d2667a6ac6c349a52  gcc/testsuite/gcc.dg/cpp/pragma-once-1b.h
+ 530736b5c9a3fd45e6b06a0a18208037  gcc/testsuite/gcc.dg/cpp/pragma-once-1c.h
+ d59887c3a6d84e13943708de2d30ef72  gcc/testsuite/gcc.dg/cpp/pragma-once-1d.h
  07384775502bd88399fa7426580eacf7  gcc/testsuite/gcc.dg/cpp/redef1.c
  c1d73c4510fcf1e4c0d10749167ba7ea  gcc/testsuite/gcc.dg/cpp/redef2.c
  dff1ad67780a4f4eb7a40b0d122249b1  gcc/testsuite/gcc.dg/cpp/redef3.c
! b505ce562c2f0c8b10292fe7ee4439c3  gcc/testsuite/gcc.dg/cpp/separate-1.c
  17d9d91e6b87e9f5986dbaf36072407a  gcc/testsuite/gcc.dg/cpp/skipping.c
  2660488e314396078f849a40c42d6ca0  gcc/testsuite/gcc.dg/cpp/skipping2.c
  3a7905ac79abad7b67a3f5c1d83164d6  gcc/testsuite/gcc.dg/cpp/spacing1.c
*************** a47069e380e9f8e83e47e6d2d566cb3e  gcc/te
*** 15126,15144 ****
  df430c7343bfb8b4b14abef3d9cd8dfc  gcc/testsuite/gcc.dg/cpp/strify3.c
  f1455db05759312c47f97fe8f1264c69  gcc/testsuite/gcc.dg/cpp/strp1.c
  e0340e59e2b605aa96e4e029b7ff48d6  gcc/testsuite/gcc.dg/cpp/strp2.c
  23cacabd59b9c0ceea92517bf344f227  gcc/testsuite/gcc.dg/cpp/syshdr.c
  beb8fda2784d67eb1164d60f72ab1320  gcc/testsuite/gcc.dg/cpp/syshdr.h
  78adab58ef63be20d07c227fbb217bf4  gcc/testsuite/gcc.dg/cpp/syshdr1.h
  792f9bcce2887898f5316bf14ddac5b2  gcc/testsuite/gcc.dg/cpp/syshdr2.h
  d63bd478113871d08ca0617a1598c19a  gcc/testsuite/gcc.dg/cpp/sysmac1.c
  a3a0bfe4714343dccb1c44a9f8eea6ca  gcc/testsuite/gcc.dg/cpp/sysmac2.c
! d53a7f2a3dcba4090921fc849bc63947  gcc/testsuite/gcc.dg/cpp/tr-paste.c
  d1e7be001c1c677cf6acbfc7e9601597  gcc/testsuite/gcc.dg/cpp/tr-warn1.c
  748a9ffc4632256eba8f99739f0f438b  gcc/testsuite/gcc.dg/cpp/tr-warn2.c
  04c49b29bcc9a493a1d142d6746e31b6  gcc/testsuite/gcc.dg/cpp/tr-warn3.c
  ca64ba74835fb975cfdb11db404a7d4b  gcc/testsuite/gcc.dg/cpp/tr-warn4.c
  bba1edc0b74880bc977eb1f7bb7c1dc3  gcc/testsuite/gcc.dg/cpp/tr-warn5.c
! 45e73879e48692512331405d9a959dea  gcc/testsuite/gcc.dg/cpp/tr-warn6.c
  e32718f30aa27a6aabca241ea07a7a76  gcc/testsuite/gcc.dg/cpp/trad/Wunused.c
  722ce436983657fc4f00220b26f8fa36  gcc/testsuite/gcc.dg/cpp/trad/Wunused.h
  5e9de5515fe4a8824fbca4d07e421417  gcc/testsuite/gcc.dg/cpp/trad/__STDC__.c
--- 16133,16152 ----
  df430c7343bfb8b4b14abef3d9cd8dfc  gcc/testsuite/gcc.dg/cpp/strify3.c
  f1455db05759312c47f97fe8f1264c69  gcc/testsuite/gcc.dg/cpp/strp1.c
  e0340e59e2b605aa96e4e029b7ff48d6  gcc/testsuite/gcc.dg/cpp/strp2.c
+ a9412767e0654101620971f678865ddf  gcc/testsuite/gcc.dg/cpp/subframework1.c
  23cacabd59b9c0ceea92517bf344f227  gcc/testsuite/gcc.dg/cpp/syshdr.c
  beb8fda2784d67eb1164d60f72ab1320  gcc/testsuite/gcc.dg/cpp/syshdr.h
  78adab58ef63be20d07c227fbb217bf4  gcc/testsuite/gcc.dg/cpp/syshdr1.h
  792f9bcce2887898f5316bf14ddac5b2  gcc/testsuite/gcc.dg/cpp/syshdr2.h
  d63bd478113871d08ca0617a1598c19a  gcc/testsuite/gcc.dg/cpp/sysmac1.c
  a3a0bfe4714343dccb1c44a9f8eea6ca  gcc/testsuite/gcc.dg/cpp/sysmac2.c
! a761c4210317baf7c84815ede8d4d163  gcc/testsuite/gcc.dg/cpp/tr-paste.c
  d1e7be001c1c677cf6acbfc7e9601597  gcc/testsuite/gcc.dg/cpp/tr-warn1.c
  748a9ffc4632256eba8f99739f0f438b  gcc/testsuite/gcc.dg/cpp/tr-warn2.c
  04c49b29bcc9a493a1d142d6746e31b6  gcc/testsuite/gcc.dg/cpp/tr-warn3.c
  ca64ba74835fb975cfdb11db404a7d4b  gcc/testsuite/gcc.dg/cpp/tr-warn4.c
  bba1edc0b74880bc977eb1f7bb7c1dc3  gcc/testsuite/gcc.dg/cpp/tr-warn5.c
! a1a32d3d9b7267e2c79fcf8cd7afe3ba  gcc/testsuite/gcc.dg/cpp/tr-warn6.c
  e32718f30aa27a6aabca241ea07a7a76  gcc/testsuite/gcc.dg/cpp/trad/Wunused.c
  722ce436983657fc4f00220b26f8fa36  gcc/testsuite/gcc.dg/cpp/trad/Wunused.h
  5e9de5515fe4a8824fbca4d07e421417  gcc/testsuite/gcc.dg/cpp/trad/__STDC__.c
*************** ea8d52c5fdbf6b8f3354e8edff72a230  gcc/te
*** 15191,15197 ****
  863916d69c5e3aaf29d0ee5bc27b3c91  gcc/testsuite/gcc.dg/cpp/trad/mi3.h
  0545f5104f965995885459ae2d00c61e  gcc/testsuite/gcc.dg/cpp/trad/mi4.c
  2bc51212ae65644d49fbc107a27f850b  gcc/testsuite/gcc.dg/cpp/trad/mi5.c
! 8c5852ad50a2efade7fafd8035bcd971  gcc/testsuite/gcc.dg/cpp/trad/mi6.c
  521ac9d449ec695582b60b6f51804808  gcc/testsuite/gcc.dg/cpp/trad/mi6a.h
  2882200c457faea366993a4b2e83694c  gcc/testsuite/gcc.dg/cpp/trad/mi6b.h
  44ecd06f1199a044e6467b517e10e75f  gcc/testsuite/gcc.dg/cpp/trad/mi6c.h
--- 16199,16205 ----
  863916d69c5e3aaf29d0ee5bc27b3c91  gcc/testsuite/gcc.dg/cpp/trad/mi3.h
  0545f5104f965995885459ae2d00c61e  gcc/testsuite/gcc.dg/cpp/trad/mi4.c
  2bc51212ae65644d49fbc107a27f850b  gcc/testsuite/gcc.dg/cpp/trad/mi5.c
! c8a765bee43e69a012464bc207263efb  gcc/testsuite/gcc.dg/cpp/trad/mi6.c
  521ac9d449ec695582b60b6f51804808  gcc/testsuite/gcc.dg/cpp/trad/mi6a.h
  2882200c457faea366993a4b2e83694c  gcc/testsuite/gcc.dg/cpp/trad/mi6b.h
  44ecd06f1199a044e6467b517e10e75f  gcc/testsuite/gcc.dg/cpp/trad/mi6c.h
*************** bad46dc3aecb70d53e1132e7986da491  gcc/te
*** 15202,15215 ****
  6b26cd92690c2c76ce558f1f4f6ce1fb  gcc/testsuite/gcc.dg/cpp/trad/mi7b.h
  728fb4b3b00db9fb0096b9597ca10d4b  gcc/testsuite/gcc.dg/cpp/trad/null-drctv.c
  dd4179d09f2539c1afb8751574726b67  gcc/testsuite/gcc.dg/cpp/trad/num-sign.c
! 75a41eaa417783dd65b89b5d5300e6df  gcc/testsuite/gcc.dg/cpp/trad/paste.c
  c77e7691c0a10f1a6d612705553d72c6  gcc/testsuite/gcc.dg/cpp/trad/quote.c
  ef4f422edbeb55f5e7aa5eee46bf15d3  gcc/testsuite/gcc.dg/cpp/trad/recurse-1.c
  2a6c500b6641ffd5242b8a9cf9d8c39d  gcc/testsuite/gcc.dg/cpp/trad/recurse-2.c
  fb8d966edc2bb4f9de1858ef3f07c225  gcc/testsuite/gcc.dg/cpp/trad/recurse-3.c
  19e5cbd2c36fb20c8171cc606ffeb6c0  gcc/testsuite/gcc.dg/cpp/trad/redef1.c
  550c0b4a70f21cc657b0be7ee91a936f  gcc/testsuite/gcc.dg/cpp/trad/redef2.c
! 579cc33d105256eadb9d6df210592d0a  gcc/testsuite/gcc.dg/cpp/trad/strify.c
  91ea375d222f41b29fce754f2f91a77e  gcc/testsuite/gcc.dg/cpp/trad/trad.exp
  4934795b44ee5b4d4a100c69ae18a71a  gcc/testsuite/gcc.dg/cpp/trad/uchar.c
  9741e04a76510827749554c1610f8b02  gcc/testsuite/gcc.dg/cpp/trad/xwin1.c
--- 16210,16223 ----
  6b26cd92690c2c76ce558f1f4f6ce1fb  gcc/testsuite/gcc.dg/cpp/trad/mi7b.h
  728fb4b3b00db9fb0096b9597ca10d4b  gcc/testsuite/gcc.dg/cpp/trad/null-drctv.c
  dd4179d09f2539c1afb8751574726b67  gcc/testsuite/gcc.dg/cpp/trad/num-sign.c
! f05e936895687df50da3e0f17f68c57b  gcc/testsuite/gcc.dg/cpp/trad/paste.c
  c77e7691c0a10f1a6d612705553d72c6  gcc/testsuite/gcc.dg/cpp/trad/quote.c
  ef4f422edbeb55f5e7aa5eee46bf15d3  gcc/testsuite/gcc.dg/cpp/trad/recurse-1.c
  2a6c500b6641ffd5242b8a9cf9d8c39d  gcc/testsuite/gcc.dg/cpp/trad/recurse-2.c
  fb8d966edc2bb4f9de1858ef3f07c225  gcc/testsuite/gcc.dg/cpp/trad/recurse-3.c
  19e5cbd2c36fb20c8171cc606ffeb6c0  gcc/testsuite/gcc.dg/cpp/trad/redef1.c
  550c0b4a70f21cc657b0be7ee91a936f  gcc/testsuite/gcc.dg/cpp/trad/redef2.c
! 98ee20f87a972bda969b7109dd4c69d2  gcc/testsuite/gcc.dg/cpp/trad/strify.c
  91ea375d222f41b29fce754f2f91a77e  gcc/testsuite/gcc.dg/cpp/trad/trad.exp
  4934795b44ee5b4d4a100c69ae18a71a  gcc/testsuite/gcc.dg/cpp/trad/uchar.c
  9741e04a76510827749554c1610f8b02  gcc/testsuite/gcc.dg/cpp/trad/xwin1.c
*************** bc5a1f992350d5127dba7dd3a2c34eeb  gcc/te
*** 15222,15243 ****
  72312b924a83741a31455bd737f6f493  gcc/testsuite/gcc.dg/cpp/unc3.c
  da6b25f6dfaafac28220355f66de5483  gcc/testsuite/gcc.dg/cpp/unc4.c
  7ca68714f2e2e02bda16bcc824d2984a  gcc/testsuite/gcc.dg/cpp/undef2.c
  2adb7d5686ff190b39e11527a9b2fece  gcc/testsuite/gcc.dg/cpp/vararg1.c
  7d4c3e4f46665b8a19524995ee62bdf7  gcc/testsuite/gcc.dg/cpp/vararg2.c
  a3782e0d4f1f64cc38d0f1089ba6e34f  gcc/testsuite/gcc.dg/cpp/vararg3.c
  1f3cdc616d49ac4ff4c799c4ba90fff5  gcc/testsuite/gcc.dg/cpp/vararg4.c
  bddbf619aa148dc52dba82e2f937b89a  gcc/testsuite/gcc.dg/cpp/wchar-1.c
  febe83ee27f0e3494e3bd4484d6a7d21  gcc/testsuite/gcc.dg/cpp/widestr1.c
  965986b227062a2b8c664c916a71ad45  gcc/testsuite/gcc.dg/darwin-abi-1.c
! 0beab50f821e44bb1066094972d1205c  gcc/testsuite/gcc.dg/darwin-abi-2.c
  b477cca030ba86435b074a334ee9bfd0  gcc/testsuite/gcc.dg/darwin-ld-1.c
  1745b33fc7805975cb0a5e3a24fe794b  gcc/testsuite/gcc.dg/darwin-ld-2.c
  fb5a1322bd685744938894a0d61c31cd  gcc/testsuite/gcc.dg/darwin-ld-3.c
  032e2844c36490a1f93ab40ce4e95d5b  gcc/testsuite/gcc.dg/darwin-ld-4.c
  ac166dddd60ee5e26796af85796e8ce4  gcc/testsuite/gcc.dg/darwin-ld-5.c
  dbf81a3c7d5654cf4bb74c0ccaab0664  gcc/testsuite/gcc.dg/darwin-ld-6.c
! 501ff271ba87df411833708bca2044ca  gcc/testsuite/gcc.dg/darwin-longlong.c
! b64e6d4c3bc045fb8295d8b9350d400e  gcc/testsuite/gcc.dg/darwin-misaligned.c
  4e2720fdf9f84481a42dcd33f4b6d7a5  gcc/testsuite/gcc.dg/debug/20000503-1.c
  b95d03ef91e3387de791b72ff04ae358  gcc/testsuite/gcc.dg/debug/20010207-1.c
  7f58a3b9ff8cdfe8d736149d0dfa66b0  gcc/testsuite/gcc.dg/debug/20011223-1.c
--- 16230,16268 ----
  72312b924a83741a31455bd737f6f493  gcc/testsuite/gcc.dg/cpp/unc3.c
  da6b25f6dfaafac28220355f66de5483  gcc/testsuite/gcc.dg/cpp/unc4.c
  7ca68714f2e2e02bda16bcc824d2984a  gcc/testsuite/gcc.dg/cpp/undef2.c
+ b580fc14655d151bc7323c9844094653  gcc/testsuite/gcc.dg/cpp/usr/include/stdio.h
  2adb7d5686ff190b39e11527a9b2fece  gcc/testsuite/gcc.dg/cpp/vararg1.c
  7d4c3e4f46665b8a19524995ee62bdf7  gcc/testsuite/gcc.dg/cpp/vararg2.c
  a3782e0d4f1f64cc38d0f1089ba6e34f  gcc/testsuite/gcc.dg/cpp/vararg3.c
  1f3cdc616d49ac4ff4c799c4ba90fff5  gcc/testsuite/gcc.dg/cpp/vararg4.c
  bddbf619aa148dc52dba82e2f937b89a  gcc/testsuite/gcc.dg/cpp/wchar-1.c
  febe83ee27f0e3494e3bd4484d6a7d21  gcc/testsuite/gcc.dg/cpp/widestr1.c
+ 95b6f0195944f3423a1f5b559f7c6f36  gcc/testsuite/gcc.dg/cris-peep2-andu1.c
+ dbc16aecdd1446c41d23c5c963425d85  gcc/testsuite/gcc.dg/cris-peep2-andu2.c
+ 17a5fba86c80b8411badd76509411d7c  gcc/testsuite/gcc.dg/cris-peep2-xsrand.c
+ af9b17303a45605cd6cb431be816cfd5  gcc/testsuite/gcc.dg/cris-peep2-xsrand2.c
+ 7357afe53104958e57d389e7ed8586bf  gcc/testsuite/gcc.dg/darwin-20040809-2.c
+ fb2cff7f2512c80434d59d702b80e754  gcc/testsuite/gcc.dg/darwin-20040812-1.c
  965986b227062a2b8c664c916a71ad45  gcc/testsuite/gcc.dg/darwin-abi-1.c
! f1de6a326b4846750e0ac1ab775db181  gcc/testsuite/gcc.dg/darwin-abi-2.c
! 4b26b2b0c1600f70ab03780a630e9d65  gcc/testsuite/gcc.dg/darwin-bool-1.c
! d898994d2dd12e123fcb756d46aed2c4  gcc/testsuite/gcc.dg/darwin-bool-2.c
  b477cca030ba86435b074a334ee9bfd0  gcc/testsuite/gcc.dg/darwin-ld-1.c
  1745b33fc7805975cb0a5e3a24fe794b  gcc/testsuite/gcc.dg/darwin-ld-2.c
+ 9fa876cce008f5a8d26340933a0e3295  gcc/testsuite/gcc.dg/darwin-ld-20040809-1.c
+ e62d76045ed903e34f34747bee80da98  gcc/testsuite/gcc.dg/darwin-ld-20040809-2.c
+ 37137f00ef98856229916ab1efa4960c  gcc/testsuite/gcc.dg/darwin-ld-20040828-1.c
+ e9b0884874f5e5301250bf4eab5ba3e6  gcc/testsuite/gcc.dg/darwin-ld-20040828-2.c
+ c9fb88e0f1b5c073a2385125ee506c3d  gcc/testsuite/gcc.dg/darwin-ld-20040828-3.c
  fb5a1322bd685744938894a0d61c31cd  gcc/testsuite/gcc.dg/darwin-ld-3.c
  032e2844c36490a1f93ab40ce4e95d5b  gcc/testsuite/gcc.dg/darwin-ld-4.c
  ac166dddd60ee5e26796af85796e8ce4  gcc/testsuite/gcc.dg/darwin-ld-5.c
  dbf81a3c7d5654cf4bb74c0ccaab0664  gcc/testsuite/gcc.dg/darwin-ld-6.c
! e5a3f954e535f339c4a0f35fc50c6302  gcc/testsuite/gcc.dg/darwin-longdouble.c
! f4edf6f97f032d7e2502dd99bd424bb6  gcc/testsuite/gcc.dg/darwin-longlong.c
! 4dbff077cb3e8124197729c3a94647bb  gcc/testsuite/gcc.dg/darwin-misaligned.c
! 7cadcc7e6dc4783619a845ca12a12cf0  gcc/testsuite/gcc.dg/darwin-weakimport-1.c
! bda7de2e2fd6472aa3ffe7873407e58d  gcc/testsuite/gcc.dg/darwin-weakimport-2.c
  4e2720fdf9f84481a42dcd33f4b6d7a5  gcc/testsuite/gcc.dg/debug/20000503-1.c
  b95d03ef91e3387de791b72ff04ae358  gcc/testsuite/gcc.dg/debug/20010207-1.c
  7f58a3b9ff8cdfe8d736149d0dfa66b0  gcc/testsuite/gcc.dg/debug/20011223-1.c
*************** c6f77f8d88b18510ca0131e515414d33  gcc/te
*** 15248,15253 ****
--- 16273,16279 ----
  e1abd0d6f98ece711a3662415457f31b  gcc/testsuite/gcc.dg/debug/20030605-1.c
  e0f4e4120371cf9525caceb014ae14e7  gcc/testsuite/gcc.dg/debug/20031231-1.c
  ed81fbec73210f2f3666b468aaf2f326  gcc/testsuite/gcc.dg/debug/20041023-1.c
+ 4a65d4ddcd3b8b23838f4b862b6f3194  gcc/testsuite/gcc.dg/debug/20041219-1.c
  6a0b65a849bdc8acdd72456e4313ca33  gcc/testsuite/gcc.dg/debug/crash1.c
  cd0f560bfa4865b49ed1e08cd4bccad5  gcc/testsuite/gcc.dg/debug/debug-1.c
  f8dfcc31f053d43410e07480789d15b4  gcc/testsuite/gcc.dg/debug/debug-2.c
*************** d68cf38376db602494d6bf277f78b2c4  gcc/te
*** 15268,15300 ****
  80b5abd2794ccc78f738ee39dd92f775  gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die5.c
  a2d53fe66589478e9c655a62d7314c85  gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die6.c
  26dfce098c70bedc6959f11e8fb352df  gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die7.c
  c8f0a6657275677af4f6d95b665dfa10  gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2.exp
  f50cc26d9a41a3cc4afb62032326372f  gcc/testsuite/gcc.dg/debug/trivial.c
  be64d7c4703d0c44c2e31e3b6f869de0  gcc/testsuite/gcc.dg/decl-1.c
  4c4100ea12c39e52e088c59026f2a0b3  gcc/testsuite/gcc.dg/decl-2.c
! e96727647542b0fd3d80168519b1ccfb  gcc/testsuite/gcc.dg/decl-3.c
  504c250274162566c4b375ba8b01b60f  gcc/testsuite/gcc.dg/decl-4.c
  f56d6956bbfc1fc3f607c86c096cfbc8  gcc/testsuite/gcc.dg/decl-5.c
  12f0cb8aff1ab5cf6c741f1c72f2bcc3  gcc/testsuite/gcc.dg/decl-6.c
  d0670e7a7e4d7796fd6328449dacb860  gcc/testsuite/gcc.dg/decl-global-ext.c
! 18e8c594ab50084b27a09554435736fa  gcc/testsuite/gcc.dg/deprecated.c
  e1ab818f4c4b0a8e5a1acd0badfe0239  gcc/testsuite/gcc.dg/dg.exp
  800ebc8c0b6c4581219d124682bd0f28  gcc/testsuite/gcc.dg/divbyzero.c
  7b1a0f2af9f383cb4104555ac526f60a  gcc/testsuite/gcc.dg/dll-1.c
! dd71a97b6f7cf44731132b9fc99467c7  gcc/testsuite/gcc.dg/dll-2.c
  111906f0df6dc71f6545e26175f31283  gcc/testsuite/gcc.dg/dll-3.c
  6216a6958f1c6bf7c0e3d1596146354e  gcc/testsuite/gcc.dg/dll-4.c
  01b493f195e18373f433ed480a09f614  gcc/testsuite/gcc.dg/dll-5.c
  fac0248f2c7c75d57c12126d1ea893dc  gcc/testsuite/gcc.dg/dollar.c
! dd8922660d95d061f4b2844f15839280  gcc/testsuite/gcc.dg/doloop-1.c
  f34780cdbccc51545586c79e2e465eb7  gcc/testsuite/gcc.dg/duff-1.c
  3367572aef14719516e2e5669799c392  gcc/testsuite/gcc.dg/duff-2.c
  ce354ccb3e1bed31286dc21c6b83f645  gcc/testsuite/gcc.dg/duff-3.c
  4b5ac2269290a5f79b79ea4846100bd6  gcc/testsuite/gcc.dg/duff-4.c
  c3d0e5f87b23f96c728ab8dd3707bb9b  gcc/testsuite/gcc.dg/empty1.c
  f46331dedfa15ae75ea7543b07fd7d45  gcc/testsuite/gcc.dg/enum-compat-1.c
  ba60814aadf21741cc3e6781a96f6801  gcc/testsuite/gcc.dg/enum1.c
! 80289ebc09983bddd83ecf1dab0c542c  gcc/testsuite/gcc.dg/fastmath-1.c
  929a1f92da326a50b56b5ff9d2cfad9e  gcc/testsuite/gcc.dg/fnegate-1.c
  a588621b633b1aa35e6343c5f64a6ca3  gcc/testsuite/gcc.dg/format/array-1.c
  cb6e90df2af2c9a49f9744beaa8ff594  gcc/testsuite/gcc.dg/format/asm_fprintf-1.c
--- 16294,16374 ----
  80b5abd2794ccc78f738ee39dd92f775  gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die5.c
  a2d53fe66589478e9c655a62d7314c85  gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die6.c
  26dfce098c70bedc6959f11e8fb352df  gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die7.c
+ 1bc09446768c3bd2094fbf1aca7ba297  gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro.c
  c8f0a6657275677af4f6d95b665dfa10  gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2.exp
+ e39702ba4ac8cdf1b4d7895fa15c394f  gcc/testsuite/gcc.dg/debug/redecl-1.c
+ 60c3f3165dda429cbc7646a06969d16c  gcc/testsuite/gcc.dg/debug/redecl-2.c
+ 175fa916ededdb94d71518eecbe6fa1a  gcc/testsuite/gcc.dg/debug/redecl-3.c
+ 02c78013b20b01de8b057fb8a8140b01  gcc/testsuite/gcc.dg/debug/redecl-4.c
+ 254c633a62ffa810064e7b3fa3edbc69  gcc/testsuite/gcc.dg/debug/redecl-5.c
  f50cc26d9a41a3cc4afb62032326372f  gcc/testsuite/gcc.dg/debug/trivial.c
  be64d7c4703d0c44c2e31e3b6f869de0  gcc/testsuite/gcc.dg/decl-1.c
  4c4100ea12c39e52e088c59026f2a0b3  gcc/testsuite/gcc.dg/decl-2.c
! cbe742333783e4511ddd71e632ad3bc5  gcc/testsuite/gcc.dg/decl-3.c
  504c250274162566c4b375ba8b01b60f  gcc/testsuite/gcc.dg/decl-4.c
  f56d6956bbfc1fc3f607c86c096cfbc8  gcc/testsuite/gcc.dg/decl-5.c
  12f0cb8aff1ab5cf6c741f1c72f2bcc3  gcc/testsuite/gcc.dg/decl-6.c
+ 7a27969c07c52b5cde494ed149e532fa  gcc/testsuite/gcc.dg/decl-7.c
+ 4409b9841e18ac6debe0e1fc5ae0dab5  gcc/testsuite/gcc.dg/decl-8.c
  d0670e7a7e4d7796fd6328449dacb860  gcc/testsuite/gcc.dg/decl-global-ext.c
! da0ebc3a4ebef6f80056bac7463d74b5  gcc/testsuite/gcc.dg/decl-nospec-1.c
! 19347fa3459b9faaeefc1b365de759db  gcc/testsuite/gcc.dg/decl-nospec-2.c
! 7ad30b078ac27df203767b4b2ce8b28c  gcc/testsuite/gcc.dg/decl-nospec-3.c
! 43ade142e6e7f09d8050f0f7aaab086d  gcc/testsuite/gcc.dg/declspec-1.c
! 3658efbbd16cac8530a044fec12898ff  gcc/testsuite/gcc.dg/declspec-10.c
! 321a9fbb63797bcd7df324bce74a654b  gcc/testsuite/gcc.dg/declspec-11.c
! da79b7f8223e500eedf5c8791e81deee  gcc/testsuite/gcc.dg/declspec-12.c
! 2171f0402c625e62bb8a6a308dda6186  gcc/testsuite/gcc.dg/declspec-13.c
! 7cd700d3c4c548f0ee282610dd413d43  gcc/testsuite/gcc.dg/declspec-14.c
! 72ba80e2b61d1b74c0eeafd2c52f3a8b  gcc/testsuite/gcc.dg/declspec-15.c
! 7b54d36a5917b5a3a6e156d22be9b112  gcc/testsuite/gcc.dg/declspec-16.c
! 286fe01ffe6ca56bab0bda1a63d396c2  gcc/testsuite/gcc.dg/declspec-17.c
! 5e356c4d6a9f4d3085839f0218b3a7a1  gcc/testsuite/gcc.dg/declspec-2.c
! 5fa9a41f57a5f41c5b9ba441ba38fbfa  gcc/testsuite/gcc.dg/declspec-3.c
! a1ae3b59ef85093844cf3494cef6ee12  gcc/testsuite/gcc.dg/declspec-4.c
! 1c089790fd863822758d0f88f6d2a1d5  gcc/testsuite/gcc.dg/declspec-5.c
! e7a119a12e6dfab162c41d080f2ed428  gcc/testsuite/gcc.dg/declspec-6.c
! 857dd8cb338d07ed5639106cc8b6f8b2  gcc/testsuite/gcc.dg/declspec-7.c
! 7fc4a25735662ab69523b3e905388293  gcc/testsuite/gcc.dg/declspec-8.c
! b224f23157eb7a0a8a4c84cd512d1c7f  gcc/testsuite/gcc.dg/declspec-9.c
! 29bda4ed3cdc847c236fc0ef0888e01d  gcc/testsuite/gcc.dg/deprecated-2.c
! 6a7682aec25c4be0ec245e7870ae8627  gcc/testsuite/gcc.dg/deprecated-3.c
! 4062baa42c16757fb5fd520b858cabe8  gcc/testsuite/gcc.dg/deprecated.c
  e1ab818f4c4b0a8e5a1acd0badfe0239  gcc/testsuite/gcc.dg/dg.exp
  800ebc8c0b6c4581219d124682bd0f28  gcc/testsuite/gcc.dg/divbyzero.c
  7b1a0f2af9f383cb4104555ac526f60a  gcc/testsuite/gcc.dg/dll-1.c
! 41d420bac4049866ec20ba2e74077900  gcc/testsuite/gcc.dg/dll-2.c
  111906f0df6dc71f6545e26175f31283  gcc/testsuite/gcc.dg/dll-3.c
  6216a6958f1c6bf7c0e3d1596146354e  gcc/testsuite/gcc.dg/dll-4.c
  01b493f195e18373f433ed480a09f614  gcc/testsuite/gcc.dg/dll-5.c
  fac0248f2c7c75d57c12126d1ea893dc  gcc/testsuite/gcc.dg/dollar.c
! 0fde2e4890bda051e595c55b3efebeee  gcc/testsuite/gcc.dg/doloop-1.c
! 2a0f90e764120be6ebd86a1d01676eb8  gcc/testsuite/gcc.dg/doloop-2.c
! efbeda9c3f0c482106667db0a34aa5db  gcc/testsuite/gcc.dg/dremf-type-compat-1.c
! 0c666ca71398d4cfdac9e00e282cb6c8  gcc/testsuite/gcc.dg/dremf-type-compat-2.c
! 8c406c818496648723d598c39bbc5f0c  gcc/testsuite/gcc.dg/dremf-type-compat-3.c
! e839f4fdc74ba125e0fe134dcecc3936  gcc/testsuite/gcc.dg/dremf-type-compat-4.c
  f34780cdbccc51545586c79e2e465eb7  gcc/testsuite/gcc.dg/duff-1.c
  3367572aef14719516e2e5669799c392  gcc/testsuite/gcc.dg/duff-2.c
  ce354ccb3e1bed31286dc21c6b83f645  gcc/testsuite/gcc.dg/duff-3.c
  4b5ac2269290a5f79b79ea4846100bd6  gcc/testsuite/gcc.dg/duff-4.c
+ 98e009f186009113a73f83a1d6acae4c  gcc/testsuite/gcc.dg/empty-source-1.c
+ 9227919382dd50d2fab79efbece543d0  gcc/testsuite/gcc.dg/empty-source-2.c
+ 1d4952d15870b228bc36153cc113aa5c  gcc/testsuite/gcc.dg/empty-source-3.c
  c3d0e5f87b23f96c728ab8dd3707bb9b  gcc/testsuite/gcc.dg/empty1.c
+ 959121eabe31d6444e7adffe039b0bdd  gcc/testsuite/gcc.dg/empty2.c
  f46331dedfa15ae75ea7543b07fd7d45  gcc/testsuite/gcc.dg/enum-compat-1.c
  ba60814aadf21741cc3e6781a96f6801  gcc/testsuite/gcc.dg/enum1.c
! 36d60a18cc2d81c2f3553d9d74463b9e  gcc/testsuite/gcc.dg/enum2.c
! a50b0f335a12a722f789c3ed820f2f93  gcc/testsuite/gcc.dg/enum3.c
! bbb87d2a73c29d36f6bb6b3dec4a2b02  gcc/testsuite/gcc.dg/extra-semi-1.c
! 458a892d6154b0168d9b78e4532023df  gcc/testsuite/gcc.dg/extra-semi-2.c
! 68d0996cc73902d8ca718419dffb480e  gcc/testsuite/gcc.dg/extra-semi-3.c
! 3ed85dd13ec08e572cc78a899009b727  gcc/testsuite/gcc.dg/fastmath-1.c
! 51a970b6da1c67cab196b3d924be1d70  gcc/testsuite/gcc.dg/fdata-sections-1.c
! ef50af421660786db0fe02810452b32f  gcc/testsuite/gcc.dg/fixuns-trunc-1.c
! 69ed1575e1b01f57f9ca40ef702adf25  gcc/testsuite/gcc.dg/float-range-1.c
! f94128eb9e051131d6f3779893016fa9  gcc/testsuite/gcc.dg/float-range-2.c
  929a1f92da326a50b56b5ff9d2cfad9e  gcc/testsuite/gcc.dg/fnegate-1.c
  a588621b633b1aa35e6343c5f64a6ca3  gcc/testsuite/gcc.dg/format/array-1.c
  cb6e90df2af2c9a49f9744beaa8ff594  gcc/testsuite/gcc.dg/format/asm_fprintf-1.c
*************** cb6e90df2af2c9a49f9744beaa8ff594  gcc/te
*** 15303,15311 ****
  b3b8becb69b2d5cbc97af9e3c80f89b4  gcc/testsuite/gcc.dg/format/attr-3.c
  fcbb81623ea6407ed63de93f17a2ecce  gcc/testsuite/gcc.dg/format/attr-4.c
  c583c67e76a60148841dccf3b12f6388  gcc/testsuite/gcc.dg/format/attr-5.c
! 0ba783afd660772612360df5480634db  gcc/testsuite/gcc.dg/format/attr-6.c
  2d279e1ec7748f5ca4f1aa3798b3469e  gcc/testsuite/gcc.dg/format/attr-7.c
! 220a00e907dbdcc08024c366a2c63022  gcc/testsuite/gcc.dg/format/branch-1.c
  a5f952800e5755765d6e77745c013e40  gcc/testsuite/gcc.dg/format/builtin-1.c
  58789dd022fabcc8be9a9cdad3be3f46  gcc/testsuite/gcc.dg/format/c90-printf-1.c
  912996266243b1739f46e4e34a2c13ba  gcc/testsuite/gcc.dg/format/c90-printf-2.c
--- 16377,16385 ----
  b3b8becb69b2d5cbc97af9e3c80f89b4  gcc/testsuite/gcc.dg/format/attr-3.c
  fcbb81623ea6407ed63de93f17a2ecce  gcc/testsuite/gcc.dg/format/attr-4.c
  c583c67e76a60148841dccf3b12f6388  gcc/testsuite/gcc.dg/format/attr-5.c
! 57f843cb98bb63de6a5cc78d13e3fb6d  gcc/testsuite/gcc.dg/format/attr-6.c
  2d279e1ec7748f5ca4f1aa3798b3469e  gcc/testsuite/gcc.dg/format/attr-7.c
! 4dda99fba931a235a4e151c2dcdff2fc  gcc/testsuite/gcc.dg/format/branch-1.c
  a5f952800e5755765d6e77745c013e40  gcc/testsuite/gcc.dg/format/builtin-1.c
  58789dd022fabcc8be9a9cdad3be3f46  gcc/testsuite/gcc.dg/format/c90-printf-1.c
  912996266243b1739f46e4e34a2c13ba  gcc/testsuite/gcc.dg/format/c90-printf-2.c
*************** b64f4136e6df482405341915758a0f06  gcc/te
*** 15326,15332 ****
  6d6b33050d17c85b937b5cceaa2a7dec  gcc/testsuite/gcc.dg/format/c99-scanf-3.c
  5fd0e2d0824e5c5f74e17619668f24d4  gcc/testsuite/gcc.dg/format/c99-strftime-1.c
  1cbc4a0f562f400d1b4cd399fccdaed8  gcc/testsuite/gcc.dg/format/c99-strftime-2.c
! 3c61db36bd896b4660314fe39e0b76a7  gcc/testsuite/gcc.dg/format/diag-1.c
  859d88caa1eeeb23ca9b76526b3a4f3e  gcc/testsuite/gcc.dg/format/errmk-1.c
  07bb1882393eddf8452ebd19e6a983d2  gcc/testsuite/gcc.dg/format/ext-1.c
  659ecddafea7332aee20e4459efbfa15  gcc/testsuite/gcc.dg/format/ext-2.c
--- 16400,16408 ----
  6d6b33050d17c85b937b5cceaa2a7dec  gcc/testsuite/gcc.dg/format/c99-scanf-3.c
  5fd0e2d0824e5c5f74e17619668f24d4  gcc/testsuite/gcc.dg/format/c99-strftime-1.c
  1cbc4a0f562f400d1b4cd399fccdaed8  gcc/testsuite/gcc.dg/format/c99-strftime-2.c
! 4e5c30c83235482bc1db89a1fec24a50  gcc/testsuite/gcc.dg/format/cmn-err-1.c
! 597c2cef1b33bb71739d311ee56278e3  gcc/testsuite/gcc.dg/format/diag-1.c
! 76b3d68f4d248a85562e894eb00f75c7  gcc/testsuite/gcc.dg/format/diag-2.c
  859d88caa1eeeb23ca9b76526b3a4f3e  gcc/testsuite/gcc.dg/format/errmk-1.c
  07bb1882393eddf8452ebd19e6a983d2  gcc/testsuite/gcc.dg/format/ext-1.c
  659ecddafea7332aee20e4459efbfa15  gcc/testsuite/gcc.dg/format/ext-2.c
*************** b64f4136e6df482405341915758a0f06  gcc/te
*** 15335,15347 ****
  49fe80a2a1fde4f6d66844739b9cdcbf  gcc/testsuite/gcc.dg/format/ext-5.c
  280e9929affa5c28ecacf01249e7f11b  gcc/testsuite/gcc.dg/format/ext-6.c
  069885d8c5b6ccf3bd47f29cb7b15883  gcc/testsuite/gcc.dg/format/format.exp
! 65f4b97508d5a85c0959f32cb979aceb  gcc/testsuite/gcc.dg/format/format.h
  b4ec3bdfc8a17fe7b0e497191a8fcc0d  gcc/testsuite/gcc.dg/format/gcc_diag-1.c
  2bfe6b8006b13a707b967e17057e7637  gcc/testsuite/gcc.dg/format/miss-1.c
  adc1c3d1b88b20e8dd013a64b91db577  gcc/testsuite/gcc.dg/format/miss-2.c
  00cd55a0640c7ef680f596703d8311b9  gcc/testsuite/gcc.dg/format/multattr-1.c
  390d2a528ba1789fb27ba3a011c170d1  gcc/testsuite/gcc.dg/format/multattr-2.c
! a0d789226cd12dfdb4443b3066369b2e  gcc/testsuite/gcc.dg/format/multattr-3.c
  63185e4123bc7bcc376bf6874ec2005f  gcc/testsuite/gcc.dg/format/no-exargs-1.c
  6b16a40ed92dacd3b84c2c55a8c432b3  gcc/testsuite/gcc.dg/format/no-exargs-2.c
  0ea9372e4cf4c35f730148b1e1d9b07e  gcc/testsuite/gcc.dg/format/no-y2k-1.c
--- 16411,16423 ----
  49fe80a2a1fde4f6d66844739b9cdcbf  gcc/testsuite/gcc.dg/format/ext-5.c
  280e9929affa5c28ecacf01249e7f11b  gcc/testsuite/gcc.dg/format/ext-6.c
  069885d8c5b6ccf3bd47f29cb7b15883  gcc/testsuite/gcc.dg/format/format.exp
! 9d2db1f7c1af6b9cecbff01a6fce7a98  gcc/testsuite/gcc.dg/format/format.h
  b4ec3bdfc8a17fe7b0e497191a8fcc0d  gcc/testsuite/gcc.dg/format/gcc_diag-1.c
  2bfe6b8006b13a707b967e17057e7637  gcc/testsuite/gcc.dg/format/miss-1.c
  adc1c3d1b88b20e8dd013a64b91db577  gcc/testsuite/gcc.dg/format/miss-2.c
  00cd55a0640c7ef680f596703d8311b9  gcc/testsuite/gcc.dg/format/multattr-1.c
  390d2a528ba1789fb27ba3a011c170d1  gcc/testsuite/gcc.dg/format/multattr-2.c
! a41798c73aec8fcc8c0bbba8cc6d8637  gcc/testsuite/gcc.dg/format/multattr-3.c
  63185e4123bc7bcc376bf6874ec2005f  gcc/testsuite/gcc.dg/format/no-exargs-1.c
  6b16a40ed92dacd3b84c2c55a8c432b3  gcc/testsuite/gcc.dg/format/no-exargs-2.c
  0ea9372e4cf4c35f730148b1e1d9b07e  gcc/testsuite/gcc.dg/format/no-y2k-1.c
*************** d487dac917842b7e25f4fc0434c2cbab  gcc/te
*** 15349,15389 ****
  0aa0ae604478cf1d92b6021c870d0726  gcc/testsuite/gcc.dg/format/nonlit-2.c
  1cc60d4a7ab9190b0d72ea942888828a  gcc/testsuite/gcc.dg/format/nonlit-3.c
  7d5a60e040bd26c50ab5b50cb8b8ae02  gcc/testsuite/gcc.dg/format/null-1.c
  a5e5757327ee9e4157e7c1abee28e939  gcc/testsuite/gcc.dg/format/plus-1.c
  8e4de68e496a28c03b2a9a568280143e  gcc/testsuite/gcc.dg/format/sec-1.c
  a5646814dd913a529583463f2ec601f9  gcc/testsuite/gcc.dg/format/strfmon-1.c
  96c511d7514c3e9a59f36399a27e37c2  gcc/testsuite/gcc.dg/format/va-1.c
  24f35f900d41b5f6d0a7f00b75e01677  gcc/testsuite/gcc.dg/format/warnll-1.c
! c2e5aca72f8bddef1fedb610fcf4b287  gcc/testsuite/gcc.dg/format/xopen-1.c
  cefa0d7272663a03eb6147ce1323c355  gcc/testsuite/gcc.dg/format/xopen-2.c
  9cccf2449cd2882429b016b7cde82358  gcc/testsuite/gcc.dg/format/z-1.c
  cfde414df06a7d559244461a11116f3a  gcc/testsuite/gcc.dg/format/zero-length-1.c
! dbf901d87193b0bc83dc76073a45e5d8  gcc/testsuite/gcc.dg/fshort-wchar.c
  fc8aab2b77096404ffea331358223da8  gcc/testsuite/gcc.dg/ftrapv-1.c
  054d9787db189df8f3b91708149755d2  gcc/testsuite/gcc.dg/func-ptr-conv-1.c
  9644c7f08eac0e0fb416e316dbc87180  gcc/testsuite/gcc.dg/funcdef-attr-1.c
  76d015871f349d73fa20bf4628162ac0  gcc/testsuite/gcc.dg/funcorder.c
  62d920d6b82d74485639ab900ef86541  gcc/testsuite/gcc.dg/fwrapv-1.c
  1cf9e5c4ca991ae1427cec43e737b17a  gcc/testsuite/gcc.dg/fwrapv-2.c
! 688a40b5eabaec9cd584b0ad63793fb2  gcc/testsuite/gcc.dg/fwritable-strings-1.c
  b2a706a7cbbcb618336ca54df5e8285f  gcc/testsuite/gcc.dg/gnu89-dupqual-1.c
  9b4e2ffef53a9975339f70afe5b6b7bc  gcc/testsuite/gcc.dg/gnu89-init-1.c
  2816ce367d05508bf88cc4732fcec0cf  gcc/testsuite/gcc.dg/gnu89-init-2.c
  378a4e5bd52b14ba32f52bcf2b57ef59  gcc/testsuite/gcc.dg/gnu89-init-3.c
  465c3878b47ae66788561ddbec36b439  gcc/testsuite/gcc.dg/gnu99-init-1.c
  a79e7852cdc3a2591178e5ebb62a3a3b  gcc/testsuite/gcc.dg/h8300-stack-1.c
! bc6c2e5dd841b5a38cb5a1229d442186  gcc/testsuite/gcc.dg/i386-387-1.c
! 3d0c6fe169213484c3891ca36105111e  gcc/testsuite/gcc.dg/i386-387-2.c
! 7d5c7067d96cfda6556fc592c6ef5960  gcc/testsuite/gcc.dg/i386-387-3.c
! 2a1455f8e1513e9b98e8682f0821adf6  gcc/testsuite/gcc.dg/i386-387-4.c
! 4e3fcdf152a6f5fd66c3d9e397009548  gcc/testsuite/gcc.dg/i386-387-5.c
! cc3bd18948b22645e0ea9ac889398d41  gcc/testsuite/gcc.dg/i386-387-6.c
! 83ffd6aa99a7afd48751e17c448e54f6  gcc/testsuite/gcc.dg/i386-asm-1.c
  1a93a48bad214c4f6ddb276c193b6069  gcc/testsuite/gcc.dg/i386-asm-2.c
! fbc19758b5ab141b5ba795bdbb18707a  gcc/testsuite/gcc.dg/i386-bitfield1.c
! 3b0c8871458e5441d8fd6f46f328bcb2  gcc/testsuite/gcc.dg/i386-bitfield2.c
  6e6ebd0a09bf61e285f83521af020c0d  gcc/testsuite/gcc.dg/i386-bitfield3.c
! b3ebc6171e02311cff6d1b0fa6fb339a  gcc/testsuite/gcc.dg/i386-cadd.c
  61b0d88a314f12bf337cb915061c7976  gcc/testsuite/gcc.dg/i386-call-1.c
  c45ef302de0c5b96161307a4b16c2247  gcc/testsuite/gcc.dg/i386-cmov1.c
  e06749d5edd11f83ba59a8f8d7aa0454  gcc/testsuite/gcc.dg/i386-cmov2.c
--- 16425,16495 ----
  0aa0ae604478cf1d92b6021c870d0726  gcc/testsuite/gcc.dg/format/nonlit-2.c
  1cc60d4a7ab9190b0d72ea942888828a  gcc/testsuite/gcc.dg/format/nonlit-3.c
  7d5a60e040bd26c50ab5b50cb8b8ae02  gcc/testsuite/gcc.dg/format/null-1.c
+ 49631e03aa916a9a3f06009ceacfc047  gcc/testsuite/gcc.dg/format/opt-1.c
+ 34fb7b951c1773f0722c50eafc532740  gcc/testsuite/gcc.dg/format/opt-2.c
+ 8960bff17a2a9436a85977b6cce4c7d1  gcc/testsuite/gcc.dg/format/opt-3.c
+ ae19a1cb6faf6cc1d3d8addd09a17b52  gcc/testsuite/gcc.dg/format/opt-4.c
+ c91ed06005d57efb19a9639ac83e4d94  gcc/testsuite/gcc.dg/format/opt-5.c
+ 8c430efa2fc8d3c7fec3e12f6036d6ee  gcc/testsuite/gcc.dg/format/opt-6.c
  a5e5757327ee9e4157e7c1abee28e939  gcc/testsuite/gcc.dg/format/plus-1.c
  8e4de68e496a28c03b2a9a568280143e  gcc/testsuite/gcc.dg/format/sec-1.c
+ 41c49ed405deff83bccfdde8fb0380ad  gcc/testsuite/gcc.dg/format/sentinel-1.c
  a5646814dd913a529583463f2ec601f9  gcc/testsuite/gcc.dg/format/strfmon-1.c
+ 0580b4faa6d69e15b3dbd3564bef3b03  gcc/testsuite/gcc.dg/format/strfmon-2.c
  96c511d7514c3e9a59f36399a27e37c2  gcc/testsuite/gcc.dg/format/va-1.c
  24f35f900d41b5f6d0a7f00b75e01677  gcc/testsuite/gcc.dg/format/warnll-1.c
! bbf547838099a8bba46af1adcf879d70  gcc/testsuite/gcc.dg/format/xopen-1.c
  cefa0d7272663a03eb6147ce1323c355  gcc/testsuite/gcc.dg/format/xopen-2.c
+ bde0d019810a1853c8bba7305e5cdc00  gcc/testsuite/gcc.dg/format/xopen-3.c
  9cccf2449cd2882429b016b7cde82358  gcc/testsuite/gcc.dg/format/z-1.c
  cfde414df06a7d559244461a11116f3a  gcc/testsuite/gcc.dg/format/zero-length-1.c
! d898bf53f3f67a85e6b6dbbffeb5c0eb  gcc/testsuite/gcc.dg/framework-1.c
! 2f670a43e60d26a733d4715d03da2e50  gcc/testsuite/gcc.dg/fshort-wchar.c
  fc8aab2b77096404ffea331358223da8  gcc/testsuite/gcc.dg/ftrapv-1.c
+ eb515f51738ea7e66a74bba30c07d288  gcc/testsuite/gcc.dg/ftrapv-2.c
+ 8cdaf02a469455e7975cd57fc98484b0  gcc/testsuite/gcc.dg/func-args-1.c
+ e75333372361c3ec676c31ff57f67b39  gcc/testsuite/gcc.dg/func-outside-1.c
+ e4ba881665ef030f84ea9dcf900d3b19  gcc/testsuite/gcc.dg/func-outside-2.c
  054d9787db189df8f3b91708149755d2  gcc/testsuite/gcc.dg/func-ptr-conv-1.c
  9644c7f08eac0e0fb416e316dbc87180  gcc/testsuite/gcc.dg/funcdef-attr-1.c
+ 631c25cdcb004ee1ab6ebf40060c8e5c  gcc/testsuite/gcc.dg/funcdef-storage-1.c
  76d015871f349d73fa20bf4628162ac0  gcc/testsuite/gcc.dg/funcorder.c
+ 565480f5f171a65e57b3681138cfe06c  gcc/testsuite/gcc.dg/funroll-loops-all.c
  62d920d6b82d74485639ab900ef86541  gcc/testsuite/gcc.dg/fwrapv-1.c
  1cf9e5c4ca991ae1427cec43e737b17a  gcc/testsuite/gcc.dg/fwrapv-2.c
! 644bbd61aaed9ff26399d6df215c0bf6  gcc/testsuite/gcc.dg/gnu-cond-expr-1.c
! a8582cd0b161ca78615629575be48ebd  gcc/testsuite/gcc.dg/gnu-cond-expr-2.c
! 182acc593171594b059c21f3e6add5a9  gcc/testsuite/gcc.dg/gnu-cond-expr-3.c
  b2a706a7cbbcb618336ca54df5e8285f  gcc/testsuite/gcc.dg/gnu89-dupqual-1.c
  9b4e2ffef53a9975339f70afe5b6b7bc  gcc/testsuite/gcc.dg/gnu89-init-1.c
  2816ce367d05508bf88cc4732fcec0cf  gcc/testsuite/gcc.dg/gnu89-init-2.c
  378a4e5bd52b14ba32f52bcf2b57ef59  gcc/testsuite/gcc.dg/gnu89-init-3.c
  465c3878b47ae66788561ddbec36b439  gcc/testsuite/gcc.dg/gnu99-init-1.c
+ e488893b50fec3458ff941b969c6a3ee  gcc/testsuite/gcc.dg/gnu99-init-2.c
+ 73b4b22644965545b7a058a6facc4437  gcc/testsuite/gcc.dg/gnu99-static-1.c
+ 306ad5770d3a79444ba33c00e4c255bd  gcc/testsuite/gcc.dg/h8300-bss-align-1.c
+ 6e57534496a3cfbfa660bddc011efbc3  gcc/testsuite/gcc.dg/h8300-ice2.c
  a79e7852cdc3a2591178e5ebb62a3a3b  gcc/testsuite/gcc.dg/h8300-stack-1.c
! 8a5d4473d2a66628b50d50b8731d4b68  gcc/testsuite/gcc.dg/i386-387-1.c
! 987fe4ef921b39e7da8928ea8f087b2d  gcc/testsuite/gcc.dg/i386-387-2.c
! ccb04824f32e9cba7644d11b7b89fb51  gcc/testsuite/gcc.dg/i386-387-3.c
! 8876893048f8137a77ac809663e4a23f  gcc/testsuite/gcc.dg/i386-387-4.c
! 77b7f7c16aac082c57d3dbf4d5a68284  gcc/testsuite/gcc.dg/i386-387-5.c
! eb20102f7f0b1e64c673bd065cd8535d  gcc/testsuite/gcc.dg/i386-387-6.c
! b1e95a80199ce6feff2da9fdcf7908b2  gcc/testsuite/gcc.dg/i386-387-7.c
! 2054142c61f9466ef53ec5840d583dd8  gcc/testsuite/gcc.dg/i386-387-8.c
! c4085c002b989e3f1f2391d00f40b148  gcc/testsuite/gcc.dg/i386-3dnow-1.c
! 2016733ed3862062c666d6bb504d1aec  gcc/testsuite/gcc.dg/i386-3dnow-2.c
! b13460dd87bea414b8d9ddd2cb8ae1c5  gcc/testsuite/gcc.dg/i386-3dnowA-1.c
! 9132473c2917ead29dac67b9367f61f2  gcc/testsuite/gcc.dg/i386-3dnowA-2.c
! b2d8d9021d3cfccc5bf2437bdf514f61  gcc/testsuite/gcc.dg/i386-asm-1.c
  1a93a48bad214c4f6ddb276c193b6069  gcc/testsuite/gcc.dg/i386-asm-2.c
! f7e69590a81efcdd5d6a407639ed6df0  gcc/testsuite/gcc.dg/i386-asm-3.c
! 71645b4660c5eecfd2fc6aaf83382f14  gcc/testsuite/gcc.dg/i386-asm-4.c
! df5a12e4349baa3d4f353168b3303c35  gcc/testsuite/gcc.dg/i386-bitfield1.c
! 5671a9b2941994f1318942fda0b93741  gcc/testsuite/gcc.dg/i386-bitfield2.c
  6e6ebd0a09bf61e285f83521af020c0d  gcc/testsuite/gcc.dg/i386-bitfield3.c
! 62610903f90b410c6c36801586295ccb  gcc/testsuite/gcc.dg/i386-cadd.c
  61b0d88a314f12bf337cb915061c7976  gcc/testsuite/gcc.dg/i386-call-1.c
  c45ef302de0c5b96161307a4b16c2247  gcc/testsuite/gcc.dg/i386-cmov1.c
  e06749d5edd11f83ba59a8f8d7aa0454  gcc/testsuite/gcc.dg/i386-cmov2.c
*************** a747cf9fefb0f5eb3f463204001dd748  gcc/te
*** 15395,15428 ****
  435fa0160dadb67b6f727e49f094dddf  gcc/testsuite/gcc.dg/i386-fastcall-1.c
  7ff2a6b4786a6bd60d920c119b4c921f  gcc/testsuite/gcc.dg/i386-fpcvt-1.c
  d00ec27a282186715b068226b132b18b  gcc/testsuite/gcc.dg/i386-fpcvt-2.c
! 54a0a16a1c9c547605da68ba743e9a9e  gcc/testsuite/gcc.dg/i386-fpcvt-3.c
  659dda33ca796bf1fb09c16c9dedd808  gcc/testsuite/gcc.dg/i386-fpcvt-4.c
! e4d02339af0175d2ac11ff612555df8a  gcc/testsuite/gcc.dg/i386-local.c
  6335d2472b34d72b4a46933ea69a1909  gcc/testsuite/gcc.dg/i386-local2.c
! 692a673e4a43f9f68e891c736ee4a625  gcc/testsuite/gcc.dg/i386-loop-1.c
! adfa7114400f9bf363b1af7f6c7839bd  gcc/testsuite/gcc.dg/i386-loop-2.c
! 6043364132bfc569790c401e32731537  gcc/testsuite/gcc.dg/i386-loop-3.c
! 04ad884237b03e73cd631ac98fd1804b  gcc/testsuite/gcc.dg/i386-memset-1.c
  3b7138af69003b3a663e5d092a389196  gcc/testsuite/gcc.dg/i386-mmx-1.c
  caa00f3827f7f7b8727193aa4fbeb02b  gcc/testsuite/gcc.dg/i386-mmx-2.c
! 6e8d1d0b134fafab25c893e90a357386  gcc/testsuite/gcc.dg/i386-mmx-3.c
  3390229d27120dc38643c3bf8da71978  gcc/testsuite/gcc.dg/i386-mmx-4.c
  efa31b336ed2ed8943f9de44758bdfb2  gcc/testsuite/gcc.dg/i386-mmx-5.c
  f0ba3e93aa45e0ba1fc7e7649f512b32  gcc/testsuite/gcc.dg/i386-mul.c
! ee10ef82b4c5c383688a09ce82003aaf  gcc/testsuite/gcc.dg/i386-pentium4-not-mull.c
! 45612a0f781ac76e1a7112f84252d774  gcc/testsuite/gcc.dg/i386-pic-1.c
! 75d69bb1e62f8cc9cf21a38342c534d3  gcc/testsuite/gcc.dg/i386-regparm.c
! 894796445492b2a95c8b490126785d7f  gcc/testsuite/gcc.dg/i386-signbit-1.c
! 0534a5c29d6d5856bcaca2956c6d1b96  gcc/testsuite/gcc.dg/i386-signbit-2.c
! eba1f742b5a833ec8f7232b6d78da3a8  gcc/testsuite/gcc.dg/i386-signbit-3.c
  93931d968ce7a742e6a92420704ca0a9  gcc/testsuite/gcc.dg/i386-sse-1.c
  a14a3c5452af0f0c3fd3aa461c361ce4  gcc/testsuite/gcc.dg/i386-sse-2.c
  b9e2808a3a55b726edac71f79691878b  gcc/testsuite/gcc.dg/i386-sse-3.c
! 2677c7c96984a06084150a6deaf71358  gcc/testsuite/gcc.dg/i386-sse-4.c
! 7527be813ad4b5c0b469806a2159f6ff  gcc/testsuite/gcc.dg/i386-sse-5.c
  e764b0a52254a314e13525b02da9d209  gcc/testsuite/gcc.dg/i386-sse-6.c
  b8e77d47fa4ad03148d6bc366a2ec85d  gcc/testsuite/gcc.dg/i386-sse-7.c
! 47f03c2703bed942d9258abaf026d614  gcc/testsuite/gcc.dg/i386-sse-8.c
  bd10201e011063d5ac5e0bec82308ad0  gcc/testsuite/gcc.dg/i386-ssefp-1.c
  ea3d1ca3cab5c41ace70db628397c752  gcc/testsuite/gcc.dg/i386-ssefp-2.c
  751ac4a7f2fc7baaf6798fd6b2668791  gcc/testsuite/gcc.dg/i386-ssetype-1.c
--- 16501,16538 ----
  435fa0160dadb67b6f727e49f094dddf  gcc/testsuite/gcc.dg/i386-fastcall-1.c
  7ff2a6b4786a6bd60d920c119b4c921f  gcc/testsuite/gcc.dg/i386-fpcvt-1.c
  d00ec27a282186715b068226b132b18b  gcc/testsuite/gcc.dg/i386-fpcvt-2.c
! 34d3f00f44694da3c16d49e8e6ce3e5f  gcc/testsuite/gcc.dg/i386-fpcvt-3.c
  659dda33ca796bf1fb09c16c9dedd808  gcc/testsuite/gcc.dg/i386-fpcvt-4.c
! 48d31a795ac8363c32dce39c317a0c6a  gcc/testsuite/gcc.dg/i386-local.c
  6335d2472b34d72b4a46933ea69a1909  gcc/testsuite/gcc.dg/i386-local2.c
! adec65b1f2dd4e0b83af3a712284aa14  gcc/testsuite/gcc.dg/i386-loop-1.c
! 97998268320ac3a3db570a4ef037bf79  gcc/testsuite/gcc.dg/i386-loop-2.c
! f540e0978d5c30aee79ec064d57638a5  gcc/testsuite/gcc.dg/i386-loop-3.c
! 1aeaf17fcbe9b7ad3129e8810bc3e7dd  gcc/testsuite/gcc.dg/i386-memset-1.c
  3b7138af69003b3a663e5d092a389196  gcc/testsuite/gcc.dg/i386-mmx-1.c
  caa00f3827f7f7b8727193aa4fbeb02b  gcc/testsuite/gcc.dg/i386-mmx-2.c
! 04db03897e9e2ec2bfff446584f519f7  gcc/testsuite/gcc.dg/i386-mmx-3.c
  3390229d27120dc38643c3bf8da71978  gcc/testsuite/gcc.dg/i386-mmx-4.c
  efa31b336ed2ed8943f9de44758bdfb2  gcc/testsuite/gcc.dg/i386-mmx-5.c
+ 2b7c4e83255a2dcee59a97597d2135d3  gcc/testsuite/gcc.dg/i386-mmx-6.c
  f0ba3e93aa45e0ba1fc7e7649f512b32  gcc/testsuite/gcc.dg/i386-mul.c
! 036f7c5de5eff64b30eff402883aae65  gcc/testsuite/gcc.dg/i386-pentium4-not-mull.c
! 1eb059a463b3773e7a22e26b14bb93e5  gcc/testsuite/gcc.dg/i386-pic-1.c
! 495ab32e4c822ea6e5519928338f19fa  gcc/testsuite/gcc.dg/i386-regparm.c
! 51aca2178b5ab93c7b6438c65394c512  gcc/testsuite/gcc.dg/i386-rotate-1.c
! 801f023205b1804ca5d8ef7758cf82f8  gcc/testsuite/gcc.dg/i386-signbit-1.c
! 56516bf2058e6cdd42f13bdff14807c4  gcc/testsuite/gcc.dg/i386-signbit-2.c
! 1eec2e86c24fcefe7e97817299331b18  gcc/testsuite/gcc.dg/i386-signbit-3.c
  93931d968ce7a742e6a92420704ca0a9  gcc/testsuite/gcc.dg/i386-sse-1.c
+ d3479d9362aa2c7e626ad583d628ab37  gcc/testsuite/gcc.dg/i386-sse-10.c
  a14a3c5452af0f0c3fd3aa461c361ce4  gcc/testsuite/gcc.dg/i386-sse-2.c
  b9e2808a3a55b726edac71f79691878b  gcc/testsuite/gcc.dg/i386-sse-3.c
! 8926e53f233d04982e0bc8af7fb5cdcd  gcc/testsuite/gcc.dg/i386-sse-4.c
! 0b463f69f66dbdf3a57e675368e1bf28  gcc/testsuite/gcc.dg/i386-sse-5.c
  e764b0a52254a314e13525b02da9d209  gcc/testsuite/gcc.dg/i386-sse-6.c
  b8e77d47fa4ad03148d6bc366a2ec85d  gcc/testsuite/gcc.dg/i386-sse-7.c
! e28ac0d2d3767e3c69e6cd6341c3cbda  gcc/testsuite/gcc.dg/i386-sse-8.c
! 355584ae88a324da127f545a4cbc7e60  gcc/testsuite/gcc.dg/i386-sse-9.c
  bd10201e011063d5ac5e0bec82308ad0  gcc/testsuite/gcc.dg/i386-ssefp-1.c
  ea3d1ca3cab5c41ace70db628397c752  gcc/testsuite/gcc.dg/i386-ssefp-2.c
  751ac4a7f2fc7baaf6798fd6b2668791  gcc/testsuite/gcc.dg/i386-ssetype-1.c
*************** f0c62ee7d319e56cb75bc857ffbf1485  gcc/te
*** 15430,15539 ****
  d03160da6a45e50d98b0c10e11501fc4  gcc/testsuite/gcc.dg/i386-ssetype-3.c
  5f393f414c97d158b6bd7f1f91da4e1c  gcc/testsuite/gcc.dg/i386-ssetype-4.c
  e92425fe71067135bfb59ec89af690ee  gcc/testsuite/gcc.dg/i386-ssetype-5.c
! 6ebeeffc90dab3a0b027e61d12749cbe  gcc/testsuite/gcc.dg/i386-unroll-1.c
  8e8c7085bb4fae50e165fbbd6c898363  gcc/testsuite/gcc.dg/i386-volatile-1.c
! 0c26c43f0f3600bd1f30160203c4b708  gcc/testsuite/gcc.dg/ia64-asm-1.c
  df758ac7986976188ce8f8cd5d23c1d1  gcc/testsuite/gcc.dg/ia64-float80-1.c
  b04dc0d97b7e80f66778c7dd17ee2dd6  gcc/testsuite/gcc.dg/ia64-float80-2.c
! e7449f510392b9ed22ef9eb47a685b7a  gcc/testsuite/gcc.dg/ia64-sync-1.c
! 337f8c02c8f4e08d419099bcc90db7ca  gcc/testsuite/gcc.dg/ia64-sync-2.c
! 30b264197c8d7cabe070c2cca9af57ce  gcc/testsuite/gcc.dg/ia64-sync-3.c
  c95cb087b6b80844f02181e3b6321460  gcc/testsuite/gcc.dg/ia64-sync-4.c
  d3b8fc8ddcf2655e363124ef946fbf85  gcc/testsuite/gcc.dg/ia64-types1.c
  e7cfcf35d3576cc348fad814806318e1  gcc/testsuite/gcc.dg/ia64-types2.c
  83e05e55312e94542e704d4c1106ecc7  gcc/testsuite/gcc.dg/ia64-visibility-1.c
  ab4a753420c7cc112326b8711285358c  gcc/testsuite/gcc.dg/ia64-visibility-2.c
  9a6101d4463140bd764616fe8d813f87  gcc/testsuite/gcc.dg/ifelse-1.c
  f81ed0f9918056ceff358d434a6eda9e  gcc/testsuite/gcc.dg/iftrap-1.c
! cf917ad342fb8d90e259553e4ed38476  gcc/testsuite/gcc.dg/iftrap-2.c
  535e79f02ecb528845d0fc07ae7e2cd1  gcc/testsuite/gcc.dg/inline-1.c
  9a081c1626552c4ca7f50365dd0ed143  gcc/testsuite/gcc.dg/inline-2.c
  0d148a8ae5d6d0bf0c63f003d6e28afc  gcc/testsuite/gcc.dg/inline-3.c
  2eed98dfcc022044e610af32e1c937c1  gcc/testsuite/gcc.dg/inline-4.c
  7fc691c96ff167ea4acaf530fdfd717a  gcc/testsuite/gcc.dg/inline-5.c
  a481d0a49a4bf2aa98254e8df226bcd5  gcc/testsuite/gcc.dg/intermod-1.c
  0869783fa95b6864d6ee55773e4a5f4b  gcc/testsuite/gcc.dg/label-compound-stmt-1.c
! 873f9977afa1aed5571a662cfc3b2ff7  gcc/testsuite/gcc.dg/local1.c
  bf870f767c6be672a0cfc990dd97f936  gcc/testsuite/gcc.dg/loop-1.c
! 0cd8f8cac615131ae30bcd2fa6483fd5  gcc/testsuite/gcc.dg/loop-2.c
! cc20b8aee881b62499b789fe8f324459  gcc/testsuite/gcc.dg/loop-3.c
  bdd0de0807674c3312a2a9e4ff914e19  gcc/testsuite/gcc.dg/loop-4.c
  a73ede53a12274bacc5436575ebb14b9  gcc/testsuite/gcc.dg/loop-5.c
  60b94247e9f758f50b7d538b0c44a1e7  gcc/testsuite/gcc.dg/lvalue1.c
  7b992eada8877ee8824bb9e72763ee9e  gcc/testsuite/gcc.dg/m-un-1.c
! adf6c2f2cc7e229ecba862199dfd56c2  gcc/testsuite/gcc.dg/m-un-2.c
  64801a5d12a7d876eb9fc0407fd9af8f  gcc/testsuite/gcc.dg/m68k-slp-ice.c
! 5a2d2615172d3d97217f53cd1cb871b0  gcc/testsuite/gcc.dg/macho-lo-sum.c
! 8c6e2cc64cf1915eddd838dccac59067  gcc/testsuite/gcc.dg/mips-args-1.c
! ea49f00ec21b0c0241870345fcaaa415  gcc/testsuite/gcc.dg/mips-args-2.c
! 39fe98b0209bb1a3c0d3014f8f6850d0  gcc/testsuite/gcc.dg/mips-args-3.c
! a6cf4c43347f771f4b69b0dfb0ecc349  gcc/testsuite/gcc.dg/mips-asm-1.c
  a9d25b005316d831dbd591be8a92f08e  gcc/testsuite/gcc.dg/mmix-1.c
! 6df7e9e689db52df8a59fc07ac49b51e  gcc/testsuite/gcc.dg/nest.c
  508d0e520bb34714b62f8853deac63f1  gcc/testsuite/gcc.dg/nested-func-1.c
! 8967c0182e88e3571661a5d81ea53306  gcc/testsuite/gcc.dg/noncompile/20000901-1.c
! f6a001c99b331e0e659b9c9ae45fe1fa  gcc/testsuite/gcc.dg/noncompile/20001228-1.c
  74b2ad9fcb5fce73d36e4b5f54c5c52b  gcc/testsuite/gcc.dg/noncompile/20010425-1.c
  033709647111161e9dbb13801f1ac0a8  gcc/testsuite/gcc.dg/noncompile/20010524-1.c
  efaec86420af0d4c7d1309e3f635fe7b  gcc/testsuite/gcc.dg/noncompile/20011025-1.c
  f61329c54b8b1fe29265973258abdaf4  gcc/testsuite/gcc.dg/noncompile/20020130-1.c
  ae4bbb0e37fbefdbb9ec9ce5946463ca  gcc/testsuite/gcc.dg/noncompile/20020207-1.c
! f62375ba8949dc046dc4ea18700b79b7  gcc/testsuite/gcc.dg/noncompile/20020213-1.c
  54793c8520410ed90df26de4c4a68619  gcc/testsuite/gcc.dg/noncompile/20020220-1.c
  b5076a05f012d9662ba39a0ac14be746  gcc/testsuite/gcc.dg/noncompile/20030818-1.c
! 1e4f5ca0f5c7c9e17bfe92fc2e773c4f  gcc/testsuite/gcc.dg/noncompile/920507-1.c
  32bd5c77840218881e90c0b5b33c8f82  gcc/testsuite/gcc.dg/noncompile/920616-2.c
! ac2fd644684ba58ad9f3acdee2957281  gcc/testsuite/gcc.dg/noncompile/920721-2.c
  f53be9e609bc996b982825ce79df3595  gcc/testsuite/gcc.dg/noncompile/920824-1.c
  d453c1bf36b5c3979d6d4c3aeb411173  gcc/testsuite/gcc.dg/noncompile/920923-1.c
! fa28357566c5bfabb8fb20cb420db3d6  gcc/testsuite/gcc.dg/noncompile/921102-1.c
  a8666066c64e2d7e4bc38901216fc0e7  gcc/testsuite/gcc.dg/noncompile/921116-1.c
  7f527f53791f41ffa467060407c744b5  gcc/testsuite/gcc.dg/noncompile/930301-1.c
  a31ae01618ee04ce991e087e761f5fe4  gcc/testsuite/gcc.dg/noncompile/930622-1.c
! e28e628a66c29e9c5820b44b8dae93c6  gcc/testsuite/gcc.dg/noncompile/930622-2.c
  bb9595bf2e497e6d454d1b8261c86d24  gcc/testsuite/gcc.dg/noncompile/930714-1.c
  122f14ff7adb9285a03d7a97731c7cd0  gcc/testsuite/gcc.dg/noncompile/931203-1.c
! fcb5f4533bc03697a289f6cd35fde725  gcc/testsuite/gcc.dg/noncompile/940112-1.c
  9c3d130f5bd47df53ae074ccee954d25  gcc/testsuite/gcc.dg/noncompile/940227-1.c
  39f8f804cf9cf24b994cf574d8bf12c3  gcc/testsuite/gcc.dg/noncompile/950825-1.c
! c684087dce32a720bce4b09f94acbab8  gcc/testsuite/gcc.dg/noncompile/950921-1.c
! 7bd45cfeaa01988d459cb32ab519a64e  gcc/testsuite/gcc.dg/noncompile/951123-1.c
! 766b810bfe648237f63897f0d524aaf3  gcc/testsuite/gcc.dg/noncompile/971104-1.c
! 02d7eb6a1d2faafc295dbf416bb84b55  gcc/testsuite/gcc.dg/noncompile/990416-1.c
  1b2bc08a1a268520d0499de7a83200fa  gcc/testsuite/gcc.dg/noncompile/const-ll-1.c
  759ff42bb54e18e9e24d737a965fb659  gcc/testsuite/gcc.dg/noncompile/incomplete-1.c
! 9b5bc1bd3a9880888139addc965eeb32  gcc/testsuite/gcc.dg/noncompile/incomplete-2.c
  d9f2478bdbe9c4a081a38bc37a06293e  gcc/testsuite/gcc.dg/noncompile/init-1.c
! 5a3d5e85586ec732d4600568a88a3f3c  gcc/testsuite/gcc.dg/noncompile/init-2.c
  6a5bdbe045ed5f4343dc29b7956b78eb  gcc/testsuite/gcc.dg/noncompile/init-3.c
! b0e44097814f722b171e9720d61999a5  gcc/testsuite/gcc.dg/noncompile/init-4.c
  56b61f3e976de5d786bf64a844500759  gcc/testsuite/gcc.dg/noncompile/invalid_asm.c
! 1b0eba89bae5847d73caa8ee081d89f6  gcc/testsuite/gcc.dg/noncompile/label-1.c
! d00e8d87c9462d39ea987c65076cb783  gcc/testsuite/gcc.dg/noncompile/label-lineno-1.c
  8c668e521502d2e3cd455a6d060791e7  gcc/testsuite/gcc.dg/noncompile/noncompile.exp
! 8441216c2f390a74b8b4d073cfb50d27  gcc/testsuite/gcc.dg/noncompile/redecl-1.c
! fbc79301dcfe437d3206d92750e9c125  gcc/testsuite/gcc.dg/noncompile/scope.c
  70685c0bac7aa2a4a1fe04d9030c5594  gcc/testsuite/gcc.dg/noncompile/va-arg-1.c
  22faeecb9b2619b4c2796b8fd40a3a76  gcc/testsuite/gcc.dg/noncompile/voidparam-1.c
  651344fe733fa7735632a9520a50f8ba  gcc/testsuite/gcc.dg/nonnull-1.c
  0690713c09d7e297552f0097d275dcf3  gcc/testsuite/gcc.dg/nonnull-2.c
  8ef2d86db2d5dc85eaf06203ba078d15  gcc/testsuite/gcc.dg/nonnull-3.c
! ba55a21e81ba8c929ff47ec93c825b75  gcc/testsuite/gcc.dg/noreturn-1.c
  56713e84d6ab80cf2460f2af1c5498e2  gcc/testsuite/gcc.dg/noreturn-2.c
  f4dad19a38b94b6587614001f5996a5c  gcc/testsuite/gcc.dg/noreturn-3.c
! 05d89cd4395ff95d3e36271bd3fa5cca  gcc/testsuite/gcc.dg/noreturn-4.c
! a611300019915a5304f51be321fda1ad  gcc/testsuite/gcc.dg/noreturn-5.c
  779f7fd278378b2cfd6cbcc0297662a0  gcc/testsuite/gcc.dg/noreturn-6.c
! 0c9060d0767fb5619924eff829d2ddda  gcc/testsuite/gcc.dg/noreturn-7.c
  fb2a64e28af210271512e32c8451c2f2  gcc/testsuite/gcc.dg/null-pointer-1.c
  2d54756b4470458067e459ba80b73a10  gcc/testsuite/gcc.dg/old-style-asm-1.c
  d524cbf9b3805a6b9bbfc037661424cc  gcc/testsuite/gcc.dg/overflow-1.c
  9d4bd7829e260b83e2b110d6c53721ff  gcc/testsuite/gcc.dg/pack-test-1.c
  9305e6f4b98cfb04210884229294d310  gcc/testsuite/gcc.dg/pack-test-1.h
! 6cfe142a7d97f55fdb3c8312d873bced  gcc/testsuite/gcc.dg/pack-test-2.c
  3fd896c85ca5b207c7681452d0be9acd  gcc/testsuite/gcc.dg/pack-test-3.c
! 5da1d31c85e8175974d48cfa7d02e0dc  gcc/testsuite/gcc.dg/pack-test-4.c
! 3dc66cffcb62d1707953d4f77e30e2f5  gcc/testsuite/gcc.dg/pack-test-5.c
  38f5e1fde4e9c1cadeaecbe9919cf16c  gcc/testsuite/gcc.dg/pch/common-1.c
  666ba78dace0f606b77204e1f17211c8  gcc/testsuite/gcc.dg/pch/common-1.hs
  a2dbdff3682949782ec0b81a9c3b0596  gcc/testsuite/gcc.dg/pch/cpp-1.c
--- 16540,16721 ----
  d03160da6a45e50d98b0c10e11501fc4  gcc/testsuite/gcc.dg/i386-ssetype-3.c
  5f393f414c97d158b6bd7f1f91da4e1c  gcc/testsuite/gcc.dg/i386-ssetype-4.c
  e92425fe71067135bfb59ec89af690ee  gcc/testsuite/gcc.dg/i386-ssetype-5.c
! 27dd6220b6a9da176cfc22e1c02b716b  gcc/testsuite/gcc.dg/i386-unroll-1.c
  8e8c7085bb4fae50e165fbbd6c898363  gcc/testsuite/gcc.dg/i386-volatile-1.c
! e56a382a4199efce71e67134ed666318  gcc/testsuite/gcc.dg/ia64-asm-1.c
  df758ac7986976188ce8f8cd5d23c1d1  gcc/testsuite/gcc.dg/ia64-float80-1.c
  b04dc0d97b7e80f66778c7dd17ee2dd6  gcc/testsuite/gcc.dg/ia64-float80-2.c
! 63f588b7006421f94d3e65d225e169dd  gcc/testsuite/gcc.dg/ia64-fptr-1.c
! 0b4abd1e38e174b30822203e15e76489  gcc/testsuite/gcc.dg/ia64-got-1.c
! a62cf38032b96262859f5da756089e07  gcc/testsuite/gcc.dg/ia64-postinc.c
! adef35bfc865124eadc337db7e1a8d0c  gcc/testsuite/gcc.dg/ia64-sync-1.c
! c4a51210022f99e211235fb8434af350  gcc/testsuite/gcc.dg/ia64-sync-2.c
! 408b1c4784752384d0a7527d88bb47bf  gcc/testsuite/gcc.dg/ia64-sync-3.c
  c95cb087b6b80844f02181e3b6321460  gcc/testsuite/gcc.dg/ia64-sync-4.c
  d3b8fc8ddcf2655e363124ef946fbf85  gcc/testsuite/gcc.dg/ia64-types1.c
  e7cfcf35d3576cc348fad814806318e1  gcc/testsuite/gcc.dg/ia64-types2.c
  83e05e55312e94542e704d4c1106ecc7  gcc/testsuite/gcc.dg/ia64-visibility-1.c
  ab4a753420c7cc112326b8711285358c  gcc/testsuite/gcc.dg/ia64-visibility-2.c
+ 4e832182620dc07327ef3626bcd3ee61  gcc/testsuite/gcc.dg/if-empty-1.c
  9a6101d4463140bd764616fe8d813f87  gcc/testsuite/gcc.dg/ifelse-1.c
  f81ed0f9918056ceff358d434a6eda9e  gcc/testsuite/gcc.dg/iftrap-1.c
! 7cb2a20e34dc997b07525367fa102d52  gcc/testsuite/gcc.dg/iftrap-2.c
! 98b296f483e6084251d31ca65d2b32b2  gcc/testsuite/gcc.dg/init-bad-1.c
! 827422a2b61881b9eda7864a2ac74a54  gcc/testsuite/gcc.dg/init-bad-2.c
! 0fae75c29602531e6ce73b27303a6d7a  gcc/testsuite/gcc.dg/init-bad-3.c
! 68e3a2449e9e301b5cc216c65cec9c8e  gcc/testsuite/gcc.dg/init-desig-obs-1.c
! 387eef5db32755ed736d833085e80367  gcc/testsuite/gcc.dg/init-desig-obs-2.c
! c858065c8c49f7c25ae8c9d32ced3aab  gcc/testsuite/gcc.dg/init-desig-obs-3.c
! 27dca7b65ad41bc59083fb03bca458aa  gcc/testsuite/gcc.dg/init-empty-1.c
! ac9dba594242fca57b6c01ad3dea6e02  gcc/testsuite/gcc.dg/init-empty-2.c
! ea26630511a88f6cdfd2d60327ad7f87  gcc/testsuite/gcc.dg/init-empty-3.c
! 93337300e780dcbb9058976821d046f5  gcc/testsuite/gcc.dg/init-string-1.c
! 00599fdd6c40fea0fd12e2c09f7a4347  gcc/testsuite/gcc.dg/init-string-2.c
! 09d7ab46368a3c67e84d62f415b75a88  gcc/testsuite/gcc.dg/init-undef-1.c
! 73b1ecc0691ed493941c39b5bb50e5e1  gcc/testsuite/gcc.dg/init-vec-1.c
  535e79f02ecb528845d0fc07ae7e2cd1  gcc/testsuite/gcc.dg/inline-1.c
+ cd7b23f998c4e684edd54b5be0d375c8  gcc/testsuite/gcc.dg/inline-10.c
+ 7e270596603885c58bc51c47a8f81bb4  gcc/testsuite/gcc.dg/inline-11.c
+ dd980e8d1b2fc8e29cbdca79bf80654b  gcc/testsuite/gcc.dg/inline-12.c
  9a081c1626552c4ca7f50365dd0ed143  gcc/testsuite/gcc.dg/inline-2.c
  0d148a8ae5d6d0bf0c63f003d6e28afc  gcc/testsuite/gcc.dg/inline-3.c
  2eed98dfcc022044e610af32e1c937c1  gcc/testsuite/gcc.dg/inline-4.c
  7fc691c96ff167ea4acaf530fdfd717a  gcc/testsuite/gcc.dg/inline-5.c
+ 96b467a4117442b64211f4f3411003a4  gcc/testsuite/gcc.dg/inline-6.c
+ ba66b4f621efcd9fab8ee6d7a3de2f82  gcc/testsuite/gcc.dg/inline-7.c
+ 7f3f5523867eedca587232b3a2536214  gcc/testsuite/gcc.dg/inline-8.c
+ 3b15751f8660e124f17901067d32e2d0  gcc/testsuite/gcc.dg/inline-9.c
  a481d0a49a4bf2aa98254e8df226bcd5  gcc/testsuite/gcc.dg/intermod-1.c
+ 7022ca00ee4b7109e288cf9cb74ecf92  gcc/testsuite/gcc.dg/intmax_t-1.c
+ 8f5983946d28dca5853e89d0aa48b65d  gcc/testsuite/gcc.dg/kpice1.c
  0869783fa95b6864d6ee55773e4a5f4b  gcc/testsuite/gcc.dg/label-compound-stmt-1.c
! 5889b44433f78c24461521fc230e9346  gcc/testsuite/gcc.dg/label-decl-1.c
! c0e78df24f77e92ad5b9cb0808778c9f  gcc/testsuite/gcc.dg/label-decl-2.c
! 51f9d0596a8219a81f4e562e99d6567c  gcc/testsuite/gcc.dg/label-decl-3.c
! d4e500abbaab94e2aa8034e74b2020c1  gcc/testsuite/gcc.dg/label-decl-4.c
! a1511014730573ca08fa055a4f00aa75  gcc/testsuite/gcc.dg/lazy-ptr-test.c
! a2385eedd735afde625296ec7c33f79d  gcc/testsuite/gcc.dg/local1.c
! 76f69a190953ccd863754decb53a410c  gcc/testsuite/gcc.dg/long-long-typespec-1.c
  bf870f767c6be672a0cfc990dd97f936  gcc/testsuite/gcc.dg/loop-1.c
! 6b5237c8148a38f20728981213824d52  gcc/testsuite/gcc.dg/loop-2.c
! 4b4eb72a3ae82e479b365a414889045b  gcc/testsuite/gcc.dg/loop-3.c
  bdd0de0807674c3312a2a9e4ff914e19  gcc/testsuite/gcc.dg/loop-4.c
  a73ede53a12274bacc5436575ebb14b9  gcc/testsuite/gcc.dg/loop-5.c
+ 46248b6e3d3fc518ebd99c80a4e3053d  gcc/testsuite/gcc.dg/loop-6.c
+ 7b3cd3144005cbcd5f7ce75230580c93  gcc/testsuite/gcc.dg/lvalue-2.c
+ 9d62654ffe952241dc290702c6beceac  gcc/testsuite/gcc.dg/lvalue-3.c
  60b94247e9f758f50b7d538b0c44a1e7  gcc/testsuite/gcc.dg/lvalue1.c
  7b992eada8877ee8824bb9e72763ee9e  gcc/testsuite/gcc.dg/m-un-1.c
! ae5e128d38c894fe5bcf75aed6f5546b  gcc/testsuite/gcc.dg/m-un-2.c
  64801a5d12a7d876eb9fc0407fd9af8f  gcc/testsuite/gcc.dg/m68k-slp-ice.c
! 95f0a3ed470b480e62e5510f13cd33b8  gcc/testsuite/gcc.dg/macho-lo-sum.c
! 6c7bd436d731585b7a3f556666248907  gcc/testsuite/gcc.dg/max-1.c
! 1675f630ed3c3d090f954e79eaacb2d9  gcc/testsuite/gcc.dg/mips-args-1.c
! 6124b4348c745d0efeb098840dce4662  gcc/testsuite/gcc.dg/mips-args-2.c
! f6ff805550ed7f64b05cf1735dcc76dc  gcc/testsuite/gcc.dg/mips-args-3.c
! 467530ff2fd46b82837f93b3c123f7ea  gcc/testsuite/gcc.dg/mips-movcc-1.c
! 3c209c6d85a9e20c8c35f8c5a9b83a65  gcc/testsuite/gcc.dg/mips-movcc-2.c
! 72f83b512efadaeae37c92db2b65e339  gcc/testsuite/gcc.dg/mips-movcc-3.c
! 6de3a4ef8e6687c0d5aaa63f526d2358  gcc/testsuite/gcc.dg/mips-nmadd-1.c
! 4ce6744358791c172a7b1bd3db695123  gcc/testsuite/gcc.dg/mips-nmadd-2.c
! b101141768f6dcf7b7f80890cb665310  gcc/testsuite/gcc.dg/mips-rsqrt-1.c
! 145bbd3d0be004e42678a22dd7c6aac4  gcc/testsuite/gcc.dg/mips-rsqrt-2.c
! 7706d10ca5462b2cfdc97ec0136cd359  gcc/testsuite/gcc.dg/mips-rsqrt-3.c
! 92c08397a16ba624a215e17607fb2894  gcc/testsuite/gcc.dg/missing-field-init-1.c
! e1cb7062c47b129b4dff03b478e4b464  gcc/testsuite/gcc.dg/missing-field-init-2.c
  a9d25b005316d831dbd591be8a92f08e  gcc/testsuite/gcc.dg/mmix-1.c
! e406c08de9d558aef66845fd4deb8afb  gcc/testsuite/gcc.dg/nest.c
  508d0e520bb34714b62f8853deac63f1  gcc/testsuite/gcc.dg/nested-func-1.c
! 09b5bf76a67802372892a2a1af9d82b2  gcc/testsuite/gcc.dg/nested-func-2.c
! 1d418366de6bac7d145957766d7596ca  gcc/testsuite/gcc.dg/nested-func-3.c
! e31bab399a369cb3c8b952d737320421  gcc/testsuite/gcc.dg/nested-redef-1.c
! a3a18f288ff9a907cedfa89231e2d3e8  gcc/testsuite/gcc.dg/non-lazy-ptr-test.c
! 4f833676228422b784109abf08d14bb2  gcc/testsuite/gcc.dg/noncompile/20000901-1.c
! 387b89f20dbacdcef365c12826f6a51e  gcc/testsuite/gcc.dg/noncompile/20001228-1.c
  74b2ad9fcb5fce73d36e4b5f54c5c52b  gcc/testsuite/gcc.dg/noncompile/20010425-1.c
  033709647111161e9dbb13801f1ac0a8  gcc/testsuite/gcc.dg/noncompile/20010524-1.c
  efaec86420af0d4c7d1309e3f635fe7b  gcc/testsuite/gcc.dg/noncompile/20011025-1.c
  f61329c54b8b1fe29265973258abdaf4  gcc/testsuite/gcc.dg/noncompile/20020130-1.c
  ae4bbb0e37fbefdbb9ec9ce5946463ca  gcc/testsuite/gcc.dg/noncompile/20020207-1.c
! 232d385e61cd392b37caf97c93483e71  gcc/testsuite/gcc.dg/noncompile/20020213-1.c
  54793c8520410ed90df26de4c4a68619  gcc/testsuite/gcc.dg/noncompile/20020220-1.c
  b5076a05f012d9662ba39a0ac14be746  gcc/testsuite/gcc.dg/noncompile/20030818-1.c
! 2a95e7e5c29b3ea69b58b0b8389e2e98  gcc/testsuite/gcc.dg/noncompile/20040203-1.c
! 23accaa8989bbdbb3f7458fbf289b8cb  gcc/testsuite/gcc.dg/noncompile/20040203-2.c
! e9b62c3029e419a65c52aee39c94c07f  gcc/testsuite/gcc.dg/noncompile/20040203-3.c
! 8858e7f1487cac2c86534be9f4b921bb  gcc/testsuite/gcc.dg/noncompile/20040629-1.c
! 958308556b798e351e6a5d0af5942992  gcc/testsuite/gcc.dg/noncompile/20041207.c
! ef5fde5339e9ff5daf97ab74642d2559  gcc/testsuite/gcc.dg/noncompile/20050120-1.c
! 7a44a8b449c2b778cafa6ce53e4cec06  gcc/testsuite/gcc.dg/noncompile/920507-1.c
  32bd5c77840218881e90c0b5b33c8f82  gcc/testsuite/gcc.dg/noncompile/920616-2.c
! 4c5ea3fc28acc054cda8c446430e0e59  gcc/testsuite/gcc.dg/noncompile/920721-2.c
  f53be9e609bc996b982825ce79df3595  gcc/testsuite/gcc.dg/noncompile/920824-1.c
  d453c1bf36b5c3979d6d4c3aeb411173  gcc/testsuite/gcc.dg/noncompile/920923-1.c
! 90c7d00d1461ffe10b144b3e6c1aed26  gcc/testsuite/gcc.dg/noncompile/921102-1.c
  a8666066c64e2d7e4bc38901216fc0e7  gcc/testsuite/gcc.dg/noncompile/921116-1.c
  7f527f53791f41ffa467060407c744b5  gcc/testsuite/gcc.dg/noncompile/930301-1.c
  a31ae01618ee04ce991e087e761f5fe4  gcc/testsuite/gcc.dg/noncompile/930622-1.c
! 4ebd7763a96effa9ef8fb816f02cec95  gcc/testsuite/gcc.dg/noncompile/930622-2.c
  bb9595bf2e497e6d454d1b8261c86d24  gcc/testsuite/gcc.dg/noncompile/930714-1.c
  122f14ff7adb9285a03d7a97731c7cd0  gcc/testsuite/gcc.dg/noncompile/931203-1.c
! 0e6a06f98858ec88160d8d7e1a9aec6d  gcc/testsuite/gcc.dg/noncompile/940112-1.c
  9c3d130f5bd47df53ae074ccee954d25  gcc/testsuite/gcc.dg/noncompile/940227-1.c
  39f8f804cf9cf24b994cf574d8bf12c3  gcc/testsuite/gcc.dg/noncompile/950825-1.c
! 25ab334d6aa318dae134a72cbcfac5b3  gcc/testsuite/gcc.dg/noncompile/950921-1.c
! 81ad5d337efd81a581d6fe846ab908fe  gcc/testsuite/gcc.dg/noncompile/951123-1.c
! e5491d899dfe5d73a3e69819c32f9e91  gcc/testsuite/gcc.dg/noncompile/971104-1.c
! aba012e77e8d117e4b82c0d2ec39ba39  gcc/testsuite/gcc.dg/noncompile/990416-1.c
  1b2bc08a1a268520d0499de7a83200fa  gcc/testsuite/gcc.dg/noncompile/const-ll-1.c
  759ff42bb54e18e9e24d737a965fb659  gcc/testsuite/gcc.dg/noncompile/incomplete-1.c
! 7d3d0c0d0116e643196ba9bdfbe5f4ce  gcc/testsuite/gcc.dg/noncompile/incomplete-2.c
! b4e6e1127af25431d3d71a0766dd3990  gcc/testsuite/gcc.dg/noncompile/incomplete-3.c
  d9f2478bdbe9c4a081a38bc37a06293e  gcc/testsuite/gcc.dg/noncompile/init-1.c
! fe5bcce773cb038c77d5afc06a96a147  gcc/testsuite/gcc.dg/noncompile/init-2.c
  6a5bdbe045ed5f4343dc29b7956b78eb  gcc/testsuite/gcc.dg/noncompile/init-3.c
! b054d23fd7d868a509aeb363dc7e8ffc  gcc/testsuite/gcc.dg/noncompile/init-4.c
  56b61f3e976de5d786bf64a844500759  gcc/testsuite/gcc.dg/noncompile/invalid_asm.c
! e69cb5f30ae6fd5e2404895dfb75b637  gcc/testsuite/gcc.dg/noncompile/label-1.c
! 825d6f34a51e3a3c37e509be0622e1ca  gcc/testsuite/gcc.dg/noncompile/label-lineno-1.c
  8c668e521502d2e3cd455a6d060791e7  gcc/testsuite/gcc.dg/noncompile/noncompile.exp
! 415c039abdab8437275df71102cc5113  gcc/testsuite/gcc.dg/noncompile/old-style-parm-1.c
! 0a7c4527cc88cc3bce252293bf71eaf4  gcc/testsuite/gcc.dg/noncompile/old-style-parm-2.c
! 27b9f1c123bba7de25f8d3fd6cddf38a  gcc/testsuite/gcc.dg/noncompile/redecl-1.c
! e4d900a56367f6a536225a27d5f4f5a6  gcc/testsuite/gcc.dg/noncompile/scope.c
! bacce3ff1a5219b8aef3929e36521ff4  gcc/testsuite/gcc.dg/noncompile/undeclared-1.c
! 2abbebc8d611565f8348fdd5ae78f555  gcc/testsuite/gcc.dg/noncompile/undeclared-2.c
  70685c0bac7aa2a4a1fe04d9030c5594  gcc/testsuite/gcc.dg/noncompile/va-arg-1.c
  22faeecb9b2619b4c2796b8fd40a3a76  gcc/testsuite/gcc.dg/noncompile/voidparam-1.c
  651344fe733fa7735632a9520a50f8ba  gcc/testsuite/gcc.dg/nonnull-1.c
  0690713c09d7e297552f0097d275dcf3  gcc/testsuite/gcc.dg/nonnull-2.c
  8ef2d86db2d5dc85eaf06203ba078d15  gcc/testsuite/gcc.dg/nonnull-3.c
! 6232dd732176acf19bcb347f389a7e4b  gcc/testsuite/gcc.dg/noreturn-1.c
  56713e84d6ab80cf2460f2af1c5498e2  gcc/testsuite/gcc.dg/noreturn-2.c
  f4dad19a38b94b6587614001f5996a5c  gcc/testsuite/gcc.dg/noreturn-3.c
! db2da107e9f008a6ea62c7e96e1a5581  gcc/testsuite/gcc.dg/noreturn-4.c
! 255513eee17c367ecb2aa180c0b9e301  gcc/testsuite/gcc.dg/noreturn-5.c
  779f7fd278378b2cfd6cbcc0297662a0  gcc/testsuite/gcc.dg/noreturn-6.c
! 5696aded47a23c654f79dd291f024dac  gcc/testsuite/gcc.dg/noreturn-7.c
  fb2a64e28af210271512e32c8451c2f2  gcc/testsuite/gcc.dg/null-pointer-1.c
  2d54756b4470458067e459ba80b73a10  gcc/testsuite/gcc.dg/old-style-asm-1.c
+ 10be65139df5ded9ef15f510eb2931c3  gcc/testsuite/gcc.dg/old-style-prom-1.c
+ 77874127e73f5ada2c09e438669a508b  gcc/testsuite/gcc.dg/old-style-prom-2.c
+ c631142fa2ddf4f0ab0fc3420576c02c  gcc/testsuite/gcc.dg/old-style-prom-3.c
+ 958025f542696e48d89f0fdd5d94a4a3  gcc/testsuite/gcc.dg/old-style-then-proto-1.c
  d524cbf9b3805a6b9bbfc037661424cc  gcc/testsuite/gcc.dg/overflow-1.c
+ 8fcf44c68bdaf41d825e1f466241f51b  gcc/testsuite/gcc.dg/overflow-warn-1.c
+ 61bf5b33d7b91397ec4e30ec97662d48  gcc/testsuite/gcc.dg/overflow-warn-2.c
+ 01ba02fe5283b3423c17f699a45caf44  gcc/testsuite/gcc.dg/overflow-warn-3.c
+ 732c9ed1f4956740d60cdf7f5628a4a2  gcc/testsuite/gcc.dg/overflow-warn-4.c
  9d4bd7829e260b83e2b110d6c53721ff  gcc/testsuite/gcc.dg/pack-test-1.c
  9305e6f4b98cfb04210884229294d310  gcc/testsuite/gcc.dg/pack-test-1.h
! 4f456642e9634a55d31d2459a42e84db  gcc/testsuite/gcc.dg/pack-test-2.c
  3fd896c85ca5b207c7681452d0be9acd  gcc/testsuite/gcc.dg/pack-test-3.c
! 607b0e00950aa58d0248b10a56cb344c  gcc/testsuite/gcc.dg/pack-test-4.c
! 0a4cbe1ea503e55a2ca88ef4e9926b22  gcc/testsuite/gcc.dg/pack-test-5.c
! 1c08d4f68552c20ec025af38a26efc39  gcc/testsuite/gcc.dg/parm-impl-decl-1.c
! 91eae623f5d57082821bd5bb83d77557  gcc/testsuite/gcc.dg/parm-impl-decl-2.c
! 3325168e68895b321c5817f990d492e7  gcc/testsuite/gcc.dg/parm-incomplete-1.c
! 9102fa30ffec57b5f0a73473c50cd573  gcc/testsuite/gcc.dg/parm-mismatch-1.c
  38f5e1fde4e9c1cadeaecbe9919cf16c  gcc/testsuite/gcc.dg/pch/common-1.c
  666ba78dace0f606b77204e1f17211c8  gcc/testsuite/gcc.dg/pch/common-1.hs
  a2dbdff3682949782ec0b81a9c3b0596  gcc/testsuite/gcc.dg/pch/cpp-1.c
*************** d41d8cd98f00b204e9800998ecf8427e  gcc/te
*** 15556,15568 ****
  7c1832c1c0c00e50daedd711aaa19ce8  gcc/testsuite/gcc.dg/pch/except-1.hs
  db73256c2a11393cc50ab04b9f15b91b  gcc/testsuite/gcc.dg/pch/global-1.c
  0888b2bc3a89b235a0bc9e41bc4f229f  gcc/testsuite/gcc.dg/pch/global-1.hs
  7ea3287b779e2bbb92d41ce197c73ee6  gcc/testsuite/gcc.dg/pch/inline-1.c
  7a9caa89f223c5fb3d86c2450fccbefd  gcc/testsuite/gcc.dg/pch/inline-1.hs
  0f96c8a7f363dcb3a617d3ac98e6e85f  gcc/testsuite/gcc.dg/pch/inline-2.c
  c0219891b93efb4b433334965a22ecd3  gcc/testsuite/gcc.dg/pch/inline-2.hs
  7e29ad916bacf5ec6582dcd8dfb4cb69  gcc/testsuite/gcc.dg/pch/inline-3.c
  7ebe702792fee2c6278b79cfdf96d081  gcc/testsuite/gcc.dg/pch/inline-3.hs
! 38ff3aa09a3be3cb3159ce7473aea008  gcc/testsuite/gcc.dg/pch/inline-4.c
  7b69ff4d9c05fadc8635a9fa68119911  gcc/testsuite/gcc.dg/pch/inline-4.hs
  000f77938434e004fd71ca5ce78b5fec  gcc/testsuite/gcc.dg/pch/macro-1.c
  7840fb3af4aa8150be2e4ff8e11dae61  gcc/testsuite/gcc.dg/pch/macro-1.hs
--- 16738,16759 ----
  7c1832c1c0c00e50daedd711aaa19ce8  gcc/testsuite/gcc.dg/pch/except-1.hs
  db73256c2a11393cc50ab04b9f15b91b  gcc/testsuite/gcc.dg/pch/global-1.c
  0888b2bc3a89b235a0bc9e41bc4f229f  gcc/testsuite/gcc.dg/pch/global-1.hs
+ 253cc3f6212194adac9cbe3280144e90  gcc/testsuite/gcc.dg/pch/import-1.c
+ 6bfc0cb02328d4cc4fae1c6614d7abd3  gcc/testsuite/gcc.dg/pch/import-1.hs
+ 62aa47ca41ce48570aa120f81d873d86  gcc/testsuite/gcc.dg/pch/import-1a.h
+ beed83e41122570ed2022cbbf4c88440  gcc/testsuite/gcc.dg/pch/import-1b.h
+ 86a9c639bf8a436f4dbfebccfc68a9c5  gcc/testsuite/gcc.dg/pch/import-1c.h
+ 72eb1bef4807b73a8e340d7d2633a770  gcc/testsuite/gcc.dg/pch/import-2.c
+ e685e69e2d7953c97536f5d1a25c1a6f  gcc/testsuite/gcc.dg/pch/import-2.hs
+ c5152634cfc786adaaa1d78a5dea5a1a  gcc/testsuite/gcc.dg/pch/include/import-2a.h
+ 6e66b1f90d603ea97d20cc1d220af688  gcc/testsuite/gcc.dg/pch/include/import-2b.h
  7ea3287b779e2bbb92d41ce197c73ee6  gcc/testsuite/gcc.dg/pch/inline-1.c
  7a9caa89f223c5fb3d86c2450fccbefd  gcc/testsuite/gcc.dg/pch/inline-1.hs
  0f96c8a7f363dcb3a617d3ac98e6e85f  gcc/testsuite/gcc.dg/pch/inline-2.c
  c0219891b93efb4b433334965a22ecd3  gcc/testsuite/gcc.dg/pch/inline-2.hs
  7e29ad916bacf5ec6582dcd8dfb4cb69  gcc/testsuite/gcc.dg/pch/inline-3.c
  7ebe702792fee2c6278b79cfdf96d081  gcc/testsuite/gcc.dg/pch/inline-3.hs
! 9be6085852a018cd8984965d31613575  gcc/testsuite/gcc.dg/pch/inline-4.c
  7b69ff4d9c05fadc8635a9fa68119911  gcc/testsuite/gcc.dg/pch/inline-4.hs
  000f77938434e004fd71ca5ce78b5fec  gcc/testsuite/gcc.dg/pch/macro-1.c
  7840fb3af4aa8150be2e4ff8e11dae61  gcc/testsuite/gcc.dg/pch/macro-1.hs
*************** eaf66d2080db4f4ed721111fceff4dae  gcc/te
*** 15570,15651 ****
  b19f78cc8cfdc1d6a96b2f1f9d2b1da6  gcc/testsuite/gcc.dg/pch/macro-2.hs
  53214e8ded391211f1371d0c16e7a341  gcc/testsuite/gcc.dg/pch/macro-3.c
  b01e42858e0423266a42ce48f5963765  gcc/testsuite/gcc.dg/pch/macro-3.hs
! 6f4ebb733e62cc942c32edae5a566295  gcc/testsuite/gcc.dg/pch/pch.exp
  81a23065a357b947b990e7d22d20daed  gcc/testsuite/gcc.dg/pch/static-1.c
  712df230b4e13e8bb40508464f301367  gcc/testsuite/gcc.dg/pch/static-1.hs
  545a14608934390c5334ff87fa666233  gcc/testsuite/gcc.dg/pch/static-2.c
  712df230b4e13e8bb40508464f301367  gcc/testsuite/gcc.dg/pch/static-2.hs
  fe461e61798a0b67d33eee3c428b8a1c  gcc/testsuite/gcc.dg/pch/static-3.c
  81528e4fd4b36517cff8c8eb6957fad6  gcc/testsuite/gcc.dg/pch/static-3.hs
  e14f432a1fcbe132dba427a035e8309a  gcc/testsuite/gcc.dg/pch/system-1.c
  00c470b0510973ef43dacfaf4b849a74  gcc/testsuite/gcc.dg/pch/system-1.hs
  5152539eb73e079ab785c5cf220fdfdb  gcc/testsuite/gcc.dg/pch/warn-1.c
  581c36ee7a8e61fb33c629ef34ae8cf1  gcc/testsuite/gcc.dg/pch/warn-1.hs
! ea00bd6880e6c116a3a594cbfecedab7  gcc/testsuite/gcc.dg/postincr-1.c
  384725f498b861af6f8bed0530eeac73  gcc/testsuite/gcc.dg/ppc-fmadd-1.c
  b49bfc8892e32ccd4715b924f41106d6  gcc/testsuite/gcc.dg/ppc-fmadd-2.c
  90d042fffee10d77e01ab7cf9fcbb7c1  gcc/testsuite/gcc.dg/ppc-fmadd-3.c
! 343ca3f6defe2aab245fbcc5c11ba03c  gcc/testsuite/gcc.dg/ppc-fsel-1.c
  28c82cf854d14b9e7b445bab023fb08c  gcc/testsuite/gcc.dg/ppc-fsel-2.c
! 49d6799d16487bfcab975d104a7193b9  gcc/testsuite/gcc.dg/ppc-ldstruct.c
! 98c15068dbea0944a3d1a3f49c564d4b  gcc/testsuite/gcc.dg/ppc-sdata-1.c
  b5ba424150d6f9f7d45a408112480ef3  gcc/testsuite/gcc.dg/ppc-sdata-2.c
  6bee4b61a91fdcf2ce29a319025fde82  gcc/testsuite/gcc.dg/ppc-spe.c
! 9ee6a1717022e0e101eceb4d4c305279  gcc/testsuite/gcc.dg/ppc-stackalign-1.c
! 3eda27fb63332e35bfe9c52b7066c005  gcc/testsuite/gcc.dg/ppc64-abi-1.c
! d950dd8269a8f44cab51850a11956cc1  gcc/testsuite/gcc.dg/ppc64-abi-2.c
! 62da47413546d4a4ae779cb210e268bd  gcc/testsuite/gcc.dg/ppc64-abi-3.c
! 73651f5ae491e3a9bd87cdd5abef2903  gcc/testsuite/gcc.dg/pr10392-1.c
  3b83403729a3686d25552352bf0c4577  gcc/testsuite/gcc.dg/pr11864-1.c
  78a51be88d08b4fd64d227b7e1a33b20  gcc/testsuite/gcc.dg/pr14092-1.c
  0213142afa4c27101de78860d03cec24  gcc/testsuite/gcc.dg/pr14289-1.c
! 2c53c57e2ae45a921ca9de3db9919d71  gcc/testsuite/gcc.dg/pr14289-2.c
! 501da5499916c89fec113effff8d7c58  gcc/testsuite/gcc.dg/pr14289-3.c
  aa8059e67aba749e5f156ad145b1e76b  gcc/testsuite/gcc.dg/pr14649-1.c
  eab51d905e25111086745a91fe335ef5  gcc/testsuite/gcc.dg/pr14765-1.c
  8fc000abbf82aa05e3ebae13cf7ccd62  gcc/testsuite/gcc.dg/pr15749-1.c
  6ee62b7f7912606502963f94424e4ea9  gcc/testsuite/gcc.dg/pr15749-1.h
  5bc3a1b72524bdb9ae3ec764a9f97531  gcc/testsuite/gcc.dg/pr17581-1.c
  3825638bdc3a2a004aba9b3d95352327  gcc/testsuite/gcc.dg/pr9365-1.c
  8adaeeade8d8f93b244aa48e91818dbc  gcc/testsuite/gcc.dg/pr9771-1.c
! f77723461d5c54b68b0faf381b354240  gcc/testsuite/gcc.dg/pragma-align.c
! 1227ca45a3cd97f0de4baaa0d53d8c91  gcc/testsuite/gcc.dg/pragma-darwin.c
  1edd87ca9440d6cf6ed770a3fbb542ee  gcc/testsuite/gcc.dg/pragma-ep-1.c
  e961f06515e118b8d9224c2b1b8a4d30  gcc/testsuite/gcc.dg/pragma-ep-2.c
  c8912f97f76a12a1f08275f64975fe52  gcc/testsuite/gcc.dg/pragma-ep-3.c
  f332500fa9b1610a3a2e2c5094a9e623  gcc/testsuite/gcc.dg/pragma-re-1.c
  01aca0277735e694835146ae90d25dac  gcc/testsuite/gcc.dg/pragma-re-2.c
! af221262425a2fd13738c9fadc385bc3  gcc/testsuite/gcc.dg/profile-generate-1.c
! a989ec9ad17155102feef289f12d526d  gcc/testsuite/gcc.dg/qual-return-1.c
! ea2b840d2f63aeb7e0341403d710cb71  gcc/testsuite/gcc.dg/qual-return-2.c
  fa6e4618c862111306143bc22d6cb230  gcc/testsuite/gcc.dg/range-test-1.c
! 60f22abf6fee4d9ed1725678c6d3a826  gcc/testsuite/gcc.dg/redecl-1.c
! a2f1cc81b90ddd6cc2fef1cce692520e  gcc/testsuite/gcc.dg/return-type-1.c
  0d720e1c8f5d6d95b677821c7bae93bb  gcc/testsuite/gcc.dg/return-type-2.c
! 106b43dedd0549633b3a753ce1d1eaf0  gcc/testsuite/gcc.dg/return-type-3.c
! 7ee34881304a809825fa2eb9a1ef5f79  gcc/testsuite/gcc.dg/rs6000-ldouble-1.c
  d5126a2bd42a9c1593aedafecf29da00  gcc/testsuite/gcc.dg/section1.c
! 1853608d6f9fb2e0534d031dc894e9a7  gcc/testsuite/gcc.dg/sequence-pt-1.c
! a4725dc5e7656cd6b2fd8ddf362a6b7b  gcc/testsuite/gcc.dg/setjmp-1.c
! 9112fd4598808655a0c0a55dc7ef0065  gcc/testsuite/gcc.dg/sh-relax.c
! 6874d4f5e6b0421ebc178ad35de81456  gcc/testsuite/gcc.dg/sibcall-1.c
! f14a407f23c6c0cd10939d7ee8e2dd99  gcc/testsuite/gcc.dg/sibcall-2.c
! 75dc6d4b5608358b6af9e6aa8043291a  gcc/testsuite/gcc.dg/sibcall-3.c
! 8719ca63c675dd9bcb0bc5ecf3ea4fd0  gcc/testsuite/gcc.dg/sibcall-4.c
! 263b3da31656e77c5dc034c2d08c820f  gcc/testsuite/gcc.dg/sibcall-5.c
! f6e564718a4cdf87f751fffcf3ce0b8e  gcc/testsuite/gcc.dg/sibcall-6.c
! 4bb4538696a161e804c7b30ee1988c0b  gcc/testsuite/gcc.dg/simd-1.c
  47ea74190c31fd1dbdaee16e97226345  gcc/testsuite/gcc.dg/sparc-constant-1.c
  09ed11beff813e9c83297ecb8d275588  gcc/testsuite/gcc.dg/sparc-dwarf2.c
  11bc2325082842cb92f3fb42cc60e580  gcc/testsuite/gcc.dg/sparc-loop-1.c
  1914003a0d4dff145f223689c560d480  gcc/testsuite/gcc.dg/sparc-ret.c
  ed43551f491fa47772a1d71f67a20bb4  gcc/testsuite/gcc.dg/sparc-trap-1.c
  e4076561bf343823ba2b5380a58ad6b5  gcc/testsuite/gcc.dg/spe1.c
  20dc171666c91cdac8714a7c5075874e  gcc/testsuite/gcc.dg/special/20000419-2.c
  58b6b7734c2d9522f6acba13d91a557a  gcc/testsuite/gcc.dg/special/alias-1.c
  4b29f93ef3bc27cb9d83fdbc6aaa5b4a  gcc/testsuite/gcc.dg/special/alias-2.c
! d84f9d0a2c160747f2663a81aabc90c2  gcc/testsuite/gcc.dg/special/gcsec-1.c
! 3680c1e95cbde617888bd37abb038eef  gcc/testsuite/gcc.dg/special/mips-abi.exp
  d41d8cd98f00b204e9800998ecf8427e  gcc/testsuite/gcc.dg/special/mips-abi.s
  5b9fceae4147c35c767a8dc47203ffab  gcc/testsuite/gcc.dg/special/special.exp
  108b01f58b0498d4becf23ff94838d68  gcc/testsuite/gcc.dg/special/weak-1.c
--- 16761,16990 ----
  b19f78cc8cfdc1d6a96b2f1f9d2b1da6  gcc/testsuite/gcc.dg/pch/macro-2.hs
  53214e8ded391211f1371d0c16e7a341  gcc/testsuite/gcc.dg/pch/macro-3.c
  b01e42858e0423266a42ce48f5963765  gcc/testsuite/gcc.dg/pch/macro-3.hs
! 98eb40fd35afc99b8d7a0d9037913d4a  gcc/testsuite/gcc.dg/pch/macro-4.c
! 9dfd3f4bded8093e1bd9fe58412b43c6  gcc/testsuite/gcc.dg/pch/macro-4.hs
! 4b3fc75a40ade59d2cee5eb363af956a  gcc/testsuite/gcc.dg/pch/pch.exp
! adae8b2eb66eed75155f5f94aaeb348b  gcc/testsuite/gcc.dg/pch/save-temps-1.c
! 2eac3fb5ef4057d96387db046e19ef2d  gcc/testsuite/gcc.dg/pch/save-temps-1.hs
  81a23065a357b947b990e7d22d20daed  gcc/testsuite/gcc.dg/pch/static-1.c
  712df230b4e13e8bb40508464f301367  gcc/testsuite/gcc.dg/pch/static-1.hs
  545a14608934390c5334ff87fa666233  gcc/testsuite/gcc.dg/pch/static-2.c
  712df230b4e13e8bb40508464f301367  gcc/testsuite/gcc.dg/pch/static-2.hs
  fe461e61798a0b67d33eee3c428b8a1c  gcc/testsuite/gcc.dg/pch/static-3.c
  81528e4fd4b36517cff8c8eb6957fad6  gcc/testsuite/gcc.dg/pch/static-3.hs
+ e7f0dd544658347b6881de7984014aed  gcc/testsuite/gcc.dg/pch/struct-1.c
+ d596db764e44964f1913b62908368dd5  gcc/testsuite/gcc.dg/pch/struct-1.hs
  e14f432a1fcbe132dba427a035e8309a  gcc/testsuite/gcc.dg/pch/system-1.c
  00c470b0510973ef43dacfaf4b849a74  gcc/testsuite/gcc.dg/pch/system-1.hs
+ 460832e9aee7617d5661e942aa1d2795  gcc/testsuite/gcc.dg/pch/valid-1.c
+ a445c4627a1720a8fb4817ff593ecf63  gcc/testsuite/gcc.dg/pch/valid-1.hs
+ eb9c763f412290606abc7b7179d39a30  gcc/testsuite/gcc.dg/pch/valid-1b.c
+ f03827c48057cabeeb66313d02b36387  gcc/testsuite/gcc.dg/pch/valid-1b.hs
+ 1850b9c7e72013a50499c98184a474c5  gcc/testsuite/gcc.dg/pch/valid-2.c
+ 2e8f6dc30261676da60951797852bbc4  gcc/testsuite/gcc.dg/pch/valid-2.hs
+ 5966e7ac314eec95d9774a26aabec5f9  gcc/testsuite/gcc.dg/pch/valid-3.c
+ 62e40bbd1d4aab0fff1ea40628df6e87  gcc/testsuite/gcc.dg/pch/valid-3.hs
+ 0ede0a6416f929f7ac481c6a537b609c  gcc/testsuite/gcc.dg/pch/valid-4.c
+ f765638f45ffbbeedb011e00c6425181  gcc/testsuite/gcc.dg/pch/valid-4.hs
+ 957c06ddf545d540bfcf86940bd7476e  gcc/testsuite/gcc.dg/pch/valid-5.c
+ 2e8f6dc30261676da60951797852bbc4  gcc/testsuite/gcc.dg/pch/valid-5.hs
+ 7aff1ad0425e1de54a6b4c7744c5d5f1  gcc/testsuite/gcc.dg/pch/valid-6.c
+ 2e8f6dc30261676da60951797852bbc4  gcc/testsuite/gcc.dg/pch/valid-6.hs
  5152539eb73e079ab785c5cf220fdfdb  gcc/testsuite/gcc.dg/pch/warn-1.c
  581c36ee7a8e61fb33c629ef34ae8cf1  gcc/testsuite/gcc.dg/pch/warn-1.hs
! 85d43826174b147ad3962af8b34d306e  gcc/testsuite/gcc.dg/pointer-arith-1.c
! d1307a4ce7ddccb7b035756689d81a14  gcc/testsuite/gcc.dg/pointer-arith-2.c
! 720124c1904cd345cc725ac85ee86425  gcc/testsuite/gcc.dg/pointer-arith-3.c
! 93586198ccac6a0429f70a4584d150e0  gcc/testsuite/gcc.dg/pointer-arith-4.c
! d99414cc7676bba87d190ed04a5df196  gcc/testsuite/gcc.dg/pointer-arith-5.c
! ff08286c04623251fbe47aafd57a3323  gcc/testsuite/gcc.dg/pointer-arith-6.c
! 717a8be4c1fed829a57b869d01b3abe3  gcc/testsuite/gcc.dg/pointer-arith-7.c
! 1929290e1458352e955c1607b8a87e5f  gcc/testsuite/gcc.dg/pointer-arith-8.c
! 560e02ab06396c9dce71b047a8a96f79  gcc/testsuite/gcc.dg/postincr-1.c
! 25ee68e75d563ab07d72d89d0d85c800  gcc/testsuite/gcc.dg/ppc-and-1.c
! 3815f53acf69d3059d0616c511f670c5  gcc/testsuite/gcc.dg/ppc-bitfield1.c
! 615987c065b85a21874f0b80a0e3f380  gcc/testsuite/gcc.dg/ppc-compare-1.c
! 123fe3978babf048069d5731695300ab  gcc/testsuite/gcc.dg/ppc-eabi.c
  384725f498b861af6f8bed0530eeac73  gcc/testsuite/gcc.dg/ppc-fmadd-1.c
  b49bfc8892e32ccd4715b924f41106d6  gcc/testsuite/gcc.dg/ppc-fmadd-2.c
  90d042fffee10d77e01ab7cf9fcbb7c1  gcc/testsuite/gcc.dg/ppc-fmadd-3.c
! 2f98c9de092b752f4149c60367c90247  gcc/testsuite/gcc.dg/ppc-fsel-1.c
  28c82cf854d14b9e7b445bab023fb08c  gcc/testsuite/gcc.dg/ppc-fsel-2.c
! 4607e864b19fd011a4f1d730e041efc9  gcc/testsuite/gcc.dg/ppc-fsel-3.c
! bb5f5f530e621748748879b844d09373  gcc/testsuite/gcc.dg/ppc-ldstruct.c
! 4dd62ada8a08c47c10cc137b67c1d70c  gcc/testsuite/gcc.dg/ppc-mov-1.c
! f6390cfcea3795f2dbb85227a272f393  gcc/testsuite/gcc.dg/ppc-sdata-1.c
  b5ba424150d6f9f7d45a408112480ef3  gcc/testsuite/gcc.dg/ppc-sdata-2.c
  6bee4b61a91fdcf2ce29a319025fde82  gcc/testsuite/gcc.dg/ppc-spe.c
! 8090a7561c909b0fda44aa5ce2bfa9e4  gcc/testsuite/gcc.dg/ppc-spe64-1.c
! 3133ebba619e0d3d6789cfea332b5e61  gcc/testsuite/gcc.dg/ppc-stackalign-1.c
! dbb14181fe94247084634b2efb879a07  gcc/testsuite/gcc.dg/ppc-vector-memcpy.c
! 08fb0ff260aa830336d777ecfdbc9ee1  gcc/testsuite/gcc.dg/ppc-vector-memset.c
! e56ce616936c1d7a0a7a282f51024ec0  gcc/testsuite/gcc.dg/ppc64-abi-1.c
! e5e3de5e1d1c0211a2ed674487c39864  gcc/testsuite/gcc.dg/ppc64-abi-2.c
! 650fe61f1a51f45b472b793bd7161dfa  gcc/testsuite/gcc.dg/ppc64-abi-3.c
! ea1d9e504101479c0517d08a9f1ca588  gcc/testsuite/gcc.dg/ppc64-toc.c
! 8226e377d45ef0ffeb7badfb04740ab9  gcc/testsuite/gcc.dg/pr10392-1.c
! 860f163dcd0b252ea3f85323bc959a7d  gcc/testsuite/gcc.dg/pr11459-1.c
  3b83403729a3686d25552352bf0c4577  gcc/testsuite/gcc.dg/pr11864-1.c
+ 3f7dbcd866e97151c3a659636bf6f3c4  gcc/testsuite/gcc.dg/pr12092-1.c
+ 72a2fca76cb69617ae36bab93c7ec0d7  gcc/testsuite/gcc.dg/pr12625-1.c
+ e68628ce594a6a85cc0ba95b5c3525f4  gcc/testsuite/gcc.dg/pr13519-1.c
+ 2ee7dbdb28305bcb7a90b81c6690c428  gcc/testsuite/gcc.dg/pr13804-1.c
  78a51be88d08b4fd64d227b7e1a33b20  gcc/testsuite/gcc.dg/pr14092-1.c
  0213142afa4c27101de78860d03cec24  gcc/testsuite/gcc.dg/pr14289-1.c
! 9fab796f828ac62b532a3ab5b86ef6a2  gcc/testsuite/gcc.dg/pr14475.c
  aa8059e67aba749e5f156ad145b1e76b  gcc/testsuite/gcc.dg/pr14649-1.c
  eab51d905e25111086745a91fe335ef5  gcc/testsuite/gcc.dg/pr14765-1.c
+ 32ebb90eac91472473a4f1266f172937  gcc/testsuite/gcc.dg/pr14963.c
+ f5958d516cd9992daa1248ba50c10420  gcc/testsuite/gcc.dg/pr15360-1.c
+ d18b253e64885dde6f5e4bab15c651ed  gcc/testsuite/gcc.dg/pr15649-1.c
  8fc000abbf82aa05e3ebae13cf7ccd62  gcc/testsuite/gcc.dg/pr15749-1.c
  6ee62b7f7912606502963f94424e4ea9  gcc/testsuite/gcc.dg/pr15749-1.h
+ 8d4a7bcb794b31c15477bda561228af7  gcc/testsuite/gcc.dg/pr15784-1.c
+ ff77fb04e8b42550a781836468d153f0  gcc/testsuite/gcc.dg/pr15784-2.c
+ c8b83da7182e4640c909b4fbc041b86e  gcc/testsuite/gcc.dg/pr15784-3.c
+ fe579912d3095706d4937bd07fd76560  gcc/testsuite/gcc.dg/pr15785-1.c
+ aed382b304fb84f77b2722933bd3743a  gcc/testsuite/gcc.dg/pr15825-1.c
+ ab8ad9a90175c17dbef00e4518e22fb6  gcc/testsuite/gcc.dg/pr16155.c
+ c6c94c46c726cf1b6d046cbd475981a6  gcc/testsuite/gcc.dg/pr16286.c
+ 18990441a68151ae56dc05fefa49d8f7  gcc/testsuite/gcc.dg/pr16973.c
+ a9e1c58aa09048bb3fbc68a7a85290e1  gcc/testsuite/gcc.dg/pr17024-1.c
+ d5fc9ccee015351ed1b375a37c3c5b5d  gcc/testsuite/gcc.dg/pr17036-1.c
+ 3841e2e28dc1bf5648f6a5249a8d7bb9  gcc/testsuite/gcc.dg/pr17055-1.c
+ 0428f5cba461a132cf5d35d3bc007c2b  gcc/testsuite/gcc.dg/pr17112-1.c
+ 69656a5b429875d84be6d9d0d015b705  gcc/testsuite/gcc.dg/pr17188-1.c
+ 4cf259842d3a105e0161bf8c8c071e3a  gcc/testsuite/gcc.dg/pr17301-1.c
+ 6655e13a4dae8345b6aad1f765ec7713  gcc/testsuite/gcc.dg/pr17301-2.c
+ 5c242e5fba5ea3831a19adf1e668d784  gcc/testsuite/gcc.dg/pr17319.c
+ 17d53dd74958377887e4eefcfb5714f3  gcc/testsuite/gcc.dg/pr17322.c
+ b66ebb6cd6c7043a4c0a15028fba51b2  gcc/testsuite/gcc.dg/pr17424-1.c
  5bc3a1b72524bdb9ae3ec764a9f97531  gcc/testsuite/gcc.dg/pr17581-1.c
+ e96d91078bdd0e18e27b126bcdf56f7f  gcc/testsuite/gcc.dg/pr17635.c
+ 9a5cf54e63e207da983c56cd74220c7a  gcc/testsuite/gcc.dg/pr17730-1.c
+ dfd2b1a45c71282e96eb9a62ef9e3186  gcc/testsuite/gcc.dg/pr17844-1.c
+ c873a2719cd6fa06ff38d9b752433029  gcc/testsuite/gcc.dg/pr17957.c
+ deff93582c89e477b3831564035d97b3  gcc/testsuite/gcc.dg/pr18096-1.c
+ fb855dea1dd76b5cfc88278403ddf8f6  gcc/testsuite/gcc.dg/pr18164.c
+ dda319accc5673c937e3db66a8f70356  gcc/testsuite/gcc.dg/pr18241-1.c
+ c6573febe56c49c636832b9d1969488f  gcc/testsuite/gcc.dg/pr18241-2.c
+ 9d14cf49c430302c2dc4433bf0d86f14  gcc/testsuite/gcc.dg/pr18241-3.c
+ 135138846857ae08e0281e20a6fb7bbb  gcc/testsuite/gcc.dg/pr18241-4.c
+ 395c947686aef4bf8eebe0494677a5d0  gcc/testsuite/gcc.dg/pr18241-5.c
+ 10f3258213b34473607955ea014d09f6  gcc/testsuite/gcc.dg/pr18479.c
+ 62af219fe7d4cab1346cb1803881a700  gcc/testsuite/gcc.dg/pr18501.c
+ 6836ee857ecfe73c10050bfdff28f59b  gcc/testsuite/gcc.dg/pr18502-1.c
+ 359167e870dc70658fd776bf22f9bf97  gcc/testsuite/gcc.dg/pr18520-1.c
+ a863780694808d96a8e015b85a62a657  gcc/testsuite/gcc.dg/pr18596-1.c
+ 9703d180d7aeb5910270c3e6c5500f8b  gcc/testsuite/gcc.dg/pr18596-2.c
+ 4ef65f571700710bd80a8278de54c492  gcc/testsuite/gcc.dg/pr18596-3.c
+ 168a9e99323ac254cdf40afbe168c365  gcc/testsuite/gcc.dg/pr18614-1.c
+ 145a5d165df0ed23ea4c3ef136b3435e  gcc/testsuite/gcc.dg/pr18628.c
+ b6fde39832257cdbb135c68eff93f965  gcc/testsuite/gcc.dg/pr18725.c
+ 9b9162822adb571b6b648827778dc56a  gcc/testsuite/gcc.dg/pr18792.c
+ 058d986160b7e9371ae4ed1be1ea7113  gcc/testsuite/gcc.dg/pr18809-1.c
+ 483e5302264fd31cb925ea4398d0a8be  gcc/testsuite/gcc.dg/pr18921-1.c
+ 09a459ed7a5fefce4152034c67d0cf32  gcc/testsuite/gcc.dg/pr18928-1.c
+ 81a253b36eac86e845958c3baea09dc7  gcc/testsuite/gcc.dg/pr18963-1.c
+ cb5d19cd03a4531182527fc40aadd1b1  gcc/testsuite/gcc.dg/pr19236-1.c
+ 8150eaf90e1f00208b3dfdf711457bd2  gcc/testsuite/gcc.dg/pr19345.c
+ 85a9be052f27b32bb6f58f060ea06464  gcc/testsuite/gcc.dg/pr19402-1.c
+ 1d772b57574234bee1e7e32446b929dd  gcc/testsuite/gcc.dg/pr19402-2.c
+ 0d4bf774ae55a442b120938fae01f04c  gcc/testsuite/gcc.dg/pr19633-1.c
+ b0d4962136433f13ca40ba9f6e45f7ca  gcc/testsuite/gcc.dg/pr19633.c
+ 46e6a6b5bbeb8ceb6848069e122950a5  gcc/testsuite/gcc.dg/pr19967.c
+ ffdc98744a9a3d8a363ca6535da62028  gcc/testsuite/gcc.dg/pr20017.c
+ e9cd21e596ab4762c4f830282401af42  gcc/testsuite/gcc.dg/pr20054.c
+ 51edfa5e427018ef4fff45a8ad8913b8  gcc/testsuite/gcc.dg/pr20100.c
+ f14c9695c8ec7f390ce0c3acc686f691  gcc/testsuite/gcc.dg/pr20115-1.c
+ fda269538ec6cb5fa7f058ae0ca2954d  gcc/testsuite/gcc.dg/pr20115.c
+ cbceb09805608fad4a6efb0597139d8b  gcc/testsuite/gcc.dg/pr20204.c
+ 81880899aa2a2570c9563743e4d3cfe4  gcc/testsuite/gcc.dg/pr20368-1.c
+ 68f2f304ac5c6addda23a43d806fd6ff  gcc/testsuite/gcc.dg/pr20368-2.c
+ 741c133651e1debf54e4e9b8b3fae877  gcc/testsuite/gcc.dg/pr20368-3.c
+ 0eb2ef6a27b1c27d3ad4b1a345bd3633  gcc/testsuite/gcc.dg/pr20927.c
+ 6cc60febe9e684893eeeaf32d498b727  gcc/testsuite/gcc.dg/pr3074-1.c
  3825638bdc3a2a004aba9b3d95352327  gcc/testsuite/gcc.dg/pr9365-1.c
  8adaeeade8d8f93b244aa48e91818dbc  gcc/testsuite/gcc.dg/pr9771-1.c
! 9ec84191a3776cead356562d96ff91c4  gcc/testsuite/gcc.dg/pragma-align-2.c
! d5f6781f82f3456002a46b4d8e2bd489  gcc/testsuite/gcc.dg/pragma-align.c
! da7022072a3cdd021a9b1d0ece5e8e74  gcc/testsuite/gcc.dg/pragma-darwin.c
  1edd87ca9440d6cf6ed770a3fbb542ee  gcc/testsuite/gcc.dg/pragma-ep-1.c
  e961f06515e118b8d9224c2b1b8a4d30  gcc/testsuite/gcc.dg/pragma-ep-2.c
  c8912f97f76a12a1f08275f64975fe52  gcc/testsuite/gcc.dg/pragma-ep-3.c
+ 24a9270f9a6635bb396c6d700a9d9d2c  gcc/testsuite/gcc.dg/pragma-init-fini-2.c
+ 91ab565ddc880b520acf6e23bfc2f731  gcc/testsuite/gcc.dg/pragma-init-fini.c
+ fe88c96fd13079fe8dcbeb3dfcb74144  gcc/testsuite/gcc.dg/pragma-isr.c
+ 70c646980b7f8688082508ee2b320463  gcc/testsuite/gcc.dg/pragma-pack-2.c
  f332500fa9b1610a3a2e2c5094a9e623  gcc/testsuite/gcc.dg/pragma-re-1.c
  01aca0277735e694835146ae90d25dac  gcc/testsuite/gcc.dg/pragma-re-2.c
! 6f9ada327b2aba3d10c820c065c2f53f  gcc/testsuite/gcc.dg/pragma-re-3.c
! efa6034cc39517afbb457a507e9ce345  gcc/testsuite/gcc.dg/precedence-1.c
! 5039d5f4ab1624ff8f0aa1bb7aa81718  gcc/testsuite/gcc.dg/profile-generate-1.c
! 3810469bc2654e3a6f06ddfa97f58f37  gcc/testsuite/gcc.dg/qual-return-1.c
! 9805eb15e91e8c9ed14f44b788854255  gcc/testsuite/gcc.dg/qual-return-2.c
! bafbd0bb9e5172d4a6a02a4071cb80b5  gcc/testsuite/gcc.dg/qual-return-3.c
! 5d5f86b8e5c69ec9954b963d9b888159  gcc/testsuite/gcc.dg/qual-return-4.c
  fa6e4618c862111306143bc22d6cb230  gcc/testsuite/gcc.dg/range-test-1.c
! e625daa2e13af6daff9a667c7bc2aaa5  gcc/testsuite/gcc.dg/redecl-1.c
! 49092778c2ee021468e982e74fffa13a  gcc/testsuite/gcc.dg/redecl-10.c
! 490a2da6f3c5ef7192b2009ca0658a70  gcc/testsuite/gcc.dg/redecl-2.c
! a894d26cb8bd0b9d9dc915eec4d06120  gcc/testsuite/gcc.dg/redecl-3.c
! 4d84c68931088e69def75e933b693598  gcc/testsuite/gcc.dg/redecl-4.c
! 15bb482a190f43ffde4f6f84d87bb112  gcc/testsuite/gcc.dg/redecl-5.c
! 3e405f9b516f46c703ef34f23fab667b  gcc/testsuite/gcc.dg/redecl-6.c
! 039fbd5060125d65e29619069c4f9c1d  gcc/testsuite/gcc.dg/redecl-7.c
! 70e2e87e796926b7a00115967cafa859  gcc/testsuite/gcc.dg/redecl-8.c
! 94f3c15e465321b6130343668a295ab9  gcc/testsuite/gcc.dg/redecl-9.c
! 63aa7dbe627049e1536307bd8ea4f5a7  gcc/testsuite/gcc.dg/reg-vol-struct-1.c
! 544e795f5e49206a285a998edf77b6f2  gcc/testsuite/gcc.dg/register-var-1.c
! 544083f47ae274f5cae16360754aab14  gcc/testsuite/gcc.dg/register-var-2.c
! 772fbff52dc64a8724e84f0bc8ac12d3  gcc/testsuite/gcc.dg/return-type-1.c
  0d720e1c8f5d6d95b677821c7bae93bb  gcc/testsuite/gcc.dg/return-type-2.c
! 650297d80f8b5534796a1a513af1479b  gcc/testsuite/gcc.dg/return-type-3.c
! 83fb5e490c5b87853f92a84054671203  gcc/testsuite/gcc.dg/rs6000-ldouble-1.c
! 2eeea8fb3857592874b0b7f5047f6f47  gcc/testsuite/gcc.dg/rs6000-ldouble-2.c
! 463874923b13eb53fbc22485107b8765  gcc/testsuite/gcc.dg/rs6000-power2-1.c
! ab2573d845ce9cf1329608f1f5c71e1e  gcc/testsuite/gcc.dg/rs6000-power2-2.c
  d5126a2bd42a9c1593aedafecf29da00  gcc/testsuite/gcc.dg/section1.c
! f29205fe73b9b7871a2d5a931504281d  gcc/testsuite/gcc.dg/sequence-pt-1.c
! 318d75429c8d41d396060a14c474218e  gcc/testsuite/gcc.dg/setjmp-1.c
! 742b6cf6893c14ee07d452d4f550ea77  gcc/testsuite/gcc.dg/setjmp-2.c
! d03405e906e7b21744674dc4c7a97401  gcc/testsuite/gcc.dg/sh-relax.c
! 48599f73d81ef0ba397f2bc93dd97cea  gcc/testsuite/gcc.dg/sh4a-bitmovua.c
! 812810be733357b5afc244492d863200  gcc/testsuite/gcc.dg/sh4a-cos.c
! 98590fdcc34ed0e3bcae7c91ada611c1  gcc/testsuite/gcc.dg/sh4a-cosf.c
! fd3f0ab064d9554fe99d9c87cb935020  gcc/testsuite/gcc.dg/sh4a-fprun.c
! b28fd0619d9a5b5f410d6d5bb9de923a  gcc/testsuite/gcc.dg/sh4a-fsrra.c
! 0611af381669bdfaa1226dfb7b016d9e  gcc/testsuite/gcc.dg/sh4a-memmovua.c
! 38f018ebcceb0fa1b10d68496fe1388d  gcc/testsuite/gcc.dg/sh4a-sin.c
! 54ec89c66d83f06aada145bf6985bd57  gcc/testsuite/gcc.dg/sh4a-sincos.c
! cbff7115cea3c9bdad032baa69fbdf11  gcc/testsuite/gcc.dg/sh4a-sincosf.c
! e05fb34ca86f05d68d77641e30cd301a  gcc/testsuite/gcc.dg/sh4a-sinf.c
! 0b0e81eab39d214432b0e4c318e64d55  gcc/testsuite/gcc.dg/short-compare-1.c
! b98705ab4c2936767cf8457878f921a3  gcc/testsuite/gcc.dg/short-compare-2.c
! 8ca7d8e240c8b4ea29adc8d645ea0960  gcc/testsuite/gcc.dg/sibcall-1.c
! 2ae4f0d9c0185736d1412f640dd1d20b  gcc/testsuite/gcc.dg/sibcall-2.c
! 58b5780997f660027cd4c2cf3ed4989b  gcc/testsuite/gcc.dg/sibcall-3.c
! 5c8a187072d9d6ff91b60dc6c3ad6d02  gcc/testsuite/gcc.dg/sibcall-4.c
! 9306f047713cc8ed641eb4f7a660784b  gcc/testsuite/gcc.dg/sibcall-5.c
! 5415e0f5508e2a14848b0a32cdcad311  gcc/testsuite/gcc.dg/sibcall-6.c
! 375291fdacc661cd25c4bf6650d90fb7  gcc/testsuite/gcc.dg/simd-1.c
! c4999fac9a63960768f034241a363380  gcc/testsuite/gcc.dg/simd-1b.c
! a11e40f7565f3d90c3d5ffa7a019e790  gcc/testsuite/gcc.dg/simd-2.c
! 565db740be2b72b73523bf1f01e58b72  gcc/testsuite/gcc.dg/smod-1.c
  47ea74190c31fd1dbdaee16e97226345  gcc/testsuite/gcc.dg/sparc-constant-1.c
  09ed11beff813e9c83297ecb8d275588  gcc/testsuite/gcc.dg/sparc-dwarf2.c
  11bc2325082842cb92f3fb42cc60e580  gcc/testsuite/gcc.dg/sparc-loop-1.c
+ f512f0b4388eb1f8dd9dac3208407f2d  gcc/testsuite/gcc.dg/sparc-reg-1.c
  1914003a0d4dff145f223689c560d480  gcc/testsuite/gcc.dg/sparc-ret.c
  ed43551f491fa47772a1d71f67a20bb4  gcc/testsuite/gcc.dg/sparc-trap-1.c
  e4076561bf343823ba2b5380a58ad6b5  gcc/testsuite/gcc.dg/spe1.c
  20dc171666c91cdac8714a7c5075874e  gcc/testsuite/gcc.dg/special/20000419-2.c
  58b6b7734c2d9522f6acba13d91a557a  gcc/testsuite/gcc.dg/special/alias-1.c
  4b29f93ef3bc27cb9d83fdbc6aaa5b4a  gcc/testsuite/gcc.dg/special/alias-2.c
! a962e0c81201164fc2d54f588f56eb56  gcc/testsuite/gcc.dg/special/gcsec-1.c
! 8926ff35c658206f5892f361ae9beb6a  gcc/testsuite/gcc.dg/special/mips-abi.exp
  d41d8cd98f00b204e9800998ecf8427e  gcc/testsuite/gcc.dg/special/mips-abi.s
  5b9fceae4147c35c767a8dc47203ffab  gcc/testsuite/gcc.dg/special/special.exp
  108b01f58b0498d4becf23ff94838d68  gcc/testsuite/gcc.dg/special/weak-1.c
*************** c7b1b8b2c8e054f9b5f38c396f6c1426  gcc/te
*** 15657,15707 ****
  8c505507aaaeb23f8dbaefe9b5b136d1  gcc/testsuite/gcc.dg/special/wkali-2.c
  f3746837de836616a2cd4a391fcb8570  gcc/testsuite/gcc.dg/special/wkali-2a.c
  794b522131ab90fbd23b0a0121c65d63  gcc/testsuite/gcc.dg/special/wkali-2b.c
  92dc11d5f8ea9ff87c3546f6ea1ad26d  gcc/testsuite/gcc.dg/splet-1.c
  f978eab665383bc75093d7280e49f80c  gcc/testsuite/gcc.dg/string-opt-1.c
  e1737f9100fe39030ff4b356bc6ff29e  gcc/testsuite/gcc.dg/struct-alias-1.c
  756d07d22a151e89582543f5a88bda9f  gcc/testsuite/gcc.dg/struct-by-value-1.c
  fff906a27910e082e50f16054f4642c4  gcc/testsuite/gcc.dg/struct-by-value-2.c
  fee884a4304d29aaa15363cbcd88235e  gcc/testsuite/gcc.dg/struct-in-proto-1.c
! f4c6b16396b965bc082407a1eaececdb  gcc/testsuite/gcc.dg/struct-ret-1.c
  75f0ab76aad50d990bf2113b93b3fbea  gcc/testsuite/gcc.dg/struct-ret-2.c
  765a678087a365e079632bb3e65e37d4  gcc/testsuite/gcc.dg/struct-ret-libc.c
  19eb0c78936b80aedc21756f38e9b278  gcc/testsuite/gcc.dg/switch-1.c
! 6d1eb51dc2ec3194c8857452be2abc2c  gcc/testsuite/gcc.dg/switch-2.c
  4e889c486afef91f06cc3d5ac95077a4  gcc/testsuite/gcc.dg/switch-3.c
! 1559cab29e3dada808290b68cf1177ce  gcc/testsuite/gcc.dg/titype-1.c
! 8d5a06a792158ede1ec6aed1ea48e15a  gcc/testsuite/gcc.dg/tls/alias-1.c
  da04720c7966d958d0b2774c0f537c53  gcc/testsuite/gcc.dg/tls/alpha-1.c
! 719ec33e4a1fc93b1d06fe8114489cde  gcc/testsuite/gcc.dg/tls/asm-1.c
  3ed3b50b8ee4c887c177116fa3e37502  gcc/testsuite/gcc.dg/tls/diag-1.c
! 23694302f6ab9509977469ca4249f7fe  gcc/testsuite/gcc.dg/tls/diag-2.c
  61ffdf36544e5d30b5fb741360959a2d  gcc/testsuite/gcc.dg/tls/diag-3.c
  b86e181f980314f1d47cf65dbc6575b3  gcc/testsuite/gcc.dg/tls/init-1.c
  849992141284c23dd6fc0016abe40846  gcc/testsuite/gcc.dg/tls/nonpic-1.c
! e87f66b70dc33a5d7f1fdb72abcd44ab  gcc/testsuite/gcc.dg/tls/opt-1.c
! a617ff3ac6b547a20f601d5caaf4dec0  gcc/testsuite/gcc.dg/tls/opt-2.c
  5e526b4bd92acf4e1422acee237a2a47  gcc/testsuite/gcc.dg/tls/opt-3.c
  e963dc337d3fb2323b754760d01f5590  gcc/testsuite/gcc.dg/tls/opt-4.c
  f8d7a9ec4f8cc7c74415b627f433881c  gcc/testsuite/gcc.dg/tls/opt-5.c
  abaef86d6b8329f55b9adbae3c3e68c1  gcc/testsuite/gcc.dg/tls/opt-6.c
  970a2900ca71c96c6083f944a55d3f26  gcc/testsuite/gcc.dg/tls/opt-7.c
  d6d76a346d95d182905caa7e0bac7faa  gcc/testsuite/gcc.dg/tls/pic-1.c
  a318921e5fd05f92b1c26734c7e1ca87  gcc/testsuite/gcc.dg/tls/section-1.c
  0ef972e3e7824615ac3d4e67576ca1ea  gcc/testsuite/gcc.dg/tls/struct-1.c
  8e2690252ff18083f1372ca80d7ee2b4  gcc/testsuite/gcc.dg/tls/tls.exp
  d0ff7b21e6cafbaa5dd1684c5d898a19  gcc/testsuite/gcc.dg/tls/trivial.c
! 463e31e5c1dae03d6f58d3da89f89465  gcc/testsuite/gcc.dg/torture/builtin-attr-1.c
! 388be305c8c4bccc5d82e10a0ac10020  gcc/testsuite/gcc.dg/torture/builtin-explog-1.c
! 29c19e67d78dc0881de44c8acdca6b91  gcc/testsuite/gcc.dg/torture/builtin-math-1.c
! a89afa3814cef5c426af2c419296b831  gcc/testsuite/gcc.dg/torture/builtin-noret-1.c
! 780ac2da93a7b9e7c468acf17ad0abe0  gcc/testsuite/gcc.dg/torture/builtin-noret-2.c
  82bfe80fc489a6c0a56a612f224158c1  gcc/testsuite/gcc.dg/torture/cris-volatile-1.c
  616ba8292d1667a3872fba7a56a0c6a3  gcc/testsuite/gcc.dg/torture/dg-torture.exp
  e18294d3404279a1f70b16e5f321d933  gcc/testsuite/gcc.dg/torture/mips-clobber-at.c
  33f2d5a949f3be0de5e28e8cf8bec90f  gcc/testsuite/gcc.dg/torture/mips-div-1.c
  d07ecd707fac97fa40042e04a59d4b1e  gcc/testsuite/gcc.dg/torture/mips-sdata-1.c
  fd36e8c42459bd36680b21f47b33b671  gcc/testsuite/gcc.dg/torture/nested-fn-1.c
! 25101e8fa42aa49924ac66228814bdeb  gcc/testsuite/gcc.dg/trampoline-1.c
  99aa4b3086bd54b2fa365b5e4b9c58fa  gcc/testsuite/gcc.dg/trunc-1.c
  5a58fa954426a9307499c22fa4d90b23  gcc/testsuite/gcc.dg/typedef-init.c
  033f9eaca6e2312d2cefbe1ee49f3460  gcc/testsuite/gcc.dg/typedef-redecl.c
--- 16996,17259 ----
  8c505507aaaeb23f8dbaefe9b5b136d1  gcc/testsuite/gcc.dg/special/wkali-2.c
  f3746837de836616a2cd4a391fcb8570  gcc/testsuite/gcc.dg/special/wkali-2a.c
  794b522131ab90fbd23b0a0121c65d63  gcc/testsuite/gcc.dg/special/wkali-2b.c
+ d5b447904c327f5cfa57b69050822e4f  gcc/testsuite/gcc.dg/spill-1.c
  92dc11d5f8ea9ff87c3546f6ea1ad26d  gcc/testsuite/gcc.dg/splet-1.c
+ cc4c4b4f3d828c816c22793a90c03eb1  gcc/testsuite/gcc.dg/stmt-expr-1.c
+ c31787f23dd96fca93ed03ef56b41812  gcc/testsuite/gcc.dg/stmt-expr-2.c
+ 01f4261187a6a9713409409cb528c67a  gcc/testsuite/gcc.dg/stmt-expr-3.c
+ c9ab7e8c9543b00ec0212bc2f23d4b7b  gcc/testsuite/gcc.dg/stmt-expr-label-1.c
+ efb971cb78d334124eae64f465e07b18  gcc/testsuite/gcc.dg/stmt-expr-label-2.c
+ baa4bf542fb55e595d2fdc059f9b7ece  gcc/testsuite/gcc.dg/stmt-expr-label-3.c
  f978eab665383bc75093d7280e49f80c  gcc/testsuite/gcc.dg/string-opt-1.c
  e1737f9100fe39030ff4b356bc6ff29e  gcc/testsuite/gcc.dg/struct-alias-1.c
  756d07d22a151e89582543f5a88bda9f  gcc/testsuite/gcc.dg/struct-by-value-1.c
  fff906a27910e082e50f16054f4642c4  gcc/testsuite/gcc.dg/struct-by-value-2.c
+ 690c0c9a2bb5e991b2ad555aa009a37c  gcc/testsuite/gcc.dg/struct-empty-1.c
+ 694b70f8e87f21900a490a767b645901  gcc/testsuite/gcc.dg/struct-empty-2.c
+ 7b8ed50e70169070320ddc0651430310  gcc/testsuite/gcc.dg/struct-empty-3.c
  fee884a4304d29aaa15363cbcd88235e  gcc/testsuite/gcc.dg/struct-in-proto-1.c
! 71292c55dd1485a06682c239f2a42f0a  gcc/testsuite/gcc.dg/struct-ret-1.c
  75f0ab76aad50d990bf2113b93b3fbea  gcc/testsuite/gcc.dg/struct-ret-2.c
  765a678087a365e079632bb3e65e37d4  gcc/testsuite/gcc.dg/struct-ret-libc.c
+ b395e1fd82ba2ecd040d7df5a10e4f26  gcc/testsuite/gcc.dg/struct-semi-1.c
+ d416a52e3a0f366d984c22f7c57f08a6  gcc/testsuite/gcc.dg/struct-semi-2.c
+ 723a8cffe723996920f72e98e4a05e5a  gcc/testsuite/gcc.dg/struct-semi-3.c
  19eb0c78936b80aedc21756f38e9b278  gcc/testsuite/gcc.dg/switch-1.c
! ac72d210dcc5205efc0a772acb97390c  gcc/testsuite/gcc.dg/switch-2.c
  4e889c486afef91f06cc3d5ac95077a4  gcc/testsuite/gcc.dg/switch-3.c
! 7dae5f5aad2894163373f1d389d41afa  gcc/testsuite/gcc.dg/switch-4.c
! f057cfeb04cdf49e606e3495e5b38c4e  gcc/testsuite/gcc.dg/switch-5.c
! d60b8f9c311ccf743bec730ca173f392  gcc/testsuite/gcc.dg/switch-6.c
! 047a9441cdc81d87596e1da4947bf3dd  gcc/testsuite/gcc.dg/switch-7.c
! 9b4c978dea777328b4aa22c7e68baef4  gcc/testsuite/gcc.dg/switch-8.c
! 5e5189dc57ef9417d9a6140489419cee  gcc/testsuite/gcc.dg/switch-warn-1.c
! 85061a8a82ef9e9b4d82124e374518b3  gcc/testsuite/gcc.dg/switch-warn-2.c
! 152321b1bfa07e69c572a0ca8573c015  gcc/testsuite/gcc.dg/symbian1.c
! a2a9b9135252a63f30ae15393ececf8f  gcc/testsuite/gcc.dg/symbian2.c
! 7474a850002496a75a3fc07be3a92378  gcc/testsuite/gcc.dg/symbian3.c
! 6348d8c419a160922fcdffc252546f1f  gcc/testsuite/gcc.dg/symbian4.c
! a7b483d7dfa030106153baa28a7406da  gcc/testsuite/gcc.dg/symbian5.c
! a66a18a80260894d295ed4a169817ab3  gcc/testsuite/gcc.dg/titype-1.c
! cc9df1970c8cc35d4d7ac8aced597e80  gcc/testsuite/gcc.dg/tls/alias-1.c
  da04720c7966d958d0b2774c0f537c53  gcc/testsuite/gcc.dg/tls/alpha-1.c
! 356828118a6488b8aecc521e336451d0  gcc/testsuite/gcc.dg/tls/asm-1.c
  3ed3b50b8ee4c887c177116fa3e37502  gcc/testsuite/gcc.dg/tls/diag-1.c
! 478964ec34ae53b8885ddfa74839bb40  gcc/testsuite/gcc.dg/tls/diag-2.c
  61ffdf36544e5d30b5fb741360959a2d  gcc/testsuite/gcc.dg/tls/diag-3.c
+ b1d349b6887dc019e81a9fb843a13be0  gcc/testsuite/gcc.dg/tls/diag-4.c
+ d7f4fb0e80008cd61589de067d3f18d9  gcc/testsuite/gcc.dg/tls/diag-5.c
  b86e181f980314f1d47cf65dbc6575b3  gcc/testsuite/gcc.dg/tls/init-1.c
  849992141284c23dd6fc0016abe40846  gcc/testsuite/gcc.dg/tls/nonpic-1.c
! 89b628bd65ff639d5d5e68a4d6b487ce  gcc/testsuite/gcc.dg/tls/opt-1.c
! 3b53f3a26bf50ebce5d9fc740154557d  gcc/testsuite/gcc.dg/tls/opt-2.c
  5e526b4bd92acf4e1422acee237a2a47  gcc/testsuite/gcc.dg/tls/opt-3.c
  e963dc337d3fb2323b754760d01f5590  gcc/testsuite/gcc.dg/tls/opt-4.c
  f8d7a9ec4f8cc7c74415b627f433881c  gcc/testsuite/gcc.dg/tls/opt-5.c
  abaef86d6b8329f55b9adbae3c3e68c1  gcc/testsuite/gcc.dg/tls/opt-6.c
  970a2900ca71c96c6083f944a55d3f26  gcc/testsuite/gcc.dg/tls/opt-7.c
+ 157069362b8524dc1a1144fe6a5180eb  gcc/testsuite/gcc.dg/tls/opt-8.c
  d6d76a346d95d182905caa7e0bac7faa  gcc/testsuite/gcc.dg/tls/pic-1.c
  a318921e5fd05f92b1c26734c7e1ca87  gcc/testsuite/gcc.dg/tls/section-1.c
  0ef972e3e7824615ac3d4e67576ca1ea  gcc/testsuite/gcc.dg/tls/struct-1.c
  8e2690252ff18083f1372ca80d7ee2b4  gcc/testsuite/gcc.dg/tls/tls.exp
  d0ff7b21e6cafbaa5dd1684c5d898a19  gcc/testsuite/gcc.dg/tls/trivial.c
! 8769a963205b9784806d7b019a721b0f  gcc/testsuite/gcc.dg/torture/asm-subreg-1.c
! 029c6832164c11a3b408ac4b7f52362b  gcc/testsuite/gcc.dg/torture/badshift.c
! 3adfe0418b32629b20ba66c55c579e14  gcc/testsuite/gcc.dg/torture/builtin-attr-1.c
! 60a4333c101e3838dd08d7991a0f101b  gcc/testsuite/gcc.dg/torture/builtin-convert-1.c
! c3520109f532af00e1de0fac6b506dc2  gcc/testsuite/gcc.dg/torture/builtin-convert-2.c
! 3e1bfdcd138e54c2f230e6e743b0f92e  gcc/testsuite/gcc.dg/torture/builtin-convert-3.c
! dfb471a397851bdb52f7df883b650b86  gcc/testsuite/gcc.dg/torture/builtin-ctype-1.c
! 17bcbd76d1d14e04b26622ff64a84e7e  gcc/testsuite/gcc.dg/torture/builtin-ctype-2.c
! cc54547b66b457b079957e3d7802e7ee  gcc/testsuite/gcc.dg/torture/builtin-explog-1.c
! 47d560e6288f51113cf486e95ed8f444  gcc/testsuite/gcc.dg/torture/builtin-integral-1.c
! 5e784903b5dc50b9d24bee1bc3d1a59e  gcc/testsuite/gcc.dg/torture/builtin-math-1.c
! b27f5767c2963e42396ee35e6be41de9  gcc/testsuite/gcc.dg/torture/builtin-nonneg-1.c
! 0daafbd9114e9e5d0379015564d5aa02  gcc/testsuite/gcc.dg/torture/builtin-noret-1.c
! d94624b72d17342e8c27b3c73c2cfddc  gcc/testsuite/gcc.dg/torture/builtin-noret-2.c
! 512a2944ff1389f193a3998f6cb919c7  gcc/testsuite/gcc.dg/torture/builtin-power-1.c
! 189c5aaac352781bacb51ee2e2ae3f89  gcc/testsuite/gcc.dg/torture/builtin-rounding-1.c
! 15becdcad3e8df7aa0621ec4ed3b90c1  gcc/testsuite/gcc.dg/torture/builtin-wctype-1.c
  82bfe80fc489a6c0a56a612f224158c1  gcc/testsuite/gcc.dg/torture/cris-volatile-1.c
  616ba8292d1667a3872fba7a56a0c6a3  gcc/testsuite/gcc.dg/torture/dg-torture.exp
  e18294d3404279a1f70b16e5f321d933  gcc/testsuite/gcc.dg/torture/mips-clobber-at.c
  33f2d5a949f3be0de5e28e8cf8bec90f  gcc/testsuite/gcc.dg/torture/mips-div-1.c
+ edeea25ee46f3c7889bed752f74e78ae  gcc/testsuite/gcc.dg/torture/mips-hilo-1.c
+ ae2820cfd9805800154f7bf8f855f08b  gcc/testsuite/gcc.dg/torture/mips-hilo-2.c
  d07ecd707fac97fa40042e04a59d4b1e  gcc/testsuite/gcc.dg/torture/mips-sdata-1.c
  fd36e8c42459bd36680b21f47b33b671  gcc/testsuite/gcc.dg/torture/nested-fn-1.c
! 01c583edb41b632b835aa892b9c1cb14  gcc/testsuite/gcc.dg/torture/pr17933-1.c
! d35af8d91a3ed51b0b2ec71757f0125d  gcc/testsuite/gcc.dg/torture/pr19462-1.c
! 6015bd6668a6f1ae24e0760230d99522  gcc/testsuite/gcc.dg/torture/pr19683-1.c
! 28ae1108afbb5d46f8cc84a90cbf6bc7  gcc/testsuite/gcc.dg/torture/pr20314-1.c
! 0c03d6b8d9e5c7c429b61315d62a2681  gcc/testsuite/gcc.dg/torture/pr20314-2.c
! d870c565ecc3624fb4fbcb1510c36484  gcc/testsuite/gcc.dg/torture/tree-loop-1.c
! 36de78b1e0dee582fcda7292901df258  gcc/testsuite/gcc.dg/trampoline-1.c
! 6d50839b8de376e357caa647c5713316  gcc/testsuite/gcc.dg/transparent-union-1.c
! ef5bc6d620cc68ec203b322faa805c5b  gcc/testsuite/gcc.dg/transparent-union-2.c
! 4e4b949810e79413c571284bea311437  gcc/testsuite/gcc.dg/tree-ssa/20030530-2.c
! 9579fd4c7074870e59d1a29cc6382c44  gcc/testsuite/gcc.dg/tree-ssa/20030611-1.c
! bd13e8244ad71ec823fc2f273c37744b  gcc/testsuite/gcc.dg/tree-ssa/20030703-1.c
! b5a21e9afbcb2f0a2dbac656bf6015ea  gcc/testsuite/gcc.dg/tree-ssa/20030703-2.c
! c5d02bdf98d0cd52e716eaf311f3a67e  gcc/testsuite/gcc.dg/tree-ssa/20030708-1.c
! aed562e4896324f1ade0db989daa54f3  gcc/testsuite/gcc.dg/tree-ssa/20030709-1.c
! 8d1f69d92c27fec39768a009a12e3af0  gcc/testsuite/gcc.dg/tree-ssa/20030709-2.c
! b194dfb639c5c41104b6aad21cf724cc  gcc/testsuite/gcc.dg/tree-ssa/20030709-3.c
! 45cf5cae9cc83aa5ccc85655b6781d73  gcc/testsuite/gcc.dg/tree-ssa/20030710-1.c
! aabfa53845119bf2528f02068b30776e  gcc/testsuite/gcc.dg/tree-ssa/20030711-1.c
! cd5242d1b97e8533b42de80d2506d244  gcc/testsuite/gcc.dg/tree-ssa/20030711-2.c
! 7a928c81deffd733a2674c81de31531d  gcc/testsuite/gcc.dg/tree-ssa/20030711-3.c
! 5914a0690d5d46dab1af88b937d5227d  gcc/testsuite/gcc.dg/tree-ssa/20030714-1.c
! 8c4c252ff007cd67d4edb9405d4b3c18  gcc/testsuite/gcc.dg/tree-ssa/20030714-2.c
! 697085a726a03d99a612a0f676e24d4a  gcc/testsuite/gcc.dg/tree-ssa/20030728-1.c
! 8e9e0314cdd9152def30dd8f45fa09ee  gcc/testsuite/gcc.dg/tree-ssa/20030729-1.c
! 115d1b30fc99b4a97a5f34224f6e9744  gcc/testsuite/gcc.dg/tree-ssa/20030730-1.c
! bd151fe639199c37952deedaa5acb742  gcc/testsuite/gcc.dg/tree-ssa/20030730-2.c
! daeae785be8df8ffde38e55da597d1b8  gcc/testsuite/gcc.dg/tree-ssa/20030731-1.c
! 87e93f1ddcd5a03eaac24604a1c58f05  gcc/testsuite/gcc.dg/tree-ssa/20030731-2.c
! e693cfb588899e651d86747d8f43e20d  gcc/testsuite/gcc.dg/tree-ssa/20030807-1.c
! aca75d9c02936be7136a17e691ca53d2  gcc/testsuite/gcc.dg/tree-ssa/20030807-10.c
! d61eb8f195f88b461024ec914ce1ae28  gcc/testsuite/gcc.dg/tree-ssa/20030807-11.c
! 282e1ac2c8386865df1710b39a0cf0c2  gcc/testsuite/gcc.dg/tree-ssa/20030807-2.c
! a02b7b8af0832950d5173166565adacb  gcc/testsuite/gcc.dg/tree-ssa/20030807-3.c
! 9612451381ab7fa15c00b979381ea96e  gcc/testsuite/gcc.dg/tree-ssa/20030807-5.c
! 812d6c6bc0a9c02f0296d4b37dec5f1a  gcc/testsuite/gcc.dg/tree-ssa/20030807-6.c
! a7d6d197e31225360e5d866fd76d7f9c  gcc/testsuite/gcc.dg/tree-ssa/20030807-7.c
! f1fd8f44c78a80ee0df2080c21413177  gcc/testsuite/gcc.dg/tree-ssa/20030807-8.c
! fb5b894881cc44bbdb6454a9e48577a0  gcc/testsuite/gcc.dg/tree-ssa/20030807-9.c
! 5deb891220b0e999dab6a276004c30b6  gcc/testsuite/gcc.dg/tree-ssa/20030808-1.c
! a3112bf2a1322fc1260f64a228e62f90  gcc/testsuite/gcc.dg/tree-ssa/20030814-1.c
! 6b9a6410629a62656201127919f4506a  gcc/testsuite/gcc.dg/tree-ssa/20030814-2.c
! 214c48ef8522cb9e4e833306cbec0536  gcc/testsuite/gcc.dg/tree-ssa/20030814-3.c
! 4efeb33aff6e834476ca19339ea1777f  gcc/testsuite/gcc.dg/tree-ssa/20030814-4.c
! d607ccbe96048feb4323032c5b92d768  gcc/testsuite/gcc.dg/tree-ssa/20030814-5.c
! 3c147c22ff3d4363d991d0508deb2a5c  gcc/testsuite/gcc.dg/tree-ssa/20030814-6.c
! 0c11770b396396df142ecea50cfceb25  gcc/testsuite/gcc.dg/tree-ssa/20030814-7.c
! 75213a088144da4103bce65e9c5c66f5  gcc/testsuite/gcc.dg/tree-ssa/20030815-1.c
! 37b6d017e93749c4f054272493006e39  gcc/testsuite/gcc.dg/tree-ssa/20030820-1.c
! 14f412add3e73bb1cf98a6edef9af53e  gcc/testsuite/gcc.dg/tree-ssa/20030820-2.c
! a5d6ab6b30ea2297cd677efc1c3c2029  gcc/testsuite/gcc.dg/tree-ssa/20030821-1.c
! 5cd04fa1eccf2a85a734bd56def568f0  gcc/testsuite/gcc.dg/tree-ssa/20030824-1.c
! 25a0bf9f05b26c402f1c2c2710097e98  gcc/testsuite/gcc.dg/tree-ssa/20030824-2.c
! 6aed6da2095f8636810586afb14a1b50  gcc/testsuite/gcc.dg/tree-ssa/20030825-1.c
! ce6b72af5cf16599e365487a35476bc1  gcc/testsuite/gcc.dg/tree-ssa/20030907-1.c
! d3e4952123ac0028935a5d65da05cd67  gcc/testsuite/gcc.dg/tree-ssa/20030907-2.c
! 6cadab5818d197965fd98f334e3c95a5  gcc/testsuite/gcc.dg/tree-ssa/20030917-1.c
! ba2fbe68b2ea77c9003879dab67f3804  gcc/testsuite/gcc.dg/tree-ssa/20030917-2.c
! 905faf7a80534c845a2ac99ed1c74c4d  gcc/testsuite/gcc.dg/tree-ssa/20030917-3.c
! ad3d44926acf90e0683b2abbd536b57c  gcc/testsuite/gcc.dg/tree-ssa/20030918-1.c
! b711d5b48e3978f92fa0b2c439cf6c14  gcc/testsuite/gcc.dg/tree-ssa/20030920-1.c
! 6fb32ae1b21add5d78b56c22a3e9f969  gcc/testsuite/gcc.dg/tree-ssa/20030922-1.c
! 10f76640af114ad4df319cf56f7bb51e  gcc/testsuite/gcc.dg/tree-ssa/20030922-2.c
! c9564bab5e685ec6fafd380d38b618da  gcc/testsuite/gcc.dg/tree-ssa/20031015-1.c
! 09899e4f177f00000f939eab060a3dc1  gcc/testsuite/gcc.dg/tree-ssa/20031021-1.c
! 673a1728c83f8d8e128a9adf9db5b3f7  gcc/testsuite/gcc.dg/tree-ssa/20031022-1.c
! bdedc20a8695902ec09f4a5c8ba7b012  gcc/testsuite/gcc.dg/tree-ssa/20031031-1.c
! 636e179f977a9e8b49cf8e9412811191  gcc/testsuite/gcc.dg/tree-ssa/20031106-1.c
! 36d382ecd6f446e74805f9010f0f9b34  gcc/testsuite/gcc.dg/tree-ssa/20031106-2.c
! 089f43d43a4932a6d78e9d0f3729482c  gcc/testsuite/gcc.dg/tree-ssa/20031106-3.c
! 456f8ad6dd120580c3e3a27dc157d3c1  gcc/testsuite/gcc.dg/tree-ssa/20031106-4.c
! f675c641c9613200d6c10a8327621a00  gcc/testsuite/gcc.dg/tree-ssa/20031106-5.c
! ec145fd4eaef9710363ec9c105865f47  gcc/testsuite/gcc.dg/tree-ssa/20031106-6.c
! 3d74f7a86f1ec677f56458b70548904e  gcc/testsuite/gcc.dg/tree-ssa/20031113-1.c
! ccbf57ac62324c514aa4cbd38bbd36a7  gcc/testsuite/gcc.dg/tree-ssa/20031216-1.c
! ac7ae0e4acb8ff1383bf2cdaf6e6e4ae  gcc/testsuite/gcc.dg/tree-ssa/20040121-1.c
! 25fdd7a5909768bb39c801f7bbb17047  gcc/testsuite/gcc.dg/tree-ssa/20040204-1.c
! f77e8abfc662bb2df841fb591e394a5d  gcc/testsuite/gcc.dg/tree-ssa/20040209-1.c
! e525cbbf14a16e9c9d7a4df4c9aa04a8  gcc/testsuite/gcc.dg/tree-ssa/20040210-1.c
! 8a23624b4deccabed13f3b15a32baae7  gcc/testsuite/gcc.dg/tree-ssa/20040211-1.c
! 17b0ebfc6ba9bed6ffd8c2fc1845b78d  gcc/testsuite/gcc.dg/tree-ssa/20040216-1.c
! a16d2e01da70ca721400fe836a568770  gcc/testsuite/gcc.dg/tree-ssa/20040302-1.c
! 0015aebaea582c4201ea1c43c3548043  gcc/testsuite/gcc.dg/tree-ssa/20040305-1.c
! 5615bf10dfe846a0602fd8956a60aec0  gcc/testsuite/gcc.dg/tree-ssa/20040313-1.c
! 0138094a92b4816f6f1cf41d51f16912  gcc/testsuite/gcc.dg/tree-ssa/20040319-1.c
! 2a8b94927ebf8e329037b7253ec6e329  gcc/testsuite/gcc.dg/tree-ssa/20040324-1.c
! 5d26a52105764c38ddee33d39de337e3  gcc/testsuite/gcc.dg/tree-ssa/20040326-1.c
! 68c84e300d62bfd5e4d2a2605a3ee084  gcc/testsuite/gcc.dg/tree-ssa/20040326-2.c
! 30bf8f2d4da95eb4f5baf8b9f486ec9f  gcc/testsuite/gcc.dg/tree-ssa/20040408-1.c
! 07e102584ce2e1d50770c6c9c3c5ba4a  gcc/testsuite/gcc.dg/tree-ssa/20040430-1.c
! 6eb74a3719d126fbfd3288a63b0e24ea  gcc/testsuite/gcc.dg/tree-ssa/20040513-1.c
! 7ef7935ed338dad0435e242566f65c28  gcc/testsuite/gcc.dg/tree-ssa/20040513-2.c
! d36acf0af4b97fc1e58794efdfb87fd4  gcc/testsuite/gcc.dg/tree-ssa/20040514-1.c
! 032aec2f92dc83198a11928a939eb6a2  gcc/testsuite/gcc.dg/tree-ssa/20040514-2.c
! f1485e5beff0fc9127b2fe0f766a084e  gcc/testsuite/gcc.dg/tree-ssa/20040517-1.c
! 787c229205ba79727c8c0723cc27f010  gcc/testsuite/gcc.dg/tree-ssa/20040518-1.c
! 5d1a63a4d1562697febab094a20f0586  gcc/testsuite/gcc.dg/tree-ssa/20040518-2.c
! 6072290efe48752aa454153a5c1a5af8  gcc/testsuite/gcc.dg/tree-ssa/20040615-1.c
! e0ad408a6ac7f2beadb8b464fc6f5e53  gcc/testsuite/gcc.dg/tree-ssa/20040624-1.c
! dcb233ad95333fc60745a3e23f760012  gcc/testsuite/gcc.dg/tree-ssa/20040703-1.c
! e12c9ed0224acebe9161af9589a42ccf  gcc/testsuite/gcc.dg/tree-ssa/20040713-1.c
! 8bc559d8558e400533afaf520e8b1f69  gcc/testsuite/gcc.dg/tree-ssa/20040721-1.c
! 5d8c448c03bab8b437931261c15d7c16  gcc/testsuite/gcc.dg/tree-ssa/20040729-1.c
! 5b41514d8a933721ee36de35b2acd98f  gcc/testsuite/gcc.dg/tree-ssa/20040911-1.c
! 74ac475689befe4d4320aec345225731  gcc/testsuite/gcc.dg/tree-ssa/20041002-1.c
! 93366da6daaa0436c31dfcb03c746093  gcc/testsuite/gcc.dg/tree-ssa/20041110-1.c
! 13dc5387054a2f30dab600cdae515be3  gcc/testsuite/gcc.dg/tree-ssa/20041122-1.c
! 8706a1235b0e0fc82841a694f8573086  gcc/testsuite/gcc.dg/tree-ssa/20050128-1.c
! 62174538a603ec160c4400536c880848  gcc/testsuite/gcc.dg/tree-ssa/20050215-1.c
! 5c83b92f5a62c2e506f9caf44b355b75  gcc/testsuite/gcc.dg/tree-ssa/asm-1.c
! ec35daf5e78d46d87d9b6c283602593f  gcc/testsuite/gcc.dg/tree-ssa/asm-2.c
! 8cd5eab9db41ec5061508bb2ccef41d9  gcc/testsuite/gcc.dg/tree-ssa/asm-3.c
! 61ecaa4d5c50b282897cd4ddc5a55f5a  gcc/testsuite/gcc.dg/tree-ssa/cfgcleanup-1.c
! c110c327815c82a70e631e10f5627b28  gcc/testsuite/gcc.dg/tree-ssa/complex-1.c
! 47f32d959ac63e1c46be790f2435dc06  gcc/testsuite/gcc.dg/tree-ssa/complex-2.c
! 4be9e11366774fe2e0e1e6a04c1a6ac7  gcc/testsuite/gcc.dg/tree-ssa/copy-headers.c
! 25f7a8d76aea1ec408aff18a412e438e  gcc/testsuite/gcc.dg/tree-ssa/ifc-20040816-1.c
! 3e50e41d816b7aff93082bd57914d648  gcc/testsuite/gcc.dg/tree-ssa/ifc-20040816-2.c
! 5cd63ae7b4fd3dffe527b9777b873e6e  gcc/testsuite/gcc.dg/tree-ssa/inline_asm-1.c
! 976288eb1caa6e8139e1492c2c4fd337  gcc/testsuite/gcc.dg/tree-ssa/inline_asm-2.c
! aa1090170f768dc6c863af59153a5c5c  gcc/testsuite/gcc.dg/tree-ssa/loop-1.c
! 178600775918a397ea8d92b7d3e6c6a7  gcc/testsuite/gcc.dg/tree-ssa/loop-2.c
! 9f62def2da6a71bf350d4cab8fd2aeb9  gcc/testsuite/gcc.dg/tree-ssa/loop-3.c
! 9c2df4fafa0e40e52ccd4b1e7b4b6bfa  gcc/testsuite/gcc.dg/tree-ssa/loop-4.c
! c2a0b912503d4986f40ae25027b2f059  gcc/testsuite/gcc.dg/tree-ssa/loop-5.c
! 8c061822dd08526276b929306dd0fcd6  gcc/testsuite/gcc.dg/tree-ssa/loop-6.c
! 950b8fc6e9e326c68ff2c4c50f10cc71  gcc/testsuite/gcc.dg/tree-ssa/loop-7.c
! afd41f42fa567c506d38d1eb04b9135d  gcc/testsuite/gcc.dg/tree-ssa/ltrans-1.c
! 579738f9954fdd8ceade2dd3e278036c  gcc/testsuite/gcc.dg/tree-ssa/ltrans-2.c
! d3467accd01d0f3e3ee5e9502ff76d59  gcc/testsuite/gcc.dg/tree-ssa/ltrans-3.c
! f8f2dd5d8cc326a986dafa4ac7b02e7f  gcc/testsuite/gcc.dg/tree-ssa/ltrans-4.c
! 123e903cf32f5e18fd99b60c7050a89a  gcc/testsuite/gcc.dg/tree-ssa/ltrans-5.c
! de7d366f010be6ac703014a34caf7014  gcc/testsuite/gcc.dg/tree-ssa/pr15349.c
! 62600822d88828e393d9efe9f65e0fb1  gcc/testsuite/gcc.dg/tree-ssa/pr15791-1.c
! 622a67339e32d57e1703eb816c9cddfc  gcc/testsuite/gcc.dg/tree-ssa/pr15791-2.c
! bb6527f80ae839bc430bdf7cb401919b  gcc/testsuite/gcc.dg/tree-ssa/pr15791-3.c
! 921073cd26891c83517e9c9da29056bc  gcc/testsuite/gcc.dg/tree-ssa/pr15791-4.c
! 7e96b720e93166ec35d98feb54ea6edf  gcc/testsuite/gcc.dg/tree-ssa/pr15791-5.c
! 163d8e5157061586341db5b25594404b  gcc/testsuite/gcc.dg/tree-ssa/pr16721.c
! fa134b7b09128388df0cf5dfe1f05256  gcc/testsuite/gcc.dg/tree-ssa/pr19633.c
! 738c7cc83dcdd6356d2c052f533c2329  gcc/testsuite/gcc.dg/tree-ssa/pr20739.c
! 7314de29f502969713acbbdc6482643f  gcc/testsuite/gcc.dg/tree-ssa/sra-1.c
! 891b70b9f723afb7c9c5920027971528  gcc/testsuite/gcc.dg/tree-ssa/sra-2.c
! b4d33791af831a58473eeb4190d5c095  gcc/testsuite/gcc.dg/tree-ssa/sra-3.c
! 1a30a949e2b54835fbb00d0c43254e84  gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-1.c
! 05d591294c7151052d3b2ea7480c3a1e  gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-10.c
! f3d566fb7e69f47fceb6063ebf51be5a  gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-11.c
! cbb4ce98f5bb1b5f2ddcc598e2a8987f  gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-2.c
! 7d4ee66f4a94f76685f6a4da8a578254  gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-3.c
! 08510a0ddc8dc1fcf5014f9e7f35edcf  gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-7.c
! 9f07eac8175ad17e1bfb9f993c3181c9  gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-9.c
! f1aa2c8a7b81b4e0d66fb1e05ac95b38  gcc/testsuite/gcc.dg/tree-ssa/ssa-dce-1.c
! 22c6940b10e1c49e8ea75a588ba2d0ce  gcc/testsuite/gcc.dg/tree-ssa/ssa-dce-2.c
! b2deed02c1310dfdaac998534765737f  gcc/testsuite/gcc.dg/tree-ssa/ssa-dce-3.c
! f73f6966be24b091360a4d978974b337  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-ccp-1.c
! 34a64a821f9698ac15a6fb4aaccde57d  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-cse-1.c
! 071a45773910db43565f524b8aff979a  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-1.c
! 12b475ec869200826829289b8d0fb0aa  gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-1.c
! 2634ac602bd66978dd5a67f3e3cfa4f0  gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-2.c
! c411156c9033f11f2e8fda3d017fd021  gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-3.c
! 78c9184fcb711ab60dfb47fff02652dc  gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-4.c
! 4e055b14e5c9e9e048f1478126f8d4a3  gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-5.c
! b86e74290ec7ae346aa752d6f56aacb1  gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-6.c
! f473c024639a7ff168ec7c53dc1da31a  gcc/testsuite/gcc.dg/tree-ssa/tailcall-1.c
! 167e398c4c929130a179ddf178b8e255  gcc/testsuite/gcc.dg/tree-ssa/tailcall-2.c
! e0c84841ed7a0c0d1f6c5fbad439a13c  gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-1.c
! 79c8d44c7dd5e379e7ff6254fef6f292  gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-2.c
! 38c587da75707c298f695abb8c3a4a9d  gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-3.c
! f277ad307399b9bae0a5bff0a4f4de3f  gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-4.c
! d7e37e46b377e5697d173e070b60e871  gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-5.c
! c69a762d2705923f8fd6cfa55eccbfe8  gcc/testsuite/gcc.dg/tree-ssa/tree-ssa.exp
! f883b6f9068f6e8adca73dd70b3c9110  gcc/testsuite/gcc.dg/tree-ssa/useless-1.c
  99aa4b3086bd54b2fa365b5e4b9c58fa  gcc/testsuite/gcc.dg/trunc-1.c
  5a58fa954426a9307499c22fa4d90b23  gcc/testsuite/gcc.dg/typedef-init.c
  033f9eaca6e2312d2cefbe1ee49f3460  gcc/testsuite/gcc.dg/typedef-redecl.c
*************** de8fdd5952fa2932ecbb34d020db3223  gcc/te
*** 15712,15786 ****
  ed2b73d80d75f96b69fc515ae2a8e2f2  gcc/testsuite/gcc.dg/ultrasp10.c
  e9ec9a7a1c116a57514c6e26dba325e2  gcc/testsuite/gcc.dg/ultrasp11.c
  a321ad49b40fcd497f7978b82a56e55c  gcc/testsuite/gcc.dg/ultrasp2.c
! 4dfdedc43d9dfc0aae1d90d23019cb96  gcc/testsuite/gcc.dg/ultrasp3.c
! 37e6ff5415e5495130aacf12d9dc25fb  gcc/testsuite/gcc.dg/ultrasp4.c
  c27c6f829df866f06277352d80fc9c93  gcc/testsuite/gcc.dg/ultrasp5.c
  d34adf87acc00eed72ec285f8f0af21c  gcc/testsuite/gcc.dg/ultrasp6.c
  4fdb7c4f489e0cfb69e68162b30d05ba  gcc/testsuite/gcc.dg/ultrasp7.c
  e8ec7bd58f3a625230a08b85989052b9  gcc/testsuite/gcc.dg/ultrasp8.c
  e80fcfc95aa764ab5173fe0441bd64f0  gcc/testsuite/gcc.dg/ultrasp9.c
  79a7a8c0948ae5bcfa1991de6867e0c1  gcc/testsuite/gcc.dg/unaligned-1.c
! 46f08f022f626b39d70660eb906ec197  gcc/testsuite/gcc.dg/uninit-1.c
  2efe604c8afc3ddbb3731d3111a1bee7  gcc/testsuite/gcc.dg/uninit-10.c
! ad4fbf2a282cc9c570ac94c094d0477e  gcc/testsuite/gcc.dg/uninit-2.c
! 72aa291c16c3a253d35ed11ea37f3475  gcc/testsuite/gcc.dg/uninit-3.c
! e3ccfcfa37506703f7ac37e96ab6194f  gcc/testsuite/gcc.dg/uninit-4.c
! 337780d9af299650524d65e43da8d94e  gcc/testsuite/gcc.dg/uninit-5.c
! 09aabcf90ce03b3d4bf19f217fab8527  gcc/testsuite/gcc.dg/uninit-6.c
! 274948f5c9de61512c8de0cadd6655e2  gcc/testsuite/gcc.dg/uninit-8.c
  ef92619a17772d7674bdb6cdfbfab67e  gcc/testsuite/gcc.dg/uninit-9.c
  16629fbf66db8d64116183c2cffefbb4  gcc/testsuite/gcc.dg/uninit-A.c
  fce48cae3da7d32c821f9ffe0f3a2987  gcc/testsuite/gcc.dg/uninit-B.c
! 3d075741e5746b2f73fea3e06c6e2838  gcc/testsuite/gcc.dg/uninit-C.c
  ab24bda566bd8141b638ddfb37e53301  gcc/testsuite/gcc.dg/uninit-D.c
  a9431f9dc63f136cd7b87acbc9209f71  gcc/testsuite/gcc.dg/uninit-E.c
  21c4940c3e3640a911a8ccc6f76bdc36  gcc/testsuite/gcc.dg/uninit-F.c
  75df74e4abeafaed617ddff778092762  gcc/testsuite/gcc.dg/uninit-G.c
  78c7acd37bc5c230e62db954ee385285  gcc/testsuite/gcc.dg/union-1.c
  a7ac2b6782378edf99026215c26ce37f  gcc/testsuite/gcc.dg/unordered-1.c
! b7a7d9ce7666dc117ed4c2c6c1b7b60e  gcc/testsuite/gcc.dg/unroll-1.c
  aa7c265797a6b0a2b548e25a531baf92  gcc/testsuite/gcc.dg/unused-1.c
  8ba0a7c993176dd2077bdae924adddc8  gcc/testsuite/gcc.dg/unused-2.c
  ab4388fbc891efa6bd4ea338695fd64f  gcc/testsuite/gcc.dg/unused-3.c
  f55895cb94c5e964c468715a41917cb5  gcc/testsuite/gcc.dg/unused-4.c
  514522eb235dda25d2291d3a4faf0580  gcc/testsuite/gcc.dg/unused-5.c
  5fb1882dbd19a99231ccfb010ee68bd5  gcc/testsuite/gcc.dg/va-arg-1.c
  1cf7bde6d2bbf11d4cb7b99fc070f910  gcc/testsuite/gcc.dg/va-arg-2.c
  682b52464ba3c1efc4293e4f2d4ba5b7  gcc/testsuite/gcc.dg/verbose-asm.c
! 2395dab63aa4079ee6ee48818dc33f27  gcc/testsuite/gcc.dg/visibility-1.c
! f3c134142c695c29bec69b96b152a628  gcc/testsuite/gcc.dg/visibility-2.c
! ec619ce79defa98f420ad3d922ea0b02  gcc/testsuite/gcc.dg/visibility-3.c
! 4d375f1583b9feaf8938875c45f8399d  gcc/testsuite/gcc.dg/visibility-4.c
! 0b0aae3e5740cd0925ba72f93a49bdf5  gcc/testsuite/gcc.dg/visibility-5.c
! 8a84926884b26cdb7b7cfec5076561f8  gcc/testsuite/gcc.dg/visibility-6.c
! f0d00b3830ba8998cb6077269703d8fa  gcc/testsuite/gcc.dg/visibility-7.c
! 956a9b5be7208e96622dce214119839e  gcc/testsuite/gcc.dg/visibility-8.c
  3e1ba4e8c65af4f1d7b139f51191b956  gcc/testsuite/gcc.dg/vla-2.c
  7c812137a18ff02eb065abda9d45bbc7  gcc/testsuite/gcc.dg/vla-init-1.c
  4f86f41367e187a8eaafc00476f3e985  gcc/testsuite/gcc.dg/volatile1.c
! 419730d087679023faa2b541bcbc82cc  gcc/testsuite/gcc.dg/warn-1.c
! 94ba79d3fb07554637e2e3c90e64544f  gcc/testsuite/gcc.dg/wchar_t-1.c
! f691f51b4ba2b4ab19f5a766233b9f5a  gcc/testsuite/gcc.dg/weak/typeof-2.c
  986c02c7e51f343e3970338f5a1ba853  gcc/testsuite/gcc.dg/weak/weak-1.c
  3662d1fbfdd56e6dd5a87baf8c78410f  gcc/testsuite/gcc.dg/weak/weak-2.c
! 0a40d7999c9733f48a950c84e1bd9ab4  gcc/testsuite/gcc.dg/weak/weak-3.c
  66df7ede09b74690c141035924b813ec  gcc/testsuite/gcc.dg/weak/weak-4.c
! 494b03f44445141ae95738ee9fc2eea3  gcc/testsuite/gcc.dg/weak/weak-5.c
  1185edfd59a6e76ae0b3f3616496bd78  gcc/testsuite/gcc.dg/weak/weak-6.c
  05583da12dddd7c57c3404af50dd5d54  gcc/testsuite/gcc.dg/weak/weak-7.c
  ef4ea7d4216e9123244c1d14e75ca376  gcc/testsuite/gcc.dg/weak/weak-8.c
! 77cb6d235ce46c4da216c16bf1907d3b  gcc/testsuite/gcc.dg/weak/weak-9.c
  94b7a601a303161ded0090240f9af5b0  gcc/testsuite/gcc.dg/weak/weak.exp
  c6a61511e6fb0917ffba55a76df61339  gcc/testsuite/gcc.dg/winline-1.c
  6b68673ca9f7b446eab731a341c42c55  gcc/testsuite/gcc.dg/winline-2.c
  3725591cf700cdfcc1a553e59f6b23d1  gcc/testsuite/gcc.dg/winline-3.c
  154eb8683c7b5d706865008188d0d8ff  gcc/testsuite/gcc.dg/winline-4.c
  5daeb2f9d0fe25622fc79f2a66319731  gcc/testsuite/gcc.dg/winline-5.c
! 01cea1380bda55e349ce759a55f61f8e  gcc/testsuite/gcc.dg/winline-6.c
! d1838efe7d3f1253fc6c991edfd5e871  gcc/testsuite/gcc.dg/winline-7.c
! de568c42a46096e34c3db290520c81f7  gcc/testsuite/gcc.dg/wint_t-1.c
  0608c380e23cc21f1a8c8141d8def366  gcc/testsuite/gcc.dg/wtr-aggr-init-1.c
! b6bdee50ed69b91d21e2c5d7fa3add59  gcc/testsuite/gcc.dg/wtr-conversion-1.c
  81ce4be5f048dad36a72f1239e0b064c  gcc/testsuite/gcc.dg/wtr-escape-1.c
  1b5b3a77536ffa4a0135ceedd06b2bd0  gcc/testsuite/gcc.dg/wtr-func-def-1.c
  653c823985dcf3e0a7f9a3af52451671  gcc/testsuite/gcc.dg/wtr-int-type-1.c
--- 17264,17575 ----
  ed2b73d80d75f96b69fc515ae2a8e2f2  gcc/testsuite/gcc.dg/ultrasp10.c
  e9ec9a7a1c116a57514c6e26dba325e2  gcc/testsuite/gcc.dg/ultrasp11.c
  a321ad49b40fcd497f7978b82a56e55c  gcc/testsuite/gcc.dg/ultrasp2.c
! c5b0826f153772b8f25ec4ce7b946668  gcc/testsuite/gcc.dg/ultrasp3.c
! 019579a6ad5f17fff1d4fbf6825f8b1e  gcc/testsuite/gcc.dg/ultrasp4.c
  c27c6f829df866f06277352d80fc9c93  gcc/testsuite/gcc.dg/ultrasp5.c
  d34adf87acc00eed72ec285f8f0af21c  gcc/testsuite/gcc.dg/ultrasp6.c
  4fdb7c4f489e0cfb69e68162b30d05ba  gcc/testsuite/gcc.dg/ultrasp7.c
  e8ec7bd58f3a625230a08b85989052b9  gcc/testsuite/gcc.dg/ultrasp8.c
  e80fcfc95aa764ab5173fe0441bd64f0  gcc/testsuite/gcc.dg/ultrasp9.c
  79a7a8c0948ae5bcfa1991de6867e0c1  gcc/testsuite/gcc.dg/unaligned-1.c
! f0a8a0b26965879e40a88ebccf31030c  gcc/testsuite/gcc.dg/uninit-1.c
  2efe604c8afc3ddbb3731d3111a1bee7  gcc/testsuite/gcc.dg/uninit-10.c
! 47ed84368456fefad7abc1900b77eb03  gcc/testsuite/gcc.dg/uninit-11.c
! e7bbbf0090661e8a065ace2511f8f195  gcc/testsuite/gcc.dg/uninit-2.c
! 9f0fb0245ee08bf0f10f3a180e2006cd  gcc/testsuite/gcc.dg/uninit-3.c
! d37b87a3341d5c9a8abac4ac47c1b8df  gcc/testsuite/gcc.dg/uninit-4.c
! af150904d1ab27049e751cfe71293bce  gcc/testsuite/gcc.dg/uninit-5.c
! 3c151f7c8ccd2ef3938ef0448635a88c  gcc/testsuite/gcc.dg/uninit-6.c
! 02fd8399336707a49596611f5e0d77ff  gcc/testsuite/gcc.dg/uninit-8.c
  ef92619a17772d7674bdb6cdfbfab67e  gcc/testsuite/gcc.dg/uninit-9.c
  16629fbf66db8d64116183c2cffefbb4  gcc/testsuite/gcc.dg/uninit-A.c
  fce48cae3da7d32c821f9ffe0f3a2987  gcc/testsuite/gcc.dg/uninit-B.c
! cb38da50a5c4228ccc9424c776452cb1  gcc/testsuite/gcc.dg/uninit-C.c
  ab24bda566bd8141b638ddfb37e53301  gcc/testsuite/gcc.dg/uninit-D.c
  a9431f9dc63f136cd7b87acbc9209f71  gcc/testsuite/gcc.dg/uninit-E.c
  21c4940c3e3640a911a8ccc6f76bdc36  gcc/testsuite/gcc.dg/uninit-F.c
  75df74e4abeafaed617ddff778092762  gcc/testsuite/gcc.dg/uninit-G.c
+ eb3da821b8325355aae91cb8e079d6a4  gcc/testsuite/gcc.dg/uninit-H.c
+ b9bb4f2aa63b0063ee5ebd05ee909084  gcc/testsuite/gcc.dg/uninit-I.c
  78c7acd37bc5c230e62db954ee385285  gcc/testsuite/gcc.dg/union-1.c
+ 19582a249859766163d52754d6531172  gcc/testsuite/gcc.dg/union-2.c
  a7ac2b6782378edf99026215c26ce37f  gcc/testsuite/gcc.dg/unordered-1.c
! fced4847e686e50fcf2f9178fed8ec41  gcc/testsuite/gcc.dg/unordered-2.c
! 71d6c034e39b6c686c0b734cd47d63f2  gcc/testsuite/gcc.dg/unordered-3.c
! 1fd79cf0a79a2323734ac93b09a4c724  gcc/testsuite/gcc.dg/unroll-1.c
  aa7c265797a6b0a2b548e25a531baf92  gcc/testsuite/gcc.dg/unused-1.c
  8ba0a7c993176dd2077bdae924adddc8  gcc/testsuite/gcc.dg/unused-2.c
  ab4388fbc891efa6bd4ea338695fd64f  gcc/testsuite/gcc.dg/unused-3.c
  f55895cb94c5e964c468715a41917cb5  gcc/testsuite/gcc.dg/unused-4.c
  514522eb235dda25d2291d3a4faf0580  gcc/testsuite/gcc.dg/unused-5.c
+ e3db8ed02ca0ecad28455ac3f0b93696  gcc/testsuite/gcc.dg/unused-6.c
+ b9094e47fb1bcf5228d5a172f181d34c  gcc/testsuite/gcc.dg/unused-7.c
  5fb1882dbd19a99231ccfb010ee68bd5  gcc/testsuite/gcc.dg/va-arg-1.c
  1cf7bde6d2bbf11d4cb7b99fc070f910  gcc/testsuite/gcc.dg/va-arg-2.c
+ 7eb72d01fa5dd0efeb65de148d13d82f  gcc/testsuite/gcc.dg/va-arg-3.c
+ d02f9656631c2615923d88b8c44be21c  gcc/testsuite/gcc.dg/vect/pr16105.c
+ 8ab4c330748112c1be6a29fab9bd8407  gcc/testsuite/gcc.dg/vect/pr18308.c
+ 07747cad73fd15fff4e936e6f72a3346  gcc/testsuite/gcc.dg/vect/pr18400.c
+ d6aff1909a921e27333361faf66ca1fd  gcc/testsuite/gcc.dg/vect/pr18425.c
+ 660dba77f26204989505ad3cd618c2d8  gcc/testsuite/gcc.dg/vect/pr18536.c
+ c695dc2264c3ab79501734468e2dd0bf  gcc/testsuite/gcc.dg/vect/pr20122.c
+ 90ab48a907acc4d2920aaff47f390c7f  gcc/testsuite/gcc.dg/vect/tree-vect.h
+ c95a68e6649f0c173afb9ff81b624b21  gcc/testsuite/gcc.dg/vect/vect-1.c
+ 35ec8cf8f68f247a1a3cded2943d6837  gcc/testsuite/gcc.dg/vect/vect-10.c
+ 234a5af3543ca1da9ef11b86ea96885c  gcc/testsuite/gcc.dg/vect/vect-11.c
+ 307c9044de3821651da72e4c6d425124  gcc/testsuite/gcc.dg/vect/vect-12.c
+ 9862c7a9cc8af0fb7735f7a1120f0f34  gcc/testsuite/gcc.dg/vect/vect-13.c
+ 984fbbca4991e5df1d103f53b9c883c9  gcc/testsuite/gcc.dg/vect/vect-14.c
+ 54db45bccab22ba541f20cafe492cad1  gcc/testsuite/gcc.dg/vect/vect-15.c
+ 871bd95fbd069770dedd86d46d3cee7f  gcc/testsuite/gcc.dg/vect/vect-16.c
+ 3d54e82eb877a152970853dec97ffe17  gcc/testsuite/gcc.dg/vect/vect-17.c
+ f7bff0b59e47c0cf67234cf70404397a  gcc/testsuite/gcc.dg/vect/vect-18.c
+ 5a4c541bcd765c7986c187f09d2c9448  gcc/testsuite/gcc.dg/vect/vect-19.c
+ 5fd38a7278d8c83fab6057c9e4e4d188  gcc/testsuite/gcc.dg/vect/vect-2.c
+ a259db5149951271f0b4ed016e2076b1  gcc/testsuite/gcc.dg/vect/vect-20.c
+ f3b7f477ae13d39b6ed5b30d0b9ae27a  gcc/testsuite/gcc.dg/vect/vect-21.c
+ a9e250f5c9f2bb93b8bed811fec1abd5  gcc/testsuite/gcc.dg/vect/vect-22.c
+ ab8a5afb72c4ad6b8bcd13b5014df4e9  gcc/testsuite/gcc.dg/vect/vect-23.c
+ f86ec8c0254700db89c92f255b3230db  gcc/testsuite/gcc.dg/vect/vect-24.c
+ a22d4041cb50fb51c3875d66f02ded0d  gcc/testsuite/gcc.dg/vect/vect-25.c
+ aff5f82b270cf2bda386da6f8aaf06d0  gcc/testsuite/gcc.dg/vect/vect-26.c
+ 0697de81ac26ce20c343a8cd849b55b9  gcc/testsuite/gcc.dg/vect/vect-27.c
+ 5f2aff40d83b9da47254c78c54289609  gcc/testsuite/gcc.dg/vect/vect-28.c
+ 7541f3401f43175556b2e5ddc224a4ff  gcc/testsuite/gcc.dg/vect/vect-29.c
+ 8e9c1f9eaeb44fae79fc6d9cf4a0b9b6  gcc/testsuite/gcc.dg/vect/vect-3.c
+ a2ce7df0032267e67e76f30f11632ffd  gcc/testsuite/gcc.dg/vect/vect-30.c
+ c3de7556c39353e26babe6470ad15591  gcc/testsuite/gcc.dg/vect/vect-31.c
+ c6fec3b3f10e0bfff7ce313e952d64c1  gcc/testsuite/gcc.dg/vect/vect-32.c
+ 3df22000f831ff7f871f84ac57d42359  gcc/testsuite/gcc.dg/vect/vect-33.c
+ f49f6794c4c510a1e8ff8c2742ddfe47  gcc/testsuite/gcc.dg/vect/vect-34.c
+ fbe3c19822f0034a4d8571660b9e1942  gcc/testsuite/gcc.dg/vect/vect-35.c
+ d9a9f99ac51f2cdbe58402773ed92596  gcc/testsuite/gcc.dg/vect/vect-36.c
+ 4ad0a6c075b77682451ba81be9a4858f  gcc/testsuite/gcc.dg/vect/vect-37.c
+ bf6b858a573c62d7133096b5e9815fdf  gcc/testsuite/gcc.dg/vect/vect-38.c
+ 1fe40801c3ab3170459a4b976a5df092  gcc/testsuite/gcc.dg/vect/vect-4.c
+ 0cc1f4a664863a3a34f1b6090e02ceff  gcc/testsuite/gcc.dg/vect/vect-40.c
+ 321d9f1876d7055b79daae9c27770870  gcc/testsuite/gcc.dg/vect/vect-41.c
+ db281fadb5ca77b86d89156775013357  gcc/testsuite/gcc.dg/vect/vect-42.c
+ 1dc59c2aaa3bf836e03703e23693bf8a  gcc/testsuite/gcc.dg/vect/vect-43.c
+ 9da59bddd5695d8d1d0157b8cdc137ed  gcc/testsuite/gcc.dg/vect/vect-44.c
+ 7a8a68be2fdef6415f642c3c70f4b946  gcc/testsuite/gcc.dg/vect/vect-45.c
+ 10b25e362e937856d310e125d232dcb2  gcc/testsuite/gcc.dg/vect/vect-46.c
+ 57255ccdf12954cfe18749746e6eb598  gcc/testsuite/gcc.dg/vect/vect-47.c
+ 0ab12480c3db7a78f6aebd2f8ccb1ae0  gcc/testsuite/gcc.dg/vect/vect-48.c
+ 0048094d7270c25f82d274a107b9a599  gcc/testsuite/gcc.dg/vect/vect-49.c
+ b8608ba5d7136abc0ad2eb9532f84082  gcc/testsuite/gcc.dg/vect/vect-5.c
+ 3ab647977c9f1fb7a87c3f7c5ab6dfd3  gcc/testsuite/gcc.dg/vect/vect-50.c
+ cfd6ec3f86c231125a21c6cb1597e494  gcc/testsuite/gcc.dg/vect/vect-51.c
+ bb9a4a4f0657a56f95cba2d694e0fde8  gcc/testsuite/gcc.dg/vect/vect-52.c
+ 0d9801c4aa307c4dc428494a9ce38313  gcc/testsuite/gcc.dg/vect/vect-53.c
+ d590a705633ad5fce83614969140d178  gcc/testsuite/gcc.dg/vect/vect-54.c
+ ab55b1e63f5ab2b2b0ced787544ada48  gcc/testsuite/gcc.dg/vect/vect-55.c
+ c2f6c9462301e94c36109544aabb690f  gcc/testsuite/gcc.dg/vect/vect-56.c
+ 7f6f5461c01f4b85bdfe6d4cfc9f658f  gcc/testsuite/gcc.dg/vect/vect-57.c
+ e5e3d388552555aa8c5eca2c2698b8b5  gcc/testsuite/gcc.dg/vect/vect-58.c
+ 05253e9f740e237faf35a5a6df411992  gcc/testsuite/gcc.dg/vect/vect-59.c
+ a0120f48f4f0895e1e35fec2cb7f5292  gcc/testsuite/gcc.dg/vect/vect-6.c
+ fca7b6e5f106683c7bb357db7e7a84da  gcc/testsuite/gcc.dg/vect/vect-60.c
+ 9deb4fcc8459b752ad0e40bcfb59191c  gcc/testsuite/gcc.dg/vect/vect-61.c
+ 4150ae40bedeaf1394d889a0cf19f06b  gcc/testsuite/gcc.dg/vect/vect-62.c
+ c72b3cd401ccbf6093b7f44a672318b6  gcc/testsuite/gcc.dg/vect/vect-63.c
+ bb573d8cbb2f35604ab00aa3e338e6dd  gcc/testsuite/gcc.dg/vect/vect-64.c
+ 9f4b4d2a160332a3434418baf7aa85ab  gcc/testsuite/gcc.dg/vect/vect-65.c
+ a7edf5cbd8d598e5553377ca19c23ce9  gcc/testsuite/gcc.dg/vect/vect-66.c
+ 46a7145406329c29f168b56c005b6891  gcc/testsuite/gcc.dg/vect/vect-67.c
+ 7d6b3f7101629a64735a0a0605a17dd8  gcc/testsuite/gcc.dg/vect/vect-68.c
+ abf7b7a96220f428c9b017bc243c17e2  gcc/testsuite/gcc.dg/vect/vect-69.c
+ c969e8210f9de27b61a1b23c438766c7  gcc/testsuite/gcc.dg/vect/vect-7.c
+ 38fe6406af6bd490d812ad10e78f4e24  gcc/testsuite/gcc.dg/vect/vect-70.c
+ 8e98403305e9e4d4c0af9f5a9ebb8d9c  gcc/testsuite/gcc.dg/vect/vect-71.c
+ fa60146c65642c3d9a06a0e94bffde35  gcc/testsuite/gcc.dg/vect/vect-72.c
+ 8112cd8ccfc477f3cf1762e0306cd940  gcc/testsuite/gcc.dg/vect/vect-73.c
+ beac2ca997ed8da1c26756fc830ed7a7  gcc/testsuite/gcc.dg/vect/vect-74.c
+ 2292dfd54d680706dc872a27c0dd67d0  gcc/testsuite/gcc.dg/vect/vect-75.c
+ dc7ae7bb701f43e5261f8b3357eac6d9  gcc/testsuite/gcc.dg/vect/vect-76.c
+ 05603fa96d4a510dad51501251fa6de3  gcc/testsuite/gcc.dg/vect/vect-77.c
+ e8a83a144054954601b086ff6eafb494  gcc/testsuite/gcc.dg/vect/vect-78.c
+ a68200f47d5d919786159674bd3bec9f  gcc/testsuite/gcc.dg/vect/vect-79.c
+ 5f9fd8694d97c9b785b48f0f15b1b218  gcc/testsuite/gcc.dg/vect/vect-8.c
+ 0d57137a95ccf9eda8da348c46de1e74  gcc/testsuite/gcc.dg/vect/vect-80.c
+ ae813ba854011a07e969347be60d0e95  gcc/testsuite/gcc.dg/vect/vect-82.c
+ 58647342c0d27bf56ba013d7d0546e6b  gcc/testsuite/gcc.dg/vect/vect-82_64.c
+ 079af77b7c541947308b41a2fc75fdec  gcc/testsuite/gcc.dg/vect/vect-83.c
+ 0641ea15fd76405216fb77d360a38a8e  gcc/testsuite/gcc.dg/vect/vect-83_64.c
+ 5c441a785ea252a9dab428426f09dd14  gcc/testsuite/gcc.dg/vect/vect-85.c
+ fc685363d0cedc8ba955d196c2d1b260  gcc/testsuite/gcc.dg/vect/vect-86.c
+ 54613c6e5743d5ba3e904e715b42a693  gcc/testsuite/gcc.dg/vect/vect-87.c
+ 23d49cb0fe45e3717066aecacf75ecad  gcc/testsuite/gcc.dg/vect/vect-88.c
+ 85b821cc8cf74b0a15c81fed02845ce6  gcc/testsuite/gcc.dg/vect/vect-89.c
+ 3c2f4210811b7f838ad653fe4efcb3bc  gcc/testsuite/gcc.dg/vect/vect-9.c
+ 5255626bbd9c5f86510ba97aa7351bbc  gcc/testsuite/gcc.dg/vect/vect-96.c
+ c6147aa8e2223be00e47fb616f39295f  gcc/testsuite/gcc.dg/vect/vect-97.c
+ 264c98a8ff447f94e131ba60f5f2c137  gcc/testsuite/gcc.dg/vect/vect-98.c
+ a0429866b04d0336b7297e0ca244f06c  gcc/testsuite/gcc.dg/vect/vect-all.c
+ a6f1c109d679a529b917d722cae271fb  gcc/testsuite/gcc.dg/vect/vect-none.c
+ d80a69a8c2e97e956d7fc83218abcdad  gcc/testsuite/gcc.dg/vect/vect.exp
  682b52464ba3c1efc4293e4f2d4ba5b7  gcc/testsuite/gcc.dg/verbose-asm.c
! 041fff4d324fc530a54c5034fa50048f  gcc/testsuite/gcc.dg/visibility-1.c
! ef79ece01e8a70a1ed6b1875bd44c735  gcc/testsuite/gcc.dg/visibility-10.c
! f83d2db3e2fd97e87230a5d9dd1274b9  gcc/testsuite/gcc.dg/visibility-2.c
! d0a344fbd6e7158b3bf4cdbb4440ef36  gcc/testsuite/gcc.dg/visibility-3.c
! 8d7d13e33f78b22dd6e7c886111a31ad  gcc/testsuite/gcc.dg/visibility-4.c
! cb462f8cad9af2ba031a048a738146ab  gcc/testsuite/gcc.dg/visibility-5.c
! 147b78d13d96bd122217cc7a7704e034  gcc/testsuite/gcc.dg/visibility-6.c
! 621473c6babe1d4196e56996f891a9f5  gcc/testsuite/gcc.dg/visibility-7.c
! cef7070b381518da6b1a5af1d304f9f6  gcc/testsuite/gcc.dg/visibility-8.c
! 46f7dd2712bb1971f3b98617e80ed59c  gcc/testsuite/gcc.dg/visibility-9.c
! 51bd3363341ceb4e539e21557ec163d2  gcc/testsuite/gcc.dg/visibility-a.c
! 65032f980ed26d35986016868f58f5fb  gcc/testsuite/gcc.dg/visibility-b.c
! 3914edf5bc61ae4a7f8bfe7daf7a917f  gcc/testsuite/gcc.dg/visibility-c.c
  3e1ba4e8c65af4f1d7b139f51191b956  gcc/testsuite/gcc.dg/vla-2.c
  7c812137a18ff02eb065abda9d45bbc7  gcc/testsuite/gcc.dg/vla-init-1.c
+ 80fe460c89ffcc81ec4a08aa58703d31  gcc/testsuite/gcc.dg/vla-init-2.c
+ 8dcc8950ddefc43ecaa94bbb7fc1982b  gcc/testsuite/gcc.dg/vla-init-3.c
+ 79c9c6858e044eeb8a60c48941b3a878  gcc/testsuite/gcc.dg/vla-init-4.c
+ dc87c3c713c2d659c7135761a20ed264  gcc/testsuite/gcc.dg/vla-init-5.c
+ 80606b08f127050a28dd9907d5217db0  gcc/testsuite/gcc.dg/vmx/1b-01.c
+ 192ca75d85cf89c0dbaa4e9b66bf8ce1  gcc/testsuite/gcc.dg/vmx/1b-02.c
+ 26ad98ef01158cbabae0393a498f540a  gcc/testsuite/gcc.dg/vmx/1b-03.c
+ 92fc844b0c5fbf4c91cfa9ad95739140  gcc/testsuite/gcc.dg/vmx/1b-04.c
+ 622b84ddabb59da4030ab22e23d24c68  gcc/testsuite/gcc.dg/vmx/1b-05.c
+ eb35cda2c1df4435f097daf906ac358f  gcc/testsuite/gcc.dg/vmx/1b-06.c
+ 5deb4249e85aee9653c8a446dc43172b  gcc/testsuite/gcc.dg/vmx/1b-07.c
+ c500a294044ecdc6c84585cd1abc334f  gcc/testsuite/gcc.dg/vmx/1c-01.c
+ 8800c912bcd94cfd766197d903b30d29  gcc/testsuite/gcc.dg/vmx/1c-02.c
+ f1cec551bfd51c4088a90c604a5e2aa9  gcc/testsuite/gcc.dg/vmx/3a-01.c
+ eb61fd46343542ce5c312eefba8137e5  gcc/testsuite/gcc.dg/vmx/3a-01a.c
+ ec174f7b4a368fe0e1e814036b02826c  gcc/testsuite/gcc.dg/vmx/3a-01m.c
+ d86c9fd2b8c8fe353c08b51f6e39e092  gcc/testsuite/gcc.dg/vmx/3a-03.c
+ dce24919e8f35916b66033ff13d8364f  gcc/testsuite/gcc.dg/vmx/3a-03m.c
+ ff583278b1bd7cec8e8e7201d7c03542  gcc/testsuite/gcc.dg/vmx/3a-04.c
+ 33f15318e7714ce4ff10bdd41c3f9221  gcc/testsuite/gcc.dg/vmx/3a-04m.c
+ addd3f90cd8542986018c1a5c3108d5c  gcc/testsuite/gcc.dg/vmx/3a-05.c
+ d84628dbc3760d8d2689a88fb5bc49a4  gcc/testsuite/gcc.dg/vmx/3a-06.c
+ 9ec5f5461bb5f0e96347adc949940539  gcc/testsuite/gcc.dg/vmx/3a-06m.c
+ a9102ea644c7f407f72337af56798203  gcc/testsuite/gcc.dg/vmx/3a-07.c
+ 1c5011c352758e65dfcc8247417e4497  gcc/testsuite/gcc.dg/vmx/3b-01.c
+ cdc52233bcfdb3c1315527ff3a34058f  gcc/testsuite/gcc.dg/vmx/3b-02.c
+ 578864a8d8a4de4c3c539eee8afc2c08  gcc/testsuite/gcc.dg/vmx/3b-10.c
+ 2971619f919e665387e65d844a68a28c  gcc/testsuite/gcc.dg/vmx/3b-13.c
+ fe164483f1db6bca90f60c0cfbd085e1  gcc/testsuite/gcc.dg/vmx/3b-14.c
+ af4366a6a95b2e8fb4fa1a6d2add147b  gcc/testsuite/gcc.dg/vmx/3b-15.c
+ 383ccc86909019120e12ae324e71021b  gcc/testsuite/gcc.dg/vmx/3c-01.c
+ 7afa26a62c8981b35d4542cb4e998d1e  gcc/testsuite/gcc.dg/vmx/3c-01a.c
+ ecb037b2b05afd3ca53fcd94acccb6a8  gcc/testsuite/gcc.dg/vmx/3c-02.c
+ 2cd26c833315ed8ac36e8334ff76bb39  gcc/testsuite/gcc.dg/vmx/3c-03.c
+ eb77d0b23a8a654cb41186c1e9a3ca67  gcc/testsuite/gcc.dg/vmx/3d-01.c
+ 1e5a6563cbc4b17dcbb8e8342411719d  gcc/testsuite/gcc.dg/vmx/4-01.c
+ 8a88a8e1f3fe5d1386e25b0e2f03310a  gcc/testsuite/gcc.dg/vmx/4-03.c
+ 0272c3264a031bdc128f29ffa12bc33b  gcc/testsuite/gcc.dg/vmx/5-01.c
+ 93696cf695994d4dd4d3e5c7468a43e6  gcc/testsuite/gcc.dg/vmx/5-02.c
+ a57923102fac08927896b89ade0a81a1  gcc/testsuite/gcc.dg/vmx/5-03.c
+ cd6e44ab53f62be844c09fb6d8ae9559  gcc/testsuite/gcc.dg/vmx/5-04.c
+ 240e016dada632ceb7cf83927ffb1c9a  gcc/testsuite/gcc.dg/vmx/5-07t.c
+ 20417a0c21b7aae8f7b0e81f7a953039  gcc/testsuite/gcc.dg/vmx/5-10.c
+ c009aa8d915116e4437e9873ff6c54d8  gcc/testsuite/gcc.dg/vmx/5-11.c
+ 6b47e186bc1cba5cffedbcf60fdb2292  gcc/testsuite/gcc.dg/vmx/7-01.c
+ edc31e0e1c20b817a5960fba6c395259  gcc/testsuite/gcc.dg/vmx/7-01a.c
+ e393cfdb1e089278ef610185a2da6dc3  gcc/testsuite/gcc.dg/vmx/7c-01.c
+ 560583423014e726a6fc5ffee7f75841  gcc/testsuite/gcc.dg/vmx/7d-01.c
+ 398b6fe11e0d3475682286aa14af827b  gcc/testsuite/gcc.dg/vmx/7d-02.c
+ 5278946e9c0621845feae3b2b53f7303  gcc/testsuite/gcc.dg/vmx/8-01.c
+ 40eb7079d580d4dc9c61b6705221128c  gcc/testsuite/gcc.dg/vmx/8-02.c
+ 092f656c4b46b5bb3ab1039888d00531  gcc/testsuite/gcc.dg/vmx/8-02a.c
+ 0d0ad2dfee197e75d4c9d234a8d9724e  gcc/testsuite/gcc.dg/vmx/brode-1.c
+ 20df42ce4e974bdf3bb017b388181165  gcc/testsuite/gcc.dg/vmx/bug-1.c
+ 553f83082b649996d0c9290b6632094d  gcc/testsuite/gcc.dg/vmx/bug-2.c
+ bd356b20785788f8ef87bb85fb3a03f8  gcc/testsuite/gcc.dg/vmx/bug-3.c
+ ad2bfae3fab93dce4ba17bed91306433  gcc/testsuite/gcc.dg/vmx/cw-bug-1.c
+ 7c0263bd8012d8f03f5b9ee533166993  gcc/testsuite/gcc.dg/vmx/cw-bug-3.c
+ d5177fb0ba2fbd30b4ba2b15ec33fbdf  gcc/testsuite/gcc.dg/vmx/dct.c
+ 96a1db8301f72888248cac9ed1d565ab  gcc/testsuite/gcc.dg/vmx/debug-1.c
+ f7c4950997d941571fd2d72291a1242c  gcc/testsuite/gcc.dg/vmx/debug-2.c
+ 721886792e271f47a47de3feca8154ea  gcc/testsuite/gcc.dg/vmx/debug-3.c
+ d2800ec511e2b3478d695416e2ca90ec  gcc/testsuite/gcc.dg/vmx/debug-4.c
+ a618f16e3af202f712d6cfc127c0f51d  gcc/testsuite/gcc.dg/vmx/dos-bug-1-gdb.c
+ 8c31a6e12629208ece747c6627759e50  gcc/testsuite/gcc.dg/vmx/dos-bug-2-gdb.c
+ f79094cee7c097564ab800e96700ebe8  gcc/testsuite/gcc.dg/vmx/eg-5.c
+ 43079faac406fa6c19965bd7b5ffd05f  gcc/testsuite/gcc.dg/vmx/fft.c
+ 8322a206fa7dd30b037ad95c67279f6e  gcc/testsuite/gcc.dg/vmx/gcc-bug-1.c
+ a71e00a8c42763e79d9233af60eec0cf  gcc/testsuite/gcc.dg/vmx/gcc-bug-2.c
+ 02c18bdf16e4fa783165dc04f8583dc6  gcc/testsuite/gcc.dg/vmx/gcc-bug-3.c
+ eb199a6fe7f7647a9b37cce7adc6d831  gcc/testsuite/gcc.dg/vmx/gcc-bug-4.c
+ 41426074a262b1b5e3c0aa2032a32dac  gcc/testsuite/gcc.dg/vmx/gcc-bug-5.c
+ 0914dbc38196be861994bf154f4d5248  gcc/testsuite/gcc.dg/vmx/gcc-bug-6.c
+ ff39ff53d118c54bb04ba09c405a1a1a  gcc/testsuite/gcc.dg/vmx/gcc-bug-7.c
+ 91ab1e8548f4789ed4f3f4d39c13d70b  gcc/testsuite/gcc.dg/vmx/gcc-bug-8.c
+ 09355f7c5ca5be49851b8cc198ffec5f  gcc/testsuite/gcc.dg/vmx/gcc-bug-9.c
+ 9ec338659c443d056fa6cbc11743cfab  gcc/testsuite/gcc.dg/vmx/gcc-bug-b.c
+ b2b6feca94837f5cb8c691c4060fef16  gcc/testsuite/gcc.dg/vmx/gcc-bug-c.c
+ 7f4902b71cf73c7bd3b65eb7e8a7bab1  gcc/testsuite/gcc.dg/vmx/gcc-bug-d.c
+ 641cf884651e0adb1dee027edec6e229  gcc/testsuite/gcc.dg/vmx/gcc-bug-e.c
+ 4fe15b25479c09555ed8eef540fe4fe6  gcc/testsuite/gcc.dg/vmx/gcc-bug-f.c
+ 2e93eb6cb35666f7b5d487045924c050  gcc/testsuite/gcc.dg/vmx/gcc-bug-g.c
+ 1b81d747d85e0a123a16537aac9b9b18  gcc/testsuite/gcc.dg/vmx/gcc-bug-i.c
+ abaa24fa7500a965c56cca5b81277f0f  gcc/testsuite/gcc.dg/vmx/harness.h
+ d3b05480227b07877585af8d0a518ce0  gcc/testsuite/gcc.dg/vmx/ira1.c
+ 30bcd6f60465176cca2c3074c112b5d6  gcc/testsuite/gcc.dg/vmx/ira2.c
+ 0671a52dbfeaff599fbd3b31683b8fa3  gcc/testsuite/gcc.dg/vmx/ira2a.c
+ e7bfe6764f1081cf12917fc6bb429d99  gcc/testsuite/gcc.dg/vmx/ira2b.c
+ b79fe506ab529c34a54312a7e9e864cf  gcc/testsuite/gcc.dg/vmx/ira2c.c
+ 02e4a282249f914f0c14a216ba9d4cfc  gcc/testsuite/gcc.dg/vmx/mem.c
+ b3442dce1a513e0fadd3087959cc98e2  gcc/testsuite/gcc.dg/vmx/newton-1.c
+ 807f04667fc7f568229453e9ea808b2e  gcc/testsuite/gcc.dg/vmx/ops-long-1.c
+ 0ece5b66996a21bf2abdeba3d4730225  gcc/testsuite/gcc.dg/vmx/ops-long-2.c
+ e48979537730ba12b1183393f8332f5d  gcc/testsuite/gcc.dg/vmx/ops.c
+ b6c968a4a2a4da000763558515282905  gcc/testsuite/gcc.dg/vmx/sn7153.c
+ a6cbfa0e1febdc24c55462118baed2d9  gcc/testsuite/gcc.dg/vmx/spill.c
+ a89c7a49191b8c215d45bfcd40dbf073  gcc/testsuite/gcc.dg/vmx/spill2.c
+ 4ad67e9b592e66eb6b2836bd582e41ea  gcc/testsuite/gcc.dg/vmx/spill3.c
+ b74b4229263d70abbf112c2c622f29ba  gcc/testsuite/gcc.dg/vmx/t.c
+ 478b33172a099319d7c94edd5aee496a  gcc/testsuite/gcc.dg/vmx/varargs-1.c
+ 15ebdb6bd2f562d6d29fd6dcfabbef19  gcc/testsuite/gcc.dg/vmx/varargs-2.c
+ 882296448ff1569550d5cc0fbbffd7cb  gcc/testsuite/gcc.dg/vmx/varargs-3.c
+ 85dd99be8c8600253b6299684e997376  gcc/testsuite/gcc.dg/vmx/varargs-4.c
+ 3b83b84983785b62d2f5d8f3e3a9e4a0  gcc/testsuite/gcc.dg/vmx/varargs-5.c
+ 5cc01078c1f3f451644a44dfdc807444  gcc/testsuite/gcc.dg/vmx/varargs-6.c
+ 441584a435c20e33e9ba2840da79de7b  gcc/testsuite/gcc.dg/vmx/varargs-7.c
+ d52a83e69106c128dc7d96969c6c65ed  gcc/testsuite/gcc.dg/vmx/vmx.exp
+ 0e39fb03e625fd0928ac3568284946cb  gcc/testsuite/gcc.dg/vmx/x-01.c
+ 780491d8a6964b34313eb871098c1ec6  gcc/testsuite/gcc.dg/vmx/x-02.c
+ ff3cd9551d1dd9b4583c366dae3bac4e  gcc/testsuite/gcc.dg/vmx/x-03.c
+ d1ad2276edee36482f69b09d7e5c40fd  gcc/testsuite/gcc.dg/vmx/x-04.c
+ d34d9a25e91d2d4bb494a6f02be1b603  gcc/testsuite/gcc.dg/vmx/x-05.c
+ fb9582c8cf07bf7665d86c3df27116e5  gcc/testsuite/gcc.dg/vmx/yousufi-1.c
+ bdd1a601f9449392f98b0ebaaf3de918  gcc/testsuite/gcc.dg/vmx/zero-1.c
+ a839e38d5fdcecdad410c10f0712349f  gcc/testsuite/gcc.dg/vmx/zero.c
  4f86f41367e187a8eaafc00476f3e985  gcc/testsuite/gcc.dg/volatile1.c
! 96dc67a9f7700adcc8c8ed2470e1e011  gcc/testsuite/gcc.dg/vr-mult-1.c
! 5679a348183319d7b643f0d8dd78bfda  gcc/testsuite/gcc.dg/vr-mult-2.c
! 4aa02781167f1251520d288681a4b02d  gcc/testsuite/gcc.dg/warn-1.c
! 06467199d10c768530ff05eb6bc16fb8  gcc/testsuite/gcc.dg/wcaselabel-1.c
! d91e023a81202843f93ef98d9386955f  gcc/testsuite/gcc.dg/wchar_t-1.c
! f2cc2a4270e9964959b2a5f3df5cdaae  gcc/testsuite/gcc.dg/wchar_t-2.c
! e18fb97d5f78944d15f33e30e8975e64  gcc/testsuite/gcc.dg/weak/typeof-2.c
  986c02c7e51f343e3970338f5a1ba853  gcc/testsuite/gcc.dg/weak/weak-1.c
+ 5b030d8bcb22dedd984e8d8dae17cfb6  gcc/testsuite/gcc.dg/weak/weak-10.c
+ 121bd4b7463864effe08a934bc490b0d  gcc/testsuite/gcc.dg/weak/weak-11.c
+ 64a74c79e46532418d1a7abe90d28930  gcc/testsuite/gcc.dg/weak/weak-12.c
  3662d1fbfdd56e6dd5a87baf8c78410f  gcc/testsuite/gcc.dg/weak/weak-2.c
! cfefa8846a8d94d0e3aa00b841802592  gcc/testsuite/gcc.dg/weak/weak-3.c
  66df7ede09b74690c141035924b813ec  gcc/testsuite/gcc.dg/weak/weak-4.c
! e635c2089c58720a27dfd31bf12116f7  gcc/testsuite/gcc.dg/weak/weak-5.c
  1185edfd59a6e76ae0b3f3616496bd78  gcc/testsuite/gcc.dg/weak/weak-6.c
  05583da12dddd7c57c3404af50dd5d54  gcc/testsuite/gcc.dg/weak/weak-7.c
  ef4ea7d4216e9123244c1d14e75ca376  gcc/testsuite/gcc.dg/weak/weak-8.c
! df7f481c6f796831760bd5209df6243d  gcc/testsuite/gcc.dg/weak/weak-9.c
  94b7a601a303161ded0090240f9af5b0  gcc/testsuite/gcc.dg/weak/weak.exp
  c6a61511e6fb0917ffba55a76df61339  gcc/testsuite/gcc.dg/winline-1.c
  6b68673ca9f7b446eab731a341c42c55  gcc/testsuite/gcc.dg/winline-2.c
  3725591cf700cdfcc1a553e59f6b23d1  gcc/testsuite/gcc.dg/winline-3.c
  154eb8683c7b5d706865008188d0d8ff  gcc/testsuite/gcc.dg/winline-4.c
  5daeb2f9d0fe25622fc79f2a66319731  gcc/testsuite/gcc.dg/winline-5.c
! edad680a4d1d5df67f239a8b93dd3820  gcc/testsuite/gcc.dg/winline-6.c
! 410083c8e67c171ce7642f21c1ff2c4e  gcc/testsuite/gcc.dg/winline-7.c
! 49cd32efb1d04d4b3e2e3e83ef6be23f  gcc/testsuite/gcc.dg/wint_t-1.c
  0608c380e23cc21f1a8c8141d8def366  gcc/testsuite/gcc.dg/wtr-aggr-init-1.c
! cd2459b5e3ea70a873f313b6f43bcbf3  gcc/testsuite/gcc.dg/wtr-conversion-1.c
  81ce4be5f048dad36a72f1239e0b064c  gcc/testsuite/gcc.dg/wtr-escape-1.c
  1b5b3a77536ffa4a0135ceedd06b2bd0  gcc/testsuite/gcc.dg/wtr-func-def-1.c
  653c823985dcf3e0a7f9a3af52451671  gcc/testsuite/gcc.dg/wtr-int-type-1.c
*************** fde5cbed4304481836e4888bd782a081  gcc/te
*** 15795,15818 ****
  74a5f44fe667a8b7a06e2c1ec2083029  gcc/testsuite/gcc.dg/wtr-union-init-3.c
  4e040b1868690b5543136a52a2f030b3  gcc/testsuite/gcc.misc-tests/acker1.c
  d22b1881bd70e1dbe140f45207f8e8d5  gcc/testsuite/gcc.misc-tests/acker1.exp
! d1557f838b5b8675e90ac6ac4f8a6b33  gcc/testsuite/gcc.misc-tests/arm-isr.c
  961c2ebf194598f5452524ad661b213b  gcc/testsuite/gcc.misc-tests/arm-isr.exp
! 791730dc5a62adf17830ba90e4167c1b  gcc/testsuite/gcc.misc-tests/bprob-1.c
! 0b998a7ae9d02dbd7146a2b777d0a3fb  gcc/testsuite/gcc.misc-tests/bprob-2.c
! 105eba98011c4a0bba1c3dfd2945f1ae  gcc/testsuite/gcc.misc-tests/bprob.exp
! 1bc4f28dde75db6a2c26df821a01b014  gcc/testsuite/gcc.misc-tests/dg-1.c
! de07bca66ef10974b014af1e58de7006  gcc/testsuite/gcc.misc-tests/dg-10.c
! c3dcebd9004a535a2614c34197f32398  gcc/testsuite/gcc.misc-tests/dg-11.c
! 7858d07ce6d4ac67ca1622ce31c0d5ca  gcc/testsuite/gcc.misc-tests/dg-12.c
! ee8eaa8661fa92f09c9a73177b5b6ead  gcc/testsuite/gcc.misc-tests/dg-2.c
! b11f2edf1e11d1b7b43ad96efec7ca8b  gcc/testsuite/gcc.misc-tests/dg-3.c
! 21c67ddfb71c3fd6e8111381ba1d04f6  gcc/testsuite/gcc.misc-tests/dg-4.c
! 31b3f95897e43c7af6c251618d98c751  gcc/testsuite/gcc.misc-tests/dg-5.c
! a063657cc5cdaf8ef781179d076cd2a6  gcc/testsuite/gcc.misc-tests/dg-6.c
! 8458fd300377e32400618ac00b21a31f  gcc/testsuite/gcc.misc-tests/dg-7.c
! cf179dc8aa985a9ab0c47c351cc187fb  gcc/testsuite/gcc.misc-tests/dg-8.c
! 9454cc100d8bc212a68998fdfbc0ec5f  gcc/testsuite/gcc.misc-tests/dg-9.c
! 9a2b1f2a88e51659bdd2de794486cb12  gcc/testsuite/gcc.misc-tests/dg-test.exp
  a11bded9860644075434da1f07b7f1bf  gcc/testsuite/gcc.misc-tests/dhry.c
  5cc8d88bb6f9ac695f577b5739ca08f5  gcc/testsuite/gcc.misc-tests/dhry.exp
  850c45b3c3b492adf09b115c0d2d2286  gcc/testsuite/gcc.misc-tests/dhry.h
--- 17584,17594 ----
  74a5f44fe667a8b7a06e2c1ec2083029  gcc/testsuite/gcc.dg/wtr-union-init-3.c
  4e040b1868690b5543136a52a2f030b3  gcc/testsuite/gcc.misc-tests/acker1.c
  d22b1881bd70e1dbe140f45207f8e8d5  gcc/testsuite/gcc.misc-tests/acker1.exp
! 71d3ee0645552a8ac482152d2cf671b1  gcc/testsuite/gcc.misc-tests/arm-isr.c
  961c2ebf194598f5452524ad661b213b  gcc/testsuite/gcc.misc-tests/arm-isr.exp
! 69ee82e02b642cb6edfac2cec4b99756  gcc/testsuite/gcc.misc-tests/bprob-1.c
! f518f799be11856d2873be113760c75d  gcc/testsuite/gcc.misc-tests/bprob-2.c
! 2d19bafa11bb798d9a24aeac493c027c  gcc/testsuite/gcc.misc-tests/bprob.exp
  a11bded9860644075434da1f07b7f1bf  gcc/testsuite/gcc.misc-tests/dhry.c
  5cc8d88bb6f9ac695f577b5739ca08f5  gcc/testsuite/gcc.misc-tests/dhry.exp
  850c45b3c3b492adf09b115c0d2d2286  gcc/testsuite/gcc.misc-tests/dhry.h
*************** a11bded9860644075434da1f07b7f1bf  gcc/te
*** 15821,15843 ****
  c400cc0e03e4317110d582fdba04ace0  gcc/testsuite/gcc.misc-tests/gcov-10b.c
  0c8ac613f2d2a35706fd7c8b7b16a1a9  gcc/testsuite/gcc.misc-tests/gcov-11.c
  7a8ab4c1f62f1462575863cae613404b  gcc/testsuite/gcc.misc-tests/gcov-2.c
! 5c65166f616163d077c7937195dc9828  gcc/testsuite/gcc.misc-tests/gcov-3.c
! 70844f6f8e406fc43375c36a36cacd03  gcc/testsuite/gcc.misc-tests/gcov-4.c
! 51ac0f02a8a61b15418e68b9fa1103ff  gcc/testsuite/gcc.misc-tests/gcov-4b.c
  3de3228964abb899dfdf7f0613136f40  gcc/testsuite/gcc.misc-tests/gcov-5b.c
! 4398e045d23826c0a9694995d84e9493  gcc/testsuite/gcc.misc-tests/gcov-6.c
! d7dba8788b53ca9bb39bccaedf0b46ee  gcc/testsuite/gcc.misc-tests/gcov-7.c
  cd07c3504059efe7fb7533158e061864  gcc/testsuite/gcc.misc-tests/gcov-8.c
  c80d5a6473bfd6e4b6e87a183c6d05b5  gcc/testsuite/gcc.misc-tests/gcov-9.c
  528767d1dfb6076b3b815e25eb735017  gcc/testsuite/gcc.misc-tests/gcov.exp
! 800aca26ae22bd14674d12292508bc7c  gcc/testsuite/gcc.misc-tests/i386-pf-3dnow-1.c
! 1766f705d8a1e2efad365a71741e4015  gcc/testsuite/gcc.misc-tests/i386-pf-athlon-1.c
! eaafb68fc063213bbf5c2980cafa96c9  gcc/testsuite/gcc.misc-tests/i386-pf-none-1.c
! 11e99d690ce50cb97c6d2b3df27b88f7  gcc/testsuite/gcc.misc-tests/i386-pf-sse-1.c
  0194e6bb14bf45fd07a915d01df2f2dc  gcc/testsuite/gcc.misc-tests/i386-prefetch.exp
  51bca646196e93b1c8a68319441e0595  gcc/testsuite/gcc.misc-tests/linkage-x.c
  4020995d3b08e117c48c529d5bc0b3ec  gcc/testsuite/gcc.misc-tests/linkage-y.c
! a2ca848cc70b6bf9366ba1b49fd16fc0  gcc/testsuite/gcc.misc-tests/linkage.exp
  1d8fa0a1210ed4c4bf0ff4dfa959f060  gcc/testsuite/gcc.misc-tests/matrix1.c
  8c8ae1ae39b9d9f9b14da29fb0764cf6  gcc/testsuite/gcc.misc-tests/matrix1.exp
  fb7a4e029ce05eea8ba0f03f9033caa2  gcc/testsuite/gcc.misc-tests/mg.c
--- 17597,17619 ----
  c400cc0e03e4317110d582fdba04ace0  gcc/testsuite/gcc.misc-tests/gcov-10b.c
  0c8ac613f2d2a35706fd7c8b7b16a1a9  gcc/testsuite/gcc.misc-tests/gcov-11.c
  7a8ab4c1f62f1462575863cae613404b  gcc/testsuite/gcc.misc-tests/gcov-2.c
! 95f736db1045ebd2bcc69cdfad244b96  gcc/testsuite/gcc.misc-tests/gcov-3.c
! 7ee7fdf2863e181255489c48059d04a0  gcc/testsuite/gcc.misc-tests/gcov-4.c
! ea62a894945deb19187bf85649daea1d  gcc/testsuite/gcc.misc-tests/gcov-4b.c
  3de3228964abb899dfdf7f0613136f40  gcc/testsuite/gcc.misc-tests/gcov-5b.c
! 9f0a4f4ae87d9c8e7ee70f27c75d5114  gcc/testsuite/gcc.misc-tests/gcov-6.c
! 5324617bdeb58cd08b3e16f20f9e3c50  gcc/testsuite/gcc.misc-tests/gcov-7.c
  cd07c3504059efe7fb7533158e061864  gcc/testsuite/gcc.misc-tests/gcov-8.c
  c80d5a6473bfd6e4b6e87a183c6d05b5  gcc/testsuite/gcc.misc-tests/gcov-9.c
  528767d1dfb6076b3b815e25eb735017  gcc/testsuite/gcc.misc-tests/gcov.exp
! 485fadb316b6a700f50ceccc50665dd4  gcc/testsuite/gcc.misc-tests/i386-pf-3dnow-1.c
! 353571f7e7d28530b3c81f3d3c47224b  gcc/testsuite/gcc.misc-tests/i386-pf-athlon-1.c
! 06fe8065a97c8a40f1719ddc26543a35  gcc/testsuite/gcc.misc-tests/i386-pf-none-1.c
! b81b0f364ade60ae4b32a08dcfd8206d  gcc/testsuite/gcc.misc-tests/i386-pf-sse-1.c
  0194e6bb14bf45fd07a915d01df2f2dc  gcc/testsuite/gcc.misc-tests/i386-prefetch.exp
  51bca646196e93b1c8a68319441e0595  gcc/testsuite/gcc.misc-tests/linkage-x.c
  4020995d3b08e117c48c529d5bc0b3ec  gcc/testsuite/gcc.misc-tests/linkage-y.c
! 5768226681cf5fca241cbee678d353b8  gcc/testsuite/gcc.misc-tests/linkage.exp
  1d8fa0a1210ed4c4bf0ff4dfa959f060  gcc/testsuite/gcc.misc-tests/matrix1.c
  8c8ae1ae39b9d9f9b14da29fb0764cf6  gcc/testsuite/gcc.misc-tests/matrix1.exp
  fb7a4e029ce05eea8ba0f03f9033caa2  gcc/testsuite/gcc.misc-tests/mg.c
*************** fb7a4e029ce05eea8ba0f03f9033caa2  gcc/te
*** 15846,15967 ****
  56efd126c640aaf994bb8bd0aba157c1  gcc/testsuite/gcc.misc-tests/sieve.exp
  f0e0d52dbb689249f8d057f00e4c65e9  gcc/testsuite/gcc.misc-tests/sort2.c
  9da21bba807bde6e3f721c3b9368431b  gcc/testsuite/gcc.misc-tests/sort2.exp
! 076457547a143b90dec9b76a20a21a12  gcc/testsuite/lib/c-torture.exp
! 1774e6c9137139884c4ad26fc252579b  gcc/testsuite/lib/compat.exp
  d8270456fac4be6a3812490017727d4c  gcc/testsuite/lib/copy-file.exp
  54afae923e7da5a4d95b970aebc134ae  gcc/testsuite/lib/dg-pch.exp
! d23e1f76f8a4e60c92de5330ee62cf52  gcc/testsuite/lib/f-torture.exp
! bf25ffa80e888dc1a48b3ac507270afe  gcc/testsuite/lib/file-format.exp
  24a7ac64ddfadbdc83e2ce7f02173040  gcc/testsuite/lib/g++-dg.exp
! b4a2ec550e2f1e20eb3263b3e5acf769  gcc/testsuite/lib/g++.exp
! 31720af892e76668d26a1926512b6c0c  gcc/testsuite/lib/g77-dg.exp
! 7db0a56380c76cb4b6e6fa7154009ce7  gcc/testsuite/lib/g77.exp
! 9e4d6dce97f2e5a9582936c28e7d506f  gcc/testsuite/lib/gcc-defs.exp
! ae9276a9bf5d4c5b913409bab3254c60  gcc/testsuite/lib/gcc-dg.exp
! a1e1090a9166448c3aff1cafee4ccc27  gcc/testsuite/lib/gcc.exp
  400b24a52cc57f3f76abc7ff2aae506e  gcc/testsuite/lib/gcov.exp
  c0088686e90dd155a799d6b7f957cac3  gcc/testsuite/lib/mike-g++.exp
- 0daaf1809eb8fb6507454fa6b15e84d6  gcc/testsuite/lib/mike-g77.exp
  3daa2cd18809330c70d78e1a9fe5ca51  gcc/testsuite/lib/mike-gcc.exp
  9523d56141311736863ec362b5fc5659  gcc/testsuite/lib/objc-dg.exp
! c26bf60335c3e16bfe0ef32361ea91c9  gcc/testsuite/lib/objc-torture.exp
! a9e1c1fdb7c3ecac6b751c0c03dd7ae1  gcc/testsuite/lib/objc.exp
! d4b916ee3a4f2557728e0b094c686b36  gcc/testsuite/lib/profopt.exp
  e862e52b520aedebcd4f9c1f0be15d15  gcc/testsuite/lib/prune.exp
! bf7caf56fdd310c012fb421cfd53a38b  gcc/testsuite/lib/scanasm.exp
! c9a6741479c4bcd2e59cd141e90a824b  gcc/testsuite/lib/target-supports.exp
! 2e3562906552197f9267f261bfadda6e  gcc/testsuite/lib/treelang.exp
  3b8fd8c2ee22e0099d80e4fa89e2befc  gcc/testsuite/objc.dg/alias.m
  a1be9e5501b4997f5240469850890333  gcc/testsuite/objc.dg/anon-1.m
  78ba3f1e49ecbf82a9c24165dae0c507  gcc/testsuite/objc.dg/bitfield-1.m
! dcfd535d5a8c7083ad83d0301bb42b30  gcc/testsuite/objc.dg/bitfield-2.m
  1be372102b55990318c21d0b244f840b  gcc/testsuite/objc.dg/bitfield-3.m
! c2bbf7598ee40d22ddb4a245a74e9cb8  gcc/testsuite/objc.dg/bitfield-4.m
  1c24ac889eef3749cd9397383ac17ed3  gcc/testsuite/objc.dg/call-super-1.m
! f194e2bec6572d7b60eadd2c664fdb6c  gcc/testsuite/objc.dg/call-super-2.m
  cd83986f81e84d76c36942eb580590be  gcc/testsuite/objc.dg/call-super-3.m
  d631117350445f6fb36053f1c97b7cbf  gcc/testsuite/objc.dg/category-1.m
  e14f8ce7c1cf0a9aa852e809639149ff  gcc/testsuite/objc.dg/class-1.m
  d784ebcfd5db343ad8531e94a46f8eae  gcc/testsuite/objc.dg/class-2.m
  bd8e85515d3a7bdabefec148b5329b79  gcc/testsuite/objc.dg/comp-types-1.m
  c8326ae2bb2884e806cd4cc176d05d43  gcc/testsuite/objc.dg/comp-types-2.m
  7407b86bd67a0dd84bd0f73b4e4da009  gcc/testsuite/objc.dg/comp-types-3.m
  199316103e184c26eb6c15eedc25d23d  gcc/testsuite/objc.dg/comp-types-4.m
  83ab486d0cad3a10acc0c565219f027f  gcc/testsuite/objc.dg/comp-types-5.m
  934ee49848b122ad7a2a77355b260571  gcc/testsuite/objc.dg/comp-types-6.m
  7956ed2705023777b0d68e104790ebec  gcc/testsuite/objc.dg/const-str-1.m
  1ce94eed7fce057599c1e1a9456ba608  gcc/testsuite/objc.dg/const-str-2.m
! 36910aa096825b718b885451a0d676a1  gcc/testsuite/objc.dg/const-str-3.m
  1bcd6b46dbd2ac43660f1eb4cb5363ee  gcc/testsuite/objc.dg/const-str-4.m
  bbac855c2d8cf350ef4f369f315f1657  gcc/testsuite/objc.dg/const-str-5.m
  24a5bd21c3bb3a08c13834250039d746  gcc/testsuite/objc.dg/const-str-6.m
  2e14a155dd27e09e146716eaefa227d5  gcc/testsuite/objc.dg/defs.m
! cf8ebce74a65217b98fd1232488a6442  gcc/testsuite/objc.dg/desig-init-1.m
  d334afd3379dd7cf955835b80e3720df  gcc/testsuite/objc.dg/dg.exp
  a12565c5f06257f835c09c8bb6522085  gcc/testsuite/objc.dg/encode-1.m
  c12c0338abec7667befc0ff72f62f05c  gcc/testsuite/objc.dg/encode-2.m
  ca8454136d5c683a4dd611b9f0c2e1cb  gcc/testsuite/objc.dg/encode-3.m
  5e347f3323974b2009b0aeac1fd83a2e  gcc/testsuite/objc.dg/encode-4.m
  d87ff51e256fd6af045acce1094cbbfa  gcc/testsuite/objc.dg/fsyntax-only.m
  061d01fdea5bf45169a2c496a30f8ef4  gcc/testsuite/objc.dg/func-ptr-1.m
  d77ab725798547aaec5fe03dfdd02495  gcc/testsuite/objc.dg/fwd-proto-1.m
  eab1faf4c1cef2d8e28cb203efc366fc  gcc/testsuite/objc.dg/gnu-runtime-1.m
  e48888b66789fae4562e3b5eaf6c8c76  gcc/testsuite/objc.dg/headers.m
! 87c64a1062c79eb50a2e9ee00396f7ac  gcc/testsuite/objc.dg/id-1.m
! ecb40728f1b2c792cec0ed04fe57a4d8  gcc/testsuite/objc.dg/image-info.m
  ef027ba6682833a14c376b2fcb64444e  gcc/testsuite/objc.dg/local-decl-1.m
  685a6ee5e2f3b80ff14b507e3986b729  gcc/testsuite/objc.dg/method-1.m
  c45c97b76d675ea697b68fb9bd8ded2a  gcc/testsuite/objc.dg/method-10.m
  d7d1b004c64569190a3a6e3a1adcfe2a  gcc/testsuite/objc.dg/method-11.m
  956a4f445f1949a644580e9b460afe4b  gcc/testsuite/objc.dg/method-12.m
  c56d69a0a005d96f4238a4bc5908eb47  gcc/testsuite/objc.dg/method-13.m
  f00cd88add91ecc5ecc2a311e5080729  gcc/testsuite/objc.dg/method-2.m
  5b3115a64c7b7b3e18e5d5a8d232e96b  gcc/testsuite/objc.dg/method-3.m
  c1c6ac69f9fb8fa359b8781a4519a01a  gcc/testsuite/objc.dg/method-4.m
! e4a0f07e072d8f3f68ea06083ce8b45a  gcc/testsuite/objc.dg/method-5.m
! 64b46012458044dbaaa428318a4fca4b  gcc/testsuite/objc.dg/method-6.m
  2ebbeaa351d7d360e014d26057d3bf24  gcc/testsuite/objc.dg/method-7.m
  172164daa5b2292983d23e0e5d5a94eb  gcc/testsuite/objc.dg/method-8.m
! a33cfd27d0307afa038a614003ecc6bb  gcc/testsuite/objc.dg/method-9.m
  69bacf80761635c545d87c91cc287531  gcc/testsuite/objc.dg/missing-proto-1.m
  56651a021e1eb7eb1a267d430fca0f45  gcc/testsuite/objc.dg/missing-proto-2.m
  c265ca7405bca937bc031a0042311641  gcc/testsuite/objc.dg/missing-proto-3.m
! 3cd3bf37afa6852d3ff31ba7b5dbd76d  gcc/testsuite/objc.dg/naming-1.m
! 00598e70203d82bd63c8e395d310d1a7  gcc/testsuite/objc.dg/naming-2.m
! 876a9e0b3c0b8a682ad18caa43ab5b9c  gcc/testsuite/objc.dg/nested-func-1.m
  6eed5537eae24ed6634c3706c12f2114  gcc/testsuite/objc.dg/param-1.m
  bbb9e9964ba890fd063f19dd542cd683  gcc/testsuite/objc.dg/private-1.m
  fe3ca05ce80d57fadc06b2f9fe6b480c  gcc/testsuite/objc.dg/private-2.m
! b0d45eb2799a7728b4bd52bef1474713  gcc/testsuite/objc.dg/proto-hier-1.m
! ab6da0632b73d64a41209435d2442091  gcc/testsuite/objc.dg/proto-hier-2.m
! 63927a3a683558aca46d2479a4e58307  gcc/testsuite/objc.dg/proto-lossage-1.m
  f0b9884c1de6674b724f6ea9b7c54270  gcc/testsuite/objc.dg/proto-lossage-2.m
  4f83624cd4815311ebcf83e52d935a9b  gcc/testsuite/objc.dg/proto-lossage-3.m
! c15a7a27873a9bee6adc4332659376dc  gcc/testsuite/objc.dg/proto-qual-1.m
! 649736060cf332c4a592cf661af03037  gcc/testsuite/objc.dg/selector-1.m
  98f5fd366b95a44daadee7e065e871f8  gcc/testsuite/objc.dg/sizeof-1.m
  731907b262562fa92455a34aeb875bab  gcc/testsuite/objc.dg/special/special.exp
  975de79e3c4224535252732e8954b34d  gcc/testsuite/objc.dg/special/unclaimed-category-1.h
! 4954e53238a99a9ff3555ff9fa357955  gcc/testsuite/objc.dg/special/unclaimed-category-1.m
  048774d808e0fc9c9202fdcb3cfd7b06  gcc/testsuite/objc.dg/special/unclaimed-category-1a.m
  44c850eb724ab694c1eea579910821bd  gcc/testsuite/objc.dg/static-1.m
  918ac91df06a71b4b96b8d4f94b841d9  gcc/testsuite/objc.dg/stret-1.m
  b152871d70e8883099db0b461252034f  gcc/testsuite/objc.dg/stret-2.m
  7e68d7fe39ddc6065769f26089764fd6  gcc/testsuite/objc.dg/super-class-1.m
  60b26516b7ca4fb595e5b80262d80505  gcc/testsuite/objc.dg/super-class-2.m
  1d19ec2511cf554463b5ee8cb3b14e74  gcc/testsuite/objc.dg/symtab-1.m
! 7e176969575d5a2e522b27ef7dbf33e0  gcc/testsuite/objc.dg/try-catch-1.m
! 46049e74bdf4ad99fd214150e01c4aff  gcc/testsuite/objc.dg/try-catch-2.m
! da5701eb3c8cb2dcafa6b77be4fd58cc  gcc/testsuite/objc.dg/try-catch-3.m
! d9b025f308342d6f11c54ffcbe9f623a  gcc/testsuite/objc.dg/try-catch-4.m
  f9f85e9811b2bdca45b0f29f19a26002  gcc/testsuite/objc.dg/type-size-1.m
! b0a4f2cecb8086cae1ea92dabb5165bc  gcc/testsuite/objc.dg/type-size-2.m
  d2d07c2ebcb90350a34d2a0a2a215530  gcc/testsuite/objc.dg/undeclared-selector.m
  b57a70e439d632d14a0304bd8e072792  gcc/testsuite/objc.dg/zero-link-1.m
  dc152a112ab02327dad6ca23a9256151  gcc/testsuite/objc.dg/zero-link-2.m
  999202351e5d8f0921e297ed37e27905  gcc/testsuite/objc.dg/zero-link-3.m
  0d71c48c831bf5882b80c4cd6ca9d9d8  gcc/testsuite/objc/compile/20011211-1.m
  51bf9e3b71ed912bf46fc18bb78bc2aa  gcc/testsuite/objc/compile/compile.exp
  e3e4236a254b8433f0922e0210b7dfe8  gcc/testsuite/objc/execute/IMP.m
  8187b8b6a976d6234ab07f6ca61a3d77  gcc/testsuite/objc/execute/_cmd.m
  19c0cc9918dda6977e9d1f06cdfbbba1  gcc/testsuite/objc/execute/accessing_ivars.m
--- 17622,18594 ----
  56efd126c640aaf994bb8bd0aba157c1  gcc/testsuite/gcc.misc-tests/sieve.exp
  f0e0d52dbb689249f8d057f00e4c65e9  gcc/testsuite/gcc.misc-tests/sort2.c
  9da21bba807bde6e3f721c3b9368431b  gcc/testsuite/gcc.misc-tests/sort2.exp
! 2014a613cc45593f4cb86ab7c162861c  gcc/testsuite/gcc.target/alpha/alpha.exp
! fff402ffde26523392f70a76d0e2b789  gcc/testsuite/gcc.target/alpha/pr19518.c
! 690aefdb7e83ee1cdd46e97c7e836a69  gcc/testsuite/gcc.target/frv/all-accs-1.c
! c0c899f24ad2c8cded9eb768be028e70  gcc/testsuite/gcc.target/frv/all-mclracca-1.c
! 79a85d43df57eb30b9f06067b133e437  gcc/testsuite/gcc.target/frv/all-mdpackh-1.c
! 3fdc2543f4f94275f7348f51b96a108a  gcc/testsuite/gcc.target/frv/all-tls-global-dynamic.c
! c068ace31d06706ae394e43e9e52ec28  gcc/testsuite/gcc.target/frv/all-tls-initial-exec-pic.c
! 0a90bd3ba312653c28e69dc8e2149b81  gcc/testsuite/gcc.target/frv/all-tls-initial-exec.c
! c251da3e7a9b93c062a637fa8dbbe8f0  gcc/testsuite/gcc.target/frv/all-tls-local-dynamic-plt-pic.c
! 40f0f0b910a75a5a9d7eaed8d52618d3  gcc/testsuite/gcc.target/frv/all-tls-local-dynamic-plt.c
! b8ec4a7ea239cd46c0ad8f0066e50c65  gcc/testsuite/gcc.target/frv/all-tls-local-dynamic.c
! 6a90cfbdc4d68b6a96766f2381fe4657  gcc/testsuite/gcc.target/frv/all-tls-local-exec-TLS.c
! 1665b1f4b2ae3552086c2756f6078f7c  gcc/testsuite/gcc.target/frv/all-tls-local-exec.c
! 92ef29904a98fe1379c20b0bcfb1a8bb  gcc/testsuite/gcc.target/frv/fr400-builtins-1.c
! c3e1d6f90b22b679dbdf9658a04caff5  gcc/testsuite/gcc.target/frv/fr400-builtins-2.c
! c3a5fa5c03606ec16d9dd56e353a233b  gcc/testsuite/gcc.target/frv/fr405-builtins-1.c
! 182f0391f17b40a8b7deae41ae07de5a  gcc/testsuite/gcc.target/frv/fr405-builtins-2.c
! bc8c8d227a24b0954f42ed0f3ff9fa7d  gcc/testsuite/gcc.target/frv/fr405-builtins-3.c
! 112744f5294be46aa275098fbd41c2b2  gcc/testsuite/gcc.target/frv/fr450-builtins-1.c
! a6d61ff79e17ef448eedd08024b9cd9d  gcc/testsuite/gcc.target/frv/fr450-builtins-2.c
! 71b50c157d0232c563456442190e5e89  gcc/testsuite/gcc.target/frv/fr450-builtins-3.c
! 08a5a9e5cda9a45ee027f85d0bb235b8  gcc/testsuite/gcc.target/frv/fr450-builtins-4.c
! b6af6959d44dfe42345dacf4a6bb006a  gcc/testsuite/gcc.target/frv/fr450-builtins-5.c
! f3831c2d2cc94950e43c419702bd8452  gcc/testsuite/gcc.target/frv/fr450-builtins-6.c
! 787477343affd8895af0b36d69062181  gcc/testsuite/gcc.target/frv/fr450-builtins-7.c
! 8860a8b33be7ace5b6f7c516400ec260  gcc/testsuite/gcc.target/frv/fr450-builtins-8.c
! 29c3f3a8dfc79487aa516a22afe6e2b4  gcc/testsuite/gcc.target/frv/fr450-builtins-9.c
! 62d7c4943912eb2e5bf3b64bd84ddc48  gcc/testsuite/gcc.target/frv/fr550-builtins-1.c
! d7f2f60c2c464ec7133704d0b8deb86d  gcc/testsuite/gcc.target/frv/fr550-builtins-2.c
! 0bbd4283a697514ba60e495e007fbbaa  gcc/testsuite/gcc.target/frv/fr550-builtins-3.c
! d8fff2cc6bc3321095b7345915e98ec1  gcc/testsuite/gcc.target/frv/fr550-builtins-4.c
! 4f94aea2a37f6adad09abfdbb47bb87e  gcc/testsuite/gcc.target/frv/fr550-builtins-5.c
! 7639532da8cf32e8d2747a66977cd3a9  gcc/testsuite/gcc.target/frv/frv.exp
! 942931dae7a14d8fada085f1f9ea20b2  gcc/testsuite/gcc.target/i386/abi-1.c
! d5cdf0d4042e9eaf43c3e93573cbd144  gcc/testsuite/gcc.target/i386/amd64-abi-1.c
! bfbac75bbc2903bc9ce6d39c53d89c68  gcc/testsuite/gcc.target/i386/defines-1.c
! 73d516febd7b11c39305fc45aeb62e82  gcc/testsuite/gcc.target/i386/defines-2.c
! 225c98764bda53dfafaf1bcfbab24ded  gcc/testsuite/gcc.target/i386/i386.exp
! 8951a1fa31f2d45ef9eacfff6a733f77  gcc/testsuite/gcc.target/i386/pr13366.c
! adcdec8ed0466d3411f5313513271763  gcc/testsuite/gcc.target/i386/sse-1.c
! 845de8711de12ad1852cb72abde413c9  gcc/testsuite/gcc.target/i386/vect-args.c
! 67cadea614481e3b8f471a79cfec5f03  gcc/testsuite/gcc.target/ia64/ia64.exp
! 077bd168db3c45990d24d018d5e07d0d  gcc/testsuite/gcc.target/ia64/sibcall-unwind-1.c
! 5615b8122ed00d78fc52d2429980f925  gcc/testsuite/gcc.target/ia64/sibcall-unwind-2.c
! afe14f0027f407ae82783426fce57b95  gcc/testsuite/gcc.target/mips/asm-1.c
! dbe08ac33e751bd40a0688befe31a4fc  gcc/testsuite/gcc.target/mips/fix-vr4130-1.c
! e6e175488707fbe00f77246d1cce7ec5  gcc/testsuite/gcc.target/mips/fix-vr4130-2.c
! 493ae8ef45648fe3eee5a7236a370af0  gcc/testsuite/gcc.target/mips/fix-vr4130-3.c
! 2b09ef96aa493e19aaac166ef33745b9  gcc/testsuite/gcc.target/mips/fix-vr4130-4.c
! 9f2dee4d1162a25372e1ee3699095c47  gcc/testsuite/gcc.target/mips/mips-3d-1.c
! 2381cb59aca5746da749999e4ffd3037  gcc/testsuite/gcc.target/mips/mips-3d-2.c
! 6d7c149a5b22548da09312a669dcba81  gcc/testsuite/gcc.target/mips/mips-3d-3.c
! 11d20a2aea75055d35c396e96770d817  gcc/testsuite/gcc.target/mips/mips-3d-4.c
! 6cc424410060026dbc08c71c259c2730  gcc/testsuite/gcc.target/mips/mips-3d-5.c
! 72c19f015e4c7762dd12126279207725  gcc/testsuite/gcc.target/mips/mips-3d-6.c
! 00d5d6d9d8e03afa1100fb9e2513bfc5  gcc/testsuite/gcc.target/mips/mips-3d-7.c
! 5345a158d2a60c525ead1491c1d16a27  gcc/testsuite/gcc.target/mips/mips-3d-8.c
! 56a79e9628f31d55691c915cdccc9edd  gcc/testsuite/gcc.target/mips/mips-3d-9.c
! 43c535f6a823d294588c080f1d993e3d  gcc/testsuite/gcc.target/mips/mips-ps-1.c
! 75f9438336959f868b8bb7fd97dfeef0  gcc/testsuite/gcc.target/mips/mips-ps-2.c
! 23dfb169ebe36356667cc7806b07f995  gcc/testsuite/gcc.target/mips/mips-ps-3.c
! f6fb0c42ff3e8fa587ce359787ffa9e3  gcc/testsuite/gcc.target/mips/mips-ps-4.c
! 1a447da3bb67659a303881e1a619c9a6  gcc/testsuite/gcc.target/mips/mips-ps-type.c
! 5828ee9f8ec547ba2976efd4733d46a6  gcc/testsuite/gcc.target/mips/mips.exp
! 23adbd995594300dfe339b2fb4282ae4  gcc/testsuite/gcc.target/mips/sb1-1.c
! f94446d8f756e626b7ed117601c82b43  gcc/testsuite/gcc.target/sparc/align.c
! 61fdcc3e39deca7e4f123378b814dd0f  gcc/testsuite/gcc.target/sparc/combined-1.c
! 0d476e7d021a9af6de17c1d92c85244d  gcc/testsuite/gcc.target/sparc/combined-2.c
! 437746b3eaa2254a72a060b88e66b68b  gcc/testsuite/gcc.target/sparc/fand.c
! 8ea2f290b8d1bb372250ab75b13653b9  gcc/testsuite/gcc.target/sparc/fandnot.c
! 2bb72ee0cebaf90f38c9223a9d6ceda9  gcc/testsuite/gcc.target/sparc/fandnots.c
! ac06a3b7853caffeb81a94b6156bdbdd  gcc/testsuite/gcc.target/sparc/fands.c
! dea84c5b8bdad5da8766cf3cb31b888e  gcc/testsuite/gcc.target/sparc/fexpand.c
! 88a8d0fc7367ef87824161109ed38561  gcc/testsuite/gcc.target/sparc/fnand.c
! 74b749847de443914e900375206bfdc3  gcc/testsuite/gcc.target/sparc/fnands.c
! 92dece2e282ff04be270d515df959279  gcc/testsuite/gcc.target/sparc/fnot.c
! 6ce9e8041fea1630b96101e516505965  gcc/testsuite/gcc.target/sparc/fnots.c
! 8c31a22ace35a286666efefe759bb77d  gcc/testsuite/gcc.target/sparc/for.c
! 9f3522277695448d82dae195eeacfc18  gcc/testsuite/gcc.target/sparc/fornot.c
! e40168edaf36cb766ba3e9fa9f2df5d5  gcc/testsuite/gcc.target/sparc/fornots.c
! eace589e08194a9b4cb4cb369765cd04  gcc/testsuite/gcc.target/sparc/fors.c
! 3598fa497d111666a6f12d812441890f  gcc/testsuite/gcc.target/sparc/fpack16.c
! ec7f54e199f419ce31328339d2aa4803  gcc/testsuite/gcc.target/sparc/fpack32.c
! bb68d7c78b1cb44c467d50043aafb12c  gcc/testsuite/gcc.target/sparc/fpackfix.c
! 3a93765fd6d7405379be58d79a5fed10  gcc/testsuite/gcc.target/sparc/fpadd16.c
! 9529e4a39bae9620dc59004cb0ec4092  gcc/testsuite/gcc.target/sparc/fpadd16s.c
! 8a751f7cbad2b565d634914ca89a4551  gcc/testsuite/gcc.target/sparc/fpadd32.c
! 7efe7d6dfe46005ac34237aa9e3e023c  gcc/testsuite/gcc.target/sparc/fpadd32s.c
! 9ccf50046437def0babb8d5c95efcd88  gcc/testsuite/gcc.target/sparc/fpmerge.c
! fe5b0cd5973c6dc085abebd386625a64  gcc/testsuite/gcc.target/sparc/fpmul.c
! 1456dfe0241f0d964b7fc35ecedcd72e  gcc/testsuite/gcc.target/sparc/fpsub16.c
! 2f5594ce0d3bd671052c5b81dcb77df7  gcc/testsuite/gcc.target/sparc/fpsub16s.c
! 6e83e56e724cc8aa4d445fe1a6625975  gcc/testsuite/gcc.target/sparc/fpsub32.c
! 0882cc94ca45d8c30339169d1c900c8d  gcc/testsuite/gcc.target/sparc/fpsub32s.c
! ee302d993f68621386f88c2997835050  gcc/testsuite/gcc.target/sparc/fxnor.c
! 990393d30e644786d30c4af5253b1905  gcc/testsuite/gcc.target/sparc/fxnors.c
! 119856c33aa08ef8de392f6f67147c38  gcc/testsuite/gcc.target/sparc/fxor.c
! c18e0726af4158f9f944069a676b6c7f  gcc/testsuite/gcc.target/sparc/fxors.c
! 0e5130135e48573657f6f1f054ac8e81  gcc/testsuite/gcc.target/sparc/pdist.c
! ca61cca925c1134e859844049aaa94f1  gcc/testsuite/gcc.target/sparc/sparc.exp
! 915575c8ca5dab04f27a345a86fb9ba9  gcc/testsuite/gcc.target/xstormy16/below100.S
! 1594c5c73df84e3d3c12204103dd4c1f  gcc/testsuite/gcc.target/xstormy16/below100.ld
! 9f984f9d0cbb8c3563080f4e31e30e70  gcc/testsuite/gcc.target/xstormy16/below_100.c
! 2ee446cbd67587e6c1ca2cb957f4821e  gcc/testsuite/gcc.target/xstormy16/bp.c
! d23d4629b819870d834fe62c0ef9d758  gcc/testsuite/gcc.target/xstormy16/bss_below100/01_const_to_b100b.c
! 73b7052d5af3943d079a45c5876fdb86  gcc/testsuite/gcc.target/xstormy16/bss_below100/02_const_to_b100w.c
! 51649a9764d4fb9b9a82c7f06cc20a08  gcc/testsuite/gcc.target/xstormy16/bss_below100/03_var_to_b100b.c
! 35049f2b692e076b5711075c36457fea  gcc/testsuite/gcc.target/xstormy16/bss_below100/04_var_to_b100w.c
! 4eeb8a0758676d30f07babf4a6e31f41  gcc/testsuite/gcc.target/xstormy16/bss_below100/05_b100b_to_var.c
! 68204f6193d1a1f98a3cb1ea5c479598  gcc/testsuite/gcc.target/xstormy16/bss_below100/06_b100w_to_var.c
! f01b97ded5a7ecda27f3d09ef4f1ebb5  gcc/testsuite/gcc.target/xstormy16/bss_below100/10_set_b100b_bit_0.c
! e37c68778a249b0d55f9061b37da6df3  gcc/testsuite/gcc.target/xstormy16/bss_below100/10_set_b100b_bit_7.c
! 46615d0c00d4b4c44ee600abdf2ee4ae  gcc/testsuite/gcc.target/xstormy16/bss_below100/11_clr_b100b_bit_0.c
! e6120a8ab3d5e57e07990da2f91618d4  gcc/testsuite/gcc.target/xstormy16/bss_below100/11_clr_b100b_bit_7.c
! 3981c1a3e8daa4391276282e50874ae7  gcc/testsuite/gcc.target/xstormy16/bss_below100/12_if1_b100b_bit_0.c
! b76a11276e23d72c863bb35082bdaf43  gcc/testsuite/gcc.target/xstormy16/bss_below100/12_if1_b100b_bit_3.c
! ba143c5a680a45748e50c18392b9d47e  gcc/testsuite/gcc.target/xstormy16/bss_below100/12_if1_b100b_bit_7.c
! 4b9522f5409e08c959c8cc4d843174cf  gcc/testsuite/gcc.target/xstormy16/bss_below100/13_if0_b100b_bit_0.c
! cef682d07d01f4f1248964a2d9332821  gcc/testsuite/gcc.target/xstormy16/bss_below100/13_if0_b100b_bit_3.c
! d8124519fff09300cc76a366c6d57628  gcc/testsuite/gcc.target/xstormy16/bss_below100/13_if0_b100b_bit_7.c
! 54c114c58ee9df70b91111784579404e  gcc/testsuite/gcc.target/xstormy16/bss_below100/14_set_b100w_bit_0.c
! dcda9734d3dd0e4f072c7131970ee109  gcc/testsuite/gcc.target/xstormy16/bss_below100/14_set_b100w_bit_7.c
! 29023576846610dcfd4da5f367a93d65  gcc/testsuite/gcc.target/xstormy16/bss_below100/14_set_b100w_bit_8.c
! b80fafa8ae9e750cf429e80f81813a69  gcc/testsuite/gcc.target/xstormy16/bss_below100/14_set_b100w_bit_f.c
! 938550c19a609834ebb33b63d6a03715  gcc/testsuite/gcc.target/xstormy16/bss_below100/15_clr_b100w_bit_0.c
! f552acacc7de1efb3ed3ef59fe1499c7  gcc/testsuite/gcc.target/xstormy16/bss_below100/15_clr_b100w_bit_7.c
! e47f339bc77a7e6c9fbad79d4b0f6b6c  gcc/testsuite/gcc.target/xstormy16/bss_below100/15_clr_b100w_bit_8.c
! 40b852967a1bb0b5625f8071a49e5438  gcc/testsuite/gcc.target/xstormy16/bss_below100/15_clr_b100w_bit_f.c
! fdc6ff1382189773c50131eed7b662d5  gcc/testsuite/gcc.target/xstormy16/bss_below100/16_if1_b100w_bit_0.c
! 2779223ddab8ae911c64e68405b55b0f  gcc/testsuite/gcc.target/xstormy16/bss_below100/16_if1_b100w_bit_3.c
! 37a75a651d88f540d6fa9bb5faee9eea  gcc/testsuite/gcc.target/xstormy16/bss_below100/16_if1_b100w_bit_7.c
! 130232272589cb1cc80bbce09fd4a95b  gcc/testsuite/gcc.target/xstormy16/bss_below100/16_if1_b100w_bit_8.c
! 32c71f420aeac01babd18c6ff272225b  gcc/testsuite/gcc.target/xstormy16/bss_below100/16_if1_b100w_bit_b.c
! cc22a2abf0fd5ad6a45f1b65b14328a5  gcc/testsuite/gcc.target/xstormy16/bss_below100/16_if1_b100w_bit_f.c
! 767178421333b793d93e5dd5d9e44a42  gcc/testsuite/gcc.target/xstormy16/bss_below100/17_if0_b100w_bit_0.c
! 3b498a9888f669696a3e27fd9f61339d  gcc/testsuite/gcc.target/xstormy16/bss_below100/17_if0_b100w_bit_3.c
! 1e5e0296334ff7181330ac331b4dbe1d  gcc/testsuite/gcc.target/xstormy16/bss_below100/17_if0_b100w_bit_7.c
! de4359c6bab6dcd18b32175035cea9c1  gcc/testsuite/gcc.target/xstormy16/bss_below100/17_if0_b100w_bit_8.c
! 083b73973978ee623695377b9a80036b  gcc/testsuite/gcc.target/xstormy16/bss_below100/17_if0_b100w_bit_b.c
! 663cd844733ad0b2574336c1f66132fd  gcc/testsuite/gcc.target/xstormy16/bss_below100/17_if0_b100w_bit_f.c
! a7fc1d6f8773d4035303457014e7a3f9  gcc/testsuite/gcc.target/xstormy16/bss_below100/20_set_b100b_bitfield_0.c
! 5058cdfe7ff5280db28387bd794f1364  gcc/testsuite/gcc.target/xstormy16/bss_below100/20_set_b100b_bitfield_7.c
! 1c5a2cacd0f445111b0b966ecbbba83d  gcc/testsuite/gcc.target/xstormy16/bss_below100/21_clr_b100b_bitfield_0.c
! be3f898b515d2c05273d075939d55047  gcc/testsuite/gcc.target/xstormy16/bss_below100/21_clr_b100b_bitfield_7.c
! 0908fdf74b0b6abb42ee2b79156fe829  gcc/testsuite/gcc.target/xstormy16/bss_below100/22_if1_b100b_bitfield_0.c
! cad03825edaca8d195530a29daf8005c  gcc/testsuite/gcc.target/xstormy16/bss_below100/22_if1_b100b_bitfield_3.c
! 77fec5251f50de00e6569a6e44bcf1c9  gcc/testsuite/gcc.target/xstormy16/bss_below100/22_if1_b100b_bitfield_7.c
! 1d7592d113e27eabcb358e87bf1a8861  gcc/testsuite/gcc.target/xstormy16/bss_below100/23_if0_b100b_bitfield_0.c
! c7a1824f0b78bd7122bd8024ac598aa4  gcc/testsuite/gcc.target/xstormy16/bss_below100/23_if0_b100b_bitfield_3.c
! eac1b588eb961cd1fb9080d0e066602b  gcc/testsuite/gcc.target/xstormy16/bss_below100/23_if0_b100b_bitfield_7.c
! 6a92a724256ecd0429ecccc3175829e4  gcc/testsuite/gcc.target/xstormy16/bss_below100/24_set_b100w_bitfield_0.c
! 48b21311ed86418dcd35322420c9d1aa  gcc/testsuite/gcc.target/xstormy16/bss_below100/24_set_b100w_bitfield_7.c
! 5fd9a70f83cf63e455005a34cb44f747  gcc/testsuite/gcc.target/xstormy16/bss_below100/24_set_b100w_bitfield_8.c
! 83c016885bcade41979c117f893f5479  gcc/testsuite/gcc.target/xstormy16/bss_below100/24_set_b100w_bitfield_f.c
! 2b14c6db1cdf2d246e9de09e8ab1a55b  gcc/testsuite/gcc.target/xstormy16/bss_below100/25_clr_b100w_bitfield_0.c
! f9423f09fc642fbe2dc8916c3c7400c3  gcc/testsuite/gcc.target/xstormy16/bss_below100/25_clr_b100w_bitfield_7.c
! 55500c27790b9e8c888c1820e3f602a6  gcc/testsuite/gcc.target/xstormy16/bss_below100/25_clr_b100w_bitfield_8.c
! ab29a051ae5b89b1d1a4cbe9d82d60bf  gcc/testsuite/gcc.target/xstormy16/bss_below100/25_clr_b100w_bitfield_f.c
! 27001cc090ea1851595281cd3afee555  gcc/testsuite/gcc.target/xstormy16/bss_below100/26_if1_b100w_bitfield_0.c
! 592396dc39c5faebe7969830e4ef74cb  gcc/testsuite/gcc.target/xstormy16/bss_below100/26_if1_b100w_bitfield_3.c
! 289f63b3f10fcba7a3962b9982d15551  gcc/testsuite/gcc.target/xstormy16/bss_below100/26_if1_b100w_bitfield_7.c
! 7cadc1f6cb20114bba982864a1f70440  gcc/testsuite/gcc.target/xstormy16/bss_below100/26_if1_b100w_bitfield_8.c
! ac3c40ae4ee04d2c68a7f2d9b66ee5cb  gcc/testsuite/gcc.target/xstormy16/bss_below100/26_if1_b100w_bitfield_b.c
! 880d730e5daac816f1867d57d28aaee8  gcc/testsuite/gcc.target/xstormy16/bss_below100/26_if1_b100w_bitfield_f.c
! 9f4c9a35541726acafc50dbfd09ffd1e  gcc/testsuite/gcc.target/xstormy16/bss_below100/27_if0_b100w_bitfield_0.c
! 064ee1005ec40b7835090329ecba0e39  gcc/testsuite/gcc.target/xstormy16/bss_below100/27_if0_b100w_bitfield_3.c
! ff52f42b5dcbfea14a960c6dc0a868fd  gcc/testsuite/gcc.target/xstormy16/bss_below100/27_if0_b100w_bitfield_7.c
! c0becd091fe74865dfd37e9f3faf2c1b  gcc/testsuite/gcc.target/xstormy16/bss_below100/27_if0_b100w_bitfield_8.c
! 95d4de4c7f877cfc019bc1c088dd52aa  gcc/testsuite/gcc.target/xstormy16/bss_below100/27_if0_b100w_bitfield_b.c
! 1cbfb27e7069425b35246f3b44090d5b  gcc/testsuite/gcc.target/xstormy16/bss_below100/27_if0_b100w_bitfield_f.c
! d4019f50c4d7ff8e5d1ac3bddd62b77b  gcc/testsuite/gcc.target/xstormy16/data_below100/01_const_to_b100b.c
! 1d59763e8e36d2a0d9c94a7ea2c56230  gcc/testsuite/gcc.target/xstormy16/data_below100/02_const_to_b100w.c
! f8d55409a638689e036f58cb5d763b65  gcc/testsuite/gcc.target/xstormy16/data_below100/03_var_to_b100b.c
! 5d5d532b9c7c6596afd0694ebedd0602  gcc/testsuite/gcc.target/xstormy16/data_below100/04_var_to_b100w.c
! 834f3d56beb87f3735fdcdac49380bc1  gcc/testsuite/gcc.target/xstormy16/data_below100/05_b100b_to_var.c
! a1a124455be81b37c0466e71372e4556  gcc/testsuite/gcc.target/xstormy16/data_below100/06_b100w_to_var.c
! cb912c6a1c1856e5253035432e46e058  gcc/testsuite/gcc.target/xstormy16/data_below100/10_set_b100b_bit_0.c
! 157ed4835b6de21140c26a224be3cd62  gcc/testsuite/gcc.target/xstormy16/data_below100/10_set_b100b_bit_7.c
! bc686ee7da2b1ad78c7ffe70b2612030  gcc/testsuite/gcc.target/xstormy16/data_below100/11_clr_b100b_bit_0.c
! 13368e62798290ab5790c4363d635242  gcc/testsuite/gcc.target/xstormy16/data_below100/11_clr_b100b_bit_7.c
! f0168c689b3d275d03ef0263259c9e60  gcc/testsuite/gcc.target/xstormy16/data_below100/12_if1_b100b_bit_0.c
! b5514f629ef3c658d03880aa0d6406ed  gcc/testsuite/gcc.target/xstormy16/data_below100/12_if1_b100b_bit_3.c
! 9ee56aff5c213a14c4ad37783211e53a  gcc/testsuite/gcc.target/xstormy16/data_below100/12_if1_b100b_bit_7.c
! 58bdb311972249fe47ff07ad59e26f89  gcc/testsuite/gcc.target/xstormy16/data_below100/13_if0_b100b_bit_0.c
! 870fb5d4d9fbaec8b7f0a3c6d4f764de  gcc/testsuite/gcc.target/xstormy16/data_below100/13_if0_b100b_bit_3.c
! 477edb8b0c29e39925c7f483632f629e  gcc/testsuite/gcc.target/xstormy16/data_below100/13_if0_b100b_bit_7.c
! 449f28f71d39f55621b77ad4c3bae700  gcc/testsuite/gcc.target/xstormy16/data_below100/14_set_b100w_bit_0.c
! 5be9510531e52bd7b88317de441b7557  gcc/testsuite/gcc.target/xstormy16/data_below100/14_set_b100w_bit_7.c
! 8d23e8965f06225f6f395823113d8d34  gcc/testsuite/gcc.target/xstormy16/data_below100/14_set_b100w_bit_8.c
! 3fd9de40c88a0467493c98c3a581c051  gcc/testsuite/gcc.target/xstormy16/data_below100/14_set_b100w_bit_f.c
! 36de55f8f8ea9c94987806948e4ef00a  gcc/testsuite/gcc.target/xstormy16/data_below100/15_clr_b100w_bit_0.c
! b3ecb9f3f6bd099e677a25393377ad48  gcc/testsuite/gcc.target/xstormy16/data_below100/15_clr_b100w_bit_7.c
! 03ba93f58a5b34f079e15b0b2bf9f6dd  gcc/testsuite/gcc.target/xstormy16/data_below100/15_clr_b100w_bit_8.c
! f5508b97f05890f698d727f5d4c5f003  gcc/testsuite/gcc.target/xstormy16/data_below100/15_clr_b100w_bit_f.c
! 1d26134db264f4281681b20be64aceab  gcc/testsuite/gcc.target/xstormy16/data_below100/16_if1_b100w_bit_0.c
! 25ce846db2bbcd2ab7a5a66d4f4e50cc  gcc/testsuite/gcc.target/xstormy16/data_below100/16_if1_b100w_bit_3.c
! dc51ec308bc18521514b6d2ac4979f3e  gcc/testsuite/gcc.target/xstormy16/data_below100/16_if1_b100w_bit_7.c
! 1c8626674bf551533248acc7e9884537  gcc/testsuite/gcc.target/xstormy16/data_below100/16_if1_b100w_bit_8.c
! 71efd8ffb7a7824a00dbae7aae3364e6  gcc/testsuite/gcc.target/xstormy16/data_below100/16_if1_b100w_bit_b.c
! 49dc767e0ad32e85dcdbf2398fa4c9a7  gcc/testsuite/gcc.target/xstormy16/data_below100/16_if1_b100w_bit_f.c
! f261a9f3efa9e8739eaeddd6840a617e  gcc/testsuite/gcc.target/xstormy16/data_below100/17_if0_b100w_bit_0.c
! abfa180e0cab830a21b10ec6c224c092  gcc/testsuite/gcc.target/xstormy16/data_below100/17_if0_b100w_bit_3.c
! c0548e735c51ab330aad95f10c05b46b  gcc/testsuite/gcc.target/xstormy16/data_below100/17_if0_b100w_bit_7.c
! b93222cef1f2e0f416f58e60dec36e5e  gcc/testsuite/gcc.target/xstormy16/data_below100/17_if0_b100w_bit_8.c
! 0e82bee72147bfd31a9bbf90e3dfabfe  gcc/testsuite/gcc.target/xstormy16/data_below100/17_if0_b100w_bit_b.c
! 74b8fde510afca91b5d9e1f225119788  gcc/testsuite/gcc.target/xstormy16/data_below100/17_if0_b100w_bit_f.c
! dc3d235f36545082d0ddc2d9dd0f6b80  gcc/testsuite/gcc.target/xstormy16/data_below100/20_set_b100b_bitfield_0.c
! 3ea6253be1e7370ce8b864c742c878a0  gcc/testsuite/gcc.target/xstormy16/data_below100/20_set_b100b_bitfield_7.c
! 40e7ff860020983807053e61dc8baf24  gcc/testsuite/gcc.target/xstormy16/data_below100/21_clr_b100b_bitfield_0.c
! d63f31113912501250d3331ce79fbdf9  gcc/testsuite/gcc.target/xstormy16/data_below100/21_clr_b100b_bitfield_7.c
! 0e6a24315b728f859ecb3b86449ac41c  gcc/testsuite/gcc.target/xstormy16/data_below100/22_if1_b100b_bitfield_0.c
! 2f13d986d56bd90c9d5280136fd3ca06  gcc/testsuite/gcc.target/xstormy16/data_below100/22_if1_b100b_bitfield_3.c
! b0aed0461815b2a95065ec4a9c57e723  gcc/testsuite/gcc.target/xstormy16/data_below100/22_if1_b100b_bitfield_7.c
! 759275396e6a4b85c03be7914c7584eb  gcc/testsuite/gcc.target/xstormy16/data_below100/23_if0_b100b_bitfield_0.c
! 5bae3608725f28ad549bb7d2b43e884d  gcc/testsuite/gcc.target/xstormy16/data_below100/23_if0_b100b_bitfield_3.c
! 6b36842fbdd0bb17bcee97dd95604fd5  gcc/testsuite/gcc.target/xstormy16/data_below100/23_if0_b100b_bitfield_7.c
! 6ecd18bbd23bd48aa92b436d89315e99  gcc/testsuite/gcc.target/xstormy16/data_below100/24_set_b100w_bitfield_0.c
! 936d462ce3cb9a461584d1312ae07c3e  gcc/testsuite/gcc.target/xstormy16/data_below100/24_set_b100w_bitfield_7.c
! d86306f175fb09c3176f415eeac62476  gcc/testsuite/gcc.target/xstormy16/data_below100/24_set_b100w_bitfield_8.c
! 7c90ed64e186ee9c9fc5ef7c37a376e9  gcc/testsuite/gcc.target/xstormy16/data_below100/24_set_b100w_bitfield_f.c
! 7013e96fc1096a1ca74867ac32383e98  gcc/testsuite/gcc.target/xstormy16/data_below100/25_clr_b100w_bitfield_0.c
! 60d59b401d3bbdcfbf65baafcac8e7f3  gcc/testsuite/gcc.target/xstormy16/data_below100/25_clr_b100w_bitfield_7.c
! 9552c2e738dfe5e20031bd5c2c3ec636  gcc/testsuite/gcc.target/xstormy16/data_below100/25_clr_b100w_bitfield_8.c
! f9ca63cc4a2976c769dab8adf3eb7ef9  gcc/testsuite/gcc.target/xstormy16/data_below100/25_clr_b100w_bitfield_f.c
! 0492b57b90db5c3616346c1fae32982e  gcc/testsuite/gcc.target/xstormy16/data_below100/26_if1_b100w_bitfield_0.c
! 43ecf87d7f0163b5e64ae9aa0f530281  gcc/testsuite/gcc.target/xstormy16/data_below100/26_if1_b100w_bitfield_3.c
! bd9fd891836da1e9992cee3afb90eeec  gcc/testsuite/gcc.target/xstormy16/data_below100/26_if1_b100w_bitfield_7.c
! 30ec17cc6f46ac6a1629b4b22035d6e7  gcc/testsuite/gcc.target/xstormy16/data_below100/26_if1_b100w_bitfield_8.c
! d8c1d8046a6211dd16e164acd140a3eb  gcc/testsuite/gcc.target/xstormy16/data_below100/26_if1_b100w_bitfield_b.c
! 8a7980f71a8650487ed35c5b38483d90  gcc/testsuite/gcc.target/xstormy16/data_below100/26_if1_b100w_bitfield_f.c
! 540684dde7bc8f72a062047818cc1aa7  gcc/testsuite/gcc.target/xstormy16/data_below100/27_if0_b100w_bitfield_0.c
! 70592b81c3fbc485064542f155f5d3ac  gcc/testsuite/gcc.target/xstormy16/data_below100/27_if0_b100w_bitfield_3.c
! d04315a501207309df7a1040fa2ad44e  gcc/testsuite/gcc.target/xstormy16/data_below100/27_if0_b100w_bitfield_7.c
! 674c7fe9959849c418daa97596a29961  gcc/testsuite/gcc.target/xstormy16/data_below100/27_if0_b100w_bitfield_8.c
! 84d3c7a0bf32d4dee5814ee5817a9b41  gcc/testsuite/gcc.target/xstormy16/data_below100/27_if0_b100w_bitfield_b.c
! cca8438331c1dbd3622e6daf22ed8b80  gcc/testsuite/gcc.target/xstormy16/data_below100/27_if0_b100w_bitfield_f.c
! 39555eb5da0832d8df88935b6e9d9974  gcc/testsuite/gcc.target/xstormy16/sfr/01_const_to_sfrb.c
! b5a738a34194b338b92901ea41e83d81  gcc/testsuite/gcc.target/xstormy16/sfr/02_const_to_sfrw.c
! 4f5e0e24d96e923c531e4a3e9f625abc  gcc/testsuite/gcc.target/xstormy16/sfr/03_var_to_sfrb.c
! 4ceae3c6f954a374cd857816ca6af54b  gcc/testsuite/gcc.target/xstormy16/sfr/04_var_to_sfrw.c
! c91b039c443135314d58e09b50838c29  gcc/testsuite/gcc.target/xstormy16/sfr/05_sfrb_to_var.c
! 6c614724d2ed01618185e394ccdaa3f2  gcc/testsuite/gcc.target/xstormy16/sfr/06_sfrw_to_var.c
! 41b3e4bc48593a85a51627c924412900  gcc/testsuite/gcc.target/xstormy16/sfr/10_set_sfrb_bit_0.c
! ea5a267a107e1beb01fea8222992eae9  gcc/testsuite/gcc.target/xstormy16/sfr/10_set_sfrb_bit_7.c
! 8304bc4bfc0efb7d78f65c9bc81b1a94  gcc/testsuite/gcc.target/xstormy16/sfr/11_clr_sfrb_bit_0.c
! 175c9c8221763639ce93904ba3c97c9f  gcc/testsuite/gcc.target/xstormy16/sfr/11_clr_sfrb_bit_7.c
! a690d32bf32247f3efeb4eee8c2e6756  gcc/testsuite/gcc.target/xstormy16/sfr/12_if1_sfrb_bit_0.c
! 9a5d00464964e7d4329b0eba163cc5ee  gcc/testsuite/gcc.target/xstormy16/sfr/12_if1_sfrb_bit_3.c
! 39377124710a1b40a06fd390006badb9  gcc/testsuite/gcc.target/xstormy16/sfr/12_if1_sfrb_bit_7.c
! 58a3a5242b4b599cdd94931aa3145170  gcc/testsuite/gcc.target/xstormy16/sfr/13_if0_sfrb_bit_0.c
! ccae506883e23dac47030f4b9813239e  gcc/testsuite/gcc.target/xstormy16/sfr/13_if0_sfrb_bit_3.c
! ad88b856ab339be1d5906dd344b5c7aa  gcc/testsuite/gcc.target/xstormy16/sfr/13_if0_sfrb_bit_7.c
! 6bd33b5d5286c3a0aaccd9a581ebe975  gcc/testsuite/gcc.target/xstormy16/sfr/14_set_sfrw_bit_0.c
! e602b495c30c90e83425d6c32c6d65f3  gcc/testsuite/gcc.target/xstormy16/sfr/14_set_sfrw_bit_3.c
! fbb050eb3e069bae676979ad4cb2df21  gcc/testsuite/gcc.target/xstormy16/sfr/14_set_sfrw_bit_7.c
! da99ea363f75ec801b7ffbbb9ee20b7f  gcc/testsuite/gcc.target/xstormy16/sfr/14_set_sfrw_bit_8.c
! 47e39087bb0ce0a6562b2d7d56080844  gcc/testsuite/gcc.target/xstormy16/sfr/14_set_sfrw_bit_b.c
! ea55c119f6e91628e0f5da443c2221ba  gcc/testsuite/gcc.target/xstormy16/sfr/14_set_sfrw_bit_f.c
! d458d712d73830c9b5831e9cad3cdcaa  gcc/testsuite/gcc.target/xstormy16/sfr/15_clr_sfrw_bit_0.c
! 1819f8bf48c88124e88c44c5139b869b  gcc/testsuite/gcc.target/xstormy16/sfr/15_clr_sfrw_bit_3.c
! f141e67fdbcfa285ee246d8330d0f83d  gcc/testsuite/gcc.target/xstormy16/sfr/15_clr_sfrw_bit_7.c
! e672233cef6b303cc6a0d8d8ff56794b  gcc/testsuite/gcc.target/xstormy16/sfr/15_clr_sfrw_bit_8.c
! 74bb2bf0fbbda52adfcb454a5563d191  gcc/testsuite/gcc.target/xstormy16/sfr/15_clr_sfrw_bit_b.c
! d03bf177922963930cb27460f412f30b  gcc/testsuite/gcc.target/xstormy16/sfr/15_clr_sfrw_bit_f.c
! 7b6162122b77c65eaccc11a9939a6bb4  gcc/testsuite/gcc.target/xstormy16/sfr/16_if1_sfrw_bit_0.c
! cf251273f9c45a7e34dd3bf827719a44  gcc/testsuite/gcc.target/xstormy16/sfr/16_if1_sfrw_bit_3.c
! 67df1237954fc727a837e74d0f3480b4  gcc/testsuite/gcc.target/xstormy16/sfr/16_if1_sfrw_bit_7.c
! aef46e9a47d78b1d076482a5f851e770  gcc/testsuite/gcc.target/xstormy16/sfr/16_if1_sfrw_bit_8.c
! 82ec10ee69392fc4f5ec102ca9a25a3c  gcc/testsuite/gcc.target/xstormy16/sfr/16_if1_sfrw_bit_b.c
! 00e26f6acbdc0c121e66f84c76ce8deb  gcc/testsuite/gcc.target/xstormy16/sfr/16_if1_sfrw_bit_f.c
! dcc3fdf2d8cbd0c938a1e357a842c529  gcc/testsuite/gcc.target/xstormy16/sfr/17_if0_sfrw_bit_0.c
! 0ad7bb94917583249fb2699198582781  gcc/testsuite/gcc.target/xstormy16/sfr/17_if0_sfrw_bit_3.c
! 69dc57885530789ef53b3aef60d088fb  gcc/testsuite/gcc.target/xstormy16/sfr/17_if0_sfrw_bit_7.c
! fc6d1eb539581a427116c6a8e9bc6f67  gcc/testsuite/gcc.target/xstormy16/sfr/17_if0_sfrw_bit_8.c
! 7e1613b7e3efe492f920162f142c166e  gcc/testsuite/gcc.target/xstormy16/sfr/17_if0_sfrw_bit_b.c
! b73eb24104a2d4a38d2fd387a691a5fb  gcc/testsuite/gcc.target/xstormy16/sfr/17_if0_sfrw_bit_f.c
! 4b4e881b3c245b04dafab40ac7d64ce9  gcc/testsuite/gcc.target/xstormy16/sfr/20_set_sfrb_bitfield_0.c
! 05eb02db5581d089438b9ca27c6d9cdf  gcc/testsuite/gcc.target/xstormy16/sfr/20_set_sfrb_bitfield_7.c
! 7197b2a9d9ea1e766e09afc90febf633  gcc/testsuite/gcc.target/xstormy16/sfr/21_clr_sfrb_bitfield_0.c
! 14301c990a814bcc8d6e87391bc83d5d  gcc/testsuite/gcc.target/xstormy16/sfr/21_clr_sfrb_bitfield_7.c
! 7b3b52765647581bc3718c7325e51292  gcc/testsuite/gcc.target/xstormy16/sfr/22_if1_sfrb_bitfield_0.c
! 198fa2d02f98fa8c89bb115a3303af62  gcc/testsuite/gcc.target/xstormy16/sfr/22_if1_sfrb_bitfield_3.c
! fe0d7579cb5b9bcba4a64a2c2a9b8782  gcc/testsuite/gcc.target/xstormy16/sfr/22_if1_sfrb_bitfield_7.c
! 60174d65a06f31a7d45737a35b72a384  gcc/testsuite/gcc.target/xstormy16/sfr/23_if0_sfrb_bitfield_0.c
! 3474925bb54a403120be07e589414fdb  gcc/testsuite/gcc.target/xstormy16/sfr/23_if0_sfrb_bitfield_3.c
! f4fa764f634b6f3886eb9ad5fe913bb6  gcc/testsuite/gcc.target/xstormy16/sfr/23_if0_sfrb_bitfield_7.c
! 03099a9751d64633fbc59c769c88fb05  gcc/testsuite/gcc.target/xstormy16/sfr/24_set_sfrw_bitfield_0.c
! b81ce5911de2ae99c81267d43d3752d2  gcc/testsuite/gcc.target/xstormy16/sfr/24_set_sfrw_bitfield_7.c
! b82bb507e54aabe818eb697938c7bcf0  gcc/testsuite/gcc.target/xstormy16/sfr/24_set_sfrw_bitfield_8.c
! f245bf6558561783399217fe05de4ea0  gcc/testsuite/gcc.target/xstormy16/sfr/24_set_sfrw_bitfield_f.c
! 74b10bc3b14464e43528869e3b8f86d5  gcc/testsuite/gcc.target/xstormy16/sfr/25_clr_sfrw_bitfield_0.c
! e20255fe3b386fe8fdd70bc3b3831760  gcc/testsuite/gcc.target/xstormy16/sfr/25_clr_sfrw_bitfield_7.c
! c85e51602e08f08112ca9e296ba720ea  gcc/testsuite/gcc.target/xstormy16/sfr/25_clr_sfrw_bitfield_8.c
! fb1ced0431dad000e95190bfbd2319ca  gcc/testsuite/gcc.target/xstormy16/sfr/25_clr_sfrw_bitfield_f.c
! 8940080716d4d25d81dd66c245f4e124  gcc/testsuite/gcc.target/xstormy16/sfr/26_if1_sfrw_bitfield_0.c
! 909ab9c11eded8f481f574448b874a9e  gcc/testsuite/gcc.target/xstormy16/sfr/26_if1_sfrw_bitfield_3.c
! 38c7b7fa94a4f76f0547a4ec00ee123a  gcc/testsuite/gcc.target/xstormy16/sfr/26_if1_sfrw_bitfield_7.c
! d9288f0e6957efb8199560ad6f6ebe6c  gcc/testsuite/gcc.target/xstormy16/sfr/26_if1_sfrw_bitfield_8.c
! 734c7464f1e5d9683d7d0e97a6145d10  gcc/testsuite/gcc.target/xstormy16/sfr/26_if1_sfrw_bitfield_b.c
! dc25d837e9dfb63d110d3ed97952ac44  gcc/testsuite/gcc.target/xstormy16/sfr/26_if1_sfrw_bitfield_f.c
! 3b863fb0c295e87dae856eee933a1be6  gcc/testsuite/gcc.target/xstormy16/sfr/27_if0_sfrw_bitfield_0.c
! 81635dd31f9e880ac612e701713e377a  gcc/testsuite/gcc.target/xstormy16/sfr/27_if0_sfrw_bitfield_3.c
! de974d8f497b1ad76694e8f9333fcd26  gcc/testsuite/gcc.target/xstormy16/sfr/27_if0_sfrw_bitfield_7.c
! 92244b620516764d25382b815309419b  gcc/testsuite/gcc.target/xstormy16/sfr/27_if0_sfrw_bitfield_8.c
! 292d09294f8beccfa611eb5d5ace3e5d  gcc/testsuite/gcc.target/xstormy16/sfr/27_if0_sfrw_bitfield_b.c
! 399545481a5e90f464e00d2cdb3b624f  gcc/testsuite/gcc.target/xstormy16/sfr/27_if0_sfrw_bitfield_f.c
! 572c0f6a7471ba7b89ab730249943600  gcc/testsuite/gcc.target/xstormy16/xstormy16.exp
! 07ed0a71cf8e1ab9f1b43290f5beb239  gcc/testsuite/gcc.test-framework/README
! 096a37c4b1e488bdb060872ca7b99862  gcc/testsuite/gcc.test-framework/dg-bogus-exp-P.c
! ee0e6b3ffbbb52d6ec18df05697d1010  gcc/testsuite/gcc.test-framework/dg-bogus-exp-XF.c
! 570821aa898995690ac6f67de0840c1a  gcc/testsuite/gcc.test-framework/dg-do-assemble-exp-P.c
! 504bb455dcb054543918b5219aa86f06  gcc/testsuite/gcc.test-framework/dg-do-compile-exp-P.c
! 36cb46d6d3c8ea83c2e7b85419b75765  gcc/testsuite/gcc.test-framework/dg-do-link-exp-P.c
! 806c2baf0fe3db4e7c7266ec338f180e  gcc/testsuite/gcc.test-framework/dg-do-run-exp-P.c
! a6313be69fbbba7767a5eec1889c256f  gcc/testsuite/gcc.test-framework/dg-dot-run-exp-P.c
! 5b7c92d83f3c70816ff19d8159b0b99e  gcc/testsuite/gcc.test-framework/dg-dot-run-exp-U.c
! 57c10a0c0410d339d538a11cea5aa5cd  gcc/testsuite/gcc.test-framework/dg-dox-run-exp-XF.c
! 59306cbcc7659ab3a9de64328a9f9c2a  gcc/testsuite/gcc.test-framework/dg-error-exp-P.c
! 52b259d3a2b2d970c9ddb31059d8609b  gcc/testsuite/gcc.test-framework/dg-error-exp-XP.c
! 734dc5c6db137d083a1d15aff870648d  gcc/testsuite/gcc.test-framework/dg-excess-errors-exp-XF.c
! 75ded3562d15f4b91a8b19c3e63ab5cc  gcc/testsuite/gcc.test-framework/dg-excess-errors-exp-XP.c
! 2902dae468de0112a11f157477ff0e0e  gcc/testsuite/gcc.test-framework/dg-output-exp-P.c
! 34394118c6187de3c53a1131ca37c8c5  gcc/testsuite/gcc.test-framework/dg-output-exp-XF.c
! 1633a69e2ab65182b7d68d82de29bd9a  gcc/testsuite/gcc.test-framework/dg-warning-exp-P.c
! f363d005cb8679900890a81f95a580ad  gcc/testsuite/gcc.test-framework/gen_directive_tests
! d876dac67cb867a2ed8393812b25b365  gcc/testsuite/gcc.test-framework/test-framework.awk
! 12f21bce091e3c46d464f20b41b10b56  gcc/testsuite/gcc.test-framework/test-framework.exp
! 36cd9c1e3875c80db22097b9c2ad49b3  gcc/testsuite/gfortran.dg/PR19754_1.f90
! 0c95496297d3f7c6f4da308bb248095b  gcc/testsuite/gfortran.dg/PR19754_2.f90
! ce32673088c3b07b2450b05154ff077f  gcc/testsuite/gfortran.dg/achar_1.f90
! 91775ce54ebd3e79f1c1d61923dcc451  gcc/testsuite/gfortran.dg/array-1.f90
! deab4a6796b2447e0b52d276de9e7520  gcc/testsuite/gfortran.dg/assign.f90
! 33bb9c6a0efda6c1c378e2203614d936  gcc/testsuite/gfortran.dg/assign_1.f90
! 16c884528e88386e59bcc0d51443ff05  gcc/testsuite/gfortran.dg/assign_2.f90
! a0494aa37ce786eddcb2107da73e9e9d  gcc/testsuite/gfortran.dg/assign_3.f90
! 966d7e116c2df8e1539e6653d8cd7dc2  gcc/testsuite/gfortran.dg/assignment_1.f90
! 1e7f74d6532554c8c19294f2cb8ebfdb  gcc/testsuite/gfortran.dg/auto_array_1.f90
! e90c72bd73e32550cfe8cfceae2beca3  gcc/testsuite/gfortran.dg/backspace.f
! e1f7ca52435ccdb5b247636195724346  gcc/testsuite/gfortran.dg/backspace.f90
! bb9c8393402df06534440c801c44edb3  gcc/testsuite/gfortran.dg/blockdata_1.f90
! e1e6e91037e7eac695683515f951782c  gcc/testsuite/gfortran.dg/bound_1.f90
! f0d730c3594ce2f358ac721c25ef3407  gcc/testsuite/gfortran.dg/boz_1.f90
! 510c34a7ff95c5e38f0673515e9e70dd  gcc/testsuite/gfortran.dg/boz_3.f90
! b87d9e6c413d4f8ab0b74203734a7315  gcc/testsuite/gfortran.dg/boz_4.f90
! ad56b8ccf93a09af1f57171e13ba7a6a  gcc/testsuite/gfortran.dg/common_1.f90
! 1a3f0a95a819503c9a7f4ee394db0fae  gcc/testsuite/gfortran.dg/common_2.f90
! c2a0876dd85c6ece5d309ef2cf58c533  gcc/testsuite/gfortran.dg/common_3.f90
! 9b40af3442d45f6e82348f9e9476c3b2  gcc/testsuite/gfortran.dg/common_4.f90
! 1a863b860aa1c3085939d9de58db3424  gcc/testsuite/gfortran.dg/common_pointer_1.f90
! cfd54d23052dc6b16ad17bcf76406ff1  gcc/testsuite/gfortran.dg/complex_int_1.f90
! d7579b8d3e86545a00a17e2f17b2b860  gcc/testsuite/gfortran.dg/complex_write.f90
! c726108aa1cbfbc0c1b801b6ba5ab484  gcc/testsuite/gfortran.dg/contained_1.f90
! 7a3e47074b3fa94a7580a20fbf161d14  gcc/testsuite/gfortran.dg/data_char_1.f90
! 2d5af451897a230f5c4e75f539402003  gcc/testsuite/gfortran.dg/deftype_1.f90
! 95f2419e774289de06c61e6b37f84b63  gcc/testsuite/gfortran.dg/der_array_1.f90
! 0330281f7ba68eeeea9502441060521e  gcc/testsuite/gfortran.dg/der_array_io_1.f90
! 97fbfa8e6c688fdded13809683228b4a  gcc/testsuite/gfortran.dg/der_array_io_2.f90
! 63b42a7299a013d47dd2375cfcdca757  gcc/testsuite/gfortran.dg/der_array_io_3.f90
! 54d58321c463de955b80652c000a0a1e  gcc/testsuite/gfortran.dg/der_io_1.f90
! 2520b2121bba08e6b262ed618af815c5  gcc/testsuite/gfortran.dg/der_pointer_1.f90
! fea18fc8aaa232a79d68ed895d366065  gcc/testsuite/gfortran.dg/dfloat_1.f90
! 2ae61eb1af8a62620d49e66c0c0ad9c6  gcc/testsuite/gfortran.dg/dg.exp
! 950b86336c95e11166419c60906905bd  gcc/testsuite/gfortran.dg/direct_io_1.f90
! 0e94eeda02976adc3e6b7f11fd84f199  gcc/testsuite/gfortran.dg/direct_io_2.f90
! a3f04c1f01833ed39e08ad3ca9f23ead  gcc/testsuite/gfortran.dg/direct_io_3.f90
! c7a75d3b71316ff89b47fa9681cf8066  gcc/testsuite/gfortran.dg/do_1.f90
! aaad3ee6d838c85816284d4c01090f19  gcc/testsuite/gfortran.dg/do_iterator.f90
! 81c02ab79001889d92651612f04f4029  gcc/testsuite/gfortran.dg/dos_eol.f
! 28c9ee70843b7ef41ef74327bc08fb12  gcc/testsuite/gfortran.dg/double_complex_1.f90
! bdb45f687b5d3ca807045edcc5137867  gcc/testsuite/gfortran.dg/e_d_fmt.f90
! 2bc32bf3d4cbd294c902ac169f80f695  gcc/testsuite/gfortran.dg/edit_real_1.f90
! 9322412de6af3d6d2ddc02a981d1eb87  gcc/testsuite/gfortran.dg/empty_format_1.f90
! ab3f96ec42d69cf7b38f37fa9bc2c94f  gcc/testsuite/gfortran.dg/endfile.f90
! c5fcdb329e48c8195fc4112f8e79724d  gcc/testsuite/gfortran.dg/endfile_2.f90
! d567d5b4840878ab834bb0c7bbc09c37  gcc/testsuite/gfortran.dg/entry_1.f90
! dde6c08dab677880bb894b2143cf090b  gcc/testsuite/gfortran.dg/entry_2.f90
! 7ab702c0c5c00cd9a2eeea0ee8dacf87  gcc/testsuite/gfortran.dg/eof_1.f90
! 015463de1e45aea184a6fc4fa3d85c7b  gcc/testsuite/gfortran.dg/eof_2.f90
! 6ff48082aaf8a0109f0b0ac9c3edb72c  gcc/testsuite/gfortran.dg/eor_1.f90
! 038cbd43ca2c9e8c5b73e40c42b96d18  gcc/testsuite/gfortran.dg/fmt_read.f90
! dd053536101d7491c8daab673de5fb5a  gcc/testsuite/gfortran.dg/func_derived_1.f90
! db7fb41cad42f0573d62d9d599f1cff7  gcc/testsuite/gfortran.dg/func_result_1.f90
! 877bcb109c291e807b0f25e03b6b7500  gcc/testsuite/gfortran.dg/g77/12002.f
! 02ebd0497bc8cdc9538186880daceba0  gcc/testsuite/gfortran.dg/g77/12632.f
! 556d3e8f9ae488f09addc5cbca3addd2  gcc/testsuite/gfortran.dg/g77/13037.f
! 4cad78aca0c2d9e768c5e96a81b1488e  gcc/testsuite/gfortran.dg/g77/13060.f
! 24ea122f89cd9aa1da2780e8bf8c13a1  gcc/testsuite/gfortran.dg/g77/1832.f
! fc54ee27f55573d6b68516b302136f47  gcc/testsuite/gfortran.dg/g77/19981119-0.f
! 1e6523f81521358c2bd7139156cd4096  gcc/testsuite/gfortran.dg/g77/19981216-0.f
! 19e6376609e843e89364f0cc1930fc2d  gcc/testsuite/gfortran.dg/g77/19990218-0.f
! d88e6491437cdcbb1a35ea199674a0b9  gcc/testsuite/gfortran.dg/g77/19990218-1.f
! b915be426517792b50fe94431b59d7d2  gcc/testsuite/gfortran.dg/g77/19990305-0.f
! 4655a9cf30dc14352f2217d8d62354c4  gcc/testsuite/gfortran.dg/g77/19990313-0.f
! 748cd3c75f891974820bebea47ce4dab  gcc/testsuite/gfortran.dg/g77/19990313-1.f
! 070890e377c68be02d4d017d41cbef53  gcc/testsuite/gfortran.dg/g77/19990313-2.f
! 2dab2a73b7bc8ffa8290df97ca0275aa  gcc/testsuite/gfortran.dg/g77/19990313-3.f
! 94a54ca0a5a0f6710c92444bb6d5859c  gcc/testsuite/gfortran.dg/g77/19990419-0.f
! a116bf819adc5ddac0039048d7c1226d  gcc/testsuite/gfortran.dg/g77/19990419-1.f
! 096a67d2fb9701f68c468be3867c0915  gcc/testsuite/gfortran.dg/g77/19990502-0.f
! 870ee3c89e568330f3b5d5deb8d2bb6a  gcc/testsuite/gfortran.dg/g77/19990502-1.f
! 09aa969bd721da5359238359208186a3  gcc/testsuite/gfortran.dg/g77/19990525-0.f
! 99af2d5f8bed55d4f9540aca739feac6  gcc/testsuite/gfortran.dg/g77/19990826-0.f
! 2f79897a6309a4808ba46bbd9f7f340d  gcc/testsuite/gfortran.dg/g77/19990826-1.f
! 80af9174ae2dadc9bae81ba9cc92c175  gcc/testsuite/gfortran.dg/g77/19990826-2.f
! 6283338438c6c24a654072670be373cc  gcc/testsuite/gfortran.dg/g77/19990826-3.f
! 5a8b73c64a84a574195928f9ce6db356  gcc/testsuite/gfortran.dg/g77/19990905-0.f
! f0d91b1f13ca24a87551c038faa2a8fe  gcc/testsuite/gfortran.dg/g77/19990905-1.f
! 4cc3f00cca57d43cdc27ff9c55ecc9e7  gcc/testsuite/gfortran.dg/g77/19990905-2.f
! 5b8bdd4ab957f222af460db90d89b2b7  gcc/testsuite/gfortran.dg/g77/20000412-1.f
! 93f2fa18c03960506da2fc4ac6e07a63  gcc/testsuite/gfortran.dg/g77/20000503-1.f
! 9e2081f4f469ca919521650977f1d1c7  gcc/testsuite/gfortran.dg/g77/20000511-1.f
! 4b76ff6aa5ed21c9241451ab6d4e7515  gcc/testsuite/gfortran.dg/g77/20000511-2.f
! 8c1b6e37f20e059b9d33078948483a18  gcc/testsuite/gfortran.dg/g77/20000518.f
! 34cb481547ef3f25ce326251b45b537e  gcc/testsuite/gfortran.dg/g77/20000601-1.f
! 10e717dd526d3363aa4e249c2cc2e357  gcc/testsuite/gfortran.dg/g77/20000601-2.f
! 1dc9b42d8f73dc528e149ce9d4eb5d42  gcc/testsuite/gfortran.dg/g77/20000629-1.f
! a331271b8df3b23f31eb7aa03061b3e0  gcc/testsuite/gfortran.dg/g77/20000630-2.f
! ac69e35ec8a83847603877736e8cd46a  gcc/testsuite/gfortran.dg/g77/20001111.f
! 787568d0c1679686795dc0dd96859066  gcc/testsuite/gfortran.dg/g77/20010115.f
! f62a3d49a8f5f24ed9a4d3a8902d7d89  gcc/testsuite/gfortran.dg/g77/20010116.f
! 6a69e8e1817dbe3b4ab6c25bf13d20d6  gcc/testsuite/gfortran.dg/g77/20010216-1.f
! 42bd075e2f01e62a447bb5c3c46bc179  gcc/testsuite/gfortran.dg/g77/20010321-1.f
! 61fb23590346bcc01103183661548acc  gcc/testsuite/gfortran.dg/g77/20010426-1.f
! b40602fa359ecf365af79e48fbe838ee  gcc/testsuite/gfortran.dg/g77/20010426.f
! f6c03f65429e0d090361d63745d26d31  gcc/testsuite/gfortran.dg/g77/20010430.f
! bee38df3af05057832adca756573c61f  gcc/testsuite/gfortran.dg/g77/20010519-1.f
! 3e93fe3ed379cf6c0386f58de8698507  gcc/testsuite/gfortran.dg/g77/20010610.f
! 0c1947d5b760d49d016e1da37ed02726  gcc/testsuite/gfortran.dg/g77/20020307-1.f
! 419b824ba987cdb8d2ae7d0670cd7023  gcc/testsuite/gfortran.dg/g77/20030115-1.f
! 6e70d8638222cbbb1a9f02b554f79fb3  gcc/testsuite/gfortran.dg/g77/20030326-1.f
! 631891a247898fb310df32d8fe06a54d  gcc/testsuite/gfortran.dg/g77/6177.f
! b24f067dcba71c9828e34889ff389717  gcc/testsuite/gfortran.dg/g77/7388.f
! 792a27842da5e5b4df27330db3386e96  gcc/testsuite/gfortran.dg/g77/8485.f
! 4dde1c61d85b401b8b0447eeae19b7b9  gcc/testsuite/gfortran.dg/g77/9263.f
! 1df9fbced22834d9297b990db5faf95f  gcc/testsuite/gfortran.dg/g77/947.f
! 024563618261c7c2eda855abad5ba04b  gcc/testsuite/gfortran.dg/g77/960317-1.f
! fd80ff72927168884a1b4157beb21268  gcc/testsuite/gfortran.dg/g77/970125-0.f
! b7601a98949014c0b672a5ae3d1d44fc  gcc/testsuite/gfortran.dg/g77/970625-2.f
! e48a6adf7417be2e9e5c431aeaf89800  gcc/testsuite/gfortran.dg/g77/970816-3.f
! a2b1e430bb2cc8d70eba7fac7bd65222  gcc/testsuite/gfortran.dg/g77/970915-0.f
! 0cd1e0fffa14d0102c0e6f5118ff9c6a  gcc/testsuite/gfortran.dg/g77/971102-1.f
! af9c112eb07711d9fd15f399baaf4056  gcc/testsuite/gfortran.dg/g77/980310-1.f
! 5603b62c2dfbcfbf268ea90890767b9a  gcc/testsuite/gfortran.dg/g77/980310-2.f
! 1fe09b63cb62b6893fa571fca1c4ce02  gcc/testsuite/gfortran.dg/g77/980310-3.f
! f18e25de58b98ac8e8ffbb9fd068860c  gcc/testsuite/gfortran.dg/g77/980310-4.f
! 62d0c29d875e0cec64a6cd67ebe884c4  gcc/testsuite/gfortran.dg/g77/980310-6.f
! 064a09bd36816e7258b1c5928f3e9e87  gcc/testsuite/gfortran.dg/g77/980310-7.f
! 7ec3b4ab98c6763bf646989dc65a77de  gcc/testsuite/gfortran.dg/g77/980310-8.f
! f6f9a1b4f89fecb5001804c3f8f0362b  gcc/testsuite/gfortran.dg/g77/980419-2.f
! 67712de9b8bf85db683ae2ced7de84df  gcc/testsuite/gfortran.dg/g77/980424-0.f
! ac13e0ae44c41cb0aee56de205b24a6e  gcc/testsuite/gfortran.dg/g77/980427-0.f
! ae928a3982a066d928063d50ace97dc6  gcc/testsuite/gfortran.dg/g77/980519-2.f
! 80392055d9fa5d62073ff37dcfe789a7  gcc/testsuite/gfortran.dg/g77/980520-1.f
! a85861a0d55747ec81a6f6ff9abbbc59  gcc/testsuite/gfortran.dg/g77/980615-0.f
! 318e0d16be2cfe3c920f753c0fbb4313  gcc/testsuite/gfortran.dg/g77/980616-0.f
! c3ddecbeab19b90677541cf76acaac9d  gcc/testsuite/gfortran.dg/g77/980628-0.f
! 1e0e70eb38a08984269d69576d372475  gcc/testsuite/gfortran.dg/g77/980628-1.f
! c2c658216b8a40620cb19cfba7f8e98e  gcc/testsuite/gfortran.dg/g77/980628-10.f
! dbd50e96c7fa845b40a2e2f73895f97a  gcc/testsuite/gfortran.dg/g77/980628-2.f
! 5f41389b50dcf0ea6483c78e341d6d0b  gcc/testsuite/gfortran.dg/g77/980628-3.f
! e343f08719f64d19c54050cab2a03006  gcc/testsuite/gfortran.dg/g77/980628-7.f
! fefba559d3e038653dd9d384ff504208  gcc/testsuite/gfortran.dg/g77/980628-8.f
! b7551ecfd3ca7b2b3984ae1cfa351247  gcc/testsuite/gfortran.dg/g77/980628-9.f
! 3fa79dedbeeef1dbf8bbb00f7e784688  gcc/testsuite/gfortran.dg/g77/980701-0.f
! d585d34dc180093e68a600ba5dc9b52e  gcc/testsuite/gfortran.dg/g77/980701-1.f
! 5b8e4d3e937b6a6803378fc996daa1cc  gcc/testsuite/gfortran.dg/g77/980729-0.f
! 2101f50ac159df80eeb505634cd4a578  gcc/testsuite/gfortran.dg/g77/981117-1.f
! 58b6c4c7b24c5c055cbfb1ab4fff9799  gcc/testsuite/gfortran.dg/g77/990115-1.f
! 6e591a26e09a34ae9fc73de68604e976  gcc/testsuite/gfortran.dg/g77/README
! 015ad1e9278ca086c2fea5e3688cb46c  gcc/testsuite/gfortran.dg/g77/alpha1.f
! 23a15dd6c8f26c44ac0332b77ce97d2c  gcc/testsuite/gfortran.dg/g77/cabs.f
! 578f69c372c06569362fb355faa8bca7  gcc/testsuite/gfortran.dg/g77/check0.f
! 43b72c8efdccf45c88f385d0e1ddc98f  gcc/testsuite/gfortran.dg/g77/claus.f
! 8ab9ec4971f59cb107bdaa1f422c1298  gcc/testsuite/gfortran.dg/g77/complex_1.f
! c1e3048c9a8fb1bb9d39012f2c0ddc2a  gcc/testsuite/gfortran.dg/g77/cpp.F
! 838830e7d365923d03ad13761ee33432  gcc/testsuite/gfortran.dg/g77/cpp2.F
! d836c14b2ccaf34e68b93edc09c31075  gcc/testsuite/gfortran.dg/g77/cpp3.F
! 89ac385f25f4364c6e1b16b5ae0a64a7  gcc/testsuite/gfortran.dg/g77/dcomplex.f
! 9ad01b7b7526f78267a8fbe38bee1555  gcc/testsuite/gfortran.dg/g77/dnrm2.f
! 5ede21f59a762ce67df24a594656d259  gcc/testsuite/gfortran.dg/g77/erfc.f
! 5f07e6fafeed89aeef7c7bdcad5664c7  gcc/testsuite/gfortran.dg/g77/f77-edit-apostrophe-out.f
! 0d8a0ba8ae1d7da40a25931e3cfb1204  gcc/testsuite/gfortran.dg/g77/f77-edit-colon-out.f
! 1f6781d6cf004a145321247795101e47  gcc/testsuite/gfortran.dg/g77/f77-edit-h-out.f
! 1e5f6d866b729475e35dbaea58f7633f  gcc/testsuite/gfortran.dg/g77/f77-edit-i-in.f
! 8f39aa584914e46ad5898af506058a71  gcc/testsuite/gfortran.dg/g77/f77-edit-i-out.f
! 145150b5b9e0b1b391be92bdde7298f6  gcc/testsuite/gfortran.dg/g77/f77-edit-s-out.f
! 39e5bb2b521c5cc467963d1bde299b31  gcc/testsuite/gfortran.dg/g77/f77-edit-slash-out.f
! 496984098bbcb8fc40b01834699dcd30  gcc/testsuite/gfortran.dg/g77/f77-edit-t-in.f
! 2fd189574e5e3e327e513bc9ad958b51  gcc/testsuite/gfortran.dg/g77/f77-edit-t-out.f
! 50ecdc0078f34e0398bbede8fb080a0b  gcc/testsuite/gfortran.dg/g77/f77-edit-x-out.f
! 90f48eeb6287103bfbcafca0a4b3752a  gcc/testsuite/gfortran.dg/g77/f90-intrinsic-bit.f
! 75aadc602540e121e5f26313af263c68  gcc/testsuite/gfortran.dg/g77/f90-intrinsic-mathematical.f
! b1b48fca46f66d1e261f2d2eed679b50  gcc/testsuite/gfortran.dg/g77/f90-intrinsic-numeric.f
! 96977883421b175b67be1118b794bd56  gcc/testsuite/gfortran.dg/g77/ffixed-form-1.f
! 29ff9a4381ca8c02a6e5817b0a713d27  gcc/testsuite/gfortran.dg/g77/ffixed-form-2.f
! 57194471031e9d956071d8b5b26dad72  gcc/testsuite/gfortran.dg/g77/ffixed-line-length-0.f
! 7739edaa117d533feb47c76dd60924a4  gcc/testsuite/gfortran.dg/g77/ffixed-line-length-132.f
! 5e49908e5e0ef59516704cc29a9b3256  gcc/testsuite/gfortran.dg/g77/ffixed-line-length-72.f
! 5d57315187c151cff340f72b4514f42c  gcc/testsuite/gfortran.dg/g77/ffixed-line-length-none.f
! c34f0338bfd38cc5789eae9ef9b39d98  gcc/testsuite/gfortran.dg/g77/ffree-form-1.f
! 646e9985c5cbdd264fc06153ea1769b3  gcc/testsuite/gfortran.dg/g77/ffree-form-2.f
! 536d1ae729593f200381628d100a2b86  gcc/testsuite/gfortran.dg/g77/ffree-form-3.f
! b76273e7af403caabc68f7f1973b211c  gcc/testsuite/gfortran.dg/g77/fno-underscoring.f
! 51a2c0c69a512565c359338191e9e39e  gcc/testsuite/gfortran.dg/g77/funderscoring.f
! 4e6b7765ba2134bc507259bde21be582  gcc/testsuite/gfortran.dg/g77/int8421.f
! e3e21f1e711000a7a7b1837bce2dbea7  gcc/testsuite/gfortran.dg/g77/intrinsic-unix-bessel.f
! eeb1076395b9033c0dd4f2a74228a5f3  gcc/testsuite/gfortran.dg/g77/intrinsic-unix-erf.f
! b95bed0058de43a18f0b95b0a13babee  gcc/testsuite/gfortran.dg/g77/labug1.f
! 5cd5db2f5585dc7595a6f6ad12e9e45d  gcc/testsuite/gfortran.dg/g77/large_vec.f
! 29f3edfa4d9e8710746d03b0803588c0  gcc/testsuite/gfortran.dg/g77/le.f
! fb6296a6fec20992b83a093da381adb0  gcc/testsuite/gfortran.dg/g77/pr9258.f
! be4453fbf0f2790e43fd00617cc3e7ea  gcc/testsuite/gfortran.dg/g77/short.f
! 632f6b94f0110d72eedbee7641bd627f  gcc/testsuite/gfortran.dg/g77/strlen0.f
! 26374b4f17ec9ded8cafd5c6666580d5  gcc/testsuite/gfortran.dg/g77/toon_1.f
! 507107b1fe21bc057b23f80e4813a779  gcc/testsuite/gfortran.dg/g77/xformat.f
! 20309cf39d41b9bce0749e959d0cb2a1  gcc/testsuite/gfortran.dg/g77_intrinsics_funcs.f
! fabba7807c9249830126c97d3dfd6b6f  gcc/testsuite/gfortran.dg/g77_intrinsics_sub.f
! 176b7a49d60c5170e3547883e19d1aa6  gcc/testsuite/gfortran.dg/generic_1.f90
! 950e0227bc118a7f1b3b9a411904385b  gcc/testsuite/gfortran.dg/generic_2.f90
! 8903ef8f818c080ee22a33c4093134b8  gcc/testsuite/gfortran.dg/generic_3.f90
! dde1a2efd44a1842615d10e590968dd6  gcc/testsuite/gfortran.dg/getenv_1.f90
! 166141e535015cde6b99ee5b4024f1f5  gcc/testsuite/gfortran.dg/implicit_1.f90
! 64f1f368548042ba6814a03f6bea8f36  gcc/testsuite/gfortran.dg/implicit_2.f90
! f91933b2213ae0e2eb08e9d25f71bae4  gcc/testsuite/gfortran.dg/implicit_3.f90
! be795e80364b41af20887114b9af7291  gcc/testsuite/gfortran.dg/inquire.f90
! 90423fca02398a6f55da36f8a889ca3e  gcc/testsuite/gfortran.dg/inquire_5.f90
! fbdf3dbc8604bd48c410cc6c2ac05aee  gcc/testsuite/gfortran.dg/inquire_6.f90
! 8283bb4be36f05c63ad546fdd62f3531  gcc/testsuite/gfortran.dg/inquire_7.f90
! 0502fac72f1b8a1a31e6ed12f1c575f4  gcc/testsuite/gfortran.dg/int_1.f90
! 90b3155638c5685439fb666f6912408c  gcc/testsuite/gfortran.dg/intrinsic_modulo_1.f90
! 3bbb1901584e77f5fff0a4ba7e9a9933  gcc/testsuite/gfortran.dg/intrinsic_verify_1.f90
! 401f6fb5eb7e23838be93598139f9063  gcc/testsuite/gfortran.dg/ishft.f90
! 4f674de130200a007cf1ee068838e622  gcc/testsuite/gfortran.dg/largeequiv_1.f90
! 6b10115fba6bad4e5a0a58ba881f0ab8  gcc/testsuite/gfortran.dg/list_read_1.f90
! 7e8fb2e2920423473d1ab171b01cb2df  gcc/testsuite/gfortran.dg/list_read_2.f90
! 799ffeafd700d24bd3e365a8addcfa10  gcc/testsuite/gfortran.dg/list_read_3.f90
! 36e928b3a5b9a5d89ecebae1c130be22  gcc/testsuite/gfortran.dg/list_read_4.f90
! d790ddb406b38b67d83bc92f76cdf315  gcc/testsuite/gfortran.dg/logical_data_1.f90
! 0039aa87d8c7bb33fdd7971da66f6212  gcc/testsuite/gfortran.dg/merge_char_1.f90
! af3d6fa66a14354768655f4d21d8792b  gcc/testsuite/gfortran.dg/namelist_1.f90
! 15d0cea07e785184b1d7ba9b925a077e  gcc/testsuite/gfortran.dg/negative_unit.f
! 7a5c853472af3c05a8afc2f8d7ad7adb  gcc/testsuite/gfortran.dg/nesting_1.f90
! eb6af590881f3e995fc6b2c78089f277  gcc/testsuite/gfortran.dg/nullify_1.f
! 3961c09453f94a6cd6afebfe5fbfe111  gcc/testsuite/gfortran.dg/oldstyle_1.f90
! c205a0b166ecdef2ccd1b9b1a0677b97  gcc/testsuite/gfortran.dg/open-options-blanks.f
! 61e7a8977edf731042228fdeb2153529  gcc/testsuite/gfortran.dg/open_new.f90
! 178a850a935984712c450bd9bb00e795  gcc/testsuite/gfortran.dg/open_readonly_1.f90
! b8411fe9cca01b5165020fe5db99ea7f  gcc/testsuite/gfortran.dg/pointer_init_1.f90
! df72a0f18d76ce4a590e15487ed343d8  gcc/testsuite/gfortran.dg/pr15129.f90
! 959b29d4b25b9782764eee005d3ec2e6  gcc/testsuite/gfortran.dg/pr15140.f90
! 4076e43994fe55c557a14fbc0964d3e8  gcc/testsuite/gfortran.dg/pr15164.f90
! e856749a2f697d7f749055113e13a589  gcc/testsuite/gfortran.dg/pr15324.f90
! af4711b1425b100c1efe29baf10c57aa  gcc/testsuite/gfortran.dg/pr15332.f
! 3aea8f49c6af96a3f16a6a8326d3d702  gcc/testsuite/gfortran.dg/pr15754.f90
! 1064decb924f5160c5e679a826f47e77  gcc/testsuite/gfortran.dg/pr15957.f90
! fa8612d52a99bdad91fd1211f25050f2  gcc/testsuite/gfortran.dg/pr15959.f90
! ce647a7a8be76cb5dad07ab0f67b48b7  gcc/testsuite/gfortran.dg/pr16433.f
! ed0421b7aa96b8c646cb1534f0a535f3  gcc/testsuite/gfortran.dg/pr16597.f90
! d4b5dae95f75ea9a415a1afdcf2b6455  gcc/testsuite/gfortran.dg/pr16935.f90
! e6648976e2e071c2d54ab7b1776a2f6c  gcc/testsuite/gfortran.dg/pr16938.f90
! 2bd7746b5b00b3df4fb38ae88daab005  gcc/testsuite/gfortran.dg/pr17090.f90
! 7e681310158e28e86480b73e03ffd9ec  gcc/testsuite/gfortran.dg/pr17143.f90
! 0815bf6f3b4674671db45ef8012b8be8  gcc/testsuite/gfortran.dg/pr17164.f90
! 3f765624084cbc3af1aee73778dc9a89  gcc/testsuite/gfortran.dg/pr17229.f
! 03fff15fe4f67881604c55607a8b3161  gcc/testsuite/gfortran.dg/pr17286.f90
! 222935db052aa742d2280bbda7340c79  gcc/testsuite/gfortran.dg/pr17612.f90
! 48355196bcd7b95718ac99bb45de0103  gcc/testsuite/gfortran.dg/pr17615.f90
! c00caa2a034804b1b8a1cbaa391e67ea  gcc/testsuite/gfortran.dg/pr17706.f90
! 378bc2fdc07549d60eb0494a91012bf2  gcc/testsuite/gfortran.dg/pr17708.f90
! 35b1683ab1fa453e9dabc5f0351359a3  gcc/testsuite/gfortran.dg/pr18025.f90
! 30aebf69198473923b60bbab6cafa05b  gcc/testsuite/gfortran.dg/pr19936_1.f90
! 7fe5c318350a52400c5dbd328ca6b65f  gcc/testsuite/gfortran.dg/pr19936_2.f90
! a21cc4ab33b1cfd66732338936f2a4af  gcc/testsuite/gfortran.dg/pr19936_3.f90
! 16999e75efb8687b92cd083281f45041  gcc/testsuite/gfortran.dg/pr20086.f90
! d5aad218c1875786d4654507193239b3  gcc/testsuite/gfortran.dg/pr20124.f90
! 52eddef2983ea0d77cd52010af4dad4c  gcc/testsuite/gfortran.dg/pr20163-2.f
! 0ffb4d70b4fb6128277f164aae67ce50  gcc/testsuite/gfortran.dg/pr20257.f90
! edfeecfc08651770dbce7ace561a6340  gcc/testsuite/gfortran.dg/pr20480.f90
! 4452fe246950844c9f1a3876a173264b  gcc/testsuite/gfortran.dg/pr20755.f
! 0b0d01a5813fe1eb2b0102648c1b6591  gcc/testsuite/gfortran.dg/promotion.f90
! d92eb71189e4e4f4639096c39859e725  gcc/testsuite/gfortran.dg/read_float_1.f90
! 7919f7fe5728e532ca7141b09ddd62cd  gcc/testsuite/gfortran.dg/real_const_1.f
! 68f10c8f9f2989d7477294a7adb9b04d  gcc/testsuite/gfortran.dg/real_const_2.f90
! bcaaa0a5f38f8f008df73c7fd2535256  gcc/testsuite/gfortran.dg/real_do_1.f90
! b228541dba5ac8fb67ed965213fb7cd7  gcc/testsuite/gfortran.dg/real_index_1.f90
! 7374e874fd37a55d08d2a48e44e60dca  gcc/testsuite/gfortran.dg/reduction.f90
! b6d62abcada60cbdca4e99091f35f5f0  gcc/testsuite/gfortran.dg/ret_array_1.f90
! c5d386002de03f9a79d83852b203a7e9  gcc/testsuite/gfortran.dg/ret_pointer_1.f90
! cfa3c5abdb5c5b8ecbae05161a24979e  gcc/testsuite/gfortran.dg/rewind_1.f90
! cf312106ea57ecf768f6b24b13308511  gcc/testsuite/gfortran.dg/same_name_1.f90
! f880209c4ac6a48f3ed208b28be93cc3  gcc/testsuite/gfortran.dg/scale_1.f90
! ab76721865850a0b6434fc07f1856cd7  gcc/testsuite/gfortran.dg/select_1.f90
! f88e2e63dd6f4af4e0cf6b122d5ce33a  gcc/testsuite/gfortran.dg/select_2.f90
! 6adef87d7db611b1be5b65dd0232ca97  gcc/testsuite/gfortran.dg/select_3.f90
! a8915b84412b8a80d6a5acd416b43e64  gcc/testsuite/gfortran.dg/select_4.f90
! b97695b24b74bb431ea0330e34f8b523  gcc/testsuite/gfortran.dg/select_5.f90
! c87b3782a45f9a2204d8af5980f03bfe  gcc/testsuite/gfortran.dg/shape_1.f90
! 70de57c924e76dc6d1e498e2259aeb38  gcc/testsuite/gfortran.dg/simpleif_1.f90
! 85bef460546bfc479debba6e0beb0a8f  gcc/testsuite/gfortran.dg/spec_expr_1.f90
! 71087dd3d8e303803a7d757baed6544f  gcc/testsuite/gfortran.dg/stfunc_2.f90
! e6d56b3f1f4b771e51631f96a7561f4c  gcc/testsuite/gfortran.dg/string_ctor_1.f90
! 230f3ac65d829fdd4d14a340c2dcc070  gcc/testsuite/gfortran.dg/string_pad_trunc.f90
! ba26063ec693e7a4394e5ff26e3562a8  gcc/testsuite/gfortran.dg/substr_1.f90
! 5424f3bff4c9d1e6157821ae991f0b7d  gcc/testsuite/gfortran.dg/tiny_1.f90
! 4daea39a2fe2e879af278efc47b3c78c  gcc/testsuite/gfortran.dg/tiny_2.f90
! 3fbf4177ee06fcb76a0344d70e79d1b8  gcc/testsuite/gfortran.dg/use_allocated_1.f90
! b03597d62ffc90b37e2a1765bda01163  gcc/testsuite/gfortran.dg/write_0_pe_format.f90
! fa9ae1cc2a2c40ce2c42f46b13c5f789  gcc/testsuite/gfortran.dg/write_to_null.f90
! 4f06bbd93341caab57317817f81000ef  gcc/testsuite/gfortran.fortran-torture/ChangeLog.g95
! 772f1b6dc3c8d14d2867d2107031100f  gcc/testsuite/gfortran.fortran-torture/compile/actual.f90
! 2e320a947b269f6bf9a674a28bf49962  gcc/testsuite/gfortran.fortran-torture/compile/allocate.f90
! 82775aea043bb1c46d8cb089803279f4  gcc/testsuite/gfortran.fortran-torture/compile/ambig.f90
! dcf134ed5f2823525e631805c8ce9273  gcc/testsuite/gfortran.fortran-torture/compile/arrayio.f90
! bb59bc612e4ff3905614ceeae7d89150  gcc/testsuite/gfortran.fortran-torture/compile/bergervoet2.f90
! f812682c32e9e933e584b96ba6e3227e  gcc/testsuite/gfortran.fortran-torture/compile/compile.exp
! d34063f5c0cc449ee1e78199c2bc37d9  gcc/testsuite/gfortran.fortran-torture/compile/contained_1.f90
! beef214f45f74ba36c7a5a4a3952c926  gcc/testsuite/gfortran.fortran-torture/compile/contained_2.f90
! d039d16d7f0a08a436419a71fc41edc0  gcc/testsuite/gfortran.fortran-torture/compile/contained_3.f90
! 5808483897d3f167fdbeb742a7869a99  gcc/testsuite/gfortran.fortran-torture/compile/contained_4.f90
! 546708a4c39eec692248059892e0043b  gcc/testsuite/gfortran.fortran-torture/compile/contained_5.f90
! b75c3a60997c0699281da4cc41f1a40d  gcc/testsuite/gfortran.fortran-torture/compile/convert.f90
! 1b2b38469bf7a98f9c81fcfafa9a3649  gcc/testsuite/gfortran.fortran-torture/compile/data_1.f90
! 032d6b2491065b6b6470ebec375bfe0a  gcc/testsuite/gfortran.fortran-torture/compile/do_1.f90
! dc29bbc52186e55755f6f1f337f406a4  gcc/testsuite/gfortran.fortran-torture/compile/dummyfn.f90
! 4c258bc39228e86793ad95c3923fcfdd  gcc/testsuite/gfortran.fortran-torture/compile/empty_interface_1.f90
! 748d960a121dcac69ef600c8bb324620  gcc/testsuite/gfortran.fortran-torture/compile/emptyif.f90
! 79dabd6ebc6797ac54c557790956f6f2  gcc/testsuite/gfortran.fortran-torture/compile/fnresvar.f90
! a64fc0d523f699c2975df76560185a51  gcc/testsuite/gfortran.fortran-torture/compile/gen_interf.f90
! be99b8777a343a29919d27d328e75169  gcc/testsuite/gfortran.fortran-torture/compile/implicit.f90
! 05041cfb5a32f06385b7fee2e4c80bca  gcc/testsuite/gfortran.fortran-torture/compile/implicit_1.f90
! 99153ab88822fc655bbfd28d745e61c4  gcc/testsuite/gfortran.fortran-torture/compile/implicit_2.f90
! 256398ecadc4d00c822e1458eb7e2394  gcc/testsuite/gfortran.fortran-torture/compile/inquiry_1.f90
! 1ce69ce87e1dc1a965a5a5992c0d3bb7  gcc/testsuite/gfortran.fortran-torture/compile/io_end.f90
! ffab36f9b71dbe7b3f39b6a912963d1b  gcc/testsuite/gfortran.fortran-torture/compile/mloc.f90
! 0559f17e60ca2766bf8a248f7626b2a9  gcc/testsuite/gfortran.fortran-torture/compile/module_common.f90
! 11a9716dba3d048be4111893d8857991  gcc/testsuite/gfortran.fortran-torture/compile/module_expr.f90
! 5c4d87a9e622304963114c87208ced9b  gcc/testsuite/gfortran.fortran-torture/compile/module_proc.f90
! 9e9300f988d64b3397a4e35f9ba63bb9  gcc/testsuite/gfortran.fortran-torture/compile/module_result.f90
! a895293476b8909ca2dd6cd3808f1a25  gcc/testsuite/gfortran.fortran-torture/compile/name_clash.f90
! 9f61d5747f719f27ca0f7848d34011e3  gcc/testsuite/gfortran.fortran-torture/compile/named_args.f90
! 6cba82b767a5a95d18cb7d6700dc0fbc  gcc/testsuite/gfortran.fortran-torture/compile/named_args_2.f90
! f490e694b59104dd03f0c8a253b5d6cf  gcc/testsuite/gfortran.fortran-torture/compile/nested.f90
! a4007eed3efba0125bcf797792cd3e5e  gcc/testsuite/gfortran.fortran-torture/compile/noncontinuation_1.f
! 6ed3cf4eaf6247dc7dcf33e32bee0f62  gcc/testsuite/gfortran.fortran-torture/compile/parameter_1.f90
! cef7fda06429875db1e236b1b8b0e693  gcc/testsuite/gfortran.fortran-torture/compile/parameter_2.f90
! 7602f8cc2d0ebd2bf0bb974069a764e0  gcc/testsuite/gfortran.fortran-torture/compile/shape_reshape.f90
! d5ee9d72b3b02f47b393934ca0c89627  gcc/testsuite/gfortran.fortran-torture/compile/stoppause.f90
! 0be215e4a53f9370c44eaa153bf1ed6e  gcc/testsuite/gfortran.fortran-torture/compile/strparm_1.f90
! e5223ad4fc6d2bb21431f3f9da2e0f36  gcc/testsuite/gfortran.fortran-torture/compile/write.f90
! fce86c62dd49c3161a99ac4ae1b7d887  gcc/testsuite/gfortran.fortran-torture/execute/a_edit_1.f90
! 4f37a795d4f1865d6db01207cabc5863  gcc/testsuite/gfortran.fortran-torture/execute/adjustr.f90
! f1ff939456fdbc0913fc5244e123bf14  gcc/testsuite/gfortran.fortran-torture/execute/allocate.f90
! ed7a09faf95b18a92a2f26439d4ce4e4  gcc/testsuite/gfortran.fortran-torture/execute/alternate_return.f90
! 58cecb6385a9dece51c5f9ec1e9b0ab5  gcc/testsuite/gfortran.fortran-torture/execute/args.f90
! b73f4a9fe4eec4cdcf7a0fdbd82fadff  gcc/testsuite/gfortran.fortran-torture/execute/arithmeticif.f90
! 40f9bd50c220b9ddb6556c7065d68b8b  gcc/testsuite/gfortran.fortran-torture/execute/arrayarg.f90
! b472e8d78837e7cd1c046689ca5f4ef6  gcc/testsuite/gfortran.fortran-torture/execute/arrayarg2.f90
! 798813b7b4c7d039cdb2fa14212172c1  gcc/testsuite/gfortran.fortran-torture/execute/arraysave.f90
! 64ca863d45841b8773c29cdf77fcc757  gcc/testsuite/gfortran.fortran-torture/execute/assumed_size.f90
! 66c355e8d88312f38fce402649874dd0  gcc/testsuite/gfortran.fortran-torture/execute/backspace.f90
! 5a6ba37705b7c1240a304836423b1593  gcc/testsuite/gfortran.fortran-torture/execute/bounds.f90
! 69c3946d6613348abc7528fbcc7132db  gcc/testsuite/gfortran.fortran-torture/execute/character_passing.f90
! 18efd19454ef000fdbc1ef3a7678b15f  gcc/testsuite/gfortran.fortran-torture/execute/character_select_1.f90
! 488da2c4aee3238172453ff7220515fb  gcc/testsuite/gfortran.fortran-torture/execute/cmplx.f90
! fbdfdad81e30f1354e5c67fbbb95c39f  gcc/testsuite/gfortran.fortran-torture/execute/common.f90
! d91e08b0f5e67a31244058a83c43f0fa  gcc/testsuite/gfortran.fortran-torture/execute/common_2.f90
! a1591a604184f400b0d315c2bb47e370  gcc/testsuite/gfortran.fortran-torture/execute/common_init_1.f90
! 363e95e5a35bbe189a4b3b20920ce85d  gcc/testsuite/gfortran.fortran-torture/execute/common_size.f90
! dcf5cec7f28755b47e0142a736f21553  gcc/testsuite/gfortran.fortran-torture/execute/constructor.f90
! 2e599cb99e4b7bb3173a83d1c5479443  gcc/testsuite/gfortran.fortran-torture/execute/contained.f90
! cf30259086a317d1309d3e396980d579  gcc/testsuite/gfortran.fortran-torture/execute/contained2.f90
! f66afdc56e9f35535b2b4f3c0b28b826  gcc/testsuite/gfortran.fortran-torture/execute/contained_3.f90
! cc7a2018eff57f2e9bf42015366bc3cf  gcc/testsuite/gfortran.fortran-torture/execute/csqrt_1.f90
! ffa5a0675c25b284711603a3bfc14624  gcc/testsuite/gfortran.fortran-torture/execute/data.f90
! e55322e24a9d4dbccf359cfa253343aa  gcc/testsuite/gfortran.fortran-torture/execute/data_2.f90
! 52fd499e8fede8a1bf525f76bc312fdb  gcc/testsuite/gfortran.fortran-torture/execute/data_3.f90
! 86f50fdf7db294e69d74df7a734d79d4  gcc/testsuite/gfortran.fortran-torture/execute/date_time_1.f90
! e5eef72370fb50f140a5a499c08f1c55  gcc/testsuite/gfortran.fortran-torture/execute/dep_fails.f90
! d4fa40fb9d469dab6545305cbf28cadb  gcc/testsuite/gfortran.fortran-torture/execute/der_init.f90
! da9eb78d7804738b3f511bae59c3a4cd  gcc/testsuite/gfortran.fortran-torture/execute/der_init_2.f90
! 7514d4d3ef66ec82555f6d8fc331ed66  gcc/testsuite/gfortran.fortran-torture/execute/der_init_3.f90
! 11ddb20e6063cbfb51b3ac736d6429ce  gcc/testsuite/gfortran.fortran-torture/execute/der_init_4.f90
! b54a1a7e6b302d9233e3170b2dbee246  gcc/testsuite/gfortran.fortran-torture/execute/der_init_5.f90
! b8e86c08143b4e1c7f971c71c4ea1d7b  gcc/testsuite/gfortran.fortran-torture/execute/der_io.f90
! 5dd6a207310cc981b88619561d15adf3  gcc/testsuite/gfortran.fortran-torture/execute/der_point.f90
! 472216ad91c9e3a3ab10c212c16bc52b  gcc/testsuite/gfortran.fortran-torture/execute/der_type.f90
! 302edd7e0cd150359fbf71c467988567  gcc/testsuite/gfortran.fortran-torture/execute/direct_io.f90
! e25ff9fa4944309fa0b43e64bc42e976  gcc/testsuite/gfortran.fortran-torture/execute/elemental.f90
! 08cb46e799697e4ec0c7dc6b6a4234d9  gcc/testsuite/gfortran.fortran-torture/execute/empty_format.f90
! ef8d6bb021bb240908ae614c67fe1db9  gcc/testsuite/gfortran.fortran-torture/execute/emptyif.f90
! 42a641078f071973c4952980fe881f4e  gcc/testsuite/gfortran.fortran-torture/execute/equiv_1.f90
! 5468c314e679782b098df90704b52287  gcc/testsuite/gfortran.fortran-torture/execute/equiv_init_1.f90
! 72141e177016473bd24abe1b05bf54bb  gcc/testsuite/gfortran.fortran-torture/execute/execute.exp
! e29ba4ef7327796599cfa794be5f281c  gcc/testsuite/gfortran.fortran-torture/execute/f2_edit_1.f90
! 6f6d56288c39e4c068cbc93b2c642881  gcc/testsuite/gfortran.fortran-torture/execute/forall.f90
! 906a73a3f92ed05efcd5b5d1be488fbd  gcc/testsuite/gfortran.fortran-torture/execute/forall_1.f90
! d4a49bdc124f5a14571070b2b50b6215  gcc/testsuite/gfortran.fortran-torture/execute/forall_2.f90
! 11a18bc890ede2f9166f09770df2eb77  gcc/testsuite/gfortran.fortran-torture/execute/forall_3.f90
! b6834773296e9e937a07811c3c389234  gcc/testsuite/gfortran.fortran-torture/execute/forall_4.f90
! 8598114da531bdf1aec88489e18f65e0  gcc/testsuite/gfortran.fortran-torture/execute/forall_5.f90
! 80c54ef7568b0de173572f631541ff7e  gcc/testsuite/gfortran.fortran-torture/execute/forall_6.f90
! bea9d994c2bf04f9c8d8d84abd32f53e  gcc/testsuite/gfortran.fortran-torture/execute/function_module_1.f90
! d1ab1384ad1cf4f9150f33d8fe428965  gcc/testsuite/gfortran.fortran-torture/execute/getarg_1.f90
! 3981599206c2b6dfc9928185121da7e1  gcc/testsuite/gfortran.fortran-torture/execute/hollerith.f90
! c3d8016114797f856f6503100a4715cd  gcc/testsuite/gfortran.fortran-torture/execute/initialization_1.f90
! e2e20fa5fba30aa404524bd89e9b5bfe  gcc/testsuite/gfortran.fortran-torture/execute/initializer.f90
! a1bf32e3034f8ae442331ac7fb24e1d5  gcc/testsuite/gfortran.fortran-torture/execute/inquire_1.f90
! 32edf1d006210088c2a8acb23fdae81d  gcc/testsuite/gfortran.fortran-torture/execute/inquire_2.f90
! 58c651fb3ffe22a1eb818b1c37b56f1f  gcc/testsuite/gfortran.fortran-torture/execute/inquire_3.f90
! ecfbc5792be8146dc4180ddf82227b32  gcc/testsuite/gfortran.fortran-torture/execute/inquire_4.f90
! 4e62bf0859394332d134e10d40b398f6  gcc/testsuite/gfortran.fortran-torture/execute/integer_select.f90
! 56dae04ea5d5076cfc1b28905b5aa772  gcc/testsuite/gfortran.fortran-torture/execute/integer_select_1.f90
! 3fcbfc408dd0207ced332d7b7960f27c  gcc/testsuite/gfortran.fortran-torture/execute/internal_write.f90
! 0a3df575abfff28d1da0eeeb30184883  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_abs.f90
! 63a148eb2bed7d14b39d0df1717deacf  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_achar.f90
! fa6f7e52457d7f45c5bfadd9801d4d45  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_aint_anint.f90
! 80f68ec08c8c6a20a5a3117b390eb5ea  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_anyall.f90
! d5356d5237856d9eba7505ced7e20af8  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_associated.f90
! 50ae824a3ee6951777b67092ac94d7eb  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_associated_2.f90
! ff1f777d1ae4e07d3aadee44cd11b71a  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_bitops.f90
! 7662bfeff4c60bfeb2cf15e81801c700  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_count.f90
! e4bb83b1fe2f5ca6f41a44d4da522d34  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_cshift.f90
! a5326ecd8d7c980f2d935aad5d2ed8ba  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_dim.f90
! b79599b0d571e57edf5d0ecd27306f37  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_dotprod.f90
! 5b1372525357090f7dfe84a956e82ee6  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_dprod.f90
! 2f16e672213b188887608ffd7788867f  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_dummy.f90
! c81fb8b1b6a644e34e661d52d4cf74f2  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_eoshift.f90
! 1c5fa98b3cf5a58888be45a3451dc12a  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_fraction_exponent.f90
! 185dbe70ca3e91e8bbbfdb86a33aa985  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_fraction_exponent.x
! 1b88c10d87b9e792768daabc5b164fa6  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_index.f90
! 19d6539b4eb27cc34085a0343cb5f15d  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_integer.f90
! 7a02fd937fa702a8901ac0e2a6756087  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_len.f90
! 17d3d1a9ae8b1572ed2c5aa29a939f64  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_matmul.f90
! 2de0d8d705988b1868b25d486815fbd1  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_merge.f90
! 5e2517bddcd04b61441503ed4217492f  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_minmax.f90
! d02538f90140f2dfe47d1ad7e434ce74  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_mmloc.f90
! 116e5377f2f9d32aaa8ec8d6f46029e3  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_mmloc_2.f90
! 1017a4b370e9ed70cf51a9fa558bcf55  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_mmloc_3.f90
! 42f250604a456f57d2f1c3e3d13cfa55  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_mmloc_4.f90
! 3c510b6fecd08c7216ae4334ff254993  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_mmval.f90
! 9c6b3fa1016a4ffae74a04fd15807e73  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_mod_ulo.f90
! 0a1dce4e8727062327b411cc43a46996  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_mvbits.f90
! 666e3adc6f1276b62df676914719cda6  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_nearest.f90
! 185dbe70ca3e91e8bbbfdb86a33aa985  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_nearest.x
! 82841463a6773a347f8c5f66c59180aa  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_pack.f90
! 821ad5126cb0337071c9c43b03c831ad  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_present.f90
! 363d4bb45f6743d24b1c3f77f247edba  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_product.f90
! 12832a90cdf4ed95adf9aed5ff8986ff  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_rrspacing.f90
! c1c7cab1fdd5a6b21c6506ae2ee96d84  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_scale.f90
! 50cdcb807afd466289a4a97c20366943  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_set_exponent.f90
! 185dbe70ca3e91e8bbbfdb86a33aa985  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_set_exponent.x
! 88ad7a7cd00e8f4ae8775f46b93a03ff  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_shape.f90
! 42fe21051f5d74571940b5526cb2e5d8  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_si_kind.f90
! 207689fd6cb5c5d42348ecf02855227f  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_sign.f90
! 7fcb19c32afd0953c3b87c1ed4c1cbcf  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_size.f90
! 982cc897721baf0aec02f03bafc9804e  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_spacing.f90
! 7be7f5057efb508b68154de152d9b9b2  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_spread.f90
! b5555b0f9532feabdd947af1b2b0d53c  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_sr_kind.f90
! 9c782044b091a4c54b98a6dec143633a  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_sum.f90
! ff484a62e047ae046f45567bfa04a945  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_transpose.f90
! 55614a89854d4459978c5e0f0a25d723  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_trim.f90
! c044c2c963119755dbabbc11b36a3b5a  gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_unpack.f90
! b82301385fecae86e80cd5397e93da37  gcc/testsuite/gfortran.fortran-torture/execute/iolength_1.f90
! 66bfb619cbdccbeb223b6516d2b74583  gcc/testsuite/gfortran.fortran-torture/execute/iolength_2.f90
! 2825fc33b6a5a1dc03fce6b25db1e5c3  gcc/testsuite/gfortran.fortran-torture/execute/iolength_3.f90
! c448f6f9f4540461310c26e7760b9325  gcc/testsuite/gfortran.fortran-torture/execute/list_read_1.f90
! d98c16e21423908933498ab9989dc4c8  gcc/testsuite/gfortran.fortran-torture/execute/logical_select_1.f90
! 2a2fb3d04c9fd71184e27386972106ae  gcc/testsuite/gfortran.fortran-torture/execute/mainsub.f90
! b8352eafb6444e9532a115b42dbc1914  gcc/testsuite/gfortran.fortran-torture/execute/math.f90
! c4e10e78c39a9ffb239ab82829d5b575  gcc/testsuite/gfortran.fortran-torture/execute/module_init_1.f90
! aa3df6f01d468f8fe2f9aa6ab8b989eb  gcc/testsuite/gfortran.fortran-torture/execute/module_interface.f90
! cb027452db3c4db0a24aacba8e099053  gcc/testsuite/gfortran.fortran-torture/execute/module_interface_2.f90
! 3d06947d09f055c84e158f6cbf88a58e  gcc/testsuite/gfortran.fortran-torture/execute/mystery_proc.f90
! 2a908e9f3e99a6b5af7f730bb3e19030  gcc/testsuite/gfortran.fortran-torture/execute/nan_inf_fmt.f90
! 185dbe70ca3e91e8bbbfdb86a33aa985  gcc/testsuite/gfortran.fortran-torture/execute/nan_inf_fmt.x
! 3d8b1c4567e12bc884019922ef599f27  gcc/testsuite/gfortran.fortran-torture/execute/nestcons.f90
! 6ca1d288706e88a63c2d2db40d0d3426  gcc/testsuite/gfortran.fortran-torture/execute/nullarg.f90
! a644c9467b5c98a9d6122515f67307d4  gcc/testsuite/gfortran.fortran-torture/execute/open_replace.f90
! 1c729321e7f9b26a72efb7a9d5fcb306  gcc/testsuite/gfortran.fortran-torture/execute/optstring_1.f90
! ae40217bed30e1ba041b0ddce9f64348  gcc/testsuite/gfortran.fortran-torture/execute/parameter_1.f90
! 8afc7939f15729e23fbb5741016cf08a  gcc/testsuite/gfortran.fortran-torture/execute/parameter_2.f90
! bf42a844d5392372f628d55dcd25a0ed  gcc/testsuite/gfortran.fortran-torture/execute/partparm.f90
! 1b3c8103e577d6573dbb820adbe8d138  gcc/testsuite/gfortran.fortran-torture/execute/plusconst_1.f90
! 240543a22e9182330b10db910c8569cc  gcc/testsuite/gfortran.fortran-torture/execute/power.f90
! 78df18b9400c1b2f401164418dc104c0  gcc/testsuite/gfortran.fortran-torture/execute/procarg.f90
! 54b26651618ba6afa7aae0c3b8994e66  gcc/testsuite/gfortran.fortran-torture/execute/ptr.f90
! eae8dc541702830d5c63bf337333c15b  gcc/testsuite/gfortran.fortran-torture/execute/random_1.f90
! 0a82e51f37a5f5e8a02befe2b38757dc  gcc/testsuite/gfortran.fortran-torture/execute/random_2.f90
! 21bd552a5f13dac27f928684ea6d4b98  gcc/testsuite/gfortran.fortran-torture/execute/random_init.f90
! 0d6f215881f586b1c663f21801ef0c14  gcc/testsuite/gfortran.fortran-torture/execute/read_eof.f90
! 63e101d84ac93b10d7fb272568c3da6f  gcc/testsuite/gfortran.fortran-torture/execute/read_null_string.f90
! ae6603961f751b81b00fdd411932f246  gcc/testsuite/gfortran.fortran-torture/execute/retarray.f90
! 09ec49247f4f4175745fd200841e1112  gcc/testsuite/gfortran.fortran-torture/execute/retarray_2.f90
! b0d4bea247f90bad5b3e070067a952c1  gcc/testsuite/gfortran.fortran-torture/execute/scalarize.f90
! cbe630d093895dfc907df7134c9956a2  gcc/testsuite/gfortran.fortran-torture/execute/scalarize2.f90
! 50f47fbaa1ba0e95584369952871d97e  gcc/testsuite/gfortran.fortran-torture/execute/scalarize3.f90
! 99950c57c0956054d3030d759dd96887  gcc/testsuite/gfortran.fortran-torture/execute/select_1.f90
! 5b3053f54aaa301e8a5b083b1b2f746d  gcc/testsuite/gfortran.fortran-torture/execute/seq_io.f90
! 51581c56c77cc5e166a855693014ded3  gcc/testsuite/gfortran.fortran-torture/execute/slash_edit.f90
! 6e75408986788e87e2f419f12dac0e50  gcc/testsuite/gfortran.fortran-torture/execute/spec_abs.f90
! ca661ed7a48605a109a98c0b0c3ab89c  gcc/testsuite/gfortran.fortran-torture/execute/specifics.f90
! 0c00ef97149f277a068f2e379c1ab7a4  gcc/testsuite/gfortran.fortran-torture/execute/st_function.f90
! 47a31478065dbffa960004c1427bf08f  gcc/testsuite/gfortran.fortran-torture/execute/st_function_1.f90
! 8bb888d9f7549c153d7c290d6ba3b3f4  gcc/testsuite/gfortran.fortran-torture/execute/st_function_2.f90
! 1f90a7a2f8406f1adcab8787f5ca6ec9  gcc/testsuite/gfortran.fortran-torture/execute/stack_varsize.f90
! 814b36214655431d9f0ad1b5c00485de  gcc/testsuite/gfortran.fortran-torture/execute/straret.f90
! 11910c087fcaa75005dd6fe790040c25  gcc/testsuite/gfortran.fortran-torture/execute/strarray_1.f90
! 5fef8edc9d5e218173e1cae6964813e0  gcc/testsuite/gfortran.fortran-torture/execute/strarray_2.f90
! 8f11c95e1d90beca0ab4cf297ab795ba  gcc/testsuite/gfortran.fortran-torture/execute/strarray_3.f90
! 7ec3a3984b13a2907dde23c185087983  gcc/testsuite/gfortran.fortran-torture/execute/strarray_4.f90
! e27eedd059455ffd918a120035cf38e3  gcc/testsuite/gfortran.fortran-torture/execute/strcmp.f90
! 2035f74375bc30dabefa35602c007b28  gcc/testsuite/gfortran.fortran-torture/execute/strcommon_1.f90
! 0887a951d44c4d6a247dcb3ad37fc210  gcc/testsuite/gfortran.fortran-torture/execute/string.f90
! 0f688426b64ff7d764e6887a3a99de98  gcc/testsuite/gfortran.fortran-torture/execute/strlen.f90
! 66a75b57c29375ebeb2ee2a330f1a1d7  gcc/testsuite/gfortran.fortran-torture/execute/strret.f90
! 7be5bd8af03d50041a91a64fb6b0dc67  gcc/testsuite/gfortran.fortran-torture/execute/t_edit.f90
! 431c051aa9b4cdf90c28742e78717498  gcc/testsuite/gfortran.fortran-torture/execute/test_slice.f90
! f75d29db32d5d3079b4c63f2f36072be  gcc/testsuite/gfortran.fortran-torture/execute/unopened_unit_1.f90
! b151b8faf66986b8e14e9a21043e59fc  gcc/testsuite/gfortran.fortran-torture/execute/userop.f90
! 166523115ac3cb51fddead7ffd929b79  gcc/testsuite/gfortran.fortran-torture/execute/where_1.f90
! 53c6a3de9220c2ac692ebd9ce2203126  gcc/testsuite/gfortran.fortran-torture/execute/where_2.f90
! 65c22e3815e83f69d82c4e496232b0c0  gcc/testsuite/gfortran.fortran-torture/execute/where_3.f90
! 8925b1eab2abe9ccb3f3dbc6b516b076  gcc/testsuite/gfortran.fortran-torture/execute/where_4.f90
! 196672be0ab0a3f66d1e713fc9e6a8fc  gcc/testsuite/gfortran.fortran-torture/execute/where_5.f90
! 71c8286d3f667f42a71121212f6d0b0b  gcc/testsuite/gfortran.fortran-torture/execute/where_6.f90
! d67eed00ffebcafb164b4683c564d121  gcc/testsuite/gfortran.fortran-torture/execute/write_a_1.f90
! be634afd323491ebdde9405975234d0c  gcc/testsuite/gfortran.fortran-torture/execute/write_logical.f90
! 00a1b7e434c97a783c54556262ece46c  gcc/testsuite/lib/c-torture.exp
! 7d97846c60e0f46ce9d88f90c1beb1fc  gcc/testsuite/lib/compat.exp
  d8270456fac4be6a3812490017727d4c  gcc/testsuite/lib/copy-file.exp
  54afae923e7da5a4d95b970aebc134ae  gcc/testsuite/lib/dg-pch.exp
! 0e980397ac5f9c5133916bcfa98d3347  gcc/testsuite/lib/file-format.exp
! e9072af761db7461737d4fec3c616b78  gcc/testsuite/lib/fortran-torture.exp
  24a7ac64ddfadbdc83e2ce7f02173040  gcc/testsuite/lib/g++-dg.exp
! de191daf14f623fefcaecdf6fc336687  gcc/testsuite/lib/g++.exp
! 0b9e8751ed24762345c2a144e166d43d  gcc/testsuite/lib/gcc-defs.exp
! 4cafdd9846385664d9652f80e0d016de  gcc/testsuite/lib/gcc-dg.exp
! 079c573944f0ab529436a0c870fd7657  gcc/testsuite/lib/gcc.exp
  400b24a52cc57f3f76abc7ff2aae506e  gcc/testsuite/lib/gcov.exp
+ d51971876c8fe45eac0784b5db39334f  gcc/testsuite/lib/gfortran-dg.exp
+ 908ed9d8a685b9d1bcb93a32f332f635  gcc/testsuite/lib/gfortran.exp
  c0088686e90dd155a799d6b7f957cac3  gcc/testsuite/lib/mike-g++.exp
  3daa2cd18809330c70d78e1a9fe5ca51  gcc/testsuite/lib/mike-gcc.exp
  9523d56141311736863ec362b5fc5659  gcc/testsuite/lib/objc-dg.exp
! 9d383a5da9297846ee333dc02c6f6e4a  gcc/testsuite/lib/objc-torture.exp
! d6ac46978b22cf7b06c0f37203e2f69b  gcc/testsuite/lib/objc.exp
! 70fd8be249e729a6bd63bf3a91703cae  gcc/testsuite/lib/profopt.exp
  e862e52b520aedebcd4f9c1f0be15d15  gcc/testsuite/lib/prune.exp
! 0798b8407ca80c1a3951e4cf485af77f  gcc/testsuite/lib/scanasm.exp
! a15abbb4adc7f0811e295eb23eb9f164  gcc/testsuite/lib/scantree.exp
! 940f48d861d40a7ffe3ed9c727774e93  gcc/testsuite/lib/target-libpath.exp
! 9c08c9201390d31428e89125d2860c52  gcc/testsuite/lib/target-supports-dg.exp
! 47876258d3b200f746ff2a98c52b529b  gcc/testsuite/lib/target-supports.exp
! 26e91887cef2664b6e275a1c83457b5f  gcc/testsuite/lib/treelang-dg.exp
! bee3d1101d9496b0fa2cac541de90c0f  gcc/testsuite/lib/treelang.exp
! 6a9a7dd1080d2483a26b06b447153f86  gcc/testsuite/lib/wrapper.exp
  3b8fd8c2ee22e0099d80e4fa89e2befc  gcc/testsuite/objc.dg/alias.m
  a1be9e5501b4997f5240469850890333  gcc/testsuite/objc.dg/anon-1.m
  78ba3f1e49ecbf82a9c24165dae0c507  gcc/testsuite/objc.dg/bitfield-1.m
! 49675f4f06303a402845baa4ba77c171  gcc/testsuite/objc.dg/bitfield-2.m
  1be372102b55990318c21d0b244f840b  gcc/testsuite/objc.dg/bitfield-3.m
! 61e7138c23da7374ed5112117f28b6f2  gcc/testsuite/objc.dg/bitfield-4.m
  1c24ac889eef3749cd9397383ac17ed3  gcc/testsuite/objc.dg/call-super-1.m
! abf43990194997cd63c77e7e622eaef5  gcc/testsuite/objc.dg/call-super-2.m
  cd83986f81e84d76c36942eb580590be  gcc/testsuite/objc.dg/call-super-3.m
  d631117350445f6fb36053f1c97b7cbf  gcc/testsuite/objc.dg/category-1.m
  e14f8ce7c1cf0a9aa852e809639149ff  gcc/testsuite/objc.dg/class-1.m
  d784ebcfd5db343ad8531e94a46f8eae  gcc/testsuite/objc.dg/class-2.m
+ 02ce8e0ba82ba1133faa43d3a834cd8a  gcc/testsuite/objc.dg/class-protocol-1.m
  bd8e85515d3a7bdabefec148b5329b79  gcc/testsuite/objc.dg/comp-types-1.m
  c8326ae2bb2884e806cd4cc176d05d43  gcc/testsuite/objc.dg/comp-types-2.m
  7407b86bd67a0dd84bd0f73b4e4da009  gcc/testsuite/objc.dg/comp-types-3.m
  199316103e184c26eb6c15eedc25d23d  gcc/testsuite/objc.dg/comp-types-4.m
  83ab486d0cad3a10acc0c565219f027f  gcc/testsuite/objc.dg/comp-types-5.m
  934ee49848b122ad7a2a77355b260571  gcc/testsuite/objc.dg/comp-types-6.m
+ ff192eb53975468b7f7bfd43698d8b9e  gcc/testsuite/objc.dg/comp-types-7.m
  7956ed2705023777b0d68e104790ebec  gcc/testsuite/objc.dg/const-str-1.m
  1ce94eed7fce057599c1e1a9456ba608  gcc/testsuite/objc.dg/const-str-2.m
! 6a50f3f71cf41bbdcd0e9a0b04df0684  gcc/testsuite/objc.dg/const-str-3.m
  1bcd6b46dbd2ac43660f1eb4cb5363ee  gcc/testsuite/objc.dg/const-str-4.m
  bbac855c2d8cf350ef4f369f315f1657  gcc/testsuite/objc.dg/const-str-5.m
  24a5bd21c3bb3a08c13834250039d746  gcc/testsuite/objc.dg/const-str-6.m
+ 5bdc434a83e0b999035fb3eefc7b9367  gcc/testsuite/objc.dg/const-str-7.m
+ 50fc79560005c6450b51a29f5b9145a7  gcc/testsuite/objc.dg/const-str-8.m
+ 28578de5467f9bb74c92c744cd76bd7b  gcc/testsuite/objc.dg/const-str-9.m
  2e14a155dd27e09e146716eaefa227d5  gcc/testsuite/objc.dg/defs.m
! 9fb0d0425de67ea8d0f344eebdeef247  gcc/testsuite/objc.dg/desig-init-1.m
! 35496e95171f548a40cf930fea45d49f  gcc/testsuite/objc.dg/desig-init-2.m
  d334afd3379dd7cf955835b80e3720df  gcc/testsuite/objc.dg/dg.exp
  a12565c5f06257f835c09c8bb6522085  gcc/testsuite/objc.dg/encode-1.m
  c12c0338abec7667befc0ff72f62f05c  gcc/testsuite/objc.dg/encode-2.m
  ca8454136d5c683a4dd611b9f0c2e1cb  gcc/testsuite/objc.dg/encode-3.m
  5e347f3323974b2009b0aeac1fd83a2e  gcc/testsuite/objc.dg/encode-4.m
+ 9b1f4a8b5280d2a7ec591a74c0d1ca0d  gcc/testsuite/objc.dg/encode-5.m
  d87ff51e256fd6af045acce1094cbbfa  gcc/testsuite/objc.dg/fsyntax-only.m
  061d01fdea5bf45169a2c496a30f8ef4  gcc/testsuite/objc.dg/func-ptr-1.m
+ 223c5b08704c54ac38d49dc9f2b8d723  gcc/testsuite/objc.dg/func-ptr-2.m
  d77ab725798547aaec5fe03dfdd02495  gcc/testsuite/objc.dg/fwd-proto-1.m
  eab1faf4c1cef2d8e28cb203efc366fc  gcc/testsuite/objc.dg/gnu-runtime-1.m
  e48888b66789fae4562e3b5eaf6c8c76  gcc/testsuite/objc.dg/headers.m
! 7f354935cc62656cf6faf10233b8a719  gcc/testsuite/objc.dg/id-1.m
! 3f1a95dedf82c1e5a0e6653a7175d383  gcc/testsuite/objc.dg/image-info.m
  ef027ba6682833a14c376b2fcb64444e  gcc/testsuite/objc.dg/local-decl-1.m
+ ad6d4ecb4a2310dd80782a448b073bd9  gcc/testsuite/objc.dg/local-decl-2.m
  685a6ee5e2f3b80ff14b507e3986b729  gcc/testsuite/objc.dg/method-1.m
  c45c97b76d675ea697b68fb9bd8ded2a  gcc/testsuite/objc.dg/method-10.m
  d7d1b004c64569190a3a6e3a1adcfe2a  gcc/testsuite/objc.dg/method-11.m
  956a4f445f1949a644580e9b460afe4b  gcc/testsuite/objc.dg/method-12.m
  c56d69a0a005d96f4238a4bc5908eb47  gcc/testsuite/objc.dg/method-13.m
+ c0e3440d87797991072d80bcf576ef1f  gcc/testsuite/objc.dg/method-14.m
  f00cd88add91ecc5ecc2a311e5080729  gcc/testsuite/objc.dg/method-2.m
  5b3115a64c7b7b3e18e5d5a8d232e96b  gcc/testsuite/objc.dg/method-3.m
  c1c6ac69f9fb8fa359b8781a4519a01a  gcc/testsuite/objc.dg/method-4.m
! 110bc97387c9f9bf71cbcfdd361115e0  gcc/testsuite/objc.dg/method-5.m
! da273c7f3acb8812243a023efda81ef9  gcc/testsuite/objc.dg/method-6.m
  2ebbeaa351d7d360e014d26057d3bf24  gcc/testsuite/objc.dg/method-7.m
  172164daa5b2292983d23e0e5d5a94eb  gcc/testsuite/objc.dg/method-8.m
! b982436a7b43404f54f3fb49e38ce1be  gcc/testsuite/objc.dg/method-9.m
  69bacf80761635c545d87c91cc287531  gcc/testsuite/objc.dg/missing-proto-1.m
  56651a021e1eb7eb1a267d430fca0f45  gcc/testsuite/objc.dg/missing-proto-2.m
  c265ca7405bca937bc031a0042311641  gcc/testsuite/objc.dg/missing-proto-3.m
! fcd05c4c0185fc0b317bc6ea1cbc3895  gcc/testsuite/objc.dg/naming-1.m
! 1c3d6df7bd4f4872b4e211cc67167170  gcc/testsuite/objc.dg/naming-2.m
! 36650bdcd2812d58767e0f538d4c4ffc  gcc/testsuite/objc.dg/nested-func-1.m
  6eed5537eae24ed6634c3706c12f2114  gcc/testsuite/objc.dg/param-1.m
  bbb9e9964ba890fd063f19dd542cd683  gcc/testsuite/objc.dg/private-1.m
  fe3ca05ce80d57fadc06b2f9fe6b480c  gcc/testsuite/objc.dg/private-2.m
! 9f5c1032fa7bddb99dec5b812922cd6b  gcc/testsuite/objc.dg/proto-hier-1.m
! f6d6b7454f0d00e836de017738aaf087  gcc/testsuite/objc.dg/proto-hier-2.m
! 4d4bd4a6e94f7ca1dcbd85c5c66e8f14  gcc/testsuite/objc.dg/proto-lossage-1.m
  f0b9884c1de6674b724f6ea9b7c54270  gcc/testsuite/objc.dg/proto-lossage-2.m
  4f83624cd4815311ebcf83e52d935a9b  gcc/testsuite/objc.dg/proto-lossage-3.m
! fd0b48d499e8f102c91bce628ac9003b  gcc/testsuite/objc.dg/proto-lossage-4.m
! 4517eb33c22dabb53af868d625e6d848  gcc/testsuite/objc.dg/proto-qual-1.m
! 972f3e70da97a1cf924caf0139a388da  gcc/testsuite/objc.dg/selector-1.m
! d1968305e6adc643c173f8e091195361  gcc/testsuite/objc.dg/selector-2.m
  98f5fd366b95a44daadee7e065e871f8  gcc/testsuite/objc.dg/sizeof-1.m
  731907b262562fa92455a34aeb875bab  gcc/testsuite/objc.dg/special/special.exp
  975de79e3c4224535252732e8954b34d  gcc/testsuite/objc.dg/special/unclaimed-category-1.h
! e29d9c9be3301aa71322ee54cc09d2f8  gcc/testsuite/objc.dg/special/unclaimed-category-1.m
  048774d808e0fc9c9202fdcb3cfd7b06  gcc/testsuite/objc.dg/special/unclaimed-category-1a.m
+ 8e32976dc6f068b09c19402cd8ec1f95  gcc/testsuite/objc.dg/stabs-1.m
  44c850eb724ab694c1eea579910821bd  gcc/testsuite/objc.dg/static-1.m
  918ac91df06a71b4b96b8d4f94b841d9  gcc/testsuite/objc.dg/stret-1.m
  b152871d70e8883099db0b461252034f  gcc/testsuite/objc.dg/stret-2.m
  7e68d7fe39ddc6065769f26089764fd6  gcc/testsuite/objc.dg/super-class-1.m
  60b26516b7ca4fb595e5b80262d80505  gcc/testsuite/objc.dg/super-class-2.m
+ 99fd34048a19b3f02aa0a90acc3ca65d  gcc/testsuite/objc.dg/super-class-3.m
  1d19ec2511cf554463b5ee8cb3b14e74  gcc/testsuite/objc.dg/symtab-1.m
! 6ecc53b62cd2c845865391faf03290aa  gcc/testsuite/objc.dg/sync-1.m
! b44fb7d1a255ac00bf4a879a7c682ac7  gcc/testsuite/objc.dg/try-catch-1.m
! d28cbe5367ea54b8219c5df72534e238  gcc/testsuite/objc.dg/try-catch-2.m
! f49944a012a2a91a8cc5e94fd87cf329  gcc/testsuite/objc.dg/try-catch-3.m
! 51214bb792c2a1e650ea6fb65e91228a  gcc/testsuite/objc.dg/try-catch-4.m
! 81f82195bf174990bd080fdaeaeb55d6  gcc/testsuite/objc.dg/try-catch-5.m
  f9f85e9811b2bdca45b0f29f19a26002  gcc/testsuite/objc.dg/type-size-1.m
! 6bc6f6cb9f22e30fec7ba72d901afa3f  gcc/testsuite/objc.dg/type-size-2.m
  d2d07c2ebcb90350a34d2a0a2a215530  gcc/testsuite/objc.dg/undeclared-selector.m
+ 3fade48c940710beea7cf2462c5bf227  gcc/testsuite/objc.dg/va-meth-1.m
+ ad588be086756c7bce570ed5a28030b0  gcc/testsuite/objc.dg/volatile-1.m
+ 5b030d8bcb22dedd984e8d8dae17cfb6  gcc/testsuite/objc.dg/weak-1.m
  b57a70e439d632d14a0304bd8e072792  gcc/testsuite/objc.dg/zero-link-1.m
  dc152a112ab02327dad6ca23a9256151  gcc/testsuite/objc.dg/zero-link-2.m
  999202351e5d8f0921e297ed37e27905  gcc/testsuite/objc.dg/zero-link-3.m
  0d71c48c831bf5882b80c4cd6ca9d9d8  gcc/testsuite/objc/compile/20011211-1.m
  51bf9e3b71ed912bf46fc18bb78bc2aa  gcc/testsuite/objc/compile/compile.exp
+ 41f9da1aa9876935f010f6e2b17679e6  gcc/testsuite/objc/compile/pr18406.m
  e3e4236a254b8433f0922e0210b7dfe8  gcc/testsuite/objc/execute/IMP.m
  8187b8b6a976d6234ab07f6ca61a3d77  gcc/testsuite/objc/execute/_cmd.m
  19c0cc9918dda6977e9d1f06cdfbbba1  gcc/testsuite/objc/execute/accessing_ivars.m
*************** d16c9a355836b15bbe2b9a07b3fdc558  gcc/te
*** 16032,16038 ****
  bcb51a6dcc4b738b7a1bb2e3d891a7fb  gcc/testsuite/objc/execute/nested-1.m
  31c172d5ddf747078e02716455244a02  gcc/testsuite/objc/execute/nested-2.m
  cfadb48dac5ad9763d3fe7c225ed60cc  gcc/testsuite/objc/execute/nested-3.m
! 7a918df8aec342e01373ece211511627  gcc/testsuite/objc/execute/next_mapping.h
  68ba78e82fe95233ef3d0409e09d3ad9  gcc/testsuite/objc/execute/nil_method-1.m
  c23cd4ff83806c22d24136d660a740a6  gcc/testsuite/objc/execute/no_clash.m
  f668dcd5e9b135efccc2c5c106a5608a  gcc/testsuite/objc/execute/np-1.m
--- 18659,18665 ----
  bcb51a6dcc4b738b7a1bb2e3d891a7fb  gcc/testsuite/objc/execute/nested-1.m
  31c172d5ddf747078e02716455244a02  gcc/testsuite/objc/execute/nested-2.m
  cfadb48dac5ad9763d3fe7c225ed60cc  gcc/testsuite/objc/execute/nested-3.m
! dd6fc0941bb2345138ceaf78b6ca8bc4  gcc/testsuite/objc/execute/next_mapping.h
  68ba78e82fe95233ef3d0409e09d3ad9  gcc/testsuite/objc/execute/nil_method-1.m
  c23cd4ff83806c22d24136d660a740a6  gcc/testsuite/objc/execute/no_clash.m
  f668dcd5e9b135efccc2c5c106a5608a  gcc/testsuite/objc/execute/np-1.m
*************** dabafd4c4909310a5610f1239f22b618  gcc/te
*** 16040,16155 ****
  9ffe60728767d540e78c2d6b8d71e88c  gcc/testsuite/objc/execute/object_is_class.m
  9e240137615f342aef4e152b8e0b7f3d  gcc/testsuite/objc/execute/object_is_meta_class.m
  0368c7aa7d8e54a81a793dca4e02646a  gcc/testsuite/objc/execute/private.m
  d84cda7e8a2a4aa8355517a650afa6fe  gcc/testsuite/objc/execute/protocol.m
  15a2bbed00fb7a42e2420e93a706d982  gcc/testsuite/objc/execute/redefining_self.m
  ada0ee509bf4a341c937760d1f19e80c  gcc/testsuite/objc/execute/root_methods.m
  4d225e1667a0bddc85904e78e5240615  gcc/testsuite/objc/execute/selector-1.m
  396b5c04eb6ddac3edd333e7754c30ca  gcc/testsuite/objc/execute/static-1.m
  3a82128c9d75fbfd39ebdb73607f7f7e  gcc/testsuite/objc/execute/static-2.m
! 3da52e67a632d467682132f99f693b63  gcc/testsuite/objc/execute/string1.m
! 57c233648f7e9e90b2aa2f15282dd559  gcc/testsuite/objc/execute/string2.m
! 3984916220ca56bf457ff3d903b10566  gcc/testsuite/objc/execute/string3.m
! b7be6f241d0bbb6d4acdcfeb6623a52b  gcc/testsuite/objc/execute/string4.m
  a15f4a807f9ba61e7f1f938b35d010a1  gcc/testsuite/objc/execute/va_method.m
! df93474f57db67b1734bc71b1c8b9085  gcc/testsuite/treelang/ChangeLog
  baa8ede89374c5e980b092d80fb5b2ef  gcc/testsuite/treelang/Makefile.in
! 305763027fb663d3c1aef5b1c83c2ed3  gcc/testsuite/treelang/a01gcci01.c
  13845574d7f47c593c3dce045885ec1c  gcc/testsuite/treelang/a01gcci01.tree
  897d9565e81d0360bfe446940de713f0  gcc/testsuite/treelang/a01gcco01runpgm
  6b3632ef71a6394a4d1690cc423a90dc  gcc/testsuite/treelang/treetests.exp
! ae6a4c3ff73a049b79e292a4cd523946  gcc/timevar.c
! 535dde6b7acb9a76b2ec6763b3bcc49d  gcc/timevar.def
! 43f881fe7ace4c7a9ae92c65b92d924b  gcc/timevar.h
! d68b41509579571b60902f7d7d5e63f0  gcc/tlink.c
! 227287ce3b1728cce4ef974b4e7a1c1c  gcc/toplev.c
! 050a6aff1863d0d121e36a7d94fe3c5c  gcc/toplev.h
! aa58046712c573f034248bf5555cf931  gcc/tracer.c
! c69b0927b4f0a980c3a1eca81b44346d  gcc/tree-dump.c
! 7c04e729a3cb2ff946ea43ddfccfc00d  gcc/tree-dump.h
! 8671d25a4c2ba05b558cb10a73f8e68f  gcc/tree-inline.c
! 5b9c71452f750298e23d7cd32ad7c670  gcc/tree-inline.h
! 71ecfd87e2537608c16a602197a45bf9  gcc/tree-optimize.c
! dd0fabf9004ac5dfb01dc559e58e1cd3  gcc/tree.c
! ca04f7a49c7219638f6da25b74f20743  gcc/tree.def
! 5128d945b6c72edd149cf88715969e89  gcc/tree.h
! a00b34de1423fdd841f0c7537e8b3abf  gcc/treelang/ChangeLog
! 544560a5516cc4e9fa9d568107c1a8e1  gcc/treelang/Make-lang.in
  760e83cfd90fc02bffdf85e5e4d77bb3  gcc/treelang/README
  4d01c3ea71da029c4242927c8a3115e8  gcc/treelang/config-lang.in
! 172a206fafb184b94a6bb3a4bdfd399f  gcc/treelang/lang-specs.h
  92f1a2614689111a3fc4bb9912846769  gcc/treelang/lang.opt
! eb0b75091a8947c7ccadf58c466f3c09  gcc/treelang/lex.l
! f1067affe3e3eaba03cab189aa7330dc  gcc/treelang/parse.y
  2da4c94a3604f4d5f15c1c556951ec00  gcc/treelang/tree-convert.c
! d1b426384caa922d27ac00ae1f449675  gcc/treelang/tree1.c
! 7ac86b4b31f1835220839cd125a9dc88  gcc/treelang/treelang.h
! 59224059d874862ac005e4d847170690  gcc/treelang/treelang.texi
! 88986569ed3c329fcafef96e43f40158  gcc/treelang/treetree.c
! 93797e2362645ad389f6843618215ffb  gcc/treelang/treetree.h
! 2d07b58b46512bbdc162544c2f7fbb14  gcc/tsystem.h
! cb48866a04abf838d0a983412f3b56c9  gcc/typeclass.h
! 6f6dc092e41a2c6e511b9c39aa8cdad5  gcc/unroll.c
  4f04fa4b85ab0d8e2ffdd484271910c1  gcc/unwind-c.c
  b14583fbd7fb92be300a8f47a4cfed74  gcc/unwind-compat.c
  1ba077f3e78ad7f798e79c717345bede  gcc/unwind-compat.h
  89b773fb54a9b499cf577162cbf1d324  gcc/unwind-dw2-fde-compat.c
! 452c634e1fb389064693802415183166  gcc/unwind-dw2-fde-darwin.c
! 013c3006bd98f8cff9bcc97eea1f5169  gcc/unwind-dw2-fde-glibc.c
! b661e9da64ed2e33bd42a59564ee3275  gcc/unwind-dw2-fde.c
! 7a2d7fe692e3052250604d3515d80c8b  gcc/unwind-dw2-fde.h
! 9d9e0d88d0c728c3150b83d887699a95  gcc/unwind-dw2.c
  254c2dda22c5857aa5325b5e84d573e9  gcc/unwind-pe.h
! 7da957cd7f4bc85fce6f396e287e175c  gcc/unwind-sjlj.c
! cae2ee1f5160be95378ef151ac13a346  gcc/unwind.h
  1808a207a87fbe9034b9561f4fd645f8  gcc/unwind.inc
! d6c097733fdf42c53f4f45f9ac796dbc  gcc/value-prof.c
! 399cd4d262aa0ca817216797f7cbcd6d  gcc/value-prof.h
! 43a1ff5d96e109f3341e1b67fc75cd8b  gcc/varasm.c
! f9668f57dfa17eaed3e72c6ee94b6b87  gcc/varray.c
! b7a4aabde29afb848b1e3e279cdbe7a3  gcc/varray.h
! c13fb7ccb6523dc43b1b18c3410c9713  gcc/version.c
  3efbf60f6340944c31fed5e38dc8f7dd  gcc/version.h
  df156fe52e268230159902d1b2cd5027  gcc/vmsdbg.h
! 35a58dfcdaa0d0cbc28bd90934ecba7a  gcc/vmsdbgout.c
! a3d2f8a609d86125b694c562b00c877c  gcc/web.c
  42adadee6c316f624c86e3ccfdeee75c  gcc/xcoff.h
! 1e6261550c3b97950a13009e59765082  gcc/xcoffout.c
! 1aeb5a743323a6b90da1b7941e1a0b1b  gcc/xcoffout.h
  94d55d512a9ba36caa9b7df079bae19f  include/COPYING
! 9c3c0c45ed5fa9ff24ab580c04765dda  include/ChangeLog
! da3682afe5be61c3172bb494398e3b0b  include/ansidecl.h
! 4f78f9a43bf4555a52c77ed7e95cdefb  include/demangle.h
! 78283efa0e4c0db9b38ca29f88d636a7  include/dyn-string.h
! 4f0d30283cfd45ddbecfd97a84ad1fc4  include/fibheap.h
  9bd376fdc680c4801bb7e676aa80b2eb  include/filenames.h
  41e02028fea8e2eadd52a90caf0376e3  include/floatformat.h
  d54eb7868908574db9965575a16c1819  include/fnmatch.h
  317b3fc837139b901dfba9292e3576ca  include/getopt.h
! 89612909a51e056f5b5500c7f83965a4  include/hashtab.h
! 1281513e4c64c4cbaaab169b86dc7a1e  include/libiberty.h
  e1b9929975775d9831fb9d726e48230e  include/md5.h
  c14e4868200f00ec814858d3f2e6f824  include/objalloc.h
! 8f2b67fd9a1670669af5e5e07959d797  include/obstack.h
  b2ec49c538bbc288540fe1fc2bb7517b  include/partition.h
  2ccf4ca81f396940231fdd26144b9fc2  include/safe-ctype.h
  1309f7f8ff9241b427948c8c5761b316  include/sort.h
! 1f39db48d112270c02ce3e01fbfad9cd  include/splay-tree.h
  4ebaa58a8bcb2ad62a520447123446ed  include/symcat.h
  c38b82bb82381011919906bfc101a973  include/ternary.h
  9e4da3ee24c6f11a47fa7d5cae9a03d0  include/xregex.h
  17eeca2dc8ed2db2505c4aa25bb83cd2  include/xregex2.h
! 8b2a2337ea32f559beb243b328db15bc  include/xtensa-config.h
! d2945866557b7c9640cdf083857c65b6  install-sh
! 2947c5f79b9afabf8bff5d670ff88627  intl/ChangeLog
! fdf76d8e28945fd712463f567baa2a7b  intl/Makefile.in
! b7e2cfc6ecf5922ac31ad9844de4868c  intl/README
  76ca170a525d5b84d90f0478fe788931  intl/VERSION
! 8084f68b2832e0d48fa88aa913091807  intl/aclocal.m4
  1a3edce9d5dfae1fa331cb73c08e6976  intl/bindtextdom.c
! 39a5bdb6b167bee0e7a0a1c89f7b32bc  intl/config.h.in
  8a751062d7db9b6e8163667e5626fcb5  intl/config.intl.in
! 5df7e9713841818e33a3e15743b1f240  intl/configure
! 79222f4d3d8254c78b3a1e56935a9b59  intl/configure.in
  2a415c3f3fce6aaf2088b30347ac768e  intl/dcgettext.c
  afe61f1151985430d3ef6986570e06c6  intl/dcigettext.c
  a01e5096340e338f04724001b79a3525  intl/dcngettext.c
--- 18667,18881 ----
  9ffe60728767d540e78c2d6b8d71e88c  gcc/testsuite/objc/execute/object_is_class.m
  9e240137615f342aef4e152b8e0b7f3d  gcc/testsuite/objc/execute/object_is_meta_class.m
  0368c7aa7d8e54a81a793dca4e02646a  gcc/testsuite/objc/execute/private.m
+ 1db6a253ea0b0378bcf3805ec7916bb6  gcc/testsuite/objc/execute/protocol-isEqual-1.m
+ ace7eac979c19cd464cdd1e3c11c2ab9  gcc/testsuite/objc/execute/protocol-isEqual-2.m
+ 6bdd95612641ad4ddc41f4bce1aff487  gcc/testsuite/objc/execute/protocol-isEqual-3.m
+ 681dd5033073c93858274c62ac037a66  gcc/testsuite/objc/execute/protocol-isEqual-4.m
  d84cda7e8a2a4aa8355517a650afa6fe  gcc/testsuite/objc/execute/protocol.m
  15a2bbed00fb7a42e2420e93a706d982  gcc/testsuite/objc/execute/redefining_self.m
  ada0ee509bf4a341c937760d1f19e80c  gcc/testsuite/objc/execute/root_methods.m
  4d225e1667a0bddc85904e78e5240615  gcc/testsuite/objc/execute/selector-1.m
  396b5c04eb6ddac3edd333e7754c30ca  gcc/testsuite/objc/execute/static-1.m
  3a82128c9d75fbfd39ebdb73607f7f7e  gcc/testsuite/objc/execute/static-2.m
! bc09762b3e74fc0227216052a970a32c  gcc/testsuite/objc/execute/string1.m
! 088d768a8a8a4eccaf0a91c2f903d5fc  gcc/testsuite/objc/execute/string2.m
! 318a61b0250e72af17f13433cbe7c899  gcc/testsuite/objc/execute/string3.m
! 745164878e340e7e3913196da0f9cbab  gcc/testsuite/objc/execute/string4.m
  a15f4a807f9ba61e7f1f938b35d010a1  gcc/testsuite/objc/execute/va_method.m
! 935657233e3f3f51a5dd7a47016bdfc7  gcc/testsuite/treelang/ChangeLog
  baa8ede89374c5e980b092d80fb5b2ef  gcc/testsuite/treelang/Makefile.in
! f4452dfc9c6c8e9754a65c6cc913c36f  gcc/testsuite/treelang/a01gcci01.c
  13845574d7f47c593c3dce045885ec1c  gcc/testsuite/treelang/a01gcci01.tree
  897d9565e81d0360bfe446940de713f0  gcc/testsuite/treelang/a01gcco01runpgm
+ bf22e28b9aea9db69f316d07777d7eb0  gcc/testsuite/treelang/compile/autofunc.tree
+ 9787b9901d0eae3abfa0a7279a68ca08  gcc/testsuite/treelang/compile/badchar.tree
+ 2263f3550f4ed6f3be2a638a4a192bc3  gcc/testsuite/treelang/compile/badreturn.tree
+ 6f6509f991d8011b5b2caa1efe49f51a  gcc/testsuite/treelang/compile/compile.exp
+ 7b14d0dfae0b348c9139db467bf0cc45  gcc/testsuite/treelang/compile/exit.tree
+ 6f16c9ad71f2951f3cb4984ece3743a9  gcc/testsuite/treelang/compile/externvar.tree
+ 904ffc265135f16d9482655f48e34aff  gcc/testsuite/treelang/compile/extrafunc.tree
+ eafd1ec3f73289bc79cc60dc40e68188  gcc/testsuite/treelang/compile/extravar.tree
+ 44f2db2abba0b745e7fe80dfe07b39a0  gcc/testsuite/treelang/compile/extref.tree
+ c2dd08f2750bbe013aef311e750ef629  gcc/testsuite/treelang/compile/full_unit.tree
+ 2daa65f5af7ea9789005f3801ca99ce0  gcc/testsuite/treelang/compile/function-1.tree
+ c8334f111e4ae502fcbf1514fd84458f  gcc/testsuite/treelang/compile/mismatch.tree
+ 4d706dc2e0f9aa032bba15197e54cfce  gcc/testsuite/treelang/compile/noproto.tree
+ d99e0a81d02f139b5e8db3be3267d8b3  gcc/testsuite/treelang/compile/novar.tree
+ 1bf222b6bf53d0dd7e42e02ec8dbb4f8  gcc/testsuite/treelang/compile/syntax-1.tree
+ cd013d732c15b972ffdbfba6d1f394c9  gcc/testsuite/treelang/compile/tabs.tree
+ a0fd88d34cdf57169c20d4b33dca4225  gcc/testsuite/treelang/compile/unsigned.tree
+ 7c3b3f42c955f11a2bedeaec9a6ae5df  gcc/testsuite/treelang/compile/var_defs.tree
+ 6f6509f991d8011b5b2caa1efe49f51a  gcc/testsuite/treelang/execute/execute.exp
+ 2722ca6509c015c8673cb50b7501084d  gcc/testsuite/treelang/execute/funccall-2.tree
+ 52aaaccea0ad3a603cfc8b2f96fcf0d9  gcc/testsuite/treelang/execute/funccall.tree
+ e71ab95e5921117ef957f6657e39065f  gcc/testsuite/treelang/execute/initial.tree
+ 1373d7bce5990f4405f75672ff93923b  gcc/testsuite/treelang/execute/main.tree
+ 4083d265d13ea8108a5df14f6f8b4865  gcc/testsuite/treelang/execute/static.tree
  6b3632ef71a6394a4d1690cc423a90dc  gcc/testsuite/treelang/treetests.exp
! 2a96a1d6af64dfa44c10a0d00013f91c  gcc/timevar.c
! 9449e7165b30d4952d165fe1f96e30e9  gcc/timevar.def
! 0deb1bfa7081c862640c3d8d17aa7b35  gcc/timevar.h
! 13216857c7bbdbeb1de4b481050ba0a1  gcc/tlink.c
! c4dc972b43d73c0512f2d6d7eafdeb87  gcc/toplev.c
! a9e7857be31950cf2c0336476b171ea3  gcc/toplev.h
! d1c1a4384d1851cf0962bc62f6858363  gcc/tracer.c
! 253a5ae2a09d821a8f0ff0d28df2f3f9  gcc/tree-browser.c
! ef4c475336fcd56912b831fe60511de9  gcc/tree-browser.def
! 0cc5eb4f7ea4b52bc556a7b4d5ba5ef8  gcc/tree-cfg.c
! 0e19fb591fcc7297c71dacc54f21771f  gcc/tree-chrec.c
! 41ce895d3d43aaf83e11486985f4d3e4  gcc/tree-chrec.h
! eb0c8a32f3ebfe9636b2fa9a90e3ff46  gcc/tree-complex.c
! 3865ffa39b6999d99ee686d4a0a7ce63  gcc/tree-data-ref.c
! e1d270f5c7c0c6729b201c400abefff3  gcc/tree-data-ref.h
! 1add1655d5aec7cd062556eb55d7b850  gcc/tree-dfa.c
! dfdd3adf945aafce62a2ccf3c91ae70d  gcc/tree-dump.c
! 37d0c217a5da00d787500eaefc05c401  gcc/tree-dump.h
! 765abe3b5df19a7cf54724a048cd01a9  gcc/tree-eh.c
! 6fb5c53bb9d84ddb8b2f5f3660b7b56e  gcc/tree-flow-inline.h
! 08f8066f69fe729682e3d708ff895660  gcc/tree-flow.h
! bb17fef86b633721a3ac3313f53aff63  gcc/tree-gimple.c
! da503723285d40fef6e24dd262ee0e93  gcc/tree-gimple.h
! d65de93cf41e48d51c3cc36d48a0b026  gcc/tree-if-conv.c
! 7eced57a13aad369c4d3a641e18e8d0a  gcc/tree-inline.c
! 133c89063702aa00cc657094f1e3309f  gcc/tree-inline.h
! 92089b8bec5b049cbe5e770f510f79ce  gcc/tree-into-ssa.c
! 855b3c3b11a2af760a4052f2a22817fb  gcc/tree-iterator.c
! 894c5c7ca0fc6649cb84ac8635d02c8c  gcc/tree-iterator.h
! e13fc7c9b4fe014ea06ac7fee8432cdd  gcc/tree-loop-linear.c
! b049004ab71f236c3a3f4924e1bb26e9  gcc/tree-mudflap.c
! 65ba2901182b5ac017bc27ba8165e7cf  gcc/tree-mudflap.h
! d4d3e3d041d247203cee99ada9b2741d  gcc/tree-nested.c
! bf18efa664a3fbde87a0f44328713101  gcc/tree-nomudflap.c
! ccf49e580ab04766db2c7c509d43d183  gcc/tree-nrv.c
! 9ef05c004bb42ac5d5057295cf3b2246  gcc/tree-optimize.c
! a98a70a06f06e066a4d8ded37d9daf67  gcc/tree-outof-ssa.c
! a20b9277b4ee8e74674f4a8f219fa7a0  gcc/tree-pass.h
! 74ffd228a19332bd7ec7ed845d2ea3a7  gcc/tree-phinodes.c
! 1cb9db12f0b3644ac6e96b566a91971f  gcc/tree-pretty-print.c
! b97c9ff313c27a00bf87990001823793  gcc/tree-profile.c
! 22299fb56c7404a0543834ba36038066  gcc/tree-scalar-evolution.c
! 637591aba87a0675cf4efe847b2f5c8f  gcc/tree-scalar-evolution.h
! f27c49444d5551a3d17528998042b040  gcc/tree-sra.c
! 019fec556167ec17aa5ecbe8bd9223ce  gcc/tree-ssa-alias.c
! 987c1c11dd3bcfa4d62e0c1fe8b7f865  gcc/tree-ssa-ccp.c
! 7d0d037ce5438835c23ff51ef16cacf1  gcc/tree-ssa-copy.c
! 84dc69d94dc5f4031833213be1e8eaba  gcc/tree-ssa-copyrename.c
! 3a21a70ae9d15db6ec8a4bece8a9b037  gcc/tree-ssa-dce.c
! a4177929bd63b4eb9a8a806530fb4a0e  gcc/tree-ssa-dom.c
! 81f144294cabda5310df81b793469da5  gcc/tree-ssa-dse.c
! 2a78b65005be7540ef444e717969e488  gcc/tree-ssa-forwprop.c
! 0d652a3d2e64add5d54b79073cea8540  gcc/tree-ssa-live.c
! 99a92965ee030a3facf9421e2fd1a9be  gcc/tree-ssa-live.h
! bc921f1b84012a9c92f60b33373b6167  gcc/tree-ssa-loop-ch.c
! 48a9e245d7d15b42a439a2fffb1244b7  gcc/tree-ssa-loop-im.c
! fcdec331f670fe0cc16a985d37fa3189  gcc/tree-ssa-loop-ivcanon.c
! f995c5186373e0034040e295b537e09b  gcc/tree-ssa-loop-ivopts.c
! fbf6024c5709f61ce025251853af4894  gcc/tree-ssa-loop-manip.c
! 654556a07ee904593ff5f4e1040d1f81  gcc/tree-ssa-loop-niter.c
! 17b5d579e04073579e9661838e184537  gcc/tree-ssa-loop-unswitch.c
! a6bb4b46832818296bc48560d8381f4a  gcc/tree-ssa-loop.c
! 334fbbd225f8811ef4a17302b4136de0  gcc/tree-ssa-operands.c
! a8da3b621697433f6195bf2b3a737b38  gcc/tree-ssa-operands.h
! a7a29395c59d9f08052b073c4dcaedd3  gcc/tree-ssa-phiopt.c
! 4189aacb032a736ccba1925328f406da  gcc/tree-ssa-pre.c
! 35ad766fe7e3c3cd32b1e7d5ce66f349  gcc/tree-ssa-propagate.c
! c5fa65fe63412c31b6bbb6f4c9ec99cf  gcc/tree-ssa-propagate.h
! d44e1f7c04425a1405b796f62876576a  gcc/tree-ssa-threadupdate.c
! 6d9a506c0d8fd0de89cfc29764955b8e  gcc/tree-ssa.c
! 7b83d994cc6eaa4c137090f97d88ddec  gcc/tree-ssanames.c
! 321b084c765d50cf2630c99a98f25558  gcc/tree-tailcall.c
! b754d66d4d01b0d4d8a8be15e7d5fdaa  gcc/tree-vect-analyze.c
! 0d9e73cc34be10b22dcb293fb254734e  gcc/tree-vect-transform.c
! 02d4344d4b3f3a2d5fa67773f0225563  gcc/tree-vectorizer.c
! 3ab61abea52c1070bdd080349397fee2  gcc/tree-vectorizer.h
! b5b1ce6c87f1e3822ec8bf5697e778c4  gcc/tree-vn.c
! 8f56d8074227508169867f730068309e  gcc/tree.c
! 611dd4f97c98144027151f367cb0fd29  gcc/tree.def
! 96e7a5503560df070b39f98ac0acac5d  gcc/tree.h
! e73742e13a15116af7ec272572367940  gcc/treelang/ChangeLog
! 9134d9f23f500427dcb6ab042af11950  gcc/treelang/Make-lang.in
  760e83cfd90fc02bffdf85e5e4d77bb3  gcc/treelang/README
  4d01c3ea71da029c4242927c8a3115e8  gcc/treelang/config-lang.in
! 2c57f3adedf8ddf2813cdff160b65c46  gcc/treelang/lang-specs.h
  92f1a2614689111a3fc4bb9912846769  gcc/treelang/lang.opt
! ca38000fe27a3e0e9f3f251676562875  gcc/treelang/lex.l
! e89f8266ab7173688d2a170ac07ec9c3  gcc/treelang/parse.y
! 443a3b0f26ebf78941a934a963ca74df  gcc/treelang/spec.c
  2da4c94a3604f4d5f15c1c556951ec00  gcc/treelang/tree-convert.c
! bb16fa23536dd29daea48244d2efee36  gcc/treelang/tree1.c
! 3cf12e0868e2c77c5c0821a74d429b3e  gcc/treelang/treelang.h
! 779775626bf1468aa55bce843aced984  gcc/treelang/treelang.texi
! a0ba2c727381ddf088bdaa9ed1526df5  gcc/treelang/treetree.c
! b24d6cec7bc30d99b0f9d4402cad2469  gcc/treelang/treetree.h
! 5b4f85825316f9c25c732e9846d35403  gcc/tsystem.h
! 954fa95563f836fd5baadf6b2d181932  gcc/typeclass.h
  4f04fa4b85ab0d8e2ffdd484271910c1  gcc/unwind-c.c
  b14583fbd7fb92be300a8f47a4cfed74  gcc/unwind-compat.c
  1ba077f3e78ad7f798e79c717345bede  gcc/unwind-compat.h
  89b773fb54a9b499cf577162cbf1d324  gcc/unwind-dw2-fde-compat.c
! b61e9cd73924280f12ae4b3dea7229e2  gcc/unwind-dw2-fde-darwin.c
! 5811ec391ca1e511254db0409ff479d3  gcc/unwind-dw2-fde-glibc.c
! 2fdcf4c0523efa04dd4d462fee36bddd  gcc/unwind-dw2-fde.c
! c3ca299aec789b7f64bb2f7eb5234232  gcc/unwind-dw2-fde.h
! be19243db9ffeb4694a70bc0ced8c061  gcc/unwind-dw2.c
! 933793c62418f9b4a4bf3f5220a2b968  gcc/unwind-dw2.h
  254c2dda22c5857aa5325b5e84d573e9  gcc/unwind-pe.h
! 3ab64ca9bc63f2a1dbed1b2560c99b99  gcc/unwind-sjlj.c
! 604e68825f687abdab3c98a534504785  gcc/unwind.h
  1808a207a87fbe9034b9561f4fd645f8  gcc/unwind.inc
! feacd47b6679ba1264735b8683ca0527  gcc/value-prof.c
! b8980f2ff17830de52d1388574a1ad2c  gcc/value-prof.h
! 0fa7cb988a7f6a199f9c797193d37d03  gcc/var-tracking.c
! 38e5c2106799be4950499deed5449be3  gcc/varasm.c
! 940c80e53a4a412bb576b1b9959194ca  gcc/varray.c
! 3626383e4ca4cd61989ff2a0d226d7a0  gcc/varray.h
! 58d095e86dac6a1eb3501715c47042fb  gcc/vec.c
! 7edc23ca01ad4abb3b52e1c9cc254d9a  gcc/vec.h
! 9595aff67063d323b8cd9986b4903e09  gcc/version.c
  3efbf60f6340944c31fed5e38dc8f7dd  gcc/version.h
  df156fe52e268230159902d1b2cd5027  gcc/vmsdbg.h
! ddbcf368790df5cb0c58286ac002e4b1  gcc/vmsdbgout.c
! b69bb794a014d444dc0878a122aa9311  gcc/web.c
  42adadee6c316f624c86e3ccfdeee75c  gcc/xcoff.h
! bc582fa182a58fd05891c8b77a50b134  gcc/xcoffout.c
! b01db88ebe8b0994941cc1c43934011f  gcc/xcoffout.h
  94d55d512a9ba36caa9b7df079bae19f  include/COPYING
! abe3f957361cd35ff1f3f44541e5e740  include/ChangeLog
! cffcac38adb3b73b235ebef827a0ed7b  include/ChangeLog-9103
! 886287592ff8c2aad9fcf6658470887f  include/ansidecl.h
! 387fadd144c3f0a6e1539f605a563867  include/demangle.h
! 78226edd4be1ddcf9c8e57dae850d449  include/dyn-string.h
! 694387941daf42982f59d07d978b2280  include/fibheap.h
  9bd376fdc680c4801bb7e676aa80b2eb  include/filenames.h
  41e02028fea8e2eadd52a90caf0376e3  include/floatformat.h
  d54eb7868908574db9965575a16c1819  include/fnmatch.h
  317b3fc837139b901dfba9292e3576ca  include/getopt.h
! e6897f312786fb47057062a0865ec0f9  include/hashtab.h
! 74067dc8ae8269a39204d45682eeda3f  include/libiberty.h
  e1b9929975775d9831fb9d726e48230e  include/md5.h
  c14e4868200f00ec814858d3f2e6f824  include/objalloc.h
! 0e9fbb49e74e0ad596a117d9f6ba4c44  include/obstack.h
  b2ec49c538bbc288540fe1fc2bb7517b  include/partition.h
  2ccf4ca81f396940231fdd26144b9fc2  include/safe-ctype.h
  1309f7f8ff9241b427948c8c5761b316  include/sort.h
! dc9746a8f0faf58a191db4392a3189dd  include/splay-tree.h
  4ebaa58a8bcb2ad62a520447123446ed  include/symcat.h
  c38b82bb82381011919906bfc101a973  include/ternary.h
  9e4da3ee24c6f11a47fa7d5cae9a03d0  include/xregex.h
  17eeca2dc8ed2db2505c4aa25bb83cd2  include/xregex2.h
! 70cd2f7c23937504aadc034afd22ade1  include/xtensa-config.h
! a482fa6e4319106918b7361fa9cd0e67  install-sh
! ac81461263c340d1f6c7ed86a63b06de  intl/.cvsignore
! 8bee5ef40545c37652bb28ded5c6e497  intl/ChangeLog
! 4becf4ef30c903a599af029384136f99  intl/Makefile.in
! 6ec998bb4716c744bf8185e607f69301  intl/README
  76ca170a525d5b84d90f0478fe788931  intl/VERSION
! 9f2cd7720d43a1e32a19f9a922e94fa2  intl/aclocal.m4
  1a3edce9d5dfae1fa331cb73c08e6976  intl/bindtextdom.c
! 8d681f6f96799ca356c0ec51ac3bb19a  intl/config.h.in
  8a751062d7db9b6e8163667e5626fcb5  intl/config.intl.in
! 730ace174102eb2472bea1bf9cc49612  intl/configure
! efe3fe832deb9fdc1164141aaa52e892  intl/configure.ac
  2a415c3f3fce6aaf2088b30347ac768e  intl/dcgettext.c
  afe61f1151985430d3ef6986570e06c6  intl/dcigettext.c
  a01e5096340e338f04724001b79a3525  intl/dcngettext.c
*************** a01e5096340e338f04724001b79a3525  intl/d
*** 16159,16165 ****
  1a2e1f5979c27b7efae539d12241d6b1  intl/explodename.c
  8663ce3376ff340e60596fb872a79cf8  intl/finddomain.c
  7cadd50308b483d034d5c7b5b82d6708  intl/gettext.c
! 7ca3ef5276c53b87f53734332891cd9f  intl/gettextP.h
  2bab8edc6f0537704caf3a05e519a2a2  intl/gmo.h
  d4b384e1a2a93680884c570927ccfe4e  intl/hash-string.h
  b3a1221e67f182a92bbf09dab0edc4b8  intl/intl-compat.c
--- 18885,18891 ----
  1a2e1f5979c27b7efae539d12241d6b1  intl/explodename.c
  8663ce3376ff340e60596fb872a79cf8  intl/finddomain.c
  7cadd50308b483d034d5c7b5b82d6708  intl/gettext.c
! abf60dd558dd4fe7b0ab17d16e3718b9  intl/gettextP.h
  2bab8edc6f0537704caf3a05e519a2a2  intl/gmo.h
  d4b384e1a2a93680884c570927ccfe4e  intl/hash-string.h
  b3a1221e67f182a92bbf09dab0edc4b8  intl/intl-compat.c
*************** eab8ba37c14c9b2ea90351a2fbc80fc9  intl/l
*** 16177,16586 ****
  6110b08cb3fc89c95d23f487f2389b64  intl/osdep.c
  0f96f085d8dbdf67697a23f38865ffc1  intl/plural-exp.c
  4b41c3ca05dfe9445743033b5ae7cf6e  intl/plural-exp.h
! e2e6234185a9b448499522c7a2c45c17  intl/plural.c
! 13f1f04f28b14e63f74f21ec741c2748  intl/plural.y
  8ba33a586960c0e4072c7d1f7b50b93e  intl/relocatable.c
  b06d53a83585fd7db8c2db9a182549e0  intl/relocatable.h
  ab99112442f51f89c122ffba737fdcdc  intl/textdomain.c
! 9d2c18a22e88c2695859f714abffba0e  libf2c/ChangeLog
! 5fb7684fa4aaec09b98b4a0d06a353a8  libf2c/Makefile.in
! 7d673016f4f03c6980e1e15c6ad69282  libf2c/README
! aa345c4444f749dadcec7facc4f26594  libf2c/TODO
! 5922864ad717bea73cc4d275cdd53057  libf2c/aclocal.m4
! 07287725f8586c706e573ddcd3d5e4d0  libf2c/changes.netlib
! b39dae8351a985d0be2b483a5290b5ee  libf2c/configure
! fe6f9cca70fb7d2f79f11c46858d2de8  libf2c/configure.in
! 4f197dfe2ebd10a5def61b93de289872  libf2c/disclaimer.netlib
! 32e8e4c5b20597e5ec5a06398cf2e9d3  libf2c/f2c.h
! c138ca664d25eecca80c0c5303db8d08  libf2c/f2cext.c
! 7f8c83b27618576735e76c7980e6a564  libf2c/g2c.hin
! 480f4f07293fd22a989884edadd89b68  libf2c/libF77/F77_aloc.c
! 6913a11ef66a9d537eec78463888389f  libf2c/libF77/Makefile.in
! 24e010b48ece0133c43c77203b6f6838  libf2c/libF77/Notice
! fa210d1bf5d6ed6d670628fc8851d8af  libf2c/libF77/README.netlib
! cc6b2f3e9b5cbcf4c37c49bb68662c42  libf2c/libF77/Version.c
! 2f229bd7aced3e0ca16d113f3b322c7b  libf2c/libF77/abort_.c
! 1eff7d82cb863d47c2409ccee8475116  libf2c/libF77/c_abs.c
! 992f3a73b99bddca240dd2aaece420f3  libf2c/libF77/c_cos.c
! c82cc7f85d6c10e0559db505b1004385  libf2c/libF77/c_div.c
! 16f3d929e7fbc1e97229cd7531787358  libf2c/libF77/c_exp.c
! 77e06fb0b6e0b3c7aacdb512efa0e484  libf2c/libF77/c_log.c
! 56579a23443bb4f184c457fa56f1a2c5  libf2c/libF77/c_sin.c
! 5e4e2f7e815b2b3ef4b89b2a525b342c  libf2c/libF77/c_sqrt.c
! 4bc8b5ccabfa1042d5f44ca0ea601a02  libf2c/libF77/cabs.c
! 32072576ad48d6dc213b8a9d27a6f280  libf2c/libF77/configure
! ace8039533156e1e0d4de03180108e25  libf2c/libF77/configure.in
! 1835b0158f459ce1b4c03ff7e3e013d6  libf2c/libF77/d_abs.c
! 81d7e496f649173c7f9a67771982bd61  libf2c/libF77/d_acos.c
! 8e73a63cd9f9dfcd214be9a4425d8005  libf2c/libF77/d_asin.c
! a6038b8f1256d0bf3d15f5c53fa49604  libf2c/libF77/d_atan.c
! 02fd48a294e5fb1bd9f74057755a2d7b  libf2c/libF77/d_atn2.c
! dab275eb3d1b9c77ca416d7ad1cb5ee2  libf2c/libF77/d_cnjg.c
! d0545361fe9253c70f9b3bf13c93b86f  libf2c/libF77/d_cos.c
! 7437f1d138b573289e41ed41e1f208a0  libf2c/libF77/d_cosh.c
! 13eee00a20026ce6ac46ec840bb4598a  libf2c/libF77/d_dim.c
! 58df06016f7e63f4231026b635826af6  libf2c/libF77/d_exp.c
! a8c6742b6c97260e0bf96b4171d2b1ad  libf2c/libF77/d_imag.c
! b41229d4e1c3efd50c4ae2ff2ee70c64  libf2c/libF77/d_int.c
! 495f6e9e7c7d69623b500e0c06f224cc  libf2c/libF77/d_lg10.c
! 82931bfe49052542abec144e8b5a742b  libf2c/libF77/d_log.c
! e323e3770c132f5cb569a83e93fa94a1  libf2c/libF77/d_mod.c
! 3d3a15de1c5ad1aad04d4702dabe62dd  libf2c/libF77/d_nint.c
! d4223cd53adc2c7e45324246d3806cc4  libf2c/libF77/d_prod.c
! 1360c1a5aee2a77fe81467a2e7b504c6  libf2c/libF77/d_sign.c
! a175b46b6f68204bad1109d7efe43463  libf2c/libF77/d_sin.c
! 7f93e7d29c43a99bb69349d92d61f03b  libf2c/libF77/d_sinh.c
! 9e59fe7d2cb081da11f751135d0c590b  libf2c/libF77/d_sqrt.c
! 7b2fd6630dc034263cfde260ffd04c9a  libf2c/libF77/d_tan.c
! 815e951e974c12b9b6593e7c356ae02b  libf2c/libF77/d_tanh.c
! a6e44e9c8f2e50df94b668a337ad72b7  libf2c/libF77/derf_.c
! 48d3aad4e38db007bd19ea4aaed8dde2  libf2c/libF77/derfc_.c
! 35f239ec8ded862f5b158eed929b9c87  libf2c/libF77/dtime_.c
! 422f8b27591c08576314b8090d3c4086  libf2c/libF77/ef1asc_.c
! c535ef95abe59c04a3853e265a351cc9  libf2c/libF77/ef1cmc_.c
! 88bcf2244e4ad4f7fe93c7a793245ea2  libf2c/libF77/erf_.c
! b3cb78f13fb7815f337e5805efa60ae3  libf2c/libF77/erfc_.c
! 472cef874e9c772b380718112eb62047  libf2c/libF77/etime_.c
! a33450e6758cff331b9313a6002e6d53  libf2c/libF77/exit_.c
! 9ffed0952bf2648838e06376a2e39fe8  libf2c/libF77/f2ch.add
! 5a3bf5b3cb8e8f43327283d2874570d7  libf2c/libF77/getarg_.c
! 0d082dc484c82fdeb1f1985090fb785a  libf2c/libF77/getenv_.c
! 778bb1201712beff76a2b571e5897436  libf2c/libF77/h_abs.c
! b5c56eb1136c42227881989d0cc5ecfc  libf2c/libF77/h_dim.c
! 7c7dacddd18ff2eb3f1a531468010c87  libf2c/libF77/h_dnnt.c
! 0493848c1e828c7eeb8cb352b4183e38  libf2c/libF77/h_indx.c
! e8123f0f917a0963e2a7b562803183e8  libf2c/libF77/h_len.c
! 34512cb40c8a8732b9b9f75efbff23f9  libf2c/libF77/h_mod.c
! 85ab68b849c7d1b99a8ab59bdfb638e7  libf2c/libF77/h_nint.c
! 21d312bc8b68f52f7d4cd20bc8c453e5  libf2c/libF77/h_sign.c
! 84e1563e27976b1b3d98b21cece2818d  libf2c/libF77/hl_ge.c
! 2813f85834a4158fc6cd9654d3b9a31d  libf2c/libF77/hl_gt.c
! 4d9c02e7eef05f78444ff2da44486c19  libf2c/libF77/hl_le.c
! 7a72743c4d2c7ca7d5f1a00ff3e126fb  libf2c/libF77/hl_lt.c
! 27c5157279a5c50419f6374d6236845b  libf2c/libF77/i_abs.c
! e0060bf574d245f343fdc1f11aa9ac51  libf2c/libF77/i_dim.c
! a24a75458fff66949c8d3e5c4f6da2fb  libf2c/libF77/i_dnnt.c
! 3d4f51ae38f52a425d5612182f2f7d9d  libf2c/libF77/i_indx.c
! 763709dacfbb92ff93e395c7252c9f1c  libf2c/libF77/i_len.c
! 983107e6757bc0e96de85f297f760cc9  libf2c/libF77/i_mod.c
! 72f9f6fb0164d7ce58bc9ceae5a29c64  libf2c/libF77/i_nint.c
! 9b5f75eb1f5138cd844861da6b2a447e  libf2c/libF77/i_sign.c
! 84642ee842ec503c67ebe4007e19c834  libf2c/libF77/iargc_.c
! 90c93fc38bf099aa95995990332c086a  libf2c/libF77/l_ge.c
! 21714352f786f95ed62201cdb467e152  libf2c/libF77/l_gt.c
! 0446ab55ebead8cee883115e428fef59  libf2c/libF77/l_le.c
! ef633991dd6ae0cdea69fc0c354a2f8f  libf2c/libF77/l_lt.c
! 9199aafbccc9d2488cb85b9d87fb3b50  libf2c/libF77/lbitbits.c
! 690db799e8eb1184d1b157718de34727  libf2c/libF77/lbitshft.c
! 29a60f4bcd9a568a01625ac329943c40  libf2c/libF77/main.c
! cb6de0899e3291855b300e2846bdf8c1  libf2c/libF77/makefile.netlib
! ca725ce37364da5405434fb4d8cfb4ad  libf2c/libF77/pow_ci.c
! 9a29f20f0074bddff69248c07b17b666  libf2c/libF77/pow_dd.c
! 2d686b34ea9c9edb0e53a3df267d1299  libf2c/libF77/pow_di.c
! c29185a87117b1a3c53952b4047af720  libf2c/libF77/pow_hh.c
! 02084f1b8f634375b5dd29610eae6a27  libf2c/libF77/pow_ii.c
! 45b17bbb34b7480233358671329b5f7c  libf2c/libF77/pow_qq.c
! 3d6227d7bab15aed1775c720c57a0cab  libf2c/libF77/pow_ri.c
! c67327860523769a52678ad3acd3a246  libf2c/libF77/pow_zi.c
! 3033d937b2a523a3946c0ca2556f26d5  libf2c/libF77/pow_zz.c
! d82415311f1ac22f4171d82c27b2d131  libf2c/libF77/qbitbits.c
! ab458881875f5e100cc8c0717fd6d76d  libf2c/libF77/qbitshft.c
! 1cdeed2eaa8646d1e8fc7327120780c3  libf2c/libF77/r_abs.c
! 87093e73ed6a43f420b17cfbb6b391fa  libf2c/libF77/r_acos.c
! c29e20e04d4bbd310f4fc6ed6f54f5e9  libf2c/libF77/r_asin.c
! 73f11f121b9c920d9345b3a5abd8a6d3  libf2c/libF77/r_atan.c
! 9da3aa65410a93fc8e49d85bb0c366d4  libf2c/libF77/r_atn2.c
! c9a3290265ee7f90dff808e59e61674c  libf2c/libF77/r_cnjg.c
! b1a97ad5281dfa327a6cc701e2a143aa  libf2c/libF77/r_cos.c
! 034ae59e0024e2a522da0b9b8b412115  libf2c/libF77/r_cosh.c
! 9008b78a1782dd6cd43a8dc644636bfd  libf2c/libF77/r_dim.c
! 88e263ebc8eee228fd41dbc544262b7b  libf2c/libF77/r_exp.c
! 87c5cb8763d0139465ed9f87576d2d4b  libf2c/libF77/r_imag.c
! dbe3ffae3dbc71595f84fa6348c97f6c  libf2c/libF77/r_int.c
! 024555d261659d716b3a4e398352d2e5  libf2c/libF77/r_lg10.c
! fb2f59af421f2a40fd874708b0d82b0a  libf2c/libF77/r_log.c
! 429048dbd107b73e2f01b62d611e5360  libf2c/libF77/r_mod.c
! ef4e275d67f05781875e551f02102b11  libf2c/libF77/r_nint.c
! dc78596b6afa301bf00d8d511b8e866b  libf2c/libF77/r_sign.c
! 6fb21fb491b22f4318749e43f75d4923  libf2c/libF77/r_sin.c
! 9dd69617a5bec47d6917320d7be741e7  libf2c/libF77/r_sinh.c
! 77c03674c3785ba658f265acb06e8b0f  libf2c/libF77/r_sqrt.c
! 0c7c781cc00a93e3637cf7ae74c0fd86  libf2c/libF77/r_tan.c
! 0cab523cffdbd15a0671291c85a459e6  libf2c/libF77/r_tanh.c
! 72314ceabed5df0064208cfcd29ffcd8  libf2c/libF77/s_cat.c
! d9b4d7ade2653b0c8fa2aab8a7019f5a  libf2c/libF77/s_cmp.c
! 0f94a43f852da68a925de04bdf7bfae1  libf2c/libF77/s_copy.c
! 4bf8e2b2e826b6c848501d59e2a70fe7  libf2c/libF77/s_paus.c
! 89caf34f40d1503b0016eb4c98da04bd  libf2c/libF77/s_rnge.c
! 1e474031dfc5338b69c73954a329d000  libf2c/libF77/s_stop.c
! 0d4f658f15984055859a5211cc3d5360  libf2c/libF77/setarg.c
! afe03784df8612b5eb8c041bbf2f91d2  libf2c/libF77/setsig.c
! 614ba3ab5dd03c4af1628291a192705a  libf2c/libF77/sig_die.c
! ab3460f2c8efde5d19280304c2bce231  libf2c/libF77/signal1.h
! 4794ba68c45de7f14912d5db77d6c8e6  libf2c/libF77/signal1.h0
! 2905343bfc29cae3a1afb4c84434d567  libf2c/libF77/signal_.c
! c0384c9c25844ca63b519545fd3f9c01  libf2c/libF77/system_.c
! 2a9c20d15565c68c056f9d85d7c2593c  libf2c/libF77/z_abs.c
! 048374642be3dd87e8e0b55a72a4e765  libf2c/libF77/z_cos.c
! 2e251a1f910b2d5341fec7ca64788726  libf2c/libF77/z_div.c
! 84ca1523b9eabdb525a1cf4a43293d87  libf2c/libF77/z_exp.c
! eab27429f036886a994b4214ce6622a8  libf2c/libF77/z_log.c
! 339ef10985c7cc0d70dcec7d5b1af89d  libf2c/libF77/z_sin.c
! ddd2768c32a72bf794a9df115312ec09  libf2c/libF77/z_sqrt.c
! 7465863656bba5951808bb1490f90c59  libf2c/libI77/Makefile.in
! 24e010b48ece0133c43c77203b6f6838  libf2c/libI77/Notice
! 1ad5af4450dda8f14a8c239d67eacdfa  libf2c/libI77/README.netlib
! 87c122f447f024a2eb68cbea7adbc4e6  libf2c/libI77/Version.c
! 61d848e6642352075a8da95e7b633c37  libf2c/libI77/backspace.c
! 0eef46ec9889aae20c9478ce8e9d7a2e  libf2c/libI77/close.c
! 558c3acebafe71be533d3ebc7d3e5a50  libf2c/libI77/config.h.in
! 1688fb633e1acfa6bf7fde70a1f8b544  libf2c/libI77/configure
! 3c520347699233e62fe2028fec204ace  libf2c/libI77/configure.in
! f9ecfa1bebd1c2d4e3b3df122e9d012a  libf2c/libI77/dfe.c
! a91041573683f4b2f2ddfd24c06bdbca  libf2c/libI77/dolio.c
! 3bbaa34a720d9f419c995f44fd0a608c  libf2c/libI77/due.c
! be5ff702256982f1c341925317489f68  libf2c/libI77/endfile.c
! 7c4893bcd45c7a795ea8a4e784ec63f0  libf2c/libI77/err.c
! 9ffed0952bf2648838e06376a2e39fe8  libf2c/libI77/f2ch.add
! 5d2a91d76bc9eeaadb8742a7ccbd3d02  libf2c/libI77/fio.h
! 7d072a737cf96a00f040db5f9599f326  libf2c/libI77/fmt.c
! f0dfb07615db296cdc21ee0a3d3c13a8  libf2c/libI77/fmt.h
! 610ae814a4f90e942112acd818ca1d39  libf2c/libI77/fmtlib.c
! ff32e34d38ad2ba7f00873518780cef6  libf2c/libI77/fp.h
! 2ba7592a0d0c9c7f03e9604f3a39954c  libf2c/libI77/ftell_.c
! 6a1124255c8f3d2945d633adae671bd2  libf2c/libI77/iio.c
! 55475928c1063230ee9820ac54fc98c9  libf2c/libI77/ilnw.c
! 5f9ea6235470adc08a8c7d327e5b4be7  libf2c/libI77/inquire.c
! 3f5e4d5d25b5513a3f28d224ff811477  libf2c/libI77/lio.h
! cd6565ae075c28ddc0018a5f8f191b98  libf2c/libI77/lread.c
! 7e15e7634e568745a3131221545141d5  libf2c/libI77/lwrite.c
! b3976d96b99157c79b5041e878127a4e  libf2c/libI77/makefile.netlib
! 3e652628d9f205abfdfba8dc9a9b4f2d  libf2c/libI77/open.c
! 71aa4fd2b4d47b8ddf7afa328d9ca926  libf2c/libI77/rdfmt.c
! 62406ca4b27baa3f1c2b28137a842f61  libf2c/libI77/rewind.c
! 647429752382bd94caff4fafd2a9e005  libf2c/libI77/rsfe.c
! b0247c36c870a5f3e43b420ba0982d59  libf2c/libI77/rsli.c
! 798bd8cb1179a9c024d22f459db395ee  libf2c/libI77/rsne.c
! 0455d5c5ba3b59e206f62b0b2e7fd565  libf2c/libI77/sfe.c
! 1ded054093de910d9786c62bc4fe8cc6  libf2c/libI77/stamp-h.in
! 9982e21a882246135d75dbc687258e3d  libf2c/libI77/sue.c
! 086b16d6bea1b3e7bda56931ec038cb6  libf2c/libI77/typesize.c
! 3a2e0e2b649296ab71894596f00ac253  libf2c/libI77/uio.c
! 249546d4919b7550753e3742d0c2337e  libf2c/libI77/util.c
! ed25cf051d2936fc58224c4c4db27385  libf2c/libI77/wref.c
! fdc6bd7ade66f4cff5ccc790b0aa2bd6  libf2c/libI77/wrtfmt.c
! 54429fb22a61775779aa34c61b62b31b  libf2c/libI77/wsfe.c
! 502093c03bd016452095f3cb1bf5acfa  libf2c/libI77/wsle.c
! 5f189ddd5c774572052a638cdffba61c  libf2c/libI77/wsne.c
! 39cd61d5bfbe9b834f516474038e6d27  libf2c/libI77/xwsne.c
! 7fbc338309ac38fefcd64b04bb903e34  libf2c/libU77/COPYING.LIB
! c363bfde378158b00dce1a5483f9f784  libf2c/libU77/Makefile.in
! eeca4b194887314acee934551dd95a59  libf2c/libU77/PROJECTS
! 18ebf57497ef6bdf95427dfc5a47dbb6  libf2c/libU77/README
! ff20dae44710f7d19c633d7543aaced6  libf2c/libU77/Version.c
! 2f1bd08fab8759d4635ea72984699e1b  libf2c/libU77/access_.c
! 2fb9041199b57c0bf9e4ce7f067eeb97  libf2c/libU77/acconfig.h
! 0541e43d0edeb14082e6dc7633a1df84  libf2c/libU77/aclocal.m4
! e55fce30a462689bcc96640f24cef0d8  libf2c/libU77/alarm_.c
! e6f880f6e038f64ffbde68265ec44e21  libf2c/libU77/chdir_.c
! 27da16288065a0434fa328db621145ab  libf2c/libU77/chmod_.c
! a17a590b870cbbe4fedd2c0ef012e9a6  libf2c/libU77/config.hin
! b59c3b8d81075a8fd109fbd86812a569  libf2c/libU77/configure
! d39b195d7cf9f209ef2f01211bc92242  libf2c/libU77/configure.in
! 6693c3d697b1f8c0e8723055055e62e9  libf2c/libU77/ctime_.c
! 4192c9e7235d5905db0c3cb60840268d  libf2c/libU77/date_.c
! 14acda495037afddbf6063dab21ed521  libf2c/libU77/datetime_.c
! 0100bf9749914c89b108f4e3670a345a  libf2c/libU77/dtime_.c
! a38c302435bf030091539580864aa388  libf2c/libU77/etime_.c
! 9a2d860ff9e7b1e7cfa94e95c6b8b2ac  libf2c/libU77/fdate_.c
! ea3e6a74ef96716f317e799922e096b7  libf2c/libU77/fgetc_.c
! a906731e119537ee5e3175a3202ebc56  libf2c/libU77/flush1_.c
! 7bab327a8f93e0bf253270ca373729c5  libf2c/libU77/fnum_.c
! 255596eafe8f560160e357cf92aa0e42  libf2c/libU77/fputc_.c
! f984ef6cca5b0b28aa96952564947f20  libf2c/libU77/fstat_.c
! e4737af41dd690a1bd5baa08ecdc953f  libf2c/libU77/gerror_.c
! 8135c7027cf592b4719711523bfa1a32  libf2c/libU77/getcwd_.c
! 33bb37f326d14216610ead54b0e6db60  libf2c/libU77/getgid_.c
! 91d2d22079ee48b31c5919c6de9db9e2  libf2c/libU77/getlog_.c
! f721866ce6d6ee53612dc7451010ac6a  libf2c/libU77/getpid_.c
! 6c37791e6c827d27b7e5ad6dd95843f0  libf2c/libU77/getuid_.c
! 18b81cfb1798e3f9d82b688ce2056c5e  libf2c/libU77/gmtime_.c
! 659f658fc7a41f6f159817a9a0903266  libf2c/libU77/hostnm_.c
! 4dab2ab61389ff5d57e432da6891943f  libf2c/libU77/idate_.c
! c9913d0158144c2464ef7ef0eec665dd  libf2c/libU77/ierrno_.c
! 41446e2f5e58c477a1b65ea53d38c86a  libf2c/libU77/irand_.c
! 53ee16b342fd5fc7ad0c5f721ffbf48b  libf2c/libU77/isatty_.c
! e3964a8a523ca8064eacc03a861beaf5  libf2c/libU77/itime_.c
! 75d81a65643903afd887c1f48a1bcf9d  libf2c/libU77/kill_.c
! dc05630bbc09239e612f4082456f7279  libf2c/libU77/link_.c
! 5a65927acf2309b9bb0838a6805d676e  libf2c/libU77/lnblnk_.c
! 7f2fc224eeb3037851ad8915349f8eb9  libf2c/libU77/lstat_.c
! 8997963330b0c81127f2941f333d7890  libf2c/libU77/ltime_.c
! 928880806c120abcb06326fbbb78a5df  libf2c/libU77/mclock_.c
! 8855a19d7ac8a7a85b567a9fdac55bce  libf2c/libU77/perror_.c
! 2f27d8c311cbb02d2bdaf9e55822706e  libf2c/libU77/rand_.c
! 7a1bc9d5a80b57954d4331db24ac2d81  libf2c/libU77/rename_.c
! 90faa7b29cd560511368a29d808e99c2  libf2c/libU77/secnds_.c
! 7eccc393c79278f813628f77ad2e981d  libf2c/libU77/second_.c
! 497d30e2ab0271adfe732c8cb7ad4781  libf2c/libU77/sleep_.c
! afcd88023d5009072be46607bb301096  libf2c/libU77/srand_.c
! 1ded054093de910d9786c62bc4fe8cc6  libf2c/libU77/stamp-h.in
! 9a820a6ffa946f75e818dd26e2328ff6  libf2c/libU77/stat_.c
! fec519e4defe0e4d130769e793e6b60a  libf2c/libU77/symlnk_.c
! a953378722e4063cea601a4c70837893  libf2c/libU77/sys_clock_.c
! 0b2e80f36e6c5c5bb83fa3c92624e8e9  libf2c/libU77/time_.c
! 477b07d098a0540ed14b8bc4ea180917  libf2c/libU77/ttynam_.c
! cf2b51480b6d0ea486d9cdda356a0418  libf2c/libU77/u77-test.f
! 4770d4ce2b1d7038f0c1a3df00ce0cb3  libf2c/libU77/umask_.c
! 00111790ccd993791856e9db45bb829a  libf2c/libU77/unlink_.c
! ed6b19bfa9000460de728123f1641597  libf2c/libU77/vxtidate_.c
! 581f2c8983df7246c05b7f0ca261f315  libf2c/libU77/vxttime_.c
! 24e010b48ece0133c43c77203b6f6838  libf2c/permission.netlib
! 8ae91bfd9121a12f3a87493dab8046b1  libf2c/readme.netlib
! ce2dc8158feddd9e5ada63a8395d8537  libffi/ChangeLog
  fbbc216bc25d759a72ea3e6d734af56b  libffi/ChangeLog.libgcj
  d946d2b97454ad50a1dbfbf48923c5be  libffi/ChangeLog.v1
  085f9917800070e791f49bf4733e23fa  libffi/LICENSE
! 9581578a480c3db8f74afb2765332ba9  libffi/Makefile.am
! 314eacd38c415b5f91eedb8e2efdca35  libffi/Makefile.in
  dd0edecd243634e1925c0ce2134aaa45  libffi/README
! dd3e8eddf4bf9472405a43802b0ab379  libffi/acinclude.m4
! 78b823614a71292e9249c85957af1714  libffi/aclocal.m4
! 50797415c8700d2e187d2491c4e3e72e  libffi/configure
! 887a49484291125e87f27d7f74bc1b3f  libffi/configure.in
! 1977d11aa901ebf7663f53fcf93d6e39  libffi/fficonfig.h.in
  800593333c0fdb237201a25cf22c1121  libffi/include/Makefile.am
! 05650eb8f3012ee8e612ef2152da4d32  libffi/include/Makefile.in
! cf6788f92178328e82f501484c9cb237  libffi/include/ffi.h.in
! ec7a4fe901edcaab7a7f3e66c5ba1b57  libffi/include/ffi_common.h
  8f1d3e3ef0c003f6a69c225a21f572a1  libffi/src/alpha/ffi.c
  80b584d92653e1f8c33b6f02739e03fa  libffi/src/alpha/ffitarget.h
  6cd31f1399d4268c33bce1cb17acf2fa  libffi/src/alpha/osf.S
! df34af01b790bb990c4cfb1f86632d66  libffi/src/arm/ffi.c
  129d5ce3064dbf3e3a99dba0c6ee50b6  libffi/src/arm/ffitarget.h
! 97e6c0f4d2019b5c8fa71b2be2736046  libffi/src/arm/sysv.S
  c23b060daf7379293b692b26b96c773c  libffi/src/debug.c
  0d4e7344633ddb45c6fdee8053ae93df  libffi/src/ffitest.c
! 70560ad62a922fa3c3bb8c39ff113ee5  libffi/src/ia64/ffi.c
! d8b9e231aab1fe00fbe99259824bea70  libffi/src/ia64/ffitarget.h
! ca2d5f974fd98cb9e638ae8ff5e4caf3  libffi/src/ia64/ia64_flags.h
! a3075b2098405bb2239e9b3246b14095  libffi/src/ia64/unix.S
  341795d6d831cb5a5858c6c2596649da  libffi/src/java_raw_api.c
  02286b8ab506a66e4ea41015fb2c4fab  libffi/src/m68k/ffi.c
  a591afdd6fceb96566ab43e4a2f2e692  libffi/src/m68k/ffitarget.h
  68712d7da5c3c036ee6a3c915294925d  libffi/src/m68k/sysv.S
! 7fc077147ed52af4d1a685c4041b9980  libffi/src/mips/ffi.c
! 0f5cc460166c1c9cd8d75ddad39daeee  libffi/src/mips/ffitarget.h
  e0513e7f9e5f369f6dec7842f6b75276  libffi/src/mips/n32.S
! 225909fedb03cebb6297611e6f51a0bd  libffi/src/mips/o32.S
! 9c35aa85eb4c5ce5554ac317f43554ee  libffi/src/powerpc/aix.S
! b2a5b73024fabb715d6aa022d1bb5e64  libffi/src/powerpc/aix_closure.S
! c14208e497d65bbf5591e7d7194ee248  libffi/src/powerpc/asm.h
! 7a96b007435c45262080a303bf922f4f  libffi/src/powerpc/darwin.S
! c99a78a470b05c0ff5606c94a7aa35cd  libffi/src/powerpc/darwin_closure.S
! d5a303c99835b471f8912e3dc0e083dc  libffi/src/powerpc/ffi.c
! ed03b26d27eb0d0ddffe3bbfa03f9dd1  libffi/src/powerpc/ffi_darwin.c
! acff84782c5e1d507d49e8860ec2d09e  libffi/src/powerpc/ffitarget.h
! e8a5dc963de645e2953d4d309f1873ab  libffi/src/powerpc/linux64.S
! 0348e981ed6f1b85bd5771ab1340fbf8  libffi/src/powerpc/linux64_closure.S
! e8b823b52413e2b1674f950e23bcf9a9  libffi/src/powerpc/ppc_closure.S
! 2e699196362bde2d41146d8ee552ccb4  libffi/src/powerpc/sysv.S
! 0cada31eb48fca250416504ac528da18  libffi/src/prep_cif.c
  3b1e13772c2bd8ebbf51d0be097581af  libffi/src/raw_api.c
! ee148becfe8b1188bf2910f5f50e88b3  libffi/src/s390/ffi.c
  9ef0dc6b1d0a81fb5de092076d57090f  libffi/src/s390/ffitarget.h
  b824586cfd875b7c1c6f7482800cb3ab  libffi/src/s390/sysv.S
! 8fd55ba2b63cdb6cb07820dccc7348ff  libffi/src/sh/ffi.c
  b09467107867053f95dbf8f5de6e1597  libffi/src/sh/ffitarget.h
! ac4a80caeb2584627280c3255d32cd1f  libffi/src/sh/sysv.S
  0d63b213e999218daa6dcdc5a1e60744  libffi/src/sh64/ffi.c
  428dab3f0a468e35cacb8f9056692fcd  libffi/src/sh64/ffitarget.h
  e2a1ecaa36a455e1ccec5660ccb48ca4  libffi/src/sh64/sysv.S
! affee88dd2aa81579a0a934942bcca7a  libffi/src/sparc/ffi.c
  4f88ee04ece8cef7f52a40a807a46035  libffi/src/sparc/ffitarget.h
! 313a7e105f1fcddd71b8b1ab413aff03  libffi/src/sparc/v8.S
  21972ac3a88f80f58ebdf5344f0a72f7  libffi/src/sparc/v9.S
! 01b4ce3fbb4281cd713aa5bc0bf8493d  libffi/src/types.c
! 4fbbda7a9aaf686eb9f7d03e36ea357d  libffi/src/x86/ffi.c
! 831cf402704bca0ad0c1c40a7a6eaf75  libffi/src/x86/ffi64.c
  829e0f33f9d784955a4d9026b482d027  libffi/src/x86/ffitarget.h
  4ab47d2230118abb493faee2699ce34b  libffi/src/x86/sysv.S
! 26703c587ae50589ec65643faf83a4c9  libffi/src/x86/unix64.S
! 0d77a5b0fd2c441051148db60c81bed9  libffi/src/x86/win32.S
  1ded054093de910d9786c62bc4fe8cc6  libffi/stamp-h.in
  04e06926cecf1198af45894dc46ffd39  libffi/testsuite/Makefile.am
! f22f38739d549ff04c396eca7efcaed3  libffi/testsuite/Makefile.in
  dce80ba7e038ca18591aabc6d3d2582c  libffi/testsuite/config/default.exp
! 59e9009ad5e68807153a94d990a2e895  libffi/testsuite/lib/libffi-dg.exp
  a24c2116a39e098a6217e8a2179d95ad  libffi/testsuite/libffi.call/call.exp
! 4426cb0cbe1bd61aae115fbd2a3a579a  libffi/testsuite/libffi.call/closure_fn0.c
! 491dbcc72ec7d753642e7d10230080b8  libffi/testsuite/libffi.call/closure_fn1.c
! c3ab7fdf5c89cba5128fce452b0a838f  libffi/testsuite/libffi.call/closure_fn2.c
! 565acd8f954026a4ec68b26bbe5f3171  libffi/testsuite/libffi.call/closure_fn3.c
! 6d8de8467ed7eb393924f2534ed35c36  libffi/testsuite/libffi.call/closure_fn4.c
! 41b870a128fed31a59029b1ee5eeca42  libffi/testsuite/libffi.call/closure_fn5.c
! ec9d6b50cbfa07bc996d1514ade69872  libffi/testsuite/libffi.call/cls_12byte.c
! d75818e1535561c9e8defb62c66dcf55  libffi/testsuite/libffi.call/cls_16byte.c
! 91c89bbdfe15c722791aa3ac602a6821  libffi/testsuite/libffi.call/cls_18byte.c
! 5e034ce7c73b38d9f31ed87f68c39832  libffi/testsuite/libffi.call/cls_19byte.c
! cae9608952925a26c028abd29e4000e1  libffi/testsuite/libffi.call/cls_1_1byte.c
! 0540082c335633b88b40cb4ae35d1e2e  libffi/testsuite/libffi.call/cls_20byte.c
! f49d0f40bee394b7cdd092d93fd7146a  libffi/testsuite/libffi.call/cls_20byte1.c
! 477fd9034ae952f9924790ad21c51fe8  libffi/testsuite/libffi.call/cls_24byte.c
! de99316b37f1d69265afdce63664241b  libffi/testsuite/libffi.call/cls_2byte.c
! da6da05f62120c3a11c4ce627eb13b22  libffi/testsuite/libffi.call/cls_3_1byte.c
! b8ca2847861167b7b2c9eb4bef6a2342  libffi/testsuite/libffi.call/cls_3byte1.c
! 6a90e49a4032afab2775e65a61daa956  libffi/testsuite/libffi.call/cls_3byte2.c
! 487f02b11b0e0b0b4db231669855869f  libffi/testsuite/libffi.call/cls_4_1byte.c
! e3d4f5609f8663b838e8a9145b0eb455  libffi/testsuite/libffi.call/cls_4byte.c
! b4c329e2715f90d173337d0ded8c048d  libffi/testsuite/libffi.call/cls_5byte.c
! d5eaf3fbe81cb52a7ac29ba22141871d  libffi/testsuite/libffi.call/cls_64byte.c
! 56c4433fb1dff8143c541f089ff91d7f  libffi/testsuite/libffi.call/cls_6byte.c
! c512d07bd51ce217053dd74900ca102c  libffi/testsuite/libffi.call/cls_7byte.c
! 6d9f57d4008d901cd246b2d72c4d34dc  libffi/testsuite/libffi.call/cls_8byte.c
! 0c68b5047c5c7f34282e13246be2fd81  libffi/testsuite/libffi.call/cls_9byte1.c
! 68ae1516e5d965a1888970fe43c98e96  libffi/testsuite/libffi.call/cls_9byte2.c
! 6fd806a5c9014740c3c8af7eaf97a004  libffi/testsuite/libffi.call/cls_align_double.c
! cfaeaf32d693b36900c92dd3ee1c3298  libffi/testsuite/libffi.call/cls_align_float.c
! 88c84a4c8336939a885dc8589dc42515  libffi/testsuite/libffi.call/cls_align_longdouble.c
! da7567c27b7905c9b48a5904bdcd2d5f  libffi/testsuite/libffi.call/cls_align_pointer.c
! c1940145653d37331ac001bbcc2c112e  libffi/testsuite/libffi.call/cls_align_sint16.c
! b5fce571b1afcb15932bde5c2e778ef6  libffi/testsuite/libffi.call/cls_align_sint32.c
! e42d3fe8329165dae258e1784b09fc50  libffi/testsuite/libffi.call/cls_align_sint64.c
! d87df69d7d5912b786ae1e18a3f2684d  libffi/testsuite/libffi.call/cls_align_uint16.c
! 5350a21e41b8fdac48e33874510109c5  libffi/testsuite/libffi.call/cls_align_uint32.c
! bdd0227e15446e33d466b4833241e25d  libffi/testsuite/libffi.call/cls_align_uint64.c
! f0d6386c329119e09f7f119f4009cf5d  libffi/testsuite/libffi.call/cls_double.c
! 352031f55df9d984c72207175aad152b  libffi/testsuite/libffi.call/cls_float.c
! b4a7fbcb6c546332c5625862bf6520f7  libffi/testsuite/libffi.call/cls_multi_schar.c
! 18ad3127a0cf7c3d919cb73d395d98a5  libffi/testsuite/libffi.call/cls_multi_sshort.c
! 8633ecd1e9ff0e8e7b29e59fe067f67e  libffi/testsuite/libffi.call/cls_multi_sshortchar.c
! 72bb3734faf0d95ec7ab9aa61521661d  libffi/testsuite/libffi.call/cls_multi_uchar.c
! 2fea0952020de6e1c6b3c03cb1a0df38  libffi/testsuite/libffi.call/cls_multi_ushort.c
! d75ff569d6f0c2126f0d9a7e3a410394  libffi/testsuite/libffi.call/cls_multi_ushortchar.c
! 716212d6e94fb831cad758bc88bdb200  libffi/testsuite/libffi.call/cls_schar.c
! f19422ee018707a6c57e634a9635e0ab  libffi/testsuite/libffi.call/cls_sint.c
! 7d016388be642ed1d4e56fbbed0d529a  libffi/testsuite/libffi.call/cls_sshort.c
! 9ce3c3b89f5eadb686bccf2a7991c4e1  libffi/testsuite/libffi.call/cls_uchar.c
! 416de42e6b16a56131f74f019369263e  libffi/testsuite/libffi.call/cls_uint.c
! ca44941ac34d1fe0818c163ae081649f  libffi/testsuite/libffi.call/cls_ulonglong.c
! b69a027209c089630905069535f74cd5  libffi/testsuite/libffi.call/cls_ushort.c
  56ad61fcb0a76f50c0bd1b5786acfba6  libffi/testsuite/libffi.call/ffitest.h
! 1db1c42a961c11627f19295334fb54cd  libffi/testsuite/libffi.call/float.c
  ae86cec98c4d06702b3de147e21053f7  libffi/testsuite/libffi.call/float1.c
! bb3fb72c0002a43ff895b6b0b275ee13  libffi/testsuite/libffi.call/float2.c
  f5260f5f182a88a7a32d7079b77a540b  libffi/testsuite/libffi.call/many.c
! ae2b4339e2eb0ab0e4b30d5084000bdf  libffi/testsuite/libffi.call/many_win32.c
! a45eb52be4f81f2b27c6a19bf55b5c51  libffi/testsuite/libffi.call/nested_struct.c
! 472e8c4f7dbae692755ed5297faa20e6  libffi/testsuite/libffi.call/nested_struct1.c
! 352f8b47dd5c4374d4dd7fd24260c690  libffi/testsuite/libffi.call/nested_struct2.c
! 579888e428726c1034bbc5a337e49171  libffi/testsuite/libffi.call/nested_struct3.c
! 5bc46aff3c6ee1c347775bca2d96b2e8  libffi/testsuite/libffi.call/problem1.c
! 9b934bf83b08837b3b2e9b818e15f513  libffi/testsuite/libffi.call/promotion.c
  f4812df3bbe47b9a5922b1f136904b57  libffi/testsuite/libffi.call/pyobjc-tc.c
! 078cd9c63752c42aa760283f267c9fc0  libffi/testsuite/libffi.call/return_ll.c
! 81cd505792e7cd19db53eb3c8017958a  libffi/testsuite/libffi.call/return_sc.c
! 1e4dca526301528d0af6bc0d3e51fd16  libffi/testsuite/libffi.call/return_uc.c
  bf019a0ea09d4b7166d0a79e703e790b  libffi/testsuite/libffi.call/strlen.c
  bf09294b074175b9c907ee7d5d78df7f  libffi/testsuite/libffi.call/strlen_win32.c
  e74f6738f9d355510a6cde504ceac4df  libffi/testsuite/libffi.call/struct1.c
--- 18903,19136 ----
  6110b08cb3fc89c95d23f487f2389b64  intl/osdep.c
  0f96f085d8dbdf67697a23f38865ffc1  intl/plural-exp.c
  4b41c3ca05dfe9445743033b5ae7cf6e  intl/plural-exp.h
! 6751e8a8fee59eef6c9c2d26faca3568  intl/plural.c
! 27aa90e42613dcc1b3fd0f6522875079  intl/plural.y
  8ba33a586960c0e4072c7d1f7b50b93e  intl/relocatable.c
  b06d53a83585fd7db8c2db9a182549e0  intl/relocatable.h
  ab99112442f51f89c122ffba737fdcdc  intl/textdomain.c
! 7047c051f89d8e2b22fb9406d901aa79  libada/ChangeLog
! 5815787a13b3aec9989758f23eb60274  libada/Makefile.in
! b00081627666571decd79b0b7367ca00  libada/configure
! bd117467cbb66ffd3004284491e94704  libada/configure.ac
! ac81461263c340d1f6c7ed86a63b06de  libcpp/.cvsignore
! 9d1601a95edfb9079c141c973b157cfa  libcpp/ChangeLog
! 6ca505b8cabc03d6e7b22dc9f2095aee  libcpp/Makefile.in
! b88d8329be28feaae7b9f34e41302697  libcpp/aclocal.m4
! eb5a7c1a492f43b1575616e5b747abed  libcpp/charset.c
! e51bc1c72be932cc3831a7db33e6debb  libcpp/config.in
! fc411c0ccb37db2415e7098517afbe80  libcpp/configure
! f142cf1cb8d3bcda7435dd210e359515  libcpp/configure.ac
! 14163c2841b9f5f6b48cd4929baa2c89  libcpp/directives.c
! e711c2870d69245de40d556d82947400  libcpp/errors.c
! ae16cd61e845fd68d6a17999b552d138  libcpp/expr.c
! 86e03d5b68a43b9e2edd2790be1a6264  libcpp/files.c
! 49c79c66556202b2b6cfcc711c94840f  libcpp/identifiers.c
! e7eb9312efb3aa1e6e292f0198659c27  libcpp/include/cpp-id-data.h
! 8a3ae1e6e0234cef0991b13548e0b60f  libcpp/include/cpplib.h
! f50b0702f1e5b15ed223972166154606  libcpp/include/line-map.h
! 1a83659ea07de8d5e032870cde36a1eb  libcpp/include/mkdeps.h
! 895c5df163ad61327a1f1b0459d077ba  libcpp/include/symtab.h
! 7a6e3ec7c1ddde7e47b0905f285482a7  libcpp/init.c
! 669a6d09fd6c26c1351268ce1a1dade4  libcpp/internal.h
! ebd3806bb245d65f90f701ba80c5cf89  libcpp/lex.c
! 5f981ea248e02035e3d14ed02055b012  libcpp/line-map.c
! 24306814dc20094b8472c575bb12bfc6  libcpp/macro.c
! 684490d08fdddac341de109d19b1c2b1  libcpp/makedepend.c
! 9633f47a7551994802951a51b51f21e6  libcpp/mkdeps.c
! 11a1ca02b5637013b0e1cac01571a279  libcpp/pch.c
! 547ef6d142e6cf850559257c6349be48  libcpp/po/ChangeLog
! 72ae28fc27c7e481d54b6e8a2273d515  libcpp/po/be.gmo
! 3689b5ce8fb31ca4387ceae54626c1d4  libcpp/po/be.po
! 0db5bb78cf4b6171ade028a707f51587  libcpp/po/ca.gmo
! b94b877020b3a0a62b75108fc3405da0  libcpp/po/ca.po
! a0f3d59744b3cea53b5e57fcd8eebcaa  libcpp/po/cpplib.pot
! 3bfaae2f390b027043c7714f2ca892b8  libcpp/po/da.gmo
! edb73490eccb0af38764523b98c51c91  libcpp/po/da.po
! e44170039a819a02bda96fd440942db1  libcpp/po/de.gmo
! d08b28a9034f37136a50eed0ca110781  libcpp/po/de.po
! f84ca430a021bfc36408157cd783dc43  libcpp/po/el.gmo
! de9d69fe02ee9e7afb5945f36cb63db1  libcpp/po/el.po
! cc5360b2d04b436e1c355fe9ea970148  libcpp/po/es.gmo
! 829500307050b83177d17c25de308290  libcpp/po/es.po
! c1dc9914c20048c2e7d2fd2eadd0d117  libcpp/po/fr.gmo
! 2cad5b21ee35ffd7793157fe9c20c987  libcpp/po/fr.po
! b774ce69af350ab4d32a7e7238d4a1f7  libcpp/po/ja.gmo
! cb7e8ee46780816a4844b9cfd30ed517  libcpp/po/ja.po
! 86274aaf673e78d47d50167895d6fb5c  libcpp/po/nl.gmo
! 19d7f3d2f335b30716a74a28b3700ed8  libcpp/po/nl.po
! 0376b98707358a2ff1d7d25abb14e040  libcpp/po/rw.gmo
! 52886fbc6d1b7b24b62061445beddc87  libcpp/po/rw.po
! 3b6d8fd2e477719221288d2eb8620343  libcpp/po/sv.gmo
! 275cf61dfcfc0939ac009e25ec1767d4  libcpp/po/sv.po
! ae83e93baa92af006e390c07095d4645  libcpp/po/tr.gmo
! e51e19b7b28bd5603ca2d9b50f1b79d2  libcpp/po/tr.po
! ccd6ac86f0cfa39e60bc1a870c66007c  libcpp/po/vi.gmo
! 76a7f1d62320b7d49c308f799a88ee3a  libcpp/po/vi.po
! 1a12971101d06797ea7786ed7e1ac94c  libcpp/symtab.c
! d53f9e6b9803f7991f8e9f632da4f6f7  libcpp/system.h
! 24b13d1f57b1c67644bec801bf2ae8ac  libcpp/traditional.c
! 7a55d18961523bad054a918d584a6667  libcpp/ucnid.h
! b39cac9c72b8bed17c033346e0c620a3  libcpp/ucnid.pl
! ca61e5e024f0d1d1e58e2ea5fa61727e  libcpp/ucnid.tab
! ac81461263c340d1f6c7ed86a63b06de  libffi/.cvsignore
! 4f50f13f6ce4d271c87d3b92637685b3  libffi/ChangeLog
  fbbc216bc25d759a72ea3e6d734af56b  libffi/ChangeLog.libgcj
  d946d2b97454ad50a1dbfbf48923c5be  libffi/ChangeLog.v1
  085f9917800070e791f49bf4733e23fa  libffi/LICENSE
! 9990f7108fcaee40e768c526513a5f26  libffi/Makefile.am
! 42ae9eb89d969c5c2bce1a4fd185aee4  libffi/Makefile.in
  dd0edecd243634e1925c0ce2134aaa45  libffi/README
! 0ec3418e6c2e6b89c24cffd4322b6368  libffi/acinclude.m4
! 8122dd2d5ecda309c0adffff58d5df4a  libffi/aclocal.m4
! 62ff44b88ede168f060c21e61f4e732c  libffi/configure
! 5685fc3a06df6fffa1457263f37f3cbd  libffi/configure.ac
! bec544523f8f7f3d5136f67598cf609a  libffi/configure.host
! a43eeb86871f975d813c68f49e4e3338  libffi/fficonfig.h.in
  800593333c0fdb237201a25cf22c1121  libffi/include/Makefile.am
! 899be852a58f878cc62d735fc899cd31  libffi/include/Makefile.in
! 86d1b1eed4cf701bc02fa6868a70ef99  libffi/include/ffi.h.in
! bb2e4dcd0558bce2932a1b59e204d1c6  libffi/include/ffi_common.h
! fea69bf0c254aa8f860a0b0ed487546d  libffi/libtool-version
  8f1d3e3ef0c003f6a69c225a21f572a1  libffi/src/alpha/ffi.c
  80b584d92653e1f8c33b6f02739e03fa  libffi/src/alpha/ffitarget.h
  6cd31f1399d4268c33bce1cb17acf2fa  libffi/src/alpha/osf.S
! 1c6e7df6f3da0759184a7f42da05913e  libffi/src/arm/ffi.c
  129d5ce3064dbf3e3a99dba0c6ee50b6  libffi/src/arm/ffitarget.h
! 770a4cd16a128d62845938d09cd01463  libffi/src/arm/sysv.S
  c23b060daf7379293b692b26b96c773c  libffi/src/debug.c
  0d4e7344633ddb45c6fdee8053ae93df  libffi/src/ffitest.c
! 251c63f8b07086c71a02e52f24a64c83  libffi/src/frv/eabi.S
! 91330821fbb0cbecadc61c5f1a113050  libffi/src/frv/ffi.c
! d1bbd2a84870a27472a8f2e38af7ec3f  libffi/src/frv/ffitarget.h
! 9e6464ebb4b54be50c23a1c4a5c605aa  libffi/src/ia64/ffi.c
! a6d101ee8acad37f0b3e472b4b686de4  libffi/src/ia64/ffitarget.h
! 744b95e6d9f4fd403516c7be72e27914  libffi/src/ia64/ia64_flags.h
! d9449ba560c5e6d13f4aaac2a255f744  libffi/src/ia64/unix.S
  341795d6d831cb5a5858c6c2596649da  libffi/src/java_raw_api.c
+ 2ecbb989d460cbc1292d7dbe3f073e97  libffi/src/m32r/ffi.c
+ 1cf60578f42fad0141df7c5c8a43a407  libffi/src/m32r/ffitarget.h
+ fde1f5cb81ab7ce114af861c94c368c0  libffi/src/m32r/sysv.S
  02286b8ab506a66e4ea41015fb2c4fab  libffi/src/m68k/ffi.c
  a591afdd6fceb96566ab43e4a2f2e692  libffi/src/m68k/ffitarget.h
  68712d7da5c3c036ee6a3c915294925d  libffi/src/m68k/sysv.S
! 56beb72e019fc1e06d87eaa2fcc24323  libffi/src/mips/ffi.c
! e32fe305f89e9639ee8fc903d28f99a0  libffi/src/mips/ffitarget.h
  e0513e7f9e5f369f6dec7842f6b75276  libffi/src/mips/n32.S
! 1c46f64552725eabd3434e623b4d87a8  libffi/src/mips/o32.S
! 7fb712f5d97e8e807b80456634fd3e3d  libffi/src/pa/ffi.c
! b29fc14489b5d70a3e9ac8c3724411f9  libffi/src/pa/ffitarget.h
! 401fc439592654cf6f92661286bbcda2  libffi/src/pa/linux.S
! d23701ff3a05628dde1d8c18d2911662  libffi/src/powerpc/aix.S
! 049e042e968b560f48689cfc881d2db6  libffi/src/powerpc/aix_closure.S
! 41549f68aeedd29e849159d4567ede07  libffi/src/powerpc/asm.h
! 61f822f0298a1bd27b62e7cb421fc97c  libffi/src/powerpc/darwin.S
! 305fe84e5eb35f0762be4feab1aea840  libffi/src/powerpc/darwin_closure.S
! b9a2e8615bc91767af95ddacead5a558  libffi/src/powerpc/ffi.c
! a5488f46dd8d3936dc78322e68bd4e7a  libffi/src/powerpc/ffi_darwin.c
! c6636cf45de17c69d5affc204f8316ee  libffi/src/powerpc/ffitarget.h
! 5e0ab5c06c75a3b67d22efe0959a8f41  libffi/src/powerpc/linux64.S
! 29ef2d91bb6151668076027e076ab5c8  libffi/src/powerpc/linux64_closure.S
! 98d153bfc4999e8ce24792d61620410c  libffi/src/powerpc/ppc_closure.S
! 956435918f1432204be610864df9f4d8  libffi/src/powerpc/sysv.S
! a454b8e335a076bf55035b68f6526e33  libffi/src/prep_cif.c
  3b1e13772c2bd8ebbf51d0be097581af  libffi/src/raw_api.c
! b493eee9f034b8079060cf2a323543f8  libffi/src/s390/ffi.c
  9ef0dc6b1d0a81fb5de092076d57090f  libffi/src/s390/ffitarget.h
  b824586cfd875b7c1c6f7482800cb3ab  libffi/src/s390/sysv.S
! 2034144eb9c87f3ad07fd9ba8b9e0ba3  libffi/src/sh/ffi.c
  b09467107867053f95dbf8f5de6e1597  libffi/src/sh/ffitarget.h
! 2856b0306776f44ce907a42dc30a4f58  libffi/src/sh/sysv.S
  0d63b213e999218daa6dcdc5a1e60744  libffi/src/sh64/ffi.c
  428dab3f0a468e35cacb8f9056692fcd  libffi/src/sh64/ffitarget.h
  e2a1ecaa36a455e1ccec5660ccb48ca4  libffi/src/sh64/sysv.S
! c327d3b09d5b98a3143bc02fd3758edc  libffi/src/sparc/ffi.c
  4f88ee04ece8cef7f52a40a807a46035  libffi/src/sparc/ffitarget.h
! d8e8e41b53e8162fd60f3af758918c02  libffi/src/sparc/v8.S
  21972ac3a88f80f58ebdf5344f0a72f7  libffi/src/sparc/v9.S
! 40d8d8e5d7aa9942d5b3d161502d52b4  libffi/src/types.c
! fe8720ba3b65249ab239a55536fd6568  libffi/src/x86/ffi.c
! bd14523d22c834946fafb7f4d7d21edb  libffi/src/x86/ffi64.c
  829e0f33f9d784955a4d9026b482d027  libffi/src/x86/ffitarget.h
  4ab47d2230118abb493faee2699ce34b  libffi/src/x86/sysv.S
! fd09f39826320b70362816b3ec9024d3  libffi/src/x86/unix64.S
! 53e481f71098524d27da490dc2b52b53  libffi/src/x86/win32.S
  1ded054093de910d9786c62bc4fe8cc6  libffi/stamp-h.in
  04e06926cecf1198af45894dc46ffd39  libffi/testsuite/Makefile.am
! 9f91003bdf681b7d6ba9be41e432c6db  libffi/testsuite/Makefile.in
  dce80ba7e038ca18591aabc6d3d2582c  libffi/testsuite/config/default.exp
! f428e5edc229b1a87ec1ca1d49917ad1  libffi/testsuite/lib/libffi-dg.exp
  a24c2116a39e098a6217e8a2179d95ad  libffi/testsuite/libffi.call/call.exp
! fe7cc6db29cc7f04692ffc0800c15a1a  libffi/testsuite/libffi.call/closure_fn0.c
! 946c5b2c986a68c74abf67cf5f4c2190  libffi/testsuite/libffi.call/closure_fn1.c
! 335f92a83a040881d1e4acddd1bee716  libffi/testsuite/libffi.call/closure_fn2.c
! f6ce6464567a71bfeeb4b1b740180b7b  libffi/testsuite/libffi.call/closure_fn3.c
! 25daea5c1a8096340d217f672d7062c2  libffi/testsuite/libffi.call/closure_fn4.c
! 5a570ebb09048267c49d6f25f87b913c  libffi/testsuite/libffi.call/closure_fn5.c
! 58b9b43a12c4a4796e6d1283318808fa  libffi/testsuite/libffi.call/cls_12byte.c
! c8284b2beee2cbf6262d6b831c1e3b2c  libffi/testsuite/libffi.call/cls_16byte.c
! 077c2d59c555ea42152deefc7282108c  libffi/testsuite/libffi.call/cls_18byte.c
! 771b016ab5dded3956ec515f9ed8722d  libffi/testsuite/libffi.call/cls_19byte.c
! 2d05c53ee031cc2a9792086fcd9552b1  libffi/testsuite/libffi.call/cls_1_1byte.c
! 3907d3ff52daba3f11d008d8a599f478  libffi/testsuite/libffi.call/cls_20byte.c
! eea826014bfb840bcf68346d3dfdcd67  libffi/testsuite/libffi.call/cls_20byte1.c
! 10222b553792aeb9111ece3fe231ed44  libffi/testsuite/libffi.call/cls_24byte.c
! 04d30479f4f941944b444ab4cb31082d  libffi/testsuite/libffi.call/cls_2byte.c
! 4c7a23cf607fa998f3077caed7446c36  libffi/testsuite/libffi.call/cls_3_1byte.c
! 71e294b55ab9454214653c8ad549a537  libffi/testsuite/libffi.call/cls_3byte1.c
! 61f9321c3d73c8ed7063af894bd49d92  libffi/testsuite/libffi.call/cls_3byte2.c
! 8df082fc51bb99de4c7ae3a056c1628d  libffi/testsuite/libffi.call/cls_4_1byte.c
! 10c3062e4c0ff0ca0e90df20ea482a04  libffi/testsuite/libffi.call/cls_4byte.c
! 62be5284f5c5bb8527dfaca88c289303  libffi/testsuite/libffi.call/cls_5byte.c
! 75f85bf4d0c0323801f485e33a7c3be6  libffi/testsuite/libffi.call/cls_64byte.c
! dbdb6d2af69f9aa3bf875c492346a93b  libffi/testsuite/libffi.call/cls_6byte.c
! f537c64e2d4f5d5b1d97bf0219829a07  libffi/testsuite/libffi.call/cls_7byte.c
! 975b016d9cd5b83ebd0122ff3e7c71a1  libffi/testsuite/libffi.call/cls_8byte.c
! c945ad2fcf487ddf8fbfd9aa51c314a9  libffi/testsuite/libffi.call/cls_9byte1.c
! 58a4b823f8fef504ee04f7190d0e9fa4  libffi/testsuite/libffi.call/cls_9byte2.c
! 0f48ee7b2830e2f35b54e56d146a08f3  libffi/testsuite/libffi.call/cls_align_double.c
! 4dedb4e2d9ecf59f43c7b14aee005de4  libffi/testsuite/libffi.call/cls_align_float.c
! 13f2a08c0c2f23783fa9712ace70aed3  libffi/testsuite/libffi.call/cls_align_longdouble.c
! 8f8befd1f7fa43617f6a3851547c800d  libffi/testsuite/libffi.call/cls_align_pointer.c
! db9da808e21e6078a3de5a5a8cecfb58  libffi/testsuite/libffi.call/cls_align_sint16.c
! 853fa665969f626c57ec57869e3c98dd  libffi/testsuite/libffi.call/cls_align_sint32.c
! 4b0422f27f578881e49f631cc8b2ea7b  libffi/testsuite/libffi.call/cls_align_sint64.c
! 5f6401343ab859840205967f3f7a2ff8  libffi/testsuite/libffi.call/cls_align_uint16.c
! 23ee4284e717aea47c52a824fe8c1e51  libffi/testsuite/libffi.call/cls_align_uint32.c
! acc995821e7b982b43a7f53e99cd21d7  libffi/testsuite/libffi.call/cls_align_uint64.c
! fde0d7261eaebee7a35207f0afb730a3  libffi/testsuite/libffi.call/cls_double.c
! 96d6f9c8a9133af7c4e9fedba17527ba  libffi/testsuite/libffi.call/cls_float.c
! 711aa2af4b3ccdeb0800f671c75854ef  libffi/testsuite/libffi.call/cls_multi_schar.c
! 9158fbfa7a7eca2d848eefc20e53c8d6  libffi/testsuite/libffi.call/cls_multi_sshort.c
! 4e77851a686d0d3cf821e8655be15083  libffi/testsuite/libffi.call/cls_multi_sshortchar.c
! 6ad549df70843c9a651ee8760bc34b0a  libffi/testsuite/libffi.call/cls_multi_uchar.c
! b92efeb5438f49042512127c46894bc1  libffi/testsuite/libffi.call/cls_multi_ushort.c
! da87495ad7e5421ac9138069f3291eea  libffi/testsuite/libffi.call/cls_multi_ushortchar.c
! 8c203228bad3e2babc754ada303c7e75  libffi/testsuite/libffi.call/cls_schar.c
! 04d4f781d43635b5ef101a37e524f074  libffi/testsuite/libffi.call/cls_sint.c
! 6f01e732cd7632f2a2a9155be1d46204  libffi/testsuite/libffi.call/cls_sshort.c
! cbc2a8621e8c8384a82e03f1ae2f5ee6  libffi/testsuite/libffi.call/cls_uchar.c
! 87d1f81f0d4d75e74db4387546a51787  libffi/testsuite/libffi.call/cls_uint.c
! 95a9cd8dfcbcd2263edc077b4ec79ab7  libffi/testsuite/libffi.call/cls_ulonglong.c
! 31dfb3d9a6eef8749b1c48a97adac3d8  libffi/testsuite/libffi.call/cls_ushort.c
  56ad61fcb0a76f50c0bd1b5786acfba6  libffi/testsuite/libffi.call/ffitest.h
! 0ec9c0453c7c5ab9fd2f5f9e2eae1230  libffi/testsuite/libffi.call/float.c
  ae86cec98c4d06702b3de147e21053f7  libffi/testsuite/libffi.call/float1.c
! eab98d79e404c61620101d178bc8feb1  libffi/testsuite/libffi.call/float2.c
! 7d6d1a3a3cfc9d32bcd76ae40d409d9a  libffi/testsuite/libffi.call/float3.c
  f5260f5f182a88a7a32d7079b77a540b  libffi/testsuite/libffi.call/many.c
! f610a8ac94d8fba4221ce528f25b9855  libffi/testsuite/libffi.call/many_win32.c
! 9bbe42f2c971a1fa7015abdd3065713e  libffi/testsuite/libffi.call/negint.c
! 9b334d68415f0166546f7cc5d64854eb  libffi/testsuite/libffi.call/nested_struct.c
! 9fa99e4353566fecc432e9bf88824f4f  libffi/testsuite/libffi.call/nested_struct1.c
! e6fa0a66407dd265eb32b89ed4dc860c  libffi/testsuite/libffi.call/nested_struct2.c
! 49f80d97fe931f07d8a3e64c6dc123df  libffi/testsuite/libffi.call/nested_struct3.c
! 867e55a015556f42b0e1b36e0d2ec1c9  libffi/testsuite/libffi.call/problem1.c
! 84f713cf00cdc18539fc910c01b9b92c  libffi/testsuite/libffi.call/promotion.c
  f4812df3bbe47b9a5922b1f136904b57  libffi/testsuite/libffi.call/pyobjc-tc.c
! 63b5fe4e262d0dc8190cb9ba24e921ae  libffi/testsuite/libffi.call/return_ll.c
! 5b0e3c94ed9d22cba4fe8813823ab945  libffi/testsuite/libffi.call/return_ll1.c
! 06c16d8cdc9240f140318c0f7c457a65  libffi/testsuite/libffi.call/return_sc.c
! 3aeca5109ebb9e697863cd60fc609723  libffi/testsuite/libffi.call/return_uc.c
  bf019a0ea09d4b7166d0a79e703e790b  libffi/testsuite/libffi.call/strlen.c
  bf09294b074175b9c907ee7d5d78df7f  libffi/testsuite/libffi.call/strlen_win32.c
  e74f6738f9d355510a6cde504ceac4df  libffi/testsuite/libffi.call/struct1.c
*************** c596ddb985689ec61b12aaa3d22affa3  libffi
*** 16593,16606 ****
  882fafdfa1224611561634a8b86ecf8a  libffi/testsuite/libffi.call/struct8.c
  0717d05df52a64bc7535ebd46256c507  libffi/testsuite/libffi.call/struct9.c
  243f7581c06247a647a3a55b051b8d5e  libffi/testsuite/libffi.special/ffitestcxx.h
! 8bf1ce1c4956ec886ada3e6c66e88395  libffi/testsuite/libffi.special/special.exp
! aa180296123f55a620a71b73a6fd5005  libffi/testsuite/libffi.special/unwindtest.cc
  7fbc338309ac38fefcd64b04bb903e34  libiberty/COPYING.LIB
! 5f7093c2cef6bb53ddbc3e52d3996ba0  libiberty/ChangeLog
! bde64f57492c97ff70c538039c717d44  libiberty/Makefile.in
  294191545dc71f5ad13229b0a5bfd7b1  libiberty/README
  5b535b62413b3770aeca6d516e0d6325  libiberty/_doprnt.c
- 20df91b8434474ebfb22c599f0f9d0e4  libiberty/acconfig.h
  7205cd3b640330a0caee1bb3d7a7076a  libiberty/aclocal.m4
  e9ff099df53462f7df5a268e290f39c2  libiberty/alloca.c
  d105d43b25b5a5967d6bdbd3896f3666  libiberty/argv.c
--- 19143,19473 ----
  882fafdfa1224611561634a8b86ecf8a  libffi/testsuite/libffi.call/struct8.c
  0717d05df52a64bc7535ebd46256c507  libffi/testsuite/libffi.call/struct9.c
  243f7581c06247a647a3a55b051b8d5e  libffi/testsuite/libffi.special/ffitestcxx.h
! 08bb6568e653b7801b6e74501a0c8886  libffi/testsuite/libffi.special/special.exp
! 2eae8a5b3ba2f1438bd633704a31b923  libffi/testsuite/libffi.special/unwindtest.cc
! ac81461263c340d1f6c7ed86a63b06de  libgfortran/.cvsignore
! 376929c45c97b9d80c4e66f03ea10676  libgfortran/AUTHORS
! ade9a053df81f5b9408d2f4f5546df86  libgfortran/COPYING
! c1dd40e7cad10175ec8df0cf9f638a0f  libgfortran/ChangeLog
! 0e78777bd9d7ccdefac8c3e85e1222b1  libgfortran/INSTALL
! 9621e07a0507ed88fc4bf208bfc09f65  libgfortran/Makefile.am
! dd54148c2796d34046f8a50ec6a4c0d8  libgfortran/Makefile.in
! 65effa991a27ce930fecd3e75cc0e327  libgfortran/NEWS
! d55c09e9784812d1d1c156838e914470  libgfortran/README
! 896831b791b89f94d242f70d7a4c680c  libgfortran/acinclude.m4
! 0f4f0f6dffab8ef04317b78b641c2f30  libgfortran/aclocal.m4
! 3cb67b27c25c3806fe9e5cebad6e7c02  libgfortran/c99_protos.h
! 678a8c048ce05ddc7bb617e0f5fa187f  libgfortran/config.h.in
! 4e7de9808499f5b22020deeaa29d320b  libgfortran/configure
! 6e7f3aa444d02db79ced06144cb647d9  libgfortran/configure.ac
! 2e50a8343319a5542ee10ec4d8a933b1  libgfortran/fmain.c
! 826103e38cc3a1235b4aa1d9d7bdd4ed  libgfortran/generated/_abs_c4.f90
! 061436ae0e8035d552ffca04c373ec36  libgfortran/generated/_abs_c8.f90
! a657c81fb004d65834953a61ea997432  libgfortran/generated/_abs_i4.f90
! c4a6528b88051c68512390b6d0bd86a0  libgfortran/generated/_abs_i8.f90
! 65fb088560dc78c82c5153dcf6a3b0cc  libgfortran/generated/_abs_r4.f90
! 4d9341c04624fad1578b7c8dc286af2d  libgfortran/generated/_abs_r8.f90
! 3849e5ad6f128e350505d7429ccf1b8d  libgfortran/generated/_acos_r4.f90
! d4c853d76f8faf652e728624f5e61d47  libgfortran/generated/_acos_r8.f90
! 6b96c51810e96ff564f6d6746c5da472  libgfortran/generated/_aint_r4.f90
! 1ff90b6804501b2a4f2869a9788665ed  libgfortran/generated/_aint_r8.f90
! aebd8af27762396f7f24a95cfe590e3b  libgfortran/generated/_anint_r4.f90
! 5adfd6c05b80e8d36b01e27d9fb7bfd4  libgfortran/generated/_anint_r8.f90
! 0be7bea192108118fbf1c3c92cf73f8a  libgfortran/generated/_asin_r4.f90
! 3a35dba9f5aa94e2f347036306696963  libgfortran/generated/_asin_r8.f90
! a67202a73d4d3269319e5fb1f17abe7c  libgfortran/generated/_atan2_r4.f90
! 6e301f60f59d720821e97c701d6e078b  libgfortran/generated/_atan2_r8.f90
! 3b11090a5ee14b839416a503e5655b03  libgfortran/generated/_atan_r4.f90
! 0789f1cfd8c4da1157a0332f9c7c4357  libgfortran/generated/_atan_r8.f90
! 1c566ff0ffdf21f05f85ae30b595ff80  libgfortran/generated/_conjg_c4.f90
! 07aa05c8dfbd3dafaaa9a9a33552b29f  libgfortran/generated/_conjg_c8.f90
! 7a3aa300b4c2856ac24a776c8e4eb6db  libgfortran/generated/_cos_c4.f90
! fb3ef4dc1ae439e35c5add6f98727655  libgfortran/generated/_cos_c8.f90
! 63695a07cbf6ced74cf3ade8de179b46  libgfortran/generated/_cos_r4.f90
! b360a3f68869c82728686ac290b97087  libgfortran/generated/_cos_r8.f90
! 21fdb3f321f98a1bb10b2472589af9e3  libgfortran/generated/_cosh_r4.f90
! 43480b53919172e106f0981c8ac9de77  libgfortran/generated/_cosh_r8.f90
! d62f5c677ac136e03bf63723b4096666  libgfortran/generated/_dim_i4.f90
! 594bbcb5609a7ce6d8262b0e421f3d02  libgfortran/generated/_dim_i8.f90
! 802324fb6775b5bf469081ae5ff81b27  libgfortran/generated/_dim_r4.f90
! 13205abb3964db47e02f25296655501a  libgfortran/generated/_dim_r8.f90
! 9340ab59fc2f0d9ff76ff16a58057ac1  libgfortran/generated/_exp_c4.f90
! c185f5b5c48e7fc6d21f25435808dfa4  libgfortran/generated/_exp_c8.f90
! 16f0d42fb368a839cfbf2630bfe13a58  libgfortran/generated/_exp_r4.f90
! 465605dcbf83a7a484ac8d4a227471cb  libgfortran/generated/_exp_r8.f90
! 1c6c6bcdd38f642e9573d7bc63ee5578  libgfortran/generated/_log10_r4.f90
! 574ef980a3ad08c2ba7b7db06ae01f1d  libgfortran/generated/_log10_r8.f90
! 8ce4c8b094c80a034344a7c768ccafec  libgfortran/generated/_log_c4.f90
! 44058c1af6529844d676f21981b73de6  libgfortran/generated/_log_c8.f90
! 4e414696da88cddb769f72f93f6534f5  libgfortran/generated/_log_r4.f90
! b1192584584b1b44ca630fc236d3446a  libgfortran/generated/_log_r8.f90
! 19433342e480b6788649c1c328a0f04e  libgfortran/generated/_mod_i4.f90
! 5cca3b2d4cb6f52ebb7dc9b3d1ce1b38  libgfortran/generated/_mod_i8.f90
! 5ba71148af04d7a2cb40b3af863f2dc5  libgfortran/generated/_mod_r4.f90
! e0d6d411fad780c102d47e2aab9d3855  libgfortran/generated/_mod_r8.f90
! 606184a28a2dfb3d164733673ba0f5b7  libgfortran/generated/_sign_i4.f90
! af8664d2f76f30ac477193720edb3b52  libgfortran/generated/_sign_i8.f90
! a55ee4ddf310c82af3b83ba5b1996ef1  libgfortran/generated/_sign_r4.f90
! 8747ffd37b88fbe264401680a72caac8  libgfortran/generated/_sign_r8.f90
! 806da782f3ab54acae6e3f7671e63e3e  libgfortran/generated/_sin_c4.f90
! c2c35724a6755193c3099e0124c0c23d  libgfortran/generated/_sin_c8.f90
! ae25ca0ceccddb4791daf5db5c818658  libgfortran/generated/_sin_r4.f90
! faba29979271133b8a426a927ef3eb27  libgfortran/generated/_sin_r8.f90
! 0ae3824054edaf2550a09b22a3ba0abd  libgfortran/generated/_sinh_r4.f90
! c113a9bfb0effc5cb8d4f9c1b73cf435  libgfortran/generated/_sinh_r8.f90
! c4e7296d3211b2f2e96cb517fed49a62  libgfortran/generated/_sqrt_c4.f90
! 33fda20b1af8a63928834d1741047f5a  libgfortran/generated/_sqrt_c8.f90
! e8b4646951c62f5e8fc27d223bb0be80  libgfortran/generated/_sqrt_r4.f90
! 11a841f5cac00017593b53fac50b2ee5  libgfortran/generated/_sqrt_r8.f90
! 078fe74104507366b301da6fc3ccff33  libgfortran/generated/_tan_r4.f90
! b68adbd323960885123369362420cac4  libgfortran/generated/_tan_r8.f90
! 88dc464bee4ed5e17d61d8be632cd96b  libgfortran/generated/_tanh_r4.f90
! ed7ec50e815dfc08460e48e1ecee4b88  libgfortran/generated/_tanh_r8.f90
! 51bd1cd251fd7797e3e45a3395e54c4d  libgfortran/generated/all_l4.c
! 503e015230118b5de69e52232f76838e  libgfortran/generated/all_l8.c
! a4884e2a68dd6bfa6035200c86ae434c  libgfortran/generated/any_l4.c
! f433b653ac84bf6996fafefb5a177b99  libgfortran/generated/any_l8.c
! 7aeb2aaec8ac028c29fd5a1dd77b91be  libgfortran/generated/count_4_l4.c
! d67662042210d5b2633b4e0812fe46a5  libgfortran/generated/count_4_l8.c
! b8e348915b96bba90d204eeb36c7fbdb  libgfortran/generated/count_8_l4.c
! 7a6576633f89ef192f842bf7f0b04563  libgfortran/generated/count_8_l8.c
! 5df2d14e5067365e03a3b6e292e07212  libgfortran/generated/cshift1_4.c
! a194859f4ed12b459bfba1c345982218  libgfortran/generated/cshift1_8.c
! a9287bfbfe67e7598cb03756e59d23fb  libgfortran/generated/dotprod_c4.c
! 8a05efd7da1f9ef942b3febe9125cc0f  libgfortran/generated/dotprod_c8.c
! 2bae8fbd6c128f51419f6834a8167d00  libgfortran/generated/dotprod_i4.c
! f44fc7d383eb1f18773127c0df7ca589  libgfortran/generated/dotprod_i8.c
! 44c28a9a9c1ac59c1ac69e95a1ec318a  libgfortran/generated/dotprod_l4.c
! 5c5da25a75c645d1bacd691a1f19ad24  libgfortran/generated/dotprod_l8.c
! 2c9375471781b8ad26a04662335bebe9  libgfortran/generated/dotprod_r4.c
! 7907f8258a0812c261af534a3e3185c1  libgfortran/generated/dotprod_r8.c
! 5508aaaaf4e5a95cf6a4b57cfc494e3a  libgfortran/generated/eoshift1_4.c
! 0a862a54d82459d8c05e6c6a8e8520ad  libgfortran/generated/eoshift1_8.c
! 7832315e54ec216e603428826a60a13a  libgfortran/generated/eoshift3_4.c
! e581fa2872460bf6bb4470f4ea03498e  libgfortran/generated/eoshift3_8.c
! 203887f748ccfd7eaf199d5874e31bc8  libgfortran/generated/exp_c4.c
! 2007f9f71453a96f2f838a1b5260da28  libgfortran/generated/exp_c8.c
! 07ecefdaa18ae3f7867bcdd603f8bc12  libgfortran/generated/exponent_r4.c
! 6dbfac23ca7601c211379e437c94a8e6  libgfortran/generated/exponent_r8.c
! fb6531032897fe552fa6efdb7f8a9145  libgfortran/generated/fraction_r4.c
! f71aafc245520f07109de99063da3f3b  libgfortran/generated/fraction_r8.c
! 17fe91ca9d515a5c0b1899e1c4838cc8  libgfortran/generated/hyp_c4.c
! ba78a0c79d9c588bc07d9101e255bb23  libgfortran/generated/hyp_c8.c
! c320dff5bfb016170c6b5a11ea39cfc1  libgfortran/generated/in_pack_i4.c
! 24b0357d1c43f4c3a8e83ed4221e0ebf  libgfortran/generated/in_pack_i8.c
! 9ddce5aa50c4b1a738cf932eea789233  libgfortran/generated/in_unpack_i4.c
! 9aa6f0978bb3f3abc966de1a76685d0f  libgfortran/generated/in_unpack_i8.c
! 195ba50f5cf6b3fe925be4921409ab6a  libgfortran/generated/matmul_c4.c
! 84553ca215b030fc7e0c571667adcb84  libgfortran/generated/matmul_c8.c
! 9a9d189772a16324f3d2bd537aaa3b4a  libgfortran/generated/matmul_i4.c
! c51d357db16aeb760fa640a4e3edef7f  libgfortran/generated/matmul_i8.c
! 1950e5832d2450367597a30d82b28f54  libgfortran/generated/matmul_l4.c
! 348679429c89131a637ac0c6b61fb9ea  libgfortran/generated/matmul_l8.c
! c430b029699f00fef4eb5aa7e377704e  libgfortran/generated/matmul_r4.c
! 8b07ab8294b415a86a37f48075768a59  libgfortran/generated/matmul_r8.c
! 7bda7dbe2a1c023bd5de3ec60c03834e  libgfortran/generated/maxloc0_4_i4.c
! 17d18ad6c81d626e16c75f8633fafb7d  libgfortran/generated/maxloc0_4_i8.c
! aaf13b2a9eebb1f4200906dce51edb16  libgfortran/generated/maxloc0_4_r4.c
! aefda4186ec8b011d69918b15c929a0d  libgfortran/generated/maxloc0_4_r8.c
! fd51f7a0217d1b82b72b46b4b441096b  libgfortran/generated/maxloc0_8_i4.c
! e24860bf696a9e21d0bfb2603d96081f  libgfortran/generated/maxloc0_8_i8.c
! 03be54685d6997aa00b41853af536190  libgfortran/generated/maxloc0_8_r4.c
! f37664d6a78bec3fea9b2271a084e315  libgfortran/generated/maxloc0_8_r8.c
! aa9372be207cef42328fa370d01aef7d  libgfortran/generated/maxloc1_4_i4.c
! 98fd02eb4512f7601932045f2490c792  libgfortran/generated/maxloc1_4_i8.c
! 53bbde562b62bbecbf9c2275d7882813  libgfortran/generated/maxloc1_4_r4.c
! 441719f3a4895b7ccf04e69708e5a937  libgfortran/generated/maxloc1_4_r8.c
! a75f875f701a23e90f4a160db64e77ce  libgfortran/generated/maxloc1_8_i4.c
! 527c118591bef66acd87d65aa285c6f4  libgfortran/generated/maxloc1_8_i8.c
! 66c20cffdde81b12d01c3ea04d9ec597  libgfortran/generated/maxloc1_8_r4.c
! d91eaaf7dafcfead43855ae3efd1f7ba  libgfortran/generated/maxloc1_8_r8.c
! 6470dc1cc2e729430be4625653a06ba2  libgfortran/generated/maxval_i4.c
! ffb1862a1e563462e2ae9532f0f481e8  libgfortran/generated/maxval_i8.c
! 17ee174743addefe6fe52c7071f25225  libgfortran/generated/maxval_r4.c
! 13a304714a5784cbd0bade4fdfe835c5  libgfortran/generated/maxval_r8.c
! 668c862a29b9517d7b15ba18560228de  libgfortran/generated/minloc0_4_i4.c
! ab3b5b1249d2c5c882a3a7c039b62135  libgfortran/generated/minloc0_4_i8.c
! 087dccd88df3b6e2af9571c4bbd5af0d  libgfortran/generated/minloc0_4_r4.c
! f694bfb96138535faebcd1af38f10c46  libgfortran/generated/minloc0_4_r8.c
! 93992a60d4c9abe8e9ff2f4b927e62f1  libgfortran/generated/minloc0_8_i4.c
! 2e14e2484e22af51bfcc5bce4d73e4d5  libgfortran/generated/minloc0_8_i8.c
! 6023a06438c46ccda18124ca9c9f5c13  libgfortran/generated/minloc0_8_r4.c
! fc7e5d738823751f0ab2b993718d7cfd  libgfortran/generated/minloc0_8_r8.c
! 801021200d44b6e54e12a8f324bf94a0  libgfortran/generated/minloc1_4_i4.c
! fc9c42ea9a17871dcabc7667432a4de6  libgfortran/generated/minloc1_4_i8.c
! 9928939ebdb0ee443822fe0260918d60  libgfortran/generated/minloc1_4_r4.c
! b2ba90859ddfbc1d9c3cbf51c6b69fab  libgfortran/generated/minloc1_4_r8.c
! 5b771e0f790b3e2332573a28580f0057  libgfortran/generated/minloc1_8_i4.c
! fc5bbc7ce5a4c9f39baca4416ae2bfed  libgfortran/generated/minloc1_8_i8.c
! e36c1535c9b5844bd2858505d9c331dc  libgfortran/generated/minloc1_8_r4.c
! e633f7890e0db5f0a088b095320ce33d  libgfortran/generated/minloc1_8_r8.c
! f900efd27765d391044ad995fec73ac1  libgfortran/generated/minval_i4.c
! f61eb047ac757c52ff6fa2d8c106ccfc  libgfortran/generated/minval_i8.c
! cdac649e53a98e8c9ba2425eba8ab661  libgfortran/generated/minval_r4.c
! 7d3432cb101b25df85c6d78a8127d0e1  libgfortran/generated/minval_r8.c
! 79465f17f3c564cd6ce997124c3b8e4e  libgfortran/generated/nearest_r4.c
! e24cba904b982b606eda0ec3433ae214  libgfortran/generated/nearest_r8.c
! 23a28274b16a5a1a0caab1d11dac7177  libgfortran/generated/pow_c4_i4.c
! e1df05421081abe3a27489428bf7532c  libgfortran/generated/pow_c4_i8.c
! 629732c221b232a53b9fef49ca6ace46  libgfortran/generated/pow_c8_i4.c
! 477207c1e6dd8094b49e5f3596396282  libgfortran/generated/pow_c8_i8.c
! a973d94021ea16e36bd97a89984926fa  libgfortran/generated/pow_i4_i4.c
! 5fdcd234bc5ceaebf54ab156e6335933  libgfortran/generated/pow_i4_i8.c
! b2b62872253a60c7b38d71aff9bac236  libgfortran/generated/pow_i8_i4.c
! 5d12ca7e6bd3e668f91f521fb90383b4  libgfortran/generated/pow_i8_i8.c
! b9879c2026a0c34ef0ac5cee1fd96c43  libgfortran/generated/pow_r4_i4.c
! cd42b686a57842d24af44fab0f787d7c  libgfortran/generated/pow_r4_i8.c
! fac8ceb2086a9991b71d6ee894924d44  libgfortran/generated/pow_r8_i4.c
! 2c50e1cae2a4ee5ecdc5a4acdf0497a8  libgfortran/generated/pow_r8_i8.c
! ae23e2e4d9dccfeb01a14d10ef2e169f  libgfortran/generated/product_c4.c
! fb3bb0afeb043bed9e09c993c623cc2a  libgfortran/generated/product_c8.c
! 1101ca4c658e7ee6396869a40ef1653e  libgfortran/generated/product_i4.c
! 92c608e0275671ab1adcfae953623050  libgfortran/generated/product_i8.c
! 6f3eb142748f39174ec10f1161527e44  libgfortran/generated/product_r4.c
! 833a3b4fcb073b141f716e8d92c6de4e  libgfortran/generated/product_r8.c
! 937f397f4df421a72fda50e7dc77afaf  libgfortran/generated/reshape_i4.c
! e9b4777381cba08e04620d815cc9e311  libgfortran/generated/reshape_i8.c
! f1a821fb3260213f8e873ce2bba395c4  libgfortran/generated/set_exponent_r4.c
! 8026d8c44e9d501e54d07a62a38d396d  libgfortran/generated/set_exponent_r8.c
! b647e47c53a06ca59a358f08249173e6  libgfortran/generated/shape_i4.c
! 69f976b9d883b7017d859e678281ef16  libgfortran/generated/shape_i8.c
! 346e8a323bbad544aa60b9db7dff200b  libgfortran/generated/sum_c4.c
! ba23aaabb2285ebe184307f631596205  libgfortran/generated/sum_c8.c
! 73897f0cc7367041eb066d93fc7aea33  libgfortran/generated/sum_i4.c
! 47c52e82f9f5df703447c34032a80699  libgfortran/generated/sum_i8.c
! 448e64012032ae3e043cae7c94682347  libgfortran/generated/sum_r4.c
! 6daabca43f1682173022df86db1569e1  libgfortran/generated/sum_r8.c
! 87548cf31bdac03b00c42893d8db392e  libgfortran/generated/transpose_c4.c
! ceadbd7c7eaa837f846878dd713291d6  libgfortran/generated/transpose_c8.c
! dd5fdb0b3f815a1641dca1dcfa4b859d  libgfortran/generated/transpose_i4.c
! 020adfd67ac8177ad1a2a0f2c23265f4  libgfortran/generated/transpose_i8.c
! 9bb0e958166371633af97824e11c911c  libgfortran/generated/trig_c4.c
! d535904fb19922b2a9af0e5e879e80aa  libgfortran/generated/trig_c8.c
! 31f49387fdf2ef7f757c4411f6871021  libgfortran/intrinsics/abort.c
! 7344924d9ea166d8efa642b60f124878  libgfortran/intrinsics/args.c
! df6c4ad435a9df68d332654ee4d20cd8  libgfortran/intrinsics/associated.c
! 7cc838a6565a51110cbfebe512cfa2e7  libgfortran/intrinsics/bessel.c
! e42b4ed84070a12371c06f70c9e05ed8  libgfortran/intrinsics/c99_functions.c
! ebe24eeb03146e1135b6c7d7d15f6461  libgfortran/intrinsics/chdir.c
! 7cab653a4aa99155bc440a51ae8de1d9  libgfortran/intrinsics/cpu_time.c
! 9a96c3c11a9d262e22d57338e19621d5  libgfortran/intrinsics/cshift0.c
! c7d997ceaeec17c314e88f2fb679a3e6  libgfortran/intrinsics/date_and_time.c
! a2836aacc50ea68c9c59943dd65fb281  libgfortran/intrinsics/dprod_r8.f90
! ffbfef914857fbd1fc28a444f84ed205  libgfortran/intrinsics/env.c
! 046d69607aeb6491ef82d7bf802b3254  libgfortran/intrinsics/eoshift0.c
! 56cef5ea1b22c904cbe3ac81d6564161  libgfortran/intrinsics/eoshift2.c
! c47e895dc5255d7884c8994390c69784  libgfortran/intrinsics/erf.c
! dfecf19be48a4d6414e185aefe4d18d2  libgfortran/intrinsics/etime.c
! 3364fa3e7e65fbba305fd7995f6d1a6b  libgfortran/intrinsics/exit.c
! 03035465d72dae0f4c063c9c77f3bbf2  libgfortran/intrinsics/flush.c
! db49af9d62c64663236de03eae1816b9  libgfortran/intrinsics/fnum.c
! e92bf810821010484fa017e509c576b4  libgfortran/intrinsics/gerror.c
! 900615c610d969cd6016432e26cb48d0  libgfortran/intrinsics/getXid.c
! 1fbe01c78dcc11f40f42ec69cc90a04d  libgfortran/intrinsics/getcwd.c
! 13447c2096e0806d7a719339f5602daf  libgfortran/intrinsics/getlog.c
! 3f750500ff5c1308b22a5c6d138f4058  libgfortran/intrinsics/hostnm.c
! 17c8d0fc219c32c1bcc87a9ce0f44619  libgfortran/intrinsics/ierrno.c
! ed44d2f85ce5d980cede12cd393c59e2  libgfortran/intrinsics/ishftc.c
! 388d8cffe18a4e3470c69f42374ea500  libgfortran/intrinsics/kill.c
! 764967edd5f00644c6ff7f29a949a5de  libgfortran/intrinsics/link.c
! d9743af29e415d30e2b78847641ed346  libgfortran/intrinsics/mvbits.c
! 6b60f08c6a1ce8aa4f62e6e4c3a0c79a  libgfortran/intrinsics/pack_generic.c
! a754b42e3e51f9d07af693db71006875  libgfortran/intrinsics/perror.c
! 2a8b75614b6ba377dbe5314b322ae242  libgfortran/intrinsics/rand.c
! 94077d8ddcdb1fa7fb1a0d3690902666  libgfortran/intrinsics/random.c
! a899b41be59684cd1eae6e4da1659143  libgfortran/intrinsics/rename.c
! dc2038ee8b49d3c828fec2621d9c5cfe  libgfortran/intrinsics/reshape_generic.c
! 0bc0455d1d3c7402ab5132e2d50b5e0b  libgfortran/intrinsics/reshape_packed.c
! 8c6f39d21c98ffaf609a2e1362add33c  libgfortran/intrinsics/selected_int_kind.f90
! da5d4c58b20841cbb19da80dc08b1020  libgfortran/intrinsics/selected_real_kind.f90
! e4cab2a48cfff52b1a7af692c49f1c3a  libgfortran/intrinsics/size.c
! ad8d7b865ad257a1d506d646a4876649  libgfortran/intrinsics/sleep.c
! 2c574173b6a505a9ae96ebc5154f8b1e  libgfortran/intrinsics/spread_generic.c
! e9126580512818a36fa670d0b81d4aac  libgfortran/intrinsics/stat.c
! d5261211b2002015ad06bcc624663e37  libgfortran/intrinsics/string_intrinsics.c
! 77ddb17ddecc278da8acebb38a939681  libgfortran/intrinsics/symlnk.c
! be28fedc944c743cd4798bc285df0ee4  libgfortran/intrinsics/system.c
! 9f90de266ba6690b7813bd4619cc66a9  libgfortran/intrinsics/system_clock.c
! 8e0ec01faa7f1f82ae9144565a05cbde  libgfortran/intrinsics/time.c
! f37075d2b5cd9fe363532a14c53806d2  libgfortran/intrinsics/transpose_generic.c
! 32077598351014bfd13d77df30abcfb6  libgfortran/intrinsics/umask.c
! a87c5c131c9cb278439133d0682816cc  libgfortran/intrinsics/unlink.c
! 0879690d0b556f035bec51481b40870b  libgfortran/intrinsics/unpack_generic.c
! 4d6996f29f26754121fe54907c7847d7  libgfortran/io/backspace.c
! bd102efd21531e4818996c87d55e37dd  libgfortran/io/close.c
! 7f325dbe11a4cc88fb6f411b821e8d88  libgfortran/io/endfile.c
! 19e096925047390b3a32f826ad55bf76  libgfortran/io/format.c
! 96fcf136cfdeaac098b865808ff94290  libgfortran/io/inquire.c
! a1fb24bf174d11b906429f325ab25e79  libgfortran/io/io.h
! af863ebd5ac2a82ccea89d71ec7cbc89  libgfortran/io/list_read.c
! 728ec084f3a02df2bc1feab964e8291d  libgfortran/io/lock.c
! 25f952d719f6ba7faec29fa6f7921dd7  libgfortran/io/open.c
! e74d296c28c128713925ea4264a43607  libgfortran/io/read.c
! 5f884456c64f50fa1fc125adc9340290  libgfortran/io/rewind.c
! 4a85a88822d68c0b5bf3108c0050e95a  libgfortran/io/transfer.c
! 7962342d7102c660a695215073d2f53a  libgfortran/io/unit.c
! 864e97d5ecc4c0fe57322d9245dfa9db  libgfortran/io/unix.c
! 4940f8a7fcd990c5b80f31ed0a7e280c  libgfortran/io/write.c
! e7f27690402c368620ba8fe64274ab0a  libgfortran/libgfortran.h
! 77280bb7ee423875e03d9c0d34527df6  libgfortran/libtool-version
! 3cdbce398c5f4c6fe469b2a81ab59fc5  libgfortran/m4/all.m4
! b4a9ccfebdcccbdbfd3317333ef076fe  libgfortran/m4/any.m4
! c91041bfea172386a6307aaa19fc4e6a  libgfortran/m4/cexp.m4
! 7eb358a48bf4f65944f3eecce7c3f528  libgfortran/m4/chyp.m4
! c06a7e41060b632fdaea36f718c0f874  libgfortran/m4/count.m4
! 80d06ba80d8a52c16fa6e26fd3176524  libgfortran/m4/cshift1.m4
! 3a5ba7e8caddad1e87329441b7613448  libgfortran/m4/ctrig.m4
! c814caab07301c48ceed2e6bcb437366  libgfortran/m4/dotprod.m4
! af873c0e5ddae082a6eaf0acf09b10ea  libgfortran/m4/dotprodc.m4
! 3ec7e42922d764cef16481cb0af19f8e  libgfortran/m4/dotprodl.m4
! c13085e7a6934ce7a8b7648bac3548e3  libgfortran/m4/eoshift1.m4
! 25eb8baa9fd41ee04b47daa1cced0772  libgfortran/m4/eoshift3.m4
! 9140ed429e790301035f869f68e64ed4  libgfortran/m4/exponent.m4
! a0e6f7c1300b8de8e893d4b091c3ca22  libgfortran/m4/fraction.m4
! 9a7a1bd533e63f6f08c5974ed0006849  libgfortran/m4/head.m4
! cd052900402a63eecdf24ad354f107f2  libgfortran/m4/iforeach.m4
! 30966f3267ba34a1d540a8d1b05eeb5e  libgfortran/m4/ifunction.m4
! 5d1df214dc76ec0af0fb9976ddea975c  libgfortran/m4/in_pack.m4
! a44a5eba6e4dd49f3d9206eb86a98b7e  libgfortran/m4/in_unpack.m4
! 7b6fb3fed5180e774d632e2a3b51120e  libgfortran/m4/iparm.m4
! bb91b261070040136b177f08e37218d6  libgfortran/m4/matmul.m4
! 4f31fb577eef8d1c2223c66ab0a618dd  libgfortran/m4/matmull.m4
! 9c29cd6c7a1d554b76e9c504369ea003  libgfortran/m4/maxloc0.m4
! 6d8b3501e5e9e513f5c1cbe262e2b4a9  libgfortran/m4/maxloc1.m4
! e001b3008618c0ac13a638771c4f32ff  libgfortran/m4/maxval.m4
! a70114c21be92b9517d84f7ba16ecda4  libgfortran/m4/minloc0.m4
! 037a885cd28535af8a284d6b4c314705  libgfortran/m4/minloc1.m4
! fbb375022f2c3e32a2a73d4b87129d51  libgfortran/m4/minval.m4
! aa3a3d15fc845d4badf5a5c7e80bb27a  libgfortran/m4/mtype.m4
! bb40607fc04eede98aaa0a141ea437bb  libgfortran/m4/nearest.m4
! 2bd89336b8fecdc6631a59275e11ef34  libgfortran/m4/pow.m4
! e6b3c6d325fb2681a80bcbe817130322  libgfortran/m4/product.m4
! 01d670ef3ccbf514b811714bf6bfe292  libgfortran/m4/reshape.m4
! c50c0b8aea26a55fd23e4514634cf0d5  libgfortran/m4/set_exponent.m4
! 3a6284b8301eafda7cd1e1c2e839eb4e  libgfortran/m4/shape.m4
! 14e55bc4619d14fe17f23af68c90a235  libgfortran/m4/specific.m4
! c84956a588edb20a903bb8bb657657ad  libgfortran/m4/specific2.m4
! bb7ee3977887ad63e8552dcd91d24463  libgfortran/m4/sum.m4
! dde266266b65465992b5991c47f59e23  libgfortran/m4/transpose.m4
! 0ad0318f00c85db29d184dc3dff12276  libgfortran/m4/types.m4
! cd5733452b05f18d7cce28e6b3ed1e34  libgfortran/mk-sik-inc.sh
! 69dde50e05115bbc693fded21eebb445  libgfortran/mk-srk-inc.sh
! 5b9dc7287f531c8d64a5e95c4e4aedbd  libgfortran/runtime/environ.c
! 213c0e3cd3284f9222438edd45945732  libgfortran/runtime/error.c
! 0383a5f0533ba3319065220b0027049b  libgfortran/runtime/in_pack_generic.c
! 99077db4570dfd148c6d7bdefc5cd3b0  libgfortran/runtime/in_unpack_generic.c
! 8722e6486350fffca3491732e4a049d0  libgfortran/runtime/main.c
! 6fb3fd8f4f78708f3d81349929b1099a  libgfortran/runtime/memory.c
! 2770a106f1d53a4be54bcc7327470971  libgfortran/runtime/normalize.c
! 9cf9c9b207a5152cb04a80d9df81792a  libgfortran/runtime/pause.c
! ad0f0310d39954660a355219a0b79b48  libgfortran/runtime/select.c
! 46a97b520066e767a3c08b380c366394  libgfortran/runtime/stop.c
! f422f073ba5d38719d7fd8b9a98fd641  libgfortran/runtime/string.c
  7fbc338309ac38fefcd64b04bb903e34  libiberty/COPYING.LIB
! 859f1712d3606b39f9d34c2726a33ca8  libiberty/ChangeLog
! b3240ac238c1e892e811ac68d7ce16d8  libiberty/Makefile.in
  294191545dc71f5ad13229b0a5bfd7b1  libiberty/README
  5b535b62413b3770aeca6d516e0d6325  libiberty/_doprnt.c
  7205cd3b640330a0caee1bb3d7a7076a  libiberty/aclocal.m4
  e9ff099df53462f7df5a268e290f39c2  libiberty/alloca.c
  d105d43b25b5a5967d6bdbd3896f3666  libiberty/argv.c
*************** d09d6a99ec0ae4b43b4f9bd38a65fecf  libibe
*** 16616,16659 ****
  7af729f41caa18c07461d9894a4e2a28  libiberty/clock.c
  db12eb172b1675b0ebbff211b9834735  libiberty/concat.c
  fdaf5fdc2a84ff34103604588aea1a3b  libiberty/config.h-vms
! f03c6febc565b8c67d88e49a6f2c0ba0  libiberty/config.in
  556411b44a957219c953a1a61e522b78  libiberty/config.table
  4004fdcde347fda58406b4b84a995c66  libiberty/config/mh-aix
  7b65854f594c84e80295173de277b3dc  libiberty/config/mh-cxux7
  044204f5b4bcac5eae2face0602129ae  libiberty/config/mh-fbsd21
  904bdcd9daf97fa55a9ca8901ffe7435  libiberty/config/mh-openedition
  38e76da568ab25260754fdb9d5080513  libiberty/config/mh-windows
! 01e92126e675b0d79e442bd4bd86a9ab  libiberty/configure
! 35f4eb486ceb43c8100c1b56143ed0ea  libiberty/configure.ac
  373c5062b80c1f8c030fcefd5bdc9e6c  libiberty/copying-lib.texi
  e3dc621adfe4ff6730b6510641537ea4  libiberty/copysign.c
! 9f2aa8adef0de529dee3c73d55672ff9  libiberty/cp-demangle.c
! 44cbb9761eb3195ec34ee8e521a9325e  libiberty/cp-demangle.h
  710711092973e0580e43a93f57d9474e  libiberty/cp-demint.c
! 6d82f8ac3f2b14d73b18aed0b9397a44  libiberty/cplus-dem.c
! f624002cd70f55b5d96149be520fe5dc  libiberty/dyn-string.c
  846c5e5797cff2d03945fdc045c06cd5  libiberty/fdmatch.c
  880a3787b2519407b6b6b6138b627c91  libiberty/ffs.c
  b1ab4811c02803a3d2ed8bf611d44632  libiberty/fibheap.c
  68e7c391a5deb0d1ce33c1832d0567b7  libiberty/floatformat.c
  5a0e7522053fc29b178bcd5ee644aaee  libiberty/fnmatch.c
  30a2550d37938d1e3354632161ac1d0b  libiberty/fnmatch.txh
! 59a3ec37b6a43d649970c642e3175ebc  libiberty/functions.texi
  372093196abf4e95605e71908a6b1a41  libiberty/gather-docs
  81053feb399b85f027c34d3f81f803c2  libiberty/getcwd.c
  90ab3f8e537a4a950cb6e33224995e3c  libiberty/getopt.c
  5fd11388f488b53ec69eeb3e71161636  libiberty/getopt1.c
  8ff0eec816410579eaba5f8a7d344d16  libiberty/getpagesize.c
! 8af647b3f7da1b81e96092ea85a11c81  libiberty/getpwd.c
  6b1a3bf9f11deb195411cb3a81367aeb  libiberty/getruntime.c
! 1d3400b0979bb6e7ba417586215cd48e  libiberty/hashtab.c
! b53ab3a588f4bd737eb5dba2b0dbc024  libiberty/hex.c
  5d62866e7afd8f107daa8b78e25ffe6f  libiberty/index.c
  6ed63c8ebf03f39587c4e94168c397e1  libiberty/insque.c
  8095916864bd273f9aa6a8ad82835c3e  libiberty/lbasename.c
! 1046e8b23172200b3f1080ba378f3bc8  libiberty/libiberty.texi
! 894ba8399cde70ceb8ce529ca7298f3a  libiberty/lrealpath.c
! c88071a5a6e9b753ca6bb58b19f7c896  libiberty/maint-tool
  6fc79a46ae7d6d544a8532ad8a240b08  libiberty/make-relative-prefix.c
  9d92e1eb73e143f9929e5dd2f206c380  libiberty/make-temp-file.c
  e331b31ce1cbf27a44f2fbeb54fa7b17  libiberty/makefile.vms
--- 19483,19526 ----
  7af729f41caa18c07461d9894a4e2a28  libiberty/clock.c
  db12eb172b1675b0ebbff211b9834735  libiberty/concat.c
  fdaf5fdc2a84ff34103604588aea1a3b  libiberty/config.h-vms
! ab20ae1a5d90c11ae56c52cff5ae20dc  libiberty/config.in
  556411b44a957219c953a1a61e522b78  libiberty/config.table
  4004fdcde347fda58406b4b84a995c66  libiberty/config/mh-aix
  7b65854f594c84e80295173de277b3dc  libiberty/config/mh-cxux7
  044204f5b4bcac5eae2face0602129ae  libiberty/config/mh-fbsd21
  904bdcd9daf97fa55a9ca8901ffe7435  libiberty/config/mh-openedition
  38e76da568ab25260754fdb9d5080513  libiberty/config/mh-windows
! 1a9a8d81b0dbba2ee1098d0a9abadebe  libiberty/configure
! 6d825cff72670aa28e0262ff3338bd43  libiberty/configure.ac
  373c5062b80c1f8c030fcefd5bdc9e6c  libiberty/copying-lib.texi
  e3dc621adfe4ff6730b6510641537ea4  libiberty/copysign.c
! ca6749dc0617d80a69ca7aa9bcbca216  libiberty/cp-demangle.c
! b29996cf3b0c1fd430178d9d21274f2d  libiberty/cp-demangle.h
  710711092973e0580e43a93f57d9474e  libiberty/cp-demint.c
! d02c2a47ceec54676fa8221674340718  libiberty/cplus-dem.c
! 069562b9bb3712513c7a0b017a12f271  libiberty/dyn-string.c
  846c5e5797cff2d03945fdc045c06cd5  libiberty/fdmatch.c
  880a3787b2519407b6b6b6138b627c91  libiberty/ffs.c
  b1ab4811c02803a3d2ed8bf611d44632  libiberty/fibheap.c
  68e7c391a5deb0d1ce33c1832d0567b7  libiberty/floatformat.c
  5a0e7522053fc29b178bcd5ee644aaee  libiberty/fnmatch.c
  30a2550d37938d1e3354632161ac1d0b  libiberty/fnmatch.txh
! f35d70b5d0a6be8132d55faea42bdf36  libiberty/functions.texi
  372093196abf4e95605e71908a6b1a41  libiberty/gather-docs
  81053feb399b85f027c34d3f81f803c2  libiberty/getcwd.c
  90ab3f8e537a4a950cb6e33224995e3c  libiberty/getopt.c
  5fd11388f488b53ec69eeb3e71161636  libiberty/getopt1.c
  8ff0eec816410579eaba5f8a7d344d16  libiberty/getpagesize.c
! 163b78dbb9c54e4309a6e6ad8b75f365  libiberty/getpwd.c
  6b1a3bf9f11deb195411cb3a81367aeb  libiberty/getruntime.c
! 0b5c47943d67a3755d7c9967dc2eebf9  libiberty/hashtab.c
! 1c0e78f1f5b82f68ef3b0ab27bafdc39  libiberty/hex.c
  5d62866e7afd8f107daa8b78e25ffe6f  libiberty/index.c
  6ed63c8ebf03f39587c4e94168c397e1  libiberty/insque.c
  8095916864bd273f9aa6a8ad82835c3e  libiberty/lbasename.c
! 18b9304d730b955b7e77b09e91d50418  libiberty/libiberty.texi
! 44b18d3583ce02eae3b33f1a8dc219d5  libiberty/lrealpath.c
! 0fd9f0b3e810378c0119bb0bbfa71418  libiberty/maint-tool
  6fc79a46ae7d6d544a8532ad8a240b08  libiberty/make-relative-prefix.c
  9d92e1eb73e143f9929e5dd2f206c380  libiberty/make-temp-file.c
  e331b31ce1cbf27a44f2fbeb54fa7b17  libiberty/makefile.vms
*************** cdbdeda3aa5ead4a36801fadc3f146a8  libibe
*** 16664,16690 ****
  397993b1bae5f3599d20edfa9a83526d  libiberty/memmove.c
  b175cc1b085dffa46a41dbe21686ef15  libiberty/mempcpy.c
  80908dce1ac75994099637449014ef87  libiberty/memset.c
! 69914c75c045b40f4c6b0fd0055f3773  libiberty/mkstemps.c
  969668698375a7ecf08bc086b9613a31  libiberty/mpw-config.in
  54c65d1bafd7d8d29b9d29761d977020  libiberty/mpw-make.sed
  9de6f56befd6350286f5a42836a8433a  libiberty/mpw.c
  7897e43bedd2def4beb6eb73003efa68  libiberty/msdos.c
! 9fbb504341d8982f9439a168b9ef825e  libiberty/objalloc.c
  0b098dc2e9bb206f6c642981a8306c60  libiberty/obstack.c
  051d336f4d87cf832d5adf343a10cbe0  libiberty/obstacks.texi
  087f5237d8b7fff69418811efec227e6  libiberty/partition.c
! 71ca94bfbf061da54968ac1e57b3b92e  libiberty/pex-common.h
  316a7c2d1f782c47f715dde7eaa48faf  libiberty/pex-djgpp.c
  5949dc1e0a5865570a8c462f794bc88c  libiberty/pex-mpw.c
  9016bdcbb5f2f04001165c88178c0c05  libiberty/pex-msdos.c
  dfc59121719c673229b4d57fa6102e7d  libiberty/pex-os2.c
! 61f42ec64c70d61c15baf9cbd418f1b6  libiberty/pex-unix.c
! ad9b2b17ade58908793f6296ccc60312  libiberty/pex-win32.c
  f45d0f6037219afd14080d7ddd7199f0  libiberty/pexecute.txh
  063fdcd29dc11c6e1b9fa27573075f06  libiberty/physmem.c
  5925c1d64a6e31ffabbe2fd74d65960b  libiberty/putenv.c
  504517a55f72370938a142085a4fd57b  libiberty/random.c
! eba48a5bb4fd68eeeaaf0e9e0ef6a887  libiberty/regex.c
  ae878fdfb59df3c8bfba85bb4487543a  libiberty/rename.c
  4c0be9f784bf4c61bc89098eebc6e575  libiberty/rindex.c
  ad466048c0305c4348d1580f76acc53e  libiberty/safe-ctype.c
--- 19531,19557 ----
  397993b1bae5f3599d20edfa9a83526d  libiberty/memmove.c
  b175cc1b085dffa46a41dbe21686ef15  libiberty/mempcpy.c
  80908dce1ac75994099637449014ef87  libiberty/memset.c
! 570331eb7d8c6e008cbb4988539d17aa  libiberty/mkstemps.c
  969668698375a7ecf08bc086b9613a31  libiberty/mpw-config.in
  54c65d1bafd7d8d29b9d29761d977020  libiberty/mpw-make.sed
  9de6f56befd6350286f5a42836a8433a  libiberty/mpw.c
  7897e43bedd2def4beb6eb73003efa68  libiberty/msdos.c
! b706ad2fbdb4ed4f56e23b97bbeef477  libiberty/objalloc.c
  0b098dc2e9bb206f6c642981a8306c60  libiberty/obstack.c
  051d336f4d87cf832d5adf343a10cbe0  libiberty/obstacks.texi
  087f5237d8b7fff69418811efec227e6  libiberty/partition.c
! 1446d025a5106b528dd68a4a30bd9794  libiberty/pex-common.h
  316a7c2d1f782c47f715dde7eaa48faf  libiberty/pex-djgpp.c
  5949dc1e0a5865570a8c462f794bc88c  libiberty/pex-mpw.c
  9016bdcbb5f2f04001165c88178c0c05  libiberty/pex-msdos.c
  dfc59121719c673229b4d57fa6102e7d  libiberty/pex-os2.c
! 296a33db095578f8f0c9bd125cc8a88d  libiberty/pex-unix.c
! 49774af6de2338be2f2c8d19e4cfb9f3  libiberty/pex-win32.c
  f45d0f6037219afd14080d7ddd7199f0  libiberty/pexecute.txh
  063fdcd29dc11c6e1b9fa27573075f06  libiberty/physmem.c
  5925c1d64a6e31ffabbe2fd74d65960b  libiberty/putenv.c
  504517a55f72370938a142085a4fd57b  libiberty/random.c
! dd14fb73b7a6df165351f06d413b7722  libiberty/regex.c
  ae878fdfb59df3c8bfba85bb4487543a  libiberty/rename.c
  4c0be9f784bf4c61bc89098eebc6e575  libiberty/rindex.c
  ad466048c0305c4348d1580f76acc53e  libiberty/safe-ctype.c
*************** cf9cc42905f451f49e3a24a45bcb77bc  libibe
*** 16693,16719 ****
  d043445f610b855cf628b72e75e0df3e  libiberty/snprintf.c
  bcd38bbff8e80df6e908d7ee57d7b681  libiberty/sort.c
  bef51eff7a41882d4763c4157d06feba  libiberty/spaces.c
! d0d349e0b153f5dca03db937262a4e2a  libiberty/splay-tree.c
  e1e2c4f1af5569c3e5c98104737bcf76  libiberty/stpcpy.c
  2ebe7af7eb364da1cabfe63fc01100da  libiberty/stpncpy.c
  3c49bc872649b875bc538b2eba35673a  libiberty/strcasecmp.c
  215e80e7d6c184653c73bd04ba1353e9  libiberty/strchr.c
  6929380bdc5bb0e6c00b6cc71854a3a3  libiberty/strdup.c
! fc91137ce892b48522a5efc28a6c97fa  libiberty/strerror.c
  e4c888912855032c9b8f69d6075f10ee  libiberty/strncasecmp.c
  7b2896b51c389a6a7d557ea01e8c872a  libiberty/strncmp.c
  1ee23798a9223ef8947a376a0b3cfea2  libiberty/strrchr.c
! f8ad09942d5d4edeadf759c5ace93c6b  libiberty/strsignal.c
  65f6273a1fb49204f10d98f21904cb90  libiberty/strstr.c
  25fbadcc933dbfa07cb1a249ab97e01e  libiberty/strtod.c
  aee79a74ba6f2ec43325737b7e4e86c2  libiberty/strtol.c
  e06d6526f14dcd0834827520331fef16  libiberty/strtoul.c
  63c9e635f440ae8e224846d98bb51f4b  libiberty/ternary.c
  27e356fc46c6c1fc7c2a73d2f838de37  libiberty/testsuite/Makefile.in
! 3d738084dfb24c86b78aa106df02898f  libiberty/testsuite/demangle-expected
! 628910b2c11e4e04d4b8db2c3d77c4c9  libiberty/testsuite/test-demangle.c
  70661957f2bc5c40ea102d97ab0bf5c0  libiberty/tmpnam.c
! cda3152399a6665d0e595018d9946ec7  libiberty/vasprintf.c
  0ad8bcaf347187c9147577999d73e9cf  libiberty/vfork.c
  49f0de47280a87bb9f87fe2bf517a2e6  libiberty/vfprintf.c
  9a46f8a6bd6b911849f209d09e94b66f  libiberty/vmsbuild.com
--- 19560,19586 ----
  d043445f610b855cf628b72e75e0df3e  libiberty/snprintf.c
  bcd38bbff8e80df6e908d7ee57d7b681  libiberty/sort.c
  bef51eff7a41882d4763c4157d06feba  libiberty/spaces.c
! c08238baaf9e8e7f273ffedd3cf4539a  libiberty/splay-tree.c
  e1e2c4f1af5569c3e5c98104737bcf76  libiberty/stpcpy.c
  2ebe7af7eb364da1cabfe63fc01100da  libiberty/stpncpy.c
  3c49bc872649b875bc538b2eba35673a  libiberty/strcasecmp.c
  215e80e7d6c184653c73bd04ba1353e9  libiberty/strchr.c
  6929380bdc5bb0e6c00b6cc71854a3a3  libiberty/strdup.c
! 51997ebbfe999aa08152c9d6322c520c  libiberty/strerror.c
  e4c888912855032c9b8f69d6075f10ee  libiberty/strncasecmp.c
  7b2896b51c389a6a7d557ea01e8c872a  libiberty/strncmp.c
  1ee23798a9223ef8947a376a0b3cfea2  libiberty/strrchr.c
! 727138823f2cb70a3af09ef22e46bee0  libiberty/strsignal.c
  65f6273a1fb49204f10d98f21904cb90  libiberty/strstr.c
  25fbadcc933dbfa07cb1a249ab97e01e  libiberty/strtod.c
  aee79a74ba6f2ec43325737b7e4e86c2  libiberty/strtol.c
  e06d6526f14dcd0834827520331fef16  libiberty/strtoul.c
  63c9e635f440ae8e224846d98bb51f4b  libiberty/ternary.c
  27e356fc46c6c1fc7c2a73d2f838de37  libiberty/testsuite/Makefile.in
! 44219372bdf11390086234a1ff50cbff  libiberty/testsuite/demangle-expected
! e8139e58f07d90e80fc1b17a3e47fa93  libiberty/testsuite/test-demangle.c
  70661957f2bc5c40ea102d97ab0bf5c0  libiberty/tmpnam.c
! 36268f56b790422bf6993a0485f36afa  libiberty/vasprintf.c
  0ad8bcaf347187c9147577999d73e9cf  libiberty/vfork.c
  49f0de47280a87bb9f87fe2bf517a2e6  libiberty/vfprintf.c
  9a46f8a6bd6b911849f209d09e94b66f  libiberty/vmsbuild.com
*************** e416488ce7ad148c9030ed0f54645f30  libibe
*** 16726,16794 ****
  1bdfb937e0df4543c60ea33babbfb453  libiberty/xmalloc.c
  f3030e6275b76dd6ea06d80a92ccdc27  libiberty/xmemdup.c
  f20e7cc03de67e377c14074ad8117a2d  libiberty/xstrdup.c
! 3dcfd54ed5da2593e413b5505ecd8bf8  libiberty/xstrerror.c
  94d55d512a9ba36caa9b7df079bae19f  libjava/COPYING
! ebf8d8f2d37229b8b3bae32db36199b4  libjava/ChangeLog
  cd8a361fdecdae865f473a6f2cf9fd8b  libjava/ChangeLog-1999
  4588de29d13f7eaa964141902c347636  libjava/ChangeLog-2001
! 459f47c6dec487e3d2e300d3a58d25c9  libjava/HACKING
  84706803a544c5820821cbbc020d39cf  libjava/LIBGCJ_LICENSE
! 203a0e9dab754d03760b973e057473ba  libjava/Makefile.am
! a8f5b403487bdc457efbc4064d29c215  libjava/Makefile.in
! 17901f687db977d9be49f2baad04ac92  libjava/NEWS
! 20b83020b43dc6fcd0424a8c8cc43977  libjava/README
! 80d384275491e1e54bf129f231942696  libjava/THANKS
! 545e00644a9a06ceeebcc95a403b3caa  libjava/acconfig.h
! 409a68e9729a116a8bb7b36665abf6b7  libjava/acinclude.m4
! ada143fea83c6479dc7cd68834620998  libjava/aclocal.m4
  efc33151e6f0752ce2b40ae21ab49671  libjava/addr2name.awk
! 24dc76171deec14ca88b1d4eb3db3231  libjava/boehm.cc
! cffb0de1f7c97c7514d7db2f99f5f230  libjava/configure
! 70e7f7490e76175476af25ba6771e775  libjava/configure.host
! f615f19c27afdea2f31049baf09fb33d  libjava/configure.in
! 9a5dd72f21cb8230e78d46eb7873ee6c  libjava/defineclass.cc
! 5be07a73a6de47eaaa072b0e483a1da8  libjava/doc/cni.sgml
  1fbad51236fb98774e365452063ac44b  libjava/exception.cc
  41e851e76bff82d7b492d444f91d4c0e  libjava/gcj/.cvsignore
! 8b1efc2df107063d366130174ec5725f  libjava/gcj/Makefile.am
! 80975f9b0336041599fc76ba5764296d  libjava/gcj/Makefile.in
  94b9871091f1caff9dc28dce6439c7dc  libjava/gcj/array.h
! 92e4a5b905716b013b2e9847f14cb80c  libjava/gcj/cni.h
! 9eb52450cf724717252091e2f3a91b12  libjava/gcj/field.h
! 021705b252d9b15c192d573430dce4ae  libjava/gcj/javaprims.h
  889018fe1f6304db88020c202bf148fe  libjava/gcj/libgcj-config.h.in
! 67e0f8750fc9d53fda0ff677a0fb23f1  libjava/gcj/method.h
! 7a3053a10ac4bc029a3810d33358df38  libjava/gij.cc
! ea259dad3d4d8f6d708d6c6df87578eb  libjava/glib-2.0.m4
! eb584cdc00a15ea82a5f5b7e2507fd9f  libjava/gnu/awt/LightweightRedirector.java
  e4a6533e6ba178693bf1cd76421aa764  libjava/gnu/awt/j2d/AbstractGraphicsState.java
  a47831f8c3de048876eaf738f495ece9  libjava/gnu/awt/j2d/DirectRasterGraphics.java
  9438a98d9934857d33c83edf8940b240  libjava/gnu/awt/j2d/Graphics2DImpl.java
  e6d0aaf195e964a73613f6fc834f5737  libjava/gnu/awt/j2d/IntegerGraphicsState.java
  87b502a55fc8ebd6560ff3d0f2d852fc  libjava/gnu/awt/j2d/MappedRaster.java
! 9d1148aaf2abe0bcf3f447e9e7ead572  libjava/gnu/awt/xlib/XCanvasPeer.java
! 4de4a5a2cb193173550c1b476441ad99  libjava/gnu/awt/xlib/XEventLoop.java
  d62b73f1fd41c9130484ce027404d02d  libjava/gnu/awt/xlib/XEventQueue.java
  53ec5c0451922f91a1aee0e78522d541  libjava/gnu/awt/xlib/XFontMetrics.java
! 95a83dc6c0cf1446a4235fb6b5262999  libjava/gnu/awt/xlib/XFramePeer.java
! 93d74cbc40308c4201ff586515f55f90  libjava/gnu/awt/xlib/XGraphics.java
  4cef99bd8b0aa71308470f4e86e76510  libjava/gnu/awt/xlib/XGraphicsConfiguration.java
! 384bab5641d5bd77b530afade880d501  libjava/gnu/awt/xlib/XOffScreenImage.java
  fb918e795e5190d2e3111f940f9fd21c  libjava/gnu/awt/xlib/XPanelPeer.java
! f06f4f2054059f9173eaaee575133346  libjava/gnu/awt/xlib/XToolkit.java
  9b039c1e624293ed1b67795ad8fc174f  libjava/gnu/classpath/Configuration.java.in
  c8992b80f6adf1ee7fcd27135e147fea  libjava/gnu/gcj/Core.java
  171be5b658721d8feeaec562d0afe9a6  libjava/gnu/gcj/RawData.java
  ef4b09d90de627a4acbe1fe57fb399ec  libjava/gnu/gcj/convert/Blocks-3.txt
! 8e7615af4cfdf9801897d05232064570  libjava/gnu/gcj/convert/BytesToUnicode.java
! 3e7a88b7e4ed09fef8d4e170fa5b9f65  libjava/gnu/gcj/convert/Convert.java
! 4f1cfbedff9d27dfd5a841325c814565  libjava/gnu/gcj/convert/IOConverter.java
  781e55330d3b64c0196a76e77f39747c  libjava/gnu/gcj/convert/Input_8859_1.java
  f20859efb59e3ce361c2ab9e96649567  libjava/gnu/gcj/convert/Input_ASCII.java
  3864e59856993ff2de5dd8a3fa819d89  libjava/gnu/gcj/convert/Input_EUCJIS.java
  f80f3490c84310181681832a158f2cc2  libjava/gnu/gcj/convert/Input_JavaSrc.java
  f506083c2080fd3cfbea3ca0974209f0  libjava/gnu/gcj/convert/Input_SJIS.java
  5f07387bb17791555b4e9e10fe9ad620  libjava/gnu/gcj/convert/Input_UTF8.java
  960b7157a1ed37268ca2b870785825e3  libjava/gnu/gcj/convert/Input_iconv.java
  7744c755c247e420686193f1b7a4b857  libjava/gnu/gcj/convert/JIS0201.h
  b3753c95a97afde8397ff83836e6d428  libjava/gnu/gcj/convert/JIS0208.h
--- 19593,19863 ----
  1bdfb937e0df4543c60ea33babbfb453  libiberty/xmalloc.c
  f3030e6275b76dd6ea06d80a92ccdc27  libiberty/xmemdup.c
  f20e7cc03de67e377c14074ad8117a2d  libiberty/xstrdup.c
! 4bd3afb8fc654a444f5390dbb53c3816  libiberty/xstrerror.c
! ac81461263c340d1f6c7ed86a63b06de  libjava/.cvsignore
  94d55d512a9ba36caa9b7df079bae19f  libjava/COPYING
! 1fbba26d1020c14337686556a9ea9960  libjava/ChangeLog
  cd8a361fdecdae865f473a6f2cf9fd8b  libjava/ChangeLog-1999
  4588de29d13f7eaa964141902c347636  libjava/ChangeLog-2001
! 6083f84e4eb51e2dc3b24736498cf862  libjava/ChangeLog-2002
! 4530bcd4ef89ef3a79bd80e91b2a36a5  libjava/ChangeLog-2003
! 2dc583b32a93a3a02ca7ae5add57f10a  libjava/HACKING
  84706803a544c5820821cbbc020d39cf  libjava/LIBGCJ_LICENSE
! 569d406f2f8b9ee48e410683a16955c5  libjava/Makefile.am
! bbebcb3b65c421e541ff7c10dd8a4b9d  libjava/Makefile.in
! ad7e029769786ded8152b84425ae0b6a  libjava/NEWS
! b8af03ff64b9879992c9382503d9910e  libjava/README
! fcab9c26cd6f539addaab81491b62c25  libjava/THANKS
! b13efae29a1b4e94b014715ff7dbc687  libjava/acinclude.m4
! e0529650d8ff4ad5fad975b05f35343b  libjava/aclocal.m4
  efc33151e6f0752ce2b40ae21ab49671  libjava/addr2name.awk
! 1b3ae835d6026e7741025198e1e0a33f  libjava/boehm.cc
! 2c15bfbf183d86c5ff04a7f90d7d321d  libjava/configure
! 53bc4d8900470a7e4bfc0d58c9c274d2  libjava/configure.ac
! ca1cc041690f8f3040929be91be9b9c9  libjava/configure.host
! b8f5774479fe86f56e7e491189ccf0b5  libjava/darwin.cc
! e9eb027fe87013496a7965bd25258d3f  libjava/defineclass.cc
  1fbad51236fb98774e365452063ac44b  libjava/exception.cc
+ b87406da95018ec9039cbcdce2cefe7b  libjava/external/Makefile.am
+ bcb6c043ee66cb6111eafe4a4381d109  libjava/external/Makefile.in
+ 19926238491666aca594b13f6b691863  libjava/external/README
+ 182cbaa1f01c990ae1117e9c065e7bd7  libjava/external/sax/Makefile.am
+ c7f68c53079a996cbb47719311edf2b5  libjava/external/sax/Makefile.in
+ de1ad3c4705dc5ed78e6752d127ca258  libjava/external/sax/README
+ 0655f8caff5e70c5a2064a61b77c1ceb  libjava/external/sax/org/xml/sax/AttributeList.java
+ 4044c49e82b0e4ca6289ff8f5977282e  libjava/external/sax/org/xml/sax/Attributes.java
+ a25d25f55f8e69dcc4c8f771401ff058  libjava/external/sax/org/xml/sax/ContentHandler.java
+ 473a2067a87ebbddf4bca2f07cc9f585  libjava/external/sax/org/xml/sax/DTDHandler.java
+ ea0921fbc2c106707a1bfb0f27371ec3  libjava/external/sax/org/xml/sax/DocumentHandler.java
+ 236d77d3dcd08176f049968dc76e8222  libjava/external/sax/org/xml/sax/EntityResolver.java
+ 16cb71673262d5dc9e96ff193bb53664  libjava/external/sax/org/xml/sax/ErrorHandler.java
+ 4f01b0c57f01df95b176312e4c0752ac  libjava/external/sax/org/xml/sax/HandlerBase.java
+ 646b5f5128353f80be3ed210e630dcaf  libjava/external/sax/org/xml/sax/InputSource.java
+ 29839d7646d182bd137a4b2f91c6f8a8  libjava/external/sax/org/xml/sax/Locator.java
+ b96fbd4d89f5829062b6e33516ad7052  libjava/external/sax/org/xml/sax/Parser.java
+ 270379de8e4c4393743fe41d11e7d815  libjava/external/sax/org/xml/sax/SAXException.java
+ 2361831455b12f80554d0c1faa4a5590  libjava/external/sax/org/xml/sax/SAXNotRecognizedException.java
+ f802680f00414ba60475d42953f1f2b1  libjava/external/sax/org/xml/sax/SAXNotSupportedException.java
+ d9b687665cbeb2d795faed10f3fcb8ea  libjava/external/sax/org/xml/sax/SAXParseException.java
+ 5164bd5ac56b29477c0594334f12609a  libjava/external/sax/org/xml/sax/XMLFilter.java
+ 6b43e3e4da85207ed6ebc886291ccd83  libjava/external/sax/org/xml/sax/XMLReader.java
+ 29444e615990ea0e085a5765d35f85b1  libjava/external/sax/org/xml/sax/ext/Attributes2.java
+ 109cf0684f450affad3e20890c5047e7  libjava/external/sax/org/xml/sax/ext/Attributes2Impl.java
+ cf095f7f54cc6ddf3d67a9e57e1c112f  libjava/external/sax/org/xml/sax/ext/DeclHandler.java
+ 609406ffc61172c2d28ce23d1af9bd2b  libjava/external/sax/org/xml/sax/ext/DefaultHandler2.java
+ 63167b3496ba26e29df5c4290129e42a  libjava/external/sax/org/xml/sax/ext/EntityResolver2.java
+ cf343209ae9a29397488bbf303f4ac70  libjava/external/sax/org/xml/sax/ext/LexicalHandler.java
+ fa69869a8b370565a8fbc95529cdd356  libjava/external/sax/org/xml/sax/ext/Locator2.java
+ c5aa033cd25be5d53f5e64d557ae57f5  libjava/external/sax/org/xml/sax/ext/Locator2Impl.java
+ 5ec879e6c91369ba7dc1a08e0e9528a9  libjava/external/sax/org/xml/sax/ext/package.html
+ 8f24a6739d13007ac64b24883c95725f  libjava/external/sax/org/xml/sax/helpers/AttributeListImpl.java
+ 0d2b315dc673ef25c5671bf22f504e8c  libjava/external/sax/org/xml/sax/helpers/AttributesImpl.java
+ e75ab201e0d92624c917523ea5d451a9  libjava/external/sax/org/xml/sax/helpers/DefaultHandler.java
+ 3ad2e6dbad2b6e94085c4bf8724f4ce2  libjava/external/sax/org/xml/sax/helpers/LocatorImpl.java
+ eb9debf62841a328642763e86f7ebbc8  libjava/external/sax/org/xml/sax/helpers/NamespaceSupport.java
+ 89096a6745b6af10b31fa60b72c803e8  libjava/external/sax/org/xml/sax/helpers/NewInstance.java
+ e70be0d5e68c2aacfe00f0d108d42969  libjava/external/sax/org/xml/sax/helpers/ParserAdapter.java
+ da85170abbf834e6325e0bf74bb0746b  libjava/external/sax/org/xml/sax/helpers/ParserFactory.java
+ a7028374091228f400a932db6e06cbea  libjava/external/sax/org/xml/sax/helpers/XMLFilterImpl.java
+ 3f04e6e24418c6d878028c09006e12f3  libjava/external/sax/org/xml/sax/helpers/XMLReaderAdapter.java
+ 6f2a84da1bd3ab3b4d892222b0b58d2d  libjava/external/sax/org/xml/sax/helpers/XMLReaderFactory.java
+ 9b235858f3c5d998117ad5d8fc2db625  libjava/external/sax/org/xml/sax/helpers/package.html
+ 7309b1ff3845ff11f5e92555386f05a6  libjava/external/sax/org/xml/sax/package.html
+ 09e84721c652ff50fdad9a7215863899  libjava/external/w3c_dom/COPYRIGHT.html
+ 49d906a2d2b83f99196a5e5aa1f1df8d  libjava/external/w3c_dom/Makefile.am
+ 13403a0ee2af206bd59487185e36a795  libjava/external/w3c_dom/Makefile.in
+ 6e52fb724e7d281f80276187f3c9e286  libjava/external/w3c_dom/README
+ a2df55935d2b1a33193f8d1a7789912a  libjava/external/w3c_dom/org/w3c/dom/Attr.java
+ 08b4ecfae7fe5d5b389fb95d53b89721  libjava/external/w3c_dom/org/w3c/dom/CDATASection.java
+ 11d4f66f9880f06ffb4d93bdc34210d4  libjava/external/w3c_dom/org/w3c/dom/CharacterData.java
+ a25bf475ed00ee19bbee23dbd3e1177a  libjava/external/w3c_dom/org/w3c/dom/Comment.java
+ e95b671a72ce64335f3431e0d347ffb5  libjava/external/w3c_dom/org/w3c/dom/DOMConfiguration.java
+ 54192d27d8a6e983b94fdec8822a0a10  libjava/external/w3c_dom/org/w3c/dom/DOMError.java
+ f49224b7c11b4e61dca07b14ee5de6c7  libjava/external/w3c_dom/org/w3c/dom/DOMErrorHandler.java
+ cdbf1c0e4e9f0ded6f4da6b90dd6d4df  libjava/external/w3c_dom/org/w3c/dom/DOMException.java
+ 67cb1599da63f4e8512abf5de2b20141  libjava/external/w3c_dom/org/w3c/dom/DOMImplementation.java
+ 224ce71cc41fee1dd811a75865d725a8  libjava/external/w3c_dom/org/w3c/dom/DOMImplementationList.java
+ 47b9ca27ceea29cbee7a9838051b6ec7  libjava/external/w3c_dom/org/w3c/dom/DOMImplementationSource.java
+ 65c2d6b0f6bbfefbaa3f389c0a13faf4  libjava/external/w3c_dom/org/w3c/dom/DOMLocator.java
+ 1659c83560bd0d8209e870fc4b46c3c3  libjava/external/w3c_dom/org/w3c/dom/DOMStringList.java
+ 530dc17fe4f0bc7718c42684baa32e72  libjava/external/w3c_dom/org/w3c/dom/Document.java
+ bc801b56e6093ac399d9ac31ac6a0428  libjava/external/w3c_dom/org/w3c/dom/DocumentFragment.java
+ 30f7ac8b82a259fed40564fabc341215  libjava/external/w3c_dom/org/w3c/dom/DocumentType.java
+ e6d12822507ee116c13538699350217e  libjava/external/w3c_dom/org/w3c/dom/Element.java
+ 2cc895f4b690121f2f3cf75fd212834d  libjava/external/w3c_dom/org/w3c/dom/Entity.java
+ 329ac44b44a190913a5a4d7f36eb46c3  libjava/external/w3c_dom/org/w3c/dom/EntityReference.java
+ c38bd747a24550f224bd73f66860a53f  libjava/external/w3c_dom/org/w3c/dom/NameList.java
+ 1259cd9761cb5fa45fa4085fdc3b6f36  libjava/external/w3c_dom/org/w3c/dom/NamedNodeMap.java
+ b789e60d833248249145f0ec818f04d0  libjava/external/w3c_dom/org/w3c/dom/Node.java
+ e260532506a1e0d9d1ad7ea3e6d91a2d  libjava/external/w3c_dom/org/w3c/dom/NodeList.java
+ 0942eabbd6ec995f14e8171f6a9b12fd  libjava/external/w3c_dom/org/w3c/dom/Notation.java
+ 6e005657e711880c4a79773ea9874c6b  libjava/external/w3c_dom/org/w3c/dom/ProcessingInstruction.java
+ 6df9fedf7e17214ffeffd2f16319c1c0  libjava/external/w3c_dom/org/w3c/dom/Text.java
+ d34062a50b425fa924316d73c3a49cf5  libjava/external/w3c_dom/org/w3c/dom/TypeInfo.java
+ 4345597a3f200747267ba5fdeadd323d  libjava/external/w3c_dom/org/w3c/dom/UserDataHandler.java
+ ce313209fa592e366af916e101c615ea  libjava/external/w3c_dom/org/w3c/dom/bootstrap/DOMImplementationRegistry.java
+ 06391c1de49bb448a0eeacedc0fbde07  libjava/external/w3c_dom/org/w3c/dom/css/CSS2Properties.java
+ e1d3d29c32828d98e1cb7e3026ccce25  libjava/external/w3c_dom/org/w3c/dom/css/CSSCharsetRule.java
+ e1506c4a53d71c285a5f43b420f96ed2  libjava/external/w3c_dom/org/w3c/dom/css/CSSFontFaceRule.java
+ adaadf04f1d702d99b889f0b94315922  libjava/external/w3c_dom/org/w3c/dom/css/CSSImportRule.java
+ 793706961c3261ea40577c257dd8c185  libjava/external/w3c_dom/org/w3c/dom/css/CSSMediaRule.java
+ 1f19b0cf5ec7aeeed1f103a195737c85  libjava/external/w3c_dom/org/w3c/dom/css/CSSPageRule.java
+ aa4988b7845ca470feddbd343e4e6207  libjava/external/w3c_dom/org/w3c/dom/css/CSSPrimitiveValue.java
+ 2d35b1f9e093a90e698e9b1118d3276b  libjava/external/w3c_dom/org/w3c/dom/css/CSSRule.java
+ c9c5fdc3bed2027e7f62a8a6f01a4945  libjava/external/w3c_dom/org/w3c/dom/css/CSSRuleList.java
+ dfa5de4700b37a20e816369a4c92a6ef  libjava/external/w3c_dom/org/w3c/dom/css/CSSStyleDeclaration.java
+ ba8480a01b370a968a3a983c1215a64a  libjava/external/w3c_dom/org/w3c/dom/css/CSSStyleRule.java
+ b54919fb87571108249dda3dad369ede  libjava/external/w3c_dom/org/w3c/dom/css/CSSStyleSheet.java
+ 639dc0127a9ac0350b0704deb1bc9d6d  libjava/external/w3c_dom/org/w3c/dom/css/CSSUnknownRule.java
+ 1ebf2ee2ab246e1bad91b55465c9eea4  libjava/external/w3c_dom/org/w3c/dom/css/CSSValue.java
+ 868a77b588dc5fcc83c540e25fbcf2dc  libjava/external/w3c_dom/org/w3c/dom/css/CSSValueList.java
+ 9d9226cb9e91a043ae87f4e0a0f956fd  libjava/external/w3c_dom/org/w3c/dom/css/Counter.java
+ 6cae306a271233daa2d4bd7b4cd33371  libjava/external/w3c_dom/org/w3c/dom/css/DOMImplementationCSS.java
+ 737299879f37acfed94f7090f3b7832f  libjava/external/w3c_dom/org/w3c/dom/css/DocumentCSS.java
+ be5a9dc6b5c59de16702b64b1968b8d5  libjava/external/w3c_dom/org/w3c/dom/css/ElementCSSInlineStyle.java
+ 1a25fbc8a1a5a4a7f3447fffb3ca2af9  libjava/external/w3c_dom/org/w3c/dom/css/RGBColor.java
+ d2032b5a0493bfc9ed84158c487855c8  libjava/external/w3c_dom/org/w3c/dom/css/Rect.java
+ 4f7e44c8fcc4ef3b4fa44d29d12684ee  libjava/external/w3c_dom/org/w3c/dom/css/ViewCSS.java
+ ba9dab5ef4f5eb273fbee6aa5c282d25  libjava/external/w3c_dom/org/w3c/dom/events/DocumentEvent.java
+ ab7fb1083767826a499b0b450db0f326  libjava/external/w3c_dom/org/w3c/dom/events/Event.java
+ 06c7b629ef6ed565646a5126e4f7b9f8  libjava/external/w3c_dom/org/w3c/dom/events/EventException.java
+ b2b749df80450c25edd89ec82c3fe634  libjava/external/w3c_dom/org/w3c/dom/events/EventListener.java
+ 19b3b5a99aab7c6e543cda3f126a81e5  libjava/external/w3c_dom/org/w3c/dom/events/EventTarget.java
+ 1d87829474cb9f2490e64be6cf2e7071  libjava/external/w3c_dom/org/w3c/dom/events/MouseEvent.java
+ 0c2ee04635f87eb3feb489517302f799  libjava/external/w3c_dom/org/w3c/dom/events/MutationEvent.java
+ 237fbfb6d0341a0f110fe2e2aacb2aa2  libjava/external/w3c_dom/org/w3c/dom/events/UIEvent.java
+ 5e8c7c4dae839a551c0516d611a498cb  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLAnchorElement.java
+ d65adaf088b1d82f9a868ae42c3b01f2  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLAppletElement.java
+ 5078d4b1c46318af6da27415a22883ed  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLAreaElement.java
+ a8e9e52ffe1447d95e24e081c58bca42  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLBRElement.java
+ 2d33feaae72ae81de12bebc965a2dc20  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLBaseElement.java
+ 8542b0106d2ce69b6da4416b2673a2d5  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLBaseFontElement.java
+ 65a2df1c6ea92aa0f66983dec91da99d  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLBodyElement.java
+ 33f57ac011448b5039ff472b32a60653  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLButtonElement.java
+ 4e0794619df460716806b27aa07547da  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLCollection.java
+ efcca8aa3ed178e1759ea0a1ad3ea4f9  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLDListElement.java
+ 3913b015ba54d4456b7fcc0306b03be4  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLDirectoryElement.java
+ 363a276d4c8401c8e16ab45bb1bd8bdb  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLDivElement.java
+ 2878865652b093a1080d7164b1c41521  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLDocument.java
+ 55ae97e6ffdb23c2a104a09204fcafb8  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLElement.java
+ 5898f9fd9c0849fb99897580a1d9a442  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLFieldSetElement.java
+ 9d4d60d7d9546fea9f95979b77a33c02  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLFontElement.java
+ 7a40ae5ba63391992372ccd72c2ee7f8  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLFormElement.java
+ 97c19f4bba5de3a319dbbbadc0b4a534  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLFrameElement.java
+ 86af2b6fdb3f37706cf4b44e03116f1e  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLFrameSetElement.java
+ e0dc3daaa7ffcc398959e9783896d02d  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLHRElement.java
+ 6f57992267a86432d00f8438ef7298f4  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLHeadElement.java
+ 9612b8a673565ce50d85cd1116359738  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLHeadingElement.java
+ 0f670b47e8c79f4239caf83d13826167  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLHtmlElement.java
+ d9b7dc49b984ed008278fba8084903ea  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLIFrameElement.java
+ c77e236a3982553a6a75e16b788674b0  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLImageElement.java
+ a98f63522672c0b330a799e576af1af4  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLInputElement.java
+ 1b56e5a5b3ea088f4f59bba0b837e471  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLIsIndexElement.java
+ a241cc94285969b069b05f5e520743fc  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLLIElement.java
+ 92d426e1fceeef1493a4ec13b5969f52  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLLabelElement.java
+ 4693058ac1b6479d0cd077d34884e229  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLLegendElement.java
+ c4a98fbbc0846fcba4995592fd7bce99  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLLinkElement.java
+ efaf79ce559aa46b25f268acf87779ec  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLMapElement.java
+ 0287c0fbf9c821fcdef01d781198854c  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLMenuElement.java
+ 6cb69fa93f7fbea4c26c976a1bd33827  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLMetaElement.java
+ 7f5cdb9fafaf388cbb1794a71df3a99e  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLModElement.java
+ 0bb310df44b56833a7e0c2d7d0739ad8  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLOListElement.java
+ 18b0295f4e31aebc71cd87bcf77d106a  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLObjectElement.java
+ 0e1da434ae008d4a13eb11b308d83c81  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLOptGroupElement.java
+ 92804f848ae92bf443680bfc1059990f  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLOptionElement.java
+ 8b467e0dcf9396bbee26215645746276  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLOptionsCollection.java
+ 5e8ff11ae67a2ccd4b6bd83bcdb850db  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLParagraphElement.java
+ 47db86c5db278ff0d7c75d584e2202a6  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLParamElement.java
+ 8a4a504c2dfeb1126d679c5e5420b983  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLPreElement.java
+ 14e699d612955b66db2443a39e68f532  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLQuoteElement.java
+ e1deae385e3079ed4ee8a5175d2cbd16  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLScriptElement.java
+ 33ca5c3ec9648f4c1d8877b692486193  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLSelectElement.java
+ 5ded721c5ae0727e81eb7650434a6aa5  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLStyleElement.java
+ 3b2ebbe6f5fa0d5919fc2f585514b9c2  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLTableCaptionElement.java
+ ae84015010ef3b1695da6deeabebdc95  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLTableCellElement.java
+ acb6d46decd52de55711584051492722  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLTableColElement.java
+ 23332062d6143c26cbb7b8e0c412ef24  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLTableElement.java
+ dae393f92ca5bd4b83fe610b8b08528c  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLTableRowElement.java
+ 11f17369cca77ecd5961a15d0c5ef21a  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLTableSectionElement.java
+ 902bd7eb94fbbbfc5f9e7c33f8d7804f  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLTextAreaElement.java
+ 4451c3669b2ef5f9124af8a53218d7db  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLTitleElement.java
+ 00642b75463796f9a8968892e6894193  libjava/external/w3c_dom/org/w3c/dom/html2/HTMLUListElement.java
+ 2d3566ca7f6fea45114b3aa05606b244  libjava/external/w3c_dom/org/w3c/dom/ls/DOMImplementationLS.java
+ 853beadf4288d7f8cf35564794c7f570  libjava/external/w3c_dom/org/w3c/dom/ls/LSException.java
+ fe7a577ff4bcd5476bff5f7dd0ee98cd  libjava/external/w3c_dom/org/w3c/dom/ls/LSInput.java
+ c8ad200a8c9bf4f9b52739464865fb89  libjava/external/w3c_dom/org/w3c/dom/ls/LSLoadEvent.java
+ 631290efaf1a1de87e02dd0029190971  libjava/external/w3c_dom/org/w3c/dom/ls/LSOutput.java
+ 331c88ee430a94e1e10e3b0e34610658  libjava/external/w3c_dom/org/w3c/dom/ls/LSParser.java
+ 3f277b11e7fafe88bc0f9d0657755af4  libjava/external/w3c_dom/org/w3c/dom/ls/LSParserFilter.java
+ f94f8038881a372915d7576ca27a51f7  libjava/external/w3c_dom/org/w3c/dom/ls/LSProgressEvent.java
+ 69d450a87ab072ece40e5aba99d168e3  libjava/external/w3c_dom/org/w3c/dom/ls/LSResourceResolver.java
+ 5ce0ed38afa7733507b60158142150d1  libjava/external/w3c_dom/org/w3c/dom/ls/LSSerializer.java
+ 3809b3bb70afc2b86a5a24b9a94f0212  libjava/external/w3c_dom/org/w3c/dom/ls/LSSerializerFilter.java
+ d6d600f600dcacc20c3b54e9739e61ab  libjava/external/w3c_dom/org/w3c/dom/ranges/DocumentRange.java
+ b225ac3cb17bc5f4cc00b302e5158495  libjava/external/w3c_dom/org/w3c/dom/ranges/Range.java
+ 8486de81741eab07aeda96442cc80ecb  libjava/external/w3c_dom/org/w3c/dom/ranges/RangeException.java
+ da89bc2fa8eed4ee84f3b361030002a6  libjava/external/w3c_dom/org/w3c/dom/stylesheets/DocumentStyle.java
+ d2d32b775d8278e90da246ce48fd0d61  libjava/external/w3c_dom/org/w3c/dom/stylesheets/LinkStyle.java
+ 7492577e9e703050be0096b482311581  libjava/external/w3c_dom/org/w3c/dom/stylesheets/MediaList.java
+ d243aa09a06281c2038ba895fbe4616d  libjava/external/w3c_dom/org/w3c/dom/stylesheets/StyleSheet.java
+ 3204434c09f4f205d3dfa2cc100956e9  libjava/external/w3c_dom/org/w3c/dom/stylesheets/StyleSheetList.java
+ 050304ae43ac1c47a27a7cc6c8b6dd6f  libjava/external/w3c_dom/org/w3c/dom/traversal/DocumentTraversal.java
+ e8d0a5733978716077c08dacd45b9ece  libjava/external/w3c_dom/org/w3c/dom/traversal/NodeFilter.java
+ e455a89d12f94d4330335713e277680f  libjava/external/w3c_dom/org/w3c/dom/traversal/NodeIterator.java
+ 0912b44acaee094ff34efaee446f3605  libjava/external/w3c_dom/org/w3c/dom/traversal/TreeWalker.java
+ df54fc3a305dd812f202629dfc01e97b  libjava/external/w3c_dom/org/w3c/dom/views/AbstractView.java
+ 624699aa255ea806a36a92fabe55dbda  libjava/external/w3c_dom/org/w3c/dom/views/DocumentView.java
+ 097f2efbc34258c86ccecc6c34d75af8  libjava/external/w3c_dom/org/w3c/dom/xpath/XPathEvaluator.java
+ 96b87b44265ea552ebf540583cad24c4  libjava/external/w3c_dom/org/w3c/dom/xpath/XPathException.java
+ b985f2af519fd764fe1acd2f67bb05a3  libjava/external/w3c_dom/org/w3c/dom/xpath/XPathExpression.java
+ 208d955eaa1c62d234f348d6370db0d2  libjava/external/w3c_dom/org/w3c/dom/xpath/XPathNSResolver.java
+ 185c15fc37dbf71dbc076eca95385f7e  libjava/external/w3c_dom/org/w3c/dom/xpath/XPathNamespace.java
+ ee70cb1f6db1c9898512bce3cd32d675  libjava/external/w3c_dom/org/w3c/dom/xpath/XPathResult.java
  41e851e76bff82d7b492d444f91d4c0e  libjava/gcj/.cvsignore
! 7acc5c1c4ded4fb2e32d0a4ab1d6b040  libjava/gcj/Makefile.am
! 9a54b2b7022525f07ea156d3c83ad62b  libjava/gcj/Makefile.in
  94b9871091f1caff9dc28dce6439c7dc  libjava/gcj/array.h
! 361e9d926f9533fff97836fc99ee52b3  libjava/gcj/cni.h
! 1132746ded1c01c81bf0574be6c00359  libjava/gcj/field.h
! 50dbc88b5bdbbeead2ba483794d2d889  libjava/gcj/javaprims.h
  889018fe1f6304db88020c202bf148fe  libjava/gcj/libgcj-config.h.in
! eafd77f0472be0989ca80a47fdbf37fb  libjava/gcj/method.h
! 83730630b0cc34375cc1598a8d1212f4  libjava/gij.cc
! e1408d5d275b717aaa0330aa1b6043db  libjava/gnu/awt/LightweightRedirector.java
  e4a6533e6ba178693bf1cd76421aa764  libjava/gnu/awt/j2d/AbstractGraphicsState.java
  a47831f8c3de048876eaf738f495ece9  libjava/gnu/awt/j2d/DirectRasterGraphics.java
  9438a98d9934857d33c83edf8940b240  libjava/gnu/awt/j2d/Graphics2DImpl.java
  e6d0aaf195e964a73613f6fc834f5737  libjava/gnu/awt/j2d/IntegerGraphicsState.java
  87b502a55fc8ebd6560ff3d0f2d852fc  libjava/gnu/awt/j2d/MappedRaster.java
! 526e520f1ffc7ce914dee88a0b21ff70  libjava/gnu/awt/xlib/XCanvasPeer.java
! 560d5b06fc2530d2ebfb4e5535600b93  libjava/gnu/awt/xlib/XEventLoop.java
  d62b73f1fd41c9130484ce027404d02d  libjava/gnu/awt/xlib/XEventQueue.java
  53ec5c0451922f91a1aee0e78522d541  libjava/gnu/awt/xlib/XFontMetrics.java
! a0ad96a231e7570ab39ed02408b516fc  libjava/gnu/awt/xlib/XFontPeer.java
! 0af5dc67bdaa3126bd5477e11c3e971f  libjava/gnu/awt/xlib/XFramePeer.java
! d5e0ce45342bc2af0415bde2b391cd88  libjava/gnu/awt/xlib/XGraphics.java
  4cef99bd8b0aa71308470f4e86e76510  libjava/gnu/awt/xlib/XGraphicsConfiguration.java
! 538a4d513db3c7f29b2df243bcf8ea6f  libjava/gnu/awt/xlib/XOffScreenImage.java
  fb918e795e5190d2e3111f940f9fd21c  libjava/gnu/awt/xlib/XPanelPeer.java
! 8f78d134e9d6b16adc17df6a40c069c0  libjava/gnu/awt/xlib/XToolkit.java
  9b039c1e624293ed1b67795ad8fc174f  libjava/gnu/classpath/Configuration.java.in
+ 5701025f72f3629b866ae4510ca933bb  libjava/gnu/classpath/ServiceFactory.java
+ c0fb484479d8e332b9a82be6e8ade102  libjava/gnu/classpath/ServiceProviderLoadingAction.java
  c8992b80f6adf1ee7fcd27135e147fea  libjava/gnu/gcj/Core.java
  171be5b658721d8feeaec562d0afe9a6  libjava/gnu/gcj/RawData.java
+ df5faff9d49065e045ce4110ee5f0fb0  libjava/gnu/gcj/RawDataManaged.java
  ef4b09d90de627a4acbe1fe57fb399ec  libjava/gnu/gcj/convert/Blocks-3.txt
! c567ee6b4908cf4e8e82a3de42f4a9d1  libjava/gnu/gcj/convert/BytesToUnicode.java
! 222d05c3bb2bf2d35ef3a438ba183144  libjava/gnu/gcj/convert/Convert.java
! 1e8a49ad72cf652fec9d91af0e2fcf83  libjava/gnu/gcj/convert/IOConverter.java
  781e55330d3b64c0196a76e77f39747c  libjava/gnu/gcj/convert/Input_8859_1.java
  f20859efb59e3ce361c2ab9e96649567  libjava/gnu/gcj/convert/Input_ASCII.java
  3864e59856993ff2de5dd8a3fa819d89  libjava/gnu/gcj/convert/Input_EUCJIS.java
  f80f3490c84310181681832a158f2cc2  libjava/gnu/gcj/convert/Input_JavaSrc.java
  f506083c2080fd3cfbea3ca0974209f0  libjava/gnu/gcj/convert/Input_SJIS.java
  5f07387bb17791555b4e9e10fe9ad620  libjava/gnu/gcj/convert/Input_UTF8.java
+ c002300bfc27d99f93a0dd702b68a925  libjava/gnu/gcj/convert/Input_UnicodeBig.java
+ fbf52ca17f7071f125cb2e7e7508ea22  libjava/gnu/gcj/convert/Input_UnicodeLittle.java
  960b7157a1ed37268ca2b870785825e3  libjava/gnu/gcj/convert/Input_iconv.java
  7744c755c247e420686193f1b7a4b857  libjava/gnu/gcj/convert/JIS0201.h
  b3753c95a97afde8397ff83836e6d428  libjava/gnu/gcj/convert/JIS0208.h
*************** e85bfbab25c0cfd02085a48992eb4072  libjav
*** 16801,16810 ****
  ef419190cc94e545a0e97f76ea5e8d43  libjava/gnu/gcj/convert/Output_JavaSrc.java
  a94d74e5e243c2d86401596218a21dd9  libjava/gnu/gcj/convert/Output_SJIS.java
  bf1f4ff4bb7fbbc5f890dad3c3927fb2  libjava/gnu/gcj/convert/Output_UTF8.java
  80147ee9a6766166e922c47a9fb38cb6  libjava/gnu/gcj/convert/Output_iconv.java
! 0c6e32dc534ef5b342cb1b343b8ccd3c  libjava/gnu/gcj/convert/UnicodeCharacterDatabase-3.0.0.html
! 10e81bc5287453e30e4692d42e5b4a0f  libjava/gnu/gcj/convert/UnicodeData-3.0.0.txt
! c5580b8fd93b6a77ca2de566b805e5d5  libjava/gnu/gcj/convert/UnicodeToBytes.java
  9c1563cb3847f9784f1f14ffa3cbd51b  libjava/gnu/gcj/convert/Unicode_to_JIS.cc
  bbefc594ee07e14b90b818d6cab51f37  libjava/gnu/gcj/convert/gen-from-JIS.c
  cbd560aed882aee9a181a30c0ae862ca  libjava/gnu/gcj/convert/make-trie.c
--- 19870,19878 ----
  ef419190cc94e545a0e97f76ea5e8d43  libjava/gnu/gcj/convert/Output_JavaSrc.java
  a94d74e5e243c2d86401596218a21dd9  libjava/gnu/gcj/convert/Output_SJIS.java
  bf1f4ff4bb7fbbc5f890dad3c3927fb2  libjava/gnu/gcj/convert/Output_UTF8.java
+ c365c83ae463ec131d8f78516911214b  libjava/gnu/gcj/convert/Output_UnicodeLittleUnmarked.java
  80147ee9a6766166e922c47a9fb38cb6  libjava/gnu/gcj/convert/Output_iconv.java
! bb58e7b2c5a964bc3c33a0690d8516c8  libjava/gnu/gcj/convert/UnicodeToBytes.java
  9c1563cb3847f9784f1f14ffa3cbd51b  libjava/gnu/gcj/convert/Unicode_to_JIS.cc
  bbefc594ee07e14b90b818d6cab51f37  libjava/gnu/gcj/convert/gen-from-JIS.c
  cbd560aed882aee9a181a30c0ae862ca  libjava/gnu/gcj/convert/make-trie.c
*************** b03e02b6e7cda13a458df4297b36145e  libjav
*** 16819,16856 ****
  47972fec10d57fc76a5d631e96f3af54  libjava/gnu/gcj/io/natSimpleSHSStream.cc
  62a37e42a98dd01e29c8213868fa48a0  libjava/gnu/gcj/io/shs.cc
  8f1ec7e9346a12bc56d9c857547ff1a7  libjava/gnu/gcj/io/shs.h
! eedb55f943fd8e06e9d272e41ff1f613  libjava/gnu/gcj/natCore.cc
  3fd485f4d8832d26e1f7860e8b76bb61  libjava/gnu/gcj/runtime/FileDeleter.java
  2bdc00c37658396b2a19729297563872  libjava/gnu/gcj/runtime/FinalizerThread.java
! bd76cd7b3c811cf715b856c7acfbd135  libjava/gnu/gcj/runtime/FirstThread.java
  8c6d2d72ce42cadced5e17a376983878  libjava/gnu/gcj/runtime/JNIWeakRef.java
  5421b4dd1f2d603ffe9b9527de88120c  libjava/gnu/gcj/runtime/MethodRef.java
! e8cbb13c2a908ac733fbc1adfae7d2c3  libjava/gnu/gcj/runtime/NameFinder.java
! af10025e9b9aee4ea243122dd74a38a0  libjava/gnu/gcj/runtime/SharedLibHelper.java
! 5a09ead7d2dd388fe521ad132d01f116  libjava/gnu/gcj/runtime/SharedLibLoader.java
  2d19c02805608d85ff756e7e470110d8  libjava/gnu/gcj/runtime/StackTrace.java
  4a0012e240fdd4659b2622721ddffe3f  libjava/gnu/gcj/runtime/StringBuffer.java
! 6de3f00956f6dabac5a9d7ecc210ead7  libjava/gnu/gcj/runtime/VMClassLoader.java
  65192ddddf357c5c201cf611030e1474  libjava/gnu/gcj/runtime/natFinalizerThread.cc
! 6b5f9fdc9b880c766d04de50c6bb9a39  libjava/gnu/gcj/runtime/natFirstThread.cc
! acd5a4416b11d13b96f046d46e3d45eb  libjava/gnu/gcj/runtime/natNameFinder.cc
! c3d72ec9f0b541e534aec4c3029deeea  libjava/gnu/gcj/runtime/natSharedLibLoader.cc
! 46a696e9fb40cc62325c1b45967af895  libjava/gnu/gcj/runtime/natStackTrace.cc
  3f632693d00686dc0930890a74811449  libjava/gnu/gcj/runtime/natStringBuffer.cc
! c558d2605397599b5e9d495a3d373f7d  libjava/gnu/gcj/runtime/natVMClassLoader.cc
  f81f58fe5c74655d9b44f053d97327e8  libjava/gnu/gcj/xlib/Clip.java
  cef15199ffe09cbe13c2e57e2689b054  libjava/gnu/gcj/xlib/Colormap.java
  ac14f9f1fc82a881d41fbf7357a65df2  libjava/gnu/gcj/xlib/Display.java
  3c9aacb014221a6ca630a9365fdf19fc  libjava/gnu/gcj/xlib/Drawable.java
  800ea378bc871901ee8aa92d1ce9cfd7  libjava/gnu/gcj/xlib/Font.java
! 981e360515886d6c26a8defe6f7297fb  libjava/gnu/gcj/xlib/GC.java
  3ce10e4aa38061ad16ff2638d00226d2  libjava/gnu/gcj/xlib/Pixmap.java
  bf0596feb76810a4439e26dbfecd56da  libjava/gnu/gcj/xlib/Screen.java
  20ee43a357f6381ffb3876581592b4f4  libjava/gnu/gcj/xlib/Visual.java
  23f400f9ed91209609afa3f8eb3b78c2  libjava/gnu/gcj/xlib/WMSizeHints.java
  51d5a39f6d813de7c8dfd7583c05e71b  libjava/gnu/gcj/xlib/Window.java
  10481138bb9ea548b260924a9e72668d  libjava/gnu/gcj/xlib/WindowAttributes.java
! 33647e8eecda144d4c2a3cb6ee0785f9  libjava/gnu/gcj/xlib/XAnyEvent.java
  bed3486e75968dcc33dce128e9ee1bd6  libjava/gnu/gcj/xlib/XButtonEvent.java
  c1d8e4c7f490febb2dc6c9b1082d621b  libjava/gnu/gcj/xlib/XColor.java
  d821c1983c8944c7b0952f922458e7e5  libjava/gnu/gcj/xlib/XConfigureEvent.java
--- 19887,19929 ----
  47972fec10d57fc76a5d631e96f3af54  libjava/gnu/gcj/io/natSimpleSHSStream.cc
  62a37e42a98dd01e29c8213868fa48a0  libjava/gnu/gcj/io/shs.cc
  8f1ec7e9346a12bc56d9c857547ff1a7  libjava/gnu/gcj/io/shs.h
! 6a116d4e7156d6e96c622be60dcf8345  libjava/gnu/gcj/natCore.cc
! ccf3b6fd5095d6ab2f307367e13a4ff8  libjava/gnu/gcj/runtime/BootClassLoader.java
! b6aa8cc2f2f2e8a2b70f4db1897cd0b9  libjava/gnu/gcj/runtime/ExtensionClassLoader.java
  3fd485f4d8832d26e1f7860e8b76bb61  libjava/gnu/gcj/runtime/FileDeleter.java
  2bdc00c37658396b2a19729297563872  libjava/gnu/gcj/runtime/FinalizerThread.java
! 59e31d0bca46819b405f1a9479039de5  libjava/gnu/gcj/runtime/HelperClassLoader.java
  8c6d2d72ce42cadced5e17a376983878  libjava/gnu/gcj/runtime/JNIWeakRef.java
  5421b4dd1f2d603ffe9b9527de88120c  libjava/gnu/gcj/runtime/MethodRef.java
! a6f2d419b79dcd9d1727c3b6e37961a3  libjava/gnu/gcj/runtime/NameFinder.java
! d76c4bce8c497dca9dc9e8f8b7cec857  libjava/gnu/gcj/runtime/PersistentByteMap.java
! d601713d0b5c750d456829227f98dd26  libjava/gnu/gcj/runtime/SharedLibHelper.java
! 1a56ad1428c9e67644279607f926e4b7  libjava/gnu/gcj/runtime/SharedLibLoader.java
  2d19c02805608d85ff756e7e470110d8  libjava/gnu/gcj/runtime/StackTrace.java
  4a0012e240fdd4659b2622721ddffe3f  libjava/gnu/gcj/runtime/StringBuffer.java
! 20cfe6865f2f67449dfc017552191173  libjava/gnu/gcj/runtime/SystemClassLoader.java
  65192ddddf357c5c201cf611030e1474  libjava/gnu/gcj/runtime/natFinalizerThread.cc
! 6213334087d4a06145ffeaf74e77c612  libjava/gnu/gcj/runtime/natNameFinder.cc
! 1e90eaac3a45a9fa9c690b5e37050bba  libjava/gnu/gcj/runtime/natSharedLibLoader.cc
! a3d8ee0a31929d23a36145cfd0b695a0  libjava/gnu/gcj/runtime/natStackTrace.cc
  3f632693d00686dc0930890a74811449  libjava/gnu/gcj/runtime/natStringBuffer.cc
! b5cf884d936407c820518bd243e5cd12  libjava/gnu/gcj/tools/gcj_dbtool/Main.java
! 1e7304d93092e980b91d800710886306  libjava/gnu/gcj/tools/gcj_dbtool/natMain.cc
! 33fd5368589235677b1c64a7906595a6  libjava/gnu/gcj/util/Debug.java
! 3cc687520fbf09ed7d43c6a2e270d94c  libjava/gnu/gcj/util/natDebug.cc
  f81f58fe5c74655d9b44f053d97327e8  libjava/gnu/gcj/xlib/Clip.java
  cef15199ffe09cbe13c2e57e2689b054  libjava/gnu/gcj/xlib/Colormap.java
  ac14f9f1fc82a881d41fbf7357a65df2  libjava/gnu/gcj/xlib/Display.java
  3c9aacb014221a6ca630a9365fdf19fc  libjava/gnu/gcj/xlib/Drawable.java
  800ea378bc871901ee8aa92d1ce9cfd7  libjava/gnu/gcj/xlib/Font.java
! 916315a5da5155045823519f210be81c  libjava/gnu/gcj/xlib/GC.java
  3ce10e4aa38061ad16ff2638d00226d2  libjava/gnu/gcj/xlib/Pixmap.java
  bf0596feb76810a4439e26dbfecd56da  libjava/gnu/gcj/xlib/Screen.java
  20ee43a357f6381ffb3876581592b4f4  libjava/gnu/gcj/xlib/Visual.java
  23f400f9ed91209609afa3f8eb3b78c2  libjava/gnu/gcj/xlib/WMSizeHints.java
  51d5a39f6d813de7c8dfd7583c05e71b  libjava/gnu/gcj/xlib/Window.java
  10481138bb9ea548b260924a9e72668d  libjava/gnu/gcj/xlib/WindowAttributes.java
! 5de0e149c544a7d87b611abb4756422b  libjava/gnu/gcj/xlib/XAnyEvent.java
  bed3486e75968dcc33dce128e9ee1bd6  libjava/gnu/gcj/xlib/XButtonEvent.java
  c1d8e4c7f490febb2dc6c9b1082d621b  libjava/gnu/gcj/xlib/XColor.java
  d821c1983c8944c7b0952f922458e7e5  libjava/gnu/gcj/xlib/XConfigureEvent.java
*************** bf475378370f3b5ad67c1022b0eb31aa  libjav
*** 16866,16879 ****
  defd9e9f38bba661d9e4fee85b767c34  libjava/gnu/gcj/xlib/natDisplay.cc
  2006c9f4df3e7a5e9d812eb542931117  libjava/gnu/gcj/xlib/natDrawable.cc
  9db1e0dd4340dbe6f8b56721bd926e19  libjava/gnu/gcj/xlib/natFont.cc
! 3c1c4483b78d081445e78aa2f8f1cfae  libjava/gnu/gcj/xlib/natGC.cc
  2dc380b1a5232349b9a3846262d534f4  libjava/gnu/gcj/xlib/natPixmap.cc
  d111c59e8680db80fb63f521315ffa57  libjava/gnu/gcj/xlib/natScreen.cc
  205712fa874aebc6ff3132ea977cdcc1  libjava/gnu/gcj/xlib/natVisual.cc
  99c39776801972f9208a0900f03ce22c  libjava/gnu/gcj/xlib/natWMSizeHints.cc
  83c7bb70a2cda974fb296f0f3ca1ef84  libjava/gnu/gcj/xlib/natWindow.cc
  07d171112455faa0402400cc7d5a850c  libjava/gnu/gcj/xlib/natWindowAttributes.cc
! 37b333cc6bd04908185b704e5bda2532  libjava/gnu/gcj/xlib/natXAnyEvent.cc
  e7b8f4064626e02f9169a6d1c2595dfc  libjava/gnu/gcj/xlib/natXButtonEvent.cc
  955bec32e710a282e0cf8562feb5757a  libjava/gnu/gcj/xlib/natXColor.cc
  32a1f34160ac3cf29132c6fe63210ddb  libjava/gnu/gcj/xlib/natXConfigureEvent.cc
--- 19939,19952 ----
  defd9e9f38bba661d9e4fee85b767c34  libjava/gnu/gcj/xlib/natDisplay.cc
  2006c9f4df3e7a5e9d812eb542931117  libjava/gnu/gcj/xlib/natDrawable.cc
  9db1e0dd4340dbe6f8b56721bd926e19  libjava/gnu/gcj/xlib/natFont.cc
! ca66742958af1fc99b641271466e1c04  libjava/gnu/gcj/xlib/natGC.cc
  2dc380b1a5232349b9a3846262d534f4  libjava/gnu/gcj/xlib/natPixmap.cc
  d111c59e8680db80fb63f521315ffa57  libjava/gnu/gcj/xlib/natScreen.cc
  205712fa874aebc6ff3132ea977cdcc1  libjava/gnu/gcj/xlib/natVisual.cc
  99c39776801972f9208a0900f03ce22c  libjava/gnu/gcj/xlib/natWMSizeHints.cc
  83c7bb70a2cda974fb296f0f3ca1ef84  libjava/gnu/gcj/xlib/natWindow.cc
  07d171112455faa0402400cc7d5a850c  libjava/gnu/gcj/xlib/natWindowAttributes.cc
! 8909f3be485498e67e56152ada8d0238  libjava/gnu/gcj/xlib/natXAnyEvent.cc
  e7b8f4064626e02f9169a6d1c2595dfc  libjava/gnu/gcj/xlib/natXButtonEvent.cc
  955bec32e710a282e0cf8562feb5757a  libjava/gnu/gcj/xlib/natXColor.cc
  32a1f34160ac3cf29132c6fe63210ddb  libjava/gnu/gcj/xlib/natXConfigureEvent.cc
*************** e4a3c705d8321475d557b92d0e5f0a89  libjav
*** 16882,16973 ****
  37bb54c329486a05802e08a62fa9a9a4  libjava/gnu/gcj/xlib/natXImage.cc
  6f419dc99f89cbe01237c07463913483  libjava/gnu/gcj/xlib/natXUnmapEvent.cc
  4700a85ab869b959fbe3e735daf6acdc  libjava/gnu/java/awt/BitMaskExtent.java
! c692424d5a3673bbde6a1ea453bdf3ec  libjava/gnu/java/awt/BitwiseXORComposite.java
! ca584f443dc3faa07b12f03af4169512  libjava/gnu/java/awt/Buffers.java
! a450b3ed9cc4cfe2e8859cd3a6dfeb08  libjava/gnu/java/awt/ClasspathToolkit.java
! ccc4ed924fbf5d663684897c8a938611  libjava/gnu/java/awt/ComponentDataBlitOp.java
! f64e31ca4ab4257d3f6cf4ef9c2adc78  libjava/gnu/java/awt/EmbeddedWindow.java
  4ae6b820d1dd91c10f2e3f679e008cce  libjava/gnu/java/awt/EmbeddedWindowSupport.java
  ff193d08d912ff4d38383784dbbb8b1f  libjava/gnu/java/awt/EventModifier.java
! 6fa33e15e74ddf8ed8ee40a738a9e9d0  libjava/gnu/java/awt/image/ImageDecoder.java
! a19ce21839a85b31a983eb82104947a7  libjava/gnu/java/awt/image/XBMDecoder.java
! 0d97e698c1bee7088ff3df42fe2e1c9a  libjava/gnu/java/awt/natEmbeddedWindow.cc
! e8b94fe38dea56c9eb04532f7fd0c403  libjava/gnu/java/awt/peer/ClasspathFontPeer.java
  056fb2604a9ad988858272652f5da51e  libjava/gnu/java/awt/peer/EmbeddedWindowPeer.java
! efa9e7530ffe6becc68448ab40d846dd  libjava/gnu/java/awt/peer/GLightweightPeer.java
! c018c6788085c5c44d8189a157f19527  libjava/gnu/java/awt/peer/gtk/GdkClasspathFontPeer.java
! fe21b4b5dd95f493f1fbde0bc73a61b8  libjava/gnu/java/awt/peer/gtk/GdkClasspathFontPeerMetrics.java
! 931b2a8dcf11975182d734f262041170  libjava/gnu/java/awt/peer/gtk/GdkFontMetrics.java
! 81cbe542097cd093953df4313f27a250  libjava/gnu/java/awt/peer/gtk/GdkGlyphVector.java
! eb0047759f0644f05a2ffffde4ddb84e  libjava/gnu/java/awt/peer/gtk/GdkGraphics.java
! 3c176f948c5875afd2ef400d4b3aea7e  libjava/gnu/java/awt/peer/gtk/GdkGraphics2D.java
! 358ed82f44e76a9e72c8a3e9dabd86fe  libjava/gnu/java/awt/peer/gtk/GdkPixbufDecoder.java
! e5dbb8755b74f0b192c96a3c385140c3  libjava/gnu/java/awt/peer/gtk/GtkArg.java
! 5cc551867782b6f9e32ff7bfa32aad59  libjava/gnu/java/awt/peer/gtk/GtkArgList.java
! cd390a0577b064563ee7dbed41aec86e  libjava/gnu/java/awt/peer/gtk/GtkButtonPeer.java
  04879a761eda5467125bfb28c7df44c3  libjava/gnu/java/awt/peer/gtk/GtkCanvasPeer.java
  81b955bd72e94592419dbb6cbe9e0606  libjava/gnu/java/awt/peer/gtk/GtkCheckboxGroupPeer.java
! 04a76075456c88a4429f60fe0410ffd4  libjava/gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java
! 4e94e1029ee78a17e78fc001a590f36c  libjava/gnu/java/awt/peer/gtk/GtkCheckboxPeer.java
! e0da76fdbe612921cc4c988bbf970b0c  libjava/gnu/java/awt/peer/gtk/GtkChoicePeer.java
! 7e80a845dcb2fd60db6f5c32f529bdce  libjava/gnu/java/awt/peer/gtk/GtkClipboard.java
! 8949212be2de5ec2c7f11f3fe4b32a3c  libjava/gnu/java/awt/peer/gtk/GtkComponentPeer.java
! 6c4ce847f37945077c9cf8533f856317  libjava/gnu/java/awt/peer/gtk/GtkContainerPeer.java
! bd4e625e92f8169bd8c435dacf6d8387  libjava/gnu/java/awt/peer/gtk/GtkDialogPeer.java
  fe0c00e3c2dff5c09e9b8decfb47dea4  libjava/gnu/java/awt/peer/gtk/GtkEmbeddedWindowPeer.java
! 142977660a1ea1c0a4e2554561e56d4b  libjava/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
! 597ff39f68c136fdf62f455d946752d3  libjava/gnu/java/awt/peer/gtk/GtkFontPeer.java
! fc3d3e5d318e475dc43ca60705687f0f  libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java
! d6af0f47f783e81856c77f4aecad44c7  libjava/gnu/java/awt/peer/gtk/GtkGenericPeer.java
! 5db84922192841d6cb124f3a70f98c08  libjava/gnu/java/awt/peer/gtk/GtkImage.java
! 7d43ef71fafd83619e34cd943d1c5a8b  libjava/gnu/java/awt/peer/gtk/GtkImagePainter.java
! aa768242e8e5b1e5c00946f7bc6e78a3  libjava/gnu/java/awt/peer/gtk/GtkLabelPeer.java
! 2e67b829e95e25f9e6fbcee7ebe19ac9  libjava/gnu/java/awt/peer/gtk/GtkListPeer.java
! af4985c7a8291c3713bff1400a4fb576  libjava/gnu/java/awt/peer/gtk/GtkMainThread.java
! 7d5e1397a64bf91bcc072f22e58c00e5  libjava/gnu/java/awt/peer/gtk/GtkMenuBarPeer.java
! bc12a6fcd242741b23660458dbb48aa2  libjava/gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java
! fcc2651a7a6835a94b53a678f22e1163  libjava/gnu/java/awt/peer/gtk/GtkMenuItemPeer.java
! 90bafc55cab3335604a205747647db3c  libjava/gnu/java/awt/peer/gtk/GtkMenuPeer.java
! d447d1c6ac349139401ea9cb67950123  libjava/gnu/java/awt/peer/gtk/GtkOffScreenImage.java
! e3795b134657c4b8e1ee95c8e20115fb  libjava/gnu/java/awt/peer/gtk/GtkPanelPeer.java
  5da28de5522aa5ef11e3cc87c293993e  libjava/gnu/java/awt/peer/gtk/GtkPopupMenuPeer.java
! 2cf0c32d457b965fb7bdb2274f9a374d  libjava/gnu/java/awt/peer/gtk/GtkScrollPanePeer.java
! 46d3c7fa2d54f6ccbf7a1d1b8366acd1  libjava/gnu/java/awt/peer/gtk/GtkScrollbarPeer.java
! 1bc3d67de3bee1f3ba871d47d833cef0  libjava/gnu/java/awt/peer/gtk/GtkTextAreaPeer.java
! 061b2a1181fa65037266fe5703d689b8  libjava/gnu/java/awt/peer/gtk/GtkTextComponentPeer.java
! 1cce9d99bf7174260816c5efaf780654  libjava/gnu/java/awt/peer/gtk/GtkTextFieldPeer.java
! 048ab0c4189bee33e2a12f5fa7c8e204  libjava/gnu/java/awt/peer/gtk/GtkToolkit.java
! e7d4310f010aacdc3aff49bb027a60db  libjava/gnu/java/awt/peer/gtk/GtkWindowPeer.java
  61c6215542edcba01d122efa9cd5cb47  libjava/gnu/java/awt/peer/gtk/Test.java
! 70b236bd3904f66ffb2baab646443a01  libjava/gnu/java/awt/peer/gtk/TestAWT.java
! f9f9faca4ef27d2ad49dac45152b49e9  libjava/gnu/java/beans/BeanInfoEmbryo.java
! 94e0fe4403cbc8157700bcc0b9603a37  libjava/gnu/java/beans/EmptyBeanInfo.java
! e2800d903032011a9efe16714438ee00  libjava/gnu/java/beans/ExplicitBeanInfo.java
! 0eb3dfd0816fff5fa3f6952b43e2acb9  libjava/gnu/java/beans/IntrospectionIncubator.java
! 6802045140926ceb1607f67a068868d9  libjava/gnu/java/beans/editors/ColorEditor.java
! ca3367ca2f9b85f68226c4a66a656f61  libjava/gnu/java/beans/editors/FontEditor.java
! 894c7cf8b883715e412293a91f68770c  libjava/gnu/java/beans/editors/NativeBooleanEditor.java
! 7be7b77ccb76185bb841e36a71a4ef47  libjava/gnu/java/beans/editors/NativeByteEditor.java
! 41975a2dd6060ee6a2c00d7cf5b0af29  libjava/gnu/java/beans/editors/NativeDoubleEditor.java
! b6d82b35959b820a942c1d765f376d3c  libjava/gnu/java/beans/editors/NativeFloatEditor.java
! d8f0af221249a2c58c134cd73ee0e750  libjava/gnu/java/beans/editors/NativeIntEditor.java
! cc9555c6f66c2e3b30d69f13dec201df  libjava/gnu/java/beans/editors/NativeLongEditor.java
! e92bdebac27c81af43cf6426f0febf1e  libjava/gnu/java/beans/editors/NativeShortEditor.java
! 9200b141445e8cf455690dcf4761b71c  libjava/gnu/java/beans/editors/StringEditor.java
! 5d7ce99ea640e4f214a757b6e570a259  libjava/gnu/java/beans/info/ComponentBeanInfo.java
  580fce43aa31cfafa35eb8e28c8ce40b  libjava/gnu/java/io/ASN1ParsingException.java
! 086dcd4abc2f31a2c63e60f454cbe736  libjava/gnu/java/io/Base64InputStream.java
! 302930a1d3cecbacb859ee1da9cc0cc4  libjava/gnu/java/io/ClassLoaderObjectInputStream.java
  b92ed3d3265bcc4e7d966775d8c80d41  libjava/gnu/java/io/NullOutputStream.java
  eb4bf80231829bd7c53cbaacfeb2b5c6  libjava/gnu/java/io/ObjectIdentityWrapper.java
  56b4759862fa482c07dc2098941ce68d  libjava/gnu/java/lang/ArrayHelper.java
! a6dc9d5de23fa1571dd6020653a040f2  libjava/gnu/java/lang/CharData.java
! b318aab54fd626a63f7b903c9ff21704  libjava/gnu/java/lang/ClassHelper.java
  57d243ba867f1f33fe07a12e453916ae  libjava/gnu/java/lang/reflect/TypeSignature.java
! b7f0974adc5de7a3ac9272bfeb70bb84  libjava/gnu/java/locale/Calendar.java
! 4583c233814e03276b19536f861f3d6c  libjava/gnu/java/locale/Calendar_de.java
! 2846c7811a894cde5511658d9c556b18  libjava/gnu/java/locale/Calendar_en.java
! 46202c690ac17514fcd3cc6e6d70b581  libjava/gnu/java/locale/Calendar_nl.java
  7c5b29fd9bc2526a2e9ccb7961761a90  libjava/gnu/java/locale/LocaleInformation.java
  8ce7aee70ffdb2ba3c8060c8c86af8a2  libjava/gnu/java/locale/LocaleInformation_af_ZA.java
  9a4a0c04500b14406cfd767794118157  libjava/gnu/java/locale/LocaleInformation_ar_AE.java
--- 19955,20102 ----
  37bb54c329486a05802e08a62fa9a9a4  libjava/gnu/gcj/xlib/natXImage.cc
  6f419dc99f89cbe01237c07463913483  libjava/gnu/gcj/xlib/natXUnmapEvent.cc
  4700a85ab869b959fbe3e735daf6acdc  libjava/gnu/java/awt/BitMaskExtent.java
! 00a0c3672afc6f64f54a5c63fba99506  libjava/gnu/java/awt/BitwiseXORComposite.java
! 973cecc1ac549ff013ad33c9e7496239  libjava/gnu/java/awt/Buffers.java
! f3a479f26aa09f5e155dff9db2a1e1ad  libjava/gnu/java/awt/ClasspathToolkit.java
! 73e59dc5ad1e4fd00b579e7255d32d01  libjava/gnu/java/awt/ComponentDataBlitOp.java
! 902cc941d781333c94c96a529323b90d  libjava/gnu/java/awt/EmbeddedWindow.java
  4ae6b820d1dd91c10f2e3f679e008cce  libjava/gnu/java/awt/EmbeddedWindowSupport.java
  ff193d08d912ff4d38383784dbbb8b1f  libjava/gnu/java/awt/EventModifier.java
! bea1cde873ed52d08cd41a027222bc61  libjava/gnu/java/awt/color/CieXyzConverter.java
! 2da1532c011b16dd496f70513083f584  libjava/gnu/java/awt/color/ClutProfileConverter.java
! 6bd56423ab30c074323ad7c79964a607  libjava/gnu/java/awt/color/ColorLookUpTable.java
! b60b1cac6d6cce5a3651ec61c030f31c  libjava/gnu/java/awt/color/ColorSpaceConverter.java
! fc8bedfda39da1eb87b69cfc84e1bf8f  libjava/gnu/java/awt/color/GrayProfileConverter.java
! d827a231c61d90f91987df77c5894cb9  libjava/gnu/java/awt/color/GrayScaleConverter.java
! 4dba966af74f9d04c58769b6e4b20a89  libjava/gnu/java/awt/color/LinearRGBConverter.java
! c2d771ed6de50508cb81d5b6cc67ae7e  libjava/gnu/java/awt/color/ProfileHeader.java
! 3ca8d11dafe71895acec97f799669b23  libjava/gnu/java/awt/color/PyccConverter.java
! 3ac80d64ba62852f507d76920a5bfe4e  libjava/gnu/java/awt/color/RgbProfileConverter.java
! 97b76e183e19edd28035be49dd53a2ad  libjava/gnu/java/awt/color/SrgbConverter.java
! a5eed67be97df4af6b99fb0c75db0f63  libjava/gnu/java/awt/color/TagEntry.java
! 67c84cd5c05dc613eaeeae9be1207f2a  libjava/gnu/java/awt/color/ToneReproductionCurve.java
! 88efad0eb2d28658f7f65bc07c9f5630  libjava/gnu/java/awt/doc-files/BitwiseXORComposite-1.png
! f3ef737f755e39d1bd0e52ba7cb44c5c  libjava/gnu/java/awt/image/ImageDecoder.java
! cc4a39545730f4268d7c467aa406e86b  libjava/gnu/java/awt/image/XBMDecoder.java
! 5158a9b4636b9f7072bdf49c5385ab23  libjava/gnu/java/awt/peer/ClasspathFontPeer.java
! a7979c5b9a3c83e8d97dbc8072b0d8ae  libjava/gnu/java/awt/peer/ClasspathTextLayoutPeer.java
  056fb2604a9ad988858272652f5da51e  libjava/gnu/java/awt/peer/EmbeddedWindowPeer.java
! 61066f448601178ffbda940d1e5155cd  libjava/gnu/java/awt/peer/GLightweightPeer.java
! 6e0274057ed23c931f816b7a56a0dccf  libjava/gnu/java/awt/peer/gtk/GThreadMutex.java
! c99a8ea62276ba07f651edb7b22bc0fb  libjava/gnu/java/awt/peer/gtk/GThreadNativeMethodRunner.java
! ff3f731a6214a5fdceba5d8318185afa  libjava/gnu/java/awt/peer/gtk/GdkFontMetrics.java
! eabc13d37fe61a4cbad2c7464e87bfaf  libjava/gnu/java/awt/peer/gtk/GdkFontPeer.java
! 19456884c02c70661eb9cdd1e73fd6c9  libjava/gnu/java/awt/peer/gtk/GdkGlyphVector.java
! 04a68f429ac665817a89554599f22cdd  libjava/gnu/java/awt/peer/gtk/GdkGraphics.java
! 3c5515181cb250d1a1074890df0326ee  libjava/gnu/java/awt/peer/gtk/GdkGraphics2D.java
! 63cfe827494cfb65ac2022bdf92f634a  libjava/gnu/java/awt/peer/gtk/GdkGraphicsConfiguration.java
! 193d76c69f24065c50b8107063806d41  libjava/gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java
! d9eb899ee7061fa8ddf04ce5bf32491f  libjava/gnu/java/awt/peer/gtk/GdkPixbufDecoder.java
! 383d94e0c48d22d72ca562dd74676945  libjava/gnu/java/awt/peer/gtk/GdkRobotPeer.java
! 838b8975fdb39c5ef5bd82d4f2b4208e  libjava/gnu/java/awt/peer/gtk/GdkScreenGraphicsDevice.java
! e22f463b264f901524432cddfc6ed832  libjava/gnu/java/awt/peer/gtk/GdkTextLayout.java
! 2d39f610f0cf49fcc4257880fd3c2023  libjava/gnu/java/awt/peer/gtk/GtkButtonPeer.java
  04879a761eda5467125bfb28c7df44c3  libjava/gnu/java/awt/peer/gtk/GtkCanvasPeer.java
  81b955bd72e94592419dbb6cbe9e0606  libjava/gnu/java/awt/peer/gtk/GtkCheckboxGroupPeer.java
! 8645d77749054764f0983b412ac8f794  libjava/gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java
! 4b7d57e7ea828bcbd828031f5afdf7ec  libjava/gnu/java/awt/peer/gtk/GtkCheckboxPeer.java
! 6a53a1d1733fff8512a6e0950094c916  libjava/gnu/java/awt/peer/gtk/GtkChoicePeer.java
! c7034a344facf98498ba6cfb963b8086  libjava/gnu/java/awt/peer/gtk/GtkClipboard.java
! eb89423a2df52b48ad0f2d1e45fa9d86  libjava/gnu/java/awt/peer/gtk/GtkComponentPeer.java
! 25bac0cf8ef9c9f5dcc4cc9ca3871ad7  libjava/gnu/java/awt/peer/gtk/GtkContainerPeer.java
! c570e91d1e7505ca13d94f1758624d75  libjava/gnu/java/awt/peer/gtk/GtkDialogPeer.java
  fe0c00e3c2dff5c09e9b8decfb47dea4  libjava/gnu/java/awt/peer/gtk/GtkEmbeddedWindowPeer.java
! fa5a9ae2fb6cf9fe7f48747fd99dcb9c  libjava/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
! 6ed06c75cc82b5ebb4953f7a6edd9e2f  libjava/gnu/java/awt/peer/gtk/GtkFontPeer.java
! bafdb6ee86ae5a9d4a990f003aa834fb  libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java
! 7b47307cbffa96b76a2c789905061a11  libjava/gnu/java/awt/peer/gtk/GtkGenericPeer.java
! 6316cb07d4850f03c0359bd2cb2e53b6  libjava/gnu/java/awt/peer/gtk/GtkImage.java
! 05215c180b7bd2123421e5b796b5b76d  libjava/gnu/java/awt/peer/gtk/GtkImagePainter.java
! 00b429c1f207fbe313ae52a4609365ab  libjava/gnu/java/awt/peer/gtk/GtkLabelPeer.java
! 89301a2a23e40761eef28fff1a2fd495  libjava/gnu/java/awt/peer/gtk/GtkListPeer.java
! cf99df61330c1ac31c978275dd739c0e  libjava/gnu/java/awt/peer/gtk/GtkMenuBarPeer.java
! b57d4dcc99e825e5fee0c6626058afbb  libjava/gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java
! 4c62d10667c1d198c058051cbe37e7de  libjava/gnu/java/awt/peer/gtk/GtkMenuItemPeer.java
! 01244b6dbe47204e9396919de8774acc  libjava/gnu/java/awt/peer/gtk/GtkMenuPeer.java
! 31a2dbf2726de424a9dbb3e0dbfbb8e1  libjava/gnu/java/awt/peer/gtk/GtkOffScreenImage.java
! a57e41d05c1b8d4b783c77bc408a9055  libjava/gnu/java/awt/peer/gtk/GtkPanelPeer.java
  5da28de5522aa5ef11e3cc87c293993e  libjava/gnu/java/awt/peer/gtk/GtkPopupMenuPeer.java
! 4331d0a1cc54924ca8a24a5b0cbc1d1c  libjava/gnu/java/awt/peer/gtk/GtkScrollPanePeer.java
! 9ee4340578c3c54f18eee0cbf9c99acf  libjava/gnu/java/awt/peer/gtk/GtkScrollbarPeer.java
! 5896ce4c49e354b6a7a73a8ca49fc1f4  libjava/gnu/java/awt/peer/gtk/GtkTextAreaPeer.java
! abafb23ee07d5238c971fd42e1a74430  libjava/gnu/java/awt/peer/gtk/GtkTextComponentPeer.java
! bd4e99113a113353be21d125cf5133e4  libjava/gnu/java/awt/peer/gtk/GtkTextFieldPeer.java
! 9a5f0b152ccf4557c6dac62fb744b926  libjava/gnu/java/awt/peer/gtk/GtkToolkit.java
! 9a84d41f91c28a15b404b913595c0897  libjava/gnu/java/awt/peer/gtk/GtkWindowPeer.java
  61c6215542edcba01d122efa9cd5cb47  libjava/gnu/java/awt/peer/gtk/Test.java
! 83871edcc89223f7bef57bb04b46ad0f  libjava/gnu/java/awt/peer/gtk/TestAWT.java
! 09396eb0ef6a6e863b11229452760b79  libjava/gnu/java/beans/BeanInfoEmbryo.java
! 77a532b1b9ca294bc287f5fb03dd0b5d  libjava/gnu/java/beans/DummyAppletContext.java
! f4c9c074fd8e448603cc3e758a4dedcf  libjava/gnu/java/beans/DummyAppletStub.java
! 2b538197287fcb2a4a9cf3237838a56c  libjava/gnu/java/beans/ExplicitBeanInfo.java
! e8f3725520618cb8f63e1104b154f861  libjava/gnu/java/beans/IntrospectionIncubator.java
! e2a7b2ccf771b72ea4694212985cef3c  libjava/gnu/java/beans/decoder/AbstractContext.java
! 708ad151fa31ec914396ef9c34173fef  libjava/gnu/java/beans/decoder/AbstractCreatableObjectContext.java
! d57c818e91210b40f629d1333a66841a  libjava/gnu/java/beans/decoder/AbstractElementHandler.java
! a41332c7cf0139d02327a6a43414aff2  libjava/gnu/java/beans/decoder/AbstractObjectContext.java
! eb1d562d6b4dec70b54f7cc6a22482b2  libjava/gnu/java/beans/decoder/ArrayContext.java
! 6fa3f544556537040ecf7f27ad1d926f  libjava/gnu/java/beans/decoder/ArrayHandler.java
! ef8d7e4fca0bfde52e92d583fd0697eb  libjava/gnu/java/beans/decoder/AssemblyException.java
! 08c55401de9ef4e08eae66f8902d61ee  libjava/gnu/java/beans/decoder/BooleanHandler.java
! 9330d622146bc8d896ea680bf633d897  libjava/gnu/java/beans/decoder/ByteHandler.java
! 15ee49f984bf24bfbe3565a77bde54c0  libjava/gnu/java/beans/decoder/CharHandler.java
! f315ec586b8668cec3aebd5d47e1d772  libjava/gnu/java/beans/decoder/ClassHandler.java
! 4f74dde608bfce521142bc941fd25415  libjava/gnu/java/beans/decoder/ConstructorContext.java
! 4eb0685d88833c491d13918b9d9a73f1  libjava/gnu/java/beans/decoder/Context.java
! a14caeeda9f5399351198b3aa9902eb6  libjava/gnu/java/beans/decoder/DecoderContext.java
! d8b3cb46d582f0b41c426c3d227df825  libjava/gnu/java/beans/decoder/DefaultExceptionListener.java
! 508dc0ed23d5f464a2572d34d711b79c  libjava/gnu/java/beans/decoder/DoubleHandler.java
! 0fde62096fe7c4122c2d408bc9e14172  libjava/gnu/java/beans/decoder/DummyContext.java
! 4c2b657911b3e4a933d40b520016bf77  libjava/gnu/java/beans/decoder/DummyHandler.java
! 2f90a98d89ea8bdde0d62b6a570dbe20  libjava/gnu/java/beans/decoder/ElementHandler.java
! decbc3aae3b39ca0407d2b578aecc45f  libjava/gnu/java/beans/decoder/FloatHandler.java
! 7d06cef1690b264b623f0925a032bafa  libjava/gnu/java/beans/decoder/GrowableArrayContext.java
! 63a750d2d14fa2c48e0726ec8c4d487a  libjava/gnu/java/beans/decoder/IndexContext.java
! 92726720a00bf9bdbcb11cc45d2d7ed0  libjava/gnu/java/beans/decoder/IntHandler.java
! 6dceebb13d68bfbfc67287c53620ed4c  libjava/gnu/java/beans/decoder/JavaHandler.java
! 78c259ee542257657760a2c9daf51819  libjava/gnu/java/beans/decoder/LongHandler.java
! 4f922286ba998bfafcc2cdeed3083a2f  libjava/gnu/java/beans/decoder/MethodContext.java
! 09fa2540fde15c903a9d8992497b3fba  libjava/gnu/java/beans/decoder/MethodFinder.java
! c1d3498ef4228f8974e0c8750e52c85b  libjava/gnu/java/beans/decoder/NullHandler.java
! 94bbe153aa870abfc65dc1b0272de515  libjava/gnu/java/beans/decoder/ObjectContext.java
! 48e17591de284b26359ec8e8eb3b6bcb  libjava/gnu/java/beans/decoder/ObjectHandler.java
! 109d43abfd1ab1c1cf0380c9ab7e1a76  libjava/gnu/java/beans/decoder/PersistenceParser.java
! 5a6762078a8f9ae60d797d28980f0829  libjava/gnu/java/beans/decoder/PropertyContext.java
! a60c16222017876be26326fcd5a1178b  libjava/gnu/java/beans/decoder/ShortHandler.java
! 8d0443817f56bdd159eb38f79476c297  libjava/gnu/java/beans/decoder/SimpleHandler.java
! 791fc18b10b9a6678361d2fcafd06503  libjava/gnu/java/beans/decoder/StaticMethodContext.java
! ea9c9ee023f63c0672f85bd57dd6199f  libjava/gnu/java/beans/decoder/StringHandler.java
! e9d4afdc0a2db21dabef75e8999afc3a  libjava/gnu/java/beans/decoder/VoidHandler.java
! 7473a1b56c91429c8a18a45e05a0759c  libjava/gnu/java/beans/editors/ColorEditor.java
! 23fd7d60870dd5c1cf49c658d7ea6e4e  libjava/gnu/java/beans/editors/FontEditor.java
! 63bb90ce54aa5a0288dce7b31c280bbb  libjava/gnu/java/beans/editors/NativeBooleanEditor.java
! e8f4aa282b4ed3b26654e5b6a6b829bc  libjava/gnu/java/beans/editors/NativeByteEditor.java
! 1eb29648bbe045b9dc70106b88628603  libjava/gnu/java/beans/editors/NativeDoubleEditor.java
! 03d60ac97ddd44171a0858d2d3628c29  libjava/gnu/java/beans/editors/NativeFloatEditor.java
! f72dc1a86f84a7784aabf6569d75b126  libjava/gnu/java/beans/editors/NativeIntEditor.java
! d7bf5a96a0f1d0e5df23cc4ed34c95ad  libjava/gnu/java/beans/editors/NativeLongEditor.java
! ff268a1b9a13c53459ae78d2e1ca08a6  libjava/gnu/java/beans/editors/NativeShortEditor.java
! 9dfbea0c6712e7dee1883d6dd6179e54  libjava/gnu/java/beans/editors/StringEditor.java
  580fce43aa31cfafa35eb8e28c8ce40b  libjava/gnu/java/io/ASN1ParsingException.java
! 98ff3ea94583d214d6af5fe4a2875721  libjava/gnu/java/io/Base64InputStream.java
! 5b3309e61753ec1833b16f759c459b26  libjava/gnu/java/io/ClassLoaderObjectInputStream.java
  b92ed3d3265bcc4e7d966775d8c80d41  libjava/gnu/java/io/NullOutputStream.java
  eb4bf80231829bd7c53cbaacfeb2b5c6  libjava/gnu/java/io/ObjectIdentityWrapper.java
  56b4759862fa482c07dc2098941ce68d  libjava/gnu/java/lang/ArrayHelper.java
! a423017eb1c0af3a13f73e6fd523daf2  libjava/gnu/java/lang/CharData.java
! a5a276ffb83290bad12fe96edb5f2eb0  libjava/gnu/java/lang/ClassHelper.java
! 126b441fd8de833ee6707ee9d6af88e7  libjava/gnu/java/lang/MainThread.java
! 204c09b2b63a8b5051f65a13298b1f05  libjava/gnu/java/lang/natMainThread.cc
  57d243ba867f1f33fe07a12e453916ae  libjava/gnu/java/lang/reflect/TypeSignature.java
! 9e0effeef9ebf8681da4b0685207ce5a  libjava/gnu/java/locale/Calendar.java
! 2892bd5a274abd6f218fc21f548d34e5  libjava/gnu/java/locale/Calendar_de.java
! 4c78f678657ef8fa8984c3e1090416a9  libjava/gnu/java/locale/Calendar_en.java
! 2e30ee4dc0932e0e0954f0bc2196894d  libjava/gnu/java/locale/Calendar_nl.java
  7c5b29fd9bc2526a2e9ccb7961761a90  libjava/gnu/java/locale/LocaleInformation.java
  8ce7aee70ffdb2ba3c8060c8c86af8a2  libjava/gnu/java/locale/LocaleInformation_af_ZA.java
  9a4a0c04500b14406cfd767794118157  libjava/gnu/java/locale/LocaleInformation_ar_AE.java
*************** be703db896dd1d1842896a9a1984f7fe  libjav
*** 16995,17008 ****
  145c48c4616e569d5fbd3506585d01f2  libjava/gnu/java/locale/LocaleInformation_cs_CZ.java
  11c00f3ab2c04c009992a03c01d01d5c  libjava/gnu/java/locale/LocaleInformation_cy_GB.java
  5b7eb738593881f66e8e25db3b405800  libjava/gnu/java/locale/LocaleInformation_da_DK.java
! 43b27e331e9f35d78bee801cde5373b2  libjava/gnu/java/locale/LocaleInformation_de.java
  75d3eb961b09c221e19f7400c9fed56c  libjava/gnu/java/locale/LocaleInformation_de_AT.java
  9197fc87c2929b9ab10d6a688405cdc9  libjava/gnu/java/locale/LocaleInformation_de_BE.java
  9dec069876e578d3d1d52f91005dff93  libjava/gnu/java/locale/LocaleInformation_de_CH.java
  36102720a1136fd61dc1b1f25e02fcd0  libjava/gnu/java/locale/LocaleInformation_de_DE.java
  8309aff033eabf87bb0cec638d4b1d56  libjava/gnu/java/locale/LocaleInformation_de_LU.java
  a06bea8efc3c9a488ddc50a17b8df2ad  libjava/gnu/java/locale/LocaleInformation_el_GR.java
! a7c046f32d37982766b6475ae7825a29  libjava/gnu/java/locale/LocaleInformation_en.java
  d3c8ca5f9a4d6eee2a9cfa1f9295bb27  libjava/gnu/java/locale/LocaleInformation_en_AU.java
  0331cc5455cd6005a84075a0e22e3b32  libjava/gnu/java/locale/LocaleInformation_en_BW.java
  32d9a6e2fa322ac0a8e1d7c0330b021f  libjava/gnu/java/locale/LocaleInformation_en_CA.java
--- 20124,20137 ----
  145c48c4616e569d5fbd3506585d01f2  libjava/gnu/java/locale/LocaleInformation_cs_CZ.java
  11c00f3ab2c04c009992a03c01d01d5c  libjava/gnu/java/locale/LocaleInformation_cy_GB.java
  5b7eb738593881f66e8e25db3b405800  libjava/gnu/java/locale/LocaleInformation_da_DK.java
! 3a94e1812562691959729a03266dfd3d  libjava/gnu/java/locale/LocaleInformation_de.java
  75d3eb961b09c221e19f7400c9fed56c  libjava/gnu/java/locale/LocaleInformation_de_AT.java
  9197fc87c2929b9ab10d6a688405cdc9  libjava/gnu/java/locale/LocaleInformation_de_BE.java
  9dec069876e578d3d1d52f91005dff93  libjava/gnu/java/locale/LocaleInformation_de_CH.java
  36102720a1136fd61dc1b1f25e02fcd0  libjava/gnu/java/locale/LocaleInformation_de_DE.java
  8309aff033eabf87bb0cec638d4b1d56  libjava/gnu/java/locale/LocaleInformation_de_LU.java
  a06bea8efc3c9a488ddc50a17b8df2ad  libjava/gnu/java/locale/LocaleInformation_el_GR.java
! 568b1dbfc95b95a45487dff271b79356  libjava/gnu/java/locale/LocaleInformation_en.java
  d3c8ca5f9a4d6eee2a9cfa1f9295bb27  libjava/gnu/java/locale/LocaleInformation_en_AU.java
  0331cc5455cd6005a84075a0e22e3b32  libjava/gnu/java/locale/LocaleInformation_en_BW.java
  32d9a6e2fa322ac0a8e1d7c0330b021f  libjava/gnu/java/locale/LocaleInformation_en_CA.java
*************** de579db1d9e668916795c419600ec0f6  libjav
*** 17070,17076 ****
  d822e96b799a9d7745aa78411fa3ced6  libjava/gnu/java/locale/LocaleInformation_mk_MK.java
  00509f8ce54feb003d264730abeb8e85  libjava/gnu/java/locale/LocaleInformation_mr_IN.java
  11d559843748a0f3d916bfb53aaf96f3  libjava/gnu/java/locale/LocaleInformation_mt_MT.java
! 071e380fe662be3e881336403bce64c3  libjava/gnu/java/locale/LocaleInformation_nl.java
  6dec732b97669f0a4b652f38fd3f824f  libjava/gnu/java/locale/LocaleInformation_nl_BE.java
  2a931730842c2723d2189ce727eee89b  libjava/gnu/java/locale/LocaleInformation_nl_NL.java
  36ec8e89fb164584d1f332a2d93623c9  libjava/gnu/java/locale/LocaleInformation_nn_NO.java
--- 20199,20205 ----
  d822e96b799a9d7745aa78411fa3ced6  libjava/gnu/java/locale/LocaleInformation_mk_MK.java
  00509f8ce54feb003d264730abeb8e85  libjava/gnu/java/locale/LocaleInformation_mr_IN.java
  11d559843748a0f3d916bfb53aaf96f3  libjava/gnu/java/locale/LocaleInformation_mt_MT.java
! bad049f96cfc4d66d0cc4aa9ea25c6f2  libjava/gnu/java/locale/LocaleInformation_nl.java
  6dec732b97669f0a4b652f38fd3f824f  libjava/gnu/java/locale/LocaleInformation_nl_BE.java
  2a931730842c2723d2189ce727eee89b  libjava/gnu/java/locale/LocaleInformation_nl_NL.java
  36ec8e89fb164584d1f332a2d93623c9  libjava/gnu/java/locale/LocaleInformation_nn_NO.java
*************** ca2cdab1335a9da5ea252c99bcb82c27  libjav
*** 17103,17466 ****
  0012def1a98f4e282f974aa05509a264  libjava/gnu/java/locale/LocaleInformation_zh_HK.java
  f0d51620b28477a7563c8250f2e030dd  libjava/gnu/java/locale/LocaleInformation_zh_SG.java
  15bfd7e87fe279da7f5ebe24c05e3b6d  libjava/gnu/java/locale/LocaleInformation_zh_TW.java
! 865faa26e2963d14b029b044257887bc  libjava/gnu/java/math/MPN.java
  ea1bfc732a2571142fe2395b769bc020  libjava/gnu/java/net/HeaderFieldHelper.java
! cbc7e584a839f81f6ddd4d999010eb13  libjava/gnu/java/net/PlainDatagramSocketImpl.java
! 9c3f82425cc7172fff03d41d916be1cf  libjava/gnu/java/net/PlainSocketImpl.java
  cdeb788fc87f243a097084a0040fdd57  libjava/gnu/java/net/URLParseError.java
  d9b29b8294c58409235594201413dc95  libjava/gnu/java/net/natPlainDatagramSocketImplNoNet.cc
! d982e13f4d1b53c4ea69b61ed8374b59  libjava/gnu/java/net/natPlainDatagramSocketImplPosix.cc
! daf5057d4219af79ee11d6ec2a818b4f  libjava/gnu/java/net/natPlainDatagramSocketImplWin32.cc
  d6a9b780a28afc317d11ea27f94fc448  libjava/gnu/java/net/natPlainSocketImplNoNet.cc
! 17df543d301c9468c34dbfbdaa8d7c01  libjava/gnu/java/net/natPlainSocketImplPosix.cc
! 406f0a4b80eac64d8329e9a194fb2ebf  libjava/gnu/java/net/natPlainSocketImplWin32.cc
  92519bc3a52a1bdf0b42a788661a5bcd  libjava/gnu/java/net/protocol/core/Connection.java
  bdcb8e9d2d8a08f125de3168878c4a09  libjava/gnu/java/net/protocol/core/CoreInputStream.java
  2ee0a1c8055cc886c615bd80daa5f50b  libjava/gnu/java/net/protocol/core/Handler.java
  ec33c998e82a7d76787fca918c89c7b1  libjava/gnu/java/net/protocol/core/natCoreInputStream.cc
! 9dccd9c9503e17f1296bf8076e1dacb0  libjava/gnu/java/net/protocol/file/Connection.java
! cdf98742f297ce39801fd8176d6f8bab  libjava/gnu/java/net/protocol/file/Handler.java
! 9398b53c48c61f6ccf46a00997aeda81  libjava/gnu/java/net/protocol/gcjlib/Connection.java
  487eb8cedecccc92088e0314ede6839e  libjava/gnu/java/net/protocol/gcjlib/Handler.java
! fdf05f8a0e00dbd132dd32f79ed38d8d  libjava/gnu/java/net/protocol/http/Connection.java
! 3b529707855ae8a76329190cfad65aa1  libjava/gnu/java/net/protocol/http/Handler.java
! 814b55da7feb313f9ebe446aeab28389  libjava/gnu/java/net/protocol/jar/Connection.java
! 32d89f4e6380ec2d743c7d4f18f11b1a  libjava/gnu/java/net/protocol/jar/Handler.java
  9902e0768ead73f666ae91fc2a270c33  libjava/gnu/java/nio/ChannelInputStream.java
  82566c9b04c39f61d57d34823c73f03f  libjava/gnu/java/nio/ChannelOutputStream.java
! 33b74ea4da189ab16c4ff06ae8941bda  libjava/gnu/java/nio/DatagramChannelImpl.java
  d14cc960f6378b6cb59d372afcae5f5c  libjava/gnu/java/nio/DatagramChannelSelectionKey.java
! 376972e5000c089634a14cb33b988881  libjava/gnu/java/nio/FileLockImpl.java
  71489da981303e357057477514ece231  libjava/gnu/java/nio/InputStreamChannel.java
  f142c6608a074887967f7da1b74ef8a1  libjava/gnu/java/nio/NIOConstants.java
! 46282a2eb4fddad8f7663a3873ec40c3  libjava/gnu/java/nio/NIODatagramSocket.java
! d6942b23ee5bdc6e59e7d757ef0078c1  libjava/gnu/java/nio/NIOServerSocket.java
  587d1bb7c7794236067e2ccdbd6686a3  libjava/gnu/java/nio/NIOSocket.java
  bb328de7ee7e7e77b6cb89a88773c0a6  libjava/gnu/java/nio/OutputStreamChannel.java
! da42c56c48aa53be9abe54ad635074d5  libjava/gnu/java/nio/PipeImpl.java
  1fc00d32d315bf50f725f926034877bf  libjava/gnu/java/nio/SelectionKeyImpl.java
! 92dc70f4186e288a5a548adecd6fc09a  libjava/gnu/java/nio/SelectorImpl.java
  9b5f02ed17294f9e054f638baf06ad5a  libjava/gnu/java/nio/SelectorProviderImpl.java
! 7530bd8cd1965d286ebe0ef9bc8d5725  libjava/gnu/java/nio/ServerSocketChannelImpl.java
  c14b3efaf490ed5648a9d99d9d9a13b3  libjava/gnu/java/nio/ServerSocketChannelSelectionKey.java
! 9d4c6c26b5d6fe2001b88c4f80cb8a65  libjava/gnu/java/nio/SocketChannelImpl.java
  934d549145f58b862ee33b978e0ae1ec  libjava/gnu/java/nio/SocketChannelSelectionKey.java
! 014897a766c67a7414e7411760e8b67e  libjava/gnu/java/nio/charset/ISO_8859_1.java
! e10de10ca794a2599a475c47f50de99a  libjava/gnu/java/nio/charset/Provider.java
! c2c25337fc8049ae2b90e759897d62ca  libjava/gnu/java/nio/charset/US_ASCII.java
! 57787c0bd51493f3a38def3ebb5f0517  libjava/gnu/java/nio/charset/UTF_16.java
! fdf71e28c99d094e76cdde8f20bda0c9  libjava/gnu/java/nio/charset/UTF_16BE.java
! 4f843cc9d4a01be956dde4b84e31e2c6  libjava/gnu/java/nio/charset/UTF_16Decoder.java
! 435f722da2b5064bac4768f9de295f8c  libjava/gnu/java/nio/charset/UTF_16Encoder.java
! c08d4fec632b5172451a569e5a210835  libjava/gnu/java/nio/charset/UTF_16LE.java
! d59172e31e562ac1ae129483008c2614  libjava/gnu/java/nio/charset/UTF_8.java
! 6ed5360c519e08852d0e462effcfa665  libjava/gnu/java/nio/natFileLockImpl.cc
  8ebe6d880112167c99859a7c303a61eb  libjava/gnu/java/nio/natNIOServerSocket.cc
! bbacd151681ea36fffda7a4def390343  libjava/gnu/java/nio/natPipeImplEcos.cc
! 2767413e16731277d281279b4707f765  libjava/gnu/java/nio/natPipeImplPosix.cc
! 4b259955ba1896ca4c57c65fc22ae692  libjava/gnu/java/nio/natPipeImplWin32.cc
! 55055f7afbcba4c6291f0b7e9852dfed  libjava/gnu/java/nio/natSelectorImplEcos.cc
! 1674b05f2e3140967cdc66908cce2560  libjava/gnu/java/nio/natSelectorImplPosix.cc
! de9b899e61e58dc5dd79c7d079511a4c  libjava/gnu/java/nio/natSelectorImplWin32.cc
  54a20404a608b75508eb26e140887ba8  libjava/gnu/java/rmi/RMIMarshalledObjectInputStream.java
! 9394f50374bcb373f382e5ac210e1c8f  libjava/gnu/java/rmi/RMIMarshalledObjectOutputStream.java
! 1a57077910b55e2af6f346090fe8e88e  libjava/gnu/java/rmi/dgc/DGCImpl.java
  d350729b3ceafb007c5e23e0d6a8a0ea  libjava/gnu/java/rmi/dgc/DGCImpl_Skel.java
  73f70304df6f9a419764879abab75850  libjava/gnu/java/rmi/dgc/DGCImpl_Stub.java
! 4029ef39179cb5e50e9d1e2b06de9bbb  libjava/gnu/java/rmi/registry/RegistryImpl.java
  0d91e9d1a595c6286757f57b79157744  libjava/gnu/java/rmi/registry/RegistryImpl_Skel.java
  74de1c6fadfa12851a18308fea8a6e6b  libjava/gnu/java/rmi/registry/RegistryImpl_Stub.java
  f48281b0f85c2ede81e65dc7ebaaef21  libjava/gnu/java/rmi/rmic/Compile_gcj.java
  b3e4317c8a32eebab73151c1ad3e7326  libjava/gnu/java/rmi/rmic/Compile_jikes.java
  8c26332b9aa24207f530d62cb705a8c6  libjava/gnu/java/rmi/rmic/Compile_kjc.java
  c6169e8c0eb27f74c7bd255207924b9d  libjava/gnu/java/rmi/rmic/Compiler.java
! 8a9acc7c7b15668752d7235388a4f66b  libjava/gnu/java/rmi/rmic/CompilerProcess.java
! 4598382cffb0c8a77a9a71a0e7fdf752  libjava/gnu/java/rmi/rmic/RMIC.java
  4baef9a7fe8802fac574a40e18d9e8a6  libjava/gnu/java/rmi/rmic/RMICException.java
  2e203413417b3cd374ac3be969dc6a9a  libjava/gnu/java/rmi/rmic/TabbedWriter.java
! 042947b5a971f42a00162bd5e26a12cf  libjava/gnu/java/rmi/server/ConnectionRunnerPool.java
  ca84547adb6bafcc0f273fa690010bde  libjava/gnu/java/rmi/server/ProtocolConstants.java
  89371d0cc1fd5ac42aa344f535cb265b  libjava/gnu/java/rmi/server/RMIDefaultSocketFactory.java
! f461c028dc23706c354c184e9813ae6c  libjava/gnu/java/rmi/server/RMIHashes.java
! a26ba779fb595a4fcfbc1e4d904dd05f  libjava/gnu/java/rmi/server/RMIObjectInputStream.java
! 829bdff636b2365455d6d478b37542d2  libjava/gnu/java/rmi/server/RMIObjectOutputStream.java
  040711dc5629c54784de155a94c68b17  libjava/gnu/java/rmi/server/RMIVoidValue.java
! 27bd81f9b623e1efd76ca7612e1308bf  libjava/gnu/java/rmi/server/UnicastConnection.java
! 23ffa8ef5a8bd97436aa44c6fb208608  libjava/gnu/java/rmi/server/UnicastConnectionManager.java
! 6708f9a99a566f688e74112b8b3909d2  libjava/gnu/java/rmi/server/UnicastRef.java
! ab790ce1def31f109da7f467bb4b6a4d  libjava/gnu/java/rmi/server/UnicastRemoteCall.java
  9aa322eecb08aeb7589a6a8a3d19aeb0  libjava/gnu/java/rmi/server/UnicastRemoteStub.java
! 79b97bdfda55801195738051a92b0aac  libjava/gnu/java/rmi/server/UnicastServer.java
! 6979cbaae5de09305f8c88e169cb5a60  libjava/gnu/java/rmi/server/UnicastServerRef.java
  235e5f0f6d8cfea84996d15865191946  libjava/gnu/java/security/Engine.java
! 772169dd437d7dbfee29f1184e64bde8  libjava/gnu/java/security/OID.java
! c4a353025174d46ad7f3f34e2fee8a81  libjava/gnu/java/security/der/BitString.java
! a68e64c67cb371bb66dca746aab551ff  libjava/gnu/java/security/der/DER.java
! 12885fb45fd80dce63027d9b651b736f  libjava/gnu/java/security/der/DEREncodingException.java
! a3e3e7b7a16f4ecea00bd112065d689f  libjava/gnu/java/security/der/DERReader.java
! 1005a4432b7ba143d213b93c5505b42f  libjava/gnu/java/security/der/DERValue.java
! 12a192c22d1747216b96cdd7301405f6  libjava/gnu/java/security/der/DERWriter.java
  a2afb2b9a7752ac125ecd918733ce96c  libjava/gnu/java/security/provider/DSAKeyFactory.java
! 888f7d3c65bbc72a621aeffa3bef5e31  libjava/gnu/java/security/provider/DSAKeyPairGenerator.java
  604af68135f3e548265437503782673a  libjava/gnu/java/security/provider/DSAParameterGenerator.java
! dcb91023c0620e519037b2bca1c8fe21  libjava/gnu/java/security/provider/DSAParameters.java
! 833316e88ff95f41352eeb6eb9f2a7b2  libjava/gnu/java/security/provider/DSASignature.java
  fedaf2fd9858a0a59b935900ddb1d6c2  libjava/gnu/java/security/provider/DefaultPolicy.java
! a76b0d57b91d65dbc726579157cda528  libjava/gnu/java/security/provider/Gnu.java
! 2bb4b00cfc982932d85589623df6b917  libjava/gnu/java/security/provider/GnuDSAPrivateKey.java
! ee2a9138b89722cd7e1d44a21811f3a9  libjava/gnu/java/security/provider/GnuDSAPublicKey.java
  17644b0cfd428438a89e1362729f937e  libjava/gnu/java/security/provider/MD5.java
  8e80f5081fb992a57e59fa831703663b  libjava/gnu/java/security/provider/SHA.java
  261dfb90dae98a5b6077b6cb46a85e55  libjava/gnu/java/security/provider/SHA1PRNG.java
! 7cea60d37d94261e7afadbfe9b04ebc7  libjava/gnu/java/security/provider/X509CertificateFactory.java
! e51b30f7b3306cf9557d81700278a0f5  libjava/gnu/java/security/util/Prime.java
! e500d8a72d8a41f178ef4e068094a64e  libjava/gnu/java/security/x509/X500DistinguishedName.java
! 465c44e753c330dae8f74a9fcaa935de  libjava/gnu/java/security/x509/X509CRL.java
! d9cb96eda42220fd24eba555e73c2972  libjava/gnu/java/security/x509/X509CRLEntry.java
! dc7ae1f23c0a2daa479eb26b44206928  libjava/gnu/java/security/x509/X509Certificate.java
! 32ae05be9f91955f56ed49e61a426678  libjava/gnu/java/text/BaseBreakIterator.java
! d11092b8769f7772deda7e9ab5368981  libjava/gnu/java/text/CharacterBreakIterator.java
! 92485e9013e23005bb73ecf243e097a0  libjava/gnu/java/text/LineBreakIterator.java
! fbe417cdde6baf149ef935a400000983  libjava/gnu/java/text/SentenceBreakIterator.java
! 892781d09060fcbb67c5c96da5f492c7  libjava/gnu/java/text/WordBreakIterator.java
! 0a0857a2785865810b41b54d114c4042  libjava/gnu/java/util/DoubleEnumeration.java
  721595961c8fe60e28d911437959c3fa  libjava/gnu/java/util/EmptyEnumeration.java
  dc1c01c9fdd403494ce2d9ace702a179  libjava/gnu/java/util/prefs/FileBasedFactory.java
  bdc23177bcba14ee82ad774173488e38  libjava/gnu/java/util/prefs/MemoryBasedFactory.java
  cc84c351e8c9480a67b2f4c2215528d1  libjava/gnu/java/util/prefs/MemoryBasedPreferences.java
! 06cd87ddf927cd7f187c74197ed017ba  libjava/gnu/java/util/prefs/NodeReader.java
  17898f1aeb8f9c200a561d2e69ccf475  libjava/gnu/java/util/prefs/NodeWriter.java
! 828a3893a1865c7f3ff94e407d0ea7b6  libjava/gnu/javax/rmi/CORBA/DelegateFactory.java
! 0a42b2d8898c848e182afd58d0e91e70  libjava/gnu/javax/rmi/CORBA/GetDelegateInstanceException.java
! 2bab006ade9f57e10e637a900ba15cfd  libjava/gnu/javax/rmi/CORBA/PortableRemoteObjectDelegateImpl.java
! 24913b9880ea3c97accb26fab155f95b  libjava/gnu/javax/rmi/CORBA/StubDelegateImpl.java
! 277f96936623b2ccff9a019802e892b5  libjava/gnu/javax/rmi/CORBA/UtilDelegateImpl.java
! c9595c349de0b329134fe8320e4d5572  libjava/gnu/javax/rmi/CORBA/ValueHandlerImpl.java
! 9765c227a8d6f08dfbb0a292f35ef757  libjava/gnu/javax/rmi/PortableServer.java
! a99a69d2c6f62ad1b7edd19bc2e7f23c  libjava/gtk-2.0.m4
  7bd3b9ae8c6fa245e8d11b8d9c7accc4  libjava/include/.cvsignore
! f2dd04bbe0d75bc2fdd77317436fef0c  libjava/include/Makefile.am
! 55ba234be89316ed14af4d2652b3faf4  libjava/include/Makefile.in
! 628a34e557587c13fa240204def53b3a  libjava/include/boehm-gc.h
! 9c2857cec30faf06b9080b434724d5a1  libjava/include/config.h.in
! 8c8c5df23d28473384f39f5bdbc977c4  libjava/include/default-signal.h
  61a8f68287be880d78be5f3a87955a5b  libjava/include/dwarf2-signal.h
! 8c162b0dd302a345b5cea1edf353d388  libjava/include/i386-signal.h
  236d1671f79ab5d9e6b987e93d051bc4  libjava/include/java-assert.h
  d66bf0f1a1d12efd11fc047959c52eab  libjava/include/java-chardecomp.h
! e4115f787d75f2549ba779adc300e3f6  libjava/include/java-chartables.h
  b88c9d141cd0ae62903ccbb3dc5a9e8d  libjava/include/java-cpool.h
  b08fcab1147c4c0f06f4b3054856c91b  libjava/include/java-insns.h
! 97a1ff0fe328534ef172a039a2bfe87b  libjava/include/java-interp.h
! 90e6e4cc5ae055f3fb5294ceeb43843d  libjava/include/java-props.h
! 7c210ae90de56fe0722979f1d1cc070a  libjava/include/jni.h
! 0086fba6656bc8a32b180b13895ec2a4  libjava/include/jvm.h
  55ed6e8ea2ae96155602547fcfe5d96c  libjava/include/jvmpi.h
! 552416539517a6c0b97941224c221d76  libjava/include/mips-signal.h
  6cb1b655ac757a3e299eb50f5dbee908  libjava/include/no-gc.h
! 33a6c7e495ffe1c0b2b1dc97aa3aec87  libjava/include/no-threads.h
! 3e8fb2273fbb9923e1d2486e937593b1  libjava/include/posix-threads.h
  1f5cd39df961d644ef7e0c8536b88621  libjava/include/posix.h
  b315ac636a1fe99a9bd26e3e806cd134  libjava/include/powerpc-signal.h
! 0bc6485effd217b8de7c60337eb68dd9  libjava/include/s390-signal.h
! 2a91ba522fa4a91091089789f2351b13  libjava/include/sparc-signal.h
  1ded054093de910d9786c62bc4fe8cc6  libjava/include/stamp-h.in
  fcc68eea0e37ca05d241fcd08098f4d2  libjava/include/win32-signal.h
! d6b2dd82840ca2a4f0870e6365912fc0  libjava/include/win32-threads.h
! e61335be4593ef34cde1cc7a1cbc9578  libjava/include/win32.h
! c8bd449be56283f45c7c061fd359350a  libjava/include/x86_64-signal.h
! 5421d7c0de2cf4234e1d499a648a6fdd  libjava/interpret.cc
! ff670eab3826f3b977ff73c33211adef  libjava/java/applet/Applet.java
! 0f8c69563a1baae9b98146a2bbb98c2f  libjava/java/applet/AppletContext.java
! 40a4ee963ee0c422d0d38fc5039212ba  libjava/java/applet/AppletStub.java
! 75b2a979a9a42136276be461549014a2  libjava/java/applet/AudioClip.java
! 6ee0924b53e0b3c0bab0503d77373062  libjava/java/awt/AWTError.java
! 6c1ee40096a28a1d72b4693c455d8268  libjava/java/awt/AWTEvent.java
! 8e2b3a6059742720c1a13e318ec4e8f9  libjava/java/awt/AWTEventMulticaster.java
! 62de5aeb5f67526a3312fa3f7b0d4c25  libjava/java/awt/AWTException.java
! 82a65e849b2a4e79be46bf863792d75f  libjava/java/awt/AWTKeyStroke.java
! 254d682aa6769cce7da0713390740f4d  libjava/java/awt/AWTPermission.java
! a930dd806c94861300931a10482dee87  libjava/java/awt/ActiveEvent.java
! 45737186a192f0cdc016509433bde298  libjava/java/awt/Adjustable.java
! 6043bbd1b222e9ec6e1af37398bc4dce  libjava/java/awt/AlphaComposite.java
! b5ea15281af4eefea9e4f993de5388b1  libjava/java/awt/AttributeValue.java
! 3e4fd0a99e63ffbf26ee7b9f96e22ec2  libjava/java/awt/BasicStroke.java
! 0373dbe0c5e2a3c380de32d13fa011a7  libjava/java/awt/BorderLayout.java
! b16f1ac05b9513b1504f2ad809ed0602  libjava/java/awt/BufferCapabilities.java
! c4f43411c4a4515b85d9b3919fdeaca8  libjava/java/awt/Button.java
! 0017455c5fde87b76383206118175c43  libjava/java/awt/Canvas.java
! 1470778752ae12c33f9959731303b7ff  libjava/java/awt/CardLayout.java
! 2244c0cbc91e6542adc50566cfe58ca2  libjava/java/awt/Checkbox.java
! f5d3bf48624d960b32a3671f0dcd33c0  libjava/java/awt/CheckboxGroup.java
! 0c9eb172f8617eedc7a66ea3e890a7aa  libjava/java/awt/CheckboxMenuItem.java
! 561ba39319a81b27aa53dbb1a24a318a  libjava/java/awt/Choice.java
! 745328cd582baeedc42c6cfbb911385f  libjava/java/awt/Color.java
! 13afc217402ce1e81e24a5e222625174  libjava/java/awt/ColorPaintContext.java
! c45a3df7b6cafa23c4e3f1f733652074  libjava/java/awt/Component.java
! 60e2d820462e7dc690cc4fc39784203e  libjava/java/awt/ComponentOrientation.java
! 12a4d6759a0939ba2108fe7e50a8b471  libjava/java/awt/Composite.java
! eb002a412afc9ed1c9c604fd85b5a598  libjava/java/awt/CompositeContext.java
! a583be387fbb39da5682cbdaa0e0046b  libjava/java/awt/Container.java
! bc981d776b56ee92404fdb7353eb8995  libjava/java/awt/ContainerOrderFocusTraversalPolicy.java
  9921223b0d3ca57355f12f5b66fd05f2  libjava/java/awt/Cursor.java
! 0a9f8807d7288dc9d9a80e9a4823d579  libjava/java/awt/DefaultFocusTraversalPolicy.java
! 0d3e1a502ae25ac25ee6bcef97ee4909  libjava/java/awt/DefaultKeyboardFocusManager.java
! 5562b0cf2b6c86c18b2a8c056e070781  libjava/java/awt/Dialog.java
! e32e49fada4a718dfd9b1380af585fe0  libjava/java/awt/Dimension.java
! 9d70a1b1abad308dfb13e1b0f4390d69  libjava/java/awt/DisplayMode.java
! 39625e000faa70ff49e44988eb61ea50  libjava/java/awt/Event.java
! 75974c78e265882d7494b419212fffd9  libjava/java/awt/EventDispatchThread.java
! 228234a70fb901ca08516ea45962ddde  libjava/java/awt/EventQueue.java
! 9945779a317aebaace763c82ad37dca7  libjava/java/awt/FileDialog.java
! 9833754ed448b9f3b0955536a2d80544  libjava/java/awt/FlowLayout.java
  fc4c9cfcd95caab1e2a9ea5219217bfd  libjava/java/awt/FocusTraversalPolicy.java
! e2d06e8ce82ff419570875bc5104bcb0  libjava/java/awt/Font.java
! 076cb03c60825e8bf32518232fb98451  libjava/java/awt/FontFormatException.java
! adee40ac8ad317a2a2ffc86343ade90a  libjava/java/awt/FontMetrics.java
! d587dac9be71988662de24ae6bdd7a5c  libjava/java/awt/Frame.java
  20c194b521c972fd9476d8069cfbe340  libjava/java/awt/GradientPaint.java
! b776f45a405225bc3d85bd8ca26a13bf  libjava/java/awt/Graphics.java
! d0c77bab2b80fbe78cd935cec2046f07  libjava/java/awt/Graphics2D.java
! 5b527174e4ad726a5a03d7d57d0574d4  libjava/java/awt/GraphicsConfigTemplate.java
! 7db87fdf4980ed87e48b21ee96223c16  libjava/java/awt/GraphicsConfiguration.java
! ac0496dd0b9f40eec4e501f2bd3fab37  libjava/java/awt/GraphicsDevice.java
! 50756b5184198350860cc8925abbbdde  libjava/java/awt/GraphicsEnvironment.java
! d9f6dc8f4e535e922a2f36ccdf468280  libjava/java/awt/GridBagConstraints.java
! ca6248a787d9f301a7c82975c025395d  libjava/java/awt/GridBagLayout.java
! 3dd60e814a4dc70fb8c4060450653521  libjava/java/awt/GridBagLayoutInfo.java
! 779dc095ae3427daed1e4007d3628739  libjava/java/awt/GridLayout.java
! dee6dba4e8000829320bf9dd54e775c8  libjava/java/awt/HeadlessException.java
! 725a4b0a97a0484e9a20f81f302a8e99  libjava/java/awt/IllegalComponentStateException.java
! 47d3353c707ab2fdb8bdfff814fb7aae  libjava/java/awt/Image.java
  15af9c6c55f2c84d964b5df54010be3c  libjava/java/awt/ImageCapabilities.java
! cbb9404e105819a1d97e278f63fffa40  libjava/java/awt/Insets.java
! 6866ed524cf8130e4cb6b08d6e7b81da  libjava/java/awt/ItemSelectable.java
! aeeb79c427d052f1861b235128979ea8  libjava/java/awt/JobAttributes.java
! fe811e48f517b6bf091fbf29d10a0f31  libjava/java/awt/KeyEventDispatcher.java
! 9f0126947f68ac40bfba31a7fca7eaae  libjava/java/awt/KeyEventPostProcessor.java
! 22f8baf4ad7e01fa7fcfa9aa20f16588  libjava/java/awt/KeyboardFocusManager.java
! c0bf8693804c00596904d9fe9fce8756  libjava/java/awt/Label.java
! 4ba02e30e52c8fcdb20e50d8588e6993  libjava/java/awt/LayoutManager.java
! 534a718bf9fdab006c9800191b6c3cbd  libjava/java/awt/LayoutManager2.java
! a6f696a3e81371271d900c143dae6261  libjava/java/awt/List.java
! cbe6d0ab316f92f07cdd06832363bfd7  libjava/java/awt/MediaTracker.java
! 7b558af0ac6c4901b4681a07df53f278  libjava/java/awt/Menu.java
! 3cc820eaa8b9db1dbbd75f3985abfeb6  libjava/java/awt/MenuBar.java
! de4cc6fe0f08625420bada59a0e8ed9a  libjava/java/awt/MenuComponent.java
! 80f711069a6074db55a7a58a933178dc  libjava/java/awt/MenuContainer.java
! 8a9ed2e53d65fb2ce1fbe414a5873623  libjava/java/awt/MenuItem.java
  a096b412140e318860b192dc09f8379f  libjava/java/awt/MenuShortcut.java
! b005114a1e1e55e0c6076257029dde8f  libjava/java/awt/PageAttributes.java
! d03e1437d5d35f991810cce0ed3544ef  libjava/java/awt/Paint.java
! 36619ad805e067b40cb29051c8d11f46  libjava/java/awt/PaintContext.java
! 485143ecd0f827bfb7a7bd1087e0fb48  libjava/java/awt/Panel.java
! ef6a975b3e36ff456213a114596ac78f  libjava/java/awt/Point.java
! 481eaac50bd2600ae127ee3eb8d47b4e  libjava/java/awt/Polygon.java
! 9b25a557d1255f6ad617859d558080ac  libjava/java/awt/PopupMenu.java
! 4f55b641d320729588502c418983062c  libjava/java/awt/PrintGraphics.java
! b0c887d602b8dab98b68bba376746474  libjava/java/awt/PrintJob.java
! 03837b370651e97a17b0f1ec71762bf0  libjava/java/awt/Rectangle.java
! b5d31d0cce876cec838e240c3b45d2a2  libjava/java/awt/RenderingHints.java
! 98f77533372bb629dac8e738863d0f41  libjava/java/awt/Robot.java
! 80ed0559c78f6290836ef4aa409a0a41  libjava/java/awt/ScrollPane.java
  ce5d82ec33ea2ee47266ccea870e228e  libjava/java/awt/ScrollPaneAdjustable.java
! ba4a533e68380830ea71bb446c958b1e  libjava/java/awt/Scrollbar.java
! 35958b84cefdf80e6db3df462b5ac91d  libjava/java/awt/Shape.java
! ecaa45d9b3d975dbe22c050c4be47dab  libjava/java/awt/Stroke.java
! 0be59349cbbf5b68221665a5ed3dc343  libjava/java/awt/SystemColor.java
! 90c5df9b75bc825a22ffaac1aa71b775  libjava/java/awt/TextArea.java
! affa669f6664b0825bc871123fb0b13e  libjava/java/awt/TextComponent.java
! ac7a63049017f9ff8c5e3e408476dcfc  libjava/java/awt/TextField.java
  19dfd7a19117344b4842c84fe44f887f  libjava/java/awt/TexturePaint.java
! 5910516441382b202a6a24e4fbe854d6  libjava/java/awt/Toolkit.java
! 5cca8d2cf3fab64f7d6a0d6da84aa79a  libjava/java/awt/Transparency.java
! c404c22e2a4f5b0c751d7b6352272fc0  libjava/java/awt/Window.java
! 18486073e9ff0e1ba0f1ffce17646d46  libjava/java/awt/color/CMMException.java
! 5eb344bd1b86a55af81ac3156fcb5352  libjava/java/awt/color/ColorSpace.java
! 9ecf394b4fa2f67239f19efcd310d771  libjava/java/awt/color/ICC_ColorSpace.java
! c0753a4860325a04c2fe420f17ba1aea  libjava/java/awt/color/ICC_Profile.java
! 8878b92fbac8df924bb4d869e7b3cbe3  libjava/java/awt/color/ICC_ProfileGray.java
! 04d1aa44bee0c310260c38cddfed138f  libjava/java/awt/color/ICC_ProfileRGB.java
! a3e319541c3ff2da922ca01a9679e04a  libjava/java/awt/color/ProfileDataException.java
! 2712277a2d39b084e3ed18e98a9a4b5b  libjava/java/awt/datatransfer/Clipboard.java
! 8ebcfd7de71531585d803f401b6d8624  libjava/java/awt/datatransfer/ClipboardOwner.java
! dfedf1aba7d8f9db9cb5369407bbb680  libjava/java/awt/datatransfer/DataFlavor.java
  e3b9255510e608e09fe7419c9d08eec2  libjava/java/awt/datatransfer/FlavorMap.java
! 1029446f2762613e646b5e3360f83b9a  libjava/java/awt/datatransfer/FlavorTable.java
! 9205b18f31ec16c9a7e61e31044f99e2  libjava/java/awt/datatransfer/MimeTypeParseException.java
! b6e9611876f0a2af00a47ec0520a9551  libjava/java/awt/datatransfer/StringSelection.java
! 92bf789d4fe97eb4109d2617f91a478b  libjava/java/awt/datatransfer/SystemFlavorMap.java
! 00a432919a9dcdb4f86fc2d07d9f726a  libjava/java/awt/datatransfer/Transferable.java
! 07553e0a1856c3cbc45012c1edc8866a  libjava/java/awt/datatransfer/UnsupportedFlavorException.java
! 7b1f487897dcee241d20ce8fc398e862  libjava/java/awt/dnd/Autoscroll.java
! 0abf0ff64a81b834a434979cbc861888  libjava/java/awt/dnd/DnDConstants.java
  e933b46a4fdc1c72bc94f3a577a639c0  libjava/java/awt/dnd/DnDEventMulticaster.java
  cdc10e974325532d60321aef0eaaa47e  libjava/java/awt/dnd/DragGestureEvent.java
! fa1463758700d5bfe19ed3f59e0482cc  libjava/java/awt/dnd/DragGestureListener.java
  164bea8021b1ae791514c3dba05f290d  libjava/java/awt/dnd/DragGestureRecognizer.java
  9aa7da2405c599d3d5bce67645e59d8f  libjava/java/awt/dnd/DragSource.java
! 92be523caf9c659728df8f7e412ac77d  libjava/java/awt/dnd/DragSourceAdapter.java
  3fadd964f6006cb8c54790248ff9d5a2  libjava/java/awt/dnd/DragSourceContext.java
  7461af1d7af473250fd966cce260d2fd  libjava/java/awt/dnd/DragSourceDragEvent.java
! d0742c0e2ad424884cfbdd14e29d1f7f  libjava/java/awt/dnd/DragSourceDropEvent.java
  0facb142f57be08d9db4b41db291d509  libjava/java/awt/dnd/DragSourceEvent.java
! 419789aee499eab9f3291bc67b1efa00  libjava/java/awt/dnd/DragSourceListener.java
! 441c82729538329138cf74d92f915061  libjava/java/awt/dnd/DragSourceMotionListener.java
! 0cffd1baec5895cd4a7293727803356a  libjava/java/awt/dnd/DropTarget.java
! e2ecaa4664c0e5b7e06683e77087ba9e  libjava/java/awt/dnd/DropTargetAdapter.java
! 3e06722033856343aae8f4f81363b7ef  libjava/java/awt/dnd/DropTargetContext.java
! 02ffc922861fb8946ed6f5b75e2e932f  libjava/java/awt/dnd/DropTargetDragEvent.java
  af5571db15c6d7b423c7392d3f44c06c  libjava/java/awt/dnd/DropTargetDropEvent.java
  0927c1140cfc62aeac151505f200658a  libjava/java/awt/dnd/DropTargetEvent.java
! fb123ad0dc13c767c433691de11f9436  libjava/java/awt/dnd/DropTargetListener.java
! 28d08110bfcddbfc60cb3b06aeeb2285  libjava/java/awt/dnd/InvalidDnDOperationException.java
! 7a4417a4c2e655ace2486eb6dd1da9fb  libjava/java/awt/dnd/MouseDragGestureRecognizer.java
  e1056b77c980694886385da139d0cfd4  libjava/java/awt/dnd/peer/DragSourceContextPeer.java
! 322b14b3680d53940a27ec1a1492bce2  libjava/java/awt/dnd/peer/DropTargetContextPeer.java
  8e7e7d869374e9e5b75c29858ab374cc  libjava/java/awt/dnd/peer/DropTargetPeer.java
! 6d2f7c10b8b5f59cc1d7e4219bfa6c97  libjava/java/awt/event/AWTEventListener.java
! d84c9d024c92520cc6beac3df5ced2f2  libjava/java/awt/event/AWTEventListenerProxy.java
! ac0299c71b3c07d3e0029123c288beb8  libjava/java/awt/event/ActionEvent.java
! 900a3eb8972d4703b6926afed3e346c3  libjava/java/awt/event/ActionListener.java
! 6340bbd0fd0265901d0e7a6f262a1cac  libjava/java/awt/event/AdjustmentEvent.java
! 113cde22f58a822146c7a0a91ac25760  libjava/java/awt/event/AdjustmentListener.java
! 7e67b5a335e4b30d4048b18923c0f674  libjava/java/awt/event/ComponentAdapter.java
! 87ba2ea6819e968430c7941563056a5f  libjava/java/awt/event/ComponentEvent.java
! 629b582f00f8c71bc13fd93b7697cf8d  libjava/java/awt/event/ComponentListener.java
! bf6998b1c6d5cbb069e541e48e77b004  libjava/java/awt/event/ContainerAdapter.java
! d42341193091c48e608dce7de70efbd1  libjava/java/awt/event/ContainerEvent.java
! 0f3b4491143899ed5b9fe9a388cda560  libjava/java/awt/event/ContainerListener.java
! 0bb4925f37ab8a5af37368071ec6c404  libjava/java/awt/event/FocusAdapter.java
! 44cdf884e078313eec116443db60906a  libjava/java/awt/event/FocusEvent.java
! 76e3889421cf6b3692563503076108e1  libjava/java/awt/event/FocusListener.java
! c6545cbc20377078626615b1f1ff49a2  libjava/java/awt/event/HierarchyBoundsAdapter.java
  39311ef84a4335f8d2c2cf7c269e5532  libjava/java/awt/event/HierarchyBoundsListener.java
  ad23d63fc92c24bf8cf64fbccde3a6e7  libjava/java/awt/event/HierarchyEvent.java
  f37a178560d5582315acb39cb03829e6  libjava/java/awt/event/HierarchyListener.java
! b2181cd2eb309bac717d685614cd119c  libjava/java/awt/event/InputEvent.java
! dccf9dfb9b7c538d844f284cf7e01f11  libjava/java/awt/event/InputMethodEvent.java
! 7b5113fa9a8212949912a5935669ada4  libjava/java/awt/event/InputMethodListener.java
! 4978ed01e997756cbd12e08b9ac84413  libjava/java/awt/event/InvocationEvent.java
! d6ebde9e5c61bdad1cdc113b7f97f92b  libjava/java/awt/event/ItemEvent.java
! 74f772dff65f24182377b57c083f7947  libjava/java/awt/event/ItemListener.java
! 94b2ecaf8c7eb43576d2f7db24b3ef44  libjava/java/awt/event/KeyAdapter.java
! aab7a8de13dd228bbf0eb05b4f09a448  libjava/java/awt/event/KeyEvent.java
! 987139d36c18556420cf8d22e47352a8  libjava/java/awt/event/KeyListener.java
! a94f1eddfd4fc23248a01e20a1453e24  libjava/java/awt/event/MouseAdapter.java
! 8df8df94c3feaebb0e7a6f3fa4caf33b  libjava/java/awt/event/MouseEvent.java
! ca3939ea635c70e9ee319e79977f4493  libjava/java/awt/event/MouseListener.java
! f1eddb227f5956e1f2d9c31edca9247a  libjava/java/awt/event/MouseMotionAdapter.java
! 8516a8d470aea13f0460606cb9e37e03  libjava/java/awt/event/MouseMotionListener.java
! 092c7ecd78463a60326f8d49e6401e7e  libjava/java/awt/event/MouseWheelEvent.java
! d954b0bbe3e85ecffe8f007c3d9da3d5  libjava/java/awt/event/MouseWheelListener.java
! 3aeb7239dd3293d10286f027ba897c62  libjava/java/awt/event/PaintEvent.java
! b8e79a3858e1439bd8a36abfde3bbd8a  libjava/java/awt/event/TextEvent.java
! a815a8759b25b616fb00abe024c20b54  libjava/java/awt/event/TextListener.java
! a01397bf4437d33c65d4122fe4d89679  libjava/java/awt/event/WindowAdapter.java
! 18199b292b8c68b10a320c31262ebcb3  libjava/java/awt/event/WindowEvent.java
! 56de8df82b85d24650e34d943b8235b2  libjava/java/awt/event/WindowFocusListener.java
! 0f4f83f0dd38012cb9ac1218b9d6b0b2  libjava/java/awt/event/WindowListener.java
! 45263ab3f3589ee52fe173b5c21aa354  libjava/java/awt/event/WindowStateListener.java
  cf1a5c4ec599f6c0ffc3354539299335  libjava/java/awt/font/FontRenderContext.java
  369eb93c6bc665e100251589b3e5c4c4  libjava/java/awt/font/GlyphJustificationInfo.java
  d82ca7e0f444828e67a5642a21484fbd  libjava/java/awt/font/GlyphMetrics.java
--- 20232,20899 ----
  0012def1a98f4e282f974aa05509a264  libjava/gnu/java/locale/LocaleInformation_zh_HK.java
  f0d51620b28477a7563c8250f2e030dd  libjava/gnu/java/locale/LocaleInformation_zh_SG.java
  15bfd7e87fe279da7f5ebe24c05e3b6d  libjava/gnu/java/locale/LocaleInformation_zh_TW.java
! 700035deab36df81803b3aa6897f03d6  libjava/gnu/java/math/MPN.java
! ca4b5d01a014c42536525e347ce4ca72  libjava/gnu/java/net/BASE64.java
! 3ea9efd7db3ea6c7df22ff034345166b  libjava/gnu/java/net/CRLFInputStream.java
! 5b1f2e935efeb7a4a8908a0b441bdacd  libjava/gnu/java/net/CRLFOutputStream.java
! 1290080a8ad85a70f5e0eec49798aab9  libjava/gnu/java/net/DefaultContentHandlerFactory.java
! 38053a02759566fa2b308062062d8f14  libjava/gnu/java/net/EmptyX509TrustManager.java
! fa203947dfa3ee57b0cb08e54117f897  libjava/gnu/java/net/GetLocalHostAction.java
  ea1bfc732a2571142fe2395b769bc020  libjava/gnu/java/net/HeaderFieldHelper.java
! 0c8c1b793b1f473955923795c361002a  libjava/gnu/java/net/LineInputStream.java
! 72fae8cc756708382b5a25a20737c519  libjava/gnu/java/net/PlainDatagramSocketImpl.java
! eb1f952f23064c49cefabcdb387997f7  libjava/gnu/java/net/PlainSocketImpl.java
  cdeb788fc87f243a097084a0040fdd57  libjava/gnu/java/net/URLParseError.java
  d9b29b8294c58409235594201413dc95  libjava/gnu/java/net/natPlainDatagramSocketImplNoNet.cc
! 6551ac0c3eccd42e5afe7e6219a56c11  libjava/gnu/java/net/natPlainDatagramSocketImplPosix.cc
! 5e83d55877cb24426be5359d5c40f8bd  libjava/gnu/java/net/natPlainDatagramSocketImplWin32.cc
  d6a9b780a28afc317d11ea27f94fc448  libjava/gnu/java/net/natPlainSocketImplNoNet.cc
! 637a2bb040d36912281fafabda3d830b  libjava/gnu/java/net/natPlainSocketImplPosix.cc
! c5dcfdb861d707f55f7403374bdfa044  libjava/gnu/java/net/natPlainSocketImplWin32.cc
  92519bc3a52a1bdf0b42a788661a5bcd  libjava/gnu/java/net/protocol/core/Connection.java
  bdcb8e9d2d8a08f125de3168878c4a09  libjava/gnu/java/net/protocol/core/CoreInputStream.java
  2ee0a1c8055cc886c615bd80daa5f50b  libjava/gnu/java/net/protocol/core/Handler.java
  ec33c998e82a7d76787fca918c89c7b1  libjava/gnu/java/net/protocol/core/natCoreInputStream.cc
! 568f9bda1e0089955a9ae2c845ea36db  libjava/gnu/java/net/protocol/file/Connection.java
! 304508514d1133136259fa3885efb273  libjava/gnu/java/net/protocol/file/Handler.java
! 3befacb5875d82cba7decd2601719954  libjava/gnu/java/net/protocol/ftp/ActiveModeDTP.java
! 137d1175c836676e3e19b5fddfe31cc8  libjava/gnu/java/net/protocol/ftp/BlockInputStream.java
! df570bf20b8f69287694ff0895f9fae4  libjava/gnu/java/net/protocol/ftp/BlockOutputStream.java
! ad38598c32295d371a0505caadc6c566  libjava/gnu/java/net/protocol/ftp/CompressedInputStream.java
! 87082faacf0aa30336adbb7c4578dcb0  libjava/gnu/java/net/protocol/ftp/CompressedOutputStream.java
! 1611c91ac9254be081c7ceac87dfd31e  libjava/gnu/java/net/protocol/ftp/DTP.java
! dadebc4a4958837f54f0e3bbaca36596  libjava/gnu/java/net/protocol/ftp/DTPInputStream.java
! c5738b6c11a22f03edf03f48470c70ca  libjava/gnu/java/net/protocol/ftp/DTPOutputStream.java
! 2649b705b332daa33b0060b1c68bc849  libjava/gnu/java/net/protocol/ftp/FTPConnection.java
! 752eca2af708b3e2bb02c656ce9adba7  libjava/gnu/java/net/protocol/ftp/FTPException.java
! 93d0259e40f6101fdb3f007015960586  libjava/gnu/java/net/protocol/ftp/FTPResponse.java
! 65f23d0d611d3a13df746e5f752789d9  libjava/gnu/java/net/protocol/ftp/FTPURLConnection.java
! 0e34296ec30b8ae29d2c745135d26b99  libjava/gnu/java/net/protocol/ftp/Handler.java
! 4571d018b0738b08bd54a47c279ed6f1  libjava/gnu/java/net/protocol/ftp/PassiveModeDTP.java
! e2e6202d8e6d71b992ef31aaa9d0f3a2  libjava/gnu/java/net/protocol/ftp/StreamInputStream.java
! 6db9965dfe56ce8e39c94be94292a4b6  libjava/gnu/java/net/protocol/ftp/StreamOutputStream.java
! 8acd7c5c032334e933915b202146d239  libjava/gnu/java/net/protocol/ftp/package.html
! 6a8f94313b2a30810e39e96a64dcd2ad  libjava/gnu/java/net/protocol/gcjlib/Connection.java
  487eb8cedecccc92088e0314ede6839e  libjava/gnu/java/net/protocol/gcjlib/Handler.java
! 6415e22f7b2fe946134211d15c7216d1  libjava/gnu/java/net/protocol/http/Authenticator.java
! 6ff900c03dd0904250e2bf4508848acd  libjava/gnu/java/net/protocol/http/ByteArrayRequestBodyWriter.java
! 84b1d1542baf7a7662c431b058666009  libjava/gnu/java/net/protocol/http/ByteArrayResponseBodyReader.java
! f33d2befa4ad40ad81a52b6f30eb5d32  libjava/gnu/java/net/protocol/http/ChunkedInputStream.java
! ac555adc7ef3beb568b8fbaba5648638  libjava/gnu/java/net/protocol/http/Cookie.java
! 2bebda30e8f7311da317650683cdb91d  libjava/gnu/java/net/protocol/http/CookieManager.java
! 502cb805b584ba6fa3522881d7efab22  libjava/gnu/java/net/protocol/http/Credentials.java
! 00c09639b6983448145fa309d3443dd3  libjava/gnu/java/net/protocol/http/HTTPConnection.java
! d239576fe50a63fb4618777322ee7202  libjava/gnu/java/net/protocol/http/HTTPDateFormat.java
! 19002508d90efd1865e0e4321ee4684d  libjava/gnu/java/net/protocol/http/HTTPURLConnection.java
! e51384d825981b41c5f876555bc695a2  libjava/gnu/java/net/protocol/http/Handler.java
! 13fe24b059cb2b0f7b0d358458133e46  libjava/gnu/java/net/protocol/http/Headers.java
! 874da591de27add262badb3b2845b465  libjava/gnu/java/net/protocol/http/Request.java
! 02bfd717a53aac7a60553748942e29ea  libjava/gnu/java/net/protocol/http/RequestBodyWriter.java
! e31e583520035e73bb197eaf5ed1d26d  libjava/gnu/java/net/protocol/http/Response.java
! ed5ec780a81be2eed220c806b237a349  libjava/gnu/java/net/protocol/http/ResponseBodyReader.java
! 0093c188f84ba80d6e6b2293515badc7  libjava/gnu/java/net/protocol/http/ResponseHeaderHandler.java
! abfb8b6776e311087bd858f192ac32d1  libjava/gnu/java/net/protocol/http/SimpleCookieManager.java
! 6a77c045de2fcbedd3f94186d419fd45  libjava/gnu/java/net/protocol/http/event/ConnectionEvent.java
! 78ea2d686389b96f090404077fe19e3c  libjava/gnu/java/net/protocol/http/event/ConnectionListener.java
! de538053e0750e2942df2172d981b121  libjava/gnu/java/net/protocol/http/event/RequestEvent.java
! 7f75b6f279a402207675fc9817058ce7  libjava/gnu/java/net/protocol/http/event/RequestListener.java
! b9775d870c57899653b32d209338d020  libjava/gnu/java/net/protocol/jar/Connection.java
! 41dfd873fd6c074f605b2bc8a90062bd  libjava/gnu/java/net/protocol/jar/Handler.java
  9902e0768ead73f666ae91fc2a270c33  libjava/gnu/java/nio/ChannelInputStream.java
  82566c9b04c39f61d57d34823c73f03f  libjava/gnu/java/nio/ChannelOutputStream.java
! cb76ff8454bc5b746db812a55624a889  libjava/gnu/java/nio/ChannelReader.java
! 6e193b0517444f202d58f33cff7a2b0d  libjava/gnu/java/nio/DatagramChannelImpl.java
  d14cc960f6378b6cb59d372afcae5f5c  libjava/gnu/java/nio/DatagramChannelSelectionKey.java
! cb6015e455fcac6b1f9ae9b14693b1b2  libjava/gnu/java/nio/FileLockImpl.java
  71489da981303e357057477514ece231  libjava/gnu/java/nio/InputStreamChannel.java
  f142c6608a074887967f7da1b74ef8a1  libjava/gnu/java/nio/NIOConstants.java
! 39bddf115205de68353b39379a959276  libjava/gnu/java/nio/NIODatagramSocket.java
! 7af214d431d58a477307ef40e0bcd2d0  libjava/gnu/java/nio/NIOServerSocket.java
  587d1bb7c7794236067e2ccdbd6686a3  libjava/gnu/java/nio/NIOSocket.java
  bb328de7ee7e7e77b6cb89a88773c0a6  libjava/gnu/java/nio/OutputStreamChannel.java
! a6e5d6007251bec04d9dfdef965bf9d5  libjava/gnu/java/nio/PipeImpl.java
  1fc00d32d315bf50f725f926034877bf  libjava/gnu/java/nio/SelectionKeyImpl.java
! aeb2f7fe72aa7b600bcb189eab608f2f  libjava/gnu/java/nio/SelectorImpl.java
  9b5f02ed17294f9e054f638baf06ad5a  libjava/gnu/java/nio/SelectorProviderImpl.java
! 1d6d4dfd7d6f9e98a6d4071fe4b2a837  libjava/gnu/java/nio/ServerSocketChannelImpl.java
  c14b3efaf490ed5648a9d99d9d9a13b3  libjava/gnu/java/nio/ServerSocketChannelSelectionKey.java
! 45d4c7f51b5fd1cfc58dd58b8a11f896  libjava/gnu/java/nio/SocketChannelImpl.java
  934d549145f58b862ee33b978e0ae1ec  libjava/gnu/java/nio/SocketChannelSelectionKey.java
! 50c7499977fa42561e7770a3e3c1e3f0  libjava/gnu/java/nio/VMPipe.java
! d04cdfdc9e1697daefd48cac010b720d  libjava/gnu/java/nio/VMSelector.java
! 67ff3a55c0a81d98aa55a41c92e0d210  libjava/gnu/java/nio/channels/FileChannelImpl.java
! 575c1291931c0398fe68b7a11ebaf56c  libjava/gnu/java/nio/channels/natFileChannelEcos.cc
! e6f1a02192a2e9e3db13e0136ad69d72  libjava/gnu/java/nio/channels/natFileChannelPosix.cc
! a2d0bf28c0e4078f1ea995aa9ad29f1e  libjava/gnu/java/nio/channels/natFileChannelWin32.cc
! c60d1ca4708a1b2870be1f30e66aabb9  libjava/gnu/java/nio/charset/ISO_8859_1.java
! a3d62a753e75fb04db81f4cca7f4b8c6  libjava/gnu/java/nio/charset/Provider.java
! 726a67ed746815b5c42f278769890c5b  libjava/gnu/java/nio/charset/US_ASCII.java
! 281092c4a334350f96b5e92f37864a87  libjava/gnu/java/nio/charset/UTF_16.java
! 007e31c244d69c4b5ae81b743b612d3d  libjava/gnu/java/nio/charset/UTF_16BE.java
! bd6d525a43ff4e46c8a17e780cf6a800  libjava/gnu/java/nio/charset/UTF_16Decoder.java
! 04d56dab6e4eff4553b4153e6a66eb52  libjava/gnu/java/nio/charset/UTF_16Encoder.java
! 10cd5d09a2dc86e927edda25700a9556  libjava/gnu/java/nio/charset/UTF_16LE.java
! a81b72901870173b7ef706c4c25f335c  libjava/gnu/java/nio/charset/UTF_8.java
  8ebe6d880112167c99859a7c303a61eb  libjava/gnu/java/nio/natNIOServerSocket.cc
! cd6c955f144fe77d7ecdc4e395190e82  libjava/gnu/java/nio/natPipeImplEcos.cc
! 6083138bc35a2a96f71e3c4e725bb2fa  libjava/gnu/java/nio/natPipeImplPosix.cc
! ee753ef0d970cdd89b8116291fd8994d  libjava/gnu/java/nio/natPipeImplWin32.cc
! 9b9b814091f4d041d8bf33a83d48af23  libjava/gnu/java/nio/natSelectorImplEcos.cc
! 84551c2aa9367c343fa04c5cc1ade07e  libjava/gnu/java/nio/natSelectorImplPosix.cc
! c63cf04e292ec947c38c4da75fb662dd  libjava/gnu/java/nio/natSelectorImplWin32.cc
  54a20404a608b75508eb26e140887ba8  libjava/gnu/java/rmi/RMIMarshalledObjectInputStream.java
! cda4f7715405e7b39fc287b86c14d5f7  libjava/gnu/java/rmi/RMIMarshalledObjectOutputStream.java
! 675a116fec4c110b41853f584a7f71a4  libjava/gnu/java/rmi/dgc/DGCImpl.java
  d350729b3ceafb007c5e23e0d6a8a0ea  libjava/gnu/java/rmi/dgc/DGCImpl_Skel.java
  73f70304df6f9a419764879abab75850  libjava/gnu/java/rmi/dgc/DGCImpl_Stub.java
! 158013e5feb3f7506ac376a69a1a3715  libjava/gnu/java/rmi/registry/RegistryImpl.java
  0d91e9d1a595c6286757f57b79157744  libjava/gnu/java/rmi/registry/RegistryImpl_Skel.java
  74de1c6fadfa12851a18308fea8a6e6b  libjava/gnu/java/rmi/registry/RegistryImpl_Stub.java
  f48281b0f85c2ede81e65dc7ebaaef21  libjava/gnu/java/rmi/rmic/Compile_gcj.java
  b3e4317c8a32eebab73151c1ad3e7326  libjava/gnu/java/rmi/rmic/Compile_jikes.java
  8c26332b9aa24207f530d62cb705a8c6  libjava/gnu/java/rmi/rmic/Compile_kjc.java
  c6169e8c0eb27f74c7bd255207924b9d  libjava/gnu/java/rmi/rmic/Compiler.java
! 95c1843949aca13959a9e0dd60121d12  libjava/gnu/java/rmi/rmic/CompilerProcess.java
! b4ed598207ed099e840c9d1d6a8584fb  libjava/gnu/java/rmi/rmic/RMIC.java
  4baef9a7fe8802fac574a40e18d9e8a6  libjava/gnu/java/rmi/rmic/RMICException.java
  2e203413417b3cd374ac3be969dc6a9a  libjava/gnu/java/rmi/rmic/TabbedWriter.java
! ef25eaa20286967f1393fe783c41ae3e  libjava/gnu/java/rmi/server/ConnectionRunnerPool.java
  ca84547adb6bafcc0f273fa690010bde  libjava/gnu/java/rmi/server/ProtocolConstants.java
  89371d0cc1fd5ac42aa344f535cb265b  libjava/gnu/java/rmi/server/RMIDefaultSocketFactory.java
! bf516e3f7d6498ac00021f8546df831c  libjava/gnu/java/rmi/server/RMIHashes.java
! 2c201f55142735ae58ead450a2559253  libjava/gnu/java/rmi/server/RMIIncomingThread.java
! 1c9cd64ab79afc350c0f6dd8592d6775  libjava/gnu/java/rmi/server/RMIObjectInputStream.java
! 2f4ef6181b89424d8db9d8d140b4f03d  libjava/gnu/java/rmi/server/RMIObjectOutputStream.java
  040711dc5629c54784de155a94c68b17  libjava/gnu/java/rmi/server/RMIVoidValue.java
! 446bfa20b5be691eb7d6820f75bd10da  libjava/gnu/java/rmi/server/UnicastConnection.java
! 72213edb114476a199dacc39b91a3f1a  libjava/gnu/java/rmi/server/UnicastConnectionManager.java
! b019b0a3a95e2f54c03059b43446f5c2  libjava/gnu/java/rmi/server/UnicastRef.java
! bfeba83964d38575a65c8fd49587eea2  libjava/gnu/java/rmi/server/UnicastRemoteCall.java
  9aa322eecb08aeb7589a6a8a3d19aeb0  libjava/gnu/java/rmi/server/UnicastRemoteStub.java
! b1a7e650fac821eeafbce61cf36aa3ef  libjava/gnu/java/rmi/server/UnicastServer.java
! 0a8f678226cfefa7d43dc0bb33fb2d32  libjava/gnu/java/rmi/server/UnicastServerRef.java
  235e5f0f6d8cfea84996d15865191946  libjava/gnu/java/security/Engine.java
! a850f25868d24bca70254d6992e57467  libjava/gnu/java/security/OID.java
! 5a89fac2007d696a8742f1977b3949bc  libjava/gnu/java/security/PolicyFile.java
! fdba86d8ab707a323967623ea43cebc7  libjava/gnu/java/security/action/GetPropertyAction.java
! dd1231c99bbe38cdc84014d66e6d59d5  libjava/gnu/java/security/action/GetSecurityPropertyAction.java
! 4ae3127e51187f5181b1f16afb7cff0f  libjava/gnu/java/security/action/SetAccessibleAction.java
! 1b39639f67511341b1387a28cd39fcdc  libjava/gnu/java/security/ber/BER.java
! 877f75deabe5a29016d1aa566dc91ce1  libjava/gnu/java/security/ber/BEREncodingException.java
! 985adcb832ef3488eb262133a6ee8e2c  libjava/gnu/java/security/ber/BERReader.java
! 3c5e1fcf828ce89b30a114d062934d2f  libjava/gnu/java/security/ber/BERValue.java
! 846f568a7fee0b7a089bae3146ccf7ce  libjava/gnu/java/security/der/BitString.java
! 23a739a994dc14f604e457f9ed1a9e95  libjava/gnu/java/security/der/DER.java
! a5939166b1e368af2d360cc809282bba  libjava/gnu/java/security/der/DEREncodingException.java
! 4ea01a903f9ee6eb4a876e17de362128  libjava/gnu/java/security/der/DERReader.java
! 053c8bd8e520aba921199e33d5a8a5f6  libjava/gnu/java/security/der/DERValue.java
! 468a875e8cb434500ca31c53cc665c40  libjava/gnu/java/security/der/DERWriter.java
! abdbb18edd978f6cf2e4ca8a15f9d082  libjava/gnu/java/security/pkcs/PKCS7SignedData.java
! 9f3cf21b60a32f70327a02edb7f02b78  libjava/gnu/java/security/pkcs/SignerInfo.java
! ec8190aa2f0d5a403e49f81d8474b4bb  libjava/gnu/java/security/provider/CollectionCertStoreImpl.java
  a2afb2b9a7752ac125ecd918733ce96c  libjava/gnu/java/security/provider/DSAKeyFactory.java
! e1314e7a81b368e4f0420fb75c163a76  libjava/gnu/java/security/provider/DSAKeyPairGenerator.java
  604af68135f3e548265437503782673a  libjava/gnu/java/security/provider/DSAParameterGenerator.java
! acb32289583e378d31618b0fa1033ae1  libjava/gnu/java/security/provider/DSAParameters.java
! 3f02c97c64adf18096458f5bf7bb1409  libjava/gnu/java/security/provider/DSASignature.java
  fedaf2fd9858a0a59b935900ddb1d6c2  libjava/gnu/java/security/provider/DefaultPolicy.java
! 4e3ac4752941192d252f73d37ea7f4b7  libjava/gnu/java/security/provider/EncodedKeyFactory.java
! e347abdc6a049a64a6d2495bba67376f  libjava/gnu/java/security/provider/Gnu.java
! a9f2a69bfce101fc907a6794eda838f0  libjava/gnu/java/security/provider/GnuDHPublicKey.java
! 52ea68cbe99d5dacead02046c6f2f4be  libjava/gnu/java/security/provider/GnuDSAPrivateKey.java
! 23ac255ec73ee3a16d12abc57becf58d  libjava/gnu/java/security/provider/GnuDSAPublicKey.java
! 346b3e77924308e4228db47fd8a4b0f1  libjava/gnu/java/security/provider/GnuRSAPrivateKey.java
! 302da44332ddacfee607d7ea3184c6c9  libjava/gnu/java/security/provider/GnuRSAPublicKey.java
! 218e55f528d5f7dec888181dee2617ea  libjava/gnu/java/security/provider/MD2withRSA.java
! 4aa353ba2d5a676bce227cf4cbab8f31  libjava/gnu/java/security/provider/MD4withRSA.java
  17644b0cfd428438a89e1362729f937e  libjava/gnu/java/security/provider/MD5.java
+ ae8557c7d34af82b5adc8b3a79db7239  libjava/gnu/java/security/provider/MD5withRSA.java
+ ef53c8166cbc349f82913d47b6754cf1  libjava/gnu/java/security/provider/PKIXCertPathValidatorImpl.java
+ 59657493d5ee5819c740ee92a24185f5  libjava/gnu/java/security/provider/RSA.java
+ c99ff6224247816b3f9a14cc8860355d  libjava/gnu/java/security/provider/RSAKeyFactory.java
  8e80f5081fb992a57e59fa831703663b  libjava/gnu/java/security/provider/SHA.java
  261dfb90dae98a5b6077b6cb46a85e55  libjava/gnu/java/security/provider/SHA1PRNG.java
! c54657fd4b2725766970481b22471638  libjava/gnu/java/security/provider/SHA1withRSA.java
! b589bf9b6a1df0f2891cd575a24a053b  libjava/gnu/java/security/provider/X509CertificateFactory.java
! 98b063d12627f9dbfee45ce9019dc6db  libjava/gnu/java/security/util/Prime.java
! 84d65234ec01fd28f3a1b63566d4a957  libjava/gnu/java/security/x509/GnuPKIExtension.java
! f0f66d103df056679f9eb907c256a53d  libjava/gnu/java/security/x509/PolicyNodeImpl.java
! a15a72fbaeefefe79a37c664e2cc20ca  libjava/gnu/java/security/x509/Util.java
! 81e13e80667dd46c9b616b708325f14e  libjava/gnu/java/security/x509/X500DistinguishedName.java
! d9f3c65be1ac8289113aa72d1b9fac5d  libjava/gnu/java/security/x509/X509CRL.java
! 7c83777665606c9db25fac5b4515300a  libjava/gnu/java/security/x509/X509CRLEntry.java
! d6d52b54fb5edc74a7eff13e43c9cbf7  libjava/gnu/java/security/x509/X509CRLSelectorImpl.java
! bebecfdf3fd49e9d4ad9f42a789d6bcb  libjava/gnu/java/security/x509/X509CertPath.java
! 5a5a586edaf58c61ddf94a994da56b6c  libjava/gnu/java/security/x509/X509CertSelectorImpl.java
! c28c3c6b13b5d6b8e6c0f326d78c01db  libjava/gnu/java/security/x509/X509Certificate.java
! 189a3071322421181c1c368bbe14a27c  libjava/gnu/java/security/x509/ext/AuthorityKeyIdentifier.java
! 23cf713222eff479909c2ecf13393230  libjava/gnu/java/security/x509/ext/BasicConstraints.java
! 1bf3d7902a62b17647e15940fffc13ca  libjava/gnu/java/security/x509/ext/CRLNumber.java
! 6f761add13d6b2de9c93dfdd743f4273  libjava/gnu/java/security/x509/ext/CertificatePolicies.java
! 727ebe045c7cabec1b4c18e2ea02e436  libjava/gnu/java/security/x509/ext/ExtendedKeyUsage.java
! 7034e53b1fa5d538a4b351ea94fa006b  libjava/gnu/java/security/x509/ext/Extension.java
! 662eaa90c4b811a8fd221201dbcbbd61  libjava/gnu/java/security/x509/ext/GeneralNames.java
! fc48605829b64ced2380f8e89670126c  libjava/gnu/java/security/x509/ext/IssuerAlternativeNames.java
! 6beeffb599bcf7a29c8f53108b3e8ca0  libjava/gnu/java/security/x509/ext/KeyUsage.java
! 4a0660eda487a819159fcafc703f5f38  libjava/gnu/java/security/x509/ext/PolicyConstraint.java
! 6b6069820833ea25cd5fbdcdd059e149  libjava/gnu/java/security/x509/ext/PolicyMappings.java
! fbc20e686ef16de37d10724a780cfd81  libjava/gnu/java/security/x509/ext/PrivateKeyUsagePeriod.java
! 02e9945038ecb196fd2afdcd9e45cab1  libjava/gnu/java/security/x509/ext/ReasonCode.java
! c4f1cbab7ac588dcfa9adfbf16c29a45  libjava/gnu/java/security/x509/ext/SubjectAlternativeNames.java
! d1e3caae256233f961a868b08356edbc  libjava/gnu/java/security/x509/ext/SubjectKeyIdentifier.java
! 8c55c996336bb8871800fa6fcd56312e  libjava/gnu/java/text/AttributedFormatBuffer.java
! 60f8f940e09ebc2091288dfd6747fd45  libjava/gnu/java/text/BaseBreakIterator.java
! 7f56faddadaedd49538fc201986d6f27  libjava/gnu/java/text/CharacterBreakIterator.java
! 93d32b64607d4b58f5c0910df1fdf753  libjava/gnu/java/text/FormatBuffer.java
! 18fa83aaf252b9a1947d748b1aae8716  libjava/gnu/java/text/FormatCharacterIterator.java
! b44fafa6eb3c56bf577ac6a332b4a8e4  libjava/gnu/java/text/LineBreakIterator.java
! b1e97a859729fe3ad59d42117a6cd4ab  libjava/gnu/java/text/SentenceBreakIterator.java
! 81860fb36203c72bff43673e1fe25d5c  libjava/gnu/java/text/StringFormatBuffer.java
! 0efe2ced5916832d75bf9f3d68b06fa6  libjava/gnu/java/text/WordBreakIterator.java
! 87b462874a4a3de8834ae566d2b46ad1  libjava/gnu/java/util/DoubleEnumeration.java
  721595961c8fe60e28d911437959c3fa  libjava/gnu/java/util/EmptyEnumeration.java
  dc1c01c9fdd403494ce2d9ace702a179  libjava/gnu/java/util/prefs/FileBasedFactory.java
  bdc23177bcba14ee82ad774173488e38  libjava/gnu/java/util/prefs/MemoryBasedFactory.java
  cc84c351e8c9480a67b2f4c2215528d1  libjava/gnu/java/util/prefs/MemoryBasedPreferences.java
! 98fd617988192ccc24e793d784306080  libjava/gnu/java/util/prefs/NodeReader.java
  17898f1aeb8f9c200a561d2e69ccf475  libjava/gnu/java/util/prefs/NodeWriter.java
! e28cfc0b5b604881775f3576254af514  libjava/gnu/regexp/CharIndexed.java
! 8e768eec3a2739db1b778fe731ec7cae  libjava/gnu/regexp/CharIndexedCharArray.java
! 51c0332461ea6e8bd62139183f697cd8  libjava/gnu/regexp/CharIndexedInputStream.java
! d0f93a634792c3f0fb7bf63e16e8ca4b  libjava/gnu/regexp/CharIndexedString.java
! 18325689f4b65127fd91af5fef59d715  libjava/gnu/regexp/CharIndexedStringBuffer.java
! 690a68ec6633b4a5da207e8e5307e41a  libjava/gnu/regexp/MessagesBundle.properties
! 43ee563c682f6b6045a6ec5090bf8653  libjava/gnu/regexp/MessagesBundle_fr.properties
! 88f8125090465cedb4c50df778749df7  libjava/gnu/regexp/RE.java
! 9c2e4e317b862c3ce2a692a47c04b626  libjava/gnu/regexp/REException.java
! c9aa7a2d3136116c1dff49437475259e  libjava/gnu/regexp/REFilterInputStream.java
! f52c7ff7a4e8098be8a7a9d76b00ec1b  libjava/gnu/regexp/REMatch.java
! 54cbd2dd46a3dfd7be0cf6342f365636  libjava/gnu/regexp/REMatchEnumeration.java
! bccbeceba3f41a3715a981ee5d4351e6  libjava/gnu/regexp/RESyntax.java
! 181eab891ba76478a28e21c702a67f72  libjava/gnu/regexp/REToken.java
! 84f81f8c6128396cd8dd470006e4a04d  libjava/gnu/regexp/RETokenAny.java
! c05b56431a026f44360793f34b62cf96  libjava/gnu/regexp/RETokenBackRef.java
! f96a67548e1f6d28fbe509b917f23274  libjava/gnu/regexp/RETokenChar.java
! e77cb6d2cf828b37e215f81a7c4b79c0  libjava/gnu/regexp/RETokenEnd.java
! cf0b3b9e8b943e99db4042dc1f7483ec  libjava/gnu/regexp/RETokenEndSub.java
! e879db19d3570f3f8d5500da44213af7  libjava/gnu/regexp/RETokenLookAhead.java
! f30f0e1b92c6356085607998973093f0  libjava/gnu/regexp/RETokenOneOf.java
! ae88cbf97f0cee7144c942a0f86fc660  libjava/gnu/regexp/RETokenPOSIX.java
! 5e9cdf6728ef1af30b8b3b95c39875e5  libjava/gnu/regexp/RETokenRange.java
! 90a0c21407a9b54e4462f99d9e721ca9  libjava/gnu/regexp/RETokenRepeated.java
! 39ea9d831746cc02c44e4cbab3f2dae9  libjava/gnu/regexp/RETokenStart.java
! 689a51d03c973278149aa015e796eadc  libjava/gnu/regexp/RETokenWordBoundary.java
! 146923ad757d358ebed034913d4de2cb  libjava/gnu/regexp/UncheckedRE.java
! c26ef538e67e3deb512779799b28091e  libjava/gnu/xml/aelfred2/ContentHandler2.java
! 7780e0453ac20446471564b3f9619d0e  libjava/gnu/xml/aelfred2/JAXPFactory.java
! 8be7547c5d7fdfbaa19754c784097144  libjava/gnu/xml/aelfred2/SAXDriver.java
! 2b25537715f0c0f99314c865305ea896  libjava/gnu/xml/aelfred2/XmlParser.java
! af1756890c9737bdfae5baa2791cb520  libjava/gnu/xml/aelfred2/XmlReader.java
! 94a1396750c1ce521fd28f5bffe3d4bf  libjava/gnu/xml/aelfred2/package.html
! bd7422843a0ff49efb9859d97feb99ea  libjava/gnu/xml/dom/Consumer.java
! b3cbe0292002dcfc49070c72c6316c09  libjava/gnu/xml/dom/DTDAttributeTypeInfo.java
! 333eea1b6ea378b12fd8b1fec1254a99  libjava/gnu/xml/dom/DTDElementTypeInfo.java
! 86844919a5a580669700fa7b900e6610  libjava/gnu/xml/dom/DomAttr.java
! 4b9f767f55d7fe0b6bfff99be9e56f13  libjava/gnu/xml/dom/DomCDATASection.java
! 32dae6b5fa67df781d8f7fc46e3bd0cf  libjava/gnu/xml/dom/DomCharacterData.java
! 897ff595d27bfd60bb61e42219e563fa  libjava/gnu/xml/dom/DomComment.java
! 903c026aa2cf6667765524c0bdb16c6b  libjava/gnu/xml/dom/DomDOMException.java
! 52797c5cfae7312c3158f20ad8eb988e  libjava/gnu/xml/dom/DomDoctype.java
! a5f741d6b1b8c8b8a65e579ad270993e  libjava/gnu/xml/dom/DomDocument.java
! 23e41ec8afbdc4262bc9d65f27b45966  libjava/gnu/xml/dom/DomDocumentBuilder.java
! ee1041dac15fb93978df227bdc83fb7c  libjava/gnu/xml/dom/DomDocumentBuilderFactory.java
! b219f237d8ba492348ac747f84e673c7  libjava/gnu/xml/dom/DomDocumentConfiguration.java
! 63225efeef1e72722354b63353218a05  libjava/gnu/xml/dom/DomDocumentFragment.java
! b8bd910d399ce7b7518a3a7e0f0037a8  libjava/gnu/xml/dom/DomElement.java
! 1c6e746a2b999f7b3f20818d4519fe59  libjava/gnu/xml/dom/DomEntity.java
! 8645a436e70e5079334fa2032d584fd1  libjava/gnu/xml/dom/DomEntityReference.java
! fe90af1c8640286849b427344b4f92aa  libjava/gnu/xml/dom/DomEvent.java
! 88885584af95c7ffbfc11f0d173ef2b2  libjava/gnu/xml/dom/DomExtern.java
! c07550757b9ad7956bbf932f68658002  libjava/gnu/xml/dom/DomImpl.java
! 6c91017d58e0de5173469613c9a4f459  libjava/gnu/xml/dom/DomIterator.java
! f9ba0587f075dba968be1a3c5dcda401  libjava/gnu/xml/dom/DomNSResolverContext.java
! 96dc9fd28a4645702f57385442ed833a  libjava/gnu/xml/dom/DomNamedNodeMap.java
! 76c24846c5c069c36b6f911d1a35ba8a  libjava/gnu/xml/dom/DomNode.java
! 0806311830cbdc6953e757973b84c6a8  libjava/gnu/xml/dom/DomNodeIterator.java
! ad7dea61862424da19b79165a15787d6  libjava/gnu/xml/dom/DomNotation.java
! 3b6d9e0ca5575548820a2602cba0659f  libjava/gnu/xml/dom/DomNsNode.java
! ad454b6f5f4c5d13ffc6a2a9e4a485ec  libjava/gnu/xml/dom/DomProcessingInstruction.java
! 0b0ed75c2b509f28517b4166b82a3143  libjava/gnu/xml/dom/DomText.java
! baf8d7a94d5332599bc8d29f446b9dec  libjava/gnu/xml/dom/DomXPathExpression.java
! 2220dd81624f9e3b75da57ec34ba34e3  libjava/gnu/xml/dom/DomXPathNSResolver.java
! 4ec1f99900b821b6953ee4196da70f7d  libjava/gnu/xml/dom/DomXPathResult.java
! 2fa9312834f4dd502da99a8f4da562fe  libjava/gnu/xml/dom/ImplementationList.java
! 132f0665bbe29f3e0e79b8e61390c6b2  libjava/gnu/xml/dom/ImplementationSource.java
! 2e3ee2740253b47552302501724fe832  libjava/gnu/xml/dom/JAXPFactory.java
! ec872e0a9438ddf66493c19b081ec80a  libjava/gnu/xml/dom/ls/DomLSException.java
! 7e343a6d1fd3c3599da3870f5e47724a  libjava/gnu/xml/dom/ls/DomLSInput.java
! 9df0aa862f976730fe147636c1978c1a  libjava/gnu/xml/dom/ls/DomLSOutput.java
! 28aae42f8fee117467f1bb569c818123  libjava/gnu/xml/dom/ls/DomLSParser.java
! a8f1a79e0a9ac08c38ebe7ed2cd245c2  libjava/gnu/xml/dom/ls/DomLSSerializer.java
! 45dc39d1e5f2ee292798c053249655dc  libjava/gnu/xml/dom/ls/FilteredSAXEventSink.java
! 0058a6f8b645c28ad7b6757fca46575f  libjava/gnu/xml/dom/ls/ReaderInputStream.java
! b8f6f4415e24e079b3428446b8175833  libjava/gnu/xml/dom/ls/SAXEventSink.java
! a4644e892b412363dba9a8bb544d45d7  libjava/gnu/xml/dom/ls/WriterOutputStream.java
! 5c03dc00ba2cedc9601869693be9a0b0  libjava/gnu/xml/dom/package.html
! d4e0ff30c59cb3b80f3c29efe6debb8a  libjava/gnu/xml/pipeline/CallFilter.java
! d7afeda1c180f3d78d131da0fd4650d4  libjava/gnu/xml/pipeline/DomConsumer.java
! 563412ccff508ec331a8c954b4f51926  libjava/gnu/xml/pipeline/EventConsumer.java
! d5c43e35f305467f2c2ee78bef7021b3  libjava/gnu/xml/pipeline/EventFilter.java
! 13a8357fb7c8da9fde52cc1060a80e65  libjava/gnu/xml/pipeline/LinkFilter.java
! a59617b546d5078567ed1d761bc7cecf  libjava/gnu/xml/pipeline/NSFilter.java
! 70f7f4148c693e4473f67c8d835ffcf5  libjava/gnu/xml/pipeline/PipelineFactory.java
! 98d24c228802fe569bd8d34096b5db07  libjava/gnu/xml/pipeline/TeeConsumer.java
! 95a6e72b482df1da77bcfdeda606eeaa  libjava/gnu/xml/pipeline/TextConsumer.java
! 324108add20a8b9782741836c51db147  libjava/gnu/xml/pipeline/ValidationConsumer.java
! 9fa423b2d726f6acac6a53217d2674f3  libjava/gnu/xml/pipeline/WellFormednessFilter.java
! bf4530a5836deb393ee7c49c6b006491  libjava/gnu/xml/pipeline/XIncludeFilter.java
! af24fb240e67078f31720cffd7afea92  libjava/gnu/xml/pipeline/XsltFilter.java
! f2e7803342b30192fea843661fbe92d6  libjava/gnu/xml/pipeline/package.html
! b56d001f0840db7b23099fc7a54c7850  libjava/gnu/xml/transform/AbstractNumberNode.java
! 138729afa585c1ad3469b80e37d95df4  libjava/gnu/xml/transform/ApplyImportsNode.java
! cb7bd6b4c06b5b532e3ded6175f010ea  libjava/gnu/xml/transform/ApplyTemplatesNode.java
! dc75d518f1c81413614ede35291a2c83  libjava/gnu/xml/transform/AttributeNode.java
! 2f459decc86a4fa46c413d2041999bdf  libjava/gnu/xml/transform/AttributeSet.java
! d602c42980ba8ea78193d5d647aa2736  libjava/gnu/xml/transform/Bindings.java
! f941533a345337a61316b556f91a92f6  libjava/gnu/xml/transform/CallTemplateNode.java
! 015a58da90a130128fa882cb4fc0dfb4  libjava/gnu/xml/transform/ChooseNode.java
! 40db2be558940e7354c92fc553fb81e5  libjava/gnu/xml/transform/CommentNode.java
! 6c45904f4745e6bccca0fc56fa450f90  libjava/gnu/xml/transform/CopyNode.java
! 73586cc8d1d97a5e294a2ad4cd7f1956  libjava/gnu/xml/transform/CopyOfNode.java
! 4e97cca3cdf0b45889c0e9ad96bb74cd  libjava/gnu/xml/transform/CurrentFunction.java
! 8e9c1b459244c5034f20a60fc1fa2537  libjava/gnu/xml/transform/DOMSourceLocator.java
! 66d902c57e5ad117939e30b1f2221a68  libjava/gnu/xml/transform/DocumentFunction.java
! d67e97d341c875675acc04810bcdee69  libjava/gnu/xml/transform/ElementAvailableFunction.java
! a74995a8e9a551e20c6e8559a650828f  libjava/gnu/xml/transform/ElementNode.java
! edcebd5e5e363c207095b11be7ec1593  libjava/gnu/xml/transform/ErrorListenerErrorHandler.java
! c9941631353892048e234d2e13dfc54a  libjava/gnu/xml/transform/ForEachNode.java
! 7a8ddc032221c68f2d7e0f5fbf4d7025  libjava/gnu/xml/transform/FormatNumberFunction.java
! 79e955803724ef94f4188c4506a38280  libjava/gnu/xml/transform/FunctionAvailableFunction.java
! 7854a15e569d8be65d1479e5f6950541  libjava/gnu/xml/transform/GenerateIdFunction.java
! 3dad5cb7ee1c0e5af7615ff748b5c13b  libjava/gnu/xml/transform/IfNode.java
! 71bfef592c056e0117ce7721f1516783  libjava/gnu/xml/transform/Key.java
! 663569d3004b5c2011ab5c7068795a75  libjava/gnu/xml/transform/KeyFunction.java
! f2e569ae71ac3650718588b703a94664  libjava/gnu/xml/transform/LiteralNode.java
! c8d753e034be6072f104dfce1a5a66ba  libjava/gnu/xml/transform/MessageNode.java
! c711dee2e692ed416591a709eca5395c  libjava/gnu/xml/transform/NodeNumberNode.java
! 6ea258a86f98d21bcb347604a23c429e  libjava/gnu/xml/transform/NumberNode.java
! 2668933ccc51ad2fb4843b6e0682ea7a  libjava/gnu/xml/transform/OtherwiseNode.java
! 93c1a9b5b67cb5c1f196dd26fbce2113  libjava/gnu/xml/transform/ParameterNode.java
! c61eb188025052c749d58849fd8d4861  libjava/gnu/xml/transform/ProcessingInstructionNode.java
! 483b83c73856100a3a83ce7e5228422a  libjava/gnu/xml/transform/SAXSerializer.java
! e6a3cb7c47c3815bcb2779b62e65291f  libjava/gnu/xml/transform/SortKey.java
! 6f1c2f3948a01aeb9497c31495255213  libjava/gnu/xml/transform/StreamSerializer.java
! 47f9df01bb932becb8cfb9813ce984ff  libjava/gnu/xml/transform/Stylesheet.java
! 1bcdc36b454176532dee71a516841a5a  libjava/gnu/xml/transform/SystemPropertyFunction.java
! f8a16c084274d1322f76816a4534ecbb  libjava/gnu/xml/transform/Template.java
! 4ef6271d45ba4c64dba82204a549a792  libjava/gnu/xml/transform/TemplateNode.java
! 98b939ea73a349aa4da40fdf03b9a516  libjava/gnu/xml/transform/TemplatesImpl.java
! 246421ba11eeb96ac00e75f00c9bb5f5  libjava/gnu/xml/transform/TextNode.java
! bf3ea87edfacad2bddf901e27f7b03ef  libjava/gnu/xml/transform/TransformerFactoryImpl.java
! 24ccb3381e19f342c5f6dfbd275104b3  libjava/gnu/xml/transform/TransformerImpl.java
! 9b5ef1608b89e202630e2c64340a6924  libjava/gnu/xml/transform/TransformerOutputProperties.java
! 481a92781d7b058d46d7a60c2d0bf134  libjava/gnu/xml/transform/URIResolverEntityResolver.java
! 443d35632a109c177f667b392cc8b041  libjava/gnu/xml/transform/UnparsedEntityUriFunction.java
! 3bea1f89737340f4f44a997989f0c7e5  libjava/gnu/xml/transform/ValueOfNode.java
! e3c863a23eeda0e97c08f5cddce60a70  libjava/gnu/xml/transform/WhenNode.java
! 9ad226dc87791f5a4c4133c9b31cc10c  libjava/gnu/xml/transform/WithParam.java
! 15be9a10ce51e2ae305ff4fb78581022  libjava/gnu/xml/transform/XSLComparator.java
! 75f1d507154a7eae6ee7e529ffac94d8  libjava/gnu/xml/transform/XSLURIResolver.java
! a5f7457b48f962fd02f2f51b9c655c3b  libjava/gnu/xml/transform/package.html
! 7e6fd54afa4e1a7b2dc1730df42114ec  libjava/gnu/xml/util/DoParse.java
! 18b745b60d905f40b24b3d0631e17e8f  libjava/gnu/xml/util/DomParser.java
! bfabdd4ad4727f5f6ccde412b8fd97cd  libjava/gnu/xml/util/Resolver.java
! 634ed2fb4f45104b14615ea826fc53c6  libjava/gnu/xml/util/SAXNullTransformerFactory.java
! 00f452cdf1d46ac18fd0b1f9470a1e33  libjava/gnu/xml/util/XCat.java
! db08dcf8a080d3f616c3eb9fa26fe75c  libjava/gnu/xml/util/XHTMLWriter.java
! 2994297d544c7717a1046f6dedea7746  libjava/gnu/xml/util/XMLWriter.java
! df1890cb981553493160f2d55e0bd5d4  libjava/gnu/xml/util/package.html
! 8944b6bb1ad99b29334af499d601317a  libjava/gnu/xml/xpath/AndExpr.java
! f534cedcd91ece1d53f85d3c3258c674  libjava/gnu/xml/xpath/ArithmeticExpr.java
! ed33098a7c493c545460e69481fbbe60  libjava/gnu/xml/xpath/BooleanFunction.java
! fc61fac486c9d27fa9b8bdeff65dcd65  libjava/gnu/xml/xpath/CeilingFunction.java
! 77d3bce60771265996836c881f3f941e  libjava/gnu/xml/xpath/ConcatFunction.java
! 7547057bea1266cbf6a6470de1511c11  libjava/gnu/xml/xpath/Constant.java
! 6c6cc13c2b2e3cd86dde28a367782881  libjava/gnu/xml/xpath/ContainsFunction.java
! a0fd6ad33770347c5dc23750f1ec2abb  libjava/gnu/xml/xpath/CountFunction.java
! 900f6d53829af391032761b46a7533e6  libjava/gnu/xml/xpath/DocumentOrderComparator.java
! ce23066ab267eba1bc6ba149a444a3b5  libjava/gnu/xml/xpath/EqualityExpr.java
! de29e05d4cf5c8765a928821b2b02861  libjava/gnu/xml/xpath/Expr.java
! ff318c61583bd8b8388de9ed02951bc7  libjava/gnu/xml/xpath/FalseFunction.java
! a76899701db6df0a21ea363e13dc4503  libjava/gnu/xml/xpath/FloorFunction.java
! bf0cac5382785b57421d4973e6034ecb  libjava/gnu/xml/xpath/Function.java
! f0e58a825fdf14f75eadc1fe44da2888  libjava/gnu/xml/xpath/FunctionCall.java
! baccc4fdd02bcfa5e93785fc13da66a4  libjava/gnu/xml/xpath/IdFunction.java
! 0f6844155081d5c1c380f30749b08b60  libjava/gnu/xml/xpath/LangFunction.java
! 9a8361ff290e90ee483c03be2ecaaf58  libjava/gnu/xml/xpath/LastFunction.java
! 069203bce9b74829278b7d77104a3df1  libjava/gnu/xml/xpath/LocalNameFunction.java
! 87844589393f73cc0202367c7ca5b434  libjava/gnu/xml/xpath/NameFunction.java
! c132bb6607e21275c00a6ef1e18aaed8  libjava/gnu/xml/xpath/NameTest.java
! 945a7ccdaa9bc6db6a4bc4502b7005e6  libjava/gnu/xml/xpath/NamespaceTest.java
! d9e23d51fdff29237ca806992dadcde0  libjava/gnu/xml/xpath/NamespaceUriFunction.java
! bde0f123c31feb48304fc6b7775f723d  libjava/gnu/xml/xpath/NegativeExpr.java
! 4b964902f919cc5b4bf66a649a65251f  libjava/gnu/xml/xpath/NodeTypeTest.java
! b7a4da95c30cbd9052305e31ab3ad1bd  libjava/gnu/xml/xpath/NormalizeSpaceFunction.java
! 17173abefbc0f5098a97985001cd8dc2  libjava/gnu/xml/xpath/NotFunction.java
! 9223e73a5e9199a93f2aa1cf5ea91a40  libjava/gnu/xml/xpath/NumberFunction.java
! c18792d820fb192583b8a516160b7e48  libjava/gnu/xml/xpath/OrExpr.java
! 825e4971dc40c19d3d347251c84575e3  libjava/gnu/xml/xpath/ParenthesizedExpr.java
! 86cfa10ec85dc885ee7b7764cd859c28  libjava/gnu/xml/xpath/Path.java
! cc55c2acffb01cf19bf71ad3174c7211  libjava/gnu/xml/xpath/Pattern.java
! 4b11315581df12c63e0387914045c886  libjava/gnu/xml/xpath/PositionFunction.java
! 9c80edd250350cf1317edd3f83065e13  libjava/gnu/xml/xpath/Predicate.java
! 87ea3e84092ed28c40343fe1161dbd6c  libjava/gnu/xml/xpath/RelationalExpr.java
! c8ce5553c79b09d4e47456da9a2d0d69  libjava/gnu/xml/xpath/Root.java
! 3e5f7077116435eb314f7a8887a9ef9b  libjava/gnu/xml/xpath/RoundFunction.java
! 9d7b36d628bbbf9f1fa14f55c37e0967  libjava/gnu/xml/xpath/Selector.java
! 5eedaff66cf612a906201d9c9ec09594  libjava/gnu/xml/xpath/StartsWithFunction.java
! 1eee65f1c39332f9072f895d55c76a13  libjava/gnu/xml/xpath/Steps.java
! 6b19a5e55a205a83bfe0d32f58411fc3  libjava/gnu/xml/xpath/StringFunction.java
! 304b968ea2006e4ea0a5fcae5c5ed2ee  libjava/gnu/xml/xpath/StringLengthFunction.java
! 58a6599345b15b7468fa1c8f44491e24  libjava/gnu/xml/xpath/SubstringAfterFunction.java
! 42bc2842f3f7d2a9e8c77ff0d62b164a  libjava/gnu/xml/xpath/SubstringBeforeFunction.java
! 03fd4d13881791748d79218b7e38bab6  libjava/gnu/xml/xpath/SubstringFunction.java
! 9d47b66cfc241dc5fc3ae913eb271151  libjava/gnu/xml/xpath/SumFunction.java
! a89c90da03ff5900c482042ef7a420b6  libjava/gnu/xml/xpath/Test.java
! a9de35d28ac236083d342efcfe39f71b  libjava/gnu/xml/xpath/TranslateFunction.java
! 43db44ffd853f416f3accff65b888780  libjava/gnu/xml/xpath/TrueFunction.java
! 29db92d1bced841a67022872fc31fb06  libjava/gnu/xml/xpath/UnionExpr.java
! 963f2325460d3b95eb5568f2f1b55501  libjava/gnu/xml/xpath/VariableReference.java
! 71ec9e57361a1bdd4342133dfa39cf2b  libjava/gnu/xml/xpath/XPathFactoryImpl.java
! dd338543c52ccf9c69e15b83464732bc  libjava/gnu/xml/xpath/XPathImpl.java
! ee39370bd25ad09eeb6e0adbb53d581a  libjava/gnu/xml/xpath/XPathParser.java
! 175ba6b0a1b888fa692fb3edf31a80f4  libjava/gnu/xml/xpath/XPathParser.y
! 966ed0ce3b2ea6019dccec26411d3f94  libjava/gnu/xml/xpath/XPathTokenizer.java
  7bd3b9ae8c6fa245e8d11b8d9c7accc4  libjava/include/.cvsignore
! d4fd72c4a920e8ada788fba1e9c72123  libjava/include/Makefile.am
! c8e5ef8943d81116f6e5eafb34256551  libjava/include/Makefile.in
! b2c1fd6580a74e9409da97b7d903e312  libjava/include/boehm-gc.h
! 88fed1de1d0186fb9a16b7ddf2302519  libjava/include/config.h.in
! c4f13c76610deabfbf13fce4ed092a52  libjava/include/darwin-signal.h
! 103d984e127298285d898fdf861bbcc4  libjava/include/default-signal.h
  61a8f68287be880d78be5f3a87955a5b  libjava/include/dwarf2-signal.h
! aa8a9cdeb8ac492990052b2e3f224667  libjava/include/execution.h
! 384a80fb5b03f2250d9c159001480e64  libjava/include/i386-signal.h
  236d1671f79ab5d9e6b987e93d051bc4  libjava/include/java-assert.h
  d66bf0f1a1d12efd11fc047959c52eab  libjava/include/java-chardecomp.h
! 50bb0fec40855cb56ca526cf5d28cb3a  libjava/include/java-chartables.h
  b88c9d141cd0ae62903ccbb3dc5a9e8d  libjava/include/java-cpool.h
  b08fcab1147c4c0f06f4b3054856c91b  libjava/include/java-insns.h
! ca6b408845d8e1c29884d2c27753d35b  libjava/include/java-interp.h
! d297209498258dac076993676296c072  libjava/include/java-props.h
! da63d5f9ac14db70b22f1d9c1dbd1dcf  libjava/include/java-stack.h
! 42182734bc3e93124e6d3f31b3277de2  libjava/include/jawt.h
! 763b17cf3295749a1d95aa7b7b837b7d  libjava/include/jawt_md.h
! 8029549dd2ab5917c1af9aa0920f8a43  libjava/include/jni.h
! 9f6ea93db62e39c45639f9cf4a33b226  libjava/include/jvm.h
  55ed6e8ea2ae96155602547fcfe5d96c  libjava/include/jvmpi.h
! 9441b9d3f94beac1a647035979b982bb  libjava/include/mips-signal.h
  6cb1b655ac757a3e299eb50f5dbee908  libjava/include/no-gc.h
! dc5ae11aa4d5874055cf367180dff7c5  libjava/include/no-threads.h
! 8de1c85740456c7a7de765e3c50522ef  libjava/include/pa-signal.h
! 6777c6d12df6603c54d46c1c6bba7bcf  libjava/include/posix-threads.h
  1f5cd39df961d644ef7e0c8536b88621  libjava/include/posix.h
  b315ac636a1fe99a9bd26e3e806cd134  libjava/include/powerpc-signal.h
! 6869fd746eb8c3dad811ceaa6bc10054  libjava/include/s390-signal.h
! 0dca6f40820422e5f1d84d99b08a04bb  libjava/include/sh-signal.h
! f5b53b2a72c970a11da53e6a1d293c2d  libjava/include/sparc-signal.h
  1ded054093de910d9786c62bc4fe8cc6  libjava/include/stamp-h.in
  fcc68eea0e37ca05d241fcd08098f4d2  libjava/include/win32-signal.h
! d799c46a0bab61ed909e368cd7dcc256  libjava/include/win32-threads.h
! b16429d3b1d37bdb78d6d1aa19160085  libjava/include/win32.h
! 90d1f158a328a75373335e2c604b85a6  libjava/include/x86_64-signal.h
! 66bc04d597b200ed081c1f0acd84e7f5  libjava/interpret.cc
! 43011f0235e06f668522936caddb04bf  libjava/java/applet/Applet.java
! 8a78e9d7be8730c4a2b49e6a832c4cbf  libjava/java/applet/AppletContext.java
! 1d252adca2809ef2a2b2c1d876a6ab1a  libjava/java/applet/AppletStub.java
! d83910a110efa240391bba1dcecbecaf  libjava/java/applet/AudioClip.java
! 6c72d3b470136a9f22fea1e5aefa5a85  libjava/java/awt/AWTError.java
! 927117b62f39b2021ce62b59c0aeb4e7  libjava/java/awt/AWTEvent.java
! cb52f58803314494fee4354844a9297b  libjava/java/awt/AWTEventMulticaster.java
! d97533fe22ed335dc6dd7871e8847526  libjava/java/awt/AWTException.java
! 683b7af0cc3d460b83e072fcbb7c893a  libjava/java/awt/AWTKeyStroke.java
! 4cb152a00ac7c47cc84589c3a61b2685  libjava/java/awt/AWTPermission.java
! 5eeefd4c3f3882b9c90fbc89474d5b4d  libjava/java/awt/ActiveEvent.java
! 9775c4a6dc73c4f5ecb814ef5bb0fb54  libjava/java/awt/Adjustable.java
! f0f0f4fa0650f190649ee87a9523ea2a  libjava/java/awt/AlphaComposite.java
! 98a68cf0352ce79910a4375f3e778717  libjava/java/awt/AttributeValue.java
! 07fd2f222eaa4314c4925027c6ac0ce8  libjava/java/awt/BasicStroke.java
! e451e766a666e32cf0d1defc2de82ee0  libjava/java/awt/BorderLayout.java
! e5b27acac8ca5f9efbecb4d03e1f9eff  libjava/java/awt/BufferCapabilities.java
! 361e4eea02148dcf7ff7f4252c71cd72  libjava/java/awt/Button.java
! e384588a42c96e73103535317a8bf965  libjava/java/awt/Canvas.java
! 13a0ffb891acaf63fb877096a2fcad29  libjava/java/awt/CardLayout.java
! faa0b6bb8624dffd1d8ee1315422f70c  libjava/java/awt/Checkbox.java
! 61ad680db9c5e04e487e3115c2b5cb07  libjava/java/awt/CheckboxGroup.java
! 0e633ea9f968032a1058c2f3d66c0b10  libjava/java/awt/CheckboxMenuItem.java
! ef0891d24e7547314feb8bcf103c6714  libjava/java/awt/Choice.java
! b56e8e479207574f2d691a350be651d4  libjava/java/awt/Color.java
! fb4cff4b8ea21b779406b3103cc38741  libjava/java/awt/ColorPaintContext.java
! 260fa17f0ada153f59bd2e26e2376868  libjava/java/awt/Component.java
! 9e7d200a4df1284f161eea89da642ad9  libjava/java/awt/ComponentOrientation.java
! 73260ee8d608612b11e20ef59f64d079  libjava/java/awt/Composite.java
! 2acf140b8cf30e1357ed1925d38e52d2  libjava/java/awt/CompositeContext.java
! 418ab865ae123cb9b170dd8b27f3ee86  libjava/java/awt/Container.java
! 83e385fce0e90d31fca15d40b22da806  libjava/java/awt/ContainerOrderFocusTraversalPolicy.java
  9921223b0d3ca57355f12f5b66fd05f2  libjava/java/awt/Cursor.java
! 0f46d07f8cce000d721fbfad1506a1d9  libjava/java/awt/DefaultFocusTraversalPolicy.java
! 7366007d2012f2646e51728e551c8836  libjava/java/awt/DefaultKeyboardFocusManager.java
! bfd29c0cbfef52faeeba5936958e53bc  libjava/java/awt/Dialog.java
! ebd74bd3ca903aab85522fa16b8854bc  libjava/java/awt/Dimension.java
! 6f9aea8af026be641bc405b77e1f5621  libjava/java/awt/DisplayMode.java
! 20950f5c9d7a016142e2d7b17536f6c6  libjava/java/awt/Event.java
! 204b5860ded3440fe7891ffc86fe5c39  libjava/java/awt/EventDispatchThread.java
! f6460def9948cea1f9cab771788fb23a  libjava/java/awt/EventQueue.java
! 500b133820a98f95a54b18c5ce628484  libjava/java/awt/FileDialog.java
! 5296ca809476b874c0635f23693990e0  libjava/java/awt/FlowLayout.java
  fc4c9cfcd95caab1e2a9ea5219217bfd  libjava/java/awt/FocusTraversalPolicy.java
! 7cc0f37107328d70a0cafbe5c47d05c1  libjava/java/awt/Font.java
! 0246a6fef8c21f984f6a8af81d9b6404  libjava/java/awt/FontFormatException.java
! b61245fd089307de3ef663d1e600ee33  libjava/java/awt/FontMetrics.java
! 10f2259a0fad2b5659773b477326c22e  libjava/java/awt/Frame.java
  20c194b521c972fd9476d8069cfbe340  libjava/java/awt/GradientPaint.java
! c62328407c3c860ac1f477581b0a6580  libjava/java/awt/Graphics.java
! 2466b896db6027f8643971276116813c  libjava/java/awt/Graphics2D.java
! 8ea98abc6e8555935088821af52ced9e  libjava/java/awt/GraphicsConfigTemplate.java
! 0cd7144b85957801b2cd7c0f270b2c9c  libjava/java/awt/GraphicsConfiguration.java
! f1bb88c175a59287cadf99732ee8f667  libjava/java/awt/GraphicsDevice.java
! fee2a4349eb23090449142e3841a9458  libjava/java/awt/GraphicsEnvironment.java
! 9bc99615884e2ac1f0f822e8c8516971  libjava/java/awt/GridBagConstraints.java
! 19bbb8c3bd8dff03cf7b09f343035e5f  libjava/java/awt/GridBagLayout.java
! 795c277367ac2ac6776da9d381f97366  libjava/java/awt/GridBagLayoutInfo.java
! 0077da7a15afeb78da54bb6d8cec014c  libjava/java/awt/GridLayout.java
! 3ae508118148b557d320911b9c08c320  libjava/java/awt/HeadlessException.java
! 05462dbd0a7def10dfcf92d09b26c994  libjava/java/awt/IllegalComponentStateException.java
! 640ec3ab2dd4e83e712922cd124944aa  libjava/java/awt/Image.java
  15af9c6c55f2c84d964b5df54010be3c  libjava/java/awt/ImageCapabilities.java
! 43f5c33196b6b98516d3881459a536a8  libjava/java/awt/Insets.java
! 1f68ad27bf561a9f6e342a2d53c2255a  libjava/java/awt/ItemSelectable.java
! f5fc2f553606baa2df256d9b0247fbf1  libjava/java/awt/JobAttributes.java
! d675610b1daa750e9c528b2a4de31774  libjava/java/awt/KeyEventDispatcher.java
! fbb0449b014296b8f1fd125068c194c0  libjava/java/awt/KeyEventPostProcessor.java
! 5ad9c1d87ebbd69c210e053f779a55f1  libjava/java/awt/KeyboardFocusManager.java
! 5ad845b062e69a61ecd246a473c88faa  libjava/java/awt/Label.java
! 9def19734d65ad865db3e0a28c3a5191  libjava/java/awt/LayoutManager.java
! baa2f52db34d2c9ce086be503d73fb28  libjava/java/awt/LayoutManager2.java
! 09df6e66fcc0b12dbc0ff176a207f5b7  libjava/java/awt/List.java
! 48517059597e160fad2b0c2e9430b781  libjava/java/awt/MediaTracker.java
! 65a250a98291c507f431cf774be41707  libjava/java/awt/Menu.java
! cf6cf23852850ad078346986883bc2c6  libjava/java/awt/MenuBar.java
! 60bdbfa9737217d20128d5e4358b5115  libjava/java/awt/MenuComponent.java
! 60e46eaef9899c603e9be327c11d515e  libjava/java/awt/MenuContainer.java
! 38a701675fdd41aa2d083e5d536e8e78  libjava/java/awt/MenuItem.java
  a096b412140e318860b192dc09f8379f  libjava/java/awt/MenuShortcut.java
! 33633338d77a1e65262c838a2ce88c66  libjava/java/awt/PageAttributes.java
! a4caa6d1fe02d9c9bd657758b2ff7e8f  libjava/java/awt/Paint.java
! b9d837e392fef7b0efcc78ab331ad875  libjava/java/awt/PaintContext.java
! 3b7a9fcc11111aeeb8b7bfb617546a8a  libjava/java/awt/Panel.java
! 486f260a628532252f48337b0457a06c  libjava/java/awt/Point.java
! 22b93925b97cdba0122df8b2669f876d  libjava/java/awt/Polygon.java
! b1a907b4460c003e1e2120e6eeab7a04  libjava/java/awt/PopupMenu.java
! 94667107c2912d540410fb20c68bfd62  libjava/java/awt/PrintGraphics.java
! e08fffd4841cb4a13fea4ea3a2083f80  libjava/java/awt/PrintJob.java
! 9da8b27fa0ef6891c7fd77b7a1c356bf  libjava/java/awt/Rectangle.java
! b83f8b1be3660935a6342a912744668f  libjava/java/awt/RenderingHints.java
! 60de43b69e7801b5040f58ff6b1d4d55  libjava/java/awt/Robot.java
! ac9809b9acb014fe80cf4de3fb230b8b  libjava/java/awt/ScrollPane.java
  ce5d82ec33ea2ee47266ccea870e228e  libjava/java/awt/ScrollPaneAdjustable.java
! 472f1004399ff079c5646997c239d39b  libjava/java/awt/Scrollbar.java
! 7a5eb5c5e5958905d82e4a1802e92d98  libjava/java/awt/Shape.java
! b05f65723b7724b84e8211b4e61723d0  libjava/java/awt/Stroke.java
! 2a41e692569a37ddc21dfe3eae22c97f  libjava/java/awt/SystemColor.java
! 5e7aaf0ec95be6401dbd09fec586bdbb  libjava/java/awt/TextArea.java
! 067f03badcabb82a4bfa94e2d6456319  libjava/java/awt/TextComponent.java
! 68886f5cc5fc6761a1311b08f4fe34a0  libjava/java/awt/TextField.java
  19dfd7a19117344b4842c84fe44f887f  libjava/java/awt/TexturePaint.java
! 23cce88f73be968af192c3f4e6a68007  libjava/java/awt/Toolkit.java
! 65059a94fd1c5b5cc67bfc44c4c01811  libjava/java/awt/Transparency.java
! 89d9e5bded0c3426c303e6ec50fd86e0  libjava/java/awt/Window.java
! 00d078c199ff67b12825215f83ad93d4  libjava/java/awt/color/CMMException.java
! 0528fda7ca3ecafc9bfa1354bb45faa0  libjava/java/awt/color/ColorSpace.java
! 529918c9e082ba26a991adbac5700fc9  libjava/java/awt/color/ICC_ColorSpace.java
! 336ce949459a7f3978d7e75bf0f67868  libjava/java/awt/color/ICC_Profile.java
! 63827cc0dd5eeaa8e977c8adb45c484b  libjava/java/awt/color/ICC_ProfileGray.java
! 3977f65d276b7836331745952f687c0c  libjava/java/awt/color/ICC_ProfileRGB.java
! 3c9583e3149c2a7c96276e96ea6cae07  libjava/java/awt/color/ProfileDataException.java
! 9dd7c2ad1e45c4d64e4d2df344813a65  libjava/java/awt/datatransfer/Clipboard.java
! 661658e816213c9c68b93cd330621493  libjava/java/awt/datatransfer/ClipboardOwner.java
! 87663bbff3ec05abef8d3d6c643cbfc1  libjava/java/awt/datatransfer/DataFlavor.java
  e3b9255510e608e09fe7419c9d08eec2  libjava/java/awt/datatransfer/FlavorMap.java
! 24fefc85a19c504c7cde6c5417847da7  libjava/java/awt/datatransfer/FlavorTable.java
! 4df8695a985bd9573bb8c5f5875d5fab  libjava/java/awt/datatransfer/MimeTypeParseException.java
! a2a519bb6172a0883291d29ef749f3e7  libjava/java/awt/datatransfer/StringSelection.java
! de06f29bdddb7c96723ec337d6778ad7  libjava/java/awt/datatransfer/SystemFlavorMap.java
! c323c07d8035363b5f9b7447a5724ef4  libjava/java/awt/datatransfer/Transferable.java
! 5bce440399e016e80ee0a2c516d9d1fb  libjava/java/awt/datatransfer/UnsupportedFlavorException.java
! 375355ef7b4fb0b2f734685707865f18  libjava/java/awt/dnd/Autoscroll.java
! 2c23b855f96f64e05f8b1a84a6137ef8  libjava/java/awt/dnd/DnDConstants.java
  e933b46a4fdc1c72bc94f3a577a639c0  libjava/java/awt/dnd/DnDEventMulticaster.java
  cdc10e974325532d60321aef0eaaa47e  libjava/java/awt/dnd/DragGestureEvent.java
! 393b34531e783fb43734d92f3920695e  libjava/java/awt/dnd/DragGestureListener.java
  164bea8021b1ae791514c3dba05f290d  libjava/java/awt/dnd/DragGestureRecognizer.java
  9aa7da2405c599d3d5bce67645e59d8f  libjava/java/awt/dnd/DragSource.java
! 77d10a0d8ac8480a7719f50570f8e0d6  libjava/java/awt/dnd/DragSourceAdapter.java
  3fadd964f6006cb8c54790248ff9d5a2  libjava/java/awt/dnd/DragSourceContext.java
  7461af1d7af473250fd966cce260d2fd  libjava/java/awt/dnd/DragSourceDragEvent.java
! 79251b7db42036bea06e767baaba36bf  libjava/java/awt/dnd/DragSourceDropEvent.java
  0facb142f57be08d9db4b41db291d509  libjava/java/awt/dnd/DragSourceEvent.java
! e1548b75df4b956f404520574ec1b686  libjava/java/awt/dnd/DragSourceListener.java
! 3a246d0745c7dc94fadd21bbe91aad4f  libjava/java/awt/dnd/DragSourceMotionListener.java
! 5616c6484e20774570fb72066f93dac4  libjava/java/awt/dnd/DropTarget.java
! 25c70686335662d15d1d2ae3500e1059  libjava/java/awt/dnd/DropTargetAdapter.java
! 6da1e9a5450ebc80b9afa57d38819287  libjava/java/awt/dnd/DropTargetContext.java
! 9606648897e9463b8d08d571f9f55c42  libjava/java/awt/dnd/DropTargetDragEvent.java
  af5571db15c6d7b423c7392d3f44c06c  libjava/java/awt/dnd/DropTargetDropEvent.java
  0927c1140cfc62aeac151505f200658a  libjava/java/awt/dnd/DropTargetEvent.java
! c339b2e8b979113debe06a614f4eb1ad  libjava/java/awt/dnd/DropTargetListener.java
! f14456c9e07a34abd6842e9f81815e1d  libjava/java/awt/dnd/InvalidDnDOperationException.java
! 479e25485053374685dd8e0123025e3a  libjava/java/awt/dnd/MouseDragGestureRecognizer.java
  e1056b77c980694886385da139d0cfd4  libjava/java/awt/dnd/peer/DragSourceContextPeer.java
! f2372bc6653f6e55eb9625d3026b1474  libjava/java/awt/dnd/peer/DropTargetContextPeer.java
  8e7e7d869374e9e5b75c29858ab374cc  libjava/java/awt/dnd/peer/DropTargetPeer.java
! 7437287ce71d2bd67c3a2015db5d0c85  libjava/java/awt/event/AWTEventListener.java
! 4e4dc5ad596ae66d447fdb0dc4c98a03  libjava/java/awt/event/AWTEventListenerProxy.java
! 93a8f653905bef9c957cf0d7858560e9  libjava/java/awt/event/ActionEvent.java
! a45f7fe04097c4bb08dc40a4aa1761ac  libjava/java/awt/event/ActionListener.java
! 702af4ac06ab9384ce8654910cd2dbd5  libjava/java/awt/event/AdjustmentEvent.java
! b3d0a4a331f1e409bb5e07de24a8971a  libjava/java/awt/event/AdjustmentListener.java
! e9f95f606742a09e45703460df3edc21  libjava/java/awt/event/ComponentAdapter.java
! 105c5ec46789e607cec5edb9ea14a9e7  libjava/java/awt/event/ComponentEvent.java
! ec6b13e8889c72c6b24d4f60ad46ce1c  libjava/java/awt/event/ComponentListener.java
! 346886612dad69fba4e01c2431a3fa9d  libjava/java/awt/event/ContainerAdapter.java
! 8b251db9b9e90db0dce821c91ca6a56f  libjava/java/awt/event/ContainerEvent.java
! 7020b2c762d9433fb9a3776cef2272ac  libjava/java/awt/event/ContainerListener.java
! de709606d17c65812e4585f0a1da4919  libjava/java/awt/event/FocusAdapter.java
! 93573ae584457e115bece78249a2ce71  libjava/java/awt/event/FocusEvent.java
! 6f6498faa4b1d1fcb7e44f225ece2def  libjava/java/awt/event/FocusListener.java
! 187342bb2057027c6d2ff698e99179d5  libjava/java/awt/event/HierarchyBoundsAdapter.java
  39311ef84a4335f8d2c2cf7c269e5532  libjava/java/awt/event/HierarchyBoundsListener.java
  ad23d63fc92c24bf8cf64fbccde3a6e7  libjava/java/awt/event/HierarchyEvent.java
  f37a178560d5582315acb39cb03829e6  libjava/java/awt/event/HierarchyListener.java
! 05a17156c27785d485da4034d1eb3da4  libjava/java/awt/event/InputEvent.java
! 49b3905688e50c154e549888cc8427a0  libjava/java/awt/event/InputMethodEvent.java
! 4b135904fb6766dc6e81960dfdff02d5  libjava/java/awt/event/InputMethodListener.java
! d8617c8b7590ed5f0a06db20e6a7d51b  libjava/java/awt/event/InvocationEvent.java
! 3e6bd30a1963371a1901a84a554a37d8  libjava/java/awt/event/ItemEvent.java
! c26f999b844d95805b675962df21cf48  libjava/java/awt/event/ItemListener.java
! c034144b29003b06a0b619b6c5cab372  libjava/java/awt/event/KeyAdapter.java
! 4cdd09aa55a67f256ea0403021a99289  libjava/java/awt/event/KeyEvent.java
! cf8b4951c634d7529747dad0b308c013  libjava/java/awt/event/KeyListener.java
! fe8bea0b5f7d2ab68c4f31b00a19b8a9  libjava/java/awt/event/MouseAdapter.java
! 7682223e6df49a29175b962ba7bf884d  libjava/java/awt/event/MouseEvent.java
! 4e5703bad1926e16dc376d17941c25d1  libjava/java/awt/event/MouseListener.java
! 0acb6a5348ea7d540e4e3b0bfaf95ef2  libjava/java/awt/event/MouseMotionAdapter.java
! fcf6bc187665e036cc04f66006dfa79d  libjava/java/awt/event/MouseMotionListener.java
! f4c24174251ab8e3e1b473dfefb5cd0e  libjava/java/awt/event/MouseWheelEvent.java
! 3c0bc38487491520094bee2c88813047  libjava/java/awt/event/MouseWheelListener.java
! f3359dde52d5db3ca62a5f047cc61983  libjava/java/awt/event/PaintEvent.java
! 10f674897ca3c5911ee76665a46f1e3f  libjava/java/awt/event/TextEvent.java
! 4cf8a50c6374ff7c91f3a9a3c85e4d7e  libjava/java/awt/event/TextListener.java
! beb0710da7d060ee6bea361a6d46dda9  libjava/java/awt/event/WindowAdapter.java
! 0168806ca968c02b372fe716744749a8  libjava/java/awt/event/WindowEvent.java
! 4a41e2e0756c018a0fe19a33c7752fb7  libjava/java/awt/event/WindowFocusListener.java
! 4874f39c3a97a1e726747fff8f270f0d  libjava/java/awt/event/WindowListener.java
! 3d08f1effff08872cf5a9a16dc5f53b7  libjava/java/awt/event/WindowStateListener.java
  cf1a5c4ec599f6c0ffc3354539299335  libjava/java/awt/font/FontRenderContext.java
  369eb93c6bc665e100251589b3e5c4c4  libjava/java/awt/font/GlyphJustificationInfo.java
  d82ca7e0f444828e67a5642a21484fbd  libjava/java/awt/font/GlyphMetrics.java
*************** ca37409e08e9c0569a0bd2f9c0ab45e7  libjav
*** 17473,17556 ****
  3d0a6a1238e2b24cc3e1598d37dedcaf  libjava/java/awt/font/NumericShaper.java
  b4806e8beb3912f6aab88287278a1572  libjava/java/awt/font/OpenType.java
  507d24b99169448c3e339a37e152633a  libjava/java/awt/font/ShapeGraphicAttribute.java
! fd2328a0c014248917c3ad1fde856cb6  libjava/java/awt/font/TextAttribute.java
! 4badd8a5d8cc515c1d346d80c1b8c9ff  libjava/java/awt/font/TextHitInfo.java
! 87c3924339e47da8174de4e1e5dceb52  libjava/java/awt/font/TextLayout.java
  e5e3af50e287228babe251d896866395  libjava/java/awt/font/TextMeasurer.java
! d5aa22c58cb1286dd197b62d95e68c6e  libjava/java/awt/font/TransformAttribute.java
! 8704fd07f1fbef87baada78e305f5787  libjava/java/awt/geom/AffineTransform.java
! 5f431eb5df07a9590121e1bf78f1ce90  libjava/java/awt/geom/Arc2D.java
! 9964bf05cf654c6ba48a78cd4054512e  libjava/java/awt/geom/Area.java
! 23d2d330a9f97ae62ae0c7b9c3b5544a  libjava/java/awt/geom/CubicCurve2D.java
! d95f03a90a30d351b4dc3e0348806f00  libjava/java/awt/geom/Dimension2D.java
! a5ca810592958e33ecab8575a60e4848  libjava/java/awt/geom/Ellipse2D.java
  4c95290c440207b218a38d3321e224bc  libjava/java/awt/geom/FlatteningPathIterator.java
! 5d6faddc12897709fc108f4cae5e436f  libjava/java/awt/geom/GeneralPath.java
! b178b215748941f3a75996c04c5aa16f  libjava/java/awt/geom/IllegalPathStateException.java
! 9d606de43a539d399834d2d5e558f899  libjava/java/awt/geom/Line2D.java
! b7b944c743263ce7b36acc79b6f991ee  libjava/java/awt/geom/NoninvertibleTransformException.java
! 10302086d422e416c9512b0a58b89c46  libjava/java/awt/geom/PathIterator.java
! 0844d2159d0b4eaab93194b657fb1545  libjava/java/awt/geom/Point2D.java
! fd0b9cd7c50070b23f60dfb65f5e599f  libjava/java/awt/geom/QuadCurve2D.java
! 40457e441f6c57c70c62f91f8f0b35ab  libjava/java/awt/geom/Rectangle2D.java
! 9f4ae199d4069ab46722e425f25d8d3a  libjava/java/awt/geom/RectangularShape.java
! c2ae7bd6b17c5307eac954dd735f745d  libjava/java/awt/geom/RoundRectangle2D.java
  0125a79ecd96cf321a605a10b7359122  libjava/java/awt/geom/doc-files/CubicCurve2D-1.png
  9647917cd4939a852a459039c94313e2  libjava/java/awt/geom/doc-files/CubicCurve2D-2.png
  5eadc6fce85ba8e2d84cdcd4cb512dad  libjava/java/awt/geom/doc-files/CubicCurve2D-3.png
  c38ed1af43ab69d5454c0bf994b1950c  libjava/java/awt/geom/doc-files/CubicCurve2D-4.png
  6203261b61d166742b5201398a4f11f3  libjava/java/awt/geom/doc-files/CubicCurve2D-5.png
  2c2566d33581cd7c8261d08f55df5271  libjava/java/awt/geom/doc-files/FlatteningPathIterator-1.html
  5ba45ab2e05f605014663667078c973f  libjava/java/awt/geom/doc-files/QuadCurve2D-1.png
  3dd6e35d933217af34b1a286c80c543b  libjava/java/awt/geom/doc-files/QuadCurve2D-2.png
  f5cfefa54c4bc6113d35471de53d85fb  libjava/java/awt/geom/doc-files/QuadCurve2D-3.png
  68db99c858f2599b39cd5be434c04d56  libjava/java/awt/geom/doc-files/QuadCurve2D-4.png
  50969a468353f39012fd98d2b327fa5a  libjava/java/awt/geom/doc-files/QuadCurve2D-5.png
! 31e9f296c312d44aeb21ceddab1dcf89  libjava/java/awt/im/InputContext.java
! bb280d139ed89c8a51ee506b66fb086d  libjava/java/awt/im/InputMethodHighlight.java
! ef9ae131e90bc3256c61befdb80a07c5  libjava/java/awt/im/InputMethodRequests.java
! 18add6f0457301c6880478609829adf6  libjava/java/awt/im/InputSubset.java
! df7e27f8cc83b4e746fd7378ba1cf1bb  libjava/java/awt/im/spi/InputMethod.java
! edf019570ba23f1f59579861b50cd6c5  libjava/java/awt/im/spi/InputMethodContext.java
! 44b8ec2edc6f5e18ff65e35ba565e0f5  libjava/java/awt/im/spi/InputMethodDescriptor.java
  0c9f01091a21b94db3444d172755ece3  libjava/java/awt/image/AreaAveragingScaleFilter.java
  a9e9b5adecf23376f185aeddfde5ecfa  libjava/java/awt/image/BufferStrategy.java
! e36346687933d9ccdab8875360ecdedc  libjava/java/awt/image/BufferedImage.java
  687f44fc7cd60db11e8bc6b2c3799a3f  libjava/java/awt/image/BufferedImageOp.java
! 1f3040e53ef9fe394cf6f01748349d3c  libjava/java/awt/image/ColorModel.java
! 96ef1095bac98a165946400dddaa306c  libjava/java/awt/image/ComponentColorModel.java
! 6a1f745d7d553db5c193c3cfa12f6d3a  libjava/java/awt/image/ComponentSampleModel.java
! 0587cd99c7c9f90c7ea53282aa456be7  libjava/java/awt/image/CropImageFilter.java
! 62cf4e99af6209f73337578088883da5  libjava/java/awt/image/DataBuffer.java
! bae608f9f39a66f7f7068983e7ad7501  libjava/java/awt/image/DataBufferByte.java
! 569cd270dac8bd1f9cb1c1d858b56a64  libjava/java/awt/image/DataBufferInt.java
! 4374e59acf0c7d9b25cbe63464160757  libjava/java/awt/image/DataBufferUShort.java
! 7a19261021b564388582d6c4948a381e  libjava/java/awt/image/DirectColorModel.java
  051cab3ebc66962cacd3ff197d734321  libjava/java/awt/image/FilteredImageSource.java
  cfbaf4aea32b531a10b06b8b412b2c6c  libjava/java/awt/image/ImageConsumer.java
  a478556108636d47ce370d863568969c  libjava/java/awt/image/ImageFilter.java
  eb9069d7b480c98c9e531c7f423a468b  libjava/java/awt/image/ImageObserver.java
  a0738cc36c64389d832fc74d5c0514b1  libjava/java/awt/image/ImageProducer.java
! 0b3d3084be8bbc6143307ff7fb98e589  libjava/java/awt/image/ImagingOpException.java
! 1a0984a05bb874d3978dbcb629abca0f  libjava/java/awt/image/IndexColorModel.java
! 4ec678ab93fb57a19a4afe342ed3160d  libjava/java/awt/image/MemoryImageSource.java
! 1f6340859b90f65d52d2aa29197233bb  libjava/java/awt/image/PackedColorModel.java
! cc0a1e0c14f6ce388c258366e78c6dda  libjava/java/awt/image/PixelGrabber.java
! f1619c6742aa3f0b3b4387d9b731eea3  libjava/java/awt/image/RGBImageFilter.java
! c6cf977448c40893e507f1cf321c1d34  libjava/java/awt/image/Raster.java
! 436a72404f66c20255619092c7245c47  libjava/java/awt/image/RasterFormatException.java
! bf60618c4f2319fa73f4b71109fbe3cb  libjava/java/awt/image/RasterOp.java
  54f203ceb8a9f5033964b49686d2560b  libjava/java/awt/image/RenderedImage.java
! 3b186c2d12769f7f62ecf78f9f960d7f  libjava/java/awt/image/ReplicateScaleFilter.java
! 504ba0ef53f406e8d7ad38542cb0ce80  libjava/java/awt/image/SampleModel.java
! 61f9671dd22ec2e19959365203dbcb66  libjava/java/awt/image/SinglePixelPackedSampleModel.java
  5138469b07703169039d8312ea4c4a8b  libjava/java/awt/image/TileObserver.java
  a99b9c92d17ca4bea0f626f18da8cf40  libjava/java/awt/image/VolatileImage.java
! cb50a2cb54892701d6b45a2cada641f4  libjava/java/awt/image/WritableRaster.java
  cf415db7fee0c628d3ff387a24b6d03f  libjava/java/awt/image/WritableRenderedImage.java
  f64e55785690ea95cc64ebdd2cd00897  libjava/java/awt/image/renderable/ContextualRenderedImageFactory.java
  52d1d93679aaba41b63453f6050b6451  libjava/java/awt/image/renderable/ParameterBlock.java
! f0d139fca9a182559602ab02ce892c17  libjava/java/awt/image/renderable/RenderContext.java
  32cb582263c6573bd52ce335a145acc8  libjava/java/awt/image/renderable/RenderableImage.java
  7f52bae703e37a16daa07f3284cd1fbf  libjava/java/awt/image/renderable/RenderableImageOp.java
  7424bc4ff8c9c43672fd214aaf3dd38a  libjava/java/awt/image/renderable/RenderableImageProducer.java
--- 20906,21009 ----
  3d0a6a1238e2b24cc3e1598d37dedcaf  libjava/java/awt/font/NumericShaper.java
  b4806e8beb3912f6aab88287278a1572  libjava/java/awt/font/OpenType.java
  507d24b99169448c3e339a37e152633a  libjava/java/awt/font/ShapeGraphicAttribute.java
! 00925642c7bb47f1aa52f57ecd6d1747  libjava/java/awt/font/TextAttribute.java
! 9768cd0d537ed8115e34b7c7c12a23f1  libjava/java/awt/font/TextHitInfo.java
! 505204d7f786907def5dec0e3b3d3416  libjava/java/awt/font/TextLayout.java
  e5e3af50e287228babe251d896866395  libjava/java/awt/font/TextMeasurer.java
! 25f105d0026d74a5d1b97b00a6412e4d  libjava/java/awt/font/TransformAttribute.java
! 009bf9e9fbe5bd8511c85da4c516e4e7  libjava/java/awt/geom/AffineTransform.java
! 9d9b4ae4c1618f77df99c49bd9638777  libjava/java/awt/geom/Arc2D.java
! 03b80b18e0dfec1bf00c9f60d42d5466  libjava/java/awt/geom/Area.java
! 8e986ca9c6e4740d2bcced7a12866f12  libjava/java/awt/geom/CubicCurve2D.java
! 494e5ac1b88d20afd01790dc40da843f  libjava/java/awt/geom/Dimension2D.java
! 2688abd6847543152f6db5a2cd9e4316  libjava/java/awt/geom/Ellipse2D.java
  4c95290c440207b218a38d3321e224bc  libjava/java/awt/geom/FlatteningPathIterator.java
! d2bcbbfa7fc4a864215cbf9333526ec3  libjava/java/awt/geom/GeneralPath.java
! af27948bba6dbc7bb4b1cf6d5a1e3ab8  libjava/java/awt/geom/IllegalPathStateException.java
! b9ebb96937aa7fee031aa5c7d89af771  libjava/java/awt/geom/Line2D.java
! ad5ff62558c585a60ccba148a2f96478  libjava/java/awt/geom/NoninvertibleTransformException.java
! 8736c5233357558e69301f9803626d14  libjava/java/awt/geom/PathIterator.java
! 2136d0b30176d82bbd6c15f86d539c8a  libjava/java/awt/geom/Point2D.java
! 9ef1bcf8a8bbdcbc6ea63c989f9cc24a  libjava/java/awt/geom/QuadCurve2D.java
! 128ad4ab6daf7a16eb1634fc1c4cb545  libjava/java/awt/geom/Rectangle2D.java
! 623abf2076868b27f14a794c8682e843  libjava/java/awt/geom/RectangularShape.java
! 1e479f398f31b87fb8db543d4e765b71  libjava/java/awt/geom/RoundRectangle2D.java
! c11cd969b2267c6dc34298ac0e420a4b  libjava/java/awt/geom/doc-files/Area-1.png
  0125a79ecd96cf321a605a10b7359122  libjava/java/awt/geom/doc-files/CubicCurve2D-1.png
  9647917cd4939a852a459039c94313e2  libjava/java/awt/geom/doc-files/CubicCurve2D-2.png
  5eadc6fce85ba8e2d84cdcd4cb512dad  libjava/java/awt/geom/doc-files/CubicCurve2D-3.png
  c38ed1af43ab69d5454c0bf994b1950c  libjava/java/awt/geom/doc-files/CubicCurve2D-4.png
  6203261b61d166742b5201398a4f11f3  libjava/java/awt/geom/doc-files/CubicCurve2D-5.png
+ 4fb914165077bb1aea9e0707b4f07c25  libjava/java/awt/geom/doc-files/Ellipse-1.png
  2c2566d33581cd7c8261d08f55df5271  libjava/java/awt/geom/doc-files/FlatteningPathIterator-1.html
+ 28d2dd159f2f10588be090aafe83924b  libjava/java/awt/geom/doc-files/GeneralPath-1.png
  5ba45ab2e05f605014663667078c973f  libjava/java/awt/geom/doc-files/QuadCurve2D-1.png
  3dd6e35d933217af34b1a286c80c543b  libjava/java/awt/geom/doc-files/QuadCurve2D-2.png
  f5cfefa54c4bc6113d35471de53d85fb  libjava/java/awt/geom/doc-files/QuadCurve2D-3.png
  68db99c858f2599b39cd5be434c04d56  libjava/java/awt/geom/doc-files/QuadCurve2D-4.png
  50969a468353f39012fd98d2b327fa5a  libjava/java/awt/geom/doc-files/QuadCurve2D-5.png
! f224cfbc2c0bbc5c99f7d67bd345ad22  libjava/java/awt/im/InputContext.java
! 742c7c2bd7e2c6d12544225a9925d36d  libjava/java/awt/im/InputMethodHighlight.java
! 29f3a974b4264ab2f0a7ca41a2d4f19a  libjava/java/awt/im/InputMethodRequests.java
! 2b70d1f9fcaf0c079fb4ad26c702d265  libjava/java/awt/im/InputSubset.java
! c5c83f2439e44e516c94d1ad768c3d7b  libjava/java/awt/im/spi/InputMethod.java
! e23d739312298b614e25611b5bc14b70  libjava/java/awt/im/spi/InputMethodContext.java
! ababdee55b6253465b0e2576aca3efb0  libjava/java/awt/im/spi/InputMethodDescriptor.java
! 23605d1470b2d6649eebd37fc9841be8  libjava/java/awt/image/AffineTransformOp.java
  0c9f01091a21b94db3444d172755ece3  libjava/java/awt/image/AreaAveragingScaleFilter.java
+ fa2332d08e56664918573a8d251cbd17  libjava/java/awt/image/BandCombineOp.java
+ 19a3b780b8afc1928bd1f03c3a086686  libjava/java/awt/image/BandedSampleModel.java
  a9e9b5adecf23376f185aeddfde5ecfa  libjava/java/awt/image/BufferStrategy.java
! 25a46fdf9d66b3ea87ac03fa457086a2  libjava/java/awt/image/BufferedImage.java
! dc324677efaf6bcb7c0625c5c6fdefe7  libjava/java/awt/image/BufferedImageFilter.java
  687f44fc7cd60db11e8bc6b2c3799a3f  libjava/java/awt/image/BufferedImageOp.java
! 98d9dc375651688ad816d444c78fa157  libjava/java/awt/image/ByteLookupTable.java
! 415aa760eb1c2f293092173d71dea9cd  libjava/java/awt/image/ColorConvertOp.java
! c15beb4d05460301b70ae09ff33b016f  libjava/java/awt/image/ColorModel.java
! 96840c2546a91b17d7c6c5559c7b2953  libjava/java/awt/image/ComponentColorModel.java
! b6416ed589e75c6687b98ab6d8f25bed  libjava/java/awt/image/ComponentSampleModel.java
! 9cbbccf982cc7652d24b695ae2bd4fc1  libjava/java/awt/image/ConvolveOp.java
! 3ba6f1cbec0ca542a55914f540bc5790  libjava/java/awt/image/CropImageFilter.java
! 6d8dacb0080d0e2c12d37076f093e354  libjava/java/awt/image/DataBuffer.java
! 17191aa63969d415ece96d9983b594f7  libjava/java/awt/image/DataBufferByte.java
! 487972dccca7d4cf0394dbc7133f5c93  libjava/java/awt/image/DataBufferDouble.java
! 1724fd3e2a3e633c69ec5b456bf97a5e  libjava/java/awt/image/DataBufferFloat.java
! d07c8707d9f749d46f76303db55d0457  libjava/java/awt/image/DataBufferInt.java
! 7392223c7194e5829daed15891d33e3c  libjava/java/awt/image/DataBufferShort.java
! 1de35d1eecce53d536fa1cb18fa65e5e  libjava/java/awt/image/DataBufferUShort.java
! 38421350c0fa488057ddb6527e94cd03  libjava/java/awt/image/DirectColorModel.java
  051cab3ebc66962cacd3ff197d734321  libjava/java/awt/image/FilteredImageSource.java
  cfbaf4aea32b531a10b06b8b412b2c6c  libjava/java/awt/image/ImageConsumer.java
  a478556108636d47ce370d863568969c  libjava/java/awt/image/ImageFilter.java
  eb9069d7b480c98c9e531c7f423a468b  libjava/java/awt/image/ImageObserver.java
  a0738cc36c64389d832fc74d5c0514b1  libjava/java/awt/image/ImageProducer.java
! 882f4fc0efb00f59a66b59ce9149162b  libjava/java/awt/image/ImagingOpException.java
! 0714c2544184a775c2fe53c90ee630f5  libjava/java/awt/image/IndexColorModel.java
! 2485244738300e593a6be46a9c70b81b  libjava/java/awt/image/Kernel.java
! c45533b07e87427331851f02542193cd  libjava/java/awt/image/LookupOp.java
! 3e09c0253fe94dd224d706242dbbb51c  libjava/java/awt/image/LookupTable.java
! 57e057621a4b002c9f7c34ce2db98acb  libjava/java/awt/image/MemoryImageSource.java
! 7b97adcbf97b9c2a3f6a99c67311608e  libjava/java/awt/image/MultiPixelPackedSampleModel.java
! dd7c58f7461a7e41a7261efb2acdcb16  libjava/java/awt/image/PackedColorModel.java
! 91ddec89fac6d842e69422500f0e9f78  libjava/java/awt/image/PixelGrabber.java
! 246dcf8deccb41d500fdfaa046f1514b  libjava/java/awt/image/PixelInterleavedSampleModel.java
! 67b68f3e736b6d60f62668f688720413  libjava/java/awt/image/RGBImageFilter.java
! 2c2a1d012516a2838f90aeec334b7960  libjava/java/awt/image/Raster.java
! 4ad592cf357b3d44a22abe4e7b8876cf  libjava/java/awt/image/RasterFormatException.java
! 9b8fb0a5092b7b63e21ccf40286dd65a  libjava/java/awt/image/RasterOp.java
  54f203ceb8a9f5033964b49686d2560b  libjava/java/awt/image/RenderedImage.java
! a449ff0f0fac0517c536d8ab36b90122  libjava/java/awt/image/ReplicateScaleFilter.java
! 1e4dc234323c71b83a3e3076b1181170  libjava/java/awt/image/RescaleOp.java
! c91001cb7ab138cd3a056dd078c906d8  libjava/java/awt/image/SampleModel.java
! 34e13fdfce2dbc46c0df97b8f0c3636d  libjava/java/awt/image/ShortLookupTable.java
! 6fea0536664196de9ef59b6aa7e48b23  libjava/java/awt/image/SinglePixelPackedSampleModel.java
  5138469b07703169039d8312ea4c4a8b  libjava/java/awt/image/TileObserver.java
  a99b9c92d17ca4bea0f626f18da8cf40  libjava/java/awt/image/VolatileImage.java
! f8991ac3d21260d9ea9b6db9ef971a4f  libjava/java/awt/image/WritableRaster.java
  cf415db7fee0c628d3ff387a24b6d03f  libjava/java/awt/image/WritableRenderedImage.java
  f64e55785690ea95cc64ebdd2cd00897  libjava/java/awt/image/renderable/ContextualRenderedImageFactory.java
  52d1d93679aaba41b63453f6050b6451  libjava/java/awt/image/renderable/ParameterBlock.java
! 245f2b72f1cb77783f428ba4373b8dcd  libjava/java/awt/image/renderable/RenderContext.java
  32cb582263c6573bd52ce335a145acc8  libjava/java/awt/image/renderable/RenderableImage.java
  7f52bae703e37a16daa07f3284cd1fbf  libjava/java/awt/image/renderable/RenderableImageOp.java
  7424bc4ff8c9c43672fd214aaf3dd38a  libjava/java/awt/image/renderable/RenderableImageProducer.java
*************** d3f19a9bd26f42796989946d0b45b6c8  libjav
*** 17569,17636 ****
  607afb40c7d329c3123d6af89e149d79  libjava/java/awt/peer/LabelPeer.java
  f03bff26c6244a8e3030dd4de389b3df  libjava/java/awt/peer/LightweightPeer.java
  ba05e4d196a8c6627bbaaa8bd29c45bb  libjava/java/awt/peer/ListPeer.java
! 907d8ff02be97dbf67214fbe722bd3cd  libjava/java/awt/peer/MenuBarPeer.java
  fd2f181100890eb0924fa1009f04ab1d  libjava/java/awt/peer/MenuComponentPeer.java
  3974d3d1ecc4a9e230a3e675f875d0df  libjava/java/awt/peer/MenuItemPeer.java
! 6399b6068a2688b2b9afd0e20c65adfe  libjava/java/awt/peer/MenuPeer.java
  6dc14944905607999fe9a1531106d582  libjava/java/awt/peer/PanelPeer.java
  8cf6af571354557699f6eaa2f205f21a  libjava/java/awt/peer/PopupMenuPeer.java
! 40cf35a6c19e450048d344c94be66fdc  libjava/java/awt/peer/RobotPeer.java
  c93dc34d461c58c8fddb71bcde957f83  libjava/java/awt/peer/ScrollPanePeer.java
  a6568884f1425ef19fcbfd6711276dc7  libjava/java/awt/peer/ScrollbarPeer.java
  f4e0ea9848784e2ba0c3587e8b272ec0  libjava/java/awt/peer/TextAreaPeer.java
  5dccfbeb171b621806f6d2be563d6854  libjava/java/awt/peer/TextComponentPeer.java
  547f9470fed7db16c2b5fd0288f17c1b  libjava/java/awt/peer/TextFieldPeer.java
  7ed2acaa92132f110fa96d7cfc4f8ffe  libjava/java/awt/peer/WindowPeer.java
! 59ae2b10d56700da7cdcfe6b05f542e9  libjava/java/awt/print/Book.java
  274138aeb527d88b91bfaa6f662d5cec  libjava/java/awt/print/PageFormat.java
  5463f1b8596d0a7db2ac6bfc5bb60e0a  libjava/java/awt/print/Pageable.java
  79b6dd1bc84d2bab4cbd3bcbe9188594  libjava/java/awt/print/Paper.java
! f1c9fde34f11b52619cc222c6c7cec81  libjava/java/awt/print/Printable.java
! b3178d84b02a74a12516c83458408cea  libjava/java/awt/print/PrinterAbortException.java
! e38befc43b2c89e964d684323aeff386  libjava/java/awt/print/PrinterException.java
  3b61e6d9f83f74816524c533fac38b03  libjava/java/awt/print/PrinterGraphics.java
! fc45ba2909ad4b13aba017e137c9e681  libjava/java/awt/print/PrinterIOException.java
! cb6d947d8fd461441b3b430da53b2619  libjava/java/awt/print/PrinterJob.java
! 0cb9010de225803d08e01f009607ef08  libjava/java/beans/AppletInitializer.java
! 734fcb472bf5a82324afca4b9a421010  libjava/java/beans/BeanDescriptor.java
  75d6817fdcac41d0c22560e7341c7174  libjava/java/beans/BeanInfo.java
! 8ea56f92e5754fba85b7d433c1bb800b  libjava/java/beans/Beans.java
  ae4d1123bc81131a75e826aaf27d617f  libjava/java/beans/Customizer.java
  b778e7004ea911e0a22b895efd828e0d  libjava/java/beans/DesignMode.java
! b572745e97a5bf46dbe575b3c07c0eaa  libjava/java/beans/EventSetDescriptor.java
! d00f57947407fbfb39643493b9cc7c20  libjava/java/beans/ExceptionListener.java
  c9c807bc217adf3352b5b8964078bdd0  libjava/java/beans/FeatureDescriptor.java
  9c10fa3e70f5cad074b5ab5f399022d1  libjava/java/beans/IndexedPropertyDescriptor.java
  a777ee8466ea055b5b4f966f893be61d  libjava/java/beans/IntrospectionException.java
! 45d4c11f7f8c820d0b7308a56dc0cffc  libjava/java/beans/Introspector.java
  6ed96b58c4c33a9653f988f15fba040e  libjava/java/beans/MethodDescriptor.java
  beeaca89e1ee1c56c8031cca86c13b4d  libjava/java/beans/ParameterDescriptor.java
! e66c6389121623d6aa19e42b8a7a6458  libjava/java/beans/PropertyChangeEvent.java
  812e9385c4845d282722a625f66ec947  libjava/java/beans/PropertyChangeListener.java
! 290fa5df6a61b933b4d39840394e53f1  libjava/java/beans/PropertyChangeListenerProxy.java
! ec81b9fb46348aaddfbc9d748c6ab55a  libjava/java/beans/PropertyChangeSupport.java
! ccf3b428d8b5bd0adcdac9cff13de944  libjava/java/beans/PropertyDescriptor.java
! 2770657afba9d142f03dcb4b71b58492  libjava/java/beans/PropertyEditor.java
! 7851b4801c08fb51d487bcaf12e09f41  libjava/java/beans/PropertyEditorManager.java
! 1865bbdfb62d26cab208ea5b598b5bfe  libjava/java/beans/PropertyEditorSupport.java
  0cc28dc73a0087f101d5b2212c03e770  libjava/java/beans/PropertyVetoException.java
  dde80fa91c4dc27b57dc55369cee18dd  libjava/java/beans/SimpleBeanInfo.java
  32b63fc20edeadea36b41b7cbda2cd3a  libjava/java/beans/VetoableChangeListener.java
! 47714cb5fead04454d4a31035fce0e6c  libjava/java/beans/VetoableChangeListenerProxy.java
! 1210297792bb98f57518a5161c07140d  libjava/java/beans/VetoableChangeSupport.java
  558f8b69f8474d9093db21ed736a5d46  libjava/java/beans/Visibility.java
! cdca00afcdf7fd2de04a6538549c8daf  libjava/java/beans/beancontext/BeanContext.java
! c35a4a37634edf3bbcf9bb5703cbb777  libjava/java/beans/beancontext/BeanContextChild.java
  cc78c41a548d86feaa1244767a70abaa  libjava/java/beans/beancontext/BeanContextChildComponentProxy.java
! 03387dfbef91385e631fc7b711ddd743  libjava/java/beans/beancontext/BeanContextChildSupport.java
  7af1f8007ce77c992126fd78e182cf7d  libjava/java/beans/beancontext/BeanContextContainerProxy.java
  dc5ece212f467a7b5be626d2439463dc  libjava/java/beans/beancontext/BeanContextEvent.java
! dff99bbb8334dcecd8c971617325c691  libjava/java/beans/beancontext/BeanContextMembershipEvent.java
  42b78406665afa8de876e4652e8ff035  libjava/java/beans/beancontext/BeanContextMembershipListener.java
  ef183462905fc1138dbd6c7354cc8731  libjava/java/beans/beancontext/BeanContextProxy.java
  3c13dd536549bf863b8ba3a702f7c926  libjava/java/beans/beancontext/BeanContextServiceAvailableEvent.java
! 74b286fdb52b8c567a3b8ddba52a44ec  libjava/java/beans/beancontext/BeanContextServiceProvider.java
  08e9489ba84d697ae4435060d516e909  libjava/java/beans/beancontext/BeanContextServiceProviderBeanInfo.java
  23ddc00cdc3e34ba61b60f939ae90b4f  libjava/java/beans/beancontext/BeanContextServiceRevokedEvent.java
  2b60af8d6621bcefd9282d88f856c2e1  libjava/java/beans/beancontext/BeanContextServiceRevokedListener.java
--- 21022,21093 ----
  607afb40c7d329c3123d6af89e149d79  libjava/java/awt/peer/LabelPeer.java
  f03bff26c6244a8e3030dd4de389b3df  libjava/java/awt/peer/LightweightPeer.java
  ba05e4d196a8c6627bbaaa8bd29c45bb  libjava/java/awt/peer/ListPeer.java
! c22b6701e096a22864990964a501246c  libjava/java/awt/peer/MenuBarPeer.java
  fd2f181100890eb0924fa1009f04ab1d  libjava/java/awt/peer/MenuComponentPeer.java
  3974d3d1ecc4a9e230a3e675f875d0df  libjava/java/awt/peer/MenuItemPeer.java
! fe0ead1ad2908933fbf03414a79cf966  libjava/java/awt/peer/MenuPeer.java
  6dc14944905607999fe9a1531106d582  libjava/java/awt/peer/PanelPeer.java
  8cf6af571354557699f6eaa2f205f21a  libjava/java/awt/peer/PopupMenuPeer.java
! 06df2d823b958f46e6b1888b46997b4a  libjava/java/awt/peer/RobotPeer.java
  c93dc34d461c58c8fddb71bcde957f83  libjava/java/awt/peer/ScrollPanePeer.java
  a6568884f1425ef19fcbfd6711276dc7  libjava/java/awt/peer/ScrollbarPeer.java
  f4e0ea9848784e2ba0c3587e8b272ec0  libjava/java/awt/peer/TextAreaPeer.java
  5dccfbeb171b621806f6d2be563d6854  libjava/java/awt/peer/TextComponentPeer.java
  547f9470fed7db16c2b5fd0288f17c1b  libjava/java/awt/peer/TextFieldPeer.java
  7ed2acaa92132f110fa96d7cfc4f8ffe  libjava/java/awt/peer/WindowPeer.java
! f463e9ea4df5f740b8bfd2fa6d951391  libjava/java/awt/print/Book.java
  274138aeb527d88b91bfaa6f662d5cec  libjava/java/awt/print/PageFormat.java
  5463f1b8596d0a7db2ac6bfc5bb60e0a  libjava/java/awt/print/Pageable.java
  79b6dd1bc84d2bab4cbd3bcbe9188594  libjava/java/awt/print/Paper.java
! 7566c4f34887477443a925c2968f84b3  libjava/java/awt/print/Printable.java
! abbc86abfbf29972b7b078a90619089f  libjava/java/awt/print/PrinterAbortException.java
! 0f6b0b07480d4e3b4f7827ade59524aa  libjava/java/awt/print/PrinterException.java
  3b61e6d9f83f74816524c533fac38b03  libjava/java/awt/print/PrinterGraphics.java
! 23cf09df761d7b85deccddbfb406bffa  libjava/java/awt/print/PrinterIOException.java
! e1623757aee8d7f2add2cbcd56275b19  libjava/java/awt/print/PrinterJob.java
! 2ed9a9703013e7c4ce0d41553ba08ddc  libjava/java/beans/AppletInitializer.java
! d2734480e9495e5d1627d7c880afb652  libjava/java/beans/BeanDescriptor.java
  75d6817fdcac41d0c22560e7341c7174  libjava/java/beans/BeanInfo.java
! d0840b6aa98e3b60af3f45bb7ae0f7c9  libjava/java/beans/Beans.java
  ae4d1123bc81131a75e826aaf27d617f  libjava/java/beans/Customizer.java
  b778e7004ea911e0a22b895efd828e0d  libjava/java/beans/DesignMode.java
! 87819466966580b6f7fb0226bf42aa70  libjava/java/beans/EventHandler.java
! 34e495c824d7ce34ad3786e3f541c13d  libjava/java/beans/EventSetDescriptor.java
! 1be99b03994365f6fa31663a4671b724  libjava/java/beans/ExceptionListener.java
! f9c2bec1e8ec2023528c68c08d87268b  libjava/java/beans/Expression.java
  c9c807bc217adf3352b5b8964078bdd0  libjava/java/beans/FeatureDescriptor.java
  9c10fa3e70f5cad074b5ab5f399022d1  libjava/java/beans/IndexedPropertyDescriptor.java
  a777ee8466ea055b5b4f966f893be61d  libjava/java/beans/IntrospectionException.java
! 7e95e7606a641dbad8bfb6fa64f3bb2f  libjava/java/beans/Introspector.java
  6ed96b58c4c33a9653f988f15fba040e  libjava/java/beans/MethodDescriptor.java
  beeaca89e1ee1c56c8031cca86c13b4d  libjava/java/beans/ParameterDescriptor.java
! 9ec89821fb67e27c130ca8a25abd9c9f  libjava/java/beans/PropertyChangeEvent.java
  812e9385c4845d282722a625f66ec947  libjava/java/beans/PropertyChangeListener.java
! a1211f30d0313bae8b2226aad42f65b0  libjava/java/beans/PropertyChangeListenerProxy.java
! e88a65e2e29eed81f9d614a9c74b6df8  libjava/java/beans/PropertyChangeSupport.java
! d0b0ee02b1922ec1d7e91642ae480566  libjava/java/beans/PropertyDescriptor.java
! c5d0a543d14b958c59fba936545e9d47  libjava/java/beans/PropertyEditor.java
! aea47f2160c056977fab13a938b470fe  libjava/java/beans/PropertyEditorManager.java
! 7dc9095e57e256c86b71a3ae6235e57d  libjava/java/beans/PropertyEditorSupport.java
  0cc28dc73a0087f101d5b2212c03e770  libjava/java/beans/PropertyVetoException.java
  dde80fa91c4dc27b57dc55369cee18dd  libjava/java/beans/SimpleBeanInfo.java
+ 956f446946225f65950f5ed9cb9557a4  libjava/java/beans/Statement.java
  32b63fc20edeadea36b41b7cbda2cd3a  libjava/java/beans/VetoableChangeListener.java
! 67e7dcf6325c0c6e7815c88c9ca7bd03  libjava/java/beans/VetoableChangeListenerProxy.java
! aa8dfdadbed4ab454b0536b4f610393c  libjava/java/beans/VetoableChangeSupport.java
  558f8b69f8474d9093db21ed736a5d46  libjava/java/beans/Visibility.java
! d0d621b45ac5b30f5be6ae2e8829b097  libjava/java/beans/XMLDecoder.java
! 44180b0068a039974e94fa7b5295653c  libjava/java/beans/beancontext/BeanContext.java
! 84cf44cc462840031de8f6366d4886b0  libjava/java/beans/beancontext/BeanContextChild.java
  cc78c41a548d86feaa1244767a70abaa  libjava/java/beans/beancontext/BeanContextChildComponentProxy.java
! 52a0b4dc65f9030f47438c03d8ef7775  libjava/java/beans/beancontext/BeanContextChildSupport.java
  7af1f8007ce77c992126fd78e182cf7d  libjava/java/beans/beancontext/BeanContextContainerProxy.java
  dc5ece212f467a7b5be626d2439463dc  libjava/java/beans/beancontext/BeanContextEvent.java
! c64302bf7621ce33edcb125c8bfa627e  libjava/java/beans/beancontext/BeanContextMembershipEvent.java
  42b78406665afa8de876e4652e8ff035  libjava/java/beans/beancontext/BeanContextMembershipListener.java
  ef183462905fc1138dbd6c7354cc8731  libjava/java/beans/beancontext/BeanContextProxy.java
  3c13dd536549bf863b8ba3a702f7c926  libjava/java/beans/beancontext/BeanContextServiceAvailableEvent.java
! 3e3d15ef87b58da44c040c191500000b  libjava/java/beans/beancontext/BeanContextServiceProvider.java
  08e9489ba84d697ae4435060d516e909  libjava/java/beans/beancontext/BeanContextServiceProviderBeanInfo.java
  23ddc00cdc3e34ba61b60f939ae90b4f  libjava/java/beans/beancontext/BeanContextServiceRevokedEvent.java
  2b60af8d6621bcefd9282d88f856c2e1  libjava/java/beans/beancontext/BeanContextServiceRevokedListener.java
*************** b5c44b13d4b15e8764a52251cb62a249  libjav
*** 17638,17812 ****
  f715db4138d7b11a328643eb21462f68  libjava/java/beans/beancontext/BeanContextServicesListener.java
  434739836911c4e0df927d061662772a  libjava/java/beans/beancontext/BeanContextServicesSupport.java
  c460ab8808f58f4de1ec04c51d39d452  libjava/java/beans/beancontext/BeanContextSupport.java
! 2ec7266e23e872b1fd88a72979f1a9c8  libjava/java/io/BufferedInputStream.java
  da690e9209e2d3e363197eec9329b50b  libjava/java/io/BufferedOutputStream.java
! e6ba3ec18bf898306e15498d9eba3010  libjava/java/io/BufferedReader.java
! 9e278f0c33af9d72a3c9c015b342a330  libjava/java/io/BufferedWriter.java
! 148d4256622308fc80a42d9551ad1fee  libjava/java/io/ByteArrayInputStream.java
! 58d97b5f21c2ba45850cab877973366b  libjava/java/io/ByteArrayOutputStream.java
! 0a11467880f000f04388daee241f957a  libjava/java/io/CharArrayReader.java
! 6535349ec4171f7b7f208a3bd9af3adf  libjava/java/io/CharArrayWriter.java
! 2463cada6e00db8aa06ff73225a8be7e  libjava/java/io/CharConversionException.java
! 34e64889475a1550e90752084715ddad  libjava/java/io/DataInput.java
! fa643a7f42414697cc81ac25fed1bf95  libjava/java/io/DataInputStream.java
! d43dc14bd455b12a347ff396995ea414  libjava/java/io/DataOutput.java
! 9415dfac94f54876caa9c4fb682fce98  libjava/java/io/DataOutputStream.java
! acc34b727a99912ef6e338f036381f8a  libjava/java/io/EOFException.java
! b35ab836faf3c4cbea68c777436ad07c  libjava/java/io/Externalizable.java
! 333aa82ec093195353bc06a8ebf97d3a  libjava/java/io/File.java
! 5597a8f03ad62fae630d4566e6b1b5d1  libjava/java/io/FileDescriptor.java
  28ca7a330cc74570a7a5adcf4889c2fc  libjava/java/io/FileFilter.java
! 140abe986d39a2437e30fffc417fdc5c  libjava/java/io/FileInputStream.java
! 1754be3c4bf1cf8d524c08ba4118e271  libjava/java/io/FileNotFoundException.java
! b9ea233f85b309cee9e25d4a0fd6e873  libjava/java/io/FileOutputStream.java
! c75ecbdb3440e5522345553db4bb6117  libjava/java/io/FilePermission.java
  eccec1101a5b60b6a7e25bce6fb73763  libjava/java/io/FileReader.java
! 7e7eb925119e76b038b8e4e344318d6b  libjava/java/io/FileWriter.java
! 5e3346bf2a0a1e3fee8a4760b5bbdcf1  libjava/java/io/FilenameFilter.java
! 6a87292dcb0fee7144303503e3a9016b  libjava/java/io/FilterInputStream.java
! 9b4960d1d34924c70bb9365f67ac1c76  libjava/java/io/FilterOutputStream.java
! 93b343cd8f5ebe4fdbe280ac24c1e6fd  libjava/java/io/FilterReader.java
! 0f00e41cfc672c0c1c2d849d5a85fba2  libjava/java/io/FilterWriter.java
! 102c3c783022c4111b16d1cf3e4c443a  libjava/java/io/IOException.java
! 51868d1b807ac15ca413ddc0bb72ead1  libjava/java/io/InputStream.java
! bdca82a81f3159014ac6a01e5c98c8c5  libjava/java/io/InputStreamReader.java
! 71906f03e6cf2469be541979fbccb51c  libjava/java/io/InterruptedIOException.java
  2e831c1b78e0f32010e3042f2c134d6d  libjava/java/io/InvalidClassException.java
  8e43d62fc98c86274619a4b2ca0ecaf6  libjava/java/io/InvalidObjectException.java
! efde0afe03c285e2444c51810762843f  libjava/java/io/LineNumberInputStream.java
! 7a710d1f304307089321bc9a7a93aa89  libjava/java/io/LineNumberReader.java
  3680cd67ca12d67daa95ecccec10af1d  libjava/java/io/NotActiveException.java
  fa5ce3b99cceca5c018229e7a58441a3  libjava/java/io/NotSerializableException.java
  90d34b613c791dee5cc385f770dc6cb2  libjava/java/io/ObjectInput.java
! 3d30b5afb89fb0f8aeca170e41ece78a  libjava/java/io/ObjectInputStream.java
  10a24b7e49593d14c261099bfa624ead  libjava/java/io/ObjectInputValidation.java
  4c013a4c6434e1580923679c4a9bfb29  libjava/java/io/ObjectOutput.java
! e29088f39fa90a58eaed53270d85bcbf  libjava/java/io/ObjectOutputStream.java
! 0651eee1e9a38cfc90ada06140554ecf  libjava/java/io/ObjectStreamClass.java
  38ec1d60b8ebc0a885908f8127ea0984  libjava/java/io/ObjectStreamConstants.java
! c483a6d7c95eadecb97c93ccfb542386  libjava/java/io/ObjectStreamException.java
! 82394114b41508e35a4b9e359ed74471  libjava/java/io/ObjectStreamField.java
! 87e06e53a1fe684dfc52b6c70eb47c09  libjava/java/io/OptionalDataException.java
! 6e18eae8ce236b87d3d5c51a22d5b585  libjava/java/io/OutputStream.java
! 2b042c5fefb2a619c67fdea7d2071846  libjava/java/io/OutputStreamWriter.java
! 0c8ec93d5c1a50c8c189a9e006f715d0  libjava/java/io/PipedInputStream.java
! 894dd411fee8a7bdbdb3f22b5aeeb335  libjava/java/io/PipedOutputStream.java
! 49a2d5ecd012ecbaf1c1ff9a95e8490f  libjava/java/io/PipedReader.java
! 4f9b8d27c1ebb0679f14a0438376151c  libjava/java/io/PipedWriter.java
! 9c7b775b74e03f4e18d95320d70e7d9d  libjava/java/io/PrintStream.java
! 81329722ed79ce5fe9c6dbd9ae0393bd  libjava/java/io/PrintWriter.java
! 2ce9db426e954ad268d6880ecad1056f  libjava/java/io/PushbackInputStream.java
! d2874474eecdaa48ff65012321341825  libjava/java/io/PushbackReader.java
! c9c7dc623e40a75f02cd7a40a779d9d5  libjava/java/io/RandomAccessFile.java
! 8a419c8478f7bc9c49f0d3d5f306acb6  libjava/java/io/Reader.java
! 6f3097edae72cf55f6fb19e1b3506343  libjava/java/io/SequenceInputStream.java
! 9b5b43ef96e7ca7c16d1497e9e2fed16  libjava/java/io/Serializable.java
! ccc5648e27d0d1d22bdee4cc0e3dd105  libjava/java/io/SerializablePermission.java
! 5c599c3bac0cbf970259c31d84039848  libjava/java/io/StreamCorruptedException.java
! f773dd19491f1c88ce72100fa5233d38  libjava/java/io/StreamTokenizer.java
! 62def799ba81a01c26820988767ee54d  libjava/java/io/StringBufferInputStream.java
! f690b0c377db4a1924a3011f0b5c8260  libjava/java/io/StringReader.java
! 26a7f669d93b9059175b0e7713ccb525  libjava/java/io/StringWriter.java
! 1b09cc2e461a4b88a4c0893faa053e18  libjava/java/io/SyncFailedException.java
! 18baaff027cc9622e230307afa36e2ce  libjava/java/io/UTFDataFormatException.java
! 33a7d5d64240f6dfa094a8fbd6ecfc7f  libjava/java/io/UnsupportedEncodingException.java
! 624b32deb9fb8c3559fb8c6e2dd3b858  libjava/java/io/VMObjectStreamClass.java
! ef1f55c4e67daca03263dcbed7b67ece  libjava/java/io/WriteAbortedException.java
! c0bd70c60d1927d48fb123fbb2091156  libjava/java/io/Writer.java
! 6fc4dfbe84e0672749fa95a292347a4f  libjava/java/io/natFileDescriptorEcos.cc
! 0ae00b8ecb7914dc949ac38dc3df64b3  libjava/java/io/natFileDescriptorPosix.cc
! 39170bb6163f0d2163c5b3d24c1879e1  libjava/java/io/natFileDescriptorWin32.cc
  84254834f71b07e430fcc1ae0b042adb  libjava/java/io/natFilePosix.cc
  116bfcbb1fd28c3e8171c0f6bbcd82d2  libjava/java/io/natFileWin32.cc
! c93b41651a0d566ef84181f12681c678  libjava/java/io/natObjectInputStream.cc
! 52c478fadfeb1e5e8e2a8ead85eaac99  libjava/java/io/natVMObjectStreamClass.cc
! df8c6f94db216d902320d3cb89a1d7a0  libjava/java/lang/AbstractMethodError.java
! a7efca87ff141ca10c79eb34e6619298  libjava/java/lang/ArithmeticException.java
! d4ecaba24e4dc2b951176757ecf9221a  libjava/java/lang/ArrayIndexOutOfBoundsException.java
! 106c83a090b59a4846cbbae6c2413496  libjava/java/lang/ArrayStoreException.java
! e1859c172b47139d4910ac64f8cb26c4  libjava/java/lang/AssertionError.java
! 83d225fb112058ac1068725e2a71f2c4  libjava/java/lang/Boolean.java
! baffa337e3a08f276fc2ecbac35418ba  libjava/java/lang/Byte.java
! 43e095467388dfd593fd94a3f3a49dda  libjava/java/lang/CharSequence.java
! 9010ab6758649eeb7d12878491a9c9f3  libjava/java/lang/Character.java
! 4ff444972614cd5db7407bae387261fd  libjava/java/lang/Class.h
! a59cce05af69e2918bf06792ae0dab72  libjava/java/lang/Class.java
! 3ea89070481760c5412e44500c1d669f  libjava/java/lang/ClassCastException.java
! 975bf9946d660964572b4456a414ea89  libjava/java/lang/ClassCircularityError.java
  9139cf0bf31eaf0698bbdd4393de5c8f  libjava/java/lang/ClassFormatError.java
! 504ebaa440c804802b576e7a0ee1c516  libjava/java/lang/ClassLoader.java
! a267507cb393db1a9a64af6b342d7928  libjava/java/lang/ClassNotFoundException.java
! 5f77d939f014e08f684e257be825a3c9  libjava/java/lang/CloneNotSupportedException.java
! 480fc6aec617a884d3a9db31acf40c7b  libjava/java/lang/Cloneable.java
! 75bc38611d3c58434aca9f6b645f1b55  libjava/java/lang/Comparable.java
! d4c4db159feee64734e1016d420e04d8  libjava/java/lang/Compiler.java
! 821fb9bee0b26002a1f864c8487f6d42  libjava/java/lang/Double.java
  445be71f45312965061d41a9bead88ae  libjava/java/lang/EcosProcess.java
! 0ef5cdfe547622c70adac302259bad56  libjava/java/lang/Error.java
! 4e9c69e4f0789e8b798c216af22dac74  libjava/java/lang/Exception.java
! 2238cd1440bd95d2266916cf5a9def53  libjava/java/lang/ExceptionInInitializerError.java
! 17dd6d7f10f76b6925b9f81538afabe9  libjava/java/lang/Float.java
! cac5ff3e4b14cd586f4020fda12822a6  libjava/java/lang/IllegalAccessError.java
! 7d998b185e29dd2cba8d7c50f1489d29  libjava/java/lang/IllegalAccessException.java
! 9fafc0870f6ef8329c26e29a054a5de3  libjava/java/lang/IllegalArgumentException.java
! d337100c7116eba52037b17483e9982c  libjava/java/lang/IllegalMonitorStateException.java
! 16bb35ba8006aac9d676af2473ee9921  libjava/java/lang/IllegalStateException.java
! 67ceab65c18587514aac8bbc21a3d326  libjava/java/lang/IllegalThreadStateException.java
! 18e2162c3ed72fe571f3b7c08f25f4cf  libjava/java/lang/IncompatibleClassChangeError.java
! 6354d8f76b89515f1da9fc3a5884d77c  libjava/java/lang/IndexOutOfBoundsException.java
! 9921c2ec252ef9c42d375e067e4e7e6d  libjava/java/lang/InheritableThreadLocal.java
! 4c2fd2987ace4cd7ee2528d726f47c18  libjava/java/lang/InstantiationError.java
! 8eef13d585bed4b34856e639b8ac92cd  libjava/java/lang/InstantiationException.java
! b45d3aae35074171c528f343ba000dfb  libjava/java/lang/Integer.java
! 8320cbb3e60b2a61089fb3ccf8eb4e40  libjava/java/lang/InternalError.java
! dfa0d93811ca164f1a53fcb9a4d812de  libjava/java/lang/InterruptedException.java
! 6f93db4ad7e9aeda027db870bd8f2604  libjava/java/lang/LinkageError.java
! 641cb60500fea72ba9179427cf60a515  libjava/java/lang/Long.java
! b48add4d51c68995f12bda46fc398504  libjava/java/lang/Math.java
! f5e536d0d2d7cbbf272bc2705976f81d  libjava/java/lang/NegativeArraySizeException.java
! ec2e1446614fd35f96590f1c0c3e4236  libjava/java/lang/NoClassDefFoundError.java
! 1663b7fbc98b845e5fdaf6eb6ce8382d  libjava/java/lang/NoSuchFieldError.java
! a71317fba1eb08b8a94881bf3b166e08  libjava/java/lang/NoSuchFieldException.java
! 8c74e37ffe968837bf87d0e27d4312e1  libjava/java/lang/NoSuchMethodError.java
! d707d450d41c7c24f5a4484898f94700  libjava/java/lang/NoSuchMethodException.java
! 612eac4d8f102717dfa50737f44e0eaa  libjava/java/lang/NullPointerException.java
! b0f8fb05c536e30d6e95d59ec215b269  libjava/java/lang/Number.java
! 1c6549a1691070e901320601ec09c35b  libjava/java/lang/NumberFormatException.java
! 6b8917b2e13fc37f3771c5ab15a2d94a  libjava/java/lang/Object.h
! b72fdace30df47c2fbef61a9ffc368ae  libjava/java/lang/Object.java
! 157a187e1b8bed6477876b609ea5c776  libjava/java/lang/OutOfMemoryError.java
! 1860a3af435772855c81f071eac3af5e  libjava/java/lang/Package.java
! c68b0d09a4d293749d3c748818f7de3c  libjava/java/lang/PosixProcess.java
! a5fe9edbe77b8959cb28b0f175966912  libjava/java/lang/Process.java
! 92e59802ae1f7879b8128aa0da6319a2  libjava/java/lang/Runnable.java
! e9125d2ad7a59b965eb28f99a199df0b  libjava/java/lang/Runtime.java
! 6abdf024e4c478fdae0817a3c71eb4b5  libjava/java/lang/RuntimeException.java
! 236d6734cd471a4b69b478040c7b12a9  libjava/java/lang/RuntimePermission.java
! 7cb715f4d2b45f142a5936927dc37533  libjava/java/lang/SecurityException.java
! a040d02a082eaae8c84b8c3b8a0541b7  libjava/java/lang/SecurityManager.java
! 5fb806576aacef3aa28a7b82a5cfbc77  libjava/java/lang/Short.java
! ffd49415effdb658f8220d71744723bb  libjava/java/lang/StackOverflowError.java
! 4f4fbf252973c5f2f74ffbfbfd1aacf0  libjava/java/lang/StackTraceElement.java
! 458b3a2b4939a77f6ecfb4ce8b7955aa  libjava/java/lang/StrictMath.java
! b9fe045a36a259bacbe7dd1298f6467d  libjava/java/lang/String.java
! 1dc87b01f78dafa7e3cf54fd697ae0fd  libjava/java/lang/StringBuffer.java
! 468a538d30c9118c0ca5e938c4f714c4  libjava/java/lang/StringIndexOutOfBoundsException.java
! 10dc0f79e5a4df56d32fe31e40f30b5b  libjava/java/lang/System.java
! b59a0f296752a0518a14de11f1de44b0  libjava/java/lang/Thread.java
! e31231b070d39ef867f3c46c0c92372c  libjava/java/lang/ThreadDeath.java
! 0cc1a219d92444b0d17f80573dcff57d  libjava/java/lang/ThreadGroup.java
! 0e6b131e64a9a759199bd8b796e672a6  libjava/java/lang/ThreadLocal.java
! 8423aaa02971f5e08d6ac2fbf4666d12  libjava/java/lang/Throwable.java
  4b5dfc17b3865878cdbcd2f3eb2a758d  libjava/java/lang/UnknownError.java
! 125ac6ccea41cfba1ccae90082f15c3a  libjava/java/lang/UnsatisfiedLinkError.java
  9e3b86b90dee129796e100a9d4ecd505  libjava/java/lang/UnsupportedClassVersionError.java
! 43a334cab97a14d20bbb109bc7fafd6c  libjava/java/lang/UnsupportedOperationException.java
! eea21763bd2e458a88d1617dcd20170f  libjava/java/lang/VMClassLoader.java
! a0eb2515eeb330d1b33ec6aaa13cb067  libjava/java/lang/VMSecurityManager.java
! 7a612d3da75f6629ebf6e6a899d44eaa  libjava/java/lang/VMThrowable.java
! 4a64e275047505c4d9ebc2f43a4d2e04  libjava/java/lang/VerifyError.java
! a7962a1ea98399dcbf31e871258f7e14  libjava/java/lang/VirtualMachineError.java
! 57f8b8c67c82476f90aae0b4e401d82a  libjava/java/lang/Void.java
  14df9fbde49dfe0dd672c7187fb8197c  libjava/java/lang/Win32Process.java
  ab75e19638c3cc59541661d0672eb7e1  libjava/java/lang/dtoa.c
  8758dda5a76bae7d7c4eb541d61113f7  libjava/java/lang/e_acos.c
--- 21095,21267 ----
  f715db4138d7b11a328643eb21462f68  libjava/java/beans/beancontext/BeanContextServicesListener.java
  434739836911c4e0df927d061662772a  libjava/java/beans/beancontext/BeanContextServicesSupport.java
  c460ab8808f58f4de1ec04c51d39d452  libjava/java/beans/beancontext/BeanContextSupport.java
! 22c13836c2e8c4aeb696c71a3d68791f  libjava/java/io/BufferedInputStream.java
  da690e9209e2d3e363197eec9329b50b  libjava/java/io/BufferedOutputStream.java
! 886afaf408e1dc27bf4a06093e20559e  libjava/java/io/BufferedReader.java
! 7f0c760ff685f3ed54bdc3c5ef001ff0  libjava/java/io/BufferedWriter.java
! a31f408068d8868c2d8ccc4f7f9c1e2e  libjava/java/io/ByteArrayInputStream.java
! a9975f23319e330edb2fda5581a0e721  libjava/java/io/ByteArrayOutputStream.java
! 1398742d1a9b1eae5c2459d50bb90136  libjava/java/io/CharArrayReader.java
! 11742a3f9155d8793912673313c33e25  libjava/java/io/CharArrayWriter.java
! 0d7dd6bbacc13522d9bd53df36b88a17  libjava/java/io/CharConversionException.java
! 0b8f8bb6dffc7ed954d175a3cd91a74f  libjava/java/io/DataInput.java
! 3609c717a6e8d680d7a8394aa77bde4c  libjava/java/io/DataInputStream.java
! 45df783e608733a10b104014f00e3918  libjava/java/io/DataOutput.java
! 6cd585bf4f20f90d65be9651102f5490  libjava/java/io/DataOutputStream.java
! a130e8828fb203336679c8a90bb19b46  libjava/java/io/EOFException.java
! 3f64ba3536130a289b851f2b94e042d4  libjava/java/io/Externalizable.java
! 7c680dcd18ceaeca98425806cb4285c1  libjava/java/io/File.java
! 6fa3db95b00937d999d14efcdbc3b981  libjava/java/io/FileDescriptor.java
  28ca7a330cc74570a7a5adcf4889c2fc  libjava/java/io/FileFilter.java
! 379e4e77b77f718ed5de6f1676aa8787  libjava/java/io/FileInputStream.java
! bd2173e87a2481fc50e95bef179103db  libjava/java/io/FileNotFoundException.java
! fd7cc6562fe61ad19be8533bbc8eca60  libjava/java/io/FileOutputStream.java
! 02a6bb56fc5f2fb9147ae6cf66747de7  libjava/java/io/FilePermission.java
  eccec1101a5b60b6a7e25bce6fb73763  libjava/java/io/FileReader.java
! 85be19d55bf232037d2826ca4e4533b5  libjava/java/io/FileWriter.java
! 5e43f5966106c1986a7a03d7527f45ff  libjava/java/io/FilenameFilter.java
! 816a10737cfc1b4f077d6af0cc08d304  libjava/java/io/FilterInputStream.java
! b8e9d7c764d06981576d069461804f46  libjava/java/io/FilterOutputStream.java
! 4b249b785f75765c50ae167f302db243  libjava/java/io/FilterReader.java
! 4202884c8ea523c37d18e1bc1d2903a7  libjava/java/io/FilterWriter.java
! dad714d61f3f7b03b30eb2cdab345494  libjava/java/io/IOException.java
! 1417de045191145f74b4b8b2955ed08a  libjava/java/io/InputStream.java
! a5304ae5cf00c32d12da85dee29a5e7b  libjava/java/io/InputStreamReader.java
! e9cbee513db4ca8ec4d0ef64aae1193d  libjava/java/io/InterruptedIOException.java
  2e831c1b78e0f32010e3042f2c134d6d  libjava/java/io/InvalidClassException.java
  8e43d62fc98c86274619a4b2ca0ecaf6  libjava/java/io/InvalidObjectException.java
! f8853e8feb773c72f6482a9ffa24e778  libjava/java/io/LineNumberInputStream.java
! f90cf0f1094760502c9379494fa7aa87  libjava/java/io/LineNumberReader.java
  3680cd67ca12d67daa95ecccec10af1d  libjava/java/io/NotActiveException.java
  fa5ce3b99cceca5c018229e7a58441a3  libjava/java/io/NotSerializableException.java
  90d34b613c791dee5cc385f770dc6cb2  libjava/java/io/ObjectInput.java
! 5250f366970dd28c6c6ef84966a4b0c5  libjava/java/io/ObjectInputStream.java
  10a24b7e49593d14c261099bfa624ead  libjava/java/io/ObjectInputValidation.java
  4c013a4c6434e1580923679c4a9bfb29  libjava/java/io/ObjectOutput.java
! 2572cbf439931ce09fd399e24688fe06  libjava/java/io/ObjectOutputStream.java
! fc5bfa8d4f4dcb4031714ec37fb7a631  libjava/java/io/ObjectStreamClass.java
  38ec1d60b8ebc0a885908f8127ea0984  libjava/java/io/ObjectStreamConstants.java
! 2f3affe6d368817487efe5308a34b1d9  libjava/java/io/ObjectStreamException.java
! 36836a6ab03b28e7a1c4f1e330432247  libjava/java/io/ObjectStreamField.java
! 311d4c159e2cd2f3c8a7aeadf4cd0d95  libjava/java/io/OptionalDataException.java
! d09ac69212f396bfb85848a2a2cdb3f0  libjava/java/io/OutputStream.java
! 07a59e687c9dd02b379878c2f2f647ca  libjava/java/io/OutputStreamWriter.java
! 6dfa21dafeb620009d5c2a11b19181f7  libjava/java/io/PipedInputStream.java
! 97246040c4e8cfb76936d42f2cb1fcd7  libjava/java/io/PipedOutputStream.java
! 920f7ca42e027ffc9f6a5731077d3643  libjava/java/io/PipedReader.java
! e3610a055ce1595459f7788c0ca27f57  libjava/java/io/PipedWriter.java
! e03dd77e981d2f75f8eea684b79fc252  libjava/java/io/PrintStream.java
! 9f5952744e3671a97315359dc1b3cb34  libjava/java/io/PrintWriter.java
! 7315187eb952912f2ae693a026d34062  libjava/java/io/PushbackInputStream.java
! 4d9e9bdcf3acd4ffde12d3b30054b27e  libjava/java/io/PushbackReader.java
! e5380b0a7832424e88f4bdaae9ea9c7f  libjava/java/io/RandomAccessFile.java
! fdf602dc737e9c7ae50c139c728f847b  libjava/java/io/Reader.java
! 73bffa0a657b9ad33fca785619d431b0  libjava/java/io/SequenceInputStream.java
! 42ca6387d3a35bac4980306d96a4ab7f  libjava/java/io/Serializable.java
! a49a336c4e6abe618769669ea40517c3  libjava/java/io/SerializablePermission.java
! c5a46e81f81cfcbf93bf30d05ddd133c  libjava/java/io/StreamCorruptedException.java
! 71ae497f0849cb49ef7c77ab80ac478d  libjava/java/io/StreamTokenizer.java
! a0e5d6091eee53bd4209891534302c39  libjava/java/io/StringBufferInputStream.java
! 95708b9f98db139688c0b7958128efbe  libjava/java/io/StringReader.java
! 8b8f3b59ce06194235e0b6a9c20e82af  libjava/java/io/StringWriter.java
! ec70185cb82e9f5f31a45045e869b35c  libjava/java/io/SyncFailedException.java
! 8ab81b257b8f7fee147b10dcb2045622  libjava/java/io/UTFDataFormatException.java
! 4611a526c361824fbf6cd311f52976cd  libjava/java/io/UnsupportedEncodingException.java
! 422e4a022c09c23d596b1ff4dfb4deca  libjava/java/io/VMObjectStreamClass.java
! 2438b8810a0c7e4f4fdca64b0d58a133  libjava/java/io/WriteAbortedException.java
! 53def13aaf2656416676e28614883326  libjava/java/io/Writer.java
  84254834f71b07e430fcc1ae0b042adb  libjava/java/io/natFilePosix.cc
  116bfcbb1fd28c3e8171c0f6bbcd82d2  libjava/java/io/natFileWin32.cc
! e1f3792d1812985a1019591b41acca5d  libjava/java/io/natObjectInputStream.cc
! b06e742b25b49cb2b76aaa7ba83a7c7a  libjava/java/io/natVMObjectStreamClass.cc
! e96fc733343867facc488b78e037e067  libjava/java/lang/AbstractMethodError.java
! 7deccf0e2b53b40887a1cc2a124c2fca  libjava/java/lang/ArithmeticException.java
! c57cfce08282c3ba36e9dbbf289e7455  libjava/java/lang/ArrayIndexOutOfBoundsException.java
! 1079a25673828d1daf75db0f47200839  libjava/java/lang/ArrayStoreException.java
! f278e929e86da7229545e336cc7102ab  libjava/java/lang/AssertionError.java
! 75caf5fd69a4e16b8104f3235045950e  libjava/java/lang/Boolean.java
! af41431eb7269b536360927e65edab3c  libjava/java/lang/Byte.java
! dcb0d4caa2cf0040acb92ac1397b5810  libjava/java/lang/CharSequence.java
! e70a17bcb7d10a6826fc5878378ca7d6  libjava/java/lang/Character.java
! f21383f96ae4c3169c5a3eadd1a80830  libjava/java/lang/Class.h
! d75de0d19a4a8006b6242bc030e8d2ec  libjava/java/lang/Class.java
! db7a4cebffa0518c5b11cd04ab246f5f  libjava/java/lang/ClassCastException.java
! 47f71ae563cd10344031685f84637a6b  libjava/java/lang/ClassCircularityError.java
  9139cf0bf31eaf0698bbdd4393de5c8f  libjava/java/lang/ClassFormatError.java
! c48254da1cd67598bed887bf6722cc21  libjava/java/lang/ClassLoader.java
! bb1eae33ed6e0db9e36c8704ac6c91e3  libjava/java/lang/ClassNotFoundException.java
! 8de05d6c30e65792d8e51517f7627597  libjava/java/lang/CloneNotSupportedException.java
! 7fc79954544d5890a920a15e9256c58f  libjava/java/lang/Cloneable.java
! 099f55f567a295c7d8873329bbba8501  libjava/java/lang/Comparable.java
! c9b662f745e7f1f791cd59e0245d58e5  libjava/java/lang/Compiler.java
! fc9781a6a8a56515cafb29f5d1310f68  libjava/java/lang/Double.java
  445be71f45312965061d41a9bead88ae  libjava/java/lang/EcosProcess.java
! 987c723b0a9863cfaff5be10c7432fa5  libjava/java/lang/Error.java
! 1266c436cfb8fc8a1c5d4664bf7baec8  libjava/java/lang/Exception.java
! d37ad76ad9f3c63fe0596fb69017cf53  libjava/java/lang/ExceptionInInitializerError.java
! 32741825f23decd906af7b286d0efd28  libjava/java/lang/Float.java
! 03de85072b72a809e2fecf51aad7d3e1  libjava/java/lang/IllegalAccessError.java
! 47947ca9eaddf6a06cf9a60df8f5a566  libjava/java/lang/IllegalAccessException.java
! 2328fb60cd61fcdf09d28e5617cfbec7  libjava/java/lang/IllegalArgumentException.java
! e50573e7b7d5a4533b5142e87d07cfe9  libjava/java/lang/IllegalMonitorStateException.java
! 82a0b80dcad9b59c1b1ee127c324602b  libjava/java/lang/IllegalStateException.java
! 33f12b5fdd7ab5ac9720a52b8a9adf61  libjava/java/lang/IllegalThreadStateException.java
! 0e219a109d36cae89410f7c214484441  libjava/java/lang/IncompatibleClassChangeError.java
! 07113e129028c2948ee58c208c0a47c7  libjava/java/lang/IndexOutOfBoundsException.java
! e47d0662727ca22a6a8ee9d8987942b7  libjava/java/lang/InheritableThreadLocal.java
! bb220de913d4f99a2d0df86b3ad6a2ff  libjava/java/lang/InstantiationError.java
! 956dc0b3af39c30570e6d79e79f46b2d  libjava/java/lang/InstantiationException.java
! 2e9256c13c52768a64bb3f7a7e1e0f84  libjava/java/lang/Integer.java
! e10bd16cf3cb4c3ee5eb304902d2893a  libjava/java/lang/InternalError.java
! 8bab8660a1c610e61d303fab96e039cf  libjava/java/lang/InterruptedException.java
! ed2353997db1c79c9fbd2bc22ea8aa3a  libjava/java/lang/LinkageError.java
! c3f49791f9c4a8c2cbd853a2edbb9b57  libjava/java/lang/Long.java
! deafabd724af39f06a7de950424d780c  libjava/java/lang/Math.java
! effcf1cb52ae64e3d00f18f897e43df9  libjava/java/lang/NegativeArraySizeException.java
! 075e3ebe758626267a8e0e9a3b0a8e90  libjava/java/lang/NoClassDefFoundError.java
! 43e0322674ea5e7e2afb705320afadbb  libjava/java/lang/NoSuchFieldError.java
! a285ab79f83285b35713bb2e142da19b  libjava/java/lang/NoSuchFieldException.java
! 81388ae3950803b77489cc56c47d0b43  libjava/java/lang/NoSuchMethodError.java
! c7a024dd54a3acf945d689eee5757eb6  libjava/java/lang/NoSuchMethodException.java
! 365f03a1e73f3c18a8bdcf1d4e931e65  libjava/java/lang/NullPointerException.java
! 0231450a9b6c53a9872d8aea54861863  libjava/java/lang/Number.java
! 97d25119517b4654b9e3b51b4b4706f4  libjava/java/lang/NumberFormatException.java
! fc103489afae115b3c91ead9f02b5d28  libjava/java/lang/Object.h
! cbc1348821b98acc74e4904f5fda958b  libjava/java/lang/Object.java
! 2be9a31930d1a9dfaccb8ec64c9c4b0c  libjava/java/lang/OutOfMemoryError.java
! cf9affc31bda086e85c135dc3771c326  libjava/java/lang/Package.java
! 1caacd4d98a513a3eb8846f0e38be3bf  libjava/java/lang/PosixProcess.java
! 7a2a4652a54d37fa6c75a4a5008e4ade  libjava/java/lang/Process.java
! fded546a5addecf0384164913f629699  libjava/java/lang/Runnable.java
! 85a4aadd914376d82024fdd6bea4ddfd  libjava/java/lang/Runtime.java
! f4cb8f1478e2a431259c257e026036c1  libjava/java/lang/RuntimeException.java
! 31f1128ef0319a05036386708ded29f8  libjava/java/lang/RuntimePermission.java
! 78da9140d787512656d4039798c242ed  libjava/java/lang/SecurityException.java
! e4b7f1259adfb84c16b8063dd2abf69f  libjava/java/lang/SecurityManager.java
! 7adcf5a0cec2e120092542c7e6ca8507  libjava/java/lang/Short.java
! c92c1a40c4c1acdb11ac5f57fbc000a4  libjava/java/lang/StackOverflowError.java
! 88dad614a5aea68efec4193b73c1b671  libjava/java/lang/StackTraceElement.java
! e42b4cec32b11548b25b497d8f065642  libjava/java/lang/StrictMath.java
! 4bfca99af4ee8b33861e051464eaff52  libjava/java/lang/String.java
! 006b5c46829802474970a50585b1f374  libjava/java/lang/StringBuffer.java
! 4330a887ccc1bcf1f2f7f0f28bd82c43  libjava/java/lang/StringIndexOutOfBoundsException.java
! e268b55014ab6e090596e6fe6b22acc9  libjava/java/lang/System.java
! e425dbf410b7ab2bbdac604072f6953c  libjava/java/lang/Thread.java
! 77497f69a9ea60df606963e910e92e7b  libjava/java/lang/ThreadDeath.java
! ca28ac3c09b22e2764c8cab5c0183a44  libjava/java/lang/ThreadGroup.java
! ca21085b8a24bd1e182de06594bcf036  libjava/java/lang/ThreadLocal.java
! 1d4ba002588346700cd1d69a0150e9b0  libjava/java/lang/Throwable.java
  4b5dfc17b3865878cdbcd2f3eb2a758d  libjava/java/lang/UnknownError.java
! 184a9a7ff6592a59fac41dff9414af65  libjava/java/lang/UnsatisfiedLinkError.java
  9e3b86b90dee129796e100a9d4ecd505  libjava/java/lang/UnsupportedClassVersionError.java
! d0c275a3b32f98917be0aab8801c21f3  libjava/java/lang/UnsupportedOperationException.java
! 1644f5465fd19f83ef4df2f804472c1a  libjava/java/lang/VMClassLoader.java
! bda8d54820fc097bced76d5b25edf3e2  libjava/java/lang/VMCompiler.java
! 00a102003f13d90ad4bdc3320b138b26  libjava/java/lang/VMSecurityManager.java
! f9add5a4d3c4245fe88ca50948a0f9dd  libjava/java/lang/VMThrowable.java
! 33b9ebc70d5fc7473ba6a13d22552602  libjava/java/lang/VerifyError.java
! 1e41cf4254564d46faae1ef8f4a54460  libjava/java/lang/VirtualMachineError.java
! f5ee2d5ca4509155cdd3a9f6b077f528  libjava/java/lang/Void.java
  14df9fbde49dfe0dd672c7187fb8197c  libjava/java/lang/Win32Process.java
  ab75e19638c3cc59541661d0672eb7e1  libjava/java/lang/dtoa.c
  8758dda5a76bae7d7c4eb541d61113f7  libjava/java/lang/e_acos.c
*************** ee298ef4d869f1583677e78cf5cd70f8  libjav
*** 17821,17827 ****
  50d67196d185ea66284cd6e883ab9d2c  libjava/java/lang/e_scalb.c
  209c83f3b0778186d17cd4fe9a8cb628  libjava/java/lang/e_sqrt.c
  6b3e92e30c1060a625dca58556de2b75  libjava/java/lang/fdlibm.h
! 2402c40eedd2eb19d9615e996b7e7626  libjava/java/lang/ieeefp.h
  da0a5da0fde722faec99c97dfe39e05a  libjava/java/lang/k_cos.c
  05fbb2138bfd2de31460bd4411c5d61c  libjava/java/lang/k_rem_pio2.c
  0472c6b76326206d4d1e0490f33d2e41  libjava/java/lang/k_sin.c
--- 21276,21282 ----
  50d67196d185ea66284cd6e883ab9d2c  libjava/java/lang/e_scalb.c
  209c83f3b0778186d17cd4fe9a8cb628  libjava/java/lang/e_sqrt.c
  6b3e92e30c1060a625dca58556de2b75  libjava/java/lang/fdlibm.h
! 4dd4ce597bb7f78330fcd32920a61b8c  libjava/java/lang/ieeefp.h
  da0a5da0fde722faec99c97dfe39e05a  libjava/java/lang/k_cos.c
  05fbb2138bfd2de31460bd4411c5d61c  libjava/java/lang/k_rem_pio2.c
  0472c6b76326206d4d1e0490f33d2e41  libjava/java/lang/k_sin.c
*************** da0a5da0fde722faec99c97dfe39e05a  libjav
*** 17829,17871 ****
  4d196e7716702a582b84537f1dcea234  libjava/java/lang/mprec.c
  e8f7fa060267c80460fc25acc130a542  libjava/java/lang/mprec.h
  0e03aa9505189b6a268502954e459993  libjava/java/lang/natCharacter.cc
! 06a9d2af9c8b9a9b5c6eb9b0e7c2c90e  libjava/java/lang/natClass.cc
! 5fd0b399531a4d01e77bbf3e41da6047  libjava/java/lang/natClassLoader.cc
! c2be2874bbcb1a36ba3e7382923133a2  libjava/java/lang/natDouble.cc
  55412650ccf3af3ec8376e685f6d4845  libjava/java/lang/natEcosProcess.cc
  842368c7e6ed293e6e3f310ed9a3076f  libjava/java/lang/natFloat.cc
  c6eaf1e2175d821debebc2878c0520ef  libjava/java/lang/natMath.cc
! 825dcad5312e8ff485ac8bfa472f1792  libjava/java/lang/natObject.cc
! 5e97c30f55c21b5976fdc494acaa8856  libjava/java/lang/natPosixProcess.cc
! 667dca50cd445bace38caa46d6ff1027  libjava/java/lang/natRuntime.cc
! ca16478c088e0bb6ed55033466dab96f  libjava/java/lang/natString.cc
  7c87f5acddd8589e59cea5b11b3e5db6  libjava/java/lang/natStringBuffer.cc
! f45830bcbd2b282a2f2e3d9872561d17  libjava/java/lang/natSystem.cc
! 8e3b538134b73162f9efe240884cd263  libjava/java/lang/natThread.cc
  b353a4db158c64aef144cc2fb2d5441e  libjava/java/lang/natVMSecurityManager.cc
! 6ec4e80309384f3e9852cfbfb832ebb7  libjava/java/lang/natWin32Process.cc
  859bd639c7e8223a6fd9c54a55ceb9ab  libjava/java/lang/ref/PhantomReference.java
  c51b3c8999640534e7326a2420b40eda  libjava/java/lang/ref/Reference.java
  478edf7910cb3e01f685c09c254f7ec8  libjava/java/lang/ref/ReferenceQueue.java
  f933322bd67a86c179105efb31f97f24  libjava/java/lang/ref/SoftReference.java
  a0ae5aa7f1bafdd6fdf7db8a352fb473  libjava/java/lang/ref/WeakReference.java
  4214a8ee7a65405a70d0b1dd95b03e8c  libjava/java/lang/ref/natReference.cc
! 294281fc5d4f799320972e7810ad0238  libjava/java/lang/reflect/AccessibleObject.java
! 8398b2303ff9aa37b745fdf7ebffeac1  libjava/java/lang/reflect/Array.java
  1acebfe7e254c1c539fd5220d40baef5  libjava/java/lang/reflect/Constructor.java
! 08120c2d61634812a27a296a69f8a84f  libjava/java/lang/reflect/Field.java
! 3e852f9cbe5aae7aa4186e582bbe5cff  libjava/java/lang/reflect/InvocationHandler.java
! 40e6c23d65957b7435b9619bea880e49  libjava/java/lang/reflect/InvocationTargetException.java
! a14bff8ebfa89f5ecdf82fc32e50d085  libjava/java/lang/reflect/Member.java
  fbf77c87007d7a169c6e076c6d1278ba  libjava/java/lang/reflect/Method.java
! 2e0d234ef26a6a9b3c0823b0981b3163  libjava/java/lang/reflect/Modifier.java
! d25b544e6b9f7c275c9de0393829ec3d  libjava/java/lang/reflect/Proxy.java
! 076ec4f54fbd34dd77b58f2ab5595660  libjava/java/lang/reflect/ReflectPermission.java
! 3331d65b08c44e19003918a3210afb8b  libjava/java/lang/reflect/UndeclaredThrowableException.java
  a55ed0f26a5e0cde17706783791fb771  libjava/java/lang/reflect/natArray.cc
  c287b6ed7c8151f7a2f72e9a87f66df8  libjava/java/lang/reflect/natConstructor.cc
! be8337ab9bac0158d39c568b0952bf48  libjava/java/lang/reflect/natField.cc
! 78a1d68de63340d60debf5f72345f70e  libjava/java/lang/reflect/natMethod.cc
  5792a78b7ec940d3f2dde416cdd8d59b  libjava/java/lang/reflect/natProxy.cc
  107a200b158caac87047da803bf88242  libjava/java/lang/s_atan.c
  15cafe9763d41dda071f249cb349ad60  libjava/java/lang/s_ceil.c
--- 21284,21327 ----
  4d196e7716702a582b84537f1dcea234  libjava/java/lang/mprec.c
  e8f7fa060267c80460fc25acc130a542  libjava/java/lang/mprec.h
  0e03aa9505189b6a268502954e459993  libjava/java/lang/natCharacter.cc
! bcd91cf00a8ac475757c86f788cd7e52  libjava/java/lang/natClass.cc
! 88d0985d2e3db4a26119ef1bc413112e  libjava/java/lang/natClassLoader.cc
! 7d6de15286393d9085915c8d26c7ab91  libjava/java/lang/natDouble.cc
  55412650ccf3af3ec8376e685f6d4845  libjava/java/lang/natEcosProcess.cc
  842368c7e6ed293e6e3f310ed9a3076f  libjava/java/lang/natFloat.cc
  c6eaf1e2175d821debebc2878c0520ef  libjava/java/lang/natMath.cc
! 430809ac65fefe3b081b3b4720cd7ec0  libjava/java/lang/natObject.cc
! f1cdd7e99d2b32238dccdad7f27dfb9a  libjava/java/lang/natPosixProcess.cc
! 8cb7cb4ecaa3a5ce9a7bf1cd280790ae  libjava/java/lang/natRuntime.cc
! 88167d96b216818a1c0f182169c8e023  libjava/java/lang/natString.cc
  7c87f5acddd8589e59cea5b11b3e5db6  libjava/java/lang/natStringBuffer.cc
! 26955fca411c7e3367f4d48bf968f32b  libjava/java/lang/natSystem.cc
! 3707a2fa2b7555427b34205780d4e0b8  libjava/java/lang/natThread.cc
! f26a6e07419c6b49cd2fbb273820c6b1  libjava/java/lang/natVMClassLoader.cc
  b353a4db158c64aef144cc2fb2d5441e  libjava/java/lang/natVMSecurityManager.cc
! 099b753a5e3e667eac01d2545526506e  libjava/java/lang/natWin32Process.cc
  859bd639c7e8223a6fd9c54a55ceb9ab  libjava/java/lang/ref/PhantomReference.java
  c51b3c8999640534e7326a2420b40eda  libjava/java/lang/ref/Reference.java
  478edf7910cb3e01f685c09c254f7ec8  libjava/java/lang/ref/ReferenceQueue.java
  f933322bd67a86c179105efb31f97f24  libjava/java/lang/ref/SoftReference.java
  a0ae5aa7f1bafdd6fdf7db8a352fb473  libjava/java/lang/ref/WeakReference.java
  4214a8ee7a65405a70d0b1dd95b03e8c  libjava/java/lang/ref/natReference.cc
! b28d10d5da5e999e7bbbb02a4a276709  libjava/java/lang/reflect/AccessibleObject.java
! 1b70fcea846e40710820067760c93725  libjava/java/lang/reflect/Array.java
  1acebfe7e254c1c539fd5220d40baef5  libjava/java/lang/reflect/Constructor.java
! 897b833f60e84c7f9e734ed63b6e1b6f  libjava/java/lang/reflect/Field.java
! 24c9e673adfc96902c757a8f9ef0fcc8  libjava/java/lang/reflect/InvocationHandler.java
! 74c1d358683e428bde40997660c85912  libjava/java/lang/reflect/InvocationTargetException.java
! 1d865e412280d0b494a934da3e85b256  libjava/java/lang/reflect/Member.java
  fbf77c87007d7a169c6e076c6d1278ba  libjava/java/lang/reflect/Method.java
! 4c26e524e230e1348a77d77d82a4fca1  libjava/java/lang/reflect/Modifier.java
! e7349dd6952d74b850892fe4b298cf0b  libjava/java/lang/reflect/Proxy.java
! 2976ce3d7a8a615820665108e3fe2e1e  libjava/java/lang/reflect/ReflectPermission.java
! 4588d2e004ac8e56fe3c17f061b7dc85  libjava/java/lang/reflect/UndeclaredThrowableException.java
  a55ed0f26a5e0cde17706783791fb771  libjava/java/lang/reflect/natArray.cc
  c287b6ed7c8151f7a2f72e9a87f66df8  libjava/java/lang/reflect/natConstructor.cc
! d53e6737a04a4d5bc2595c4c7fa73add  libjava/java/lang/reflect/natField.cc
! c404f3436a7cbdec86f4acb524e8c591  libjava/java/lang/reflect/natMethod.cc
  5792a78b7ec940d3f2dde416cdd8d59b  libjava/java/lang/reflect/natProxy.cc
  107a200b158caac87047da803bf88242  libjava/java/lang/s_atan.c
  15cafe9763d41dda071f249cb349ad60  libjava/java/lang/s_ceil.c
*************** acf5e0124e5f6eb025ab139c8b8405de  libjav
*** 17889,18044 ****
  fcde59b4c779793eb076b4517d2dde0b  libjava/java/lang/w_pow.c
  6431279f0b17dec4770d407eff9fc71c  libjava/java/lang/w_remainder.c
  bb84b3cd77f245147929b536a705b614  libjava/java/lang/w_sqrt.c
! e138e95af949cbb044f9e285ccb73ca8  libjava/java/math/BigDecimal.java
! 8dbbd19f8f5bb59c5ef28db8817054cb  libjava/java/math/BigInteger.java
! 9b8890d57106e1280f96c88138232638  libjava/java/net/Authenticator.java
! 2e4a8077a75f48a82119abdbecdea426  libjava/java/net/BindException.java
! 388e7fae63075531650827c24770ab5e  libjava/java/net/ConnectException.java
! b5f9d002d50361aaa6176ba3ac8ff11a  libjava/java/net/ContentHandler.java
! 3ccb45c033a8ff2bd9da52cbbfb2c213  libjava/java/net/ContentHandlerFactory.java
! a4e13aba1cd54d9e61aa88f7ff0b1751  libjava/java/net/DatagramPacket.java
! 2b4817202aa6d218e6e4e29d3d987e19  libjava/java/net/DatagramSocket.java
! 6e5fd0fcbc4febedd1516147b848124d  libjava/java/net/DatagramSocketImpl.java
! 19c04bf34bcc09044eb84402ea1a7014  libjava/java/net/DatagramSocketImplFactory.java
! 1ce66f2c4f0ae060db2d4281d329f749  libjava/java/net/FileNameMap.java
! d36c6309d4a01ccb4ad000a075748600  libjava/java/net/HttpURLConnection.java
! e8fec779f03210983792d360da9b3f34  libjava/java/net/Inet4Address.java
! 850c07bc9f5b6496b2be2ffa7e58f51a  libjava/java/net/Inet6Address.java
! 68380a6f408bb351842a594a83328105  libjava/java/net/InetAddress.java
! 0531d06c1f09d36dd5945b6a766c0b10  libjava/java/net/InetSocketAddress.java
! 6dad3e59e9e70659635a20c8939dc681  libjava/java/net/JarURLConnection.java
! e08e4644b6a78ee8abc9aa7fc6a4783b  libjava/java/net/MalformedURLException.java
! 1397c3208fdd3dd5a9d708cabf83c1f8  libjava/java/net/MulticastSocket.java
! 765ad72ca081941d9135f4be06fa011b  libjava/java/net/NetPermission.java
! 31b343754822689080eb0356ca8faaab  libjava/java/net/NetworkInterface.java
! 012c42255d24e68c048294801bdc1752  libjava/java/net/NoRouteToHostException.java
! b5492da3c31f5840a8a17c28c7c4ad7f  libjava/java/net/PasswordAuthentication.java
! e1a0fcefe6c7353e630d3360532d3bef  libjava/java/net/PortUnreachableException.java
! 380a36ef7c5978f3a37de84d97749f66  libjava/java/net/ProtocolException.java
! 7db8999085cc9957aac59e9fdeafcc83  libjava/java/net/ServerSocket.java
! 78b8cd982531449cca0680b912b7cda2  libjava/java/net/Socket.java
! 0af60543a30f88cdbe8dab29753cd4fc  libjava/java/net/SocketAddress.java
! 98dd1beae5634d8393fd3f530b00ba35  libjava/java/net/SocketException.java
! 259ea727e1296f1688e984bc942f9769  libjava/java/net/SocketImpl.java
! cd4e0baebec0161da7c65cc43f20c666  libjava/java/net/SocketImplFactory.java
! 764177fee2610886834a6f7e4c62b0f0  libjava/java/net/SocketOptions.java
! e6ad5ac53baddc97389eb16a969ae933  libjava/java/net/SocketPermission.java
! a59e0312f233769b3c0ca88ef638415b  libjava/java/net/SocketTimeoutException.java
! 987453ef6dfab23c17e16c37e50051b4  libjava/java/net/URI.java
! 8d54328513f0a6cdca85e7af3e334351  libjava/java/net/URISyntaxException.java
! 1e9594d8a3654e2dd9e78aeadd1b1424  libjava/java/net/URL.java
! 93caa32e79570270fe3dbfeeac9a8037  libjava/java/net/URLClassLoader.java
! fbb12c08265e6c8c97d3cc9f05cf2cc2  libjava/java/net/URLConnection.java
! deecfa7af231e8a7301a3bc55c565127  libjava/java/net/URLDecoder.java
! 2132ef6b370c3d030856676549547693  libjava/java/net/URLEncoder.java
! 0f51d6248a376db54f8df7b001245db6  libjava/java/net/URLStreamHandler.java
! ed763606b2ae97221360276ec4423791  libjava/java/net/URLStreamHandlerFactory.java
! 13f902e959164a5318a0f6e08230c270  libjava/java/net/UnknownHostException.java
! b45aa1c482bc1497741da565580fcea7  libjava/java/net/UnknownServiceException.java
  17bc892a6540f518b849167a4c35f8b9  libjava/java/net/natInetAddressNoNet.cc
! bb38d91b1ad58680f2372199e78cdabc  libjava/java/net/natInetAddressPosix.cc
! 1ebf053b2359719b44e51bb41e0b7562  libjava/java/net/natInetAddressWin32.cc
  82c0a0144235ee5825107aa5bb6e43ab  libjava/java/net/natNetworkInterfaceNoNet.cc
  1602eaa918227bb011e485da72166556  libjava/java/net/natNetworkInterfacePosix.cc
! f6f740aa560631619f60814e1ea14183  libjava/java/net/natNetworkInterfaceWin32.cc
! e12978db31ec0dc16b2edcf721d09ffe  libjava/java/nio/Buffer.java
  aa5549d0a9fcbc8b43a3848bb8172b01  libjava/java/nio/BufferOverflowException.java
  0f5518a7a6a4323257447d39ea42928a  libjava/java/nio/BufferUnderflowException.java
! b40f242d98f33778509185e62f1e0257  libjava/java/nio/ByteBuffer.java
! 96fca8a5b2286dcfde51dac4ba8b72d2  libjava/java/nio/ByteBufferHelper.java
! 0093e3711a00dc7190f4a45acf61b678  libjava/java/nio/ByteBufferImpl.java
! ff2fdbebc54633d1f058c24ee618c63b  libjava/java/nio/ByteOrder.java
! 72865d70d24d18f272a726efbc2a74c7  libjava/java/nio/CharBuffer.java
! cb6a1228595e7fd1011ef8e012146d28  libjava/java/nio/CharBufferImpl.java
! a554040a862a82da0c5130e8ae0a7276  libjava/java/nio/CharViewBufferImpl.java
! e24e0c9fd9cb0d7d13da9ce54112aaad  libjava/java/nio/DirectByteBufferImpl.java
! 52b027c90b9d2a1343639feac50c6900  libjava/java/nio/DoubleBuffer.java
! fe1ac91dce2c929fd78f8df4fea327be  libjava/java/nio/DoubleBufferImpl.java
! 72e4035bdc5c72e0f8a01656114bccc4  libjava/java/nio/DoubleViewBufferImpl.java
! d17666cbe01adae9e4a759d31ceca22b  libjava/java/nio/FloatBuffer.java
! 5742b768bd5abbd85ef1836fa9a8b6b8  libjava/java/nio/FloatBufferImpl.java
! 96bd0ec48470464fd7c384d59f863f12  libjava/java/nio/FloatViewBufferImpl.java
! 3369d6d80ff2fa8dd6050a67065d47dc  libjava/java/nio/IntBuffer.java
! 87c42ac6a3228d814f9b5a08f917df18  libjava/java/nio/IntBufferImpl.java
! 18b864c08df011d8648d25eff7808ce8  libjava/java/nio/IntViewBufferImpl.java
  8a8a110fd54dc91a2f201c662b122b87  libjava/java/nio/InvalidMarkException.java
! 4bc1a0d826e61e1f456953933910fdb0  libjava/java/nio/LongBuffer.java
! 54ca40a12c00a21d14e8234bbcf892ec  libjava/java/nio/LongBufferImpl.java
! cde3bc0f8fc10d6456f6e3e2326f417c  libjava/java/nio/LongViewBufferImpl.java
! 0366c6cd32265b955aebe891f873d4a7  libjava/java/nio/MappedByteBuffer.java
! a10fe779217c8f129c1bd1be790c299a  libjava/java/nio/MappedByteBufferImpl.java
  6872f3023009198422d06771dc2bb733  libjava/java/nio/ReadOnlyBufferException.java
! a0db42b57fd6eae92de7341aa050ed83  libjava/java/nio/ShortBuffer.java
! a9112a6afe6ad7f2302585e8604da6f4  libjava/java/nio/ShortBufferImpl.java
! 51b64d565b9e0fadc593f97c51bf5410  libjava/java/nio/ShortViewBufferImpl.java
! 2031e68fd963910f57f9470507b46da2  libjava/java/nio/channels/AlreadyConnectedException.java
! 8c7d3299f9d79ef5a8632fda6a783cbd  libjava/java/nio/channels/AsynchronousCloseException.java
! 02f3dbb3bf62daab72f72edb1c96a2fb  libjava/java/nio/channels/ByteChannel.java
! ba7d4a547fe8b3ad9ec17b5907181aad  libjava/java/nio/channels/CancelledKeyException.java
! e134d7a1b5fa90376b53d149efc0cef5  libjava/java/nio/channels/Channel.java
! 7418bea8fe4f652470ec4fbd15c4c722  libjava/java/nio/channels/Channels.java
! dd0575abc47fd32aef010104a00d882c  libjava/java/nio/channels/ClosedByInterruptException.java
! d4696a6e70e25e838be5fbe6c257e6a0  libjava/java/nio/channels/ClosedChannelException.java
! 65b88b7a735b60277ee2d7420eb28543  libjava/java/nio/channels/ClosedSelectorException.java
! 2e769e9ebcccee36ecb9f07015d8503b  libjava/java/nio/channels/ConnectionPendingException.java
! b72eeefa6d0915b5412dff6861a0228b  libjava/java/nio/channels/DatagramChannel.java
! 509e60ea768d2b4c1393b5bc3171620d  libjava/java/nio/channels/FileChannel.java
! f10d57dda2b27f5ea14c9c0304bb78bb  libjava/java/nio/channels/FileChannelImpl.java
! 2a846a18a94a1943dcb4ad31bd63208f  libjava/java/nio/channels/FileLock.java
! 3d4ba74c8ac0e71c342331a4ce9b8c6f  libjava/java/nio/channels/FileLockInterruptionException.java
! 8da73be742d1e93db9d6c638346bc33d  libjava/java/nio/channels/GatheringByteChannel.java
! 8fb199ed4f5bbab6a0a7f774dba0b89f  libjava/java/nio/channels/IllegalBlockingModeException.java
! 202c8ec8e6eebb1e9297be987525c812  libjava/java/nio/channels/IllegalSelectorException.java
! 9a8ff2497779c608d439dcbb0f975d7d  libjava/java/nio/channels/InterruptibleChannel.java
! a69c0837e67675f078b1e2ca7081462e  libjava/java/nio/channels/NoConnectionPendingException.java
! 9b97d102b5aefb505458ce918bbb02ed  libjava/java/nio/channels/NonReadableChannelException.java
! a1dedd16f8a5e94288f115cae216afad  libjava/java/nio/channels/NonWritableChannelException.java
! a82714c876dd47340ff66b0647c8f4d2  libjava/java/nio/channels/NotYetBoundException.java
! 2373cc3edec75252a2b3835fd731daa0  libjava/java/nio/channels/NotYetConnectedException.java
! 9851c661a594f8935abf5b758771f818  libjava/java/nio/channels/OverlappingFileLockException.java
! cc8652dcdd2f3207482ac2635f52a90d  libjava/java/nio/channels/Pipe.java
! 91e28a064fccc92f636d39e8fbb3d359  libjava/java/nio/channels/ReadableByteChannel.java
! 63e5a59bc2178661d1ba515e1843dffe  libjava/java/nio/channels/ScatteringByteChannel.java
! 96a7a0557e5d01dbc8d9e26d665f4dad  libjava/java/nio/channels/SelectableChannel.java
! 2380da3145b59919cba9152356ded6e7  libjava/java/nio/channels/SelectionKey.java
! ac067fe3ad2ce73e216813fbd0a28314  libjava/java/nio/channels/Selector.java
! aa8ae14ecd2c2dd3f1708635c54ab518  libjava/java/nio/channels/ServerSocketChannel.java
! 4c065f014017598e074881100ec3deeb  libjava/java/nio/channels/SocketChannel.java
! dcf0f30121e9b434859cc300e77e1172  libjava/java/nio/channels/UnresolvedAddressException.java
! 84b3b4be3c27efa4207541dabd5eec17  libjava/java/nio/channels/UnsupportedAddressTypeException.java
! 9859e0ac1ba25938d18592f8878fe318  libjava/java/nio/channels/WritableByteChannel.java
! 797f01385699d20eff4b5e24af1195c8  libjava/java/nio/channels/natFileChannelImpl.cc
! 7a172d98e4e2dd0b1e0c16740e221e5a  libjava/java/nio/channels/spi/AbstractInterruptibleChannel.java
! debd29f020d84e541ef83d2a741a1a14  libjava/java/nio/channels/spi/AbstractSelectableChannel.java
! 136544951f30c43f785318d94a989ea7  libjava/java/nio/channels/spi/AbstractSelectionKey.java
! 616126bb49d1ce32b564545ecd00f208  libjava/java/nio/channels/spi/AbstractSelector.java
! 08a472f13da202104bc9e935d7709ce3  libjava/java/nio/channels/spi/SelectorProvider.java
  e0ae87062a2d62c363f56bb22f52165c  libjava/java/nio/charset/CharacterCodingException.java
! b5666dc1f88e22e4ec55a3c04b882e9a  libjava/java/nio/charset/Charset.java
! 4c67b46147566c7ac344262d74801adc  libjava/java/nio/charset/CharsetDecoder.java
  0131ccba0d8eabb5c2f0b41b525403c1  libjava/java/nio/charset/CharsetEncoder.java
  386ed7d768c8c05b08a7a6e3e8dfe2ca  libjava/java/nio/charset/CoderMalfunctionError.java
! ffb99f3bca249cb40dab7dbbcc84f822  libjava/java/nio/charset/CoderResult.java
  8a52b998207aef19cd3b214b190a94e1  libjava/java/nio/charset/CodingErrorAction.java
! 892f81a0634211532306c2590da1b591  libjava/java/nio/charset/IllegalCharsetNameException.java
! cac2f0bf8cbdf9057ccfce96ad5f6c6e  libjava/java/nio/charset/MalformedInputException.java
  2b747dc91e9ce98c6023ab511a61b750  libjava/java/nio/charset/UnmappableCharacterException.java
  1f7caa065d09839e42e9cb2a455707f6  libjava/java/nio/charset/UnsupportedCharsetException.java
! 2e4249f466c4e27724aa2cd7de17e8f9  libjava/java/nio/charset/spi/CharsetProvider.java
! 953f755ab297d581c88adb84dcfa4751  libjava/java/nio/natDirectByteBufferImpl.cc
  c6dad42d304e5e3d951f3f91672d0065  libjava/java/rmi/AccessException.java
  4bd3033997bfe5a78c1ceff72d63b6fa  libjava/java/rmi/AlreadyBoundException.java
  27b275626015632f6d3f39d5ef12a1a3  libjava/java/rmi/ConnectException.java
  5870f4fe19912cb4a1899b3d2f5e45a0  libjava/java/rmi/ConnectIOException.java
  c5203bc420186272ece1b622326b5c02  libjava/java/rmi/MarshalException.java
! e2eb1f0f0e198b05f1dac71565e82530  libjava/java/rmi/MarshalledObject.java
! 8dc5b0a31c5da22e53243713881a1bbd  libjava/java/rmi/Naming.java
  cac3f0c03e7367b5cb5f2ce6a67ab88d  libjava/java/rmi/NoSuchObjectException.java
  a3bf20c5af69db6507016cf3fce625b1  libjava/java/rmi/NotBoundException.java
  5c2b97d396aee5bde9fb89cfe1c98e06  libjava/java/rmi/RMISecurityException.java
! d9088b3cf8cd87d1a36c54ad0466ad94  libjava/java/rmi/RMISecurityManager.java
! e4c51273aced1ceda976f5c21477188f  libjava/java/rmi/Remote.java
! 4fb25b4d5cf9ea3cdcd32eae6fa26262  libjava/java/rmi/RemoteException.java
  4dff85f009753690c7e91e9f184b707c  libjava/java/rmi/ServerError.java
  ceb780c7d5715667314590bb5976887d  libjava/java/rmi/ServerException.java
  2a259df357e001d89942a4a1fc389d69  libjava/java/rmi/ServerRuntimeException.java
--- 21345,21500 ----
  fcde59b4c779793eb076b4517d2dde0b  libjava/java/lang/w_pow.c
  6431279f0b17dec4770d407eff9fc71c  libjava/java/lang/w_remainder.c
  bb84b3cd77f245147929b536a705b614  libjava/java/lang/w_sqrt.c
! 3dd34fa12cf271f99c486b1a60e71254  libjava/java/math/BigDecimal.java
! 71cb2059df5d2c9e01cb239a742fb730  libjava/java/math/BigInteger.java
! 60e13e29dfc8f651b5bedde0c8b040e0  libjava/java/net/Authenticator.java
! 539c96ca0fb5667b572bf9ecd8120fed  libjava/java/net/BindException.java
! c922312481e7bc45f2d3631ed821885b  libjava/java/net/ConnectException.java
! 2f62a3f3ab09246467546d0ac3fd76ce  libjava/java/net/ContentHandler.java
! e748d3fb7e8ce3f15de8ead3d65e319c  libjava/java/net/ContentHandlerFactory.java
! 62066d9dbaee54046eea6a2729825e8b  libjava/java/net/DatagramPacket.java
! ab6c549d695cd223e1fe06fe8cc8ecc1  libjava/java/net/DatagramSocket.java
! e0efd4bf7131500cbc612d3c9ebac85f  libjava/java/net/DatagramSocketImpl.java
! 6fd2e4b8bd4b559b5f92fe85f77225e6  libjava/java/net/DatagramSocketImplFactory.java
! 0f7d5aada33d603d01bd69048e13ded4  libjava/java/net/FileNameMap.java
! 6cef506c69da4aaa112f1bddf5519d31  libjava/java/net/HttpURLConnection.java
! 043958b57a25f6e35265a9f238827c9c  libjava/java/net/Inet4Address.java
! 20bc5a98f0faacdbbea7e12d9f5e15d7  libjava/java/net/Inet6Address.java
! 2012bdd7d065eaa4fcd34f5823b3e4dc  libjava/java/net/InetAddress.java
! fd372ef78be2e6074e1aac3ecbaafd57  libjava/java/net/InetSocketAddress.java
! 983fd2969441403229204627dd26d96f  libjava/java/net/JarURLConnection.java
! bba08ddf7358a3e1206b1091c2b25481  libjava/java/net/MalformedURLException.java
! 4997ee690dc75f15d10b751fbf536781  libjava/java/net/MulticastSocket.java
! fcb4c2fcf62757c9bfee116a60c1d9d3  libjava/java/net/NetPermission.java
! c023ba29fbeb0a4ec7d59e60056dd483  libjava/java/net/NetworkInterface.java
! b261fc10b523cc94e0c74558601c0301  libjava/java/net/NoRouteToHostException.java
! d9b522795ac827fd65e8a1063af06586  libjava/java/net/PasswordAuthentication.java
! 5785820a5e088c9508801df941d9e137  libjava/java/net/PortUnreachableException.java
! 702cdcd867996f517d5afd2ae47ae5f3  libjava/java/net/ProtocolException.java
! cabed84f302d3ca2b7cc33d589b200e3  libjava/java/net/ServerSocket.java
! 8c726d13299b1a535f5a1aed52c71f57  libjava/java/net/Socket.java
! 130d747b60a9528a155e04a41e7c10e8  libjava/java/net/SocketAddress.java
! eb61ff6ce437b6dd4bae0cce4695c5de  libjava/java/net/SocketException.java
! 0d4a4f9fa065fdd73ef71248a250ea21  libjava/java/net/SocketImpl.java
! e1820b809f582ca7d75a7fafd369b313  libjava/java/net/SocketImplFactory.java
! b1709857e4517d45aa1b38a4e47fd335  libjava/java/net/SocketOptions.java
! 2498ccbbf2d9b8573beffeb203a39f4a  libjava/java/net/SocketPermission.java
! d84afed5ffee775ddd195cc6b2629e77  libjava/java/net/SocketTimeoutException.java
! 23ed36ed447a48759ca91960596f0eda  libjava/java/net/URI.java
! f51fc0603615be6b1b45c7bd17ee54c3  libjava/java/net/URISyntaxException.java
! f6324095260e4be5ae15e971980d1914  libjava/java/net/URL.java
! 710b67550dadb92ecae4c7817f5f2401  libjava/java/net/URLClassLoader.java
! 34de06e0a4228f6d31bbbc767551e731  libjava/java/net/URLConnection.java
! 07b586565d98370536890bd0aefea733  libjava/java/net/URLDecoder.java
! fc1a6d3cccddda0fe6c6116fbcf5e54d  libjava/java/net/URLEncoder.java
! d3b76ef3ec78f2c40d706b2048a0e0ca  libjava/java/net/URLStreamHandler.java
! a155bf59992c1842d3afb38737c1e0e1  libjava/java/net/URLStreamHandlerFactory.java
! a644b717c323a6a7a0f57e687375fe74  libjava/java/net/UnknownHostException.java
! f99d157b01c328711e2e506deb5c5203  libjava/java/net/UnknownServiceException.java
  17bc892a6540f518b849167a4c35f8b9  libjava/java/net/natInetAddressNoNet.cc
! 51c25382f5a2880fe83f88bf79649fbf  libjava/java/net/natInetAddressPosix.cc
! 61dc6eb17c86d882416fa31544d5b649  libjava/java/net/natInetAddressWin32.cc
  82c0a0144235ee5825107aa5bb6e43ab  libjava/java/net/natNetworkInterfaceNoNet.cc
  1602eaa918227bb011e485da72166556  libjava/java/net/natNetworkInterfacePosix.cc
! c1fb17c2052c60e13688981071330a70  libjava/java/net/natNetworkInterfaceWin32.cc
! a4d439e1de7274d071f98754502d9a0d  libjava/java/nio/Buffer.java
  aa5549d0a9fcbc8b43a3848bb8172b01  libjava/java/nio/BufferOverflowException.java
  0f5518a7a6a4323257447d39ea42928a  libjava/java/nio/BufferUnderflowException.java
! 33097a90f70ab2848cf992622a3d11c4  libjava/java/nio/ByteBuffer.java
! 36b88d7a0593bf445c8006f83a7ff3b3  libjava/java/nio/ByteBufferHelper.java
! c258b6838abacdab438034fc8856858e  libjava/java/nio/ByteBufferImpl.java
! d9d4942a4177b3a1dbd535ef1cc39135  libjava/java/nio/ByteOrder.java
! 409903677f9662a80636f5dab3867f00  libjava/java/nio/CharBuffer.java
! a172ddb3a027a2cc4d737409b8ea7466  libjava/java/nio/CharBufferImpl.java
! 213517041cb14d720455b6e09458a81a  libjava/java/nio/CharViewBufferImpl.java
! 305fe50fc78ffb793bbaf44b85653f54  libjava/java/nio/DirectByteBufferImpl.java
! 3ca772379bb012d13de79fd14583dd9b  libjava/java/nio/DoubleBuffer.java
! ee6af503cd87971ac515b17ba9785849  libjava/java/nio/DoubleBufferImpl.java
! 7cb98694a6efa3a9fdc7c21b6d0927ec  libjava/java/nio/DoubleViewBufferImpl.java
! 292d85475973fa2da5c69339f80ca94d  libjava/java/nio/FloatBuffer.java
! bdcbc7fba52adc644c90ef1a47fb54a1  libjava/java/nio/FloatBufferImpl.java
! a8936841a8e0e2ca4ae6a1227d3d30fe  libjava/java/nio/FloatViewBufferImpl.java
! bcfcbeb0034346e0d8e5834888018229  libjava/java/nio/IntBuffer.java
! 606da1f2707ea369719470007d12d151  libjava/java/nio/IntBufferImpl.java
! 2b9d5cb5487c6ebbb20c91fa95050cf7  libjava/java/nio/IntViewBufferImpl.java
  8a8a110fd54dc91a2f201c662b122b87  libjava/java/nio/InvalidMarkException.java
! 9a1b2f8b34267d2f9c96b6fd9f14de03  libjava/java/nio/LongBuffer.java
! 9231078773e3ff7768f2f85ff3e923b5  libjava/java/nio/LongBufferImpl.java
! a8c9a91bc48aaeaa8209af8bd5b42ebf  libjava/java/nio/LongViewBufferImpl.java
! 33e2839a488380af180bb9c53b39c196  libjava/java/nio/MappedByteBuffer.java
! 46a5593208e4a1a575ab0e9d50cda3db  libjava/java/nio/MappedByteBufferImpl.java
  6872f3023009198422d06771dc2bb733  libjava/java/nio/ReadOnlyBufferException.java
! ee94e881baa56996bf20127814ed76b4  libjava/java/nio/ShortBuffer.java
! 510dfc6796fe4ba848986d80ccad24a5  libjava/java/nio/ShortBufferImpl.java
! 8d2b700be3f6c1cd4d59d90c71b9b8b1  libjava/java/nio/ShortViewBufferImpl.java
! 787f8e4d866a58cb91a23237671cfa1d  libjava/java/nio/VMDirectByteBuffer.java
! e1404a4d3b522ec6cf7229e45b14d4fe  libjava/java/nio/channels/AlreadyConnectedException.java
! 43df7dfda317a768350354df1bfc9aba  libjava/java/nio/channels/AsynchronousCloseException.java
! 4a9193558ad94c98ad551a76c4dbd465  libjava/java/nio/channels/ByteChannel.java
! 29fcd836666df9fbf3cd49a726395a75  libjava/java/nio/channels/CancelledKeyException.java
! 7b82479709fc1cd619a5f95ee2b33504  libjava/java/nio/channels/Channel.java
! 046171f07dc447ca0b36f59d418228ae  libjava/java/nio/channels/Channels.java
! 0426aff440bc082fff82791e62a064ac  libjava/java/nio/channels/ClosedByInterruptException.java
! c32b4e4ad18b9ca674a2b665c07e9add  libjava/java/nio/channels/ClosedChannelException.java
! d030f54f2f5b39ebb34902b56a4abdc1  libjava/java/nio/channels/ClosedSelectorException.java
! 612d388676d14fd259a02ae38fcae1aa  libjava/java/nio/channels/ConnectionPendingException.java
! 82217b00498996e9eac8964c2c37b1fc  libjava/java/nio/channels/DatagramChannel.java
! 1616c26a8400507bfdf517f12b786905  libjava/java/nio/channels/FileChannel.java
! ce4e53ad15bfd0f154d69048c308aed0  libjava/java/nio/channels/FileLock.java
! 17e46218dc369e2fb3b47197f262fe2f  libjava/java/nio/channels/FileLockInterruptionException.java
! 447e5c03e45f58c877924c0e5954d38c  libjava/java/nio/channels/GatheringByteChannel.java
! 6eb82e166280772ef4229e0d7a5e9346  libjava/java/nio/channels/IllegalBlockingModeException.java
! 601aeb3cf2871db32c9bd1ac2778ad04  libjava/java/nio/channels/IllegalSelectorException.java
! f599d510523e12aef9c69c1adbeacf24  libjava/java/nio/channels/InterruptibleChannel.java
! b4b817199554065aaaa0e5bc9fd3e16f  libjava/java/nio/channels/NoConnectionPendingException.java
! 98ae0bc2b93c09a0888e6ac86f55a118  libjava/java/nio/channels/NonReadableChannelException.java
! 3d2a848cc38ff38fc13deb575fea4c78  libjava/java/nio/channels/NonWritableChannelException.java
! 2fea58d4621a095cb8653a9980dac328  libjava/java/nio/channels/NotYetBoundException.java
! 13c902606c873ec42baf865d4c0d5c93  libjava/java/nio/channels/NotYetConnectedException.java
! f131d1a0206b2661044362fe0b27a0bc  libjava/java/nio/channels/OverlappingFileLockException.java
! d0cb7d92813a91db573a81b83272c4b1  libjava/java/nio/channels/Pipe.java
! aeaffdf9de4557ae555401e8000a44a5  libjava/java/nio/channels/ReadableByteChannel.java
! 89654243556c47d216f3babb909ca0f5  libjava/java/nio/channels/ScatteringByteChannel.java
! f67cb2839c6fbe9de599cfa5bf837bab  libjava/java/nio/channels/SelectableChannel.java
! dd0c8441d0d370528cd61df8e06e6135  libjava/java/nio/channels/SelectionKey.java
! 51b0fc16b0ff4847f659415496b1c4f6  libjava/java/nio/channels/Selector.java
! ac697c6407ba9dd336505d8ffcf91ff9  libjava/java/nio/channels/ServerSocketChannel.java
! 2a11828e53460514f7a7824ab3b0f889  libjava/java/nio/channels/SocketChannel.java
! 8b1d38adbd66703aec03153a1920d0cc  libjava/java/nio/channels/UnresolvedAddressException.java
! b7a26772b0a6e5ef2c8dbecb3dbf3f56  libjava/java/nio/channels/UnsupportedAddressTypeException.java
! 3a402b600fd2fba4559cdcc01cf51f1b  libjava/java/nio/channels/WritableByteChannel.java
! de95ab9b80a6e44589d33bfa1213db39  libjava/java/nio/channels/natChannels.cc
! 435ba634c62983da8d691e60d06298cb  libjava/java/nio/channels/spi/AbstractInterruptibleChannel.java
! 57c8f0ef897cda53ef69f2445850e81c  libjava/java/nio/channels/spi/AbstractSelectableChannel.java
! cfa715d7acbc7f67b4751d74012417ae  libjava/java/nio/channels/spi/AbstractSelectionKey.java
! dc0ddecf98603a73da8033a5d26040bb  libjava/java/nio/channels/spi/AbstractSelector.java
! 6f2dbbf0932b12387b777e860983aecf  libjava/java/nio/channels/spi/SelectorProvider.java
  e0ae87062a2d62c363f56bb22f52165c  libjava/java/nio/charset/CharacterCodingException.java
! 42d169958c911109a214b01dde00b58b  libjava/java/nio/charset/Charset.java
! ff4f2df3d9e855e662eebb67ea3439b0  libjava/java/nio/charset/CharsetDecoder.java
  0131ccba0d8eabb5c2f0b41b525403c1  libjava/java/nio/charset/CharsetEncoder.java
  386ed7d768c8c05b08a7a6e3e8dfe2ca  libjava/java/nio/charset/CoderMalfunctionError.java
! f9e23e7fd0df59f2821e59029a3ba3ba  libjava/java/nio/charset/CoderResult.java
  8a52b998207aef19cd3b214b190a94e1  libjava/java/nio/charset/CodingErrorAction.java
! 75c8861403365cbe9f9600190fc1516f  libjava/java/nio/charset/IllegalCharsetNameException.java
! 17e753f38dd620b5ac1c3286bbb473d8  libjava/java/nio/charset/MalformedInputException.java
  2b747dc91e9ce98c6023ab511a61b750  libjava/java/nio/charset/UnmappableCharacterException.java
  1f7caa065d09839e42e9cb2a455707f6  libjava/java/nio/charset/UnsupportedCharsetException.java
! e1a3888e87530e2dfe29d7ad5cf28d68  libjava/java/nio/charset/spi/CharsetProvider.java
! 55656ec1d5fd06cb6f85c50ddc227382  libjava/java/nio/natDirectByteBufferImpl.cc
  c6dad42d304e5e3d951f3f91672d0065  libjava/java/rmi/AccessException.java
  4bd3033997bfe5a78c1ceff72d63b6fa  libjava/java/rmi/AlreadyBoundException.java
  27b275626015632f6d3f39d5ef12a1a3  libjava/java/rmi/ConnectException.java
  5870f4fe19912cb4a1899b3d2f5e45a0  libjava/java/rmi/ConnectIOException.java
  c5203bc420186272ece1b622326b5c02  libjava/java/rmi/MarshalException.java
! 137e72eeb64f7c42704a351c5499223e  libjava/java/rmi/MarshalledObject.java
! 75dd5f4781422bd99a8553e88a639b42  libjava/java/rmi/Naming.java
  cac3f0c03e7367b5cb5f2ce6a67ab88d  libjava/java/rmi/NoSuchObjectException.java
  a3bf20c5af69db6507016cf3fce625b1  libjava/java/rmi/NotBoundException.java
  5c2b97d396aee5bde9fb89cfe1c98e06  libjava/java/rmi/RMISecurityException.java
! 59a69d7754c03772bce79d3ce45239da  libjava/java/rmi/RMISecurityManager.java
! 1e6174d28b381344e78a37bcc51cce56  libjava/java/rmi/Remote.java
! 2ffff67750083713061280c64ba08135  libjava/java/rmi/RemoteException.java
  4dff85f009753690c7e91e9f184b707c  libjava/java/rmi/ServerError.java
  ceb780c7d5715667314590bb5976887d  libjava/java/rmi/ServerException.java
  2a259df357e001d89942a4a1fc389d69  libjava/java/rmi/ServerRuntimeException.java
*************** ceb780c7d5715667314590bb5976887d  libjav
*** 18046,18194 ****
  2f520aca54db054cbb157d37e8a30876  libjava/java/rmi/UnexpectedException.java
  7c2b884f5fce8118bc57b4ea171e9187  libjava/java/rmi/UnknownHostException.java
  155a39ea3161a9e44dbd03834b89cf0d  libjava/java/rmi/UnmarshalException.java
! 25120406a514429ca59f5ce68aa42677  libjava/java/rmi/activation/Activatable.java
  81d55e3b6a2140a00a5ac59d54b99f61  libjava/java/rmi/activation/ActivateFailedException.java
! 47977878fcd6ad4b6927ebaf09c40fee  libjava/java/rmi/activation/ActivationDesc.java
! 51d5af87c2c5103726e38921200feb6e  libjava/java/rmi/activation/ActivationException.java
! 2ae3f8dff7b0141b4620a1cb6ceb9e33  libjava/java/rmi/activation/ActivationGroup.java
! a3bc6f3c9e5ab6393ea8ca043c89221c  libjava/java/rmi/activation/ActivationGroupDesc.java
! 1eaa60d415d80cfaa3eaabe0f8598940  libjava/java/rmi/activation/ActivationGroupID.java
! 7738b3253b5dbd7a531ff08bd76aa12b  libjava/java/rmi/activation/ActivationID.java
! 1fd6779f8d8f1c6b6fc047fdc5165e96  libjava/java/rmi/activation/ActivationInstantiator.java
! 6a3ed418b8ecae94e7207a9e13260ab9  libjava/java/rmi/activation/ActivationMonitor.java
! a9fc9490921406827792783a353b255e  libjava/java/rmi/activation/ActivationSystem.java
! d8ef349024428318bf85460b70ac353c  libjava/java/rmi/activation/Activator.java
  a4fff6d4e08c886e9854917c29681a72  libjava/java/rmi/activation/UnknownGroupException.java
  e3f456810b365cfa2b35db54292afca5  libjava/java/rmi/activation/UnknownObjectException.java
! 0eb4be6a7e671cd6b1ee1a763cd8b4b9  libjava/java/rmi/dgc/DGC.java
! 9412f37651606b3c3382f442abd26c83  libjava/java/rmi/dgc/Lease.java
! 5f83cda65880bb1d8d2c508e5fbad477  libjava/java/rmi/dgc/VMID.java
! aaf4732b2f925469c3b637ec11ea0991  libjava/java/rmi/registry/LocateRegistry.java
! 8ae1347815961d434f06d68867243645  libjava/java/rmi/registry/Registry.java
! 1aed339d6cc94868af8466624d67f8df  libjava/java/rmi/registry/RegistryHandler.java
  fd64f453d737e0ba73b319aa6ab05c90  libjava/java/rmi/server/ExportException.java
! b14828bc01aacc0e9f823e9cb72da953  libjava/java/rmi/server/LoaderHandler.java
! 608b64d7843cef09544332453ff47d58  libjava/java/rmi/server/LogStream.java
! da629c561ab5b88cb3a310083c1c8343  libjava/java/rmi/server/ObjID.java
! ec759fb8c6a8f65f3c1d46f8983063c5  libjava/java/rmi/server/Operation.java
! 5e0362f8fed1d404da049b2d95575e77  libjava/java/rmi/server/RMIClassLoader.java
! b72f29f36bbab3ae14530915e19743aa  libjava/java/rmi/server/RMIClassLoaderSpi.java
! 0ee4e8ad0f450346f1a60346da007c0f  libjava/java/rmi/server/RMIClientSocketFactory.java
! 7bb0daedc136ba7b5550102fd4842ca0  libjava/java/rmi/server/RMIFailureHandler.java
! 7fb58173f955d4ce35a5869e51056a6c  libjava/java/rmi/server/RMIServerSocketFactory.java
! 877e8e0ad5f1ed859124a04e6d338dad  libjava/java/rmi/server/RMISocketFactory.java
! 37a12dd3a16bd38111fe6bf955200571  libjava/java/rmi/server/RemoteCall.java
! 6d5478aaaf639fa2e087a9879da2a2cf  libjava/java/rmi/server/RemoteObject.java
! d99707ec4c9f847846a751566e4f4d33  libjava/java/rmi/server/RemoteRef.java
! a0075aa17a23ab31781aa5ab7f2323c2  libjava/java/rmi/server/RemoteServer.java
! 0f017b2a8c6768f253f753a01f34a029  libjava/java/rmi/server/RemoteStub.java
! dbb0eec79c36f12c1f6620a142d960e8  libjava/java/rmi/server/ServerCloneException.java
  6a7045db8f6c36d0f1b64938214f93d8  libjava/java/rmi/server/ServerNotActiveException.java
! b4e526912178f3a9e0c01243ced7d751  libjava/java/rmi/server/ServerRef.java
! 071fc52c6efab4d9ba12d3bf543b6277  libjava/java/rmi/server/Skeleton.java
! 600e2dd6e17ba83188173b3100ac8775  libjava/java/rmi/server/SkeletonMismatchException.java
  5a5b21c0bc8446c281e7c3683c220e5d  libjava/java/rmi/server/SkeletonNotFoundException.java
  dd7096ae9e819d41e0005e0db3d1329d  libjava/java/rmi/server/SocketSecurityException.java
! 96ef946d1d2a29efa93f03cf9508d91c  libjava/java/rmi/server/UID.java
! d7aa5450738f50f62865f11d19be4341  libjava/java/rmi/server/UnicastRemoteObject.java
! 803285761e588dae413ff3a2b46674e4  libjava/java/rmi/server/Unreferenced.java
! 8cc306dacb64e3f1fdc48a7f31a62674  libjava/java/security/AccessControlContext.java
! d3a84db3cd4974fca5dcf7c428e57c61  libjava/java/security/AccessControlException.java
! 242aa4c93398984ec047c484c595b41c  libjava/java/security/AccessController.java
! 57c307ade92e99c4732a4142810e1a42  libjava/java/security/AlgorithmParameterGenerator.java
  6d87fca7c6c0062711f5aa4f8643aec0  libjava/java/security/AlgorithmParameterGeneratorSpi.java
! 804b8043445a1bef494662a3b7b59151  libjava/java/security/AlgorithmParameters.java
! 0df457cb741fe6d2ef0ce781433ac463  libjava/java/security/AlgorithmParametersSpi.java
! 9e3f890455f2aad0708a4d16ca9e2bb1  libjava/java/security/AllPermission.java
! beafef0d5dc2427233dafc9745f83c30  libjava/java/security/BasicPermission.java
! dc95f96edbc7f23b1a4859fe831bbdee  libjava/java/security/Certificate.java
! db347f7fdd9cad0f0a21f3ac1f323f8c  libjava/java/security/CodeSource.java
! 485f74b09a5c33024fce61c52d624cb2  libjava/java/security/DigestException.java
! 4f6deae3fba5205d483289860eaa7f9c  libjava/java/security/DigestInputStream.java
! 9f31c19e8a9b859f850449b051d2658b  libjava/java/security/DigestOutputStream.java
  8d80b5acce73fa75142edda5e99eaca2  libjava/java/security/DomainCombiner.java
! 875ce30186b057f2639eee0f427ebd7d  libjava/java/security/DummyKeyPairGenerator.java
! 9b7e5fe100ecd27e325d74f970dfb94c  libjava/java/security/DummyMessageDigest.java
! 448a3de12804ff60817f0d0c908c679c  libjava/java/security/DummySignature.java
! 007770d3205ddf70604172282a327c22  libjava/java/security/GeneralSecurityException.java
! e5e000991ae742a3be4b9da4961aeb06  libjava/java/security/Guard.java
! 553f078338248e04238d19157e207743  libjava/java/security/GuardedObject.java
! f64a96d88291bc969d9905be6d620b43  libjava/java/security/Identity.java
! 20401e436630647d51ad5a2087746de9  libjava/java/security/IdentityScope.java
! 0ce746dfdf23db3a491ac5473df607c2  libjava/java/security/InvalidAlgorithmParameterException.java
! 1b3b8b454a535af9e13295d382fcb629  libjava/java/security/InvalidKeyException.java
! e2f96e852638fb5874e15bd3caac15c6  libjava/java/security/InvalidParameterException.java
! a92177f743b958055af2a986752dcd46  libjava/java/security/Key.java
! 2059a7c287cd8d1fe4221f5194a3d47b  libjava/java/security/KeyException.java
! 0ee44588dfe50a56149537675886be20  libjava/java/security/KeyFactory.java
! feb372600a5cfed54eae12230fb413f9  libjava/java/security/KeyFactorySpi.java
! b8724faf6d6266eff6fc07f7f329e60e  libjava/java/security/KeyManagementException.java
  f4a022d1710ce0e14745300d27ed3ebc  libjava/java/security/KeyPair.java
! cc443951adae228bcf6a24ae58c94588  libjava/java/security/KeyPairGenerator.java
! bd48ee03ca0c40911e63cb7210a764bb  libjava/java/security/KeyPairGeneratorSpi.java
! 04ad546721da36dc30cbcd84b7259119  libjava/java/security/KeyStore.java
! e2159a31a39a5cf1324ec4637c282afe  libjava/java/security/KeyStoreException.java
! 618a3d26191a833c9e92c35d374bca03  libjava/java/security/KeyStoreSpi.java
! 01559493bac94f4fc90601f1a1377bbf  libjava/java/security/MessageDigest.java
! ac72303b15e6dc1702777be2cb191e92  libjava/java/security/MessageDigestSpi.java
! 031b1f5c7793908091ac6f98874c9dff  libjava/java/security/NoSuchAlgorithmException.java
! 80e4c932c0ec0f1ff259418e95340c14  libjava/java/security/NoSuchProviderException.java
! 5fe45250ef4fc81126fd84f5a3f94575  libjava/java/security/Permission.java
! 3f6a7078a5218ff19fae14a236164f8b  libjava/java/security/PermissionCollection.java
! e514cd106268d0f54b288983e4042211  libjava/java/security/Permissions.java
! afc8b23f6998c1666dc4ae8781de857e  libjava/java/security/Policy.java
! f80c6c420df6bda2352b43aca0e1743b  libjava/java/security/Principal.java
! f6349d78f4a028aa75ed71ea73727fc9  libjava/java/security/PrivateKey.java
  65dbffd90e0b752531cec395bc7c4eb3  libjava/java/security/PrivilegedAction.java
! c814f5224727544a342b9f71c75f9bbc  libjava/java/security/PrivilegedActionException.java
  7e873eb90864424d50434931655573b2  libjava/java/security/PrivilegedExceptionAction.java
! c357ca837b036c881512ed0bb930a414  libjava/java/security/ProtectionDomain.java
  07d782c0dcf91763f7400dd25fbe4a9a  libjava/java/security/Provider.java
! 3a06e037265183bd0912509d66a5b2e9  libjava/java/security/ProviderException.java
! 759672d584d601a24d59c98ce10884f0  libjava/java/security/PublicKey.java
! 73e271cd3b651b75b27f83784f203818  libjava/java/security/SecureClassLoader.java
! 268da1b028f1023ef369fff7a65b651c  libjava/java/security/SecureRandom.java
! 86b0d104a51dab6489217836fb11ed4e  libjava/java/security/SecureRandomSpi.java
! 9d8cdf12e512e2d7ed8623830809cbd6  libjava/java/security/Security.java
  1a6c5e6f1dc4b3c66196bca06f1885a1  libjava/java/security/SecurityPermission.java
! 636770f964d069a4e2dc07c4ca457bba  libjava/java/security/Signature.java
! 8a040d9d63781f497a95c423a4798651  libjava/java/security/SignatureException.java
! 39e9871c30aa7030b1a56ea42773fc9e  libjava/java/security/SignatureSpi.java
! eb37bde9944a68398dc06855cc8c5488  libjava/java/security/SignedObject.java
! e051c35b7e81ec18366143bfa66753fb  libjava/java/security/Signer.java
! 217999cf0f818cab420ca4eb495d0f75  libjava/java/security/UnrecoverableKeyException.java
! 85d4047db638cf8481381c1b352bc53a  libjava/java/security/UnresolvedPermission.java
  c3800d8a767fd515d1f329c80987099c  libjava/java/security/acl/Acl.java
  4db87a2d94177fcdd112d7857b308f20  libjava/java/security/acl/AclEntry.java
! 743cf1fa8116bad99c383171b3441374  libjava/java/security/acl/AclNotFoundException.java
  1594747f3a4b9220f97e553ffc756ab9  libjava/java/security/acl/Group.java
! 1fb27d15e36fb7e7f0220841b976faba  libjava/java/security/acl/LastOwnerException.java
! 5b1e842eeba64201e33aa82f63c1de91  libjava/java/security/acl/NotOwnerException.java
  221419167dd2271e48916cda2f260782  libjava/java/security/acl/Owner.java
  97eda210c6869a9bc3b721a325cb79c7  libjava/java/security/acl/Permission.java
  dcc8189154bd06647fbf290dd20a2e81  libjava/java/security/cert/CRL.java
  e1bafb0a85ec9a23d02f01cc1b801256  libjava/java/security/cert/CRLException.java
  251beb976458d4131a4e9588a1c0183a  libjava/java/security/cert/CRLSelector.java
! 211ac10099fc28894f0ef2e2f51e242e  libjava/java/security/cert/CertPath.java
! f48f76ced84fdc9956b5adc46df7d167  libjava/java/security/cert/CertPathBuilder.java
! aee94e8e5b97cb2c6adce08a8f0fac7f  libjava/java/security/cert/CertPathBuilderException.java
  477c4ebf514857825953a7a7aeb435e3  libjava/java/security/cert/CertPathBuilderResult.java
  6593e4d522c6f70b6397802bf1bcfb46  libjava/java/security/cert/CertPathBuilderSpi.java
  e31aeed149b6265ac9dcee6d1bc42ea0  libjava/java/security/cert/CertPathParameters.java
! dfcfeaa9f21d412b578ce0ab52dbbd63  libjava/java/security/cert/CertPathValidator.java
! 2650c58c0f070d465af3130447af96bc  libjava/java/security/cert/CertPathValidatorException.java
  6e5b4d6c7287e6883f6cd441d3f49a03  libjava/java/security/cert/CertPathValidatorResult.java
  af178b58f9aa822457466e6a6a07147a  libjava/java/security/cert/CertPathValidatorSpi.java
  e40b626b387734eef2ec9a78ae02f55a  libjava/java/security/cert/CertSelector.java
! eb09bfd0b76faf1d4d3f5d683e6b16e0  libjava/java/security/cert/CertStore.java
! 918aaed60e981e945501c90040183f5e  libjava/java/security/cert/CertStoreException.java
  b41f08a7ad0473fd572f4185c2bb9d32  libjava/java/security/cert/CertStoreParameters.java
  a1c462ed6f1be55e008202432aa9b9a4  libjava/java/security/cert/CertStoreSpi.java
! b95525ce4557946a178a9e9636474c9e  libjava/java/security/cert/Certificate.java
  4d050126f4943e502a8dc3c83d66e23c  libjava/java/security/cert/CertificateEncodingException.java
  7f54f492bbb1f64d44c28c37c3fa16de  libjava/java/security/cert/CertificateException.java
  9c31235a8ec55959cc36dba8486a8c64  libjava/java/security/cert/CertificateExpiredException.java
! f0adc6bbd7359f0ed3cd075198aa9914  libjava/java/security/cert/CertificateFactory.java
  faafa343b4a9d96520908e186a2d580a  libjava/java/security/cert/CertificateFactorySpi.java
  c8538322cde529f9e448f0f124533dfa  libjava/java/security/cert/CertificateNotYetValidException.java
  0a6c71b2c194c351aab15f5afaa7e3ad  libjava/java/security/cert/CertificateParsingException.java
--- 21502,21650 ----
  2f520aca54db054cbb157d37e8a30876  libjava/java/rmi/UnexpectedException.java
  7c2b884f5fce8118bc57b4ea171e9187  libjava/java/rmi/UnknownHostException.java
  155a39ea3161a9e44dbd03834b89cf0d  libjava/java/rmi/UnmarshalException.java
! 89156dfcd49890c7401b38cc086cfc00  libjava/java/rmi/activation/Activatable.java
  81d55e3b6a2140a00a5ac59d54b99f61  libjava/java/rmi/activation/ActivateFailedException.java
! 769208103a923724edd6a0c3e9db020d  libjava/java/rmi/activation/ActivationDesc.java
! 2c475fe7fb71d397cdd8e09b0ddafc6e  libjava/java/rmi/activation/ActivationException.java
! eab921fb9892707fe99ee6b54e972494  libjava/java/rmi/activation/ActivationGroup.java
! b6228637e463819675301705837334cb  libjava/java/rmi/activation/ActivationGroupDesc.java
! b85e548af817811fbb9893c2f4729370  libjava/java/rmi/activation/ActivationGroupID.java
! b1e815ea74c808616926945d43306bb8  libjava/java/rmi/activation/ActivationID.java
! e0eb93a28d868a37bcdda9a9a68c7d0f  libjava/java/rmi/activation/ActivationInstantiator.java
! fb6466fa984387a8bb8bddaef52f0459  libjava/java/rmi/activation/ActivationMonitor.java
! bc1864a133dc9edc36409c8553bde59f  libjava/java/rmi/activation/ActivationSystem.java
! 81896f5afe6f84fc2dbb685f38b4c5f3  libjava/java/rmi/activation/Activator.java
  a4fff6d4e08c886e9854917c29681a72  libjava/java/rmi/activation/UnknownGroupException.java
  e3f456810b365cfa2b35db54292afca5  libjava/java/rmi/activation/UnknownObjectException.java
! 22dbcc694fa2fc46314d358829f057b0  libjava/java/rmi/dgc/DGC.java
! 70f55ca2b5a4b88ae21d6b96f13155fb  libjava/java/rmi/dgc/Lease.java
! 24fbf1e70adfee853fb4634e2a4e5ef4  libjava/java/rmi/dgc/VMID.java
! a6c8e31f7afe258a20bad5f0de1c7650  libjava/java/rmi/registry/LocateRegistry.java
! 4e90935d7853cf17380db28765a91ce1  libjava/java/rmi/registry/Registry.java
! 5b33ded207420f7ce1c2b16d8f16e084  libjava/java/rmi/registry/RegistryHandler.java
  fd64f453d737e0ba73b319aa6ab05c90  libjava/java/rmi/server/ExportException.java
! dc79bb26e407531a0b7be2f80a8a08c4  libjava/java/rmi/server/LoaderHandler.java
! 3f044d334ba0adfaf0a18754ee525444  libjava/java/rmi/server/LogStream.java
! 9b75379971c1303a3199d6ec67745274  libjava/java/rmi/server/ObjID.java
! e11c5b8a703557e03d06789115cd012f  libjava/java/rmi/server/Operation.java
! 13125ad9f709bb4ba41e02bbfd1c2676  libjava/java/rmi/server/RMIClassLoader.java
! 6f14360de179e4b25553fc3177e65e50  libjava/java/rmi/server/RMIClassLoaderSpi.java
! 4e7c6f703d543f65e8e318c3f4e3b43c  libjava/java/rmi/server/RMIClientSocketFactory.java
! b94cae73d88c8ddeab24448c53b816e6  libjava/java/rmi/server/RMIFailureHandler.java
! 7e5c84b8053d23922f0c2db3768a451c  libjava/java/rmi/server/RMIServerSocketFactory.java
! a35c4b4f1f9c833c19a6761f15b29b56  libjava/java/rmi/server/RMISocketFactory.java
! 0e79171a0eace3f562f61fd69037f8f6  libjava/java/rmi/server/RemoteCall.java
! 1cb8abbb4c0087ac81e6bfe3df93f592  libjava/java/rmi/server/RemoteObject.java
! ccfff65d836d0541058da3254b4c11da  libjava/java/rmi/server/RemoteRef.java
! 4f62dfd335510ff534f50744489f2998  libjava/java/rmi/server/RemoteServer.java
! 88f747b7554fabda18027bd76a71fc4a  libjava/java/rmi/server/RemoteStub.java
! 9c4badfd85894d5f7f87914a5681ad2b  libjava/java/rmi/server/ServerCloneException.java
  6a7045db8f6c36d0f1b64938214f93d8  libjava/java/rmi/server/ServerNotActiveException.java
! a2aabe2a9df120004ff16945437ef3d0  libjava/java/rmi/server/ServerRef.java
! de2a0df604284bc0140abcd337d25313  libjava/java/rmi/server/Skeleton.java
! 5859a5c67ccc502a64dcf79eb652b73b  libjava/java/rmi/server/SkeletonMismatchException.java
  5a5b21c0bc8446c281e7c3683c220e5d  libjava/java/rmi/server/SkeletonNotFoundException.java
  dd7096ae9e819d41e0005e0db3d1329d  libjava/java/rmi/server/SocketSecurityException.java
! d5645f071fa2ebda05e76f632b5f9f1e  libjava/java/rmi/server/UID.java
! 1ae29f41e16db52395286eb2481e421d  libjava/java/rmi/server/UnicastRemoteObject.java
! 76a851e703e5186bd1d8c5563d97a51e  libjava/java/rmi/server/Unreferenced.java
! 34d0beb22c27145098fc58c07b81566a  libjava/java/security/AccessControlContext.java
! a7865c85bffb2a9a42509724fb5ef2df  libjava/java/security/AccessControlException.java
! cf406de968f4ad8ec05e525550b81b0e  libjava/java/security/AccessController.java
! 704cf04f4ef9e65dbb3490f82905996d  libjava/java/security/AlgorithmParameterGenerator.java
  6d87fca7c6c0062711f5aa4f8643aec0  libjava/java/security/AlgorithmParameterGeneratorSpi.java
! e0fea5050f49f8a20c85acacb87d5b1c  libjava/java/security/AlgorithmParameters.java
! 5a7d41e17debb55d6c88c0faedbaa6b3  libjava/java/security/AlgorithmParametersSpi.java
! 43de4bef810979384d503cb222b8d33b  libjava/java/security/AllPermission.java
! 01efde3ddf50135ebaf7f0b82ca35ab1  libjava/java/security/BasicPermission.java
! 07390c49794ee000eb7af3068c29a1f8  libjava/java/security/Certificate.java
! c63a75ee945694b46521f959c63bf2e7  libjava/java/security/CodeSource.java
! 245aba06f8ee6c6fc89e3105498f0d8b  libjava/java/security/DigestException.java
! bc369afeec3973fff9864e1465371db5  libjava/java/security/DigestInputStream.java
! df0e15fa439ee792c8d761374d7389ad  libjava/java/security/DigestOutputStream.java
  8d80b5acce73fa75142edda5e99eaca2  libjava/java/security/DomainCombiner.java
! 052adbbb7fc4348900ceb7d3328e9eb2  libjava/java/security/DummyKeyPairGenerator.java
! 95c6bfc69b051eb3ae8ea040e3cf9868  libjava/java/security/DummyMessageDigest.java
! 45a716f352cd2eaeeb842222838cedff  libjava/java/security/DummySignature.java
! b96ee79478bdc4c84e2c62fc533376e7  libjava/java/security/GeneralSecurityException.java
! e99fa060f27ea3b010b24c47120b50f5  libjava/java/security/Guard.java
! aac87863b64ab1092c06d1e5cd1f2d21  libjava/java/security/GuardedObject.java
! 7a5ddcac9b55d2d12f7ea42984bfc3c0  libjava/java/security/Identity.java
! fe65fd5325370a6a795b40436762738b  libjava/java/security/IdentityScope.java
! 9c06af56f7b7cdb753b23b5eb55fb4a8  libjava/java/security/InvalidAlgorithmParameterException.java
! a2bb9e679af9f0a3356b65aca4a1c907  libjava/java/security/InvalidKeyException.java
! ed21e24ae91c5af780a9f366f0831c54  libjava/java/security/InvalidParameterException.java
! 9ee6e8b2b8cf7d967c660ad85af21f11  libjava/java/security/Key.java
! 9d5faa52191a028f7ee08b712c3b8a43  libjava/java/security/KeyException.java
! 11e6bf610419db0f0089824606e60d0c  libjava/java/security/KeyFactory.java
! 87dd3bef09fe7bfd157603cd247d1a9f  libjava/java/security/KeyFactorySpi.java
! ca8b07d9ab3892b75be8ffed942afeb3  libjava/java/security/KeyManagementException.java
  f4a022d1710ce0e14745300d27ed3ebc  libjava/java/security/KeyPair.java
! 7f8a0dc302ddcdfebf73965b9ef7732b  libjava/java/security/KeyPairGenerator.java
! 71119d9ce6b4e2a5ad739143c2db2770  libjava/java/security/KeyPairGeneratorSpi.java
! a956c55f20fcc5dd7f650df8eb5e33b4  libjava/java/security/KeyStore.java
! f70ac02da37b9b9f0437061c11ece8f8  libjava/java/security/KeyStoreException.java
! cb5529720fe3890773360edd560c4df0  libjava/java/security/KeyStoreSpi.java
! d2711b858ecf4a40f4a8536a020eb6f9  libjava/java/security/MessageDigest.java
! 18a30fdecdb2e4b080f795f9af84767a  libjava/java/security/MessageDigestSpi.java
! 9b5f239642952511426ae1584c8126db  libjava/java/security/NoSuchAlgorithmException.java
! 8c65d8450a816c9a94968b72487cfe0a  libjava/java/security/NoSuchProviderException.java
! af215738562055982e4b318c5c25178c  libjava/java/security/Permission.java
! 10e1f47b0fe08c61ac4bf4c3eecd6b81  libjava/java/security/PermissionCollection.java
! 2d9d1fadba6ce9daf76f5b59bc6a0bfc  libjava/java/security/Permissions.java
! 4327bb17aebfbfd22aa721f4d76e68b0  libjava/java/security/Policy.java
! 92d4790d10fe7d2fd051887ae2fb1395  libjava/java/security/Principal.java
! a074e2ba8d20724414c9010cc8b18b72  libjava/java/security/PrivateKey.java
  65dbffd90e0b752531cec395bc7c4eb3  libjava/java/security/PrivilegedAction.java
! 7551fe17f9c322b238f1a27b6ba7d889  libjava/java/security/PrivilegedActionException.java
  7e873eb90864424d50434931655573b2  libjava/java/security/PrivilegedExceptionAction.java
! 7cb921fd46f6009b10b1123d247d6f5a  libjava/java/security/ProtectionDomain.java
  07d782c0dcf91763f7400dd25fbe4a9a  libjava/java/security/Provider.java
! 9bc99cb5aaad46e1287b569dc1addea9  libjava/java/security/ProviderException.java
! 2db6c649d2ec877104766fe3edb3a15c  libjava/java/security/PublicKey.java
! 3b9cb702a686465bfe8ef5fbd3aa3e63  libjava/java/security/SecureClassLoader.java
! 4318e06d08b841d880542c730cafdd45  libjava/java/security/SecureRandom.java
! 428cd103e2335ca5da80f05a2651287f  libjava/java/security/SecureRandomSpi.java
! dd13d1ec0c6b14ebd1ecad2e8b2f7601  libjava/java/security/Security.java
  1a6c5e6f1dc4b3c66196bca06f1885a1  libjava/java/security/SecurityPermission.java
! 380bc83a461406fe2920394e1c8cf5e9  libjava/java/security/Signature.java
! 0b39a2c487c6a2ca7e4a8b94b74d7612  libjava/java/security/SignatureException.java
! e1180905376654c88bbe84979caa611a  libjava/java/security/SignatureSpi.java
! 2a21faf64a46d1c9d3685820770f32d4  libjava/java/security/SignedObject.java
! 57905df73bb5c85ecc2913f35353b86b  libjava/java/security/Signer.java
! 2c476f56b0c54f394fba341d1f002b81  libjava/java/security/UnrecoverableKeyException.java
! 651a6afeada1bd781364723b558d0d1d  libjava/java/security/UnresolvedPermission.java
  c3800d8a767fd515d1f329c80987099c  libjava/java/security/acl/Acl.java
  4db87a2d94177fcdd112d7857b308f20  libjava/java/security/acl/AclEntry.java
! 2917338fa5e0b9ab060b8c6e4d695d76  libjava/java/security/acl/AclNotFoundException.java
  1594747f3a4b9220f97e553ffc756ab9  libjava/java/security/acl/Group.java
! 456bbd1131acf469b52cf782827c3398  libjava/java/security/acl/LastOwnerException.java
! fdf22ccb03d68e06a059dde9db30877a  libjava/java/security/acl/NotOwnerException.java
  221419167dd2271e48916cda2f260782  libjava/java/security/acl/Owner.java
  97eda210c6869a9bc3b721a325cb79c7  libjava/java/security/acl/Permission.java
  dcc8189154bd06647fbf290dd20a2e81  libjava/java/security/cert/CRL.java
  e1bafb0a85ec9a23d02f01cc1b801256  libjava/java/security/cert/CRLException.java
  251beb976458d4131a4e9588a1c0183a  libjava/java/security/cert/CRLSelector.java
! f203fc5624889e6dacd773c0755671a9  libjava/java/security/cert/CertPath.java
! 7c812ed48ddb718fdb66b80b84929fb7  libjava/java/security/cert/CertPathBuilder.java
! ea9d0d7357087ae5e70676c966bcbcd2  libjava/java/security/cert/CertPathBuilderException.java
  477c4ebf514857825953a7a7aeb435e3  libjava/java/security/cert/CertPathBuilderResult.java
  6593e4d522c6f70b6397802bf1bcfb46  libjava/java/security/cert/CertPathBuilderSpi.java
  e31aeed149b6265ac9dcee6d1bc42ea0  libjava/java/security/cert/CertPathParameters.java
! 4b5fe3723eab220530c089d814ddc64c  libjava/java/security/cert/CertPathValidator.java
! fe7097338644872443e44c6af0b5390e  libjava/java/security/cert/CertPathValidatorException.java
  6e5b4d6c7287e6883f6cd441d3f49a03  libjava/java/security/cert/CertPathValidatorResult.java
  af178b58f9aa822457466e6a6a07147a  libjava/java/security/cert/CertPathValidatorSpi.java
  e40b626b387734eef2ec9a78ae02f55a  libjava/java/security/cert/CertSelector.java
! ac4302699356806da10f70d188999007  libjava/java/security/cert/CertStore.java
! 819a6d628939bfac65473d5b91fd84da  libjava/java/security/cert/CertStoreException.java
  b41f08a7ad0473fd572f4185c2bb9d32  libjava/java/security/cert/CertStoreParameters.java
  a1c462ed6f1be55e008202432aa9b9a4  libjava/java/security/cert/CertStoreSpi.java
! 8cb359d39702949482a67ae15dc28f18  libjava/java/security/cert/Certificate.java
  4d050126f4943e502a8dc3c83d66e23c  libjava/java/security/cert/CertificateEncodingException.java
  7f54f492bbb1f64d44c28c37c3fa16de  libjava/java/security/cert/CertificateException.java
  9c31235a8ec55959cc36dba8486a8c64  libjava/java/security/cert/CertificateExpiredException.java
! d351ebff911e6ad0bef6d90a8076ad69  libjava/java/security/cert/CertificateFactory.java
  faafa343b4a9d96520908e186a2d580a  libjava/java/security/cert/CertificateFactorySpi.java
  c8538322cde529f9e448f0f124533dfa  libjava/java/security/cert/CertificateNotYetValidException.java
  0a6c71b2c194c351aab15f5afaa7e3ad  libjava/java/security/cert/CertificateParsingException.java
*************** f2ae42c9779ba93861a5c3e34fbefbb7  libjav
*** 18200,18227 ****
  31191ec4f48bd7e1796297c7f67429fc  libjava/java/security/cert/PKIXCertPathValidatorResult.java
  74609a7ee2d53c0107ab124eb925e026  libjava/java/security/cert/PKIXParameters.java
  f091351c7306a7a9ef9e0c86fdc97c0e  libjava/java/security/cert/PolicyNode.java
! 0507285fd66679c277abbddfabba1382  libjava/java/security/cert/PolicyQualifierInfo.java
! 111d00320cd19916118bb4d0c3c6b923  libjava/java/security/cert/TrustAnchor.java
! 447ed8b0e45bf0164d907dc61efa22ae  libjava/java/security/cert/X509CRL.java
! f12437d1a58b1f7f3b32697cd98f2e91  libjava/java/security/cert/X509CRLEntry.java
! 4be376f51faee7fe90f87e2f7e40f64f  libjava/java/security/cert/X509Certificate.java
  202d791786b66f63160e08064c012ede  libjava/java/security/cert/X509Extension.java
  45e9331e8c4fe87eb043176949c6fc40  libjava/java/security/classpath.security
  05cf8051ed53e6eda4e37ab935f4ccfe  libjava/java/security/interfaces/DSAKey.java
! 422a4d460dddf46d5908dafb87ecce88  libjava/java/security/interfaces/DSAKeyPairGenerator.java
  ebcbc3f90e81c994e95b39cb2c84bbd3  libjava/java/security/interfaces/DSAParams.java
! 7685687b27f57cecdb4c531741b00a8f  libjava/java/security/interfaces/DSAPrivateKey.java
! 6ab73a037b3f6009f012c7782ec9923f  libjava/java/security/interfaces/DSAPublicKey.java
  aa922e1aa72958f3ee68e7acc3f1df10  libjava/java/security/interfaces/RSAKey.java
! 1399c456b4944203034f44c36f6c24c5  libjava/java/security/interfaces/RSAMultiPrimePrivateCrtKey.java
! 9d366b03ebb3eb36a8aca5005898cbd8  libjava/java/security/interfaces/RSAPrivateCrtKey.java
! ebfe32346f6e792260f3aa8b9b4f3883  libjava/java/security/interfaces/RSAPrivateKey.java
! 01a4cabb2a86d39be180d571915cf635  libjava/java/security/interfaces/RSAPublicKey.java
  7ba6b1101fde93a39b0377813a7d16a7  libjava/java/security/libgcj.security
  d086fcfd9b580a8c1719f41b489a1680  libjava/java/security/spec/AlgorithmParameterSpec.java
! 27bd48e064ad39b85a4752f9b2565ff3  libjava/java/security/spec/DSAParameterSpec.java
! b602109e18d4f0b230045c638fbf8a6a  libjava/java/security/spec/DSAPrivateKeySpec.java
! 4f4f76e72d6f0274f46217b26d212753  libjava/java/security/spec/DSAPublicKeySpec.java
  8613915cb341bf5d0f282d8e55dd3b8a  libjava/java/security/spec/EncodedKeySpec.java
  d41a539621019e7b7e81df4d495b217f  libjava/java/security/spec/InvalidKeySpecException.java
  64c104770166751215d99a16d1e54b5b  libjava/java/security/spec/InvalidParameterSpecException.java
--- 21656,21685 ----
  31191ec4f48bd7e1796297c7f67429fc  libjava/java/security/cert/PKIXCertPathValidatorResult.java
  74609a7ee2d53c0107ab124eb925e026  libjava/java/security/cert/PKIXParameters.java
  f091351c7306a7a9ef9e0c86fdc97c0e  libjava/java/security/cert/PolicyNode.java
! 4be8eabe4ca1ca749bb25e8a13d86ebf  libjava/java/security/cert/PolicyQualifierInfo.java
! 00d19f1f9868b357dd9dedac18a920c1  libjava/java/security/cert/TrustAnchor.java
! 6e121e68fb4e58059c460cdc7db2360f  libjava/java/security/cert/X509CRL.java
! d0441f9f5a80682c3aa07dab6ab780df  libjava/java/security/cert/X509CRLEntry.java
! 2a3e0169cc92d0e7325f9e1904c11029  libjava/java/security/cert/X509CRLSelector.java
! 48f5be80e2c97e271026098b6444e4d6  libjava/java/security/cert/X509CertSelector.java
! d534810f4b0da6b313466877d3e687ed  libjava/java/security/cert/X509Certificate.java
  202d791786b66f63160e08064c012ede  libjava/java/security/cert/X509Extension.java
  45e9331e8c4fe87eb043176949c6fc40  libjava/java/security/classpath.security
  05cf8051ed53e6eda4e37ab935f4ccfe  libjava/java/security/interfaces/DSAKey.java
! 0c0066186c36c4ebb02dc7f324792a9c  libjava/java/security/interfaces/DSAKeyPairGenerator.java
  ebcbc3f90e81c994e95b39cb2c84bbd3  libjava/java/security/interfaces/DSAParams.java
! c4fe85df4a1239fff983c142afa1928f  libjava/java/security/interfaces/DSAPrivateKey.java
! e9b61a016e56de1a79c5a6210b35393c  libjava/java/security/interfaces/DSAPublicKey.java
  aa922e1aa72958f3ee68e7acc3f1df10  libjava/java/security/interfaces/RSAKey.java
! f9a74718134c86448efec6281769afbd  libjava/java/security/interfaces/RSAMultiPrimePrivateCrtKey.java
! 4f2d5d408da89bf3abea50591bdf4eb9  libjava/java/security/interfaces/RSAPrivateCrtKey.java
! c6ce9c7f89e331e2004fc21231635c84  libjava/java/security/interfaces/RSAPrivateKey.java
! 50f9fd130711703cf11afadd90175861  libjava/java/security/interfaces/RSAPublicKey.java
  7ba6b1101fde93a39b0377813a7d16a7  libjava/java/security/libgcj.security
  d086fcfd9b580a8c1719f41b489a1680  libjava/java/security/spec/AlgorithmParameterSpec.java
! 66a9186b7ce8d64c2f69949efb0aa7e3  libjava/java/security/spec/DSAParameterSpec.java
! b5740b26780ece9c92d53a209f30152c  libjava/java/security/spec/DSAPrivateKeySpec.java
! 3c35dffc827f92c2c58aa2a777abc465  libjava/java/security/spec/DSAPublicKeySpec.java
  8613915cb341bf5d0f282d8e55dd3b8a  libjava/java/security/spec/EncodedKeySpec.java
  d41a539621019e7b7e81df4d495b217f  libjava/java/security/spec/InvalidKeySpecException.java
  64c104770166751215d99a16d1e54b5b  libjava/java/security/spec/InvalidParameterSpecException.java
*************** d41a539621019e7b7e81df4d495b217f  libjav
*** 18229,18256 ****
  c6342f64a6bb42f937c84794a97308a1  libjava/java/security/spec/PKCS8EncodedKeySpec.java
  65fa29ff47cc65339df9f01ed356368a  libjava/java/security/spec/PSSParameterSpec.java
  96e73308fb83688492e819bc3bcba51a  libjava/java/security/spec/RSAKeyGenParameterSpec.java
! 3ea74b7cb6ffcfffb204b8019602e56b  libjava/java/security/spec/RSAMultiPrimePrivateCrtKeySpec.java
  b17092ca8db663225c869069d753dcea  libjava/java/security/spec/RSAOtherPrimeInfo.java
  299ab99ac4685ca1b46a59ea2f1a99de  libjava/java/security/spec/RSAPrivateCrtKeySpec.java
  4fd947af16e2146c6e81eefd0fa21769  libjava/java/security/spec/RSAPrivateKeySpec.java
  cc9dee774a378831d9137af0d79a2527  libjava/java/security/spec/RSAPublicKeySpec.java
  c5ce0c08c530c35e89bae723d4a08983  libjava/java/security/spec/X509EncodedKeySpec.java
! 07fd5ef04a0fd6707a91177a3a6185c1  libjava/java/sql/Array.java
  8bac28257fd570e71e9704b36f53b2a7  libjava/java/sql/BatchUpdateException.java
  e7afaa4874528302953886bdb84eb533  libjava/java/sql/Blob.java
  6eddc6e31c094648c82e70aaf95404af  libjava/java/sql/CallableStatement.java
  0cd820d214cbcf34fa822f66b55a4719  libjava/java/sql/Clob.java
  41013423b7fa2cc86645ec095570588a  libjava/java/sql/Connection.java
  1f1658dc2fc42c390dc05585c555aefa  libjava/java/sql/DataTruncation.java
! e5941b7e103d09d86cb71a290f58c541  libjava/java/sql/DatabaseMetaData.java
  0fe2f8ec0470072546957387c08ef505  libjava/java/sql/Date.java
  4c08f7b8ffdbb3820664ed3ced2842a7  libjava/java/sql/Driver.java
! e12b8bdebdb5bba48320828b4e8f50fe  libjava/java/sql/DriverManager.java
  24232a267953773ee9afd69e22662bce  libjava/java/sql/DriverPropertyInfo.java
  2d9f561186649c39f0218a995b158a40  libjava/java/sql/ParameterMetaData.java
  73fffde65f1deea03956972dc879be69  libjava/java/sql/PreparedStatement.java
  5e5aa1d3c82aeabdfbd0993efd1ee54a  libjava/java/sql/Ref.java
! d9649412e57d6d18ae0975a7d4ca8aff  libjava/java/sql/ResultSet.java
  84520063292675e192794fcfe3b2e7a7  libjava/java/sql/ResultSetMetaData.java
  d7bad73a6038b90585b2ec8118cd86b2  libjava/java/sql/SQLData.java
  3d0c45309670ad0550ed9066b1e5ec61  libjava/java/sql/SQLException.java
--- 21687,21714 ----
  c6342f64a6bb42f937c84794a97308a1  libjava/java/security/spec/PKCS8EncodedKeySpec.java
  65fa29ff47cc65339df9f01ed356368a  libjava/java/security/spec/PSSParameterSpec.java
  96e73308fb83688492e819bc3bcba51a  libjava/java/security/spec/RSAKeyGenParameterSpec.java
! 6b7bdbb62ec7a114e391624d4c0fc96c  libjava/java/security/spec/RSAMultiPrimePrivateCrtKeySpec.java
  b17092ca8db663225c869069d753dcea  libjava/java/security/spec/RSAOtherPrimeInfo.java
  299ab99ac4685ca1b46a59ea2f1a99de  libjava/java/security/spec/RSAPrivateCrtKeySpec.java
  4fd947af16e2146c6e81eefd0fa21769  libjava/java/security/spec/RSAPrivateKeySpec.java
  cc9dee774a378831d9137af0d79a2527  libjava/java/security/spec/RSAPublicKeySpec.java
  c5ce0c08c530c35e89bae723d4a08983  libjava/java/security/spec/X509EncodedKeySpec.java
! 81075c049ddcd61cd21d663ea2416598  libjava/java/sql/Array.java
  8bac28257fd570e71e9704b36f53b2a7  libjava/java/sql/BatchUpdateException.java
  e7afaa4874528302953886bdb84eb533  libjava/java/sql/Blob.java
  6eddc6e31c094648c82e70aaf95404af  libjava/java/sql/CallableStatement.java
  0cd820d214cbcf34fa822f66b55a4719  libjava/java/sql/Clob.java
  41013423b7fa2cc86645ec095570588a  libjava/java/sql/Connection.java
  1f1658dc2fc42c390dc05585c555aefa  libjava/java/sql/DataTruncation.java
! 67866a79e40623f1f9b6b75e8b1085a0  libjava/java/sql/DatabaseMetaData.java
  0fe2f8ec0470072546957387c08ef505  libjava/java/sql/Date.java
  4c08f7b8ffdbb3820664ed3ced2842a7  libjava/java/sql/Driver.java
! 47922102c14d9486450429df2717965f  libjava/java/sql/DriverManager.java
  24232a267953773ee9afd69e22662bce  libjava/java/sql/DriverPropertyInfo.java
  2d9f561186649c39f0218a995b158a40  libjava/java/sql/ParameterMetaData.java
  73fffde65f1deea03956972dc879be69  libjava/java/sql/PreparedStatement.java
  5e5aa1d3c82aeabdfbd0993efd1ee54a  libjava/java/sql/Ref.java
! fb427c09886493e739131d0fedf7b07b  libjava/java/sql/ResultSet.java
  84520063292675e192794fcfe3b2e7a7  libjava/java/sql/ResultSetMetaData.java
  d7bad73a6038b90585b2ec8118cd86b2  libjava/java/sql/SQLData.java
  3d0c45309670ad0550ed9066b1e5ec61  libjava/java/sql/SQLException.java
*************** c34cd08cf53008fc096c61a20c31190b  libjav
*** 18262,18593 ****
  a0a2b096f9c267574c4b1901c321ece8  libjava/java/sql/Statement.java
  bb59542a56c07d074158419dbfd1049a  libjava/java/sql/Struct.java
  7558b709804233e842b4f65a9ec5361a  libjava/java/sql/Time.java
! c586d043a8da4f463ac3c520edd36543  libjava/java/sql/Timestamp.java
  0c2e0941100621fd27998f2f1f103431  libjava/java/sql/Types.java
  d955642fad41a199b8ad3704af9f0fec  libjava/java/text/Annotation.java
! cade3f40a27211a70e992e0387306f90  libjava/java/text/AttributedCharacterIterator.java
! 355483551de29a9f128a36d9d9bf639a  libjava/java/text/AttributedString.java
! c6017f504c7fcd66d8c74a2b7bc35636  libjava/java/text/AttributedStringIterator.java
! c4dad3bb4b7faed489113546589dd8dc  libjava/java/text/BreakIterator.java
  dd6ee066e673807a3666520f26bd7786  libjava/java/text/CharacterIterator.java
! b1c450de537381803fa3237a6553d30c  libjava/java/text/ChoiceFormat.java
! 815e84c4ef96dc29828377d29eb596ee  libjava/java/text/CollationElementIterator.java
! 62bc8c23cd7362ff8fc9da4bd4972daa  libjava/java/text/CollationKey.java
! 4d474a0d647cd745c73bcd571557422b  libjava/java/text/Collator.java
! 996139bcbec698e188a6ab8a9aebe6df  libjava/java/text/DateFormat.java
! cf99a008f9113ae0945e00b68deb390b  libjava/java/text/DateFormatSymbols.java
! c841aac2a928fa4a6c8751ebb6408684  libjava/java/text/DecimalFormat.java
! 2ef7b5b652698a998291b08d1ae1d228  libjava/java/text/DecimalFormatSymbols.java
! bc73c7d6ac34d575a66d5c921c92d882  libjava/java/text/FieldPosition.java
! 5b8b4dd94073198c831d7b8a712796b6  libjava/java/text/Format.java
! e8a2b0e4b8d9d1ba0214c557285cab62  libjava/java/text/FormatCharacterIterator.java
! ff454bf2a03cdaf74828799249722baf  libjava/java/text/MessageFormat.java
! 7c61d2c3148a80f11c1c7f6db31e210a  libjava/java/text/NumberFormat.java
! 819628c4d96bebafbcb8ba0bdc300beb  libjava/java/text/ParseException.java
! 8e81f017e2697b3595432eacc4ce98cd  libjava/java/text/ParsePosition.java
! 632f79f8efbcab563d62c5594a7b9fd4  libjava/java/text/RuleBasedCollator.java
! 31ca4c0de2860e8a25e7b3a6c76400c6  libjava/java/text/SimpleDateFormat.java
! 510e30f41a033d966c5cf1c46de2f736  libjava/java/text/StringCharacterIterator.java
  1a0c8d1f8762b747a35f3c5c6ae0c540  libjava/java/text/natCollator.cc
! 6aac9bbc5e0a591a66405495ba943b50  libjava/java/util/AbstractCollection.java
! 7fe3a717014384bd27bb1e07c6fdb85b  libjava/java/util/AbstractList.java
! 09bb60f71c94bdb7fbff6123aab819be  libjava/java/util/AbstractMap.java
! 3c631cca3460b72b85886f322ffcbb3e  libjava/java/util/AbstractSequentialList.java
! 2073d2b04e39771578f02f5e4f44ddca  libjava/java/util/AbstractSet.java
! 2ba5db40295a6baaf042229b873fbb86  libjava/java/util/ArrayList.java
! 815c066557fa6254b616a7cb7a9e79cf  libjava/java/util/Arrays.java
! 933d9be1702bdfc23efaf2b3bb9e59c8  libjava/java/util/BitSet.java
! cc7f92ae30a373bb5274ff588c7fcddc  libjava/java/util/Calendar.java
! e8ac47cbe0b630dda9d7c863165b10cb  libjava/java/util/Collection.java
! c611bed0451f57d0dcd6e9ad13665830  libjava/java/util/Collections.java
! 909fd3c11ebdb9ed759bf29d44604282  libjava/java/util/Comparator.java
! 1e7d0738f872abfcf787372b1542a0af  libjava/java/util/ConcurrentModificationException.java
! 4c58e09fc8c3a7282dea097977f57d18  libjava/java/util/Currency.java
! d7cca388dba08f4f56159391a6c3856a  libjava/java/util/Date.java
  ba5a4486c2bbf698a4897ee3cfd564a2  libjava/java/util/Dictionary.java
! 476f0f408e1010b500e6122d1535d0c2  libjava/java/util/EmptyStackException.java
! 84078e6a7f8a72b2e3b32007369c8166  libjava/java/util/Enumeration.java
! a49ef7d338fed493dc6c522ffe8ed5e2  libjava/java/util/EventListener.java
! 772cef3d6fa73ff2e80770a0ffa6e427  libjava/java/util/EventListenerProxy.java
! bebc3e539568fc952691fcce2bc24445  libjava/java/util/EventObject.java
! 27463493034af50ed45d6b08838d9621  libjava/java/util/GregorianCalendar.java
! 2563f59c344897378f687ad2408b76ed  libjava/java/util/HashMap.java
! a22451a66bc6bbdc86a5dd7f6d1da992  libjava/java/util/HashSet.java
! b65d30351a73bd19e0ee2c04320680f8  libjava/java/util/Hashtable.java
! d2ddc7556c409d017e7f6907a2b7a437  libjava/java/util/IdentityHashMap.java
! 7ec684250c2fb0e1556028de73d80694  libjava/java/util/Iterator.java
! b2220b4727cb35ac00e3e147004c08ea  libjava/java/util/LinkedHashMap.java
! 68e4a0d9f4ace953408b336cb3f82732  libjava/java/util/LinkedHashSet.java
! 33d3cb46f4c800e0d64565dd388148ae  libjava/java/util/LinkedList.java
! 041c6a579bd167348d89d1d8082c3334  libjava/java/util/List.java
! 838a7cce80164df979a3b17034b05f20  libjava/java/util/ListIterator.java
! 02d995398dc8328cf1f67898e7917355  libjava/java/util/ListResourceBundle.java
! 5c1aa8eb02af76d4c9c57ac5dc6820e0  libjava/java/util/Locale.java
! fffa95b56c11b03df7d9fcb14a7180e0  libjava/java/util/Map.java
! 6c79645e02128e90206d23505a113661  libjava/java/util/MissingResourceException.java
! 09cc088cbfa2f45b241c8119ddf364cb  libjava/java/util/NoSuchElementException.java
! 89176c5914a962f34bdc91631a5dc390  libjava/java/util/Observable.java
! 41f74756f4dd8624c9d113f3e4756337  libjava/java/util/Observer.java
! 45c4cc2c6f70b7f353e8f0355b783759  libjava/java/util/Properties.java
! c5f18679451c2dc0a5f4f9b85d9a13d9  libjava/java/util/PropertyPermission.java
! bd30fd0b29a54ed6436ba273925cbd67  libjava/java/util/PropertyPermissionCollection.java
! 68ec8f009e77d4918cef8e2e4a0d9af3  libjava/java/util/PropertyResourceBundle.java
  ecc546f8699f79375e2a6d71d5e078f5  libjava/java/util/Random.java
! 329806244ea2524448fe8dd2a7a43389  libjava/java/util/RandomAccess.java
! 5c6cf466e0352a7adce80dab9b6123e6  libjava/java/util/ResourceBundle.java
! 82c2bef3e5d5125e0d26957e1cd12fec  libjava/java/util/Set.java
! 103652e5d1e8070523e04bb1dd5a0bc8  libjava/java/util/SimpleTimeZone.java
! 652364557f2c41b1a4e740d51afb4259  libjava/java/util/SortedMap.java
! 1520f39895355910ee5fef9871003b56  libjava/java/util/SortedSet.java
! 6b62cfac6ce77251ee51eb54b9345ae5  libjava/java/util/Stack.java
! b491b225c45d7414a706046f529f0a8a  libjava/java/util/StringTokenizer.java
! 6d399604892182a35ab526d5c6c6153b  libjava/java/util/TimeZone.java
! a955c6a2f40cd55e5b7800af4826cc16  libjava/java/util/Timer.java
  0d84bd2f6f433602bd166c021318998c  libjava/java/util/TimerTask.java
! d61c9d7caafc2c2510712f87a8166da1  libjava/java/util/TooManyListenersException.java
! e2b0d588408e197e076fba1d31e2133c  libjava/java/util/TreeMap.java
! be29662c1501216069d60c024f6541a4  libjava/java/util/TreeSet.java
! 5a1fb2318af05016886a40e5413b0397  libjava/java/util/Vector.java
! af5c336d5091cdc03916244741dccadc  libjava/java/util/WeakHashMap.java
! 57ec9cda4006b28904e64055fef2b89b  libjava/java/util/jar/Attributes.java
  f3c2bde333d7b1c53c739d10c452329c  libjava/java/util/jar/JarEntry.java
  633ea8c436f28f08b1f4d869b890b258  libjava/java/util/jar/JarException.java
! a0a393baf6fbca5abd83e4d32ad33915  libjava/java/util/jar/JarFile.java
! 30dbc9dc69f464f49e11581675cbc0fe  libjava/java/util/jar/JarInputStream.java
! d2e771769f9b2df19d2a8c65ae60efa5  libjava/java/util/jar/JarOutputStream.java
! 0e37b87908743aa9faba5fb9a8be638e  libjava/java/util/jar/Manifest.java
! 5a61966f08e45a593d93afa193b6019d  libjava/java/util/logging/ConsoleHandler.java
! 1d64049cbacf1ff8baf720d663507c6b  libjava/java/util/logging/ErrorManager.java
! 848a6328a0bf10c7e2cb934d877f828a  libjava/java/util/logging/FileHandler.java
! bca6d5c1d283d473212350b0971f013a  libjava/java/util/logging/Filter.java
! f821d4a221f641d21d9121e6601408d2  libjava/java/util/logging/Formatter.java
! 3a96ad89c5fe7dfd73befa65cd7db055  libjava/java/util/logging/Handler.java
! 3807ff90fe76a9b795058e2d330949f0  libjava/java/util/logging/Level.java
! 5454a9736c451e2dede040132f8857f3  libjava/java/util/logging/LogManager.java
! 69cf28a92975cb9cba77c08cf47d243d  libjava/java/util/logging/LogRecord.java
! 8c603ad4a8ea04bfe9b8ea4ac5b88b1d  libjava/java/util/logging/Logger.java
! f5d35766ff5e614ef5320073aeb4ed0a  libjava/java/util/logging/LoggingPermission.java
! 73f07bfc82199a412b37860f99830e62  libjava/java/util/logging/MemoryHandler.java
! 21f17455c296d240a98891db2e8174a1  libjava/java/util/logging/SimpleFormatter.java
! ef6100a3fcba5f710fba51eacac2d985  libjava/java/util/logging/SocketHandler.java
! 06d263f687e7f75c718d68bdf89d36ed  libjava/java/util/logging/StreamHandler.java
! 889cc9cae34930486c8746a9ea2a9022  libjava/java/util/logging/XMLFormatter.java
  a8a109e84e6cb0612ed5da3f51ce4f2d  libjava/java/util/logging/logging.properties
  9ce324aa06122ee1148e68a41b3a2083  libjava/java/util/natResourceBundle.cc
! 2f9bb5982191468daa5bb133db36c68f  libjava/java/util/natTimeZone.cc
! 921d89ac6c9075347ce62c1784da7fcb  libjava/java/util/prefs/AbstractPreferences.java
! 3926c4c727e55fbed6d741e6cbc18fa2  libjava/java/util/prefs/BackingStoreException.java
! 5fc0300f42b0e5c2abe85d77050c7fd4  libjava/java/util/prefs/InvalidPreferencesFormatException.java
  87aa7bff5ac1d29571104efcf9735ce2  libjava/java/util/prefs/NodeChangeEvent.java
  2cbc48b59cbcfdd2a12ce623c273b17d  libjava/java/util/prefs/NodeChangeListener.java
  4b994ebc7b557f8c3fe2410604c815e3  libjava/java/util/prefs/PreferenceChangeEvent.java
  5a7d4b7431fa6d6b7cd0e33dc81c5c81  libjava/java/util/prefs/PreferenceChangeListener.java
! ecdefc37834586ad5a838b9f88e1f732  libjava/java/util/prefs/Preferences.java
  63bfa559995e4aba45c88cc29335bb94  libjava/java/util/prefs/PreferencesFactory.java
! 91621970d703c6ce0af92d10f5bc7a30  libjava/java/util/regex/Matcher.java
! defbc983803655657e337b1cb0673236  libjava/java/util/regex/Pattern.java
  403229bb073f94d1d31e151c43571b45  libjava/java/util/regex/PatternSyntaxException.java
  60e812205db1c9217885c22a89e43fcc  libjava/java/util/zip/Adler32.java
  72ebf52147630fcf515407834f1f296c  libjava/java/util/zip/CRC32.java
! d0333d19df9e3efb306c1b7708c876b5  libjava/java/util/zip/CheckedInputStream.java
! 2e975860abbd97d806a3124caba824de  libjava/java/util/zip/CheckedOutputStream.java
  c739403d3917777989d801804a636590  libjava/java/util/zip/Checksum.java
  350397e46b376392d5dd5b38ac810c3b  libjava/java/util/zip/DataFormatException.java
! 438700e1c404804b67d4009c51719f3e  libjava/java/util/zip/Deflater.java
! 6a878041ecc805b5536db016b30f4287  libjava/java/util/zip/DeflaterOutputStream.java
! 66dd6a83899aca3d11bd08ba95781b3a  libjava/java/util/zip/GZIPInputStream.java
! 82a599d21289014f58b2d8b8eefbc30d  libjava/java/util/zip/GZIPOutputStream.java
! 1d3049b29ae17ed219a9c99e023e0940  libjava/java/util/zip/Inflater.java
! 75ff9fb13867f931bb8be74d53122dba  libjava/java/util/zip/InflaterInputStream.java
  2b61aa5a2dac29480dd5bd41a6c2d636  libjava/java/util/zip/ZipConstants.java
! f36bd01ee20a14f1caaee9483ed14ae4  libjava/java/util/zip/ZipEntry.java
  f3b7099cf4b32a8e4aa4a783dbab180c  libjava/java/util/zip/ZipException.java
! de70653620ae562571bcb8bf179ccc9a  libjava/java/util/zip/ZipFile.java
! 7daf4cb83ce7c8a966f14d0697d65340  libjava/java/util/zip/ZipInputStream.java
! 91cf13042e56379d27c7a92e6d7f20bf  libjava/java/util/zip/ZipOutputStream.java
  25df7cd5571d97e22829f6244a1b2e1f  libjava/java/util/zip/natDeflater.cc
  df7b112bc4248d86d37b1f679c2660c4  libjava/java/util/zip/natInflater.cc
! 36c974fb616ebd282a68678584316e55  libjava/javax/accessibility/Accessible.java
! d63a4e054faffa0e0b895f48237ac419  libjava/javax/accessibility/AccessibleAction.java
! 07d9e4cfdcc9602050fa983940712b99  libjava/javax/accessibility/AccessibleBundle.java
! 42753dc350ea29b10db14d7e36906bca  libjava/javax/accessibility/AccessibleComponent.java
! e9b538adb63f93c91dcb4930ca2d29a7  libjava/javax/accessibility/AccessibleContext.java
! a94ec457bc6c6466cdb1699ba3b61c99  libjava/javax/accessibility/AccessibleEditableText.java
! 538dc19da3e2dd6cab53ffc56eacf5d5  libjava/javax/accessibility/AccessibleExtendedComponent.java
! 52d23d4c424d7f9de10013e9d1587bf0  libjava/javax/accessibility/AccessibleExtendedTable.java
! 63194b0bd33a9268801fb3d7e16b56d6  libjava/javax/accessibility/AccessibleHyperlink.java
! 7af5e994d9499418e784785c17d25e11  libjava/javax/accessibility/AccessibleHypertext.java
! 6d09e31e19646f871bd1fa5ce15f7913  libjava/javax/accessibility/AccessibleIcon.java
! cbe249a6021101bd65a34d0f4aa9294f  libjava/javax/accessibility/AccessibleKeyBinding.java
! 7d23f0bd1879c681f7bd35d15b91a4fc  libjava/javax/accessibility/AccessibleRelation.java
! 201846325368ba24ddbe9b4fee76cade  libjava/javax/accessibility/AccessibleRelationSet.java
! 38ada2be8347e4dd7a553f3a1579e701  libjava/javax/accessibility/AccessibleResourceBundle.java
! 8b887aa4cbc913fabb96a94bfd8633e4  libjava/javax/accessibility/AccessibleRole.java
! 6524b3b15eb8c0c8e9f39f95391e6785  libjava/javax/accessibility/AccessibleSelection.java
! d1c4d8aa3e91402c6c1891a406d64440  libjava/javax/accessibility/AccessibleState.java
! 49e235b69b883700c05aa9e1ff4b62cc  libjava/javax/accessibility/AccessibleStateSet.java
! 06ceaa8a85d68cb1924ec21d6542692d  libjava/javax/accessibility/AccessibleTable.java
! ea9a5d27520ce3a03790ee999a36eb7f  libjava/javax/accessibility/AccessibleTableModelChange.java
! 06c1dfc0dc591fa9df002e3ac6b44389  libjava/javax/accessibility/AccessibleText.java
! 1e28492a84652b897878e37ff39b0be6  libjava/javax/accessibility/AccessibleValue.java
! 71db102d54444dfb8ced9ddd03d87486  libjava/javax/naming/AuthenticationException.java
! 9b0bd8bca8d96a11a8ef60c553c33495  libjava/javax/naming/AuthenticationNotSupportedException.java
  606c1411b9f2f393535bd8ff39616289  libjava/javax/naming/BinaryRefAddr.java
! 7800c84ce999356c0b14eff142426d89  libjava/javax/naming/Binding.java
! a8cde9e223e8ded4f5bfac6751dfd824  libjava/javax/naming/CannotProceedException.java
! a739989c77b892311fd7a044613fb9ab  libjava/javax/naming/CommunicationException.java
! b8ed7dabeb5e9994436c26ba60f8e02b  libjava/javax/naming/CompositeName.java
! 32c1a25931380a9a12ceccb29fcab5db  libjava/javax/naming/CompoundName.java
! 9f427a918f9182d7ab8addb6e35ea07e  libjava/javax/naming/ConfigurationException.java
  a257c4a1b7cf6810c6357258274f50be  libjava/javax/naming/Context.java
! c70840b24b2032b41b8ec5d2abd96345  libjava/javax/naming/ContextNotEmptyException.java
! d3af93114bb098cdfc68099f1332a4ea  libjava/javax/naming/InitialContext.java
! 953969139b91b20bb51abe3b8e394af7  libjava/javax/naming/InsufficientResourcesException.java
! b00027e190437323577f8a2c86a4d4cb  libjava/javax/naming/InterruptedNamingException.java
  a767862455cc2a9791dd895c38020b5a  libjava/javax/naming/InvalidNameException.java
! ea7c1408b64b2f136e9a74624d593c99  libjava/javax/naming/LimitExceededException.java
! 684c966abfbac74551b070cea8d32375  libjava/javax/naming/LinkException.java
! 0ac3594ba6556bf6fc82139e48869c5e  libjava/javax/naming/LinkLoopException.java
! 948a51796e28108c9808df7b737244fe  libjava/javax/naming/LinkRef.java
! 6e1ea1950caa415d124e320c7ba9bbd3  libjava/javax/naming/MalformedLinkException.java
! b983e4002613d1e4a5f0556e986dbcf1  libjava/javax/naming/Name.java
! 2798a3cabd3662250c9f5dbb253512ed  libjava/javax/naming/NameAlreadyBoundException.java
! 4f1aa4472c16856344e294636167fecc  libjava/javax/naming/NameClassPair.java
! bdd4f861900ad1da608e0656f2ea7e6e  libjava/javax/naming/NameNotFoundException.java
  18109d59067f1305d682dfd15d9779ab  libjava/javax/naming/NameParser.java
  8facc8069bc0029e4696d6791ee8f576  libjava/javax/naming/NamingEnumeration.java
! 22344b0878341a7d291af2ef100a15a4  libjava/javax/naming/NamingException.java
! ffa81c32a891eb27064055c8219b6668  libjava/javax/naming/NamingSecurityException.java
! 13473e1196429e9d309e61da4b0bb431  libjava/javax/naming/NoInitialContextException.java
! 1a767fa571272e54a6986878943f9cf7  libjava/javax/naming/NoPermissionException.java
! a78f21010d136c1ca165fa8ea1b75479  libjava/javax/naming/NotContextException.java
  2d67eeb89063f3bb8d122a9bae58b3ec  libjava/javax/naming/OperationNotSupportedException.java
! 2d5d0a4e720f464af1d113d01af02636  libjava/javax/naming/PartialResultException.java
  4e1b4cddb930ac4275f94c532ee9b8c2  libjava/javax/naming/RefAddr.java
! 66547089fdbd09cbb0bb4aa6137324e7  libjava/javax/naming/Reference.java
  9464e80bdb94166ad0979ee3036f9c4d  libjava/javax/naming/Referenceable.java
! c999a28b5b4f07a1230dd9dff1daf33b  libjava/javax/naming/ReferralException.java
! b751e6c77416b6abbdc587a6db8372d3  libjava/javax/naming/ServiceUnavailableException.java
! 0b2e1f7ed9f9f661e010b921a88b468d  libjava/javax/naming/SizeLimitExceededException.java
  53df728601f9eb45f27de06d37f3b221  libjava/javax/naming/StringRefAddr.java
! b3a4dbfe5ec851ea2434a235efb2e2d1  libjava/javax/naming/TimeLimitExceededException.java
! ccd6a225b8042665122fa25610162323  libjava/javax/naming/directory/Attribute.java
  1db27e6e7a3b870552842764142ad3ff  libjava/javax/naming/directory/AttributeInUseException.java
! 7b8b596ac904e70d2c85cdd0a3dbc0bd  libjava/javax/naming/directory/AttributeModificationException.java
! aa11ed0677b1d8f46ec28bc6ae4bb2ab  libjava/javax/naming/directory/Attributes.java
! 10dbff8db22c5275cc92566c6ab15049  libjava/javax/naming/directory/BasicAttribute.java
! 410e542ebb7dfe44bed83f7ffd957f41  libjava/javax/naming/directory/BasicAttributes.java
! e29b78134ce93bb20bcee7e2bfdebb39  libjava/javax/naming/directory/DirContext.java
! b690828816369c99506284e134bdab61  libjava/javax/naming/directory/InitialDirContext.java
  7d32be91176f836bab3b53547bafef03  libjava/javax/naming/directory/InvalidAttributeIdentifierException.java
  09135b4217b1093a44e0b7f11b7bf5e1  libjava/javax/naming/directory/InvalidAttributeValueException.java
  03d2e67803891c871fbafc0d56164915  libjava/javax/naming/directory/InvalidAttributesException.java
  2b5205d8ec9c81f78620a6de4fde786c  libjava/javax/naming/directory/InvalidSearchControlsException.java
  1aed1c3d835c52f0e3387364a9b2e4fa  libjava/javax/naming/directory/InvalidSearchFilterException.java
! 39844a65e0b383fe1f4389b808d23b2d  libjava/javax/naming/directory/ModificationItem.java
  366a9b79d4f6dd4081c7be51ca1fb34e  libjava/javax/naming/directory/NoSuchAttributeException.java
  adb5566ca4a46a4bed8f349b61c146b0  libjava/javax/naming/directory/SchemaViolationException.java
! 70dcb2966da5f7461c6b96b50e452e9a  libjava/javax/naming/directory/SearchControls.java
! db67e41c59d32f9c72f47c0195c05609  libjava/javax/naming/directory/SearchResult.java
! 36748d3ebc35a07d142855812928e351  libjava/javax/naming/event/EventContext.java
! 155dc29afae41080835eb99797a86553  libjava/javax/naming/event/EventDirContext.java
! 4de0c717109b8502058676e8bf17d20d  libjava/javax/naming/event/NamespaceChangeListener.java
! c6f92a6b8854e5069f645528aedb2179  libjava/javax/naming/event/NamingEvent.java
! 47df42d6d8b033fa38a4f6487fdc79ad  libjava/javax/naming/event/NamingExceptionEvent.java
! f49e412b518b2d2fa9dec786d3eb53bf  libjava/javax/naming/event/NamingListener.java
! 3e7c289041350cdcf38227abbae8626b  libjava/javax/naming/event/ObjectChangeListener.java
! 0174defc1f81f9284cf59bf854a2d418  libjava/javax/naming/ldap/Control.java
! 9d97a73e45d13328e7ca467da2893687  libjava/javax/naming/ldap/ControlFactory.java
! 4bfe78cc9816d3f552d6ff7a6f43e953  libjava/javax/naming/ldap/ExtendedRequest.java
! a69791fc3381b112a4c92aacbc18482d  libjava/javax/naming/ldap/ExtendedResponse.java
! 4634de9f62208581318946034a3f4a99  libjava/javax/naming/ldap/HasControls.java
! e06107b4960833ed583375564ff4fdfb  libjava/javax/naming/ldap/InitialLdapContext.java
! b6e7a55ca28c26fb3e22cca682e45d18  libjava/javax/naming/ldap/LdapContext.java
! 2df33223212f90bb2893b922e640f6de  libjava/javax/naming/ldap/LdapReferralException.java
! 2c65cdccd5941028449663e36c592c26  libjava/javax/naming/ldap/UnsolicitedNotification.java
! 32aa91b4c95b79fc07eff337a71a8f95  libjava/javax/naming/ldap/UnsolicitedNotificationEvent.java
! 4f21f1454ae5cf21d8f3745dccbfd159  libjava/javax/naming/ldap/UnsolicitedNotificationListener.java
! a68236ddbf37319c5063f897fc7bfd9e  libjava/javax/naming/spi/DirObjectFactory.java
! 54b26acde8fb922958b84b30b6862e37  libjava/javax/naming/spi/DirStateFactory.java
! dbffb9f8cfb233021b052e9040e8d3be  libjava/javax/naming/spi/DirectoryManager.java
! 5334bcb8d76e90fac314aab3f30c401d  libjava/javax/naming/spi/InitialContextFactory.java
! 2541212c842586a05be3b7a452371ef3  libjava/javax/naming/spi/InitialContextFactoryBuilder.java
! 5da129a37eff3dd66b0be38e2772166f  libjava/javax/naming/spi/NamingManager.java
! 619f8ed2f59586303f849d19ff78ef9e  libjava/javax/naming/spi/ObjectFactory.java
! 751d4eee7a32d26d576148d98cc38422  libjava/javax/naming/spi/ObjectFactoryBuilder.java
! 785702cd85c8141cfa5bf673e5eaa632  libjava/javax/naming/spi/ResolveResult.java
! c613c9863d9febf0f6c4b28415abb6e0  libjava/javax/naming/spi/Resolver.java
! 69f532561a2f71d4cbebb2f79932d4ea  libjava/javax/naming/spi/StateFactory.java
  9a096edfeaeaba2baf4bcfbef07f83cf  libjava/javax/print/attribute/Attribute.java
  fb3b9abff9b029655e1b13cc6ce54a21  libjava/javax/print/attribute/AttributeSet.java
! d3070dc9cf6115a4782f6e2c5591ad7c  libjava/javax/print/attribute/AttributeSetUtilities.java
  ca31169c0903de09de23e8fdfa1b6583  libjava/javax/print/attribute/DateTimeSyntax.java
  09974ffe4ba4f3db779c1cece0fb8a39  libjava/javax/print/attribute/DocAttribute.java
  46b9f74f6ef3b85c1e8707e2cd55b4ce  libjava/javax/print/attribute/DocAttributeSet.java
! 2965446e2e1fbf20f460dc575cd3c7d3  libjava/javax/print/attribute/EnumSyntax.java
! 6364ae2aebd82bbe9cb4fc1c0d06a94e  libjava/javax/print/attribute/HashAttributeSet.java
  6c95e4b7f620563cf63bcf961bd44c2f  libjava/javax/print/attribute/HashDocAttributeSet.java
  d999a24ee8a7935c05e3304905f8340d  libjava/javax/print/attribute/HashPrintJobAttributeSet.java
  eb71bd56ceafdfed2d47936035626b98  libjava/javax/print/attribute/HashPrintRequestAttributeSet.java
  c5b2cb214b4a863f44e715aa6f371ef8  libjava/javax/print/attribute/HashPrintServiceAttributeSet.java
! c97efa2d5c73d20d85031ff7ee459899  libjava/javax/print/attribute/IntegerSyntax.java
  d7ef7095b5ea743e14157f36cadfe94e  libjava/javax/print/attribute/PrintJobAttribute.java
  63a48f64075386a9e6d54f874a039d67  libjava/javax/print/attribute/PrintJobAttributeSet.java
  0feb00a0feae5d33130648738d07f6aa  libjava/javax/print/attribute/PrintRequestAttribute.java
  919db97fb1589243e57fe5786cab863f  libjava/javax/print/attribute/PrintRequestAttributeSet.java
  478c19ee261c641dd088253314758160  libjava/javax/print/attribute/PrintServiceAttribute.java
  751074a5875eba470402effa1682be91  libjava/javax/print/attribute/PrintServiceAttributeSet.java
! 15ef4acb3c3ba092ecebb7542b999597  libjava/javax/print/attribute/ResolutionSyntax.java
! 10970d0593bc51d528f23eec1863f1f5  libjava/javax/print/attribute/SetOfIntegerSyntax.java
  6198d92476b4f23d118f27b7a4ab6922  libjava/javax/print/attribute/Size2DSyntax.java
  5c0297a14dfe5e52535019d2b197e5d4  libjava/javax/print/attribute/SupportedValuesAttribute.java
! 96fe20a324f99dcd178dc69f74acaa0b  libjava/javax/print/attribute/TextSyntax.java
  5f4812fa6f983a499e5e87ec18f8f27b  libjava/javax/print/attribute/URISyntax.java
  cc4fd46a2707679f8af3084d653963bb  libjava/javax/print/attribute/UnmodifiableSetException.java
! 03493e5ef3584726b2abb5e5b7f05780  libjava/javax/print/attribute/standard/Copies.java
! dd666e0aa7630562f93e761cacc17ea8  libjava/javax/print/attribute/standard/DateTimeAtCompleted.java
! c6470cd8f92d9e4062c12de0e1a8b104  libjava/javax/print/attribute/standard/DateTimeAtCreation.java
! 6d08bc38b356f45dbc374d8bcdd3eb9f  libjava/javax/print/attribute/standard/DateTimeAtProcessing.java
! 19b25988c43903c4e7a2a5c32ee77322  libjava/javax/print/attribute/standard/DocumentName.java
! d34195371631a003c4563cbd35964ed4  libjava/javax/print/attribute/standard/JobHoldUntil.java
! 0d9c45acddde7a940ffd67b458f3013c  libjava/javax/print/attribute/standard/JobImpressions.java
! d372362cd55bff368d1b17d34948ea51  libjava/javax/print/attribute/standard/JobImpressionsCompleted.java
! 8e0ec264911a1e1df4350969eaed5c1c  libjava/javax/print/attribute/standard/JobKOctets.java
! ea54bdb0f7765e5c76458eaee78bc653  libjava/javax/print/attribute/standard/JobKOctetsProcessed.java
! 4961cc370d5089a5cae8467bfee6f4ae  libjava/javax/print/attribute/standard/JobMediaSheets.java
! 5060ad3b527823ecea072527ea68f79e  libjava/javax/print/attribute/standard/JobMediaSheetsCompleted.java
! ad89f32a843de2380324b4d18c3f771b  libjava/javax/print/attribute/standard/JobMessageFromOperator.java
! ec344358e5a23bc91d8ff0f3e2d62b25  libjava/javax/print/attribute/standard/JobName.java
! 49d51214bd5bd0ad4b4b846083c0529e  libjava/javax/print/attribute/standard/JobOriginatingUserName.java
! aa70ccd37ce05fc308ec3997e1884e19  libjava/javax/print/attribute/standard/JobPriority.java
! 1436831bafe41fcaadf2813f27032c48  libjava/javax/print/attribute/standard/JobPrioritySupported.java
! e68bb5a1377e739d587eacd511de19ed  libjava/javax/print/attribute/standard/NumberOfDocuments.java
! cb4ce4946b943480404c2dc1e309b0ad  libjava/javax/print/attribute/standard/NumberOfInterveningJobs.java
! bcee4a8286cefd9439a2805cc5da157d  libjava/javax/print/attribute/standard/NumberUp.java
! 90022b7db877fa764e2e7be26de695b4  libjava/javax/print/attribute/standard/OutputDeviceAssigned.java
! a24d79098be07cc3f8b3bae3c3fbd86f  libjava/javax/print/attribute/standard/PagesPerMinute.java
! 3341e3d1f372e6cbd1e28c7dd3249d0b  libjava/javax/print/attribute/standard/PagesPerMinuteColor.java
! 8a888df2b2f381192a5e8868d899c6d8  libjava/javax/print/attribute/standard/PrinterInfo.java
! 937e0a4b48eb7b58a12b45445ae2074d  libjava/javax/print/attribute/standard/PrinterLocation.java
! 6472fd62e77d5580fe32303dca1eaef8  libjava/javax/print/attribute/standard/PrinterMakeAndModel.java
! 205d6fa97100bfffaee0a6dd36302a51  libjava/javax/print/attribute/standard/PrinterMessageFromOperator.java
! 84547d392821823424e875fb1f427225  libjava/javax/print/attribute/standard/PrinterName.java
! 0c7853b70ea611c6802287c89ab9d9e5  libjava/javax/print/attribute/standard/QueuedJobCount.java
! 72811067414e5ad2c159d9680004e329  libjava/javax/print/attribute/standard/RequestingUserName.java
! 94740270ef17dc1cfb6faed8b98a3c7d  libjava/javax/rmi/BAD_OPERATION.java
! be7c6caaabdfd9c3ad3416e6894d10fb  libjava/javax/rmi/CORBA/ClassDesc.java
! ad50feec3d3be14f2f8a04ab146ecdf2  libjava/javax/rmi/CORBA/ObjectImpl.java
! 48cb8806da8fb3b06551ecc4b1abed71  libjava/javax/rmi/CORBA/PortableRemoteObjectDelegate.java
! 2bdbc97632c393ebda7d6e450a89d373  libjava/javax/rmi/CORBA/Stub.java
! 8a58da818a38c372461177d9e411464a  libjava/javax/rmi/CORBA/StubDelegate.java
! 3a631f4989db8bbc02ac88ab84feea84  libjava/javax/rmi/CORBA/SystemException.java
! 2dae84706cd961550b1401d0548c31d6  libjava/javax/rmi/CORBA/Tie.java
! 1ce6e7b969215e0dff571a61cf0cf6bb  libjava/javax/rmi/CORBA/Util.java
! 0e56961ad27105f3274ad95b3d971445  libjava/javax/rmi/CORBA/UtilDelegate.java
! e8a9e49a229d1bd36b54661242f7a233  libjava/javax/rmi/CORBA/ValueHandler.java
! ed39422a80173c9e8d28b48bfd021c0d  libjava/javax/rmi/ORB.java
! 6e378a3361fe2c7581dff90672966db8  libjava/javax/rmi/PortableRemoteObject.java
! e8f98ba142a1de0a23eafd11b1a42527  libjava/javax/security/auth/x500/X500Principal.java
  61b167147ddfc0403d1e1e8653558e39  libjava/javax/sql/ConnectionEvent.java
  df7bc0bc3461ea2f5e50d0300cc15032  libjava/javax/sql/ConnectionEventListener.java
  63f36786ea5ca806740cf24f18c83348  libjava/javax/sql/ConnectionPoolDataSource.java
--- 21720,22271 ----
  a0a2b096f9c267574c4b1901c321ece8  libjava/java/sql/Statement.java
  bb59542a56c07d074158419dbfd1049a  libjava/java/sql/Struct.java
  7558b709804233e842b4f65a9ec5361a  libjava/java/sql/Time.java
! de499802306e388ed02c856d2683d50b  libjava/java/sql/Timestamp.java
  0c2e0941100621fd27998f2f1f103431  libjava/java/sql/Types.java
  d955642fad41a199b8ad3704af9f0fec  libjava/java/text/Annotation.java
! c101e89b9114765f38b1e0a65e222ffb  libjava/java/text/AttributedCharacterIterator.java
! 5f7178cc68d0ab2bdd8c851e855c03ea  libjava/java/text/AttributedString.java
! 0508b555dc2d05c152c0cd3ae5fb8c46  libjava/java/text/AttributedStringIterator.java
! 08f0ddf30e60e9f1e927f13c43ffcf49  libjava/java/text/BreakIterator.java
  dd6ee066e673807a3666520f26bd7786  libjava/java/text/CharacterIterator.java
! cdcd318bc5fbeb6cacc23c556fa42152  libjava/java/text/ChoiceFormat.java
! 34a0192c2cd081c75359167fae7c29bb  libjava/java/text/CollationElementIterator.java
! 77cd5925d6717b5b47c3d71de5b628b1  libjava/java/text/CollationKey.java
! 89323fbed54fd43900efe059aee1c27b  libjava/java/text/Collator.java
! 3d627169d33301563cfd5df30cf29fb2  libjava/java/text/DateFormat.java
! a96890e1c61df4ce795df035982a65c3  libjava/java/text/DateFormatSymbols.java
! d988c279a05059ef0766403e8e896fe8  libjava/java/text/DecimalFormat.java
! c4183fc00947dd19f6e640ec8ef430a9  libjava/java/text/DecimalFormatSymbols.java
! c5517a3829a44eeb261c80b400646180  libjava/java/text/FieldPosition.java
! ac546610d6176686ad7638ed54cc625e  libjava/java/text/Format.java
! c58208b26665e5cec5e6df9aa245ef2e  libjava/java/text/MessageFormat.java
! 25b7d3a1902c3bae8cdf46a3c61e4cc0  libjava/java/text/NumberFormat.java
! 2e77895f27731324902a1097c4e09574  libjava/java/text/ParseException.java
! a4c4c88ab8bf31f257fae5211744c618  libjava/java/text/ParsePosition.java
! 2c3824391b90ce20713bd6f630ab79dc  libjava/java/text/RuleBasedCollator.java
! 05db2e17535e1aca53bc94e4e22b62c9  libjava/java/text/SimpleDateFormat.java
! f2a933945261c04f1477fd444e568956  libjava/java/text/StringCharacterIterator.java
  1a0c8d1f8762b747a35f3c5c6ae0c540  libjava/java/text/natCollator.cc
! ebdd599c9c010fe95c7a979c9a4c99ce  libjava/java/util/AbstractCollection.java
! 1a11e74a52423d0b09b714fbcefe3e1b  libjava/java/util/AbstractList.java
! 60e43b49dd0211c21098c99392eebb6c  libjava/java/util/AbstractMap.java
! 4d627b0659565d3a0511f6fe43d37af0  libjava/java/util/AbstractSequentialList.java
! bc818ee5e0455c66e375824bbce2b3e5  libjava/java/util/AbstractSet.java
! accbd3bdab49287089634d212970db80  libjava/java/util/ArrayList.java
! 985fce76c2fb0db567e2e94e49288ea7  libjava/java/util/Arrays.java
! 61f4a1cb0b68b0cc56ade98555c38a73  libjava/java/util/BitSet.java
! af4986a8d16f75a71fbf400eaeea378d  libjava/java/util/Calendar.java
! d54bfbc663a49c710aaa604694844e22  libjava/java/util/Collection.java
! 761e77d8893137c3edbb036344903306  libjava/java/util/Collections.java
! 883a8cb5c874c92eb5917b4ff85198c4  libjava/java/util/Comparator.java
! 691717c7073e5bca99bfe65b5c826de4  libjava/java/util/ConcurrentModificationException.java
! 1ba795fd0070f45a64943434c366f815  libjava/java/util/Currency.java
! 74790863bcc1bd6deaf7112f2cb957c8  libjava/java/util/Date.java
  ba5a4486c2bbf698a4897ee3cfd564a2  libjava/java/util/Dictionary.java
! fd8f636a43b0db5c1207b80fef7e80fa  libjava/java/util/EmptyStackException.java
! e43578ef726bfb4f48e33f908a5a948b  libjava/java/util/Enumeration.java
! a2f3cd0b0f442928bc4561cec4ffab2c  libjava/java/util/EventListener.java
! ccc02cd2025dbeb3c81d3f9e0a431b3f  libjava/java/util/EventListenerProxy.java
! 38fa84ae822b6f0f0b714ea3948840e2  libjava/java/util/EventObject.java
! 55c3656d9a889243958a2f5470f1e640  libjava/java/util/GregorianCalendar.java
! d4b59d1f67de609ea8e24e42c6bab719  libjava/java/util/HashMap.java
! c608eb95df97d8cee65e9f3a4dbb457b  libjava/java/util/HashSet.java
! 7218b2f4165e132c880314e1a6e59a06  libjava/java/util/Hashtable.java
! 9783d4db4d06348e72503fb5c7a5b8a9  libjava/java/util/IdentityHashMap.java
! 6f1be1d99a3f5b24a27560733f7c0769  libjava/java/util/Iterator.java
! 7d8a8e3eaac22e4e7e6667d076a4376f  libjava/java/util/LinkedHashMap.java
! 6d49f760ccb899b7be5a11a129d3c9f7  libjava/java/util/LinkedHashSet.java
! 8e711cce0d11278189c39a4b7630e4b0  libjava/java/util/LinkedList.java
! e9e1656f70f04e5b7348ea020dbc1fdf  libjava/java/util/List.java
! 187ac043837a26a1e670257cbe2c5941  libjava/java/util/ListIterator.java
! 440c575a229c60cc316f27bf65854059  libjava/java/util/ListResourceBundle.java
! e9041d7916cb38b9e9cb70eb06b13ee3  libjava/java/util/Locale.java
! a4449862cfd57528ba3bfad8612c25b3  libjava/java/util/Map.java
! bbc2887828a505801875d34afcdd1bdc  libjava/java/util/MissingResourceException.java
! c82deec2ac1dc09084ca61e433ed919c  libjava/java/util/NoSuchElementException.java
! bd1d0bc9e20fd6d7166c815d23bec83a  libjava/java/util/Observable.java
! 2a9215eaf2dfed532119d9b92131035d  libjava/java/util/Observer.java
! ed9e49af8c69ebdf6d00eeea4640cb0d  libjava/java/util/Properties.java
! 3ca505eb7d9de69eab53a8a8ce2904a4  libjava/java/util/PropertyPermission.java
! 22ee3b172c679da2b2a442a9b10b1acd  libjava/java/util/PropertyPermissionCollection.java
! 1db962ee794b844492edb19463af397b  libjava/java/util/PropertyResourceBundle.java
  ecc546f8699f79375e2a6d71d5e078f5  libjava/java/util/Random.java
! 1cc590659d31a2fbc0bd959960693368  libjava/java/util/RandomAccess.java
! 02ddb0a5cb5832b88ec57a734f379bfb  libjava/java/util/ResourceBundle.java
! 8a5429208cfa579b9f500635db009dce  libjava/java/util/Set.java
! 5c9ee1849729602ac7886d7a05897b1b  libjava/java/util/SimpleTimeZone.java
! 5b1b05523d404d295ffc6fd906605fef  libjava/java/util/SortedMap.java
! a77f69fb63798cc08fd417c11c14672d  libjava/java/util/SortedSet.java
! aa2ae7b804b31c085619a0ae882f99de  libjava/java/util/Stack.java
! 27c053b392570f643ee3ea09ae0d2e19  libjava/java/util/StringTokenizer.java
! ef866538fd5a78227700d666449bed4b  libjava/java/util/TimeZone.java
! efbf404727dd25f4743098bddeefa345  libjava/java/util/Timer.java
  0d84bd2f6f433602bd166c021318998c  libjava/java/util/TimerTask.java
! 097c66143eb9a9f9b2bb741501bd0cff  libjava/java/util/TooManyListenersException.java
! f4af74cf6e7edfd16c200585535f7e99  libjava/java/util/TreeMap.java
! 76152455cd0f4d0d66b045d54cd9a342  libjava/java/util/TreeSet.java
! 56141120cfd393722c82155b0fe8676b  libjava/java/util/VMTimeZone.java
! 659c7192a3a82313e0b77835fbabb794  libjava/java/util/Vector.java
! 70008843857cb33b53d2488b3c5f1626  libjava/java/util/WeakHashMap.java
! 8810f6721c8550da21cbe3c366c4567a  libjava/java/util/jar/Attributes.java
  f3c2bde333d7b1c53c739d10c452329c  libjava/java/util/jar/JarEntry.java
  633ea8c436f28f08b1f4d869b890b258  libjava/java/util/jar/JarException.java
! 7a3b6a318750be04d527abc0d1f676de  libjava/java/util/jar/JarFile.java
! ff8d6a0799ca63384bf1b3cf35f684d0  libjava/java/util/jar/JarInputStream.java
! b618e0e44c1101452cffdc1408ca0193  libjava/java/util/jar/JarOutputStream.java
! a90c0b1e50c6e639c0fb034ed16218b0  libjava/java/util/jar/Manifest.java
! 44b63e1b4bebae6768b5e6265fde9183  libjava/java/util/logging/ConsoleHandler.java
! 68f786ba1dbb2ec693e954a44cfd2da0  libjava/java/util/logging/ErrorManager.java
! 58ae777c4297024bab5f806692b15108  libjava/java/util/logging/FileHandler.java
! 491949b235f2ad94baa5e458238c488d  libjava/java/util/logging/Filter.java
! 0573adc9abcf63012ac99f90ea96ed09  libjava/java/util/logging/Formatter.java
! a8e9053ae445f7ee1d649c5d0f242e28  libjava/java/util/logging/Handler.java
! af99f09df38aecfebc1be6caef039e88  libjava/java/util/logging/Level.java
! 97f59486d13396eceef83dcd9e75822b  libjava/java/util/logging/LogManager.java
! fa1f82db3e73bc7cce71d272c5eca987  libjava/java/util/logging/LogRecord.java
! 1b471a4cd9a22bdecc5cda0d93f01398  libjava/java/util/logging/Logger.java
! 36e4ddf1ca8a1cde7ceeb9b5e9a035dc  libjava/java/util/logging/LoggingPermission.java
! 41130dd177ec5fa6b9c2272b0c6fc4d1  libjava/java/util/logging/MemoryHandler.java
! a002f234707b0e9f56d6b3fe9f8296bf  libjava/java/util/logging/SimpleFormatter.java
! dda90f06cf6c5f6aa6014e8ddce22fb5  libjava/java/util/logging/SocketHandler.java
! 606b98f2e4e23adc4b1a6574b4a1faef  libjava/java/util/logging/StreamHandler.java
! ecef47236a47deeec70302b07131d427  libjava/java/util/logging/XMLFormatter.java
  a8a109e84e6cb0612ed5da3f51ce4f2d  libjava/java/util/logging/logging.properties
+ 32f5406c86aa9e2f7f02bf4e121130f1  libjava/java/util/logging/natLogger.cc
  9ce324aa06122ee1148e68a41b3a2083  libjava/java/util/natResourceBundle.cc
! 55240de7d7becadb2d8663153ecab259  libjava/java/util/natVMTimeZone.cc
! d28cb33bc9c19f6f0c84363d2fcddb92  libjava/java/util/prefs/AbstractPreferences.java
! 256e83f25fad75473932c391552cb14b  libjava/java/util/prefs/BackingStoreException.java
! 28951caa79e6a62a68459a78ba4504b0  libjava/java/util/prefs/InvalidPreferencesFormatException.java
  87aa7bff5ac1d29571104efcf9735ce2  libjava/java/util/prefs/NodeChangeEvent.java
  2cbc48b59cbcfdd2a12ce623c273b17d  libjava/java/util/prefs/NodeChangeListener.java
  4b994ebc7b557f8c3fe2410604c815e3  libjava/java/util/prefs/PreferenceChangeEvent.java
  5a7d4b7431fa6d6b7cd0e33dc81c5c81  libjava/java/util/prefs/PreferenceChangeListener.java
! 400963230924fd2a327d5f2598b544ed  libjava/java/util/prefs/Preferences.java
  63bfa559995e4aba45c88cc29335bb94  libjava/java/util/prefs/PreferencesFactory.java
! 85dd546c6649c275399a4431c311f966  libjava/java/util/regex/Matcher.java
! 2c06886b5910415b9ad2429d4090d6cd  libjava/java/util/regex/Pattern.java
  403229bb073f94d1d31e151c43571b45  libjava/java/util/regex/PatternSyntaxException.java
  60e812205db1c9217885c22a89e43fcc  libjava/java/util/zip/Adler32.java
  72ebf52147630fcf515407834f1f296c  libjava/java/util/zip/CRC32.java
! 2fa0ed75771c3308b914770b4e88aafa  libjava/java/util/zip/CheckedInputStream.java
! a7e5af15abb6a1a93e5ff1d1ed471753  libjava/java/util/zip/CheckedOutputStream.java
  c739403d3917777989d801804a636590  libjava/java/util/zip/Checksum.java
  350397e46b376392d5dd5b38ac810c3b  libjava/java/util/zip/DataFormatException.java
! 9b5bc9cf047fc26360878a5076219053  libjava/java/util/zip/Deflater.java
! dd4dea28fe11a1dad5b6cfcd00cd04c8  libjava/java/util/zip/DeflaterOutputStream.java
! e44178cde34125a8c7d25b57c0c58d80  libjava/java/util/zip/GZIPInputStream.java
! ee251f2510d5da9135a5b7b3bee0b28c  libjava/java/util/zip/GZIPOutputStream.java
! b2d3704f59a33a6ae469bfb2486d1211  libjava/java/util/zip/Inflater.java
! b071a4ce0883c630fbaa0571bf8f34c5  libjava/java/util/zip/InflaterInputStream.java
  2b61aa5a2dac29480dd5bd41a6c2d636  libjava/java/util/zip/ZipConstants.java
! eda9e159f8d75a36b092d2e9582bc37a  libjava/java/util/zip/ZipEntry.java
  f3b7099cf4b32a8e4aa4a783dbab180c  libjava/java/util/zip/ZipException.java
! 417ffca3bf3546a080b3fea1e8ec92ab  libjava/java/util/zip/ZipFile.java
! e40a156d7de5a9ca2595fbdb18bdff17  libjava/java/util/zip/ZipInputStream.java
! bac3c12500202f33cfb5213845e34268  libjava/java/util/zip/ZipOutputStream.java
  25df7cd5571d97e22829f6244a1b2e1f  libjava/java/util/zip/natDeflater.cc
  df7b112bc4248d86d37b1f679c2660c4  libjava/java/util/zip/natInflater.cc
! 38f946a082306b1a6db1bbb6c0a62893  libjava/javax/accessibility/Accessible.java
! ee5122da071ebc2738acdfd9cd8684fe  libjava/javax/accessibility/AccessibleAction.java
! 9792dfb5f067461ce61296aac16ec933  libjava/javax/accessibility/AccessibleBundle.java
! e19b24e843d424276a54fc2ff8083787  libjava/javax/accessibility/AccessibleComponent.java
! 3cd8bbb58af255da7f4362a134e75ebb  libjava/javax/accessibility/AccessibleContext.java
! efede2653bbe1b2f9538c6a87b962007  libjava/javax/accessibility/AccessibleEditableText.java
! 67b81294339dd7271f270cceff85fe2b  libjava/javax/accessibility/AccessibleExtendedComponent.java
! 378a7d2fc08206e8c456ea9771835f42  libjava/javax/accessibility/AccessibleExtendedTable.java
! 6611833e2e0b789e345b2ebefa849bfa  libjava/javax/accessibility/AccessibleHyperlink.java
! 2fa514f9ef628c51a221d39cbb1f94b6  libjava/javax/accessibility/AccessibleHypertext.java
! a5404398e7b16b5c2732ce7c3b9e6132  libjava/javax/accessibility/AccessibleIcon.java
! 8fa535322d10b78b9b8a4e4560ed6c75  libjava/javax/accessibility/AccessibleKeyBinding.java
! 54c515c0704327bf2d7bc1914be87a40  libjava/javax/accessibility/AccessibleRelation.java
! 43166582397b6153bcb50c44abd17748  libjava/javax/accessibility/AccessibleRelationSet.java
! b762e6200ce214b2b0b32366a639c9d9  libjava/javax/accessibility/AccessibleResourceBundle.java
! 382bb4564925e5f84a023d76d3337ac0  libjava/javax/accessibility/AccessibleRole.java
! 83fdb67155e25fb7444b114ce8f39e6b  libjava/javax/accessibility/AccessibleSelection.java
! f6c4fcba7648c1eb4bfb2f3666c30d29  libjava/javax/accessibility/AccessibleState.java
! 88e39c8b251ef205ab4a56be237af32c  libjava/javax/accessibility/AccessibleStateSet.java
! 3ddcdca293a6b9a820a2240e8c68ad23  libjava/javax/accessibility/AccessibleTable.java
! d667564970fc93528ae1ebcfc247e8c2  libjava/javax/accessibility/AccessibleTableModelChange.java
! 7f116c6c527b1df487a39130eb906ff9  libjava/javax/accessibility/AccessibleText.java
! 43024925d51991b9e60671fa94de5fb8  libjava/javax/accessibility/AccessibleValue.java
! fa98caef88c572988a4c70b84fe3faa3  libjava/javax/crypto/BadPaddingException.java
! 32c6f38ad32fb2ee34cc2d4365d661f2  libjava/javax/crypto/Cipher.java
! 51eb2f6380c6c3903a022d027742e27a  libjava/javax/crypto/CipherInputStream.java
! 29be710f3099eca4d99fe724eda8dede  libjava/javax/crypto/CipherOutputStream.java
! bc341a3c86b30fe794b3ef9360e7304d  libjava/javax/crypto/CipherSpi.java
! 54cd86e0158600b076b1fd48920f0b45  libjava/javax/crypto/EncryptedPrivateKeyInfo.java
! 7e48cf082ae3b3ee30048620b28ce8cb  libjava/javax/crypto/ExemptionMechanism.java
! 504885e68b0a4a2e7cf20e12cee26ddc  libjava/javax/crypto/ExemptionMechanismException.java
! ad7171e67fe4e10ddbf8fba59a6d0e31  libjava/javax/crypto/ExemptionMechanismSpi.java
! 48b160ea7a8dbd08f2116cec4c2463c1  libjava/javax/crypto/IllegalBlockSizeException.java
! 008b218c06a01ac2025e871e0e4ef35c  libjava/javax/crypto/KeyAgreement.java
! a9ef84cdb1a85bb4cae5bd59ff8d2efa  libjava/javax/crypto/KeyAgreementSpi.java
! 2cd67f18c208374125b8ea7ad79bc490  libjava/javax/crypto/KeyGenerator.java
! 508ba53153977b82bc3513745075f7ac  libjava/javax/crypto/KeyGeneratorSpi.java
! a9a33a739642c284882e7f3e1a83d4a3  libjava/javax/crypto/Mac.java
! 6f43f62c80fd0fefba1a9b618f7ff039  libjava/javax/crypto/MacSpi.java
! e84f105df1e1ce1e663c4e083681b40b  libjava/javax/crypto/NoSuchPaddingException.java
! 87d70d50643abdf1f059ad294fc68e5c  libjava/javax/crypto/NullCipher.java
! 5540fa51ef0bf172a158263d75e9452c  libjava/javax/crypto/NullCipherImpl.java
! f8315c6e4e3f58f5270788c361961fb7  libjava/javax/crypto/SealedObject.java
! 18497070eaf5a97fc7e7eeef463c78f3  libjava/javax/crypto/SecretKey.java
! b996abf4253c0a0c3a140afd19eb5876  libjava/javax/crypto/SecretKeyFactory.java
! 2991dcaa3c9ba4c496607aa3cc6cfb98  libjava/javax/crypto/SecretKeyFactorySpi.java
! 5098b20300ff0cdf88a012b6da4d3d42  libjava/javax/crypto/ShortBufferException.java
! fb9fa50bc5721078de0d9b552aa9af17  libjava/javax/crypto/interfaces/DHKey.java
! ef89eb5b2b991943b85a536cd0369e3d  libjava/javax/crypto/interfaces/DHPrivateKey.java
! aedfd31806a36ff58561f6e4f6eefcf4  libjava/javax/crypto/interfaces/DHPublicKey.java
! 9978f96c2854b4804da3f4469cdb980a  libjava/javax/crypto/interfaces/PBEKey.java
! eb5f71687f818d4aef7ef6b72bcba64f  libjava/javax/crypto/spec/DESKeySpec.java
! 705d931f608dd1f1dde1c727b18d6a2f  libjava/javax/crypto/spec/DESedeKeySpec.java
! 0842c36d3dbee1ad11b5cd783e925376  libjava/javax/crypto/spec/DHGenParameterSpec.java
! 72fc61275cdfebec856ed0c977637ee1  libjava/javax/crypto/spec/DHParameterSpec.java
! 750adfd50de8efebec3229115b8115b9  libjava/javax/crypto/spec/DHPrivateKeySpec.java
! 31f9396e0ab4b8dd50ea749aec59d1b3  libjava/javax/crypto/spec/DHPublicKeySpec.java
! 3957c4a71fba8c57965218acb16142f1  libjava/javax/crypto/spec/IvParameterSpec.java
! 9fe29f7b4ee46b9c615511003fc1e564  libjava/javax/crypto/spec/PBEKeySpec.java
! 6d4aa7a671d6f7fb7a4d3b3ed850358a  libjava/javax/crypto/spec/PBEParameterSpec.java
! e990c747af5c5497e0494b4c57beae58  libjava/javax/crypto/spec/RC2ParameterSpec.java
! db866fed91e89e2cd5b739b13139962c  libjava/javax/crypto/spec/RC5ParameterSpec.java
! 83c7755e32c0b5d2b2dde54a1242309b  libjava/javax/crypto/spec/SecretKeySpec.java
! e715893bab0498fe1bf4a8fce6840120  libjava/javax/imageio/IIOException.java
! af25330bfad3b38527f7c8995f8adb81  libjava/javax/imageio/IIOImage.java
! ad5aabdcf154e17dbdd60d2ccbc0f395  libjava/javax/imageio/IIOParam.java
! 9947d6ab76b37c4ab0e727353aa534c8  libjava/javax/imageio/IIOParamController.java
! 8dd681b08eeb28ca11ce296ed3089dbe  libjava/javax/imageio/ImageIO.java
! 44b53a91bb5014157a8ff99bc883abc3  libjava/javax/imageio/ImageReadParam.java
! 6c8e2026e2d06fab52e6fb93ab76e87c  libjava/javax/imageio/ImageReader.java
! 9b38a5cc1961026b8ddc2f7ee340fc3e  libjava/javax/imageio/ImageTranscoder.java
! 3c3b2e0a3f12dec6ee0dfacdc3e51364  libjava/javax/imageio/ImageTypeSpecifier.java
! 7bea1e8139a39ae5d0a4055f72ddeebd  libjava/javax/imageio/ImageWriteParam.java
! 7044e6cef7b437c5a3aa3e269db79f2c  libjava/javax/imageio/ImageWriter.java
! f84ebd9613e6aebb18f55dbebe1f2776  libjava/javax/imageio/event/IIOReadProgressListener.java
! f9d22f1e633437ae960b438d047efbef  libjava/javax/imageio/event/IIOReadUpdateListener.java
! c81702514172bf3104a5cd4d5ffa6325  libjava/javax/imageio/event/IIOReadWarningListener.java
! a08f0f73a9c62113c7ee37cf4307bb4a  libjava/javax/imageio/event/IIOWriteProgressListener.java
! 38ee53c68b4e4353832d8bda3ed4b5a2  libjava/javax/imageio/event/IIOWriteWarningListener.java
! 46fd2285f054fd0808899a5f5e29359d  libjava/javax/imageio/event/package.html
! 86cd09ec5a470a13f1b24f1c6b59db66  libjava/javax/imageio/metadata/IIOAttr.java
! 77df1d9d2e0dd4ff5982af8d369953a8  libjava/javax/imageio/metadata/IIOInvalidTreeException.java
! 454636b80de83da6417bb9f26d11be8c  libjava/javax/imageio/metadata/IIOMetadata.java
! b594146ba35a81ad6e1c3704e30b7b75  libjava/javax/imageio/metadata/IIOMetadataController.java
! 39c2858fa4bcf138a10ed990453d9373  libjava/javax/imageio/metadata/IIOMetadataFormat.java
! 8e987fffc4c49d436e92e1eb3893c365  libjava/javax/imageio/metadata/IIOMetadataFormatImpl.java
! c73f8573f9a8dcbfd0f4d003d998780c  libjava/javax/imageio/metadata/IIOMetadataNode.java
! 0dc71f0701bdb5914cefebf4980575a0  libjava/javax/imageio/metadata/IIONamedNodeMap.java
! 16d5b620f395f3107b269c473b2b2018  libjava/javax/imageio/metadata/IIONodeList.java
! aa4f22968017f6d6dd77b39373c3e160  libjava/javax/imageio/metadata/package.html
! b9a79a8fffe1e5be52c4f23b82c25818  libjava/javax/imageio/package.html
! 5dd6c56c788463a6d03d25251707dbf2  libjava/javax/imageio/spi/IIORegistry.java
! 70d97ed404f95cc33682cb3b32b9c710  libjava/javax/imageio/spi/IIOServiceProvider.java
! 7aa282c4f6eac667c1d1213b665a0849  libjava/javax/imageio/spi/ImageInputStreamSpi.java
! ca7906fe6451e153fa02c44f5208f5d5  libjava/javax/imageio/spi/ImageOutputStreamSpi.java
! 42a7f43258ca2edddd1a8d9453f86299  libjava/javax/imageio/spi/ImageReaderSpi.java
! 91e7e69e791c724b344abd4032e51461  libjava/javax/imageio/spi/ImageReaderWriterSpi.java
! 09ec60918a2d5184d510855d02ed336c  libjava/javax/imageio/spi/ImageTranscoderSpi.java
! 34e1ebfa937e0556fb752de8d94b5e03  libjava/javax/imageio/spi/ImageWriterSpi.java
! b15b7b22ac823872002c46fd1d8a061c  libjava/javax/imageio/spi/RegisterableService.java
! a28d885d9e6dd2df6d57fd7245d3470a  libjava/javax/imageio/spi/ServiceRegistry.java
! 85b32dc9c96eb57e5085d61b75aa8f53  libjava/javax/imageio/spi/package.html
! 09e2af7b2e7315dcc4c3c110fe0165d6  libjava/javax/imageio/stream/FileCacheImageInputStream.java
! 0ffc21b51e8fb57600d46081d3910888  libjava/javax/imageio/stream/FileCacheImageOutputStream.java
! 28a8b6d8414396c51b80a2ff07c0524a  libjava/javax/imageio/stream/FileImageInputStream.java
! b37db2220823613e011992d1403c411b  libjava/javax/imageio/stream/FileImageOutputStream.java
! 1d94e3be3cc00c1fd84572f0e887243e  libjava/javax/imageio/stream/IIOByteBuffer.java
! 50204d4d7d6d5aea815f212d23deb7f7  libjava/javax/imageio/stream/ImageInputStream.java
! 1d0ed2b27a7b8e38e0dee9b2f0947253  libjava/javax/imageio/stream/ImageInputStreamImpl.java
! 6896ad4b83b5e87c6bc24ae8c5c3da31  libjava/javax/imageio/stream/ImageOutputStream.java
! 4775ccd7e7114b4e15ac2b08bd3e6ad5  libjava/javax/imageio/stream/ImageOutputStreamImpl.java
! 77fda4b459978cdf3d5929ce5f4ea27c  libjava/javax/imageio/stream/MemoryCacheImageInputStream.java
! 116fa24631b1952b9eed840d5088568e  libjava/javax/imageio/stream/MemoryCacheImageOutputStream.java
! da53270ac86dc5011c4b76a66283c3fc  libjava/javax/imageio/stream/package.html
! 2c696a6c71feacdef239900cebea8444  libjava/javax/naming/AuthenticationException.java
! 8ce4e4ec9998d66d68ed726f4239a912  libjava/javax/naming/AuthenticationNotSupportedException.java
  606c1411b9f2f393535bd8ff39616289  libjava/javax/naming/BinaryRefAddr.java
! 67adf73e0e4ccede8a570732441dc0c4  libjava/javax/naming/Binding.java
! 68632940f15fb0b2944108e7b0c2c462  libjava/javax/naming/CannotProceedException.java
! 9ff10a8c98ed8da5e1d6cfc9d1f930e6  libjava/javax/naming/CommunicationException.java
! 7d3369f05d5de373a0950c0585dbb7af  libjava/javax/naming/CompositeName.java
! de9e71478d16f88cdcadc119cc29bc87  libjava/javax/naming/CompoundName.java
! 2b1067964a8d8adaa63790a3b06b43a8  libjava/javax/naming/ConfigurationException.java
  a257c4a1b7cf6810c6357258274f50be  libjava/javax/naming/Context.java
! 1cbb840d58019afb3390dd8f81a72593  libjava/javax/naming/ContextNotEmptyException.java
! afeac3fb56260d0bb9f3fcf7e2f1b147  libjava/javax/naming/InitialContext.java
! 1e6208679f1e95890fb5f6cd0d45af76  libjava/javax/naming/InsufficientResourcesException.java
! 02730237c45c457919ff6290af5d8687  libjava/javax/naming/InterruptedNamingException.java
  a767862455cc2a9791dd895c38020b5a  libjava/javax/naming/InvalidNameException.java
! d68a76fdaed656554f55ea164b2224e2  libjava/javax/naming/LimitExceededException.java
! 626c35ed2efdae593394d6981222d24f  libjava/javax/naming/LinkException.java
! 8f4a70e90ff3e82203722b18c7e091f2  libjava/javax/naming/LinkLoopException.java
! 525f2e0a4fe4d733a738b645f318db9b  libjava/javax/naming/LinkRef.java
! b2efedba8a0b038104a536fcb537f2ed  libjava/javax/naming/MalformedLinkException.java
! a88864c0290ebcaee758922e7cf6454e  libjava/javax/naming/Name.java
! 173163ad7a80004c8c90008ee240b66d  libjava/javax/naming/NameAlreadyBoundException.java
! 375160a450acb39741c0756269e317b4  libjava/javax/naming/NameClassPair.java
! 29a39880f86047ad530de00239a9b147  libjava/javax/naming/NameNotFoundException.java
  18109d59067f1305d682dfd15d9779ab  libjava/javax/naming/NameParser.java
  8facc8069bc0029e4696d6791ee8f576  libjava/javax/naming/NamingEnumeration.java
! e32d72e73311cbe37582f187ba416cef  libjava/javax/naming/NamingException.java
! 97c82c94fba163b00aa3db8b8a8e424f  libjava/javax/naming/NamingSecurityException.java
! b3fc6c544dc2b32a351014ddfdef5513  libjava/javax/naming/NoInitialContextException.java
! bbb4057c171f66c70a27ccd492573324  libjava/javax/naming/NoPermissionException.java
! 4c60e586b6a2cacf9b948507b90d112d  libjava/javax/naming/NotContextException.java
  2d67eeb89063f3bb8d122a9bae58b3ec  libjava/javax/naming/OperationNotSupportedException.java
! e261401ac95361b875ce7e478956f565  libjava/javax/naming/PartialResultException.java
  4e1b4cddb930ac4275f94c532ee9b8c2  libjava/javax/naming/RefAddr.java
! 0a3fbc6034df65cee63259a814c0831c  libjava/javax/naming/Reference.java
  9464e80bdb94166ad0979ee3036f9c4d  libjava/javax/naming/Referenceable.java
! 9e6ebd85fb4882b78b860bb350952908  libjava/javax/naming/ReferralException.java
! 4f1f15cb704834f140109f9cb368716b  libjava/javax/naming/ServiceUnavailableException.java
! fb47d1d9a0b8e45666976fda3ef05b53  libjava/javax/naming/SizeLimitExceededException.java
  53df728601f9eb45f27de06d37f3b221  libjava/javax/naming/StringRefAddr.java
! 98bd51d4f00c23d37a8a5795ffd4a1b9  libjava/javax/naming/TimeLimitExceededException.java
! ab6b08467fba0e0b7d084f004a55d718  libjava/javax/naming/directory/Attribute.java
  1db27e6e7a3b870552842764142ad3ff  libjava/javax/naming/directory/AttributeInUseException.java
! 318f4ae113e476d86661dd184ebe0be8  libjava/javax/naming/directory/AttributeModificationException.java
! eb1d744feb77c38158e5eaf17cf1b873  libjava/javax/naming/directory/Attributes.java
! ba146994fafd0adfe03153ebf03c45b1  libjava/javax/naming/directory/BasicAttribute.java
! acc982d143f01e5e254639078ec65408  libjava/javax/naming/directory/BasicAttributes.java
! 6a9d29644d5aaf9a3e43e6fa324b00ae  libjava/javax/naming/directory/DirContext.java
! 4fe1cd98d4f3415c281d0d6ff2d66b45  libjava/javax/naming/directory/InitialDirContext.java
  7d32be91176f836bab3b53547bafef03  libjava/javax/naming/directory/InvalidAttributeIdentifierException.java
  09135b4217b1093a44e0b7f11b7bf5e1  libjava/javax/naming/directory/InvalidAttributeValueException.java
  03d2e67803891c871fbafc0d56164915  libjava/javax/naming/directory/InvalidAttributesException.java
  2b5205d8ec9c81f78620a6de4fde786c  libjava/javax/naming/directory/InvalidSearchControlsException.java
  1aed1c3d835c52f0e3387364a9b2e4fa  libjava/javax/naming/directory/InvalidSearchFilterException.java
! aa52ef9650dd3ca52bb57bed4896c5a2  libjava/javax/naming/directory/ModificationItem.java
  366a9b79d4f6dd4081c7be51ca1fb34e  libjava/javax/naming/directory/NoSuchAttributeException.java
  adb5566ca4a46a4bed8f349b61c146b0  libjava/javax/naming/directory/SchemaViolationException.java
! 1d132d4d49f276833c175978ea038ec1  libjava/javax/naming/directory/SearchControls.java
! 376cf4ac07ec737c92a9e921f45819f2  libjava/javax/naming/directory/SearchResult.java
! e8d9993c84f231c3e5b39462344b3156  libjava/javax/naming/event/EventContext.java
! 6d67208fefd941400db0da65e3bdd2ed  libjava/javax/naming/event/EventDirContext.java
! 5ad7e0e3f4466ea78606bc3b4ac07288  libjava/javax/naming/event/NamespaceChangeListener.java
! 8ae4fd997c5d3238c8a050da41dad7d9  libjava/javax/naming/event/NamingEvent.java
! 0b7d7c1b91c871dca13d1e0a92efeb40  libjava/javax/naming/event/NamingExceptionEvent.java
! 9bb0856df64ec18543962ae24ab87d8e  libjava/javax/naming/event/NamingListener.java
! 6450f5c41b104f2c6206a9c2d5e93f04  libjava/javax/naming/event/ObjectChangeListener.java
! efda6b7a760402d114e5624d01b680c2  libjava/javax/naming/ldap/Control.java
! 2e9569095fe95b6eb649e8f966d643da  libjava/javax/naming/ldap/ControlFactory.java
! 9d39f8626d2c1a28631c34c92b406b47  libjava/javax/naming/ldap/ExtendedRequest.java
! 040dd56fc5f9ad51e79b33fd350acf5d  libjava/javax/naming/ldap/ExtendedResponse.java
! 4bb226e036ea5c6db5dfa83c9c0b91ef  libjava/javax/naming/ldap/HasControls.java
! 67ed169fcdbe8b98d767d107f5e84958  libjava/javax/naming/ldap/InitialLdapContext.java
! 3fa2f894667786abe87ca417c486df56  libjava/javax/naming/ldap/LdapContext.java
! 418c97faaa08ef795d0172b0509640b3  libjava/javax/naming/ldap/LdapReferralException.java
! 1b0d34abb568b7a131d7eea1253c7c27  libjava/javax/naming/ldap/UnsolicitedNotification.java
! 2eb6c1550f6eed124c57ea9c650d089c  libjava/javax/naming/ldap/UnsolicitedNotificationEvent.java
! 05b8d12570081c7f16bc766c7ee5576a  libjava/javax/naming/ldap/UnsolicitedNotificationListener.java
! e9afb84d94306f8bbb65156e960e2735  libjava/javax/naming/spi/DirObjectFactory.java
! f2f9da7bb09b8f7d9c17b7f99aaa344d  libjava/javax/naming/spi/DirStateFactory.java
! dd5ccd7fbad8a34fdfe23ad57a9f1b53  libjava/javax/naming/spi/DirectoryManager.java
! 6238e7c0b765aa4abc2f47fa398e6d5b  libjava/javax/naming/spi/InitialContextFactory.java
! 4d95a3cbc36a4fdbace7cdcfc3c30392  libjava/javax/naming/spi/InitialContextFactoryBuilder.java
! 133e84dd68ad57f17149f953c6efe31d  libjava/javax/naming/spi/NamingManager.java
! 991892f669862f2f62049aeb0ebca89c  libjava/javax/naming/spi/ObjectFactory.java
! b5ee2787467650451693935bda394b6d  libjava/javax/naming/spi/ObjectFactoryBuilder.java
! 77e5e2aabaaa09d7f840d68755d8c7d3  libjava/javax/naming/spi/ResolveResult.java
! 7b0f7c11aab68969a91612777ecb8ca1  libjava/javax/naming/spi/Resolver.java
! 5d29ca6ffa5f837df15aaf9844bb8cfe  libjava/javax/naming/spi/StateFactory.java
! 07922c371444c607f571bc81d5f30493  libjava/javax/net/ServerSocketFactory.java
! d84fd688a95784c976b26fdd056ecd73  libjava/javax/net/SocketFactory.java
! 3a0901a55dfd65217c05adbd0ad0d03f  libjava/javax/net/VanillaServerSocketFactory.java
! ddab78167a2cccc879796fe14f2a1ce7  libjava/javax/net/VanillaSocketFactory.java
! dfc8b9e8a7a0c67d3ec5abbbc21098af  libjava/javax/net/ssl/HandshakeCompletedEvent.java
! b5e67b48a1692b7d066f516135f11ce8  libjava/javax/net/ssl/HandshakeCompletedListener.java
! 5592617fda07ac6eed5c415d51637ae5  libjava/javax/net/ssl/HostnameVerifier.java
! 06d096260ffe0a3ccb09b9a19fbc6810  libjava/javax/net/ssl/HttpsURLConnection.java
! 9d5d3c2cb34f0a3e97ea82be021ea26c  libjava/javax/net/ssl/KeyManager.java
! 975dedf994be1afd3802a929e646b04e  libjava/javax/net/ssl/KeyManagerFactory.java
! e62054a1cd981f0b4cc3e2201da40e96  libjava/javax/net/ssl/KeyManagerFactorySpi.java
! 33761b7b3db62d9ece869c28b7af0c25  libjava/javax/net/ssl/ManagerFactoryParameters.java
! 683722754f688db167abe59ae1e1117d  libjava/javax/net/ssl/SSLContext.java
! 72528d4bd737c5fa98e98a12763c2f31  libjava/javax/net/ssl/SSLContextSpi.java
! 7683693deeba9c4ab72cd79a37a1f8d1  libjava/javax/net/ssl/SSLException.java
! 1da99dc274187fc2243b4df7021ce10c  libjava/javax/net/ssl/SSLHandshakeException.java
! 392f3e899f4bf123326e320de6ba0008  libjava/javax/net/ssl/SSLKeyException.java
! eb9b495e65536a5106e7a5d749786b54  libjava/javax/net/ssl/SSLPeerUnverifiedException.java
! 9f85d46659195da7b92a5006436e69a3  libjava/javax/net/ssl/SSLPermission.java
! 76b8d7eb42fc3aa8b93b51e28479aec3  libjava/javax/net/ssl/SSLProtocolException.java
! 06fa216fc4ad3fc737fc613019b87f27  libjava/javax/net/ssl/SSLServerSocket.java
! 6da460c3cb5886563aa1847d327183d1  libjava/javax/net/ssl/SSLServerSocketFactory.java
! 7021e54498bc30831a0186a9acf801fc  libjava/javax/net/ssl/SSLSession.java
! 2138e45ef3d5183a6444fd75e0bd7518  libjava/javax/net/ssl/SSLSessionBindingEvent.java
! 5bc64b3caf4f3d38982548190d90593e  libjava/javax/net/ssl/SSLSessionBindingListener.java
! 2fa089907deda6aa2a8e73873f1681f9  libjava/javax/net/ssl/SSLSessionContext.java
! 28735f27f23fb8929c3539ff5ec87f61  libjava/javax/net/ssl/SSLSocket.java
! a39995ed87caae790884283de7fd332b  libjava/javax/net/ssl/SSLSocketFactory.java
! 2ed7ff8c4e32cf92c39a35936829fdea  libjava/javax/net/ssl/TrivialHostnameVerifier.java
! 9938f2c1726920f470f7515d2be5e1a1  libjava/javax/net/ssl/TrustManager.java
! 8fdb24d6df973297111bc96bcd807f66  libjava/javax/net/ssl/TrustManagerFactory.java
! 3bb2e7dcd35a0eb1c133c487c72a4b14  libjava/javax/net/ssl/TrustManagerFactorySpi.java
! 308b5295c66cda03db440ffabefbfce4  libjava/javax/net/ssl/X509KeyManager.java
! f02e3c18fd234d50d3bd047853890c70  libjava/javax/net/ssl/X509TrustManager.java
! efdc60cbfe5caff2bfc7a7617c65cb9f  libjava/javax/print/AttributeException.java
! e65a7f8ad05c3e57785c3168f890be0b  libjava/javax/print/CancelablePrintJob.java
! 96911e8ecab51fb5b1af5bdfc3c2e23f  libjava/javax/print/Doc.java
! 668f1049a315ecbbbd1a342964efc98d  libjava/javax/print/DocFlavor.java
! 02baa769f568a1294a32851091ed350d  libjava/javax/print/DocPrintJob.java
! 73895298aef5cf12b69f2b87bf5761ab  libjava/javax/print/FlavorException.java
! 7b4cd2ab7f394adc51b8cdfe2aaa68dc  libjava/javax/print/MultiDoc.java
! 15f43144a25f225ee54d53ad4756d799  libjava/javax/print/MultiDocPrintJob.java
! d411de2c9ad49cda4d3a55bc9f57e78d  libjava/javax/print/MultiDocPrintService.java
! ed712c99eb1a5f3025a5f64767295d40  libjava/javax/print/PrintException.java
! 7fbf8aac86588104c4477ee352c4f96f  libjava/javax/print/PrintService.java
! 9745eee9bba2994f6fc57decb8b693d7  libjava/javax/print/PrintServiceLookup.java
! ca21d1c66c01d653b0a86ae1bac0fa0a  libjava/javax/print/ServiceUIFactory.java
! ade5a69a4daf2589eda43cfcd0567711  libjava/javax/print/StreamPrintService.java
! 546c2d27332230f814e61713f7dc5b93  libjava/javax/print/URIException.java
  9a096edfeaeaba2baf4bcfbef07f83cf  libjava/javax/print/attribute/Attribute.java
  fb3b9abff9b029655e1b13cc6ce54a21  libjava/javax/print/attribute/AttributeSet.java
! 1358ea5fe31c1e587b34fd7d3df665bf  libjava/javax/print/attribute/AttributeSetUtilities.java
  ca31169c0903de09de23e8fdfa1b6583  libjava/javax/print/attribute/DateTimeSyntax.java
  09974ffe4ba4f3db779c1cece0fb8a39  libjava/javax/print/attribute/DocAttribute.java
  46b9f74f6ef3b85c1e8707e2cd55b4ce  libjava/javax/print/attribute/DocAttributeSet.java
! 80030b2c124ac5f88838ae142ca7e8aa  libjava/javax/print/attribute/EnumSyntax.java
! 07aab8815b69c6a86a5197700f8605ad  libjava/javax/print/attribute/HashAttributeSet.java
  6c95e4b7f620563cf63bcf961bd44c2f  libjava/javax/print/attribute/HashDocAttributeSet.java
  d999a24ee8a7935c05e3304905f8340d  libjava/javax/print/attribute/HashPrintJobAttributeSet.java
  eb71bd56ceafdfed2d47936035626b98  libjava/javax/print/attribute/HashPrintRequestAttributeSet.java
  c5b2cb214b4a863f44e715aa6f371ef8  libjava/javax/print/attribute/HashPrintServiceAttributeSet.java
! 6e10e62e3e94fe3fe1e777471025b076  libjava/javax/print/attribute/IntegerSyntax.java
  d7ef7095b5ea743e14157f36cadfe94e  libjava/javax/print/attribute/PrintJobAttribute.java
  63a48f64075386a9e6d54f874a039d67  libjava/javax/print/attribute/PrintJobAttributeSet.java
  0feb00a0feae5d33130648738d07f6aa  libjava/javax/print/attribute/PrintRequestAttribute.java
  919db97fb1589243e57fe5786cab863f  libjava/javax/print/attribute/PrintRequestAttributeSet.java
  478c19ee261c641dd088253314758160  libjava/javax/print/attribute/PrintServiceAttribute.java
  751074a5875eba470402effa1682be91  libjava/javax/print/attribute/PrintServiceAttributeSet.java
! 28c5881d3b96cac5844acea183b8ef0f  libjava/javax/print/attribute/ResolutionSyntax.java
! 1feff59e00a18f7d1fa74cb6d113bfb0  libjava/javax/print/attribute/SetOfIntegerSyntax.java
  6198d92476b4f23d118f27b7a4ab6922  libjava/javax/print/attribute/Size2DSyntax.java
  5c0297a14dfe5e52535019d2b197e5d4  libjava/javax/print/attribute/SupportedValuesAttribute.java
! 0fd21a13437ad3d4c029124e6c9b66bc  libjava/javax/print/attribute/TextSyntax.java
  5f4812fa6f983a499e5e87ec18f8f27b  libjava/javax/print/attribute/URISyntax.java
  cc4fd46a2707679f8af3084d653963bb  libjava/javax/print/attribute/UnmodifiableSetException.java
! 38edca99426cfc20c38ed43d7475a061  libjava/javax/print/attribute/standard/Chromaticity.java
! 7d13d1a29facadf994642b34f413b595  libjava/javax/print/attribute/standard/ColorSupported.java
! a0633c2e3084d6131f61d314783f4122  libjava/javax/print/attribute/standard/Compression.java
! 72cad77c0794ab332bc3bff1c1608791  libjava/javax/print/attribute/standard/Copies.java
! 3b08da2777c9c6f43938ef2c3c4c30d1  libjava/javax/print/attribute/standard/CopiesSupported.java
! 490f167484ab75b80a7c798978930741  libjava/javax/print/attribute/standard/DateTimeAtCompleted.java
! d39ce2ee8c0b91be3aa8a0f9828c3d25  libjava/javax/print/attribute/standard/DateTimeAtCreation.java
! 254669b9363081e4df3bed4d96f176f6  libjava/javax/print/attribute/standard/DateTimeAtProcessing.java
! 336f72186d353635dbd5d96847172a30  libjava/javax/print/attribute/standard/Destination.java
! 699f9a8c24249a0bceca369dcaf8e82e  libjava/javax/print/attribute/standard/DocumentName.java
! 81daae80c80b61b4525d1a0240461c70  libjava/javax/print/attribute/standard/Fidelity.java
! 2e894a0a4c7e8b3d2cf0725d3a9c76b6  libjava/javax/print/attribute/standard/Finishings.java
! dafdd2777399401c2f6c65f32e0b000a  libjava/javax/print/attribute/standard/JobHoldUntil.java
! 33ba7eb8a58d15d4e9cf12648da77e10  libjava/javax/print/attribute/standard/JobImpressions.java
! 7f2bc0368c5c4d01947aabec08a532fd  libjava/javax/print/attribute/standard/JobImpressionsCompleted.java
! 6ec8f02e6df83a07b314690560426921  libjava/javax/print/attribute/standard/JobImpressionsSupported.java
! 1ff25d42338268f4b444661aed28424d  libjava/javax/print/attribute/standard/JobKOctets.java
! 3c724775179ae7317693622dcca5dea4  libjava/javax/print/attribute/standard/JobKOctetsProcessed.java
! cb77b2c768784647e30e4106840ea3ad  libjava/javax/print/attribute/standard/JobKOctetsSupported.java
! 6088ce37a60faf7219e6a751d7c6f703  libjava/javax/print/attribute/standard/JobMediaSheets.java
! 657493cdb0ac8a3f98f53a9993658308  libjava/javax/print/attribute/standard/JobMediaSheetsCompleted.java
! 6b7bcba3e4ec301c5e5976c4ce7f522f  libjava/javax/print/attribute/standard/JobMediaSheetsSupported.java
! cf479c8d5d750a957990def5e95c7ff7  libjava/javax/print/attribute/standard/JobMessageFromOperator.java
! 89f317e61961e927ca77d03b368276a2  libjava/javax/print/attribute/standard/JobName.java
! 1d4cbf82dc986a8a5ebca74b7070b0af  libjava/javax/print/attribute/standard/JobOriginatingUserName.java
! 5a8e4d9494c3432315e2ec0c1c493501  libjava/javax/print/attribute/standard/JobPriority.java
! 6589bbb9a22f06d7bc09cf89e21eff99  libjava/javax/print/attribute/standard/JobPrioritySupported.java
! ec5dafe3195e35f4442d0b03ae3e8bc1  libjava/javax/print/attribute/standard/JobSheets.java
! d620e287dc7641f6494b462bad48cbe0  libjava/javax/print/attribute/standard/JobState.java
! 84b2d39c45c89d74813123c90710b089  libjava/javax/print/attribute/standard/JobStateReason.java
! 82c78d0c865d55d35057b5af5955524e  libjava/javax/print/attribute/standard/JobStateReasons.java
! 19ed714b6e9e182c0cba6833aea3ea8d  libjava/javax/print/attribute/standard/Media.java
! 8fb6740dc9c2ebe1e29e433b273471d1  libjava/javax/print/attribute/standard/MediaPrintableArea.java
! c5938f7c13db6ca4abae423e4f575628  libjava/javax/print/attribute/standard/MediaSize.java
! 74d7ab01a6405d1f234f264f9c5277f8  libjava/javax/print/attribute/standard/MediaSizeName.java
! d2edf789e24ebf9ba280b69c66ba9774  libjava/javax/print/attribute/standard/MultipleDocumentHandling.java
! 48408c4af343a226b713dd7469fef17b  libjava/javax/print/attribute/standard/NumberOfDocuments.java
! 1b3f0e832e983224e81f8896e6c844c4  libjava/javax/print/attribute/standard/NumberOfInterveningJobs.java
! c67253982177acfb11e2ba5d43392421  libjava/javax/print/attribute/standard/NumberUp.java
! b6a4dd5a66c0558acb7572181543e831  libjava/javax/print/attribute/standard/NumberUpSupported.java
! f7e90cc7cf3a2a6567839e2d72127a5e  libjava/javax/print/attribute/standard/OrientationRequested.java
! dcfada33a632f7577e9b733110c270ed  libjava/javax/print/attribute/standard/OutputDeviceAssigned.java
! 6afba122ef062bba94af29dfaca97e36  libjava/javax/print/attribute/standard/PDLOverrideSupported.java
! 2474fc14f6890d7090e4ddf2063e19fa  libjava/javax/print/attribute/standard/PageRanges.java
! 3e5f856d1457af92d6756bafc23bc213  libjava/javax/print/attribute/standard/PagesPerMinute.java
! 5ad44a9b999c5cc2098585c30ac1ea0d  libjava/javax/print/attribute/standard/PagesPerMinuteColor.java
! b2e30c79d8a1304ef26c36450ac0e818  libjava/javax/print/attribute/standard/PresentationDirection.java
! e2ec5969ac0f74d28a6dbccd459fbffb  libjava/javax/print/attribute/standard/PrintQuality.java
! 5d07823c88c32d74ee7da61de8d56c78  libjava/javax/print/attribute/standard/PrinterInfo.java
! 9211aabab4edbe2b34834d46a91835cb  libjava/javax/print/attribute/standard/PrinterIsAcceptingJobs.java
! ad4ea0a86e09e191fdf5c4c7277dcac6  libjava/javax/print/attribute/standard/PrinterLocation.java
! e7edae07ad929e6f1aabe6db1091c290  libjava/javax/print/attribute/standard/PrinterMakeAndModel.java
! 1b0e7df3a85f1278a6bb8d2200956f91  libjava/javax/print/attribute/standard/PrinterMessageFromOperator.java
! 303cbcd381587ec522c9029f722b3606  libjava/javax/print/attribute/standard/PrinterMoreInfo.java
! cf56d047ef8c25b7ecbc1daf723c6fd5  libjava/javax/print/attribute/standard/PrinterMoreInfoManufacturer.java
! 09eeefd015c1c7cc4345c83707b281f8  libjava/javax/print/attribute/standard/PrinterName.java
! 4856b0ae90ce42ec3dac2e18cdc562d1  libjava/javax/print/attribute/standard/PrinterResolution.java
! a80afa50dfd2aca42624ae5a4207a3b3  libjava/javax/print/attribute/standard/PrinterState.java
! dd9fe3f9495eca80a008c95496142fe3  libjava/javax/print/attribute/standard/PrinterStateReason.java
! d42eb34347f8e4d8b157a37165503b9f  libjava/javax/print/attribute/standard/PrinterStateReasons.java
! 5efd8e69aefb0496fdfffec8466b5bb0  libjava/javax/print/attribute/standard/PrinterURI.java
! 94b38955e2d710e2981a99fbc4b15f86  libjava/javax/print/attribute/standard/QueuedJobCount.java
! a418ff1d5cc1515a0f2f6252b4858b5f  libjava/javax/print/attribute/standard/ReferenceUriSchemesSupported.java
! 2eabddedfe923629518b254ec2920d02  libjava/javax/print/attribute/standard/RequestingUserName.java
! dfd4a09f42ab5716749591650999bd20  libjava/javax/print/attribute/standard/Severity.java
! 473da8e72e38249469af0d3866e06bb2  libjava/javax/print/attribute/standard/SheetCollate.java
! 43dee9683880c037f47213d5129a08f6  libjava/javax/print/attribute/standard/Sides.java
! 19f201d75117ab931f734a28795da9d0  libjava/javax/print/event/PrintEvent.java
! d74f93f5c1dc01ee94bc72cff947ef2c  libjava/javax/print/event/PrintJobAdapter.java
! 22fefb56498cecb3e53b88f97bab6a5d  libjava/javax/print/event/PrintJobAttributeEvent.java
! 96030e8e0d727f343d9d426b1013b2d1  libjava/javax/print/event/PrintJobAttributeListener.java
! 4c4f1716086653dbd5a96948990b281c  libjava/javax/print/event/PrintJobEvent.java
! 06cfee7d4d3f3b58458dd19631342c24  libjava/javax/print/event/PrintJobListener.java
! 72aaa15a44101229653613efe6258511  libjava/javax/print/event/PrintServiceAttributeEvent.java
! 887981c75ac47a67ee49f1240f7d51ef  libjava/javax/print/event/PrintServiceAttributeListener.java
! 2e27f1e19bb7c0d3aa5b9f1418580dea  libjava/javax/security/auth/AuthPermission.java
! f5790f5d5d4813123c706b72a0e46aa2  libjava/javax/security/auth/DestroyFailedException.java
! 801df8349a77983db82f3bf0c6209337  libjava/javax/security/auth/Destroyable.java
! 24092b3e12a80a29a783798157c3a8ba  libjava/javax/security/auth/Policy.java
! 0e1edb1c0e7b146a35cb883223df5539  libjava/javax/security/auth/PrivateCredentialPermission.java
! dd60505dc921e84a3e7c430ea1c370ef  libjava/javax/security/auth/RefreshFailedException.java
! 48326a439c27fbb5a75172587aa34d16  libjava/javax/security/auth/Refreshable.java
! a0cb656efd6e87b51595260fb9a5baa0  libjava/javax/security/auth/Subject.java
! df6538cfd822fe3e989a7dc305388504  libjava/javax/security/auth/SubjectDomainCombiner.java
! 6a3ae38a548e9e140864b2125d0d9bc4  libjava/javax/security/auth/callback/Callback.java
! 0a7e136d52f6c22f1b5579474389868f  libjava/javax/security/auth/callback/CallbackHandler.java
! f1237fe9b0ce42e8b01f41b118a3cb46  libjava/javax/security/auth/callback/ChoiceCallback.java
! c2b110f914b667adf6eedf9d0e566d9e  libjava/javax/security/auth/callback/ConfirmationCallback.java
! 8e00a4b3d9d6cf643d874359578f6f70  libjava/javax/security/auth/callback/LanguageCallback.java
! 5ca09b059a3e46e808f0b0274d303dc7  libjava/javax/security/auth/callback/NameCallback.java
! dd37511b0c9eaf066f099f907731881f  libjava/javax/security/auth/callback/PasswordCallback.java
! ce1fbbf842286fb425586f93893cc821  libjava/javax/security/auth/callback/TextInputCallback.java
! eab11dfc769a681cc225c67e61984855  libjava/javax/security/auth/callback/TextOutputCallback.java
! cc57fe46b5d6e738819bba812e59be47  libjava/javax/security/auth/callback/UnsupportedCallbackException.java
! 3b70697417842ffb46bf84e7bd42a442  libjava/javax/security/auth/login/AccountExpiredException.java
! b2862369614e78e7fdf18ff3231e032d  libjava/javax/security/auth/login/AppConfigurationEntry.java
! 3c5906513574ab5f4ffb4b602e45d7f2  libjava/javax/security/auth/login/Configuration.java
! fd5ad27c9d41bdf2d66465c6e623cf28  libjava/javax/security/auth/login/CredentialExpiredException.java
! cadf197e345018d6c60f22e5a60608bf  libjava/javax/security/auth/login/FailedLoginException.java
! 50a51f077fbedd94bd5d568181b2515b  libjava/javax/security/auth/login/LoginContext.java
! 33c1ea483412da9df389398cab9685d3  libjava/javax/security/auth/login/LoginException.java
! 2b5fd5f0022666087b9c1e63ba67fd43  libjava/javax/security/auth/login/NullConfiguration.java
! 472b38b154d75eeaefb2d8466d50e1e7  libjava/javax/security/auth/spi/LoginModule.java
! ee30d99f81a89f75734e93e4c3c9193f  libjava/javax/security/auth/x500/X500Principal.java
! da8f18c27a8775425e396d5c8d2a0b28  libjava/javax/security/auth/x500/X500PrivateCredential.java
! 2ccbc73c8dd63464a55c6bb6723edacf  libjava/javax/security/cert/Certificate.java
! 8e2c5d00f45e68fca4cc2d8cc4eefe50  libjava/javax/security/cert/CertificateEncodingException.java
! dfd7fbb6e08b6633a01eaebdc6be2da4  libjava/javax/security/cert/CertificateException.java
! c36b1feaeeee346d1f0b029a844057b2  libjava/javax/security/cert/CertificateExpiredException.java
! 2a747fece0225275fbde66459835b9a2  libjava/javax/security/cert/CertificateNotYetValidException.java
! 74bd749ae1da2e0daf6e964275df7326  libjava/javax/security/cert/CertificateParsingException.java
! 9735359c9216009694df2d140a89d2e8  libjava/javax/security/cert/X509CertBridge.java
! 7c164f2dccd53d8941989f6cac0df002  libjava/javax/security/cert/X509Certificate.java
! 1d047195712930b904252a7b08c7ae8f  libjava/javax/security/sasl/AuthenticationException.java
! 8be07ad07766e9908775c87554835669  libjava/javax/security/sasl/AuthorizeCallback.java
! 62e93d02626495825a5e64271ddbc93e  libjava/javax/security/sasl/RealmCallback.java
! 34381cc6173aa2c62f5e6acbaacaf676  libjava/javax/security/sasl/RealmChoiceCallback.java
! 2c010a64b35efa00833e349e57f0f674  libjava/javax/security/sasl/Sasl.java
! c2adadd7ad89dd90879c1baaf0938410  libjava/javax/security/sasl/SaslClient.java
! d49d99b39f2615aaa6ab4c8b2cc312a4  libjava/javax/security/sasl/SaslClientFactory.java
! 9bedac56b9ea86efbb7effeff22ee59f  libjava/javax/security/sasl/SaslException.java
! bf1bde8648416172a4b8b203517a9cef  libjava/javax/security/sasl/SaslServer.java
! c4c8caa98fa66c816973e93949ac59ec  libjava/javax/security/sasl/SaslServerFactory.java
  61b167147ddfc0403d1e1e8653558e39  libjava/javax/sql/ConnectionEvent.java
  df7bc0bc3461ea2f5e50d0300cc15032  libjava/javax/sql/ConnectionEventListener.java
  63f36786ea5ca806740cf24f18c83348  libjava/javax/sql/ConnectionPoolDataSource.java
*************** f28f7fa7cf4dbfecf17e657c69974a21  libjav
*** 18600,18719 ****
  3cbb25648cd3e1976c4c3b942b4d8b6a  libjava/javax/sql/RowSetMetaData.java
  799624cea1dd3a2ebc190213ad9d5b82  libjava/javax/sql/RowSetReader.java
  fc53ea30bf46ce5095488721f36fca5e  libjava/javax/sql/RowSetWriter.java
! 0e273e03c5b1eb8d571f652b577ee0e3  libjava/javax/sql/XAConnection.java
  f4fe2f87c470c063db302846b5e08358  libjava/javax/sql/XADataSource.java
! ab20ce3452a1dd03f66afdad71c1688e  libjava/javax/swing/AbstractAction.java
! 0695a3ff95b86b545663c91bc20c5d55  libjava/javax/swing/AbstractButton.java
! 959bb02efdf4cfeb209bced843f7ec6f  libjava/javax/swing/AbstractCellEditor.java
! a866f4c229fecc03fb26f2b68e1ccd1e  libjava/javax/swing/AbstractListModel.java
! b793f0cad9944b2bac977e241352d2da  libjava/javax/swing/AbstractSet.java
  e1a05a4007a1cd42c29375d10d90b5ef  libjava/javax/swing/Action.java
! 47b6f91cabdce8929c701ab2ad3b2c4b  libjava/javax/swing/ActionMap.java
! cec64c970b5d90cb5e8ba3ad52e43172  libjava/javax/swing/BorderFactory.java
! 83ed771e9e72817facdb007cc71b91fd  libjava/javax/swing/BoundedRangeModel.java
! e33f911280b0d25754d7fa3e58fa6edb  libjava/javax/swing/Box.java
! cef29b6314949e6e484a63c883b56d8c  libjava/javax/swing/BoxLayout.java
! 8b17514c9abc5e861c1a2e305fe4c578  libjava/javax/swing/ButtonGroup.java
! f84b3fea914bacff117eaaf49c0c8342  libjava/javax/swing/ButtonModel.java
! d0b8a1f0d30c386c0528f71707e3aee2  libjava/javax/swing/CellEditor.java
! 6d53abe26c9bb29ea5994bf8103025a6  libjava/javax/swing/CellRendererPane.java
! d08c84f17e32434ed62dbd2bb3c4bd02  libjava/javax/swing/ComboBoxEditor.java
! 250266706c4ad659e30e8a26aba6bf33  libjava/javax/swing/ComboBoxModel.java
! 3ac0106428b8ba8f9ef3521e5a4c2f38  libjava/javax/swing/ComponentInputMap.java
! ed6e400d7c565e861ddd940a2484cabc  libjava/javax/swing/DebugGraphics.java
! be53dfe133cf9cdde3e809338e451e37  libjava/javax/swing/DefaultBoundedRangeModel.java
! d1594a2a7ce8e805e733b2a5090b0faf  libjava/javax/swing/DefaultButtonModel.java
! 623ded627dcd0f59739ba768a72f1e13  libjava/javax/swing/DefaultCellEditor.java
! 1e7d885198ead6de87ef462c0f8794e0  libjava/javax/swing/DefaultCellRenderer.java
! c4c38a6921f7a4c9cc95b6ae2904161d  libjava/javax/swing/DefaultComboBoxModel.java
! a78f0e51a3cc338bbfd7bd9f4102b586  libjava/javax/swing/DefaultDesktopManager.java
  8ab269a0abaec7ff45decaeb25599048  libjava/javax/swing/DefaultFocusManager.java
! 046b88a16b39985d2fe0e7dfbaf41c6e  libjava/javax/swing/DefaultListCellRenderer.java
! 3a0fbebc7b7a2fdea08de0577da16b4f  libjava/javax/swing/DefaultListModel.java
! adffa724c076d53e8d42745251ab1ce5  libjava/javax/swing/DefaultListSelectionModel.java
! 1ca52273484112099344a77b5d3d474f  libjava/javax/swing/DefaultSingleSelectionModel.java
! d9f9ed39a73faa2e472e6cc83cb78395  libjava/javax/swing/DesktopManager.java
! 5e4bf3cb686fe128b44762648962dac9  libjava/javax/swing/FocusManager.java
! f1e9f33052cfa490cb0d810620a7d389  libjava/javax/swing/GrayFilter.java
  82ab8a3f37da34b6b7492982aa873c7e  libjava/javax/swing/Icon.java
! 281011fe5350efe48d7271ca8aa07c9f  libjava/javax/swing/ImageIcon.java
! d113c9d8d9ccb11cbf8efd9ce69f22ee  libjava/javax/swing/InputMap.java
! dba6f4a82a1d35549e5763f4eb783045  libjava/javax/swing/InputVerifier.java
! ef4db7f4ffd37c9a67305f703aa648de  libjava/javax/swing/JApplet.java
! 3c7402fe0659c3801e1d15846c1799fd  libjava/javax/swing/JButton.java
! 3c01a74fa0c18546e6402de240d31131  libjava/javax/swing/JCheckBox.java
! 1988bd5462aef3a91c79d79f85b57010  libjava/javax/swing/JCheckBoxMenuItem.java
! d58959837ecc23a5586b28cd3b0dbd75  libjava/javax/swing/JColorChooser.java
! a54c8b275a10948d97753604c71327a8  libjava/javax/swing/JComboBox.java
! 715489399310fdcd56bed3e375aaa419  libjava/javax/swing/JComponent.java
! 603db9616f10b55ebedfce98fc22e7e4  libjava/javax/swing/JDesktopPane.java
! bb88861085266d3d84ff4f1d7f53b4ab  libjava/javax/swing/JDialog.java
! 98ff6bec674d92dcfb89c0448d707fe5  libjava/javax/swing/JEditorPane.java
! bd37847cebd716eabcf86fbada199c49  libjava/javax/swing/JFileChooser.java
! e6473a1c91e480f09d39bb1223faeb19  libjava/javax/swing/JFormattedTextField.java
! 229b8f9eacd12d069338415b5f86b3d8  libjava/javax/swing/JFrame.java
! f2e1fd93750462c546d08a19b4e1318d  libjava/javax/swing/JInternalFrame.java
! 400bbe2964a4e62bd88f416c2b35e9ab  libjava/javax/swing/JLabel.java
! ed6b7a966a1839c39c4ce87b612b3d0c  libjava/javax/swing/JLayeredPane.java
! 8c521f7686736f1ddd83131b57b92d5d  libjava/javax/swing/JList.java
! b993f48139bddb474f279d187f9601e5  libjava/javax/swing/JMenu.java
! e440b38adccd6b04c29889dba9f8c46a  libjava/javax/swing/JMenuBar.java
! 69c6aab5a43c7969a27748c80591c77d  libjava/javax/swing/JMenuItem.java
! 2733091611d6f75a4a95c637c3027dd4  libjava/javax/swing/JOptionPane.java
! 0565f20c16666a6a32a7e2079e79d390  libjava/javax/swing/JPanel.java
! e728812014dec1b1338b2cf03254070c  libjava/javax/swing/JPasswordField.java
! 375648fa96bc6e8a665fd4084ff79ffd  libjava/javax/swing/JPopupMenu.java
! 8315e94e295e01a5728e7bbd1078e793  libjava/javax/swing/JProgressBar.java
! b9782496c5aad96608c2c7ff2b8fdce1  libjava/javax/swing/JRadioButton.java
! 657f30d3afa3fba8c59f3bbde1f86c95  libjava/javax/swing/JRadioButtonMenuItem.java
! 51b77f46e3929063c286d302dbc28365  libjava/javax/swing/JRootPane.java
! 3b24b2736aa4d3a6d2a684d1894921f9  libjava/javax/swing/JScrollBar.java
! 7d0fef0d4f3a2a97891db8e6db11ddf8  libjava/javax/swing/JScrollPane.java
! a9332434c1ac60d96ffdef1130e4f514  libjava/javax/swing/JSeparator.java
! 008fad560327e4710b90f2517b5fd1c7  libjava/javax/swing/JSlider.java
! 43e38f40ecd6736c3d3e2b0ec31b89a2  libjava/javax/swing/JSplitPane.java
! 8d3f73856f88634d919eeb660de994bf  libjava/javax/swing/JTabbedPane.java
! d8ea4cdfb3cae64a47f62e3e41369b2c  libjava/javax/swing/JTable.java
! 0d7d36ca2fe6ce26c98168826ae9e588  libjava/javax/swing/JTextField.java
! 3489cdfc1831de51ef0df4f98ca241a1  libjava/javax/swing/JTextPane.java
! 5656540e8b04381014b994fd7393bf84  libjava/javax/swing/JToggleButton.java
! da1d09f2be3aca88f18f5b13fb8ce5dd  libjava/javax/swing/JToolBar.java
! 8ee22d5924143e3e1da7c81dbb986375  libjava/javax/swing/JToolTip.java
! 0806f9cfa84f1c28c11f5f00c35fbddd  libjava/javax/swing/JTree.java
! 35ebfdd9db29cd3aea6e46e0b0092a31  libjava/javax/swing/JViewport.java
! 2580d6122423e377cc00e7946e04c1f4  libjava/javax/swing/JWindow.java
! 4492f64f619d172a9b795c36cbbb7f48  libjava/javax/swing/KeyStroke.java
  ed64fa3a615f7cc6771588b8a1bc3389  libjava/javax/swing/ListCellRenderer.java
! bf83c4b5a173496790c1f564a5c5dde9  libjava/javax/swing/ListModel.java
! 1d1c17b1c3af9601fd2d71f58c3ca45a  libjava/javax/swing/ListSelectionModel.java
! 663d24d051b0ac2487bc1d3d62503a1e  libjava/javax/swing/LookAndFeel.java
  a9fe90ec6781999e51873e9cfd26e836  libjava/javax/swing/MenuElement.java
! 9483feb029dcf39976d18993c97725a7  libjava/javax/swing/MenuSelectionManager.java
! 562ffccaad8a6f306d1e5eebbf91421b  libjava/javax/swing/MutableComboBoxModel.java
! b425edcad68259a29f9ba5a6c62bb150  libjava/javax/swing/OverlayLayout.java
! a3477d35418c70453c7ba06378640ab0  libjava/javax/swing/Popup.java
  87142c9e4ef2a500223f42073a5364b4  libjava/javax/swing/PopupFactory.java
  b89192ae7214105a84a4c4fd8d8d5371  libjava/javax/swing/ProgressMonitor.java
! 4c50aeea1c8e6210f7b74879a331a99d  libjava/javax/swing/ProgressMonitorInputStream.java
  74e69103f8c99751e85ef4da3874f86b  libjava/javax/swing/Renderer.java
! 39a195f71c15b9a03b277e28020c9752  libjava/javax/swing/RepaintManager.java
! 7aa289bd7fd0bf19818aeb6db13d00b8  libjava/javax/swing/RootPaneContainer.java
! 452d1d45fe34a72dd89ad6a26b4dd42f  libjava/javax/swing/ScrollPaneConstants.java
! 7a334c658bb0dfd76fe55140fee70b42  libjava/javax/swing/ScrollPaneLayout.java
  6ebb921c315d7eb7b504c2aff11e9de2  libjava/javax/swing/Scrollable.java
  aa45d10513d89726d44b671b398f9f85  libjava/javax/swing/SingleSelectionModel.java
! 45da581781538d11b02b34c6902e2a12  libjava/javax/swing/SizeRequirements.java
  8037e3a233ae33d34c2a0cee971281f0  libjava/javax/swing/SizeSequence.java
! 1dd2738c474530e0b167e7a55caca5e4  libjava/javax/swing/SpinnerModel.java
! c0f1c8a4933902f4ff557aeb294f6463  libjava/javax/swing/SwingConstants.java
! 5736d2bd147d37ec2b2aca10a4cededf  libjava/javax/swing/SwingUtilities.java
! b293f31cd96077862a1f7ec621997fa4  libjava/javax/swing/Timer.java
! f73bbebb7fe33eee670801f804157a66  libjava/javax/swing/ToggleButtonModel.java
! f114992b404bef9102fb31fb3dbcb135  libjava/javax/swing/ToolTipManager.java
! c74820fe48a9c779c58c658ae08840a3  libjava/javax/swing/UIDefaults.java
! a1e0050e2968b9b59aad860e371f3ef3  libjava/javax/swing/UIManager.java
  82aac3a3dde49b1017f1aae2dfe2f2a3  libjava/javax/swing/UnsupportedLookAndFeelException.java
! b25802cbc63a00f18c88ec1a77049710  libjava/javax/swing/ViewportLayout.java
  51c9664ab1c12ea919bd66580dcb9f02  libjava/javax/swing/WindowConstants.java
  872945d1ed201e7392b2ffc58a2fef40  libjava/javax/swing/border/AbstractBorder.java
  5a4019f0713b62f108a0221e754ce172  libjava/javax/swing/border/BevelBorder.java
--- 22278,22406 ----
  3cbb25648cd3e1976c4c3b942b4d8b6a  libjava/javax/sql/RowSetMetaData.java
  799624cea1dd3a2ebc190213ad9d5b82  libjava/javax/sql/RowSetReader.java
  fc53ea30bf46ce5095488721f36fca5e  libjava/javax/sql/RowSetWriter.java
! c4962d2079e1b19c76bca64c55690eda  libjava/javax/sql/XAConnection.java
  f4fe2f87c470c063db302846b5e08358  libjava/javax/sql/XADataSource.java
! 73364db686866c0b0bbd445be7ca70a0  libjava/javax/swing/AbstractAction.java
! cb7eadd045911024208d82990c190e7e  libjava/javax/swing/AbstractButton.java
! 6442171ffcd9fcc6a7330bb1c5f5a972  libjava/javax/swing/AbstractCellEditor.java
! 9c457be0f68b4dccc897e55390f4076a  libjava/javax/swing/AbstractListModel.java
! 692ad2dbb56495bf7883c98f82247b67  libjava/javax/swing/AbstractSpinnerModel.java
  e1a05a4007a1cd42c29375d10d90b5ef  libjava/javax/swing/Action.java
! 8a048f15dadd14514594e3a3e531d8f0  libjava/javax/swing/ActionMap.java
! f6d0ad7aabd3c424033c3ff543938d48  libjava/javax/swing/BorderFactory.java
! 470426b5ec03820230c4f19d2763ec8d  libjava/javax/swing/BoundedRangeModel.java
! 34aab0ed95b403b3bad63aed456d8b72  libjava/javax/swing/Box.java
! e00e7670772c05ddf8603399e85785b0  libjava/javax/swing/BoxLayout.java
! 9eaf89d627f067ef34574a3ae767710b  libjava/javax/swing/ButtonGroup.java
! 4e3640d22777d6441de2ab54078b47c4  libjava/javax/swing/ButtonModel.java
! f3fff3955ff5df8918dd0468e13b75ce  libjava/javax/swing/CellEditor.java
! b00b7257c49e7e0e65ae595531d47b30  libjava/javax/swing/CellRendererPane.java
! 9310f44fef6edd784b0389b404490c43  libjava/javax/swing/ComboBoxEditor.java
! c82191a57a450ef87499a9f282e7c703  libjava/javax/swing/ComboBoxModel.java
! d812f8f768fea1b23a1834f190b351b3  libjava/javax/swing/ComponentInputMap.java
! 62b7186339a98f8029b4228e5f6ecdd7  libjava/javax/swing/DebugGraphics.java
! 34ab364aeab2a4f3a13e7e2b9ab361b4  libjava/javax/swing/DefaultBoundedRangeModel.java
! 69c8607f17632f8193ffe664017f3b25  libjava/javax/swing/DefaultButtonModel.java
! 2547184a9ce3ca67c9fbe61a74caeab2  libjava/javax/swing/DefaultCellEditor.java
! 7aeabd53fffe2a6d1c9631cef18ffa74  libjava/javax/swing/DefaultComboBoxModel.java
! c4dd66a91abad364b7d713bbe719dfab  libjava/javax/swing/DefaultDesktopManager.java
  8ab269a0abaec7ff45decaeb25599048  libjava/javax/swing/DefaultFocusManager.java
! ff746d73ee3e8a7610fc8ab1c8178e3e  libjava/javax/swing/DefaultListCellRenderer.java
! ae5bae81e3e57dbe20c11159c6efeea7  libjava/javax/swing/DefaultListModel.java
! 26073ec0eb79c22f2119e513a8ee0434  libjava/javax/swing/DefaultListSelectionModel.java
! 49cdbf26e95a242a5de95f804516dea6  libjava/javax/swing/DefaultSingleSelectionModel.java
! 54b4e531385c501a5bdcad38352f8b6a  libjava/javax/swing/DesktopManager.java
! d0ae7c08dcb1a1ea98c4592792a46fc2  libjava/javax/swing/FocusManager.java
! c023f53c07e53121a081771583d7e2b0  libjava/javax/swing/GrayFilter.java
  82ab8a3f37da34b6b7492982aa873c7e  libjava/javax/swing/Icon.java
! 132a74b45b83079c3f2a90a600445822  libjava/javax/swing/ImageIcon.java
! afd8e71cebdf80cbc53ecf9883a73efa  libjava/javax/swing/InputMap.java
! db32e604d9c7c4368bd78577227b2497  libjava/javax/swing/InputVerifier.java
! b7c96a70bc7ad2af88d30900e5c8b5b8  libjava/javax/swing/InternalFrameFocusTraversalPolicy.java
! e40b4ebffc0c8428e5bd7a7408342419  libjava/javax/swing/JApplet.java
! 8041bd6bcd59f96b891d52e8bb33d6df  libjava/javax/swing/JButton.java
! 406fc2a11f6cace9d29330b0d6f40d57  libjava/javax/swing/JCheckBox.java
! f2c873a749dca4b544fd44ac96a24823  libjava/javax/swing/JCheckBoxMenuItem.java
! 42cfcc4581deb8b5d625ccade36addbf  libjava/javax/swing/JColorChooser.java
! 57cd476a3c3878f7e1846b602020c494  libjava/javax/swing/JComboBox.java
! 342cbcb52e53bb35d5777e0dfdfd890b  libjava/javax/swing/JComponent.java
! 01fbb3643bd45841993eb9b844722c3a  libjava/javax/swing/JDesktopPane.java
! fbffd01ef008dc034b09e127bf322f23  libjava/javax/swing/JDialog.java
! 7ea7b418cb5457efe51f7db129da0484  libjava/javax/swing/JEditorPane.java
! 7fe49a82f8f07eb153ee92d4dca46133  libjava/javax/swing/JFileChooser.java
! 31be34f2b21a239f897abceffbc53eac  libjava/javax/swing/JFormattedTextField.java
! 5a243eb8caf67cdc74019092a6935a79  libjava/javax/swing/JFrame.java
! 58abf0d5f525ddf3ae6cac75c9ffd56d  libjava/javax/swing/JInternalFrame.java
! 9146f042cb0526b92bf002815ff7440e  libjava/javax/swing/JLabel.java
! 9e880cf6de11e5a0d1f4095883534d40  libjava/javax/swing/JLayeredPane.java
! b17ede91ec1605f735481e906ebf75bf  libjava/javax/swing/JList.java
! 02e7f19b8be0b52b50f2e7813554d514  libjava/javax/swing/JMenu.java
! 7ac8cd0280950fb89aaf5623e6b3a042  libjava/javax/swing/JMenuBar.java
! 56cdae50d63b5f2ec0aeabd3ae17a660  libjava/javax/swing/JMenuItem.java
! 1b54933ea2f76c9d2501add2d500b6f5  libjava/javax/swing/JOptionPane.java
! e64af5051e7af48b25d6ad2b2c88f04e  libjava/javax/swing/JPanel.java
! 8ca99600b179393709f128a2e2dfd8bb  libjava/javax/swing/JPasswordField.java
! c836121dbb3ce19b2dbac2d281991516  libjava/javax/swing/JPopupMenu.java
! d99cc3d25f89bcfb916975aaf0fbe2b6  libjava/javax/swing/JProgressBar.java
! d48114d66678b15793dc8a0fcdf90e95  libjava/javax/swing/JRadioButton.java
! 4ba32c24b4c08c5cf0841aa0c9893f82  libjava/javax/swing/JRadioButtonMenuItem.java
! 736afb204686a3ef175909c264462e69  libjava/javax/swing/JRootPane.java
! 7b80015a9db733557004b87332ef6b4d  libjava/javax/swing/JScrollBar.java
! f07165e88873ccb3e741d88ad806536d  libjava/javax/swing/JScrollPane.java
! 7a85af00f1bbcb5f8a5d09751eab26e1  libjava/javax/swing/JSeparator.java
! cc46efbc1b367b5e9728a130f091ba72  libjava/javax/swing/JSlider.java
! 303d37936ee50dfd3c27972a05aabc2d  libjava/javax/swing/JSpinner.java
! 75df352f5ce95df704877487049c4e37  libjava/javax/swing/JSplitPane.java
! f55ff64800273cf72abaae75fdd10699  libjava/javax/swing/JTabbedPane.java
! 55d0c547f1f8a2056d20fb6020887208  libjava/javax/swing/JTable.java
! 0f976f4429a5f6c2c35cfd05ec022f85  libjava/javax/swing/JTextArea.java
! 50e16e359d78838f5facd82e3a1c99fc  libjava/javax/swing/JTextField.java
! af7de5511fb72e0273d03e0f0645dd66  libjava/javax/swing/JTextPane.java
! e769f1487960980684f6d51f158a141d  libjava/javax/swing/JToggleButton.java
! 44bf66975b53496833330408d23f3c42  libjava/javax/swing/JToolBar.java
! f5367c3605450c8b864a8e9b8687564e  libjava/javax/swing/JToolTip.java
! 80de2c04337813b1c817a267920d3d2e  libjava/javax/swing/JTree.java
! de99a1dd00b49fbfe81acd2aa79472e0  libjava/javax/swing/JViewport.java
! 7cedb58c87037cad76eed53df26616b0  libjava/javax/swing/JWindow.java
! bf63247b364119bcb9301225656fdbb8  libjava/javax/swing/KeyStroke.java
! 6dfa5f38f430f6153ed368d351962259  libjava/javax/swing/LayoutFocusTraversalPolicy.java
  ed64fa3a615f7cc6771588b8a1bc3389  libjava/javax/swing/ListCellRenderer.java
! 78725c8415e3e003ee5876abe60c2acf  libjava/javax/swing/ListModel.java
! 5988bc1cc00e6ebbe070c9fa35c32afe  libjava/javax/swing/ListSelectionModel.java
! ff7f9696ea2dccc7fde22377cf949c13  libjava/javax/swing/LookAndFeel.java
  a9fe90ec6781999e51873e9cfd26e836  libjava/javax/swing/MenuElement.java
! d01c8215bebb8708bd50bcd4bc2b472c  libjava/javax/swing/MenuSelectionManager.java
! ebd8425211e9ea6c5b2075d46a14be32  libjava/javax/swing/MutableComboBoxModel.java
! a41e8d72158de1e60dd6a2dbcb0ba101  libjava/javax/swing/OverlayLayout.java
! 15cc80c5d475222809a1e6a2a6abb5c3  libjava/javax/swing/Popup.java
  87142c9e4ef2a500223f42073a5364b4  libjava/javax/swing/PopupFactory.java
  b89192ae7214105a84a4c4fd8d8d5371  libjava/javax/swing/ProgressMonitor.java
! 171cfb76c80c556f1a71cf7bc1306b2a  libjava/javax/swing/ProgressMonitorInputStream.java
  74e69103f8c99751e85ef4da3874f86b  libjava/javax/swing/Renderer.java
! ca29484b57f589d0c79fbb66aad9c332  libjava/javax/swing/RepaintManager.java
! 13623a80aa54f518f9e91b8b72a77f46  libjava/javax/swing/RootPaneContainer.java
! e2c5eda13104bdefef79fc8b83f6755c  libjava/javax/swing/ScrollPaneConstants.java
! 16affdfa89e5c85616f32007e52aae26  libjava/javax/swing/ScrollPaneLayout.java
  6ebb921c315d7eb7b504c2aff11e9de2  libjava/javax/swing/Scrollable.java
  aa45d10513d89726d44b671b398f9f85  libjava/javax/swing/SingleSelectionModel.java
! 058ba22e18494215025cb67437308d19  libjava/javax/swing/SizeRequirements.java
  8037e3a233ae33d34c2a0cee971281f0  libjava/javax/swing/SizeSequence.java
! a72228c2a44b4f08884c3c8b4317a74f  libjava/javax/swing/SortingFocusTraversalPolicy.java
! 73643232578fbea2908a6e4b4dda1490  libjava/javax/swing/SpinnerDateModel.java
! 0967038d23ee1f73e77f1619abb7d433  libjava/javax/swing/SpinnerListModel.java
! 18827bba82fdf9066e70cfb424082a6e  libjava/javax/swing/SpinnerModel.java
! 83b68fe06d896dbd6e65bc6382665794  libjava/javax/swing/SpinnerNumberModel.java
! 8c8fa552a2a6494a45e6b95ff037cea9  libjava/javax/swing/Spring.java
! c47df55272ccb01ebb56e6792f76e33d  libjava/javax/swing/SpringLayout.java
! 4461b2758468007093e9561eb2b5160f  libjava/javax/swing/SwingConstants.java
! ee1225754e074a48ff1d16887ddb4ba5  libjava/javax/swing/SwingUtilities.java
! 2513a88aad9dc420ca67fffd6d3a58a4  libjava/javax/swing/Timer.java
! 374c9498e747e8c9c0294cd3a6687b4e  libjava/javax/swing/ToolTipManager.java
! cbec459cc29ff09a2baa570bbd272a48  libjava/javax/swing/TransferHandler.java
! b6435857839d01ba86374d1a6ce9035a  libjava/javax/swing/UIDefaults.java
! 3c0d75cae90546f8486bc779c8bddb93  libjava/javax/swing/UIManager.java
  82aac3a3dde49b1017f1aae2dfe2f2a3  libjava/javax/swing/UnsupportedLookAndFeelException.java
! 9eab50c3dec3e05e4d4e70bc679ca912  libjava/javax/swing/ViewportLayout.java
  51c9664ab1c12ea919bd66580dcb9f02  libjava/javax/swing/WindowConstants.java
  872945d1ed201e7392b2ffc58a2fef40  libjava/javax/swing/border/AbstractBorder.java
  5a4019f0713b62f108a0221e754ce172  libjava/javax/swing/border/BevelBorder.java
*************** b25802cbc63a00f18c88ec1a77049710  libjav
*** 18722,18730 ****
  a85daeb4f74057751e849aac48d6fde8  libjava/javax/swing/border/EmptyBorder.java
  266f82341af2d22a934eb635bc1a1455  libjava/javax/swing/border/EtchedBorder.java
  5d8e0cd53f1732eed3519efbfcfd414f  libjava/javax/swing/border/LineBorder.java
! e9285e60a91c086ca3c25bb2b5184025  libjava/javax/swing/border/MatteBorder.java
  2e352d21eb27090e4f2886ad0fb15fa0  libjava/javax/swing/border/SoftBevelBorder.java
! 6daf9a5d155efbf56e0343893f6f883d  libjava/javax/swing/border/TitledBorder.java
  03bd64f4395100b9cc54c91c87e0647a  libjava/javax/swing/border/doc-files/BevelBorder-1.png
  23a253cbadc6937a236ea1f72dbcb86a  libjava/javax/swing/border/doc-files/BevelBorder-2.png
  aa959fe6dbe96c957fa8f43e6511931d  libjava/javax/swing/border/doc-files/BevelBorder-3.png
--- 22409,22417 ----
  a85daeb4f74057751e849aac48d6fde8  libjava/javax/swing/border/EmptyBorder.java
  266f82341af2d22a934eb635bc1a1455  libjava/javax/swing/border/EtchedBorder.java
  5d8e0cd53f1732eed3519efbfcfd414f  libjava/javax/swing/border/LineBorder.java
! 36330160f55e86cbf3e22aeaa71a7ad6  libjava/javax/swing/border/MatteBorder.java
  2e352d21eb27090e4f2886ad0fb15fa0  libjava/javax/swing/border/SoftBevelBorder.java
! ff7f2846630a3ac39fedaef1b4c10cef  libjava/javax/swing/border/TitledBorder.java
  03bd64f4395100b9cc54c91c87e0647a  libjava/javax/swing/border/doc-files/BevelBorder-1.png
  23a253cbadc6937a236ea1f72dbcb86a  libjava/javax/swing/border/doc-files/BevelBorder-2.png
  aa959fe6dbe96c957fa8f43e6511931d  libjava/javax/swing/border/doc-files/BevelBorder-3.png
*************** aff328c3a6b5f79ceef239f4b65ad46b  libjav
*** 18741,18820 ****
  c3846400745d2b820c1159a860cb08a2  libjava/javax/swing/border/doc-files/SoftBevelBorder-1.png
  9cbfca2d41cb0b639cb5c756db18347a  libjava/javax/swing/border/doc-files/SoftBevelBorder-2.png
  aeea6a0afe84e6c187dbd647451b9790  libjava/javax/swing/border/doc-files/SoftBevelBorder-3.png
! f0772169bb936811d07da90f3cf93aeb  libjava/javax/swing/colorchooser/AbstractColorChooserPanel.java
! 3d9636204ad42ddba45ecb1c2993a609  libjava/javax/swing/colorchooser/ColorChooserComponentFactory.java
! cddda89d2c424656279479e3192561ba  libjava/javax/swing/colorchooser/ColorSelectionModel.java
! f9cd595148740977854ad91a4d05e0d5  libjava/javax/swing/colorchooser/DefaultColorSelectionModel.java
! 19664bb57efac069c751d47dc870de1f  libjava/javax/swing/event/AncestorEvent.java
  234a2ea3d321b41e458cce33d9fb0e30  libjava/javax/swing/event/AncestorListener.java
  47d06f5c4f98d213599fd78d45630bd3  libjava/javax/swing/event/CaretEvent.java
  8a963d9c3cadb72b0f843d4faee96b3e  libjava/javax/swing/event/CaretListener.java
  3fd622e7c60f9e642474cade48a49680  libjava/javax/swing/event/CellEditorListener.java
  5ef4dc4b32e80d8edc94dc697bc4458f  libjava/javax/swing/event/ChangeEvent.java
  ea2043a8f331214b6e3ed0016cf4a284  libjava/javax/swing/event/ChangeListener.java
! 2e3b8d09ee7fbff4b47671b203acddcc  libjava/javax/swing/event/DocumentEvent.java
  e6421e397de7dffa34f44ccef268ff57  libjava/javax/swing/event/DocumentListener.java
! 930385dea5dfad17e9f96677634a3927  libjava/javax/swing/event/EventListenerList.java
! a77e00ca39cab1bec52a60da7126618f  libjava/javax/swing/event/HyperlinkEvent.java
  dd33b0544e8a3bc4549cb6593cf5b1f7  libjava/javax/swing/event/HyperlinkListener.java
  0d6f9c5ca5f7097164d9756eaf6acb14  libjava/javax/swing/event/InternalFrameAdapter.java
! a5ff6473b344560f6666a02dffc8e098  libjava/javax/swing/event/InternalFrameEvent.java
  dadf1c6cb99b70a6af4aa3017e7ba9b2  libjava/javax/swing/event/InternalFrameListener.java
  aab375001ff6bcd8d87c9e19456c3d9b  libjava/javax/swing/event/ListDataEvent.java
  4a0322a6e12781359145ab716fa109cc  libjava/javax/swing/event/ListDataListener.java
  c620e0fd4125123aa27dd096f6245431  libjava/javax/swing/event/ListSelectionEvent.java
  0081fbed54d0d38dffa0e3ee4cc6f3db  libjava/javax/swing/event/ListSelectionListener.java
! b7e3799452204743eb9e94fe0f8ab934  libjava/javax/swing/event/MenuDragMouseEvent.java
  44b4b89b2d203b8edc07384d23cfa6a0  libjava/javax/swing/event/MenuDragMouseListener.java
  12c0a6c22cdf13ae3a5a330e4e0fa4ec  libjava/javax/swing/event/MenuEvent.java
! 3453b4bdb992edff3c984843780faff8  libjava/javax/swing/event/MenuKeyEvent.java
  51549d836f4a6ab3825a8fbd0c914d3b  libjava/javax/swing/event/MenuKeyListener.java
  13a4bf7d6e49ad20b939caa60b97c7b8  libjava/javax/swing/event/MenuListener.java
! 061d4b4ed113756ff8ce1d3a6e7218ce  libjava/javax/swing/event/MouseInputAdapter.java
  601714c9377c049c23f304efc9a945fd  libjava/javax/swing/event/MouseInputListener.java
  9148e3f2394718402b15245fcb24ddd4  libjava/javax/swing/event/PopupMenuEvent.java
  4e2e038f6628dd6f77290366731c7ae4  libjava/javax/swing/event/PopupMenuListener.java
! aec26f341cce1bc40b7a4ac07885f7aa  libjava/javax/swing/event/SwingPropertyChangeSupport.java
! 0c67b43f3f2ade38fef3d8202448af6f  libjava/javax/swing/event/TableColumnModelEvent.java
  b6d85a2657845a493924ab26f578b602  libjava/javax/swing/event/TableColumnModelListener.java
! cd2162c75e67cc3b04ff457478ac1121  libjava/javax/swing/event/TableModelEvent.java
  1d546ea8975d281123d3e74d69dd556f  libjava/javax/swing/event/TableModelListener.java
! 3b81b4ce9969ab69898a9264a9740a7e  libjava/javax/swing/event/TreeExpansionEvent.java
  c341d496ea24d7d1675b722ef47121a3  libjava/javax/swing/event/TreeExpansionListener.java
! d5724a4e124db6873e98a8d685e122c6  libjava/javax/swing/event/TreeModelEvent.java
  7528d8d9e633da7517e1ad42ee3f46fe  libjava/javax/swing/event/TreeModelListener.java
! bf5ad8006cd7b2635fd46c93f7770b3c  libjava/javax/swing/event/TreeSelectionEvent.java
  c4251dfe98c61eb42bbfdffaab806369  libjava/javax/swing/event/TreeSelectionListener.java
! c134c55d3f8e3ca868140bbb933a502b  libjava/javax/swing/event/TreeWillExpandListener.java
! ca5af3d0d5e83500b8accf8dbfe5147f  libjava/javax/swing/event/UndoableEditEvent.java
! 99a0cccafe405923ce57160cac1ab430  libjava/javax/swing/event/UndoableEditListener.java
  c5a348e6f6e6f16d3d311efe06bc0ef8  libjava/javax/swing/filechooser/FileFilter.java
! aecd742667710293df9e1431b234329e  libjava/javax/swing/filechooser/FileSystemView.java
! 949f2d3c80c22ced7bea05c7069c21de  libjava/javax/swing/filechooser/FileView.java
  500d33c86a4e23dd48ddfbdda44fa44d  libjava/javax/swing/plaf/ActionMapUIResource.java
! 2cffd802c259a1e38044badd4786ca5f  libjava/javax/swing/plaf/BorderUIResource.java
  f3fc571d67c8636c43d2d16ec049a173  libjava/javax/swing/plaf/ButtonUI.java
  0fb366128defd4bd7c28e59b6e303f62  libjava/javax/swing/plaf/ColorChooserUI.java
  0d5f2cdee1a6b7c10a9854bf629582b4  libjava/javax/swing/plaf/ColorUIResource.java
  e339c28ae9a2473ece93d9de69ede20e  libjava/javax/swing/plaf/ComboBoxUI.java
  51e52516e580170c7030aa3015319524  libjava/javax/swing/plaf/ComponentInputMapUIResource.java
! adeaf87040af795079f4d7f7d60bdad2  libjava/javax/swing/plaf/ComponentUI.java
  c3e6aafa068f66a06d6ce378d553b4d8  libjava/javax/swing/plaf/DesktopIconUI.java
  886f29ef4f6104093067c3c8b81bd0ca  libjava/javax/swing/plaf/DesktopPaneUI.java
  68ca7e962946782626746e1708ffec60  libjava/javax/swing/plaf/DimensionUIResource.java
! 43055082ac2af49f6de7af5fe1b71459  libjava/javax/swing/plaf/FileChooserUI.java
  cec0db86606fac90b8022d27dffb6298  libjava/javax/swing/plaf/FontUIResource.java
! 92303ea558625f2b7c1dc67f324c039e  libjava/javax/swing/plaf/IconUIResource.java
  795d674bf95c5620c55412345cf4441d  libjava/javax/swing/plaf/InputMapUIResource.java
  3ee8200b0e3972678fdd78f5316c7526  libjava/javax/swing/plaf/InsetsUIResource.java
  3cf8e9a8cdc93aeeef7b69a66df5620f  libjava/javax/swing/plaf/InternalFrameUI.java
  5cb5d6839770698248f74cd49deaade7  libjava/javax/swing/plaf/LabelUI.java
! 4765dc9944dc5f6a0670d8370b5cf093  libjava/javax/swing/plaf/ListUI.java
  c0ba2f16aa4a58a7bd0e79662c1e974f  libjava/javax/swing/plaf/MenuBarUI.java
  f8b8aef6ed6610fa2cad8b36b9bf6ccd  libjava/javax/swing/plaf/MenuItemUI.java
  f162dfb616b13e80d243c01a4c2568eb  libjava/javax/swing/plaf/OptionPaneUI.java
  62b4753a00d21dd62a55b44daab5ceb7  libjava/javax/swing/plaf/PanelUI.java
! 881c7c2c036c30445d24b8206af5c9ce  libjava/javax/swing/plaf/PopupMenuUI.java
  e958237aa421145fcd59d121b9c5fb05  libjava/javax/swing/plaf/ProgressBarUI.java
  005e416e4923a98f602ae190b5c1be11  libjava/javax/swing/plaf/RootPaneUI.java
  945d683e9c0cdbc1347daff4d529982d  libjava/javax/swing/plaf/ScrollBarUI.java
--- 22428,22511 ----
  c3846400745d2b820c1159a860cb08a2  libjava/javax/swing/border/doc-files/SoftBevelBorder-1.png
  9cbfca2d41cb0b639cb5c756db18347a  libjava/javax/swing/border/doc-files/SoftBevelBorder-2.png
  aeea6a0afe84e6c187dbd647451b9790  libjava/javax/swing/border/doc-files/SoftBevelBorder-3.png
! 3419edae51a7a10cdf91b8cae8362a94  libjava/javax/swing/colorchooser/AbstractColorChooserPanel.java
! 0aebbecd533ac7ef908f291d16dfe95d  libjava/javax/swing/colorchooser/ColorChooserComponentFactory.java
! fda76ec9bf8a891a430c9a610a66d8fa  libjava/javax/swing/colorchooser/ColorSelectionModel.java
! 4fa76e4b35582b2c6b315e74a4d42278  libjava/javax/swing/colorchooser/DefaultColorSelectionModel.java
! c2bab9a2390ca6f97d97997bf82a68ef  libjava/javax/swing/colorchooser/DefaultHSBChooserPanel.java
! 2c41fc1cdd1d994bd5ca19d3d3959b99  libjava/javax/swing/colorchooser/DefaultPreviewPanel.java
! f6e2913f6c6843af82e0af5227a97b81  libjava/javax/swing/colorchooser/DefaultRGBChooserPanel.java
! d0e23aacdca03ea4d4dfb32d97b01a8b  libjava/javax/swing/colorchooser/DefaultSwatchChooserPanel.java
! 2e189b99d4fa7775cc9f9ef7b8a0664b  libjava/javax/swing/event/AncestorEvent.java
  234a2ea3d321b41e458cce33d9fb0e30  libjava/javax/swing/event/AncestorListener.java
  47d06f5c4f98d213599fd78d45630bd3  libjava/javax/swing/event/CaretEvent.java
  8a963d9c3cadb72b0f843d4faee96b3e  libjava/javax/swing/event/CaretListener.java
  3fd622e7c60f9e642474cade48a49680  libjava/javax/swing/event/CellEditorListener.java
  5ef4dc4b32e80d8edc94dc697bc4458f  libjava/javax/swing/event/ChangeEvent.java
  ea2043a8f331214b6e3ed0016cf4a284  libjava/javax/swing/event/ChangeListener.java
! 1f81ad5197ef33bc96acf8ec06514282  libjava/javax/swing/event/DocumentEvent.java
  e6421e397de7dffa34f44ccef268ff57  libjava/javax/swing/event/DocumentListener.java
! c4ef6bfca46844b619289d00ba2cd069  libjava/javax/swing/event/EventListenerList.java
! 152a89e03b3cd9463df270933e477ad9  libjava/javax/swing/event/HyperlinkEvent.java
  dd33b0544e8a3bc4549cb6593cf5b1f7  libjava/javax/swing/event/HyperlinkListener.java
  0d6f9c5ca5f7097164d9756eaf6acb14  libjava/javax/swing/event/InternalFrameAdapter.java
! aad8f6da7c93de602cf789ad05492b5a  libjava/javax/swing/event/InternalFrameEvent.java
  dadf1c6cb99b70a6af4aa3017e7ba9b2  libjava/javax/swing/event/InternalFrameListener.java
  aab375001ff6bcd8d87c9e19456c3d9b  libjava/javax/swing/event/ListDataEvent.java
  4a0322a6e12781359145ab716fa109cc  libjava/javax/swing/event/ListDataListener.java
  c620e0fd4125123aa27dd096f6245431  libjava/javax/swing/event/ListSelectionEvent.java
  0081fbed54d0d38dffa0e3ee4cc6f3db  libjava/javax/swing/event/ListSelectionListener.java
! 0fdc976622f87c5c493d259a58631489  libjava/javax/swing/event/MenuDragMouseEvent.java
  44b4b89b2d203b8edc07384d23cfa6a0  libjava/javax/swing/event/MenuDragMouseListener.java
  12c0a6c22cdf13ae3a5a330e4e0fa4ec  libjava/javax/swing/event/MenuEvent.java
! 246510d39d4b0c618a84737e3011b199  libjava/javax/swing/event/MenuKeyEvent.java
  51549d836f4a6ab3825a8fbd0c914d3b  libjava/javax/swing/event/MenuKeyListener.java
  13a4bf7d6e49ad20b939caa60b97c7b8  libjava/javax/swing/event/MenuListener.java
! 4151a3409bd76558de4d16271805d8ec  libjava/javax/swing/event/MouseInputAdapter.java
  601714c9377c049c23f304efc9a945fd  libjava/javax/swing/event/MouseInputListener.java
  9148e3f2394718402b15245fcb24ddd4  libjava/javax/swing/event/PopupMenuEvent.java
  4e2e038f6628dd6f77290366731c7ae4  libjava/javax/swing/event/PopupMenuListener.java
! b19234090a4bbe314cf97fe49e29fdbf  libjava/javax/swing/event/SwingPropertyChangeSupport.java
! d6c6bb9f533057596828f8d459b18215  libjava/javax/swing/event/TableColumnModelEvent.java
  b6d85a2657845a493924ab26f578b602  libjava/javax/swing/event/TableColumnModelListener.java
! 3b48dc88786bedf415df296d25c8990b  libjava/javax/swing/event/TableModelEvent.java
  1d546ea8975d281123d3e74d69dd556f  libjava/javax/swing/event/TableModelListener.java
! 58d89033d38b91ebd87c1326522d581d  libjava/javax/swing/event/TreeExpansionEvent.java
  c341d496ea24d7d1675b722ef47121a3  libjava/javax/swing/event/TreeExpansionListener.java
! d1dec338bfc33e80ad696fc368450e0b  libjava/javax/swing/event/TreeModelEvent.java
  7528d8d9e633da7517e1ad42ee3f46fe  libjava/javax/swing/event/TreeModelListener.java
! 5265677d419c2ec5fa8adf48ec6a4cad  libjava/javax/swing/event/TreeSelectionEvent.java
  c4251dfe98c61eb42bbfdffaab806369  libjava/javax/swing/event/TreeSelectionListener.java
! dd671b37d3ed32a39992b2796a8c3e19  libjava/javax/swing/event/TreeWillExpandListener.java
! e8967d29f48026c19eaaaf8c1e87f9c2  libjava/javax/swing/event/UndoableEditEvent.java
! 38476e1d965c8bb78f064c09ea0d26f7  libjava/javax/swing/event/UndoableEditListener.java
  c5a348e6f6e6f16d3d311efe06bc0ef8  libjava/javax/swing/filechooser/FileFilter.java
! db756f7c6dc3d9b886d6c97bf6f5fe7e  libjava/javax/swing/filechooser/FileSystemView.java
! 5dc389b7936066c7b99b50e53e1125bb  libjava/javax/swing/filechooser/FileView.java
  500d33c86a4e23dd48ddfbdda44fa44d  libjava/javax/swing/plaf/ActionMapUIResource.java
! b0cbd456a0a0386d429ef0842dc4f3d7  libjava/javax/swing/plaf/BorderUIResource.java
  f3fc571d67c8636c43d2d16ec049a173  libjava/javax/swing/plaf/ButtonUI.java
  0fb366128defd4bd7c28e59b6e303f62  libjava/javax/swing/plaf/ColorChooserUI.java
  0d5f2cdee1a6b7c10a9854bf629582b4  libjava/javax/swing/plaf/ColorUIResource.java
  e339c28ae9a2473ece93d9de69ede20e  libjava/javax/swing/plaf/ComboBoxUI.java
  51e52516e580170c7030aa3015319524  libjava/javax/swing/plaf/ComponentInputMapUIResource.java
! 3e3b88727c9eab51669d6e882f9e50f6  libjava/javax/swing/plaf/ComponentUI.java
  c3e6aafa068f66a06d6ce378d553b4d8  libjava/javax/swing/plaf/DesktopIconUI.java
  886f29ef4f6104093067c3c8b81bd0ca  libjava/javax/swing/plaf/DesktopPaneUI.java
  68ca7e962946782626746e1708ffec60  libjava/javax/swing/plaf/DimensionUIResource.java
! 6c07fb52892d2a2246b2d2a370ebae09  libjava/javax/swing/plaf/FileChooserUI.java
  cec0db86606fac90b8022d27dffb6298  libjava/javax/swing/plaf/FontUIResource.java
! 3c8d0be55be2efe270af2956420cd668  libjava/javax/swing/plaf/IconUIResource.java
  795d674bf95c5620c55412345cf4441d  libjava/javax/swing/plaf/InputMapUIResource.java
  3ee8200b0e3972678fdd78f5316c7526  libjava/javax/swing/plaf/InsetsUIResource.java
  3cf8e9a8cdc93aeeef7b69a66df5620f  libjava/javax/swing/plaf/InternalFrameUI.java
  5cb5d6839770698248f74cd49deaade7  libjava/javax/swing/plaf/LabelUI.java
! f62c41135456d3ebe32a9f5c291ab47e  libjava/javax/swing/plaf/ListUI.java
  c0ba2f16aa4a58a7bd0e79662c1e974f  libjava/javax/swing/plaf/MenuBarUI.java
  f8b8aef6ed6610fa2cad8b36b9bf6ccd  libjava/javax/swing/plaf/MenuItemUI.java
  f162dfb616b13e80d243c01a4c2568eb  libjava/javax/swing/plaf/OptionPaneUI.java
  62b4753a00d21dd62a55b44daab5ceb7  libjava/javax/swing/plaf/PanelUI.java
! 988a629d92bf1c1bcf026c866daa64fe  libjava/javax/swing/plaf/PopupMenuUI.java
  e958237aa421145fcd59d121b9c5fb05  libjava/javax/swing/plaf/ProgressBarUI.java
  005e416e4923a98f602ae190b5c1be11  libjava/javax/swing/plaf/RootPaneUI.java
  945d683e9c0cdbc1347daff4d529982d  libjava/javax/swing/plaf/ScrollBarUI.java
*************** e0d4eab7a75b7916d36e5e247af4db77  libjav
*** 18822,18857 ****
  5dbb96c1f5e9c90830288b93ccd607eb  libjava/javax/swing/plaf/SeparatorUI.java
  a7d8f845c5adc5fdfc9d472c6f0be1bb  libjava/javax/swing/plaf/SliderUI.java
  50f1ff2dbe95fd26829c26d0214eeb06  libjava/javax/swing/plaf/SpinnerUI.java
! 457f4586a525b85f4956151836da3544  libjava/javax/swing/plaf/SplitPaneUI.java
! a90efa8c2d01f0e241bccb73f1761cf8  libjava/javax/swing/plaf/TabbedPaneUI.java
  d869b22c737c095bb90f499c2a7f888c  libjava/javax/swing/plaf/TableHeaderUI.java
  19c8d34b94bd6fb986bcdea5d7815424  libjava/javax/swing/plaf/TableUI.java
! 80089c6a4b10601d607764ebcd959a79  libjava/javax/swing/plaf/TextUI.java
  c772aaf445d247237d455b1873b88aec  libjava/javax/swing/plaf/ToolBarUI.java
  a0935307e7f7c5414951508a25853809  libjava/javax/swing/plaf/ToolTipUI.java
! c729cd10ed2581485c9658aad139dfb5  libjava/javax/swing/plaf/TreeUI.java
  b52528bac5a6bc16c67019f440015c22  libjava/javax/swing/plaf/UIResource.java
  fbc40b497a3df654da95d74b61597483  libjava/javax/swing/plaf/ViewportUI.java
! bfa1a6c3e8f3f032f3835196d597a939  libjava/javax/swing/plaf/basic/BasicBorders.java
! 3a09d2dc05ac9909d76ff076a1c67f10  libjava/javax/swing/plaf/basic/BasicButtonUI.java
! 5359257b0b9432d5911dac21ee70c7ef  libjava/javax/swing/plaf/basic/BasicCheckBoxUI.java
! 06a49027b771f348db8e585ce3814084  libjava/javax/swing/plaf/basic/BasicDefaults.java
! 94a0bca665f145300106cbc295d53e08  libjava/javax/swing/plaf/basic/BasicGraphicsUtils.java
! 6abe491f6ff953f55dd02433ca80b7ff  libjava/javax/swing/plaf/basic/BasicIconFactory.java
! eb78dd2408f6805f03d10d6657a96864  libjava/javax/swing/plaf/basic/BasicLabelUI.java
! eff4e2a704764a4cc218fdb1f22bf6a3  libjava/javax/swing/plaf/basic/BasicListUI.java
! 287f206d760482cab7aad1d70413eee6  libjava/javax/swing/plaf/basic/BasicLookAndFeel.java
! b0a2ffb3ab2be7f7c9c94853c1e8c412  libjava/javax/swing/plaf/basic/BasicOptionPaneUI.java
! 804e335b654b5a78eb1f957ff66c197a  libjava/javax/swing/plaf/basic/BasicPanelUI.java
! 98b7e15341033dfa87989aad13e81a6b  libjava/javax/swing/plaf/basic/BasicRadioButtonUI.java
! 160fa55f6dd30f2fe72f5ec16a41e723  libjava/javax/swing/plaf/basic/BasicScrollPaneUI.java
! 0a12ae9987fd0f74e218eadae2e7b139  libjava/javax/swing/plaf/basic/BasicSplitPaneDivider.java
! b5afba5d0e168d4ad3d1db4610cf767c  libjava/javax/swing/plaf/basic/BasicSplitPaneUI.java
! 846bc2841754b000fa6fec548727509b  libjava/javax/swing/plaf/basic/BasicTabbedPaneUI.java
! 8da1fb175ad522657804530e7464d8c7  libjava/javax/swing/plaf/basic/BasicTextUI.java
! 7fb64ddc99c9b48d75855ff95059a33f  libjava/javax/swing/plaf/basic/BasicToggleButtonUI.java
! ecf03181160c302a207b45f9f76ae2ab  libjava/javax/swing/plaf/basic/BasicTreeUI.java
! fe746574ad59df19b93f6b687a49572a  libjava/javax/swing/plaf/basic/BasicViewportUI.java
  6e5f46fdbaad38cc99f3a6c2e07e1423  libjava/javax/swing/plaf/basic/doc-files/BasicBorders-1.png
  8b9897c83a6140ec5b347ef9dbf20dac  libjava/javax/swing/plaf/basic/doc-files/BasicBorders-2.png
  74349d8e54e033d730f3b1cfc24d0bd1  libjava/javax/swing/plaf/basic/doc-files/BasicBorders.ButtonBorder-1.png
--- 22513,22583 ----
  5dbb96c1f5e9c90830288b93ccd607eb  libjava/javax/swing/plaf/SeparatorUI.java
  a7d8f845c5adc5fdfc9d472c6f0be1bb  libjava/javax/swing/plaf/SliderUI.java
  50f1ff2dbe95fd26829c26d0214eeb06  libjava/javax/swing/plaf/SpinnerUI.java
! fb3d019bfa29b92d1383eac4012b525b  libjava/javax/swing/plaf/SplitPaneUI.java
! 0525dceaa76e9fa3dd35dc4be7c2ef07  libjava/javax/swing/plaf/TabbedPaneUI.java
  d869b22c737c095bb90f499c2a7f888c  libjava/javax/swing/plaf/TableHeaderUI.java
  19c8d34b94bd6fb986bcdea5d7815424  libjava/javax/swing/plaf/TableUI.java
! 071ea3bd58fafae5cf1d82db7df6cc3f  libjava/javax/swing/plaf/TextUI.java
  c772aaf445d247237d455b1873b88aec  libjava/javax/swing/plaf/ToolBarUI.java
  a0935307e7f7c5414951508a25853809  libjava/javax/swing/plaf/ToolTipUI.java
! 813ed13c4f64e14967f520edd5dd34ea  libjava/javax/swing/plaf/TreeUI.java
  b52528bac5a6bc16c67019f440015c22  libjava/javax/swing/plaf/UIResource.java
  fbc40b497a3df654da95d74b61597483  libjava/javax/swing/plaf/ViewportUI.java
! f93088c8eae0f367aa3bdb2cb0f62ecf  libjava/javax/swing/plaf/basic/BasicArrowButton.java
! efd84fa2af15578e8d6ba238d6d5c771  libjava/javax/swing/plaf/basic/BasicBorders.java
! 32b2b5b446322b90e7213d99d53126ab  libjava/javax/swing/plaf/basic/BasicButtonListener.java
! cf4aa0f8f0e5541f28890ab6bf27f3df  libjava/javax/swing/plaf/basic/BasicButtonUI.java
! dc818ec954e97949145ccab47d23202b  libjava/javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java
! fbe40f0551ba4eebde29a0a6a9c01264  libjava/javax/swing/plaf/basic/BasicCheckBoxUI.java
! 831fd8ebfe27aa7d4d561dc09907f57a  libjava/javax/swing/plaf/basic/BasicColorChooserUI.java
! e00b2d0f1b701279673e20fd6a3da780  libjava/javax/swing/plaf/basic/BasicComboBoxEditor.java
! 6f6a2918f29d37b488ab32a6f8fbb2ec  libjava/javax/swing/plaf/basic/BasicComboBoxRenderer.java
! 6fe31ca3de60833a24798a95ca81c311  libjava/javax/swing/plaf/basic/BasicComboBoxUI.java
! c54b99137c814553b1021b89076868a3  libjava/javax/swing/plaf/basic/BasicComboPopup.java
! 4f2adbbd7d007c3daad007082754f27d  libjava/javax/swing/plaf/basic/BasicDesktopIconUI.java
! 7776c67741356624662fc852a0c62c36  libjava/javax/swing/plaf/basic/BasicDesktopPaneUI.java
! 12be4968ecb4f6b08f1da7716ea11b91  libjava/javax/swing/plaf/basic/BasicEditorPaneUI.java
! c951ae03212cf540e275cb3221f366b3  libjava/javax/swing/plaf/basic/BasicFormattedTextFieldUI.java
! 34372eca2a2ed1c12294013044def5c8  libjava/javax/swing/plaf/basic/BasicGraphicsUtils.java
! f6c7fc42786ec2d7497cbe9ea66939f7  libjava/javax/swing/plaf/basic/BasicIconFactory.java
! 3b4980c4a2ace7b157aa1e77c200e5b1  libjava/javax/swing/plaf/basic/BasicInternalFrameTitlePane.java
! ef93723f579b5332be7c4f99eeef2d8c  libjava/javax/swing/plaf/basic/BasicInternalFrameUI.java
! 8c5580a5ef957d68608b2fb47a0d6ec0  libjava/javax/swing/plaf/basic/BasicLabelUI.java
! e7e56300785055a082ce3f1e5fd004c2  libjava/javax/swing/plaf/basic/BasicListUI.java
! 9df8d76189357fdefc20936e10497592  libjava/javax/swing/plaf/basic/BasicLookAndFeel.java
! d63e5a73aa59c58a5b520f6c462140d9  libjava/javax/swing/plaf/basic/BasicMenuBarUI.java
! 5146e65cf63fde48c10d7e0958ab6d22  libjava/javax/swing/plaf/basic/BasicMenuItemUI.java
! f3cbcb7ab90920d1d7b66b3aa1f82ff4  libjava/javax/swing/plaf/basic/BasicMenuUI.java
! 39ff0439f7623c56c98f59180641bcea  libjava/javax/swing/plaf/basic/BasicOptionPaneUI.java
! 80d99ddaf657da3d0e5bf448ff8ad46f  libjava/javax/swing/plaf/basic/BasicPanelUI.java
! 7a5654074406bf4896fe18516b45bc20  libjava/javax/swing/plaf/basic/BasicPasswordFieldUI.java
! 0b566a58d9266469e74539b5c194c85d  libjava/javax/swing/plaf/basic/BasicPopupMenuSeparatorUI.java
! 4e99027b6da25e8119087deffb3de251  libjava/javax/swing/plaf/basic/BasicPopupMenuUI.java
! 66387a782290608f77ba110d2cf35e5f  libjava/javax/swing/plaf/basic/BasicProgressBarUI.java
! d1eacefd2f0fb20ea62ec6aa0fbaece0  libjava/javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java
! 8d6f6343435be17f61fbf3efd0a0b83f  libjava/javax/swing/plaf/basic/BasicRadioButtonUI.java
! 448b23336725f5a39bb6723cfd7e01f2  libjava/javax/swing/plaf/basic/BasicRootPaneUI.java
! 71002a8e0a9ffb028a1977af0cf647f9  libjava/javax/swing/plaf/basic/BasicScrollBarUI.java
! 82877f65412aad0615d987d843d032fe  libjava/javax/swing/plaf/basic/BasicScrollPaneUI.java
! 12d1eca1b8f5593771403d2ad8c0b5ef  libjava/javax/swing/plaf/basic/BasicSeparatorUI.java
! 184f299a478aa0876dcae7b7e728ef47  libjava/javax/swing/plaf/basic/BasicSliderUI.java
! f6b1b7c4aa5b6f7e8f9a05167f2903a0  libjava/javax/swing/plaf/basic/BasicSpinnerUI.java
! 64cbeceb19b5761b4671cd1ecc628b62  libjava/javax/swing/plaf/basic/BasicSplitPaneDivider.java
! 21116a10433262abe7d1707b10d9b4c5  libjava/javax/swing/plaf/basic/BasicSplitPaneUI.java
! 398e206b68d256eb03a02359c7d9f87a  libjava/javax/swing/plaf/basic/BasicTabbedPaneUI.java
! 9f72e46044b0edcc802dfe02d674f686  libjava/javax/swing/plaf/basic/BasicTableHeaderUI.java
! 06fabdb69704815c6bcae446f44817ac  libjava/javax/swing/plaf/basic/BasicTableUI.java
! c9b218487f3d3dc474da00fa5ac19eef  libjava/javax/swing/plaf/basic/BasicTextAreaUI.java
! de3d037066ad2c54bc9409516a836850  libjava/javax/swing/plaf/basic/BasicTextFieldUI.java
! 21307357601eb7211f4f93792ad2145f  libjava/javax/swing/plaf/basic/BasicTextPaneUI.java
! 5c1fbc8acf680979f86328fb94b6761d  libjava/javax/swing/plaf/basic/BasicTextUI.java
! 1ae4791f682f20d27097f98ee45bdb78  libjava/javax/swing/plaf/basic/BasicToggleButtonUI.java
! 6ca3a27510c6a02489948a4d1de661e8  libjava/javax/swing/plaf/basic/BasicToolBarSeparatorUI.java
! 86c62d4e02b6bcf719832c351f65ac21  libjava/javax/swing/plaf/basic/BasicToolBarUI.java
! 702ebea2e6b9b77f675764c4484d13f6  libjava/javax/swing/plaf/basic/BasicToolTipUI.java
! cec93c7a94f26fd657d4bb0830a651b6  libjava/javax/swing/plaf/basic/BasicTreeUI.java
! 70d997d53bbd202d14d5ffdf8d493cce  libjava/javax/swing/plaf/basic/BasicViewportUI.java
! c72200dd742dd467c03ed9b36b3d8378  libjava/javax/swing/plaf/basic/ComboPopup.java
  6e5f46fdbaad38cc99f3a6c2e07e1423  libjava/javax/swing/plaf/basic/doc-files/BasicBorders-1.png
  8b9897c83a6140ec5b347ef9dbf20dac  libjava/javax/swing/plaf/basic/doc-files/BasicBorders-2.png
  74349d8e54e033d730f3b1cfc24d0bd1  libjava/javax/swing/plaf/basic/doc-files/BasicBorders.ButtonBorder-1.png
*************** d0794580b9dd479c694d47aefa6ecd10  libjav
*** 18873,19097 ****
  0e6fae23bcc509f1656b59f016b65cbe  libjava/javax/swing/plaf/doc-files/ComponentUI-1.dia
  27e9489fd6417d1b19c4bd819c2f99b2  libjava/javax/swing/plaf/doc-files/ComponentUI-1.png
  bd414488334e8a2aa791b1506fd2718e  libjava/javax/swing/plaf/doc-files/TreeUI-1.png
! 93c4e3bcf52b99612300bbf975b7e9dd  libjava/javax/swing/plaf/metal/MetalLookAndFeel.java
! b2d3ca1f8c48ba2ab41f20828367857d  libjava/javax/swing/table/AbstractTableModel.java
! e7bdb48113ba0613ed906f6a7f9c3678  libjava/javax/swing/table/DefaultTableCellRenderer.java
! 8da8716da3e012656125a01ba8317889  libjava/javax/swing/table/DefaultTableColumnModel.java
! 090c820832729f740de7112c931fe8d9  libjava/javax/swing/table/DefaultTableModel.java
! 0b3dcf7b8e073f987f9f2dec061c5a00  libjava/javax/swing/table/JTableHeader.java
! c3b55359b983ad26b03a47bc4fe51f91  libjava/javax/swing/table/TableCellEditor.java
! 574f2f1de526e3569411b681ab68b51b  libjava/javax/swing/table/TableCellRenderer.java
! 8d87c038a6238e573977852c37d573ca  libjava/javax/swing/table/TableColumn.java
! 0e6b7343d98a76a472133d3dfc93e5d2  libjava/javax/swing/table/TableColumnModel.java
! 987ddd5bf076731c881f265c5481a7bb  libjava/javax/swing/table/TableModel.java
! 4e6b1041348ab913c2eaaf77c73acc27  libjava/javax/swing/text/AbstractDocument.java
! d45f4d9da0adbb830d64f3ce5dbe0a6d  libjava/javax/swing/text/AttributeSet.java
! fdca5cfe56c1fbafafe63fb995205ef2  libjava/javax/swing/text/BadLocationException.java
! adad3b2e1fa27333e74dc75e8b7f0766  libjava/javax/swing/text/Caret.java
! a52ce4817f5f4a1a40a51d2d479fa602  libjava/javax/swing/text/CharacterIterator.java
! c9df82cb1d9c7e7222af5d1b85b854cc  libjava/javax/swing/text/ComponentView.java
! 611befeaf4c876281132bddb846ef20f  libjava/javax/swing/text/DefaultCaret.java
! 18ab5c39559d3e67f46d5767bab58b11  libjava/javax/swing/text/DefaultEditorKit.java
! 84b05dd9ce4b1787f87ababf12e55c34  libjava/javax/swing/text/Document.java
! a1e2bd383680f54268fa56d2aa56268c  libjava/javax/swing/text/DocumentFilter.java
! 6af5578f35b4ca41b10a81b6e0f17f6e  libjava/javax/swing/text/EditorKit.java
  7d81598149d05056d5604ef225f75286  libjava/javax/swing/text/Element.java
! 5b7c55086e084accdb602890b4b1bf66  libjava/javax/swing/text/GapContent.java
! 38c72cf25b91440933e09d7cd9ff3aec  libjava/javax/swing/text/JTextComponent.java
  4ed2b26a9d4d4e829a2b3d160cae5204  libjava/javax/swing/text/Keymap.java
! 6469f9a38fc5ae0aac1bc258729c02a7  libjava/javax/swing/text/MutableAttributeSet.java
! 5de46bbf3ad0e7f5213478d8b542cea2  libjava/javax/swing/text/NavigationFilter.java
! b80ff640395f51b71d8a8e00faee0ecf  libjava/javax/swing/text/PlainDocument.java
! 5d2e96a45d9862d23acec6783b86db7a  libjava/javax/swing/text/PlainEditorKit.java
! 09e6f2fa4bccaa2dda1de0475d79d879  libjava/javax/swing/text/Position.java
! 9a6764811dcc5d942f0c965c4192c800  libjava/javax/swing/text/Segment.java
! c4df7757a418a68bac42279fb6af2586  libjava/javax/swing/text/Style.java
  996b09ab8947f659297bd224009b35f9  libjava/javax/swing/text/StyledDocument.java
! d2a740b0ec478a6883d45bdc72a77421  libjava/javax/swing/text/StyledEditorKit.java
! 0e1af31683642f0d5d9387339bbcdd85  libjava/javax/swing/text/TextAction.java
! 994bade0e23f01e3427b713263a15edf  libjava/javax/swing/text/View.java
! 573fad0604ea0b021eca66944a41e51b  libjava/javax/swing/text/ViewFactory.java
! 2cdb399434af112182d587ff76ed6068  libjava/javax/swing/text/html/HTML.java
  df7b57214c5db5e31bb16f0b139bb18d  libjava/javax/swing/text/html/parser/ParserDelegator.java
! 67c063a395dfc02fbdcb624763721481  libjava/javax/swing/tree/AbstractLayoutCache.java
! 563591b83897bf505ef565698181ae73  libjava/javax/swing/tree/DefaultMutableTreeNode.java
! be6acce3dd727a9ca09d6b2df75b21c5  libjava/javax/swing/tree/DefaultTreeCellEditor.java
! c444ecff9ef700101ca12b491b6b9b96  libjava/javax/swing/tree/DefaultTreeCellRenderer.java
! 100560da9520a4f2c556ab2f369ecd8f  libjava/javax/swing/tree/DefaultTreeModel.java
! dbc7f3f328b02e5072c41595911e5adb  libjava/javax/swing/tree/DefaultTreeSelectionModel.java
  deb6b7c0fdce59d63443e5f70311fea6  libjava/javax/swing/tree/ExpandVetoException.java
! 6d4682c5d2d1e86b5891d7a327413652  libjava/javax/swing/tree/FixedHeightLayoutCache.java
! 3b83f63117451c6c45c1075a88addb9f  libjava/javax/swing/tree/MutableTreeNode.java
  452c7f7decb6f3a908700610ebd720ff  libjava/javax/swing/tree/RowMapper.java
! b7fc2303926cf7e0d5c6f68c31dc854f  libjava/javax/swing/tree/TreeCellEditor.java
! b088f6f713341f2dc6c62da077b44e3d  libjava/javax/swing/tree/TreeCellRenderer.java
  783117295fba4922de5622ea58a48f44  libjava/javax/swing/tree/TreeModel.java
  b8c3713fa582e67c33c9f54205483951  libjava/javax/swing/tree/TreeNode.java
  c1825857b6992c305de4f4f530d37d96  libjava/javax/swing/tree/TreePath.java
! 7ec35cda207b7569497a932a99e178a1  libjava/javax/swing/tree/TreeSelectionModel.java
! b1e7560be5463b278ec6cda06d2fbcba  libjava/javax/swing/tree/VariableHeightLayoutCache.java
! cb5bf75fedbfc4a58648626ae185da67  libjava/javax/swing/undo/AbstractUndoableEdit.java
  55b467a2765dd4efe132654c2dd67e98  libjava/javax/swing/undo/CannotRedoException.java
  bbfd2d54b63756aa860f49fdd1e6e6d0  libjava/javax/swing/undo/CannotUndoException.java
! 028f7b7d6945fedb76f9e29a4d1e7715  libjava/javax/swing/undo/CompoundEdit.java
! 45939df10cb1a6745484a3374a0c1825  libjava/javax/swing/undo/StateEdit.java
  d529f11180d2d7dac806745d64cdf2a1  libjava/javax/swing/undo/StateEditable.java
! 85c33c5546a996c05c8aab7cb3975b04  libjava/javax/swing/undo/UndoManager.java
  7756b420b9025fee080b3dcb89305773  libjava/javax/swing/undo/UndoableEdit.java
! 74d388c3134f2f79e2596c3dcd211f8d  libjava/javax/swing/undo/UndoableEditSupport.java
! 3841a30aab027e5f1e3702920baf5796  libjava/javax/transaction/HeuristicCommitException.java
! d68a2b02242ee53393d2403bb04087ae  libjava/javax/transaction/HeuristicMixedException.java
! c9b2a3d64a944a3a66b4efd6b6f25f5a  libjava/javax/transaction/HeuristicRollbackException.java
! 5197b5d37e0502b4f1a162e1955a6042  libjava/javax/transaction/InvalidTransactionException.java
! b75bf2949e5a92aab0b8af0e27a96e07  libjava/javax/transaction/NotSupportedException.java
! 6eb4d2bb5bc715b85f9fcdc643b34cc1  libjava/javax/transaction/RollbackException.java
! 272f8e9dcd829773e67e0820145c1d3a  libjava/javax/transaction/Status.java
! 8d4dd738fe6aedbc4e584b554f5f45bc  libjava/javax/transaction/Synchronization.java
! 4e5001c8cdf8e1cfe8fd8a0c26f0ff6f  libjava/javax/transaction/SystemException.java
! 4089e15fb3d9d1819a0b9c1d4b0fb325  libjava/javax/transaction/Transaction.java
! cb504000dda1421fa9779d579c383c50  libjava/javax/transaction/TransactionManager.java
! 74f4aca5c0a5d7d303274117a876f6f9  libjava/javax/transaction/TransactionRequiredException.java
! 3d4d8cc0eac60886c5819d495b381efe  libjava/javax/transaction/TransactionRolledbackException.java
! 3afad939cad35dd63fec84a4b8b69ece  libjava/javax/transaction/UserTransaction.java
! b9fe7acac304cb24dc3091b8a9beaaf2  libjava/javax/transaction/xa/XAException.java
! 2fee4dbab7d44ff3019228a32407c177  libjava/javax/transaction/xa/XAResource.java
! 93819abaeb07b2b0759009f8c8653431  libjava/javax/transaction/xa/Xid.java
! ebde259dd39abf24be3a31f60e383b72  libjava/jni.cc
! b248c58d048a33c748bfcc0cddd8be92  libjava/jni/classpath/jcl.c
! 9d0f04a2d2d09af68ef7c8e608360b3c  libjava/jni/classpath/jcl.h
! c7d8cc8e2cc83abc8a3b9286b6bc3cef  libjava/jni/classpath/jnilink.c
! 4651ab6b5d8a9ec62d24337bd8ebffdc  libjava/jni/classpath/jnilink.h
  635b1cd6ee28db23d28a524216806aef  libjava/jni/classpath/native_state.c
  d1fc93ba5f475c6314ad93d4566f8754  libjava/jni/classpath/native_state.h
! 9d8c912bc5d3f2bb73cf5b8ecbd776c5  libjava/jni/classpath/primlib.c
! 90d24d286ee44427186c9b7ab740fe96  libjava/jni/classpath/primlib.h
! 023e888a4f85c886c491def7880b0e65  libjava/jni/gtk-peer/gdkfont.h
! 774d661a2ff19d7a61524c2d991c4b72  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeer.c
! af4ca014e8ae173fc8e86b1b9de5a631  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeerMetrics.c
! 5add46ec3bd511a935c7de5d0e2e5039  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c
! 9915dc8511c4bf914b165f5116b1fbf1  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c
! d0429337312e289155e7c5591b30b26d  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
! 0b1ffec92ab669695020ddb9c6220885  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
! 1960fcad57170bebc65d9324488834dc  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c
! 253c63700d7d85d00c7c2ed41a77f748  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
! a9df86f8737dbdfdb58bf3f3fd28173b  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c
! 103b05c40329b5c46283ce0bc0d8cd94  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c
! e58c18b72b2b8a7ac36705b3a76b2112  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
! af9bb60a7ece83cf709249f79674569a  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c
! d44d68caca8e92537f108bccfe17a457  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c
! c767251f10e9a231566fd1c63e697060  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
! 553466c82a8c7c37c8f0780ecc9b811c  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c
! d199ff1f3a8941ce109eb0c1e5906549  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
! 8f96f1e2724a7ee6d4689fe0a1fb8c3d  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
! 44c953ce7c358796b871c3fe34d06737  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c
! 3e080ef251c149994e287a3d6da91c2b  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c
! 37aeb30042f718384f08197c7c39633c  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c
! cf311570d3c7917feeb9bcb2b4e1bde7  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
! 867a92804609b984aab6b4893070977d  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c
! cd7de20e315e4750f7aa74a922d94139  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c
! bf2fa33848bc2e9b2d63b2af1265f385  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c
! 7d8b20ddac860df41ba53e935421455f  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c
! 9ead79a951f66f15815b595f0ac356e8  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c
! 809120004a143b92802990be756a8818  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c
  2e001cc6d8cc1e0f1e115c4cf3836f5a  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c
! 9975bd97bd890d124cbccb242beecd1a  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
! 8a8dc45f56679b6ebdbf2e2ffa37a3d8  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c
! 0062051f30c7052a64ca34d18c2991c1  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c
! e8e1d88481952856c9e4cc94be5509a6  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c
! d09b8abbfe624e2eaca60b746093d321  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
! cddebc8a4346b9b1fb8a56af1556323a  libjava/jni/gtk-peer/gthread-jni.c
! e4fea8e2c4eca35551a3eb01bc576358  libjava/jni/gtk-peer/gthread-jni.h
! 3db7d02e3fa6c344146b2680197d3215  libjava/jni/gtk-peer/gtkcairopeer.h
! dac5d7feb3006eb2023fbeb000bde04d  libjava/jni/gtk-peer/gtkpeer.h
! 15a39cc64fab031828edc48484acb62f  libjava/libart.m4
  d04590c4dc6a61734d09958671cba4da  libjava/libgcj-test.spec.in
  1633d308648ff7348f9557a588ca6d39  libjava/libgcj.pc.in
  951ec925ca91ea2a5236d0f25d8db838  libjava/libgcj.spec.in
  3d4a33013a6e48b3df24d0f6cfecd519  libjava/libltdl/.cvsignore
  d8045f3b8f929c1cb29a1e3fd737b499  libjava/libltdl/COPYING.LIB
! 65be2bf7a2f8e20d08900d27f6becf4f  libjava/libltdl/ChangeLog
  6824f0f26586155951e5e6d7499e6269  libjava/libltdl/Makefile.am
! 29bc3970a164095fe53dbbb277f61fa0  libjava/libltdl/Makefile.in
  36da24f9facf00b349ea10dba3789d92  libjava/libltdl/README
! 65ae3463b0890ff47b923fa97d573814  libjava/libltdl/acinclude.m4
! fecf8b21a8c16e5b24db80438c3d3a5d  libjava/libltdl/aclocal.m4
! 8406c7ebfab15e82817bc9026669efde  libjava/libltdl/config-h.in
! dd4451f9cdfc36cdb86703965f758ec2  libjava/libltdl/config.guess
! 6cdae8120da06ebd9981c7a5a813550b  libjava/libltdl/config.sub
! 7e6d5fa89e60e798ff062c7d9e0ee00f  libjava/libltdl/configure
! 035f901aa66d291bca66eab4a9f1ccd3  libjava/libltdl/configure.ac
  d4c3da374db4aa2301a21ab3e51ddb21  libjava/libltdl/install-sh
  2a2bee5d5e0959ed779e66957f0f02b2  libjava/libltdl/ltdl.c
  ee99980905e04ebd71dda86810af81a5  libjava/libltdl/ltdl.h
  83074663a630af06ca2f83f047851a00  libjava/libltdl/ltmain.sh
  0a5e8ed778878a2656e3ea2313dac833  libjava/libltdl/missing
  792922784eade1d03ecb1b33ba8bb7c3  libjava/libltdl/mkinstalldirs
! 732ecfe63830440a680b9c71282c9fd0  libjava/libtool-version
! 39ac352b2ba5cbacaa49ff33e486e519  libjava/mauve-libgcj
  b9b84e76d51b653c7fec2c1d882759c1  libjava/no-threads.cc
  e760b0ffcb334f44eac33b922cd34c6a  libjava/nogc.cc
! d29e939969f6ea516207fca3b1c02735  libjava/org/w3c/dom/Attr.java
! b1bef248d65dd6b85bef4caea4b33940  libjava/org/w3c/dom/CDATASection.java
! 0931576b56986c3c62b9ebe4a852f8fa  libjava/org/w3c/dom/CharacterData.java
! fa9971cf1e7c5b76136a33f43957cb31  libjava/org/w3c/dom/Comment.java
! b15f2e19844f6c8b05c70ed4b3d2908f  libjava/org/w3c/dom/DOMException.java
! 17c2cc90397796d0347c7c100dbb5003  libjava/org/w3c/dom/DOMImplementation.java
! bc97dcbce5a8cf840afe21b691fcaa45  libjava/org/w3c/dom/Document.java
! 8b7e7e4d1ff8591b36e79f0c6f6455f7  libjava/org/w3c/dom/DocumentFragment.java
! b955adb741821adc45ffb71332ef7bbd  libjava/org/w3c/dom/DocumentType.java
! 3cfa8c794faa2b7ecdc0aca6c4008754  libjava/org/w3c/dom/Element.java
! 58a362a72c60971fee8b102f396bfbab  libjava/org/w3c/dom/Entity.java
! 4571746c4693e246851174e198265cbf  libjava/org/w3c/dom/EntityReference.java
! 2524ab06e3e3d72c000e4c8c59fc76d8  libjava/org/w3c/dom/NamedNodeMap.java
! 4562c49845e0ee9558668b2008a34412  libjava/org/w3c/dom/Node.java
! 73c0c452269b01c85730b9d05d82f264  libjava/org/w3c/dom/NodeList.java
! f227a49176bda21e4e4aad3995cfe9e7  libjava/org/w3c/dom/Notation.java
! 0a4c21bc4ff76420810a2ebf3d2cfbd7  libjava/org/w3c/dom/ProcessingInstruction.java
! d2484092abe63e5d1f57144f2de82ada  libjava/org/w3c/dom/Text.java
! 63f2524c496ddcb487893e44cd05e1e5  libjava/org/w3c/dom/ranges/DocumentRange.java
! 73f52d3b57e9bfa0e4ef2b5fb8a2920e  libjava/org/w3c/dom/ranges/Range.java
! f877b5c9707aabfd34db261083c5dd4c  libjava/org/w3c/dom/ranges/RangeException.java
! 7551d1ee450f50f9fc5974f15b5c9b71  libjava/org/w3c/dom/traversal/DocumentTraversal.java
! 63d08a2fe3cc3712dd73e28ef59a537b  libjava/org/w3c/dom/traversal/NodeFilter.java
! cd5e8b3a4157f9e2868edbffd9bfa0fa  libjava/org/w3c/dom/traversal/NodeIterator.java
! ab989811b9b127273887ca7d2ed5adef  libjava/org/w3c/dom/traversal/TreeWalker.java
! c1a04130299e156b489fc192bbbdfa17  libjava/org/xml/sax/AttributeList.java
! bc3ee90fe9b7b8832f02ac40cb05186f  libjava/org/xml/sax/Attributes.java
! 90fc7117881de88fa462a0432ffff2b1  libjava/org/xml/sax/ContentHandler.java
! 2d152e4106a6d807c07c6d461816d31b  libjava/org/xml/sax/DTDHandler.java
! 15e370e391cd621a55231046fecdd76e  libjava/org/xml/sax/DocumentHandler.java
! 90f2b3fd85402519cc4fb082139790b3  libjava/org/xml/sax/EntityResolver.java
! 19d59fa479089e2796dfdffe9dd3f8cf  libjava/org/xml/sax/ErrorHandler.java
! 52b86f6196d4a02fa5d4f3eecead1980  libjava/org/xml/sax/HandlerBase.java
! 15822df7ec0c214dc7d89756eebf9c92  libjava/org/xml/sax/InputSource.java
! 388f63c17eadca5314fe7b414099f75e  libjava/org/xml/sax/Locator.java
! 097ca808b763c44f592ba41e857f9d22  libjava/org/xml/sax/Parser.java
! 8793b3686369096e3c5769678b6649fc  libjava/org/xml/sax/SAXException.java
! 86ab498c304abc806e9dfa2491b24c15  libjava/org/xml/sax/SAXNotRecognizedException.java
! 4fc4b12597d95871dc90dab13e6b8b46  libjava/org/xml/sax/SAXNotSupportedException.java
! 6be32b3796ed6c1719556f52c1c4bbd4  libjava/org/xml/sax/SAXParseException.java
! 1788cbe4ae8e08225ba8c61ebbec6cea  libjava/org/xml/sax/XMLFilter.java
! f3c92a7f01c37941387990d6fe9596c7  libjava/org/xml/sax/XMLReader.java
! e90caf133ac9d0bcae3e7ff1194aac68  libjava/org/xml/sax/ext/DeclHandler.java
! 2bb498b6ae5cd9073ec2d906c6215094  libjava/org/xml/sax/ext/LexicalHandler.java
! cf31c59761c483f9ef30e0807e03c82c  libjava/org/xml/sax/ext/package.html
! 1ef3713560695ec6d06e962c52784e5e  libjava/org/xml/sax/helpers/AttributeListImpl.java
! 99db00ceacb580d52f16c45b7882c0ab  libjava/org/xml/sax/helpers/AttributesImpl.java
! 8d7a41fcc907a2c6b3d30d78d22005da  libjava/org/xml/sax/helpers/DefaultHandler.java
! 463256fb72fcf9996ed45f5be05d5551  libjava/org/xml/sax/helpers/LocatorImpl.java
! d178cedb0ba12ea066d11cc4b464859d  libjava/org/xml/sax/helpers/NamespaceSupport.java
! e9101ea5c2ccfa6828b8d512c8106d17  libjava/org/xml/sax/helpers/NewInstance.java
! e3b162d545df098c08f21f6c61ea7a91  libjava/org/xml/sax/helpers/ParserAdapter.java
! c390ff99e45b927998f57a0258785d3d  libjava/org/xml/sax/helpers/ParserFactory.java
! 7afd36199d6c7f7c9c50a24cd9a99910  libjava/org/xml/sax/helpers/XMLFilterImpl.java
! 5dd2c1ab11bccb2624fbd15a27716211  libjava/org/xml/sax/helpers/XMLReaderAdapter.java
! 9af4ee3bf41fd59fc7d44bf2acdaacf2  libjava/org/xml/sax/helpers/XMLReaderFactory.java
! e25bed4a4b0a7f8bd60c0f2b1b2cae5b  libjava/org/xml/sax/helpers/package.html
! 0f889d6053b497680d0703d7b0b9847c  libjava/org/xml/sax/package.html
! 1188792123a49104de55d12821e9b1fc  libjava/posix-threads.cc
  fbe0da51c9e893762a6e4d2f87868e09  libjava/posix.cc
! cd4d3e5e6c83027bf40a475e49c72808  libjava/prims.cc
! 4a2735f187d1b67d14adf86d84991ea8  libjava/resolve.cc
  db2a6ed9769b185121e611b5727fa40a  libjava/scripts/MakeCharTables.java
  792d88462341952031e20db7cda3ce3f  libjava/scripts/MakeDefaultMimeTypes.java
  cbaa3d7bfdbdbc0826becd3e1ba46591  libjava/scripts/TexinfoDoclet.java
--- 22599,22852 ----
  0e6fae23bcc509f1656b59f016b65cbe  libjava/javax/swing/plaf/doc-files/ComponentUI-1.dia
  27e9489fd6417d1b19c4bd819c2f99b2  libjava/javax/swing/plaf/doc-files/ComponentUI-1.png
  bd414488334e8a2aa791b1506fd2718e  libjava/javax/swing/plaf/doc-files/TreeUI-1.png
! a0337fb28a4ce0a5c311661ba447acad  libjava/javax/swing/plaf/metal/DefaultMetalTheme.java
! 9a918f60e75d261cea5ed110c2bcf9e6  libjava/javax/swing/plaf/metal/MetalLookAndFeel.java
! 552302ff0ddbcae5e8dadcdeecb82f07  libjava/javax/swing/plaf/metal/MetalTheme.java
! bac55f72127c7da739990638d5a9fbb1  libjava/javax/swing/table/AbstractTableModel.java
! 51875bcbe83b22df59e95771ea3701e7  libjava/javax/swing/table/DefaultTableCellRenderer.java
! f42206c90ac0feb6de00ea8b67f2f66a  libjava/javax/swing/table/DefaultTableColumnModel.java
! c6d1d86da37b315ee1efa71d9ec8d7c9  libjava/javax/swing/table/DefaultTableModel.java
! 1c595a9dd54b42b36cf2970877e9cbb9  libjava/javax/swing/table/JTableHeader.java
! 8b1b85fe576cf170b656a075688d922d  libjava/javax/swing/table/TableCellEditor.java
! b42bf062d1a53d6b4a488a73263a2cf2  libjava/javax/swing/table/TableCellRenderer.java
! 556cc44de12d21f323ccd4192a77b548  libjava/javax/swing/table/TableColumn.java
! 56eeea7aaa3a29d56ca1a1a83fbdbe80  libjava/javax/swing/table/TableColumnModel.java
! 0ef2ff2220df18a5211c3a38978904b4  libjava/javax/swing/table/TableModel.java
! 079ffc076446bbf748999a0dc0f559bf  libjava/javax/swing/text/AbstractDocument.java
! c7885d5fe62171c90c2fcd83f81b505f  libjava/javax/swing/text/AttributeSet.java
! 28ffe6aa8eaaf703c085400e24b4d9e6  libjava/javax/swing/text/BadLocationException.java
! c03bec6ed178acf27e10dcc29356f5a1  libjava/javax/swing/text/Caret.java
! d569350afeae36b7bba388890b21259e  libjava/javax/swing/text/ComponentView.java
! bf5aee15a1e444f47594336659c364a2  libjava/javax/swing/text/DefaultCaret.java
! 278229a762f5d6e2df5ac513f42b85d1  libjava/javax/swing/text/DefaultEditorKit.java
! 133304035c761e163ed2c4f59db40568  libjava/javax/swing/text/DefaultHighlighter.java
! 93905fd049dabc49eb18c410bd59530b  libjava/javax/swing/text/DefaultStyledDocument.java
! 8351f06a3eb38de15df7620db6c184ad  libjava/javax/swing/text/Document.java
! e07843b829e9a1748bae75aefeb3b19c  libjava/javax/swing/text/DocumentFilter.java
! acb92df5b1f573d7d3996319657d8a88  libjava/javax/swing/text/EditorKit.java
  7d81598149d05056d5604ef225f75286  libjava/javax/swing/text/Element.java
! e377e23404d9c75f7c255342c368264e  libjava/javax/swing/text/FieldView.java
! 20fe420dc34797d9b0b95510610ba20b  libjava/javax/swing/text/GapContent.java
! c6a214be6ec39382e01b4796ee61b1b3  libjava/javax/swing/text/Highlighter.java
! 6a7818f55b9b52fa2c6b52464ff76498  libjava/javax/swing/text/JTextComponent.java
  4ed2b26a9d4d4e829a2b3d160cae5204  libjava/javax/swing/text/Keymap.java
! eac3f0939ffb6429979409fc91d955f4  libjava/javax/swing/text/LayeredHighlighter.java
! fff9f15d95ce34025c10f9d9e1c3b1b0  libjava/javax/swing/text/MutableAttributeSet.java
! 2eeab3399d3592c8393b12f5d7f82cc9  libjava/javax/swing/text/NavigationFilter.java
! 8b009a52330c581901028e1d68c5cc3d  libjava/javax/swing/text/PasswordView.java
! 163e7ff5eee6424fd75615df5ef8f073  libjava/javax/swing/text/PlainDocument.java
! 8e9b8d0d81a57840cb5f2ac1c341cc2f  libjava/javax/swing/text/PlainView.java
! d049650756e7f3f505b5fb572bce273d  libjava/javax/swing/text/Position.java
! 5294edfe0a5ad9de6eb6b1bdf8a1e782  libjava/javax/swing/text/Segment.java
! b5362fe547198ab2edcf2c53a97ba6c5  libjava/javax/swing/text/SimpleAttributeSet.java
! ee6a3f0453c0c6aaee34486d622e093d  libjava/javax/swing/text/StringContent.java
! c8ca7d7495da450956f854d50c22fc91  libjava/javax/swing/text/Style.java
! 6fa7f2f3e82ebf06d3f2e056c04f361f  libjava/javax/swing/text/StyleConstants.java
! 0d2437495596c06f57e00d1765470444  libjava/javax/swing/text/StyleContext.java
  996b09ab8947f659297bd224009b35f9  libjava/javax/swing/text/StyledDocument.java
! 5b66627469d9ab7971421bfe1632d42d  libjava/javax/swing/text/StyledEditorKit.java
! 83c5495e77222f967eedd82eb41e0ecc  libjava/javax/swing/text/TabExpander.java
! 749c45c3a2bdab03a005d4d31a788940  libjava/javax/swing/text/TabSet.java
! d3fadcbb2f981d6834878a5aa33b284b  libjava/javax/swing/text/TabStop.java
! a9398880a6f511dabb62a02ee17e659d  libjava/javax/swing/text/TabableView.java
! ffc0d509dd11ffa1268a9f8cc528423f  libjava/javax/swing/text/TextAction.java
! 91f9ed797a1e6f62b9ccab1836300075  libjava/javax/swing/text/Utilities.java
! 779bc9e00dc8704c60b987b0970750a3  libjava/javax/swing/text/View.java
! 7c365af2eeea5adeeb1eba7c89dfae10  libjava/javax/swing/text/ViewFactory.java
! d3e67255c51e1e17ac251cda18ddcd60  libjava/javax/swing/text/html/HTML.java
  df7b57214c5db5e31bb16f0b139bb18d  libjava/javax/swing/text/html/parser/ParserDelegator.java
! 8c32e447117543b1ec1f79340ef6eee5  libjava/javax/swing/tree/AbstractLayoutCache.java
! 3b367a6ce72651e5b01ef19d3c24206a  libjava/javax/swing/tree/DefaultMutableTreeNode.java
! 0d306205bc1b87516285039f10195853  libjava/javax/swing/tree/DefaultTreeCellEditor.java
! a9707f353ebf88e2d1534543bbb16adb  libjava/javax/swing/tree/DefaultTreeCellRenderer.java
! 4716247aad7eb95bb79c9431fcb0bbab  libjava/javax/swing/tree/DefaultTreeModel.java
! 0ae0069a4dbcd85b3654f1645a1b4b8e  libjava/javax/swing/tree/DefaultTreeSelectionModel.java
  deb6b7c0fdce59d63443e5f70311fea6  libjava/javax/swing/tree/ExpandVetoException.java
! dca08decc895d68d3bbe7df4b9b459fc  libjava/javax/swing/tree/FixedHeightLayoutCache.java
! 7d072a8815e34af55b1867229d39a09c  libjava/javax/swing/tree/MutableTreeNode.java
  452c7f7decb6f3a908700610ebd720ff  libjava/javax/swing/tree/RowMapper.java
! 720461bb2b9c16ef340306c86d3398b7  libjava/javax/swing/tree/TreeCellEditor.java
! da13352699d9e16a129a07b17d8200de  libjava/javax/swing/tree/TreeCellRenderer.java
  783117295fba4922de5622ea58a48f44  libjava/javax/swing/tree/TreeModel.java
  b8c3713fa582e67c33c9f54205483951  libjava/javax/swing/tree/TreeNode.java
  c1825857b6992c305de4f4f530d37d96  libjava/javax/swing/tree/TreePath.java
! 4f4438384018c76cca58f256f6e28148  libjava/javax/swing/tree/TreeSelectionModel.java
! d77f6c50e5f5c38ad7e5d16e3d8d80a8  libjava/javax/swing/tree/VariableHeightLayoutCache.java
! 93616d4f28e9dea2f8d0aba2c54cd71d  libjava/javax/swing/undo/AbstractUndoableEdit.java
  55b467a2765dd4efe132654c2dd67e98  libjava/javax/swing/undo/CannotRedoException.java
  bbfd2d54b63756aa860f49fdd1e6e6d0  libjava/javax/swing/undo/CannotUndoException.java
! a548c1028b92f3cb68e27106762ee9dc  libjava/javax/swing/undo/CompoundEdit.java
! c60b24d5981a6f1eace600ba2b549c79  libjava/javax/swing/undo/StateEdit.java
  d529f11180d2d7dac806745d64cdf2a1  libjava/javax/swing/undo/StateEditable.java
! 2084132b20ffd8b3fbbb3e487e7f65f1  libjava/javax/swing/undo/UndoManager.java
  7756b420b9025fee080b3dcb89305773  libjava/javax/swing/undo/UndoableEdit.java
! ca208a3233e94cc6cad87cdafe9b0df6  libjava/javax/swing/undo/UndoableEditSupport.java
! 17f1f09cda758b93f37376adb6aa29a7  libjava/javax/transaction/HeuristicCommitException.java
! 02d4818b6210148a9dc8d347757d500c  libjava/javax/transaction/HeuristicMixedException.java
! 7da89a4883087f637b3790e56d109fc9  libjava/javax/transaction/HeuristicRollbackException.java
! b94a8b4d3ae7c3da606f8b2208a0e444  libjava/javax/transaction/InvalidTransactionException.java
! 40185c4d714c0a4a2b09ba38996c24b7  libjava/javax/transaction/NotSupportedException.java
! 1a76405ae1d5e4bde91936c4569776bc  libjava/javax/transaction/RollbackException.java
! d78f88ac56dde34ddaa2c268159c55a5  libjava/javax/transaction/Status.java
! 2e1efb9c5dda4465e2a444ca25ad9bba  libjava/javax/transaction/Synchronization.java
! 80458790df7e7fd99e7c5f2de23e1b93  libjava/javax/transaction/SystemException.java
! 023c2b5091fbb96a5864f317b3e7aa22  libjava/javax/transaction/Transaction.java
! c1de008d85a98d24cf3954a8cbc09ad8  libjava/javax/transaction/TransactionManager.java
! 73280f2041fe9ead19b027a1526f5b11  libjava/javax/transaction/TransactionRequiredException.java
! b4facb60129537d92bb4548179d3b0d9  libjava/javax/transaction/TransactionRolledbackException.java
! b503282948cf33d7c3c4fc8bbc7e5f73  libjava/javax/transaction/UserTransaction.java
! 347968976e3e1b1b00e80d5dff96c9ff  libjava/javax/transaction/xa/XAException.java
! 7d5632aecdc2f74d3be531b847bbb543  libjava/javax/transaction/xa/XAResource.java
! 6ceac5de541ae5a562bfa8798f3ac636  libjava/javax/transaction/xa/Xid.java
! d7194ab7d72ccce9bf309ad3bdaeb85f  libjava/javax/xml/XMLConstants.java
! bfdab4a52edfb5729415cd5645ddd34d  libjava/javax/xml/datatype/DatatypeConfigurationException.java
! e7dc8553e6e224ce0e37b07c130124d5  libjava/javax/xml/datatype/DatatypeConstants.java
! f62c9f4d334686ee7630014e9a87c546  libjava/javax/xml/datatype/DatatypeFactory.java
! cffe1d82e416bdab1588abd8773982ac  libjava/javax/xml/datatype/Duration.java
! 08523da5eefe0645849a94967d55e602  libjava/javax/xml/datatype/XMLGregorianCalendar.java
! df768a067cca297abc1469dd4952bd37  libjava/javax/xml/datatype/package.html
! 01bdbe59c51cbbbf707925d4d52fe325  libjava/javax/xml/namespace/NamespaceContext.java
! 9116edca0fa7ee23f4f406feb218c0b0  libjava/javax/xml/namespace/QName.java
! 570a4e159913a1d9b4a2e887a4d993a3  libjava/javax/xml/namespace/package.html
! 23ccf4fede1de622c08b1cb9bccefc4d  libjava/javax/xml/parsers/DocumentBuilder.java
! 2dcef7ee3a5bc1c47b3bb69af43975bc  libjava/javax/xml/parsers/DocumentBuilderFactory.java
! 4cc45b6d9376bca8aa56e42c4e41d907  libjava/javax/xml/parsers/FactoryConfigurationError.java
! f1f382731c03073e15cdb8e4cb9788fa  libjava/javax/xml/parsers/ParserConfigurationException.java
! 00b6fdc8f31c3adfc226fcc93ba3ffb4  libjava/javax/xml/parsers/SAXParser.java
! 8fd62a8e4edd7bb53449245e84c7be15  libjava/javax/xml/parsers/SAXParserFactory.java
! 5e617fd6ca646fb0784af7a5d34e2afc  libjava/javax/xml/parsers/package.html
! f8dda73efe689b20e7bc3009dc7a4685  libjava/javax/xml/transform/ErrorListener.java
! 9401236be7d978e5e2503b5548df2cc3  libjava/javax/xml/transform/OutputKeys.java
! 12203adb052cac070a62da25a331a1f8  libjava/javax/xml/transform/Result.java
! 37f54355d3014d54e76e95d496099e6a  libjava/javax/xml/transform/Source.java
! efea8859d5c59431cb2ec74d85cc6bd4  libjava/javax/xml/transform/SourceLocator.java
! 59c4e981d9f46cbfb7af725bbf673abf  libjava/javax/xml/transform/Templates.java
! d5da8bc3a3077d31a4faae09441b1e8d  libjava/javax/xml/transform/Transformer.java
! cdfaf9ccfa0d58440b3c8e91cff26149  libjava/javax/xml/transform/TransformerConfigurationException.java
! a671bfb3513da2933a31d054f9e34259  libjava/javax/xml/transform/TransformerException.java
! a045f1885e78be46db2ead29fe01b67c  libjava/javax/xml/transform/TransformerFactory.java
! cbc2c2ae6e26c05796d616f7d19961a4  libjava/javax/xml/transform/TransformerFactoryConfigurationError.java
! 1666446dfa83c13730e6a036da5984d8  libjava/javax/xml/transform/URIResolver.java
! ed8f4ec2dbbde78711a52310dd3c195f  libjava/javax/xml/transform/dom/DOMLocator.java
! d70166bd65f5503a3d1b203d68f9a0f2  libjava/javax/xml/transform/dom/DOMResult.java
! f7c403c85c957d95e3393ad2c4ad059e  libjava/javax/xml/transform/dom/DOMSource.java
! 557a82352d28fa7c528ee1ad11574cea  libjava/javax/xml/transform/dom/package.html
! adbec903ccf392b12f025f7d577ba0c6  libjava/javax/xml/transform/package.html
! 315b9c066aa8e5dad8204408a133f4aa  libjava/javax/xml/transform/sax/SAXResult.java
! 500ee0fcfae406183e58f2e63baca655  libjava/javax/xml/transform/sax/SAXSource.java
! 7fd5f39dfd1bf422c186c3ece61f308e  libjava/javax/xml/transform/sax/SAXTransformerFactory.java
! 45f3a24a9ff9ffaeedfdbb5a70351f20  libjava/javax/xml/transform/sax/TemplatesHandler.java
! e6c55757404a5689b43ae0e7c1819107  libjava/javax/xml/transform/sax/TransformerHandler.java
! 68d9200e7d29b229613bf7f2404e7281  libjava/javax/xml/transform/sax/package.html
! 79340b7609017ef2e0931e9272b4ff53  libjava/javax/xml/transform/stream/StreamResult.java
! 9f00f5c400e78c81a3ee197148386dd1  libjava/javax/xml/transform/stream/StreamSource.java
! 16721db49d22ee81a2eab6ed880af4fe  libjava/javax/xml/transform/stream/package.html
! b97387827634ab902706ae4a976d67ba  libjava/javax/xml/validation/Schema.java
! b08fbcbcc6efb12a464930cdf87519a5  libjava/javax/xml/validation/SchemaFactory.java
! b7273e1e2848e7e36aa257ba32d1dba4  libjava/javax/xml/validation/TypeInfoProvider.java
! 28b74ca1fcbaf3a9710166a7d2e2b29f  libjava/javax/xml/validation/Validator.java
! 5ebb2b299f2f4f090e33d0aa561b4af2  libjava/javax/xml/validation/ValidatorHandler.java
! f5a66440ec6770ba58a27c38411905e0  libjava/javax/xml/validation/package.html
! 9760cb60ccae2bd329c41777599f9fe2  libjava/javax/xml/xpath/XPath.java
! e6c57e56dfe98df65fe7848c9d313718  libjava/javax/xml/xpath/XPathConstants.java
! 42c622d8dd87cff1e81fd7bcc8fbf7f5  libjava/javax/xml/xpath/XPathException.java
! c2c82c733dc5f1d561816394b358a7e4  libjava/javax/xml/xpath/XPathExpression.java
! 2db9680bc243858e76248432a81ef417  libjava/javax/xml/xpath/XPathExpressionException.java
! 3934e2d1e14da4ec56dacfe90a22d1e7  libjava/javax/xml/xpath/XPathFactory.java
! d126f1cc32f886f2407d1fa2e1279e53  libjava/javax/xml/xpath/XPathFactoryConfigurationException.java
! d69d4c454c488e55b6b042757bdcfa54  libjava/javax/xml/xpath/XPathFunction.java
! ab6e3ac640669e8febd4581cc271fe8e  libjava/javax/xml/xpath/XPathFunctionException.java
! f01b1d8ccf1ae6400369b840465eb5b9  libjava/javax/xml/xpath/XPathFunctionResolver.java
! 4df6dc1d88780bad642bff2b1419dc0b  libjava/javax/xml/xpath/XPathVariableResolver.java
! 4195e7f3734630104cdf377940a46f56  libjava/javax/xml/xpath/package.html
! 498b1c52c881f713fd92c6b2b2c39a10  libjava/jawt.c
! 9502199144dffd8c68bd77338292672a  libjava/jni.cc
! 439a87d8a7d816276dffd7e23321cfb1  libjava/jni/classpath/classpath_jawt.h
  635b1cd6ee28db23d28a524216806aef  libjava/jni/classpath/native_state.c
  d1fc93ba5f475c6314ad93d4566f8754  libjava/jni/classpath/native_state.h
! d8b04d299c9bc5c05d8a49be24814ec9  libjava/jni/gtk-peer/gdkfont.h
! fdf5150c7e230dbcde634b7fb3980070  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.c
! c4d35a3bc4bcb0455db100064c8a9e3f  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c
! 9924c87262d052bdeca4c495301f46c7  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
! 17a4999d953313ba41516808468d4aa5  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
! 226ba43609f5d37a6c1d99437f04df8b  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c
! e73c77796c1961acfecf7d83847671c9  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c
! 20a57d08eb6ab09bd8d91f538bb70d39  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c
! 603a9157ee6a896d05e82fcbdbc1a054  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c
! c2dc244eb5deabee72a453672dbf85ab  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
! a4a76cb538e65b89cef970282d84cdad  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c
! 7588c3c57098d2ffa15d87ce44af78e6  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c
! 9bef0d85aee641462d5520c4e3d9792b  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c
! ee68eccb483f951deaf538220bc511b3  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
! b18578d93162a1d281077a53f478fe72  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c
! 718846090c2809dddd11a6e3a4b4ce64  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c
! 67d7ba1312779eb9fe338c815a63360f  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
! 41b208e1a69283ef6cffd7e6918957b7  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c
! db64e5426d7a77d266594ffd836d6370  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
! ac3719535f60ef55a7cab32e8b56834b  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
! 0da2f1ead7016cc04c7ff729777cbec3  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c
! d67632d6030e24a62dccdbe8ad513220  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c
! abfdfb80fef4a559d3e41bcbad4cba8e  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c
! 7fcb54558720d2fa1483b67dc4cb98ba  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c
! 1ddad46a4ecf453a28f19a6177f60193  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c
! 04b732741fa8ac9b3ded3e4dfaa578c4  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c
! b3bf01f64b63b9fdf8a58cd62a2f86b5  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuComponentPeer.c
! a19aa80118c869116a4a622c15305660  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c
! 0e00e185316db47a50b6f8f6b1afd8cc  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c
! b42ce74979c536a309dfca2ee9eed676  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c
! 2393583270b88be371d4b6ea95f0d596  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c
! 7a5a3938845db508f302f42ad62e3bdc  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c
  2e001cc6d8cc1e0f1e115c4cf3836f5a  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c
! 16a7b60bccb0ed2a63c7eaf4bb5def26  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
! 1297252469b06b8692242eac2431593e  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c
! a9e619493d929723f756639fb93d2c75  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c
! db0f974332a654736ebdd7a876f61d70  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c
! 2017e6e04ce6fb43d2cbe3df05fca571  libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
! 56e1dc87c05a3b0e792f68ab2f48db85  libjava/jni/gtk-peer/gthread-jni.c
! b1946fdc92febc042f46f61f859fc764  libjava/jni/gtk-peer/gthread-jni.h
! 2d3321f99f197a1523c601fe50240cdb  libjava/jni/gtk-peer/gtk_jawt.c
! ff13277400843f1b7611b04bb7235117  libjava/jni/gtk-peer/gtkcairopeer.h
! 443e772042c2195cf2f1a2dd752b41ba  libjava/jni/gtk-peer/gtkpeer.h
  d04590c4dc6a61734d09958671cba4da  libjava/libgcj-test.spec.in
  1633d308648ff7348f9557a588ca6d39  libjava/libgcj.pc.in
  951ec925ca91ea2a5236d0f25d8db838  libjava/libgcj.spec.in
  3d4a33013a6e48b3df24d0f6cfecd519  libjava/libltdl/.cvsignore
  d8045f3b8f929c1cb29a1e3fd737b499  libjava/libltdl/COPYING.LIB
! fd9a84c3d84befae55c0dcc5c5e53803  libjava/libltdl/ChangeLog
  6824f0f26586155951e5e6d7499e6269  libjava/libltdl/Makefile.am
! f0fc479b9827216034a3a365eb6e8194  libjava/libltdl/Makefile.in
  36da24f9facf00b349ea10dba3789d92  libjava/libltdl/README
! 5d62561c282968a4d91cbc2d4315496b  libjava/libltdl/acinclude.m4
! 45d4596e8d45a315492e15447e57daa1  libjava/libltdl/aclocal.m4
! e2d25814a3c4fd5f7012cc69279fb3d2  libjava/libltdl/config-h.in
! 953749bade5256db32886b5353f73cab  libjava/libltdl/config.guess
! 953749bade5256db32886b5353f73cab  libjava/libltdl/config.sub
! 32914f40de4031baa374165b2f05d77b  libjava/libltdl/configure
! 3601fb7e86931a5f409e46eeda76a418  libjava/libltdl/configure.ac
  d4c3da374db4aa2301a21ab3e51ddb21  libjava/libltdl/install-sh
  2a2bee5d5e0959ed779e66957f0f02b2  libjava/libltdl/ltdl.c
  ee99980905e04ebd71dda86810af81a5  libjava/libltdl/ltdl.h
  83074663a630af06ca2f83f047851a00  libjava/libltdl/ltmain.sh
  0a5e8ed778878a2656e3ea2313dac833  libjava/libltdl/missing
  792922784eade1d03ecb1b33ba8bb7c3  libjava/libltdl/mkinstalldirs
! b93f4e0a6c4ac6dcebda6a3b208b0640  libjava/libtool-version
! bb4946c84fa6cd9a5fdd9b82b6dfbb4f  libjava/link.cc
! f9c7378adc951bb9ebbddc24491dd5f3  libjava/mauve-libgcj
  b9b84e76d51b653c7fec2c1d882759c1  libjava/no-threads.cc
  e760b0ffcb334f44eac33b922cd34c6a  libjava/nogc.cc
! 686c2a1099089ea2d49539098171526f  libjava/org/ietf/jgss/ChannelBinding.java
! 94678d15acdb6a75708c1ee099a111e4  libjava/org/ietf/jgss/GSSContext.java
! 698115a82c0706d61d801b391ace1540  libjava/org/ietf/jgss/GSSCredential.java
! 953a325d58789f36ba08737c3e2604ca  libjava/org/ietf/jgss/GSSException.java
! d150c53e0275c7e50fef25e73a9ba47b  libjava/org/ietf/jgss/GSSManager.java
! 6ce77272343e7325e9b2c8c905e57463  libjava/org/ietf/jgss/GSSName.java
! 94dae48bb4ce6fa1c81c85e454fdc2b6  libjava/org/ietf/jgss/MessageProp.java
! bd4a644c4cb20c85db81c50d8a920369  libjava/org/ietf/jgss/MessagesBundle.properties
! 33d3c0f7a5fbe6bc3611d22a61c7f227  libjava/org/ietf/jgss/Oid.java
! 8bc9c6be20df8421c1a687421fbfde85  libjava/pkg.m4
! 248802787799d624fae7d35a406336bf  libjava/posix-threads.cc
  fbe0da51c9e893762a6e4d2f87868e09  libjava/posix.cc
! fa213b82d8c67d60021936540938e1db  libjava/prims.cc
  db2a6ed9769b185121e611b5727fa40a  libjava/scripts/MakeCharTables.java
  792d88462341952031e20db7cda3ce3f  libjava/scripts/MakeDefaultMimeTypes.java
  cbaa3d7bfdbdbc0826becd3e1ba46591  libjava/scripts/TexinfoDoclet.java
*************** cbaa3d7bfdbdbc0826becd3e1ba46591  libjav
*** 19099,19107 ****
  1e38df4723fb3b54612bfa487c5167ff  libjava/scripts/encodings.pl
  c8714116496fe0e703adf657629a1849  libjava/scripts/mime.types
  935a2f525bf80646e23dc9f4e8dbd7b6  libjava/scripts/showval.java
! e11dc503861119441f3c0a3277f30ba3  libjava/scripts/unicode-blocks.pl
  c242fb9c1ab6ebbbad4784da68e32084  libjava/scripts/unicode-decomp.pl
! 277fb9a95293a0d96c3deaa08cd57fe0  libjava/scripts/unicode-muncher.pl
  022571a9128f917eeb56cccf634885bb  libjava/sysdep/alpha/locks.h
  e55413161338793e68a3308fa3495d95  libjava/sysdep/dwarf2-backtrace.cc
  a9f1ecb8549f2168d406db491508aba4  libjava/sysdep/generic/locks.h
--- 22854,22862 ----
  1e38df4723fb3b54612bfa487c5167ff  libjava/scripts/encodings.pl
  c8714116496fe0e703adf657629a1849  libjava/scripts/mime.types
  935a2f525bf80646e23dc9f4e8dbd7b6  libjava/scripts/showval.java
! 69bfba2b24f0eecb74eef973fb428b60  libjava/scripts/unicode-blocks.pl
  c242fb9c1ab6ebbbad4784da68e32084  libjava/scripts/unicode-decomp.pl
! b35b2124a2f2bc5624c8c9429a287281  libjava/scripts/unicode-muncher.pl
  022571a9128f917eeb56cccf634885bb  libjava/sysdep/alpha/locks.h
  e55413161338793e68a3308fa3495d95  libjava/sysdep/dwarf2-backtrace.cc
  a9f1ecb8549f2168d406db491508aba4  libjava/sysdep/generic/locks.h
*************** a9f1ecb8549f2168d406db491508aba4  libjav
*** 19110,19125 ****
  7bafc37dbb25e4dd175f96dcd450c843  libjava/sysdep/ia64.c
  a13e6e998b97c19921eb8b4083444f17  libjava/sysdep/ia64/locks.h
  8c7a4ebd8370941ecf6cadce018158ba  libjava/sysdep/mips/locks.h
! 9cb09dd936dbe8de799ba79e4a10f091  libjava/sysdep/powerpc/locks.h
  a589e0b072d6eabca190815fdf0c5025  libjava/sysdep/s390/locks.h
  ac9ce4b055928d3a370bea6c7f4d7707  libjava/sysdep/sh/locks.h
  dfe570919fd25f16312d84294242a469  libjava/sysdep/sparc/locks.h
  6201dffba23fd1cbc5c29d3697c1a4b3  libjava/sysdep/x86-64/locks.h
! 6d85a1841127ff90e98c19a5187804e5  libjava/testsuite/ChangeLog
! 6888ab93edb5574f611584d47ba4e7b8  libjava/testsuite/Makefile.am
! 0084ab66ea3cb93dc348616d6b294ad8  libjava/testsuite/Makefile.in
  dce80ba7e038ca18591aabc6d3d2582c  libjava/testsuite/config/default.exp
! 14889fd31eb0dd6bcf1474dd0b99300b  libjava/testsuite/lib/libjava.exp
  1cb376d608ce588877129087d302ad27  libjava/testsuite/libjava.cni/PR9577.java
  e134ced312b3511d88943d57ccd70c83  libjava/testsuite/libjava.cni/PR9577.out
  1306dc378a3efbedd8411f9513e1df23  libjava/testsuite/libjava.cni/cni.exp
--- 22865,22881 ----
  7bafc37dbb25e4dd175f96dcd450c843  libjava/sysdep/ia64.c
  a13e6e998b97c19921eb8b4083444f17  libjava/sysdep/ia64/locks.h
  8c7a4ebd8370941ecf6cadce018158ba  libjava/sysdep/mips/locks.h
! 8e7792aec9389bf61d3d703b3c7ebb75  libjava/sysdep/pa/locks.h
! 994c6ddb7707dbf8b656302426343d01  libjava/sysdep/powerpc/locks.h
  a589e0b072d6eabca190815fdf0c5025  libjava/sysdep/s390/locks.h
  ac9ce4b055928d3a370bea6c7f4d7707  libjava/sysdep/sh/locks.h
  dfe570919fd25f16312d84294242a469  libjava/sysdep/sparc/locks.h
  6201dffba23fd1cbc5c29d3697c1a4b3  libjava/sysdep/x86-64/locks.h
! bd41c02d42e4fcef561d88d14c49efc4  libjava/testsuite/ChangeLog-old
! 8f59570e9be92857b18d3192602f5bad  libjava/testsuite/Makefile.am
! dc30ca3dba416b4b9aec0d203a376976  libjava/testsuite/Makefile.in
  dce80ba7e038ca18591aabc6d3d2582c  libjava/testsuite/config/default.exp
! b9e1e6b2a4362649d6e3d6af9620c1cd  libjava/testsuite/lib/libjava.exp
  1cb376d608ce588877129087d302ad27  libjava/testsuite/libjava.cni/PR9577.java
  e134ced312b3511d88943d57ccd70c83  libjava/testsuite/libjava.cni/PR9577.out
  1306dc378a3efbedd8411f9513e1df23  libjava/testsuite/libjava.cni/cni.exp
*************** c8a0163319ecc15e4af54d3590bb85b5  libjav
*** 19131,19136 ****
--- 22887,22893 ----
  49720fc0c8dd994ae6dd8ceb249fb6d5  libjava/testsuite/libjava.cni/shortfield.java
  cdbf860b28600799275326e02bd11b23  libjava/testsuite/libjava.cni/shortfield.out
  09333b82f0786504109f4895cfb8f3e3  libjava/testsuite/libjava.compile/ArrayClass.java
+ 3b9b23dec0d75ba67bb5369c15a4a52b  libjava/testsuite/libjava.compile/AssertBug.java
  a5d4838cc4a20369f39a7097ed9a8466  libjava/testsuite/libjava.compile/Case.java
  69f89c34d6bed5f67f87c6d6273421b9  libjava/testsuite/libjava.compile/G19990210_1.java
  bf4ca4f4fc3126864655b33f93db104f  libjava/testsuite/libjava.compile/G19990210_2.java
*************** c7f972be4572af91a532a006d11b74d5  libjav
*** 19158,19169 ****
--- 22915,22937 ----
  b977224ff5de64d8393754cee6d9a9a5  libjava/testsuite/libjava.compile/PR13024.java
  a931f49d7e3d41e7c0f35786805a80e3  libjava/testsuite/libjava.compile/PR13237.java
  3fe7a0980a3c3aff4933609cd1e9c95a  libjava/testsuite/libjava.compile/PR1343.java
+ 6b42e0f5d193556362ec44edf4717893  libjava/testsuite/libjava.compile/PR13733.java
+ 7d7ac3fc492c9fabd0b3bcad458d0d80  libjava/testsuite/libjava.compile/PR13733.xfail
  6556d594a180f059697cf66646839220  libjava/testsuite/libjava.compile/PR140.java
  7d7ac3fc492c9fabd0b3bcad458d0d80  libjava/testsuite/libjava.compile/PR140.xfail
+ 12f27a653fbac1fe9a5d82396cfc50e6  libjava/testsuite/libjava.compile/PR14853.java
+ 7d7ac3fc492c9fabd0b3bcad458d0d80  libjava/testsuite/libjava.compile/PR14853.xfail
+ 3b2cd3b1fe0c7403ae5fe61a3314b964  libjava/testsuite/libjava.compile/PR15769.java
+ 024ade4c05a2de15feaa7a48b064ac60  libjava/testsuite/libjava.compile/PR16249.java
  386efa3d54f01e74ebdf0f3e379ed21e  libjava/testsuite/libjava.compile/PR163.java
  7d7ac3fc492c9fabd0b3bcad458d0d80  libjava/testsuite/libjava.compile/PR163.xfail
  728d59f473e372f69e4798f9a06f281a  libjava/testsuite/libjava.compile/PR164.java
  7d7ac3fc492c9fabd0b3bcad458d0d80  libjava/testsuite/libjava.compile/PR164.xfail
+ bef376e148e0924e5191e37810b18e59  libjava/testsuite/libjava.compile/PR16675.java
+ 66bbc86324cd31b36b333bda806e18fc  libjava/testsuite/libjava.compile/PR16701.java
+ fab0f1aeabb09be13f4bdebb24d31f86  libjava/testsuite/libjava.compile/PR19277.java
+ 7d7ac3fc492c9fabd0b3bcad458d0d80  libjava/testsuite/libjava.compile/PR19277.xfail
+ 55ca5bc1edeacb3a7dbffe086871eede  libjava/testsuite/libjava.compile/PR19295.java
  52a8a74e666e84761a591fd8bd75a6d9  libjava/testsuite/libjava.compile/PR206.java
  031ad78781d9520a98815b45f57ed6c8  libjava/testsuite/libjava.compile/PR207.java
  ebbbe8ca236b53f91e4a7d3fa731f2b7  libjava/testsuite/libjava.compile/PR207.xfail
*************** e89c5072f9fef9503bbc86f56ce02885  libjav
*** 19221,19227 ****
  60c4fb7237ab30c911010096829c3f6b  libjava/testsuite/libjava.compile/iface.java
  836b0107bbdef24338b7f6061bdc27ee  libjava/testsuite/libjava.compile/inner_1.java
  aa55c577228e76512665593c1e5bb889  libjava/testsuite/libjava.compile/inner_1.xfail
! 47a8e8374f0f7ac1a3ed62e5e4567cf5  libjava/testsuite/libjava.compile/inner_data.java
  143503687d5acfec8dc31eff05f3deda  libjava/testsuite/libjava.compile/inner_inherit.java
  c973e1cfca9de778d74fbb4befea5679  libjava/testsuite/libjava.compile/inner_priv.java
  a29bb9ff91034870d96c389c19660c1c  libjava/testsuite/libjava.compile/inner_pub.java
--- 22989,22995 ----
  60c4fb7237ab30c911010096829c3f6b  libjava/testsuite/libjava.compile/iface.java
  836b0107bbdef24338b7f6061bdc27ee  libjava/testsuite/libjava.compile/inner_1.java
  aa55c577228e76512665593c1e5bb889  libjava/testsuite/libjava.compile/inner_1.xfail
! 4807666b37803956dd03fd6aeb2ffff6  libjava/testsuite/libjava.compile/inner_data.java
  143503687d5acfec8dc31eff05f3deda  libjava/testsuite/libjava.compile/inner_inherit.java
  c973e1cfca9de778d74fbb4befea5679  libjava/testsuite/libjava.compile/inner_priv.java
  a29bb9ff91034870d96c389c19660c1c  libjava/testsuite/libjava.compile/inner_pub.java
*************** e28d53461aae66ed010e16a31f3b7ca7  libjav
*** 19233,19242 ****
  ebbbe8ca236b53f91e4a7d3fa731f2b7  libjava/testsuite/libjava.compile/not_a_redef.xfail
  1bb3641cca10a6f451a23f72bf6da9ed  libjava/testsuite/libjava.compile/perc.java
  ad8b3ab2ecb09c0fd4203bf3935ee7fb  libjava/testsuite/libjava.compile/plusplus.java
! 5c4ba69571326205dd263aa81d8ba1df  libjava/testsuite/libjava.compile/pr10459.java
! 8724c3d21b1817aa082f873270935d43  libjava/testsuite/libjava.compile/pr10459_2.java
  eb6c1ee34c963fb2ac815607a7d671ab  libjava/testsuite/libjava.compile/pr172.java
  2875fca945451b336cf96c88b810b568  libjava/testsuite/libjava.compile/pr174.java
  4e4be9339df603ff73a4ee1196d769cb  libjava/testsuite/libjava.compile/pr176.java
  9a95fdd926ef9e3e5af452a653c82691  libjava/testsuite/libjava.compile/pr7912.java
  b8a1d9b1c3beb3470510393e035c29b4  libjava/testsuite/libjava.compile/pr8712.java
--- 23001,23013 ----
  ebbbe8ca236b53f91e4a7d3fa731f2b7  libjava/testsuite/libjava.compile/not_a_redef.xfail
  1bb3641cca10a6f451a23f72bf6da9ed  libjava/testsuite/libjava.compile/perc.java
  ad8b3ab2ecb09c0fd4203bf3935ee7fb  libjava/testsuite/libjava.compile/plusplus.java
! 01414a39592eabf7fb2a38ca381d8579  libjava/testsuite/libjava.compile/pr10459.java
! cad3fa9e48e6c5af1c8bd55dcbc61cc2  libjava/testsuite/libjava.compile/pr15656.java
! 7d7ac3fc492c9fabd0b3bcad458d0d80  libjava/testsuite/libjava.compile/pr15656.xfail
  eb6c1ee34c963fb2ac815607a7d671ab  libjava/testsuite/libjava.compile/pr172.java
+ 3600a7241835c0ea1f4f460fa749660a  libjava/testsuite/libjava.compile/pr17329.java
  2875fca945451b336cf96c88b810b568  libjava/testsuite/libjava.compile/pr174.java
+ 57428afd99e5a5de4a1054e5a86c612c  libjava/testsuite/libjava.compile/pr17500.java
  4e4be9339df603ff73a4ee1196d769cb  libjava/testsuite/libjava.compile/pr176.java
  9a95fdd926ef9e3e5af452a653c82691  libjava/testsuite/libjava.compile/pr7912.java
  b8a1d9b1c3beb3470510393e035c29b4  libjava/testsuite/libjava.compile/pr8712.java
*************** e8945a4a04112ba90c2af941b65d4493  libjav
*** 19273,19291 ****
  7be21a485236c91ab419fc18b66782a6  libjava/testsuite/libjava.compile/weirddecl.java
  ebbbe8ca236b53f91e4a7d3fa731f2b7  libjava/testsuite/libjava.compile/weirddecl.xfail
  282a2574b51bd991355217a4881aef9e  libjava/testsuite/libjava.compile/zeroexp.java
! 04649931270ed0bc85751b5bdb48e2a5  libjava/testsuite/libjava.jacks/jacks.exp
! fa0783d59b17127d8c21204637534651  libjava/testsuite/libjava.jacks/jacks.xfail
! 3a8b54ee967ad4383251a1d2b5a66f58  libjava/testsuite/libjava.jar/jar.exp
  c95a29b2bd827bf60f47c9fbd5a55635  libjava/testsuite/libjava.jar/simple.jar
  c08e241c192d631497bded5926a907ff  libjava/testsuite/libjava.jar/simple.java
  764efa883dda1e11db47671c4a3bbd9e  libjava/testsuite/libjava.jar/simple.out
  ee2a77e44d143d39c04dd594fdcfdff6  libjava/testsuite/libjava.jar/simple.xfail
  83157c3f7dad7370e8d751c2487646e1  libjava/testsuite/libjava.jni/calls.c
  7622e1b80664287c26cfb1870073dd9f  libjava/testsuite/libjava.jni/calls.java
  d1dfae7c07d22c3065547fc0f7306d34  libjava/testsuite/libjava.jni/calls.out
  41928db3f21c76793dc817ea3866cb53  libjava/testsuite/libjava.jni/cxxtest.cc
  0f4dab19e4cad13a9f7595fd3f068b3c  libjava/testsuite/libjava.jni/cxxtest.java
  74d9a83219cabaab06a69fd318873f33  libjava/testsuite/libjava.jni/cxxtest.out
  e3e0905f9fb1bb4867c55b16f44769a6  libjava/testsuite/libjava.jni/field.c
  7e792a30189173ea8982baa88d2d27e6  libjava/testsuite/libjava.jni/field.java
  74d9a83219cabaab06a69fd318873f33  libjava/testsuite/libjava.jni/field.out
--- 23044,23074 ----
  7be21a485236c91ab419fc18b66782a6  libjava/testsuite/libjava.compile/weirddecl.java
  ebbbe8ca236b53f91e4a7d3fa731f2b7  libjava/testsuite/libjava.compile/weirddecl.xfail
  282a2574b51bd991355217a4881aef9e  libjava/testsuite/libjava.compile/zeroexp.java
! e54d6484becb823de24eb82dada64bc0  libjava/testsuite/libjava.jacks/jacks.exp
! 2e00274b3b4defa8008a9246f9872ecb  libjava/testsuite/libjava.jacks/jacks.xfail
! 864ca283cb0c81106a6f7b450886ec4d  libjava/testsuite/libjava.jar/jar.exp
  c95a29b2bd827bf60f47c9fbd5a55635  libjava/testsuite/libjava.jar/simple.jar
  c08e241c192d631497bded5926a907ff  libjava/testsuite/libjava.jar/simple.java
  764efa883dda1e11db47671c4a3bbd9e  libjava/testsuite/libjava.jar/simple.out
  ee2a77e44d143d39c04dd594fdcfdff6  libjava/testsuite/libjava.jar/simple.xfail
+ fb59ae9e895ddf1e0420e286e7c3c990  libjava/testsuite/libjava.jni/PR15133.c
+ 333ed819b54cab7a5debc163a6833e85  libjava/testsuite/libjava.jni/PR15133.java
+ 0133314d0a03cbd9fb3beb51617eb8a0  libjava/testsuite/libjava.jni/PR15133.out
+ 7c56b4c57e97b69d24b7821a14d05392  libjava/testsuite/libjava.jni/PR18116.c
+ 5b5173b2b5bc7fd610a822ba29fd7dff  libjava/testsuite/libjava.jni/PR18116.java
+ 41d9737bc75ae8fa57b7a84a44fba01c  libjava/testsuite/libjava.jni/PR18116.out
+ 88a5b2588ce7003411a62a735ef84afc  libjava/testsuite/libjava.jni/bytebuffer.c
+ 81dc8c33f90768b5cc35ba1b141c8492  libjava/testsuite/libjava.jni/bytebuffer.java
+ 0fb1b20b2ef8ce35a9247dc06267cfb5  libjava/testsuite/libjava.jni/bytebuffer.out
  83157c3f7dad7370e8d751c2487646e1  libjava/testsuite/libjava.jni/calls.c
  7622e1b80664287c26cfb1870073dd9f  libjava/testsuite/libjava.jni/calls.java
  d1dfae7c07d22c3065547fc0f7306d34  libjava/testsuite/libjava.jni/calls.out
  41928db3f21c76793dc817ea3866cb53  libjava/testsuite/libjava.jni/cxxtest.cc
  0f4dab19e4cad13a9f7595fd3f068b3c  libjava/testsuite/libjava.jni/cxxtest.java
  74d9a83219cabaab06a69fd318873f33  libjava/testsuite/libjava.jni/cxxtest.out
+ 32b3b2cea86bc03b5237d0728f1d38fb  libjava/testsuite/libjava.jni/directbuffer.c
+ 2cd5c78bd92dd53e6248a3ed2bb31645  libjava/testsuite/libjava.jni/directbuffer.java
+ 787d7d5d288fe740848c55fc4f43fc03  libjava/testsuite/libjava.jni/directbuffer.out
  e3e0905f9fb1bb4867c55b16f44769a6  libjava/testsuite/libjava.jni/field.c
  7e792a30189173ea8982baa88d2d27e6  libjava/testsuite/libjava.jni/field.java
  74d9a83219cabaab06a69fd318873f33  libjava/testsuite/libjava.jni/field.out
*************** cfee37cc09ac4a762cca29c4995ad01a  libjav
*** 19295,19304 ****
  395ab5e2091ac5fc84f212ee40e77932  libjava/testsuite/libjava.jni/findclass.c
  629eaacb1744ff558b35cf22d1d4d52e  libjava/testsuite/libjava.jni/findclass.java
  2c93280ac465fb4ac7995b4de82a569b  libjava/testsuite/libjava.jni/findclass.out
  da33008a788fb5f5827a66450521e314  libjava/testsuite/libjava.jni/invoke.c
  f7b0b30783fc45050cda4c538d6ac815  libjava/testsuite/libjava.jni/invoke.java
  bef8cafe5513c6677e1d68b5123f7244  libjava/testsuite/libjava.jni/invoke.out
! 2d5a4a92e472a0b91d1e38211ed731d5  libjava/testsuite/libjava.jni/jni.exp
  30671cc206534ecc057603b5591e34f9  libjava/testsuite/libjava.jni/jniutf.c
  ac325c49f0d5d2866ec91cde65940bcb  libjava/testsuite/libjava.jni/jniutf.java
  d41d8cd98f00b204e9800998ecf8427e  libjava/testsuite/libjava.jni/jniutf.out
--- 23078,23093 ----
  395ab5e2091ac5fc84f212ee40e77932  libjava/testsuite/libjava.jni/findclass.c
  629eaacb1744ff558b35cf22d1d4d52e  libjava/testsuite/libjava.jni/findclass.java
  2c93280ac465fb4ac7995b4de82a569b  libjava/testsuite/libjava.jni/findclass.out
+ 2a446e7df6e41531751fbc8ecac96237  libjava/testsuite/libjava.jni/iface.c
+ 38e8b81a00dcbd3e63ecf154ef5169fb  libjava/testsuite/libjava.jni/iface.java
+ 0f186e3f517ed8ad3335f1607cb8233c  libjava/testsuite/libjava.jni/iface.out
+ 1f9a2b672fe9864c9703ecae413cedef  libjava/testsuite/libjava.jni/invocation/PR16923.c
+ 5fb94bb32e53dc601cee5110f996803a  libjava/testsuite/libjava.jni/invocation/PR16923.java
+ 5dbba49775c6035195438134d5bb0060  libjava/testsuite/libjava.jni/invocation/PR16923.out
  da33008a788fb5f5827a66450521e314  libjava/testsuite/libjava.jni/invoke.c
  f7b0b30783fc45050cda4c538d6ac815  libjava/testsuite/libjava.jni/invoke.java
  bef8cafe5513c6677e1d68b5123f7244  libjava/testsuite/libjava.jni/invoke.out
! f20f3cbf1386eead03bf3624d62a7968  libjava/testsuite/libjava.jni/jni.exp
  30671cc206534ecc057603b5591e34f9  libjava/testsuite/libjava.jni/jniutf.c
  ac325c49f0d5d2866ec91cde65940bcb  libjava/testsuite/libjava.jni/jniutf.java
  d41d8cd98f00b204e9800998ecf8427e  libjava/testsuite/libjava.jni/jniutf.out
*************** e4958ed2a88a1b0d6d6fe02ebe4877c5  libjav
*** 19312,19318 ****
  b54cf73a9d5b56b6edd1a17d37451d46  libjava/testsuite/libjava.jni/overload.java
  0a88863510308751293f4b91afc07dd6  libjava/testsuite/libjava.jni/overload.out
  8abd0d13249e576e3196609578d9d286  libjava/testsuite/libjava.jni/pr11951.c
! 8db2da86f1d15bb04dece85d31918335  libjava/testsuite/libjava.jni/pr11951.java
  b026324c6904b2a9cb4b88d6d61c81d1  libjava/testsuite/libjava.jni/pr11951.out
  7953020be25f14fdcb11f898f0501d9d  libjava/testsuite/libjava.jni/register.c
  b9574c77e7e46b76c2018263e0b03459  libjava/testsuite/libjava.jni/register.java
--- 23101,23107 ----
  b54cf73a9d5b56b6edd1a17d37451d46  libjava/testsuite/libjava.jni/overload.java
  0a88863510308751293f4b91afc07dd6  libjava/testsuite/libjava.jni/overload.out
  8abd0d13249e576e3196609578d9d286  libjava/testsuite/libjava.jni/pr11951.c
! a3b997591d55498eb3e19692584c8709  libjava/testsuite/libjava.jni/pr11951.java
  b026324c6904b2a9cb4b88d6d61c81d1  libjava/testsuite/libjava.jni/pr11951.out
  7953020be25f14fdcb11f898f0501d9d  libjava/testsuite/libjava.jni/register.c
  b9574c77e7e46b76c2018263e0b03459  libjava/testsuite/libjava.jni/register.java
*************** d42f2da1df5ecdf29be4ac27edda0c12  libjav
*** 19346,19351 ****
--- 23135,23141 ----
  d3b81b9b9fae3bb2fd0477f4f1f1035f  libjava/testsuite/libjava.lang/Divide_1.out
  cbaf0b2f425f8f339a4df35727daf519  libjava/testsuite/libjava.lang/EvaluationOrder.java
  2027eccd5c1ef67110ce54dc72663358  libjava/testsuite/libjava.lang/EvaluationOrder.out
+ 1a14588faeddfc4fd9fff7baea1f46a7  libjava/testsuite/libjava.lang/ExtraClassLoader.java
  f650f5ae06b03c378a1e3b846c95c060  libjava/testsuite/libjava.lang/FileHandleGcTest.java
  d41d8cd98f00b204e9800998ecf8427e  libjava/testsuite/libjava.lang/FileHandleGcTest.out
  0594baa3d33ce5e686c76d9ea8c971eb  libjava/testsuite/libjava.lang/Final.java
*************** e1a3ffce8e8c34a5590a3d8e913984ca  libjav
*** 19368,19373 ****
--- 23158,23165 ----
  e2665feebe35bc97aff1b329c87b87e7  libjava/testsuite/libjava.lang/II.out
  ca06b788dc2d7a1e87dac810bba0604f  libjava/testsuite/libjava.lang/InterfaceDispatch.java
  437883b33ea8a6223a0feab71aaf97e5  libjava/testsuite/libjava.lang/InterfaceDispatch.out
+ 65fe0816f69d9716f79a2cb79a857a0f  libjava/testsuite/libjava.lang/InvokeInterface.java
+ 885a85669506b0d7209bb38da3054845  libjava/testsuite/libjava.lang/InvokeInterface.out
  6573370822df7d2b418b7808eca2f027  libjava/testsuite/libjava.lang/InvokeReturn.java
  d7a3c2d3fb95fa375143a3b182bb9d02  libjava/testsuite/libjava.lang/InvokeReturn.out
  14fb72e13742f95c124420fab2dca71b  libjava/testsuite/libjava.lang/Invoke_1.java
*************** eff5bc1ef8ec9d03e640fc4370f5eacd  libjav
*** 19376,19382 ****
  03273e801f6716a852d6c3d0fcffa464  libjava/testsuite/libjava.lang/Invoke_2.out
  24b04d5eb47a899da35158d4c00648f5  libjava/testsuite/libjava.lang/KeepInline.java
  aa7b7a2ca452ba27d1227601a5086f04  libjava/testsuite/libjava.lang/KeepInline.out
! f4f95b2aa7758d5718c3bdfc2cc62ded  libjava/testsuite/libjava.lang/MathBuiltin.java
  d41d8cd98f00b204e9800998ecf8427e  libjava/testsuite/libjava.lang/MathBuiltin.out
  f0cf69da172606d403548ebf264a1539  libjava/testsuite/libjava.lang/Matrix4f.java
  a61548b10908a6294e6d5f3fc3c0d37e  libjava/testsuite/libjava.lang/Matrix4f.out
--- 23168,23176 ----
  03273e801f6716a852d6c3d0fcffa464  libjava/testsuite/libjava.lang/Invoke_2.out
  24b04d5eb47a899da35158d4c00648f5  libjava/testsuite/libjava.lang/KeepInline.java
  aa7b7a2ca452ba27d1227601a5086f04  libjava/testsuite/libjava.lang/KeepInline.out
! 9c03c79fe08ddb82e652e9436d5c4d66  libjava/testsuite/libjava.lang/LargeFile.java
! d36f8f9425c4a8000ad9c4a97185aca5  libjava/testsuite/libjava.lang/LargeFile.out
! ed1ea2cfbe47607b9242105c2012bba6  libjava/testsuite/libjava.lang/MathBuiltin.java
  d41d8cd98f00b204e9800998ecf8427e  libjava/testsuite/libjava.lang/MathBuiltin.out
  f0cf69da172606d403548ebf264a1539  libjava/testsuite/libjava.lang/Matrix4f.java
  a61548b10908a6294e6d5f3fc3c0d37e  libjava/testsuite/libjava.lang/Matrix4f.out
*************** cbd2972e1589a6a6eb0f8e5baa706aa3  libjav
*** 19404,19409 ****
--- 23198,23211 ----
  eff5bc1ef8ec9d03e640fc4370f5eacd  libjava/testsuite/libjava.lang/PR160.out
  b42c8ec1d8f17b803721718edef8321d  libjava/testsuite/libjava.lang/PR162.java
  452d9875273266b1320cecd01f8d2970  libjava/testsuite/libjava.lang/PR162.out
+ 4ce3998bef54248f3741fe302004d64d  libjava/testsuite/libjava.lang/PR16867.java
+ d36f8f9425c4a8000ad9c4a97185aca5  libjava/testsuite/libjava.lang/PR16867.out
+ 035fb00b9a72d270c64769176f21759a  libjava/testsuite/libjava.lang/PR18699.java
+ d41d8cd98f00b204e9800998ecf8427e  libjava/testsuite/libjava.lang/PR18699.out
+ efdd3753c16123ffa54010dc417277fe  libjava/testsuite/libjava.lang/PR19921.java
+ d41d8cd98f00b204e9800998ecf8427e  libjava/testsuite/libjava.lang/PR19921.out
+ ac7fc8c4f3352c3512125fa4dd6fbddd  libjava/testsuite/libjava.lang/PR20056.java
+ a3621b018e06e0006aad798701202303  libjava/testsuite/libjava.lang/PR20056.out
  7a72d5b70456ac5b2f2feb12c97a3961  libjava/testsuite/libjava.lang/PR218.java
  dfd622aec684e9846731bc8751ca9695  libjava/testsuite/libjava.lang/PR218.out
  4f3d10d20fb717263a576b5fa7af3583  libjava/testsuite/libjava.lang/PR242.java
*************** a1835a578b921e17538cace01af98106  libjav
*** 19434,19439 ****
--- 23236,23255 ----
  cfda42d899ba4c3fe02f048985da721b  libjava/testsuite/libjava.lang/PR7482.java
  d41d8cd98f00b204e9800998ecf8427e  libjava/testsuite/libjava.lang/PR7482.out
  a4c24a5d4753d3b88181540ff0d29f0d  libjava/testsuite/libjava.lang/PR8866.java
+ d0f8f4b2dd6e87fd7310475cc16c872b  libjava/testsuite/libjava.lang/Process_1.java
+ eff5bc1ef8ec9d03e640fc4370f5eacd  libjava/testsuite/libjava.lang/Process_1.out
+ fcda6544405659a009e729ec41c6e5b8  libjava/testsuite/libjava.lang/Process_2.java
+ eff5bc1ef8ec9d03e640fc4370f5eacd  libjava/testsuite/libjava.lang/Process_2.out
+ cdb70005e79d5713fbab505c1e147607  libjava/testsuite/libjava.lang/Process_3.java
+ eff5bc1ef8ec9d03e640fc4370f5eacd  libjava/testsuite/libjava.lang/Process_3.out
+ cd4e563acc7046a189f45fa205510c6c  libjava/testsuite/libjava.lang/Process_4.java
+ eff5bc1ef8ec9d03e640fc4370f5eacd  libjava/testsuite/libjava.lang/Process_4.out
+ 83ba32f9d21ff4803d42610a83bdc8fe  libjava/testsuite/libjava.lang/Process_5.java
+ eff5bc1ef8ec9d03e640fc4370f5eacd  libjava/testsuite/libjava.lang/Process_5.out
+ 78039d6c448ffc08f9d10738d4d358a4  libjava/testsuite/libjava.lang/Process_6.java
+ eff5bc1ef8ec9d03e640fc4370f5eacd  libjava/testsuite/libjava.lang/Process_6.out
+ 9577017e6d1782cd14c4189f566cce77  libjava/testsuite/libjava.lang/Serialization.java
+ 1aa52d3293cb803d8be1da3f4d0c54e9  libjava/testsuite/libjava.lang/Serialization.out
  3bf92d17f9aebe13b57e9491a03ff2c6  libjava/testsuite/libjava.lang/Shazam.java
  edf87bad98887f0ee68c07441f77029c  libjava/testsuite/libjava.lang/Shazam.out
  a8a8ed5d48e477d01ca2aff94753abfc  libjava/testsuite/libjava.lang/StaticConstructor.java
*************** eff5bc1ef8ec9d03e640fc4370f5eacd  libjav
*** 19451,19483 ****
  b16e52327db0f6d4de8161d14ff556c2  libjava/testsuite/libjava.lang/SyncTest.xfail
  432217da2cc38d91fc6923171675286f  libjava/testsuite/libjava.lang/Synch.java
  5b5af20a92f1dbe92328005329d1753f  libjava/testsuite/libjava.lang/Synch.out
! 9a5120a63a292aebaaba8c86bb7412fd  libjava/testsuite/libjava.lang/TLtest.java
  c1747864bded548039ce844811c45883  libjava/testsuite/libjava.lang/TLtest.out
  b16e52327db0f6d4de8161d14ff556c2  libjava/testsuite/libjava.lang/TLtest.xfail
  e9b9bd3917fd621b390b3727721aaee1  libjava/testsuite/libjava.lang/TestProxy.java
  41d9737bc75ae8fa57b7a84a44fba01c  libjava/testsuite/libjava.lang/TestProxy.out
! ddf64266bbc7e12d936897d95280bd5a  libjava/testsuite/libjava.lang/Thread_Alive.java
  07e7a58356a7f50471d15da3ebd74658  libjava/testsuite/libjava.lang/Thread_Alive.out
  b16e52327db0f6d4de8161d14ff556c2  libjava/testsuite/libjava.lang/Thread_Alive.xfail
! 675cf446ecd1d3bffb776409da1e36a6  libjava/testsuite/libjava.lang/Thread_Interrupt.java
  6e88cad7b5dad2b3b2af07ad790f07a8  libjava/testsuite/libjava.lang/Thread_Interrupt.out
  b16e52327db0f6d4de8161d14ff556c2  libjava/testsuite/libjava.lang/Thread_Interrupt.xfail
! 09c99cb8c414125dd31e3493d8382b17  libjava/testsuite/libjava.lang/Thread_Join.java
  74b49c07018eec9a7523bbbebffe40c6  libjava/testsuite/libjava.lang/Thread_Join.out
  b16e52327db0f6d4de8161d14ff556c2  libjava/testsuite/libjava.lang/Thread_Join.xfail
! dc32713433f1290b0f4079bf78aca6a8  libjava/testsuite/libjava.lang/Thread_Monitor.java
  eff5bc1ef8ec9d03e640fc4370f5eacd  libjava/testsuite/libjava.lang/Thread_Monitor.out
  b16e52327db0f6d4de8161d14ff556c2  libjava/testsuite/libjava.lang/Thread_Monitor.xfail
! c5f50e15983ff24e8bed8621e31b0caf  libjava/testsuite/libjava.lang/Thread_Sleep.java
  163960aa0a79e533931326a79a9992d1  libjava/testsuite/libjava.lang/Thread_Sleep.out
  b16e52327db0f6d4de8161d14ff556c2  libjava/testsuite/libjava.lang/Thread_Sleep.xfail
! 5dcf4f474ae0162baba6d64f8e59aacb  libjava/testsuite/libjava.lang/Thread_Wait.java
  153dc8f5c0559d4f2e3e8f1bbcf28d37  libjava/testsuite/libjava.lang/Thread_Wait.out
  b16e52327db0f6d4de8161d14ff556c2  libjava/testsuite/libjava.lang/Thread_Wait.xfail
! ffa4b481c63cfa548da02c4a7d67b908  libjava/testsuite/libjava.lang/Thread_Wait_2.java
  f8af340dcd3e9ceb7b2ece1880781622  libjava/testsuite/libjava.lang/Thread_Wait_2.out
  b16e52327db0f6d4de8161d14ff556c2  libjava/testsuite/libjava.lang/Thread_Wait_2.xfail
! a0b6c3576ae82814ebaeb7925e4df23e  libjava/testsuite/libjava.lang/Thread_Wait_Interrupt.java
  635de9d7d058f9f2ec6ac376423b3d61  libjava/testsuite/libjava.lang/Thread_Wait_Interrupt.out
  b16e52327db0f6d4de8161d14ff556c2  libjava/testsuite/libjava.lang/Thread_Wait_Interrupt.xfail
  36e6045b149d6d1a4f9ef81927d72959  libjava/testsuite/libjava.lang/Throw_1.java
--- 23267,23301 ----
  b16e52327db0f6d4de8161d14ff556c2  libjava/testsuite/libjava.lang/SyncTest.xfail
  432217da2cc38d91fc6923171675286f  libjava/testsuite/libjava.lang/Synch.java
  5b5af20a92f1dbe92328005329d1753f  libjava/testsuite/libjava.lang/Synch.out
! 1b8e91e1d973d473116254aebeeca2bb  libjava/testsuite/libjava.lang/TLtest.java
  c1747864bded548039ce844811c45883  libjava/testsuite/libjava.lang/TLtest.out
  b16e52327db0f6d4de8161d14ff556c2  libjava/testsuite/libjava.lang/TLtest.xfail
  e9b9bd3917fd621b390b3727721aaee1  libjava/testsuite/libjava.lang/TestProxy.java
  41d9737bc75ae8fa57b7a84a44fba01c  libjava/testsuite/libjava.lang/TestProxy.out
! 5712226f1e5c9428e728e754955e16e0  libjava/testsuite/libjava.lang/Thread_Alive.java
  07e7a58356a7f50471d15da3ebd74658  libjava/testsuite/libjava.lang/Thread_Alive.out
  b16e52327db0f6d4de8161d14ff556c2  libjava/testsuite/libjava.lang/Thread_Alive.xfail
! 870697a2810fa1128899511ee67877b3  libjava/testsuite/libjava.lang/Thread_HoldsLock.java
! f14aa78d71c525a2958f0a83b8fd075b  libjava/testsuite/libjava.lang/Thread_HoldsLock.out
! 9ea7f48aaa006f1c8373e63c16ce4fa6  libjava/testsuite/libjava.lang/Thread_Interrupt.java
  6e88cad7b5dad2b3b2af07ad790f07a8  libjava/testsuite/libjava.lang/Thread_Interrupt.out
  b16e52327db0f6d4de8161d14ff556c2  libjava/testsuite/libjava.lang/Thread_Interrupt.xfail
! 043ac10b6f079e278f346383ee9d001f  libjava/testsuite/libjava.lang/Thread_Join.java
  74b49c07018eec9a7523bbbebffe40c6  libjava/testsuite/libjava.lang/Thread_Join.out
  b16e52327db0f6d4de8161d14ff556c2  libjava/testsuite/libjava.lang/Thread_Join.xfail
! 01b64b38aa4089353b0cdb890cfb432f  libjava/testsuite/libjava.lang/Thread_Monitor.java
  eff5bc1ef8ec9d03e640fc4370f5eacd  libjava/testsuite/libjava.lang/Thread_Monitor.out
  b16e52327db0f6d4de8161d14ff556c2  libjava/testsuite/libjava.lang/Thread_Monitor.xfail
! b2483ed3f74fce5c1e513064fe383dc9  libjava/testsuite/libjava.lang/Thread_Sleep.java
  163960aa0a79e533931326a79a9992d1  libjava/testsuite/libjava.lang/Thread_Sleep.out
  b16e52327db0f6d4de8161d14ff556c2  libjava/testsuite/libjava.lang/Thread_Sleep.xfail
! d18b5b5eb8dc4b4edc902cd2d63f1d6d  libjava/testsuite/libjava.lang/Thread_Wait.java
  153dc8f5c0559d4f2e3e8f1bbcf28d37  libjava/testsuite/libjava.lang/Thread_Wait.out
  b16e52327db0f6d4de8161d14ff556c2  libjava/testsuite/libjava.lang/Thread_Wait.xfail
! a341e6ce36f7c275f1ba289f5b902dcc  libjava/testsuite/libjava.lang/Thread_Wait_2.java
  f8af340dcd3e9ceb7b2ece1880781622  libjava/testsuite/libjava.lang/Thread_Wait_2.out
  b16e52327db0f6d4de8161d14ff556c2  libjava/testsuite/libjava.lang/Thread_Wait_2.xfail
! 4262d81934276cfcbd0f046bc25f7bf4  libjava/testsuite/libjava.lang/Thread_Wait_Interrupt.java
  635de9d7d058f9f2ec6ac376423b3d61  libjava/testsuite/libjava.lang/Thread_Wait_Interrupt.out
  b16e52327db0f6d4de8161d14ff556c2  libjava/testsuite/libjava.lang/Thread_Wait_Interrupt.xfail
  36e6045b149d6d1a4f9ef81927d72959  libjava/testsuite/libjava.lang/Throw_1.java
*************** ac3118f66b5a1ad1fb26882a03c71dc4  libjav
*** 19504,19509 ****
--- 23322,23331 ----
  649ee93d50739c656e94ec88a32c7ffe  libjava/testsuite/libjava.lang/anonarray3.out
  1618de4122a955b7474ab9f2c5374be1  libjava/testsuite/libjava.lang/assign.java
  d41d8cd98f00b204e9800998ecf8427e  libjava/testsuite/libjava.lang/assign.out
+ 344ce7c872d1d2fd4e0fc5749fbdde8f  libjava/testsuite/libjava.lang/assign2.java
+ d7f986677d9f563bd1794b09d82206a3  libjava/testsuite/libjava.lang/assign2.out
+ de13d0c112f0a616ad488e96f3ba9625  libjava/testsuite/libjava.lang/bytearray.java
+ 84310ba59c5ea6a482f2d4b3b2815e3a  libjava/testsuite/libjava.lang/bytearray.out
  b575c7ca1af482f8f4264b3959aa6750  libjava/testsuite/libjava.lang/direct_read.java
  2836a2d7ee5be374147de328f2065ade  libjava/testsuite/libjava.lang/direct_read.out
  4cb191f83ddd7d6ee00ec3973e354074  libjava/testsuite/libjava.lang/direct_write.java
*************** d36f8f9425c4a8000ad9c4a97185aca5  libjav
*** 19520,19525 ****
--- 23342,23349 ----
  d36f8f9425c4a8000ad9c4a97185aca5  libjava/testsuite/libjava.lang/err12.out
  a5ac7f26ae0ca63fd98b1b4cc253822f  libjava/testsuite/libjava.lang/err13.java
  d36f8f9425c4a8000ad9c4a97185aca5  libjava/testsuite/libjava.lang/err13.out
+ 04944990027eeeef2a20d210e709ecba  libjava/testsuite/libjava.lang/err14.java
+ 467ac65ba436651a3b488cd0e476770d  libjava/testsuite/libjava.lang/err14.out
  13644712a05cf609802b4d5284c3acfe  libjava/testsuite/libjava.lang/err2.java
  d36f8f9425c4a8000ad9c4a97185aca5  libjava/testsuite/libjava.lang/err2.out
  b6d748ab6976356fde1772a015bc545f  libjava/testsuite/libjava.lang/err3.java
*************** ccf641b288a5f9436feaf584c8a34cf2  libjav
*** 19579,19584 ****
--- 23403,23410 ----
  fcae581adf643a0dbf10a1ef41018502  libjava/testsuite/libjava.lang/klass.java
  74d9a83219cabaab06a69fd318873f33  libjava/testsuite/libjava.lang/klass.out
  1bbf4663538039d8d2248395cc68261e  libjava/testsuite/libjava.lang/lang.exp
+ 40b3fc1f6dfdb3585baeef4f3e5d6f55  libjava/testsuite/libjava.lang/md5test.java
+ bd77fa0ef9ba55b53cdd2f0441c62763  libjava/testsuite/libjava.lang/md5test.out
  eaf34fa46f5786b6d53ee0322f4db9bf  libjava/testsuite/libjava.lang/multiple_finit.java
  37be3ea12a0d04f6a37ba138874e8edd  libjava/testsuite/libjava.lang/multiple_finit.out
  70b66dec3c0e5b38c6a357e2736f84f7  libjava/testsuite/libjava.lang/negzero.java
*************** ec4aab475ce80bfd5469640c71b17108  libjav
*** 19593,19601 ****
  58e9c7f508c6615472fb17ccb2eba32c  libjava/testsuite/libjava.lang/pr100.xpo
  f5ba8de422a2c5c80bd98d7e688f0e98  libjava/testsuite/libjava.lang/pr109.java
  857f2261690a2305dba03062e778a73b  libjava/testsuite/libjava.lang/pr109.out
  325534b33eb96a4b84a41c27d6494897  libjava/testsuite/libjava.lang/pr133.java
  cb4fd8dcab0bef425a0aed90eac0de21  libjava/testsuite/libjava.lang/pr133.out
! 01befbacf8619dff8d2fbc319ac320cc  libjava/testsuite/libjava.lang/pr179.java
  29288e294f89ce551732ba7e46a1d068  libjava/testsuite/libjava.lang/pr179.out
  78329f1aefb96107aa5f709fabcd3a06  libjava/testsuite/libjava.lang/pr184.java
  dfd622aec684e9846731bc8751ca9695  libjava/testsuite/libjava.lang/pr184.out
--- 23419,23437 ----
  58e9c7f508c6615472fb17ccb2eba32c  libjava/testsuite/libjava.lang/pr100.xpo
  f5ba8de422a2c5c80bd98d7e688f0e98  libjava/testsuite/libjava.lang/pr109.java
  857f2261690a2305dba03062e778a73b  libjava/testsuite/libjava.lang/pr109.out
+ 98a9b74e44935354704b27c4958de353  libjava/testsuite/libjava.lang/pr13107.java
+ d41d8cd98f00b204e9800998ecf8427e  libjava/testsuite/libjava.lang/pr13107.out
+ 0f3776294902428ad4763442d240ef3e  libjava/testsuite/libjava.lang/pr13107_2.java
+ d41d8cd98f00b204e9800998ecf8427e  libjava/testsuite/libjava.lang/pr13107_2.out
+ 4502a86acab330365d096036cf6c5569  libjava/testsuite/libjava.lang/pr13107_2.xfail
+ 02211531c27fefca9425d2c98ec8e7eb  libjava/testsuite/libjava.lang/pr13107_3.java
+ 897316929176464ebc9ad085f31e7284  libjava/testsuite/libjava.lang/pr13107_3.out
+ 4502a86acab330365d096036cf6c5569  libjava/testsuite/libjava.lang/pr13107_3.xfail
  325534b33eb96a4b84a41c27d6494897  libjava/testsuite/libjava.lang/pr133.java
  cb4fd8dcab0bef425a0aed90eac0de21  libjava/testsuite/libjava.lang/pr133.out
! 2dd7b4866dbabf93cbe158a36e7b37de  libjava/testsuite/libjava.lang/pr16789.java
! d42f2da1df5ecdf29be4ac27edda0c12  libjava/testsuite/libjava.lang/pr16789.out
! 826e2499947e72d4382d3864918444b7  libjava/testsuite/libjava.lang/pr179.java
  29288e294f89ce551732ba7e46a1d068  libjava/testsuite/libjava.lang/pr179.out
  78329f1aefb96107aa5f709fabcd3a06  libjava/testsuite/libjava.lang/pr184.java
  dfd622aec684e9846731bc8751ca9695  libjava/testsuite/libjava.lang/pr184.out
*************** c57e29cb87d76c98587f5626214aee47  libjav
*** 19618,19623 ****
--- 23454,23461 ----
  48747106ddefeb6b1bc2720666057a2e  libjava/testsuite/libjava.lang/private_indirect_write.java
  b9ef032673eb9466462945e9c40775ee  libjava/testsuite/libjava.lang/search_outer.java
  2f067fe9a30eafef38c294835b576b49  libjava/testsuite/libjava.lang/search_outer.out
+ 57b6843cd3630050ba44eec1962de1bb  libjava/testsuite/libjava.lang/shatest.java
+ 8a58a2acc178d11f2b919fa4ceb7766b  libjava/testsuite/libjava.lang/shatest.out
  f6c25812c1ec5ff2382ccec136aa35e6  libjava/testsuite/libjava.lang/stringconst.java
  4c73da226d65aa4557e919f02331b531  libjava/testsuite/libjava.lang/stringconst.out
  9c7806f9d96cf9083eee7153d916edd3  libjava/testsuite/libjava.lang/stringconst.xfail
*************** d41d8cd98f00b204e9800998ecf8427e  libjav
*** 19649,19704 ****
  85c924d4e1521a36a723388ebd47499c  libjava/testsuite/libjava.loader/TestParent.java
  d41d8cd98f00b204e9800998ecf8427e  libjava/testsuite/libjava.loader/TestParent.out
  a9fbdc2cf5fddb18c1a49ed5750a240e  libjava/testsuite/libjava.loader/dummy.java
! 6a97318ec07a07be787f8119f689022a  libjava/testsuite/libjava.loader/loader.exp
  535c341accf683784d36e9ccb76e01ef  libjava/testsuite/libjava.mauve/DejaGNUTestHarness.java
  e9910ad80efb8d33fd62025e4856c13b  libjava/testsuite/libjava.mauve/mauve.exp
! d4741f24c135cf97329ec4c782d85981  libjava/testsuite/libjava.mauve/xfails
  4e83ea7a96f2216869c8c6eb5b5299e2  libjava/testsuite/libjava.verify/README.verify
! 438e3e197e551851a2269c96d7363c72  libjava/testsuite/libjava.verify/verify.exp
! f107476b54d6c78838074cd470b12db9  libjava/verify.cc
! 87d316467ab14712a1eeee751e13b4a5  libjava/win32-threads.cc
! 5f6469f3ea2db98a9ab653ef87d18aaf  libjava/win32.cc
! 09c9d3c6a932f65eb003ab99ec15b646  libobjc/ChangeLog
! 3b406c1021ea16b0482b8aa040b29575  libobjc/Makefile.in
  100a8a616b158f80f9852ceb5f5f0ce0  libobjc/NXConstStr.m
  89e7d8ea7feedf1c3710ee80febe4f73  libobjc/Object.m
! 2e851022316048210ce0776e3a6ebaf9  libobjc/Protocol.m
  aa5319dd541cdb0eb8622f9adf66b761  libobjc/README
  25a63d98d74b70ef05b601805902d36d  libobjc/README.threads
  5f43a1e6c71bc1280356588a4137977d  libobjc/THREADS
  04172dc01230eaa2ce321d62de8c5739  libobjc/THREADS.MACH
! 7b174003ef5ebe90e042db6fae653ec0  libobjc/aclocal.m4
! b90a61097464bbe6f5f29828929a2af4  libobjc/archive.c
  3ef7edab1cfd021b3fb5da677061faca  libobjc/class.c
! 541bdad6a2a1541f595d3343243fa008  libobjc/config.h.in
! 32c0a5763eed2fb9e8e67ff72e0f2e73  libobjc/configure
! 3f60697c2fbdf383a3e051dde290ecc2  libobjc/configure.in
! a1a8adedc9fd13f0a1647ded74bf3e6d  libobjc/encoding.c
! c334cbea6e0e5820f9456a1713473bae  libobjc/gc.c
! 3a02957f6a0eaa11c2455bc86165c2f2  libobjc/hash.c
! 2a701003ad05cb4de57e46f7ecce5000  libobjc/init.c
! a331e1c37f2e26f896a19e003744591a  libobjc/libobjc.def
  5f67e0588b52ca8989f2e6fc2d683a60  libobjc/libobjc_entry.c
! 0813ea2a0fedde038fdcf5b9d3a42c15  libobjc/linking.m
  dab44d6496d6ce1edd7d5c5f27b904ce  libobjc/makefile.dos
  7e9262916e9993e89a441893e43708c4  libobjc/misc.c
  bbe65827b7fa7dc37750b2dde78e6398  libobjc/nil_method.c
! 34d1965783e9b2aa59d36127e74a7f8a  libobjc/objc/NXConstStr.h
! da8182488cc90c2e4369ba9f90e09b6f  libobjc/objc/Object.h
! d5832854e2ddb0c703aec77b3ad8ce78  libobjc/objc/Protocol.h
! 17f7d3463392d1e628d60508fc9d3563  libobjc/objc/encoding.h
! 9b3ac2a345f420509ab3c02a0b0257c9  libobjc/objc/hash.h
! e32b60ef8c4ad5da93b5a428597eada7  libobjc/objc/objc-api.h
! 9c42fff0c0785696424c8ba5b3cbe1ac  libobjc/objc/objc-list.h
! 503f8bd4c6b66f935da527212ab172e0  libobjc/objc/objc.h
! 6846a548877997e12b8d3f866d639cbf  libobjc/objc/runtime.h
! 4085184539fff9c637f9bb1a7d2daa8f  libobjc/objc/sarray.h
! ad91ba700ac4466e525d67a04bb3fe1a  libobjc/objc/thr.h
! 1e286495d0738f2582dde415350fee5f  libobjc/objc/typedstream.h
  16a26c00473e17c1d7deb0a97c318f34  libobjc/objects.c
! 327b5615da8c30576bad6e28d0e46253  libobjc/sarray.c
! 334ce4d2ef72045b1be74fe597d490bf  libobjc/selector.c
! 1d414048d741b892939006385a6350c7  libobjc/sendmsg.c
  b7303d3c92443681bb56da08379df615  libobjc/thr-dce.c
  f52a5cea239b5db021b94525bb739c5a  libobjc/thr-decosf1.c
  0e22884cb854bcc098ed27054a46eb0e  libobjc/thr-irix.c
--- 23487,23671 ----
  85c924d4e1521a36a723388ebd47499c  libjava/testsuite/libjava.loader/TestParent.java
  d41d8cd98f00b204e9800998ecf8427e  libjava/testsuite/libjava.loader/TestParent.out
  a9fbdc2cf5fddb18c1a49ed5750a240e  libjava/testsuite/libjava.loader/dummy.java
! 86b7bcaab67e81448a283a94ef8caeb4  libjava/testsuite/libjava.loader/loader.exp
  535c341accf683784d36e9ccb76e01ef  libjava/testsuite/libjava.mauve/DejaGNUTestHarness.java
  e9910ad80efb8d33fd62025e4856c13b  libjava/testsuite/libjava.mauve/mauve.exp
! 400d03cd1dbd4abc8c6261d5b87f2f64  libjava/testsuite/libjava.mauve/xfails
  4e83ea7a96f2216869c8c6eb5b5299e2  libjava/testsuite/libjava.verify/README.verify
! 1894f669f9cf4ab8f83689ddfd7ed580  libjava/testsuite/libjava.verify/verify.exp
! 355447a91a860273b562489c68ace98f  libjava/verify.cc
! a96bfe2f74207bef0f1b6dcafa4d7495  libjava/win32-threads.cc
! 0a87f464b4cf71fd089a5857f22934f8  libjava/win32.cc
! ac81461263c340d1f6c7ed86a63b06de  libmudflap/.cvsignore
! 6648cde1f51a561fa3c1bcf4c99dd613  libmudflap/ChangeLog
! 5819b825335edc897fe336c7089c3bb7  libmudflap/Makefile.am
! 0ad672c1d858a74f2283e9094687f77c  libmudflap/Makefile.in
! 31849fccd1f6b97f0b0a3a2b4f594e13  libmudflap/aclocal.m4
! 3cee33440ccf73be994bdc20adeb785c  libmudflap/config.h.in
! eb165bf30ac8fcf1f1a287285d784127  libmudflap/configure
! aa1cfd41df6bd5bf214600a94f496a83  libmudflap/configure.ac
! 5b95ad6add3888b3ac1fd4fc7b3704ca  libmudflap/libtool-version
! ecfa62d83ea59aa1151c19bc2858cae2  libmudflap/mf-heuristics.c
! 8220fa4a067512176867197ea660c7aa  libmudflap/mf-hooks1.c
! e67d1b54634060fd35ebe5932591ce9e  libmudflap/mf-hooks2.c
! 778f350c7227a9ca3c7e62a9b8756723  libmudflap/mf-hooks3.c
! bd9247e11e44490d164019f1f0bfa2f3  libmudflap/mf-impl.h
! c634717d6ae578972a73210e913aaa03  libmudflap/mf-runtime.c
! 92cda17abc91c50a4ab3864f0be6acf0  libmudflap/mf-runtime.h
! 8f93cea3023d6f4d27e295ebcc0eef13  libmudflap/testsuite/Makefile.am
! 5e35b22bebd3b4b6b9c4c413416e8a27  libmudflap/testsuite/Makefile.in
! 5ac298bc8467994a49a168c684bc6c7f  libmudflap/testsuite/config/default.exp
! e9b449c63b3330b60840e79bc7e85ab3  libmudflap/testsuite/lib/libmudflap.exp
! b674f5c8efda391cdb8aa2dc0bdf9c04  libmudflap/testsuite/lib/mfdg.exp
! 0102d38ed1c4e0b480b970a05de00860  libmudflap/testsuite/libmudflap.c++/c++frags.exp
! 1830ea68643f44237915e2a6414343e4  libmudflap/testsuite/libmudflap.c++/ctors-1.cxx
! 0664a8e0e26fe32e4ba53e290492a108  libmudflap/testsuite/libmudflap.c++/ctors-2.cxx
! f8df5e3f3d3432a13fb337dc14b2b54e  libmudflap/testsuite/libmudflap.c++/ctors.exp
! 977ee4b2e6d8864d4bc297e7efd1d402  libmudflap/testsuite/libmudflap.c++/fail24-frag.cxx
! 2808a924b14f78acf11c583882b7d6db  libmudflap/testsuite/libmudflap.c++/pass27-frag.cxx
! edbb438f0e609167bd4c13e189260b06  libmudflap/testsuite/libmudflap.c++/pass28-frag.cxx
! 4f788a287f0720a650ef76df57d2454d  libmudflap/testsuite/libmudflap.c++/pass31-frag.cxx
! 5392e0176915d724401bda33f40f4abf  libmudflap/testsuite/libmudflap.c++/pass41-frag.cxx
! ae5bc015a6733e8177f80cba80771837  libmudflap/testsuite/libmudflap.c++/pass55-frag.cxx
! 2e968239532999f7510a72755cb5e355  libmudflap/testsuite/libmudflap.c/cfrags.exp
! f01a0cca9b0931395ffe1201d36e4a2e  libmudflap/testsuite/libmudflap.c/fail1-frag.c
! f7c87793139e650065d52a07a41f2024  libmudflap/testsuite/libmudflap.c/fail10-frag.c
! ce0b75d9dff7b48f609760f1fc621f91  libmudflap/testsuite/libmudflap.c/fail11-frag.c
! 232e2e3c7c7044cf4b8a11848208413d  libmudflap/testsuite/libmudflap.c/fail12-frag.c
! 8290540d955c884c8753b3ee24033ecc  libmudflap/testsuite/libmudflap.c/fail13-frag.c
! 680eea35a860e8ec9ad690fbe5a92858  libmudflap/testsuite/libmudflap.c/fail14-frag.c
! d93844224ffb44e1353832db62d3bf77  libmudflap/testsuite/libmudflap.c/fail15-frag.c
! 1df85ee35ae97141fcc7884db61f8278  libmudflap/testsuite/libmudflap.c/fail16-frag.c
! f01564692d9e3bf3ae74ec4ca6670823  libmudflap/testsuite/libmudflap.c/fail17-frag.c
! a9b339fc01d51572808f4bd777d1ceff  libmudflap/testsuite/libmudflap.c/fail18-frag.c
! d85d672cfa1d080fa5ad1797d653f2c8  libmudflap/testsuite/libmudflap.c/fail19-frag.c
! 31297fc7f52f8cf6a25c248503095229  libmudflap/testsuite/libmudflap.c/fail2-frag.c
! 838776967abb2c0192d587c8036e2830  libmudflap/testsuite/libmudflap.c/fail20-frag.c
! a06ecbf57351a08101a06e2d175cd42a  libmudflap/testsuite/libmudflap.c/fail21-frag.c
! dc180003b775b599e745b6c1fa8caaa1  libmudflap/testsuite/libmudflap.c/fail22-frag.c
! e4b52e70a83bd8d1d7966649c40295c7  libmudflap/testsuite/libmudflap.c/fail23-frag.c
! 32ecaa4d71a8bedb94bf53b866a1a224  libmudflap/testsuite/libmudflap.c/fail25-frag.c
! 54527c1ef40904689f5b9ec079eeb899  libmudflap/testsuite/libmudflap.c/fail26-frag.c
! 900df47ba3d2c6389ab60a57e1caf496  libmudflap/testsuite/libmudflap.c/fail27-frag.c
! 83259c827e31ddd3da7cfdfd5644332f  libmudflap/testsuite/libmudflap.c/fail28-frag.c
! d3421b077edc28eccf3c01606815da81  libmudflap/testsuite/libmudflap.c/fail29-frag.c
! fa158ae798c030867ee46ba534f51cc4  libmudflap/testsuite/libmudflap.c/fail3-frag.c
! 7f366ce991dc5aadebab5cb4c046b54d  libmudflap/testsuite/libmudflap.c/fail30-frag.c
! 6a6c241f781fc62f9c4a06cbef8ce372  libmudflap/testsuite/libmudflap.c/fail31-frag.c
! 9cbb26f04bc83bdfedd63279381ca842  libmudflap/testsuite/libmudflap.c/fail32-frag.c
! 11a5ff68eac900a68478f8620f20b3d5  libmudflap/testsuite/libmudflap.c/fail33-frag.c
! eabf1be0396a7d786468501d4e50392a  libmudflap/testsuite/libmudflap.c/fail34-frag.c
! ee3183f0f8a460d9bd993d7f826fa90d  libmudflap/testsuite/libmudflap.c/fail35-frag.c
! af2dbd515fe01a4fdcc3fb8037f815b1  libmudflap/testsuite/libmudflap.c/fail36-frag.c
! 6b03e3ceeea233e0fc7024caeba81855  libmudflap/testsuite/libmudflap.c/fail37-frag.c
! aa7f3be8fbb9c6a0ff826c01c206365b  libmudflap/testsuite/libmudflap.c/fail38-frag.c
! 0dfd981ee2e625ca1e22d36d0108cc9a  libmudflap/testsuite/libmudflap.c/fail4-frag.c
! 9e31dcfd9573de93e2b46d9f0e382376  libmudflap/testsuite/libmudflap.c/fail5-frag.c
! b86a1b2de633cab886f73596afbb0057  libmudflap/testsuite/libmudflap.c/fail6-frag.c
! 2a52c49e96c0b6cfecc1650a8fd4f934  libmudflap/testsuite/libmudflap.c/fail7-frag.c
! 69b84a2fbc58f0300716c702066aabb5  libmudflap/testsuite/libmudflap.c/fail8-frag.c
! 3edcdff474432dfaf325151a5f6e0720  libmudflap/testsuite/libmudflap.c/fail9-frag.c
! 26dd600a9bb460e591c39eb8038965c3  libmudflap/testsuite/libmudflap.c/heap-scalestress.c
! 892cb51e70b3c7990d964bcc9554e64f  libmudflap/testsuite/libmudflap.c/hook-allocstuff.c
! 0db2423fceddea49779f253ac20b461d  libmudflap/testsuite/libmudflap.c/pass-stratcliff.c
! 1546be985276a26f219aeb6add96ae00  libmudflap/testsuite/libmudflap.c/pass1-frag.c
! ae1dfac3738764a8a9a0f48c0108d255  libmudflap/testsuite/libmudflap.c/pass10-frag.c
! 08c9e782994ebb9725c5782a6335688c  libmudflap/testsuite/libmudflap.c/pass11-frag.c
! 3028da4fac57771de0e4a62e256d4dbc  libmudflap/testsuite/libmudflap.c/pass12-frag.c
! 4662993ba703813293e3c283e51e746a  libmudflap/testsuite/libmudflap.c/pass13-frag.c
! d0994ebeb3842d4d69f1346bda01cbd9  libmudflap/testsuite/libmudflap.c/pass14-frag.c
! 9d5711e750b224399887cd6fc42a90ac  libmudflap/testsuite/libmudflap.c/pass15-frag.c
! 3036294dfc5309b3dccd5a7238658f29  libmudflap/testsuite/libmudflap.c/pass16-frag.c
! 06c25ff8a6067488fbc6fe3c81782bc4  libmudflap/testsuite/libmudflap.c/pass17-frag.c
! afd7e08593cc13df8d9cbe3b750ca3e3  libmudflap/testsuite/libmudflap.c/pass18-frag.c
! 4dd5c6d72e128cc4e018205e8f4bbdaa  libmudflap/testsuite/libmudflap.c/pass19-frag.c
! 0aecb2863129ecf90fb9b6edb6f645e6  libmudflap/testsuite/libmudflap.c/pass2-frag.c
! f9fd94fc8b561b1ed28ab90dfa604389  libmudflap/testsuite/libmudflap.c/pass20-frag.c
! d6f368aa59a34fde69a8f99b818f01aa  libmudflap/testsuite/libmudflap.c/pass21-frag.c
! 9fcfb2f45b6c55bc6c1b399175223679  libmudflap/testsuite/libmudflap.c/pass22-frag.c
! b1de260d484e7ad96b19721e79dc3b23  libmudflap/testsuite/libmudflap.c/pass23-frag.c
! 1c2a9630ff6e95ba97eab432e28e7b86  libmudflap/testsuite/libmudflap.c/pass24-frag.c
! efe921105e7073db24e97cd7393c9233  libmudflap/testsuite/libmudflap.c/pass25-frag.c
! 11c837edefc6d13f525c872a8217f90c  libmudflap/testsuite/libmudflap.c/pass26-frag.c
! 4b00d374cfd23400e5ae8bd05ad23bca  libmudflap/testsuite/libmudflap.c/pass29-frag.c
! bc454cdf76cb51f7fcdc7b0ed83cbda1  libmudflap/testsuite/libmudflap.c/pass3-frag.c
! 4f788a287f0720a650ef76df57d2454d  libmudflap/testsuite/libmudflap.c/pass30-frag.c
! d142d7079612b7ef1df87e6f25651d3f  libmudflap/testsuite/libmudflap.c/pass32-frag.c
! 8d878030305661b8ae544e8c12ddb0e0  libmudflap/testsuite/libmudflap.c/pass33-frag.c
! 4108c9569be40ec4c9d115b2b28c8ac0  libmudflap/testsuite/libmudflap.c/pass34-frag.c
! 030c030047a1d639ca63ca4755b68802  libmudflap/testsuite/libmudflap.c/pass35-frag.c
! de7d46b216fdf13e0056cbfb0366e27e  libmudflap/testsuite/libmudflap.c/pass36-frag.c
! 6dd29ce5d376fa425695d8823e8b227e  libmudflap/testsuite/libmudflap.c/pass38-frag.c
! d353e36f8702962f3ef9908515c684ba  libmudflap/testsuite/libmudflap.c/pass4-frag.c
! 22c026ed5479a9a8b36101419c8d6ca8  libmudflap/testsuite/libmudflap.c/pass42-frag.c
! 94a5bc2f802c35e2fbc8dad72c436699  libmudflap/testsuite/libmudflap.c/pass43-frag.c
! 5cd1771d4e811a3612b0a125471f4e96  libmudflap/testsuite/libmudflap.c/pass44-frag.c
! d6f64e33813fc7b4cd9c29a47e56b8a1  libmudflap/testsuite/libmudflap.c/pass45-frag.c
! d10996f749da8ac232ea4b81c68ea37f  libmudflap/testsuite/libmudflap.c/pass46-frag.c
! ea6553f0aeedb175208b59b4aaa8e4de  libmudflap/testsuite/libmudflap.c/pass47-frag.c
! 208a95e5cee9c19d5f038cb6d56be040  libmudflap/testsuite/libmudflap.c/pass48-frag.c
! 4c8b3d3792aa0707c47d0f92500ad3ab  libmudflap/testsuite/libmudflap.c/pass49-frag.c
! 9c44851c5fba91b55b24260e67dccf4e  libmudflap/testsuite/libmudflap.c/pass5-frag.c
! c502e330a2452b0db330811b47612f98  libmudflap/testsuite/libmudflap.c/pass50-frag.c
! 34f8f23d8ea931c121a3081e487f2498  libmudflap/testsuite/libmudflap.c/pass51-frag.c
! a051a4c55bb7af739947f5202bd4ddff  libmudflap/testsuite/libmudflap.c/pass52-frag.c
! 68b3516885a8c2fcfdba7df5322933ed  libmudflap/testsuite/libmudflap.c/pass53-frag.c
! e8d6c9eb8a817572b55f6b93f1d82fda  libmudflap/testsuite/libmudflap.c/pass54-frag.c
! d5c53f81b148c1f3d90f58f8fd0b0ba3  libmudflap/testsuite/libmudflap.c/pass6-frag.c
! 807688f14acaf9a36cdbcdb58bdf64d5  libmudflap/testsuite/libmudflap.c/pass7-frag.c
! 06a0d20fdc7fd6d86138520c8f85c892  libmudflap/testsuite/libmudflap.c/pass8-frag.c
! f27eddb3a4c53d7592b38d6175922ed2  libmudflap/testsuite/libmudflap.c/pass9-frag.c
! 59bc8b5b9bb1a57bbf115f50d7877305  libmudflap/testsuite/libmudflap.cth/cthfrags.exp
! ec638a03f66871142acdac50a24e9149  libmudflap/testsuite/libmudflap.cth/pass37-frag.c
! 53f03df8e5e7d6ddf2191ee1f3febd96  libmudflap/testsuite/libmudflap.cth/pass39-frag.c
! 9c6e0ee7556df21372ba89fcb2612d17  libmudflap/testsuite/libmudflap.cth/pass40-frag.c
! 60168171460c9277504005955b1ea1b8  libmudflap/testsuite/mfconfig.exp.in
! ac81461263c340d1f6c7ed86a63b06de  libobjc/.cvsignore
! 7cd49229bed98aabaa78f3e86665df77  libobjc/ChangeLog
! 8d205dadd49654e75d3d44757def295a  libobjc/Makefile.in
  100a8a616b158f80f9852ceb5f5f0ce0  libobjc/NXConstStr.m
  89e7d8ea7feedf1c3710ee80febe4f73  libobjc/Object.m
! da3ed3804177b057aaf2f6fc9f46ccb7  libobjc/Protocol.m
  aa5319dd541cdb0eb8622f9adf66b761  libobjc/README
  25a63d98d74b70ef05b601805902d36d  libobjc/README.threads
  5f43a1e6c71bc1280356588a4137977d  libobjc/THREADS
  04172dc01230eaa2ce321d62de8c5739  libobjc/THREADS.MACH
! 699379f016a7be9f58ad8d4833725d66  libobjc/acinclude.m4
! 8ce8ec43c1b519579b3e2e688a8d31d1  libobjc/aclocal.m4
! e13424c45a958e78ebc87fb31105734e  libobjc/archive.c
  3ef7edab1cfd021b3fb5da677061faca  libobjc/class.c
! fcf7f656efa703c164caa74749e878f3  libobjc/config.h.in
! 20575d009a00b2feb7ac979a3444cd96  libobjc/configure
! c9d916b6b3a9614a97e2d34857f760c1  libobjc/configure.ac
! 110d0b4275d6bc6ee1f9a7ac17a38343  libobjc/encoding.c
! 1afef13966cc44b9d8cf7711f95802fb  libobjc/exception.c
! f4a78ac1bef3c61b63b045ed69055fed  libobjc/gc.c
! 534999827a125e2fb80abc924e091381  libobjc/hash.c
! c92f3938299783b8b37fbe85a6bfc43d  libobjc/hash_compat.c
! 9130f7b696559998f2a05f4e6d589e80  libobjc/init.c
! b658d5bb041eb002c9aeb4cbae769bca  libobjc/libobjc.def
  5f67e0588b52ca8989f2e6fc2d683a60  libobjc/libobjc_entry.c
! 866b8aca71ad54c66713a17254f55bb1  libobjc/linking.m
  dab44d6496d6ce1edd7d5c5f27b904ce  libobjc/makefile.dos
  7e9262916e9993e89a441893e43708c4  libobjc/misc.c
  bbe65827b7fa7dc37750b2dde78e6398  libobjc/nil_method.c
! 15bba2462d5678c4b676eb9feb5951da  libobjc/objc/NXConstStr.h
! a208345ba56c6fe7bd0b0e31261df766  libobjc/objc/Object.h
! cb13f790cb53adba78e2f43d60921c77  libobjc/objc/Protocol.h
! b5a34b08e4b57291b02a988e213b42dd  libobjc/objc/encoding.h
! 735b7f3a5b33efd65a3d7135510b8914  libobjc/objc/hash.h
! 78651d5c6d5d4acb9f50af8805ab4ba9  libobjc/objc/objc-api.h
! 8c5036288ef4cb5e9b8191cee3710aef  libobjc/objc/objc-decls.h
! efc662d1710ec983b1658c6fa13a8767  libobjc/objc/objc-list.h
! d0f6e5c7042d5759db5f7cf2962b069c  libobjc/objc/objc.h
! e02b3897fdbaa6bd2b0a02b5d3175980  libobjc/objc/runtime.h
! 025b9d771bb9c6e53a798e213c0dacbf  libobjc/objc/sarray.h
! 19c723d86f59cb305c6c869dc2c58622  libobjc/objc/thr.h
! 10cec4a0328a689ec38c55ecc2a1b825  libobjc/objc/typedstream.h
  16a26c00473e17c1d7deb0a97c318f34  libobjc/objects.c
! 84dd4aa4fd3d1383495677517e47409a  libobjc/sarray.c
! 58dcc0f566fcc444dc8408233ac0646a  libobjc/selector.c
! fe1065473f8d6a1c28ea3990599ef397  libobjc/sendmsg.c
  b7303d3c92443681bb56da08379df615  libobjc/thr-dce.c
  f52a5cea239b5db021b94525bb739c5a  libobjc/thr-decosf1.c
  0e22884cb854bcc098ed27054a46eb0e  libobjc/thr-irix.c
*************** c8a5d651d7a9816bb64b3eaed9f7c813  libobj
*** 19712,19731 ****
  79918aee4b55a6481332511e7361f14c  libobjc/thr-solaris.c
  c8a5d651d7a9816bb64b3eaed9f7c813  libobjc/thr-vxworks.c
  01163d478093aa7c6fad4c566c1782e8  libobjc/thr-win32.c
! 5315a8908369e50017301d87f568d352  libobjc/thr.c
  ac81461263c340d1f6c7ed86a63b06de  libstdc++-v3/.cvsignore
! ce9ba0427222f66ee6cdca0124efbd0b  libstdc++-v3/ChangeLog
  a9f7157d0e65450f88d5f0fb0ab9b6b9  libstdc++-v3/ChangeLog-2000
  c8785b12d58c99355a04453d38ca1f7c  libstdc++-v3/ChangeLog-2001
  a26d9a931f6b718d74468499f816cf2d  libstdc++-v3/ChangeLog-2002
  a662434a55aced1e46a58ddfaf8410c4  libstdc++-v3/ChangeLog-2003
! ee51f34ba6a60579e515b67cf7c15925  libstdc++-v3/Makefile.am
! b7bb775e1a0bda0f9105c00e44c59bc5  libstdc++-v3/Makefile.in
  70aebba2e3a9ac130e2e1c0413fa44ea  libstdc++-v3/README
! 48ec61bafc73ea570f0c429f4fe04969  libstdc++-v3/acconfig.h
! 42b641cfd26cdf486c3fc9ac2e0690a7  libstdc++-v3/acinclude.m4
! 070e85d733cf1cd04e7e6866b1be0066  libstdc++-v3/aclocal.m4
! b8a17081f3216c0bbac07bbc93d65561  libstdc++-v3/config.h.in
  1ad1a619f868ccf94b9bbbff52cfda20  libstdc++-v3/config/abi/alpha-freebsd5/baseline_symbols.txt
  b13fda40baf84eb4b7daac8a7bb607ac  libstdc++-v3/config/abi/alpha-linux-gnu/baseline_symbols.txt
  e547e68dc4463ed8c3e9623b8ce00382  libstdc++-v3/config/abi/arm-linux-gnu/baseline_symbols.txt
--- 23679,23699 ----
  79918aee4b55a6481332511e7361f14c  libobjc/thr-solaris.c
  c8a5d651d7a9816bb64b3eaed9f7c813  libobjc/thr-vxworks.c
  01163d478093aa7c6fad4c566c1782e8  libobjc/thr-win32.c
! 8ae8d26e64351ff1b21a5d4d5c128a82  libobjc/thr.c
  ac81461263c340d1f6c7ed86a63b06de  libstdc++-v3/.cvsignore
! b36e809a3c47f005a646fe8a2e595be3  libstdc++-v3/ChangeLog
  a9f7157d0e65450f88d5f0fb0ab9b6b9  libstdc++-v3/ChangeLog-2000
  c8785b12d58c99355a04453d38ca1f7c  libstdc++-v3/ChangeLog-2001
  a26d9a931f6b718d74468499f816cf2d  libstdc++-v3/ChangeLog-2002
  a662434a55aced1e46a58ddfaf8410c4  libstdc++-v3/ChangeLog-2003
! 1ccdc0ec99a50bb586cb4279c137a6bf  libstdc++-v3/ChangeLog-2004
! cd4edb7d3ab953d59570b392eef83888  libstdc++-v3/Makefile.am
! 3754073b5d63f71c44728f8b6b3091b6  libstdc++-v3/Makefile.in
  70aebba2e3a9ac130e2e1c0413fa44ea  libstdc++-v3/README
! c2a52211db68f8682daa4a6243c3fafe  libstdc++-v3/acconfig.h
! 88b62d84213224430b676896367ae01e  libstdc++-v3/acinclude.m4
! deec9e4227077d5d6e7ce23893958291  libstdc++-v3/aclocal.m4
! b931450dba6eb2c4798aa9fa8f8e4e1e  libstdc++-v3/config.h.in
  1ad1a619f868ccf94b9bbbff52cfda20  libstdc++-v3/config/abi/alpha-freebsd5/baseline_symbols.txt
  b13fda40baf84eb4b7daac8a7bb607ac  libstdc++-v3/config/abi/alpha-linux-gnu/baseline_symbols.txt
  e547e68dc4463ed8c3e9623b8ce00382  libstdc++-v3/config/abi/arm-linux-gnu/baseline_symbols.txt
*************** e3700f87bcf3b03137ef69961705fb47  libstd
*** 19749,19785 ****
  5be227a48caa626b0e0a383b79d5ec85  libstdc++-v3/config/allocator/mt_allocator_base.h
  4377bf0b9e3ce973c0d40c7ab5fd9a82  libstdc++-v3/config/allocator/new_allocator_base.h
  3859d7227276e356bbe6396721f1a89e  libstdc++-v3/config/allocator/pool_allocator_base.h
  6a029dea1f75c4fe44b0cf71ba59f4b4  libstdc++-v3/config/cpu/alpha/atomicity.h
  9e5599fd7a4901d23a621ff7f2d32e0c  libstdc++-v3/config/cpu/cris/atomic_word.h
! 2123bf2ad2d2f8c047138b1777879531  libstdc++-v3/config/cpu/cris/atomicity.h
! 5e0722a3d034f51fbbce42bef875ee6a  libstdc++-v3/config/cpu/generic/atomic_word.h
  03e8194bb51256189665efd51ec64383  libstdc++-v3/config/cpu/generic/atomicity.h
! eea162cafed2604ff0fc7c9aab18ce10  libstdc++-v3/config/cpu/hppa/atomicity.h
  d570015ef9950d1f0423b7e82a39d7ac  libstdc++-v3/config/cpu/i386/atomicity.h
  1a8f22502a4f9ed7c03cbacceb6e0307  libstdc++-v3/config/cpu/i486/atomicity.h
  4a2640334430a851decc7bf212d5dd94  libstdc++-v3/config/cpu/ia64/atomicity.h
  7d588ff47ba435d877dd51d7599ea0b6  libstdc++-v3/config/cpu/m68k/atomicity.h
! 50d56c112e05a690f5797bd95a1deeb4  libstdc++-v3/config/cpu/mips/atomicity.h
  4eed39af8243f6295f364e00b1c83055  libstdc++-v3/config/cpu/powerpc/atomicity.h
! f48d8cc8bc33576abee1e999049d3b3d  libstdc++-v3/config/cpu/s390/atomicity.h
! 1aab9f129fd97e3ce70013f19f9a2b4b  libstdc++-v3/config/cpu/sparc/atomic_word.h
  0f11660ae152e168d48e2b61c8772fc2  libstdc++-v3/config/cpu/sparc/atomicity.h
! c13a0011b319faf7ba05d90f361b2211  libstdc++-v3/config/io/basic_file_stdio.cc
  941637922b9dfef9858d9d54a8234571  libstdc++-v3/config/io/basic_file_stdio.h
! a74e55993d60cf708e4c6f3cab566f74  libstdc++-v3/config/io/c_io_stdio.h
  5c97d0529432c17d5922b81bdd0459a7  libstdc++-v3/config/linker-map.dummy
! 08851f1850dd994f5af7c4262bd0a927  libstdc++-v3/config/linker-map.gnu
  fbfcd7296794df400b950cc5efc33752  libstdc++-v3/config/locale/generic/c++locale_internal.h
! 78c852a2cdd344ded19ada1bcc76690a  libstdc++-v3/config/locale/generic/c_locale.cc
! 9d9d17150d9ff7d55b7e62342ac3e51f  libstdc++-v3/config/locale/generic/c_locale.h
  32e3e10f494f535508ef8e3d757138b6  libstdc++-v3/config/locale/generic/codecvt_members.cc
- e125bc9bf2426ff0743ddf73b7b431df  libstdc++-v3/config/locale/generic/codecvt_specializations.h
  727b9fcf68a17ffe5ff2e0ad20e4fa8f  libstdc++-v3/config/locale/generic/collate_members.cc
! d40306dc94728303672231bca2bfb70f  libstdc++-v3/config/locale/generic/ctype_members.cc
  1686f361c89363815ed02b11a6273c1a  libstdc++-v3/config/locale/generic/messages_members.cc
  46acd0b4d217b4c1af1e2fb86ee61bfb  libstdc++-v3/config/locale/generic/messages_members.h
! f433c2edac56afb10fa28a16ee866731  libstdc++-v3/config/locale/generic/monetary_members.cc
! c7d64a1e7234211afefb74b871fd74bb  libstdc++-v3/config/locale/generic/numeric_members.cc
  f5fd68cbeafe0d33114ca3fb403e175a  libstdc++-v3/config/locale/generic/time_members.cc
  95d51db4eef64acb4e9bc842a60a30a0  libstdc++-v3/config/locale/generic/time_members.h
  7f40c212e3a8017c68328117ee57153f  libstdc++-v3/config/locale/gnu/c++locale_internal.h
--- 23717,23759 ----
  5be227a48caa626b0e0a383b79d5ec85  libstdc++-v3/config/allocator/mt_allocator_base.h
  4377bf0b9e3ce973c0d40c7ab5fd9a82  libstdc++-v3/config/allocator/new_allocator_base.h
  3859d7227276e356bbe6396721f1a89e  libstdc++-v3/config/allocator/pool_allocator_base.h
+ 281f43987cf4a1fdd86c368cc81c8228  libstdc++-v3/config/cpu/alpha/atomic_word.h
  6a029dea1f75c4fe44b0cf71ba59f4b4  libstdc++-v3/config/cpu/alpha/atomicity.h
+ 713106a2994dc29b73c723f7df537973  libstdc++-v3/config/cpu/arm/cxxabi_tweaks.h
  9e5599fd7a4901d23a621ff7f2d32e0c  libstdc++-v3/config/cpu/cris/atomic_word.h
! a33843d4e6db12e924d7a9fd6fab190a  libstdc++-v3/config/cpu/cris/atomicity.h
! 1a3ff3cbd4ca48d3cc6b11eaf2cc3058  libstdc++-v3/config/cpu/generic/atomic_word.h
  03e8194bb51256189665efd51ec64383  libstdc++-v3/config/cpu/generic/atomicity.h
! a4675b90521e897a7b15874389e405d5  libstdc++-v3/config/cpu/generic/cxxabi_tweaks.h
! 53bf7f6a39d5a35637382d30b05e3c55  libstdc++-v3/config/cpu/hppa/atomicity.h
  d570015ef9950d1f0423b7e82a39d7ac  libstdc++-v3/config/cpu/i386/atomicity.h
  1a8f22502a4f9ed7c03cbacceb6e0307  libstdc++-v3/config/cpu/i486/atomicity.h
+ df3d70ae4c46766eeb30c1d451b84b40  libstdc++-v3/config/cpu/ia64/atomic_word.h
  4a2640334430a851decc7bf212d5dd94  libstdc++-v3/config/cpu/ia64/atomicity.h
  7d588ff47ba435d877dd51d7599ea0b6  libstdc++-v3/config/cpu/m68k/atomicity.h
! 47d64d6436a81dae1c677c0784d8ce07  libstdc++-v3/config/cpu/mips/atomicity.h
! f9f21d6b5ec7fffa4f9939486ed7bd35  libstdc++-v3/config/cpu/powerpc/atomic_word.h
  4eed39af8243f6295f364e00b1c83055  libstdc++-v3/config/cpu/powerpc/atomicity.h
! f983244226fabfad7f93b87e257f823f  libstdc++-v3/config/cpu/s390/atomicity.h
! 1a3255a085a37460ca01d2bed3d99424  libstdc++-v3/config/cpu/sh/atomicity.h
! a024b60c156f806fe267b012b0ad90ba  libstdc++-v3/config/cpu/sparc/atomic_word.h
  0f11660ae152e168d48e2b61c8772fc2  libstdc++-v3/config/cpu/sparc/atomicity.h
! 1f6ba37c49bc67798fc823c87a7d6fc4  libstdc++-v3/config/io/basic_file_stdio.cc
  941637922b9dfef9858d9d54a8234571  libstdc++-v3/config/io/basic_file_stdio.h
! 3739ebcb6a11cbc27e5f61d0fc56163e  libstdc++-v3/config/io/c_io_stdio.h
  5c97d0529432c17d5922b81bdd0459a7  libstdc++-v3/config/linker-map.dummy
! 4bf95c37d25213a593a2644d868af3f3  libstdc++-v3/config/linker-map.gnu
! 0a5b73d99a61ba6920e504847053e67c  libstdc++-v3/config/locale/darwin/ctype_members.cc
  fbfcd7296794df400b950cc5efc33752  libstdc++-v3/config/locale/generic/c++locale_internal.h
! c277631214cf7604257079fb9e223884  libstdc++-v3/config/locale/generic/c_locale.cc
! 84073cc9b0daf29e48d25158827ae5c4  libstdc++-v3/config/locale/generic/c_locale.h
  32e3e10f494f535508ef8e3d757138b6  libstdc++-v3/config/locale/generic/codecvt_members.cc
  727b9fcf68a17ffe5ff2e0ad20e4fa8f  libstdc++-v3/config/locale/generic/collate_members.cc
! 075ddee859d5b0f993d7d02484da30e7  libstdc++-v3/config/locale/generic/ctype_members.cc
  1686f361c89363815ed02b11a6273c1a  libstdc++-v3/config/locale/generic/messages_members.cc
  46acd0b4d217b4c1af1e2fb86ee61bfb  libstdc++-v3/config/locale/generic/messages_members.h
! 0f0a565e315825c0a2c9d4ec4af7fc75  libstdc++-v3/config/locale/generic/monetary_members.cc
! 6db3c82e8b2b05a61e4c90852f0a9633  libstdc++-v3/config/locale/generic/numeric_members.cc
  f5fd68cbeafe0d33114ca3fb403e175a  libstdc++-v3/config/locale/generic/time_members.cc
  95d51db4eef64acb4e9bc842a60a30a0  libstdc++-v3/config/locale/generic/time_members.h
  7f40c212e3a8017c68328117ee57153f  libstdc++-v3/config/locale/gnu/c++locale_internal.h
*************** f5fd68cbeafe0d33114ca3fb403e175a  libstd
*** 19787,19811 ****
  9bff8a25915bdf1d9052996f1334b572  libstdc++-v3/config/locale/gnu/c_locale.h
  e920c473e7a51b284cd9b5d1874b1ea3  libstdc++-v3/config/locale/gnu/codecvt_members.cc
  b68a9605ebdd03bdce9e35a843348a48  libstdc++-v3/config/locale/gnu/collate_members.cc
! 9bf7de4730368e558f75e4eb0935f0bd  libstdc++-v3/config/locale/gnu/ctype_members.cc
  584412fbfd135180f4db8c7f744da5b6  libstdc++-v3/config/locale/gnu/messages_members.cc
  16a9f1257794e447fa392da64451d680  libstdc++-v3/config/locale/gnu/messages_members.h
! 74f12ccbd3898b5f9967daf97d68b304  libstdc++-v3/config/locale/gnu/monetary_members.cc
! c390c2c1012be6937afeab480cf26a0e  libstdc++-v3/config/locale/gnu/numeric_members.cc
! 1cf910472cb641bf831f922e97dc32e8  libstdc++-v3/config/locale/gnu/time_members.cc
  3af3f7276a186692b08ed7b10e11025c  libstdc++-v3/config/locale/gnu/time_members.h
  bbcbb79fa7d06acbb7bb4b7dc5789c21  libstdc++-v3/config/locale/ieee_1003.1-2001/c_locale.cc
  312d1d5701b8f61124e172c878d6af17  libstdc++-v3/config/locale/ieee_1003.1-2001/c_locale.h
- 1d507cfad499291a3464273be36fe2a5  libstdc++-v3/config/locale/ieee_1003.1-2001/codecvt_specializations.h
  771fd2214d6b4615e35601d92a2e0fab  libstdc++-v3/config/locale/ieee_1003.1-2001/messages_members.cc
  925a1a995e90a7c35e3999cbf6e327e7  libstdc++-v3/config/locale/ieee_1003.1-2001/messages_members.h
  3af23659a88f53128444ed7a3080a2a9  libstdc++-v3/config/os/aix/atomicity.h
  c79d8b118d5d68c1c292355c8b474c7b  libstdc++-v3/config/os/aix/ctype_base.h
  cb993110a0287979b88c8706174917a8  libstdc++-v3/config/os/aix/ctype_inline.h
  b2d105d412aa61a1ee1c76102f03d82a  libstdc++-v3/config/os/aix/ctype_noninline.h
! 7a6599c33c7a796a3d29273eba2905cf  libstdc++-v3/config/os/aix/os_defines.h
  5e2015131ebacb8ca7fd091c0fe0bad3  libstdc++-v3/config/os/bsd/freebsd/ctype_base.h
! dea2d29e9433fca927ad82577499b489  libstdc++-v3/config/os/bsd/freebsd/ctype_inline.h
  cf64f0552d0159ec858864537c7c2d87  libstdc++-v3/config/os/bsd/freebsd/ctype_noninline.h
  ce249e135582507220513d2d399bcaa7  libstdc++-v3/config/os/bsd/freebsd/os_defines.h
  68905538c05a163dddb776779db817b5  libstdc++-v3/config/os/bsd/netbsd/ctype_base.h
--- 23761,23789 ----
  9bff8a25915bdf1d9052996f1334b572  libstdc++-v3/config/locale/gnu/c_locale.h
  e920c473e7a51b284cd9b5d1874b1ea3  libstdc++-v3/config/locale/gnu/codecvt_members.cc
  b68a9605ebdd03bdce9e35a843348a48  libstdc++-v3/config/locale/gnu/collate_members.cc
! c9ece65d69e33719733184c0dcb3342d  libstdc++-v3/config/locale/gnu/ctype_members.cc
  584412fbfd135180f4db8c7f744da5b6  libstdc++-v3/config/locale/gnu/messages_members.cc
  16a9f1257794e447fa392da64451d680  libstdc++-v3/config/locale/gnu/messages_members.h
! 476aef540580b57b6361e94db760104b  libstdc++-v3/config/locale/gnu/monetary_members.cc
! cf3de21f9a5f1f52e97cb73f5cb7282f  libstdc++-v3/config/locale/gnu/numeric_members.cc
! 370abedffecda214b2d5f74a6c5b3946  libstdc++-v3/config/locale/gnu/time_members.cc
  3af3f7276a186692b08ed7b10e11025c  libstdc++-v3/config/locale/gnu/time_members.h
  bbcbb79fa7d06acbb7bb4b7dc5789c21  libstdc++-v3/config/locale/ieee_1003.1-2001/c_locale.cc
  312d1d5701b8f61124e172c878d6af17  libstdc++-v3/config/locale/ieee_1003.1-2001/c_locale.h
  771fd2214d6b4615e35601d92a2e0fab  libstdc++-v3/config/locale/ieee_1003.1-2001/messages_members.cc
  925a1a995e90a7c35e3999cbf6e327e7  libstdc++-v3/config/locale/ieee_1003.1-2001/messages_members.h
+ be1d3504911ea3c8a32f097bacf6683e  libstdc++-v3/config/os/aix/atomic_word.h
  3af23659a88f53128444ed7a3080a2a9  libstdc++-v3/config/os/aix/atomicity.h
  c79d8b118d5d68c1c292355c8b474c7b  libstdc++-v3/config/os/aix/ctype_base.h
  cb993110a0287979b88c8706174917a8  libstdc++-v3/config/os/aix/ctype_inline.h
  b2d105d412aa61a1ee1c76102f03d82a  libstdc++-v3/config/os/aix/ctype_noninline.h
! aa2fe0436d50cf330f54e7e6b257f6ca  libstdc++-v3/config/os/aix/os_defines.h
! e1966813e523d11302c3d36632728193  libstdc++-v3/config/os/bsd/darwin/ctype_base.h
! 52e48241f7b6c1d566bf82483077b254  libstdc++-v3/config/os/bsd/darwin/ctype_inline.h
! cf64f0552d0159ec858864537c7c2d87  libstdc++-v3/config/os/bsd/darwin/ctype_noninline.h
! ba7123ce8e451ea65913e01c3a00aeae  libstdc++-v3/config/os/bsd/darwin/os_defines.h
  5e2015131ebacb8ca7fd091c0fe0bad3  libstdc++-v3/config/os/bsd/freebsd/ctype_base.h
! e522fa942c293ff31d95613ce54d9c10  libstdc++-v3/config/os/bsd/freebsd/ctype_inline.h
  cf64f0552d0159ec858864537c7c2d87  libstdc++-v3/config/os/bsd/freebsd/ctype_noninline.h
  ce249e135582507220513d2d399bcaa7  libstdc++-v3/config/os/bsd/freebsd/os_defines.h
  68905538c05a163dddb776779db817b5  libstdc++-v3/config/os/bsd/netbsd/ctype_base.h
*************** b812835420aa7eaadd0244e6fe7e772e  libstd
*** 19820,19826 ****
  06689013932adc35167d236ec0eddc1f  libstdc++-v3/config/os/generic/ctype_inline.h
  89f0558615b21bd50d8809f1fd8d2654  libstdc++-v3/config/os/generic/ctype_noninline.h
  3c527d3143088b2b29894a814347e66c  libstdc++-v3/config/os/generic/os_defines.h
! edfc6dd8995367d64e6d1b5c92bd48e4  libstdc++-v3/config/os/gnu-linux/ctype_base.h
  1a393c2f844aeb8d37c5b3389db786b2  libstdc++-v3/config/os/gnu-linux/ctype_inline.h
  c21054f9fb86df1c0a6b2946aa77eca2  libstdc++-v3/config/os/gnu-linux/ctype_noninline.h
  7b0b07a7f90bd4352eaf342e8fffb5fa  libstdc++-v3/config/os/gnu-linux/os_defines.h
--- 23798,23804 ----
  06689013932adc35167d236ec0eddc1f  libstdc++-v3/config/os/generic/ctype_inline.h
  89f0558615b21bd50d8809f1fd8d2654  libstdc++-v3/config/os/generic/ctype_noninline.h
  3c527d3143088b2b29894a814347e66c  libstdc++-v3/config/os/generic/os_defines.h
! d0aa01e2def93e7b5057f4c5b81fef1a  libstdc++-v3/config/os/gnu-linux/ctype_base.h
  1a393c2f844aeb8d37c5b3389db786b2  libstdc++-v3/config/os/gnu-linux/ctype_inline.h
  c21054f9fb86df1c0a6b2946aa77eca2  libstdc++-v3/config/os/gnu-linux/ctype_noninline.h
  7b0b07a7f90bd4352eaf342e8fffb5fa  libstdc++-v3/config/os/gnu-linux/os_defines.h
*************** c21054f9fb86df1c0a6b2946aa77eca2  libstd
*** 19830,19841 ****
  15fbccd6ab265f07ab829e95772db5b7  libstdc++-v3/config/os/hpux/os_defines.h
  579271461306746ba8ca749a20e2976e  libstdc++-v3/config/os/irix/atomic_word.h
  ee17d82bcee915be6103749dc7b00de3  libstdc++-v3/config/os/irix/atomicity.h
- fd0704697793c3c47c4ae32334e57c06  libstdc++-v3/config/os/irix/irix5.2/atomicity.h
  2bde9773456e96bed15eea00b23aed70  libstdc++-v3/config/os/irix/irix5.2/ctype_base.h
  9332d7782857613ec19babfe02e353b8  libstdc++-v3/config/os/irix/irix5.2/ctype_inline.h
  5381ae1f5cae538e66569a031710e15b  libstdc++-v3/config/os/irix/irix5.2/ctype_noninline.h
  2ff0a07aa7a65f0c5efdb689d57cd5df  libstdc++-v3/config/os/irix/irix5.2/os_defines.h
- ffa56e8702f13b989da2f431486b3f5c  libstdc++-v3/config/os/irix/irix6.5/atomicity.h
  45de26fcceb9e9ec70d1811fce5d049d  libstdc++-v3/config/os/irix/irix6.5/ctype_base.h
  c45d2e3298fa0793043193af2106567d  libstdc++-v3/config/os/irix/irix6.5/ctype_inline.h
  09b91b2943a2e6147d0ebc8f10d21f1b  libstdc++-v3/config/os/irix/irix6.5/ctype_noninline.h
--- 23808,23817 ----
*************** c45d2e3298fa0793043193af2106567d  libstd
*** 19843,19853 ****
  551f4dab40480382c53bcadaf36cf4a0  libstdc++-v3/config/os/mingw32/ctype_base.h
  c728dd387cd8d068e8dff9cd017d728a  libstdc++-v3/config/os/mingw32/ctype_inline.h
  6abbbe23df0ac13c14e7d69dd1605310  libstdc++-v3/config/os/mingw32/ctype_noninline.h
! 1ca46960a11f8248e7654424466e9008  libstdc++-v3/config/os/mingw32/os_defines.h
  d39312fa03db4e0eb16804483ce01a09  libstdc++-v3/config/os/newlib/ctype_base.h
  3e560e7b257d256f4123a219cb54f5d1  libstdc++-v3/config/os/newlib/ctype_inline.h
  00c718260338045da7190abd9dc8f97c  libstdc++-v3/config/os/newlib/ctype_noninline.h
! 6d69916b595d8ede84afe1e3bb748441  libstdc++-v3/config/os/newlib/os_defines.h
  ba22c32b30db32c977ae44fea5ecb9d9  libstdc++-v3/config/os/qnx/qnx6.1/ctype_base.h
  633fb0b72cc9150e2443d82124e1bf7b  libstdc++-v3/config/os/qnx/qnx6.1/ctype_inline.h
  62e7ca911520e66a9ed46af14b488607  libstdc++-v3/config/os/qnx/qnx6.1/ctype_noninline.h
--- 23819,23829 ----
  551f4dab40480382c53bcadaf36cf4a0  libstdc++-v3/config/os/mingw32/ctype_base.h
  c728dd387cd8d068e8dff9cd017d728a  libstdc++-v3/config/os/mingw32/ctype_inline.h
  6abbbe23df0ac13c14e7d69dd1605310  libstdc++-v3/config/os/mingw32/ctype_noninline.h
! a28ad3bec50213740d08c4802bea2d54  libstdc++-v3/config/os/mingw32/os_defines.h
  d39312fa03db4e0eb16804483ce01a09  libstdc++-v3/config/os/newlib/ctype_base.h
  3e560e7b257d256f4123a219cb54f5d1  libstdc++-v3/config/os/newlib/ctype_inline.h
  00c718260338045da7190abd9dc8f97c  libstdc++-v3/config/os/newlib/ctype_noninline.h
! c230db5f1dc6fe6c7c19a88dca06ed6e  libstdc++-v3/config/os/newlib/os_defines.h
  ba22c32b30db32c977ae44fea5ecb9d9  libstdc++-v3/config/os/qnx/qnx6.1/ctype_base.h
  633fb0b72cc9150e2443d82124e1bf7b  libstdc++-v3/config/os/qnx/qnx6.1/ctype_inline.h
  62e7ca911520e66a9ed46af14b488607  libstdc++-v3/config/os/qnx/qnx6.1/ctype_noninline.h
*************** cf5b19ca68324c61c1d764f55aafe57a  libstd
*** 19876,19898 ****
  992909cbcc0be849d9572526cb1e95ba  libstdc++-v3/config/os/windiss/ctype_inline.h
  e9fe2fdbd51265ee1cccae63f5501e8b  libstdc++-v3/config/os/windiss/ctype_noninline.h
  8878527d3634600f2e4df7b67860ce0f  libstdc++-v3/config/os/windiss/os_defines.h
! d9e68f17da542b62ddfaac50e7dd63a9  libstdc++-v3/configure
! 4262a1be7e9ae912437fd7189e30d6da  libstdc++-v3/configure.ac
! d601557e0c5164f1c18abe5f4594ac57  libstdc++-v3/configure.host
! f1cc2b27f784d1abfd99850b7e12f78b  libstdc++-v3/crossconfig.m4
  aa2618b72e9e6b60c247861d940e095e  libstdc++-v3/docs/doxygen/Intro.3
  d8c25a7f2e3cc9c9843f69e291490c01  libstdc++-v3/docs/doxygen/TODO
! f54b03fecbd102d5350cf0dce57974f1  libstdc++-v3/docs/doxygen/doxygroups.cc
! a2a7ea2b3b666145c0bf5d92493e74f2  libstdc++-v3/docs/doxygen/filter
! ebc6ca91ef88f0231810f6fd8167dfac  libstdc++-v3/docs/doxygen/filter.sed
  1dce33c8d55b5b8ecc1b989e6c440c96  libstdc++-v3/docs/doxygen/guide.html
! bb47206ca78cc6173dadb2dee4ba05df  libstdc++-v3/docs/doxygen/mainpage.html
! ba9898ce67778696aeb3084e3116d851  libstdc++-v3/docs/doxygen/run_doxygen
! 221a22b98c060c7644b8ee58e41e58ae  libstdc++-v3/docs/doxygen/stdheader.cc
! f792f77e925cf6d0b1da4834e0cbfe24  libstdc++-v3/docs/doxygen/style.css
  af6aadf2f27d7e98074e70fd4d2ab4e0  libstdc++-v3/docs/doxygen/tables.html
! e900a0a0d17f1b21e071e8b9a13c9fc2  libstdc++-v3/docs/doxygen/user.cfg.in
! e872b7a6ab75643e6d2ac8f879da3230  libstdc++-v3/docs/html/17_intro/BADNAMES
  99155f11bbb6c503a9a1e3fc4aa010ed  libstdc++-v3/docs/html/17_intro/BUGS
  291223e85fecbabff5925d2837049939  libstdc++-v3/docs/html/17_intro/C++STYLE
  f55426a1b386b224d648d29d93f3e9cf  libstdc++-v3/docs/html/17_intro/CHECKLIST
--- 23852,23872 ----
  992909cbcc0be849d9572526cb1e95ba  libstdc++-v3/config/os/windiss/ctype_inline.h
  e9fe2fdbd51265ee1cccae63f5501e8b  libstdc++-v3/config/os/windiss/ctype_noninline.h
  8878527d3634600f2e4df7b67860ce0f  libstdc++-v3/config/os/windiss/os_defines.h
! 8a2d7cc3c23488a344dea13933e9d8f5  libstdc++-v3/configure
! 1bfe9bf125fa92dedd2900e1bbd58b96  libstdc++-v3/configure.ac
! fba4d8ff9e37207cbd91ee3a61749363  libstdc++-v3/configure.host
! 2a351ef20b76ceeb08d55a13d69fe57e  libstdc++-v3/crossconfig.m4
  aa2618b72e9e6b60c247861d940e095e  libstdc++-v3/docs/doxygen/Intro.3
  d8c25a7f2e3cc9c9843f69e291490c01  libstdc++-v3/docs/doxygen/TODO
! a9ca819c14615314100fbc49b8bf1e22  libstdc++-v3/docs/doxygen/doxygroups.cc
  1dce33c8d55b5b8ecc1b989e6c440c96  libstdc++-v3/docs/doxygen/guide.html
! b6a4a36017995814cc629c26201386c2  libstdc++-v3/docs/doxygen/mainpage.html
! 249e1a897e0e27f2ddb0f7e1e7183359  libstdc++-v3/docs/doxygen/run_doxygen
! cee8efab5b682ad67943a39adc8af7bf  libstdc++-v3/docs/doxygen/stdheader.cc
! 07000167c8cbcff254fe201db5fc6add  libstdc++-v3/docs/doxygen/style.css
  af6aadf2f27d7e98074e70fd4d2ab4e0  libstdc++-v3/docs/doxygen/tables.html
! 83f4f510e25de0e380f49f4debb75bb7  libstdc++-v3/docs/doxygen/user.cfg.in
! cb5a82e40c58938e2fad6aba46d0ef76  libstdc++-v3/docs/html/17_intro/BADNAMES
  99155f11bbb6c503a9a1e3fc4aa010ed  libstdc++-v3/docs/html/17_intro/BUGS
  291223e85fecbabff5925d2837049939  libstdc++-v3/docs/html/17_intro/C++STYLE
  f55426a1b386b224d648d29d93f3e9cf  libstdc++-v3/docs/html/17_intro/CHECKLIST
*************** cbd1bf91e8de417eb957482178326509  libstd
*** 19906,19912 ****
  f595d98b1eb9cd433be22de9d4857fbb  libstdc++-v3/docs/html/17_intro/concept_check.diff
  211ea88e2113807bbca7329fdac3f82e  libstdc++-v3/docs/html/17_intro/confdeps.dot
  ce88169a1074a35a21cd3450542c7944  libstdc++-v3/docs/html/17_intro/confdeps.png
! c5b1db24f03c152f844b9e432de23390  libstdc++-v3/docs/html/17_intro/configury.html
  cfb9e628eb3e7be84809f5405422c608  libstdc++-v3/docs/html/17_intro/contribute.html
  545546c63c5753ca4a4b709719b1b4a1  libstdc++-v3/docs/html/17_intro/headers_cc.txt
  b23528cbd5a0b1bf78f855e1f29ec8c8  libstdc++-v3/docs/html/17_intro/howto.html
--- 23880,23886 ----
  f595d98b1eb9cd433be22de9d4857fbb  libstdc++-v3/docs/html/17_intro/concept_check.diff
  211ea88e2113807bbca7329fdac3f82e  libstdc++-v3/docs/html/17_intro/confdeps.dot
  ce88169a1074a35a21cd3450542c7944  libstdc++-v3/docs/html/17_intro/confdeps.png
! 7b0766d895d5e1a05e36804b80c3ae15  libstdc++-v3/docs/html/17_intro/configury.html
  cfb9e628eb3e7be84809f5405422c608  libstdc++-v3/docs/html/17_intro/contribute.html
  545546c63c5753ca4a4b709719b1b4a1  libstdc++-v3/docs/html/17_intro/headers_cc.txt
  b23528cbd5a0b1bf78f855e1f29ec8c8  libstdc++-v3/docs/html/17_intro/howto.html
*************** cbe85e70113273235269c1e60a607138  libstd
*** 19916,19923 ****
  43c90887489c33672461157008f1f81d  libstdc++-v3/docs/html/17_intro/porting.html
  b0377f0dce769efb86a5ceaff0e73f2a  libstdc++-v3/docs/html/17_intro/porting.texi
  c0c7eeeaeaa7f499716abde8d7306825  libstdc++-v3/docs/html/18_support/howto.html
! 3787c6231cca81065ae27132acdd852e  libstdc++-v3/docs/html/19_diagnostics/howto.html
! 6ae35b82983c2a09a1560b2dad557924  libstdc++-v3/docs/html/20_util/allocator.html
  67419e6b036104bf58a88498577baa6d  libstdc++-v3/docs/html/20_util/howto.html
  cac5b1769d51ce529acf0a707508a874  libstdc++-v3/docs/html/21_strings/gotw29a.txt
  6a6f860244fadb8e6e1ec192945b1f99  libstdc++-v3/docs/html/21_strings/howto.html
--- 23890,23897 ----
  43c90887489c33672461157008f1f81d  libstdc++-v3/docs/html/17_intro/porting.html
  b0377f0dce769efb86a5ceaff0e73f2a  libstdc++-v3/docs/html/17_intro/porting.texi
  c0c7eeeaeaa7f499716abde8d7306825  libstdc++-v3/docs/html/18_support/howto.html
! 2cf6a902ee1680593ff262ccb67bad4b  libstdc++-v3/docs/html/19_diagnostics/howto.html
! 487c271bb263b1f1bd0c0bc911ee4bd8  libstdc++-v3/docs/html/20_util/allocator.html
  67419e6b036104bf58a88498577baa6d  libstdc++-v3/docs/html/20_util/howto.html
  cac5b1769d51ce529acf0a707508a874  libstdc++-v3/docs/html/21_strings/gotw29a.txt
  6a6f860244fadb8e6e1ec192945b1f99  libstdc++-v3/docs/html/21_strings/howto.html
*************** ebb90967ba2cb693b18ff84e460261ba  libstd
*** 19937,19963 ****
  8df1a969d47ddd463121be67c1317f5e  libstdc++-v3/docs/html/27_io/binary_iostreams_kuehl.txt
  a0dc7951090956b17b29f6435c18ceaa  libstdc++-v3/docs/html/27_io/howto.html
  487fd00ae9958022896748bad45fc7d2  libstdc++-v3/docs/html/Makefile
! a338819c24778bfd28ff786e2070b8a1  libstdc++-v3/docs/html/abi.html
! 446b0ddf4079107b68af287234b8e26d  libstdc++-v3/docs/html/configopts.html
! e1efc1938dfefa4bcc7d6b6ff6ec46bb  libstdc++-v3/docs/html/debug.html
  e8600ee4c25ca784c6bc896f3c778579  libstdc++-v3/docs/html/debug_mode.html
! 0d93cd2e329e89baac82b338012c2bf9  libstdc++-v3/docs/html/documentation.html
  a8be05e7b31562c65e7b5657b3212ab4  libstdc++-v3/docs/html/explanations.html
! a7a8f9a8f116547a0cfc531c052e4474  libstdc++-v3/docs/html/ext/ballocator_doc.txt
! ec94d779f9c2c9573c5b232f0c3b662c  libstdc++-v3/docs/html/ext/howto.html
! 540b76e8af9bd1720e649b47835d017c  libstdc++-v3/docs/html/ext/lwg-active.html
! f2ce0736195e4a1c13866ee5ef42eb48  libstdc++-v3/docs/html/ext/lwg-defects.html
! 1fc340e006b67eaf026bde6e37a60e93  libstdc++-v3/docs/html/ext/mt_allocator.html
  6ab0d4db4c5c82dc560425b36a2d0471  libstdc++-v3/docs/html/ext/sgiexts.html
! 9309fd4baddbd647d4ba13b6adb46312  libstdc++-v3/docs/html/faq/index.html
! 24aa1165600ca66f5349243246d6bdac  libstdc++-v3/docs/html/faq/index.txt
! 3dafbc738cfb660abbf1bb010353ad49  libstdc++-v3/docs/html/install.html
  89af7232308fcd3be5ac891be10fe912  libstdc++-v3/docs/html/lib3styles.css
  946dfd1d05d272636f527377c14a2e4c  libstdc++-v3/docs/html/makedoc.awk
  d1933d0318299cc3bf0e40d8ffe0118e  libstdc++-v3/docs/html/test.html
! 8819a2df4aa20b9b9c247f2502144e7e  libstdc++-v3/fragment.am
! 992b7496362b701554dcf5ed6201faa6  libstdc++-v3/include/Makefile.am
! 2e54af9a792c67d7de6ff3d7445b80d9  libstdc++-v3/include/Makefile.in
  8d01b5682d12efff4dce5f0b290c5f4b  libstdc++-v3/include/backward/algo.h
  d9c5362b7ceb80c3d8a821947071d3d8  libstdc++-v3/include/backward/algobase.h
  358c08b744ff9b48233f7825a424ee59  libstdc++-v3/include/backward/alloc.h
--- 23911,23937 ----
  8df1a969d47ddd463121be67c1317f5e  libstdc++-v3/docs/html/27_io/binary_iostreams_kuehl.txt
  a0dc7951090956b17b29f6435c18ceaa  libstdc++-v3/docs/html/27_io/howto.html
  487fd00ae9958022896748bad45fc7d2  libstdc++-v3/docs/html/Makefile
! 74095b67ef5989c2853163dd660ac187  libstdc++-v3/docs/html/abi.html
! 2eaacd825d49d01fca6490b4b425488f  libstdc++-v3/docs/html/configopts.html
! 26106c13cc9de76fc559fac681663fa4  libstdc++-v3/docs/html/debug.html
  e8600ee4c25ca784c6bc896f3c778579  libstdc++-v3/docs/html/debug_mode.html
! 8e53b5ab2d9cd2612c648f525c288426  libstdc++-v3/docs/html/documentation.html
  a8be05e7b31562c65e7b5657b3212ab4  libstdc++-v3/docs/html/explanations.html
! d277321924975a19f27a64275026dd15  libstdc++-v3/docs/html/ext/ballocator_doc.html
! d4731e1f91fa77113e3a7c834b351066  libstdc++-v3/docs/html/ext/howto.html
! 53a9c97a5ec054028ea83f8bce79fe2b  libstdc++-v3/docs/html/ext/lwg-active.html
! 73b3e24bc62a770f59f032f3fc20697f  libstdc++-v3/docs/html/ext/lwg-defects.html
! 5eb5d123bf7085c1ea12b13e5a8c987b  libstdc++-v3/docs/html/ext/mt_allocator.html
  6ab0d4db4c5c82dc560425b36a2d0471  libstdc++-v3/docs/html/ext/sgiexts.html
! 747c87f2f164705ef4d9d7399a7ad985  libstdc++-v3/docs/html/faq/index.html
! 8feaa8fdc6d5af83c94a2a0557e7419f  libstdc++-v3/docs/html/faq/index.txt
! bde4b187f16e6e07265f212fc667ffbf  libstdc++-v3/docs/html/install.html
  89af7232308fcd3be5ac891be10fe912  libstdc++-v3/docs/html/lib3styles.css
  946dfd1d05d272636f527377c14a2e4c  libstdc++-v3/docs/html/makedoc.awk
  d1933d0318299cc3bf0e40d8ffe0118e  libstdc++-v3/docs/html/test.html
! 1520379d1feb00053d7d8439915c8923  libstdc++-v3/fragment.am
! dcfec3f471e4e205ec6ef370b7739f9b  libstdc++-v3/include/Makefile.am
! e843d78e1c2891b51c2eab5844b91045  libstdc++-v3/include/Makefile.in
  8d01b5682d12efff4dce5f0b290c5f4b  libstdc++-v3/include/backward/algo.h
  d9c5362b7ceb80c3d8a821947071d3d8  libstdc++-v3/include/backward/algobase.h
  358c08b744ff9b48233f7825a424ee59  libstdc++-v3/include/backward/alloc.h
*************** a5314537c755ae8094498cdbded5c82a  libstd
*** 19991,20067 ****
  e459d4aeaca64ff74a6884a2a2a3b283  libstdc++-v3/include/backward/stream.h
  c42de28b2696b3a8b383e7c20fb62d9c  libstdc++-v3/include/backward/streambuf.h
  40501aecacb4646ac501fd4ebe03d080  libstdc++-v3/include/backward/strstream
! db650db03081a3865a589141225dee60  libstdc++-v3/include/backward/tempbuf.h
  ca634644163ef05f0fb0fa5ac2b29a49  libstdc++-v3/include/backward/tree.h
  9318dedd8d93760e20b8033e078595a6  libstdc++-v3/include/backward/vector.h
! baa53d2e1cc76d9693957cdc9ca5620d  libstdc++-v3/include/bits/allocator.h
! 291cafb12a14460349d320a2285e4400  libstdc++-v3/include/bits/allocator_traits.h
! aa417023263fd9d299a86ad8e785ce11  libstdc++-v3/include/bits/atomicity.h
  9c084f137e4379070995b9445702e1af  libstdc++-v3/include/bits/basic_ios.h
! 8f169120bb06a4e3543d95fac8f63e6c  libstdc++-v3/include/bits/basic_ios.tcc
! a2e5fb4095151751ec8a72a51dd903c4  libstdc++-v3/include/bits/basic_string.h
! f8bad3c0003087d36b875c9b8fee41cb  libstdc++-v3/include/bits/basic_string.tcc
  65a2c441dbc9c3a34b668a274fb8a687  libstdc++-v3/include/bits/boost_concept_check.h
! ddf2261e05d131ec328385fae2ac4051  libstdc++-v3/include/bits/c++config
! ef81dac16e85dbe38841d934333e2eee  libstdc++-v3/include/bits/char_traits.h
! 4a8802a19dcca7228472ae1c4f519e58  libstdc++-v3/include/bits/codecvt.h
  e8f8be39afe561dbeaf0363c1e8c9e6a  libstdc++-v3/include/bits/concept_check.h
! c76977bce049146dbc837f94b4ea8275  libstdc++-v3/include/bits/concurrence.h
! 00d5dfbeeb939e067ab90ffef496f5a7  libstdc++-v3/include/bits/cpp_type_traits.h
! ffbc3ba004fe6cbf58b0e0f33a7cd8c0  libstdc++-v3/include/bits/deque.tcc
! 09c0d8fcacaaee2167c1d9ec392281e7  libstdc++-v3/include/bits/fstream.tcc
! 605ff4b8a1463f3f33122f5f0ea7af63  libstdc++-v3/include/bits/functexcept.h
! d98a0ef4b95a26cc4a75620b2464fc52  libstdc++-v3/include/bits/gslice.h
! 1e668644f8d5f1d97c0000bfffc384eb  libstdc++-v3/include/bits/gslice_array.h
! f6f95a7e365579e68aa28916833ff630  libstdc++-v3/include/bits/indirect_array.h
! 670e2f3a33b73e5caac1e004a048160f  libstdc++-v3/include/bits/ios_base.h
! cab7ec8ff0af1e8484639457de21044d  libstdc++-v3/include/bits/istream.tcc
! 0d036028d3806587cf532c36e77bc6ed  libstdc++-v3/include/bits/list.tcc
! 5459b11ca014e10a6ff447457cacb4cb  libstdc++-v3/include/bits/locale_classes.h
! 115ea22d70525f88af216cfc2e95eba2  libstdc++-v3/include/bits/locale_facets.h
! 22b4739f5e7cae4836cbe98b63a43051  libstdc++-v3/include/bits/locale_facets.tcc
  66bbc87279cebefd53c0c43cdcf0ae8f  libstdc++-v3/include/bits/localefwd.h
! 41473de0686e1d392ff4c14787908e99  libstdc++-v3/include/bits/mask_array.h
! 27d4075d9b89af0f170731ed0e17dc69  libstdc++-v3/include/bits/ostream.tcc
  3e5145b590fa9119e431f0792227bfdf  libstdc++-v3/include/bits/postypes.h
! da555af027115d7187ed6c60f675ba30  libstdc++-v3/include/bits/slice_array.h
! d0342aab3b87b5ab8e3d32ef11443f83  libstdc++-v3/include/bits/sstream.tcc
! a6ee5c2d212da4f06c8544060357839a  libstdc++-v3/include/bits/stl_algo.h
! 187866a4e65364bf19c6954f26ecb2ef  libstdc++-v3/include/bits/stl_algobase.h
! a307b184ddd69bbeb1b8dd499391e61a  libstdc++-v3/include/bits/stl_bvector.h
! 793b42675634b78ff121b95a5c5e3af2  libstdc++-v3/include/bits/stl_construct.h
! 8af0010fb1de0734904fa7be5850423c  libstdc++-v3/include/bits/stl_deque.h
  20f6c24a19f0586fcba6bbc685d9a61e  libstdc++-v3/include/bits/stl_function.h
  50751abd6ba90524e2be43b51b295339  libstdc++-v3/include/bits/stl_heap.h
  0d05d8ff69ed49b9263724ec4ae5118a  libstdc++-v3/include/bits/stl_iterator.h
  a472a9c09e3f4a3547956631fee38e72  libstdc++-v3/include/bits/stl_iterator_base_funcs.h
  4505f2b08a35a49860c807524ac937cd  libstdc++-v3/include/bits/stl_iterator_base_types.h
! cea32325133795d4023c0b6d3a15145b  libstdc++-v3/include/bits/stl_list.h
  db7be9cd7fb210ab0d6845ec0d1b3528  libstdc++-v3/include/bits/stl_map.h
  56450f9d9821913131224ffb97119844  libstdc++-v3/include/bits/stl_multimap.h
  32388872086e144068a2aed0818199a7  libstdc++-v3/include/bits/stl_multiset.h
! e056682af821fc273494986905ad9063  libstdc++-v3/include/bits/stl_numeric.h
! 77ea3d5d74e79e75ff8d4545cd507617  libstdc++-v3/include/bits/stl_pair.h
  50a7bb1708cb81c808cce7384645a1c9  libstdc++-v3/include/bits/stl_queue.h
  63fc9ee2b05ba31f99818ffe1b051774  libstdc++-v3/include/bits/stl_raw_storage_iter.h
  23dbd0042a685ba85f19b5b50d40e123  libstdc++-v3/include/bits/stl_relops.h
  bafb6344e16062a0f74461c59556a8f8  libstdc++-v3/include/bits/stl_set.h
  69c376b5ebfa6b05cb7c4a7ed8aa0e07  libstdc++-v3/include/bits/stl_stack.h
! d6736ebfa6891b55f4efc96ebf1375f8  libstdc++-v3/include/bits/stl_tempbuf.h
! 07a39394a882548694507b8549016d7f  libstdc++-v3/include/bits/stl_threads.h
! 6a14c415223510429399696aac537ca8  libstdc++-v3/include/bits/stl_tree.h
! 2c19a5cef6970740b0e34a3e3a55b121  libstdc++-v3/include/bits/stl_uninitialized.h
! bb6af27882fc6642545aabf903bec32b  libstdc++-v3/include/bits/stl_vector.h
  1f430113e703b375c2e492172107a5c2  libstdc++-v3/include/bits/stream_iterator.h
! 07f3467aa5aff0b21ff4075ae0480c92  libstdc++-v3/include/bits/streambuf.tcc
! e4bbcb967bde65f5c51d1a584a4ce703  libstdc++-v3/include/bits/streambuf_iterator.h
  d9bc8849e21b43067e8cb0bf698344e1  libstdc++-v3/include/bits/stringfwd.h
! f39b3a4ac96f3d116a530760fcb9fb92  libstdc++-v3/include/bits/type_traits.h
! 7e9b8aa4e81d84dbcaf3b7966af0125f  libstdc++-v3/include/bits/valarray_after.h
! 8f9035d11d2c60bba80f870ae3e38711  libstdc++-v3/include/bits/valarray_array.h
! 0cacacd24ba4a1adc6a0fb915a70b02f  libstdc++-v3/include/bits/valarray_array.tcc
! 6816f58b94d8502f10b41ab04a373f86  libstdc++-v3/include/bits/valarray_before.h
! d43c5935846753890b2979aff9218818  libstdc++-v3/include/bits/vector.tcc
  2da65118213e7e27e5d4d09be974c3fc  libstdc++-v3/include/c/std_cassert.h
  7fc0130555d9215380296870a843f991  libstdc++-v3/include/c/std_cctype.h
  66636afb5592971448e135051b7bc906  libstdc++-v3/include/c/std_cerrno.h
--- 23965,24038 ----
  e459d4aeaca64ff74a6884a2a2a3b283  libstdc++-v3/include/backward/stream.h
  c42de28b2696b3a8b383e7c20fb62d9c  libstdc++-v3/include/backward/streambuf.h
  40501aecacb4646ac501fd4ebe03d080  libstdc++-v3/include/backward/strstream
! b49846a5f5b03a71390ef56cae63ff45  libstdc++-v3/include/backward/tempbuf.h
  ca634644163ef05f0fb0fa5ac2b29a49  libstdc++-v3/include/backward/tree.h
  9318dedd8d93760e20b8033e078595a6  libstdc++-v3/include/backward/vector.h
! e64a97cd2a0e1baa0b9b5b0f98012448  libstdc++-v3/include/bits/allocator.h
! dba2439de18b6c6b4380575dbc28daae  libstdc++-v3/include/bits/atomicity.h
  9c084f137e4379070995b9445702e1af  libstdc++-v3/include/bits/basic_ios.h
! d9b98deca85e221a77e07818c186c6ff  libstdc++-v3/include/bits/basic_ios.tcc
! 8cf42a637eccd1efe2f6bd5a427a8ef5  libstdc++-v3/include/bits/basic_string.h
! afa346345432d4f199f342cbee520537  libstdc++-v3/include/bits/basic_string.tcc
  65a2c441dbc9c3a34b668a274fb8a687  libstdc++-v3/include/bits/boost_concept_check.h
! 742f45f0a86a151d37a952dac222292f  libstdc++-v3/include/bits/c++config
! 4edcd9d4104bdf483cfe32ae7638b639  libstdc++-v3/include/bits/char_traits.h
! 0f655652b4c9579c09f065461c110fb6  libstdc++-v3/include/bits/codecvt.h
  e8f8be39afe561dbeaf0363c1e8c9e6a  libstdc++-v3/include/bits/concept_check.h
! b2be7c7ad9ec51b1d996b2a716aaa40b  libstdc++-v3/include/bits/concurrence.h
! 6c5aa9c2cdf1727d4ece908ecdcb4b47  libstdc++-v3/include/bits/cpp_type_traits.h
! f1b68f469fa2bea9a19bef10c21130c6  libstdc++-v3/include/bits/deque.tcc
! d0bef7286c043404c940c6b4c1c7b5de  libstdc++-v3/include/bits/fstream.tcc
! 04225ecd7a54e232fea2f4932bbd83de  libstdc++-v3/include/bits/functexcept.h
! 0b54fcd69dd568a442f83ce5ed31e903  libstdc++-v3/include/bits/gslice.h
! fb98a295d49abaccc2f00d2cbfa461cf  libstdc++-v3/include/bits/gslice_array.h
! 590a474eb44f8a03a7befb81d53a0ad2  libstdc++-v3/include/bits/indirect_array.h
! b9b2a14cb5d2f27b9079aa2d6caf76de  libstdc++-v3/include/bits/ios_base.h
! a03b199d015cfa6756925a1ace30b605  libstdc++-v3/include/bits/istream.tcc
! b4194d3cb094a5f2ac97be42bcb31f80  libstdc++-v3/include/bits/list.tcc
! d1c0f2cada1c3b147e3eca668e0022be  libstdc++-v3/include/bits/locale_classes.h
! 9b29e3bcfe0dad7dd906e3e19ec8959a  libstdc++-v3/include/bits/locale_facets.h
! 4d8b27168b6041d8b38d514f24f66c4a  libstdc++-v3/include/bits/locale_facets.tcc
  66bbc87279cebefd53c0c43cdcf0ae8f  libstdc++-v3/include/bits/localefwd.h
! 64f8f1e35eda5e6f5c8dedb1f317125e  libstdc++-v3/include/bits/mask_array.h
! 4630da865fc0a1032629a1271fa47227  libstdc++-v3/include/bits/ostream.tcc
  3e5145b590fa9119e431f0792227bfdf  libstdc++-v3/include/bits/postypes.h
! 627a7ff6bb544ba90822c9e45ad93343  libstdc++-v3/include/bits/slice_array.h
! 9505b7e8a97e5c35a94c5523f06ae9bc  libstdc++-v3/include/bits/sstream.tcc
! 7b226790a4d3a89aeaddafd0ca4b729e  libstdc++-v3/include/bits/stl_algo.h
! 57aa14cb5b1a524c4b5d5c9031320194  libstdc++-v3/include/bits/stl_algobase.h
! 0e9fbce9c6b71baab92642ab10b93aed  libstdc++-v3/include/bits/stl_bvector.h
! 534dfa98da13e3c198f89758aebaea6a  libstdc++-v3/include/bits/stl_construct.h
! f39c09888dd0cca9282417b97e56560f  libstdc++-v3/include/bits/stl_deque.h
  20f6c24a19f0586fcba6bbc685d9a61e  libstdc++-v3/include/bits/stl_function.h
  50751abd6ba90524e2be43b51b295339  libstdc++-v3/include/bits/stl_heap.h
  0d05d8ff69ed49b9263724ec4ae5118a  libstdc++-v3/include/bits/stl_iterator.h
  a472a9c09e3f4a3547956631fee38e72  libstdc++-v3/include/bits/stl_iterator_base_funcs.h
  4505f2b08a35a49860c807524ac937cd  libstdc++-v3/include/bits/stl_iterator_base_types.h
! b209217ad7d39298b9b3ce07b333d251  libstdc++-v3/include/bits/stl_list.h
  db7be9cd7fb210ab0d6845ec0d1b3528  libstdc++-v3/include/bits/stl_map.h
  56450f9d9821913131224ffb97119844  libstdc++-v3/include/bits/stl_multimap.h
  32388872086e144068a2aed0818199a7  libstdc++-v3/include/bits/stl_multiset.h
! 52cc2d91b130ae8b4910116e0bfda85b  libstdc++-v3/include/bits/stl_numeric.h
! 8a6f2621789382256c785eca33e50218  libstdc++-v3/include/bits/stl_pair.h
  50a7bb1708cb81c808cce7384645a1c9  libstdc++-v3/include/bits/stl_queue.h
  63fc9ee2b05ba31f99818ffe1b051774  libstdc++-v3/include/bits/stl_raw_storage_iter.h
  23dbd0042a685ba85f19b5b50d40e123  libstdc++-v3/include/bits/stl_relops.h
  bafb6344e16062a0f74461c59556a8f8  libstdc++-v3/include/bits/stl_set.h
  69c376b5ebfa6b05cb7c4a7ed8aa0e07  libstdc++-v3/include/bits/stl_stack.h
! 2a7218d39202186e824c58f9969bc493  libstdc++-v3/include/bits/stl_tempbuf.h
! 3e73ce794f3fb18ddf7bce88bc07df26  libstdc++-v3/include/bits/stl_tree.h
! 95c6fe5d08f2a8dd83a797cbc6b1f3a3  libstdc++-v3/include/bits/stl_uninitialized.h
! eb56f34ef239a427539eb54c138b8f06  libstdc++-v3/include/bits/stl_vector.h
  1f430113e703b375c2e492172107a5c2  libstdc++-v3/include/bits/stream_iterator.h
! b3b42272bfda3ea4fec90839d035463a  libstdc++-v3/include/bits/streambuf.tcc
! d76d9badc179d60d90a3b9e29262c941  libstdc++-v3/include/bits/streambuf_iterator.h
  d9bc8849e21b43067e8cb0bf698344e1  libstdc++-v3/include/bits/stringfwd.h
! c5d3b36d02f177182537d6afb1a71c3c  libstdc++-v3/include/bits/valarray_after.h
! a564ec67f5e3182dfe7133addf1b158a  libstdc++-v3/include/bits/valarray_array.h
! f53d5428dd35ab5907001afd91f59388  libstdc++-v3/include/bits/valarray_array.tcc
! 8aee22d7a45298abe85195d583992f18  libstdc++-v3/include/bits/valarray_before.h
! 41b1756d230dc4f1301dabd0b19fcf33  libstdc++-v3/include/bits/vector.tcc
  2da65118213e7e27e5d4d09be974c3fc  libstdc++-v3/include/c/std_cassert.h
  7fc0130555d9215380296870a843f991  libstdc++-v3/include/c/std_cctype.h
  66636afb5592971448e135051b7bc906  libstdc++-v3/include/c/std_cerrno.h
*************** ed45982c0390b975759db44d49ec3b37  libstd
*** 20106,20124 ****
  fe7d862405bcbce4c515f768ac941f7f  libstdc++-v3/include/c_std/std_ciso646.h
  d7dafadc492048da97adaf8c2394e7bf  libstdc++-v3/include/c_std/std_climits.h
  5942b8bf14c45c9963bba1e3cac49eb5  libstdc++-v3/include/c_std/std_clocale.h
! b1b10f44e7c40d9979c13e45c0b873ee  libstdc++-v3/include/c_std/std_cmath.h
  383ecd447ae95a2adf14e115ec57e480  libstdc++-v3/include/c_std/std_csetjmp.h
  e7f140ebb8d60a42d0bb271ba115ed15  libstdc++-v3/include/c_std/std_csignal.h
  2dca055bcf22474026ad79ec3d3037f5  libstdc++-v3/include/c_std/std_cstdarg.h
  49084e2731172fbb0b32c486bc77e3ff  libstdc++-v3/include/c_std/std_cstddef.h
  2e6068cf551312891d9611ac17c8a05f  libstdc++-v3/include/c_std/std_cstdio.h
! 9b6288548c310e4eeb863ecd980e2c64  libstdc++-v3/include/c_std/std_cstdlib.h
  e5741ec9ba2b1a42edb3a793e0756ffc  libstdc++-v3/include/c_std/std_cstring.h
  205c3f65d70da1be2f0b3d22f7f9e8a8  libstdc++-v3/include/c_std/std_ctime.h
  34d90f125d8fa8d879bfea54b6f05796  libstdc++-v3/include/c_std/std_cwchar.h
  5275f1aeffef30ff24504c04af5076fc  libstdc++-v3/include/c_std/std_cwctype.h
  42fd5fb3801b658421f1245f493400d0  libstdc++-v3/include/debug/bitset
! dfb1b5ffb5d42e9c4776a894991e718a  libstdc++-v3/include/debug/debug.h
  5b04eec0709de0cd9c1dac464c535172  libstdc++-v3/include/debug/deque
  1f660dc0fe8fba93fad8c034994da002  libstdc++-v3/include/debug/formatter.h
  da6a28ed9e65bfe16f755ba1474e61b9  libstdc++-v3/include/debug/hash_map
--- 24077,24095 ----
  fe7d862405bcbce4c515f768ac941f7f  libstdc++-v3/include/c_std/std_ciso646.h
  d7dafadc492048da97adaf8c2394e7bf  libstdc++-v3/include/c_std/std_climits.h
  5942b8bf14c45c9963bba1e3cac49eb5  libstdc++-v3/include/c_std/std_clocale.h
! 4b74eeff7f9b7fc2886bdd6f0de713ed  libstdc++-v3/include/c_std/std_cmath.h
  383ecd447ae95a2adf14e115ec57e480  libstdc++-v3/include/c_std/std_csetjmp.h
  e7f140ebb8d60a42d0bb271ba115ed15  libstdc++-v3/include/c_std/std_csignal.h
  2dca055bcf22474026ad79ec3d3037f5  libstdc++-v3/include/c_std/std_cstdarg.h
  49084e2731172fbb0b32c486bc77e3ff  libstdc++-v3/include/c_std/std_cstddef.h
  2e6068cf551312891d9611ac17c8a05f  libstdc++-v3/include/c_std/std_cstdio.h
! abf3da95400964406efaedb2e24ad9fe  libstdc++-v3/include/c_std/std_cstdlib.h
  e5741ec9ba2b1a42edb3a793e0756ffc  libstdc++-v3/include/c_std/std_cstring.h
  205c3f65d70da1be2f0b3d22f7f9e8a8  libstdc++-v3/include/c_std/std_ctime.h
  34d90f125d8fa8d879bfea54b6f05796  libstdc++-v3/include/c_std/std_cwchar.h
  5275f1aeffef30ff24504c04af5076fc  libstdc++-v3/include/c_std/std_cwctype.h
  42fd5fb3801b658421f1245f493400d0  libstdc++-v3/include/debug/bitset
! 148e16c7a668d0caa8e113ff45c82127  libstdc++-v3/include/debug/debug.h
  5b04eec0709de0cd9c1dac464c535172  libstdc++-v3/include/debug/deque
  1f660dc0fe8fba93fad8c034994da002  libstdc++-v3/include/debug/formatter.h
  da6a28ed9e65bfe16f755ba1474e61b9  libstdc++-v3/include/debug/hash_map
*************** c95aab995529dfd3c1e4a2d17fb2c703  libstd
*** 20133,20263 ****
  7a2819839942c8b434e78effcb75232e  libstdc++-v3/include/debug/multimap.h
  94ecfb5d12fe77a429d3a68a12a46f3f  libstdc++-v3/include/debug/multiset.h
  992f40a923010787607d9494402c4fcf  libstdc++-v3/include/debug/safe_base.h
! 5cabd0c90fc28df30b7de5c897478d17  libstdc++-v3/include/debug/safe_iterator.h
  a4300514694de54a248a9f98102a9f21  libstdc++-v3/include/debug/safe_iterator.tcc
  e26da2ac74f0878f9bd7e0da98d673c9  libstdc++-v3/include/debug/safe_sequence.h
  53ef68258ffecf7b6c8d97866775dbb1  libstdc++-v3/include/debug/set
  939dbc206726090f554b922e5b6c01d6  libstdc++-v3/include/debug/set.h
  7d3194e73062fb8c6e6fef7f21521a25  libstdc++-v3/include/debug/string
  46ca3793478cc42a9ce1ef74b6102638  libstdc++-v3/include/debug/vector
! 7f7d834593c6a0b67139b7cdfb0cc2df  libstdc++-v3/include/ext/algorithm
! 7aec9305ed9df48ba74196c7be633399  libstdc++-v3/include/ext/bitmap_allocator.h
! 5a423a8ee903a89241b5f150e61d8b45  libstdc++-v3/include/ext/debug_allocator.h
! b45e74b9d295d52f97ef3bf4f2e03042  libstdc++-v3/include/ext/enc_filebuf.h
! 352f98583f94423625819dab75d25bfd  libstdc++-v3/include/ext/functional
! a47b58f15af4fbf7e929e89b2063c618  libstdc++-v3/include/ext/hash_fun.h
! 4e92d0ccae4689f1657ab3b5fe226e06  libstdc++-v3/include/ext/hash_map
! 3750ef199637580ad2ca1569b3eaf316  libstdc++-v3/include/ext/hash_set
! db94952cbe7706f7b0d6064ca74ad77a  libstdc++-v3/include/ext/hashtable.h
! 0622b19c52c6908de211b87e17f050b4  libstdc++-v3/include/ext/iterator
! abcf752b5665d40135f8b55f9d75d57d  libstdc++-v3/include/ext/malloc_allocator.h
! 0e6df0dfbe2b36603d675a1c5dffb81d  libstdc++-v3/include/ext/memory
! 81bca9a3d8872dd7aeeebbb2892e67d1  libstdc++-v3/include/ext/mt_allocator.h
! a886f347db04daf7e93ba5c21e6c2849  libstdc++-v3/include/ext/new_allocator.h
! 2a639425d603b9ae84d51423382846fa  libstdc++-v3/include/ext/numeric
! 304f71865a24e3dbe893269a544605b8  libstdc++-v3/include/ext/pod_char_traits.h
! 8d62dc2c674521c8d85e5479fbb0ecc8  libstdc++-v3/include/ext/pool_allocator.h
! 8126332f37fbf0384af48b79f278a1ab  libstdc++-v3/include/ext/rb_tree
! 6656654c138d2c7e63caaca73c0ce61f  libstdc++-v3/include/ext/rope
! f38b47afa6464f9d6d2c01574f99cbbc  libstdc++-v3/include/ext/ropeimpl.h
! 0cc5a24999c3801fade48cb50a0e1b43  libstdc++-v3/include/ext/slist
! 481de15386773e1eae7544d9410b138b  libstdc++-v3/include/ext/stdio_filebuf.h
! a4a62a166815d83348d5fa66bfd68483  libstdc++-v3/include/ext/stdio_sync_filebuf.h
! eb78e05a0ea73deb7ad9e2cc39b72eb3  libstdc++-v3/include/std/std_algorithm.h
! 6f4cc7b2c4ab365d9b424f7698cd9ab5  libstdc++-v3/include/std/std_bitset.h
! fb5159687ae068adce56e0caa989bd11  libstdc++-v3/include/std/std_complex.h
! 69c4d18dcf39931b223df089e24ed715  libstdc++-v3/include/std/std_deque.h
! 34d5880d18660d9dd35463f8c55f8c92  libstdc++-v3/include/std/std_fstream.h
! 470e0e4c16194890841c1d95337e2886  libstdc++-v3/include/std/std_functional.h
! 95d679b0e73001a42da3ec5638d6b6fc  libstdc++-v3/include/std/std_iomanip.h
! 6a55f674bb85278fb3d2da352a998716  libstdc++-v3/include/std/std_ios.h
! 7445a701a215feafd93eab514e62de1f  libstdc++-v3/include/std/std_iosfwd.h
! bba9b572fec66445d660bd060d341083  libstdc++-v3/include/std/std_iostream.h
! 2988bc4d073fc7c8876e1f1575fe725d  libstdc++-v3/include/std/std_istream.h
! 1ecfa4e0b26adb3f6800f6fe61b5d8ec  libstdc++-v3/include/std/std_iterator.h
! 9e5c36cde9e38317913cea48241552e1  libstdc++-v3/include/std/std_limits.h
! 6850a934c4514a7992d62f381557c961  libstdc++-v3/include/std/std_list.h
! 5c9ad28d4230496dd1dedde37a45b87c  libstdc++-v3/include/std/std_locale.h
! 9db482878edae07bea4c1239ecbee32a  libstdc++-v3/include/std/std_map.h
! 166be49e0972a48ecd1d5967377a5153  libstdc++-v3/include/std/std_memory.h
! f353dd0179b50304c4258db06d134a48  libstdc++-v3/include/std/std_numeric.h
! 51973ebc4cdb270639c758c59cf50ec2  libstdc++-v3/include/std/std_ostream.h
! 65cff1959bd0afdef3150baff2929d2e  libstdc++-v3/include/std/std_queue.h
! 06d1785c4d1414a53fc63c14c68cb578  libstdc++-v3/include/std/std_set.h
! c1725b6669e696065856f53e95496b27  libstdc++-v3/include/std/std_sstream.h
! 03c202131b8432ee9c96f3fd7750c429  libstdc++-v3/include/std/std_stack.h
! 72a3e68cfbea6407703919b8496dd7b8  libstdc++-v3/include/std/std_stdexcept.h
! 3a9d8eee83947a141850b0677f20dde1  libstdc++-v3/include/std/std_streambuf.h
! 028e246048b288541a5a6b9575e86bfb  libstdc++-v3/include/std/std_string.h
! 0d5d63343d8ca1a44ce86e9a122aa322  libstdc++-v3/include/std/std_utility.h
! f4b665ce831045255bc94662090a79f2  libstdc++-v3/include/std/std_valarray.h
! 69fb69aa3047f89fc7b901edf200b6e6  libstdc++-v3/include/std/std_vector.h
  57cc9bdbdd4de449b4154ae81b7ada23  libstdc++-v3/include/stdc++.h
  fb3c015055598361f803edaf81a0e916  libstdc++-v3/libmath/Makefile.am
! 1717258c2cc9ceebf66f9610a0e8f17c  libstdc++-v3/libmath/Makefile.in
  0e60381b541de5d6e770a19f7c657baa  libstdc++-v3/libmath/copysignf.c
  4176424a7165f157eebbf7d72845f6df  libstdc++-v3/libmath/mathconf.h
  2c563f6d32edc96288491dd6942a1b71  libstdc++-v3/libmath/signbit.c
  4f2ab370f625c379cfb24576ce5ed99b  libstdc++-v3/libmath/signbitf.c
  7afffc1d2d837e1c542c3d7965e8607d  libstdc++-v3/libmath/signbitl.c
  928d19739085b5578233c550336582b7  libstdc++-v3/libmath/stubs.c
! 768cdaecaf2f0aa4440eb8aadc6eb25d  libstdc++-v3/libsupc++/Makefile.am
! 5e70ba6fc4759b5945f091c5275f5961  libstdc++-v3/libsupc++/Makefile.in
! c1c044225ab935f92106e56388f83013  libstdc++-v3/libsupc++/cxxabi.h
! 99e1dc2ba88c16b70de36c7268828507  libstdc++-v3/libsupc++/del_op.cc
! 47856992c0c49ab44a145094b475159f  libstdc++-v3/libsupc++/del_opnt.cc
! a588c01a013c0e0aa48b4c68883ceda5  libstdc++-v3/libsupc++/del_opv.cc
! 8df0ec0f7f8b8a62a128a72195fba0b5  libstdc++-v3/libsupc++/del_opvnt.cc
! c2a563e7666e4f0ff7f58b0c65f4569b  libstdc++-v3/libsupc++/eh_alloc.cc
! 47cf268d4361b0a7fca4c6dcd37794dc  libstdc++-v3/libsupc++/eh_aux_runtime.cc
! abb8064231633168f4b0e5531eb52733  libstdc++-v3/libsupc++/eh_catch.cc
  95a9fae5dbc74a3ebf6f1ce01a5b05d0  libstdc++-v3/libsupc++/eh_exception.cc
! 4da3618aa9d8906ae5d5f0ea82e9a559  libstdc++-v3/libsupc++/eh_globals.cc
  31223dc18772cca5c7234100c484eeab  libstdc++-v3/libsupc++/eh_personality.cc
  52ffeaa60d930af865e5ccd703b9e0e1  libstdc++-v3/libsupc++/eh_term_handler.cc
  4778ed292b8b4d5c6194a197ec7da832  libstdc++-v3/libsupc++/eh_terminate.cc
! 5c8b3cb63e729fad14b4986112c8832f  libstdc++-v3/libsupc++/eh_throw.cc
! ee1be6d49cf35595a619b1ee0156561c  libstdc++-v3/libsupc++/eh_type.cc
  688ff3aaef13013a0e33c3316b95a1d7  libstdc++-v3/libsupc++/eh_unex_handler.cc
! 61d5655f62225895e8b101c44db4ef67  libstdc++-v3/libsupc++/exception
  51d07b1c9ba4d18a0ef7bff815e86390  libstdc++-v3/libsupc++/exception_defines.h
! 020589eab3cc5df46e01952131ef478e  libstdc++-v3/libsupc++/guard.cc
! d948738dbfa53433570aeebf553fd9ed  libstdc++-v3/libsupc++/new
  652780aeab3280b1d2e761d8c9ffd1a0  libstdc++-v3/libsupc++/new_handler.cc
! 39569168e17637dcf4c462baf03a376b  libstdc++-v3/libsupc++/new_op.cc
! 2907339ca796a49926999b87ebda8080  libstdc++-v3/libsupc++/new_opnt.cc
! c5e107b21008b5d570b4d1b434ac7077  libstdc++-v3/libsupc++/new_opv.cc
! 8c1640e7c92428a7b9bfec600496988c  libstdc++-v3/libsupc++/new_opvnt.cc
! 0e8096db086e41d4fde61db4ff86492f  libstdc++-v3/libsupc++/pure.cc
  33ba14854c237eada9f3a698eaf781ec  libstdc++-v3/libsupc++/tinfo.cc
  d5e6d8dfa5a39e2d3a6a13db2a440bc0  libstdc++-v3/libsupc++/tinfo.h
  7c01407a5139c624db1c06b2a8bd0fa2  libstdc++-v3/libsupc++/tinfo2.cc
! 60c2d1524c534d83057062801998734f  libstdc++-v3/libsupc++/typeinfo
! b50c2c3c5bb81d493f2a55410f1c69ef  libstdc++-v3/libsupc++/unwind-cxx.h
! 0d60b47985336d9c0b052a0ef27c5843  libstdc++-v3/libsupc++/vec.cc
! 20422d9fc0faa50ecf5dc3ffbfb86c34  libstdc++-v3/libsupc++/vterminate.cc
  05f11e4e6a4baed3f89d1a0c6ebf93d7  libstdc++-v3/linkage.m4
  9fc98e5b6a3fdbae0303306e81fa6577  libstdc++-v3/po/Makefile.am
! a33b2bb5b19f094e472e871c160edd64  libstdc++-v3/po/Makefile.in
  40dca05090c534f278354b45713ba7fb  libstdc++-v3/po/POTFILES.in
  a3a922f9c16410e9a1f3efffbb707017  libstdc++-v3/po/de.po
  5fb51673038baf4f5e72275460d22e3f  libstdc++-v3/po/fr.po
  11079eef5dba307de8012bb549b39ebd  libstdc++-v3/po/libstdc++.pot
  406334c3319494b68eca357fe3d57b92  libstdc++-v3/po/string_literals.cc
! 91dd98a7fc2e0de76d5a457caadf6ee5  libstdc++-v3/scripts/check_performance
  5c61e85bb580a55f769a0fe0e550f2f9  libstdc++-v3/scripts/check_survey.in
! d02acd03348e05e2e6df11f7dea176de  libstdc++-v3/scripts/create_testsuite_files
  1b12b183fd2e61b1f3952087eb45e8fd  libstdc++-v3/scripts/extract_symvers
! b58f6fc5840ce74e74dc4fa8e3be2ad6  libstdc++-v3/scripts/testsuite_flags.in
! a393b367caaca905e51bdc354c004ec9  libstdc++-v3/src/Makefile.am
! 77ed085c09859b2b864c2e9cd8d422df  libstdc++-v3/src/Makefile.in
! 9a51c85a0bcf639e091b6b5f238fecde  libstdc++-v3/src/allocator-inst.cc
! de2733558f6c3b03092ef053b0933a68  libstdc++-v3/src/allocator.cc
! e32c6148dda46bf5cb3fe63409e9dada  libstdc++-v3/src/codecvt.cc
  1fe615827e1969cb74664e21922bf02f  libstdc++-v3/src/complex_io.cc
  f6b57645d59acaa9bbe15b3a20c31537  libstdc++-v3/src/concept-inst.cc
  1308d5e87aff4099828e966b51b9056d  libstdc++-v3/src/ctype.cc
! 455438b0ac8906bc36cc608b8b1f8b4f  libstdc++-v3/src/debug.cc
  d94822f7f6534d871b2ee105d2fadd98  libstdc++-v3/src/debug_list.cc
  641b0956b2f384dc73fce6300304330c  libstdc++-v3/src/ext-inst.cc
  8cf946fd23794a64da02eeae60962706  libstdc++-v3/src/fstream-inst.cc
--- 24104,24257 ----
  7a2819839942c8b434e78effcb75232e  libstdc++-v3/include/debug/multimap.h
  94ecfb5d12fe77a429d3a68a12a46f3f  libstdc++-v3/include/debug/multiset.h
  992f40a923010787607d9494402c4fcf  libstdc++-v3/include/debug/safe_base.h
! f8d022a05283672a3e77f4ff55bba374  libstdc++-v3/include/debug/safe_iterator.h
  a4300514694de54a248a9f98102a9f21  libstdc++-v3/include/debug/safe_iterator.tcc
  e26da2ac74f0878f9bd7e0da98d673c9  libstdc++-v3/include/debug/safe_sequence.h
  53ef68258ffecf7b6c8d97866775dbb1  libstdc++-v3/include/debug/set
  939dbc206726090f554b922e5b6c01d6  libstdc++-v3/include/debug/set.h
  7d3194e73062fb8c6e6fef7f21521a25  libstdc++-v3/include/debug/string
  46ca3793478cc42a9ce1ef74b6102638  libstdc++-v3/include/debug/vector
! 25f93b2b7a6bdf3204109443905f9257  libstdc++-v3/include/ext/algorithm
! 53fd2318cb882d51935c10f9c6458b4c  libstdc++-v3/include/ext/array_allocator.h
! 9f600d5c4dbd9c07d143fe861ac3f8ad  libstdc++-v3/include/ext/bitmap_allocator.h
! 196b7fe39b3f06fdf52da90f9a740c40  libstdc++-v3/include/ext/codecvt_specializations.h
! 9d924fd788a413e79f65f288ed82e80d  libstdc++-v3/include/ext/debug_allocator.h
! 5f5168db40dda5787ee77e28739ee255  libstdc++-v3/include/ext/functional
! 3f2ee027496ab23c461227f8073b1807  libstdc++-v3/include/ext/hash_fun.h
! 28dcdf460de398e7d5b9fbc1b30a4de2  libstdc++-v3/include/ext/hash_map
! d83e6f955455b80fa38c8f0d59a7f3db  libstdc++-v3/include/ext/hash_set
! c48a39d29d2e0c78901233feb70e19ce  libstdc++-v3/include/ext/hashtable.h
! ef80b54b15af456a341cbefd3855b72a  libstdc++-v3/include/ext/iterator
! 7b47380f240aee54aac1eb3e44e52c03  libstdc++-v3/include/ext/malloc_allocator.h
! 1f3f62bdd9209aeaad443c8caf652f0e  libstdc++-v3/include/ext/memory
! 6dd2d99a46748185c83b027b75e42324  libstdc++-v3/include/ext/mt_allocator.h
! 839ea0a2da27396c055cc36346b4b9b4  libstdc++-v3/include/ext/new_allocator.h
! 30f9178dc7efd135d6efaf79c0020e8a  libstdc++-v3/include/ext/numeric
! c00a6d74b06ff9171bb2fd043f5db8ba  libstdc++-v3/include/ext/pod_char_traits.h
! 85c67c8416b759b69ca8ab9c29469081  libstdc++-v3/include/ext/pool_allocator.h
! f44c4295b95ae4121e0052fd467d6cbd  libstdc++-v3/include/ext/rb_tree
! e90c529d687dd88bc38da82ecb89cad1  libstdc++-v3/include/ext/rope
! d09349eb3ae3bc4363e6c3ec2556f780  libstdc++-v3/include/ext/ropeimpl.h
! c38b470f6a992a1c06ecfa0eac6c17ec  libstdc++-v3/include/ext/slist
! 0936639c5d3b129728ec275d7c157222  libstdc++-v3/include/ext/stdio_filebuf.h
! dbebf76bc5d7adbbfb5578794eee3591  libstdc++-v3/include/ext/stdio_sync_filebuf.h
! 5624807b5891ec4edaf850ea246e1ae1  libstdc++-v3/include/std/std_algorithm.h
! 3bb6a526f140668eba5e72b795945a77  libstdc++-v3/include/std/std_bitset.h
! 1fe511cfc675a413576b6e452ed47064  libstdc++-v3/include/std/std_complex.h
! 3db16b006c2b68cb6519b2f187b8641e  libstdc++-v3/include/std/std_deque.h
! acbd9d811cee1f5cfebca97dce35c142  libstdc++-v3/include/std/std_fstream.h
! 4208bfc88ce796ab9629e0a7c7f3d68c  libstdc++-v3/include/std/std_functional.h
! f7966ed25cbc369c7c5404a82a456fe8  libstdc++-v3/include/std/std_iomanip.h
! f2a085c4ad0aabde4f74c7c7d2e7671e  libstdc++-v3/include/std/std_ios.h
! 0ee9fdb3efc20419f2b3c5999d2c310b  libstdc++-v3/include/std/std_iosfwd.h
! b7638c70479194c844cef8d925cd5978  libstdc++-v3/include/std/std_iostream.h
! 5c9150a8d2b6cc83bf3d33a07266500e  libstdc++-v3/include/std/std_istream.h
! c02f47ea67cd7bdd2ba69ee768a89b34  libstdc++-v3/include/std/std_iterator.h
! b27b9b027bdc866ca1b6de4c2a80c8fa  libstdc++-v3/include/std/std_limits.h
! f5927b17743f4fa1b5e55416f1d154ca  libstdc++-v3/include/std/std_list.h
! a0a5ad3578c4180725d6e1001d238363  libstdc++-v3/include/std/std_locale.h
! 1b079b908b18f55718741693d34bea86  libstdc++-v3/include/std/std_map.h
! cd03d84cca7c0128f843cea07cd605a1  libstdc++-v3/include/std/std_memory.h
! e5fb35165f95edcf3001a0dc3ef4f09f  libstdc++-v3/include/std/std_numeric.h
! 32145a4a1dc8c371a4cd7ebc4e267057  libstdc++-v3/include/std/std_ostream.h
! abdaead5874f580687572e97f6fa6372  libstdc++-v3/include/std/std_queue.h
! d836cd452e21832ba6277bea874ca9d2  libstdc++-v3/include/std/std_set.h
! c2394ab3fa513634d1f373bc465f15a0  libstdc++-v3/include/std/std_sstream.h
! 4a7ac2969cafd937ef0884a3c4b118d3  libstdc++-v3/include/std/std_stack.h
! 7cab278a8d666f764f34547811576d08  libstdc++-v3/include/std/std_stdexcept.h
! e4425b5c362036fdfb7a90d5bfb1def4  libstdc++-v3/include/std/std_streambuf.h
! 84b97b009b954429f699c9759c0663db  libstdc++-v3/include/std/std_string.h
! 62ee59069fe36eca2b05be13c0f5bb3d  libstdc++-v3/include/std/std_utility.h
! cd71c78b43ec4468bf881151098aaa78  libstdc++-v3/include/std/std_valarray.h
! 6d20674a8fb5eea8267bfa689cd3a1ae  libstdc++-v3/include/std/std_vector.h
  57cc9bdbdd4de449b4154ae81b7ada23  libstdc++-v3/include/stdc++.h
+ 0d7c9756ad63925c84a5937f5c87fec7  libstdc++-v3/include/tr1/array
+ 7c2dbdd038890ced8eb80e1eb65cfa6b  libstdc++-v3/include/tr1/bind_iterate.h
+ e52ab19ac76aa27fcd03f300c380490b  libstdc++-v3/include/tr1/bind_repeat.h
+ 88e206fc10eec45b04427c219bb35594  libstdc++-v3/include/tr1/boost_shared_ptr.h
+ f9755bb28b59f2c6df38643fa47fdcbd  libstdc++-v3/include/tr1/functional
+ db4d5a368b7c83f84596fd29d845a559  libstdc++-v3/include/tr1/functional_iterate.h
+ 571c287eb029f05bb75fe34d69f5c9d1  libstdc++-v3/include/tr1/hashtable
+ 08f0a58a585e9a205e41bb3d0883f70b  libstdc++-v3/include/tr1/memory
+ 488f544088ffc86a8805d90e7601223b  libstdc++-v3/include/tr1/mu_iterate.h
+ 84a15cd6495aad89109747a9642b3319  libstdc++-v3/include/tr1/ref_fwd.h
+ 079433f00e6c255a44a268ea41031323  libstdc++-v3/include/tr1/ref_wrap_iterate.h
+ 546eb8ee1e7d7fe339bee045041d52d3  libstdc++-v3/include/tr1/repeat.h
+ d0830f9af1e167b3ef94e86bdcc1699d  libstdc++-v3/include/tr1/tuple
+ 973b53b69a7682bbb45aa2eb44f2182a  libstdc++-v3/include/tr1/tuple_iterate.h
+ e914000de14e5fe0c122a88418f5bd1e  libstdc++-v3/include/tr1/type_traits
+ ced05bccada96e391eb9bf818a6c6e49  libstdc++-v3/include/tr1/type_traits_fwd.h
+ 12c79f803a6f8d343d24e59524f158f2  libstdc++-v3/include/tr1/unordered_map
+ 937306fbed85ab02f20900c1d790f602  libstdc++-v3/include/tr1/unordered_set
+ 4e38f872c35c384f15a59e12166fe8a6  libstdc++-v3/include/tr1/utility
  fb3c015055598361f803edaf81a0e916  libstdc++-v3/libmath/Makefile.am
! 32bb41669052351fada9fbab73cc2407  libstdc++-v3/libmath/Makefile.in
  0e60381b541de5d6e770a19f7c657baa  libstdc++-v3/libmath/copysignf.c
  4176424a7165f157eebbf7d72845f6df  libstdc++-v3/libmath/mathconf.h
  2c563f6d32edc96288491dd6942a1b71  libstdc++-v3/libmath/signbit.c
  4f2ab370f625c379cfb24576ce5ed99b  libstdc++-v3/libmath/signbitf.c
  7afffc1d2d837e1c542c3d7965e8607d  libstdc++-v3/libmath/signbitl.c
  928d19739085b5578233c550336582b7  libstdc++-v3/libmath/stubs.c
! d32bfe146b0a28b759b15ed6a2e32a88  libstdc++-v3/libsupc++/Makefile.am
! 82b220b9d4b65a630ea64394b2fe46fc  libstdc++-v3/libsupc++/Makefile.in
! ed424464ee25d42e9d8b1e18b2ad967f  libstdc++-v3/libsupc++/cxxabi.h
! a357752bfeada99323d472bcbf7558f9  libstdc++-v3/libsupc++/del_op.cc
! 6f147a5201a1acb3df0e68993ad217c8  libstdc++-v3/libsupc++/del_opnt.cc
! 39fc70c4f1a7aedff425c530eae6f012  libstdc++-v3/libsupc++/del_opv.cc
! 9f12f48ba186fb9524b8d2149a974e35  libstdc++-v3/libsupc++/del_opvnt.cc
! defb3551b4c055a410043e71f5351761  libstdc++-v3/libsupc++/eh_alloc.cc
! f400f299b655333571248c703b4f1796  libstdc++-v3/libsupc++/eh_aux_runtime.cc
! 5628bc38d04e17262d328d6fb55e1856  libstdc++-v3/libsupc++/eh_catch.cc
  95a9fae5dbc74a3ebf6f1ce01a5b05d0  libstdc++-v3/libsupc++/eh_exception.cc
! 95a1e8cf28ccda2dead19f3d89983617  libstdc++-v3/libsupc++/eh_globals.cc
  31223dc18772cca5c7234100c484eeab  libstdc++-v3/libsupc++/eh_personality.cc
  52ffeaa60d930af865e5ccd703b9e0e1  libstdc++-v3/libsupc++/eh_term_handler.cc
  4778ed292b8b4d5c6194a197ec7da832  libstdc++-v3/libsupc++/eh_terminate.cc
! 18e30a8ce78021e4be6269d229b2909d  libstdc++-v3/libsupc++/eh_throw.cc
! 2bde0f500c33b4d131cdba00956820f9  libstdc++-v3/libsupc++/eh_type.cc
  688ff3aaef13013a0e33c3316b95a1d7  libstdc++-v3/libsupc++/eh_unex_handler.cc
! fa34b1cf2a5995f496bda4e0f372928f  libstdc++-v3/libsupc++/exception
  51d07b1c9ba4d18a0ef7bff815e86390  libstdc++-v3/libsupc++/exception_defines.h
! 29618746ae10aebcf141da9b55ac0b3d  libstdc++-v3/libsupc++/guard.cc
! f9aa484fbfa15f9cc46efb5efd89cf21  libstdc++-v3/libsupc++/new
  652780aeab3280b1d2e761d8c9ffd1a0  libstdc++-v3/libsupc++/new_handler.cc
! 8b39802a8228b4a25521d991b2cdfaeb  libstdc++-v3/libsupc++/new_op.cc
! c57d0501c6bff2b79ee4a68ee84fc787  libstdc++-v3/libsupc++/new_opnt.cc
! 89dc2a1093543b3a85b4b0d1789f6676  libstdc++-v3/libsupc++/new_opv.cc
! fe125d186f910414735ac18ce5a727b1  libstdc++-v3/libsupc++/new_opvnt.cc
! 789da1f04f5d60073c0f188d79d9ad68  libstdc++-v3/libsupc++/pure.cc
  33ba14854c237eada9f3a698eaf781ec  libstdc++-v3/libsupc++/tinfo.cc
  d5e6d8dfa5a39e2d3a6a13db2a440bc0  libstdc++-v3/libsupc++/tinfo.h
  7c01407a5139c624db1c06b2a8bd0fa2  libstdc++-v3/libsupc++/tinfo2.cc
! b17f571059c966c6d3861c81a37a4af2  libstdc++-v3/libsupc++/typeinfo
! 56f8fb45a8a2021b7103b2695d74ce74  libstdc++-v3/libsupc++/unwind-cxx.h
! 93e54fd5c942074a2217c1d70e5fe133  libstdc++-v3/libsupc++/vec.cc
! 7ab0ea61a3da31741f6004ec3eadd7b3  libstdc++-v3/libsupc++/vterminate.cc
  05f11e4e6a4baed3f89d1a0c6ebf93d7  libstdc++-v3/linkage.m4
  9fc98e5b6a3fdbae0303306e81fa6577  libstdc++-v3/po/Makefile.am
! 71e256d416f12738d0fa5a059b9114b1  libstdc++-v3/po/Makefile.in
  40dca05090c534f278354b45713ba7fb  libstdc++-v3/po/POTFILES.in
  a3a922f9c16410e9a1f3efffbb707017  libstdc++-v3/po/de.po
  5fb51673038baf4f5e72275460d22e3f  libstdc++-v3/po/fr.po
  11079eef5dba307de8012bb549b39ebd  libstdc++-v3/po/libstdc++.pot
  406334c3319494b68eca357fe3d57b92  libstdc++-v3/po/string_literals.cc
! 0bf040eef8fa68d4ba97dc4b7b2c89b6  libstdc++-v3/scripts/check_compile
! 3cb9e49f27487b20ceec03d1d420ad79  libstdc++-v3/scripts/check_performance
  5c61e85bb580a55f769a0fe0e550f2f9  libstdc++-v3/scripts/check_survey.in
! 8ec6185ea8b9cc0342dcf46f75e44270  libstdc++-v3/scripts/create_testsuite_files
  1b12b183fd2e61b1f3952087eb45e8fd  libstdc++-v3/scripts/extract_symvers
! 755b77f929d926f07f3257df2e802f2e  libstdc++-v3/scripts/gen_bind_includers.pl
! 0d84fcf9b040827c404f80ca782b168b  libstdc++-v3/scripts/gen_includers.pl
! f04aecc43acd9e8243c65fcf97f019b9  libstdc++-v3/scripts/testsuite_flags.in
! 8fa5291d97e792c92a3eb3e9f20cb2cc  libstdc++-v3/src/Makefile.am
! 849e586a3fbbfac6b0b8d7a4e649ef27  libstdc++-v3/src/Makefile.in
! 7d554b2f4e9c59c313b42b58d041b3c3  libstdc++-v3/src/allocator-inst.cc
! d890e35e7fef8bde8440a7cacff836f6  libstdc++-v3/src/bitmap_allocator.cc
! 3fbacff596980b37a2f4376ca17e079e  libstdc++-v3/src/codecvt.cc
  1fe615827e1969cb74664e21922bf02f  libstdc++-v3/src/complex_io.cc
  f6b57645d59acaa9bbe15b3a20c31537  libstdc++-v3/src/concept-inst.cc
  1308d5e87aff4099828e966b51b9056d  libstdc++-v3/src/ctype.cc
! fe9304cc0086bb9c1797778a5151ac48  libstdc++-v3/src/debug.cc
  d94822f7f6534d871b2ee105d2fadd98  libstdc++-v3/src/debug_list.cc
  641b0956b2f384dc73fce6300304330c  libstdc++-v3/src/ext-inst.cc
  8cf946fd23794a64da02eeae60962706  libstdc++-v3/src/fstream-inst.cc
*************** d94822f7f6534d871b2ee105d2fadd98  libstd
*** 20265,20292 ****
  74ea6e1cde1885ffa3789c59afe0c2f4  libstdc++-v3/src/globals_io.cc
  9ff74f0d2bdff080605402eed078ee50  libstdc++-v3/src/globals_locale.cc
  07caa02e96085d45bac9bd022f93e7e6  libstdc++-v3/src/io-inst.cc
! 20947615e2dac9ddf3bf23c02183c30d  libstdc++-v3/src/ios.cc
  0500f4b6fdb8521fda50933f79d44cee  libstdc++-v3/src/ios_failure.cc
  92b3ade3862a7b5f1e48f0536d24a835  libstdc++-v3/src/ios_init.cc
  6ffbe5771f17a91bc4ae6c1ea940498e  libstdc++-v3/src/ios_locale.cc
  af2ff35612aba32432ea30a2d1b2d5fd  libstdc++-v3/src/istream-inst.cc
  0bdc3916863f7b86ee1e9147462832d9  libstdc++-v3/src/limits.cc
  3e1551bd621129b979ceb4036183e054  libstdc++-v3/src/list.cc
  949477fd30ab9a476953ae571557448f  libstdc++-v3/src/locale-inst.cc
  7f9842ebfdad56ec8da107bc4f02f1f0  libstdc++-v3/src/locale-misc-inst.cc
! 391207cee2b4afa74bf89d48701d8134  libstdc++-v3/src/locale.cc
  be6008ce57ff37fd89e4abab17418451  libstdc++-v3/src/locale_facets.cc
! 144d47f2377f0220209d82ae8a515e07  libstdc++-v3/src/locale_init.cc
! 97d463f3fbc788aade1d5fc317a897b0  libstdc++-v3/src/localename.cc
  f4e63f0e1b4265d20e1b4299f433a30e  libstdc++-v3/src/misc-inst.cc
  4f53311abf7d3fb1287c2dac21e88e53  libstdc++-v3/src/ostream-inst.cc
  4167243f02627c88a22d916be7927edb  libstdc++-v3/src/sstream-inst.cc
  deffa11a8d59228b783d82c44ed8ef6c  libstdc++-v3/src/stdexcept.cc
  5f938f282afac49983a53d20c330e763  libstdc++-v3/src/streambuf-inst.cc
! 368e606399babcf24881b79237747d68  libstdc++-v3/src/string-inst.cc
  f071c3ab5b6bc01731b9a66c585ddaf7  libstdc++-v3/src/strstream.cc
  2110947fc78d93e37f17171e46bc466c  libstdc++-v3/src/tree.cc
! 1dd789507cd2a3895537686d865677bf  libstdc++-v3/src/valarray-inst.cc
  b88640429508abaff1f9846614dced7e  libstdc++-v3/src/wlocale-inst.cc
  1e68c0237033b9403090aa1f0ba24ea3  libstdc++-v3/src/wstring-inst.cc
  683dd39661108381b7d29085e5a32aef  libstdc++-v3/testsuite/17_intro/header_cassert.cc
--- 24259,24290 ----
  74ea6e1cde1885ffa3789c59afe0c2f4  libstdc++-v3/src/globals_io.cc
  9ff74f0d2bdff080605402eed078ee50  libstdc++-v3/src/globals_locale.cc
  07caa02e96085d45bac9bd022f93e7e6  libstdc++-v3/src/io-inst.cc
! 4eef4ca8aaef5d70d0da08766f6e80f8  libstdc++-v3/src/ios.cc
  0500f4b6fdb8521fda50933f79d44cee  libstdc++-v3/src/ios_failure.cc
  92b3ade3862a7b5f1e48f0536d24a835  libstdc++-v3/src/ios_init.cc
  6ffbe5771f17a91bc4ae6c1ea940498e  libstdc++-v3/src/ios_locale.cc
  af2ff35612aba32432ea30a2d1b2d5fd  libstdc++-v3/src/istream-inst.cc
+ 240313068d0580defd26216147646bc3  libstdc++-v3/src/istream.cc
  0bdc3916863f7b86ee1e9147462832d9  libstdc++-v3/src/limits.cc
  3e1551bd621129b979ceb4036183e054  libstdc++-v3/src/list.cc
  949477fd30ab9a476953ae571557448f  libstdc++-v3/src/locale-inst.cc
  7f9842ebfdad56ec8da107bc4f02f1f0  libstdc++-v3/src/locale-misc-inst.cc
! f16fe4711385bee8d1cc7d1d9b7161d9  libstdc++-v3/src/locale.cc
  be6008ce57ff37fd89e4abab17418451  libstdc++-v3/src/locale_facets.cc
! dcfff3c1c9360e0165bd4912d729e40a  libstdc++-v3/src/locale_init.cc
! 4b76a8e0c60b13f678e62f3a9ea0dad4  libstdc++-v3/src/localename.cc
  f4e63f0e1b4265d20e1b4299f433a30e  libstdc++-v3/src/misc-inst.cc
+ af8b34a76cf2af35a342bfb3950569c8  libstdc++-v3/src/mt_allocator.cc
  4f53311abf7d3fb1287c2dac21e88e53  libstdc++-v3/src/ostream-inst.cc
+ 5c7dadc46f813f395eb0fa393263c047  libstdc++-v3/src/pool_allocator.cc
  4167243f02627c88a22d916be7927edb  libstdc++-v3/src/sstream-inst.cc
  deffa11a8d59228b783d82c44ed8ef6c  libstdc++-v3/src/stdexcept.cc
  5f938f282afac49983a53d20c330e763  libstdc++-v3/src/streambuf-inst.cc
! 8a6abd295e18c50291871fab7121c416  libstdc++-v3/src/streambuf.cc
! b80788ce3d40673cb9bbb14dff0826b7  libstdc++-v3/src/string-inst.cc
  f071c3ab5b6bc01731b9a66c585ddaf7  libstdc++-v3/src/strstream.cc
  2110947fc78d93e37f17171e46bc466c  libstdc++-v3/src/tree.cc
! 83fcb05e7c213519ad5d460f28e027c6  libstdc++-v3/src/valarray-inst.cc
  b88640429508abaff1f9846614dced7e  libstdc++-v3/src/wlocale-inst.cc
  1e68c0237033b9403090aa1f0ba24ea3  libstdc++-v3/src/wstring-inst.cc
  683dd39661108381b7d29085e5a32aef  libstdc++-v3/testsuite/17_intro/header_cassert.cc
*************** dc052f366da14143979fde1cb7b296ea  libstd
*** 20316,20354 ****
  9db641109f08bdcaa1090c7341b105b1  libstdc++-v3/testsuite/18_support/new_delete_placement.cc
  7bdd10560b54d9f647cd7db2818e511f  libstdc++-v3/testsuite/18_support/numeric_limits.cc
  e6a90fab24b1fcfb99d63e1fb68b8d98  libstdc++-v3/testsuite/19_diagnostics/stdexceptions.cc
! b9f7ee5ddcf92f3af03468484821472f  libstdc++-v3/testsuite/20_util/allocator/1.cc
! f2ebf12befece095a6f3ccb0acc65f3e  libstdc++-v3/testsuite/20_util/allocator/10378.cc
! ff95b196bf543cd0108643f96b59219c  libstdc++-v3/testsuite/20_util/allocator/14176.cc
! 400eab4433cccf5aed1badac2c10f01d  libstdc++-v3/testsuite/20_util/allocator/8230.cc
! 9d8258f09bb52b818416836cd08d5c59  libstdc++-v3/testsuite/20_util/auto_ptr/1.cc
! 5821bdd0c76ea3d286e343da19d94df3  libstdc++-v3/testsuite/20_util/auto_ptr/2.cc
! cf4ecdf52585f7b24e0dbf3e671d6736  libstdc++-v3/testsuite/20_util/auto_ptr/3.cc
! d4d45c1321ae38b1b05e502c8479e604  libstdc++-v3/testsuite/20_util/auto_ptr/3946.cc
! 8674a4776652e59701952606d815cc54  libstdc++-v3/testsuite/20_util/auto_ptr/4.cc
! df0551926507bee61f2abd97a4cd8bc6  libstdc++-v3/testsuite/20_util/auto_ptr/5.cc
! 3c7503d81863c805970cba7f619ed28e  libstdc++-v3/testsuite/20_util/auto_ptr/6.cc
! 190b3db8a89eda70566a7b6fac38b067  libstdc++-v3/testsuite/20_util/auto_ptr/7.cc
! 520bc37e270cba26299bf3973c6ca0e3  libstdc++-v3/testsuite/20_util/auto_ptr/assign_neg.cc
! cf7a051b2a801757cec57c98f29cd3f5  libstdc++-v3/testsuite/20_util/binders.cc
! 39d82b99db268caa90fb1f58fabec864  libstdc++-v3/testsuite/20_util/comparisons.cc
! c3fec86cefa8d96267c9b7d6ffc966db  libstdc++-v3/testsuite/20_util/pair/1.cc
! 25d656290213059348e2faed47f15437  libstdc++-v3/testsuite/20_util/pair/2.cc
! edc26c81af436a8411b7a438a113ed32  libstdc++-v3/testsuite/20_util/pair/3.cc
! 1de8334f9b809b7a2d8d40151d5d7183  libstdc++-v3/testsuite/20_util/pair/4.cc
! b692dc910c64d9b08b9d67146e49b1f6  libstdc++-v3/testsuite/20_util/raw_storage_iterator.cc
! 8552c81696b48aced432b3819e73bd77  libstdc++-v3/testsuite/20_util/temporary_buffer.cc
! 70a811d0c03829300323994eb2616dcb  libstdc++-v3/testsuite/21_strings/basic_string/append/char/1.cc
! bcf444e59282e15b1a8977fb6df8209f  libstdc++-v3/testsuite/21_strings/basic_string/append/wchar_t/1.cc
  6e442ab67bcfb227bdb0aec524cb76c5  libstdc++-v3/testsuite/21_strings/basic_string/assign/char/1.cc
  b348fb241fd20ebb5c86d8fa780e566f  libstdc++-v3/testsuite/21_strings/basic_string/assign/char/2.cc
! de196010831a2d1df13d63cc32dc92dc  libstdc++-v3/testsuite/21_strings/basic_string/assign/char/3.cc
  46af26050e5685f914a468d7fb49b6d0  libstdc++-v3/testsuite/21_strings/basic_string/assign/wchar_t/1.cc
  813d4e85127047c5a509d49c32245d6c  libstdc++-v3/testsuite/21_strings/basic_string/assign/wchar_t/2.cc
! 9314060eaec2f9643b138debdf75dd13  libstdc++-v3/testsuite/21_strings/basic_string/assign/wchar_t/3.cc
  8af819f284c6526a48b33ca255fbf679  libstdc++-v3/testsuite/21_strings/basic_string/capacity/1.cc
  6ed157164a4aa59a693b56ec289586a3  libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/1.cc
  dddde6feee9837eb6ebe3506157ff3d2  libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/2.cc
  38865fe680921704bff944f44e9c3faf  libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/1.cc
  8b1eb593929a337a00100bfa684b8e68  libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/2.cc
  232da99139362d63d432e931d0269faa  libstdc++-v3/testsuite/21_strings/basic_string/compare/char/1.cc
  7b2e418c306b3096e00299fa50abf111  libstdc++-v3/testsuite/21_strings/basic_string/compare/char/13650.cc
--- 24314,24360 ----
  9db641109f08bdcaa1090c7341b105b1  libstdc++-v3/testsuite/18_support/new_delete_placement.cc
  7bdd10560b54d9f647cd7db2818e511f  libstdc++-v3/testsuite/18_support/numeric_limits.cc
  e6a90fab24b1fcfb99d63e1fb68b8d98  libstdc++-v3/testsuite/19_diagnostics/stdexceptions.cc
! cf7a051b2a801757cec57c98f29cd3f5  libstdc++-v3/testsuite/20_util/functional/binders.cc
! 39d82b99db268caa90fb1f58fabec864  libstdc++-v3/testsuite/20_util/functional/comparisons.cc
! 94bb2b1c9caa3438c1d2daef057200d5  libstdc++-v3/testsuite/20_util/memory/16505.cc
! b9f7ee5ddcf92f3af03468484821472f  libstdc++-v3/testsuite/20_util/memory/allocator/1.cc
! f2ebf12befece095a6f3ccb0acc65f3e  libstdc++-v3/testsuite/20_util/memory/allocator/10378.cc
! ff95b196bf543cd0108643f96b59219c  libstdc++-v3/testsuite/20_util/memory/allocator/14176.cc
! 400eab4433cccf5aed1badac2c10f01d  libstdc++-v3/testsuite/20_util/memory/allocator/8230.cc
! 9d8258f09bb52b818416836cd08d5c59  libstdc++-v3/testsuite/20_util/memory/auto_ptr/1.cc
! 5821bdd0c76ea3d286e343da19d94df3  libstdc++-v3/testsuite/20_util/memory/auto_ptr/2.cc
! cf4ecdf52585f7b24e0dbf3e671d6736  libstdc++-v3/testsuite/20_util/memory/auto_ptr/3.cc
! d4d45c1321ae38b1b05e502c8479e604  libstdc++-v3/testsuite/20_util/memory/auto_ptr/3946.cc
! 8674a4776652e59701952606d815cc54  libstdc++-v3/testsuite/20_util/memory/auto_ptr/4.cc
! df0551926507bee61f2abd97a4cd8bc6  libstdc++-v3/testsuite/20_util/memory/auto_ptr/5.cc
! 3c7503d81863c805970cba7f619ed28e  libstdc++-v3/testsuite/20_util/memory/auto_ptr/6.cc
! 190b3db8a89eda70566a7b6fac38b067  libstdc++-v3/testsuite/20_util/memory/auto_ptr/7.cc
! 4ea0dd1285c27298284df27b71f11c96  libstdc++-v3/testsuite/20_util/memory/auto_ptr/assign_neg.cc
! b692dc910c64d9b08b9d67146e49b1f6  libstdc++-v3/testsuite/20_util/memory/raw_storage_iterator.cc
! 8552c81696b48aced432b3819e73bd77  libstdc++-v3/testsuite/20_util/memory/temporary_buffer.cc
! c3fec86cefa8d96267c9b7d6ffc966db  libstdc++-v3/testsuite/20_util/utility/pair/1.cc
! 25d656290213059348e2faed47f15437  libstdc++-v3/testsuite/20_util/utility/pair/2.cc
! edc26c81af436a8411b7a438a113ed32  libstdc++-v3/testsuite/20_util/utility/pair/3.cc
! 1de8334f9b809b7a2d8d40151d5d7183  libstdc++-v3/testsuite/20_util/utility/pair/4.cc
! 4b56036117d84767f9c14169db142e57  libstdc++-v3/testsuite/20_util/utility/rel_ops.cc
! 19ed05c4205ecc6084f932dfe89c4900  libstdc++-v3/testsuite/21_strings/basic_string/append/char/1.cc
! 8834daeee2ab853cfe5ab4c88ae9182f  libstdc++-v3/testsuite/21_strings/basic_string/append/char/2.cc
! e5f1d9e251860efd724539e9657dd94c  libstdc++-v3/testsuite/21_strings/basic_string/append/char/3.cc
! de193a49b4843b4f25f90eb88f2e0d81  libstdc++-v3/testsuite/21_strings/basic_string/append/wchar_t/1.cc
! e70290088017f439091aa9ac0bdae6ef  libstdc++-v3/testsuite/21_strings/basic_string/append/wchar_t/2.cc
! 9ec6c28182361ee66c8de2efc53f603f  libstdc++-v3/testsuite/21_strings/basic_string/append/wchar_t/3.cc
  6e442ab67bcfb227bdb0aec524cb76c5  libstdc++-v3/testsuite/21_strings/basic_string/assign/char/1.cc
  b348fb241fd20ebb5c86d8fa780e566f  libstdc++-v3/testsuite/21_strings/basic_string/assign/char/2.cc
! 30cb76d88f01dff00743a32710753f01  libstdc++-v3/testsuite/21_strings/basic_string/assign/char/3.cc
  46af26050e5685f914a468d7fb49b6d0  libstdc++-v3/testsuite/21_strings/basic_string/assign/wchar_t/1.cc
  813d4e85127047c5a509d49c32245d6c  libstdc++-v3/testsuite/21_strings/basic_string/assign/wchar_t/2.cc
! 7127333c4ffd8d74d5dd922f84c75aa3  libstdc++-v3/testsuite/21_strings/basic_string/assign/wchar_t/3.cc
  8af819f284c6526a48b33ca255fbf679  libstdc++-v3/testsuite/21_strings/basic_string/capacity/1.cc
  6ed157164a4aa59a693b56ec289586a3  libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/1.cc
+ 83d9835500a8498e6cad76dc8ca570f7  libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/18654.cc
  dddde6feee9837eb6ebe3506157ff3d2  libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/2.cc
  38865fe680921704bff944f44e9c3faf  libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/1.cc
+ 85455c902b2b1745a08d66cbd9a04714  libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/18654.cc
  8b1eb593929a337a00100bfa684b8e68  libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/2.cc
  232da99139362d63d432e931d0269faa  libstdc++-v3/testsuite/21_strings/basic_string/compare/char/1.cc
  7b2e418c306b3096e00299fa50abf111  libstdc++-v3/testsuite/21_strings/basic_string/compare/char/13650.cc
*************** aa87090c27e5eb7a9047371cc2bdb009  libstd
*** 20370,20385 ****
  20ac03aaad884ee1678703f82d4bf3a2  libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/2.cc
  a19e29c58326d1b801603096994cc52a  libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/3.cc
  36951b6a825fc94fe6019829db03194f  libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/4.cc
  56b39968573f62a1071aae54bce9bb49  libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/1.cc
  7954fe32c214f1e95efa73b1f4537ff4  libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/2.cc
  679f2ba1da50bc794b3109dc32ee2582  libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/3.cc
  23595a0550b38951794aed732c3ff817  libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/4.cc
  97cf26bb64a1d710df415ba1ba63dcb3  libstdc++-v3/testsuite/21_strings/basic_string/find/char/1.cc
  05bbb66b797f7043a2c070dcfbb660b5  libstdc++-v3/testsuite/21_strings/basic_string/find/char/2.cc
! 98106350950c4341023409696ee563fe  libstdc++-v3/testsuite/21_strings/basic_string/find/char/3.cc
  33e0afa4263083371b38aac51ba90e27  libstdc++-v3/testsuite/21_strings/basic_string/find/wchar_t/1.cc
  1b5ca175fe37bf1c5d0c583bf386b002  libstdc++-v3/testsuite/21_strings/basic_string/find/wchar_t/2.cc
! e56a6f8e386ecb43a478d11d88aa3942  libstdc++-v3/testsuite/21_strings/basic_string/find/wchar_t/3.cc
  c2a5cf5735f218343259624695383b59  libstdc++-v3/testsuite/21_strings/basic_string/insert/char/1.cc
  a16a33a97356d49bdfb67c22901ec8be  libstdc++-v3/testsuite/21_strings/basic_string/insert/char/2.cc
  8ed9e7eb9a0ad9f9e1f28da1bd474bc0  libstdc++-v3/testsuite/21_strings/basic_string/insert/wchar_t/1.cc
--- 24376,24393 ----
  20ac03aaad884ee1678703f82d4bf3a2  libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/2.cc
  a19e29c58326d1b801603096994cc52a  libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/3.cc
  36951b6a825fc94fe6019829db03194f  libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/4.cc
+ 1b4cf468253bf088ad0e618461f0df2a  libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/empty.cc
  56b39968573f62a1071aae54bce9bb49  libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/1.cc
  7954fe32c214f1e95efa73b1f4537ff4  libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/2.cc
  679f2ba1da50bc794b3109dc32ee2582  libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/3.cc
  23595a0550b38951794aed732c3ff817  libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/4.cc
+ f8b6f463d0417fc049fd63a61c2a16c4  libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/empty.cc
  97cf26bb64a1d710df415ba1ba63dcb3  libstdc++-v3/testsuite/21_strings/basic_string/find/char/1.cc
  05bbb66b797f7043a2c070dcfbb660b5  libstdc++-v3/testsuite/21_strings/basic_string/find/char/2.cc
! 064ea2d5a6e2554c30cf0053aed9b18d  libstdc++-v3/testsuite/21_strings/basic_string/find/char/3.cc
  33e0afa4263083371b38aac51ba90e27  libstdc++-v3/testsuite/21_strings/basic_string/find/wchar_t/1.cc
  1b5ca175fe37bf1c5d0c583bf386b002  libstdc++-v3/testsuite/21_strings/basic_string/find/wchar_t/2.cc
! a35ad285f106ee4629a4d8f438a273b5  libstdc++-v3/testsuite/21_strings/basic_string/find/wchar_t/3.cc
  c2a5cf5735f218343259624695383b59  libstdc++-v3/testsuite/21_strings/basic_string/insert/char/1.cc
  a16a33a97356d49bdfb67c22901ec8be  libstdc++-v3/testsuite/21_strings/basic_string/insert/char/2.cc
  8ed9e7eb9a0ad9f9e1f28da1bd474bc0  libstdc++-v3/testsuite/21_strings/basic_string/insert/wchar_t/1.cc
*************** eeaafb0967ef8cef3940ec70022195a1  libstd
*** 20404,20409 ****
--- 24412,24419 ----
  1b11be3291f8321053ca9d428f38b866  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/7.cc
  22dca91c4d5f384af69a9de6e1f5112c  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/8.cc
  f7beb4b22388c1823e7d01e5e987c2cf  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/9.cc
+ e64bdae4885f463fba16c55bab10b866  libstdc++-v3/testsuite/21_strings/basic_string/operations/char/1.cc
+ d92851a12ad4d6ae44d82e8749509820  libstdc++-v3/testsuite/21_strings/basic_string/operations/wchar_t/1.cc
  675ec429e8b568d4b21e003fa0224929  libstdc++-v3/testsuite/21_strings/basic_string/operators/char/1.cc
  e864de1e12aea60103f6639af712e27b  libstdc++-v3/testsuite/21_strings/basic_string/operators/char/2.cc
  83529d818dd48e3074171e41a3c4ba95  libstdc++-v3/testsuite/21_strings/basic_string/operators/wchar_t/1.cc
*************** ec69f83d04bb14739c106d03f117a0c6  libstd
*** 20525,20550 ****
  b41efffe3388b76925dd06b651f30d39  libstdc++-v3/testsuite/22_locale/collate/compare/char/wrapped_env.cc
  438c7e9c8dfee855ec0a30ce0114d743  libstdc++-v3/testsuite/22_locale/collate/compare/char/wrapped_locale.cc
  81784ed18afab0cc44dea1ce810cdfe1  libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/1.cc
! 77335c4f37f96a67cede53596174bbfe  libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/2.cc
  b6cfccc0484cbfdc517b72e805b7353d  libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/3.cc
! db4dde7402205af384fbd2926c6fc267  libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/wrapped_env.cc
! 9fc80f8831f725d1374cc616de519ace  libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/wrapped_locale.cc
  e42ba44395d56d4432a886d492343bd0  libstdc++-v3/testsuite/22_locale/collate/hash/char/1.cc
  3752e00c1de1de902a4617b79e5160f0  libstdc++-v3/testsuite/22_locale/collate/hash/char/2.cc
  b41efffe3388b76925dd06b651f30d39  libstdc++-v3/testsuite/22_locale/collate/hash/char/wrapped_env.cc
  438c7e9c8dfee855ec0a30ce0114d743  libstdc++-v3/testsuite/22_locale/collate/hash/char/wrapped_locale.cc
  5f1b27c734313d88da1f0dccc26cd44c  libstdc++-v3/testsuite/22_locale/collate/hash/wchar_t/1.cc
! ea023d335a2371d145b0b169246d05c8  libstdc++-v3/testsuite/22_locale/collate/hash/wchar_t/2.cc
! db4dde7402205af384fbd2926c6fc267  libstdc++-v3/testsuite/22_locale/collate/hash/wchar_t/wrapped_env.cc
! 9fc80f8831f725d1374cc616de519ace  libstdc++-v3/testsuite/22_locale/collate/hash/wchar_t/wrapped_locale.cc
  676da9f0c322b13267c49886dd5190ff  libstdc++-v3/testsuite/22_locale/collate/transform/char/2.cc
  46bbd613959b43bb9472f13155230a91  libstdc++-v3/testsuite/22_locale/collate/transform/char/3.cc
  1bbfaf4ba6b5f2f2ad40c28165bbb5ba  libstdc++-v3/testsuite/22_locale/collate/transform/char/wrapped_env.cc
  0f4045b412f2e060f261a2c413f84c67  libstdc++-v3/testsuite/22_locale/collate/transform/char/wrapped_locale.cc
! 24c850fc49d3fbe38d81716d7582f23d  libstdc++-v3/testsuite/22_locale/collate/transform/wchar_t/2.cc
  31a08c705d36bcca7bb2da1734068409  libstdc++-v3/testsuite/22_locale/collate/transform/wchar_t/3.cc
! a99847287dc2f85012e3bdf92fe27ff8  libstdc++-v3/testsuite/22_locale/collate/transform/wchar_t/wrapped_env.cc
! 4643d5b312d0a1be38c05514aa477d0a  libstdc++-v3/testsuite/22_locale/collate/transform/wchar_t/wrapped_locale.cc
  c6454ff6b5474dffce41141c0419f20e  libstdc++-v3/testsuite/22_locale/collate_byname/1.cc
  af40143d285bbf93318e4c9d991a02db  libstdc++-v3/testsuite/22_locale/collate_byname/named_equivalence.cc
  77a878ae01e0b273b5459e0e6f346acc  libstdc++-v3/testsuite/22_locale/ctype/1.cc
--- 24535,24560 ----
  b41efffe3388b76925dd06b651f30d39  libstdc++-v3/testsuite/22_locale/collate/compare/char/wrapped_env.cc
  438c7e9c8dfee855ec0a30ce0114d743  libstdc++-v3/testsuite/22_locale/collate/compare/char/wrapped_locale.cc
  81784ed18afab0cc44dea1ce810cdfe1  libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/1.cc
! e066b458956ed2f92cc0cb2428ccef8d  libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/2.cc
  b6cfccc0484cbfdc517b72e805b7353d  libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/3.cc
! 471584cc79f127e96049443e79b067e2  libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/wrapped_env.cc
! f9435421086446f7b02f021c18962a06  libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/wrapped_locale.cc
  e42ba44395d56d4432a886d492343bd0  libstdc++-v3/testsuite/22_locale/collate/hash/char/1.cc
  3752e00c1de1de902a4617b79e5160f0  libstdc++-v3/testsuite/22_locale/collate/hash/char/2.cc
  b41efffe3388b76925dd06b651f30d39  libstdc++-v3/testsuite/22_locale/collate/hash/char/wrapped_env.cc
  438c7e9c8dfee855ec0a30ce0114d743  libstdc++-v3/testsuite/22_locale/collate/hash/char/wrapped_locale.cc
  5f1b27c734313d88da1f0dccc26cd44c  libstdc++-v3/testsuite/22_locale/collate/hash/wchar_t/1.cc
! 3d644df212bf4316dd06e7233d2a439d  libstdc++-v3/testsuite/22_locale/collate/hash/wchar_t/2.cc
! 471584cc79f127e96049443e79b067e2  libstdc++-v3/testsuite/22_locale/collate/hash/wchar_t/wrapped_env.cc
! f9435421086446f7b02f021c18962a06  libstdc++-v3/testsuite/22_locale/collate/hash/wchar_t/wrapped_locale.cc
  676da9f0c322b13267c49886dd5190ff  libstdc++-v3/testsuite/22_locale/collate/transform/char/2.cc
  46bbd613959b43bb9472f13155230a91  libstdc++-v3/testsuite/22_locale/collate/transform/char/3.cc
  1bbfaf4ba6b5f2f2ad40c28165bbb5ba  libstdc++-v3/testsuite/22_locale/collate/transform/char/wrapped_env.cc
  0f4045b412f2e060f261a2c413f84c67  libstdc++-v3/testsuite/22_locale/collate/transform/char/wrapped_locale.cc
! 739818fd717a2d3d0ee733f542af5a68  libstdc++-v3/testsuite/22_locale/collate/transform/wchar_t/2.cc
  31a08c705d36bcca7bb2da1734068409  libstdc++-v3/testsuite/22_locale/collate/transform/wchar_t/3.cc
! 86d3b8b16ec5eeb57cf9048c1c9a63a9  libstdc++-v3/testsuite/22_locale/collate/transform/wchar_t/wrapped_env.cc
! 966594ada45349b8b2060bb0192b1e4a  libstdc++-v3/testsuite/22_locale/collate/transform/wchar_t/wrapped_locale.cc
  c6454ff6b5474dffce41141c0419f20e  libstdc++-v3/testsuite/22_locale/collate_byname/1.cc
  af40143d285bbf93318e4c9d991a02db  libstdc++-v3/testsuite/22_locale/collate_byname/named_equivalence.cc
  77a878ae01e0b273b5459e0e6f346acc  libstdc++-v3/testsuite/22_locale/ctype/1.cc
*************** edc6038953fa92576820bb9985bd54ab  libstd
*** 20564,20569 ****
--- 24574,24580 ----
  b41efffe3388b76925dd06b651f30d39  libstdc++-v3/testsuite/22_locale/ctype/is/wchar_t/wrapped_env.cc
  438c7e9c8dfee855ec0a30ce0114d743  libstdc++-v3/testsuite/22_locale/ctype/is/wchar_t/wrapped_locale.cc
  f11a96600dec19d1c6d9baaa3e2f147f  libstdc++-v3/testsuite/22_locale/ctype/narrow/char/1.cc
+ 2d7b683e02efd9c28fbfe443649ab437  libstdc++-v3/testsuite/22_locale/ctype/narrow/char/19955.cc
  c44de49acfc179f9cd15c48871113f0f  libstdc++-v3/testsuite/22_locale/ctype/narrow/char/2.cc
  b41efffe3388b76925dd06b651f30d39  libstdc++-v3/testsuite/22_locale/ctype/narrow/char/wrapped_env.cc
  438c7e9c8dfee855ec0a30ce0114d743  libstdc++-v3/testsuite/22_locale/ctype/narrow/char/wrapped_locale.cc
*************** dddbb16d7ea6b45c1fd10b8d70acee26  libstd
*** 20602,20608 ****
  4b68b529d1591e16f8f7c673c0b45fca  libstdc++-v3/testsuite/22_locale/locale/cons/1.cc
  2e82146988fdd19b2afdc1b102f7230d  libstdc++-v3/testsuite/22_locale/locale/cons/12352.cc
  08c443e1a4443271f807ce1afff53c16  libstdc++-v3/testsuite/22_locale/locale/cons/12438.cc
! 6554f304baf62407310c381f0c6a6d8d  libstdc++-v3/testsuite/22_locale/locale/cons/12658_thread.cc
  e572f84f02913ab77b079684c4b7bf69  libstdc++-v3/testsuite/22_locale/locale/cons/2.cc
  99c026b9ac0c4b82612e6c91bf17c15b  libstdc++-v3/testsuite/22_locale/locale/cons/4.cc
  d8158e3613a6fc779d3264e76adf06a3  libstdc++-v3/testsuite/22_locale/locale/cons/5.cc
--- 24613,24620 ----
  4b68b529d1591e16f8f7c673c0b45fca  libstdc++-v3/testsuite/22_locale/locale/cons/1.cc
  2e82146988fdd19b2afdc1b102f7230d  libstdc++-v3/testsuite/22_locale/locale/cons/12352.cc
  08c443e1a4443271f807ce1afff53c16  libstdc++-v3/testsuite/22_locale/locale/cons/12438.cc
! 9deec0422daac2eec432de2a7659e835  libstdc++-v3/testsuite/22_locale/locale/cons/12658_thread-1.cc
! 2d98eea5a8c900a4967153085afb2a97  libstdc++-v3/testsuite/22_locale/locale/cons/12658_thread-2.cc
  e572f84f02913ab77b079684c4b7bf69  libstdc++-v3/testsuite/22_locale/locale/cons/2.cc
  99c026b9ac0c4b82612e6c91bf17c15b  libstdc++-v3/testsuite/22_locale/locale/cons/4.cc
  d8158e3613a6fc779d3264e76adf06a3  libstdc++-v3/testsuite/22_locale/locale/cons/5.cc
*************** b55968d7b94f788c482a6e7c174aa4bd  libstd
*** 20619,20627 ****
  e245444cad487bfd5d8c7ab59e9bb6fb  libstdc++-v3/testsuite/22_locale/locale/operations/2.cc
  27cd0da7c64242fe162127dc4b53dfd2  libstdc++-v3/testsuite/22_locale/messages/1.cc
  cfdfce26771dc4e87c1b31336c1a9252  libstdc++-v3/testsuite/22_locale/messages/2.cc
! a2817852b4dba032e47e0a742ca7393e  libstdc++-v3/testsuite/22_locale/messages/members/char/1.cc
! f802a40e2997b437538a18770d3eb93b  libstdc++-v3/testsuite/22_locale/messages/members/char/2.cc
! e942c9c978e9eaa78187e9e6c6bfb2d5  libstdc++-v3/testsuite/22_locale/messages/members/char/3.cc
  b517fe7851eb6af473446bf530783b7c  libstdc++-v3/testsuite/22_locale/messages/members/char/wrapped_env.cc
  855f70aa57ed9fd3c46e9e30cea38f34  libstdc++-v3/testsuite/22_locale/messages/members/char/wrapped_locale.cc
  bc857e60e180b7e79d25c8b74743a10d  libstdc++-v3/testsuite/22_locale/messages_byname/1.cc
--- 24631,24639 ----
  e245444cad487bfd5d8c7ab59e9bb6fb  libstdc++-v3/testsuite/22_locale/locale/operations/2.cc
  27cd0da7c64242fe162127dc4b53dfd2  libstdc++-v3/testsuite/22_locale/messages/1.cc
  cfdfce26771dc4e87c1b31336c1a9252  libstdc++-v3/testsuite/22_locale/messages/2.cc
! ca2e569661283993c18d9a89bcf4652d  libstdc++-v3/testsuite/22_locale/messages/members/char/1.cc
! 784aad83ddde6122915f6711f5ee12ea  libstdc++-v3/testsuite/22_locale/messages/members/char/2.cc
! 8296554686c85007053c32bb2a23b9c0  libstdc++-v3/testsuite/22_locale/messages/members/char/3.cc
  b517fe7851eb6af473446bf530783b7c  libstdc++-v3/testsuite/22_locale/messages/members/char/wrapped_env.cc
  855f70aa57ed9fd3c46e9e30cea38f34  libstdc++-v3/testsuite/22_locale/messages/members/char/wrapped_locale.cc
  bc857e60e180b7e79d25c8b74743a10d  libstdc++-v3/testsuite/22_locale/messages_byname/1.cc
*************** dfe43e6fdb5637e4299265c6c879e23a  libstd
*** 20684,20696 ****
  ab3ed658fad6bd4d6c3c3105e6817648  libstdc++-v3/testsuite/22_locale/money_put/put/char/9780-3.cc
  a3de72ea9c716ae3cf86e70ebfe5a1c5  libstdc++-v3/testsuite/22_locale/money_put/put/char/wrapped_env.cc
  d2c56b1d8a20510d01b2b2bbb6460090  libstdc++-v3/testsuite/22_locale/money_put/put/char/wrapped_locale.cc
! 53e78fc1209eba02bdfa2506ddbd28f2  libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/1.cc
! 4172510de40da50d11e615229510d1d7  libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/12971.cc
! d2044d689822692f8df03534ec5ae02e  libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/2.cc
! a1bf98e23b4d4f70c2292afa82901916  libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/3.cc
! a333f482d8bf4150a1a0a44d3215aa4d  libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/4.cc
! c21df2b711bc8594f1f219bab99b68bc  libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/5.cc
! 6a2b73dba8fd95a79b4463f9ba1ab4d0  libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/6.cc
  a3de72ea9c716ae3cf86e70ebfe5a1c5  libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/wrapped_env.cc
  d2c56b1d8a20510d01b2b2bbb6460090  libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/wrapped_locale.cc
  83745bf28c93a74e8498efbf6a7cb2df  libstdc++-v3/testsuite/22_locale/moneypunct/1.cc
--- 24696,24708 ----
  ab3ed658fad6bd4d6c3c3105e6817648  libstdc++-v3/testsuite/22_locale/money_put/put/char/9780-3.cc
  a3de72ea9c716ae3cf86e70ebfe5a1c5  libstdc++-v3/testsuite/22_locale/money_put/put/char/wrapped_env.cc
  d2c56b1d8a20510d01b2b2bbb6460090  libstdc++-v3/testsuite/22_locale/money_put/put/char/wrapped_locale.cc
! f5def40adc3a1cfeed15129ec5db1956  libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/1.cc
! f88a4901f0e9088a2b5d7d905fe005b4  libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/12971.cc
! 9d1b1200bcf2b600305d0f68ba5e600f  libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/2.cc
! bc0afa939064067cdd942c4f7f6a9f04  libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/3.cc
! de264aa131baace7c6a7b7f42475a15c  libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/4.cc
! 5f6c505ceb5acb0fc627131a6e11e463  libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/5.cc
! 3f75ad313bb4961fcf24e563935083e4  libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/6.cc
  a3de72ea9c716ae3cf86e70ebfe5a1c5  libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/wrapped_env.cc
  d2c56b1d8a20510d01b2b2bbb6460090  libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/wrapped_locale.cc
  83745bf28c93a74e8498efbf6a7cb2df  libstdc++-v3/testsuite/22_locale/moneypunct/1.cc
*************** b41efffe3388b76925dd06b651f30d39  libstd
*** 20708,20722 ****
  479d25a4a9f489bd3ab6f2a3b5ec7ee2  libstdc++-v3/testsuite/22_locale/moneypunct_byname/named_equivalence.cc
  aefb3854e2b21c27c88bc6972c351cbb  libstdc++-v3/testsuite/22_locale/num_get/1.cc
  cc12ddd0e796a28cc2b5a13127fb3fcb  libstdc++-v3/testsuite/22_locale/num_get/2.cc
! a2e15923b33f993a00cd5af1838d7e42  libstdc++-v3/testsuite/22_locale/num_get/get/char/1.cc
  abade76f6f58472d35f31be068ce3e2d  libstdc++-v3/testsuite/22_locale/num_get/get/char/10.cc
! 75682e73ea1e133254629108e42d418f  libstdc++-v3/testsuite/22_locale/num_get/get/char/11.cc
! 24a025383b77c0321a92dbca8145b40c  libstdc++-v3/testsuite/22_locale/num_get/get/char/12.cc
! a56dace1bb115a9a1c68d3066844bcc9  libstdc++-v3/testsuite/22_locale/num_get/get/char/13.cc
! a27e8afda964d0e0649d9c584508af07  libstdc++-v3/testsuite/22_locale/num_get/get/char/14.cc
! 121707d0cdf13cdf58c0d38d00155155  libstdc++-v3/testsuite/22_locale/num_get/get/char/15.cc
! 7ad15a939dc2e87f5c9ca34c1732e3e1  libstdc++-v3/testsuite/22_locale/num_get/get/char/2.cc
! e9bff6c28f8cc272cc53d07026cfba4a  libstdc++-v3/testsuite/22_locale/num_get/get/char/3.cc
  2e42bd99cbb6ab8cb7badd8620c2dcda  libstdc++-v3/testsuite/22_locale/num_get/get/char/4.cc
  2c2824f0a32db7f9346fed56d720b8ec  libstdc++-v3/testsuite/22_locale/num_get/get/char/5.cc
  232cecdfefb5d3e7431b734b26840841  libstdc++-v3/testsuite/22_locale/num_get/get/char/6.cc
--- 24720,24734 ----
  479d25a4a9f489bd3ab6f2a3b5ec7ee2  libstdc++-v3/testsuite/22_locale/moneypunct_byname/named_equivalence.cc
  aefb3854e2b21c27c88bc6972c351cbb  libstdc++-v3/testsuite/22_locale/num_get/1.cc
  cc12ddd0e796a28cc2b5a13127fb3fcb  libstdc++-v3/testsuite/22_locale/num_get/2.cc
! 67425bdf981b811b03643673619201f6  libstdc++-v3/testsuite/22_locale/num_get/get/char/1.cc
  abade76f6f58472d35f31be068ce3e2d  libstdc++-v3/testsuite/22_locale/num_get/get/char/10.cc
! 76a12559b984fceb8b42fb9bbd76f693  libstdc++-v3/testsuite/22_locale/num_get/get/char/11.cc
! 8e106639cff2ed619a4c8d9478776ff9  libstdc++-v3/testsuite/22_locale/num_get/get/char/12.cc
! dc710bb13291948c8e27a6852fdf6579  libstdc++-v3/testsuite/22_locale/num_get/get/char/13.cc
! 5118ad077413c43bd8011162c23b1a69  libstdc++-v3/testsuite/22_locale/num_get/get/char/14.cc
! b63c4974208d504a08d418817cf02f7a  libstdc++-v3/testsuite/22_locale/num_get/get/char/15.cc
! cc72daa9fa80c177123d67d884bf0f63  libstdc++-v3/testsuite/22_locale/num_get/get/char/2.cc
! 52e3f9594c68b70cdf285e0c840d4669  libstdc++-v3/testsuite/22_locale/num_get/get/char/3.cc
  2e42bd99cbb6ab8cb7badd8620c2dcda  libstdc++-v3/testsuite/22_locale/num_get/get/char/4.cc
  2c2824f0a32db7f9346fed56d720b8ec  libstdc++-v3/testsuite/22_locale/num_get/get/char/5.cc
  232cecdfefb5d3e7431b734b26840841  libstdc++-v3/testsuite/22_locale/num_get/get/char/6.cc
*************** d03bdd43af7c20f5163802b1308f845a  libstd
*** 20725,20739 ****
  9a2b54a0d54200d4b9eebe716586352c  libstdc++-v3/testsuite/22_locale/num_get/get/char/9.cc
  a3de72ea9c716ae3cf86e70ebfe5a1c5  libstdc++-v3/testsuite/22_locale/num_get/get/char/wrapped_env.cc
  d2c56b1d8a20510d01b2b2bbb6460090  libstdc++-v3/testsuite/22_locale/num_get/get/char/wrapped_locale.cc
! 2da1055b607b33981cbd6beb0bafbe71  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/1.cc
  d06bee3953bde866484abb972b8aae17  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/10.cc
! 550bc43e25e73ba6afb14b520aaa1d38  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/11.cc
! 093b0a8add1efb45aec449de26f2e69a  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/12.cc
! ba5f0e3f07ab4d634adb3ccd2dd1d1e6  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/13.cc
! 86ee0ff3bae704e2dd5e96e464f201a3  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/14.cc
! 7debd7249c1ebac1c3196053e415ede9  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/15.cc
! 46ba9d97d97583d4079e8ec6a83fd80b  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/2.cc
! 85d8d07e2867570dc52e290d8c9848fe  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/3.cc
  91d3392d0f270f153b20865fad61e589  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/4.cc
  47ec914ae63dde4c5f95026cf1f6b200  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/5.cc
  cc9c155b4e1d3b2e3d10267604125f5f  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/6.cc
--- 24737,24751 ----
  9a2b54a0d54200d4b9eebe716586352c  libstdc++-v3/testsuite/22_locale/num_get/get/char/9.cc
  a3de72ea9c716ae3cf86e70ebfe5a1c5  libstdc++-v3/testsuite/22_locale/num_get/get/char/wrapped_env.cc
  d2c56b1d8a20510d01b2b2bbb6460090  libstdc++-v3/testsuite/22_locale/num_get/get/char/wrapped_locale.cc
! 56c385ccafcf4cbf1e493fd537bbc3b7  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/1.cc
  d06bee3953bde866484abb972b8aae17  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/10.cc
! 409befa144f82fd5bf79221419ff5219  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/11.cc
! 70878e34a84f0f9a9156a38be6240ad6  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/12.cc
! 6eddab57b499e5d079a41af670365c3b  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/13.cc
! 922e47152552460dce8a89b143e6c81d  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/14.cc
! 78d9a4a0a3265158947b0e85f19548ef  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/15.cc
! 583980d2b430e910209b83d871697f4b  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/2.cc
! 34e7709ad5ede9907db9be67e58bb973  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/3.cc
  91d3392d0f270f153b20865fad61e589  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/4.cc
  47ec914ae63dde4c5f95026cf1f6b200  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/5.cc
  cc9c155b4e1d3b2e3d10267604125f5f  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/6.cc
*************** a3de72ea9c716ae3cf86e70ebfe5a1c5  libstd
*** 20744,20754 ****
  d2c56b1d8a20510d01b2b2bbb6460090  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/wrapped_locale.cc
  17502899994a21e37ee7a01ca24171dc  libstdc++-v3/testsuite/22_locale/num_put/1.cc
  797e9b7de1f6824fd68f277c4564d507  libstdc++-v3/testsuite/22_locale/num_put/2.cc
! 9f19a1d9a209e0204283ef432a4d3497  libstdc++-v3/testsuite/22_locale/num_put/put/char/1.cc
  278712fc61918fcca80538584326b2b6  libstdc++-v3/testsuite/22_locale/num_put/put/char/14220.cc
  5c428a14b12816fb889d17aaa9182fed  libstdc++-v3/testsuite/22_locale/num_put/put/char/15565.cc
! 46c7c2d0048f7ee02f66c29015d706fe  libstdc++-v3/testsuite/22_locale/num_put/put/char/2.cc
! e03a576e9d350ca65d2d944e1cc98174  libstdc++-v3/testsuite/22_locale/num_put/put/char/3.cc
  dd7eab6dda48b257bfb44b351a5e2f9a  libstdc++-v3/testsuite/22_locale/num_put/put/char/4.cc
  658f9ce809c86430159639354ffdef9e  libstdc++-v3/testsuite/22_locale/num_put/put/char/5.cc
  0c6b9e6d092cc3e96a6976266f072bfa  libstdc++-v3/testsuite/22_locale/num_put/put/char/6.cc
--- 24756,24767 ----
  d2c56b1d8a20510d01b2b2bbb6460090  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/wrapped_locale.cc
  17502899994a21e37ee7a01ca24171dc  libstdc++-v3/testsuite/22_locale/num_put/1.cc
  797e9b7de1f6824fd68f277c4564d507  libstdc++-v3/testsuite/22_locale/num_put/2.cc
! 7808e0a2b7ea6652e3145f1d9d28fd8d  libstdc++-v3/testsuite/22_locale/num_put/put/char/1.cc
  278712fc61918fcca80538584326b2b6  libstdc++-v3/testsuite/22_locale/num_put/put/char/14220.cc
  5c428a14b12816fb889d17aaa9182fed  libstdc++-v3/testsuite/22_locale/num_put/put/char/15565.cc
! c59fcffc8b57bd716ec69bc5a226031f  libstdc++-v3/testsuite/22_locale/num_put/put/char/2.cc
! 79ea9391f27f7a5538edb20652e6504c  libstdc++-v3/testsuite/22_locale/num_put/put/char/20909.cc
! 0de8355eedb8db59bae1a4bcae093731  libstdc++-v3/testsuite/22_locale/num_put/put/char/3.cc
  dd7eab6dda48b257bfb44b351a5e2f9a  libstdc++-v3/testsuite/22_locale/num_put/put/char/4.cc
  658f9ce809c86430159639354ffdef9e  libstdc++-v3/testsuite/22_locale/num_put/put/char/5.cc
  0c6b9e6d092cc3e96a6976266f072bfa  libstdc++-v3/testsuite/22_locale/num_put/put/char/6.cc
*************** dd7eab6dda48b257bfb44b351a5e2f9a  libstd
*** 20758,20779 ****
  e459656e2650c3b260946de4e8d84466  libstdc++-v3/testsuite/22_locale/num_put/put/char/9780-2.cc
  09e13a951d2922183cdf26a7d6ef1ec3  libstdc++-v3/testsuite/22_locale/num_put/put/char/wrapped_env.cc
  62cf6465be529086d30229ce1ccab9df  libstdc++-v3/testsuite/22_locale/num_put/put/char/wrapped_locale.cc
! 7f5e6314733c78c2747110db58d97294  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/1.cc
  38e48bcf35504768e8157549185f1282  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/14220.cc
  3feb470b58df8fe01fc0823801a370f9  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/15565.cc
! 98c50916724ede97675be54db81b74f8  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/2.cc
! 7ddeeb071c2cb4196c91de06e7c15409  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/3.cc
  0fd8acd438ce3afe546ba1448224e598  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/4.cc
! b6c3dd9760292a7700dc59ecc0b29f8f  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/5.cc
! ae9f6f46d53094c92da64b3f0a66baa8  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/6.cc
  ca9bc75faf1762ebe4d6e3a519b5856d  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/7.cc
! caba5c9e494943db767ee6fa9de3a668  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/8.cc
  cf01cbd4796c7e71ba241a180458c2a9  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/9.cc
  09e13a951d2922183cdf26a7d6ef1ec3  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/wrapped_env.cc
  62cf6465be529086d30229ce1ccab9df  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/wrapped_locale.cc
  d5c6181490fdd2c86e651ad3e16f63ef  libstdc++-v3/testsuite/22_locale/numpunct/1.cc
  21fac0ca4c7189e6ef253b76d2d71728  libstdc++-v3/testsuite/22_locale/numpunct/2.cc
! aaa408f291c882bf7dbbcddd7e6eb6b5  libstdc++-v3/testsuite/22_locale/numpunct/members/char/1.cc
  783f34b6173074972c5ec6722670a535  libstdc++-v3/testsuite/22_locale/numpunct/members/char/2.cc
  a9024b16bd7df67d4ab6d2288c3fbcdb  libstdc++-v3/testsuite/22_locale/numpunct/members/char/3.cc
  77af6c21b4caf70a68bb7d25e91e35a6  libstdc++-v3/testsuite/22_locale/numpunct/members/char/cache_1.cc
--- 24771,24793 ----
  e459656e2650c3b260946de4e8d84466  libstdc++-v3/testsuite/22_locale/num_put/put/char/9780-2.cc
  09e13a951d2922183cdf26a7d6ef1ec3  libstdc++-v3/testsuite/22_locale/num_put/put/char/wrapped_env.cc
  62cf6465be529086d30229ce1ccab9df  libstdc++-v3/testsuite/22_locale/num_put/put/char/wrapped_locale.cc
! 85ebdcc9774bc6a590f2fa70f3a68acc  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/1.cc
  38e48bcf35504768e8157549185f1282  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/14220.cc
  3feb470b58df8fe01fc0823801a370f9  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/15565.cc
! 14311897dd63e6ce8d8344d2ceeb52ee  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/2.cc
! 5ba9b5752c47e6d6b2e290efe1998d39  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/20909.cc
! 386cd61c84f9d9113ed4e994bf633aa1  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/3.cc
  0fd8acd438ce3afe546ba1448224e598  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/4.cc
! 41f2ffef59c71eeb2167131b4e6f0108  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/5.cc
! c7e2c0ea1d27b9bb5a98f995f240ed10  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/6.cc
  ca9bc75faf1762ebe4d6e3a519b5856d  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/7.cc
! 7a43a2a229a289a4c06bf9c3e06f0eed  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/8.cc
  cf01cbd4796c7e71ba241a180458c2a9  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/9.cc
  09e13a951d2922183cdf26a7d6ef1ec3  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/wrapped_env.cc
  62cf6465be529086d30229ce1ccab9df  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/wrapped_locale.cc
  d5c6181490fdd2c86e651ad3e16f63ef  libstdc++-v3/testsuite/22_locale/numpunct/1.cc
  21fac0ca4c7189e6ef253b76d2d71728  libstdc++-v3/testsuite/22_locale/numpunct/2.cc
! 91d89f71266e53fe756ad6b0a1550aa2  libstdc++-v3/testsuite/22_locale/numpunct/members/char/1.cc
  783f34b6173074972c5ec6722670a535  libstdc++-v3/testsuite/22_locale/numpunct/members/char/2.cc
  a9024b16bd7df67d4ab6d2288c3fbcdb  libstdc++-v3/testsuite/22_locale/numpunct/members/char/3.cc
  77af6c21b4caf70a68bb7d25e91e35a6  libstdc++-v3/testsuite/22_locale/numpunct/members/char/cache_1.cc
*************** b41efffe3388b76925dd06b651f30d39  libstd
*** 20782,20788 ****
  438c7e9c8dfee855ec0a30ce0114d743  libstdc++-v3/testsuite/22_locale/numpunct/members/char/wrapped_locale.cc
  a89abe8503a36c4a97eb298c7a7c4c99  libstdc++-v3/testsuite/22_locale/numpunct/members/pod/1.cc
  1b45ce494a9a814f85521fe1c539e5e3  libstdc++-v3/testsuite/22_locale/numpunct/members/pod/2.cc
! de9decfe01f057f2b6fd9cdf8fa805f7  libstdc++-v3/testsuite/22_locale/numpunct/members/wchar_t/1.cc
  7783e21edecb6a5b4abe4265ea839093  libstdc++-v3/testsuite/22_locale/numpunct/members/wchar_t/2.cc
  56a1b7d8daed44d6d02560f05d8463c3  libstdc++-v3/testsuite/22_locale/numpunct/members/wchar_t/cache_1.cc
  05fd98c7540604ed3d3d956f24222dfe  libstdc++-v3/testsuite/22_locale/numpunct/members/wchar_t/cache_2.cc
--- 24796,24802 ----
  438c7e9c8dfee855ec0a30ce0114d743  libstdc++-v3/testsuite/22_locale/numpunct/members/char/wrapped_locale.cc
  a89abe8503a36c4a97eb298c7a7c4c99  libstdc++-v3/testsuite/22_locale/numpunct/members/pod/1.cc
  1b45ce494a9a814f85521fe1c539e5e3  libstdc++-v3/testsuite/22_locale/numpunct/members/pod/2.cc
! 7ec8ba7aa35a25d950432101b19e86dd  libstdc++-v3/testsuite/22_locale/numpunct/members/wchar_t/1.cc
  7783e21edecb6a5b4abe4265ea839093  libstdc++-v3/testsuite/22_locale/numpunct/members/wchar_t/2.cc
  56a1b7d8daed44d6d02560f05d8463c3  libstdc++-v3/testsuite/22_locale/numpunct/members/wchar_t/cache_1.cc
  05fd98c7540604ed3d3d956f24222dfe  libstdc++-v3/testsuite/22_locale/numpunct/members/wchar_t/cache_2.cc
*************** b41efffe3388b76925dd06b651f30d39  libstd
*** 20792,20891 ****
  63d8cf4f29d7c67638ed506d1793c1e8  libstdc++-v3/testsuite/22_locale/numpunct_byname/named_equivalence.cc
  677652c44b166a424d02a54065617c0d  libstdc++-v3/testsuite/22_locale/time_get/1.cc
  502321b91016f21956c041fac6d62b26  libstdc++-v3/testsuite/22_locale/time_get/2.cc
! 20294d1c2e692c70507b23703193cc92  libstdc++-v3/testsuite/22_locale/time_get/date_order/char/1.cc
  ce062167254ced8d934a5f2ede99e805  libstdc++-v3/testsuite/22_locale/time_get/date_order/char/wrapped_env.cc
  12e321a4c98bfd63ff02afab4ff1e7a4  libstdc++-v3/testsuite/22_locale/time_get/date_order/char/wrapped_locale.cc
! b34e58815048de26afce1995c425276b  libstdc++-v3/testsuite/22_locale/time_get/date_order/wchar_t/1.cc
  ce062167254ced8d934a5f2ede99e805  libstdc++-v3/testsuite/22_locale/time_get/date_order/wchar_t/wrapped_env.cc
  12e321a4c98bfd63ff02afab4ff1e7a4  libstdc++-v3/testsuite/22_locale/time_get/date_order/wchar_t/wrapped_locale.cc
! 738892356178d8b5e04c60602a1f558a  libstdc++-v3/testsuite/22_locale/time_get/get_date/char/1.cc
  288ce38730f176f9cf689c2cb9640dc3  libstdc++-v3/testsuite/22_locale/time_get/get_date/char/12750.cc
! 294b8eddae190333ff413372a2229054  libstdc++-v3/testsuite/22_locale/time_get/get_date/char/12791.cc
! d726ac9bfc196c27959e306446a0098a  libstdc++-v3/testsuite/22_locale/time_get/get_date/char/2.cc
  6076625674c29413b3b2d2ad374689b5  libstdc++-v3/testsuite/22_locale/time_get/get_date/char/3.cc
  b517fe7851eb6af473446bf530783b7c  libstdc++-v3/testsuite/22_locale/time_get/get_date/char/wrapped_env.cc
  855f70aa57ed9fd3c46e9e30cea38f34  libstdc++-v3/testsuite/22_locale/time_get/get_date/char/wrapped_locale.cc
! 2ac514828bf0ad3323873e62bdebce41  libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/1.cc
  ba6f14746900258fb90634ea9d84cb43  libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/12750.cc
! 8b42f62c2b0497d2f310a8bbf799f5d9  libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/12791.cc
! cb21ab03e5b497721c035ffcc377141f  libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/2.cc
  95e6977d5009373db59e66bc97f5abf6  libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/3.cc
  95cc1149336d67a4bd0be4aeb0c0f1e8  libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/4.cc
  b517fe7851eb6af473446bf530783b7c  libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/wrapped_env.cc
  855f70aa57ed9fd3c46e9e30cea38f34  libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/wrapped_locale.cc
! 0248e00d2b1d07a862ecc53c50872024  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/1.cc
! b2bfcddaebfd6ebbd40d701e07265c9d  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/2.cc
  4d5f0f6b6dd070e89105e060ea329c62  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/3.cc
! cdeaa7bb744c4f2c3c3e91da4f7b9de3  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/4.cc
  b517fe7851eb6af473446bf530783b7c  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/wrapped_env.cc
  855f70aa57ed9fd3c46e9e30cea38f34  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/wrapped_locale.cc
! f2faf293e6e25bfcfdfd76d0ae69dd24  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/1.cc
! f184f5579f3ec34797cf3f02b4751395  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/2.cc
  e8fab954e08c8f270e5c5e60eeaa393d  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/3.cc
! 84fa43cb327551bfc8c09b66a14c28f4  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/4.cc
  b517fe7851eb6af473446bf530783b7c  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/wrapped_env.cc
  855f70aa57ed9fd3c46e9e30cea38f34  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/wrapped_locale.cc
! d4ca035cb10b125401f541f1a5df3741  libstdc++-v3/testsuite/22_locale/time_get/get_time/char/1.cc
! 93b1ab5382c265ad4b4803870c5c603d  libstdc++-v3/testsuite/22_locale/time_get/get_time/char/2.cc
  450362c6bec04409cf509f3dcdbdbcab  libstdc++-v3/testsuite/22_locale/time_get/get_time/char/3.cc
  ab647d5ad6e94b1d0b090ddfb4b5cb90  libstdc++-v3/testsuite/22_locale/time_get/get_time/char/4.cc
  b517fe7851eb6af473446bf530783b7c  libstdc++-v3/testsuite/22_locale/time_get/get_time/char/wrapped_env.cc
  855f70aa57ed9fd3c46e9e30cea38f34  libstdc++-v3/testsuite/22_locale/time_get/get_time/char/wrapped_locale.cc
! 41331006c6f0229520c86f1e953700c8  libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/1.cc
! 2159f502be2c33c48c067ddba459145b  libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/2.cc
  9cf0c92ee823e1f1eae8480367717378  libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/3.cc
  c7ad7bb809aa02a703fb8c1cacb62266  libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/4.cc
  b517fe7851eb6af473446bf530783b7c  libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/wrapped_env.cc
  855f70aa57ed9fd3c46e9e30cea38f34  libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/wrapped_locale.cc
! 0274348d844321637fd38beb9e1e3128  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/1.cc
! 2340476a9e92091cbf7decde4bb127f8  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/2.cc
  efc0e3c5a5d5552c38d0fa07f19ee5f0  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/3.cc
  b517fe7851eb6af473446bf530783b7c  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/wrapped_env.cc
  855f70aa57ed9fd3c46e9e30cea38f34  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/wrapped_locale.cc
! ef5b693d5549853e4c94115d9f7995fa  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/1.cc
! 15e2e1e22aa63d584a226de2035971b4  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/2.cc
  f22f0060c647039c6f4ba2e64f167e25  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/3.cc
  b517fe7851eb6af473446bf530783b7c  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/wrapped_env.cc
  855f70aa57ed9fd3c46e9e30cea38f34  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/wrapped_locale.cc
! fbe6f3d215182a5c461e19ea0fb52340  libstdc++-v3/testsuite/22_locale/time_get/get_year/char/1.cc
  d41f0c534ac8c0744b162e33c837c7e4  libstdc++-v3/testsuite/22_locale/time_get/get_year/char/3.cc
  100142d5965f181f0032630ef4a22cd3  libstdc++-v3/testsuite/22_locale/time_get/get_year/char/wrapped_env.cc
  4e1f90eca5ed0b749e14d44c1ea73a05  libstdc++-v3/testsuite/22_locale/time_get/get_year/char/wrapped_locale.cc
! fda77799ad066a24e8f61c911e99c427  libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/1.cc
  b3f76bb64919653ddcb03a7351d9b683  libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/3.cc
  100142d5965f181f0032630ef4a22cd3  libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/wrapped_env.cc
  4e1f90eca5ed0b749e14d44c1ea73a05  libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/wrapped_locale.cc
  0b54310b0811c5284ca034d568fcea71  libstdc++-v3/testsuite/22_locale/time_put/1.cc
  6b223e126b5abf41bd01764c9cfdff8d  libstdc++-v3/testsuite/22_locale/time_put/2.cc
! 7dce26e5ba6e5a2454331138783d1f59  libstdc++-v3/testsuite/22_locale/time_put/put/char/1.cc
  33ad0bd3c3827be3eeeb1871ce02f5d0  libstdc++-v3/testsuite/22_locale/time_put/put/char/10.cc
  8c1c93101f82e6d2bbbe8e02fc593ef7  libstdc++-v3/testsuite/22_locale/time_put/put/char/12439_1.cc
  670cb6ad1d149cf08b8523b22da51d65  libstdc++-v3/testsuite/22_locale/time_put/put/char/12439_3.cc
! f207119f261de7d9105e79c4c427dc24  libstdc++-v3/testsuite/22_locale/time_put/put/char/17038.cc
! 1d9dc4c91872d9e20c5f85acb025d0d8  libstdc++-v3/testsuite/22_locale/time_put/put/char/2.cc
! eefe0c277744d826d23ebcc371b5f056  libstdc++-v3/testsuite/22_locale/time_put/put/char/3.cc
! 1d9c4b3c4ebcf458a43ee91891ca6975  libstdc++-v3/testsuite/22_locale/time_put/put/char/4.cc
! cdc62d9839ff63db5341687a5a3fce9d  libstdc++-v3/testsuite/22_locale/time_put/put/char/5.cc
! 0fb0f694b472bfac39af689e97ffed41  libstdc++-v3/testsuite/22_locale/time_put/put/char/6.cc
! e3d5276c6aa51cc49207cf9ad9a0d193  libstdc++-v3/testsuite/22_locale/time_put/put/char/7.cc
! d350d1afab7c91a84c0bc6ca4aca2d63  libstdc++-v3/testsuite/22_locale/time_put/put/char/8.cc
  c6df848db116326a4eeb18f74d500a25  libstdc++-v3/testsuite/22_locale/time_put/put/char/9.cc
! 8d31dc87a62fb594dff6c8addc70fe13  libstdc++-v3/testsuite/22_locale/time_put/put/char/9780-1.cc
  ba0307160070a86e839e525775f30c4c  libstdc++-v3/testsuite/22_locale/time_put/put/char/wrapped_env.cc
  ca7520e1a63234cd0d2b998601ef54c0  libstdc++-v3/testsuite/22_locale/time_put/put/char/wrapped_locale.cc
! e8b9dbf6cda43bdaee228751bf23e0a9  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/1.cc
! 289bb82f77d56aa4dd29703e22c62a4d  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/10.cc
  fdad2a4cbf562f9fb7611ae3f738071b  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_1.cc
  312f22d8c97ada8c483a711a399ad4f0  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_2.cc
  da4549ea627e8e8011ff987e2b2b1fcf  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_3.cc
! b1e2628778660e351a7783990cb3fdf6  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/17038.cc
! 51e473ff135abbf251da6fa3dfcacda0  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/2.cc
! e2b9fac59c2072c6bd4f342bf7c1e297  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/3.cc
! 7c87b771753fc98c7e61e5f4a4f39c27  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/4.cc
! f2a02d3d657de39d4edf2b896dfe334b  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/5.cc
! bc9446b8fcd456b615cf1f01dd340c5e  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/6.cc
! af516900c361194be89bb28e714ef0fc  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/7.cc
! 50261bcebfef8d1931428ab6313beb2c  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/8.cc
  92475a87817e8ea5f47a4bcded1d6686  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/9.cc
  ba0307160070a86e839e525775f30c4c  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/wrapped_env.cc
  ca7520e1a63234cd0d2b998601ef54c0  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/wrapped_locale.cc
--- 24806,24905 ----
  63d8cf4f29d7c67638ed506d1793c1e8  libstdc++-v3/testsuite/22_locale/numpunct_byname/named_equivalence.cc
  677652c44b166a424d02a54065617c0d  libstdc++-v3/testsuite/22_locale/time_get/1.cc
  502321b91016f21956c041fac6d62b26  libstdc++-v3/testsuite/22_locale/time_get/2.cc
! 279ee4a2e3976bc50b00152fbfb42130  libstdc++-v3/testsuite/22_locale/time_get/date_order/char/1.cc
  ce062167254ced8d934a5f2ede99e805  libstdc++-v3/testsuite/22_locale/time_get/date_order/char/wrapped_env.cc
  12e321a4c98bfd63ff02afab4ff1e7a4  libstdc++-v3/testsuite/22_locale/time_get/date_order/char/wrapped_locale.cc
! 58a3acefb285b20192fad03ddf86f943  libstdc++-v3/testsuite/22_locale/time_get/date_order/wchar_t/1.cc
  ce062167254ced8d934a5f2ede99e805  libstdc++-v3/testsuite/22_locale/time_get/date_order/wchar_t/wrapped_env.cc
  12e321a4c98bfd63ff02afab4ff1e7a4  libstdc++-v3/testsuite/22_locale/time_get/date_order/wchar_t/wrapped_locale.cc
! 1795c6a1e6e65f2e5d727b1229cdc4e1  libstdc++-v3/testsuite/22_locale/time_get/get_date/char/1.cc
  288ce38730f176f9cf689c2cb9640dc3  libstdc++-v3/testsuite/22_locale/time_get/get_date/char/12750.cc
! e68a8c8ec01e1119ed49013d7da8312c  libstdc++-v3/testsuite/22_locale/time_get/get_date/char/12791.cc
! 05d386f489a774170dec1daa87db6d90  libstdc++-v3/testsuite/22_locale/time_get/get_date/char/2.cc
  6076625674c29413b3b2d2ad374689b5  libstdc++-v3/testsuite/22_locale/time_get/get_date/char/3.cc
  b517fe7851eb6af473446bf530783b7c  libstdc++-v3/testsuite/22_locale/time_get/get_date/char/wrapped_env.cc
  855f70aa57ed9fd3c46e9e30cea38f34  libstdc++-v3/testsuite/22_locale/time_get/get_date/char/wrapped_locale.cc
! 3e95939f98289cedde5885b07bd33419  libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/1.cc
  ba6f14746900258fb90634ea9d84cb43  libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/12750.cc
! eff36fa0416dce58e21ed3c56069982c  libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/12791.cc
! 0f12b501c1f36bc676cc4568201ae780  libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/2.cc
  95e6977d5009373db59e66bc97f5abf6  libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/3.cc
  95cc1149336d67a4bd0be4aeb0c0f1e8  libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/4.cc
  b517fe7851eb6af473446bf530783b7c  libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/wrapped_env.cc
  855f70aa57ed9fd3c46e9e30cea38f34  libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/wrapped_locale.cc
! c6ef338c472a9b029b258d98ac3aa40a  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/1.cc
! b6afed9e175c3da447cd5b01c2e4bc03  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/2.cc
  4d5f0f6b6dd070e89105e060ea329c62  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/3.cc
! 5ceabd052d18d87d767dad70f45b585f  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/4.cc
  b517fe7851eb6af473446bf530783b7c  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/wrapped_env.cc
  855f70aa57ed9fd3c46e9e30cea38f34  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/wrapped_locale.cc
! e5a35d98735e543107ec0a9369887df4  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/1.cc
! 97d63584b32d37b5d3c8ff9b2623fe48  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/2.cc
  e8fab954e08c8f270e5c5e60eeaa393d  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/3.cc
! 03d40adc61941f014562e163454684ba  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/4.cc
  b517fe7851eb6af473446bf530783b7c  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/wrapped_env.cc
  855f70aa57ed9fd3c46e9e30cea38f34  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/wrapped_locale.cc
! 218f8082d7c80b5a48151c591a9c77b2  libstdc++-v3/testsuite/22_locale/time_get/get_time/char/1.cc
! 50086e6d5149b7703b184071d306de85  libstdc++-v3/testsuite/22_locale/time_get/get_time/char/2.cc
  450362c6bec04409cf509f3dcdbdbcab  libstdc++-v3/testsuite/22_locale/time_get/get_time/char/3.cc
  ab647d5ad6e94b1d0b090ddfb4b5cb90  libstdc++-v3/testsuite/22_locale/time_get/get_time/char/4.cc
  b517fe7851eb6af473446bf530783b7c  libstdc++-v3/testsuite/22_locale/time_get/get_time/char/wrapped_env.cc
  855f70aa57ed9fd3c46e9e30cea38f34  libstdc++-v3/testsuite/22_locale/time_get/get_time/char/wrapped_locale.cc
! 836ead014c6f33e2f6fc0739d1c16921  libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/1.cc
! a36980f96b19adf190bbaa88e83539d3  libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/2.cc
  9cf0c92ee823e1f1eae8480367717378  libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/3.cc
  c7ad7bb809aa02a703fb8c1cacb62266  libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/4.cc
  b517fe7851eb6af473446bf530783b7c  libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/wrapped_env.cc
  855f70aa57ed9fd3c46e9e30cea38f34  libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/wrapped_locale.cc
! ab181e983edc42b8ca603e6e43f5a98f  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/1.cc
! fd285cf6c773aa6b2094fa271bc9bc11  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/2.cc
  efc0e3c5a5d5552c38d0fa07f19ee5f0  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/3.cc
  b517fe7851eb6af473446bf530783b7c  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/wrapped_env.cc
  855f70aa57ed9fd3c46e9e30cea38f34  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/wrapped_locale.cc
! 3e68b19c757fc58612a61e97ec8adfdf  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/1.cc
! c3fb73950a280af882ff2d05f407f276  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/2.cc
  f22f0060c647039c6f4ba2e64f167e25  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/3.cc
  b517fe7851eb6af473446bf530783b7c  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/wrapped_env.cc
  855f70aa57ed9fd3c46e9e30cea38f34  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/wrapped_locale.cc
! e83a436004d541a8a4add9fc8f368e75  libstdc++-v3/testsuite/22_locale/time_get/get_year/char/1.cc
  d41f0c534ac8c0744b162e33c837c7e4  libstdc++-v3/testsuite/22_locale/time_get/get_year/char/3.cc
  100142d5965f181f0032630ef4a22cd3  libstdc++-v3/testsuite/22_locale/time_get/get_year/char/wrapped_env.cc
  4e1f90eca5ed0b749e14d44c1ea73a05  libstdc++-v3/testsuite/22_locale/time_get/get_year/char/wrapped_locale.cc
! 413403c0c9960de421e837c50efdff3b  libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/1.cc
  b3f76bb64919653ddcb03a7351d9b683  libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/3.cc
  100142d5965f181f0032630ef4a22cd3  libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/wrapped_env.cc
  4e1f90eca5ed0b749e14d44c1ea73a05  libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/wrapped_locale.cc
  0b54310b0811c5284ca034d568fcea71  libstdc++-v3/testsuite/22_locale/time_put/1.cc
  6b223e126b5abf41bd01764c9cfdff8d  libstdc++-v3/testsuite/22_locale/time_put/2.cc
! 52485af66505fa8206a2e8df58b9b010  libstdc++-v3/testsuite/22_locale/time_put/put/char/1.cc
  33ad0bd3c3827be3eeeb1871ce02f5d0  libstdc++-v3/testsuite/22_locale/time_put/put/char/10.cc
  8c1c93101f82e6d2bbbe8e02fc593ef7  libstdc++-v3/testsuite/22_locale/time_put/put/char/12439_1.cc
  670cb6ad1d149cf08b8523b22da51d65  libstdc++-v3/testsuite/22_locale/time_put/put/char/12439_3.cc
! 9890426a81613df5d6cb9d6caab0dde0  libstdc++-v3/testsuite/22_locale/time_put/put/char/17038.cc
! e2e8e847129557b9216f1f41ecce9052  libstdc++-v3/testsuite/22_locale/time_put/put/char/2.cc
! 8939f2f030434b5d0a9ce108bb69776b  libstdc++-v3/testsuite/22_locale/time_put/put/char/3.cc
! 79ff4f2da35b31b22b105cfca5bd7657  libstdc++-v3/testsuite/22_locale/time_put/put/char/4.cc
! a2f02af0979e70ab1bd626e058b48f45  libstdc++-v3/testsuite/22_locale/time_put/put/char/5.cc
! fe552458a955c38244dd931237380e26  libstdc++-v3/testsuite/22_locale/time_put/put/char/6.cc
! aecbc72c1fba80f70a6686717a9c27a1  libstdc++-v3/testsuite/22_locale/time_put/put/char/7.cc
! 7de8c702e8e71728abecaedd2f749168  libstdc++-v3/testsuite/22_locale/time_put/put/char/8.cc
  c6df848db116326a4eeb18f74d500a25  libstdc++-v3/testsuite/22_locale/time_put/put/char/9.cc
! 3eab747b12ca632ebb08ae556a90d53b  libstdc++-v3/testsuite/22_locale/time_put/put/char/9780-1.cc
  ba0307160070a86e839e525775f30c4c  libstdc++-v3/testsuite/22_locale/time_put/put/char/wrapped_env.cc
  ca7520e1a63234cd0d2b998601ef54c0  libstdc++-v3/testsuite/22_locale/time_put/put/char/wrapped_locale.cc
! bac155724c2fe57670b2d9ed3c834f3c  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/1.cc
! fca4ec334f8a93fb87e46b54f1d7ed78  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/10.cc
  fdad2a4cbf562f9fb7611ae3f738071b  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_1.cc
  312f22d8c97ada8c483a711a399ad4f0  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_2.cc
  da4549ea627e8e8011ff987e2b2b1fcf  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_3.cc
! 3c3f75449be0343aa8b29e86e13f5d60  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/17038.cc
! f6bf23ca25d907d8352abc54ad9a7033  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/2.cc
! 59c0f278e77ac302dbc9f828c44e04c3  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/3.cc
! a24131caabea08d6c9d4a9c06f1c7eed  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/4.cc
! 1d4c6e9b41b00a7fe9c7396522df4cac  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/5.cc
! f787d0ab26c1d86098b539ec39f6e9ce  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/6.cc
! 1ef6f4eaadbdfadc9d34d77cbdf484d5  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/7.cc
! 0f3d2406858ddf25854b40040a5e2b11  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/8.cc
  92475a87817e8ea5f47a4bcded1d6686  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/9.cc
  ba0307160070a86e839e525775f30c4c  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/wrapped_env.cc
  ca7520e1a63234cd0d2b998601ef54c0  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/wrapped_locale.cc
*************** f75f08fcb0c37ffb95522f4da7390982  libstd
*** 20900,20911 ****
--- 24914,24928 ----
  5dc61aa60f3a5b87b1cd5f1d6aeae63c  libstdc++-v3/testsuite/23_containers/bitset/operations/13838.cc
  bbe30d6805d20aaa9920808f6ba14198  libstdc++-v3/testsuite/23_containers/bitset/operations/2.cc
  e8f9133fff454bc6ed77b0742125a5bd  libstdc++-v3/testsuite/23_containers/bitset/test/1.cc
+ abbd699613ba819a61dc3db69bfeb004  libstdc++-v3/testsuite/23_containers/bitset/to_string/1.cc
  42bc31bddac304da6e5add01192d6daf  libstdc++-v3/testsuite/23_containers/bitset/to_ulong/1.cc
  1205a772f13a1506f1307341de9878d8  libstdc++-v3/testsuite/23_containers/deque/1.cc
  47ac2ebf2a1a3530ac3ec4316d206128  libstdc++-v3/testsuite/23_containers/deque/14340.cc
+ a4b2d516bb637d318cac6cc5351c3163  libstdc++-v3/testsuite/23_containers/deque/check_construct_destroy.cc
  a98e8706a103646bc26f5694bf5879bb  libstdc++-v3/testsuite/23_containers/deque/cons/1.cc
  1f4d7dc4da166761d0718abb24a9ee3a  libstdc++-v3/testsuite/23_containers/deque/cons/2.cc
  a25b47baff1079bde449c961d2f3b42d  libstdc++-v3/testsuite/23_containers/deque/cons/clear_allocator.cc
+ 2075e16a7cbbe3505c3bcd13fe31f765  libstdc++-v3/testsuite/23_containers/deque/explicit_instantiation.cc
  353fc88667645a8878c1cc2858f2ba2b  libstdc++-v3/testsuite/23_containers/deque/invalidation/1.cc
  70564d23d3797adaf00af4ebc612da4f  libstdc++-v3/testsuite/23_containers/deque/invalidation/2.cc
  b0d53156494f8c317068ba51010b9ed7  libstdc++-v3/testsuite/23_containers/deque/invalidation/3.cc
*************** b0d53156494f8c317068ba51010b9ed7  libstd
*** 20915,20920 ****
--- 24932,24938 ----
  29eb5de4b8c3834ab8ab72cd46d4e120  libstdc++-v3/testsuite/23_containers/list/1.cc
  e19fc392c40f6b0868c6c27254b9a525  libstdc++-v3/testsuite/23_containers/list/14340.cc
  9e704853cec9cb72b555bf988f6add3b  libstdc++-v3/testsuite/23_containers/list/capacity/1.cc
+ 07513836b1ba91bc8d87b8cdae313a24  libstdc++-v3/testsuite/23_containers/list/check_construct_destroy.cc
  071c750543a8b1466c39a7addd0bbd2f  libstdc++-v3/testsuite/23_containers/list/cons/1.cc
  55375491ee78c25a66385c2cc9d18641  libstdc++-v3/testsuite/23_containers/list/cons/2.cc
  0369b6f23cb53fa220eee5154ecb10e1  libstdc++-v3/testsuite/23_containers/list/cons/3.cc
*************** e4c6c3453309ba2402ce4d66b2337bb0  libstd
*** 20925,20930 ****
--- 24943,24949 ----
  eb512806d6efd83ffe296121b4b45aef  libstdc++-v3/testsuite/23_containers/list/cons/8.cc
  250d4ad50270f5298c5b768f309c9350  libstdc++-v3/testsuite/23_containers/list/cons/9.cc
  a22417c38affbd4ad4ba0b999d1f9235  libstdc++-v3/testsuite/23_containers/list/cons/clear_allocator.cc
+ 13b7caf10a6214f2f4f1f1bfaa989a60  libstdc++-v3/testsuite/23_containers/list/explicit_instantiation.cc
  8c559eebed506306c3486d7039d03e70  libstdc++-v3/testsuite/23_containers/list/invalidation/1.cc
  9cb9a54e0206c155ddaea8166fd4dd10  libstdc++-v3/testsuite/23_containers/list/invalidation/2.cc
  f379d4fc54b3eb836fe5ec438e07ab52  libstdc++-v3/testsuite/23_containers/list/invalidation/3.cc
*************** bd2aaf139929150ade7af027bc0f3e07  libstd
*** 20939,20959 ****
  44202014b11f930bd30411a74a0bbf15  libstdc++-v3/testsuite/23_containers/list/operators/4.cc
  ded5ce9e88ae459f9394098cb136ce5a  libstdc++-v3/testsuite/23_containers/map/1.cc
  f3a6cca2482463f98ce4bbefd215a079  libstdc++-v3/testsuite/23_containers/map/14340.cc
  ff17dfd85521734e2354f4c94365b834  libstdc++-v3/testsuite/23_containers/map/insert/1.cc
  83488d5cd6db5d82fe7ac969642dea3d  libstdc++-v3/testsuite/23_containers/map/insert/16813.cc
  229dc89f61102e4cbb432a95da905fd7  libstdc++-v3/testsuite/23_containers/map/invalidation/1.cc
  2a8a211b0267ac37aa36de069c92f83b  libstdc++-v3/testsuite/23_containers/map/invalidation/2.cc
  db5b73515723aea0c8134ca3ea57ab19  libstdc++-v3/testsuite/23_containers/map/modifiers/swap.cc
  fb07d2e6c3b130e906a8986ea17b82b0  libstdc++-v3/testsuite/23_containers/map/operators/1.cc
! 7acc7b611a63d29be746d91db78ece18  libstdc++-v3/testsuite/23_containers/map/operators/1_neg.cc
  0cf5ed8206454cd0c064f64947447a7b  libstdc++-v3/testsuite/23_containers/multimap/1.cc
  15a0c566bf8f9cf50da0b5645db7ccde  libstdc++-v3/testsuite/23_containers/multimap/14340.cc
  c18d1228b12d82530a57028924bab01a  libstdc++-v3/testsuite/23_containers/multimap/invalidation/1.cc
  3fcc30e8a702410fc71ec59fb73ea0a4  libstdc++-v3/testsuite/23_containers/multimap/invalidation/2.cc
  5709c210cbdabc9bdd0468bd4caaabdb  libstdc++-v3/testsuite/23_containers/multimap/modifiers/swap.cc
  1a3a90314c27e9e30f0575f496722f0c  libstdc++-v3/testsuite/23_containers/multiset/1.cc
  398e4076b18debab96eec74f199ba5c5  libstdc++-v3/testsuite/23_containers/multiset/14340.cc
  a08ae6ecebcc355e2ad02cd109b0fa13  libstdc++-v3/testsuite/23_containers/multiset/insert/1.cc
  7a1c61f406d9a347dc19491534386686  libstdc++-v3/testsuite/23_containers/multiset/invalidation/1.cc
  67b957cbcc90e9990fc5148dd0c3ef21  libstdc++-v3/testsuite/23_containers/multiset/invalidation/2.cc
  acc6fe57f8e551c3b6090b5f76659e4a  libstdc++-v3/testsuite/23_containers/multiset/modifiers/swap.cc
--- 24958,24982 ----
  44202014b11f930bd30411a74a0bbf15  libstdc++-v3/testsuite/23_containers/list/operators/4.cc
  ded5ce9e88ae459f9394098cb136ce5a  libstdc++-v3/testsuite/23_containers/map/1.cc
  f3a6cca2482463f98ce4bbefd215a079  libstdc++-v3/testsuite/23_containers/map/14340.cc
+ 4ebdd196f489bc7f53840b2e144644de  libstdc++-v3/testsuite/23_containers/map/explicit_instantiation.cc
  ff17dfd85521734e2354f4c94365b834  libstdc++-v3/testsuite/23_containers/map/insert/1.cc
  83488d5cd6db5d82fe7ac969642dea3d  libstdc++-v3/testsuite/23_containers/map/insert/16813.cc
  229dc89f61102e4cbb432a95da905fd7  libstdc++-v3/testsuite/23_containers/map/invalidation/1.cc
  2a8a211b0267ac37aa36de069c92f83b  libstdc++-v3/testsuite/23_containers/map/invalidation/2.cc
  db5b73515723aea0c8134ca3ea57ab19  libstdc++-v3/testsuite/23_containers/map/modifiers/swap.cc
  fb07d2e6c3b130e906a8986ea17b82b0  libstdc++-v3/testsuite/23_containers/map/operators/1.cc
! ecbe18da2a1c0edb433371f689b56b2a  libstdc++-v3/testsuite/23_containers/map/operators/1_neg.cc
  0cf5ed8206454cd0c064f64947447a7b  libstdc++-v3/testsuite/23_containers/multimap/1.cc
  15a0c566bf8f9cf50da0b5645db7ccde  libstdc++-v3/testsuite/23_containers/multimap/14340.cc
+ f8654e04c96fee2d1f15ed54a273f72a  libstdc++-v3/testsuite/23_containers/multimap/explicit_instantiation.cc
  c18d1228b12d82530a57028924bab01a  libstdc++-v3/testsuite/23_containers/multimap/invalidation/1.cc
  3fcc30e8a702410fc71ec59fb73ea0a4  libstdc++-v3/testsuite/23_containers/multimap/invalidation/2.cc
  5709c210cbdabc9bdd0468bd4caaabdb  libstdc++-v3/testsuite/23_containers/multimap/modifiers/swap.cc
  1a3a90314c27e9e30f0575f496722f0c  libstdc++-v3/testsuite/23_containers/multiset/1.cc
  398e4076b18debab96eec74f199ba5c5  libstdc++-v3/testsuite/23_containers/multiset/14340.cc
+ 1b06b3f6dd1650702ca1cd83c42337d5  libstdc++-v3/testsuite/23_containers/multiset/explicit_instantiation.cc
  a08ae6ecebcc355e2ad02cd109b0fa13  libstdc++-v3/testsuite/23_containers/multiset/insert/1.cc
+ 76bf9035cb347179b6a077cb54bbad9f  libstdc++-v3/testsuite/23_containers/multiset/insert/2.cc
  7a1c61f406d9a347dc19491534386686  libstdc++-v3/testsuite/23_containers/multiset/invalidation/1.cc
  67b957cbcc90e9990fc5148dd0c3ef21  libstdc++-v3/testsuite/23_containers/multiset/invalidation/2.cc
  acc6fe57f8e551c3b6090b5f76659e4a  libstdc++-v3/testsuite/23_containers/multiset/modifiers/swap.cc
*************** fc179a7048e2c023ba31f7e0800d3ddf  libstd
*** 20961,20970 ****
  62302728f3348ae4fcddda3cc4f985a9  libstdc++-v3/testsuite/23_containers/queue/members/7157.cc
  0a17ea416e321c0ce95055d34dfb5c4e  libstdc++-v3/testsuite/23_containers/set/1.cc
  8a34e8ad6bbfa22728fecd14fb6eaa00  libstdc++-v3/testsuite/23_containers/set/14340.cc
  3d540f2bccb635bd43e7e8db11a1d2c3  libstdc++-v3/testsuite/23_containers/set/invalidation/1.cc
  a60362b3af507c75952e5bfca30acbfd  libstdc++-v3/testsuite/23_containers/set/invalidation/2.cc
  5dfa31723a5b8c7cb9f988e3bdac4d97  libstdc++-v3/testsuite/23_containers/set/modifiers/swap.cc
! 883cd02d234bab9c9908051899f82e75  libstdc++-v3/testsuite/23_containers/set/operators/1_neg.cc
  52d51b5ff50960a7f0382da76cbf3448  libstdc++-v3/testsuite/23_containers/stack/members/7158.cc
  e4660d43a966624ec54743756efe7456  libstdc++-v3/testsuite/23_containers/vector/1.cc
  b9dcfbf9ad2540b9367cab4a2018f2f2  libstdc++-v3/testsuite/23_containers/vector/14340.cc
--- 24984,24998 ----
  62302728f3348ae4fcddda3cc4f985a9  libstdc++-v3/testsuite/23_containers/queue/members/7157.cc
  0a17ea416e321c0ce95055d34dfb5c4e  libstdc++-v3/testsuite/23_containers/set/1.cc
  8a34e8ad6bbfa22728fecd14fb6eaa00  libstdc++-v3/testsuite/23_containers/set/14340.cc
+ a3bbdfaa53dc892567818297a32bae02  libstdc++-v3/testsuite/23_containers/set/check_construct_destroy.cc
+ 11a045dff2f8af2b60bf24e2a0f99bbc  libstdc++-v3/testsuite/23_containers/set/explicit_instantiation.cc
+ f62ae61eaf84a5851d71058563bec71a  libstdc++-v3/testsuite/23_containers/set/insert/1.cc
  3d540f2bccb635bd43e7e8db11a1d2c3  libstdc++-v3/testsuite/23_containers/set/invalidation/1.cc
  a60362b3af507c75952e5bfca30acbfd  libstdc++-v3/testsuite/23_containers/set/invalidation/2.cc
+ 42876782209cfa21261faedd40d1651b  libstdc++-v3/testsuite/23_containers/set/modifiers/16728.cc
+ c6d26b6639ba089de93f86ce80b92834  libstdc++-v3/testsuite/23_containers/set/modifiers/17948.cc
  5dfa31723a5b8c7cb9f988e3bdac4d97  libstdc++-v3/testsuite/23_containers/set/modifiers/swap.cc
! 9fe25fb1be418231a622eae4a6e20484  libstdc++-v3/testsuite/23_containers/set/operators/1_neg.cc
  52d51b5ff50960a7f0382da76cbf3448  libstdc++-v3/testsuite/23_containers/stack/members/7158.cc
  e4660d43a966624ec54743756efe7456  libstdc++-v3/testsuite/23_containers/vector/1.cc
  b9dcfbf9ad2540b9367cab4a2018f2f2  libstdc++-v3/testsuite/23_containers/vector/14340.cc
*************** b9dcfbf9ad2540b9367cab4a2018f2f2  libstd
*** 20974,20979 ****
--- 25002,25008 ----
  0cc61f21d45d666ddf6ab8e53cbdc345  libstdc++-v3/testsuite/23_containers/vector/capacity/1.cc
  0187a4c8db58d6a12c12463792c76954  libstdc++-v3/testsuite/23_containers/vector/capacity/2.cc
  7bb2e0893b82ff64f94c77b17f2c8912  libstdc++-v3/testsuite/23_containers/vector/capacity/8230.cc
+ 55d02f7de21ea96088733708bdd22c9d  libstdc++-v3/testsuite/23_containers/vector/check_construct_destroy.cc
  b91666131674442f32e5fffde1c59776  libstdc++-v3/testsuite/23_containers/vector/cons/1.cc
  f2c47d43305302c666c889bbbce307b9  libstdc++-v3/testsuite/23_containers/vector/cons/2.cc
  4fe7d0f89a1b67bea85d79d6a7a94f89  libstdc++-v3/testsuite/23_containers/vector/cons/3.cc
*************** f2c47d43305302c666c889bbbce307b9  libstd
*** 20981,20992 ****
--- 25010,25023 ----
  4b7c34ada63c00e1d6d1cc4bcb7108b7  libstdc++-v3/testsuite/23_containers/vector/cons/6513.cc
  08bfa395cc98df61ea5459e5f79c2e57  libstdc++-v3/testsuite/23_containers/vector/cons/clear_allocator.cc
  c5bc8535af19de335c6574d5a4ac1370  libstdc++-v3/testsuite/23_containers/vector/element_access/1.cc
+ 32519cd01671f382d9e5e8bf3e585cbf  libstdc++-v3/testsuite/23_containers/vector/explicit_instantiation.cc
  c92b7b81263b7683644553950174caa3  libstdc++-v3/testsuite/23_containers/vector/invalidation/1.cc
  610901d7ef0174741994f7648c9e13c7  libstdc++-v3/testsuite/23_containers/vector/invalidation/2.cc
  44b56126b30197f520477084db34131d  libstdc++-v3/testsuite/23_containers/vector/invalidation/3.cc
  60809c5dc44ae76d0c39e7ce73f07045  libstdc++-v3/testsuite/23_containers/vector/invalidation/4.cc
  0d0c57cddc9beeed009beb55d7e6e8c6  libstdc++-v3/testsuite/23_containers/vector/modifiers/1.cc
  a9d3ccb0ef90d6f452b0ea5f3e782be4  libstdc++-v3/testsuite/23_containers/vector/modifiers/2.cc
+ b4eaaa9e3e5c4543af6751ae7a135419  libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/1.cc
  3b85dab72ae201e95b7047619c4ed3c5  libstdc++-v3/testsuite/23_containers/vector/modifiers/swap.cc
  74208021c6d65ea79f87f77fc2ffdbf1  libstdc++-v3/testsuite/23_containers/vector/resize/1.cc
  911290483aeb1fd3daa8edc0ffeba797  libstdc++-v3/testsuite/24_iterators/back_insert_iterator.cc
*************** f17841e4b6fa43ab0ae9cd28b585279f  libstd
*** 21000,21043 ****
  b4d05133b1d64b0f214fb7d664a48c2c  libstdc++-v3/testsuite/24_iterators/ostream_iterator.cc
  7693fc2a6d3b60d21235e3c8687ba571  libstdc++-v3/testsuite/24_iterators/ostreambuf_iterator/1.cc
  5b844e67ccb6100c089c821826c7f71a  libstdc++-v3/testsuite/24_iterators/ostreambuf_iterator/2.cc
- 4b56036117d84767f9c14169db142e57  libstdc++-v3/testsuite/24_iterators/rel_ops.cc
  e39bd6e1519f461c54f8817a58f3811a  libstdc++-v3/testsuite/24_iterators/reverse_iterator/1.cc
  6899c6d16cb87df0b292856d8b0e267b  libstdc++-v3/testsuite/24_iterators/reverse_iterator/2.cc
  652aad2ced9edd516098305145ed6069  libstdc++-v3/testsuite/24_iterators/reverse_iterator/3.cc
  1aae623756cf2e465e32ef58b3813259  libstdc++-v3/testsuite/25_algorithms/binary_search.cc
! 646a615d93afcf3b86be5ee042118cd0  libstdc++-v3/testsuite/25_algorithms/copy.cc
  5e6d1854b0d7067ff02a3974aec6e31d  libstdc++-v3/testsuite/25_algorithms/equal.cc
  9a5e8949fed693329c72d6fdc02cdb4b  libstdc++-v3/testsuite/25_algorithms/find_first_of/concept_check_1.cc
  48967cfb4d6df594db4b72675278275e  libstdc++-v3/testsuite/25_algorithms/heap.cc
  eecfe682fbead0e556cdf1f1c7b7bd86  libstdc++-v3/testsuite/25_algorithms/lower_bound.cc
  94d948b4dd893e09d3e737b8f0d28081  libstdc++-v3/testsuite/25_algorithms/min_max.cc
  5b54eafa3634e72c26fa7a8c3681b1bf  libstdc++-v3/testsuite/25_algorithms/partition.cc
  5f069bf90e594989fd73a25aaf12dfde  libstdc++-v3/testsuite/25_algorithms/rotate.cc
  29b24a659ab524bc1fe160bf15ee2a1a  libstdc++-v3/testsuite/25_algorithms/search_n/11400.cc
  2acfe9d35c79c357777af5d61b9c19e2  libstdc++-v3/testsuite/25_algorithms/sort.cc
  c08125d000ff1fa0382d3f4754f7d400  libstdc++-v3/testsuite/25_algorithms/unique/1.cc
  38081124a5e1d0fae9b92226de13e220  libstdc++-v3/testsuite/25_algorithms/unique/11480.cc
  adfaf0ce522718f3f155c9a4aa5e44f3  libstdc++-v3/testsuite/25_algorithms/unique/2.cc
! 3e191d68e11822f58de5e4bd15365ca5  libstdc++-v3/testsuite/26_numerics/binary_closure.cc
! ffd5ace831a1ba8d8060a2de261eaab3  libstdc++-v3/testsuite/26_numerics/buggy_complex.cc
! b9abd493c179779cb2e5eaac31ad1fb0  libstdc++-v3/testsuite/26_numerics/c99_classification_macros_c++.cc
! 1af74b0846054c13b22b91f4c4017146  libstdc++-v3/testsuite/26_numerics/c99_classification_macros_c.cc
! 0c7a120ddbbab2853031d8daa5d5ba3a  libstdc++-v3/testsuite/26_numerics/c_math.cc
! 697e9ae95594661b06d36f5f35b171f6  libstdc++-v3/testsuite/26_numerics/c_math_dynamic.cc
  b10d80495d382414960c76cc30a6c72a  libstdc++-v3/testsuite/26_numerics/cmath/overloads.cc
! 3eb441d1f3027ad2d2ef8ec810b884e5  libstdc++-v3/testsuite/26_numerics/complex/13450.cc
! f4713483415277f70091c2446bfe8638  libstdc++-v3/testsuite/26_numerics/complex/pow.cc
! b4164911722190f08ca69b4d4f2461c6  libstdc++-v3/testsuite/26_numerics/complex_inserters_extractors.cc
! 454760e897fd0c33c6171719582c9541  libstdc++-v3/testsuite/26_numerics/complex_value.cc
! 9ee1f4a8759da5e4e9c6b8e6757fcac7  libstdc++-v3/testsuite/26_numerics/fabs_inline.cc
! 4b8f005d06d2c9bbca7e68419c765473  libstdc++-v3/testsuite/26_numerics/slice.cc
! 1907f30fb04466e37d3e7d55bf4a266f  libstdc++-v3/testsuite/26_numerics/slice_array_assignment.cc
! c3bb8ebb8435050657012f704ce1fe63  libstdc++-v3/testsuite/26_numerics/sum_diff.cc
! 580a43e97acf7dd2eb46862afcd677dd  libstdc++-v3/testsuite/26_numerics/valarray.cc
! b1b5466f7a5b0e62025fb9bc93d7b9d0  libstdc++-v3/testsuite/26_numerics/valarray_const_bracket.cc
! cfcf604ecec3ce39a322abaad60725c2  libstdc++-v3/testsuite/26_numerics/valarray_name_lookup.cc
! c092ddab1aec9b2ea57454edb5664362  libstdc++-v3/testsuite/26_numerics/valarray_operators.cc
! be1bb176aacd0e7176a61e6364fc0cea  libstdc++-v3/testsuite/26_numerics/valarray_subset_assignment.cc
  3d48cf66170981ce21a2dcb2e4ae18f3  libstdc++-v3/testsuite/27_io/basic_filebuf/1.cc
  4d06fe55b78a40f20f6cf63d17b687f7  libstdc++-v3/testsuite/27_io/basic_filebuf/2.cc
  8ab5d25b6c2ac0524625094eadad1bcc  libstdc++-v3/testsuite/27_io/basic_filebuf/3.cc
--- 25031,25082 ----
  b4d05133b1d64b0f214fb7d664a48c2c  libstdc++-v3/testsuite/24_iterators/ostream_iterator.cc
  7693fc2a6d3b60d21235e3c8687ba571  libstdc++-v3/testsuite/24_iterators/ostreambuf_iterator/1.cc
  5b844e67ccb6100c089c821826c7f71a  libstdc++-v3/testsuite/24_iterators/ostreambuf_iterator/2.cc
  e39bd6e1519f461c54f8817a58f3811a  libstdc++-v3/testsuite/24_iterators/reverse_iterator/1.cc
  6899c6d16cb87df0b292856d8b0e267b  libstdc++-v3/testsuite/24_iterators/reverse_iterator/2.cc
  652aad2ced9edd516098305145ed6069  libstdc++-v3/testsuite/24_iterators/reverse_iterator/3.cc
  1aae623756cf2e465e32ef58b3813259  libstdc++-v3/testsuite/25_algorithms/binary_search.cc
! afdf8f46df1e00e9d4a5871021065085  libstdc++-v3/testsuite/25_algorithms/copy/1.cc
! 31d5f1d3e898011eea956c89455b14bc  libstdc++-v3/testsuite/25_algorithms/copy/2.cc
! d3afcdf4bd2d747e3413c6f8dd4a8bfd  libstdc++-v3/testsuite/25_algorithms/copy/3.cc
! a291cc524c674d1df096691161bfc535  libstdc++-v3/testsuite/25_algorithms/copy/4.cc
  5e6d1854b0d7067ff02a3974aec6e31d  libstdc++-v3/testsuite/25_algorithms/equal.cc
+ 7326f645df7338ccdcc9699379644c6d  libstdc++-v3/testsuite/25_algorithms/fill/1.cc
+ aeddde25884ec33a282c2a4d1816b486  libstdc++-v3/testsuite/25_algorithms/fill/2.cc
  9a5e8949fed693329c72d6fdc02cdb4b  libstdc++-v3/testsuite/25_algorithms/find_first_of/concept_check_1.cc
  48967cfb4d6df594db4b72675278275e  libstdc++-v3/testsuite/25_algorithms/heap.cc
+ e1213f8ec6cd72cf52462a0f04e1c09a  libstdc++-v3/testsuite/25_algorithms/iter_swap/20577.cc
  eecfe682fbead0e556cdf1f1c7b7bd86  libstdc++-v3/testsuite/25_algorithms/lower_bound.cc
  94d948b4dd893e09d3e737b8f0d28081  libstdc++-v3/testsuite/25_algorithms/min_max.cc
  5b54eafa3634e72c26fa7a8c3681b1bf  libstdc++-v3/testsuite/25_algorithms/partition.cc
  5f069bf90e594989fd73a25aaf12dfde  libstdc++-v3/testsuite/25_algorithms/rotate.cc
  29b24a659ab524bc1fe160bf15ee2a1a  libstdc++-v3/testsuite/25_algorithms/search_n/11400.cc
+ 4a1b9953b8a95dcc9133265f3650846c  libstdc++-v3/testsuite/25_algorithms/search_n/iterator.cc
  2acfe9d35c79c357777af5d61b9c19e2  libstdc++-v3/testsuite/25_algorithms/sort.cc
  c08125d000ff1fa0382d3f4754f7d400  libstdc++-v3/testsuite/25_algorithms/unique/1.cc
  38081124a5e1d0fae9b92226de13e220  libstdc++-v3/testsuite/25_algorithms/unique/11480.cc
  adfaf0ce522718f3f155c9a4aa5e44f3  libstdc++-v3/testsuite/25_algorithms/unique/2.cc
! 3153db75a0844bdefbfef1e3e55fe870  libstdc++-v3/testsuite/26_numerics/cmath/19322.cc
! 7843915bbad6ce17883f9f29da36b03c  libstdc++-v3/testsuite/26_numerics/cmath/c99_classification_macros_c++.cc
! 1af74b0846054c13b22b91f4c4017146  libstdc++-v3/testsuite/26_numerics/cmath/c99_classification_macros_c.cc
! 0c7a120ddbbab2853031d8daa5d5ba3a  libstdc++-v3/testsuite/26_numerics/cmath/c_math.cc
! 697e9ae95594661b06d36f5f35b171f6  libstdc++-v3/testsuite/26_numerics/cmath/c_math_dynamic.cc
! 9ee1f4a8759da5e4e9c6b8e6757fcac7  libstdc++-v3/testsuite/26_numerics/cmath/fabs_inline.cc
  b10d80495d382414960c76cc30a6c72a  libstdc++-v3/testsuite/26_numerics/cmath/overloads.cc
! 372fc0b58be0a361072f5cc44ecae7ae  libstdc++-v3/testsuite/26_numerics/cmath/powi.cc
! a03e735cfed696176faba9e897fd9d51  libstdc++-v3/testsuite/26_numerics/complex/13450.cc
! ffd5ace831a1ba8d8060a2de261eaab3  libstdc++-v3/testsuite/26_numerics/complex/buggy_complex.cc
! b4164911722190f08ca69b4d4f2461c6  libstdc++-v3/testsuite/26_numerics/complex/complex_inserters_extractors.cc
! 3a5b916c4f0d71e7cc7750a003e84d21  libstdc++-v3/testsuite/26_numerics/complex/complex_value.cc
! c47a31a7f378ac3ded9ade6d39cfe5e2  libstdc++-v3/testsuite/26_numerics/complex/pow.cc
! cfb00094cab58d2df17e43994d12c0e9  libstdc++-v3/testsuite/26_numerics/numeric/sum_diff.cc
! 3e191d68e11822f58de5e4bd15365ca5  libstdc++-v3/testsuite/26_numerics/valarray/binary_closure.cc
! 4b8f005d06d2c9bbca7e68419c765473  libstdc++-v3/testsuite/26_numerics/valarray/slice.cc
! 1907f30fb04466e37d3e7d55bf4a266f  libstdc++-v3/testsuite/26_numerics/valarray/slice_array_assignment.cc
! 580a43e97acf7dd2eb46862afcd677dd  libstdc++-v3/testsuite/26_numerics/valarray/valarray.cc
! b1b5466f7a5b0e62025fb9bc93d7b9d0  libstdc++-v3/testsuite/26_numerics/valarray/valarray_const_bracket.cc
! cfcf604ecec3ce39a322abaad60725c2  libstdc++-v3/testsuite/26_numerics/valarray/valarray_name_lookup.cc
! c092ddab1aec9b2ea57454edb5664362  libstdc++-v3/testsuite/26_numerics/valarray/valarray_operators.cc
! be1bb176aacd0e7176a61e6364fc0cea  libstdc++-v3/testsuite/26_numerics/valarray/valarray_subset_assignment.cc
  3d48cf66170981ce21a2dcb2e4ae18f3  libstdc++-v3/testsuite/27_io/basic_filebuf/1.cc
  4d06fe55b78a40f20f6cf63d17b687f7  libstdc++-v3/testsuite/27_io/basic_filebuf/2.cc
  8ab5d25b6c2ac0524625094eadad1bcc  libstdc++-v3/testsuite/27_io/basic_filebuf/3.cc
*************** ca3de1ce3467ea75844ed2d5ff66f057  libstd
*** 21051,21072 ****
  d0672daa41d91319b5e170465e40a914  libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/2.cc
  8546c8aba0fc14fad92c03243528d4c0  libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/3.cc
  cf368a74c0edeeb0c5f8008070b38fe3  libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/4.cc
! 4c9f9fa749542697049faf3c62adfc62  libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/4879.cc
  b00a15c1ae325ad2e652c1929e9ea340  libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/5.cc
! 5ee8ee8268080124b89aa2aac9a75914  libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/9964.cc
  de9d3e5d1c39eb840b42bf70449e241b  libstdc++-v3/testsuite/27_io/basic_filebuf/close/wchar_t/12790-1.cc
  3cbcf8d8479097145ece2cd2bdf7d8a8  libstdc++-v3/testsuite/27_io/basic_filebuf/close/wchar_t/12790-2.cc
  40aa6d6974cf725d3ecd8e4156cf1df7  libstdc++-v3/testsuite/27_io/basic_filebuf/close/wchar_t/12790-3.cc
  ce412d043dfdbc29d0077f5c966ef61c  libstdc++-v3/testsuite/27_io/basic_filebuf/close/wchar_t/12790-4.cc
  dadde6d616195c56e2c7bc95711cc20e  libstdc++-v3/testsuite/27_io/basic_filebuf/cons/char/1.cc
  5ed1f3af1536800cbdafafd7445e61e2  libstdc++-v3/testsuite/27_io/basic_filebuf/cons/wchar_t/10132-1.cc
  23ea2300a94cd508517ed541215e898f  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/12206.cc
  2e5f748ce866164de0c23c416de90e84  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/1.cc
  68a0d40ffcf542360bbc9e2eef2af7ef  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13007.cc
  5f1f6da769ff39ae56fcd09d46d45aca  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13171-1.cc
! 63320f23f750f9a7d347c353c335bc39  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13171-2.cc
  9d50ba97d83841ab42e8a189be07a059  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13171-4.cc
! 7c111434adc6c3ddb6e5b5a86ac1e1d5  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13582-2.cc
  d296e821d10e552b237934bae21a8de1  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/14975-1.cc
  2d58f3e765be0a3d06032b4018d24fb2  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/2.cc
  10233c3fd1ec06622c3ed0bebdfbfe65  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/3.cc
--- 25090,25112 ----
  d0672daa41d91319b5e170465e40a914  libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/2.cc
  8546c8aba0fc14fad92c03243528d4c0  libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/3.cc
  cf368a74c0edeeb0c5f8008070b38fe3  libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/4.cc
! cb186252b20bf51fbe959c64aec5a98d  libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/4879.cc
  b00a15c1ae325ad2e652c1929e9ea340  libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/5.cc
! 85ecfbdd990acf994e258ab7281baa1e  libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/9964.cc
  de9d3e5d1c39eb840b42bf70449e241b  libstdc++-v3/testsuite/27_io/basic_filebuf/close/wchar_t/12790-1.cc
  3cbcf8d8479097145ece2cd2bdf7d8a8  libstdc++-v3/testsuite/27_io/basic_filebuf/close/wchar_t/12790-2.cc
  40aa6d6974cf725d3ecd8e4156cf1df7  libstdc++-v3/testsuite/27_io/basic_filebuf/close/wchar_t/12790-3.cc
  ce412d043dfdbc29d0077f5c966ef61c  libstdc++-v3/testsuite/27_io/basic_filebuf/close/wchar_t/12790-4.cc
  dadde6d616195c56e2c7bc95711cc20e  libstdc++-v3/testsuite/27_io/basic_filebuf/cons/char/1.cc
+ 2f2f9033a8806ed796b135fa26a5aa5d  libstdc++-v3/testsuite/27_io/basic_filebuf/cons/wchar_t/1.cc
  5ed1f3af1536800cbdafafd7445e61e2  libstdc++-v3/testsuite/27_io/basic_filebuf/cons/wchar_t/10132-1.cc
  23ea2300a94cd508517ed541215e898f  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/12206.cc
  2e5f748ce866164de0c23c416de90e84  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/1.cc
  68a0d40ffcf542360bbc9e2eef2af7ef  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13007.cc
  5f1f6da769ff39ae56fcd09d46d45aca  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13171-1.cc
! 062f07c56931bc509813d306e8022d31  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13171-2.cc
  9d50ba97d83841ab42e8a189be07a059  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13171-4.cc
! 964dc5cb6ec08320c0af25a341711142  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13582-2.cc
  d296e821d10e552b237934bae21a8de1  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/14975-1.cc
  2d58f3e765be0a3d06032b4018d24fb2  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/2.cc
  10233c3fd1ec06622c3ed0bebdfbfe65  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/3.cc
*************** a8b25f47cfb9960de3f517758ebb11cf  libstd
*** 21077,21083 ****
  21a2c9d9024426a6a7dff3109e2b19ec  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/13171-3.cc
  7ec41a6f731832016c175c10abe63167  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/13582-2.cc
  e8304ecaa3a2d1c9d367b17d904561a5  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/13582-3.cc
! cb26766248007c0880c0ec99c32c5aea  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/14975-2.cc
  d5465dc787d7fc1963e37c73c3835d16  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/2.cc
  23d72d1b6fa13a2b9d3af05c862bb6a6  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/3.cc
  e9377f4a69e9fb871477e993458c2fd6  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/9322.cc
--- 25117,25123 ----
  21a2c9d9024426a6a7dff3109e2b19ec  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/13171-3.cc
  7ec41a6f731832016c175c10abe63167  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/13582-2.cc
  e8304ecaa3a2d1c9d367b17d904561a5  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/13582-3.cc
! 2d7f5a654df84f7694ea1affa3227952  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/14975-2.cc
  d5465dc787d7fc1963e37c73c3835d16  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/2.cc
  23d72d1b6fa13a2b9d3af05c862bb6a6  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/3.cc
  e9377f4a69e9fb871477e993458c2fd6  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/9322.cc
*************** a7806897d9a0cb10eb46d736f0d6213c  libstd
*** 21087,21093 ****
  04aa32345428b4a7d825bb35e9acbd37  libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/1.cc
  9358f673359ef0155c0bd5fb84e7b01e  libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/2.cc
  ad6965c3c2366dd28a76d7c317a0e2b9  libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/3.cc
! 43ac2d6f7f65453688297ed7cfa24668  libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/9507.cc
  3cf7aa87f5dbe5bb5458fa224028b9a4  libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/1.cc
  4bd2149eb58c83afd5f3a763ea2b3b47  libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/13858.cc
  45419e94fb4dd482049907438a29ecf0  libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/2-unbuf.cc
--- 25127,25133 ----
  04aa32345428b4a7d825bb35e9acbd37  libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/1.cc
  9358f673359ef0155c0bd5fb84e7b01e  libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/2.cc
  ad6965c3c2366dd28a76d7c317a0e2b9  libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/3.cc
! 477ee4767dcb0e9b26ab2c70ebc111ee  libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/9507.cc
  3cf7aa87f5dbe5bb5458fa224028b9a4  libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/1.cc
  4bd2149eb58c83afd5f3a763ea2b3b47  libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/13858.cc
  45419e94fb4dd482049907438a29ecf0  libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/2-unbuf.cc
*************** bf667d425b26721a1be28a34828b581c  libstd
*** 21173,21183 ****
  b1296a11dad4ab8ef70e68c19da6ae94  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/2-in.cc
  f31a2e093b711e815dcd294d9d0c0d63  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/2-io.cc
  0c60cec9a5b6cb78dbb42566f0e8ff1d  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/2-out.cc
! 394ef579ccd8de042e454a4e4b953acd  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/1-in.cc
! 2054adff23bfc1bb20482faa089b492f  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/1-io.cc
  191393dd03e46518585b8702e80a1503  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/1-out.cc
! dd19099ca88057df155f65996964decd  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/2-in.cc
! 28e602f6fc6a87a5acc5d2e865473311  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/2-io.cc
  279f13690cdda08a0ddf52d13fb792ae  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/2-out.cc
  62bf2e780680a1e09cd5a2a4ac85e44a  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/3.cc
  6206c31cb376abf37033702415f4f075  libstdc++-v3/testsuite/27_io/basic_filebuf/showmanyc/char/9533-1.cc
--- 25213,25223 ----
  b1296a11dad4ab8ef70e68c19da6ae94  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/2-in.cc
  f31a2e093b711e815dcd294d9d0c0d63  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/2-io.cc
  0c60cec9a5b6cb78dbb42566f0e8ff1d  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/2-out.cc
! cdf2b37e5452a46f4ec75a2e2422e65f  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/1-in.cc
! c5c3f279f8daf8db75d7c8385c6586e5  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/1-io.cc
  191393dd03e46518585b8702e80a1503  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/1-out.cc
! 8173a70f340d1d26e2605a782f91a772  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/2-in.cc
! a26e652d805707fd3189878502b03318  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/2-io.cc
  279f13690cdda08a0ddf52d13fb792ae  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/2-out.cc
  62bf2e780680a1e09cd5a2a4ac85e44a  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/3.cc
  6206c31cb376abf37033702415f4f075  libstdc++-v3/testsuite/27_io/basic_filebuf/showmanyc/char/9533-1.cc
*************** e7e1392ab9f20f34c2b3700cff60bca6  libstd
*** 21224,21230 ****
  60c30ec4fd7ca97daba8bfd0c62efe64  libstdc++-v3/testsuite/27_io/basic_filebuf/sync/wchar_t/1.cc
  63b55728313066c74410a6a69ef9a930  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/10096.cc
  f9488842d53d800286a73b4b4c7e3257  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/char/1.cc
! b9f27f2659ce9cffbeb1b04789aecfd1  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/char/10097.cc
  b20d92b1cbf4e3057b0d72f4671056b0  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/char/2.cc
  dc75d8a455ce522c842dd4aa198fda03  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/char/9027.cc
  3579aaeb542858d468a941828f3d0f47  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/1.cc
--- 25264,25270 ----
  60c30ec4fd7ca97daba8bfd0c62efe64  libstdc++-v3/testsuite/27_io/basic_filebuf/sync/wchar_t/1.cc
  63b55728313066c74410a6a69ef9a930  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/10096.cc
  f9488842d53d800286a73b4b4c7e3257  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/char/1.cc
! acbd213b541755f3301d17cfe2f61c4a  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/char/10097.cc
  b20d92b1cbf4e3057b0d72f4671056b0  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/char/2.cc
  dc75d8a455ce522c842dd4aa198fda03  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/char/9027.cc
  3579aaeb542858d468a941828f3d0f47  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/1.cc
*************** d115cf4b437e2a98c6b5138349cc1454  libstd
*** 21234,21240 ****
  f4425f472dd2fe423e54a09b35a8990d  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11389-4.cc
  c58dfd2c2e5a5211325da05d16c6248c  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11544-1.cc
  d781f7117019fcacfedcaf5d500a5b16  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11544-2.cc
! 33beb974a50c93af69202c5c18ea20c8  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11603.cc
  efd837b58d07efdef1af7c5da86cd261  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/2.cc
  7e9f5a7b8a46013970945cda5b14050a  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/3.cc
  70ef5de3ee4b900c92dc8118e23bc460  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/4.cc
--- 25274,25280 ----
  f4425f472dd2fe423e54a09b35a8990d  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11389-4.cc
  c58dfd2c2e5a5211325da05d16c6248c  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11544-1.cc
  d781f7117019fcacfedcaf5d500a5b16  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11544-2.cc
! 4c7eef73320e98d9bb03997325ca1a6d  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11603.cc
  efd837b58d07efdef1af7c5da86cd261  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/2.cc
  7e9f5a7b8a46013970945cda5b14050a  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/3.cc
  70ef5de3ee4b900c92dc8118e23bc460  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/4.cc
*************** b9df977fe4ab8bf7f07e9811bc7dbf10  libstd
*** 21251,21257 ****
  c31d86ee723054701a2961c084ffeeaf  libstdc++-v3/testsuite/27_io/basic_ifstream/3.cc
  047411e10e5db67cc7c3c1b2e6142c65  libstdc++-v3/testsuite/27_io/basic_ifstream/4.cc
  35e29860c10fca13c9e58fe4c1f2a5a1  libstdc++-v3/testsuite/27_io/basic_ifstream/cons/char/1.cc
! 33b89c0d42f57268d860e8c1e0f04534  libstdc++-v3/testsuite/27_io/basic_ifstream/open/char/1.cc
  39a41a3d078a36d7d140f5284deae05a  libstdc++-v3/testsuite/27_io/basic_ifstream/rdbuf/char/2832.cc
  2b85f1105d628178109dab91170a14bd  libstdc++-v3/testsuite/27_io/basic_ios/1.cc
  1fe739dc38e8e36606c613999502319a  libstdc++-v3/testsuite/27_io/basic_ios/2.cc
--- 25291,25297 ----
  c31d86ee723054701a2961c084ffeeaf  libstdc++-v3/testsuite/27_io/basic_ifstream/3.cc
  047411e10e5db67cc7c3c1b2e6142c65  libstdc++-v3/testsuite/27_io/basic_ifstream/4.cc
  35e29860c10fca13c9e58fe4c1f2a5a1  libstdc++-v3/testsuite/27_io/basic_ifstream/cons/char/1.cc
! f519ab0578ec11691b965dda7b2b43db  libstdc++-v3/testsuite/27_io/basic_ifstream/open/char/1.cc
  39a41a3d078a36d7d140f5284deae05a  libstdc++-v3/testsuite/27_io/basic_ifstream/rdbuf/char/2832.cc
  2b85f1105d628178109dab91170a14bd  libstdc++-v3/testsuite/27_io/basic_ios/1.cc
  1fe739dc38e8e36606c613999502319a  libstdc++-v3/testsuite/27_io/basic_ios/2.cc
*************** c07c6aee25c85fe13604644147c87dca  libstd
*** 21264,21270 ****
  2ec5938873968616a3d4f0e730503db7  libstdc++-v3/testsuite/27_io/basic_ios/copyfmt/char/1.cc
  7db1c935af20b39b39f58a60ebb92155  libstdc++-v3/testsuite/27_io/basic_ios/copyfmt/char/2.cc
  bf037c39232beeefe5246e824b0a6037  libstdc++-v3/testsuite/27_io/basic_ios/exceptions/char/1.cc
! 60e15850d83abbe51b802913c8654388  libstdc++-v3/testsuite/27_io/basic_ios/exceptions/char/2.cc
  294818e0eb677f926d81fb3942f40736  libstdc++-v3/testsuite/27_io/basic_ios/imbue/14072.cc
  5990fb94232693681953c00d6c4b865e  libstdc++-v3/testsuite/27_io/basic_ios/locales/char/1.cc
  2ccbe0dd83201c99eaba7fdde9e8c586  libstdc++-v3/testsuite/27_io/basic_iostream/1.cc
--- 25304,25310 ----
  2ec5938873968616a3d4f0e730503db7  libstdc++-v3/testsuite/27_io/basic_ios/copyfmt/char/1.cc
  7db1c935af20b39b39f58a60ebb92155  libstdc++-v3/testsuite/27_io/basic_ios/copyfmt/char/2.cc
  bf037c39232beeefe5246e824b0a6037  libstdc++-v3/testsuite/27_io/basic_ios/exceptions/char/1.cc
! af101b879e2b4ed095da457e9b0f9924  libstdc++-v3/testsuite/27_io/basic_ios/exceptions/char/2.cc
  294818e0eb677f926d81fb3942f40736  libstdc++-v3/testsuite/27_io/basic_ios/imbue/14072.cc
  5990fb94232693681953c00d6c4b865e  libstdc++-v3/testsuite/27_io/basic_ios/locales/char/1.cc
  2ccbe0dd83201c99eaba7fdde9e8c586  libstdc++-v3/testsuite/27_io/basic_iostream/1.cc
*************** ac3f6d883168184cf21c91093fa09f9d  libstd
*** 21276,21306 ****
  9822bc569ac4b3e547f9525b329c3da4  libstdc++-v3/testsuite/27_io/basic_istream/3.cc
  63a3385bbcb1cb64c6c35cb41b123503  libstdc++-v3/testsuite/27_io/basic_istream/4.cc
  4fd40f0af08c5a794786acea013e4bb1  libstdc++-v3/testsuite/27_io/basic_istream/exceptions/char/9561.cc
  baf5979746641916a5bfc839f19b342c  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/01.cc
! 5838eb6b539d4caafdc55b11a8de9e42  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/02.cc
! a0d33372af8bf5a36abef5fa4548a296  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/03.cc
! da2e2fd4e8e64eba48f4139531827328  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/06.cc
! f47e1c0d764f621252f50f8ce52a7f16  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/07.cc
! 324fb1a247567dae1c74f71113bf73be  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/08.cc
! ef018e3c7ee45579f06a1def6ef1504f  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/09.cc
! 93bab967075137922115b47120d08dc8  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/10.cc
! 5ab1f2e9f8ddf0981730975dd2886f90  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/11.cc
! c7deb7f350e514c4b2c9261798263523  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/12.cc
! 26f0f7eb745d0de6d0689f6954c8b293  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/13.cc
  8dcafb8a3b0eeadabc52e92a0631b1d3  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/9555-ia.cc
! 6fd877b9c46826baaadfa3ca4d24e05f  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/exceptions_badbit_throw.cc
  5041874a8e6dbe7b6e7b9c0e3ee4286f  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/exceptions_failbit.cc
! dc172f3e655bd079e0421d6550c56987  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/exceptions_failbit_throw.cc
  fa4af29c6deaab0d60194a79b6cd1b3d  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/pod/3983-1.cc
! fc2dbaaf76f18ee63cd76b177ec9630e  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/1.cc
  6789217d45a16053b074ca0ac91a4dac  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/11095-i.cc
  59cf3b6636366f01ee73344be9dade1f  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/2.cc
  657df5ac0444d7ca66bf4e6f355ae4b7  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/3.cc
  dfad7b6e027108fc3f4e3141b332481e  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/9555-ic.cc
  b1c6461219625773384ce04f98de41bf  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/9826.cc
  bafd6111e51ca3881b07ab5d55797dd6  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/pod/3983-2.cc
  0b4ecab178f1cd305bbce57dd6c2c519  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/1.cc
! 0f01beec77cc97bb19acdf36bbc6ab9f  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/2.cc
  f66031df573285a7c81b5a44a83d9201  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/3.cc
  e8fe4a68b5ecdc63c96a61fe42708cca  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/9318-in.cc
  1df860d4794d67769cb5820bfdf41ed2  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/9424-in.cc
--- 25316,25367 ----
  9822bc569ac4b3e547f9525b329c3da4  libstdc++-v3/testsuite/27_io/basic_istream/3.cc
  63a3385bbcb1cb64c6c35cb41b123503  libstdc++-v3/testsuite/27_io/basic_istream/4.cc
  4fd40f0af08c5a794786acea013e4bb1  libstdc++-v3/testsuite/27_io/basic_istream/exceptions/char/9561.cc
+ 259761cc0f1bb5663adf5ac9330beba8  libstdc++-v3/testsuite/27_io/basic_istream/exceptions/wchar_t/9561.cc
  baf5979746641916a5bfc839f19b342c  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/01.cc
! aea00ac5f01073ec2bf5e1daba271327  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/02.cc
! d2943bb193e6e0cbce78e82ebfc5d315  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/03.cc
! cb1b94b8bababa6a95683b234baac16a  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/06.cc
! 1114c64c05db87d73da516f481857e9b  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/07.cc
! 2281538c5d863e5d23972d082675603a  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/08.cc
! c11227dbf3dfa2e3cf100f41f2833bb3  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/09.cc
! fa1787fe0cf73b90ddd6d69c8b0918c2  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/10.cc
! 20f34846da1fd281cfd5cb432a93bb02  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/11.cc
! 6ea259b8887a7c69a714818f51705516  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/12.cc
! 3047d50b13b94dbdd8857a1499b7ec91  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/13.cc
  8dcafb8a3b0eeadabc52e92a0631b1d3  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/9555-ia.cc
! 24e602e7ee10c82c5fbe31b9a1b9e10e  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/exceptions_badbit_throw.cc
  5041874a8e6dbe7b6e7b9c0e3ee4286f  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/exceptions_failbit.cc
! 613fb56bcf3e59ac5f9c2b8c82422c6e  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/exceptions_failbit_throw.cc
  fa4af29c6deaab0d60194a79b6cd1b3d  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/pod/3983-1.cc
! f039b05b9dceb8391b4fc26d3eb92089  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/01.cc
! f7258dd2301faa1f7a75f7c698abf3a9  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/02.cc
! 0b4ec00006eee7237149e44d729aa3de  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/03.cc
! 8eb25df131f86593db26cbb77dd81e31  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/06.cc
! ea3f0f77fb99b67c8f0e276ab7c18653  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/07.cc
! 48c5237a0fae47026627ae5cdcd8fbac  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/08.cc
! 7b70e44bdca194a53d821c004671ac12  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/09.cc
! 4e2dee71d89b23344e0ca6b0b1929557  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/10.cc
! 5df372fc4b049d5f1faa9fc6f7d4980e  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/11.cc
! 4a965b4071dce93ffe3b67526fb73cbb  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/12.cc
! 8f1ee5185747a9c31b0ac5fe71fe6e20  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/13.cc
! dd14bfc4f064ed313da0da19024c8b8a  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/9555-ia.cc
! ddb47360a0a3d3b883aacfcfb3d1207b  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/exceptions_badbit_throw.cc
! 1a13faf2cca7093507962ab345db6dd8  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/exceptions_failbit.cc
! 29f9aacdd7b26bb9934e0ff9590a7234  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/exceptions_failbit_throw.cc
! 93c1c8dd1174a3a564b57033796fe8ac  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/1.cc
  6789217d45a16053b074ca0ac91a4dac  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/11095-i.cc
  59cf3b6636366f01ee73344be9dade1f  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/2.cc
  657df5ac0444d7ca66bf4e6f355ae4b7  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/3.cc
  dfad7b6e027108fc3f4e3141b332481e  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/9555-ic.cc
  b1c6461219625773384ce04f98de41bf  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/9826.cc
  bafd6111e51ca3881b07ab5d55797dd6  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/pod/3983-2.cc
+ 62e7cacabe5f6499d6156a4db6a66cce  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/1.cc
+ 16d99d544d78a1c1e08fc1fc3c3496a4  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/11095-i.cc
+ 17dd3c4450992065f456bb89add7cdc0  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/2.cc
+ f63d729394dd5e1675e87332be7c2b22  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/3.cc
+ 71e7d70e6c1f9a36a90dc7c0ca7ad170  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/9555-ic.cc
  0b4ecab178f1cd305bbce57dd6c2c519  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/1.cc
! 43b02f66cc9ef2126ce53d1883ec205a  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/2.cc
  f66031df573285a7c81b5a44a83d9201  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/3.cc
  e8fe4a68b5ecdc63c96a61fe42708cca  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/9318-in.cc
  1df860d4794d67769cb5820bfdf41ed2  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/9424-in.cc
*************** ecddd64c757b0a3497921cf3ec8dc6a7  libstd
*** 21310,21508 ****
  bdbcb8dac02c9fa730cf0077b8e67298  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/exceptions_failbit_throw.cc
  753d98cb6aa08fe384f2bf8696868f43  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/exceptions_null.cc
  e46fe4d54775a1cdbbd8a9f372d8fc3b  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/pod/3983-3.cc
  a16473cf047ece38e3b6205b2f44227d  libstdc++-v3/testsuite/27_io/basic_istream/get/char/1.cc
  42edd407d6448489f699dd80d688428c  libstdc++-v3/testsuite/27_io/basic_istream/get/char/2.cc
  dc2c5f1a02e174e3954fee4b400fab8d  libstdc++-v3/testsuite/27_io/basic_istream/getline/char/1.cc
  8ca379a7053560d60de927ff4ffa9de6  libstdc++-v3/testsuite/27_io/basic_istream/getline/char/2.cc
  7f1852546f297fe8d51411dd6c628d39  libstdc++-v3/testsuite/27_io/basic_istream/getline/char/3.cc
  627f1067b082a448d8e03e610e33ca39  libstdc++-v3/testsuite/27_io/basic_istream/getline/char/4.cc
  8228875a16ad4e0126b21205b6309712  libstdc++-v3/testsuite/27_io/basic_istream/getline/char/5.cc
  6beb76869612cffe0afb2c27095ef7c8  libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/1.cc
  901ed69e8bb910502cce38826f578eef  libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/2.cc
  91c1c9d0a70a31ebc8d1f5f82d2b3c1e  libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/6360.cc
  3bacf5f85848e66d6e0c8789d072e3e4  libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/7220.cc
  070cf45375f2d0afbd98262e07ef2a46  libstdc++-v3/testsuite/27_io/basic_istream/peek/char/1.cc
  565ffd1382b08f7670e9b20dedc39a0b  libstdc++-v3/testsuite/27_io/basic_istream/peek/char/12296.cc
! c2bf43e89c669c2a3eb96d63ee838553  libstdc++-v3/testsuite/27_io/basic_istream/peek/char/6414.cc
! 4975b85975b0eb52a95ec94dcf20116d  libstdc++-v3/testsuite/27_io/basic_istream/putback/char/1.cc
! 69674e5371ed0ed5aaefd035fb7e0b8a  libstdc++-v3/testsuite/27_io/basic_istream/read/char/1.cc
! ebfdd9d18c672f8233a07f156fee526f  libstdc++-v3/testsuite/27_io/basic_istream/read/char/2.cc
  313d37349db8f26f3bce65fe3128bc0c  libstdc++-v3/testsuite/27_io/basic_istream/read/char/3.cc
  4be4b4d44de8d2299561dfcf611e9e62  libstdc++-v3/testsuite/27_io/basic_istream/readsome/char/6746-1.cc
! 55ff53065fd371cd09c5ac236671b5d9  libstdc++-v3/testsuite/27_io/basic_istream/readsome/char/6746-2.cc
  56cb55634eb808ee3608ccf91fae0191  libstdc++-v3/testsuite/27_io/basic_istream/readsome/char/8258.cc
  b6c5d9755b5673d24e4243b8473656a5  libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/2.cc
  3c83f1ae94ca42530fbd321adbebb76d  libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/8348-1.cc
  540a69e96771e47f84ddda92e7e760bf  libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/8348-2.cc
  f8a9951d82cac87cc94c7f06d2148f5f  libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/exceptions_badbit_throw.cc
  cfcfafe48770b4eac24f8b7bb5bc6090  libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/fstream.cc
  80d876dcfec4ac5be6390822c8fd9973  libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/sstream.cc
  1b0e3063b6b89cd7dfe3d81e01e9730b  libstdc++-v3/testsuite/27_io/basic_istream/sentry/char/1.cc
  bf586ac5c12a9837a2dc23206155b8d3  libstdc++-v3/testsuite/27_io/basic_istream/sentry/char/12297.cc
  382ce420b63085ed5eae837ad48be651  libstdc++-v3/testsuite/27_io/basic_istream/sentry/char/2.cc
  678a5ba535552a7899af1a1826ec67e8  libstdc++-v3/testsuite/27_io/basic_istream/sentry/char/3.cc
  cd252784ee982c871424e111f062930e  libstdc++-v3/testsuite/27_io/basic_istream/sentry/pod/1.cc
  ca5e17731298dfbefa5e0bfd10994823  libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/1.cc
  889a695c0847c3c4d1a6571cf9bc7037  libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/2.cc
  f4a4b66c8ae36ce88f0295c2c9af0803  libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/8348.cc
  61cc532fe3d4a83cbcd8f3f88ca51b57  libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/exceptions_badbit_throw.cc
  bcb4b06324787cadb8ee2d45c02687e3  libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/fstream.cc
  8bb34c851a402df4e8eca76254e5cd77  libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/sstream.cc
  2c7d9b94c84000aaf2d62d6c80bb1c63  libstdc++-v3/testsuite/27_io/basic_istream/ws/char/1.cc
  dceab846f736b9d716b8e556a9a17537  libstdc++-v3/testsuite/27_io/basic_istringstream/1.cc
  2f1a1e4cbaabb01a7a979754a5adcaab  libstdc++-v3/testsuite/27_io/basic_istringstream/2.cc
  63b9470d0931a7725d6650b3ce9094a2  libstdc++-v3/testsuite/27_io/basic_istringstream/3.cc
  be5acfac917441a33d22aeb3917690c7  libstdc++-v3/testsuite/27_io/basic_istringstream/4.cc
! e70143369558efc9003e523e2333169f  libstdc++-v3/testsuite/27_io/basic_istringstream/rdbuf/char/2832.cc
! 7b7f49f278ae654fb99c422da75cfa5f  libstdc++-v3/testsuite/27_io/basic_istringstream/str/char/1.cc
  dbe04cd193e2753487c2fa0cde80e340  libstdc++-v3/testsuite/27_io/basic_ofstream/1.cc
  dc7ef097ece236d2f6faf48c7605a060  libstdc++-v3/testsuite/27_io/basic_ofstream/2.cc
  178d4233a2a44bdf27605330ff825ae5  libstdc++-v3/testsuite/27_io/basic_ofstream/3.cc
  59d533eea32fec2b24351c8b712094df  libstdc++-v3/testsuite/27_io/basic_ofstream/4.cc
  76c299b1bd8ce3028b1bea3404370659  libstdc++-v3/testsuite/27_io/basic_ofstream/cons/char/2.cc
! 9189f0fa267a63e76ffa8f23097e3fae  libstdc++-v3/testsuite/27_io/basic_ofstream/open/char/1.cc
  b2ea8b5862054ef34658075cc7e58b06  libstdc++-v3/testsuite/27_io/basic_ofstream/rdbuf/char/2832.cc
  f7af99a1a658e832c5a7f7a99793a145  libstdc++-v3/testsuite/27_io/basic_ostream/1.cc
  e61bf94bef5e653da2a9f5a97272697b  libstdc++-v3/testsuite/27_io/basic_ostream/2.cc
  0bae269c5c3a9401646b77ab502e0702  libstdc++-v3/testsuite/27_io/basic_ostream/3.cc
  e79af90405764f7ccba49285ada6a94c  libstdc++-v3/testsuite/27_io/basic_ostream/4.cc
  ac613778d2e3d09e0449c11c0fb3c286  libstdc++-v3/testsuite/27_io/basic_ostream/cons/char/9827.cc
! 2c64a54235bda639996f1083eb3e0998  libstdc++-v3/testsuite/27_io/basic_ostream/endl/char/1.cc
! 07bfd8a1e40334ff62f67863589b18ff  libstdc++-v3/testsuite/27_io/basic_ostream/ends/char/1.cc
  a911d6ade7f1d669281be1606df8bbb6  libstdc++-v3/testsuite/27_io/basic_ostream/ends/char/2.cc
! f6836bd63e217c394f2416d1f8d7425a  libstdc++-v3/testsuite/27_io/basic_ostream/exceptions/char/9561.cc
! eff7bb4b5b6e52774ee6bfcb86e10829  libstdc++-v3/testsuite/27_io/basic_ostream/flush/char/1.cc
! 6ed363911a3c76194e13deac0423113a  libstdc++-v3/testsuite/27_io/basic_ostream/flush/char/2.cc
! 95ec322f3380dfb2858dd8b09b9c9560  libstdc++-v3/testsuite/27_io/basic_ostream/flush/char/exceptions_badbit_throw.cc
  edf8f87d52508fa1caea203ed6608f6a  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/1.cc
! 70577766f8b84fd154788a4c8e6fb970  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/2.cc
! 170477599572d4a4950a52263a0edf0c  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/3.cc
! 1fe27f5b9ec1b8643fca78d49f87979a  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/4.cc
! d9b71e099cbf3230ef1e7acb99972a09  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/4402.cc
! bccb8d4a2fbd57b8e6b8eee59f2152dc  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/5.cc
! 6fccc343f9addfe81c9f8372fbdb44f2  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/6.cc
  e0c0362254947202c6f0ac49749561eb  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/9555-oa.cc
! 8d32bc1ab90a741d6781c2a81a5bc698  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/exceptions_badbit_throw.cc
! d3c84cdc43bf7eb20fce3d1c313a704c  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/exceptions_failbit_throw.cc
  ac53ce7a29699c592981c80dc7b48af8  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/1.cc
  575119c004c45307720885e36d8ee267  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/1.cc
  3a330f8f62c5e5c209cbeb28a3c04208  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/11095-oa.cc
  907c95ba3a5758b374174a5d002500cf  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/11095-ob.cc
  e063293639db1d0c1df5dbd6e7d11733  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/11095-oc.cc
  20734207a1e81da4653918b38d5dda56  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/2.cc
  5336affce91081120ee99f2e6b4e152e  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/3.cc
! cd4a376ee2cb66187f7303141a9152a2  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/4.cc
  7796a6ff0bacd8ac80848b080266457a  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/5.cc
  d7eff045176ade2094d6f4b29dc66c22  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/6.cc
  6e294c3cba3793bca564f25127db6c56  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/8.cc
  2ce793ac7e2255e5ffa2547e58e6ce98  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/9555-oc.cc
  0f53fd2c98db789650ab033ec9d01803  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/11095-od.cc
  9427e9cf969f0d08f14a1a13b87485a8  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/11095-oe.cc
  94d52c0d98f01361a36cec703084be1e  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/11095-of.cc
  b652eeb8f92df32926c5475647fc74c7  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/7.cc
  0dc40d09690ec65fe9030b17c0840eab  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/8.cc
  7eef5f2c3fe9fe66fafee99e29caa8ba  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/1.cc
! 66226b7b43afb30f3d58f526c721a4d0  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/2.cc
  37e760f9ba50f155f58b38cf225e08f1  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/3.cc
  53c04b87aa40533f0f608727b199159c  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/4.cc
! 26875c59d2800b6bb586dc35f813818f  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/5.cc
  b82f977e6079989656def360285fd239  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/9318-out.cc
  7652cd85ce5d07ac1621cbd414769d14  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/9424-out.cc
  3c66bba715d7f6197ff03fc0ba34499b  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/9555-oo.cc
! 58e7730ade2ff240b205f2543531d18b  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/error_failbit.cc
! 75f774bbdec1647f874a2f154df89d8f  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/exceptions_badbit_throw.cc
! bcb8863e04add1a6edd749488ce0597a  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/exceptions_failbit_throw.cc
! ce82f73f2037c14c6bc9a15c1c8b6fd2  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/exceptions_null.cc
! 478506db2c217f9359fe10a2543c8944  libstdc++-v3/testsuite/27_io/basic_ostream/put/char/1.cc
  7565362f74b5a18b535bd7f330d8387b  libstdc++-v3/testsuite/27_io/basic_ostream/seekp/char/2346-fstream.cc
  68cbba08ada2a7f1978efbea4d976d68  libstdc++-v3/testsuite/27_io/basic_ostream/seekp/char/2346-sstream.cc
! 4f05319c44e224aca97673575522fd88  libstdc++-v3/testsuite/27_io/basic_ostream/seekp/char/exceptions_badbit_throw.cc
  bf26a28dc7fed3f348d9ae68c97709e8  libstdc++-v3/testsuite/27_io/basic_ostream/sentry/char/1.cc
! 0e81efbbd75516d3374b745b8966f158  libstdc++-v3/testsuite/27_io/basic_ostream/sentry/char/2.cc
  e8715e5de804ea4725d390bf5734ea12  libstdc++-v3/testsuite/27_io/basic_ostream/sentry/pod/1.cc
  7e9d0834f8b8c8f17bd56091b95c7bab  libstdc++-v3/testsuite/27_io/basic_ostream/tellp/char/1.cc
  18b5dd467516097df2b050087baa7650  libstdc++-v3/testsuite/27_io/basic_ostream/tellp/char/2.cc
  66d856416c5329c400756ea7c303904d  libstdc++-v3/testsuite/27_io/basic_ostream/tellp/char/exceptions_badbit_throw.cc
! 5d644c766bf868b4ea983c740b8018ff  libstdc++-v3/testsuite/27_io/basic_ostream/write/char/1.cc
  c08ef6c3a3238b24baf86ff9dceab845  libstdc++-v3/testsuite/27_io/basic_ostringstream/1.cc
  5a987309519bddc5d78a3672ff3e41be  libstdc++-v3/testsuite/27_io/basic_ostringstream/2.cc
  f482eb109c2c742eb7e53cc7e7185360  libstdc++-v3/testsuite/27_io/basic_ostringstream/3.cc
  4b3093a531ae84a045e668c8aaf06026  libstdc++-v3/testsuite/27_io/basic_ostringstream/4.cc
  b8665ba8d472baf980b87bcfa712380a  libstdc++-v3/testsuite/27_io/basic_ostringstream/cons/char/3.cc
  29c9697594913a000bd8757a0e146189  libstdc++-v3/testsuite/27_io/basic_ostringstream/rdbuf/char/2832.cc
  0067f776c69bec3360a7a5572d7b438f  libstdc++-v3/testsuite/27_io/basic_ostringstream/str/char/1.cc
  92b96be0e0d0f9009bbd3d8d9234e58d  libstdc++-v3/testsuite/27_io/basic_ostringstream/str/char/2.cc
  7f929649a3909bda1e23491614ad5b81  libstdc++-v3/testsuite/27_io/basic_streambuf/1.cc
  63d4de89399cdc02ea0a5c00cc9b72ac  libstdc++-v3/testsuite/27_io/basic_streambuf/2.cc
  0d06ba137a8977496985561905115094  libstdc++-v3/testsuite/27_io/basic_streambuf/3.cc
  b7145f894e070c9611d3e745e8b12659  libstdc++-v3/testsuite/27_io/basic_streambuf/cons/char/1.cc
! 4e83a6d8d03d4ca5bfc9adc008b3467c  libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/char/1.cc
  303964ca52c6bbe7d1c2a13309205771  libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/char/13007-1.cc
  e501ed1cd0d4e208fafd2bcac83816b3  libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/char/13007-2.cc
! b7d2bea425b05132730332fef784a498  libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/char/9322.cc
  729756db537c5b569c86cea8ccd10362  libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/wchar_t/13007-1.cc
  aa2cb034b478647c56ea6b5bc374adb5  libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/wchar_t/13007-2.cc
  3b8205f386ae5319f068834f05f721b7  libstdc++-v3/testsuite/27_io/basic_streambuf/in_avail/char/9701-3.cc
  4f9aa06982f1be0413d396d2719a7f50  libstdc++-v3/testsuite/27_io/basic_streambuf/overflow/char/1.cc
! a121cb4d9e2b9a04e69b64609c450782  libstdc++-v3/testsuite/27_io/basic_streambuf/overflow/char/2.cc
! 8c29ef33002ebefd5c56df92ec82c3d4  libstdc++-v3/testsuite/27_io/basic_streambuf/overflow/char/3599.cc
  75bef9c5c1beafb37d7885dececba398  libstdc++-v3/testsuite/27_io/basic_streambuf/sgetc/char/1.cc
  b5d99c7b62a2ca31707477d2c95d8420  libstdc++-v3/testsuite/27_io/basic_streambuf/sgetn/char/1.cc
  16d5a492cdfa470836ce935b169a634a  libstdc++-v3/testsuite/27_io/basic_streambuf/sputbackc/char/9538.cc
  3fbf35c11bc430d5d14889ead547623b  libstdc++-v3/testsuite/27_io/basic_streambuf/sputc/char/1057.cc
  9980c4fe7d6541fca6efdf9d0d25ccf3  libstdc++-v3/testsuite/27_io/basic_streambuf/sputn/char/1.cc
! 444bb7bd3ead2d464af478045619f2ab  libstdc++-v3/testsuite/27_io/basic_streambuf/sputn/char/1057.cc
! a5a565a4a4d27a6346e3804f1f1ae81c  libstdc++-v3/testsuite/27_io/basic_streambuf/sync/char/1057.cc
  97c7d7cfc23f46c76ec2083653495998  libstdc++-v3/testsuite/27_io/basic_stringbuf/1.cc
  8ea8143b1f11212582846b7e7ab92df2  libstdc++-v3/testsuite/27_io/basic_stringbuf/2.cc
  4a9cee3b8bd808ac97a506f60aad4bd9  libstdc++-v3/testsuite/27_io/basic_stringbuf/3.cc
  b3e8ec38045575f1d13a5765e9855a9f  libstdc++-v3/testsuite/27_io/basic_stringbuf/4.cc
  e12f2703c53b613daaf2e22b4a1af529  libstdc++-v3/testsuite/27_io/basic_stringbuf/5.cc
  a3e35b945fa3dec3b35dfee4c5067c5c  libstdc++-v3/testsuite/27_io/basic_stringbuf/cons/char/1.cc
! 1186f63499c3309fc01dbbaceb24a6d7  libstdc++-v3/testsuite/27_io/basic_stringbuf/imbue/char/1.cc
  bd1fe9c5c08433c0b37ddcd5fdb549d0  libstdc++-v3/testsuite/27_io/basic_stringbuf/imbue/char/9322.cc
! 22d5b22df3b69735a58a099c8366957a  libstdc++-v3/testsuite/27_io/basic_stringbuf/in_avail/char/1.cc
  fcb1c47ab8a26dc2e4be8a893283afe1  libstdc++-v3/testsuite/27_io/basic_stringbuf/overflow/char/1.cc
  e28f7c3ba34fadcccf173353514087e3  libstdc++-v3/testsuite/27_io/basic_stringbuf/overflow/char/2.cc
  662aafc620f6b3a480d6a39050bca26c  libstdc++-v3/testsuite/27_io/basic_stringbuf/overflow/char/3599.cc
  9392d35bbc9fd8afc2754b04d5dcac66  libstdc++-v3/testsuite/27_io/basic_stringbuf/overflow/char/9988.cc
! 25614391f90f33a5644d8d640f9e3109  libstdc++-v3/testsuite/27_io/basic_stringbuf/sbumpc/char/1.cc
  bb312a10966ccc54e38bd035cd57b5bf  libstdc++-v3/testsuite/27_io/basic_stringbuf/sbumpc/char/9825.cc
! dc0f134eafe76aab2513d5a1f98212a6  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekoff/char/1.cc
  e0739e619559fff1bf50ca92f96d92cf  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekoff/char/10975.cc
  93989c2d9c8ab44e8f179f4dfb0dd382  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekoff/char/2.cc
! 2912fb0c354c0110bab116a72c5aceb5  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekpos/char/1.cc
  968815bd9c6652404b199d4ae60d3032  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekpos/char/2.cc
  9cbf592171ab8d43d00f078d4f4b530b  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekpos/char/3.cc
! eb660e9109059b44fa0a3b15ea0a6489  libstdc++-v3/testsuite/27_io/basic_stringbuf/setbuf/char/1.cc
  51b5c7694d48ad4addaede102464824c  libstdc++-v3/testsuite/27_io/basic_stringbuf/setbuf/char/2.cc
  4b97abd680d1d3021c7b06a37aaa515f  libstdc++-v3/testsuite/27_io/basic_stringbuf/setbuf/char/3.cc
! 3353ad436dd6b40d2dd3328adc68ceb6  libstdc++-v3/testsuite/27_io/basic_stringbuf/sgetc/char/1.cc
! 7e57a38a3cd889de53ab9fac930e5b0a  libstdc++-v3/testsuite/27_io/basic_stringbuf/sgetn/char/1.cc
! b77b0bb90646b743d6aaf85660d53d9e  libstdc++-v3/testsuite/27_io/basic_stringbuf/snextc/char/1.cc
! 37e9a1937e94f3e4d7c7d33801ebec69  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputbackc/char/1.cc
  96ea829b32d223a9c6b9ea2c8f494c57  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputbackc/char/9425.cc
! d1671eabef7f8a667609d13c4b3dfa28  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputc/char/1.cc
  b6afe97bbf2b5373b3b6815fbebf75ce  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputc/char/1057.cc
  ef6f72d9109e6b28a40d7a7d9dfcb7ce  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputc/char/9404-1.cc
! 0732c153dc12c56c49b9b0e9267b232f  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputn/char/1.cc
  d38cc533c9fb5a8c5643f2c477427e0e  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputn/char/1057.cc
  b10ef69a67b7a054fe89233c000785cf  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputn/char/9404-2.cc
  a0403cfa8971e74f5f23ef3ced11b18a  libstdc++-v3/testsuite/27_io/basic_stringbuf/str/char/1.cc
  f80f5def4cd7cd3c8a2405d3ddce7540  libstdc++-v3/testsuite/27_io/basic_stringbuf/str/char/2.cc
  c299ee1c8a4f80927305cd732e71cb43  libstdc++-v3/testsuite/27_io/basic_stringbuf/str/char/3.cc
  b503a2d2c73f084b77e637527b45122c  libstdc++-v3/testsuite/27_io/basic_stringbuf/str/char/3955.cc
! c0d96eff39888579350f2000ed3d10eb  libstdc++-v3/testsuite/27_io/basic_stringbuf/sungetc/char/1.cc
  917a36c3c2bfc9758bd5ec1e7639ee02  libstdc++-v3/testsuite/27_io/basic_stringbuf/sync/char/1057.cc
  1b4bde78807d90a2d0e7804fa2f7c002  libstdc++-v3/testsuite/27_io/basic_stringstream/1.cc
  3d962d85661cddcd5a0af609dec75b75  libstdc++-v3/testsuite/27_io/basic_stringstream/2.cc
  21546fb998be51b985218ade694d86fa  libstdc++-v3/testsuite/27_io/basic_stringstream/3.cc
  bca3ef0b4441c976a93104205854a89f  libstdc++-v3/testsuite/27_io/basic_stringstream/4.cc
! 2ca7d41730b697c5bb590cfef4523532  libstdc++-v3/testsuite/27_io/basic_stringstream/rdbuf/char/2832.cc
! 7947bdbe880dd209fa86e518ac7142e1  libstdc++-v3/testsuite/27_io/basic_stringstream/str/char/1.cc
  2bd61aa15da6526ac80ae6861fd506e6  libstdc++-v3/testsuite/27_io/basic_stringstream/str/char/2.cc
! 7162c5a14772082ee0ddcae3aa291436  libstdc++-v3/testsuite/27_io/basic_stringstream/str/char/3.cc
  f427e189a2ad054fb6a3b80b7fa32e2b  libstdc++-v3/testsuite/27_io/basic_stringstream/str/char/4.cc
  79931fb01070298e1ae6e664f43434bb  libstdc++-v3/testsuite/27_io/fpos/1.cc
  d781e7348701865dac2269dd99991cb0  libstdc++-v3/testsuite/27_io/fpos/11450.cc
  0e96c942accaa9ac4cffb702a6f38aec  libstdc++-v3/testsuite/27_io/fpos/14252.cc
--- 25371,25738 ----
  bdbcb8dac02c9fa730cf0077b8e67298  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/exceptions_failbit_throw.cc
  753d98cb6aa08fe384f2bf8696868f43  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/exceptions_null.cc
  e46fe4d54775a1cdbbd8a9f372d8fc3b  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/pod/3983-3.cc
+ 1db38f38a772cbcda4f36ca7cb736437  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/1.cc
+ d5ca8b3a872ff09a7491ca81cb5c2bca  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/2.cc
+ 07a767696136daf0ac365fd5eff55e0e  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/3.cc
+ 9ca0eb2b72def1acc5f091cfa360da2c  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/9318-in.cc
+ 5881fecc3bd9a6e21b4a447d940e88d0  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/9424-in.cc
+ 738516213afc3895532a9d602b42be79  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/9555-io.cc
+ c53acdddddb5ed1f90ddd950342cfb13  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/error_failbit.cc
+ 86571658f5f08a6e17b67aeda8e08d36  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/exceptions_badbit_throw.cc
+ 5c4a3b820819d3cdca3e4af10bd582eb  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/exceptions_failbit_throw.cc
+ 099d75d7afb445265970b86e583188f8  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/exceptions_null.cc
  a16473cf047ece38e3b6205b2f44227d  libstdc++-v3/testsuite/27_io/basic_istream/get/char/1.cc
  42edd407d6448489f699dd80d688428c  libstdc++-v3/testsuite/27_io/basic_istream/get/char/2.cc
+ 30e673eba7e28d8da2e747b87c8f1bb4  libstdc++-v3/testsuite/27_io/basic_istream/get/char/3.cc
+ 15c97eda5facfde4d8e07ba78561482c  libstdc++-v3/testsuite/27_io/basic_istream/get/wchar_t/1.cc
+ 18fbc46bea796fcd55e8321dc98e9b51  libstdc++-v3/testsuite/27_io/basic_istream/get/wchar_t/2.cc
+ 482d3e981e381ae25993e8100464cf41  libstdc++-v3/testsuite/27_io/basic_istream/get/wchar_t/3.cc
  dc2c5f1a02e174e3954fee4b400fab8d  libstdc++-v3/testsuite/27_io/basic_istream/getline/char/1.cc
  8ca379a7053560d60de927ff4ffa9de6  libstdc++-v3/testsuite/27_io/basic_istream/getline/char/2.cc
  7f1852546f297fe8d51411dd6c628d39  libstdc++-v3/testsuite/27_io/basic_istream/getline/char/3.cc
  627f1067b082a448d8e03e610e33ca39  libstdc++-v3/testsuite/27_io/basic_istream/getline/char/4.cc
  8228875a16ad4e0126b21205b6309712  libstdc++-v3/testsuite/27_io/basic_istream/getline/char/5.cc
+ 78a05ca6d27ad7dd4919efd23630f5e4  libstdc++-v3/testsuite/27_io/basic_istream/getline/char/6.cc
+ d2d98d3939a56a1c24d63e04f04e07cd  libstdc++-v3/testsuite/27_io/basic_istream/getline/wchar_t/1.cc
+ c975f60b54db9e7998341305cec31383  libstdc++-v3/testsuite/27_io/basic_istream/getline/wchar_t/2.cc
+ cf420f4c2a567857772bed3facce6554  libstdc++-v3/testsuite/27_io/basic_istream/getline/wchar_t/3.cc
+ 84a387f7deb3a738c3e4d5ee8d79ba82  libstdc++-v3/testsuite/27_io/basic_istream/getline/wchar_t/4.cc
+ 6b3c09f4a8885c00fae9315720860f8d  libstdc++-v3/testsuite/27_io/basic_istream/getline/wchar_t/5.cc
+ 7a7abe0651337e4adee39e33d416bcc9  libstdc++-v3/testsuite/27_io/basic_istream/getline/wchar_t/6.cc
  6beb76869612cffe0afb2c27095ef7c8  libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/1.cc
  901ed69e8bb910502cce38826f578eef  libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/2.cc
+ ac737475884a6852da0b2c16c29021d1  libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/3.cc
  91c1c9d0a70a31ebc8d1f5f82d2b3c1e  libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/6360.cc
  3bacf5f85848e66d6e0c8789d072e3e4  libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/7220.cc
+ a78b1109e425cd095960099ff64a84a7  libstdc++-v3/testsuite/27_io/basic_istream/ignore/wchar_t/1.cc
+ 3582bca01d06bfc2abfa8d0753b64d07  libstdc++-v3/testsuite/27_io/basic_istream/ignore/wchar_t/2.cc
+ 96a2f12c5ff1ea15f67de854769be28a  libstdc++-v3/testsuite/27_io/basic_istream/ignore/wchar_t/3.cc
+ 53521a093cbeaeebb4bb015dbb180d3e  libstdc++-v3/testsuite/27_io/basic_istream/ignore/wchar_t/6360.cc
+ e7d7dc457916b3161857fb42f97d04fe  libstdc++-v3/testsuite/27_io/basic_istream/ignore/wchar_t/7220.cc
  070cf45375f2d0afbd98262e07ef2a46  libstdc++-v3/testsuite/27_io/basic_istream/peek/char/1.cc
  565ffd1382b08f7670e9b20dedc39a0b  libstdc++-v3/testsuite/27_io/basic_istream/peek/char/12296.cc
! 96e60fd5413ab79945004d5462515e6d  libstdc++-v3/testsuite/27_io/basic_istream/peek/char/6414.cc
! f67b3c47858b9cac4c43417c4491213b  libstdc++-v3/testsuite/27_io/basic_istream/peek/wchar_t/1.cc
! 548667bef748bd6328e6af14110f44eb  libstdc++-v3/testsuite/27_io/basic_istream/peek/wchar_t/12296.cc
! cd75e5d193f9907d1339566eec8d47f9  libstdc++-v3/testsuite/27_io/basic_istream/peek/wchar_t/6414.cc
! 43186a145cb16f8acdc0bc72663b1b1e  libstdc++-v3/testsuite/27_io/basic_istream/putback/char/1.cc
! edfc3f005a41d1c89e7777a7a4f8be47  libstdc++-v3/testsuite/27_io/basic_istream/putback/wchar_t/1.cc
! 72591faf8d1eb8ae977294997a418775  libstdc++-v3/testsuite/27_io/basic_istream/read/char/1.cc
! fe1682b54070a55c4508f22e0862f8b1  libstdc++-v3/testsuite/27_io/basic_istream/read/char/2.cc
  313d37349db8f26f3bce65fe3128bc0c  libstdc++-v3/testsuite/27_io/basic_istream/read/char/3.cc
+ 1fb4a92cf28e5c4c9d4d5caa703393de  libstdc++-v3/testsuite/27_io/basic_istream/read/wchar_t/1.cc
+ f088ee3fdb2a63cf03097daf9d455af2  libstdc++-v3/testsuite/27_io/basic_istream/read/wchar_t/2.cc
+ 358a9d4b737c6b044a89ce40c2a5764d  libstdc++-v3/testsuite/27_io/basic_istream/read/wchar_t/3.cc
  4be4b4d44de8d2299561dfcf611e9e62  libstdc++-v3/testsuite/27_io/basic_istream/readsome/char/6746-1.cc
! 973b53a59a1f8ae2c2f6b207a0868be1  libstdc++-v3/testsuite/27_io/basic_istream/readsome/char/6746-2.cc
  56cb55634eb808ee3608ccf91fae0191  libstdc++-v3/testsuite/27_io/basic_istream/readsome/char/8258.cc
+ 4e88ac8591690f6683883bcd75015440  libstdc++-v3/testsuite/27_io/basic_istream/readsome/wchar_t/6746-1.cc
+ 247968f7ac9026da4d3b17e21901e5be  libstdc++-v3/testsuite/27_io/basic_istream/readsome/wchar_t/6746-2.cc
+ 3d599ee718bb5f2e25b2222bed4c0081  libstdc++-v3/testsuite/27_io/basic_istream/readsome/wchar_t/8258.cc
  b6c5d9755b5673d24e4243b8473656a5  libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/2.cc
  3c83f1ae94ca42530fbd321adbebb76d  libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/8348-1.cc
  540a69e96771e47f84ddda92e7e760bf  libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/8348-2.cc
  f8a9951d82cac87cc94c7f06d2148f5f  libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/exceptions_badbit_throw.cc
  cfcfafe48770b4eac24f8b7bb5bc6090  libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/fstream.cc
  80d876dcfec4ac5be6390822c8fd9973  libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/sstream.cc
+ c35a291ddc5f4ce1bee6ac6c6cbeaf1d  libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/2.cc
+ 72119f3a7b41e5b1d7ace08a15af2f8e  libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/8348-1.cc
+ 8d588499a1048d085fbcfa7fb6cad24b  libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/8348-2.cc
+ 901353487976534e40d9de391cde85b3  libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/exceptions_badbit_throw.cc
+ ea996bfde21c46b4d76e8f1174e98ba1  libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/fstream.cc
+ fd75bb6546e04f32031512a16d20ef5e  libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/sstream.cc
  1b0e3063b6b89cd7dfe3d81e01e9730b  libstdc++-v3/testsuite/27_io/basic_istream/sentry/char/1.cc
  bf586ac5c12a9837a2dc23206155b8d3  libstdc++-v3/testsuite/27_io/basic_istream/sentry/char/12297.cc
  382ce420b63085ed5eae837ad48be651  libstdc++-v3/testsuite/27_io/basic_istream/sentry/char/2.cc
  678a5ba535552a7899af1a1826ec67e8  libstdc++-v3/testsuite/27_io/basic_istream/sentry/char/3.cc
  cd252784ee982c871424e111f062930e  libstdc++-v3/testsuite/27_io/basic_istream/sentry/pod/1.cc
+ bd9207c3664a3caa79c8715e407b5550  libstdc++-v3/testsuite/27_io/basic_istream/sentry/wchar_t/1.cc
+ 341713fbc639d3e918f613d5f9fdaa2d  libstdc++-v3/testsuite/27_io/basic_istream/sentry/wchar_t/12297.cc
+ 4c9e20b7de961b321324d1925d9f2213  libstdc++-v3/testsuite/27_io/basic_istream/sentry/wchar_t/2.cc
+ e81a20a3856aeb4a82589e5a42797193  libstdc++-v3/testsuite/27_io/basic_istream/sentry/wchar_t/3.cc
  ca5e17731298dfbefa5e0bfd10994823  libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/1.cc
  889a695c0847c3c4d1a6571cf9bc7037  libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/2.cc
  f4a4b66c8ae36ce88f0295c2c9af0803  libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/8348.cc
  61cc532fe3d4a83cbcd8f3f88ca51b57  libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/exceptions_badbit_throw.cc
  bcb4b06324787cadb8ee2d45c02687e3  libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/fstream.cc
  8bb34c851a402df4e8eca76254e5cd77  libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/sstream.cc
+ 00084f44487d33b2f751e23445c4b52b  libstdc++-v3/testsuite/27_io/basic_istream/tellg/wchar_t/1.cc
+ cf575a4532f3b3059d19421262e71c9f  libstdc++-v3/testsuite/27_io/basic_istream/tellg/wchar_t/2.cc
+ 5ab64776020f39cf2867eea71465ac40  libstdc++-v3/testsuite/27_io/basic_istream/tellg/wchar_t/8348.cc
+ 956604370ccdc27099bb61085a395cb2  libstdc++-v3/testsuite/27_io/basic_istream/tellg/wchar_t/exceptions_badbit_throw.cc
+ 942a932fed93101ce50ec351a2cdabc7  libstdc++-v3/testsuite/27_io/basic_istream/tellg/wchar_t/fstream.cc
+ f63c71b8c3806a23c68b067c6a7bc558  libstdc++-v3/testsuite/27_io/basic_istream/tellg/wchar_t/sstream.cc
  2c7d9b94c84000aaf2d62d6c80bb1c63  libstdc++-v3/testsuite/27_io/basic_istream/ws/char/1.cc
+ b3839f5dc7f7dcd5b567ad244fd34084  libstdc++-v3/testsuite/27_io/basic_istream/ws/wchar_t/1.cc
  dceab846f736b9d716b8e556a9a17537  libstdc++-v3/testsuite/27_io/basic_istringstream/1.cc
  2f1a1e4cbaabb01a7a979754a5adcaab  libstdc++-v3/testsuite/27_io/basic_istringstream/2.cc
  63b9470d0931a7725d6650b3ce9094a2  libstdc++-v3/testsuite/27_io/basic_istringstream/3.cc
  be5acfac917441a33d22aeb3917690c7  libstdc++-v3/testsuite/27_io/basic_istringstream/4.cc
! 887fc6f9889e219541b96975bcb76d7a  libstdc++-v3/testsuite/27_io/basic_istringstream/rdbuf/char/2832.cc
! 5b875824f8f526c9ab4867e9194b4e5c  libstdc++-v3/testsuite/27_io/basic_istringstream/rdbuf/wchar_t/2832.cc
! b087b612da960936eef43f3d71dc32c5  libstdc++-v3/testsuite/27_io/basic_istringstream/str/char/1.cc
! 5856d293ea26db2b3ec5fc41598cadaf  libstdc++-v3/testsuite/27_io/basic_istringstream/str/wchar_t/1.cc
  dbe04cd193e2753487c2fa0cde80e340  libstdc++-v3/testsuite/27_io/basic_ofstream/1.cc
  dc7ef097ece236d2f6faf48c7605a060  libstdc++-v3/testsuite/27_io/basic_ofstream/2.cc
  178d4233a2a44bdf27605330ff825ae5  libstdc++-v3/testsuite/27_io/basic_ofstream/3.cc
  59d533eea32fec2b24351c8b712094df  libstdc++-v3/testsuite/27_io/basic_ofstream/4.cc
  76c299b1bd8ce3028b1bea3404370659  libstdc++-v3/testsuite/27_io/basic_ofstream/cons/char/2.cc
! 1a2676bd893960c0ee545c0ebef11915  libstdc++-v3/testsuite/27_io/basic_ofstream/open/char/1.cc
  b2ea8b5862054ef34658075cc7e58b06  libstdc++-v3/testsuite/27_io/basic_ofstream/rdbuf/char/2832.cc
  f7af99a1a658e832c5a7f7a99793a145  libstdc++-v3/testsuite/27_io/basic_ostream/1.cc
  e61bf94bef5e653da2a9f5a97272697b  libstdc++-v3/testsuite/27_io/basic_ostream/2.cc
  0bae269c5c3a9401646b77ab502e0702  libstdc++-v3/testsuite/27_io/basic_ostream/3.cc
  e79af90405764f7ccba49285ada6a94c  libstdc++-v3/testsuite/27_io/basic_ostream/4.cc
  ac613778d2e3d09e0449c11c0fb3c286  libstdc++-v3/testsuite/27_io/basic_ostream/cons/char/9827.cc
! 9d3c5939ca9f6ac96f5a053bbaeb3b98  libstdc++-v3/testsuite/27_io/basic_ostream/cons/wchar_t/9827.cc
! 801b5b88d6f96125afffaab546bcdd40  libstdc++-v3/testsuite/27_io/basic_ostream/endl/char/1.cc
! eba83e072478feacd5bc7c109f02209f  libstdc++-v3/testsuite/27_io/basic_ostream/endl/wchar_t/1.cc
! d674e800ae7f1a6375305a02ede4df01  libstdc++-v3/testsuite/27_io/basic_ostream/ends/char/1.cc
  a911d6ade7f1d669281be1606df8bbb6  libstdc++-v3/testsuite/27_io/basic_ostream/ends/char/2.cc
! 6707ca1e7ca27928f85ce8c4c6fc4453  libstdc++-v3/testsuite/27_io/basic_ostream/ends/wchar_t/1.cc
! 928efc810ac94e095c514725a6af797e  libstdc++-v3/testsuite/27_io/basic_ostream/ends/wchar_t/2.cc
! ea66299fc23e3734d1059d57e0954059  libstdc++-v3/testsuite/27_io/basic_ostream/exceptions/char/9561.cc
! 4edde74154de9ad32eb897eaba0e5323  libstdc++-v3/testsuite/27_io/basic_ostream/exceptions/wchar_t/9561.cc
! f66a9f25538c6f30a8df4b1174e92e50  libstdc++-v3/testsuite/27_io/basic_ostream/flush/char/1.cc
! 11435d245915fd5ce8b33b238f118f40  libstdc++-v3/testsuite/27_io/basic_ostream/flush/char/2.cc
! eabfb2ea1f21327b3afec08966ecc5f9  libstdc++-v3/testsuite/27_io/basic_ostream/flush/char/exceptions_badbit_throw.cc
! 02411ebea7c39cb12e569654fd40de20  libstdc++-v3/testsuite/27_io/basic_ostream/flush/wchar_t/1.cc
! d50ee5e4befe25d4e4d58002ae574845  libstdc++-v3/testsuite/27_io/basic_ostream/flush/wchar_t/2.cc
! d9d06bfdcb2194485ab5fd296e99bc9c  libstdc++-v3/testsuite/27_io/basic_ostream/flush/wchar_t/exceptions_badbit_throw.cc
  edf8f87d52508fa1caea203ed6608f6a  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/1.cc
! 762b18723045c6d9dc5873d1588a6c38  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/2.cc
! 4a30987b73a8b3bdf703fecf19324166  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/3.cc
! 303bfb8bba09ca9af4294bc5367d4370  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/4.cc
! 2092b1b41ec05998d85cb112206cd7f6  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/4402.cc
! 4ee6df017c25c96ee6dc4652e30cb69a  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/5.cc
! 72da7e9585a515e6c981efaa79a80654  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/6.cc
  e0c0362254947202c6f0ac49749561eb  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/9555-oa.cc
! 8d889fe59530dea3b6b426b6cd940e1b  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/exceptions_badbit_throw.cc
! d0f22a451a557c11a232f7414b74d6af  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/exceptions_failbit_throw.cc
  ac53ce7a29699c592981c80dc7b48af8  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/1.cc
+ 76a97dbcb4acc7ea1767338513b10eb2  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/2.cc
+ bf5e57b428560793320abaeb01f6d25b  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/3.cc
+ c8fc78ba1d6144f2e76a889845444ac9  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/4.cc
+ d85e2597686bcd31cb4557f14d521fa9  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/4402.cc
+ f782eaaeff47cc2d8a3baba93bc797bf  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/5.cc
+ 7a18ba910037219ba64675603d1bedb7  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/6.cc
+ 8261c28bde79fa0ba931a4c42449aedc  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/9555-oa.cc
+ 17d7bc1a5766eaa16af75ccd3e43f23e  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/exceptions_badbit_throw.cc
+ 8f8fce97cfb96356656f53f20561c9bd  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/exceptions_failbit_throw.cc
  575119c004c45307720885e36d8ee267  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/1.cc
  3a330f8f62c5e5c209cbeb28a3c04208  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/11095-oa.cc
  907c95ba3a5758b374174a5d002500cf  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/11095-ob.cc
  e063293639db1d0c1df5dbd6e7d11733  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/11095-oc.cc
  20734207a1e81da4653918b38d5dda56  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/2.cc
  5336affce91081120ee99f2e6b4e152e  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/3.cc
! 8a81a2267cd163ec99f09129a3c72173  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/4.cc
  7796a6ff0bacd8ac80848b080266457a  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/5.cc
  d7eff045176ade2094d6f4b29dc66c22  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/6.cc
  6e294c3cba3793bca564f25127db6c56  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/8.cc
  2ce793ac7e2255e5ffa2547e58e6ce98  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/9555-oc.cc
+ 5d259328148027802c605a959b47bd5e  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/1.cc
  0f53fd2c98db789650ab033ec9d01803  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/11095-od.cc
  9427e9cf969f0d08f14a1a13b87485a8  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/11095-oe.cc
  94d52c0d98f01361a36cec703084be1e  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/11095-of.cc
+ d01bac530faefa2bf6f8e40491f05c7f  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/2.cc
+ 1e39c9c0421bc82db0c18bd9c64c09fc  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/3.cc
+ e8c66a1dcf0c63e42eb4bc2cbb15b2a2  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/4.cc
+ 730bd178b12255cf436f4e695a5895f9  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/5.cc
+ 858bb0490059b61ca60d266be92a304b  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/6.cc
  b652eeb8f92df32926c5475647fc74c7  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/7.cc
  0dc40d09690ec65fe9030b17c0840eab  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/8.cc
+ fddfd87da0ec6c2d22496d60cdc2f7c4  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/9555-oc.cc
  7eef5f2c3fe9fe66fafee99e29caa8ba  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/1.cc
! 1e06fbbe421cb886ba1b48d8d6c904a7  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/2.cc
  37e760f9ba50f155f58b38cf225e08f1  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/3.cc
  53c04b87aa40533f0f608727b199159c  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/4.cc
! 9294e05fc628bf160676e5950b7d4058  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/5.cc
  b82f977e6079989656def360285fd239  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/9318-out.cc
  7652cd85ce5d07ac1621cbd414769d14  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/9424-out.cc
  3c66bba715d7f6197ff03fc0ba34499b  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/9555-oo.cc
! ba6ef7b397f544044b770ac1e2168911  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/error_failbit.cc
! ebb68e181439b7134f638df3b6639584  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/exceptions_badbit_throw.cc
! bc79f80d422ebf102ce67ee75db7d666  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/exceptions_failbit_throw.cc
! 77c12777cfec6292b769b6018ffe7c63  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/exceptions_null.cc
! cd29c72c9232fab03891ae5af4ee86ea  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/1.cc
! 00dd04056472f222e843f0492c49a27c  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/2.cc
! 34ed19a88a54ae80d30e1e6a5c428240  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/3.cc
! cf79f3a0ca7f2eef6c3f03d554c1eeed  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/4.cc
! a79ccde5935e7041a1bf18bc50a88096  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/5.cc
! 5456256c64f31161469b76369b1f9e9e  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/9318-out.cc
! bbe8e125367ad6662ced114b7c6556b7  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/9424-out.cc
! fb7099e4bf2aadee6d246ee62b3a601c  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/9555-oo.cc
! 204783671741a99e2d6bc059527001e9  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/error_failbit.cc
! 9910e534f3ce3d00dde6550aa09d1a10  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/exceptions_badbit_throw.cc
! f92d95cd4d8deee2422d96e3a5a1f380  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/exceptions_failbit_throw.cc
! d26ea3a7ced193ba86cde311df99ac32  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/exceptions_null.cc
! 26c9ad4b62e0af30cb04cca791255207  libstdc++-v3/testsuite/27_io/basic_ostream/put/char/1.cc
! 9ab1429c6a44d903c883a25b00067735  libstdc++-v3/testsuite/27_io/basic_ostream/put/wchar_t/1.cc
  7565362f74b5a18b535bd7f330d8387b  libstdc++-v3/testsuite/27_io/basic_ostream/seekp/char/2346-fstream.cc
  68cbba08ada2a7f1978efbea4d976d68  libstdc++-v3/testsuite/27_io/basic_ostream/seekp/char/2346-sstream.cc
! 0d4e20643dacdfe2ffbeaef46de4c7ea  libstdc++-v3/testsuite/27_io/basic_ostream/seekp/char/exceptions_badbit_throw.cc
! 7d44ef635d001475ce2cc2a083e202be  libstdc++-v3/testsuite/27_io/basic_ostream/seekp/wchar_t/2346-fstream.cc
! 9b52ed76d6b46220fc71d0b5b9027755  libstdc++-v3/testsuite/27_io/basic_ostream/seekp/wchar_t/2346-sstream.cc
! f3e4a996f7c06ba14f16d0e1bc44156d  libstdc++-v3/testsuite/27_io/basic_ostream/seekp/wchar_t/exceptions_badbit_throw.cc
  bf26a28dc7fed3f348d9ae68c97709e8  libstdc++-v3/testsuite/27_io/basic_ostream/sentry/char/1.cc
! 730a5433997cce835cd8929f25d113a3  libstdc++-v3/testsuite/27_io/basic_ostream/sentry/char/2.cc
  e8715e5de804ea4725d390bf5734ea12  libstdc++-v3/testsuite/27_io/basic_ostream/sentry/pod/1.cc
+ 81b3573bf9472f1cff147e20ec07950d  libstdc++-v3/testsuite/27_io/basic_ostream/sentry/wchar_t/1.cc
+ c5aa7f3054d42fb45c8c780d7546dd65  libstdc++-v3/testsuite/27_io/basic_ostream/sentry/wchar_t/2.cc
  7e9d0834f8b8c8f17bd56091b95c7bab  libstdc++-v3/testsuite/27_io/basic_ostream/tellp/char/1.cc
  18b5dd467516097df2b050087baa7650  libstdc++-v3/testsuite/27_io/basic_ostream/tellp/char/2.cc
  66d856416c5329c400756ea7c303904d  libstdc++-v3/testsuite/27_io/basic_ostream/tellp/char/exceptions_badbit_throw.cc
! 5286185057c8c8476b485aefdc369d13  libstdc++-v3/testsuite/27_io/basic_ostream/tellp/wchar_t/1.cc
! 9820c003cf77209f2ac0922851ffa2e5  libstdc++-v3/testsuite/27_io/basic_ostream/tellp/wchar_t/2.cc
! d05491a4dd37d3f50ae49d6523f6fe3b  libstdc++-v3/testsuite/27_io/basic_ostream/tellp/wchar_t/exceptions_badbit_throw.cc
! 1574595b62e9654512368ad382e0962e  libstdc++-v3/testsuite/27_io/basic_ostream/write/char/1.cc
! 99354d9756da9b1f10302fced49dacfa  libstdc++-v3/testsuite/27_io/basic_ostream/write/wchar_t/1.cc
  c08ef6c3a3238b24baf86ff9dceab845  libstdc++-v3/testsuite/27_io/basic_ostringstream/1.cc
  5a987309519bddc5d78a3672ff3e41be  libstdc++-v3/testsuite/27_io/basic_ostringstream/2.cc
  f482eb109c2c742eb7e53cc7e7185360  libstdc++-v3/testsuite/27_io/basic_ostringstream/3.cc
  4b3093a531ae84a045e668c8aaf06026  libstdc++-v3/testsuite/27_io/basic_ostringstream/4.cc
  b8665ba8d472baf980b87bcfa712380a  libstdc++-v3/testsuite/27_io/basic_ostringstream/cons/char/3.cc
+ b913a71c5326d3b2956164127a1eaade  libstdc++-v3/testsuite/27_io/basic_ostringstream/cons/wchar_t/3.cc
  29c9697594913a000bd8757a0e146189  libstdc++-v3/testsuite/27_io/basic_ostringstream/rdbuf/char/2832.cc
+ 610981b0b08734d6a3861e73c0f17f0b  libstdc++-v3/testsuite/27_io/basic_ostringstream/rdbuf/wchar_t/2832.cc
  0067f776c69bec3360a7a5572d7b438f  libstdc++-v3/testsuite/27_io/basic_ostringstream/str/char/1.cc
  92b96be0e0d0f9009bbd3d8d9234e58d  libstdc++-v3/testsuite/27_io/basic_ostringstream/str/char/2.cc
+ 5d0ca680f26621adff66486cca06e893  libstdc++-v3/testsuite/27_io/basic_ostringstream/str/wchar_t/1.cc
+ e34f823844c3d54292fbafc13806f265  libstdc++-v3/testsuite/27_io/basic_ostringstream/str/wchar_t/2.cc
  7f929649a3909bda1e23491614ad5b81  libstdc++-v3/testsuite/27_io/basic_streambuf/1.cc
  63d4de89399cdc02ea0a5c00cc9b72ac  libstdc++-v3/testsuite/27_io/basic_streambuf/2.cc
  0d06ba137a8977496985561905115094  libstdc++-v3/testsuite/27_io/basic_streambuf/3.cc
  b7145f894e070c9611d3e745e8b12659  libstdc++-v3/testsuite/27_io/basic_streambuf/cons/char/1.cc
! e433901fc7ab00bf773373cf093dc877  libstdc++-v3/testsuite/27_io/basic_streambuf/cons/wchar_t/1.cc
! 8e2689150d86b653c81e55e1e5e09f44  libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/char/1.cc
  303964ca52c6bbe7d1c2a13309205771  libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/char/13007-1.cc
  e501ed1cd0d4e208fafd2bcac83816b3  libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/char/13007-2.cc
! 04ed8a84eb9c3e507f1cd03834ece1a4  libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/char/9322.cc
! a593c4885f3596745fb852581c4d38ae  libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/wchar_t/1.cc
  729756db537c5b569c86cea8ccd10362  libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/wchar_t/13007-1.cc
  aa2cb034b478647c56ea6b5bc374adb5  libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/wchar_t/13007-2.cc
+ 013881431ca55a743bacef58c0807854  libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/wchar_t/9322.cc
  3b8205f386ae5319f068834f05f721b7  libstdc++-v3/testsuite/27_io/basic_streambuf/in_avail/char/9701-3.cc
+ 59052049751d91c6751d6ff9f4bedf98  libstdc++-v3/testsuite/27_io/basic_streambuf/in_avail/wchar_t/9701-3.cc
  4f9aa06982f1be0413d396d2719a7f50  libstdc++-v3/testsuite/27_io/basic_streambuf/overflow/char/1.cc
! 4892afab82a553feb16c95ec5755e9d5  libstdc++-v3/testsuite/27_io/basic_streambuf/overflow/char/2.cc
! 3b5997d3adebb14d4e20e03dd924cdb3  libstdc++-v3/testsuite/27_io/basic_streambuf/overflow/char/3599.cc
! a696c52152c0e0387357c7690442abec  libstdc++-v3/testsuite/27_io/basic_streambuf/overflow/wchar_t/1.cc
! b63877bf55d54fafc7092b678335f4d9  libstdc++-v3/testsuite/27_io/basic_streambuf/overflow/wchar_t/2.cc
! d9c78be127dc16cf0b4e2be4f33b2c30  libstdc++-v3/testsuite/27_io/basic_streambuf/overflow/wchar_t/3599.cc
  75bef9c5c1beafb37d7885dececba398  libstdc++-v3/testsuite/27_io/basic_streambuf/sgetc/char/1.cc
+ 847340978da4a1540cb27a8b89d5efcb  libstdc++-v3/testsuite/27_io/basic_streambuf/sgetc/wchar_t/1.cc
  b5d99c7b62a2ca31707477d2c95d8420  libstdc++-v3/testsuite/27_io/basic_streambuf/sgetn/char/1.cc
+ e623f1ed34c86b303ef6ae2e347392e2  libstdc++-v3/testsuite/27_io/basic_streambuf/sgetn/wchar_t/1.cc
  16d5a492cdfa470836ce935b169a634a  libstdc++-v3/testsuite/27_io/basic_streambuf/sputbackc/char/9538.cc
+ 72bafb8c5d09dae4805b241e4c341cbc  libstdc++-v3/testsuite/27_io/basic_streambuf/sputbackc/wchar_t/9538.cc
  3fbf35c11bc430d5d14889ead547623b  libstdc++-v3/testsuite/27_io/basic_streambuf/sputc/char/1057.cc
+ f14ae2a7b7bb6e1ff0fb032ddcc7a551  libstdc++-v3/testsuite/27_io/basic_streambuf/sputc/wchar_t/1057.cc
  9980c4fe7d6541fca6efdf9d0d25ccf3  libstdc++-v3/testsuite/27_io/basic_streambuf/sputn/char/1.cc
! 9c45c9f34fc6b6b9865ad4670b9ef871  libstdc++-v3/testsuite/27_io/basic_streambuf/sputn/char/1057.cc
! dab97c9f05d5c244b76accbe945a550c  libstdc++-v3/testsuite/27_io/basic_streambuf/sputn/wchar_t/1.cc
! cbc7c80c34e0fd78592934763ea4668c  libstdc++-v3/testsuite/27_io/basic_streambuf/sputn/wchar_t/1057.cc
! 7ee508bdf8b498d72109525f83d6abb8  libstdc++-v3/testsuite/27_io/basic_streambuf/sync/char/1057.cc
! 4b331efd0a0cac4ea33be1492544cf76  libstdc++-v3/testsuite/27_io/basic_streambuf/sync/wchar_t/1057.cc
  97c7d7cfc23f46c76ec2083653495998  libstdc++-v3/testsuite/27_io/basic_stringbuf/1.cc
  8ea8143b1f11212582846b7e7ab92df2  libstdc++-v3/testsuite/27_io/basic_stringbuf/2.cc
  4a9cee3b8bd808ac97a506f60aad4bd9  libstdc++-v3/testsuite/27_io/basic_stringbuf/3.cc
  b3e8ec38045575f1d13a5765e9855a9f  libstdc++-v3/testsuite/27_io/basic_stringbuf/4.cc
  e12f2703c53b613daaf2e22b4a1af529  libstdc++-v3/testsuite/27_io/basic_stringbuf/5.cc
  a3e35b945fa3dec3b35dfee4c5067c5c  libstdc++-v3/testsuite/27_io/basic_stringbuf/cons/char/1.cc
! 18cfc4cc3951bb94c6ae37d07f91c70d  libstdc++-v3/testsuite/27_io/basic_stringbuf/cons/wchar_t/1.cc
! a5feb41f3c81e512174321bfc2e29e54  libstdc++-v3/testsuite/27_io/basic_stringbuf/imbue/char/1.cc
  bd1fe9c5c08433c0b37ddcd5fdb549d0  libstdc++-v3/testsuite/27_io/basic_stringbuf/imbue/char/9322.cc
! d2cd6e46999f760aeb6c0a6eee0bd803  libstdc++-v3/testsuite/27_io/basic_stringbuf/imbue/wchar_t/1.cc
! 77e062ac09674f7ccfb54450f12f4da0  libstdc++-v3/testsuite/27_io/basic_stringbuf/imbue/wchar_t/9322.cc
! df4fdcd6786ea88c515824a8c5299ccb  libstdc++-v3/testsuite/27_io/basic_stringbuf/in_avail/char/1.cc
! 76311ae640ae7feac2ec4629d4f9c076  libstdc++-v3/testsuite/27_io/basic_stringbuf/in_avail/wchar_t/1.cc
  fcb1c47ab8a26dc2e4be8a893283afe1  libstdc++-v3/testsuite/27_io/basic_stringbuf/overflow/char/1.cc
  e28f7c3ba34fadcccf173353514087e3  libstdc++-v3/testsuite/27_io/basic_stringbuf/overflow/char/2.cc
  662aafc620f6b3a480d6a39050bca26c  libstdc++-v3/testsuite/27_io/basic_stringbuf/overflow/char/3599.cc
  9392d35bbc9fd8afc2754b04d5dcac66  libstdc++-v3/testsuite/27_io/basic_stringbuf/overflow/char/9988.cc
! f969fa2e1aff813f73eadc3a9d3b6d83  libstdc++-v3/testsuite/27_io/basic_stringbuf/overflow/wchar_t/1.cc
! c6953af142be9dde53140fc0cb1bde46  libstdc++-v3/testsuite/27_io/basic_stringbuf/overflow/wchar_t/2.cc
! 1ad1cb03840f0128209de5e698eaaa50  libstdc++-v3/testsuite/27_io/basic_stringbuf/overflow/wchar_t/3599.cc
! 95a36495575a47e9272d04929acf6cca  libstdc++-v3/testsuite/27_io/basic_stringbuf/overflow/wchar_t/9988.cc
! 1fd6e4667e614c5c20889b09759a6d18  libstdc++-v3/testsuite/27_io/basic_stringbuf/pbackfail/char/1.cc
! 6206e179eeb62dc4f9e866dbe660e592  libstdc++-v3/testsuite/27_io/basic_stringbuf/pbackfail/char/2.cc
! ec25fd253004f745a763f7e61823c6fc  libstdc++-v3/testsuite/27_io/basic_stringbuf/pbackfail/wchar_t/1.cc
! f6ccc3a12530b6b95545bf8e0e53f764  libstdc++-v3/testsuite/27_io/basic_stringbuf/pbackfail/wchar_t/2.cc
! b8aaddc84da8e5d7711355e0856f8c7b  libstdc++-v3/testsuite/27_io/basic_stringbuf/sbumpc/char/1.cc
  bb312a10966ccc54e38bd035cd57b5bf  libstdc++-v3/testsuite/27_io/basic_stringbuf/sbumpc/char/9825.cc
! 4e130de3e6ad54ce9ac3257257733931  libstdc++-v3/testsuite/27_io/basic_stringbuf/sbumpc/wchar_t/1.cc
! 5a14b6617f3324bbc5afdcd0a90e7adc  libstdc++-v3/testsuite/27_io/basic_stringbuf/sbumpc/wchar_t/9825.cc
! 539639491815ace0c76e2044652319a6  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekoff/char/1.cc
  e0739e619559fff1bf50ca92f96d92cf  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekoff/char/10975.cc
+ 4c0d6f1644669840514c4d17730e119d  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekoff/char/16956.cc
  93989c2d9c8ab44e8f179f4dfb0dd382  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekoff/char/2.cc
! d2d1925fb83de1c60b24dab29983405b  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekoff/wchar_t/1.cc
! d5a22c870d78d04eab42a4b7dc5546cb  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekoff/wchar_t/10975.cc
! 4e314668d10857f4ba3ebcc70c0752bf  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekoff/wchar_t/16956.cc
! 288bba44c2379eedec5bb3a01ec11516  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekoff/wchar_t/2.cc
! 04e18ee911fd2b824daeb57a5f17a69a  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekpos/char/1.cc
  968815bd9c6652404b199d4ae60d3032  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekpos/char/2.cc
  9cbf592171ab8d43d00f078d4f4b530b  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekpos/char/3.cc
! f7fee9af4d48053773a271a9df4f4b7b  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekpos/wchar_t/1.cc
! 6bbd5d9b0c8af0dca4c39fc0d4c47cc3  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekpos/wchar_t/2.cc
! ab7a386b3d10b0fa5071d9a138a0cc94  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekpos/wchar_t/3.cc
! 552059fc736fcb70c6aafb08521d4376  libstdc++-v3/testsuite/27_io/basic_stringbuf/setbuf/char/1.cc
  51b5c7694d48ad4addaede102464824c  libstdc++-v3/testsuite/27_io/basic_stringbuf/setbuf/char/2.cc
  4b97abd680d1d3021c7b06a37aaa515f  libstdc++-v3/testsuite/27_io/basic_stringbuf/setbuf/char/3.cc
! d7b9f750d78850f6ac3e1eaede167483  libstdc++-v3/testsuite/27_io/basic_stringbuf/setbuf/char/4.cc
! 57a02afbdad3a9258be484f02fa1dd21  libstdc++-v3/testsuite/27_io/basic_stringbuf/setbuf/wchar_t/1.cc
! 52a0c96ebe19483941db8863674ef347  libstdc++-v3/testsuite/27_io/basic_stringbuf/setbuf/wchar_t/2.cc
! eb5803ff35873deb132b2eb0afd1a881  libstdc++-v3/testsuite/27_io/basic_stringbuf/setbuf/wchar_t/3.cc
! 8fc6b0ae0e1d87ebe685c7891fe5b3cb  libstdc++-v3/testsuite/27_io/basic_stringbuf/setbuf/wchar_t/4.cc
! b411b6fcc6d8758b1f496481af03f3f5  libstdc++-v3/testsuite/27_io/basic_stringbuf/sgetc/char/1.cc
! 41201b92ff52b098362fa048517e8d1b  libstdc++-v3/testsuite/27_io/basic_stringbuf/sgetc/wchar_t/1.cc
! 5c2d8bcbf61680cd8d3e6c6360ea7faf  libstdc++-v3/testsuite/27_io/basic_stringbuf/sgetn/char/1.cc
! 64621b6f133205995bf0f4454c3a2ca4  libstdc++-v3/testsuite/27_io/basic_stringbuf/sgetn/wchar_t/1.cc
! c172c89ce7bd672a733ee90c1cb4d7e6  libstdc++-v3/testsuite/27_io/basic_stringbuf/snextc/char/1.cc
! 9051b0ef3e53d8e30bb551b79991e0e0  libstdc++-v3/testsuite/27_io/basic_stringbuf/snextc/wchar_t/1.cc
! 745de11caee4ffbec45e234876e1d2a2  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputbackc/char/1.cc
  96ea829b32d223a9c6b9ea2c8f494c57  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputbackc/char/9425.cc
! 96a1aea2bfb87869c8478da99c848994  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputbackc/wchar_t/1.cc
! 6c1655cbef28045bff4695ed06ea057e  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputbackc/wchar_t/9425.cc
! 338acb2532c6d07479eb5c4569d553fd  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputc/char/1.cc
  b6afe97bbf2b5373b3b6815fbebf75ce  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputc/char/1057.cc
  ef6f72d9109e6b28a40d7a7d9dfcb7ce  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputc/char/9404-1.cc
! 7e1d91d7fe1ac5d070e116055b1901a2  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputc/wchar_t/1.cc
! 1df576215f05c6148de0ff93cc0c9a29  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputc/wchar_t/1057.cc
! eaeac953ce67b31236c0712a1273ad0f  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputc/wchar_t/9404-1.cc
! 9c53f34b0316618c9fdcade2f22f4909  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputn/char/1.cc
  d38cc533c9fb5a8c5643f2c477427e0e  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputn/char/1057.cc
  b10ef69a67b7a054fe89233c000785cf  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputn/char/9404-2.cc
+ d4ab3b88dc0530951ea40b98882d8169  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputn/wchar_t/1.cc
+ f8f60964cd7a3c5ce641f1ae033e1be9  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputn/wchar_t/1057.cc
+ 690beefd2691dc8aa21944fa0c550a7b  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputn/wchar_t/9404-2.cc
  a0403cfa8971e74f5f23ef3ced11b18a  libstdc++-v3/testsuite/27_io/basic_stringbuf/str/char/1.cc
  f80f5def4cd7cd3c8a2405d3ddce7540  libstdc++-v3/testsuite/27_io/basic_stringbuf/str/char/2.cc
  c299ee1c8a4f80927305cd732e71cb43  libstdc++-v3/testsuite/27_io/basic_stringbuf/str/char/3.cc
  b503a2d2c73f084b77e637527b45122c  libstdc++-v3/testsuite/27_io/basic_stringbuf/str/char/3955.cc
! b35de3b41021239707c2047ddbc4dfa9  libstdc++-v3/testsuite/27_io/basic_stringbuf/str/wchar_t/1.cc
! 6db93379b9a03196c7998c08a970a6bb  libstdc++-v3/testsuite/27_io/basic_stringbuf/str/wchar_t/2.cc
! 703f57ea0e479d4c7f580b1eb3575963  libstdc++-v3/testsuite/27_io/basic_stringbuf/str/wchar_t/3.cc
! 7e35466b49634e6e2f9651842d94b373  libstdc++-v3/testsuite/27_io/basic_stringbuf/str/wchar_t/3955.cc
! a44a0b81338c22eea850dd44444d5c05  libstdc++-v3/testsuite/27_io/basic_stringbuf/sungetc/char/1.cc
! 7d27a0775d63d61fb9de6d3d6da8e8d9  libstdc++-v3/testsuite/27_io/basic_stringbuf/sungetc/wchar_t/1.cc
  917a36c3c2bfc9758bd5ec1e7639ee02  libstdc++-v3/testsuite/27_io/basic_stringbuf/sync/char/1057.cc
+ 5fdccebbc2f503a3405cccae5d450ee1  libstdc++-v3/testsuite/27_io/basic_stringbuf/sync/wchar_t/1057.cc
  1b4bde78807d90a2d0e7804fa2f7c002  libstdc++-v3/testsuite/27_io/basic_stringstream/1.cc
  3d962d85661cddcd5a0af609dec75b75  libstdc++-v3/testsuite/27_io/basic_stringstream/2.cc
  21546fb998be51b985218ade694d86fa  libstdc++-v3/testsuite/27_io/basic_stringstream/3.cc
  bca3ef0b4441c976a93104205854a89f  libstdc++-v3/testsuite/27_io/basic_stringstream/4.cc
! 0fa2dc897a559ebd3f53f83d2e5b8b1d  libstdc++-v3/testsuite/27_io/basic_stringstream/rdbuf/char/2832.cc
! fe1f1be51b6b8f275814ecb6f6cb10cd  libstdc++-v3/testsuite/27_io/basic_stringstream/rdbuf/wchar_t/2832.cc
! d9391847bfd7b986b08988596332eba8  libstdc++-v3/testsuite/27_io/basic_stringstream/str/char/1.cc
  2bd61aa15da6526ac80ae6861fd506e6  libstdc++-v3/testsuite/27_io/basic_stringstream/str/char/2.cc
! 639fe7eb306df1ada2c224fb3d0608c3  libstdc++-v3/testsuite/27_io/basic_stringstream/str/char/3.cc
  f427e189a2ad054fb6a3b80b7fa32e2b  libstdc++-v3/testsuite/27_io/basic_stringstream/str/char/4.cc
+ 686e60704e6e29df71330a814c3f0cb2  libstdc++-v3/testsuite/27_io/basic_stringstream/str/wchar_t/1.cc
+ 8a6e0267600fc0040deced368fe599cd  libstdc++-v3/testsuite/27_io/basic_stringstream/str/wchar_t/2.cc
+ 0e74d848937b2d47e2ab1800e273be6c  libstdc++-v3/testsuite/27_io/basic_stringstream/str/wchar_t/3.cc
+ c7bffe509426ae03b446db0db2cac7d8  libstdc++-v3/testsuite/27_io/basic_stringstream/str/wchar_t/4.cc
  79931fb01070298e1ae6e664f43434bb  libstdc++-v3/testsuite/27_io/fpos/1.cc
  d781e7348701865dac2269dd99991cb0  libstdc++-v3/testsuite/27_io/fpos/11450.cc
  0e96c942accaa9ac4cffb702a6f38aec  libstdc++-v3/testsuite/27_io/fpos/14252.cc
*************** ce311ddedd7eb420b6835bc9935b5284  libstd
*** 21511,21525 ****
  252db8604345e73662f23572be23042a  libstdc++-v3/testsuite/27_io/fpos/14320-3.cc
  b8ee3386ad6521e72b5fd25eb7089959  libstdc++-v3/testsuite/27_io/fpos/14320-4.cc
  058bf44071af8afedf294c6a1b5c1e50  libstdc++-v3/testsuite/27_io/fpos/14320-5.cc
! 26be2b562c3979d9ee3353dc87127f31  libstdc++-v3/testsuite/27_io/fpos/14775.cc
  8e4117392d9f7fa1a2d44a11799676fa  libstdc++-v3/testsuite/27_io/fpos/mbstate_t/1.cc
  9f469eb7401de043a85a6aeef26e5267  libstdc++-v3/testsuite/27_io/fpos/mbstate_t/12065.cc
  2a88eec52b8f83bfa7ca001a28daf4e1  libstdc++-v3/testsuite/27_io/fpos/mbstate_t/2.cc
  ff868872a38f6a20b77af55a38d52120  libstdc++-v3/testsuite/27_io/fpos/mbstate_t/3.cc
  e7ee058a895a3a54e5d813031650f421  libstdc++-v3/testsuite/27_io/fpos/mbstate_t/4_neg.cc
  1b5e5fd2147c3a1531cdfac1d9a3dd27  libstdc++-v3/testsuite/27_io/ios_base/callbacks/1.cc
! 60c301f120661d4dd9519cb2e00c7c4c  libstdc++-v3/testsuite/27_io/ios_base/cons/assign_neg.cc
! 934666175e7723fd4dc732c734a504b5  libstdc++-v3/testsuite/27_io/ios_base/cons/copy_neg.cc
  f98edba4011372049fecca338fb80623  libstdc++-v3/testsuite/27_io/ios_base/state/1.cc
  a8a6a56b2f1cab85bc73bb22594bb741  libstdc++-v3/testsuite/27_io/ios_base/storage/1.cc
  d5f5aae7bec185a2b090c2d3c8dd75da  libstdc++-v3/testsuite/27_io/ios_base/storage/11584.cc
--- 25741,25755 ----
  252db8604345e73662f23572be23042a  libstdc++-v3/testsuite/27_io/fpos/14320-3.cc
  b8ee3386ad6521e72b5fd25eb7089959  libstdc++-v3/testsuite/27_io/fpos/14320-4.cc
  058bf44071af8afedf294c6a1b5c1e50  libstdc++-v3/testsuite/27_io/fpos/14320-5.cc
! 164e78eefe73d16d5b998cbc86669615  libstdc++-v3/testsuite/27_io/fpos/14775.cc
  8e4117392d9f7fa1a2d44a11799676fa  libstdc++-v3/testsuite/27_io/fpos/mbstate_t/1.cc
  9f469eb7401de043a85a6aeef26e5267  libstdc++-v3/testsuite/27_io/fpos/mbstate_t/12065.cc
  2a88eec52b8f83bfa7ca001a28daf4e1  libstdc++-v3/testsuite/27_io/fpos/mbstate_t/2.cc
  ff868872a38f6a20b77af55a38d52120  libstdc++-v3/testsuite/27_io/fpos/mbstate_t/3.cc
  e7ee058a895a3a54e5d813031650f421  libstdc++-v3/testsuite/27_io/fpos/mbstate_t/4_neg.cc
  1b5e5fd2147c3a1531cdfac1d9a3dd27  libstdc++-v3/testsuite/27_io/ios_base/callbacks/1.cc
! 8bb846b5aa862fbdc6a773ebbe038316  libstdc++-v3/testsuite/27_io/ios_base/cons/assign_neg.cc
! 1215c4b219b20a05f65d06389e6f6d90  libstdc++-v3/testsuite/27_io/ios_base/cons/copy_neg.cc
  f98edba4011372049fecca338fb80623  libstdc++-v3/testsuite/27_io/ios_base/state/1.cc
  a8a6a56b2f1cab85bc73bb22594bb741  libstdc++-v3/testsuite/27_io/ios_base/storage/1.cc
  d5f5aae7bec185a2b090c2d3c8dd75da  libstdc++-v3/testsuite/27_io/ios_base/storage/11584.cc
*************** d5f5aae7bec185a2b090c2d3c8dd75da  libstd
*** 21529,21539 ****
  cacea0585ee06f81539a77df3df398c7  libstdc++-v3/testsuite/27_io/ios_base/sync_with_stdio/16959.cc
  949fb2e85ccd6318ae459f20026e6277  libstdc++-v3/testsuite/27_io/ios_base/sync_with_stdio/2.cc
  bdf77ecc99c202ee295857273177b9c3  libstdc++-v3/testsuite/27_io/ios_base/sync_with_stdio/9523.cc
! fc6872a64a2783ad5150311426a45104  libstdc++-v3/testsuite/27_io/manipulators/adjustfield/char/1.cc
! 2efb842f3a459efa5ab774909f390f4b  libstdc++-v3/testsuite/27_io/manipulators/adjustfield/char/2.cc
! 4cfdde96383269a5882a896af18e089c  libstdc++-v3/testsuite/27_io/manipulators/basefield/char/1.cc
! 8b85da03a0455fc7a13cdceabc961117  libstdc++-v3/testsuite/27_io/manipulators/standard/char/1.cc
! c8ae4964a271a3cfc96aaed432ce9747  libstdc++-v3/testsuite/27_io/manipulators/standard/char/2.cc
  c6d3d978424ec860a06f2607870c4a20  libstdc++-v3/testsuite/27_io/objects/char/1.cc
  a6e9021c82998bd5f90b0141c88bd751  libstdc++-v3/testsuite/27_io/objects/char/10.cc
  bac4687163d8f7931845c1c38bcf4cb0  libstdc++-v3/testsuite/27_io/objects/char/12048-1.cc
--- 25759,25781 ----
  cacea0585ee06f81539a77df3df398c7  libstdc++-v3/testsuite/27_io/ios_base/sync_with_stdio/16959.cc
  949fb2e85ccd6318ae459f20026e6277  libstdc++-v3/testsuite/27_io/ios_base/sync_with_stdio/2.cc
  bdf77ecc99c202ee295857273177b9c3  libstdc++-v3/testsuite/27_io/ios_base/sync_with_stdio/9523.cc
! afdc5cd14848fcba31e4a23a7e6c78f2  libstdc++-v3/testsuite/27_io/ios_base/types/fmtflags/bitmask_operators.cc
! 4f4e442b05a6700dbf6e0b8b8a75ae78  libstdc++-v3/testsuite/27_io/ios_base/types/fmtflags/case_label.cc
! 79b740e51a10ea5f6519114174e3085e  libstdc++-v3/testsuite/27_io/ios_base/types/iostate/bitmask_operators.cc
! b24d28acd3a435046ecac169200d8078  libstdc++-v3/testsuite/27_io/ios_base/types/iostate/case_label.cc
! 015ffd9aaefcb9b2c6a03579ec03d0c0  libstdc++-v3/testsuite/27_io/ios_base/types/openmode/bitmask_operators.cc
! 4025b1a5455236a23d6281faab0e639d  libstdc++-v3/testsuite/27_io/ios_base/types/openmode/case_label.cc
! df95dd9e037aaab9af333d3ad4cddf12  libstdc++-v3/testsuite/27_io/ios_base/types/seekdir/case_label.cc
! 430a379ce20c35398da6ac2ac6ad5f7d  libstdc++-v3/testsuite/27_io/manipulators/adjustfield/char/1.cc
! 91d70ac3df08f75fbf9ba35ac45dd5a6  libstdc++-v3/testsuite/27_io/manipulators/adjustfield/char/2.cc
! f72bbe19743a89bba78d4fd80911bfb6  libstdc++-v3/testsuite/27_io/manipulators/adjustfield/wchar_t/1.cc
! f7ac25381d7190f1dc49e5ee7a51deef  libstdc++-v3/testsuite/27_io/manipulators/adjustfield/wchar_t/2.cc
! 7c9bbf0cac1f6456f9d78a71b4c90505  libstdc++-v3/testsuite/27_io/manipulators/basefield/char/1.cc
! 0482c803ba8aa547dcafa25ad4614165  libstdc++-v3/testsuite/27_io/manipulators/basefield/wchar_t/1.cc
! f37ee6d746118393b38959c9808a6609  libstdc++-v3/testsuite/27_io/manipulators/standard/char/1.cc
! 3dab506ed6daf8e70d3547061274bd49  libstdc++-v3/testsuite/27_io/manipulators/standard/char/2.cc
! 094e9909ae5310a60c5c9b35d5a7153a  libstdc++-v3/testsuite/27_io/manipulators/standard/wchar_t/1.cc
! 80efad9d797d13ceb67f2315d45ec066  libstdc++-v3/testsuite/27_io/manipulators/standard/wchar_t/2.cc
  c6d3d978424ec860a06f2607870c4a20  libstdc++-v3/testsuite/27_io/objects/char/1.cc
  a6e9021c82998bd5f90b0141c88bd751  libstdc++-v3/testsuite/27_io/objects/char/10.cc
  bac4687163d8f7931845c1c38bcf4cb0  libstdc++-v3/testsuite/27_io/objects/char/12048-1.cc
*************** d8e8fca2dc0f896fd7cb4cb0031ba249  libstd
*** 21563,21574 ****
  069d0b68d99275bb4412e90bd9d5c966  libstdc++-v3/testsuite/27_io/objects/char/6648-1_xin.in
  768e1fa0cf13dc1283455bb704fe28b4  libstdc++-v3/testsuite/27_io/objects/char/6648-2_xin.cc
  6b76e6feddcc145dc3499d8d123d9da7  libstdc++-v3/testsuite/27_io/objects/char/6648-2_xin.in
! 6ae374a98869dee1e9d751784a842815  libstdc++-v3/testsuite/27_io/objects/char/7.cc
  3061c3b451733c29725fe26ad8d5b758  libstdc++-v3/testsuite/27_io/objects/char/7744_xin.cc
  0bee89b07a248e27c83fc3d5951213c1  libstdc++-v3/testsuite/27_io/objects/char/7744_xin.in
  f6bed760a5b0b314814899ca4ecdf693  libstdc++-v3/testsuite/27_io/objects/char/8.cc
  8ad5a95d91c64800f98692d71a7f15b0  libstdc++-v3/testsuite/27_io/objects/char/9.cc
! 4e8d87f25cc1eeb931cf0a1dc617dd36  libstdc++-v3/testsuite/27_io/objects/char/9661-1.cc
  44742bade213e958990f1084a39389d0  libstdc++-v3/testsuite/27_io/objects/char/9661-2_xin.cc
  33ab658c3d687d1d73a0e92a596f725e  libstdc++-v3/testsuite/27_io/objects/char/9661-2_xin.in
  38fb482cf59e5438a9e9d58ba1d14959  libstdc++-v3/testsuite/27_io/objects/wchar_t/1.cc
--- 25805,25816 ----
  069d0b68d99275bb4412e90bd9d5c966  libstdc++-v3/testsuite/27_io/objects/char/6648-1_xin.in
  768e1fa0cf13dc1283455bb704fe28b4  libstdc++-v3/testsuite/27_io/objects/char/6648-2_xin.cc
  6b76e6feddcc145dc3499d8d123d9da7  libstdc++-v3/testsuite/27_io/objects/char/6648-2_xin.in
! 58b6a717423d31e424355fa109aae637  libstdc++-v3/testsuite/27_io/objects/char/7.cc
  3061c3b451733c29725fe26ad8d5b758  libstdc++-v3/testsuite/27_io/objects/char/7744_xin.cc
  0bee89b07a248e27c83fc3d5951213c1  libstdc++-v3/testsuite/27_io/objects/char/7744_xin.in
  f6bed760a5b0b314814899ca4ecdf693  libstdc++-v3/testsuite/27_io/objects/char/8.cc
  8ad5a95d91c64800f98692d71a7f15b0  libstdc++-v3/testsuite/27_io/objects/char/9.cc
! 53b41ec4690f01f048edb9c35921e9e1  libstdc++-v3/testsuite/27_io/objects/char/9661-1.cc
  44742bade213e958990f1084a39389d0  libstdc++-v3/testsuite/27_io/objects/char/9661-2_xin.cc
  33ab658c3d687d1d73a0e92a596f725e  libstdc++-v3/testsuite/27_io/objects/char/9661-2_xin.in
  38fb482cf59e5438a9e9d58ba1d14959  libstdc++-v3/testsuite/27_io/objects/wchar_t/1.cc
*************** d8e8fca2dc0f896fd7cb4cb0031ba249  libstd
*** 21605,21626 ****
  069d0b68d99275bb4412e90bd9d5c966  libstdc++-v3/testsuite/27_io/objects/wchar_t/6648-1_xin.in
  65b69bea1f25d9fb675b7c01be1a357a  libstdc++-v3/testsuite/27_io/objects/wchar_t/6648-2_xin.cc
  6b76e6feddcc145dc3499d8d123d9da7  libstdc++-v3/testsuite/27_io/objects/wchar_t/6648-2_xin.in
! f42d3f311cc39ad1e7715d723283998b  libstdc++-v3/testsuite/27_io/objects/wchar_t/7.cc
  de324ff0d3e78294e9040cbe1375ef9c  libstdc++-v3/testsuite/27_io/objects/wchar_t/7744_xin.cc
  0bee89b07a248e27c83fc3d5951213c1  libstdc++-v3/testsuite/27_io/objects/wchar_t/7744_xin.in
  56eec23e7af17ed17533d40a2225804b  libstdc++-v3/testsuite/27_io/objects/wchar_t/8.cc
  b7893db0b450aa3e72e72be705aa752a  libstdc++-v3/testsuite/27_io/objects/wchar_t/9520.cc
! 1dcf20a426abda4962574d6c1426da40  libstdc++-v3/testsuite/27_io/objects/wchar_t/9661-1.cc
  a629d7308ee03767256e50e28cafd11c  libstdc++-v3/testsuite/27_io/objects/wchar_t/9661-2_xin.cc
  33ab658c3d687d1d73a0e92a596f725e  libstdc++-v3/testsuite/27_io/objects/wchar_t/9661-2_xin.in
  68f234406522f7b15d4bd720e5e2082d  libstdc++-v3/testsuite/27_io/objects/wchar_t/9662.cc
  60b595a67aadc08b0f39fc314aff55a1  libstdc++-v3/testsuite/27_io/objects/wchar_t/9_xin.cc
  b715c45a6677f269807dab0bbcf0ee1d  libstdc++-v3/testsuite/27_io/objects/wchar_t/9_xin.in
! 7c372cec04610d44dc2fd1f3dcdf89e6  libstdc++-v3/testsuite/27_io/types/1.cc
  d8b9f7919024d17415f724a3ac95ce05  libstdc++-v3/testsuite/27_io/types/2.cc
  3fd82f08ab16a228039562396b3e281f  libstdc++-v3/testsuite/27_io/types/3.cc
! f50c3ccebfd22c97ee023758f4b22758  libstdc++-v3/testsuite/Makefile.am
! 720c794b35111ad396be8129b8b5d8e1  libstdc++-v3/testsuite/Makefile.in
  c4b036ffe9510af53d3e5b95934d9037  libstdc++-v3/testsuite/abi_check.cc
  02143153c968c0f22ee7bc20083dfa85  libstdc++-v3/testsuite/backward/11460.cc
  3489918bda0c32e7f47c2cdaed6c6ae3  libstdc++-v3/testsuite/backward/header_deque_h.cc
--- 25847,25868 ----
  069d0b68d99275bb4412e90bd9d5c966  libstdc++-v3/testsuite/27_io/objects/wchar_t/6648-1_xin.in
  65b69bea1f25d9fb675b7c01be1a357a  libstdc++-v3/testsuite/27_io/objects/wchar_t/6648-2_xin.cc
  6b76e6feddcc145dc3499d8d123d9da7  libstdc++-v3/testsuite/27_io/objects/wchar_t/6648-2_xin.in
! db4cde8c7dcf9921737737495260010e  libstdc++-v3/testsuite/27_io/objects/wchar_t/7.cc
  de324ff0d3e78294e9040cbe1375ef9c  libstdc++-v3/testsuite/27_io/objects/wchar_t/7744_xin.cc
  0bee89b07a248e27c83fc3d5951213c1  libstdc++-v3/testsuite/27_io/objects/wchar_t/7744_xin.in
  56eec23e7af17ed17533d40a2225804b  libstdc++-v3/testsuite/27_io/objects/wchar_t/8.cc
  b7893db0b450aa3e72e72be705aa752a  libstdc++-v3/testsuite/27_io/objects/wchar_t/9520.cc
! b23826ebfbf23f4709590f8ad1d8e6d1  libstdc++-v3/testsuite/27_io/objects/wchar_t/9661-1.cc
  a629d7308ee03767256e50e28cafd11c  libstdc++-v3/testsuite/27_io/objects/wchar_t/9661-2_xin.cc
  33ab658c3d687d1d73a0e92a596f725e  libstdc++-v3/testsuite/27_io/objects/wchar_t/9661-2_xin.in
  68f234406522f7b15d4bd720e5e2082d  libstdc++-v3/testsuite/27_io/objects/wchar_t/9662.cc
  60b595a67aadc08b0f39fc314aff55a1  libstdc++-v3/testsuite/27_io/objects/wchar_t/9_xin.cc
  b715c45a6677f269807dab0bbcf0ee1d  libstdc++-v3/testsuite/27_io/objects/wchar_t/9_xin.in
! ec13077ba45368d456045a1203d6fab1  libstdc++-v3/testsuite/27_io/types/1.cc
  d8b9f7919024d17415f724a3ac95ce05  libstdc++-v3/testsuite/27_io/types/2.cc
  3fd82f08ab16a228039562396b3e281f  libstdc++-v3/testsuite/27_io/types/3.cc
! af0cdbedbd289e54c3224449bfeb8f33  libstdc++-v3/testsuite/Makefile.am
! c6df498aa87894e7bc7b0627d88c0aa9  libstdc++-v3/testsuite/Makefile.in
  c4b036ffe9510af53d3e5b95934d9037  libstdc++-v3/testsuite/abi_check.cc
  02143153c968c0f22ee7bc20083dfa85  libstdc++-v3/testsuite/backward/11460.cc
  3489918bda0c32e7f47c2cdaed6c6ae3  libstdc++-v3/testsuite/backward/header_deque_h.cc
*************** b764f52b36be7850b3d1f9862b1dfd53  libstd
*** 21670,21677 ****
  b764f52b36be7850b3d1f9862b1dfd53  libstdc++-v3/testsuite/data/seekpos.txt
  b764f52b36be7850b3d1f9862b1dfd53  libstdc++-v3/testsuite/data/sgetc.txt
  4545819a480b93d5f28a6cb5978a59b2  libstdc++-v3/testsuite/data/sgetn.txt
! 2b60c14f71c79bc9a311d189bc2dd5f6  libstdc++-v3/testsuite/demangle/abi_examples/01.cc
! 1228be16da06f8f79347976dc74feaf4  libstdc++-v3/testsuite/demangle/abi_examples/02.cc
  77dcc4a8a65a1d885512d9bba720a4f2  libstdc++-v3/testsuite/demangle/abi_examples/03.cc
  42aa7f77627b384f964751e5dffddff2  libstdc++-v3/testsuite/demangle/abi_examples/04.cc
  47d363581189d8bdb2a65a1c94ad44a5  libstdc++-v3/testsuite/demangle/abi_examples/05.cc
--- 25912,25932 ----
  b764f52b36be7850b3d1f9862b1dfd53  libstdc++-v3/testsuite/data/seekpos.txt
  b764f52b36be7850b3d1f9862b1dfd53  libstdc++-v3/testsuite/data/sgetc.txt
  4545819a480b93d5f28a6cb5978a59b2  libstdc++-v3/testsuite/data/sgetn.txt
! d7b4e91eb785b4eaafb9816f71e4da36  libstdc++-v3/testsuite/data/wistream_extractor_other-1.tst
! d7b4e91eb785b4eaafb9816f71e4da36  libstdc++-v3/testsuite/data/wistream_extractor_other-1.txt
! d7b4e91eb785b4eaafb9816f71e4da36  libstdc++-v3/testsuite/data/wistream_extractor_other-2.tst
! ebca6518833036563116938dafd11410  libstdc++-v3/testsuite/data/wistream_seeks-1.tst
! ebca6518833036563116938dafd11410  libstdc++-v3/testsuite/data/wistream_seeks-1.txt
! d41d8cd98f00b204e9800998ecf8427e  libstdc++-v3/testsuite/data/wistream_seeks-2.tst
! c301fea40cf8411c67e670f55107c746  libstdc++-v3/testsuite/data/wistream_unformatted-1.tst
! c301fea40cf8411c67e670f55107c746  libstdc++-v3/testsuite/data/wistream_unformatted-1.txt
! 8d8081da9135510f03511651e8401c59  libstdc++-v3/testsuite/data/wostream_inserter_char-1.tst
! 8d8081da9135510f03511651e8401c59  libstdc++-v3/testsuite/data/wostream_inserter_char-1.txt
! 4545819a480b93d5f28a6cb5978a59b2  libstdc++-v3/testsuite/data/wostream_inserter_other-1.tst
! 4545819a480b93d5f28a6cb5978a59b2  libstdc++-v3/testsuite/data/wostream_inserter_other-2.tst
! d41d8cd98f00b204e9800998ecf8427e  libstdc++-v3/testsuite/data/wostream_seeks-1.tst
! 0014510aaabafca8ba676d32d8d755ce  libstdc++-v3/testsuite/demangle/abi_examples/01.cc
! 7a693ad551e6a241dd63f5dc0fbecff1  libstdc++-v3/testsuite/demangle/abi_examples/02.cc
  77dcc4a8a65a1d885512d9bba720a4f2  libstdc++-v3/testsuite/demangle/abi_examples/03.cc
  42aa7f77627b384f964751e5dffddff2  libstdc++-v3/testsuite/demangle/abi_examples/04.cc
  47d363581189d8bdb2a65a1c94ad44a5  libstdc++-v3/testsuite/demangle/abi_examples/05.cc
*************** c7b65a30fbe8fe9e09039974d301cc33  libstd
*** 21743,21766 ****
  119cbc626aa06e8687550fb45ba10d7a  libstdc++-v3/testsuite/demangle/regression/cw-15.cc
  01225201934d408496d818d99c6faedd  libstdc++-v3/testsuite/demangle/regression/cw-16.cc
  5ef470d66334f22d0b8eba41aeb5d1d8  libstdc++-v3/testsuite/demangle/regression/old.cc
! 9f57e30a4a5f8c64b41e5f7091b5c140  libstdc++-v3/testsuite/ext/14648.cc
! 58e1e725e4d916adc38bab6b6aad5347  libstdc++-v3/testsuite/ext/allocators.cc
  a476a1a18146426ade6bc4a2f406b243  libstdc++-v3/testsuite/ext/concept_checks.cc
! bae2ce0ed21a80866dcbbe655983f645  libstdc++-v3/testsuite/ext/enc_filebuf/char/13189.cc
! ac8dd2f3f938cb12438df739f1525c2a  libstdc++-v3/testsuite/ext/enc_filebuf/char/13598.cc
! 09a950bf802b0beeadfdaef857bace14  libstdc++-v3/testsuite/ext/enc_filebuf/wchar_t/13189.cc
! 36690cb1e03e2a9cb57a1c91f704bbc4  libstdc++-v3/testsuite/ext/hash_map.cc
! 529e521fa08b946e74a2dd26f08c6270  libstdc++-v3/testsuite/ext/hash_set.cc
! abaa06f6b1527cd14d09d55d76bec18b  libstdc++-v3/testsuite/ext/headers.cc
  c0379afc317c6f168817d8951ea26e28  libstdc++-v3/testsuite/ext/pod_char_traits.cc
  c4ee9a90d83aa20657d0e18464164bfa  libstdc++-v3/testsuite/ext/pool_allocator/allocate_chunk.cc
  370124555adbcc4235cbe4e97db675e7  libstdc++-v3/testsuite/ext/rope/1.cc
  41871752363c9576f4ab9c9e6734f052  libstdc++-v3/testsuite/ext/rope/2.cc
  acd7d95c0f1448e509670cdc2ef828cf  libstdc++-v3/testsuite/ext/rope/3.cc
  b88f93403eaaa3a63361ef011a422413  libstdc++-v3/testsuite/ext/stdio_filebuf/char/1.cc
  1a81f51ba7e6f142a211948ef1e2151d  libstdc++-v3/testsuite/ext/stdio_filebuf/char/10063-1.cc
! ef2bcf29360e5abc5d4a874ed9735344  libstdc++-v3/testsuite/ext/stdio_filebuf/char/10063-2.cc
! bf082080d032ca0d4fa61e73a9525f2b  libstdc++-v3/testsuite/ext/stdio_filebuf/char/10063-3.cc
  46ace9763d26f5d155cba0ea4c5bc883  libstdc++-v3/testsuite/ext/stdio_filebuf/char/2.cc
  d7c540ee7615b837e96526a3829a4eba  libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/1.cc
  3f028f496e589d91035910b62d9baa33  libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/12048-1.cc
--- 25998,26079 ----
  119cbc626aa06e8687550fb45ba10d7a  libstdc++-v3/testsuite/demangle/regression/cw-15.cc
  01225201934d408496d818d99c6faedd  libstdc++-v3/testsuite/demangle/regression/cw-16.cc
  5ef470d66334f22d0b8eba41aeb5d1d8  libstdc++-v3/testsuite/demangle/regression/old.cc
! 4f1f12148ec12ca8737b42ced005367a  libstdc++-v3/testsuite/ext/array_allocator/1.cc
! 3a2777a91208b318df9668a39ccdc576  libstdc++-v3/testsuite/ext/array_allocator/2.cc
! 76818cf732b8932071b9ada980f53801  libstdc++-v3/testsuite/ext/array_allocator/3.cc
! 85d1a42ca003268a12f813c68a4808d9  libstdc++-v3/testsuite/ext/array_allocator/check_allocate_max_size.cc
! 8f8fc8dc8bb50b7a873896b695115161  libstdc++-v3/testsuite/ext/array_allocator/check_deallocate_null.cc
! bfcdb7a8cfcd710d33991c23692f9efd  libstdc++-v3/testsuite/ext/array_allocator/check_delete.cc
! 6919fd3519cdb313ae1f0a02a5c0c685  libstdc++-v3/testsuite/ext/array_allocator/check_new.cc
! b4cc5595ed1c3141da754040f6c503f0  libstdc++-v3/testsuite/ext/bitmap_allocator/check_allocate_max_size.cc
! aaf0624b189f05f790e52557ae2164e2  libstdc++-v3/testsuite/ext/bitmap_allocator/check_deallocate_null.cc
! ec8f6c28f8f72aeffdc6f0f51474b3d9  libstdc++-v3/testsuite/ext/bitmap_allocator/check_delete.cc
! ce45c162e856f3605b9c015be0d5a5d7  libstdc++-v3/testsuite/ext/bitmap_allocator/check_new.cc
  a476a1a18146426ade6bc4a2f406b243  libstdc++-v3/testsuite/ext/concept_checks.cc
! 131b260fef4c9084dea8927a073e9885  libstdc++-v3/testsuite/ext/debug_allocator/check_deallocate_null.cc
! edb6f06410a3c27aac377d7ed715e36d  libstdc++-v3/testsuite/ext/debug_allocator/check_delete.cc
! 5c969b0a188c5210e3a9ced3c6859cfb  libstdc++-v3/testsuite/ext/debug_allocator/check_new.cc
! 4c0214bb0812b3cefea22af9fe2f5fbb  libstdc++-v3/testsuite/ext/debug_allocator/instantiate.cc
! 2495b75ae122eac6da5bb4b6d024a906  libstdc++-v3/testsuite/ext/enc_filebuf/char/13189.cc
! ea395968fdc83e0d7027f43343bf570d  libstdc++-v3/testsuite/ext/enc_filebuf/char/13598.cc
! e15fb4b4e0304bf06453b8629b264c2c  libstdc++-v3/testsuite/ext/enc_filebuf/wchar_t/13189.cc
! 36690cb1e03e2a9cb57a1c91f704bbc4  libstdc++-v3/testsuite/ext/hash_map/1.cc
! 9f57e30a4a5f8c64b41e5f7091b5c140  libstdc++-v3/testsuite/ext/hash_map/14648.cc
! 4ec54c4116a176a09c84b6c55a447d20  libstdc++-v3/testsuite/ext/hash_map/instantiate.cc
! 529e521fa08b946e74a2dd26f08c6270  libstdc++-v3/testsuite/ext/hash_set/1.cc
! cf8773d8e58f986a68137643c34710cc  libstdc++-v3/testsuite/ext/hash_set/check_construct_destroy.cc
! b628b972db82d2a79472f11505d8f587  libstdc++-v3/testsuite/ext/hash_set/instantiate.cc
! 1997cb74334e24f26a31a8e9b6c6ccf3  libstdc++-v3/testsuite/ext/headers.cc
! f44b70d28d4f65b42b7207976778ba9b  libstdc++-v3/testsuite/ext/malloc_allocator/check_allocate_max_size.cc
! aaf5fa2238fd3e0dafafdd492956b4ec  libstdc++-v3/testsuite/ext/malloc_allocator/check_deallocate_null.cc
! 1bbfdfca3bb57a3c0b4524012e50bc94  libstdc++-v3/testsuite/ext/malloc_allocator/check_delete.cc
! d1eadc4854f198ceeb3327422dd3233f  libstdc++-v3/testsuite/ext/malloc_allocator/check_new.cc
! 8f01f67e5cf7d9e4b8fbd067270208f8  libstdc++-v3/testsuite/ext/malloc_allocator/deallocate_global.cc
! e65c23a094df5ce56e125ed6ebe6cf51  libstdc++-v3/testsuite/ext/malloc_allocator/deallocate_local.cc
! 5cd819345887fe36928a205fc00120d3  libstdc++-v3/testsuite/ext/malloc_allocator/instantiate.cc
! 6144dff1545d04233f58fa5886028363  libstdc++-v3/testsuite/ext/mt_allocator/check_allocate_big_per_type.cc
! e287ed501f2522253a47293f45c34c24  libstdc++-v3/testsuite/ext/mt_allocator/check_allocate_max_size.cc
! 8883b461689e7da3d2fe093141b5b2e5  libstdc++-v3/testsuite/ext/mt_allocator/check_deallocate_null.cc
! 2ce55991dda2ce681d0cd1ddbd91b6f8  libstdc++-v3/testsuite/ext/mt_allocator/check_deallocate_null_thread.cc
! 5deafc9d1d9705eae878de5b14c719e7  libstdc++-v3/testsuite/ext/mt_allocator/check_delete.cc
! e21eaec512c720adce6db797bab55f95  libstdc++-v3/testsuite/ext/mt_allocator/check_new.cc
! 56826f866b0b8fe5c4ff65c616706f68  libstdc++-v3/testsuite/ext/mt_allocator/deallocate_global-2.cc
! a2ab9f1f0822d8965841e6e18b3d5674  libstdc++-v3/testsuite/ext/mt_allocator/deallocate_global-4.cc
! 0d401b2837217150335824a1d8c05a34  libstdc++-v3/testsuite/ext/mt_allocator/deallocate_global_thread-1.cc
! 0cc847fcb8f7681eb6db39ec2aa5528a  libstdc++-v3/testsuite/ext/mt_allocator/deallocate_global_thread-3.cc
! 3b20241060acc98511db70c7e2c6071e  libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local-2.cc
! 5f7b82d546ddfac4d463523c50ff8e82  libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local-4.cc
! afd06349ceaf6ada612cba0b06c83b06  libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local_thread-1.cc
! f487efe77bf22e54a9805321ef185520  libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local_thread-3.cc
! 28f3e3bafc0f7c43a4fe8466b12bb65d  libstdc++-v3/testsuite/ext/mt_allocator/instantiate.cc
! 984efa41199883ae077fa21be327d89d  libstdc++-v3/testsuite/ext/mt_allocator/tune-1.cc
! ae7b937e456c9c01e8cf25eb6c5edd11  libstdc++-v3/testsuite/ext/mt_allocator/tune-2.cc
! e89aba2f90fc9c7cd6718865f971907e  libstdc++-v3/testsuite/ext/mt_allocator/tune-3.cc
! 1a43f805ca4bad5ea27e8649fe536a9a  libstdc++-v3/testsuite/ext/mt_allocator/tune-4.cc
! 70d45813f37e5f72c334e720394a1db6  libstdc++-v3/testsuite/ext/new_allocator/check_allocate_max_size.cc
! 4cbc509612568c93efc283a55f6d2f9b  libstdc++-v3/testsuite/ext/new_allocator/check_deallocate_null.cc
! 52e19fd4ab30271c5a53fb8b2f4e5ef0  libstdc++-v3/testsuite/ext/new_allocator/check_delete.cc
! 096184f07a670c593a6d6f91b004da15  libstdc++-v3/testsuite/ext/new_allocator/check_new.cc
! 389112b11e57ed3de19d08b60526a670  libstdc++-v3/testsuite/ext/new_allocator/deallocate_global.cc
! 80aa61dda408c9ae847138df18e7f49b  libstdc++-v3/testsuite/ext/new_allocator/deallocate_local.cc
! e48d52963779a54408ed9f174b0cab99  libstdc++-v3/testsuite/ext/new_allocator/instantiate.cc
  c0379afc317c6f168817d8951ea26e28  libstdc++-v3/testsuite/ext/pod_char_traits.cc
  c4ee9a90d83aa20657d0e18464164bfa  libstdc++-v3/testsuite/ext/pool_allocator/allocate_chunk.cc
+ 377968f89983d44808cc5f6e30f68f03  libstdc++-v3/testsuite/ext/pool_allocator/check_allocate_max_size.cc
+ 8620f663978127211de6d38696dd74a1  libstdc++-v3/testsuite/ext/pool_allocator/check_deallocate_null.cc
+ cc2dc2bd721f7ac5ea4da9e351a9c981  libstdc++-v3/testsuite/ext/pool_allocator/check_delete.cc
+ d4f0fa2d3b3559cf650e55b7660a26fd  libstdc++-v3/testsuite/ext/pool_allocator/check_new.cc
+ 9d5d041fce5d0ed91cc548ba0e086b90  libstdc++-v3/testsuite/ext/pool_allocator/instantiate.cc
  370124555adbcc4235cbe4e97db675e7  libstdc++-v3/testsuite/ext/rope/1.cc
  41871752363c9576f4ab9c9e6734f052  libstdc++-v3/testsuite/ext/rope/2.cc
  acd7d95c0f1448e509670cdc2ef828cf  libstdc++-v3/testsuite/ext/rope/3.cc
+ b99b8f485227e3df386d156e90936622  libstdc++-v3/testsuite/ext/rope/4.cc
+ 532c40d56d4091f4a62e3d824a99a147  libstdc++-v3/testsuite/ext/slist/check_construct_destroy.cc
+ 8fb46396ae2297a43f9f2725e9127806  libstdc++-v3/testsuite/ext/slist/instantiate.cc
  b88f93403eaaa3a63361ef011a422413  libstdc++-v3/testsuite/ext/stdio_filebuf/char/1.cc
  1a81f51ba7e6f142a211948ef1e2151d  libstdc++-v3/testsuite/ext/stdio_filebuf/char/10063-1.cc
! 314ec420f3eb1bf94933144e167a30f4  libstdc++-v3/testsuite/ext/stdio_filebuf/char/10063-2.cc
! 2b7103ac78fd69269b7cfedfb5a60083  libstdc++-v3/testsuite/ext/stdio_filebuf/char/10063-3.cc
  46ace9763d26f5d155cba0ea4c5bc883  libstdc++-v3/testsuite/ext/stdio_filebuf/char/2.cc
  d7c540ee7615b837e96526a3829a4eba  libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/1.cc
  3f028f496e589d91035910b62d9baa33  libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/12048-1.cc
*************** b7e9f0c5e61fe5e7febb33bc6a26726e  libstd
*** 21774,21790 ****
  4655cf62774952e20c243dcc6b3102d3  libstdc++-v3/testsuite/ext/stdio_sync_filebuf/wchar_t/12948-3.cc
  c695be2d4ce5918fbf775d027d4417ae  libstdc++-v3/testsuite/ext/stdio_sync_filebuf/wchar_t/12948-4.cc
  6501ac7b56f5bbc2aa97f698143fcc79  libstdc++-v3/testsuite/lib/dg-options.exp
! b01daadca60c0476a001f484a1f0e52c  libstdc++-v3/testsuite/lib/libstdc++.exp
  34a4bf3337bbd4d8a88db6062a1e47b0  libstdc++-v3/testsuite/lib/prune.exp
  6f6c590709f2fa1c2321009b27598f1f  libstdc++-v3/testsuite/libstdc++-dg/normal.exp
! 2ea568b8d1195b722dd5cbe38846cf50  libstdc++-v3/testsuite/performance/20_util/allocator/insert.cc
! 8b5913eac7ec6c6aef81c389fdd30254  libstdc++-v3/testsuite/performance/20_util/allocator/insert_insert.cc
! 3de5e1e23aa83747e8e529a1ae0ec6ad  libstdc++-v3/testsuite/performance/20_util/allocator/list_sort_search.cc
! 8281a277069699aba43166592dd61dbc  libstdc++-v3/testsuite/performance/20_util/allocator/map_mt_find.cc
! 62021ac57970b9800bef0b92a768613d  libstdc++-v3/testsuite/performance/20_util/allocator/map_thread.cc
! a60cd872631da9c7f8203cb7e89d3ce6  libstdc++-v3/testsuite/performance/20_util/allocator/producer_consumer.cc
  f464eaf8c6b42ee26f4596c8bf837c75  libstdc++-v3/testsuite/performance/21_strings/string_append.cc
  b978bc9a9504c67dc65b490cd1fe9eac  libstdc++-v3/testsuite/performance/21_strings/string_cons_input_iterator.cc
  0618d73975fc1506034ddbea0f932567  libstdc++-v3/testsuite/performance/22_locale/is_wchar_t.cc
  74e3d88fc61643eabbf5e2ac7b5768cf  libstdc++-v3/testsuite/performance/22_locale/narrow_widen_char.cc
  f10b025af8a395645cb1ed793d40829c  libstdc++-v3/testsuite/performance/22_locale/narrow_widen_wchar_t.cc
--- 26087,26105 ----
  4655cf62774952e20c243dcc6b3102d3  libstdc++-v3/testsuite/ext/stdio_sync_filebuf/wchar_t/12948-3.cc
  c695be2d4ce5918fbf775d027d4417ae  libstdc++-v3/testsuite/ext/stdio_sync_filebuf/wchar_t/12948-4.cc
  6501ac7b56f5bbc2aa97f698143fcc79  libstdc++-v3/testsuite/lib/dg-options.exp
! c2995489f76b977f97b0d401893f542e  libstdc++-v3/testsuite/lib/libstdc++.exp
  34a4bf3337bbd4d8a88db6062a1e47b0  libstdc++-v3/testsuite/lib/prune.exp
  6f6c590709f2fa1c2321009b27598f1f  libstdc++-v3/testsuite/libstdc++-dg/normal.exp
! d14b67d62632b7171f77551cd123756d  libstdc++-v3/testsuite/performance/20_util/allocator/insert.cc
! 661a496f21509169c33138ce956cbeb1  libstdc++-v3/testsuite/performance/20_util/allocator/insert_insert.cc
! 02cc238b0440889eafe4d9394ac52469  libstdc++-v3/testsuite/performance/20_util/allocator/list_sort_search.cc
! 63cc15ba360c25891e7fea467bf0f7a2  libstdc++-v3/testsuite/performance/20_util/allocator/map_mt_find.cc
! 3480f888e26648243d2304a8e4d563e1  libstdc++-v3/testsuite/performance/20_util/allocator/map_thread.cc
! 5d112a184214ce9c7807571a28e2aa28  libstdc++-v3/testsuite/performance/20_util/allocator/producer_consumer.cc
  f464eaf8c6b42ee26f4596c8bf837c75  libstdc++-v3/testsuite/performance/21_strings/string_append.cc
+ b0eab610d813700092348eeb495630e2  libstdc++-v3/testsuite/performance/21_strings/string_append_2.cc
  b978bc9a9504c67dc65b490cd1fe9eac  libstdc++-v3/testsuite/performance/21_strings/string_cons_input_iterator.cc
+ 307cb750d2554ffddad0382c95da49b8  libstdc++-v3/testsuite/performance/21_strings/string_find.cc
  0618d73975fc1506034ddbea0f932567  libstdc++-v3/testsuite/performance/22_locale/is_wchar_t.cc
  74e3d88fc61643eabbf5e2ac7b5768cf  libstdc++-v3/testsuite/performance/22_locale/narrow_widen_char.cc
  f10b025af8a395645cb1ed793d40829c  libstdc++-v3/testsuite/performance/22_locale/narrow_widen_wchar_t.cc
*************** a7e9f7509d2c062de0c3a17b5fa604f0  libstd
*** 21794,21799 ****
--- 26109,26117 ----
  ea5c013dafafd2131033fee30718dc44  libstdc++-v3/testsuite/performance/23_containers/container_benchmark.cc
  9c5c84029b4c475e0a04062d9e603629  libstdc++-v3/testsuite/performance/23_containers/list_create_fill_sort.cc
  f3e2ae77d86f5f45286400f96839ce9e  libstdc++-v3/testsuite/performance/23_containers/map_create_fill.cc
+ c1d7381fbfb3f916aa020eda01268edf  libstdc++-v3/testsuite/performance/23_containers/set_create_from_sorted.cc
+ 8d7676208faa059bc627c6616a03a889  libstdc++-v3/testsuite/performance/23_containers/set_insert_from_sorted.cc
+ 24f6b8c031caea4671c8f402fe08e1ad  libstdc++-v3/testsuite/performance/25_algorithms/search_n.cc
  e3d5f5441baf738e28d6855b56aacade  libstdc++-v3/testsuite/performance/26_numerics/complex_norm.cc
  e5713e65ffc718cdd5f42a56a6798cf2  libstdc++-v3/testsuite/performance/27_io/cout_insert_int.cc
  55c2e8c888574a223a15101cab26d82c  libstdc++-v3/testsuite/performance/27_io/filebuf_copy.cc
*************** b50281fef91e9cf9168e8d6fbdd10d09  libstd
*** 21804,21959 ****
  b298adcd1efdda16c35cbd26824be677  libstdc++-v3/testsuite/performance/27_io/fstream_seek_write.cc
  e059d5fcbdfff0c53f81b41c73642f8a  libstdc++-v3/testsuite/performance/27_io/ifstream_extract_float.cc
  a4af9ba571e9d7dfa3dded1a83f52e84  libstdc++-v3/testsuite/performance/27_io/ifstream_extract_int.cc
  85f709a9ebacfced21be387523d55301  libstdc++-v3/testsuite/performance/27_io/ifstream_getline.cc
  9765bc74692807cde25983fcf59aea57  libstdc++-v3/testsuite/performance/27_io/ofstream_insert_float.cc
  196e27f9c810c99ec3bd696873c1b893  libstdc++-v3/testsuite/performance/27_io/ofstream_insert_int.cc
  e44f08a4e0a1f56adf277a0546afde57  libstdc++-v3/testsuite/performance/27_io/stringbuf_overflow.cc
  10e2843fe41b2059ea3e13dd678f803b  libstdc++-v3/testsuite/printnow.c
! a0259f5888491cbe9f313febc25bd37c  libstdc++-v3/testsuite/testsuite_abi.cc
! fbcf2d298f422521029665241b0fdad7  libstdc++-v3/testsuite/testsuite_abi.h
! 6ac9befafb8ded96cdfc74427bf039d7  libstdc++-v3/testsuite/testsuite_allocator.cc
! 17a3a121ca30dace101e83cd838e8de3  libstdc++-v3/testsuite/testsuite_allocator.h
  954f62907f9ff6f328f9ec9d8aa915b3  libstdc++-v3/testsuite/testsuite_character.h
! 835152e83816f93ea8eed4db2581c60d  libstdc++-v3/testsuite/testsuite_hooks.cc
! 4245a2c4db89156f8950febe9b9b6546  libstdc++-v3/testsuite/testsuite_hooks.h
! fe5d818f916509fbd28f3e0227b33cee  libstdc++-v3/testsuite/testsuite_io.h
! 860203dc6c9d5393027bb348fe4313e4  libstdc++-v3/testsuite/testsuite_performance.h
! 8bbbcc230250b9e0c0d3b78d5297f471  libstdc++-v3/testsuite/thread/pthread1.cc
! 81d3914c3ce67ce87fca9d93227c9231  libstdc++-v3/testsuite/thread/pthread2.cc
! 30a0eeee35a3cc9691912707459227e0  libstdc++-v3/testsuite/thread/pthread3.cc
! b4b7a8ae821ece3f8b02f5732821d966  libstdc++-v3/testsuite/thread/pthread4.cc
! 6ac5c13b91e24e4f26662bfeedc9d59e  libstdc++-v3/testsuite/thread/pthread5.cc
! 5dc2f7f90dc116507f76f724d684c56b  libstdc++-v3/testsuite/thread/pthread6.cc
! ce1f2fefdc810942a939f6af0211afb1  libstdc++-v3/testsuite/thread/pthread7-rope.cc
! cad8927f9f17a1ba1b87d3f224cc9868  libtool.m4
! 2a21626a6520d08ba7959d0e7a08836d  ltcf-c.sh
! 2744bf8b7234beb5876238fdae263e52  ltcf-cxx.sh
! 3a32c8ce5a44baa195475e5ab54d1862  ltcf-gcj.sh
! 0ca2424a14242f7486263f176146c0e2  ltconfig
! 125aa9a4eda03171384f8d4301b17f89  ltmain.sh
! a280dbdc5dd885dc64ec6131efb66cdf  maintainer-scripts/ChangeLog
  31816563a48006f019a0dcc6f4175d16  maintainer-scripts/README
! 4d6297fdb211c207d899e8f2b7917e52  maintainer-scripts/crontab
  ef4b5d39023785696cb4b2cf6822bdc6  maintainer-scripts/doc_exclude
! 66d0b67f8efa2ebf1b9655eb11bf66bc  maintainer-scripts/gcc_release
  5a590c51b17d10747f3ce2694caf0ff2  maintainer-scripts/maintainer-addresses
! f008f5ed6466c5f78ff0ad81fb3bff6e  maintainer-scripts/snapshot-README
! d955665d1385a68557479da60bfc555c  maintainer-scripts/snapshot-index.html
! 66dd1db78f5632595666f0764c94f980  maintainer-scripts/update_version
! ba9d744bbedbbc30532a795425bf7b63  maintainer-scripts/update_web_docs
  898da0420f60478a6a6081da2a4b4c80  maintainer-scripts/update_web_docs_libstdcxx
  7b96d9939a11fd753d6876b858ac1c3b  maintainer-scripts/update_web_docs_old
! 0bc137ffee1670b4ec8592f36aa47419  missing
  fbe2467afef81c41c166173adeb0ee20  mkdep
  cfbd1f0cc32bb4f6feb804354401e61a  mkinstalldirs
  c71ddf72c059891ca0bd1727f5aa0de1  move-if-change
  e8b74bd777dcff9aa7eaff1cff0208f7  symlink-tree
  7588c5103af27cc93537977f059f52dc  ylwrap
! 52b727c537cf46e774aeec7b46263254  zlib/ChangeLog
! 01b5aa0f86d79f5cda85866f15aaedec  zlib/ChangeLog.gcj
! 5366a082b8b22317d2c9e33d600ca2d7  zlib/FAQ
! b0f99029693b93907cb781d236522b4b  zlib/INDEX
! 3ef4d3d2bad64b82a1605797b2e1b4bd  zlib/Make_vms.com
! e459e4181e24e04259f36aea90b59429  zlib/Makefile.am
! 8787fcec817e6e87f45dd05bd7eefdce  zlib/Makefile.in
! e1793b04d7a50f35ebabc5359627f7cd  zlib/Makefile.riscos
! 1e4bf4e7db7f0c2420bdb1180f903568  zlib/README
! 73f920c1ad54cbaf2b332f65f6357d35  zlib/acinclude.m4
! 7d46bbfa79fb63f77421de15531b2e6e  zlib/aclocal.m4
! 9385dfb33ab4e5031f1842c205f07d76  zlib/adler32.c
! 2bfd52ee10a6ef2f0ce5c33f929067e9  zlib/algorithm.txt
! ca0dcea963fba90777a78edebaceba63  zlib/amiga/Makefile.pup
! b6e62a6d79cc0bbbcafccae8b38a5fd3  zlib/amiga/Makefile.sas
! 48a173ae445579be3a3e8dcd2e04fb93  zlib/compress.c
! 4544fb821a4d16128b32820bdf3dfe35  zlib/configure
! 1022e635d79fb0ec2e8a94a5f2a1d639  zlib/configure.in
! f5fafd382947c792e8f4eadcc45155dc  zlib/contrib/README.contrib
! 14ae17bbe065db6ad9b6d4ace2a785a3  zlib/contrib/asm386/gvmat32.asm
! 171332db6e530138df4beee16954cdf4  zlib/contrib/asm386/gvmat32c.c
! f67921a670aadc348e4f9af4a7b8331d  zlib/contrib/asm386/mkgvmt32.bat
! a3e7897e53663b2586af601ba644dff6  zlib/contrib/asm386/zlibvc.def
! 41bb6224ee4c1f4a135387fe39bd9ec4  zlib/contrib/asm386/zlibvc.dsp
! 0851b893cd4a5b29eae16c8970656435  zlib/contrib/asm386/zlibvc.dsw
  b0cb77005e7a1be0d723626a8dc2a81d  zlib/contrib/asm586/README.586
  a132faa3fcddfd2f03d30f792eb587f0  zlib/contrib/asm586/match.S
  b892e5050fcd1e4f35f4bdd3c052baea  zlib/contrib/asm686/README.686
  333cc17c9afd47fcfa3edb9229f6161d  zlib/contrib/asm686/match.S
! 435599728a4e8a530f210b15a32955d3  zlib/contrib/delphi/zlib.mak
! cd801a97d8b2537dc7130c61e5bcbaac  zlib/contrib/delphi/zlibdef.pas
! 2a1aa28cb278d99ab68ae5eaf6e96063  zlib/contrib/delphi2/d_zlib.bpr
! 1d303ed1fa78c4c1e7faa3672a38476e  zlib/contrib/delphi2/d_zlib.cpp
! 06c6f30fcac3064a4045255d2ddf77da  zlib/contrib/delphi2/readme.txt
! d6c91fb94ed1a97b4c94f1c0656f71da  zlib/contrib/delphi2/zlib.bpg
! 855d8b898841a5b6fe3ed0abde9674ca  zlib/contrib/delphi2/zlib.bpr
! 680da3045cd172dcf50da3beadb2fe2d  zlib/contrib/delphi2/zlib.cpp
! 65777f4d0773469435b5c8b6b2fdbda9  zlib/contrib/delphi2/zlib.pas
! a4a0c3aae1f955b4176db09f5b8d3a33  zlib/contrib/delphi2/zlib32.bpr
! 2e4de0d1294b23d953222bf6b03bf1d5  zlib/contrib/delphi2/zlib32.cpp
  a20e40dae1e8b28ef2ec9ed98fdc8a03  zlib/contrib/iostream/test.cpp
! f4c240068ed621d04a692505696ccd1f  zlib/contrib/iostream/zfstream.cpp
! e4fef61a0e1b93739638e3e3750e8ca3  zlib/contrib/iostream/zfstream.h
  446f6bce2e16dfd9163982c3701f3e91  zlib/contrib/iostream2/zstream.h
! 865c251e8bb302dc69477f6fa53df6db  zlib/contrib/iostream2/zstream_test.cpp
! a8fb894b4f577847259856b8e7cb2bea  zlib/contrib/minizip/ChangeLogUnzip
! 5ee5c4eefaa8f1383901e969d3348307  zlib/contrib/minizip/Makefile
! 266701d2ee4d98d198d08908a353e4f5  zlib/contrib/minizip/miniunz.c
! fc4ffea2da1de46159bb018143daa9cb  zlib/contrib/minizip/minizip.c
! 5b7ab36b17e1c7d0deac5f77697986f6  zlib/contrib/minizip/readme.txt
! 89e4863b9e613479424927f7dd2355ea  zlib/contrib/minizip/unzip.c
! 26821fc63c786956ee5318c5a167b386  zlib/contrib/minizip/unzip.def
! 406c13306669d3edf3f05e186a2b73d3  zlib/contrib/minizip/unzip.h
! 6650fba14a2fcd96876bbbf52b9b4194  zlib/contrib/minizip/zip.c
! ce80c375bec39edfea7f9875ffe5ca5f  zlib/contrib/minizip/zip.def
! 3e850ac9ec810117352b329e922c4125  zlib/contrib/minizip/zip.h
! a3e7897e53663b2586af601ba644dff6  zlib/contrib/minizip/zlibvc.def
! 41bb6224ee4c1f4a135387fe39bd9ec4  zlib/contrib/minizip/zlibvc.dsp
! 0851b893cd4a5b29eae16c8970656435  zlib/contrib/minizip/zlibvc.dsw
! adf5a88edccb508e160b757ea5d67c79  zlib/contrib/untgz/Makefile
! 12f104cca0a0d5b12f5565ca73054b27  zlib/contrib/untgz/makefile.w32
! 80a8d8b4684609a1cfefaf53ceba8fb2  zlib/contrib/untgz/untgz.c
! cf72071fa19c2ab6a5b206aa89610ba2  zlib/contrib/visual-basic.txt
! 05761c80dcdde80e31832970dc82a548  zlib/crc32.c
! 000f3a69908159989e724600286868aa  zlib/deflate.c
! 4afb823e163242e7d76d4f5a3486790f  zlib/deflate.h
! 9d4a4cf4325aec99563e63ec593a4402  zlib/descrip.mms
! f0ab121dbc6419b90a89cf8def99e063  zlib/example.c
! 67b6234fbee98a73b71417e6a842fa92  zlib/gzio.c
! 16aa3ae23616b186e1b7018ea4f07acb  zlib/infblock.c
! 60d510f86db744a37d144eba580be063  zlib/infblock.h
! cc06c9c71c36bfc0391d5743cc334e8c  zlib/infcodes.c
! dc0dae522d1e28b9bc2a6de851e7c87f  zlib/infcodes.h
! 32d3a4151df95036da55f28bb44c2507  zlib/inffast.c
! 1319958ad7de1e54cf997bb7068aac7f  zlib/inffast.h
! d98659e019ac71b8f67ba7a20c9874e9  zlib/inffixed.h
! b3db0036c586ab8352cede865549266d  zlib/inflate.c
! 7679ac6278b54f7a3d5b378684c286c4  zlib/inftrees.c
! 41d9f33ced69449798c9c4473cc38e6a  zlib/inftrees.h
! c068ce8e9f5d2fc82f87ceb289510998  zlib/infutil.c
! 36df671372d7123a45b1f64130ae5fb1  zlib/infutil.h
! f43a610a03a3e72cf743e1987102db03  zlib/maketree.c
! 7c35e94eb91138d5964c1dd174fe2550  zlib/minigzip.c
! 2548568beedb02a18eed8f2b40d92a9f  zlib/msdos/Makefile.b32
! 6abdd92d3ff1361583d667ec22a031c4  zlib/msdos/Makefile.bor
! 56a02bad51a24d54cf29a38073336862  zlib/msdos/Makefile.dj2
! c1ae71878435a4c96e0d4fc2d2c88c64  zlib/msdos/Makefile.emx
! 086cb5f527a8db93dbd78448a5b097df  zlib/msdos/Makefile.msc
! ad8ddb15faf12dec2951e04ab6e7bc1e  zlib/msdos/Makefile.tc
! 2528481ba6334e2b1b88edc336a2b70b  zlib/msdos/Makefile.w32
! 31585dc258e09736498d8c55c8b14b47  zlib/msdos/Makefile.wat
! dfcae4543639327bca2550c76a0a15a0  zlib/msdos/zlib.def
! 2a8c9019aeedf872c4f089a4eebf869f  zlib/msdos/zlib.rc
! 917f03501b5c91b584febc80633e1ec9  zlib/nt/Makefile.emx
! 9952fdfa0e525b885dcda180b10e3206  zlib/nt/Makefile.gcc
! cc408b499628123b74a1aff4229b92b5  zlib/nt/Makefile.nt
! 429a1632c32b98b686cf3d0d01baed5f  zlib/nt/zlib.dnt
! 311f1609f717d1bee1f0d4c23ea0d2a8  zlib/os2/Makefile.os2
! b917eb81b8d4b72931282aeedc167f83  zlib/os2/zlib.def
! 7ba85f469be721a12b8ecbd353351e27  zlib/trees.c
  9c26c55c8a5b7121850f83947a523c04  zlib/trees.h
! c4a3a389340f090fa565ba9b76ea6e1b  zlib/uncompr.c
! cc9143918ac85db3c0af7c9a989208b6  zlib/zconf.h
! f28cb22af8402371f5e8c58929a8fc83  zlib/zlib.3
! 85445686ee3da259397a3da4db3230e6  zlib/zlib.h
! 0ae17671cfdce8aa87c5a7213750942c  zlib/zlib.html
! eff4122305d2d95958dcb5a745563271  zlib/zutil.c
! f4584cd57e071e9a78ac0cae71c8fbc0  zlib/zutil.h
--- 26122,26510 ----
  b298adcd1efdda16c35cbd26824be677  libstdc++-v3/testsuite/performance/27_io/fstream_seek_write.cc
  e059d5fcbdfff0c53f81b41c73642f8a  libstdc++-v3/testsuite/performance/27_io/ifstream_extract_float.cc
  a4af9ba571e9d7dfa3dded1a83f52e84  libstdc++-v3/testsuite/performance/27_io/ifstream_extract_int.cc
+ 955c2e922097c231976861dc3a05170b  libstdc++-v3/testsuite/performance/27_io/ifstream_getline-2.cc
  85f709a9ebacfced21be387523d55301  libstdc++-v3/testsuite/performance/27_io/ifstream_getline.cc
  9765bc74692807cde25983fcf59aea57  libstdc++-v3/testsuite/performance/27_io/ofstream_insert_float.cc
  196e27f9c810c99ec3bd696873c1b893  libstdc++-v3/testsuite/performance/27_io/ofstream_insert_int.cc
  e44f08a4e0a1f56adf277a0546afde57  libstdc++-v3/testsuite/performance/27_io/stringbuf_overflow.cc
  10e2843fe41b2059ea3e13dd678f803b  libstdc++-v3/testsuite/printnow.c
! aa9c3a48e9dac385d2b66c96a4851e3d  libstdc++-v3/testsuite/testsuite_abi.cc
! 41e6ef0a6bd07b9cef62e926ec56b084  libstdc++-v3/testsuite/testsuite_abi.h
! 7ede0aa64eb177d2405da9559c5131b0  libstdc++-v3/testsuite/testsuite_allocator.cc
! 2e61fef5bdc67767f32e7ffc7e6c7062  libstdc++-v3/testsuite/testsuite_allocator.h
  954f62907f9ff6f328f9ec9d8aa915b3  libstdc++-v3/testsuite/testsuite_character.h
! 138c2d7dd47f4450ae465b5a3f0d7bff  libstdc++-v3/testsuite/testsuite_hooks.cc
! b2b7d2522e7d0e97aee939643eb58fb4  libstdc++-v3/testsuite/testsuite_hooks.h
! 8ad08649a6a468a2e9ac1442226ce141  libstdc++-v3/testsuite/testsuite_io.h
! 6ff8b42d37dcabbbcba65af6a135b5a8  libstdc++-v3/testsuite/testsuite_iterators.h
! 92a151d93cd6fa334e9d8fa890744de4  libstdc++-v3/testsuite/testsuite_performance.h
! a094ab3abec9960586316225bce62f92  libstdc++-v3/testsuite/testsuite_tr1.h
! bf89500003e55d950096a235e293f7e4  libstdc++-v3/testsuite/thread/18185.cc
! db941737b6e5b80db8a0e2925297b30a  libstdc++-v3/testsuite/thread/pthread1.cc
! b986fc8f65a2c2a3fc422b7e8e2b09ab  libstdc++-v3/testsuite/thread/pthread2.cc
! a41f0e4f1b7028e94ce801632429dbfa  libstdc++-v3/testsuite/thread/pthread3.cc
! 9676358c301bd2593b8cf8fcf3e04ffb  libstdc++-v3/testsuite/thread/pthread4.cc
! 0fb6b940d006df9dd27523b959f6844c  libstdc++-v3/testsuite/thread/pthread5.cc
! 5d532491e077fd152b263ed51f51e251  libstdc++-v3/testsuite/thread/pthread6.cc
! d232b58f46f52d69397704a61cc4fa47  libstdc++-v3/testsuite/thread/pthread7-rope.cc
! 0671ee2e404bbadc042fc9d35644877b  libstdc++-v3/testsuite/tr1/2_general_utilities/memory/enable_shared_from_this/not_shared.cc
! e15673f95e192255391f05d97fbd9ba5  libstdc++-v3/testsuite/tr1/2_general_utilities/memory/enable_shared_from_this/not_shared2.cc
! 4fef4a512f5f01ab6257fde78431e810  libstdc++-v3/testsuite/tr1/2_general_utilities/memory/enable_shared_from_this/not_shared3.cc
! 742670339d10f5d0fe1b7ce37630a3f8  libstdc++-v3/testsuite/tr1/2_general_utilities/memory/enable_shared_from_this/shared.cc
! 7eea130cebc2c6fa5c918ffc0a35ac0a  libstdc++-v3/testsuite/tr1/2_general_utilities/memory/enable_shared_from_this/still_shared.cc
! ccc4476cee6102beb0dc755634b16c83  libstdc++-v3/testsuite/tr1/2_general_utilities/memory/shared_ptr/assign/assign.cc
! 4b25f5c2b6194d879bf667bd835f7514  libstdc++-v3/testsuite/tr1/2_general_utilities/memory/shared_ptr/assign/auto_ptr.cc
! 1d4fd36fe4dd72e4e2010f116c8ce6fe  libstdc++-v3/testsuite/tr1/2_general_utilities/memory/shared_ptr/assign/auto_ptr_neg.cc
! 82dffb7a2bb25c1d83f9b7497d5a0aa9  libstdc++-v3/testsuite/tr1/2_general_utilities/memory/shared_ptr/assign/auto_ptr_rvalue_neg.cc
! 56a9f9a5aa77268969cff4c6c09e72af  libstdc++-v3/testsuite/tr1/2_general_utilities/memory/shared_ptr/assign/shared_ptr.cc
! f98f9d25e1421899243feb788092b264  libstdc++-v3/testsuite/tr1/2_general_utilities/memory/shared_ptr/assign/shared_ptr_neg.cc
! 6839e97488d1ba3b82ce9188ae35d2c5  libstdc++-v3/testsuite/tr1/2_general_utilities/memory/shared_ptr/comparison/cmp.cc
! 6180a12732d793733b6eb53ebcf8914d  libstdc++-v3/testsuite/tr1/2_general_utilities/memory/shared_ptr/cons/auto_ptr.cc
! c34cf7e6a0c54f6873ac089d82ac4046  libstdc++-v3/testsuite/tr1/2_general_utilities/memory/shared_ptr/cons/auto_ptr_neg.cc
! 6139b2225a9d1137b10b5a21359027b4  libstdc++-v3/testsuite/tr1/2_general_utilities/memory/shared_ptr/cons/copy.cc
! 63b2cfc19ee21994f02687c229bd30e8  libstdc++-v3/testsuite/tr1/2_general_utilities/memory/shared_ptr/cons/default.cc
! 0e609218c700537a66998184d5091093  libstdc++-v3/testsuite/tr1/2_general_utilities/memory/shared_ptr/cons/pointer.cc
! 19314837090352d69be84aef3c8278e6  libstdc++-v3/testsuite/tr1/2_general_utilities/memory/shared_ptr/cons/weak_ptr.cc
! 04417460e3512b635da2de7232c34402  libstdc++-v3/testsuite/tr1/2_general_utilities/memory/shared_ptr/cons/weak_ptr_expired.cc
! 4d4d0eb6064bb2da548185511d78bf77  libstdc++-v3/testsuite/tr1/2_general_utilities/memory/shared_ptr/dest/dest.cc
! 4d212ceda2522a5833bebeb2649e6592  libstdc++-v3/testsuite/tr1/2_general_utilities/memory/shared_ptr/misc/io.cc
! c4bb1c8d35dfca3adb85ead6faf4a225  libstdc++-v3/testsuite/tr1/2_general_utilities/memory/shared_ptr/misc/swap.cc
! dd3981feb95dab1766b904ac6686f3a1  libstdc++-v3/testsuite/tr1/2_general_utilities/memory/shared_ptr/modifiers/reset.cc
! 95eed2ae107a15cf696c1c6b30156267  libstdc++-v3/testsuite/tr1/2_general_utilities/memory/shared_ptr/modifiers/reset_neg.cc
! da54b57bca43d0ad7aa840d7497dcf9a  libstdc++-v3/testsuite/tr1/2_general_utilities/memory/shared_ptr/modifiers/swap.cc
! 2a5666abd251c0352146c79649ca30b1  libstdc++-v3/testsuite/tr1/2_general_utilities/memory/shared_ptr/modifiers/swap_neg.cc
! 69642cebb4e9ebc31a936b7d8ab418c4  libstdc++-v3/testsuite/tr1/2_general_utilities/memory/shared_ptr/observers/bool_conv.cc
! 362ab8cdcfcfbe7c231e2f47ba26fbc3  libstdc++-v3/testsuite/tr1/2_general_utilities/memory/shared_ptr/observers/get.cc
! 238133d161c4dce9f413dc4e4c9212b7  libstdc++-v3/testsuite/tr1/2_general_utilities/memory/shared_ptr/observers/unique.cc
! 5590b0e159c846652c9efaba813228e1  libstdc++-v3/testsuite/tr1/2_general_utilities/memory/shared_ptr/observers/use_count.cc
! dc7cd470fa9eb506d19ff02c507200b2  libstdc++-v3/testsuite/tr1/3_function_objects/bind/all_bound.cc
! 8f5f4efc6668e91b6f1466b3e2226a71  libstdc++-v3/testsuite/tr1/3_function_objects/bind/nested.cc
! 9c66fc7c9e10b1c1a545d4a08f22295c  libstdc++-v3/testsuite/tr1/3_function_objects/bind/placeholders.cc
! 9bf27677dc7766d8d9d3570225bfba23  libstdc++-v3/testsuite/tr1/3_function_objects/bind/ref.cc
! 158ded4cf1ad7c4e5f808b7e8cda48b5  libstdc++-v3/testsuite/tr1/3_function_objects/function/1.cc
! 84f482703eb9b9020c6074a721e483e6  libstdc++-v3/testsuite/tr1/3_function_objects/function/2.cc
! cf89b7fbc2d255d4bf35930bb0955a40  libstdc++-v3/testsuite/tr1/3_function_objects/function/3.cc
! 75a5bcdf410902f30425f2e38ba83754  libstdc++-v3/testsuite/tr1/3_function_objects/function/4.cc
! 08f91b6d1d56a67b2df5cd15278664d2  libstdc++-v3/testsuite/tr1/3_function_objects/function/5.cc
! 2c2ffa598baa008edaacec499e752b19  libstdc++-v3/testsuite/tr1/3_function_objects/function/6.cc
! de135b1d8ec693b621cd838214bd92a5  libstdc++-v3/testsuite/tr1/3_function_objects/function/7.cc
! 140b9b41af48e02a9195f1d522c1ac7b  libstdc++-v3/testsuite/tr1/3_function_objects/function/8.cc
! f960466f6b87ac7570cbef2312344af1  libstdc++-v3/testsuite/tr1/3_function_objects/function/9.cc
! c6dd3728baf4121091decbf9550185b8  libstdc++-v3/testsuite/tr1/3_function_objects/mem_fn.cc
! 75068613d006a958e7cc68b67a3c62de  libstdc++-v3/testsuite/tr1/3_function_objects/reference_wrapper/invoke.cc
! 0bb1e6bf059dd51fc65af7ccb1953734  libstdc++-v3/testsuite/tr1/3_function_objects/reference_wrapper/typedefs.cc
! aeb5621dce87ad6289d5678d0830d592  libstdc++-v3/testsuite/tr1/3_function_objects/result_of.cc
! 0ace16880429e5b4bae96a2f3d46d8fd  libstdc++-v3/testsuite/tr1/4_metaprogramming/array_modifications/remove_all_extents.cc
! 62a57ad9febc7a8a189471314afcadc8  libstdc++-v3/testsuite/tr1/4_metaprogramming/array_modifications/remove_extent.cc
! 4611f07e43ea6474207bf94b9995107b  libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_arithmetic/is_arithmetic.cc
! 5e20ba3eab6830555a30140707d49ff2  libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_arithmetic/typedefs.cc
! 2a7b1e7c08bb077798ab2d9e2f69d9a3  libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_compound/is_compound.cc
! 25aa1bf81362d4c8bd7455ec6cab2b8f  libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_compound/typedefs.cc
! 588f2c5184874cf7f434514e7d0f94c8  libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_fundamental/is_fundamental.cc
! 7933f9bd7d3b9e8443fb62d6b75d794e  libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_fundamental/typedefs.cc
! 005857b8562105491de5a0a5fd9ad671  libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_member_pointer/is_member_pointer.cc
! c4df3560722c378a855496060f0699b8  libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_member_pointer/typedefs.cc
! a174539968036f0b54b46d138a092bed  libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_object/is_object.cc
! f9a619016bf8fced78c53bca5e40f53f  libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_object/typedefs.cc
! 74076fe1c0aa4bde85872f6780557e7c  libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_scalar/is_scalar.cc
! 3372395b1ad010a08aa557ff0f6dbf31  libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_scalar/typedefs.cc
! 67f6131e1f5f966e8bf6e0eba5ac96c4  libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_union_or_class/is_union_or_class.cc
! 2b78d9012aab1e5cb9113539ece421d8  libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_union_or_class/typedefs.cc
! 0507aa357479e9284373112a37c64622  libstdc++-v3/testsuite/tr1/4_metaprogramming/const_volatile_modifications/add_const.cc
! f3b2796a3219a76267b016f8c7ec31c2  libstdc++-v3/testsuite/tr1/4_metaprogramming/const_volatile_modifications/add_cv.cc
! fbbed9cab28448152a1fabe7b321558a  libstdc++-v3/testsuite/tr1/4_metaprogramming/const_volatile_modifications/add_volatile.cc
! 4284652cb0005926fbbfb62f5a0db406  libstdc++-v3/testsuite/tr1/4_metaprogramming/const_volatile_modifications/remove_const.cc
! 9f22ada50b1ec6263032ca51c828caab  libstdc++-v3/testsuite/tr1/4_metaprogramming/const_volatile_modifications/remove_cv.cc
! ec104da6cfb025942bc945cc3b18c622  libstdc++-v3/testsuite/tr1/4_metaprogramming/const_volatile_modifications/remove_volatile.cc
! aa9826c874a36c0882752093cb0470ee  libstdc++-v3/testsuite/tr1/4_metaprogramming/helper_classes/true_false_type.cc
! ecb69da114c5413695ab7e46c3648c48  libstdc++-v3/testsuite/tr1/4_metaprogramming/helper_classes/true_false_type_typedefs.cc
! 7b139f0a6881ae3fa737184748665a0d  libstdc++-v3/testsuite/tr1/4_metaprogramming/helper_classes/typedefs.cc
! f8c24ac7a831dc603fccc192bc734f93  libstdc++-v3/testsuite/tr1/4_metaprogramming/other_transformations/aligned_storage/aligned_storage.cc
! 2489e3936273aef217768e05286e5c77  libstdc++-v3/testsuite/tr1/4_metaprogramming/other_transformations/aligned_storage/typedefs.cc
! ba4e5c99b89f3ba5c92376098b7e9417  libstdc++-v3/testsuite/tr1/4_metaprogramming/pointer_modifications/add_pointer.cc
! ab962dedb3f216fbcfb3a0b08c3bf8bc  libstdc++-v3/testsuite/tr1/4_metaprogramming/pointer_modifications/remove_pointer.cc
! f3fc1e45f574a94a0d68e0bd493e1134  libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_array/is_array.cc
! f8ad18f0f046688b1f6a0b7145855d4c  libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_array/typedefs.cc
! 23f75b01cfc35400059c7b4d4da43c76  libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_enum/is_enum.cc
! 2e7bfb22d9f08813b45672d6ce84eda7  libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_enum/typedefs.cc
! 5d7b7df020c316438b6c9e889471b511  libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_floating_point/is_floating_point.cc
! 2c37fab3effda7fa1b38488bd29923e2  libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_floating_point/typedefs.cc
! 2abc07c075e33966ea0901534ba454a4  libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_function/is_function.cc
! 7ccabef418e4dc95afe96ecfe9192cd3  libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_function/typedefs.cc
! 7210b1bbbfa70afbb0b1aef38eb8521b  libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_integral/is_integral.cc
! 4af10896cb5387881d2ee356e048275a  libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_integral/typedefs.cc
! a0db04006cc482840f6ab5ac1e1a4e81  libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_member_function_pointer/is_member_function_pointer.cc
! f17b0a3a0941c088dc50a29dcb8f3a0a  libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_member_function_pointer/typedefs.cc
! fa790a7a1a10f9830afede377f1255fa  libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_member_object_pointer/is_member_object_pointer.cc
! 4f89884f578c62dc30d4b905b8edf09a  libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_member_object_pointer/typedefs.cc
! 4a61304d9d2f10f1c56bc60d75f7c316  libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_pointer/is_pointer.cc
! 28ba8260b46c823f0c761ab3413d1129  libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_pointer/typedefs.cc
! b500aa976671e80691ba8a585d1af3fe  libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_reference/is_reference.cc
! ae08ac5f710f9389325d2d7f74291dd3  libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_reference/typedefs.cc
! e86db9501d534f13492cf0753ed3260e  libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_void/is_void.cc
! cc7fb1494854ed2d9f3af29b07e3457c  libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_void/typedefs.cc
! 462c70125d80de8bc111181fcaaf1420  libstdc++-v3/testsuite/tr1/4_metaprogramming/reference_modifications/add_reference.cc
! 367b613f86b834ebf678bdf8e983d441  libstdc++-v3/testsuite/tr1/4_metaprogramming/reference_modifications/remove_reference.cc
! 99f54fe91e2301683de8d6d2d7bee489  libstdc++-v3/testsuite/tr1/4_metaprogramming/relationships_between_types/is_base_of/is_base_of.cc
! 82f3cc30c303cafaa51ab60ca9f5ffdb  libstdc++-v3/testsuite/tr1/4_metaprogramming/relationships_between_types/is_base_of/typedefs.cc
! 2181a24153c4f69edd9ce3fc90b7eb76  libstdc++-v3/testsuite/tr1/4_metaprogramming/relationships_between_types/is_convertible/is_convertible.cc
! 65a6f11870d6e800e294d3b47a1c5cd1  libstdc++-v3/testsuite/tr1/4_metaprogramming/relationships_between_types/is_convertible/typedefs.cc
! e5f3332e9ef53d7ef613ef683111778a  libstdc++-v3/testsuite/tr1/4_metaprogramming/relationships_between_types/is_same/is_same.cc
! 2e977c316cd690bb143224d9f2ba9fcc  libstdc++-v3/testsuite/tr1/4_metaprogramming/relationships_between_types/is_same/typedefs.cc
! f9420f964c31db5937bb6204cdfca49c  libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/alignment_of/alignment_of.cc
! f91c05c40061db9ddf5756721103e87e  libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/alignment_of/typedefs.cc
! 726db0be9e0480bb96e3bf908991f353  libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/extent/extent.cc
! aa8f457b8fa0ac55aa72a722d3e95f6d  libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/extent/typedefs.cc
! d1df88ff4c27f5dcbfd39f4144f303fe  libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_nothrow_assign/has_nothrow_assign.cc
! f968d6a0865e65575e8787fe06b6cd1d  libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_nothrow_assign/typedefs.cc
! 3f9418a1d6fd09c57cfd25ddc005c756  libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_nothrow_constructor/has_nothrow_constructor.cc
! a582f7b2c1b563e90a8963de68a43ae1  libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_nothrow_constructor/typedefs.cc
! 5e8dd499dd8354d8078905aa6e94e322  libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_nothrow_copy/has_nothrow_copy.cc
! af31550fc3364d1a76d383f3b4965ee7  libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_nothrow_copy/typedefs.cc
! 1cc0c5ab4ea19cf117d26c90d3e4c59e  libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_trivial_assign/has_trivial_assign.cc
! 80ef0bf1aec8287b56ce029c161a8204  libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_trivial_assign/typedefs.cc
! 6c57381124f9b8fabb66380f0cc9721a  libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_trivial_constructor/has_trivial_constructor.cc
! 759b9eaa96d570ce2b0cc1bd47974aed  libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_trivial_constructor/typedefs.cc
! c77964fe83508b1195c12d4c0e2ecd1d  libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_trivial_copy/has_trivial_copy.cc
! 83a8e4f0854817da73e2a89feb45d159  libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_trivial_copy/typedefs.cc
! 93eb9c97f39edf389d127d38e1016516  libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_trivial_destructor/has_trivial_destructor.cc
! 0dc2e5ba81b45c3302b8645fbacfebb8  libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/has_trivial_destructor/typedefs.cc
! 0eec15884e1304607644b30138a182d0  libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_abstract/is_abstract.cc
! c8abe94bb9d51f9b2a7fadcb744b7749  libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_abstract/typedefs.cc
! e8b3c27990d42d60cb8e075a9ca0d44c  libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_const/is_const.cc
! d0b697528e4d5c6a53d094fed76caa33  libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_const/typedefs.cc
! e35850c0c8d3199d27ea632939bd4901  libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_empty/is_empty.cc
! f1cbc7ee2468571e2511e92f3da24ccf  libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_empty/typedefs.cc
! 80181e7235650ab2468b40b1746cc9a3  libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_pod/is_pod.cc
! b9bf8f515bde36a9571430d4196b113c  libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_pod/typedefs.cc
! a3c53019bf08157da31f67824fef4142  libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_polymorphic/is_polymorphic.cc
! db7054630c79daf3f2f483c62ce3122b  libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_polymorphic/typedefs.cc
! 4a5b0b57a3b0d244e14a926ef20ce18e  libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_signed/is_signed.cc
! 5964288efc4b29fd804f68036062a281  libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_signed/typedefs.cc
! 29c226866149e4a5f85d80c6bb0b8467  libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_unsigned/is_unsigned.cc
! 3cf398f9812f4f98e576f5ad39c951ed  libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_unsigned/typedefs.cc
! 99fff8e81a3bcab633bf71ce3017530f  libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_volatile/is_volatile.cc
! 4a305ea0ac89d94add1c249b010747d2  libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_volatile/typedefs.cc
! 063942abdf40e47fcbf26e8d52a159f3  libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/rank/rank.cc
! 5363ece28b255961a88b794ac461da89  libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/rank/typedefs.cc
! fc6258ce43a67f908df22c510840669e  libstdc++-v3/testsuite/tr1/6_containers/array/capacity/empty.cc
! 88a2f319ebffd8b4559fcb2d377a0da6  libstdc++-v3/testsuite/tr1/6_containers/array/capacity/max_size.cc
! 88a2f319ebffd8b4559fcb2d377a0da6  libstdc++-v3/testsuite/tr1/6_containers/array/capacity/size.cc
! f12b16916d1f510d0e8a741977f30228  libstdc++-v3/testsuite/tr1/6_containers/array/comparison_operators/equal.cc
! 8164cdd00ba314779517c61be817865c  libstdc++-v3/testsuite/tr1/6_containers/array/comparison_operators/greater.cc
! d0e41c655c56d171eccf7427f14899d8  libstdc++-v3/testsuite/tr1/6_containers/array/comparison_operators/greater_or_equal.cc
! 693ebe9b168b738ced820c8cd0e05b55  libstdc++-v3/testsuite/tr1/6_containers/array/comparison_operators/less.cc
! ce205e18cb141d4749bb50b84a183eca  libstdc++-v3/testsuite/tr1/6_containers/array/comparison_operators/less_or_equal.cc
! 5877e59b100f2e15971f5072dfc1519c  libstdc++-v3/testsuite/tr1/6_containers/array/comparison_operators/not_equal.cc
! 39fec6d91683cb8f4bce8b3dafe3140a  libstdc++-v3/testsuite/tr1/6_containers/array/cons/aggregate_initialization.cc
! 169f416a9efdd6467f044ae6e713e7f7  libstdc++-v3/testsuite/tr1/6_containers/array/element_access/at_out_of_range.cc
! bb3a1a76687314e3c980a3bc74db7034  libstdc++-v3/testsuite/tr1/6_containers/array/iterators/end_is_one_past.cc
! 65ad0c3e1d03907375274bf46ce05e01  libstdc++-v3/testsuite/tr1/6_containers/array/requirements/contiguous.cc
! 780d476d943d240eee84db779d5d8071  libstdc++-v3/testsuite/tr1/6_containers/array/requirements/instantiate.cc
! ab99162834b031cff81822b7632775c5  libstdc++-v3/testsuite/tr1/6_containers/array/requirements/typedefs.cc
! 0220af3cb11a5c4188dfbabd3b0465dd  libstdc++-v3/testsuite/tr1/6_containers/array/requirements/zero_sized_arrays.cc
! 0d4e2c70eeca99b3b05fe2be0620bf53  libstdc++-v3/testsuite/tr1/6_containers/tuple/comparison_operators/comparisons.cc
! 337b2f84b527f7efd60bccd2fc6a874a  libstdc++-v3/testsuite/tr1/6_containers/tuple/cons/assignment.cc
! 1a14573465eb9aa57824a39f1e04b2a9  libstdc++-v3/testsuite/tr1/6_containers/tuple/cons/big_tuples.cc
! e9d167425ec2a216e3977bce5990f96b  libstdc++-v3/testsuite/tr1/6_containers/tuple/cons/constructor.cc
! e794b1a1240c9d62849c81ac0018b66a  libstdc++-v3/testsuite/tr1/6_containers/tuple/creation_functions/make_tuple.cc
! 26fe214abe53e4b12734dd9325c34f52  libstdc++-v3/testsuite/tr1/6_containers/tuple/creation_functions/tie.cc
! 7eec7f5ee1e3deb1e62da53965236ce8  libstdc++-v3/testsuite/tr1/6_containers/tuple/element_access/get.cc
! 3f07c39f0c6070d0b5dfa3d39c55988b  libstdc++-v3/testsuite/tr1/6_containers/tuple/tuple_element.cc
! 105843bbdef2eda520cad72ea0a81301  libstdc++-v3/testsuite/tr1/6_containers/tuple/tuple_size.cc
! dc9c95244bbad7b5b3b436ad6adee8bd  libstdc++-v3/testsuite/tr1/6_containers/unordered/find/map1.cc
! 9ae6f6804ad38dad63523c67bcc69804  libstdc++-v3/testsuite/tr1/6_containers/unordered/find/multimap1.cc
! 867fcb04b8c94c0ec303f907d3281cd0  libstdc++-v3/testsuite/tr1/6_containers/unordered/find/multiset1.cc
! 2913493aca89a650f7bb249a8c6aa850  libstdc++-v3/testsuite/tr1/6_containers/unordered/find/set1.cc
! 72816fc27824c6261d370e0754b954b6  libstdc++-v3/testsuite/tr1/6_containers/unordered/insert/array_syntax.cc
! fb112cebcdc1094fb99317333aea4087  libstdc++-v3/testsuite/tr1/6_containers/unordered/insert/map_range.cc
! a795a4b874466b88a5aa1c6afecade6c  libstdc++-v3/testsuite/tr1/6_containers/unordered/insert/map_single.cc
! 07d02d50f41419a77aadb169ca90ebc4  libstdc++-v3/testsuite/tr1/6_containers/unordered/insert/multimap_range.cc
! aa060818a639f8cc3015114f2230c0e9  libstdc++-v3/testsuite/tr1/6_containers/unordered/insert/multimap_single.cc
! d2e367a38724f0835331656b785835ba  libstdc++-v3/testsuite/tr1/6_containers/unordered/insert/multiset_range.cc
! 89d24888c975b735ceee6d5922b2f42f  libstdc++-v3/testsuite/tr1/6_containers/unordered/insert/multiset_single.cc
! 0762675c59c2aec12ec466cb881df800  libstdc++-v3/testsuite/tr1/6_containers/unordered/insert/set_range.cc
! 9d4302f26b4282b07dcd1e8cc1981eda  libstdc++-v3/testsuite/tr1/6_containers/unordered/insert/set_single.cc
! b6566a4c577e54892e7e0d6009ad0dcb  libstdc++-v3/testsuite/tr1/6_containers/unordered/instantiate/hash.cc
! dd3c974adeca696d80e6cc408f77e1ea  libstdc++-v3/testsuite/tr1/6_containers/unordered/instantiate/map.cc
! 78848b0d7099a09f724326dda03ced77  libstdc++-v3/testsuite/tr1/6_containers/unordered/instantiate/multimap.cc
! 30725a04a0e8746ee4445469ec30b7b6  libstdc++-v3/testsuite/tr1/6_containers/unordered/instantiate/multiset.cc
! 55f33fb353bcf53908ce06b19e7c6d8a  libstdc++-v3/testsuite/tr1/6_containers/unordered/instantiate/set.cc
! 152d647cd0255efebcc2de1f0d6ae4af  libstdc++-v3/testsuite/tr1/6_containers/utility/19535.cc
! 5b0ffbad7e882e2169ca99689f1289de  libstdc++-v3/testsuite/tr1/6_containers/utility/pair.cc
! abb40078801fc0b420d1b5b070ee34f7  libtool.m4
! 70621f7c1ae4069afe72e6226ffdb076  ltcf-c.sh
! 5c93bdeb57f31b7012362971a04eced8  ltcf-cxx.sh
! 403129ce656b6957340fda4b8f6d3ede  ltcf-gcj.sh
! 2250cc9bb551f02a350f08e1d495edf0  ltconfig
! 499075d5acb0d1e0f9399ee97543411b  ltmain.sh
! 8e798b137b9281fadf4439dc02018edd  maintainer-scripts/ChangeLog
  31816563a48006f019a0dcc6f4175d16  maintainer-scripts/README
! 1f7fb0775adeac040c7473672f42e96b  maintainer-scripts/crontab
  ef4b5d39023785696cb4b2cf6822bdc6  maintainer-scripts/doc_exclude
! 7af828e6a27a49424037401444a9027f  maintainer-scripts/gcc_release
  5a590c51b17d10747f3ce2694caf0ff2  maintainer-scripts/maintainer-addresses
! a3ec509ec604f41e60bf2e95a019672c  maintainer-scripts/update_version
! 8acb5a3f1b6e48b54be6b27cca1ef0b8  maintainer-scripts/update_web_docs
  898da0420f60478a6a6081da2a4b4c80  maintainer-scripts/update_web_docs_libstdcxx
  7b96d9939a11fd753d6876b858ac1c3b  maintainer-scripts/update_web_docs_old
! fd5dd60aa8cefab9462677280ea74a61  missing
  fbe2467afef81c41c166173adeb0ee20  mkdep
  cfbd1f0cc32bb4f6feb804354401e61a  mkinstalldirs
  c71ddf72c059891ca0bd1727f5aa0de1  move-if-change
  e8b74bd777dcff9aa7eaff1cff0208f7  symlink-tree
  7588c5103af27cc93537977f059f52dc  ylwrap
! ac81461263c340d1f6c7ed86a63b06de  zlib/.cvsignore
! 8cd1b8cb1b3a8c3e3fc1aa5b504e71da  zlib/ChangeLog
! 6e5a9690b9f9f7ad4c2ad62b5a0226be  zlib/ChangeLog.gcj
! 61fe02005a355bbf57d334aa849c1841  zlib/FAQ
! 79d2fd35dc9f76486c221139c83d3e45  zlib/INDEX
! 862b025c21bb5196a095e67906faaf90  zlib/Makefile.am
! dcae41d8f611113af73cc0dcad7cae14  zlib/Makefile.in
! 43f94d74339a76dfc2684d45f286092c  zlib/README
! 004a8c34eba1b805f836a09dd4759f34  zlib/acinclude.m4
! a403843e84cbc5899dab7dfeb2bd969f  zlib/aclocal.m4
! e80d6b0ef3bb11e6817c5122a490b5e2  zlib/adler32.c
! 20f77f458f4939b33398c7f344c8c8e6  zlib/algorithm.txt
! 33f38274c7dccea11499945914ff4b96  zlib/amiga/Makefile.pup
! 766c1859ab1eeb225c847fe6acbc71a9  zlib/amiga/Makefile.sas
! f7ebf8d1bc1a0f11f070a20a5c01da96  zlib/as400/bndsrc
! 3628684ad31e3af41fd589f1550a06df  zlib/as400/compile.clp
! 412296d33484adae3fb23cdfc5dd5336  zlib/as400/readme.txt
! 937055a92cd940147eb07dc147525765  zlib/as400/zlib.inc
! ce1f4a34e24939f1a31d486e448574a2  zlib/compress.c
! 06eaadfc09d2865de5332da75ddf2bd5  zlib/configure
! 0582263edc64a7c34d462117448c9ffb  zlib/configure.ac
! f2da47ac3c4da7befca1244ab818d202  zlib/contrib/README.contrib
! 89a38ec830feb81151374abd6ca0a910  zlib/contrib/ada/mtest.adb
! 658c9adb251482fa7fd131d6d89c8829  zlib/contrib/ada/read.adb
! 634c6e83e5fcd295e1a9a58c2e04fe47  zlib/contrib/ada/readme.txt
! 3ad5323e525a0576a9620b74009cf623  zlib/contrib/ada/test.adb
! b5a9848fa81ffa0c90cbb9105c414d13  zlib/contrib/ada/zlib-streams.adb
! 6d62771f89d01b85027947ca35e0bb6a  zlib/contrib/ada/zlib-streams.ads
! 6e0a263209c85eb754a12a5e05c88c6b  zlib/contrib/ada/zlib-thin.adb
! 9758e042bdc5fa96da7cb98a6dcb4976  zlib/contrib/ada/zlib-thin.ads
! f0edb41b7c3014ca38287115650ee910  zlib/contrib/ada/zlib.adb
! a9a94a215f5881e4fd715c9ecdc4fc80  zlib/contrib/ada/zlib.ads
! 0d7fa68ee7af61a3ee3a7372068c575b  zlib/contrib/ada/zlib.gpr
  b0cb77005e7a1be0d723626a8dc2a81d  zlib/contrib/asm586/README.586
  a132faa3fcddfd2f03d30f792eb587f0  zlib/contrib/asm586/match.S
  b892e5050fcd1e4f35f4bdd3c052baea  zlib/contrib/asm686/README.686
  333cc17c9afd47fcfa3edb9229f6161d  zlib/contrib/asm686/match.S
! 5cd923d6c5e717cdc43180aaa2eeed18  zlib/contrib/blast/Makefile
! b93c34189a9302e6f43c53c7d0277637  zlib/contrib/blast/README
! 0bd31a47d90cfaa14a527cb32c7293ea  zlib/contrib/blast/blast.c
! 9678605932ee6c765735b1b799c66e56  zlib/contrib/blast/blast.h
! f8dd3560a13a68bd15f5ca5a53c94ce9  zlib/contrib/blast/test.pk
! 1201a93782f0542d6fbf5134c1a5a4c6  zlib/contrib/blast/test.txt
! 1f871b1b3083fd510fa0df64d30d377f  zlib/contrib/delphi/ZLib.pas
! b02c46423595bd6358de3b7c5a148a88  zlib/contrib/delphi/ZLibConst.pas
! e43e458c50d36075813a1533d05a0bdc  zlib/contrib/delphi/readme.txt
! c148b8d9735dae8041cac72d1b119590  zlib/contrib/delphi/zlibd32.mak
! 3f7722a22ac2756368042371135b75e0  zlib/contrib/gzappend/gzappend.c
! 84ff1d06483d3da2af928cddcab88a1b  zlib/contrib/infback9/README
! 3b37bb6ceecd40c24ab92cdea9a79a0d  zlib/contrib/infback9/infback9.c
! bddf171f369cba08a4846b225c163164  zlib/contrib/infback9/infback9.h
! 1558f49aeca6376b7aa331add59e0e06  zlib/contrib/infback9/inffix9.h
! 8a4de1bca6c4182d025ea55062d125d9  zlib/contrib/infback9/inflate9.h
! 9a7e219eba925ffd7a939835b548ad25  zlib/contrib/infback9/inftree9.c
! 7921ae75c3af5d168887872373d804d4  zlib/contrib/infback9/inftree9.h
! cdc1426e7077a4703ab9fb83f7650084  zlib/contrib/inflate86/inffas86.c
! 93eb4cdb4ebeabbd5d74016d3c9c87c3  zlib/contrib/inflate86/inffast.S
  a20e40dae1e8b28ef2ec9ed98fdc8a03  zlib/contrib/iostream/test.cpp
! a73c28679044fdf0a8057c5193db8da0  zlib/contrib/iostream/zfstream.cpp
! 93f90ecc4d5299d820c3da08f7c7e7d2  zlib/contrib/iostream/zfstream.h
  446f6bce2e16dfd9163982c3701f3e91  zlib/contrib/iostream2/zstream.h
! d32476bde4e6d5f889092fdff6f8cdb0  zlib/contrib/iostream2/zstream_test.cpp
! 7ec7295bc3b6fe132dba702e0f1f8892  zlib/contrib/iostream3/README
! 06be56f0740f2a8dd9b9e04824709ad8  zlib/contrib/iostream3/TODO
! 8e843c6f8614b260b153091edf9af3ec  zlib/contrib/iostream3/test.cc
! dda5e85498fe3936fabd955b5504c74e  zlib/contrib/iostream3/zfstream.cc
! 938f58c179fabf6ff9ffb85395ada81f  zlib/contrib/iostream3/zfstream.h
! 2ee4e1faec356a2fc3c9abbbafb3ab2d  zlib/contrib/masm686/match.asm
! eeb8be443d18ec1e561da8b5daf30dd9  zlib/contrib/masmx86/gvmat32.asm
! 88e1473c2801cdc775914da136152d4a  zlib/contrib/masmx86/gvmat32c.c
! 5ea1e20f678b1cfdf41fd3781c566122  zlib/contrib/masmx86/inffas32.asm
! 77dceecf7e1b89850cb315a7d6c25edc  zlib/contrib/masmx86/mkasm.bat
! c1151cd52df47bb02e63765a2cf0aea5  zlib/contrib/masmx86/readme.txt
! 15988f1c931e99123112c513fdf4b7af  zlib/contrib/minizip/ChangeLogUnzip
! 064c9424ffab4af58c685140bb0fc3a0  zlib/contrib/minizip/Makefile
! a4fdb93427b21cba68aee91eba93d745  zlib/contrib/minizip/crypt.h
! 02dac74b13711af58d956b1e7225cfad  zlib/contrib/minizip/ioapi.c
! b8db58b055674a2de0801bd4594fd314  zlib/contrib/minizip/ioapi.h
! 804ad46ff7655849c8919ba3fd049749  zlib/contrib/minizip/iowin32.c
! 3dfa4595476eb691aecfec085e98bc4b  zlib/contrib/minizip/iowin32.h
! fe5eca2013b9558a21ec2baa50c79d04  zlib/contrib/minizip/miniunz.c
! 5bdb660ac23a41cbb9c6c71a9abe1141  zlib/contrib/minizip/minizip.c
! d3cd344a4eeb5f01bcfe2faca765d96f  zlib/contrib/minizip/unzip.c
! 5fa907b5ef8a4c582834ad5aedeed157  zlib/contrib/minizip/unzip.h
! 7758dc19b3891aaef7d0d2932766b8e5  zlib/contrib/minizip/zip.c
! fa2a34818249ea883620bd102bf46051  zlib/contrib/minizip/zip.h
! 6e41517081b62c5045e67146c2b5c3ec  zlib/contrib/pascal/example.pas
! 6f8616a2ea8e227457c9f191b4c71018  zlib/contrib/pascal/readme.txt
! c148b8d9735dae8041cac72d1b119590  zlib/contrib/pascal/zlibd32.mak
! 61f7fde9e1551c585ffc7acc73adaefc  zlib/contrib/pascal/zlibpas.pas
! a24c2a64fd0dd7fbd4efcda584c6dbb2  zlib/contrib/puff/Makefile
! 948659135181da512e6c37dd759d142d  zlib/contrib/puff/README
! b2acfae50accbc94efc1e5db5c9edd7c  zlib/contrib/puff/puff.c
! 83b240a60ad08d0843cd59130514d11e  zlib/contrib/puff/puff.h
! b1319227312f62c24d98d619b417a43b  zlib/contrib/puff/zeros.raw
! 169a4e6570c644e3e324d2386803213c  zlib/contrib/testzlib/testzlib.c
! c1315cf3ad6a718d2abeef2d0407b531  zlib/contrib/testzlib/testzlib.sln
! da7e61f0bbad09df93ab022824c8b0f6  zlib/contrib/testzlib/testzlib.vcproj
! 45070687ecca4a8953f666b91a4b54f4  zlib/contrib/untgz/Makefile
! d3be2a78c4fd759d1578b6d91f8430c1  zlib/contrib/untgz/Makefile.msc
! a39733fd70e850e4fc7fb6c71bec515b  zlib/contrib/untgz/untgz.c
! 94928575e535e4057290970b885627f0  zlib/contrib/visual-basic.txt
! b11f9afab73c5a2cca7834dfb7a8086e  zlib/contrib/vstudio/readme.txt
! 335526147221cd74a1f4af7c0b4a1467  zlib/contrib/vstudio/vc7/miniunz.vcproj
! 735ae5a3cfaf8ff75714724a8bbe788f  zlib/contrib/vstudio/vc7/minizip.vcproj
! 0128769b1d3921b08092f112386e2f5e  zlib/contrib/vstudio/vc7/zlib.rc
! 939b8eacbaaffe7bafda17e429494b57  zlib/contrib/vstudio/vc7/zlibstat.vcproj
! d9490d2a83389ca4942de759c3dd5e0f  zlib/contrib/vstudio/vc7/zlibvc.def
! 360612ac001f676b657c009e03bcb054  zlib/contrib/vstudio/vc7/zlibvc.sln
! 646210f700b91f81e3c91c99379eeced  zlib/contrib/vstudio/vc7/zlibvc.vcproj
! 4e9b77aca44ad3e1ed2f4dd46a3a279a  zlib/crc32.c
! 4d1cfa258e52f3f91b09afdba248fec5  zlib/crc32.h
! a8a5f084b23524063ae941c6736c85c3  zlib/deflate.c
! cd28c3f31c103016473ac4a103dce491  zlib/deflate.h
! 9ad04e19800e008de881e26b679a6ffc  zlib/example.c
! cea606c8ee05cf160f16e3586c27ae6c  zlib/gzio.c
! d7ba523b64854cc5b3e31fd1658c6b4f  zlib/infback.c
! 0d09de8137d54974a05f79af7dccc2a4  zlib/inffast.c
! 6829902d95364faa2e740e7359a50c30  zlib/inffast.h
! 28aabce27feb2810caf634a39abb9d8b  zlib/inffixed.h
! 0c50e143ca4d5a440acd7b22be1d2371  zlib/inflate.c
! 803cea7942860089772be09a135575d2  zlib/inflate.h
! ddcf5b70e01c10fd385285c616c9c004  zlib/inftrees.c
! cac79f654a753d3f690b89e2c4d9968a  zlib/inftrees.h
! ff87b3909649459d2dc1ce814d2ed4f2  zlib/minigzip.c
! 367a6681620b24f35b9f7ea8052ded02  zlib/msdos/Makefile.bor
! 4f19e137e3e8d914e11e6a3ee6a573e6  zlib/msdos/Makefile.dj2
! 99fda4c0fbbf08a0e28661ef73637acd  zlib/msdos/Makefile.emx
! 48686747348b407b05482812dd24dacf  zlib/msdos/Makefile.msc
! bfc4da357339a32c6eb0e6ff32e914be  zlib/msdos/Makefile.tc
! e64d29c29123dfacf3918fa6f1dae5a4  zlib/old/Make_vms.com
! e1793b04d7a50f35ebabc5359627f7cd  zlib/old/Makefile.riscos
! a86ba4247d255810b001c53b4d0512f6  zlib/old/README
! cbf38eb0d95e0f43faf627cf42a680a7  zlib/old/descrip.mms
! ca7056eeceb590882d508f85d6709826  zlib/old/os2/Makefile.os2
! b917eb81b8d4b72931282aeedc167f83  zlib/old/os2/zlib.def
! e21bd4d2d67ee4030af03bc0e2825017  zlib/old/zlib.html
! ebe5f83fdc4f5a1cc4cba8d1f94f470f  zlib/qnx/package.qpg
! 9ff77eea1ab5b8dab595e0295ccb4af2  zlib/trees.c
  9c26c55c8a5b7121850f83947a523c04  zlib/trees.h
! 493f9abed520d7300ecc4653a6d36056  zlib/uncompr.c
! 0c45f7ab57cd6427be2c6385d71d42b0  zlib/win32/DLL_FAQ.txt
! c059de64a10de2a36c6532b69264e96f  zlib/win32/Makefile.bor
! a8f9f13405e6246901020800f625b42b  zlib/win32/Makefile.emx
! 5fda3b362c91ca815dbe58fc690fd05c  zlib/win32/Makefile.gcc
! c037b7eba51b3378b724c0aa1835b08c  zlib/win32/Makefile.msc
! fc995731322e520fc79d35a78fefe0c5  zlib/win32/zlib.def
! b6cc8f40a98c6b1ffe71adb7602ddcc4  zlib/win32/zlib1.rc
! 88dcf60ee59ec5e265f480382791b51e  zlib/zconf.h
! a0644fed3bca8b6ade608599eaba3a15  zlib/zconf.in.h
! 11e065eba21365b451e11989ef2ac972  zlib/zlib.3
! f593a2c4c459dfef5a073fb4a3f6611f  zlib/zlib.h
! c2aafae0d5775601534652f61e57c1e2  zlib/zutil.c
! 2de1cb29852f4fcd7c170ba0b3f3af06  zlib/zutil.h
diff -Nrcpad gcc-3.4.3/Makefile.def gcc-4.0.0/Makefile.def
*** gcc-3.4.3/Makefile.def	Wed Jan 14 20:09:37 2004
--- gcc-4.0.0/Makefile.def	Mon Jan 17 23:50:25 2005
*************** AutoGen definitions Makefile.tpl;
*** 25,38 ****
  // that recursive target in its Makefile.
  
  build_modules= { module= libiberty; };
  
  host_modules= { module= ash; };
  host_modules= { module= autoconf; };
  host_modules= { module= automake; };
  host_modules= { module= bash; };
! host_modules= { module= bfd; };
! host_modules= { module= opcodes; };
! host_modules= { module= binutils; };
  host_modules= { module= bison; no_check_cross= true; };
  host_modules= { module= byacc; no_check_cross= true; };
  host_modules= { module= bzip2; };
--- 25,45 ----
  // that recursive target in its Makefile.
  
  build_modules= { module= libiberty; };
+ build_modules= { module= bison; };
+ build_modules= { module= byacc; };
+ build_modules= { module= flex; };
+ build_modules= { module= m4; };
+ build_modules= { module= texinfo; };
+ build_modules= { module= fixincludes;
+ 		 extra_configure_args='--target=$(target)'; };
  
  host_modules= { module= ash; };
  host_modules= { module= autoconf; };
  host_modules= { module= automake; };
  host_modules= { module= bash; };
! host_modules= { module= bfd; bootstrap=true; };
! host_modules= { module= opcodes; bootstrap=true; };
! host_modules= { module= binutils; bootstrap=true; };
  host_modules= { module= bison; no_check_cross= true; };
  host_modules= { module= byacc; no_check_cross= true; };
  host_modules= { module= bzip2; };
*************** host_modules= { module= fastjar; no_chec
*** 44,51 ****
  host_modules= { module= fileutils; };
  host_modules= { module= findutils; };
  host_modules= { module= find; };
  host_modules= { module= flex; no_check_cross= true; };
! host_modules= { module= gas; };
  host_modules= { module= gawk; };
  host_modules= { module= gettext; };
  host_modules= { module= gnuserv; };
--- 51,67 ----
  host_modules= { module= fileutils; };
  host_modules= { module= findutils; };
  host_modules= { module= find; };
+ host_modules= { module= fixincludes;
+ 		missing= info;
+ 		missing= dvi;
+ 		missing= TAGS;
+ 		missing= install-info;
+ 		missing= installcheck; };
  host_modules= { module= flex; no_check_cross= true; };
! host_modules= { module= gas; bootstrap=true; };
! host_modules= { module= gcc; bootstrap=true; 
! 		target="`if [ -f gcc/stage_last ]; then echo quickstrap ; else echo all; fi`";
! 		extra_make_flags="$(EXTRA_GCC_FLAGS)"; };
  host_modules= { module= gawk; };
  host_modules= { module= gettext; };
  host_modules= { module= gnuserv; };
*************** host_modules= { module= gprof; };
*** 53,65 ****
  host_modules= { module= gzip; };
  host_modules= { module= hello; };
  host_modules= { module= indent; };
! host_modules= { module= intl; };
  host_modules= { module= tcl;
                  missing=mostlyclean; };
  host_modules= { module= itcl; };
! host_modules= { module= ld; };
  host_modules= { module= libgui; };
! host_modules= { module= libiberty; };
  host_modules= { module= libtool; };
  host_modules= { module= m4; };
  host_modules= { module= make; };
--- 69,82 ----
  host_modules= { module= gzip; };
  host_modules= { module= hello; };
  host_modules= { module= indent; };
! host_modules= { module= intl; bootstrap=true; };
  host_modules= { module= tcl;
                  missing=mostlyclean; };
  host_modules= { module= itcl; };
! host_modules= { module= ld; bootstrap=true; };
! host_modules= { module= libcpp; bootstrap=true; };
  host_modules= { module= libgui; };
! host_modules= { module= libiberty; bootstrap=true; };
  host_modules= { module= libtool; };
  host_modules= { module= m4; };
  host_modules= { module= make; };
*************** host_modules= { module= time; };
*** 83,94 ****
  host_modules= { module= uudecode; };
  host_modules= { module= wdiff; };
  host_modules= { module= zip; no_check_cross=true; };
! host_modules= { module= zlib; no_install=true; no_check=true; };
! host_modules= { module= gdb; with_x=true; };
! host_modules= { module= expect; with_x=true; };
! host_modules= { module= guile; with_x=true; };
! host_modules= { module= tk; with_x=true; };
! host_modules= { module= tix; with_x=true; };
  host_modules= { module= libtermcap; no_check=true; 
                  missing=mostlyclean;
                  missing=clean;
--- 100,110 ----
  host_modules= { module= uudecode; };
  host_modules= { module= wdiff; };
  host_modules= { module= zip; no_check_cross=true; };
! host_modules= { module= zlib; no_install=true; no_check=true; bootstrap=true; };
! host_modules= { module= gdb; extra_make_flags="$(X11_FLAGS_TO_PASS)"; };
! host_modules= { module= expect; extra_make_flags="$(X11_FLAGS_TO_PASS)"; };
! host_modules= { module= guile; extra_make_flags="$(X11_FLAGS_TO_PASS)"; };
! host_modules= { module= tk; extra_make_flags="$(X11_FLAGS_TO_PASS)"; };
  host_modules= { module= libtermcap; no_check=true; 
                  missing=mostlyclean;
                  missing=clean;
*************** host_modules= { module= libtermcap; no_c
*** 97,104 ****
  host_modules= { module= utils; no_check=true; };
  
  target_modules = { module= libstdc++-v3; raw_cxx=true; };
  target_modules = { module= newlib; };
! target_modules = { module= libf2c; };
  target_modules = { module= libobjc; };
  target_modules = { module= libtermcap; no_check=true; stage=true;
                     missing=mostlyclean;
--- 113,121 ----
  host_modules= { module= utils; no_check=true; };
  
  target_modules = { module= libstdc++-v3; raw_cxx=true; };
+ target_modules = { module= libmudflap; };
  target_modules = { module= newlib; };
! target_modules = { module= libgfortran; };
  target_modules = { module= libobjc; };
  target_modules = { module= libtermcap; no_check=true; stage=true;
                     missing=mostlyclean;
*************** target_modules = { module= libtermcap; n
*** 107,113 ****
                     missing=maintainer-clean; };
  target_modules = { module= winsup; };
  target_modules = { module= libgloss; no_check=true; };
! target_modules = { module= libiberty; stage=true; };
  target_modules = { module= gperf; };
  target_modules = { module= examples; no_check=true; no_install=true; };
  target_modules = { module= libffi; };
--- 124,130 ----
                     missing=maintainer-clean; };
  target_modules = { module= winsup; };
  target_modules = { module= libgloss; no_check=true; };
! target_modules = { module= libiberty; };
  target_modules = { module= gperf; };
  target_modules = { module= examples; no_check=true; no_install=true; };
  target_modules = { module= libffi; };
*************** target_modules = { module= zlib; stage=t
*** 116,121 ****
--- 133,139 ----
  target_modules = { module= boehm-gc; };
  target_modules = { module= qthreads; };
  target_modules = { module= rda; };
+ target_modules = { module= libada; };
  
  // These are (some of) the make targets to be done in each subdirectory.
  // Not all; these are the ones which don't have special options.
*************** recursive_targets = { make_target= info;
*** 125,130 ****
--- 143,150 ----
                        depend=configure; };
  recursive_targets = { make_target= dvi; 
                        depend=configure; };
+ recursive_targets = { make_target= html; 
+                       depend=configure; };
  recursive_targets = { make_target= TAGS; 
                        depend=configure; };
  recursive_targets = { make_target= install-info; 
*************** flags_to_pass = { flag= BISON ; };
*** 172,177 ****
--- 192,198 ----
  flags_to_pass = { flag= CC_FOR_BUILD ; };
  flags_to_pass = { flag= CXX_FOR_BUILD ; };
  flags_to_pass = { flag= EXPECT ; };
+ flags_to_pass = { flag= FLEX ; };
  flags_to_pass = { flag= INSTALL ; };
  flags_to_pass = { flag= INSTALL_DATA ; };
  flags_to_pass = { flag= INSTALL_PROGRAM ; };
*************** flags_to_pass = { flag= AR_FOR_TARGET ; 
*** 197,209 ****
--- 218,483 ----
  flags_to_pass = { flag= AS_FOR_TARGET ; };
  flags_to_pass = { flag= CC_FOR_TARGET ; };
  flags_to_pass = { flag= CFLAGS_FOR_TARGET ; };
+ flags_to_pass = { flag= CPPFLAGS_FOR_TARGET ; };
  flags_to_pass = { flag= CXX_FOR_TARGET ; };
  flags_to_pass = { flag= CXXFLAGS_FOR_TARGET ; };
  flags_to_pass = { flag= DLLTOOL_FOR_TARGET ; };
  flags_to_pass = { flag= GCJ_FOR_TARGET ; };
+ flags_to_pass = { flag= GFORTRAN_FOR_TARGET ; };
  flags_to_pass = { flag= LD_FOR_TARGET ; };
  flags_to_pass = { flag= LIBCFLAGS_FOR_TARGET ; };
  flags_to_pass = { flag= LIBCXXFLAGS_FOR_TARGET ; };
  flags_to_pass = { flag= NM_FOR_TARGET ; };
  flags_to_pass = { flag= RANLIB_FOR_TARGET ; };
  flags_to_pass = { flag= WINDRES_FOR_TARGET ; };
+ 
+ // Inter-module dependencies
+ 
+ // Build modules
+ dependencies = { module=all-build-bison; on=all-build-texinfo; };
+ dependencies = { module=all-build-byacc; on=all-build-texinfo; };
+ dependencies = { module=all-build-flex; on=all-build-texinfo; };
+ dependencies = { module=all-build-flex; on=all-build-bison; };
+ dependencies = { module=all-build-flex; on=all-build-byacc; };
+ dependencies = { module=all-build-flex; on=all-build-m4; };
+ dependencies = { module=all-build-libiberty; on=all-build-texinfo; };
+ dependencies = { module=all-build-m4; on=all-build-texinfo; };
+ dependencies = { module=all-build-fixincludes; on=all-build-libiberty; };
+ 
+ // Host modules specific to gcc.
+ dependencies = { module=configure-gcc; on=configure-intl; };
+ dependencies = { module=configure-gcc; on=configure-binutils; };
+ dependencies = { module=configure-gcc; on=configure-gas; };
+ dependencies = { module=configure-gcc; on=configure-ld; };
+ dependencies = { module=all-gcc; on=all-libiberty; hard=true; };
+ dependencies = { module=all-gcc; on=all-intl; };
+ dependencies = { module=all-gcc; on=all-build-texinfo; };
+ dependencies = { module=all-gcc; on=all-build-bison; };
+ dependencies = { module=all-gcc; on=all-build-byacc; };
+ dependencies = { module=all-gcc; on=all-build-flex; };
+ dependencies = { module=all-gcc; on=all-build-libiberty; };
+ dependencies = { module=all-gcc; on=all-build-fixincludes; };
+ dependencies = { module=all-gcc; on=all-binutils; };
+ dependencies = { module=all-gcc; on=all-gas; };
+ dependencies = { module=all-gcc; on=all-ld; };
+ dependencies = { module=all-gcc; on=all-zlib; };
+ dependencies = { module=all-gcc; on=all-libcpp; hard=true; };
+ dependencies = { module=all-gcc; on=all-libiberty; };
+ dependencies = { module=all-gcc; on=all-fixincludes; };
+ dependencies = { module=install-gcc ; on=install-fixincludes; };
+ 
+ dependencies = { module=configure-libcpp; on=configure-libiberty; hard=true; };
+ dependencies = { module=configure-libcpp; on=configure-intl; };
+ dependencies = { module=all-libcpp; on=all-libiberty; hard=true; };
+ dependencies = { module=all-libcpp; on=all-intl; };
+ 
+ dependencies = { module=all-fixincludes; on=all-libiberty; };
+ 
+ // Host modules specific to gdb.
+ dependencies = { module=configure-gdb; on=configure-itcl; };
+ dependencies = { module=configure-gdb; on=configure-tcl; };
+ dependencies = { module=configure-gdb; on=configure-tk; };
+ dependencies = { module=configure-gdb; on=configure-sim; };
+ dependencies = { module=all-gdb; on=all-libiberty; };
+ dependencies = { module=all-gdb; on=all-opcodes; };
+ dependencies = { module=all-gdb; on=all-bfd; };
+ dependencies = { module=all-gdb; on=all-readline; };
+ dependencies = { module=all-gdb; on=all-build-bison; };
+ dependencies = { module=all-gdb; on=all-build-byacc; };
+ dependencies = { module=all-gdb; on=all-sim; };
+ dependencies = { module=install-gdb; on=install-tcl; };
+ dependencies = { module=install-gdb; on=install-tk; };
+ dependencies = { module=install-gdb; on=install-itcl; };
+ dependencies = { module=install-gdb; on=install-libgui; };
+ 
+ dependencies = { module=configure-libgui; on=configure-tcl; };
+ dependencies = { module=configure-libgui; on=configure-tk; };
+ dependencies = { module=all-libgui; on=all-tcl; };
+ dependencies = { module=all-libgui; on=all-tk; };
+ dependencies = { module=all-libgui; on=all-itcl; };
+ 
+ // Host modules specific to binutils.
+ dependencies = { module=configure-bfd; on=configure-libiberty; hard=true; };
+ dependencies = { module=all-bfd; on=all-libiberty; };
+ dependencies = { module=all-bfd; on=all-intl; };
+ 
+ dependencies = { module=all-binutils; on=all-libiberty; };
+ dependencies = { module=all-binutils; on=all-opcodes; };
+ dependencies = { module=all-binutils; on=all-bfd; };
+ dependencies = { module=all-binutils; on=all-build-flex; };
+ dependencies = { module=all-binutils; on=all-build-bison; };
+ dependencies = { module=all-binutils; on=all-build-byacc; };
+ dependencies = { module=all-binutils; on=all-intl; };
+ 
+ // We put install-opcodes before install-binutils because the installed
+ // binutils might be on PATH, and they might need the shared opcodes
+ // library.
+ dependencies = { module=install-binutils; on=install-opcodes; };
+ 
+ // libopcodes depends on libbfd
+ dependencies = { module=install-opcodes; on=install-bfd; };
+ 
+ dependencies = { module=all-gas; on=all-libiberty; };
+ dependencies = { module=all-gas; on=all-opcodes; };
+ dependencies = { module=all-gas; on=all-bfd; };
+ dependencies = { module=all-gas; on=all-intl; };
+ dependencies = { module=all-gprof; on=all-libiberty; };
+ dependencies = { module=all-gprof; on=all-bfd; };
+ dependencies = { module=all-gprof; on=all-opcodes; };
+ dependencies = { module=all-gprof; on=all-intl; };
+ dependencies = { module=all-ld; on=all-libiberty; };
+ dependencies = { module=all-ld; on=all-bfd; };
+ dependencies = { module=all-ld; on=all-opcodes; };
+ dependencies = { module=all-ld; on=all-build-bison; };
+ dependencies = { module=all-ld; on=all-build-byacc; };
+ dependencies = { module=all-ld; on=all-build-flex; };
+ dependencies = { module=all-ld; on=all-intl; };
+ 
+ dependencies = { module=all-opcodes; on=all-bfd; };
+ dependencies = { module=all-opcodes; on=all-libiberty; };
+ 
+ // Other host modules in the 'src' repository.
+ dependencies = { module=all-dejagnu; on=all-tcl; };
+ dependencies = { module=all-dejagnu; on=all-expect; };
+ dependencies = { module=all-dejagnu; on=all-tk; };
+ dependencies = { module=configure-expect; on=configure-tcl; };
+ dependencies = { module=configure-expect; on=configure-tk; };
+ dependencies = { module=all-expect; on=all-tcl; };
+ dependencies = { module=all-expect; on=all-tk; };
+ 
+ // We put install-tcl before install-itcl because itcl wants to run a
+ // program on installation which uses the Tcl libraries.
+ dependencies = { module=configure-itcl; on=configure-tcl; };
+ dependencies = { module=configure-itcl; on=configure-tk; };
+ dependencies = { module=all-itcl; on=all-tcl; };
+ dependencies = { module=all-itcl; on=all-tk; };
+ dependencies = { module=install-itcl; on=install-tcl; };
+ 
+ dependencies = { module=configure-tk; on=configure-tcl; };
+ dependencies = { module=all-tk; on=all-tcl; };
+ 
+ dependencies = { module=all-sid; on=all-libiberty; };
+ dependencies = { module=all-sid; on=all-bfd; };
+ dependencies = { module=all-sid; on=all-opcodes; };
+ dependencies = { module=all-sid; on=all-tcl; };
+ dependencies = { module=all-sid; on=all-tk; };
+ dependencies = { module=install-sid; on=install-tcl; };
+ dependencies = { module=install-sid; on=install-tk; };
+ 
+ dependencies = { module=all-sim; on=all-libiberty; };
+ dependencies = { module=all-sim; on=all-bfd; };
+ dependencies = { module=all-sim; on=all-opcodes; };
+ dependencies = { module=all-sim; on=all-readline; };
+ dependencies = { module=all-sim; on=configure-gdb; };
+ 
+ // Other host modules.
+ dependencies = { module=all-fastjar; on=all-zlib; };
+ dependencies = { module=all-fastjar; on=all-build-texinfo; };
+ dependencies = { module=all-fastjar; on=all-libiberty; };
+ 
+ // Warning, these are not well tested.
+ dependencies = { module=all-autoconf; on=all-m4; };
+ dependencies = { module=all-autoconf; on=all-build-texinfo; };
+ dependencies = { module=all-automake; on=all-m4; };
+ dependencies = { module=all-automake; on=all-build-texinfo; };
+ dependencies = { module=all-automake; on=all-autoconf; };
+ dependencies = { module=all-bison; on=all-intl; };
+ dependencies = { module=all-bison; on=all-build-texinfo; };
+ dependencies = { module=all-diff; on=all-intl; };
+ dependencies = { module=all-diff; on=all-build-texinfo; };
+ dependencies = { module=all-fileutils; on=all-intl; };
+ dependencies = { module=all-fileutils; on=all-build-texinfo; };
+ dependencies = { module=all-flex; on=all-build-bison; };
+ dependencies = { module=all-flex; on=all-build-byacc; };
+ dependencies = { module=all-flex; on=all-intl; };
+ dependencies = { module=all-flex; on=all-m4; };
+ dependencies = { module=all-flex; on=all-build-texinfo; };
+ dependencies = { module=all-gzip; on=all-intl; };
+ dependencies = { module=all-gzip; on=all-zlib; };
+ dependencies = { module=all-gzip; on=all-build-texinfo; };
+ dependencies = { module=all-hello; on=all-intl; };
+ dependencies = { module=all-hello; on=all-build-texinfo; };
+ dependencies = { module=all-m4; on=all-intl; };
+ dependencies = { module=all-m4; on=all-build-texinfo; };
+ dependencies = { module=all-make; on=all-intl; };
+ dependencies = { module=all-make; on=all-build-texinfo; };
+ dependencies = { module=all-patch; on=all-build-texinfo; };
+ dependencies = { module=all-make; on=all-build-texinfo; };
+ dependencies = { module=all-prms; on=all-libiberty; };
+ dependencies = { module=all-recode; on=all-build-texinfo; };
+ dependencies = { module=all-sed; on=all-build-texinfo; };
+ dependencies = { module=all-send-pr; on=all-prms; };
+ dependencies = { module=all-tar; on=all-build-texinfo; };
+ dependencies = { module=all-uudecode; on=all-build-texinfo; };
+ 
+ // Target modules.  These can also have dependencies on the language
+ // environment (e.g. on libstdc++).
+ lang_env_dependencies = { module=boehm-gc; };
+ lang_env_dependencies = { module=gperf; cxx=true; };
+ lang_env_dependencies = { module=libada; };
+ lang_env_dependencies = { module=libgfortran; };
+ lang_env_dependencies = { module=libffi; };
+ lang_env_dependencies = { module=libjava; cxx=true; };
+ lang_env_dependencies = { module=libobjc; };
+ lang_env_dependencies = { module=libstdc++-v3; };
+ lang_env_dependencies = { module=zlib; };
+ 
+ dependencies = { module=configure-target-boehm-gc; on=configure-target-qthreads; };
+ dependencies = { module=configure-target-fastjar; on=configure-target-zlib; };
+ dependencies = { module=all-target-fastjar; on=all-target-zlib; };
+ dependencies = { module=all-target-fastjar; on=all-target-libiberty; };
+ dependencies = { module=configure-target-libjava; on=configure-target-zlib; };
+ dependencies = { module=configure-target-libjava; on=configure-target-boehm-gc; };
+ dependencies = { module=configure-target-libjava; on=configure-target-qthreads; };
+ dependencies = { module=configure-target-libjava; on=configure-target-libffi; };
+ dependencies = { module=all-target-libjava; on=all-fastjar; };
+ dependencies = { module=all-target-libjava; on=all-target-zlib; };
+ dependencies = { module=all-target-libjava; on=all-target-boehm-gc; };
+ dependencies = { module=all-target-libjava; on=all-target-qthreads; };
+ dependencies = { module=all-target-libjava; on=all-target-libffi; };
+ dependencies = { module=all-target-libobjc; on=all-target-libiberty; };
+ dependencies = { module=all-target-libstdc++-v3; on=all-target-libiberty; };
+ 
+ // Target modules in the 'src' repository.
+ lang_env_dependencies = { module=examples; };
+ lang_env_dependencies = { module=libtermcap; };
+ lang_env_dependencies = { module=rda; };
+ lang_env_dependencies = { module=winsup; };
+ lang_env_dependencies = { module=qthreads; };
+ 
+ dependencies = { module=all-target-libgloss; on=configure-target-newlib; };
+ dependencies = { module=all-target-winsup; on=all-target-libiberty; };
+ dependencies = { module=all-target-winsup; on=all-target-libtermcap; };
+ 
+ // Toplevel bootstrap
+ bootstrap_stage = {
+ 	id=1 ;
+ 	stage_configure_flags='--disable-intermodule \
+ 	  --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)"' ;
+ 	stage_make_flags='CFLAGS="$(STAGE1_CFLAGS)"' ; };
+ bootstrap_stage = {
+ 	id=2 ; prev=1 ;
+ 	bootstrap_target=bootstrap2 ;
+ 	stage_configure_flags="@stage2_werror_flag@" ;
+ 	stage_make_flags="" ; };
+ bootstrap_stage = {
+ 	id=3 ; prev=2 ; lean=1 ;
+ 	compare_target=compare ;
+ 	bootstrap_target=bootstrap ;
+ 	cleanstrap_target=cleanstrap ;
+ 	stage_configure_flags="@stage2_werror_flag@" ;
+ 	stage_make_flags="" ; };
+ bootstrap_stage = {
+ 	id=4 ; prev=3 ; lean=2 ;
+ 	compare_target=compare3 ;
+ 	bootstrap_target=bootstrap4 ;
+ 	stage_configure_flags="@stage2_werror_flag@" ;
+ 	stage_make_flags="" ; };
+ bootstrap_stage = {
+ 	id=profile ; prev=1 ;
+ 	stage_configure_flags="@stage2_werror_flag@" ;
+ 	stage_make_flags='CFLAGS="$(BOOT_CFLAGS) -fprofile-generate"' ; };
+ bootstrap_stage = {
+ 	id=feedback ; prev=1 ;
+ 	stage_configure_flags="@stage2_werror_flag@" ;
+ 	stage_make_flags='CFLAGS="$(BOOT_CFLAGS) -fprofile-use"' ; };
diff -Nrcpad gcc-3.4.3/Makefile.in gcc-4.0.0/Makefile.in
*** gcc-3.4.3/Makefile.in	Fri Nov  5 04:14:05 2004
--- gcc-4.0.0/Makefile.in	Thu Apr 21 07:04:10 2005
***************
*** 3,9 ****
  #
  # Makefile for directory with subdirs to build.
  #   Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
! #   1999, 2000, 2001, 2002, 2003 Free Software Foundation
  #
  # This file is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
--- 3,9 ----
  #
  # Makefile for directory with subdirs to build.
  #   Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
! #   1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation
  #
  # This file is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
*************** INSTALL = @INSTALL@
*** 65,76 ****
  INSTALL_PROGRAM = @INSTALL_PROGRAM@
  INSTALL_SCRIPT = @INSTALL_SCRIPT@
  INSTALL_DATA = @INSTALL_DATA@
  
  # -------------------------------------------------
  # Miscellaneous non-standard autoconf-set variables
  # -------------------------------------------------
  
- links=@configlinks@
  # The file containing GCC's version number.
  gcc_version_trigger = @gcc_version_trigger@
  gcc_version = @gcc_version@
--- 65,77 ----
  INSTALL_PROGRAM = @INSTALL_PROGRAM@
  INSTALL_SCRIPT = @INSTALL_SCRIPT@
  INSTALL_DATA = @INSTALL_DATA@
+ LN = @LN@
+ LN_S = @LN_S@
  
  # -------------------------------------------------
  # Miscellaneous non-standard autoconf-set variables
  # -------------------------------------------------
  
  # The file containing GCC's version number.
  gcc_version_trigger = @gcc_version_trigger@
  gcc_version = @gcc_version@
*************** BUILD_SUBDIR = @build_subdir@
*** 111,121 ****
--- 112,185 ----
  # directories built for the build system.
  BUILD_CONFIGARGS = @build_configargs@
  
+ # This is the list of variables to export in the environment when
+ # configuring any subdirectory.  It must also be exported whenever
+ # recursing into a build directory in case that directory's Makefile
+ # re-runs configure.
+ BASE_EXPORTS = \
+ 	FLEX="$(FLEX)"; export FLEX; \
+ 	LEX="$(LEX)"; export LEX; \
+ 	BISON="$(BISON)"; export BISON; \
+ 	YACC="$(YACC)"; export YACC; \
+ 	M4="$(M4)"; export M4; \
+ 	MAKEINFO="$(MAKEINFO)"; export MAKEINFO;
+ 
+ # This is the list of variables to export in the environment when
+ # configuring subdirectories for the build system.
+ BUILD_EXPORTS = \
+ 	$(BASE_EXPORTS) \
+ 	AR="$(AR_FOR_BUILD)"; export AR; \
+ 	AS="$(AS_FOR_BUILD)"; export AS; \
+ 	CC="$(CC_FOR_BUILD)"; export CC; \
+ 	CFLAGS="$(CFLAGS_FOR_BUILD)"; export CFLAGS; \
+ 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
+ 	CXX="$(CXX_FOR_BUILD)"; export CXX; \
+ 	CXXFLAGS="$(CXXFLAGS_FOR_BUILD)"; export CXXFLAGS; \
+ 	GCJ="$(GCJ_FOR_BUILD)"; export GCJ; \
+ 	GFORTRAN="$(GFORTRAN_FOR_BUILD)"; export GFORTRAN; \
+ 	DLLTOOL="$(DLLTOOL_FOR_BUILD)"; export DLLTOOL; \
+ 	LD="$(LD_FOR_BUILD)"; export LD; \
+ 	LDFLAGS="$(LDFLAGS_FOR_BUILD)"; export LDFLAGS; \
+ 	NM="$(NM_FOR_BUILD)"; export NM; \
+ 	RANLIB="$(RANLIB_FOR_BUILD)"; export RANLIB; \
+ 	WINDRES="$(WINDRES_FOR_BUILD)"; export WINDRES;
+ 
  # This is the list of directories to built for the host system.
  SUBDIRS = @configdirs@
  # This is set by the configure script to the arguments to use when configuring
  # directories built for the host system.
  HOST_CONFIGARGS = @host_configargs@
+ # This is the list of variables to export in the environment when
+ # configuring subdirectories for the host system.
+ HOST_EXPORTS = \
+ 	$(BASE_EXPORTS) \
+ 	CC="$(CC)"; export CC; \
+ 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
+ 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
+ 	CXX="$(CXX)"; export CXX; \
+ 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
+ 	AR="$(AR)"; export AR; \
+ 	AS="$(AS)"; export AS; \
+ 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
+ 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
+ 	LD="$(LD)"; export LD; \
+ 	LDFLAGS="$(LDFLAGS)"; export LDFLAGS; \
+ 	NM="$(NM)"; export NM; \
+ 	RANLIB="$(RANLIB)"; export RANLIB; \
+ 	WINDRES="$(WINDRES)"; export WINDRES; \
+ 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
+ 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
+ 	TOPLEVEL_CONFIGURE_ARGUMENTS="$(TOPLEVEL_CONFIGURE_ARGUMENTS)"; export TOPLEVEL_CONFIGURE_ARGUMENTS; \
+ 	GMPLIBS="$(HOST_GMPLIBS)"; export GMPLIBS; \
+ 	GMPINC="$(HOST_GMPINC)"; export GMPINC; \
+ 	SET_GCC_LIB_PATH_CMD="@SET_GCC_LIB_PATH@"; export SET_GCC_LIB_PATH_CMD; \
+ 	@SET_GCC_LIB_PATH@
+ 
+ # Similar, for later GCC stages.
+ STAGE_HOST_EXPORTS = \
+ 	$(HOST_EXPORTS) \
+ 	CC="$(STAGE_CC_WRAPPER) $$r/prev-gcc/xgcc$(exeext) -B$$r/prev-gcc/ -B$(build_tooldir)/bin/"; export CC; \
+ 	CC_FOR_BUILD="$(STAGE_CC_WRAPPER) $$r/prev-gcc/xgcc$(exeext) -B$$r/prev-gcc/ -B$(build_tooldir)/bin/"; export CC_FOR_BUILD;
  
  # This is set by the configure script to the list of directories which
  # should be built using the target tools.
*************** TARGET_SUBDIR = @target_subdir@
*** 125,130 ****
--- 189,228 ----
  # This is set by the configure script to the arguments to use when configuring
  # directories built for the target.
  TARGET_CONFIGARGS = @target_configargs@
+ # This is the list of variables to export in the environment when
+ # configuring subdirectories for the host system.
+ BASE_TARGET_EXPORTS = \
+ 	$(BASE_EXPORTS) \
+ 	AR="$(AR_FOR_TARGET)"; export AR; \
+ 	AS="$(AS_FOR_TARGET)"; export AS; \
+ 	CC="$(CC_FOR_TARGET)"; export CC; \
+ 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
+ 	CPPFLAGS="$(CPPFLAGS_FOR_TARGET)"; export CPPFLAGS; \
+ 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ 	GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
+ 	GFORTRAN="$(GFORTRAN_FOR_TARGET)"; export GFORTRAN; \
+ 	DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
+ 	LD="$(LD_FOR_TARGET)"; export LD; \
+ 	LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
+ 	NM="$(NM_FOR_TARGET)"; export NM; \
+ 	RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
+ 	WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
+ 	SET_GCC_LIB_PATH_CMD="@SET_GCC_LIB_PATH@"; export SET_GCC_LIB_PATH_CMD; \
+ 	@SET_GCC_LIB_PATH@
+ 
+ RAW_CXX_TARGET_EXPORTS = \
+ 	$(BASE_TARGET_EXPORTS) \
+ 	CXX_FOR_TARGET="$(RAW_CXX_FOR_TARGET)"; export CXX_FOR_TARGET; \
+ 	CXX="$(RAW_CXX_FOR_TARGET)"; export CXX;
+ 
+ NORMAL_TARGET_EXPORTS = \
+ 	$(BASE_TARGET_EXPORTS) \
+ 	CXX="$(CXX_FOR_TARGET)"; export CXX;
+ 
+ # Where to find GMP
+ HOST_GMPLIBS = @gmplibs@
+ HOST_GMPINC = @gmpinc@
  
  # ----------------------------------------------
  # Programs producing files for the BUILD machine
*************** CXX_FOR_BUILD = $(CXX)
*** 152,193 ****
  BUILD_PREFIX = @BUILD_PREFIX@
  BUILD_PREFIX_1 = @BUILD_PREFIX_1@
  
! BISON=@BISON@
! USUAL_BISON = `if [ -f $$r/bison/bison ] ; then \
! 	    echo $$r/bison/bison -L $$s/bison/ ; \
  	 else \
! 	    echo bison ; \
  	 fi`
  
! DEFAULT_YACC = @DEFAULT_YACC@
! YACC=@YACC@
! USUAL_YACC = `if [ -f $$r/bison/bison ] ; then \
! 	    echo $$r/bison/bison -y -L $$s/bison/ ; \
! 	elif [ -f $$r/byacc/byacc ] ; then \
! 	    echo $$r/byacc/byacc ; \
  	else \
! 	    echo ${DEFAULT_YACC} ; \
  	fi`
  
! DEFAULT_LEX = @DEFAULT_LEX@
! LEX=@LEX@
! USUAL_LEX = `if [ -f $$r/flex/flex ] ; \
! 	then echo $$r/flex/flex ; \
! 	else echo ${DEFAULT_LEX} ; fi`
  
! DEFAULT_M4 = @DEFAULT_M4@
! M4 = `if [ -f $$r/m4/m4 ] ; \
! 	then echo $$r/m4/m4 ; \
! 	else echo ${DEFAULT_M4} ; fi`
  
  # For an installed makeinfo, we require it to be from texinfo 4.2 or
! # higher, else we use the "missing" dummy.
! MAKEINFO=@MAKEINFO@
! USUAL_MAKEINFO = `if [ -f $$r/texinfo/makeinfo/makeinfo ] ; \
! 	then echo $$r/texinfo/makeinfo/makeinfo ; \
! 	else if (makeinfo --version \
  	  | egrep 'texinfo[^0-9]*([1-3][0-9]|4\.[2-9]|[5-9])') >/dev/null 2>&1; \
!         then echo makeinfo; else echo $$s/missing makeinfo; fi; fi`
  
  # This just becomes part of the MAKEINFO definition passed down to
  # sub-makes.  It lets flags be given on the command line while still
--- 250,300 ----
  BUILD_PREFIX = @BUILD_PREFIX@
  BUILD_PREFIX_1 = @BUILD_PREFIX_1@
  
! # Flags to pass to stage2 and later makes.  They are defined
! # here so that they can be overridden by Makefile fragments.
! BOOT_CFLAGS= -g -O2
! 
! CONFIGURED_BISON = @CONFIGURED_BISON@
! BISON = `if [ -f $$r/$(BUILD_SUBDIR)/bison/tests/bison ] ; then \
! 	    echo $$r/$(BUILD_SUBDIR)/bison/tests/bison ; \
  	 else \
! 	    echo ${CONFIGURED_BISON} ; \
  	 fi`
  
! CONFIGURED_YACC = @CONFIGURED_YACC@
! YACC = `if [ -f $$r/$(BUILD_SUBDIR)/bison/tests/bison ] ; then \
! 	    echo $$r/$(BUILD_SUBDIR)/bison/tests/bison -y ; \
! 	elif [ -f $$r/$(BUILD_SUBDIR)/byacc/byacc ] ; then \
! 	    echo $$r/$(BUILD_SUBDIR)/byacc/byacc ; \
  	else \
! 	    echo ${CONFIGURED_YACC} ; \
  	fi`
  
! CONFIGURED_FLEX = @CONFIGURED_FLEX@
! FLEX = `if [ -f $$r/$(BUILD_SUBDIR)/flex/flex ] ; \
! 	then echo $$r/$(BUILD_SUBDIR)/flex/flex ; \
! 	else echo ${CONFIGURED_FLEX} ; fi`
  
! CONFIGURED_LEX = @CONFIGURED_LEX@
! LEX = `if [ -f $$r/$(BUILD_SUBDIR)/flex/flex ] ; \
! 	then echo $$r/$(BUILD_SUBDIR)/flex/flex ; \
! 	else echo ${CONFIGURED_LEX} ; fi`
! 
! CONFIGURED_M4 = @CONFIGURED_M4@
! M4 = `if [ -f $$r/$(BUILD_SUBDIR)/m4/m4 ] ; \
! 	then echo $$r/$(BUILD_SUBDIR)/m4/m4 ; \
! 	else echo ${CONFIGURED_M4} ; fi`
  
  # For an installed makeinfo, we require it to be from texinfo 4.2 or
! # higher, else we use the "missing" dummy.  We also pass the subdirectory
! # makeinfo even if only the Makefile is there, because Texinfo builds its
! # manual when made, and it requires its own version.
! CONFIGURED_MAKEINFO = @CONFIGURED_MAKEINFO@
! MAKEINFO = `if [ -f $$r/$(BUILD_SUBDIR)/texinfo/makeinfo/Makefile ] ; \
! 	then echo $$r/$(BUILD_SUBDIR)/texinfo/makeinfo/makeinfo ; \
! 	else if (${CONFIGURED_MAKEINFO} --version \
  	  | egrep 'texinfo[^0-9]*([1-3][0-9]|4\.[2-9]|[5-9])') >/dev/null 2>&1; \
!         then echo ${CONFIGURED_MAKEINFO}; else echo $$s/missing makeinfo; fi; fi`
  
  # This just becomes part of the MAKEINFO definition passed down to
  # sub-makes.  It lets flags be given on the command line while still
*************** PICFLAG = 
*** 243,253 ****
  
  # This is the list of directories that may be needed in RPATH_ENVVAR
  # so that prorgams built for the target machine work.
! TARGET_LIB_PATH = $$r/$(TARGET_SUBDIR)/libstdc++-v3/src/.libs:
  
  FLAGS_FOR_TARGET = @FLAGS_FOR_TARGET@
  
  AR_FOR_TARGET=@AR_FOR_TARGET@
  USUAL_AR_FOR_TARGET = ` \
    if [ -f $$r/binutils/ar ] ; then \
      echo $$r/binutils/ar ; \
--- 350,361 ----
  
  # This is the list of directories that may be needed in RPATH_ENVVAR
  # so that prorgams built for the target machine work.
! TARGET_LIB_PATH = $$r/$(TARGET_SUBDIR)/libstdc++-v3/src/.libs:$$r/$(TARGET_SUBDIR)/libmudflap/.libs
  
  FLAGS_FOR_TARGET = @FLAGS_FOR_TARGET@
  
  AR_FOR_TARGET=@AR_FOR_TARGET@
+ CONFIGURED_AR_FOR_TARGET=@CONFIGURED_AR_FOR_TARGET@
  USUAL_AR_FOR_TARGET = ` \
    if [ -f $$r/binutils/ar ] ; then \
      echo $$r/binutils/ar ; \
*************** USUAL_AR_FOR_TARGET = ` \
*** 255,265 ****
      if [ '$(host)' = '$(target)' ] ; then \
        echo $(AR); \
      else \
!        echo ar | sed '$(program_transform_name)' ; \
      fi; \
    fi`
  
  AS_FOR_TARGET=@AS_FOR_TARGET@
  USUAL_AS_FOR_TARGET = ` \
    if [ -f $$r/gas/as-new ] ; then \
      echo $$r/gas/as-new ; \
--- 363,374 ----
      if [ '$(host)' = '$(target)' ] ; then \
        echo $(AR); \
      else \
!       echo $(CONFIGURED_AR_FOR_TARGET) ; \
      fi; \
    fi`
  
  AS_FOR_TARGET=@AS_FOR_TARGET@
+ CONFIGURED_AS_FOR_TARGET=@CONFIGURED_AS_FOR_TARGET@
  USUAL_AS_FOR_TARGET = ` \
    if [ -f $$r/gas/as-new ] ; then \
      echo $$r/gas/as-new ; \
*************** USUAL_AS_FOR_TARGET = ` \
*** 269,275 ****
      if [ '$(host)' = '$(target)' ] ; then \
        echo $(AS); \
      else \
!        echo as | sed '$(program_transform_name)' ; \
      fi; \
    fi`
  
--- 378,384 ----
      if [ '$(host)' = '$(target)' ] ; then \
        echo $(AS); \
      else \
!       echo $(CONFIGURED_AS_FOR_TARGET) ; \
      fi; \
    fi`
  
*************** CXXFLAGS_FOR_TARGET = $(CXXFLAGS)
*** 295,300 ****
--- 404,410 ----
  LIBCXXFLAGS_FOR_TARGET = $(CXXFLAGS_FOR_TARGET) -fno-implicit-templates
  
  DLLTOOL_FOR_TARGET=@DLLTOOL_FOR_TARGET@
+ CONFIGURED_DLLTOOL_FOR_TARGET=@CONFIGURED_DLLTOOL_FOR_TARGET@
  USUAL_DLLTOOL_FOR_TARGET = ` \
    if [ -f $$r/binutils/dlltool ] ; then \
      echo $$r/binutils/dlltool ; \
*************** USUAL_DLLTOOL_FOR_TARGET = ` \
*** 302,314 ****
      if [ '$(host)' = '$(target)' ] ; then \
        echo $(DLLTOOL); \
      else \
!        echo dlltool | sed '$(program_transform_name)' ; \
      fi; \
    fi`
  
  GCJ_FOR_TARGET = @GCJ_FOR_TARGET@
  
  LD_FOR_TARGET=@LD_FOR_TARGET@
  USUAL_LD_FOR_TARGET = ` \
    if [ -f $$r/ld/ld-new ] ; then \
      echo $$r/ld/ld-new ; \
--- 412,426 ----
      if [ '$(host)' = '$(target)' ] ; then \
        echo $(DLLTOOL); \
      else \
!       echo $(CONFIGURED_DLLTOOL_FOR_TARGET) ; \
      fi; \
    fi`
  
  GCJ_FOR_TARGET = @GCJ_FOR_TARGET@
+ GFORTRAN_FOR_TARGET = @GFORTRAN_FOR_TARGET@
  
  LD_FOR_TARGET=@LD_FOR_TARGET@
+ CONFIGURED_LD_FOR_TARGET=@CONFIGURED_LD_FOR_TARGET@
  USUAL_LD_FOR_TARGET = ` \
    if [ -f $$r/ld/ld-new ] ; then \
      echo $$r/ld/ld-new ; \
*************** USUAL_LD_FOR_TARGET = ` \
*** 318,330 ****
      if [ '$(host)' = '$(target)' ] ; then \
        echo $(LD); \
      else \
!        echo ld | sed '$(program_transform_name)' ; \
      fi; \
    fi`
  
  LDFLAGS_FOR_TARGET = 
  
  NM_FOR_TARGET=@NM_FOR_TARGET@
  USUAL_NM_FOR_TARGET = ` \
    if [ -f $$r/binutils/nm-new ] ; then \
      echo $$r/binutils/nm-new ; \
--- 430,443 ----
      if [ '$(host)' = '$(target)' ] ; then \
        echo $(LD); \
      else \
!       echo $(CONFIGURED_LD_FOR_TARGET) ; \
      fi; \
    fi`
  
  LDFLAGS_FOR_TARGET = 
  
  NM_FOR_TARGET=@NM_FOR_TARGET@
+ CONFIGURED_NM_FOR_TARGET=@CONFIGURED_NM_FOR_TARGET@
  USUAL_NM_FOR_TARGET = ` \
    if [ -f $$r/binutils/nm-new ] ; then \
      echo $$r/binutils/nm-new ; \
*************** USUAL_NM_FOR_TARGET = ` \
*** 334,344 ****
      if [ '$(host)' = '$(target)' ] ; then \
        echo $(NM); \
      else \
!        echo nm | sed '$(program_transform_name)' ; \
      fi; \
    fi`
  
  RANLIB_FOR_TARGET=@RANLIB_FOR_TARGET@
  USUAL_RANLIB_FOR_TARGET = ` \
    if [ -f $$r/binutils/ranlib ] ; then \
      echo $$r/binutils/ranlib ; \
--- 447,458 ----
      if [ '$(host)' = '$(target)' ] ; then \
        echo $(NM); \
      else \
!       echo $(CONFIGURED_NM_FOR_TARGET) ; \
      fi; \
    fi`
  
  RANLIB_FOR_TARGET=@RANLIB_FOR_TARGET@
+ CONFIGURED_RANLIB_FOR_TARGET=@CONFIGURED_RANLIB_FOR_TARGET@
  USUAL_RANLIB_FOR_TARGET = ` \
    if [ -f $$r/binutils/ranlib ] ; then \
      echo $$r/binutils/ranlib ; \
*************** USUAL_RANLIB_FOR_TARGET = ` \
*** 350,360 ****
           echo ranlib; \
        fi; \
      else \
!        echo ranlib | sed '$(program_transform_name)' ; \
      fi; \
    fi`
  
  WINDRES_FOR_TARGET=@WINDRES_FOR_TARGET@
  USUAL_WINDRES_FOR_TARGET = ` \
    if [ -f $$r/binutils/windres ] ; then \
      echo $$r/binutils/windres ; \
--- 464,475 ----
           echo ranlib; \
        fi; \
      else \
!       echo $(CONFIGURED_RANLIB_FOR_TARGET) ; \
      fi; \
    fi`
  
  WINDRES_FOR_TARGET=@WINDRES_FOR_TARGET@
+ CONFIGURED_WINDRES_FOR_TARGET=@CONFIGURED_WINDRES_FOR_TARGET@
  USUAL_WINDRES_FOR_TARGET = ` \
    if [ -f $$r/binutils/windres ] ; then \
      echo $$r/binutils/windres ; \
*************** USUAL_WINDRES_FOR_TARGET = ` \
*** 362,368 ****
      if [ '$(host)' = '$(target)' ] ; then \
        echo $(WINDRES); \
      else \
!        echo windres | sed '$(program_transform_name)' ; \
      fi; \
    fi`
  
--- 477,483 ----
      if [ '$(host)' = '$(target)' ] ; then \
        echo $(WINDRES); \
      else \
!       echo $(CONFIGURED_WINDRES_FOR_TARGET) ; \
      fi; \
    fi`
  
*************** PICFLAG_FOR_TARGET = 
*** 374,381 ****
  
  # The first rule in the file had better be this one.  Don't put any above it.
  # This lives here to allow makefile fragments to contain dependencies.
! all: all.normal
! .PHONY: all
  
  #### host and target specific makefile fragments come in here.
  @target_makefile_frag@
--- 489,495 ----
  
  # The first rule in the file had better be this one.  Don't put any above it.
  # This lives here to allow makefile fragments to contain dependencies.
! @default_target@:
  
  #### host and target specific makefile fragments come in here.
  @target_makefile_frag@
*************** BASE_FLAGS_TO_PASS = \
*** 416,421 ****
--- 530,536 ----
  	"CC_FOR_BUILD=$(CC_FOR_BUILD)" \
  	"CXX_FOR_BUILD=$(CXX_FOR_BUILD)" \
  	"EXPECT=$(EXPECT)" \
+ 	"FLEX=$(FLEX)" \
  	"INSTALL=$(INSTALL)" \
  	"INSTALL_DATA=$(INSTALL_DATA)" \
  	"INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \
*************** BASE_FLAGS_TO_PASS = \
*** 437,446 ****
--- 552,563 ----
  	"AS_FOR_TARGET=$(AS_FOR_TARGET)" \
  	"CC_FOR_TARGET=$(CC_FOR_TARGET)" \
  	"CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET)" \
+ 	"CPPFLAGS_FOR_TARGET=$(CPPFLAGS_FOR_TARGET)" \
  	"CXX_FOR_TARGET=$(CXX_FOR_TARGET)" \
  	"CXXFLAGS_FOR_TARGET=$(CXXFLAGS_FOR_TARGET)" \
  	"DLLTOOL_FOR_TARGET=$(DLLTOOL_FOR_TARGET)" \
  	"GCJ_FOR_TARGET=$(GCJ_FOR_TARGET)" \
+ 	"GFORTRAN_FOR_TARGET=$(GFORTRAN_FOR_TARGET)" \
  	"LD_FOR_TARGET=$(LD_FOR_TARGET)" \
  	"LIBCFLAGS_FOR_TARGET=$(LIBCFLAGS_FOR_TARGET)" \
  	"LIBCXXFLAGS_FOR_TARGET=$(LIBCXXFLAGS_FOR_TARGET)" \
*************** RECURSE_FLAGS = \
*** 459,464 ****
--- 576,583 ----
  	CXX_FOR_TARGET='$(CXX_FOR_TARGET_FOR_RECURSIVE_MAKE)' \
  	RAW_CXX_FOR_TARGET='$(RAW_CXX_FOR_TARGET_FOR_RECURSIVE_MAKE)' \
  
+ RECURSE_FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) $(RECURSE_FLAGS)
+ 
  # Flags to pass down to most sub-makes, in which we're building with
  # the host environment.
  EXTRA_HOST_FLAGS = \
*************** EXTRA_GCC_FLAGS = \
*** 517,536 ****
  	'BUILD_PREFIX_1=$(BUILD_PREFIX_1)' \
  	"GCC_FOR_TARGET=$(GCC_FOR_TARGET)" \
  	"CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)" \
! 	"`echo 'LANGUAGES=$(LANGUAGES)' | sed -e s/.*=$$/XFOO=/`" \
! 	"`echo 'STMP_FIXPROTO=$(STMP_FIXPROTO)' | sed -e s/.*=$$/XFOO=/`" \
! 	"`echo 'LIMITS_H_TEST=$(LIMITS_H_TEST)' | sed -e s/.*=$$/XFOO=/`" \
! 	"`echo 'LIBGCC2_CFLAGS=$(LIBGCC2_CFLAGS)' | sed -e s/.*=$$/XFOO=/`" \
! 	"`echo 'LIBGCC2_DEBUG_CFLAGS=$(LIBGCC2_DEBUG_CFLAGS)' | sed -e s/.*=$$/XFOO=/`" \
! 	"`echo 'LIBGCC2_INCLUDES=$(LIBGCC2_INCLUDES)' | sed -e s/.*=$$/XFOO=/`" \
! 	"`echo 'STAGE1_CFLAGS=$(STAGE1_CFLAGS)' | sed -e s/.*=$$/XFOO=/`" \
! 	"`echo 'BOOT_CFLAGS=$(BOOT_CFLAGS)' | sed -e s/.*=$$/XFOO=/`" \
! 	"`echo 'BOOT_ADAFLAGS=$(BOOT_ADAFLAGS)' | sed -e s/.*=$$/XFOO=/`"
  
  GCC_FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS)
  
  .PHONY: configure-host
! configure-host: maybe-configure-gcc  \
      maybe-configure-ash \
      maybe-configure-autoconf \
      maybe-configure-automake \
--- 636,655 ----
  	'BUILD_PREFIX_1=$(BUILD_PREFIX_1)' \
  	"GCC_FOR_TARGET=$(GCC_FOR_TARGET)" \
  	"CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)" \
! 	"`echo 'LANGUAGES=$(LANGUAGES)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`" \
! 	"`echo 'STMP_FIXPROTO=$(STMP_FIXPROTO)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`" \
! 	"`echo 'LIMITS_H_TEST=$(LIMITS_H_TEST)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`" \
! 	"`echo 'LIBGCC2_CFLAGS=$(LIBGCC2_CFLAGS)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`" \
! 	"`echo 'LIBGCC2_DEBUG_CFLAGS=$(LIBGCC2_DEBUG_CFLAGS)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`" \
! 	"`echo 'LIBGCC2_INCLUDES=$(LIBGCC2_INCLUDES)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`" \
! 	"`echo 'STAGE1_CFLAGS=$(STAGE1_CFLAGS)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`" \
! 	"`echo 'BOOT_CFLAGS=$(BOOT_CFLAGS)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`" \
! 	"`echo 'BOOT_ADAFLAGS=$(BOOT_ADAFLAGS)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`"
  
  GCC_FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS)
  
  .PHONY: configure-host
! configure-host:  \
      maybe-configure-ash \
      maybe-configure-autoconf \
      maybe-configure-automake \
*************** configure-host: maybe-configure-gcc  \
*** 549,556 ****
--- 668,677 ----
      maybe-configure-fileutils \
      maybe-configure-findutils \
      maybe-configure-find \
+     maybe-configure-fixincludes \
      maybe-configure-flex \
      maybe-configure-gas \
+     maybe-configure-gcc \
      maybe-configure-gawk \
      maybe-configure-gettext \
      maybe-configure-gnuserv \
*************** configure-host: maybe-configure-gcc  \
*** 562,567 ****
--- 683,689 ----
      maybe-configure-tcl \
      maybe-configure-itcl \
      maybe-configure-ld \
+     maybe-configure-libcpp \
      maybe-configure-libgui \
      maybe-configure-libiberty \
      maybe-configure-libtool \
*************** configure-host: maybe-configure-gcc  \
*** 592,605 ****
      maybe-configure-expect \
      maybe-configure-guile \
      maybe-configure-tk \
-     maybe-configure-tix \
      maybe-configure-libtermcap \
      maybe-configure-utils
  .PHONY: configure-target
  configure-target:  \
      maybe-configure-target-libstdc++-v3 \
      maybe-configure-target-newlib \
!     maybe-configure-target-libf2c \
      maybe-configure-target-libobjc \
      maybe-configure-target-libtermcap \
      maybe-configure-target-winsup \
--- 714,727 ----
      maybe-configure-expect \
      maybe-configure-guile \
      maybe-configure-tk \
      maybe-configure-libtermcap \
      maybe-configure-utils
  .PHONY: configure-target
  configure-target:  \
      maybe-configure-target-libstdc++-v3 \
+     maybe-configure-target-libmudflap \
      maybe-configure-target-newlib \
!     maybe-configure-target-libgfortran \
      maybe-configure-target-libobjc \
      maybe-configure-target-libtermcap \
      maybe-configure-target-winsup \
*************** configure-target:  \
*** 612,625 ****
      maybe-configure-target-zlib \
      maybe-configure-target-boehm-gc \
      maybe-configure-target-qthreads \
!     maybe-configure-target-rda
  
! # The target built for a native build.
! .PHONY: all.normal
! all.normal: @all_build_modules@ all-host all-target
  
  .PHONY: all-host
! all-host: maybe-all-gcc  \
      maybe-all-ash \
      maybe-all-autoconf \
      maybe-all-automake \
--- 734,757 ----
      maybe-configure-target-zlib \
      maybe-configure-target-boehm-gc \
      maybe-configure-target-qthreads \
!     maybe-configure-target-rda \
!     maybe-configure-target-libada
  
! # The target built for a native non-bootstrap build.
! .PHONY: all
! all: unstage all-host all-target stage
  
+ .PHONY: all-build
+ all-build:  \
+     maybe-all-build-libiberty \
+     maybe-all-build-bison \
+     maybe-all-build-byacc \
+     maybe-all-build-flex \
+     maybe-all-build-m4 \
+     maybe-all-build-texinfo \
+     maybe-all-build-fixincludes
  .PHONY: all-host
! all-host:  \
      maybe-all-ash \
      maybe-all-autoconf \
      maybe-all-automake \
*************** all-host: maybe-all-gcc  \
*** 638,645 ****
--- 770,779 ----
      maybe-all-fileutils \
      maybe-all-findutils \
      maybe-all-find \
+     maybe-all-fixincludes \
      maybe-all-flex \
      maybe-all-gas \
+     maybe-all-gcc \
      maybe-all-gawk \
      maybe-all-gettext \
      maybe-all-gnuserv \
*************** all-host: maybe-all-gcc  \
*** 651,656 ****
--- 785,791 ----
      maybe-all-tcl \
      maybe-all-itcl \
      maybe-all-ld \
+     maybe-all-libcpp \
      maybe-all-libgui \
      maybe-all-libiberty \
      maybe-all-libtool \
*************** all-host: maybe-all-gcc  \
*** 681,694 ****
      maybe-all-expect \
      maybe-all-guile \
      maybe-all-tk \
-     maybe-all-tix \
      maybe-all-libtermcap \
      maybe-all-utils
  .PHONY: all-target
  all-target:  \
      maybe-all-target-libstdc++-v3 \
      maybe-all-target-newlib \
!     maybe-all-target-libf2c \
      maybe-all-target-libobjc \
      maybe-all-target-libtermcap \
      maybe-all-target-winsup \
--- 816,829 ----
      maybe-all-expect \
      maybe-all-guile \
      maybe-all-tk \
      maybe-all-libtermcap \
      maybe-all-utils
  .PHONY: all-target
  all-target:  \
      maybe-all-target-libstdc++-v3 \
+     maybe-all-target-libmudflap \
      maybe-all-target-newlib \
!     maybe-all-target-libgfortran \
      maybe-all-target-libobjc \
      maybe-all-target-libtermcap \
      maybe-all-target-winsup \
*************** all-target:  \
*** 701,707 ****
      maybe-all-target-zlib \
      maybe-all-target-boehm-gc \
      maybe-all-target-qthreads \
!     maybe-all-target-rda
  
  # Do a target for all the subdirectories.  A ``make do-X'' will do a
  # ``make X'' in all subdirectories (because, in general, there is a
--- 836,843 ----
      maybe-all-target-zlib \
      maybe-all-target-boehm-gc \
      maybe-all-target-qthreads \
!     maybe-all-target-rda \
!     maybe-all-target-libada
  
  # Do a target for all the subdirectories.  A ``make do-X'' will do a
  # ``make X'' in all subdirectories (because, in general, there is a
*************** all-target:  \
*** 709,718 ****
  # but it may do additional work as well).
  
  .PHONY: do-info
! do-info: info-host info-target
  
  .PHONY: info-host
! info-host: maybe-info-gcc  \
      maybe-info-ash \
      maybe-info-autoconf \
      maybe-info-automake \
--- 845,854 ----
  # but it may do additional work as well).
  
  .PHONY: do-info
! do-info: unstage info-host info-target stage
  
  .PHONY: info-host
! info-host:  \
      maybe-info-ash \
      maybe-info-autoconf \
      maybe-info-automake \
*************** info-host: maybe-info-gcc  \
*** 731,738 ****
--- 867,876 ----
      maybe-info-fileutils \
      maybe-info-findutils \
      maybe-info-find \
+     maybe-info-fixincludes \
      maybe-info-flex \
      maybe-info-gas \
+     maybe-info-gcc \
      maybe-info-gawk \
      maybe-info-gettext \
      maybe-info-gnuserv \
*************** info-host: maybe-info-gcc  \
*** 744,749 ****
--- 882,888 ----
      maybe-info-tcl \
      maybe-info-itcl \
      maybe-info-ld \
+     maybe-info-libcpp \
      maybe-info-libgui \
      maybe-info-libiberty \
      maybe-info-libtool \
*************** info-host: maybe-info-gcc  \
*** 774,788 ****
      maybe-info-expect \
      maybe-info-guile \
      maybe-info-tk \
-     maybe-info-tix \
      maybe-info-libtermcap \
      maybe-info-utils
  
  .PHONY: info-target
  info-target:  \
      maybe-info-target-libstdc++-v3 \
      maybe-info-target-newlib \
!     maybe-info-target-libf2c \
      maybe-info-target-libobjc \
      maybe-info-target-libtermcap \
      maybe-info-target-winsup \
--- 913,927 ----
      maybe-info-expect \
      maybe-info-guile \
      maybe-info-tk \
      maybe-info-libtermcap \
      maybe-info-utils
  
  .PHONY: info-target
  info-target:  \
      maybe-info-target-libstdc++-v3 \
+     maybe-info-target-libmudflap \
      maybe-info-target-newlib \
!     maybe-info-target-libgfortran \
      maybe-info-target-libobjc \
      maybe-info-target-libtermcap \
      maybe-info-target-winsup \
*************** info-target:  \
*** 795,827 ****
      maybe-info-target-zlib \
      maybe-info-target-boehm-gc \
      maybe-info-target-qthreads \
!     maybe-info-target-rda
  
! # GCC, the eternal special case
! .PHONY: maybe-info-gcc info-gcc
! maybe-info-gcc:
! info-gcc: \
!     configure-gcc 
! 	@[ -f ./gcc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_GCC_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	echo "Doing info in gcc" ; \
! 	(cd gcc && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
! # Host modules.
  
  .PHONY: maybe-info-ash info-ash
  maybe-info-ash:
  
  info-ash: \
      configure-ash 
--- 934,2703 ----
      maybe-info-target-zlib \
      maybe-info-target-boehm-gc \
      maybe-info-target-qthreads \
!     maybe-info-target-rda \
!     maybe-info-target-libada
  
! .PHONY: do-dvi
! do-dvi: unstage dvi-host dvi-target stage
! 
! .PHONY: dvi-host
! dvi-host:  \
!     maybe-dvi-ash \
!     maybe-dvi-autoconf \
!     maybe-dvi-automake \
!     maybe-dvi-bash \
!     maybe-dvi-bfd \
!     maybe-dvi-opcodes \
!     maybe-dvi-binutils \
!     maybe-dvi-bison \
!     maybe-dvi-byacc \
!     maybe-dvi-bzip2 \
!     maybe-dvi-dejagnu \
!     maybe-dvi-diff \
!     maybe-dvi-dosutils \
!     maybe-dvi-etc \
!     maybe-dvi-fastjar \
!     maybe-dvi-fileutils \
!     maybe-dvi-findutils \
!     maybe-dvi-find \
!     maybe-dvi-fixincludes \
!     maybe-dvi-flex \
!     maybe-dvi-gas \
!     maybe-dvi-gcc \
!     maybe-dvi-gawk \
!     maybe-dvi-gettext \
!     maybe-dvi-gnuserv \
!     maybe-dvi-gprof \
!     maybe-dvi-gzip \
!     maybe-dvi-hello \
!     maybe-dvi-indent \
!     maybe-dvi-intl \
!     maybe-dvi-tcl \
!     maybe-dvi-itcl \
!     maybe-dvi-ld \
!     maybe-dvi-libcpp \
!     maybe-dvi-libgui \
!     maybe-dvi-libiberty \
!     maybe-dvi-libtool \
!     maybe-dvi-m4 \
!     maybe-dvi-make \
!     maybe-dvi-mmalloc \
!     maybe-dvi-patch \
!     maybe-dvi-perl \
!     maybe-dvi-prms \
!     maybe-dvi-rcs \
!     maybe-dvi-readline \
!     maybe-dvi-release \
!     maybe-dvi-recode \
!     maybe-dvi-sed \
!     maybe-dvi-send-pr \
!     maybe-dvi-shellutils \
!     maybe-dvi-sid \
!     maybe-dvi-sim \
!     maybe-dvi-tar \
!     maybe-dvi-texinfo \
!     maybe-dvi-textutils \
!     maybe-dvi-time \
!     maybe-dvi-uudecode \
!     maybe-dvi-wdiff \
!     maybe-dvi-zip \
!     maybe-dvi-zlib \
!     maybe-dvi-gdb \
!     maybe-dvi-expect \
!     maybe-dvi-guile \
!     maybe-dvi-tk \
!     maybe-dvi-libtermcap \
!     maybe-dvi-utils
! 
! .PHONY: dvi-target
! dvi-target:  \
!     maybe-dvi-target-libstdc++-v3 \
!     maybe-dvi-target-libmudflap \
!     maybe-dvi-target-newlib \
!     maybe-dvi-target-libgfortran \
!     maybe-dvi-target-libobjc \
!     maybe-dvi-target-libtermcap \
!     maybe-dvi-target-winsup \
!     maybe-dvi-target-libgloss \
!     maybe-dvi-target-libiberty \
!     maybe-dvi-target-gperf \
!     maybe-dvi-target-examples \
!     maybe-dvi-target-libffi \
!     maybe-dvi-target-libjava \
!     maybe-dvi-target-zlib \
!     maybe-dvi-target-boehm-gc \
!     maybe-dvi-target-qthreads \
!     maybe-dvi-target-rda \
!     maybe-dvi-target-libada
! 
! .PHONY: do-html
! do-html: unstage html-host html-target stage
! 
! .PHONY: html-host
! html-host:  \
!     maybe-html-ash \
!     maybe-html-autoconf \
!     maybe-html-automake \
!     maybe-html-bash \
!     maybe-html-bfd \
!     maybe-html-opcodes \
!     maybe-html-binutils \
!     maybe-html-bison \
!     maybe-html-byacc \
!     maybe-html-bzip2 \
!     maybe-html-dejagnu \
!     maybe-html-diff \
!     maybe-html-dosutils \
!     maybe-html-etc \
!     maybe-html-fastjar \
!     maybe-html-fileutils \
!     maybe-html-findutils \
!     maybe-html-find \
!     maybe-html-fixincludes \
!     maybe-html-flex \
!     maybe-html-gas \
!     maybe-html-gcc \
!     maybe-html-gawk \
!     maybe-html-gettext \
!     maybe-html-gnuserv \
!     maybe-html-gprof \
!     maybe-html-gzip \
!     maybe-html-hello \
!     maybe-html-indent \
!     maybe-html-intl \
!     maybe-html-tcl \
!     maybe-html-itcl \
!     maybe-html-ld \
!     maybe-html-libcpp \
!     maybe-html-libgui \
!     maybe-html-libiberty \
!     maybe-html-libtool \
!     maybe-html-m4 \
!     maybe-html-make \
!     maybe-html-mmalloc \
!     maybe-html-patch \
!     maybe-html-perl \
!     maybe-html-prms \
!     maybe-html-rcs \
!     maybe-html-readline \
!     maybe-html-release \
!     maybe-html-recode \
!     maybe-html-sed \
!     maybe-html-send-pr \
!     maybe-html-shellutils \
!     maybe-html-sid \
!     maybe-html-sim \
!     maybe-html-tar \
!     maybe-html-texinfo \
!     maybe-html-textutils \
!     maybe-html-time \
!     maybe-html-uudecode \
!     maybe-html-wdiff \
!     maybe-html-zip \
!     maybe-html-zlib \
!     maybe-html-gdb \
!     maybe-html-expect \
!     maybe-html-guile \
!     maybe-html-tk \
!     maybe-html-libtermcap \
!     maybe-html-utils
! 
! .PHONY: html-target
! html-target:  \
!     maybe-html-target-libstdc++-v3 \
!     maybe-html-target-libmudflap \
!     maybe-html-target-newlib \
!     maybe-html-target-libgfortran \
!     maybe-html-target-libobjc \
!     maybe-html-target-libtermcap \
!     maybe-html-target-winsup \
!     maybe-html-target-libgloss \
!     maybe-html-target-libiberty \
!     maybe-html-target-gperf \
!     maybe-html-target-examples \
!     maybe-html-target-libffi \
!     maybe-html-target-libjava \
!     maybe-html-target-zlib \
!     maybe-html-target-boehm-gc \
!     maybe-html-target-qthreads \
!     maybe-html-target-rda \
!     maybe-html-target-libada
! 
! .PHONY: do-TAGS
! do-TAGS: unstage TAGS-host TAGS-target stage
! 
! .PHONY: TAGS-host
! TAGS-host:  \
!     maybe-TAGS-ash \
!     maybe-TAGS-autoconf \
!     maybe-TAGS-automake \
!     maybe-TAGS-bash \
!     maybe-TAGS-bfd \
!     maybe-TAGS-opcodes \
!     maybe-TAGS-binutils \
!     maybe-TAGS-bison \
!     maybe-TAGS-byacc \
!     maybe-TAGS-bzip2 \
!     maybe-TAGS-dejagnu \
!     maybe-TAGS-diff \
!     maybe-TAGS-dosutils \
!     maybe-TAGS-etc \
!     maybe-TAGS-fastjar \
!     maybe-TAGS-fileutils \
!     maybe-TAGS-findutils \
!     maybe-TAGS-find \
!     maybe-TAGS-fixincludes \
!     maybe-TAGS-flex \
!     maybe-TAGS-gas \
!     maybe-TAGS-gcc \
!     maybe-TAGS-gawk \
!     maybe-TAGS-gettext \
!     maybe-TAGS-gnuserv \
!     maybe-TAGS-gprof \
!     maybe-TAGS-gzip \
!     maybe-TAGS-hello \
!     maybe-TAGS-indent \
!     maybe-TAGS-intl \
!     maybe-TAGS-tcl \
!     maybe-TAGS-itcl \
!     maybe-TAGS-ld \
!     maybe-TAGS-libcpp \
!     maybe-TAGS-libgui \
!     maybe-TAGS-libiberty \
!     maybe-TAGS-libtool \
!     maybe-TAGS-m4 \
!     maybe-TAGS-make \
!     maybe-TAGS-mmalloc \
!     maybe-TAGS-patch \
!     maybe-TAGS-perl \
!     maybe-TAGS-prms \
!     maybe-TAGS-rcs \
!     maybe-TAGS-readline \
!     maybe-TAGS-release \
!     maybe-TAGS-recode \
!     maybe-TAGS-sed \
!     maybe-TAGS-send-pr \
!     maybe-TAGS-shellutils \
!     maybe-TAGS-sid \
!     maybe-TAGS-sim \
!     maybe-TAGS-tar \
!     maybe-TAGS-texinfo \
!     maybe-TAGS-textutils \
!     maybe-TAGS-time \
!     maybe-TAGS-uudecode \
!     maybe-TAGS-wdiff \
!     maybe-TAGS-zip \
!     maybe-TAGS-zlib \
!     maybe-TAGS-gdb \
!     maybe-TAGS-expect \
!     maybe-TAGS-guile \
!     maybe-TAGS-tk \
!     maybe-TAGS-libtermcap \
!     maybe-TAGS-utils
! 
! .PHONY: TAGS-target
! TAGS-target:  \
!     maybe-TAGS-target-libstdc++-v3 \
!     maybe-TAGS-target-libmudflap \
!     maybe-TAGS-target-newlib \
!     maybe-TAGS-target-libgfortran \
!     maybe-TAGS-target-libobjc \
!     maybe-TAGS-target-libtermcap \
!     maybe-TAGS-target-winsup \
!     maybe-TAGS-target-libgloss \
!     maybe-TAGS-target-libiberty \
!     maybe-TAGS-target-gperf \
!     maybe-TAGS-target-examples \
!     maybe-TAGS-target-libffi \
!     maybe-TAGS-target-libjava \
!     maybe-TAGS-target-zlib \
!     maybe-TAGS-target-boehm-gc \
!     maybe-TAGS-target-qthreads \
!     maybe-TAGS-target-rda \
!     maybe-TAGS-target-libada
! 
! .PHONY: do-install-info
! do-install-info: unstage install-info-host install-info-target stage
! 
! .PHONY: install-info-host
! install-info-host:  \
!     maybe-install-info-ash \
!     maybe-install-info-autoconf \
!     maybe-install-info-automake \
!     maybe-install-info-bash \
!     maybe-install-info-bfd \
!     maybe-install-info-opcodes \
!     maybe-install-info-binutils \
!     maybe-install-info-bison \
!     maybe-install-info-byacc \
!     maybe-install-info-bzip2 \
!     maybe-install-info-dejagnu \
!     maybe-install-info-diff \
!     maybe-install-info-dosutils \
!     maybe-install-info-etc \
!     maybe-install-info-fastjar \
!     maybe-install-info-fileutils \
!     maybe-install-info-findutils \
!     maybe-install-info-find \
!     maybe-install-info-fixincludes \
!     maybe-install-info-flex \
!     maybe-install-info-gas \
!     maybe-install-info-gcc \
!     maybe-install-info-gawk \
!     maybe-install-info-gettext \
!     maybe-install-info-gnuserv \
!     maybe-install-info-gprof \
!     maybe-install-info-gzip \
!     maybe-install-info-hello \
!     maybe-install-info-indent \
!     maybe-install-info-intl \
!     maybe-install-info-tcl \
!     maybe-install-info-itcl \
!     maybe-install-info-ld \
!     maybe-install-info-libcpp \
!     maybe-install-info-libgui \
!     maybe-install-info-libiberty \
!     maybe-install-info-libtool \
!     maybe-install-info-m4 \
!     maybe-install-info-make \
!     maybe-install-info-mmalloc \
!     maybe-install-info-patch \
!     maybe-install-info-perl \
!     maybe-install-info-prms \
!     maybe-install-info-rcs \
!     maybe-install-info-readline \
!     maybe-install-info-release \
!     maybe-install-info-recode \
!     maybe-install-info-sed \
!     maybe-install-info-send-pr \
!     maybe-install-info-shellutils \
!     maybe-install-info-sid \
!     maybe-install-info-sim \
!     maybe-install-info-tar \
!     maybe-install-info-texinfo \
!     maybe-install-info-textutils \
!     maybe-install-info-time \
!     maybe-install-info-uudecode \
!     maybe-install-info-wdiff \
!     maybe-install-info-zip \
!     maybe-install-info-zlib \
!     maybe-install-info-gdb \
!     maybe-install-info-expect \
!     maybe-install-info-guile \
!     maybe-install-info-tk \
!     maybe-install-info-libtermcap \
!     maybe-install-info-utils
! 
! .PHONY: install-info-target
! install-info-target:  \
!     maybe-install-info-target-libstdc++-v3 \
!     maybe-install-info-target-libmudflap \
!     maybe-install-info-target-newlib \
!     maybe-install-info-target-libgfortran \
!     maybe-install-info-target-libobjc \
!     maybe-install-info-target-libtermcap \
!     maybe-install-info-target-winsup \
!     maybe-install-info-target-libgloss \
!     maybe-install-info-target-libiberty \
!     maybe-install-info-target-gperf \
!     maybe-install-info-target-examples \
!     maybe-install-info-target-libffi \
!     maybe-install-info-target-libjava \
!     maybe-install-info-target-zlib \
!     maybe-install-info-target-boehm-gc \
!     maybe-install-info-target-qthreads \
!     maybe-install-info-target-rda \
!     maybe-install-info-target-libada
! 
! .PHONY: do-installcheck
! do-installcheck: unstage installcheck-host installcheck-target stage
! 
! .PHONY: installcheck-host
! installcheck-host:  \
!     maybe-installcheck-ash \
!     maybe-installcheck-autoconf \
!     maybe-installcheck-automake \
!     maybe-installcheck-bash \
!     maybe-installcheck-bfd \
!     maybe-installcheck-opcodes \
!     maybe-installcheck-binutils \
!     maybe-installcheck-bison \
!     maybe-installcheck-byacc \
!     maybe-installcheck-bzip2 \
!     maybe-installcheck-dejagnu \
!     maybe-installcheck-diff \
!     maybe-installcheck-dosutils \
!     maybe-installcheck-etc \
!     maybe-installcheck-fastjar \
!     maybe-installcheck-fileutils \
!     maybe-installcheck-findutils \
!     maybe-installcheck-find \
!     maybe-installcheck-fixincludes \
!     maybe-installcheck-flex \
!     maybe-installcheck-gas \
!     maybe-installcheck-gcc \
!     maybe-installcheck-gawk \
!     maybe-installcheck-gettext \
!     maybe-installcheck-gnuserv \
!     maybe-installcheck-gprof \
!     maybe-installcheck-gzip \
!     maybe-installcheck-hello \
!     maybe-installcheck-indent \
!     maybe-installcheck-intl \
!     maybe-installcheck-tcl \
!     maybe-installcheck-itcl \
!     maybe-installcheck-ld \
!     maybe-installcheck-libcpp \
!     maybe-installcheck-libgui \
!     maybe-installcheck-libiberty \
!     maybe-installcheck-libtool \
!     maybe-installcheck-m4 \
!     maybe-installcheck-make \
!     maybe-installcheck-mmalloc \
!     maybe-installcheck-patch \
!     maybe-installcheck-perl \
!     maybe-installcheck-prms \
!     maybe-installcheck-rcs \
!     maybe-installcheck-readline \
!     maybe-installcheck-release \
!     maybe-installcheck-recode \
!     maybe-installcheck-sed \
!     maybe-installcheck-send-pr \
!     maybe-installcheck-shellutils \
!     maybe-installcheck-sid \
!     maybe-installcheck-sim \
!     maybe-installcheck-tar \
!     maybe-installcheck-texinfo \
!     maybe-installcheck-textutils \
!     maybe-installcheck-time \
!     maybe-installcheck-uudecode \
!     maybe-installcheck-wdiff \
!     maybe-installcheck-zip \
!     maybe-installcheck-zlib \
!     maybe-installcheck-gdb \
!     maybe-installcheck-expect \
!     maybe-installcheck-guile \
!     maybe-installcheck-tk \
!     maybe-installcheck-libtermcap \
!     maybe-installcheck-utils
! 
! .PHONY: installcheck-target
! installcheck-target:  \
!     maybe-installcheck-target-libstdc++-v3 \
!     maybe-installcheck-target-libmudflap \
!     maybe-installcheck-target-newlib \
!     maybe-installcheck-target-libgfortran \
!     maybe-installcheck-target-libobjc \
!     maybe-installcheck-target-libtermcap \
!     maybe-installcheck-target-winsup \
!     maybe-installcheck-target-libgloss \
!     maybe-installcheck-target-libiberty \
!     maybe-installcheck-target-gperf \
!     maybe-installcheck-target-examples \
!     maybe-installcheck-target-libffi \
!     maybe-installcheck-target-libjava \
!     maybe-installcheck-target-zlib \
!     maybe-installcheck-target-boehm-gc \
!     maybe-installcheck-target-qthreads \
!     maybe-installcheck-target-rda \
!     maybe-installcheck-target-libada
! 
! .PHONY: do-mostlyclean
! do-mostlyclean: unstage mostlyclean-host mostlyclean-target stage
! 
! .PHONY: mostlyclean-host
! mostlyclean-host:  \
!     maybe-mostlyclean-ash \
!     maybe-mostlyclean-autoconf \
!     maybe-mostlyclean-automake \
!     maybe-mostlyclean-bash \
!     maybe-mostlyclean-bfd \
!     maybe-mostlyclean-opcodes \
!     maybe-mostlyclean-binutils \
!     maybe-mostlyclean-bison \
!     maybe-mostlyclean-byacc \
!     maybe-mostlyclean-bzip2 \
!     maybe-mostlyclean-dejagnu \
!     maybe-mostlyclean-diff \
!     maybe-mostlyclean-dosutils \
!     maybe-mostlyclean-etc \
!     maybe-mostlyclean-fastjar \
!     maybe-mostlyclean-fileutils \
!     maybe-mostlyclean-findutils \
!     maybe-mostlyclean-find \
!     maybe-mostlyclean-fixincludes \
!     maybe-mostlyclean-flex \
!     maybe-mostlyclean-gas \
!     maybe-mostlyclean-gcc \
!     maybe-mostlyclean-gawk \
!     maybe-mostlyclean-gettext \
!     maybe-mostlyclean-gnuserv \
!     maybe-mostlyclean-gprof \
!     maybe-mostlyclean-gzip \
!     maybe-mostlyclean-hello \
!     maybe-mostlyclean-indent \
!     maybe-mostlyclean-intl \
!     maybe-mostlyclean-tcl \
!     maybe-mostlyclean-itcl \
!     maybe-mostlyclean-ld \
!     maybe-mostlyclean-libcpp \
!     maybe-mostlyclean-libgui \
!     maybe-mostlyclean-libiberty \
!     maybe-mostlyclean-libtool \
!     maybe-mostlyclean-m4 \
!     maybe-mostlyclean-make \
!     maybe-mostlyclean-mmalloc \
!     maybe-mostlyclean-patch \
!     maybe-mostlyclean-perl \
!     maybe-mostlyclean-prms \
!     maybe-mostlyclean-rcs \
!     maybe-mostlyclean-readline \
!     maybe-mostlyclean-release \
!     maybe-mostlyclean-recode \
!     maybe-mostlyclean-sed \
!     maybe-mostlyclean-send-pr \
!     maybe-mostlyclean-shellutils \
!     maybe-mostlyclean-sid \
!     maybe-mostlyclean-sim \
!     maybe-mostlyclean-tar \
!     maybe-mostlyclean-texinfo \
!     maybe-mostlyclean-textutils \
!     maybe-mostlyclean-time \
!     maybe-mostlyclean-uudecode \
!     maybe-mostlyclean-wdiff \
!     maybe-mostlyclean-zip \
!     maybe-mostlyclean-zlib \
!     maybe-mostlyclean-gdb \
!     maybe-mostlyclean-expect \
!     maybe-mostlyclean-guile \
!     maybe-mostlyclean-tk \
!     maybe-mostlyclean-libtermcap \
!     maybe-mostlyclean-utils
! 
! .PHONY: mostlyclean-target
! mostlyclean-target:  \
!     maybe-mostlyclean-target-libstdc++-v3 \
!     maybe-mostlyclean-target-libmudflap \
!     maybe-mostlyclean-target-newlib \
!     maybe-mostlyclean-target-libgfortran \
!     maybe-mostlyclean-target-libobjc \
!     maybe-mostlyclean-target-libtermcap \
!     maybe-mostlyclean-target-winsup \
!     maybe-mostlyclean-target-libgloss \
!     maybe-mostlyclean-target-libiberty \
!     maybe-mostlyclean-target-gperf \
!     maybe-mostlyclean-target-examples \
!     maybe-mostlyclean-target-libffi \
!     maybe-mostlyclean-target-libjava \
!     maybe-mostlyclean-target-zlib \
!     maybe-mostlyclean-target-boehm-gc \
!     maybe-mostlyclean-target-qthreads \
!     maybe-mostlyclean-target-rda \
!     maybe-mostlyclean-target-libada
! 
! .PHONY: do-clean
! do-clean: unstage clean-host clean-target stage
! 
! .PHONY: clean-host
! clean-host:  \
!     maybe-clean-ash \
!     maybe-clean-autoconf \
!     maybe-clean-automake \
!     maybe-clean-bash \
!     maybe-clean-bfd \
!     maybe-clean-opcodes \
!     maybe-clean-binutils \
!     maybe-clean-bison \
!     maybe-clean-byacc \
!     maybe-clean-bzip2 \
!     maybe-clean-dejagnu \
!     maybe-clean-diff \
!     maybe-clean-dosutils \
!     maybe-clean-etc \
!     maybe-clean-fastjar \
!     maybe-clean-fileutils \
!     maybe-clean-findutils \
!     maybe-clean-find \
!     maybe-clean-fixincludes \
!     maybe-clean-flex \
!     maybe-clean-gas \
!     maybe-clean-gcc \
!     maybe-clean-gawk \
!     maybe-clean-gettext \
!     maybe-clean-gnuserv \
!     maybe-clean-gprof \
!     maybe-clean-gzip \
!     maybe-clean-hello \
!     maybe-clean-indent \
!     maybe-clean-intl \
!     maybe-clean-tcl \
!     maybe-clean-itcl \
!     maybe-clean-ld \
!     maybe-clean-libcpp \
!     maybe-clean-libgui \
!     maybe-clean-libiberty \
!     maybe-clean-libtool \
!     maybe-clean-m4 \
!     maybe-clean-make \
!     maybe-clean-mmalloc \
!     maybe-clean-patch \
!     maybe-clean-perl \
!     maybe-clean-prms \
!     maybe-clean-rcs \
!     maybe-clean-readline \
!     maybe-clean-release \
!     maybe-clean-recode \
!     maybe-clean-sed \
!     maybe-clean-send-pr \
!     maybe-clean-shellutils \
!     maybe-clean-sid \
!     maybe-clean-sim \
!     maybe-clean-tar \
!     maybe-clean-texinfo \
!     maybe-clean-textutils \
!     maybe-clean-time \
!     maybe-clean-uudecode \
!     maybe-clean-wdiff \
!     maybe-clean-zip \
!     maybe-clean-zlib \
!     maybe-clean-gdb \
!     maybe-clean-expect \
!     maybe-clean-guile \
!     maybe-clean-tk \
!     maybe-clean-libtermcap \
!     maybe-clean-utils
! 
! .PHONY: clean-target
! clean-target:  \
!     maybe-clean-target-libstdc++-v3 \
!     maybe-clean-target-libmudflap \
!     maybe-clean-target-newlib \
!     maybe-clean-target-libgfortran \
!     maybe-clean-target-libobjc \
!     maybe-clean-target-libtermcap \
!     maybe-clean-target-winsup \
!     maybe-clean-target-libgloss \
!     maybe-clean-target-libiberty \
!     maybe-clean-target-gperf \
!     maybe-clean-target-examples \
!     maybe-clean-target-libffi \
!     maybe-clean-target-libjava \
!     maybe-clean-target-zlib \
!     maybe-clean-target-boehm-gc \
!     maybe-clean-target-qthreads \
!     maybe-clean-target-rda \
!     maybe-clean-target-libada
! 
! .PHONY: do-distclean
! do-distclean: unstage distclean-host distclean-target stage
! 
! .PHONY: distclean-host
! distclean-host:  \
!     maybe-distclean-ash \
!     maybe-distclean-autoconf \
!     maybe-distclean-automake \
!     maybe-distclean-bash \
!     maybe-distclean-bfd \
!     maybe-distclean-opcodes \
!     maybe-distclean-binutils \
!     maybe-distclean-bison \
!     maybe-distclean-byacc \
!     maybe-distclean-bzip2 \
!     maybe-distclean-dejagnu \
!     maybe-distclean-diff \
!     maybe-distclean-dosutils \
!     maybe-distclean-etc \
!     maybe-distclean-fastjar \
!     maybe-distclean-fileutils \
!     maybe-distclean-findutils \
!     maybe-distclean-find \
!     maybe-distclean-fixincludes \
!     maybe-distclean-flex \
!     maybe-distclean-gas \
!     maybe-distclean-gcc \
!     maybe-distclean-gawk \
!     maybe-distclean-gettext \
!     maybe-distclean-gnuserv \
!     maybe-distclean-gprof \
!     maybe-distclean-gzip \
!     maybe-distclean-hello \
!     maybe-distclean-indent \
!     maybe-distclean-intl \
!     maybe-distclean-tcl \
!     maybe-distclean-itcl \
!     maybe-distclean-ld \
!     maybe-distclean-libcpp \
!     maybe-distclean-libgui \
!     maybe-distclean-libiberty \
!     maybe-distclean-libtool \
!     maybe-distclean-m4 \
!     maybe-distclean-make \
!     maybe-distclean-mmalloc \
!     maybe-distclean-patch \
!     maybe-distclean-perl \
!     maybe-distclean-prms \
!     maybe-distclean-rcs \
!     maybe-distclean-readline \
!     maybe-distclean-release \
!     maybe-distclean-recode \
!     maybe-distclean-sed \
!     maybe-distclean-send-pr \
!     maybe-distclean-shellutils \
!     maybe-distclean-sid \
!     maybe-distclean-sim \
!     maybe-distclean-tar \
!     maybe-distclean-texinfo \
!     maybe-distclean-textutils \
!     maybe-distclean-time \
!     maybe-distclean-uudecode \
!     maybe-distclean-wdiff \
!     maybe-distclean-zip \
!     maybe-distclean-zlib \
!     maybe-distclean-gdb \
!     maybe-distclean-expect \
!     maybe-distclean-guile \
!     maybe-distclean-tk \
!     maybe-distclean-libtermcap \
!     maybe-distclean-utils
! 
! .PHONY: distclean-target
! distclean-target:  \
!     maybe-distclean-target-libstdc++-v3 \
!     maybe-distclean-target-libmudflap \
!     maybe-distclean-target-newlib \
!     maybe-distclean-target-libgfortran \
!     maybe-distclean-target-libobjc \
!     maybe-distclean-target-libtermcap \
!     maybe-distclean-target-winsup \
!     maybe-distclean-target-libgloss \
!     maybe-distclean-target-libiberty \
!     maybe-distclean-target-gperf \
!     maybe-distclean-target-examples \
!     maybe-distclean-target-libffi \
!     maybe-distclean-target-libjava \
!     maybe-distclean-target-zlib \
!     maybe-distclean-target-boehm-gc \
!     maybe-distclean-target-qthreads \
!     maybe-distclean-target-rda \
!     maybe-distclean-target-libada
! 
! .PHONY: do-maintainer-clean
! do-maintainer-clean: unstage maintainer-clean-host maintainer-clean-target stage
! 
! .PHONY: maintainer-clean-host
! maintainer-clean-host:  \
!     maybe-maintainer-clean-ash \
!     maybe-maintainer-clean-autoconf \
!     maybe-maintainer-clean-automake \
!     maybe-maintainer-clean-bash \
!     maybe-maintainer-clean-bfd \
!     maybe-maintainer-clean-opcodes \
!     maybe-maintainer-clean-binutils \
!     maybe-maintainer-clean-bison \
!     maybe-maintainer-clean-byacc \
!     maybe-maintainer-clean-bzip2 \
!     maybe-maintainer-clean-dejagnu \
!     maybe-maintainer-clean-diff \
!     maybe-maintainer-clean-dosutils \
!     maybe-maintainer-clean-etc \
!     maybe-maintainer-clean-fastjar \
!     maybe-maintainer-clean-fileutils \
!     maybe-maintainer-clean-findutils \
!     maybe-maintainer-clean-find \
!     maybe-maintainer-clean-fixincludes \
!     maybe-maintainer-clean-flex \
!     maybe-maintainer-clean-gas \
!     maybe-maintainer-clean-gcc \
!     maybe-maintainer-clean-gawk \
!     maybe-maintainer-clean-gettext \
!     maybe-maintainer-clean-gnuserv \
!     maybe-maintainer-clean-gprof \
!     maybe-maintainer-clean-gzip \
!     maybe-maintainer-clean-hello \
!     maybe-maintainer-clean-indent \
!     maybe-maintainer-clean-intl \
!     maybe-maintainer-clean-tcl \
!     maybe-maintainer-clean-itcl \
!     maybe-maintainer-clean-ld \
!     maybe-maintainer-clean-libcpp \
!     maybe-maintainer-clean-libgui \
!     maybe-maintainer-clean-libiberty \
!     maybe-maintainer-clean-libtool \
!     maybe-maintainer-clean-m4 \
!     maybe-maintainer-clean-make \
!     maybe-maintainer-clean-mmalloc \
!     maybe-maintainer-clean-patch \
!     maybe-maintainer-clean-perl \
!     maybe-maintainer-clean-prms \
!     maybe-maintainer-clean-rcs \
!     maybe-maintainer-clean-readline \
!     maybe-maintainer-clean-release \
!     maybe-maintainer-clean-recode \
!     maybe-maintainer-clean-sed \
!     maybe-maintainer-clean-send-pr \
!     maybe-maintainer-clean-shellutils \
!     maybe-maintainer-clean-sid \
!     maybe-maintainer-clean-sim \
!     maybe-maintainer-clean-tar \
!     maybe-maintainer-clean-texinfo \
!     maybe-maintainer-clean-textutils \
!     maybe-maintainer-clean-time \
!     maybe-maintainer-clean-uudecode \
!     maybe-maintainer-clean-wdiff \
!     maybe-maintainer-clean-zip \
!     maybe-maintainer-clean-zlib \
!     maybe-maintainer-clean-gdb \
!     maybe-maintainer-clean-expect \
!     maybe-maintainer-clean-guile \
!     maybe-maintainer-clean-tk \
!     maybe-maintainer-clean-libtermcap \
!     maybe-maintainer-clean-utils
! 
! .PHONY: maintainer-clean-target
! maintainer-clean-target:  \
!     maybe-maintainer-clean-target-libstdc++-v3 \
!     maybe-maintainer-clean-target-libmudflap \
!     maybe-maintainer-clean-target-newlib \
!     maybe-maintainer-clean-target-libgfortran \
!     maybe-maintainer-clean-target-libobjc \
!     maybe-maintainer-clean-target-libtermcap \
!     maybe-maintainer-clean-target-winsup \
!     maybe-maintainer-clean-target-libgloss \
!     maybe-maintainer-clean-target-libiberty \
!     maybe-maintainer-clean-target-gperf \
!     maybe-maintainer-clean-target-examples \
!     maybe-maintainer-clean-target-libffi \
!     maybe-maintainer-clean-target-libjava \
!     maybe-maintainer-clean-target-zlib \
!     maybe-maintainer-clean-target-boehm-gc \
!     maybe-maintainer-clean-target-qthreads \
!     maybe-maintainer-clean-target-rda \
!     maybe-maintainer-clean-target-libada
! 
! 
! # Here are the targets which correspond to the do-X targets.
! 
! .PHONY: info installcheck dvi html install-info
! .PHONY: clean distclean mostlyclean maintainer-clean realclean
! .PHONY: local-clean local-distclean local-maintainer-clean
! info: do-info
! installcheck: do-installcheck
! dvi: do-dvi
! html: do-html
! 
! # Make sure makeinfo is built before we do a `make info', if we're
! # in fact building texinfo.
! do-info: maybe-all-texinfo
! 
! install-info: do-install-info dir.info
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	if [ -f dir.info ] ; then \
! 	  $(INSTALL_DATA) dir.info $(DESTDIR)$(infodir)/dir.info ; \
! 	else true ; fi
! 
! local-clean:
! 	-rm -f *.a TEMP errs core *.o *~ \#* TAGS *.E *.log
! 
! local-distclean:
! 	-rm -f Makefile config.status config.cache mh-frag mt-frag
! 	-rm -f multilib.out multilib.tmp maybedep.tmp serdep.tmp
! 	-if [ "$(TARGET_SUBDIR)" != "." ]; then \
! 	  rm -rf $(TARGET_SUBDIR); \
! 	else true; fi
! 	-rm -rf $(BUILD_SUBDIR)
! 	-rm -f texinfo/po/Makefile texinfo/po/Makefile.in texinfo/info/Makefile
! 	-rm -f texinfo/doc/Makefile texinfo/po/POTFILES
! 	-rmdir texinfo/doc texinfo/info texinfo/intl texinfo/lib 2>/dev/null
! 	-rmdir texinfo/makeinfo texinfo/po texinfo/util 2>/dev/null
! 	-rmdir fastjar gcc libiberty texinfo zlib 2>/dev/null
! 
! local-maintainer-clean:
! 	@echo "This command is intended for maintainers to use;"
! 	@echo "it deletes files that may require special tools to rebuild."
! 
! clean: do-clean local-clean
! mostlyclean: do-mostlyclean local-clean
! distclean: do-distclean local-clean local-distclean
! maintainer-clean: local-maintainer-clean do-maintainer-clean local-clean 
! maintainer-clean: local-distclean
! realclean: maintainer-clean
! 
! # Extra dependency for clean-target, owing to the mixed nature of gcc
! clean-target: clean-target-libgcc
! clean-target-libgcc:
! 	test ! -d gcc/libgcc || \
! 	(cd gcc/libgcc && find . -type d -print) | \
! 	while read d; do rm -f gcc/$$d/libgcc.a || : ; done
! 	-rm -rf gcc/libgcc
! 	-rm -f gcc/stmp-dirs
! 
! # Check target.
! 
! .PHONY: check do-check
! check: do-check
! 
! # Only include modules actually being configured and built.
! do-check: unstage  \
!     maybe-check-ash \
!     maybe-check-autoconf \
!     maybe-check-automake \
!     maybe-check-bash \
!     maybe-check-bfd \
!     maybe-check-opcodes \
!     maybe-check-binutils \
!     maybe-check-bison \
!     maybe-check-byacc \
!     maybe-check-bzip2 \
!     maybe-check-dejagnu \
!     maybe-check-diff \
!     maybe-check-dosutils \
!     maybe-check-etc \
!     maybe-check-fastjar \
!     maybe-check-fileutils \
!     maybe-check-findutils \
!     maybe-check-find \
!     maybe-check-fixincludes \
!     maybe-check-flex \
!     maybe-check-gas \
!     maybe-check-gcc \
!     maybe-check-gawk \
!     maybe-check-gettext \
!     maybe-check-gnuserv \
!     maybe-check-gprof \
!     maybe-check-gzip \
!     maybe-check-hello \
!     maybe-check-indent \
!     maybe-check-intl \
!     maybe-check-tcl \
!     maybe-check-itcl \
!     maybe-check-ld \
!     maybe-check-libcpp \
!     maybe-check-libgui \
!     maybe-check-libiberty \
!     maybe-check-libtool \
!     maybe-check-m4 \
!     maybe-check-make \
!     maybe-check-mmalloc \
!     maybe-check-patch \
!     maybe-check-perl \
!     maybe-check-prms \
!     maybe-check-rcs \
!     maybe-check-readline \
!     maybe-check-release \
!     maybe-check-recode \
!     maybe-check-sed \
!     maybe-check-send-pr \
!     maybe-check-shellutils \
!     maybe-check-sid \
!     maybe-check-sim \
!     maybe-check-tar \
!     maybe-check-texinfo \
!     maybe-check-textutils \
!     maybe-check-time \
!     maybe-check-uudecode \
!     maybe-check-wdiff \
!     maybe-check-zip \
!     maybe-check-zlib \
!     maybe-check-gdb \
!     maybe-check-expect \
!     maybe-check-guile \
!     maybe-check-tk \
!     maybe-check-libtermcap \
!     maybe-check-utils \
!     maybe-check-target-libstdc++-v3 \
!     maybe-check-target-libmudflap \
!     maybe-check-target-newlib \
!     maybe-check-target-libgfortran \
!     maybe-check-target-libobjc \
!     maybe-check-target-libtermcap \
!     maybe-check-target-winsup \
!     maybe-check-target-libgloss \
!     maybe-check-target-libiberty \
!     maybe-check-target-gperf \
!     maybe-check-target-examples \
!     maybe-check-target-libffi \
!     maybe-check-target-libjava \
!     maybe-check-target-zlib \
!     maybe-check-target-boehm-gc \
!     maybe-check-target-qthreads \
!     maybe-check-target-rda \
!     maybe-check-target-libada stage
! 
! # Automated reporting of test results.
! 
! warning.log: build.log
! 	$(srcdir)/contrib/warn_summary build.log > $@
! 
! mail-report.log:
! 	if test x'$(BOOT_CFLAGS)' != x''; then \
! 	    BOOT_CFLAGS='$(BOOT_CFLAGS)'; export BOOT_CFLAGS; \
! 	fi; \
! 	$(srcdir)/contrib/test_summary -t >$@
! 	chmod +x $@
! 	echo If you really want to send e-mail, run ./$@ now
! 
! mail-report-with-warnings.log: warning.log
! 	if test x'$(BOOT_CFLAGS)' != x''; then \
! 	    BOOT_CFLAGS='$(BOOT_CFLAGS)'; export BOOT_CFLAGS; \
! 	fi; \
! 	$(srcdir)/contrib/test_summary -t -i warning.log >$@
! 	chmod +x $@
! 	echo If you really want to send e-mail, run ./$@ now
! 
! # Installation targets.
! 
! .PHONY: install uninstall
! install: installdirs install-host install-target
! 
! .PHONY: install-host-nogcc
! install-host-nogcc:  \
!     maybe-install-ash \
!     maybe-install-autoconf \
!     maybe-install-automake \
!     maybe-install-bash \
!     maybe-install-bfd \
!     maybe-install-opcodes \
!     maybe-install-binutils \
!     maybe-install-bison \
!     maybe-install-byacc \
!     maybe-install-bzip2 \
!     maybe-install-dejagnu \
!     maybe-install-diff \
!     maybe-install-dosutils \
!     maybe-install-etc \
!     maybe-install-fastjar \
!     maybe-install-fileutils \
!     maybe-install-findutils \
!     maybe-install-find \
!     maybe-install-fixincludes \
!     maybe-install-flex \
!     maybe-install-gas \
!     maybe-install-gawk \
!     maybe-install-gettext \
!     maybe-install-gnuserv \
!     maybe-install-gprof \
!     maybe-install-gzip \
!     maybe-install-hello \
!     maybe-install-indent \
!     maybe-install-intl \
!     maybe-install-tcl \
!     maybe-install-itcl \
!     maybe-install-ld \
!     maybe-install-libcpp \
!     maybe-install-libgui \
!     maybe-install-libiberty \
!     maybe-install-libtool \
!     maybe-install-m4 \
!     maybe-install-make \
!     maybe-install-mmalloc \
!     maybe-install-patch \
!     maybe-install-perl \
!     maybe-install-prms \
!     maybe-install-rcs \
!     maybe-install-readline \
!     maybe-install-release \
!     maybe-install-recode \
!     maybe-install-sed \
!     maybe-install-send-pr \
!     maybe-install-shellutils \
!     maybe-install-sid \
!     maybe-install-sim \
!     maybe-install-tar \
!     maybe-install-texinfo \
!     maybe-install-textutils \
!     maybe-install-time \
!     maybe-install-uudecode \
!     maybe-install-wdiff \
!     maybe-install-zip \
!     maybe-install-zlib \
!     maybe-install-gdb \
!     maybe-install-expect \
!     maybe-install-guile \
!     maybe-install-tk \
!     maybe-install-libtermcap \
!     maybe-install-utils
! 
! .PHONY: install-host
! install-host:  \
!     maybe-install-ash \
!     maybe-install-autoconf \
!     maybe-install-automake \
!     maybe-install-bash \
!     maybe-install-bfd \
!     maybe-install-opcodes \
!     maybe-install-binutils \
!     maybe-install-bison \
!     maybe-install-byacc \
!     maybe-install-bzip2 \
!     maybe-install-dejagnu \
!     maybe-install-diff \
!     maybe-install-dosutils \
!     maybe-install-etc \
!     maybe-install-fastjar \
!     maybe-install-fileutils \
!     maybe-install-findutils \
!     maybe-install-find \
!     maybe-install-fixincludes \
!     maybe-install-flex \
!     maybe-install-gas \
!     maybe-install-gcc \
!     maybe-install-gawk \
!     maybe-install-gettext \
!     maybe-install-gnuserv \
!     maybe-install-gprof \
!     maybe-install-gzip \
!     maybe-install-hello \
!     maybe-install-indent \
!     maybe-install-intl \
!     maybe-install-tcl \
!     maybe-install-itcl \
!     maybe-install-ld \
!     maybe-install-libcpp \
!     maybe-install-libgui \
!     maybe-install-libiberty \
!     maybe-install-libtool \
!     maybe-install-m4 \
!     maybe-install-make \
!     maybe-install-mmalloc \
!     maybe-install-patch \
!     maybe-install-perl \
!     maybe-install-prms \
!     maybe-install-rcs \
!     maybe-install-readline \
!     maybe-install-release \
!     maybe-install-recode \
!     maybe-install-sed \
!     maybe-install-send-pr \
!     maybe-install-shellutils \
!     maybe-install-sid \
!     maybe-install-sim \
!     maybe-install-tar \
!     maybe-install-texinfo \
!     maybe-install-textutils \
!     maybe-install-time \
!     maybe-install-uudecode \
!     maybe-install-wdiff \
!     maybe-install-zip \
!     maybe-install-zlib \
!     maybe-install-gdb \
!     maybe-install-expect \
!     maybe-install-guile \
!     maybe-install-tk \
!     maybe-install-libtermcap \
!     maybe-install-utils
! 
! .PHONY: install-target
! install-target:  \
!     maybe-install-target-libstdc++-v3 \
!     maybe-install-target-libmudflap \
!     maybe-install-target-newlib \
!     maybe-install-target-libgfortran \
!     maybe-install-target-libobjc \
!     maybe-install-target-libtermcap \
!     maybe-install-target-winsup \
!     maybe-install-target-libgloss \
!     maybe-install-target-libiberty \
!     maybe-install-target-gperf \
!     maybe-install-target-examples \
!     maybe-install-target-libffi \
!     maybe-install-target-libjava \
!     maybe-install-target-zlib \
!     maybe-install-target-boehm-gc \
!     maybe-install-target-qthreads \
!     maybe-install-target-rda \
!     maybe-install-target-libada
! 
! uninstall:
! 	@echo "the uninstall target is not supported in this tree"
! 
! .PHONY: install.all
! install.all: install-no-fixedincludes
! 	@if [ -f ./gcc/Makefile ] ; then \
! 		r=`${PWD_COMMAND}` ; export r ; \
! 		$(SET_LIB_PATH) \
! 		$(HOST_EXPORTS) \
! 		(cd ./gcc && \
! 		$(MAKE) $(FLAGS_TO_PASS) install-headers) ; \
! 	else \
! 		true ; \
! 	fi
! 
! # install-no-fixedincludes is used because Cygnus can not distribute
! # the fixed header files.
! .PHONY: install-no-fixedincludes
! install-no-fixedincludes: installdirs install-host-nogcc \
! 	install-target gcc-no-fixedincludes
! 
! ### other supporting targets
! 
! MAKEDIRS= \
! 	$(DESTDIR)$(prefix) \
! 	$(DESTDIR)$(exec_prefix)
! .PHONY: installdirs
! installdirs: mkinstalldirs
! 	$(SHELL) $(srcdir)/mkinstalldirs $(MAKEDIRS)
! 
! dir.info: do-install-info
! 	if [ -f $(srcdir)/texinfo/gen-info-dir ] ; then \
! 	  $(srcdir)/texinfo/gen-info-dir $(DESTDIR)$(infodir) $(srcdir)/texinfo/dir.info-template > dir.info.new ; \
! 	  mv -f dir.info.new dir.info ; \
! 	else true ; \
! 	fi
! 
! dist:
! 	@echo "Building a full distribution of this tree isn't done"
! 	@echo "via 'make dist'.  Check out the etc/ subdirectory" 
! 
! etags tags: TAGS
! 
! # Right now this just builds TAGS in each subdirectory.  emacs19 has the
! # ability to use several tags files at once, so there is probably no need
! # to combine them into one big TAGS file (like CVS 1.3 does).  We could
! # (if we felt like it) have this Makefile write a piece of elisp which
! # the user could load to tell emacs19 where all the TAGS files we just
! # built are.
! TAGS: do-TAGS
! 
! # --------------------------------------
! # Modules which run on the build machine
! # --------------------------------------
! 
! .PHONY: configure-build-libiberty maybe-configure-build-libiberty
! maybe-configure-build-libiberty:
! @if build-libiberty
! maybe-configure-build-libiberty: configure-build-libiberty
! configure-build-libiberty:
! 	@test ! -f $(BUILD_SUBDIR)/libiberty/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(BUILD_SUBDIR)/libiberty ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(BUILD_EXPORTS) \
! 	echo Configuring in $(BUILD_SUBDIR)/libiberty; \
! 	cd "$(BUILD_SUBDIR)/libiberty" || exit 1; \
! 	case $(srcdir) in \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    topdir=$(srcdir) ;; \
! 	  *) \
! 	    case "$(BUILD_SUBDIR)" in \
! 	      .) topdir="../$(srcdir)" ;; \
! 	      *) topdir="../../$(srcdir)" ;; \
! 	    esac ;; \
! 	esac; \
! 	if [ "$(srcdir)" = "." ] ; then \
! 	  if [ "$(BUILD_SUBDIR)" != "." ] ; then \
! 	    if $(SHELL) $$s/symlink-tree $${topdir}/libiberty "no-such-file" ; then \
! 	      if [ -f Makefile ]; then \
! 	        if $(MAKE) distclean; then \
! 	          true; \
! 	        else \
! 	          exit 1; \
! 	        fi; \
! 	      else \
! 	        true; \
! 	      fi; \
! 	    else \
! 	      exit 1; \
! 	    fi; \
! 	  else \
! 	    true; \
! 	  fi; \
! 	  srcdiroption="--srcdir=."; \
! 	  libsrcdir="."; \
! 	else \
! 	  srcdiroption="--srcdir=$${topdir}/libiberty"; \
! 	  libsrcdir="$$s/libiberty"; \
! 	fi; \
! 	rm -f no-such-file || : ; \
! 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
! 	  $(BUILD_CONFIGARGS) $${srcdiroption} \
! 	  --with-build-subdir="$(BUILD_SUBDIR)"  \
  	  || exit 1
+ @endif build-libiberty
  
! .PHONY: all-build-libiberty maybe-all-build-libiberty
! maybe-all-build-libiberty:
! @if build-libiberty
! TARGET-build-libiberty=all
! maybe-all-build-libiberty: all-build-libiberty
! all-build-libiberty: configure-build-libiberty
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(BUILD_EXPORTS) \
! 	(cd $(BUILD_SUBDIR)/libiberty && \
! 	  $(MAKE)  $(TARGET-build-libiberty))
! @endif build-libiberty
! 
! .PHONY: configure-build-bison maybe-configure-build-bison
! maybe-configure-build-bison:
! @if build-bison
! maybe-configure-build-bison: configure-build-bison
! configure-build-bison:
! 	@test ! -f $(BUILD_SUBDIR)/bison/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(BUILD_SUBDIR)/bison ; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(BUILD_EXPORTS) \
! 	echo Configuring in $(BUILD_SUBDIR)/bison; \
! 	cd "$(BUILD_SUBDIR)/bison" || exit 1; \
! 	case $(srcdir) in \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    topdir=$(srcdir) ;; \
! 	  *) \
! 	    case "$(BUILD_SUBDIR)" in \
! 	      .) topdir="../$(srcdir)" ;; \
! 	      *) topdir="../../$(srcdir)" ;; \
! 	    esac ;; \
! 	esac; \
! 	if [ "$(srcdir)" = "." ] ; then \
! 	  if [ "$(BUILD_SUBDIR)" != "." ] ; then \
! 	    if $(SHELL) $$s/symlink-tree $${topdir}/bison "no-such-file" ; then \
! 	      if [ -f Makefile ]; then \
! 	        if $(MAKE) distclean; then \
! 	          true; \
! 	        else \
! 	          exit 1; \
! 	        fi; \
! 	      else \
! 	        true; \
! 	      fi; \
! 	    else \
! 	      exit 1; \
! 	    fi; \
! 	  else \
! 	    true; \
! 	  fi; \
! 	  srcdiroption="--srcdir=."; \
! 	  libsrcdir="."; \
! 	else \
! 	  srcdiroption="--srcdir=$${topdir}/bison"; \
! 	  libsrcdir="$$s/bison"; \
! 	fi; \
! 	rm -f no-such-file || : ; \
! 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
! 	  $(BUILD_CONFIGARGS) $${srcdiroption} \
! 	  --with-build-subdir="$(BUILD_SUBDIR)"  \
! 	  || exit 1
! @endif build-bison
! 
! .PHONY: all-build-bison maybe-all-build-bison
! maybe-all-build-bison:
! @if build-bison
! TARGET-build-bison=all
! maybe-all-build-bison: all-build-bison
! all-build-bison: configure-build-bison
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(BUILD_EXPORTS) \
! 	(cd $(BUILD_SUBDIR)/bison && \
! 	  $(MAKE)  $(TARGET-build-bison))
! @endif build-bison
! 
! .PHONY: configure-build-byacc maybe-configure-build-byacc
! maybe-configure-build-byacc:
! @if build-byacc
! maybe-configure-build-byacc: configure-build-byacc
! configure-build-byacc:
! 	@test ! -f $(BUILD_SUBDIR)/byacc/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(BUILD_SUBDIR)/byacc ; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(BUILD_EXPORTS) \
! 	echo Configuring in $(BUILD_SUBDIR)/byacc; \
! 	cd "$(BUILD_SUBDIR)/byacc" || exit 1; \
! 	case $(srcdir) in \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    topdir=$(srcdir) ;; \
! 	  *) \
! 	    case "$(BUILD_SUBDIR)" in \
! 	      .) topdir="../$(srcdir)" ;; \
! 	      *) topdir="../../$(srcdir)" ;; \
! 	    esac ;; \
! 	esac; \
! 	if [ "$(srcdir)" = "." ] ; then \
! 	  if [ "$(BUILD_SUBDIR)" != "." ] ; then \
! 	    if $(SHELL) $$s/symlink-tree $${topdir}/byacc "no-such-file" ; then \
! 	      if [ -f Makefile ]; then \
! 	        if $(MAKE) distclean; then \
! 	          true; \
! 	        else \
! 	          exit 1; \
! 	        fi; \
! 	      else \
! 	        true; \
! 	      fi; \
! 	    else \
! 	      exit 1; \
! 	    fi; \
! 	  else \
! 	    true; \
! 	  fi; \
! 	  srcdiroption="--srcdir=."; \
! 	  libsrcdir="."; \
! 	else \
! 	  srcdiroption="--srcdir=$${topdir}/byacc"; \
! 	  libsrcdir="$$s/byacc"; \
! 	fi; \
! 	rm -f no-such-file || : ; \
! 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
! 	  $(BUILD_CONFIGARGS) $${srcdiroption} \
! 	  --with-build-subdir="$(BUILD_SUBDIR)"  \
! 	  || exit 1
! @endif build-byacc
! 
! .PHONY: all-build-byacc maybe-all-build-byacc
! maybe-all-build-byacc:
! @if build-byacc
! TARGET-build-byacc=all
! maybe-all-build-byacc: all-build-byacc
! all-build-byacc: configure-build-byacc
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(BUILD_EXPORTS) \
! 	(cd $(BUILD_SUBDIR)/byacc && \
! 	  $(MAKE)  $(TARGET-build-byacc))
! @endif build-byacc
! 
! .PHONY: configure-build-flex maybe-configure-build-flex
! maybe-configure-build-flex:
! @if build-flex
! maybe-configure-build-flex: configure-build-flex
! configure-build-flex:
! 	@test ! -f $(BUILD_SUBDIR)/flex/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(BUILD_SUBDIR)/flex ; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(BUILD_EXPORTS) \
! 	echo Configuring in $(BUILD_SUBDIR)/flex; \
! 	cd "$(BUILD_SUBDIR)/flex" || exit 1; \
! 	case $(srcdir) in \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    topdir=$(srcdir) ;; \
! 	  *) \
! 	    case "$(BUILD_SUBDIR)" in \
! 	      .) topdir="../$(srcdir)" ;; \
! 	      *) topdir="../../$(srcdir)" ;; \
! 	    esac ;; \
! 	esac; \
! 	if [ "$(srcdir)" = "." ] ; then \
! 	  if [ "$(BUILD_SUBDIR)" != "." ] ; then \
! 	    if $(SHELL) $$s/symlink-tree $${topdir}/flex "no-such-file" ; then \
! 	      if [ -f Makefile ]; then \
! 	        if $(MAKE) distclean; then \
! 	          true; \
! 	        else \
! 	          exit 1; \
! 	        fi; \
! 	      else \
! 	        true; \
! 	      fi; \
! 	    else \
! 	      exit 1; \
! 	    fi; \
! 	  else \
! 	    true; \
! 	  fi; \
! 	  srcdiroption="--srcdir=."; \
! 	  libsrcdir="."; \
! 	else \
! 	  srcdiroption="--srcdir=$${topdir}/flex"; \
! 	  libsrcdir="$$s/flex"; \
! 	fi; \
! 	rm -f no-such-file || : ; \
! 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
! 	  $(BUILD_CONFIGARGS) $${srcdiroption} \
! 	  --with-build-subdir="$(BUILD_SUBDIR)"  \
! 	  || exit 1
! @endif build-flex
! 
! .PHONY: all-build-flex maybe-all-build-flex
! maybe-all-build-flex:
! @if build-flex
! TARGET-build-flex=all
! maybe-all-build-flex: all-build-flex
! all-build-flex: configure-build-flex
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(BUILD_EXPORTS) \
! 	(cd $(BUILD_SUBDIR)/flex && \
! 	  $(MAKE)  $(TARGET-build-flex))
! @endif build-flex
! 
! .PHONY: configure-build-m4 maybe-configure-build-m4
! maybe-configure-build-m4:
! @if build-m4
! maybe-configure-build-m4: configure-build-m4
! configure-build-m4:
! 	@test ! -f $(BUILD_SUBDIR)/m4/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(BUILD_SUBDIR)/m4 ; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(BUILD_EXPORTS) \
! 	echo Configuring in $(BUILD_SUBDIR)/m4; \
! 	cd "$(BUILD_SUBDIR)/m4" || exit 1; \
! 	case $(srcdir) in \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    topdir=$(srcdir) ;; \
! 	  *) \
! 	    case "$(BUILD_SUBDIR)" in \
! 	      .) topdir="../$(srcdir)" ;; \
! 	      *) topdir="../../$(srcdir)" ;; \
! 	    esac ;; \
! 	esac; \
! 	if [ "$(srcdir)" = "." ] ; then \
! 	  if [ "$(BUILD_SUBDIR)" != "." ] ; then \
! 	    if $(SHELL) $$s/symlink-tree $${topdir}/m4 "no-such-file" ; then \
! 	      if [ -f Makefile ]; then \
! 	        if $(MAKE) distclean; then \
! 	          true; \
! 	        else \
! 	          exit 1; \
! 	        fi; \
! 	      else \
! 	        true; \
! 	      fi; \
! 	    else \
! 	      exit 1; \
! 	    fi; \
! 	  else \
! 	    true; \
! 	  fi; \
! 	  srcdiroption="--srcdir=."; \
! 	  libsrcdir="."; \
! 	else \
! 	  srcdiroption="--srcdir=$${topdir}/m4"; \
! 	  libsrcdir="$$s/m4"; \
! 	fi; \
! 	rm -f no-such-file || : ; \
! 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
! 	  $(BUILD_CONFIGARGS) $${srcdiroption} \
! 	  --with-build-subdir="$(BUILD_SUBDIR)"  \
! 	  || exit 1
! @endif build-m4
! 
! .PHONY: all-build-m4 maybe-all-build-m4
! maybe-all-build-m4:
! @if build-m4
! TARGET-build-m4=all
! maybe-all-build-m4: all-build-m4
! all-build-m4: configure-build-m4
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(BUILD_EXPORTS) \
! 	(cd $(BUILD_SUBDIR)/m4 && \
! 	  $(MAKE)  $(TARGET-build-m4))
! @endif build-m4
! 
! .PHONY: configure-build-texinfo maybe-configure-build-texinfo
! maybe-configure-build-texinfo:
! @if build-texinfo
! maybe-configure-build-texinfo: configure-build-texinfo
! configure-build-texinfo:
! 	@test ! -f $(BUILD_SUBDIR)/texinfo/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(BUILD_SUBDIR)/texinfo ; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(BUILD_EXPORTS) \
! 	echo Configuring in $(BUILD_SUBDIR)/texinfo; \
! 	cd "$(BUILD_SUBDIR)/texinfo" || exit 1; \
! 	case $(srcdir) in \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    topdir=$(srcdir) ;; \
! 	  *) \
! 	    case "$(BUILD_SUBDIR)" in \
! 	      .) topdir="../$(srcdir)" ;; \
! 	      *) topdir="../../$(srcdir)" ;; \
! 	    esac ;; \
! 	esac; \
! 	if [ "$(srcdir)" = "." ] ; then \
! 	  if [ "$(BUILD_SUBDIR)" != "." ] ; then \
! 	    if $(SHELL) $$s/symlink-tree $${topdir}/texinfo "no-such-file" ; then \
! 	      if [ -f Makefile ]; then \
! 	        if $(MAKE) distclean; then \
! 	          true; \
! 	        else \
! 	          exit 1; \
! 	        fi; \
! 	      else \
! 	        true; \
! 	      fi; \
! 	    else \
! 	      exit 1; \
! 	    fi; \
! 	  else \
! 	    true; \
! 	  fi; \
! 	  srcdiroption="--srcdir=."; \
! 	  libsrcdir="."; \
! 	else \
! 	  srcdiroption="--srcdir=$${topdir}/texinfo"; \
! 	  libsrcdir="$$s/texinfo"; \
! 	fi; \
! 	rm -f no-such-file || : ; \
! 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
! 	  $(BUILD_CONFIGARGS) $${srcdiroption} \
! 	  --with-build-subdir="$(BUILD_SUBDIR)"  \
! 	  || exit 1
! @endif build-texinfo
! 
! .PHONY: all-build-texinfo maybe-all-build-texinfo
! maybe-all-build-texinfo:
! @if build-texinfo
! TARGET-build-texinfo=all
! maybe-all-build-texinfo: all-build-texinfo
! all-build-texinfo: configure-build-texinfo
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(BUILD_EXPORTS) \
! 	(cd $(BUILD_SUBDIR)/texinfo && \
! 	  $(MAKE)  $(TARGET-build-texinfo))
! @endif build-texinfo
! 
! .PHONY: configure-build-fixincludes maybe-configure-build-fixincludes
! maybe-configure-build-fixincludes:
! @if build-fixincludes
! maybe-configure-build-fixincludes: configure-build-fixincludes
! configure-build-fixincludes:
! 	@test ! -f $(BUILD_SUBDIR)/fixincludes/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(BUILD_SUBDIR)/fixincludes ; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(BUILD_EXPORTS) \
! 	echo Configuring in $(BUILD_SUBDIR)/fixincludes; \
! 	cd "$(BUILD_SUBDIR)/fixincludes" || exit 1; \
! 	case $(srcdir) in \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    topdir=$(srcdir) ;; \
! 	  *) \
! 	    case "$(BUILD_SUBDIR)" in \
! 	      .) topdir="../$(srcdir)" ;; \
! 	      *) topdir="../../$(srcdir)" ;; \
! 	    esac ;; \
! 	esac; \
! 	if [ "$(srcdir)" = "." ] ; then \
! 	  if [ "$(BUILD_SUBDIR)" != "." ] ; then \
! 	    if $(SHELL) $$s/symlink-tree $${topdir}/fixincludes "no-such-file" ; then \
! 	      if [ -f Makefile ]; then \
! 	        if $(MAKE) distclean; then \
! 	          true; \
! 	        else \
! 	          exit 1; \
! 	        fi; \
! 	      else \
! 	        true; \
! 	      fi; \
! 	    else \
! 	      exit 1; \
! 	    fi; \
! 	  else \
! 	    true; \
! 	  fi; \
! 	  srcdiroption="--srcdir=."; \
! 	  libsrcdir="."; \
! 	else \
! 	  srcdiroption="--srcdir=$${topdir}/fixincludes"; \
! 	  libsrcdir="$$s/fixincludes"; \
! 	fi; \
! 	rm -f no-such-file || : ; \
! 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
! 	  $(BUILD_CONFIGARGS) $${srcdiroption} \
! 	  --with-build-subdir="$(BUILD_SUBDIR)"  \
! 	  || exit 1
! @endif build-fixincludes
! 
! .PHONY: all-build-fixincludes maybe-all-build-fixincludes
! maybe-all-build-fixincludes:
! @if build-fixincludes
! TARGET-build-fixincludes=all
! maybe-all-build-fixincludes: all-build-fixincludes
! all-build-fixincludes: configure-build-fixincludes
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(BUILD_EXPORTS) \
! 	(cd $(BUILD_SUBDIR)/fixincludes && \
! 	  $(MAKE)  $(TARGET-build-fixincludes))
! @endif build-fixincludes
! 
! 
! # --------------------------------------
! # Modules which run on the host machine
! # --------------------------------------
! 
! .PHONY: configure-ash maybe-configure-ash
! maybe-configure-ash:
! @if ash
! maybe-configure-ash: configure-ash
! configure-ash:
! 	@test ! -f ash/Makefile || exit 0; \
! 	[ -d ash ] || mkdir ash; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(HOST_EXPORTS) \
! 	echo Configuring in ash; \
! 	cd ash || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/ash"; \
! 	    libsrcdir="$$s/ash";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/ash"; \
! 	    libsrcdir="$$s/ash";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
! 	  || exit 1
! @endif ash
! 
! .PHONY: all-ash maybe-all-ash
! maybe-all-ash:
! @if ash
! TARGET-ash=all
! maybe-all-ash: all-ash
! all-ash: configure-ash
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd ash && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-ash))
! @endif ash
! 
! .PHONY: check-ash maybe-check-ash
! maybe-check-ash:
! @if ash
! maybe-check-ash: check-ash
! 
! check-ash:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd ash && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif ash
! 
! .PHONY: install-ash maybe-install-ash
! maybe-install-ash:
! @if ash
! maybe-install-ash: install-ash
! 
! install-ash: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd ash && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif ash
! 
! # Other targets (info, dvi, etc.)
  
  .PHONY: maybe-info-ash info-ash
  maybe-info-ash:
+ @if ash
+ maybe-info-ash: info-ash
  
  info-ash: \
      configure-ash 
*************** info-ash: \
*** 829,835 ****
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
  	echo "Doing info in ash" ; \
--- 2705,2712 ----
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
  	echo "Doing info in ash" ; \
*************** info-ash: \
*** 841,1059 ****
  	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-autoconf info-autoconf
! maybe-info-autoconf:
  
! info-autoconf: \
!     configure-autoconf 
! 	@[ -f ./autoconf/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in autoconf" ; \
! 	(cd autoconf && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-automake info-automake
! maybe-info-automake:
  
! info-automake: \
!     configure-automake 
! 	@[ -f ./automake/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in automake" ; \
! 	(cd automake && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-bash info-bash
! maybe-info-bash:
  
! info-bash: \
!     configure-bash 
! 	@[ -f ./bash/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in bash" ; \
! 	(cd bash && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-bfd info-bfd
! maybe-info-bfd:
  
! info-bfd: \
!     configure-bfd 
! 	@[ -f ./bfd/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in bfd" ; \
! 	(cd bfd && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-opcodes info-opcodes
! maybe-info-opcodes:
  
! info-opcodes: \
!     configure-opcodes 
! 	@[ -f ./opcodes/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in opcodes" ; \
! 	(cd opcodes && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-binutils info-binutils
! maybe-info-binutils:
  
! info-binutils: \
!     configure-binutils 
! 	@[ -f ./binutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in binutils" ; \
! 	(cd binutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-bison info-bison
! maybe-info-bison:
  
! info-bison: \
!     configure-bison 
! 	@[ -f ./bison/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in bison" ; \
! 	(cd bison && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-byacc info-byacc
! maybe-info-byacc:
  
! info-byacc: \
!     configure-byacc 
! 	@[ -f ./byacc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in byacc" ; \
! 	(cd byacc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-bzip2 info-bzip2
! maybe-info-bzip2:
  
! info-bzip2: \
!     configure-bzip2 
! 	@[ -f ./bzip2/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in bzip2" ; \
! 	(cd bzip2 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
- .PHONY: maybe-info-dejagnu info-dejagnu
- maybe-info-dejagnu:
  
! info-dejagnu: \
!     configure-dejagnu 
! 	@[ -f ./dejagnu/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in dejagnu" ; \
! 	(cd dejagnu && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 2718,3046 ----
  	          info) \
  	  || exit 1
  
+ @endif ash
  
! .PHONY: maybe-dvi-ash dvi-ash
! maybe-dvi-ash:
! @if ash
! maybe-dvi-ash: dvi-ash
  
! dvi-ash: \
!     configure-ash 
! 	@[ -f ./ash/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in ash" ; \
! 	(cd ash && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif ash
  
! .PHONY: maybe-html-ash html-ash
! maybe-html-ash:
! @if ash
! maybe-html-ash: html-ash
  
! html-ash: \
!     configure-ash 
! 	@[ -f ./ash/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in ash" ; \
! 	(cd ash && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif ash
  
! .PHONY: maybe-TAGS-ash TAGS-ash
! maybe-TAGS-ash:
! @if ash
! maybe-TAGS-ash: TAGS-ash
  
! TAGS-ash: \
!     configure-ash 
! 	@[ -f ./ash/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in ash" ; \
! 	(cd ash && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif ash
  
! .PHONY: maybe-install-info-ash install-info-ash
! maybe-install-info-ash:
! @if ash
! maybe-install-info-ash: install-info-ash
  
! install-info-ash: \
!     configure-ash \
!     info-ash 
! 	@[ -f ./ash/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in ash" ; \
! 	(cd ash && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif ash
  
! .PHONY: maybe-installcheck-ash installcheck-ash
! maybe-installcheck-ash:
! @if ash
! maybe-installcheck-ash: installcheck-ash
  
! installcheck-ash: \
!     configure-ash 
! 	@[ -f ./ash/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in ash" ; \
! 	(cd ash && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif ash
  
! .PHONY: maybe-mostlyclean-ash mostlyclean-ash
! maybe-mostlyclean-ash:
! @if ash
! maybe-mostlyclean-ash: mostlyclean-ash
  
! mostlyclean-ash: 
! 	@[ -f ./ash/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in ash" ; \
! 	(cd ash && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif ash
  
! .PHONY: maybe-clean-ash clean-ash
! maybe-clean-ash:
! @if ash
! maybe-clean-ash: clean-ash
  
! clean-ash: 
! 	@[ -f ./ash/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in ash" ; \
! 	(cd ash && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif ash
  
! .PHONY: maybe-distclean-ash distclean-ash
! maybe-distclean-ash:
! @if ash
! maybe-distclean-ash: distclean-ash
  
! distclean-ash: 
! 	@[ -f ./ash/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in ash" ; \
! 	(cd ash && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif ash
  
! .PHONY: maybe-maintainer-clean-ash maintainer-clean-ash
! maybe-maintainer-clean-ash:
! @if ash
! maybe-maintainer-clean-ash: maintainer-clean-ash
  
! maintainer-clean-ash: 
! 	@[ -f ./ash/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in ash" ; \
! 	(cd ash && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif ash
  
  
! .PHONY: configure-autoconf maybe-configure-autoconf
! maybe-configure-autoconf:
! @if autoconf
! maybe-configure-autoconf: configure-autoconf
! configure-autoconf:
! 	@test ! -f autoconf/Makefile || exit 0; \
! 	[ -d autoconf ] || mkdir autoconf; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in autoconf; \
+ 	cd autoconf || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/autoconf"; \
+ 	    libsrcdir="$$s/autoconf";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/autoconf"; \
+ 	    libsrcdir="$$s/autoconf";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif autoconf
+ 
+ .PHONY: all-autoconf maybe-all-autoconf
+ maybe-all-autoconf:
+ @if autoconf
+ TARGET-autoconf=all
+ maybe-all-autoconf: all-autoconf
+ all-autoconf: configure-autoconf
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd autoconf && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-autoconf))
! @endif autoconf
! 
! .PHONY: check-autoconf maybe-check-autoconf
! maybe-check-autoconf:
! @if autoconf
! maybe-check-autoconf: check-autoconf
! 
! check-autoconf:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd autoconf && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif autoconf
! 
! .PHONY: install-autoconf maybe-install-autoconf
! maybe-install-autoconf:
! @if autoconf
! maybe-install-autoconf: install-autoconf
! 
! install-autoconf: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd autoconf && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif autoconf
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-autoconf info-autoconf
! maybe-info-autoconf:
! @if autoconf
! maybe-info-autoconf: info-autoconf
! 
! info-autoconf: \
!     configure-autoconf 
! 	@[ -f ./autoconf/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in autoconf" ; \
! 	(cd autoconf && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** info-dejagnu: \
*** 1061,1279 ****
  	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-diff info-diff
! maybe-info-diff:
  
! info-diff: \
!     configure-diff 
! 	@[ -f ./diff/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in diff" ; \
! 	(cd diff && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-dosutils info-dosutils
! maybe-info-dosutils:
  
! info-dosutils: \
!     configure-dosutils 
! 	@[ -f ./dosutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in dosutils" ; \
! 	(cd dosutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-etc info-etc
! maybe-info-etc:
  
! info-etc: \
!     configure-etc 
! 	@[ -f ./etc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in etc" ; \
! 	(cd etc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-fastjar info-fastjar
! maybe-info-fastjar:
  
! info-fastjar: \
!     configure-fastjar 
! 	@[ -f ./fastjar/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in fastjar" ; \
! 	(cd fastjar && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-fileutils info-fileutils
! maybe-info-fileutils:
  
! info-fileutils: \
!     configure-fileutils 
! 	@[ -f ./fileutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in fileutils" ; \
! 	(cd fileutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-findutils info-findutils
! maybe-info-findutils:
  
! info-findutils: \
!     configure-findutils 
! 	@[ -f ./findutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in findutils" ; \
! 	(cd findutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-find info-find
! maybe-info-find:
  
! info-find: \
!     configure-find 
! 	@[ -f ./find/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in find" ; \
! 	(cd find && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-flex info-flex
! maybe-info-flex:
  
! info-flex: \
!     configure-flex 
! 	@[ -f ./flex/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in flex" ; \
! 	(cd flex && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-gas info-gas
! maybe-info-gas:
  
! info-gas: \
!     configure-gas 
! 	@[ -f ./gas/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in gas" ; \
! 	(cd gas && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
- .PHONY: maybe-info-gawk info-gawk
- maybe-info-gawk:
  
! info-gawk: \
!     configure-gawk 
! 	@[ -f ./gawk/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in gawk" ; \
! 	(cd gawk && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 3048,3376 ----
  	          info) \
  	  || exit 1
  
+ @endif autoconf
  
! .PHONY: maybe-dvi-autoconf dvi-autoconf
! maybe-dvi-autoconf:
! @if autoconf
! maybe-dvi-autoconf: dvi-autoconf
  
! dvi-autoconf: \
!     configure-autoconf 
! 	@[ -f ./autoconf/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in autoconf" ; \
! 	(cd autoconf && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif autoconf
  
! .PHONY: maybe-html-autoconf html-autoconf
! maybe-html-autoconf:
! @if autoconf
! maybe-html-autoconf: html-autoconf
  
! html-autoconf: \
!     configure-autoconf 
! 	@[ -f ./autoconf/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in autoconf" ; \
! 	(cd autoconf && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif autoconf
  
! .PHONY: maybe-TAGS-autoconf TAGS-autoconf
! maybe-TAGS-autoconf:
! @if autoconf
! maybe-TAGS-autoconf: TAGS-autoconf
  
! TAGS-autoconf: \
!     configure-autoconf 
! 	@[ -f ./autoconf/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in autoconf" ; \
! 	(cd autoconf && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif autoconf
  
! .PHONY: maybe-install-info-autoconf install-info-autoconf
! maybe-install-info-autoconf:
! @if autoconf
! maybe-install-info-autoconf: install-info-autoconf
  
! install-info-autoconf: \
!     configure-autoconf \
!     info-autoconf 
! 	@[ -f ./autoconf/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in autoconf" ; \
! 	(cd autoconf && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif autoconf
  
! .PHONY: maybe-installcheck-autoconf installcheck-autoconf
! maybe-installcheck-autoconf:
! @if autoconf
! maybe-installcheck-autoconf: installcheck-autoconf
  
! installcheck-autoconf: \
!     configure-autoconf 
! 	@[ -f ./autoconf/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in autoconf" ; \
! 	(cd autoconf && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif autoconf
  
! .PHONY: maybe-mostlyclean-autoconf mostlyclean-autoconf
! maybe-mostlyclean-autoconf:
! @if autoconf
! maybe-mostlyclean-autoconf: mostlyclean-autoconf
  
! mostlyclean-autoconf: 
! 	@[ -f ./autoconf/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in autoconf" ; \
! 	(cd autoconf && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif autoconf
  
! .PHONY: maybe-clean-autoconf clean-autoconf
! maybe-clean-autoconf:
! @if autoconf
! maybe-clean-autoconf: clean-autoconf
  
! clean-autoconf: 
! 	@[ -f ./autoconf/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in autoconf" ; \
! 	(cd autoconf && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif autoconf
  
! .PHONY: maybe-distclean-autoconf distclean-autoconf
! maybe-distclean-autoconf:
! @if autoconf
! maybe-distclean-autoconf: distclean-autoconf
  
! distclean-autoconf: 
! 	@[ -f ./autoconf/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in autoconf" ; \
! 	(cd autoconf && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif autoconf
  
! .PHONY: maybe-maintainer-clean-autoconf maintainer-clean-autoconf
! maybe-maintainer-clean-autoconf:
! @if autoconf
! maybe-maintainer-clean-autoconf: maintainer-clean-autoconf
  
! maintainer-clean-autoconf: 
! 	@[ -f ./autoconf/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in autoconf" ; \
! 	(cd autoconf && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif autoconf
  
  
! .PHONY: configure-automake maybe-configure-automake
! maybe-configure-automake:
! @if automake
! maybe-configure-automake: configure-automake
! configure-automake:
! 	@test ! -f automake/Makefile || exit 0; \
! 	[ -d automake ] || mkdir automake; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in automake; \
+ 	cd automake || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/automake"; \
+ 	    libsrcdir="$$s/automake";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/automake"; \
+ 	    libsrcdir="$$s/automake";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif automake
+ 
+ .PHONY: all-automake maybe-all-automake
+ maybe-all-automake:
+ @if automake
+ TARGET-automake=all
+ maybe-all-automake: all-automake
+ all-automake: configure-automake
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd automake && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-automake))
! @endif automake
! 
! .PHONY: check-automake maybe-check-automake
! maybe-check-automake:
! @if automake
! maybe-check-automake: check-automake
! 
! check-automake:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd automake && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif automake
! 
! .PHONY: install-automake maybe-install-automake
! maybe-install-automake:
! @if automake
! maybe-install-automake: install-automake
! 
! install-automake: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd automake && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif automake
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-automake info-automake
! maybe-info-automake:
! @if automake
! maybe-info-automake: info-automake
! 
! info-automake: \
!     configure-automake 
! 	@[ -f ./automake/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in automake" ; \
! 	(cd automake && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** info-gawk: \
*** 1281,1499 ****
  	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-gettext info-gettext
! maybe-info-gettext:
  
! info-gettext: \
!     configure-gettext 
! 	@[ -f ./gettext/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in gettext" ; \
! 	(cd gettext && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-gnuserv info-gnuserv
! maybe-info-gnuserv:
  
! info-gnuserv: \
!     configure-gnuserv 
! 	@[ -f ./gnuserv/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in gnuserv" ; \
! 	(cd gnuserv && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-gprof info-gprof
! maybe-info-gprof:
  
! info-gprof: \
!     configure-gprof 
! 	@[ -f ./gprof/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in gprof" ; \
! 	(cd gprof && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-gzip info-gzip
! maybe-info-gzip:
  
! info-gzip: \
!     configure-gzip 
! 	@[ -f ./gzip/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in gzip" ; \
! 	(cd gzip && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-hello info-hello
! maybe-info-hello:
  
! info-hello: \
!     configure-hello 
! 	@[ -f ./hello/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in hello" ; \
! 	(cd hello && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-indent info-indent
! maybe-info-indent:
  
! info-indent: \
!     configure-indent 
! 	@[ -f ./indent/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in indent" ; \
! 	(cd indent && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-intl info-intl
! maybe-info-intl:
  
! info-intl: \
!     configure-intl 
! 	@[ -f ./intl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in intl" ; \
! 	(cd intl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-tcl info-tcl
! maybe-info-tcl:
  
! info-tcl: \
!     configure-tcl 
! 	@[ -f ./tcl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in tcl" ; \
! 	(cd tcl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-itcl info-itcl
! maybe-info-itcl:
  
! info-itcl: \
!     configure-itcl 
! 	@[ -f ./itcl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in itcl" ; \
! 	(cd itcl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
- .PHONY: maybe-info-ld info-ld
- maybe-info-ld:
  
! info-ld: \
!     configure-ld 
! 	@[ -f ./ld/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in ld" ; \
! 	(cd ld && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 3378,3706 ----
  	          info) \
  	  || exit 1
  
+ @endif automake
  
! .PHONY: maybe-dvi-automake dvi-automake
! maybe-dvi-automake:
! @if automake
! maybe-dvi-automake: dvi-automake
  
! dvi-automake: \
!     configure-automake 
! 	@[ -f ./automake/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in automake" ; \
! 	(cd automake && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif automake
  
! .PHONY: maybe-html-automake html-automake
! maybe-html-automake:
! @if automake
! maybe-html-automake: html-automake
  
! html-automake: \
!     configure-automake 
! 	@[ -f ./automake/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in automake" ; \
! 	(cd automake && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif automake
  
! .PHONY: maybe-TAGS-automake TAGS-automake
! maybe-TAGS-automake:
! @if automake
! maybe-TAGS-automake: TAGS-automake
  
! TAGS-automake: \
!     configure-automake 
! 	@[ -f ./automake/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in automake" ; \
! 	(cd automake && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif automake
  
! .PHONY: maybe-install-info-automake install-info-automake
! maybe-install-info-automake:
! @if automake
! maybe-install-info-automake: install-info-automake
  
! install-info-automake: \
!     configure-automake \
!     info-automake 
! 	@[ -f ./automake/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in automake" ; \
! 	(cd automake && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif automake
  
! .PHONY: maybe-installcheck-automake installcheck-automake
! maybe-installcheck-automake:
! @if automake
! maybe-installcheck-automake: installcheck-automake
  
! installcheck-automake: \
!     configure-automake 
! 	@[ -f ./automake/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in automake" ; \
! 	(cd automake && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif automake
  
! .PHONY: maybe-mostlyclean-automake mostlyclean-automake
! maybe-mostlyclean-automake:
! @if automake
! maybe-mostlyclean-automake: mostlyclean-automake
  
! mostlyclean-automake: 
! 	@[ -f ./automake/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in automake" ; \
! 	(cd automake && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif automake
  
! .PHONY: maybe-clean-automake clean-automake
! maybe-clean-automake:
! @if automake
! maybe-clean-automake: clean-automake
  
! clean-automake: 
! 	@[ -f ./automake/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in automake" ; \
! 	(cd automake && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif automake
  
! .PHONY: maybe-distclean-automake distclean-automake
! maybe-distclean-automake:
! @if automake
! maybe-distclean-automake: distclean-automake
  
! distclean-automake: 
! 	@[ -f ./automake/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in automake" ; \
! 	(cd automake && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif automake
  
! .PHONY: maybe-maintainer-clean-automake maintainer-clean-automake
! maybe-maintainer-clean-automake:
! @if automake
! maybe-maintainer-clean-automake: maintainer-clean-automake
  
! maintainer-clean-automake: 
! 	@[ -f ./automake/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in automake" ; \
! 	(cd automake && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif automake
  
  
! .PHONY: configure-bash maybe-configure-bash
! maybe-configure-bash:
! @if bash
! maybe-configure-bash: configure-bash
! configure-bash:
! 	@test ! -f bash/Makefile || exit 0; \
! 	[ -d bash ] || mkdir bash; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in bash; \
+ 	cd bash || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/bash"; \
+ 	    libsrcdir="$$s/bash";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/bash"; \
+ 	    libsrcdir="$$s/bash";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif bash
+ 
+ .PHONY: all-bash maybe-all-bash
+ maybe-all-bash:
+ @if bash
+ TARGET-bash=all
+ maybe-all-bash: all-bash
+ all-bash: configure-bash
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd bash && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-bash))
! @endif bash
! 
! .PHONY: check-bash maybe-check-bash
! maybe-check-bash:
! @if bash
! maybe-check-bash: check-bash
! 
! check-bash:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd bash && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif bash
! 
! .PHONY: install-bash maybe-install-bash
! maybe-install-bash:
! @if bash
! maybe-install-bash: install-bash
! 
! install-bash: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd bash && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif bash
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-bash info-bash
! maybe-info-bash:
! @if bash
! maybe-info-bash: info-bash
! 
! info-bash: \
!     configure-bash 
! 	@[ -f ./bash/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in bash" ; \
! 	(cd bash && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** info-ld: \
*** 1501,1719 ****
  	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-libgui info-libgui
! maybe-info-libgui:
  
! info-libgui: \
!     configure-libgui 
! 	@[ -f ./libgui/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in libgui" ; \
! 	(cd libgui && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-libiberty info-libiberty
! maybe-info-libiberty:
  
! info-libiberty: \
!     configure-libiberty 
! 	@[ -f ./libiberty/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in libiberty" ; \
! 	(cd libiberty && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-libtool info-libtool
! maybe-info-libtool:
  
! info-libtool: \
!     configure-libtool 
! 	@[ -f ./libtool/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in libtool" ; \
! 	(cd libtool && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-m4 info-m4
! maybe-info-m4:
  
! info-m4: \
!     configure-m4 
! 	@[ -f ./m4/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in m4" ; \
! 	(cd m4 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-make info-make
! maybe-info-make:
  
! info-make: \
!     configure-make 
! 	@[ -f ./make/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in make" ; \
! 	(cd make && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-mmalloc info-mmalloc
! maybe-info-mmalloc:
  
! info-mmalloc: \
!     configure-mmalloc 
! 	@[ -f ./mmalloc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in mmalloc" ; \
! 	(cd mmalloc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-patch info-patch
! maybe-info-patch:
  
! info-patch: \
!     configure-patch 
! 	@[ -f ./patch/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in patch" ; \
! 	(cd patch && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-perl info-perl
! maybe-info-perl:
  
! info-perl: \
!     configure-perl 
! 	@[ -f ./perl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in perl" ; \
! 	(cd perl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-prms info-prms
! maybe-info-prms:
  
! info-prms: \
!     configure-prms 
! 	@[ -f ./prms/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in prms" ; \
! 	(cd prms && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
- .PHONY: maybe-info-rcs info-rcs
- maybe-info-rcs:
  
! info-rcs: \
!     configure-rcs 
! 	@[ -f ./rcs/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in rcs" ; \
! 	(cd rcs && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 3708,4038 ----
  	          info) \
  	  || exit 1
  
+ @endif bash
  
! .PHONY: maybe-dvi-bash dvi-bash
! maybe-dvi-bash:
! @if bash
! maybe-dvi-bash: dvi-bash
  
! dvi-bash: \
!     configure-bash 
! 	@[ -f ./bash/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in bash" ; \
! 	(cd bash && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif bash
  
! .PHONY: maybe-html-bash html-bash
! maybe-html-bash:
! @if bash
! maybe-html-bash: html-bash
  
! html-bash: \
!     configure-bash 
! 	@[ -f ./bash/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in bash" ; \
! 	(cd bash && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif bash
  
! .PHONY: maybe-TAGS-bash TAGS-bash
! maybe-TAGS-bash:
! @if bash
! maybe-TAGS-bash: TAGS-bash
  
! TAGS-bash: \
!     configure-bash 
! 	@[ -f ./bash/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in bash" ; \
! 	(cd bash && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif bash
  
! .PHONY: maybe-install-info-bash install-info-bash
! maybe-install-info-bash:
! @if bash
! maybe-install-info-bash: install-info-bash
  
! install-info-bash: \
!     configure-bash \
!     info-bash 
! 	@[ -f ./bash/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in bash" ; \
! 	(cd bash && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif bash
  
! .PHONY: maybe-installcheck-bash installcheck-bash
! maybe-installcheck-bash:
! @if bash
! maybe-installcheck-bash: installcheck-bash
  
! installcheck-bash: \
!     configure-bash 
! 	@[ -f ./bash/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in bash" ; \
! 	(cd bash && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif bash
  
! .PHONY: maybe-mostlyclean-bash mostlyclean-bash
! maybe-mostlyclean-bash:
! @if bash
! maybe-mostlyclean-bash: mostlyclean-bash
  
! mostlyclean-bash: 
! 	@[ -f ./bash/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in bash" ; \
! 	(cd bash && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif bash
  
! .PHONY: maybe-clean-bash clean-bash
! maybe-clean-bash:
! @if bash
! maybe-clean-bash: clean-bash
  
! clean-bash: 
! 	@[ -f ./bash/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in bash" ; \
! 	(cd bash && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif bash
  
! .PHONY: maybe-distclean-bash distclean-bash
! maybe-distclean-bash:
! @if bash
! maybe-distclean-bash: distclean-bash
  
! distclean-bash: 
! 	@[ -f ./bash/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in bash" ; \
! 	(cd bash && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif bash
  
! .PHONY: maybe-maintainer-clean-bash maintainer-clean-bash
! maybe-maintainer-clean-bash:
! @if bash
! maybe-maintainer-clean-bash: maintainer-clean-bash
  
! maintainer-clean-bash: 
! 	@[ -f ./bash/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in bash" ; \
! 	(cd bash && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif bash
  
  
! .PHONY: configure-bfd maybe-configure-bfd
! maybe-configure-bfd:
! @if bfd
! maybe-configure-bfd: configure-bfd
! configure-bfd:
! 	@test -f stage_last && exit 0; \
! 	test ! -f bfd/Makefile || exit 0; \
! 	[ -d bfd ] || mkdir bfd; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(HOST_EXPORTS) \
! 	echo Configuring in bfd; \
! 	cd bfd || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/bfd"; \
! 	    libsrcdir="$$s/bfd";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/bfd"; \
! 	    libsrcdir="$$s/bfd";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
! 	  || exit 1
! @endif bfd
! 
! .PHONY: all-bfd maybe-all-bfd
! maybe-all-bfd:
! @if bfd
! TARGET-bfd=all
! maybe-all-bfd: all-bfd
! all-bfd: configure-bfd
! 	@test -f stage_last && exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd bfd && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-bfd))
! @endif bfd
! 
! .PHONY: check-bfd maybe-check-bfd
! maybe-check-bfd:
! @if bfd
! maybe-check-bfd: check-bfd
! 
! check-bfd:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd bfd && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif bfd
! 
! .PHONY: install-bfd maybe-install-bfd
! maybe-install-bfd:
! @if bfd
! maybe-install-bfd: install-bfd
! 
! install-bfd: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd bfd && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif bfd
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-bfd info-bfd
! maybe-info-bfd:
! @if bfd
! maybe-info-bfd: info-bfd
! 
! info-bfd: \
!     configure-bfd 
! 	@[ -f ./bfd/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in bfd" ; \
! 	(cd bfd && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** info-rcs: \
*** 1721,1939 ****
  	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-readline info-readline
! maybe-info-readline:
  
! info-readline: \
!     configure-readline 
! 	@[ -f ./readline/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in readline" ; \
! 	(cd readline && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-release info-release
! maybe-info-release:
  
! info-release: \
!     configure-release 
! 	@[ -f ./release/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in release" ; \
! 	(cd release && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-recode info-recode
! maybe-info-recode:
  
! info-recode: \
!     configure-recode 
! 	@[ -f ./recode/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in recode" ; \
! 	(cd recode && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-sed info-sed
! maybe-info-sed:
  
! info-sed: \
!     configure-sed 
! 	@[ -f ./sed/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in sed" ; \
! 	(cd sed && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-send-pr info-send-pr
! maybe-info-send-pr:
  
! info-send-pr: \
!     configure-send-pr 
! 	@[ -f ./send-pr/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in send-pr" ; \
! 	(cd send-pr && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-shellutils info-shellutils
! maybe-info-shellutils:
  
! info-shellutils: \
!     configure-shellutils 
! 	@[ -f ./shellutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in shellutils" ; \
! 	(cd shellutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-sid info-sid
! maybe-info-sid:
  
! info-sid: \
!     configure-sid 
! 	@[ -f ./sid/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in sid" ; \
! 	(cd sid && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-sim info-sim
! maybe-info-sim:
  
! info-sim: \
!     configure-sim 
! 	@[ -f ./sim/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in sim" ; \
! 	(cd sim && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-tar info-tar
! maybe-info-tar:
  
! info-tar: \
!     configure-tar 
! 	@[ -f ./tar/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in tar" ; \
! 	(cd tar && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
- .PHONY: maybe-info-texinfo info-texinfo
- maybe-info-texinfo:
  
! info-texinfo: \
!     configure-texinfo 
! 	@[ -f ./texinfo/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in texinfo" ; \
! 	(cd texinfo && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 4040,4370 ----
  	          info) \
  	  || exit 1
  
+ @endif bfd
  
! .PHONY: maybe-dvi-bfd dvi-bfd
! maybe-dvi-bfd:
! @if bfd
! maybe-dvi-bfd: dvi-bfd
  
! dvi-bfd: \
!     configure-bfd 
! 	@[ -f ./bfd/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in bfd" ; \
! 	(cd bfd && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif bfd
  
! .PHONY: maybe-html-bfd html-bfd
! maybe-html-bfd:
! @if bfd
! maybe-html-bfd: html-bfd
  
! html-bfd: \
!     configure-bfd 
! 	@[ -f ./bfd/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in bfd" ; \
! 	(cd bfd && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif bfd
  
! .PHONY: maybe-TAGS-bfd TAGS-bfd
! maybe-TAGS-bfd:
! @if bfd
! maybe-TAGS-bfd: TAGS-bfd
  
! TAGS-bfd: \
!     configure-bfd 
! 	@[ -f ./bfd/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in bfd" ; \
! 	(cd bfd && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif bfd
  
! .PHONY: maybe-install-info-bfd install-info-bfd
! maybe-install-info-bfd:
! @if bfd
! maybe-install-info-bfd: install-info-bfd
  
! install-info-bfd: \
!     configure-bfd \
!     info-bfd 
! 	@[ -f ./bfd/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in bfd" ; \
! 	(cd bfd && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif bfd
  
! .PHONY: maybe-installcheck-bfd installcheck-bfd
! maybe-installcheck-bfd:
! @if bfd
! maybe-installcheck-bfd: installcheck-bfd
  
! installcheck-bfd: \
!     configure-bfd 
! 	@[ -f ./bfd/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in bfd" ; \
! 	(cd bfd && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif bfd
  
! .PHONY: maybe-mostlyclean-bfd mostlyclean-bfd
! maybe-mostlyclean-bfd:
! @if bfd
! maybe-mostlyclean-bfd: mostlyclean-bfd
  
! mostlyclean-bfd: 
! 	@[ -f ./bfd/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in bfd" ; \
! 	(cd bfd && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif bfd
  
! .PHONY: maybe-clean-bfd clean-bfd
! maybe-clean-bfd:
! @if bfd
! maybe-clean-bfd: clean-bfd
  
! clean-bfd: 
! 	@[ -f ./bfd/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in bfd" ; \
! 	(cd bfd && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif bfd
  
! .PHONY: maybe-distclean-bfd distclean-bfd
! maybe-distclean-bfd:
! @if bfd
! maybe-distclean-bfd: distclean-bfd
  
! distclean-bfd: 
! 	@[ -f ./bfd/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in bfd" ; \
! 	(cd bfd && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif bfd
  
! .PHONY: maybe-maintainer-clean-bfd maintainer-clean-bfd
! maybe-maintainer-clean-bfd:
! @if bfd
! maybe-maintainer-clean-bfd: maintainer-clean-bfd
  
! maintainer-clean-bfd: 
! 	@[ -f ./bfd/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in bfd" ; \
! 	(cd bfd && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif bfd
  
  
! .PHONY: configure-opcodes maybe-configure-opcodes
! maybe-configure-opcodes:
! @if opcodes
! maybe-configure-opcodes: configure-opcodes
! configure-opcodes:
! 	@test -f stage_last && exit 0; \
! 	test ! -f opcodes/Makefile || exit 0; \
! 	[ -d opcodes ] || mkdir opcodes; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(HOST_EXPORTS) \
! 	echo Configuring in opcodes; \
! 	cd opcodes || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/opcodes"; \
! 	    libsrcdir="$$s/opcodes";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/opcodes"; \
! 	    libsrcdir="$$s/opcodes";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
! 	  || exit 1
! @endif opcodes
! 
! .PHONY: all-opcodes maybe-all-opcodes
! maybe-all-opcodes:
! @if opcodes
! TARGET-opcodes=all
! maybe-all-opcodes: all-opcodes
! all-opcodes: configure-opcodes
! 	@test -f stage_last && exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd opcodes && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-opcodes))
! @endif opcodes
! 
! .PHONY: check-opcodes maybe-check-opcodes
! maybe-check-opcodes:
! @if opcodes
! maybe-check-opcodes: check-opcodes
! 
! check-opcodes:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd opcodes && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif opcodes
! 
! .PHONY: install-opcodes maybe-install-opcodes
! maybe-install-opcodes:
! @if opcodes
! maybe-install-opcodes: install-opcodes
! 
! install-opcodes: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd opcodes && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif opcodes
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-opcodes info-opcodes
! maybe-info-opcodes:
! @if opcodes
! maybe-info-opcodes: info-opcodes
! 
! info-opcodes: \
!     configure-opcodes 
! 	@[ -f ./opcodes/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in opcodes" ; \
! 	(cd opcodes && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** info-texinfo: \
*** 1941,2159 ****
  	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-textutils info-textutils
! maybe-info-textutils:
  
! info-textutils: \
!     configure-textutils 
! 	@[ -f ./textutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in textutils" ; \
! 	(cd textutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-time info-time
! maybe-info-time:
  
! info-time: \
!     configure-time 
! 	@[ -f ./time/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in time" ; \
! 	(cd time && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-uudecode info-uudecode
! maybe-info-uudecode:
  
! info-uudecode: \
!     configure-uudecode 
! 	@[ -f ./uudecode/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in uudecode" ; \
! 	(cd uudecode && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-wdiff info-wdiff
! maybe-info-wdiff:
  
! info-wdiff: \
!     configure-wdiff 
! 	@[ -f ./wdiff/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in wdiff" ; \
! 	(cd wdiff && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-zip info-zip
! maybe-info-zip:
  
! info-zip: \
!     configure-zip 
! 	@[ -f ./zip/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in zip" ; \
! 	(cd zip && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-zlib info-zlib
! maybe-info-zlib:
  
! info-zlib: \
!     configure-zlib 
! 	@[ -f ./zlib/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in zlib" ; \
! 	(cd zlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-gdb info-gdb
! maybe-info-gdb:
  
! info-gdb: \
!     configure-gdb 
! 	@[ -f ./gdb/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in gdb" ; \
! 	(cd gdb && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-expect info-expect
! maybe-info-expect:
  
! info-expect: \
!     configure-expect 
! 	@[ -f ./expect/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in expect" ; \
! 	(cd expect && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-guile info-guile
! maybe-info-guile:
  
! info-guile: \
!     configure-guile 
! 	@[ -f ./guile/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in guile" ; \
! 	(cd guile && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
- .PHONY: maybe-info-tk info-tk
- maybe-info-tk:
  
! info-tk: \
!     configure-tk 
! 	@[ -f ./tk/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in tk" ; \
! 	(cd tk && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 4372,4702 ----
  	          info) \
  	  || exit 1
  
+ @endif opcodes
  
! .PHONY: maybe-dvi-opcodes dvi-opcodes
! maybe-dvi-opcodes:
! @if opcodes
! maybe-dvi-opcodes: dvi-opcodes
  
! dvi-opcodes: \
!     configure-opcodes 
! 	@[ -f ./opcodes/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in opcodes" ; \
! 	(cd opcodes && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif opcodes
  
! .PHONY: maybe-html-opcodes html-opcodes
! maybe-html-opcodes:
! @if opcodes
! maybe-html-opcodes: html-opcodes
  
! html-opcodes: \
!     configure-opcodes 
! 	@[ -f ./opcodes/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in opcodes" ; \
! 	(cd opcodes && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif opcodes
  
! .PHONY: maybe-TAGS-opcodes TAGS-opcodes
! maybe-TAGS-opcodes:
! @if opcodes
! maybe-TAGS-opcodes: TAGS-opcodes
  
! TAGS-opcodes: \
!     configure-opcodes 
! 	@[ -f ./opcodes/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in opcodes" ; \
! 	(cd opcodes && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif opcodes
  
! .PHONY: maybe-install-info-opcodes install-info-opcodes
! maybe-install-info-opcodes:
! @if opcodes
! maybe-install-info-opcodes: install-info-opcodes
  
! install-info-opcodes: \
!     configure-opcodes \
!     info-opcodes 
! 	@[ -f ./opcodes/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in opcodes" ; \
! 	(cd opcodes && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif opcodes
  
! .PHONY: maybe-installcheck-opcodes installcheck-opcodes
! maybe-installcheck-opcodes:
! @if opcodes
! maybe-installcheck-opcodes: installcheck-opcodes
  
! installcheck-opcodes: \
!     configure-opcodes 
! 	@[ -f ./opcodes/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in opcodes" ; \
! 	(cd opcodes && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif opcodes
  
! .PHONY: maybe-mostlyclean-opcodes mostlyclean-opcodes
! maybe-mostlyclean-opcodes:
! @if opcodes
! maybe-mostlyclean-opcodes: mostlyclean-opcodes
  
! mostlyclean-opcodes: 
! 	@[ -f ./opcodes/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in opcodes" ; \
! 	(cd opcodes && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif opcodes
  
! .PHONY: maybe-clean-opcodes clean-opcodes
! maybe-clean-opcodes:
! @if opcodes
! maybe-clean-opcodes: clean-opcodes
  
! clean-opcodes: 
! 	@[ -f ./opcodes/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in opcodes" ; \
! 	(cd opcodes && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif opcodes
  
! .PHONY: maybe-distclean-opcodes distclean-opcodes
! maybe-distclean-opcodes:
! @if opcodes
! maybe-distclean-opcodes: distclean-opcodes
  
! distclean-opcodes: 
! 	@[ -f ./opcodes/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in opcodes" ; \
! 	(cd opcodes && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif opcodes
  
! .PHONY: maybe-maintainer-clean-opcodes maintainer-clean-opcodes
! maybe-maintainer-clean-opcodes:
! @if opcodes
! maybe-maintainer-clean-opcodes: maintainer-clean-opcodes
  
! maintainer-clean-opcodes: 
! 	@[ -f ./opcodes/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in opcodes" ; \
! 	(cd opcodes && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif opcodes
  
  
! .PHONY: configure-binutils maybe-configure-binutils
! maybe-configure-binutils:
! @if binutils
! maybe-configure-binutils: configure-binutils
! configure-binutils:
! 	@test -f stage_last && exit 0; \
! 	test ! -f binutils/Makefile || exit 0; \
! 	[ -d binutils ] || mkdir binutils; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(HOST_EXPORTS) \
! 	echo Configuring in binutils; \
! 	cd binutils || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/binutils"; \
! 	    libsrcdir="$$s/binutils";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/binutils"; \
! 	    libsrcdir="$$s/binutils";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
! 	  || exit 1
! @endif binutils
! 
! .PHONY: all-binutils maybe-all-binutils
! maybe-all-binutils:
! @if binutils
! TARGET-binutils=all
! maybe-all-binutils: all-binutils
! all-binutils: configure-binutils
! 	@test -f stage_last && exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd binutils && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-binutils))
! @endif binutils
! 
! .PHONY: check-binutils maybe-check-binutils
! maybe-check-binutils:
! @if binutils
! maybe-check-binutils: check-binutils
! 
! check-binutils:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd binutils && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif binutils
! 
! .PHONY: install-binutils maybe-install-binutils
! maybe-install-binutils:
! @if binutils
! maybe-install-binutils: install-binutils
! 
! install-binutils: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd binutils && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif binutils
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-binutils info-binutils
! maybe-info-binutils:
! @if binutils
! maybe-info-binutils: info-binutils
! 
! info-binutils: \
!     configure-binutils 
! 	@[ -f ./binutils/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in binutils" ; \
! 	(cd binutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** info-tk: \
*** 2161,2382 ****
  	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-tix info-tix
! maybe-info-tix:
  
! info-tix: \
!     configure-tix 
! 	@[ -f ./tix/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in tix" ; \
! 	(cd tix && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-libtermcap info-libtermcap
! maybe-info-libtermcap:
  
! info-libtermcap: \
!     configure-libtermcap 
! 	@[ -f ./libtermcap/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in libtermcap" ; \
! 	(cd libtermcap && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-utils info-utils
! maybe-info-utils:
  
! info-utils: \
!     configure-utils 
! 	@[ -f ./utils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in utils" ; \
! 	(cd utils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
  
! # Target modules.
! 
! .PHONY: maybe-info-target-libstdc++-v3 info-target-libstdc++-v3
! maybe-info-target-libstdc++-v3:
! 
! info-target-libstdc++-v3: \
!     configure-target-libstdc++-v3 
! 	@[ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing info in $(TARGET_SUBDIR)/libstdc++-v3" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libstdc++-v3 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-target-newlib info-target-newlib
! maybe-info-target-newlib:
  
! info-target-newlib: \
!     configure-target-newlib 
! 	@[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing info in $(TARGET_SUBDIR)/newlib" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/newlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-target-libf2c info-target-libf2c
! maybe-info-target-libf2c:
  
! info-target-libf2c: \
!     configure-target-libf2c 
! 	@[ -f $(TARGET_SUBDIR)/libf2c/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing info in $(TARGET_SUBDIR)/libf2c" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libf2c && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-target-libobjc info-target-libobjc
! maybe-info-target-libobjc:
  
! info-target-libobjc: \
!     configure-target-libobjc 
! 	@[ -f $(TARGET_SUBDIR)/libobjc/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing info in $(TARGET_SUBDIR)/libobjc" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libobjc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-target-libtermcap info-target-libtermcap
! maybe-info-target-libtermcap:
  
! info-target-libtermcap: \
!     configure-target-libtermcap 
! 	@[ -f $(TARGET_SUBDIR)/libtermcap/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing info in $(TARGET_SUBDIR)/libtermcap" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libtermcap && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-target-winsup info-target-winsup
! maybe-info-target-winsup:
  
! info-target-winsup: \
!     configure-target-winsup 
! 	@[ -f $(TARGET_SUBDIR)/winsup/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing info in $(TARGET_SUBDIR)/winsup" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/winsup && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
- .PHONY: maybe-info-target-libgloss info-target-libgloss
- maybe-info-target-libgloss:
  
! info-target-libgloss: \
!     configure-target-libgloss 
! 	@[ -f $(TARGET_SUBDIR)/libgloss/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing info in $(TARGET_SUBDIR)/libgloss" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libgloss && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 4704,5035 ----
  	          info) \
  	  || exit 1
  
+ @endif binutils
  
! .PHONY: maybe-dvi-binutils dvi-binutils
! maybe-dvi-binutils:
! @if binutils
! maybe-dvi-binutils: dvi-binutils
  
! dvi-binutils: \
!     configure-binutils 
! 	@[ -f ./binutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in binutils" ; \
! 	(cd binutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif binutils
  
! .PHONY: maybe-html-binutils html-binutils
! maybe-html-binutils:
! @if binutils
! maybe-html-binutils: html-binutils
  
! html-binutils: \
!     configure-binutils 
! 	@[ -f ./binutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in binutils" ; \
! 	(cd binutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif binutils
  
! .PHONY: maybe-TAGS-binutils TAGS-binutils
! maybe-TAGS-binutils:
! @if binutils
! maybe-TAGS-binutils: TAGS-binutils
  
! TAGS-binutils: \
!     configure-binutils 
! 	@[ -f ./binutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in binutils" ; \
! 	(cd binutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif binutils
  
+ .PHONY: maybe-install-info-binutils install-info-binutils
+ maybe-install-info-binutils:
+ @if binutils
+ maybe-install-info-binutils: install-info-binutils
  
! install-info-binutils: \
!     configure-binutils \
!     info-binutils 
! 	@[ -f ./binutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in binutils" ; \
! 	(cd binutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif binutils
  
! .PHONY: maybe-installcheck-binutils installcheck-binutils
! maybe-installcheck-binutils:
! @if binutils
! maybe-installcheck-binutils: installcheck-binutils
  
! installcheck-binutils: \
!     configure-binutils 
! 	@[ -f ./binutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in binutils" ; \
! 	(cd binutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif binutils
  
! .PHONY: maybe-mostlyclean-binutils mostlyclean-binutils
! maybe-mostlyclean-binutils:
! @if binutils
! maybe-mostlyclean-binutils: mostlyclean-binutils
  
! mostlyclean-binutils: 
! 	@[ -f ./binutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in binutils" ; \
! 	(cd binutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif binutils
  
! .PHONY: maybe-clean-binutils clean-binutils
! maybe-clean-binutils:
! @if binutils
! maybe-clean-binutils: clean-binutils
  
! clean-binutils: 
! 	@[ -f ./binutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in binutils" ; \
! 	(cd binutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif binutils
  
! .PHONY: maybe-distclean-binutils distclean-binutils
! maybe-distclean-binutils:
! @if binutils
! maybe-distclean-binutils: distclean-binutils
  
! distclean-binutils: 
! 	@[ -f ./binutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in binutils" ; \
! 	(cd binutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif binutils
  
! .PHONY: maybe-maintainer-clean-binutils maintainer-clean-binutils
! maybe-maintainer-clean-binutils:
! @if binutils
! maybe-maintainer-clean-binutils: maintainer-clean-binutils
  
! maintainer-clean-binutils: 
! 	@[ -f ./binutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in binutils" ; \
! 	(cd binutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif binutils
  
  
! .PHONY: configure-bison maybe-configure-bison
! maybe-configure-bison:
! @if bison
! maybe-configure-bison: configure-bison
! configure-bison:
! 	@test ! -f bison/Makefile || exit 0; \
! 	[ -d bison ] || mkdir bison; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in bison; \
+ 	cd bison || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/bison"; \
+ 	    libsrcdir="$$s/bison";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/bison"; \
+ 	    libsrcdir="$$s/bison";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif bison
+ 
+ .PHONY: all-bison maybe-all-bison
+ maybe-all-bison:
+ @if bison
+ TARGET-bison=all
+ maybe-all-bison: all-bison
+ all-bison: configure-bison
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd bison && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-bison))
! @endif bison
! 
! .PHONY: check-bison maybe-check-bison
! maybe-check-bison:
! @if bison
! maybe-check-bison: check-bison
! 
! # This module is only tested in a native toolchain.
! check-bison:
! 	@if [ '$(host)' = '$(target)' ] ; then \
! 	  r=`${PWD_COMMAND}`; export r; \
! 	  s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	  $(SET_LIB_PATH) \
! 	  $(HOST_EXPORTS) \
! 	  (cd bison && $(MAKE) $(FLAGS_TO_PASS)  check); \
! 	fi
! 
! @endif bison
! 
! .PHONY: install-bison maybe-install-bison
! maybe-install-bison:
! @if bison
! maybe-install-bison: install-bison
! 
! install-bison: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd bison && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif bison
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-bison info-bison
! maybe-info-bison:
! @if bison
! maybe-info-bison: info-bison
! 
! info-bison: \
!     configure-bison 
! 	@[ -f ./bison/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in bison" ; \
! 	(cd bison && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** info-target-libgloss: \
*** 2384,2715 ****
  	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-target-libiberty info-target-libiberty
! maybe-info-target-libiberty:
  
! info-target-libiberty: \
!     configure-target-libiberty 
! 	@[ -f $(TARGET_SUBDIR)/libiberty/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing info in $(TARGET_SUBDIR)/libiberty" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libiberty && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-target-gperf info-target-gperf
! maybe-info-target-gperf:
  
! info-target-gperf: \
!     configure-target-gperf 
! 	@[ -f $(TARGET_SUBDIR)/gperf/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing info in $(TARGET_SUBDIR)/gperf" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/gperf && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-target-examples info-target-examples
! maybe-info-target-examples:
  
! info-target-examples: \
!     configure-target-examples 
! 	@[ -f $(TARGET_SUBDIR)/examples/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing info in $(TARGET_SUBDIR)/examples" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/examples && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-target-libffi info-target-libffi
! maybe-info-target-libffi:
  
! info-target-libffi: \
!     configure-target-libffi 
! 	@[ -f $(TARGET_SUBDIR)/libffi/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing info in $(TARGET_SUBDIR)/libffi" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libffi && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-target-libjava info-target-libjava
! maybe-info-target-libjava:
  
! info-target-libjava: \
!     configure-target-libjava 
! 	@[ -f $(TARGET_SUBDIR)/libjava/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing info in $(TARGET_SUBDIR)/libjava" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libjava && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-target-zlib info-target-zlib
! maybe-info-target-zlib:
  
! info-target-zlib: \
!     configure-target-zlib 
! 	@[ -f $(TARGET_SUBDIR)/zlib/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing info in $(TARGET_SUBDIR)/zlib" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/zlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-target-boehm-gc info-target-boehm-gc
! maybe-info-target-boehm-gc:
  
! info-target-boehm-gc: \
!     configure-target-boehm-gc 
! 	@[ -f $(TARGET_SUBDIR)/boehm-gc/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing info in $(TARGET_SUBDIR)/boehm-gc" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/boehm-gc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-target-qthreads info-target-qthreads
! maybe-info-target-qthreads:
  
! info-target-qthreads: \
!     configure-target-qthreads 
! 	@[ -f $(TARGET_SUBDIR)/qthreads/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing info in $(TARGET_SUBDIR)/qthreads" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/qthreads && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
! .PHONY: maybe-info-target-rda info-target-rda
! maybe-info-target-rda:
  
! info-target-rda: \
!     configure-target-rda 
! 	@[ -f $(TARGET_SUBDIR)/rda/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing info in $(TARGET_SUBDIR)/rda" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/rda && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
  
  
! .PHONY: do-dvi
! do-dvi: dvi-host dvi-target
  
! .PHONY: dvi-host
! dvi-host: maybe-dvi-gcc  \
!     maybe-dvi-ash \
!     maybe-dvi-autoconf \
!     maybe-dvi-automake \
!     maybe-dvi-bash \
!     maybe-dvi-bfd \
!     maybe-dvi-opcodes \
!     maybe-dvi-binutils \
!     maybe-dvi-bison \
!     maybe-dvi-byacc \
!     maybe-dvi-bzip2 \
!     maybe-dvi-dejagnu \
!     maybe-dvi-diff \
!     maybe-dvi-dosutils \
!     maybe-dvi-etc \
!     maybe-dvi-fastjar \
!     maybe-dvi-fileutils \
!     maybe-dvi-findutils \
!     maybe-dvi-find \
!     maybe-dvi-flex \
!     maybe-dvi-gas \
!     maybe-dvi-gawk \
!     maybe-dvi-gettext \
!     maybe-dvi-gnuserv \
!     maybe-dvi-gprof \
!     maybe-dvi-gzip \
!     maybe-dvi-hello \
!     maybe-dvi-indent \
!     maybe-dvi-intl \
!     maybe-dvi-tcl \
!     maybe-dvi-itcl \
!     maybe-dvi-ld \
!     maybe-dvi-libgui \
!     maybe-dvi-libiberty \
!     maybe-dvi-libtool \
!     maybe-dvi-m4 \
!     maybe-dvi-make \
!     maybe-dvi-mmalloc \
!     maybe-dvi-patch \
!     maybe-dvi-perl \
!     maybe-dvi-prms \
!     maybe-dvi-rcs \
!     maybe-dvi-readline \
!     maybe-dvi-release \
!     maybe-dvi-recode \
!     maybe-dvi-sed \
!     maybe-dvi-send-pr \
!     maybe-dvi-shellutils \
!     maybe-dvi-sid \
!     maybe-dvi-sim \
!     maybe-dvi-tar \
!     maybe-dvi-texinfo \
!     maybe-dvi-textutils \
!     maybe-dvi-time \
!     maybe-dvi-uudecode \
!     maybe-dvi-wdiff \
!     maybe-dvi-zip \
!     maybe-dvi-zlib \
!     maybe-dvi-gdb \
!     maybe-dvi-expect \
!     maybe-dvi-guile \
!     maybe-dvi-tk \
!     maybe-dvi-tix \
!     maybe-dvi-libtermcap \
!     maybe-dvi-utils
  
! .PHONY: dvi-target
! dvi-target:  \
!     maybe-dvi-target-libstdc++-v3 \
!     maybe-dvi-target-newlib \
!     maybe-dvi-target-libf2c \
!     maybe-dvi-target-libobjc \
!     maybe-dvi-target-libtermcap \
!     maybe-dvi-target-winsup \
!     maybe-dvi-target-libgloss \
!     maybe-dvi-target-libiberty \
!     maybe-dvi-target-gperf \
!     maybe-dvi-target-examples \
!     maybe-dvi-target-libffi \
!     maybe-dvi-target-libjava \
!     maybe-dvi-target-zlib \
!     maybe-dvi-target-boehm-gc \
!     maybe-dvi-target-qthreads \
!     maybe-dvi-target-rda
  
! # GCC, the eternal special case
! .PHONY: maybe-dvi-gcc dvi-gcc
! maybe-dvi-gcc:
! dvi-gcc: \
!     configure-gcc 
! 	@[ -f ./gcc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_GCC_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in gcc" ; \
! 	(cd gcc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
! # Host modules.
  
! .PHONY: maybe-dvi-ash dvi-ash
! maybe-dvi-ash:
  
! dvi-ash: \
!     configure-ash 
! 	@[ -f ./ash/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in ash" ; \
! 	(cd ash && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 5037,5394 ----
  	          info) \
  	  || exit 1
  
+ @endif bison
  
! .PHONY: maybe-dvi-bison dvi-bison
! maybe-dvi-bison:
! @if bison
! maybe-dvi-bison: dvi-bison
  
! dvi-bison: \
!     configure-bison 
! 	@[ -f ./bison/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in bison" ; \
! 	(cd bison && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif bison
  
! .PHONY: maybe-html-bison html-bison
! maybe-html-bison:
! @if bison
! maybe-html-bison: html-bison
  
! html-bison: \
!     configure-bison 
! 	@[ -f ./bison/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in bison" ; \
! 	(cd bison && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif bison
  
! .PHONY: maybe-TAGS-bison TAGS-bison
! maybe-TAGS-bison:
! @if bison
! maybe-TAGS-bison: TAGS-bison
  
! TAGS-bison: \
!     configure-bison 
! 	@[ -f ./bison/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in bison" ; \
! 	(cd bison && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif bison
  
! .PHONY: maybe-install-info-bison install-info-bison
! maybe-install-info-bison:
! @if bison
! maybe-install-info-bison: install-info-bison
  
! install-info-bison: \
!     configure-bison \
!     info-bison 
! 	@[ -f ./bison/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in bison" ; \
! 	(cd bison && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif bison
  
! .PHONY: maybe-installcheck-bison installcheck-bison
! maybe-installcheck-bison:
! @if bison
! maybe-installcheck-bison: installcheck-bison
  
! installcheck-bison: \
!     configure-bison 
! 	@[ -f ./bison/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in bison" ; \
! 	(cd bison && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif bison
  
! .PHONY: maybe-mostlyclean-bison mostlyclean-bison
! maybe-mostlyclean-bison:
! @if bison
! maybe-mostlyclean-bison: mostlyclean-bison
  
! mostlyclean-bison: 
! 	@[ -f ./bison/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in bison" ; \
! 	(cd bison && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif bison
  
! .PHONY: maybe-clean-bison clean-bison
! maybe-clean-bison:
! @if bison
! maybe-clean-bison: clean-bison
  
! clean-bison: 
! 	@[ -f ./bison/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in bison" ; \
! 	(cd bison && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif bison
  
! .PHONY: maybe-distclean-bison distclean-bison
! maybe-distclean-bison:
! @if bison
! maybe-distclean-bison: distclean-bison
  
! distclean-bison: 
! 	@[ -f ./bison/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in bison" ; \
! 	(cd bison && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif bison
  
! .PHONY: maybe-maintainer-clean-bison maintainer-clean-bison
! maybe-maintainer-clean-bison:
! @if bison
! maybe-maintainer-clean-bison: maintainer-clean-bison
  
! maintainer-clean-bison: 
! 	@[ -f ./bison/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in bison" ; \
! 	(cd bison && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif bison
  
  
! .PHONY: configure-byacc maybe-configure-byacc
! maybe-configure-byacc:
! @if byacc
! maybe-configure-byacc: configure-byacc
! configure-byacc:
! 	@test ! -f byacc/Makefile || exit 0; \
! 	[ -d byacc ] || mkdir byacc; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(HOST_EXPORTS) \
! 	echo Configuring in byacc; \
! 	cd byacc || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/byacc"; \
! 	    libsrcdir="$$s/byacc";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/byacc"; \
! 	    libsrcdir="$$s/byacc";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
! 	  || exit 1
! @endif byacc
  
! .PHONY: all-byacc maybe-all-byacc
! maybe-all-byacc:
! @if byacc
! TARGET-byacc=all
! maybe-all-byacc: all-byacc
! all-byacc: configure-byacc
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd byacc && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-byacc))
! @endif byacc
  
! .PHONY: check-byacc maybe-check-byacc
! maybe-check-byacc:
! @if byacc
! maybe-check-byacc: check-byacc
  
! # This module is only tested in a native toolchain.
! check-byacc:
! 	@if [ '$(host)' = '$(target)' ] ; then \
! 	  r=`${PWD_COMMAND}`; export r; \
! 	  s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	  $(SET_LIB_PATH) \
! 	  $(HOST_EXPORTS) \
! 	  (cd byacc && $(MAKE) $(FLAGS_TO_PASS)  check); \
! 	fi
! 
! @endif byacc
! 
! .PHONY: install-byacc maybe-install-byacc
! maybe-install-byacc:
! @if byacc
! maybe-install-byacc: install-byacc
! 
! install-byacc: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd byacc && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif byacc
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-byacc info-byacc
! maybe-info-byacc:
! @if byacc
! maybe-info-byacc: info-byacc
! 
! info-byacc: \
!     configure-byacc 
! 	@[ -f ./byacc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in byacc" ; \
! 	(cd byacc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
! @endif byacc
  
! .PHONY: maybe-dvi-byacc dvi-byacc
! maybe-dvi-byacc:
! @if byacc
! maybe-dvi-byacc: dvi-byacc
  
! dvi-byacc: \
!     configure-byacc 
! 	@[ -f ./byacc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in byacc" ; \
! 	(cd byacc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** dvi-ash: \
*** 2717,2901 ****
  	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-autoconf dvi-autoconf
! maybe-dvi-autoconf:
  
! dvi-autoconf: \
!     configure-autoconf 
! 	@[ -f ./autoconf/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in autoconf" ; \
! 	(cd autoconf && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-automake dvi-automake
! maybe-dvi-automake:
  
! dvi-automake: \
!     configure-automake 
! 	@[ -f ./automake/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in automake" ; \
! 	(cd automake && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-bash dvi-bash
! maybe-dvi-bash:
  
! dvi-bash: \
!     configure-bash 
! 	@[ -f ./bash/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in bash" ; \
! 	(cd bash && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-bfd dvi-bfd
! maybe-dvi-bfd:
  
! dvi-bfd: \
!     configure-bfd 
! 	@[ -f ./bfd/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in bfd" ; \
! 	(cd bfd && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-opcodes dvi-opcodes
! maybe-dvi-opcodes:
  
! dvi-opcodes: \
!     configure-opcodes 
! 	@[ -f ./opcodes/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in opcodes" ; \
! 	(cd opcodes && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-binutils dvi-binutils
! maybe-dvi-binutils:
  
! dvi-binutils: \
!     configure-binutils 
! 	@[ -f ./binutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in binutils" ; \
! 	(cd binutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-bison dvi-bison
! maybe-dvi-bison:
  
! dvi-bison: \
!     configure-bison 
! 	@[ -f ./bison/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in bison" ; \
! 	(cd bison && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-byacc dvi-byacc
! maybe-dvi-byacc:
  
! dvi-byacc: \
!     configure-byacc 
  	@[ -f ./byacc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in byacc" ; \
  	(cd byacc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
  .PHONY: maybe-dvi-bzip2 dvi-bzip2
  maybe-dvi-bzip2:
  
  dvi-bzip2: \
      configure-bzip2 
--- 5396,5711 ----
  	          dvi) \
  	  || exit 1
  
+ @endif byacc
  
! .PHONY: maybe-html-byacc html-byacc
! maybe-html-byacc:
! @if byacc
! maybe-html-byacc: html-byacc
  
! html-byacc: \
!     configure-byacc 
! 	@[ -f ./byacc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in byacc" ; \
! 	(cd byacc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif byacc
  
! .PHONY: maybe-TAGS-byacc TAGS-byacc
! maybe-TAGS-byacc:
! @if byacc
! maybe-TAGS-byacc: TAGS-byacc
  
! TAGS-byacc: \
!     configure-byacc 
! 	@[ -f ./byacc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in byacc" ; \
! 	(cd byacc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif byacc
  
! .PHONY: maybe-install-info-byacc install-info-byacc
! maybe-install-info-byacc:
! @if byacc
! maybe-install-info-byacc: install-info-byacc
  
! install-info-byacc: \
!     configure-byacc \
!     info-byacc 
! 	@[ -f ./byacc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in byacc" ; \
! 	(cd byacc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif byacc
  
! .PHONY: maybe-installcheck-byacc installcheck-byacc
! maybe-installcheck-byacc:
! @if byacc
! maybe-installcheck-byacc: installcheck-byacc
  
! installcheck-byacc: \
!     configure-byacc 
! 	@[ -f ./byacc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in byacc" ; \
! 	(cd byacc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif byacc
  
! .PHONY: maybe-mostlyclean-byacc mostlyclean-byacc
! maybe-mostlyclean-byacc:
! @if byacc
! maybe-mostlyclean-byacc: mostlyclean-byacc
  
! mostlyclean-byacc: 
! 	@[ -f ./byacc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in byacc" ; \
! 	(cd byacc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif byacc
  
! .PHONY: maybe-clean-byacc clean-byacc
! maybe-clean-byacc:
! @if byacc
! maybe-clean-byacc: clean-byacc
  
! clean-byacc: 
! 	@[ -f ./byacc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in byacc" ; \
! 	(cd byacc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif byacc
  
! .PHONY: maybe-distclean-byacc distclean-byacc
! maybe-distclean-byacc:
! @if byacc
! maybe-distclean-byacc: distclean-byacc
  
! distclean-byacc: 
! 	@[ -f ./byacc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in byacc" ; \
! 	(cd byacc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif byacc
  
! .PHONY: maybe-maintainer-clean-byacc maintainer-clean-byacc
! maybe-maintainer-clean-byacc:
! @if byacc
! maybe-maintainer-clean-byacc: maintainer-clean-byacc
  
! maintainer-clean-byacc: 
  	@[ -f ./byacc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in byacc" ; \
  	(cd byacc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif byacc
+ 
+ 
+ .PHONY: configure-bzip2 maybe-configure-bzip2
+ maybe-configure-bzip2:
+ @if bzip2
+ maybe-configure-bzip2: configure-bzip2
+ configure-bzip2:
+ 	@test ! -f bzip2/Makefile || exit 0; \
+ 	[ -d bzip2 ] || mkdir bzip2; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in bzip2; \
+ 	cd bzip2 || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/bzip2"; \
+ 	    libsrcdir="$$s/bzip2";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/bzip2"; \
+ 	    libsrcdir="$$s/bzip2";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif bzip2
+ 
+ .PHONY: all-bzip2 maybe-all-bzip2
+ maybe-all-bzip2:
+ @if bzip2
+ TARGET-bzip2=all
+ maybe-all-bzip2: all-bzip2
+ all-bzip2: configure-bzip2
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(SET_LIB_PATH) \
+ 	$(HOST_EXPORTS) \
+ 	(cd bzip2 && $(MAKE) $(FLAGS_TO_PASS)  \
+ 	  $(TARGET-bzip2))
+ @endif bzip2
+ 
+ .PHONY: check-bzip2 maybe-check-bzip2
+ maybe-check-bzip2:
+ @if bzip2
+ maybe-check-bzip2: check-bzip2
+ 
+ check-bzip2:
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(SET_LIB_PATH) \
+ 	$(HOST_EXPORTS) \
+ 	(cd bzip2 && $(MAKE) $(FLAGS_TO_PASS) check)
+ 
+ @endif bzip2
+ 
+ .PHONY: install-bzip2 maybe-install-bzip2
+ maybe-install-bzip2:
+ @if bzip2
+ maybe-install-bzip2: install-bzip2
+ 
+ install-bzip2: installdirs
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(SET_LIB_PATH) \
+ 	$(HOST_EXPORTS) \
+ 	(cd bzip2 && $(MAKE) $(FLAGS_TO_PASS) install)
+ 
+ @endif bzip2
+ 
+ # Other targets (info, dvi, etc.)
+ 
+ .PHONY: maybe-info-bzip2 info-bzip2
+ maybe-info-bzip2:
+ @if bzip2
+ maybe-info-bzip2: info-bzip2
+ 
+ info-bzip2: \
+     configure-bzip2 
+ 	@[ -f ./bzip2/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(SET_LIB_PATH) \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing info in bzip2" ; \
+ 	(cd bzip2 && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ 	          info) \
+ 	  || exit 1
+ 
+ @endif bzip2
  
  .PHONY: maybe-dvi-bzip2 dvi-bzip2
  maybe-dvi-bzip2:
+ @if bzip2
+ maybe-dvi-bzip2: dvi-bzip2
  
  dvi-bzip2: \
      configure-bzip2 
*************** dvi-bzip2: \
*** 2903,2909 ****
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
  	echo "Doing dvi in bzip2" ; \
--- 5713,5720 ----
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
  	echo "Doing dvi in bzip2" ; \
*************** dvi-bzip2: \
*** 2915,3133 ****
  	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-dejagnu dvi-dejagnu
! maybe-dvi-dejagnu:
  
! dvi-dejagnu: \
!     configure-dejagnu 
! 	@[ -f ./dejagnu/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in dejagnu" ; \
! 	(cd dejagnu && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-diff dvi-diff
! maybe-dvi-diff:
  
! dvi-diff: \
!     configure-diff 
! 	@[ -f ./diff/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in diff" ; \
! 	(cd diff && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-dosutils dvi-dosutils
! maybe-dvi-dosutils:
  
! dvi-dosutils: \
!     configure-dosutils 
! 	@[ -f ./dosutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in dosutils" ; \
! 	(cd dosutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-etc dvi-etc
! maybe-dvi-etc:
  
! dvi-etc: \
!     configure-etc 
! 	@[ -f ./etc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in etc" ; \
! 	(cd etc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-fastjar dvi-fastjar
! maybe-dvi-fastjar:
  
! dvi-fastjar: \
!     configure-fastjar 
! 	@[ -f ./fastjar/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in fastjar" ; \
! 	(cd fastjar && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-fileutils dvi-fileutils
! maybe-dvi-fileutils:
  
! dvi-fileutils: \
!     configure-fileutils 
! 	@[ -f ./fileutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in fileutils" ; \
! 	(cd fileutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-findutils dvi-findutils
! maybe-dvi-findutils:
  
! dvi-findutils: \
!     configure-findutils 
! 	@[ -f ./findutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in findutils" ; \
! 	(cd findutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-find dvi-find
! maybe-dvi-find:
  
! dvi-find: \
!     configure-find 
! 	@[ -f ./find/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in find" ; \
! 	(cd find && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
- .PHONY: maybe-dvi-flex dvi-flex
- maybe-dvi-flex:
  
! dvi-flex: \
!     configure-flex 
! 	@[ -f ./flex/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in flex" ; \
! 	(cd flex && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-gas dvi-gas
! maybe-dvi-gas:
  
! dvi-gas: \
!     configure-gas 
! 	@[ -f ./gas/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in gas" ; \
! 	(cd gas && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 5726,6054 ----
  	          dvi) \
  	  || exit 1
  
+ @endif bzip2
  
! .PHONY: maybe-html-bzip2 html-bzip2
! maybe-html-bzip2:
! @if bzip2
! maybe-html-bzip2: html-bzip2
  
! html-bzip2: \
!     configure-bzip2 
! 	@[ -f ./bzip2/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in bzip2" ; \
! 	(cd bzip2 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif bzip2
  
! .PHONY: maybe-TAGS-bzip2 TAGS-bzip2
! maybe-TAGS-bzip2:
! @if bzip2
! maybe-TAGS-bzip2: TAGS-bzip2
  
! TAGS-bzip2: \
!     configure-bzip2 
! 	@[ -f ./bzip2/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in bzip2" ; \
! 	(cd bzip2 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif bzip2
  
! .PHONY: maybe-install-info-bzip2 install-info-bzip2
! maybe-install-info-bzip2:
! @if bzip2
! maybe-install-info-bzip2: install-info-bzip2
  
! install-info-bzip2: \
!     configure-bzip2 \
!     info-bzip2 
! 	@[ -f ./bzip2/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in bzip2" ; \
! 	(cd bzip2 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif bzip2
  
! .PHONY: maybe-installcheck-bzip2 installcheck-bzip2
! maybe-installcheck-bzip2:
! @if bzip2
! maybe-installcheck-bzip2: installcheck-bzip2
  
! installcheck-bzip2: \
!     configure-bzip2 
! 	@[ -f ./bzip2/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in bzip2" ; \
! 	(cd bzip2 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif bzip2
  
! .PHONY: maybe-mostlyclean-bzip2 mostlyclean-bzip2
! maybe-mostlyclean-bzip2:
! @if bzip2
! maybe-mostlyclean-bzip2: mostlyclean-bzip2
  
! mostlyclean-bzip2: 
! 	@[ -f ./bzip2/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in bzip2" ; \
! 	(cd bzip2 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif bzip2
  
! .PHONY: maybe-clean-bzip2 clean-bzip2
! maybe-clean-bzip2:
! @if bzip2
! maybe-clean-bzip2: clean-bzip2
  
! clean-bzip2: 
! 	@[ -f ./bzip2/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in bzip2" ; \
! 	(cd bzip2 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif bzip2
  
! .PHONY: maybe-distclean-bzip2 distclean-bzip2
! maybe-distclean-bzip2:
! @if bzip2
! maybe-distclean-bzip2: distclean-bzip2
  
! distclean-bzip2: 
! 	@[ -f ./bzip2/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in bzip2" ; \
! 	(cd bzip2 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif bzip2
  
! .PHONY: maybe-maintainer-clean-bzip2 maintainer-clean-bzip2
! maybe-maintainer-clean-bzip2:
! @if bzip2
! maybe-maintainer-clean-bzip2: maintainer-clean-bzip2
  
! maintainer-clean-bzip2: 
! 	@[ -f ./bzip2/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in bzip2" ; \
! 	(cd bzip2 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif bzip2
  
  
! .PHONY: configure-dejagnu maybe-configure-dejagnu
! maybe-configure-dejagnu:
! @if dejagnu
! maybe-configure-dejagnu: configure-dejagnu
! configure-dejagnu:
! 	@test ! -f dejagnu/Makefile || exit 0; \
! 	[ -d dejagnu ] || mkdir dejagnu; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in dejagnu; \
+ 	cd dejagnu || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/dejagnu"; \
+ 	    libsrcdir="$$s/dejagnu";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/dejagnu"; \
+ 	    libsrcdir="$$s/dejagnu";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif dejagnu
+ 
+ .PHONY: all-dejagnu maybe-all-dejagnu
+ maybe-all-dejagnu:
+ @if dejagnu
+ TARGET-dejagnu=all
+ maybe-all-dejagnu: all-dejagnu
+ all-dejagnu: configure-dejagnu
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd dejagnu && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-dejagnu))
! @endif dejagnu
! 
! .PHONY: check-dejagnu maybe-check-dejagnu
! maybe-check-dejagnu:
! @if dejagnu
! maybe-check-dejagnu: check-dejagnu
! 
! check-dejagnu:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd dejagnu && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif dejagnu
! 
! .PHONY: install-dejagnu maybe-install-dejagnu
! maybe-install-dejagnu:
! @if dejagnu
! maybe-install-dejagnu: install-dejagnu
! 
! install-dejagnu: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd dejagnu && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif dejagnu
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-dejagnu info-dejagnu
! maybe-info-dejagnu:
! @if dejagnu
! maybe-info-dejagnu: info-dejagnu
! 
! info-dejagnu: \
!     configure-dejagnu 
! 	@[ -f ./dejagnu/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in dejagnu" ; \
! 	(cd dejagnu && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif dejagnu
  
! .PHONY: maybe-dvi-dejagnu dvi-dejagnu
! maybe-dvi-dejagnu:
! @if dejagnu
! maybe-dvi-dejagnu: dvi-dejagnu
  
! dvi-dejagnu: \
!     configure-dejagnu 
! 	@[ -f ./dejagnu/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in dejagnu" ; \
! 	(cd dejagnu && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** dvi-gas: \
*** 3135,3353 ****
  	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-gawk dvi-gawk
! maybe-dvi-gawk:
  
! dvi-gawk: \
!     configure-gawk 
! 	@[ -f ./gawk/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in gawk" ; \
! 	(cd gawk && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-gettext dvi-gettext
! maybe-dvi-gettext:
  
! dvi-gettext: \
!     configure-gettext 
! 	@[ -f ./gettext/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in gettext" ; \
! 	(cd gettext && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-gnuserv dvi-gnuserv
! maybe-dvi-gnuserv:
  
! dvi-gnuserv: \
!     configure-gnuserv 
! 	@[ -f ./gnuserv/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in gnuserv" ; \
! 	(cd gnuserv && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-gprof dvi-gprof
! maybe-dvi-gprof:
  
! dvi-gprof: \
!     configure-gprof 
! 	@[ -f ./gprof/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in gprof" ; \
! 	(cd gprof && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-gzip dvi-gzip
! maybe-dvi-gzip:
  
! dvi-gzip: \
!     configure-gzip 
! 	@[ -f ./gzip/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in gzip" ; \
! 	(cd gzip && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-hello dvi-hello
! maybe-dvi-hello:
  
! dvi-hello: \
!     configure-hello 
! 	@[ -f ./hello/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in hello" ; \
! 	(cd hello && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-indent dvi-indent
! maybe-dvi-indent:
  
! dvi-indent: \
!     configure-indent 
! 	@[ -f ./indent/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in indent" ; \
! 	(cd indent && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-intl dvi-intl
! maybe-dvi-intl:
  
! dvi-intl: \
!     configure-intl 
! 	@[ -f ./intl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in intl" ; \
! 	(cd intl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
- .PHONY: maybe-dvi-tcl dvi-tcl
- maybe-dvi-tcl:
  
! dvi-tcl: \
!     configure-tcl 
! 	@[ -f ./tcl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in tcl" ; \
! 	(cd tcl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-itcl dvi-itcl
! maybe-dvi-itcl:
  
! dvi-itcl: \
!     configure-itcl 
! 	@[ -f ./itcl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in itcl" ; \
! 	(cd itcl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 6056,6384 ----
  	          dvi) \
  	  || exit 1
  
+ @endif dejagnu
  
! .PHONY: maybe-html-dejagnu html-dejagnu
! maybe-html-dejagnu:
! @if dejagnu
! maybe-html-dejagnu: html-dejagnu
  
! html-dejagnu: \
!     configure-dejagnu 
! 	@[ -f ./dejagnu/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in dejagnu" ; \
! 	(cd dejagnu && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif dejagnu
  
! .PHONY: maybe-TAGS-dejagnu TAGS-dejagnu
! maybe-TAGS-dejagnu:
! @if dejagnu
! maybe-TAGS-dejagnu: TAGS-dejagnu
  
! TAGS-dejagnu: \
!     configure-dejagnu 
! 	@[ -f ./dejagnu/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in dejagnu" ; \
! 	(cd dejagnu && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif dejagnu
  
! .PHONY: maybe-install-info-dejagnu install-info-dejagnu
! maybe-install-info-dejagnu:
! @if dejagnu
! maybe-install-info-dejagnu: install-info-dejagnu
  
! install-info-dejagnu: \
!     configure-dejagnu \
!     info-dejagnu 
! 	@[ -f ./dejagnu/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in dejagnu" ; \
! 	(cd dejagnu && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif dejagnu
  
! .PHONY: maybe-installcheck-dejagnu installcheck-dejagnu
! maybe-installcheck-dejagnu:
! @if dejagnu
! maybe-installcheck-dejagnu: installcheck-dejagnu
  
! installcheck-dejagnu: \
!     configure-dejagnu 
! 	@[ -f ./dejagnu/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in dejagnu" ; \
! 	(cd dejagnu && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif dejagnu
  
! .PHONY: maybe-mostlyclean-dejagnu mostlyclean-dejagnu
! maybe-mostlyclean-dejagnu:
! @if dejagnu
! maybe-mostlyclean-dejagnu: mostlyclean-dejagnu
  
! mostlyclean-dejagnu: 
! 	@[ -f ./dejagnu/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in dejagnu" ; \
! 	(cd dejagnu && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif dejagnu
  
! .PHONY: maybe-clean-dejagnu clean-dejagnu
! maybe-clean-dejagnu:
! @if dejagnu
! maybe-clean-dejagnu: clean-dejagnu
  
! clean-dejagnu: 
! 	@[ -f ./dejagnu/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in dejagnu" ; \
! 	(cd dejagnu && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif dejagnu
  
! .PHONY: maybe-distclean-dejagnu distclean-dejagnu
! maybe-distclean-dejagnu:
! @if dejagnu
! maybe-distclean-dejagnu: distclean-dejagnu
  
! distclean-dejagnu: 
! 	@[ -f ./dejagnu/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in dejagnu" ; \
! 	(cd dejagnu && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif dejagnu
  
! .PHONY: maybe-maintainer-clean-dejagnu maintainer-clean-dejagnu
! maybe-maintainer-clean-dejagnu:
! @if dejagnu
! maybe-maintainer-clean-dejagnu: maintainer-clean-dejagnu
  
! maintainer-clean-dejagnu: 
! 	@[ -f ./dejagnu/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in dejagnu" ; \
! 	(cd dejagnu && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif dejagnu
  
  
! .PHONY: configure-diff maybe-configure-diff
! maybe-configure-diff:
! @if diff
! maybe-configure-diff: configure-diff
! configure-diff:
! 	@test ! -f diff/Makefile || exit 0; \
! 	[ -d diff ] || mkdir diff; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in diff; \
+ 	cd diff || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/diff"; \
+ 	    libsrcdir="$$s/diff";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/diff"; \
+ 	    libsrcdir="$$s/diff";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif diff
+ 
+ .PHONY: all-diff maybe-all-diff
+ maybe-all-diff:
+ @if diff
+ TARGET-diff=all
+ maybe-all-diff: all-diff
+ all-diff: configure-diff
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd diff && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-diff))
! @endif diff
! 
! .PHONY: check-diff maybe-check-diff
! maybe-check-diff:
! @if diff
! maybe-check-diff: check-diff
! 
! check-diff:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd diff && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif diff
! 
! .PHONY: install-diff maybe-install-diff
! maybe-install-diff:
! @if diff
! maybe-install-diff: install-diff
! 
! install-diff: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd diff && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif diff
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-diff info-diff
! maybe-info-diff:
! @if diff
! maybe-info-diff: info-diff
! 
! info-diff: \
!     configure-diff 
! 	@[ -f ./diff/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in diff" ; \
! 	(cd diff && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif diff
  
! .PHONY: maybe-dvi-diff dvi-diff
! maybe-dvi-diff:
! @if diff
! maybe-dvi-diff: dvi-diff
  
! dvi-diff: \
!     configure-diff 
! 	@[ -f ./diff/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in diff" ; \
! 	(cd diff && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** dvi-itcl: \
*** 3355,3573 ****
  	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-ld dvi-ld
! maybe-dvi-ld:
  
! dvi-ld: \
!     configure-ld 
! 	@[ -f ./ld/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in ld" ; \
! 	(cd ld && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-libgui dvi-libgui
! maybe-dvi-libgui:
  
! dvi-libgui: \
!     configure-libgui 
! 	@[ -f ./libgui/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in libgui" ; \
! 	(cd libgui && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-libiberty dvi-libiberty
! maybe-dvi-libiberty:
  
! dvi-libiberty: \
!     configure-libiberty 
! 	@[ -f ./libiberty/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in libiberty" ; \
! 	(cd libiberty && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-libtool dvi-libtool
! maybe-dvi-libtool:
  
! dvi-libtool: \
!     configure-libtool 
! 	@[ -f ./libtool/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in libtool" ; \
! 	(cd libtool && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-m4 dvi-m4
! maybe-dvi-m4:
  
! dvi-m4: \
!     configure-m4 
! 	@[ -f ./m4/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in m4" ; \
! 	(cd m4 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-make dvi-make
! maybe-dvi-make:
  
! dvi-make: \
!     configure-make 
! 	@[ -f ./make/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in make" ; \
! 	(cd make && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-mmalloc dvi-mmalloc
! maybe-dvi-mmalloc:
  
! dvi-mmalloc: \
!     configure-mmalloc 
! 	@[ -f ./mmalloc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in mmalloc" ; \
! 	(cd mmalloc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-patch dvi-patch
! maybe-dvi-patch:
  
! dvi-patch: \
!     configure-patch 
! 	@[ -f ./patch/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in patch" ; \
! 	(cd patch && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
- .PHONY: maybe-dvi-perl dvi-perl
- maybe-dvi-perl:
  
! dvi-perl: \
!     configure-perl 
! 	@[ -f ./perl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in perl" ; \
! 	(cd perl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-prms dvi-prms
! maybe-dvi-prms:
  
! dvi-prms: \
!     configure-prms 
! 	@[ -f ./prms/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in prms" ; \
! 	(cd prms && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 6386,6709 ----
  	          dvi) \
  	  || exit 1
  
+ @endif diff
  
! .PHONY: maybe-html-diff html-diff
! maybe-html-diff:
! @if diff
! maybe-html-diff: html-diff
  
! html-diff: \
!     configure-diff 
! 	@[ -f ./diff/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in diff" ; \
! 	(cd diff && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif diff
  
! .PHONY: maybe-TAGS-diff TAGS-diff
! maybe-TAGS-diff:
! @if diff
! maybe-TAGS-diff: TAGS-diff
  
! TAGS-diff: \
!     configure-diff 
! 	@[ -f ./diff/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in diff" ; \
! 	(cd diff && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif diff
  
! .PHONY: maybe-install-info-diff install-info-diff
! maybe-install-info-diff:
! @if diff
! maybe-install-info-diff: install-info-diff
  
! install-info-diff: \
!     configure-diff \
!     info-diff 
! 	@[ -f ./diff/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in diff" ; \
! 	(cd diff && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif diff
  
! .PHONY: maybe-installcheck-diff installcheck-diff
! maybe-installcheck-diff:
! @if diff
! maybe-installcheck-diff: installcheck-diff
  
! installcheck-diff: \
!     configure-diff 
! 	@[ -f ./diff/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in diff" ; \
! 	(cd diff && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif diff
  
! .PHONY: maybe-mostlyclean-diff mostlyclean-diff
! maybe-mostlyclean-diff:
! @if diff
! maybe-mostlyclean-diff: mostlyclean-diff
  
! mostlyclean-diff: 
! 	@[ -f ./diff/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in diff" ; \
! 	(cd diff && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif diff
  
! .PHONY: maybe-clean-diff clean-diff
! maybe-clean-diff:
! @if diff
! maybe-clean-diff: clean-diff
  
! clean-diff: 
! 	@[ -f ./diff/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in diff" ; \
! 	(cd diff && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif diff
  
! .PHONY: maybe-distclean-diff distclean-diff
! maybe-distclean-diff:
! @if diff
! maybe-distclean-diff: distclean-diff
  
! distclean-diff: 
! 	@[ -f ./diff/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in diff" ; \
! 	(cd diff && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif diff
  
! .PHONY: maybe-maintainer-clean-diff maintainer-clean-diff
! maybe-maintainer-clean-diff:
! @if diff
! maybe-maintainer-clean-diff: maintainer-clean-diff
  
! maintainer-clean-diff: 
! 	@[ -f ./diff/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in diff" ; \
! 	(cd diff && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif diff
  
  
! .PHONY: configure-dosutils maybe-configure-dosutils
! maybe-configure-dosutils:
! @if dosutils
! maybe-configure-dosutils: configure-dosutils
! configure-dosutils:
! 	@test ! -f dosutils/Makefile || exit 0; \
! 	[ -d dosutils ] || mkdir dosutils; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in dosutils; \
+ 	cd dosutils || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/dosutils"; \
+ 	    libsrcdir="$$s/dosutils";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/dosutils"; \
+ 	    libsrcdir="$$s/dosutils";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif dosutils
+ 
+ .PHONY: all-dosutils maybe-all-dosutils
+ maybe-all-dosutils:
+ @if dosutils
+ TARGET-dosutils=all
+ maybe-all-dosutils: all-dosutils
+ all-dosutils: configure-dosutils
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd dosutils && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-dosutils))
! @endif dosutils
! 
! .PHONY: check-dosutils maybe-check-dosutils
! maybe-check-dosutils:
! @if dosutils
! maybe-check-dosutils: check-dosutils
! 
! check-dosutils:
! 
! @endif dosutils
! 
! .PHONY: install-dosutils maybe-install-dosutils
! maybe-install-dosutils:
! @if dosutils
! maybe-install-dosutils: install-dosutils
! 
! install-dosutils: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd dosutils && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif dosutils
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-dosutils info-dosutils
! maybe-info-dosutils:
! @if dosutils
! maybe-info-dosutils: info-dosutils
! 
! info-dosutils: \
!     configure-dosutils 
! 	@[ -f ./dosutils/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in dosutils" ; \
! 	(cd dosutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif dosutils
  
! .PHONY: maybe-dvi-dosutils dvi-dosutils
! maybe-dvi-dosutils:
! @if dosutils
! maybe-dvi-dosutils: dvi-dosutils
  
! dvi-dosutils: \
!     configure-dosutils 
! 	@[ -f ./dosutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in dosutils" ; \
! 	(cd dosutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** dvi-prms: \
*** 3575,3793 ****
  	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-rcs dvi-rcs
! maybe-dvi-rcs:
  
! dvi-rcs: \
!     configure-rcs 
! 	@[ -f ./rcs/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in rcs" ; \
! 	(cd rcs && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-readline dvi-readline
! maybe-dvi-readline:
  
! dvi-readline: \
!     configure-readline 
! 	@[ -f ./readline/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in readline" ; \
! 	(cd readline && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-release dvi-release
! maybe-dvi-release:
  
! dvi-release: \
!     configure-release 
! 	@[ -f ./release/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in release" ; \
! 	(cd release && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-recode dvi-recode
! maybe-dvi-recode:
  
! dvi-recode: \
!     configure-recode 
! 	@[ -f ./recode/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in recode" ; \
! 	(cd recode && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-sed dvi-sed
! maybe-dvi-sed:
  
! dvi-sed: \
!     configure-sed 
! 	@[ -f ./sed/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in sed" ; \
! 	(cd sed && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-send-pr dvi-send-pr
! maybe-dvi-send-pr:
  
! dvi-send-pr: \
!     configure-send-pr 
! 	@[ -f ./send-pr/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in send-pr" ; \
! 	(cd send-pr && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-shellutils dvi-shellutils
! maybe-dvi-shellutils:
  
! dvi-shellutils: \
!     configure-shellutils 
! 	@[ -f ./shellutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in shellutils" ; \
! 	(cd shellutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-sid dvi-sid
! maybe-dvi-sid:
  
! dvi-sid: \
!     configure-sid 
! 	@[ -f ./sid/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in sid" ; \
! 	(cd sid && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
- .PHONY: maybe-dvi-sim dvi-sim
- maybe-dvi-sim:
  
! dvi-sim: \
!     configure-sim 
! 	@[ -f ./sim/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in sim" ; \
! 	(cd sim && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-tar dvi-tar
! maybe-dvi-tar:
  
! dvi-tar: \
!     configure-tar 
! 	@[ -f ./tar/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in tar" ; \
! 	(cd tar && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 6711,7039 ----
  	          dvi) \
  	  || exit 1
  
+ @endif dosutils
  
! .PHONY: maybe-html-dosutils html-dosutils
! maybe-html-dosutils:
! @if dosutils
! maybe-html-dosutils: html-dosutils
  
! html-dosutils: \
!     configure-dosutils 
! 	@[ -f ./dosutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in dosutils" ; \
! 	(cd dosutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif dosutils
  
! .PHONY: maybe-TAGS-dosutils TAGS-dosutils
! maybe-TAGS-dosutils:
! @if dosutils
! maybe-TAGS-dosutils: TAGS-dosutils
  
! TAGS-dosutils: \
!     configure-dosutils 
! 	@[ -f ./dosutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in dosutils" ; \
! 	(cd dosutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif dosutils
  
! .PHONY: maybe-install-info-dosutils install-info-dosutils
! maybe-install-info-dosutils:
! @if dosutils
! maybe-install-info-dosutils: install-info-dosutils
  
! install-info-dosutils: \
!     configure-dosutils \
!     info-dosutils 
! 	@[ -f ./dosutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in dosutils" ; \
! 	(cd dosutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif dosutils
  
! .PHONY: maybe-installcheck-dosutils installcheck-dosutils
! maybe-installcheck-dosutils:
! @if dosutils
! maybe-installcheck-dosutils: installcheck-dosutils
  
! installcheck-dosutils: \
!     configure-dosutils 
! 	@[ -f ./dosutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in dosutils" ; \
! 	(cd dosutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif dosutils
  
! .PHONY: maybe-mostlyclean-dosutils mostlyclean-dosutils
! maybe-mostlyclean-dosutils:
! @if dosutils
! maybe-mostlyclean-dosutils: mostlyclean-dosutils
  
! mostlyclean-dosutils: 
! 	@[ -f ./dosutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in dosutils" ; \
! 	(cd dosutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif dosutils
  
! .PHONY: maybe-clean-dosutils clean-dosutils
! maybe-clean-dosutils:
! @if dosutils
! maybe-clean-dosutils: clean-dosutils
  
! clean-dosutils: 
! 	@[ -f ./dosutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in dosutils" ; \
! 	(cd dosutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif dosutils
  
! .PHONY: maybe-distclean-dosutils distclean-dosutils
! maybe-distclean-dosutils:
! @if dosutils
! maybe-distclean-dosutils: distclean-dosutils
  
! distclean-dosutils: 
! 	@[ -f ./dosutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in dosutils" ; \
! 	(cd dosutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif dosutils
  
! .PHONY: maybe-maintainer-clean-dosutils maintainer-clean-dosutils
! maybe-maintainer-clean-dosutils:
! @if dosutils
! maybe-maintainer-clean-dosutils: maintainer-clean-dosutils
  
! maintainer-clean-dosutils: 
! 	@[ -f ./dosutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in dosutils" ; \
! 	(cd dosutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif dosutils
  
  
! .PHONY: configure-etc maybe-configure-etc
! maybe-configure-etc:
! @if etc
! maybe-configure-etc: configure-etc
! configure-etc:
! 	@test ! -f etc/Makefile || exit 0; \
! 	[ -d etc ] || mkdir etc; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in etc; \
+ 	cd etc || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/etc"; \
+ 	    libsrcdir="$$s/etc";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/etc"; \
+ 	    libsrcdir="$$s/etc";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif etc
+ 
+ .PHONY: all-etc maybe-all-etc
+ maybe-all-etc:
+ @if etc
+ TARGET-etc=all
+ maybe-all-etc: all-etc
+ all-etc: configure-etc
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd etc && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-etc))
! @endif etc
! 
! .PHONY: check-etc maybe-check-etc
! maybe-check-etc:
! @if etc
! maybe-check-etc: check-etc
! 
! check-etc:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd etc && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif etc
! 
! .PHONY: install-etc maybe-install-etc
! maybe-install-etc:
! @if etc
! maybe-install-etc: install-etc
! 
! install-etc: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd etc && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif etc
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-etc info-etc
! maybe-info-etc:
! @if etc
! maybe-info-etc: info-etc
! 
! info-etc: \
!     configure-etc 
! 	@[ -f ./etc/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in etc" ; \
! 	(cd etc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif etc
  
! .PHONY: maybe-dvi-etc dvi-etc
! maybe-dvi-etc:
! @if etc
! maybe-dvi-etc: dvi-etc
  
! dvi-etc: \
!     configure-etc 
! 	@[ -f ./etc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in etc" ; \
! 	(cd etc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** dvi-tar: \
*** 3795,4013 ****
  	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-texinfo dvi-texinfo
! maybe-dvi-texinfo:
  
! dvi-texinfo: \
!     configure-texinfo 
! 	@[ -f ./texinfo/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in texinfo" ; \
! 	(cd texinfo && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-textutils dvi-textutils
! maybe-dvi-textutils:
  
! dvi-textutils: \
!     configure-textutils 
! 	@[ -f ./textutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in textutils" ; \
! 	(cd textutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-time dvi-time
! maybe-dvi-time:
  
! dvi-time: \
!     configure-time 
! 	@[ -f ./time/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in time" ; \
! 	(cd time && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-uudecode dvi-uudecode
! maybe-dvi-uudecode:
  
! dvi-uudecode: \
!     configure-uudecode 
! 	@[ -f ./uudecode/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in uudecode" ; \
! 	(cd uudecode && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-wdiff dvi-wdiff
! maybe-dvi-wdiff:
  
! dvi-wdiff: \
!     configure-wdiff 
! 	@[ -f ./wdiff/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in wdiff" ; \
! 	(cd wdiff && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-zip dvi-zip
! maybe-dvi-zip:
  
! dvi-zip: \
!     configure-zip 
! 	@[ -f ./zip/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in zip" ; \
! 	(cd zip && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-zlib dvi-zlib
! maybe-dvi-zlib:
  
! dvi-zlib: \
!     configure-zlib 
! 	@[ -f ./zlib/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in zlib" ; \
! 	(cd zlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-gdb dvi-gdb
! maybe-dvi-gdb:
  
! dvi-gdb: \
!     configure-gdb 
! 	@[ -f ./gdb/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in gdb" ; \
! 	(cd gdb && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
- .PHONY: maybe-dvi-expect dvi-expect
- maybe-dvi-expect:
  
! dvi-expect: \
!     configure-expect 
! 	@[ -f ./expect/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in expect" ; \
! 	(cd expect && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-guile dvi-guile
! maybe-dvi-guile:
  
! dvi-guile: \
!     configure-guile 
! 	@[ -f ./guile/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in guile" ; \
! 	(cd guile && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 7041,7372 ----
  	          dvi) \
  	  || exit 1
  
+ @endif etc
  
! .PHONY: maybe-html-etc html-etc
! maybe-html-etc:
! @if etc
! maybe-html-etc: html-etc
  
! html-etc: \
!     configure-etc 
! 	@[ -f ./etc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in etc" ; \
! 	(cd etc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif etc
  
! .PHONY: maybe-TAGS-etc TAGS-etc
! maybe-TAGS-etc:
! @if etc
! maybe-TAGS-etc: TAGS-etc
  
! TAGS-etc: \
!     configure-etc 
! 	@[ -f ./etc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in etc" ; \
! 	(cd etc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif etc
  
! .PHONY: maybe-install-info-etc install-info-etc
! maybe-install-info-etc:
! @if etc
! maybe-install-info-etc: install-info-etc
  
! install-info-etc: \
!     configure-etc \
!     info-etc 
! 	@[ -f ./etc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in etc" ; \
! 	(cd etc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif etc
  
! .PHONY: maybe-installcheck-etc installcheck-etc
! maybe-installcheck-etc:
! @if etc
! maybe-installcheck-etc: installcheck-etc
  
! installcheck-etc: \
!     configure-etc 
! 	@[ -f ./etc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in etc" ; \
! 	(cd etc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif etc
  
! .PHONY: maybe-mostlyclean-etc mostlyclean-etc
! maybe-mostlyclean-etc:
! @if etc
! maybe-mostlyclean-etc: mostlyclean-etc
  
! mostlyclean-etc: 
! 	@[ -f ./etc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in etc" ; \
! 	(cd etc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif etc
  
! .PHONY: maybe-clean-etc clean-etc
! maybe-clean-etc:
! @if etc
! maybe-clean-etc: clean-etc
  
! clean-etc: 
! 	@[ -f ./etc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in etc" ; \
! 	(cd etc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif etc
  
! .PHONY: maybe-distclean-etc distclean-etc
! maybe-distclean-etc:
! @if etc
! maybe-distclean-etc: distclean-etc
  
! distclean-etc: 
! 	@[ -f ./etc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in etc" ; \
! 	(cd etc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif etc
  
! .PHONY: maybe-maintainer-clean-etc maintainer-clean-etc
! maybe-maintainer-clean-etc:
! @if etc
! maybe-maintainer-clean-etc: maintainer-clean-etc
  
! maintainer-clean-etc: 
! 	@[ -f ./etc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in etc" ; \
! 	(cd etc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif etc
  
  
! .PHONY: configure-fastjar maybe-configure-fastjar
! maybe-configure-fastjar:
! @if fastjar
! maybe-configure-fastjar: configure-fastjar
! configure-fastjar:
! 	@test ! -f fastjar/Makefile || exit 0; \
! 	[ -d fastjar ] || mkdir fastjar; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in fastjar; \
+ 	cd fastjar || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/fastjar"; \
+ 	    libsrcdir="$$s/fastjar";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/fastjar"; \
+ 	    libsrcdir="$$s/fastjar";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif fastjar
+ 
+ .PHONY: all-fastjar maybe-all-fastjar
+ maybe-all-fastjar:
+ @if fastjar
+ TARGET-fastjar=all
+ maybe-all-fastjar: all-fastjar
+ all-fastjar: configure-fastjar
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd fastjar && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-fastjar))
! @endif fastjar
! 
! .PHONY: check-fastjar maybe-check-fastjar
! maybe-check-fastjar:
! @if fastjar
! maybe-check-fastjar: check-fastjar
! 
! # This module is only tested in a native toolchain.
! check-fastjar:
! 	@if [ '$(host)' = '$(target)' ] ; then \
! 	  r=`${PWD_COMMAND}`; export r; \
! 	  s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	  $(SET_LIB_PATH) \
! 	  $(HOST_EXPORTS) \
! 	  (cd fastjar && $(MAKE) $(FLAGS_TO_PASS)  check); \
! 	fi
! 
! @endif fastjar
! 
! .PHONY: install-fastjar maybe-install-fastjar
! maybe-install-fastjar:
! @if fastjar
! maybe-install-fastjar: install-fastjar
! 
! install-fastjar: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd fastjar && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif fastjar
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-fastjar info-fastjar
! maybe-info-fastjar:
! @if fastjar
! maybe-info-fastjar: info-fastjar
! 
! info-fastjar: \
!     configure-fastjar 
! 	@[ -f ./fastjar/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in fastjar" ; \
! 	(cd fastjar && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif fastjar
  
! .PHONY: maybe-dvi-fastjar dvi-fastjar
! maybe-dvi-fastjar:
! @if fastjar
! maybe-dvi-fastjar: dvi-fastjar
  
! dvi-fastjar: \
!     configure-fastjar 
! 	@[ -f ./fastjar/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in fastjar" ; \
! 	(cd fastjar && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** dvi-guile: \
*** 4015,4214 ****
  	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-tk dvi-tk
! maybe-dvi-tk:
  
! dvi-tk: \
!     configure-tk 
! 	@[ -f ./tk/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in tk" ; \
! 	(cd tk && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-tix dvi-tix
! maybe-dvi-tix:
  
! dvi-tix: \
!     configure-tix 
! 	@[ -f ./tix/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in tix" ; \
! 	(cd tix && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-libtermcap dvi-libtermcap
! maybe-dvi-libtermcap:
  
! dvi-libtermcap: \
!     configure-libtermcap 
! 	@[ -f ./libtermcap/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in libtermcap" ; \
! 	(cd libtermcap && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-utils dvi-utils
! maybe-dvi-utils:
  
! dvi-utils: \
!     configure-utils 
! 	@[ -f ./utils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in utils" ; \
! 	(cd utils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
  
! # Target modules.
  
! .PHONY: maybe-dvi-target-libstdc++-v3 dvi-target-libstdc++-v3
! maybe-dvi-target-libstdc++-v3:
  
! dvi-target-libstdc++-v3: \
!     configure-target-libstdc++-v3 
! 	@[ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing dvi in $(TARGET_SUBDIR)/libstdc++-v3" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libstdc++-v3 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-target-newlib dvi-target-newlib
! maybe-dvi-target-newlib:
  
! dvi-target-newlib: \
!     configure-target-newlib 
! 	@[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing dvi in $(TARGET_SUBDIR)/newlib" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/newlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-target-libf2c dvi-target-libf2c
! maybe-dvi-target-libf2c:
  
! dvi-target-libf2c: \
!     configure-target-libf2c 
! 	@[ -f $(TARGET_SUBDIR)/libf2c/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing dvi in $(TARGET_SUBDIR)/libf2c" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libf2c && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
- .PHONY: maybe-dvi-target-libobjc dvi-target-libobjc
- maybe-dvi-target-libobjc:
  
! dvi-target-libobjc: \
!     configure-target-libobjc 
! 	@[ -f $(TARGET_SUBDIR)/libobjc/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing dvi in $(TARGET_SUBDIR)/libobjc" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libobjc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-target-libtermcap dvi-target-libtermcap
! maybe-dvi-target-libtermcap:
  
! dvi-target-libtermcap: \
!     configure-target-libtermcap 
! 	@[ -f $(TARGET_SUBDIR)/libtermcap/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing dvi in $(TARGET_SUBDIR)/libtermcap" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libtermcap && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 7374,7702 ----
  	          dvi) \
  	  || exit 1
  
+ @endif fastjar
  
! .PHONY: maybe-html-fastjar html-fastjar
! maybe-html-fastjar:
! @if fastjar
! maybe-html-fastjar: html-fastjar
  
! html-fastjar: \
!     configure-fastjar 
! 	@[ -f ./fastjar/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in fastjar" ; \
! 	(cd fastjar && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif fastjar
  
! .PHONY: maybe-TAGS-fastjar TAGS-fastjar
! maybe-TAGS-fastjar:
! @if fastjar
! maybe-TAGS-fastjar: TAGS-fastjar
  
! TAGS-fastjar: \
!     configure-fastjar 
! 	@[ -f ./fastjar/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in fastjar" ; \
! 	(cd fastjar && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif fastjar
  
! .PHONY: maybe-install-info-fastjar install-info-fastjar
! maybe-install-info-fastjar:
! @if fastjar
! maybe-install-info-fastjar: install-info-fastjar
  
! install-info-fastjar: \
!     configure-fastjar \
!     info-fastjar 
! 	@[ -f ./fastjar/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in fastjar" ; \
! 	(cd fastjar && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif fastjar
  
! .PHONY: maybe-installcheck-fastjar installcheck-fastjar
! maybe-installcheck-fastjar:
! @if fastjar
! maybe-installcheck-fastjar: installcheck-fastjar
  
! installcheck-fastjar: \
!     configure-fastjar 
! 	@[ -f ./fastjar/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in fastjar" ; \
! 	(cd fastjar && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif fastjar
  
+ .PHONY: maybe-mostlyclean-fastjar mostlyclean-fastjar
+ maybe-mostlyclean-fastjar:
+ @if fastjar
+ maybe-mostlyclean-fastjar: mostlyclean-fastjar
  
! mostlyclean-fastjar: 
! 	@[ -f ./fastjar/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	echo "Doing mostlyclean in fastjar" ; \
! 	(cd fastjar && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
! 	  || exit 1
  
! @endif fastjar
  
! .PHONY: maybe-clean-fastjar clean-fastjar
! maybe-clean-fastjar:
! @if fastjar
! maybe-clean-fastjar: clean-fastjar
! 
! clean-fastjar: 
! 	@[ -f ./fastjar/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in fastjar" ; \
! 	(cd fastjar && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif fastjar
  
! .PHONY: maybe-distclean-fastjar distclean-fastjar
! maybe-distclean-fastjar:
! @if fastjar
! maybe-distclean-fastjar: distclean-fastjar
  
! distclean-fastjar: 
! 	@[ -f ./fastjar/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in fastjar" ; \
! 	(cd fastjar && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif fastjar
  
! .PHONY: maybe-maintainer-clean-fastjar maintainer-clean-fastjar
! maybe-maintainer-clean-fastjar:
! @if fastjar
! maybe-maintainer-clean-fastjar: maintainer-clean-fastjar
  
! maintainer-clean-fastjar: 
! 	@[ -f ./fastjar/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in fastjar" ; \
! 	(cd fastjar && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif fastjar
  
  
! .PHONY: configure-fileutils maybe-configure-fileutils
! maybe-configure-fileutils:
! @if fileutils
! maybe-configure-fileutils: configure-fileutils
! configure-fileutils:
! 	@test ! -f fileutils/Makefile || exit 0; \
! 	[ -d fileutils ] || mkdir fileutils; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in fileutils; \
+ 	cd fileutils || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/fileutils"; \
+ 	    libsrcdir="$$s/fileutils";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/fileutils"; \
+ 	    libsrcdir="$$s/fileutils";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif fileutils
+ 
+ .PHONY: all-fileutils maybe-all-fileutils
+ maybe-all-fileutils:
+ @if fileutils
+ TARGET-fileutils=all
+ maybe-all-fileutils: all-fileutils
+ all-fileutils: configure-fileutils
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd fileutils && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-fileutils))
! @endif fileutils
! 
! .PHONY: check-fileutils maybe-check-fileutils
! maybe-check-fileutils:
! @if fileutils
! maybe-check-fileutils: check-fileutils
! 
! check-fileutils:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd fileutils && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif fileutils
! 
! .PHONY: install-fileutils maybe-install-fileutils
! maybe-install-fileutils:
! @if fileutils
! maybe-install-fileutils: install-fileutils
! 
! install-fileutils: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd fileutils && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif fileutils
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-fileutils info-fileutils
! maybe-info-fileutils:
! @if fileutils
! maybe-info-fileutils: info-fileutils
! 
! info-fileutils: \
!     configure-fileutils 
! 	@[ -f ./fileutils/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in fileutils" ; \
! 	(cd fileutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif fileutils
  
! .PHONY: maybe-dvi-fileutils dvi-fileutils
! maybe-dvi-fileutils:
! @if fileutils
! maybe-dvi-fileutils: dvi-fileutils
  
! dvi-fileutils: \
!     configure-fileutils 
! 	@[ -f ./fileutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in fileutils" ; \
! 	(cd fileutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** dvi-target-libtermcap: \
*** 4216,4434 ****
  	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-target-winsup dvi-target-winsup
! maybe-dvi-target-winsup:
  
! dvi-target-winsup: \
!     configure-target-winsup 
! 	@[ -f $(TARGET_SUBDIR)/winsup/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing dvi in $(TARGET_SUBDIR)/winsup" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/winsup && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-target-libgloss dvi-target-libgloss
! maybe-dvi-target-libgloss:
  
! dvi-target-libgloss: \
!     configure-target-libgloss 
! 	@[ -f $(TARGET_SUBDIR)/libgloss/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing dvi in $(TARGET_SUBDIR)/libgloss" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libgloss && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-target-libiberty dvi-target-libiberty
! maybe-dvi-target-libiberty:
  
! dvi-target-libiberty: \
!     configure-target-libiberty 
! 	@[ -f $(TARGET_SUBDIR)/libiberty/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing dvi in $(TARGET_SUBDIR)/libiberty" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libiberty && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-target-gperf dvi-target-gperf
! maybe-dvi-target-gperf:
  
! dvi-target-gperf: \
!     configure-target-gperf 
! 	@[ -f $(TARGET_SUBDIR)/gperf/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing dvi in $(TARGET_SUBDIR)/gperf" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/gperf && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-target-examples dvi-target-examples
! maybe-dvi-target-examples:
  
! dvi-target-examples: \
!     configure-target-examples 
! 	@[ -f $(TARGET_SUBDIR)/examples/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing dvi in $(TARGET_SUBDIR)/examples" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/examples && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-target-libffi dvi-target-libffi
! maybe-dvi-target-libffi:
  
! dvi-target-libffi: \
!     configure-target-libffi 
! 	@[ -f $(TARGET_SUBDIR)/libffi/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing dvi in $(TARGET_SUBDIR)/libffi" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libffi && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-target-libjava dvi-target-libjava
! maybe-dvi-target-libjava:
  
! dvi-target-libjava: \
!     configure-target-libjava 
! 	@[ -f $(TARGET_SUBDIR)/libjava/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing dvi in $(TARGET_SUBDIR)/libjava" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libjava && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-target-zlib dvi-target-zlib
! maybe-dvi-target-zlib:
  
! dvi-target-zlib: \
!     configure-target-zlib 
! 	@[ -f $(TARGET_SUBDIR)/zlib/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing dvi in $(TARGET_SUBDIR)/zlib" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/zlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
- .PHONY: maybe-dvi-target-boehm-gc dvi-target-boehm-gc
- maybe-dvi-target-boehm-gc:
  
! dvi-target-boehm-gc: \
!     configure-target-boehm-gc 
! 	@[ -f $(TARGET_SUBDIR)/boehm-gc/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing dvi in $(TARGET_SUBDIR)/boehm-gc" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/boehm-gc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-target-qthreads dvi-target-qthreads
! maybe-dvi-target-qthreads:
  
! dvi-target-qthreads: \
!     configure-target-qthreads 
! 	@[ -f $(TARGET_SUBDIR)/qthreads/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing dvi in $(TARGET_SUBDIR)/qthreads" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/qthreads && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 7704,8032 ----
  	          dvi) \
  	  || exit 1
  
+ @endif fileutils
  
! .PHONY: maybe-html-fileutils html-fileutils
! maybe-html-fileutils:
! @if fileutils
! maybe-html-fileutils: html-fileutils
  
! html-fileutils: \
!     configure-fileutils 
! 	@[ -f ./fileutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in fileutils" ; \
! 	(cd fileutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif fileutils
  
! .PHONY: maybe-TAGS-fileutils TAGS-fileutils
! maybe-TAGS-fileutils:
! @if fileutils
! maybe-TAGS-fileutils: TAGS-fileutils
  
! TAGS-fileutils: \
!     configure-fileutils 
! 	@[ -f ./fileutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in fileutils" ; \
! 	(cd fileutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif fileutils
  
! .PHONY: maybe-install-info-fileutils install-info-fileutils
! maybe-install-info-fileutils:
! @if fileutils
! maybe-install-info-fileutils: install-info-fileutils
  
! install-info-fileutils: \
!     configure-fileutils \
!     info-fileutils 
! 	@[ -f ./fileutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in fileutils" ; \
! 	(cd fileutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif fileutils
  
! .PHONY: maybe-installcheck-fileutils installcheck-fileutils
! maybe-installcheck-fileutils:
! @if fileutils
! maybe-installcheck-fileutils: installcheck-fileutils
  
! installcheck-fileutils: \
!     configure-fileutils 
! 	@[ -f ./fileutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in fileutils" ; \
! 	(cd fileutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif fileutils
  
! .PHONY: maybe-mostlyclean-fileutils mostlyclean-fileutils
! maybe-mostlyclean-fileutils:
! @if fileutils
! maybe-mostlyclean-fileutils: mostlyclean-fileutils
  
! mostlyclean-fileutils: 
! 	@[ -f ./fileutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in fileutils" ; \
! 	(cd fileutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif fileutils
  
! .PHONY: maybe-clean-fileutils clean-fileutils
! maybe-clean-fileutils:
! @if fileutils
! maybe-clean-fileutils: clean-fileutils
  
! clean-fileutils: 
! 	@[ -f ./fileutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in fileutils" ; \
! 	(cd fileutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif fileutils
  
! .PHONY: maybe-distclean-fileutils distclean-fileutils
! maybe-distclean-fileutils:
! @if fileutils
! maybe-distclean-fileutils: distclean-fileutils
  
! distclean-fileutils: 
! 	@[ -f ./fileutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in fileutils" ; \
! 	(cd fileutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif fileutils
  
! .PHONY: maybe-maintainer-clean-fileutils maintainer-clean-fileutils
! maybe-maintainer-clean-fileutils:
! @if fileutils
! maybe-maintainer-clean-fileutils: maintainer-clean-fileutils
  
! maintainer-clean-fileutils: 
! 	@[ -f ./fileutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in fileutils" ; \
! 	(cd fileutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif fileutils
  
  
! .PHONY: configure-findutils maybe-configure-findutils
! maybe-configure-findutils:
! @if findutils
! maybe-configure-findutils: configure-findutils
! configure-findutils:
! 	@test ! -f findutils/Makefile || exit 0; \
! 	[ -d findutils ] || mkdir findutils; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in findutils; \
+ 	cd findutils || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/findutils"; \
+ 	    libsrcdir="$$s/findutils";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/findutils"; \
+ 	    libsrcdir="$$s/findutils";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif findutils
+ 
+ .PHONY: all-findutils maybe-all-findutils
+ maybe-all-findutils:
+ @if findutils
+ TARGET-findutils=all
+ maybe-all-findutils: all-findutils
+ all-findutils: configure-findutils
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd findutils && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-findutils))
! @endif findutils
! 
! .PHONY: check-findutils maybe-check-findutils
! maybe-check-findutils:
! @if findutils
! maybe-check-findutils: check-findutils
! 
! check-findutils:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd findutils && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif findutils
! 
! .PHONY: install-findutils maybe-install-findutils
! maybe-install-findutils:
! @if findutils
! maybe-install-findutils: install-findutils
! 
! install-findutils: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd findutils && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif findutils
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-findutils info-findutils
! maybe-info-findutils:
! @if findutils
! maybe-info-findutils: info-findutils
! 
! info-findutils: \
!     configure-findutils 
! 	@[ -f ./findutils/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in findutils" ; \
! 	(cd findutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif findutils
  
! .PHONY: maybe-dvi-findutils dvi-findutils
! maybe-dvi-findutils:
! @if findutils
! maybe-dvi-findutils: dvi-findutils
  
! dvi-findutils: \
!     configure-findutils 
! 	@[ -f ./findutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in findutils" ; \
! 	(cd findutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** dvi-target-qthreads: \
*** 4436,4767 ****
  	          dvi) \
  	  || exit 1
  
  
! .PHONY: maybe-dvi-target-rda dvi-target-rda
! maybe-dvi-target-rda:
  
! dvi-target-rda: \
!     configure-target-rda 
! 	@[ -f $(TARGET_SUBDIR)/rda/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing dvi in $(TARGET_SUBDIR)/rda" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/rda && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
  
  
! .PHONY: do-TAGS
! do-TAGS: TAGS-host TAGS-target
  
! .PHONY: TAGS-host
! TAGS-host: maybe-TAGS-gcc  \
!     maybe-TAGS-ash \
!     maybe-TAGS-autoconf \
!     maybe-TAGS-automake \
!     maybe-TAGS-bash \
!     maybe-TAGS-bfd \
!     maybe-TAGS-opcodes \
!     maybe-TAGS-binutils \
!     maybe-TAGS-bison \
!     maybe-TAGS-byacc \
!     maybe-TAGS-bzip2 \
!     maybe-TAGS-dejagnu \
!     maybe-TAGS-diff \
!     maybe-TAGS-dosutils \
!     maybe-TAGS-etc \
!     maybe-TAGS-fastjar \
!     maybe-TAGS-fileutils \
!     maybe-TAGS-findutils \
!     maybe-TAGS-find \
!     maybe-TAGS-flex \
!     maybe-TAGS-gas \
!     maybe-TAGS-gawk \
!     maybe-TAGS-gettext \
!     maybe-TAGS-gnuserv \
!     maybe-TAGS-gprof \
!     maybe-TAGS-gzip \
!     maybe-TAGS-hello \
!     maybe-TAGS-indent \
!     maybe-TAGS-intl \
!     maybe-TAGS-tcl \
!     maybe-TAGS-itcl \
!     maybe-TAGS-ld \
!     maybe-TAGS-libgui \
!     maybe-TAGS-libiberty \
!     maybe-TAGS-libtool \
!     maybe-TAGS-m4 \
!     maybe-TAGS-make \
!     maybe-TAGS-mmalloc \
!     maybe-TAGS-patch \
!     maybe-TAGS-perl \
!     maybe-TAGS-prms \
!     maybe-TAGS-rcs \
!     maybe-TAGS-readline \
!     maybe-TAGS-release \
!     maybe-TAGS-recode \
!     maybe-TAGS-sed \
!     maybe-TAGS-send-pr \
!     maybe-TAGS-shellutils \
!     maybe-TAGS-sid \
!     maybe-TAGS-sim \
!     maybe-TAGS-tar \
!     maybe-TAGS-texinfo \
!     maybe-TAGS-textutils \
!     maybe-TAGS-time \
!     maybe-TAGS-uudecode \
!     maybe-TAGS-wdiff \
!     maybe-TAGS-zip \
!     maybe-TAGS-zlib \
!     maybe-TAGS-gdb \
!     maybe-TAGS-expect \
!     maybe-TAGS-guile \
!     maybe-TAGS-tk \
!     maybe-TAGS-tix \
!     maybe-TAGS-libtermcap \
!     maybe-TAGS-utils
  
! .PHONY: TAGS-target
! TAGS-target:  \
!     maybe-TAGS-target-libstdc++-v3 \
!     maybe-TAGS-target-newlib \
!     maybe-TAGS-target-libf2c \
!     maybe-TAGS-target-libobjc \
!     maybe-TAGS-target-libtermcap \
!     maybe-TAGS-target-winsup \
!     maybe-TAGS-target-libgloss \
!     maybe-TAGS-target-libiberty \
!     maybe-TAGS-target-gperf \
!     maybe-TAGS-target-examples \
!     maybe-TAGS-target-libffi \
!     maybe-TAGS-target-libjava \
!     maybe-TAGS-target-zlib \
!     maybe-TAGS-target-boehm-gc \
!     maybe-TAGS-target-qthreads \
!     maybe-TAGS-target-rda
  
! # GCC, the eternal special case
! .PHONY: maybe-TAGS-gcc TAGS-gcc
! maybe-TAGS-gcc:
! TAGS-gcc: \
!     configure-gcc 
! 	@[ -f ./gcc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_GCC_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in gcc" ; \
! 	(cd gcc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
! # Host modules.
  
! .PHONY: maybe-TAGS-ash TAGS-ash
! maybe-TAGS-ash:
  
! TAGS-ash: \
!     configure-ash 
! 	@[ -f ./ash/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in ash" ; \
! 	(cd ash && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-autoconf TAGS-autoconf
! maybe-TAGS-autoconf:
  
! TAGS-autoconf: \
!     configure-autoconf 
! 	@[ -f ./autoconf/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in autoconf" ; \
! 	(cd autoconf && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-automake TAGS-automake
! maybe-TAGS-automake:
  
! TAGS-automake: \
!     configure-automake 
! 	@[ -f ./automake/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in automake" ; \
! 	(cd automake && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-bash TAGS-bash
! maybe-TAGS-bash:
  
! TAGS-bash: \
!     configure-bash 
! 	@[ -f ./bash/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in bash" ; \
! 	(cd bash && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-bfd TAGS-bfd
! maybe-TAGS-bfd:
  
! TAGS-bfd: \
!     configure-bfd 
! 	@[ -f ./bfd/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in bfd" ; \
! 	(cd bfd && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
- .PHONY: maybe-TAGS-opcodes TAGS-opcodes
- maybe-TAGS-opcodes:
  
! TAGS-opcodes: \
!     configure-opcodes 
! 	@[ -f ./opcodes/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in opcodes" ; \
! 	(cd opcodes && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-binutils TAGS-binutils
! maybe-TAGS-binutils:
  
! TAGS-binutils: \
!     configure-binutils 
! 	@[ -f ./binutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in binutils" ; \
! 	(cd binutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-bison TAGS-bison
! maybe-TAGS-bison:
  
! TAGS-bison: \
!     configure-bison 
! 	@[ -f ./bison/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in bison" ; \
! 	(cd bison && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-byacc TAGS-byacc
! maybe-TAGS-byacc:
  
! TAGS-byacc: \
!     configure-byacc 
! 	@[ -f ./byacc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in byacc" ; \
! 	(cd byacc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 8034,8414 ----
  	          dvi) \
  	  || exit 1
  
+ @endif findutils
  
! .PHONY: maybe-html-findutils html-findutils
! maybe-html-findutils:
! @if findutils
! maybe-html-findutils: html-findutils
  
! html-findutils: \
!     configure-findutils 
! 	@[ -f ./findutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in findutils" ; \
! 	(cd findutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif findutils
  
+ .PHONY: maybe-TAGS-findutils TAGS-findutils
+ maybe-TAGS-findutils:
+ @if findutils
+ maybe-TAGS-findutils: TAGS-findutils
  
! TAGS-findutils: \
!     configure-findutils 
! 	@[ -f ./findutils/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	echo "Doing TAGS in findutils" ; \
! 	(cd findutils && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
! 	  || exit 1
  
! @endif findutils
  
! .PHONY: maybe-install-info-findutils install-info-findutils
! maybe-install-info-findutils:
! @if findutils
! maybe-install-info-findutils: install-info-findutils
  
! install-info-findutils: \
!     configure-findutils \
!     info-findutils 
! 	@[ -f ./findutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in findutils" ; \
! 	(cd findutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
! @endif findutils
  
! .PHONY: maybe-installcheck-findutils installcheck-findutils
! maybe-installcheck-findutils:
! @if findutils
! maybe-installcheck-findutils: installcheck-findutils
  
! installcheck-findutils: \
!     configure-findutils 
! 	@[ -f ./findutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in findutils" ; \
! 	(cd findutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif findutils
  
! .PHONY: maybe-mostlyclean-findutils mostlyclean-findutils
! maybe-mostlyclean-findutils:
! @if findutils
! maybe-mostlyclean-findutils: mostlyclean-findutils
  
! mostlyclean-findutils: 
! 	@[ -f ./findutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in findutils" ; \
! 	(cd findutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif findutils
  
! .PHONY: maybe-clean-findutils clean-findutils
! maybe-clean-findutils:
! @if findutils
! maybe-clean-findutils: clean-findutils
  
! clean-findutils: 
! 	@[ -f ./findutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in findutils" ; \
! 	(cd findutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif findutils
  
! .PHONY: maybe-distclean-findutils distclean-findutils
! maybe-distclean-findutils:
! @if findutils
! maybe-distclean-findutils: distclean-findutils
  
! distclean-findutils: 
! 	@[ -f ./findutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in findutils" ; \
! 	(cd findutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif findutils
  
! .PHONY: maybe-maintainer-clean-findutils maintainer-clean-findutils
! maybe-maintainer-clean-findutils:
! @if findutils
! maybe-maintainer-clean-findutils: maintainer-clean-findutils
  
! maintainer-clean-findutils: 
! 	@[ -f ./findutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in findutils" ; \
! 	(cd findutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif findutils
  
  
! .PHONY: configure-find maybe-configure-find
! maybe-configure-find:
! @if find
! maybe-configure-find: configure-find
! configure-find:
! 	@test ! -f find/Makefile || exit 0; \
! 	[ -d find ] || mkdir find; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in find; \
+ 	cd find || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/find"; \
+ 	    libsrcdir="$$s/find";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/find"; \
+ 	    libsrcdir="$$s/find";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif find
+ 
+ .PHONY: all-find maybe-all-find
+ maybe-all-find:
+ @if find
+ TARGET-find=all
+ maybe-all-find: all-find
+ all-find: configure-find
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd find && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-find))
! @endif find
! 
! .PHONY: check-find maybe-check-find
! maybe-check-find:
! @if find
! maybe-check-find: check-find
! 
! check-find:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd find && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif find
! 
! .PHONY: install-find maybe-install-find
! maybe-install-find:
! @if find
! maybe-install-find: install-find
! 
! install-find: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd find && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif find
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-find info-find
! maybe-info-find:
! @if find
! maybe-info-find: info-find
! 
! info-find: \
!     configure-find 
! 	@[ -f ./find/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in find" ; \
! 	(cd find && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif find
  
! .PHONY: maybe-dvi-find dvi-find
! maybe-dvi-find:
! @if find
! maybe-dvi-find: dvi-find
  
! dvi-find: \
!     configure-find 
! 	@[ -f ./find/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in find" ; \
! 	(cd find && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif find
  
! .PHONY: maybe-html-find html-find
! maybe-html-find:
! @if find
! maybe-html-find: html-find
  
! html-find: \
!     configure-find 
! 	@[ -f ./find/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in find" ; \
! 	(cd find && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif find
  
! .PHONY: maybe-TAGS-find TAGS-find
! maybe-TAGS-find:
! @if find
! maybe-TAGS-find: TAGS-find
  
! TAGS-find: \
!     configure-find 
! 	@[ -f ./find/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in find" ; \
! 	(cd find && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** TAGS-byacc: \
*** 4769,4975 ****
  	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-bzip2 TAGS-bzip2
! maybe-TAGS-bzip2:
  
! TAGS-bzip2: \
!     configure-bzip2 
! 	@[ -f ./bzip2/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in bzip2" ; \
! 	(cd bzip2 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-dejagnu TAGS-dejagnu
! maybe-TAGS-dejagnu:
  
! TAGS-dejagnu: \
!     configure-dejagnu 
! 	@[ -f ./dejagnu/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in dejagnu" ; \
! 	(cd dejagnu && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-diff TAGS-diff
! maybe-TAGS-diff:
  
! TAGS-diff: \
!     configure-diff 
! 	@[ -f ./diff/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in diff" ; \
! 	(cd diff && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-dosutils TAGS-dosutils
! maybe-TAGS-dosutils:
  
! TAGS-dosutils: \
!     configure-dosutils 
! 	@[ -f ./dosutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in dosutils" ; \
! 	(cd dosutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-etc TAGS-etc
! maybe-TAGS-etc:
  
! TAGS-etc: \
!     configure-etc 
! 	@[ -f ./etc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in etc" ; \
! 	(cd etc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-fastjar TAGS-fastjar
! maybe-TAGS-fastjar:
  
! TAGS-fastjar: \
!     configure-fastjar 
! 	@[ -f ./fastjar/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in fastjar" ; \
! 	(cd fastjar && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
- .PHONY: maybe-TAGS-fileutils TAGS-fileutils
- maybe-TAGS-fileutils:
  
! TAGS-fileutils: \
!     configure-fileutils 
! 	@[ -f ./fileutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in fileutils" ; \
! 	(cd fileutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-findutils TAGS-findutils
! maybe-TAGS-findutils:
  
! TAGS-findutils: \
!     configure-findutils 
! 	@[ -f ./findutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in findutils" ; \
! 	(cd findutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-find TAGS-find
! maybe-TAGS-find:
  
! TAGS-find: \
!     configure-find 
! 	@[ -f ./find/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in find" ; \
! 	(cd find && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
  .PHONY: maybe-TAGS-flex TAGS-flex
  maybe-TAGS-flex:
  
  TAGS-flex: \
      configure-flex 
--- 8416,8983 ----
  	          TAGS) \
  	  || exit 1
  
+ @endif find
  
! .PHONY: maybe-install-info-find install-info-find
! maybe-install-info-find:
! @if find
! maybe-install-info-find: install-info-find
  
! install-info-find: \
!     configure-find \
!     info-find 
! 	@[ -f ./find/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in find" ; \
! 	(cd find && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif find
  
! .PHONY: maybe-installcheck-find installcheck-find
! maybe-installcheck-find:
! @if find
! maybe-installcheck-find: installcheck-find
  
! installcheck-find: \
!     configure-find 
! 	@[ -f ./find/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in find" ; \
! 	(cd find && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif find
  
! .PHONY: maybe-mostlyclean-find mostlyclean-find
! maybe-mostlyclean-find:
! @if find
! maybe-mostlyclean-find: mostlyclean-find
  
! mostlyclean-find: 
! 	@[ -f ./find/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in find" ; \
! 	(cd find && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif find
  
! .PHONY: maybe-clean-find clean-find
! maybe-clean-find:
! @if find
! maybe-clean-find: clean-find
  
! clean-find: 
! 	@[ -f ./find/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in find" ; \
! 	(cd find && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif find
  
! .PHONY: maybe-distclean-find distclean-find
! maybe-distclean-find:
! @if find
! maybe-distclean-find: distclean-find
  
! distclean-find: 
! 	@[ -f ./find/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in find" ; \
! 	(cd find && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif find
  
! .PHONY: maybe-maintainer-clean-find maintainer-clean-find
! maybe-maintainer-clean-find:
! @if find
! maybe-maintainer-clean-find: maintainer-clean-find
  
! maintainer-clean-find: 
! 	@[ -f ./find/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in find" ; \
! 	(cd find && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif find
  
  
! .PHONY: configure-fixincludes maybe-configure-fixincludes
! maybe-configure-fixincludes:
! @if fixincludes
! maybe-configure-fixincludes: configure-fixincludes
! configure-fixincludes:
! 	@test ! -f fixincludes/Makefile || exit 0; \
! 	[ -d fixincludes ] || mkdir fixincludes; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in fixincludes; \
+ 	cd fixincludes || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/fixincludes"; \
+ 	    libsrcdir="$$s/fixincludes";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/fixincludes"; \
+ 	    libsrcdir="$$s/fixincludes";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif fixincludes
+ 
+ .PHONY: all-fixincludes maybe-all-fixincludes
+ maybe-all-fixincludes:
+ @if fixincludes
+ TARGET-fixincludes=all
+ maybe-all-fixincludes: all-fixincludes
+ all-fixincludes: configure-fixincludes
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd fixincludes && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-fixincludes))
! @endif fixincludes
! 
! .PHONY: check-fixincludes maybe-check-fixincludes
! maybe-check-fixincludes:
! @if fixincludes
! maybe-check-fixincludes: check-fixincludes
! 
! check-fixincludes:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd fixincludes && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif fixincludes
! 
! .PHONY: install-fixincludes maybe-install-fixincludes
! maybe-install-fixincludes:
! @if fixincludes
! maybe-install-fixincludes: install-fixincludes
! 
! install-fixincludes: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd fixincludes && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif fixincludes
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-fixincludes info-fixincludes
! maybe-info-fixincludes:
! @if fixincludes
! maybe-info-fixincludes: info-fixincludes
! 
! # fixincludes doesn't support info.
! info-fixincludes:
! 
! @endif fixincludes
! 
! .PHONY: maybe-dvi-fixincludes dvi-fixincludes
! maybe-dvi-fixincludes:
! @if fixincludes
! maybe-dvi-fixincludes: dvi-fixincludes
! 
! # fixincludes doesn't support dvi.
! dvi-fixincludes:
! 
! @endif fixincludes
! 
! .PHONY: maybe-html-fixincludes html-fixincludes
! maybe-html-fixincludes:
! @if fixincludes
! maybe-html-fixincludes: html-fixincludes
! 
! html-fixincludes: \
!     configure-fixincludes 
! 	@[ -f ./fixincludes/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in fixincludes" ; \
! 	(cd fixincludes && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif fixincludes
  
! .PHONY: maybe-TAGS-fixincludes TAGS-fixincludes
! maybe-TAGS-fixincludes:
! @if fixincludes
! maybe-TAGS-fixincludes: TAGS-fixincludes
  
! # fixincludes doesn't support TAGS.
! TAGS-fixincludes:
! 
! @endif fixincludes
! 
! .PHONY: maybe-install-info-fixincludes install-info-fixincludes
! maybe-install-info-fixincludes:
! @if fixincludes
! maybe-install-info-fixincludes: install-info-fixincludes
! 
! # fixincludes doesn't support install-info.
! install-info-fixincludes:
! 
! @endif fixincludes
! 
! .PHONY: maybe-installcheck-fixincludes installcheck-fixincludes
! maybe-installcheck-fixincludes:
! @if fixincludes
! maybe-installcheck-fixincludes: installcheck-fixincludes
! 
! # fixincludes doesn't support installcheck.
! installcheck-fixincludes:
! 
! @endif fixincludes
! 
! .PHONY: maybe-mostlyclean-fixincludes mostlyclean-fixincludes
! maybe-mostlyclean-fixincludes:
! @if fixincludes
! maybe-mostlyclean-fixincludes: mostlyclean-fixincludes
! 
! mostlyclean-fixincludes: 
! 	@[ -f ./fixincludes/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in fixincludes" ; \
! 	(cd fixincludes && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif fixincludes
  
! .PHONY: maybe-clean-fixincludes clean-fixincludes
! maybe-clean-fixincludes:
! @if fixincludes
! maybe-clean-fixincludes: clean-fixincludes
  
! clean-fixincludes: 
! 	@[ -f ./fixincludes/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in fixincludes" ; \
! 	(cd fixincludes && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
! 	  || exit 1
! 
! @endif fixincludes
! 
! .PHONY: maybe-distclean-fixincludes distclean-fixincludes
! maybe-distclean-fixincludes:
! @if fixincludes
! maybe-distclean-fixincludes: distclean-fixincludes
! 
! distclean-fixincludes: 
! 	@[ -f ./fixincludes/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	echo "Doing distclean in fixincludes" ; \
! 	(cd fixincludes && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
! 	  || exit 1
! 
! @endif fixincludes
! 
! .PHONY: maybe-maintainer-clean-fixincludes maintainer-clean-fixincludes
! maybe-maintainer-clean-fixincludes:
! @if fixincludes
! maybe-maintainer-clean-fixincludes: maintainer-clean-fixincludes
! 
! maintainer-clean-fixincludes: 
! 	@[ -f ./fixincludes/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	echo "Doing maintainer-clean in fixincludes" ; \
! 	(cd fixincludes && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
! 	  || exit 1
! 
! @endif fixincludes
! 
! 
! .PHONY: configure-flex maybe-configure-flex
! maybe-configure-flex:
! @if flex
! maybe-configure-flex: configure-flex
! configure-flex:
! 	@test ! -f flex/Makefile || exit 0; \
! 	[ -d flex ] || mkdir flex; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(HOST_EXPORTS) \
! 	echo Configuring in flex; \
! 	cd flex || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/flex"; \
! 	    libsrcdir="$$s/flex";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/flex"; \
! 	    libsrcdir="$$s/flex";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
! 	  || exit 1
! @endif flex
! 
! .PHONY: all-flex maybe-all-flex
! maybe-all-flex:
! @if flex
! TARGET-flex=all
! maybe-all-flex: all-flex
! all-flex: configure-flex
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd flex && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-flex))
! @endif flex
! 
! .PHONY: check-flex maybe-check-flex
! maybe-check-flex:
! @if flex
! maybe-check-flex: check-flex
! 
! # This module is only tested in a native toolchain.
! check-flex:
! 	@if [ '$(host)' = '$(target)' ] ; then \
! 	  r=`${PWD_COMMAND}`; export r; \
! 	  s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	  $(SET_LIB_PATH) \
! 	  $(HOST_EXPORTS) \
! 	  (cd flex && $(MAKE) $(FLAGS_TO_PASS)  check); \
! 	fi
! 
! @endif flex
! 
! .PHONY: install-flex maybe-install-flex
! maybe-install-flex:
! @if flex
! maybe-install-flex: install-flex
! 
! install-flex: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd flex && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif flex
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-flex info-flex
! maybe-info-flex:
! @if flex
! maybe-info-flex: info-flex
! 
! info-flex: \
!     configure-flex 
! 	@[ -f ./flex/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	echo "Doing info in flex" ; \
! 	(cd flex && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
! 	  || exit 1
! 
! @endif flex
! 
! .PHONY: maybe-dvi-flex dvi-flex
! maybe-dvi-flex:
! @if flex
! maybe-dvi-flex: dvi-flex
! 
! dvi-flex: \
!     configure-flex 
! 	@[ -f ./flex/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	echo "Doing dvi in flex" ; \
! 	(cd flex && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
! 	  || exit 1
! 
! @endif flex
! 
! .PHONY: maybe-html-flex html-flex
! maybe-html-flex:
! @if flex
! maybe-html-flex: html-flex
! 
! html-flex: \
!     configure-flex 
! 	@[ -f ./flex/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	echo "Doing html in flex" ; \
! 	(cd flex && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif flex
  
  .PHONY: maybe-TAGS-flex TAGS-flex
  maybe-TAGS-flex:
+ @if flex
+ maybe-TAGS-flex: TAGS-flex
  
  TAGS-flex: \
      configure-flex 
*************** TAGS-flex: \
*** 4977,4983 ****
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
  	echo "Doing TAGS in flex" ; \
--- 8985,8992 ----
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
  	echo "Doing TAGS in flex" ; \
*************** TAGS-flex: \
*** 4989,5207 ****
  	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-gas TAGS-gas
! maybe-TAGS-gas:
  
! TAGS-gas: \
!     configure-gas 
! 	@[ -f ./gas/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in gas" ; \
! 	(cd gas && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-gawk TAGS-gawk
! maybe-TAGS-gawk:
  
! TAGS-gawk: \
!     configure-gawk 
! 	@[ -f ./gawk/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in gawk" ; \
! 	(cd gawk && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-gettext TAGS-gettext
! maybe-TAGS-gettext:
  
! TAGS-gettext: \
!     configure-gettext 
! 	@[ -f ./gettext/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in gettext" ; \
! 	(cd gettext && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-gnuserv TAGS-gnuserv
! maybe-TAGS-gnuserv:
  
! TAGS-gnuserv: \
!     configure-gnuserv 
! 	@[ -f ./gnuserv/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in gnuserv" ; \
! 	(cd gnuserv && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-gprof TAGS-gprof
! maybe-TAGS-gprof:
  
! TAGS-gprof: \
!     configure-gprof 
! 	@[ -f ./gprof/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in gprof" ; \
! 	(cd gprof && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-gzip TAGS-gzip
! maybe-TAGS-gzip:
  
! TAGS-gzip: \
!     configure-gzip 
! 	@[ -f ./gzip/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in gzip" ; \
! 	(cd gzip && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
- .PHONY: maybe-TAGS-hello TAGS-hello
- maybe-TAGS-hello:
  
! TAGS-hello: \
!     configure-hello 
! 	@[ -f ./hello/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in hello" ; \
! 	(cd hello && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-indent TAGS-indent
! maybe-TAGS-indent:
  
! TAGS-indent: \
!     configure-indent 
! 	@[ -f ./indent/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in indent" ; \
! 	(cd indent && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-intl TAGS-intl
! maybe-TAGS-intl:
  
! TAGS-intl: \
!     configure-intl 
! 	@[ -f ./intl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in intl" ; \
! 	(cd intl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-tcl TAGS-tcl
! maybe-TAGS-tcl:
  
! TAGS-tcl: \
!     configure-tcl 
! 	@[ -f ./tcl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in tcl" ; \
! 	(cd tcl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 8998,9328 ----
  	          TAGS) \
  	  || exit 1
  
+ @endif flex
  
! .PHONY: maybe-install-info-flex install-info-flex
! maybe-install-info-flex:
! @if flex
! maybe-install-info-flex: install-info-flex
  
! install-info-flex: \
!     configure-flex \
!     info-flex 
! 	@[ -f ./flex/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in flex" ; \
! 	(cd flex && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif flex
  
! .PHONY: maybe-installcheck-flex installcheck-flex
! maybe-installcheck-flex:
! @if flex
! maybe-installcheck-flex: installcheck-flex
  
! installcheck-flex: \
!     configure-flex 
! 	@[ -f ./flex/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in flex" ; \
! 	(cd flex && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif flex
  
! .PHONY: maybe-mostlyclean-flex mostlyclean-flex
! maybe-mostlyclean-flex:
! @if flex
! maybe-mostlyclean-flex: mostlyclean-flex
  
! mostlyclean-flex: 
! 	@[ -f ./flex/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in flex" ; \
! 	(cd flex && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif flex
  
! .PHONY: maybe-clean-flex clean-flex
! maybe-clean-flex:
! @if flex
! maybe-clean-flex: clean-flex
  
! clean-flex: 
! 	@[ -f ./flex/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in flex" ; \
! 	(cd flex && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif flex
  
! .PHONY: maybe-distclean-flex distclean-flex
! maybe-distclean-flex:
! @if flex
! maybe-distclean-flex: distclean-flex
  
! distclean-flex: 
! 	@[ -f ./flex/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in flex" ; \
! 	(cd flex && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif flex
  
! .PHONY: maybe-maintainer-clean-flex maintainer-clean-flex
! maybe-maintainer-clean-flex:
! @if flex
! maybe-maintainer-clean-flex: maintainer-clean-flex
  
! maintainer-clean-flex: 
! 	@[ -f ./flex/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in flex" ; \
! 	(cd flex && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif flex
  
  
! .PHONY: configure-gas maybe-configure-gas
! maybe-configure-gas:
! @if gas
! maybe-configure-gas: configure-gas
! configure-gas:
! 	@test -f stage_last && exit 0; \
! 	test ! -f gas/Makefile || exit 0; \
! 	[ -d gas ] || mkdir gas; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(HOST_EXPORTS) \
! 	echo Configuring in gas; \
! 	cd gas || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/gas"; \
! 	    libsrcdir="$$s/gas";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/gas"; \
! 	    libsrcdir="$$s/gas";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
! 	  || exit 1
! @endif gas
! 
! .PHONY: all-gas maybe-all-gas
! maybe-all-gas:
! @if gas
! TARGET-gas=all
! maybe-all-gas: all-gas
! all-gas: configure-gas
! 	@test -f stage_last && exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd gas && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-gas))
! @endif gas
! 
! .PHONY: check-gas maybe-check-gas
! maybe-check-gas:
! @if gas
! maybe-check-gas: check-gas
! 
! check-gas:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd gas && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif gas
! 
! .PHONY: install-gas maybe-install-gas
! maybe-install-gas:
! @if gas
! maybe-install-gas: install-gas
! 
! install-gas: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd gas && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif gas
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-gas info-gas
! maybe-info-gas:
! @if gas
! maybe-info-gas: info-gas
! 
! info-gas: \
!     configure-gas 
! 	@[ -f ./gas/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in gas" ; \
! 	(cd gas && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif gas
  
! .PHONY: maybe-dvi-gas dvi-gas
! maybe-dvi-gas:
! @if gas
! maybe-dvi-gas: dvi-gas
  
! dvi-gas: \
!     configure-gas 
! 	@[ -f ./gas/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in gas" ; \
! 	(cd gas && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif gas
  
! .PHONY: maybe-html-gas html-gas
! maybe-html-gas:
! @if gas
! maybe-html-gas: html-gas
  
! html-gas: \
!     configure-gas 
! 	@[ -f ./gas/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in gas" ; \
! 	(cd gas && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif gas
  
! .PHONY: maybe-TAGS-gas TAGS-gas
! maybe-TAGS-gas:
! @if gas
! maybe-TAGS-gas: TAGS-gas
  
! TAGS-gas: \
!     configure-gas 
! 	@[ -f ./gas/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in gas" ; \
! 	(cd gas && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** TAGS-tcl: \
*** 5209,5427 ****
  	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-itcl TAGS-itcl
! maybe-TAGS-itcl:
  
! TAGS-itcl: \
!     configure-itcl 
! 	@[ -f ./itcl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in itcl" ; \
! 	(cd itcl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-ld TAGS-ld
! maybe-TAGS-ld:
  
! TAGS-ld: \
!     configure-ld 
! 	@[ -f ./ld/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in ld" ; \
! 	(cd ld && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-libgui TAGS-libgui
! maybe-TAGS-libgui:
  
! TAGS-libgui: \
!     configure-libgui 
! 	@[ -f ./libgui/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in libgui" ; \
! 	(cd libgui && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-libiberty TAGS-libiberty
! maybe-TAGS-libiberty:
  
! TAGS-libiberty: \
!     configure-libiberty 
! 	@[ -f ./libiberty/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in libiberty" ; \
! 	(cd libiberty && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-libtool TAGS-libtool
! maybe-TAGS-libtool:
  
! TAGS-libtool: \
!     configure-libtool 
! 	@[ -f ./libtool/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in libtool" ; \
! 	(cd libtool && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-m4 TAGS-m4
! maybe-TAGS-m4:
  
! TAGS-m4: \
!     configure-m4 
! 	@[ -f ./m4/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in m4" ; \
! 	(cd m4 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
- .PHONY: maybe-TAGS-make TAGS-make
- maybe-TAGS-make:
  
! TAGS-make: \
!     configure-make 
! 	@[ -f ./make/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in make" ; \
! 	(cd make && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-mmalloc TAGS-mmalloc
! maybe-TAGS-mmalloc:
  
! TAGS-mmalloc: \
!     configure-mmalloc 
! 	@[ -f ./mmalloc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in mmalloc" ; \
! 	(cd mmalloc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-patch TAGS-patch
! maybe-TAGS-patch:
  
! TAGS-patch: \
!     configure-patch 
! 	@[ -f ./patch/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in patch" ; \
! 	(cd patch && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-perl TAGS-perl
! maybe-TAGS-perl:
  
! TAGS-perl: \
!     configure-perl 
! 	@[ -f ./perl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in perl" ; \
! 	(cd perl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 9330,9660 ----
  	          TAGS) \
  	  || exit 1
  
+ @endif gas
  
! .PHONY: maybe-install-info-gas install-info-gas
! maybe-install-info-gas:
! @if gas
! maybe-install-info-gas: install-info-gas
  
! install-info-gas: \
!     configure-gas \
!     info-gas 
! 	@[ -f ./gas/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in gas" ; \
! 	(cd gas && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif gas
  
! .PHONY: maybe-installcheck-gas installcheck-gas
! maybe-installcheck-gas:
! @if gas
! maybe-installcheck-gas: installcheck-gas
  
! installcheck-gas: \
!     configure-gas 
! 	@[ -f ./gas/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in gas" ; \
! 	(cd gas && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif gas
  
! .PHONY: maybe-mostlyclean-gas mostlyclean-gas
! maybe-mostlyclean-gas:
! @if gas
! maybe-mostlyclean-gas: mostlyclean-gas
  
! mostlyclean-gas: 
! 	@[ -f ./gas/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in gas" ; \
! 	(cd gas && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif gas
  
! .PHONY: maybe-clean-gas clean-gas
! maybe-clean-gas:
! @if gas
! maybe-clean-gas: clean-gas
  
! clean-gas: 
! 	@[ -f ./gas/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in gas" ; \
! 	(cd gas && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif gas
  
! .PHONY: maybe-distclean-gas distclean-gas
! maybe-distclean-gas:
! @if gas
! maybe-distclean-gas: distclean-gas
  
! distclean-gas: 
! 	@[ -f ./gas/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in gas" ; \
! 	(cd gas && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif gas
  
! .PHONY: maybe-maintainer-clean-gas maintainer-clean-gas
! maybe-maintainer-clean-gas:
! @if gas
! maybe-maintainer-clean-gas: maintainer-clean-gas
  
! maintainer-clean-gas: 
! 	@[ -f ./gas/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in gas" ; \
! 	(cd gas && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif gas
  
  
! .PHONY: configure-gcc maybe-configure-gcc
! maybe-configure-gcc:
! @if gcc
! maybe-configure-gcc: configure-gcc
! configure-gcc:
! 	@test -f stage_last && exit 0; \
! 	test ! -f gcc/Makefile || exit 0; \
! 	[ -d gcc ] || mkdir gcc; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(HOST_EXPORTS) \
! 	echo Configuring in gcc; \
! 	cd gcc || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/gcc"; \
! 	    libsrcdir="$$s/gcc";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/gcc"; \
! 	    libsrcdir="$$s/gcc";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
! 	  || exit 1
! @endif gcc
! 
! .PHONY: all-gcc maybe-all-gcc
! maybe-all-gcc:
! @if gcc
! TARGET-gcc=`if [ -f gcc/stage_last ]; then echo quickstrap ; else echo all; fi`
! maybe-all-gcc: all-gcc
! all-gcc: configure-gcc
! 	@test -f stage_last && exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd gcc && $(MAKE) $(FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) \
! 	  $(TARGET-gcc))
! @endif gcc
! 
! .PHONY: check-gcc maybe-check-gcc
! maybe-check-gcc:
! @if gcc
! maybe-check-gcc: check-gcc
! 
! check-gcc:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd gcc && $(MAKE) $(FLAGS_TO_PASS)$(EXTRA_GCC_FLAGS) check)
! 
! @endif gcc
! 
! .PHONY: install-gcc maybe-install-gcc
! maybe-install-gcc:
! @if gcc
! maybe-install-gcc: install-gcc
! 
! install-gcc: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd gcc && $(MAKE) $(FLAGS_TO_PASS)$(EXTRA_GCC_FLAGS) install)
! 
! @endif gcc
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-gcc info-gcc
! maybe-info-gcc:
! @if gcc
! maybe-info-gcc: info-gcc
! 
! info-gcc: \
!     configure-gcc 
! 	@[ -f ./gcc/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in gcc" ; \
! 	(cd gcc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif gcc
  
! .PHONY: maybe-dvi-gcc dvi-gcc
! maybe-dvi-gcc:
! @if gcc
! maybe-dvi-gcc: dvi-gcc
  
! dvi-gcc: \
!     configure-gcc 
! 	@[ -f ./gcc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in gcc" ; \
! 	(cd gcc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif gcc
  
! .PHONY: maybe-html-gcc html-gcc
! maybe-html-gcc:
! @if gcc
! maybe-html-gcc: html-gcc
  
! html-gcc: \
!     configure-gcc 
! 	@[ -f ./gcc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in gcc" ; \
! 	(cd gcc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif gcc
  
! .PHONY: maybe-TAGS-gcc TAGS-gcc
! maybe-TAGS-gcc:
! @if gcc
! maybe-TAGS-gcc: TAGS-gcc
  
! TAGS-gcc: \
!     configure-gcc 
! 	@[ -f ./gcc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in gcc" ; \
! 	(cd gcc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** TAGS-perl: \
*** 5429,5647 ****
  	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-prms TAGS-prms
! maybe-TAGS-prms:
  
! TAGS-prms: \
!     configure-prms 
! 	@[ -f ./prms/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in prms" ; \
! 	(cd prms && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-rcs TAGS-rcs
! maybe-TAGS-rcs:
  
! TAGS-rcs: \
!     configure-rcs 
! 	@[ -f ./rcs/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in rcs" ; \
! 	(cd rcs && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-readline TAGS-readline
! maybe-TAGS-readline:
  
! TAGS-readline: \
!     configure-readline 
! 	@[ -f ./readline/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in readline" ; \
! 	(cd readline && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-release TAGS-release
! maybe-TAGS-release:
  
! TAGS-release: \
!     configure-release 
! 	@[ -f ./release/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in release" ; \
! 	(cd release && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-recode TAGS-recode
! maybe-TAGS-recode:
  
! TAGS-recode: \
!     configure-recode 
! 	@[ -f ./recode/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in recode" ; \
! 	(cd recode && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-sed TAGS-sed
! maybe-TAGS-sed:
  
! TAGS-sed: \
!     configure-sed 
! 	@[ -f ./sed/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in sed" ; \
! 	(cd sed && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
- .PHONY: maybe-TAGS-send-pr TAGS-send-pr
- maybe-TAGS-send-pr:
  
! TAGS-send-pr: \
!     configure-send-pr 
! 	@[ -f ./send-pr/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in send-pr" ; \
! 	(cd send-pr && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-shellutils TAGS-shellutils
! maybe-TAGS-shellutils:
  
! TAGS-shellutils: \
!     configure-shellutils 
! 	@[ -f ./shellutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in shellutils" ; \
! 	(cd shellutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-sid TAGS-sid
! maybe-TAGS-sid:
  
! TAGS-sid: \
!     configure-sid 
! 	@[ -f ./sid/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in sid" ; \
! 	(cd sid && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-sim TAGS-sim
! maybe-TAGS-sim:
  
! TAGS-sim: \
!     configure-sim 
! 	@[ -f ./sim/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in sim" ; \
! 	(cd sim && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 9662,9990 ----
  	          TAGS) \
  	  || exit 1
  
+ @endif gcc
  
! .PHONY: maybe-install-info-gcc install-info-gcc
! maybe-install-info-gcc:
! @if gcc
! maybe-install-info-gcc: install-info-gcc
  
! install-info-gcc: \
!     configure-gcc \
!     info-gcc 
! 	@[ -f ./gcc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in gcc" ; \
! 	(cd gcc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif gcc
  
! .PHONY: maybe-installcheck-gcc installcheck-gcc
! maybe-installcheck-gcc:
! @if gcc
! maybe-installcheck-gcc: installcheck-gcc
  
! installcheck-gcc: \
!     configure-gcc 
! 	@[ -f ./gcc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in gcc" ; \
! 	(cd gcc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif gcc
  
! .PHONY: maybe-mostlyclean-gcc mostlyclean-gcc
! maybe-mostlyclean-gcc:
! @if gcc
! maybe-mostlyclean-gcc: mostlyclean-gcc
  
! mostlyclean-gcc: 
! 	@[ -f ./gcc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in gcc" ; \
! 	(cd gcc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif gcc
  
! .PHONY: maybe-clean-gcc clean-gcc
! maybe-clean-gcc:
! @if gcc
! maybe-clean-gcc: clean-gcc
  
! clean-gcc: 
! 	@[ -f ./gcc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in gcc" ; \
! 	(cd gcc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif gcc
  
! .PHONY: maybe-distclean-gcc distclean-gcc
! maybe-distclean-gcc:
! @if gcc
! maybe-distclean-gcc: distclean-gcc
  
! distclean-gcc: 
! 	@[ -f ./gcc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in gcc" ; \
! 	(cd gcc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif gcc
  
! .PHONY: maybe-maintainer-clean-gcc maintainer-clean-gcc
! maybe-maintainer-clean-gcc:
! @if gcc
! maybe-maintainer-clean-gcc: maintainer-clean-gcc
  
! maintainer-clean-gcc: 
! 	@[ -f ./gcc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in gcc" ; \
! 	(cd gcc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif gcc
  
  
! .PHONY: configure-gawk maybe-configure-gawk
! maybe-configure-gawk:
! @if gawk
! maybe-configure-gawk: configure-gawk
! configure-gawk:
! 	@test ! -f gawk/Makefile || exit 0; \
! 	[ -d gawk ] || mkdir gawk; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in gawk; \
+ 	cd gawk || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/gawk"; \
+ 	    libsrcdir="$$s/gawk";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/gawk"; \
+ 	    libsrcdir="$$s/gawk";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif gawk
+ 
+ .PHONY: all-gawk maybe-all-gawk
+ maybe-all-gawk:
+ @if gawk
+ TARGET-gawk=all
+ maybe-all-gawk: all-gawk
+ all-gawk: configure-gawk
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd gawk && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-gawk))
! @endif gawk
! 
! .PHONY: check-gawk maybe-check-gawk
! maybe-check-gawk:
! @if gawk
! maybe-check-gawk: check-gawk
! 
! check-gawk:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd gawk && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif gawk
! 
! .PHONY: install-gawk maybe-install-gawk
! maybe-install-gawk:
! @if gawk
! maybe-install-gawk: install-gawk
! 
! install-gawk: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd gawk && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif gawk
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-gawk info-gawk
! maybe-info-gawk:
! @if gawk
! maybe-info-gawk: info-gawk
! 
! info-gawk: \
!     configure-gawk 
! 	@[ -f ./gawk/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in gawk" ; \
! 	(cd gawk && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif gawk
  
! .PHONY: maybe-dvi-gawk dvi-gawk
! maybe-dvi-gawk:
! @if gawk
! maybe-dvi-gawk: dvi-gawk
  
! dvi-gawk: \
!     configure-gawk 
! 	@[ -f ./gawk/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in gawk" ; \
! 	(cd gawk && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif gawk
  
! .PHONY: maybe-html-gawk html-gawk
! maybe-html-gawk:
! @if gawk
! maybe-html-gawk: html-gawk
  
! html-gawk: \
!     configure-gawk 
! 	@[ -f ./gawk/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in gawk" ; \
! 	(cd gawk && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif gawk
  
! .PHONY: maybe-TAGS-gawk TAGS-gawk
! maybe-TAGS-gawk:
! @if gawk
! maybe-TAGS-gawk: TAGS-gawk
  
! TAGS-gawk: \
!     configure-gawk 
! 	@[ -f ./gawk/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in gawk" ; \
! 	(cd gawk && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** TAGS-sim: \
*** 5649,5867 ****
  	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-tar TAGS-tar
! maybe-TAGS-tar:
  
! TAGS-tar: \
!     configure-tar 
! 	@[ -f ./tar/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in tar" ; \
! 	(cd tar && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-texinfo TAGS-texinfo
! maybe-TAGS-texinfo:
  
! TAGS-texinfo: \
!     configure-texinfo 
! 	@[ -f ./texinfo/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in texinfo" ; \
! 	(cd texinfo && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-textutils TAGS-textutils
! maybe-TAGS-textutils:
  
! TAGS-textutils: \
!     configure-textutils 
! 	@[ -f ./textutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in textutils" ; \
! 	(cd textutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-time TAGS-time
! maybe-TAGS-time:
  
! TAGS-time: \
!     configure-time 
! 	@[ -f ./time/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in time" ; \
! 	(cd time && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-uudecode TAGS-uudecode
! maybe-TAGS-uudecode:
  
! TAGS-uudecode: \
!     configure-uudecode 
! 	@[ -f ./uudecode/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in uudecode" ; \
! 	(cd uudecode && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-wdiff TAGS-wdiff
! maybe-TAGS-wdiff:
  
! TAGS-wdiff: \
!     configure-wdiff 
! 	@[ -f ./wdiff/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in wdiff" ; \
! 	(cd wdiff && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
- .PHONY: maybe-TAGS-zip TAGS-zip
- maybe-TAGS-zip:
  
! TAGS-zip: \
!     configure-zip 
! 	@[ -f ./zip/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in zip" ; \
! 	(cd zip && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-zlib TAGS-zlib
! maybe-TAGS-zlib:
  
! TAGS-zlib: \
!     configure-zlib 
! 	@[ -f ./zlib/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in zlib" ; \
! 	(cd zlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-gdb TAGS-gdb
! maybe-TAGS-gdb:
  
! TAGS-gdb: \
!     configure-gdb 
! 	@[ -f ./gdb/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in gdb" ; \
! 	(cd gdb && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-expect TAGS-expect
! maybe-TAGS-expect:
  
! TAGS-expect: \
!     configure-expect 
! 	@[ -f ./expect/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in expect" ; \
! 	(cd expect && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 9992,10320 ----
  	          TAGS) \
  	  || exit 1
  
+ @endif gawk
  
! .PHONY: maybe-install-info-gawk install-info-gawk
! maybe-install-info-gawk:
! @if gawk
! maybe-install-info-gawk: install-info-gawk
  
! install-info-gawk: \
!     configure-gawk \
!     info-gawk 
! 	@[ -f ./gawk/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in gawk" ; \
! 	(cd gawk && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif gawk
  
! .PHONY: maybe-installcheck-gawk installcheck-gawk
! maybe-installcheck-gawk:
! @if gawk
! maybe-installcheck-gawk: installcheck-gawk
  
! installcheck-gawk: \
!     configure-gawk 
! 	@[ -f ./gawk/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in gawk" ; \
! 	(cd gawk && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif gawk
  
! .PHONY: maybe-mostlyclean-gawk mostlyclean-gawk
! maybe-mostlyclean-gawk:
! @if gawk
! maybe-mostlyclean-gawk: mostlyclean-gawk
  
! mostlyclean-gawk: 
! 	@[ -f ./gawk/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in gawk" ; \
! 	(cd gawk && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif gawk
  
! .PHONY: maybe-clean-gawk clean-gawk
! maybe-clean-gawk:
! @if gawk
! maybe-clean-gawk: clean-gawk
  
! clean-gawk: 
! 	@[ -f ./gawk/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in gawk" ; \
! 	(cd gawk && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif gawk
  
! .PHONY: maybe-distclean-gawk distclean-gawk
! maybe-distclean-gawk:
! @if gawk
! maybe-distclean-gawk: distclean-gawk
  
! distclean-gawk: 
! 	@[ -f ./gawk/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in gawk" ; \
! 	(cd gawk && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif gawk
  
! .PHONY: maybe-maintainer-clean-gawk maintainer-clean-gawk
! maybe-maintainer-clean-gawk:
! @if gawk
! maybe-maintainer-clean-gawk: maintainer-clean-gawk
  
! maintainer-clean-gawk: 
! 	@[ -f ./gawk/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in gawk" ; \
! 	(cd gawk && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif gawk
  
  
! .PHONY: configure-gettext maybe-configure-gettext
! maybe-configure-gettext:
! @if gettext
! maybe-configure-gettext: configure-gettext
! configure-gettext:
! 	@test ! -f gettext/Makefile || exit 0; \
! 	[ -d gettext ] || mkdir gettext; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in gettext; \
+ 	cd gettext || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/gettext"; \
+ 	    libsrcdir="$$s/gettext";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/gettext"; \
+ 	    libsrcdir="$$s/gettext";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif gettext
+ 
+ .PHONY: all-gettext maybe-all-gettext
+ maybe-all-gettext:
+ @if gettext
+ TARGET-gettext=all
+ maybe-all-gettext: all-gettext
+ all-gettext: configure-gettext
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd gettext && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-gettext))
! @endif gettext
! 
! .PHONY: check-gettext maybe-check-gettext
! maybe-check-gettext:
! @if gettext
! maybe-check-gettext: check-gettext
! 
! check-gettext:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd gettext && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif gettext
! 
! .PHONY: install-gettext maybe-install-gettext
! maybe-install-gettext:
! @if gettext
! maybe-install-gettext: install-gettext
! 
! install-gettext: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd gettext && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif gettext
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-gettext info-gettext
! maybe-info-gettext:
! @if gettext
! maybe-info-gettext: info-gettext
! 
! info-gettext: \
!     configure-gettext 
! 	@[ -f ./gettext/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in gettext" ; \
! 	(cd gettext && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif gettext
  
! .PHONY: maybe-dvi-gettext dvi-gettext
! maybe-dvi-gettext:
! @if gettext
! maybe-dvi-gettext: dvi-gettext
  
! dvi-gettext: \
!     configure-gettext 
! 	@[ -f ./gettext/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in gettext" ; \
! 	(cd gettext && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif gettext
  
! .PHONY: maybe-html-gettext html-gettext
! maybe-html-gettext:
! @if gettext
! maybe-html-gettext: html-gettext
  
! html-gettext: \
!     configure-gettext 
! 	@[ -f ./gettext/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in gettext" ; \
! 	(cd gettext && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif gettext
  
! .PHONY: maybe-TAGS-gettext TAGS-gettext
! maybe-TAGS-gettext:
! @if gettext
! maybe-TAGS-gettext: TAGS-gettext
  
! TAGS-gettext: \
!     configure-gettext 
! 	@[ -f ./gettext/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in gettext" ; \
! 	(cd gettext && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** TAGS-expect: \
*** 5869,6068 ****
  	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-guile TAGS-guile
! maybe-TAGS-guile:
  
! TAGS-guile: \
!     configure-guile 
! 	@[ -f ./guile/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in guile" ; \
! 	(cd guile && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-tk TAGS-tk
! maybe-TAGS-tk:
  
! TAGS-tk: \
!     configure-tk 
! 	@[ -f ./tk/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in tk" ; \
! 	(cd tk && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-tix TAGS-tix
! maybe-TAGS-tix:
  
! TAGS-tix: \
!     configure-tix 
! 	@[ -f ./tix/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in tix" ; \
! 	(cd tix && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-libtermcap TAGS-libtermcap
! maybe-TAGS-libtermcap:
  
! TAGS-libtermcap: \
!     configure-libtermcap 
! 	@[ -f ./libtermcap/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in libtermcap" ; \
! 	(cd libtermcap && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-utils TAGS-utils
! maybe-TAGS-utils:
  
! TAGS-utils: \
!     configure-utils 
! 	@[ -f ./utils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in utils" ; \
! 	(cd utils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
  
! # Target modules.
  
! .PHONY: maybe-TAGS-target-libstdc++-v3 TAGS-target-libstdc++-v3
! maybe-TAGS-target-libstdc++-v3:
  
! TAGS-target-libstdc++-v3: \
!     configure-target-libstdc++-v3 
! 	@[ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing TAGS in $(TARGET_SUBDIR)/libstdc++-v3" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libstdc++-v3 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-target-newlib TAGS-target-newlib
! maybe-TAGS-target-newlib:
  
! TAGS-target-newlib: \
!     configure-target-newlib 
! 	@[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing TAGS in $(TARGET_SUBDIR)/newlib" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/newlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-target-libf2c TAGS-target-libf2c
! maybe-TAGS-target-libf2c:
  
! TAGS-target-libf2c: \
!     configure-target-libf2c 
! 	@[ -f $(TARGET_SUBDIR)/libf2c/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing TAGS in $(TARGET_SUBDIR)/libf2c" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libf2c && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-target-libobjc TAGS-target-libobjc
! maybe-TAGS-target-libobjc:
  
! TAGS-target-libobjc: \
!     configure-target-libobjc 
! 	@[ -f $(TARGET_SUBDIR)/libobjc/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing TAGS in $(TARGET_SUBDIR)/libobjc" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libobjc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 10322,10650 ----
  	          TAGS) \
  	  || exit 1
  
+ @endif gettext
  
! .PHONY: maybe-install-info-gettext install-info-gettext
! maybe-install-info-gettext:
! @if gettext
! maybe-install-info-gettext: install-info-gettext
  
! install-info-gettext: \
!     configure-gettext \
!     info-gettext 
! 	@[ -f ./gettext/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in gettext" ; \
! 	(cd gettext && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif gettext
  
! .PHONY: maybe-installcheck-gettext installcheck-gettext
! maybe-installcheck-gettext:
! @if gettext
! maybe-installcheck-gettext: installcheck-gettext
  
! installcheck-gettext: \
!     configure-gettext 
! 	@[ -f ./gettext/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in gettext" ; \
! 	(cd gettext && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
! 	  || exit 1
! 
! @endif gettext
! 
! .PHONY: maybe-mostlyclean-gettext mostlyclean-gettext
! maybe-mostlyclean-gettext:
! @if gettext
! maybe-mostlyclean-gettext: mostlyclean-gettext
! 
! mostlyclean-gettext: 
! 	@[ -f ./gettext/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	echo "Doing mostlyclean in gettext" ; \
! 	(cd gettext && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif gettext
  
! .PHONY: maybe-clean-gettext clean-gettext
! maybe-clean-gettext:
! @if gettext
! maybe-clean-gettext: clean-gettext
  
! clean-gettext: 
! 	@[ -f ./gettext/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in gettext" ; \
! 	(cd gettext && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif gettext
  
! .PHONY: maybe-distclean-gettext distclean-gettext
! maybe-distclean-gettext:
! @if gettext
! maybe-distclean-gettext: distclean-gettext
  
! distclean-gettext: 
! 	@[ -f ./gettext/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in gettext" ; \
! 	(cd gettext && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif gettext
  
! .PHONY: maybe-maintainer-clean-gettext maintainer-clean-gettext
! maybe-maintainer-clean-gettext:
! @if gettext
! maybe-maintainer-clean-gettext: maintainer-clean-gettext
  
! maintainer-clean-gettext: 
! 	@[ -f ./gettext/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in gettext" ; \
! 	(cd gettext && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif gettext
  
  
! .PHONY: configure-gnuserv maybe-configure-gnuserv
! maybe-configure-gnuserv:
! @if gnuserv
! maybe-configure-gnuserv: configure-gnuserv
! configure-gnuserv:
! 	@test ! -f gnuserv/Makefile || exit 0; \
! 	[ -d gnuserv ] || mkdir gnuserv; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(HOST_EXPORTS) \
! 	echo Configuring in gnuserv; \
! 	cd gnuserv || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/gnuserv"; \
! 	    libsrcdir="$$s/gnuserv";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/gnuserv"; \
! 	    libsrcdir="$$s/gnuserv";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
! 	  || exit 1
! @endif gnuserv
  
! .PHONY: all-gnuserv maybe-all-gnuserv
! maybe-all-gnuserv:
! @if gnuserv
! TARGET-gnuserv=all
! maybe-all-gnuserv: all-gnuserv
! all-gnuserv: configure-gnuserv
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd gnuserv && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-gnuserv))
! @endif gnuserv
  
! .PHONY: check-gnuserv maybe-check-gnuserv
! maybe-check-gnuserv:
! @if gnuserv
! maybe-check-gnuserv: check-gnuserv
! 
! check-gnuserv:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd gnuserv && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif gnuserv
! 
! .PHONY: install-gnuserv maybe-install-gnuserv
! maybe-install-gnuserv:
! @if gnuserv
! maybe-install-gnuserv: install-gnuserv
! 
! install-gnuserv: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd gnuserv && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif gnuserv
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-gnuserv info-gnuserv
! maybe-info-gnuserv:
! @if gnuserv
! maybe-info-gnuserv: info-gnuserv
! 
! info-gnuserv: \
!     configure-gnuserv 
! 	@[ -f ./gnuserv/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in gnuserv" ; \
! 	(cd gnuserv && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif gnuserv
  
! .PHONY: maybe-dvi-gnuserv dvi-gnuserv
! maybe-dvi-gnuserv:
! @if gnuserv
! maybe-dvi-gnuserv: dvi-gnuserv
  
! dvi-gnuserv: \
!     configure-gnuserv 
! 	@[ -f ./gnuserv/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in gnuserv" ; \
! 	(cd gnuserv && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif gnuserv
  
! .PHONY: maybe-html-gnuserv html-gnuserv
! maybe-html-gnuserv:
! @if gnuserv
! maybe-html-gnuserv: html-gnuserv
  
! html-gnuserv: \
!     configure-gnuserv 
! 	@[ -f ./gnuserv/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in gnuserv" ; \
! 	(cd gnuserv && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif gnuserv
  
! .PHONY: maybe-TAGS-gnuserv TAGS-gnuserv
! maybe-TAGS-gnuserv:
! @if gnuserv
! maybe-TAGS-gnuserv: TAGS-gnuserv
  
! TAGS-gnuserv: \
!     configure-gnuserv 
! 	@[ -f ./gnuserv/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in gnuserv" ; \
! 	(cd gnuserv && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** TAGS-target-libobjc: \
*** 6070,6288 ****
  	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-target-libtermcap TAGS-target-libtermcap
! maybe-TAGS-target-libtermcap:
  
! TAGS-target-libtermcap: \
!     configure-target-libtermcap 
! 	@[ -f $(TARGET_SUBDIR)/libtermcap/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing TAGS in $(TARGET_SUBDIR)/libtermcap" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libtermcap && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-target-winsup TAGS-target-winsup
! maybe-TAGS-target-winsup:
  
! TAGS-target-winsup: \
!     configure-target-winsup 
! 	@[ -f $(TARGET_SUBDIR)/winsup/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing TAGS in $(TARGET_SUBDIR)/winsup" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/winsup && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-target-libgloss TAGS-target-libgloss
! maybe-TAGS-target-libgloss:
  
! TAGS-target-libgloss: \
!     configure-target-libgloss 
! 	@[ -f $(TARGET_SUBDIR)/libgloss/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing TAGS in $(TARGET_SUBDIR)/libgloss" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libgloss && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-target-libiberty TAGS-target-libiberty
! maybe-TAGS-target-libiberty:
  
! TAGS-target-libiberty: \
!     configure-target-libiberty 
! 	@[ -f $(TARGET_SUBDIR)/libiberty/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing TAGS in $(TARGET_SUBDIR)/libiberty" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libiberty && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-target-gperf TAGS-target-gperf
! maybe-TAGS-target-gperf:
  
! TAGS-target-gperf: \
!     configure-target-gperf 
! 	@[ -f $(TARGET_SUBDIR)/gperf/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing TAGS in $(TARGET_SUBDIR)/gperf" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/gperf && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-target-examples TAGS-target-examples
! maybe-TAGS-target-examples:
  
! TAGS-target-examples: \
!     configure-target-examples 
! 	@[ -f $(TARGET_SUBDIR)/examples/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing TAGS in $(TARGET_SUBDIR)/examples" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/examples && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
- .PHONY: maybe-TAGS-target-libffi TAGS-target-libffi
- maybe-TAGS-target-libffi:
  
! TAGS-target-libffi: \
!     configure-target-libffi 
! 	@[ -f $(TARGET_SUBDIR)/libffi/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing TAGS in $(TARGET_SUBDIR)/libffi" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libffi && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-target-libjava TAGS-target-libjava
! maybe-TAGS-target-libjava:
  
! TAGS-target-libjava: \
!     configure-target-libjava 
! 	@[ -f $(TARGET_SUBDIR)/libjava/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing TAGS in $(TARGET_SUBDIR)/libjava" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libjava && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-target-zlib TAGS-target-zlib
! maybe-TAGS-target-zlib:
  
! TAGS-target-zlib: \
!     configure-target-zlib 
! 	@[ -f $(TARGET_SUBDIR)/zlib/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing TAGS in $(TARGET_SUBDIR)/zlib" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/zlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-target-boehm-gc TAGS-target-boehm-gc
! maybe-TAGS-target-boehm-gc:
  
! TAGS-target-boehm-gc: \
!     configure-target-boehm-gc 
! 	@[ -f $(TARGET_SUBDIR)/boehm-gc/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing TAGS in $(TARGET_SUBDIR)/boehm-gc" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/boehm-gc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 10652,10980 ----
  	          TAGS) \
  	  || exit 1
  
+ @endif gnuserv
  
! .PHONY: maybe-install-info-gnuserv install-info-gnuserv
! maybe-install-info-gnuserv:
! @if gnuserv
! maybe-install-info-gnuserv: install-info-gnuserv
  
! install-info-gnuserv: \
!     configure-gnuserv \
!     info-gnuserv 
! 	@[ -f ./gnuserv/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in gnuserv" ; \
! 	(cd gnuserv && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif gnuserv
  
! .PHONY: maybe-installcheck-gnuserv installcheck-gnuserv
! maybe-installcheck-gnuserv:
! @if gnuserv
! maybe-installcheck-gnuserv: installcheck-gnuserv
  
! installcheck-gnuserv: \
!     configure-gnuserv 
! 	@[ -f ./gnuserv/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in gnuserv" ; \
! 	(cd gnuserv && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif gnuserv
  
! .PHONY: maybe-mostlyclean-gnuserv mostlyclean-gnuserv
! maybe-mostlyclean-gnuserv:
! @if gnuserv
! maybe-mostlyclean-gnuserv: mostlyclean-gnuserv
  
! mostlyclean-gnuserv: 
! 	@[ -f ./gnuserv/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in gnuserv" ; \
! 	(cd gnuserv && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif gnuserv
  
! .PHONY: maybe-clean-gnuserv clean-gnuserv
! maybe-clean-gnuserv:
! @if gnuserv
! maybe-clean-gnuserv: clean-gnuserv
  
! clean-gnuserv: 
! 	@[ -f ./gnuserv/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in gnuserv" ; \
! 	(cd gnuserv && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif gnuserv
  
! .PHONY: maybe-distclean-gnuserv distclean-gnuserv
! maybe-distclean-gnuserv:
! @if gnuserv
! maybe-distclean-gnuserv: distclean-gnuserv
  
! distclean-gnuserv: 
! 	@[ -f ./gnuserv/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in gnuserv" ; \
! 	(cd gnuserv && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif gnuserv
  
! .PHONY: maybe-maintainer-clean-gnuserv maintainer-clean-gnuserv
! maybe-maintainer-clean-gnuserv:
! @if gnuserv
! maybe-maintainer-clean-gnuserv: maintainer-clean-gnuserv
  
! maintainer-clean-gnuserv: 
! 	@[ -f ./gnuserv/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in gnuserv" ; \
! 	(cd gnuserv && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif gnuserv
  
  
! .PHONY: configure-gprof maybe-configure-gprof
! maybe-configure-gprof:
! @if gprof
! maybe-configure-gprof: configure-gprof
! configure-gprof:
! 	@test ! -f gprof/Makefile || exit 0; \
! 	[ -d gprof ] || mkdir gprof; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in gprof; \
+ 	cd gprof || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/gprof"; \
+ 	    libsrcdir="$$s/gprof";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/gprof"; \
+ 	    libsrcdir="$$s/gprof";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif gprof
+ 
+ .PHONY: all-gprof maybe-all-gprof
+ maybe-all-gprof:
+ @if gprof
+ TARGET-gprof=all
+ maybe-all-gprof: all-gprof
+ all-gprof: configure-gprof
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd gprof && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-gprof))
! @endif gprof
! 
! .PHONY: check-gprof maybe-check-gprof
! maybe-check-gprof:
! @if gprof
! maybe-check-gprof: check-gprof
! 
! check-gprof:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd gprof && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif gprof
! 
! .PHONY: install-gprof maybe-install-gprof
! maybe-install-gprof:
! @if gprof
! maybe-install-gprof: install-gprof
! 
! install-gprof: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd gprof && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif gprof
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-gprof info-gprof
! maybe-info-gprof:
! @if gprof
! maybe-info-gprof: info-gprof
! 
! info-gprof: \
!     configure-gprof 
! 	@[ -f ./gprof/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in gprof" ; \
! 	(cd gprof && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif gprof
  
! .PHONY: maybe-dvi-gprof dvi-gprof
! maybe-dvi-gprof:
! @if gprof
! maybe-dvi-gprof: dvi-gprof
  
! dvi-gprof: \
!     configure-gprof 
! 	@[ -f ./gprof/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in gprof" ; \
! 	(cd gprof && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif gprof
  
! .PHONY: maybe-html-gprof html-gprof
! maybe-html-gprof:
! @if gprof
! maybe-html-gprof: html-gprof
  
! html-gprof: \
!     configure-gprof 
! 	@[ -f ./gprof/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in gprof" ; \
! 	(cd gprof && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif gprof
  
! .PHONY: maybe-TAGS-gprof TAGS-gprof
! maybe-TAGS-gprof:
! @if gprof
! maybe-TAGS-gprof: TAGS-gprof
  
! TAGS-gprof: \
!     configure-gprof 
! 	@[ -f ./gprof/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in gprof" ; \
! 	(cd gprof && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** TAGS-target-boehm-gc: \
*** 6290,6607 ****
  	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-target-qthreads TAGS-target-qthreads
! maybe-TAGS-target-qthreads:
  
! TAGS-target-qthreads: \
!     configure-target-qthreads 
! 	@[ -f $(TARGET_SUBDIR)/qthreads/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing TAGS in $(TARGET_SUBDIR)/qthreads" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/qthreads && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
! .PHONY: maybe-TAGS-target-rda TAGS-target-rda
! maybe-TAGS-target-rda:
  
! TAGS-target-rda: \
!     configure-target-rda 
! 	@[ -f $(TARGET_SUBDIR)/rda/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing TAGS in $(TARGET_SUBDIR)/rda" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/rda && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
  
  
! .PHONY: do-install-info
! do-install-info: install-info-host install-info-target
  
! .PHONY: install-info-host
! install-info-host: maybe-install-info-gcc  \
!     maybe-install-info-ash \
!     maybe-install-info-autoconf \
!     maybe-install-info-automake \
!     maybe-install-info-bash \
!     maybe-install-info-bfd \
!     maybe-install-info-opcodes \
!     maybe-install-info-binutils \
!     maybe-install-info-bison \
!     maybe-install-info-byacc \
!     maybe-install-info-bzip2 \
!     maybe-install-info-dejagnu \
!     maybe-install-info-diff \
!     maybe-install-info-dosutils \
!     maybe-install-info-etc \
!     maybe-install-info-fastjar \
!     maybe-install-info-fileutils \
!     maybe-install-info-findutils \
!     maybe-install-info-find \
!     maybe-install-info-flex \
!     maybe-install-info-gas \
!     maybe-install-info-gawk \
!     maybe-install-info-gettext \
!     maybe-install-info-gnuserv \
!     maybe-install-info-gprof \
!     maybe-install-info-gzip \
!     maybe-install-info-hello \
!     maybe-install-info-indent \
!     maybe-install-info-intl \
!     maybe-install-info-tcl \
!     maybe-install-info-itcl \
!     maybe-install-info-ld \
!     maybe-install-info-libgui \
!     maybe-install-info-libiberty \
!     maybe-install-info-libtool \
!     maybe-install-info-m4 \
!     maybe-install-info-make \
!     maybe-install-info-mmalloc \
!     maybe-install-info-patch \
!     maybe-install-info-perl \
!     maybe-install-info-prms \
!     maybe-install-info-rcs \
!     maybe-install-info-readline \
!     maybe-install-info-release \
!     maybe-install-info-recode \
!     maybe-install-info-sed \
!     maybe-install-info-send-pr \
!     maybe-install-info-shellutils \
!     maybe-install-info-sid \
!     maybe-install-info-sim \
!     maybe-install-info-tar \
!     maybe-install-info-texinfo \
!     maybe-install-info-textutils \
!     maybe-install-info-time \
!     maybe-install-info-uudecode \
!     maybe-install-info-wdiff \
!     maybe-install-info-zip \
!     maybe-install-info-zlib \
!     maybe-install-info-gdb \
!     maybe-install-info-expect \
!     maybe-install-info-guile \
!     maybe-install-info-tk \
!     maybe-install-info-tix \
!     maybe-install-info-libtermcap \
!     maybe-install-info-utils
  
! .PHONY: install-info-target
! install-info-target:  \
!     maybe-install-info-target-libstdc++-v3 \
!     maybe-install-info-target-newlib \
!     maybe-install-info-target-libf2c \
!     maybe-install-info-target-libobjc \
!     maybe-install-info-target-libtermcap \
!     maybe-install-info-target-winsup \
!     maybe-install-info-target-libgloss \
!     maybe-install-info-target-libiberty \
!     maybe-install-info-target-gperf \
!     maybe-install-info-target-examples \
!     maybe-install-info-target-libffi \
!     maybe-install-info-target-libjava \
!     maybe-install-info-target-zlib \
!     maybe-install-info-target-boehm-gc \
!     maybe-install-info-target-qthreads \
!     maybe-install-info-target-rda
  
! # GCC, the eternal special case
! .PHONY: maybe-install-info-gcc install-info-gcc
! maybe-install-info-gcc:
! install-info-gcc: \
!     configure-gcc \
!     info-gcc 
! 	@[ -f ./gcc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_GCC_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in gcc" ; \
! 	(cd gcc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
! # Host modules.
  
! .PHONY: maybe-install-info-ash install-info-ash
! maybe-install-info-ash:
  
! install-info-ash: \
!     configure-ash \
!     info-ash 
! 	@[ -f ./ash/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in ash" ; \
! 	(cd ash && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-autoconf install-info-autoconf
! maybe-install-info-autoconf:
  
! install-info-autoconf: \
!     configure-autoconf \
!     info-autoconf 
! 	@[ -f ./autoconf/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in autoconf" ; \
! 	(cd autoconf && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
- .PHONY: maybe-install-info-automake install-info-automake
- maybe-install-info-automake:
  
! install-info-automake: \
!     configure-automake \
!     info-automake 
! 	@[ -f ./automake/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in automake" ; \
! 	(cd automake && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-bash install-info-bash
! maybe-install-info-bash:
  
! install-info-bash: \
!     configure-bash \
!     info-bash 
! 	@[ -f ./bash/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in bash" ; \
! 	(cd bash && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-bfd install-info-bfd
! maybe-install-info-bfd:
  
! install-info-bfd: \
!     configure-bfd \
!     info-bfd 
! 	@[ -f ./bfd/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in bfd" ; \
! 	(cd bfd && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-opcodes install-info-opcodes
! maybe-install-info-opcodes:
  
! install-info-opcodes: \
!     configure-opcodes \
!     info-opcodes 
! 	@[ -f ./opcodes/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in opcodes" ; \
! 	(cd opcodes && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-binutils install-info-binutils
! maybe-install-info-binutils:
  
! install-info-binutils: \
!     configure-binutils \
!     info-binutils 
! 	@[ -f ./binutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in binutils" ; \
! 	(cd binutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 10982,11337 ----
  	          TAGS) \
  	  || exit 1
  
+ @endif gprof
  
! .PHONY: maybe-install-info-gprof install-info-gprof
! maybe-install-info-gprof:
! @if gprof
! maybe-install-info-gprof: install-info-gprof
  
! install-info-gprof: \
!     configure-gprof \
!     info-gprof 
! 	@[ -f ./gprof/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in gprof" ; \
! 	(cd gprof && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif gprof
  
! .PHONY: maybe-installcheck-gprof installcheck-gprof
! maybe-installcheck-gprof:
! @if gprof
! maybe-installcheck-gprof: installcheck-gprof
  
! installcheck-gprof: \
!     configure-gprof 
! 	@[ -f ./gprof/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in gprof" ; \
! 	(cd gprof && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif gprof
  
+ .PHONY: maybe-mostlyclean-gprof mostlyclean-gprof
+ maybe-mostlyclean-gprof:
+ @if gprof
+ maybe-mostlyclean-gprof: mostlyclean-gprof
  
! mostlyclean-gprof: 
! 	@[ -f ./gprof/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	echo "Doing mostlyclean in gprof" ; \
! 	(cd gprof && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
! 	  || exit 1
  
! @endif gprof
  
! .PHONY: maybe-clean-gprof clean-gprof
! maybe-clean-gprof:
! @if gprof
! maybe-clean-gprof: clean-gprof
  
! clean-gprof: 
! 	@[ -f ./gprof/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in gprof" ; \
! 	(cd gprof && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
! @endif gprof
  
! .PHONY: maybe-distclean-gprof distclean-gprof
! maybe-distclean-gprof:
! @if gprof
! maybe-distclean-gprof: distclean-gprof
  
! distclean-gprof: 
! 	@[ -f ./gprof/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in gprof" ; \
! 	(cd gprof && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif gprof
  
! .PHONY: maybe-maintainer-clean-gprof maintainer-clean-gprof
! maybe-maintainer-clean-gprof:
! @if gprof
! maybe-maintainer-clean-gprof: maintainer-clean-gprof
  
! maintainer-clean-gprof: 
! 	@[ -f ./gprof/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in gprof" ; \
! 	(cd gprof && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif gprof
  
  
! .PHONY: configure-gzip maybe-configure-gzip
! maybe-configure-gzip:
! @if gzip
! maybe-configure-gzip: configure-gzip
! configure-gzip:
! 	@test ! -f gzip/Makefile || exit 0; \
! 	[ -d gzip ] || mkdir gzip; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in gzip; \
+ 	cd gzip || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/gzip"; \
+ 	    libsrcdir="$$s/gzip";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/gzip"; \
+ 	    libsrcdir="$$s/gzip";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif gzip
+ 
+ .PHONY: all-gzip maybe-all-gzip
+ maybe-all-gzip:
+ @if gzip
+ TARGET-gzip=all
+ maybe-all-gzip: all-gzip
+ all-gzip: configure-gzip
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd gzip && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-gzip))
! @endif gzip
! 
! .PHONY: check-gzip maybe-check-gzip
! maybe-check-gzip:
! @if gzip
! maybe-check-gzip: check-gzip
! 
! check-gzip:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd gzip && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif gzip
! 
! .PHONY: install-gzip maybe-install-gzip
! maybe-install-gzip:
! @if gzip
! maybe-install-gzip: install-gzip
! 
! install-gzip: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd gzip && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif gzip
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-gzip info-gzip
! maybe-info-gzip:
! @if gzip
! maybe-info-gzip: info-gzip
! 
! info-gzip: \
!     configure-gzip 
! 	@[ -f ./gzip/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in gzip" ; \
! 	(cd gzip && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif gzip
  
! .PHONY: maybe-dvi-gzip dvi-gzip
! maybe-dvi-gzip:
! @if gzip
! maybe-dvi-gzip: dvi-gzip
  
! dvi-gzip: \
!     configure-gzip 
! 	@[ -f ./gzip/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in gzip" ; \
! 	(cd gzip && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif gzip
  
! .PHONY: maybe-html-gzip html-gzip
! maybe-html-gzip:
! @if gzip
! maybe-html-gzip: html-gzip
  
! html-gzip: \
!     configure-gzip 
! 	@[ -f ./gzip/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in gzip" ; \
! 	(cd gzip && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif gzip
  
! .PHONY: maybe-TAGS-gzip TAGS-gzip
! maybe-TAGS-gzip:
! @if gzip
! maybe-TAGS-gzip: TAGS-gzip
  
! TAGS-gzip: \
!     configure-gzip 
! 	@[ -f ./gzip/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in gzip" ; \
! 	(cd gzip && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif gzip
  
! .PHONY: maybe-install-info-gzip install-info-gzip
! maybe-install-info-gzip:
! @if gzip
! maybe-install-info-gzip: install-info-gzip
  
! install-info-gzip: \
!     configure-gzip \
!     info-gzip 
! 	@[ -f ./gzip/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in gzip" ; \
! 	(cd gzip && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** install-info-binutils: \
*** 6609,6837 ****
  	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-bison install-info-bison
! maybe-install-info-bison:
  
! install-info-bison: \
!     configure-bison \
!     info-bison 
! 	@[ -f ./bison/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in bison" ; \
! 	(cd bison && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-byacc install-info-byacc
! maybe-install-info-byacc:
  
! install-info-byacc: \
!     configure-byacc \
!     info-byacc 
! 	@[ -f ./byacc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in byacc" ; \
! 	(cd byacc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-bzip2 install-info-bzip2
! maybe-install-info-bzip2:
  
! install-info-bzip2: \
!     configure-bzip2 \
!     info-bzip2 
! 	@[ -f ./bzip2/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in bzip2" ; \
! 	(cd bzip2 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-dejagnu install-info-dejagnu
! maybe-install-info-dejagnu:
  
! install-info-dejagnu: \
!     configure-dejagnu \
!     info-dejagnu 
! 	@[ -f ./dejagnu/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in dejagnu" ; \
! 	(cd dejagnu && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-diff install-info-diff
! maybe-install-info-diff:
  
! install-info-diff: \
!     configure-diff \
!     info-diff 
! 	@[ -f ./diff/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in diff" ; \
! 	(cd diff && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
- .PHONY: maybe-install-info-dosutils install-info-dosutils
- maybe-install-info-dosutils:
  
! install-info-dosutils: \
!     configure-dosutils \
!     info-dosutils 
! 	@[ -f ./dosutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in dosutils" ; \
! 	(cd dosutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-etc install-info-etc
! maybe-install-info-etc:
  
! install-info-etc: \
!     configure-etc \
!     info-etc 
! 	@[ -f ./etc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in etc" ; \
! 	(cd etc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-fastjar install-info-fastjar
! maybe-install-info-fastjar:
  
! install-info-fastjar: \
!     configure-fastjar \
!     info-fastjar 
! 	@[ -f ./fastjar/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in fastjar" ; \
! 	(cd fastjar && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-fileutils install-info-fileutils
! maybe-install-info-fileutils:
  
! install-info-fileutils: \
!     configure-fileutils \
!     info-fileutils 
! 	@[ -f ./fileutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in fileutils" ; \
! 	(cd fileutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-findutils install-info-findutils
! maybe-install-info-findutils:
  
! install-info-findutils: \
!     configure-findutils \
!     info-findutils 
! 	@[ -f ./findutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in findutils" ; \
! 	(cd findutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 11339,11667 ----
  	          install-info) \
  	  || exit 1
  
+ @endif gzip
  
! .PHONY: maybe-installcheck-gzip installcheck-gzip
! maybe-installcheck-gzip:
! @if gzip
! maybe-installcheck-gzip: installcheck-gzip
  
! installcheck-gzip: \
!     configure-gzip 
! 	@[ -f ./gzip/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in gzip" ; \
! 	(cd gzip && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif gzip
  
! .PHONY: maybe-mostlyclean-gzip mostlyclean-gzip
! maybe-mostlyclean-gzip:
! @if gzip
! maybe-mostlyclean-gzip: mostlyclean-gzip
  
! mostlyclean-gzip: 
! 	@[ -f ./gzip/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in gzip" ; \
! 	(cd gzip && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif gzip
  
! .PHONY: maybe-clean-gzip clean-gzip
! maybe-clean-gzip:
! @if gzip
! maybe-clean-gzip: clean-gzip
  
! clean-gzip: 
! 	@[ -f ./gzip/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in gzip" ; \
! 	(cd gzip && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif gzip
  
! .PHONY: maybe-distclean-gzip distclean-gzip
! maybe-distclean-gzip:
! @if gzip
! maybe-distclean-gzip: distclean-gzip
  
! distclean-gzip: 
! 	@[ -f ./gzip/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in gzip" ; \
! 	(cd gzip && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif gzip
  
! .PHONY: maybe-maintainer-clean-gzip maintainer-clean-gzip
! maybe-maintainer-clean-gzip:
! @if gzip
! maybe-maintainer-clean-gzip: maintainer-clean-gzip
  
! maintainer-clean-gzip: 
! 	@[ -f ./gzip/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in gzip" ; \
! 	(cd gzip && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif gzip
  
  
! .PHONY: configure-hello maybe-configure-hello
! maybe-configure-hello:
! @if hello
! maybe-configure-hello: configure-hello
! configure-hello:
! 	@test ! -f hello/Makefile || exit 0; \
! 	[ -d hello ] || mkdir hello; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in hello; \
+ 	cd hello || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/hello"; \
+ 	    libsrcdir="$$s/hello";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/hello"; \
+ 	    libsrcdir="$$s/hello";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif hello
+ 
+ .PHONY: all-hello maybe-all-hello
+ maybe-all-hello:
+ @if hello
+ TARGET-hello=all
+ maybe-all-hello: all-hello
+ all-hello: configure-hello
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd hello && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-hello))
! @endif hello
! 
! .PHONY: check-hello maybe-check-hello
! maybe-check-hello:
! @if hello
! maybe-check-hello: check-hello
! 
! check-hello:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd hello && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif hello
! 
! .PHONY: install-hello maybe-install-hello
! maybe-install-hello:
! @if hello
! maybe-install-hello: install-hello
! 
! install-hello: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd hello && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif hello
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-hello info-hello
! maybe-info-hello:
! @if hello
! maybe-info-hello: info-hello
! 
! info-hello: \
!     configure-hello 
! 	@[ -f ./hello/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in hello" ; \
! 	(cd hello && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif hello
  
! .PHONY: maybe-dvi-hello dvi-hello
! maybe-dvi-hello:
! @if hello
! maybe-dvi-hello: dvi-hello
  
! dvi-hello: \
!     configure-hello 
! 	@[ -f ./hello/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in hello" ; \
! 	(cd hello && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif hello
  
! .PHONY: maybe-html-hello html-hello
! maybe-html-hello:
! @if hello
! maybe-html-hello: html-hello
  
! html-hello: \
!     configure-hello 
! 	@[ -f ./hello/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in hello" ; \
! 	(cd hello && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif hello
  
! .PHONY: maybe-TAGS-hello TAGS-hello
! maybe-TAGS-hello:
! @if hello
! maybe-TAGS-hello: TAGS-hello
  
! TAGS-hello: \
!     configure-hello 
! 	@[ -f ./hello/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in hello" ; \
! 	(cd hello && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif hello
  
! .PHONY: maybe-install-info-hello install-info-hello
! maybe-install-info-hello:
! @if hello
! maybe-install-info-hello: install-info-hello
  
! install-info-hello: \
!     configure-hello \
!     info-hello 
! 	@[ -f ./hello/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in hello" ; \
! 	(cd hello && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** install-info-findutils: \
*** 6839,7054 ****
  	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-find install-info-find
! maybe-install-info-find:
  
! install-info-find: \
!     configure-find \
!     info-find 
! 	@[ -f ./find/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in find" ; \
! 	(cd find && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-flex install-info-flex
! maybe-install-info-flex:
  
! install-info-flex: \
!     configure-flex \
!     info-flex 
! 	@[ -f ./flex/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in flex" ; \
! 	(cd flex && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-gas install-info-gas
! maybe-install-info-gas:
  
! install-info-gas: \
!     configure-gas \
!     info-gas 
! 	@[ -f ./gas/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in gas" ; \
! 	(cd gas && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-gawk install-info-gawk
! maybe-install-info-gawk:
  
! install-info-gawk: \
!     configure-gawk \
!     info-gawk 
! 	@[ -f ./gawk/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in gawk" ; \
! 	(cd gawk && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-gettext install-info-gettext
! maybe-install-info-gettext:
  
! install-info-gettext: \
!     configure-gettext \
!     info-gettext 
! 	@[ -f ./gettext/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in gettext" ; \
! 	(cd gettext && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
- .PHONY: maybe-install-info-gnuserv install-info-gnuserv
- maybe-install-info-gnuserv:
  
! install-info-gnuserv: \
!     configure-gnuserv \
!     info-gnuserv 
! 	@[ -f ./gnuserv/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in gnuserv" ; \
! 	(cd gnuserv && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-gprof install-info-gprof
! maybe-install-info-gprof:
  
! install-info-gprof: \
!     configure-gprof \
!     info-gprof 
! 	@[ -f ./gprof/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in gprof" ; \
! 	(cd gprof && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-gzip install-info-gzip
! maybe-install-info-gzip:
  
! install-info-gzip: \
!     configure-gzip \
!     info-gzip 
! 	@[ -f ./gzip/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in gzip" ; \
! 	(cd gzip && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-hello install-info-hello
! maybe-install-info-hello:
  
! install-info-hello: \
!     configure-hello \
!     info-hello 
! 	@[ -f ./hello/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in hello" ; \
! 	(cd hello && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
  .PHONY: maybe-install-info-indent install-info-indent
  maybe-install-info-indent:
  
  install-info-indent: \
      configure-indent \
--- 11669,11983 ----
  	          install-info) \
  	  || exit 1
  
+ @endif hello
  
! .PHONY: maybe-installcheck-hello installcheck-hello
! maybe-installcheck-hello:
! @if hello
! maybe-installcheck-hello: installcheck-hello
  
! installcheck-hello: \
!     configure-hello 
! 	@[ -f ./hello/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in hello" ; \
! 	(cd hello && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif hello
  
! .PHONY: maybe-mostlyclean-hello mostlyclean-hello
! maybe-mostlyclean-hello:
! @if hello
! maybe-mostlyclean-hello: mostlyclean-hello
  
! mostlyclean-hello: 
! 	@[ -f ./hello/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in hello" ; \
! 	(cd hello && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif hello
  
! .PHONY: maybe-clean-hello clean-hello
! maybe-clean-hello:
! @if hello
! maybe-clean-hello: clean-hello
  
! clean-hello: 
! 	@[ -f ./hello/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in hello" ; \
! 	(cd hello && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif hello
  
! .PHONY: maybe-distclean-hello distclean-hello
! maybe-distclean-hello:
! @if hello
! maybe-distclean-hello: distclean-hello
  
! distclean-hello: 
! 	@[ -f ./hello/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in hello" ; \
! 	(cd hello && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif hello
  
! .PHONY: maybe-maintainer-clean-hello maintainer-clean-hello
! maybe-maintainer-clean-hello:
! @if hello
! maybe-maintainer-clean-hello: maintainer-clean-hello
  
! maintainer-clean-hello: 
! 	@[ -f ./hello/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in hello" ; \
! 	(cd hello && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif hello
  
  
! .PHONY: configure-indent maybe-configure-indent
! maybe-configure-indent:
! @if indent
! maybe-configure-indent: configure-indent
! configure-indent:
! 	@test ! -f indent/Makefile || exit 0; \
! 	[ -d indent ] || mkdir indent; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in indent; \
+ 	cd indent || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/indent"; \
+ 	    libsrcdir="$$s/indent";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/indent"; \
+ 	    libsrcdir="$$s/indent";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif indent
+ 
+ .PHONY: all-indent maybe-all-indent
+ maybe-all-indent:
+ @if indent
+ TARGET-indent=all
+ maybe-all-indent: all-indent
+ all-indent: configure-indent
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd indent && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-indent))
! @endif indent
! 
! .PHONY: check-indent maybe-check-indent
! maybe-check-indent:
! @if indent
! maybe-check-indent: check-indent
! 
! check-indent:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd indent && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif indent
! 
! .PHONY: install-indent maybe-install-indent
! maybe-install-indent:
! @if indent
! maybe-install-indent: install-indent
! 
! install-indent: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd indent && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif indent
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-indent info-indent
! maybe-info-indent:
! @if indent
! maybe-info-indent: info-indent
! 
! info-indent: \
!     configure-indent 
! 	@[ -f ./indent/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in indent" ; \
! 	(cd indent && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif indent
  
! .PHONY: maybe-dvi-indent dvi-indent
! maybe-dvi-indent:
! @if indent
! maybe-dvi-indent: dvi-indent
  
! dvi-indent: \
!     configure-indent 
! 	@[ -f ./indent/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in indent" ; \
! 	(cd indent && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif indent
  
! .PHONY: maybe-html-indent html-indent
! maybe-html-indent:
! @if indent
! maybe-html-indent: html-indent
  
! html-indent: \
!     configure-indent 
! 	@[ -f ./indent/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in indent" ; \
! 	(cd indent && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif indent
  
! .PHONY: maybe-TAGS-indent TAGS-indent
! maybe-TAGS-indent:
! @if indent
! maybe-TAGS-indent: TAGS-indent
  
! TAGS-indent: \
!     configure-indent 
! 	@[ -f ./indent/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in indent" ; \
! 	(cd indent && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif indent
  
  .PHONY: maybe-install-info-indent install-info-indent
  maybe-install-info-indent:
+ @if indent
+ maybe-install-info-indent: install-info-indent
  
  install-info-indent: \
      configure-indent \
*************** install-info-indent: \
*** 7057,7063 ****
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
  	echo "Doing install-info in indent" ; \
--- 11986,11993 ----
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
  	echo "Doing install-info in indent" ; \
*************** install-info-indent: \
*** 7069,7297 ****
  	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-intl install-info-intl
! maybe-install-info-intl:
  
! install-info-intl: \
!     configure-intl \
!     info-intl 
! 	@[ -f ./intl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in intl" ; \
! 	(cd intl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-tcl install-info-tcl
! maybe-install-info-tcl:
  
! install-info-tcl: \
!     configure-tcl \
!     info-tcl 
! 	@[ -f ./tcl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in tcl" ; \
! 	(cd tcl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-itcl install-info-itcl
! maybe-install-info-itcl:
  
! install-info-itcl: \
!     configure-itcl \
!     info-itcl 
! 	@[ -f ./itcl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in itcl" ; \
! 	(cd itcl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-ld install-info-ld
! maybe-install-info-ld:
  
! install-info-ld: \
!     configure-ld \
!     info-ld 
! 	@[ -f ./ld/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in ld" ; \
! 	(cd ld && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-libgui install-info-libgui
! maybe-install-info-libgui:
  
! install-info-libgui: \
!     configure-libgui \
!     info-libgui 
! 	@[ -f ./libgui/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in libgui" ; \
! 	(cd libgui && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
- .PHONY: maybe-install-info-libiberty install-info-libiberty
- maybe-install-info-libiberty:
  
! install-info-libiberty: \
!     configure-libiberty \
!     info-libiberty 
! 	@[ -f ./libiberty/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in libiberty" ; \
! 	(cd libiberty && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-libtool install-info-libtool
! maybe-install-info-libtool:
  
! install-info-libtool: \
!     configure-libtool \
!     info-libtool 
! 	@[ -f ./libtool/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in libtool" ; \
! 	(cd libtool && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-m4 install-info-m4
! maybe-install-info-m4:
  
! install-info-m4: \
!     configure-m4 \
!     info-m4 
! 	@[ -f ./m4/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in m4" ; \
! 	(cd m4 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-make install-info-make
! maybe-install-info-make:
  
! install-info-make: \
!     configure-make \
!     info-make 
! 	@[ -f ./make/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in make" ; \
! 	(cd make && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-mmalloc install-info-mmalloc
! maybe-install-info-mmalloc:
  
! install-info-mmalloc: \
!     configure-mmalloc \
!     info-mmalloc 
! 	@[ -f ./mmalloc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in mmalloc" ; \
! 	(cd mmalloc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 11999,12329 ----
  	          install-info) \
  	  || exit 1
  
+ @endif indent
  
! .PHONY: maybe-installcheck-indent installcheck-indent
! maybe-installcheck-indent:
! @if indent
! maybe-installcheck-indent: installcheck-indent
  
! installcheck-indent: \
!     configure-indent 
! 	@[ -f ./indent/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in indent" ; \
! 	(cd indent && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif indent
  
! .PHONY: maybe-mostlyclean-indent mostlyclean-indent
! maybe-mostlyclean-indent:
! @if indent
! maybe-mostlyclean-indent: mostlyclean-indent
  
! mostlyclean-indent: 
! 	@[ -f ./indent/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in indent" ; \
! 	(cd indent && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif indent
  
! .PHONY: maybe-clean-indent clean-indent
! maybe-clean-indent:
! @if indent
! maybe-clean-indent: clean-indent
  
! clean-indent: 
! 	@[ -f ./indent/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in indent" ; \
! 	(cd indent && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif indent
  
! .PHONY: maybe-distclean-indent distclean-indent
! maybe-distclean-indent:
! @if indent
! maybe-distclean-indent: distclean-indent
  
! distclean-indent: 
! 	@[ -f ./indent/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in indent" ; \
! 	(cd indent && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif indent
  
! .PHONY: maybe-maintainer-clean-indent maintainer-clean-indent
! maybe-maintainer-clean-indent:
! @if indent
! maybe-maintainer-clean-indent: maintainer-clean-indent
  
! maintainer-clean-indent: 
! 	@[ -f ./indent/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in indent" ; \
! 	(cd indent && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif indent
  
  
! .PHONY: configure-intl maybe-configure-intl
! maybe-configure-intl:
! @if intl
! maybe-configure-intl: configure-intl
! configure-intl:
! 	@test -f stage_last && exit 0; \
! 	test ! -f intl/Makefile || exit 0; \
! 	[ -d intl ] || mkdir intl; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(HOST_EXPORTS) \
! 	echo Configuring in intl; \
! 	cd intl || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/intl"; \
! 	    libsrcdir="$$s/intl";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/intl"; \
! 	    libsrcdir="$$s/intl";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
! 	  || exit 1
! @endif intl
! 
! .PHONY: all-intl maybe-all-intl
! maybe-all-intl:
! @if intl
! TARGET-intl=all
! maybe-all-intl: all-intl
! all-intl: configure-intl
! 	@test -f stage_last && exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd intl && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-intl))
! @endif intl
! 
! .PHONY: check-intl maybe-check-intl
! maybe-check-intl:
! @if intl
! maybe-check-intl: check-intl
! 
! check-intl:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd intl && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif intl
! 
! .PHONY: install-intl maybe-install-intl
! maybe-install-intl:
! @if intl
! maybe-install-intl: install-intl
! 
! install-intl: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd intl && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif intl
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-intl info-intl
! maybe-info-intl:
! @if intl
! maybe-info-intl: info-intl
! 
! info-intl: \
!     configure-intl 
! 	@[ -f ./intl/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in intl" ; \
! 	(cd intl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif intl
  
! .PHONY: maybe-dvi-intl dvi-intl
! maybe-dvi-intl:
! @if intl
! maybe-dvi-intl: dvi-intl
  
! dvi-intl: \
!     configure-intl 
! 	@[ -f ./intl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in intl" ; \
! 	(cd intl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif intl
  
! .PHONY: maybe-html-intl html-intl
! maybe-html-intl:
! @if intl
! maybe-html-intl: html-intl
  
! html-intl: \
!     configure-intl 
! 	@[ -f ./intl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in intl" ; \
! 	(cd intl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif intl
  
! .PHONY: maybe-TAGS-intl TAGS-intl
! maybe-TAGS-intl:
! @if intl
! maybe-TAGS-intl: TAGS-intl
  
! TAGS-intl: \
!     configure-intl 
! 	@[ -f ./intl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in intl" ; \
! 	(cd intl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif intl
  
! .PHONY: maybe-install-info-intl install-info-intl
! maybe-install-info-intl:
! @if intl
! maybe-install-info-intl: install-info-intl
  
! install-info-intl: \
!     configure-intl \
!     info-intl 
! 	@[ -f ./intl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in intl" ; \
! 	(cd intl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** install-info-mmalloc: \
*** 7299,7527 ****
  	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-patch install-info-patch
! maybe-install-info-patch:
  
! install-info-patch: \
!     configure-patch \
!     info-patch 
! 	@[ -f ./patch/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in patch" ; \
! 	(cd patch && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-perl install-info-perl
! maybe-install-info-perl:
  
! install-info-perl: \
!     configure-perl \
!     info-perl 
! 	@[ -f ./perl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in perl" ; \
! 	(cd perl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-prms install-info-prms
! maybe-install-info-prms:
  
! install-info-prms: \
!     configure-prms \
!     info-prms 
! 	@[ -f ./prms/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in prms" ; \
! 	(cd prms && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-rcs install-info-rcs
! maybe-install-info-rcs:
  
! install-info-rcs: \
!     configure-rcs \
!     info-rcs 
! 	@[ -f ./rcs/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in rcs" ; \
! 	(cd rcs && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-readline install-info-readline
! maybe-install-info-readline:
  
! install-info-readline: \
!     configure-readline \
!     info-readline 
! 	@[ -f ./readline/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in readline" ; \
! 	(cd readline && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
- .PHONY: maybe-install-info-release install-info-release
- maybe-install-info-release:
  
! install-info-release: \
!     configure-release \
!     info-release 
! 	@[ -f ./release/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in release" ; \
! 	(cd release && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-recode install-info-recode
! maybe-install-info-recode:
  
! install-info-recode: \
!     configure-recode \
!     info-recode 
! 	@[ -f ./recode/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in recode" ; \
! 	(cd recode && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-sed install-info-sed
! maybe-install-info-sed:
  
! install-info-sed: \
!     configure-sed \
!     info-sed 
! 	@[ -f ./sed/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in sed" ; \
! 	(cd sed && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-send-pr install-info-send-pr
! maybe-install-info-send-pr:
  
! install-info-send-pr: \
!     configure-send-pr \
!     info-send-pr 
! 	@[ -f ./send-pr/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in send-pr" ; \
! 	(cd send-pr && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-shellutils install-info-shellutils
! maybe-install-info-shellutils:
  
! install-info-shellutils: \
!     configure-shellutils \
!     info-shellutils 
! 	@[ -f ./shellutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in shellutils" ; \
! 	(cd shellutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 12331,12659 ----
  	          install-info) \
  	  || exit 1
  
+ @endif intl
  
! .PHONY: maybe-installcheck-intl installcheck-intl
! maybe-installcheck-intl:
! @if intl
! maybe-installcheck-intl: installcheck-intl
  
! installcheck-intl: \
!     configure-intl 
! 	@[ -f ./intl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in intl" ; \
! 	(cd intl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif intl
  
! .PHONY: maybe-mostlyclean-intl mostlyclean-intl
! maybe-mostlyclean-intl:
! @if intl
! maybe-mostlyclean-intl: mostlyclean-intl
  
! mostlyclean-intl: 
! 	@[ -f ./intl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in intl" ; \
! 	(cd intl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif intl
  
! .PHONY: maybe-clean-intl clean-intl
! maybe-clean-intl:
! @if intl
! maybe-clean-intl: clean-intl
  
! clean-intl: 
! 	@[ -f ./intl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in intl" ; \
! 	(cd intl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif intl
  
! .PHONY: maybe-distclean-intl distclean-intl
! maybe-distclean-intl:
! @if intl
! maybe-distclean-intl: distclean-intl
  
! distclean-intl: 
! 	@[ -f ./intl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in intl" ; \
! 	(cd intl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif intl
  
! .PHONY: maybe-maintainer-clean-intl maintainer-clean-intl
! maybe-maintainer-clean-intl:
! @if intl
! maybe-maintainer-clean-intl: maintainer-clean-intl
  
! maintainer-clean-intl: 
! 	@[ -f ./intl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in intl" ; \
! 	(cd intl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif intl
  
  
! .PHONY: configure-tcl maybe-configure-tcl
! maybe-configure-tcl:
! @if tcl
! maybe-configure-tcl: configure-tcl
! configure-tcl:
! 	@test ! -f tcl/Makefile || exit 0; \
! 	[ -d tcl ] || mkdir tcl; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(HOST_EXPORTS) \
! 	echo Configuring in tcl; \
! 	cd tcl || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/tcl"; \
! 	    libsrcdir="$$s/tcl";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/tcl"; \
! 	    libsrcdir="$$s/tcl";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
! 	  || exit 1
! @endif tcl
! 
! .PHONY: all-tcl maybe-all-tcl
! maybe-all-tcl:
! @if tcl
! TARGET-tcl=all
! maybe-all-tcl: all-tcl
! all-tcl: configure-tcl
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd tcl && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-tcl))
! @endif tcl
! 
! .PHONY: check-tcl maybe-check-tcl
! maybe-check-tcl:
! @if tcl
! maybe-check-tcl: check-tcl
! 
! check-tcl:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd tcl && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif tcl
! 
! .PHONY: install-tcl maybe-install-tcl
! maybe-install-tcl:
! @if tcl
! maybe-install-tcl: install-tcl
! 
! install-tcl: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd tcl && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif tcl
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-tcl info-tcl
! maybe-info-tcl:
! @if tcl
! maybe-info-tcl: info-tcl
! 
! info-tcl: \
!     configure-tcl 
! 	@[ -f ./tcl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in tcl" ; \
! 	(cd tcl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif tcl
  
! .PHONY: maybe-dvi-tcl dvi-tcl
! maybe-dvi-tcl:
! @if tcl
! maybe-dvi-tcl: dvi-tcl
  
! dvi-tcl: \
!     configure-tcl 
! 	@[ -f ./tcl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in tcl" ; \
! 	(cd tcl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif tcl
  
! .PHONY: maybe-html-tcl html-tcl
! maybe-html-tcl:
! @if tcl
! maybe-html-tcl: html-tcl
  
! html-tcl: \
!     configure-tcl 
! 	@[ -f ./tcl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in tcl" ; \
! 	(cd tcl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif tcl
  
! .PHONY: maybe-TAGS-tcl TAGS-tcl
! maybe-TAGS-tcl:
! @if tcl
! maybe-TAGS-tcl: TAGS-tcl
  
! TAGS-tcl: \
!     configure-tcl 
! 	@[ -f ./tcl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in tcl" ; \
! 	(cd tcl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif tcl
  
! .PHONY: maybe-install-info-tcl install-info-tcl
! maybe-install-info-tcl:
! @if tcl
! maybe-install-info-tcl: install-info-tcl
  
! install-info-tcl: \
!     configure-tcl \
!     info-tcl 
! 	@[ -f ./tcl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in tcl" ; \
! 	(cd tcl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** install-info-shellutils: \
*** 7529,7734 ****
  	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-sid install-info-sid
! maybe-install-info-sid:
  
! install-info-sid: \
!     configure-sid \
!     info-sid 
! 	@[ -f ./sid/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in sid" ; \
! 	(cd sid && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-sim install-info-sim
! maybe-install-info-sim:
  
! install-info-sim: \
!     configure-sim \
!     info-sim 
! 	@[ -f ./sim/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in sim" ; \
! 	(cd sim && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-tar install-info-tar
! maybe-install-info-tar:
  
! install-info-tar: \
!     configure-tar \
!     info-tar 
! 	@[ -f ./tar/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in tar" ; \
! 	(cd tar && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-texinfo install-info-texinfo
! maybe-install-info-texinfo:
  
! install-info-texinfo: \
!     configure-texinfo \
!     info-texinfo 
! 	@[ -f ./texinfo/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in texinfo" ; \
! 	(cd texinfo && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
- .PHONY: maybe-install-info-textutils install-info-textutils
- maybe-install-info-textutils:
  
! install-info-textutils: \
!     configure-textutils \
!     info-textutils 
! 	@[ -f ./textutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in textutils" ; \
! 	(cd textutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-time install-info-time
! maybe-install-info-time:
  
! install-info-time: \
!     configure-time \
!     info-time 
! 	@[ -f ./time/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in time" ; \
! 	(cd time && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-uudecode install-info-uudecode
! maybe-install-info-uudecode:
  
! install-info-uudecode: \
!     configure-uudecode \
!     info-uudecode 
! 	@[ -f ./uudecode/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in uudecode" ; \
! 	(cd uudecode && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-wdiff install-info-wdiff
! maybe-install-info-wdiff:
  
! install-info-wdiff: \
!     configure-wdiff \
!     info-wdiff 
! 	@[ -f ./wdiff/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in wdiff" ; \
! 	(cd wdiff && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-zip install-info-zip
! maybe-install-info-zip:
  
! install-info-zip: \
!     configure-zip \
!     info-zip 
! 	@[ -f ./zip/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in zip" ; \
! 	(cd zip && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 12661,12974 ----
  	          install-info) \
  	  || exit 1
  
+ @endif tcl
  
! .PHONY: maybe-installcheck-tcl installcheck-tcl
! maybe-installcheck-tcl:
! @if tcl
! maybe-installcheck-tcl: installcheck-tcl
  
! installcheck-tcl: \
!     configure-tcl 
! 	@[ -f ./tcl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in tcl" ; \
! 	(cd tcl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif tcl
  
! .PHONY: maybe-mostlyclean-tcl mostlyclean-tcl
! maybe-mostlyclean-tcl:
! @if tcl
! maybe-mostlyclean-tcl: mostlyclean-tcl
  
! # tcl doesn't support mostlyclean.
! mostlyclean-tcl:
! 
! @endif tcl
! 
! .PHONY: maybe-clean-tcl clean-tcl
! maybe-clean-tcl:
! @if tcl
! maybe-clean-tcl: clean-tcl
! 
! clean-tcl: 
! 	@[ -f ./tcl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in tcl" ; \
! 	(cd tcl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif tcl
  
! .PHONY: maybe-distclean-tcl distclean-tcl
! maybe-distclean-tcl:
! @if tcl
! maybe-distclean-tcl: distclean-tcl
  
! distclean-tcl: 
! 	@[ -f ./tcl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in tcl" ; \
! 	(cd tcl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif tcl
  
! .PHONY: maybe-maintainer-clean-tcl maintainer-clean-tcl
! maybe-maintainer-clean-tcl:
! @if tcl
! maybe-maintainer-clean-tcl: maintainer-clean-tcl
  
! maintainer-clean-tcl: 
! 	@[ -f ./tcl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in tcl" ; \
! 	(cd tcl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif tcl
  
  
! .PHONY: configure-itcl maybe-configure-itcl
! maybe-configure-itcl:
! @if itcl
! maybe-configure-itcl: configure-itcl
! configure-itcl:
! 	@test ! -f itcl/Makefile || exit 0; \
! 	[ -d itcl ] || mkdir itcl; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in itcl; \
+ 	cd itcl || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/itcl"; \
+ 	    libsrcdir="$$s/itcl";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/itcl"; \
+ 	    libsrcdir="$$s/itcl";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif itcl
+ 
+ .PHONY: all-itcl maybe-all-itcl
+ maybe-all-itcl:
+ @if itcl
+ TARGET-itcl=all
+ maybe-all-itcl: all-itcl
+ all-itcl: configure-itcl
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd itcl && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-itcl))
! @endif itcl
! 
! .PHONY: check-itcl maybe-check-itcl
! maybe-check-itcl:
! @if itcl
! maybe-check-itcl: check-itcl
! 
! check-itcl:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd itcl && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif itcl
! 
! .PHONY: install-itcl maybe-install-itcl
! maybe-install-itcl:
! @if itcl
! maybe-install-itcl: install-itcl
! 
! install-itcl: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd itcl && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif itcl
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-itcl info-itcl
! maybe-info-itcl:
! @if itcl
! maybe-info-itcl: info-itcl
! 
! info-itcl: \
!     configure-itcl 
! 	@[ -f ./itcl/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in itcl" ; \
! 	(cd itcl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif itcl
  
! .PHONY: maybe-dvi-itcl dvi-itcl
! maybe-dvi-itcl:
! @if itcl
! maybe-dvi-itcl: dvi-itcl
  
! dvi-itcl: \
!     configure-itcl 
! 	@[ -f ./itcl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in itcl" ; \
! 	(cd itcl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif itcl
  
! .PHONY: maybe-html-itcl html-itcl
! maybe-html-itcl:
! @if itcl
! maybe-html-itcl: html-itcl
  
! html-itcl: \
!     configure-itcl 
! 	@[ -f ./itcl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in itcl" ; \
! 	(cd itcl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif itcl
  
! .PHONY: maybe-TAGS-itcl TAGS-itcl
! maybe-TAGS-itcl:
! @if itcl
! maybe-TAGS-itcl: TAGS-itcl
  
! TAGS-itcl: \
!     configure-itcl 
! 	@[ -f ./itcl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in itcl" ; \
! 	(cd itcl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif itcl
  
! .PHONY: maybe-install-info-itcl install-info-itcl
! maybe-install-info-itcl:
! @if itcl
! maybe-install-info-itcl: install-info-itcl
  
! install-info-itcl: \
!     configure-itcl \
!     info-itcl 
! 	@[ -f ./itcl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in itcl" ; \
! 	(cd itcl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** install-info-zip: \
*** 7736,7944 ****
  	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-zlib install-info-zlib
! maybe-install-info-zlib:
  
! install-info-zlib: \
!     configure-zlib \
!     info-zlib 
! 	@[ -f ./zlib/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in zlib" ; \
! 	(cd zlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-gdb install-info-gdb
! maybe-install-info-gdb:
  
! install-info-gdb: \
!     configure-gdb \
!     info-gdb 
! 	@[ -f ./gdb/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in gdb" ; \
! 	(cd gdb && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-expect install-info-expect
! maybe-install-info-expect:
  
! install-info-expect: \
!     configure-expect \
!     info-expect 
! 	@[ -f ./expect/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in expect" ; \
! 	(cd expect && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-guile install-info-guile
! maybe-install-info-guile:
  
! install-info-guile: \
!     configure-guile \
!     info-guile 
! 	@[ -f ./guile/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in guile" ; \
! 	(cd guile && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-tk install-info-tk
! maybe-install-info-tk:
  
! install-info-tk: \
!     configure-tk \
!     info-tk 
! 	@[ -f ./tk/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in tk" ; \
! 	(cd tk && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
- .PHONY: maybe-install-info-tix install-info-tix
- maybe-install-info-tix:
  
! install-info-tix: \
!     configure-tix \
!     info-tix 
! 	@[ -f ./tix/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in tix" ; \
! 	(cd tix && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-libtermcap install-info-libtermcap
! maybe-install-info-libtermcap:
  
! install-info-libtermcap: \
!     configure-libtermcap \
!     info-libtermcap 
! 	@[ -f ./libtermcap/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in libtermcap" ; \
! 	(cd libtermcap && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-utils install-info-utils
! maybe-install-info-utils:
  
! install-info-utils: \
!     configure-utils \
!     info-utils 
! 	@[ -f ./utils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in utils" ; \
! 	(cd utils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
  
! # Target modules.
  
! .PHONY: maybe-install-info-target-libstdc++-v3 install-info-target-libstdc++-v3
! maybe-install-info-target-libstdc++-v3:
  
! install-info-target-libstdc++-v3: \
!     configure-target-libstdc++-v3 \
!     info-target-libstdc++-v3 
! 	@[ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing install-info in $(TARGET_SUBDIR)/libstdc++-v3" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libstdc++-v3 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 12976,13306 ----
  	          install-info) \
  	  || exit 1
  
+ @endif itcl
  
! .PHONY: maybe-installcheck-itcl installcheck-itcl
! maybe-installcheck-itcl:
! @if itcl
! maybe-installcheck-itcl: installcheck-itcl
  
! installcheck-itcl: \
!     configure-itcl 
! 	@[ -f ./itcl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in itcl" ; \
! 	(cd itcl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif itcl
  
! .PHONY: maybe-mostlyclean-itcl mostlyclean-itcl
! maybe-mostlyclean-itcl:
! @if itcl
! maybe-mostlyclean-itcl: mostlyclean-itcl
  
! mostlyclean-itcl: 
! 	@[ -f ./itcl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in itcl" ; \
! 	(cd itcl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif itcl
  
! .PHONY: maybe-clean-itcl clean-itcl
! maybe-clean-itcl:
! @if itcl
! maybe-clean-itcl: clean-itcl
  
! clean-itcl: 
! 	@[ -f ./itcl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in itcl" ; \
! 	(cd itcl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif itcl
  
! .PHONY: maybe-distclean-itcl distclean-itcl
! maybe-distclean-itcl:
! @if itcl
! maybe-distclean-itcl: distclean-itcl
  
! distclean-itcl: 
! 	@[ -f ./itcl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in itcl" ; \
! 	(cd itcl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif itcl
  
! .PHONY: maybe-maintainer-clean-itcl maintainer-clean-itcl
! maybe-maintainer-clean-itcl:
! @if itcl
! maybe-maintainer-clean-itcl: maintainer-clean-itcl
  
! maintainer-clean-itcl: 
! 	@[ -f ./itcl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in itcl" ; \
! 	(cd itcl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif itcl
  
  
! .PHONY: configure-ld maybe-configure-ld
! maybe-configure-ld:
! @if ld
! maybe-configure-ld: configure-ld
! configure-ld:
! 	@test -f stage_last && exit 0; \
! 	test ! -f ld/Makefile || exit 0; \
! 	[ -d ld ] || mkdir ld; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(HOST_EXPORTS) \
! 	echo Configuring in ld; \
! 	cd ld || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/ld"; \
! 	    libsrcdir="$$s/ld";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/ld"; \
! 	    libsrcdir="$$s/ld";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
! 	  || exit 1
! @endif ld
! 
! .PHONY: all-ld maybe-all-ld
! maybe-all-ld:
! @if ld
! TARGET-ld=all
! maybe-all-ld: all-ld
! all-ld: configure-ld
! 	@test -f stage_last && exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd ld && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-ld))
! @endif ld
! 
! .PHONY: check-ld maybe-check-ld
! maybe-check-ld:
! @if ld
! maybe-check-ld: check-ld
! 
! check-ld:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd ld && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif ld
! 
! .PHONY: install-ld maybe-install-ld
! maybe-install-ld:
! @if ld
! maybe-install-ld: install-ld
! 
! install-ld: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd ld && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif ld
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-ld info-ld
! maybe-info-ld:
! @if ld
! maybe-info-ld: info-ld
! 
! info-ld: \
!     configure-ld 
! 	@[ -f ./ld/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in ld" ; \
! 	(cd ld && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif ld
  
! .PHONY: maybe-dvi-ld dvi-ld
! maybe-dvi-ld:
! @if ld
! maybe-dvi-ld: dvi-ld
  
! dvi-ld: \
!     configure-ld 
! 	@[ -f ./ld/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in ld" ; \
! 	(cd ld && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif ld
  
! .PHONY: maybe-html-ld html-ld
! maybe-html-ld:
! @if ld
! maybe-html-ld: html-ld
  
! html-ld: \
!     configure-ld 
! 	@[ -f ./ld/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in ld" ; \
! 	(cd ld && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif ld
  
+ .PHONY: maybe-TAGS-ld TAGS-ld
+ maybe-TAGS-ld:
+ @if ld
+ maybe-TAGS-ld: TAGS-ld
  
! TAGS-ld: \
!     configure-ld 
! 	@[ -f ./ld/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	echo "Doing TAGS in ld" ; \
! 	(cd ld && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
! 	  || exit 1
  
! @endif ld
  
! .PHONY: maybe-install-info-ld install-info-ld
! maybe-install-info-ld:
! @if ld
! maybe-install-info-ld: install-info-ld
! 
! install-info-ld: \
!     configure-ld \
!     info-ld 
! 	@[ -f ./ld/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in ld" ; \
! 	(cd ld && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** install-info-target-libstdc++-v3: \
*** 7946,8174 ****
  	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-target-newlib install-info-target-newlib
! maybe-install-info-target-newlib:
  
! install-info-target-newlib: \
!     configure-target-newlib \
!     info-target-newlib 
! 	@[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing install-info in $(TARGET_SUBDIR)/newlib" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/newlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-target-libf2c install-info-target-libf2c
! maybe-install-info-target-libf2c:
  
! install-info-target-libf2c: \
!     configure-target-libf2c \
!     info-target-libf2c 
! 	@[ -f $(TARGET_SUBDIR)/libf2c/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing install-info in $(TARGET_SUBDIR)/libf2c" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libf2c && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-target-libobjc install-info-target-libobjc
! maybe-install-info-target-libobjc:
  
! install-info-target-libobjc: \
!     configure-target-libobjc \
!     info-target-libobjc 
! 	@[ -f $(TARGET_SUBDIR)/libobjc/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing install-info in $(TARGET_SUBDIR)/libobjc" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libobjc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-target-libtermcap install-info-target-libtermcap
! maybe-install-info-target-libtermcap:
  
! install-info-target-libtermcap: \
!     configure-target-libtermcap \
!     info-target-libtermcap 
! 	@[ -f $(TARGET_SUBDIR)/libtermcap/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing install-info in $(TARGET_SUBDIR)/libtermcap" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libtermcap && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-target-winsup install-info-target-winsup
! maybe-install-info-target-winsup:
  
! install-info-target-winsup: \
!     configure-target-winsup \
!     info-target-winsup 
! 	@[ -f $(TARGET_SUBDIR)/winsup/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing install-info in $(TARGET_SUBDIR)/winsup" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/winsup && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-target-libgloss install-info-target-libgloss
! maybe-install-info-target-libgloss:
  
! install-info-target-libgloss: \
!     configure-target-libgloss \
!     info-target-libgloss 
! 	@[ -f $(TARGET_SUBDIR)/libgloss/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing install-info in $(TARGET_SUBDIR)/libgloss" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libgloss && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-target-libiberty install-info-target-libiberty
! maybe-install-info-target-libiberty:
  
! install-info-target-libiberty: \
!     configure-target-libiberty \
!     info-target-libiberty 
! 	@[ -f $(TARGET_SUBDIR)/libiberty/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing install-info in $(TARGET_SUBDIR)/libiberty" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libiberty && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-target-gperf install-info-target-gperf
! maybe-install-info-target-gperf:
  
! install-info-target-gperf: \
!     configure-target-gperf \
!     info-target-gperf 
! 	@[ -f $(TARGET_SUBDIR)/gperf/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing install-info in $(TARGET_SUBDIR)/gperf" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/gperf && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-target-examples install-info-target-examples
! maybe-install-info-target-examples:
  
! install-info-target-examples: \
!     configure-target-examples \
!     info-target-examples 
! 	@[ -f $(TARGET_SUBDIR)/examples/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing install-info in $(TARGET_SUBDIR)/examples" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/examples && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-target-libffi install-info-target-libffi
! maybe-install-info-target-libffi:
  
! install-info-target-libffi: \
!     configure-target-libffi \
!     info-target-libffi 
! 	@[ -f $(TARGET_SUBDIR)/libffi/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing install-info in $(TARGET_SUBDIR)/libffi" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libffi && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 13308,13638 ----
  	          install-info) \
  	  || exit 1
  
+ @endif ld
  
! .PHONY: maybe-installcheck-ld installcheck-ld
! maybe-installcheck-ld:
! @if ld
! maybe-installcheck-ld: installcheck-ld
  
! installcheck-ld: \
!     configure-ld 
! 	@[ -f ./ld/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in ld" ; \
! 	(cd ld && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif ld
  
! .PHONY: maybe-mostlyclean-ld mostlyclean-ld
! maybe-mostlyclean-ld:
! @if ld
! maybe-mostlyclean-ld: mostlyclean-ld
  
! mostlyclean-ld: 
! 	@[ -f ./ld/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in ld" ; \
! 	(cd ld && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif ld
  
! .PHONY: maybe-clean-ld clean-ld
! maybe-clean-ld:
! @if ld
! maybe-clean-ld: clean-ld
  
! clean-ld: 
! 	@[ -f ./ld/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in ld" ; \
! 	(cd ld && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif ld
  
! .PHONY: maybe-distclean-ld distclean-ld
! maybe-distclean-ld:
! @if ld
! maybe-distclean-ld: distclean-ld
  
! distclean-ld: 
! 	@[ -f ./ld/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in ld" ; \
! 	(cd ld && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif ld
  
! .PHONY: maybe-maintainer-clean-ld maintainer-clean-ld
! maybe-maintainer-clean-ld:
! @if ld
! maybe-maintainer-clean-ld: maintainer-clean-ld
  
! maintainer-clean-ld: 
! 	@[ -f ./ld/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in ld" ; \
! 	(cd ld && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif ld
+ 
  
! .PHONY: configure-libcpp maybe-configure-libcpp
! maybe-configure-libcpp:
! @if libcpp
! maybe-configure-libcpp: configure-libcpp
! configure-libcpp:
! 	@test -f stage_last && exit 0; \
! 	test ! -f libcpp/Makefile || exit 0; \
! 	[ -d libcpp ] || mkdir libcpp; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(HOST_EXPORTS) \
! 	echo Configuring in libcpp; \
! 	cd libcpp || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/libcpp"; \
! 	    libsrcdir="$$s/libcpp";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/libcpp"; \
! 	    libsrcdir="$$s/libcpp";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
! 	  || exit 1
! @endif libcpp
  
! .PHONY: all-libcpp maybe-all-libcpp
! maybe-all-libcpp:
! @if libcpp
! TARGET-libcpp=all
! maybe-all-libcpp: all-libcpp
! all-libcpp: configure-libcpp
! 	@test -f stage_last && exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd libcpp && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-libcpp))
! @endif libcpp
! 
! .PHONY: check-libcpp maybe-check-libcpp
! maybe-check-libcpp:
! @if libcpp
! maybe-check-libcpp: check-libcpp
! 
! check-libcpp:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd libcpp && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif libcpp
! 
! .PHONY: install-libcpp maybe-install-libcpp
! maybe-install-libcpp:
! @if libcpp
! maybe-install-libcpp: install-libcpp
! 
! install-libcpp: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd libcpp && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif libcpp
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-libcpp info-libcpp
! maybe-info-libcpp:
! @if libcpp
! maybe-info-libcpp: info-libcpp
! 
! info-libcpp: \
!     configure-libcpp 
! 	@[ -f ./libcpp/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in libcpp" ; \
! 	(cd libcpp && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif libcpp
  
! .PHONY: maybe-dvi-libcpp dvi-libcpp
! maybe-dvi-libcpp:
! @if libcpp
! maybe-dvi-libcpp: dvi-libcpp
  
! dvi-libcpp: \
!     configure-libcpp 
! 	@[ -f ./libcpp/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in libcpp" ; \
! 	(cd libcpp && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif libcpp
  
! .PHONY: maybe-html-libcpp html-libcpp
! maybe-html-libcpp:
! @if libcpp
! maybe-html-libcpp: html-libcpp
  
! html-libcpp: \
!     configure-libcpp 
! 	@[ -f ./libcpp/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in libcpp" ; \
! 	(cd libcpp && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif libcpp
  
! .PHONY: maybe-TAGS-libcpp TAGS-libcpp
! maybe-TAGS-libcpp:
! @if libcpp
! maybe-TAGS-libcpp: TAGS-libcpp
  
! TAGS-libcpp: \
!     configure-libcpp 
! 	@[ -f ./libcpp/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in libcpp" ; \
! 	(cd libcpp && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif libcpp
  
! .PHONY: maybe-install-info-libcpp install-info-libcpp
! maybe-install-info-libcpp:
! @if libcpp
! maybe-install-info-libcpp: install-info-libcpp
  
! install-info-libcpp: \
!     configure-libcpp \
!     info-libcpp 
! 	@[ -f ./libcpp/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in libcpp" ; \
! 	(cd libcpp && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** install-info-target-libffi: \
*** 8176,8512 ****
  	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-target-libjava install-info-target-libjava
! maybe-install-info-target-libjava:
  
! install-info-target-libjava: \
!     configure-target-libjava \
!     info-target-libjava 
! 	@[ -f $(TARGET_SUBDIR)/libjava/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing install-info in $(TARGET_SUBDIR)/libjava" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libjava && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-target-zlib install-info-target-zlib
! maybe-install-info-target-zlib:
  
! install-info-target-zlib: \
!     configure-target-zlib \
!     info-target-zlib 
! 	@[ -f $(TARGET_SUBDIR)/zlib/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing install-info in $(TARGET_SUBDIR)/zlib" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/zlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-target-boehm-gc install-info-target-boehm-gc
! maybe-install-info-target-boehm-gc:
  
! install-info-target-boehm-gc: \
!     configure-target-boehm-gc \
!     info-target-boehm-gc 
! 	@[ -f $(TARGET_SUBDIR)/boehm-gc/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing install-info in $(TARGET_SUBDIR)/boehm-gc" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/boehm-gc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-target-qthreads install-info-target-qthreads
! maybe-install-info-target-qthreads:
  
! install-info-target-qthreads: \
!     configure-target-qthreads \
!     info-target-qthreads 
! 	@[ -f $(TARGET_SUBDIR)/qthreads/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing install-info in $(TARGET_SUBDIR)/qthreads" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/qthreads && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
! .PHONY: maybe-install-info-target-rda install-info-target-rda
! maybe-install-info-target-rda:
  
! install-info-target-rda: \
!     configure-target-rda \
!     info-target-rda 
! 	@[ -f $(TARGET_SUBDIR)/rda/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing install-info in $(TARGET_SUBDIR)/rda" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/rda && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
  
  
! .PHONY: do-installcheck
! do-installcheck: installcheck-host installcheck-target
  
! .PHONY: installcheck-host
! installcheck-host: maybe-installcheck-gcc  \
!     maybe-installcheck-ash \
!     maybe-installcheck-autoconf \
!     maybe-installcheck-automake \
!     maybe-installcheck-bash \
!     maybe-installcheck-bfd \
!     maybe-installcheck-opcodes \
!     maybe-installcheck-binutils \
!     maybe-installcheck-bison \
!     maybe-installcheck-byacc \
!     maybe-installcheck-bzip2 \
!     maybe-installcheck-dejagnu \
!     maybe-installcheck-diff \
!     maybe-installcheck-dosutils \
!     maybe-installcheck-etc \
!     maybe-installcheck-fastjar \
!     maybe-installcheck-fileutils \
!     maybe-installcheck-findutils \
!     maybe-installcheck-find \
!     maybe-installcheck-flex \
!     maybe-installcheck-gas \
!     maybe-installcheck-gawk \
!     maybe-installcheck-gettext \
!     maybe-installcheck-gnuserv \
!     maybe-installcheck-gprof \
!     maybe-installcheck-gzip \
!     maybe-installcheck-hello \
!     maybe-installcheck-indent \
!     maybe-installcheck-intl \
!     maybe-installcheck-tcl \
!     maybe-installcheck-itcl \
!     maybe-installcheck-ld \
!     maybe-installcheck-libgui \
!     maybe-installcheck-libiberty \
!     maybe-installcheck-libtool \
!     maybe-installcheck-m4 \
!     maybe-installcheck-make \
!     maybe-installcheck-mmalloc \
!     maybe-installcheck-patch \
!     maybe-installcheck-perl \
!     maybe-installcheck-prms \
!     maybe-installcheck-rcs \
!     maybe-installcheck-readline \
!     maybe-installcheck-release \
!     maybe-installcheck-recode \
!     maybe-installcheck-sed \
!     maybe-installcheck-send-pr \
!     maybe-installcheck-shellutils \
!     maybe-installcheck-sid \
!     maybe-installcheck-sim \
!     maybe-installcheck-tar \
!     maybe-installcheck-texinfo \
!     maybe-installcheck-textutils \
!     maybe-installcheck-time \
!     maybe-installcheck-uudecode \
!     maybe-installcheck-wdiff \
!     maybe-installcheck-zip \
!     maybe-installcheck-zlib \
!     maybe-installcheck-gdb \
!     maybe-installcheck-expect \
!     maybe-installcheck-guile \
!     maybe-installcheck-tk \
!     maybe-installcheck-tix \
!     maybe-installcheck-libtermcap \
!     maybe-installcheck-utils
  
! .PHONY: installcheck-target
! installcheck-target:  \
!     maybe-installcheck-target-libstdc++-v3 \
!     maybe-installcheck-target-newlib \
!     maybe-installcheck-target-libf2c \
!     maybe-installcheck-target-libobjc \
!     maybe-installcheck-target-libtermcap \
!     maybe-installcheck-target-winsup \
!     maybe-installcheck-target-libgloss \
!     maybe-installcheck-target-libiberty \
!     maybe-installcheck-target-gperf \
!     maybe-installcheck-target-examples \
!     maybe-installcheck-target-libffi \
!     maybe-installcheck-target-libjava \
!     maybe-installcheck-target-zlib \
!     maybe-installcheck-target-boehm-gc \
!     maybe-installcheck-target-qthreads \
!     maybe-installcheck-target-rda
  
! # GCC, the eternal special case
! .PHONY: maybe-installcheck-gcc installcheck-gcc
! maybe-installcheck-gcc:
! installcheck-gcc: \
!     configure-gcc 
! 	@[ -f ./gcc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_GCC_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in gcc" ; \
! 	(cd gcc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
! # Host modules.
  
! .PHONY: maybe-installcheck-ash installcheck-ash
! maybe-installcheck-ash:
  
! installcheck-ash: \
!     configure-ash 
! 	@[ -f ./ash/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in ash" ; \
! 	(cd ash && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-autoconf installcheck-autoconf
! maybe-installcheck-autoconf:
  
! installcheck-autoconf: \
!     configure-autoconf 
! 	@[ -f ./autoconf/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in autoconf" ; \
! 	(cd autoconf && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-automake installcheck-automake
! maybe-installcheck-automake:
  
! installcheck-automake: \
!     configure-automake 
! 	@[ -f ./automake/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in automake" ; \
! 	(cd automake && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-bash installcheck-bash
! maybe-installcheck-bash:
  
! installcheck-bash: \
!     configure-bash 
! 	@[ -f ./bash/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in bash" ; \
! 	(cd bash && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-bfd installcheck-bfd
! maybe-installcheck-bfd:
  
! installcheck-bfd: \
!     configure-bfd 
! 	@[ -f ./bfd/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in bfd" ; \
! 	(cd bfd && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 13640,13994 ----
  	          install-info) \
  	  || exit 1
  
+ @endif libcpp
  
! .PHONY: maybe-installcheck-libcpp installcheck-libcpp
! maybe-installcheck-libcpp:
! @if libcpp
! maybe-installcheck-libcpp: installcheck-libcpp
  
! installcheck-libcpp: \
!     configure-libcpp 
! 	@[ -f ./libcpp/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in libcpp" ; \
! 	(cd libcpp && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif libcpp
  
! .PHONY: maybe-mostlyclean-libcpp mostlyclean-libcpp
! maybe-mostlyclean-libcpp:
! @if libcpp
! maybe-mostlyclean-libcpp: mostlyclean-libcpp
  
! mostlyclean-libcpp: 
! 	@[ -f ./libcpp/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in libcpp" ; \
! 	(cd libcpp && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif libcpp
  
! .PHONY: maybe-clean-libcpp clean-libcpp
! maybe-clean-libcpp:
! @if libcpp
! maybe-clean-libcpp: clean-libcpp
  
! clean-libcpp: 
! 	@[ -f ./libcpp/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in libcpp" ; \
! 	(cd libcpp && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif libcpp
  
! .PHONY: maybe-distclean-libcpp distclean-libcpp
! maybe-distclean-libcpp:
! @if libcpp
! maybe-distclean-libcpp: distclean-libcpp
  
! distclean-libcpp: 
! 	@[ -f ./libcpp/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in libcpp" ; \
! 	(cd libcpp && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif libcpp
  
! .PHONY: maybe-maintainer-clean-libcpp maintainer-clean-libcpp
! maybe-maintainer-clean-libcpp:
! @if libcpp
! maybe-maintainer-clean-libcpp: maintainer-clean-libcpp
  
! maintainer-clean-libcpp: 
! 	@[ -f ./libcpp/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in libcpp" ; \
! 	(cd libcpp && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif libcpp
  
  
! .PHONY: configure-libgui maybe-configure-libgui
! maybe-configure-libgui:
! @if libgui
! maybe-configure-libgui: configure-libgui
! configure-libgui:
! 	@test ! -f libgui/Makefile || exit 0; \
! 	[ -d libgui ] || mkdir libgui; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(HOST_EXPORTS) \
! 	echo Configuring in libgui; \
! 	cd libgui || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/libgui"; \
! 	    libsrcdir="$$s/libgui";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/libgui"; \
! 	    libsrcdir="$$s/libgui";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
! 	  || exit 1
! @endif libgui
  
! .PHONY: all-libgui maybe-all-libgui
! maybe-all-libgui:
! @if libgui
! TARGET-libgui=all
! maybe-all-libgui: all-libgui
! all-libgui: configure-libgui
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd libgui && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-libgui))
! @endif libgui
  
! .PHONY: check-libgui maybe-check-libgui
! maybe-check-libgui:
! @if libgui
! maybe-check-libgui: check-libgui
  
! check-libgui:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd libgui && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif libgui
! 
! .PHONY: install-libgui maybe-install-libgui
! maybe-install-libgui:
! @if libgui
! maybe-install-libgui: install-libgui
! 
! install-libgui: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd libgui && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif libgui
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-libgui info-libgui
! maybe-info-libgui:
! @if libgui
! maybe-info-libgui: info-libgui
! 
! info-libgui: \
!     configure-libgui 
! 	@[ -f ./libgui/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in libgui" ; \
! 	(cd libgui && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
! @endif libgui
  
! .PHONY: maybe-dvi-libgui dvi-libgui
! maybe-dvi-libgui:
! @if libgui
! maybe-dvi-libgui: dvi-libgui
  
! dvi-libgui: \
!     configure-libgui 
! 	@[ -f ./libgui/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in libgui" ; \
! 	(cd libgui && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif libgui
  
! .PHONY: maybe-html-libgui html-libgui
! maybe-html-libgui:
! @if libgui
! maybe-html-libgui: html-libgui
  
! html-libgui: \
!     configure-libgui 
! 	@[ -f ./libgui/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in libgui" ; \
! 	(cd libgui && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif libgui
  
! .PHONY: maybe-TAGS-libgui TAGS-libgui
! maybe-TAGS-libgui:
! @if libgui
! maybe-TAGS-libgui: TAGS-libgui
  
! TAGS-libgui: \
!     configure-libgui 
! 	@[ -f ./libgui/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in libgui" ; \
! 	(cd libgui && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif libgui
  
! .PHONY: maybe-install-info-libgui install-info-libgui
! maybe-install-info-libgui:
! @if libgui
! maybe-install-info-libgui: install-info-libgui
  
! install-info-libgui: \
!     configure-libgui \
!     info-libgui 
! 	@[ -f ./libgui/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in libgui" ; \
! 	(cd libgui && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif libgui
  
! .PHONY: maybe-installcheck-libgui installcheck-libgui
! maybe-installcheck-libgui:
! @if libgui
! maybe-installcheck-libgui: installcheck-libgui
  
! installcheck-libgui: \
!     configure-libgui 
! 	@[ -f ./libgui/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in libgui" ; \
! 	(cd libgui && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** installcheck-bfd: \
*** 8514,8732 ****
  	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-opcodes installcheck-opcodes
! maybe-installcheck-opcodes:
  
! installcheck-opcodes: \
!     configure-opcodes 
! 	@[ -f ./opcodes/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in opcodes" ; \
! 	(cd opcodes && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-binutils installcheck-binutils
! maybe-installcheck-binutils:
  
! installcheck-binutils: \
!     configure-binutils 
! 	@[ -f ./binutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in binutils" ; \
! 	(cd binutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-bison installcheck-bison
! maybe-installcheck-bison:
  
! installcheck-bison: \
!     configure-bison 
! 	@[ -f ./bison/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in bison" ; \
! 	(cd bison && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-byacc installcheck-byacc
! maybe-installcheck-byacc:
  
! installcheck-byacc: \
!     configure-byacc 
! 	@[ -f ./byacc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in byacc" ; \
! 	(cd byacc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
- .PHONY: maybe-installcheck-bzip2 installcheck-bzip2
- maybe-installcheck-bzip2:
  
! installcheck-bzip2: \
!     configure-bzip2 
! 	@[ -f ./bzip2/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in bzip2" ; \
! 	(cd bzip2 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-dejagnu installcheck-dejagnu
! maybe-installcheck-dejagnu:
  
! installcheck-dejagnu: \
!     configure-dejagnu 
! 	@[ -f ./dejagnu/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in dejagnu" ; \
! 	(cd dejagnu && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-diff installcheck-diff
! maybe-installcheck-diff:
  
! installcheck-diff: \
!     configure-diff 
! 	@[ -f ./diff/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in diff" ; \
! 	(cd diff && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-dosutils installcheck-dosutils
! maybe-installcheck-dosutils:
  
! installcheck-dosutils: \
!     configure-dosutils 
! 	@[ -f ./dosutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in dosutils" ; \
! 	(cd dosutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-etc installcheck-etc
! maybe-installcheck-etc:
  
! installcheck-etc: \
!     configure-etc 
! 	@[ -f ./etc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in etc" ; \
! 	(cd etc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-fastjar installcheck-fastjar
! maybe-installcheck-fastjar:
  
! installcheck-fastjar: \
!     configure-fastjar 
! 	@[ -f ./fastjar/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in fastjar" ; \
! 	(cd fastjar && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 13996,14326 ----
  	          installcheck) \
  	  || exit 1
  
+ @endif libgui
  
! .PHONY: maybe-mostlyclean-libgui mostlyclean-libgui
! maybe-mostlyclean-libgui:
! @if libgui
! maybe-mostlyclean-libgui: mostlyclean-libgui
  
! mostlyclean-libgui: 
! 	@[ -f ./libgui/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in libgui" ; \
! 	(cd libgui && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif libgui
  
! .PHONY: maybe-clean-libgui clean-libgui
! maybe-clean-libgui:
! @if libgui
! maybe-clean-libgui: clean-libgui
  
! clean-libgui: 
! 	@[ -f ./libgui/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in libgui" ; \
! 	(cd libgui && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif libgui
  
! .PHONY: maybe-distclean-libgui distclean-libgui
! maybe-distclean-libgui:
! @if libgui
! maybe-distclean-libgui: distclean-libgui
  
! distclean-libgui: 
! 	@[ -f ./libgui/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in libgui" ; \
! 	(cd libgui && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif libgui
  
! .PHONY: maybe-maintainer-clean-libgui maintainer-clean-libgui
! maybe-maintainer-clean-libgui:
! @if libgui
! maybe-maintainer-clean-libgui: maintainer-clean-libgui
  
! maintainer-clean-libgui: 
! 	@[ -f ./libgui/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in libgui" ; \
! 	(cd libgui && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif libgui
  
  
! .PHONY: configure-libiberty maybe-configure-libiberty
! maybe-configure-libiberty:
! @if libiberty
! maybe-configure-libiberty: configure-libiberty
! configure-libiberty:
! 	@test -f stage_last && exit 0; \
! 	test ! -f libiberty/Makefile || exit 0; \
! 	[ -d libiberty ] || mkdir libiberty; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(HOST_EXPORTS) \
! 	echo Configuring in libiberty; \
! 	cd libiberty || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/libiberty"; \
! 	    libsrcdir="$$s/libiberty";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/libiberty"; \
! 	    libsrcdir="$$s/libiberty";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
! 	  || exit 1
! @endif libiberty
! 
! .PHONY: all-libiberty maybe-all-libiberty
! maybe-all-libiberty:
! @if libiberty
! TARGET-libiberty=all
! maybe-all-libiberty: all-libiberty
! all-libiberty: configure-libiberty
! 	@test -f stage_last && exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd libiberty && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-libiberty))
! @endif libiberty
! 
! .PHONY: check-libiberty maybe-check-libiberty
! maybe-check-libiberty:
! @if libiberty
! maybe-check-libiberty: check-libiberty
! 
! check-libiberty:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd libiberty && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif libiberty
! 
! .PHONY: install-libiberty maybe-install-libiberty
! maybe-install-libiberty:
! @if libiberty
! maybe-install-libiberty: install-libiberty
! 
! install-libiberty: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd libiberty && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif libiberty
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-libiberty info-libiberty
! maybe-info-libiberty:
! @if libiberty
! maybe-info-libiberty: info-libiberty
! 
! info-libiberty: \
!     configure-libiberty 
! 	@[ -f ./libiberty/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in libiberty" ; \
! 	(cd libiberty && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif libiberty
  
! .PHONY: maybe-dvi-libiberty dvi-libiberty
! maybe-dvi-libiberty:
! @if libiberty
! maybe-dvi-libiberty: dvi-libiberty
  
! dvi-libiberty: \
!     configure-libiberty 
! 	@[ -f ./libiberty/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in libiberty" ; \
! 	(cd libiberty && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif libiberty
  
! .PHONY: maybe-html-libiberty html-libiberty
! maybe-html-libiberty:
! @if libiberty
! maybe-html-libiberty: html-libiberty
  
! html-libiberty: \
!     configure-libiberty 
! 	@[ -f ./libiberty/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in libiberty" ; \
! 	(cd libiberty && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif libiberty
  
! .PHONY: maybe-TAGS-libiberty TAGS-libiberty
! maybe-TAGS-libiberty:
! @if libiberty
! maybe-TAGS-libiberty: TAGS-libiberty
  
! TAGS-libiberty: \
!     configure-libiberty 
! 	@[ -f ./libiberty/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in libiberty" ; \
! 	(cd libiberty && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif libiberty
  
! .PHONY: maybe-install-info-libiberty install-info-libiberty
! maybe-install-info-libiberty:
! @if libiberty
! maybe-install-info-libiberty: install-info-libiberty
  
! install-info-libiberty: \
!     configure-libiberty \
!     info-libiberty 
! 	@[ -f ./libiberty/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in libiberty" ; \
! 	(cd libiberty && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif libiberty
  
! .PHONY: maybe-installcheck-libiberty installcheck-libiberty
! maybe-installcheck-libiberty:
! @if libiberty
! maybe-installcheck-libiberty: installcheck-libiberty
  
! installcheck-libiberty: \
!     configure-libiberty 
! 	@[ -f ./libiberty/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in libiberty" ; \
! 	(cd libiberty && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** installcheck-fastjar: \
*** 8734,8952 ****
  	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-fileutils installcheck-fileutils
! maybe-installcheck-fileutils:
  
! installcheck-fileutils: \
!     configure-fileutils 
! 	@[ -f ./fileutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in fileutils" ; \
! 	(cd fileutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-findutils installcheck-findutils
! maybe-installcheck-findutils:
  
! installcheck-findutils: \
!     configure-findutils 
! 	@[ -f ./findutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in findutils" ; \
! 	(cd findutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-find installcheck-find
! maybe-installcheck-find:
  
! installcheck-find: \
!     configure-find 
! 	@[ -f ./find/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in find" ; \
! 	(cd find && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-flex installcheck-flex
! maybe-installcheck-flex:
  
! installcheck-flex: \
!     configure-flex 
! 	@[ -f ./flex/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in flex" ; \
! 	(cd flex && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
- .PHONY: maybe-installcheck-gas installcheck-gas
- maybe-installcheck-gas:
  
! installcheck-gas: \
!     configure-gas 
! 	@[ -f ./gas/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in gas" ; \
! 	(cd gas && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-gawk installcheck-gawk
! maybe-installcheck-gawk:
  
! installcheck-gawk: \
!     configure-gawk 
! 	@[ -f ./gawk/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in gawk" ; \
! 	(cd gawk && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-gettext installcheck-gettext
! maybe-installcheck-gettext:
  
! installcheck-gettext: \
!     configure-gettext 
! 	@[ -f ./gettext/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in gettext" ; \
! 	(cd gettext && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-gnuserv installcheck-gnuserv
! maybe-installcheck-gnuserv:
  
! installcheck-gnuserv: \
!     configure-gnuserv 
! 	@[ -f ./gnuserv/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in gnuserv" ; \
! 	(cd gnuserv && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-gprof installcheck-gprof
! maybe-installcheck-gprof:
  
! installcheck-gprof: \
!     configure-gprof 
! 	@[ -f ./gprof/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in gprof" ; \
! 	(cd gprof && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-gzip installcheck-gzip
! maybe-installcheck-gzip:
  
! installcheck-gzip: \
!     configure-gzip 
! 	@[ -f ./gzip/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in gzip" ; \
! 	(cd gzip && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 14328,14656 ----
  	          installcheck) \
  	  || exit 1
  
+ @endif libiberty
  
! .PHONY: maybe-mostlyclean-libiberty mostlyclean-libiberty
! maybe-mostlyclean-libiberty:
! @if libiberty
! maybe-mostlyclean-libiberty: mostlyclean-libiberty
  
! mostlyclean-libiberty: 
! 	@[ -f ./libiberty/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in libiberty" ; \
! 	(cd libiberty && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif libiberty
  
! .PHONY: maybe-clean-libiberty clean-libiberty
! maybe-clean-libiberty:
! @if libiberty
! maybe-clean-libiberty: clean-libiberty
  
! clean-libiberty: 
! 	@[ -f ./libiberty/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in libiberty" ; \
! 	(cd libiberty && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif libiberty
  
! .PHONY: maybe-distclean-libiberty distclean-libiberty
! maybe-distclean-libiberty:
! @if libiberty
! maybe-distclean-libiberty: distclean-libiberty
  
! distclean-libiberty: 
! 	@[ -f ./libiberty/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in libiberty" ; \
! 	(cd libiberty && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif libiberty
  
! .PHONY: maybe-maintainer-clean-libiberty maintainer-clean-libiberty
! maybe-maintainer-clean-libiberty:
! @if libiberty
! maybe-maintainer-clean-libiberty: maintainer-clean-libiberty
  
! maintainer-clean-libiberty: 
! 	@[ -f ./libiberty/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in libiberty" ; \
! 	(cd libiberty && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif libiberty
  
  
! .PHONY: configure-libtool maybe-configure-libtool
! maybe-configure-libtool:
! @if libtool
! maybe-configure-libtool: configure-libtool
! configure-libtool:
! 	@test ! -f libtool/Makefile || exit 0; \
! 	[ -d libtool ] || mkdir libtool; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in libtool; \
+ 	cd libtool || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/libtool"; \
+ 	    libsrcdir="$$s/libtool";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/libtool"; \
+ 	    libsrcdir="$$s/libtool";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif libtool
+ 
+ .PHONY: all-libtool maybe-all-libtool
+ maybe-all-libtool:
+ @if libtool
+ TARGET-libtool=all
+ maybe-all-libtool: all-libtool
+ all-libtool: configure-libtool
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd libtool && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-libtool))
! @endif libtool
! 
! .PHONY: check-libtool maybe-check-libtool
! maybe-check-libtool:
! @if libtool
! maybe-check-libtool: check-libtool
! 
! check-libtool:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd libtool && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif libtool
! 
! .PHONY: install-libtool maybe-install-libtool
! maybe-install-libtool:
! @if libtool
! maybe-install-libtool: install-libtool
! 
! install-libtool: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd libtool && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif libtool
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-libtool info-libtool
! maybe-info-libtool:
! @if libtool
! maybe-info-libtool: info-libtool
! 
! info-libtool: \
!     configure-libtool 
! 	@[ -f ./libtool/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in libtool" ; \
! 	(cd libtool && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif libtool
  
! .PHONY: maybe-dvi-libtool dvi-libtool
! maybe-dvi-libtool:
! @if libtool
! maybe-dvi-libtool: dvi-libtool
  
! dvi-libtool: \
!     configure-libtool 
! 	@[ -f ./libtool/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in libtool" ; \
! 	(cd libtool && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif libtool
  
! .PHONY: maybe-html-libtool html-libtool
! maybe-html-libtool:
! @if libtool
! maybe-html-libtool: html-libtool
  
! html-libtool: \
!     configure-libtool 
! 	@[ -f ./libtool/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in libtool" ; \
! 	(cd libtool && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif libtool
  
! .PHONY: maybe-TAGS-libtool TAGS-libtool
! maybe-TAGS-libtool:
! @if libtool
! maybe-TAGS-libtool: TAGS-libtool
  
! TAGS-libtool: \
!     configure-libtool 
! 	@[ -f ./libtool/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in libtool" ; \
! 	(cd libtool && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif libtool
  
! .PHONY: maybe-install-info-libtool install-info-libtool
! maybe-install-info-libtool:
! @if libtool
! maybe-install-info-libtool: install-info-libtool
  
! install-info-libtool: \
!     configure-libtool \
!     info-libtool 
! 	@[ -f ./libtool/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in libtool" ; \
! 	(cd libtool && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif libtool
  
! .PHONY: maybe-installcheck-libtool installcheck-libtool
! maybe-installcheck-libtool:
! @if libtool
! maybe-installcheck-libtool: installcheck-libtool
  
! installcheck-libtool: \
!     configure-libtool 
! 	@[ -f ./libtool/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in libtool" ; \
! 	(cd libtool && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** installcheck-gzip: \
*** 8954,9160 ****
  	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-hello installcheck-hello
! maybe-installcheck-hello:
  
! installcheck-hello: \
!     configure-hello 
! 	@[ -f ./hello/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in hello" ; \
! 	(cd hello && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-indent installcheck-indent
! maybe-installcheck-indent:
  
! installcheck-indent: \
!     configure-indent 
! 	@[ -f ./indent/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in indent" ; \
! 	(cd indent && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-intl installcheck-intl
! maybe-installcheck-intl:
  
! installcheck-intl: \
!     configure-intl 
! 	@[ -f ./intl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in intl" ; \
! 	(cd intl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-tcl installcheck-tcl
! maybe-installcheck-tcl:
  
! installcheck-tcl: \
!     configure-tcl 
! 	@[ -f ./tcl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in tcl" ; \
! 	(cd tcl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
- .PHONY: maybe-installcheck-itcl installcheck-itcl
- maybe-installcheck-itcl:
  
! installcheck-itcl: \
!     configure-itcl 
! 	@[ -f ./itcl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in itcl" ; \
! 	(cd itcl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-ld installcheck-ld
! maybe-installcheck-ld:
  
! installcheck-ld: \
!     configure-ld 
! 	@[ -f ./ld/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in ld" ; \
! 	(cd ld && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-libgui installcheck-libgui
! maybe-installcheck-libgui:
  
! installcheck-libgui: \
!     configure-libgui 
! 	@[ -f ./libgui/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in libgui" ; \
! 	(cd libgui && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-libiberty installcheck-libiberty
! maybe-installcheck-libiberty:
  
! installcheck-libiberty: \
!     configure-libiberty 
! 	@[ -f ./libiberty/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in libiberty" ; \
! 	(cd libiberty && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-libtool installcheck-libtool
! maybe-installcheck-libtool:
  
! installcheck-libtool: \
!     configure-libtool 
! 	@[ -f ./libtool/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in libtool" ; \
! 	(cd libtool && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
  .PHONY: maybe-installcheck-m4 installcheck-m4
  maybe-installcheck-m4:
  
  installcheck-m4: \
      configure-m4 
--- 14658,14973 ----
  	          installcheck) \
  	  || exit 1
  
+ @endif libtool
  
! .PHONY: maybe-mostlyclean-libtool mostlyclean-libtool
! maybe-mostlyclean-libtool:
! @if libtool
! maybe-mostlyclean-libtool: mostlyclean-libtool
  
! mostlyclean-libtool: 
! 	@[ -f ./libtool/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in libtool" ; \
! 	(cd libtool && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif libtool
  
! .PHONY: maybe-clean-libtool clean-libtool
! maybe-clean-libtool:
! @if libtool
! maybe-clean-libtool: clean-libtool
  
! clean-libtool: 
! 	@[ -f ./libtool/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in libtool" ; \
! 	(cd libtool && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif libtool
  
! .PHONY: maybe-distclean-libtool distclean-libtool
! maybe-distclean-libtool:
! @if libtool
! maybe-distclean-libtool: distclean-libtool
  
! distclean-libtool: 
! 	@[ -f ./libtool/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in libtool" ; \
! 	(cd libtool && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif libtool
  
! .PHONY: maybe-maintainer-clean-libtool maintainer-clean-libtool
! maybe-maintainer-clean-libtool:
! @if libtool
! maybe-maintainer-clean-libtool: maintainer-clean-libtool
  
! maintainer-clean-libtool: 
! 	@[ -f ./libtool/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in libtool" ; \
! 	(cd libtool && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif libtool
  
  
! .PHONY: configure-m4 maybe-configure-m4
! maybe-configure-m4:
! @if m4
! maybe-configure-m4: configure-m4
! configure-m4:
! 	@test ! -f m4/Makefile || exit 0; \
! 	[ -d m4 ] || mkdir m4; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in m4; \
+ 	cd m4 || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/m4"; \
+ 	    libsrcdir="$$s/m4";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/m4"; \
+ 	    libsrcdir="$$s/m4";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif m4
+ 
+ .PHONY: all-m4 maybe-all-m4
+ maybe-all-m4:
+ @if m4
+ TARGET-m4=all
+ maybe-all-m4: all-m4
+ all-m4: configure-m4
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd m4 && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-m4))
! @endif m4
! 
! .PHONY: check-m4 maybe-check-m4
! maybe-check-m4:
! @if m4
! maybe-check-m4: check-m4
! 
! check-m4:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd m4 && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif m4
! 
! .PHONY: install-m4 maybe-install-m4
! maybe-install-m4:
! @if m4
! maybe-install-m4: install-m4
! 
! install-m4: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd m4 && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif m4
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-m4 info-m4
! maybe-info-m4:
! @if m4
! maybe-info-m4: info-m4
! 
! info-m4: \
!     configure-m4 
! 	@[ -f ./m4/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in m4" ; \
! 	(cd m4 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif m4
  
! .PHONY: maybe-dvi-m4 dvi-m4
! maybe-dvi-m4:
! @if m4
! maybe-dvi-m4: dvi-m4
  
! dvi-m4: \
!     configure-m4 
! 	@[ -f ./m4/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in m4" ; \
! 	(cd m4 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif m4
  
! .PHONY: maybe-html-m4 html-m4
! maybe-html-m4:
! @if m4
! maybe-html-m4: html-m4
  
! html-m4: \
!     configure-m4 
! 	@[ -f ./m4/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in m4" ; \
! 	(cd m4 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif m4
  
! .PHONY: maybe-TAGS-m4 TAGS-m4
! maybe-TAGS-m4:
! @if m4
! maybe-TAGS-m4: TAGS-m4
  
! TAGS-m4: \
!     configure-m4 
! 	@[ -f ./m4/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in m4" ; \
! 	(cd m4 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif m4
  
! .PHONY: maybe-install-info-m4 install-info-m4
! maybe-install-info-m4:
! @if m4
! maybe-install-info-m4: install-info-m4
  
! install-info-m4: \
!     configure-m4 \
!     info-m4 
! 	@[ -f ./m4/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in m4" ; \
! 	(cd m4 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif m4
  
  .PHONY: maybe-installcheck-m4 installcheck-m4
  maybe-installcheck-m4:
+ @if m4
+ maybe-installcheck-m4: installcheck-m4
  
  installcheck-m4: \
      configure-m4 
*************** installcheck-m4: \
*** 9162,9168 ****
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
  	echo "Doing installcheck in m4" ; \
--- 14975,14982 ----
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
  	echo "Doing installcheck in m4" ; \
*************** installcheck-m4: \
*** 9174,9392 ****
  	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-make installcheck-make
! maybe-installcheck-make:
  
! installcheck-make: \
!     configure-make 
! 	@[ -f ./make/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in make" ; \
! 	(cd make && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-mmalloc installcheck-mmalloc
! maybe-installcheck-mmalloc:
  
! installcheck-mmalloc: \
!     configure-mmalloc 
! 	@[ -f ./mmalloc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in mmalloc" ; \
! 	(cd mmalloc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-patch installcheck-patch
! maybe-installcheck-patch:
  
! installcheck-patch: \
!     configure-patch 
! 	@[ -f ./patch/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in patch" ; \
! 	(cd patch && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-perl installcheck-perl
! maybe-installcheck-perl:
  
! installcheck-perl: \
!     configure-perl 
! 	@[ -f ./perl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in perl" ; \
! 	(cd perl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
- .PHONY: maybe-installcheck-prms installcheck-prms
- maybe-installcheck-prms:
  
! installcheck-prms: \
!     configure-prms 
! 	@[ -f ./prms/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in prms" ; \
! 	(cd prms && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-rcs installcheck-rcs
! maybe-installcheck-rcs:
  
! installcheck-rcs: \
!     configure-rcs 
! 	@[ -f ./rcs/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in rcs" ; \
! 	(cd rcs && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-readline installcheck-readline
! maybe-installcheck-readline:
  
! installcheck-readline: \
!     configure-readline 
! 	@[ -f ./readline/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in readline" ; \
! 	(cd readline && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-release installcheck-release
! maybe-installcheck-release:
  
! installcheck-release: \
!     configure-release 
! 	@[ -f ./release/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in release" ; \
! 	(cd release && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-recode installcheck-recode
! maybe-installcheck-recode:
  
! installcheck-recode: \
!     configure-recode 
! 	@[ -f ./recode/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in recode" ; \
! 	(cd recode && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-sed installcheck-sed
! maybe-installcheck-sed:
  
! installcheck-sed: \
!     configure-sed 
! 	@[ -f ./sed/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in sed" ; \
! 	(cd sed && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 14988,15316 ----
  	          installcheck) \
  	  || exit 1
  
+ @endif m4
  
! .PHONY: maybe-mostlyclean-m4 mostlyclean-m4
! maybe-mostlyclean-m4:
! @if m4
! maybe-mostlyclean-m4: mostlyclean-m4
  
! mostlyclean-m4: 
! 	@[ -f ./m4/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in m4" ; \
! 	(cd m4 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif m4
  
! .PHONY: maybe-clean-m4 clean-m4
! maybe-clean-m4:
! @if m4
! maybe-clean-m4: clean-m4
  
! clean-m4: 
! 	@[ -f ./m4/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in m4" ; \
! 	(cd m4 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif m4
  
! .PHONY: maybe-distclean-m4 distclean-m4
! maybe-distclean-m4:
! @if m4
! maybe-distclean-m4: distclean-m4
  
! distclean-m4: 
! 	@[ -f ./m4/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in m4" ; \
! 	(cd m4 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif m4
  
! .PHONY: maybe-maintainer-clean-m4 maintainer-clean-m4
! maybe-maintainer-clean-m4:
! @if m4
! maybe-maintainer-clean-m4: maintainer-clean-m4
  
! maintainer-clean-m4: 
! 	@[ -f ./m4/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in m4" ; \
! 	(cd m4 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif m4
  
  
! .PHONY: configure-make maybe-configure-make
! maybe-configure-make:
! @if make
! maybe-configure-make: configure-make
! configure-make:
! 	@test ! -f make/Makefile || exit 0; \
! 	[ -d make ] || mkdir make; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in make; \
+ 	cd make || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/make"; \
+ 	    libsrcdir="$$s/make";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/make"; \
+ 	    libsrcdir="$$s/make";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif make
+ 
+ .PHONY: all-make maybe-all-make
+ maybe-all-make:
+ @if make
+ TARGET-make=all
+ maybe-all-make: all-make
+ all-make: configure-make
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd make && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-make))
! @endif make
! 
! .PHONY: check-make maybe-check-make
! maybe-check-make:
! @if make
! maybe-check-make: check-make
! 
! check-make:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd make && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif make
! 
! .PHONY: install-make maybe-install-make
! maybe-install-make:
! @if make
! maybe-install-make: install-make
! 
! install-make: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd make && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif make
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-make info-make
! maybe-info-make:
! @if make
! maybe-info-make: info-make
! 
! info-make: \
!     configure-make 
! 	@[ -f ./make/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in make" ; \
! 	(cd make && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif make
  
! .PHONY: maybe-dvi-make dvi-make
! maybe-dvi-make:
! @if make
! maybe-dvi-make: dvi-make
  
! dvi-make: \
!     configure-make 
! 	@[ -f ./make/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in make" ; \
! 	(cd make && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif make
  
! .PHONY: maybe-html-make html-make
! maybe-html-make:
! @if make
! maybe-html-make: html-make
  
! html-make: \
!     configure-make 
! 	@[ -f ./make/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in make" ; \
! 	(cd make && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif make
  
! .PHONY: maybe-TAGS-make TAGS-make
! maybe-TAGS-make:
! @if make
! maybe-TAGS-make: TAGS-make
  
! TAGS-make: \
!     configure-make 
! 	@[ -f ./make/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in make" ; \
! 	(cd make && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif make
  
! .PHONY: maybe-install-info-make install-info-make
! maybe-install-info-make:
! @if make
! maybe-install-info-make: install-info-make
  
! install-info-make: \
!     configure-make \
!     info-make 
! 	@[ -f ./make/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in make" ; \
! 	(cd make && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif make
  
! .PHONY: maybe-installcheck-make installcheck-make
! maybe-installcheck-make:
! @if make
! maybe-installcheck-make: installcheck-make
  
! installcheck-make: \
!     configure-make 
! 	@[ -f ./make/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in make" ; \
! 	(cd make && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** installcheck-sed: \
*** 9394,9612 ****
  	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-send-pr installcheck-send-pr
! maybe-installcheck-send-pr:
  
! installcheck-send-pr: \
!     configure-send-pr 
! 	@[ -f ./send-pr/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in send-pr" ; \
! 	(cd send-pr && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-shellutils installcheck-shellutils
! maybe-installcheck-shellutils:
  
! installcheck-shellutils: \
!     configure-shellutils 
! 	@[ -f ./shellutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in shellutils" ; \
! 	(cd shellutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-sid installcheck-sid
! maybe-installcheck-sid:
  
! installcheck-sid: \
!     configure-sid 
! 	@[ -f ./sid/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in sid" ; \
! 	(cd sid && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-sim installcheck-sim
! maybe-installcheck-sim:
  
! installcheck-sim: \
!     configure-sim 
! 	@[ -f ./sim/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in sim" ; \
! 	(cd sim && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
- .PHONY: maybe-installcheck-tar installcheck-tar
- maybe-installcheck-tar:
  
! installcheck-tar: \
!     configure-tar 
! 	@[ -f ./tar/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in tar" ; \
! 	(cd tar && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-texinfo installcheck-texinfo
! maybe-installcheck-texinfo:
  
! installcheck-texinfo: \
!     configure-texinfo 
! 	@[ -f ./texinfo/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in texinfo" ; \
! 	(cd texinfo && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-textutils installcheck-textutils
! maybe-installcheck-textutils:
  
! installcheck-textutils: \
!     configure-textutils 
! 	@[ -f ./textutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in textutils" ; \
! 	(cd textutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-time installcheck-time
! maybe-installcheck-time:
  
! installcheck-time: \
!     configure-time 
! 	@[ -f ./time/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in time" ; \
! 	(cd time && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-uudecode installcheck-uudecode
! maybe-installcheck-uudecode:
  
! installcheck-uudecode: \
!     configure-uudecode 
! 	@[ -f ./uudecode/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in uudecode" ; \
! 	(cd uudecode && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-wdiff installcheck-wdiff
! maybe-installcheck-wdiff:
  
! installcheck-wdiff: \
!     configure-wdiff 
! 	@[ -f ./wdiff/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in wdiff" ; \
! 	(cd wdiff && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 15318,15641 ----
  	          installcheck) \
  	  || exit 1
  
+ @endif make
  
! .PHONY: maybe-mostlyclean-make mostlyclean-make
! maybe-mostlyclean-make:
! @if make
! maybe-mostlyclean-make: mostlyclean-make
  
! mostlyclean-make: 
! 	@[ -f ./make/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in make" ; \
! 	(cd make && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif make
  
! .PHONY: maybe-clean-make clean-make
! maybe-clean-make:
! @if make
! maybe-clean-make: clean-make
  
! clean-make: 
! 	@[ -f ./make/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in make" ; \
! 	(cd make && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif make
  
! .PHONY: maybe-distclean-make distclean-make
! maybe-distclean-make:
! @if make
! maybe-distclean-make: distclean-make
  
! distclean-make: 
! 	@[ -f ./make/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in make" ; \
! 	(cd make && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif make
  
! .PHONY: maybe-maintainer-clean-make maintainer-clean-make
! maybe-maintainer-clean-make:
! @if make
! maybe-maintainer-clean-make: maintainer-clean-make
  
! maintainer-clean-make: 
! 	@[ -f ./make/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in make" ; \
! 	(cd make && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif make
  
  
! .PHONY: configure-mmalloc maybe-configure-mmalloc
! maybe-configure-mmalloc:
! @if mmalloc
! maybe-configure-mmalloc: configure-mmalloc
! configure-mmalloc:
! 	@test ! -f mmalloc/Makefile || exit 0; \
! 	[ -d mmalloc ] || mkdir mmalloc; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in mmalloc; \
+ 	cd mmalloc || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/mmalloc"; \
+ 	    libsrcdir="$$s/mmalloc";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/mmalloc"; \
+ 	    libsrcdir="$$s/mmalloc";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif mmalloc
+ 
+ .PHONY: all-mmalloc maybe-all-mmalloc
+ maybe-all-mmalloc:
+ @if mmalloc
+ TARGET-mmalloc=all
+ maybe-all-mmalloc: all-mmalloc
+ all-mmalloc: configure-mmalloc
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd mmalloc && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-mmalloc))
! @endif mmalloc
! 
! .PHONY: check-mmalloc maybe-check-mmalloc
! maybe-check-mmalloc:
! @if mmalloc
! maybe-check-mmalloc: check-mmalloc
! 
! check-mmalloc:
! 
! @endif mmalloc
! 
! .PHONY: install-mmalloc maybe-install-mmalloc
! maybe-install-mmalloc:
! @if mmalloc
! maybe-install-mmalloc: install-mmalloc
! 
! install-mmalloc: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd mmalloc && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif mmalloc
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-mmalloc info-mmalloc
! maybe-info-mmalloc:
! @if mmalloc
! maybe-info-mmalloc: info-mmalloc
! 
! info-mmalloc: \
!     configure-mmalloc 
! 	@[ -f ./mmalloc/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in mmalloc" ; \
! 	(cd mmalloc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif mmalloc
  
! .PHONY: maybe-dvi-mmalloc dvi-mmalloc
! maybe-dvi-mmalloc:
! @if mmalloc
! maybe-dvi-mmalloc: dvi-mmalloc
  
! dvi-mmalloc: \
!     configure-mmalloc 
! 	@[ -f ./mmalloc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in mmalloc" ; \
! 	(cd mmalloc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif mmalloc
  
! .PHONY: maybe-html-mmalloc html-mmalloc
! maybe-html-mmalloc:
! @if mmalloc
! maybe-html-mmalloc: html-mmalloc
  
! html-mmalloc: \
!     configure-mmalloc 
! 	@[ -f ./mmalloc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in mmalloc" ; \
! 	(cd mmalloc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif mmalloc
  
! .PHONY: maybe-TAGS-mmalloc TAGS-mmalloc
! maybe-TAGS-mmalloc:
! @if mmalloc
! maybe-TAGS-mmalloc: TAGS-mmalloc
  
! TAGS-mmalloc: \
!     configure-mmalloc 
! 	@[ -f ./mmalloc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in mmalloc" ; \
! 	(cd mmalloc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif mmalloc
  
! .PHONY: maybe-install-info-mmalloc install-info-mmalloc
! maybe-install-info-mmalloc:
! @if mmalloc
! maybe-install-info-mmalloc: install-info-mmalloc
  
! install-info-mmalloc: \
!     configure-mmalloc \
!     info-mmalloc 
! 	@[ -f ./mmalloc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in mmalloc" ; \
! 	(cd mmalloc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif mmalloc
  
! .PHONY: maybe-installcheck-mmalloc installcheck-mmalloc
! maybe-installcheck-mmalloc:
! @if mmalloc
! maybe-installcheck-mmalloc: installcheck-mmalloc
  
! installcheck-mmalloc: \
!     configure-mmalloc 
! 	@[ -f ./mmalloc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in mmalloc" ; \
! 	(cd mmalloc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** installcheck-wdiff: \
*** 9614,9835 ****
  	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-zip installcheck-zip
! maybe-installcheck-zip:
  
! installcheck-zip: \
!     configure-zip 
! 	@[ -f ./zip/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in zip" ; \
! 	(cd zip && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-zlib installcheck-zlib
! maybe-installcheck-zlib:
  
! installcheck-zlib: \
!     configure-zlib 
! 	@[ -f ./zlib/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in zlib" ; \
! 	(cd zlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-gdb installcheck-gdb
! maybe-installcheck-gdb:
  
! installcheck-gdb: \
!     configure-gdb 
! 	@[ -f ./gdb/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in gdb" ; \
! 	(cd gdb && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-expect installcheck-expect
! maybe-installcheck-expect:
  
! installcheck-expect: \
!     configure-expect 
! 	@[ -f ./expect/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in expect" ; \
! 	(cd expect && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
- .PHONY: maybe-installcheck-guile installcheck-guile
- maybe-installcheck-guile:
  
! installcheck-guile: \
!     configure-guile 
! 	@[ -f ./guile/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in guile" ; \
! 	(cd guile && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-tk installcheck-tk
! maybe-installcheck-tk:
  
! installcheck-tk: \
!     configure-tk 
! 	@[ -f ./tk/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in tk" ; \
! 	(cd tk && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-tix installcheck-tix
! maybe-installcheck-tix:
  
! installcheck-tix: \
!     configure-tix 
! 	@[ -f ./tix/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in tix" ; \
! 	(cd tix && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-libtermcap installcheck-libtermcap
! maybe-installcheck-libtermcap:
  
! installcheck-libtermcap: \
!     configure-libtermcap 
! 	@[ -f ./libtermcap/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in libtermcap" ; \
! 	(cd libtermcap && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-utils installcheck-utils
! maybe-installcheck-utils:
  
! installcheck-utils: \
!     configure-utils 
! 	@[ -f ./utils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in utils" ; \
! 	(cd utils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
  
! # Target modules.
! 
! .PHONY: maybe-installcheck-target-libstdc++-v3 installcheck-target-libstdc++-v3
! maybe-installcheck-target-libstdc++-v3:
! 
! installcheck-target-libstdc++-v3: \
!     configure-target-libstdc++-v3 
! 	@[ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing installcheck in $(TARGET_SUBDIR)/libstdc++-v3" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libstdc++-v3 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 15643,15971 ----
  	          installcheck) \
  	  || exit 1
  
+ @endif mmalloc
  
! .PHONY: maybe-mostlyclean-mmalloc mostlyclean-mmalloc
! maybe-mostlyclean-mmalloc:
! @if mmalloc
! maybe-mostlyclean-mmalloc: mostlyclean-mmalloc
  
! mostlyclean-mmalloc: 
! 	@[ -f ./mmalloc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in mmalloc" ; \
! 	(cd mmalloc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif mmalloc
  
! .PHONY: maybe-clean-mmalloc clean-mmalloc
! maybe-clean-mmalloc:
! @if mmalloc
! maybe-clean-mmalloc: clean-mmalloc
  
! clean-mmalloc: 
! 	@[ -f ./mmalloc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in mmalloc" ; \
! 	(cd mmalloc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif mmalloc
  
! .PHONY: maybe-distclean-mmalloc distclean-mmalloc
! maybe-distclean-mmalloc:
! @if mmalloc
! maybe-distclean-mmalloc: distclean-mmalloc
  
! distclean-mmalloc: 
! 	@[ -f ./mmalloc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in mmalloc" ; \
! 	(cd mmalloc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif mmalloc
  
! .PHONY: maybe-maintainer-clean-mmalloc maintainer-clean-mmalloc
! maybe-maintainer-clean-mmalloc:
! @if mmalloc
! maybe-maintainer-clean-mmalloc: maintainer-clean-mmalloc
  
! maintainer-clean-mmalloc: 
! 	@[ -f ./mmalloc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in mmalloc" ; \
! 	(cd mmalloc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif mmalloc
  
  
! .PHONY: configure-patch maybe-configure-patch
! maybe-configure-patch:
! @if patch
! maybe-configure-patch: configure-patch
! configure-patch:
! 	@test ! -f patch/Makefile || exit 0; \
! 	[ -d patch ] || mkdir patch; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in patch; \
+ 	cd patch || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/patch"; \
+ 	    libsrcdir="$$s/patch";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/patch"; \
+ 	    libsrcdir="$$s/patch";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif patch
+ 
+ .PHONY: all-patch maybe-all-patch
+ maybe-all-patch:
+ @if patch
+ TARGET-patch=all
+ maybe-all-patch: all-patch
+ all-patch: configure-patch
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd patch && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-patch))
! @endif patch
! 
! .PHONY: check-patch maybe-check-patch
! maybe-check-patch:
! @if patch
! maybe-check-patch: check-patch
! 
! check-patch:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd patch && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif patch
! 
! .PHONY: install-patch maybe-install-patch
! maybe-install-patch:
! @if patch
! maybe-install-patch: install-patch
! 
! install-patch: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd patch && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif patch
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-patch info-patch
! maybe-info-patch:
! @if patch
! maybe-info-patch: info-patch
! 
! info-patch: \
!     configure-patch 
! 	@[ -f ./patch/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in patch" ; \
! 	(cd patch && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif patch
  
! .PHONY: maybe-dvi-patch dvi-patch
! maybe-dvi-patch:
! @if patch
! maybe-dvi-patch: dvi-patch
  
! dvi-patch: \
!     configure-patch 
! 	@[ -f ./patch/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in patch" ; \
! 	(cd patch && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif patch
  
! .PHONY: maybe-html-patch html-patch
! maybe-html-patch:
! @if patch
! maybe-html-patch: html-patch
  
! html-patch: \
!     configure-patch 
! 	@[ -f ./patch/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in patch" ; \
! 	(cd patch && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif patch
  
! .PHONY: maybe-TAGS-patch TAGS-patch
! maybe-TAGS-patch:
! @if patch
! maybe-TAGS-patch: TAGS-patch
  
! TAGS-patch: \
!     configure-patch 
! 	@[ -f ./patch/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in patch" ; \
! 	(cd patch && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif patch
  
! .PHONY: maybe-install-info-patch install-info-patch
! maybe-install-info-patch:
! @if patch
! maybe-install-info-patch: install-info-patch
  
! install-info-patch: \
!     configure-patch \
!     info-patch 
! 	@[ -f ./patch/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in patch" ; \
! 	(cd patch && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif patch
  
+ .PHONY: maybe-installcheck-patch installcheck-patch
+ maybe-installcheck-patch:
+ @if patch
+ maybe-installcheck-patch: installcheck-patch
  
! installcheck-patch: \
!     configure-patch 
! 	@[ -f ./patch/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in patch" ; \
! 	(cd patch && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** installcheck-target-libstdc++-v3: \
*** 9837,10055 ****
  	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-target-newlib installcheck-target-newlib
! maybe-installcheck-target-newlib:
  
! installcheck-target-newlib: \
!     configure-target-newlib 
! 	@[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing installcheck in $(TARGET_SUBDIR)/newlib" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/newlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-target-libf2c installcheck-target-libf2c
! maybe-installcheck-target-libf2c:
  
! installcheck-target-libf2c: \
!     configure-target-libf2c 
! 	@[ -f $(TARGET_SUBDIR)/libf2c/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing installcheck in $(TARGET_SUBDIR)/libf2c" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libf2c && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-target-libobjc installcheck-target-libobjc
! maybe-installcheck-target-libobjc:
  
! installcheck-target-libobjc: \
!     configure-target-libobjc 
! 	@[ -f $(TARGET_SUBDIR)/libobjc/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing installcheck in $(TARGET_SUBDIR)/libobjc" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libobjc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-target-libtermcap installcheck-target-libtermcap
! maybe-installcheck-target-libtermcap:
  
! installcheck-target-libtermcap: \
!     configure-target-libtermcap 
! 	@[ -f $(TARGET_SUBDIR)/libtermcap/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing installcheck in $(TARGET_SUBDIR)/libtermcap" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libtermcap && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
- .PHONY: maybe-installcheck-target-winsup installcheck-target-winsup
- maybe-installcheck-target-winsup:
  
! installcheck-target-winsup: \
!     configure-target-winsup 
! 	@[ -f $(TARGET_SUBDIR)/winsup/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing installcheck in $(TARGET_SUBDIR)/winsup" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/winsup && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-target-libgloss installcheck-target-libgloss
! maybe-installcheck-target-libgloss:
  
! installcheck-target-libgloss: \
!     configure-target-libgloss 
! 	@[ -f $(TARGET_SUBDIR)/libgloss/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing installcheck in $(TARGET_SUBDIR)/libgloss" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libgloss && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-target-libiberty installcheck-target-libiberty
! maybe-installcheck-target-libiberty:
  
! installcheck-target-libiberty: \
!     configure-target-libiberty 
! 	@[ -f $(TARGET_SUBDIR)/libiberty/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing installcheck in $(TARGET_SUBDIR)/libiberty" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libiberty && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-target-gperf installcheck-target-gperf
! maybe-installcheck-target-gperf:
  
! installcheck-target-gperf: \
!     configure-target-gperf 
! 	@[ -f $(TARGET_SUBDIR)/gperf/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing installcheck in $(TARGET_SUBDIR)/gperf" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/gperf && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-target-examples installcheck-target-examples
! maybe-installcheck-target-examples:
  
! installcheck-target-examples: \
!     configure-target-examples 
! 	@[ -f $(TARGET_SUBDIR)/examples/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing installcheck in $(TARGET_SUBDIR)/examples" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/examples && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-target-libffi installcheck-target-libffi
! maybe-installcheck-target-libffi:
  
! installcheck-target-libffi: \
!     configure-target-libffi 
! 	@[ -f $(TARGET_SUBDIR)/libffi/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing installcheck in $(TARGET_SUBDIR)/libffi" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libffi && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 15973,16301 ----
  	          installcheck) \
  	  || exit 1
  
+ @endif patch
  
! .PHONY: maybe-mostlyclean-patch mostlyclean-patch
! maybe-mostlyclean-patch:
! @if patch
! maybe-mostlyclean-patch: mostlyclean-patch
  
! mostlyclean-patch: 
! 	@[ -f ./patch/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in patch" ; \
! 	(cd patch && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif patch
  
! .PHONY: maybe-clean-patch clean-patch
! maybe-clean-patch:
! @if patch
! maybe-clean-patch: clean-patch
  
! clean-patch: 
! 	@[ -f ./patch/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in patch" ; \
! 	(cd patch && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif patch
  
! .PHONY: maybe-distclean-patch distclean-patch
! maybe-distclean-patch:
! @if patch
! maybe-distclean-patch: distclean-patch
  
! distclean-patch: 
! 	@[ -f ./patch/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in patch" ; \
! 	(cd patch && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif patch
  
! .PHONY: maybe-maintainer-clean-patch maintainer-clean-patch
! maybe-maintainer-clean-patch:
! @if patch
! maybe-maintainer-clean-patch: maintainer-clean-patch
  
! maintainer-clean-patch: 
! 	@[ -f ./patch/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in patch" ; \
! 	(cd patch && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif patch
  
  
! .PHONY: configure-perl maybe-configure-perl
! maybe-configure-perl:
! @if perl
! maybe-configure-perl: configure-perl
! configure-perl:
! 	@test ! -f perl/Makefile || exit 0; \
! 	[ -d perl ] || mkdir perl; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in perl; \
+ 	cd perl || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/perl"; \
+ 	    libsrcdir="$$s/perl";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/perl"; \
+ 	    libsrcdir="$$s/perl";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif perl
+ 
+ .PHONY: all-perl maybe-all-perl
+ maybe-all-perl:
+ @if perl
+ TARGET-perl=all
+ maybe-all-perl: all-perl
+ all-perl: configure-perl
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd perl && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-perl))
! @endif perl
! 
! .PHONY: check-perl maybe-check-perl
! maybe-check-perl:
! @if perl
! maybe-check-perl: check-perl
! 
! check-perl:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd perl && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif perl
! 
! .PHONY: install-perl maybe-install-perl
! maybe-install-perl:
! @if perl
! maybe-install-perl: install-perl
! 
! install-perl: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd perl && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif perl
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-perl info-perl
! maybe-info-perl:
! @if perl
! maybe-info-perl: info-perl
! 
! info-perl: \
!     configure-perl 
! 	@[ -f ./perl/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in perl" ; \
! 	(cd perl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif perl
  
! .PHONY: maybe-dvi-perl dvi-perl
! maybe-dvi-perl:
! @if perl
! maybe-dvi-perl: dvi-perl
  
! dvi-perl: \
!     configure-perl 
! 	@[ -f ./perl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in perl" ; \
! 	(cd perl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif perl
  
! .PHONY: maybe-html-perl html-perl
! maybe-html-perl:
! @if perl
! maybe-html-perl: html-perl
  
! html-perl: \
!     configure-perl 
! 	@[ -f ./perl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in perl" ; \
! 	(cd perl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif perl
  
! .PHONY: maybe-TAGS-perl TAGS-perl
! maybe-TAGS-perl:
! @if perl
! maybe-TAGS-perl: TAGS-perl
  
! TAGS-perl: \
!     configure-perl 
! 	@[ -f ./perl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in perl" ; \
! 	(cd perl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif perl
  
! .PHONY: maybe-install-info-perl install-info-perl
! maybe-install-info-perl:
! @if perl
! maybe-install-info-perl: install-info-perl
  
! install-info-perl: \
!     configure-perl \
!     info-perl 
! 	@[ -f ./perl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in perl" ; \
! 	(cd perl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif perl
  
! .PHONY: maybe-installcheck-perl installcheck-perl
! maybe-installcheck-perl:
! @if perl
! maybe-installcheck-perl: installcheck-perl
  
! installcheck-perl: \
!     configure-perl 
! 	@[ -f ./perl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in perl" ; \
! 	(cd perl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** installcheck-target-libffi: \
*** 10057,10361 ****
  	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-target-libjava installcheck-target-libjava
! maybe-installcheck-target-libjava:
  
! installcheck-target-libjava: \
!     configure-target-libjava 
! 	@[ -f $(TARGET_SUBDIR)/libjava/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing installcheck in $(TARGET_SUBDIR)/libjava" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libjava && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-target-zlib installcheck-target-zlib
! maybe-installcheck-target-zlib:
  
! installcheck-target-zlib: \
!     configure-target-zlib 
! 	@[ -f $(TARGET_SUBDIR)/zlib/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing installcheck in $(TARGET_SUBDIR)/zlib" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/zlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-target-boehm-gc installcheck-target-boehm-gc
! maybe-installcheck-target-boehm-gc:
  
! installcheck-target-boehm-gc: \
!     configure-target-boehm-gc 
! 	@[ -f $(TARGET_SUBDIR)/boehm-gc/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing installcheck in $(TARGET_SUBDIR)/boehm-gc" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/boehm-gc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
! .PHONY: maybe-installcheck-target-qthreads installcheck-target-qthreads
! maybe-installcheck-target-qthreads:
  
! installcheck-target-qthreads: \
!     configure-target-qthreads 
! 	@[ -f $(TARGET_SUBDIR)/qthreads/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing installcheck in $(TARGET_SUBDIR)/qthreads" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/qthreads && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
- .PHONY: maybe-installcheck-target-rda installcheck-target-rda
- maybe-installcheck-target-rda:
  
! installcheck-target-rda: \
!     configure-target-rda 
! 	@[ -f $(TARGET_SUBDIR)/rda/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing installcheck in $(TARGET_SUBDIR)/rda" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/rda && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
  
  
! .PHONY: do-mostlyclean
! do-mostlyclean: mostlyclean-host mostlyclean-target
  
! .PHONY: mostlyclean-host
! mostlyclean-host: maybe-mostlyclean-gcc  \
!     maybe-mostlyclean-ash \
!     maybe-mostlyclean-autoconf \
!     maybe-mostlyclean-automake \
!     maybe-mostlyclean-bash \
!     maybe-mostlyclean-bfd \
!     maybe-mostlyclean-opcodes \
!     maybe-mostlyclean-binutils \
!     maybe-mostlyclean-bison \
!     maybe-mostlyclean-byacc \
!     maybe-mostlyclean-bzip2 \
!     maybe-mostlyclean-dejagnu \
!     maybe-mostlyclean-diff \
!     maybe-mostlyclean-dosutils \
!     maybe-mostlyclean-etc \
!     maybe-mostlyclean-fastjar \
!     maybe-mostlyclean-fileutils \
!     maybe-mostlyclean-findutils \
!     maybe-mostlyclean-find \
!     maybe-mostlyclean-flex \
!     maybe-mostlyclean-gas \
!     maybe-mostlyclean-gawk \
!     maybe-mostlyclean-gettext \
!     maybe-mostlyclean-gnuserv \
!     maybe-mostlyclean-gprof \
!     maybe-mostlyclean-gzip \
!     maybe-mostlyclean-hello \
!     maybe-mostlyclean-indent \
!     maybe-mostlyclean-intl \
!     maybe-mostlyclean-tcl \
!     maybe-mostlyclean-itcl \
!     maybe-mostlyclean-ld \
!     maybe-mostlyclean-libgui \
!     maybe-mostlyclean-libiberty \
!     maybe-mostlyclean-libtool \
!     maybe-mostlyclean-m4 \
!     maybe-mostlyclean-make \
!     maybe-mostlyclean-mmalloc \
!     maybe-mostlyclean-patch \
!     maybe-mostlyclean-perl \
!     maybe-mostlyclean-prms \
!     maybe-mostlyclean-rcs \
!     maybe-mostlyclean-readline \
!     maybe-mostlyclean-release \
!     maybe-mostlyclean-recode \
!     maybe-mostlyclean-sed \
!     maybe-mostlyclean-send-pr \
!     maybe-mostlyclean-shellutils \
!     maybe-mostlyclean-sid \
!     maybe-mostlyclean-sim \
!     maybe-mostlyclean-tar \
!     maybe-mostlyclean-texinfo \
!     maybe-mostlyclean-textutils \
!     maybe-mostlyclean-time \
!     maybe-mostlyclean-uudecode \
!     maybe-mostlyclean-wdiff \
!     maybe-mostlyclean-zip \
!     maybe-mostlyclean-zlib \
!     maybe-mostlyclean-gdb \
!     maybe-mostlyclean-expect \
!     maybe-mostlyclean-guile \
!     maybe-mostlyclean-tk \
!     maybe-mostlyclean-tix \
!     maybe-mostlyclean-libtermcap \
!     maybe-mostlyclean-utils
  
! .PHONY: mostlyclean-target
! mostlyclean-target:  \
!     maybe-mostlyclean-target-libstdc++-v3 \
!     maybe-mostlyclean-target-newlib \
!     maybe-mostlyclean-target-libf2c \
!     maybe-mostlyclean-target-libobjc \
!     maybe-mostlyclean-target-libtermcap \
!     maybe-mostlyclean-target-winsup \
!     maybe-mostlyclean-target-libgloss \
!     maybe-mostlyclean-target-libiberty \
!     maybe-mostlyclean-target-gperf \
!     maybe-mostlyclean-target-examples \
!     maybe-mostlyclean-target-libffi \
!     maybe-mostlyclean-target-libjava \
!     maybe-mostlyclean-target-zlib \
!     maybe-mostlyclean-target-boehm-gc \
!     maybe-mostlyclean-target-qthreads \
!     maybe-mostlyclean-target-rda
  
! # GCC, the eternal special case
! .PHONY: maybe-mostlyclean-gcc mostlyclean-gcc
! maybe-mostlyclean-gcc:
! mostlyclean-gcc: 
! 	@[ -f ./gcc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_GCC_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in gcc" ; \
! 	(cd gcc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
! # Host modules.
  
! .PHONY: maybe-mostlyclean-ash mostlyclean-ash
! maybe-mostlyclean-ash:
  
! mostlyclean-ash: 
! 	@[ -f ./ash/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in ash" ; \
! 	(cd ash && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-autoconf mostlyclean-autoconf
! maybe-mostlyclean-autoconf:
  
! mostlyclean-autoconf: 
! 	@[ -f ./autoconf/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in autoconf" ; \
! 	(cd autoconf && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-automake mostlyclean-automake
! maybe-mostlyclean-automake:
  
! mostlyclean-automake: 
! 	@[ -f ./automake/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in automake" ; \
! 	(cd automake && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-bash mostlyclean-bash
! maybe-mostlyclean-bash:
  
! mostlyclean-bash: 
! 	@[ -f ./bash/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in bash" ; \
! 	(cd bash && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 16303,16656 ----
  	          installcheck) \
  	  || exit 1
  
+ @endif perl
  
! .PHONY: maybe-mostlyclean-perl mostlyclean-perl
! maybe-mostlyclean-perl:
! @if perl
! maybe-mostlyclean-perl: mostlyclean-perl
  
! mostlyclean-perl: 
! 	@[ -f ./perl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in perl" ; \
! 	(cd perl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif perl
  
! .PHONY: maybe-clean-perl clean-perl
! maybe-clean-perl:
! @if perl
! maybe-clean-perl: clean-perl
  
! clean-perl: 
! 	@[ -f ./perl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in perl" ; \
! 	(cd perl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif perl
  
! .PHONY: maybe-distclean-perl distclean-perl
! maybe-distclean-perl:
! @if perl
! maybe-distclean-perl: distclean-perl
  
! distclean-perl: 
! 	@[ -f ./perl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in perl" ; \
! 	(cd perl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif perl
  
! .PHONY: maybe-maintainer-clean-perl maintainer-clean-perl
! maybe-maintainer-clean-perl:
! @if perl
! maybe-maintainer-clean-perl: maintainer-clean-perl
  
! maintainer-clean-perl: 
! 	@[ -f ./perl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in perl" ; \
! 	(cd perl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif perl
  
  
! .PHONY: configure-prms maybe-configure-prms
! maybe-configure-prms:
! @if prms
! maybe-configure-prms: configure-prms
! configure-prms:
! 	@test ! -f prms/Makefile || exit 0; \
! 	[ -d prms ] || mkdir prms; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in prms; \
+ 	cd prms || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/prms"; \
+ 	    libsrcdir="$$s/prms";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/prms"; \
+ 	    libsrcdir="$$s/prms";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif prms
+ 
+ .PHONY: all-prms maybe-all-prms
+ maybe-all-prms:
+ @if prms
+ TARGET-prms=all
+ maybe-all-prms: all-prms
+ all-prms: configure-prms
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd prms && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-prms))
! @endif prms
! 
! .PHONY: check-prms maybe-check-prms
! maybe-check-prms:
! @if prms
! maybe-check-prms: check-prms
! 
! check-prms:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd prms && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif prms
! 
! .PHONY: install-prms maybe-install-prms
! maybe-install-prms:
! @if prms
! maybe-install-prms: install-prms
! 
! install-prms: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd prms && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif prms
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-prms info-prms
! maybe-info-prms:
! @if prms
! maybe-info-prms: info-prms
! 
! info-prms: \
!     configure-prms 
! 	@[ -f ./prms/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in prms" ; \
! 	(cd prms && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif prms
  
+ .PHONY: maybe-dvi-prms dvi-prms
+ maybe-dvi-prms:
+ @if prms
+ maybe-dvi-prms: dvi-prms
  
! dvi-prms: \
!     configure-prms 
! 	@[ -f ./prms/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	echo "Doing dvi in prms" ; \
! 	(cd prms && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
! 	  || exit 1
  
! @endif prms
  
! .PHONY: maybe-html-prms html-prms
! maybe-html-prms:
! @if prms
! maybe-html-prms: html-prms
  
! html-prms: \
!     configure-prms 
! 	@[ -f ./prms/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in prms" ; \
! 	(cd prms && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
! @endif prms
  
! .PHONY: maybe-TAGS-prms TAGS-prms
! maybe-TAGS-prms:
! @if prms
! maybe-TAGS-prms: TAGS-prms
  
! TAGS-prms: \
!     configure-prms 
! 	@[ -f ./prms/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in prms" ; \
! 	(cd prms && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif prms
  
! .PHONY: maybe-install-info-prms install-info-prms
! maybe-install-info-prms:
! @if prms
! maybe-install-info-prms: install-info-prms
  
! install-info-prms: \
!     configure-prms \
!     info-prms 
! 	@[ -f ./prms/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in prms" ; \
! 	(cd prms && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif prms
  
! .PHONY: maybe-installcheck-prms installcheck-prms
! maybe-installcheck-prms:
! @if prms
! maybe-installcheck-prms: installcheck-prms
  
! installcheck-prms: \
!     configure-prms 
! 	@[ -f ./prms/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in prms" ; \
! 	(cd prms && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif prms
  
! .PHONY: maybe-mostlyclean-prms mostlyclean-prms
! maybe-mostlyclean-prms:
! @if prms
! maybe-mostlyclean-prms: mostlyclean-prms
  
! mostlyclean-prms: 
! 	@[ -f ./prms/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in prms" ; \
! 	(cd prms && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** mostlyclean-bash: 
*** 10363,10571 ****
  	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-bfd mostlyclean-bfd
! maybe-mostlyclean-bfd:
  
! mostlyclean-bfd: 
! 	@[ -f ./bfd/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in bfd" ; \
! 	(cd bfd && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-opcodes mostlyclean-opcodes
! maybe-mostlyclean-opcodes:
  
! mostlyclean-opcodes: 
! 	@[ -f ./opcodes/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in opcodes" ; \
! 	(cd opcodes && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-binutils mostlyclean-binutils
! maybe-mostlyclean-binutils:
  
! mostlyclean-binutils: 
! 	@[ -f ./binutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in binutils" ; \
! 	(cd binutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
- .PHONY: maybe-mostlyclean-bison mostlyclean-bison
- maybe-mostlyclean-bison:
  
! mostlyclean-bison: 
! 	@[ -f ./bison/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in bison" ; \
! 	(cd bison && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-byacc mostlyclean-byacc
! maybe-mostlyclean-byacc:
  
! mostlyclean-byacc: 
! 	@[ -f ./byacc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in byacc" ; \
! 	(cd byacc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-bzip2 mostlyclean-bzip2
! maybe-mostlyclean-bzip2:
  
! mostlyclean-bzip2: 
! 	@[ -f ./bzip2/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in bzip2" ; \
! 	(cd bzip2 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-dejagnu mostlyclean-dejagnu
! maybe-mostlyclean-dejagnu:
  
! mostlyclean-dejagnu: 
! 	@[ -f ./dejagnu/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in dejagnu" ; \
! 	(cd dejagnu && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-diff mostlyclean-diff
! maybe-mostlyclean-diff:
  
! mostlyclean-diff: 
! 	@[ -f ./diff/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in diff" ; \
! 	(cd diff && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-dosutils mostlyclean-dosutils
! maybe-mostlyclean-dosutils:
  
! mostlyclean-dosutils: 
! 	@[ -f ./dosutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in dosutils" ; \
! 	(cd dosutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-etc mostlyclean-etc
! maybe-mostlyclean-etc:
  
! mostlyclean-etc: 
! 	@[ -f ./etc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in etc" ; \
! 	(cd etc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 16658,16986 ----
  	          mostlyclean) \
  	  || exit 1
  
+ @endif prms
  
! .PHONY: maybe-clean-prms clean-prms
! maybe-clean-prms:
! @if prms
! maybe-clean-prms: clean-prms
  
! clean-prms: 
! 	@[ -f ./prms/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in prms" ; \
! 	(cd prms && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif prms
  
! .PHONY: maybe-distclean-prms distclean-prms
! maybe-distclean-prms:
! @if prms
! maybe-distclean-prms: distclean-prms
  
! distclean-prms: 
! 	@[ -f ./prms/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in prms" ; \
! 	(cd prms && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif prms
  
! .PHONY: maybe-maintainer-clean-prms maintainer-clean-prms
! maybe-maintainer-clean-prms:
! @if prms
! maybe-maintainer-clean-prms: maintainer-clean-prms
  
! maintainer-clean-prms: 
! 	@[ -f ./prms/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in prms" ; \
! 	(cd prms && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif prms
  
  
! .PHONY: configure-rcs maybe-configure-rcs
! maybe-configure-rcs:
! @if rcs
! maybe-configure-rcs: configure-rcs
! configure-rcs:
! 	@test ! -f rcs/Makefile || exit 0; \
! 	[ -d rcs ] || mkdir rcs; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in rcs; \
+ 	cd rcs || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/rcs"; \
+ 	    libsrcdir="$$s/rcs";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/rcs"; \
+ 	    libsrcdir="$$s/rcs";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif rcs
+ 
+ .PHONY: all-rcs maybe-all-rcs
+ maybe-all-rcs:
+ @if rcs
+ TARGET-rcs=all
+ maybe-all-rcs: all-rcs
+ all-rcs: configure-rcs
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd rcs && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-rcs))
! @endif rcs
! 
! .PHONY: check-rcs maybe-check-rcs
! maybe-check-rcs:
! @if rcs
! maybe-check-rcs: check-rcs
! 
! check-rcs:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd rcs && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif rcs
! 
! .PHONY: install-rcs maybe-install-rcs
! maybe-install-rcs:
! @if rcs
! maybe-install-rcs: install-rcs
! 
! install-rcs: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd rcs && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif rcs
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-rcs info-rcs
! maybe-info-rcs:
! @if rcs
! maybe-info-rcs: info-rcs
! 
! info-rcs: \
!     configure-rcs 
! 	@[ -f ./rcs/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in rcs" ; \
! 	(cd rcs && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif rcs
  
! .PHONY: maybe-dvi-rcs dvi-rcs
! maybe-dvi-rcs:
! @if rcs
! maybe-dvi-rcs: dvi-rcs
  
! dvi-rcs: \
!     configure-rcs 
! 	@[ -f ./rcs/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in rcs" ; \
! 	(cd rcs && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif rcs
  
! .PHONY: maybe-html-rcs html-rcs
! maybe-html-rcs:
! @if rcs
! maybe-html-rcs: html-rcs
  
! html-rcs: \
!     configure-rcs 
! 	@[ -f ./rcs/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in rcs" ; \
! 	(cd rcs && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif rcs
  
! .PHONY: maybe-TAGS-rcs TAGS-rcs
! maybe-TAGS-rcs:
! @if rcs
! maybe-TAGS-rcs: TAGS-rcs
  
! TAGS-rcs: \
!     configure-rcs 
! 	@[ -f ./rcs/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in rcs" ; \
! 	(cd rcs && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif rcs
  
! .PHONY: maybe-install-info-rcs install-info-rcs
! maybe-install-info-rcs:
! @if rcs
! maybe-install-info-rcs: install-info-rcs
  
! install-info-rcs: \
!     configure-rcs \
!     info-rcs 
! 	@[ -f ./rcs/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in rcs" ; \
! 	(cd rcs && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif rcs
  
! .PHONY: maybe-installcheck-rcs installcheck-rcs
! maybe-installcheck-rcs:
! @if rcs
! maybe-installcheck-rcs: installcheck-rcs
  
! installcheck-rcs: \
!     configure-rcs 
! 	@[ -f ./rcs/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in rcs" ; \
! 	(cd rcs && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif rcs
  
! .PHONY: maybe-mostlyclean-rcs mostlyclean-rcs
! maybe-mostlyclean-rcs:
! @if rcs
! maybe-mostlyclean-rcs: mostlyclean-rcs
  
! mostlyclean-rcs: 
! 	@[ -f ./rcs/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in rcs" ; \
! 	(cd rcs && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** mostlyclean-etc: 
*** 10573,10781 ****
  	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-fastjar mostlyclean-fastjar
! maybe-mostlyclean-fastjar:
  
! mostlyclean-fastjar: 
! 	@[ -f ./fastjar/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in fastjar" ; \
! 	(cd fastjar && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-fileutils mostlyclean-fileutils
! maybe-mostlyclean-fileutils:
  
! mostlyclean-fileutils: 
! 	@[ -f ./fileutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in fileutils" ; \
! 	(cd fileutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-findutils mostlyclean-findutils
! maybe-mostlyclean-findutils:
  
! mostlyclean-findutils: 
! 	@[ -f ./findutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in findutils" ; \
! 	(cd findutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
- .PHONY: maybe-mostlyclean-find mostlyclean-find
- maybe-mostlyclean-find:
  
! mostlyclean-find: 
! 	@[ -f ./find/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in find" ; \
! 	(cd find && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-flex mostlyclean-flex
! maybe-mostlyclean-flex:
  
! mostlyclean-flex: 
! 	@[ -f ./flex/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in flex" ; \
! 	(cd flex && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-gas mostlyclean-gas
! maybe-mostlyclean-gas:
  
! mostlyclean-gas: 
! 	@[ -f ./gas/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in gas" ; \
! 	(cd gas && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-gawk mostlyclean-gawk
! maybe-mostlyclean-gawk:
  
! mostlyclean-gawk: 
! 	@[ -f ./gawk/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in gawk" ; \
! 	(cd gawk && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-gettext mostlyclean-gettext
! maybe-mostlyclean-gettext:
  
! mostlyclean-gettext: 
! 	@[ -f ./gettext/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in gettext" ; \
! 	(cd gettext && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-gnuserv mostlyclean-gnuserv
! maybe-mostlyclean-gnuserv:
  
! mostlyclean-gnuserv: 
! 	@[ -f ./gnuserv/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in gnuserv" ; \
! 	(cd gnuserv && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-gprof mostlyclean-gprof
! maybe-mostlyclean-gprof:
  
! mostlyclean-gprof: 
! 	@[ -f ./gprof/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in gprof" ; \
! 	(cd gprof && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 16988,17316 ----
  	          mostlyclean) \
  	  || exit 1
  
+ @endif rcs
  
! .PHONY: maybe-clean-rcs clean-rcs
! maybe-clean-rcs:
! @if rcs
! maybe-clean-rcs: clean-rcs
  
! clean-rcs: 
! 	@[ -f ./rcs/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in rcs" ; \
! 	(cd rcs && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif rcs
  
! .PHONY: maybe-distclean-rcs distclean-rcs
! maybe-distclean-rcs:
! @if rcs
! maybe-distclean-rcs: distclean-rcs
  
! distclean-rcs: 
! 	@[ -f ./rcs/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in rcs" ; \
! 	(cd rcs && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif rcs
  
! .PHONY: maybe-maintainer-clean-rcs maintainer-clean-rcs
! maybe-maintainer-clean-rcs:
! @if rcs
! maybe-maintainer-clean-rcs: maintainer-clean-rcs
  
! maintainer-clean-rcs: 
! 	@[ -f ./rcs/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in rcs" ; \
! 	(cd rcs && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif rcs
  
  
! .PHONY: configure-readline maybe-configure-readline
! maybe-configure-readline:
! @if readline
! maybe-configure-readline: configure-readline
! configure-readline:
! 	@test ! -f readline/Makefile || exit 0; \
! 	[ -d readline ] || mkdir readline; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in readline; \
+ 	cd readline || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/readline"; \
+ 	    libsrcdir="$$s/readline";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/readline"; \
+ 	    libsrcdir="$$s/readline";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif readline
+ 
+ .PHONY: all-readline maybe-all-readline
+ maybe-all-readline:
+ @if readline
+ TARGET-readline=all
+ maybe-all-readline: all-readline
+ all-readline: configure-readline
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd readline && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-readline))
! @endif readline
! 
! .PHONY: check-readline maybe-check-readline
! maybe-check-readline:
! @if readline
! maybe-check-readline: check-readline
! 
! check-readline:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd readline && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif readline
! 
! .PHONY: install-readline maybe-install-readline
! maybe-install-readline:
! @if readline
! maybe-install-readline: install-readline
! 
! install-readline: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd readline && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif readline
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-readline info-readline
! maybe-info-readline:
! @if readline
! maybe-info-readline: info-readline
! 
! info-readline: \
!     configure-readline 
! 	@[ -f ./readline/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in readline" ; \
! 	(cd readline && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif readline
  
! .PHONY: maybe-dvi-readline dvi-readline
! maybe-dvi-readline:
! @if readline
! maybe-dvi-readline: dvi-readline
  
! dvi-readline: \
!     configure-readline 
! 	@[ -f ./readline/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in readline" ; \
! 	(cd readline && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif readline
  
! .PHONY: maybe-html-readline html-readline
! maybe-html-readline:
! @if readline
! maybe-html-readline: html-readline
  
! html-readline: \
!     configure-readline 
! 	@[ -f ./readline/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in readline" ; \
! 	(cd readline && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif readline
  
! .PHONY: maybe-TAGS-readline TAGS-readline
! maybe-TAGS-readline:
! @if readline
! maybe-TAGS-readline: TAGS-readline
  
! TAGS-readline: \
!     configure-readline 
! 	@[ -f ./readline/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in readline" ; \
! 	(cd readline && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif readline
  
! .PHONY: maybe-install-info-readline install-info-readline
! maybe-install-info-readline:
! @if readline
! maybe-install-info-readline: install-info-readline
  
! install-info-readline: \
!     configure-readline \
!     info-readline 
! 	@[ -f ./readline/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in readline" ; \
! 	(cd readline && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif readline
  
! .PHONY: maybe-installcheck-readline installcheck-readline
! maybe-installcheck-readline:
! @if readline
! maybe-installcheck-readline: installcheck-readline
  
! installcheck-readline: \
!     configure-readline 
! 	@[ -f ./readline/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in readline" ; \
! 	(cd readline && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif readline
  
! .PHONY: maybe-mostlyclean-readline mostlyclean-readline
! maybe-mostlyclean-readline:
! @if readline
! maybe-mostlyclean-readline: mostlyclean-readline
  
! mostlyclean-readline: 
! 	@[ -f ./readline/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in readline" ; \
! 	(cd readline && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** mostlyclean-gprof: 
*** 10783,10977 ****
  	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-gzip mostlyclean-gzip
! maybe-mostlyclean-gzip:
  
! mostlyclean-gzip: 
! 	@[ -f ./gzip/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in gzip" ; \
! 	(cd gzip && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-hello mostlyclean-hello
! maybe-mostlyclean-hello:
  
! mostlyclean-hello: 
! 	@[ -f ./hello/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in hello" ; \
! 	(cd hello && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-indent mostlyclean-indent
! maybe-mostlyclean-indent:
  
! mostlyclean-indent: 
! 	@[ -f ./indent/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in indent" ; \
! 	(cd indent && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
- .PHONY: maybe-mostlyclean-intl mostlyclean-intl
- maybe-mostlyclean-intl:
  
! mostlyclean-intl: 
! 	@[ -f ./intl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in intl" ; \
! 	(cd intl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-tcl mostlyclean-tcl
! maybe-mostlyclean-tcl:
  
! # tcl doesn't support mostlyclean.
! mostlyclean-tcl:
  
  
! .PHONY: maybe-mostlyclean-itcl mostlyclean-itcl
! maybe-mostlyclean-itcl:
  
! mostlyclean-itcl: 
! 	@[ -f ./itcl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in itcl" ; \
! 	(cd itcl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-ld mostlyclean-ld
! maybe-mostlyclean-ld:
  
! mostlyclean-ld: 
! 	@[ -f ./ld/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in ld" ; \
! 	(cd ld && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-libgui mostlyclean-libgui
! maybe-mostlyclean-libgui:
  
! mostlyclean-libgui: 
! 	@[ -f ./libgui/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in libgui" ; \
! 	(cd libgui && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-libiberty mostlyclean-libiberty
! maybe-mostlyclean-libiberty:
  
! mostlyclean-libiberty: 
! 	@[ -f ./libiberty/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in libiberty" ; \
! 	(cd libiberty && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-libtool mostlyclean-libtool
! maybe-mostlyclean-libtool:
  
! mostlyclean-libtool: 
! 	@[ -f ./libtool/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in libtool" ; \
! 	(cd libtool && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 17318,17636 ----
  	          mostlyclean) \
  	  || exit 1
  
+ @endif readline
  
! .PHONY: maybe-clean-readline clean-readline
! maybe-clean-readline:
! @if readline
! maybe-clean-readline: clean-readline
  
! clean-readline: 
! 	@[ -f ./readline/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in readline" ; \
! 	(cd readline && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif readline
  
! .PHONY: maybe-distclean-readline distclean-readline
! maybe-distclean-readline:
! @if readline
! maybe-distclean-readline: distclean-readline
  
! distclean-readline: 
! 	@[ -f ./readline/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in readline" ; \
! 	(cd readline && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif readline
  
! .PHONY: maybe-maintainer-clean-readline maintainer-clean-readline
! maybe-maintainer-clean-readline:
! @if readline
! maybe-maintainer-clean-readline: maintainer-clean-readline
  
! maintainer-clean-readline: 
! 	@[ -f ./readline/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in readline" ; \
! 	(cd readline && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif readline
  
  
! .PHONY: configure-release maybe-configure-release
! maybe-configure-release:
! @if release
! maybe-configure-release: configure-release
! configure-release:
! 	@test ! -f release/Makefile || exit 0; \
! 	[ -d release ] || mkdir release; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in release; \
+ 	cd release || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/release"; \
+ 	    libsrcdir="$$s/release";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/release"; \
+ 	    libsrcdir="$$s/release";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif release
+ 
+ .PHONY: all-release maybe-all-release
+ maybe-all-release:
+ @if release
+ TARGET-release=all
+ maybe-all-release: all-release
+ all-release: configure-release
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd release && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-release))
! @endif release
! 
! .PHONY: check-release maybe-check-release
! maybe-check-release:
! @if release
! maybe-check-release: check-release
! 
! check-release:
! 
! @endif release
! 
! .PHONY: install-release maybe-install-release
! maybe-install-release:
! @if release
! maybe-install-release: install-release
! 
! install-release:
! 
! @endif release
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-release info-release
! maybe-info-release:
! @if release
! maybe-info-release: info-release
! 
! info-release: \
!     configure-release 
! 	@[ -f ./release/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in release" ; \
! 	(cd release && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif release
  
! .PHONY: maybe-dvi-release dvi-release
! maybe-dvi-release:
! @if release
! maybe-dvi-release: dvi-release
  
! dvi-release: \
!     configure-release 
! 	@[ -f ./release/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	echo "Doing dvi in release" ; \
! 	(cd release && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
! 	  || exit 1
  
+ @endif release
  
! .PHONY: maybe-html-release html-release
! maybe-html-release:
! @if release
! maybe-html-release: html-release
  
! html-release: \
!     configure-release 
! 	@[ -f ./release/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in release" ; \
! 	(cd release && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif release
  
! .PHONY: maybe-TAGS-release TAGS-release
! maybe-TAGS-release:
! @if release
! maybe-TAGS-release: TAGS-release
  
! TAGS-release: \
!     configure-release 
! 	@[ -f ./release/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in release" ; \
! 	(cd release && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif release
  
! .PHONY: maybe-install-info-release install-info-release
! maybe-install-info-release:
! @if release
! maybe-install-info-release: install-info-release
  
! install-info-release: \
!     configure-release \
!     info-release 
! 	@[ -f ./release/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in release" ; \
! 	(cd release && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif release
  
! .PHONY: maybe-installcheck-release installcheck-release
! maybe-installcheck-release:
! @if release
! maybe-installcheck-release: installcheck-release
  
! installcheck-release: \
!     configure-release 
! 	@[ -f ./release/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in release" ; \
! 	(cd release && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif release
  
! .PHONY: maybe-mostlyclean-release mostlyclean-release
! maybe-mostlyclean-release:
! @if release
! maybe-mostlyclean-release: mostlyclean-release
  
! mostlyclean-release: 
! 	@[ -f ./release/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in release" ; \
! 	(cd release && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** mostlyclean-libtool: 
*** 10979,11183 ****
  	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-m4 mostlyclean-m4
! maybe-mostlyclean-m4:
  
! mostlyclean-m4: 
! 	@[ -f ./m4/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in m4" ; \
! 	(cd m4 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-make mostlyclean-make
! maybe-mostlyclean-make:
  
! mostlyclean-make: 
! 	@[ -f ./make/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in make" ; \
! 	(cd make && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-mmalloc mostlyclean-mmalloc
! maybe-mostlyclean-mmalloc:
  
! mostlyclean-mmalloc: 
! 	@[ -f ./mmalloc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in mmalloc" ; \
! 	(cd mmalloc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
- .PHONY: maybe-mostlyclean-patch mostlyclean-patch
- maybe-mostlyclean-patch:
  
! mostlyclean-patch: 
! 	@[ -f ./patch/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in patch" ; \
! 	(cd patch && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-perl mostlyclean-perl
! maybe-mostlyclean-perl:
  
! mostlyclean-perl: 
! 	@[ -f ./perl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in perl" ; \
! 	(cd perl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-prms mostlyclean-prms
! maybe-mostlyclean-prms:
  
! mostlyclean-prms: 
! 	@[ -f ./prms/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in prms" ; \
! 	(cd prms && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-rcs mostlyclean-rcs
! maybe-mostlyclean-rcs:
  
! mostlyclean-rcs: 
! 	@[ -f ./rcs/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in rcs" ; \
! 	(cd rcs && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-readline mostlyclean-readline
! maybe-mostlyclean-readline:
  
! mostlyclean-readline: 
! 	@[ -f ./readline/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in readline" ; \
! 	(cd readline && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-release mostlyclean-release
! maybe-mostlyclean-release:
  
! mostlyclean-release: 
! 	@[ -f ./release/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in release" ; \
! 	(cd release && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
  .PHONY: maybe-mostlyclean-recode mostlyclean-recode
  maybe-mostlyclean-recode:
  
  mostlyclean-recode: 
  	@[ -f ./recode/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
  	echo "Doing mostlyclean in recode" ; \
--- 17638,17962 ----
  	          mostlyclean) \
  	  || exit 1
  
+ @endif release
  
! .PHONY: maybe-clean-release clean-release
! maybe-clean-release:
! @if release
! maybe-clean-release: clean-release
  
! clean-release: 
! 	@[ -f ./release/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in release" ; \
! 	(cd release && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif release
  
! .PHONY: maybe-distclean-release distclean-release
! maybe-distclean-release:
! @if release
! maybe-distclean-release: distclean-release
  
! distclean-release: 
! 	@[ -f ./release/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in release" ; \
! 	(cd release && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif release
  
! .PHONY: maybe-maintainer-clean-release maintainer-clean-release
! maybe-maintainer-clean-release:
! @if release
! maybe-maintainer-clean-release: maintainer-clean-release
  
! maintainer-clean-release: 
! 	@[ -f ./release/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in release" ; \
! 	(cd release && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif release
  
  
! .PHONY: configure-recode maybe-configure-recode
! maybe-configure-recode:
! @if recode
! maybe-configure-recode: configure-recode
! configure-recode:
! 	@test ! -f recode/Makefile || exit 0; \
! 	[ -d recode ] || mkdir recode; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in recode; \
+ 	cd recode || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/recode"; \
+ 	    libsrcdir="$$s/recode";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/recode"; \
+ 	    libsrcdir="$$s/recode";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif recode
+ 
+ .PHONY: all-recode maybe-all-recode
+ maybe-all-recode:
+ @if recode
+ TARGET-recode=all
+ maybe-all-recode: all-recode
+ all-recode: configure-recode
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd recode && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-recode))
! @endif recode
! 
! .PHONY: check-recode maybe-check-recode
! maybe-check-recode:
! @if recode
! maybe-check-recode: check-recode
! 
! check-recode:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd recode && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif recode
! 
! .PHONY: install-recode maybe-install-recode
! maybe-install-recode:
! @if recode
! maybe-install-recode: install-recode
! 
! install-recode: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd recode && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif recode
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-recode info-recode
! maybe-info-recode:
! @if recode
! maybe-info-recode: info-recode
! 
! info-recode: \
!     configure-recode 
! 	@[ -f ./recode/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in recode" ; \
! 	(cd recode && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif recode
  
! .PHONY: maybe-dvi-recode dvi-recode
! maybe-dvi-recode:
! @if recode
! maybe-dvi-recode: dvi-recode
  
! dvi-recode: \
!     configure-recode 
! 	@[ -f ./recode/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in recode" ; \
! 	(cd recode && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif recode
  
! .PHONY: maybe-html-recode html-recode
! maybe-html-recode:
! @if recode
! maybe-html-recode: html-recode
  
! html-recode: \
!     configure-recode 
! 	@[ -f ./recode/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in recode" ; \
! 	(cd recode && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif recode
  
! .PHONY: maybe-TAGS-recode TAGS-recode
! maybe-TAGS-recode:
! @if recode
! maybe-TAGS-recode: TAGS-recode
  
! TAGS-recode: \
!     configure-recode 
! 	@[ -f ./recode/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in recode" ; \
! 	(cd recode && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif recode
  
! .PHONY: maybe-install-info-recode install-info-recode
! maybe-install-info-recode:
! @if recode
! maybe-install-info-recode: install-info-recode
  
! install-info-recode: \
!     configure-recode \
!     info-recode 
! 	@[ -f ./recode/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in recode" ; \
! 	(cd recode && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif recode
  
! .PHONY: maybe-installcheck-recode installcheck-recode
! maybe-installcheck-recode:
! @if recode
! maybe-installcheck-recode: installcheck-recode
  
! installcheck-recode: \
!     configure-recode 
! 	@[ -f ./recode/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in recode" ; \
! 	(cd recode && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif recode
  
  .PHONY: maybe-mostlyclean-recode mostlyclean-recode
  maybe-mostlyclean-recode:
+ @if recode
+ maybe-mostlyclean-recode: mostlyclean-recode
  
  mostlyclean-recode: 
  	@[ -f ./recode/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
  	echo "Doing mostlyclean in recode" ; \
*************** mostlyclean-recode: 
*** 11189,11397 ****
  	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-sed mostlyclean-sed
! maybe-mostlyclean-sed:
  
! mostlyclean-sed: 
! 	@[ -f ./sed/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in sed" ; \
! 	(cd sed && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-send-pr mostlyclean-send-pr
! maybe-mostlyclean-send-pr:
  
! mostlyclean-send-pr: 
! 	@[ -f ./send-pr/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in send-pr" ; \
! 	(cd send-pr && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-shellutils mostlyclean-shellutils
! maybe-mostlyclean-shellutils:
  
! mostlyclean-shellutils: 
! 	@[ -f ./shellutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in shellutils" ; \
! 	(cd shellutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
- .PHONY: maybe-mostlyclean-sid mostlyclean-sid
- maybe-mostlyclean-sid:
  
! mostlyclean-sid: 
! 	@[ -f ./sid/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in sid" ; \
! 	(cd sid && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-sim mostlyclean-sim
! maybe-mostlyclean-sim:
  
! mostlyclean-sim: 
! 	@[ -f ./sim/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in sim" ; \
! 	(cd sim && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-tar mostlyclean-tar
! maybe-mostlyclean-tar:
  
! mostlyclean-tar: 
! 	@[ -f ./tar/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in tar" ; \
! 	(cd tar && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-texinfo mostlyclean-texinfo
! maybe-mostlyclean-texinfo:
  
! mostlyclean-texinfo: 
! 	@[ -f ./texinfo/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in texinfo" ; \
! 	(cd texinfo && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-textutils mostlyclean-textutils
! maybe-mostlyclean-textutils:
  
! mostlyclean-textutils: 
! 	@[ -f ./textutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in textutils" ; \
! 	(cd textutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-time mostlyclean-time
! maybe-mostlyclean-time:
  
! mostlyclean-time: 
! 	@[ -f ./time/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in time" ; \
! 	(cd time && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-uudecode mostlyclean-uudecode
! maybe-mostlyclean-uudecode:
  
! mostlyclean-uudecode: 
! 	@[ -f ./uudecode/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in uudecode" ; \
! 	(cd uudecode && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 17968,18296 ----
  	          mostlyclean) \
  	  || exit 1
  
+ @endif recode
  
! .PHONY: maybe-clean-recode clean-recode
! maybe-clean-recode:
! @if recode
! maybe-clean-recode: clean-recode
  
! clean-recode: 
! 	@[ -f ./recode/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in recode" ; \
! 	(cd recode && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif recode
  
! .PHONY: maybe-distclean-recode distclean-recode
! maybe-distclean-recode:
! @if recode
! maybe-distclean-recode: distclean-recode
  
! distclean-recode: 
! 	@[ -f ./recode/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in recode" ; \
! 	(cd recode && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif recode
  
! .PHONY: maybe-maintainer-clean-recode maintainer-clean-recode
! maybe-maintainer-clean-recode:
! @if recode
! maybe-maintainer-clean-recode: maintainer-clean-recode
  
! maintainer-clean-recode: 
! 	@[ -f ./recode/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in recode" ; \
! 	(cd recode && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif recode
  
  
! .PHONY: configure-sed maybe-configure-sed
! maybe-configure-sed:
! @if sed
! maybe-configure-sed: configure-sed
! configure-sed:
! 	@test ! -f sed/Makefile || exit 0; \
! 	[ -d sed ] || mkdir sed; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in sed; \
+ 	cd sed || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/sed"; \
+ 	    libsrcdir="$$s/sed";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/sed"; \
+ 	    libsrcdir="$$s/sed";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif sed
+ 
+ .PHONY: all-sed maybe-all-sed
+ maybe-all-sed:
+ @if sed
+ TARGET-sed=all
+ maybe-all-sed: all-sed
+ all-sed: configure-sed
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd sed && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-sed))
! @endif sed
! 
! .PHONY: check-sed maybe-check-sed
! maybe-check-sed:
! @if sed
! maybe-check-sed: check-sed
! 
! check-sed:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd sed && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif sed
! 
! .PHONY: install-sed maybe-install-sed
! maybe-install-sed:
! @if sed
! maybe-install-sed: install-sed
! 
! install-sed: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd sed && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif sed
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-sed info-sed
! maybe-info-sed:
! @if sed
! maybe-info-sed: info-sed
! 
! info-sed: \
!     configure-sed 
! 	@[ -f ./sed/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in sed" ; \
! 	(cd sed && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif sed
  
! .PHONY: maybe-dvi-sed dvi-sed
! maybe-dvi-sed:
! @if sed
! maybe-dvi-sed: dvi-sed
  
! dvi-sed: \
!     configure-sed 
! 	@[ -f ./sed/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in sed" ; \
! 	(cd sed && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif sed
  
! .PHONY: maybe-html-sed html-sed
! maybe-html-sed:
! @if sed
! maybe-html-sed: html-sed
  
! html-sed: \
!     configure-sed 
! 	@[ -f ./sed/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in sed" ; \
! 	(cd sed && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif sed
  
! .PHONY: maybe-TAGS-sed TAGS-sed
! maybe-TAGS-sed:
! @if sed
! maybe-TAGS-sed: TAGS-sed
  
! TAGS-sed: \
!     configure-sed 
! 	@[ -f ./sed/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in sed" ; \
! 	(cd sed && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif sed
  
! .PHONY: maybe-install-info-sed install-info-sed
! maybe-install-info-sed:
! @if sed
! maybe-install-info-sed: install-info-sed
  
! install-info-sed: \
!     configure-sed \
!     info-sed 
! 	@[ -f ./sed/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in sed" ; \
! 	(cd sed && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif sed
  
! .PHONY: maybe-installcheck-sed installcheck-sed
! maybe-installcheck-sed:
! @if sed
! maybe-installcheck-sed: installcheck-sed
  
! installcheck-sed: \
!     configure-sed 
! 	@[ -f ./sed/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in sed" ; \
! 	(cd sed && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif sed
  
! .PHONY: maybe-mostlyclean-sed mostlyclean-sed
! maybe-mostlyclean-sed:
! @if sed
! maybe-mostlyclean-sed: mostlyclean-sed
  
! mostlyclean-sed: 
! 	@[ -f ./sed/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in sed" ; \
! 	(cd sed && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** mostlyclean-uudecode: 
*** 11399,11593 ****
  	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-wdiff mostlyclean-wdiff
! maybe-mostlyclean-wdiff:
  
! mostlyclean-wdiff: 
! 	@[ -f ./wdiff/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in wdiff" ; \
! 	(cd wdiff && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-zip mostlyclean-zip
! maybe-mostlyclean-zip:
  
! mostlyclean-zip: 
! 	@[ -f ./zip/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in zip" ; \
! 	(cd zip && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-zlib mostlyclean-zlib
! maybe-mostlyclean-zlib:
  
! mostlyclean-zlib: 
! 	@[ -f ./zlib/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in zlib" ; \
! 	(cd zlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
- .PHONY: maybe-mostlyclean-gdb mostlyclean-gdb
- maybe-mostlyclean-gdb:
  
! mostlyclean-gdb: 
! 	@[ -f ./gdb/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in gdb" ; \
! 	(cd gdb && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-expect mostlyclean-expect
! maybe-mostlyclean-expect:
  
! mostlyclean-expect: 
! 	@[ -f ./expect/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in expect" ; \
! 	(cd expect && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-guile mostlyclean-guile
! maybe-mostlyclean-guile:
  
! mostlyclean-guile: 
! 	@[ -f ./guile/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in guile" ; \
! 	(cd guile && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-tk mostlyclean-tk
! maybe-mostlyclean-tk:
  
! mostlyclean-tk: 
! 	@[ -f ./tk/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in tk" ; \
! 	(cd tk && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-tix mostlyclean-tix
! maybe-mostlyclean-tix:
  
! mostlyclean-tix: 
! 	@[ -f ./tix/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in tix" ; \
! 	(cd tix && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-libtermcap mostlyclean-libtermcap
! maybe-mostlyclean-libtermcap:
  
! # libtermcap doesn't support mostlyclean.
! mostlyclean-libtermcap:
  
  
! .PHONY: maybe-mostlyclean-utils mostlyclean-utils
! maybe-mostlyclean-utils:
  
! mostlyclean-utils: 
! 	@[ -f ./utils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in utils" ; \
! 	(cd utils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 18298,18626 ----
  	          mostlyclean) \
  	  || exit 1
  
+ @endif sed
  
! .PHONY: maybe-clean-sed clean-sed
! maybe-clean-sed:
! @if sed
! maybe-clean-sed: clean-sed
  
! clean-sed: 
! 	@[ -f ./sed/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in sed" ; \
! 	(cd sed && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif sed
  
! .PHONY: maybe-distclean-sed distclean-sed
! maybe-distclean-sed:
! @if sed
! maybe-distclean-sed: distclean-sed
  
! distclean-sed: 
! 	@[ -f ./sed/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in sed" ; \
! 	(cd sed && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif sed
  
! .PHONY: maybe-maintainer-clean-sed maintainer-clean-sed
! maybe-maintainer-clean-sed:
! @if sed
! maybe-maintainer-clean-sed: maintainer-clean-sed
  
! maintainer-clean-sed: 
! 	@[ -f ./sed/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in sed" ; \
! 	(cd sed && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif sed
  
  
! .PHONY: configure-send-pr maybe-configure-send-pr
! maybe-configure-send-pr:
! @if send-pr
! maybe-configure-send-pr: configure-send-pr
! configure-send-pr:
! 	@test ! -f send-pr/Makefile || exit 0; \
! 	[ -d send-pr ] || mkdir send-pr; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in send-pr; \
+ 	cd send-pr || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/send-pr"; \
+ 	    libsrcdir="$$s/send-pr";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/send-pr"; \
+ 	    libsrcdir="$$s/send-pr";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif send-pr
+ 
+ .PHONY: all-send-pr maybe-all-send-pr
+ maybe-all-send-pr:
+ @if send-pr
+ TARGET-send-pr=all
+ maybe-all-send-pr: all-send-pr
+ all-send-pr: configure-send-pr
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd send-pr && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-send-pr))
! @endif send-pr
! 
! .PHONY: check-send-pr maybe-check-send-pr
! maybe-check-send-pr:
! @if send-pr
! maybe-check-send-pr: check-send-pr
! 
! check-send-pr:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd send-pr && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif send-pr
! 
! .PHONY: install-send-pr maybe-install-send-pr
! maybe-install-send-pr:
! @if send-pr
! maybe-install-send-pr: install-send-pr
! 
! install-send-pr: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd send-pr && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif send-pr
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-send-pr info-send-pr
! maybe-info-send-pr:
! @if send-pr
! maybe-info-send-pr: info-send-pr
! 
! info-send-pr: \
!     configure-send-pr 
! 	@[ -f ./send-pr/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in send-pr" ; \
! 	(cd send-pr && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif send-pr
  
! .PHONY: maybe-dvi-send-pr dvi-send-pr
! maybe-dvi-send-pr:
! @if send-pr
! maybe-dvi-send-pr: dvi-send-pr
  
! dvi-send-pr: \
!     configure-send-pr 
! 	@[ -f ./send-pr/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in send-pr" ; \
! 	(cd send-pr && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif send-pr
  
! .PHONY: maybe-html-send-pr html-send-pr
! maybe-html-send-pr:
! @if send-pr
! maybe-html-send-pr: html-send-pr
  
! html-send-pr: \
!     configure-send-pr 
! 	@[ -f ./send-pr/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in send-pr" ; \
! 	(cd send-pr && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif send-pr
  
! .PHONY: maybe-TAGS-send-pr TAGS-send-pr
! maybe-TAGS-send-pr:
! @if send-pr
! maybe-TAGS-send-pr: TAGS-send-pr
  
! TAGS-send-pr: \
!     configure-send-pr 
! 	@[ -f ./send-pr/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in send-pr" ; \
! 	(cd send-pr && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif send-pr
  
! .PHONY: maybe-install-info-send-pr install-info-send-pr
! maybe-install-info-send-pr:
! @if send-pr
! maybe-install-info-send-pr: install-info-send-pr
  
! install-info-send-pr: \
!     configure-send-pr \
!     info-send-pr 
! 	@[ -f ./send-pr/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in send-pr" ; \
! 	(cd send-pr && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif send-pr
  
! .PHONY: maybe-installcheck-send-pr installcheck-send-pr
! maybe-installcheck-send-pr:
! @if send-pr
! maybe-installcheck-send-pr: installcheck-send-pr
  
! installcheck-send-pr: \
!     configure-send-pr 
! 	@[ -f ./send-pr/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	echo "Doing installcheck in send-pr" ; \
! 	(cd send-pr && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
! 	  || exit 1
  
+ @endif send-pr
  
! .PHONY: maybe-mostlyclean-send-pr mostlyclean-send-pr
! maybe-mostlyclean-send-pr:
! @if send-pr
! maybe-mostlyclean-send-pr: mostlyclean-send-pr
  
! mostlyclean-send-pr: 
! 	@[ -f ./send-pr/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in send-pr" ; \
! 	(cd send-pr && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** mostlyclean-utils: 
*** 11595,11792 ****
  	          mostlyclean) \
  	  || exit 1
  
  
  
! # Target modules.
! 
! .PHONY: maybe-mostlyclean-target-libstdc++-v3 mostlyclean-target-libstdc++-v3
! maybe-mostlyclean-target-libstdc++-v3:
! 
! mostlyclean-target-libstdc++-v3: 
! 	@[ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing mostlyclean in $(TARGET_SUBDIR)/libstdc++-v3" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libstdc++-v3 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-target-newlib mostlyclean-target-newlib
! maybe-mostlyclean-target-newlib:
  
! mostlyclean-target-newlib: 
! 	@[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing mostlyclean in $(TARGET_SUBDIR)/newlib" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/newlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-target-libf2c mostlyclean-target-libf2c
! maybe-mostlyclean-target-libf2c:
  
! mostlyclean-target-libf2c: 
! 	@[ -f $(TARGET_SUBDIR)/libf2c/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing mostlyclean in $(TARGET_SUBDIR)/libf2c" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libf2c && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
- .PHONY: maybe-mostlyclean-target-libobjc mostlyclean-target-libobjc
- maybe-mostlyclean-target-libobjc:
  
! mostlyclean-target-libobjc: 
! 	@[ -f $(TARGET_SUBDIR)/libobjc/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing mostlyclean in $(TARGET_SUBDIR)/libobjc" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libobjc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-target-libtermcap mostlyclean-target-libtermcap
! maybe-mostlyclean-target-libtermcap:
  
! # libtermcap doesn't support mostlyclean.
! mostlyclean-target-libtermcap:
  
  
! .PHONY: maybe-mostlyclean-target-winsup mostlyclean-target-winsup
! maybe-mostlyclean-target-winsup:
  
! mostlyclean-target-winsup: 
! 	@[ -f $(TARGET_SUBDIR)/winsup/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing mostlyclean in $(TARGET_SUBDIR)/winsup" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/winsup && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-target-libgloss mostlyclean-target-libgloss
! maybe-mostlyclean-target-libgloss:
  
! mostlyclean-target-libgloss: 
! 	@[ -f $(TARGET_SUBDIR)/libgloss/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing mostlyclean in $(TARGET_SUBDIR)/libgloss" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libgloss && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-target-libiberty mostlyclean-target-libiberty
! maybe-mostlyclean-target-libiberty:
  
! mostlyclean-target-libiberty: 
! 	@[ -f $(TARGET_SUBDIR)/libiberty/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing mostlyclean in $(TARGET_SUBDIR)/libiberty" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libiberty && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-target-gperf mostlyclean-target-gperf
! maybe-mostlyclean-target-gperf:
  
! mostlyclean-target-gperf: 
! 	@[ -f $(TARGET_SUBDIR)/gperf/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing mostlyclean in $(TARGET_SUBDIR)/gperf" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/gperf && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-target-examples mostlyclean-target-examples
! maybe-mostlyclean-target-examples:
  
! mostlyclean-target-examples: 
! 	@[ -f $(TARGET_SUBDIR)/examples/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing mostlyclean in $(TARGET_SUBDIR)/examples" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/examples && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 18628,18956 ----
  	          mostlyclean) \
  	  || exit 1
  
+ @endif send-pr
  
+ .PHONY: maybe-clean-send-pr clean-send-pr
+ maybe-clean-send-pr:
+ @if send-pr
+ maybe-clean-send-pr: clean-send-pr
  
! clean-send-pr: 
! 	@[ -f ./send-pr/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in send-pr" ; \
! 	(cd send-pr && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif send-pr
  
! .PHONY: maybe-distclean-send-pr distclean-send-pr
! maybe-distclean-send-pr:
! @if send-pr
! maybe-distclean-send-pr: distclean-send-pr
  
! distclean-send-pr: 
! 	@[ -f ./send-pr/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in send-pr" ; \
! 	(cd send-pr && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif send-pr
  
! .PHONY: maybe-maintainer-clean-send-pr maintainer-clean-send-pr
! maybe-maintainer-clean-send-pr:
! @if send-pr
! maybe-maintainer-clean-send-pr: maintainer-clean-send-pr
  
! maintainer-clean-send-pr: 
! 	@[ -f ./send-pr/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in send-pr" ; \
! 	(cd send-pr && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif send-pr
  
  
! .PHONY: configure-shellutils maybe-configure-shellutils
! maybe-configure-shellutils:
! @if shellutils
! maybe-configure-shellutils: configure-shellutils
! configure-shellutils:
! 	@test ! -f shellutils/Makefile || exit 0; \
! 	[ -d shellutils ] || mkdir shellutils; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in shellutils; \
+ 	cd shellutils || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/shellutils"; \
+ 	    libsrcdir="$$s/shellutils";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/shellutils"; \
+ 	    libsrcdir="$$s/shellutils";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif shellutils
+ 
+ .PHONY: all-shellutils maybe-all-shellutils
+ maybe-all-shellutils:
+ @if shellutils
+ TARGET-shellutils=all
+ maybe-all-shellutils: all-shellutils
+ all-shellutils: configure-shellutils
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd shellutils && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-shellutils))
! @endif shellutils
! 
! .PHONY: check-shellutils maybe-check-shellutils
! maybe-check-shellutils:
! @if shellutils
! maybe-check-shellutils: check-shellutils
! 
! check-shellutils:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd shellutils && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif shellutils
! 
! .PHONY: install-shellutils maybe-install-shellutils
! maybe-install-shellutils:
! @if shellutils
! maybe-install-shellutils: install-shellutils
! 
! install-shellutils: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd shellutils && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif shellutils
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-shellutils info-shellutils
! maybe-info-shellutils:
! @if shellutils
! maybe-info-shellutils: info-shellutils
! 
! info-shellutils: \
!     configure-shellutils 
! 	@[ -f ./shellutils/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in shellutils" ; \
! 	(cd shellutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif shellutils
  
! .PHONY: maybe-dvi-shellutils dvi-shellutils
! maybe-dvi-shellutils:
! @if shellutils
! maybe-dvi-shellutils: dvi-shellutils
  
! dvi-shellutils: \
!     configure-shellutils 
! 	@[ -f ./shellutils/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	echo "Doing dvi in shellutils" ; \
! 	(cd shellutils && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
! 	  || exit 1
  
+ @endif shellutils
  
! .PHONY: maybe-html-shellutils html-shellutils
! maybe-html-shellutils:
! @if shellutils
! maybe-html-shellutils: html-shellutils
  
! html-shellutils: \
!     configure-shellutils 
! 	@[ -f ./shellutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in shellutils" ; \
! 	(cd shellutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif shellutils
  
! .PHONY: maybe-TAGS-shellutils TAGS-shellutils
! maybe-TAGS-shellutils:
! @if shellutils
! maybe-TAGS-shellutils: TAGS-shellutils
  
! TAGS-shellutils: \
!     configure-shellutils 
! 	@[ -f ./shellutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in shellutils" ; \
! 	(cd shellutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif shellutils
  
! .PHONY: maybe-install-info-shellutils install-info-shellutils
! maybe-install-info-shellutils:
! @if shellutils
! maybe-install-info-shellutils: install-info-shellutils
  
! install-info-shellutils: \
!     configure-shellutils \
!     info-shellutils 
! 	@[ -f ./shellutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in shellutils" ; \
! 	(cd shellutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif shellutils
  
! .PHONY: maybe-installcheck-shellutils installcheck-shellutils
! maybe-installcheck-shellutils:
! @if shellutils
! maybe-installcheck-shellutils: installcheck-shellutils
  
! installcheck-shellutils: \
!     configure-shellutils 
! 	@[ -f ./shellutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in shellutils" ; \
! 	(cd shellutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif shellutils
  
! .PHONY: maybe-mostlyclean-shellutils mostlyclean-shellutils
! maybe-mostlyclean-shellutils:
! @if shellutils
! maybe-mostlyclean-shellutils: mostlyclean-shellutils
  
! mostlyclean-shellutils: 
! 	@[ -f ./shellutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in shellutils" ; \
! 	(cd shellutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** mostlyclean-target-examples: 
*** 11794,12093 ****
  	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-target-libffi mostlyclean-target-libffi
! maybe-mostlyclean-target-libffi:
  
! mostlyclean-target-libffi: 
! 	@[ -f $(TARGET_SUBDIR)/libffi/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing mostlyclean in $(TARGET_SUBDIR)/libffi" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libffi && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-target-libjava mostlyclean-target-libjava
! maybe-mostlyclean-target-libjava:
  
! mostlyclean-target-libjava: 
! 	@[ -f $(TARGET_SUBDIR)/libjava/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing mostlyclean in $(TARGET_SUBDIR)/libjava" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libjava && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-target-zlib mostlyclean-target-zlib
! maybe-mostlyclean-target-zlib:
  
! mostlyclean-target-zlib: 
! 	@[ -f $(TARGET_SUBDIR)/zlib/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing mostlyclean in $(TARGET_SUBDIR)/zlib" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/zlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
- .PHONY: maybe-mostlyclean-target-boehm-gc mostlyclean-target-boehm-gc
- maybe-mostlyclean-target-boehm-gc:
  
! mostlyclean-target-boehm-gc: 
! 	@[ -f $(TARGET_SUBDIR)/boehm-gc/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing mostlyclean in $(TARGET_SUBDIR)/boehm-gc" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/boehm-gc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-target-qthreads mostlyclean-target-qthreads
! maybe-mostlyclean-target-qthreads:
  
! mostlyclean-target-qthreads: 
! 	@[ -f $(TARGET_SUBDIR)/qthreads/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing mostlyclean in $(TARGET_SUBDIR)/qthreads" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/qthreads && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
! .PHONY: maybe-mostlyclean-target-rda mostlyclean-target-rda
! maybe-mostlyclean-target-rda:
  
! mostlyclean-target-rda: 
! 	@[ -f $(TARGET_SUBDIR)/rda/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing mostlyclean in $(TARGET_SUBDIR)/rda" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/rda && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
  
  
! .PHONY: do-clean
! do-clean: clean-host clean-target
  
! .PHONY: clean-host
! clean-host: maybe-clean-gcc  \
!     maybe-clean-ash \
!     maybe-clean-autoconf \
!     maybe-clean-automake \
!     maybe-clean-bash \
!     maybe-clean-bfd \
!     maybe-clean-opcodes \
!     maybe-clean-binutils \
!     maybe-clean-bison \
!     maybe-clean-byacc \
!     maybe-clean-bzip2 \
!     maybe-clean-dejagnu \
!     maybe-clean-diff \
!     maybe-clean-dosutils \
!     maybe-clean-etc \
!     maybe-clean-fastjar \
!     maybe-clean-fileutils \
!     maybe-clean-findutils \
!     maybe-clean-find \
!     maybe-clean-flex \
!     maybe-clean-gas \
!     maybe-clean-gawk \
!     maybe-clean-gettext \
!     maybe-clean-gnuserv \
!     maybe-clean-gprof \
!     maybe-clean-gzip \
!     maybe-clean-hello \
!     maybe-clean-indent \
!     maybe-clean-intl \
!     maybe-clean-tcl \
!     maybe-clean-itcl \
!     maybe-clean-ld \
!     maybe-clean-libgui \
!     maybe-clean-libiberty \
!     maybe-clean-libtool \
!     maybe-clean-m4 \
!     maybe-clean-make \
!     maybe-clean-mmalloc \
!     maybe-clean-patch \
!     maybe-clean-perl \
!     maybe-clean-prms \
!     maybe-clean-rcs \
!     maybe-clean-readline \
!     maybe-clean-release \
!     maybe-clean-recode \
!     maybe-clean-sed \
!     maybe-clean-send-pr \
!     maybe-clean-shellutils \
!     maybe-clean-sid \
!     maybe-clean-sim \
!     maybe-clean-tar \
!     maybe-clean-texinfo \
!     maybe-clean-textutils \
!     maybe-clean-time \
!     maybe-clean-uudecode \
!     maybe-clean-wdiff \
!     maybe-clean-zip \
!     maybe-clean-zlib \
!     maybe-clean-gdb \
!     maybe-clean-expect \
!     maybe-clean-guile \
!     maybe-clean-tk \
!     maybe-clean-tix \
!     maybe-clean-libtermcap \
!     maybe-clean-utils
  
! .PHONY: clean-target
! clean-target:  \
!     maybe-clean-target-libstdc++-v3 \
!     maybe-clean-target-newlib \
!     maybe-clean-target-libf2c \
!     maybe-clean-target-libobjc \
!     maybe-clean-target-libtermcap \
!     maybe-clean-target-winsup \
!     maybe-clean-target-libgloss \
!     maybe-clean-target-libiberty \
!     maybe-clean-target-gperf \
!     maybe-clean-target-examples \
!     maybe-clean-target-libffi \
!     maybe-clean-target-libjava \
!     maybe-clean-target-zlib \
!     maybe-clean-target-boehm-gc \
!     maybe-clean-target-qthreads \
!     maybe-clean-target-rda
  
! # GCC, the eternal special case
! .PHONY: maybe-clean-gcc clean-gcc
! maybe-clean-gcc:
! clean-gcc: 
! 	@[ -f ./gcc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_GCC_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in gcc" ; \
! 	(cd gcc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
! # Host modules.
  
! .PHONY: maybe-clean-ash clean-ash
! maybe-clean-ash:
  
! clean-ash: 
! 	@[ -f ./ash/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in ash" ; \
! 	(cd ash && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-autoconf clean-autoconf
! maybe-clean-autoconf:
  
! clean-autoconf: 
! 	@[ -f ./autoconf/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in autoconf" ; \
! 	(cd autoconf && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-automake clean-automake
! maybe-clean-automake:
  
! clean-automake: 
! 	@[ -f ./automake/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in automake" ; \
! 	(cd automake && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 18958,19311 ----
  	          mostlyclean) \
  	  || exit 1
  
+ @endif shellutils
  
! .PHONY: maybe-clean-shellutils clean-shellutils
! maybe-clean-shellutils:
! @if shellutils
! maybe-clean-shellutils: clean-shellutils
  
! clean-shellutils: 
! 	@[ -f ./shellutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in shellutils" ; \
! 	(cd shellutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif shellutils
  
! .PHONY: maybe-distclean-shellutils distclean-shellutils
! maybe-distclean-shellutils:
! @if shellutils
! maybe-distclean-shellutils: distclean-shellutils
  
! distclean-shellutils: 
! 	@[ -f ./shellutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in shellutils" ; \
! 	(cd shellutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif shellutils
  
! .PHONY: maybe-maintainer-clean-shellutils maintainer-clean-shellutils
! maybe-maintainer-clean-shellutils:
! @if shellutils
! maybe-maintainer-clean-shellutils: maintainer-clean-shellutils
  
! maintainer-clean-shellutils: 
! 	@[ -f ./shellutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in shellutils" ; \
! 	(cd shellutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif shellutils
  
  
! .PHONY: configure-sid maybe-configure-sid
! maybe-configure-sid:
! @if sid
! maybe-configure-sid: configure-sid
! configure-sid:
! 	@test ! -f sid/Makefile || exit 0; \
! 	[ -d sid ] || mkdir sid; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in sid; \
+ 	cd sid || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/sid"; \
+ 	    libsrcdir="$$s/sid";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/sid"; \
+ 	    libsrcdir="$$s/sid";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif sid
+ 
+ .PHONY: all-sid maybe-all-sid
+ maybe-all-sid:
+ @if sid
+ TARGET-sid=all
+ maybe-all-sid: all-sid
+ all-sid: configure-sid
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd sid && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-sid))
! @endif sid
! 
! .PHONY: check-sid maybe-check-sid
! maybe-check-sid:
! @if sid
! maybe-check-sid: check-sid
! 
! check-sid:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd sid && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif sid
! 
! .PHONY: install-sid maybe-install-sid
! maybe-install-sid:
! @if sid
! maybe-install-sid: install-sid
! 
! install-sid: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd sid && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif sid
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-sid info-sid
! maybe-info-sid:
! @if sid
! maybe-info-sid: info-sid
! 
! info-sid: \
!     configure-sid 
! 	@[ -f ./sid/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in sid" ; \
! 	(cd sid && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif sid
  
! .PHONY: maybe-dvi-sid dvi-sid
! maybe-dvi-sid:
! @if sid
! maybe-dvi-sid: dvi-sid
  
! dvi-sid: \
!     configure-sid 
! 	@[ -f ./sid/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in sid" ; \
! 	(cd sid && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif sid
  
! .PHONY: maybe-html-sid html-sid
! maybe-html-sid:
! @if sid
! maybe-html-sid: html-sid
  
! html-sid: \
!     configure-sid 
! 	@[ -f ./sid/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in sid" ; \
! 	(cd sid && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif sid
  
+ .PHONY: maybe-TAGS-sid TAGS-sid
+ maybe-TAGS-sid:
+ @if sid
+ maybe-TAGS-sid: TAGS-sid
  
! TAGS-sid: \
!     configure-sid 
! 	@[ -f ./sid/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	echo "Doing TAGS in sid" ; \
! 	(cd sid && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
! 	  || exit 1
  
! @endif sid
  
! .PHONY: maybe-install-info-sid install-info-sid
! maybe-install-info-sid:
! @if sid
! maybe-install-info-sid: install-info-sid
  
! install-info-sid: \
!     configure-sid \
!     info-sid 
! 	@[ -f ./sid/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in sid" ; \
! 	(cd sid && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
! @endif sid
  
! .PHONY: maybe-installcheck-sid installcheck-sid
! maybe-installcheck-sid:
! @if sid
! maybe-installcheck-sid: installcheck-sid
  
! installcheck-sid: \
!     configure-sid 
! 	@[ -f ./sid/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in sid" ; \
! 	(cd sid && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif sid
  
! .PHONY: maybe-mostlyclean-sid mostlyclean-sid
! maybe-mostlyclean-sid:
! @if sid
! maybe-mostlyclean-sid: mostlyclean-sid
  
! mostlyclean-sid: 
! 	@[ -f ./sid/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in sid" ; \
! 	(cd sid && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif sid
  
! .PHONY: maybe-clean-sid clean-sid
! maybe-clean-sid:
! @if sid
! maybe-clean-sid: clean-sid
  
! clean-sid: 
! 	@[ -f ./sid/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in sid" ; \
! 	(cd sid && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** clean-automake: 
*** 12095,12303 ****
  	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-bash clean-bash
! maybe-clean-bash:
  
! clean-bash: 
! 	@[ -f ./bash/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in bash" ; \
! 	(cd bash && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-bfd clean-bfd
! maybe-clean-bfd:
  
! clean-bfd: 
! 	@[ -f ./bfd/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in bfd" ; \
! 	(cd bfd && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
- .PHONY: maybe-clean-opcodes clean-opcodes
- maybe-clean-opcodes:
  
! clean-opcodes: 
! 	@[ -f ./opcodes/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in opcodes" ; \
! 	(cd opcodes && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-binutils clean-binutils
! maybe-clean-binutils:
  
! clean-binutils: 
! 	@[ -f ./binutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in binutils" ; \
! 	(cd binutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-bison clean-bison
! maybe-clean-bison:
  
! clean-bison: 
! 	@[ -f ./bison/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in bison" ; \
! 	(cd bison && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-byacc clean-byacc
! maybe-clean-byacc:
  
! clean-byacc: 
! 	@[ -f ./byacc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in byacc" ; \
! 	(cd byacc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-bzip2 clean-bzip2
! maybe-clean-bzip2:
  
! clean-bzip2: 
! 	@[ -f ./bzip2/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in bzip2" ; \
! 	(cd bzip2 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-dejagnu clean-dejagnu
! maybe-clean-dejagnu:
  
! clean-dejagnu: 
! 	@[ -f ./dejagnu/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in dejagnu" ; \
! 	(cd dejagnu && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-diff clean-diff
! maybe-clean-diff:
  
! clean-diff: 
! 	@[ -f ./diff/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in diff" ; \
! 	(cd diff && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-dosutils clean-dosutils
! maybe-clean-dosutils:
  
! clean-dosutils: 
! 	@[ -f ./dosutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in dosutils" ; \
! 	(cd dosutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 19313,19641 ----
  	          clean) \
  	  || exit 1
  
+ @endif sid
  
! .PHONY: maybe-distclean-sid distclean-sid
! maybe-distclean-sid:
! @if sid
! maybe-distclean-sid: distclean-sid
  
! distclean-sid: 
! 	@[ -f ./sid/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in sid" ; \
! 	(cd sid && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif sid
  
! .PHONY: maybe-maintainer-clean-sid maintainer-clean-sid
! maybe-maintainer-clean-sid:
! @if sid
! maybe-maintainer-clean-sid: maintainer-clean-sid
  
! maintainer-clean-sid: 
! 	@[ -f ./sid/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in sid" ; \
! 	(cd sid && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif sid
  
  
! .PHONY: configure-sim maybe-configure-sim
! maybe-configure-sim:
! @if sim
! maybe-configure-sim: configure-sim
! configure-sim:
! 	@test ! -f sim/Makefile || exit 0; \
! 	[ -d sim ] || mkdir sim; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(HOST_EXPORTS) \
! 	echo Configuring in sim; \
! 	cd sim || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/sim"; \
! 	    libsrcdir="$$s/sim";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/sim"; \
! 	    libsrcdir="$$s/sim";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
! 	  || exit 1
! @endif sim
! 
! .PHONY: all-sim maybe-all-sim
! maybe-all-sim:
! @if sim
! TARGET-sim=all
! maybe-all-sim: all-sim
! all-sim: configure-sim
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd sim && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-sim))
! @endif sim
! 
! .PHONY: check-sim maybe-check-sim
! maybe-check-sim:
! @if sim
! maybe-check-sim: check-sim
! 
! check-sim:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd sim && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif sim
! 
! .PHONY: install-sim maybe-install-sim
! maybe-install-sim:
! @if sim
! maybe-install-sim: install-sim
! 
! install-sim: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd sim && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif sim
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-sim info-sim
! maybe-info-sim:
! @if sim
! maybe-info-sim: info-sim
! 
! info-sim: \
!     configure-sim 
! 	@[ -f ./sim/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in sim" ; \
! 	(cd sim && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif sim
  
! .PHONY: maybe-dvi-sim dvi-sim
! maybe-dvi-sim:
! @if sim
! maybe-dvi-sim: dvi-sim
  
! dvi-sim: \
!     configure-sim 
! 	@[ -f ./sim/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in sim" ; \
! 	(cd sim && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif sim
  
! .PHONY: maybe-html-sim html-sim
! maybe-html-sim:
! @if sim
! maybe-html-sim: html-sim
  
! html-sim: \
!     configure-sim 
! 	@[ -f ./sim/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in sim" ; \
! 	(cd sim && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif sim
  
! .PHONY: maybe-TAGS-sim TAGS-sim
! maybe-TAGS-sim:
! @if sim
! maybe-TAGS-sim: TAGS-sim
  
! TAGS-sim: \
!     configure-sim 
! 	@[ -f ./sim/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in sim" ; \
! 	(cd sim && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif sim
  
! .PHONY: maybe-install-info-sim install-info-sim
! maybe-install-info-sim:
! @if sim
! maybe-install-info-sim: install-info-sim
  
! install-info-sim: \
!     configure-sim \
!     info-sim 
! 	@[ -f ./sim/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in sim" ; \
! 	(cd sim && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif sim
  
! .PHONY: maybe-installcheck-sim installcheck-sim
! maybe-installcheck-sim:
! @if sim
! maybe-installcheck-sim: installcheck-sim
  
! installcheck-sim: \
!     configure-sim 
! 	@[ -f ./sim/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in sim" ; \
! 	(cd sim && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif sim
  
! .PHONY: maybe-mostlyclean-sim mostlyclean-sim
! maybe-mostlyclean-sim:
! @if sim
! maybe-mostlyclean-sim: mostlyclean-sim
  
! mostlyclean-sim: 
! 	@[ -f ./sim/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in sim" ; \
! 	(cd sim && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif sim
  
! .PHONY: maybe-clean-sim clean-sim
! maybe-clean-sim:
! @if sim
! maybe-clean-sim: clean-sim
  
! clean-sim: 
! 	@[ -f ./sim/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in sim" ; \
! 	(cd sim && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** clean-dosutils: 
*** 12305,12513 ****
  	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-etc clean-etc
! maybe-clean-etc:
  
! clean-etc: 
! 	@[ -f ./etc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in etc" ; \
! 	(cd etc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-fastjar clean-fastjar
! maybe-clean-fastjar:
  
! clean-fastjar: 
! 	@[ -f ./fastjar/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in fastjar" ; \
! 	(cd fastjar && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
- .PHONY: maybe-clean-fileutils clean-fileutils
- maybe-clean-fileutils:
  
! clean-fileutils: 
! 	@[ -f ./fileutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in fileutils" ; \
! 	(cd fileutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-findutils clean-findutils
! maybe-clean-findutils:
  
! clean-findutils: 
! 	@[ -f ./findutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in findutils" ; \
! 	(cd findutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-find clean-find
! maybe-clean-find:
  
! clean-find: 
! 	@[ -f ./find/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in find" ; \
! 	(cd find && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-flex clean-flex
! maybe-clean-flex:
  
! clean-flex: 
! 	@[ -f ./flex/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in flex" ; \
! 	(cd flex && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-gas clean-gas
! maybe-clean-gas:
  
! clean-gas: 
! 	@[ -f ./gas/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in gas" ; \
! 	(cd gas && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-gawk clean-gawk
! maybe-clean-gawk:
  
! clean-gawk: 
! 	@[ -f ./gawk/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in gawk" ; \
! 	(cd gawk && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-gettext clean-gettext
! maybe-clean-gettext:
  
! clean-gettext: 
! 	@[ -f ./gettext/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in gettext" ; \
! 	(cd gettext && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-gnuserv clean-gnuserv
! maybe-clean-gnuserv:
  
! clean-gnuserv: 
! 	@[ -f ./gnuserv/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in gnuserv" ; \
! 	(cd gnuserv && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 19643,19971 ----
  	          clean) \
  	  || exit 1
  
+ @endif sim
  
! .PHONY: maybe-distclean-sim distclean-sim
! maybe-distclean-sim:
! @if sim
! maybe-distclean-sim: distclean-sim
  
! distclean-sim: 
! 	@[ -f ./sim/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in sim" ; \
! 	(cd sim && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif sim
  
! .PHONY: maybe-maintainer-clean-sim maintainer-clean-sim
! maybe-maintainer-clean-sim:
! @if sim
! maybe-maintainer-clean-sim: maintainer-clean-sim
  
! maintainer-clean-sim: 
! 	@[ -f ./sim/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in sim" ; \
! 	(cd sim && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif sim
  
  
! .PHONY: configure-tar maybe-configure-tar
! maybe-configure-tar:
! @if tar
! maybe-configure-tar: configure-tar
! configure-tar:
! 	@test ! -f tar/Makefile || exit 0; \
! 	[ -d tar ] || mkdir tar; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(HOST_EXPORTS) \
! 	echo Configuring in tar; \
! 	cd tar || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/tar"; \
! 	    libsrcdir="$$s/tar";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/tar"; \
! 	    libsrcdir="$$s/tar";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
! 	  || exit 1
! @endif tar
! 
! .PHONY: all-tar maybe-all-tar
! maybe-all-tar:
! @if tar
! TARGET-tar=all
! maybe-all-tar: all-tar
! all-tar: configure-tar
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd tar && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-tar))
! @endif tar
! 
! .PHONY: check-tar maybe-check-tar
! maybe-check-tar:
! @if tar
! maybe-check-tar: check-tar
! 
! check-tar:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd tar && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif tar
! 
! .PHONY: install-tar maybe-install-tar
! maybe-install-tar:
! @if tar
! maybe-install-tar: install-tar
! 
! install-tar: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd tar && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif tar
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-tar info-tar
! maybe-info-tar:
! @if tar
! maybe-info-tar: info-tar
! 
! info-tar: \
!     configure-tar 
! 	@[ -f ./tar/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in tar" ; \
! 	(cd tar && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif tar
  
! .PHONY: maybe-dvi-tar dvi-tar
! maybe-dvi-tar:
! @if tar
! maybe-dvi-tar: dvi-tar
  
! dvi-tar: \
!     configure-tar 
! 	@[ -f ./tar/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in tar" ; \
! 	(cd tar && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif tar
  
! .PHONY: maybe-html-tar html-tar
! maybe-html-tar:
! @if tar
! maybe-html-tar: html-tar
  
! html-tar: \
!     configure-tar 
! 	@[ -f ./tar/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in tar" ; \
! 	(cd tar && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif tar
  
! .PHONY: maybe-TAGS-tar TAGS-tar
! maybe-TAGS-tar:
! @if tar
! maybe-TAGS-tar: TAGS-tar
  
! TAGS-tar: \
!     configure-tar 
! 	@[ -f ./tar/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in tar" ; \
! 	(cd tar && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif tar
  
! .PHONY: maybe-install-info-tar install-info-tar
! maybe-install-info-tar:
! @if tar
! maybe-install-info-tar: install-info-tar
  
! install-info-tar: \
!     configure-tar \
!     info-tar 
! 	@[ -f ./tar/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in tar" ; \
! 	(cd tar && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif tar
  
! .PHONY: maybe-installcheck-tar installcheck-tar
! maybe-installcheck-tar:
! @if tar
! maybe-installcheck-tar: installcheck-tar
  
! installcheck-tar: \
!     configure-tar 
! 	@[ -f ./tar/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in tar" ; \
! 	(cd tar && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif tar
  
! .PHONY: maybe-mostlyclean-tar mostlyclean-tar
! maybe-mostlyclean-tar:
! @if tar
! maybe-mostlyclean-tar: mostlyclean-tar
  
! mostlyclean-tar: 
! 	@[ -f ./tar/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in tar" ; \
! 	(cd tar && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif tar
  
! .PHONY: maybe-clean-tar clean-tar
! maybe-clean-tar:
! @if tar
! maybe-clean-tar: clean-tar
  
! clean-tar: 
! 	@[ -f ./tar/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in tar" ; \
! 	(cd tar && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** clean-gnuserv: 
*** 12515,12723 ****
  	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-gprof clean-gprof
! maybe-clean-gprof:
  
! clean-gprof: 
! 	@[ -f ./gprof/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in gprof" ; \
! 	(cd gprof && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-gzip clean-gzip
! maybe-clean-gzip:
  
! clean-gzip: 
! 	@[ -f ./gzip/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in gzip" ; \
! 	(cd gzip && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
- .PHONY: maybe-clean-hello clean-hello
- maybe-clean-hello:
  
! clean-hello: 
! 	@[ -f ./hello/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in hello" ; \
! 	(cd hello && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-indent clean-indent
! maybe-clean-indent:
  
! clean-indent: 
! 	@[ -f ./indent/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in indent" ; \
! 	(cd indent && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-intl clean-intl
! maybe-clean-intl:
  
! clean-intl: 
! 	@[ -f ./intl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in intl" ; \
! 	(cd intl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-tcl clean-tcl
! maybe-clean-tcl:
  
! clean-tcl: 
! 	@[ -f ./tcl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in tcl" ; \
! 	(cd tcl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-itcl clean-itcl
! maybe-clean-itcl:
  
! clean-itcl: 
! 	@[ -f ./itcl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in itcl" ; \
! 	(cd itcl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-ld clean-ld
! maybe-clean-ld:
  
! clean-ld: 
! 	@[ -f ./ld/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in ld" ; \
! 	(cd ld && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-libgui clean-libgui
! maybe-clean-libgui:
  
! clean-libgui: 
! 	@[ -f ./libgui/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in libgui" ; \
! 	(cd libgui && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-libiberty clean-libiberty
! maybe-clean-libiberty:
  
! clean-libiberty: 
! 	@[ -f ./libiberty/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in libiberty" ; \
! 	(cd libiberty && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 19973,20296 ----
  	          clean) \
  	  || exit 1
  
+ @endif tar
  
! .PHONY: maybe-distclean-tar distclean-tar
! maybe-distclean-tar:
! @if tar
! maybe-distclean-tar: distclean-tar
  
! distclean-tar: 
! 	@[ -f ./tar/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in tar" ; \
! 	(cd tar && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif tar
  
! .PHONY: maybe-maintainer-clean-tar maintainer-clean-tar
! maybe-maintainer-clean-tar:
! @if tar
! maybe-maintainer-clean-tar: maintainer-clean-tar
  
! maintainer-clean-tar: 
! 	@[ -f ./tar/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in tar" ; \
! 	(cd tar && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif tar
  
  
! .PHONY: configure-texinfo maybe-configure-texinfo
! maybe-configure-texinfo:
! @if texinfo
! maybe-configure-texinfo: configure-texinfo
! configure-texinfo:
! 	@test ! -f texinfo/Makefile || exit 0; \
! 	[ -d texinfo ] || mkdir texinfo; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(HOST_EXPORTS) \
! 	echo Configuring in texinfo; \
! 	cd texinfo || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/texinfo"; \
! 	    libsrcdir="$$s/texinfo";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/texinfo"; \
! 	    libsrcdir="$$s/texinfo";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
! 	  || exit 1
! @endif texinfo
! 
! .PHONY: all-texinfo maybe-all-texinfo
! maybe-all-texinfo:
! @if texinfo
! TARGET-texinfo=all
! maybe-all-texinfo: all-texinfo
! all-texinfo: configure-texinfo
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd texinfo && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-texinfo))
! @endif texinfo
! 
! .PHONY: check-texinfo maybe-check-texinfo
! maybe-check-texinfo:
! @if texinfo
! maybe-check-texinfo: check-texinfo
! 
! check-texinfo:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd texinfo && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif texinfo
! 
! .PHONY: install-texinfo maybe-install-texinfo
! maybe-install-texinfo:
! @if texinfo
! maybe-install-texinfo: install-texinfo
! 
! install-texinfo:
! 
! @endif texinfo
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-texinfo info-texinfo
! maybe-info-texinfo:
! @if texinfo
! maybe-info-texinfo: info-texinfo
! 
! info-texinfo: \
!     configure-texinfo 
! 	@[ -f ./texinfo/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in texinfo" ; \
! 	(cd texinfo && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif texinfo
  
! .PHONY: maybe-dvi-texinfo dvi-texinfo
! maybe-dvi-texinfo:
! @if texinfo
! maybe-dvi-texinfo: dvi-texinfo
  
! dvi-texinfo: \
!     configure-texinfo 
! 	@[ -f ./texinfo/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in texinfo" ; \
! 	(cd texinfo && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif texinfo
  
! .PHONY: maybe-html-texinfo html-texinfo
! maybe-html-texinfo:
! @if texinfo
! maybe-html-texinfo: html-texinfo
  
! html-texinfo: \
!     configure-texinfo 
! 	@[ -f ./texinfo/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in texinfo" ; \
! 	(cd texinfo && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif texinfo
  
! .PHONY: maybe-TAGS-texinfo TAGS-texinfo
! maybe-TAGS-texinfo:
! @if texinfo
! maybe-TAGS-texinfo: TAGS-texinfo
  
! TAGS-texinfo: \
!     configure-texinfo 
! 	@[ -f ./texinfo/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in texinfo" ; \
! 	(cd texinfo && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif texinfo
  
! .PHONY: maybe-install-info-texinfo install-info-texinfo
! maybe-install-info-texinfo:
! @if texinfo
! maybe-install-info-texinfo: install-info-texinfo
  
! install-info-texinfo: \
!     configure-texinfo \
!     info-texinfo 
! 	@[ -f ./texinfo/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in texinfo" ; \
! 	(cd texinfo && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif texinfo
  
! .PHONY: maybe-installcheck-texinfo installcheck-texinfo
! maybe-installcheck-texinfo:
! @if texinfo
! maybe-installcheck-texinfo: installcheck-texinfo
  
! installcheck-texinfo: \
!     configure-texinfo 
! 	@[ -f ./texinfo/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in texinfo" ; \
! 	(cd texinfo && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif texinfo
  
! .PHONY: maybe-mostlyclean-texinfo mostlyclean-texinfo
! maybe-mostlyclean-texinfo:
! @if texinfo
! maybe-mostlyclean-texinfo: mostlyclean-texinfo
  
! mostlyclean-texinfo: 
! 	@[ -f ./texinfo/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in texinfo" ; \
! 	(cd texinfo && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif texinfo
  
! .PHONY: maybe-clean-texinfo clean-texinfo
! maybe-clean-texinfo:
! @if texinfo
! maybe-clean-texinfo: clean-texinfo
  
! clean-texinfo: 
! 	@[ -f ./texinfo/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in texinfo" ; \
! 	(cd texinfo && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** clean-libiberty: 
*** 12725,12933 ****
  	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-libtool clean-libtool
! maybe-clean-libtool:
  
! clean-libtool: 
! 	@[ -f ./libtool/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in libtool" ; \
! 	(cd libtool && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-m4 clean-m4
! maybe-clean-m4:
  
! clean-m4: 
! 	@[ -f ./m4/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in m4" ; \
! 	(cd m4 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
- .PHONY: maybe-clean-make clean-make
- maybe-clean-make:
  
! clean-make: 
! 	@[ -f ./make/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in make" ; \
! 	(cd make && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-mmalloc clean-mmalloc
! maybe-clean-mmalloc:
  
! clean-mmalloc: 
! 	@[ -f ./mmalloc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in mmalloc" ; \
! 	(cd mmalloc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-patch clean-patch
! maybe-clean-patch:
  
! clean-patch: 
! 	@[ -f ./patch/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in patch" ; \
! 	(cd patch && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-perl clean-perl
! maybe-clean-perl:
  
! clean-perl: 
! 	@[ -f ./perl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in perl" ; \
! 	(cd perl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-prms clean-prms
! maybe-clean-prms:
  
! clean-prms: 
! 	@[ -f ./prms/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in prms" ; \
! 	(cd prms && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-rcs clean-rcs
! maybe-clean-rcs:
  
! clean-rcs: 
! 	@[ -f ./rcs/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in rcs" ; \
! 	(cd rcs && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-readline clean-readline
! maybe-clean-readline:
  
! clean-readline: 
! 	@[ -f ./readline/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in readline" ; \
! 	(cd readline && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-release clean-release
! maybe-clean-release:
  
! clean-release: 
! 	@[ -f ./release/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in release" ; \
! 	(cd release && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 20298,20626 ----
  	          clean) \
  	  || exit 1
  
+ @endif texinfo
  
! .PHONY: maybe-distclean-texinfo distclean-texinfo
! maybe-distclean-texinfo:
! @if texinfo
! maybe-distclean-texinfo: distclean-texinfo
  
! distclean-texinfo: 
! 	@[ -f ./texinfo/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in texinfo" ; \
! 	(cd texinfo && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif texinfo
  
! .PHONY: maybe-maintainer-clean-texinfo maintainer-clean-texinfo
! maybe-maintainer-clean-texinfo:
! @if texinfo
! maybe-maintainer-clean-texinfo: maintainer-clean-texinfo
  
! maintainer-clean-texinfo: 
! 	@[ -f ./texinfo/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in texinfo" ; \
! 	(cd texinfo && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif texinfo
  
  
! .PHONY: configure-textutils maybe-configure-textutils
! maybe-configure-textutils:
! @if textutils
! maybe-configure-textutils: configure-textutils
! configure-textutils:
! 	@test ! -f textutils/Makefile || exit 0; \
! 	[ -d textutils ] || mkdir textutils; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in textutils; \
+ 	cd textutils || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/textutils"; \
+ 	    libsrcdir="$$s/textutils";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/textutils"; \
+ 	    libsrcdir="$$s/textutils";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif textutils
+ 
+ .PHONY: all-textutils maybe-all-textutils
+ maybe-all-textutils:
+ @if textutils
+ TARGET-textutils=all
+ maybe-all-textutils: all-textutils
+ all-textutils: configure-textutils
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd textutils && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-textutils))
! @endif textutils
! 
! .PHONY: check-textutils maybe-check-textutils
! maybe-check-textutils:
! @if textutils
! maybe-check-textutils: check-textutils
! 
! check-textutils:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd textutils && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif textutils
! 
! .PHONY: install-textutils maybe-install-textutils
! maybe-install-textutils:
! @if textutils
! maybe-install-textutils: install-textutils
! 
! install-textutils: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd textutils && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif textutils
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-textutils info-textutils
! maybe-info-textutils:
! @if textutils
! maybe-info-textutils: info-textutils
! 
! info-textutils: \
!     configure-textutils 
! 	@[ -f ./textutils/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in textutils" ; \
! 	(cd textutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif textutils
  
! .PHONY: maybe-dvi-textutils dvi-textutils
! maybe-dvi-textutils:
! @if textutils
! maybe-dvi-textutils: dvi-textutils
  
! dvi-textutils: \
!     configure-textutils 
! 	@[ -f ./textutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in textutils" ; \
! 	(cd textutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif textutils
  
! .PHONY: maybe-html-textutils html-textutils
! maybe-html-textutils:
! @if textutils
! maybe-html-textutils: html-textutils
  
! html-textutils: \
!     configure-textutils 
! 	@[ -f ./textutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in textutils" ; \
! 	(cd textutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif textutils
  
! .PHONY: maybe-TAGS-textutils TAGS-textutils
! maybe-TAGS-textutils:
! @if textutils
! maybe-TAGS-textutils: TAGS-textutils
  
! TAGS-textutils: \
!     configure-textutils 
! 	@[ -f ./textutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in textutils" ; \
! 	(cd textutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif textutils
  
! .PHONY: maybe-install-info-textutils install-info-textutils
! maybe-install-info-textutils:
! @if textutils
! maybe-install-info-textutils: install-info-textutils
  
! install-info-textutils: \
!     configure-textutils \
!     info-textutils 
! 	@[ -f ./textutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in textutils" ; \
! 	(cd textutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif textutils
  
! .PHONY: maybe-installcheck-textutils installcheck-textutils
! maybe-installcheck-textutils:
! @if textutils
! maybe-installcheck-textutils: installcheck-textutils
  
! installcheck-textutils: \
!     configure-textutils 
! 	@[ -f ./textutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in textutils" ; \
! 	(cd textutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif textutils
  
! .PHONY: maybe-mostlyclean-textutils mostlyclean-textutils
! maybe-mostlyclean-textutils:
! @if textutils
! maybe-mostlyclean-textutils: mostlyclean-textutils
  
! mostlyclean-textutils: 
! 	@[ -f ./textutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in textutils" ; \
! 	(cd textutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif textutils
  
! .PHONY: maybe-clean-textutils clean-textutils
! maybe-clean-textutils:
! @if textutils
! maybe-clean-textutils: clean-textutils
  
! clean-textutils: 
! 	@[ -f ./textutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in textutils" ; \
! 	(cd textutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** clean-release: 
*** 12935,13139 ****
  	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-recode clean-recode
! maybe-clean-recode:
  
! clean-recode: 
! 	@[ -f ./recode/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in recode" ; \
! 	(cd recode && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-sed clean-sed
! maybe-clean-sed:
  
! clean-sed: 
! 	@[ -f ./sed/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in sed" ; \
! 	(cd sed && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
- .PHONY: maybe-clean-send-pr clean-send-pr
- maybe-clean-send-pr:
  
! clean-send-pr: 
! 	@[ -f ./send-pr/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in send-pr" ; \
! 	(cd send-pr && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-shellutils clean-shellutils
! maybe-clean-shellutils:
  
! clean-shellutils: 
! 	@[ -f ./shellutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in shellutils" ; \
! 	(cd shellutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-sid clean-sid
! maybe-clean-sid:
  
! clean-sid: 
! 	@[ -f ./sid/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in sid" ; \
! 	(cd sid && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-sim clean-sim
! maybe-clean-sim:
  
! clean-sim: 
! 	@[ -f ./sim/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in sim" ; \
! 	(cd sim && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-tar clean-tar
! maybe-clean-tar:
  
! clean-tar: 
! 	@[ -f ./tar/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in tar" ; \
! 	(cd tar && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-texinfo clean-texinfo
! maybe-clean-texinfo:
  
! clean-texinfo: 
! 	@[ -f ./texinfo/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in texinfo" ; \
! 	(cd texinfo && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-textutils clean-textutils
! maybe-clean-textutils:
  
! clean-textutils: 
! 	@[ -f ./textutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in textutils" ; \
! 	(cd textutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
  .PHONY: maybe-clean-time clean-time
  maybe-clean-time:
  
  clean-time: 
  	@[ -f ./time/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
  	echo "Doing clean in time" ; \
--- 20628,20952 ----
  	          clean) \
  	  || exit 1
  
+ @endif textutils
  
! .PHONY: maybe-distclean-textutils distclean-textutils
! maybe-distclean-textutils:
! @if textutils
! maybe-distclean-textutils: distclean-textutils
  
! distclean-textutils: 
! 	@[ -f ./textutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in textutils" ; \
! 	(cd textutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif textutils
  
! .PHONY: maybe-maintainer-clean-textutils maintainer-clean-textutils
! maybe-maintainer-clean-textutils:
! @if textutils
! maybe-maintainer-clean-textutils: maintainer-clean-textutils
  
! maintainer-clean-textutils: 
! 	@[ -f ./textutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in textutils" ; \
! 	(cd textutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif textutils
  
  
! .PHONY: configure-time maybe-configure-time
! maybe-configure-time:
! @if time
! maybe-configure-time: configure-time
! configure-time:
! 	@test ! -f time/Makefile || exit 0; \
! 	[ -d time ] || mkdir time; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in time; \
+ 	cd time || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/time"; \
+ 	    libsrcdir="$$s/time";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/time"; \
+ 	    libsrcdir="$$s/time";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif time
+ 
+ .PHONY: all-time maybe-all-time
+ maybe-all-time:
+ @if time
+ TARGET-time=all
+ maybe-all-time: all-time
+ all-time: configure-time
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd time && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-time))
! @endif time
! 
! .PHONY: check-time maybe-check-time
! maybe-check-time:
! @if time
! maybe-check-time: check-time
! 
! check-time:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd time && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif time
! 
! .PHONY: install-time maybe-install-time
! maybe-install-time:
! @if time
! maybe-install-time: install-time
! 
! install-time: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd time && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif time
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-time info-time
! maybe-info-time:
! @if time
! maybe-info-time: info-time
! 
! info-time: \
!     configure-time 
! 	@[ -f ./time/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in time" ; \
! 	(cd time && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif time
  
! .PHONY: maybe-dvi-time dvi-time
! maybe-dvi-time:
! @if time
! maybe-dvi-time: dvi-time
  
! dvi-time: \
!     configure-time 
! 	@[ -f ./time/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in time" ; \
! 	(cd time && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif time
  
! .PHONY: maybe-html-time html-time
! maybe-html-time:
! @if time
! maybe-html-time: html-time
  
! html-time: \
!     configure-time 
! 	@[ -f ./time/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in time" ; \
! 	(cd time && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif time
  
! .PHONY: maybe-TAGS-time TAGS-time
! maybe-TAGS-time:
! @if time
! maybe-TAGS-time: TAGS-time
  
! TAGS-time: \
!     configure-time 
! 	@[ -f ./time/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in time" ; \
! 	(cd time && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif time
  
! .PHONY: maybe-install-info-time install-info-time
! maybe-install-info-time:
! @if time
! maybe-install-info-time: install-info-time
  
! install-info-time: \
!     configure-time \
!     info-time 
! 	@[ -f ./time/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in time" ; \
! 	(cd time && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif time
  
! .PHONY: maybe-installcheck-time installcheck-time
! maybe-installcheck-time:
! @if time
! maybe-installcheck-time: installcheck-time
  
! installcheck-time: \
!     configure-time 
! 	@[ -f ./time/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in time" ; \
! 	(cd time && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif time
  
! .PHONY: maybe-mostlyclean-time mostlyclean-time
! maybe-mostlyclean-time:
! @if time
! maybe-mostlyclean-time: mostlyclean-time
  
! mostlyclean-time: 
! 	@[ -f ./time/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in time" ; \
! 	(cd time && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif time
  
  .PHONY: maybe-clean-time clean-time
  maybe-clean-time:
+ @if time
+ maybe-clean-time: clean-time
  
  clean-time: 
  	@[ -f ./time/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
  	echo "Doing clean in time" ; \
*************** clean-time: 
*** 13145,13311 ****
  	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-uudecode clean-uudecode
! maybe-clean-uudecode:
  
! clean-uudecode: 
  	@[ -f ./uudecode/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in uudecode" ; \
  	(cd uudecode && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-wdiff clean-wdiff
! maybe-clean-wdiff:
  
! clean-wdiff: 
! 	@[ -f ./wdiff/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in wdiff" ; \
! 	(cd wdiff && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-zip clean-zip
! maybe-clean-zip:
  
! clean-zip: 
! 	@[ -f ./zip/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in zip" ; \
! 	(cd zip && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-zlib clean-zlib
! maybe-clean-zlib:
  
! clean-zlib: 
! 	@[ -f ./zlib/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in zlib" ; \
! 	(cd zlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-gdb clean-gdb
! maybe-clean-gdb:
  
! clean-gdb: 
! 	@[ -f ./gdb/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in gdb" ; \
! 	(cd gdb && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-expect clean-expect
! maybe-clean-expect:
  
! clean-expect: 
! 	@[ -f ./expect/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in expect" ; \
! 	(cd expect && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-guile clean-guile
! maybe-clean-guile:
  
! clean-guile: 
! 	@[ -f ./guile/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in guile" ; \
! 	(cd guile && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-tk clean-tk
! maybe-clean-tk:
  
! clean-tk: 
! 	@[ -f ./tk/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in tk" ; \
! 	(cd tk && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 20958,21286 ----
  	          clean) \
  	  || exit 1
  
+ @endif time
  
! .PHONY: maybe-distclean-time distclean-time
! maybe-distclean-time:
! @if time
! maybe-distclean-time: distclean-time
  
! distclean-time: 
! 	@[ -f ./time/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	echo "Doing distclean in time" ; \
! 	(cd time && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
! 	  || exit 1
! 
! @endif time
! 
! .PHONY: maybe-maintainer-clean-time maintainer-clean-time
! maybe-maintainer-clean-time:
! @if time
! maybe-maintainer-clean-time: maintainer-clean-time
! 
! maintainer-clean-time: 
! 	@[ -f ./time/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	echo "Doing maintainer-clean in time" ; \
! 	(cd time && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
! 	  || exit 1
! 
! @endif time
! 
! 
! .PHONY: configure-uudecode maybe-configure-uudecode
! maybe-configure-uudecode:
! @if uudecode
! maybe-configure-uudecode: configure-uudecode
! configure-uudecode:
! 	@test ! -f uudecode/Makefile || exit 0; \
! 	[ -d uudecode ] || mkdir uudecode; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(HOST_EXPORTS) \
! 	echo Configuring in uudecode; \
! 	cd uudecode || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/uudecode"; \
! 	    libsrcdir="$$s/uudecode";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/uudecode"; \
! 	    libsrcdir="$$s/uudecode";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
! 	  || exit 1
! @endif uudecode
! 
! .PHONY: all-uudecode maybe-all-uudecode
! maybe-all-uudecode:
! @if uudecode
! TARGET-uudecode=all
! maybe-all-uudecode: all-uudecode
! all-uudecode: configure-uudecode
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd uudecode && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-uudecode))
! @endif uudecode
! 
! .PHONY: check-uudecode maybe-check-uudecode
! maybe-check-uudecode:
! @if uudecode
! maybe-check-uudecode: check-uudecode
! 
! check-uudecode:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd uudecode && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif uudecode
! 
! .PHONY: install-uudecode maybe-install-uudecode
! maybe-install-uudecode:
! @if uudecode
! maybe-install-uudecode: install-uudecode
! 
! install-uudecode: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd uudecode && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif uudecode
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-uudecode info-uudecode
! maybe-info-uudecode:
! @if uudecode
! maybe-info-uudecode: info-uudecode
! 
! info-uudecode: \
!     configure-uudecode 
  	@[ -f ./uudecode/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in uudecode" ; \
  	(cd uudecode && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif uudecode
  
! .PHONY: maybe-dvi-uudecode dvi-uudecode
! maybe-dvi-uudecode:
! @if uudecode
! maybe-dvi-uudecode: dvi-uudecode
  
! dvi-uudecode: \
!     configure-uudecode 
! 	@[ -f ./uudecode/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in uudecode" ; \
! 	(cd uudecode && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif uudecode
  
! .PHONY: maybe-html-uudecode html-uudecode
! maybe-html-uudecode:
! @if uudecode
! maybe-html-uudecode: html-uudecode
  
! html-uudecode: \
!     configure-uudecode 
! 	@[ -f ./uudecode/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in uudecode" ; \
! 	(cd uudecode && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif uudecode
  
! .PHONY: maybe-TAGS-uudecode TAGS-uudecode
! maybe-TAGS-uudecode:
! @if uudecode
! maybe-TAGS-uudecode: TAGS-uudecode
  
! TAGS-uudecode: \
!     configure-uudecode 
! 	@[ -f ./uudecode/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in uudecode" ; \
! 	(cd uudecode && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif uudecode
  
! .PHONY: maybe-install-info-uudecode install-info-uudecode
! maybe-install-info-uudecode:
! @if uudecode
! maybe-install-info-uudecode: install-info-uudecode
  
! install-info-uudecode: \
!     configure-uudecode \
!     info-uudecode 
! 	@[ -f ./uudecode/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in uudecode" ; \
! 	(cd uudecode && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif uudecode
  
! .PHONY: maybe-installcheck-uudecode installcheck-uudecode
! maybe-installcheck-uudecode:
! @if uudecode
! maybe-installcheck-uudecode: installcheck-uudecode
  
! installcheck-uudecode: \
!     configure-uudecode 
! 	@[ -f ./uudecode/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in uudecode" ; \
! 	(cd uudecode && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif uudecode
  
! .PHONY: maybe-mostlyclean-uudecode mostlyclean-uudecode
! maybe-mostlyclean-uudecode:
! @if uudecode
! maybe-mostlyclean-uudecode: mostlyclean-uudecode
  
! mostlyclean-uudecode: 
! 	@[ -f ./uudecode/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in uudecode" ; \
! 	(cd uudecode && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif uudecode
  
! .PHONY: maybe-clean-uudecode clean-uudecode
! maybe-clean-uudecode:
! @if uudecode
! maybe-clean-uudecode: clean-uudecode
  
! clean-uudecode: 
! 	@[ -f ./uudecode/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in uudecode" ; \
! 	(cd uudecode && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** clean-tk: 
*** 13313,13475 ****
  	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-tix clean-tix
! maybe-clean-tix:
  
! clean-tix: 
! 	@[ -f ./tix/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in tix" ; \
! 	(cd tix && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-libtermcap clean-libtermcap
! maybe-clean-libtermcap:
  
! # libtermcap doesn't support clean.
! clean-libtermcap:
  
  
- .PHONY: maybe-clean-utils clean-utils
- maybe-clean-utils:
  
! clean-utils: 
! 	@[ -f ./utils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in utils" ; \
! 	(cd utils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
  
! # Target modules.
  
! .PHONY: maybe-clean-target-libstdc++-v3 clean-target-libstdc++-v3
! maybe-clean-target-libstdc++-v3:
  
! clean-target-libstdc++-v3: 
! 	@[ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing clean in $(TARGET_SUBDIR)/libstdc++-v3" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libstdc++-v3 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-target-newlib clean-target-newlib
! maybe-clean-target-newlib:
  
! clean-target-newlib: 
! 	@[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing clean in $(TARGET_SUBDIR)/newlib" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/newlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-target-libf2c clean-target-libf2c
! maybe-clean-target-libf2c:
  
! clean-target-libf2c: 
! 	@[ -f $(TARGET_SUBDIR)/libf2c/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing clean in $(TARGET_SUBDIR)/libf2c" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libf2c && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-target-libobjc clean-target-libobjc
! maybe-clean-target-libobjc:
  
! clean-target-libobjc: 
! 	@[ -f $(TARGET_SUBDIR)/libobjc/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing clean in $(TARGET_SUBDIR)/libobjc" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libobjc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-target-libtermcap clean-target-libtermcap
! maybe-clean-target-libtermcap:
  
! # libtermcap doesn't support clean.
! clean-target-libtermcap:
  
  
! .PHONY: maybe-clean-target-winsup clean-target-winsup
! maybe-clean-target-winsup:
  
! clean-target-winsup: 
! 	@[ -f $(TARGET_SUBDIR)/winsup/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing clean in $(TARGET_SUBDIR)/winsup" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/winsup && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 21288,21616 ----
  	          clean) \
  	  || exit 1
  
+ @endif uudecode
  
! .PHONY: maybe-distclean-uudecode distclean-uudecode
! maybe-distclean-uudecode:
! @if uudecode
! maybe-distclean-uudecode: distclean-uudecode
  
! distclean-uudecode: 
! 	@[ -f ./uudecode/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in uudecode" ; \
! 	(cd uudecode && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif uudecode
  
! .PHONY: maybe-maintainer-clean-uudecode maintainer-clean-uudecode
! maybe-maintainer-clean-uudecode:
! @if uudecode
! maybe-maintainer-clean-uudecode: maintainer-clean-uudecode
  
! maintainer-clean-uudecode: 
! 	@[ -f ./uudecode/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	echo "Doing maintainer-clean in uudecode" ; \
! 	(cd uudecode && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
! 	  || exit 1
  
+ @endif uudecode
  
  
! .PHONY: configure-wdiff maybe-configure-wdiff
! maybe-configure-wdiff:
! @if wdiff
! maybe-configure-wdiff: configure-wdiff
! configure-wdiff:
! 	@test ! -f wdiff/Makefile || exit 0; \
! 	[ -d wdiff ] || mkdir wdiff; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in wdiff; \
+ 	cd wdiff || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/wdiff"; \
+ 	    libsrcdir="$$s/wdiff";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/wdiff"; \
+ 	    libsrcdir="$$s/wdiff";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif wdiff
+ 
+ .PHONY: all-wdiff maybe-all-wdiff
+ maybe-all-wdiff:
+ @if wdiff
+ TARGET-wdiff=all
+ maybe-all-wdiff: all-wdiff
+ all-wdiff: configure-wdiff
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd wdiff && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-wdiff))
! @endif wdiff
! 
! .PHONY: check-wdiff maybe-check-wdiff
! maybe-check-wdiff:
! @if wdiff
! maybe-check-wdiff: check-wdiff
! 
! check-wdiff:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd wdiff && $(MAKE) $(FLAGS_TO_PASS) check)
! 
! @endif wdiff
! 
! .PHONY: install-wdiff maybe-install-wdiff
! maybe-install-wdiff:
! @if wdiff
! maybe-install-wdiff: install-wdiff
! 
! install-wdiff: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd wdiff && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif wdiff
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-wdiff info-wdiff
! maybe-info-wdiff:
! @if wdiff
! maybe-info-wdiff: info-wdiff
! 
! info-wdiff: \
!     configure-wdiff 
! 	@[ -f ./wdiff/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in wdiff" ; \
! 	(cd wdiff && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif wdiff
  
+ .PHONY: maybe-dvi-wdiff dvi-wdiff
+ maybe-dvi-wdiff:
+ @if wdiff
+ maybe-dvi-wdiff: dvi-wdiff
  
! dvi-wdiff: \
!     configure-wdiff 
! 	@[ -f ./wdiff/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	echo "Doing dvi in wdiff" ; \
! 	(cd wdiff && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
! 	  || exit 1
  
! @endif wdiff
  
! .PHONY: maybe-html-wdiff html-wdiff
! maybe-html-wdiff:
! @if wdiff
! maybe-html-wdiff: html-wdiff
! 
! html-wdiff: \
!     configure-wdiff 
! 	@[ -f ./wdiff/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in wdiff" ; \
! 	(cd wdiff && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif wdiff
  
! .PHONY: maybe-TAGS-wdiff TAGS-wdiff
! maybe-TAGS-wdiff:
! @if wdiff
! maybe-TAGS-wdiff: TAGS-wdiff
  
! TAGS-wdiff: \
!     configure-wdiff 
! 	@[ -f ./wdiff/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in wdiff" ; \
! 	(cd wdiff && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif wdiff
  
! .PHONY: maybe-install-info-wdiff install-info-wdiff
! maybe-install-info-wdiff:
! @if wdiff
! maybe-install-info-wdiff: install-info-wdiff
  
! install-info-wdiff: \
!     configure-wdiff \
!     info-wdiff 
! 	@[ -f ./wdiff/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in wdiff" ; \
! 	(cd wdiff && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif wdiff
  
! .PHONY: maybe-installcheck-wdiff installcheck-wdiff
! maybe-installcheck-wdiff:
! @if wdiff
! maybe-installcheck-wdiff: installcheck-wdiff
  
! installcheck-wdiff: \
!     configure-wdiff 
! 	@[ -f ./wdiff/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in wdiff" ; \
! 	(cd wdiff && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif wdiff
  
! .PHONY: maybe-mostlyclean-wdiff mostlyclean-wdiff
! maybe-mostlyclean-wdiff:
! @if wdiff
! maybe-mostlyclean-wdiff: mostlyclean-wdiff
  
! mostlyclean-wdiff: 
! 	@[ -f ./wdiff/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	echo "Doing mostlyclean in wdiff" ; \
! 	(cd wdiff && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
! 	  || exit 1
  
+ @endif wdiff
  
! .PHONY: maybe-clean-wdiff clean-wdiff
! maybe-clean-wdiff:
! @if wdiff
! maybe-clean-wdiff: clean-wdiff
  
! clean-wdiff: 
! 	@[ -f ./wdiff/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in wdiff" ; \
! 	(cd wdiff && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** clean-target-winsup: 
*** 13477,13685 ****
  	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-target-libgloss clean-target-libgloss
! maybe-clean-target-libgloss:
  
! clean-target-libgloss: 
! 	@[ -f $(TARGET_SUBDIR)/libgloss/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing clean in $(TARGET_SUBDIR)/libgloss" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libgloss && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-target-libiberty clean-target-libiberty
! maybe-clean-target-libiberty:
  
! clean-target-libiberty: 
! 	@[ -f $(TARGET_SUBDIR)/libiberty/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing clean in $(TARGET_SUBDIR)/libiberty" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libiberty && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
- .PHONY: maybe-clean-target-gperf clean-target-gperf
- maybe-clean-target-gperf:
  
! clean-target-gperf: 
! 	@[ -f $(TARGET_SUBDIR)/gperf/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing clean in $(TARGET_SUBDIR)/gperf" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/gperf && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-target-examples clean-target-examples
! maybe-clean-target-examples:
  
! clean-target-examples: 
! 	@[ -f $(TARGET_SUBDIR)/examples/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing clean in $(TARGET_SUBDIR)/examples" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/examples && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-target-libffi clean-target-libffi
! maybe-clean-target-libffi:
  
! clean-target-libffi: 
! 	@[ -f $(TARGET_SUBDIR)/libffi/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing clean in $(TARGET_SUBDIR)/libffi" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libffi && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-target-libjava clean-target-libjava
! maybe-clean-target-libjava:
  
! clean-target-libjava: 
! 	@[ -f $(TARGET_SUBDIR)/libjava/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing clean in $(TARGET_SUBDIR)/libjava" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libjava && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-target-zlib clean-target-zlib
! maybe-clean-target-zlib:
  
! clean-target-zlib: 
! 	@[ -f $(TARGET_SUBDIR)/zlib/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing clean in $(TARGET_SUBDIR)/zlib" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/zlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-target-boehm-gc clean-target-boehm-gc
! maybe-clean-target-boehm-gc:
  
! clean-target-boehm-gc: 
! 	@[ -f $(TARGET_SUBDIR)/boehm-gc/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing clean in $(TARGET_SUBDIR)/boehm-gc" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/boehm-gc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-target-qthreads clean-target-qthreads
! maybe-clean-target-qthreads:
  
! clean-target-qthreads: 
! 	@[ -f $(TARGET_SUBDIR)/qthreads/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing clean in $(TARGET_SUBDIR)/qthreads" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/qthreads && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
  
! .PHONY: maybe-clean-target-rda clean-target-rda
! maybe-clean-target-rda:
  
! clean-target-rda: 
! 	@[ -f $(TARGET_SUBDIR)/rda/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing clean in $(TARGET_SUBDIR)/rda" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/rda && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 21618,21949 ----
  	          clean) \
  	  || exit 1
  
+ @endif wdiff
  
! .PHONY: maybe-distclean-wdiff distclean-wdiff
! maybe-distclean-wdiff:
! @if wdiff
! maybe-distclean-wdiff: distclean-wdiff
  
! distclean-wdiff: 
! 	@[ -f ./wdiff/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in wdiff" ; \
! 	(cd wdiff && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
+ @endif wdiff
  
! .PHONY: maybe-maintainer-clean-wdiff maintainer-clean-wdiff
! maybe-maintainer-clean-wdiff:
! @if wdiff
! maybe-maintainer-clean-wdiff: maintainer-clean-wdiff
  
! maintainer-clean-wdiff: 
! 	@[ -f ./wdiff/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in wdiff" ; \
! 	(cd wdiff && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif wdiff
  
  
! .PHONY: configure-zip maybe-configure-zip
! maybe-configure-zip:
! @if zip
! maybe-configure-zip: configure-zip
! configure-zip:
! 	@test ! -f zip/Makefile || exit 0; \
! 	[ -d zip ] || mkdir zip; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in zip; \
+ 	cd zip || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/zip"; \
+ 	    libsrcdir="$$s/zip";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/zip"; \
+ 	    libsrcdir="$$s/zip";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif zip
+ 
+ .PHONY: all-zip maybe-all-zip
+ maybe-all-zip:
+ @if zip
+ TARGET-zip=all
+ maybe-all-zip: all-zip
+ all-zip: configure-zip
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd zip && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-zip))
! @endif zip
! 
! .PHONY: check-zip maybe-check-zip
! maybe-check-zip:
! @if zip
! maybe-check-zip: check-zip
! 
! # This module is only tested in a native toolchain.
! check-zip:
! 	@if [ '$(host)' = '$(target)' ] ; then \
! 	  r=`${PWD_COMMAND}`; export r; \
! 	  s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	  $(SET_LIB_PATH) \
! 	  $(HOST_EXPORTS) \
! 	  (cd zip && $(MAKE) $(FLAGS_TO_PASS)  check); \
! 	fi
! 
! @endif zip
! 
! .PHONY: install-zip maybe-install-zip
! maybe-install-zip:
! @if zip
! maybe-install-zip: install-zip
! 
! install-zip: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd zip && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif zip
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-zip info-zip
! maybe-info-zip:
! @if zip
! maybe-info-zip: info-zip
! 
! info-zip: \
!     configure-zip 
! 	@[ -f ./zip/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in zip" ; \
! 	(cd zip && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif zip
  
! .PHONY: maybe-dvi-zip dvi-zip
! maybe-dvi-zip:
! @if zip
! maybe-dvi-zip: dvi-zip
  
! dvi-zip: \
!     configure-zip 
! 	@[ -f ./zip/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in zip" ; \
! 	(cd zip && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif zip
  
! .PHONY: maybe-html-zip html-zip
! maybe-html-zip:
! @if zip
! maybe-html-zip: html-zip
  
! html-zip: \
!     configure-zip 
! 	@[ -f ./zip/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in zip" ; \
! 	(cd zip && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif zip
  
! .PHONY: maybe-TAGS-zip TAGS-zip
! maybe-TAGS-zip:
! @if zip
! maybe-TAGS-zip: TAGS-zip
  
! TAGS-zip: \
!     configure-zip 
! 	@[ -f ./zip/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in zip" ; \
! 	(cd zip && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif zip
  
! .PHONY: maybe-install-info-zip install-info-zip
! maybe-install-info-zip:
! @if zip
! maybe-install-info-zip: install-info-zip
  
! install-info-zip: \
!     configure-zip \
!     info-zip 
! 	@[ -f ./zip/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in zip" ; \
! 	(cd zip && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif zip
  
! .PHONY: maybe-installcheck-zip installcheck-zip
! maybe-installcheck-zip:
! @if zip
! maybe-installcheck-zip: installcheck-zip
  
! installcheck-zip: \
!     configure-zip 
! 	@[ -f ./zip/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in zip" ; \
! 	(cd zip && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif zip
  
! .PHONY: maybe-mostlyclean-zip mostlyclean-zip
! maybe-mostlyclean-zip:
! @if zip
! maybe-mostlyclean-zip: mostlyclean-zip
  
! mostlyclean-zip: 
! 	@[ -f ./zip/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in zip" ; \
! 	(cd zip && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif zip
  
! .PHONY: maybe-clean-zip clean-zip
! maybe-clean-zip:
! @if zip
! maybe-clean-zip: clean-zip
  
! clean-zip: 
! 	@[ -f ./zip/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in zip" ; \
! 	(cd zip && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** clean-target-rda: 
*** 13687,13986 ****
  	          clean) \
  	  || exit 1
  
  
  
! .PHONY: do-distclean
! do-distclean: distclean-host distclean-target
  
! .PHONY: distclean-host
! distclean-host: maybe-distclean-gcc  \
!     maybe-distclean-ash \
!     maybe-distclean-autoconf \
!     maybe-distclean-automake \
!     maybe-distclean-bash \
!     maybe-distclean-bfd \
!     maybe-distclean-opcodes \
!     maybe-distclean-binutils \
!     maybe-distclean-bison \
!     maybe-distclean-byacc \
!     maybe-distclean-bzip2 \
!     maybe-distclean-dejagnu \
!     maybe-distclean-diff \
!     maybe-distclean-dosutils \
!     maybe-distclean-etc \
!     maybe-distclean-fastjar \
!     maybe-distclean-fileutils \
!     maybe-distclean-findutils \
!     maybe-distclean-find \
!     maybe-distclean-flex \
!     maybe-distclean-gas \
!     maybe-distclean-gawk \
!     maybe-distclean-gettext \
!     maybe-distclean-gnuserv \
!     maybe-distclean-gprof \
!     maybe-distclean-gzip \
!     maybe-distclean-hello \
!     maybe-distclean-indent \
!     maybe-distclean-intl \
!     maybe-distclean-tcl \
!     maybe-distclean-itcl \
!     maybe-distclean-ld \
!     maybe-distclean-libgui \
!     maybe-distclean-libiberty \
!     maybe-distclean-libtool \
!     maybe-distclean-m4 \
!     maybe-distclean-make \
!     maybe-distclean-mmalloc \
!     maybe-distclean-patch \
!     maybe-distclean-perl \
!     maybe-distclean-prms \
!     maybe-distclean-rcs \
!     maybe-distclean-readline \
!     maybe-distclean-release \
!     maybe-distclean-recode \
!     maybe-distclean-sed \
!     maybe-distclean-send-pr \
!     maybe-distclean-shellutils \
!     maybe-distclean-sid \
!     maybe-distclean-sim \
!     maybe-distclean-tar \
!     maybe-distclean-texinfo \
!     maybe-distclean-textutils \
!     maybe-distclean-time \
!     maybe-distclean-uudecode \
!     maybe-distclean-wdiff \
!     maybe-distclean-zip \
!     maybe-distclean-zlib \
!     maybe-distclean-gdb \
!     maybe-distclean-expect \
!     maybe-distclean-guile \
!     maybe-distclean-tk \
!     maybe-distclean-tix \
!     maybe-distclean-libtermcap \
!     maybe-distclean-utils
  
! .PHONY: distclean-target
! distclean-target:  \
!     maybe-distclean-target-libstdc++-v3 \
!     maybe-distclean-target-newlib \
!     maybe-distclean-target-libf2c \
!     maybe-distclean-target-libobjc \
!     maybe-distclean-target-libtermcap \
!     maybe-distclean-target-winsup \
!     maybe-distclean-target-libgloss \
!     maybe-distclean-target-libiberty \
!     maybe-distclean-target-gperf \
!     maybe-distclean-target-examples \
!     maybe-distclean-target-libffi \
!     maybe-distclean-target-libjava \
!     maybe-distclean-target-zlib \
!     maybe-distclean-target-boehm-gc \
!     maybe-distclean-target-qthreads \
!     maybe-distclean-target-rda
  
! # GCC, the eternal special case
! .PHONY: maybe-distclean-gcc distclean-gcc
! maybe-distclean-gcc:
! distclean-gcc: 
! 	@[ -f ./gcc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_GCC_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in gcc" ; \
! 	(cd gcc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
! # Host modules.
  
- .PHONY: maybe-distclean-ash distclean-ash
- maybe-distclean-ash:
  
! distclean-ash: 
! 	@[ -f ./ash/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in ash" ; \
! 	(cd ash && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-autoconf distclean-autoconf
! maybe-distclean-autoconf:
  
! distclean-autoconf: 
! 	@[ -f ./autoconf/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in autoconf" ; \
! 	(cd autoconf && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-automake distclean-automake
! maybe-distclean-automake:
  
! distclean-automake: 
! 	@[ -f ./automake/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in automake" ; \
! 	(cd automake && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-bash distclean-bash
! maybe-distclean-bash:
  
! distclean-bash: 
! 	@[ -f ./bash/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in bash" ; \
! 	(cd bash && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-bfd distclean-bfd
! maybe-distclean-bfd:
  
! distclean-bfd: 
! 	@[ -f ./bfd/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in bfd" ; \
! 	(cd bfd && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-opcodes distclean-opcodes
! maybe-distclean-opcodes:
  
! distclean-opcodes: 
! 	@[ -f ./opcodes/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in opcodes" ; \
! 	(cd opcodes && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-binutils distclean-binutils
! maybe-distclean-binutils:
  
! distclean-binutils: 
! 	@[ -f ./binutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in binutils" ; \
! 	(cd binutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-bison distclean-bison
! maybe-distclean-bison:
  
! distclean-bison: 
! 	@[ -f ./bison/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in bison" ; \
! 	(cd bison && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-byacc distclean-byacc
! maybe-distclean-byacc:
  
! distclean-byacc: 
! 	@[ -f ./byacc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in byacc" ; \
! 	(cd byacc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 21951,22296 ----
  	          clean) \
  	  || exit 1
  
+ @endif zip
  
+ .PHONY: maybe-distclean-zip distclean-zip
+ maybe-distclean-zip:
+ @if zip
+ maybe-distclean-zip: distclean-zip
  
! distclean-zip: 
! 	@[ -f ./zip/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	echo "Doing distclean in zip" ; \
! 	(cd zip && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
! 	  || exit 1
  
! @endif zip
  
! .PHONY: maybe-maintainer-clean-zip maintainer-clean-zip
! maybe-maintainer-clean-zip:
! @if zip
! maybe-maintainer-clean-zip: maintainer-clean-zip
  
! maintainer-clean-zip: 
! 	@[ -f ./zip/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in zip" ; \
! 	(cd zip && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
! @endif zip
  
  
! .PHONY: configure-zlib maybe-configure-zlib
! maybe-configure-zlib:
! @if zlib
! maybe-configure-zlib: configure-zlib
! configure-zlib:
! 	@test -f stage_last && exit 0; \
! 	test ! -f zlib/Makefile || exit 0; \
! 	[ -d zlib ] || mkdir zlib; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(HOST_EXPORTS) \
! 	echo Configuring in zlib; \
! 	cd zlib || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/zlib"; \
! 	    libsrcdir="$$s/zlib";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/zlib"; \
! 	    libsrcdir="$$s/zlib";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
! 	  || exit 1
! @endif zlib
! 
! .PHONY: all-zlib maybe-all-zlib
! maybe-all-zlib:
! @if zlib
! TARGET-zlib=all
! maybe-all-zlib: all-zlib
! all-zlib: configure-zlib
! 	@test -f stage_last && exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd zlib && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-zlib))
! @endif zlib
! 
! .PHONY: check-zlib maybe-check-zlib
! maybe-check-zlib:
! @if zlib
! maybe-check-zlib: check-zlib
! 
! check-zlib:
! 
! @endif zlib
! 
! .PHONY: install-zlib maybe-install-zlib
! maybe-install-zlib:
! @if zlib
! maybe-install-zlib: install-zlib
! 
! install-zlib:
! 
! @endif zlib
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-zlib info-zlib
! maybe-info-zlib:
! @if zlib
! maybe-info-zlib: info-zlib
! 
! info-zlib: \
!     configure-zlib 
! 	@[ -f ./zlib/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in zlib" ; \
! 	(cd zlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif zlib
  
! .PHONY: maybe-dvi-zlib dvi-zlib
! maybe-dvi-zlib:
! @if zlib
! maybe-dvi-zlib: dvi-zlib
  
! dvi-zlib: \
!     configure-zlib 
! 	@[ -f ./zlib/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in zlib" ; \
! 	(cd zlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif zlib
  
! .PHONY: maybe-html-zlib html-zlib
! maybe-html-zlib:
! @if zlib
! maybe-html-zlib: html-zlib
  
! html-zlib: \
!     configure-zlib 
! 	@[ -f ./zlib/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in zlib" ; \
! 	(cd zlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif zlib
  
! .PHONY: maybe-TAGS-zlib TAGS-zlib
! maybe-TAGS-zlib:
! @if zlib
! maybe-TAGS-zlib: TAGS-zlib
  
! TAGS-zlib: \
!     configure-zlib 
! 	@[ -f ./zlib/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in zlib" ; \
! 	(cd zlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif zlib
  
! .PHONY: maybe-install-info-zlib install-info-zlib
! maybe-install-info-zlib:
! @if zlib
! maybe-install-info-zlib: install-info-zlib
  
! install-info-zlib: \
!     configure-zlib \
!     info-zlib 
! 	@[ -f ./zlib/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in zlib" ; \
! 	(cd zlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif zlib
  
! .PHONY: maybe-installcheck-zlib installcheck-zlib
! maybe-installcheck-zlib:
! @if zlib
! maybe-installcheck-zlib: installcheck-zlib
  
! installcheck-zlib: \
!     configure-zlib 
! 	@[ -f ./zlib/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in zlib" ; \
! 	(cd zlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif zlib
  
! .PHONY: maybe-mostlyclean-zlib mostlyclean-zlib
! maybe-mostlyclean-zlib:
! @if zlib
! maybe-mostlyclean-zlib: mostlyclean-zlib
  
! mostlyclean-zlib: 
! 	@[ -f ./zlib/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in zlib" ; \
! 	(cd zlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif zlib
  
! .PHONY: maybe-clean-zlib clean-zlib
! maybe-clean-zlib:
! @if zlib
! maybe-clean-zlib: clean-zlib
  
! clean-zlib: 
! 	@[ -f ./zlib/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in zlib" ; \
! 	(cd zlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif zlib
  
! .PHONY: maybe-distclean-zlib distclean-zlib
! maybe-distclean-zlib:
! @if zlib
! maybe-distclean-zlib: distclean-zlib
  
! distclean-zlib: 
! 	@[ -f ./zlib/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in zlib" ; \
! 	(cd zlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** distclean-byacc: 
*** 13988,14196 ****
  	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-bzip2 distclean-bzip2
! maybe-distclean-bzip2:
  
! distclean-bzip2: 
! 	@[ -f ./bzip2/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in bzip2" ; \
! 	(cd bzip2 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
- .PHONY: maybe-distclean-dejagnu distclean-dejagnu
- maybe-distclean-dejagnu:
  
! distclean-dejagnu: 
! 	@[ -f ./dejagnu/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in dejagnu" ; \
! 	(cd dejagnu && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-diff distclean-diff
! maybe-distclean-diff:
  
! distclean-diff: 
! 	@[ -f ./diff/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in diff" ; \
! 	(cd diff && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-dosutils distclean-dosutils
! maybe-distclean-dosutils:
  
! distclean-dosutils: 
! 	@[ -f ./dosutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in dosutils" ; \
! 	(cd dosutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-etc distclean-etc
! maybe-distclean-etc:
  
! distclean-etc: 
! 	@[ -f ./etc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in etc" ; \
! 	(cd etc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-fastjar distclean-fastjar
! maybe-distclean-fastjar:
  
! distclean-fastjar: 
! 	@[ -f ./fastjar/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in fastjar" ; \
! 	(cd fastjar && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-fileutils distclean-fileutils
! maybe-distclean-fileutils:
  
! distclean-fileutils: 
! 	@[ -f ./fileutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in fileutils" ; \
! 	(cd fileutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-findutils distclean-findutils
! maybe-distclean-findutils:
  
! distclean-findutils: 
! 	@[ -f ./findutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in findutils" ; \
! 	(cd findutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-find distclean-find
! maybe-distclean-find:
  
! distclean-find: 
! 	@[ -f ./find/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in find" ; \
! 	(cd find && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-flex distclean-flex
! maybe-distclean-flex:
  
! distclean-flex: 
! 	@[ -f ./flex/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in flex" ; \
! 	(cd flex && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 22298,22626 ----
  	          distclean) \
  	  || exit 1
  
+ @endif zlib
  
! .PHONY: maybe-maintainer-clean-zlib maintainer-clean-zlib
! maybe-maintainer-clean-zlib:
! @if zlib
! maybe-maintainer-clean-zlib: maintainer-clean-zlib
  
! maintainer-clean-zlib: 
! 	@[ -f ./zlib/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in zlib" ; \
! 	(cd zlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif zlib
  
  
! .PHONY: configure-gdb maybe-configure-gdb
! maybe-configure-gdb:
! @if gdb
! maybe-configure-gdb: configure-gdb
! configure-gdb:
! 	@test ! -f gdb/Makefile || exit 0; \
! 	[ -d gdb ] || mkdir gdb; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in gdb; \
+ 	cd gdb || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/gdb"; \
+ 	    libsrcdir="$$s/gdb";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/gdb"; \
+ 	    libsrcdir="$$s/gdb";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif gdb
+ 
+ .PHONY: all-gdb maybe-all-gdb
+ maybe-all-gdb:
+ @if gdb
+ TARGET-gdb=all
+ maybe-all-gdb: all-gdb
+ all-gdb: configure-gdb
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd gdb && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) \
! 	  $(TARGET-gdb))
! @endif gdb
! 
! .PHONY: check-gdb maybe-check-gdb
! maybe-check-gdb:
! @if gdb
! maybe-check-gdb: check-gdb
! 
! check-gdb:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd gdb && $(MAKE) $(FLAGS_TO_PASS)$(X11_FLAGS_TO_PASS) check)
! 
! @endif gdb
! 
! .PHONY: install-gdb maybe-install-gdb
! maybe-install-gdb:
! @if gdb
! maybe-install-gdb: install-gdb
! 
! install-gdb: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd gdb && $(MAKE) $(FLAGS_TO_PASS)$(X11_FLAGS_TO_PASS) install)
! 
! @endif gdb
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-gdb info-gdb
! maybe-info-gdb:
! @if gdb
! maybe-info-gdb: info-gdb
! 
! info-gdb: \
!     configure-gdb 
! 	@[ -f ./gdb/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in gdb" ; \
! 	(cd gdb && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif gdb
  
! .PHONY: maybe-dvi-gdb dvi-gdb
! maybe-dvi-gdb:
! @if gdb
! maybe-dvi-gdb: dvi-gdb
  
! dvi-gdb: \
!     configure-gdb 
! 	@[ -f ./gdb/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in gdb" ; \
! 	(cd gdb && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif gdb
  
! .PHONY: maybe-html-gdb html-gdb
! maybe-html-gdb:
! @if gdb
! maybe-html-gdb: html-gdb
  
! html-gdb: \
!     configure-gdb 
! 	@[ -f ./gdb/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in gdb" ; \
! 	(cd gdb && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif gdb
  
! .PHONY: maybe-TAGS-gdb TAGS-gdb
! maybe-TAGS-gdb:
! @if gdb
! maybe-TAGS-gdb: TAGS-gdb
  
! TAGS-gdb: \
!     configure-gdb 
! 	@[ -f ./gdb/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in gdb" ; \
! 	(cd gdb && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif gdb
  
! .PHONY: maybe-install-info-gdb install-info-gdb
! maybe-install-info-gdb:
! @if gdb
! maybe-install-info-gdb: install-info-gdb
  
! install-info-gdb: \
!     configure-gdb \
!     info-gdb 
! 	@[ -f ./gdb/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in gdb" ; \
! 	(cd gdb && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif gdb
  
! .PHONY: maybe-installcheck-gdb installcheck-gdb
! maybe-installcheck-gdb:
! @if gdb
! maybe-installcheck-gdb: installcheck-gdb
  
! installcheck-gdb: \
!     configure-gdb 
! 	@[ -f ./gdb/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in gdb" ; \
! 	(cd gdb && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif gdb
  
! .PHONY: maybe-mostlyclean-gdb mostlyclean-gdb
! maybe-mostlyclean-gdb:
! @if gdb
! maybe-mostlyclean-gdb: mostlyclean-gdb
  
! mostlyclean-gdb: 
! 	@[ -f ./gdb/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in gdb" ; \
! 	(cd gdb && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif gdb
  
! .PHONY: maybe-clean-gdb clean-gdb
! maybe-clean-gdb:
! @if gdb
! maybe-clean-gdb: clean-gdb
  
! clean-gdb: 
! 	@[ -f ./gdb/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in gdb" ; \
! 	(cd gdb && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif gdb
  
! .PHONY: maybe-distclean-gdb distclean-gdb
! maybe-distclean-gdb:
! @if gdb
! maybe-distclean-gdb: distclean-gdb
  
! distclean-gdb: 
! 	@[ -f ./gdb/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in gdb" ; \
! 	(cd gdb && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** distclean-flex: 
*** 14198,14406 ****
  	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-gas distclean-gas
! maybe-distclean-gas:
  
! distclean-gas: 
! 	@[ -f ./gas/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in gas" ; \
! 	(cd gas && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
- .PHONY: maybe-distclean-gawk distclean-gawk
- maybe-distclean-gawk:
  
! distclean-gawk: 
! 	@[ -f ./gawk/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in gawk" ; \
! 	(cd gawk && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-gettext distclean-gettext
! maybe-distclean-gettext:
  
! distclean-gettext: 
! 	@[ -f ./gettext/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in gettext" ; \
! 	(cd gettext && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-gnuserv distclean-gnuserv
! maybe-distclean-gnuserv:
  
! distclean-gnuserv: 
! 	@[ -f ./gnuserv/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in gnuserv" ; \
! 	(cd gnuserv && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-gprof distclean-gprof
! maybe-distclean-gprof:
  
! distclean-gprof: 
! 	@[ -f ./gprof/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in gprof" ; \
! 	(cd gprof && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-gzip distclean-gzip
! maybe-distclean-gzip:
  
! distclean-gzip: 
! 	@[ -f ./gzip/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in gzip" ; \
! 	(cd gzip && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-hello distclean-hello
! maybe-distclean-hello:
  
! distclean-hello: 
! 	@[ -f ./hello/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in hello" ; \
! 	(cd hello && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-indent distclean-indent
! maybe-distclean-indent:
  
! distclean-indent: 
! 	@[ -f ./indent/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in indent" ; \
! 	(cd indent && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-intl distclean-intl
! maybe-distclean-intl:
  
! distclean-intl: 
! 	@[ -f ./intl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in intl" ; \
! 	(cd intl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-tcl distclean-tcl
! maybe-distclean-tcl:
  
! distclean-tcl: 
! 	@[ -f ./tcl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in tcl" ; \
! 	(cd tcl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 22628,22956 ----
  	          distclean) \
  	  || exit 1
  
+ @endif gdb
  
! .PHONY: maybe-maintainer-clean-gdb maintainer-clean-gdb
! maybe-maintainer-clean-gdb:
! @if gdb
! maybe-maintainer-clean-gdb: maintainer-clean-gdb
  
! maintainer-clean-gdb: 
! 	@[ -f ./gdb/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in gdb" ; \
! 	(cd gdb && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif gdb
  
  
! .PHONY: configure-expect maybe-configure-expect
! maybe-configure-expect:
! @if expect
! maybe-configure-expect: configure-expect
! configure-expect:
! 	@test ! -f expect/Makefile || exit 0; \
! 	[ -d expect ] || mkdir expect; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in expect; \
+ 	cd expect || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/expect"; \
+ 	    libsrcdir="$$s/expect";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/expect"; \
+ 	    libsrcdir="$$s/expect";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif expect
+ 
+ .PHONY: all-expect maybe-all-expect
+ maybe-all-expect:
+ @if expect
+ TARGET-expect=all
+ maybe-all-expect: all-expect
+ all-expect: configure-expect
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd expect && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) \
! 	  $(TARGET-expect))
! @endif expect
! 
! .PHONY: check-expect maybe-check-expect
! maybe-check-expect:
! @if expect
! maybe-check-expect: check-expect
! 
! check-expect:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd expect && $(MAKE) $(FLAGS_TO_PASS)$(X11_FLAGS_TO_PASS) check)
! 
! @endif expect
! 
! .PHONY: install-expect maybe-install-expect
! maybe-install-expect:
! @if expect
! maybe-install-expect: install-expect
! 
! install-expect: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd expect && $(MAKE) $(FLAGS_TO_PASS)$(X11_FLAGS_TO_PASS) install)
! 
! @endif expect
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-expect info-expect
! maybe-info-expect:
! @if expect
! maybe-info-expect: info-expect
! 
! info-expect: \
!     configure-expect 
! 	@[ -f ./expect/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in expect" ; \
! 	(cd expect && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif expect
  
! .PHONY: maybe-dvi-expect dvi-expect
! maybe-dvi-expect:
! @if expect
! maybe-dvi-expect: dvi-expect
  
! dvi-expect: \
!     configure-expect 
! 	@[ -f ./expect/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in expect" ; \
! 	(cd expect && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif expect
  
! .PHONY: maybe-html-expect html-expect
! maybe-html-expect:
! @if expect
! maybe-html-expect: html-expect
  
! html-expect: \
!     configure-expect 
! 	@[ -f ./expect/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in expect" ; \
! 	(cd expect && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif expect
  
! .PHONY: maybe-TAGS-expect TAGS-expect
! maybe-TAGS-expect:
! @if expect
! maybe-TAGS-expect: TAGS-expect
  
! TAGS-expect: \
!     configure-expect 
! 	@[ -f ./expect/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in expect" ; \
! 	(cd expect && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif expect
  
! .PHONY: maybe-install-info-expect install-info-expect
! maybe-install-info-expect:
! @if expect
! maybe-install-info-expect: install-info-expect
  
! install-info-expect: \
!     configure-expect \
!     info-expect 
! 	@[ -f ./expect/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in expect" ; \
! 	(cd expect && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif expect
  
! .PHONY: maybe-installcheck-expect installcheck-expect
! maybe-installcheck-expect:
! @if expect
! maybe-installcheck-expect: installcheck-expect
  
! installcheck-expect: \
!     configure-expect 
! 	@[ -f ./expect/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in expect" ; \
! 	(cd expect && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif expect
  
! .PHONY: maybe-mostlyclean-expect mostlyclean-expect
! maybe-mostlyclean-expect:
! @if expect
! maybe-mostlyclean-expect: mostlyclean-expect
  
! mostlyclean-expect: 
! 	@[ -f ./expect/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in expect" ; \
! 	(cd expect && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif expect
  
! .PHONY: maybe-clean-expect clean-expect
! maybe-clean-expect:
! @if expect
! maybe-clean-expect: clean-expect
  
! clean-expect: 
! 	@[ -f ./expect/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in expect" ; \
! 	(cd expect && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif expect
  
! .PHONY: maybe-distclean-expect distclean-expect
! maybe-distclean-expect:
! @if expect
! maybe-distclean-expect: distclean-expect
  
! distclean-expect: 
! 	@[ -f ./expect/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in expect" ; \
! 	(cd expect && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** distclean-tcl: 
*** 14408,14616 ****
  	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-itcl distclean-itcl
! maybe-distclean-itcl:
  
! distclean-itcl: 
! 	@[ -f ./itcl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in itcl" ; \
! 	(cd itcl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
- .PHONY: maybe-distclean-ld distclean-ld
- maybe-distclean-ld:
  
! distclean-ld: 
! 	@[ -f ./ld/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in ld" ; \
! 	(cd ld && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-libgui distclean-libgui
! maybe-distclean-libgui:
  
! distclean-libgui: 
! 	@[ -f ./libgui/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in libgui" ; \
! 	(cd libgui && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-libiberty distclean-libiberty
! maybe-distclean-libiberty:
  
! distclean-libiberty: 
! 	@[ -f ./libiberty/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in libiberty" ; \
! 	(cd libiberty && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-libtool distclean-libtool
! maybe-distclean-libtool:
  
! distclean-libtool: 
! 	@[ -f ./libtool/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in libtool" ; \
! 	(cd libtool && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-m4 distclean-m4
! maybe-distclean-m4:
  
! distclean-m4: 
! 	@[ -f ./m4/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in m4" ; \
! 	(cd m4 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-make distclean-make
! maybe-distclean-make:
  
! distclean-make: 
! 	@[ -f ./make/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in make" ; \
! 	(cd make && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-mmalloc distclean-mmalloc
! maybe-distclean-mmalloc:
  
! distclean-mmalloc: 
! 	@[ -f ./mmalloc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in mmalloc" ; \
! 	(cd mmalloc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-patch distclean-patch
! maybe-distclean-patch:
  
! distclean-patch: 
! 	@[ -f ./patch/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in patch" ; \
! 	(cd patch && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-perl distclean-perl
! maybe-distclean-perl:
  
! distclean-perl: 
! 	@[ -f ./perl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in perl" ; \
! 	(cd perl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 22958,23286 ----
  	          distclean) \
  	  || exit 1
  
+ @endif expect
  
! .PHONY: maybe-maintainer-clean-expect maintainer-clean-expect
! maybe-maintainer-clean-expect:
! @if expect
! maybe-maintainer-clean-expect: maintainer-clean-expect
  
! maintainer-clean-expect: 
! 	@[ -f ./expect/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in expect" ; \
! 	(cd expect && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif expect
  
  
! .PHONY: configure-guile maybe-configure-guile
! maybe-configure-guile:
! @if guile
! maybe-configure-guile: configure-guile
! configure-guile:
! 	@test ! -f guile/Makefile || exit 0; \
! 	[ -d guile ] || mkdir guile; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in guile; \
+ 	cd guile || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/guile"; \
+ 	    libsrcdir="$$s/guile";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/guile"; \
+ 	    libsrcdir="$$s/guile";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif guile
+ 
+ .PHONY: all-guile maybe-all-guile
+ maybe-all-guile:
+ @if guile
+ TARGET-guile=all
+ maybe-all-guile: all-guile
+ all-guile: configure-guile
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd guile && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) \
! 	  $(TARGET-guile))
! @endif guile
! 
! .PHONY: check-guile maybe-check-guile
! maybe-check-guile:
! @if guile
! maybe-check-guile: check-guile
! 
! check-guile:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd guile && $(MAKE) $(FLAGS_TO_PASS)$(X11_FLAGS_TO_PASS) check)
! 
! @endif guile
! 
! .PHONY: install-guile maybe-install-guile
! maybe-install-guile:
! @if guile
! maybe-install-guile: install-guile
! 
! install-guile: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd guile && $(MAKE) $(FLAGS_TO_PASS)$(X11_FLAGS_TO_PASS) install)
! 
! @endif guile
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-guile info-guile
! maybe-info-guile:
! @if guile
! maybe-info-guile: info-guile
! 
! info-guile: \
!     configure-guile 
! 	@[ -f ./guile/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in guile" ; \
! 	(cd guile && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif guile
  
! .PHONY: maybe-dvi-guile dvi-guile
! maybe-dvi-guile:
! @if guile
! maybe-dvi-guile: dvi-guile
  
! dvi-guile: \
!     configure-guile 
! 	@[ -f ./guile/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in guile" ; \
! 	(cd guile && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif guile
  
! .PHONY: maybe-html-guile html-guile
! maybe-html-guile:
! @if guile
! maybe-html-guile: html-guile
  
! html-guile: \
!     configure-guile 
! 	@[ -f ./guile/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in guile" ; \
! 	(cd guile && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif guile
  
! .PHONY: maybe-TAGS-guile TAGS-guile
! maybe-TAGS-guile:
! @if guile
! maybe-TAGS-guile: TAGS-guile
  
! TAGS-guile: \
!     configure-guile 
! 	@[ -f ./guile/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in guile" ; \
! 	(cd guile && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif guile
  
! .PHONY: maybe-install-info-guile install-info-guile
! maybe-install-info-guile:
! @if guile
! maybe-install-info-guile: install-info-guile
  
! install-info-guile: \
!     configure-guile \
!     info-guile 
! 	@[ -f ./guile/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in guile" ; \
! 	(cd guile && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif guile
  
! .PHONY: maybe-installcheck-guile installcheck-guile
! maybe-installcheck-guile:
! @if guile
! maybe-installcheck-guile: installcheck-guile
  
! installcheck-guile: \
!     configure-guile 
! 	@[ -f ./guile/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in guile" ; \
! 	(cd guile && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif guile
  
! .PHONY: maybe-mostlyclean-guile mostlyclean-guile
! maybe-mostlyclean-guile:
! @if guile
! maybe-mostlyclean-guile: mostlyclean-guile
  
! mostlyclean-guile: 
! 	@[ -f ./guile/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in guile" ; \
! 	(cd guile && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif guile
  
! .PHONY: maybe-clean-guile clean-guile
! maybe-clean-guile:
! @if guile
! maybe-clean-guile: clean-guile
  
! clean-guile: 
! 	@[ -f ./guile/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in guile" ; \
! 	(cd guile && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif guile
  
! .PHONY: maybe-distclean-guile distclean-guile
! maybe-distclean-guile:
! @if guile
! maybe-distclean-guile: distclean-guile
  
! distclean-guile: 
! 	@[ -f ./guile/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in guile" ; \
! 	(cd guile && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** distclean-perl: 
*** 14618,14826 ****
  	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-prms distclean-prms
! maybe-distclean-prms:
  
! distclean-prms: 
! 	@[ -f ./prms/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in prms" ; \
! 	(cd prms && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
- .PHONY: maybe-distclean-rcs distclean-rcs
- maybe-distclean-rcs:
  
! distclean-rcs: 
! 	@[ -f ./rcs/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in rcs" ; \
! 	(cd rcs && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-readline distclean-readline
! maybe-distclean-readline:
  
! distclean-readline: 
! 	@[ -f ./readline/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in readline" ; \
! 	(cd readline && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-release distclean-release
! maybe-distclean-release:
  
! distclean-release: 
! 	@[ -f ./release/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in release" ; \
! 	(cd release && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-recode distclean-recode
! maybe-distclean-recode:
  
! distclean-recode: 
! 	@[ -f ./recode/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in recode" ; \
! 	(cd recode && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-sed distclean-sed
! maybe-distclean-sed:
  
! distclean-sed: 
! 	@[ -f ./sed/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in sed" ; \
! 	(cd sed && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-send-pr distclean-send-pr
! maybe-distclean-send-pr:
  
! distclean-send-pr: 
! 	@[ -f ./send-pr/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in send-pr" ; \
! 	(cd send-pr && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-shellutils distclean-shellutils
! maybe-distclean-shellutils:
  
! distclean-shellutils: 
! 	@[ -f ./shellutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in shellutils" ; \
! 	(cd shellutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-sid distclean-sid
! maybe-distclean-sid:
  
! distclean-sid: 
! 	@[ -f ./sid/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in sid" ; \
! 	(cd sid && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-sim distclean-sim
! maybe-distclean-sim:
  
! distclean-sim: 
! 	@[ -f ./sim/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in sim" ; \
! 	(cd sim && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
--- 23288,23616 ----
  	          distclean) \
  	  || exit 1
  
+ @endif guile
  
! .PHONY: maybe-maintainer-clean-guile maintainer-clean-guile
! maybe-maintainer-clean-guile:
! @if guile
! maybe-maintainer-clean-guile: maintainer-clean-guile
  
! maintainer-clean-guile: 
! 	@[ -f ./guile/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in guile" ; \
! 	(cd guile && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif guile
  
  
! .PHONY: configure-tk maybe-configure-tk
! maybe-configure-tk:
! @if tk
! maybe-configure-tk: configure-tk
! configure-tk:
! 	@test ! -f tk/Makefile || exit 0; \
! 	[ -d tk ] || mkdir tk; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in tk; \
+ 	cd tk || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/tk"; \
+ 	    libsrcdir="$$s/tk";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/tk"; \
+ 	    libsrcdir="$$s/tk";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif tk
+ 
+ .PHONY: all-tk maybe-all-tk
+ maybe-all-tk:
+ @if tk
+ TARGET-tk=all
+ maybe-all-tk: all-tk
+ all-tk: configure-tk
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd tk && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) \
! 	  $(TARGET-tk))
! @endif tk
! 
! .PHONY: check-tk maybe-check-tk
! maybe-check-tk:
! @if tk
! maybe-check-tk: check-tk
! 
! check-tk:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd tk && $(MAKE) $(FLAGS_TO_PASS)$(X11_FLAGS_TO_PASS) check)
! 
! @endif tk
! 
! .PHONY: install-tk maybe-install-tk
! maybe-install-tk:
! @if tk
! maybe-install-tk: install-tk
! 
! install-tk: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd tk && $(MAKE) $(FLAGS_TO_PASS)$(X11_FLAGS_TO_PASS) install)
! 
! @endif tk
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-tk info-tk
! maybe-info-tk:
! @if tk
! maybe-info-tk: info-tk
! 
! info-tk: \
!     configure-tk 
! 	@[ -f ./tk/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in tk" ; \
! 	(cd tk && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif tk
  
! .PHONY: maybe-dvi-tk dvi-tk
! maybe-dvi-tk:
! @if tk
! maybe-dvi-tk: dvi-tk
  
! dvi-tk: \
!     configure-tk 
! 	@[ -f ./tk/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in tk" ; \
! 	(cd tk && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif tk
  
! .PHONY: maybe-html-tk html-tk
! maybe-html-tk:
! @if tk
! maybe-html-tk: html-tk
  
! html-tk: \
!     configure-tk 
! 	@[ -f ./tk/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in tk" ; \
! 	(cd tk && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif tk
  
! .PHONY: maybe-TAGS-tk TAGS-tk
! maybe-TAGS-tk:
! @if tk
! maybe-TAGS-tk: TAGS-tk
  
! TAGS-tk: \
!     configure-tk 
! 	@[ -f ./tk/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in tk" ; \
! 	(cd tk && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif tk
  
! .PHONY: maybe-install-info-tk install-info-tk
! maybe-install-info-tk:
! @if tk
! maybe-install-info-tk: install-info-tk
  
! install-info-tk: \
!     configure-tk \
!     info-tk 
! 	@[ -f ./tk/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in tk" ; \
! 	(cd tk && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif tk
  
! .PHONY: maybe-installcheck-tk installcheck-tk
! maybe-installcheck-tk:
! @if tk
! maybe-installcheck-tk: installcheck-tk
  
! installcheck-tk: \
!     configure-tk 
! 	@[ -f ./tk/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in tk" ; \
! 	(cd tk && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif tk
  
! .PHONY: maybe-mostlyclean-tk mostlyclean-tk
! maybe-mostlyclean-tk:
! @if tk
! maybe-mostlyclean-tk: mostlyclean-tk
  
! mostlyclean-tk: 
! 	@[ -f ./tk/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing mostlyclean in tk" ; \
! 	(cd tk && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
  	  || exit 1
  
+ @endif tk
  
! .PHONY: maybe-clean-tk clean-tk
! maybe-clean-tk:
! @if tk
! maybe-clean-tk: clean-tk
  
! clean-tk: 
! 	@[ -f ./tk/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing clean in tk" ; \
! 	(cd tk && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
  	  || exit 1
  
+ @endif tk
  
! .PHONY: maybe-distclean-tk distclean-tk
! maybe-distclean-tk:
! @if tk
! maybe-distclean-tk: distclean-tk
  
! distclean-tk: 
! 	@[ -f ./tk/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in tk" ; \
! 	(cd tk && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
*************** distclean-sim: 
*** 14828,15123 ****
  	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-tar distclean-tar
! maybe-distclean-tar:
  
! distclean-tar: 
! 	@[ -f ./tar/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in tar" ; \
! 	(cd tar && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
- .PHONY: maybe-distclean-texinfo distclean-texinfo
- maybe-distclean-texinfo:
  
! distclean-texinfo: 
! 	@[ -f ./texinfo/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in texinfo" ; \
! 	(cd texinfo && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-textutils distclean-textutils
! maybe-distclean-textutils:
  
! distclean-textutils: 
! 	@[ -f ./textutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in textutils" ; \
! 	(cd textutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-time distclean-time
! maybe-distclean-time:
  
! distclean-time: 
! 	@[ -f ./time/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in time" ; \
! 	(cd time && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-uudecode distclean-uudecode
! maybe-distclean-uudecode:
  
! distclean-uudecode: 
! 	@[ -f ./uudecode/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in uudecode" ; \
! 	(cd uudecode && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-wdiff distclean-wdiff
! maybe-distclean-wdiff:
  
! distclean-wdiff: 
! 	@[ -f ./wdiff/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in wdiff" ; \
! 	(cd wdiff && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-zip distclean-zip
! maybe-distclean-zip:
  
! distclean-zip: 
! 	@[ -f ./zip/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in zip" ; \
! 	(cd zip && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-zlib distclean-zlib
! maybe-distclean-zlib:
  
! distclean-zlib: 
! 	@[ -f ./zlib/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in zlib" ; \
! 	(cd zlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-gdb distclean-gdb
! maybe-distclean-gdb:
  
! distclean-gdb: 
! 	@[ -f ./gdb/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in gdb" ; \
! 	(cd gdb && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-expect distclean-expect
! maybe-distclean-expect:
  
! distclean-expect: 
! 	@[ -f ./expect/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in expect" ; \
! 	(cd expect && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-guile distclean-guile
! maybe-distclean-guile:
  
! distclean-guile: 
! 	@[ -f ./guile/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in guile" ; \
! 	(cd guile && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-tk distclean-tk
! maybe-distclean-tk:
  
! distclean-tk: 
! 	@[ -f ./tk/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in tk" ; \
! 	(cd tk && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-tix distclean-tix
! maybe-distclean-tix:
  
! distclean-tix: 
! 	@[ -f ./tix/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing distclean in tix" ; \
! 	(cd tix && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-libtermcap distclean-libtermcap
! maybe-distclean-libtermcap:
  
! # libtermcap doesn't support distclean.
! distclean-libtermcap:
  
  
  .PHONY: maybe-distclean-utils distclean-utils
  maybe-distclean-utils:
  
  distclean-utils: 
  	@[ -f ./utils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
  	echo "Doing distclean in utils" ; \
--- 23618,24202 ----
  	          distclean) \
  	  || exit 1
  
+ @endif tk
  
! .PHONY: maybe-maintainer-clean-tk maintainer-clean-tk
! maybe-maintainer-clean-tk:
! @if tk
! maybe-maintainer-clean-tk: maintainer-clean-tk
  
! maintainer-clean-tk: 
! 	@[ -f ./tk/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in tk" ; \
! 	(cd tk && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
+ @endif tk
  
  
! .PHONY: configure-libtermcap maybe-configure-libtermcap
! maybe-configure-libtermcap:
! @if libtermcap
! maybe-configure-libtermcap: configure-libtermcap
! configure-libtermcap:
! 	@test ! -f libtermcap/Makefile || exit 0; \
! 	[ -d libtermcap ] || mkdir libtermcap; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in libtermcap; \
+ 	cd libtermcap || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/libtermcap"; \
+ 	    libsrcdir="$$s/libtermcap";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/libtermcap"; \
+ 	    libsrcdir="$$s/libtermcap";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif libtermcap
+ 
+ .PHONY: all-libtermcap maybe-all-libtermcap
+ maybe-all-libtermcap:
+ @if libtermcap
+ TARGET-libtermcap=all
+ maybe-all-libtermcap: all-libtermcap
+ all-libtermcap: configure-libtermcap
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd libtermcap && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-libtermcap))
! @endif libtermcap
! 
! .PHONY: check-libtermcap maybe-check-libtermcap
! maybe-check-libtermcap:
! @if libtermcap
! maybe-check-libtermcap: check-libtermcap
! 
! check-libtermcap:
! 
! @endif libtermcap
! 
! .PHONY: install-libtermcap maybe-install-libtermcap
! maybe-install-libtermcap:
! @if libtermcap
! maybe-install-libtermcap: install-libtermcap
! 
! install-libtermcap: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd libtermcap && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif libtermcap
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-libtermcap info-libtermcap
! maybe-info-libtermcap:
! @if libtermcap
! maybe-info-libtermcap: info-libtermcap
! 
! info-libtermcap: \
!     configure-libtermcap 
! 	@[ -f ./libtermcap/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in libtermcap" ; \
! 	(cd libtermcap && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif libtermcap
  
! .PHONY: maybe-dvi-libtermcap dvi-libtermcap
! maybe-dvi-libtermcap:
! @if libtermcap
! maybe-dvi-libtermcap: dvi-libtermcap
  
! dvi-libtermcap: \
!     configure-libtermcap 
! 	@[ -f ./libtermcap/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in libtermcap" ; \
! 	(cd libtermcap && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif libtermcap
  
! .PHONY: maybe-html-libtermcap html-libtermcap
! maybe-html-libtermcap:
! @if libtermcap
! maybe-html-libtermcap: html-libtermcap
  
! html-libtermcap: \
!     configure-libtermcap 
! 	@[ -f ./libtermcap/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in libtermcap" ; \
! 	(cd libtermcap && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif libtermcap
  
! .PHONY: maybe-TAGS-libtermcap TAGS-libtermcap
! maybe-TAGS-libtermcap:
! @if libtermcap
! maybe-TAGS-libtermcap: TAGS-libtermcap
  
! TAGS-libtermcap: \
!     configure-libtermcap 
! 	@[ -f ./libtermcap/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in libtermcap" ; \
! 	(cd libtermcap && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif libtermcap
  
! .PHONY: maybe-install-info-libtermcap install-info-libtermcap
! maybe-install-info-libtermcap:
! @if libtermcap
! maybe-install-info-libtermcap: install-info-libtermcap
  
! install-info-libtermcap: \
!     configure-libtermcap \
!     info-libtermcap 
! 	@[ -f ./libtermcap/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in libtermcap" ; \
! 	(cd libtermcap && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif libtermcap
  
! .PHONY: maybe-installcheck-libtermcap installcheck-libtermcap
! maybe-installcheck-libtermcap:
! @if libtermcap
! maybe-installcheck-libtermcap: installcheck-libtermcap
  
! installcheck-libtermcap: \
!     configure-libtermcap 
! 	@[ -f ./libtermcap/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in libtermcap" ; \
! 	(cd libtermcap && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif libtermcap
  
! .PHONY: maybe-mostlyclean-libtermcap mostlyclean-libtermcap
! maybe-mostlyclean-libtermcap:
! @if libtermcap
! maybe-mostlyclean-libtermcap: mostlyclean-libtermcap
  
! # libtermcap doesn't support mostlyclean.
! mostlyclean-libtermcap:
! 
! @endif libtermcap
! 
! .PHONY: maybe-clean-libtermcap clean-libtermcap
! maybe-clean-libtermcap:
! @if libtermcap
! maybe-clean-libtermcap: clean-libtermcap
! 
! # libtermcap doesn't support clean.
! clean-libtermcap:
! 
! @endif libtermcap
! 
! .PHONY: maybe-distclean-libtermcap distclean-libtermcap
! maybe-distclean-libtermcap:
! @if libtermcap
! maybe-distclean-libtermcap: distclean-libtermcap
! 
! # libtermcap doesn't support distclean.
! distclean-libtermcap:
! 
! @endif libtermcap
! 
! .PHONY: maybe-maintainer-clean-libtermcap maintainer-clean-libtermcap
! maybe-maintainer-clean-libtermcap:
! @if libtermcap
! maybe-maintainer-clean-libtermcap: maintainer-clean-libtermcap
! 
! # libtermcap doesn't support maintainer-clean.
! maintainer-clean-libtermcap:
! 
! @endif libtermcap
! 
! 
! .PHONY: configure-utils maybe-configure-utils
! maybe-configure-utils:
! @if utils
! maybe-configure-utils: configure-utils
! configure-utils:
! 	@test ! -f utils/Makefile || exit 0; \
! 	[ -d utils ] || mkdir utils; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	echo Configuring in utils; \
+ 	cd utils || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/utils"; \
+ 	    libsrcdir="$$s/utils";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/utils"; \
+ 	    libsrcdir="$$s/utils";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption}  \
+ 	  || exit 1
+ @endif utils
+ 
+ .PHONY: all-utils maybe-all-utils
+ maybe-all-utils:
+ @if utils
+ TARGET-utils=all
+ maybe-all-utils: all-utils
+ all-utils: configure-utils
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd utils && $(MAKE) $(FLAGS_TO_PASS)  \
! 	  $(TARGET-utils))
! @endif utils
! 
! .PHONY: check-utils maybe-check-utils
! maybe-check-utils:
! @if utils
! maybe-check-utils: check-utils
! 
! check-utils:
! 
! @endif utils
! 
! .PHONY: install-utils maybe-install-utils
! maybe-install-utils:
! @if utils
! maybe-install-utils: install-utils
! 
! install-utils: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd utils && $(MAKE) $(FLAGS_TO_PASS) install)
! 
! @endif utils
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-utils info-utils
! maybe-info-utils:
! @if utils
! maybe-info-utils: info-utils
! 
! info-utils: \
!     configure-utils 
! 	@[ -f ./utils/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing info in utils" ; \
! 	(cd utils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          info) \
  	  || exit 1
  
+ @endif utils
  
! .PHONY: maybe-dvi-utils dvi-utils
! maybe-dvi-utils:
! @if utils
! maybe-dvi-utils: dvi-utils
  
! dvi-utils: \
!     configure-utils 
! 	@[ -f ./utils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing dvi in utils" ; \
! 	(cd utils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          dvi) \
  	  || exit 1
  
+ @endif utils
  
! .PHONY: maybe-html-utils html-utils
! maybe-html-utils:
! @if utils
! maybe-html-utils: html-utils
  
! html-utils: \
!     configure-utils 
! 	@[ -f ./utils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing html in utils" ; \
! 	(cd utils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          html) \
  	  || exit 1
  
+ @endif utils
  
! .PHONY: maybe-TAGS-utils TAGS-utils
! maybe-TAGS-utils:
! @if utils
! maybe-TAGS-utils: TAGS-utils
  
! TAGS-utils: \
!     configure-utils 
! 	@[ -f ./utils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in utils" ; \
! 	(cd utils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          TAGS) \
  	  || exit 1
  
+ @endif utils
  
! .PHONY: maybe-install-info-utils install-info-utils
! maybe-install-info-utils:
! @if utils
! maybe-install-info-utils: install-info-utils
  
! install-info-utils: \
!     configure-utils \
!     info-utils 
! 	@[ -f ./utils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in utils" ; \
! 	(cd utils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          install-info) \
  	  || exit 1
  
+ @endif utils
  
! .PHONY: maybe-installcheck-utils installcheck-utils
! maybe-installcheck-utils:
! @if utils
! maybe-installcheck-utils: installcheck-utils
  
! installcheck-utils: \
!     configure-utils 
! 	@[ -f ./utils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing installcheck in utils" ; \
! 	(cd utils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          installcheck) \
  	  || exit 1
  
+ @endif utils
  
! .PHONY: maybe-mostlyclean-utils mostlyclean-utils
! maybe-mostlyclean-utils:
! @if utils
! maybe-mostlyclean-utils: mostlyclean-utils
  
! mostlyclean-utils: 
! 	@[ -f ./utils/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	echo "Doing mostlyclean in utils" ; \
! 	(cd utils && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          mostlyclean) \
! 	  || exit 1
! 
! @endif utils
! 
! .PHONY: maybe-clean-utils clean-utils
! maybe-clean-utils:
! @if utils
! maybe-clean-utils: clean-utils
! 
! clean-utils: 
! 	@[ -f ./utils/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	echo "Doing clean in utils" ; \
! 	(cd utils && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          clean) \
! 	  || exit 1
  
+ @endif utils
  
  .PHONY: maybe-distclean-utils distclean-utils
  maybe-distclean-utils:
+ @if utils
+ maybe-distclean-utils: distclean-utils
  
  distclean-utils: 
  	@[ -f ./utils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
  	echo "Doing distclean in utils" ; \
*************** distclean-utils: 
*** 15129,15147 ****
  	          distclean) \
  	  || exit 1
  
  
  
! # Target modules.
  
! .PHONY: maybe-distclean-target-libstdc++-v3 distclean-target-libstdc++-v3
! maybe-distclean-target-libstdc++-v3:
  
! distclean-target-libstdc++-v3: 
  	@[ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing distclean in $(TARGET_SUBDIR)/libstdc++-v3" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
--- 24208,24343 ----
  	          distclean) \
  	  || exit 1
  
+ @endif utils
  
+ .PHONY: maybe-maintainer-clean-utils maintainer-clean-utils
+ maybe-maintainer-clean-utils:
+ @if utils
+ maybe-maintainer-clean-utils: maintainer-clean-utils
  
! maintainer-clean-utils: 
! 	@[ -f ./utils/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	echo "Doing maintainer-clean in utils" ; \
! 	(cd utils && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
! 	  || exit 1
  
! @endif utils
  
! 
! 
! # ---------------------------------------
! # Modules which run on the target machine
! # ---------------------------------------
! 
! .PHONY: configure-target-libstdc++-v3 maybe-configure-target-libstdc++-v3
! maybe-configure-target-libstdc++-v3:
! @if target-libstdc++-v3
! maybe-configure-target-libstdc++-v3: configure-target-libstdc++-v3
! 
! # There's only one multilib.out.  Cleverer subdirs shouldn't need it copied.
! $(TARGET_SUBDIR)/libstdc++-v3/multilib.out: multilib.out
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libstdc++-v3 ; \
! 	rm -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile || : ; \
! 	cp multilib.out $(TARGET_SUBDIR)/libstdc++-v3/multilib.out
! 
! configure-target-libstdc++-v3: $(TARGET_SUBDIR)/libstdc++-v3/multilib.out
! 	@test ! -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libstdc++-v3 ; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(RAW_CXX_TARGET_EXPORTS) \
! 	echo Configuring in $(TARGET_SUBDIR)/libstdc++-v3; \
! 	cd "$(TARGET_SUBDIR)/libstdc++-v3" || exit 1; \
! 	case $(srcdir) in \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    topdir=$(srcdir) ;; \
! 	  *) \
! 	    case "$(TARGET_SUBDIR)" in \
! 	      .) topdir="../$(srcdir)" ;; \
! 	      *) topdir="../../$(srcdir)" ;; \
! 	    esac ;; \
! 	esac; \
! 	  srcdiroption="--srcdir=$${topdir}/libstdc++-v3"; \
! 	  libsrcdir="$$s/libstdc++-v3"; \
! 	rm -f no-such-file || : ; \
! 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
! 	  $(TARGET_CONFIGARGS) $${srcdiroption} \
! 	  --with-target-subdir="$(TARGET_SUBDIR)"  \
! 	  || exit 1
! @endif target-libstdc++-v3
! 
! .PHONY: all-target-libstdc++-v3 maybe-all-target-libstdc++-v3
! maybe-all-target-libstdc++-v3:
! @if target-libstdc++-v3
! TARGET-target-libstdc++-v3=all
! maybe-all-target-libstdc++-v3: all-target-libstdc++-v3
! all-target-libstdc++-v3: configure-target-libstdc++-v3
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(RAW_CXX_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/libstdc++-v3 && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)'   $(TARGET-target-libstdc++-v3))
! @endif target-libstdc++-v3
! 
! .PHONY: check-target-libstdc++-v3 maybe-check-target-libstdc++-v3
! maybe-check-target-libstdc++-v3:
! @if target-libstdc++-v3
! maybe-check-target-libstdc++-v3: check-target-libstdc++-v3
! 
! check-target-libstdc++-v3:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(RAW_CXX_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/libstdc++-v3 && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)'   check)
! 
! @endif target-libstdc++-v3
! 
! .PHONY: install-target-libstdc++-v3 maybe-install-target-libstdc++-v3
! maybe-install-target-libstdc++-v3:
! @if target-libstdc++-v3
! maybe-install-target-libstdc++-v3: install-target-libstdc++-v3
! 
! install-target-libstdc++-v3: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(RAW_CXX_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/libstdc++-v3 && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  install)
! 
! @endif target-libstdc++-v3
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-target-libstdc++-v3 info-target-libstdc++-v3
! maybe-info-target-libstdc++-v3:
! @if target-libstdc++-v3
! maybe-info-target-libstdc++-v3: info-target-libstdc++-v3
! 
! info-target-libstdc++-v3: \
!     configure-target-libstdc++-v3 
  	@[ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(RAW_CXX_TARGET_EXPORTS) \
! 	echo "Doing info in $(TARGET_SUBDIR)/libstdc++-v3" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
*************** distclean-target-libstdc++-v3: 
*** 15150,17068 ****
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-target-newlib distclean-target-newlib
! maybe-distclean-target-newlib:
  
! distclean-target-newlib: 
! 	@[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing distclean in $(TARGET_SUBDIR)/newlib" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/newlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-target-libf2c distclean-target-libf2c
! maybe-distclean-target-libf2c:
  
! distclean-target-libf2c: 
! 	@[ -f $(TARGET_SUBDIR)/libf2c/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing distclean in $(TARGET_SUBDIR)/libf2c" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libf2c && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-target-libobjc distclean-target-libobjc
! maybe-distclean-target-libobjc:
  
! distclean-target-libobjc: 
! 	@[ -f $(TARGET_SUBDIR)/libobjc/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing distclean in $(TARGET_SUBDIR)/libobjc" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libobjc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-target-libtermcap distclean-target-libtermcap
! maybe-distclean-target-libtermcap:
  
! # libtermcap doesn't support distclean.
! distclean-target-libtermcap:
  
  
! .PHONY: maybe-distclean-target-winsup distclean-target-winsup
! maybe-distclean-target-winsup:
  
! distclean-target-winsup: 
! 	@[ -f $(TARGET_SUBDIR)/winsup/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing distclean in $(TARGET_SUBDIR)/winsup" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/winsup && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-target-libgloss distclean-target-libgloss
! maybe-distclean-target-libgloss:
  
! distclean-target-libgloss: 
! 	@[ -f $(TARGET_SUBDIR)/libgloss/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing distclean in $(TARGET_SUBDIR)/libgloss" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libgloss && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-target-libiberty distclean-target-libiberty
! maybe-distclean-target-libiberty:
  
! distclean-target-libiberty: 
! 	@[ -f $(TARGET_SUBDIR)/libiberty/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing distclean in $(TARGET_SUBDIR)/libiberty" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libiberty && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-target-gperf distclean-target-gperf
! maybe-distclean-target-gperf:
  
! distclean-target-gperf: 
! 	@[ -f $(TARGET_SUBDIR)/gperf/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing distclean in $(TARGET_SUBDIR)/gperf" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/gperf && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-target-examples distclean-target-examples
! maybe-distclean-target-examples:
  
! distclean-target-examples: 
! 	@[ -f $(TARGET_SUBDIR)/examples/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing distclean in $(TARGET_SUBDIR)/examples" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/examples && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
- .PHONY: maybe-distclean-target-libffi distclean-target-libffi
- maybe-distclean-target-libffi:
  
! distclean-target-libffi: 
! 	@[ -f $(TARGET_SUBDIR)/libffi/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing distclean in $(TARGET_SUBDIR)/libffi" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libffi && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-target-libjava distclean-target-libjava
! maybe-distclean-target-libjava:
  
! distclean-target-libjava: 
! 	@[ -f $(TARGET_SUBDIR)/libjava/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing distclean in $(TARGET_SUBDIR)/libjava" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libjava && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-target-zlib distclean-target-zlib
! maybe-distclean-target-zlib:
  
! distclean-target-zlib: 
! 	@[ -f $(TARGET_SUBDIR)/zlib/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing distclean in $(TARGET_SUBDIR)/zlib" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/zlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-target-boehm-gc distclean-target-boehm-gc
! maybe-distclean-target-boehm-gc:
  
! distclean-target-boehm-gc: 
! 	@[ -f $(TARGET_SUBDIR)/boehm-gc/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing distclean in $(TARGET_SUBDIR)/boehm-gc" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/boehm-gc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-target-qthreads distclean-target-qthreads
! maybe-distclean-target-qthreads:
  
! distclean-target-qthreads: 
! 	@[ -f $(TARGET_SUBDIR)/qthreads/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing distclean in $(TARGET_SUBDIR)/qthreads" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/qthreads && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
! .PHONY: maybe-distclean-target-rda distclean-target-rda
! maybe-distclean-target-rda:
  
! distclean-target-rda: 
! 	@[ -f $(TARGET_SUBDIR)/rda/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing distclean in $(TARGET_SUBDIR)/rda" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/rda && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          distclean) \
  	  || exit 1
  
  
  
! .PHONY: do-maintainer-clean
! do-maintainer-clean: maintainer-clean-host maintainer-clean-target
  
! .PHONY: maintainer-clean-host
! maintainer-clean-host: maybe-maintainer-clean-gcc  \
!     maybe-maintainer-clean-ash \
!     maybe-maintainer-clean-autoconf \
!     maybe-maintainer-clean-automake \
!     maybe-maintainer-clean-bash \
!     maybe-maintainer-clean-bfd \
!     maybe-maintainer-clean-opcodes \
!     maybe-maintainer-clean-binutils \
!     maybe-maintainer-clean-bison \
!     maybe-maintainer-clean-byacc \
!     maybe-maintainer-clean-bzip2 \
!     maybe-maintainer-clean-dejagnu \
!     maybe-maintainer-clean-diff \
!     maybe-maintainer-clean-dosutils \
!     maybe-maintainer-clean-etc \
!     maybe-maintainer-clean-fastjar \
!     maybe-maintainer-clean-fileutils \
!     maybe-maintainer-clean-findutils \
!     maybe-maintainer-clean-find \
!     maybe-maintainer-clean-flex \
!     maybe-maintainer-clean-gas \
!     maybe-maintainer-clean-gawk \
!     maybe-maintainer-clean-gettext \
!     maybe-maintainer-clean-gnuserv \
!     maybe-maintainer-clean-gprof \
!     maybe-maintainer-clean-gzip \
!     maybe-maintainer-clean-hello \
!     maybe-maintainer-clean-indent \
!     maybe-maintainer-clean-intl \
!     maybe-maintainer-clean-tcl \
!     maybe-maintainer-clean-itcl \
!     maybe-maintainer-clean-ld \
!     maybe-maintainer-clean-libgui \
!     maybe-maintainer-clean-libiberty \
!     maybe-maintainer-clean-libtool \
!     maybe-maintainer-clean-m4 \
!     maybe-maintainer-clean-make \
!     maybe-maintainer-clean-mmalloc \
!     maybe-maintainer-clean-patch \
!     maybe-maintainer-clean-perl \
!     maybe-maintainer-clean-prms \
!     maybe-maintainer-clean-rcs \
!     maybe-maintainer-clean-readline \
!     maybe-maintainer-clean-release \
!     maybe-maintainer-clean-recode \
!     maybe-maintainer-clean-sed \
!     maybe-maintainer-clean-send-pr \
!     maybe-maintainer-clean-shellutils \
!     maybe-maintainer-clean-sid \
!     maybe-maintainer-clean-sim \
!     maybe-maintainer-clean-tar \
!     maybe-maintainer-clean-texinfo \
!     maybe-maintainer-clean-textutils \
!     maybe-maintainer-clean-time \
!     maybe-maintainer-clean-uudecode \
!     maybe-maintainer-clean-wdiff \
!     maybe-maintainer-clean-zip \
!     maybe-maintainer-clean-zlib \
!     maybe-maintainer-clean-gdb \
!     maybe-maintainer-clean-expect \
!     maybe-maintainer-clean-guile \
!     maybe-maintainer-clean-tk \
!     maybe-maintainer-clean-tix \
!     maybe-maintainer-clean-libtermcap \
!     maybe-maintainer-clean-utils
  
! .PHONY: maintainer-clean-target
! maintainer-clean-target:  \
!     maybe-maintainer-clean-target-libstdc++-v3 \
!     maybe-maintainer-clean-target-newlib \
!     maybe-maintainer-clean-target-libf2c \
!     maybe-maintainer-clean-target-libobjc \
!     maybe-maintainer-clean-target-libtermcap \
!     maybe-maintainer-clean-target-winsup \
!     maybe-maintainer-clean-target-libgloss \
!     maybe-maintainer-clean-target-libiberty \
!     maybe-maintainer-clean-target-gperf \
!     maybe-maintainer-clean-target-examples \
!     maybe-maintainer-clean-target-libffi \
!     maybe-maintainer-clean-target-libjava \
!     maybe-maintainer-clean-target-zlib \
!     maybe-maintainer-clean-target-boehm-gc \
!     maybe-maintainer-clean-target-qthreads \
!     maybe-maintainer-clean-target-rda
  
! # GCC, the eternal special case
! .PHONY: maybe-maintainer-clean-gcc maintainer-clean-gcc
! maybe-maintainer-clean-gcc:
! maintainer-clean-gcc: 
! 	@[ -f ./gcc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_GCC_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in gcc" ; \
! 	(cd gcc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
! # Host modules.
  
! .PHONY: maybe-maintainer-clean-ash maintainer-clean-ash
! maybe-maintainer-clean-ash:
  
! maintainer-clean-ash: 
! 	@[ -f ./ash/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in ash" ; \
! 	(cd ash && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-autoconf maintainer-clean-autoconf
! maybe-maintainer-clean-autoconf:
  
! maintainer-clean-autoconf: 
! 	@[ -f ./autoconf/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in autoconf" ; \
! 	(cd autoconf && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
- .PHONY: maybe-maintainer-clean-automake maintainer-clean-automake
- maybe-maintainer-clean-automake:
  
! maintainer-clean-automake: 
! 	@[ -f ./automake/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in automake" ; \
! 	(cd automake && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-bash maintainer-clean-bash
! maybe-maintainer-clean-bash:
  
! maintainer-clean-bash: 
! 	@[ -f ./bash/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in bash" ; \
! 	(cd bash && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-bfd maintainer-clean-bfd
! maybe-maintainer-clean-bfd:
  
! maintainer-clean-bfd: 
! 	@[ -f ./bfd/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in bfd" ; \
! 	(cd bfd && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-opcodes maintainer-clean-opcodes
! maybe-maintainer-clean-opcodes:
  
! maintainer-clean-opcodes: 
! 	@[ -f ./opcodes/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in opcodes" ; \
! 	(cd opcodes && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-binutils maintainer-clean-binutils
! maybe-maintainer-clean-binutils:
  
! maintainer-clean-binutils: 
! 	@[ -f ./binutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in binutils" ; \
! 	(cd binutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-bison maintainer-clean-bison
! maybe-maintainer-clean-bison:
  
! maintainer-clean-bison: 
! 	@[ -f ./bison/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in bison" ; \
! 	(cd bison && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-byacc maintainer-clean-byacc
! maybe-maintainer-clean-byacc:
  
! maintainer-clean-byacc: 
! 	@[ -f ./byacc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in byacc" ; \
! 	(cd byacc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-bzip2 maintainer-clean-bzip2
! maybe-maintainer-clean-bzip2:
  
! maintainer-clean-bzip2: 
! 	@[ -f ./bzip2/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in bzip2" ; \
! 	(cd bzip2 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-dejagnu maintainer-clean-dejagnu
! maybe-maintainer-clean-dejagnu:
  
! maintainer-clean-dejagnu: 
! 	@[ -f ./dejagnu/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in dejagnu" ; \
! 	(cd dejagnu && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-diff maintainer-clean-diff
! maybe-maintainer-clean-diff:
  
! maintainer-clean-diff: 
! 	@[ -f ./diff/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in diff" ; \
! 	(cd diff && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
- .PHONY: maybe-maintainer-clean-dosutils maintainer-clean-dosutils
- maybe-maintainer-clean-dosutils:
  
! maintainer-clean-dosutils: 
! 	@[ -f ./dosutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in dosutils" ; \
! 	(cd dosutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-etc maintainer-clean-etc
! maybe-maintainer-clean-etc:
  
! maintainer-clean-etc: 
! 	@[ -f ./etc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in etc" ; \
! 	(cd etc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-fastjar maintainer-clean-fastjar
! maybe-maintainer-clean-fastjar:
  
! maintainer-clean-fastjar: 
! 	@[ -f ./fastjar/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in fastjar" ; \
! 	(cd fastjar && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-fileutils maintainer-clean-fileutils
! maybe-maintainer-clean-fileutils:
  
! maintainer-clean-fileutils: 
! 	@[ -f ./fileutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in fileutils" ; \
! 	(cd fileutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-findutils maintainer-clean-findutils
! maybe-maintainer-clean-findutils:
  
! maintainer-clean-findutils: 
! 	@[ -f ./findutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in findutils" ; \
! 	(cd findutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-find maintainer-clean-find
! maybe-maintainer-clean-find:
  
! maintainer-clean-find: 
! 	@[ -f ./find/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in find" ; \
! 	(cd find && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-flex maintainer-clean-flex
! maybe-maintainer-clean-flex:
  
! maintainer-clean-flex: 
! 	@[ -f ./flex/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in flex" ; \
! 	(cd flex && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-gas maintainer-clean-gas
! maybe-maintainer-clean-gas:
  
! maintainer-clean-gas: 
! 	@[ -f ./gas/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in gas" ; \
! 	(cd gas && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-gawk maintainer-clean-gawk
! maybe-maintainer-clean-gawk:
  
! maintainer-clean-gawk: 
! 	@[ -f ./gawk/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in gawk" ; \
! 	(cd gawk && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-gettext maintainer-clean-gettext
! maybe-maintainer-clean-gettext:
  
! maintainer-clean-gettext: 
! 	@[ -f ./gettext/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in gettext" ; \
! 	(cd gettext && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
- .PHONY: maybe-maintainer-clean-gnuserv maintainer-clean-gnuserv
- maybe-maintainer-clean-gnuserv:
  
! maintainer-clean-gnuserv: 
! 	@[ -f ./gnuserv/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in gnuserv" ; \
! 	(cd gnuserv && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-gprof maintainer-clean-gprof
! maybe-maintainer-clean-gprof:
  
! maintainer-clean-gprof: 
! 	@[ -f ./gprof/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in gprof" ; \
! 	(cd gprof && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-gzip maintainer-clean-gzip
! maybe-maintainer-clean-gzip:
  
! maintainer-clean-gzip: 
! 	@[ -f ./gzip/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in gzip" ; \
! 	(cd gzip && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-hello maintainer-clean-hello
! maybe-maintainer-clean-hello:
  
! maintainer-clean-hello: 
! 	@[ -f ./hello/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in hello" ; \
! 	(cd hello && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-indent maintainer-clean-indent
! maybe-maintainer-clean-indent:
  
! maintainer-clean-indent: 
! 	@[ -f ./indent/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in indent" ; \
! 	(cd indent && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-intl maintainer-clean-intl
! maybe-maintainer-clean-intl:
  
! maintainer-clean-intl: 
! 	@[ -f ./intl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in intl" ; \
! 	(cd intl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-tcl maintainer-clean-tcl
! maybe-maintainer-clean-tcl:
  
! maintainer-clean-tcl: 
! 	@[ -f ./tcl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in tcl" ; \
! 	(cd tcl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-itcl maintainer-clean-itcl
! maybe-maintainer-clean-itcl:
  
! maintainer-clean-itcl: 
! 	@[ -f ./itcl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in itcl" ; \
! 	(cd itcl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-ld maintainer-clean-ld
! maybe-maintainer-clean-ld:
  
! maintainer-clean-ld: 
! 	@[ -f ./ld/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in ld" ; \
! 	(cd ld && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-libgui maintainer-clean-libgui
! maybe-maintainer-clean-libgui:
  
! maintainer-clean-libgui: 
! 	@[ -f ./libgui/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in libgui" ; \
! 	(cd libgui && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-libiberty maintainer-clean-libiberty
! maybe-maintainer-clean-libiberty:
  
! maintainer-clean-libiberty: 
! 	@[ -f ./libiberty/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in libiberty" ; \
! 	(cd libiberty && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-libtool maintainer-clean-libtool
! maybe-maintainer-clean-libtool:
  
! maintainer-clean-libtool: 
! 	@[ -f ./libtool/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in libtool" ; \
! 	(cd libtool && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-m4 maintainer-clean-m4
! maybe-maintainer-clean-m4:
  
! maintainer-clean-m4: 
! 	@[ -f ./m4/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in m4" ; \
! 	(cd m4 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-make maintainer-clean-make
! maybe-maintainer-clean-make:
  
! maintainer-clean-make: 
! 	@[ -f ./make/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in make" ; \
! 	(cd make && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-mmalloc maintainer-clean-mmalloc
! maybe-maintainer-clean-mmalloc:
  
! maintainer-clean-mmalloc: 
! 	@[ -f ./mmalloc/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in mmalloc" ; \
! 	(cd mmalloc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-patch maintainer-clean-patch
! maybe-maintainer-clean-patch:
  
! maintainer-clean-patch: 
! 	@[ -f ./patch/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in patch" ; \
! 	(cd patch && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-perl maintainer-clean-perl
! maybe-maintainer-clean-perl:
  
! maintainer-clean-perl: 
! 	@[ -f ./perl/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in perl" ; \
! 	(cd perl && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-prms maintainer-clean-prms
! maybe-maintainer-clean-prms:
  
! maintainer-clean-prms: 
! 	@[ -f ./prms/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in prms" ; \
! 	(cd prms && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-rcs maintainer-clean-rcs
! maybe-maintainer-clean-rcs:
  
! maintainer-clean-rcs: 
! 	@[ -f ./rcs/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in rcs" ; \
! 	(cd rcs && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-readline maintainer-clean-readline
! maybe-maintainer-clean-readline:
  
! maintainer-clean-readline: 
! 	@[ -f ./readline/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in readline" ; \
! 	(cd readline && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-release maintainer-clean-release
! maybe-maintainer-clean-release:
  
! maintainer-clean-release: 
! 	@[ -f ./release/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in release" ; \
! 	(cd release && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-recode maintainer-clean-recode
! maybe-maintainer-clean-recode:
  
! maintainer-clean-recode: 
! 	@[ -f ./recode/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in recode" ; \
! 	(cd recode && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-sed maintainer-clean-sed
! maybe-maintainer-clean-sed:
  
! maintainer-clean-sed: 
! 	@[ -f ./sed/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in sed" ; \
! 	(cd sed && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-send-pr maintainer-clean-send-pr
! maybe-maintainer-clean-send-pr:
  
! maintainer-clean-send-pr: 
! 	@[ -f ./send-pr/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in send-pr" ; \
! 	(cd send-pr && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-shellutils maintainer-clean-shellutils
! maybe-maintainer-clean-shellutils:
  
! maintainer-clean-shellutils: 
! 	@[ -f ./shellutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in shellutils" ; \
! 	(cd shellutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-sid maintainer-clean-sid
! maybe-maintainer-clean-sid:
  
! maintainer-clean-sid: 
! 	@[ -f ./sid/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in sid" ; \
! 	(cd sid && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
- .PHONY: maybe-maintainer-clean-sim maintainer-clean-sim
- maybe-maintainer-clean-sim:
  
! maintainer-clean-sim: 
! 	@[ -f ./sim/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in sim" ; \
! 	(cd sim && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-tar maintainer-clean-tar
! maybe-maintainer-clean-tar:
  
! maintainer-clean-tar: 
! 	@[ -f ./tar/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in tar" ; \
! 	(cd tar && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-texinfo maintainer-clean-texinfo
! maybe-maintainer-clean-texinfo:
  
! maintainer-clean-texinfo: 
! 	@[ -f ./texinfo/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in texinfo" ; \
! 	(cd texinfo && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-textutils maintainer-clean-textutils
! maybe-maintainer-clean-textutils:
  
! maintainer-clean-textutils: 
! 	@[ -f ./textutils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in textutils" ; \
! 	(cd textutils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-time maintainer-clean-time
! maybe-maintainer-clean-time:
  
! maintainer-clean-time: 
! 	@[ -f ./time/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in time" ; \
! 	(cd time && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-uudecode maintainer-clean-uudecode
! maybe-maintainer-clean-uudecode:
  
! maintainer-clean-uudecode: 
! 	@[ -f ./uudecode/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in uudecode" ; \
! 	(cd uudecode && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-wdiff maintainer-clean-wdiff
! maybe-maintainer-clean-wdiff:
  
! maintainer-clean-wdiff: 
! 	@[ -f ./wdiff/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in wdiff" ; \
! 	(cd wdiff && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-zip maintainer-clean-zip
! maybe-maintainer-clean-zip:
  
! maintainer-clean-zip: 
! 	@[ -f ./zip/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in zip" ; \
! 	(cd zip && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-zlib maintainer-clean-zlib
! maybe-maintainer-clean-zlib:
  
! maintainer-clean-zlib: 
! 	@[ -f ./zlib/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in zlib" ; \
! 	(cd zlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-gdb maintainer-clean-gdb
! maybe-maintainer-clean-gdb:
  
! maintainer-clean-gdb: 
! 	@[ -f ./gdb/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in gdb" ; \
! 	(cd gdb && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
- .PHONY: maybe-maintainer-clean-expect maintainer-clean-expect
- maybe-maintainer-clean-expect:
  
! maintainer-clean-expect: 
! 	@[ -f ./expect/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in expect" ; \
! 	(cd expect && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-guile maintainer-clean-guile
! maybe-maintainer-clean-guile:
  
! maintainer-clean-guile: 
! 	@[ -f ./guile/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in guile" ; \
! 	(cd guile && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-tk maintainer-clean-tk
! maybe-maintainer-clean-tk:
  
! maintainer-clean-tk: 
! 	@[ -f ./tk/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in tk" ; \
! 	(cd tk && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-tix maintainer-clean-tix
! maybe-maintainer-clean-tix:
  
! maintainer-clean-tix: 
! 	@[ -f ./tix/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in tix" ; \
! 	(cd tix && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-libtermcap maintainer-clean-libtermcap
! maybe-maintainer-clean-libtermcap:
  
! # libtermcap doesn't support maintainer-clean.
! maintainer-clean-libtermcap:
  
  
! .PHONY: maybe-maintainer-clean-utils maintainer-clean-utils
! maybe-maintainer-clean-utils:
  
! maintainer-clean-utils: 
! 	@[ -f ./utils/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	for flag in $(EXTRA_HOST_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing maintainer-clean in utils" ; \
! 	(cd utils && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
  
! # Target modules.
! 
! .PHONY: maybe-maintainer-clean-target-libstdc++-v3 maintainer-clean-target-libstdc++-v3
! maybe-maintainer-clean-target-libstdc++-v3:
! 
! maintainer-clean-target-libstdc++-v3: 
! 	@[ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libstdc++-v3" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libstdc++-v3 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-target-newlib maintainer-clean-target-newlib
! maybe-maintainer-clean-target-newlib:
  
! maintainer-clean-target-newlib: 
! 	@[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing maintainer-clean in $(TARGET_SUBDIR)/newlib" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/newlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-target-libf2c maintainer-clean-target-libf2c
! maybe-maintainer-clean-target-libf2c:
  
! maintainer-clean-target-libf2c: 
! 	@[ -f $(TARGET_SUBDIR)/libf2c/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libf2c" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libf2c && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-target-libobjc maintainer-clean-target-libobjc
! maybe-maintainer-clean-target-libobjc:
  
! maintainer-clean-target-libobjc: 
! 	@[ -f $(TARGET_SUBDIR)/libobjc/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libobjc" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libobjc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
- .PHONY: maybe-maintainer-clean-target-libtermcap maintainer-clean-target-libtermcap
- maybe-maintainer-clean-target-libtermcap:
  
! # libtermcap doesn't support maintainer-clean.
! maintainer-clean-target-libtermcap:
  
  
! .PHONY: maybe-maintainer-clean-target-winsup maintainer-clean-target-winsup
! maybe-maintainer-clean-target-winsup:
  
! maintainer-clean-target-winsup: 
! 	@[ -f $(TARGET_SUBDIR)/winsup/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing maintainer-clean in $(TARGET_SUBDIR)/winsup" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/winsup && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-target-libgloss maintainer-clean-target-libgloss
! maybe-maintainer-clean-target-libgloss:
  
! maintainer-clean-target-libgloss: 
! 	@[ -f $(TARGET_SUBDIR)/libgloss/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libgloss" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libgloss && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-target-libiberty maintainer-clean-target-libiberty
! maybe-maintainer-clean-target-libiberty:
  
! maintainer-clean-target-libiberty: 
! 	@[ -f $(TARGET_SUBDIR)/libiberty/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libiberty" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libiberty && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-target-gperf maintainer-clean-target-gperf
! maybe-maintainer-clean-target-gperf:
  
! maintainer-clean-target-gperf: 
  	@[ -f $(TARGET_SUBDIR)/gperf/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing maintainer-clean in $(TARGET_SUBDIR)/gperf" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
--- 24346,27451 ----
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           info) \
  	  || exit 1
  
+ @endif target-libstdc++-v3
  
! .PHONY: maybe-dvi-target-libstdc++-v3 dvi-target-libstdc++-v3
! maybe-dvi-target-libstdc++-v3:
! @if target-libstdc++-v3
! maybe-dvi-target-libstdc++-v3: dvi-target-libstdc++-v3
  
! dvi-target-libstdc++-v3: \
!     configure-target-libstdc++-v3 
! 	@[ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(RAW_CXX_TARGET_EXPORTS) \
! 	echo "Doing dvi in $(TARGET_SUBDIR)/libstdc++-v3" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libstdc++-v3 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           dvi) \
  	  || exit 1
  
+ @endif target-libstdc++-v3
  
! .PHONY: maybe-html-target-libstdc++-v3 html-target-libstdc++-v3
! maybe-html-target-libstdc++-v3:
! @if target-libstdc++-v3
! maybe-html-target-libstdc++-v3: html-target-libstdc++-v3
  
! html-target-libstdc++-v3: \
!     configure-target-libstdc++-v3 
! 	@[ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(RAW_CXX_TARGET_EXPORTS) \
! 	echo "Doing html in $(TARGET_SUBDIR)/libstdc++-v3" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libstdc++-v3 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           html) \
  	  || exit 1
  
+ @endif target-libstdc++-v3
  
! .PHONY: maybe-TAGS-target-libstdc++-v3 TAGS-target-libstdc++-v3
! maybe-TAGS-target-libstdc++-v3:
! @if target-libstdc++-v3
! maybe-TAGS-target-libstdc++-v3: TAGS-target-libstdc++-v3
  
! TAGS-target-libstdc++-v3: \
!     configure-target-libstdc++-v3 
! 	@[ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(RAW_CXX_TARGET_EXPORTS) \
! 	echo "Doing TAGS in $(TARGET_SUBDIR)/libstdc++-v3" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libstdc++-v3 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           TAGS) \
  	  || exit 1
  
+ @endif target-libstdc++-v3
  
! .PHONY: maybe-install-info-target-libstdc++-v3 install-info-target-libstdc++-v3
! maybe-install-info-target-libstdc++-v3:
! @if target-libstdc++-v3
! maybe-install-info-target-libstdc++-v3: install-info-target-libstdc++-v3
  
! install-info-target-libstdc++-v3: \
!     configure-target-libstdc++-v3 \
!     info-target-libstdc++-v3 
! 	@[ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(RAW_CXX_TARGET_EXPORTS) \
! 	echo "Doing install-info in $(TARGET_SUBDIR)/libstdc++-v3" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libstdc++-v3 && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           install-info) \
! 	  || exit 1
  
+ @endif target-libstdc++-v3
  
! .PHONY: maybe-installcheck-target-libstdc++-v3 installcheck-target-libstdc++-v3
! maybe-installcheck-target-libstdc++-v3:
! @if target-libstdc++-v3
! maybe-installcheck-target-libstdc++-v3: installcheck-target-libstdc++-v3
  
! installcheck-target-libstdc++-v3: \
!     configure-target-libstdc++-v3 
! 	@[ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(RAW_CXX_TARGET_EXPORTS) \
! 	echo "Doing installcheck in $(TARGET_SUBDIR)/libstdc++-v3" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libstdc++-v3 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           installcheck) \
  	  || exit 1
  
+ @endif target-libstdc++-v3
  
! .PHONY: maybe-mostlyclean-target-libstdc++-v3 mostlyclean-target-libstdc++-v3
! maybe-mostlyclean-target-libstdc++-v3:
! @if target-libstdc++-v3
! maybe-mostlyclean-target-libstdc++-v3: mostlyclean-target-libstdc++-v3
  
! mostlyclean-target-libstdc++-v3: 
! 	@[ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(RAW_CXX_TARGET_EXPORTS) \
! 	echo "Doing mostlyclean in $(TARGET_SUBDIR)/libstdc++-v3" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libstdc++-v3 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           mostlyclean) \
  	  || exit 1
  
+ @endif target-libstdc++-v3
  
! .PHONY: maybe-clean-target-libstdc++-v3 clean-target-libstdc++-v3
! maybe-clean-target-libstdc++-v3:
! @if target-libstdc++-v3
! maybe-clean-target-libstdc++-v3: clean-target-libstdc++-v3
  
! clean-target-libstdc++-v3: 
! 	@[ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(RAW_CXX_TARGET_EXPORTS) \
! 	echo "Doing clean in $(TARGET_SUBDIR)/libstdc++-v3" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libstdc++-v3 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           clean) \
  	  || exit 1
  
+ @endif target-libstdc++-v3
  
! .PHONY: maybe-distclean-target-libstdc++-v3 distclean-target-libstdc++-v3
! maybe-distclean-target-libstdc++-v3:
! @if target-libstdc++-v3
! maybe-distclean-target-libstdc++-v3: distclean-target-libstdc++-v3
  
! distclean-target-libstdc++-v3: 
! 	@[ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(RAW_CXX_TARGET_EXPORTS) \
! 	echo "Doing distclean in $(TARGET_SUBDIR)/libstdc++-v3" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libstdc++-v3 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           distclean) \
  	  || exit 1
  
+ @endif target-libstdc++-v3
  
! .PHONY: maybe-maintainer-clean-target-libstdc++-v3 maintainer-clean-target-libstdc++-v3
! maybe-maintainer-clean-target-libstdc++-v3:
! @if target-libstdc++-v3
! maybe-maintainer-clean-target-libstdc++-v3: maintainer-clean-target-libstdc++-v3
  
! maintainer-clean-target-libstdc++-v3: 
! 	@[ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(RAW_CXX_TARGET_EXPORTS) \
! 	echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libstdc++-v3" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libstdc++-v3 && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           maintainer-clean) \
  	  || exit 1
  
+ @endif target-libstdc++-v3
  
  
! .PHONY: configure-target-libmudflap maybe-configure-target-libmudflap
! maybe-configure-target-libmudflap:
! @if target-libmudflap
! maybe-configure-target-libmudflap: configure-target-libmudflap
! 
! # There's only one multilib.out.  Cleverer subdirs shouldn't need it copied.
! $(TARGET_SUBDIR)/libmudflap/multilib.out: multilib.out
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libmudflap ; \
! 	rm -f $(TARGET_SUBDIR)/libmudflap/Makefile || : ; \
! 	cp multilib.out $(TARGET_SUBDIR)/libmudflap/multilib.out
! 
! configure-target-libmudflap: $(TARGET_SUBDIR)/libmudflap/multilib.out
! 	@test ! -f $(TARGET_SUBDIR)/libmudflap/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libmudflap ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo Configuring in $(TARGET_SUBDIR)/libmudflap; \
! 	cd "$(TARGET_SUBDIR)/libmudflap" || exit 1; \
! 	case $(srcdir) in \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    topdir=$(srcdir) ;; \
! 	  *) \
! 	    case "$(TARGET_SUBDIR)" in \
! 	      .) topdir="../$(srcdir)" ;; \
! 	      *) topdir="../../$(srcdir)" ;; \
! 	    esac ;; \
! 	esac; \
! 	  srcdiroption="--srcdir=$${topdir}/libmudflap"; \
! 	  libsrcdir="$$s/libmudflap"; \
! 	rm -f no-such-file || : ; \
! 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
! 	  $(TARGET_CONFIGARGS) $${srcdiroption} \
! 	  --with-target-subdir="$(TARGET_SUBDIR)"  \
! 	  || exit 1
! @endif target-libmudflap
! 
! .PHONY: all-target-libmudflap maybe-all-target-libmudflap
! maybe-all-target-libmudflap:
! @if target-libmudflap
! TARGET-target-libmudflap=all
! maybe-all-target-libmudflap: all-target-libmudflap
! all-target-libmudflap: configure-target-libmudflap
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/libmudflap && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)   $(TARGET-target-libmudflap))
! @endif target-libmudflap
! 
! .PHONY: check-target-libmudflap maybe-check-target-libmudflap
! maybe-check-target-libmudflap:
! @if target-libmudflap
! maybe-check-target-libmudflap: check-target-libmudflap
! 
! check-target-libmudflap:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/libmudflap && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)   check)
! 
! @endif target-libmudflap
! 
! .PHONY: install-target-libmudflap maybe-install-target-libmudflap
! maybe-install-target-libmudflap:
! @if target-libmudflap
! maybe-install-target-libmudflap: install-target-libmudflap
! 
! install-target-libmudflap: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/libmudflap && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  install)
! 
! @endif target-libmudflap
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-target-libmudflap info-target-libmudflap
! maybe-info-target-libmudflap:
! @if target-libmudflap
! maybe-info-target-libmudflap: info-target-libmudflap
! 
! info-target-libmudflap: \
!     configure-target-libmudflap 
! 	@[ -f $(TARGET_SUBDIR)/libmudflap/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing info in $(TARGET_SUBDIR)/libmudflap" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libmudflap && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           info) \
  	  || exit 1
  
+ @endif target-libmudflap
  
! .PHONY: maybe-dvi-target-libmudflap dvi-target-libmudflap
! maybe-dvi-target-libmudflap:
! @if target-libmudflap
! maybe-dvi-target-libmudflap: dvi-target-libmudflap
  
! dvi-target-libmudflap: \
!     configure-target-libmudflap 
! 	@[ -f $(TARGET_SUBDIR)/libmudflap/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing dvi in $(TARGET_SUBDIR)/libmudflap" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libmudflap && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           dvi) \
  	  || exit 1
  
+ @endif target-libmudflap
  
! .PHONY: maybe-html-target-libmudflap html-target-libmudflap
! maybe-html-target-libmudflap:
! @if target-libmudflap
! maybe-html-target-libmudflap: html-target-libmudflap
  
! html-target-libmudflap: \
!     configure-target-libmudflap 
! 	@[ -f $(TARGET_SUBDIR)/libmudflap/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing html in $(TARGET_SUBDIR)/libmudflap" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libmudflap && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           html) \
  	  || exit 1
  
+ @endif target-libmudflap
  
! .PHONY: maybe-TAGS-target-libmudflap TAGS-target-libmudflap
! maybe-TAGS-target-libmudflap:
! @if target-libmudflap
! maybe-TAGS-target-libmudflap: TAGS-target-libmudflap
  
! TAGS-target-libmudflap: \
!     configure-target-libmudflap 
! 	@[ -f $(TARGET_SUBDIR)/libmudflap/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing TAGS in $(TARGET_SUBDIR)/libmudflap" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libmudflap && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           TAGS) \
  	  || exit 1
  
+ @endif target-libmudflap
  
! .PHONY: maybe-install-info-target-libmudflap install-info-target-libmudflap
! maybe-install-info-target-libmudflap:
! @if target-libmudflap
! maybe-install-info-target-libmudflap: install-info-target-libmudflap
  
! install-info-target-libmudflap: \
!     configure-target-libmudflap \
!     info-target-libmudflap 
! 	@[ -f $(TARGET_SUBDIR)/libmudflap/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing install-info in $(TARGET_SUBDIR)/libmudflap" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libmudflap && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           install-info) \
  	  || exit 1
  
+ @endif target-libmudflap
  
! .PHONY: maybe-installcheck-target-libmudflap installcheck-target-libmudflap
! maybe-installcheck-target-libmudflap:
! @if target-libmudflap
! maybe-installcheck-target-libmudflap: installcheck-target-libmudflap
  
! installcheck-target-libmudflap: \
!     configure-target-libmudflap 
! 	@[ -f $(TARGET_SUBDIR)/libmudflap/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing installcheck in $(TARGET_SUBDIR)/libmudflap" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libmudflap && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           installcheck) \
  	  || exit 1
  
+ @endif target-libmudflap
  
+ .PHONY: maybe-mostlyclean-target-libmudflap mostlyclean-target-libmudflap
+ maybe-mostlyclean-target-libmudflap:
+ @if target-libmudflap
+ maybe-mostlyclean-target-libmudflap: mostlyclean-target-libmudflap
  
! mostlyclean-target-libmudflap: 
! 	@[ -f $(TARGET_SUBDIR)/libmudflap/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing mostlyclean in $(TARGET_SUBDIR)/libmudflap" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libmudflap && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           mostlyclean) \
! 	  || exit 1
  
! @endif target-libmudflap
  
! .PHONY: maybe-clean-target-libmudflap clean-target-libmudflap
! maybe-clean-target-libmudflap:
! @if target-libmudflap
! maybe-clean-target-libmudflap: clean-target-libmudflap
  
! clean-target-libmudflap: 
! 	@[ -f $(TARGET_SUBDIR)/libmudflap/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing clean in $(TARGET_SUBDIR)/libmudflap" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libmudflap && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           clean) \
  	  || exit 1
  
! @endif target-libmudflap
  
! .PHONY: maybe-distclean-target-libmudflap distclean-target-libmudflap
! maybe-distclean-target-libmudflap:
! @if target-libmudflap
! maybe-distclean-target-libmudflap: distclean-target-libmudflap
  
! distclean-target-libmudflap: 
! 	@[ -f $(TARGET_SUBDIR)/libmudflap/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing distclean in $(TARGET_SUBDIR)/libmudflap" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libmudflap && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           distclean) \
  	  || exit 1
  
+ @endif target-libmudflap
  
! .PHONY: maybe-maintainer-clean-target-libmudflap maintainer-clean-target-libmudflap
! maybe-maintainer-clean-target-libmudflap:
! @if target-libmudflap
! maybe-maintainer-clean-target-libmudflap: maintainer-clean-target-libmudflap
  
! maintainer-clean-target-libmudflap: 
! 	@[ -f $(TARGET_SUBDIR)/libmudflap/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libmudflap" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libmudflap && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           maintainer-clean) \
  	  || exit 1
  
+ @endif target-libmudflap
  
  
! .PHONY: configure-target-newlib maybe-configure-target-newlib
! maybe-configure-target-newlib:
! @if target-newlib
! maybe-configure-target-newlib: configure-target-newlib
! 
! # There's only one multilib.out.  Cleverer subdirs shouldn't need it copied.
! $(TARGET_SUBDIR)/newlib/multilib.out: multilib.out
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/newlib ; \
! 	rm -f $(TARGET_SUBDIR)/newlib/Makefile || : ; \
! 	cp multilib.out $(TARGET_SUBDIR)/newlib/multilib.out
! 
! configure-target-newlib: $(TARGET_SUBDIR)/newlib/multilib.out
! 	@test ! -f $(TARGET_SUBDIR)/newlib/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/newlib ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo Configuring in $(TARGET_SUBDIR)/newlib; \
! 	cd "$(TARGET_SUBDIR)/newlib" || exit 1; \
! 	case $(srcdir) in \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    topdir=$(srcdir) ;; \
! 	  *) \
! 	    case "$(TARGET_SUBDIR)" in \
! 	      .) topdir="../$(srcdir)" ;; \
! 	      *) topdir="../../$(srcdir)" ;; \
! 	    esac ;; \
! 	esac; \
! 	  srcdiroption="--srcdir=$${topdir}/newlib"; \
! 	  libsrcdir="$$s/newlib"; \
! 	rm -f no-such-file || : ; \
! 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
! 	  $(TARGET_CONFIGARGS) $${srcdiroption} \
! 	  --with-target-subdir="$(TARGET_SUBDIR)"  \
! 	  || exit 1
! @endif target-newlib
! 
! .PHONY: all-target-newlib maybe-all-target-newlib
! maybe-all-target-newlib:
! @if target-newlib
! TARGET-target-newlib=all
! maybe-all-target-newlib: all-target-newlib
! all-target-newlib: configure-target-newlib
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/newlib && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)   $(TARGET-target-newlib))
! @endif target-newlib
! 
! .PHONY: check-target-newlib maybe-check-target-newlib
! maybe-check-target-newlib:
! @if target-newlib
! maybe-check-target-newlib: check-target-newlib
! 
! check-target-newlib:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/newlib && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)   check)
! 
! @endif target-newlib
! 
! .PHONY: install-target-newlib maybe-install-target-newlib
! maybe-install-target-newlib:
! @if target-newlib
! maybe-install-target-newlib: install-target-newlib
! 
! install-target-newlib: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/newlib && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  install)
! 
! @endif target-newlib
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-target-newlib info-target-newlib
! maybe-info-target-newlib:
! @if target-newlib
! maybe-info-target-newlib: info-target-newlib
! 
! info-target-newlib: \
!     configure-target-newlib 
! 	@[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing info in $(TARGET_SUBDIR)/newlib" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/newlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           info) \
  	  || exit 1
  
+ @endif target-newlib
  
! .PHONY: maybe-dvi-target-newlib dvi-target-newlib
! maybe-dvi-target-newlib:
! @if target-newlib
! maybe-dvi-target-newlib: dvi-target-newlib
  
! dvi-target-newlib: \
!     configure-target-newlib 
! 	@[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing dvi in $(TARGET_SUBDIR)/newlib" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/newlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           dvi) \
  	  || exit 1
  
+ @endif target-newlib
  
! .PHONY: maybe-html-target-newlib html-target-newlib
! maybe-html-target-newlib:
! @if target-newlib
! maybe-html-target-newlib: html-target-newlib
  
! html-target-newlib: \
!     configure-target-newlib 
! 	@[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing html in $(TARGET_SUBDIR)/newlib" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/newlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           html) \
  	  || exit 1
  
+ @endif target-newlib
  
! .PHONY: maybe-TAGS-target-newlib TAGS-target-newlib
! maybe-TAGS-target-newlib:
! @if target-newlib
! maybe-TAGS-target-newlib: TAGS-target-newlib
  
! TAGS-target-newlib: \
!     configure-target-newlib 
! 	@[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing TAGS in $(TARGET_SUBDIR)/newlib" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/newlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           TAGS) \
  	  || exit 1
  
+ @endif target-newlib
  
! .PHONY: maybe-install-info-target-newlib install-info-target-newlib
! maybe-install-info-target-newlib:
! @if target-newlib
! maybe-install-info-target-newlib: install-info-target-newlib
  
! install-info-target-newlib: \
!     configure-target-newlib \
!     info-target-newlib 
! 	@[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing install-info in $(TARGET_SUBDIR)/newlib" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/newlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           install-info) \
  	  || exit 1
  
+ @endif target-newlib
  
! .PHONY: maybe-installcheck-target-newlib installcheck-target-newlib
! maybe-installcheck-target-newlib:
! @if target-newlib
! maybe-installcheck-target-newlib: installcheck-target-newlib
  
! installcheck-target-newlib: \
!     configure-target-newlib 
! 	@[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing installcheck in $(TARGET_SUBDIR)/newlib" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/newlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           installcheck) \
  	  || exit 1
  
+ @endif target-newlib
  
! .PHONY: maybe-mostlyclean-target-newlib mostlyclean-target-newlib
! maybe-mostlyclean-target-newlib:
! @if target-newlib
! maybe-mostlyclean-target-newlib: mostlyclean-target-newlib
  
! mostlyclean-target-newlib: 
! 	@[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing mostlyclean in $(TARGET_SUBDIR)/newlib" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/newlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           mostlyclean) \
  	  || exit 1
  
+ @endif target-newlib
  
! .PHONY: maybe-clean-target-newlib clean-target-newlib
! maybe-clean-target-newlib:
! @if target-newlib
! maybe-clean-target-newlib: clean-target-newlib
  
! clean-target-newlib: 
! 	@[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing clean in $(TARGET_SUBDIR)/newlib" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/newlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           clean) \
  	  || exit 1
  
+ @endif target-newlib
  
! .PHONY: maybe-distclean-target-newlib distclean-target-newlib
! maybe-distclean-target-newlib:
! @if target-newlib
! maybe-distclean-target-newlib: distclean-target-newlib
  
! distclean-target-newlib: 
! 	@[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing distclean in $(TARGET_SUBDIR)/newlib" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/newlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           distclean) \
  	  || exit 1
  
+ @endif target-newlib
  
! .PHONY: maybe-maintainer-clean-target-newlib maintainer-clean-target-newlib
! maybe-maintainer-clean-target-newlib:
! @if target-newlib
! maybe-maintainer-clean-target-newlib: maintainer-clean-target-newlib
  
! maintainer-clean-target-newlib: 
! 	@[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing maintainer-clean in $(TARGET_SUBDIR)/newlib" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/newlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           maintainer-clean) \
  	  || exit 1
  
+ @endif target-newlib
  
  
! .PHONY: configure-target-libgfortran maybe-configure-target-libgfortran
! maybe-configure-target-libgfortran:
! @if target-libgfortran
! maybe-configure-target-libgfortran: configure-target-libgfortran
! 
! # There's only one multilib.out.  Cleverer subdirs shouldn't need it copied.
! $(TARGET_SUBDIR)/libgfortran/multilib.out: multilib.out
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgfortran ; \
! 	rm -f $(TARGET_SUBDIR)/libgfortran/Makefile || : ; \
! 	cp multilib.out $(TARGET_SUBDIR)/libgfortran/multilib.out
! 
! configure-target-libgfortran: $(TARGET_SUBDIR)/libgfortran/multilib.out
! 	@test ! -f $(TARGET_SUBDIR)/libgfortran/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgfortran ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo Configuring in $(TARGET_SUBDIR)/libgfortran; \
! 	cd "$(TARGET_SUBDIR)/libgfortran" || exit 1; \
! 	case $(srcdir) in \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    topdir=$(srcdir) ;; \
! 	  *) \
! 	    case "$(TARGET_SUBDIR)" in \
! 	      .) topdir="../$(srcdir)" ;; \
! 	      *) topdir="../../$(srcdir)" ;; \
! 	    esac ;; \
! 	esac; \
! 	  srcdiroption="--srcdir=$${topdir}/libgfortran"; \
! 	  libsrcdir="$$s/libgfortran"; \
! 	rm -f no-such-file || : ; \
! 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
! 	  $(TARGET_CONFIGARGS) $${srcdiroption} \
! 	  --with-target-subdir="$(TARGET_SUBDIR)"  \
! 	  || exit 1
! @endif target-libgfortran
! 
! .PHONY: all-target-libgfortran maybe-all-target-libgfortran
! maybe-all-target-libgfortran:
! @if target-libgfortran
! TARGET-target-libgfortran=all
! maybe-all-target-libgfortran: all-target-libgfortran
! all-target-libgfortran: configure-target-libgfortran
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/libgfortran && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)   $(TARGET-target-libgfortran))
! @endif target-libgfortran
! 
! .PHONY: check-target-libgfortran maybe-check-target-libgfortran
! maybe-check-target-libgfortran:
! @if target-libgfortran
! maybe-check-target-libgfortran: check-target-libgfortran
! 
! check-target-libgfortran:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/libgfortran && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)   check)
! 
! @endif target-libgfortran
! 
! .PHONY: install-target-libgfortran maybe-install-target-libgfortran
! maybe-install-target-libgfortran:
! @if target-libgfortran
! maybe-install-target-libgfortran: install-target-libgfortran
! 
! install-target-libgfortran: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/libgfortran && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  install)
! 
! @endif target-libgfortran
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-target-libgfortran info-target-libgfortran
! maybe-info-target-libgfortran:
! @if target-libgfortran
! maybe-info-target-libgfortran: info-target-libgfortran
! 
! info-target-libgfortran: \
!     configure-target-libgfortran 
! 	@[ -f $(TARGET_SUBDIR)/libgfortran/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing info in $(TARGET_SUBDIR)/libgfortran" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libgfortran && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           info) \
  	  || exit 1
  
+ @endif target-libgfortran
  
! .PHONY: maybe-dvi-target-libgfortran dvi-target-libgfortran
! maybe-dvi-target-libgfortran:
! @if target-libgfortran
! maybe-dvi-target-libgfortran: dvi-target-libgfortran
  
! dvi-target-libgfortran: \
!     configure-target-libgfortran 
! 	@[ -f $(TARGET_SUBDIR)/libgfortran/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing dvi in $(TARGET_SUBDIR)/libgfortran" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libgfortran && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           dvi) \
  	  || exit 1
  
+ @endif target-libgfortran
  
! .PHONY: maybe-html-target-libgfortran html-target-libgfortran
! maybe-html-target-libgfortran:
! @if target-libgfortran
! maybe-html-target-libgfortran: html-target-libgfortran
  
! html-target-libgfortran: \
!     configure-target-libgfortran 
! 	@[ -f $(TARGET_SUBDIR)/libgfortran/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing html in $(TARGET_SUBDIR)/libgfortran" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libgfortran && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           html) \
  	  || exit 1
  
+ @endif target-libgfortran
  
! .PHONY: maybe-TAGS-target-libgfortran TAGS-target-libgfortran
! maybe-TAGS-target-libgfortran:
! @if target-libgfortran
! maybe-TAGS-target-libgfortran: TAGS-target-libgfortran
  
! TAGS-target-libgfortran: \
!     configure-target-libgfortran 
! 	@[ -f $(TARGET_SUBDIR)/libgfortran/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing TAGS in $(TARGET_SUBDIR)/libgfortran" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libgfortran && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           TAGS) \
  	  || exit 1
  
+ @endif target-libgfortran
  
! .PHONY: maybe-install-info-target-libgfortran install-info-target-libgfortran
! maybe-install-info-target-libgfortran:
! @if target-libgfortran
! maybe-install-info-target-libgfortran: install-info-target-libgfortran
  
! install-info-target-libgfortran: \
!     configure-target-libgfortran \
!     info-target-libgfortran 
! 	@[ -f $(TARGET_SUBDIR)/libgfortran/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing install-info in $(TARGET_SUBDIR)/libgfortran" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libgfortran && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           install-info) \
  	  || exit 1
  
+ @endif target-libgfortran
  
! .PHONY: maybe-installcheck-target-libgfortran installcheck-target-libgfortran
! maybe-installcheck-target-libgfortran:
! @if target-libgfortran
! maybe-installcheck-target-libgfortran: installcheck-target-libgfortran
  
! installcheck-target-libgfortran: \
!     configure-target-libgfortran 
! 	@[ -f $(TARGET_SUBDIR)/libgfortran/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing installcheck in $(TARGET_SUBDIR)/libgfortran" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libgfortran && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           installcheck) \
  	  || exit 1
  
+ @endif target-libgfortran
  
! .PHONY: maybe-mostlyclean-target-libgfortran mostlyclean-target-libgfortran
! maybe-mostlyclean-target-libgfortran:
! @if target-libgfortran
! maybe-mostlyclean-target-libgfortran: mostlyclean-target-libgfortran
  
! mostlyclean-target-libgfortran: 
! 	@[ -f $(TARGET_SUBDIR)/libgfortran/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing mostlyclean in $(TARGET_SUBDIR)/libgfortran" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libgfortran && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           mostlyclean) \
  	  || exit 1
  
+ @endif target-libgfortran
  
! .PHONY: maybe-clean-target-libgfortran clean-target-libgfortran
! maybe-clean-target-libgfortran:
! @if target-libgfortran
! maybe-clean-target-libgfortran: clean-target-libgfortran
  
! clean-target-libgfortran: 
! 	@[ -f $(TARGET_SUBDIR)/libgfortran/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing clean in $(TARGET_SUBDIR)/libgfortran" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libgfortran && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           clean) \
  	  || exit 1
  
+ @endif target-libgfortran
  
! .PHONY: maybe-distclean-target-libgfortran distclean-target-libgfortran
! maybe-distclean-target-libgfortran:
! @if target-libgfortran
! maybe-distclean-target-libgfortran: distclean-target-libgfortran
  
! distclean-target-libgfortran: 
! 	@[ -f $(TARGET_SUBDIR)/libgfortran/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing distclean in $(TARGET_SUBDIR)/libgfortran" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libgfortran && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           distclean) \
  	  || exit 1
  
+ @endif target-libgfortran
  
! .PHONY: maybe-maintainer-clean-target-libgfortran maintainer-clean-target-libgfortran
! maybe-maintainer-clean-target-libgfortran:
! @if target-libgfortran
! maybe-maintainer-clean-target-libgfortran: maintainer-clean-target-libgfortran
  
! maintainer-clean-target-libgfortran: 
! 	@[ -f $(TARGET_SUBDIR)/libgfortran/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libgfortran" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libgfortran && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           maintainer-clean) \
  	  || exit 1
  
+ @endif target-libgfortran
  
  
! .PHONY: configure-target-libobjc maybe-configure-target-libobjc
! maybe-configure-target-libobjc:
! @if target-libobjc
! maybe-configure-target-libobjc: configure-target-libobjc
! 
! # There's only one multilib.out.  Cleverer subdirs shouldn't need it copied.
! $(TARGET_SUBDIR)/libobjc/multilib.out: multilib.out
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libobjc ; \
! 	rm -f $(TARGET_SUBDIR)/libobjc/Makefile || : ; \
! 	cp multilib.out $(TARGET_SUBDIR)/libobjc/multilib.out
! 
! configure-target-libobjc: $(TARGET_SUBDIR)/libobjc/multilib.out
! 	@test ! -f $(TARGET_SUBDIR)/libobjc/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libobjc ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo Configuring in $(TARGET_SUBDIR)/libobjc; \
! 	cd "$(TARGET_SUBDIR)/libobjc" || exit 1; \
! 	case $(srcdir) in \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    topdir=$(srcdir) ;; \
! 	  *) \
! 	    case "$(TARGET_SUBDIR)" in \
! 	      .) topdir="../$(srcdir)" ;; \
! 	      *) topdir="../../$(srcdir)" ;; \
! 	    esac ;; \
! 	esac; \
! 	  srcdiroption="--srcdir=$${topdir}/libobjc"; \
! 	  libsrcdir="$$s/libobjc"; \
! 	rm -f no-such-file || : ; \
! 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
! 	  $(TARGET_CONFIGARGS) $${srcdiroption} \
! 	  --with-target-subdir="$(TARGET_SUBDIR)"  \
! 	  || exit 1
! @endif target-libobjc
! 
! .PHONY: all-target-libobjc maybe-all-target-libobjc
! maybe-all-target-libobjc:
! @if target-libobjc
! TARGET-target-libobjc=all
! maybe-all-target-libobjc: all-target-libobjc
! all-target-libobjc: configure-target-libobjc
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/libobjc && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)   $(TARGET-target-libobjc))
! @endif target-libobjc
! 
! .PHONY: check-target-libobjc maybe-check-target-libobjc
! maybe-check-target-libobjc:
! @if target-libobjc
! maybe-check-target-libobjc: check-target-libobjc
! 
! check-target-libobjc:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/libobjc && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)   check)
! 
! @endif target-libobjc
! 
! .PHONY: install-target-libobjc maybe-install-target-libobjc
! maybe-install-target-libobjc:
! @if target-libobjc
! maybe-install-target-libobjc: install-target-libobjc
! 
! install-target-libobjc: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/libobjc && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  install)
! 
! @endif target-libobjc
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-target-libobjc info-target-libobjc
! maybe-info-target-libobjc:
! @if target-libobjc
! maybe-info-target-libobjc: info-target-libobjc
! 
! info-target-libobjc: \
!     configure-target-libobjc 
! 	@[ -f $(TARGET_SUBDIR)/libobjc/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing info in $(TARGET_SUBDIR)/libobjc" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libobjc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           info) \
  	  || exit 1
  
+ @endif target-libobjc
  
! .PHONY: maybe-dvi-target-libobjc dvi-target-libobjc
! maybe-dvi-target-libobjc:
! @if target-libobjc
! maybe-dvi-target-libobjc: dvi-target-libobjc
  
! dvi-target-libobjc: \
!     configure-target-libobjc 
! 	@[ -f $(TARGET_SUBDIR)/libobjc/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing dvi in $(TARGET_SUBDIR)/libobjc" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libobjc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           dvi) \
  	  || exit 1
  
+ @endif target-libobjc
  
! .PHONY: maybe-html-target-libobjc html-target-libobjc
! maybe-html-target-libobjc:
! @if target-libobjc
! maybe-html-target-libobjc: html-target-libobjc
  
! html-target-libobjc: \
!     configure-target-libobjc 
! 	@[ -f $(TARGET_SUBDIR)/libobjc/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing html in $(TARGET_SUBDIR)/libobjc" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libobjc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           html) \
  	  || exit 1
  
+ @endif target-libobjc
  
! .PHONY: maybe-TAGS-target-libobjc TAGS-target-libobjc
! maybe-TAGS-target-libobjc:
! @if target-libobjc
! maybe-TAGS-target-libobjc: TAGS-target-libobjc
  
! TAGS-target-libobjc: \
!     configure-target-libobjc 
! 	@[ -f $(TARGET_SUBDIR)/libobjc/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing TAGS in $(TARGET_SUBDIR)/libobjc" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libobjc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           TAGS) \
  	  || exit 1
  
+ @endif target-libobjc
  
! .PHONY: maybe-install-info-target-libobjc install-info-target-libobjc
! maybe-install-info-target-libobjc:
! @if target-libobjc
! maybe-install-info-target-libobjc: install-info-target-libobjc
  
! install-info-target-libobjc: \
!     configure-target-libobjc \
!     info-target-libobjc 
! 	@[ -f $(TARGET_SUBDIR)/libobjc/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing install-info in $(TARGET_SUBDIR)/libobjc" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libobjc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           install-info) \
  	  || exit 1
  
+ @endif target-libobjc
  
! .PHONY: maybe-installcheck-target-libobjc installcheck-target-libobjc
! maybe-installcheck-target-libobjc:
! @if target-libobjc
! maybe-installcheck-target-libobjc: installcheck-target-libobjc
  
! installcheck-target-libobjc: \
!     configure-target-libobjc 
! 	@[ -f $(TARGET_SUBDIR)/libobjc/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing installcheck in $(TARGET_SUBDIR)/libobjc" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libobjc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           installcheck) \
  	  || exit 1
  
+ @endif target-libobjc
  
! .PHONY: maybe-mostlyclean-target-libobjc mostlyclean-target-libobjc
! maybe-mostlyclean-target-libobjc:
! @if target-libobjc
! maybe-mostlyclean-target-libobjc: mostlyclean-target-libobjc
  
! mostlyclean-target-libobjc: 
! 	@[ -f $(TARGET_SUBDIR)/libobjc/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing mostlyclean in $(TARGET_SUBDIR)/libobjc" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libobjc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           mostlyclean) \
  	  || exit 1
  
+ @endif target-libobjc
  
! .PHONY: maybe-clean-target-libobjc clean-target-libobjc
! maybe-clean-target-libobjc:
! @if target-libobjc
! maybe-clean-target-libobjc: clean-target-libobjc
  
! clean-target-libobjc: 
! 	@[ -f $(TARGET_SUBDIR)/libobjc/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing clean in $(TARGET_SUBDIR)/libobjc" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libobjc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           clean) \
  	  || exit 1
  
+ @endif target-libobjc
  
! .PHONY: maybe-distclean-target-libobjc distclean-target-libobjc
! maybe-distclean-target-libobjc:
! @if target-libobjc
! maybe-distclean-target-libobjc: distclean-target-libobjc
  
! distclean-target-libobjc: 
! 	@[ -f $(TARGET_SUBDIR)/libobjc/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing distclean in $(TARGET_SUBDIR)/libobjc" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libobjc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           distclean) \
  	  || exit 1
  
+ @endif target-libobjc
  
! .PHONY: maybe-maintainer-clean-target-libobjc maintainer-clean-target-libobjc
! maybe-maintainer-clean-target-libobjc:
! @if target-libobjc
! maybe-maintainer-clean-target-libobjc: maintainer-clean-target-libobjc
  
! maintainer-clean-target-libobjc: 
! 	@[ -f $(TARGET_SUBDIR)/libobjc/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libobjc" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libobjc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           maintainer-clean) \
! 	  || exit 1
! 
! @endif target-libobjc
! 
! 
! .PHONY: configure-target-libtermcap maybe-configure-target-libtermcap
! maybe-configure-target-libtermcap:
! @if target-libtermcap
! maybe-configure-target-libtermcap: configure-target-libtermcap
! 
! # There's only one multilib.out.  Cleverer subdirs shouldn't need it copied.
! $(TARGET_SUBDIR)/libtermcap/multilib.out: multilib.out
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libtermcap ; \
! 	rm -f $(TARGET_SUBDIR)/libtermcap/Makefile || : ; \
! 	cp multilib.out $(TARGET_SUBDIR)/libtermcap/multilib.out
! 
! configure-target-libtermcap: $(TARGET_SUBDIR)/libtermcap/multilib.out
! 	@test ! -f $(TARGET_SUBDIR)/libtermcap/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libtermcap ; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo Configuring in $(TARGET_SUBDIR)/libtermcap; \
! 	cd "$(TARGET_SUBDIR)/libtermcap" || exit 1; \
! 	case $(srcdir) in \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    topdir=$(srcdir) ;; \
! 	  *) \
! 	    case "$(TARGET_SUBDIR)" in \
! 	      .) topdir="../$(srcdir)" ;; \
! 	      *) topdir="../../$(srcdir)" ;; \
! 	    esac ;; \
! 	esac; \
! 	if [ "$(srcdir)" = "." ] ; then \
! 	  if [ "$(TARGET_SUBDIR)" != "." ] ; then \
! 	    if $(SHELL) $$s/symlink-tree $${topdir}/libtermcap "no-such-file" ; then \
! 	      if [ -f Makefile ]; then \
! 	        if $(MAKE) distclean; then \
! 	          true; \
! 	        else \
! 	          exit 1; \
! 	        fi; \
! 	      else \
! 	        true; \
! 	      fi; \
! 	    else \
! 	      exit 1; \
! 	    fi; \
! 	  else \
! 	    true; \
! 	  fi; \
! 	  srcdiroption="--srcdir=."; \
! 	  libsrcdir="."; \
! 	else \
! 	  srcdiroption="--srcdir=$${topdir}/libtermcap"; \
! 	  libsrcdir="$$s/libtermcap"; \
! 	fi; \
! 	rm -f no-such-file || : ; \
! 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
! 	  $(TARGET_CONFIGARGS) $${srcdiroption} \
! 	  --with-target-subdir="$(TARGET_SUBDIR)"  \
  	  || exit 1
+ @endif target-libtermcap
+ 
+ .PHONY: all-target-libtermcap maybe-all-target-libtermcap
+ maybe-all-target-libtermcap:
+ @if target-libtermcap
+ TARGET-target-libtermcap=all
+ maybe-all-target-libtermcap: all-target-libtermcap
+ all-target-libtermcap: configure-target-libtermcap
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(SET_LIB_PATH) \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	(cd $(TARGET_SUBDIR)/libtermcap && \
+ 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)   $(TARGET-target-libtermcap))
+ @endif target-libtermcap
+ 
+ .PHONY: check-target-libtermcap maybe-check-target-libtermcap
+ maybe-check-target-libtermcap:
+ @if target-libtermcap
+ maybe-check-target-libtermcap: check-target-libtermcap
  
+ # Dummy target for uncheckable module.
+ check-target-libtermcap:
  
! @endif target-libtermcap
  
! .PHONY: install-target-libtermcap maybe-install-target-libtermcap
! maybe-install-target-libtermcap:
! @if target-libtermcap
! maybe-install-target-libtermcap: install-target-libtermcap
! 
! install-target-libtermcap: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/libtermcap && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  install)
! 
! @endif target-libtermcap
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-target-libtermcap info-target-libtermcap
! maybe-info-target-libtermcap:
! @if target-libtermcap
! maybe-info-target-libtermcap: info-target-libtermcap
! 
! info-target-libtermcap: \
!     configure-target-libtermcap 
! 	@[ -f $(TARGET_SUBDIR)/libtermcap/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing info in $(TARGET_SUBDIR)/libtermcap" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libtermcap && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           info) \
  	  || exit 1
  
+ @endif target-libtermcap
  
! .PHONY: maybe-dvi-target-libtermcap dvi-target-libtermcap
! maybe-dvi-target-libtermcap:
! @if target-libtermcap
! maybe-dvi-target-libtermcap: dvi-target-libtermcap
  
! dvi-target-libtermcap: \
!     configure-target-libtermcap 
! 	@[ -f $(TARGET_SUBDIR)/libtermcap/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing dvi in $(TARGET_SUBDIR)/libtermcap" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libtermcap && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           dvi) \
  	  || exit 1
  
+ @endif target-libtermcap
  
! .PHONY: maybe-html-target-libtermcap html-target-libtermcap
! maybe-html-target-libtermcap:
! @if target-libtermcap
! maybe-html-target-libtermcap: html-target-libtermcap
  
! html-target-libtermcap: \
!     configure-target-libtermcap 
! 	@[ -f $(TARGET_SUBDIR)/libtermcap/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing html in $(TARGET_SUBDIR)/libtermcap" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libtermcap && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           html) \
  	  || exit 1
  
+ @endif target-libtermcap
  
! .PHONY: maybe-TAGS-target-libtermcap TAGS-target-libtermcap
! maybe-TAGS-target-libtermcap:
! @if target-libtermcap
! maybe-TAGS-target-libtermcap: TAGS-target-libtermcap
  
! TAGS-target-libtermcap: \
!     configure-target-libtermcap 
! 	@[ -f $(TARGET_SUBDIR)/libtermcap/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing TAGS in $(TARGET_SUBDIR)/libtermcap" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libtermcap && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           TAGS) \
  	  || exit 1
  
+ @endif target-libtermcap
  
! .PHONY: maybe-install-info-target-libtermcap install-info-target-libtermcap
! maybe-install-info-target-libtermcap:
! @if target-libtermcap
! maybe-install-info-target-libtermcap: install-info-target-libtermcap
  
! install-info-target-libtermcap: \
!     configure-target-libtermcap \
!     info-target-libtermcap 
! 	@[ -f $(TARGET_SUBDIR)/libtermcap/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing install-info in $(TARGET_SUBDIR)/libtermcap" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libtermcap && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           install-info) \
  	  || exit 1
  
+ @endif target-libtermcap
  
! .PHONY: maybe-installcheck-target-libtermcap installcheck-target-libtermcap
! maybe-installcheck-target-libtermcap:
! @if target-libtermcap
! maybe-installcheck-target-libtermcap: installcheck-target-libtermcap
  
! installcheck-target-libtermcap: \
!     configure-target-libtermcap 
! 	@[ -f $(TARGET_SUBDIR)/libtermcap/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing installcheck in $(TARGET_SUBDIR)/libtermcap" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libtermcap && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           installcheck) \
  	  || exit 1
  
+ @endif target-libtermcap
  
! .PHONY: maybe-mostlyclean-target-libtermcap mostlyclean-target-libtermcap
! maybe-mostlyclean-target-libtermcap:
! @if target-libtermcap
! maybe-mostlyclean-target-libtermcap: mostlyclean-target-libtermcap
  
! # libtermcap doesn't support mostlyclean.
! mostlyclean-target-libtermcap:
! 
! @endif target-libtermcap
! 
! .PHONY: maybe-clean-target-libtermcap clean-target-libtermcap
! maybe-clean-target-libtermcap:
! @if target-libtermcap
! maybe-clean-target-libtermcap: clean-target-libtermcap
! 
! # libtermcap doesn't support clean.
! clean-target-libtermcap:
! 
! @endif target-libtermcap
! 
! .PHONY: maybe-distclean-target-libtermcap distclean-target-libtermcap
! maybe-distclean-target-libtermcap:
! @if target-libtermcap
! maybe-distclean-target-libtermcap: distclean-target-libtermcap
! 
! # libtermcap doesn't support distclean.
! distclean-target-libtermcap:
! 
! @endif target-libtermcap
! 
! .PHONY: maybe-maintainer-clean-target-libtermcap maintainer-clean-target-libtermcap
! maybe-maintainer-clean-target-libtermcap:
! @if target-libtermcap
! maybe-maintainer-clean-target-libtermcap: maintainer-clean-target-libtermcap
! 
! # libtermcap doesn't support maintainer-clean.
! maintainer-clean-target-libtermcap:
! 
! @endif target-libtermcap
! 
! 
! .PHONY: configure-target-winsup maybe-configure-target-winsup
! maybe-configure-target-winsup:
! @if target-winsup
! maybe-configure-target-winsup: configure-target-winsup
! 
! # There's only one multilib.out.  Cleverer subdirs shouldn't need it copied.
! $(TARGET_SUBDIR)/winsup/multilib.out: multilib.out
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/winsup ; \
! 	rm -f $(TARGET_SUBDIR)/winsup/Makefile || : ; \
! 	cp multilib.out $(TARGET_SUBDIR)/winsup/multilib.out
! 
! configure-target-winsup: $(TARGET_SUBDIR)/winsup/multilib.out
! 	@test ! -f $(TARGET_SUBDIR)/winsup/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/winsup ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo Configuring in $(TARGET_SUBDIR)/winsup; \
! 	cd "$(TARGET_SUBDIR)/winsup" || exit 1; \
! 	case $(srcdir) in \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    topdir=$(srcdir) ;; \
! 	  *) \
! 	    case "$(TARGET_SUBDIR)" in \
! 	      .) topdir="../$(srcdir)" ;; \
! 	      *) topdir="../../$(srcdir)" ;; \
! 	    esac ;; \
! 	esac; \
! 	  srcdiroption="--srcdir=$${topdir}/winsup"; \
! 	  libsrcdir="$$s/winsup"; \
! 	rm -f no-such-file || : ; \
! 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
! 	  $(TARGET_CONFIGARGS) $${srcdiroption} \
! 	  --with-target-subdir="$(TARGET_SUBDIR)"  \
! 	  || exit 1
! @endif target-winsup
! 
! .PHONY: all-target-winsup maybe-all-target-winsup
! maybe-all-target-winsup:
! @if target-winsup
! TARGET-target-winsup=all
! maybe-all-target-winsup: all-target-winsup
! all-target-winsup: configure-target-winsup
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/winsup && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)   $(TARGET-target-winsup))
! @endif target-winsup
! 
! .PHONY: check-target-winsup maybe-check-target-winsup
! maybe-check-target-winsup:
! @if target-winsup
! maybe-check-target-winsup: check-target-winsup
! 
! check-target-winsup:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/winsup && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)   check)
! 
! @endif target-winsup
! 
! .PHONY: install-target-winsup maybe-install-target-winsup
! maybe-install-target-winsup:
! @if target-winsup
! maybe-install-target-winsup: install-target-winsup
! 
! install-target-winsup: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/winsup && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  install)
! 
! @endif target-winsup
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-target-winsup info-target-winsup
! maybe-info-target-winsup:
! @if target-winsup
! maybe-info-target-winsup: info-target-winsup
! 
! info-target-winsup: \
!     configure-target-winsup 
! 	@[ -f $(TARGET_SUBDIR)/winsup/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing info in $(TARGET_SUBDIR)/winsup" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/winsup && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           info) \
  	  || exit 1
  
+ @endif target-winsup
  
! .PHONY: maybe-dvi-target-winsup dvi-target-winsup
! maybe-dvi-target-winsup:
! @if target-winsup
! maybe-dvi-target-winsup: dvi-target-winsup
  
! dvi-target-winsup: \
!     configure-target-winsup 
! 	@[ -f $(TARGET_SUBDIR)/winsup/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing dvi in $(TARGET_SUBDIR)/winsup" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/winsup && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           dvi) \
  	  || exit 1
  
+ @endif target-winsup
  
! .PHONY: maybe-html-target-winsup html-target-winsup
! maybe-html-target-winsup:
! @if target-winsup
! maybe-html-target-winsup: html-target-winsup
  
! html-target-winsup: \
!     configure-target-winsup 
! 	@[ -f $(TARGET_SUBDIR)/winsup/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing html in $(TARGET_SUBDIR)/winsup" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/winsup && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           html) \
  	  || exit 1
  
+ @endif target-winsup
  
! .PHONY: maybe-TAGS-target-winsup TAGS-target-winsup
! maybe-TAGS-target-winsup:
! @if target-winsup
! maybe-TAGS-target-winsup: TAGS-target-winsup
  
! TAGS-target-winsup: \
!     configure-target-winsup 
! 	@[ -f $(TARGET_SUBDIR)/winsup/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing TAGS in $(TARGET_SUBDIR)/winsup" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/winsup && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           TAGS) \
  	  || exit 1
  
+ @endif target-winsup
  
! .PHONY: maybe-install-info-target-winsup install-info-target-winsup
! maybe-install-info-target-winsup:
! @if target-winsup
! maybe-install-info-target-winsup: install-info-target-winsup
  
! install-info-target-winsup: \
!     configure-target-winsup \
!     info-target-winsup 
! 	@[ -f $(TARGET_SUBDIR)/winsup/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing install-info in $(TARGET_SUBDIR)/winsup" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/winsup && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           install-info) \
  	  || exit 1
  
+ @endif target-winsup
  
! .PHONY: maybe-installcheck-target-winsup installcheck-target-winsup
! maybe-installcheck-target-winsup:
! @if target-winsup
! maybe-installcheck-target-winsup: installcheck-target-winsup
  
! installcheck-target-winsup: \
!     configure-target-winsup 
! 	@[ -f $(TARGET_SUBDIR)/winsup/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing installcheck in $(TARGET_SUBDIR)/winsup" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/winsup && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           installcheck) \
  	  || exit 1
  
+ @endif target-winsup
  
! .PHONY: maybe-mostlyclean-target-winsup mostlyclean-target-winsup
! maybe-mostlyclean-target-winsup:
! @if target-winsup
! maybe-mostlyclean-target-winsup: mostlyclean-target-winsup
  
! mostlyclean-target-winsup: 
! 	@[ -f $(TARGET_SUBDIR)/winsup/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing mostlyclean in $(TARGET_SUBDIR)/winsup" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/winsup && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           mostlyclean) \
  	  || exit 1
  
+ @endif target-winsup
  
! .PHONY: maybe-clean-target-winsup clean-target-winsup
! maybe-clean-target-winsup:
! @if target-winsup
! maybe-clean-target-winsup: clean-target-winsup
  
! clean-target-winsup: 
! 	@[ -f $(TARGET_SUBDIR)/winsup/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing clean in $(TARGET_SUBDIR)/winsup" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/winsup && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           clean) \
  	  || exit 1
  
+ @endif target-winsup
  
! .PHONY: maybe-distclean-target-winsup distclean-target-winsup
! maybe-distclean-target-winsup:
! @if target-winsup
! maybe-distclean-target-winsup: distclean-target-winsup
  
! distclean-target-winsup: 
! 	@[ -f $(TARGET_SUBDIR)/winsup/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing distclean in $(TARGET_SUBDIR)/winsup" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/winsup && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           distclean) \
  	  || exit 1
  
+ @endif target-winsup
  
! .PHONY: maybe-maintainer-clean-target-winsup maintainer-clean-target-winsup
! maybe-maintainer-clean-target-winsup:
! @if target-winsup
! maybe-maintainer-clean-target-winsup: maintainer-clean-target-winsup
  
! maintainer-clean-target-winsup: 
! 	@[ -f $(TARGET_SUBDIR)/winsup/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing maintainer-clean in $(TARGET_SUBDIR)/winsup" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/winsup && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           maintainer-clean) \
  	  || exit 1
  
+ @endif target-winsup
  
  
! .PHONY: configure-target-libgloss maybe-configure-target-libgloss
! maybe-configure-target-libgloss:
! @if target-libgloss
! maybe-configure-target-libgloss: configure-target-libgloss
! 
! # There's only one multilib.out.  Cleverer subdirs shouldn't need it copied.
! $(TARGET_SUBDIR)/libgloss/multilib.out: multilib.out
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgloss ; \
! 	rm -f $(TARGET_SUBDIR)/libgloss/Makefile || : ; \
! 	cp multilib.out $(TARGET_SUBDIR)/libgloss/multilib.out
! 
! configure-target-libgloss: $(TARGET_SUBDIR)/libgloss/multilib.out
! 	@test ! -f $(TARGET_SUBDIR)/libgloss/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgloss ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo Configuring in $(TARGET_SUBDIR)/libgloss; \
! 	cd "$(TARGET_SUBDIR)/libgloss" || exit 1; \
! 	case $(srcdir) in \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    topdir=$(srcdir) ;; \
! 	  *) \
! 	    case "$(TARGET_SUBDIR)" in \
! 	      .) topdir="../$(srcdir)" ;; \
! 	      *) topdir="../../$(srcdir)" ;; \
! 	    esac ;; \
! 	esac; \
! 	  srcdiroption="--srcdir=$${topdir}/libgloss"; \
! 	  libsrcdir="$$s/libgloss"; \
! 	rm -f no-such-file || : ; \
! 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
! 	  $(TARGET_CONFIGARGS) $${srcdiroption} \
! 	  --with-target-subdir="$(TARGET_SUBDIR)"  \
! 	  || exit 1
! @endif target-libgloss
! 
! .PHONY: all-target-libgloss maybe-all-target-libgloss
! maybe-all-target-libgloss:
! @if target-libgloss
! TARGET-target-libgloss=all
! maybe-all-target-libgloss: all-target-libgloss
! all-target-libgloss: configure-target-libgloss
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/libgloss && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)   $(TARGET-target-libgloss))
! @endif target-libgloss
! 
! .PHONY: check-target-libgloss maybe-check-target-libgloss
! maybe-check-target-libgloss:
! @if target-libgloss
! maybe-check-target-libgloss: check-target-libgloss
! 
! # Dummy target for uncheckable module.
! check-target-libgloss:
! 
! @endif target-libgloss
! 
! .PHONY: install-target-libgloss maybe-install-target-libgloss
! maybe-install-target-libgloss:
! @if target-libgloss
! maybe-install-target-libgloss: install-target-libgloss
! 
! install-target-libgloss: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/libgloss && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  install)
! 
! @endif target-libgloss
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-target-libgloss info-target-libgloss
! maybe-info-target-libgloss:
! @if target-libgloss
! maybe-info-target-libgloss: info-target-libgloss
! 
! info-target-libgloss: \
!     configure-target-libgloss 
! 	@[ -f $(TARGET_SUBDIR)/libgloss/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing info in $(TARGET_SUBDIR)/libgloss" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libgloss && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           info) \
  	  || exit 1
  
+ @endif target-libgloss
  
! .PHONY: maybe-dvi-target-libgloss dvi-target-libgloss
! maybe-dvi-target-libgloss:
! @if target-libgloss
! maybe-dvi-target-libgloss: dvi-target-libgloss
  
! dvi-target-libgloss: \
!     configure-target-libgloss 
! 	@[ -f $(TARGET_SUBDIR)/libgloss/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing dvi in $(TARGET_SUBDIR)/libgloss" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libgloss && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           dvi) \
  	  || exit 1
  
+ @endif target-libgloss
  
! .PHONY: maybe-html-target-libgloss html-target-libgloss
! maybe-html-target-libgloss:
! @if target-libgloss
! maybe-html-target-libgloss: html-target-libgloss
  
! html-target-libgloss: \
!     configure-target-libgloss 
! 	@[ -f $(TARGET_SUBDIR)/libgloss/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing html in $(TARGET_SUBDIR)/libgloss" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libgloss && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           html) \
  	  || exit 1
  
+ @endif target-libgloss
  
! .PHONY: maybe-TAGS-target-libgloss TAGS-target-libgloss
! maybe-TAGS-target-libgloss:
! @if target-libgloss
! maybe-TAGS-target-libgloss: TAGS-target-libgloss
  
! TAGS-target-libgloss: \
!     configure-target-libgloss 
! 	@[ -f $(TARGET_SUBDIR)/libgloss/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing TAGS in $(TARGET_SUBDIR)/libgloss" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libgloss && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           TAGS) \
  	  || exit 1
  
+ @endif target-libgloss
  
! .PHONY: maybe-install-info-target-libgloss install-info-target-libgloss
! maybe-install-info-target-libgloss:
! @if target-libgloss
! maybe-install-info-target-libgloss: install-info-target-libgloss
  
! install-info-target-libgloss: \
!     configure-target-libgloss \
!     info-target-libgloss 
! 	@[ -f $(TARGET_SUBDIR)/libgloss/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing install-info in $(TARGET_SUBDIR)/libgloss" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libgloss && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           install-info) \
  	  || exit 1
  
+ @endif target-libgloss
  
! .PHONY: maybe-installcheck-target-libgloss installcheck-target-libgloss
! maybe-installcheck-target-libgloss:
! @if target-libgloss
! maybe-installcheck-target-libgloss: installcheck-target-libgloss
  
! installcheck-target-libgloss: \
!     configure-target-libgloss 
! 	@[ -f $(TARGET_SUBDIR)/libgloss/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing installcheck in $(TARGET_SUBDIR)/libgloss" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libgloss && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           installcheck) \
  	  || exit 1
  
+ @endif target-libgloss
  
! .PHONY: maybe-mostlyclean-target-libgloss mostlyclean-target-libgloss
! maybe-mostlyclean-target-libgloss:
! @if target-libgloss
! maybe-mostlyclean-target-libgloss: mostlyclean-target-libgloss
  
! mostlyclean-target-libgloss: 
! 	@[ -f $(TARGET_SUBDIR)/libgloss/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing mostlyclean in $(TARGET_SUBDIR)/libgloss" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libgloss && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           mostlyclean) \
  	  || exit 1
  
+ @endif target-libgloss
  
! .PHONY: maybe-clean-target-libgloss clean-target-libgloss
! maybe-clean-target-libgloss:
! @if target-libgloss
! maybe-clean-target-libgloss: clean-target-libgloss
  
! clean-target-libgloss: 
! 	@[ -f $(TARGET_SUBDIR)/libgloss/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing clean in $(TARGET_SUBDIR)/libgloss" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libgloss && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           clean) \
  	  || exit 1
  
+ @endif target-libgloss
  
! .PHONY: maybe-distclean-target-libgloss distclean-target-libgloss
! maybe-distclean-target-libgloss:
! @if target-libgloss
! maybe-distclean-target-libgloss: distclean-target-libgloss
  
! distclean-target-libgloss: 
! 	@[ -f $(TARGET_SUBDIR)/libgloss/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing distclean in $(TARGET_SUBDIR)/libgloss" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libgloss && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           distclean) \
  	  || exit 1
  
+ @endif target-libgloss
  
! .PHONY: maybe-maintainer-clean-target-libgloss maintainer-clean-target-libgloss
! maybe-maintainer-clean-target-libgloss:
! @if target-libgloss
! maybe-maintainer-clean-target-libgloss: maintainer-clean-target-libgloss
  
! maintainer-clean-target-libgloss: 
! 	@[ -f $(TARGET_SUBDIR)/libgloss/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libgloss" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libgloss && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           maintainer-clean) \
  	  || exit 1
  
+ @endif target-libgloss
  
  
! .PHONY: configure-target-libiberty maybe-configure-target-libiberty
! maybe-configure-target-libiberty:
! @if target-libiberty
! maybe-configure-target-libiberty: configure-target-libiberty
! 
! # There's only one multilib.out.  Cleverer subdirs shouldn't need it copied.
! $(TARGET_SUBDIR)/libiberty/multilib.out: multilib.out
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libiberty ; \
! 	rm -f $(TARGET_SUBDIR)/libiberty/Makefile || : ; \
! 	cp multilib.out $(TARGET_SUBDIR)/libiberty/multilib.out
! 
! configure-target-libiberty: $(TARGET_SUBDIR)/libiberty/multilib.out
! 	@test ! -f $(TARGET_SUBDIR)/libiberty/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libiberty ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo Configuring in $(TARGET_SUBDIR)/libiberty; \
! 	cd "$(TARGET_SUBDIR)/libiberty" || exit 1; \
! 	case $(srcdir) in \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    topdir=$(srcdir) ;; \
! 	  *) \
! 	    case "$(TARGET_SUBDIR)" in \
! 	      .) topdir="../$(srcdir)" ;; \
! 	      *) topdir="../../$(srcdir)" ;; \
! 	    esac ;; \
! 	esac; \
! 	  srcdiroption="--srcdir=$${topdir}/libiberty"; \
! 	  libsrcdir="$$s/libiberty"; \
! 	rm -f no-such-file || : ; \
! 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
! 	  $(TARGET_CONFIGARGS) $${srcdiroption} \
! 	  --with-target-subdir="$(TARGET_SUBDIR)"  \
! 	  || exit 1
! @endif target-libiberty
! 
! .PHONY: all-target-libiberty maybe-all-target-libiberty
! maybe-all-target-libiberty:
! @if target-libiberty
! TARGET-target-libiberty=all
! maybe-all-target-libiberty: all-target-libiberty
! all-target-libiberty: configure-target-libiberty
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/libiberty && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)   $(TARGET-target-libiberty))
! @endif target-libiberty
! 
! .PHONY: check-target-libiberty maybe-check-target-libiberty
! maybe-check-target-libiberty:
! @if target-libiberty
! maybe-check-target-libiberty: check-target-libiberty
! 
! check-target-libiberty:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/libiberty && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)   check)
! 
! @endif target-libiberty
! 
! .PHONY: install-target-libiberty maybe-install-target-libiberty
! maybe-install-target-libiberty:
! @if target-libiberty
! maybe-install-target-libiberty: install-target-libiberty
! 
! install-target-libiberty: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/libiberty && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  install)
! 
! @endif target-libiberty
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-target-libiberty info-target-libiberty
! maybe-info-target-libiberty:
! @if target-libiberty
! maybe-info-target-libiberty: info-target-libiberty
! 
! info-target-libiberty: \
!     configure-target-libiberty 
! 	@[ -f $(TARGET_SUBDIR)/libiberty/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing info in $(TARGET_SUBDIR)/libiberty" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libiberty && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           info) \
  	  || exit 1
  
+ @endif target-libiberty
  
! .PHONY: maybe-dvi-target-libiberty dvi-target-libiberty
! maybe-dvi-target-libiberty:
! @if target-libiberty
! maybe-dvi-target-libiberty: dvi-target-libiberty
  
! dvi-target-libiberty: \
!     configure-target-libiberty 
! 	@[ -f $(TARGET_SUBDIR)/libiberty/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing dvi in $(TARGET_SUBDIR)/libiberty" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libiberty && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           dvi) \
  	  || exit 1
  
+ @endif target-libiberty
  
! .PHONY: maybe-html-target-libiberty html-target-libiberty
! maybe-html-target-libiberty:
! @if target-libiberty
! maybe-html-target-libiberty: html-target-libiberty
  
! html-target-libiberty: \
!     configure-target-libiberty 
! 	@[ -f $(TARGET_SUBDIR)/libiberty/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing html in $(TARGET_SUBDIR)/libiberty" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libiberty && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           html) \
  	  || exit 1
  
+ @endif target-libiberty
  
! .PHONY: maybe-TAGS-target-libiberty TAGS-target-libiberty
! maybe-TAGS-target-libiberty:
! @if target-libiberty
! maybe-TAGS-target-libiberty: TAGS-target-libiberty
  
! TAGS-target-libiberty: \
!     configure-target-libiberty 
! 	@[ -f $(TARGET_SUBDIR)/libiberty/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing TAGS in $(TARGET_SUBDIR)/libiberty" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libiberty && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           TAGS) \
  	  || exit 1
  
+ @endif target-libiberty
  
! .PHONY: maybe-install-info-target-libiberty install-info-target-libiberty
! maybe-install-info-target-libiberty:
! @if target-libiberty
! maybe-install-info-target-libiberty: install-info-target-libiberty
  
! install-info-target-libiberty: \
!     configure-target-libiberty \
!     info-target-libiberty 
! 	@[ -f $(TARGET_SUBDIR)/libiberty/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing install-info in $(TARGET_SUBDIR)/libiberty" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libiberty && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           install-info) \
! 	  || exit 1
  
+ @endif target-libiberty
  
! .PHONY: maybe-installcheck-target-libiberty installcheck-target-libiberty
! maybe-installcheck-target-libiberty:
! @if target-libiberty
! maybe-installcheck-target-libiberty: installcheck-target-libiberty
  
! installcheck-target-libiberty: \
!     configure-target-libiberty 
! 	@[ -f $(TARGET_SUBDIR)/libiberty/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing installcheck in $(TARGET_SUBDIR)/libiberty" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libiberty && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           installcheck) \
  	  || exit 1
  
+ @endif target-libiberty
  
+ .PHONY: maybe-mostlyclean-target-libiberty mostlyclean-target-libiberty
+ maybe-mostlyclean-target-libiberty:
+ @if target-libiberty
+ maybe-mostlyclean-target-libiberty: mostlyclean-target-libiberty
  
! mostlyclean-target-libiberty: 
! 	@[ -f $(TARGET_SUBDIR)/libiberty/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing mostlyclean in $(TARGET_SUBDIR)/libiberty" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libiberty && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           mostlyclean) \
  	  || exit 1
  
+ @endif target-libiberty
  
! .PHONY: maybe-clean-target-libiberty clean-target-libiberty
! maybe-clean-target-libiberty:
! @if target-libiberty
! maybe-clean-target-libiberty: clean-target-libiberty
  
! clean-target-libiberty: 
! 	@[ -f $(TARGET_SUBDIR)/libiberty/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing clean in $(TARGET_SUBDIR)/libiberty" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libiberty && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           clean) \
  	  || exit 1
  
+ @endif target-libiberty
  
! .PHONY: maybe-distclean-target-libiberty distclean-target-libiberty
! maybe-distclean-target-libiberty:
! @if target-libiberty
! maybe-distclean-target-libiberty: distclean-target-libiberty
  
! distclean-target-libiberty: 
! 	@[ -f $(TARGET_SUBDIR)/libiberty/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing distclean in $(TARGET_SUBDIR)/libiberty" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libiberty && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           distclean) \
  	  || exit 1
  
+ @endif target-libiberty
  
! .PHONY: maybe-maintainer-clean-target-libiberty maintainer-clean-target-libiberty
! maybe-maintainer-clean-target-libiberty:
! @if target-libiberty
! maybe-maintainer-clean-target-libiberty: maintainer-clean-target-libiberty
  
! maintainer-clean-target-libiberty: 
! 	@[ -f $(TARGET_SUBDIR)/libiberty/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libiberty" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libiberty && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           maintainer-clean) \
  	  || exit 1
  
+ @endif target-libiberty
  
  
! .PHONY: configure-target-gperf maybe-configure-target-gperf
! maybe-configure-target-gperf:
! @if target-gperf
! maybe-configure-target-gperf: configure-target-gperf
  
+ # There's only one multilib.out.  Cleverer subdirs shouldn't need it copied.
+ $(TARGET_SUBDIR)/gperf/multilib.out: multilib.out
+ 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/gperf ; \
+ 	rm -f $(TARGET_SUBDIR)/gperf/Makefile || : ; \
+ 	cp multilib.out $(TARGET_SUBDIR)/gperf/multilib.out
  
! configure-target-gperf: $(TARGET_SUBDIR)/gperf/multilib.out
! 	@test ! -f $(TARGET_SUBDIR)/gperf/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/gperf ; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo Configuring in $(TARGET_SUBDIR)/gperf; \
! 	cd "$(TARGET_SUBDIR)/gperf" || exit 1; \
! 	case $(srcdir) in \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    topdir=$(srcdir) ;; \
! 	  *) \
! 	    case "$(TARGET_SUBDIR)" in \
! 	      .) topdir="../$(srcdir)" ;; \
! 	      *) topdir="../../$(srcdir)" ;; \
! 	    esac ;; \
! 	esac; \
! 	  srcdiroption="--srcdir=$${topdir}/gperf"; \
! 	  libsrcdir="$$s/gperf"; \
! 	rm -f no-such-file || : ; \
! 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
! 	  $(TARGET_CONFIGARGS) $${srcdiroption} \
! 	  --with-target-subdir="$(TARGET_SUBDIR)"  \
! 	  || exit 1
! @endif target-gperf
  
! .PHONY: all-target-gperf maybe-all-target-gperf
! maybe-all-target-gperf:
! @if target-gperf
! TARGET-target-gperf=all
! maybe-all-target-gperf: all-target-gperf
! all-target-gperf: configure-target-gperf
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/gperf && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)   $(TARGET-target-gperf))
! @endif target-gperf
! 
! .PHONY: check-target-gperf maybe-check-target-gperf
! maybe-check-target-gperf:
! @if target-gperf
! maybe-check-target-gperf: check-target-gperf
! 
! check-target-gperf:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/gperf && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)   check)
! 
! @endif target-gperf
! 
! .PHONY: install-target-gperf maybe-install-target-gperf
! maybe-install-target-gperf:
! @if target-gperf
! maybe-install-target-gperf: install-target-gperf
! 
! install-target-gperf: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/gperf && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  install)
! 
! @endif target-gperf
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-target-gperf info-target-gperf
! maybe-info-target-gperf:
! @if target-gperf
! maybe-info-target-gperf: info-target-gperf
! 
! info-target-gperf: \
!     configure-target-gperf 
! 	@[ -f $(TARGET_SUBDIR)/gperf/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing info in $(TARGET_SUBDIR)/gperf" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/gperf && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           info) \
  	  || exit 1
  
+ @endif target-gperf
  
! .PHONY: maybe-dvi-target-gperf dvi-target-gperf
! maybe-dvi-target-gperf:
! @if target-gperf
! maybe-dvi-target-gperf: dvi-target-gperf
  
! dvi-target-gperf: \
!     configure-target-gperf 
! 	@[ -f $(TARGET_SUBDIR)/gperf/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing dvi in $(TARGET_SUBDIR)/gperf" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/gperf && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           dvi) \
  	  || exit 1
  
+ @endif target-gperf
  
! .PHONY: maybe-html-target-gperf html-target-gperf
! maybe-html-target-gperf:
! @if target-gperf
! maybe-html-target-gperf: html-target-gperf
  
! html-target-gperf: \
!     configure-target-gperf 
! 	@[ -f $(TARGET_SUBDIR)/gperf/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing html in $(TARGET_SUBDIR)/gperf" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/gperf && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           html) \
  	  || exit 1
  
+ @endif target-gperf
  
! .PHONY: maybe-TAGS-target-gperf TAGS-target-gperf
! maybe-TAGS-target-gperf:
! @if target-gperf
! maybe-TAGS-target-gperf: TAGS-target-gperf
  
! TAGS-target-gperf: \
!     configure-target-gperf 
  	@[ -f $(TARGET_SUBDIR)/gperf/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing TAGS in $(TARGET_SUBDIR)/gperf" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
*************** maintainer-clean-target-gperf: 
*** 17071,19719 ****
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-target-examples maintainer-clean-target-examples
! maybe-maintainer-clean-target-examples:
  
! maintainer-clean-target-examples: 
! 	@[ -f $(TARGET_SUBDIR)/examples/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing maintainer-clean in $(TARGET_SUBDIR)/examples" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/examples && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-target-libffi maintainer-clean-target-libffi
! maybe-maintainer-clean-target-libffi:
  
! maintainer-clean-target-libffi: 
! 	@[ -f $(TARGET_SUBDIR)/libffi/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libffi" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libffi && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-target-libjava maintainer-clean-target-libjava
! maybe-maintainer-clean-target-libjava:
  
! maintainer-clean-target-libjava: 
! 	@[ -f $(TARGET_SUBDIR)/libjava/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libjava" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/libjava && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-target-zlib maintainer-clean-target-zlib
! maybe-maintainer-clean-target-zlib:
  
! maintainer-clean-target-zlib: 
! 	@[ -f $(TARGET_SUBDIR)/zlib/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing maintainer-clean in $(TARGET_SUBDIR)/zlib" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/zlib && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-target-boehm-gc maintainer-clean-target-boehm-gc
! maybe-maintainer-clean-target-boehm-gc:
  
! maintainer-clean-target-boehm-gc: 
! 	@[ -f $(TARGET_SUBDIR)/boehm-gc/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing maintainer-clean in $(TARGET_SUBDIR)/boehm-gc" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/boehm-gc && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
! .PHONY: maybe-maintainer-clean-target-qthreads maintainer-clean-target-qthreads
! maybe-maintainer-clean-target-qthreads:
  
! maintainer-clean-target-qthreads: 
! 	@[ -f $(TARGET_SUBDIR)/qthreads/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing maintainer-clean in $(TARGET_SUBDIR)/qthreads" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/qthreads && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
- .PHONY: maybe-maintainer-clean-target-rda maintainer-clean-target-rda
- maybe-maintainer-clean-target-rda:
  
! maintainer-clean-target-rda: 
! 	@[ -f $(TARGET_SUBDIR)/rda/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Doing maintainer-clean in $(TARGET_SUBDIR)/rda" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/rda && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	          maintainer-clean) \
  	  || exit 1
  
  
  
  
! # Here are the targets which correspond to the do-X targets.
! 
! .PHONY: info installcheck dvi install-info
! .PHONY: clean distclean mostlyclean maintainer-clean realclean
! .PHONY: local-clean local-distclean local-maintainer-clean
! info: do-info
! installcheck: do-installcheck
! dvi: do-dvi
  
! # Make sure makeinfo is built before we do a `make info', if we're
! # in fact building texinfo.
! do-info: maybe-all-texinfo
  
! install-info: do-install-info dir.info
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	if [ -f dir.info ] ; then \
! 	  $(INSTALL_DATA) dir.info $(DESTDIR)$(infodir)/dir.info ; \
! 	else true ; fi
! 
! local-clean:
! 	-rm -f *.a TEMP errs core *.o *~ \#* TAGS *.E *.log
! 
! local-distclean:
! 	-rm -f Makefile config.status config.cache mh-frag mt-frag
! 	-rm -f multilib.out multilib.tmp maybedep.tmp serdep.tmp
! 	-if [ "$(TARGET_SUBDIR)" != "." ]; then \
! 	  rm -rf $(TARGET_SUBDIR); \
! 	else true; fi
! 	-rm -rf $(BUILD_SUBDIR)
! 	-rm -f texinfo/po/Makefile texinfo/po/Makefile.in texinfo/info/Makefile
! 	-rm -f texinfo/doc/Makefile texinfo/po/POTFILES
! 	-rmdir texinfo/doc texinfo/info texinfo/intl texinfo/lib 2>/dev/null
! 	-rmdir texinfo/makeinfo texinfo/po texinfo/util 2>/dev/null
! 	-rmdir fastjar gcc libiberty texinfo zlib 2>/dev/null
  
! local-maintainer-clean:
! 	@echo "This command is intended for maintainers to use;"
! 	@echo "it deletes files that may require special tools to rebuild."
  
! clean: do-clean local-clean
! mostlyclean: do-mostlyclean local-clean
! distclean: do-distclean local-clean local-distclean
! maintainer-clean: local-maintainer-clean do-maintainer-clean local-clean 
! maintainer-clean: local-distclean
! realclean: maintainer-clean
  
! # Extra dependency for clean-target, owing to the mixed nature of gcc
! clean-target: clean-target-libgcc
! clean-target-libgcc:
! 	test ! -d gcc/libgcc || \
! 	(cd gcc/libgcc && find . -type d -print) | \
! 	while read d; do rm -f gcc/$$d/libgcc.a || : ; done
! 	-rm -rf gcc/libgcc
  
! # Check target.
  
! .PHONY: check do-check
! check: do-check
  
! # Only include modules actually being configured and built.
! do-check: maybe-check-gcc  \
!     maybe-check-ash \
!     maybe-check-autoconf \
!     maybe-check-automake \
!     maybe-check-bash \
!     maybe-check-bfd \
!     maybe-check-opcodes \
!     maybe-check-binutils \
!     maybe-check-bison \
!     maybe-check-byacc \
!     maybe-check-bzip2 \
!     maybe-check-dejagnu \
!     maybe-check-diff \
!     maybe-check-dosutils \
!     maybe-check-etc \
!     maybe-check-fastjar \
!     maybe-check-fileutils \
!     maybe-check-findutils \
!     maybe-check-find \
!     maybe-check-flex \
!     maybe-check-gas \
!     maybe-check-gawk \
!     maybe-check-gettext \
!     maybe-check-gnuserv \
!     maybe-check-gprof \
!     maybe-check-gzip \
!     maybe-check-hello \
!     maybe-check-indent \
!     maybe-check-intl \
!     maybe-check-tcl \
!     maybe-check-itcl \
!     maybe-check-ld \
!     maybe-check-libgui \
!     maybe-check-libiberty \
!     maybe-check-libtool \
!     maybe-check-m4 \
!     maybe-check-make \
!     maybe-check-mmalloc \
!     maybe-check-patch \
!     maybe-check-perl \
!     maybe-check-prms \
!     maybe-check-rcs \
!     maybe-check-readline \
!     maybe-check-release \
!     maybe-check-recode \
!     maybe-check-sed \
!     maybe-check-send-pr \
!     maybe-check-shellutils \
!     maybe-check-sid \
!     maybe-check-sim \
!     maybe-check-tar \
!     maybe-check-texinfo \
!     maybe-check-textutils \
!     maybe-check-time \
!     maybe-check-uudecode \
!     maybe-check-wdiff \
!     maybe-check-zip \
!     maybe-check-zlib \
!     maybe-check-gdb \
!     maybe-check-expect \
!     maybe-check-guile \
!     maybe-check-tk \
!     maybe-check-tix \
!     maybe-check-libtermcap \
!     maybe-check-utils \
!     maybe-check-target-libstdc++-v3 \
!     maybe-check-target-newlib \
!     maybe-check-target-libf2c \
!     maybe-check-target-libobjc \
!     maybe-check-target-libtermcap \
!     maybe-check-target-winsup \
!     maybe-check-target-libgloss \
!     maybe-check-target-libiberty \
!     maybe-check-target-gperf \
!     maybe-check-target-examples \
!     maybe-check-target-libffi \
!     maybe-check-target-libjava \
!     maybe-check-target-zlib \
!     maybe-check-target-boehm-gc \
!     maybe-check-target-qthreads \
!     maybe-check-target-rda
  
! # Automated reporting of test results.
  
! warning.log: build.log
! 	$(srcdir)/contrib/warn_summary build.log > $@
  
! mail-report.log:
! 	if test x'$(BOOT_CFLAGS)' != x''; then \
! 	    BOOT_CFLAGS='$(BOOT_CFLAGS)'; export BOOT_CFLAGS; \
! 	fi; \
! 	$(srcdir)/contrib/test_summary -t >$@
! 	chmod +x $@
! 	echo If you really want to send e-mail, run ./$@ now
  
! mail-report-with-warnings.log: warning.log
! 	if test x'$(BOOT_CFLAGS)' != x''; then \
! 	    BOOT_CFLAGS='$(BOOT_CFLAGS)'; export BOOT_CFLAGS; \
! 	fi; \
! 	$(srcdir)/contrib/test_summary -t -i warning.log >$@
! 	chmod +x $@
! 	echo If you really want to send e-mail, run ./$@ now
  
! # Installation targets.
  
! .PHONY: install uninstall
! install: installdirs install-host install-target
  
! .PHONY: install-host-nogcc
! install-host-nogcc:  \
!     maybe-install-ash \
!     maybe-install-autoconf \
!     maybe-install-automake \
!     maybe-install-bash \
!     maybe-install-bfd \
!     maybe-install-opcodes \
!     maybe-install-binutils \
!     maybe-install-bison \
!     maybe-install-byacc \
!     maybe-install-bzip2 \
!     maybe-install-dejagnu \
!     maybe-install-diff \
!     maybe-install-dosutils \
!     maybe-install-etc \
!     maybe-install-fastjar \
!     maybe-install-fileutils \
!     maybe-install-findutils \
!     maybe-install-find \
!     maybe-install-flex \
!     maybe-install-gas \
!     maybe-install-gawk \
!     maybe-install-gettext \
!     maybe-install-gnuserv \
!     maybe-install-gprof \
!     maybe-install-gzip \
!     maybe-install-hello \
!     maybe-install-indent \
!     maybe-install-intl \
!     maybe-install-tcl \
!     maybe-install-itcl \
!     maybe-install-ld \
!     maybe-install-libgui \
!     maybe-install-libiberty \
!     maybe-install-libtool \
!     maybe-install-m4 \
!     maybe-install-make \
!     maybe-install-mmalloc \
!     maybe-install-patch \
!     maybe-install-perl \
!     maybe-install-prms \
!     maybe-install-rcs \
!     maybe-install-readline \
!     maybe-install-release \
!     maybe-install-recode \
!     maybe-install-sed \
!     maybe-install-send-pr \
!     maybe-install-shellutils \
!     maybe-install-sid \
!     maybe-install-sim \
!     maybe-install-tar \
!     maybe-install-texinfo \
!     maybe-install-textutils \
!     maybe-install-time \
!     maybe-install-uudecode \
!     maybe-install-wdiff \
!     maybe-install-zip \
!     maybe-install-zlib \
!     maybe-install-gdb \
!     maybe-install-expect \
!     maybe-install-guile \
!     maybe-install-tk \
!     maybe-install-tix \
!     maybe-install-libtermcap \
!     maybe-install-utils
  
! .PHONY: install-host
! install-host: maybe-install-gcc  \
!     maybe-install-ash \
!     maybe-install-autoconf \
!     maybe-install-automake \
!     maybe-install-bash \
!     maybe-install-bfd \
!     maybe-install-opcodes \
!     maybe-install-binutils \
!     maybe-install-bison \
!     maybe-install-byacc \
!     maybe-install-bzip2 \
!     maybe-install-dejagnu \
!     maybe-install-diff \
!     maybe-install-dosutils \
!     maybe-install-etc \
!     maybe-install-fastjar \
!     maybe-install-fileutils \
!     maybe-install-findutils \
!     maybe-install-find \
!     maybe-install-flex \
!     maybe-install-gas \
!     maybe-install-gawk \
!     maybe-install-gettext \
!     maybe-install-gnuserv \
!     maybe-install-gprof \
!     maybe-install-gzip \
!     maybe-install-hello \
!     maybe-install-indent \
!     maybe-install-intl \
!     maybe-install-tcl \
!     maybe-install-itcl \
!     maybe-install-ld \
!     maybe-install-libgui \
!     maybe-install-libiberty \
!     maybe-install-libtool \
!     maybe-install-m4 \
!     maybe-install-make \
!     maybe-install-mmalloc \
!     maybe-install-patch \
!     maybe-install-perl \
!     maybe-install-prms \
!     maybe-install-rcs \
!     maybe-install-readline \
!     maybe-install-release \
!     maybe-install-recode \
!     maybe-install-sed \
!     maybe-install-send-pr \
!     maybe-install-shellutils \
!     maybe-install-sid \
!     maybe-install-sim \
!     maybe-install-tar \
!     maybe-install-texinfo \
!     maybe-install-textutils \
!     maybe-install-time \
!     maybe-install-uudecode \
!     maybe-install-wdiff \
!     maybe-install-zip \
!     maybe-install-zlib \
!     maybe-install-gdb \
!     maybe-install-expect \
!     maybe-install-guile \
!     maybe-install-tk \
!     maybe-install-tix \
!     maybe-install-libtermcap \
!     maybe-install-utils
  
! .PHONY: install-target
! install-target:  \
!     maybe-install-target-libstdc++-v3 \
!     maybe-install-target-newlib \
!     maybe-install-target-libf2c \
!     maybe-install-target-libobjc \
!     maybe-install-target-libtermcap \
!     maybe-install-target-winsup \
!     maybe-install-target-libgloss \
!     maybe-install-target-libiberty \
!     maybe-install-target-gperf \
!     maybe-install-target-examples \
!     maybe-install-target-libffi \
!     maybe-install-target-libjava \
!     maybe-install-target-zlib \
!     maybe-install-target-boehm-gc \
!     maybe-install-target-qthreads \
!     maybe-install-target-rda
  
! uninstall:
! 	@echo "the uninstall target is not supported in this tree"
  
! .PHONY: install.all
! install.all: install-no-fixedincludes
! 	@if [ -f ./gcc/Makefile ] ; then \
! 		r=`${PWD_COMMAND}` ; export r ; \
! 		$(SET_LIB_PATH) \
! 		(cd ./gcc && \
! 		$(MAKE) $(FLAGS_TO_PASS) install-headers) ; \
! 	else \
! 		true ; \
! 	fi
  
! # install-no-fixedincludes is used because Cygnus can not distribute
! # the fixed header files.
! .PHONY: install-no-fixedincludes
! install-no-fixedincludes: installdirs install-host-nogcc \
! 	install-target gcc-no-fixedincludes
  
! ### other supporting targets
  
! MAKEDIRS= \
! 	$(DESTDIR)$(prefix) \
! 	$(DESTDIR)$(exec_prefix)
! .PHONY: installdirs
! installdirs: mkinstalldirs
! 	$(SHELL) $(srcdir)/mkinstalldirs $(MAKEDIRS)
  
! dir.info: do-install-info
! 	if [ -f $(srcdir)/texinfo/gen-info-dir ] ; then \
! 	  $(srcdir)/texinfo/gen-info-dir $(DESTDIR)$(infodir) $(srcdir)/texinfo/dir.info-template > dir.info.new ; \
! 	  mv -f dir.info.new dir.info ; \
! 	else true ; \
! 	fi
  
! dist:
! 	@echo "Building a full distribution of this tree isn't done"
! 	@echo "via 'make dist'.  Check out the etc/ subdirectory" 
  
- etags tags: TAGS
  
! # Right now this just builds TAGS in each subdirectory.  emacs19 has the
! # ability to use several tags files at once, so there is probably no need
! # to combine them into one big TAGS file (like CVS 1.3 does).  We could
! # (if we felt like it) have this Makefile write a piece of elisp which
! # the user could load to tell emacs19 where all the TAGS files we just
! # built are.
! TAGS: do-TAGS
  
! # --------------------------------------
! # Modules which run on the build machine
! # --------------------------------------
  
! .PHONY: configure-build-libiberty maybe-configure-build-libiberty
! maybe-configure-build-libiberty:
! configure-build-libiberty:
! 	@test ! -f $(BUILD_SUBDIR)/libiberty/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(BUILD_SUBDIR)/libiberty ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	AR="$(AR_FOR_BUILD)"; export AR; \
! 	AS="$(AS_FOR_BUILD)"; export AS; \
! 	CC="$(CC_FOR_BUILD)"; export CC; \
! 	CFLAGS="$(CFLAGS_FOR_BUILD)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX_FOR_BUILD)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS_FOR_BUILD)"; export CXXFLAGS; \
! 	GCJ="$(GCJ_FOR_BUILD)"; export GCJ; \
! 	DLLTOOL="$(DLLTOOL_FOR_BUILD)"; export DLLTOOL; \
! 	LD="$(LD_FOR_BUILD)"; export LD; \
! 	LDFLAGS="$(LDFLAGS_FOR_BUILD)"; export LDFLAGS; \
! 	NM="$(NM_FOR_BUILD)"; export NM; \
! 	RANLIB="$(RANLIB_FOR_BUILD)"; export RANLIB; \
! 	WINDRES="$(WINDRES_FOR_BUILD)"; export WINDRES; \
! 	echo Configuring in $(BUILD_SUBDIR)/libiberty; \
! 	cd "$(BUILD_SUBDIR)/libiberty" || exit 1; \
  	case $(srcdir) in \
  	  /* | [A-Za-z]:[\\/]*) \
  	    topdir=$(srcdir) ;; \
  	  *) \
! 	    case "$(BUILD_SUBDIR)" in \
  	      .) topdir="../$(srcdir)" ;; \
  	      *) topdir="../../$(srcdir)" ;; \
  	    esac ;; \
  	esac; \
! 	if [ "$(srcdir)" = "." ] ; then \
! 	  if [ "$(BUILD_SUBDIR)" != "." ] ; then \
! 	    if $(SHELL) $$s/symlink-tree $${topdir}/libiberty "no-such-file" ; then \
! 	      if [ -f Makefile ]; then \
! 	        if $(MAKE) distclean; then \
! 	          true; \
! 	        else \
! 	          exit 1; \
! 	        fi; \
! 	      else \
! 	        true; \
! 	      fi; \
! 	    else \
! 	      exit 1; \
! 	    fi; \
! 	  else \
! 	    true; \
! 	  fi; \
! 	  srcdiroption="--srcdir=."; \
! 	  libsrcdir="."; \
! 	else \
! 	  srcdiroption="--srcdir=$${topdir}/libiberty"; \
! 	  libsrcdir="$$s/libiberty"; \
! 	fi; \
  	rm -f no-such-file || : ; \
  	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
! 	  $(BUILD_CONFIGARGS) $${srcdiroption} \
! 	  --with-build-subdir="$(BUILD_SUBDIR)" \
  	  || exit 1
  
! .PHONY: all-build-libiberty maybe-all-build-libiberty
! maybe-all-build-libiberty:
! all-build-libiberty: configure-build-libiberty
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	(cd $(BUILD_SUBDIR)/libiberty && $(MAKE) all)
! 
  
! # --------------------------------------
! # Modules which run on the host machine
! # --------------------------------------
  
! .PHONY: configure-ash maybe-configure-ash
! maybe-configure-ash:
! configure-ash:
! 	@test ! -f ash/Makefile || exit 0; \
! 	[ -d ash ] || mkdir ash; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in ash; \
! 	cd ash || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/ash"; \
! 	    libsrcdir="$$s/ash";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/ash"; \
! 	    libsrcdir="$$s/ash";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
  
! .PHONY: all-ash maybe-all-ash
! maybe-all-ash:
! all-ash: configure-ash
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd ash && $(MAKE) $(FLAGS_TO_PASS) all)
  
! .PHONY: check-ash maybe-check-ash
! maybe-check-ash:
  
! check-ash:
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd ash && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
! .PHONY: install-ash maybe-install-ash
! maybe-install-ash:
  
! install-ash: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd ash && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-autoconf maybe-configure-autoconf
! maybe-configure-autoconf:
! configure-autoconf:
! 	@test ! -f autoconf/Makefile || exit 0; \
! 	[ -d autoconf ] || mkdir autoconf; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in autoconf; \
! 	cd autoconf || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/autoconf"; \
! 	    libsrcdir="$$s/autoconf";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/autoconf"; \
! 	    libsrcdir="$$s/autoconf";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
  	  || exit 1
  
! .PHONY: all-autoconf maybe-all-autoconf
! maybe-all-autoconf:
! all-autoconf: configure-autoconf
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd autoconf && $(MAKE) $(FLAGS_TO_PASS) all)
  
! .PHONY: check-autoconf maybe-check-autoconf
! maybe-check-autoconf:
  
! check-autoconf:
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd autoconf && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
! .PHONY: install-autoconf maybe-install-autoconf
! maybe-install-autoconf:
  
! install-autoconf: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd autoconf && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-automake maybe-configure-automake
! maybe-configure-automake:
! configure-automake:
! 	@test ! -f automake/Makefile || exit 0; \
! 	[ -d automake ] || mkdir automake; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in automake; \
! 	cd automake || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/automake"; \
! 	    libsrcdir="$$s/automake";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/automake"; \
! 	    libsrcdir="$$s/automake";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
  	  || exit 1
  
! .PHONY: all-automake maybe-all-automake
! maybe-all-automake:
! all-automake: configure-automake
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd automake && $(MAKE) $(FLAGS_TO_PASS) all)
  
! .PHONY: check-automake maybe-check-automake
! maybe-check-automake:
  
! check-automake:
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd automake && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
! .PHONY: install-automake maybe-install-automake
! maybe-install-automake:
  
! install-automake: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd automake && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-bash maybe-configure-bash
! maybe-configure-bash:
! configure-bash:
! 	@test ! -f bash/Makefile || exit 0; \
! 	[ -d bash ] || mkdir bash; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in bash; \
! 	cd bash || exit 1; \
  	case $(srcdir) in \
- 	  \.) \
- 	    srcdiroption="--srcdir=."; \
- 	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/bash"; \
! 	    libsrcdir="$$s/bash";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/bash"; \
! 	    libsrcdir="$$s/bash";; \
  	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
  	  || exit 1
  
! .PHONY: all-bash maybe-all-bash
! maybe-all-bash:
! all-bash: configure-bash
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd bash && $(MAKE) $(FLAGS_TO_PASS) all)
  
! .PHONY: check-bash maybe-check-bash
! maybe-check-bash:
  
! check-bash:
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd bash && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
! .PHONY: install-bash maybe-install-bash
! maybe-install-bash:
  
! install-bash: installdirs
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd bash && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-bfd maybe-configure-bfd
! maybe-configure-bfd:
! configure-bfd:
! 	@test ! -f bfd/Makefile || exit 0; \
! 	[ -d bfd ] || mkdir bfd; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in bfd; \
! 	cd bfd || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/bfd"; \
! 	    libsrcdir="$$s/bfd";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/bfd"; \
! 	    libsrcdir="$$s/bfd";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
  	  || exit 1
  
! .PHONY: all-bfd maybe-all-bfd
! maybe-all-bfd:
! all-bfd: configure-bfd
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd bfd && $(MAKE) $(FLAGS_TO_PASS) all)
  
! .PHONY: check-bfd maybe-check-bfd
! maybe-check-bfd:
  
! check-bfd:
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd bfd && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
! .PHONY: install-bfd maybe-install-bfd
! maybe-install-bfd:
  
! install-bfd: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd bfd && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-opcodes maybe-configure-opcodes
! maybe-configure-opcodes:
! configure-opcodes:
! 	@test ! -f opcodes/Makefile || exit 0; \
! 	[ -d opcodes ] || mkdir opcodes; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in opcodes; \
! 	cd opcodes || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/opcodes"; \
! 	    libsrcdir="$$s/opcodes";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/opcodes"; \
! 	    libsrcdir="$$s/opcodes";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
  	  || exit 1
  
! .PHONY: all-opcodes maybe-all-opcodes
! maybe-all-opcodes:
! all-opcodes: configure-opcodes
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd opcodes && $(MAKE) $(FLAGS_TO_PASS) all)
  
! .PHONY: check-opcodes maybe-check-opcodes
! maybe-check-opcodes:
  
! check-opcodes:
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd opcodes && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
! .PHONY: install-opcodes maybe-install-opcodes
! maybe-install-opcodes:
  
! install-opcodes: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd opcodes && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-binutils maybe-configure-binutils
! maybe-configure-binutils:
! configure-binutils:
! 	@test ! -f binutils/Makefile || exit 0; \
! 	[ -d binutils ] || mkdir binutils; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in binutils; \
! 	cd binutils || exit 1; \
  	case $(srcdir) in \
- 	  \.) \
- 	    srcdiroption="--srcdir=."; \
- 	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/binutils"; \
! 	    libsrcdir="$$s/binutils";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/binutils"; \
! 	    libsrcdir="$$s/binutils";; \
  	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
  	  || exit 1
  
! .PHONY: all-binutils maybe-all-binutils
! maybe-all-binutils:
! all-binutils: configure-binutils
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd binutils && $(MAKE) $(FLAGS_TO_PASS) all)
  
! .PHONY: check-binutils maybe-check-binutils
! maybe-check-binutils:
  
! check-binutils:
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd binutils && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
! .PHONY: install-binutils maybe-install-binutils
! maybe-install-binutils:
  
! install-binutils: installdirs
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd binutils && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-bison maybe-configure-bison
! maybe-configure-bison:
! configure-bison:
! 	@test ! -f bison/Makefile || exit 0; \
! 	[ -d bison ] || mkdir bison; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in bison; \
! 	cd bison || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/bison"; \
! 	    libsrcdir="$$s/bison";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/bison"; \
! 	    libsrcdir="$$s/bison";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
  	  || exit 1
  
! .PHONY: all-bison maybe-all-bison
! maybe-all-bison:
! all-bison: configure-bison
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd bison && $(MAKE) $(FLAGS_TO_PASS) all)
  
! .PHONY: check-bison maybe-check-bison
! maybe-check-bison:
  
! # This module is only tested in a native toolchain.
! check-bison:
! 	@if [ '$(host)' = '$(target)' ] ; then \
! 	  r=`${PWD_COMMAND}`; export r; \
! 	  s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	  $(SET_LIB_PATH) \
! 	  (cd bison && $(MAKE) $(FLAGS_TO_PASS) check); \
! 	fi
  
  
! .PHONY: install-bison maybe-install-bison
! maybe-install-bison:
  
! install-bison: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd bison && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-byacc maybe-configure-byacc
! maybe-configure-byacc:
! configure-byacc:
! 	@test ! -f byacc/Makefile || exit 0; \
! 	[ -d byacc ] || mkdir byacc; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in byacc; \
! 	cd byacc || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/byacc"; \
! 	    libsrcdir="$$s/byacc";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/byacc"; \
! 	    libsrcdir="$$s/byacc";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
  	  || exit 1
  
! .PHONY: all-byacc maybe-all-byacc
! maybe-all-byacc:
! all-byacc: configure-byacc
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd byacc && $(MAKE) $(FLAGS_TO_PASS) all)
  
! .PHONY: check-byacc maybe-check-byacc
! maybe-check-byacc:
  
! # This module is only tested in a native toolchain.
! check-byacc:
! 	@if [ '$(host)' = '$(target)' ] ; then \
! 	  r=`${PWD_COMMAND}`; export r; \
! 	  s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	  $(SET_LIB_PATH) \
! 	  (cd byacc && $(MAKE) $(FLAGS_TO_PASS) check); \
! 	fi
  
  
! .PHONY: install-byacc maybe-install-byacc
! maybe-install-byacc:
  
! install-byacc: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd byacc && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-bzip2 maybe-configure-bzip2
! maybe-configure-bzip2:
! configure-bzip2:
! 	@test ! -f bzip2/Makefile || exit 0; \
! 	[ -d bzip2 ] || mkdir bzip2; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in bzip2; \
! 	cd bzip2 || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/bzip2"; \
! 	    libsrcdir="$$s/bzip2";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/bzip2"; \
! 	    libsrcdir="$$s/bzip2";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
  	  || exit 1
  
! .PHONY: all-bzip2 maybe-all-bzip2
! maybe-all-bzip2:
! all-bzip2: configure-bzip2
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd bzip2 && $(MAKE) $(FLAGS_TO_PASS) all)
  
! .PHONY: check-bzip2 maybe-check-bzip2
! maybe-check-bzip2:
  
! check-bzip2:
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd bzip2 && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
! .PHONY: install-bzip2 maybe-install-bzip2
! maybe-install-bzip2:
  
! install-bzip2: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd bzip2 && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-dejagnu maybe-configure-dejagnu
! maybe-configure-dejagnu:
! configure-dejagnu:
! 	@test ! -f dejagnu/Makefile || exit 0; \
! 	[ -d dejagnu ] || mkdir dejagnu; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in dejagnu; \
! 	cd dejagnu || exit 1; \
  	case $(srcdir) in \
- 	  \.) \
- 	    srcdiroption="--srcdir=."; \
- 	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/dejagnu"; \
! 	    libsrcdir="$$s/dejagnu";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/dejagnu"; \
! 	    libsrcdir="$$s/dejagnu";; \
  	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
  	  || exit 1
  
! .PHONY: all-dejagnu maybe-all-dejagnu
! maybe-all-dejagnu:
! all-dejagnu: configure-dejagnu
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd dejagnu && $(MAKE) $(FLAGS_TO_PASS) all)
  
! .PHONY: check-dejagnu maybe-check-dejagnu
! maybe-check-dejagnu:
  
! check-dejagnu:
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd dejagnu && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
! .PHONY: install-dejagnu maybe-install-dejagnu
! maybe-install-dejagnu:
  
! install-dejagnu: installdirs
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd dejagnu && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-diff maybe-configure-diff
! maybe-configure-diff:
! configure-diff:
! 	@test ! -f diff/Makefile || exit 0; \
! 	[ -d diff ] || mkdir diff; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in diff; \
! 	cd diff || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/diff"; \
! 	    libsrcdir="$$s/diff";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/diff"; \
! 	    libsrcdir="$$s/diff";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
  	  || exit 1
  
! .PHONY: all-diff maybe-all-diff
! maybe-all-diff:
! all-diff: configure-diff
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd diff && $(MAKE) $(FLAGS_TO_PASS) all)
  
! .PHONY: check-diff maybe-check-diff
! maybe-check-diff:
  
! check-diff:
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd diff && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
! .PHONY: install-diff maybe-install-diff
! maybe-install-diff:
  
! install-diff: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd diff && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-dosutils maybe-configure-dosutils
! maybe-configure-dosutils:
! configure-dosutils:
! 	@test ! -f dosutils/Makefile || exit 0; \
! 	[ -d dosutils ] || mkdir dosutils; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in dosutils; \
! 	cd dosutils || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/dosutils"; \
! 	    libsrcdir="$$s/dosutils";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/dosutils"; \
! 	    libsrcdir="$$s/dosutils";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
  	  || exit 1
  
! .PHONY: all-dosutils maybe-all-dosutils
! maybe-all-dosutils:
! all-dosutils: configure-dosutils
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd dosutils && $(MAKE) $(FLAGS_TO_PASS) all)
  
! .PHONY: check-dosutils maybe-check-dosutils
! maybe-check-dosutils:
  
! check-dosutils:
  
  
! .PHONY: install-dosutils maybe-install-dosutils
! maybe-install-dosutils:
  
! install-dosutils: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd dosutils && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-etc maybe-configure-etc
! maybe-configure-etc:
! configure-etc:
! 	@test ! -f etc/Makefile || exit 0; \
! 	[ -d etc ] || mkdir etc; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in etc; \
! 	cd etc || exit 1; \
  	case $(srcdir) in \
- 	  \.) \
- 	    srcdiroption="--srcdir=."; \
- 	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/etc"; \
! 	    libsrcdir="$$s/etc";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/etc"; \
! 	    libsrcdir="$$s/etc";; \
  	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
  	  || exit 1
  
! .PHONY: all-etc maybe-all-etc
! maybe-all-etc:
! all-etc: configure-etc
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd etc && $(MAKE) $(FLAGS_TO_PASS) all)
  
! .PHONY: check-etc maybe-check-etc
! maybe-check-etc:
  
! check-etc:
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd etc && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
! .PHONY: install-etc maybe-install-etc
! maybe-install-etc:
  
! install-etc: installdirs
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd etc && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-fastjar maybe-configure-fastjar
! maybe-configure-fastjar:
! configure-fastjar:
! 	@test ! -f fastjar/Makefile || exit 0; \
! 	[ -d fastjar ] || mkdir fastjar; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in fastjar; \
! 	cd fastjar || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/fastjar"; \
! 	    libsrcdir="$$s/fastjar";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/fastjar"; \
! 	    libsrcdir="$$s/fastjar";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
  	  || exit 1
  
! .PHONY: all-fastjar maybe-all-fastjar
! maybe-all-fastjar:
! all-fastjar: configure-fastjar
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd fastjar && $(MAKE) $(FLAGS_TO_PASS) all)
  
! .PHONY: check-fastjar maybe-check-fastjar
! maybe-check-fastjar:
  
! # This module is only tested in a native toolchain.
! check-fastjar:
! 	@if [ '$(host)' = '$(target)' ] ; then \
! 	  r=`${PWD_COMMAND}`; export r; \
! 	  s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	  $(SET_LIB_PATH) \
! 	  (cd fastjar && $(MAKE) $(FLAGS_TO_PASS) check); \
! 	fi
  
  
! .PHONY: install-fastjar maybe-install-fastjar
! maybe-install-fastjar:
  
! install-fastjar: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd fastjar && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-fileutils maybe-configure-fileutils
! maybe-configure-fileutils:
! configure-fileutils:
! 	@test ! -f fileutils/Makefile || exit 0; \
! 	[ -d fileutils ] || mkdir fileutils; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in fileutils; \
! 	cd fileutils || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/fileutils"; \
! 	    libsrcdir="$$s/fileutils";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/fileutils"; \
! 	    libsrcdir="$$s/fileutils";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
  	  || exit 1
  
! .PHONY: all-fileutils maybe-all-fileutils
! maybe-all-fileutils:
! all-fileutils: configure-fileutils
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd fileutils && $(MAKE) $(FLAGS_TO_PASS) all)
  
! .PHONY: check-fileutils maybe-check-fileutils
! maybe-check-fileutils:
  
! check-fileutils:
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd fileutils && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
! .PHONY: install-fileutils maybe-install-fileutils
! maybe-install-fileutils:
  
! install-fileutils: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd fileutils && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-findutils maybe-configure-findutils
! maybe-configure-findutils:
! configure-findutils:
! 	@test ! -f findutils/Makefile || exit 0; \
! 	[ -d findutils ] || mkdir findutils; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in findutils; \
! 	cd findutils || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/findutils"; \
! 	    libsrcdir="$$s/findutils";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/findutils"; \
! 	    libsrcdir="$$s/findutils";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
  	  || exit 1
  
! .PHONY: all-findutils maybe-all-findutils
! maybe-all-findutils:
! all-findutils: configure-findutils
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd findutils && $(MAKE) $(FLAGS_TO_PASS) all)
  
! .PHONY: check-findutils maybe-check-findutils
! maybe-check-findutils:
  
! check-findutils:
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd findutils && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
! .PHONY: install-findutils maybe-install-findutils
! maybe-install-findutils:
  
! install-findutils: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd findutils && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-find maybe-configure-find
! maybe-configure-find:
! configure-find:
! 	@test ! -f find/Makefile || exit 0; \
! 	[ -d find ] || mkdir find; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in find; \
! 	cd find || exit 1; \
  	case $(srcdir) in \
- 	  \.) \
- 	    srcdiroption="--srcdir=."; \
- 	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/find"; \
! 	    libsrcdir="$$s/find";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/find"; \
! 	    libsrcdir="$$s/find";; \
  	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
  	  || exit 1
  
! .PHONY: all-find maybe-all-find
! maybe-all-find:
! all-find: configure-find
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd find && $(MAKE) $(FLAGS_TO_PASS) all)
  
! .PHONY: check-find maybe-check-find
! maybe-check-find:
  
! check-find:
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd find && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
! .PHONY: install-find maybe-install-find
! maybe-install-find:
  
! install-find: installdirs
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd find && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-flex maybe-configure-flex
! maybe-configure-flex:
! configure-flex:
! 	@test ! -f flex/Makefile || exit 0; \
! 	[ -d flex ] || mkdir flex; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in flex; \
! 	cd flex || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/flex"; \
! 	    libsrcdir="$$s/flex";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/flex"; \
! 	    libsrcdir="$$s/flex";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
  	  || exit 1
  
! .PHONY: all-flex maybe-all-flex
! maybe-all-flex:
! all-flex: configure-flex
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd flex && $(MAKE) $(FLAGS_TO_PASS) all)
  
! .PHONY: check-flex maybe-check-flex
! maybe-check-flex:
  
! # This module is only tested in a native toolchain.
! check-flex:
! 	@if [ '$(host)' = '$(target)' ] ; then \
! 	  r=`${PWD_COMMAND}`; export r; \
! 	  s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	  $(SET_LIB_PATH) \
! 	  (cd flex && $(MAKE) $(FLAGS_TO_PASS) check); \
! 	fi
  
  
! .PHONY: install-flex maybe-install-flex
! maybe-install-flex:
  
! install-flex: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd flex && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-gas maybe-configure-gas
! maybe-configure-gas:
! configure-gas:
! 	@test ! -f gas/Makefile || exit 0; \
! 	[ -d gas ] || mkdir gas; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in gas; \
! 	cd gas || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/gas"; \
! 	    libsrcdir="$$s/gas";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/gas"; \
! 	    libsrcdir="$$s/gas";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
  	  || exit 1
  
! .PHONY: all-gas maybe-all-gas
! maybe-all-gas:
! all-gas: configure-gas
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd gas && $(MAKE) $(FLAGS_TO_PASS) all)
  
! .PHONY: check-gas maybe-check-gas
! maybe-check-gas:
  
! check-gas:
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd gas && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
! .PHONY: install-gas maybe-install-gas
! maybe-install-gas:
  
! install-gas: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd gas && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-gawk maybe-configure-gawk
! maybe-configure-gawk:
! configure-gawk:
! 	@test ! -f gawk/Makefile || exit 0; \
! 	[ -d gawk ] || mkdir gawk; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in gawk; \
! 	cd gawk || exit 1; \
  	case $(srcdir) in \
- 	  \.) \
- 	    srcdiroption="--srcdir=."; \
- 	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/gawk"; \
! 	    libsrcdir="$$s/gawk";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/gawk"; \
! 	    libsrcdir="$$s/gawk";; \
  	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
  	  || exit 1
  
! .PHONY: all-gawk maybe-all-gawk
! maybe-all-gawk:
! all-gawk: configure-gawk
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd gawk && $(MAKE) $(FLAGS_TO_PASS) all)
  
! .PHONY: check-gawk maybe-check-gawk
! maybe-check-gawk:
  
! check-gawk:
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd gawk && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
! .PHONY: install-gawk maybe-install-gawk
! maybe-install-gawk:
  
! install-gawk: installdirs
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd gawk && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-gettext maybe-configure-gettext
! maybe-configure-gettext:
! configure-gettext:
! 	@test ! -f gettext/Makefile || exit 0; \
! 	[ -d gettext ] || mkdir gettext; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in gettext; \
! 	cd gettext || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/gettext"; \
! 	    libsrcdir="$$s/gettext";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/gettext"; \
! 	    libsrcdir="$$s/gettext";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
  	  || exit 1
  
! .PHONY: all-gettext maybe-all-gettext
! maybe-all-gettext:
! all-gettext: configure-gettext
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd gettext && $(MAKE) $(FLAGS_TO_PASS) all)
  
! .PHONY: check-gettext maybe-check-gettext
! maybe-check-gettext:
  
! check-gettext:
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd gettext && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
! .PHONY: install-gettext maybe-install-gettext
! maybe-install-gettext:
  
! install-gettext: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd gettext && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-gnuserv maybe-configure-gnuserv
! maybe-configure-gnuserv:
! configure-gnuserv:
! 	@test ! -f gnuserv/Makefile || exit 0; \
! 	[ -d gnuserv ] || mkdir gnuserv; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in gnuserv; \
! 	cd gnuserv || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/gnuserv"; \
! 	    libsrcdir="$$s/gnuserv";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/gnuserv"; \
! 	    libsrcdir="$$s/gnuserv";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
  	  || exit 1
  
! .PHONY: all-gnuserv maybe-all-gnuserv
! maybe-all-gnuserv:
! all-gnuserv: configure-gnuserv
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd gnuserv && $(MAKE) $(FLAGS_TO_PASS) all)
  
! .PHONY: check-gnuserv maybe-check-gnuserv
! maybe-check-gnuserv:
  
! check-gnuserv:
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd gnuserv && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
! .PHONY: install-gnuserv maybe-install-gnuserv
! maybe-install-gnuserv:
  
! install-gnuserv: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd gnuserv && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-gprof maybe-configure-gprof
! maybe-configure-gprof:
! configure-gprof:
! 	@test ! -f gprof/Makefile || exit 0; \
! 	[ -d gprof ] || mkdir gprof; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in gprof; \
! 	cd gprof || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/gprof"; \
! 	    libsrcdir="$$s/gprof";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/gprof"; \
! 	    libsrcdir="$$s/gprof";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
  	  || exit 1
  
! .PHONY: all-gprof maybe-all-gprof
! maybe-all-gprof:
! all-gprof: configure-gprof
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd gprof && $(MAKE) $(FLAGS_TO_PASS) all)
  
! .PHONY: check-gprof maybe-check-gprof
! maybe-check-gprof:
  
! check-gprof:
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd gprof && $(MAKE) $(FLAGS_TO_PASS) check)
! 
  
! .PHONY: install-gprof maybe-install-gprof
! maybe-install-gprof:
  
! install-gprof: installdirs
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd gprof && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-gzip maybe-configure-gzip
! maybe-configure-gzip:
! configure-gzip:
! 	@test ! -f gzip/Makefile || exit 0; \
! 	[ -d gzip ] || mkdir gzip; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in gzip; \
! 	cd gzip || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/gzip"; \
! 	    libsrcdir="$$s/gzip";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/gzip"; \
! 	    libsrcdir="$$s/gzip";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
! 
! .PHONY: all-gzip maybe-all-gzip
! maybe-all-gzip:
! all-gzip: configure-gzip
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd gzip && $(MAKE) $(FLAGS_TO_PASS) all)
! 
! .PHONY: check-gzip maybe-check-gzip
! maybe-check-gzip:
  
! check-gzip:
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd gzip && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
- .PHONY: install-gzip maybe-install-gzip
- maybe-install-gzip:
  
! install-gzip: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd gzip && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-hello maybe-configure-hello
! maybe-configure-hello:
! configure-hello:
! 	@test ! -f hello/Makefile || exit 0; \
! 	[ -d hello ] || mkdir hello; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in hello; \
! 	cd hello || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/hello"; \
! 	    libsrcdir="$$s/hello";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/hello"; \
! 	    libsrcdir="$$s/hello";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
! 
! .PHONY: all-hello maybe-all-hello
! maybe-all-hello:
! all-hello: configure-hello
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd hello && $(MAKE) $(FLAGS_TO_PASS) all)
! 
! .PHONY: check-hello maybe-check-hello
! maybe-check-hello:
  
! check-hello:
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd hello && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
- .PHONY: install-hello maybe-install-hello
- maybe-install-hello:
  
! install-hello: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd hello && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-indent maybe-configure-indent
! maybe-configure-indent:
! configure-indent:
! 	@test ! -f indent/Makefile || exit 0; \
! 	[ -d indent ] || mkdir indent; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in indent; \
! 	cd indent || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/indent"; \
! 	    libsrcdir="$$s/indent";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/indent"; \
! 	    libsrcdir="$$s/indent";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
! 
! .PHONY: all-indent maybe-all-indent
! maybe-all-indent:
! all-indent: configure-indent
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd indent && $(MAKE) $(FLAGS_TO_PASS) all)
! 
! .PHONY: check-indent maybe-check-indent
! maybe-check-indent:
  
! check-indent:
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd indent && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
- .PHONY: install-indent maybe-install-indent
- maybe-install-indent:
  
! install-indent: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd indent && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-intl maybe-configure-intl
! maybe-configure-intl:
! configure-intl:
! 	@test ! -f intl/Makefile || exit 0; \
! 	[ -d intl ] || mkdir intl; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in intl; \
! 	cd intl || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/intl"; \
! 	    libsrcdir="$$s/intl";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/intl"; \
! 	    libsrcdir="$$s/intl";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
! 
! .PHONY: all-intl maybe-all-intl
! maybe-all-intl:
! all-intl: configure-intl
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd intl && $(MAKE) $(FLAGS_TO_PASS) all)
! 
! .PHONY: check-intl maybe-check-intl
! maybe-check-intl:
  
! check-intl:
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd intl && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
- .PHONY: install-intl maybe-install-intl
- maybe-install-intl:
  
! install-intl: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd intl && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-tcl maybe-configure-tcl
! maybe-configure-tcl:
! configure-tcl:
! 	@test ! -f tcl/Makefile || exit 0; \
! 	[ -d tcl ] || mkdir tcl; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in tcl; \
! 	cd tcl || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/tcl"; \
! 	    libsrcdir="$$s/tcl";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/tcl"; \
! 	    libsrcdir="$$s/tcl";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
! 
! .PHONY: all-tcl maybe-all-tcl
! maybe-all-tcl:
! all-tcl: configure-tcl
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd tcl && $(MAKE) $(FLAGS_TO_PASS) all)
! 
! .PHONY: check-tcl maybe-check-tcl
! maybe-check-tcl:
  
! check-tcl:
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd tcl && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
- .PHONY: install-tcl maybe-install-tcl
- maybe-install-tcl:
  
! install-tcl: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd tcl && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-itcl maybe-configure-itcl
! maybe-configure-itcl:
! configure-itcl:
! 	@test ! -f itcl/Makefile || exit 0; \
! 	[ -d itcl ] || mkdir itcl; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in itcl; \
! 	cd itcl || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/itcl"; \
! 	    libsrcdir="$$s/itcl";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/itcl"; \
! 	    libsrcdir="$$s/itcl";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
! 
! .PHONY: all-itcl maybe-all-itcl
! maybe-all-itcl:
! all-itcl: configure-itcl
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd itcl && $(MAKE) $(FLAGS_TO_PASS) all)
! 
! .PHONY: check-itcl maybe-check-itcl
! maybe-check-itcl:
  
! check-itcl:
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd itcl && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
- .PHONY: install-itcl maybe-install-itcl
- maybe-install-itcl:
  
! install-itcl: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd itcl && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-ld maybe-configure-ld
! maybe-configure-ld:
! configure-ld:
! 	@test ! -f ld/Makefile || exit 0; \
! 	[ -d ld ] || mkdir ld; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in ld; \
  	cd ld || exit 1; \
  	case $(srcdir) in \
  	  \.) \
--- 27454,31019 ----
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           TAGS) \
  	  || exit 1
  
+ @endif target-gperf
  
! .PHONY: maybe-install-info-target-gperf install-info-target-gperf
! maybe-install-info-target-gperf:
! @if target-gperf
! maybe-install-info-target-gperf: install-info-target-gperf
  
! install-info-target-gperf: \
!     configure-target-gperf \
!     info-target-gperf 
! 	@[ -f $(TARGET_SUBDIR)/gperf/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing install-info in $(TARGET_SUBDIR)/gperf" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/gperf && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           install-info) \
  	  || exit 1
  
+ @endif target-gperf
  
! .PHONY: maybe-installcheck-target-gperf installcheck-target-gperf
! maybe-installcheck-target-gperf:
! @if target-gperf
! maybe-installcheck-target-gperf: installcheck-target-gperf
  
! installcheck-target-gperf: \
!     configure-target-gperf 
! 	@[ -f $(TARGET_SUBDIR)/gperf/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing installcheck in $(TARGET_SUBDIR)/gperf" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/gperf && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           installcheck) \
  	  || exit 1
  
+ @endif target-gperf
  
! .PHONY: maybe-mostlyclean-target-gperf mostlyclean-target-gperf
! maybe-mostlyclean-target-gperf:
! @if target-gperf
! maybe-mostlyclean-target-gperf: mostlyclean-target-gperf
  
! mostlyclean-target-gperf: 
! 	@[ -f $(TARGET_SUBDIR)/gperf/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing mostlyclean in $(TARGET_SUBDIR)/gperf" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/gperf && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           mostlyclean) \
  	  || exit 1
  
+ @endif target-gperf
  
! .PHONY: maybe-clean-target-gperf clean-target-gperf
! maybe-clean-target-gperf:
! @if target-gperf
! maybe-clean-target-gperf: clean-target-gperf
  
! clean-target-gperf: 
! 	@[ -f $(TARGET_SUBDIR)/gperf/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing clean in $(TARGET_SUBDIR)/gperf" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/gperf && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           clean) \
  	  || exit 1
  
+ @endif target-gperf
  
! .PHONY: maybe-distclean-target-gperf distclean-target-gperf
! maybe-distclean-target-gperf:
! @if target-gperf
! maybe-distclean-target-gperf: distclean-target-gperf
  
! distclean-target-gperf: 
! 	@[ -f $(TARGET_SUBDIR)/gperf/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing distclean in $(TARGET_SUBDIR)/gperf" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/gperf && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           distclean) \
  	  || exit 1
  
+ @endif target-gperf
  
! .PHONY: maybe-maintainer-clean-target-gperf maintainer-clean-target-gperf
! maybe-maintainer-clean-target-gperf:
! @if target-gperf
! maybe-maintainer-clean-target-gperf: maintainer-clean-target-gperf
  
! maintainer-clean-target-gperf: 
! 	@[ -f $(TARGET_SUBDIR)/gperf/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing maintainer-clean in $(TARGET_SUBDIR)/gperf" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/gperf && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           maintainer-clean) \
  	  || exit 1
  
+ @endif target-gperf
  
  
! .PHONY: configure-target-examples maybe-configure-target-examples
! maybe-configure-target-examples:
! @if target-examples
! maybe-configure-target-examples: configure-target-examples
! 
! # There's only one multilib.out.  Cleverer subdirs shouldn't need it copied.
! $(TARGET_SUBDIR)/examples/multilib.out: multilib.out
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/examples ; \
! 	rm -f $(TARGET_SUBDIR)/examples/Makefile || : ; \
! 	cp multilib.out $(TARGET_SUBDIR)/examples/multilib.out
! 
! configure-target-examples: $(TARGET_SUBDIR)/examples/multilib.out
! 	@test ! -f $(TARGET_SUBDIR)/examples/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/examples ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo Configuring in $(TARGET_SUBDIR)/examples; \
! 	cd "$(TARGET_SUBDIR)/examples" || exit 1; \
! 	case $(srcdir) in \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    topdir=$(srcdir) ;; \
! 	  *) \
! 	    case "$(TARGET_SUBDIR)" in \
! 	      .) topdir="../$(srcdir)" ;; \
! 	      *) topdir="../../$(srcdir)" ;; \
! 	    esac ;; \
! 	esac; \
! 	  srcdiroption="--srcdir=$${topdir}/examples"; \
! 	  libsrcdir="$$s/examples"; \
! 	rm -f no-such-file || : ; \
! 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
! 	  $(TARGET_CONFIGARGS) $${srcdiroption} \
! 	  --with-target-subdir="$(TARGET_SUBDIR)"  \
! 	  || exit 1
! @endif target-examples
! 
! .PHONY: all-target-examples maybe-all-target-examples
! maybe-all-target-examples:
! @if target-examples
! TARGET-target-examples=all
! maybe-all-target-examples: all-target-examples
! all-target-examples: configure-target-examples
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/examples && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)   $(TARGET-target-examples))
! @endif target-examples
! 
! .PHONY: check-target-examples maybe-check-target-examples
! maybe-check-target-examples:
! @if target-examples
! maybe-check-target-examples: check-target-examples
! 
! # Dummy target for uncheckable module.
! check-target-examples:
! 
! @endif target-examples
! 
! .PHONY: install-target-examples maybe-install-target-examples
! maybe-install-target-examples:
! @if target-examples
! maybe-install-target-examples: install-target-examples
! 
! # Dummy target for uninstallable.
! install-target-examples:
! 
! @endif target-examples
! 
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-target-examples info-target-examples
! maybe-info-target-examples:
! @if target-examples
! maybe-info-target-examples: info-target-examples
! 
! info-target-examples: \
!     configure-target-examples 
! 	@[ -f $(TARGET_SUBDIR)/examples/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing info in $(TARGET_SUBDIR)/examples" ; \
  	for flag in $(EXTRA_TARGET_FLAGS); do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	(cd $(TARGET_SUBDIR)/examples && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           info) \
  	  || exit 1
  
+ @endif target-examples
  
+ .PHONY: maybe-dvi-target-examples dvi-target-examples
+ maybe-dvi-target-examples:
+ @if target-examples
+ maybe-dvi-target-examples: dvi-target-examples
  
+ dvi-target-examples: \
+     configure-target-examples 
+ 	@[ -f $(TARGET_SUBDIR)/examples/Makefile ] || exit 0 ; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(SET_LIB_PATH) \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	echo "Doing dvi in $(TARGET_SUBDIR)/examples" ; \
+ 	for flag in $(EXTRA_TARGET_FLAGS); do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	(cd $(TARGET_SUBDIR)/examples && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ 	           dvi) \
+ 	  || exit 1
  
! @endif target-examples
  
! .PHONY: maybe-html-target-examples html-target-examples
! maybe-html-target-examples:
! @if target-examples
! maybe-html-target-examples: html-target-examples
  
! html-target-examples: \
!     configure-target-examples 
! 	@[ -f $(TARGET_SUBDIR)/examples/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing html in $(TARGET_SUBDIR)/examples" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/examples && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           html) \
! 	  || exit 1
  
! @endif target-examples
  
! .PHONY: maybe-TAGS-target-examples TAGS-target-examples
! maybe-TAGS-target-examples:
! @if target-examples
! maybe-TAGS-target-examples: TAGS-target-examples
  
! TAGS-target-examples: \
!     configure-target-examples 
! 	@[ -f $(TARGET_SUBDIR)/examples/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing TAGS in $(TARGET_SUBDIR)/examples" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/examples && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           TAGS) \
! 	  || exit 1
  
! @endif target-examples
  
! .PHONY: maybe-install-info-target-examples install-info-target-examples
! maybe-install-info-target-examples:
! @if target-examples
! maybe-install-info-target-examples: install-info-target-examples
  
! install-info-target-examples: \
!     configure-target-examples \
!     info-target-examples 
! 	@[ -f $(TARGET_SUBDIR)/examples/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing install-info in $(TARGET_SUBDIR)/examples" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/examples && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           install-info) \
! 	  || exit 1
  
! @endif target-examples
  
! .PHONY: maybe-installcheck-target-examples installcheck-target-examples
! maybe-installcheck-target-examples:
! @if target-examples
! maybe-installcheck-target-examples: installcheck-target-examples
  
! installcheck-target-examples: \
!     configure-target-examples 
! 	@[ -f $(TARGET_SUBDIR)/examples/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing installcheck in $(TARGET_SUBDIR)/examples" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/examples && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           installcheck) \
! 	  || exit 1
  
! @endif target-examples
  
! .PHONY: maybe-mostlyclean-target-examples mostlyclean-target-examples
! maybe-mostlyclean-target-examples:
! @if target-examples
! maybe-mostlyclean-target-examples: mostlyclean-target-examples
  
! mostlyclean-target-examples: 
! 	@[ -f $(TARGET_SUBDIR)/examples/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing mostlyclean in $(TARGET_SUBDIR)/examples" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/examples && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           mostlyclean) \
! 	  || exit 1
  
! @endif target-examples
  
! .PHONY: maybe-clean-target-examples clean-target-examples
! maybe-clean-target-examples:
! @if target-examples
! maybe-clean-target-examples: clean-target-examples
  
! clean-target-examples: 
! 	@[ -f $(TARGET_SUBDIR)/examples/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing clean in $(TARGET_SUBDIR)/examples" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/examples && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           clean) \
! 	  || exit 1
  
! @endif target-examples
  
! .PHONY: maybe-distclean-target-examples distclean-target-examples
! maybe-distclean-target-examples:
! @if target-examples
! maybe-distclean-target-examples: distclean-target-examples
  
! distclean-target-examples: 
! 	@[ -f $(TARGET_SUBDIR)/examples/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing distclean in $(TARGET_SUBDIR)/examples" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/examples && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           distclean) \
! 	  || exit 1
  
! @endif target-examples
  
! .PHONY: maybe-maintainer-clean-target-examples maintainer-clean-target-examples
! maybe-maintainer-clean-target-examples:
! @if target-examples
! maybe-maintainer-clean-target-examples: maintainer-clean-target-examples
  
! maintainer-clean-target-examples: 
! 	@[ -f $(TARGET_SUBDIR)/examples/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing maintainer-clean in $(TARGET_SUBDIR)/examples" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/examples && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           maintainer-clean) \
! 	  || exit 1
  
! @endif target-examples
  
  
! .PHONY: configure-target-libffi maybe-configure-target-libffi
! maybe-configure-target-libffi:
! @if target-libffi
! maybe-configure-target-libffi: configure-target-libffi
  
! # There's only one multilib.out.  Cleverer subdirs shouldn't need it copied.
! $(TARGET_SUBDIR)/libffi/multilib.out: multilib.out
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libffi ; \
! 	rm -f $(TARGET_SUBDIR)/libffi/Makefile || : ; \
! 	cp multilib.out $(TARGET_SUBDIR)/libffi/multilib.out
  
! configure-target-libffi: $(TARGET_SUBDIR)/libffi/multilib.out
! 	@test ! -f $(TARGET_SUBDIR)/libffi/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libffi ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo Configuring in $(TARGET_SUBDIR)/libffi; \
! 	cd "$(TARGET_SUBDIR)/libffi" || exit 1; \
  	case $(srcdir) in \
  	  /* | [A-Za-z]:[\\/]*) \
  	    topdir=$(srcdir) ;; \
  	  *) \
! 	    case "$(TARGET_SUBDIR)" in \
  	      .) topdir="../$(srcdir)" ;; \
  	      *) topdir="../../$(srcdir)" ;; \
  	    esac ;; \
  	esac; \
! 	  srcdiroption="--srcdir=$${topdir}/libffi"; \
! 	  libsrcdir="$$s/libffi"; \
  	rm -f no-such-file || : ; \
  	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
! 	  $(TARGET_CONFIGARGS) $${srcdiroption} \
! 	  --with-target-subdir="$(TARGET_SUBDIR)"  \
  	  || exit 1
+ @endif target-libffi
  
! .PHONY: all-target-libffi maybe-all-target-libffi
! maybe-all-target-libffi:
! @if target-libffi
! TARGET-target-libffi=all
! maybe-all-target-libffi: all-target-libffi
! all-target-libffi: configure-target-libffi
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/libffi && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)   $(TARGET-target-libffi))
! @endif target-libffi
  
! .PHONY: check-target-libffi maybe-check-target-libffi
! maybe-check-target-libffi:
! @if target-libffi
! maybe-check-target-libffi: check-target-libffi
  
! check-target-libffi:
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/libffi && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)   check)
  
! @endif target-libffi
! 
! .PHONY: install-target-libffi maybe-install-target-libffi
! maybe-install-target-libffi:
! @if target-libffi
! maybe-install-target-libffi: install-target-libffi
! 
! install-target-libffi: installdirs
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/libffi && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  install)
  
! @endif target-libffi
  
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-target-libffi info-target-libffi
! maybe-info-target-libffi:
! @if target-libffi
! maybe-info-target-libffi: info-target-libffi
! 
! info-target-libffi: \
!     configure-target-libffi 
! 	@[ -f $(TARGET_SUBDIR)/libffi/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing info in $(TARGET_SUBDIR)/libffi" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libffi && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           info) \
! 	  || exit 1
  
+ @endif target-libffi
  
! .PHONY: maybe-dvi-target-libffi dvi-target-libffi
! maybe-dvi-target-libffi:
! @if target-libffi
! maybe-dvi-target-libffi: dvi-target-libffi
  
! dvi-target-libffi: \
!     configure-target-libffi 
! 	@[ -f $(TARGET_SUBDIR)/libffi/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing dvi in $(TARGET_SUBDIR)/libffi" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libffi && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           dvi) \
! 	  || exit 1
  
+ @endif target-libffi
  
! .PHONY: maybe-html-target-libffi html-target-libffi
! maybe-html-target-libffi:
! @if target-libffi
! maybe-html-target-libffi: html-target-libffi
! 
! html-target-libffi: \
!     configure-target-libffi 
! 	@[ -f $(TARGET_SUBDIR)/libffi/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing html in $(TARGET_SUBDIR)/libffi" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libffi && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           html) \
  	  || exit 1
  
! @endif target-libffi
! 
! .PHONY: maybe-TAGS-target-libffi TAGS-target-libffi
! maybe-TAGS-target-libffi:
! @if target-libffi
! maybe-TAGS-target-libffi: TAGS-target-libffi
! 
! TAGS-target-libffi: \
!     configure-target-libffi 
! 	@[ -f $(TARGET_SUBDIR)/libffi/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing TAGS in $(TARGET_SUBDIR)/libffi" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libffi && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           TAGS) \
! 	  || exit 1
  
! @endif target-libffi
  
! .PHONY: maybe-install-info-target-libffi install-info-target-libffi
! maybe-install-info-target-libffi:
! @if target-libffi
! maybe-install-info-target-libffi: install-info-target-libffi
! 
! install-info-target-libffi: \
!     configure-target-libffi \
!     info-target-libffi 
! 	@[ -f $(TARGET_SUBDIR)/libffi/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing install-info in $(TARGET_SUBDIR)/libffi" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libffi && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           install-info) \
! 	  || exit 1
  
+ @endif target-libffi
  
! .PHONY: maybe-installcheck-target-libffi installcheck-target-libffi
! maybe-installcheck-target-libffi:
! @if target-libffi
! maybe-installcheck-target-libffi: installcheck-target-libffi
  
! installcheck-target-libffi: \
!     configure-target-libffi 
! 	@[ -f $(TARGET_SUBDIR)/libffi/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing installcheck in $(TARGET_SUBDIR)/libffi" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libffi && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           installcheck) \
! 	  || exit 1
  
+ @endif target-libffi
  
! .PHONY: maybe-mostlyclean-target-libffi mostlyclean-target-libffi
! maybe-mostlyclean-target-libffi:
! @if target-libffi
! maybe-mostlyclean-target-libffi: mostlyclean-target-libffi
! 
! mostlyclean-target-libffi: 
! 	@[ -f $(TARGET_SUBDIR)/libffi/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing mostlyclean in $(TARGET_SUBDIR)/libffi" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libffi && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           mostlyclean) \
  	  || exit 1
  
! @endif target-libffi
! 
! .PHONY: maybe-clean-target-libffi clean-target-libffi
! maybe-clean-target-libffi:
! @if target-libffi
! maybe-clean-target-libffi: clean-target-libffi
! 
! clean-target-libffi: 
! 	@[ -f $(TARGET_SUBDIR)/libffi/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing clean in $(TARGET_SUBDIR)/libffi" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libffi && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           clean) \
! 	  || exit 1
  
! @endif target-libffi
  
! .PHONY: maybe-distclean-target-libffi distclean-target-libffi
! maybe-distclean-target-libffi:
! @if target-libffi
! maybe-distclean-target-libffi: distclean-target-libffi
! 
! distclean-target-libffi: 
! 	@[ -f $(TARGET_SUBDIR)/libffi/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing distclean in $(TARGET_SUBDIR)/libffi" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libffi && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           distclean) \
! 	  || exit 1
  
+ @endif target-libffi
  
! .PHONY: maybe-maintainer-clean-target-libffi maintainer-clean-target-libffi
! maybe-maintainer-clean-target-libffi:
! @if target-libffi
! maybe-maintainer-clean-target-libffi: maintainer-clean-target-libffi
  
! maintainer-clean-target-libffi: 
! 	@[ -f $(TARGET_SUBDIR)/libffi/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libffi" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libffi && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           maintainer-clean) \
! 	  || exit 1
  
+ @endif target-libffi
  
! 
! .PHONY: configure-target-libjava maybe-configure-target-libjava
! maybe-configure-target-libjava:
! @if target-libjava
! maybe-configure-target-libjava: configure-target-libjava
! 
! # There's only one multilib.out.  Cleverer subdirs shouldn't need it copied.
! $(TARGET_SUBDIR)/libjava/multilib.out: multilib.out
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libjava ; \
! 	rm -f $(TARGET_SUBDIR)/libjava/Makefile || : ; \
! 	cp multilib.out $(TARGET_SUBDIR)/libjava/multilib.out
! 
! configure-target-libjava: $(TARGET_SUBDIR)/libjava/multilib.out
! 	@test ! -f $(TARGET_SUBDIR)/libjava/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libjava ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(RAW_CXX_TARGET_EXPORTS) \
! 	echo Configuring in $(TARGET_SUBDIR)/libjava; \
! 	cd "$(TARGET_SUBDIR)/libjava" || exit 1; \
  	case $(srcdir) in \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    topdir=$(srcdir) ;; \
  	  *) \
! 	    case "$(TARGET_SUBDIR)" in \
! 	      .) topdir="../$(srcdir)" ;; \
! 	      *) topdir="../../$(srcdir)" ;; \
! 	    esac ;; \
  	esac; \
! 	  srcdiroption="--srcdir=$${topdir}/libjava"; \
! 	  libsrcdir="$$s/libjava"; \
! 	rm -f no-such-file || : ; \
! 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
! 	  $(TARGET_CONFIGARGS) $${srcdiroption} \
! 	  --with-target-subdir="$(TARGET_SUBDIR)"  \
  	  || exit 1
+ @endif target-libjava
  
! .PHONY: all-target-libjava maybe-all-target-libjava
! maybe-all-target-libjava:
! @if target-libjava
! TARGET-target-libjava=all
! maybe-all-target-libjava: all-target-libjava
! all-target-libjava: configure-target-libjava
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(RAW_CXX_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/libjava && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)'   $(TARGET-target-libjava))
! @endif target-libjava
  
! .PHONY: check-target-libjava maybe-check-target-libjava
! maybe-check-target-libjava:
! @if target-libjava
! maybe-check-target-libjava: check-target-libjava
  
! check-target-libjava:
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(RAW_CXX_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/libjava && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)'   check)
  
+ @endif target-libjava
  
! .PHONY: install-target-libjava maybe-install-target-libjava
! maybe-install-target-libjava:
! @if target-libjava
! maybe-install-target-libjava: install-target-libjava
  
! install-target-libjava: installdirs
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(RAW_CXX_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/libjava && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  install)
  
+ @endif target-libjava
  
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-target-libjava info-target-libjava
! maybe-info-target-libjava:
! @if target-libjava
! maybe-info-target-libjava: info-target-libjava
! 
! info-target-libjava: \
!     configure-target-libjava 
! 	@[ -f $(TARGET_SUBDIR)/libjava/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(RAW_CXX_TARGET_EXPORTS) \
! 	echo "Doing info in $(TARGET_SUBDIR)/libjava" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libjava && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           info) \
  	  || exit 1
  
! @endif target-libjava
! 
! .PHONY: maybe-dvi-target-libjava dvi-target-libjava
! maybe-dvi-target-libjava:
! @if target-libjava
! maybe-dvi-target-libjava: dvi-target-libjava
! 
! dvi-target-libjava: \
!     configure-target-libjava 
! 	@[ -f $(TARGET_SUBDIR)/libjava/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(RAW_CXX_TARGET_EXPORTS) \
! 	echo "Doing dvi in $(TARGET_SUBDIR)/libjava" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libjava && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           dvi) \
! 	  || exit 1
  
! @endif target-libjava
  
! .PHONY: maybe-html-target-libjava html-target-libjava
! maybe-html-target-libjava:
! @if target-libjava
! maybe-html-target-libjava: html-target-libjava
! 
! html-target-libjava: \
!     configure-target-libjava 
! 	@[ -f $(TARGET_SUBDIR)/libjava/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(RAW_CXX_TARGET_EXPORTS) \
! 	echo "Doing html in $(TARGET_SUBDIR)/libjava" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libjava && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           html) \
! 	  || exit 1
  
+ @endif target-libjava
  
! .PHONY: maybe-TAGS-target-libjava TAGS-target-libjava
! maybe-TAGS-target-libjava:
! @if target-libjava
! maybe-TAGS-target-libjava: TAGS-target-libjava
  
! TAGS-target-libjava: \
!     configure-target-libjava 
! 	@[ -f $(TARGET_SUBDIR)/libjava/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(RAW_CXX_TARGET_EXPORTS) \
! 	echo "Doing TAGS in $(TARGET_SUBDIR)/libjava" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libjava && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           TAGS) \
! 	  || exit 1
  
+ @endif target-libjava
  
! .PHONY: maybe-install-info-target-libjava install-info-target-libjava
! maybe-install-info-target-libjava:
! @if target-libjava
! maybe-install-info-target-libjava: install-info-target-libjava
! 
! install-info-target-libjava: \
!     configure-target-libjava \
!     info-target-libjava 
! 	@[ -f $(TARGET_SUBDIR)/libjava/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(RAW_CXX_TARGET_EXPORTS) \
! 	echo "Doing install-info in $(TARGET_SUBDIR)/libjava" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libjava && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           install-info) \
  	  || exit 1
  
! @endif target-libjava
! 
! .PHONY: maybe-installcheck-target-libjava installcheck-target-libjava
! maybe-installcheck-target-libjava:
! @if target-libjava
! maybe-installcheck-target-libjava: installcheck-target-libjava
! 
! installcheck-target-libjava: \
!     configure-target-libjava 
! 	@[ -f $(TARGET_SUBDIR)/libjava/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(RAW_CXX_TARGET_EXPORTS) \
! 	echo "Doing installcheck in $(TARGET_SUBDIR)/libjava" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libjava && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           installcheck) \
! 	  || exit 1
  
! @endif target-libjava
  
! .PHONY: maybe-mostlyclean-target-libjava mostlyclean-target-libjava
! maybe-mostlyclean-target-libjava:
! @if target-libjava
! maybe-mostlyclean-target-libjava: mostlyclean-target-libjava
! 
! mostlyclean-target-libjava: 
! 	@[ -f $(TARGET_SUBDIR)/libjava/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(RAW_CXX_TARGET_EXPORTS) \
! 	echo "Doing mostlyclean in $(TARGET_SUBDIR)/libjava" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libjava && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           mostlyclean) \
! 	  || exit 1
  
+ @endif target-libjava
  
! .PHONY: maybe-clean-target-libjava clean-target-libjava
! maybe-clean-target-libjava:
! @if target-libjava
! maybe-clean-target-libjava: clean-target-libjava
  
! clean-target-libjava: 
! 	@[ -f $(TARGET_SUBDIR)/libjava/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(RAW_CXX_TARGET_EXPORTS) \
! 	echo "Doing clean in $(TARGET_SUBDIR)/libjava" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libjava && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           clean) \
! 	  || exit 1
  
+ @endif target-libjava
  
! .PHONY: maybe-distclean-target-libjava distclean-target-libjava
! maybe-distclean-target-libjava:
! @if target-libjava
! maybe-distclean-target-libjava: distclean-target-libjava
! 
! distclean-target-libjava: 
! 	@[ -f $(TARGET_SUBDIR)/libjava/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(RAW_CXX_TARGET_EXPORTS) \
! 	echo "Doing distclean in $(TARGET_SUBDIR)/libjava" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libjava && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           distclean) \
! 	  || exit 1
! 
! @endif target-libjava
! 
! .PHONY: maybe-maintainer-clean-target-libjava maintainer-clean-target-libjava
! maybe-maintainer-clean-target-libjava:
! @if target-libjava
! maybe-maintainer-clean-target-libjava: maintainer-clean-target-libjava
! 
! maintainer-clean-target-libjava: 
! 	@[ -f $(TARGET_SUBDIR)/libjava/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(RAW_CXX_TARGET_EXPORTS) \
! 	echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libjava" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libjava && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           maintainer-clean) \
! 	  || exit 1
! 
! @endif target-libjava
! 
! 
! .PHONY: configure-target-zlib maybe-configure-target-zlib
! maybe-configure-target-zlib:
! @if target-zlib
! maybe-configure-target-zlib: configure-target-zlib
! 
! # There's only one multilib.out.  Cleverer subdirs shouldn't need it copied.
! $(TARGET_SUBDIR)/zlib/multilib.out: multilib.out
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/zlib ; \
! 	rm -f $(TARGET_SUBDIR)/zlib/Makefile || : ; \
! 	cp multilib.out $(TARGET_SUBDIR)/zlib/multilib.out
! 
! configure-target-zlib: $(TARGET_SUBDIR)/zlib/multilib.out
! 	@test ! -f $(TARGET_SUBDIR)/zlib/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/zlib ; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo Configuring in $(TARGET_SUBDIR)/zlib; \
! 	cd "$(TARGET_SUBDIR)/zlib" || exit 1; \
  	case $(srcdir) in \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    topdir=$(srcdir) ;; \
  	  *) \
! 	    case "$(TARGET_SUBDIR)" in \
! 	      .) topdir="../$(srcdir)" ;; \
! 	      *) topdir="../../$(srcdir)" ;; \
! 	    esac ;; \
  	esac; \
! 	if [ "$(srcdir)" = "." ] ; then \
! 	  if [ "$(TARGET_SUBDIR)" != "." ] ; then \
! 	    if $(SHELL) $$s/symlink-tree $${topdir}/zlib "no-such-file" ; then \
! 	      if [ -f Makefile ]; then \
! 	        if $(MAKE) distclean; then \
! 	          true; \
! 	        else \
! 	          exit 1; \
! 	        fi; \
! 	      else \
! 	        true; \
! 	      fi; \
! 	    else \
! 	      exit 1; \
! 	    fi; \
! 	  else \
! 	    true; \
! 	  fi; \
! 	  srcdiroption="--srcdir=."; \
! 	  libsrcdir="."; \
! 	else \
! 	  srcdiroption="--srcdir=$${topdir}/zlib"; \
! 	  libsrcdir="$$s/zlib"; \
! 	fi; \
! 	rm -f no-such-file || : ; \
! 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
! 	  $(TARGET_CONFIGARGS) $${srcdiroption} \
! 	  --with-target-subdir="$(TARGET_SUBDIR)"  \
  	  || exit 1
+ @endif target-zlib
  
! .PHONY: all-target-zlib maybe-all-target-zlib
! maybe-all-target-zlib:
! @if target-zlib
! TARGET-target-zlib=all
! maybe-all-target-zlib: all-target-zlib
! all-target-zlib: configure-target-zlib
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/zlib && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)   $(TARGET-target-zlib))
! @endif target-zlib
  
! .PHONY: check-target-zlib maybe-check-target-zlib
! maybe-check-target-zlib:
! @if target-zlib
! maybe-check-target-zlib: check-target-zlib
  
! check-target-zlib:
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/zlib && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)   check)
  
+ @endif target-zlib
  
! .PHONY: install-target-zlib maybe-install-target-zlib
! maybe-install-target-zlib:
! @if target-zlib
! maybe-install-target-zlib: install-target-zlib
  
! install-target-zlib: installdirs
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/zlib && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  install)
  
+ @endif target-zlib
  
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-target-zlib info-target-zlib
! maybe-info-target-zlib:
! @if target-zlib
! maybe-info-target-zlib: info-target-zlib
! 
! info-target-zlib: \
!     configure-target-zlib 
! 	@[ -f $(TARGET_SUBDIR)/zlib/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing info in $(TARGET_SUBDIR)/zlib" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/zlib && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           info) \
  	  || exit 1
  
! @endif target-zlib
  
! .PHONY: maybe-dvi-target-zlib dvi-target-zlib
! maybe-dvi-target-zlib:
! @if target-zlib
! maybe-dvi-target-zlib: dvi-target-zlib
  
! dvi-target-zlib: \
!     configure-target-zlib 
! 	@[ -f $(TARGET_SUBDIR)/zlib/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing dvi in $(TARGET_SUBDIR)/zlib" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/zlib && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           dvi) \
! 	  || exit 1
  
+ @endif target-zlib
  
! .PHONY: maybe-html-target-zlib html-target-zlib
! maybe-html-target-zlib:
! @if target-zlib
! maybe-html-target-zlib: html-target-zlib
  
! html-target-zlib: \
!     configure-target-zlib 
! 	@[ -f $(TARGET_SUBDIR)/zlib/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing html in $(TARGET_SUBDIR)/zlib" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/zlib && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           html) \
! 	  || exit 1
  
+ @endif target-zlib
  
! .PHONY: maybe-TAGS-target-zlib TAGS-target-zlib
! maybe-TAGS-target-zlib:
! @if target-zlib
! maybe-TAGS-target-zlib: TAGS-target-zlib
! 
! TAGS-target-zlib: \
!     configure-target-zlib 
! 	@[ -f $(TARGET_SUBDIR)/zlib/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing TAGS in $(TARGET_SUBDIR)/zlib" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/zlib && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           TAGS) \
  	  || exit 1
  
! @endif target-zlib
  
! .PHONY: maybe-install-info-target-zlib install-info-target-zlib
! maybe-install-info-target-zlib:
! @if target-zlib
! maybe-install-info-target-zlib: install-info-target-zlib
  
! install-info-target-zlib: \
!     configure-target-zlib \
!     info-target-zlib 
! 	@[ -f $(TARGET_SUBDIR)/zlib/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing install-info in $(TARGET_SUBDIR)/zlib" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/zlib && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           install-info) \
! 	  || exit 1
  
+ @endif target-zlib
  
! .PHONY: maybe-installcheck-target-zlib installcheck-target-zlib
! maybe-installcheck-target-zlib:
! @if target-zlib
! maybe-installcheck-target-zlib: installcheck-target-zlib
  
! installcheck-target-zlib: \
!     configure-target-zlib 
! 	@[ -f $(TARGET_SUBDIR)/zlib/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing installcheck in $(TARGET_SUBDIR)/zlib" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/zlib && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           installcheck) \
! 	  || exit 1
  
+ @endif target-zlib
  
! .PHONY: maybe-mostlyclean-target-zlib mostlyclean-target-zlib
! maybe-mostlyclean-target-zlib:
! @if target-zlib
! maybe-mostlyclean-target-zlib: mostlyclean-target-zlib
! 
! mostlyclean-target-zlib: 
! 	@[ -f $(TARGET_SUBDIR)/zlib/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing mostlyclean in $(TARGET_SUBDIR)/zlib" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/zlib && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           mostlyclean) \
  	  || exit 1
  
! @endif target-zlib
! 
! .PHONY: maybe-clean-target-zlib clean-target-zlib
! maybe-clean-target-zlib:
! @if target-zlib
! maybe-clean-target-zlib: clean-target-zlib
! 
! clean-target-zlib: 
! 	@[ -f $(TARGET_SUBDIR)/zlib/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing clean in $(TARGET_SUBDIR)/zlib" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/zlib && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           clean) \
! 	  || exit 1
  
! @endif target-zlib
  
! .PHONY: maybe-distclean-target-zlib distclean-target-zlib
! maybe-distclean-target-zlib:
! @if target-zlib
! maybe-distclean-target-zlib: distclean-target-zlib
! 
! distclean-target-zlib: 
! 	@[ -f $(TARGET_SUBDIR)/zlib/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing distclean in $(TARGET_SUBDIR)/zlib" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/zlib && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           distclean) \
! 	  || exit 1
  
+ @endif target-zlib
  
! .PHONY: maybe-maintainer-clean-target-zlib maintainer-clean-target-zlib
! maybe-maintainer-clean-target-zlib:
! @if target-zlib
! maybe-maintainer-clean-target-zlib: maintainer-clean-target-zlib
  
! maintainer-clean-target-zlib: 
! 	@[ -f $(TARGET_SUBDIR)/zlib/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing maintainer-clean in $(TARGET_SUBDIR)/zlib" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/zlib && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           maintainer-clean) \
! 	  || exit 1
! 
! @endif target-zlib
  
  
! .PHONY: configure-target-boehm-gc maybe-configure-target-boehm-gc
! maybe-configure-target-boehm-gc:
! @if target-boehm-gc
! maybe-configure-target-boehm-gc: configure-target-boehm-gc
! 
! # There's only one multilib.out.  Cleverer subdirs shouldn't need it copied.
! $(TARGET_SUBDIR)/boehm-gc/multilib.out: multilib.out
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/boehm-gc ; \
! 	rm -f $(TARGET_SUBDIR)/boehm-gc/Makefile || : ; \
! 	cp multilib.out $(TARGET_SUBDIR)/boehm-gc/multilib.out
! 
! configure-target-boehm-gc: $(TARGET_SUBDIR)/boehm-gc/multilib.out
! 	@test ! -f $(TARGET_SUBDIR)/boehm-gc/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/boehm-gc ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo Configuring in $(TARGET_SUBDIR)/boehm-gc; \
! 	cd "$(TARGET_SUBDIR)/boehm-gc" || exit 1; \
  	case $(srcdir) in \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    topdir=$(srcdir) ;; \
  	  *) \
! 	    case "$(TARGET_SUBDIR)" in \
! 	      .) topdir="../$(srcdir)" ;; \
! 	      *) topdir="../../$(srcdir)" ;; \
! 	    esac ;; \
  	esac; \
! 	  srcdiroption="--srcdir=$${topdir}/boehm-gc"; \
! 	  libsrcdir="$$s/boehm-gc"; \
! 	rm -f no-such-file || : ; \
! 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
! 	  $(TARGET_CONFIGARGS) $${srcdiroption} \
! 	  --with-target-subdir="$(TARGET_SUBDIR)"  \
  	  || exit 1
+ @endif target-boehm-gc
  
! .PHONY: all-target-boehm-gc maybe-all-target-boehm-gc
! maybe-all-target-boehm-gc:
! @if target-boehm-gc
! TARGET-target-boehm-gc=all
! maybe-all-target-boehm-gc: all-target-boehm-gc
! all-target-boehm-gc: configure-target-boehm-gc
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/boehm-gc && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)   $(TARGET-target-boehm-gc))
! @endif target-boehm-gc
  
! .PHONY: check-target-boehm-gc maybe-check-target-boehm-gc
! maybe-check-target-boehm-gc:
! @if target-boehm-gc
! maybe-check-target-boehm-gc: check-target-boehm-gc
  
! check-target-boehm-gc:
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/boehm-gc && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)   check)
  
+ @endif target-boehm-gc
  
! .PHONY: install-target-boehm-gc maybe-install-target-boehm-gc
! maybe-install-target-boehm-gc:
! @if target-boehm-gc
! maybe-install-target-boehm-gc: install-target-boehm-gc
  
! install-target-boehm-gc: installdirs
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/boehm-gc && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  install)
  
+ @endif target-boehm-gc
  
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-target-boehm-gc info-target-boehm-gc
! maybe-info-target-boehm-gc:
! @if target-boehm-gc
! maybe-info-target-boehm-gc: info-target-boehm-gc
! 
! info-target-boehm-gc: \
!     configure-target-boehm-gc 
! 	@[ -f $(TARGET_SUBDIR)/boehm-gc/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing info in $(TARGET_SUBDIR)/boehm-gc" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/boehm-gc && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           info) \
  	  || exit 1
  
! @endif target-boehm-gc
! 
! .PHONY: maybe-dvi-target-boehm-gc dvi-target-boehm-gc
! maybe-dvi-target-boehm-gc:
! @if target-boehm-gc
! maybe-dvi-target-boehm-gc: dvi-target-boehm-gc
! 
! dvi-target-boehm-gc: \
!     configure-target-boehm-gc 
! 	@[ -f $(TARGET_SUBDIR)/boehm-gc/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing dvi in $(TARGET_SUBDIR)/boehm-gc" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/boehm-gc && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           dvi) \
! 	  || exit 1
  
! @endif target-boehm-gc
  
! .PHONY: maybe-html-target-boehm-gc html-target-boehm-gc
! maybe-html-target-boehm-gc:
! @if target-boehm-gc
! maybe-html-target-boehm-gc: html-target-boehm-gc
! 
! html-target-boehm-gc: \
!     configure-target-boehm-gc 
! 	@[ -f $(TARGET_SUBDIR)/boehm-gc/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing html in $(TARGET_SUBDIR)/boehm-gc" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/boehm-gc && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           html) \
! 	  || exit 1
  
+ @endif target-boehm-gc
  
! .PHONY: maybe-TAGS-target-boehm-gc TAGS-target-boehm-gc
! maybe-TAGS-target-boehm-gc:
! @if target-boehm-gc
! maybe-TAGS-target-boehm-gc: TAGS-target-boehm-gc
  
! TAGS-target-boehm-gc: \
!     configure-target-boehm-gc 
! 	@[ -f $(TARGET_SUBDIR)/boehm-gc/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing TAGS in $(TARGET_SUBDIR)/boehm-gc" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/boehm-gc && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           TAGS) \
! 	  || exit 1
  
+ @endif target-boehm-gc
  
! .PHONY: maybe-install-info-target-boehm-gc install-info-target-boehm-gc
! maybe-install-info-target-boehm-gc:
! @if target-boehm-gc
! maybe-install-info-target-boehm-gc: install-info-target-boehm-gc
! 
! install-info-target-boehm-gc: \
!     configure-target-boehm-gc \
!     info-target-boehm-gc 
! 	@[ -f $(TARGET_SUBDIR)/boehm-gc/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing install-info in $(TARGET_SUBDIR)/boehm-gc" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/boehm-gc && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           install-info) \
  	  || exit 1
  
! @endif target-boehm-gc
! 
! .PHONY: maybe-installcheck-target-boehm-gc installcheck-target-boehm-gc
! maybe-installcheck-target-boehm-gc:
! @if target-boehm-gc
! maybe-installcheck-target-boehm-gc: installcheck-target-boehm-gc
! 
! installcheck-target-boehm-gc: \
!     configure-target-boehm-gc 
! 	@[ -f $(TARGET_SUBDIR)/boehm-gc/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing installcheck in $(TARGET_SUBDIR)/boehm-gc" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/boehm-gc && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           installcheck) \
! 	  || exit 1
  
! @endif target-boehm-gc
  
! .PHONY: maybe-mostlyclean-target-boehm-gc mostlyclean-target-boehm-gc
! maybe-mostlyclean-target-boehm-gc:
! @if target-boehm-gc
! maybe-mostlyclean-target-boehm-gc: mostlyclean-target-boehm-gc
  
+ mostlyclean-target-boehm-gc: 
+ 	@[ -f $(TARGET_SUBDIR)/boehm-gc/Makefile ] || exit 0 ; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(SET_LIB_PATH) \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	echo "Doing mostlyclean in $(TARGET_SUBDIR)/boehm-gc" ; \
+ 	for flag in $(EXTRA_TARGET_FLAGS); do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	(cd $(TARGET_SUBDIR)/boehm-gc && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ 	           mostlyclean) \
+ 	  || exit 1
  
! @endif target-boehm-gc
  
! .PHONY: maybe-clean-target-boehm-gc clean-target-boehm-gc
! maybe-clean-target-boehm-gc:
! @if target-boehm-gc
! maybe-clean-target-boehm-gc: clean-target-boehm-gc
! 
! clean-target-boehm-gc: 
! 	@[ -f $(TARGET_SUBDIR)/boehm-gc/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing clean in $(TARGET_SUBDIR)/boehm-gc" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/boehm-gc && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           clean) \
! 	  || exit 1
  
+ @endif target-boehm-gc
  
! .PHONY: maybe-distclean-target-boehm-gc distclean-target-boehm-gc
! maybe-distclean-target-boehm-gc:
! @if target-boehm-gc
! maybe-distclean-target-boehm-gc: distclean-target-boehm-gc
! 
! distclean-target-boehm-gc: 
! 	@[ -f $(TARGET_SUBDIR)/boehm-gc/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing distclean in $(TARGET_SUBDIR)/boehm-gc" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/boehm-gc && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           distclean) \
! 	  || exit 1
! 
! @endif target-boehm-gc
! 
! .PHONY: maybe-maintainer-clean-target-boehm-gc maintainer-clean-target-boehm-gc
! maybe-maintainer-clean-target-boehm-gc:
! @if target-boehm-gc
! maybe-maintainer-clean-target-boehm-gc: maintainer-clean-target-boehm-gc
! 
! maintainer-clean-target-boehm-gc: 
! 	@[ -f $(TARGET_SUBDIR)/boehm-gc/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing maintainer-clean in $(TARGET_SUBDIR)/boehm-gc" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/boehm-gc && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           maintainer-clean) \
! 	  || exit 1
! 
! @endif target-boehm-gc
! 
! 
! .PHONY: configure-target-qthreads maybe-configure-target-qthreads
! maybe-configure-target-qthreads:
! @if target-qthreads
! maybe-configure-target-qthreads: configure-target-qthreads
! 
! # There's only one multilib.out.  Cleverer subdirs shouldn't need it copied.
! $(TARGET_SUBDIR)/qthreads/multilib.out: multilib.out
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/qthreads ; \
! 	rm -f $(TARGET_SUBDIR)/qthreads/Makefile || : ; \
! 	cp multilib.out $(TARGET_SUBDIR)/qthreads/multilib.out
! 
! configure-target-qthreads: $(TARGET_SUBDIR)/qthreads/multilib.out
! 	@test ! -f $(TARGET_SUBDIR)/qthreads/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/qthreads ; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo Configuring in $(TARGET_SUBDIR)/qthreads; \
! 	cd "$(TARGET_SUBDIR)/qthreads" || exit 1; \
  	case $(srcdir) in \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    topdir=$(srcdir) ;; \
  	  *) \
! 	    case "$(TARGET_SUBDIR)" in \
! 	      .) topdir="../$(srcdir)" ;; \
! 	      *) topdir="../../$(srcdir)" ;; \
! 	    esac ;; \
  	esac; \
! 	  srcdiroption="--srcdir=$${topdir}/qthreads"; \
! 	  libsrcdir="$$s/qthreads"; \
! 	rm -f no-such-file || : ; \
! 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
! 	  $(TARGET_CONFIGARGS) $${srcdiroption} \
! 	  --with-target-subdir="$(TARGET_SUBDIR)"  \
  	  || exit 1
+ @endif target-qthreads
  
! .PHONY: all-target-qthreads maybe-all-target-qthreads
! maybe-all-target-qthreads:
! @if target-qthreads
! TARGET-target-qthreads=all
! maybe-all-target-qthreads: all-target-qthreads
! all-target-qthreads: configure-target-qthreads
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/qthreads && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)   $(TARGET-target-qthreads))
! @endif target-qthreads
  
! .PHONY: check-target-qthreads maybe-check-target-qthreads
! maybe-check-target-qthreads:
! @if target-qthreads
! maybe-check-target-qthreads: check-target-qthreads
  
! check-target-qthreads:
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/qthreads && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)   check)
  
+ @endif target-qthreads
  
! .PHONY: install-target-qthreads maybe-install-target-qthreads
! maybe-install-target-qthreads:
! @if target-qthreads
! maybe-install-target-qthreads: install-target-qthreads
  
! install-target-qthreads: installdirs
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/qthreads && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  install)
  
+ @endif target-qthreads
  
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-target-qthreads info-target-qthreads
! maybe-info-target-qthreads:
! @if target-qthreads
! maybe-info-target-qthreads: info-target-qthreads
! 
! info-target-qthreads: \
!     configure-target-qthreads 
! 	@[ -f $(TARGET_SUBDIR)/qthreads/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing info in $(TARGET_SUBDIR)/qthreads" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/qthreads && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           info) \
  	  || exit 1
  
! @endif target-qthreads
  
! .PHONY: maybe-dvi-target-qthreads dvi-target-qthreads
! maybe-dvi-target-qthreads:
! @if target-qthreads
! maybe-dvi-target-qthreads: dvi-target-qthreads
  
! dvi-target-qthreads: \
!     configure-target-qthreads 
! 	@[ -f $(TARGET_SUBDIR)/qthreads/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing dvi in $(TARGET_SUBDIR)/qthreads" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/qthreads && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           dvi) \
! 	  || exit 1
  
+ @endif target-qthreads
  
! .PHONY: maybe-html-target-qthreads html-target-qthreads
! maybe-html-target-qthreads:
! @if target-qthreads
! maybe-html-target-qthreads: html-target-qthreads
  
! html-target-qthreads: \
!     configure-target-qthreads 
! 	@[ -f $(TARGET_SUBDIR)/qthreads/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing html in $(TARGET_SUBDIR)/qthreads" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/qthreads && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           html) \
! 	  || exit 1
  
+ @endif target-qthreads
  
! .PHONY: maybe-TAGS-target-qthreads TAGS-target-qthreads
! maybe-TAGS-target-qthreads:
! @if target-qthreads
! maybe-TAGS-target-qthreads: TAGS-target-qthreads
! 
! TAGS-target-qthreads: \
!     configure-target-qthreads 
! 	@[ -f $(TARGET_SUBDIR)/qthreads/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing TAGS in $(TARGET_SUBDIR)/qthreads" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/qthreads && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           TAGS) \
  	  || exit 1
  
! @endif target-qthreads
  
! .PHONY: maybe-install-info-target-qthreads install-info-target-qthreads
! maybe-install-info-target-qthreads:
! @if target-qthreads
! maybe-install-info-target-qthreads: install-info-target-qthreads
  
! install-info-target-qthreads: \
!     configure-target-qthreads \
!     info-target-qthreads 
! 	@[ -f $(TARGET_SUBDIR)/qthreads/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing install-info in $(TARGET_SUBDIR)/qthreads" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/qthreads && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           install-info) \
! 	  || exit 1
  
+ @endif target-qthreads
  
! .PHONY: maybe-installcheck-target-qthreads installcheck-target-qthreads
! maybe-installcheck-target-qthreads:
! @if target-qthreads
! maybe-installcheck-target-qthreads: installcheck-target-qthreads
  
! installcheck-target-qthreads: \
!     configure-target-qthreads 
! 	@[ -f $(TARGET_SUBDIR)/qthreads/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing installcheck in $(TARGET_SUBDIR)/qthreads" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/qthreads && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           installcheck) \
! 	  || exit 1
  
+ @endif target-qthreads
  
! .PHONY: maybe-mostlyclean-target-qthreads mostlyclean-target-qthreads
! maybe-mostlyclean-target-qthreads:
! @if target-qthreads
! maybe-mostlyclean-target-qthreads: mostlyclean-target-qthreads
! 
! mostlyclean-target-qthreads: 
! 	@[ -f $(TARGET_SUBDIR)/qthreads/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing mostlyclean in $(TARGET_SUBDIR)/qthreads" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/qthreads && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           mostlyclean) \
  	  || exit 1
  
! @endif target-qthreads
! 
! .PHONY: maybe-clean-target-qthreads clean-target-qthreads
! maybe-clean-target-qthreads:
! @if target-qthreads
! maybe-clean-target-qthreads: clean-target-qthreads
! 
! clean-target-qthreads: 
! 	@[ -f $(TARGET_SUBDIR)/qthreads/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing clean in $(TARGET_SUBDIR)/qthreads" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/qthreads && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           clean) \
! 	  || exit 1
  
! @endif target-qthreads
  
! .PHONY: maybe-distclean-target-qthreads distclean-target-qthreads
! maybe-distclean-target-qthreads:
! @if target-qthreads
! maybe-distclean-target-qthreads: distclean-target-qthreads
! 
! distclean-target-qthreads: 
! 	@[ -f $(TARGET_SUBDIR)/qthreads/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing distclean in $(TARGET_SUBDIR)/qthreads" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/qthreads && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           distclean) \
! 	  || exit 1
  
+ @endif target-qthreads
  
! .PHONY: maybe-maintainer-clean-target-qthreads maintainer-clean-target-qthreads
! maybe-maintainer-clean-target-qthreads:
! @if target-qthreads
! maybe-maintainer-clean-target-qthreads: maintainer-clean-target-qthreads
  
! maintainer-clean-target-qthreads: 
! 	@[ -f $(TARGET_SUBDIR)/qthreads/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing maintainer-clean in $(TARGET_SUBDIR)/qthreads" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/qthreads && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           maintainer-clean) \
! 	  || exit 1
  
+ @endif target-qthreads
  
! 
! .PHONY: configure-target-rda maybe-configure-target-rda
! maybe-configure-target-rda:
! @if target-rda
! maybe-configure-target-rda: configure-target-rda
! 
! # There's only one multilib.out.  Cleverer subdirs shouldn't need it copied.
! $(TARGET_SUBDIR)/rda/multilib.out: multilib.out
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/rda ; \
! 	rm -f $(TARGET_SUBDIR)/rda/Makefile || : ; \
! 	cp multilib.out $(TARGET_SUBDIR)/rda/multilib.out
! 
! configure-target-rda: $(TARGET_SUBDIR)/rda/multilib.out
! 	@test ! -f $(TARGET_SUBDIR)/rda/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/rda ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo Configuring in $(TARGET_SUBDIR)/rda; \
! 	cd "$(TARGET_SUBDIR)/rda" || exit 1; \
  	case $(srcdir) in \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    topdir=$(srcdir) ;; \
  	  *) \
! 	    case "$(TARGET_SUBDIR)" in \
! 	      .) topdir="../$(srcdir)" ;; \
! 	      *) topdir="../../$(srcdir)" ;; \
! 	    esac ;; \
  	esac; \
! 	  srcdiroption="--srcdir=$${topdir}/rda"; \
! 	  libsrcdir="$$s/rda"; \
! 	rm -f no-such-file || : ; \
! 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
! 	  $(TARGET_CONFIGARGS) $${srcdiroption} \
! 	  --with-target-subdir="$(TARGET_SUBDIR)"  \
  	  || exit 1
+ @endif target-rda
  
! .PHONY: all-target-rda maybe-all-target-rda
! maybe-all-target-rda:
! @if target-rda
! TARGET-target-rda=all
! maybe-all-target-rda: all-target-rda
! all-target-rda: configure-target-rda
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/rda && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)   $(TARGET-target-rda))
! @endif target-rda
  
! .PHONY: check-target-rda maybe-check-target-rda
! maybe-check-target-rda:
! @if target-rda
! maybe-check-target-rda: check-target-rda
  
! check-target-rda:
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/rda && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)   check)
  
+ @endif target-rda
  
! .PHONY: install-target-rda maybe-install-target-rda
! maybe-install-target-rda:
! @if target-rda
! maybe-install-target-rda: install-target-rda
  
! install-target-rda: installdirs
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/rda && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  install)
  
+ @endif target-rda
  
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-target-rda info-target-rda
! maybe-info-target-rda:
! @if target-rda
! maybe-info-target-rda: info-target-rda
! 
! info-target-rda: \
!     configure-target-rda 
! 	@[ -f $(TARGET_SUBDIR)/rda/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing info in $(TARGET_SUBDIR)/rda" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/rda && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           info) \
  	  || exit 1
  
! @endif target-rda
! 
! .PHONY: maybe-dvi-target-rda dvi-target-rda
! maybe-dvi-target-rda:
! @if target-rda
! maybe-dvi-target-rda: dvi-target-rda
! 
! dvi-target-rda: \
!     configure-target-rda 
! 	@[ -f $(TARGET_SUBDIR)/rda/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing dvi in $(TARGET_SUBDIR)/rda" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/rda && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           dvi) \
! 	  || exit 1
  
! @endif target-rda
  
! .PHONY: maybe-html-target-rda html-target-rda
! maybe-html-target-rda:
! @if target-rda
! maybe-html-target-rda: html-target-rda
  
+ html-target-rda: \
+     configure-target-rda 
+ 	@[ -f $(TARGET_SUBDIR)/rda/Makefile ] || exit 0 ; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(SET_LIB_PATH) \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	echo "Doing html in $(TARGET_SUBDIR)/rda" ; \
+ 	for flag in $(EXTRA_TARGET_FLAGS); do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	(cd $(TARGET_SUBDIR)/rda && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ 	           html) \
+ 	  || exit 1
  
! @endif target-rda
  
! .PHONY: maybe-TAGS-target-rda TAGS-target-rda
! maybe-TAGS-target-rda:
! @if target-rda
! maybe-TAGS-target-rda: TAGS-target-rda
! 
! TAGS-target-rda: \
!     configure-target-rda 
! 	@[ -f $(TARGET_SUBDIR)/rda/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing TAGS in $(TARGET_SUBDIR)/rda" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/rda && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           TAGS) \
! 	  || exit 1
  
+ @endif target-rda
  
! .PHONY: maybe-install-info-target-rda install-info-target-rda
! maybe-install-info-target-rda:
! @if target-rda
! maybe-install-info-target-rda: install-info-target-rda
! 
! install-info-target-rda: \
!     configure-target-rda \
!     info-target-rda 
! 	@[ -f $(TARGET_SUBDIR)/rda/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing install-info in $(TARGET_SUBDIR)/rda" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/rda && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           install-info) \
  	  || exit 1
  
! @endif target-rda
! 
! .PHONY: maybe-installcheck-target-rda installcheck-target-rda
! maybe-installcheck-target-rda:
! @if target-rda
! maybe-installcheck-target-rda: installcheck-target-rda
! 
! installcheck-target-rda: \
!     configure-target-rda 
! 	@[ -f $(TARGET_SUBDIR)/rda/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing installcheck in $(TARGET_SUBDIR)/rda" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/rda && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           installcheck) \
! 	  || exit 1
  
! @endif target-rda
  
! .PHONY: maybe-mostlyclean-target-rda mostlyclean-target-rda
! maybe-mostlyclean-target-rda:
! @if target-rda
! maybe-mostlyclean-target-rda: mostlyclean-target-rda
! 
! mostlyclean-target-rda: 
! 	@[ -f $(TARGET_SUBDIR)/rda/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing mostlyclean in $(TARGET_SUBDIR)/rda" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/rda && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           mostlyclean) \
! 	  || exit 1
  
+ @endif target-rda
  
! .PHONY: maybe-clean-target-rda clean-target-rda
! maybe-clean-target-rda:
! @if target-rda
! maybe-clean-target-rda: clean-target-rda
  
! clean-target-rda: 
! 	@[ -f $(TARGET_SUBDIR)/rda/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing clean in $(TARGET_SUBDIR)/rda" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/rda && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           clean) \
! 	  || exit 1
  
+ @endif target-rda
  
! .PHONY: maybe-distclean-target-rda distclean-target-rda
! maybe-distclean-target-rda:
! @if target-rda
! maybe-distclean-target-rda: distclean-target-rda
! 
! distclean-target-rda: 
! 	@[ -f $(TARGET_SUBDIR)/rda/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing distclean in $(TARGET_SUBDIR)/rda" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/rda && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           distclean) \
! 	  || exit 1
! 
! @endif target-rda
! 
! .PHONY: maybe-maintainer-clean-target-rda maintainer-clean-target-rda
! maybe-maintainer-clean-target-rda:
! @if target-rda
! maybe-maintainer-clean-target-rda: maintainer-clean-target-rda
! 
! maintainer-clean-target-rda: 
! 	@[ -f $(TARGET_SUBDIR)/rda/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing maintainer-clean in $(TARGET_SUBDIR)/rda" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/rda && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           maintainer-clean) \
! 	  || exit 1
! 
! @endif target-rda
! 
! 
! .PHONY: configure-target-libada maybe-configure-target-libada
! maybe-configure-target-libada:
! @if target-libada
! maybe-configure-target-libada: configure-target-libada
! 
! # There's only one multilib.out.  Cleverer subdirs shouldn't need it copied.
! $(TARGET_SUBDIR)/libada/multilib.out: multilib.out
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libada ; \
! 	rm -f $(TARGET_SUBDIR)/libada/Makefile || : ; \
! 	cp multilib.out $(TARGET_SUBDIR)/libada/multilib.out
! 
! configure-target-libada: $(TARGET_SUBDIR)/libada/multilib.out
! 	@test ! -f $(TARGET_SUBDIR)/libada/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libada ; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo Configuring in $(TARGET_SUBDIR)/libada; \
! 	cd "$(TARGET_SUBDIR)/libada" || exit 1; \
  	case $(srcdir) in \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    topdir=$(srcdir) ;; \
  	  *) \
! 	    case "$(TARGET_SUBDIR)" in \
! 	      .) topdir="../$(srcdir)" ;; \
! 	      *) topdir="../../$(srcdir)" ;; \
! 	    esac ;; \
  	esac; \
! 	  srcdiroption="--srcdir=$${topdir}/libada"; \
! 	  libsrcdir="$$s/libada"; \
! 	rm -f no-such-file || : ; \
! 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
! 	  $(TARGET_CONFIGARGS) $${srcdiroption} \
! 	  --with-target-subdir="$(TARGET_SUBDIR)"  \
  	  || exit 1
+ @endif target-libada
  
! .PHONY: all-target-libada maybe-all-target-libada
! maybe-all-target-libada:
! @if target-libada
! TARGET-target-libada=all
! maybe-all-target-libada: all-target-libada
! all-target-libada: configure-target-libada
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/libada && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)   $(TARGET-target-libada))
! @endif target-libada
  
! .PHONY: check-target-libada maybe-check-target-libada
! maybe-check-target-libada:
! @if target-libada
! maybe-check-target-libada: check-target-libada
  
! check-target-libada:
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/libada && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)   check)
  
+ @endif target-libada
  
! .PHONY: install-target-libada maybe-install-target-libada
! maybe-install-target-libada:
! @if target-libada
! maybe-install-target-libada: install-target-libada
  
! install-target-libada: installdirs
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/libada && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  install)
  
+ @endif target-libada
  
! # Other targets (info, dvi, etc.)
! 
! .PHONY: maybe-info-target-libada info-target-libada
! maybe-info-target-libada:
! @if target-libada
! maybe-info-target-libada: info-target-libada
! 
! info-target-libada: \
!     configure-target-libada 
! 	@[ -f $(TARGET_SUBDIR)/libada/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing info in $(TARGET_SUBDIR)/libada" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libada && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           info) \
  	  || exit 1
  
! @endif target-libada
! 
! .PHONY: maybe-dvi-target-libada dvi-target-libada
! maybe-dvi-target-libada:
! @if target-libada
! maybe-dvi-target-libada: dvi-target-libada
! 
! dvi-target-libada: \
!     configure-target-libada 
! 	@[ -f $(TARGET_SUBDIR)/libada/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing dvi in $(TARGET_SUBDIR)/libada" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libada && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           dvi) \
! 	  || exit 1
  
! @endif target-libada
  
! .PHONY: maybe-html-target-libada html-target-libada
! maybe-html-target-libada:
! @if target-libada
! maybe-html-target-libada: html-target-libada
! 
! html-target-libada: \
!     configure-target-libada 
! 	@[ -f $(TARGET_SUBDIR)/libada/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing html in $(TARGET_SUBDIR)/libada" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libada && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           html) \
! 	  || exit 1
  
+ @endif target-libada
  
! .PHONY: maybe-TAGS-target-libada TAGS-target-libada
! maybe-TAGS-target-libada:
! @if target-libada
! maybe-TAGS-target-libada: TAGS-target-libada
  
! TAGS-target-libada: \
!     configure-target-libada 
! 	@[ -f $(TARGET_SUBDIR)/libada/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing TAGS in $(TARGET_SUBDIR)/libada" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libada && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           TAGS) \
! 	  || exit 1
  
+ @endif target-libada
  
! .PHONY: maybe-install-info-target-libada install-info-target-libada
! maybe-install-info-target-libada:
! @if target-libada
! maybe-install-info-target-libada: install-info-target-libada
! 
! install-info-target-libada: \
!     configure-target-libada \
!     info-target-libada 
! 	@[ -f $(TARGET_SUBDIR)/libada/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing install-info in $(TARGET_SUBDIR)/libada" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libada && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           install-info) \
  	  || exit 1
  
! @endif target-libada
! 
! .PHONY: maybe-installcheck-target-libada installcheck-target-libada
! maybe-installcheck-target-libada:
! @if target-libada
! maybe-installcheck-target-libada: installcheck-target-libada
! 
! installcheck-target-libada: \
!     configure-target-libada 
! 	@[ -f $(TARGET_SUBDIR)/libada/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing installcheck in $(TARGET_SUBDIR)/libada" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libada && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           installcheck) \
! 	  || exit 1
  
! @endif target-libada
  
! .PHONY: maybe-mostlyclean-target-libada mostlyclean-target-libada
! maybe-mostlyclean-target-libada:
! @if target-libada
! maybe-mostlyclean-target-libada: mostlyclean-target-libada
! 
! mostlyclean-target-libada: 
! 	@[ -f $(TARGET_SUBDIR)/libada/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing mostlyclean in $(TARGET_SUBDIR)/libada" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libada && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           mostlyclean) \
! 	  || exit 1
  
+ @endif target-libada
  
! .PHONY: maybe-clean-target-libada clean-target-libada
! maybe-clean-target-libada:
! @if target-libada
! maybe-clean-target-libada: clean-target-libada
  
! clean-target-libada: 
! 	@[ -f $(TARGET_SUBDIR)/libada/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing clean in $(TARGET_SUBDIR)/libada" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libada && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           clean) \
! 	  || exit 1
  
+ @endif target-libada
  
! .PHONY: maybe-distclean-target-libada distclean-target-libada
! maybe-distclean-target-libada:
! @if target-libada
! maybe-distclean-target-libada: distclean-target-libada
! 
! distclean-target-libada: 
! 	@[ -f $(TARGET_SUBDIR)/libada/Makefile ] || exit 0 ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing distclean in $(TARGET_SUBDIR)/libada" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libada && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           distclean) \
  	  || exit 1
  
! @endif target-libada
! 
! .PHONY: maybe-maintainer-clean-target-libada maintainer-clean-target-libada
! maybe-maintainer-clean-target-libada:
! @if target-libada
! maybe-maintainer-clean-target-libada: maintainer-clean-target-libada
! 
! maintainer-clean-target-libada: 
! 	@[ -f $(TARGET_SUBDIR)/libada/Makefile ] || exit 0 ; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libada" ; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libada && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! 	           maintainer-clean) \
! 	  || exit 1
  
! @endif target-libada
  
! 
! 
! # ----------
! # GCC module
! # ----------
! 
! @if gcc-no-bootstrap
! # GCC has some more recursive targets, which trigger the old
! # (but still current, until the toplevel bootstrap project
! # is finished) compiler bootstrapping rules.
! 
! GCC_STRAP_TARGETS = bootstrap bootstrap-lean bootstrap2 bootstrap2-lean bootstrap3 bootstrap3-lean bootstrap4 bootstrap4-lean bubblestrap quickstrap cleanstrap restrap
! .PHONY: $(GCC_STRAP_TARGETS)
! $(GCC_STRAP_TARGETS): all-prebootstrap configure-gcc
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	echo "Bootstrapping the compiler"; \
! 	cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) $@
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	case "$@" in \
! 	  *bootstrap4-lean ) \
! 	    msg="Comparing stage3 and stage4 of the compiler"; \
! 	    compare=compare3-lean ;; \
! 	  *bootstrap4 ) \
! 	    msg="Comparing stage3 and stage4 of the compiler"; \
! 	    compare=compare3 ;; \
! 	  *-lean ) \
! 	    msg="Comparing stage2 and stage3 of the compiler"; \
! 	    compare=compare-lean ;; \
! 	  * ) \
! 	    msg="Comparing stage2 and stage3 of the compiler"; \
! 	    compare=compare ;; \
! 	esac; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	echo "$$msg"; \
! 	cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) $$compare
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}` ; export s; \
! 	$(SET_LIB_PATH) \
! 	echo "Building runtime libraries"; \
! 	$(MAKE) $(RECURSE_FLAGS_TO_PASS) all
  
! profiledbootstrap: all-prebootstrap configure-gcc
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	echo "Bootstrapping training compiler"; \
! 	cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) stageprofile_build
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	echo "Building feedback based compiler"; \
! 	cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) stagefeedback_build
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}` ; export s; \
! 	$(SET_LIB_PATH) \
! 	echo "Building runtime libraries"; \
! 	$(MAKE) $(RECURSE_FLAGS_TO_PASS) all
  
! .PHONY: cross
! cross: all-build all-gas all-ld
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	echo "Building the C and C++ compiler"; \
! 	cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) LANGUAGES="c c++"
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}` ; export s; \
! 	$(SET_LIB_PATH) \
! 	echo "Building runtime libraries"; \
! 	$(MAKE) $(RECURSE_FLAGS_TO_PASS) LANGUAGES="c c++" all
! @endif gcc-no-bootstrap
  
+ @if gcc
+ .PHONY: check-gcc-c++
+ check-gcc-c++:
+ 	@if [ -f ./gcc/Makefile ] ; then \
+ 	  r=`${PWD_COMMAND}`; export r; \
+ 	  s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	  $(SET_LIB_PATH) \
+ 	  $(HOST_EXPORTS) \
+ 	  (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) check-c++); \
+ 	else \
+ 	  true; \
+ 	fi
  
! .PHONY: check-c++
! check-c++: check-target-libstdc++-v3 check-gcc-c++
! 
! # Install the gcc headers files, but not the fixed include files,
! # which Cygnus is not allowed to distribute.  This rule is very
! # dependent on the workings of the gcc Makefile.in.
! .PHONY: gcc-no-fixedincludes
! gcc-no-fixedincludes:
! 	@if [ -f ./gcc/Makefile ]; then \
! 	  rm -rf gcc/tmp-include; \
! 	  mv gcc/include gcc/tmp-include 2>/dev/null; \
! 	  mkdir gcc/include; \
! 	  cp $(srcdir)/gcc/gsyslimits.h gcc/include/syslimits.h; \
! 	  touch gcc/stmp-fixinc gcc/include/fixed; \
! 	  rm -f gcc/stmp-headers gcc/stmp-int-hdrs; \
! 	  r=`${PWD_COMMAND}`; export r; \
! 	  s=`cd $(srcdir); ${PWD_COMMAND}` ; export s; \
! 	  $(SET_LIB_PATH) \
! 	  $(HOST_EXPORTS) \
! 	  (cd ./gcc && \
! 	   $(MAKE) $(GCC_FLAGS_TO_PASS) install); \
! 	  rm -rf gcc/include; \
! 	  mv gcc/tmp-include gcc/include 2>/dev/null; \
! 	else true; fi
! @endif gcc
! 
! # ---------------------
! # GCC bootstrap support
! # ---------------------
! 
! # We track the current stage (the one in 'gcc') in the stage_current file.
! # stage_last instead tracks the stage that was built last.  These targets
! # are dummy when toplevel bootstrap is not active.
! 
! .PHONY: unstage
! unstage:
! @if gcc-bootstrap
! 	@[ -f stage_current ] || $(MAKE) `cat stage_last`-start
! @endif gcc-bootstrap
! 
! .PHONY: stage
! stage:
! @if gcc-bootstrap
! 	@$(MAKE) `cat stage_current`-end
! @endif gcc-bootstrap
! 
! # We name the build directories for the various stages "stage1-gcc",
! # "stage2-gcc","stage3-gcc", etc.
! 
! # Since the 'compare' process will fail (on debugging information) if any
! # directory names are different, we need to link the gcc directory for
! # the previous stage to a constant name ('gcc-prev'), and to make the name of
! # the build directories constant as well. For the latter, we use naked names
! # like 'gcc', because the scripts in that directory assume it.  We use
! # mv on platforms where symlinks to directories do not work or are not
! # reliable.
! 
! # At the end of the bootstrap, a symlink to 'stage3-gcc' named 'gcc' must
! # be kept, so that libraries can find it.  Ick!
! 
! # It would be best to preinstall gcc into a staging area (and in the
! # future, gather there all prebootstrap packages).  This would allow
! # assemblers and linkers can be bootstrapped as well as the compiler
! # (both in a combined tree, or separately).  This however requires some
! # change to the gcc driver, again in order to avoid comparison failures.
! 
! # Bugs: This is crippled when doing parallel make, the `make all-host'
! # and `make all-target' phases can be parallelized.
! 
! 
! # 'touch' doesn't work right on some platforms.
! STAMP = echo timestamp > 
! 
! # Only build the C compiler for stage1, because that is the only one that
! # we can guarantee will build with the native compiler, and also it is the
! # only thing useful for building stage2. STAGE1_CFLAGS (via CFLAGS),
! # MAKEINFO and MAKEINFOFLAGS are explicitly passed here to make them
! # overrideable (for a bootstrap build stage1 also builds gcc.info).
! 
! STAGE1_CFLAGS=@stage1_cflags@
! STAGE1_LANGUAGES=@stage1_languages@
! 
! # We only want to compare .o files, so set this!
! objext = .o
! 
! # Flags to pass to stage2 and later makes.
! POSTSTAGE1_FLAGS_TO_PASS = \
! 	CC="$${CC}" CC_FOR_BUILD="$${CC_FOR_BUILD}" \
! 	STAGE_PREFIX=$$r/stage-gcc/ \
! 	CFLAGS="$(BOOT_CFLAGS)" \
! 	ADAC="\$$(CC)"
! 
! # For stage 1:
! # * We force-disable intermodule optimizations, even if
! #   --enable-intermodule was passed, since the installed compiler probably
! #   can't handle them.  Luckily, autoconf always respects
! #   the last argument when conflicting --enable arguments are passed.
! # * Likewise, we force-disable coverage flags, since the installed compiler
! #   probably has never heard of them.
! # * We build only C (and possibly Ada).
! 
! 
! .PHONY: stage1-start stage1-end
! 
! stage1-start::
! 	@[ -f stage_current ] && $(MAKE) `cat stage_current`-end || : ; \
! 	echo stage1 > stage_current ; \
! 	echo stage1 > stage_last
! @if bfd
! 	@[ -d stage1-bfd ] || mkdir stage1-bfd; \
! 	set stage1-bfd bfd ; @CREATE_LINK_TO_DIR@ 
! @endif bfd
! @if opcodes
! 	@[ -d stage1-opcodes ] || mkdir stage1-opcodes; \
! 	set stage1-opcodes opcodes ; @CREATE_LINK_TO_DIR@ 
! @endif opcodes
! @if binutils
! 	@[ -d stage1-binutils ] || mkdir stage1-binutils; \
! 	set stage1-binutils binutils ; @CREATE_LINK_TO_DIR@ 
! @endif binutils
! @if gas
! 	@[ -d stage1-gas ] || mkdir stage1-gas; \
! 	set stage1-gas gas ; @CREATE_LINK_TO_DIR@ 
! @endif gas
! @if gcc
! 	@[ -d stage1-gcc ] || mkdir stage1-gcc; \
! 	set stage1-gcc gcc ; @CREATE_LINK_TO_DIR@ 
! @endif gcc
! @if intl
! 	@[ -d stage1-intl ] || mkdir stage1-intl; \
! 	set stage1-intl intl ; @CREATE_LINK_TO_DIR@ 
! @endif intl
! @if ld
! 	@[ -d stage1-ld ] || mkdir stage1-ld; \
! 	set stage1-ld ld ; @CREATE_LINK_TO_DIR@ 
! @endif ld
! @if libcpp
! 	@[ -d stage1-libcpp ] || mkdir stage1-libcpp; \
! 	set stage1-libcpp libcpp ; @CREATE_LINK_TO_DIR@ 
! @endif libcpp
! @if libiberty
! 	@[ -d stage1-libiberty ] || mkdir stage1-libiberty; \
! 	set stage1-libiberty libiberty ; @CREATE_LINK_TO_DIR@ 
! @endif libiberty
! @if zlib
! 	@[ -d stage1-zlib ] || mkdir stage1-zlib; \
! 	set stage1-zlib zlib ; @CREATE_LINK_TO_DIR@ 
! @endif zlib
! 
! stage1-end::
! 	@rm -f stage_current
! @if bfd
! 	@set bfd stage1-bfd ; @UNDO_LINK_TO_DIR@ 
! @endif bfd
! @if opcodes
! 	@set opcodes stage1-opcodes ; @UNDO_LINK_TO_DIR@ 
! @endif opcodes
! @if binutils
! 	@set binutils stage1-binutils ; @UNDO_LINK_TO_DIR@ 
! @endif binutils
! @if gas
! 	@set gas stage1-gas ; @UNDO_LINK_TO_DIR@ 
! @endif gas
! @if gcc
! 	@set gcc stage1-gcc ; @UNDO_LINK_TO_DIR@ 
! @endif gcc
! @if intl
! 	@set intl stage1-intl ; @UNDO_LINK_TO_DIR@ 
! @endif intl
! @if ld
! 	@set ld stage1-ld ; @UNDO_LINK_TO_DIR@ 
! @endif ld
! @if libcpp
! 	@set libcpp stage1-libcpp ; @UNDO_LINK_TO_DIR@ 
! @endif libcpp
! @if libiberty
! 	@set libiberty stage1-libiberty ; @UNDO_LINK_TO_DIR@ 
! @endif libiberty
! @if zlib
! 	@set zlib stage1-zlib ; @UNDO_LINK_TO_DIR@ 
! @endif zlib
! 
! # Bubble a bugfix through all the stages up to stage 1.  They
! # are remade, but not reconfigured.  The next stage (if any) will not
! # be reconfigured as well.
! .PHONY: stage1-bubble
! stage1-bubble:: 
! 	@if test -f stage1-lean  ; then \
! 	  echo Skipping rebuild of stage1 ; \
! 	else \
! 	  $(MAKE) $(RECURSE_FLAGS_TO_PASS) NOTPARALLEL= all-stage1; \
! 	fi
! 
! .PHONY: all-stage1 clean-stage1
! all-stage1:     \
!   maybe-all-stage1-bfd \
!   maybe-all-stage1-opcodes \
!   maybe-all-stage1-binutils              \
!   maybe-all-stage1-gas \
!   maybe-all-stage1-gcc        \
!   maybe-all-stage1-intl   \
!   maybe-all-stage1-ld \
!   maybe-all-stage1-libcpp  \
!   maybe-all-stage1-libiberty                        \
!   maybe-all-stage1-zlib       
! 
! do-clean: clean-stage1
! clean-stage1:     \
!   maybe-clean-stage1-bfd \
!   maybe-clean-stage1-opcodes \
!   maybe-clean-stage1-binutils              \
!   maybe-clean-stage1-gas \
!   maybe-clean-stage1-gcc        \
!   maybe-clean-stage1-intl   \
!   maybe-clean-stage1-ld \
!   maybe-clean-stage1-libcpp  \
!   maybe-clean-stage1-libiberty                        \
!   maybe-clean-stage1-zlib       
! 
! 
! .PHONY: configure-stage1-bfd maybe-configure-stage1-bfd
! .PHONY: all-stage1-bfd maybe-all-stage1-bfd
! .PHONY: clean-stage1-bfd maybe-clean-stage1-bfd
! 
! maybe-configure-stage1-bfd:
! maybe-all-stage1-bfd:
! maybe-clean-stage1-bfd:
! 
! @if bfd-bootstrap
! maybe-configure-stage1-bfd: configure-stage1-bfd
! configure-stage1-bfd:
! 	@$(MAKE) stage1-start
! 	@[ -f bfd/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(HOST_EXPORTS)  \
! 	echo Configuring stage 1 in bfd ; \
! 	cd bfd || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/bfd"; \
! 	    libsrcdir="$$s/bfd";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/bfd"; \
! 	    libsrcdir="$$s/bfd";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  --disable-intermodule 	  --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" 
  
! maybe-all-stage1-bfd: all-stage1-bfd
! all-stage1-bfd: configure-stage1-bfd
! 	@$(MAKE) stage1-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(HOST_EXPORTS)  \
! 	cd bfd && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		CFLAGS="$(STAGE1_CFLAGS)" 
  
+ maybe-clean-stage1-bfd: clean-stage1-bfd
+ clean-stage1-bfd:
+ 	@[ -f bfd/Makefile ] || [ -f stage1-bfd/Makefile ] \
+ 	  || exit 0 ; \
+ 	[ -f bfd/Makefile ] || $(MAKE) stage1-start ; \
+ 	cd bfd && \
+ 	$(MAKE) $(FLAGS_TO_PASS)  \
+ 		CFLAGS="$(STAGE1_CFLAGS)"  clean
+ @endif bfd-bootstrap
  
  
! .PHONY: configure-stage1-opcodes maybe-configure-stage1-opcodes
! .PHONY: all-stage1-opcodes maybe-all-stage1-opcodes
! .PHONY: clean-stage1-opcodes maybe-clean-stage1-opcodes
  
+ maybe-configure-stage1-opcodes:
+ maybe-all-stage1-opcodes:
+ maybe-clean-stage1-opcodes:
  
! @if opcodes-bootstrap
! maybe-configure-stage1-opcodes: configure-stage1-opcodes
! configure-stage1-opcodes:
! 	@$(MAKE) stage1-start
! 	@[ -f opcodes/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(HOST_EXPORTS)  \
! 	echo Configuring stage 1 in opcodes ; \
! 	cd opcodes || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/opcodes"; \
! 	    libsrcdir="$$s/opcodes";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/opcodes"; \
! 	    libsrcdir="$$s/opcodes";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  --disable-intermodule 	  --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" 
  
! maybe-all-stage1-opcodes: all-stage1-opcodes
! all-stage1-opcodes: configure-stage1-opcodes
! 	@$(MAKE) stage1-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(HOST_EXPORTS)  \
! 	cd opcodes && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		CFLAGS="$(STAGE1_CFLAGS)" 
  
+ maybe-clean-stage1-opcodes: clean-stage1-opcodes
+ clean-stage1-opcodes:
+ 	@[ -f opcodes/Makefile ] || [ -f stage1-opcodes/Makefile ] \
+ 	  || exit 0 ; \
+ 	[ -f opcodes/Makefile ] || $(MAKE) stage1-start ; \
+ 	cd opcodes && \
+ 	$(MAKE) $(FLAGS_TO_PASS)  \
+ 		CFLAGS="$(STAGE1_CFLAGS)"  clean
+ @endif opcodes-bootstrap
  
  
! .PHONY: configure-stage1-binutils maybe-configure-stage1-binutils
! .PHONY: all-stage1-binutils maybe-all-stage1-binutils
! .PHONY: clean-stage1-binutils maybe-clean-stage1-binutils
  
+ maybe-configure-stage1-binutils:
+ maybe-all-stage1-binutils:
+ maybe-clean-stage1-binutils:
  
! @if binutils-bootstrap
! maybe-configure-stage1-binutils: configure-stage1-binutils
! configure-stage1-binutils:
! 	@$(MAKE) stage1-start
! 	@[ -f binutils/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(HOST_EXPORTS)  \
! 	echo Configuring stage 1 in binutils ; \
! 	cd binutils || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/binutils"; \
! 	    libsrcdir="$$s/binutils";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/binutils"; \
! 	    libsrcdir="$$s/binutils";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  --disable-intermodule 	  --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" 
  
! maybe-all-stage1-binutils: all-stage1-binutils
! all-stage1-binutils: configure-stage1-binutils
! 	@$(MAKE) stage1-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(HOST_EXPORTS)  \
! 	cd binutils && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		CFLAGS="$(STAGE1_CFLAGS)" 
  
+ maybe-clean-stage1-binutils: clean-stage1-binutils
+ clean-stage1-binutils:
+ 	@[ -f binutils/Makefile ] || [ -f stage1-binutils/Makefile ] \
+ 	  || exit 0 ; \
+ 	[ -f binutils/Makefile ] || $(MAKE) stage1-start ; \
+ 	cd binutils && \
+ 	$(MAKE) $(FLAGS_TO_PASS)  \
+ 		CFLAGS="$(STAGE1_CFLAGS)"  clean
+ @endif binutils-bootstrap
  
  
! .PHONY: configure-stage1-gas maybe-configure-stage1-gas
! .PHONY: all-stage1-gas maybe-all-stage1-gas
! .PHONY: clean-stage1-gas maybe-clean-stage1-gas
  
+ maybe-configure-stage1-gas:
+ maybe-all-stage1-gas:
+ maybe-clean-stage1-gas:
  
! @if gas-bootstrap
! maybe-configure-stage1-gas: configure-stage1-gas
! configure-stage1-gas:
! 	@$(MAKE) stage1-start
! 	@[ -f gas/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(HOST_EXPORTS)  \
! 	echo Configuring stage 1 in gas ; \
! 	cd gas || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/gas"; \
! 	    libsrcdir="$$s/gas";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/gas"; \
! 	    libsrcdir="$$s/gas";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  --disable-intermodule 	  --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" 
  
! maybe-all-stage1-gas: all-stage1-gas
! all-stage1-gas: configure-stage1-gas
! 	@$(MAKE) stage1-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(HOST_EXPORTS)  \
! 	cd gas && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		CFLAGS="$(STAGE1_CFLAGS)" 
  
+ maybe-clean-stage1-gas: clean-stage1-gas
+ clean-stage1-gas:
+ 	@[ -f gas/Makefile ] || [ -f stage1-gas/Makefile ] \
+ 	  || exit 0 ; \
+ 	[ -f gas/Makefile ] || $(MAKE) stage1-start ; \
+ 	cd gas && \
+ 	$(MAKE) $(FLAGS_TO_PASS)  \
+ 		CFLAGS="$(STAGE1_CFLAGS)"  clean
+ @endif gas-bootstrap
  
  
! .PHONY: configure-stage1-gcc maybe-configure-stage1-gcc
! .PHONY: all-stage1-gcc maybe-all-stage1-gcc
! .PHONY: clean-stage1-gcc maybe-clean-stage1-gcc
  
+ maybe-configure-stage1-gcc:
+ maybe-all-stage1-gcc:
+ maybe-clean-stage1-gcc:
  
! @if gcc-bootstrap
! maybe-configure-stage1-gcc: configure-stage1-gcc
! configure-stage1-gcc:
! 	@$(MAKE) stage1-start
! 	@[ -f gcc/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(HOST_EXPORTS)  \
! 	echo Configuring stage 1 in gcc ; \
! 	cd gcc || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/gcc"; \
! 	    libsrcdir="$$s/gcc";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/gcc"; \
! 	    libsrcdir="$$s/gcc";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  --disable-intermodule 	  --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" 
  
! maybe-all-stage1-gcc: all-stage1-gcc
! all-stage1-gcc: configure-stage1-gcc
! 	@$(MAKE) stage1-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(HOST_EXPORTS)  \
! 	cd gcc && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		CFLAGS="$(STAGE1_CFLAGS)" $(EXTRA_GCC_FLAGS)
  
+ maybe-clean-stage1-gcc: clean-stage1-gcc
+ clean-stage1-gcc:
+ 	@[ -f gcc/Makefile ] || [ -f stage1-gcc/Makefile ] \
+ 	  || exit 0 ; \
+ 	[ -f gcc/Makefile ] || $(MAKE) stage1-start ; \
+ 	cd gcc && \
+ 	$(MAKE) $(FLAGS_TO_PASS)  \
+ 		CFLAGS="$(STAGE1_CFLAGS)" $(EXTRA_GCC_FLAGS) clean
+ @endif gcc-bootstrap
  
  
! .PHONY: configure-stage1-intl maybe-configure-stage1-intl
! .PHONY: all-stage1-intl maybe-all-stage1-intl
! .PHONY: clean-stage1-intl maybe-clean-stage1-intl
  
+ maybe-configure-stage1-intl:
+ maybe-all-stage1-intl:
+ maybe-clean-stage1-intl:
  
! @if intl-bootstrap
! maybe-configure-stage1-intl: configure-stage1-intl
! configure-stage1-intl:
! 	@$(MAKE) stage1-start
! 	@[ -f intl/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(HOST_EXPORTS)  \
! 	echo Configuring stage 1 in intl ; \
! 	cd intl || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/intl"; \
! 	    libsrcdir="$$s/intl";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/intl"; \
! 	    libsrcdir="$$s/intl";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  --disable-intermodule 	  --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" 
  
! maybe-all-stage1-intl: all-stage1-intl
! all-stage1-intl: configure-stage1-intl
! 	@$(MAKE) stage1-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(HOST_EXPORTS)  \
! 	cd intl && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		CFLAGS="$(STAGE1_CFLAGS)" 
  
+ maybe-clean-stage1-intl: clean-stage1-intl
+ clean-stage1-intl:
+ 	@[ -f intl/Makefile ] || [ -f stage1-intl/Makefile ] \
+ 	  || exit 0 ; \
+ 	[ -f intl/Makefile ] || $(MAKE) stage1-start ; \
+ 	cd intl && \
+ 	$(MAKE) $(FLAGS_TO_PASS)  \
+ 		CFLAGS="$(STAGE1_CFLAGS)"  clean
+ @endif intl-bootstrap
  
  
! .PHONY: configure-stage1-ld maybe-configure-stage1-ld
! .PHONY: all-stage1-ld maybe-all-stage1-ld
! .PHONY: clean-stage1-ld maybe-clean-stage1-ld
  
+ maybe-configure-stage1-ld:
+ maybe-all-stage1-ld:
+ maybe-clean-stage1-ld:
  
! @if ld-bootstrap
! maybe-configure-stage1-ld: configure-stage1-ld
! configure-stage1-ld:
! 	@$(MAKE) stage1-start
! 	@[ -f ld/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(HOST_EXPORTS)  \
! 	echo Configuring stage 1 in ld ; \
  	cd ld || exit 1; \
  	case $(srcdir) in \
  	  \.) \
*************** configure-ld:
*** 19728,19853 ****
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
! 
! .PHONY: all-ld maybe-all-ld
! maybe-all-ld:
! all-ld: configure-ld
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd ld && $(MAKE) $(FLAGS_TO_PASS) all)
! 
! .PHONY: check-ld maybe-check-ld
! maybe-check-ld:
  
! check-ld:
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd ld && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
- .PHONY: install-ld maybe-install-ld
- maybe-install-ld:
  
! install-ld: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd ld && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-libgui maybe-configure-libgui
! maybe-configure-libgui:
! configure-libgui:
! 	@test ! -f libgui/Makefile || exit 0; \
! 	[ -d libgui ] || mkdir libgui; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in libgui; \
! 	cd libgui || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/libgui"; \
! 	    libsrcdir="$$s/libgui";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/libgui"; \
! 	    libsrcdir="$$s/libgui";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
! 
! .PHONY: all-libgui maybe-all-libgui
! maybe-all-libgui:
! all-libgui: configure-libgui
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd libgui && $(MAKE) $(FLAGS_TO_PASS) all)
! 
! .PHONY: check-libgui maybe-check-libgui
! maybe-check-libgui:
  
! check-libgui:
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd libgui && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
- .PHONY: install-libgui maybe-install-libgui
- maybe-install-libgui:
  
! install-libgui: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd libgui && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-libiberty maybe-configure-libiberty
! maybe-configure-libiberty:
! configure-libiberty:
! 	@test ! -f libiberty/Makefile || exit 0; \
! 	[ -d libiberty ] || mkdir libiberty; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in libiberty; \
  	cd libiberty || exit 1; \
  	case $(srcdir) in \
  	  \.) \
--- 31028,31127 ----
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  --disable-intermodule 	  --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" 
  
! maybe-all-stage1-ld: all-stage1-ld
! all-stage1-ld: configure-stage1-ld
! 	@$(MAKE) stage1-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(HOST_EXPORTS)  \
! 	cd ld && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		CFLAGS="$(STAGE1_CFLAGS)" 
  
+ maybe-clean-stage1-ld: clean-stage1-ld
+ clean-stage1-ld:
+ 	@[ -f ld/Makefile ] || [ -f stage1-ld/Makefile ] \
+ 	  || exit 0 ; \
+ 	[ -f ld/Makefile ] || $(MAKE) stage1-start ; \
+ 	cd ld && \
+ 	$(MAKE) $(FLAGS_TO_PASS)  \
+ 		CFLAGS="$(STAGE1_CFLAGS)"  clean
+ @endif ld-bootstrap
  
  
! .PHONY: configure-stage1-libcpp maybe-configure-stage1-libcpp
! .PHONY: all-stage1-libcpp maybe-all-stage1-libcpp
! .PHONY: clean-stage1-libcpp maybe-clean-stage1-libcpp
  
+ maybe-configure-stage1-libcpp:
+ maybe-all-stage1-libcpp:
+ maybe-clean-stage1-libcpp:
  
! @if libcpp-bootstrap
! maybe-configure-stage1-libcpp: configure-stage1-libcpp
! configure-stage1-libcpp:
! 	@$(MAKE) stage1-start
! 	@[ -f libcpp/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(HOST_EXPORTS)  \
! 	echo Configuring stage 1 in libcpp ; \
! 	cd libcpp || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/libcpp"; \
! 	    libsrcdir="$$s/libcpp";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/libcpp"; \
! 	    libsrcdir="$$s/libcpp";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  --disable-intermodule 	  --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" 
  
! maybe-all-stage1-libcpp: all-stage1-libcpp
! all-stage1-libcpp: configure-stage1-libcpp
! 	@$(MAKE) stage1-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(HOST_EXPORTS)  \
! 	cd libcpp && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		CFLAGS="$(STAGE1_CFLAGS)" 
  
+ maybe-clean-stage1-libcpp: clean-stage1-libcpp
+ clean-stage1-libcpp:
+ 	@[ -f libcpp/Makefile ] || [ -f stage1-libcpp/Makefile ] \
+ 	  || exit 0 ; \
+ 	[ -f libcpp/Makefile ] || $(MAKE) stage1-start ; \
+ 	cd libcpp && \
+ 	$(MAKE) $(FLAGS_TO_PASS)  \
+ 		CFLAGS="$(STAGE1_CFLAGS)"  clean
+ @endif libcpp-bootstrap
  
  
! .PHONY: configure-stage1-libiberty maybe-configure-stage1-libiberty
! .PHONY: all-stage1-libiberty maybe-all-stage1-libiberty
! .PHONY: clean-stage1-libiberty maybe-clean-stage1-libiberty
  
+ maybe-configure-stage1-libiberty:
+ maybe-all-stage1-libiberty:
+ maybe-clean-stage1-libiberty:
  
! @if libiberty-bootstrap
! maybe-configure-stage1-libiberty: configure-stage1-libiberty
! configure-stage1-libiberty:
! 	@$(MAKE) stage1-start
! 	@[ -f libiberty/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(HOST_EXPORTS)  \
! 	echo Configuring stage 1 in libiberty ; \
  	cd libiberty || exit 1; \
  	case $(srcdir) in \
  	  \.) \
*************** configure-libiberty:
*** 19862,23641 ****
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
! 
! .PHONY: all-libiberty maybe-all-libiberty
! maybe-all-libiberty:
! all-libiberty: configure-libiberty
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd libiberty && $(MAKE) $(FLAGS_TO_PASS) all)
! 
! .PHONY: check-libiberty maybe-check-libiberty
! maybe-check-libiberty:
  
! check-libiberty:
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd libiberty && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
- .PHONY: install-libiberty maybe-install-libiberty
- maybe-install-libiberty:
  
! install-libiberty: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd libiberty && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-libtool maybe-configure-libtool
! maybe-configure-libtool:
! configure-libtool:
! 	@test ! -f libtool/Makefile || exit 0; \
! 	[ -d libtool ] || mkdir libtool; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in libtool; \
! 	cd libtool || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/libtool"; \
! 	    libsrcdir="$$s/libtool";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/libtool"; \
! 	    libsrcdir="$$s/libtool";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
  
! .PHONY: all-libtool maybe-all-libtool
! maybe-all-libtool:
! all-libtool: configure-libtool
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd libtool && $(MAKE) $(FLAGS_TO_PASS) all)
  
! .PHONY: check-libtool maybe-check-libtool
! maybe-check-libtool:
  
- check-libtool:
- 	@r=`${PWD_COMMAND}`; export r; \
- 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
- 	$(SET_LIB_PATH) \
- 	(cd libtool && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
! .PHONY: install-libtool maybe-install-libtool
! maybe-install-libtool:
  
- install-libtool: installdirs
- 	@r=`${PWD_COMMAND}`; export r; \
- 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
- 	$(SET_LIB_PATH) \
- 	(cd libtool && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-m4 maybe-configure-m4
! maybe-configure-m4:
! configure-m4:
! 	@test ! -f m4/Makefile || exit 0; \
! 	[ -d m4 ] || mkdir m4; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in m4; \
! 	cd m4 || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/m4"; \
! 	    libsrcdir="$$s/m4";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/m4"; \
! 	    libsrcdir="$$s/m4";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
! 
! .PHONY: all-m4 maybe-all-m4
! maybe-all-m4:
! all-m4: configure-m4
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd m4 && $(MAKE) $(FLAGS_TO_PASS) all)
! 
! .PHONY: check-m4 maybe-check-m4
! maybe-check-m4:
  
! check-m4:
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd m4 && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
- .PHONY: install-m4 maybe-install-m4
- maybe-install-m4:
  
! install-m4: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd m4 && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-make maybe-configure-make
! maybe-configure-make:
! configure-make:
! 	@test ! -f make/Makefile || exit 0; \
! 	[ -d make ] || mkdir make; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in make; \
! 	cd make || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/make"; \
! 	    libsrcdir="$$s/make";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/make"; \
! 	    libsrcdir="$$s/make";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
! 
! .PHONY: all-make maybe-all-make
! maybe-all-make:
! all-make: configure-make
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd make && $(MAKE) $(FLAGS_TO_PASS) all)
! 
! .PHONY: check-make maybe-check-make
! maybe-check-make:
  
! check-make:
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd make && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
- .PHONY: install-make maybe-install-make
- maybe-install-make:
  
! install-make: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd make && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-mmalloc maybe-configure-mmalloc
! maybe-configure-mmalloc:
! configure-mmalloc:
! 	@test ! -f mmalloc/Makefile || exit 0; \
! 	[ -d mmalloc ] || mkdir mmalloc; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in mmalloc; \
! 	cd mmalloc || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/mmalloc"; \
! 	    libsrcdir="$$s/mmalloc";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/mmalloc"; \
! 	    libsrcdir="$$s/mmalloc";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
  
! .PHONY: all-mmalloc maybe-all-mmalloc
! maybe-all-mmalloc:
! all-mmalloc: configure-mmalloc
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd mmalloc && $(MAKE) $(FLAGS_TO_PASS) all)
! 
! .PHONY: check-mmalloc maybe-check-mmalloc
! maybe-check-mmalloc:
! 
! check-mmalloc:
  
  
- .PHONY: install-mmalloc maybe-install-mmalloc
- maybe-install-mmalloc:
  
! install-mmalloc: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd mmalloc && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-patch maybe-configure-patch
! maybe-configure-patch:
! configure-patch:
! 	@test ! -f patch/Makefile || exit 0; \
! 	[ -d patch ] || mkdir patch; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in patch; \
! 	cd patch || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/patch"; \
! 	    libsrcdir="$$s/patch";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/patch"; \
! 	    libsrcdir="$$s/patch";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
! 
! .PHONY: all-patch maybe-all-patch
! maybe-all-patch:
! all-patch: configure-patch
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd patch && $(MAKE) $(FLAGS_TO_PASS) all)
! 
! .PHONY: check-patch maybe-check-patch
! maybe-check-patch:
  
! check-patch:
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd patch && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
- .PHONY: install-patch maybe-install-patch
- maybe-install-patch:
  
! install-patch: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd patch && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-perl maybe-configure-perl
! maybe-configure-perl:
! configure-perl:
! 	@test ! -f perl/Makefile || exit 0; \
! 	[ -d perl ] || mkdir perl; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in perl; \
! 	cd perl || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/perl"; \
! 	    libsrcdir="$$s/perl";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/perl"; \
! 	    libsrcdir="$$s/perl";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
! 
! .PHONY: all-perl maybe-all-perl
! maybe-all-perl:
! all-perl: configure-perl
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd perl && $(MAKE) $(FLAGS_TO_PASS) all)
! 
! .PHONY: check-perl maybe-check-perl
! maybe-check-perl:
  
! check-perl:
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd perl && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
- .PHONY: install-perl maybe-install-perl
- maybe-install-perl:
  
! install-perl: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd perl && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-prms maybe-configure-prms
! maybe-configure-prms:
! configure-prms:
! 	@test ! -f prms/Makefile || exit 0; \
! 	[ -d prms ] || mkdir prms; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in prms; \
! 	cd prms || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/prms"; \
! 	    libsrcdir="$$s/prms";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/prms"; \
! 	    libsrcdir="$$s/prms";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
! 
! .PHONY: all-prms maybe-all-prms
! maybe-all-prms:
! all-prms: configure-prms
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd prms && $(MAKE) $(FLAGS_TO_PASS) all)
! 
! .PHONY: check-prms maybe-check-prms
! maybe-check-prms:
  
! check-prms:
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd prms && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
- .PHONY: install-prms maybe-install-prms
- maybe-install-prms:
  
! install-prms: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd prms && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-rcs maybe-configure-rcs
! maybe-configure-rcs:
! configure-rcs:
! 	@test ! -f rcs/Makefile || exit 0; \
! 	[ -d rcs ] || mkdir rcs; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in rcs; \
! 	cd rcs || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/rcs"; \
! 	    libsrcdir="$$s/rcs";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/rcs"; \
! 	    libsrcdir="$$s/rcs";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
! 
! .PHONY: all-rcs maybe-all-rcs
! maybe-all-rcs:
! all-rcs: configure-rcs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd rcs && $(MAKE) $(FLAGS_TO_PASS) all)
! 
! .PHONY: check-rcs maybe-check-rcs
! maybe-check-rcs:
  
! check-rcs:
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd rcs && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
- .PHONY: install-rcs maybe-install-rcs
- maybe-install-rcs:
  
! install-rcs: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd rcs && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-readline maybe-configure-readline
! maybe-configure-readline:
! configure-readline:
! 	@test ! -f readline/Makefile || exit 0; \
! 	[ -d readline ] || mkdir readline; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in readline; \
! 	cd readline || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/readline"; \
! 	    libsrcdir="$$s/readline";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/readline"; \
! 	    libsrcdir="$$s/readline";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
! 
! .PHONY: all-readline maybe-all-readline
! maybe-all-readline:
! all-readline: configure-readline
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd readline && $(MAKE) $(FLAGS_TO_PASS) all)
! 
! .PHONY: check-readline maybe-check-readline
! maybe-check-readline:
  
! check-readline:
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd readline && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
- .PHONY: install-readline maybe-install-readline
- maybe-install-readline:
  
! install-readline: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd readline && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-release maybe-configure-release
! maybe-configure-release:
! configure-release:
! 	@test ! -f release/Makefile || exit 0; \
! 	[ -d release ] || mkdir release; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in release; \
! 	cd release || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/release"; \
! 	    libsrcdir="$$s/release";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/release"; \
! 	    libsrcdir="$$s/release";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
  
! .PHONY: all-release maybe-all-release
! maybe-all-release:
! all-release: configure-release
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd release && $(MAKE) $(FLAGS_TO_PASS) all)
! 
! .PHONY: check-release maybe-check-release
! maybe-check-release:
  
! check-release:
  
  
! .PHONY: install-release maybe-install-release
! maybe-install-release:
! 
! install-release:
  
  
! .PHONY: configure-recode maybe-configure-recode
! maybe-configure-recode:
! configure-recode:
! 	@test ! -f recode/Makefile || exit 0; \
! 	[ -d recode ] || mkdir recode; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in recode; \
! 	cd recode || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/recode"; \
! 	    libsrcdir="$$s/recode";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/recode"; \
! 	    libsrcdir="$$s/recode";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
  
! .PHONY: all-recode maybe-all-recode
! maybe-all-recode:
! all-recode: configure-recode
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd recode && $(MAKE) $(FLAGS_TO_PASS) all)
  
! .PHONY: check-recode maybe-check-recode
! maybe-check-recode:
  
- check-recode:
- 	@r=`${PWD_COMMAND}`; export r; \
- 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
- 	$(SET_LIB_PATH) \
- 	(cd recode && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
! .PHONY: install-recode maybe-install-recode
! maybe-install-recode:
  
- install-recode: installdirs
- 	@r=`${PWD_COMMAND}`; export r; \
- 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
- 	$(SET_LIB_PATH) \
- 	(cd recode && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-sed maybe-configure-sed
! maybe-configure-sed:
! configure-sed:
! 	@test ! -f sed/Makefile || exit 0; \
! 	[ -d sed ] || mkdir sed; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in sed; \
! 	cd sed || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/sed"; \
! 	    libsrcdir="$$s/sed";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/sed"; \
! 	    libsrcdir="$$s/sed";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
! 
! .PHONY: all-sed maybe-all-sed
! maybe-all-sed:
! all-sed: configure-sed
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd sed && $(MAKE) $(FLAGS_TO_PASS) all)
! 
! .PHONY: check-sed maybe-check-sed
! maybe-check-sed:
  
! check-sed:
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd sed && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
- .PHONY: install-sed maybe-install-sed
- maybe-install-sed:
  
! install-sed: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd sed && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-send-pr maybe-configure-send-pr
! maybe-configure-send-pr:
! configure-send-pr:
! 	@test ! -f send-pr/Makefile || exit 0; \
! 	[ -d send-pr ] || mkdir send-pr; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in send-pr; \
! 	cd send-pr || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/send-pr"; \
! 	    libsrcdir="$$s/send-pr";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/send-pr"; \
! 	    libsrcdir="$$s/send-pr";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
! 
! .PHONY: all-send-pr maybe-all-send-pr
! maybe-all-send-pr:
! all-send-pr: configure-send-pr
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd send-pr && $(MAKE) $(FLAGS_TO_PASS) all)
! 
! .PHONY: check-send-pr maybe-check-send-pr
! maybe-check-send-pr:
  
! check-send-pr:
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd send-pr && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
- .PHONY: install-send-pr maybe-install-send-pr
- maybe-install-send-pr:
  
! install-send-pr: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd send-pr && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-shellutils maybe-configure-shellutils
! maybe-configure-shellutils:
! configure-shellutils:
! 	@test ! -f shellutils/Makefile || exit 0; \
! 	[ -d shellutils ] || mkdir shellutils; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in shellutils; \
! 	cd shellutils || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/shellutils"; \
! 	    libsrcdir="$$s/shellutils";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/shellutils"; \
! 	    libsrcdir="$$s/shellutils";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
! 
! .PHONY: all-shellutils maybe-all-shellutils
! maybe-all-shellutils:
! all-shellutils: configure-shellutils
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd shellutils && $(MAKE) $(FLAGS_TO_PASS) all)
! 
! .PHONY: check-shellutils maybe-check-shellutils
! maybe-check-shellutils:
  
! check-shellutils:
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd shellutils && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
- .PHONY: install-shellutils maybe-install-shellutils
- maybe-install-shellutils:
  
! install-shellutils: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd shellutils && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-sid maybe-configure-sid
! maybe-configure-sid:
! configure-sid:
! 	@test ! -f sid/Makefile || exit 0; \
! 	[ -d sid ] || mkdir sid; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in sid; \
! 	cd sid || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/sid"; \
! 	    libsrcdir="$$s/sid";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/sid"; \
! 	    libsrcdir="$$s/sid";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
! 
! .PHONY: all-sid maybe-all-sid
! maybe-all-sid:
! all-sid: configure-sid
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd sid && $(MAKE) $(FLAGS_TO_PASS) all)
! 
! .PHONY: check-sid maybe-check-sid
! maybe-check-sid:
  
! check-sid:
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd sid && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
- .PHONY: install-sid maybe-install-sid
- maybe-install-sid:
  
! install-sid: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd sid && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-sim maybe-configure-sim
! maybe-configure-sim:
! configure-sim:
! 	@test ! -f sim/Makefile || exit 0; \
! 	[ -d sim ] || mkdir sim; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in sim; \
! 	cd sim || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/sim"; \
! 	    libsrcdir="$$s/sim";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/sim"; \
! 	    libsrcdir="$$s/sim";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
! 
! .PHONY: all-sim maybe-all-sim
! maybe-all-sim:
! all-sim: configure-sim
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd sim && $(MAKE) $(FLAGS_TO_PASS) all)
! 
! .PHONY: check-sim maybe-check-sim
! maybe-check-sim:
  
! check-sim:
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd sim && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
- .PHONY: install-sim maybe-install-sim
- maybe-install-sim:
  
! install-sim: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd sim && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-tar maybe-configure-tar
! maybe-configure-tar:
! configure-tar:
! 	@test ! -f tar/Makefile || exit 0; \
! 	[ -d tar ] || mkdir tar; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in tar; \
! 	cd tar || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/tar"; \
! 	    libsrcdir="$$s/tar";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/tar"; \
! 	    libsrcdir="$$s/tar";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
! 
! .PHONY: all-tar maybe-all-tar
! maybe-all-tar:
! all-tar: configure-tar
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd tar && $(MAKE) $(FLAGS_TO_PASS) all)
! 
! .PHONY: check-tar maybe-check-tar
! maybe-check-tar:
  
! check-tar:
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd tar && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
- .PHONY: install-tar maybe-install-tar
- maybe-install-tar:
  
! install-tar: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd tar && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-texinfo maybe-configure-texinfo
! maybe-configure-texinfo:
! configure-texinfo:
! 	@test ! -f texinfo/Makefile || exit 0; \
! 	[ -d texinfo ] || mkdir texinfo; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in texinfo; \
! 	cd texinfo || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/texinfo"; \
! 	    libsrcdir="$$s/texinfo";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/texinfo"; \
! 	    libsrcdir="$$s/texinfo";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
! 
! .PHONY: all-texinfo maybe-all-texinfo
! maybe-all-texinfo:
! all-texinfo: configure-texinfo
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd texinfo && $(MAKE) $(FLAGS_TO_PASS) all)
! 
! .PHONY: check-texinfo maybe-check-texinfo
! maybe-check-texinfo:
  
! check-texinfo:
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd texinfo && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
- .PHONY: install-texinfo maybe-install-texinfo
- maybe-install-texinfo:
  
! install-texinfo:
  
  
! .PHONY: configure-textutils maybe-configure-textutils
! maybe-configure-textutils:
! configure-textutils:
! 	@test ! -f textutils/Makefile || exit 0; \
! 	[ -d textutils ] || mkdir textutils; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in textutils; \
! 	cd textutils || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/textutils"; \
! 	    libsrcdir="$$s/textutils";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/textutils"; \
! 	    libsrcdir="$$s/textutils";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
! 
! .PHONY: all-textutils maybe-all-textutils
! maybe-all-textutils:
! all-textutils: configure-textutils
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd textutils && $(MAKE) $(FLAGS_TO_PASS) all)
! 
! .PHONY: check-textutils maybe-check-textutils
! maybe-check-textutils:
  
! check-textutils:
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd textutils && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
- .PHONY: install-textutils maybe-install-textutils
- maybe-install-textutils:
  
! install-textutils: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd textutils && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-time maybe-configure-time
! maybe-configure-time:
! configure-time:
! 	@test ! -f time/Makefile || exit 0; \
! 	[ -d time ] || mkdir time; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in time; \
! 	cd time || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/time"; \
! 	    libsrcdir="$$s/time";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/time"; \
! 	    libsrcdir="$$s/time";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
! 
! .PHONY: all-time maybe-all-time
! maybe-all-time:
! all-time: configure-time
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd time && $(MAKE) $(FLAGS_TO_PASS) all)
! 
! .PHONY: check-time maybe-check-time
! maybe-check-time:
  
! check-time:
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd time && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
- .PHONY: install-time maybe-install-time
- maybe-install-time:
  
! install-time: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd time && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-uudecode maybe-configure-uudecode
! maybe-configure-uudecode:
! configure-uudecode:
! 	@test ! -f uudecode/Makefile || exit 0; \
! 	[ -d uudecode ] || mkdir uudecode; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in uudecode; \
! 	cd uudecode || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/uudecode"; \
! 	    libsrcdir="$$s/uudecode";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/uudecode"; \
! 	    libsrcdir="$$s/uudecode";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
  
! .PHONY: all-uudecode maybe-all-uudecode
! maybe-all-uudecode:
! all-uudecode: configure-uudecode
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd uudecode && $(MAKE) $(FLAGS_TO_PASS) all)
  
! .PHONY: check-uudecode maybe-check-uudecode
! maybe-check-uudecode:
  
- check-uudecode:
- 	@r=`${PWD_COMMAND}`; export r; \
- 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
- 	$(SET_LIB_PATH) \
- 	(cd uudecode && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
! .PHONY: install-uudecode maybe-install-uudecode
! maybe-install-uudecode:
  
! install-uudecode: installdirs
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd uudecode && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-wdiff maybe-configure-wdiff
! maybe-configure-wdiff:
! configure-wdiff:
! 	@test ! -f wdiff/Makefile || exit 0; \
! 	[ -d wdiff ] || mkdir wdiff; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in wdiff; \
! 	cd wdiff || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/wdiff"; \
! 	    libsrcdir="$$s/wdiff";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/wdiff"; \
! 	    libsrcdir="$$s/wdiff";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
! 
! .PHONY: all-wdiff maybe-all-wdiff
! maybe-all-wdiff:
! all-wdiff: configure-wdiff
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd wdiff && $(MAKE) $(FLAGS_TO_PASS) all)
! 
! .PHONY: check-wdiff maybe-check-wdiff
! maybe-check-wdiff:
  
! check-wdiff:
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd wdiff && $(MAKE) $(FLAGS_TO_PASS) check)
  
  
- .PHONY: install-wdiff maybe-install-wdiff
- maybe-install-wdiff:
  
! install-wdiff: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd wdiff && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-zip maybe-configure-zip
! maybe-configure-zip:
! configure-zip:
! 	@test ! -f zip/Makefile || exit 0; \
! 	[ -d zip ] || mkdir zip; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in zip; \
! 	cd zip || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/zip"; \
! 	    libsrcdir="$$s/zip";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/zip"; \
! 	    libsrcdir="$$s/zip";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
  
! .PHONY: all-zip maybe-all-zip
! maybe-all-zip:
! all-zip: configure-zip
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd zip && $(MAKE) $(FLAGS_TO_PASS) all)
! 
! .PHONY: check-zip maybe-check-zip
! maybe-check-zip:
! 
! # This module is only tested in a native toolchain.
! check-zip:
! 	@if [ '$(host)' = '$(target)' ] ; then \
! 	  r=`${PWD_COMMAND}`; export r; \
! 	  s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	  $(SET_LIB_PATH) \
! 	  (cd zip && $(MAKE) $(FLAGS_TO_PASS) check); \
! 	fi
  
  
- .PHONY: install-zip maybe-install-zip
- maybe-install-zip:
  
! install-zip: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd zip && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-zlib maybe-configure-zlib
! maybe-configure-zlib:
! configure-zlib:
! 	@test ! -f zlib/Makefile || exit 0; \
! 	[ -d zlib ] || mkdir zlib; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in zlib; \
! 	cd zlib || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/zlib"; \
! 	    libsrcdir="$$s/zlib";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/zlib"; \
! 	    libsrcdir="$$s/zlib";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
  
! .PHONY: all-zlib maybe-all-zlib
! maybe-all-zlib:
! all-zlib: configure-zlib
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd zlib && $(MAKE) $(FLAGS_TO_PASS) all)
! 
! .PHONY: check-zlib maybe-check-zlib
! maybe-check-zlib:
! 
! check-zlib:
  
  
- .PHONY: install-zlib maybe-install-zlib
- maybe-install-zlib:
  
! install-zlib:
  
  
! .PHONY: configure-gdb maybe-configure-gdb
! maybe-configure-gdb:
! configure-gdb:
! 	@test ! -f gdb/Makefile || exit 0; \
! 	[ -d gdb ] || mkdir gdb; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in gdb; \
! 	cd gdb || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/gdb"; \
! 	    libsrcdir="$$s/gdb";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/gdb"; \
! 	    libsrcdir="$$s/gdb";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
! 
! .PHONY: all-gdb maybe-all-gdb
! maybe-all-gdb:
! all-gdb: configure-gdb
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd gdb && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) all)
! 
! .PHONY: check-gdb maybe-check-gdb
! maybe-check-gdb:
  
! check-gdb:
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd gdb && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) check)
  
  
- .PHONY: install-gdb maybe-install-gdb
- maybe-install-gdb:
  
! install-gdb: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd gdb && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-expect maybe-configure-expect
! maybe-configure-expect:
! configure-expect:
! 	@test ! -f expect/Makefile || exit 0; \
! 	[ -d expect ] || mkdir expect; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in expect; \
! 	cd expect || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/expect"; \
! 	    libsrcdir="$$s/expect";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/expect"; \
! 	    libsrcdir="$$s/expect";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
! 
! .PHONY: all-expect maybe-all-expect
! maybe-all-expect:
! all-expect: configure-expect
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd expect && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) all)
! 
! .PHONY: check-expect maybe-check-expect
! maybe-check-expect:
  
! check-expect:
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd expect && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) check)
  
  
- .PHONY: install-expect maybe-install-expect
- maybe-install-expect:
  
! install-expect: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd expect && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-guile maybe-configure-guile
! maybe-configure-guile:
! configure-guile:
! 	@test ! -f guile/Makefile || exit 0; \
! 	[ -d guile ] || mkdir guile; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in guile; \
! 	cd guile || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/guile"; \
! 	    libsrcdir="$$s/guile";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/guile"; \
! 	    libsrcdir="$$s/guile";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
! 
! .PHONY: all-guile maybe-all-guile
! maybe-all-guile:
! all-guile: configure-guile
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd guile && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) all)
! 
! .PHONY: check-guile maybe-check-guile
! maybe-check-guile:
  
! check-guile:
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd guile && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) check)
  
  
- .PHONY: install-guile maybe-install-guile
- maybe-install-guile:
  
! install-guile: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd guile && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-tk maybe-configure-tk
! maybe-configure-tk:
! configure-tk:
! 	@test ! -f tk/Makefile || exit 0; \
! 	[ -d tk ] || mkdir tk; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in tk; \
! 	cd tk || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/tk"; \
! 	    libsrcdir="$$s/tk";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/tk"; \
! 	    libsrcdir="$$s/tk";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
! 
! .PHONY: all-tk maybe-all-tk
! maybe-all-tk:
! all-tk: configure-tk
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd tk && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) all)
! 
! .PHONY: check-tk maybe-check-tk
! maybe-check-tk:
  
! check-tk:
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd tk && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) check)
  
  
- .PHONY: install-tk maybe-install-tk
- maybe-install-tk:
  
! install-tk: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd tk && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-tix maybe-configure-tix
! maybe-configure-tix:
! configure-tix:
! 	@test ! -f tix/Makefile || exit 0; \
! 	[ -d tix ] || mkdir tix; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in tix; \
! 	cd tix || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/tix"; \
! 	    libsrcdir="$$s/tix";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/tix"; \
! 	    libsrcdir="$$s/tix";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
! 
! .PHONY: all-tix maybe-all-tix
! maybe-all-tix:
! all-tix: configure-tix
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd tix && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) all)
! 
! .PHONY: check-tix maybe-check-tix
! maybe-check-tix:
  
! check-tix:
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd tix && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) check)
  
  
- .PHONY: install-tix maybe-install-tix
- maybe-install-tix:
  
! install-tix: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd tix && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-libtermcap maybe-configure-libtermcap
! maybe-configure-libtermcap:
! configure-libtermcap:
! 	@test ! -f libtermcap/Makefile || exit 0; \
! 	[ -d libtermcap ] || mkdir libtermcap; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in libtermcap; \
! 	cd libtermcap || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/libtermcap"; \
! 	    libsrcdir="$$s/libtermcap";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/libtermcap"; \
! 	    libsrcdir="$$s/libtermcap";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
  
! .PHONY: all-libtermcap maybe-all-libtermcap
! maybe-all-libtermcap:
! all-libtermcap: configure-libtermcap
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd libtermcap && $(MAKE) $(FLAGS_TO_PASS) all)
! 
! .PHONY: check-libtermcap maybe-check-libtermcap
! maybe-check-libtermcap:
  
! check-libtermcap:
  
  
! .PHONY: install-libtermcap maybe-install-libtermcap
! maybe-install-libtermcap:
! 
! install-libtermcap: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd libtermcap && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-utils maybe-configure-utils
! maybe-configure-utils:
! configure-utils:
! 	@test ! -f utils/Makefile || exit 0; \
! 	[ -d utils ] || mkdir utils; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	echo Configuring in utils; \
! 	cd utils || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/utils"; \
! 	    libsrcdir="$$s/utils";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/utils"; \
! 	    libsrcdir="$$s/utils";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
  
! .PHONY: all-utils maybe-all-utils
! maybe-all-utils:
! all-utils: configure-utils
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd utils && $(MAKE) $(FLAGS_TO_PASS) all)
  
! .PHONY: check-utils maybe-check-utils
! maybe-check-utils:
  
- check-utils:
  
  
! .PHONY: install-utils maybe-install-utils
! maybe-install-utils:
  
! install-utils: installdirs
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd utils && $(MAKE) $(FLAGS_TO_PASS) install)
  
  
  
! # ---------------------------------------
! # Modules which run on the target machine
! # ---------------------------------------
  
- .PHONY: configure-target-libstdc++-v3 maybe-configure-target-libstdc++-v3
- maybe-configure-target-libstdc++-v3:
  
! # There's only one multilib.out.  Cleverer subdirs shouldn't need it copied.
! $(TARGET_SUBDIR)/libstdc++-v3/multilib.out: multilib.out
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libstdc++-v3 ; \
! 	rm -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile || : ; \
! 	cp multilib.out $(TARGET_SUBDIR)/libstdc++-v3/multilib.out
  
- configure-target-libstdc++-v3: $(TARGET_SUBDIR)/libstdc++-v3/multilib.out
- 	@test ! -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile || exit 0; \
- 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libstdc++-v3 ; \
- 	r=`${PWD_COMMAND}`; export r; \
- 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
- 	$(SET_LIB_PATH) \
- 	AR="$(AR_FOR_TARGET)"; export AR; \
- 	AS="$(AS_FOR_TARGET)"; export AS; \
- 	CC="$(CC_FOR_TARGET)"; export CC; \
- 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
- 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
- 	CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
- 	CXX_FOR_TARGET="$(RAW_CXX_FOR_TARGET)"; export CXX_FOR_TARGET; \
- 	CXX="$(RAW_CXX_FOR_TARGET)"; export CXX; \
- 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
- 	GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
- 	DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
- 	LD="$(LD_FOR_TARGET)"; export LD; \
- 	LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
- 	NM="$(NM_FOR_TARGET)"; export NM; \
- 	RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
- 	WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
- 	SET_GCC_LIB_PATH_CMD="@SET_GCC_LIB_PATH@"; export SET_GCC_LIB_PATH_CMD; \
- 	@SET_GCC_LIB_PATH@ \
- 	echo Configuring in $(TARGET_SUBDIR)/libstdc++-v3; \
- 	cd "$(TARGET_SUBDIR)/libstdc++-v3" || exit 1; \
- 	case $(srcdir) in \
- 	  /* | [A-Za-z]:[\\/]*) \
- 	    topdir=$(srcdir) ;; \
- 	  *) \
- 	    case "$(TARGET_SUBDIR)" in \
- 	      .) topdir="../$(srcdir)" ;; \
- 	      *) topdir="../../$(srcdir)" ;; \
- 	    esac ;; \
- 	esac; \
- 	  srcdiroption="--srcdir=$${topdir}/libstdc++-v3"; \
- 	  libsrcdir="$$s/libstdc++-v3"; \
- 	rm -f no-such-file || : ; \
- 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- 	  $(TARGET_CONFIGARGS) $${srcdiroption} \
- 	  --with-target-subdir="$(TARGET_SUBDIR)" \
- 	  || exit 1
  
! .PHONY: all-target-libstdc++-v3 maybe-all-target-libstdc++-v3
! maybe-all-target-libstdc++-v3:
! all-target-libstdc++-v3: configure-target-libstdc++-v3
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd $(TARGET_SUBDIR)/libstdc++-v3 && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)'  all)
  
- .PHONY: check-target-libstdc++-v3 maybe-check-target-libstdc++-v3
- maybe-check-target-libstdc++-v3:
  
! check-target-libstdc++-v3:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd $(TARGET_SUBDIR)/libstdc++-v3 && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)'  check)
  
  
! .PHONY: install-target-libstdc++-v3 maybe-install-target-libstdc++-v3
! maybe-install-target-libstdc++-v3:
  
! install-target-libstdc++-v3: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd $(TARGET_SUBDIR)/libstdc++-v3 && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
  
  
- .PHONY: configure-target-newlib maybe-configure-target-newlib
- maybe-configure-target-newlib:
  
! # There's only one multilib.out.  Cleverer subdirs shouldn't need it copied.
! $(TARGET_SUBDIR)/newlib/multilib.out: multilib.out
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/newlib ; \
! 	rm -f $(TARGET_SUBDIR)/newlib/Makefile || : ; \
! 	cp multilib.out $(TARGET_SUBDIR)/newlib/multilib.out
  
! configure-target-newlib: $(TARGET_SUBDIR)/newlib/multilib.out
! 	@test ! -f $(TARGET_SUBDIR)/newlib/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/newlib ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	AR="$(AR_FOR_TARGET)"; export AR; \
! 	AS="$(AS_FOR_TARGET)"; export AS; \
! 	CC="$(CC_FOR_TARGET)"; export CC; \
! 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
! 	CXX="$(CXX_FOR_TARGET)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
! 	GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
! 	DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
! 	LD="$(LD_FOR_TARGET)"; export LD; \
! 	LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
! 	NM="$(NM_FOR_TARGET)"; export NM; \
! 	RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
! 	WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
! 	SET_GCC_LIB_PATH_CMD="@SET_GCC_LIB_PATH@"; export SET_GCC_LIB_PATH_CMD; \
! 	@SET_GCC_LIB_PATH@ \
! 	echo Configuring in $(TARGET_SUBDIR)/newlib; \
! 	cd "$(TARGET_SUBDIR)/newlib" || exit 1; \
  	case $(srcdir) in \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    topdir=$(srcdir) ;; \
  	  *) \
! 	    case "$(TARGET_SUBDIR)" in \
! 	      .) topdir="../$(srcdir)" ;; \
! 	      *) topdir="../../$(srcdir)" ;; \
! 	    esac ;; \
  	esac; \
! 	  srcdiroption="--srcdir=$${topdir}/newlib"; \
! 	  libsrcdir="$$s/newlib"; \
! 	rm -f no-such-file || : ; \
! 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
! 	  $(TARGET_CONFIGARGS) $${srcdiroption} \
! 	  --with-target-subdir="$(TARGET_SUBDIR)" \
! 	  || exit 1
! 
! .PHONY: all-target-newlib maybe-all-target-newlib
! maybe-all-target-newlib:
! all-target-newlib: configure-target-newlib
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd $(TARGET_SUBDIR)/newlib && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  all)
! 
! .PHONY: check-target-newlib maybe-check-target-newlib
! maybe-check-target-newlib:
  
! check-target-newlib:
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd $(TARGET_SUBDIR)/newlib && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  check)
! 
! 
! .PHONY: install-target-newlib maybe-install-target-newlib
! maybe-install-target-newlib:
  
! install-target-newlib: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd $(TARGET_SUBDIR)/newlib && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-target-libf2c maybe-configure-target-libf2c
! maybe-configure-target-libf2c:
  
! # There's only one multilib.out.  Cleverer subdirs shouldn't need it copied.
! $(TARGET_SUBDIR)/libf2c/multilib.out: multilib.out
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libf2c ; \
! 	rm -f $(TARGET_SUBDIR)/libf2c/Makefile || : ; \
! 	cp multilib.out $(TARGET_SUBDIR)/libf2c/multilib.out
  
! configure-target-libf2c: $(TARGET_SUBDIR)/libf2c/multilib.out
! 	@test ! -f $(TARGET_SUBDIR)/libf2c/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libf2c ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	AR="$(AR_FOR_TARGET)"; export AR; \
! 	AS="$(AS_FOR_TARGET)"; export AS; \
! 	CC="$(CC_FOR_TARGET)"; export CC; \
! 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
! 	CXX="$(CXX_FOR_TARGET)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
! 	GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
! 	DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
! 	LD="$(LD_FOR_TARGET)"; export LD; \
! 	LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
! 	NM="$(NM_FOR_TARGET)"; export NM; \
! 	RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
! 	WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
! 	SET_GCC_LIB_PATH_CMD="@SET_GCC_LIB_PATH@"; export SET_GCC_LIB_PATH_CMD; \
! 	@SET_GCC_LIB_PATH@ \
! 	echo Configuring in $(TARGET_SUBDIR)/libf2c; \
! 	cd "$(TARGET_SUBDIR)/libf2c" || exit 1; \
  	case $(srcdir) in \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    topdir=$(srcdir) ;; \
  	  *) \
! 	    case "$(TARGET_SUBDIR)" in \
! 	      .) topdir="../$(srcdir)" ;; \
! 	      *) topdir="../../$(srcdir)" ;; \
! 	    esac ;; \
  	esac; \
! 	  srcdiroption="--srcdir=$${topdir}/libf2c"; \
! 	  libsrcdir="$$s/libf2c"; \
! 	rm -f no-such-file || : ; \
! 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
! 	  $(TARGET_CONFIGARGS) $${srcdiroption} \
! 	  --with-target-subdir="$(TARGET_SUBDIR)" \
! 	  || exit 1
! 
! .PHONY: all-target-libf2c maybe-all-target-libf2c
! maybe-all-target-libf2c:
! all-target-libf2c: configure-target-libf2c
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd $(TARGET_SUBDIR)/libf2c && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  all)
! 
! .PHONY: check-target-libf2c maybe-check-target-libf2c
! maybe-check-target-libf2c:
  
! check-target-libf2c:
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd $(TARGET_SUBDIR)/libf2c && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  check)
! 
! 
! .PHONY: install-target-libf2c maybe-install-target-libf2c
! maybe-install-target-libf2c:
  
! install-target-libf2c: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd $(TARGET_SUBDIR)/libf2c && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-target-libobjc maybe-configure-target-libobjc
! maybe-configure-target-libobjc:
  
! # There's only one multilib.out.  Cleverer subdirs shouldn't need it copied.
! $(TARGET_SUBDIR)/libobjc/multilib.out: multilib.out
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libobjc ; \
! 	rm -f $(TARGET_SUBDIR)/libobjc/Makefile || : ; \
! 	cp multilib.out $(TARGET_SUBDIR)/libobjc/multilib.out
  
! configure-target-libobjc: $(TARGET_SUBDIR)/libobjc/multilib.out
! 	@test ! -f $(TARGET_SUBDIR)/libobjc/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libobjc ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	AR="$(AR_FOR_TARGET)"; export AR; \
! 	AS="$(AS_FOR_TARGET)"; export AS; \
! 	CC="$(CC_FOR_TARGET)"; export CC; \
! 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
! 	CXX="$(CXX_FOR_TARGET)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
! 	GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
! 	DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
! 	LD="$(LD_FOR_TARGET)"; export LD; \
! 	LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
! 	NM="$(NM_FOR_TARGET)"; export NM; \
! 	RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
! 	WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
! 	SET_GCC_LIB_PATH_CMD="@SET_GCC_LIB_PATH@"; export SET_GCC_LIB_PATH_CMD; \
! 	@SET_GCC_LIB_PATH@ \
! 	echo Configuring in $(TARGET_SUBDIR)/libobjc; \
! 	cd "$(TARGET_SUBDIR)/libobjc" || exit 1; \
  	case $(srcdir) in \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    topdir=$(srcdir) ;; \
  	  *) \
! 	    case "$(TARGET_SUBDIR)" in \
! 	      .) topdir="../$(srcdir)" ;; \
! 	      *) topdir="../../$(srcdir)" ;; \
! 	    esac ;; \
  	esac; \
! 	  srcdiroption="--srcdir=$${topdir}/libobjc"; \
! 	  libsrcdir="$$s/libobjc"; \
! 	rm -f no-such-file || : ; \
! 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
! 	  $(TARGET_CONFIGARGS) $${srcdiroption} \
! 	  --with-target-subdir="$(TARGET_SUBDIR)" \
! 	  || exit 1
! 
! .PHONY: all-target-libobjc maybe-all-target-libobjc
! maybe-all-target-libobjc:
! all-target-libobjc: configure-target-libobjc
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd $(TARGET_SUBDIR)/libobjc && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  all)
! 
! .PHONY: check-target-libobjc maybe-check-target-libobjc
! maybe-check-target-libobjc:
  
! check-target-libobjc:
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd $(TARGET_SUBDIR)/libobjc && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  check)
! 
! 
! .PHONY: install-target-libobjc maybe-install-target-libobjc
! maybe-install-target-libobjc:
  
! install-target-libobjc: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd $(TARGET_SUBDIR)/libobjc && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-target-libtermcap maybe-configure-target-libtermcap
! maybe-configure-target-libtermcap:
  
! # There's only one multilib.out.  Cleverer subdirs shouldn't need it copied.
! $(TARGET_SUBDIR)/libtermcap/multilib.out: multilib.out
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libtermcap ; \
! 	rm -f $(TARGET_SUBDIR)/libtermcap/Makefile || : ; \
! 	cp multilib.out $(TARGET_SUBDIR)/libtermcap/multilib.out
  
! configure-target-libtermcap: $(TARGET_SUBDIR)/libtermcap/multilib.out
! 	@test ! -f $(TARGET_SUBDIR)/libtermcap/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libtermcap ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	AR="$(AR_FOR_TARGET)"; export AR; \
! 	AS="$(AS_FOR_TARGET)"; export AS; \
! 	CC="$(CC_FOR_TARGET)"; export CC; \
! 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
! 	CXX="$(CXX_FOR_TARGET)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
! 	GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
! 	DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
! 	LD="$(LD_FOR_TARGET)"; export LD; \
! 	LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
! 	NM="$(NM_FOR_TARGET)"; export NM; \
! 	RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
! 	WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
! 	SET_GCC_LIB_PATH_CMD="@SET_GCC_LIB_PATH@"; export SET_GCC_LIB_PATH_CMD; \
! 	@SET_GCC_LIB_PATH@ \
! 	echo Configuring in $(TARGET_SUBDIR)/libtermcap; \
! 	cd "$(TARGET_SUBDIR)/libtermcap" || exit 1; \
  	case $(srcdir) in \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    topdir=$(srcdir) ;; \
  	  *) \
! 	    case "$(TARGET_SUBDIR)" in \
! 	      .) topdir="../$(srcdir)" ;; \
! 	      *) topdir="../../$(srcdir)" ;; \
! 	    esac ;; \
  	esac; \
! 	if [ "$(srcdir)" = "." ] ; then \
! 	  if [ "$(TARGET_SUBDIR)" != "." ] ; then \
! 	    if $(SHELL) $$s/symlink-tree $${topdir}/libtermcap "no-such-file" ; then \
! 	      if [ -f Makefile ]; then \
! 	        if $(MAKE) distclean; then \
! 	          true; \
! 	        else \
! 	          exit 1; \
! 	        fi; \
! 	      else \
! 	        true; \
! 	      fi; \
! 	    else \
! 	      exit 1; \
! 	    fi; \
! 	  else \
! 	    true; \
! 	  fi; \
! 	  srcdiroption="--srcdir=."; \
! 	  libsrcdir="."; \
! 	else \
! 	  srcdiroption="--srcdir=$${topdir}/libtermcap"; \
! 	  libsrcdir="$$s/libtermcap"; \
! 	fi; \
! 	rm -f no-such-file || : ; \
! 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
! 	  $(TARGET_CONFIGARGS) $${srcdiroption} \
! 	  --with-target-subdir="$(TARGET_SUBDIR)" \
! 	  || exit 1
  
! .PHONY: all-target-libtermcap maybe-all-target-libtermcap
! maybe-all-target-libtermcap:
! all-target-libtermcap: configure-target-libtermcap
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd $(TARGET_SUBDIR)/libtermcap && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  all)
! 
! .PHONY: check-target-libtermcap maybe-check-target-libtermcap
! maybe-check-target-libtermcap:
! 
! # Dummy target for uncheckable module.
! check-target-libtermcap:
! 
! 
! .PHONY: install-target-libtermcap maybe-install-target-libtermcap
! maybe-install-target-libtermcap:
  
! install-target-libtermcap: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd $(TARGET_SUBDIR)/libtermcap && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-target-winsup maybe-configure-target-winsup
! maybe-configure-target-winsup:
  
! # There's only one multilib.out.  Cleverer subdirs shouldn't need it copied.
! $(TARGET_SUBDIR)/winsup/multilib.out: multilib.out
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/winsup ; \
! 	rm -f $(TARGET_SUBDIR)/winsup/Makefile || : ; \
! 	cp multilib.out $(TARGET_SUBDIR)/winsup/multilib.out
  
! configure-target-winsup: $(TARGET_SUBDIR)/winsup/multilib.out
! 	@test ! -f $(TARGET_SUBDIR)/winsup/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/winsup ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	AR="$(AR_FOR_TARGET)"; export AR; \
! 	AS="$(AS_FOR_TARGET)"; export AS; \
! 	CC="$(CC_FOR_TARGET)"; export CC; \
! 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
! 	CXX="$(CXX_FOR_TARGET)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
! 	GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
! 	DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
! 	LD="$(LD_FOR_TARGET)"; export LD; \
! 	LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
! 	NM="$(NM_FOR_TARGET)"; export NM; \
! 	RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
! 	WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
! 	SET_GCC_LIB_PATH_CMD="@SET_GCC_LIB_PATH@"; export SET_GCC_LIB_PATH_CMD; \
! 	@SET_GCC_LIB_PATH@ \
! 	echo Configuring in $(TARGET_SUBDIR)/winsup; \
! 	cd "$(TARGET_SUBDIR)/winsup" || exit 1; \
  	case $(srcdir) in \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    topdir=$(srcdir) ;; \
  	  *) \
! 	    case "$(TARGET_SUBDIR)" in \
! 	      .) topdir="../$(srcdir)" ;; \
! 	      *) topdir="../../$(srcdir)" ;; \
! 	    esac ;; \
  	esac; \
! 	  srcdiroption="--srcdir=$${topdir}/winsup"; \
! 	  libsrcdir="$$s/winsup"; \
! 	rm -f no-such-file || : ; \
! 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
! 	  $(TARGET_CONFIGARGS) $${srcdiroption} \
! 	  --with-target-subdir="$(TARGET_SUBDIR)" \
! 	  || exit 1
! 
! .PHONY: all-target-winsup maybe-all-target-winsup
! maybe-all-target-winsup:
! all-target-winsup: configure-target-winsup
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd $(TARGET_SUBDIR)/winsup && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  all)
! 
! .PHONY: check-target-winsup maybe-check-target-winsup
! maybe-check-target-winsup:
  
! check-target-winsup:
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd $(TARGET_SUBDIR)/winsup && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  check)
! 
! 
! .PHONY: install-target-winsup maybe-install-target-winsup
! maybe-install-target-winsup:
  
! install-target-winsup: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd $(TARGET_SUBDIR)/winsup && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-target-libgloss maybe-configure-target-libgloss
! maybe-configure-target-libgloss:
  
! # There's only one multilib.out.  Cleverer subdirs shouldn't need it copied.
! $(TARGET_SUBDIR)/libgloss/multilib.out: multilib.out
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgloss ; \
! 	rm -f $(TARGET_SUBDIR)/libgloss/Makefile || : ; \
! 	cp multilib.out $(TARGET_SUBDIR)/libgloss/multilib.out
  
! configure-target-libgloss: $(TARGET_SUBDIR)/libgloss/multilib.out
! 	@test ! -f $(TARGET_SUBDIR)/libgloss/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgloss ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	AR="$(AR_FOR_TARGET)"; export AR; \
! 	AS="$(AS_FOR_TARGET)"; export AS; \
! 	CC="$(CC_FOR_TARGET)"; export CC; \
! 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
! 	CXX="$(CXX_FOR_TARGET)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
! 	GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
! 	DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
! 	LD="$(LD_FOR_TARGET)"; export LD; \
! 	LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
! 	NM="$(NM_FOR_TARGET)"; export NM; \
! 	RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
! 	WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
! 	SET_GCC_LIB_PATH_CMD="@SET_GCC_LIB_PATH@"; export SET_GCC_LIB_PATH_CMD; \
! 	@SET_GCC_LIB_PATH@ \
! 	echo Configuring in $(TARGET_SUBDIR)/libgloss; \
! 	cd "$(TARGET_SUBDIR)/libgloss" || exit 1; \
  	case $(srcdir) in \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    topdir=$(srcdir) ;; \
  	  *) \
! 	    case "$(TARGET_SUBDIR)" in \
! 	      .) topdir="../$(srcdir)" ;; \
! 	      *) topdir="../../$(srcdir)" ;; \
! 	    esac ;; \
  	esac; \
! 	  srcdiroption="--srcdir=$${topdir}/libgloss"; \
! 	  libsrcdir="$$s/libgloss"; \
! 	rm -f no-such-file || : ; \
! 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
! 	  $(TARGET_CONFIGARGS) $${srcdiroption} \
! 	  --with-target-subdir="$(TARGET_SUBDIR)" \
! 	  || exit 1
  
! .PHONY: all-target-libgloss maybe-all-target-libgloss
! maybe-all-target-libgloss:
! all-target-libgloss: configure-target-libgloss
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd $(TARGET_SUBDIR)/libgloss && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  all)
! 
! .PHONY: check-target-libgloss maybe-check-target-libgloss
! maybe-check-target-libgloss:
! 
! # Dummy target for uncheckable module.
! check-target-libgloss:
! 
! 
! .PHONY: install-target-libgloss maybe-install-target-libgloss
! maybe-install-target-libgloss:
  
! install-target-libgloss: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd $(TARGET_SUBDIR)/libgloss && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-target-libiberty maybe-configure-target-libiberty
! maybe-configure-target-libiberty:
  
! # There's only one multilib.out.  Cleverer subdirs shouldn't need it copied.
! $(TARGET_SUBDIR)/libiberty/multilib.out: multilib.out
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libiberty ; \
! 	rm -f $(TARGET_SUBDIR)/libiberty/Makefile || : ; \
! 	cp multilib.out $(TARGET_SUBDIR)/libiberty/multilib.out
  
! configure-target-libiberty: $(TARGET_SUBDIR)/libiberty/multilib.out
! 	@test ! -f $(TARGET_SUBDIR)/libiberty/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libiberty ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	AR="$(AR_FOR_TARGET)"; export AR; \
! 	AS="$(AS_FOR_TARGET)"; export AS; \
! 	CC="$(CC_FOR_TARGET)"; export CC; \
! 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
! 	CXX="$(CXX_FOR_TARGET)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
! 	GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
! 	DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
! 	LD="$(LD_FOR_TARGET)"; export LD; \
! 	LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
! 	NM="$(NM_FOR_TARGET)"; export NM; \
! 	RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
! 	WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
! 	SET_GCC_LIB_PATH_CMD="@SET_GCC_LIB_PATH@"; export SET_GCC_LIB_PATH_CMD; \
! 	@SET_GCC_LIB_PATH@ \
! 	echo Configuring in $(TARGET_SUBDIR)/libiberty; \
! 	cd "$(TARGET_SUBDIR)/libiberty" || exit 1; \
  	case $(srcdir) in \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    topdir=$(srcdir) ;; \
  	  *) \
! 	    case "$(TARGET_SUBDIR)" in \
! 	      .) topdir="../$(srcdir)" ;; \
! 	      *) topdir="../../$(srcdir)" ;; \
! 	    esac ;; \
  	esac; \
! 	if [ "$(srcdir)" = "." ] ; then \
! 	  if [ "$(TARGET_SUBDIR)" != "." ] ; then \
! 	    if $(SHELL) $$s/symlink-tree $${topdir}/libiberty "no-such-file" ; then \
! 	      if [ -f Makefile ]; then \
! 	        if $(MAKE) distclean; then \
! 	          true; \
! 	        else \
! 	          exit 1; \
! 	        fi; \
! 	      else \
! 	        true; \
! 	      fi; \
! 	    else \
! 	      exit 1; \
! 	    fi; \
! 	  else \
! 	    true; \
! 	  fi; \
! 	  srcdiroption="--srcdir=."; \
! 	  libsrcdir="."; \
! 	else \
! 	  srcdiroption="--srcdir=$${topdir}/libiberty"; \
! 	  libsrcdir="$$s/libiberty"; \
! 	fi; \
! 	rm -f no-such-file || : ; \
! 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
! 	  $(TARGET_CONFIGARGS) $${srcdiroption} \
! 	  --with-target-subdir="$(TARGET_SUBDIR)" \
! 	  || exit 1
! 
! .PHONY: all-target-libiberty maybe-all-target-libiberty
! maybe-all-target-libiberty:
! all-target-libiberty: configure-target-libiberty
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd $(TARGET_SUBDIR)/libiberty && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  all)
! 
! .PHONY: check-target-libiberty maybe-check-target-libiberty
! maybe-check-target-libiberty:
  
! check-target-libiberty:
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd $(TARGET_SUBDIR)/libiberty && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  check)
! 
! 
! .PHONY: install-target-libiberty maybe-install-target-libiberty
! maybe-install-target-libiberty:
  
! install-target-libiberty: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd $(TARGET_SUBDIR)/libiberty && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-target-gperf maybe-configure-target-gperf
! maybe-configure-target-gperf:
  
! # There's only one multilib.out.  Cleverer subdirs shouldn't need it copied.
! $(TARGET_SUBDIR)/gperf/multilib.out: multilib.out
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/gperf ; \
! 	rm -f $(TARGET_SUBDIR)/gperf/Makefile || : ; \
! 	cp multilib.out $(TARGET_SUBDIR)/gperf/multilib.out
  
! configure-target-gperf: $(TARGET_SUBDIR)/gperf/multilib.out
! 	@test ! -f $(TARGET_SUBDIR)/gperf/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/gperf ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	AR="$(AR_FOR_TARGET)"; export AR; \
! 	AS="$(AS_FOR_TARGET)"; export AS; \
! 	CC="$(CC_FOR_TARGET)"; export CC; \
! 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
! 	CXX="$(CXX_FOR_TARGET)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
! 	GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
! 	DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
! 	LD="$(LD_FOR_TARGET)"; export LD; \
! 	LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
! 	NM="$(NM_FOR_TARGET)"; export NM; \
! 	RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
! 	WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
! 	SET_GCC_LIB_PATH_CMD="@SET_GCC_LIB_PATH@"; export SET_GCC_LIB_PATH_CMD; \
! 	@SET_GCC_LIB_PATH@ \
! 	echo Configuring in $(TARGET_SUBDIR)/gperf; \
! 	cd "$(TARGET_SUBDIR)/gperf" || exit 1; \
  	case $(srcdir) in \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    topdir=$(srcdir) ;; \
  	  *) \
! 	    case "$(TARGET_SUBDIR)" in \
! 	      .) topdir="../$(srcdir)" ;; \
! 	      *) topdir="../../$(srcdir)" ;; \
! 	    esac ;; \
  	esac; \
! 	  srcdiroption="--srcdir=$${topdir}/gperf"; \
! 	  libsrcdir="$$s/gperf"; \
! 	rm -f no-such-file || : ; \
! 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
! 	  $(TARGET_CONFIGARGS) $${srcdiroption} \
! 	  --with-target-subdir="$(TARGET_SUBDIR)" \
! 	  || exit 1
  
! .PHONY: all-target-gperf maybe-all-target-gperf
! maybe-all-target-gperf:
! all-target-gperf: configure-target-gperf
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd $(TARGET_SUBDIR)/gperf && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  all)
  
! .PHONY: check-target-gperf maybe-check-target-gperf
! maybe-check-target-gperf:
  
- check-target-gperf:
- 	@r=`${PWD_COMMAND}`; export r; \
- 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
- 	$(SET_LIB_PATH) \
- 	(cd $(TARGET_SUBDIR)/gperf && \
- 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  check)
  
  
! .PHONY: install-target-gperf maybe-install-target-gperf
! maybe-install-target-gperf:
  
! install-target-gperf: installdirs
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd $(TARGET_SUBDIR)/gperf && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
  
  
- .PHONY: configure-target-examples maybe-configure-target-examples
- maybe-configure-target-examples:
  
! # There's only one multilib.out.  Cleverer subdirs shouldn't need it copied.
! $(TARGET_SUBDIR)/examples/multilib.out: multilib.out
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/examples ; \
! 	rm -f $(TARGET_SUBDIR)/examples/Makefile || : ; \
! 	cp multilib.out $(TARGET_SUBDIR)/examples/multilib.out
  
! configure-target-examples: $(TARGET_SUBDIR)/examples/multilib.out
! 	@test ! -f $(TARGET_SUBDIR)/examples/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/examples ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	AR="$(AR_FOR_TARGET)"; export AR; \
! 	AS="$(AS_FOR_TARGET)"; export AS; \
! 	CC="$(CC_FOR_TARGET)"; export CC; \
! 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
! 	CXX="$(CXX_FOR_TARGET)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
! 	GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
! 	DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
! 	LD="$(LD_FOR_TARGET)"; export LD; \
! 	LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
! 	NM="$(NM_FOR_TARGET)"; export NM; \
! 	RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
! 	WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
! 	SET_GCC_LIB_PATH_CMD="@SET_GCC_LIB_PATH@"; export SET_GCC_LIB_PATH_CMD; \
! 	@SET_GCC_LIB_PATH@ \
! 	echo Configuring in $(TARGET_SUBDIR)/examples; \
! 	cd "$(TARGET_SUBDIR)/examples" || exit 1; \
  	case $(srcdir) in \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    topdir=$(srcdir) ;; \
  	  *) \
! 	    case "$(TARGET_SUBDIR)" in \
! 	      .) topdir="../$(srcdir)" ;; \
! 	      *) topdir="../../$(srcdir)" ;; \
! 	    esac ;; \
  	esac; \
! 	  srcdiroption="--srcdir=$${topdir}/examples"; \
! 	  libsrcdir="$$s/examples"; \
! 	rm -f no-such-file || : ; \
! 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
! 	  $(TARGET_CONFIGARGS) $${srcdiroption} \
! 	  --with-target-subdir="$(TARGET_SUBDIR)" \
! 	  || exit 1
  
! .PHONY: all-target-examples maybe-all-target-examples
! maybe-all-target-examples:
! all-target-examples: configure-target-examples
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd $(TARGET_SUBDIR)/examples && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  all)
  
! .PHONY: check-target-examples maybe-check-target-examples
! maybe-check-target-examples:
  
- # Dummy target for uncheckable module.
- check-target-examples:
  
  
! .PHONY: install-target-examples maybe-install-target-examples
! maybe-install-target-examples:
  
- # Dummy target for uninstallable.
- install-target-examples:
  
  
- .PHONY: configure-target-libffi maybe-configure-target-libffi
- maybe-configure-target-libffi:
  
! # There's only one multilib.out.  Cleverer subdirs shouldn't need it copied.
! $(TARGET_SUBDIR)/libffi/multilib.out: multilib.out
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libffi ; \
! 	rm -f $(TARGET_SUBDIR)/libffi/Makefile || : ; \
! 	cp multilib.out $(TARGET_SUBDIR)/libffi/multilib.out
  
- configure-target-libffi: $(TARGET_SUBDIR)/libffi/multilib.out
- 	@test ! -f $(TARGET_SUBDIR)/libffi/Makefile || exit 0; \
- 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libffi ; \
- 	r=`${PWD_COMMAND}`; export r; \
- 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
- 	$(SET_LIB_PATH) \
- 	AR="$(AR_FOR_TARGET)"; export AR; \
- 	AS="$(AS_FOR_TARGET)"; export AS; \
- 	CC="$(CC_FOR_TARGET)"; export CC; \
- 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
- 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
- 	CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
- 	CXX="$(CXX_FOR_TARGET)"; export CXX; \
- 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
- 	GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
- 	DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
- 	LD="$(LD_FOR_TARGET)"; export LD; \
- 	LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
- 	NM="$(NM_FOR_TARGET)"; export NM; \
- 	RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
- 	WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
- 	SET_GCC_LIB_PATH_CMD="@SET_GCC_LIB_PATH@"; export SET_GCC_LIB_PATH_CMD; \
- 	@SET_GCC_LIB_PATH@ \
- 	echo Configuring in $(TARGET_SUBDIR)/libffi; \
- 	cd "$(TARGET_SUBDIR)/libffi" || exit 1; \
- 	case $(srcdir) in \
- 	  /* | [A-Za-z]:[\\/]*) \
- 	    topdir=$(srcdir) ;; \
- 	  *) \
- 	    case "$(TARGET_SUBDIR)" in \
- 	      .) topdir="../$(srcdir)" ;; \
- 	      *) topdir="../../$(srcdir)" ;; \
- 	    esac ;; \
- 	esac; \
- 	  srcdiroption="--srcdir=$${topdir}/libffi"; \
- 	  libsrcdir="$$s/libffi"; \
- 	rm -f no-such-file || : ; \
- 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- 	  $(TARGET_CONFIGARGS) $${srcdiroption} \
- 	  --with-target-subdir="$(TARGET_SUBDIR)" \
- 	  || exit 1
  
! .PHONY: all-target-libffi maybe-all-target-libffi
! maybe-all-target-libffi:
! all-target-libffi: configure-target-libffi
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd $(TARGET_SUBDIR)/libffi && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  all)
  
- .PHONY: check-target-libffi maybe-check-target-libffi
- maybe-check-target-libffi:
  
! check-target-libffi:
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd $(TARGET_SUBDIR)/libffi && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  check)
  
  
! .PHONY: install-target-libffi maybe-install-target-libffi
! maybe-install-target-libffi:
  
! install-target-libffi: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd $(TARGET_SUBDIR)/libffi && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
  
  
- .PHONY: configure-target-libjava maybe-configure-target-libjava
- maybe-configure-target-libjava:
  
! # There's only one multilib.out.  Cleverer subdirs shouldn't need it copied.
! $(TARGET_SUBDIR)/libjava/multilib.out: multilib.out
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libjava ; \
! 	rm -f $(TARGET_SUBDIR)/libjava/Makefile || : ; \
! 	cp multilib.out $(TARGET_SUBDIR)/libjava/multilib.out
  
! configure-target-libjava: $(TARGET_SUBDIR)/libjava/multilib.out
! 	@test ! -f $(TARGET_SUBDIR)/libjava/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libjava ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	AR="$(AR_FOR_TARGET)"; export AR; \
! 	AS="$(AS_FOR_TARGET)"; export AS; \
! 	CC="$(CC_FOR_TARGET)"; export CC; \
! 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
! 	CXX_FOR_TARGET="$(RAW_CXX_FOR_TARGET)"; export CXX_FOR_TARGET; \
! 	CXX="$(RAW_CXX_FOR_TARGET)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
! 	GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
! 	DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
! 	LD="$(LD_FOR_TARGET)"; export LD; \
! 	LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
! 	NM="$(NM_FOR_TARGET)"; export NM; \
! 	RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
! 	WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
! 	SET_GCC_LIB_PATH_CMD="@SET_GCC_LIB_PATH@"; export SET_GCC_LIB_PATH_CMD; \
! 	@SET_GCC_LIB_PATH@ \
! 	echo Configuring in $(TARGET_SUBDIR)/libjava; \
! 	cd "$(TARGET_SUBDIR)/libjava" || exit 1; \
  	case $(srcdir) in \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    topdir=$(srcdir) ;; \
  	  *) \
! 	    case "$(TARGET_SUBDIR)" in \
! 	      .) topdir="../$(srcdir)" ;; \
! 	      *) topdir="../../$(srcdir)" ;; \
! 	    esac ;; \
  	esac; \
! 	  srcdiroption="--srcdir=$${topdir}/libjava"; \
! 	  libsrcdir="$$s/libjava"; \
! 	rm -f no-such-file || : ; \
! 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
! 	  $(TARGET_CONFIGARGS) $${srcdiroption} \
! 	  --with-target-subdir="$(TARGET_SUBDIR)" \
! 	  || exit 1
! 
! .PHONY: all-target-libjava maybe-all-target-libjava
! maybe-all-target-libjava:
! all-target-libjava: configure-target-libjava
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd $(TARGET_SUBDIR)/libjava && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)'  all)
! 
! .PHONY: check-target-libjava maybe-check-target-libjava
! maybe-check-target-libjava:
  
! check-target-libjava:
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd $(TARGET_SUBDIR)/libjava && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)'  check)
! 
! 
! .PHONY: install-target-libjava maybe-install-target-libjava
! maybe-install-target-libjava:
  
! install-target-libjava: installdirs
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd $(TARGET_SUBDIR)/libjava && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
  
  
! .PHONY: configure-target-zlib maybe-configure-target-zlib
! maybe-configure-target-zlib:
  
! # There's only one multilib.out.  Cleverer subdirs shouldn't need it copied.
! $(TARGET_SUBDIR)/zlib/multilib.out: multilib.out
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/zlib ; \
! 	rm -f $(TARGET_SUBDIR)/zlib/Makefile || : ; \
! 	cp multilib.out $(TARGET_SUBDIR)/zlib/multilib.out
  
! configure-target-zlib: $(TARGET_SUBDIR)/zlib/multilib.out
! 	@test ! -f $(TARGET_SUBDIR)/zlib/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/zlib ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	AR="$(AR_FOR_TARGET)"; export AR; \
! 	AS="$(AS_FOR_TARGET)"; export AS; \
! 	CC="$(CC_FOR_TARGET)"; export CC; \
! 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
! 	CXX="$(CXX_FOR_TARGET)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
! 	GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
! 	DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
! 	LD="$(LD_FOR_TARGET)"; export LD; \
! 	LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
! 	NM="$(NM_FOR_TARGET)"; export NM; \
! 	RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
! 	WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
! 	SET_GCC_LIB_PATH_CMD="@SET_GCC_LIB_PATH@"; export SET_GCC_LIB_PATH_CMD; \
! 	@SET_GCC_LIB_PATH@ \
! 	echo Configuring in $(TARGET_SUBDIR)/zlib; \
! 	cd "$(TARGET_SUBDIR)/zlib" || exit 1; \
  	case $(srcdir) in \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    topdir=$(srcdir) ;; \
  	  *) \
! 	    case "$(TARGET_SUBDIR)" in \
! 	      .) topdir="../$(srcdir)" ;; \
! 	      *) topdir="../../$(srcdir)" ;; \
! 	    esac ;; \
  	esac; \
! 	if [ "$(srcdir)" = "." ] ; then \
! 	  if [ "$(TARGET_SUBDIR)" != "." ] ; then \
! 	    if $(SHELL) $$s/symlink-tree $${topdir}/zlib "no-such-file" ; then \
! 	      if [ -f Makefile ]; then \
! 	        if $(MAKE) distclean; then \
! 	          true; \
! 	        else \
! 	          exit 1; \
! 	        fi; \
! 	      else \
! 	        true; \
! 	      fi; \
! 	    else \
! 	      exit 1; \
! 	    fi; \
! 	  else \
! 	    true; \
! 	  fi; \
! 	  srcdiroption="--srcdir=."; \
! 	  libsrcdir="."; \
! 	else \
! 	  srcdiroption="--srcdir=$${topdir}/zlib"; \
! 	  libsrcdir="$$s/zlib"; \
! 	fi; \
! 	rm -f no-such-file || : ; \
! 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
! 	  $(TARGET_CONFIGARGS) $${srcdiroption} \
! 	  --with-target-subdir="$(TARGET_SUBDIR)" \
! 	  || exit 1
  
! .PHONY: all-target-zlib maybe-all-target-zlib
! maybe-all-target-zlib:
! all-target-zlib: configure-target-zlib
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd $(TARGET_SUBDIR)/zlib && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  all)
  
! .PHONY: check-target-zlib maybe-check-target-zlib
! maybe-check-target-zlib:
  
- check-target-zlib:
- 	@r=`${PWD_COMMAND}`; export r; \
- 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
- 	$(SET_LIB_PATH) \
- 	(cd $(TARGET_SUBDIR)/zlib && \
- 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  check)
  
  
! .PHONY: install-target-zlib maybe-install-target-zlib
! maybe-install-target-zlib:
  
! install-target-zlib: installdirs
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd $(TARGET_SUBDIR)/zlib && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
  
  
- .PHONY: configure-target-boehm-gc maybe-configure-target-boehm-gc
- maybe-configure-target-boehm-gc:
  
! # There's only one multilib.out.  Cleverer subdirs shouldn't need it copied.
! $(TARGET_SUBDIR)/boehm-gc/multilib.out: multilib.out
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/boehm-gc ; \
! 	rm -f $(TARGET_SUBDIR)/boehm-gc/Makefile || : ; \
! 	cp multilib.out $(TARGET_SUBDIR)/boehm-gc/multilib.out
  
! configure-target-boehm-gc: $(TARGET_SUBDIR)/boehm-gc/multilib.out
! 	@test ! -f $(TARGET_SUBDIR)/boehm-gc/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/boehm-gc ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	AR="$(AR_FOR_TARGET)"; export AR; \
! 	AS="$(AS_FOR_TARGET)"; export AS; \
! 	CC="$(CC_FOR_TARGET)"; export CC; \
! 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
! 	CXX="$(CXX_FOR_TARGET)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
! 	GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
! 	DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
! 	LD="$(LD_FOR_TARGET)"; export LD; \
! 	LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
! 	NM="$(NM_FOR_TARGET)"; export NM; \
! 	RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
! 	WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
! 	SET_GCC_LIB_PATH_CMD="@SET_GCC_LIB_PATH@"; export SET_GCC_LIB_PATH_CMD; \
! 	@SET_GCC_LIB_PATH@ \
! 	echo Configuring in $(TARGET_SUBDIR)/boehm-gc; \
! 	cd "$(TARGET_SUBDIR)/boehm-gc" || exit 1; \
  	case $(srcdir) in \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    topdir=$(srcdir) ;; \
  	  *) \
! 	    case "$(TARGET_SUBDIR)" in \
! 	      .) topdir="../$(srcdir)" ;; \
! 	      *) topdir="../../$(srcdir)" ;; \
! 	    esac ;; \
  	esac; \
! 	  srcdiroption="--srcdir=$${topdir}/boehm-gc"; \
! 	  libsrcdir="$$s/boehm-gc"; \
! 	rm -f no-such-file || : ; \
! 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
! 	  $(TARGET_CONFIGARGS) $${srcdiroption} \
! 	  --with-target-subdir="$(TARGET_SUBDIR)" \
! 	  || exit 1
  
! .PHONY: all-target-boehm-gc maybe-all-target-boehm-gc
! maybe-all-target-boehm-gc:
! all-target-boehm-gc: configure-target-boehm-gc
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd $(TARGET_SUBDIR)/boehm-gc && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  all)
  
! .PHONY: check-target-boehm-gc maybe-check-target-boehm-gc
! maybe-check-target-boehm-gc:
  
- check-target-boehm-gc:
- 	@r=`${PWD_COMMAND}`; export r; \
- 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
- 	$(SET_LIB_PATH) \
- 	(cd $(TARGET_SUBDIR)/boehm-gc && \
- 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  check)
  
  
! .PHONY: install-target-boehm-gc maybe-install-target-boehm-gc
! maybe-install-target-boehm-gc:
  
! install-target-boehm-gc: installdirs
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd $(TARGET_SUBDIR)/boehm-gc && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
  
  
- .PHONY: configure-target-qthreads maybe-configure-target-qthreads
- maybe-configure-target-qthreads:
  
! # There's only one multilib.out.  Cleverer subdirs shouldn't need it copied.
! $(TARGET_SUBDIR)/qthreads/multilib.out: multilib.out
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/qthreads ; \
! 	rm -f $(TARGET_SUBDIR)/qthreads/Makefile || : ; \
! 	cp multilib.out $(TARGET_SUBDIR)/qthreads/multilib.out
  
! configure-target-qthreads: $(TARGET_SUBDIR)/qthreads/multilib.out
! 	@test ! -f $(TARGET_SUBDIR)/qthreads/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/qthreads ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	AR="$(AR_FOR_TARGET)"; export AR; \
! 	AS="$(AS_FOR_TARGET)"; export AS; \
! 	CC="$(CC_FOR_TARGET)"; export CC; \
! 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
! 	CXX="$(CXX_FOR_TARGET)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
! 	GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
! 	DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
! 	LD="$(LD_FOR_TARGET)"; export LD; \
! 	LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
! 	NM="$(NM_FOR_TARGET)"; export NM; \
! 	RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
! 	WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
! 	SET_GCC_LIB_PATH_CMD="@SET_GCC_LIB_PATH@"; export SET_GCC_LIB_PATH_CMD; \
! 	@SET_GCC_LIB_PATH@ \
! 	echo Configuring in $(TARGET_SUBDIR)/qthreads; \
! 	cd "$(TARGET_SUBDIR)/qthreads" || exit 1; \
  	case $(srcdir) in \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    topdir=$(srcdir) ;; \
  	  *) \
! 	    case "$(TARGET_SUBDIR)" in \
! 	      .) topdir="../$(srcdir)" ;; \
! 	      *) topdir="../../$(srcdir)" ;; \
! 	    esac ;; \
  	esac; \
! 	  srcdiroption="--srcdir=$${topdir}/qthreads"; \
! 	  libsrcdir="$$s/qthreads"; \
! 	rm -f no-such-file || : ; \
! 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
! 	  $(TARGET_CONFIGARGS) $${srcdiroption} \
! 	  --with-target-subdir="$(TARGET_SUBDIR)" \
! 	  || exit 1
  
! .PHONY: all-target-qthreads maybe-all-target-qthreads
! maybe-all-target-qthreads:
! all-target-qthreads: configure-target-qthreads
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd $(TARGET_SUBDIR)/qthreads && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  all)
  
! .PHONY: check-target-qthreads maybe-check-target-qthreads
! maybe-check-target-qthreads:
  
- check-target-qthreads:
- 	@r=`${PWD_COMMAND}`; export r; \
- 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
- 	$(SET_LIB_PATH) \
- 	(cd $(TARGET_SUBDIR)/qthreads && \
- 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  check)
  
  
! .PHONY: install-target-qthreads maybe-install-target-qthreads
! maybe-install-target-qthreads:
  
! install-target-qthreads: installdirs
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd $(TARGET_SUBDIR)/qthreads && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
  
  
- .PHONY: configure-target-rda maybe-configure-target-rda
- maybe-configure-target-rda:
  
! # There's only one multilib.out.  Cleverer subdirs shouldn't need it copied.
! $(TARGET_SUBDIR)/rda/multilib.out: multilib.out
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/rda ; \
! 	rm -f $(TARGET_SUBDIR)/rda/Makefile || : ; \
! 	cp multilib.out $(TARGET_SUBDIR)/rda/multilib.out
  
! configure-target-rda: $(TARGET_SUBDIR)/rda/multilib.out
! 	@test ! -f $(TARGET_SUBDIR)/rda/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/rda ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	AR="$(AR_FOR_TARGET)"; export AR; \
! 	AS="$(AS_FOR_TARGET)"; export AS; \
! 	CC="$(CC_FOR_TARGET)"; export CC; \
! 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
! 	CXX="$(CXX_FOR_TARGET)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
! 	GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
! 	DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
! 	LD="$(LD_FOR_TARGET)"; export LD; \
! 	LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
! 	NM="$(NM_FOR_TARGET)"; export NM; \
! 	RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
! 	WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
! 	SET_GCC_LIB_PATH_CMD="@SET_GCC_LIB_PATH@"; export SET_GCC_LIB_PATH_CMD; \
! 	@SET_GCC_LIB_PATH@ \
! 	echo Configuring in $(TARGET_SUBDIR)/rda; \
! 	cd "$(TARGET_SUBDIR)/rda" || exit 1; \
  	case $(srcdir) in \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    topdir=$(srcdir) ;; \
  	  *) \
! 	    case "$(TARGET_SUBDIR)" in \
! 	      .) topdir="../$(srcdir)" ;; \
! 	      *) topdir="../../$(srcdir)" ;; \
! 	    esac ;; \
  	esac; \
! 	  srcdiroption="--srcdir=$${topdir}/rda"; \
! 	  libsrcdir="$$s/rda"; \
! 	rm -f no-such-file || : ; \
! 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
! 	  $(TARGET_CONFIGARGS) $${srcdiroption} \
! 	  --with-target-subdir="$(TARGET_SUBDIR)" \
! 	  || exit 1
  
! .PHONY: all-target-rda maybe-all-target-rda
! maybe-all-target-rda:
! all-target-rda: configure-target-rda
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd $(TARGET_SUBDIR)/rda && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  all)
  
! .PHONY: check-target-rda maybe-check-target-rda
! maybe-check-target-rda:
  
- check-target-rda:
- 	@r=`${PWD_COMMAND}`; export r; \
- 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
- 	$(SET_LIB_PATH) \
- 	(cd $(TARGET_SUBDIR)/rda && \
- 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  check)
  
  
! .PHONY: install-target-rda maybe-install-target-rda
! maybe-install-target-rda:
  
! install-target-rda: installdirs
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	(cd $(TARGET_SUBDIR)/rda && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
  
  
  
! # ----------
! # GCC module
! # ----------
  
! # Unfortunately, while gcc _should_ be a host module,
! # libgcc is a target module, and gen* programs are
! # build modules.  So GCC is a sort of hybrid.
  
! # gcc is the only module which uses GCC_FLAGS_TO_PASS.
! # Don't use shared host config.cache, as it will confuse later
! # directories; GCC wants slightly different values for some
! # precious variables.  *sigh*
! .PHONY: configure-gcc maybe-configure-gcc
! maybe-configure-gcc:
! configure-gcc:
! 	@test ! -f gcc/Makefile || exit 0; \
! 	[ -d gcc ] || mkdir gcc; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	TOPLEVEL_CONFIGURE_ARGUMENTS="$(TOPLEVEL_CONFIGURE_ARGUMENTS)"; export TOPLEVEL_CONFIGURE_ARGUMENTS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	SET_GCC_LIB_PATH_CMD="@SET_GCC_LIB_PATH@"; export SET_GCC_LIB_PATH_CMD; \
! 	@SET_GCC_LIB_PATH@ \
! 	echo Configuring in gcc; \
! 	cd gcc || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/gcc"; \
! 	    libsrcdir="$$s/gcc";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/gcc"; \
! 	    libsrcdir="$$s/gcc";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
  
! # Don't 'make all' in gcc if it's already been made by 'bootstrap'; that
! # causes trouble.  This wart will be fixed eventually by moving
! # the bootstrap behavior to this file.
! .PHONY: all-gcc maybe-all-gcc
! maybe-all-gcc:
! all-gcc: configure-gcc
! 	@if [ -f gcc/stage_last ] ; then \
! 	  r=`${PWD_COMMAND}`; export r; \
! 	  s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	  $(SET_LIB_PATH) \
! 	  (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) quickstrap); \
! 	else \
! 	  r=`${PWD_COMMAND}`; export r; \
! 	  s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	  $(SET_LIB_PATH) \
! 	  (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) all); \
! 	fi
  
! # Building GCC uses some tools for rebuilding "source" files
! # like texinfo, bison/byacc, etc.  So we must depend on those.
! #
! # While building GCC, it may be necessary to run various target
! # programs like the assembler, linker, etc.  So we depend on
! # those too.
! #
! # In theory, on an SMP all those dependencies can be resolved
! # in parallel.
! #
! GCC_STRAP_TARGETS = bootstrap bootstrap-lean bootstrap2 bootstrap2-lean bootstrap3 bootstrap3-lean bootstrap4 bootstrap4-lean bubblestrap quickstrap cleanstrap restrap
! .PHONY: $(GCC_STRAP_TARGETS)
! $(GCC_STRAP_TARGETS): all-bootstrap configure-gcc
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	echo "Bootstrapping the compiler"; \
! 	cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) $@
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
- 	case "$@" in \
- 	  *bootstrap4-lean ) \
- 	    msg="Comparing stage3 and stage4 of the compiler"; \
- 	    compare=compare3-lean ;; \
- 	  *bootstrap4 ) \
- 	    msg="Comparing stage3 and stage4 of the compiler"; \
- 	    compare=compare3 ;; \
- 	  *-lean ) \
- 	    msg="Comparing stage2 and stage3 of the compiler"; \
- 	    compare=compare-lean ;; \
- 	  * ) \
- 	    msg="Comparing stage2 and stage3 of the compiler"; \
- 	    compare=compare ;; \
- 	esac; \
  	$(SET_LIB_PATH) \
! 	echo "$$msg"; \
! 	cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) $$compare
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}` ; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Building runtime libraries"; \
  	$(MAKE) $(BASE_FLAGS_TO_PASS) $(RECURSE_FLAGS) all
- 
- profiledbootstrap: all-bootstrap configure-gcc
- 	@r=`${PWD_COMMAND}`; export r; \
- 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
- 	$(SET_LIB_PATH) \
- 	echo "Bootstrapping training compiler"; \
- 	cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) stageprofile_build
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
  	echo "Building feedback based compiler"; \
! 	cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) stagefeedback_build
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}` ; export s; \
! 	$(SET_LIB_PATH) \
! 	echo "Building runtime libraries"; \
! 	$(MAKE) $(BASE_FLAGS_TO_PASS) $(RECURSE_FLAGS) all
  
! .PHONY: cross
! cross: all-texinfo all-bison all-byacc all-binutils all-gas all-ld
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	echo "Building the C and C++ compiler"; \
! 	cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) LANGUAGES="c c++"
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}` ; export s; \
! 	$(SET_LIB_PATH) \
! 	echo "Building runtime libraries"; \
! 	$(MAKE) $(BASE_FLAGS_TO_PASS) $(RECURSE_FLAGS) \
! 	  LANGUAGES="c c++" all
  
! .PHONY: check-gcc maybe-check-gcc
! maybe-check-gcc:
! check-gcc:
! 	@if [ -f ./gcc/Makefile ] ; then \
! 	  r=`${PWD_COMMAND}`; export r; \
! 	  s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	  $(SET_LIB_PATH) \
! 	  (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) check); \
! 	else \
! 	  true; \
! 	fi
  
! .PHONY: check-gcc-c++
! check-gcc-c++:
! 	@if [ -f ./gcc/Makefile ] ; then \
! 	  r=`${PWD_COMMAND}`; export r; \
! 	  s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	  $(SET_LIB_PATH) \
! 	  (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) check-c++); \
! 	else \
! 	  true; \
! 	fi
  
! .PHONY: check-c++
! check-c++: check-target-libstdc++-v3 check-gcc-c++
  
! .PHONY: install-gcc maybe-install-gcc
! maybe-install-gcc:
! install-gcc:
! 	@if [ -f ./gcc/Makefile ] ; then \
! 	  r=`${PWD_COMMAND}`; export r; \
! 	  s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	  $(SET_LIB_PATH) \
! 	  (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) install); \
! 	else \
! 	  true; \
! 	fi
  
- # Install the gcc headers files, but not the fixed include files,
- # which Cygnus is not allowed to distribute.  This rule is very
- # dependent on the workings of the gcc Makefile.in.
- .PHONY: gcc-no-fixedincludes
- gcc-no-fixedincludes:
- 	@if [ -f ./gcc/Makefile ]; then \
- 	  rm -rf gcc/tmp-include; \
- 	  mv gcc/include gcc/tmp-include 2>/dev/null; \
- 	  mkdir gcc/include; \
- 	  cp $(srcdir)/gcc/gsyslimits.h gcc/include/syslimits.h; \
- 	  touch gcc/stmp-fixinc gcc/include/fixed; \
- 	  rm -f gcc/stmp-headers gcc/stmp-int-hdrs; \
- 	  r=`${PWD_COMMAND}`; export r; \
- 	  s=`cd $(srcdir); ${PWD_COMMAND}` ; export s; \
- 	  $(SET_LIB_PATH) \
- 	  (cd ./gcc && \
- 	   $(MAKE) $(GCC_FLAGS_TO_PASS) install); \
- 	  rm -rf gcc/include; \
- 	  mv gcc/tmp-include gcc/include 2>/dev/null; \
- 	else true; fi
  
! # --------------------------------------
! # Dependencies between different modules
! # --------------------------------------
  
  # There are two types of dependencies here: 'hard' dependencies, where one
  # module simply won't build without the other; and 'soft' dependencies, where
  # if the depended-on module is missing, the depending module will do without
  # or find a substitute somewhere (perhaps installed).  Soft dependencies
! # are specified by depending on a 'maybe-' target.  If you're not sure,
  # it's safer to use a soft dependency.
  
! # Host modules specific to gcc.
! # GCC needs to identify certain tools.
! # GCC also needs the information exported by the intl configure script.
! configure-gcc: maybe-configure-intl maybe-configure-binutils maybe-configure-gas maybe-configure-ld maybe-configure-bison maybe-configure-flex
! all-gcc: maybe-all-libiberty maybe-all-intl maybe-all-bison maybe-all-byacc maybe-all-binutils maybe-all-gas maybe-all-ld maybe-all-zlib
! # This is a slightly kludgy method of getting dependencies on 
! # all-build-libiberty correct; it would be better to build it every time.
  all-gcc: maybe-all-build-libiberty
- all-bootstrap: maybe-all-libiberty maybe-all-intl maybe-all-texinfo maybe-all-bison maybe-all-byacc maybe-all-binutils maybe-all-gas maybe-all-ld maybe-all-zlib
  
! # Host modules specific to gdb.
! # GDB needs to know that the simulator is being built.
! configure-gdb: maybe-configure-itcl maybe-configure-tcl maybe-configure-tk maybe-configure-sim
! GDB_TK = @GDB_TK@
! all-gdb: maybe-all-libiberty maybe-all-opcodes maybe-all-bfd maybe-all-mmalloc maybe-all-readline maybe-all-bison maybe-all-byacc maybe-all-sim $(gdbnlmrequirements) $(GDB_TK)
! install-gdb: maybe-install-tcl maybe-install-tk maybe-install-itcl maybe-install-tix maybe-install-libgui
! configure-libgui: maybe-configure-tcl maybe-configure-tk
! all-libgui: maybe-all-tcl maybe-all-tk maybe-all-itcl
  
! # Host modules specific to binutils.
  configure-bfd: configure-libiberty
! all-bfd: maybe-all-libiberty maybe-all-intl
! all-binutils: maybe-all-libiberty maybe-all-opcodes maybe-all-bfd maybe-all-flex maybe-all-bison maybe-all-byacc maybe-all-intl
! # We put install-opcodes before install-binutils because the installed
! # binutils might be on PATH, and they might need the shared opcodes
! # library.
  install-binutils: maybe-install-opcodes
- # libopcodes depends on libbfd
  install-opcodes: maybe-install-bfd
! all-gas: maybe-all-libiberty maybe-all-opcodes maybe-all-bfd maybe-all-intl
! all-gprof: maybe-all-libiberty maybe-all-bfd maybe-all-opcodes maybe-all-intl
! all-ld: maybe-all-libiberty maybe-all-bfd maybe-all-opcodes maybe-all-bison maybe-all-byacc maybe-all-flex maybe-all-intl
! all-opcodes: maybe-all-bfd maybe-all-libiberty
  
! # Other host modules in the 'src' repository.
! all-dejagnu: maybe-all-tcl maybe-all-expect maybe-all-tk
! configure-expect: maybe-configure-tcl maybe-configure-tk
! all-expect: maybe-all-tcl maybe-all-tk
! configure-itcl: maybe-configure-tcl maybe-configure-tk
! all-itcl: maybe-all-tcl maybe-all-tk
! # We put install-tcl before install-itcl because itcl wants to run a
! # program on installation which uses the Tcl libraries.
  install-itcl: maybe-install-tcl
- all-sid: maybe-all-libiberty maybe-all-bfd maybe-all-opcodes maybe-all-tcl maybe-all-tk
- install-sid: maybe-install-tcl maybe-install-tk
- all-sim: maybe-all-libiberty maybe-all-bfd maybe-all-opcodes maybe-all-readline maybe-configure-gdb
  configure-tk: maybe-configure-tcl
  all-tk: maybe-all-tcl
! configure-tix: maybe-configure-tcl maybe-configure-tk
! all-tix: maybe-all-tcl maybe-all-tk
! all-texinfo: maybe-all-libiberty
! 
! # Other host modules.  Warning, these are not well tested.
! all-autoconf: maybe-all-m4 maybe-all-texinfo
! all-automake: maybe-all-m4 maybe-all-texinfo
! all-bison: maybe-all-texinfo
! all-diff: maybe-all-libiberty
! all-fastjar: maybe-all-zlib maybe-all-libiberty
! all-fileutils: maybe-all-libiberty
! all-flex: maybe-all-libiberty maybe-all-bison maybe-all-byacc
! all-gzip: maybe-all-libiberty
! all-hello: maybe-all-libiberty
! all-m4: maybe-all-libiberty maybe-all-texinfo
! all-make: maybe-all-libiberty maybe-all-intl
! all-patch: maybe-all-libiberty
  all-prms: maybe-all-libiberty
! all-recode: maybe-all-libiberty
! all-sed: maybe-all-libiberty
  all-send-pr: maybe-all-prms
! all-tar: maybe-all-libiberty
! all-uudecode: maybe-all-libiberty
! 
! ALL_GCC = maybe-all-gcc
! ALL_GCC_C = $(ALL_GCC) maybe-all-target-newlib maybe-all-target-libgloss
! ALL_GCC_CXX = $(ALL_GCC_C) maybe-all-target-libstdc++-v3
! 
! # Target modules specific to gcc.
! configure-target-boehm-gc: $(ALL_GCC_C) maybe-configure-target-qthreads
  configure-target-fastjar: maybe-configure-target-zlib
! all-target-fastjar: maybe-all-target-zlib maybe-all-target-libiberty
! configure-target-libf2c: $(ALL_GCC_C)
! all-target-libf2c: maybe-all-target-libiberty
! configure-target-libffi: $(ALL_GCC_C) 
! configure-target-libjava: $(ALL_GCC_C) maybe-configure-target-zlib maybe-configure-target-boehm-gc maybe-configure-target-qthreads maybe-configure-target-libffi
! all-target-libjava: maybe-all-fastjar maybe-all-target-zlib maybe-all-target-boehm-gc maybe-all-target-qthreads maybe-all-target-libffi
! configure-target-libobjc: $(ALL_GCC_C)
  all-target-libobjc: maybe-all-target-libiberty
- configure-target-libstdc++-v3: $(ALL_GCC_C)
  all-target-libstdc++-v3: maybe-all-target-libiberty
- configure-target-zlib: $(ALL_GCC_C)
- 
- # Target modules in the 'src' repository.
- configure-target-examples: $(ALL_GCC_C)
- configure-target-libgloss: $(ALL_GCC)
  all-target-libgloss: maybe-configure-target-newlib
! configure-target-libiberty: $(ALL_GCC)
! configure-target-libtermcap: $(ALL_GCC_C)
! configure-target-newlib: $(ALL_GCC)
! configure-target-rda: $(ALL_GCC_C)
! configure-target-winsup: $(ALL_GCC_C)
! all-target-winsup: maybe-all-target-libiberty maybe-all-target-libtermcap
  
- # Other target modules.  Warning, these are not well tested.
- configure-target-gperf: $(ALL_GCC_CXX)
- all-target-gperf: maybe-all-target-libiberty maybe-all-target-libstdc++-v3
- configure-target-qthreads: $(ALL_GCC_C)
  
! # Dependencies of maybe-foo on foo.  These are used because, for example,
! # all-gcc only depends on all-gas if gas is present and being configured.
! @maybe_dependencies@
  
  # Serialization dependencies.  Host configures don't work well in parallel to
  # each other, due to contention over config.cache.  Target configures and 
--- 31136,35527 ----
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  --disable-intermodule 	  --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" 
  
! maybe-all-stage1-libiberty: all-stage1-libiberty
! all-stage1-libiberty: configure-stage1-libiberty
! 	@$(MAKE) stage1-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(HOST_EXPORTS)  \
! 	cd libiberty && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		CFLAGS="$(STAGE1_CFLAGS)" 
  
+ maybe-clean-stage1-libiberty: clean-stage1-libiberty
+ clean-stage1-libiberty:
+ 	@[ -f libiberty/Makefile ] || [ -f stage1-libiberty/Makefile ] \
+ 	  || exit 0 ; \
+ 	[ -f libiberty/Makefile ] || $(MAKE) stage1-start ; \
+ 	cd libiberty && \
+ 	$(MAKE) $(FLAGS_TO_PASS)  \
+ 		CFLAGS="$(STAGE1_CFLAGS)"  clean
+ @endif libiberty-bootstrap
  
  
! .PHONY: configure-stage1-zlib maybe-configure-stage1-zlib
! .PHONY: all-stage1-zlib maybe-all-stage1-zlib
! .PHONY: clean-stage1-zlib maybe-clean-stage1-zlib
  
+ maybe-configure-stage1-zlib:
+ maybe-all-stage1-zlib:
+ maybe-clean-stage1-zlib:
  
! @if zlib-bootstrap
! maybe-configure-stage1-zlib: configure-stage1-zlib
! configure-stage1-zlib:
! 	@$(MAKE) stage1-start
! 	@[ -f zlib/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(HOST_EXPORTS)  \
! 	echo Configuring stage 1 in zlib ; \
! 	cd zlib || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/zlib"; \
! 	    libsrcdir="$$s/zlib";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/zlib"; \
! 	    libsrcdir="$$s/zlib";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  --disable-intermodule 	  --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" 
  
! maybe-all-stage1-zlib: all-stage1-zlib
! all-stage1-zlib: configure-stage1-zlib
! 	@$(MAKE) stage1-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(HOST_EXPORTS)  \
! 	cd zlib && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		CFLAGS="$(STAGE1_CFLAGS)" 
  
! maybe-clean-stage1-zlib: clean-stage1-zlib
! clean-stage1-zlib:
! 	@[ -f zlib/Makefile ] || [ -f stage1-zlib/Makefile ] \
! 	  || exit 0 ; \
! 	[ -f zlib/Makefile ] || $(MAKE) stage1-start ; \
! 	cd zlib && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		CFLAGS="$(STAGE1_CFLAGS)"  clean
! @endif zlib-bootstrap
  
  
  
! # FIXME: Will not need to be conditional when toplevel bootstrap is the
! # only possibility, but now it conflicts with no-bootstrap rules
! @if gcc-bootstrap
  
  
  
! 
! # Rules to wipe a stage and all the following ones, also used for cleanstrap
! 
! .PHONY: distclean-stage1
! distclean-stage1::
! 	[ -f stage_current ] && $(MAKE) `cat stage_current`-end || :
! 	rm -rf stage1-* 
! 
! 
! @endif gcc-bootstrap
! 
! 
! .PHONY: stage2-start stage2-end
! 
! stage2-start::
! 	@[ -f stage_current ] && $(MAKE) `cat stage_current`-end || : ; \
! 	echo stage2 > stage_current ; \
! 	echo stage2 > stage_last
! @if bfd
! 	@[ -d stage2-bfd ] || mkdir stage2-bfd; \
! 	set stage2-bfd bfd ; @CREATE_LINK_TO_DIR@  ; \
! 	set stage1-bfd prev-bfd ; @CREATE_LINK_TO_DIR@ 
! @endif bfd
! @if opcodes
! 	@[ -d stage2-opcodes ] || mkdir stage2-opcodes; \
! 	set stage2-opcodes opcodes ; @CREATE_LINK_TO_DIR@  ; \
! 	set stage1-opcodes prev-opcodes ; @CREATE_LINK_TO_DIR@ 
! @endif opcodes
! @if binutils
! 	@[ -d stage2-binutils ] || mkdir stage2-binutils; \
! 	set stage2-binutils binutils ; @CREATE_LINK_TO_DIR@  ; \
! 	set stage1-binutils prev-binutils ; @CREATE_LINK_TO_DIR@ 
! @endif binutils
! @if gas
! 	@[ -d stage2-gas ] || mkdir stage2-gas; \
! 	set stage2-gas gas ; @CREATE_LINK_TO_DIR@  ; \
! 	set stage1-gas prev-gas ; @CREATE_LINK_TO_DIR@ 
! @endif gas
! @if gcc
! 	@[ -d stage2-gcc ] || mkdir stage2-gcc; \
! 	set stage2-gcc gcc ; @CREATE_LINK_TO_DIR@  ; \
! 	set stage1-gcc prev-gcc ; @CREATE_LINK_TO_DIR@ 
! @endif gcc
! @if intl
! 	@[ -d stage2-intl ] || mkdir stage2-intl; \
! 	set stage2-intl intl ; @CREATE_LINK_TO_DIR@  ; \
! 	set stage1-intl prev-intl ; @CREATE_LINK_TO_DIR@ 
! @endif intl
! @if ld
! 	@[ -d stage2-ld ] || mkdir stage2-ld; \
! 	set stage2-ld ld ; @CREATE_LINK_TO_DIR@  ; \
! 	set stage1-ld prev-ld ; @CREATE_LINK_TO_DIR@ 
! @endif ld
! @if libcpp
! 	@[ -d stage2-libcpp ] || mkdir stage2-libcpp; \
! 	set stage2-libcpp libcpp ; @CREATE_LINK_TO_DIR@  ; \
! 	set stage1-libcpp prev-libcpp ; @CREATE_LINK_TO_DIR@ 
! @endif libcpp
! @if libiberty
! 	@[ -d stage2-libiberty ] || mkdir stage2-libiberty; \
! 	set stage2-libiberty libiberty ; @CREATE_LINK_TO_DIR@  ; \
! 	set stage1-libiberty prev-libiberty ; @CREATE_LINK_TO_DIR@ 
! @endif libiberty
! @if zlib
! 	@[ -d stage2-zlib ] || mkdir stage2-zlib; \
! 	set stage2-zlib zlib ; @CREATE_LINK_TO_DIR@  ; \
! 	set stage1-zlib prev-zlib ; @CREATE_LINK_TO_DIR@ 
! @endif zlib
! 
! stage2-end::
! 	@rm -f stage_current
! @if bfd
! 	@set bfd stage2-bfd ; @UNDO_LINK_TO_DIR@  ; \
! 	set prev-bfd stage1-bfd ; @UNDO_LINK_TO_DIR@ 
! @endif bfd
! @if opcodes
! 	@set opcodes stage2-opcodes ; @UNDO_LINK_TO_DIR@  ; \
! 	set prev-opcodes stage1-opcodes ; @UNDO_LINK_TO_DIR@ 
! @endif opcodes
! @if binutils
! 	@set binutils stage2-binutils ; @UNDO_LINK_TO_DIR@  ; \
! 	set prev-binutils stage1-binutils ; @UNDO_LINK_TO_DIR@ 
! @endif binutils
! @if gas
! 	@set gas stage2-gas ; @UNDO_LINK_TO_DIR@  ; \
! 	set prev-gas stage1-gas ; @UNDO_LINK_TO_DIR@ 
! @endif gas
! @if gcc
! 	@set gcc stage2-gcc ; @UNDO_LINK_TO_DIR@  ; \
! 	set prev-gcc stage1-gcc ; @UNDO_LINK_TO_DIR@ 
! @endif gcc
! @if intl
! 	@set intl stage2-intl ; @UNDO_LINK_TO_DIR@  ; \
! 	set prev-intl stage1-intl ; @UNDO_LINK_TO_DIR@ 
! @endif intl
! @if ld
! 	@set ld stage2-ld ; @UNDO_LINK_TO_DIR@  ; \
! 	set prev-ld stage1-ld ; @UNDO_LINK_TO_DIR@ 
! @endif ld
! @if libcpp
! 	@set libcpp stage2-libcpp ; @UNDO_LINK_TO_DIR@  ; \
! 	set prev-libcpp stage1-libcpp ; @UNDO_LINK_TO_DIR@ 
! @endif libcpp
! @if libiberty
! 	@set libiberty stage2-libiberty ; @UNDO_LINK_TO_DIR@  ; \
! 	set prev-libiberty stage1-libiberty ; @UNDO_LINK_TO_DIR@ 
! @endif libiberty
! @if zlib
! 	@set zlib stage2-zlib ; @UNDO_LINK_TO_DIR@  ; \
! 	set prev-zlib stage1-zlib ; @UNDO_LINK_TO_DIR@ 
! @endif zlib
! 
! # Bubble a bugfix through all the stages up to stage 2.  They
! # are remade, but not reconfigured.  The next stage (if any) will not
! # be reconfigured as well.
! .PHONY: stage2-bubble
! stage2-bubble:: stage1-bubble
! 	@if test -f stage2-lean || test -f stage1-lean  ; then \
! 	  echo Skipping rebuild of stage2 ; \
! 	else \
! 	  $(MAKE) $(RECURSE_FLAGS_TO_PASS) NOTPARALLEL= all-stage2; \
! 	fi
! 
! .PHONY: all-stage2 clean-stage2
! all-stage2:     \
!   maybe-all-stage2-bfd \
!   maybe-all-stage2-opcodes \
!   maybe-all-stage2-binutils              \
!   maybe-all-stage2-gas \
!   maybe-all-stage2-gcc        \
!   maybe-all-stage2-intl   \
!   maybe-all-stage2-ld \
!   maybe-all-stage2-libcpp  \
!   maybe-all-stage2-libiberty                        \
!   maybe-all-stage2-zlib       
! 
! do-clean: clean-stage2
! clean-stage2:     \
!   maybe-clean-stage2-bfd \
!   maybe-clean-stage2-opcodes \
!   maybe-clean-stage2-binutils              \
!   maybe-clean-stage2-gas \
!   maybe-clean-stage2-gcc        \
!   maybe-clean-stage2-intl   \
!   maybe-clean-stage2-ld \
!   maybe-clean-stage2-libcpp  \
!   maybe-clean-stage2-libiberty                        \
!   maybe-clean-stage2-zlib       
! 
! 
! .PHONY: configure-stage2-bfd maybe-configure-stage2-bfd
! .PHONY: all-stage2-bfd maybe-all-stage2-bfd
! .PHONY: clean-stage2-bfd maybe-clean-stage2-bfd
! 
! maybe-configure-stage2-bfd:
! maybe-all-stage2-bfd:
! maybe-clean-stage2-bfd:
! 
! @if bfd-bootstrap
! maybe-configure-stage2-bfd: configure-stage2-bfd
! configure-stage2-bfd:
! 	@$(MAKE) stage2-start
! 	@[ -f bfd/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage 2 in bfd ; \
! 	cd bfd || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/bfd"; \
! 	    libsrcdir="$$s/bfd";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/bfd"; \
! 	    libsrcdir="$$s/bfd";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stage2-bfd: all-stage2-bfd
! all-stage2-bfd: configure-stage2-bfd
! 	@$(MAKE) stage2-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd bfd && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		 
  
+ maybe-clean-stage2-bfd: clean-stage2-bfd
+ clean-stage2-bfd:
+ 	@[ -f bfd/Makefile ] || [ -f stage2-bfd/Makefile ] \
+ 	  || exit 0 ; \
+ 	[ -f bfd/Makefile ] || $(MAKE) stage2-start ; \
+ 	cd bfd && \
+ 	$(MAKE) $(FLAGS_TO_PASS)  \
+ 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
+ 		  clean
+ @endif bfd-bootstrap
  
  
! .PHONY: configure-stage2-opcodes maybe-configure-stage2-opcodes
! .PHONY: all-stage2-opcodes maybe-all-stage2-opcodes
! .PHONY: clean-stage2-opcodes maybe-clean-stage2-opcodes
  
+ maybe-configure-stage2-opcodes:
+ maybe-all-stage2-opcodes:
+ maybe-clean-stage2-opcodes:
  
! @if opcodes-bootstrap
! maybe-configure-stage2-opcodes: configure-stage2-opcodes
! configure-stage2-opcodes:
! 	@$(MAKE) stage2-start
! 	@[ -f opcodes/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage 2 in opcodes ; \
! 	cd opcodes || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/opcodes"; \
! 	    libsrcdir="$$s/opcodes";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/opcodes"; \
! 	    libsrcdir="$$s/opcodes";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stage2-opcodes: all-stage2-opcodes
! all-stage2-opcodes: configure-stage2-opcodes
! 	@$(MAKE) stage2-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd opcodes && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		 
  
+ maybe-clean-stage2-opcodes: clean-stage2-opcodes
+ clean-stage2-opcodes:
+ 	@[ -f opcodes/Makefile ] || [ -f stage2-opcodes/Makefile ] \
+ 	  || exit 0 ; \
+ 	[ -f opcodes/Makefile ] || $(MAKE) stage2-start ; \
+ 	cd opcodes && \
+ 	$(MAKE) $(FLAGS_TO_PASS)  \
+ 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
+ 		  clean
+ @endif opcodes-bootstrap
  
  
! .PHONY: configure-stage2-binutils maybe-configure-stage2-binutils
! .PHONY: all-stage2-binutils maybe-all-stage2-binutils
! .PHONY: clean-stage2-binutils maybe-clean-stage2-binutils
  
+ maybe-configure-stage2-binutils:
+ maybe-all-stage2-binutils:
+ maybe-clean-stage2-binutils:
  
! @if binutils-bootstrap
! maybe-configure-stage2-binutils: configure-stage2-binutils
! configure-stage2-binutils:
! 	@$(MAKE) stage2-start
! 	@[ -f binutils/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage 2 in binutils ; \
! 	cd binutils || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/binutils"; \
! 	    libsrcdir="$$s/binutils";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/binutils"; \
! 	    libsrcdir="$$s/binutils";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stage2-binutils: all-stage2-binutils
! all-stage2-binutils: configure-stage2-binutils
! 	@$(MAKE) stage2-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd binutils && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		 
  
+ maybe-clean-stage2-binutils: clean-stage2-binutils
+ clean-stage2-binutils:
+ 	@[ -f binutils/Makefile ] || [ -f stage2-binutils/Makefile ] \
+ 	  || exit 0 ; \
+ 	[ -f binutils/Makefile ] || $(MAKE) stage2-start ; \
+ 	cd binutils && \
+ 	$(MAKE) $(FLAGS_TO_PASS)  \
+ 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
+ 		  clean
+ @endif binutils-bootstrap
  
  
! .PHONY: configure-stage2-gas maybe-configure-stage2-gas
! .PHONY: all-stage2-gas maybe-all-stage2-gas
! .PHONY: clean-stage2-gas maybe-clean-stage2-gas
  
+ maybe-configure-stage2-gas:
+ maybe-all-stage2-gas:
+ maybe-clean-stage2-gas:
  
! @if gas-bootstrap
! maybe-configure-stage2-gas: configure-stage2-gas
! configure-stage2-gas:
! 	@$(MAKE) stage2-start
! 	@[ -f gas/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage 2 in gas ; \
! 	cd gas || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/gas"; \
! 	    libsrcdir="$$s/gas";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/gas"; \
! 	    libsrcdir="$$s/gas";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stage2-gas: all-stage2-gas
! all-stage2-gas: configure-stage2-gas
! 	@$(MAKE) stage2-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd gas && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		 
  
+ maybe-clean-stage2-gas: clean-stage2-gas
+ clean-stage2-gas:
+ 	@[ -f gas/Makefile ] || [ -f stage2-gas/Makefile ] \
+ 	  || exit 0 ; \
+ 	[ -f gas/Makefile ] || $(MAKE) stage2-start ; \
+ 	cd gas && \
+ 	$(MAKE) $(FLAGS_TO_PASS)  \
+ 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
+ 		  clean
+ @endif gas-bootstrap
  
  
! .PHONY: configure-stage2-gcc maybe-configure-stage2-gcc
! .PHONY: all-stage2-gcc maybe-all-stage2-gcc
! .PHONY: clean-stage2-gcc maybe-clean-stage2-gcc
  
+ maybe-configure-stage2-gcc:
+ maybe-all-stage2-gcc:
+ maybe-clean-stage2-gcc:
  
! @if gcc-bootstrap
! maybe-configure-stage2-gcc: configure-stage2-gcc
! configure-stage2-gcc:
! 	@$(MAKE) stage2-start
! 	@[ -f gcc/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage 2 in gcc ; \
! 	cd gcc || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/gcc"; \
! 	    libsrcdir="$$s/gcc";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/gcc"; \
! 	    libsrcdir="$$s/gcc";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stage2-gcc: all-stage2-gcc
! all-stage2-gcc: configure-stage2-gcc
! 	@$(MAKE) stage2-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd gcc && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		 $(EXTRA_GCC_FLAGS)
  
+ maybe-clean-stage2-gcc: clean-stage2-gcc
+ clean-stage2-gcc:
+ 	@[ -f gcc/Makefile ] || [ -f stage2-gcc/Makefile ] \
+ 	  || exit 0 ; \
+ 	[ -f gcc/Makefile ] || $(MAKE) stage2-start ; \
+ 	cd gcc && \
+ 	$(MAKE) $(FLAGS_TO_PASS)  \
+ 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
+ 		 $(EXTRA_GCC_FLAGS) clean
+ @endif gcc-bootstrap
  
  
! .PHONY: configure-stage2-intl maybe-configure-stage2-intl
! .PHONY: all-stage2-intl maybe-all-stage2-intl
! .PHONY: clean-stage2-intl maybe-clean-stage2-intl
  
+ maybe-configure-stage2-intl:
+ maybe-all-stage2-intl:
+ maybe-clean-stage2-intl:
  
! @if intl-bootstrap
! maybe-configure-stage2-intl: configure-stage2-intl
! configure-stage2-intl:
! 	@$(MAKE) stage2-start
! 	@[ -f intl/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage 2 in intl ; \
! 	cd intl || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/intl"; \
! 	    libsrcdir="$$s/intl";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/intl"; \
! 	    libsrcdir="$$s/intl";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stage2-intl: all-stage2-intl
! all-stage2-intl: configure-stage2-intl
! 	@$(MAKE) stage2-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd intl && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		 
  
+ maybe-clean-stage2-intl: clean-stage2-intl
+ clean-stage2-intl:
+ 	@[ -f intl/Makefile ] || [ -f stage2-intl/Makefile ] \
+ 	  || exit 0 ; \
+ 	[ -f intl/Makefile ] || $(MAKE) stage2-start ; \
+ 	cd intl && \
+ 	$(MAKE) $(FLAGS_TO_PASS)  \
+ 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
+ 		  clean
+ @endif intl-bootstrap
  
  
! .PHONY: configure-stage2-ld maybe-configure-stage2-ld
! .PHONY: all-stage2-ld maybe-all-stage2-ld
! .PHONY: clean-stage2-ld maybe-clean-stage2-ld
  
+ maybe-configure-stage2-ld:
+ maybe-all-stage2-ld:
+ maybe-clean-stage2-ld:
  
! @if ld-bootstrap
! maybe-configure-stage2-ld: configure-stage2-ld
! configure-stage2-ld:
! 	@$(MAKE) stage2-start
! 	@[ -f ld/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage 2 in ld ; \
! 	cd ld || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/ld"; \
! 	    libsrcdir="$$s/ld";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/ld"; \
! 	    libsrcdir="$$s/ld";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stage2-ld: all-stage2-ld
! all-stage2-ld: configure-stage2-ld
! 	@$(MAKE) stage2-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd ld && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		 
  
+ maybe-clean-stage2-ld: clean-stage2-ld
+ clean-stage2-ld:
+ 	@[ -f ld/Makefile ] || [ -f stage2-ld/Makefile ] \
+ 	  || exit 0 ; \
+ 	[ -f ld/Makefile ] || $(MAKE) stage2-start ; \
+ 	cd ld && \
+ 	$(MAKE) $(FLAGS_TO_PASS)  \
+ 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
+ 		  clean
+ @endif ld-bootstrap
  
  
! .PHONY: configure-stage2-libcpp maybe-configure-stage2-libcpp
! .PHONY: all-stage2-libcpp maybe-all-stage2-libcpp
! .PHONY: clean-stage2-libcpp maybe-clean-stage2-libcpp
  
+ maybe-configure-stage2-libcpp:
+ maybe-all-stage2-libcpp:
+ maybe-clean-stage2-libcpp:
  
! @if libcpp-bootstrap
! maybe-configure-stage2-libcpp: configure-stage2-libcpp
! configure-stage2-libcpp:
! 	@$(MAKE) stage2-start
! 	@[ -f libcpp/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage 2 in libcpp ; \
! 	cd libcpp || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/libcpp"; \
! 	    libsrcdir="$$s/libcpp";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/libcpp"; \
! 	    libsrcdir="$$s/libcpp";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stage2-libcpp: all-stage2-libcpp
! all-stage2-libcpp: configure-stage2-libcpp
! 	@$(MAKE) stage2-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd libcpp && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		 
  
+ maybe-clean-stage2-libcpp: clean-stage2-libcpp
+ clean-stage2-libcpp:
+ 	@[ -f libcpp/Makefile ] || [ -f stage2-libcpp/Makefile ] \
+ 	  || exit 0 ; \
+ 	[ -f libcpp/Makefile ] || $(MAKE) stage2-start ; \
+ 	cd libcpp && \
+ 	$(MAKE) $(FLAGS_TO_PASS)  \
+ 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
+ 		  clean
+ @endif libcpp-bootstrap
  
  
! .PHONY: configure-stage2-libiberty maybe-configure-stage2-libiberty
! .PHONY: all-stage2-libiberty maybe-all-stage2-libiberty
! .PHONY: clean-stage2-libiberty maybe-clean-stage2-libiberty
  
+ maybe-configure-stage2-libiberty:
+ maybe-all-stage2-libiberty:
+ maybe-clean-stage2-libiberty:
  
! @if libiberty-bootstrap
! maybe-configure-stage2-libiberty: configure-stage2-libiberty
! configure-stage2-libiberty:
! 	@$(MAKE) stage2-start
! 	@[ -f libiberty/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage 2 in libiberty ; \
! 	cd libiberty || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/libiberty"; \
! 	    libsrcdir="$$s/libiberty";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/libiberty"; \
! 	    libsrcdir="$$s/libiberty";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stage2-libiberty: all-stage2-libiberty
! all-stage2-libiberty: configure-stage2-libiberty
! 	@$(MAKE) stage2-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd libiberty && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		 
  
! maybe-clean-stage2-libiberty: clean-stage2-libiberty
! clean-stage2-libiberty:
! 	@[ -f libiberty/Makefile ] || [ -f stage2-libiberty/Makefile ] \
! 	  || exit 0 ; \
! 	[ -f libiberty/Makefile ] || $(MAKE) stage2-start ; \
! 	cd libiberty && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		  clean
! @endif libiberty-bootstrap
  
  
! .PHONY: configure-stage2-zlib maybe-configure-stage2-zlib
! .PHONY: all-stage2-zlib maybe-all-stage2-zlib
! .PHONY: clean-stage2-zlib maybe-clean-stage2-zlib
  
+ maybe-configure-stage2-zlib:
+ maybe-all-stage2-zlib:
+ maybe-clean-stage2-zlib:
  
! @if zlib-bootstrap
! maybe-configure-stage2-zlib: configure-stage2-zlib
! configure-stage2-zlib:
! 	@$(MAKE) stage2-start
! 	@[ -f zlib/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage 2 in zlib ; \
! 	cd zlib || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/zlib"; \
! 	    libsrcdir="$$s/zlib";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/zlib"; \
! 	    libsrcdir="$$s/zlib";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stage2-zlib: all-stage2-zlib
! all-stage2-zlib: configure-stage2-zlib
! 	@$(MAKE) stage2-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd zlib && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		 
  
! maybe-clean-stage2-zlib: clean-stage2-zlib
! clean-stage2-zlib:
! 	@[ -f zlib/Makefile ] || [ -f stage2-zlib/Makefile ] \
! 	  || exit 0 ; \
! 	[ -f zlib/Makefile ] || $(MAKE) stage2-start ; \
! 	cd zlib && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		  clean
! @endif zlib-bootstrap
  
  
  
! # FIXME: Will not need to be conditional when toplevel bootstrap is the
! # only possibility, but now it conflicts with no-bootstrap rules
! @if gcc-bootstrap
  
  
  
! .PHONY: bootstrap2
! bootstrap2: stage2-bubble  all
! 
! 
! # Rules to wipe a stage and all the following ones, also used for cleanstrap
! distclean-stage1:: distclean-stage2 
! .PHONY: distclean-stage2
! distclean-stage2::
! 	[ -f stage_current ] && $(MAKE) `cat stage_current`-end || :
! 	rm -rf stage2-* 
! 
! 
! @endif gcc-bootstrap
! 
! 
! .PHONY: stage3-start stage3-end
! 
! stage3-start::
! 	@[ -f stage_current ] && $(MAKE) `cat stage_current`-end || : ; \
! 	echo stage3 > stage_current ; \
! 	echo stage3 > stage_last
! @if bfd
! 	@[ -d stage3-bfd ] || mkdir stage3-bfd; \
! 	set stage3-bfd bfd ; @CREATE_LINK_TO_DIR@  ; \
! 	set stage2-bfd prev-bfd ; @CREATE_LINK_TO_DIR@ 
! @endif bfd
! @if opcodes
! 	@[ -d stage3-opcodes ] || mkdir stage3-opcodes; \
! 	set stage3-opcodes opcodes ; @CREATE_LINK_TO_DIR@  ; \
! 	set stage2-opcodes prev-opcodes ; @CREATE_LINK_TO_DIR@ 
! @endif opcodes
! @if binutils
! 	@[ -d stage3-binutils ] || mkdir stage3-binutils; \
! 	set stage3-binutils binutils ; @CREATE_LINK_TO_DIR@  ; \
! 	set stage2-binutils prev-binutils ; @CREATE_LINK_TO_DIR@ 
! @endif binutils
! @if gas
! 	@[ -d stage3-gas ] || mkdir stage3-gas; \
! 	set stage3-gas gas ; @CREATE_LINK_TO_DIR@  ; \
! 	set stage2-gas prev-gas ; @CREATE_LINK_TO_DIR@ 
! @endif gas
! @if gcc
! 	@[ -d stage3-gcc ] || mkdir stage3-gcc; \
! 	set stage3-gcc gcc ; @CREATE_LINK_TO_DIR@  ; \
! 	set stage2-gcc prev-gcc ; @CREATE_LINK_TO_DIR@ 
! @endif gcc
! @if intl
! 	@[ -d stage3-intl ] || mkdir stage3-intl; \
! 	set stage3-intl intl ; @CREATE_LINK_TO_DIR@  ; \
! 	set stage2-intl prev-intl ; @CREATE_LINK_TO_DIR@ 
! @endif intl
! @if ld
! 	@[ -d stage3-ld ] || mkdir stage3-ld; \
! 	set stage3-ld ld ; @CREATE_LINK_TO_DIR@  ; \
! 	set stage2-ld prev-ld ; @CREATE_LINK_TO_DIR@ 
! @endif ld
! @if libcpp
! 	@[ -d stage3-libcpp ] || mkdir stage3-libcpp; \
! 	set stage3-libcpp libcpp ; @CREATE_LINK_TO_DIR@  ; \
! 	set stage2-libcpp prev-libcpp ; @CREATE_LINK_TO_DIR@ 
! @endif libcpp
! @if libiberty
! 	@[ -d stage3-libiberty ] || mkdir stage3-libiberty; \
! 	set stage3-libiberty libiberty ; @CREATE_LINK_TO_DIR@  ; \
! 	set stage2-libiberty prev-libiberty ; @CREATE_LINK_TO_DIR@ 
! @endif libiberty
! @if zlib
! 	@[ -d stage3-zlib ] || mkdir stage3-zlib; \
! 	set stage3-zlib zlib ; @CREATE_LINK_TO_DIR@  ; \
! 	set stage2-zlib prev-zlib ; @CREATE_LINK_TO_DIR@ 
! @endif zlib
! 
! stage3-end::
! 	@rm -f stage_current
! @if bfd
! 	@set bfd stage3-bfd ; @UNDO_LINK_TO_DIR@  ; \
! 	set prev-bfd stage2-bfd ; @UNDO_LINK_TO_DIR@ 
! @endif bfd
! @if opcodes
! 	@set opcodes stage3-opcodes ; @UNDO_LINK_TO_DIR@  ; \
! 	set prev-opcodes stage2-opcodes ; @UNDO_LINK_TO_DIR@ 
! @endif opcodes
! @if binutils
! 	@set binutils stage3-binutils ; @UNDO_LINK_TO_DIR@  ; \
! 	set prev-binutils stage2-binutils ; @UNDO_LINK_TO_DIR@ 
! @endif binutils
! @if gas
! 	@set gas stage3-gas ; @UNDO_LINK_TO_DIR@  ; \
! 	set prev-gas stage2-gas ; @UNDO_LINK_TO_DIR@ 
! @endif gas
! @if gcc
! 	@set gcc stage3-gcc ; @UNDO_LINK_TO_DIR@  ; \
! 	set prev-gcc stage2-gcc ; @UNDO_LINK_TO_DIR@ 
! @endif gcc
! @if intl
! 	@set intl stage3-intl ; @UNDO_LINK_TO_DIR@  ; \
! 	set prev-intl stage2-intl ; @UNDO_LINK_TO_DIR@ 
! @endif intl
! @if ld
! 	@set ld stage3-ld ; @UNDO_LINK_TO_DIR@  ; \
! 	set prev-ld stage2-ld ; @UNDO_LINK_TO_DIR@ 
! @endif ld
! @if libcpp
! 	@set libcpp stage3-libcpp ; @UNDO_LINK_TO_DIR@  ; \
! 	set prev-libcpp stage2-libcpp ; @UNDO_LINK_TO_DIR@ 
! @endif libcpp
! @if libiberty
! 	@set libiberty stage3-libiberty ; @UNDO_LINK_TO_DIR@  ; \
! 	set prev-libiberty stage2-libiberty ; @UNDO_LINK_TO_DIR@ 
! @endif libiberty
! @if zlib
! 	@set zlib stage3-zlib ; @UNDO_LINK_TO_DIR@  ; \
! 	set prev-zlib stage2-zlib ; @UNDO_LINK_TO_DIR@ 
! @endif zlib
! 
! # Bubble a bugfix through all the stages up to stage 3.  They
! # are remade, but not reconfigured.  The next stage (if any) will not
! # be reconfigured as well.
! .PHONY: stage3-bubble
! stage3-bubble:: stage2-bubble
! 	@bootstrap_lean@-rm -rf stage1-* ; $(STAMP) stage1-lean
! 	@if test -f stage3-lean || test -f stage2-lean  ; then \
! 	  echo Skipping rebuild of stage3 ; \
! 	else \
! 	  $(MAKE) $(RECURSE_FLAGS_TO_PASS) NOTPARALLEL= all-stage3; \
! 	fi
! 
! .PHONY: all-stage3 clean-stage3
! all-stage3:     \
!   maybe-all-stage3-bfd \
!   maybe-all-stage3-opcodes \
!   maybe-all-stage3-binutils              \
!   maybe-all-stage3-gas \
!   maybe-all-stage3-gcc        \
!   maybe-all-stage3-intl   \
!   maybe-all-stage3-ld \
!   maybe-all-stage3-libcpp  \
!   maybe-all-stage3-libiberty                        \
!   maybe-all-stage3-zlib       
! 
! do-clean: clean-stage3
! clean-stage3:     \
!   maybe-clean-stage3-bfd \
!   maybe-clean-stage3-opcodes \
!   maybe-clean-stage3-binutils              \
!   maybe-clean-stage3-gas \
!   maybe-clean-stage3-gcc        \
!   maybe-clean-stage3-intl   \
!   maybe-clean-stage3-ld \
!   maybe-clean-stage3-libcpp  \
!   maybe-clean-stage3-libiberty                        \
!   maybe-clean-stage3-zlib       
! 
! 
! .PHONY: configure-stage3-bfd maybe-configure-stage3-bfd
! .PHONY: all-stage3-bfd maybe-all-stage3-bfd
! .PHONY: clean-stage3-bfd maybe-clean-stage3-bfd
! 
! maybe-configure-stage3-bfd:
! maybe-all-stage3-bfd:
! maybe-clean-stage3-bfd:
! 
! @if bfd-bootstrap
! maybe-configure-stage3-bfd: configure-stage3-bfd
! configure-stage3-bfd:
! 	@$(MAKE) stage3-start
! 	@[ -f bfd/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage 3 in bfd ; \
! 	cd bfd || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/bfd"; \
! 	    libsrcdir="$$s/bfd";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/bfd"; \
! 	    libsrcdir="$$s/bfd";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stage3-bfd: all-stage3-bfd
! all-stage3-bfd: configure-stage3-bfd
! 	@$(MAKE) stage3-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd bfd && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		 
  
+ maybe-clean-stage3-bfd: clean-stage3-bfd
+ clean-stage3-bfd:
+ 	@[ -f bfd/Makefile ] || [ -f stage3-bfd/Makefile ] \
+ 	  || exit 0 ; \
+ 	[ -f bfd/Makefile ] || $(MAKE) stage3-start ; \
+ 	cd bfd && \
+ 	$(MAKE) $(FLAGS_TO_PASS)  \
+ 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
+ 		  clean
+ @endif bfd-bootstrap
  
  
! .PHONY: configure-stage3-opcodes maybe-configure-stage3-opcodes
! .PHONY: all-stage3-opcodes maybe-all-stage3-opcodes
! .PHONY: clean-stage3-opcodes maybe-clean-stage3-opcodes
  
+ maybe-configure-stage3-opcodes:
+ maybe-all-stage3-opcodes:
+ maybe-clean-stage3-opcodes:
  
! @if opcodes-bootstrap
! maybe-configure-stage3-opcodes: configure-stage3-opcodes
! configure-stage3-opcodes:
! 	@$(MAKE) stage3-start
! 	@[ -f opcodes/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage 3 in opcodes ; \
! 	cd opcodes || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/opcodes"; \
! 	    libsrcdir="$$s/opcodes";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/opcodes"; \
! 	    libsrcdir="$$s/opcodes";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stage3-opcodes: all-stage3-opcodes
! all-stage3-opcodes: configure-stage3-opcodes
! 	@$(MAKE) stage3-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd opcodes && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		 
  
+ maybe-clean-stage3-opcodes: clean-stage3-opcodes
+ clean-stage3-opcodes:
+ 	@[ -f opcodes/Makefile ] || [ -f stage3-opcodes/Makefile ] \
+ 	  || exit 0 ; \
+ 	[ -f opcodes/Makefile ] || $(MAKE) stage3-start ; \
+ 	cd opcodes && \
+ 	$(MAKE) $(FLAGS_TO_PASS)  \
+ 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
+ 		  clean
+ @endif opcodes-bootstrap
  
  
! .PHONY: configure-stage3-binutils maybe-configure-stage3-binutils
! .PHONY: all-stage3-binutils maybe-all-stage3-binutils
! .PHONY: clean-stage3-binutils maybe-clean-stage3-binutils
  
+ maybe-configure-stage3-binutils:
+ maybe-all-stage3-binutils:
+ maybe-clean-stage3-binutils:
  
! @if binutils-bootstrap
! maybe-configure-stage3-binutils: configure-stage3-binutils
! configure-stage3-binutils:
! 	@$(MAKE) stage3-start
! 	@[ -f binutils/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage 3 in binutils ; \
! 	cd binutils || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/binutils"; \
! 	    libsrcdir="$$s/binutils";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/binutils"; \
! 	    libsrcdir="$$s/binutils";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stage3-binutils: all-stage3-binutils
! all-stage3-binutils: configure-stage3-binutils
! 	@$(MAKE) stage3-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd binutils && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		 
  
+ maybe-clean-stage3-binutils: clean-stage3-binutils
+ clean-stage3-binutils:
+ 	@[ -f binutils/Makefile ] || [ -f stage3-binutils/Makefile ] \
+ 	  || exit 0 ; \
+ 	[ -f binutils/Makefile ] || $(MAKE) stage3-start ; \
+ 	cd binutils && \
+ 	$(MAKE) $(FLAGS_TO_PASS)  \
+ 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
+ 		  clean
+ @endif binutils-bootstrap
  
  
! .PHONY: configure-stage3-gas maybe-configure-stage3-gas
! .PHONY: all-stage3-gas maybe-all-stage3-gas
! .PHONY: clean-stage3-gas maybe-clean-stage3-gas
  
+ maybe-configure-stage3-gas:
+ maybe-all-stage3-gas:
+ maybe-clean-stage3-gas:
  
! @if gas-bootstrap
! maybe-configure-stage3-gas: configure-stage3-gas
! configure-stage3-gas:
! 	@$(MAKE) stage3-start
! 	@[ -f gas/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage 3 in gas ; \
! 	cd gas || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/gas"; \
! 	    libsrcdir="$$s/gas";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/gas"; \
! 	    libsrcdir="$$s/gas";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stage3-gas: all-stage3-gas
! all-stage3-gas: configure-stage3-gas
! 	@$(MAKE) stage3-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd gas && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		 
  
+ maybe-clean-stage3-gas: clean-stage3-gas
+ clean-stage3-gas:
+ 	@[ -f gas/Makefile ] || [ -f stage3-gas/Makefile ] \
+ 	  || exit 0 ; \
+ 	[ -f gas/Makefile ] || $(MAKE) stage3-start ; \
+ 	cd gas && \
+ 	$(MAKE) $(FLAGS_TO_PASS)  \
+ 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
+ 		  clean
+ @endif gas-bootstrap
  
  
! .PHONY: configure-stage3-gcc maybe-configure-stage3-gcc
! .PHONY: all-stage3-gcc maybe-all-stage3-gcc
! .PHONY: clean-stage3-gcc maybe-clean-stage3-gcc
  
+ maybe-configure-stage3-gcc:
+ maybe-all-stage3-gcc:
+ maybe-clean-stage3-gcc:
  
! @if gcc-bootstrap
! maybe-configure-stage3-gcc: configure-stage3-gcc
! configure-stage3-gcc:
! 	@$(MAKE) stage3-start
! 	@[ -f gcc/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage 3 in gcc ; \
! 	cd gcc || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/gcc"; \
! 	    libsrcdir="$$s/gcc";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/gcc"; \
! 	    libsrcdir="$$s/gcc";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stage3-gcc: all-stage3-gcc
! all-stage3-gcc: configure-stage3-gcc
! 	@$(MAKE) stage3-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd gcc && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		 $(EXTRA_GCC_FLAGS)
  
+ maybe-clean-stage3-gcc: clean-stage3-gcc
+ clean-stage3-gcc:
+ 	@[ -f gcc/Makefile ] || [ -f stage3-gcc/Makefile ] \
+ 	  || exit 0 ; \
+ 	[ -f gcc/Makefile ] || $(MAKE) stage3-start ; \
+ 	cd gcc && \
+ 	$(MAKE) $(FLAGS_TO_PASS)  \
+ 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
+ 		 $(EXTRA_GCC_FLAGS) clean
+ @endif gcc-bootstrap
  
  
! .PHONY: configure-stage3-intl maybe-configure-stage3-intl
! .PHONY: all-stage3-intl maybe-all-stage3-intl
! .PHONY: clean-stage3-intl maybe-clean-stage3-intl
  
+ maybe-configure-stage3-intl:
+ maybe-all-stage3-intl:
+ maybe-clean-stage3-intl:
  
! @if intl-bootstrap
! maybe-configure-stage3-intl: configure-stage3-intl
! configure-stage3-intl:
! 	@$(MAKE) stage3-start
! 	@[ -f intl/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage 3 in intl ; \
! 	cd intl || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/intl"; \
! 	    libsrcdir="$$s/intl";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/intl"; \
! 	    libsrcdir="$$s/intl";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stage3-intl: all-stage3-intl
! all-stage3-intl: configure-stage3-intl
! 	@$(MAKE) stage3-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd intl && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		 
  
+ maybe-clean-stage3-intl: clean-stage3-intl
+ clean-stage3-intl:
+ 	@[ -f intl/Makefile ] || [ -f stage3-intl/Makefile ] \
+ 	  || exit 0 ; \
+ 	[ -f intl/Makefile ] || $(MAKE) stage3-start ; \
+ 	cd intl && \
+ 	$(MAKE) $(FLAGS_TO_PASS)  \
+ 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
+ 		  clean
+ @endif intl-bootstrap
  
  
! .PHONY: configure-stage3-ld maybe-configure-stage3-ld
! .PHONY: all-stage3-ld maybe-all-stage3-ld
! .PHONY: clean-stage3-ld maybe-clean-stage3-ld
  
+ maybe-configure-stage3-ld:
+ maybe-all-stage3-ld:
+ maybe-clean-stage3-ld:
  
! @if ld-bootstrap
! maybe-configure-stage3-ld: configure-stage3-ld
! configure-stage3-ld:
! 	@$(MAKE) stage3-start
! 	@[ -f ld/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage 3 in ld ; \
! 	cd ld || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/ld"; \
! 	    libsrcdir="$$s/ld";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/ld"; \
! 	    libsrcdir="$$s/ld";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stage3-ld: all-stage3-ld
! all-stage3-ld: configure-stage3-ld
! 	@$(MAKE) stage3-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd ld && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		 
  
+ maybe-clean-stage3-ld: clean-stage3-ld
+ clean-stage3-ld:
+ 	@[ -f ld/Makefile ] || [ -f stage3-ld/Makefile ] \
+ 	  || exit 0 ; \
+ 	[ -f ld/Makefile ] || $(MAKE) stage3-start ; \
+ 	cd ld && \
+ 	$(MAKE) $(FLAGS_TO_PASS)  \
+ 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
+ 		  clean
+ @endif ld-bootstrap
  
  
! .PHONY: configure-stage3-libcpp maybe-configure-stage3-libcpp
! .PHONY: all-stage3-libcpp maybe-all-stage3-libcpp
! .PHONY: clean-stage3-libcpp maybe-clean-stage3-libcpp
  
+ maybe-configure-stage3-libcpp:
+ maybe-all-stage3-libcpp:
+ maybe-clean-stage3-libcpp:
  
! @if libcpp-bootstrap
! maybe-configure-stage3-libcpp: configure-stage3-libcpp
! configure-stage3-libcpp:
! 	@$(MAKE) stage3-start
! 	@[ -f libcpp/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage 3 in libcpp ; \
! 	cd libcpp || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/libcpp"; \
! 	    libsrcdir="$$s/libcpp";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/libcpp"; \
! 	    libsrcdir="$$s/libcpp";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stage3-libcpp: all-stage3-libcpp
! all-stage3-libcpp: configure-stage3-libcpp
! 	@$(MAKE) stage3-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd libcpp && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		 
  
+ maybe-clean-stage3-libcpp: clean-stage3-libcpp
+ clean-stage3-libcpp:
+ 	@[ -f libcpp/Makefile ] || [ -f stage3-libcpp/Makefile ] \
+ 	  || exit 0 ; \
+ 	[ -f libcpp/Makefile ] || $(MAKE) stage3-start ; \
+ 	cd libcpp && \
+ 	$(MAKE) $(FLAGS_TO_PASS)  \
+ 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
+ 		  clean
+ @endif libcpp-bootstrap
  
  
! .PHONY: configure-stage3-libiberty maybe-configure-stage3-libiberty
! .PHONY: all-stage3-libiberty maybe-all-stage3-libiberty
! .PHONY: clean-stage3-libiberty maybe-clean-stage3-libiberty
  
+ maybe-configure-stage3-libiberty:
+ maybe-all-stage3-libiberty:
+ maybe-clean-stage3-libiberty:
  
! @if libiberty-bootstrap
! maybe-configure-stage3-libiberty: configure-stage3-libiberty
! configure-stage3-libiberty:
! 	@$(MAKE) stage3-start
! 	@[ -f libiberty/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage 3 in libiberty ; \
! 	cd libiberty || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/libiberty"; \
! 	    libsrcdir="$$s/libiberty";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/libiberty"; \
! 	    libsrcdir="$$s/libiberty";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stage3-libiberty: all-stage3-libiberty
! all-stage3-libiberty: configure-stage3-libiberty
! 	@$(MAKE) stage3-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd libiberty && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		 
  
+ maybe-clean-stage3-libiberty: clean-stage3-libiberty
+ clean-stage3-libiberty:
+ 	@[ -f libiberty/Makefile ] || [ -f stage3-libiberty/Makefile ] \
+ 	  || exit 0 ; \
+ 	[ -f libiberty/Makefile ] || $(MAKE) stage3-start ; \
+ 	cd libiberty && \
+ 	$(MAKE) $(FLAGS_TO_PASS)  \
+ 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
+ 		  clean
+ @endif libiberty-bootstrap
  
  
! .PHONY: configure-stage3-zlib maybe-configure-stage3-zlib
! .PHONY: all-stage3-zlib maybe-all-stage3-zlib
! .PHONY: clean-stage3-zlib maybe-clean-stage3-zlib
  
+ maybe-configure-stage3-zlib:
+ maybe-all-stage3-zlib:
+ maybe-clean-stage3-zlib:
  
! @if zlib-bootstrap
! maybe-configure-stage3-zlib: configure-stage3-zlib
! configure-stage3-zlib:
! 	@$(MAKE) stage3-start
! 	@[ -f zlib/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage 3 in zlib ; \
! 	cd zlib || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/zlib"; \
! 	    libsrcdir="$$s/zlib";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/zlib"; \
! 	    libsrcdir="$$s/zlib";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stage3-zlib: all-stage3-zlib
! all-stage3-zlib: configure-stage3-zlib
! 	@$(MAKE) stage3-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd zlib && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		 
  
! maybe-clean-stage3-zlib: clean-stage3-zlib
! clean-stage3-zlib:
! 	@[ -f zlib/Makefile ] || [ -f stage3-zlib/Makefile ] \
! 	  || exit 0 ; \
! 	[ -f zlib/Makefile ] || $(MAKE) stage3-start ; \
! 	cd zlib && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		  clean
! @endif zlib-bootstrap
  
  
  
! # FIXME: Will not need to be conditional when toplevel bootstrap is the
! # only possibility, but now it conflicts with no-bootstrap rules
! @if gcc-bootstrap
  
! compare:
! 	@if test -f stage2-lean; then \
! 	  echo Cannot compare object files as stage 2 was deleted. ; \
! 	  exit 0 ; \
! 	fi; \
! 	[ -f stage_current ] && $(MAKE) `cat stage_current`-end || : ; \
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	rm -f .bad_compare ; \
! 	cd stage3-gcc; \
! 	files=`find . -name "*$(objext)" -print` ; \
! 	cd .. ; \
! 	for file in $${files} ; do \
! 	  f1=$$r/stage2-gcc/$$file; f2=$$r/stage3-gcc/$$file; \
! 	  @do_compare@ > /dev/null 2>&1; \
! 	  test $$? -eq 1 && echo $$file differs >> .bad_compare || true; \
! 	done ; \
! 	if [ -f .bad_compare ]; then \
! 	  echo "Bootstrap comparison failure!"; \
! 	  cat .bad_compare; \
! 	  exit 1; \
! 	else \
! 	  true; \
! 	fi ; \
! 	$(STAMP) compare
! 	@bootstrap_lean@-rm -rf stage2-* ; $(STAMP) stage2-lean
  
  
! 
! .PHONY: bootstrap
! bootstrap: stage3-bubble compare all
! 
! 
! # Rules to wipe a stage and all the following ones, also used for cleanstrap
! distclean-stage2:: distclean-stage3 
! .PHONY: distclean-stage3
! distclean-stage3::
! 	[ -f stage_current ] && $(MAKE) `cat stage_current`-end || :
! 	rm -rf stage3-* compare 
! 
! 
! .PHONY: cleanstrap
! cleanstrap: distclean bootstrap
! 
! @endif gcc-bootstrap
! 
! 
! .PHONY: stage4-start stage4-end
! 
! stage4-start::
! 	@[ -f stage_current ] && $(MAKE) `cat stage_current`-end || : ; \
! 	echo stage4 > stage_current ; \
! 	echo stage4 > stage_last
! @if bfd
! 	@[ -d stage4-bfd ] || mkdir stage4-bfd; \
! 	set stage4-bfd bfd ; @CREATE_LINK_TO_DIR@  ; \
! 	set stage3-bfd prev-bfd ; @CREATE_LINK_TO_DIR@ 
! @endif bfd
! @if opcodes
! 	@[ -d stage4-opcodes ] || mkdir stage4-opcodes; \
! 	set stage4-opcodes opcodes ; @CREATE_LINK_TO_DIR@  ; \
! 	set stage3-opcodes prev-opcodes ; @CREATE_LINK_TO_DIR@ 
! @endif opcodes
! @if binutils
! 	@[ -d stage4-binutils ] || mkdir stage4-binutils; \
! 	set stage4-binutils binutils ; @CREATE_LINK_TO_DIR@  ; \
! 	set stage3-binutils prev-binutils ; @CREATE_LINK_TO_DIR@ 
! @endif binutils
! @if gas
! 	@[ -d stage4-gas ] || mkdir stage4-gas; \
! 	set stage4-gas gas ; @CREATE_LINK_TO_DIR@  ; \
! 	set stage3-gas prev-gas ; @CREATE_LINK_TO_DIR@ 
! @endif gas
! @if gcc
! 	@[ -d stage4-gcc ] || mkdir stage4-gcc; \
! 	set stage4-gcc gcc ; @CREATE_LINK_TO_DIR@  ; \
! 	set stage3-gcc prev-gcc ; @CREATE_LINK_TO_DIR@ 
! @endif gcc
! @if intl
! 	@[ -d stage4-intl ] || mkdir stage4-intl; \
! 	set stage4-intl intl ; @CREATE_LINK_TO_DIR@  ; \
! 	set stage3-intl prev-intl ; @CREATE_LINK_TO_DIR@ 
! @endif intl
! @if ld
! 	@[ -d stage4-ld ] || mkdir stage4-ld; \
! 	set stage4-ld ld ; @CREATE_LINK_TO_DIR@  ; \
! 	set stage3-ld prev-ld ; @CREATE_LINK_TO_DIR@ 
! @endif ld
! @if libcpp
! 	@[ -d stage4-libcpp ] || mkdir stage4-libcpp; \
! 	set stage4-libcpp libcpp ; @CREATE_LINK_TO_DIR@  ; \
! 	set stage3-libcpp prev-libcpp ; @CREATE_LINK_TO_DIR@ 
! @endif libcpp
! @if libiberty
! 	@[ -d stage4-libiberty ] || mkdir stage4-libiberty; \
! 	set stage4-libiberty libiberty ; @CREATE_LINK_TO_DIR@  ; \
! 	set stage3-libiberty prev-libiberty ; @CREATE_LINK_TO_DIR@ 
! @endif libiberty
! @if zlib
! 	@[ -d stage4-zlib ] || mkdir stage4-zlib; \
! 	set stage4-zlib zlib ; @CREATE_LINK_TO_DIR@  ; \
! 	set stage3-zlib prev-zlib ; @CREATE_LINK_TO_DIR@ 
! @endif zlib
! 
! stage4-end::
! 	@rm -f stage_current
! @if bfd
! 	@set bfd stage4-bfd ; @UNDO_LINK_TO_DIR@  ; \
! 	set prev-bfd stage3-bfd ; @UNDO_LINK_TO_DIR@ 
! @endif bfd
! @if opcodes
! 	@set opcodes stage4-opcodes ; @UNDO_LINK_TO_DIR@  ; \
! 	set prev-opcodes stage3-opcodes ; @UNDO_LINK_TO_DIR@ 
! @endif opcodes
! @if binutils
! 	@set binutils stage4-binutils ; @UNDO_LINK_TO_DIR@  ; \
! 	set prev-binutils stage3-binutils ; @UNDO_LINK_TO_DIR@ 
! @endif binutils
! @if gas
! 	@set gas stage4-gas ; @UNDO_LINK_TO_DIR@  ; \
! 	set prev-gas stage3-gas ; @UNDO_LINK_TO_DIR@ 
! @endif gas
! @if gcc
! 	@set gcc stage4-gcc ; @UNDO_LINK_TO_DIR@  ; \
! 	set prev-gcc stage3-gcc ; @UNDO_LINK_TO_DIR@ 
! @endif gcc
! @if intl
! 	@set intl stage4-intl ; @UNDO_LINK_TO_DIR@  ; \
! 	set prev-intl stage3-intl ; @UNDO_LINK_TO_DIR@ 
! @endif intl
! @if ld
! 	@set ld stage4-ld ; @UNDO_LINK_TO_DIR@  ; \
! 	set prev-ld stage3-ld ; @UNDO_LINK_TO_DIR@ 
! @endif ld
! @if libcpp
! 	@set libcpp stage4-libcpp ; @UNDO_LINK_TO_DIR@  ; \
! 	set prev-libcpp stage3-libcpp ; @UNDO_LINK_TO_DIR@ 
! @endif libcpp
! @if libiberty
! 	@set libiberty stage4-libiberty ; @UNDO_LINK_TO_DIR@  ; \
! 	set prev-libiberty stage3-libiberty ; @UNDO_LINK_TO_DIR@ 
! @endif libiberty
! @if zlib
! 	@set zlib stage4-zlib ; @UNDO_LINK_TO_DIR@  ; \
! 	set prev-zlib stage3-zlib ; @UNDO_LINK_TO_DIR@ 
! @endif zlib
! 
! # Bubble a bugfix through all the stages up to stage 4.  They
! # are remade, but not reconfigured.  The next stage (if any) will not
! # be reconfigured as well.
! .PHONY: stage4-bubble
! stage4-bubble:: stage3-bubble
! 	@bootstrap_lean@-rm -rf stage2-* ; $(STAMP) stage2-lean
! 	@if test -f stage4-lean || test -f stage3-lean  ; then \
! 	  echo Skipping rebuild of stage4 ; \
! 	else \
! 	  $(MAKE) $(RECURSE_FLAGS_TO_PASS) NOTPARALLEL= all-stage4; \
! 	fi
! 
! .PHONY: all-stage4 clean-stage4
! all-stage4:     \
!   maybe-all-stage4-bfd \
!   maybe-all-stage4-opcodes \
!   maybe-all-stage4-binutils              \
!   maybe-all-stage4-gas \
!   maybe-all-stage4-gcc        \
!   maybe-all-stage4-intl   \
!   maybe-all-stage4-ld \
!   maybe-all-stage4-libcpp  \
!   maybe-all-stage4-libiberty                        \
!   maybe-all-stage4-zlib       
! 
! do-clean: clean-stage4
! clean-stage4:     \
!   maybe-clean-stage4-bfd \
!   maybe-clean-stage4-opcodes \
!   maybe-clean-stage4-binutils              \
!   maybe-clean-stage4-gas \
!   maybe-clean-stage4-gcc        \
!   maybe-clean-stage4-intl   \
!   maybe-clean-stage4-ld \
!   maybe-clean-stage4-libcpp  \
!   maybe-clean-stage4-libiberty                        \
!   maybe-clean-stage4-zlib       
! 
! 
! .PHONY: configure-stage4-bfd maybe-configure-stage4-bfd
! .PHONY: all-stage4-bfd maybe-all-stage4-bfd
! .PHONY: clean-stage4-bfd maybe-clean-stage4-bfd
! 
! maybe-configure-stage4-bfd:
! maybe-all-stage4-bfd:
! maybe-clean-stage4-bfd:
! 
! @if bfd-bootstrap
! maybe-configure-stage4-bfd: configure-stage4-bfd
! configure-stage4-bfd:
! 	@$(MAKE) stage4-start
! 	@[ -f bfd/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage 4 in bfd ; \
! 	cd bfd || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/bfd"; \
! 	    libsrcdir="$$s/bfd";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/bfd"; \
! 	    libsrcdir="$$s/bfd";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stage4-bfd: all-stage4-bfd
! all-stage4-bfd: configure-stage4-bfd
! 	@$(MAKE) stage4-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd bfd && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		 
  
+ maybe-clean-stage4-bfd: clean-stage4-bfd
+ clean-stage4-bfd:
+ 	@[ -f bfd/Makefile ] || [ -f stage4-bfd/Makefile ] \
+ 	  || exit 0 ; \
+ 	[ -f bfd/Makefile ] || $(MAKE) stage4-start ; \
+ 	cd bfd && \
+ 	$(MAKE) $(FLAGS_TO_PASS)  \
+ 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
+ 		  clean
+ @endif bfd-bootstrap
  
  
! .PHONY: configure-stage4-opcodes maybe-configure-stage4-opcodes
! .PHONY: all-stage4-opcodes maybe-all-stage4-opcodes
! .PHONY: clean-stage4-opcodes maybe-clean-stage4-opcodes
  
+ maybe-configure-stage4-opcodes:
+ maybe-all-stage4-opcodes:
+ maybe-clean-stage4-opcodes:
  
! @if opcodes-bootstrap
! maybe-configure-stage4-opcodes: configure-stage4-opcodes
! configure-stage4-opcodes:
! 	@$(MAKE) stage4-start
! 	@[ -f opcodes/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage 4 in opcodes ; \
! 	cd opcodes || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/opcodes"; \
! 	    libsrcdir="$$s/opcodes";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/opcodes"; \
! 	    libsrcdir="$$s/opcodes";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stage4-opcodes: all-stage4-opcodes
! all-stage4-opcodes: configure-stage4-opcodes
! 	@$(MAKE) stage4-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd opcodes && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		 
  
+ maybe-clean-stage4-opcodes: clean-stage4-opcodes
+ clean-stage4-opcodes:
+ 	@[ -f opcodes/Makefile ] || [ -f stage4-opcodes/Makefile ] \
+ 	  || exit 0 ; \
+ 	[ -f opcodes/Makefile ] || $(MAKE) stage4-start ; \
+ 	cd opcodes && \
+ 	$(MAKE) $(FLAGS_TO_PASS)  \
+ 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
+ 		  clean
+ @endif opcodes-bootstrap
  
  
! .PHONY: configure-stage4-binutils maybe-configure-stage4-binutils
! .PHONY: all-stage4-binutils maybe-all-stage4-binutils
! .PHONY: clean-stage4-binutils maybe-clean-stage4-binutils
  
+ maybe-configure-stage4-binutils:
+ maybe-all-stage4-binutils:
+ maybe-clean-stage4-binutils:
  
! @if binutils-bootstrap
! maybe-configure-stage4-binutils: configure-stage4-binutils
! configure-stage4-binutils:
! 	@$(MAKE) stage4-start
! 	@[ -f binutils/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage 4 in binutils ; \
! 	cd binutils || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/binutils"; \
! 	    libsrcdir="$$s/binutils";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/binutils"; \
! 	    libsrcdir="$$s/binutils";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stage4-binutils: all-stage4-binutils
! all-stage4-binutils: configure-stage4-binutils
! 	@$(MAKE) stage4-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd binutils && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		 
  
+ maybe-clean-stage4-binutils: clean-stage4-binutils
+ clean-stage4-binutils:
+ 	@[ -f binutils/Makefile ] || [ -f stage4-binutils/Makefile ] \
+ 	  || exit 0 ; \
+ 	[ -f binutils/Makefile ] || $(MAKE) stage4-start ; \
+ 	cd binutils && \
+ 	$(MAKE) $(FLAGS_TO_PASS)  \
+ 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
+ 		  clean
+ @endif binutils-bootstrap
  
  
! .PHONY: configure-stage4-gas maybe-configure-stage4-gas
! .PHONY: all-stage4-gas maybe-all-stage4-gas
! .PHONY: clean-stage4-gas maybe-clean-stage4-gas
  
+ maybe-configure-stage4-gas:
+ maybe-all-stage4-gas:
+ maybe-clean-stage4-gas:
  
! @if gas-bootstrap
! maybe-configure-stage4-gas: configure-stage4-gas
! configure-stage4-gas:
! 	@$(MAKE) stage4-start
! 	@[ -f gas/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage 4 in gas ; \
! 	cd gas || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/gas"; \
! 	    libsrcdir="$$s/gas";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/gas"; \
! 	    libsrcdir="$$s/gas";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stage4-gas: all-stage4-gas
! all-stage4-gas: configure-stage4-gas
! 	@$(MAKE) stage4-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd gas && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		 
  
+ maybe-clean-stage4-gas: clean-stage4-gas
+ clean-stage4-gas:
+ 	@[ -f gas/Makefile ] || [ -f stage4-gas/Makefile ] \
+ 	  || exit 0 ; \
+ 	[ -f gas/Makefile ] || $(MAKE) stage4-start ; \
+ 	cd gas && \
+ 	$(MAKE) $(FLAGS_TO_PASS)  \
+ 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
+ 		  clean
+ @endif gas-bootstrap
  
  
! .PHONY: configure-stage4-gcc maybe-configure-stage4-gcc
! .PHONY: all-stage4-gcc maybe-all-stage4-gcc
! .PHONY: clean-stage4-gcc maybe-clean-stage4-gcc
  
+ maybe-configure-stage4-gcc:
+ maybe-all-stage4-gcc:
+ maybe-clean-stage4-gcc:
  
! @if gcc-bootstrap
! maybe-configure-stage4-gcc: configure-stage4-gcc
! configure-stage4-gcc:
! 	@$(MAKE) stage4-start
! 	@[ -f gcc/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage 4 in gcc ; \
! 	cd gcc || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/gcc"; \
! 	    libsrcdir="$$s/gcc";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/gcc"; \
! 	    libsrcdir="$$s/gcc";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stage4-gcc: all-stage4-gcc
! all-stage4-gcc: configure-stage4-gcc
! 	@$(MAKE) stage4-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd gcc && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		 $(EXTRA_GCC_FLAGS)
  
+ maybe-clean-stage4-gcc: clean-stage4-gcc
+ clean-stage4-gcc:
+ 	@[ -f gcc/Makefile ] || [ -f stage4-gcc/Makefile ] \
+ 	  || exit 0 ; \
+ 	[ -f gcc/Makefile ] || $(MAKE) stage4-start ; \
+ 	cd gcc && \
+ 	$(MAKE) $(FLAGS_TO_PASS)  \
+ 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
+ 		 $(EXTRA_GCC_FLAGS) clean
+ @endif gcc-bootstrap
  
  
! .PHONY: configure-stage4-intl maybe-configure-stage4-intl
! .PHONY: all-stage4-intl maybe-all-stage4-intl
! .PHONY: clean-stage4-intl maybe-clean-stage4-intl
  
+ maybe-configure-stage4-intl:
+ maybe-all-stage4-intl:
+ maybe-clean-stage4-intl:
  
! @if intl-bootstrap
! maybe-configure-stage4-intl: configure-stage4-intl
! configure-stage4-intl:
! 	@$(MAKE) stage4-start
! 	@[ -f intl/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage 4 in intl ; \
! 	cd intl || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/intl"; \
! 	    libsrcdir="$$s/intl";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/intl"; \
! 	    libsrcdir="$$s/intl";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stage4-intl: all-stage4-intl
! all-stage4-intl: configure-stage4-intl
! 	@$(MAKE) stage4-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd intl && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		 
  
+ maybe-clean-stage4-intl: clean-stage4-intl
+ clean-stage4-intl:
+ 	@[ -f intl/Makefile ] || [ -f stage4-intl/Makefile ] \
+ 	  || exit 0 ; \
+ 	[ -f intl/Makefile ] || $(MAKE) stage4-start ; \
+ 	cd intl && \
+ 	$(MAKE) $(FLAGS_TO_PASS)  \
+ 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
+ 		  clean
+ @endif intl-bootstrap
  
  
! .PHONY: configure-stage4-ld maybe-configure-stage4-ld
! .PHONY: all-stage4-ld maybe-all-stage4-ld
! .PHONY: clean-stage4-ld maybe-clean-stage4-ld
  
+ maybe-configure-stage4-ld:
+ maybe-all-stage4-ld:
+ maybe-clean-stage4-ld:
  
! @if ld-bootstrap
! maybe-configure-stage4-ld: configure-stage4-ld
! configure-stage4-ld:
! 	@$(MAKE) stage4-start
! 	@[ -f ld/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage 4 in ld ; \
! 	cd ld || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/ld"; \
! 	    libsrcdir="$$s/ld";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/ld"; \
! 	    libsrcdir="$$s/ld";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stage4-ld: all-stage4-ld
! all-stage4-ld: configure-stage4-ld
! 	@$(MAKE) stage4-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd ld && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		 
  
+ maybe-clean-stage4-ld: clean-stage4-ld
+ clean-stage4-ld:
+ 	@[ -f ld/Makefile ] || [ -f stage4-ld/Makefile ] \
+ 	  || exit 0 ; \
+ 	[ -f ld/Makefile ] || $(MAKE) stage4-start ; \
+ 	cd ld && \
+ 	$(MAKE) $(FLAGS_TO_PASS)  \
+ 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
+ 		  clean
+ @endif ld-bootstrap
  
  
! .PHONY: configure-stage4-libcpp maybe-configure-stage4-libcpp
! .PHONY: all-stage4-libcpp maybe-all-stage4-libcpp
! .PHONY: clean-stage4-libcpp maybe-clean-stage4-libcpp
  
+ maybe-configure-stage4-libcpp:
+ maybe-all-stage4-libcpp:
+ maybe-clean-stage4-libcpp:
  
! @if libcpp-bootstrap
! maybe-configure-stage4-libcpp: configure-stage4-libcpp
! configure-stage4-libcpp:
! 	@$(MAKE) stage4-start
! 	@[ -f libcpp/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage 4 in libcpp ; \
! 	cd libcpp || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/libcpp"; \
! 	    libsrcdir="$$s/libcpp";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/libcpp"; \
! 	    libsrcdir="$$s/libcpp";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stage4-libcpp: all-stage4-libcpp
! all-stage4-libcpp: configure-stage4-libcpp
! 	@$(MAKE) stage4-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd libcpp && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		 
  
+ maybe-clean-stage4-libcpp: clean-stage4-libcpp
+ clean-stage4-libcpp:
+ 	@[ -f libcpp/Makefile ] || [ -f stage4-libcpp/Makefile ] \
+ 	  || exit 0 ; \
+ 	[ -f libcpp/Makefile ] || $(MAKE) stage4-start ; \
+ 	cd libcpp && \
+ 	$(MAKE) $(FLAGS_TO_PASS)  \
+ 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
+ 		  clean
+ @endif libcpp-bootstrap
  
  
! .PHONY: configure-stage4-libiberty maybe-configure-stage4-libiberty
! .PHONY: all-stage4-libiberty maybe-all-stage4-libiberty
! .PHONY: clean-stage4-libiberty maybe-clean-stage4-libiberty
  
+ maybe-configure-stage4-libiberty:
+ maybe-all-stage4-libiberty:
+ maybe-clean-stage4-libiberty:
  
! @if libiberty-bootstrap
! maybe-configure-stage4-libiberty: configure-stage4-libiberty
! configure-stage4-libiberty:
! 	@$(MAKE) stage4-start
! 	@[ -f libiberty/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage 4 in libiberty ; \
! 	cd libiberty || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/libiberty"; \
! 	    libsrcdir="$$s/libiberty";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/libiberty"; \
! 	    libsrcdir="$$s/libiberty";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stage4-libiberty: all-stage4-libiberty
! all-stage4-libiberty: configure-stage4-libiberty
! 	@$(MAKE) stage4-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd libiberty && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		 
  
! maybe-clean-stage4-libiberty: clean-stage4-libiberty
! clean-stage4-libiberty:
! 	@[ -f libiberty/Makefile ] || [ -f stage4-libiberty/Makefile ] \
! 	  || exit 0 ; \
! 	[ -f libiberty/Makefile ] || $(MAKE) stage4-start ; \
! 	cd libiberty && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		  clean
! @endif libiberty-bootstrap
  
  
! .PHONY: configure-stage4-zlib maybe-configure-stage4-zlib
! .PHONY: all-stage4-zlib maybe-all-stage4-zlib
! .PHONY: clean-stage4-zlib maybe-clean-stage4-zlib
  
+ maybe-configure-stage4-zlib:
+ maybe-all-stage4-zlib:
+ maybe-clean-stage4-zlib:
  
! @if zlib-bootstrap
! maybe-configure-stage4-zlib: configure-stage4-zlib
! configure-stage4-zlib:
! 	@$(MAKE) stage4-start
! 	@[ -f zlib/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage 4 in zlib ; \
! 	cd zlib || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/zlib"; \
! 	    libsrcdir="$$s/zlib";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/zlib"; \
! 	    libsrcdir="$$s/zlib";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stage4-zlib: all-stage4-zlib
! all-stage4-zlib: configure-stage4-zlib
! 	@$(MAKE) stage4-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd zlib && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		 
  
! maybe-clean-stage4-zlib: clean-stage4-zlib
! clean-stage4-zlib:
! 	@[ -f zlib/Makefile ] || [ -f stage4-zlib/Makefile ] \
! 	  || exit 0 ; \
! 	[ -f zlib/Makefile ] || $(MAKE) stage4-start ; \
! 	cd zlib && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		  clean
! @endif zlib-bootstrap
  
  
  
! # FIXME: Will not need to be conditional when toplevel bootstrap is the
! # only possibility, but now it conflicts with no-bootstrap rules
! @if gcc-bootstrap
  
! compare3:
! 	@if test -f stage3-lean; then \
! 	  echo Cannot compare object files as stage 3 was deleted. ; \
! 	  exit 0 ; \
! 	fi; \
! 	[ -f stage_current ] && $(MAKE) `cat stage_current`-end || : ; \
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	rm -f .bad_compare ; \
! 	cd stage4-gcc; \
! 	files=`find . -name "*$(objext)" -print` ; \
! 	cd .. ; \
! 	for file in $${files} ; do \
! 	  f1=$$r/stage3-gcc/$$file; f2=$$r/stage4-gcc/$$file; \
! 	  @do_compare@ > /dev/null 2>&1; \
! 	  test $$? -eq 1 && echo $$file differs >> .bad_compare || true; \
! 	done ; \
! 	if [ -f .bad_compare ]; then \
! 	  echo "Bootstrap comparison failure!"; \
! 	  cat .bad_compare; \
! 	  exit 1; \
! 	else \
! 	  true; \
! 	fi ; \
! 	$(STAMP) compare3
! 	@bootstrap_lean@-rm -rf stage3-* ; $(STAMP) stage3-lean
  
  
  
! .PHONY: bootstrap4
! bootstrap4: stage4-bubble compare3 all
  
  
! # Rules to wipe a stage and all the following ones, also used for cleanstrap
! distclean-stage3:: distclean-stage4 
! .PHONY: distclean-stage4
! distclean-stage4::
! 	[ -f stage_current ] && $(MAKE) `cat stage_current`-end || :
! 	rm -rf stage4-* compare3 
  
  
! @endif gcc-bootstrap
  
  
! .PHONY: stageprofile-start stageprofile-end
  
+ stageprofile-start::
+ 	@[ -f stage_current ] && $(MAKE) `cat stage_current`-end || : ; \
+ 	echo stageprofile > stage_current ; \
+ 	echo stageprofile > stage_last
+ @if bfd
+ 	@[ -d stageprofile-bfd ] || mkdir stageprofile-bfd; \
+ 	set stageprofile-bfd bfd ; @CREATE_LINK_TO_DIR@  ; \
+ 	set stage1-bfd prev-bfd ; @CREATE_LINK_TO_DIR@ 
+ @endif bfd
+ @if opcodes
+ 	@[ -d stageprofile-opcodes ] || mkdir stageprofile-opcodes; \
+ 	set stageprofile-opcodes opcodes ; @CREATE_LINK_TO_DIR@  ; \
+ 	set stage1-opcodes prev-opcodes ; @CREATE_LINK_TO_DIR@ 
+ @endif opcodes
+ @if binutils
+ 	@[ -d stageprofile-binutils ] || mkdir stageprofile-binutils; \
+ 	set stageprofile-binutils binutils ; @CREATE_LINK_TO_DIR@  ; \
+ 	set stage1-binutils prev-binutils ; @CREATE_LINK_TO_DIR@ 
+ @endif binutils
+ @if gas
+ 	@[ -d stageprofile-gas ] || mkdir stageprofile-gas; \
+ 	set stageprofile-gas gas ; @CREATE_LINK_TO_DIR@  ; \
+ 	set stage1-gas prev-gas ; @CREATE_LINK_TO_DIR@ 
+ @endif gas
+ @if gcc
+ 	@[ -d stageprofile-gcc ] || mkdir stageprofile-gcc; \
+ 	set stageprofile-gcc gcc ; @CREATE_LINK_TO_DIR@  ; \
+ 	set stage1-gcc prev-gcc ; @CREATE_LINK_TO_DIR@ 
+ @endif gcc
+ @if intl
+ 	@[ -d stageprofile-intl ] || mkdir stageprofile-intl; \
+ 	set stageprofile-intl intl ; @CREATE_LINK_TO_DIR@  ; \
+ 	set stage1-intl prev-intl ; @CREATE_LINK_TO_DIR@ 
+ @endif intl
+ @if ld
+ 	@[ -d stageprofile-ld ] || mkdir stageprofile-ld; \
+ 	set stageprofile-ld ld ; @CREATE_LINK_TO_DIR@  ; \
+ 	set stage1-ld prev-ld ; @CREATE_LINK_TO_DIR@ 
+ @endif ld
+ @if libcpp
+ 	@[ -d stageprofile-libcpp ] || mkdir stageprofile-libcpp; \
+ 	set stageprofile-libcpp libcpp ; @CREATE_LINK_TO_DIR@  ; \
+ 	set stage1-libcpp prev-libcpp ; @CREATE_LINK_TO_DIR@ 
+ @endif libcpp
+ @if libiberty
+ 	@[ -d stageprofile-libiberty ] || mkdir stageprofile-libiberty; \
+ 	set stageprofile-libiberty libiberty ; @CREATE_LINK_TO_DIR@  ; \
+ 	set stage1-libiberty prev-libiberty ; @CREATE_LINK_TO_DIR@ 
+ @endif libiberty
+ @if zlib
+ 	@[ -d stageprofile-zlib ] || mkdir stageprofile-zlib; \
+ 	set stageprofile-zlib zlib ; @CREATE_LINK_TO_DIR@  ; \
+ 	set stage1-zlib prev-zlib ; @CREATE_LINK_TO_DIR@ 
+ @endif zlib
  
! stageprofile-end::
! 	@rm -f stage_current
! @if bfd
! 	@set bfd stageprofile-bfd ; @UNDO_LINK_TO_DIR@  ; \
! 	set prev-bfd stage1-bfd ; @UNDO_LINK_TO_DIR@ 
! @endif bfd
! @if opcodes
! 	@set opcodes stageprofile-opcodes ; @UNDO_LINK_TO_DIR@  ; \
! 	set prev-opcodes stage1-opcodes ; @UNDO_LINK_TO_DIR@ 
! @endif opcodes
! @if binutils
! 	@set binutils stageprofile-binutils ; @UNDO_LINK_TO_DIR@  ; \
! 	set prev-binutils stage1-binutils ; @UNDO_LINK_TO_DIR@ 
! @endif binutils
! @if gas
! 	@set gas stageprofile-gas ; @UNDO_LINK_TO_DIR@  ; \
! 	set prev-gas stage1-gas ; @UNDO_LINK_TO_DIR@ 
! @endif gas
! @if gcc
! 	@set gcc stageprofile-gcc ; @UNDO_LINK_TO_DIR@  ; \
! 	set prev-gcc stage1-gcc ; @UNDO_LINK_TO_DIR@ 
! @endif gcc
! @if intl
! 	@set intl stageprofile-intl ; @UNDO_LINK_TO_DIR@  ; \
! 	set prev-intl stage1-intl ; @UNDO_LINK_TO_DIR@ 
! @endif intl
! @if ld
! 	@set ld stageprofile-ld ; @UNDO_LINK_TO_DIR@  ; \
! 	set prev-ld stage1-ld ; @UNDO_LINK_TO_DIR@ 
! @endif ld
! @if libcpp
! 	@set libcpp stageprofile-libcpp ; @UNDO_LINK_TO_DIR@  ; \
! 	set prev-libcpp stage1-libcpp ; @UNDO_LINK_TO_DIR@ 
! @endif libcpp
! @if libiberty
! 	@set libiberty stageprofile-libiberty ; @UNDO_LINK_TO_DIR@  ; \
! 	set prev-libiberty stage1-libiberty ; @UNDO_LINK_TO_DIR@ 
! @endif libiberty
! @if zlib
! 	@set zlib stageprofile-zlib ; @UNDO_LINK_TO_DIR@  ; \
! 	set prev-zlib stage1-zlib ; @UNDO_LINK_TO_DIR@ 
! @endif zlib
  
! # Bubble a bugfix through all the stages up to stage profile.  They
! # are remade, but not reconfigured.  The next stage (if any) will not
! # be reconfigured as well.
! .PHONY: stageprofile-bubble
! stageprofile-bubble:: stage1-bubble
! 	@if test -f stageprofile-lean || test -f stage1-lean  ; then \
! 	  echo Skipping rebuild of stageprofile ; \
! 	else \
! 	  $(MAKE) $(RECURSE_FLAGS_TO_PASS) NOTPARALLEL= all-stageprofile; \
! 	fi
! 
! .PHONY: all-stageprofile clean-stageprofile
! all-stageprofile:     \
!   maybe-all-stageprofile-bfd \
!   maybe-all-stageprofile-opcodes \
!   maybe-all-stageprofile-binutils              \
!   maybe-all-stageprofile-gas \
!   maybe-all-stageprofile-gcc        \
!   maybe-all-stageprofile-intl   \
!   maybe-all-stageprofile-ld \
!   maybe-all-stageprofile-libcpp  \
!   maybe-all-stageprofile-libiberty                        \
!   maybe-all-stageprofile-zlib       
  
+ do-clean: clean-stageprofile
+ clean-stageprofile:     \
+   maybe-clean-stageprofile-bfd \
+   maybe-clean-stageprofile-opcodes \
+   maybe-clean-stageprofile-binutils              \
+   maybe-clean-stageprofile-gas \
+   maybe-clean-stageprofile-gcc        \
+   maybe-clean-stageprofile-intl   \
+   maybe-clean-stageprofile-ld \
+   maybe-clean-stageprofile-libcpp  \
+   maybe-clean-stageprofile-libiberty                        \
+   maybe-clean-stageprofile-zlib       
  
  
! .PHONY: configure-stageprofile-bfd maybe-configure-stageprofile-bfd
! .PHONY: all-stageprofile-bfd maybe-all-stageprofile-bfd
! .PHONY: clean-stageprofile-bfd maybe-clean-stageprofile-bfd
  
! maybe-configure-stageprofile-bfd:
! maybe-all-stageprofile-bfd:
! maybe-clean-stageprofile-bfd:
! 
! @if bfd-bootstrap
! maybe-configure-stageprofile-bfd: configure-stageprofile-bfd
! configure-stageprofile-bfd:
! 	@$(MAKE) stageprofile-start
! 	@[ -f bfd/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage profile in bfd ; \
! 	cd bfd || exit 1; \
  	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/bfd"; \
! 	    libsrcdir="$$s/bfd";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/bfd"; \
! 	    libsrcdir="$$s/bfd";; \
  	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stageprofile-bfd: all-stageprofile-bfd
! all-stageprofile-bfd: configure-stageprofile-bfd
! 	@$(MAKE) stageprofile-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd bfd && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" 
  
! maybe-clean-stageprofile-bfd: clean-stageprofile-bfd
! clean-stageprofile-bfd:
! 	@[ -f bfd/Makefile ] || [ -f stageprofile-bfd/Makefile ] \
! 	  || exit 0 ; \
! 	[ -f bfd/Makefile ] || $(MAKE) stageprofile-start ; \
! 	cd bfd && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		CFLAGS="$(BOOT_CFLAGS) -fprofile-generate"  clean
! @endif bfd-bootstrap
  
  
! .PHONY: configure-stageprofile-opcodes maybe-configure-stageprofile-opcodes
! .PHONY: all-stageprofile-opcodes maybe-all-stageprofile-opcodes
! .PHONY: clean-stageprofile-opcodes maybe-clean-stageprofile-opcodes
  
! maybe-configure-stageprofile-opcodes:
! maybe-all-stageprofile-opcodes:
! maybe-clean-stageprofile-opcodes:
  
! @if opcodes-bootstrap
! maybe-configure-stageprofile-opcodes: configure-stageprofile-opcodes
! configure-stageprofile-opcodes:
! 	@$(MAKE) stageprofile-start
! 	@[ -f opcodes/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage profile in opcodes ; \
! 	cd opcodes || exit 1; \
  	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/opcodes"; \
! 	    libsrcdir="$$s/opcodes";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/opcodes"; \
! 	    libsrcdir="$$s/opcodes";; \
  	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stageprofile-opcodes: all-stageprofile-opcodes
! all-stageprofile-opcodes: configure-stageprofile-opcodes
! 	@$(MAKE) stageprofile-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd opcodes && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" 
  
! maybe-clean-stageprofile-opcodes: clean-stageprofile-opcodes
! clean-stageprofile-opcodes:
! 	@[ -f opcodes/Makefile ] || [ -f stageprofile-opcodes/Makefile ] \
! 	  || exit 0 ; \
! 	[ -f opcodes/Makefile ] || $(MAKE) stageprofile-start ; \
! 	cd opcodes && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		CFLAGS="$(BOOT_CFLAGS) -fprofile-generate"  clean
! @endif opcodes-bootstrap
  
  
! .PHONY: configure-stageprofile-binutils maybe-configure-stageprofile-binutils
! .PHONY: all-stageprofile-binutils maybe-all-stageprofile-binutils
! .PHONY: clean-stageprofile-binutils maybe-clean-stageprofile-binutils
  
! maybe-configure-stageprofile-binutils:
! maybe-all-stageprofile-binutils:
! maybe-clean-stageprofile-binutils:
  
! @if binutils-bootstrap
! maybe-configure-stageprofile-binutils: configure-stageprofile-binutils
! configure-stageprofile-binutils:
! 	@$(MAKE) stageprofile-start
! 	@[ -f binutils/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage profile in binutils ; \
! 	cd binutils || exit 1; \
  	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/binutils"; \
! 	    libsrcdir="$$s/binutils";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/binutils"; \
! 	    libsrcdir="$$s/binutils";; \
  	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stageprofile-binutils: all-stageprofile-binutils
! all-stageprofile-binutils: configure-stageprofile-binutils
! 	@$(MAKE) stageprofile-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd binutils && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" 
  
! maybe-clean-stageprofile-binutils: clean-stageprofile-binutils
! clean-stageprofile-binutils:
! 	@[ -f binutils/Makefile ] || [ -f stageprofile-binutils/Makefile ] \
! 	  || exit 0 ; \
! 	[ -f binutils/Makefile ] || $(MAKE) stageprofile-start ; \
! 	cd binutils && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		CFLAGS="$(BOOT_CFLAGS) -fprofile-generate"  clean
! @endif binutils-bootstrap
  
  
! .PHONY: configure-stageprofile-gas maybe-configure-stageprofile-gas
! .PHONY: all-stageprofile-gas maybe-all-stageprofile-gas
! .PHONY: clean-stageprofile-gas maybe-clean-stageprofile-gas
  
! maybe-configure-stageprofile-gas:
! maybe-all-stageprofile-gas:
! maybe-clean-stageprofile-gas:
  
! @if gas-bootstrap
! maybe-configure-stageprofile-gas: configure-stageprofile-gas
! configure-stageprofile-gas:
! 	@$(MAKE) stageprofile-start
! 	@[ -f gas/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage profile in gas ; \
! 	cd gas || exit 1; \
  	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/gas"; \
! 	    libsrcdir="$$s/gas";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/gas"; \
! 	    libsrcdir="$$s/gas";; \
  	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stageprofile-gas: all-stageprofile-gas
! all-stageprofile-gas: configure-stageprofile-gas
! 	@$(MAKE) stageprofile-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd gas && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" 
  
! maybe-clean-stageprofile-gas: clean-stageprofile-gas
! clean-stageprofile-gas:
! 	@[ -f gas/Makefile ] || [ -f stageprofile-gas/Makefile ] \
! 	  || exit 0 ; \
! 	[ -f gas/Makefile ] || $(MAKE) stageprofile-start ; \
! 	cd gas && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		CFLAGS="$(BOOT_CFLAGS) -fprofile-generate"  clean
! @endif gas-bootstrap
  
  
! .PHONY: configure-stageprofile-gcc maybe-configure-stageprofile-gcc
! .PHONY: all-stageprofile-gcc maybe-all-stageprofile-gcc
! .PHONY: clean-stageprofile-gcc maybe-clean-stageprofile-gcc
  
! maybe-configure-stageprofile-gcc:
! maybe-all-stageprofile-gcc:
! maybe-clean-stageprofile-gcc:
  
! @if gcc-bootstrap
! maybe-configure-stageprofile-gcc: configure-stageprofile-gcc
! configure-stageprofile-gcc:
! 	@$(MAKE) stageprofile-start
! 	@[ -f gcc/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage profile in gcc ; \
! 	cd gcc || exit 1; \
  	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/gcc"; \
! 	    libsrcdir="$$s/gcc";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/gcc"; \
! 	    libsrcdir="$$s/gcc";; \
  	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stageprofile-gcc: all-stageprofile-gcc
! all-stageprofile-gcc: configure-stageprofile-gcc
! 	@$(MAKE) stageprofile-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd gcc && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" $(EXTRA_GCC_FLAGS)
  
! maybe-clean-stageprofile-gcc: clean-stageprofile-gcc
! clean-stageprofile-gcc:
! 	@[ -f gcc/Makefile ] || [ -f stageprofile-gcc/Makefile ] \
! 	  || exit 0 ; \
! 	[ -f gcc/Makefile ] || $(MAKE) stageprofile-start ; \
! 	cd gcc && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" $(EXTRA_GCC_FLAGS) clean
! @endif gcc-bootstrap
  
  
! .PHONY: configure-stageprofile-intl maybe-configure-stageprofile-intl
! .PHONY: all-stageprofile-intl maybe-all-stageprofile-intl
! .PHONY: clean-stageprofile-intl maybe-clean-stageprofile-intl
  
! maybe-configure-stageprofile-intl:
! maybe-all-stageprofile-intl:
! maybe-clean-stageprofile-intl:
  
! @if intl-bootstrap
! maybe-configure-stageprofile-intl: configure-stageprofile-intl
! configure-stageprofile-intl:
! 	@$(MAKE) stageprofile-start
! 	@[ -f intl/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage profile in intl ; \
! 	cd intl || exit 1; \
  	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/intl"; \
! 	    libsrcdir="$$s/intl";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/intl"; \
! 	    libsrcdir="$$s/intl";; \
  	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stageprofile-intl: all-stageprofile-intl
! all-stageprofile-intl: configure-stageprofile-intl
! 	@$(MAKE) stageprofile-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd intl && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" 
  
! maybe-clean-stageprofile-intl: clean-stageprofile-intl
! clean-stageprofile-intl:
! 	@[ -f intl/Makefile ] || [ -f stageprofile-intl/Makefile ] \
! 	  || exit 0 ; \
! 	[ -f intl/Makefile ] || $(MAKE) stageprofile-start ; \
! 	cd intl && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		CFLAGS="$(BOOT_CFLAGS) -fprofile-generate"  clean
! @endif intl-bootstrap
  
  
! .PHONY: configure-stageprofile-ld maybe-configure-stageprofile-ld
! .PHONY: all-stageprofile-ld maybe-all-stageprofile-ld
! .PHONY: clean-stageprofile-ld maybe-clean-stageprofile-ld
  
! maybe-configure-stageprofile-ld:
! maybe-all-stageprofile-ld:
! maybe-clean-stageprofile-ld:
  
! @if ld-bootstrap
! maybe-configure-stageprofile-ld: configure-stageprofile-ld
! configure-stageprofile-ld:
! 	@$(MAKE) stageprofile-start
! 	@[ -f ld/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage profile in ld ; \
! 	cd ld || exit 1; \
  	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/ld"; \
! 	    libsrcdir="$$s/ld";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/ld"; \
! 	    libsrcdir="$$s/ld";; \
  	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stageprofile-ld: all-stageprofile-ld
! all-stageprofile-ld: configure-stageprofile-ld
! 	@$(MAKE) stageprofile-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd ld && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" 
  
! maybe-clean-stageprofile-ld: clean-stageprofile-ld
! clean-stageprofile-ld:
! 	@[ -f ld/Makefile ] || [ -f stageprofile-ld/Makefile ] \
! 	  || exit 0 ; \
! 	[ -f ld/Makefile ] || $(MAKE) stageprofile-start ; \
! 	cd ld && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		CFLAGS="$(BOOT_CFLAGS) -fprofile-generate"  clean
! @endif ld-bootstrap
  
  
! .PHONY: configure-stageprofile-libcpp maybe-configure-stageprofile-libcpp
! .PHONY: all-stageprofile-libcpp maybe-all-stageprofile-libcpp
! .PHONY: clean-stageprofile-libcpp maybe-clean-stageprofile-libcpp
  
! maybe-configure-stageprofile-libcpp:
! maybe-all-stageprofile-libcpp:
! maybe-clean-stageprofile-libcpp:
  
! @if libcpp-bootstrap
! maybe-configure-stageprofile-libcpp: configure-stageprofile-libcpp
! configure-stageprofile-libcpp:
! 	@$(MAKE) stageprofile-start
! 	@[ -f libcpp/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage profile in libcpp ; \
! 	cd libcpp || exit 1; \
  	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/libcpp"; \
! 	    libsrcdir="$$s/libcpp";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/libcpp"; \
! 	    libsrcdir="$$s/libcpp";; \
  	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stageprofile-libcpp: all-stageprofile-libcpp
! all-stageprofile-libcpp: configure-stageprofile-libcpp
! 	@$(MAKE) stageprofile-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd libcpp && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" 
  
! maybe-clean-stageprofile-libcpp: clean-stageprofile-libcpp
! clean-stageprofile-libcpp:
! 	@[ -f libcpp/Makefile ] || [ -f stageprofile-libcpp/Makefile ] \
! 	  || exit 0 ; \
! 	[ -f libcpp/Makefile ] || $(MAKE) stageprofile-start ; \
! 	cd libcpp && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		CFLAGS="$(BOOT_CFLAGS) -fprofile-generate"  clean
! @endif libcpp-bootstrap
  
  
+ .PHONY: configure-stageprofile-libiberty maybe-configure-stageprofile-libiberty
+ .PHONY: all-stageprofile-libiberty maybe-all-stageprofile-libiberty
+ .PHONY: clean-stageprofile-libiberty maybe-clean-stageprofile-libiberty
  
! maybe-configure-stageprofile-libiberty:
! maybe-all-stageprofile-libiberty:
! maybe-clean-stageprofile-libiberty:
  
! @if libiberty-bootstrap
! maybe-configure-stageprofile-libiberty: configure-stageprofile-libiberty
! configure-stageprofile-libiberty:
! 	@$(MAKE) stageprofile-start
! 	@[ -f libiberty/Makefile ] && exit 0 || : ; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage profile in libiberty ; \
! 	cd libiberty || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/libiberty"; \
! 	    libsrcdir="$$s/libiberty";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/libiberty"; \
! 	    libsrcdir="$$s/libiberty";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
! 
! maybe-all-stageprofile-libiberty: all-stageprofile-libiberty
! all-stageprofile-libiberty: configure-stageprofile-libiberty
! 	@$(MAKE) stageprofile-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd libiberty && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" 
  
+ maybe-clean-stageprofile-libiberty: clean-stageprofile-libiberty
+ clean-stageprofile-libiberty:
+ 	@[ -f libiberty/Makefile ] || [ -f stageprofile-libiberty/Makefile ] \
+ 	  || exit 0 ; \
+ 	[ -f libiberty/Makefile ] || $(MAKE) stageprofile-start ; \
+ 	cd libiberty && \
+ 	$(MAKE) $(FLAGS_TO_PASS)  \
+ 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
+ 		CFLAGS="$(BOOT_CFLAGS) -fprofile-generate"  clean
+ @endif libiberty-bootstrap
  
  
! .PHONY: configure-stageprofile-zlib maybe-configure-stageprofile-zlib
! .PHONY: all-stageprofile-zlib maybe-all-stageprofile-zlib
! .PHONY: clean-stageprofile-zlib maybe-clean-stageprofile-zlib
  
! maybe-configure-stageprofile-zlib:
! maybe-all-stageprofile-zlib:
! maybe-clean-stageprofile-zlib:
! 
! @if zlib-bootstrap
! maybe-configure-stageprofile-zlib: configure-stageprofile-zlib
! configure-stageprofile-zlib:
! 	@$(MAKE) stageprofile-start
! 	@[ -f zlib/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage profile in zlib ; \
! 	cd zlib || exit 1; \
  	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/zlib"; \
! 	    libsrcdir="$$s/zlib";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/zlib"; \
! 	    libsrcdir="$$s/zlib";; \
  	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stageprofile-zlib: all-stageprofile-zlib
! all-stageprofile-zlib: configure-stageprofile-zlib
! 	@$(MAKE) stageprofile-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd zlib && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" 
  
! maybe-clean-stageprofile-zlib: clean-stageprofile-zlib
! clean-stageprofile-zlib:
! 	@[ -f zlib/Makefile ] || [ -f stageprofile-zlib/Makefile ] \
! 	  || exit 0 ; \
! 	[ -f zlib/Makefile ] || $(MAKE) stageprofile-start ; \
! 	cd zlib && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		CFLAGS="$(BOOT_CFLAGS) -fprofile-generate"  clean
! @endif zlib-bootstrap
  
  
  
! # FIXME: Will not need to be conditional when toplevel bootstrap is the
! # only possibility, but now it conflicts with no-bootstrap rules
! @if gcc-bootstrap
  
  
  
  
! # Rules to wipe a stage and all the following ones, also used for cleanstrap
! distclean-stage1:: distclean-stageprofile 
! .PHONY: distclean-stageprofile
! distclean-stageprofile::
! 	[ -f stage_current ] && $(MAKE) `cat stage_current`-end || :
! 	rm -rf stageprofile-* 
  
  
! @endif gcc-bootstrap
  
  
! .PHONY: stagefeedback-start stagefeedback-end
! 
! stagefeedback-start::
! 	@[ -f stage_current ] && $(MAKE) `cat stage_current`-end || : ; \
! 	echo stagefeedback > stage_current ; \
! 	echo stagefeedback > stage_last
! @if bfd
! 	@[ -d stagefeedback-bfd ] || mkdir stagefeedback-bfd; \
! 	set stagefeedback-bfd bfd ; @CREATE_LINK_TO_DIR@  ; \
! 	set stage1-bfd prev-bfd ; @CREATE_LINK_TO_DIR@ 
! @endif bfd
! @if opcodes
! 	@[ -d stagefeedback-opcodes ] || mkdir stagefeedback-opcodes; \
! 	set stagefeedback-opcodes opcodes ; @CREATE_LINK_TO_DIR@  ; \
! 	set stage1-opcodes prev-opcodes ; @CREATE_LINK_TO_DIR@ 
! @endif opcodes
! @if binutils
! 	@[ -d stagefeedback-binutils ] || mkdir stagefeedback-binutils; \
! 	set stagefeedback-binutils binutils ; @CREATE_LINK_TO_DIR@  ; \
! 	set stage1-binutils prev-binutils ; @CREATE_LINK_TO_DIR@ 
! @endif binutils
! @if gas
! 	@[ -d stagefeedback-gas ] || mkdir stagefeedback-gas; \
! 	set stagefeedback-gas gas ; @CREATE_LINK_TO_DIR@  ; \
! 	set stage1-gas prev-gas ; @CREATE_LINK_TO_DIR@ 
! @endif gas
! @if gcc
! 	@[ -d stagefeedback-gcc ] || mkdir stagefeedback-gcc; \
! 	set stagefeedback-gcc gcc ; @CREATE_LINK_TO_DIR@  ; \
! 	set stage1-gcc prev-gcc ; @CREATE_LINK_TO_DIR@ 
! @endif gcc
! @if intl
! 	@[ -d stagefeedback-intl ] || mkdir stagefeedback-intl; \
! 	set stagefeedback-intl intl ; @CREATE_LINK_TO_DIR@  ; \
! 	set stage1-intl prev-intl ; @CREATE_LINK_TO_DIR@ 
! @endif intl
! @if ld
! 	@[ -d stagefeedback-ld ] || mkdir stagefeedback-ld; \
! 	set stagefeedback-ld ld ; @CREATE_LINK_TO_DIR@  ; \
! 	set stage1-ld prev-ld ; @CREATE_LINK_TO_DIR@ 
! @endif ld
! @if libcpp
! 	@[ -d stagefeedback-libcpp ] || mkdir stagefeedback-libcpp; \
! 	set stagefeedback-libcpp libcpp ; @CREATE_LINK_TO_DIR@  ; \
! 	set stage1-libcpp prev-libcpp ; @CREATE_LINK_TO_DIR@ 
! @endif libcpp
! @if libiberty
! 	@[ -d stagefeedback-libiberty ] || mkdir stagefeedback-libiberty; \
! 	set stagefeedback-libiberty libiberty ; @CREATE_LINK_TO_DIR@  ; \
! 	set stage1-libiberty prev-libiberty ; @CREATE_LINK_TO_DIR@ 
! @endif libiberty
! @if zlib
! 	@[ -d stagefeedback-zlib ] || mkdir stagefeedback-zlib; \
! 	set stagefeedback-zlib zlib ; @CREATE_LINK_TO_DIR@  ; \
! 	set stage1-zlib prev-zlib ; @CREATE_LINK_TO_DIR@ 
! @endif zlib
  
+ stagefeedback-end::
+ 	@rm -f stage_current
+ @if bfd
+ 	@set bfd stagefeedback-bfd ; @UNDO_LINK_TO_DIR@  ; \
+ 	set prev-bfd stage1-bfd ; @UNDO_LINK_TO_DIR@ 
+ @endif bfd
+ @if opcodes
+ 	@set opcodes stagefeedback-opcodes ; @UNDO_LINK_TO_DIR@  ; \
+ 	set prev-opcodes stage1-opcodes ; @UNDO_LINK_TO_DIR@ 
+ @endif opcodes
+ @if binutils
+ 	@set binutils stagefeedback-binutils ; @UNDO_LINK_TO_DIR@  ; \
+ 	set prev-binutils stage1-binutils ; @UNDO_LINK_TO_DIR@ 
+ @endif binutils
+ @if gas
+ 	@set gas stagefeedback-gas ; @UNDO_LINK_TO_DIR@  ; \
+ 	set prev-gas stage1-gas ; @UNDO_LINK_TO_DIR@ 
+ @endif gas
+ @if gcc
+ 	@set gcc stagefeedback-gcc ; @UNDO_LINK_TO_DIR@  ; \
+ 	set prev-gcc stage1-gcc ; @UNDO_LINK_TO_DIR@ 
+ @endif gcc
+ @if intl
+ 	@set intl stagefeedback-intl ; @UNDO_LINK_TO_DIR@  ; \
+ 	set prev-intl stage1-intl ; @UNDO_LINK_TO_DIR@ 
+ @endif intl
+ @if ld
+ 	@set ld stagefeedback-ld ; @UNDO_LINK_TO_DIR@  ; \
+ 	set prev-ld stage1-ld ; @UNDO_LINK_TO_DIR@ 
+ @endif ld
+ @if libcpp
+ 	@set libcpp stagefeedback-libcpp ; @UNDO_LINK_TO_DIR@  ; \
+ 	set prev-libcpp stage1-libcpp ; @UNDO_LINK_TO_DIR@ 
+ @endif libcpp
+ @if libiberty
+ 	@set libiberty stagefeedback-libiberty ; @UNDO_LINK_TO_DIR@  ; \
+ 	set prev-libiberty stage1-libiberty ; @UNDO_LINK_TO_DIR@ 
+ @endif libiberty
+ @if zlib
+ 	@set zlib stagefeedback-zlib ; @UNDO_LINK_TO_DIR@  ; \
+ 	set prev-zlib stage1-zlib ; @UNDO_LINK_TO_DIR@ 
+ @endif zlib
  
! # Bubble a bugfix through all the stages up to stage feedback.  They
! # are remade, but not reconfigured.  The next stage (if any) will not
! # be reconfigured as well.
! .PHONY: stagefeedback-bubble
! stagefeedback-bubble:: stage1-bubble
! 	@if test -f stagefeedback-lean || test -f stage1-lean  ; then \
! 	  echo Skipping rebuild of stagefeedback ; \
! 	else \
! 	  $(MAKE) $(RECURSE_FLAGS_TO_PASS) NOTPARALLEL= all-stagefeedback; \
! 	fi
  
! .PHONY: all-stagefeedback clean-stagefeedback
! all-stagefeedback:     \
!   maybe-all-stagefeedback-bfd \
!   maybe-all-stagefeedback-opcodes \
!   maybe-all-stagefeedback-binutils              \
!   maybe-all-stagefeedback-gas \
!   maybe-all-stagefeedback-gcc        \
!   maybe-all-stagefeedback-intl   \
!   maybe-all-stagefeedback-ld \
!   maybe-all-stagefeedback-libcpp  \
!   maybe-all-stagefeedback-libiberty                        \
!   maybe-all-stagefeedback-zlib       
  
+ do-clean: clean-stagefeedback
+ clean-stagefeedback:     \
+   maybe-clean-stagefeedback-bfd \
+   maybe-clean-stagefeedback-opcodes \
+   maybe-clean-stagefeedback-binutils              \
+   maybe-clean-stagefeedback-gas \
+   maybe-clean-stagefeedback-gcc        \
+   maybe-clean-stagefeedback-intl   \
+   maybe-clean-stagefeedback-ld \
+   maybe-clean-stagefeedback-libcpp  \
+   maybe-clean-stagefeedback-libiberty                        \
+   maybe-clean-stagefeedback-zlib       
  
  
! .PHONY: configure-stagefeedback-bfd maybe-configure-stagefeedback-bfd
! .PHONY: all-stagefeedback-bfd maybe-all-stagefeedback-bfd
! .PHONY: clean-stagefeedback-bfd maybe-clean-stagefeedback-bfd
  
! maybe-configure-stagefeedback-bfd:
! maybe-all-stagefeedback-bfd:
! maybe-clean-stagefeedback-bfd:
! 
! @if bfd-bootstrap
! maybe-configure-stagefeedback-bfd: configure-stagefeedback-bfd
! configure-stagefeedback-bfd:
! 	@$(MAKE) stagefeedback-start
! 	@[ -f bfd/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage feedback in bfd ; \
! 	cd bfd || exit 1; \
  	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/bfd"; \
! 	    libsrcdir="$$s/bfd";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/bfd"; \
! 	    libsrcdir="$$s/bfd";; \
  	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stagefeedback-bfd: all-stagefeedback-bfd
! all-stagefeedback-bfd: configure-stagefeedback-bfd
! 	@$(MAKE) stagefeedback-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd bfd && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		CFLAGS="$(BOOT_CFLAGS) -fprofile-use" 
  
! maybe-clean-stagefeedback-bfd: clean-stagefeedback-bfd
! clean-stagefeedback-bfd:
! 	@[ -f bfd/Makefile ] || [ -f stagefeedback-bfd/Makefile ] \
! 	  || exit 0 ; \
! 	[ -f bfd/Makefile ] || $(MAKE) stagefeedback-start ; \
! 	cd bfd && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		CFLAGS="$(BOOT_CFLAGS) -fprofile-use"  clean
! @endif bfd-bootstrap
  
  
! .PHONY: configure-stagefeedback-opcodes maybe-configure-stagefeedback-opcodes
! .PHONY: all-stagefeedback-opcodes maybe-all-stagefeedback-opcodes
! .PHONY: clean-stagefeedback-opcodes maybe-clean-stagefeedback-opcodes
  
! maybe-configure-stagefeedback-opcodes:
! maybe-all-stagefeedback-opcodes:
! maybe-clean-stagefeedback-opcodes:
  
! @if opcodes-bootstrap
! maybe-configure-stagefeedback-opcodes: configure-stagefeedback-opcodes
! configure-stagefeedback-opcodes:
! 	@$(MAKE) stagefeedback-start
! 	@[ -f opcodes/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage feedback in opcodes ; \
! 	cd opcodes || exit 1; \
  	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/opcodes"; \
! 	    libsrcdir="$$s/opcodes";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/opcodes"; \
! 	    libsrcdir="$$s/opcodes";; \
  	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stagefeedback-opcodes: all-stagefeedback-opcodes
! all-stagefeedback-opcodes: configure-stagefeedback-opcodes
! 	@$(MAKE) stagefeedback-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd opcodes && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		CFLAGS="$(BOOT_CFLAGS) -fprofile-use" 
  
! maybe-clean-stagefeedback-opcodes: clean-stagefeedback-opcodes
! clean-stagefeedback-opcodes:
! 	@[ -f opcodes/Makefile ] || [ -f stagefeedback-opcodes/Makefile ] \
! 	  || exit 0 ; \
! 	[ -f opcodes/Makefile ] || $(MAKE) stagefeedback-start ; \
! 	cd opcodes && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		CFLAGS="$(BOOT_CFLAGS) -fprofile-use"  clean
! @endif opcodes-bootstrap
  
  
+ .PHONY: configure-stagefeedback-binutils maybe-configure-stagefeedback-binutils
+ .PHONY: all-stagefeedback-binutils maybe-all-stagefeedback-binutils
+ .PHONY: clean-stagefeedback-binutils maybe-clean-stagefeedback-binutils
  
! maybe-configure-stagefeedback-binutils:
! maybe-all-stagefeedback-binutils:
! maybe-clean-stagefeedback-binutils:
  
! @if binutils-bootstrap
! maybe-configure-stagefeedback-binutils: configure-stagefeedback-binutils
! configure-stagefeedback-binutils:
! 	@$(MAKE) stagefeedback-start
! 	@[ -f binutils/Makefile ] && exit 0 || : ; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage feedback in binutils ; \
! 	cd binutils || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/binutils"; \
! 	    libsrcdir="$$s/binutils";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/binutils"; \
! 	    libsrcdir="$$s/binutils";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
! 
! maybe-all-stagefeedback-binutils: all-stagefeedback-binutils
! all-stagefeedback-binutils: configure-stagefeedback-binutils
! 	@$(MAKE) stagefeedback-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd binutils && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		CFLAGS="$(BOOT_CFLAGS) -fprofile-use" 
  
+ maybe-clean-stagefeedback-binutils: clean-stagefeedback-binutils
+ clean-stagefeedback-binutils:
+ 	@[ -f binutils/Makefile ] || [ -f stagefeedback-binutils/Makefile ] \
+ 	  || exit 0 ; \
+ 	[ -f binutils/Makefile ] || $(MAKE) stagefeedback-start ; \
+ 	cd binutils && \
+ 	$(MAKE) $(FLAGS_TO_PASS)  \
+ 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
+ 		CFLAGS="$(BOOT_CFLAGS) -fprofile-use"  clean
+ @endif binutils-bootstrap
  
  
! .PHONY: configure-stagefeedback-gas maybe-configure-stagefeedback-gas
! .PHONY: all-stagefeedback-gas maybe-all-stagefeedback-gas
! .PHONY: clean-stagefeedback-gas maybe-clean-stagefeedback-gas
  
! maybe-configure-stagefeedback-gas:
! maybe-all-stagefeedback-gas:
! maybe-clean-stagefeedback-gas:
! 
! @if gas-bootstrap
! maybe-configure-stagefeedback-gas: configure-stagefeedback-gas
! configure-stagefeedback-gas:
! 	@$(MAKE) stagefeedback-start
! 	@[ -f gas/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage feedback in gas ; \
! 	cd gas || exit 1; \
  	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/gas"; \
! 	    libsrcdir="$$s/gas";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/gas"; \
! 	    libsrcdir="$$s/gas";; \
  	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stagefeedback-gas: all-stagefeedback-gas
! all-stagefeedback-gas: configure-stagefeedback-gas
! 	@$(MAKE) stagefeedback-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd gas && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		CFLAGS="$(BOOT_CFLAGS) -fprofile-use" 
  
! maybe-clean-stagefeedback-gas: clean-stagefeedback-gas
! clean-stagefeedback-gas:
! 	@[ -f gas/Makefile ] || [ -f stagefeedback-gas/Makefile ] \
! 	  || exit 0 ; \
! 	[ -f gas/Makefile ] || $(MAKE) stagefeedback-start ; \
! 	cd gas && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		CFLAGS="$(BOOT_CFLAGS) -fprofile-use"  clean
! @endif gas-bootstrap
  
  
+ .PHONY: configure-stagefeedback-gcc maybe-configure-stagefeedback-gcc
+ .PHONY: all-stagefeedback-gcc maybe-all-stagefeedback-gcc
+ .PHONY: clean-stagefeedback-gcc maybe-clean-stagefeedback-gcc
  
! maybe-configure-stagefeedback-gcc:
! maybe-all-stagefeedback-gcc:
! maybe-clean-stagefeedback-gcc:
  
! @if gcc-bootstrap
! maybe-configure-stagefeedback-gcc: configure-stagefeedback-gcc
! configure-stagefeedback-gcc:
! 	@$(MAKE) stagefeedback-start
! 	@[ -f gcc/Makefile ] && exit 0 || : ; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage feedback in gcc ; \
! 	cd gcc || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/gcc"; \
! 	    libsrcdir="$$s/gcc";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/gcc"; \
! 	    libsrcdir="$$s/gcc";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
! 
! maybe-all-stagefeedback-gcc: all-stagefeedback-gcc
! all-stagefeedback-gcc: configure-stagefeedback-gcc
! 	@$(MAKE) stagefeedback-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd gcc && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		CFLAGS="$(BOOT_CFLAGS) -fprofile-use" $(EXTRA_GCC_FLAGS)
  
+ maybe-clean-stagefeedback-gcc: clean-stagefeedback-gcc
+ clean-stagefeedback-gcc:
+ 	@[ -f gcc/Makefile ] || [ -f stagefeedback-gcc/Makefile ] \
+ 	  || exit 0 ; \
+ 	[ -f gcc/Makefile ] || $(MAKE) stagefeedback-start ; \
+ 	cd gcc && \
+ 	$(MAKE) $(FLAGS_TO_PASS)  \
+ 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
+ 		CFLAGS="$(BOOT_CFLAGS) -fprofile-use" $(EXTRA_GCC_FLAGS) clean
+ @endif gcc-bootstrap
  
  
! .PHONY: configure-stagefeedback-intl maybe-configure-stagefeedback-intl
! .PHONY: all-stagefeedback-intl maybe-all-stagefeedback-intl
! .PHONY: clean-stagefeedback-intl maybe-clean-stagefeedback-intl
  
! maybe-configure-stagefeedback-intl:
! maybe-all-stagefeedback-intl:
! maybe-clean-stagefeedback-intl:
! 
! @if intl-bootstrap
! maybe-configure-stagefeedback-intl: configure-stagefeedback-intl
! configure-stagefeedback-intl:
! 	@$(MAKE) stagefeedback-start
! 	@[ -f intl/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage feedback in intl ; \
! 	cd intl || exit 1; \
  	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/intl"; \
! 	    libsrcdir="$$s/intl";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/intl"; \
! 	    libsrcdir="$$s/intl";; \
  	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stagefeedback-intl: all-stagefeedback-intl
! all-stagefeedback-intl: configure-stagefeedback-intl
! 	@$(MAKE) stagefeedback-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd intl && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		CFLAGS="$(BOOT_CFLAGS) -fprofile-use" 
  
! maybe-clean-stagefeedback-intl: clean-stagefeedback-intl
! clean-stagefeedback-intl:
! 	@[ -f intl/Makefile ] || [ -f stagefeedback-intl/Makefile ] \
! 	  || exit 0 ; \
! 	[ -f intl/Makefile ] || $(MAKE) stagefeedback-start ; \
! 	cd intl && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		CFLAGS="$(BOOT_CFLAGS) -fprofile-use"  clean
! @endif intl-bootstrap
  
  
+ .PHONY: configure-stagefeedback-ld maybe-configure-stagefeedback-ld
+ .PHONY: all-stagefeedback-ld maybe-all-stagefeedback-ld
+ .PHONY: clean-stagefeedback-ld maybe-clean-stagefeedback-ld
  
! maybe-configure-stagefeedback-ld:
! maybe-all-stagefeedback-ld:
! maybe-clean-stagefeedback-ld:
  
! @if ld-bootstrap
! maybe-configure-stagefeedback-ld: configure-stagefeedback-ld
! configure-stagefeedback-ld:
! 	@$(MAKE) stagefeedback-start
! 	@[ -f ld/Makefile ] && exit 0 || : ; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage feedback in ld ; \
! 	cd ld || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/ld"; \
! 	    libsrcdir="$$s/ld";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/ld"; \
! 	    libsrcdir="$$s/ld";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
! 
! maybe-all-stagefeedback-ld: all-stagefeedback-ld
! all-stagefeedback-ld: configure-stagefeedback-ld
! 	@$(MAKE) stagefeedback-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd ld && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		CFLAGS="$(BOOT_CFLAGS) -fprofile-use" 
  
+ maybe-clean-stagefeedback-ld: clean-stagefeedback-ld
+ clean-stagefeedback-ld:
+ 	@[ -f ld/Makefile ] || [ -f stagefeedback-ld/Makefile ] \
+ 	  || exit 0 ; \
+ 	[ -f ld/Makefile ] || $(MAKE) stagefeedback-start ; \
+ 	cd ld && \
+ 	$(MAKE) $(FLAGS_TO_PASS)  \
+ 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
+ 		CFLAGS="$(BOOT_CFLAGS) -fprofile-use"  clean
+ @endif ld-bootstrap
  
  
! .PHONY: configure-stagefeedback-libcpp maybe-configure-stagefeedback-libcpp
! .PHONY: all-stagefeedback-libcpp maybe-all-stagefeedback-libcpp
! .PHONY: clean-stagefeedback-libcpp maybe-clean-stagefeedback-libcpp
  
! maybe-configure-stagefeedback-libcpp:
! maybe-all-stagefeedback-libcpp:
! maybe-clean-stagefeedback-libcpp:
! 
! @if libcpp-bootstrap
! maybe-configure-stagefeedback-libcpp: configure-stagefeedback-libcpp
! configure-stagefeedback-libcpp:
! 	@$(MAKE) stagefeedback-start
! 	@[ -f libcpp/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage feedback in libcpp ; \
! 	cd libcpp || exit 1; \
  	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/libcpp"; \
! 	    libsrcdir="$$s/libcpp";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/libcpp"; \
! 	    libsrcdir="$$s/libcpp";; \
  	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stagefeedback-libcpp: all-stagefeedback-libcpp
! all-stagefeedback-libcpp: configure-stagefeedback-libcpp
! 	@$(MAKE) stagefeedback-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd libcpp && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		CFLAGS="$(BOOT_CFLAGS) -fprofile-use" 
  
! maybe-clean-stagefeedback-libcpp: clean-stagefeedback-libcpp
! clean-stagefeedback-libcpp:
! 	@[ -f libcpp/Makefile ] || [ -f stagefeedback-libcpp/Makefile ] \
! 	  || exit 0 ; \
! 	[ -f libcpp/Makefile ] || $(MAKE) stagefeedback-start ; \
! 	cd libcpp && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		CFLAGS="$(BOOT_CFLAGS) -fprofile-use"  clean
! @endif libcpp-bootstrap
  
  
+ .PHONY: configure-stagefeedback-libiberty maybe-configure-stagefeedback-libiberty
+ .PHONY: all-stagefeedback-libiberty maybe-all-stagefeedback-libiberty
+ .PHONY: clean-stagefeedback-libiberty maybe-clean-stagefeedback-libiberty
  
! maybe-configure-stagefeedback-libiberty:
! maybe-all-stagefeedback-libiberty:
! maybe-clean-stagefeedback-libiberty:
  
! @if libiberty-bootstrap
! maybe-configure-stagefeedback-libiberty: configure-stagefeedback-libiberty
! configure-stagefeedback-libiberty:
! 	@$(MAKE) stagefeedback-start
! 	@[ -f libiberty/Makefile ] && exit 0 || : ; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage feedback in libiberty ; \
! 	cd libiberty || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/libiberty"; \
! 	    libsrcdir="$$s/libiberty";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/libiberty"; \
! 	    libsrcdir="$$s/libiberty";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
! 
! maybe-all-stagefeedback-libiberty: all-stagefeedback-libiberty
! all-stagefeedback-libiberty: configure-stagefeedback-libiberty
! 	@$(MAKE) stagefeedback-start
  	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd libiberty && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		CFLAGS="$(BOOT_CFLAGS) -fprofile-use" 
  
+ maybe-clean-stagefeedback-libiberty: clean-stagefeedback-libiberty
+ clean-stagefeedback-libiberty:
+ 	@[ -f libiberty/Makefile ] || [ -f stagefeedback-libiberty/Makefile ] \
+ 	  || exit 0 ; \
+ 	[ -f libiberty/Makefile ] || $(MAKE) stagefeedback-start ; \
+ 	cd libiberty && \
+ 	$(MAKE) $(FLAGS_TO_PASS)  \
+ 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
+ 		CFLAGS="$(BOOT_CFLAGS) -fprofile-use"  clean
+ @endif libiberty-bootstrap
  
  
! .PHONY: configure-stagefeedback-zlib maybe-configure-stagefeedback-zlib
! .PHONY: all-stagefeedback-zlib maybe-all-stagefeedback-zlib
! .PHONY: clean-stagefeedback-zlib maybe-clean-stagefeedback-zlib
  
! maybe-configure-stagefeedback-zlib:
! maybe-all-stagefeedback-zlib:
! maybe-clean-stagefeedback-zlib:
  
! @if zlib-bootstrap
! maybe-configure-stagefeedback-zlib: configure-stagefeedback-zlib
! configure-stagefeedback-zlib:
! 	@$(MAKE) stagefeedback-start
! 	@[ -f zlib/Makefile ] && exit 0 || : ; \
  	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	echo Configuring stage feedback in zlib ; \
! 	cd zlib || exit 1; \
  	case $(srcdir) in \
  	  \.) \
  	    srcdiroption="--srcdir=."; \
  	    libsrcdir=".";; \
  	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/zlib"; \
! 	    libsrcdir="$$s/zlib";; \
  	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/zlib"; \
! 	    libsrcdir="$$s/zlib";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
  	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  @stage2_werror_flag@ 
  
! maybe-all-stagefeedback-zlib: all-stagefeedback-zlib
! all-stagefeedback-zlib: configure-stagefeedback-zlib
! 	@$(MAKE) stagefeedback-start
! 	@r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s;  \
! 	$(STAGE_HOST_EXPORTS)  \
! 	cd zlib && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		CFLAGS="$(BOOT_CFLAGS) -fprofile-use" 
  
! maybe-clean-stagefeedback-zlib: clean-stagefeedback-zlib
! clean-stagefeedback-zlib:
! 	@[ -f zlib/Makefile ] || [ -f stagefeedback-zlib/Makefile ] \
! 	  || exit 0 ; \
! 	[ -f zlib/Makefile ] || $(MAKE) stagefeedback-start ; \
! 	cd zlib && \
! 	$(MAKE) $(FLAGS_TO_PASS)  \
! 		$(POSTSTAGE1_FLAGS_TO_PASS)  \
! 		CFLAGS="$(BOOT_CFLAGS) -fprofile-use"  clean
! @endif zlib-bootstrap
! 
! 
! 
! # FIXME: Will not need to be conditional when toplevel bootstrap is the
! # only possibility, but now it conflicts with no-bootstrap rules
! @if gcc-bootstrap
! 
! 
! 
! 
! # Rules to wipe a stage and all the following ones, also used for cleanstrap
! distclean-stage1:: distclean-stagefeedback 
! .PHONY: distclean-stagefeedback
! distclean-stagefeedback::
! 	[ -f stage_current ] && $(MAKE) `cat stage_current`-end || :
! 	rm -rf stagefeedback-* 
! 
! 
! @endif gcc-bootstrap
! 
! 
! 
! stagefeedback-start::
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	cd stageprofile-gcc && \
! 	  { find . -type d | sort | sed 's,.*,$(SHELL) '"$$s"'/mkinstalldirs "../gcc/&",' | $(SHELL); } && \
! 	  { find . -name '*.*da' | sed 's,.*,$(LN) -f "&" "../gcc/&",' | $(SHELL); }
! 
! # FIXME: Will not need to be conditional when toplevel bootstrap is the
! # only possibility, but now it conflicts with no-bootstrap rules
! @if gcc-bootstrap
! profiledbootstrap:
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	echo "Bootstrapping the compiler"; \
! 	$(MAKE) stageprofile-bubble distclean-stagefeedback
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}` ; export s; \
  	$(SET_LIB_PATH) \
! 	echo "Building runtime libraries and training compiler"; \
  	$(MAKE) $(BASE_FLAGS_TO_PASS) $(RECURSE_FLAGS) all
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
+ 	$(HOST_EXPORTS) \
  	echo "Building feedback based compiler"; \
! 	$(MAKE) stagefeedback-bubble stagefeedback-end
! @endif gcc-bootstrap
  
! @if gcc-bootstrap
! NOTPARALLEL = .NOTPARALLEL
! $(NOTPARALLEL):
! do-distclean: distclean-stage1
! @endif gcc-bootstrap
  
! # --------------------------------------
! # Dependencies between different modules
! # --------------------------------------
  
! # Generic dependencies for target modules on host stuff, especially gcc
  
! configure-target-libstdc++-v3: maybe-all-gcc
  
! configure-target-libmudflap: maybe-all-gcc
! 
! configure-target-newlib: maybe-all-gcc
! 
! configure-target-libgfortran: maybe-all-gcc
! 
! configure-target-libobjc: maybe-all-gcc
! 
! configure-target-libtermcap: maybe-all-gcc
! 
! configure-target-winsup: maybe-all-gcc
! 
! configure-target-libgloss: maybe-all-gcc
! 
! configure-target-libiberty: maybe-all-gcc
! 
! configure-target-gperf: maybe-all-gcc
! 
! configure-target-examples: maybe-all-gcc
! 
! configure-target-libffi: maybe-all-gcc
! 
! configure-target-libjava: maybe-all-gcc
! 
! configure-target-zlib: maybe-all-gcc
! 
! configure-target-boehm-gc: maybe-all-gcc
! 
! configure-target-qthreads: maybe-all-gcc
! 
! configure-target-rda: maybe-all-gcc
! 
! configure-target-libada: maybe-all-gcc
  
  
! 
! configure-target-boehm-gc: maybe-all-target-newlib maybe-all-target-libgloss
! 
! configure-target-gperf: maybe-all-target-newlib maybe-all-target-libgloss
! configure-target-gperf: maybe-all-target-libstdc++-v3
! 
! configure-target-libada: maybe-all-target-newlib maybe-all-target-libgloss
! 
! configure-target-libgfortran: maybe-all-target-newlib maybe-all-target-libgloss
! 
! configure-target-libffi: maybe-all-target-newlib maybe-all-target-libgloss
! 
! configure-target-libjava: maybe-all-target-newlib maybe-all-target-libgloss
! configure-target-libjava: maybe-all-target-libstdc++-v3
! 
! configure-target-libobjc: maybe-all-target-newlib maybe-all-target-libgloss
! 
! configure-target-libstdc++-v3: maybe-all-target-newlib maybe-all-target-libgloss
! 
! configure-target-zlib: maybe-all-target-newlib maybe-all-target-libgloss
! 
! configure-target-examples: maybe-all-target-newlib maybe-all-target-libgloss
! 
! configure-target-libtermcap: maybe-all-target-newlib maybe-all-target-libgloss
! 
! configure-target-rda: maybe-all-target-newlib maybe-all-target-libgloss
! 
! configure-target-winsup: maybe-all-target-newlib maybe-all-target-libgloss
! 
! configure-target-qthreads: maybe-all-target-newlib maybe-all-target-libgloss
! 
  
  # There are two types of dependencies here: 'hard' dependencies, where one
  # module simply won't build without the other; and 'soft' dependencies, where
  # if the depended-on module is missing, the depending module will do without
  # or find a substitute somewhere (perhaps installed).  Soft dependencies
! # are made here to depend on a 'maybe-' target.  If you're not sure,
  # it's safer to use a soft dependency.
  
! 
! 
! 
! 
! # With all the machinery above in place, it is pretty easy to generate
! # dependencies.  Host dependencies are a bit more complex because we have
! # to check for bootstrap/prebootstrap dependencies.  To resolve
! # prebootstrap dependencies, prebootstrap modules are gathered in
! # a hash table.
! all-build-bison: maybe-all-build-texinfo
! all-build-byacc: maybe-all-build-texinfo
! all-build-flex: maybe-all-build-texinfo
! all-build-flex: maybe-all-build-bison
! all-build-flex: maybe-all-build-byacc
! all-build-flex: maybe-all-build-m4
! all-build-libiberty: maybe-all-build-texinfo
! all-build-m4: maybe-all-build-texinfo
! all-build-fixincludes: maybe-all-build-libiberty
! configure-gcc: maybe-configure-intl
! 
! configure-stage1-gcc: maybe-configure-stage1-intl
! configure-stage2-gcc: maybe-configure-stage2-intl
! configure-stage3-gcc: maybe-configure-stage3-intl
! configure-stage4-gcc: maybe-configure-stage4-intl
! configure-stageprofile-gcc: maybe-configure-stageprofile-intl
! configure-stagefeedback-gcc: maybe-configure-stagefeedback-intl
! configure-gcc: maybe-configure-binutils
! 
! configure-stage1-gcc: maybe-configure-stage1-binutils
! configure-stage2-gcc: maybe-configure-stage2-binutils
! configure-stage3-gcc: maybe-configure-stage3-binutils
! configure-stage4-gcc: maybe-configure-stage4-binutils
! configure-stageprofile-gcc: maybe-configure-stageprofile-binutils
! configure-stagefeedback-gcc: maybe-configure-stagefeedback-binutils
! configure-gcc: maybe-configure-gas
! 
! configure-stage1-gcc: maybe-configure-stage1-gas
! configure-stage2-gcc: maybe-configure-stage2-gas
! configure-stage3-gcc: maybe-configure-stage3-gas
! configure-stage4-gcc: maybe-configure-stage4-gas
! configure-stageprofile-gcc: maybe-configure-stageprofile-gas
! configure-stagefeedback-gcc: maybe-configure-stagefeedback-gas
! configure-gcc: maybe-configure-ld
! 
! configure-stage1-gcc: maybe-configure-stage1-ld
! configure-stage2-gcc: maybe-configure-stage2-ld
! configure-stage3-gcc: maybe-configure-stage3-ld
! configure-stage4-gcc: maybe-configure-stage4-ld
! configure-stageprofile-gcc: maybe-configure-stageprofile-ld
! configure-stagefeedback-gcc: maybe-configure-stagefeedback-ld
! all-gcc: all-libiberty
! 
! all-stage1-gcc: all-stage1-libiberty
! all-stage2-gcc: all-stage2-libiberty
! all-stage3-gcc: all-stage3-libiberty
! all-stage4-gcc: all-stage4-libiberty
! all-stageprofile-gcc: all-stageprofile-libiberty
! all-stagefeedback-gcc: all-stagefeedback-libiberty
! all-gcc: maybe-all-intl
! 
! all-stage1-gcc: maybe-all-stage1-intl
! all-stage2-gcc: maybe-all-stage2-intl
! all-stage3-gcc: maybe-all-stage3-intl
! all-stage4-gcc: maybe-all-stage4-intl
! all-stageprofile-gcc: maybe-all-stageprofile-intl
! all-stagefeedback-gcc: maybe-all-stagefeedback-intl
! all-gcc: maybe-all-build-texinfo
! 
! all-stage1-gcc: maybe-all-build-texinfo
! all-stage2-gcc: maybe-all-build-texinfo
! all-stage3-gcc: maybe-all-build-texinfo
! all-stage4-gcc: maybe-all-build-texinfo
! all-stageprofile-gcc: maybe-all-build-texinfo
! all-stagefeedback-gcc: maybe-all-build-texinfo
! all-prebootstrap: maybe-all-build-texinfo
! all-gcc: maybe-all-build-bison
! 
! all-stage1-gcc: maybe-all-build-bison
! all-stage2-gcc: maybe-all-build-bison
! all-stage3-gcc: maybe-all-build-bison
! all-stage4-gcc: maybe-all-build-bison
! all-stageprofile-gcc: maybe-all-build-bison
! all-stagefeedback-gcc: maybe-all-build-bison
! all-prebootstrap: maybe-all-build-bison
! all-gcc: maybe-all-build-byacc
! 
! all-stage1-gcc: maybe-all-build-byacc
! all-stage2-gcc: maybe-all-build-byacc
! all-stage3-gcc: maybe-all-build-byacc
! all-stage4-gcc: maybe-all-build-byacc
! all-stageprofile-gcc: maybe-all-build-byacc
! all-stagefeedback-gcc: maybe-all-build-byacc
! all-prebootstrap: maybe-all-build-byacc
! all-gcc: maybe-all-build-flex
! 
! all-stage1-gcc: maybe-all-build-flex
! all-stage2-gcc: maybe-all-build-flex
! all-stage3-gcc: maybe-all-build-flex
! all-stage4-gcc: maybe-all-build-flex
! all-stageprofile-gcc: maybe-all-build-flex
! all-stagefeedback-gcc: maybe-all-build-flex
! all-prebootstrap: maybe-all-build-flex
  all-gcc: maybe-all-build-libiberty
  
! all-stage1-gcc: maybe-all-build-libiberty
! all-stage2-gcc: maybe-all-build-libiberty
! all-stage3-gcc: maybe-all-build-libiberty
! all-stage4-gcc: maybe-all-build-libiberty
! all-stageprofile-gcc: maybe-all-build-libiberty
! all-stagefeedback-gcc: maybe-all-build-libiberty
! all-prebootstrap: maybe-all-build-libiberty
! all-gcc: maybe-all-build-fixincludes
  
! all-stage1-gcc: maybe-all-build-fixincludes
! all-stage2-gcc: maybe-all-build-fixincludes
! all-stage3-gcc: maybe-all-build-fixincludes
! all-stage4-gcc: maybe-all-build-fixincludes
! all-stageprofile-gcc: maybe-all-build-fixincludes
! all-stagefeedback-gcc: maybe-all-build-fixincludes
! all-prebootstrap: maybe-all-build-fixincludes
! all-gcc: maybe-all-binutils
! 
! all-stage1-gcc: maybe-all-stage1-binutils
! all-stage2-gcc: maybe-all-stage2-binutils
! all-stage3-gcc: maybe-all-stage3-binutils
! all-stage4-gcc: maybe-all-stage4-binutils
! all-stageprofile-gcc: maybe-all-stageprofile-binutils
! all-stagefeedback-gcc: maybe-all-stagefeedback-binutils
! all-gcc: maybe-all-gas
! 
! all-stage1-gcc: maybe-all-stage1-gas
! all-stage2-gcc: maybe-all-stage2-gas
! all-stage3-gcc: maybe-all-stage3-gas
! all-stage4-gcc: maybe-all-stage4-gas
! all-stageprofile-gcc: maybe-all-stageprofile-gas
! all-stagefeedback-gcc: maybe-all-stagefeedback-gas
! all-gcc: maybe-all-ld
! 
! all-stage1-gcc: maybe-all-stage1-ld
! all-stage2-gcc: maybe-all-stage2-ld
! all-stage3-gcc: maybe-all-stage3-ld
! all-stage4-gcc: maybe-all-stage4-ld
! all-stageprofile-gcc: maybe-all-stageprofile-ld
! all-stagefeedback-gcc: maybe-all-stagefeedback-ld
! all-gcc: maybe-all-zlib
! 
! all-stage1-gcc: maybe-all-stage1-zlib
! all-stage2-gcc: maybe-all-stage2-zlib
! all-stage3-gcc: maybe-all-stage3-zlib
! all-stage4-gcc: maybe-all-stage4-zlib
! all-stageprofile-gcc: maybe-all-stageprofile-zlib
! all-stagefeedback-gcc: maybe-all-stagefeedback-zlib
! all-gcc: all-libcpp
! 
! all-stage1-gcc: all-stage1-libcpp
! all-stage2-gcc: all-stage2-libcpp
! all-stage3-gcc: all-stage3-libcpp
! all-stage4-gcc: all-stage4-libcpp
! all-stageprofile-gcc: all-stageprofile-libcpp
! all-stagefeedback-gcc: all-stagefeedback-libcpp
! all-gcc: maybe-all-libiberty
! 
! all-stage1-gcc: maybe-all-stage1-libiberty
! all-stage2-gcc: maybe-all-stage2-libiberty
! all-stage3-gcc: maybe-all-stage3-libiberty
! all-stage4-gcc: maybe-all-stage4-libiberty
! all-stageprofile-gcc: maybe-all-stageprofile-libiberty
! all-stagefeedback-gcc: maybe-all-stagefeedback-libiberty
! all-gcc: maybe-all-fixincludes
! install-gcc: maybe-install-fixincludes
! configure-libcpp: configure-libiberty
! 
! configure-stage1-libcpp: configure-stage1-libiberty
! configure-stage2-libcpp: configure-stage2-libiberty
! configure-stage3-libcpp: configure-stage3-libiberty
! configure-stage4-libcpp: configure-stage4-libiberty
! configure-stageprofile-libcpp: configure-stageprofile-libiberty
! configure-stagefeedback-libcpp: configure-stagefeedback-libiberty
! configure-libcpp: maybe-configure-intl
! 
! configure-stage1-libcpp: maybe-configure-stage1-intl
! configure-stage2-libcpp: maybe-configure-stage2-intl
! configure-stage3-libcpp: maybe-configure-stage3-intl
! configure-stage4-libcpp: maybe-configure-stage4-intl
! configure-stageprofile-libcpp: maybe-configure-stageprofile-intl
! configure-stagefeedback-libcpp: maybe-configure-stagefeedback-intl
! all-libcpp: all-libiberty
! 
! all-stage1-libcpp: all-stage1-libiberty
! all-stage2-libcpp: all-stage2-libiberty
! all-stage3-libcpp: all-stage3-libiberty
! all-stage4-libcpp: all-stage4-libiberty
! all-stageprofile-libcpp: all-stageprofile-libiberty
! all-stagefeedback-libcpp: all-stagefeedback-libiberty
! all-libcpp: maybe-all-intl
! 
! all-stage1-libcpp: maybe-all-stage1-intl
! all-stage2-libcpp: maybe-all-stage2-intl
! all-stage3-libcpp: maybe-all-stage3-intl
! all-stage4-libcpp: maybe-all-stage4-intl
! all-stageprofile-libcpp: maybe-all-stageprofile-intl
! all-stagefeedback-libcpp: maybe-all-stagefeedback-intl
! all-fixincludes: maybe-all-libiberty
! configure-gdb: maybe-configure-itcl
! configure-gdb: maybe-configure-tcl
! configure-gdb: maybe-configure-tk
! configure-gdb: maybe-configure-sim
! all-gdb: maybe-all-libiberty
! all-gdb: maybe-all-opcodes
! all-gdb: maybe-all-bfd
! all-gdb: maybe-all-readline
! all-gdb: maybe-all-build-bison
! all-gdb: maybe-all-build-byacc
! all-gdb: maybe-all-sim
! install-gdb: maybe-install-tcl
! install-gdb: maybe-install-tk
! install-gdb: maybe-install-itcl
! install-gdb: maybe-install-libgui
! configure-libgui: maybe-configure-tcl
! configure-libgui: maybe-configure-tk
! all-libgui: maybe-all-tcl
! all-libgui: maybe-all-tk
! all-libgui: maybe-all-itcl
  configure-bfd: configure-libiberty
! 
! configure-stage1-bfd: configure-stage1-libiberty
! configure-stage2-bfd: configure-stage2-libiberty
! configure-stage3-bfd: configure-stage3-libiberty
! configure-stage4-bfd: configure-stage4-libiberty
! configure-stageprofile-bfd: configure-stageprofile-libiberty
! configure-stagefeedback-bfd: configure-stagefeedback-libiberty
! all-bfd: maybe-all-libiberty
! 
! all-stage1-bfd: maybe-all-stage1-libiberty
! all-stage2-bfd: maybe-all-stage2-libiberty
! all-stage3-bfd: maybe-all-stage3-libiberty
! all-stage4-bfd: maybe-all-stage4-libiberty
! all-stageprofile-bfd: maybe-all-stageprofile-libiberty
! all-stagefeedback-bfd: maybe-all-stagefeedback-libiberty
! all-bfd: maybe-all-intl
! 
! all-stage1-bfd: maybe-all-stage1-intl
! all-stage2-bfd: maybe-all-stage2-intl
! all-stage3-bfd: maybe-all-stage3-intl
! all-stage4-bfd: maybe-all-stage4-intl
! all-stageprofile-bfd: maybe-all-stageprofile-intl
! all-stagefeedback-bfd: maybe-all-stagefeedback-intl
! all-binutils: maybe-all-libiberty
! 
! all-stage1-binutils: maybe-all-stage1-libiberty
! all-stage2-binutils: maybe-all-stage2-libiberty
! all-stage3-binutils: maybe-all-stage3-libiberty
! all-stage4-binutils: maybe-all-stage4-libiberty
! all-stageprofile-binutils: maybe-all-stageprofile-libiberty
! all-stagefeedback-binutils: maybe-all-stagefeedback-libiberty
! all-binutils: maybe-all-opcodes
! 
! all-stage1-binutils: maybe-all-stage1-opcodes
! all-stage2-binutils: maybe-all-stage2-opcodes
! all-stage3-binutils: maybe-all-stage3-opcodes
! all-stage4-binutils: maybe-all-stage4-opcodes
! all-stageprofile-binutils: maybe-all-stageprofile-opcodes
! all-stagefeedback-binutils: maybe-all-stagefeedback-opcodes
! all-binutils: maybe-all-bfd
! 
! all-stage1-binutils: maybe-all-stage1-bfd
! all-stage2-binutils: maybe-all-stage2-bfd
! all-stage3-binutils: maybe-all-stage3-bfd
! all-stage4-binutils: maybe-all-stage4-bfd
! all-stageprofile-binutils: maybe-all-stageprofile-bfd
! all-stagefeedback-binutils: maybe-all-stagefeedback-bfd
! all-binutils: maybe-all-build-flex
! 
! all-stage1-binutils: maybe-all-build-flex
! all-stage2-binutils: maybe-all-build-flex
! all-stage3-binutils: maybe-all-build-flex
! all-stage4-binutils: maybe-all-build-flex
! all-stageprofile-binutils: maybe-all-build-flex
! all-stagefeedback-binutils: maybe-all-build-flex
! all-prebootstrap: maybe-all-build-flex
! all-binutils: maybe-all-build-bison
! 
! all-stage1-binutils: maybe-all-build-bison
! all-stage2-binutils: maybe-all-build-bison
! all-stage3-binutils: maybe-all-build-bison
! all-stage4-binutils: maybe-all-build-bison
! all-stageprofile-binutils: maybe-all-build-bison
! all-stagefeedback-binutils: maybe-all-build-bison
! all-prebootstrap: maybe-all-build-bison
! all-binutils: maybe-all-build-byacc
! 
! all-stage1-binutils: maybe-all-build-byacc
! all-stage2-binutils: maybe-all-build-byacc
! all-stage3-binutils: maybe-all-build-byacc
! all-stage4-binutils: maybe-all-build-byacc
! all-stageprofile-binutils: maybe-all-build-byacc
! all-stagefeedback-binutils: maybe-all-build-byacc
! all-prebootstrap: maybe-all-build-byacc
! all-binutils: maybe-all-intl
! 
! all-stage1-binutils: maybe-all-stage1-intl
! all-stage2-binutils: maybe-all-stage2-intl
! all-stage3-binutils: maybe-all-stage3-intl
! all-stage4-binutils: maybe-all-stage4-intl
! all-stageprofile-binutils: maybe-all-stageprofile-intl
! all-stagefeedback-binutils: maybe-all-stagefeedback-intl
  install-binutils: maybe-install-opcodes
  install-opcodes: maybe-install-bfd
! all-gas: maybe-all-libiberty
  
! all-stage1-gas: maybe-all-stage1-libiberty
! all-stage2-gas: maybe-all-stage2-libiberty
! all-stage3-gas: maybe-all-stage3-libiberty
! all-stage4-gas: maybe-all-stage4-libiberty
! all-stageprofile-gas: maybe-all-stageprofile-libiberty
! all-stagefeedback-gas: maybe-all-stagefeedback-libiberty
! all-gas: maybe-all-opcodes
! 
! all-stage1-gas: maybe-all-stage1-opcodes
! all-stage2-gas: maybe-all-stage2-opcodes
! all-stage3-gas: maybe-all-stage3-opcodes
! all-stage4-gas: maybe-all-stage4-opcodes
! all-stageprofile-gas: maybe-all-stageprofile-opcodes
! all-stagefeedback-gas: maybe-all-stagefeedback-opcodes
! all-gas: maybe-all-bfd
! 
! all-stage1-gas: maybe-all-stage1-bfd
! all-stage2-gas: maybe-all-stage2-bfd
! all-stage3-gas: maybe-all-stage3-bfd
! all-stage4-gas: maybe-all-stage4-bfd
! all-stageprofile-gas: maybe-all-stageprofile-bfd
! all-stagefeedback-gas: maybe-all-stagefeedback-bfd
! all-gas: maybe-all-intl
! 
! all-stage1-gas: maybe-all-stage1-intl
! all-stage2-gas: maybe-all-stage2-intl
! all-stage3-gas: maybe-all-stage3-intl
! all-stage4-gas: maybe-all-stage4-intl
! all-stageprofile-gas: maybe-all-stageprofile-intl
! all-stagefeedback-gas: maybe-all-stagefeedback-intl
! all-gprof: maybe-all-libiberty
! all-gprof: maybe-all-bfd
! all-gprof: maybe-all-opcodes
! all-gprof: maybe-all-intl
! all-ld: maybe-all-libiberty
! 
! all-stage1-ld: maybe-all-stage1-libiberty
! all-stage2-ld: maybe-all-stage2-libiberty
! all-stage3-ld: maybe-all-stage3-libiberty
! all-stage4-ld: maybe-all-stage4-libiberty
! all-stageprofile-ld: maybe-all-stageprofile-libiberty
! all-stagefeedback-ld: maybe-all-stagefeedback-libiberty
! all-ld: maybe-all-bfd
! 
! all-stage1-ld: maybe-all-stage1-bfd
! all-stage2-ld: maybe-all-stage2-bfd
! all-stage3-ld: maybe-all-stage3-bfd
! all-stage4-ld: maybe-all-stage4-bfd
! all-stageprofile-ld: maybe-all-stageprofile-bfd
! all-stagefeedback-ld: maybe-all-stagefeedback-bfd
! all-ld: maybe-all-opcodes
! 
! all-stage1-ld: maybe-all-stage1-opcodes
! all-stage2-ld: maybe-all-stage2-opcodes
! all-stage3-ld: maybe-all-stage3-opcodes
! all-stage4-ld: maybe-all-stage4-opcodes
! all-stageprofile-ld: maybe-all-stageprofile-opcodes
! all-stagefeedback-ld: maybe-all-stagefeedback-opcodes
! all-ld: maybe-all-build-bison
! 
! all-stage1-ld: maybe-all-build-bison
! all-stage2-ld: maybe-all-build-bison
! all-stage3-ld: maybe-all-build-bison
! all-stage4-ld: maybe-all-build-bison
! all-stageprofile-ld: maybe-all-build-bison
! all-stagefeedback-ld: maybe-all-build-bison
! all-prebootstrap: maybe-all-build-bison
! all-ld: maybe-all-build-byacc
! 
! all-stage1-ld: maybe-all-build-byacc
! all-stage2-ld: maybe-all-build-byacc
! all-stage3-ld: maybe-all-build-byacc
! all-stage4-ld: maybe-all-build-byacc
! all-stageprofile-ld: maybe-all-build-byacc
! all-stagefeedback-ld: maybe-all-build-byacc
! all-prebootstrap: maybe-all-build-byacc
! all-ld: maybe-all-build-flex
! 
! all-stage1-ld: maybe-all-build-flex
! all-stage2-ld: maybe-all-build-flex
! all-stage3-ld: maybe-all-build-flex
! all-stage4-ld: maybe-all-build-flex
! all-stageprofile-ld: maybe-all-build-flex
! all-stagefeedback-ld: maybe-all-build-flex
! all-prebootstrap: maybe-all-build-flex
! all-ld: maybe-all-intl
! 
! all-stage1-ld: maybe-all-stage1-intl
! all-stage2-ld: maybe-all-stage2-intl
! all-stage3-ld: maybe-all-stage3-intl
! all-stage4-ld: maybe-all-stage4-intl
! all-stageprofile-ld: maybe-all-stageprofile-intl
! all-stagefeedback-ld: maybe-all-stagefeedback-intl
! all-opcodes: maybe-all-bfd
! 
! all-stage1-opcodes: maybe-all-stage1-bfd
! all-stage2-opcodes: maybe-all-stage2-bfd
! all-stage3-opcodes: maybe-all-stage3-bfd
! all-stage4-opcodes: maybe-all-stage4-bfd
! all-stageprofile-opcodes: maybe-all-stageprofile-bfd
! all-stagefeedback-opcodes: maybe-all-stagefeedback-bfd
! all-opcodes: maybe-all-libiberty
! 
! all-stage1-opcodes: maybe-all-stage1-libiberty
! all-stage2-opcodes: maybe-all-stage2-libiberty
! all-stage3-opcodes: maybe-all-stage3-libiberty
! all-stage4-opcodes: maybe-all-stage4-libiberty
! all-stageprofile-opcodes: maybe-all-stageprofile-libiberty
! all-stagefeedback-opcodes: maybe-all-stagefeedback-libiberty
! all-dejagnu: maybe-all-tcl
! all-dejagnu: maybe-all-expect
! all-dejagnu: maybe-all-tk
! configure-expect: maybe-configure-tcl
! configure-expect: maybe-configure-tk
! all-expect: maybe-all-tcl
! all-expect: maybe-all-tk
! configure-itcl: maybe-configure-tcl
! configure-itcl: maybe-configure-tk
! all-itcl: maybe-all-tcl
! all-itcl: maybe-all-tk
  install-itcl: maybe-install-tcl
  configure-tk: maybe-configure-tcl
  all-tk: maybe-all-tcl
! all-sid: maybe-all-libiberty
! all-sid: maybe-all-bfd
! all-sid: maybe-all-opcodes
! all-sid: maybe-all-tcl
! all-sid: maybe-all-tk
! install-sid: maybe-install-tcl
! install-sid: maybe-install-tk
! all-sim: maybe-all-libiberty
! all-sim: maybe-all-bfd
! all-sim: maybe-all-opcodes
! all-sim: maybe-all-readline
! all-sim: maybe-configure-gdb
! all-fastjar: maybe-all-zlib
! all-fastjar: maybe-all-build-texinfo
! all-fastjar: maybe-all-libiberty
! all-autoconf: maybe-all-m4
! all-autoconf: maybe-all-build-texinfo
! all-automake: maybe-all-m4
! all-automake: maybe-all-build-texinfo
! all-automake: maybe-all-autoconf
! all-bison: maybe-all-intl
! all-bison: maybe-all-build-texinfo
! all-diff: maybe-all-intl
! all-diff: maybe-all-build-texinfo
! all-fileutils: maybe-all-intl
! all-fileutils: maybe-all-build-texinfo
! all-flex: maybe-all-build-bison
! all-flex: maybe-all-build-byacc
! all-flex: maybe-all-intl
! all-flex: maybe-all-m4
! all-flex: maybe-all-build-texinfo
! all-gzip: maybe-all-intl
! all-gzip: maybe-all-zlib
! all-gzip: maybe-all-build-texinfo
! all-hello: maybe-all-intl
! all-hello: maybe-all-build-texinfo
! all-m4: maybe-all-intl
! all-m4: maybe-all-build-texinfo
! all-make: maybe-all-intl
! all-make: maybe-all-build-texinfo
! all-patch: maybe-all-build-texinfo
! all-make: maybe-all-build-texinfo
  all-prms: maybe-all-libiberty
! all-recode: maybe-all-build-texinfo
! all-sed: maybe-all-build-texinfo
  all-send-pr: maybe-all-prms
! all-tar: maybe-all-build-texinfo
! all-uudecode: maybe-all-build-texinfo
! configure-target-boehm-gc: maybe-configure-target-qthreads
  configure-target-fastjar: maybe-configure-target-zlib
! all-target-fastjar: maybe-all-target-zlib
! all-target-fastjar: maybe-all-target-libiberty
! configure-target-libjava: maybe-configure-target-zlib
! configure-target-libjava: maybe-configure-target-boehm-gc
! configure-target-libjava: maybe-configure-target-qthreads
! configure-target-libjava: maybe-configure-target-libffi
! all-target-libjava: maybe-all-fastjar
! all-target-libjava: maybe-all-target-zlib
! all-target-libjava: maybe-all-target-boehm-gc
! all-target-libjava: maybe-all-target-qthreads
! all-target-libjava: maybe-all-target-libffi
  all-target-libobjc: maybe-all-target-libiberty
  all-target-libstdc++-v3: maybe-all-target-libiberty
  all-target-libgloss: maybe-configure-target-newlib
! all-target-winsup: maybe-all-target-libiberty
! all-target-winsup: maybe-all-target-libtermcap
  
  
! # Non-toplevel bootstrap rules must depend on several packages, to be built
! # before gcc.  Another wart that will go away, hopefully soon.
! @if gcc-no-bootstrap
! 
! all-prebootstrap: maybe-all-bfd
! all-prebootstrap: maybe-all-opcodes
! all-prebootstrap: maybe-all-binutils
! all-prebootstrap: maybe-all-gas
! all-prebootstrap: maybe-all-intl
! all-prebootstrap: maybe-all-ld
! all-prebootstrap: maybe-all-libcpp
! all-prebootstrap: maybe-all-libiberty
! all-prebootstrap: maybe-all-zlib
! @endif gcc-no-bootstrap
! 
! GDB_TK = @GDB_TK@
! all-gdb: $(gdbnlmrequirements) $(GDB_TK)
  
  # Serialization dependencies.  Host configures don't work well in parallel to
  # each other, due to contention over config.cache.  Target configures and 
diff -Nrcpad gcc-3.4.3/Makefile.tpl gcc-4.0.0/Makefile.tpl
*** gcc-3.4.3/Makefile.tpl	Fri Sep 24 00:43:26 2004
--- gcc-4.0.0/Makefile.tpl	Mon Jan 17 23:50:27 2005
*************** in
*** 6,12 ****
  #
  # Makefile for directory with subdirs to build.
  #   Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
! #   1999, 2000, 2001, 2002, 2003 Free Software Foundation
  #
  # This file is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
--- 6,12 ----
  #
  # Makefile for directory with subdirs to build.
  #   Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
! #   1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation
  #
  # This file is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
*************** INSTALL = @INSTALL@
*** 68,79 ****
  INSTALL_PROGRAM = @INSTALL_PROGRAM@
  INSTALL_SCRIPT = @INSTALL_SCRIPT@
  INSTALL_DATA = @INSTALL_DATA@
  
  # -------------------------------------------------
  # Miscellaneous non-standard autoconf-set variables
  # -------------------------------------------------
  
- links=@configlinks@
  # The file containing GCC's version number.
  gcc_version_trigger = @gcc_version_trigger@
  gcc_version = @gcc_version@
--- 68,80 ----
  INSTALL_PROGRAM = @INSTALL_PROGRAM@
  INSTALL_SCRIPT = @INSTALL_SCRIPT@
  INSTALL_DATA = @INSTALL_DATA@
+ LN = @LN@
+ LN_S = @LN_S@
  
  # -------------------------------------------------
  # Miscellaneous non-standard autoconf-set variables
  # -------------------------------------------------
  
  # The file containing GCC's version number.
  gcc_version_trigger = @gcc_version_trigger@
  gcc_version = @gcc_version@
*************** BUILD_SUBDIR = @build_subdir@
*** 114,124 ****
--- 115,188 ----
  # directories built for the build system.
  BUILD_CONFIGARGS = @build_configargs@
  
+ # This is the list of variables to export in the environment when
+ # configuring any subdirectory.  It must also be exported whenever
+ # recursing into a build directory in case that directory's Makefile
+ # re-runs configure.
+ BASE_EXPORTS = \
+ 	FLEX="$(FLEX)"; export FLEX; \
+ 	LEX="$(LEX)"; export LEX; \
+ 	BISON="$(BISON)"; export BISON; \
+ 	YACC="$(YACC)"; export YACC; \
+ 	M4="$(M4)"; export M4; \
+ 	MAKEINFO="$(MAKEINFO)"; export MAKEINFO;
+ 
+ # This is the list of variables to export in the environment when
+ # configuring subdirectories for the build system.
+ BUILD_EXPORTS = \
+ 	$(BASE_EXPORTS) \
+ 	AR="$(AR_FOR_BUILD)"; export AR; \
+ 	AS="$(AS_FOR_BUILD)"; export AS; \
+ 	CC="$(CC_FOR_BUILD)"; export CC; \
+ 	CFLAGS="$(CFLAGS_FOR_BUILD)"; export CFLAGS; \
+ 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
+ 	CXX="$(CXX_FOR_BUILD)"; export CXX; \
+ 	CXXFLAGS="$(CXXFLAGS_FOR_BUILD)"; export CXXFLAGS; \
+ 	GCJ="$(GCJ_FOR_BUILD)"; export GCJ; \
+ 	GFORTRAN="$(GFORTRAN_FOR_BUILD)"; export GFORTRAN; \
+ 	DLLTOOL="$(DLLTOOL_FOR_BUILD)"; export DLLTOOL; \
+ 	LD="$(LD_FOR_BUILD)"; export LD; \
+ 	LDFLAGS="$(LDFLAGS_FOR_BUILD)"; export LDFLAGS; \
+ 	NM="$(NM_FOR_BUILD)"; export NM; \
+ 	RANLIB="$(RANLIB_FOR_BUILD)"; export RANLIB; \
+ 	WINDRES="$(WINDRES_FOR_BUILD)"; export WINDRES;
+ 
  # This is the list of directories to built for the host system.
  SUBDIRS = @configdirs@
  # This is set by the configure script to the arguments to use when configuring
  # directories built for the host system.
  HOST_CONFIGARGS = @host_configargs@
+ # This is the list of variables to export in the environment when
+ # configuring subdirectories for the host system.
+ HOST_EXPORTS = \
+ 	$(BASE_EXPORTS) \
+ 	CC="$(CC)"; export CC; \
+ 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
+ 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
+ 	CXX="$(CXX)"; export CXX; \
+ 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
+ 	AR="$(AR)"; export AR; \
+ 	AS="$(AS)"; export AS; \
+ 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
+ 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
+ 	LD="$(LD)"; export LD; \
+ 	LDFLAGS="$(LDFLAGS)"; export LDFLAGS; \
+ 	NM="$(NM)"; export NM; \
+ 	RANLIB="$(RANLIB)"; export RANLIB; \
+ 	WINDRES="$(WINDRES)"; export WINDRES; \
+ 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
+ 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
+ 	TOPLEVEL_CONFIGURE_ARGUMENTS="$(TOPLEVEL_CONFIGURE_ARGUMENTS)"; export TOPLEVEL_CONFIGURE_ARGUMENTS; \
+ 	GMPLIBS="$(HOST_GMPLIBS)"; export GMPLIBS; \
+ 	GMPINC="$(HOST_GMPINC)"; export GMPINC; \
+ 	SET_GCC_LIB_PATH_CMD="@SET_GCC_LIB_PATH@"; export SET_GCC_LIB_PATH_CMD; \
+ 	@SET_GCC_LIB_PATH@
+ 
+ # Similar, for later GCC stages.
+ STAGE_HOST_EXPORTS = \
+ 	$(HOST_EXPORTS) \
+ 	CC="$(STAGE_CC_WRAPPER) $$r/prev-gcc/xgcc$(exeext) -B$$r/prev-gcc/ -B$(build_tooldir)/bin/"; export CC; \
+ 	CC_FOR_BUILD="$(STAGE_CC_WRAPPER) $$r/prev-gcc/xgcc$(exeext) -B$$r/prev-gcc/ -B$(build_tooldir)/bin/"; export CC_FOR_BUILD;
  
  # This is set by the configure script to the list of directories which
  # should be built using the target tools.
*************** TARGET_SUBDIR = @target_subdir@
*** 128,133 ****
--- 192,231 ----
  # This is set by the configure script to the arguments to use when configuring
  # directories built for the target.
  TARGET_CONFIGARGS = @target_configargs@
+ # This is the list of variables to export in the environment when
+ # configuring subdirectories for the host system.
+ BASE_TARGET_EXPORTS = \
+ 	$(BASE_EXPORTS) \
+ 	AR="$(AR_FOR_TARGET)"; export AR; \
+ 	AS="$(AS_FOR_TARGET)"; export AS; \
+ 	CC="$(CC_FOR_TARGET)"; export CC; \
+ 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
+ 	CPPFLAGS="$(CPPFLAGS_FOR_TARGET)"; export CPPFLAGS; \
+ 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ 	GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
+ 	GFORTRAN="$(GFORTRAN_FOR_TARGET)"; export GFORTRAN; \
+ 	DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
+ 	LD="$(LD_FOR_TARGET)"; export LD; \
+ 	LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
+ 	NM="$(NM_FOR_TARGET)"; export NM; \
+ 	RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
+ 	WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
+ 	SET_GCC_LIB_PATH_CMD="@SET_GCC_LIB_PATH@"; export SET_GCC_LIB_PATH_CMD; \
+ 	@SET_GCC_LIB_PATH@
+ 
+ RAW_CXX_TARGET_EXPORTS = \
+ 	$(BASE_TARGET_EXPORTS) \
+ 	CXX_FOR_TARGET="$(RAW_CXX_FOR_TARGET)"; export CXX_FOR_TARGET; \
+ 	CXX="$(RAW_CXX_FOR_TARGET)"; export CXX;
+ 
+ NORMAL_TARGET_EXPORTS = \
+ 	$(BASE_TARGET_EXPORTS) \
+ 	CXX="$(CXX_FOR_TARGET)"; export CXX;
+ 
+ # Where to find GMP
+ HOST_GMPLIBS = @gmplibs@
+ HOST_GMPINC = @gmpinc@
  
  # ----------------------------------------------
  # Programs producing files for the BUILD machine
*************** CXX_FOR_BUILD = $(CXX)
*** 155,196 ****
  BUILD_PREFIX = @BUILD_PREFIX@
  BUILD_PREFIX_1 = @BUILD_PREFIX_1@
  
! BISON=@BISON@
! USUAL_BISON = `if [ -f $$r/bison/bison ] ; then \
! 	    echo $$r/bison/bison -L $$s/bison/ ; \
  	 else \
! 	    echo bison ; \
  	 fi`
  
! DEFAULT_YACC = @DEFAULT_YACC@
! YACC=@YACC@
! USUAL_YACC = `if [ -f $$r/bison/bison ] ; then \
! 	    echo $$r/bison/bison -y -L $$s/bison/ ; \
! 	elif [ -f $$r/byacc/byacc ] ; then \
! 	    echo $$r/byacc/byacc ; \
  	else \
! 	    echo ${DEFAULT_YACC} ; \
  	fi`
  
! DEFAULT_LEX = @DEFAULT_LEX@
! LEX=@LEX@
! USUAL_LEX = `if [ -f $$r/flex/flex ] ; \
! 	then echo $$r/flex/flex ; \
! 	else echo ${DEFAULT_LEX} ; fi`
  
! DEFAULT_M4 = @DEFAULT_M4@
! M4 = `if [ -f $$r/m4/m4 ] ; \
! 	then echo $$r/m4/m4 ; \
! 	else echo ${DEFAULT_M4} ; fi`
  
  # For an installed makeinfo, we require it to be from texinfo 4.2 or
! # higher, else we use the "missing" dummy.
! MAKEINFO=@MAKEINFO@
! USUAL_MAKEINFO = `if [ -f $$r/texinfo/makeinfo/makeinfo ] ; \
! 	then echo $$r/texinfo/makeinfo/makeinfo ; \
! 	else if (makeinfo --version \
  	  | egrep 'texinfo[^0-9]*([1-3][0-9]|4\.[2-9]|[5-9])') >/dev/null 2>&1; \
!         then echo makeinfo; else echo $$s/missing makeinfo; fi; fi`
  
  # This just becomes part of the MAKEINFO definition passed down to
  # sub-makes.  It lets flags be given on the command line while still
--- 253,303 ----
  BUILD_PREFIX = @BUILD_PREFIX@
  BUILD_PREFIX_1 = @BUILD_PREFIX_1@
  
! # Flags to pass to stage2 and later makes.  They are defined
! # here so that they can be overridden by Makefile fragments.
! BOOT_CFLAGS= -g -O2
! 
! CONFIGURED_BISON = @CONFIGURED_BISON@
! BISON = `if [ -f $$r/$(BUILD_SUBDIR)/bison/tests/bison ] ; then \
! 	    echo $$r/$(BUILD_SUBDIR)/bison/tests/bison ; \
  	 else \
! 	    echo ${CONFIGURED_BISON} ; \
  	 fi`
  
! CONFIGURED_YACC = @CONFIGURED_YACC@
! YACC = `if [ -f $$r/$(BUILD_SUBDIR)/bison/tests/bison ] ; then \
! 	    echo $$r/$(BUILD_SUBDIR)/bison/tests/bison -y ; \
! 	elif [ -f $$r/$(BUILD_SUBDIR)/byacc/byacc ] ; then \
! 	    echo $$r/$(BUILD_SUBDIR)/byacc/byacc ; \
  	else \
! 	    echo ${CONFIGURED_YACC} ; \
  	fi`
  
! CONFIGURED_FLEX = @CONFIGURED_FLEX@
! FLEX = `if [ -f $$r/$(BUILD_SUBDIR)/flex/flex ] ; \
! 	then echo $$r/$(BUILD_SUBDIR)/flex/flex ; \
! 	else echo ${CONFIGURED_FLEX} ; fi`
  
! CONFIGURED_LEX = @CONFIGURED_LEX@
! LEX = `if [ -f $$r/$(BUILD_SUBDIR)/flex/flex ] ; \
! 	then echo $$r/$(BUILD_SUBDIR)/flex/flex ; \
! 	else echo ${CONFIGURED_LEX} ; fi`
! 
! CONFIGURED_M4 = @CONFIGURED_M4@
! M4 = `if [ -f $$r/$(BUILD_SUBDIR)/m4/m4 ] ; \
! 	then echo $$r/$(BUILD_SUBDIR)/m4/m4 ; \
! 	else echo ${CONFIGURED_M4} ; fi`
  
  # For an installed makeinfo, we require it to be from texinfo 4.2 or
! # higher, else we use the "missing" dummy.  We also pass the subdirectory
! # makeinfo even if only the Makefile is there, because Texinfo builds its
! # manual when made, and it requires its own version.
! CONFIGURED_MAKEINFO = @CONFIGURED_MAKEINFO@
! MAKEINFO = `if [ -f $$r/$(BUILD_SUBDIR)/texinfo/makeinfo/Makefile ] ; \
! 	then echo $$r/$(BUILD_SUBDIR)/texinfo/makeinfo/makeinfo ; \
! 	else if (${CONFIGURED_MAKEINFO} --version \
  	  | egrep 'texinfo[^0-9]*([1-3][0-9]|4\.[2-9]|[5-9])') >/dev/null 2>&1; \
!         then echo ${CONFIGURED_MAKEINFO}; else echo $$s/missing makeinfo; fi; fi`
  
  # This just becomes part of the MAKEINFO definition passed down to
  # sub-makes.  It lets flags be given on the command line while still
*************** PICFLAG = 
*** 246,256 ****
  
  # This is the list of directories that may be needed in RPATH_ENVVAR
  # so that prorgams built for the target machine work.
! TARGET_LIB_PATH = $$r/$(TARGET_SUBDIR)/libstdc++-v3/src/.libs:
  
  FLAGS_FOR_TARGET = @FLAGS_FOR_TARGET@
  
  AR_FOR_TARGET=@AR_FOR_TARGET@
  USUAL_AR_FOR_TARGET = ` \
    if [ -f $$r/binutils/ar ] ; then \
      echo $$r/binutils/ar ; \
--- 353,364 ----
  
  # This is the list of directories that may be needed in RPATH_ENVVAR
  # so that prorgams built for the target machine work.
! TARGET_LIB_PATH = $$r/$(TARGET_SUBDIR)/libstdc++-v3/src/.libs:$$r/$(TARGET_SUBDIR)/libmudflap/.libs
  
  FLAGS_FOR_TARGET = @FLAGS_FOR_TARGET@
  
  AR_FOR_TARGET=@AR_FOR_TARGET@
+ CONFIGURED_AR_FOR_TARGET=@CONFIGURED_AR_FOR_TARGET@
  USUAL_AR_FOR_TARGET = ` \
    if [ -f $$r/binutils/ar ] ; then \
      echo $$r/binutils/ar ; \
*************** USUAL_AR_FOR_TARGET = ` \
*** 258,268 ****
      if [ '$(host)' = '$(target)' ] ; then \
        echo $(AR); \
      else \
!        echo ar | sed '$(program_transform_name)' ; \
      fi; \
    fi`
  
  AS_FOR_TARGET=@AS_FOR_TARGET@
  USUAL_AS_FOR_TARGET = ` \
    if [ -f $$r/gas/as-new ] ; then \
      echo $$r/gas/as-new ; \
--- 366,377 ----
      if [ '$(host)' = '$(target)' ] ; then \
        echo $(AR); \
      else \
!       echo $(CONFIGURED_AR_FOR_TARGET) ; \
      fi; \
    fi`
  
  AS_FOR_TARGET=@AS_FOR_TARGET@
+ CONFIGURED_AS_FOR_TARGET=@CONFIGURED_AS_FOR_TARGET@
  USUAL_AS_FOR_TARGET = ` \
    if [ -f $$r/gas/as-new ] ; then \
      echo $$r/gas/as-new ; \
*************** USUAL_AS_FOR_TARGET = ` \
*** 272,278 ****
      if [ '$(host)' = '$(target)' ] ; then \
        echo $(AS); \
      else \
!        echo as | sed '$(program_transform_name)' ; \
      fi; \
    fi`
  
--- 381,387 ----
      if [ '$(host)' = '$(target)' ] ; then \
        echo $(AS); \
      else \
!       echo $(CONFIGURED_AS_FOR_TARGET) ; \
      fi; \
    fi`
  
*************** CXXFLAGS_FOR_TARGET = $(CXXFLAGS)
*** 298,303 ****
--- 407,413 ----
  LIBCXXFLAGS_FOR_TARGET = $(CXXFLAGS_FOR_TARGET) -fno-implicit-templates
  
  DLLTOOL_FOR_TARGET=@DLLTOOL_FOR_TARGET@
+ CONFIGURED_DLLTOOL_FOR_TARGET=@CONFIGURED_DLLTOOL_FOR_TARGET@
  USUAL_DLLTOOL_FOR_TARGET = ` \
    if [ -f $$r/binutils/dlltool ] ; then \
      echo $$r/binutils/dlltool ; \
*************** USUAL_DLLTOOL_FOR_TARGET = ` \
*** 305,317 ****
      if [ '$(host)' = '$(target)' ] ; then \
        echo $(DLLTOOL); \
      else \
!        echo dlltool | sed '$(program_transform_name)' ; \
      fi; \
    fi`
  
  GCJ_FOR_TARGET = @GCJ_FOR_TARGET@
  
  LD_FOR_TARGET=@LD_FOR_TARGET@
  USUAL_LD_FOR_TARGET = ` \
    if [ -f $$r/ld/ld-new ] ; then \
      echo $$r/ld/ld-new ; \
--- 415,429 ----
      if [ '$(host)' = '$(target)' ] ; then \
        echo $(DLLTOOL); \
      else \
!       echo $(CONFIGURED_DLLTOOL_FOR_TARGET) ; \
      fi; \
    fi`
  
  GCJ_FOR_TARGET = @GCJ_FOR_TARGET@
+ GFORTRAN_FOR_TARGET = @GFORTRAN_FOR_TARGET@
  
  LD_FOR_TARGET=@LD_FOR_TARGET@
+ CONFIGURED_LD_FOR_TARGET=@CONFIGURED_LD_FOR_TARGET@
  USUAL_LD_FOR_TARGET = ` \
    if [ -f $$r/ld/ld-new ] ; then \
      echo $$r/ld/ld-new ; \
*************** USUAL_LD_FOR_TARGET = ` \
*** 321,333 ****
      if [ '$(host)' = '$(target)' ] ; then \
        echo $(LD); \
      else \
!        echo ld | sed '$(program_transform_name)' ; \
      fi; \
    fi`
  
  LDFLAGS_FOR_TARGET = 
  
  NM_FOR_TARGET=@NM_FOR_TARGET@
  USUAL_NM_FOR_TARGET = ` \
    if [ -f $$r/binutils/nm-new ] ; then \
      echo $$r/binutils/nm-new ; \
--- 433,446 ----
      if [ '$(host)' = '$(target)' ] ; then \
        echo $(LD); \
      else \
!       echo $(CONFIGURED_LD_FOR_TARGET) ; \
      fi; \
    fi`
  
  LDFLAGS_FOR_TARGET = 
  
  NM_FOR_TARGET=@NM_FOR_TARGET@
+ CONFIGURED_NM_FOR_TARGET=@CONFIGURED_NM_FOR_TARGET@
  USUAL_NM_FOR_TARGET = ` \
    if [ -f $$r/binutils/nm-new ] ; then \
      echo $$r/binutils/nm-new ; \
*************** USUAL_NM_FOR_TARGET = ` \
*** 337,347 ****
      if [ '$(host)' = '$(target)' ] ; then \
        echo $(NM); \
      else \
!        echo nm | sed '$(program_transform_name)' ; \
      fi; \
    fi`
  
  RANLIB_FOR_TARGET=@RANLIB_FOR_TARGET@
  USUAL_RANLIB_FOR_TARGET = ` \
    if [ -f $$r/binutils/ranlib ] ; then \
      echo $$r/binutils/ranlib ; \
--- 450,461 ----
      if [ '$(host)' = '$(target)' ] ; then \
        echo $(NM); \
      else \
!       echo $(CONFIGURED_NM_FOR_TARGET) ; \
      fi; \
    fi`
  
  RANLIB_FOR_TARGET=@RANLIB_FOR_TARGET@
+ CONFIGURED_RANLIB_FOR_TARGET=@CONFIGURED_RANLIB_FOR_TARGET@
  USUAL_RANLIB_FOR_TARGET = ` \
    if [ -f $$r/binutils/ranlib ] ; then \
      echo $$r/binutils/ranlib ; \
*************** USUAL_RANLIB_FOR_TARGET = ` \
*** 353,363 ****
           echo ranlib; \
        fi; \
      else \
!        echo ranlib | sed '$(program_transform_name)' ; \
      fi; \
    fi`
  
  WINDRES_FOR_TARGET=@WINDRES_FOR_TARGET@
  USUAL_WINDRES_FOR_TARGET = ` \
    if [ -f $$r/binutils/windres ] ; then \
      echo $$r/binutils/windres ; \
--- 467,478 ----
           echo ranlib; \
        fi; \
      else \
!       echo $(CONFIGURED_RANLIB_FOR_TARGET) ; \
      fi; \
    fi`
  
  WINDRES_FOR_TARGET=@WINDRES_FOR_TARGET@
+ CONFIGURED_WINDRES_FOR_TARGET=@CONFIGURED_WINDRES_FOR_TARGET@
  USUAL_WINDRES_FOR_TARGET = ` \
    if [ -f $$r/binutils/windres ] ; then \
      echo $$r/binutils/windres ; \
*************** USUAL_WINDRES_FOR_TARGET = ` \
*** 365,371 ****
      if [ '$(host)' = '$(target)' ] ; then \
        echo $(WINDRES); \
      else \
!        echo windres | sed '$(program_transform_name)' ; \
      fi; \
    fi`
  
--- 480,486 ----
      if [ '$(host)' = '$(target)' ] ; then \
        echo $(WINDRES); \
      else \
!       echo $(CONFIGURED_WINDRES_FOR_TARGET) ; \
      fi; \
    fi`
  
*************** PICFLAG_FOR_TARGET = 
*** 377,384 ****
  
  # The first rule in the file had better be this one.  Don't put any above it.
  # This lives here to allow makefile fragments to contain dependencies.
! all: all.normal
! .PHONY: all
  
  #### host and target specific makefile fragments come in here.
  @target_makefile_frag@
--- 492,498 ----
  
  # The first rule in the file had better be this one.  Don't put any above it.
  # This lives here to allow makefile fragments to contain dependencies.
! @default_target@:
  
  #### host and target specific makefile fragments come in here.
  @target_makefile_frag@
*************** RECURSE_FLAGS = \
*** 402,407 ****
--- 516,523 ----
  	CXX_FOR_TARGET='$(CXX_FOR_TARGET_FOR_RECURSIVE_MAKE)' \
  	RAW_CXX_FOR_TARGET='$(RAW_CXX_FOR_TARGET_FOR_RECURSIVE_MAKE)' \
  
+ RECURSE_FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) $(RECURSE_FLAGS)
+ 
  # Flags to pass down to most sub-makes, in which we're building with
  # the host environment.
  EXTRA_HOST_FLAGS = \
*************** EXTRA_GCC_FLAGS = \
*** 460,479 ****
  	'BUILD_PREFIX_1=$(BUILD_PREFIX_1)' \
  	"GCC_FOR_TARGET=$(GCC_FOR_TARGET)" \
  	"CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)" \
! 	"`echo 'LANGUAGES=$(LANGUAGES)' | sed -e s/.*=$$/XFOO=/`" \
! 	"`echo 'STMP_FIXPROTO=$(STMP_FIXPROTO)' | sed -e s/.*=$$/XFOO=/`" \
! 	"`echo 'LIMITS_H_TEST=$(LIMITS_H_TEST)' | sed -e s/.*=$$/XFOO=/`" \
! 	"`echo 'LIBGCC2_CFLAGS=$(LIBGCC2_CFLAGS)' | sed -e s/.*=$$/XFOO=/`" \
! 	"`echo 'LIBGCC2_DEBUG_CFLAGS=$(LIBGCC2_DEBUG_CFLAGS)' | sed -e s/.*=$$/XFOO=/`" \
! 	"`echo 'LIBGCC2_INCLUDES=$(LIBGCC2_INCLUDES)' | sed -e s/.*=$$/XFOO=/`" \
! 	"`echo 'STAGE1_CFLAGS=$(STAGE1_CFLAGS)' | sed -e s/.*=$$/XFOO=/`" \
! 	"`echo 'BOOT_CFLAGS=$(BOOT_CFLAGS)' | sed -e s/.*=$$/XFOO=/`" \
! 	"`echo 'BOOT_ADAFLAGS=$(BOOT_ADAFLAGS)' | sed -e s/.*=$$/XFOO=/`"
  
  GCC_FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS)
  
  .PHONY: configure-host
! configure-host: maybe-configure-gcc [+
    FOR host_modules +] \
      maybe-configure-[+module+][+
    ENDFOR host_modules +]
--- 576,595 ----
  	'BUILD_PREFIX_1=$(BUILD_PREFIX_1)' \
  	"GCC_FOR_TARGET=$(GCC_FOR_TARGET)" \
  	"CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)" \
! 	"`echo 'LANGUAGES=$(LANGUAGES)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`" \
! 	"`echo 'STMP_FIXPROTO=$(STMP_FIXPROTO)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`" \
! 	"`echo 'LIMITS_H_TEST=$(LIMITS_H_TEST)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`" \
! 	"`echo 'LIBGCC2_CFLAGS=$(LIBGCC2_CFLAGS)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`" \
! 	"`echo 'LIBGCC2_DEBUG_CFLAGS=$(LIBGCC2_DEBUG_CFLAGS)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`" \
! 	"`echo 'LIBGCC2_INCLUDES=$(LIBGCC2_INCLUDES)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`" \
! 	"`echo 'STAGE1_CFLAGS=$(STAGE1_CFLAGS)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`" \
! 	"`echo 'BOOT_CFLAGS=$(BOOT_CFLAGS)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`" \
! 	"`echo 'BOOT_ADAFLAGS=$(BOOT_ADAFLAGS)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`"
  
  GCC_FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS)
  
  .PHONY: configure-host
! configure-host: [+
    FOR host_modules +] \
      maybe-configure-[+module+][+
    ENDFOR host_modules +]
*************** configure-target: [+
*** 483,494 ****
      maybe-configure-target-[+module+][+
    ENDFOR target_modules +]
  
! # The target built for a native build.
! .PHONY: all.normal
! all.normal: @all_build_modules@ all-host all-target
  
  .PHONY: all-host
! all-host: maybe-all-gcc [+
    FOR host_modules +] \
      maybe-all-[+module+][+
    ENDFOR host_modules +]
--- 599,615 ----
      maybe-configure-target-[+module+][+
    ENDFOR target_modules +]
  
! # The target built for a native non-bootstrap build.
! .PHONY: all
! all: unstage all-host all-target stage
  
+ .PHONY: all-build
+ all-build: [+
+   FOR build_modules +] \
+     maybe-all-build-[+module+][+
+   ENDFOR build_modules +]
  .PHONY: all-host
! all-host: [+
    FOR host_modules +] \
      maybe-all-[+module+][+
    ENDFOR host_modules +]
*************** all-target: [+
*** 504,513 ****
  # but it may do additional work as well).
  [+ FOR recursive_targets +]
  .PHONY: do-[+make_target+]
! do-[+make_target+]: [+make_target+]-host [+make_target+]-target
  
  .PHONY: [+make_target+]-host
! [+make_target+]-host: maybe-[+make_target+]-gcc [+
    FOR host_modules +] \
      maybe-[+make_target+]-[+module+][+
    ENDFOR host_modules +]
--- 625,634 ----
  # but it may do additional work as well).
  [+ FOR recursive_targets +]
  .PHONY: do-[+make_target+]
! do-[+make_target+]: unstage [+make_target+]-host [+make_target+]-target stage
  
  .PHONY: [+make_target+]-host
! [+make_target+]-host: [+
    FOR host_modules +] \
      maybe-[+make_target+]-[+module+][+
    ENDFOR host_modules +]
*************** do-[+make_target+]: [+make_target+]-host
*** 517,615 ****
    FOR target_modules +] \
      maybe-[+make_target+]-target-[+module+][+
    ENDFOR target_modules +]
- 
- # GCC, the eternal special case
- .PHONY: maybe-[+make_target+]-gcc [+make_target+]-gcc
- maybe-[+make_target+]-gcc:
- [+make_target+]-gcc: [+
-   FOR depend +]\
-     [+depend+]-gcc [+
-   ENDFOR depend +]
- 	@[ -f ./gcc/Makefile ] || exit 0; \
- 	r=`${PWD_COMMAND}`; export r; \
- 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
- 	$(SET_LIB_PATH) \
- 	for flag in $(EXTRA_GCC_FLAGS); do \
- 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
- 	done; \
- 	echo "Doing [+make_target+] in gcc" ; \
- 	(cd gcc && \
- 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
- 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
- 	          "RANLIB=$${RANLIB}" \
- 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
- 	          [+make_target+]) \
- 	  || exit 1
- 
- # Host modules.
- [+ FOR host_modules +]
- .PHONY: maybe-[+make_target+]-[+module+] [+make_target+]-[+module+]
- maybe-[+make_target+]-[+module+]:
- [+ IF (match-value? = "missing" (get "make_target") ) +]
- # [+module+] doesn't support [+make_target+].
- [+make_target+]-[+module+]:
- [+ ELSE +]
- [+make_target+]-[+module+]: [+
-   FOR depend +]\
-     [+depend+]-[+module+] [+
-   ENDFOR depend +]
- 	@[ -f ./[+module+]/Makefile ] || exit 0; \
- 	r=`${PWD_COMMAND}`; export r; \
- 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
- 	$(SET_LIB_PATH) \
- 	for flag in $(EXTRA_HOST_FLAGS); do \
- 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
- 	done; \
- 	echo "Doing [+make_target+] in [+module+]" ; \
- 	(cd [+module+] && \
- 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
- 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
- 	          "RANLIB=$${RANLIB}" \
- 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
- 	          [+make_target+]) \
- 	  || exit 1
- [+ ENDIF +]
- [+ ENDFOR host_modules +]
- 
- # Target modules.
- [+ FOR target_modules +]
- .PHONY: maybe-[+make_target+]-target-[+module+] [+make_target+]-target-[+module+]
- maybe-[+make_target+]-target-[+module+]:
- [+ IF (match-value? = "missing" (get "make_target") ) +]
- # [+module+] doesn't support [+make_target+].
- [+make_target+]-target-[+module+]:
- [+ ELSE +]
- [+make_target+]-target-[+module+]: [+
-   FOR depend +]\
-     [+depend+]-target-[+module+] [+
-   ENDFOR depend +]
- 	@[ -f $(TARGET_SUBDIR)/[+module+]/Makefile ] || exit 0 ; \
- 	r=`${PWD_COMMAND}`; export r; \
- 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
- 	$(SET_LIB_PATH) \
- 	echo "Doing [+make_target+] in $(TARGET_SUBDIR)/[+module+]" ; \
- 	for flag in $(EXTRA_TARGET_FLAGS); do \
- 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
- 	done; \
- 	(cd $(TARGET_SUBDIR)/[+module+] && \
- 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
- 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
- 	          "RANLIB=$${RANLIB}" \
- 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
- 	          [+make_target+]) \
- 	  || exit 1
- [+ ENDIF +]
- [+ ENDFOR target_modules +]
  [+ ENDFOR recursive_targets +]
  
  # Here are the targets which correspond to the do-X targets.
  
! .PHONY: info installcheck dvi install-info
  .PHONY: clean distclean mostlyclean maintainer-clean realclean
  .PHONY: local-clean local-distclean local-maintainer-clean
  info: do-info
  installcheck: do-installcheck
  dvi: do-dvi
  
  # Make sure makeinfo is built before we do a `make info', if we're
  # in fact building texinfo.
--- 638,654 ----
    FOR target_modules +] \
      maybe-[+make_target+]-target-[+module+][+
    ENDFOR target_modules +]
  [+ ENDFOR recursive_targets +]
  
  # Here are the targets which correspond to the do-X targets.
  
! .PHONY: info installcheck dvi html install-info
  .PHONY: clean distclean mostlyclean maintainer-clean realclean
  .PHONY: local-clean local-distclean local-maintainer-clean
  info: do-info
  installcheck: do-installcheck
  dvi: do-dvi
+ html: do-html
  
  # Make sure makeinfo is built before we do a `make info', if we're
  # in fact building texinfo.
*************** clean-target-libgcc:
*** 655,660 ****
--- 694,700 ----
  	(cd gcc/libgcc && find . -type d -print) | \
  	while read d; do rm -f gcc/$$d/libgcc.a || : ; done
  	-rm -rf gcc/libgcc
+ 	-rm -f gcc/stmp-dirs
  
  # Check target.
  
*************** clean-target-libgcc:
*** 662,674 ****
  check: do-check
  
  # Only include modules actually being configured and built.
! do-check: maybe-check-gcc [+
    FOR host_modules +] \
      maybe-check-[+module+][+
    ENDFOR host_modules +][+
    FOR target_modules +] \
      maybe-check-target-[+module+][+
!   ENDFOR target_modules +]
  
  # Automated reporting of test results.
  
--- 702,714 ----
  check: do-check
  
  # Only include modules actually being configured and built.
! do-check: unstage [+
    FOR host_modules +] \
      maybe-check-[+module+][+
    ENDFOR host_modules +][+
    FOR target_modules +] \
      maybe-check-target-[+module+][+
!   ENDFOR target_modules +] stage
  
  # Automated reporting of test results.
  
*************** install: installdirs install-host instal
*** 698,709 ****
  
  .PHONY: install-host-nogcc
  install-host-nogcc: [+
!   FOR host_modules +] \
!     maybe-install-[+module+][+
    ENDFOR host_modules +]
  
  .PHONY: install-host
! install-host: maybe-install-gcc [+
    FOR host_modules +] \
      maybe-install-[+module+][+
    ENDFOR host_modules +]
--- 738,749 ----
  
  .PHONY: install-host-nogcc
  install-host-nogcc: [+
!   FOR host_modules +][+ IF (not (= (get "module") "gcc")) +] \
!     maybe-install-[+module+][+ ENDIF +][+
    ENDFOR host_modules +]
  
  .PHONY: install-host
! install-host: [+
    FOR host_modules +] \
      maybe-install-[+module+][+
    ENDFOR host_modules +]
*************** install.all: install-no-fixedincludes
*** 722,727 ****
--- 762,768 ----
  	@if [ -f ./gcc/Makefile ] ; then \
  		r=`${PWD_COMMAND}` ; export r ; \
  		$(SET_LIB_PATH) \
+ 		$(HOST_EXPORTS) \
  		(cd ./gcc && \
  		$(MAKE) $(FLAGS_TO_PASS) install-headers) ; \
  	else \
*************** TAGS: do-TAGS
*** 770,794 ****
  [+ FOR build_modules +]
  .PHONY: configure-build-[+module+] maybe-configure-build-[+module+]
  maybe-configure-build-[+module+]:
  configure-build-[+module+]:
  	@test ! -f $(BUILD_SUBDIR)/[+module+]/Makefile || exit 0; \
  	$(SHELL) $(srcdir)/mkinstalldirs $(BUILD_SUBDIR)/[+module+] ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	AR="$(AR_FOR_BUILD)"; export AR; \
! 	AS="$(AS_FOR_BUILD)"; export AS; \
! 	CC="$(CC_FOR_BUILD)"; export CC; \
! 	CFLAGS="$(CFLAGS_FOR_BUILD)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX_FOR_BUILD)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS_FOR_BUILD)"; export CXXFLAGS; \
! 	GCJ="$(GCJ_FOR_BUILD)"; export GCJ; \
! 	DLLTOOL="$(DLLTOOL_FOR_BUILD)"; export DLLTOOL; \
! 	LD="$(LD_FOR_BUILD)"; export LD; \
! 	LDFLAGS="$(LDFLAGS_FOR_BUILD)"; export LDFLAGS; \
! 	NM="$(NM_FOR_BUILD)"; export NM; \
! 	RANLIB="$(RANLIB_FOR_BUILD)"; export RANLIB; \
! 	WINDRES="$(WINDRES_FOR_BUILD)"; export WINDRES; \
  	echo Configuring in $(BUILD_SUBDIR)/[+module+]; \
  	cd "$(BUILD_SUBDIR)/[+module+]" || exit 1; \
  	case $(srcdir) in \
--- 811,824 ----
  [+ FOR build_modules +]
  .PHONY: configure-build-[+module+] maybe-configure-build-[+module+]
  maybe-configure-build-[+module+]:
+ @if build-[+module+]
+ maybe-configure-build-[+module+]: configure-build-[+module+]
  configure-build-[+module+]:
  	@test ! -f $(BUILD_SUBDIR)/[+module+]/Makefile || exit 0; \
  	$(SHELL) $(srcdir)/mkinstalldirs $(BUILD_SUBDIR)/[+module+] ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(BUILD_EXPORTS) \
  	echo Configuring in $(BUILD_SUBDIR)/[+module+]; \
  	cd "$(BUILD_SUBDIR)/[+module+]" || exit 1; \
  	case $(srcdir) in \
*************** configure-build-[+module+]:
*** 827,841 ****
  	rm -f no-such-file || : ; \
  	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
  	  $(BUILD_CONFIGARGS) $${srcdiroption} \
! 	  --with-build-subdir="$(BUILD_SUBDIR)" \
  	  || exit 1
  
  .PHONY: all-build-[+module+] maybe-all-build-[+module+]
  maybe-all-build-[+module+]:
  all-build-[+module+]: configure-build-[+module+]
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	(cd $(BUILD_SUBDIR)/[+module+] && $(MAKE) all)
  [+ ENDFOR build_modules +]
  
  # --------------------------------------
--- 857,878 ----
  	rm -f no-such-file || : ; \
  	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
  	  $(BUILD_CONFIGARGS) $${srcdiroption} \
! 	  --with-build-subdir="$(BUILD_SUBDIR)" [+extra_configure_flags+] \
  	  || exit 1
+ @endif build-[+module+]
  
  .PHONY: all-build-[+module+] maybe-all-build-[+module+]
  maybe-all-build-[+module+]:
+ @if build-[+module+]
+ TARGET-build-[+module+]=[+ IF target +][+target+][+ ELSE +]all[+ ENDIF target +]
+ maybe-all-build-[+module+]: all-build-[+module+]
  all-build-[+module+]: configure-build-[+module+]
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(BUILD_EXPORTS) \
! 	(cd $(BUILD_SUBDIR)/[+module+] && \
! 	  $(MAKE) [+extra_make_flags+] $(TARGET-build-[+module+]))
! @endif build-[+module+]
  [+ ENDFOR build_modules +]
  
  # --------------------------------------
*************** all-build-[+module+]: configure-build-[+
*** 844,869 ****
  [+ FOR host_modules +]
  .PHONY: configure-[+module+] maybe-configure-[+module+]
  maybe-configure-[+module+]:
  configure-[+module+]:
! 	@test ! -f [+module+]/Makefile || exit 0; \
  	[ -d [+module+] ] || mkdir [+module+]; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
  	echo Configuring in [+module+]; \
  	cd [+module+] || exit 1; \
  	case $(srcdir) in \
--- 881,895 ----
  [+ FOR host_modules +]
  .PHONY: configure-[+module+] maybe-configure-[+module+]
  maybe-configure-[+module+]:
+ @if [+module+]
+ maybe-configure-[+module+]: configure-[+module+]
  configure-[+module+]:
! 	@[+ IF bootstrap +]test -f stage_last && exit 0; \
! 	[+ ENDIF bootstrap +]test ! -f [+module+]/Makefile || exit 0; \
  	[ -d [+module+] ] || mkdir [+module+]; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(HOST_EXPORTS) \
  	echo Configuring in [+module+]; \
  	cd [+module+] || exit 1; \
  	case $(srcdir) in \
*************** configure-[+module+]:
*** 878,899 ****
  	    libsrcdir="$$s/[+module+]";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
  	  || exit 1
  
  .PHONY: all-[+module+] maybe-all-[+module+]
  maybe-all-[+module+]:
  all-[+module+]: configure-[+module+]
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	(cd [+module+] && $(MAKE) $(FLAGS_TO_PASS)[+ 
! 	  IF with_x 
! 	    +] $(X11_FLAGS_TO_PASS)[+ 
! 	  ENDIF with_x +] all)
  
  .PHONY: check-[+module+] maybe-check-[+module+]
  maybe-check-[+module+]:
  [+ IF no_check +]
  check-[+module+]:
  [+ ELIF no_check_cross +]
--- 904,932 ----
  	    libsrcdir="$$s/[+module+]";; \
  	esac; \
  	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} [+extra_configure_flags+] \
  	  || exit 1
+ @endif [+module+]
  
  .PHONY: all-[+module+] maybe-all-[+module+]
  maybe-all-[+module+]:
+ @if [+module+]
+ TARGET-[+module+]=[+ IF target +][+target+][+ ELSE +]all[+ ENDIF target +]
+ maybe-all-[+module+]: all-[+module+]
  all-[+module+]: configure-[+module+]
! 	@[+ IF bootstrap +]test -f stage_last && exit 0; \
! 	[+ ENDIF bootstrap +]r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
! 	$(HOST_EXPORTS) \
! 	(cd [+module+] && $(MAKE) $(FLAGS_TO_PASS) [+extra_make_flags+] \
! 	  $(TARGET-[+module+]))
! @endif [+module+]
  
  .PHONY: check-[+module+] maybe-check-[+module+]
  maybe-check-[+module+]:
+ @if [+module+]
+ maybe-check-[+module+]: check-[+module+]
  [+ IF no_check +]
  check-[+module+]:
  [+ ELIF no_check_cross +]
*************** check-[+module+]:
*** 903,926 ****
  	  r=`${PWD_COMMAND}`; export r; \
  	  s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	  $(SET_LIB_PATH) \
! 	  (cd [+module+] && $(MAKE) $(FLAGS_TO_PASS)[+ 
! 	    IF with_x 
! 	      +] $(X11_FLAGS_TO_PASS)[+ 
! 	    ENDIF with_x +] check); \
  	fi
  [+ ELSE check +]
  check-[+module+]:
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
  	(cd [+module+] && $(MAKE) $(FLAGS_TO_PASS)[+ 
! 	  IF with_x 
! 	    +] $(X11_FLAGS_TO_PASS)[+ 
! 	  ENDIF with_x +] check)
  [+ ENDIF no_check +]
  
  .PHONY: install-[+module+] maybe-install-[+module+]
  maybe-install-[+module+]:
  [+ IF no_install +]
  install-[+module+]:
  [+ ELSE install +]
--- 936,960 ----
  	  r=`${PWD_COMMAND}`; export r; \
  	  s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	  $(SET_LIB_PATH) \
! 	  $(HOST_EXPORTS) \
! 	  (cd [+module+] && $(MAKE) $(FLAGS_TO_PASS) [+ 
! 	    extra_make_flags+] check); \
  	fi
  [+ ELSE check +]
  check-[+module+]:
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
+ 	$(HOST_EXPORTS) \
  	(cd [+module+] && $(MAKE) $(FLAGS_TO_PASS)[+ 
! 	  extra_make_flags+] check)
  [+ ENDIF no_check +]
+ @endif [+module+]
  
  .PHONY: install-[+module+] maybe-install-[+module+]
  maybe-install-[+module+]:
+ @if [+module+]
+ maybe-install-[+module+]: install-[+module+]
  [+ IF no_install +]
  install-[+module+]:
  [+ ELSE install +]
*************** install-[+module+]: installdirs
*** 928,938 ****
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
  	(cd [+module+] && $(MAKE) $(FLAGS_TO_PASS)[+ 
! 	  IF with_x 
! 	    +] $(X11_FLAGS_TO_PASS)[+ 
! 	  ENDIF with_x +] install)
  [+ ENDIF no_install +]
  [+ ENDFOR host_modules +]
  
  # ---------------------------------------
--- 962,1006 ----
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
+ 	$(HOST_EXPORTS) \
  	(cd [+module+] && $(MAKE) $(FLAGS_TO_PASS)[+ 
! 	  extra_make_flags+] install)
  [+ ENDIF no_install +]
+ @endif [+module+]
+ 
+ # Other targets (info, dvi, etc.)
+ [+ FOR recursive_targets +]
+ .PHONY: maybe-[+make_target+]-[+module+] [+make_target+]-[+module+]
+ maybe-[+make_target+]-[+module+]:
+ @if [+module+]
+ maybe-[+make_target+]-[+module+]: [+make_target+]-[+module+]
+ [+ IF (match-value? = "missing" (get "make_target") ) +]
+ # [+module+] doesn't support [+make_target+].
+ [+make_target+]-[+module+]:
+ [+ ELSE +]
+ [+make_target+]-[+module+]: [+
+   FOR depend +]\
+     [+depend+]-[+module+] [+
+   ENDFOR depend +]
+ 	@[ -f ./[+module+]/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(SET_LIB_PATH) \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) [+extra_make_flags+]; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing [+make_target+] in [+module+]" ; \
+ 	(cd [+module+] && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ 	          [+make_target+]) \
+ 	  || exit 1
+ [+ ENDIF +]
+ @endif [+module+]
+ [+ ENDFOR recursive_targets +]
  [+ ENDFOR host_modules +]
  
  # ---------------------------------------
*************** install-[+module+]: installdirs
*** 941,946 ****
--- 1009,1016 ----
  [+ FOR target_modules +]
  .PHONY: configure-target-[+module+] maybe-configure-target-[+module+]
  maybe-configure-target-[+module+]:
+ @if target-[+module+]
+ maybe-configure-target-[+module+]: configure-target-[+module+]
  
  # There's only one multilib.out.  Cleverer subdirs shouldn't need it copied.
  $(TARGET_SUBDIR)/[+module+]/multilib.out: multilib.out
*************** configure-target-[+module+]: $(TARGET_SU
*** 953,981 ****
  	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/[+module+] ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
! 	AR="$(AR_FOR_TARGET)"; export AR; \
! 	AS="$(AS_FOR_TARGET)"; export AS; \
! 	CC="$(CC_FOR_TARGET)"; export CC; \
! 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \[+ 
  IF raw_cxx +]
! 	CXX_FOR_TARGET="$(RAW_CXX_FOR_TARGET)"; export CXX_FOR_TARGET; \
! 	CXX="$(RAW_CXX_FOR_TARGET)"; export CXX; \[+ 
  ELSE normal_cxx +]
! 	CXX="$(CXX_FOR_TARGET)"; export CXX; \[+ 
  ENDIF raw_cxx +]
- 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
- 	GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
- 	DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
- 	LD="$(LD_FOR_TARGET)"; export LD; \
- 	LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
- 	NM="$(NM_FOR_TARGET)"; export NM; \
- 	RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
- 	WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
- 	SET_GCC_LIB_PATH_CMD="@SET_GCC_LIB_PATH@"; export SET_GCC_LIB_PATH_CMD; \
- 	@SET_GCC_LIB_PATH@ \
  	echo Configuring in $(TARGET_SUBDIR)/[+module+]; \
  	cd "$(TARGET_SUBDIR)/[+module+]" || exit 1; \
  	case $(srcdir) in \
--- 1023,1034 ----
  	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/[+module+] ; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \[+
  IF raw_cxx +]
! 	$(RAW_CXX_TARGET_EXPORTS) \[+
  ELSE normal_cxx +]
! 	$(NORMAL_TARGET_EXPORTS) \[+
  ENDIF raw_cxx +]
  	echo Configuring in $(TARGET_SUBDIR)/[+module+]; \
  	cd "$(TARGET_SUBDIR)/[+module+]" || exit 1; \
  	case $(srcdir) in \
*************** ENDIF raw_cxx +]
*** 1014,1037 ****
  	rm -f no-such-file || : ; \
  	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
  	  $(TARGET_CONFIGARGS) $${srcdiroption} \
! 	  --with-target-subdir="$(TARGET_SUBDIR)" \
  	  || exit 1
  
  .PHONY: all-target-[+module+] maybe-all-target-[+module+]
  maybe-all-target-[+module+]:
  all-target-[+module+]: configure-target-[+module+]
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
  	(cd $(TARGET_SUBDIR)/[+module+] && \
  	  $(MAKE) $(TARGET_FLAGS_TO_PASS) [+
  	    IF raw_cxx 
  	  +] 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' [+ 
  	    ENDIF raw_cxx 
! 	  +] all)
  
  .PHONY: check-target-[+module+] maybe-check-target-[+module+]
  maybe-check-target-[+module+]:
  [+ IF no_check +]
  # Dummy target for uncheckable module.
  check-target-[+module+]:
--- 1067,1102 ----
  	rm -f no-such-file || : ; \
  	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
  	  $(TARGET_CONFIGARGS) $${srcdiroption} \
! 	  --with-target-subdir="$(TARGET_SUBDIR)" [+extra_configure_flags+] \
  	  || exit 1
+ @endif target-[+module+]
  
  .PHONY: all-target-[+module+] maybe-all-target-[+module+]
  maybe-all-target-[+module+]:
+ @if target-[+module+]
+ TARGET-target-[+module+]=[+ IF target +][+target+][+ ELSE +]all[+ ENDIF target +]
+ maybe-all-target-[+module+]: all-target-[+module+]
  all-target-[+module+]: configure-target-[+module+]
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \[+
! IF raw_cxx +]
! 	$(RAW_CXX_TARGET_EXPORTS) \[+
! ELSE normal_cxx +]
! 	$(NORMAL_TARGET_EXPORTS) \[+
! ENDIF raw_cxx +]
  	(cd $(TARGET_SUBDIR)/[+module+] && \
  	  $(MAKE) $(TARGET_FLAGS_TO_PASS) [+
  	    IF raw_cxx 
  	  +] 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' [+ 
  	    ENDIF raw_cxx 
! 	  +] [+extra_make_flags+] $(TARGET-target-[+module+]))
! @endif target-[+module+]
  
  .PHONY: check-target-[+module+] maybe-check-target-[+module+]
  maybe-check-target-[+module+]:
+ @if target-[+module+]
+ maybe-check-target-[+module+]: check-target-[+module+]
  [+ IF no_check +]
  # Dummy target for uncheckable module.
  check-target-[+module+]:
*************** check-target-[+module+]:
*** 1039,1055 ****
  check-target-[+module+]:
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
  	(cd $(TARGET_SUBDIR)/[+module+] && \
  	  $(MAKE) $(TARGET_FLAGS_TO_PASS) [+
  	    IF raw_cxx 
  	      +] 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' [+ 
  	    ENDIF raw_cxx 
! 	  +] check)
  [+ ENDIF no_check +]
  
  .PHONY: install-target-[+module+] maybe-install-target-[+module+]
  maybe-install-target-[+module+]:
  [+ IF no_install +]
  # Dummy target for uninstallable.
  install-target-[+module+]:
--- 1104,1128 ----
  check-target-[+module+]:
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \[+
! IF raw_cxx +]
! 	$(RAW_CXX_TARGET_EXPORTS) \[+
! ELSE normal_cxx +]
! 	$(NORMAL_TARGET_EXPORTS) \[+
! ENDIF raw_cxx +]
  	(cd $(TARGET_SUBDIR)/[+module+] && \
  	  $(MAKE) $(TARGET_FLAGS_TO_PASS) [+
  	    IF raw_cxx 
  	      +] 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' [+ 
  	    ENDIF raw_cxx 
! 	  +] [+extra_make_flags+] check)
  [+ ENDIF no_check +]
+ @endif target-[+module+]
  
  .PHONY: install-target-[+module+] maybe-install-target-[+module+]
  maybe-install-target-[+module+]:
+ @if target-[+module+]
+ maybe-install-target-[+module+]: install-target-[+module+]
  [+ IF no_install +]
  # Dummy target for uninstallable.
  install-target-[+module+]:
*************** install-target-[+module+]:
*** 1057,1156 ****
  install-target-[+module+]: installdirs
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \
  	(cd $(TARGET_SUBDIR)/[+module+] && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
  [+ ENDIF no_install +]
  [+ ENDFOR target_modules +]
  
  # ----------
  # GCC module
  # ----------
  
! # Unfortunately, while gcc _should_ be a host module,
! # libgcc is a target module, and gen* programs are
! # build modules.  So GCC is a sort of hybrid.
! 
! # gcc is the only module which uses GCC_FLAGS_TO_PASS.
! # Don't use shared host config.cache, as it will confuse later
! # directories; GCC wants slightly different values for some
! # precious variables.  *sigh*
! .PHONY: configure-gcc maybe-configure-gcc
! maybe-configure-gcc:
! configure-gcc:
! 	@test ! -f gcc/Makefile || exit 0; \
! 	[ -d gcc ] || mkdir gcc; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	CC="$(CC)"; export CC; \
! 	CFLAGS="$(CFLAGS)"; export CFLAGS; \
! 	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
! 	CXX="$(CXX)"; export CXX; \
! 	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
! 	TOPLEVEL_CONFIGURE_ARGUMENTS="$(TOPLEVEL_CONFIGURE_ARGUMENTS)"; export TOPLEVEL_CONFIGURE_ARGUMENTS; \
! 	AR="$(AR)"; export AR; \
! 	AS="$(AS)"; export AS; \
! 	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
! 	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
! 	LD="$(LD)"; export LD; \
! 	NM="$(NM)"; export NM; \
! 	RANLIB="$(RANLIB)"; export RANLIB; \
! 	WINDRES="$(WINDRES)"; export WINDRES; \
! 	OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
! 	OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
! 	SET_GCC_LIB_PATH_CMD="@SET_GCC_LIB_PATH@"; export SET_GCC_LIB_PATH_CMD; \
! 	@SET_GCC_LIB_PATH@ \
! 	echo Configuring in gcc; \
! 	cd gcc || exit 1; \
! 	case $(srcdir) in \
! 	  \.) \
! 	    srcdiroption="--srcdir=."; \
! 	    libsrcdir=".";; \
! 	  /* | [A-Za-z]:[\\/]*) \
! 	    srcdiroption="--srcdir=$(srcdir)/gcc"; \
! 	    libsrcdir="$$s/gcc";; \
! 	  *) \
! 	    srcdiroption="--srcdir=../$(srcdir)/gcc"; \
! 	    libsrcdir="$$s/gcc";; \
! 	esac; \
! 	$(SHELL) $${libsrcdir}/configure \
! 	  $(HOST_CONFIGARGS) $${srcdiroption} \
! 	  || exit 1
! 
! # Don't 'make all' in gcc if it's already been made by 'bootstrap'; that
! # causes trouble.  This wart will be fixed eventually by moving
! # the bootstrap behavior to this file.
! .PHONY: all-gcc maybe-all-gcc
! maybe-all-gcc:
! all-gcc: configure-gcc
! 	@if [ -f gcc/stage_last ] ; then \
! 	  r=`${PWD_COMMAND}`; export r; \
! 	  s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	  $(SET_LIB_PATH) \
! 	  (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) quickstrap); \
! 	else \
! 	  r=`${PWD_COMMAND}`; export r; \
! 	  s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	  $(SET_LIB_PATH) \
! 	  (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) all); \
! 	fi
  
- # Building GCC uses some tools for rebuilding "source" files
- # like texinfo, bison/byacc, etc.  So we must depend on those.
- #
- # While building GCC, it may be necessary to run various target
- # programs like the assembler, linker, etc.  So we depend on
- # those too.
- #
- # In theory, on an SMP all those dependencies can be resolved
- # in parallel.
- #
  GCC_STRAP_TARGETS = bootstrap bootstrap-lean bootstrap2 bootstrap2-lean bootstrap3 bootstrap3-lean bootstrap4 bootstrap4-lean bubblestrap quickstrap cleanstrap restrap
  .PHONY: $(GCC_STRAP_TARGETS)
! $(GCC_STRAP_TARGETS): all-bootstrap configure-gcc
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
  	echo "Bootstrapping the compiler"; \
  	cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) $@
  	@r=`${PWD_COMMAND}`; export r; \
--- 1130,1201 ----
  install-target-[+module+]: installdirs
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(SET_LIB_PATH) \[+
! IF raw_cxx +]
! 	$(RAW_CXX_TARGET_EXPORTS) \[+
! ELSE normal_cxx +]
! 	$(NORMAL_TARGET_EXPORTS) \[+
! ENDIF raw_cxx +]
  	(cd $(TARGET_SUBDIR)/[+module+] && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS) [+extra_make_flags+] install)
  [+ ENDIF no_install +]
+ @endif target-[+module+]
+ 
+ # Other targets (info, dvi, etc.)
+ [+ FOR recursive_targets +]
+ .PHONY: maybe-[+make_target+]-target-[+module+] [+make_target+]-target-[+module+]
+ maybe-[+make_target+]-target-[+module+]:
+ @if target-[+module+]
+ maybe-[+make_target+]-target-[+module+]: [+make_target+]-target-[+module+]
+ [+ IF (match-value? = "missing" (get "make_target") ) +]
+ # [+module+] doesn't support [+make_target+].
+ [+make_target+]-target-[+module+]:
+ [+ ELSE +]
+ [+make_target+]-target-[+module+]: [+
+   FOR depend +]\
+     [+depend+]-target-[+module+] [+
+   ENDFOR depend +]
+ 	@[ -f $(TARGET_SUBDIR)/[+module+]/Makefile ] || exit 0 ; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(SET_LIB_PATH) \[+
+ IF raw_cxx +]
+ 	$(RAW_CXX_TARGET_EXPORTS) \[+
+ ELSE normal_cxx +]
+ 	$(NORMAL_TARGET_EXPORTS) \[+
+ ENDIF raw_cxx +]
+ 	echo "Doing [+make_target+] in $(TARGET_SUBDIR)/[+module+]" ; \
+ 	for flag in $(EXTRA_TARGET_FLAGS); do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	(cd $(TARGET_SUBDIR)/[+module+] && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ 	          [+extra_make_flags+] [+make_target+]) \
+ 	  || exit 1
+ [+ ENDIF +]
+ @endif target-[+module+]
+ [+ ENDFOR recursive_targets +]
  [+ ENDFOR target_modules +]
  
  # ----------
  # GCC module
  # ----------
  
! @if gcc-no-bootstrap
! # GCC has some more recursive targets, which trigger the old
! # (but still current, until the toplevel bootstrap project
! # is finished) compiler bootstrapping rules.
  
  GCC_STRAP_TARGETS = bootstrap bootstrap-lean bootstrap2 bootstrap2-lean bootstrap3 bootstrap3-lean bootstrap4 bootstrap4-lean bubblestrap quickstrap cleanstrap restrap
  .PHONY: $(GCC_STRAP_TARGETS)
! $(GCC_STRAP_TARGETS): all-prebootstrap configure-gcc
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
+ 	$(HOST_EXPORTS) \
  	echo "Bootstrapping the compiler"; \
  	cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) $@
  	@r=`${PWD_COMMAND}`; export r; \
*************** $(GCC_STRAP_TARGETS): all-bootstrap conf
*** 1170,1232 ****
  	    compare=compare ;; \
  	esac; \
  	$(SET_LIB_PATH) \
  	echo "$$msg"; \
  	cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) $$compare
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}` ; export s; \
  	$(SET_LIB_PATH) \
  	echo "Building runtime libraries"; \
! 	$(MAKE) $(BASE_FLAGS_TO_PASS) $(RECURSE_FLAGS) all
  
! profiledbootstrap: all-bootstrap configure-gcc
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
  	echo "Bootstrapping training compiler"; \
  	cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) stageprofile_build
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
  	echo "Building feedback based compiler"; \
  	cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) stagefeedback_build
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}` ; export s; \
  	$(SET_LIB_PATH) \
  	echo "Building runtime libraries"; \
! 	$(MAKE) $(BASE_FLAGS_TO_PASS) $(RECURSE_FLAGS) all
  
  .PHONY: cross
! cross: all-texinfo all-bison all-byacc all-binutils all-gas all-ld
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
  	echo "Building the C and C++ compiler"; \
  	cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) LANGUAGES="c c++"
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}` ; export s; \
  	$(SET_LIB_PATH) \
  	echo "Building runtime libraries"; \
! 	$(MAKE) $(BASE_FLAGS_TO_PASS) $(RECURSE_FLAGS) \
! 	  LANGUAGES="c c++" all
! 
! .PHONY: check-gcc maybe-check-gcc
! maybe-check-gcc:
! check-gcc:
! 	@if [ -f ./gcc/Makefile ] ; then \
! 	  r=`${PWD_COMMAND}`; export r; \
! 	  s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	  $(SET_LIB_PATH) \
! 	  (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) check); \
! 	else \
! 	  true; \
! 	fi
  
  .PHONY: check-gcc-c++
  check-gcc-c++:
  	@if [ -f ./gcc/Makefile ] ; then \
  	  r=`${PWD_COMMAND}`; export r; \
  	  s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	  $(SET_LIB_PATH) \
  	  (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) check-c++); \
  	else \
  	  true; \
--- 1215,1271 ----
  	    compare=compare ;; \
  	esac; \
  	$(SET_LIB_PATH) \
+ 	$(HOST_EXPORTS) \
  	echo "$$msg"; \
  	cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) $$compare
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}` ; export s; \
  	$(SET_LIB_PATH) \
  	echo "Building runtime libraries"; \
! 	$(MAKE) $(RECURSE_FLAGS_TO_PASS) all
  
! profiledbootstrap: all-prebootstrap configure-gcc
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
+ 	$(HOST_EXPORTS) \
  	echo "Bootstrapping training compiler"; \
  	cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) stageprofile_build
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
+ 	$(HOST_EXPORTS) \
  	echo "Building feedback based compiler"; \
  	cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) stagefeedback_build
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}` ; export s; \
  	$(SET_LIB_PATH) \
  	echo "Building runtime libraries"; \
! 	$(MAKE) $(RECURSE_FLAGS_TO_PASS) all
  
  .PHONY: cross
! cross: all-build all-gas all-ld
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(SET_LIB_PATH) \
+ 	$(HOST_EXPORTS) \
  	echo "Building the C and C++ compiler"; \
  	cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) LANGUAGES="c c++"
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}` ; export s; \
  	$(SET_LIB_PATH) \
  	echo "Building runtime libraries"; \
! 	$(MAKE) $(RECURSE_FLAGS_TO_PASS) LANGUAGES="c c++" all
! @endif gcc-no-bootstrap
  
+ @if gcc
  .PHONY: check-gcc-c++
  check-gcc-c++:
  	@if [ -f ./gcc/Makefile ] ; then \
  	  r=`${PWD_COMMAND}`; export r; \
  	  s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	  $(SET_LIB_PATH) \
+ 	  $(HOST_EXPORTS) \
  	  (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) check-c++); \
  	else \
  	  true; \
*************** check-gcc-c++:
*** 1235,1252 ****
  .PHONY: check-c++
  check-c++: check-target-libstdc++-v3 check-gcc-c++
  
- .PHONY: install-gcc maybe-install-gcc
- maybe-install-gcc:
- install-gcc:
- 	@if [ -f ./gcc/Makefile ] ; then \
- 	  r=`${PWD_COMMAND}`; export r; \
- 	  s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
- 	  $(SET_LIB_PATH) \
- 	  (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) install); \
- 	else \
- 	  true; \
- 	fi
- 
  # Install the gcc headers files, but not the fixed include files,
  # which Cygnus is not allowed to distribute.  This rule is very
  # dependent on the workings of the gcc Makefile.in.
--- 1274,1279 ----
*************** gcc-no-fixedincludes:
*** 1262,1394 ****
  	  r=`${PWD_COMMAND}`; export r; \
  	  s=`cd $(srcdir); ${PWD_COMMAND}` ; export s; \
  	  $(SET_LIB_PATH) \
  	  (cd ./gcc && \
  	   $(MAKE) $(GCC_FLAGS_TO_PASS) install); \
  	  rm -rf gcc/include; \
  	  mv gcc/tmp-include gcc/include 2>/dev/null; \
  	else true; fi
  
  # --------------------------------------
  # Dependencies between different modules
  # --------------------------------------
  
  # There are two types of dependencies here: 'hard' dependencies, where one
  # module simply won't build without the other; and 'soft' dependencies, where
  # if the depended-on module is missing, the depending module will do without
  # or find a substitute somewhere (perhaps installed).  Soft dependencies
! # are specified by depending on a 'maybe-' target.  If you're not sure,
  # it's safer to use a soft dependency.
  
! # Host modules specific to gcc.
! # GCC needs to identify certain tools.
! # GCC also needs the information exported by the intl configure script.
! configure-gcc: maybe-configure-intl maybe-configure-binutils maybe-configure-gas maybe-configure-ld maybe-configure-bison maybe-configure-flex
! all-gcc: maybe-all-libiberty maybe-all-intl maybe-all-bison maybe-all-byacc maybe-all-binutils maybe-all-gas maybe-all-ld maybe-all-zlib
! # This is a slightly kludgy method of getting dependencies on 
! # all-build-libiberty correct; it would be better to build it every time.
! all-gcc: maybe-all-build-libiberty
! all-bootstrap: maybe-all-libiberty maybe-all-intl maybe-all-texinfo maybe-all-bison maybe-all-byacc maybe-all-binutils maybe-all-gas maybe-all-ld maybe-all-zlib
  
! # Host modules specific to gdb.
! # GDB needs to know that the simulator is being built.
! configure-gdb: maybe-configure-itcl maybe-configure-tcl maybe-configure-tk maybe-configure-sim
! GDB_TK = @GDB_TK@
! all-gdb: maybe-all-libiberty maybe-all-opcodes maybe-all-bfd maybe-all-mmalloc maybe-all-readline maybe-all-bison maybe-all-byacc maybe-all-sim $(gdbnlmrequirements) $(GDB_TK)
! install-gdb: maybe-install-tcl maybe-install-tk maybe-install-itcl maybe-install-tix maybe-install-libgui
! configure-libgui: maybe-configure-tcl maybe-configure-tk
! all-libgui: maybe-all-tcl maybe-all-tk maybe-all-itcl
  
! # Host modules specific to binutils.
! configure-bfd: configure-libiberty
! all-bfd: maybe-all-libiberty maybe-all-intl
! all-binutils: maybe-all-libiberty maybe-all-opcodes maybe-all-bfd maybe-all-flex maybe-all-bison maybe-all-byacc maybe-all-intl
! # We put install-opcodes before install-binutils because the installed
! # binutils might be on PATH, and they might need the shared opcodes
! # library.
! install-binutils: maybe-install-opcodes
! # libopcodes depends on libbfd
! install-opcodes: maybe-install-bfd
! all-gas: maybe-all-libiberty maybe-all-opcodes maybe-all-bfd maybe-all-intl
! all-gprof: maybe-all-libiberty maybe-all-bfd maybe-all-opcodes maybe-all-intl
! all-ld: maybe-all-libiberty maybe-all-bfd maybe-all-opcodes maybe-all-bison maybe-all-byacc maybe-all-flex maybe-all-intl
! all-opcodes: maybe-all-bfd maybe-all-libiberty
  
! # Other host modules in the 'src' repository.
! all-dejagnu: maybe-all-tcl maybe-all-expect maybe-all-tk
! configure-expect: maybe-configure-tcl maybe-configure-tk
! all-expect: maybe-all-tcl maybe-all-tk
! configure-itcl: maybe-configure-tcl maybe-configure-tk
! all-itcl: maybe-all-tcl maybe-all-tk
! # We put install-tcl before install-itcl because itcl wants to run a
! # program on installation which uses the Tcl libraries.
! install-itcl: maybe-install-tcl
! all-sid: maybe-all-libiberty maybe-all-bfd maybe-all-opcodes maybe-all-tcl maybe-all-tk
! install-sid: maybe-install-tcl maybe-install-tk
! all-sim: maybe-all-libiberty maybe-all-bfd maybe-all-opcodes maybe-all-readline maybe-configure-gdb
! configure-tk: maybe-configure-tcl
! all-tk: maybe-all-tcl
! configure-tix: maybe-configure-tcl maybe-configure-tk
! all-tix: maybe-all-tcl maybe-all-tk
! all-texinfo: maybe-all-libiberty
  
! # Other host modules.  Warning, these are not well tested.
! all-autoconf: maybe-all-m4 maybe-all-texinfo
! all-automake: maybe-all-m4 maybe-all-texinfo
! all-bison: maybe-all-texinfo
! all-diff: maybe-all-libiberty
! all-fastjar: maybe-all-zlib maybe-all-libiberty
! all-fileutils: maybe-all-libiberty
! all-flex: maybe-all-libiberty maybe-all-bison maybe-all-byacc
! all-gzip: maybe-all-libiberty
! all-hello: maybe-all-libiberty
! all-m4: maybe-all-libiberty maybe-all-texinfo
! all-make: maybe-all-libiberty maybe-all-intl
! all-patch: maybe-all-libiberty
! all-prms: maybe-all-libiberty
! all-recode: maybe-all-libiberty
! all-sed: maybe-all-libiberty
! all-send-pr: maybe-all-prms
! all-tar: maybe-all-libiberty
! all-uudecode: maybe-all-libiberty
  
! ALL_GCC = maybe-all-gcc
! ALL_GCC_C = $(ALL_GCC) maybe-all-target-newlib maybe-all-target-libgloss
! ALL_GCC_CXX = $(ALL_GCC_C) maybe-all-target-libstdc++-v3
  
! # Target modules specific to gcc.
! configure-target-boehm-gc: $(ALL_GCC_C) maybe-configure-target-qthreads
! configure-target-fastjar: maybe-configure-target-zlib
! all-target-fastjar: maybe-all-target-zlib maybe-all-target-libiberty
! configure-target-libf2c: $(ALL_GCC_C)
! all-target-libf2c: maybe-all-target-libiberty
! configure-target-libffi: $(ALL_GCC_C) 
! configure-target-libjava: $(ALL_GCC_C) maybe-configure-target-zlib maybe-configure-target-boehm-gc maybe-configure-target-qthreads maybe-configure-target-libffi
! all-target-libjava: maybe-all-fastjar maybe-all-target-zlib maybe-all-target-boehm-gc maybe-all-target-qthreads maybe-all-target-libffi
! configure-target-libobjc: $(ALL_GCC_C)
! all-target-libobjc: maybe-all-target-libiberty
! configure-target-libstdc++-v3: $(ALL_GCC_C)
! all-target-libstdc++-v3: maybe-all-target-libiberty
! configure-target-zlib: $(ALL_GCC_C)
  
! # Target modules in the 'src' repository.
! configure-target-examples: $(ALL_GCC_C)
! configure-target-libgloss: $(ALL_GCC)
! all-target-libgloss: maybe-configure-target-newlib
! configure-target-libiberty: $(ALL_GCC)
! configure-target-libtermcap: $(ALL_GCC_C)
! configure-target-newlib: $(ALL_GCC)
! configure-target-rda: $(ALL_GCC_C)
! configure-target-winsup: $(ALL_GCC_C)
! all-target-winsup: maybe-all-target-libiberty maybe-all-target-libtermcap
  
! # Other target modules.  Warning, these are not well tested.
! configure-target-gperf: $(ALL_GCC_CXX)
! all-target-gperf: maybe-all-target-libiberty maybe-all-target-libstdc++-v3
! configure-target-qthreads: $(ALL_GCC_C)
  
! # Dependencies of maybe-foo on foo.  These are used because, for example,
! # all-gcc only depends on all-gas if gas is present and being configured.
! @maybe_dependencies@
  
  # Serialization dependencies.  Host configures don't work well in parallel to
  # each other, due to contention over config.cache.  Target configures and 
--- 1289,1689 ----
  	  r=`${PWD_COMMAND}`; export r; \
  	  s=`cd $(srcdir); ${PWD_COMMAND}` ; export s; \
  	  $(SET_LIB_PATH) \
+ 	  $(HOST_EXPORTS) \
  	  (cd ./gcc && \
  	   $(MAKE) $(GCC_FLAGS_TO_PASS) install); \
  	  rm -rf gcc/include; \
  	  mv gcc/tmp-include gcc/include 2>/dev/null; \
  	else true; fi
+ @endif gcc
+ 
+ # ---------------------
+ # GCC bootstrap support
+ # ---------------------
+ 
+ # We track the current stage (the one in 'gcc') in the stage_current file.
+ # stage_last instead tracks the stage that was built last.  These targets
+ # are dummy when toplevel bootstrap is not active.
+ 
+ .PHONY: unstage
+ unstage:
+ @if gcc-bootstrap
+ 	@[ -f stage_current ] || $(MAKE) `cat stage_last`-start
+ @endif gcc-bootstrap
+ 
+ .PHONY: stage
+ stage:
+ @if gcc-bootstrap
+ 	@$(MAKE) `cat stage_current`-end
+ @endif gcc-bootstrap
+ 
+ # We name the build directories for the various stages "stage1-gcc",
+ # "stage2-gcc","stage3-gcc", etc.
+ 
+ # Since the 'compare' process will fail (on debugging information) if any
+ # directory names are different, we need to link the gcc directory for
+ # the previous stage to a constant name ('gcc-prev'), and to make the name of
+ # the build directories constant as well. For the latter, we use naked names
+ # like 'gcc', because the scripts in that directory assume it.  We use
+ # mv on platforms where symlinks to directories do not work or are not
+ # reliable.
+ 
+ # At the end of the bootstrap, a symlink to 'stage3-gcc' named 'gcc' must
+ # be kept, so that libraries can find it.  Ick!
+ 
+ # It would be best to preinstall gcc into a staging area (and in the
+ # future, gather there all prebootstrap packages).  This would allow
+ # assemblers and linkers can be bootstrapped as well as the compiler
+ # (both in a combined tree, or separately).  This however requires some
+ # change to the gcc driver, again in order to avoid comparison failures.
+ 
+ # Bugs: This is crippled when doing parallel make, the `make all-host'
+ # and `make all-target' phases can be parallelized.
+ 
+ 
+ # 'touch' doesn't work right on some platforms.
+ STAMP = echo timestamp > 
+ 
+ # Only build the C compiler for stage1, because that is the only one that
+ # we can guarantee will build with the native compiler, and also it is the
+ # only thing useful for building stage2. STAGE1_CFLAGS (via CFLAGS),
+ # MAKEINFO and MAKEINFOFLAGS are explicitly passed here to make them
+ # overrideable (for a bootstrap build stage1 also builds gcc.info).
+ 
+ STAGE1_CFLAGS=@stage1_cflags@
+ STAGE1_LANGUAGES=@stage1_languages@
+ 
+ # We only want to compare .o files, so set this!
+ objext = .o
+ 
+ # Flags to pass to stage2 and later makes.
+ POSTSTAGE1_FLAGS_TO_PASS = \
+ 	CC="$${CC}" CC_FOR_BUILD="$${CC_FOR_BUILD}" \
+ 	STAGE_PREFIX=$$r/stage[+prev+]-gcc/ \
+ 	CFLAGS="$(BOOT_CFLAGS)" \
+ 	ADAC="\$$(CC)"
+ 
+ # For stage 1:
+ # * We force-disable intermodule optimizations, even if
+ #   --enable-intermodule was passed, since the installed compiler probably
+ #   can't handle them.  Luckily, autoconf always respects
+ #   the last argument when conflicting --enable arguments are passed.
+ # * Likewise, we force-disable coverage flags, since the installed compiler
+ #   probably has never heard of them.
+ # * We build only C (and possibly Ada).
+ 
+ [+ FOR bootstrap-stage +]
+ .PHONY: stage[+id+]-start stage[+id+]-end
+ 
+ stage[+id+]-start::
+ 	@[ -f stage_current ] && $(MAKE) `cat stage_current`-end || : ; \
+ 	echo stage[+id+] > stage_current ; \
+ 	echo stage[+id+] > stage_last[+ FOR host_modules +][+ IF bootstrap +]
+ @if [+ module +]
+ 	@[ -d stage[+id+]-[+module+] ] || mkdir stage[+id+]-[+module+]; \
+ 	set stage[+id+]-[+module+] [+module+] ; @CREATE_LINK_TO_DIR@ [+ IF prev +] ; \
+ 	set stage[+prev+]-[+module+] prev-[+module+] ; @CREATE_LINK_TO_DIR@ [+ ENDIF prev +]
+ @endif [+ module +][+ ENDIF bootstrap +][+ ENDFOR host_modules +]
+ 
+ stage[+id+]-end::
+ 	@rm -f stage_current[+ FOR host_modules +][+ IF bootstrap +]
+ @if [+ module +]
+ 	@set [+module+] stage[+id+]-[+module+] ; @UNDO_LINK_TO_DIR@ [+ IF prev +] ; \
+ 	set prev-[+module+] stage[+prev+]-[+module+] ; @UNDO_LINK_TO_DIR@ [+ ENDIF prev +]
+ @endif [+ module +][+ ENDIF bootstrap +][+ ENDFOR host_modules +]
+ 
+ # Bubble a bugfix through all the stages up to stage [+id+].  They
+ # are remade, but not reconfigured.  The next stage (if any) will not
+ # be reconfigured as well.
+ .PHONY: stage[+id+]-bubble
+ stage[+id+]-bubble:: [+ IF prev +]stage[+prev+]-bubble[+ ENDIF +][+IF lean +]
+ 	@bootstrap_lean@-rm -rf stage[+lean+]-* ; $(STAMP) stage[+lean+]-lean[+ ENDIF lean +]
+ 	@if test -f stage[+id+]-lean [+
+ 	  IF prev +]|| test -f stage[+prev+]-lean [+ ENDIF prev +] ; then \
+ 	  echo Skipping rebuild of stage[+id+] ; \
+ 	else \
+ 	  $(MAKE) $(RECURSE_FLAGS_TO_PASS) NOTPARALLEL= all-stage[+id+]; \
+ 	fi
+ 
+ .PHONY: all-stage[+id+] clean-stage[+id+]
+ all-stage[+id+]: [+ FOR host_modules +][+ IF bootstrap +]\
+   maybe-all-stage[+id+]-[+module+][+
+ ENDIF bootstrap+] [+ ENDFOR host_modules +]
+ 
+ do-clean: clean-stage[+id+]
+ clean-stage[+id+]: [+ FOR host_modules +][+ IF bootstrap +]\
+   maybe-clean-stage[+id+]-[+module+][+
+ ENDIF bootstrap+] [+ ENDFOR host_modules +]
+ 
+ [+ FOR host_modules +][+ IF bootstrap +]
+ .PHONY: configure-stage[+id+]-[+module+] maybe-configure-stage[+id+]-[+module+]
+ .PHONY: all-stage[+id+]-[+module+] maybe-all-stage[+id+]-[+module+]
+ .PHONY: clean-stage[+id+]-[+module+] maybe-clean-stage[+id+]-[+module+]
+ 
+ maybe-configure-stage[+id+]-[+module+]:
+ maybe-all-stage[+id+]-[+module+]:
+ maybe-clean-stage[+id+]-[+module+]:
+ 
+ @if [+module+]-bootstrap
+ maybe-configure-stage[+id+]-[+module+]: configure-stage[+id+]-[+module+]
+ configure-stage[+id+]-[+module+]:
+ 	@$(MAKE) stage[+id+]-start
+ 	@[ -f [+module+]/Makefile ] && exit 0 || : ; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; [+ IF prev +] \
+ 	$(STAGE_HOST_EXPORTS) [+ ELSE prev +] \
+ 	$(HOST_EXPORTS) [+ ENDIF prev +] \
+ 	echo Configuring stage [+id+] in [+module+] ; \
+ 	cd [+module+] || exit 1; \
+ 	case $(srcdir) in \
+ 	  \.) \
+ 	    srcdiroption="--srcdir=."; \
+ 	    libsrcdir=".";; \
+ 	  /* | [A-Za-z]:[\\/]*) \
+ 	    srcdiroption="--srcdir=$(srcdir)/[+module+]"; \
+ 	    libsrcdir="$$s/[+module+]";; \
+ 	  *) \
+ 	    srcdiroption="--srcdir=../$(srcdir)/[+module+]"; \
+ 	    libsrcdir="$$s/[+module+]";; \
+ 	esac; \
+ 	$(SHELL) $${libsrcdir}/configure \
+ 	  $(HOST_CONFIGARGS) $${srcdiroption} \
+ 	  [+stage_configure_flags+] [+extra_configure_flags+]
+ 
+ maybe-all-stage[+id+]-[+module+]: all-stage[+id+]-[+module+]
+ all-stage[+id+]-[+module+]: configure-stage[+id+]-[+module+]
+ 	@$(MAKE) stage[+id+]-start
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; [+ IF prev +] \
+ 	$(STAGE_HOST_EXPORTS) [+ ELSE prev +] \
+ 	$(HOST_EXPORTS) [+ ENDIF prev +] \
+ 	cd [+module+] && \
+ 	$(MAKE) $(FLAGS_TO_PASS) [+ IF prev +] \
+ 		$(POSTSTAGE1_FLAGS_TO_PASS) [+ ENDIF prev +] \
+ 		[+stage_make_flags+] [+extra_make_flags+]
+ 
+ maybe-clean-stage[+id+]-[+module+]: clean-stage[+id+]-[+module+]
+ clean-stage[+id+]-[+module+]:
+ 	@[ -f [+module+]/Makefile ] || [ -f stage[+id+]-[+module+]/Makefile ] \
+ 	  || exit 0 ; \
+ 	[ -f [+module+]/Makefile ] || $(MAKE) stage[+id+]-start ; \
+ 	cd [+module+] && \
+ 	$(MAKE) $(FLAGS_TO_PASS) [+ IF prev +] \
+ 		$(POSTSTAGE1_FLAGS_TO_PASS) [+ ENDIF prev +] \
+ 		[+stage_make_flags+] [+extra_make_flags+] clean
+ @endif [+module+]-bootstrap
+ 
+ [+ ENDIF bootstrap +][+ ENDFOR host_modules +]
+ 
+ # FIXME: Will not need to be conditional when toplevel bootstrap is the
+ # only possibility, but now it conflicts with no-bootstrap rules
+ @if gcc-bootstrap
+ [+ IF compare-target +]
+ [+compare-target+]:
+ 	@if test -f stage[+prev+]-lean; then \
+ 	  echo Cannot compare object files as stage [+prev+] was deleted. ; \
+ 	  exit 0 ; \
+ 	fi; \
+ 	[ -f stage_current ] && $(MAKE) `cat stage_current`-end || : ; \
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	rm -f .bad_compare ; \
+ 	cd stage[+id+]-gcc; \
+ 	files=`find . -name "*$(objext)" -print` ; \
+ 	cd .. ; \
+ 	for file in $${files} ; do \
+ 	  f1=$$r/stage[+prev+]-gcc/$$file; f2=$$r/stage[+id+]-gcc/$$file; \
+ 	  @do_compare@ > /dev/null 2>&1; \
+ 	  test $$? -eq 1 && echo $$file differs >> .bad_compare || true; \
+ 	done ; \
+ 	if [ -f .bad_compare ]; then \
+ 	  echo "Bootstrap comparison failure!"; \
+ 	  cat .bad_compare; \
+ 	  exit 1; \
+ 	else \
+ 	  true; \
+ 	fi ; \
+ 	$(STAMP) [+compare-target+][+ IF prev +]
+ 	@bootstrap_lean@-rm -rf stage[+prev+]-* ; $(STAMP) stage[+prev+]-lean[+ ENDIF prev +]
+ [+ ENDIF compare-target +]
+ 
+ [+ IF bootstrap-target +]
+ .PHONY: [+bootstrap-target+]
+ [+bootstrap-target+]: stage[+id+]-bubble [+compare-target+] all
+ [+ ENDIF bootstrap-target +]
+ 
+ # Rules to wipe a stage and all the following ones, also used for cleanstrap
+ [+ IF prev +]distclean-stage[+prev+]:: distclean-stage[+id+] [+ ENDIF prev +]
+ .PHONY: distclean-stage[+id+]
+ distclean-stage[+id+]::
+ 	[ -f stage_current ] && $(MAKE) `cat stage_current`-end || :
+ 	rm -rf stage[+id+]-* [+
+ 	  IF compare-target +][+compare-target+] [+ ENDIF compare-target +]
+ 
+ [+ IF cleanstrap-target +]
+ .PHONY: [+cleanstrap-target+]
+ [+cleanstrap-target+]: distclean [+bootstrap-target+]
+ [+ ENDIF cleanstrap-target +]
+ @endif gcc-bootstrap
+ 
+ [+ ENDFOR bootstrap-stage +]
+ 
+ stagefeedback-start::
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	cd stageprofile-gcc && \
+ 	  { find . -type d | sort | sed 's,.*,$(SHELL) '"$$s"'/mkinstalldirs "../gcc/&",' | $(SHELL); } && \
+ 	  { find . -name '*.*da' | sed 's,.*,$(LN) -f "&" "../gcc/&",' | $(SHELL); }
+ 
+ # FIXME: Will not need to be conditional when toplevel bootstrap is the
+ # only possibility, but now it conflicts with no-bootstrap rules
+ @if gcc-bootstrap
+ profiledbootstrap:
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(SET_LIB_PATH) \
+ 	$(HOST_EXPORTS) \
+ 	echo "Bootstrapping the compiler"; \
+ 	$(MAKE) stageprofile-bubble distclean-stagefeedback
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}` ; export s; \
+ 	$(SET_LIB_PATH) \
+ 	echo "Building runtime libraries and training compiler"; \
+ 	$(MAKE) $(BASE_FLAGS_TO_PASS) $(RECURSE_FLAGS) all
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(SET_LIB_PATH) \
+ 	$(HOST_EXPORTS) \
+ 	echo "Building feedback based compiler"; \
+ 	$(MAKE) stagefeedback-bubble stagefeedback-end
+ @endif gcc-bootstrap
+ 
+ @if gcc-bootstrap
+ NOTPARALLEL = .NOTPARALLEL
+ $(NOTPARALLEL):
+ do-distclean: distclean-stage1
+ @endif gcc-bootstrap
  
  # --------------------------------------
  # Dependencies between different modules
  # --------------------------------------
  
+ # Generic dependencies for target modules on host stuff, especially gcc
+ [+ FOR target_modules +]
+ configure-target-[+module+]: maybe-all-gcc
+ [+ ENDFOR target_modules +]
+ 
+ [+ FOR lang_env_dependencies +]
+ configure-target-[+module+]: maybe-all-target-newlib maybe-all-target-libgloss
+ [+ IF cxx +]configure-target-[+module+]: maybe-all-target-libstdc++-v3
+ [+ ENDIF cxx +][+ ENDFOR lang_env_dependencies +]
+ 
  # There are two types of dependencies here: 'hard' dependencies, where one
  # module simply won't build without the other; and 'soft' dependencies, where
  # if the depended-on module is missing, the depending module will do without
  # or find a substitute somewhere (perhaps installed).  Soft dependencies
! # are made here to depend on a 'maybe-' target.  If you're not sure,
  # it's safer to use a soft dependency.
  
! [+ ;; These Scheme functions build the bulk of the dependencies.
!    ;; dep-target builds a string like "maybe-all-MODULE_KIND-gcc",
!    ;; where "maybe-" is only included if HARD is true, and all-gcc
!    ;; is taken from VAR-NAME.
!    (define dep-target (lambda (module-kind var-name hard)
!       (string-append
!          (if hard "" "maybe-")
!          (dep-subtarget var-name)
!          module-kind
!          (dep-module var-name)
!       )))
  
!    ;; make-dep builds a dependency from the MODULE and ON AutoGen vars.
!    (define make-dep (lambda (module-kind on-kind)
!       (string-append
!          (dep-target module-kind "module" #t) ": "
!          (dep-target on-kind "on" (exist? "hard")))))
  
!    ;; dep-subtarget extracts everything up to the first dash in the given
!    ;; AutoGen variable, for example it extracts "all-" out of "all-gcc".
!    (define dep-subtarget (lambda (var-name)
!       (substring (get var-name) 0 (+ 1 (string-index (get var-name) #\-)))))
  
!    ;; dep-module extracts everything up to the first dash in the given
!    ;; AutoGen variable, for example it extracts "gcc" out of "all-gcc".
!    (define dep-module (lambda (var-name)
!       (substring (get var-name) (+ 1 (string-index (get var-name) #\-)))))
  
!    ;; dep-stage builds a string for the prefix of a bootstrap stage.
!    (define dep-stage (lambda ()
!       (string-append
! 	 "stage"
! 	 (get "id")
! 	 "-")))
  
!    ;; dep-maybe is the same as the AutoGen expression "- hard 'maybe-'"
!    ;; but is written in Scheme.
!    (define dep-maybe (lambda ()
!       (if (exist? "hard") "" "maybe-")))
  
!    ;; dep-kind returns "normal" if the dependency is on an "install" target,
!    ;; or if either module is not bootstrapped.  It returns "bootstrap" for
!    ;; configure or build dependencies between bootstrapped modules; it returns
!    ;; "prebootstrap" for configure or build dependencies of bootstrapped
!    ;; modules on a build module (e.g. all-gcc on all-build-bison).  All this
!    ;; is only necessary for host modules.
!    (define dep-kind (lambda ()
!       (if (and (hash-ref boot-modules (dep-module "module"))
! 	       (=* (dep-module "on") "build-"))
! 	  "prebootstrap"
  
! 	  (if (or (= (dep-subtarget "on") "install-")
! 		  (=* (dep-module "on") "target-")
! 		  (not (hash-ref boot-modules (dep-module "module")))
! 		  (not (hash-ref boot-modules (dep-module "on"))))
!               "normal"
! 	      "bootstrap"))))
  
!    ;; We now build the hash table that is used by dep-kind.
!    (define boot-modules (make-hash-table 113))
! +]
  
! [+ FOR host_modules +][+
!    (if (exist? "bootstrap")
!        (hash-create-handle! boot-modules (get "module") #t))
!    "" +][+ ENDFOR host_modules +]
! 
! # With all the machinery above in place, it is pretty easy to generate
! # dependencies.  Host dependencies are a bit more complex because we have
! # to check for bootstrap/prebootstrap dependencies.  To resolve
! # prebootstrap dependencies, prebootstrap modules are gathered in
! # a hash table.
! [+ FOR dependencies +][+ (make-dep "" "") +]
! [+ CASE (dep-kind) +]
! [+ == "prebootstrap"
!      +][+ FOR bootstrap_stage +]
! [+ (make-dep (dep-stage) "") +][+
!        ENDFOR bootstrap_stage +]
! all-prebootstrap: [+ (dep-target "" "on" (exist? "hard")) +]
! [+ == "bootstrap"
!      +][+ FOR bootstrap_stage +]
! [+ (make-dep (dep-stage) (dep-stage)) +][+
!        ENDFOR bootstrap_stage +]
! [+ ESAC +][+
! ENDFOR dependencies +]
! 
! # Non-toplevel bootstrap rules must depend on several packages, to be built
! # before gcc.  Another wart that will go away, hopefully soon.
! @if gcc-no-bootstrap
! [+ FOR host_modules +][+
!    IF (and (not (= (get "module") "gcc"))
! 	   (hash-ref boot-modules (get "module"))) +]
! all-prebootstrap: maybe-all-[+module+][+
!    ENDIF +][+
! ENDFOR host_modules +]
! @endif gcc-no-bootstrap
! 
! GDB_TK = @GDB_TK@
! all-gdb: $(gdbnlmrequirements) $(GDB_TK)
  
  # Serialization dependencies.  Host configures don't work well in parallel to
  # each other, due to contention over config.cache.  Target configures and 
diff -Nrcpad gcc-3.4.3/NEWS gcc-4.0.0/NEWS
*** gcc-3.4.3/NEWS	Fri Nov  5 04:14:19 2004
--- gcc-4.0.0/NEWS	Thu Apr 21 07:04:23 2005
*************** that led to GCC 3. For information on GC
*** 5,10 ****
--- 5,572 ----
  see ONEWS.
  
  ======================================================================
+ http://gcc.gnu.org/gcc-4.0/index.html
+ 
+                            GCC 4.0 Release Series
+ 
+    April 20, 2005
+ 
+    The  [1]GNU project and the GCC developers are pleased to announce the
+    release of GCC 4.0.0.
+ 
+ Release History
+ 
+    GCC 4.0.0
+           April 20, 2005 ([2]changes)
+ 
+ References and Acknowledgements
+ 
+    GCC  used  to  stand  for  the  GNU C Compiler, but since the compiler
+    supports  several  other languages aside from C, it now stands for the
+    GNU Compiler Collection.
+ 
+    A  list  of [3]successful builds is updated as new information becomes
+    available.
+ 
+    The  GCC  developers would like to thank the numerous people that have
+    contributed  new  features, improvements, bug fixes, and other changes
+    as well as test results to GCC. This [4]amazing group of volunteers is
+    what makes GCC successful.
+ 
+    For  additional  information  about  GCC  please  refer  to the [5]GCC
+    project web site or contact the [6]GCC development mailing list.
+ 
+    To obtain GCC please use [7]our mirror sites, one of the [8]GNU mirror
+    sites, or [9]our CVS server.
+      _________________________________________________________________
+ 
+    Please  send FSF & GNU inquiries & questions to [10]gnu@gnu.org. There
+    are also [11]other ways to contact the FSF.
+ 
+    These pages are maintained by [12]the GCC team.
+ 
+ 
+     For  questions  related  to the use of GCC, please consult these web
+     pages    and    the    [13]GCC   manuals.   If   that   fails,   the
+     [14]gcc-help@gcc.gnu.org mailing list might help.
+     Please  send  comments on these web pages and the development of GCC
+     to    our    developer    mailing   list   at   [15]gcc@gnu.org   or
+     [16]gcc@gcc.gnu.org. All of our lists have [17]public archives.
+ 
+    Copyright  (C) Free Software Foundation, Inc., 59 Temple Place - Suite
+    330, Boston, MA 02111, USA.
+ 
+    Verbatim  copying and distribution of this entire article is permitted
+    in any medium, provided this notice is preserved.
+ 
+    Last modified 2005-04-21 [18]Valid XHTML 1.0 
+ 
+ References
+ 
+    1. http://www.gnu.org/
+    2. http://gcc.gnu.org/gcc-4.0/changes.html
+    3. http://gcc.gnu.org/gcc-4.0/buildstat.html
+    4. http://gcc.gnu.org/onlinedocs/gcc/Contributors.html
+    5. http://gcc.gnu.org/index.html
+    6. mailto:gcc@gcc.gnu.org
+    7. http://gcc.gnu.org/mirrors.html
+    8. http://www.gnu.org/order/ftp.html
+    9. http://gcc.gnu.org/cvs.html
+   10. mailto:gnu@gnu.org
+   11. http://www.gnu.org/home.html#ContactInfo
+   12. http://gcc.gnu.org/about.html
+   13. http://gcc.gnu.org/onlinedocs/
+   14. mailto:gcc-help@gcc.gnu.org
+   15. mailto:gcc@gnu.org
+   16. mailto:gcc@gcc.gnu.org
+   17. http://gcc.gnu.org/lists.html
+   18. http://validator.w3.org/check/referer
+ ======================================================================
+ http://gcc.gnu.org/gcc-4.0/changes.html
+ 
+                            GCC 4.0 Release Series
+                       Changes, New Features, and Fixes
+ 
+ Caveats
+ 
+      * GCC  now  generates  location lists by default when compiling with
+        debug info and optimization.
+           + GDB  6.0  and  older crashes when it sees location lists. GDB
+             6.1  or later is needed to debug binaries containing location
+             lists.
+           + When  you  are trying to view a value of a variable in a part
+             of  a function where it has no location (for example when the
+             variable is no longer used and thus its location was used for
+             something else) GDB will say that it is not available.
+        You can disable generating location lists by -fno-var-tracking.
+      * GCC  no  longer  accepts  the -fwritable-strings option. Use named
+        character arrays when you need a writable string.
+      * The  options  -freduce-all-givs  and -fmove-all-movables have been
+        discontinued.  They  were  used to circumvent a shortcoming in the
+        heuristics  of  the  old  loop  optimization  code with respect to
+        common  Fortran  constructs.  The  new (tree) loop optimizer works
+        differently and doesn't need those work-arounds.
+      * The  graph-coloring  register  allocator,  formerly enabled by the
+        option -fnew-ra, has been discontinued.
+      * -I-  has been deprecated. -iquote is meant to replace the need for
+        this option.
+      * The MIPS -membedded-pic and -mrnames options have been removed.
+      * All  MIPS  targets  now  require the GNU assembler. In particular,
+        IRIX  configurations  can  no  longer  use the MIPSpro assemblers,
+        although they do still support the MIPSpro linkers.
+      * The SPARC option -mflat has been removed.
+      * English-language   diagnostic   messages   will  now  use  Unicode
+        quotation  marks  in  UTF-8 locales. (Non-English messages already
+        used   the   quotes  appropriate  for  the  language  in  previous
+        releases.)  If  your  terminal  does not support UTF-8 but you are
+        using  a  UTF-8  locale  (such  locales  are  the  default on many
+        GNU/Linux   systems)   then  you  should  set  LC_CTYPE=C  in  the
+        environment   to   disable   that   locale.  Programs  that  parse
+        diagnostics  and  expect  plain  ASCII  English-language  messages
+        should  set  LC_ALL=C. See [1]Markus Kuhn's explanation of Unicode
+        quotation marks for more information.
+      * The  specs  file  is  no  longer installed on most platforms. Most
+        users  will  be totally unaffected. However, if you are accustomed
+        to  editing  the specs file yourself, you will now have to use the
+        -dumpspecs  option  to  generate the specs file, and then edit the
+        resulting file.
+ 
+ General Optimizer Improvements
+ 
+      * The  [2]tree ssa branch has been merged. This merge has brought in
+        a  completely  new  optimization framework based on a higher level
+        intermediate  representation than the existing RTL representation.
+        Numerous  new  code transformations based on the new framework are
+        available in GCC 4.0, including:
+           + Scalar replacement of aggregates
+           + Constant propagation
+           + Value range propagation
+           + Partial redundancy elimination
+           + Load and store motion
+           + Strength reduction
+           + Dead store elimination
+           + Dead and unreachable code elimination
+           + [3]Autovectorization
+           + Loop interchange
+           + Tail recursion by accumulation
+        Many  of  these passes outperform their counterparts from previous
+        GCC releases.
+      * [4]Swing   Modulo  Scheduling  (SMS).  An  RTL  level  instruction
+        scheduling  optimization  intended  for  loops  that perform heavy
+        computations.
+ 
+ New Languages and Language specific improvements
+ 
+   C family
+ 
+      * The  sentinel  attribute  has  been  added  to  GCC. This function
+        attribute allows GCC to warn when variadic functions such as execl
+        are  not  NULL  terminated.  See  the  GCC  manual  for a complete
+        description of its behavior.
+      * Given  __attribute__((alias("target")))  it  is  now  an  error if
+        target is not a symbol, defined in the same translation unit. This
+        also applies to aliases created by #pragma weak alias=target. This
+        is  because  it's  meaningless  to define an alias to an undefined
+        symbol.  On  Solaris,  the native assembler would have caught this
+        error, but GNU as does not.
+ 
+   C and Objective-C
+ 
+      * The  -Wstrict-aliasing=2  option  has  been  added.  This  warning
+        catches  all unsafe cases, but it may also give a warning for some
+        cases that are safe.
+      * The     cast-as-lvalue,    conditional-expression-as-lvalue    and
+        compound-expression-as-lvalue extensions, which were deprecated in
+        3.3.4 and 3.4, have been removed.
+      * The  -fwritable-strings  option,  which was deprecated in 3.4, has
+        been removed.
+      * #pragma pack() semantics have been brought closer to those used by
+        other compilers. This also applies to C++.
+      * Taking  the address of a variable with register storage is invalid
+        in C. GCC now issues an error instead of a warning.
+      * Arrays of incomplete element type are invalid in C. GCC now issues
+        an  error  for  such  arrays. Declarations such as extern struct s
+        x[];  (where struct s has not been defined) can be moved after the
+        definition  of struct s. Function parameters declared as arrays of
+        incomplete type can instead be declared as pointers.
+ 
+   C++
+ 
+      * When  compiling  without  optimizations (-O0), the C++ frontend is
+        much  faster  than  in  any  previous versions of GCC. Independent
+        testers have measured speed-ups up to 25% in real-world production
+        code,  compared  to  the 3.4 family (which was already the fastest
+        version  to  date).  Upgrading from older versions might show even
+        bigger improvements.
+      * ELF  visibility  attributes can now be applied to a class type, so
+        that  it affects every member function of a class at once, without
+        having to specify each individually:
+ class __attribute__ ((visibility("hidden"))) Foo
+ {
+    int foo1();
+    void foo2();
+ };
+        The syntax is deliberately similar to the __declspec() system used
+        by  Microsoft  Windows  based  compilers,  allowing cross-platform
+        projects  to easily reuse their existing macro system for denoting
+        exports  and imports. By explicitly marking internal classes never
+        used  outside  a  binary  as  hidden, one can completely avoid PLT
+        indirection  overheads during their usage by the compiler. You can
+        find    out    more    about    the    advantages   of   this   at
+        [5]http://people.redhat.com/drepper/dsohowto.pdf
+      * The  -fvisibility-inlines-hidden option has been added which marks
+        all  inlineable  functions  as  having hidden ELF visibility, thus
+        removing  their symbol and typeinfo from the exported symbol table
+        of  the  output  ELF  binary.  Using  this  option  can reduce the
+        exported  symbol count of template-heavy code by up to 40% with no
+        code change at all, thus notably improving link and load times for
+        the  binary  as  well  as  a reduction in size of up to 10%. Also,
+        check the new [6]-fvisibility option.
+      * The  compiler  now  uses  the  library  interface specified by the
+        [7]C++ ABI for thread-safe initialization of function-scope static
+        variables.  Most  users  should  leave  this  alone,  but embedded
+        programmers    may    want   to   disable   this   by   specifying
+        -fno-threadsafe-statics for a small savings in code size.
+      * Taking  the  address of an explicit register variable is no longer
+        supported.  Note  that  C++ allows taking the address of variables
+        with  register  storage  so  this  will continue to compile with a
+        warning. For example, assuming that r0 is a machine register:
+ register int foo asm ("r0");
+ register int bar;
+ &foo; // error, no longer accepted
+ &bar; // OK, with a warning
+      * G++  has  an undocumented extension to virtual function covariancy
+        rules  that  allowed  the  overrider  to  return  a  type that was
+        implicitly  convertable  to the overridden function's return type.
+        For  instance a function returning void * could be overridden by a
+        function returning T *. This is now deprecated and will be removed
+        in a future release.
+      * The  G++  minimum  and  maximum  operators  (<?  and >?) and their
+        compound  forms  (<?=)  and  >?=) have been deprecated and will be
+        removed  in a future version. Code using these operators should be
+        modified to use std::min and std::max instead.
+      * Declaration  of  nested  classes of class templates as friends are
+        supported:
+ template <typename T> struct A {
+   class B {};
+ };
+ class C {
+   template <typename T> friend class A<T>::B;
+ };
+        This  complements  the feature member functions of class templates
+        as friends introduced in GCC 3.4.0.
+      * When  declaring  a friend class using an unqualified name, classes
+        outside the innermost non-class scope are not searched:
+ class A;
+ namespace N {
+   class B {
+     friend class A;   // Refer to N::A which has not been declared yet
+                       // because name outside namespace N are not searched
+     friend class ::A; // Refer to ::A
+   };
+ }
+        Hiding the friend name until declaration is still not implemented.
+      * Friends  of  classes defined outside their namespace are correctly
+        handled:
+ namespace N {
+   class A;
+ }
+ class N::A {
+   friend class B; // Refer to N::B in GCC 4.0.0
+                   // but ::B in earlier versions of GCC
+ };
+ 
+     Runtime Library (libstdc++)
+ 
+      * Optimization work:
+           + Added efficient specializations of istream functions for char
+             and wchar_t.
+           + Further  performance  tuning  of  strings,  in particular wrt
+             single-char append and getline.
+           + iter_swap  -  and therefore most of the mutating algorithms -
+             now  makes an unqualified call to swap when the value_type of
+             the two iterators is the same.
+      * A  large  subset  of  the  features in Technical Report 1 (TR1 for
+        short)  is experimentally delivered (i.e., no guarantees about the
+        implementation are provided. In particular it is not promised that
+        the  library  will  remain  link compatible when code using TR1 is
+        used):
+           + General utilities such as reference_wrapper and shared_ptr.
+           + Function objects, i.e., result_of, mem_fn, bind, function.
+           + Support for metaprogramming.
+           + New   containers   such   as   tuple,  array,  unordered_set,
+             unordered_map, unordered_multiset, unordered_multimap.
+      * As   usual,   many  bugs  have  been  fixed  and  LWG  resolutions
+        implemented for the first time (e.g., DR 409).
+ 
+   Java
+ 
+      * In order to prevent naming conflicts with other implementations of
+        these tools, some GCJ binaries have been renamed:
+           + rmic is now grmic,
+           + rmiregistry is now grmiregistry, and
+           + jar is now fastjar.
+        In  particular,  these names were problematic for the jpackage.org
+        packaging  conventions  which  install  symlinks  in /usr/bin that
+        point to the preferred versions of these tools.
+      * The  -findirect-dispatch  argument  to  the compiler now works and
+        generates  code  following  a new "binary compatibility" ABI. Code
+        compiled  this  way  follows the binary compatibility rules of the
+        Java Language Specification.
+      * libgcj  now  has  support  for  using  GCJ  as  a  JIT,  using the
+        gnu.gcj.jit family of system properties.
+      * libgcj can now find a shared library corresponding to the bytecode
+        representation  of  a  class.  See  the  documentation for the new
+        gcj-dbtool program, and the new gnu.gcj.precompiled.db.path system
+        property.
+      * There  have  been many improvements to the class library. Here are
+        some highlights:
+           + Much more of AWT and Swing exist.
+           + Many   new   packages   and  classes  were  added,  including
+             java.util.regex,          java.net.URI,         javax.crypto,
+             javax.crypto.interfaces,     javax.crypto.spec,    javax.net,
+             javax.net.ssl, javax.security.auth,
+             javax.security.auth.callback,      javax.security.auth.login,
+             javax.security.auth.x500, javax.security.sasl, org.ietf.jgss,
+             javax.imageio,     javax.imageio.event,    javax.imageio.spi,
+             javax.print, javax.print.attribute,
+             javax.print.attribute.standard,     javax.print.event,    and
+             javax.xml
+           + Updated SAX and DOM, and imported GNU JAXP
+ 
+   Fortran
+ 
+      * A  new  [8]Fortran front end has replaced the aging GNU Fortran 77
+        front  end.  The new front end supports Fortran 90 and Fortran 95.
+        It may not yet be as stable as the old Fortran front end.
+ 
+   Ada
+ 
+      * Ada  (with  tasking  and Zero Cost Exceptions) is now available on
+        many  more  targets,  including  but  not limited to: alpha-linux,
+        hppa-hpux,  hppa-linux, powerpc-darwin, powerpc-linux, s390-linux,
+        s390x-linux, sparc-linux.
+      * Some  of  the  new  Ada  2005  features  are  now implemented like
+        Wide_Wide_Character and Ada.Containers.
+      * Many bugs have been fixed, tools and documentation improved.
+      * To  compile  Ada  from  the  sources, install an older working Ada
+        compiler  and  then  use  --enable-languages=ada  at configuration
+        time,  since  the  Ada  frontend  is  not  currently  activated by
+        default. See the [9]Installing GCC for details.
+ 
+ New Targets and Target Specific Improvements
+ 
+   H8/300
+ 
+      * The frame layout has changed. In the new layout, the prologue of a
+        function first saves registers and then allocate space for locals,
+        resulting in an 1% improvement on code size.
+ 
+   IA-32/x86-64 (AMD64)
+ 
+      * The  acos,  asin,  drem,  exp10,  exp2, expm1, fmod, ilogb, log10,
+        log1p,  log2,  logb and tan mathematical builtins (and their float
+        and  long  double  variants)  are  now  implemented  as inline x87
+        intrinsics when using -ffast-math.
+      * The  ceil,  floor, nearbyint, rint and trunc mathematical builtins
+        (and  their float and long double variants) are now implemented as
+        inline x87 intrinsics when using -ffast-math.
+      * The  x87's  fsincos  instruction  is  now  used automatically with
+        -ffast-math  when  calculating  both  the  sin and cos of the same
+        argument.
+      * Instruction selection for multiplication and division by constants
+        has been improved.
+ 
+   IA-64
+ 
+      * Floating  point  division,  integer  division  and  sqrt  are  now
+        inlined, resulting in significant performance improvements on some
+        codes.
+ 
+   MIPS
+ 
+      * Division  by  zero  checks now use conditional traps if the target
+        processor  supports them. This decreases code size by one word per
+        division  operation.  The  old  behavior (branch and break) can be
+        obtained  either at configure time by passing --with-divide=breaks
+        to configure or at runtime by passing -mdivide-breaks to GCC.
+      * Support  for  MIPS64 paired-single instructions has been added. It
+        is  enabled  by -mpaired-single and can be accessed using both the
+        target-independent   vector   extensions   and  new  MIPS-specific
+        built-in functions.
+      * Support  for  the  MIPS-3D  ASE  has  been added. It is enabled by
+        -mips3d and provides new MIPS-3D-specific built-in functions.
+      * The  -mexplicit-relocs  option now supports static n64 code (as is
+        used,  for  example,  in  64-bit linux kernels). -mexplicit-relocs
+        should  now be feature-complete and is enabled by default when GCC
+        is configured to use a compatible assembler.
+      * Support  for  the  NEC  VR4130 series has been added. This support
+        includes  the  use  of  VR-specific  instructions and a new VR4130
+        scheduler.  Full VR4130 support can be selected with -march=vr4130
+        while  code  for  any  ISA  can  be  tuned  for  the  VR4130 using
+        -mtune=vr4130.  There  is  also  a  new -mvr4130-align option that
+        produces better schedules at the cost of increased code size.
+      * Support  for  the Broadcom SB-1 has been extended. There is now an
+        SB-1   scheduler   as   well  as  support  for  the  SB-1-specific
+        paired-single instructions. Full SB-1 support can be selected with
+        -march=sb1  while  code  for any ISA can be optimized for the SB-1
+        using -mtune=sb1.
+      * The  compiler  can  now work around errata in R4000, R4400, VR4120
+        and   VR4130   processors.   These   workarounds  are  enabled  by
+        -mfix-r4000,    -mfix-r4400,    -mfix-vr4120    and   -mfix-vr4130
+        respectively. The VR4120 and VR4130 workarounds need binutils 2.16
+        or above.
+      * IRIX  shared libraries are now installed into the standard library
+        directories:  o32  libraries  go  into lib/, n32 libraries go into
+        lib32/ and n64 libraries go into lib64/.
+      * The  compiler  supports  a  new  -msym32 option. It can be used to
+        optimize  n64  code  in which all symbols are known to have 32-bit
+        values.
+ 
+   S/390 and zSeries
+ 
+      * New  command line options help to generate code intended to run in
+        an  environment where stack space is restricted, e.g. Linux kernel
+        code:
+           + -mwarn-framesize and -mwarn-dynamicstack trigger compile-time
+             warnings  for  single functions that require large or dynamic
+             stack frames.
+           + -mstack-size  and -mstack-guard generate code that checks for
+             stack overflow at run time.
+           + -mpacked-stack  generates  code  that reduces the stack frame
+             size of many functions by reusing unneeded parts of the stack
+             bias area.
+      * The  -msoft-float  option  now  ensures  that generated code never
+        accesses floating point registers.
+      * The   s390x-ibm-tpf  target  now  fully  supports  C++,  including
+        exceptions and threads.
+      * Various  changes to improve performance of the generated code have
+        been implemented, including:
+           + GCC now uses sibling calls where possible.
+           + Condition  code  handling has been optimized, allowing GCC to
+             omit redundant comparisons in certain cases.
+           + The cost function guiding many optimizations has been refined
+             to more accurately represent the z900 and z990 processors.
+           + The  ADD  LOGICAL WITH CARRY and SUBTRACT LOGICAL WITH BORROW
+             instructions  are  now  used to avoid conditional branches in
+             certain cases.
+           + The  back  end now uses the LEGITIMIZE_RELOAD_ADDRESS feature
+             to optimize address arithmetic required to access large stack
+             frames.
+           + GCC  now  makes  more  efficient use of memory-to-memory type
+             instructions (MVC, CLC, ...).
+           + More  precise  tracking of special register use allows better
+             instruction   scheduling,   in  particular  of  the  function
+             prologue and epilogue sequences.
+           + The  Java  front  end  now generates inline code to implement
+             integer division, instead of calling library routines.
+ 
+   SPARC
+ 
+      * The options -mv8, -msparclite, -mcypress, -msupersparc, -mf930 and
+        -mf934 have been removed. They have been replaced with -mcpu=xxx.
+      * The  internal  model  used  to  estimate the relative cost of each
+        instruction  has  been  updated.  It  is  expected  to give better
+        results on recent UltraSPARC processors.
+      * Code  generation  for  function  prologues  and epilogues has been
+        improved,  resulting  in  better  scheduling and allowing multiple
+        exit points in functions.
+      * Support  for Sun's Visual Instruction Set (VIS) has been enhanced.
+        It is enabled by -mvis and provides new built-in functions for VIS
+        instructions on UltraSPARC processors.
+ 
+   NetWare
+ 
+      * Novell  NetWare  (on  ix86,  no  other  hardware platform was ever
+        really  supported  by  this  OS)  has  been re-enabled and the ABI
+        supported  by  GCC  has  been  brought  into  sync  with  that  of
+        MetroWerks  CodeWarrior  (the ABI previously supported was that of
+        some Unix systems, which NetWare never tried to support).
+ 
+ Obsolete Systems
+ 
+    Support  for  a  number of older systems has been declared obsolete in
+    GCC  4.0. Unless there is activity to revive them, the next release of
+    GCC will have their sources permanently removed.
+ 
+    These individual systems have been obsoleted:
+      * SPARC family
+           + SPARClite-based  systems  (sparclite-*-coff, sparclite-*-elf,
+             sparc86x-*-elf)
+           + OpenBSD 32-bit (sparc-*-openbsd*)
+ 
+ Documentation improvements
+ 
+ Other significant improvements
+ 
+      * Location  lists  are  now generated by default when compiling with
+        debug  info and optimization. Location lists provide more accurate
+        debug  info  about locations of variables and they allow debugging
+        code compiled with -fomit-frame-pointer.
+      * The  -fvisibility  option  has been added which allows the default
+        ELF  visibility  of  all symbols to be set per compilation and the
+        new #pragma GCC visibility preprocessor command allows the setting
+        of   default   ELF   visibility   for  a  region  of  code.  Using
+        -fvisibility=hidden   especially   in  combination  with  the  new
+        -fvisibility-inlines-hidden  can yield substantial improvements in
+        output   binary   quality   including   avoiding  PLT  indirection
+        overheads,  reduction  of  the  exported symbol count by up to 60%
+        (with resultant improvements to link and load times), better scope
+        for  the  optimizer  to  improve code and up to a 20% reduction in
+        binary  size. Using these options correctly yields a binary with a
+        similar symbol count to a Windows DLL.
+        Perhaps  more  importantly,  this new feature finally allows (with
+        careful  planning)  complete  avoidance  of  symbol  clashes  when
+        manually  loading  shared  objects  with RTLD_GLOBAL, thus finally
+        solving  problems  many projects such as python were forced to use
+        RTLD_LOCAL  for  (with  its resulting issues for C++ correctness).
+        You  can  find  more  information  about  using  these  options at
+        [10]http://gcc.gnu.org/wiki/Visibility.
+      _________________________________________________________________
+ 
+    Please  send FSF & GNU inquiries & questions to [11]gnu@gnu.org. There
+    are also [12]other ways to contact the FSF.
+ 
+    These pages are maintained by [13]the GCC team.
+ 
+ 
+     For  questions  related  to the use of GCC, please consult these web
+     pages    and    the    [14]GCC   manuals.   If   that   fails,   the
+     [15]gcc-help@gcc.gnu.org mailing list might help.
+     Please  send  comments on these web pages and the development of GCC
+     to    our    developer    mailing   list   at   [16]gcc@gnu.org   or
+     [17]gcc@gcc.gnu.org. All of our lists have [18]public archives.
+ 
+    Copyright  (C) Free Software Foundation, Inc., 59 Temple Place - Suite
+    330, Boston, MA 02111, USA.
+ 
+    Verbatim  copying and distribution of this entire article is permitted
+    in any medium, provided this notice is preserved.
+ 
+    Last modified 2005-04-16 [19]Valid XHTML 1.0 
+ 
+ References
+ 
+    1. http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
+    2. http://gcc.gnu.org/projects/tree-ssa/
+    3. http://gcc.gnu.org/projects/tree-ssa/vectorization.html
+    4. http://gcc.gnu.org/news/sms.html
+    5. http://people.redhat.com/drepper/dsohowto.pdf
+    6. http://gcc.gnu.org/gcc-4.0/changes.html#visibility
+    7. http://www.codesourcery.com/cxx-abi/
+    8. http://gcc.gnu.org/fortran/
+    9. http://gcc.gnu.org/install/
+   10. http://gcc.gnu.org/wiki/Visibility
+   11. mailto:gnu@gnu.org
+   12. http://www.gnu.org/home.html#ContactInfo
+   13. http://gcc.gnu.org/about.html
+   14. http://gcc.gnu.org/onlinedocs/
+   15. mailto:gcc-help@gcc.gnu.org
+   16. mailto:gcc@gnu.org
+   17. mailto:gcc@gcc.gnu.org
+   18. http://gcc.gnu.org/lists.html
+   19. http://validator.w3.org/check/referer
+ ======================================================================
  http://gcc.gnu.org/gcc-3.4/index.html
  
                             GCC 3.4 Release Series
*************** References and Acknowledgements
*** 96,102 ****
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-11-05 [26]Valid XHTML 1.0 
  
  References
  
--- 658,664 ----
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-11-14 [26]Valid XHTML 1.0 
  
  References
  
*************** http://gcc.gnu.org/gcc-3.4/changes.html
*** 132,138 ****
                             GCC 3.4 Release Series
                        Changes, New Features, and Fixes
  
!    GCC 3.4 has [1]many improvements in the C++ frontend. Before reporting
     a  bug,  please  make sure it's really GCC, and not your code, that is
     broken.
  
--- 694,702 ----
                             GCC 3.4 Release Series
                        Changes, New Features, and Fixes
  
!    The latest release in the 3.4 release series is [1]GCC 3.4.3.
! 
!    GCC 3.4 has [2]many improvements in the C++ frontend. Before reporting
     a  bug,  please  make sure it's really GCC, and not your code, that is
     broken.
  
*************** Caveats
*** 147,163 ****
         and  -fvolatile-static.  It is unlikely that they worked correctly
         in any 3.x release.
       * GCC no longer ships <varargs.h>. Use <stdarg.h> instead.
!      * Support  for  all  the  systems  [2]obsoleted  in GCC 3.3 has been
!        removed from GCC 3.4. See below for a [3]list of systems which are
         obsoleted in this release.
       * GCC  now requires an ISO C90 (ANSI C89) C compiler to build. K&R C
         compilers will not work.
!      * The  implementation  of the [4]MIPS ABIs has changed. As a result,
         the  code  generated  for  certain MIPS targets will not be binary
         compatible with earlier releases.
       * In  previous  releases,  the  MIPS port had a fake "hilo" register
         with the user-visible name accum. This register has been removed.
!      * The  implementation of the [5]SPARC ABIs has changed. As a result,
         the  code  generated  will  not  be binary compatible with earlier
         releases in certain cases.
       * The  configure  option --enable-threads=pthreads has been removed;
--- 711,727 ----
         and  -fvolatile-static.  It is unlikely that they worked correctly
         in any 3.x release.
       * GCC no longer ships <varargs.h>. Use <stdarg.h> instead.
!      * Support  for  all  the  systems  [3]obsoleted  in GCC 3.3 has been
!        removed from GCC 3.4. See below for a [4]list of systems which are
         obsoleted in this release.
       * GCC  now requires an ISO C90 (ANSI C89) C compiler to build. K&R C
         compilers will not work.
!      * The  implementation  of the [5]MIPS ABIs has changed. As a result,
         the  code  generated  for  certain MIPS targets will not be binary
         compatible with earlier releases.
       * In  previous  releases,  the  MIPS port had a fake "hilo" register
         with the user-visible name accum. This register has been removed.
!      * The  implementation of the [6]SPARC ABIs has changed. As a result,
         the  code  generated  will  not  be binary compatible with earlier
         releases in certain cases.
       * The  configure  option --enable-threads=pthreads has been removed;
*************** Caveats
*** 208,215 ****
         relies  on  that  macro  to  detect whether multi-threaded code is
         being  compiled  might  change  in  meaning, possibly resulting in
         linker  errors  for  single-threaded  programs.  Affected users of
!        [6]Boost     should     compile    single-threaded    code    with
!        -DBOOST_DISABLE_THREADS. See Bugzilla for [7]more information.
  
  General Optimizer Improvements
  
--- 772,779 ----
         relies  on  that  macro  to  detect whether multi-threaded code is
         being  compiled  might  change  in  meaning, possibly resulting in
         linker  errors  for  single-threaded  programs.  Affected users of
!        [7]Boost     should     compile    single-threaded    code    with
!        -DBOOST_DISABLE_THREADS. See Bugzilla for [8]more information.
  
  General Optimizer Improvements
  
*************** General Optimizer Improvements
*** 225,231 ****
            + gcov coverage tool has been improved.
            + make profiledbootstrap available to build a faster compiler.
              Experiments  made  on  i386 hardware showed an 11% speedup on
!             -O0  and  a 7.5% speedup on -O2 compilation of a [8]large C++
              testcase.
            + New value profiling pass enabled via -fprofile-values
            + New value profile transformations pass enabled via -fvpt aims
--- 789,795 ----
            + gcov coverage tool has been improved.
            + make profiledbootstrap available to build a faster compiler.
              Experiments  made  on  i386 hardware showed an 11% speedup on
!             -O0  and  a 7.5% speedup on -O2 compilation of a [9]large C++
              testcase.
            + New value profiling pass enabled via -fprofile-values
            + New value profile transformations pass enabled via -fvpt aims
*************** New Languages and Language specific impr
*** 345,351 ****
         possible non-intrusive workaround is the following:
          (*(a, &b)) = 2;
  
!      * Several  [9]built-in  functions  such  as  __builtin_popcount  for
         counting  bits,  finding the highest and lowest bit in a word, and
         parity have been added.
       * The  -fwritable-strings  option  has  been  deprecated and will be
--- 909,915 ----
         possible non-intrusive workaround is the following:
          (*(a, &b)) = 2;
  
!      * Several  [10]built-in  functions  such  as  __builtin_popcount for
         counting  bits,  finding the highest and lowest bit in a word, and
         parity have been added.
       * The  -fwritable-strings  option  has  been  deprecated and will be
*************** New Languages and Language specific impr
*** 420,426 ****
            b.callme();
          }
       * In  a  template  definition, unqualified names will no longer find
!        members of a dependent base. For example,
          template <typename T> struct B {
            int m;
            int n;
--- 984,991 ----
            b.callme();
          }
       * In  a  template  definition, unqualified names will no longer find
!        members  of  a dependent base (as specified by [temp.dep]/3 in the
!        C++ standard). For example,
          template <typename T> struct B {
            int m;
            int n;
*************** New Languages and Language specific impr
*** 535,541 ****
         declaration  must  be accessible at the point of that declaration.
         Previous  versions  of  G++  used to be less strict about this and
         allowed   friend  declarations  for  private  class  members,  for
!        example.  See  the  ISO C++ Standard Committee's [10]defect report
         #209 for details.
       * Declaration  of member functions of class templates as friends are
         supported. For example,
--- 1100,1106 ----
         declaration  must  be accessible at the point of that declaration.
         Previous  versions  of  G++  used to be less strict about this and
         allowed   friend  declarations  for  private  class  members,  for
!        example.  See  the  ISO C++ Standard Committee's [11]defect report
         #209 for details.
       * Declaration  of member functions of class templates as friends are
         supported. For example,
*************** New Languages and Language specific impr
*** 612,618 ****
          }
         This  might  be  surprising  at first sight, especially since most
         popular   compilers   do   not   correctly   implement  this  rule
!        ([11]further details).
       * When  forming a pointer to member or a pointer to member function,
         access  checks  for  class visibility (public, protected, private)
         are  now  performed using the qualifying scope of the name itself.
--- 1177,1183 ----
          }
         This  might  be  surprising  at first sight, especially since most
         popular   compilers   do   not   correctly   implement  this  rule
!        ([12]further details).
       * When  forming a pointer to member or a pointer to member function,
         access  checks  for  class visibility (public, protected, private)
         are  now  performed using the qualifying scope of the name itself.
*************** New Languages and Language specific impr
*** 682,688 ****
              synchronization (@synchronized) support. These are accessible
              via  the  -fobjc-exceptions  switch; as of this writing, they
              may only be used in conjunction with -fnext-runtime on Mac OS
!             X  10.3  and  later.  See [12]Options Controlling Objective-C
              Dialect for more information.
            + An overhaul of @encode logic. The C99 _Bool and C++ bool type
              may  now be encoded as 'B'. In addition, the back-end/codegen
--- 1247,1253 ----
              synchronization (@synchronized) support. These are accessible
              via  the  -fobjc-exceptions  switch; as of this writing, they
              may only be used in conjunction with -fnext-runtime on Mac OS
!             X  10.3  and  later.  See [13]Options Controlling Objective-C
              Dialect for more information.
            + An overhaul of @encode logic. The C99 _Bool and C++ bool type
              may  now be encoded as 'B'. In addition, the back-end/codegen
*************** New Languages and Language specific impr
*** 692,703 ****
              properly, and that correct diagnostics are issued.
            + Support  for "Zero-Link" (-fzero-link) and "Fix-and-Continue"
              (-freplace-objc-classes) debugging modes, currently available
!             on  Mac  OS  X  10.3  and  later. See [13]Options Controlling
              Objective-C Dialect for more information.
            + Access  to optimized runtime entry points (-fno-nil-receivers
              )  on  the  assumption  that message receivers are never nil.
              This  is  currently available on Mac OS X 10.3 and later. See
!             [14]Options   Controlling   Objective-C   Dialect   for  more
              information.
  
    Java
--- 1257,1268 ----
              properly, and that correct diagnostics are issued.
            + Support  for "Zero-Link" (-fzero-link) and "Fix-and-Continue"
              (-freplace-objc-classes) debugging modes, currently available
!             on  Mac  OS  X  10.3  and  later. See [14]Options Controlling
              Objective-C Dialect for more information.
            + Access  to optimized runtime entry points (-fno-nil-receivers
              )  on  the  assumption  that message receivers are never nil.
              This  is  currently available on Mac OS X 10.3 and later. See
!             [15]Options   Controlling   Objective-C   Dialect   for  more
              information.
  
    Java
*************** New Languages and Language specific impr
*** 709,719 ****
         to gcj.
       * libgcj  has  a  new gcjlib URL type; this lets URLClassLoader load
         code from shared libraries.
!      * libgcj   has   been  much  more  completely  merged  with  [15]GNU
         Classpath.
       * Class loading is now much more correct; in particular the caller's
         class loader is now used when that is required.
!      * [16]Eclipse 2.x will run out of the box using gij.
       * Parts  of  java.nio  have  been  implemented.  Direct and indirect
         buffers work, as do fundamental file and socket operations.
       * java.awt  has  been  improved,  though  it  is still not ready for
--- 1274,1284 ----
         to gcj.
       * libgcj  has  a  new gcjlib URL type; this lets URLClassLoader load
         code from shared libraries.
!      * libgcj   has   been  much  more  completely  merged  with  [16]GNU
         Classpath.
       * Class loading is now much more correct; in particular the caller's
         class loader is now used when that is required.
!      * [17]Eclipse 2.x will run out of the box using gij.
       * Parts  of  java.nio  have  been  implemented.  Direct and indirect
         buffers work, as do fundamental file and socket operations.
       * java.awt  has  been  improved,  though  it  is still not ready for
*************** New Languages and Language specific impr
*** 726,742 ****
  
    Fortran
  
!      * Fortran improvements are listed in the [17]Fortran documentation.
  
  New Targets and Target Specific Improvements
  
    Alpha
  
!      * Several   [18]built-in   functions   have   been   added  such  as
         __builtin_alpha_zap   to   allow   utilizing   the   more  obscure
         instructions of the CPU.
       * Parameter  passing  of  complex arguments has changed to match the
!        [19]ABI.  This  change is incompatible with previous GCC versions,
         but  does  fix  compatibility  with the Tru64 compiler and several
         corner cases where GCC was incompatible with itself.
  
--- 1291,1307 ----
  
    Fortran
  
!      * Fortran improvements are listed in the [18]Fortran documentation.
  
  New Targets and Target Specific Improvements
  
    Alpha
  
!      * Several   [19]built-in   functions   have   been   added  such  as
         __builtin_alpha_zap   to   allow   utilizing   the   more  obscure
         instructions of the CPU.
       * Parameter  passing  of  complex arguments has changed to match the
!        [20]ABI.  This  change is incompatible with previous GCC versions,
         but  does  fix  compatibility  with the Tru64 compiler and several
         corner cases where GCC was incompatible with itself.
  
*************** New Targets and Target Specific Improvem
*** 753,760 ****
       * A  new ARM target has been added: arm-wince-pe. This is similar to
         the arm-pe target, but it defaults to using the APCS32 ABI.
       * The  existing  ARM  pipeline description has been converted to the
!        use the [20]DFA processor pipeline model. There is not much change
!        in  code  performance,  but  the  description is now [21]easier to
         understand.
       * Support for the Cirrus EP9312 Maverick floating point co-processor
         added.  Enabled  at  run  time  with the -mcpu=ep9312 command line
--- 1318,1325 ----
       * A  new ARM target has been added: arm-wince-pe. This is similar to
         the arm-pe target, but it defaults to using the APCS32 ABI.
       * The  existing  ARM  pipeline description has been converted to the
!        use the [21]DFA processor pipeline model. There is not much change
!        in  code  performance,  but  the  description is now [22]easier to
         understand.
       * Support for the Cirrus EP9312 Maverick floating point co-processor
         added.  Enabled  at  run  time  with the -mcpu=ep9312 command line
*************** New Targets and Target Specific Improvem
*** 802,808 ****
         generation of code tuned for Itanium 2 (option -mtune=itanium2) is
         enabled  by  default now. To generate code tuned for Itanium 1 the
         option -mtune=itanium1 should be used.
!      * [22]DFA  processor  pipeline descriptions for the IA-64 processors
         have  been  added.  This  resulted  in about 3% improvement on the
         SPECInt2000 benchmark for Itanium 2.
       * Instruction  bundling  for the IA-64 processors has been rewritten
--- 1367,1373 ----
         generation of code tuned for Itanium 2 (option -mtune=itanium2) is
         enabled  by  default now. To generate code tuned for Itanium 1 the
         option -mtune=itanium1 should be used.
!      * [23]DFA  processor  pipeline descriptions for the IA-64 processors
         have  been  added.  This  resulted  in about 3% improvement on the
         SPECInt2000 benchmark for Itanium 2.
       * Instruction  bundling  for the IA-64 processors has been rewritten
*************** New Targets and Target Specific Improvem
*** 867,873 ****
  
      General
  
!      * Several [23]ABI bugs have been fixed. Unfortunately, these changes
         will break binary compatibility with earlier releases.
       * GCC  can  now  use  explicit  relocation operators when generating
         -mabicalls  code. This behavior is controlled by -mexplicit-relocs
--- 1432,1438 ----
  
      General
  
!      * Several [24]ABI bugs have been fixed. Unfortunately, these changes
         will break binary compatibility with earlier releases.
       * GCC  can  now  use  explicit  relocation operators when generating
         -mabicalls  code. This behavior is controlled by -mexplicit-relocs
*************** New Targets and Target Specific Improvem
*** 889,900 ****
       * Many  internal  changes  have  been  made to the MIPS port, mostly
         aimed at reducing the reliance on assembler macros.
  
!   PowerPC Darwin
  
       * Support  for  shared/dylib  gcc  libraries  has  been added. It is
         enabled by default on powerpc-apple-darwin7.0.0 and up.
       * Libgcj   is   enabled   by   default.   On   systems   older  than
!        powerpc-apple-darwin7.0.0 you need to install [24]dlcompat.
  
    S/390 and zSeries
  
--- 1454,1485 ----
       * Many  internal  changes  have  been  made to the MIPS port, mostly
         aimed at reducing the reliance on assembler macros.
  
!   PowerPC
! 
!      * GCC  3.4 releases have a number of fixes for PowerPC and PowerPC64
!        [25]ABI  incompatibilities regarding the way parameters are passed
!        during    functions   calls.   These   changes   may   result   in
!        incompatibility between code compiled with GCC 3.3 and GCC 3.4.
! 
!     PowerPC Darwin
  
       * Support  for  shared/dylib  gcc  libraries  has  been added. It is
         enabled by default on powerpc-apple-darwin7.0.0 and up.
       * Libgcj   is   enabled   by   default.   On   systems   older  than
!        powerpc-apple-darwin7.0.0 you need to install [26]dlcompat.
!      * 128-bit  IBM  extended  precision  format  support  added for long
!        double.
! 
!     PowerPC64 GNU/Linux
! 
!      * By  default,  PowerPC64  GNU/Linux  now  uses natural alignment of
!        structure  elements.  The old four byte alignment for double, with
!        special  rules  for a struct starting with a double, can be chosen
!        with  -malign-power.  This  change  may  result in incompatibility
!        between code compiled with GCC 3.3 and GCC 3.4.
!      * -mabi=altivec is now the default rather than -mabi=no-altivec.
!      * 128-bit  IBM  extended  precision  format  support  added for long
!        double.
  
    S/390 and zSeries
  
*************** New Targets and Target Specific Improvem
*** 955,961 ****
       * The option -mflat is deprecated.
       * Support  for  large  (>  2GB)  frames has been added to the 64-bit
         port.
!      * Several [25]ABI bugs have been fixed. Unfortunately, these changes
         will break binary compatibility with earlier releases.
       * The  default  debugging  format  has  been  switched from STABS to
         DWARF-2 for 32-bit code on Solaris 7 and later. DWARF-2 is already
--- 1540,1546 ----
       * The option -mflat is deprecated.
       * Support  for  large  (>  2GB)  frames has been added to the 64-bit
         port.
!      * Several [27]ABI bugs have been fixed. Unfortunately, these changes
         will break binary compatibility with earlier releases.
       * The  default  debugging  format  has  been  switched from STABS to
         DWARF-2 for 32-bit code on Solaris 7 and later. DWARF-2 is already
*************** GCC 3.4.0
*** 1069,1075 ****
    Bug Fixes
  
     A  vast number of bugs have been fixed in 3.4.0, too many to publish a
!    complete  list  here.  [26]Follow  this  link  to  query  the Bugzilla
     database  for  the  list  of over 900 bugs fixed in 3.4.0. This is the
     list  of  all  bugs marked as resolved and fixed in 3.4.0 that are not
     flagged as 3.4 regressions.
--- 1654,1660 ----
    Bug Fixes
  
     A  vast number of bugs have been fixed in 3.4.0, too many to publish a
!    complete  list  here.  [28]Follow  this  link  to  query  the Bugzilla
     database  for  the  list  of over 900 bugs fixed in 3.4.0. This is the
     list  of  all  bugs marked as resolved and fixed in 3.4.0 that are not
     flagged as 3.4 regressions.
*************** GCC 3.4.1
*** 1086,1353 ****
  
      Bootstrap failures
  
!      * [27]10129  Ada  bootstrap  fails on PPC-Darwin - invalid assembler
         emitted - PIC related
!      * [28]14576 [ARM] ICE in libiberty when building gcc-3.4 for arm-elf
!      * [29]14760    A   bug   in   configure.in   prevents   using   both
         --program-suffix and --program-prefix
!      * [30]14671      [hppa64]      bootstrap      fails:      ICE     in
         save_call_clobbered_regs, in caller_save.c
!      * [31]15093  [alpha][Java]  make bootstrap fails to configure libffi
         on Alpha
!      * [32]15178 Solaris 9/x86 fails linking after stage 3
  
      Multi-platform internal compiler errors (ICEs)
  
!      * [33]12753  (preprocessor) Memory corruption in preprocessor on bad
         input
!      * [34]13985 ICE in gcc.c-torture/compile/930621-1.c
!      * [35]14810  (c++)  tree  check failures with invalid code involving
         templates
!      * [36]14883  (c++) ICE on invalid code, in cp_parser_lookup_name, in
         cp/parser.c
!      * [37]15044 (c++) ICE on syntax error, template header
!      * [38]15057  (c++)  Compiling  of conditional value throw constructs
         cause a segmentation violation
!      * [39]15064 (c++) typeid of template parameter gives ICE
!      * [40]15142  (c++)  ICE  when  passing  a  string  where  a char* is
         expected in a throw statement
!      * [41]15159 ICE in rtl_verify_flow_info_1
!      * [42]15165 (c++) ICE in instantiate_template
!      * [43]15193   Unary  minus  using  pointer  to  V4SF  vector  causes
         -fforce-mem to exhaust all memory
!      * [44]15209 (c++) Runs out of memory with packed structs
!      * [45]15227 (c++) Trouble with invalid function definition
!      * [46]15285  (c++)  instantiate_type  ICE  when  forming  pointer to
         template function
!      * [47]15299 (c++) ICE in resolve_overloaded_unification
!      * [48]15329 (c++) ICE on constructor of member template
!      * [49]15550 ICE in extract_insn, in recog.c
!      * [50]15554 (c++) ICE in tsubst_copy, in cp/pt.c
!      * [51]15640   (c++)   ICE   on   invalid   code   in  arg_assoc,  in
         cp/name-lookup.c
!      * [52]15666 [unit-at-a-time] Gcc abort on valid code
!      * [53]15696 (c++) ICE with bad pointer-to-member code
!      * [54]15701 (c++) ICE with friends and template template parameter
!      * [55]15761 ICE in do_SUBST, in combine.c
!      * [56]15829 (c++) ICE on Botan-1.3.13 due to -funroll-loops
  
      Ada
  
!      * [57]14538 All RTEMS targets broken for gnat
  
      C front end
  
!      * [58]12391 missing warning about assigning to an incomplete type
!      * [59]14649 atan(1.0) should not be a constant expression
!      * [60]15004  [unit-at-a-time]  no  warning  for  unused paramater in
         static function
!      * [61]15749  --pedantic-errors  behaves  differently from --pedantic
         with C-compiler on GNU/Linux
  
      C++ compiler and library
  
!      * [62]10646  non-const  reference is incorrectly matched in a "const
         T" partial specialization
!      * [63]12077 wcin.rdbuf()->in_avail() return value too high
!      * [64]13598 enc_filebuf doesn't work
!      * [65]14211 const_cast returns lvalue but should be rvalue
!      * [66]14220 num_put::do_put() undesired float/double behavior
!      * [67]14245     problem     with    user-defined    allocators    in
         std::basic_string
!      * [68]14340  libstdc++  Debug  mode:  failure to convert iterator to
         const_iterator
!      * [69]14600  __gnu_cxx::stdio_sync_filebuf  should  expose  internal
         FILE*
!      * [70]14668 no warning anymore for reevaluation of declaration
!      * [71]14775 LFS (large file support) tests missing
!      * [72]14821   Duplicate   namespace  alias  declaration  should  not
         conflict
!      * [73]14930 Friend declaration ignored
!      * [74]14932  cannot use offsetof to get offsets of array elements in
         g++ 3.4.0
!      * [75]14950  [non  unit-at-a-time]  always_inline  does not mix with
         templates and -O0
!      * [76]14962 g++ ignores #pragma redefine_extname
!      * [77]14975 Segfault on low-level write error during imbue
!      * [78]15002  Linewise  stream  input  is  unusably slow (std::string
         slow)
!      * [79]15025   compiler   accepts   redeclaration   of   template  as
         non-template
!      * [80]15046 [arm] Math functions misdetected by cross configuration
!      * [81]15069 a bit test on a variable of enum type is miscompiled
!      * [82]15074 g++ -lsupc++ still links against libstdc++
!      * [83]15083 spurious "statement has no effect" warning
!      * [84]15096 parse error with templates and pointer to const member
!      * [85]15287  combination  of  operator[]  and  operator  .* fails in
         templates
!      * [86]15317  __attribute__  unused in first parameter of constructor
         gives error
!      * [87]15337 sizeof on incomplete type diagnostic
!      * [88]15361 bitset<>::_Find_next fails
!      * [89]15412  _GLIBCXX_ symbols symbols defined and used in different
         namespaces
!      * [90]15427 valid code results in incomplete type error
!      * [91]15471   Incorrect   member   pointer   offsets   in  anonymous
         structs/unions
!      * [92]15503 nested template problem
!      * [93]15507 compiler hangs while laying out union
!      * [94]15542 operator & and template definitions
!      * [95]15565 SLES9: leading + sign for unsigned int with showpos
!      * [96]15625  friend  defined  inside a template fails to find static
         function
!      * [97]15629 Function templates, overloads, and friend name injection
!      * [98]15742  'noreturn'  attribute  ignored  in  method  of template
         functions.
!      * [99]15775 Allocator::pointer consistently ignored
!      * [100]15821 Duplicate namespace alias within namespace rejected
!      * [101]15862 'enum yn' fails (confict with undeclared builtin)
!      * [102]15875 rejects pointer to member in template
!      * [103]15877  valid  code  using  templates  and  anonymous enums is
         rejected
!      * [104]15947 Puzzling error message for wrong destructor declaration
         in template class
!      * [105]16020 cannot copy __gnu_debug::bitset
!      * [106]16154 input iterator concept too restrictive
!      * [107]16174 deducing top-level consts
  
      Java
  
!      * [108]14315 Java compiler is not parallel make safe
  
      Fortran
  
!      * [109]15151 [g77] incorrect logical i/o in 64-bit mode
  
      Objective-C
  
!      * [110]7993 private variables cannot be shadowed in subclasses
  
      Optimization bugs
  
!      * [111]15228 useless copies of floating point operands
!      * [112]15345   [non-unit-at-a-time]   unreferenced   nested   inline
         functions not optimized away
!      * [113]15945 Incorrect floating point optimization
!      * [114]15526 ftrapv aborts on 0 * (-1)
!      * [115]14690 Miscompiled POOMA tests
!      * [116]15112 GCC generates code to write to unchanging memory
  
      Preprocessor
  
!      * [117]15067 Minor glitch in the source of cpp
  
      Main driver program bugs
  
!      * [118]1963    collect2   interprets   -oldstyle_liblookup   as   -o
         ldstyle_liblookup
  
      x86-specific (Intel/AMD)
  
!      * [119]15717 Error: can't resolve `L0' {*ABS* section} - `xx' {*UND*
         section}
  
      HPPA-specific
  
!      * [120]14782 GCC produces an unaligned data access at -O2
!      * [121]14828 FAIL: gcc.c-torture/execute/20030408-1.c execution, -O2
!      * [122]15202 ICE in reload_cse_simplify_operands, in postreload.c
  
      IA64-specific
  
!      * [123]14610 __float80 constants incorrectly emitted
!      * [124]14813 init_array sections are initialized in the wrong order
!      * [125]14857 GCC segfault on duplicated asm statement
!      * [126]15598 Gcc 3.4 ICE on valid code
!      * [127]15653 Gcc 3.4 ICE on valid code
  
      MIPS-specific
  
!      * [128]15189  wrong  filling  of  delay  slot  with -march=mips1 -G0
         -mno-split-addresses -mno-explicit-relocs
!      * [129]15331  Assembler  error building gnatlib on IRIX 6.5 with GNU
         as 2.14.91
!      * [130]16144 Bogus reference to __divdf3 when -O1
!      * [131]16176 Miscompilation of unaligned data in MIPS backend
  
      PowerPC-specific
  
!      * [132]11591 ICE in gcc.dg/altivec-5.c
!      * [133]12028 powerpc-eabispe produces bad sCOND operation
!      * [134]14478 rs6000 geu/ltu patterns generate incorrect code
!      * [135]14567 long double and va_arg complex args
!      * [136]14715  Altivec  stack  layout may overlap gpr save with stack
         temps
!      * [137]14902   (libstdc++)   Stream  checking  functions  fail  when
         -pthread option is used.
!      * [138]14924 Compiler ICE on valid code
!      * [139]14960 -maltivec affects vector return with -mabi=no-altivec
!      * [140]15106   vector   varargs  failure  passing  from  altivec  to
         non-altivec code for -m32
!      * [141]16026  ICE in function.c:4804, assign_parms, when -mpowerpc64
         & half-word operation
!      * [142]15191  -maltivec  -mabi=no-altivec results in mis-aligned lvx
         and stvx
!      * [143]15662  Segmentation  fault when an exception is thrown - even
         if try and catch are specified
  
      s390-specific
  
!      * [144]15054 Bad code due to overlapping stack temporaries
  
      SPARC-specific
  
!      * [145]15783 ICE with union assignment in 64-bit mode
!      * [146]15626   GCC   3.4   emits  "ld:  warning:  relocation  error:
         R_SPARC_UA32"
  
      x86-64-specific
  
!      * [147]14326 boehm-gc hardcodes to 3DNow! prefetch for x86_64
!      * [148]14723 Backported -march=nocona from mainline
!      * [149]15290 __float128 failed to pass to function properly
  
      Cygwin/Mingw32-specific
  
!      * [150]15250  Option  -mms-bitfields  support  on  GCC  3.4  is  not
         conformant to MS layout
!      * [151]15551  -mtune=pentium4  -O2  with  sjlj EH breaks stack probe
         worker on windows32 targets
  
      Bugs specific to embedded processors
  
!      * [152]8309  [m68k]  -m5200  produces  erroneous SImode set of short
         varaible on stack
!      * [153]13250  [SH]  Gcc code for rotation clobbers the register, but
         gcc continues to use the register as if it was not clobbered
!      * [154]13803 [coldfire] movqi operand constraints too restrictivefor
         TARGET_COLDFIRE
!      * [155]14093 [SH] ICE for code when using -mhitachi option in SH
!      * [156]14457 [m6811hc] ICE with simple c++ source
!      * [157]14542 [m6811hc] ICE on simple source
!      * [158]15100 [SH] cc1plus got hang-up on
         libstdc++-v3/testsuite/abi_check.cc
!      * [159]15296  [CRIS]  Delayed branch scheduling causing invalid code
         on cris-*
!      * [160]15396 [SH] ICE with -O2 -fPIC
!      * [161]15782  [coldfire]  m68k_output_mi_thunk  emits wrong code for
         ColdFire
  
      Testsuite problems (compiler not affected)
  
!      * [162]11610   libstdc++   testcases  27_io/*  don't  work  properly
         remotely
!      * [163]15488  (libstdc++) possibly insufficient file permissions for
         executing test suite
!      * [164]15489 (libstdc++) testsuite_files determined incorrectly
  
      Documentation bugs
  
!      * [165]13928  (libstdc++) no whatis info in some man pages generated
         by doxygen
!      * [166]14150 Ada documentation out of date
!      * [167]14949 (c++) Need to document method visibility changes
!      * [168]15123 libstdc++-doc: Allocators.3 manpage is empty
       _________________________________________________________________
  
  GCC 3.4.2
--- 1671,1938 ----
  
      Bootstrap failures
  
!      * [29]10129  Ada  bootstrap  fails on PPC-Darwin - invalid assembler
         emitted - PIC related
!      * [30]14576 [ARM] ICE in libiberty when building gcc-3.4 for arm-elf
!      * [31]14760    A   bug   in   configure.in   prevents   using   both
         --program-suffix and --program-prefix
!      * [32]14671      [hppa64]      bootstrap      fails:      ICE     in
         save_call_clobbered_regs, in caller_save.c
!      * [33]15093  [alpha][Java]  make bootstrap fails to configure libffi
         on Alpha
!      * [34]15178 Solaris 9/x86 fails linking after stage 3
  
      Multi-platform internal compiler errors (ICEs)
  
!      * [35]12753  (preprocessor) Memory corruption in preprocessor on bad
         input
!      * [36]13985 ICE in gcc.c-torture/compile/930621-1.c
!      * [37]14810  (c++)  tree  check failures with invalid code involving
         templates
!      * [38]14883  (c++) ICE on invalid code, in cp_parser_lookup_name, in
         cp/parser.c
!      * [39]15044 (c++) ICE on syntax error, template header
!      * [40]15057  (c++)  Compiling  of conditional value throw constructs
         cause a segmentation violation
!      * [41]15064 (c++) typeid of template parameter gives ICE
!      * [42]15142  (c++)  ICE  when  passing  a  string  where  a char* is
         expected in a throw statement
!      * [43]15159 ICE in rtl_verify_flow_info_1
!      * [44]15165 (c++) ICE in instantiate_template
!      * [45]15193   Unary  minus  using  pointer  to  V4SF  vector  causes
         -fforce-mem to exhaust all memory
!      * [46]15209 (c++) Runs out of memory with packed structs
!      * [47]15227 (c++) Trouble with invalid function definition
!      * [48]15285  (c++)  instantiate_type  ICE  when  forming  pointer to
         template function
!      * [49]15299 (c++) ICE in resolve_overloaded_unification
!      * [50]15329 (c++) ICE on constructor of member template
!      * [51]15550 ICE in extract_insn, in recog.c
!      * [52]15554 (c++) ICE in tsubst_copy, in cp/pt.c
!      * [53]15640   (c++)   ICE   on   invalid   code   in  arg_assoc,  in
         cp/name-lookup.c
!      * [54]15666 [unit-at-a-time] Gcc abort on valid code
!      * [55]15696 (c++) ICE with bad pointer-to-member code
!      * [56]15701 (c++) ICE with friends and template template parameter
!      * [57]15761 ICE in do_SUBST, in combine.c
!      * [58]15829 (c++) ICE on Botan-1.3.13 due to -funroll-loops
  
      Ada
  
!      * [59]14538 All RTEMS targets broken for gnat
  
      C front end
  
!      * [60]12391 missing warning about assigning to an incomplete type
!      * [61]14649 atan(1.0) should not be a constant expression
!      * [62]15004  [unit-at-a-time]  no  warning  for  unused paramater in
         static function
!      * [63]15749  --pedantic-errors  behaves  differently from --pedantic
         with C-compiler on GNU/Linux
  
      C++ compiler and library
  
!      * [64]10646  non-const  reference is incorrectly matched in a "const
         T" partial specialization
!      * [65]12077 wcin.rdbuf()->in_avail() return value too high
!      * [66]13598 enc_filebuf doesn't work
!      * [67]14211 const_cast returns lvalue but should be rvalue
!      * [68]14220 num_put::do_put() undesired float/double behavior
!      * [69]14245     problem     with    user-defined    allocators    in
         std::basic_string
!      * [70]14340  libstdc++  Debug  mode:  failure to convert iterator to
         const_iterator
!      * [71]14600  __gnu_cxx::stdio_sync_filebuf  should  expose  internal
         FILE*
!      * [72]14668 no warning anymore for reevaluation of declaration
!      * [73]14775 LFS (large file support) tests missing
!      * [74]14821   Duplicate   namespace  alias  declaration  should  not
         conflict
!      * [75]14930 Friend declaration ignored
!      * [76]14932  cannot use offsetof to get offsets of array elements in
         g++ 3.4.0
!      * [77]14950  [non  unit-at-a-time]  always_inline  does not mix with
         templates and -O0
!      * [78]14962 g++ ignores #pragma redefine_extname
!      * [79]14975 Segfault on low-level write error during imbue
!      * [80]15002  Linewise  stream  input  is  unusably slow (std::string
         slow)
!      * [81]15025   compiler   accepts   redeclaration   of   template  as
         non-template
!      * [82]15046 [arm] Math functions misdetected by cross configuration
!      * [83]15069 a bit test on a variable of enum type is miscompiled
!      * [84]15074 g++ -lsupc++ still links against libstdc++
!      * [85]15083 spurious "statement has no effect" warning
!      * [86]15096 parse error with templates and pointer to const member
!      * [87]15287  combination  of  operator[]  and  operator  .* fails in
         templates
!      * [88]15317  __attribute__  unused in first parameter of constructor
         gives error
!      * [89]15337 sizeof on incomplete type diagnostic
!      * [90]15361 bitset<>::_Find_next fails
!      * [91]15412  _GLIBCXX_ symbols symbols defined and used in different
         namespaces
!      * [92]15427 valid code results in incomplete type error
!      * [93]15471   Incorrect   member   pointer   offsets   in  anonymous
         structs/unions
!      * [94]15503 nested template problem
!      * [95]15507 compiler hangs while laying out union
!      * [96]15542 operator & and template definitions
!      * [97]15565 SLES9: leading + sign for unsigned int with showpos
!      * [98]15625  friend  defined  inside a template fails to find static
         function
!      * [99]15629 Function templates, overloads, and friend name injection
!      * [100]15742  'noreturn'  attribute  ignored  in  method of template
         functions.
!      * [101]15775 Allocator::pointer consistently ignored
!      * [102]15821 Duplicate namespace alias within namespace rejected
!      * [103]15862 'enum yn' fails (confict with undeclared builtin)
!      * [104]15875 rejects pointer to member in template
!      * [105]15877  valid  code  using  templates  and  anonymous enums is
         rejected
!      * [106]15947 Puzzling error message for wrong destructor declaration
         in template class
!      * [107]16020 cannot copy __gnu_debug::bitset
!      * [108]16154 input iterator concept too restrictive
!      * [109]16174 deducing top-level consts
  
      Java
  
!      * [110]14315 Java compiler is not parallel make safe
  
      Fortran
  
!      * [111]15151 [g77] incorrect logical i/o in 64-bit mode
  
      Objective-C
  
!      * [112]7993 private variables cannot be shadowed in subclasses
  
      Optimization bugs
  
!      * [113]15228 useless copies of floating point operands
!      * [114]15345   [non-unit-at-a-time]   unreferenced   nested   inline
         functions not optimized away
!      * [115]15945 Incorrect floating point optimization
!      * [116]15526 ftrapv aborts on 0 * (-1)
!      * [117]14690 Miscompiled POOMA tests
!      * [118]15112 GCC generates code to write to unchanging memory
  
      Preprocessor
  
!      * [119]15067 Minor glitch in the source of cpp
  
      Main driver program bugs
  
!      * [120]1963    collect2   interprets   -oldstyle_liblookup   as   -o
         ldstyle_liblookup
  
      x86-specific (Intel/AMD)
  
!      * [121]15717 Error: can't resolve `L0' {*ABS* section} - `xx' {*UND*
         section}
  
      HPPA-specific
  
!      * [122]14782 GCC produces an unaligned data access at -O2
!      * [123]14828 FAIL: gcc.c-torture/execute/20030408-1.c execution, -O2
!      * [124]15202 ICE in reload_cse_simplify_operands, in postreload.c
  
      IA64-specific
  
!      * [125]14610 __float80 constants incorrectly emitted
!      * [126]14813 init_array sections are initialized in the wrong order
!      * [127]14857 GCC segfault on duplicated asm statement
!      * [128]15598 Gcc 3.4 ICE on valid code
!      * [129]15653 Gcc 3.4 ICE on valid code
  
      MIPS-specific
  
!      * [130]15189  wrong  filling  of  delay  slot  with -march=mips1 -G0
         -mno-split-addresses -mno-explicit-relocs
!      * [131]15331  Assembler  error building gnatlib on IRIX 6.5 with GNU
         as 2.14.91
!      * [132]16144 Bogus reference to __divdf3 when -O1
!      * [133]16176 Miscompilation of unaligned data in MIPS backend
  
      PowerPC-specific
  
!      * [134]11591 ICE in gcc.dg/altivec-5.c
!      * [135]12028 powerpc-eabispe produces bad sCOND operation
!      * [136]14478 rs6000 geu/ltu patterns generate incorrect code
!      * [137]14567 long double and va_arg complex args
!      * [138]14715  Altivec  stack  layout may overlap gpr save with stack
         temps
!      * [139]14902   (libstdc++)   Stream  checking  functions  fail  when
         -pthread option is used.
!      * [140]14924 Compiler ICE on valid code
!      * [141]14960 -maltivec affects vector return with -mabi=no-altivec
!      * [142]15106   vector   varargs  failure  passing  from  altivec  to
         non-altivec code for -m32
!      * [143]16026  ICE in function.c:4804, assign_parms, when -mpowerpc64
         & half-word operation
!      * [144]15191  -maltivec  -mabi=no-altivec results in mis-aligned lvx
         and stvx
!      * [145]15662  Segmentation  fault when an exception is thrown - even
         if try and catch are specified
  
      s390-specific
  
!      * [146]15054 Bad code due to overlapping stack temporaries
  
      SPARC-specific
  
!      * [147]15783 ICE with union assignment in 64-bit mode
!      * [148]15626   GCC   3.4   emits  "ld:  warning:  relocation  error:
         R_SPARC_UA32"
  
      x86-64-specific
  
!      * [149]14326 boehm-gc hardcodes to 3DNow! prefetch for x86_64
!      * [150]14723 Backported -march=nocona from mainline
!      * [151]15290 __float128 failed to pass to function properly
  
      Cygwin/Mingw32-specific
  
!      * [152]15250  Option  -mms-bitfields  support  on  GCC  3.4  is  not
         conformant to MS layout
!      * [153]15551  -mtune=pentium4  -O2  with  sjlj EH breaks stack probe
         worker on windows32 targets
  
      Bugs specific to embedded processors
  
!      * [154]8309  [m68k]  -m5200  produces  erroneous SImode set of short
         varaible on stack
!      * [155]13250  [SH]  Gcc code for rotation clobbers the register, but
         gcc continues to use the register as if it was not clobbered
!      * [156]13803 [coldfire] movqi operand constraints too restrictivefor
         TARGET_COLDFIRE
!      * [157]14093 [SH] ICE for code when using -mhitachi option in SH
!      * [158]14457 [m6811hc] ICE with simple c++ source
!      * [159]14542 [m6811hc] ICE on simple source
!      * [160]15100 [SH] cc1plus got hang-up on
         libstdc++-v3/testsuite/abi_check.cc
!      * [161]15296  [CRIS]  Delayed branch scheduling causing invalid code
         on cris-*
!      * [162]15396 [SH] ICE with -O2 -fPIC
!      * [163]15782  [coldfire]  m68k_output_mi_thunk  emits wrong code for
         ColdFire
  
      Testsuite problems (compiler not affected)
  
!      * [164]11610   libstdc++   testcases  27_io/*  don't  work  properly
         remotely
!      * [165]15488  (libstdc++) possibly insufficient file permissions for
         executing test suite
!      * [166]15489 (libstdc++) testsuite_files determined incorrectly
  
      Documentation bugs
  
!      * [167]13928  (libstdc++) no whatis info in some man pages generated
         by doxygen
!      * [168]14150 Ada documentation out of date
!      * [169]14949 (c++) Need to document method visibility changes
!      * [170]15123 libstdc++-doc: Allocators.3 manpage is empty
       _________________________________________________________________
  
  GCC 3.4.2
*************** GCC 3.4.2
*** 1361,1554 ****
  
      Bootstrap failures and issues
  
!      * [169]16469      [mips-sgi-irix5.3]      bootstrap     fails     in
         libstdc++-v3/testsuite
!      * [170]16344    [hppa-linux-gnu]    libstdc++'s    PCH    built   by
         profiledbootstrap does not work with the built compiler
!      * [171]16842 [Solaris/x86] mkheaders can not find mkheaders.conf
  
      Multi-platform internal compiler errors (ICEs)
  
!      * [172]12608 (c++) ICE: expected class 't', have 'x' (error_mark) in
         cp_parser_class_specifier, in cp/parser.c
!      * [173]14492 ICE in loc_descriptor_from_tree, in dwarf2out.c
!      * [174]15461 (c++) ICE due to NRV and inlining
!      * [175]15890 (c++) ICE in c_expand_expr, in c-common.c
!      * [176]16180 ICE: segmentation fault in RTL optimization
!      * [177]16224 (c++) ICE in write_unscoped_name (template/namespace)
!      * [178]16408 ICE: in delete_insn, in cfgrtl.c
!      * [179]16529 (c++) ICE for: namespace-alias shall not be declared as
         the name of any other entity
!      * [180]16698   (c++)   ICE   with   exceptions  and  declaration  of
         __cxa_throw
!      * [181]16706    (c++)    ICE    in   finish_member_declaration,   in
         cp/semantics.c
!      * [182]16810  (c++)  Legal  C++  program  with  cast  gives  ICE  in
         build_ptrmemfunc
!      * [183]16851 (c++) ICE when throwing a comma expression
!      * [184]16870 (c++) Boost.Spirit causes ICE in tsubst, in cp/pt.c
!      * [185]16904   (c++)   ICE  in  finish_class_member_access_expr,  in
         cp/typeck.c
!      * [186]16905 (c++) ICE (segfault) with exceptions
!      * [187]16964   (c++)   ICE   in   cp_parser_class_specifier  due  to
         redefinition
!      * [188]17068  (c++)  ICE:  tree  check: expected class 'd', have 'x'
         (identifier_node) in dependent_template_p, in cp/pt.c
  
      Preprocessor bugs
  
!      * [189]16366 Preprocessor option -remap causes memory corruption
  
      Optimization
  
!      * [190]15345 unreferenced nested inline functions not optimized away
!      * [191]16590 Incorrect execution when compiling with -O2
!      * [192]16693  Bitwise AND is lost when used within a cast to an enum
         of the same precision
!      * [193]17078 Jump into if(0) substatement fails
  
      Problems in generated debug information
  
!      * [194]13956 incorrect stabs for nested local variables
  
      C front end bugs
  
!      * [195]16684  GCC  should not warn about redundant redeclarations of
         built-ins
  
      C++ compiler and library
  
!      * [196]12658   Thread   safety   problems  in  locale::global()  and
         locale::locale()
!      * [197]13092 g++ accepts invalid pointer-to-member conversion
!      * [198]15320 Excessive memory consumption
!      * [199]16246 Incorrect template argument deduction
!      * [200]16273  Memory exhausted when using nested classes and virtual
         functions
!      * [201]16401 ostringstream in gcc 3.4.x very slow for big data
!      * [202]16411 undefined reference to
         __gnu_cxx::stdio_sync_filebuf<char,         std::char_traits<char>
         >::file()
!      * [203]16489 G++ incorrectly rejects use of a null constant integral
         expression as a null constant pointer
!      * [204]16618 offsetof fails with constant member
!      * [205]16637 syntax error reported for valid input code
!      * [206]16717 __attribute__((constructor)) broken in C++
!      * [207]16813  compiler  error  in  DEBUG  version of range insertion
         std::map::insert
!      * [208]16853  pointer-to-member initialization from incompatible one
         accepted
!      * [209]16889 ambiguity is not detected
!      * [210]16959 Segmentation fault in ios_base::sync_with_stdio
  
      Java compiler and library
  
!      * [211]7587 direct threaded interpreter not thread-safe
!      * [212]16473 ServerSocket accept() leaks file descriptors
!      * [213]16478 Hash synchronization deadlock with finalizers
  
      Alpha-specific
  
!      * [214]10695 ICE in dwarf2out_frame_debug_expr, in dwarf2out.c
!      * [215]16974  could  not  split  insn  (ice  in  final_scan_insn, in
         final.c)
  
      x86-specific
  
!      * [216]16298 ICE in output_operand
!      * [217]17113 ICE with SSE2 intrinsics
!      * [218]17171 [i386-aout] Unrecognized comments in generated asm
  
      x86-64 specific
  
!      * [219]14697 libstdc++ couldn't find 32bit libgcc_s
  
      MIPS-specific
  
!      * [220]15869 [mips64] No NOP after LW (with -mips1 -O0)
!      * [221]16325 [mips64] value profiling clobbers gp on mips
!      * [222]16357  [mipsisa64-elf]  ICE  copying  7  bytes between extern
         char[]s
!      * [223]16380  [mips64]  Use  of  uninitialised  register  after dbra
         conversion
!      * [224]16407 [mips64] Unaligned access to local variables
!      * [225]16643    [mips64]    verify_local_live_at_start   ICE   after
         crossjumping & cfgcleanup
  
      ARM-specific
  
!      * [226]15927  THUMB -O2: strength-reduced iteration variable ends up
         off by 1
!      * [227]15948 THUMB: ICE with non-commutative cbranch
!      * [228]17019   THUMB:   bad   switch   statement   in  md  code  for
         addsi3_cbranch_scratch
  
      IA64-specific
  
!      * [229]16130  ICE  on valid code: in bundling, in config/ia64/ia64.c
         (-mtune=merced)
!      * [230]16142  ICE  on valid code: in bundling, in config/ia64/ia64.c
         (-mtune=itanium)
!      * [231]16278 Gcc failed to build Linux kernel with -mtune=merced
!      * [232]16414  ICE on valid code: typo in comparison of asm_noperands
         result
!      * [233]16445 ICE on valid code: don't count ignored insns
!      * [234]16490 ICE (segfault) while compiling with -fprofile-use
!      * [235]16683 ia64 does not honor SUBTARGET_EXTRA_SPECS
  
      PowerPC-specific
  
!      * [236]16195 (ppc64): Miscompilation of GCC 3.3.x by 3.4.x
!      * [237]16239  ICE on ppc64 (mozilla 1.7 compile, -O1 -fno-exceptions
         issue)
  
      SPARC-specific
  
!      * [238]16199 ICE while compiling apache 2.0.49
!      * [239]16416 -m64 doesn't imply -mcpu=v9 anymore
!      * [240]16430  ICE  when  returning  non-C  aggregates larger than 16
         bytes
  
      Bugs specific to embedded processors
  
!      * [241]16379 [m32r] can't output large model function call of memcpy
!      * [242]17093 [m32r] ICE with -msdata=use -O0
!      * [243]17119 [m32r] ICE at switch case 0x8000
  
      DJGPP-specific
  
!      * [244]15928 libstdc++ in 3.4.x doesn't cross-compile for djgpp
  
      Alpha Tru64-specific
  
!      * [245]16210 libstdc++ gratuitously omits "long long" I/O
  
      Testsuite, documentation issues (compiler is not affected):
  
!      * [246]15488  (libstdc++) possibly insufficient file permissions for
         executing test suite
!      * [247]16250 ada/doctools runs makeinfo even in release tarball
  
  GCC 3.4.3
  
!    This is the [248]list of problem reports (PRs) from GCC's bug tracking
!    system  that  are  known  to  be fixed in the 3.4.2 release. This list
     might not be complete (that is, it is possible that some PRs that have
     been fixed are not listed here).
       _________________________________________________________________
  
!    Please send FSF & GNU inquiries & questions to [249]gnu@gnu.org. There
!    are also [250]other ways to contact the FSF.
  
!    These pages are maintained by [251]the GCC team.
  
  
      For  questions  related  to the use of GCC, please consult these web
!     pages    and    the   [252]GCC   manuals.   If   that   fails,   the
!     [253]gcc-help@gcc.gnu.org mailing list might help.
      Please  send  comments on these web pages and the development of GCC
!     to    our    developer   mailing   list   at   [254]gcc@gnu.org   or
!     [255]gcc@gcc.gnu.org. All of our lists have [256]public archives.
  
     Copyright  (C) Free Software Foundation, Inc., 59 Temple Place - Suite
     330, Boston, MA 02111, USA.
--- 1946,2272 ----
  
      Bootstrap failures and issues
  
!      * [171]16469      [mips-sgi-irix5.3]      bootstrap     fails     in
         libstdc++-v3/testsuite
!      * [172]16344    [hppa-linux-gnu]    libstdc++'s    PCH    built   by
         profiledbootstrap does not work with the built compiler
!      * [173]16842 [Solaris/x86] mkheaders can not find mkheaders.conf
  
      Multi-platform internal compiler errors (ICEs)
  
!      * [174]12608 (c++) ICE: expected class 't', have 'x' (error_mark) in
         cp_parser_class_specifier, in cp/parser.c
!      * [175]14492 ICE in loc_descriptor_from_tree, in dwarf2out.c
!      * [176]15461 (c++) ICE due to NRV and inlining
!      * [177]15890 (c++) ICE in c_expand_expr, in c-common.c
!      * [178]16180 ICE: segmentation fault in RTL optimization
!      * [179]16224 (c++) ICE in write_unscoped_name (template/namespace)
!      * [180]16408 ICE: in delete_insn, in cfgrtl.c
!      * [181]16529 (c++) ICE for: namespace-alias shall not be declared as
         the name of any other entity
!      * [182]16698   (c++)   ICE   with   exceptions  and  declaration  of
         __cxa_throw
!      * [183]16706    (c++)    ICE    in   finish_member_declaration,   in
         cp/semantics.c
!      * [184]16810  (c++)  Legal  C++  program  with  cast  gives  ICE  in
         build_ptrmemfunc
!      * [185]16851 (c++) ICE when throwing a comma expression
!      * [186]16870 (c++) Boost.Spirit causes ICE in tsubst, in cp/pt.c
!      * [187]16904   (c++)   ICE  in  finish_class_member_access_expr,  in
         cp/typeck.c
!      * [188]16905 (c++) ICE (segfault) with exceptions
!      * [189]16964   (c++)   ICE   in   cp_parser_class_specifier  due  to
         redefinition
!      * [190]17068  (c++)  ICE:  tree  check: expected class 'd', have 'x'
         (identifier_node) in dependent_template_p, in cp/pt.c
  
      Preprocessor bugs
  
!      * [191]16366 Preprocessor option -remap causes memory corruption
  
      Optimization
  
!      * [192]15345 unreferenced nested inline functions not optimized away
!      * [193]16590 Incorrect execution when compiling with -O2
!      * [194]16693  Bitwise AND is lost when used within a cast to an enum
         of the same precision
!      * [195]17078 Jump into if(0) substatement fails
  
      Problems in generated debug information
  
!      * [196]13956 incorrect stabs for nested local variables
  
      C front end bugs
  
!      * [197]16684  GCC  should not warn about redundant redeclarations of
         built-ins
  
      C++ compiler and library
  
!      * [198]12658   Thread   safety   problems  in  locale::global()  and
         locale::locale()
!      * [199]13092 g++ accepts invalid pointer-to-member conversion
!      * [200]15320 Excessive memory consumption
!      * [201]16246 Incorrect template argument deduction
!      * [202]16273  Memory exhausted when using nested classes and virtual
         functions
!      * [203]16401 ostringstream in gcc 3.4.x very slow for big data
!      * [204]16411 undefined reference to
         __gnu_cxx::stdio_sync_filebuf<char,         std::char_traits<char>
         >::file()
!      * [205]16489 G++ incorrectly rejects use of a null constant integral
         expression as a null constant pointer
!      * [206]16618 offsetof fails with constant member
!      * [207]16637 syntax error reported for valid input code
!      * [208]16717 __attribute__((constructor)) broken in C++
!      * [209]16813  compiler  error  in  DEBUG  version of range insertion
         std::map::insert
!      * [210]16853  pointer-to-member initialization from incompatible one
         accepted
!      * [211]16889 ambiguity is not detected
!      * [212]16959 Segmentation fault in ios_base::sync_with_stdio
  
      Java compiler and library
  
!      * [213]7587 direct threaded interpreter not thread-safe
!      * [214]16473 ServerSocket accept() leaks file descriptors
!      * [215]16478 Hash synchronization deadlock with finalizers
  
      Alpha-specific
  
!      * [216]10695 ICE in dwarf2out_frame_debug_expr, in dwarf2out.c
!      * [217]16974  could  not  split  insn  (ice  in  final_scan_insn, in
         final.c)
  
      x86-specific
  
!      * [218]16298 ICE in output_operand
!      * [219]17113 ICE with SSE2 intrinsics
  
      x86-64 specific
  
!      * [220]14697 libstdc++ couldn't find 32bit libgcc_s
  
      MIPS-specific
  
!      * [221]15869 [mips64] No NOP after LW (with -mips1 -O0)
!      * [222]16325 [mips64] value profiling clobbers gp on mips
!      * [223]16357  [mipsisa64-elf]  ICE  copying  7  bytes between extern
         char[]s
!      * [224]16380  [mips64]  Use  of  uninitialised  register  after dbra
         conversion
!      * [225]16407 [mips64] Unaligned access to local variables
!      * [226]16643    [mips64]    verify_local_live_at_start   ICE   after
         crossjumping & cfgcleanup
  
      ARM-specific
  
!      * [227]15927  THUMB -O2: strength-reduced iteration variable ends up
         off by 1
!      * [228]15948 THUMB: ICE with non-commutative cbranch
!      * [229]17019   THUMB:   bad   switch   statement   in  md  code  for
         addsi3_cbranch_scratch
  
      IA64-specific
  
!      * [230]16130  ICE  on valid code: in bundling, in config/ia64/ia64.c
         (-mtune=merced)
!      * [231]16142  ICE  on valid code: in bundling, in config/ia64/ia64.c
         (-mtune=itanium)
!      * [232]16278 Gcc failed to build Linux kernel with -mtune=merced
!      * [233]16414  ICE on valid code: typo in comparison of asm_noperands
         result
!      * [234]16445 ICE on valid code: don't count ignored insns
!      * [235]16490 ICE (segfault) while compiling with -fprofile-use
!      * [236]16683 ia64 does not honor SUBTARGET_EXTRA_SPECS
  
      PowerPC-specific
  
!      * [237]16195 (ppc64): Miscompilation of GCC 3.3.x by 3.4.x
!      * [238]16239  ICE on ppc64 (mozilla 1.7 compile, -O1 -fno-exceptions
         issue)
  
      SPARC-specific
  
!      * [239]16199 ICE while compiling apache 2.0.49
!      * [240]16416 -m64 doesn't imply -mcpu=v9 anymore
!      * [241]16430  ICE  when  returning  non-C  aggregates larger than 16
         bytes
  
      Bugs specific to embedded processors
  
!      * [242]16379 [m32r] can't output large model function call of memcpy
!      * [243]17093 [m32r] ICE with -msdata=use -O0
!      * [244]17119 [m32r] ICE at switch case 0x8000
  
      DJGPP-specific
  
!      * [245]15928 libstdc++ in 3.4.x doesn't cross-compile for djgpp
  
      Alpha Tru64-specific
  
!      * [246]16210 libstdc++ gratuitously omits "long long" I/O
  
      Testsuite, documentation issues (compiler is not affected):
  
!      * [247]15488  (libstdc++) possibly insufficient file permissions for
         executing test suite
!      * [248]16250 ada/doctools runs makeinfo even in release tarball
!      _________________________________________________________________
  
  GCC 3.4.3
  
!    This is the [249]list of problem reports (PRs) from GCC's bug tracking
!    system  that  are  known  to  be fixed in the 3.4.3 release. This list
     might not be complete (that is, it is possible that some PRs that have
     been fixed are not listed here).
+ 
+     Bootstrap failures
+ 
+      * [250]17369 [ia64] Bootstrap failure with binutils-2.15.90.0.1.1
+      * [251]17850  [arm-elf]  bootstrap  failure - libstdc++ uses strtold
+        when undeclared
+ 
+     Internal compiler errors (ICEs) affecting multiple platforms
+ 
+      * [252]13948  (java)  GCJ segmentation fault while compiling GL4Java
+        .class files
+      * [253]14492 ICE in loc_descriptor_from_tree, in dwarf2out.c
+      * [254]16301  (c++)  ICE  when  "strong"  attribute is attached to a
+        using directive
+      * [255]16566 ICE with flexible arrays
+      * [256]17023 ICE with nested functions in parameter declaration
+      * [257]17027 ICE with noreturn function in loop at -O2
+      * [258]17524 ICE in grokdeclarator, in cp/decl.c
+      * [259]17826 (c++) ICE in cp_tree_equal
+ 
+     C and optimization bugs
+ 
+      * [260]15526 -ftrapv aborts on 0 * (-1)
+      * [261]16999 #ident stopped working
+      * [262]17503 quadratic behaviour in invalid_mode_change_p
+      * [263]17581   Long  long  arithmetic  fails  inside  a  switch/case
+        statement when compiled with -O2
+      * [264]18129 -fwritable-strings doesn't work
+ 
+     C++ compiler and library bugs
+ 
+      * [265]10975 incorrect initial ostringstream::tellp()
+      * [266]11722 Unbuffered filebuf::sgetn is slow
+      * [267]14534  Unrecognizing  static function as a template parameter
+        when its return value is also templated
+      * [268]15172    Copy    constructor    optimization   in   aggregate
+        initialization
+      * [269]15786 Bad error message for frequently occuring error.
+      * [270]16162 Rejects valid member-template-definition
+      * [271]16612 empty basic_strings can't live in shared memory
+      * [272]16715  std::basic_iostream  is  instantiated  when used, even
+        though instantiations are already contained in libstdc++
+      * [273]16848 code in /ext/demangle.h appears broken
+      * [274]17132 GCC fails to eliminate function template specialization
+        when argument deduction fails
+      * [275]17259  One more _S_leaf incorrectly qualified with _RopeRep::
+        in ropeimpl.h
+      * [276]17327 use of `enumeral_type' in template type unification
+      * [277]17393 "unused variable '._0'" warning with -Wall
+      * [278]17501 Confusion with member templates
+      * [279]17537  g++  not  passing  -lstdc++ to linker when all command
+        line arguments are libraries
+      * [280]17585  usage of unqualified name of static member from within
+        class not allowed
+      * [281]17821 Poor diagnostic for using "." instead of "->"
+      * [282]17829 wrong error: call of overloaded function is ambiguous
+      * [283]17851 Misleading diagnostic for invalid function declarations
+        with undeclared types
+      * [284]17976 Destructor is called twice
+      * [285]18020 rejects valid definition of enum value in template
+      * [286]18093 bogus conflict in namespace aliasing
+      * [287]18140 C++ parser bug when using >> in templates
+ 
+     Fortran
+ 
+      * [288]17541 data statements with double precision constants fail
+ 
+     x86-specific
+ 
+      * [289]17853 -O2 ICE for MMX testcase
+ 
+     SPARC-specific
+ 
+      * [290]17245 ICE compiling gsl-1.5 statistics/lag1.c
+ 
+     Darwin-specific
+ 
+      * [291]17167 FATAL:Symbol L_foo$stub already defined.
+ 
+     AIX-specific
+ 
+      * [292]17277 could not catch an exception when specified -maix64
+ 
+     Solaris-specific
+ 
+      * [293]17505  <cmath>  calls  acosf(),  ceilf(), and other functions
+        missing from system libraries
+ 
+     HP/UX specific:
+ 
+      * [294]17684 /usr/ccs/bin/ld: Can't create libgcc_s.sl
+ 
+     ARM-specific
+ 
+      * [295]17384 ICE with mode attribute on structures
+ 
+     MIPS-specific
+ 
+      * [296]17770 No NOP after LWL with -mips1
+ 
+     Other embedded target specific
+ 
+      * [297]11476 [arc-elf] gcc ICE on newlib's vfprintf.c
+      * [298]14064 [avr-elf] -fdata-sections triggers ICE
+      * [299]14678 [m68hc11-elf] gcc ICE
+      * [300]15583 [powerpc-rtems] powerpc-rtems lacks __USE_INIT_FINI__
+      * [301]15790 [i686-coff] Alignment error building gcc with i686-coff
+        target
+      * [302]15886 [SH] Miscompilation with -O2 -fPIC
+      * [303]16884   [avr-elf]   [fweb  related]  bug  while  initializing
+        variables
+ 
+     Bugs relating to debugger support
+ 
+      * [304]13841 missing debug info for _Complex function arguments
+      * [305]15860  [big-endian  targets]  No DW_AT_location debug info is
+        emitted  for  formal  arguments to a function that uses "register"
+        qualifiers
+ 
+     Testsuite issues (compiler not affected)
+ 
+      * [306]17465 Testsuite in libffi overrides LD_LIBRARY_PATH
+      * [307]17469 Testsuite in libstdc++ overrides LD_LIBRARY_PATH
+      * [308]18138  [mips-sgi-irix6.5]  libgcc_s.so.1  not found by 64-bit
+        testsuite
+ 
+     Documentation
+ 
+      * [309]15498  typo in gcc manual: non-existing locale example en_UK,
+        should be en_GB
+      * [310]15747  [mips-sgi-irix5.3]  /bin/sh  hangs  during  bootstrap:
+        document broken shell
+      * [311]16406 USE_LD_AS_NEEDED undocumented
       _________________________________________________________________
  
!    Please send FSF & GNU inquiries & questions to [312]gnu@gnu.org. There
!    are also [313]other ways to contact the FSF.
  
!    These pages are maintained by [314]the GCC team.
  
  
      For  questions  related  to the use of GCC, please consult these web
!     pages    and    the   [315]GCC   manuals.   If   that   fails,   the
!     [316]gcc-help@gcc.gnu.org mailing list might help.
      Please  send  comments on these web pages and the development of GCC
!     to    our    developer   mailing   list   at   [317]gcc@gnu.org   or
!     [318]gcc@gcc.gnu.org. All of our lists have [319]public archives.
  
     Copyright  (C) Free Software Foundation, Inc., 59 Temple Place - Suite
     330, Boston, MA 02111, USA.
*************** GCC 3.4.3
*** 1556,1822 ****
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-11-05 [257]Valid XHTML 1.0 
  
  References
  
!    1. http://gcc.gnu.org/gcc-3.4/changes.html#cplusplus
!    2. http://gcc.gnu.org/gcc-3.3/changes.html#obsolete_systems
!    3. http://gcc.gnu.org/gcc-3.4/changes.html#obsolete_systems
!    4. http://gcc.gnu.org/gcc-3.4/mips-abi.html
!    5. http://gcc.gnu.org/gcc-3.4/sparc-abi.html
!    6. http://www.boost.org/
!    7. http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11953
!    8. http://gcc.gnu.org/bugzilla/show_bug.cgi?id=8361
!    9. http://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html#Other%20Builtins
!   10. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#209
!   11. http://gcc.gnu.org/bugs.html#cxx_rvalbind
!   12. http://gcc.gnu.org/onlinedocs/gcc/Objective-C-Dialect-Options.html
!   13. http://gcc.gnu.org/onlinedocs/gcc/Objective-C-Dialect-Options.html
!   14. http://gcc.gnu.org/onlinedocs/gcc/Objective-C-Dialect-Options.html
!   15. http://www.gnu.org/software/classpath/
!   16. http://www.eclipse.org/
!   17. http://gcc.gnu.org/onlinedocs/g77/News.html
!   18. http://gcc.gnu.org/onlinedocs/gcc/Alpha-Built-in-Functions.html#Alpha%20Built-in%20Functions
!   19. http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V51A_HTML/ARH9MBTE/DTMNPLTN.HTM#normal-argument-list-structure
!   20. http://gcc.gnu.org/onlinedocs/gccint/Processor-pipeline-description.html
!   21. http://gcc.gnu.org/onlinedocs/gccint/Comparison-of-the-two-descriptions.html
!   22. http://gcc.gnu.org/onlinedocs/gccint/Processor-pipeline-description.html
!   23. http://gcc.gnu.org/gcc-3.4/mips-abi.html
!   24. http://www.opendarwin.org/projects/dlcompat/
!   25. http://gcc.gnu.org/gcc-3.4/sparc-abi.html
!   26. http://gcc.gnu.org/bugzilla/buglist.cgi?short_desc_type=notregexp&short_desc=%5C%5B3%5C.4.*%5BRr%5Degression&target_milestone=3.4.0&bug_status=RESOLVED&resolution=FIXED
!   27. http://gcc.gnu.org/PR10129
!   28. http://gcc.gnu.org/PR14576
!   29. http://gcc.gnu.org/PR14760
!   30. http://gcc.gnu.org/PR14671
!   31. http://gcc.gnu.org/PR15093
!   32. http://gcc.gnu.org/PR15178
!   33. http://gcc.gnu.org/PR12753
!   34. http://gcc.gnu.org/PR13985
!   35. http://gcc.gnu.org/PR14810
!   36. http://gcc.gnu.org/PR14883
!   37. http://gcc.gnu.org/PR15044
!   38. http://gcc.gnu.org/PR15057
!   39. http://gcc.gnu.org/PR15064
!   40. http://gcc.gnu.org/PR15142
!   41. http://gcc.gnu.org/PR15159
!   42. http://gcc.gnu.org/PR15165
!   43. http://gcc.gnu.org/PR15193
!   44. http://gcc.gnu.org/PR15209
!   45. http://gcc.gnu.org/PR15227
!   46. http://gcc.gnu.org/PR15285
!   47. http://gcc.gnu.org/PR15299
!   48. http://gcc.gnu.org/PR15329
!   49. http://gcc.gnu.org/PR15550
!   50. http://gcc.gnu.org/PR15554
!   51. http://gcc.gnu.org/PR15640
!   52. http://gcc.gnu.org/PR15666
!   53. http://gcc.gnu.org/PR15696
!   54. http://gcc.gnu.org/PR15701
!   55. http://gcc.gnu.org/PR15761
!   56. http://gcc.gnu.org/PR15829
!   57. http://gcc.gnu.org/PR14538
!   58. http://gcc.gnu.org/PR12391
!   59. http://gcc.gnu.org/PR14649
!   60. http://gcc.gnu.org/PR15004
!   61. http://gcc.gnu.org/PR15749
!   62. http://gcc.gnu.org/PR10646
!   63. http://gcc.gnu.org/PR12077
!   64. http://gcc.gnu.org/PR13598
!   65. http://gcc.gnu.org/PR14211
!   66. http://gcc.gnu.org/PR14220
!   67. http://gcc.gnu.org/PR14245
!   68. http://gcc.gnu.org/PR14340
!   69. http://gcc.gnu.org/PR14600
!   70. http://gcc.gnu.org/PR14668
!   71. http://gcc.gnu.org/PR14775
!   72. http://gcc.gnu.org/PR14821
!   73. http://gcc.gnu.org/PR14930
!   74. http://gcc.gnu.org/PR14932
!   75. http://gcc.gnu.org/PR14950
!   76. http://gcc.gnu.org/PR14962
!   77. http://gcc.gnu.org/PR14975
!   78. http://gcc.gnu.org/PR15002
!   79. http://gcc.gnu.org/PR15025
!   80. http://gcc.gnu.org/PR15046
!   81. http://gcc.gnu.org/PR15069
!   82. http://gcc.gnu.org/PR15074
!   83. http://gcc.gnu.org/PR15083
!   84. http://gcc.gnu.org/PR15096
!   85. http://gcc.gnu.org/PR15287
!   86. http://gcc.gnu.org/PR15317
!   87. http://gcc.gnu.org/PR15337
!   88. http://gcc.gnu.org/PR15361
!   89. http://gcc.gnu.org/PR15412
!   90. http://gcc.gnu.org/PR15427
!   91. http://gcc.gnu.org/PR15471
!   92. http://gcc.gnu.org/PR15503
!   93. http://gcc.gnu.org/PR15507
!   94. http://gcc.gnu.org/PR15542
!   95. http://gcc.gnu.org/PR15565
!   96. http://gcc.gnu.org/PR15625
!   97. http://gcc.gnu.org/PR15629
!   98. http://gcc.gnu.org/PR15742
!   99. http://gcc.gnu.org/PR15775
!  100. http://gcc.gnu.org/PR15821
!  101. http://gcc.gnu.org/PR15862
!  102. http://gcc.gnu.org/PR15875
!  103. http://gcc.gnu.org/PR15877
!  104. http://gcc.gnu.org/PR15947
!  105. http://gcc.gnu.org/PR16020
!  106. http://gcc.gnu.org/PR16154
!  107. http://gcc.gnu.org/PR16174
!  108. http://gcc.gnu.org/PR14315
!  109. http://gcc.gnu.org/PR15151
!  110. http://gcc.gnu.org/PR7993
!  111. http://gcc.gnu.org/PR15228
!  112. http://gcc.gnu.org/PR15345
!  113. http://gcc.gnu.org/PR15945
!  114. http://gcc.gnu.org/PR15526
!  115. http://gcc.gnu.org/PR14690
!  116. http://gcc.gnu.org/PR15112
!  117. http://gcc.gnu.org/PR15067
!  118. http://gcc.gnu.org/PR1963
!  119. http://gcc.gnu.org/PR15717
!  120. http://gcc.gnu.org/PR14782
!  121. http://gcc.gnu.org/PR14828
!  122. http://gcc.gnu.org/PR15202
!  123. http://gcc.gnu.org/PR14610
!  124. http://gcc.gnu.org/PR14813
!  125. http://gcc.gnu.org/PR14857
!  126. http://gcc.gnu.org/PR15598
!  127. http://gcc.gnu.org/PR15653
!  128. http://gcc.gnu.org/PR15189
!  129. http://gcc.gnu.org/PR15331
!  130. http://gcc.gnu.org/PR16144
!  131. http://gcc.gnu.org/PR16176
!  132. http://gcc.gnu.org/PR11591
!  133. http://gcc.gnu.org/PR12028
!  134. http://gcc.gnu.org/PR14478
!  135. http://gcc.gnu.org/PR14567
!  136. http://gcc.gnu.org/PR14715
!  137. http://gcc.gnu.org/PR14902
!  138. http://gcc.gnu.org/PR14924
!  139. http://gcc.gnu.org/PR14960
!  140. http://gcc.gnu.org/PR15106
!  141. http://gcc.gnu.org/PR16026
!  142. http://gcc.gnu.org/PR15191
!  143. http://gcc.gnu.org/PR15662
!  144. http://gcc.gnu.org/PR15054
!  145. http://gcc.gnu.org/PR15783
!  146. http://gcc.gnu.org/PR15626
!  147. http://gcc.gnu.org/PR14326
!  148. http://gcc.gnu.org/PR14723
!  149. http://gcc.gnu.org/PR15290
!  150. http://gcc.gnu.org/PR15250
!  151. http://gcc.gnu.org/PR15551
!  152. http://gcc.gnu.org/PR8309
!  153. http://gcc.gnu.org/PR13250
!  154. http://gcc.gnu.org/PR13803
!  155. http://gcc.gnu.org/PR14093
!  156. http://gcc.gnu.org/PR14457
!  157. http://gcc.gnu.org/PR14542
!  158. http://gcc.gnu.org/PR15100
!  159. http://gcc.gnu.org/PR15296
!  160. http://gcc.gnu.org/PR15396
!  161. http://gcc.gnu.org/PR15782
!  162. http://gcc.gnu.org/PR11610
!  163. http://gcc.gnu.org/PR15488
!  164. http://gcc.gnu.org/PR15489
!  165. http://gcc.gnu.org/PR13928
!  166. http://gcc.gnu.org/PR14150
!  167. http://gcc.gnu.org/PR14949
!  168. http://gcc.gnu.org/PR15123
!  169. http://gcc.gnu.org/PR16469
!  170. http://gcc.gnu.org/PR16344
!  171. http://gcc.gnu.org/PR16842
!  172. http://gcc.gnu.org/PR12608
!  173. http://gcc.gnu.org/PR14492
!  174. http://gcc.gnu.org/PR15461
!  175. http://gcc.gnu.org/PR15890
!  176. http://gcc.gnu.org/PR16180
!  177. http://gcc.gnu.org/PR16224
!  178. http://gcc.gnu.org/PR16408
!  179. http://gcc.gnu.org/PR16529
!  180. http://gcc.gnu.org/PR16698
!  181. http://gcc.gnu.org/PR16706
!  182. http://gcc.gnu.org/PR16810
!  183. http://gcc.gnu.org/PR16851
!  184. http://gcc.gnu.org/PR16870
!  185. http://gcc.gnu.org/PR16904
!  186. http://gcc.gnu.org/PR16905
!  187. http://gcc.gnu.org/PR16964
!  188. http://gcc.gnu.org/PR17068
!  189. http://gcc.gnu.org/PR16366
!  190. http://gcc.gnu.org/PR15345
!  191. http://gcc.gnu.org/PR16590
!  192. http://gcc.gnu.org/PR16693
!  193. http://gcc.gnu.org/PR17078
!  194. http://gcc.gnu.org/PR13956
!  195. http://gcc.gnu.org/PR16684
!  196. http://gcc.gnu.org/PR12658
!  197. http://gcc.gnu.org/PR13092
!  198. http://gcc.gnu.org/PR15320
!  199. http://gcc.gnu.org/PR16246
!  200. http://gcc.gnu.org/PR16273
!  201. http://gcc.gnu.org/PR16401
!  202. http://gcc.gnu.org/PR16411
!  203. http://gcc.gnu.org/PR16489
!  204. http://gcc.gnu.org/PR16618
!  205. http://gcc.gnu.org/PR16637
!  206. http://gcc.gnu.org/PR16717
!  207. http://gcc.gnu.org/PR16813
!  208. http://gcc.gnu.org/PR16853
!  209. http://gcc.gnu.org/PR16889
!  210. http://gcc.gnu.org/PR16959
!  211. http://gcc.gnu.org/PR7587
!  212. http://gcc.gnu.org/PR16473
!  213. http://gcc.gnu.org/PR16478
!  214. http://gcc.gnu.org/PR10695
!  215. http://gcc.gnu.org/PR16974
!  216. http://gcc.gnu.org/PR16298
!  217. http://gcc.gnu.org/PR17113
!  218. http://gcc.gnu.org/PR17171
!  219. http://gcc.gnu.org/PR14697
!  220. http://gcc.gnu.org/PR15869
!  221. http://gcc.gnu.org/PR16325
!  222. http://gcc.gnu.org/PR16357
!  223. http://gcc.gnu.org/PR16380
!  224. http://gcc.gnu.org/PR16407
!  225. http://gcc.gnu.org/PR16643
!  226. http://gcc.gnu.org/PR15927
!  227. http://gcc.gnu.org/PR15948
!  228. http://gcc.gnu.org/PR17019
!  229. http://gcc.gnu.org/PR16130
!  230. http://gcc.gnu.org/PR16142
!  231. http://gcc.gnu.org/PR16278
!  232. http://gcc.gnu.org/PR16414
!  233. http://gcc.gnu.org/PR16445
!  234. http://gcc.gnu.org/PR16490
!  235. http://gcc.gnu.org/PR16683
!  236. http://gcc.gnu.org/PR16195
!  237. http://gcc.gnu.org/PR16239
!  238. http://gcc.gnu.org/PR16199
!  239. http://gcc.gnu.org/PR16416
!  240. http://gcc.gnu.org/PR16430
!  241. http://gcc.gnu.org/PR16379
!  242. http://gcc.gnu.org/PR17093
!  243. http://gcc.gnu.org/PR17119
!  244. http://gcc.gnu.org/PR15928
!  245. http://gcc.gnu.org/PR16210
!  246. http://gcc.gnu.org/PR15488
!  247. http://gcc.gnu.org/PR16250
!  248. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.3
!  249. mailto:gnu@gnu.org
!  250. http://www.gnu.org/home.html#ContactInfo
!  251. http://gcc.gnu.org/about.html
!  252. http://gcc.gnu.org/onlinedocs/
!  253. mailto:gcc-help@gcc.gnu.org
!  254. mailto:gcc@gnu.org
!  255. mailto:gcc@gcc.gnu.org
!  256. http://gcc.gnu.org/lists.html
!  257. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-3.3/index.html
  
--- 2274,2603 ----
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2005-02-17 [320]Valid XHTML 1.0 
  
  References
  
!    1. http://gcc.gnu.org/gcc-3.4/changes.html#3.4.3
!    2. http://gcc.gnu.org/gcc-3.4/changes.html#cplusplus
!    3. http://gcc.gnu.org/gcc-3.3/changes.html#obsolete_systems
!    4. http://gcc.gnu.org/gcc-3.4/changes.html#obsolete_systems
!    5. http://gcc.gnu.org/gcc-3.4/mips-abi.html
!    6. http://gcc.gnu.org/gcc-3.4/sparc-abi.html
!    7. http://www.boost.org/
!    8. http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11953
!    9. http://gcc.gnu.org/bugzilla/show_bug.cgi?id=8361
!   10. http://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Other-Builtins.html#Other%20Builtins
!   11. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#209
!   12. http://gcc.gnu.org/bugs.html#cxx_rvalbind
!   13. http://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Objective-C-Dialect-Options.html
!   14. http://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Objective-C-Dialect-Options.html
!   15. http://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Objective-C-Dialect-Options.html
!   16. http://www.gnu.org/software/classpath/
!   17. http://www.eclipse.org/
!   18. http://gcc.gnu.org/onlinedocs/gcc-3.4.3/g77/News.html
!   19. http://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Alpha-Built-in-Functions.html
!   20. http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V51A_HTML/ARH9MBTE/DTMNPLTN.HTM#normal-argument-list-structure
!   21. http://gcc.gnu.org/onlinedocs/gcc-3.4.3/gccint/Processor-pipeline-description.html
!   22. http://gcc.gnu.org/onlinedocs/gcc-3.4.3/gccint/Comparison-of-the-two-descriptions.html
!   23. http://gcc.gnu.org/onlinedocs/gcc-3.4.3/gccint/Processor-pipeline-description.html
!   24. http://gcc.gnu.org/gcc-3.4/mips-abi.html
!   25. http://gcc.gnu.org/gcc-3.4/powerpc-abi.html
!   26. http://www.opendarwin.org/projects/dlcompat/
!   27. http://gcc.gnu.org/gcc-3.4/sparc-abi.html
!   28. http://gcc.gnu.org/bugzilla/buglist.cgi?short_desc_type=notregexp&short_desc=%5C%5B3%5C.4.*%5BRr%5Degression&target_milestone=3.4.0&bug_status=RESOLVED&resolution=FIXED
!   29. http://gcc.gnu.org/PR10129
!   30. http://gcc.gnu.org/PR14576
!   31. http://gcc.gnu.org/PR14760
!   32. http://gcc.gnu.org/PR14671
!   33. http://gcc.gnu.org/PR15093
!   34. http://gcc.gnu.org/PR15178
!   35. http://gcc.gnu.org/PR12753
!   36. http://gcc.gnu.org/PR13985
!   37. http://gcc.gnu.org/PR14810
!   38. http://gcc.gnu.org/PR14883
!   39. http://gcc.gnu.org/PR15044
!   40. http://gcc.gnu.org/PR15057
!   41. http://gcc.gnu.org/PR15064
!   42. http://gcc.gnu.org/PR15142
!   43. http://gcc.gnu.org/PR15159
!   44. http://gcc.gnu.org/PR15165
!   45. http://gcc.gnu.org/PR15193
!   46. http://gcc.gnu.org/PR15209
!   47. http://gcc.gnu.org/PR15227
!   48. http://gcc.gnu.org/PR15285
!   49. http://gcc.gnu.org/PR15299
!   50. http://gcc.gnu.org/PR15329
!   51. http://gcc.gnu.org/PR15550
!   52. http://gcc.gnu.org/PR15554
!   53. http://gcc.gnu.org/PR15640
!   54. http://gcc.gnu.org/PR15666
!   55. http://gcc.gnu.org/PR15696
!   56. http://gcc.gnu.org/PR15701
!   57. http://gcc.gnu.org/PR15761
!   58. http://gcc.gnu.org/PR15829
!   59. http://gcc.gnu.org/PR14538
!   60. http://gcc.gnu.org/PR12391
!   61. http://gcc.gnu.org/PR14649
!   62. http://gcc.gnu.org/PR15004
!   63. http://gcc.gnu.org/PR15749
!   64. http://gcc.gnu.org/PR10646
!   65. http://gcc.gnu.org/PR12077
!   66. http://gcc.gnu.org/PR13598
!   67. http://gcc.gnu.org/PR14211
!   68. http://gcc.gnu.org/PR14220
!   69. http://gcc.gnu.org/PR14245
!   70. http://gcc.gnu.org/PR14340
!   71. http://gcc.gnu.org/PR14600
!   72. http://gcc.gnu.org/PR14668
!   73. http://gcc.gnu.org/PR14775
!   74. http://gcc.gnu.org/PR14821
!   75. http://gcc.gnu.org/PR14930
!   76. http://gcc.gnu.org/PR14932
!   77. http://gcc.gnu.org/PR14950
!   78. http://gcc.gnu.org/PR14962
!   79. http://gcc.gnu.org/PR14975
!   80. http://gcc.gnu.org/PR15002
!   81. http://gcc.gnu.org/PR15025
!   82. http://gcc.gnu.org/PR15046
!   83. http://gcc.gnu.org/PR15069
!   84. http://gcc.gnu.org/PR15074
!   85. http://gcc.gnu.org/PR15083
!   86. http://gcc.gnu.org/PR15096
!   87. http://gcc.gnu.org/PR15287
!   88. http://gcc.gnu.org/PR15317
!   89. http://gcc.gnu.org/PR15337
!   90. http://gcc.gnu.org/PR15361
!   91. http://gcc.gnu.org/PR15412
!   92. http://gcc.gnu.org/PR15427
!   93. http://gcc.gnu.org/PR15471
!   94. http://gcc.gnu.org/PR15503
!   95. http://gcc.gnu.org/PR15507
!   96. http://gcc.gnu.org/PR15542
!   97. http://gcc.gnu.org/PR15565
!   98. http://gcc.gnu.org/PR15625
!   99. http://gcc.gnu.org/PR15629
!  100. http://gcc.gnu.org/PR15742
!  101. http://gcc.gnu.org/PR15775
!  102. http://gcc.gnu.org/PR15821
!  103. http://gcc.gnu.org/PR15862
!  104. http://gcc.gnu.org/PR15875
!  105. http://gcc.gnu.org/PR15877
!  106. http://gcc.gnu.org/PR15947
!  107. http://gcc.gnu.org/PR16020
!  108. http://gcc.gnu.org/PR16154
!  109. http://gcc.gnu.org/PR16174
!  110. http://gcc.gnu.org/PR14315
!  111. http://gcc.gnu.org/PR15151
!  112. http://gcc.gnu.org/PR7993
!  113. http://gcc.gnu.org/PR15228
!  114. http://gcc.gnu.org/PR15345
!  115. http://gcc.gnu.org/PR15945
!  116. http://gcc.gnu.org/PR15526
!  117. http://gcc.gnu.org/PR14690
!  118. http://gcc.gnu.org/PR15112
!  119. http://gcc.gnu.org/PR15067
!  120. http://gcc.gnu.org/PR1963
!  121. http://gcc.gnu.org/PR15717
!  122. http://gcc.gnu.org/PR14782
!  123. http://gcc.gnu.org/PR14828
!  124. http://gcc.gnu.org/PR15202
!  125. http://gcc.gnu.org/PR14610
!  126. http://gcc.gnu.org/PR14813
!  127. http://gcc.gnu.org/PR14857
!  128. http://gcc.gnu.org/PR15598
!  129. http://gcc.gnu.org/PR15653
!  130. http://gcc.gnu.org/PR15189
!  131. http://gcc.gnu.org/PR15331
!  132. http://gcc.gnu.org/PR16144
!  133. http://gcc.gnu.org/PR16176
!  134. http://gcc.gnu.org/PR11591
!  135. http://gcc.gnu.org/PR12028
!  136. http://gcc.gnu.org/PR14478
!  137. http://gcc.gnu.org/PR14567
!  138. http://gcc.gnu.org/PR14715
!  139. http://gcc.gnu.org/PR14902
!  140. http://gcc.gnu.org/PR14924
!  141. http://gcc.gnu.org/PR14960
!  142. http://gcc.gnu.org/PR15106
!  143. http://gcc.gnu.org/PR16026
!  144. http://gcc.gnu.org/PR15191
!  145. http://gcc.gnu.org/PR15662
!  146. http://gcc.gnu.org/PR15054
!  147. http://gcc.gnu.org/PR15783
!  148. http://gcc.gnu.org/PR15626
!  149. http://gcc.gnu.org/PR14326
!  150. http://gcc.gnu.org/PR14723
!  151. http://gcc.gnu.org/PR15290
!  152. http://gcc.gnu.org/PR15250
!  153. http://gcc.gnu.org/PR15551
!  154. http://gcc.gnu.org/PR8309
!  155. http://gcc.gnu.org/PR13250
!  156. http://gcc.gnu.org/PR13803
!  157. http://gcc.gnu.org/PR14093
!  158. http://gcc.gnu.org/PR14457
!  159. http://gcc.gnu.org/PR14542
!  160. http://gcc.gnu.org/PR15100
!  161. http://gcc.gnu.org/PR15296
!  162. http://gcc.gnu.org/PR15396
!  163. http://gcc.gnu.org/PR15782
!  164. http://gcc.gnu.org/PR11610
!  165. http://gcc.gnu.org/PR15488
!  166. http://gcc.gnu.org/PR15489
!  167. http://gcc.gnu.org/PR13928
!  168. http://gcc.gnu.org/PR14150
!  169. http://gcc.gnu.org/PR14949
!  170. http://gcc.gnu.org/PR15123
!  171. http://gcc.gnu.org/PR16469
!  172. http://gcc.gnu.org/PR16344
!  173. http://gcc.gnu.org/PR16842
!  174. http://gcc.gnu.org/PR12608
!  175. http://gcc.gnu.org/PR14492
!  176. http://gcc.gnu.org/PR15461
!  177. http://gcc.gnu.org/PR15890
!  178. http://gcc.gnu.org/PR16180
!  179. http://gcc.gnu.org/PR16224
!  180. http://gcc.gnu.org/PR16408
!  181. http://gcc.gnu.org/PR16529
!  182. http://gcc.gnu.org/PR16698
!  183. http://gcc.gnu.org/PR16706
!  184. http://gcc.gnu.org/PR16810
!  185. http://gcc.gnu.org/PR16851
!  186. http://gcc.gnu.org/PR16870
!  187. http://gcc.gnu.org/PR16904
!  188. http://gcc.gnu.org/PR16905
!  189. http://gcc.gnu.org/PR16964
!  190. http://gcc.gnu.org/PR17068
!  191. http://gcc.gnu.org/PR16366
!  192. http://gcc.gnu.org/PR15345
!  193. http://gcc.gnu.org/PR16590
!  194. http://gcc.gnu.org/PR16693
!  195. http://gcc.gnu.org/PR17078
!  196. http://gcc.gnu.org/PR13956
!  197. http://gcc.gnu.org/PR16684
!  198. http://gcc.gnu.org/PR12658
!  199. http://gcc.gnu.org/PR13092
!  200. http://gcc.gnu.org/PR15320
!  201. http://gcc.gnu.org/PR16246
!  202. http://gcc.gnu.org/PR16273
!  203. http://gcc.gnu.org/PR16401
!  204. http://gcc.gnu.org/PR16411
!  205. http://gcc.gnu.org/PR16489
!  206. http://gcc.gnu.org/PR16618
!  207. http://gcc.gnu.org/PR16637
!  208. http://gcc.gnu.org/PR16717
!  209. http://gcc.gnu.org/PR16813
!  210. http://gcc.gnu.org/PR16853
!  211. http://gcc.gnu.org/PR16889
!  212. http://gcc.gnu.org/PR16959
!  213. http://gcc.gnu.org/PR7587
!  214. http://gcc.gnu.org/PR16473
!  215. http://gcc.gnu.org/PR16478
!  216. http://gcc.gnu.org/PR10695
!  217. http://gcc.gnu.org/PR16974
!  218. http://gcc.gnu.org/PR16298
!  219. http://gcc.gnu.org/PR17113
!  220. http://gcc.gnu.org/PR14697
!  221. http://gcc.gnu.org/PR15869
!  222. http://gcc.gnu.org/PR16325
!  223. http://gcc.gnu.org/PR16357
!  224. http://gcc.gnu.org/PR16380
!  225. http://gcc.gnu.org/PR16407
!  226. http://gcc.gnu.org/PR16643
!  227. http://gcc.gnu.org/PR15927
!  228. http://gcc.gnu.org/PR15948
!  229. http://gcc.gnu.org/PR17019
!  230. http://gcc.gnu.org/PR16130
!  231. http://gcc.gnu.org/PR16142
!  232. http://gcc.gnu.org/PR16278
!  233. http://gcc.gnu.org/PR16414
!  234. http://gcc.gnu.org/PR16445
!  235. http://gcc.gnu.org/PR16490
!  236. http://gcc.gnu.org/PR16683
!  237. http://gcc.gnu.org/PR16195
!  238. http://gcc.gnu.org/PR16239
!  239. http://gcc.gnu.org/PR16199
!  240. http://gcc.gnu.org/PR16416
!  241. http://gcc.gnu.org/PR16430
!  242. http://gcc.gnu.org/PR16379
!  243. http://gcc.gnu.org/PR17093
!  244. http://gcc.gnu.org/PR17119
!  245. http://gcc.gnu.org/PR15928
!  246. http://gcc.gnu.org/PR16210
!  247. http://gcc.gnu.org/PR15488
!  248. http://gcc.gnu.org/PR16250
!  249. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.3
!  250. http://gcc.gnu.org/PR17369
!  251. http://gcc.gnu.org/PR17850
!  252. http://gcc.gnu.org/PR13948
!  253. http://gcc.gnu.org/PR14492
!  254. http://gcc.gnu.org/PR16301
!  255. http://gcc.gnu.org/PR16566
!  256. http://gcc.gnu.org/PR17023
!  257. http://gcc.gnu.org/PR17027
!  258. http://gcc.gnu.org/PR17524
!  259. http://gcc.gnu.org/PR17826
!  260. http://gcc.gnu.org/PR15526
!  261. http://gcc.gnu.org/PR16999
!  262. http://gcc.gnu.org/PR17503
!  263. http://gcc.gnu.org/PR17581
!  264. http://gcc.gnu.org/PR18129
!  265. http://gcc.gnu.org/PR10975
!  266. http://gcc.gnu.org/PR11722
!  267. http://gcc.gnu.org/PR14534
!  268. http://gcc.gnu.org/PR15172
!  269. http://gcc.gnu.org/PR15786
!  270. http://gcc.gnu.org/PR16162
!  271. http://gcc.gnu.org/PR16612
!  272. http://gcc.gnu.org/PR16715
!  273. http://gcc.gnu.org/PR16848
!  274. http://gcc.gnu.org/PR17132
!  275. http://gcc.gnu.org/PR17259
!  276. http://gcc.gnu.org/PR17327
!  277. http://gcc.gnu.org/PR17393
!  278. http://gcc.gnu.org/PR17501
!  279. http://gcc.gnu.org/PR17537
!  280. http://gcc.gnu.org/PR17585
!  281. http://gcc.gnu.org/PR17821
!  282. http://gcc.gnu.org/PR17829
!  283. http://gcc.gnu.org/PR17851
!  284. http://gcc.gnu.org/PR17976
!  285. http://gcc.gnu.org/PR18020
!  286. http://gcc.gnu.org/PR18093
!  287. http://gcc.gnu.org/PR18140
!  288. http://gcc.gnu.org/PR17541
!  289. http://gcc.gnu.org/PR17853
!  290. http://gcc.gnu.org/PR17245
!  291. http://gcc.gnu.org/PR17167
!  292. http://gcc.gnu.org/PR17277
!  293. http://gcc.gnu.org/PR17505
!  294. http://gcc.gnu.org/PR17684
!  295. http://gcc.gnu.org/PR17384
!  296. http://gcc.gnu.org/PR17770
!  297. http://gcc.gnu.org/PR11476
!  298. http://gcc.gnu.org/PR14064
!  299. http://gcc.gnu.org/PR14678
!  300. http://gcc.gnu.org/PR15583
!  301. http://gcc.gnu.org/PR15790
!  302. http://gcc.gnu.org/PR15886
!  303. http://gcc.gnu.org/PR16884
!  304. http://gcc.gnu.org/PR13841
!  305. http://gcc.gnu.org/PR15860
!  306. http://gcc.gnu.org/PR17465
!  307. http://gcc.gnu.org/PR17469
!  308. http://gcc.gnu.org/PR18138
!  309. http://gcc.gnu.org/PR15498
!  310. http://gcc.gnu.org/PR15747
!  311. http://gcc.gnu.org/PR16406
!  312. mailto:gnu@gnu.org
!  313. http://www.gnu.org/home.html#ContactInfo
!  314. http://gcc.gnu.org/about.html
!  315. http://gcc.gnu.org/onlinedocs/
!  316. mailto:gcc-help@gcc.gnu.org
!  317. mailto:gcc@gnu.org
!  318. mailto:gcc@gcc.gnu.org
!  319. http://gcc.gnu.org/lists.html
!  320. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-3.3/index.html
  
*************** http://gcc.gnu.org/gcc-3.3/index.html
*** 1834,1839 ****
--- 2615,2626 ----
  
  Release History
  
+    GCC 3.3.5
+           September 30, 2004
+ 
+    GCC 3.3.4
+           May 31, 2004
+ 
     GCC 3.3.3
            February 14, 2004 ([4]changes)
  
*************** References and Acknowledgements
*** 1886,1892 ****
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-08-06 [23]Valid XHTML 1.0 
  
  References
  
--- 2673,2679 ----
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2005-01-25 [23]Valid XHTML 1.0 
  
  References
  
*************** GCC 3.3.3
*** 3258,3264 ****
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-08-06 [558]Valid XHTML 1.0 
  
  References
  
--- 4045,4051 ----
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-11-14 [558]Valid XHTML 1.0 
  
  References
  
*************** References and Acknowledgements
*** 3896,3902 ****
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-08-06 [22]Valid XHTML 1.0 
  
  References
  
--- 4683,4689 ----
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-11-14 [22]Valid XHTML 1.0 
  
  References
  
*************** GCC 3.2.3
*** 4079,4085 ****
       * [44]9954: Cross-build for target i586-pc-linux-gnu (--with-newlib)
         failed
  
!     Sparc-specific:
  
       * [45]7784: [Sparc] ICE in extract_insn, in recog.c
       * [46]7796:  sparc  extra failure with -m64 on execute/930921-1.c in
--- 4866,4872 ----
       * [44]9954: Cross-build for target i586-pc-linux-gnu (--with-newlib)
         failed
  
!     SPARC-specific:
  
       * [45]7784: [Sparc] ICE in extract_insn, in recog.c
       * [46]7796:  sparc  extra failure with -m64 on execute/930921-1.c in
*************** GCC 3.2
*** 4537,4543 ****
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-08-30 [254]Valid XHTML 1.0 
  
  References
  
--- 5324,5330 ----
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-11-14 [254]Valid XHTML 1.0 
  
  References
  
*************** http://gcc.gnu.org/gcc-3.1/index.html
*** 4851,4857 ****
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-08-06 [19]Valid XHTML 1.0 
  
  References
  
--- 5638,5644 ----
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-11-14 [19]Valid XHTML 1.0 
  
  References
  
*************** Documentation improvements
*** 5220,5226 ****
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-08-06 [21]Valid XHTML 1.0 
  
  References
  
--- 6007,6013 ----
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-11-14 [21]Valid XHTML 1.0 
  
  References
  
*************** Previous 3.0.x Releases
*** 5308,5314 ****
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-08-06 [19]Valid XHTML 1.0 
  
  References
  
--- 6095,6101 ----
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-11-14 [19]Valid XHTML 1.0 
  
  References
  
*************** Other significant improvements
*** 5513,5519 ****
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-08-06 [22]Valid XHTML 1.0 
  
  References
  
--- 6300,6306 ----
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-11-14 [22]Valid XHTML 1.0 
  
  References
  
*************** http://gcc.gnu.org/gcc-3.0/caveats.html
*** 5597,5603 ****
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-08-06 [12]Valid XHTML 1.0 
  
  References
  
--- 6384,6390 ----
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-11-14 [12]Valid XHTML 1.0 
  
  References
  
*************** http://gcc.gnu.org/gcc-2.95/index.html
*** 5681,5687 ****
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-08-06 [21]Valid XHTML 1.0 
  
  References
  
--- 6468,6474 ----
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-11-14 [21]Valid XHTML 1.0 
  
  References
  
*************** http://gcc.gnu.org/gcc-2.95/features.htm
*** 5737,5743 ****
            + More  support  for  various  pragmas  which  appear in vendor
              include files
       * New Targets and Target Specific Improvements
!           + [14]Sparc backend rewrite.
            + -mschedule=8000   will   optimize   code   for  PA8000  class
              processors;   -mpa-risc-2-0  will  generate  code  for  PA2.0
              processors
--- 6524,6530 ----
            + More  support  for  various  pragmas  which  appear in vendor
              include files
       * New Targets and Target Specific Improvements
!           + [14]SPARC backend rewrite.
            + -mschedule=8000   will   optimize   code   for  PA8000  class
              processors;   -mpa-risc-2-0  will  generate  code  for  PA2.0
              processors
*************** http://gcc.gnu.org/gcc-2.95/features.htm
*** 5751,5757 ****
              -mcpu=403.   -mcpu=e603e  was  added  to  do  -mcpu=603e  and
              -msoft-float.
            + c3x, c4x
!           + HyperSparc
            + SparcLite86x
            + sh4
            + Support  for  new  systems  (OpenBSD, FreeBSD, UWIN, Interix,
--- 6538,6544 ----
              -mcpu=403.   -mcpu=e603e  was  added  to  do  -mcpu=603e  and
              -msoft-float.
            + c3x, c4x
!           + HyperSPARC
            + SparcLite86x
            + sh4
            + Support  for  new  systems  (OpenBSD, FreeBSD, UWIN, Interix,
*************** Additional Changes in GCC 2.95.2
*** 5862,5868 ****
              of  an  obscure  series  of  bit  manipulations,  shifts  and
              arithmetic.
            + Fixed  register  allocator  bug  which  caused  teTeX  to  be
!             mis-compiled on Sparc targets.
            + Avoid  incorrect  optimization  of degenerate case statements
              for certain targets such as the ARM.
            + Fix out of range memory reference in the jump optimizer.
--- 6649,6655 ----
              of  an  obscure  series  of  bit  manipulations,  shifts  and
              arithmetic.
            + Fixed  register  allocator  bug  which  caused  teTeX  to  be
!             mis-compiled on SPARC targets.
            + Avoid  incorrect  optimization  of degenerate case statements
              for certain targets such as the ARM.
            + Fix out of range memory reference in the jump optimizer.
*************** Additional Changes in GCC 2.95.2
*** 5877,5884 ****
              targets (for example the ARM).
       * Platform specific bugfixes and improvements
            + Work  around bug in Sun V5.0 compilers which caused bootstrap
!             comparison failures on Sparc targets.
!           + Fix Sparc backend bug which caused aborts in final.c.
            + Fix sparc-hal-solaris2* configuration fragments.
            + Fix bug in sparc block profiling.
            + Fix obscure code generation bug for the PARISC targets.
--- 6664,6671 ----
              targets (for example the ARM).
       * Platform specific bugfixes and improvements
            + Work  around bug in Sun V5.0 compilers which caused bootstrap
!             comparison failures on SPARC targets.
!           + Fix SPARC backend bug which caused aborts in final.c.
            + Fix sparc-hal-solaris2* configuration fragments.
            + Fix bug in sparc block profiling.
            + Fix obscure code generation bug for the PARISC targets.
*************** Additional Changes in GCC 2.95.3
*** 5961,5967 ****
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-08-06 [25]Valid XHTML 1.0 
  
  References
  
--- 6748,6754 ----
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-11-14 [25]Valid XHTML 1.0 
  
  References
  
*************** http://gcc.gnu.org/gcc-2.95/caveats.html
*** 6055,6061 ****
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-08-06 [10]Valid XHTML 1.0 
  
  References
  
--- 6842,6848 ----
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-11-14 [10]Valid XHTML 1.0 
  
  References
  
*************** http://gcc.gnu.org/egcs-1.1/index.html
*** 6287,6293 ****
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-08-06 [19]Valid XHTML 1.0 
  
  References
  
--- 7074,7080 ----
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-11-14 [19]Valid XHTML 1.0 
  
  References
  
*************** http://gcc.gnu.org/egcs-1.1/features.htm
*** 6402,6408 ****
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-08-06 [14]Valid XHTML 1.0 
  
  References
  
--- 7189,7195 ----
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-11-14 [14]Valid XHTML 1.0 
  
  References
  
*************** http://gcc.gnu.org/egcs-1.1/caveats.html
*** 6468,6474 ****
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-08-06 [9]Valid XHTML 1.0 
  
  References
  
--- 7255,7261 ----
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-11-14 [9]Valid XHTML 1.0 
  
  References
  
*************** http://gcc.gnu.org/egcs-1.0/egcs-1.0.3.h
*** 6577,6583 ****
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-08-06 [14]Valid XHTML 1.0 
  
  References
  
--- 7364,7370 ----
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-11-14 [14]Valid XHTML 1.0 
  
  References
  
*************** http://gcc.gnu.org/egcs-1.0/egcs-1.0.2.h
*** 6722,6728 ****
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-08-06 [14]Valid XHTML 1.0 
  
  References
  
--- 7509,7515 ----
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-11-14 [14]Valid XHTML 1.0 
  
  References
  
*************** http://gcc.gnu.org/egcs-1.0/egcs-1.0.1.h
*** 6867,6873 ****
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-08-06 [14]Valid XHTML 1.0 
  
  References
  
--- 7654,7660 ----
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-11-14 [14]Valid XHTML 1.0 
  
  References
  
*************** http://gcc.gnu.org/egcs-1.0/egcs-1.0.htm
*** 6969,6975 ****
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-08-06 [14]Valid XHTML 1.0 
  
  References
  
--- 7756,7762 ----
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-11-14 [14]Valid XHTML 1.0 
  
  References
  
*************** http://gcc.gnu.org/egcs-1.0/features.htm
*** 7048,7054 ****
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-08-06 [11]Valid XHTML 1.0 
  
  References
  
--- 7835,7841 ----
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-11-14 [11]Valid XHTML 1.0 
  
  References
  
*************** http://gcc.gnu.org/egcs-1.0/caveats.html
*** 7113,7119 ****
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-08-06 [9]Valid XHTML 1.0 
  
  References
  
--- 7900,7906 ----
     Verbatim  copying and distribution of this entire article is permitted
     in any medium, provided this notice is preserved.
  
!    Last modified 2004-11-14 [9]Valid XHTML 1.0 
  
  References
  
diff -Nrcpad gcc-3.4.3/README.SCO gcc-4.0.0/README.SCO
*** gcc-3.4.3/README.SCO	Mon Nov  1 02:18:52 2004
--- gcc-4.0.0/README.SCO	Mon Nov  1 02:19:48 2004
*************** For more on the FSF's position regarding
*** 7,10 ****
  software, please read:
  
    http://www.gnu.org/philosophy/sco/sco.html
- 
--- 7,9 ----
diff -Nrcpad gcc-3.4.3/boehm-gc/.cvsignore gcc-4.0.0/boehm-gc/.cvsignore
*** gcc-3.4.3/boehm-gc/.cvsignore	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/boehm-gc/.cvsignore	Tue Jun 15 07:42:06 2004
***************
*** 0 ****
--- 1 ----
+ autom4te.cache
diff -Nrcpad gcc-3.4.3/boehm-gc/BCC_MAKEFILE gcc-4.0.0/boehm-gc/BCC_MAKEFILE
*** gcc-3.4.3/boehm-gc/BCC_MAKEFILE	Mon Jul 28 04:18:19 2003
--- gcc-4.0.0/boehm-gc/BCC_MAKEFILE	Fri Aug 13 23:05:28 2004
*************** link=	 $(bcbin)\ilink32
*** 16,22 ****
  cflags=  -O2 -R -v- -vi -H -H=gc.csm -I$(bcinclude);$(gcinclude1);$(gcinclude2) -L$(bclib) \
  	 -w-pro -w-aus -w-par -w-ccc -w-rch -a4 -D__STDC__=0
  #defines= -DSILENT
! defines= -DSMALL_CONFIG -DSILENT -DALL_INTERIOR_POINTERS -DUSE_GENERIC -DNO_GETENV -DJAVA_FINALIZATION -DGC_OPERATOR_NEW_ARRAY
  
  .c.obj:
  	$(cc) @&&|
--- 16,22 ----
  cflags=  -O2 -R -v- -vi -H -H=gc.csm -I$(bcinclude);$(gcinclude1);$(gcinclude2) -L$(bclib) \
  	 -w-pro -w-aus -w-par -w-ccc -w-rch -a4 -D__STDC__=0
  #defines= -DSILENT
! defines= -DSILENT -DALL_INTERIOR_POINTERS -DUSE_GENERIC -DNO_GETENV -DJAVA_FINALIZATION -DGC_OPERATOR_NEW_ARRAY
  
  .c.obj:
  	$(cc) @&&|
diff -Nrcpad gcc-3.4.3/boehm-gc/ChangeLog gcc-4.0.0/boehm-gc/ChangeLog
*** gcc-3.4.3/boehm-gc/ChangeLog	Fri Nov  5 03:33:12 2004
--- gcc-4.0.0/boehm-gc/ChangeLog	Thu Apr 21 05:17:16 2005
***************
*** 1,33 ****
! 2004-11-04  Release Manager
  
! 	* GCC 3.4.3 released.
  
! 2004-09-06  Release Manager
  
! 	* GCC 3.4.2 released.
  
! 2004-07-01  Release Manager
  
! 	* GCC 3.4.1 released.
  
! 2004-04-21  H.J. Lu  <hongjiu.lu@intel.com>
  
! 	PR target/14326
! 	Backport from mainline:
  
  	* include/private/gcconfig.h (PREFETCH): Use __builtin_prefetch
  	for gcc >= 3.0.
  	(PREFETCH_FOR_WRITE): Likewise.
  
! 2004-04-18  Release Manager
  
! 	* GCC 3.4.0 released.
  
! 2004-02-22  Matthias Klose  <doko@debian.org>
  
  	* config.guess: Update from version 2002-01-10 to 2004-02-16.
  	* config.sub: Update from version 2002-01-02 to 2004-02-16.
  
  2004-01-20  Andrew Haley  <aph@redhat.com>
  
  	* include/private/gcconfig.h (USE_MMAP): Define for all Linux.
--- 1,321 ----
! 2005-04-20  Release Manager
  
! 	* GCC 4.0.0 released.
  
! 2005-04-12  Richard Henderson  <rth@redhat.com>
  
! 	* include/private/gcconfig.h (alpha-linux): Use LINUX_STACKBOTTOM.
  
! 2005-03-01  Kelley Cook  <kcook@gcc.gnu.org>
  
! 	* Makefile.in, include/Makefile.in: Regenerate.
  
! 2005-02-26  Richard Earnshaw  <rearnsha@arm.com>
  
! 	* dyn_load.c: On NetBSD, include machine/elf_machdep.h and define
! 	ELFSIZE in terms of ARCH_ELFSIZE (back-ported from gc7.0alpha1).
! 
! 2005-02-15  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	PR libgcj/19823
! 	* configure.host: Set gc_use_mmap on *-linux*.
! 	* configure.ac: Define USE_MMAP if gc_use_mmap is set.
! 	* include/private/gc_priv.h: Include gc_config.h.
! 	* configure, include/gc_config.h.in: Rebuilt.
! 
! 2005-02-07  Hans Boehm  <Hans.Boehm@hp.com>
! 
! 	* allchblk.c (GC_allochblk_nth): Dont overlook available space if
! 	  GC disabled, correctly convert GC_finalizer_mem_freed to byte,
! 	  total_size to words.
! 	* dyn_load.c (win32 GC_register_dynamic_libraries): Consider only
! 	  MEM_IMAGE regions.
! 	* mach_dep.c (GC_with_callee_saves_pushed): separate into new function,
! 	  and indent appropriately.
! 	* mark_rts.c (GC_approx_sp): Access stack.
! 	* pthread_stop_world.c: (GC_suspend_handler): Explicitly push
! 	  callee-saves registers when appropriate.
! 	  (GC_stop_world): Handle EINTR from sem_wait (sync with Mono GC).
! 
! 2005-01-01  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	* configure.ac (AC_CONFIG_HEADERS): Build both include/gc_config.h 
! 	and include/gc_ext_config.h.
! 	* include/gc_ext_config.h: New file. Define only THREAD_LOCAL_ALLOC.
! 	* include/gc.h: Undef PACKAGE_* before including gc_config.h.
! 
! 2004-12-13  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* configure: Regenerate.
! 
! 2004-11-29  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	PR libgcj/18699
! 	Revert patches of 2004-11-26 and 2004-11-27.
! 
! 2004-11-29  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* configure: Regenerate for libtool change.
! 
! 2004-11-27  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	* include/gc_config.h.in: Add comment. Define only THREAD_LOCAL_ALLOC.
! 
! 2004-11-26  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	Fix "PACKAGE_NAME redefined" errors.
! 	* configure.ac (AC_CONFIG_HEADERS): Build both include/config.h 
! 	and include/gc_config.h.
! 	* configure: Regenerated.
! 	* include/gc_config.h.in: No longer auto-generated. Define only the
! 	macros needed by libjava.
! 	* include/config.h.in: Generated by autoheader.
! 	* include/gc.h: Include config.h, not gc_config.h.
! 
! 2004-11-25  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* configure: Regenerate for libtool reversion.
! 
! 2004-11-24  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* configure: Regenerate for libtool change.
! 
! 2004-11-22  Eric Botcazou  <ebotcazou@libertysurf.fr>
! 
! 	* configure.ac (machdep): Use sparc_mach_dep.lo on
! 	sparc64-sun-solaris2.* too.
! 	(Solaris gcc optimization fix): Disable on sparc*-sun-solaris2.*.
! 	* configure: Regenerate.
! 
! 2004-11-22  Eric Botcazou  <ebotcazou@libertysurf.fr>
! 
! 	PR target/18444
! 	* configure.ac (threading): Accept 'posix95'.
! 	* configure: Regenerate.
! 
! 2004-11-04  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* Makefile.am: Define ACLOCAL_AMFLAGS.
! 	* configure.ac: Remove redundant sinclude.
! 	* acinclude.m4: Delete file.
! 	* aclocal.m4: Regenerate.
! 	* Makefile.in, include/Makefile.in: Regenerate.
! 	* configure: Regenerate.
! 
! 2004-10-19  Ulrich Weigand  <uweigand@de.ibm.com>
! 
! 	* include/private/gc_priv.h (GC_generic_malloc_words_small_inner):
! 	Add prototype.
! 
! 2004-10-13  Kazuhiro Inaoka <inaoka.kazuhiro@renesas.com>
! 
! 	* include/private/gcconfig.h: Add m32r-linux target.
! 
! 2004-09-27  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* configure.ac: Update all AC_DEFINEs to newer style.
! 	* configure: Regenerate.
! 	* include/gc_config.h.in: Regenerate.
! 
! 2004-08-27  Hans Boehm  <Hans.Boehm@hp.com>
! 
! 	* backgraph.c, gc_priv.h (GC_traverse_back_graph,
! 	GC_print_back_graph_stats): split GC_traverse_back_graph.
! 	* backgraph.c: Dynamically grow in_progress_space.
! 	* finalize.c (GC_notify_or_invoke_finalizers): also call
! 	GC_print_back_graph_stats.
! 	* alloc.c, finalize.c, gc_priv.h (GC_generate_random_backtrace_no_gc,
! 	GC_print_back_height): Move delarations to header file.
! 	* configure.ac: rename --enable-full-debug to --enable-gc-debug.
! 	* configure: Regenerate.
! 	
! 2004-08-23  Hans Boehm  <Hans.Boehm@hp.com>
! 
! 	* aix_irix_threads.c: Move _THREADS checks after gc_priv.h include.
! 	* backgraph.c, include/private/gc_pmark.h: Always include gc.h.
! 
! 2004-08-23  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	* win32_threads.c: Move GC_WIN32_THREADS check after gc_priv.h include.
! 	Reported by Danny Smith.
! 
! 2004-08-21  Danny Smith  <dannysmith@users.sourceforge.net>
! 
! 	* misc.c (GC_init): Replace lhs cast with rhs cast.
! 
! 2004-08-16  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	* specific.c: Check GC_LINUX_THREADS before including 
! 	private/specific.h. From Richard Earnshaw.
! 
! 2004-08-16  Nathanael Nerode  <neroden@gcc.gnu.org>
! 
! 	* aclocal.m4: Remove obsolete construct for old automake.
! 	* acinclude.m4: Regenerate with aclocal 1.9.1.
! 	* configure.ac:  Remove duplicate AC_WITH calls.  Replace
! 	AC_CANONICAL_SYSTEM with AC_CANONICAL_HOST, AC_CANONICAL_TARGET.
! 	Replace _GCC_TOPLEV_NONCANONICAL calls with ACX_NONCANONICAL_TARGET.
! 	Remove now-redundant subst of target_noncanonical.  Remove
! 	now-gratuitous m4 quoting around $.  Replace AM_PROG_LIBTOOL with
! 	AC_PROG_LIBTOOL and remove second, redundant AC_PROG_LIBTOOL.
! 	Use slightly more modern form of AC_INIT.
! 	* configure: Rebuild with autoconf 2.59.
! 	* Makefile.in, include/Makefile.in: Rebuild with automake 1.9.1.
! 
! 2004-08-16  Andreas Tobler  <a.tobler@schweiz.ch>
! 
! 	* solaris_threads.c: Remove ifdef around #include "private/gc_priv.h"
! 	since they're not known at this time.
! 	* solaris_pthreads.c: Likewise.
! 
! 2004-08-15  Andreas Tobler  <a.tobler@schweiz.ch>
! 
! 	PR target/14931
! 	* powerpc_darwin_mach_dep.s (_GC_push_regs): Change to new stub style.
! 
! 2004-08-13  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	* configure.ac (gc_cflags): Add -Iinclude.
! 	(AC_CONFIG_HEADERS): New. Configure gc_config.h header.
! 	Don't write DEFS to boehm-cflags file.
! 	* configure: Rebuilt.
! 	* gcj_mlc.c: Check #ifdef GC_GCJ_SUPPORT after including headers.
! 	* specific.c: Check #ifdef GC_LINUX_THREADS after including headers.
! 	* include/gc_config_macros.h: Remove backward-compatibility 
! 	redefinitions of GC_ names.
! 	* include/gc.h: Include <gc_config.h>.
! 
! 2004-08-13  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	Import Boehm GC version 6.3.
! 
! 2004-08-12  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* include/Makefile.in: Regenerate
! 
! 2004-07-06  Andrew Pinski  <apinski@apple.com>
! 
! 	* os-dep.c (GC_task_self): Declare as static
! 	and remove the second declaration.
! 
! 2004-06-20  Andreas Tobler  <a.tobler@schweiz.ch>
! 
! 	* Makefile.am: Add rule for .S files to fix bootstrap on
! 	solaris and alpha.
! 	* Makefile.in: Regenerate.
! 
! 2004-06-16  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* boehm-gc/configure.ac: New name of configure.in.
! 	Remove useless multilib stuff.  Change uses of
! 	INCLUDES and CXXINCLUDES to AM_CPPFLAGS.
! 	* boehm-gc/configure.in: New name of configure.in.
! 	* boehm-gc/Makefile.am: Update for automake 1.8.5.
! 	* boehm-gc/acinclude.m4: Include ../config/acx.m4.
! 	* boehm-gc/aclocal.m4: Regenerate.
! 	* boehm-gc/configure: Regenerate.
! 	* boehm-gc/Makefile.in: Regenerate.
! 
! 2004-06-15  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* .cvsignore: New file.
! 
! 2004-04-25  Andreas Jaeger  <aj@suse.de>
! 
!         * mark.c (GC_mark_from): Use pointer as prefetch argument.
! 
! 2004-04-06  H.J. Lu  <hongjiu.lu@intel.com>
  
  	* include/private/gcconfig.h (PREFETCH): Use __builtin_prefetch
  	for gcc >= 3.0.
  	(PREFETCH_FOR_WRITE): Likewise.
  
! 2004-03-10  Kelley Cook  <kcook@gcc.gnu.org>
  
! 	* configure.ac: Bump AC_PREREQ to 2.59.
! 	* configure: Regenerate.
! 	* config.in: Regenerate.
  
! 2004-02-26  Nathanael Nerode  <neroden@gcc.gnu.org>
! 
! 	* ltconfig, ltmain.sh: Remove unused files.
! 	* configure.in: Remove bogus extra early invocation of
! 	AC_CONFIG_AUX_DIR.
! 	* configure: Regenerate.
! 	* mkinstalldirs, install-sh, config.sub, config.guess:
! 	Remove (now) unused files.
! 	* Makefile.in: Regenerate (losing references to vanished
! 	files).
! 
! 	* configure.in: Add CCAS, CCASFLAGS for future automakes.
! 	* configure, Makefile.in, include/Makefile.in: Regenerate.
! 
! 	* Makefile.am: Remove bogus duplicate setting of AM_CFLAGS.
! 	* Makefile.in: Regenerate.
! 
! 	* configure.in: Remove bogus duplicate invocation of
! 	AM_MAINTAINER_MODE.  Remove obsolete comment.
! 	* configure: Regenerate.
! 
! 	* acinclude.m4: Remove GC_CONFIGURE macro; move contents
! 	to configure.in.
! 	* aclocal.m4: Regenerate.
! 	* configure.in: Receive contents of GC_CONFIGURE macro.
! 	* configure: Regenerate.
! 
! 	* configure.in: Remove more obsolete, bogus code.
! 	* configure: Regenerate.
! 
! 	* acinclude.m4: Remove obsolete and bogus constructs.
! 	* aclocal.m4: Regenerate.
! 	* configure: Regnerate.
! 
! 2004-02-23  Nathanael Nerode  <neroden@gcc.gnu.org>
! 
! 	* acinclude.m4: De-precious CC and CXX so that the right flags
! 	are passed down to multilibs.
! 	* aclocal.m4: Regenerate.
! 	* configure: Regenerate.
! 
! 2004-02-22  Zack Weinberg <zack@codesourcery.com>
! 	    Nathanael Nerode <neroden@twcny.rr.com>
! 	    Alexandre Oliva <aoliva@redhat.com>
! 
! 	* config.sub, config.guess: Replace with forwarding scripts
! 	which invoke the master copies in the top level.
! 
! 2004-02-23  Nathanael Nerode  <neroden@gcc.gnu.org>
! 
! 	* acinclude.m4: Remove old no-executables workaround;
! 	add new no-executables workaround.
! 	* aclocal.m4: Regenerate.
! 	* configure.in: Change prereqs to autoconf 2.57.
! 	* configure: Regenerate with autoconf 2.57.
! 
! 	* configure.in: Use NCN_TARGET_NONCANONICAL and friends.
! 	* configure: Regenerate.
! 	* Makefile.am: Use target_noncanonical variable from configure.
! 	* Makefile.in: Regenerate.
! 	* include/Makefile.in: Regenerate.
! 
! 2004-02-20  Andrew Cagney  <cagney@redhat.com>
  
  	* config.guess: Update from version 2002-01-10 to 2004-02-16.
  	* config.sub: Update from version 2002-01-02 to 2004-02-16.
  
+ 2004-02-19  Nathanael Nerode  <neroden@gcc.gnu.org>
+ 
+ 	* acinclude.m4: Remove bogus duplicate call to AC_CANONICAL_BUILD.
+ 	* aclocal.m4: Rebuild.
+ 	* configure: Regenerate.
+ 
+ 	* acinclude.m4: Move certain code to configure.in.
+ 	* configure.in: Receive code from acinclude.m4.
+ 	* aclocal.m4: Rebuild.
+ 	* configure: Regenerate.
+ 
+ 	* Makefile.direct, alloc.c: Resync to upstream 6.3 alpha 1.
+ 
  2004-01-20  Andrew Haley  <aph@redhat.com>
  
  	* include/private/gcconfig.h (USE_MMAP): Define for all Linux.
***************
*** 39,51 ****
  	* configure.in (NO_EXECUTE_PERMISSION): Remove global declaration;
  	add for ia64; remove for MIPS.
  	* configure: Regnerated.
! 	
  2004-01-14  Kelley Cook  <kcook@gcc.gnu.org>
  
  	* configure.in: Add in AC_PREREQ(2.13)
  
  2004-01-07  Dave Jones <davej@redhat.com>
!  
  	* malloc.c (GC_generic_malloc): Correct initialization typo.
  	* mallocx.c (GC_generic_malloc_ignore_off_page): Ditto.
  
--- 327,339 ----
  	* configure.in (NO_EXECUTE_PERMISSION): Remove global declaration;
  	add for ia64; remove for MIPS.
  	* configure: Regnerated.
! 
  2004-01-14  Kelley Cook  <kcook@gcc.gnu.org>
  
  	* configure.in: Add in AC_PREREQ(2.13)
  
  2004-01-07  Dave Jones <davej@redhat.com>
! 
  	* malloc.c (GC_generic_malloc): Correct initialization typo.
  	* mallocx.c (GC_generic_malloc_ignore_off_page): Ditto.
  
***************
*** 108,114 ****
  2003-07-31  Danny Smith  <dannysmith@users.sourceforge.net>
  
  	* include/gc.h (GC_CreateThread): Declare with WINAPI
! 	attribute. 
  	* win32_threads.c (GC_CreateThread): Make definitions consistent
  	with declaration.  Cast &thread_table[i].handle to PHANDLE
  	in call to DuplicateHandle
--- 396,402 ----
  2003-07-31  Danny Smith  <dannysmith@users.sourceforge.net>
  
  	* include/gc.h (GC_CreateThread): Declare with WINAPI
! 	attribute.
  	* win32_threads.c (GC_CreateThread): Make definitions consistent
  	with declaration.  Cast &thread_table[i].handle to PHANDLE
  	in call to DuplicateHandle
***************
*** 116,124 ****
  
  2003-07-30  Andreas Tobler  <a.tobler@schweiz.ch>
  
! 	* dyn_load.c: Define __private_extern__ to match Apple's system 
  	header.
!  
  2003-07-28  Loren J. Rittle  <ljrittle@acm.org>
  
  	* os_dep.c: Remove redundancy introduced in last merge.
--- 404,412 ----
  
  2003-07-30  Andreas Tobler  <a.tobler@schweiz.ch>
  
! 	* dyn_load.c: Define __private_extern__ to match Apple's system
  	header.
! 
  2003-07-28  Loren J. Rittle  <ljrittle@acm.org>
  
  	* os_dep.c: Remove redundancy introduced in last merge.
***************
*** 193,204 ****
  	* include/private/specific.h: Likewise.
  	* tests/test.c: Likewise.
  	* tests/test_cpp.cc: Likewise.
! 	
  	* configure: Rebuild.
  	* Makefile.in: Rebuild.
! 	
  	* mips_sgi_mach_dep.s: Add.
! 	
  	* alpha_mach_dep.s: Remove.
  	* irix_threads.c: Remove.
  	* linux_threads.c: Remove.
--- 481,492 ----
  	* include/private/specific.h: Likewise.
  	* tests/test.c: Likewise.
  	* tests/test_cpp.cc: Likewise.
! 
  	* configure: Rebuild.
  	* Makefile.in: Rebuild.
! 
  	* mips_sgi_mach_dep.s: Add.
! 
  	* alpha_mach_dep.s: Remove.
  	* irix_threads.c: Remove.
  	* linux_threads.c: Remove.
***************
*** 320,326 ****
  
  2002-08-23  Adam Megacz <adam@xwt.org>
  
!         * win32_threads.cc: Removed extraneous ABORT()
  
  2002-09-22  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
  
--- 608,614 ----
  
  2002-08-23  Adam Megacz <adam@xwt.org>
  
! 	* win32_threads.cc: Removed extraneous ABORT()
  
  2002-09-22  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
  
***************
*** 343,351 ****
  	Linux/mips.
  
  2002-06-28  Hans Boehm <Hans_Boehm@hp.com>
!             Jonathan Clark
  
!         * win32_threads.c (GC_push_all_stacks): Tolerate bad sp.
  
  2002-06-09  H.J. Lu  (hjl@gnu.org)
  
--- 631,639 ----
  	Linux/mips.
  
  2002-06-28  Hans Boehm <Hans_Boehm@hp.com>
! 	    Jonathan Clark
  
! 	* win32_threads.c (GC_push_all_stacks): Tolerate bad sp.
  
  2002-06-09  H.J. Lu  (hjl@gnu.org)
  
*************** Sun May 19 11:32:03 2002  Mark P Mitchel
*** 438,444 ****
  2002-03-30  Krister Walfridsson  <cato@df.lth.se>
  
  	* include/private/gcconfig.h: define DYNAMIC_LOADING for ELF
!         NetBSD/i386.
  
  2002-03-29  Hans Boehm  <Hans_Boehm@hp.com>
  
--- 726,732 ----
  2002-03-30  Krister Walfridsson  <cato@df.lth.se>
  
  	* include/private/gcconfig.h: define DYNAMIC_LOADING for ELF
! 	NetBSD/i386.
  
  2002-03-29  Hans Boehm  <Hans_Boehm@hp.com>
  
*************** Sun May 19 11:32:03 2002  Mark P Mitchel
*** 488,501 ****
  
  2002-03-12  Adam Megacz  <adam@xwt.org>
  
!         * dyn_load.c: Renamed GC_win32s to GC_no_win32_dlls.
!         * misc.c: Renamed GC_is_win32s() to GC_no_win32_dlls
!         * os_dep.c: Renamed GC_win32s to GC_no_win32_dlls and
!         statically initialized it to TRUE if compiling with GCC.
!         * win32_threads.c (thread_start): We no longer use SEH if
!         compiling with GCC.
!         * mark.c (GC_mark_some): We no longer use SEH if
!         compiling with GCC.
  
  2002-03-09  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
  
--- 776,789 ----
  
  2002-03-12  Adam Megacz  <adam@xwt.org>
  
! 	* dyn_load.c: Renamed GC_win32s to GC_no_win32_dlls.
! 	* misc.c: Renamed GC_is_win32s() to GC_no_win32_dlls
! 	* os_dep.c: Renamed GC_win32s to GC_no_win32_dlls and
! 	statically initialized it to TRUE if compiling with GCC.
! 	* win32_threads.c (thread_start): We no longer use SEH if
! 	compiling with GCC.
! 	* mark.c (GC_mark_some): We no longer use SEH if
! 	compiling with GCC.
  
  2002-03-09  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
  
*************** Sun May 19 11:32:03 2002  Mark P Mitchel
*** 890,896 ****
  
  2000-06-19  Andrew Haley  <aph@cygnus.com>
  
!         * os_dep.c (read): Pass two dummy args to syscall().
  
  2000-05-11  Bryce McKinlay  <bryce@albatross.co.nz>
  
--- 1178,1184 ----
  
  2000-06-19  Andrew Haley  <aph@cygnus.com>
  
! 	* os_dep.c (read): Pass two dummy args to syscall().
  
  2000-05-11  Bryce McKinlay  <bryce@albatross.co.nz>
  
*************** Sun May 19 11:32:03 2002  Mark P Mitchel
*** 900,906 ****
  2000-05-07  Bryce McKinlay  <bryce@albatross.co.nz>
  
  	Imported version 5.0alpha7.
!         * acinclude.m4: Update version to 5.0a7.
  
  2000-04-26  Jakub Jelinek  <jakub@redhat.com>
  
--- 1188,1194 ----
  2000-05-07  Bryce McKinlay  <bryce@albatross.co.nz>
  
  	Imported version 5.0alpha7.
! 	* acinclude.m4: Update version to 5.0a7.
  
  2000-04-26  Jakub Jelinek  <jakub@redhat.com>
  
*************** Fri Jan 28 17:13:20 2000  Anthony Green 
*** 956,962 ****
  
  1999-12-19  Jeff Sturm  <jsturm@sigma6.com>
  
!         * gcconfig.h: Define DATASTART for Alpha Linux.
  
  1999-12-19  Anthony Green  <green@cygnus.com>
  
--- 1244,1250 ----
  
  1999-12-19  Jeff Sturm  <jsturm@sigma6.com>
  
! 	* gcconfig.h: Define DATASTART for Alpha Linux.
  
  1999-12-19  Anthony Green  <green@cygnus.com>
  
diff -Nrcpad gcc-3.4.3/boehm-gc/Makefile.am gcc-4.0.0/boehm-gc/Makefile.am
*** gcc-3.4.3/boehm-gc/Makefile.am	Mon Jul 28 04:18:19 2003
--- gcc-4.0.0/boehm-gc/Makefile.am	Fri Nov  5 01:51:48 2004
***************
*** 4,21 ****
  ## files that should be in the distribution are not mentioned in this
  ## Makefile.am.
  
! AUTOMAKE_OPTIONS = cygnus
  
  SUBDIRS = include
  
- # Multilib support variables.
- MULTISRCTOP =
- MULTIBUILDTOP =
- MULTIDIRS =
- MULTISUBDIR =
- MULTIDO = true
- MULTICLEAN = true
- 
  noinst_LTLIBRARIES = libgcjgc.la libgcjgc_convenience.la
  
  if POWERPC_DARWIN
--- 4,14 ----
  ## files that should be in the distribution are not mentioned in this
  ## Makefile.am.
  
! AUTOMAKE_OPTIONS = cygnus subdir-objects
! ACLOCAL_AMFLAGS = -I .. -I ../config
  
  SUBDIRS = include
  
  noinst_LTLIBRARIES = libgcjgc.la libgcjgc_convenience.la
  
  if POWERPC_DARWIN
*************** backgraph.c win32_threads.c \
*** 33,47 ****
  pthread_support.c pthread_stop_world.c darwin_stop_world.c \
  $(asm_libgc_sources)
  
! EXTRA_GC_SOURCES = alpha_mach_dep.S \
  mips_sgi_mach_dep.s mips_ultrix_mach_dep.s powerpc_darwin_mach_dep.s \
  rs6000_mach_dep.s sparc_mach_dep.S sparc_netbsd_mach_dep.s \
  sparc_sunos4_mach_dep.s ia64_save_regs_in_stack.s
  
  libgcjgc_la_SOURCES = $(GC_SOURCES)
  libgcjgc_convenience_la_SOURCES = $(GC_SOURCES)
- EXTRA_libgcjgc_la_SOURCES = $(EXTRA_GC_SOURCES)
- EXTRA_libgcjgc_convenience_la_SOURCES = $(EXTRA_GC_SOURCES)
  
  # Include THREADLIBS here to ensure that the correct versions of
  # linuxthread semaphore functions get linked:
--- 26,38 ----
  pthread_support.c pthread_stop_world.c darwin_stop_world.c \
  $(asm_libgc_sources)
  
! EXTRA_DIST = alpha_mach_dep.S \
  mips_sgi_mach_dep.s mips_ultrix_mach_dep.s powerpc_darwin_mach_dep.s \
  rs6000_mach_dep.s sparc_mach_dep.S sparc_netbsd_mach_dep.s \
  sparc_sunos4_mach_dep.s ia64_save_regs_in_stack.s
  
  libgcjgc_la_SOURCES = $(GC_SOURCES)
  libgcjgc_convenience_la_SOURCES = $(GC_SOURCES)
  
  # Include THREADLIBS here to ensure that the correct versions of
  # linuxthread semaphore functions get linked:
*************** AM_CXXFLAGS = @GC_CFLAGS@
*** 56,95 ****
  AM_CFLAGS = @GC_CFLAGS@
  
  check_PROGRAMS = gctest
! # The following hack produces a warning from automake, but we need it in order 
! # to build a file from a subdirectory. FIXME.
! test.o:	tests/test.c
! 	$(COMPILE) -c $(srcdir)/tests/test.c
! # 	Using $< in the above seems to fail with the HP/UX on Itanium make.
! 
! gctest_OBJECTS = test.o
  gctest_LDADD = ./libgcjgc.la $(THREADLIBS) $(EXTRA_TEST_LIBS)
  gctest_LDFLAGS = -shared-libgcc
  TESTS_ENVIRONMENT = LD_LIBRARY_PATH=../../$(MULTIBUILDTOP)gcc
  TESTS = gctest
  
- ## FIXME: relies on internal code generated by automake.
- all_objs = @addobjs@ $(libgcjgc_la_OBJECTS)
- $(all_objs) : include/private/gcconfig.h include/private/gc_priv.h \
- include/private/gc_hdrs.h include/gc.h include/gc_gcj.h \
- include/gc_pthread_redirects.h include/gc_config_macros.h \
- include/gc_mark.h @addincludes@
- 
  ## FIXME: we shouldn't have to do this, but automake forces us to.
  .s.lo:
  ## We use -Wp,-P to strip #line directives.  Irix `as' chokes on
  ## these.
  	$(LTCOMPILE) -Wp,-P -x assembler-with-cpp -c $<
  
  ## We have our own definition of LTCOMPILE because we want to use our
  ## CFLAGS, not those passed in from the top level make.
! LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) \
! 	$(AM_CPPFLAGS) $(CPPFLAGS) \
  	$(AM_CFLAGS) $(MY_CFLAGS) $(GC_CFLAGS) 
  LINK = $(LIBTOOL) --mode=link $(CC) $(AM_CFLAGS) $(MY_CFLAGS) $(LDFLAGS) -o $@
  
- AM_CFLAGS = @GC_CFLAGS@
- 
  # Work around what appears to be a GNU make bug handling MAKEFLAGS
  # values defined in terms of make variables, as is the case for CC and
  # friends when we are called from the top level Makefile.
--- 47,72 ----
  AM_CFLAGS = @GC_CFLAGS@
  
  check_PROGRAMS = gctest
! gctest_SOURCES = tests/test.c
  gctest_LDADD = ./libgcjgc.la $(THREADLIBS) $(EXTRA_TEST_LIBS)
  gctest_LDFLAGS = -shared-libgcc
  TESTS_ENVIRONMENT = LD_LIBRARY_PATH=../../$(MULTIBUILDTOP)gcc
  TESTS = gctest
  
  ## FIXME: we shouldn't have to do this, but automake forces us to.
  .s.lo:
  ## We use -Wp,-P to strip #line directives.  Irix `as' chokes on
  ## these.
  	$(LTCOMPILE) -Wp,-P -x assembler-with-cpp -c $<
+ .S.lo:
+ 	$(LTCOMPILE) -Wp,-P -x assembler-with-cpp -c $<
  
  ## We have our own definition of LTCOMPILE because we want to use our
  ## CFLAGS, not those passed in from the top level make.
! LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(AM_CPPFLAGS) $(CPPFLAGS) \
  	$(AM_CFLAGS) $(MY_CFLAGS) $(GC_CFLAGS) 
  LINK = $(LIBTOOL) --mode=link $(CC) $(AM_CFLAGS) $(MY_CFLAGS) $(LDFLAGS) -o $@
  
  # Work around what appears to be a GNU make bug handling MAKEFLAGS
  # values defined in terms of make variables, as is the case for CC and
  # friends when we are called from the top level Makefile.
*************** AM_MAKEFLAGS = \
*** 133,160 ****
  
  CONFIG_STATUS_DEPENDENCIES = $(srcdir)/configure.host
  
- # Multilib support.
- .PHONY: all-multi mostlyclean-multi clean-multi distclean-multi \
- 	maintainer-clean-multi
- 
- all-am: all-multi
- install-am: install-multi
- mostlyclean-am: mostlyclean-multi
- clean-am: clean-multi
- distclean-am: distclean-multi
- maintainer-clean-am: maintainer-clean-multi
- 
- all-multi:
- 	: $(MAKE) ; exec $(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do
- install-multi:
- 	$(MULTIDO) $(AM_MAKEFLAGS) DO=install multi-do
- mostlyclean-multi:
- 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=mostlyclean multi-clean
- clean-multi:
- 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=clean multi-clean
- distclean-multi:
- 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=distclean multi-clean
- maintainer-clean-multi:
- 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=maintainer-clean multi-clean
- 
  MAKEOVERRIDES=
--- 110,113 ----
diff -Nrcpad gcc-3.4.3/boehm-gc/Makefile.direct gcc-4.0.0/boehm-gc/Makefile.direct
*** gcc-3.4.3/boehm-gc/Makefile.direct	Mon Jul 28 04:18:20 2003
--- gcc-4.0.0/boehm-gc/Makefile.direct	Fri Aug 13 23:05:28 2004
***************
*** 10,22 ****
  #	 c++ interface to gc.a
  # cord/de - builds dumb editor based on cords.
  ABI_FLAG= 
  CC=cc $(ABI_FLAG)
  CXX=g++ $(ABI_FLAG)
! AS=as $(ABI_FLAG)
  #  The above doesn't work with gas, which doesn't run cpp.
  #  Define AS as `gcc -c -x assembler-with-cpp' instead.
- #  Under Irix 6, you will have to specify the ABI (-o32, -n32, or -64)
- #  if you use something other than the default ABI on your machine.
  
  # Redefining srcdir allows object code for the nonPCR version of the collector
  # to be generated in different directories.
--- 10,29 ----
  #	 c++ interface to gc.a
  # cord/de - builds dumb editor based on cords.
  ABI_FLAG= 
+ # ABI_FLAG should be the cc flag that specifies the ABI.  On most
+ # platforms this will be the empty string.  Possible values:
+ # +DD64 for 64-bit executable on HP/UX.
+ # -n32, -n64, -o32 for SGI/MIPS ABIs.
+ 
+ AS_ABI_FLAG=$(ABI_FLAG)
+ # ABI flag for assembler.  On HP/UX this is +A64 for 64 bit
+ # executables.
+ 
  CC=cc $(ABI_FLAG)
  CXX=g++ $(ABI_FLAG)
! AS=as $(AS_ABI_FLAG)
  #  The above doesn't work with gas, which doesn't run cpp.
  #  Define AS as `gcc -c -x assembler-with-cpp' instead.
  
  # Redefining srcdir allows object code for the nonPCR version of the collector
  # to be generated in different directories.
*************** CFLAGS= -O -I$(srcdir)/include -DATOMIC_
*** 29,35 ****
  # -DGC_LINUX_THREADS -DPARALLEL_MARK -DTHREAD_LOCAL_ALLOC
  # To build the parallel collector in a static library on HP/UX,
  # add to the above:
! # -DGC_HPUX_THREADS -DPARALLEL_MARK -DTHREAD_LOCAL_ALLOC -DUSE_HPUX_TLS -D_POSIX_C_SOURCE=199506L
  # To build the thread-safe collector on Tru64, add to the above:
  # -pthread -DGC_OSF1_THREADS
  
--- 36,42 ----
  # -DGC_LINUX_THREADS -DPARALLEL_MARK -DTHREAD_LOCAL_ALLOC
  # To build the parallel collector in a static library on HP/UX,
  # add to the above:
! # -DGC_HPUX_THREADS -DPARALLEL_MARK -DTHREAD_LOCAL_ALLOC -D_POSIX_C_SOURCE=199506L
  # To build the thread-safe collector on Tru64, add to the above:
  # -pthread -DGC_OSF1_THREADS
  
*************** HOSTCFLAGS=$(CFLAGS)
*** 57,63 ****
  #   gc.h before performing thr_ or dl* or GC_ operations.)
  #   Must also define -D_REENTRANT.
  # -DGC_SOLARIS_PTHREADS enables support for Solaris pthreads.
! #   Define SOLARIS_THREADS as well.
  # -DGC_IRIX_THREADS enables support for Irix pthreads.  See README.irix.
  # -DGC_HPUX_THREADS enables support for HP/UX 11 pthreads.
  #   Also requires -D_REENTRANT or -D_POSIX_C_SOURCE=199506L. See README.hp.
--- 64,70 ----
  #   gc.h before performing thr_ or dl* or GC_ operations.)
  #   Must also define -D_REENTRANT.
  # -DGC_SOLARIS_PTHREADS enables support for Solaris pthreads.
! #   (Internally this define GC_SOLARIS_THREADS as well.)
  # -DGC_IRIX_THREADS enables support for Irix pthreads.  See README.irix.
  # -DGC_HPUX_THREADS enables support for HP/UX 11 pthreads.
  #   Also requires -D_REENTRANT or -D_POSIX_C_SOURCE=199506L. See README.hp.
*************** HOSTCFLAGS=$(CFLAGS)
*** 175,181 ****
  #   this facility is only used in a few places.  It is intended primarily
  #   for debugging of the garbage collector itself, but could also
  # -DDBG_HDRS_ALL Make sure that all objects have debug headers.  Increases
! #   the reliability (from 99.9999% to 100%) of some of the debugging
  #   code (especially KEEP_BACK_PTRS).  Makes -DSHORT_DBG_HDRS possible.
  #   Assumes that all client allocation is done through debugging
  #   allocators.
--- 182,188 ----
  #   this facility is only used in a few places.  It is intended primarily
  #   for debugging of the garbage collector itself, but could also
  # -DDBG_HDRS_ALL Make sure that all objects have debug headers.  Increases
! #   the reliability (from 99.9999% to 100% mod. bugs) of some of the debugging
  #   code (especially KEEP_BACK_PTRS).  Makes -DSHORT_DBG_HDRS possible.
  #   Assumes that all client allocation is done through debugging
  #   allocators.
*************** HOSTCFLAGS=$(CFLAGS)
*** 228,233 ****
--- 235,244 ----
  #   in a way that usually does not involve acquisition of a global lock.
  #   Currently requires -DGC_LINUX_THREADS, but should be easy to port to
  #   other pthreads environments.  Recommended for multiprocessors.
+ # -DUSE_COMPILER_TLS causes thread local allocation to use compiler-supported
+ #   "__thread" thread-local variables.  This is the default in HP/UX.  It
+ #   may help performance on recent Linux installations.  (It failed for
+ #   me on RedHat 8, but appears to work on RedHat 9.)
  # -DPARALLEL_MARK allows the marker to run in multiple threads.  Recommended
  #   for multiprocessors.  Currently requires Linux on X86 or IA64, though
  #   support for other Posix platforms should be fairly easy to add,
*************** DOC_FILES= README.QUICK doc/README.Mac d
*** 309,322 ****
  	doc/README.environment doc/tree.html doc/gcdescr.html \
  	doc/README.autoconf doc/README.macros doc/README.ews4800 \
  	doc/README.DGUX386 doc/README.arm.cross doc/leak.html \
! 	doc/scale.html doc/gcinterface.html doc/README.darwin
  
  TESTS= tests/test.c tests/test_cpp.cc tests/trace_test.c \
! 	tests/leak_test.c tests/thread_leak_test.c
  
  GNU_BUILD_FILES= configure.in Makefile.am configure acinclude.m4 \
  		 libtool.m4 install-sh configure.host Makefile.in \
! 		 ltconfig aclocal.m4 config.sub config.guess \
  		 include/Makefile.am include/Makefile.in \
  		 doc/Makefile.am doc/Makefile.in \
  		 ltmain.sh mkinstalldirs depcomp missing
--- 320,334 ----
  	doc/README.environment doc/tree.html doc/gcdescr.html \
  	doc/README.autoconf doc/README.macros doc/README.ews4800 \
  	doc/README.DGUX386 doc/README.arm.cross doc/leak.html \
! 	doc/scale.html doc/gcinterface.html doc/README.darwin \
! 	doc/simple_example.html
  
  TESTS= tests/test.c tests/test_cpp.cc tests/trace_test.c \
! 	tests/leak_test.c tests/thread_leak_test.c tests/middle.c
  
  GNU_BUILD_FILES= configure.in Makefile.am configure acinclude.m4 \
  		 libtool.m4 install-sh configure.host Makefile.in \
! 		 aclocal.m4 config.sub config.guess \
  		 include/Makefile.am include/Makefile.in \
  		 doc/Makefile.am doc/Makefile.in \
  		 ltmain.sh mkinstalldirs depcomp missing
*************** GNU_BUILD_FILES= configure.in Makefile.a
*** 324,330 ****
  OTHER_MAKEFILES= OS2_MAKEFILE NT_MAKEFILE NT_THREADS_MAKEFILE gc.mak \
  		 BCC_MAKEFILE EMX_MAKEFILE WCC_MAKEFILE Makefile.dj \
  		 PCR-Makefile SMakefile.amiga Makefile.DLLs \
! 		 digimars.mak Makefile.direct
  #	Makefile and Makefile.direct are copies of each other.
  
  OTHER_FILES= Makefile setjmp_t.c callprocs pc_excludes \
--- 336,342 ----
  OTHER_MAKEFILES= OS2_MAKEFILE NT_MAKEFILE NT_THREADS_MAKEFILE gc.mak \
  		 BCC_MAKEFILE EMX_MAKEFILE WCC_MAKEFILE Makefile.dj \
  		 PCR-Makefile SMakefile.amiga Makefile.DLLs \
! 		 digimars.mak Makefile.direct NT_STATIC_THREADS_MAKEFILE
  #	Makefile and Makefile.direct are copies of each other.
  
  OTHER_FILES= Makefile setjmp_t.c callprocs pc_excludes \
*************** SPECIALCFLAGS = -I$(srcdir)/include
*** 356,371 ****
  
  all: gc.a gctest
  
! BSD-pkg-all: bsd-libgc.a
  
  bsd-libgc.a:
  	$(MAKE) CFLAGS="$(CFLAGS)" clean c++-t
  	mv gc.a bsd-libgc.a
  
  BSD-pkg-install: BSD-pkg-all
  	${CP} bsd-libgc.a libgc.a
  	${INSTALL_DATA} libgc.a ${PREFIX}/lib
  	${INSTALL_DATA} gc.h gc_cpp.h ${PREFIX}/include
  
  pcr: PCR-Makefile include/private/gc_private.h include/private/gc_hdrs.h \
  include/private/gc_locks.h include/gc.h include/private/gcconfig.h \
--- 368,390 ----
  
  all: gc.a gctest
  
! LEAKFLAGS=$(CFLAGS) -DFIND_LEAK
! 
! BSD-pkg-all: bsd-libgc.a bsd-libleak.a
  
  bsd-libgc.a:
  	$(MAKE) CFLAGS="$(CFLAGS)" clean c++-t
  	mv gc.a bsd-libgc.a
  
+ bsd-libleak.a:
+ 	$(MAKE) -f Makefile.direct CFLAGS="$(LEAKFLAGS)" clean c++-nt
+ 	mv gc.a bsd-libleak.a
+ 
  BSD-pkg-install: BSD-pkg-all
  	${CP} bsd-libgc.a libgc.a
  	${INSTALL_DATA} libgc.a ${PREFIX}/lib
  	${INSTALL_DATA} gc.h gc_cpp.h ${PREFIX}/include
+ 	${INSTALL_MAN} doc/gc.man ${PREFIX}/man/man3/gc.3
  
  pcr: PCR-Makefile include/private/gc_private.h include/private/gc_hdrs.h \
  include/private/gc_locks.h include/gc.h include/private/gcconfig.h \
diff -Nrcpad gcc-3.4.3/boehm-gc/Makefile.dist gcc-4.0.0/boehm-gc/Makefile.dist
*** gcc-3.4.3/boehm-gc/Makefile.dist	Fri Aug 17 18:30:44 2001
--- gcc-4.0.0/boehm-gc/Makefile.dist	Fri Aug 13 23:05:28 2004
***************
*** 1,4 ****
! # This is the original manually generated Makefile.  It may stil be used
  # to build the collector.
  #
  # Primary targets:
--- 1,4 ----
! # This is the original manually generated Makefile.  It may still be used
  # to build the collector.
  #
  # Primary targets:
***************
*** 10,22 ****
  #	 c++ interface to gc.a
  # cord/de - builds dumb editor based on cords.
  ABI_FLAG= 
  CC=cc $(ABI_FLAG)
  CXX=g++ $(ABI_FLAG)
! AS=as $(ABI_FLAG)
  #  The above doesn't work with gas, which doesn't run cpp.
  #  Define AS as `gcc -c -x assembler-with-cpp' instead.
- #  Under Irix 6, you will have to specify the ABI (-o32, -n32, or -64)
- #  if you use something other than the default ABI on your machine.
  
  # Redefining srcdir allows object code for the nonPCR version of the collector
  # to be generated in different directories.
--- 10,29 ----
  #	 c++ interface to gc.a
  # cord/de - builds dumb editor based on cords.
  ABI_FLAG= 
+ # ABI_FLAG should be the cc flag that specifies the ABI.  On most
+ # platforms this will be the empty string.  Possible values:
+ # +DD64 for 64-bit executable on HP/UX.
+ # -n32, -n64, -o32 for SGI/MIPS ABIs.
+ 
+ AS_ABI_FLAG=$(ABI_FLAG)
+ # ABI flag for assembler.  On HP/UX this is +A64 for 64 bit
+ # executables.
+ 
  CC=cc $(ABI_FLAG)
  CXX=g++ $(ABI_FLAG)
! AS=as $(AS_ABI_FLAG)
  #  The above doesn't work with gas, which doesn't run cpp.
  #  Define AS as `gcc -c -x assembler-with-cpp' instead.
  
  # Redefining srcdir allows object code for the nonPCR version of the collector
  # to be generated in different directories.
*************** CFLAGS= -O -I$(srcdir)/include -DATOMIC_
*** 27,34 ****
  
  # To build the parallel collector on Linux, add to the above:
  # -DGC_LINUX_THREADS -DPARALLEL_MARK -DTHREAD_LOCAL_ALLOC
! # To build the parallel collector n a static library on HP/UX, add to the above:
! # -DGC_HPUX_THREADS -DPARALLEL_MARK -DTHREAD_LOCAL_ALLOC -DUSE_HPUX_TLS -D_POSIX_C_SOURCE=199506L
  
  # HOSTCC and HOSTCFLAGS are used to build executables that will be run as
  # part of the build process, i.e. on the build machine.  These will usually
--- 34,44 ----
  
  # To build the parallel collector on Linux, add to the above:
  # -DGC_LINUX_THREADS -DPARALLEL_MARK -DTHREAD_LOCAL_ALLOC
! # To build the parallel collector in a static library on HP/UX,
! # add to the above:
! # -DGC_HPUX_THREADS -DPARALLEL_MARK -DTHREAD_LOCAL_ALLOC -D_POSIX_C_SOURCE=199506L
! # To build the thread-safe collector on Tru64, add to the above:
! # -pthread -DGC_OSF1_THREADS
  
  # HOSTCC and HOSTCFLAGS are used to build executables that will be run as
  # part of the build process, i.e. on the build machine.  These will usually
*************** HOSTCFLAGS=$(CFLAGS)
*** 54,65 ****
  #   gc.h before performing thr_ or dl* or GC_ operations.)
  #   Must also define -D_REENTRANT.
  # -DGC_SOLARIS_PTHREADS enables support for Solaris pthreads.
! #   Define SOLARIS_THREADS as well.
  # -DGC_IRIX_THREADS enables support for Irix pthreads.  See README.irix.
  # -DGC_HPUX_THREADS enables support for HP/UX 11 pthreads.
  #   Also requires -D_REENTRANT or -D_POSIX_C_SOURCE=199506L. See README.hp.
  # -DGC_LINUX_THREADS enables support for Xavier Leroy's Linux threads.
  #   see README.linux.  -D_REENTRANT may also be required.
  # -DALL_INTERIOR_POINTERS allows all pointers to the interior
  #   of objects to be recognized.  (See gc_priv.h for consequences.)
  #   Alternatively, GC_all_interior_pointers can be set at process
--- 64,85 ----
  #   gc.h before performing thr_ or dl* or GC_ operations.)
  #   Must also define -D_REENTRANT.
  # -DGC_SOLARIS_PTHREADS enables support for Solaris pthreads.
! #   (Internally this define GC_SOLARIS_THREADS as well.)
  # -DGC_IRIX_THREADS enables support for Irix pthreads.  See README.irix.
  # -DGC_HPUX_THREADS enables support for HP/UX 11 pthreads.
  #   Also requires -D_REENTRANT or -D_POSIX_C_SOURCE=199506L. See README.hp.
  # -DGC_LINUX_THREADS enables support for Xavier Leroy's Linux threads.
  #   see README.linux.  -D_REENTRANT may also be required.
+ # -DGC_OSF1_THREADS enables support for Tru64 pthreads.  Untested.
+ # -DGC_FREEBSD_THREADS enables support for FreeBSD pthreads.  Untested.
+ #   Appeared to run into some underlying thread problems.
+ # -DGC_DARWIN_THREADS enables support for Mac OS X pthreads.  Untested.
+ # -DGC_DGUX386_THREADS enables support for DB/UX on I386 threads.
+ #   See README.DGUX386.
+ # -DGC_WIN32_THREADS enables support for win32 threads.  That makes sense
+ #   for this Makefile only under Cygwin.
+ # -DGC_THREADS should set the appropriate one of the above macros.
+ #   It assumes pthreads for Solaris.
  # -DALL_INTERIOR_POINTERS allows all pointers to the interior
  #   of objects to be recognized.  (See gc_priv.h for consequences.)
  #   Alternatively, GC_all_interior_pointers can be set at process
*************** HOSTCFLAGS=$(CFLAGS)
*** 88,113 ****
  #   code from the heap.  Currently this only affects the incremental
  #   collector on UNIX machines.  It may greatly improve its performance,
  #   since this may avoid some expensive cache synchronization.
! # -DOPERATOR_NEW_ARRAY declares that the C++ compiler supports the
! #   new syntax "operator new[]" for allocating and deleting arrays.
  #   See gc_cpp.h for details.  No effect on the C part of the collector.
! #   This is defined implicitly in a few environments.
! # -DREDIRECT_MALLOC=X causes malloc, realloc, and free to be defined
! #   as aliases for X, GC_realloc, and GC_free, respectively.
! #   Calloc is redefined in terms of the new malloc.  X should
  #   be either GC_malloc or GC_malloc_uncollectable, or
  #   GC_debug_malloc_replacement.  (The latter invokes GC_debug_malloc
  #   with dummy source location information, but still results in
! #   properly remembered call stacks on Linux/X86 and Solaris/SPARC.)
  #   The former is occasionally useful for working around leaks in code
  #   you don't want to (or can't) look at.  It may not work for
  #   existing code, but it often does.  Neither works on all platforms,
  #   since some ports use malloc or calloc to obtain system memory.
! #   (Probably works for UNIX, and win32.)
  # -DREDIRECT_REALLOC=X causes GC_realloc to be redirected to X.
  #   The canonical use is -DREDIRECT_REALLOC=GC_debug_realloc_replacement,
  #   together with -DREDIRECT_MALLOC=GC_debug_malloc_replacement to
  #   generate leak reports with call stacks for both malloc and realloc.
  # -DIGNORE_FREE turns calls to free into a noop.  Only useful with
  #   -DREDIRECT_MALLOC.
  # -DNO_DEBUGGING removes GC_dump and the debugging routines it calls.
--- 108,141 ----
  #   code from the heap.  Currently this only affects the incremental
  #   collector on UNIX machines.  It may greatly improve its performance,
  #   since this may avoid some expensive cache synchronization.
! # -DGC_NO_OPERATOR_NEW_ARRAY declares that the C++ compiler does not support
! #   the  new syntax "operator new[]" for allocating and deleting arrays.
  #   See gc_cpp.h for details.  No effect on the C part of the collector.
! #   This is defined implicitly in a few environments.  Must also be defined
! #   by clients that use gc_cpp.h.
! # -DREDIRECT_MALLOC=X causes malloc to be defined as alias for X.
! #   Unless the following macros are defined, realloc is also redirected
! #   to GC_realloc, and free is redirected to GC_free.
! #   Calloc and strdup are redefined in terms of the new malloc.  X should
  #   be either GC_malloc or GC_malloc_uncollectable, or
  #   GC_debug_malloc_replacement.  (The latter invokes GC_debug_malloc
  #   with dummy source location information, but still results in
! #   properly remembered call stacks on Linux/X86 and Solaris/SPARC.
! #   It requires that the following two macros also be used.)
  #   The former is occasionally useful for working around leaks in code
  #   you don't want to (or can't) look at.  It may not work for
  #   existing code, but it often does.  Neither works on all platforms,
  #   since some ports use malloc or calloc to obtain system memory.
! #   (Probably works for UNIX, and win32.)  If you build with DBG_HDRS_ALL,
! #   you should only use GC_debug_malloc_replacement as a malloc
! #   replacement.
  # -DREDIRECT_REALLOC=X causes GC_realloc to be redirected to X.
  #   The canonical use is -DREDIRECT_REALLOC=GC_debug_realloc_replacement,
  #   together with -DREDIRECT_MALLOC=GC_debug_malloc_replacement to
  #   generate leak reports with call stacks for both malloc and realloc.
+ #   This also requires the following:
+ # -DREDIRECT_FREE=X causes free to be redirected to X.  The
+ #   canonical use is -DREDIRECT_FREE=GC_debug_free.
  # -DIGNORE_FREE turns calls to free into a noop.  Only useful with
  #   -DREDIRECT_MALLOC.
  # -DNO_DEBUGGING removes GC_dump and the debugging routines it calls.
*************** HOSTCFLAGS=$(CFLAGS)
*** 135,142 ****
  #   Works for Solaris and Irix.
  # -DUSE_MUNMAP causes memory to be returned to the OS under the right
  #   circumstances.  This currently disables VM-based incremental collection.
! #   This is currently experimental, and works only under some Unix and
! #   Linux versions.
  # -DMMAP_STACKS (for Solaris threads) Use mmap from /dev/zero rather than
  #   GC_scratch_alloc() to get stack memory.
  # -DPRINT_BLACK_LIST Whenever a black list entry is added, i.e. whenever
--- 163,170 ----
  #   Works for Solaris and Irix.
  # -DUSE_MUNMAP causes memory to be returned to the OS under the right
  #   circumstances.  This currently disables VM-based incremental collection.
! #   This is currently experimental, and works only under some Unix,
! #   Linux and Windows versions.
  # -DMMAP_STACKS (for Solaris threads) Use mmap from /dev/zero rather than
  #   GC_scratch_alloc() to get stack memory.
  # -DPRINT_BLACK_LIST Whenever a black list entry is added, i.e. whenever
*************** HOSTCFLAGS=$(CFLAGS)
*** 154,160 ****
  #   this facility is only used in a few places.  It is intended primarily
  #   for debugging of the garbage collector itself, but could also
  # -DDBG_HDRS_ALL Make sure that all objects have debug headers.  Increases
! #   the reliability (from 99.9999% to 100%) of some of the debugging
  #   code (especially KEEP_BACK_PTRS).  Makes -DSHORT_DBG_HDRS possible.
  #   Assumes that all client allocation is done through debugging
  #   allocators.
--- 182,188 ----
  #   this facility is only used in a few places.  It is intended primarily
  #   for debugging of the garbage collector itself, but could also
  # -DDBG_HDRS_ALL Make sure that all objects have debug headers.  Increases
! #   the reliability (from 99.9999% to 100% mod. bugs) of some of the debugging
  #   code (especially KEEP_BACK_PTRS).  Makes -DSHORT_DBG_HDRS possible.
  #   Assumes that all client allocation is done through debugging
  #   allocators.
*************** HOSTCFLAGS=$(CFLAGS)
*** 172,179 ****
  #   allocated through the debugging interface.  Affects the amount of
  #   information generated in leak reports.  Only matters on platforms
  #   on which we can quickly generate call stacks, currently Linux/(X86 & SPARC)
! #   and Solaris/SPARC.  Turns on call chain saving on X86.  On X86, client
  #   code should NOT be compiled with -fomit-frame-pointer.
  # -DCHECKSUMS reports on erroneously clear dirty bits, and unexpectedly
  #   altered stubborn objects, at substantial performance cost.
  #   Use only for debugging of the incremental collector.
--- 200,211 ----
  #   allocated through the debugging interface.  Affects the amount of
  #   information generated in leak reports.  Only matters on platforms
  #   on which we can quickly generate call stacks, currently Linux/(X86 & SPARC)
! #   and Solaris/SPARC and platforms that provide execinfo.h.
! #   Default is zero.  On X86, client
  #   code should NOT be compiled with -fomit-frame-pointer.
+ # -DSAVE_CALL_NARGS=<n> Set the number of functions arguments to be
+ #   saved with each call frame.  Default is zero.  Ignored if we
+ #   don't know how to retrieve arguments on the platform.
  # -DCHECKSUMS reports on erroneously clear dirty bits, and unexpectedly
  #   altered stubborn objects, at substantial performance cost.
  #   Use only for debugging of the incremental collector.
*************** HOSTCFLAGS=$(CFLAGS)
*** 190,197 ****
  #   15% or so.
  # -DUSE_3DNOW_PREFETCH causes the collector to issue AMD 3DNow style
  #   prefetch instructions.  Same restrictions as USE_I686_PREFETCH.
! #   UNTESTED!!
! # -DGC_USE_LD_WRAP in combination with the gld flags listed in README.linux
  #   causes the collector some system and pthread calls in a more transparent
  #   fashion than the usual macro-based approach.  Requires GNU ld, and
  #   currently probably works only with Linux.
--- 222,232 ----
  #   15% or so.
  # -DUSE_3DNOW_PREFETCH causes the collector to issue AMD 3DNow style
  #   prefetch instructions.  Same restrictions as USE_I686_PREFETCH.
! #   Minimally tested.  Didn't appear to be an obvious win on a K6-2/500.
! # -DUSE_PPC_PREFETCH causes the collector to issue PowerPC style
! #   prefetch instructions.  No effect except on PowerPC OS X platforms.
! #   Performance impact untested.
! # -DGC_USE_LD_WRAP in combination with the old flags listed in README.linux
  #   causes the collector some system and pthread calls in a more transparent
  #   fashion than the usual macro-based approach.  Requires GNU ld, and
  #   currently probably works only with Linux.
*************** HOSTCFLAGS=$(CFLAGS)
*** 200,205 ****
--- 235,244 ----
  #   in a way that usually does not involve acquisition of a global lock.
  #   Currently requires -DGC_LINUX_THREADS, but should be easy to port to
  #   other pthreads environments.  Recommended for multiprocessors.
+ # -DUSE_COMPILER_TLS causes thread local allocation to use compiler-supported
+ #   "__thread" thread-local variables.  This is the default in HP/UX.  It
+ #   may help performance on recent Linux installations.  (It failed for
+ #   me on RedHat 8, but appears to work on RedHat 9.)
  # -DPARALLEL_MARK allows the marker to run in multiple threads.  Recommended
  #   for multiprocessors.  Currently requires Linux on X86 or IA64, though
  #   support for other Posix platforms should be fairly easy to add,
*************** HOSTCFLAGS=$(CFLAGS)
*** 208,216 ****
--- 247,281 ----
  #   These may otherwise alter its configuration, or turn off GC altogether.
  #   I don't know of a reason to disable this, except possibly if the
  #   resulting process runs as a privileged user?
+ # -DUSE_GLOBAL_ALLOC.  Win32 only.  Use GlobalAlloc instead of
+ #   VirtualAlloc to allocate the heap.  May be needed to work around
+ #   a Windows NT/2000 issue.  Incompatible with USE_MUNMAP.
+ #   See README.win32 for details.
+ # -DMAKE_BACK_GRAPH. Enable GC_PRINT_BACK_HEIGHT environment variable.
+ #   See README.environment for details.  Experimental. Limited platform
+ #   support.  Implies DBG_HDRS_ALL.  All allocation should be done using
+ #   the debug interface.
  # -DSTUBBORN_ALLOC allows allocation of "hard to change" objects, and thus
  #   makes incremental collection easier.  Was enabled by default until 6.0.
  #   Rarely used, to my knowledge.
+ # -DHANDLE_FORK attempts to make GC_malloc() work in a child process fork()ed
+ #   from a multithreaded parent.  Currently only supported by pthread_support.c.
+ #   (Similar code should work on Solaris or Irix, but it hasn't been tried.)
+ # -DTEST_WITH_SYSTEM_MALLOC causes gctest to allocate (and leak) large chunks
+ #   of memory with the standard system malloc.  This will cause the root
+ #   set and collected heap to grow significantly if malloced memory is
+ #   somehow getting traced by the collector.  This has no impact on the
+ #   generated library; it only affects the test.
+ # -DPOINTER_MASK=0x... causes candidate pointers to be ANDed with the
+ #   given mask before being considered.  If either this or the following
+ #   macro is defined, it will be assumed that all pointers stored in
+ #   the heap need to be processed this way.  Stack and register pointers
+ #   will be considered both with and without processing.
+ #   These macros are normally needed only to support systems that use
+ #   high-order pointer tags. EXPERIMENTAL.
+ # -DPOINTER_SHIFT=n causes the collector to left shift candidate pointers
+ #   by the indicated amount before trying to interpret them.  Applied
+ #   after POINTER_MASK. EXPERIMENTAL.  See also the preceding macro.
  #
  
  CXXFLAGS= $(CFLAGS) 
*************** AR= ar
*** 218,267 ****
  RANLIB= ranlib
  
  
! OBJS= alloc.o reclaim.o allchblk.o misc.o mach_dep.o os_dep.o mark_rts.o headers.o mark.o obj_map.o blacklst.o finalize.o new_hblk.o dbg_mlc.o malloc.o stubborn.o checksums.o solaris_threads.o irix_threads.o linux_threads.o typd_mlc.o ptr_chck.o mallocx.o solaris_pthreads.o gcj_mlc.o specific.o gc_dlopen.o
  
! CSRCS= reclaim.c allchblk.c misc.c alloc.c mach_dep.c os_dep.c mark_rts.c headers.c mark.c obj_map.c pcr_interface.c blacklst.c finalize.c new_hblk.c real_malloc.c dyn_load.c dbg_mlc.c malloc.c stubborn.c checksums.c solaris_threads.c irix_threads.c linux_threads.c typd_mlc.c ptr_chck.c mallocx.c solaris_pthreads.c gcj_mlc.c specific.c gc_dlopen.c
  
  CORD_SRCS=  cord/cordbscs.c cord/cordxtra.c cord/cordprnt.c cord/de.c cord/cordtest.c include/cord.h include/ec.h include/private/cord_pos.h cord/de_win.c cord/de_win.h cord/de_cmds.h cord/de_win.ICO cord/de_win.RC
  
  CORD_OBJS=  cord/cordbscs.o cord/cordxtra.o cord/cordprnt.o
  
! SRCS= $(CSRCS) mips_sgi_mach_dep.s rs6000_mach_dep.s alpha_mach_dep.s \
!     sparc_mach_dep.s include/gc.h include/gc_typed.h \
      include/private/gc_hdrs.h include/private/gc_priv.h \
      include/private/gcconfig.h include/private/gc_pmark.h \
      include/gc_inl.h include/gc_inline.h include/gc_mark.h \
      threadlibs.c if_mach.c if_not_there.c gc_cpp.cc include/gc_cpp.h \
!     include/weakpointer.h include/private/gc_locks.h \
      gcc_support.c mips_ultrix_mach_dep.s include/gc_alloc.h \
!     include/new_gc_alloc.h include/javaxfc.h sparc_sunos4_mach_dep.s \
!     sparc_netbsd_mach_dep.s \
      include/private/solaris_threads.h include/gc_backptr.h \
      hpux_test_and_clear.s include/gc_gcj.h \
      include/gc_local_alloc.h include/private/dbg_mlc.h \
!     include/private/specific.h powerpc_macosx_mach_dep.s \
      include/leak_detector.h include/gc_amiga_redirects.h \
!     include/gc_pthread_redirects.h $(CORD_SRCS)
  
  DOC_FILES= README.QUICK doc/README.Mac doc/README.MacOSX doc/README.OS2 \
! 	doc/README.amiga doc/README.cords doc/README.debugging \
  	doc/README.dj doc/README.hp doc/README.linux doc/README.rs6000 \
  	doc/README.sgi doc/README.solaris2 doc/README.uts \
  	doc/README.win32 doc/barrett_diagram doc/README \
          doc/README.contributors doc/README.changes doc/gc.man \
! 	doc/README.environment
  
  TESTS= tests/test.c tests/test_cpp.cc tests/trace_test.c \
! 	tests/leak_test.c tests/thread_leak_test.c
! OTHER_FILES= Makefile PCR-Makefile OS2_MAKEFILE NT_MAKEFILE BCC_MAKEFILE \
!            setjmp_t.c SMakefile.amiga configure.in Makefile.am \
!            callprocs pc_excludes \
!            MacProjects.sit.hqx MacOS.c EMX_MAKEFILE \
             Mac_files/datastart.c Mac_files/dataend.c \
             Mac_files/MacOS_config.h Mac_files/MacOS_Test_config.h \
             add_gc_prefix.c gc_cpp.cpp \
! 	   win32_threads.c NT_THREADS_MAKEFILE gc.mak Makefile.dj \
! 	   version.h Makefile.DLLs WCC_MAKEFILE AmigaOS.c $(TESTS)
  
  CORD_INCLUDE_FILES= $(srcdir)/include/gc.h $(srcdir)/include/cord.h \
  	$(srcdir)/include/ec.h $(srcdir)/include/private/cord_pos.h
--- 283,351 ----
  RANLIB= ranlib
  
  
! OBJS= alloc.o reclaim.o allchblk.o misc.o mach_dep.o os_dep.o mark_rts.o headers.o mark.o obj_map.o blacklst.o finalize.o new_hblk.o dbg_mlc.o malloc.o stubborn.o checksums.o solaris_threads.o aix_irix_threads.o pthread_support.o pthread_stop_world.o darwin_stop_world.o typd_mlc.o ptr_chck.o mallocx.o solaris_pthreads.o gcj_mlc.o specific.o gc_dlopen.o backgraph.o win32_threads.o
  
! CSRCS= reclaim.c allchblk.c misc.c alloc.c mach_dep.c os_dep.c mark_rts.c headers.c mark.c obj_map.c pcr_interface.c blacklst.c finalize.c new_hblk.c real_malloc.c dyn_load.c dbg_mlc.c malloc.c stubborn.c checksums.c solaris_threads.c aix_irix_threads.c pthread_support.c pthread_stop_world.c darwin_stop_world.c typd_mlc.c ptr_chck.c mallocx.c solaris_pthreads.c gcj_mlc.c specific.c gc_dlopen.c backgraph.c win32_threads.c
  
  CORD_SRCS=  cord/cordbscs.c cord/cordxtra.c cord/cordprnt.c cord/de.c cord/cordtest.c include/cord.h include/ec.h include/private/cord_pos.h cord/de_win.c cord/de_win.h cord/de_cmds.h cord/de_win.ICO cord/de_win.RC
  
  CORD_OBJS=  cord/cordbscs.o cord/cordxtra.o cord/cordprnt.o
  
! SRCS= $(CSRCS) mips_sgi_mach_dep.s rs6000_mach_dep.s alpha_mach_dep.S \
!     sparc_mach_dep.S include/gc.h include/gc_typed.h \
      include/private/gc_hdrs.h include/private/gc_priv.h \
      include/private/gcconfig.h include/private/gc_pmark.h \
      include/gc_inl.h include/gc_inline.h include/gc_mark.h \
      threadlibs.c if_mach.c if_not_there.c gc_cpp.cc include/gc_cpp.h \
!     gcname.c include/weakpointer.h include/private/gc_locks.h \
      gcc_support.c mips_ultrix_mach_dep.s include/gc_alloc.h \
!     include/new_gc_alloc.h include/gc_allocator.h \
!     include/javaxfc.h sparc_sunos4_mach_dep.s sparc_netbsd_mach_dep.s \
      include/private/solaris_threads.h include/gc_backptr.h \
      hpux_test_and_clear.s include/gc_gcj.h \
      include/gc_local_alloc.h include/private/dbg_mlc.h \
!     include/private/specific.h powerpc_darwin_mach_dep.s \
      include/leak_detector.h include/gc_amiga_redirects.h \
!     include/gc_pthread_redirects.h ia64_save_regs_in_stack.s \
!     include/gc_config_macros.h include/private/pthread_support.h \
!     include/private/pthread_stop_world.h include/private/darwin_semaphore.h \
!     include/private/darwin_stop_world.h $(CORD_SRCS)
  
  DOC_FILES= README.QUICK doc/README.Mac doc/README.MacOSX doc/README.OS2 \
! 	doc/README.amiga doc/README.cords doc/debugging.html \
  	doc/README.dj doc/README.hp doc/README.linux doc/README.rs6000 \
  	doc/README.sgi doc/README.solaris2 doc/README.uts \
  	doc/README.win32 doc/barrett_diagram doc/README \
          doc/README.contributors doc/README.changes doc/gc.man \
! 	doc/README.environment doc/tree.html doc/gcdescr.html \
! 	doc/README.autoconf doc/README.macros doc/README.ews4800 \
! 	doc/README.DGUX386 doc/README.arm.cross doc/leak.html \
! 	doc/scale.html doc/gcinterface.html doc/README.darwin \
! 	doc/simple_example.html
  
  TESTS= tests/test.c tests/test_cpp.cc tests/trace_test.c \
! 	tests/leak_test.c tests/thread_leak_test.c tests/middle.c
! 
! GNU_BUILD_FILES= configure.in Makefile.am configure acinclude.m4 \
! 		 libtool.m4 install-sh configure.host Makefile.in \
! 		 aclocal.m4 config.sub config.guess \
! 		 include/Makefile.am include/Makefile.in \
! 		 doc/Makefile.am doc/Makefile.in \
! 		 ltmain.sh mkinstalldirs depcomp missing
! 
! OTHER_MAKEFILES= OS2_MAKEFILE NT_MAKEFILE NT_THREADS_MAKEFILE gc.mak \
! 		 BCC_MAKEFILE EMX_MAKEFILE WCC_MAKEFILE Makefile.dj \
! 		 PCR-Makefile SMakefile.amiga Makefile.DLLs \
! 		 digimars.mak Makefile.direct NT_STATIC_THREADS_MAKEFILE
! #	Makefile and Makefile.direct are copies of each other.
! 
! OTHER_FILES= Makefile setjmp_t.c callprocs pc_excludes \
!            MacProjects.sit.hqx MacOS.c \
             Mac_files/datastart.c Mac_files/dataend.c \
             Mac_files/MacOS_config.h Mac_files/MacOS_Test_config.h \
             add_gc_prefix.c gc_cpp.cpp \
! 	   version.h AmigaOS.c \
! 	   $(TESTS) $(GNU_BUILD_FILES) $(OTHER_MAKEFILES)
  
  CORD_INCLUDE_FILES= $(srcdir)/include/gc.h $(srcdir)/include/cord.h \
  	$(srcdir)/include/ec.h $(srcdir)/include/private/cord_pos.h
*************** SPECIALCFLAGS = -I$(srcdir)/include
*** 284,299 ****
  
  all: gc.a gctest
  
! BSD-pkg-all: bsd-libgc.a
  
  bsd-libgc.a:
  	$(MAKE) CFLAGS="$(CFLAGS)" clean c++-t
  	mv gc.a bsd-libgc.a
  
  BSD-pkg-install: BSD-pkg-all
  	${CP} bsd-libgc.a libgc.a
  	${INSTALL_DATA} libgc.a ${PREFIX}/lib
  	${INSTALL_DATA} gc.h gc_cpp.h ${PREFIX}/include
  
  pcr: PCR-Makefile include/private/gc_private.h include/private/gc_hdrs.h \
  include/private/gc_locks.h include/gc.h include/private/gcconfig.h \
--- 368,390 ----
  
  all: gc.a gctest
  
! LEAKFLAGS=$(CFLAGS) -DFIND_LEAK
! 
! BSD-pkg-all: bsd-libgc.a bsd-libleak.a
  
  bsd-libgc.a:
  	$(MAKE) CFLAGS="$(CFLAGS)" clean c++-t
  	mv gc.a bsd-libgc.a
  
+ bsd-libleak.a:
+ 	$(MAKE) -f Makefile.direct CFLAGS="$(LEAKFLAGS)" clean c++-nt
+ 	mv gc.a bsd-libleak.a
+ 
  BSD-pkg-install: BSD-pkg-all
  	${CP} bsd-libgc.a libgc.a
  	${INSTALL_DATA} libgc.a ${PREFIX}/lib
  	${INSTALL_DATA} gc.h gc_cpp.h ${PREFIX}/include
+ 	${INSTALL_MAN} doc/gc.man ${PREFIX}/man/man3/gc.3
  
  pcr: PCR-Makefile include/private/gc_private.h include/private/gc_hdrs.h \
  include/private/gc_locks.h include/gc.h include/private/gcconfig.h \
*************** mach_dep.o $(SRCS)
*** 304,319 ****
  $(OBJS) tests/test.o dyn_load.o dyn_load_sunos53.o: \
      $(srcdir)/include/private/gc_priv.h \
      $(srcdir)/include/private/gc_hdrs.h $(srcdir)/include/private/gc_locks.h \
!     $(srcdir)/include/gc.h \
      $(srcdir)/include/private/gcconfig.h $(srcdir)/include/gc_typed.h \
!     Makefile
  # The dependency on Makefile is needed.  Changing
  # options such as -DSILENT affects the size of GC_arrays,
  # invalidating all .o files that rely on gc_priv.h
  
  mark.o typd_mlc.o finalize.o ptr_chck.o: $(srcdir)/include/gc_mark.h $(srcdir)/include/private/gc_pmark.h
  
! specific.o linux_threads.o: $(srcdir)/include/private/specific.h
  
  solaris_threads.o solaris_pthreads.o: $(srcdir)/include/private/solaris_threads.h
  
--- 395,410 ----
  $(OBJS) tests/test.o dyn_load.o dyn_load_sunos53.o: \
      $(srcdir)/include/private/gc_priv.h \
      $(srcdir)/include/private/gc_hdrs.h $(srcdir)/include/private/gc_locks.h \
!     $(srcdir)/include/gc.h $(srcdir)/include/gc_pthread_redirects.h \
      $(srcdir)/include/private/gcconfig.h $(srcdir)/include/gc_typed.h \
!     $(srcdir)/include/gc_config_macros.h Makefile
  # The dependency on Makefile is needed.  Changing
  # options such as -DSILENT affects the size of GC_arrays,
  # invalidating all .o files that rely on gc_priv.h
  
  mark.o typd_mlc.o finalize.o ptr_chck.o: $(srcdir)/include/gc_mark.h $(srcdir)/include/private/gc_pmark.h
  
! specific.o pthread_support.o: $(srcdir)/include/private/specific.h
  
  solaris_threads.o solaris_pthreads.o: $(srcdir)/include/private/solaris_threads.h
  
*************** liblinuxgc.so: $(OBJS) dyn_load.o
*** 408,428 ****
  # 	gcc -shared -Wl,-soname=libgc.so.0 -o libgc.so.0 $(LIBOBJS) dyn_load.lo
  #	touch liblinuxgc.so
  
! mach_dep.o: $(srcdir)/mach_dep.c $(srcdir)/mips_sgi_mach_dep.s $(srcdir)/mips_ultrix_mach_dep.s \
!             $(srcdir)/rs6000_mach_dep.s $(srcdir)/powerpc_macosx_mach_dep.s $(UTILS)
  	rm -f mach_dep.o
! 	./if_mach MIPS IRIX5 $(AS) -o mach_dep.o $(srcdir)/mips_sgi_mach_dep.s
  	./if_mach MIPS RISCOS $(AS) -o mach_dep.o $(srcdir)/mips_ultrix_mach_dep.s
  	./if_mach MIPS ULTRIX $(AS) -o mach_dep.o $(srcdir)/mips_ultrix_mach_dep.s
! 	./if_mach RS6000 "" $(AS) -o mach_dep.o $(srcdir)/rs6000_mach_dep.s
! 	./if_mach POWERPC MACOSX $(AS) -o mach_dep.o $(srcdir)/powerpc_macosx_mach_dep.s
! #	./if_mach ALPHA "" $(AS) -o mach_dep.o $(srcdir)/alpha_mach_dep.s
! #	alpha_mach_dep.s assumes that pointers are not saved in fp registers.
! #	Gcc on a 21264 can spill pointers to fp registers.  Oops.
! 	./if_mach SPARC SUNOS5 $(AS) -o mach_dep.o $(srcdir)/sparc_mach_dep.s
  	./if_mach SPARC SUNOS4 $(AS) -o mach_dep.o $(srcdir)/sparc_sunos4_mach_dep.s
  	./if_mach SPARC OPENBSD $(AS) -o mach_dep.o $(srcdir)/sparc_sunos4_mach_dep.s
  	./if_mach SPARC NETBSD $(AS) -o mach_dep.o $(srcdir)/sparc_netbsd_mach_dep.s
  	./if_not_there mach_dep.o $(CC) -c $(SPECIALCFLAGS) $(srcdir)/mach_dep.c
  
  mark_rts.o: $(srcdir)/mark_rts.c $(UTILS)
--- 499,523 ----
  # 	gcc -shared -Wl,-soname=libgc.so.0 -o libgc.so.0 $(LIBOBJS) dyn_load.lo
  #	touch liblinuxgc.so
  
! mach_dep.o: $(srcdir)/mach_dep.c $(srcdir)/mips_sgi_mach_dep.s \
! 	    $(srcdir)/mips_ultrix_mach_dep.s \
!             $(srcdir)/rs6000_mach_dep.s $(srcdir)/powerpc_darwin_mach_dep.s \
! 	    $(srcdir)/sparc_mach_dep.S $(srcdir)/sparc_sunos4_mach_dep.s \
! 	    $(srcdir)/ia64_save_regs_in_stack.s \
! 	    $(srcdir)/sparc_netbsd_mach_dep.s $(UTILS)
  	rm -f mach_dep.o
! 	./if_mach MIPS IRIX5 $(CC) -c -o mach_dep.o $(srcdir)/mips_sgi_mach_dep.s
  	./if_mach MIPS RISCOS $(AS) -o mach_dep.o $(srcdir)/mips_ultrix_mach_dep.s
  	./if_mach MIPS ULTRIX $(AS) -o mach_dep.o $(srcdir)/mips_ultrix_mach_dep.s
! 	./if_mach POWERPC DARWIN $(AS) -o mach_dep.o $(srcdir)/powerpc_darwin_mach_dep.s
! 	./if_mach ALPHA LINUX $(CC) -c -o mach_dep.o $(srcdir)/alpha_mach_dep.S
! 	./if_mach SPARC SUNOS5 $(CC) -c -o mach_dep.o $(srcdir)/sparc_mach_dep.S
  	./if_mach SPARC SUNOS4 $(AS) -o mach_dep.o $(srcdir)/sparc_sunos4_mach_dep.s
  	./if_mach SPARC OPENBSD $(AS) -o mach_dep.o $(srcdir)/sparc_sunos4_mach_dep.s
  	./if_mach SPARC NETBSD $(AS) -o mach_dep.o $(srcdir)/sparc_netbsd_mach_dep.s
+ 	./if_mach IA64 "" as $(AS_ABI_FLAG) -o ia64_save_regs_in_stack.o $(srcdir)/ia64_save_regs_in_stack.s
+ 	./if_mach IA64 "" $(CC) -c -o mach_dep1.o $(SPECIALCFLAGS) $(srcdir)/mach_dep.c
+ 	./if_mach IA64 "" ld -r -o mach_dep.o mach_dep1.o ia64_save_regs_in_stack.o
  	./if_not_there mach_dep.o $(CC) -c $(SPECIALCFLAGS) $(srcdir)/mach_dep.c
  
  mark_rts.o: $(srcdir)/mark_rts.c $(UTILS)
*************** cord/de: $(srcdir)/cord/de.c cord/cordbs
*** 462,468 ****
  	./if_mach SPARC DRSNX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a $(CURSES) -lucb `./threadlibs`
  	./if_mach HP_PA HPUX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a $(CURSES) -ldld `./threadlibs`
  	./if_mach RS6000 "" $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses
! 	./if_mach POWERPC MACOSX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a
  	./if_mach I386 LINUX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses `./threadlibs`
  	./if_mach ALPHA LINUX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses `./threadlibs`
  	./if_mach IA64 LINUX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses `./threadlibs`
--- 557,563 ----
  	./if_mach SPARC DRSNX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a $(CURSES) -lucb `./threadlibs`
  	./if_mach HP_PA HPUX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a $(CURSES) -ldld `./threadlibs`
  	./if_mach RS6000 "" $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses
! 	./if_mach POWERPC DARWIN $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a
  	./if_mach I386 LINUX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses `./threadlibs`
  	./if_mach ALPHA LINUX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses `./threadlibs`
  	./if_mach IA64 LINUX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses `./threadlibs`
*************** if_not_there: $(srcdir)/if_not_there.c
*** 481,487 ****
  clean: 
  	rm -f gc.a *.o *.exe tests/*.o gctest gctest_dyn_link test_cpp \
  	      setjmp_test  mon.out gmon.out a.out core if_not_there if_mach \
! 	      threadlibs $(CORD_OBJS) cord/cordtest cord/de
  	-rm -f *~
  
  gctest: tests/test.o gc.a $(UTILS)
--- 576,582 ----
  clean: 
  	rm -f gc.a *.o *.exe tests/*.o gctest gctest_dyn_link test_cpp \
  	      setjmp_test  mon.out gmon.out a.out core if_not_there if_mach \
! 	      threadlibs $(CORD_OBJS) cord/cordtest cord/de 
  	-rm -f *~
  
  gctest: tests/test.o gc.a $(UTILS)
*************** KandRtest: setjmp_test gctest
*** 505,516 ****
  	./setjmp_test
  	./gctest
  
! add_gc_prefix: add_gc_prefix.c
  	$(CC) -o add_gc_prefix $(srcdir)/add_gc_prefix.c
  
! gc.tar: $(SRCS) $(DOC_FILES) $(OTHER_FILES) add_gc_prefix
  	./add_gc_prefix $(SRCS) $(DOC_FILES) $(OTHER_FILES) > /tmp/gc.tar-files
  	tar cvfh gc.tar `cat /tmp/gc.tar-files`
  
  pc_gc.tar: $(SRCS) $(OTHER_FILES)
  	tar cvfX pc_gc.tar pc_excludes $(SRCS) $(OTHER_FILES)
--- 600,621 ----
  	./setjmp_test
  	./gctest
  
! add_gc_prefix: $(srcdir)/add_gc_prefix.c $(srcdir)/version.h
  	$(CC) -o add_gc_prefix $(srcdir)/add_gc_prefix.c
  
! gcname: $(srcdir)/gcname.c $(srcdir)/version.h
! 	$(CC) -o gcname $(srcdir)/gcname.c
! 
! gc.tar: $(SRCS) $(DOC_FILES) $(OTHER_FILES) add_gc_prefix gcname
! 	cp Makefile Makefile.old
! 	cp Makefile.direct Makefile
! 	rm -f `./gcname`
! 	ln -s . `./gcname`
  	./add_gc_prefix $(SRCS) $(DOC_FILES) $(OTHER_FILES) > /tmp/gc.tar-files
  	tar cvfh gc.tar `cat /tmp/gc.tar-files`
+ 	cp gc.tar `./gcname`.tar
+ 	gzip `./gcname`.tar
+ 	rm `./gcname`
  
  pc_gc.tar: $(SRCS) $(OTHER_FILES)
  	tar cvfX pc_gc.tar pc_excludes $(SRCS) $(OTHER_FILES)
diff -Nrcpad gcc-3.4.3/boehm-gc/Makefile.dj gcc-4.0.0/boehm-gc/Makefile.dj
*** gcc-3.4.3/boehm-gc/Makefile.dj	Mon Jul 28 04:18:20 2003
--- gcc-4.0.0/boehm-gc/Makefile.dj	Fri Aug 13 23:05:28 2004
*************** EXE_SUFFIX=.exe
*** 29,35 ****
  srcdir= .
  VPATH= $(srcdir)
  
! CFLAGS= -O -I$(srcdir)/include -DATOMIC_UNCOLLECTABLE -DNO_SIGNALS -DALL_INTERIOR_POINTERS -DNO_EXECUTE_PERMISSION -DSILENT
  
  # Setjmp_test may yield overly optimistic results when compiled
  # without optimization.
--- 29,35 ----
  srcdir= .
  VPATH= $(srcdir)
  
! CFLAGS= -gstabs+ -O2 -I$(srcdir)/include -DATOMIC_UNCOLLECTABLE -DNO_SIGNALS -DALL_INTERIOR_POINTERS -DNO_EXECUTE_PERMISSION -DSILENT
  
  # Setjmp_test may yield overly optimistic results when compiled
  # without optimization.
*************** AR= ar
*** 157,165 ****
  RANLIB= ranlib
  
  
! OBJS= alloc.o reclaim.o allchblk.o misc.o mach_dep.o os_dep.o mark_rts.o headers.o mark.o obj_map.o blacklst.o finalize.o new_hblk.o dbg_mlc.o malloc.o stubborn.o checksums.o solaris_threads.o hpux_irix_threads.o linux_threads.o typd_mlc.o ptr_chck.o mallocx.o solaris_pthreads.o gcj_mlc.o specific.o
  
! CSRCS= reclaim.c allchblk.c misc.c alloc.c mach_dep.c os_dep.c mark_rts.c headers.c mark.c obj_map.c pcr_interface.c blacklst.c finalize.c new_hblk.c real_malloc.c dyn_load.c dbg_mlc.c malloc.c stubborn.c checksums.c solaris_threads.c hpux_irix_threads.c linux_threads.c typd_mlc.c ptr_chck.c mallocx.c solaris_pthreads.c gcj_mlc.c specific.c
  
  CORD_SRCS=  cord/cordbscs.c cord/cordxtra.c cord/cordprnt.c cord/de.c cord/cordtest.c include/cord.h include/ec.h include/private/cord_pos.h cord/de_win.c cord/de_win.h cord/de_cmds.h cord/de_win.ICO cord/de_win.RC cord/SCOPTIONS.amiga cord/SMakefile.amiga
  
--- 157,165 ----
  RANLIB= ranlib
  
  
! OBJS= alloc.o reclaim.o allchblk.o misc.o mach_dep.o os_dep.o mark_rts.o headers.o mark.o obj_map.o blacklst.o finalize.o new_hblk.o dbg_mlc.o malloc.o stubborn.o checksums.o solaris_threads.o typd_mlc.o ptr_chck.o mallocx.o solaris_pthreads.o gcj_mlc.o specific.o
  
! CSRCS= reclaim.c allchblk.c misc.c alloc.c mach_dep.c os_dep.c mark_rts.c headers.c mark.c obj_map.c pcr_interface.c blacklst.c finalize.c new_hblk.c real_malloc.c dyn_load.c dbg_mlc.c malloc.c stubborn.c checksums.c solaris_threads.c typd_mlc.c ptr_chck.c mallocx.c solaris_pthreads.c gcj_mlc.c specific.c
  
  CORD_SRCS=  cord/cordbscs.c cord/cordxtra.c cord/cordprnt.c cord/de.c cord/cordtest.c include/cord.h include/ec.h include/private/cord_pos.h cord/de_win.c cord/de_win.h cord/de_cmds.h cord/de_win.ICO cord/de_win.RC cord/SCOPTIONS.amiga cord/SMakefile.amiga
  
*************** SRCS= $(CSRCS) mips_sgi_mach_dep.S rs600
*** 181,187 ****
      include/leak_detector.h $(CORD_SRCS)
  
  OTHER_FILES= Makefile PCR-Makefile OS2_MAKEFILE NT_MAKEFILE BCC_MAKEFILE \
!            README test.c test_cpp.cc setjmp_t.c SMakefile.amiga \
             SCoptions.amiga README.amiga README.win32 cord/README \
  	   README.rs6000 README.QUICK callprocs pc_excludes \
             barrett_diagram README.OS2 README.Mac MacProjects.sit.hqx \
--- 181,187 ----
      include/leak_detector.h $(CORD_SRCS)
  
  OTHER_FILES= Makefile PCR-Makefile OS2_MAKEFILE NT_MAKEFILE BCC_MAKEFILE \
!            README tests/test.c test_cpp.cc setjmp_t.c SMakefile.amiga \
             SCoptions.amiga README.amiga README.win32 cord/README \
  	   README.rs6000 README.QUICK callprocs pc_excludes \
             barrett_diagram README.OS2 README.Mac MacProjects.sit.hqx \
*************** CURSES= -lcurses -ltermlib
*** 206,212 ****
  # the SHELL environment variable.
  SHELL= /bin/sh
  
! SPECIALCFLAGS = 
  # Alternative flags to the C compiler for mach_dep.c.
  # Mach_dep.c often doesn't like optimization, and it's
  # not time-critical anyway.
--- 206,212 ----
  # the SHELL environment variable.
  SHELL= /bin/sh
  
! SPECIALCFLAGS = -I$(srcdir)/include
  # Alternative flags to the C compiler for mach_dep.c.
  # Mach_dep.c often doesn't like optimization, and it's
  # not time-critical anyway.
*************** $(OBJS) test.o dyn_load.o dyn_load_sunos
*** 224,230 ****
  # options such as -DSILENT affects the size of GC_arrays,
  # invalidating all .o files that rely on gc_priv.h
  
! mark.o typd_mlc.o finalize.o: $(srcdir)/gc_mark.h
  
  base_lib gc.a: $(OBJS) dyn_load.o $(UTILS)
  	echo > base_lib
--- 224,230 ----
  # options such as -DSILENT affects the size of GC_arrays,
  # invalidating all .o files that rely on gc_priv.h
  
! mark.o typd_mlc.o finalize.o: $(srcdir)/include/gc_mark.h
  
  base_lib gc.a: $(OBJS) dyn_load.o $(UTILS)
  	echo > base_lib
*************** clean: 
*** 366,376 ****
  	rm -f threadlibs$(EXE_SUFFIX) cord/cordtest$(EXE_SUFFIX)
  	-rm -f *~
  
! gctest$(EXE_SUFFIX): test.o gc.a if_mach$(EXE_SUFFIX) if_not_there$(EXE_SUFFIX)
  	rm -f gctest gctest$(EXE_SUFFIX)
! 	./if_mach SPARC DRSNX $(CC) $(CFLAGS) -o gctest  test.o gc.a -lucb
! 	./if_mach HP_PA "" $(CC) $(CFLAGS) -o gctest  test.o gc.a -ldld
! 	./if_not_there gctest$(EXE_SUFFIX) $(CC) $(CFLAGS) -o gctest$(EXE_SUFFIX) test.o gc.a
  	rm -f gctest
  
  # If an optimized setjmp_test generates a segmentation fault,
--- 366,376 ----
  	rm -f threadlibs$(EXE_SUFFIX) cord/cordtest$(EXE_SUFFIX)
  	-rm -f *~
  
! gctest$(EXE_SUFFIX): tests/test.o gc.a if_mach$(EXE_SUFFIX) if_not_there$(EXE_SUFFIX)
  	rm -f gctest gctest$(EXE_SUFFIX)
! 	./if_mach SPARC DRSNX $(CC) $(CFLAGS) -o gctest  tests/test.o gc.a -lucb
! 	./if_mach HP_PA "" $(CC) $(CFLAGS) -o gctest  tests/test.o gc.a -ldld
! 	./if_not_there gctest$(EXE_SUFFIX) $(CC) $(CFLAGS) -o gctest$(EXE_SUFFIX) tests/test.o gc.a
  	rm -f gctest
  
  # If an optimized setjmp_test generates a segmentation fault,
*************** gc.tar.Z: gc.tar
*** 407,414 ****
  gc.tar.gz: gc.tar
  	gzip gc.tar
  
! lint: $(CSRCS) test.c
! 	lint -DLINT $(CSRCS) test.c | egrep -v "possible pointer alignment problem|abort|exit|sbrk|mprotect|syscall"
  
  # BTL: added to test shared library version of collector.
  # Currently works only under SunOS5.  Requires GC_INIT call from statically
--- 407,414 ----
  gc.tar.gz: gc.tar
  	gzip gc.tar
  
! lint: $(CSRCS) tests/test.c
! 	lint -DLINT $(CSRCS) tests/test.c | egrep -v "possible pointer alignment problem|abort|exit|sbrk|mprotect|syscall"
  
  # BTL: added to test shared library version of collector.
  # Currently works only under SunOS5.  Requires GC_INIT call from statically
*************** ABSDIR = `pwd`
*** 417,424 ****
  gctest_dyn_link: test.o libgc.so
  	$(CC) -L$(ABSDIR) -R$(ABSDIR) -o gctest_dyn_link test.o -lgc -ldl -lthread
  
! test_dll.o: test.c libgc_globals.h
! 	$(CC) $(CFLAGS) -DGC_USE_DLL -c test.c -o test_dll.o
  
  test_dll: test_dll.o libgc_dll.a libgc.dll
  	$(CC) test_dll.o -L$(ABSDIR) -lgc_dll -o test_dll
--- 417,424 ----
  gctest_dyn_link: test.o libgc.so
  	$(CC) -L$(ABSDIR) -R$(ABSDIR) -o gctest_dyn_link test.o -lgc -ldl -lthread
  
! test_dll.o: tests/test.c libgc_globals.h
! 	$(CC) $(CFLAGS) -DGC_USE_DLL -c tests/test.c -o test_dll.o
  
  test_dll: test_dll.o libgc_dll.a libgc.dll
  	$(CC) test_dll.o -L$(ABSDIR) -lgc_dll -o test_dll
diff -Nrcpad gcc-3.4.3/boehm-gc/Makefile.in gcc-4.0.0/boehm-gc/Makefile.in
*** gcc-3.4.3/boehm-gc/Makefile.in	Fri Nov  5 04:14:05 2004
--- gcc-4.0.0/boehm-gc/Makefile.in	Thu Apr 21 07:04:10 2005
***************
*** 1,6 ****
! # Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
  
! # Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
  # This Makefile.in is free software; the Free Software Foundation
  # gives unlimited permission to copy and/or distribute it,
  # with or without modifications, as long as this notice is preserved.
--- 1,8 ----
! # Makefile.in generated by automake 1.9.3 from Makefile.am.
! # @configure_input@
  
! # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
! # 2003, 2004  Free Software Foundation, Inc.
  # This Makefile.in is free software; the Free Software Foundation
  # gives unlimited permission to copy and/or distribute it,
  # with or without modifications, as long as this notice is preserved.
***************
*** 10,122 ****
  # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  # PARTICULAR PURPOSE.
  
  
! SHELL = @SHELL@
  
  srcdir = @srcdir@
  top_srcdir = @top_srcdir@
  VPATH = @srcdir@
- prefix = @prefix@
- exec_prefix = @exec_prefix@
- 
- bindir = @bindir@
- sbindir = @sbindir@
- libexecdir = @libexecdir@
- datadir = @datadir@
- sysconfdir = @sysconfdir@
- sharedstatedir = @sharedstatedir@
- localstatedir = @localstatedir@
- libdir = @libdir@
- infodir = @infodir@
- mandir = @mandir@
- includedir = @includedir@
- oldincludedir = /usr/include
- 
- DESTDIR =
- 
  pkgdatadir = $(datadir)/@PACKAGE@
  pkglibdir = $(libdir)/@PACKAGE@
  pkgincludedir = $(includedir)/@PACKAGE@
- 
  top_builddir = .
! 
! ACLOCAL = @ACLOCAL@
! AUTOCONF = @AUTOCONF@
! AUTOMAKE = @AUTOMAKE@
! AUTOHEADER = @AUTOHEADER@
! 
  INSTALL = @INSTALL@
! INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
! INSTALL_DATA = @INSTALL_DATA@
! INSTALL_SCRIPT = @INSTALL_SCRIPT@
! transform = @program_transform_name@
! 
  NORMAL_INSTALL = :
  PRE_INSTALL = :
  POST_INSTALL = :
  NORMAL_UNINSTALL = :
  PRE_UNINSTALL = :
  POST_UNINSTALL = :
- build_alias = @build_alias@
  build_triplet = @build@
- host_alias = @host_alias@
  host_triplet = @host@
- target_alias = @target_alias@
  target_triplet = @target@
  AR = @AR@
  AS = @AS@
  CC = @CC@
  CFLAGS = @CFLAGS@
  CPP = @CPP@
  CXX = @CXX@
  CXXCPP = @CXXCPP@
  CXXFLAGS = @CXXFLAGS@
! CXXINCLUDES = @CXXINCLUDES@
! DLLTOOL = @DLLTOOL@
  EXEEXT = @EXEEXT@
  EXTRA_TEST_LIBS = @EXTRA_TEST_LIBS@
- GCJ = @GCJ@
- GCJFLAGS = @GCJFLAGS@
  GC_CFLAGS = @GC_CFLAGS@
! INCLUDES = @INCLUDES@
  LIBTOOL = @LIBTOOL@
  LN_S = @LN_S@
  MAINT = @MAINT@
  MAKEINFO = @MAKEINFO@
  MY_CFLAGS = @MY_CFLAGS@
- OBJDUMP = @OBJDUMP@
  OBJEXT = @OBJEXT@
  PACKAGE = @PACKAGE@
  RANLIB = @RANLIB@
  STRIP = @STRIP@
  THREADLIBS = @THREADLIBS@
  VERSION = @VERSION@
  addincludes = @addincludes@
  addlibs = @addlibs@
  addobjs = @addobjs@
  addtests = @addtests@
! gc_basedir = @gc_basedir@
  mkinstalldirs = @mkinstalldirs@
  target_all = @target_all@
  toolexecdir = @toolexecdir@
  toolexeclibdir = @toolexeclibdir@
! 
! AUTOMAKE_OPTIONS = cygnus
! 
  SUBDIRS = include
- 
- # Multilib support variables.
- MULTISRCTOP = 
- MULTIBUILDTOP = 
- MULTIDIRS = 
- MULTISUBDIR = 
- MULTIDO = true
- MULTICLEAN = true
- 
  noinst_LTLIBRARIES = libgcjgc.la libgcjgc_convenience.la
- @POWERPC_DARWIN_TRUE@asm_libgc_sources = @POWERPC_DARWIN_TRUE@powerpc_darwin_mach_dep.s
  @POWERPC_DARWIN_FALSE@asm_libgc_sources = 
! 
  GC_SOURCES = allchblk.c alloc.c blacklst.c checksums.c dbg_mlc.c \
  dyn_load.c finalize.c gc_dlopen.c gcj_mlc.c headers.c aix_irix_threads.c \
  malloc.c mallocx.c mark.c mark_rts.c misc.c new_hblk.c \
--- 12,259 ----
  # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  # PARTICULAR PURPOSE.
  
+ @SET_MAKE@
  
! SOURCES = $(libgcjgc_la_SOURCES) $(libgcjgc_convenience_la_SOURCES) $(gctest_SOURCES)
  
  srcdir = @srcdir@
  top_srcdir = @top_srcdir@
  VPATH = @srcdir@
  pkgdatadir = $(datadir)/@PACKAGE@
  pkglibdir = $(libdir)/@PACKAGE@
  pkgincludedir = $(includedir)/@PACKAGE@
  top_builddir = .
! am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
  INSTALL = @INSTALL@
! install_sh_DATA = $(install_sh) -c -m 644
! install_sh_PROGRAM = $(install_sh) -c
! install_sh_SCRIPT = $(install_sh) -c
! INSTALL_HEADER = $(INSTALL_DATA)
! transform = $(program_transform_name)
  NORMAL_INSTALL = :
  PRE_INSTALL = :
  POST_INSTALL = :
  NORMAL_UNINSTALL = :
  PRE_UNINSTALL = :
  POST_UNINSTALL = :
  build_triplet = @build@
  host_triplet = @host@
  target_triplet = @target@
+ check_PROGRAMS = gctest$(EXEEXT)
+ DIST_COMMON = $(srcdir)/../config.guess $(srcdir)/../config.sub \
+ 	ChangeLog $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+ 	$(top_srcdir)/configure $(am__configure_deps) \
+ 	$(srcdir)/../mkinstalldirs $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../ltmain.sh $(srcdir)/../config.guess \
+ 	$(srcdir)/../config.sub
+ subdir = .
+ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
+ 	$(top_srcdir)/../config/no-executables.m4 \
+ 	$(top_srcdir)/../libtool.m4 $(top_srcdir)/configure.ac
+ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ 	$(ACLOCAL_M4)
+ am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+  configure.lineno configure.status.lineno
+ CONFIG_HEADER = $(top_builddir)/include/gc_config.h \
+ 	$(top_builddir)/include/gc_ext_config.h
+ CONFIG_CLEAN_FILES =
+ LTLIBRARIES = $(noinst_LTLIBRARIES)
+ am__DEPENDENCIES_1 =
+ @POWERPC_DARWIN_TRUE@am__objects_1 = powerpc_darwin_mach_dep.lo
+ am__objects_2 = allchblk.lo alloc.lo blacklst.lo checksums.lo \
+ 	dbg_mlc.lo dyn_load.lo finalize.lo gc_dlopen.lo gcj_mlc.lo \
+ 	headers.lo aix_irix_threads.lo malloc.lo mallocx.lo mark.lo \
+ 	mark_rts.lo misc.lo new_hblk.lo obj_map.lo os_dep.lo \
+ 	pcr_interface.lo ptr_chck.lo real_malloc.lo reclaim.lo \
+ 	solaris_pthreads.lo solaris_threads.lo specific.lo stubborn.lo \
+ 	typd_mlc.lo backgraph.lo win32_threads.lo pthread_support.lo \
+ 	pthread_stop_world.lo darwin_stop_world.lo $(am__objects_1)
+ am_libgcjgc_la_OBJECTS = $(am__objects_2)
+ libgcjgc_la_OBJECTS = $(am_libgcjgc_la_OBJECTS)
+ am_libgcjgc_convenience_la_OBJECTS = $(am__objects_2)
+ libgcjgc_convenience_la_OBJECTS =  \
+ 	$(am_libgcjgc_convenience_la_OBJECTS)
+ am__dirstamp = $(am__leading_dot)dirstamp
+ am_gctest_OBJECTS = tests/test.$(OBJEXT)
+ gctest_OBJECTS = $(am_gctest_OBJECTS)
+ gctest_DEPENDENCIES = ./libgcjgc.la $(am__DEPENDENCIES_1) \
+ 	$(am__DEPENDENCIES_1)
+ DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/include -I$(top_builddir)/include
+ depcomp =
+ am__depfiles_maybe =
+ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+ CCLD = $(CC)
+ CCASCOMPILE = $(CCAS) $(AM_CCASFLAGS) $(CCASFLAGS)
+ LTCCASCOMPILE = $(LIBTOOL) --mode=compile $(CCAS) $(AM_CCASFLAGS) \
+ 	$(CCASFLAGS)
+ SOURCES = $(libgcjgc_la_SOURCES) $(libgcjgc_convenience_la_SOURCES) \
+ 	$(gctest_SOURCES)
+ MULTISRCTOP = 
+ MULTIBUILDTOP = 
+ MULTIDIRS = 
+ MULTISUBDIR = 
+ MULTIDO = true
+ MULTICLEAN = true
+ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ 	html-recursive info-recursive install-data-recursive \
+ 	install-exec-recursive install-info-recursive \
+ 	install-recursive installcheck-recursive installdirs-recursive \
+ 	pdf-recursive ps-recursive uninstall-info-recursive \
+ 	uninstall-recursive
+ ETAGS = etags
+ CTAGS = ctags
+ DIST_SUBDIRS = $(SUBDIRS)
+ ACLOCAL = @ACLOCAL@
+ AMDEP_FALSE = @AMDEP_FALSE@
+ AMDEP_TRUE = @AMDEP_TRUE@
+ AMTAR = @AMTAR@
+ AM_CPPFLAGS = @AM_CPPFLAGS@
  AR = @AR@
  AS = @AS@
+ AUTOCONF = @AUTOCONF@
+ AUTOHEADER = @AUTOHEADER@
+ AUTOMAKE = @AUTOMAKE@
+ AWK = @AWK@
  CC = @CC@
+ CCAS = @CCAS@
+ CCASFLAGS = @CCASFLAGS@
+ CCDEPMODE = @CCDEPMODE@
  CFLAGS = @CFLAGS@
+ CPLUSPLUS_FALSE = @CPLUSPLUS_FALSE@
+ CPLUSPLUS_TRUE = @CPLUSPLUS_TRUE@
  CPP = @CPP@
+ CPPFLAGS = @CPPFLAGS@
  CXX = @CXX@
  CXXCPP = @CXXCPP@
+ CXXDEPMODE = @CXXDEPMODE@
  CXXFLAGS = @CXXFLAGS@
! CYGPATH_W = @CYGPATH_W@
! DEFS = @DEFS@
! DEPDIR = @DEPDIR@
! ECHO_C = @ECHO_C@
! ECHO_N = @ECHO_N@
! ECHO_T = @ECHO_T@
! EGREP = @EGREP@
  EXEEXT = @EXEEXT@
  EXTRA_TEST_LIBS = @EXTRA_TEST_LIBS@
  GC_CFLAGS = @GC_CFLAGS@
! INSTALL_DATA = @INSTALL_DATA@
! INSTALL_PROGRAM = @INSTALL_PROGRAM@
! INSTALL_SCRIPT = @INSTALL_SCRIPT@
! INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
! LIBOBJS = @LIBOBJS@
! LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
  MAINT = @MAINT@
+ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
  MAKEINFO = @MAKEINFO@
  MY_CFLAGS = @MY_CFLAGS@
  OBJEXT = @OBJEXT@
  PACKAGE = @PACKAGE@
+ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+ PACKAGE_NAME = @PACKAGE_NAME@
+ PACKAGE_STRING = @PACKAGE_STRING@
+ PACKAGE_TARNAME = @PACKAGE_TARNAME@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+ POWERPC_DARWIN_FALSE = @POWERPC_DARWIN_FALSE@
+ POWERPC_DARWIN_TRUE = @POWERPC_DARWIN_TRUE@
  RANLIB = @RANLIB@
+ SET_MAKE = @SET_MAKE@
+ SHELL = @SHELL@
  STRIP = @STRIP@
  THREADLIBS = @THREADLIBS@
  VERSION = @VERSION@
+ ac_ct_AR = @ac_ct_AR@
+ ac_ct_AS = @ac_ct_AS@
+ ac_ct_CC = @ac_ct_CC@
+ ac_ct_CXX = @ac_ct_CXX@
+ ac_ct_RANLIB = @ac_ct_RANLIB@
+ ac_ct_STRIP = @ac_ct_STRIP@
  addincludes = @addincludes@
  addlibs = @addlibs@
  addobjs = @addobjs@
  addtests = @addtests@
! am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
! am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
! am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
! am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
! am__include = @am__include@
! am__leading_dot = @am__leading_dot@
! am__quote = @am__quote@
! am__tar = @am__tar@
! am__untar = @am__untar@
! bindir = @bindir@
! build = @build@
! build_alias = @build_alias@
! build_cpu = @build_cpu@
! build_os = @build_os@
! build_vendor = @build_vendor@
! datadir = @datadir@
! exec_prefix = @exec_prefix@
! host = @host@
! host_alias = @host_alias@
! host_cpu = @host_cpu@
! host_os = @host_os@
! host_vendor = @host_vendor@
! includedir = @includedir@
! infodir = @infodir@
! install_sh = @install_sh@
! libdir = @libdir@
! libexecdir = @libexecdir@
! localstatedir = @localstatedir@
! mandir = @mandir@
! mkdir_p = @mkdir_p@
  mkinstalldirs = @mkinstalldirs@
+ multi_basedir = @multi_basedir@
+ oldincludedir = @oldincludedir@
+ prefix = @prefix@
+ program_transform_name = @program_transform_name@
+ sbindir = @sbindir@
+ sharedstatedir = @sharedstatedir@
+ sysconfdir = @sysconfdir@
+ target = @target@
+ target_alias = @target_alias@
  target_all = @target_all@
+ target_cpu = @target_cpu@
+ target_noncanonical = @target_noncanonical@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
  toolexecdir = @toolexecdir@
  toolexeclibdir = @toolexeclibdir@
! AUTOMAKE_OPTIONS = cygnus subdir-objects
! ACLOCAL_AMFLAGS = -I .. -I ../config
  SUBDIRS = include
  noinst_LTLIBRARIES = libgcjgc.la libgcjgc_convenience.la
  @POWERPC_DARWIN_FALSE@asm_libgc_sources = 
! @POWERPC_DARWIN_TRUE@asm_libgc_sources = powerpc_darwin_mach_dep.s
  GC_SOURCES = allchblk.c alloc.c blacklst.c checksums.c dbg_mlc.c \
  dyn_load.c finalize.c gc_dlopen.c gcj_mlc.c headers.c aix_irix_threads.c \
  malloc.c mallocx.c mark.c mark_rts.c misc.c new_hblk.c \
*************** backgraph.c win32_threads.c \
*** 126,169 ****
  pthread_support.c pthread_stop_world.c darwin_stop_world.c \
  $(asm_libgc_sources)
  
! 
! EXTRA_GC_SOURCES = alpha_mach_dep.S \
  mips_sgi_mach_dep.s mips_ultrix_mach_dep.s powerpc_darwin_mach_dep.s \
  rs6000_mach_dep.s sparc_mach_dep.S sparc_netbsd_mach_dep.s \
  sparc_sunos4_mach_dep.s ia64_save_regs_in_stack.s
  
- 
  libgcjgc_la_SOURCES = $(GC_SOURCES)
  libgcjgc_convenience_la_SOURCES = $(GC_SOURCES)
- EXTRA_libgcjgc_la_SOURCES = $(EXTRA_GC_SOURCES)
- EXTRA_libgcjgc_convenience_la_SOURCES = $(EXTRA_GC_SOURCES)
  
  # Include THREADLIBS here to ensure that the correct versions of
  # linuxthread semaphore functions get linked:
  libgcjgc_la_LIBADD = @addobjs@ $(THREADLIBS)
  libgcjgc_la_DEPENDENCIES = @addobjs@
  libgcjgc_la_LDFLAGS = -version-info 1:1:0 -rpath $(toolexeclibdir)
- 
  libgcjgc_convenience_la_LIBADD = @addobjs@
  libgcjgc_convenience_la_DEPENDENCIES = @addobjs@
- 
  AM_CXXFLAGS = @GC_CFLAGS@
- 
  AM_CFLAGS = @GC_CFLAGS@
! 
! check_PROGRAMS = gctest
! # 	Using $< in the above seems to fail with the HP/UX on Itanium make.
! 
! gctest_OBJECTS = test.o
  gctest_LDADD = ./libgcjgc.la $(THREADLIBS) $(EXTRA_TEST_LIBS)
  gctest_LDFLAGS = -shared-libgcc
  TESTS_ENVIRONMENT = LD_LIBRARY_PATH=../../$(MULTIBUILDTOP)gcc
  TESTS = gctest
! 
! all_objs = @addobjs@ $(libgcjgc_la_OBJECTS)
! 
! LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) \
! 	$(AM_CPPFLAGS) $(CPPFLAGS) \
  	$(AM_CFLAGS) $(MY_CFLAGS) $(GC_CFLAGS) 
  
  LINK = $(LIBTOOL) --mode=link $(CC) $(AM_CFLAGS) $(MY_CFLAGS) $(LDFLAGS) -o $@
--- 263,291 ----
  pthread_support.c pthread_stop_world.c darwin_stop_world.c \
  $(asm_libgc_sources)
  
! EXTRA_DIST = alpha_mach_dep.S \
  mips_sgi_mach_dep.s mips_ultrix_mach_dep.s powerpc_darwin_mach_dep.s \
  rs6000_mach_dep.s sparc_mach_dep.S sparc_netbsd_mach_dep.s \
  sparc_sunos4_mach_dep.s ia64_save_regs_in_stack.s
  
  libgcjgc_la_SOURCES = $(GC_SOURCES)
  libgcjgc_convenience_la_SOURCES = $(GC_SOURCES)
  
  # Include THREADLIBS here to ensure that the correct versions of
  # linuxthread semaphore functions get linked:
  libgcjgc_la_LIBADD = @addobjs@ $(THREADLIBS)
  libgcjgc_la_DEPENDENCIES = @addobjs@
  libgcjgc_la_LDFLAGS = -version-info 1:1:0 -rpath $(toolexeclibdir)
  libgcjgc_convenience_la_LIBADD = @addobjs@
  libgcjgc_convenience_la_DEPENDENCIES = @addobjs@
  AM_CXXFLAGS = @GC_CFLAGS@
  AM_CFLAGS = @GC_CFLAGS@
! gctest_SOURCES = tests/test.c
  gctest_LDADD = ./libgcjgc.la $(THREADLIBS) $(EXTRA_TEST_LIBS)
  gctest_LDFLAGS = -shared-libgcc
  TESTS_ENVIRONMENT = LD_LIBRARY_PATH=../../$(MULTIBUILDTOP)gcc
  TESTS = gctest
! LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(AM_CPPFLAGS) $(CPPFLAGS) \
  	$(AM_CFLAGS) $(MY_CFLAGS) $(GC_CFLAGS) 
  
  LINK = $(LIBTOOL) --mode=link $(CC) $(AM_CFLAGS) $(MY_CFLAGS) $(LDFLAGS) -o $@
*************** AM_MAKEFLAGS = \
*** 209,345 ****
  	"RANLIB=$(RANLIB)" \
  	"DESTDIR=$(DESTDIR)"
  
- 
  CONFIG_STATUS_DEPENDENCIES = $(srcdir)/configure.host
- 
  MAKEOVERRIDES = 
! ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
! CONFIG_CLEAN_FILES = 
! LTLIBRARIES =  $(noinst_LTLIBRARIES)
! 
! 
! DEFS = @DEFS@ -I. -I$(srcdir) 
! CPPFLAGS = @CPPFLAGS@
! LDFLAGS = @LDFLAGS@
! LIBS = @LIBS@
! @POWERPC_DARWIN_FALSE@libgcjgc_la_OBJECTS =  allchblk.lo alloc.lo \
! @POWERPC_DARWIN_FALSE@blacklst.lo checksums.lo dbg_mlc.lo dyn_load.lo \
! @POWERPC_DARWIN_FALSE@finalize.lo gc_dlopen.lo gcj_mlc.lo headers.lo \
! @POWERPC_DARWIN_FALSE@aix_irix_threads.lo malloc.lo mallocx.lo mark.lo \
! @POWERPC_DARWIN_FALSE@mark_rts.lo misc.lo new_hblk.lo obj_map.lo \
! @POWERPC_DARWIN_FALSE@os_dep.lo pcr_interface.lo ptr_chck.lo \
! @POWERPC_DARWIN_FALSE@real_malloc.lo reclaim.lo solaris_pthreads.lo \
! @POWERPC_DARWIN_FALSE@solaris_threads.lo specific.lo stubborn.lo \
! @POWERPC_DARWIN_FALSE@typd_mlc.lo backgraph.lo win32_threads.lo \
! @POWERPC_DARWIN_FALSE@pthread_support.lo pthread_stop_world.lo \
! @POWERPC_DARWIN_FALSE@darwin_stop_world.lo
! @POWERPC_DARWIN_TRUE@libgcjgc_la_OBJECTS =  allchblk.lo alloc.lo \
! @POWERPC_DARWIN_TRUE@blacklst.lo checksums.lo dbg_mlc.lo dyn_load.lo \
! @POWERPC_DARWIN_TRUE@finalize.lo gc_dlopen.lo gcj_mlc.lo headers.lo \
! @POWERPC_DARWIN_TRUE@aix_irix_threads.lo malloc.lo mallocx.lo mark.lo \
! @POWERPC_DARWIN_TRUE@mark_rts.lo misc.lo new_hblk.lo obj_map.lo \
! @POWERPC_DARWIN_TRUE@os_dep.lo pcr_interface.lo ptr_chck.lo \
! @POWERPC_DARWIN_TRUE@real_malloc.lo reclaim.lo solaris_pthreads.lo \
! @POWERPC_DARWIN_TRUE@solaris_threads.lo specific.lo stubborn.lo \
! @POWERPC_DARWIN_TRUE@typd_mlc.lo backgraph.lo win32_threads.lo \
! @POWERPC_DARWIN_TRUE@pthread_support.lo pthread_stop_world.lo \
! @POWERPC_DARWIN_TRUE@darwin_stop_world.lo powerpc_darwin_mach_dep.lo
! libgcjgc_convenience_la_LDFLAGS = 
! @POWERPC_DARWIN_FALSE@libgcjgc_convenience_la_OBJECTS =  allchblk.lo \
! @POWERPC_DARWIN_FALSE@alloc.lo blacklst.lo checksums.lo dbg_mlc.lo \
! @POWERPC_DARWIN_FALSE@dyn_load.lo finalize.lo gc_dlopen.lo gcj_mlc.lo \
! @POWERPC_DARWIN_FALSE@headers.lo aix_irix_threads.lo malloc.lo \
! @POWERPC_DARWIN_FALSE@mallocx.lo mark.lo mark_rts.lo misc.lo \
! @POWERPC_DARWIN_FALSE@new_hblk.lo obj_map.lo os_dep.lo pcr_interface.lo \
! @POWERPC_DARWIN_FALSE@ptr_chck.lo real_malloc.lo reclaim.lo \
! @POWERPC_DARWIN_FALSE@solaris_pthreads.lo solaris_threads.lo \
! @POWERPC_DARWIN_FALSE@specific.lo stubborn.lo typd_mlc.lo backgraph.lo \
! @POWERPC_DARWIN_FALSE@win32_threads.lo pthread_support.lo \
! @POWERPC_DARWIN_FALSE@pthread_stop_world.lo darwin_stop_world.lo
! @POWERPC_DARWIN_TRUE@libgcjgc_convenience_la_OBJECTS =  allchblk.lo \
! @POWERPC_DARWIN_TRUE@alloc.lo blacklst.lo checksums.lo dbg_mlc.lo \
! @POWERPC_DARWIN_TRUE@dyn_load.lo finalize.lo gc_dlopen.lo gcj_mlc.lo \
! @POWERPC_DARWIN_TRUE@headers.lo aix_irix_threads.lo malloc.lo \
! @POWERPC_DARWIN_TRUE@mallocx.lo mark.lo mark_rts.lo misc.lo new_hblk.lo \
! @POWERPC_DARWIN_TRUE@obj_map.lo os_dep.lo pcr_interface.lo ptr_chck.lo \
! @POWERPC_DARWIN_TRUE@real_malloc.lo reclaim.lo solaris_pthreads.lo \
! @POWERPC_DARWIN_TRUE@solaris_threads.lo specific.lo stubborn.lo \
! @POWERPC_DARWIN_TRUE@typd_mlc.lo backgraph.lo win32_threads.lo \
! @POWERPC_DARWIN_TRUE@pthread_support.lo pthread_stop_world.lo \
! @POWERPC_DARWIN_TRUE@darwin_stop_world.lo powerpc_darwin_mach_dep.lo
! check_PROGRAMS =  gctest$(EXEEXT)
! gctest_DEPENDENCIES =  ./libgcjgc.la
! COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
! CCLD = $(CC)
! DIST_COMMON =  ChangeLog Makefile.am Makefile.in acinclude.m4 aclocal.m4 \
! config.guess config.sub configure configure.in install-sh ltconfig \
! ltmain.sh mkinstalldirs
! 
! 
! DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
! 
! TAR = gtar
! GZIP_ENV = --best
! SOURCES = $(libgcjgc_la_SOURCES) $(EXTRA_libgcjgc_la_SOURCES) $(libgcjgc_convenience_la_SOURCES) $(EXTRA_libgcjgc_convenience_la_SOURCES)
! OBJECTS = $(libgcjgc_la_OBJECTS) $(libgcjgc_convenience_la_OBJECTS)
  
- all: all-redirect
  .SUFFIXES:
  .SUFFIXES: .S .c .lo .o .obj .s
! $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) 
! 	cd $(top_srcdir) && $(AUTOMAKE) --cygnus Makefile
! 
! Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status
! 	cd $(top_builddir) \
! 	  && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
! 
! $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.in  acinclude.m4
! 	cd $(srcdir) && $(ACLOCAL)
  
! config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
  	$(SHELL) ./config.status --recheck
- $(srcdir)/configure: @MAINTAINER_MODE_TRUE@$(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
- 	cd $(srcdir) && $(AUTOCONF)
  
! mostlyclean-noinstLTLIBRARIES:
  
  clean-noinstLTLIBRARIES:
  	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
  
! distclean-noinstLTLIBRARIES:
! 
! maintainer-clean-noinstLTLIBRARIES:
! 
! .c.o:
! 	$(COMPILE) -c $<
! 
! # FIXME: We should only use cygpath when building on Windows,
! # and only if it is available.
! .c.obj:
! 	$(COMPILE) -c `cygpath -w $<`
! 
! .s.o:
! 	$(COMPILE) -c $<
! 
! .S.o:
! 	$(COMPILE) -c $<
  
  mostlyclean-compile:
- 	-rm -f *.o core *.core
  	-rm -f *.$(OBJEXT)
! 
! clean-compile:
  
  distclean-compile:
  	-rm -f *.tab.c
  
! maintainer-clean-compile:
  
  .c.lo:
! 	$(LIBTOOL) --mode=compile $(COMPILE) -c $<
  
! .S.lo:
! 	$(LIBTOOL) --mode=compile $(COMPILE) -c $<
  
  mostlyclean-libtool:
  	-rm -f *.lo
--- 331,424 ----
  	"RANLIB=$(RANLIB)" \
  	"DESTDIR=$(DESTDIR)"
  
  CONFIG_STATUS_DEPENDENCIES = $(srcdir)/configure.host
  MAKEOVERRIDES = 
! all: all-recursive
  
  .SUFFIXES:
  .SUFFIXES: .S .c .lo .o .obj .s
! am--refresh:
! 	@:
! $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
! 	@for dep in $?; do \
! 	  case '$(am__configure_deps)' in \
! 	    *$$dep*) \
! 	      echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \
! 	      cd $(srcdir) && $(AUTOMAKE) --foreign  \
! 		&& exit 0; \
! 	      exit 1;; \
! 	  esac; \
! 	done; \
! 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  Makefile'; \
! 	cd $(top_srcdir) && \
! 	  $(AUTOMAKE) --foreign  Makefile
! .PRECIOUS: Makefile
! Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
! 	@case '$?' in \
! 	  *config.status*) \
! 	    echo ' $(SHELL) ./config.status'; \
! 	    $(SHELL) ./config.status;; \
! 	  *) \
! 	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
! 	    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
! 	esac;
  
! $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
  	$(SHELL) ./config.status --recheck
  
! $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
! 	cd $(srcdir) && $(AUTOCONF)
! $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
! 	cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
  
  clean-noinstLTLIBRARIES:
  	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ 	@list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+ 	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ 	  test "$$dir" != "$$p" || dir=.; \
+ 	  echo "rm -f \"$${dir}/so_locations\""; \
+ 	  rm -f "$${dir}/so_locations"; \
+ 	done
+ libgcjgc.la: $(libgcjgc_la_OBJECTS) $(libgcjgc_la_DEPENDENCIES) 
+ 	$(LINK)  $(libgcjgc_la_LDFLAGS) $(libgcjgc_la_OBJECTS) $(libgcjgc_la_LIBADD) $(LIBS)
+ libgcjgc_convenience.la: $(libgcjgc_convenience_la_OBJECTS) $(libgcjgc_convenience_la_DEPENDENCIES) 
+ 	$(LINK)  $(libgcjgc_convenience_la_LDFLAGS) $(libgcjgc_convenience_la_OBJECTS) $(libgcjgc_convenience_la_LIBADD) $(LIBS)
  
! clean-checkPROGRAMS:
! 	@list='$(check_PROGRAMS)'; for p in $$list; do \
! 	  f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
! 	  echo " rm -f $$p $$f"; \
! 	  rm -f $$p $$f ; \
! 	done
! tests/$(am__dirstamp):
! 	@$(mkdir_p) tests
! 	@: > tests/$(am__dirstamp)
! tests/test.$(OBJEXT): tests/$(am__dirstamp)
! gctest$(EXEEXT): $(gctest_OBJECTS) $(gctest_DEPENDENCIES) 
! 	@rm -f gctest$(EXEEXT)
! 	$(LINK) $(gctest_LDFLAGS) $(gctest_OBJECTS) $(gctest_LDADD) $(LIBS)
  
  mostlyclean-compile:
  	-rm -f *.$(OBJEXT)
! 	-rm -f tests/test.$(OBJEXT)
  
  distclean-compile:
  	-rm -f *.tab.c
  
! .c.o:
! 	$(COMPILE) -c -o $@ $<
! 
! .c.obj:
! 	$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
  
  .c.lo:
! 	$(LTCOMPILE) -c -o $@ $<
  
! .s.o:
! 	$(CCASCOMPILE) -c $<
! 
! .s.obj:
! 	$(CCASCOMPILE) -c `$(CYGPATH_W) '$<'`
  
  mostlyclean-libtool:
  	-rm -f *.lo
*************** clean-libtool:
*** 348,374 ****
  	-rm -rf .libs _libs
  
  distclean-libtool:
  
! maintainer-clean-libtool:
! 
! libgcjgc.la: $(libgcjgc_la_OBJECTS) $(libgcjgc_la_DEPENDENCIES)
! 	$(LINK)  $(libgcjgc_la_LDFLAGS) $(libgcjgc_la_OBJECTS) $(libgcjgc_la_LIBADD) $(LIBS)
! 
! libgcjgc_convenience.la: $(libgcjgc_convenience_la_OBJECTS) $(libgcjgc_convenience_la_DEPENDENCIES)
! 	$(LINK)  $(libgcjgc_convenience_la_LDFLAGS) $(libgcjgc_convenience_la_OBJECTS) $(libgcjgc_convenience_la_LIBADD) $(LIBS)
! 
! mostlyclean-checkPROGRAMS:
! 
! clean-checkPROGRAMS:
! 	-test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS)
! 
! distclean-checkPROGRAMS:
! 
! maintainer-clean-checkPROGRAMS:
  
! gctest$(EXEEXT): $(gctest_OBJECTS) $(gctest_DEPENDENCIES)
! 	@rm -f gctest$(EXEEXT)
! 	$(LINK) $(gctest_LDFLAGS) $(gctest_OBJECTS) $(gctest_LDADD) $(LIBS)
  
  # This directory's subdirectories are mostly independent; you can cd
  # into them and run `make' without going through this Makefile.
--- 427,451 ----
  	-rm -rf .libs _libs
  
  distclean-libtool:
+ 	-rm -f libtool
  
! # GNU Make needs to see an explicit $(MAKE) variable in the command it
! # runs to enable its job server during parallel builds.  Hence the
! # comments below.
! all-multi:
! 	$(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do # $(MAKE)
! install-multi:
! 	$(MULTIDO) $(AM_MAKEFLAGS) DO=install multi-do # $(MAKE)
  
! mostlyclean-multi:
! 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=mostlyclean multi-clean # $(MAKE)
! clean-multi:
! 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=clean multi-clean # $(MAKE)
! distclean-multi:
! 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=distclean multi-clean # $(MAKE)
! maintainer-clean-multi:
! 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=maintainer-clean multi-clean # $(MAKE)
! uninstall-info-am:
  
  # This directory's subdirectories are mostly independent; you can cd
  # into them and run `make' without going through this Makefile.
*************** gctest$(EXEEXT): $(gctest_OBJECTS) $(gct
*** 376,388 ****
  # (1) if the variable is set in `config.status', edit `config.status'
  #     (which will cause the Makefiles to be regenerated when you run `make');
  # (2) otherwise, pass the desired values on the `make' command line.
! 
! @SET_MAKE@
! 
! all-recursive install-data-recursive install-exec-recursive \
! installdirs-recursive install-recursive uninstall-recursive install-info-recursive \
! check-recursive installcheck-recursive info-recursive dvi-recursive:
! 	@set fnord $(MAKEFLAGS); amf=$$2; \
  	dot_seen=no; \
  	target=`echo $@ | sed s/-recursive//`; \
  	list='$(SUBDIRS)'; for subdir in $$list; do \
--- 453,460 ----
  # (1) if the variable is set in `config.status', edit `config.status'
  #     (which will cause the Makefiles to be regenerated when you run `make');
  # (2) otherwise, pass the desired values on the `make' command line.
! $(RECURSIVE_TARGETS):
! 	@set fnord $$MAKEFLAGS; amf=$$2; \
  	dot_seen=no; \
  	target=`echo $@ | sed s/-recursive//`; \
  	list='$(SUBDIRS)'; for subdir in $$list; do \
*************** check-recursive installcheck-recursive i
*** 402,414 ****
  
  mostlyclean-recursive clean-recursive distclean-recursive \
  maintainer-clean-recursive:
! 	@set fnord $(MAKEFLAGS); amf=$$2; \
  	dot_seen=no; \
! 	rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \
! 	  rev="$$subdir $$rev"; \
! 	  test "$$subdir" != "." || dot_seen=yes; \
  	done; \
! 	test "$$dot_seen" = "no" && rev=". $$rev"; \
  	target=`echo $@ | sed s/-recursive//`; \
  	for subdir in $$rev; do \
  	  echo "Making $$target in $$subdir"; \
--- 474,491 ----
  
  mostlyclean-recursive clean-recursive distclean-recursive \
  maintainer-clean-recursive:
! 	@set fnord $$MAKEFLAGS; amf=$$2; \
  	dot_seen=no; \
! 	case "$@" in \
! 	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
! 	  *) list='$(SUBDIRS)' ;; \
! 	esac; \
! 	rev=''; for subdir in $$list; do \
! 	  if test "$$subdir" = "."; then :; else \
! 	    rev="$$subdir $$rev"; \
! 	  fi; \
  	done; \
! 	rev="$$rev ."; \
  	target=`echo $@ | sed s/-recursive//`; \
  	for subdir in $$rev; do \
  	  echo "Making $$target in $$subdir"; \
*************** tags-recursive:
*** 424,672 ****
  	list='$(SUBDIRS)'; for subdir in $$list; do \
  	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
  	done
  
! tags: TAGS
! 
! ID: $(HEADERS) $(SOURCES) $(LISP)
! 	list='$(SOURCES) $(HEADERS)'; \
! 	unique=`for i in $$list; do echo $$i; done | \
! 	  awk '    { files[$$0] = 1; } \
  	       END { for (i in files) print i; }'`; \
! 	here=`pwd` && cd $(srcdir) \
! 	  && mkid -f$$here/ID $$unique $(LISP)
  
! TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) $(LISP)
  	tags=; \
  	here=`pwd`; \
  	list='$(SUBDIRS)'; for subdir in $$list; do \
!    if test "$$subdir" = .; then :; else \
! 	    test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
!    fi; \
  	done; \
! 	list='$(SOURCES) $(HEADERS)'; \
! 	unique=`for i in $$list; do echo $$i; done | \
! 	  awk '    { files[$$0] = 1; } \
  	       END { for (i in files) print i; }'`; \
! 	test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
! 	  || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags  $$unique $(LISP) -o $$here/TAGS)
! 
! mostlyclean-tags:
  
! clean-tags:
  
  distclean-tags:
! 	-rm -f TAGS ID
! 
! maintainer-clean-tags:
! 
! distdir = $(PACKAGE)-$(VERSION)
! top_distdir = $(distdir)
  
! # This target untars the dist file and tries a VPATH configuration.  Then
! # it guarantees that the distribution is self-contained by making another
! # tarfile.
! distcheck: dist
! 	-rm -rf $(distdir)
! 	GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz
! 	mkdir $(distdir)/=build
! 	mkdir $(distdir)/=inst
! 	dc_install_base=`cd $(distdir)/=inst && pwd`; \
! 	cd $(distdir)/=build \
! 	  && ../configure --srcdir=.. --prefix=$$dc_install_base \
! 	  && $(MAKE) $(AM_MAKEFLAGS) \
! 	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
! 	  && $(MAKE) $(AM_MAKEFLAGS) check \
! 	  && $(MAKE) $(AM_MAKEFLAGS) install \
! 	  && $(MAKE) $(AM_MAKEFLAGS) installcheck \
! 	  && $(MAKE) $(AM_MAKEFLAGS) dist
! 	-rm -rf $(distdir)
! 	@banner="$(distdir).tar.gz is ready for distribution"; \
! 	dashes=`echo "$$banner" | sed s/./=/g`; \
! 	echo "$$dashes"; \
! 	echo "$$banner"; \
! 	echo "$$dashes"
! dist: distdir
! 	-chmod -R a+r $(distdir)
! 	GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
! 	-rm -rf $(distdir)
! dist-all: distdir
! 	-chmod -R a+r $(distdir)
! 	GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
! 	-rm -rf $(distdir)
! distdir: $(DISTFILES)
! 	-rm -rf $(distdir)
! 	mkdir $(distdir)
! 	-chmod 777 $(distdir)
! 	@for file in $(DISTFILES); do \
! 	  if test -f $$file; then d=.; else d=$(srcdir); fi; \
! 	  if test -d $$d/$$file; then \
! 	    cp -pr $$d/$$file $(distdir)/$$file; \
  	  else \
! 	    test -f $(distdir)/$$file \
! 	    || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
! 	    || cp -p $$d/$$file $(distdir)/$$file || :; \
  	  fi; \
! 	done
! 	for subdir in $(SUBDIRS); do \
! 	  if test "$$subdir" = .; then :; else \
! 	    test -d $(distdir)/$$subdir \
! 	    || mkdir $(distdir)/$$subdir \
! 	    || exit 1; \
! 	    chmod 777 $(distdir)/$$subdir; \
! 	    (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \
! 	      || exit 1; \
  	  fi; \
! 	done
! check-TESTS: $(TESTS)
! 	@failed=0; all=0; \
! 	srcdir=$(srcdir); export srcdir; \
! 	for tst in $(TESTS); do \
! 	  if test -f $$tst; then dir=.; \
! 	  else dir="$(srcdir)"; fi; \
! 	  if $(TESTS_ENVIRONMENT) $$dir/$$tst; then \
! 	    all=`expr $$all + 1`; \
! 	    echo "PASS: $$tst"; \
! 	  elif test $$? -ne 77; then \
! 	    all=`expr $$all + 1`; \
! 	    failed=`expr $$failed + 1`; \
! 	    echo "FAIL: $$tst"; \
  	  fi; \
! 	done; \
! 	if test "$$failed" -eq 0; then \
! 	  banner="All $$all tests passed"; \
! 	else \
! 	  banner="$$failed of $$all tests failed"; \
! 	fi; \
! 	dashes=`echo "$$banner" | sed s/./=/g`; \
! 	echo "$$dashes"; \
! 	echo "$$banner"; \
! 	echo "$$dashes"; \
! 	test "$$failed" -eq 0
! info-am:
! info: info-recursive
! dvi-am:
! dvi: dvi-recursive
  check-am: $(check_PROGRAMS)
  	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
  check: check-recursive
! installcheck-am:
! installcheck: installcheck-recursive
! install-info-am: 
! install-info: install-info-recursive
! install-exec-am:
  install-exec: install-exec-recursive
- 
- install-data-am:
  install-data: install-data-recursive
  
  install-am: all-am
  	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
- install: install-recursive
- uninstall-am:
- uninstall: uninstall-recursive
- all-am: Makefile $(LTLIBRARIES)
- all-redirect: all-recursive
- install-strip:
- 	$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
- installdirs: installdirs-recursive
- installdirs-am:
- 
  
  mostlyclean-generic:
  
  clean-generic:
  
  distclean-generic:
! 	-rm -f Makefile $(CONFIG_CLEAN_FILES)
! 	-rm -f config.cache config.log stamp-h stamp-h[0-9]*
  
  maintainer-clean-generic:
! mostlyclean-am:  mostlyclean-noinstLTLIBRARIES mostlyclean-compile \
! 		mostlyclean-libtool mostlyclean-checkPROGRAMS \
! 		mostlyclean-tags mostlyclean-generic
  
! mostlyclean: mostlyclean-recursive
  
! clean-am:  clean-noinstLTLIBRARIES clean-compile clean-libtool \
! 		clean-checkPROGRAMS clean-tags clean-generic \
! 		mostlyclean-am
  
! clean: clean-recursive
  
! distclean-am:  distclean-noinstLTLIBRARIES distclean-compile \
! 		distclean-libtool distclean-checkPROGRAMS \
! 		distclean-tags distclean-generic clean-am
! 	-rm -f libtool
  
! distclean: distclean-recursive
! 	-rm -f config.status
  
! maintainer-clean-am:  maintainer-clean-noinstLTLIBRARIES \
! 		maintainer-clean-compile maintainer-clean-libtool \
! 		maintainer-clean-checkPROGRAMS maintainer-clean-tags \
! 		maintainer-clean-generic distclean-am
! 	@echo "This command is intended for maintainers to use;"
! 	@echo "it deletes files that may require special tools to rebuild."
  
! maintainer-clean: maintainer-clean-recursive
! 	-rm -f config.status
  
! .PHONY: mostlyclean-noinstLTLIBRARIES distclean-noinstLTLIBRARIES \
! clean-noinstLTLIBRARIES maintainer-clean-noinstLTLIBRARIES \
! mostlyclean-compile distclean-compile clean-compile \
! maintainer-clean-compile mostlyclean-libtool distclean-libtool \
! clean-libtool maintainer-clean-libtool mostlyclean-checkPROGRAMS \
! distclean-checkPROGRAMS clean-checkPROGRAMS \
! maintainer-clean-checkPROGRAMS install-data-recursive \
! uninstall-data-recursive install-exec-recursive \
! uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \
! all-recursive check-recursive installcheck-recursive info-recursive \
! dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \
! maintainer-clean-recursive tags tags-recursive mostlyclean-tags \
! distclean-tags clean-tags maintainer-clean-tags distdir check-TESTS \
! info-am info dvi-am dvi check check-am installcheck-am installcheck \
! install-info-am install-info install-exec-am install-exec \
! install-data-am install-data install-am install uninstall-am uninstall \
! all-redirect all-am all installdirs-am installdirs mostlyclean-generic \
! distclean-generic clean-generic maintainer-clean-generic clean \
! mostlyclean distclean maintainer-clean
  
! # The following hack produces a warning from automake, but we need it in order 
! # to build a file from a subdirectory. FIXME.
! test.o:	tests/test.c
! 	$(COMPILE) -c $(srcdir)/tests/test.c
! $(all_objs) : include/private/gcconfig.h include/private/gc_priv.h \
! include/private/gc_hdrs.h include/gc.h include/gc_gcj.h \
! include/gc_pthread_redirects.h include/gc_config_macros.h \
! include/gc_mark.h @addincludes@
  
! .s.lo:
! 	$(LTCOMPILE) -Wp,-P -x assembler-with-cpp -c $<
  
! # Multilib support.
! .PHONY: all-multi mostlyclean-multi clean-multi distclean-multi \
! 	maintainer-clean-multi
  
! all-am: all-multi
! install-am: install-multi
! mostlyclean-am: mostlyclean-multi
! clean-am: clean-multi
! distclean-am: distclean-multi
! maintainer-clean-am: maintainer-clean-multi
  
! all-multi:
! 	: $(MAKE) ; exec $(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do
! install-multi:
! 	$(MULTIDO) $(AM_MAKEFLAGS) DO=install multi-do
! mostlyclean-multi:
! 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=mostlyclean multi-clean
! clean-multi:
! 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=clean multi-clean
! distclean-multi:
! 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=distclean multi-clean
! maintainer-clean-multi:
! 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=maintainer-clean multi-clean
  
  # Tell versions [3.59,3.63) of GNU make to not export all variables.
  # Otherwise a system limit (for SysV at least) may be exceeded.
  .NOEXPORT:
--- 501,751 ----
  	list='$(SUBDIRS)'; for subdir in $$list; do \
  	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
  	done
+ ctags-recursive:
+ 	list='$(SUBDIRS)'; for subdir in $$list; do \
+ 	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ 	done
  
! ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
! 	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
! 	unique=`for i in $$list; do \
! 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
! 	  done | \
! 	  $(AWK) '    { files[$$0] = 1; } \
  	       END { for (i in files) print i; }'`; \
! 	mkid -fID $$unique
! tags: TAGS
  
! TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
! 		$(TAGS_FILES) $(LISP)
  	tags=; \
  	here=`pwd`; \
+ 	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ 	  include_option=--etags-include; \
+ 	  empty_fix=.; \
+ 	else \
+ 	  include_option=--include; \
+ 	  empty_fix=; \
+ 	fi; \
  	list='$(SUBDIRS)'; for subdir in $$list; do \
! 	  if test "$$subdir" = .; then :; else \
! 	    test ! -f $$subdir/TAGS || \
! 	      tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
! 	  fi; \
  	done; \
! 	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
! 	unique=`for i in $$list; do \
! 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
! 	  done | \
! 	  $(AWK) '    { files[$$0] = 1; } \
  	       END { for (i in files) print i; }'`; \
! 	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
! 	  test -n "$$unique" || unique=$$empty_fix; \
! 	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
! 	    $$tags $$unique; \
! 	fi
! ctags: CTAGS
! CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
! 		$(TAGS_FILES) $(LISP)
! 	tags=; \
! 	here=`pwd`; \
! 	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
! 	unique=`for i in $$list; do \
! 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
! 	  done | \
! 	  $(AWK) '    { files[$$0] = 1; } \
! 	       END { for (i in files) print i; }'`; \
! 	test -z "$(CTAGS_ARGS)$$tags$$unique" \
! 	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
! 	     $$tags $$unique
  
! GTAGS:
! 	here=`$(am__cd) $(top_builddir) && pwd` \
! 	  && cd $(top_srcdir) \
! 	  && gtags -i $(GTAGS_ARGS) $$here
  
  distclean-tags:
! 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
  
! check-TESTS: $(TESTS)
! 	@failed=0; all=0; xfail=0; xpass=0; skip=0; \
! 	srcdir=$(srcdir); export srcdir; \
! 	list='$(TESTS)'; \
! 	if test -n "$$list"; then \
! 	  for tst in $$list; do \
! 	    if test -f ./$$tst; then dir=./; \
! 	    elif test -f $$tst; then dir=; \
! 	    else dir="$(srcdir)/"; fi; \
! 	    if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
! 	      all=`expr $$all + 1`; \
! 	      case " $(XFAIL_TESTS) " in \
! 	      *" $$tst "*) \
! 		xpass=`expr $$xpass + 1`; \
! 		failed=`expr $$failed + 1`; \
! 		echo "XPASS: $$tst"; \
! 	      ;; \
! 	      *) \
! 		echo "PASS: $$tst"; \
! 	      ;; \
! 	      esac; \
! 	    elif test $$? -ne 77; then \
! 	      all=`expr $$all + 1`; \
! 	      case " $(XFAIL_TESTS) " in \
! 	      *" $$tst "*) \
! 		xfail=`expr $$xfail + 1`; \
! 		echo "XFAIL: $$tst"; \
! 	      ;; \
! 	      *) \
! 		failed=`expr $$failed + 1`; \
! 		echo "FAIL: $$tst"; \
! 	      ;; \
! 	      esac; \
! 	    else \
! 	      skip=`expr $$skip + 1`; \
! 	      echo "SKIP: $$tst"; \
! 	    fi; \
! 	  done; \
! 	  if test "$$failed" -eq 0; then \
! 	    if test "$$xfail" -eq 0; then \
! 	      banner="All $$all tests passed"; \
! 	    else \
! 	      banner="All $$all tests behaved as expected ($$xfail expected failures)"; \
! 	    fi; \
  	  else \
! 	    if test "$$xpass" -eq 0; then \
! 	      banner="$$failed of $$all tests failed"; \
! 	    else \
! 	      banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
! 	    fi; \
  	  fi; \
! 	  dashes="$$banner"; \
! 	  skipped=""; \
! 	  if test "$$skip" -ne 0; then \
! 	    skipped="($$skip tests were not run)"; \
! 	    test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
! 	      dashes="$$skipped"; \
  	  fi; \
! 	  report=""; \
! 	  if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
! 	    report="Please report to $(PACKAGE_BUGREPORT)"; \
! 	    test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
! 	      dashes="$$report"; \
  	  fi; \
! 	  dashes=`echo "$$dashes" | sed s/./=/g`; \
! 	  echo "$$dashes"; \
! 	  echo "$$banner"; \
! 	  test -z "$$skipped" || echo "$$skipped"; \
! 	  test -z "$$report" || echo "$$report"; \
! 	  echo "$$dashes"; \
! 	  test "$$failed" -eq 0; \
! 	else :; fi
  check-am: $(check_PROGRAMS)
  	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
  check: check-recursive
! all-am: Makefile $(LTLIBRARIES) all-multi
! installdirs: installdirs-recursive
! installdirs-am:
! install: install-recursive
  install-exec: install-exec-recursive
  install-data: install-data-recursive
+ uninstall: uninstall-recursive
  
  install-am: all-am
  	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
  
+ installcheck: installcheck-recursive
+ install-strip:
+ 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ 	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ 	  `test -z '$(STRIP)' || \
+ 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
  mostlyclean-generic:
  
  clean-generic:
  
  distclean-generic:
! 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
! 	-rm -f tests/$(am__dirstamp)
  
  maintainer-clean-generic:
! 	@echo "This command is intended for maintainers to use"
! 	@echo "it deletes files that may require special tools to rebuild."
! clean: clean-multi clean-recursive
  
! clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
! 	clean-noinstLTLIBRARIES mostlyclean-am
  
! distclean: distclean-multi distclean-recursive
! 	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
! 	-rm -f Makefile
! distclean-am: clean-am distclean-compile distclean-generic \
! 	distclean-libtool distclean-tags
  
! dvi: dvi-recursive
  
! dvi-am:
  
! html: html-recursive
  
! info: info-recursive
  
! info-am:
  
! install-data-am:
  
! install-exec-am: install-multi
  
! install-info: install-info-recursive
  
! install-man:
  
! installcheck-am:
  
! maintainer-clean: maintainer-clean-multi maintainer-clean-recursive
! 	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
! 	-rm -rf $(top_srcdir)/autom4te.cache
! 	-rm -f Makefile
! maintainer-clean-am: distclean-am maintainer-clean-generic
! 
! mostlyclean: mostlyclean-multi mostlyclean-recursive
! 
! mostlyclean-am: mostlyclean-compile mostlyclean-generic \
! 	mostlyclean-libtool
! 
! pdf: pdf-recursive
! 
! pdf-am:
! 
! ps: ps-recursive
  
+ ps-am:
+ 
+ uninstall-am:
+ 
+ uninstall-info: uninstall-info-recursive
+ 
+ .PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am all-multi \
+ 	am--refresh check check-TESTS check-am clean \
+ 	clean-checkPROGRAMS clean-generic clean-libtool clean-multi \
+ 	clean-noinstLTLIBRARIES clean-recursive ctags ctags-recursive \
+ 	distclean distclean-compile distclean-generic \
+ 	distclean-libtool distclean-multi distclean-recursive \
+ 	distclean-tags dvi dvi-am html html-am info info-am install \
+ 	install-am install-data install-data-am install-exec \
+ 	install-exec-am install-info install-info-am install-man \
+ 	install-multi install-strip installcheck installcheck-am \
+ 	installdirs installdirs-am maintainer-clean \
+ 	maintainer-clean-generic maintainer-clean-multi \
+ 	maintainer-clean-recursive mostlyclean mostlyclean-compile \
+ 	mostlyclean-generic mostlyclean-libtool mostlyclean-multi \
+ 	mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
+ 	uninstall uninstall-am uninstall-info-am
+ 
+ 
+ .s.lo:
+ 	$(LTCOMPILE) -Wp,-P -x assembler-with-cpp -c $<
+ .S.lo:
+ 	$(LTCOMPILE) -Wp,-P -x assembler-with-cpp -c $<
  # Tell versions [3.59,3.63) of GNU make to not export all variables.
  # Otherwise a system limit (for SysV at least) may be exceeded.
  .NOEXPORT:
diff -Nrcpad gcc-3.4.3/boehm-gc/NT_MAKEFILE gcc-4.0.0/boehm-gc/NT_MAKEFILE
*** gcc-3.4.3/boehm-gc/NT_MAKEFILE	Fri Aug 17 18:30:45 2001
--- gcc-4.0.0/boehm-gc/NT_MAKEFILE	Fri Aug 13 23:05:29 2004
***************
*** 2,8 ****
  # DLLs are included in the root set under NT, but not under win32S.
  # Use "nmake nodebug=1 all" for optimized versions of library, gctest and editor.
  
! CPU= i386
  !include <ntwin32.mak>
  
  OBJS= alloc.obj reclaim.obj allchblk.obj misc.obj mach_dep.obj os_dep.obj mark_rts.obj headers.obj mark.obj obj_map.obj blacklst.obj finalize.obj new_hblk.obj dbg_mlc.obj malloc.obj stubborn.obj dyn_load.obj typd_mlc.obj ptr_chck.obj gc_cpp.obj mallocx.obj
--- 2,9 ----
  # DLLs are included in the root set under NT, but not under win32S.
  # Use "nmake nodebug=1 all" for optimized versions of library, gctest and editor.
  
! MY_CPU=X86
! CPU=$(MY_CPU)
  !include <ntwin32.mak>
  
  OBJS= alloc.obj reclaim.obj allchblk.obj misc.obj mach_dep.obj os_dep.obj mark_rts.obj headers.obj mark.obj obj_map.obj blacklst.obj finalize.obj new_hblk.obj dbg_mlc.obj malloc.obj stubborn.obj dyn_load.obj typd_mlc.obj ptr_chck.obj gc_cpp.obj mallocx.obj
*************** OBJS= alloc.obj reclaim.obj allchblk.obj
*** 10,19 ****
  all: gctest.exe cord\de.exe test_cpp.exe
  
  .c.obj:
! 	$(cc) $(cdebug) $(cflags) $(cvars) -Iinclude -DSILENT -DALL_INTERIOR_POINTERS -D__STDC__ -DGC_NOT_DLL $*.c /Fo$*.obj
  
  .cpp.obj:
! 	$(cc) $(cdebug) $(cflags) $(cvars) -Iinclude -DSILENT -DALL_INTERIOR_POINTERS -DGC_NOT_DLL $*.CPP /Fo$*.obj
  
  $(OBJS) tests\test.obj: include\private\gc_priv.h include\private\gc_hdrs.h include\gc.h include\private\gcconfig.h include\private\gc_locks.h include\private\gc_pmark.h include\gc_mark.h
  
--- 11,20 ----
  all: gctest.exe cord\de.exe test_cpp.exe
  
  .c.obj:
! 	$(cc) $(cdebug) $(cflags) $(cvars) -Iinclude -DSILENT -DALL_INTERIOR_POINTERS -D__STDC__ -DGC_NOT_DLL -DGC_BUILD $*.c /Fo$*.obj
  
  .cpp.obj:
! 	$(cc) $(cdebug) $(cflags) $(cvars) -Iinclude -DSILENT -DALL_INTERIOR_POINTERS -DGC_NOT_DLL -DGC_BUILD $*.CPP /Fo$*.obj
  
  $(OBJS) tests\test.obj: include\private\gc_priv.h include\private\gc_hdrs.h include\gc.h include\private\gcconfig.h include\private\gc_locks.h include\private\gc_pmark.h include\gc_mark.h
  
*************** gctest.exe: tests\test.obj gc.lib
*** 30,36 ****
  #	mapsympe -n -o gctest.sym gctest.exe
  
  cord\de_win.rbj: cord\de_win.res
! 	cvtres -$(CPU) cord\de_win.res -o cord\de_win.rbj
  
  cord\de.obj cord\de_win.obj: include\cord.h include\private\cord_pos.h cord\de_win.h cord\de_cmds.h
  
--- 31,37 ----
  #	mapsympe -n -o gctest.sym gctest.exe
  
  cord\de_win.rbj: cord\de_win.res
! 	cvtres /MACHINE:$(MY_CPU) /OUT:cord\de_win.rbj cord\de_win.res
  
  cord\de.obj cord\de_win.obj: include\cord.h include\private\cord_pos.h cord\de_win.h cord\de_cmds.h
  
diff -Nrcpad gcc-3.4.3/boehm-gc/NT_STATIC_THREADS_MAKEFILE gcc-4.0.0/boehm-gc/NT_STATIC_THREADS_MAKEFILE
*** gcc-3.4.3/boehm-gc/NT_STATIC_THREADS_MAKEFILE	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/boehm-gc/NT_STATIC_THREADS_MAKEFILE	Thu Aug 12 21:14:24 2004
***************
*** 0 ****
--- 1,60 ----
+ # Makefile for Windows NT.  Assumes Microsoft compiler.
+ # DLLs are included in the root set under NT, but not under win32S.
+ # Use "nmake nodebug=1 all" for optimized versions of library, gctest and editor.
+ 
+ MY_CPU=X86
+ CPU=$(MY_CPU)
+ !include <ntwin32.mak>
+ 
+ OBJS= alloc.obj reclaim.obj allchblk.obj misc.obj mach_dep.obj os_dep.obj mark_rts.obj headers.obj mark.obj obj_map.obj blacklst.obj finalize.obj new_hblk.obj dbg_mlc.obj malloc.obj stubborn.obj dyn_load.obj typd_mlc.obj ptr_chck.obj gc_cpp.obj mallocx.obj win32_threads.obj
+ 
+ all: gctest.exe cord\de.exe test_cpp.exe
+ 
+ .c.obj:
+ 	$(cc) $(cdebug) $(cflags) $(cvars) -Iinclude -DSILENT -DALL_INTERIOR_POINTERS -D__STDC__ -DGC_NOT_DLL -DGC_WIN32_THREADS $*.c /Fo$*.obj
+ 
+ .cpp.obj:
+ 	$(cc) $(cdebug) $(cflags) $(cvars) -Iinclude -DSILENT -DALL_INTERIOR_POINTERS -DGC_NOT_DLL $*.CPP -DGC_WIN32_THREADS /Fo$*.obj
+ 
+ $(OBJS) tests\test.obj: include\private\gc_priv.h include\private\gc_hdrs.h include\gc.h include\private\gcconfig.h include\private\gc_locks.h include\private\gc_pmark.h include\gc_mark.h
+ 
+ gc.lib: $(OBJS)
+ 	lib /MACHINE:i386 /out:gc.lib $(OBJS)
+ # The original NT SDK used lib32 instead of lib
+ 
+ gctest.exe: tests\test.obj gc.lib
+ #	The following works for win32 debugging.  For win32s debugging use debugtype:coff
+ #	and add mapsympe line.
+ #  This produces a "GUI" applications that opens no windows and writes to the log file
+ #  "gc.log".  This is done to make the result runnable under win32s.
+ 	$(link) -debug:full -debugtype:cv $(guiflags) -stack:131072 -out:$*.exe tests\test.obj $(guilibs) gc.lib
+ #	mapsympe -n -o gctest.sym gctest.exe
+ 
+ cord\de_win.rbj: cord\de_win.res
+ 	cvtres /MACHINE:$(MY_CPU) /OUT:cord\de_win.rbj cord\de_win.res
+ 
+ cord\de.obj cord\de_win.obj: include\cord.h include\private\cord_pos.h cord\de_win.h cord\de_cmds.h
+ 
+ cord\de_win.res: cord\de_win.rc cord\de_win.h cord\de_cmds.h
+ 	$(rc) $(rcvars) -r -fo cord\de_win.res $(cvars) cord\de_win.rc
+ 
+ # Cord/de is a real win32 gui application.
+ cord\de.exe: cord\cordbscs.obj cord\cordxtra.obj cord\de.obj cord\de_win.obj cord\de_win.rbj gc.lib
+ 	$(link) -debug:full -debugtype:cv $(guiflags) -stack:16384 -out:cord\de.exe  cord\cordbscs.obj cord\cordxtra.obj cord\de.obj cord\de_win.obj cord\de_win.rbj gc.lib $(guilibs)
+ 
+ gc_cpp.obj: include\gc_cpp.h include\gc.h
+ 
+ gc_cpp.cpp: gc_cpp.cc
+ 	copy gc_cpp.cc gc_cpp.cpp
+ 
+ test_cpp.cpp: tests\test_cpp.cc
+ 	copy tests\test_cpp.cc test_cpp.cpp
+ 
+ # This generates the C++ test executable.  The executable expects
+ # a single numeric argument, which is the number of iterations.
+ # The output appears in the file "gc.log".
+ test_cpp.exe: test_cpp.obj include\gc_cpp.h include\gc.h gc.lib
+ 	$(link) -debug:full -debugtype:cv $(guiflags) -stack:16384 -out:test_cpp.exe test_cpp.obj gc.lib $(guilibs)
+ 
+ 
+ 
diff -Nrcpad gcc-3.4.3/boehm-gc/acinclude.m4 gcc-4.0.0/boehm-gc/acinclude.m4
*** gcc-3.4.3/boehm-gc/acinclude.m4	Thu May 16 17:41:54 2002
--- gcc-4.0.0/boehm-gc/acinclude.m4	Thu Jan  1 00:00:00 1970
***************
*** 1,191 ****
- # Copyright (c) 1999-2001, 2002 by Red Hat, Inc. All rights reserved.
- # 
- # THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
- # OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- # 
- # Permission is hereby granted to use or copy this program
- # for any purpose,  provided the above notices are retained on all copies.
- # Permission to modify the code and to distribute modified code is granted,
- # provided the above notices are retained, and a notice that the code was
- # modified is included with the above copyright notice.
- #
- # Original author: Tom Tromey
- 
- # FIXME: We temporarily define our own version of AC_PROG_CC.  This is
- # copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS.  We
- # are probably using a cross compiler, which will not be able to fully
- # link an executable.  This should really be fixed in autoconf
- # itself.
- 
- AC_DEFUN(GC_CONFIGURE,
- [
- dnl Default to --enable-multilib
- AC_ARG_ENABLE(multilib,
- [  --enable-multilib       build many library versions (default)],
- [case "${enableval}" in
-   yes) multilib=yes ;;
-   no)  multilib=no ;;
-   *)   AC_MSG_ERROR(bad value ${enableval} for multilib option) ;;
-  esac], [multilib=yes])dnl
- 
- dnl We may get other options which we don't document:
- dnl --with-target-subdir, --with-multisrctop, --with-multisubdir
- 
- dnl I needed to add the -n test to allow configuration in src directory - HB
- if test "[$]{srcdir}" = "."; then
-   if test "[$]{with_target_subdir}" != "." -a -n "[$]{with_target_subdir}"; then
-     gc_basedir="[$]{srcdir}/[$]{with_multisrctop}../$1"
-   else
-     gc_basedir="[$]{srcdir}/[$]{with_multisrctop}$1"
-   fi
- else
-   gc_basedir="[$]{srcdir}/$1"
- fi
- AC_SUBST(gc_basedir)
- AC_CONFIG_AUX_DIR($gc_basedir/..)
- if :; then :; else
-   # This overrides the previous occurrence for automake, but not for
-   # autoconf, which is exactly what we want.
-   AC_CONFIG_AUX_DIR(..)
- fi
- 
- AC_CANONICAL_SYSTEM
- 
- # This works around an automake problem.
- mkinstalldirs="`cd $ac_aux_dir && ${PWDCMD-pwd}`/mkinstalldirs"
- AC_SUBST(mkinstalldirs)
- 
- AM_INIT_AUTOMAKE(gc, 6.1a1, no-define)
- 
- # FIXME: We temporarily define our own version of AC_PROG_CC.  This is
- # copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS.  We
- # are probably using a cross compiler, which will not be able to fully
- # link an executable.  This should really be fixed in autoconf
- # itself.
- 
- AC_DEFUN(LIB_AC_PROG_CC,
- [AC_BEFORE([$0], [AC_PROG_CPP])dnl
- dnl Fool anybody using AC_PROG_CC.
- AC_PROVIDE([AC_PROG_CC])
- AC_CHECK_PROG(CC, gcc, gcc)
- if test -z "$CC"; then
-   AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc)
-   test -z "$CC" && AC_MSG_ERROR([no acceptable cc found in \$PATH])
- fi
- 
- AC_PROG_CC_GNU
- 
- if test $ac_cv_prog_gcc = yes; then
-   GCC=yes
- dnl Check whether -g works, even if CFLAGS is set, in case the package
- dnl plays around with CFLAGS (such as to build both debugging and
- dnl normal versions of a library), tasteless as that idea is.
-   ac_test_CFLAGS="${CFLAGS+set}"
-   ac_save_CFLAGS="$CFLAGS"
-   CFLAGS=
-   AC_PROG_CC_G
-   if test "$ac_test_CFLAGS" = set; then
-     CFLAGS="$ac_save_CFLAGS"
-   elif test $ac_cv_prog_cc_g = yes; then
-     CFLAGS="-g -O2"
-   else
-     CFLAGS="-O2"
-   fi
- else
-   GCC=
-   test "${CFLAGS+set}" = set || CFLAGS="-g"
- fi
- ])
- 
- LIB_AC_PROG_CC
- 
- # Likewise for AC_PROG_CXX.
- AC_DEFUN(LIB_AC_PROG_CXX,
- [AC_BEFORE([$0], [AC_PROG_CXXCPP])dnl
- dnl Fool anybody using AC_PROG_CXX.
- AC_PROVIDE([AC_PROG_CXX])
- AC_CHECK_PROGS(CXX, $CCC c++ g++ gcc CC cxx cc++, gcc)
- test -z "$CXX" && AC_MSG_ERROR([no acceptable c++ found in \$PATH])
- 
- AC_PROG_CXX_GNU
- 
- if test $ac_cv_prog_gxx = yes; then
-   GXX=yes
- dnl Check whether -g works, even if CXXFLAGS is set, in case the package
- dnl plays around with CXXFLAGS (such as to build both debugging and
- dnl normal versions of a library), tasteless as that idea is.
-   ac_test_CXXFLAGS="${CXXFLAGS+set}"
-   ac_save_CXXFLAGS="$CXXFLAGS"
-   CXXFLAGS=
-   AC_PROG_CXX_G
-   if test "$ac_test_CXXFLAGS" = set; then
-     CXXFLAGS="$ac_save_CXXFLAGS"
-   elif test $ac_cv_prog_cxx_g = yes; then
-     CXXFLAGS="-g -O2"
-   else
-     CXXFLAGS="-O2"
-   fi
- else
-   GXX=
-   test "${CXXFLAGS+set}" = set || CXXFLAGS="-g"
- fi
- ])
- 
- LIB_AC_PROG_CXX
- 
- # AC_CHECK_TOOL does AC_REQUIRE (AC_CANONICAL_BUILD).  If we don't
- # run it explicitly here, it will be run implicitly before
- # NEWLIB_CONFIGURE, which doesn't work because that means that it will
- # be run before AC_CANONICAL_HOST.
- AC_CANONICAL_BUILD
- 
- AC_CHECK_TOOL(AS, as)
- AC_CHECK_TOOL(AR, ar)
- AC_CHECK_TOOL(RANLIB, ranlib, :)
- 
- AC_PROG_INSTALL
- 
- AM_MAINTAINER_MODE
- 
- # We need AC_EXEEXT to keep automake happy in cygnus mode.  However,
- # at least currently, we never actually build a program, so we never
- # need to use $(EXEEXT).  Moreover, the test for EXEEXT normally
- # fails, because we are probably configuring with a cross compiler
- # which can't create executables.  So we include AC_EXEEXT to keep
- # automake happy, but we don't execute it, since we don't care about
- # the result.
- if false; then
-   # autoconf 2.50 runs AC_EXEEXT by default, and the macro expands
-   # to nothing, so nothing would remain between `then' and `fi' if it
-   # were not for the `:' below.
-   :
-   AC_EXEEXT
- fi
- 
- . [$]{srcdir}/configure.host
- 
- case [$]{gc_basedir} in
- /* | [A-Za-z]:[/\\]*) gc_flagbasedir=[$]{gc_basedir} ;;
- *) gc_flagbasedir='[$](top_builddir)/'[$]{gc_basedir} ;;
- esac
- 
- gc_cflags="[$]{gc_cflags} -I"'[$](top_builddir)'"/$1/targ-include -I[$]{gc_flagbasedir}/libc/include"
- case "${host}" in
-   *-*-cygwin32*)
-     gc_cflags="[$]{gc_cflags} -I[$]{gc_flagbasedir}/../winsup/include"
-     ;;
- esac
- 
- dnl gc_cflags="[$]{gc_cflags} -fno-builtin"
- 
- GC_CFLAGS=${gc_cflags}
- AC_SUBST(GC_CFLAGS)
- ]))
- 
- ))))
- 
- sinclude(../libtool.m4)
- dnl The line below arranges for aclocal not to bring a definition of
- dnl AM_PROG_LIBTOOL into aclocal.m4, while still arranging for automake
- dnl to add a definition of LIBTOOL to Makefile.in.
- ifelse(yes,no,[AC_DEFUN([AM_PROG_LIBTOOL],[AC_SUBST(LIBTOOL)])])
--- 0 ----
diff -Nrcpad gcc-3.4.3/boehm-gc/aclocal.m4 gcc-4.0.0/boehm-gc/aclocal.m4
*** gcc-3.4.3/boehm-gc/aclocal.m4	Fri Nov  5 04:14:05 2004
--- gcc-4.0.0/boehm-gc/aclocal.m4	Thu Apr 21 07:04:10 2005
***************
*** 1,262 ****
! dnl aclocal.m4 generated automatically by aclocal 1.4
  
! dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
! dnl This file is free software; the Free Software Foundation
! dnl gives unlimited permission to copy and/or distribute it,
! dnl with or without modifications, as long as this notice is preserved.
  
! dnl This program is distributed in the hope that it will be useful,
! dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
! dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
! dnl PARTICULAR PURPOSE.
  
! # Copyright (c) 1999-2001, 2002 by Red Hat, Inc. All rights reserved.
! # 
! # THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
! # OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
! # 
! # Permission is hereby granted to use or copy this program
! # for any purpose,  provided the above notices are retained on all copies.
! # Permission to modify the code and to distribute modified code is granted,
! # provided the above notices are retained, and a notice that the code was
! # modified is included with the above copyright notice.
  #
! # Original author: Tom Tromey
  
! # FIXME: We temporarily define our own version of AC_PROG_CC.  This is
! # copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS.  We
! # are probably using a cross compiler, which will not be able to fully
! # link an executable.  This should really be fixed in autoconf
! # itself.
  
! AC_DEFUN(GC_CONFIGURE,
! [
! dnl Default to --enable-multilib
! AC_ARG_ENABLE(multilib,
! [  --enable-multilib       build many library versions (default)],
! [case "${enableval}" in
!   yes) multilib=yes ;;
!   no)  multilib=no ;;
!   *)   AC_MSG_ERROR(bad value ${enableval} for multilib option) ;;
!  esac], [multilib=yes])dnl
  
! dnl We may get other options which we don't document:
! dnl --with-target-subdir, --with-multisrctop, --with-multisubdir
  
! dnl I needed to add the -n test to allow configuration in src directory - HB
! if test "[$]{srcdir}" = "."; then
!   if test "[$]{with_target_subdir}" != "." -a -n "[$]{with_target_subdir}"; then
!     gc_basedir="[$]{srcdir}/[$]{with_multisrctop}../$1"
!   else
!     gc_basedir="[$]{srcdir}/[$]{with_multisrctop}$1"
    fi
  else
!   gc_basedir="[$]{srcdir}/$1"
  fi
! AC_SUBST(gc_basedir)
! AC_CONFIG_AUX_DIR($gc_basedir/..)
! if :; then :; else
!   # This overrides the previous occurrence for automake, but not for
!   # autoconf, which is exactly what we want.
!   AC_CONFIG_AUX_DIR(..)
  fi
  
! AC_CANONICAL_SYSTEM
  
! # This works around an automake problem.
! mkinstalldirs="`cd $ac_aux_dir && ${PWDCMD-pwd}`/mkinstalldirs"
! AC_SUBST(mkinstalldirs)
  
! AM_INIT_AUTOMAKE(gc, 6.0, no-define)
  
! # FIXME: We temporarily define our own version of AC_PROG_CC.  This is
! # copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS.  We
! # are probably using a cross compiler, which will not be able to fully
! # link an executable.  This should really be fixed in autoconf
! # itself.
  
! AC_DEFUN(LIB_AC_PROG_CC,
! [AC_BEFORE([$0], [AC_PROG_CPP])dnl
! dnl Fool anybody using AC_PROG_CC.
! AC_PROVIDE([AC_PROG_CC])
! AC_CHECK_PROG(CC, gcc, gcc)
! if test -z "$CC"; then
!   AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc)
!   test -z "$CC" && AC_MSG_ERROR([no acceptable cc found in \$PATH])
! fi
  
! AC_PROG_CC_GNU
  
! if test $ac_cv_prog_gcc = yes; then
!   GCC=yes
! dnl Check whether -g works, even if CFLAGS is set, in case the package
! dnl plays around with CFLAGS (such as to build both debugging and
! dnl normal versions of a library), tasteless as that idea is.
!   ac_test_CFLAGS="${CFLAGS+set}"
!   ac_save_CFLAGS="$CFLAGS"
!   CFLAGS=
!   AC_PROG_CC_G
!   if test "$ac_test_CFLAGS" = set; then
!     CFLAGS="$ac_save_CFLAGS"
!   elif test $ac_cv_prog_cc_g = yes; then
!     CFLAGS="-g -O2"
    else
!     CFLAGS="-O2"
    fi
! else
!   GCC=
!   test "${CFLAGS+set}" = set || CFLAGS="-g"
! fi
  ])
  
! LIB_AC_PROG_CC
  
! # Likewise for AC_PROG_CXX.
! AC_DEFUN(LIB_AC_PROG_CXX,
! [AC_BEFORE([$0], [AC_PROG_CXXCPP])dnl
! dnl Fool anybody using AC_PROG_CXX.
! AC_PROVIDE([AC_PROG_CXX])
! AC_CHECK_PROGS(CXX, $CCC c++ g++ gcc CC cxx cc++, gcc)
! test -z "$CXX" && AC_MSG_ERROR([no acceptable c++ found in \$PATH])
  
! AC_PROG_CXX_GNU
  
! if test $ac_cv_prog_gxx = yes; then
!   GXX=yes
! dnl Check whether -g works, even if CXXFLAGS is set, in case the package
! dnl plays around with CXXFLAGS (such as to build both debugging and
! dnl normal versions of a library), tasteless as that idea is.
!   ac_test_CXXFLAGS="${CXXFLAGS+set}"
!   ac_save_CXXFLAGS="$CXXFLAGS"
!   CXXFLAGS=
!   AC_PROG_CXX_G
!   if test "$ac_test_CXXFLAGS" = set; then
!     CXXFLAGS="$ac_save_CXXFLAGS"
!   elif test $ac_cv_prog_cxx_g = yes; then
!     CXXFLAGS="-g -O2"
    else
!     CXXFLAGS="-O2"
    fi
  else
!   GXX=
!   test "${CXXFLAGS+set}" = set || CXXFLAGS="-g"
  fi
  ])
  
! LIB_AC_PROG_CXX
  
! # AC_CHECK_TOOL does AC_REQUIRE (AC_CANONICAL_BUILD).  If we don't
! # run it explicitly here, it will be run implicitly before
! # NEWLIB_CONFIGURE, which doesn't work because that means that it will
! # be run before AC_CANONICAL_HOST.
! AC_CANONICAL_BUILD
  
! AC_CHECK_TOOL(AS, as)
! AC_CHECK_TOOL(AR, ar)
! AC_CHECK_TOOL(RANLIB, ranlib, :)
  
! AC_PROG_INSTALL
  
! AM_MAINTAINER_MODE
  
! # We need AC_EXEEXT to keep automake happy in cygnus mode.  However,
! # at least currently, we never actually build a program, so we never
! # need to use $(EXEEXT).  Moreover, the test for EXEEXT normally
! # fails, because we are probably configuring with a cross compiler
! # which can't create executables.  So we include AC_EXEEXT to keep
! # automake happy, but we don't execute it, since we don't care about
! # the result.
! if false; then
!   # autoconf 2.50 runs AC_EXEEXT by default, and the macro expands
!   # to nothing, so nothing would remain between `then' and `fi' if it
!   # were not for the `:' below.
!   :
!   AC_EXEEXT
  fi
  
! . [$]{srcdir}/configure.host
  
- case [$]{gc_basedir} in
- /* | [A-Za-z]:[/\\]*) gc_flagbasedir=[$]{gc_basedir} ;;
- *) gc_flagbasedir='[$](top_builddir)/'[$]{gc_basedir} ;;
- esac
  
! gc_cflags="[$]{gc_cflags} -I"'[$](top_builddir)'"/$1/targ-include -I[$]{gc_flagbasedir}/libc/include"
! case "${host}" in
!   *-*-cygwin32*)
!     gc_cflags="[$]{gc_cflags} -I[$]{gc_flagbasedir}/../winsup/include"
!     ;;
! esac
  
! dnl gc_cflags="[$]{gc_cflags} -fno-builtin"
  
! GC_CFLAGS=${gc_cflags}
! AC_SUBST(GC_CFLAGS)
! ]))
  
! ))))
  
! sinclude(../libtool.m4)
! dnl The line below arranges for aclocal not to bring a definition of
! dnl AM_PROG_LIBTOOL into aclocal.m4, while still arranging for automake
! dnl to add a definition of LIBTOOL to Makefile.in.
! ifelse(yes,no,[AC_DEFUN([AM_PROG_LIBTOOL],[AC_SUBST(LIBTOOL)])])
  
! # Do all the work for Automake.  This macro actually does too much --
! # some checks are only needed if your package does certain things.
! # But this isn't really a big deal.
  
- # serial 1
  
! dnl Usage:
! dnl AM_INIT_AUTOMAKE(package,version, [no-define])
  
! AC_DEFUN(AM_INIT_AUTOMAKE,
! [AC_REQUIRE([AC_PROG_INSTALL])
! PACKAGE=[$1]
! AC_SUBST(PACKAGE)
! VERSION=[$2]
! AC_SUBST(VERSION)
! dnl test to see if srcdir already configured
! if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
!   AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
  fi
! ifelse([$3],,
! AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
! AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package]))
! AC_REQUIRE([AM_SANITY_CHECK])
! AC_REQUIRE([AC_ARG_PROGRAM])
! dnl FIXME This is truly gross.
! missing_dir=`cd $ac_aux_dir && pwd`
! AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
! AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
! AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
! AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
! AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
! AC_REQUIRE([AC_PROG_MAKE_SET])])
  
  #
  # Check to make sure that the build environment is sane.
  #
  
! AC_DEFUN(AM_SANITY_CHECK,
  [AC_MSG_CHECKING([whether build environment is sane])
  # Just in case
  sleep 1
! echo timestamp > conftestfile
  # Do `set' in a subshell so we don't clobber the current shell's
  # arguments.  Must try -L first in case configure is actually a
  # symlink; some systems play weird games with the mod time of symlinks
  # (eg FreeBSD returns the mod time of the symlink's containing
  # directory).
  if (
!    set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
!    if test "[$]*" = "X"; then
        # -L didn't work.
!       set X `ls -t $srcdir/configure conftestfile`
     fi
!    if test "[$]*" != "X $srcdir/configure conftestfile" \
!       && test "[$]*" != "X conftestfile $srcdir/configure"; then
  
        # If neither matched, then we have a broken ls.  This can happen
        # if, for instance, CONFIG_SHELL is bash and it inherits a
--- 1,1005 ----
! # generated automatically by aclocal 1.9.3 -*- Autoconf -*-
  
! # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
! # Free Software Foundation, Inc.
! # This file is free software; the Free Software Foundation
! # gives unlimited permission to copy and/or distribute it,
! # with or without modifications, as long as this notice is preserved.
  
! # This program is distributed in the hope that it will be useful,
! # but WITHOUT ANY WARRANTY, to the extent permitted by law; without
! # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
! # PARTICULAR PURPOSE.
  
! #                                                        -*- Autoconf -*-
! # Copyright (C) 2002, 2003  Free Software Foundation, Inc.
! # Generated from amversion.in; do not edit by hand.
! 
! # This program is free software; you can redistribute it and/or modify
! # it under the terms of the GNU General Public License as published by
! # the Free Software Foundation; either version 2, or (at your option)
! # any later version.
! 
! # This program is distributed in the hope that it will be useful,
! # but WITHOUT ANY WARRANTY; without even the implied warranty of
! # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! # GNU General Public License for more details.
! 
! # You should have received a copy of the GNU General Public License
! # along with this program; if not, write to the Free Software
! # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
! 
! # AM_AUTOMAKE_VERSION(VERSION)
! # ----------------------------
! # Automake X.Y traces this macro to ensure aclocal.m4 has been
! # generated from the m4 files accompanying Automake X.Y.
! AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"])
! 
! # AM_SET_CURRENT_AUTOMAKE_VERSION
! # -------------------------------
! # Call AM_AUTOMAKE_VERSION so it can be traced.
! # This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
! AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
! 	 [AM_AUTOMAKE_VERSION([1.9.3])])
! 
! # AM_AUX_DIR_EXPAND
! 
! # Copyright (C) 2001, 2003 Free Software Foundation, Inc.
! 
! # This program is free software; you can redistribute it and/or modify
! # it under the terms of the GNU General Public License as published by
! # the Free Software Foundation; either version 2, or (at your option)
! # any later version.
! 
! # This program is distributed in the hope that it will be useful,
! # but WITHOUT ANY WARRANTY; without even the implied warranty of
! # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! # GNU General Public License for more details.
! 
! # You should have received a copy of the GNU General Public License
! # along with this program; if not, write to the Free Software
! # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
! # 02111-1307, USA.
! 
! # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
! # $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
! # `$srcdir', `$srcdir/..', or `$srcdir/../..'.
  #
! # Of course, Automake must honor this variable whenever it calls a
! # tool from the auxiliary directory.  The problem is that $srcdir (and
! # therefore $ac_aux_dir as well) can be either absolute or relative,
! # depending on how configure is run.  This is pretty annoying, since
! # it makes $ac_aux_dir quite unusable in subdirectories: in the top
! # source directory, any form will work fine, but in subdirectories a
! # relative path needs to be adjusted first.
! #
! # $ac_aux_dir/missing
! #    fails when called from a subdirectory if $ac_aux_dir is relative
! # $top_srcdir/$ac_aux_dir/missing
! #    fails if $ac_aux_dir is absolute,
! #    fails when called from a subdirectory in a VPATH build with
! #          a relative $ac_aux_dir
! #
! # The reason of the latter failure is that $top_srcdir and $ac_aux_dir
! # are both prefixed by $srcdir.  In an in-source build this is usually
! # harmless because $srcdir is `.', but things will broke when you
! # start a VPATH build or use an absolute $srcdir.
! #
! # So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
! # iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
! #   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
! # and then we would define $MISSING as
! #   MISSING="\${SHELL} $am_aux_dir/missing"
! # This will work as long as MISSING is not called from configure, because
! # unfortunately $(top_srcdir) has no meaning in configure.
! # However there are other variables, like CC, which are often used in
! # configure, and could therefore not use this "fixed" $ac_aux_dir.
! #
! # Another solution, used here, is to always expand $ac_aux_dir to an
! # absolute PATH.  The drawback is that using absolute paths prevent a
! # configured tree to be moved without reconfiguration.
  
! AC_DEFUN([AM_AUX_DIR_EXPAND],
! [dnl Rely on autoconf to set up CDPATH properly.
! AC_PREREQ([2.50])dnl
! # expand $ac_aux_dir to an absolute path
! am_aux_dir=`cd $ac_aux_dir && pwd`
! ])
  
! # AM_CONDITIONAL                                              -*- Autoconf -*-
  
! # Copyright (C) 1997, 2000, 2001, 2003, 2004 Free Software Foundation, Inc.
  
! # This program is free software; you can redistribute it and/or modify
! # it under the terms of the GNU General Public License as published by
! # the Free Software Foundation; either version 2, or (at your option)
! # any later version.
! 
! # This program is distributed in the hope that it will be useful,
! # but WITHOUT ANY WARRANTY; without even the implied warranty of
! # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! # GNU General Public License for more details.
! 
! # You should have received a copy of the GNU General Public License
! # along with this program; if not, write to the Free Software
! # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
! # 02111-1307, USA.
! 
! # serial 6
! 
! # AM_CONDITIONAL(NAME, SHELL-CONDITION)
! # -------------------------------------
! # Define a conditional.
! AC_DEFUN([AM_CONDITIONAL],
! [AC_PREREQ(2.52)dnl
!  ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
! 	[$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
! AC_SUBST([$1_TRUE])
! AC_SUBST([$1_FALSE])
! if $2; then
!   $1_TRUE=
!   $1_FALSE='#'
! else
!   $1_TRUE='#'
!   $1_FALSE=
! fi
! AC_CONFIG_COMMANDS_PRE(
! [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
!   AC_MSG_ERROR([[conditional "$1" was never defined.
! Usually this means the macro was only invoked conditionally.]])
! fi])])
! 
! # serial 7						-*- Autoconf -*-
! 
! # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
! # Free Software Foundation, Inc.
! 
! # This program is free software; you can redistribute it and/or modify
! # it under the terms of the GNU General Public License as published by
! # the Free Software Foundation; either version 2, or (at your option)
! # any later version.
! 
! # This program is distributed in the hope that it will be useful,
! # but WITHOUT ANY WARRANTY; without even the implied warranty of
! # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! # GNU General Public License for more details.
! 
! # You should have received a copy of the GNU General Public License
! # along with this program; if not, write to the Free Software
! # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
! # 02111-1307, USA.
! 
! 
! # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
! # written in clear, in which case automake, when reading aclocal.m4,
! # will think it sees a *use*, and therefore will trigger all it's
! # C support machinery.  Also note that it means that autoscan, seeing
! # CC etc. in the Makefile, will ask for an AC_PROG_CC use...
! 
! 
! 
! # _AM_DEPENDENCIES(NAME)
! # ----------------------
! # See how the compiler implements dependency checking.
! # NAME is "CC", "CXX", "GCJ", or "OBJC".
! # We try a few techniques and use that to set a single cache variable.
! #
! # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
! # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
! # dependency, and given that the user is not expected to run this macro,
! # just rely on AC_PROG_CC.
! AC_DEFUN([_AM_DEPENDENCIES],
! [AC_REQUIRE([AM_SET_DEPDIR])dnl
! AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
! AC_REQUIRE([AM_MAKE_INCLUDE])dnl
! AC_REQUIRE([AM_DEP_TRACK])dnl
! 
! ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
!        [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
!        [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
!        [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
!                    [depcc="$$1"   am_compiler_list=])
! 
! AC_CACHE_CHECK([dependency style of $depcc],
!                [am_cv_$1_dependencies_compiler_type],
! [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
!   # We make a subdir and do the tests there.  Otherwise we can end up
!   # making bogus files that we don't know about and never remove.  For
!   # instance it was reported that on HP-UX the gcc test will end up
!   # making a dummy file named `D' -- because `-MD' means `put the output
!   # in D'.
!   mkdir conftest.dir
!   # Copy depcomp to subdir because otherwise we won't find it if we're
!   # using a relative directory.
!   cp "$am_depcomp" conftest.dir
!   cd conftest.dir
!   # We will build objects and dependencies in a subdirectory because
!   # it helps to detect inapplicable dependency modes.  For instance
!   # both Tru64's cc and ICC support -MD to output dependencies as a
!   # side effect of compilation, but ICC will put the dependencies in
!   # the current directory while Tru64 will put them in the object
!   # directory.
!   mkdir sub
! 
!   am_cv_$1_dependencies_compiler_type=none
!   if test "$am_compiler_list" = ""; then
!      am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
    fi
+   for depmode in $am_compiler_list; do
+     # Setup a source with many dependencies, because some compilers
+     # like to wrap large dependency lists on column 80 (with \), and
+     # we should not choose a depcomp mode which is confused by this.
+     #
+     # We need to recreate these files for each test, as the compiler may
+     # overwrite some of them when testing with obscure command lines.
+     # This happens at least with the AIX C compiler.
+     : > sub/conftest.c
+     for i in 1 2 3 4 5 6; do
+       echo '#include "conftst'$i'.h"' >> sub/conftest.c
+       # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+       # Solaris 8's {/usr,}/bin/sh.
+       touch sub/conftst$i.h
+     done
+     echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+ 
+     case $depmode in
+     nosideeffect)
+       # after this tag, mechanisms are not by side-effect, so they'll
+       # only be used when explicitly requested
+       if test "x$enable_dependency_tracking" = xyes; then
+ 	continue
+       else
+ 	break
+       fi
+       ;;
+     none) break ;;
+     esac
+     # We check with `-c' and `-o' for the sake of the "dashmstdout"
+     # mode.  It turns out that the SunPro C++ compiler does not properly
+     # handle `-M -o', and we need to detect this.
+     if depmode=$depmode \
+        source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+        depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+        $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+          >/dev/null 2>conftest.err &&
+        grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+        grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+        ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+       # icc doesn't choke on unknown options, it will just issue warnings
+       # or remarks (even with -Werror).  So we grep stderr for any message
+       # that says an option was ignored or not supported.
+       # When given -MP, icc 7.0 and 7.1 complain thusly:
+       #   icc: Command line warning: ignoring option '-M'; no argument required
+       # The diagnosis changed in icc 8.0:
+       #   icc: Command line remark: option '-MP' not supported
+       if (grep 'ignoring option' conftest.err ||
+           grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+         am_cv_$1_dependencies_compiler_type=$depmode
+         break
+       fi
+     fi
+   done
+ 
+   cd ..
+   rm -rf conftest.dir
  else
!   am_cv_$1_dependencies_compiler_type=none
  fi
! ])
! AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
! AM_CONDITIONAL([am__fastdep$1], [
!   test "x$enable_dependency_tracking" != xno \
!   && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
! ])
! 
! 
! # AM_SET_DEPDIR
! # -------------
! # Choose a directory name for dependency files.
! # This macro is AC_REQUIREd in _AM_DEPENDENCIES
! AC_DEFUN([AM_SET_DEPDIR],
! [AC_REQUIRE([AM_SET_LEADING_DOT])dnl
! AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
! ])
! 
! 
! # AM_DEP_TRACK
! # ------------
! AC_DEFUN([AM_DEP_TRACK],
! [AC_ARG_ENABLE(dependency-tracking,
! [  --disable-dependency-tracking  speeds up one-time build
!   --enable-dependency-tracking   do not reject slow dependency extractors])
! if test "x$enable_dependency_tracking" != xno; then
!   am_depcomp="$ac_aux_dir/depcomp"
!   AMDEPBACKSLASH='\'
  fi
+ AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+ AC_SUBST([AMDEPBACKSLASH])
+ ])
  
! # Generate code to set up dependency tracking.   -*- Autoconf -*-
  
! # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
! #   Free Software Foundation, Inc.
  
! # This program is free software; you can redistribute it and/or modify
! # it under the terms of the GNU General Public License as published by
! # the Free Software Foundation; either version 2, or (at your option)
! # any later version.
  
! # This program is distributed in the hope that it will be useful,
! # but WITHOUT ANY WARRANTY; without even the implied warranty of
! # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! # GNU General Public License for more details.
  
! # You should have received a copy of the GNU General Public License
! # along with this program; if not, write to the Free Software
! # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
! # 02111-1307, USA.
  
! #serial 2
  
! # _AM_OUTPUT_DEPENDENCY_COMMANDS
! # ------------------------------
! AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
! [for mf in $CONFIG_FILES; do
!   # Strip MF so we end up with the name of the file.
!   mf=`echo "$mf" | sed -e 's/:.*$//'`
!   # Check whether this is an Automake generated Makefile or not.
!   # We used to match only the files named `Makefile.in', but
!   # some people rename them; so instead we look at the file content.
!   # Grep'ing the first line is not enough: some people post-process
!   # each Makefile.in and add a new line on top of each file to say so.
!   # So let's grep whole file.
!   if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
!     dirpart=`AS_DIRNAME("$mf")`
    else
!     continue
    fi
!   # Extract the definition of DEPDIR, am__include, and am__quote
!   # from the Makefile without running `make'.
!   DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
!   test -z "$DEPDIR" && continue
!   am__include=`sed -n 's/^am__include = //p' < "$mf"`
!   test -z "am__include" && continue
!   am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
!   # When using ansi2knr, U may be empty or an underscore; expand it
!   U=`sed -n 's/^U = //p' < "$mf"`
!   # Find all dependency output files, they are included files with
!   # $(DEPDIR) in their names.  We invoke sed twice because it is the
!   # simplest approach to changing $(DEPDIR) to its actual value in the
!   # expansion.
!   for file in `sed -n "
!     s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
!        sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
!     # Make sure the directory exists.
!     test -f "$dirpart/$file" && continue
!     fdir=`AS_DIRNAME(["$file"])`
!     AS_MKDIR_P([$dirpart/$fdir])
!     # echo "creating $dirpart/$file"
!     echo '# dummy' > "$dirpart/$file"
!   done
! done
! ])# _AM_OUTPUT_DEPENDENCY_COMMANDS
! 
! 
! # AM_OUTPUT_DEPENDENCY_COMMANDS
! # -----------------------------
! # This macro should only be invoked once -- use via AC_REQUIRE.
! #
! # This code is only required when automatic dependency tracking
! # is enabled.  FIXME.  This creates each `.P' file that we will
! # need in order to bootstrap the dependency handling code.
! AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
! [AC_CONFIG_COMMANDS([depfiles],
!      [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
!      [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
  ])
  
! # Do all the work for Automake.                            -*- Autoconf -*-
  
! # This macro actually does too much some checks are only needed if
! # your package does certain things.  But this isn't really a big deal.
  
! # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
! # Free Software Foundation, Inc.
  
! # This program is free software; you can redistribute it and/or modify
! # it under the terms of the GNU General Public License as published by
! # the Free Software Foundation; either version 2, or (at your option)
! # any later version.
! 
! # This program is distributed in the hope that it will be useful,
! # but WITHOUT ANY WARRANTY; without even the implied warranty of
! # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! # GNU General Public License for more details.
! 
! # You should have received a copy of the GNU General Public License
! # along with this program; if not, write to the Free Software
! # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
! # 02111-1307, USA.
! 
! # serial 11
! 
! # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
! # AM_INIT_AUTOMAKE([OPTIONS])
! # -----------------------------------------------
! # The call with PACKAGE and VERSION arguments is the old style
! # call (pre autoconf-2.50), which is being phased out.  PACKAGE
! # and VERSION should now be passed to AC_INIT and removed from
! # the call to AM_INIT_AUTOMAKE.
! # We support both call styles for the transition.  After
! # the next Automake release, Autoconf can make the AC_INIT
! # arguments mandatory, and then we can depend on a new Autoconf
! # release and drop the old call support.
! AC_DEFUN([AM_INIT_AUTOMAKE],
! [AC_PREREQ([2.58])dnl
! dnl Autoconf wants to disallow AM_ names.  We explicitly allow
! dnl the ones we care about.
! m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
! AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
! AC_REQUIRE([AC_PROG_INSTALL])dnl
! # test to see if srcdir already configured
! if test "`cd $srcdir && pwd`" != "`pwd`" &&
!    test -f $srcdir/config.status; then
!   AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
! fi
! 
! # test whether we have cygpath
! if test -z "$CYGPATH_W"; then
!   if (cygpath --version) >/dev/null 2>/dev/null; then
!     CYGPATH_W='cygpath -w'
    else
!     CYGPATH_W=echo
    fi
+ fi
+ AC_SUBST([CYGPATH_W])
+ 
+ # Define the identity of the package.
+ dnl Distinguish between old-style and new-style calls.
+ m4_ifval([$2],
+ [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+  AC_SUBST([PACKAGE], [$1])dnl
+  AC_SUBST([VERSION], [$2])],
+ [_AM_SET_OPTIONS([$1])dnl
+  AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+  AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+ 
+ _AM_IF_OPTION([no-define],,
+ [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+  AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+ 
+ # Some tools Automake needs.
+ AC_REQUIRE([AM_SANITY_CHECK])dnl
+ AC_REQUIRE([AC_ARG_PROGRAM])dnl
+ AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+ AM_MISSING_PROG(AUTOCONF, autoconf)
+ AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+ AM_MISSING_PROG(AUTOHEADER, autoheader)
+ AM_MISSING_PROG(MAKEINFO, makeinfo)
+ AM_PROG_INSTALL_SH
+ AM_PROG_INSTALL_STRIP
+ AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+ # We need awk for the "check" target.  The system "awk" is bad on
+ # some platforms.
+ AC_REQUIRE([AC_PROG_AWK])dnl
+ AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+ AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+ _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+               [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+ 	      		     [_AM_PROG_TAR([v7])])])
+ _AM_IF_OPTION([no-dependencies],,
+ [AC_PROVIDE_IFELSE([AC_PROG_CC],
+                   [_AM_DEPENDENCIES(CC)],
+                   [define([AC_PROG_CC],
+                           defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+ AC_PROVIDE_IFELSE([AC_PROG_CXX],
+                   [_AM_DEPENDENCIES(CXX)],
+                   [define([AC_PROG_CXX],
+                           defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+ ])
+ ])
+ 
+ 
+ # When config.status generates a header, we must update the stamp-h file.
+ # This file resides in the same directory as the config header
+ # that is generated.  The stamp files are numbered to have different names.
+ 
+ # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+ # loop where config.status creates the headers, so we can generate
+ # our stamp files there.
+ AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+ [# Compute $1's index in $config_headers.
+ _am_stamp_count=1
+ for _am_header in $config_headers :; do
+   case $_am_header in
+     $1 | $1:* )
+       break ;;
+     * )
+       _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+   esac
+ done
+ echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
+ 
+ # AM_PROG_INSTALL_SH
+ # ------------------
+ # Define $install_sh.
+ 
+ # Copyright (C) 2001, 2003 Free Software Foundation, Inc.
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2, or (at your option)
+ # any later version.
+ 
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ # GNU General Public License for more details.
+ 
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ # 02111-1307, USA.
+ 
+ AC_DEFUN([AM_PROG_INSTALL_SH],
+ [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+ install_sh=${install_sh-"$am_aux_dir/install-sh"}
+ AC_SUBST(install_sh)])
+ 
+ #                                                          -*- Autoconf -*-
+ # Copyright (C) 2003  Free Software Foundation, Inc.
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2, or (at your option)
+ # any later version.
+ 
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ # GNU General Public License for more details.
+ 
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ # 02111-1307, USA.
+ 
+ # serial 1
+ 
+ # Check whether the underlying file-system supports filenames
+ # with a leading dot.  For instance MS-DOS doesn't.
+ AC_DEFUN([AM_SET_LEADING_DOT],
+ [rm -rf .tst 2>/dev/null
+ mkdir .tst 2>/dev/null
+ if test -d .tst; then
+   am__leading_dot=.
  else
!   am__leading_dot=_
  fi
+ rmdir .tst 2>/dev/null
+ AC_SUBST([am__leading_dot])])
+ 
+ # Add --enable-maintainer-mode option to configure.
+ # From Jim Meyering
+ 
+ # Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004
+ # Free Software Foundation, Inc.
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2, or (at your option)
+ # any later version.
+ 
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ # GNU General Public License for more details.
+ 
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ # 02111-1307, USA.
+ 
+ # serial 3
+ 
+ AC_DEFUN([AM_MAINTAINER_MODE],
+ [AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+   dnl maintainer-mode is disabled by default
+   AC_ARG_ENABLE(maintainer-mode,
+ [  --enable-maintainer-mode  enable make rules and dependencies not useful
+ 			  (and sometimes confusing) to the casual installer],
+       USE_MAINTAINER_MODE=$enableval,
+       USE_MAINTAINER_MODE=no)
+   AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+   AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes])
+   MAINT=$MAINTAINER_MODE_TRUE
+   AC_SUBST(MAINT)dnl
+ ]
+ )
+ 
+ AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
+ 
+ # Check to see how 'make' treats includes.	-*- Autoconf -*-
+ 
+ # Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2, or (at your option)
+ # any later version.
+ 
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ # GNU General Public License for more details.
+ 
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ # 02111-1307, USA.
+ 
+ # serial 2
+ 
+ # AM_MAKE_INCLUDE()
+ # -----------------
+ # Check to see how make treats includes.
+ AC_DEFUN([AM_MAKE_INCLUDE],
+ [am_make=${MAKE-make}
+ cat > confinc << 'END'
+ am__doit:
+ 	@echo done
+ .PHONY: am__doit
+ END
+ # If we don't find an include directive, just comment out the code.
+ AC_MSG_CHECKING([for style of include used by $am_make])
+ am__include="#"
+ am__quote=
+ _am_result=none
+ # First try GNU make style include.
+ echo "include confinc" > confmf
+ # We grep out `Entering directory' and `Leaving directory'
+ # messages which can occur if `w' ends up in MAKEFLAGS.
+ # In particular we don't look at `^make:' because GNU make might
+ # be invoked under some other name (usually "gmake"), in which
+ # case it prints its new name instead of `make'.
+ if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+    am__include=include
+    am__quote=
+    _am_result=GNU
+ fi
+ # Now try BSD make style include.
+ if test "$am__include" = "#"; then
+    echo '.include "confinc"' > confmf
+    if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+       am__include=.include
+       am__quote="\""
+       _am_result=BSD
+    fi
+ fi
+ AC_SUBST([am__include])
+ AC_SUBST([am__quote])
+ AC_MSG_RESULT([$_am_result])
+ rm -f confinc confmf
  ])
  
! # serial 2
  
! # AM_PROG_CC_C_O
! # --------------
! # Like AC_PROG_CC_C_O, but changed for automake.
  
! # Copyright (C) 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
  
! # This program is free software; you can redistribute it and/or modify
! # it under the terms of the GNU General Public License as published by
! # the Free Software Foundation; either version 2, or (at your option)
! # any later version.
  
! # This program is distributed in the hope that it will be useful,
! # but WITHOUT ANY WARRANTY; without even the implied warranty of
! # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! # GNU General Public License for more details.
  
! # You should have received a copy of the GNU General Public License
! # along with this program; if not, write to the Free Software
! # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
! # 02111-1307, USA.
! 
! AC_DEFUN([AM_PROG_CC_C_O],
! [AC_REQUIRE([AC_PROG_CC_C_O])dnl
! AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
! # FIXME: we rely on the cache variable name because
! # there is no other way.
! set dummy $CC
! ac_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']`
! if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" != yes"; then
!    # Losing compiler, so override with the script.
!    # FIXME: It is wrong to rewrite CC.
!    # But if we don't then we get into trouble of one sort or another.
!    # A longer-term fix would be to have automake use am__CC in this case,
!    # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
!    CC="$am_aux_dir/compile $CC"
  fi
+ ])
  
! #  -*- Autoconf -*-
  
  
! # Copyright (C) 1997, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
  
! # This program is free software; you can redistribute it and/or modify
! # it under the terms of the GNU General Public License as published by
! # the Free Software Foundation; either version 2, or (at your option)
! # any later version.
  
! # This program is distributed in the hope that it will be useful,
! # but WITHOUT ANY WARRANTY; without even the implied warranty of
! # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! # GNU General Public License for more details.
  
! # You should have received a copy of the GNU General Public License
! # along with this program; if not, write to the Free Software
! # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
! # 02111-1307, USA.
  
! # serial 3
  
! # AM_MISSING_PROG(NAME, PROGRAM)
! # ------------------------------
! AC_DEFUN([AM_MISSING_PROG],
! [AC_REQUIRE([AM_MISSING_HAS_RUN])
! $1=${$1-"${am_missing_run}$2"}
! AC_SUBST($1)])
  
  
! # AM_MISSING_HAS_RUN
! # ------------------
! # Define MISSING if not defined so far and test if it supports --run.
! # If it does, set am_missing_run to use it, otherwise, to nothing.
! AC_DEFUN([AM_MISSING_HAS_RUN],
! [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
! test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
! # Use eval to expand $SHELL
! if eval "$MISSING --run true"; then
!   am_missing_run="$MISSING --run "
! else
!   am_missing_run=
!   AC_MSG_WARN([`missing' script is too old or missing])
! fi
! ])
  
! # AM_PROG_MKDIR_P
! # ---------------
! # Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise.
! 
! # Copyright (C) 2003, 2004 Free Software Foundation, Inc.
! 
! # This program is free software; you can redistribute it and/or modify
! # it under the terms of the GNU General Public License as published by
! # the Free Software Foundation; either version 2, or (at your option)
! # any later version.
! 
! # This program is distributed in the hope that it will be useful,
! # but WITHOUT ANY WARRANTY; without even the implied warranty of
! # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! # GNU General Public License for more details.
! 
! # You should have received a copy of the GNU General Public License
! # along with this program; if not, write to the Free Software
! # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
! # 02111-1307, USA.
! 
! # Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories
! # created by `make install' are always world readable, even if the
! # installer happens to have an overly restrictive umask (e.g. 077).
! # This was a mistake.  There are at least two reasons why we must not
! # use `-m 0755':
! #   - it causes special bits like SGID to be ignored,
! #   - it may be too restrictive (some setups expect 775 directories).
! #
! # Do not use -m 0755 and let people choose whatever they expect by
! # setting umask.
! #
! # We cannot accept any implementation of `mkdir' that recognizes `-p'.
! # Some implementations (such as Solaris 8's) are not thread-safe: if a
! # parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c'
! # concurrently, both version can detect that a/ is missing, but only
! # one can create it and the other will error out.  Consequently we
! # restrict ourselves to GNU make (using the --version option ensures
! # this.)
! AC_DEFUN([AM_PROG_MKDIR_P],
! [if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
!   # We used to keeping the `.' as first argument, in order to
!   # allow $(mkdir_p) to be used without argument.  As in
!   #   $(mkdir_p) $(somedir)
!   # where $(somedir) is conditionally defined.  However this is wrong
!   # for two reasons:
!   #  1. if the package is installed by a user who cannot write `.'
!   #     make install will fail,
!   #  2. the above comment should most certainly read
!   #     $(mkdir_p) $(DESTDIR)$(somedir)
!   #     so it does not work when $(somedir) is undefined and
!   #     $(DESTDIR) is not.
!   #  To support the latter case, we have to write
!   #     test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
!   #  so the `.' trick is pointless.
!   mkdir_p='mkdir -p --'
! else
!   # On NextStep and OpenStep, the `mkdir' command does not
!   # recognize any option.  It will interpret all options as
!   # directories to create, and then abort because `.' already
!   # exists.
!   for d in ./-p ./--version;
!   do
!     test -d $d && rmdir $d
!   done
!   # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
!   if test -f "$ac_aux_dir/mkinstalldirs"; then
!     mkdir_p='$(mkinstalldirs)'
!   else
!     mkdir_p='$(install_sh) -d'
!   fi
  fi
! AC_SUBST([mkdir_p])])
! 
! # Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004
! # Free Software Foundation, Inc.
! 
! # This program is free software; you can redistribute it and/or modify
! # it under the terms of the GNU General Public License as published by
! # the Free Software Foundation; either version 2, or (at your option)
! # any later version.
! 
! # This program is distributed in the hope that it will be useful,
! # but WITHOUT ANY WARRANTY; without even the implied warranty of
! # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! # GNU General Public License for more details.
! 
! # You should have received a copy of the GNU General Public License
! # along with this program; if not, write to the Free Software
! # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
! # 02111-1307, USA.
! 
! # serial 4
! 
! # AM_ENABLE_MULTILIB([MAKEFILE], [REL-TO-TOP-SRCDIR])
! # ---------------------------------------------------
! # Add --enable-multilib to configure.
! AC_DEFUN([AM_ENABLE_MULTILIB],
! [# Default to --enable-multilib
! AC_ARG_ENABLE(multilib,
! [  --enable-multilib       build many library versions (default)],
! [case "$enableval" in
!   yes) multilib=yes ;;
!   no)  multilib=no ;;
!   *)   AC_MSG_ERROR([bad value $enableval for multilib option]) ;;
!  esac],
! 	      [multilib=yes])
! 
! # We may get other options which we leave undocumented:
! # --with-target-subdir, --with-multisrctop, --with-multisubdir
! # See config-ml.in if you want the gory details.
! 
! if test "$srcdir" = "."; then
!   if test "$with_target_subdir" != "."; then
!     multi_basedir="$srcdir/$with_multisrctop../$2"
!   else
!     multi_basedir="$srcdir/$with_multisrctop$2"
!   fi
! else
!   multi_basedir="$srcdir/$2"
! fi
! AC_SUBST(multi_basedir)
! 
! AC_OUTPUT_COMMANDS([
! # Only add multilib support code if we just rebuilt the top-level
! # Makefile.
! case " $CONFIG_FILES " in
!  *" ]m4_default([$1],Makefile)[ "*)
!    ac_file=]m4_default([$1],Makefile)[ . ${multi_basedir}/config-ml.in
!    ;;
! esac],
! 		   [
! srcdir="$srcdir"
! host="$host"
! target="$target"
! with_multisubdir="$with_multisubdir"
! with_multisrctop="$with_multisrctop"
! with_target_subdir="$with_target_subdir"
! ac_configure_args="${multilib_arg} ${ac_configure_args}"
! multi_basedir="$multi_basedir"
! CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
! CC="$CC"])])dnl
! 
! # Helper functions for option handling.                    -*- Autoconf -*-
! 
! # Copyright (C) 2001, 2002, 2003  Free Software Foundation, Inc.
! 
! # This program is free software; you can redistribute it and/or modify
! # it under the terms of the GNU General Public License as published by
! # the Free Software Foundation; either version 2, or (at your option)
! # any later version.
! 
! # This program is distributed in the hope that it will be useful,
! # but WITHOUT ANY WARRANTY; without even the implied warranty of
! # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! # GNU General Public License for more details.
! 
! # You should have received a copy of the GNU General Public License
! # along with this program; if not, write to the Free Software
! # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
! # 02111-1307, USA.
! 
! # serial 2
! 
! # _AM_MANGLE_OPTION(NAME)
! # -----------------------
! AC_DEFUN([_AM_MANGLE_OPTION],
! [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
! 
! # _AM_SET_OPTION(NAME)
! # ------------------------------
! # Set option NAME.  Presently that only means defining a flag for this option.
! AC_DEFUN([_AM_SET_OPTION],
! [m4_define(_AM_MANGLE_OPTION([$1]), 1)])
! 
! # _AM_SET_OPTIONS(OPTIONS)
! # ----------------------------------
! # OPTIONS is a space-separated list of Automake options.
! AC_DEFUN([_AM_SET_OPTIONS],
! [AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
! 
! # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
! # -------------------------------------------
! # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
! AC_DEFUN([_AM_IF_OPTION],
! [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
  
  #
  # Check to make sure that the build environment is sane.
  #
  
! # Copyright (C) 1996, 1997, 2000, 2001, 2003 Free Software Foundation, Inc.
! 
! # This program is free software; you can redistribute it and/or modify
! # it under the terms of the GNU General Public License as published by
! # the Free Software Foundation; either version 2, or (at your option)
! # any later version.
! 
! # This program is distributed in the hope that it will be useful,
! # but WITHOUT ANY WARRANTY; without even the implied warranty of
! # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! # GNU General Public License for more details.
! 
! # You should have received a copy of the GNU General Public License
! # along with this program; if not, write to the Free Software
! # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
! # 02111-1307, USA.
! 
! # serial 3
! 
! # AM_SANITY_CHECK
! # ---------------
! AC_DEFUN([AM_SANITY_CHECK],
  [AC_MSG_CHECKING([whether build environment is sane])
  # Just in case
  sleep 1
! echo timestamp > conftest.file
  # Do `set' in a subshell so we don't clobber the current shell's
  # arguments.  Must try -L first in case configure is actually a
  # symlink; some systems play weird games with the mod time of symlinks
  # (eg FreeBSD returns the mod time of the symlink's containing
  # directory).
  if (
!    set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
!    if test "$[*]" = "X"; then
        # -L didn't work.
!       set X `ls -t $srcdir/configure conftest.file`
     fi
!    rm -f conftest.file
!    if test "$[*]" != "X $srcdir/configure conftest.file" \
!       && test "$[*]" != "X conftest.file $srcdir/configure"; then
  
        # If neither matched, then we have a broken ls.  This can happen
        # if, for instance, CONFIG_SHELL is bash and it inherits a
*************** if (
*** 266,272 ****
  alias in your environment])
     fi
  
!    test "[$]2" = conftestfile
     )
  then
     # Ok.
--- 1009,1015 ----
  alias in your environment])
     fi
  
!    test "$[2]" = conftest.file
     )
  then
     # Ok.
*************** else
*** 275,329 ****
     AC_MSG_ERROR([newly created file is older than distributed files!
  Check your system clock])
  fi
- rm -f conftest*
  AC_MSG_RESULT(yes)])
  
! dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)
! dnl The program must properly implement --version.
! AC_DEFUN(AM_MISSING_PROG,
! [AC_MSG_CHECKING(for working $2)
! # Run test in a subshell; some versions of sh will print an error if
! # an executable is not found, even if stderr is redirected.
! # Redirect stdin to placate older versions of autoconf.  Sigh.
! if ($2 --version) < /dev/null > /dev/null 2>&1; then
!    $1=$2
!    AC_MSG_RESULT(found)
! else
!    $1="$3/missing $2"
!    AC_MSG_RESULT(missing)
  fi
! AC_SUBST($1)])
  
! # Add --enable-maintainer-mode option to configure.
! # From Jim Meyering
  
  # serial 1
  
- AC_DEFUN(AM_MAINTAINER_MODE,
- [AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
-   dnl maintainer-mode is disabled by default
-   AC_ARG_ENABLE(maintainer-mode,
- [  --enable-maintainer-mode enable make rules and dependencies not useful
-                           (and sometimes confusing) to the casual installer],
-       USE_MAINTAINER_MODE=$enableval,
-       USE_MAINTAINER_MODE=no)
-   AC_MSG_RESULT($USE_MAINTAINER_MODE)
-   AM_CONDITIONAL(MAINTAINER_MODE, test $USE_MAINTAINER_MODE = yes)
-   MAINT=$MAINTAINER_MODE_TRUE
-   AC_SUBST(MAINT)dnl
- ]
- )
  
! # Define a conditional.
  
! AC_DEFUN(AM_CONDITIONAL,
! [AC_SUBST($1_TRUE)
! AC_SUBST($1_FALSE)
! if $2; then
!   $1_TRUE=
!   $1_FALSE='#'
! else
!   $1_TRUE='#'
!   $1_FALSE=
! fi])
  
--- 1018,1172 ----
     AC_MSG_ERROR([newly created file is older than distributed files!
  Check your system clock])
  fi
  AC_MSG_RESULT(yes)])
  
! # AM_PROG_INSTALL_STRIP
! 
! # Copyright (C) 2001, 2003 Free Software Foundation, Inc.
! 
! # This program is free software; you can redistribute it and/or modify
! # it under the terms of the GNU General Public License as published by
! # the Free Software Foundation; either version 2, or (at your option)
! # any later version.
! 
! # This program is distributed in the hope that it will be useful,
! # but WITHOUT ANY WARRANTY; without even the implied warranty of
! # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! # GNU General Public License for more details.
! 
! # You should have received a copy of the GNU General Public License
! # along with this program; if not, write to the Free Software
! # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
! # 02111-1307, USA.
! 
! # One issue with vendor `install' (even GNU) is that you can't
! # specify the program used to strip binaries.  This is especially
! # annoying in cross-compiling environments, where the build's strip
! # is unlikely to handle the host's binaries.
! # Fortunately install-sh will honor a STRIPPROG variable, so we
! # always use install-sh in `make install-strip', and initialize
! # STRIPPROG with the value of the STRIP variable (set by the user).
! AC_DEFUN([AM_PROG_INSTALL_STRIP],
! [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
! # Installed binaries are usually stripped using `strip' when the user
! # run `make install-strip'.  However `strip' might not be the right
! # tool to use in cross-compilation environments, therefore Automake
! # will honor the `STRIP' environment variable to overrule this program.
! dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
! if test "$cross_compiling" != no; then
!   AC_CHECK_TOOL([STRIP], [strip], :)
  fi
! INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
! AC_SUBST([INSTALL_STRIP_PROGRAM])])
  
! # Check how to create a tarball.                            -*- Autoconf -*-
! 
! # Copyright (C) 2004  Free Software Foundation, Inc.
! 
! # This program is free software; you can redistribute it and/or modify
! # it under the terms of the GNU General Public License as published by
! # the Free Software Foundation; either version 2, or (at your option)
! # any later version.
! 
! # This program is distributed in the hope that it will be useful,
! # but WITHOUT ANY WARRANTY; without even the implied warranty of
! # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! # GNU General Public License for more details.
! 
! # You should have received a copy of the GNU General Public License
! # along with this program; if not, write to the Free Software
! # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
! # 02111-1307, USA.
  
  # serial 1
  
  
! # _AM_PROG_TAR(FORMAT)
! # --------------------
! # Check how to create a tarball in format FORMAT.
! # FORMAT should be one of `v7', `ustar', or `pax'.
! #
! # Substitute a variable $(am__tar) that is a command
! # writing to stdout a FORMAT-tarball containing the directory
! # $tardir.
! #     tardir=directory && $(am__tar) > result.tar
! #
! # Substitute a variable $(am__untar) that extract such
! # a tarball read from stdin.
! #     $(am__untar) < result.tar
! AC_DEFUN([_AM_PROG_TAR],
! [# Always define AMTAR for backward compatibility.
! AM_MISSING_PROG([AMTAR], [tar])
! m4_if([$1], [v7],
!      [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
!      [m4_case([$1], [ustar],, [pax],,
!               [m4_fatal([Unknown tar format])])
! AC_MSG_CHECKING([how to create a $1 tar archive])
! # Loop over all known methods to create a tar archive until one works.
! _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
! _am_tools=${am_cv_prog_tar_$1-$_am_tools}
! # Do not fold the above two line into one, because Tru64 sh and
! # Solaris sh will not grok spaces in the rhs of `-'.
! for _am_tool in $_am_tools
! do
!   case $_am_tool in
!   gnutar)
!     for _am_tar in tar gnutar gtar;
!     do
!       AM_RUN_LOG([$_am_tar --version]) && break
!     done
!     am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
!     am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
!     am__untar="$_am_tar -xf -"
!     ;;
!   plaintar)
!     # Must skip GNU tar: if it does not support --format= it doesn't create
!     # ustar tarball either.
!     (tar --version) >/dev/null 2>&1 && continue
!     am__tar='tar chf - "$$tardir"'
!     am__tar_='tar chf - "$tardir"'
!     am__untar='tar xf -'
!     ;;
!   pax)
!     am__tar='pax -L -x $1 -w "$$tardir"'
!     am__tar_='pax -L -x $1 -w "$tardir"'
!     am__untar='pax -r'
!     ;;
!   cpio)
!     am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
!     am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
!     am__untar='cpio -i -H $1 -d'
!     ;;
!   none)
!     am__tar=false
!     am__tar_=false
!     am__untar=false
!     ;;
!   esac
  
!   # If the value was cached, stop now.  We just wanted to have am__tar
!   # and am__untar set.
!   test -n "${am_cv_prog_tar_$1}" && break
  
+   # tar/untar a dummy directory, and stop if the command works
+   rm -rf conftest.dir
+   mkdir conftest.dir
+   echo GrepMe > conftest.dir/file
+   AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+   rm -rf conftest.dir
+   if test -s conftest.tar; then
+     AM_RUN_LOG([$am__untar <conftest.tar])
+     grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+   fi
+ done
+ rm -rf conftest.dir
+ 
+ AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+ AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+ AC_SUBST([am__tar])
+ AC_SUBST([am__untar])
+ ]) # _AM_PROG_TAR
+ 
+ m4_include([../config/acx.m4])
+ m4_include([../config/no-executables.m4])
+ m4_include([../libtool.m4])
diff -Nrcpad gcc-3.4.3/boehm-gc/aix_irix_threads.c gcc-4.0.0/boehm-gc/aix_irix_threads.c
*** gcc-3.4.3/boehm-gc/aix_irix_threads.c	Mon Jul 28 03:46:08 2003
--- gcc-4.0.0/boehm-gc/aix_irix_threads.c	Mon Aug 23 21:40:17 2004
***************
*** 26,34 ****
   * as a base instead.
   */
  
  # if defined(GC_IRIX_THREADS) || defined(GC_AIX_THREADS)
  
- # include "private/gc_priv.h"
  # include <pthread.h>
  # include <assert.h>
  # include <semaphore.h>
--- 26,35 ----
   * as a base instead.
   */
  
+ # include "private/gc_priv.h"
+ 
  # if defined(GC_IRIX_THREADS) || defined(GC_AIX_THREADS)
  
  # include <pthread.h>
  # include <assert.h>
  # include <semaphore.h>
*************** void GC_thr_init()
*** 422,433 ****
      struct sigaction act;
  
      if (GC_thr_initialized) return;
- #if 0
-     /* unfortunately, GC_init_inner calls us without the lock, so
-      * this assertion is not always true. */
-     /* Why doesn't GC_init_inner hold the lock? - HB		*/
      GC_ASSERT(I_HOLD_LOCK());
- #endif
      GC_thr_initialized = TRUE;
  #ifndef GC_AIX_THREADS
      (void) sigaction(SIG_SUSPEND, 0, &act);
--- 423,429 ----
diff -Nrcpad gcc-3.4.3/boehm-gc/allchblk.c gcc-4.0.0/boehm-gc/allchblk.c
*** gcc-3.4.3/boehm-gc/allchblk.c	Mon Jul 28 04:18:20 2003
--- gcc-4.0.0/boehm-gc/allchblk.c	Wed Feb  9 21:33:01 2005
*************** void GC_print_hblkfreelist()
*** 111,117 ****
      for (i = 0; i <= N_HBLK_FLS; ++i) {
        h = GC_hblkfreelist[i];
  #     ifdef USE_MUNMAP
!         if (0 != h) GC_printf1("Free list %ld (Total size %ld):\n",
  		               (unsigned long)i);
  #     else
          if (0 != h) GC_printf2("Free list %ld (Total size %ld):\n",
--- 111,117 ----
      for (i = 0; i <= N_HBLK_FLS; ++i) {
        h = GC_hblkfreelist[i];
  #     ifdef USE_MUNMAP
!         if (0 != h) GC_printf1("Free list %ld:\n",
  		               (unsigned long)i);
  #     else
          if (0 != h) GC_printf2("Free list %ld (Total size %ld):\n",
*************** void GC_print_hblkfreelist()
*** 133,142 ****
          h = hhdr -> hb_next;
        }
      }
!     if (total_free != GC_large_free_bytes) {
  	GC_printf1("GC_large_free_bytes = %lu (INCONSISTENT!!)\n",
  		   (unsigned long) GC_large_free_bytes);
!     }
      GC_printf1("Total of %lu bytes on free list\n", (unsigned long)total_free);
  }
  
--- 133,144 ----
          h = hhdr -> hb_next;
        }
      }
! #   ifndef USE_MUNMAP
!       if (total_free != GC_large_free_bytes) {
  	GC_printf1("GC_large_free_bytes = %lu (INCONSISTENT!!)\n",
  		   (unsigned long) GC_large_free_bytes);
!       }
! #   endif
      GC_printf1("Total of %lu bytes on free list\n", (unsigned long)total_free);
  }
  
*************** void GC_dump_regions()
*** 181,187 ****
  	    hhdr = HDR(p);
  	    GC_printf1("\t0x%lx ", (unsigned long)p);
  	    if (IS_FORWARDING_ADDR_OR_NIL(hhdr)) {
! 		GC_printf1("Missing header!!\n", hhdr);
  		p += HBLKSIZE;
  		continue;
  	    }
--- 183,189 ----
  	    hhdr = HDR(p);
  	    GC_printf1("\t0x%lx ", (unsigned long)p);
  	    if (IS_FORWARDING_ADDR_OR_NIL(hhdr)) {
! 		GC_printf1("Missing header!!(%ld)\n", hhdr);
  		p += HBLKSIZE;
  		continue;
  	    }
*************** void GC_unmap_old(void)
*** 375,383 ****
  	if (!IS_MAPPED(hhdr)) continue;
  	threshold = (unsigned short)(GC_gc_no - UNMAP_THRESHOLD);
  	last_rec = hhdr -> hb_last_reclaimed;
! 	if (last_rec > GC_gc_no
! 	    || last_rec < threshold && threshold < GC_gc_no
! 				       /* not recently wrapped */) {
            sz = hhdr -> hb_sz;
  	  GC_unmap((ptr_t)h, sz);
  	  hhdr -> hb_flags |= WAS_UNMAPPED;
--- 377,384 ----
  	if (!IS_MAPPED(hhdr)) continue;
  	threshold = (unsigned short)(GC_gc_no - UNMAP_THRESHOLD);
  	last_rec = hhdr -> hb_last_reclaimed;
! 	if ((last_rec > GC_gc_no || last_rec < threshold)
! 	    && threshold < GC_gc_no /* not recently wrapped */) {
            sz = hhdr -> hb_sz;
  	  GC_unmap((ptr_t)h, sz);
  	  hhdr -> hb_flags |= WAS_UNMAPPED;
*************** void GC_merge_unmapped(void)
*** 422,427 ****
--- 423,429 ----
  	      } else {
  		GC_remap((ptr_t)h, size);
  		hhdr -> hb_flags &= ~WAS_UNMAPPED;
+ 		hhdr -> hb_last_reclaimed = nexthdr -> hb_last_reclaimed;
  	      }
  	    } else {
  	      /* Unmap any gap in the middle */
*************** int index;
*** 468,474 ****
      if (total_size == bytes) return h;
      rest = (struct hblk *)((word)h + bytes);
      rest_hdr = GC_install_header(rest);
!     if (0 == rest_hdr) return(0);
      rest_hdr -> hb_sz = total_size - bytes;
      rest_hdr -> hb_flags = 0;
  #   ifdef GC_ASSERTIONS
--- 470,480 ----
      if (total_size == bytes) return h;
      rest = (struct hblk *)((word)h + bytes);
      rest_hdr = GC_install_header(rest);
!     if (0 == rest_hdr) {
! 	/* This may be very bad news ... */
! 	WARN("Header allocation failed: Dropping block.\n", 0);
! 	return(0);
!     }
      rest_hdr -> hb_sz = total_size - bytes;
      rest_hdr -> hb_flags = 0;
  #   ifdef GC_ASSERTIONS
*************** int n;
*** 584,591 ****
  	    GET_HDR(hbp, hhdr);
  	    size_avail = hhdr->hb_sz;
  	    if (size_avail < size_needed) continue;
! 	    if (!GC_use_entire_heap
! 		&& size_avail != size_needed
  		&& USED_HEAP_SIZE >= GC_requested_heapsize
  		&& !TRUE_INCREMENTAL && GC_should_collect()) {
  #		ifdef USE_MUNMAP
--- 590,598 ----
  	    GET_HDR(hbp, hhdr);
  	    size_avail = hhdr->hb_sz;
  	    if (size_avail < size_needed) continue;
! 	    if (size_avail != size_needed
! 		&& !GC_use_entire_heap
! 		&& !GC_dont_gc
  		&& USED_HEAP_SIZE >= GC_requested_heapsize
  		&& !TRUE_INCREMENTAL && GC_should_collect()) {
  #		ifdef USE_MUNMAP
*************** int n;
*** 602,608 ****
  		    /* If we are deallocating lots of memory from	*/
  		    /* finalizers, fail and collect sooner rather	*/
  		    /* than later.					*/
! 		    if (GC_finalizer_mem_freed > (GC_heapsize >> 4))  {
  		      continue;
  		    }
  #		endif /* !USE_MUNMAP */
--- 609,616 ----
  		    /* If we are deallocating lots of memory from	*/
  		    /* finalizers, fail and collect sooner rather	*/
  		    /* than later.					*/
! 		    if (WORDS_TO_BYTES(GC_finalizer_mem_freed)
! 			> (GC_heapsize >> 4))  {
  		      continue;
  		    }
  #		endif /* !USE_MUNMAP */
*************** int n;
*** 692,698 ****
  	              struct hblk * h;
  		      struct hblk * prev = hhdr -> hb_prev;
  	              
! 		      GC_words_wasted += total_size;
  		      GC_large_free_bytes -= total_size;
  		      GC_remove_from_fl(hhdr, n);
  	              for (h = hbp; h < limit; h++) {
--- 700,706 ----
  	              struct hblk * h;
  		      struct hblk * prev = hhdr -> hb_prev;
  	              
! 		      GC_words_wasted += BYTES_TO_WORDS(total_size);
  		      GC_large_free_bytes -= total_size;
  		      GC_remove_from_fl(hhdr, n);
  	              for (h = hbp; h < limit; h++) {
*************** signed_word size;
*** 784,789 ****
--- 792,800 ----
      size = HBLKSIZE * OBJ_SZ_TO_BLOCKS(size);
      GC_remove_counts(hbp, (word)size);
      hhdr->hb_sz = size;
+ #   ifdef USE_MUNMAP
+       hhdr -> hb_last_reclaimed = GC_gc_no;
+ #   endif
      
      /* Check for duplicate deallocation in the easy case */
        if (HBLK_IS_FREE(hhdr)) {
*************** signed_word size;
*** 809,819 ****
--- 820,836 ----
  	if (IS_MAPPED(prevhdr)) {
  	  GC_remove_from_fl(prevhdr, FL_UNKNOWN);
  	  prevhdr -> hb_sz += hhdr -> hb_sz;
+ #	  ifdef USE_MUNMAP
+ 	    prevhdr -> hb_last_reclaimed = GC_gc_no;
+ #	  endif
  	  GC_remove_header(hbp);
  	  hbp = prev;
  	  hhdr = prevhdr;
  	}
        }
+     /* FIXME: It is not clear we really always want to do these merges	*/
+     /* with -DUSE_MUNMAP, since it updates ages and hence prevents	*/
+     /* unmapping. 							*/
  
      GC_large_free_bytes += size;
      GC_add_to_fl(hbp, hhdr);    
diff -Nrcpad gcc-3.4.3/boehm-gc/alloc.c gcc-4.0.0/boehm-gc/alloc.c
*** gcc-3.4.3/boehm-gc/alloc.c	Mon Jul 28 04:18:20 2003
--- gcc-4.0.0/boehm-gc/alloc.c	Sat Aug 28 00:41:39 2004
*************** word GC_free_space_divisor = 3;
*** 104,111 ****
  extern GC_bool GC_collection_in_progress();
  		/* Collection is in progress, or was abandoned.	*/
  
- extern GC_bool GC_print_back_height;
- 
  int GC_never_stop_func GC_PROTO((void)) { return(0); }
  
  unsigned long GC_time_limit = TIME_LIMIT;
--- 104,109 ----
*************** int GC_n_attempts = 0;		/* Number of att
*** 126,132 ****
      unsigned long time_diff;
      
      if ((count++ & 3) != 0) return(0);
- #ifndef NO_CLOCK
      GET_TIME(current_time);
      time_diff = MS_TIME_DIFF(current_time,GC_start_time);
      if (time_diff >= GC_time_limit) {
--- 124,129 ----
*************** int GC_n_attempts = 0;		/* Number of att
*** 134,145 ****
  	  if (GC_print_stats) {
  	    GC_printf0("Abandoning stopped marking after ");
  	    GC_printf1("%lu msecs", (unsigned long)time_diff);
! 	    GC_printf1("(attempt %d)\n", (unsigned long) GC_n_attempts);
  	  }
  #	endif
      	return(1);
      }
- #endif
      return(0);
    }
  #endif /* !SMALL_CONFIG */
--- 131,141 ----
  	  if (GC_print_stats) {
  	    GC_printf0("Abandoning stopped marking after ");
  	    GC_printf1("%lu msecs", (unsigned long)time_diff);
! 	    GC_printf1("(attempt %ld)\n", (unsigned long) GC_n_attempts);
  	  }
  #	endif
      	return(1);
      }
      return(0);
    }
  #endif /* !SMALL_CONFIG */
*************** void GC_clear_a_few_frames()
*** 230,239 ****
      for (i = 0; i < NWORDS; i++) frames[i] = 0;
  }
  
  /* Have we allocated enough to amortize a collection? */
  GC_bool GC_should_collect()
  {
!     return(GC_adj_words_allocd() >= min_words_allocd());
  }
  
  
--- 226,240 ----
      for (i = 0; i < NWORDS; i++) frames[i] = 0;
  }
  
+ /* Heap size at which we need a collection to avoid expanding past	*/
+ /* limits used by blacklisting.						*/
+ static word GC_collect_at_heapsize = (word)(-1);
+ 
  /* Have we allocated enough to amortize a collection? */
  GC_bool GC_should_collect()
  {
!     return(GC_adj_words_allocd() >= min_words_allocd()
! 	   || GC_heapsize >= GC_collect_at_heapsize);
  }
  
  
*************** word n;
*** 926,950 ****
  #	endif
        }
  #   endif
!     expansion_slop = 8 * WORDS_TO_BYTES(min_words_allocd());
!     if (5 * HBLKSIZE * MAXHINCR > expansion_slop) {
!         expansion_slop = 5 * HBLKSIZE * MAXHINCR;
!     }
      if (GC_last_heap_addr == 0 && !((word)space & SIGNB)
          || GC_last_heap_addr != 0 && GC_last_heap_addr < (ptr_t)space) {
          /* Assume the heap is growing up */
          GC_greatest_plausible_heap_addr =
!             GC_max(GC_greatest_plausible_heap_addr,
!                    (ptr_t)space + bytes + expansion_slop);
      } else {
          /* Heap is growing down */
          GC_least_plausible_heap_addr =
!             GC_min(GC_least_plausible_heap_addr,
!                    (ptr_t)space - expansion_slop);
      }
      GC_prev_heap_addr = GC_last_heap_addr;
      GC_last_heap_addr = (ptr_t)space;
      GC_add_to_heap(space, bytes);
      return(TRUE);
  }
  
--- 927,963 ----
  #	endif
        }
  #   endif
!     expansion_slop = WORDS_TO_BYTES(min_words_allocd()) + 4*MAXHINCR*HBLKSIZE;
      if (GC_last_heap_addr == 0 && !((word)space & SIGNB)
          || GC_last_heap_addr != 0 && GC_last_heap_addr < (ptr_t)space) {
          /* Assume the heap is growing up */
          GC_greatest_plausible_heap_addr =
!             (GC_PTR)GC_max((ptr_t)GC_greatest_plausible_heap_addr,
!                            (ptr_t)space + bytes + expansion_slop);
      } else {
          /* Heap is growing down */
          GC_least_plausible_heap_addr =
!             (GC_PTR)GC_min((ptr_t)GC_least_plausible_heap_addr,
!                            (ptr_t)space - expansion_slop);
      }
+ #   if defined(LARGE_CONFIG)
+       if (((ptr_t)GC_greatest_plausible_heap_addr <= (ptr_t)space + bytes
+            || (ptr_t)GC_least_plausible_heap_addr >= (ptr_t)space)
+ 	  && GC_heapsize > 0) {
+ 	/* GC_add_to_heap will fix this, but ... */
+ 	WARN("Too close to address space limit: blacklisting ineffective\n", 0);
+       }
+ #   endif
      GC_prev_heap_addr = GC_last_heap_addr;
      GC_last_heap_addr = (ptr_t)space;
      GC_add_to_heap(space, bytes);
+     /* Force GC before we are likely to allocate past expansion_slop */
+       GC_collect_at_heapsize =
+ 	  GC_heapsize + expansion_slop - 2*MAXHINCR*HBLKSIZE;
+ #     if defined(LARGE_CONFIG)
+         if (GC_collect_at_heapsize < GC_heapsize /* wrapped */)
+ 	  GC_collect_at_heapsize = (word)(-1);
+ #     endif
      return(TRUE);
  }
  
diff -Nrcpad gcc-3.4.3/boehm-gc/backgraph.c gcc-4.0.0/boehm-gc/backgraph.c
*** gcc-3.4.3/boehm-gc/backgraph.c	Mon Jul 28 04:18:20 2003
--- gcc-4.0.0/boehm-gc/backgraph.c	Sat Aug 28 00:41:40 2004
***************
*** 24,29 ****
--- 24,31 ----
   * a growing space leak.
   */
  
+ #include "gc.h"	/* For configuration information. */
+ 
  #ifdef MAKE_BACK_GRAPH
  
  #define MAX_IN	10	/* Maximum in-degree we handle directly */
*************** static back_edges * new_back_edges(void)
*** 85,91 ****
  {
    if (0 == back_edge_space) {
      back_edge_space = (back_edges *)
! 	    		sbrk(MAX_BACK_EDGE_STRUCTS*sizeof(back_edges));
    }
    if (0 != avail_back_edges) {
      back_edges * result = avail_back_edges;
--- 87,93 ----
  {
    if (0 == back_edge_space) {
      back_edge_space = (back_edges *)
! 	    		GET_MEM(MAX_BACK_EDGE_STRUCTS*sizeof(back_edges));
    }
    if (0 != avail_back_edges) {
      back_edges * result = avail_back_edges;
*************** static void deallocate_back_edges(back_e
*** 113,129 ****
  /* Table of objects that are currently on the depth-first search	*/
  /* stack.  Only objects with in-degree one are in this table.		*/
  /* Other objects are identified using HEIGHT_IN_PROGRESS.		*/
! /* This data structure NEEDS IMPROVEMENT.				*/
! #define MAX_IN_PROGRESS 10000
  static ptr_t * in_progress_space = 0;
! static int n_in_progress = 0;
  
  static void push_in_progress(ptr_t p)
  {
    if (in_progress_space == 0)
!       in_progress_space = sbrk(MAX_IN_PROGRESS * sizeof(ptr_t));
!   if (n_in_progress == MAX_IN_PROGRESS)
!       ABORT("Exceeded MAX_IN_PROGRESS");
    in_progress_space[n_in_progress++] = p;
  }
  
--- 115,145 ----
  /* Table of objects that are currently on the depth-first search	*/
  /* stack.  Only objects with in-degree one are in this table.		*/
  /* Other objects are identified using HEIGHT_IN_PROGRESS.		*/
! /* FIXME: This data structure NEEDS IMPROVEMENT.			*/
! #define INITIAL_IN_PROGRESS 10000
  static ptr_t * in_progress_space = 0;
! static size_t in_progress_size = 0;
! static size_t n_in_progress = 0;
  
  static void push_in_progress(ptr_t p)
  {
+   if (n_in_progress >= in_progress_size) 
+     if (in_progress_size == 0) {
+       in_progress_size = INITIAL_IN_PROGRESS;
+       in_progress_space = (ptr_t *)GET_MEM(in_progress_size * sizeof(ptr_t));
+     } else {
+       ptr_t * new_in_progress_space;
+       in_progress_size *= 2;
+       new_in_progress_space = (ptr_t *)
+ 	      			GET_MEM(in_progress_size * sizeof(ptr_t));
+       BCOPY(in_progress_space, new_in_progress_space,
+ 	    n_in_progress * sizeof(ptr_t));
+       in_progress_space = new_in_progress_space;
+       /* FIXME: This just drops the old space.	*/
+     }
    if (in_progress_space == 0)
!       ABORT("MAKE_BACK_GRAPH: Out of in-progress space: "
! 	    "Huge linear data structure?");
    in_progress_space[n_in_progress++] = p;
  }
  
*************** static void add_back_edges(ptr_t p, word
*** 318,325 ****
    }
  }
  
! /* Rebuild the reprentation of the backward reachability graph.	*/
! /* Does not examine mark bits.  Can be called before GC.	*/
  void GC_build_back_graph(void)
  {
    GC_apply_to_each_object(add_back_edges);
--- 334,341 ----
    }
  }
  
! /* Rebuild the representation of the backward reachability graph.	*/
! /* Does not examine mark bits.  Can be called before GC.		*/
  void GC_build_back_graph(void)
  {
    GC_apply_to_each_object(add_back_edges);
*************** static void update_max_height(ptr_t p, w
*** 424,438 ****
    }
  }
  
  void GC_traverse_back_graph(void)
  {
-   static word max_max_height = 0;
    GC_max_height = 0;
    GC_apply_to_each_object(update_max_height);
    GC_printf2("Maximum backwards height of reachable objects at GC %lu is %ld\n",
  	     (unsigned long) GC_gc_no, GC_max_height);
!   if (GC_max_height > max_max_height) {
!     max_max_height = GC_max_height;
      GC_printf0("The following unreachable object is last in a longest chain "
  	       "of unreachable objects:\n");
      GC_print_heap_obj(GC_deepest_obj);
--- 440,459 ----
    }
  }
  
+ word GC_max_max_height = 0;
+ 
  void GC_traverse_back_graph(void)
  {
    GC_max_height = 0;
    GC_apply_to_each_object(update_max_height);
+ }
+ 
+ void GC_print_back_graph_stats(void)
+ {
    GC_printf2("Maximum backwards height of reachable objects at GC %lu is %ld\n",
  	     (unsigned long) GC_gc_no, GC_max_height);
!   if (GC_max_height > GC_max_max_height) {
!     GC_max_max_height = GC_max_height;
      GC_printf0("The following unreachable object is last in a longest chain "
  	       "of unreachable objects:\n");
      GC_print_heap_obj(GC_deepest_obj);
diff -Nrcpad gcc-3.4.3/boehm-gc/checksums.c gcc-4.0.0/boehm-gc/checksums.c
*** gcc-3.4.3/boehm-gc/checksums.c	Fri Aug 17 18:30:45 2001
--- gcc-4.0.0/boehm-gc/checksums.c	Fri Aug 13 23:05:29 2004
***************
*** 13,26 ****
  /* Boehm, March 29, 1995 12:51 pm PST */
  # ifdef CHECKSUMS
  
! # include "gc_priv.h"
  
  /* This is debugging code intended to verify the results of dirty bit	*/
  /* computations. Works only in a single threaded environment.		*/
  /* We assume that stubborn objects are changed only when they are 	*/
  /* enabled for writing.  (Certain kinds of writing are actually		*/
  /* safe under other conditions.)					*/
! # define NSUMS 2000
  
  # define OFFSET 0x10000
  
--- 13,26 ----
  /* Boehm, March 29, 1995 12:51 pm PST */
  # ifdef CHECKSUMS
  
! # include "private/gc_priv.h"
  
  /* This is debugging code intended to verify the results of dirty bit	*/
  /* computations. Works only in a single threaded environment.		*/
  /* We assume that stubborn objects are changed only when they are 	*/
  /* enabled for writing.  (Certain kinds of writing are actually		*/
  /* safe under other conditions.)					*/
! # define NSUMS 10000
  
  # define OFFSET 0x10000
  
*************** typedef struct {
*** 29,35 ****
  	word old_sum;
  	word new_sum;
  	struct hblk * block;	/* Block to which this refers + OFFSET  */
! 				/* to hide it from colector.		*/
  } page_entry;
  
  page_entry GC_sums [NSUMS];
--- 29,35 ----
  	word old_sum;
  	word new_sum;
  	struct hblk * block;	/* Block to which this refers + OFFSET  */
! 				/* to hide it from collector.		*/
  } page_entry;
  
  page_entry GC_sums [NSUMS];
*************** int index;
*** 76,87 ****
  {
      page_entry *pe = GC_sums + index;
      register hdr * hhdr = HDR(h);
      
      if (pe -> block != 0 && pe -> block != h + OFFSET) ABORT("goofed");
      pe -> old_sum = pe -> new_sum;
      pe -> new_sum = GC_checksum(h);
  #   if !defined(MSWIN32) && !defined(MSWINCE)
!         if (pe -> new_sum != 0 && !GC_page_was_ever_dirty(h)) {
              GC_printf1("GC_page_was_ever_dirty(0x%lx) is wrong\n",
          	       (unsigned long)h);
          }
--- 76,88 ----
  {
      page_entry *pe = GC_sums + index;
      register hdr * hhdr = HDR(h);
+     struct hblk *b;
      
      if (pe -> block != 0 && pe -> block != h + OFFSET) ABORT("goofed");
      pe -> old_sum = pe -> new_sum;
      pe -> new_sum = GC_checksum(h);
  #   if !defined(MSWIN32) && !defined(MSWINCE)
!         if (pe -> new_sum != 0x80000000 && !GC_page_was_ever_dirty(h)) {
              GC_printf1("GC_page_was_ever_dirty(0x%lx) is wrong\n",
          	       (unsigned long)h);
          }
*************** int index;
*** 91,103 ****
      } else {
      	GC_n_clean++;
      }
!     if (pe -> new_valid && pe -> old_sum != pe -> new_sum) {
      	if (!GC_page_was_dirty(h) || !GC_page_was_ever_dirty(h)) {
      	    /* Set breakpoint here */GC_n_dirty_errors++;
      	}
  #	ifdef STUBBORN_ALLOC
!     	  if (!IS_FORWARDING_ADDR_OR_NIL(hhdr)
!     	    && hhdr -> hb_map != GC_invalid_map
      	    && hhdr -> hb_obj_kind == STUBBORN
      	    && !GC_page_was_changed(h)
      	    && !GC_on_free_list(h)) {
--- 92,110 ----
      } else {
      	GC_n_clean++;
      }
!     b = h;
!     while (IS_FORWARDING_ADDR_OR_NIL(hhdr) && hhdr != 0) {
! 	b -= (word)hhdr;
! 	hhdr = HDR(b);
!     }
!     if (pe -> new_valid
! 	&& hhdr != 0 && hhdr -> hb_descr != 0 /* may contain pointers */
! 	&& pe -> old_sum != pe -> new_sum) {
      	if (!GC_page_was_dirty(h) || !GC_page_was_ever_dirty(h)) {
      	    /* Set breakpoint here */GC_n_dirty_errors++;
      	}
  #	ifdef STUBBORN_ALLOC
!     	  if ( hhdr -> hb_map != GC_invalid_map
      	    && hhdr -> hb_obj_kind == STUBBORN
      	    && !GC_page_was_changed(h)
      	    && !GC_on_free_list(h)) {
*************** word dummy;
*** 120,145 ****
     register hdr * hhdr = HDR(h);
     register bytes = WORDS_TO_BYTES(hhdr -> hb_sz);
     
!    bytes += HDR_BYTES + HBLKSIZE-1;
     bytes &= ~(HBLKSIZE-1);
     GC_bytes_in_used_blocks += bytes;
  }
  
  void GC_check_blocks()
  {
!     word bytes_in_free_blocks = 0;
!     struct hblk * h = GC_hblkfreelist;
!     hdr * hhdr = HDR(h);
!     word sz;
      
      GC_bytes_in_used_blocks = 0;
      GC_apply_to_all_blocks(GC_add_block, (word)0);
-     while (h != 0) {
-         sz = hhdr -> hb_sz;
-         bytes_in_free_blocks += sz;
-         h = hhdr -> hb_next;
-         hhdr = HDR(h);
-     }
      GC_printf2("GC_bytes_in_used_blocks = %ld, bytes_in_free_blocks = %ld ",
      		GC_bytes_in_used_blocks, bytes_in_free_blocks);
      GC_printf1("GC_heapsize = %ld\n", GC_heapsize);
--- 127,143 ----
     register hdr * hhdr = HDR(h);
     register bytes = WORDS_TO_BYTES(hhdr -> hb_sz);
     
!    bytes += HBLKSIZE-1;
     bytes &= ~(HBLKSIZE-1);
     GC_bytes_in_used_blocks += bytes;
  }
  
  void GC_check_blocks()
  {
!     word bytes_in_free_blocks = GC_large_free_bytes;
      
      GC_bytes_in_used_blocks = 0;
      GC_apply_to_all_blocks(GC_add_block, (word)0);
      GC_printf2("GC_bytes_in_used_blocks = %ld, bytes_in_free_blocks = %ld ",
      		GC_bytes_in_used_blocks, bytes_in_free_blocks);
      GC_printf1("GC_heapsize = %ld\n", GC_heapsize);
diff -Nrcpad gcc-3.4.3/boehm-gc/config.guess gcc-4.0.0/boehm-gc/config.guess
*** gcc-3.4.3/boehm-gc/config.guess	Sun Feb 22 14:43:48 2004
--- gcc-4.0.0/boehm-gc/config.guess	Thu Jan  1 00:00:00 1970
***************
*** 1,1450 ****
- #! /bin/sh
- # Attempt to guess a canonical system name.
- #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- #   2000, 2001, 2002, 2003 Free Software Foundation, Inc.
- 
- timestamp='2004-02-16'
- 
- # This file is free software; you can redistribute it and/or modify it
- # under the terms of the GNU General Public License as published by
- # the Free Software Foundation; either version 2 of the License, or
- # (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful, but
- # WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- # General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program; if not, write to the Free Software
- # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- #
- # As a special exception to the GNU General Public License, if you
- # distribute this file as part of a program that contains a
- # configuration script generated by Autoconf, you may include it under
- # the same distribution terms that you use for the rest of that program.
- 
- # Originally written by Per Bothner <per@bothner.com>.
- # Please send patches to <config-patches@gnu.org>.  Submit a context
- # diff and a properly formatted ChangeLog entry.
- #
- # This script attempts to guess a canonical system name similar to
- # config.sub.  If it succeeds, it prints the system name on stdout, and
- # exits with 0.  Otherwise, it exits with 1.
- #
- # The plan is that this can be called by configure scripts if you
- # don't specify an explicit build system type.
- 
- me=`echo "$0" | sed -e 's,.*/,,'`
- 
- usage="\
- Usage: $0 [OPTION]
- 
- Output the configuration name of the system \`$me' is run on.
- 
- Operation modes:
-   -h, --help         print this help, then exit
-   -t, --time-stamp   print date of last modification, then exit
-   -v, --version      print version number, then exit
- 
- Report bugs and patches to <config-patches@gnu.org>."
- 
- version="\
- GNU config.guess ($timestamp)
- 
- Originally written by Per Bothner.
- Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
- Free Software Foundation, Inc.
- 
- This is free software; see the source for copying conditions.  There is NO
- warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
- 
- help="
- Try \`$me --help' for more information."
- 
- # Parse command line
- while test $# -gt 0 ; do
-   case $1 in
-     --time-stamp | --time* | -t )
-        echo "$timestamp" ; exit 0 ;;
-     --version | -v )
-        echo "$version" ; exit 0 ;;
-     --help | --h* | -h )
-        echo "$usage"; exit 0 ;;
-     -- )     # Stop option processing
-        shift; break ;;
-     - )	# Use stdin as input.
-        break ;;
-     -* )
-        echo "$me: invalid option $1$help" >&2
-        exit 1 ;;
-     * )
-        break ;;
-   esac
- done
- 
- if test $# != 0; then
-   echo "$me: too many arguments$help" >&2
-   exit 1
- fi
- 
- trap 'exit 1' 1 2 15
- 
- # CC_FOR_BUILD -- compiler used by this script. Note that the use of a
- # compiler to aid in system detection is discouraged as it requires
- # temporary files to be created and, as you can see below, it is a
- # headache to deal with in a portable fashion.
- 
- # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
- # use `HOST_CC' if defined, but it is deprecated.
- 
- # Portable tmp directory creation inspired by the Autoconf team.
- 
- set_cc_for_build='
- trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
- trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
- : ${TMPDIR=/tmp} ;
-  { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
-  { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
-  { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
-  { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
- dummy=$tmp/dummy ;
- tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
- case $CC_FOR_BUILD,$HOST_CC,$CC in
-  ,,)    echo "int x;" > $dummy.c ;
- 	for c in cc gcc c89 c99 ; do
- 	  if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
- 	     CC_FOR_BUILD="$c"; break ;
- 	  fi ;
- 	done ;
- 	if test x"$CC_FOR_BUILD" = x ; then
- 	  CC_FOR_BUILD=no_compiler_found ;
- 	fi
- 	;;
-  ,,*)   CC_FOR_BUILD=$CC ;;
-  ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
- esac ;'
- 
- # This is needed to find uname on a Pyramid OSx when run in the BSD universe.
- # (ghazi@noc.rutgers.edu 1994-08-24)
- if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
- 	PATH=$PATH:/.attbin ; export PATH
- fi
- 
- UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
- UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
- UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
- UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
- 
- # Note: order is significant - the case branches are not exclusive.
- 
- case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
-     *:NetBSD:*:*)
- 	# NetBSD (nbsd) targets should (where applicable) match one or
- 	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
- 	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
- 	# switched to ELF, *-*-netbsd* would select the old
- 	# object file format.  This provides both forward
- 	# compatibility and a consistent mechanism for selecting the
- 	# object file format.
- 	#
- 	# Note: NetBSD doesn't particularly care about the vendor
- 	# portion of the name.  We always set it to "unknown".
- 	sysctl="sysctl -n hw.machine_arch"
- 	UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
- 	    /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
- 	case "${UNAME_MACHINE_ARCH}" in
- 	    armeb) machine=armeb-unknown ;;
- 	    arm*) machine=arm-unknown ;;
- 	    sh3el) machine=shl-unknown ;;
- 	    sh3eb) machine=sh-unknown ;;
- 	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
- 	esac
- 	# The Operating System including object format, if it has switched
- 	# to ELF recently, or will in the future.
- 	case "${UNAME_MACHINE_ARCH}" in
- 	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
- 		eval $set_cc_for_build
- 		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
- 			| grep __ELF__ >/dev/null
- 		then
- 		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
- 		    # Return netbsd for either.  FIX?
- 		    os=netbsd
- 		else
- 		    os=netbsdelf
- 		fi
- 		;;
- 	    *)
- 	        os=netbsd
- 		;;
- 	esac
- 	# The OS release
- 	# Debian GNU/NetBSD machines have a different userland, and
- 	# thus, need a distinct triplet. However, they do not need
- 	# kernel version information, so it can be replaced with a
- 	# suitable tag, in the style of linux-gnu.
- 	case "${UNAME_VERSION}" in
- 	    Debian*)
- 		release='-gnu'
- 		;;
- 	    *)
- 		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
- 		;;
- 	esac
- 	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
- 	# contains redundant information, the shorter form:
- 	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- 	echo "${machine}-${os}${release}"
- 	exit 0 ;;
-     amd64:OpenBSD:*:*)
- 	echo x86_64-unknown-openbsd${UNAME_RELEASE}
- 	exit 0 ;;
-     amiga:OpenBSD:*:*)
- 	echo m68k-unknown-openbsd${UNAME_RELEASE}
- 	exit 0 ;;
-     arc:OpenBSD:*:*)
- 	echo mipsel-unknown-openbsd${UNAME_RELEASE}
- 	exit 0 ;;
-     cats:OpenBSD:*:*)
- 	echo arm-unknown-openbsd${UNAME_RELEASE}
- 	exit 0 ;;
-     hp300:OpenBSD:*:*)
- 	echo m68k-unknown-openbsd${UNAME_RELEASE}
- 	exit 0 ;;
-     mac68k:OpenBSD:*:*)
- 	echo m68k-unknown-openbsd${UNAME_RELEASE}
- 	exit 0 ;;
-     macppc:OpenBSD:*:*)
- 	echo powerpc-unknown-openbsd${UNAME_RELEASE}
- 	exit 0 ;;
-     mvme68k:OpenBSD:*:*)
- 	echo m68k-unknown-openbsd${UNAME_RELEASE}
- 	exit 0 ;;
-     mvme88k:OpenBSD:*:*)
- 	echo m88k-unknown-openbsd${UNAME_RELEASE}
- 	exit 0 ;;
-     mvmeppc:OpenBSD:*:*)
- 	echo powerpc-unknown-openbsd${UNAME_RELEASE}
- 	exit 0 ;;
-     pegasos:OpenBSD:*:*)
- 	echo powerpc-unknown-openbsd${UNAME_RELEASE}
- 	exit 0 ;;
-     pmax:OpenBSD:*:*)
- 	echo mipsel-unknown-openbsd${UNAME_RELEASE}
- 	exit 0 ;;
-     sgi:OpenBSD:*:*)
- 	echo mipseb-unknown-openbsd${UNAME_RELEASE}
- 	exit 0 ;;
-     sun3:OpenBSD:*:*)
- 	echo m68k-unknown-openbsd${UNAME_RELEASE}
- 	exit 0 ;;
-     wgrisc:OpenBSD:*:*)
- 	echo mipsel-unknown-openbsd${UNAME_RELEASE}
- 	exit 0 ;;
-     *:OpenBSD:*:*)
- 	echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
- 	exit 0 ;;
-     *:ekkoBSD:*:*)
- 	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
- 	exit 0 ;;
-     macppc:MirBSD:*:*)
- 	echo powerppc-unknown-mirbsd${UNAME_RELEASE}
- 	exit 0 ;;
-     *:MirBSD:*:*)
- 	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
- 	exit 0 ;;
-     alpha:OSF1:*:*)
- 	if test $UNAME_RELEASE = "V4.0"; then
- 		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
- 	fi
- 	# According to Compaq, /usr/sbin/psrinfo has been available on
- 	# OSF/1 and Tru64 systems produced since 1995.  I hope that
- 	# covers most systems running today.  This code pipes the CPU
- 	# types through head -n 1, so we only detect the type of CPU 0.
- 	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
- 	case "$ALPHA_CPU_TYPE" in
- 	    "EV4 (21064)")
- 		UNAME_MACHINE="alpha" ;;
- 	    "EV4.5 (21064)")
- 		UNAME_MACHINE="alpha" ;;
- 	    "LCA4 (21066/21068)")
- 		UNAME_MACHINE="alpha" ;;
- 	    "EV5 (21164)")
- 		UNAME_MACHINE="alphaev5" ;;
- 	    "EV5.6 (21164A)")
- 		UNAME_MACHINE="alphaev56" ;;
- 	    "EV5.6 (21164PC)")
- 		UNAME_MACHINE="alphapca56" ;;
- 	    "EV5.7 (21164PC)")
- 		UNAME_MACHINE="alphapca57" ;;
- 	    "EV6 (21264)")
- 		UNAME_MACHINE="alphaev6" ;;
- 	    "EV6.7 (21264A)")
- 		UNAME_MACHINE="alphaev67" ;;
- 	    "EV6.8CB (21264C)")
- 		UNAME_MACHINE="alphaev68" ;;
- 	    "EV6.8AL (21264B)")
- 		UNAME_MACHINE="alphaev68" ;;
- 	    "EV6.8CX (21264D)")
- 		UNAME_MACHINE="alphaev68" ;;
- 	    "EV6.9A (21264/EV69A)")
- 		UNAME_MACHINE="alphaev69" ;;
- 	    "EV7 (21364)")
- 		UNAME_MACHINE="alphaev7" ;;
- 	    "EV7.9 (21364A)")
- 		UNAME_MACHINE="alphaev79" ;;
- 	esac
- 	# A Vn.n version is a released version.
- 	# A Tn.n version is a released field test version.
- 	# A Xn.n version is an unreleased experimental baselevel.
- 	# 1.2 uses "1.2" for uname -r.
- 	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- 	exit 0 ;;
-     Alpha*:OpenVMS:*:*)
- 	echo alpha-hp-vms
- 	exit 0 ;;
-     Alpha\ *:Windows_NT*:*)
- 	# How do we know it's Interix rather than the generic POSIX subsystem?
- 	# Should we change UNAME_MACHINE based on the output of uname instead
- 	# of the specific Alpha model?
- 	echo alpha-pc-interix
- 	exit 0 ;;
-     21064:Windows_NT:50:3)
- 	echo alpha-dec-winnt3.5
- 	exit 0 ;;
-     Amiga*:UNIX_System_V:4.0:*)
- 	echo m68k-unknown-sysv4
- 	exit 0;;
-     *:[Aa]miga[Oo][Ss]:*:*)
- 	echo ${UNAME_MACHINE}-unknown-amigaos
- 	exit 0 ;;
-     *:[Mm]orph[Oo][Ss]:*:*)
- 	echo ${UNAME_MACHINE}-unknown-morphos
- 	exit 0 ;;
-     *:OS/390:*:*)
- 	echo i370-ibm-openedition
- 	exit 0 ;;
-     *:OS400:*:*)
-         echo powerpc-ibm-os400
- 	exit 0 ;;
-     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
- 	echo arm-acorn-riscix${UNAME_RELEASE}
- 	exit 0;;
-     SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
- 	echo hppa1.1-hitachi-hiuxmpp
- 	exit 0;;
-     Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
- 	# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
- 	if test "`(/bin/universe) 2>/dev/null`" = att ; then
- 		echo pyramid-pyramid-sysv3
- 	else
- 		echo pyramid-pyramid-bsd
- 	fi
- 	exit 0 ;;
-     NILE*:*:*:dcosx)
- 	echo pyramid-pyramid-svr4
- 	exit 0 ;;
-     DRS?6000:unix:4.0:6*)
- 	echo sparc-icl-nx6
- 	exit 0 ;;
-     DRS?6000:UNIX_SV:4.2*:7*)
- 	case `/usr/bin/uname -p` in
- 	    sparc) echo sparc-icl-nx7 && exit 0 ;;
- 	esac ;;
-     sun4H:SunOS:5.*:*)
- 	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- 	exit 0 ;;
-     sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
- 	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- 	exit 0 ;;
-     i86pc:SunOS:5.*:*)
- 	echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- 	exit 0 ;;
-     sun4*:SunOS:6*:*)
- 	# According to config.sub, this is the proper way to canonicalize
- 	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
- 	# it's likely to be more like Solaris than SunOS4.
- 	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- 	exit 0 ;;
-     sun4*:SunOS:*:*)
- 	case "`/usr/bin/arch -k`" in
- 	    Series*|S4*)
- 		UNAME_RELEASE=`uname -v`
- 		;;
- 	esac
- 	# Japanese Language versions have a version number like `4.1.3-JL'.
- 	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
- 	exit 0 ;;
-     sun3*:SunOS:*:*)
- 	echo m68k-sun-sunos${UNAME_RELEASE}
- 	exit 0 ;;
-     sun*:*:4.2BSD:*)
- 	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
- 	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
- 	case "`/bin/arch`" in
- 	    sun3)
- 		echo m68k-sun-sunos${UNAME_RELEASE}
- 		;;
- 	    sun4)
- 		echo sparc-sun-sunos${UNAME_RELEASE}
- 		;;
- 	esac
- 	exit 0 ;;
-     aushp:SunOS:*:*)
- 	echo sparc-auspex-sunos${UNAME_RELEASE}
- 	exit 0 ;;
-     # The situation for MiNT is a little confusing.  The machine name
-     # can be virtually everything (everything which is not
-     # "atarist" or "atariste" at least should have a processor
-     # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
-     # to the lowercase version "mint" (or "freemint").  Finally
-     # the system name "TOS" denotes a system which is actually not
-     # MiNT.  But MiNT is downward compatible to TOS, so this should
-     # be no problem.
-     atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
-         echo m68k-atari-mint${UNAME_RELEASE}
- 	exit 0 ;;
-     atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
- 	echo m68k-atari-mint${UNAME_RELEASE}
-         exit 0 ;;
-     *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
-         echo m68k-atari-mint${UNAME_RELEASE}
- 	exit 0 ;;
-     milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
-         echo m68k-milan-mint${UNAME_RELEASE}
-         exit 0 ;;
-     hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
-         echo m68k-hades-mint${UNAME_RELEASE}
-         exit 0 ;;
-     *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
-         echo m68k-unknown-mint${UNAME_RELEASE}
-         exit 0 ;;
-     m68k:machten:*:*)
- 	echo m68k-apple-machten${UNAME_RELEASE}
- 	exit 0 ;;
-     powerpc:machten:*:*)
- 	echo powerpc-apple-machten${UNAME_RELEASE}
- 	exit 0 ;;
-     RISC*:Mach:*:*)
- 	echo mips-dec-mach_bsd4.3
- 	exit 0 ;;
-     RISC*:ULTRIX:*:*)
- 	echo mips-dec-ultrix${UNAME_RELEASE}
- 	exit 0 ;;
-     VAX*:ULTRIX*:*:*)
- 	echo vax-dec-ultrix${UNAME_RELEASE}
- 	exit 0 ;;
-     2020:CLIX:*:* | 2430:CLIX:*:*)
- 	echo clipper-intergraph-clix${UNAME_RELEASE}
- 	exit 0 ;;
-     mips:*:*:UMIPS | mips:*:*:RISCos)
- 	eval $set_cc_for_build
- 	sed 's/^	//' << EOF >$dummy.c
- #ifdef __cplusplus
- #include <stdio.h>  /* for printf() prototype */
- 	int main (int argc, char *argv[]) {
- #else
- 	int main (argc, argv) int argc; char *argv[]; {
- #endif
- 	#if defined (host_mips) && defined (MIPSEB)
- 	#if defined (SYSTYPE_SYSV)
- 	  printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
- 	#endif
- 	#if defined (SYSTYPE_SVR4)
- 	  printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
- 	#endif
- 	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
- 	  printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
- 	#endif
- 	#endif
- 	  exit (-1);
- 	}
- EOF
- 	$CC_FOR_BUILD -o $dummy $dummy.c \
- 	  && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
- 	  && exit 0
- 	echo mips-mips-riscos${UNAME_RELEASE}
- 	exit 0 ;;
-     Motorola:PowerMAX_OS:*:*)
- 	echo powerpc-motorola-powermax
- 	exit 0 ;;
-     Motorola:*:4.3:PL8-*)
- 	echo powerpc-harris-powermax
- 	exit 0 ;;
-     Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
- 	echo powerpc-harris-powermax
- 	exit 0 ;;
-     Night_Hawk:Power_UNIX:*:*)
- 	echo powerpc-harris-powerunix
- 	exit 0 ;;
-     m88k:CX/UX:7*:*)
- 	echo m88k-harris-cxux7
- 	exit 0 ;;
-     m88k:*:4*:R4*)
- 	echo m88k-motorola-sysv4
- 	exit 0 ;;
-     m88k:*:3*:R3*)
- 	echo m88k-motorola-sysv3
- 	exit 0 ;;
-     AViiON:dgux:*:*)
-         # DG/UX returns AViiON for all architectures
-         UNAME_PROCESSOR=`/usr/bin/uname -p`
- 	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
- 	then
- 	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
- 	       [ ${TARGET_BINARY_INTERFACE}x = x ]
- 	    then
- 		echo m88k-dg-dgux${UNAME_RELEASE}
- 	    else
- 		echo m88k-dg-dguxbcs${UNAME_RELEASE}
- 	    fi
- 	else
- 	    echo i586-dg-dgux${UNAME_RELEASE}
- 	fi
-  	exit 0 ;;
-     M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
- 	echo m88k-dolphin-sysv3
- 	exit 0 ;;
-     M88*:*:R3*:*)
- 	# Delta 88k system running SVR3
- 	echo m88k-motorola-sysv3
- 	exit 0 ;;
-     XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
- 	echo m88k-tektronix-sysv3
- 	exit 0 ;;
-     Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
- 	echo m68k-tektronix-bsd
- 	exit 0 ;;
-     *:IRIX*:*:*)
- 	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
- 	exit 0 ;;
-     ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
- 	echo romp-ibm-aix      # uname -m gives an 8 hex-code CPU id
- 	exit 0 ;;              # Note that: echo "'`uname -s`'" gives 'AIX '
-     i*86:AIX:*:*)
- 	echo i386-ibm-aix
- 	exit 0 ;;
-     ia64:AIX:*:*)
- 	if [ -x /usr/bin/oslevel ] ; then
- 		IBM_REV=`/usr/bin/oslevel`
- 	else
- 		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
- 	fi
- 	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
- 	exit 0 ;;
-     *:AIX:2:3)
- 	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
- 		eval $set_cc_for_build
- 		sed 's/^		//' << EOF >$dummy.c
- 		#include <sys/systemcfg.h>
- 
- 		main()
- 			{
- 			if (!__power_pc())
- 				exit(1);
- 			puts("powerpc-ibm-aix3.2.5");
- 			exit(0);
- 			}
- EOF
- 		$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
- 		echo rs6000-ibm-aix3.2.5
- 	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
- 		echo rs6000-ibm-aix3.2.4
- 	else
- 		echo rs6000-ibm-aix3.2
- 	fi
- 	exit 0 ;;
-     *:AIX:*:[45])
- 	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
- 	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
- 		IBM_ARCH=rs6000
- 	else
- 		IBM_ARCH=powerpc
- 	fi
- 	if [ -x /usr/bin/oslevel ] ; then
- 		IBM_REV=`/usr/bin/oslevel`
- 	else
- 		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
- 	fi
- 	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
- 	exit 0 ;;
-     *:AIX:*:*)
- 	echo rs6000-ibm-aix
- 	exit 0 ;;
-     ibmrt:4.4BSD:*|romp-ibm:BSD:*)
- 	echo romp-ibm-bsd4.4
- 	exit 0 ;;
-     ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
- 	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
- 	exit 0 ;;                           # report: romp-ibm BSD 4.3
-     *:BOSX:*:*)
- 	echo rs6000-bull-bosx
- 	exit 0 ;;
-     DPX/2?00:B.O.S.:*:*)
- 	echo m68k-bull-sysv3
- 	exit 0 ;;
-     9000/[34]??:4.3bsd:1.*:*)
- 	echo m68k-hp-bsd
- 	exit 0 ;;
-     hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
- 	echo m68k-hp-bsd4.4
- 	exit 0 ;;
-     9000/[34678]??:HP-UX:*:*)
- 	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
- 	case "${UNAME_MACHINE}" in
- 	    9000/31? )            HP_ARCH=m68000 ;;
- 	    9000/[34]?? )         HP_ARCH=m68k ;;
- 	    9000/[678][0-9][0-9])
- 		if [ -x /usr/bin/getconf ]; then
- 		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
-                     sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
-                     case "${sc_cpu_version}" in
-                       523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
-                       528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
-                       532)                      # CPU_PA_RISC2_0
-                         case "${sc_kernel_bits}" in
-                           32) HP_ARCH="hppa2.0n" ;;
-                           64) HP_ARCH="hppa2.0w" ;;
- 			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
-                         esac ;;
-                     esac
- 		fi
- 		if [ "${HP_ARCH}" = "" ]; then
- 		    eval $set_cc_for_build
- 		    sed 's/^              //' << EOF >$dummy.c
- 
-               #define _HPUX_SOURCE
-               #include <stdlib.h>
-               #include <unistd.h>
- 
-               int main ()
-               {
-               #if defined(_SC_KERNEL_BITS)
-                   long bits = sysconf(_SC_KERNEL_BITS);
-               #endif
-                   long cpu  = sysconf (_SC_CPU_VERSION);
- 
-                   switch (cpu)
-               	{
-               	case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
-               	case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
-               	case CPU_PA_RISC2_0:
-               #if defined(_SC_KERNEL_BITS)
-               	    switch (bits)
-               		{
-               		case 64: puts ("hppa2.0w"); break;
-               		case 32: puts ("hppa2.0n"); break;
-               		default: puts ("hppa2.0"); break;
-               		} break;
-               #else  /* !defined(_SC_KERNEL_BITS) */
-               	    puts ("hppa2.0"); break;
-               #endif
-               	default: puts ("hppa1.0"); break;
-               	}
-                   exit (0);
-               }
- EOF
- 		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
- 		    test -z "$HP_ARCH" && HP_ARCH=hppa
- 		fi ;;
- 	esac
- 	if [ ${HP_ARCH} = "hppa2.0w" ]
- 	then
- 	    # avoid double evaluation of $set_cc_for_build
- 	    test -n "$CC_FOR_BUILD" || eval $set_cc_for_build
- 	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null
- 	    then
- 		HP_ARCH="hppa2.0w"
- 	    else
- 		HP_ARCH="hppa64"
- 	    fi
- 	fi
- 	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
- 	exit 0 ;;
-     ia64:HP-UX:*:*)
- 	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
- 	echo ia64-hp-hpux${HPUX_REV}
- 	exit 0 ;;
-     3050*:HI-UX:*:*)
- 	eval $set_cc_for_build
- 	sed 's/^	//' << EOF >$dummy.c
- 	#include <unistd.h>
- 	int
- 	main ()
- 	{
- 	  long cpu = sysconf (_SC_CPU_VERSION);
- 	  /* The order matters, because CPU_IS_HP_MC68K erroneously returns
- 	     true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
- 	     results, however.  */
- 	  if (CPU_IS_PA_RISC (cpu))
- 	    {
- 	      switch (cpu)
- 		{
- 		  case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
- 		  case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
- 		  case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
- 		  default: puts ("hppa-hitachi-hiuxwe2"); break;
- 		}
- 	    }
- 	  else if (CPU_IS_HP_MC68K (cpu))
- 	    puts ("m68k-hitachi-hiuxwe2");
- 	  else puts ("unknown-hitachi-hiuxwe2");
- 	  exit (0);
- 	}
- EOF
- 	$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
- 	echo unknown-hitachi-hiuxwe2
- 	exit 0 ;;
-     9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
- 	echo hppa1.1-hp-bsd
- 	exit 0 ;;
-     9000/8??:4.3bsd:*:*)
- 	echo hppa1.0-hp-bsd
- 	exit 0 ;;
-     *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
- 	echo hppa1.0-hp-mpeix
- 	exit 0 ;;
-     hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
- 	echo hppa1.1-hp-osf
- 	exit 0 ;;
-     hp8??:OSF1:*:*)
- 	echo hppa1.0-hp-osf
- 	exit 0 ;;
-     i*86:OSF1:*:*)
- 	if [ -x /usr/sbin/sysversion ] ; then
- 	    echo ${UNAME_MACHINE}-unknown-osf1mk
- 	else
- 	    echo ${UNAME_MACHINE}-unknown-osf1
- 	fi
- 	exit 0 ;;
-     parisc*:Lites*:*:*)
- 	echo hppa1.1-hp-lites
- 	exit 0 ;;
-     C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
- 	echo c1-convex-bsd
-         exit 0 ;;
-     C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
- 	if getsysinfo -f scalar_acc
- 	then echo c32-convex-bsd
- 	else echo c2-convex-bsd
- 	fi
-         exit 0 ;;
-     C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
- 	echo c34-convex-bsd
-         exit 0 ;;
-     C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
- 	echo c38-convex-bsd
-         exit 0 ;;
-     C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
- 	echo c4-convex-bsd
-         exit 0 ;;
-     CRAY*Y-MP:*:*:*)
- 	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- 	exit 0 ;;
-     CRAY*[A-Z]90:*:*:*)
- 	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
- 	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
- 	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
- 	      -e 's/\.[^.]*$/.X/'
- 	exit 0 ;;
-     CRAY*TS:*:*:*)
- 	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- 	exit 0 ;;
-     CRAY*T3E:*:*:*)
- 	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- 	exit 0 ;;
-     CRAY*SV1:*:*:*)
- 	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- 	exit 0 ;;
-     *:UNICOS/mp:*:*)
- 	echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- 	exit 0 ;;
-     F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
- 	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-         FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-         FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
-         echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-         exit 0 ;;
-     5000:UNIX_System_V:4.*:*)
-         FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-         FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
-         echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- 	exit 0 ;;
-     i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
- 	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
- 	exit 0 ;;
-     sparc*:BSD/OS:*:*)
- 	echo sparc-unknown-bsdi${UNAME_RELEASE}
- 	exit 0 ;;
-     *:BSD/OS:*:*)
- 	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
- 	exit 0 ;;
-     *:FreeBSD:*:*)
- 	# Determine whether the default compiler uses glibc.
- 	eval $set_cc_for_build
- 	sed 's/^	//' << EOF >$dummy.c
- 	#include <features.h>
- 	#if __GLIBC__ >= 2
- 	LIBC=gnu
- 	#else
- 	LIBC=
- 	#endif
- EOF
- 	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
- 	# GNU/KFreeBSD systems have a "k" prefix to indicate we are using
- 	# FreeBSD's kernel, but not the complete OS.
- 	case ${LIBC} in gnu) kernel_only='k' ;; esac
- 	echo ${UNAME_MACHINE}-unknown-${kernel_only}freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC}
- 	exit 0 ;;
-     i*:CYGWIN*:*)
- 	echo ${UNAME_MACHINE}-pc-cygwin
- 	exit 0 ;;
-     i*:MINGW*:*)
- 	echo ${UNAME_MACHINE}-pc-mingw32
- 	exit 0 ;;
-     i*:PW*:*)
- 	echo ${UNAME_MACHINE}-pc-pw32
- 	exit 0 ;;
-     x86:Interix*:[34]*)
- 	echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
- 	exit 0 ;;
-     [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
- 	echo i${UNAME_MACHINE}-pc-mks
- 	exit 0 ;;
-     i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
- 	# How do we know it's Interix rather than the generic POSIX subsystem?
- 	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
- 	# UNAME_MACHINE based on the output of uname instead of i386?
- 	echo i586-pc-interix
- 	exit 0 ;;
-     i*:UWIN*:*)
- 	echo ${UNAME_MACHINE}-pc-uwin
- 	exit 0 ;;
-     p*:CYGWIN*:*)
- 	echo powerpcle-unknown-cygwin
- 	exit 0 ;;
-     prep*:SunOS:5.*:*)
- 	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- 	exit 0 ;;
-     *:GNU:*:*)
- 	# the GNU system
- 	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
- 	exit 0 ;;
-     *:GNU/*:*:*)
- 	# other systems with GNU libc and userland
- 	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
- 	exit 0 ;;
-     i*86:Minix:*:*)
- 	echo ${UNAME_MACHINE}-pc-minix
- 	exit 0 ;;
-     arm*:Linux:*:*)
- 	echo ${UNAME_MACHINE}-unknown-linux-gnu
- 	exit 0 ;;
-     cris:Linux:*:*)
- 	echo cris-axis-linux-gnu
- 	exit 0 ;;
-     ia64:Linux:*:*)
- 	echo ${UNAME_MACHINE}-unknown-linux-gnu
- 	exit 0 ;;
-     m68*:Linux:*:*)
- 	echo ${UNAME_MACHINE}-unknown-linux-gnu
- 	exit 0 ;;
-     mips:Linux:*:*)
- 	eval $set_cc_for_build
- 	sed 's/^	//' << EOF >$dummy.c
- 	#undef CPU
- 	#undef mips
- 	#undef mipsel
- 	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
- 	CPU=mipsel
- 	#else
- 	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
- 	CPU=mips
- 	#else
- 	CPU=
- 	#endif
- 	#endif
- EOF
- 	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
- 	test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
- 	;;
-     mips64:Linux:*:*)
- 	eval $set_cc_for_build
- 	sed 's/^	//' << EOF >$dummy.c
- 	#undef CPU
- 	#undef mips64
- 	#undef mips64el
- 	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
- 	CPU=mips64el
- 	#else
- 	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
- 	CPU=mips64
- 	#else
- 	CPU=
- 	#endif
- 	#endif
- EOF
- 	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
- 	test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
- 	;;
-     ppc:Linux:*:*)
- 	echo powerpc-unknown-linux-gnu
- 	exit 0 ;;
-     ppc64:Linux:*:*)
- 	echo powerpc64-unknown-linux-gnu
- 	exit 0 ;;
-     alpha:Linux:*:*)
- 	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
- 	  EV5)   UNAME_MACHINE=alphaev5 ;;
- 	  EV56)  UNAME_MACHINE=alphaev56 ;;
- 	  PCA56) UNAME_MACHINE=alphapca56 ;;
- 	  PCA57) UNAME_MACHINE=alphapca56 ;;
- 	  EV6)   UNAME_MACHINE=alphaev6 ;;
- 	  EV67)  UNAME_MACHINE=alphaev67 ;;
- 	  EV68*) UNAME_MACHINE=alphaev68 ;;
-         esac
- 	objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
- 	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
- 	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
- 	exit 0 ;;
-     parisc:Linux:*:* | hppa:Linux:*:*)
- 	# Look for CPU level
- 	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
- 	  PA7*) echo hppa1.1-unknown-linux-gnu ;;
- 	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
- 	  *)    echo hppa-unknown-linux-gnu ;;
- 	esac
- 	exit 0 ;;
-     parisc64:Linux:*:* | hppa64:Linux:*:*)
- 	echo hppa64-unknown-linux-gnu
- 	exit 0 ;;
-     s390:Linux:*:* | s390x:Linux:*:*)
- 	echo ${UNAME_MACHINE}-ibm-linux
- 	exit 0 ;;
-     sh64*:Linux:*:*)
-     	echo ${UNAME_MACHINE}-unknown-linux-gnu
- 	exit 0 ;;
-     sh*:Linux:*:*)
- 	echo ${UNAME_MACHINE}-unknown-linux-gnu
- 	exit 0 ;;
-     sparc:Linux:*:* | sparc64:Linux:*:*)
- 	echo ${UNAME_MACHINE}-unknown-linux-gnu
- 	exit 0 ;;
-     x86_64:Linux:*:*)
- 	echo x86_64-unknown-linux-gnu
- 	exit 0 ;;
-     i*86:Linux:*:*)
- 	# The BFD linker knows what the default object file format is, so
- 	# first see if it will tell us. cd to the root directory to prevent
- 	# problems with other programs or directories called `ld' in the path.
- 	# Set LC_ALL=C to ensure ld outputs messages in English.
- 	ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
- 			 | sed -ne '/supported targets:/!d
- 				    s/[ 	][ 	]*/ /g
- 				    s/.*supported targets: *//
- 				    s/ .*//
- 				    p'`
-         case "$ld_supported_targets" in
- 	  elf32-i386)
- 		TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
- 		;;
- 	  a.out-i386-linux)
- 		echo "${UNAME_MACHINE}-pc-linux-gnuaout"
- 		exit 0 ;;
- 	  coff-i386)
- 		echo "${UNAME_MACHINE}-pc-linux-gnucoff"
- 		exit 0 ;;
- 	  "")
- 		# Either a pre-BFD a.out linker (linux-gnuoldld) or
- 		# one that does not give us useful --help.
- 		echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
- 		exit 0 ;;
- 	esac
- 	# Determine whether the default compiler is a.out or elf
- 	eval $set_cc_for_build
- 	sed 's/^	//' << EOF >$dummy.c
- 	#include <features.h>
- 	#ifdef __ELF__
- 	# ifdef __GLIBC__
- 	#  if __GLIBC__ >= 2
- 	LIBC=gnu
- 	#  else
- 	LIBC=gnulibc1
- 	#  endif
- 	# else
- 	LIBC=gnulibc1
- 	# endif
- 	#else
- 	#ifdef __INTEL_COMPILER
- 	LIBC=gnu
- 	#else
- 	LIBC=gnuaout
- 	#endif
- 	#endif
- 	#ifdef __dietlibc__
- 	LIBC=dietlibc
- 	#endif
- EOF
- 	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
- 	test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
- 	test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
- 	;;
-     i*86:DYNIX/ptx:4*:*)
- 	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
- 	# earlier versions are messed up and put the nodename in both
- 	# sysname and nodename.
- 	echo i386-sequent-sysv4
- 	exit 0 ;;
-     i*86:UNIX_SV:4.2MP:2.*)
-         # Unixware is an offshoot of SVR4, but it has its own version
-         # number series starting with 2...
-         # I am not positive that other SVR4 systems won't match this,
- 	# I just have to hope.  -- rms.
-         # Use sysv4.2uw... so that sysv4* matches it.
- 	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
- 	exit 0 ;;
-     i*86:OS/2:*:*)
- 	# If we were able to find `uname', then EMX Unix compatibility
- 	# is probably installed.
- 	echo ${UNAME_MACHINE}-pc-os2-emx
- 	exit 0 ;;
-     i*86:XTS-300:*:STOP)
- 	echo ${UNAME_MACHINE}-unknown-stop
- 	exit 0 ;;
-     i*86:atheos:*:*)
- 	echo ${UNAME_MACHINE}-unknown-atheos
- 	exit 0 ;;
- 	i*86:syllable:*:*)
- 	echo ${UNAME_MACHINE}-pc-syllable
- 	exit 0 ;;
-     i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
- 	echo i386-unknown-lynxos${UNAME_RELEASE}
- 	exit 0 ;;
-     i*86:*DOS:*:*)
- 	echo ${UNAME_MACHINE}-pc-msdosdjgpp
- 	exit 0 ;;
-     i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
- 	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
- 	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
- 		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
- 	else
- 		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
- 	fi
- 	exit 0 ;;
-     i*86:*:5:[78]*)
- 	case `/bin/uname -X | grep "^Machine"` in
- 	    *486*)	     UNAME_MACHINE=i486 ;;
- 	    *Pentium)	     UNAME_MACHINE=i586 ;;
- 	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
- 	esac
- 	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
- 	exit 0 ;;
-     i*86:*:3.2:*)
- 	if test -f /usr/options/cb.name; then
- 		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
- 		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
- 	elif /bin/uname -X 2>/dev/null >/dev/null ; then
- 		UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
- 		(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
- 		(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
- 			&& UNAME_MACHINE=i586
- 		(/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
- 			&& UNAME_MACHINE=i686
- 		(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
- 			&& UNAME_MACHINE=i686
- 		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
- 	else
- 		echo ${UNAME_MACHINE}-pc-sysv32
- 	fi
- 	exit 0 ;;
-     pc:*:*:*)
- 	# Left here for compatibility:
-         # uname -m prints for DJGPP always 'pc', but it prints nothing about
-         # the processor, so we play safe by assuming i386.
- 	echo i386-pc-msdosdjgpp
-         exit 0 ;;
-     Intel:Mach:3*:*)
- 	echo i386-pc-mach3
- 	exit 0 ;;
-     paragon:*:*:*)
- 	echo i860-intel-osf1
- 	exit 0 ;;
-     i860:*:4.*:*) # i860-SVR4
- 	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
- 	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
- 	else # Add other i860-SVR4 vendors below as they are discovered.
- 	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
- 	fi
- 	exit 0 ;;
-     mini*:CTIX:SYS*5:*)
- 	# "miniframe"
- 	echo m68010-convergent-sysv
- 	exit 0 ;;
-     mc68k:UNIX:SYSTEM5:3.51m)
- 	echo m68k-convergent-sysv
- 	exit 0 ;;
-     M680?0:D-NIX:5.3:*)
- 	echo m68k-diab-dnix
- 	exit 0 ;;
-     M68*:*:R3V[567]*:*)
- 	test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
-     3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0)
- 	OS_REL=''
- 	test -r /etc/.relid \
- 	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
- 	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- 	  && echo i486-ncr-sysv4.3${OS_REL} && exit 0
- 	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
- 	  && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
-     3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
-         /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-           && echo i486-ncr-sysv4 && exit 0 ;;
-     m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
- 	echo m68k-unknown-lynxos${UNAME_RELEASE}
- 	exit 0 ;;
-     mc68030:UNIX_System_V:4.*:*)
- 	echo m68k-atari-sysv4
- 	exit 0 ;;
-     TSUNAMI:LynxOS:2.*:*)
- 	echo sparc-unknown-lynxos${UNAME_RELEASE}
- 	exit 0 ;;
-     rs6000:LynxOS:2.*:*)
- 	echo rs6000-unknown-lynxos${UNAME_RELEASE}
- 	exit 0 ;;
-     PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
- 	echo powerpc-unknown-lynxos${UNAME_RELEASE}
- 	exit 0 ;;
-     SM[BE]S:UNIX_SV:*:*)
- 	echo mips-dde-sysv${UNAME_RELEASE}
- 	exit 0 ;;
-     RM*:ReliantUNIX-*:*:*)
- 	echo mips-sni-sysv4
- 	exit 0 ;;
-     RM*:SINIX-*:*:*)
- 	echo mips-sni-sysv4
- 	exit 0 ;;
-     *:SINIX-*:*:*)
- 	if uname -p 2>/dev/null >/dev/null ; then
- 		UNAME_MACHINE=`(uname -p) 2>/dev/null`
- 		echo ${UNAME_MACHINE}-sni-sysv4
- 	else
- 		echo ns32k-sni-sysv
- 	fi
- 	exit 0 ;;
-     PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
-                       # says <Richard.M.Bartel@ccMail.Census.GOV>
-         echo i586-unisys-sysv4
-         exit 0 ;;
-     *:UNIX_System_V:4*:FTX*)
- 	# From Gerald Hewes <hewes@openmarket.com>.
- 	# How about differentiating between stratus architectures? -djm
- 	echo hppa1.1-stratus-sysv4
- 	exit 0 ;;
-     *:*:*:FTX*)
- 	# From seanf@swdc.stratus.com.
- 	echo i860-stratus-sysv4
- 	exit 0 ;;
-     *:VOS:*:*)
- 	# From Paul.Green@stratus.com.
- 	echo hppa1.1-stratus-vos
- 	exit 0 ;;
-     mc68*:A/UX:*:*)
- 	echo m68k-apple-aux${UNAME_RELEASE}
- 	exit 0 ;;
-     news*:NEWS-OS:6*:*)
- 	echo mips-sony-newsos6
- 	exit 0 ;;
-     R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
- 	if [ -d /usr/nec ]; then
- 	        echo mips-nec-sysv${UNAME_RELEASE}
- 	else
- 	        echo mips-unknown-sysv${UNAME_RELEASE}
- 	fi
-         exit 0 ;;
-     BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
- 	echo powerpc-be-beos
- 	exit 0 ;;
-     BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
- 	echo powerpc-apple-beos
- 	exit 0 ;;
-     BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
- 	echo i586-pc-beos
- 	exit 0 ;;
-     SX-4:SUPER-UX:*:*)
- 	echo sx4-nec-superux${UNAME_RELEASE}
- 	exit 0 ;;
-     SX-5:SUPER-UX:*:*)
- 	echo sx5-nec-superux${UNAME_RELEASE}
- 	exit 0 ;;
-     SX-6:SUPER-UX:*:*)
- 	echo sx6-nec-superux${UNAME_RELEASE}
- 	exit 0 ;;
-     Power*:Rhapsody:*:*)
- 	echo powerpc-apple-rhapsody${UNAME_RELEASE}
- 	exit 0 ;;
-     *:Rhapsody:*:*)
- 	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
- 	exit 0 ;;
-     *:Darwin:*:*)
- 	case `uname -p` in
- 	    *86) UNAME_PROCESSOR=i686 ;;
- 	    powerpc) UNAME_PROCESSOR=powerpc ;;
- 	esac
- 	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
- 	exit 0 ;;
-     *:procnto*:*:* | *:QNX:[0123456789]*:*)
- 	UNAME_PROCESSOR=`uname -p`
- 	if test "$UNAME_PROCESSOR" = "x86"; then
- 		UNAME_PROCESSOR=i386
- 		UNAME_MACHINE=pc
- 	fi
- 	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
- 	exit 0 ;;
-     *:QNX:*:4*)
- 	echo i386-pc-qnx
- 	exit 0 ;;
-     NSR-?:NONSTOP_KERNEL:*:*)
- 	echo nsr-tandem-nsk${UNAME_RELEASE}
- 	exit 0 ;;
-     *:NonStop-UX:*:*)
- 	echo mips-compaq-nonstopux
- 	exit 0 ;;
-     BS2000:POSIX*:*:*)
- 	echo bs2000-siemens-sysv
- 	exit 0 ;;
-     DS/*:UNIX_System_V:*:*)
- 	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
- 	exit 0 ;;
-     *:Plan9:*:*)
- 	# "uname -m" is not consistent, so use $cputype instead. 386
- 	# is converted to i386 for consistency with other x86
- 	# operating systems.
- 	if test "$cputype" = "386"; then
- 	    UNAME_MACHINE=i386
- 	else
- 	    UNAME_MACHINE="$cputype"
- 	fi
- 	echo ${UNAME_MACHINE}-unknown-plan9
- 	exit 0 ;;
-     *:TOPS-10:*:*)
- 	echo pdp10-unknown-tops10
- 	exit 0 ;;
-     *:TENEX:*:*)
- 	echo pdp10-unknown-tenex
- 	exit 0 ;;
-     KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
- 	echo pdp10-dec-tops20
- 	exit 0 ;;
-     XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
- 	echo pdp10-xkl-tops20
- 	exit 0 ;;
-     *:TOPS-20:*:*)
- 	echo pdp10-unknown-tops20
- 	exit 0 ;;
-     *:ITS:*:*)
- 	echo pdp10-unknown-its
- 	exit 0 ;;
-     SEI:*:*:SEIUX)
-         echo mips-sei-seiux${UNAME_RELEASE}
- 	exit 0 ;;
-     *:DragonFly:*:*)
- 	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
- 	exit 0 ;;
- esac
- 
- #echo '(No uname command or uname output not recognized.)' 1>&2
- #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
- 
- eval $set_cc_for_build
- cat >$dummy.c <<EOF
- #ifdef _SEQUENT_
- # include <sys/types.h>
- # include <sys/utsname.h>
- #endif
- main ()
- {
- #if defined (sony)
- #if defined (MIPSEB)
-   /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
-      I don't know....  */
-   printf ("mips-sony-bsd\n"); exit (0);
- #else
- #include <sys/param.h>
-   printf ("m68k-sony-newsos%s\n",
- #ifdef NEWSOS4
-           "4"
- #else
- 	  ""
- #endif
-          ); exit (0);
- #endif
- #endif
- 
- #if defined (__arm) && defined (__acorn) && defined (__unix)
-   printf ("arm-acorn-riscix"); exit (0);
- #endif
- 
- #if defined (hp300) && !defined (hpux)
-   printf ("m68k-hp-bsd\n"); exit (0);
- #endif
- 
- #if defined (NeXT)
- #if !defined (__ARCHITECTURE__)
- #define __ARCHITECTURE__ "m68k"
- #endif
-   int version;
-   version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
-   if (version < 4)
-     printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
-   else
-     printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
-   exit (0);
- #endif
- 
- #if defined (MULTIMAX) || defined (n16)
- #if defined (UMAXV)
-   printf ("ns32k-encore-sysv\n"); exit (0);
- #else
- #if defined (CMU)
-   printf ("ns32k-encore-mach\n"); exit (0);
- #else
-   printf ("ns32k-encore-bsd\n"); exit (0);
- #endif
- #endif
- #endif
- 
- #if defined (__386BSD__)
-   printf ("i386-pc-bsd\n"); exit (0);
- #endif
- 
- #if defined (sequent)
- #if defined (i386)
-   printf ("i386-sequent-dynix\n"); exit (0);
- #endif
- #if defined (ns32000)
-   printf ("ns32k-sequent-dynix\n"); exit (0);
- #endif
- #endif
- 
- #if defined (_SEQUENT_)
-     struct utsname un;
- 
-     uname(&un);
- 
-     if (strncmp(un.version, "V2", 2) == 0) {
- 	printf ("i386-sequent-ptx2\n"); exit (0);
-     }
-     if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
- 	printf ("i386-sequent-ptx1\n"); exit (0);
-     }
-     printf ("i386-sequent-ptx\n"); exit (0);
- 
- #endif
- 
- #if defined (vax)
- # if !defined (ultrix)
- #  include <sys/param.h>
- #  if defined (BSD)
- #   if BSD == 43
-       printf ("vax-dec-bsd4.3\n"); exit (0);
- #   else
- #    if BSD == 199006
-       printf ("vax-dec-bsd4.3reno\n"); exit (0);
- #    else
-       printf ("vax-dec-bsd\n"); exit (0);
- #    endif
- #   endif
- #  else
-     printf ("vax-dec-bsd\n"); exit (0);
- #  endif
- # else
-     printf ("vax-dec-ultrix\n"); exit (0);
- # endif
- #endif
- 
- #if defined (alliant) && defined (i860)
-   printf ("i860-alliant-bsd\n"); exit (0);
- #endif
- 
-   exit (1);
- }
- EOF
- 
- $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0
- 
- # Apollos put the system type in the environment.
- 
- test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
- 
- # Convex versions that predate uname can use getsysinfo(1)
- 
- if [ -x /usr/convex/getsysinfo ]
- then
-     case `getsysinfo -f cpu_type` in
-     c1*)
- 	echo c1-convex-bsd
- 	exit 0 ;;
-     c2*)
- 	if getsysinfo -f scalar_acc
- 	then echo c32-convex-bsd
- 	else echo c2-convex-bsd
- 	fi
- 	exit 0 ;;
-     c34*)
- 	echo c34-convex-bsd
- 	exit 0 ;;
-     c38*)
- 	echo c38-convex-bsd
- 	exit 0 ;;
-     c4*)
- 	echo c4-convex-bsd
- 	exit 0 ;;
-     esac
- fi
- 
- cat >&2 <<EOF
- $0: unable to guess system type
- 
- This script, last modified $timestamp, has failed to recognize
- the operating system you are using. It is advised that you
- download the most up to date version of the config scripts from
- 
-     ftp://ftp.gnu.org/pub/gnu/config/
- 
- If the version you run ($0) is already up to date, please
- send the following data and any information you think might be
- pertinent to <config-patches@gnu.org> in order to provide the needed
- information to handle your system.
- 
- config.guess timestamp = $timestamp
- 
- uname -m = `(uname -m) 2>/dev/null || echo unknown`
- uname -r = `(uname -r) 2>/dev/null || echo unknown`
- uname -s = `(uname -s) 2>/dev/null || echo unknown`
- uname -v = `(uname -v) 2>/dev/null || echo unknown`
- 
- /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
- /bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
- 
- hostinfo               = `(hostinfo) 2>/dev/null`
- /bin/universe          = `(/bin/universe) 2>/dev/null`
- /usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
- /bin/arch              = `(/bin/arch) 2>/dev/null`
- /usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
- /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
- 
- UNAME_MACHINE = ${UNAME_MACHINE}
- UNAME_RELEASE = ${UNAME_RELEASE}
- UNAME_SYSTEM  = ${UNAME_SYSTEM}
- UNAME_VERSION = ${UNAME_VERSION}
- EOF
- 
- exit 1
- 
- # Local variables:
- # eval: (add-hook 'write-file-hooks 'time-stamp)
- # time-stamp-start: "timestamp='"
- # time-stamp-format: "%:y-%02m-%02d"
- # time-stamp-end: "'"
- # End:
--- 0 ----
diff -Nrcpad gcc-3.4.3/boehm-gc/config.sub gcc-4.0.0/boehm-gc/config.sub
*** gcc-3.4.3/boehm-gc/config.sub	Sun Feb 22 14:43:48 2004
--- gcc-4.0.0/boehm-gc/config.sub	Thu Jan  1 00:00:00 1970
***************
*** 1,1545 ****
- #! /bin/sh
- # Configuration validation subroutine script.
- #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- #   2000, 2001, 2002, 2003 Free Software Foundation, Inc.
- 
- timestamp='2004-02-16'
- 
- # This file is (in principle) common to ALL GNU software.
- # The presence of a machine in this file suggests that SOME GNU software
- # can handle that machine.  It does not imply ALL GNU software can.
- #
- # This file is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation; either version 2 of the License, or
- # (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- # GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program; if not, write to the Free Software
- # Foundation, Inc., 59 Temple Place - Suite 330,
- # Boston, MA 02111-1307, USA.
- 
- # As a special exception to the GNU General Public License, if you
- # distribute this file as part of a program that contains a
- # configuration script generated by Autoconf, you may include it under
- # the same distribution terms that you use for the rest of that program.
- 
- # Please send patches to <config-patches@gnu.org>.  Submit a context
- # diff and a properly formatted ChangeLog entry.
- #
- # Configuration subroutine to validate and canonicalize a configuration type.
- # Supply the specified configuration type as an argument.
- # If it is invalid, we print an error message on stderr and exit with code 1.
- # Otherwise, we print the canonical config type on stdout and succeed.
- 
- # This file is supposed to be the same for all GNU packages
- # and recognize all the CPU types, system types and aliases
- # that are meaningful with *any* GNU software.
- # Each package is responsible for reporting which valid configurations
- # it does not support.  The user should be able to distinguish
- # a failure to support a valid configuration from a meaningless
- # configuration.
- 
- # The goal of this file is to map all the various variations of a given
- # machine specification into a single specification in the form:
- #	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
- # or in some cases, the newer four-part form:
- #	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
- # It is wrong to echo any other type of specification.
- 
- me=`echo "$0" | sed -e 's,.*/,,'`
- 
- usage="\
- Usage: $0 [OPTION] CPU-MFR-OPSYS
-        $0 [OPTION] ALIAS
- 
- Canonicalize a configuration name.
- 
- Operation modes:
-   -h, --help         print this help, then exit
-   -t, --time-stamp   print date of last modification, then exit
-   -v, --version      print version number, then exit
- 
- Report bugs and patches to <config-patches@gnu.org>."
- 
- version="\
- GNU config.sub ($timestamp)
- 
- Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
- Free Software Foundation, Inc.
- 
- This is free software; see the source for copying conditions.  There is NO
- warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
- 
- help="
- Try \`$me --help' for more information."
- 
- # Parse command line
- while test $# -gt 0 ; do
-   case $1 in
-     --time-stamp | --time* | -t )
-        echo "$timestamp" ; exit 0 ;;
-     --version | -v )
-        echo "$version" ; exit 0 ;;
-     --help | --h* | -h )
-        echo "$usage"; exit 0 ;;
-     -- )     # Stop option processing
-        shift; break ;;
-     - )	# Use stdin as input.
-        break ;;
-     -* )
-        echo "$me: invalid option $1$help"
-        exit 1 ;;
- 
-     *local*)
-        # First pass through any local machine types.
-        echo $1
-        exit 0;;
- 
-     * )
-        break ;;
-   esac
- done
- 
- case $# in
-  0) echo "$me: missing argument$help" >&2
-     exit 1;;
-  1) ;;
-  *) echo "$me: too many arguments$help" >&2
-     exit 1;;
- esac
- 
- # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
- # Here we must recognize all the valid KERNEL-OS combinations.
- maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
- case $maybe_os in
-   nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \
-   kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
-     os=-$maybe_os
-     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
-     ;;
-   *)
-     basic_machine=`echo $1 | sed 's/-[^-]*$//'`
-     if [ $basic_machine != $1 ]
-     then os=`echo $1 | sed 's/.*-/-/'`
-     else os=; fi
-     ;;
- esac
- 
- ### Let's recognize common machines as not being operating systems so
- ### that things like config.sub decstation-3100 work.  We also
- ### recognize some manufacturers as not being operating systems, so we
- ### can provide default operating systems below.
- case $os in
- 	-sun*os*)
- 		# Prevent following clause from handling this invalid input.
- 		;;
- 	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
- 	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
- 	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
- 	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
- 	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
- 	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
- 	-apple | -axis)
- 		os=
- 		basic_machine=$1
- 		;;
- 	-sim | -cisco | -oki | -wec | -winbond)
- 		os=
- 		basic_machine=$1
- 		;;
- 	-scout)
- 		;;
- 	-wrs)
- 		os=-vxworks
- 		basic_machine=$1
- 		;;
- 	-chorusos*)
- 		os=-chorusos
- 		basic_machine=$1
- 		;;
-  	-chorusrdb)
-  		os=-chorusrdb
- 		basic_machine=$1
-  		;;
- 	-hiux*)
- 		os=-hiuxwe2
- 		;;
- 	-sco5)
- 		os=-sco3.2v5
- 		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- 		;;
- 	-sco4)
- 		os=-sco3.2v4
- 		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- 		;;
- 	-sco3.2.[4-9]*)
- 		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
- 		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- 		;;
- 	-sco3.2v[4-9]*)
- 		# Don't forget version if it is 3.2v4 or newer.
- 		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- 		;;
- 	-sco*)
- 		os=-sco3.2v2
- 		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- 		;;
- 	-udk*)
- 		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- 		;;
- 	-isc)
- 		os=-isc2.2
- 		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- 		;;
- 	-clix*)
- 		basic_machine=clipper-intergraph
- 		;;
- 	-isc*)
- 		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- 		;;
- 	-lynx*)
- 		os=-lynxos
- 		;;
- 	-ptx*)
- 		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
- 		;;
- 	-windowsnt*)
- 		os=`echo $os | sed -e 's/windowsnt/winnt/'`
- 		;;
- 	-psos*)
- 		os=-psos
- 		;;
- 	-mint | -mint[0-9]*)
- 		basic_machine=m68k-atari
- 		os=-mint
- 		;;
- esac
- 
- # Decode aliases for certain CPU-COMPANY combinations.
- case $basic_machine in
- 	# Recognize the basic CPU types without company name.
- 	# Some are omitted here because they have special meanings below.
- 	1750a | 580 \
- 	| a29k \
- 	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
- 	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
- 	| am33_2.0 \
- 	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
- 	| c4x | clipper \
- 	| d10v | d30v | dlx | dsp16xx \
- 	| fr30 | frv \
- 	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
- 	| i370 | i860 | i960 | ia64 \
- 	| ip2k | iq2000 \
- 	| m32r | m68000 | m68k | m88k | mcore \
- 	| mips | mipsbe | mipseb | mipsel | mipsle \
- 	| mips16 \
- 	| mips64 | mips64el \
- 	| mips64vr | mips64vrel \
- 	| mips64orion | mips64orionel \
- 	| mips64vr4100 | mips64vr4100el \
- 	| mips64vr4300 | mips64vr4300el \
- 	| mips64vr5000 | mips64vr5000el \
- 	| mipsisa32 | mipsisa32el \
- 	| mipsisa32r2 | mipsisa32r2el \
- 	| mipsisa64 | mipsisa64el \
- 	| mipsisa64r2 | mipsisa64r2el \
- 	| mipsisa64sb1 | mipsisa64sb1el \
- 	| mipsisa64sr71k | mipsisa64sr71kel \
- 	| mipstx39 | mipstx39el \
- 	| mn10200 | mn10300 \
- 	| msp430 \
- 	| ns16k | ns32k \
- 	| openrisc | or32 \
- 	| pdp10 | pdp11 | pj | pjl \
- 	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
- 	| pyramid \
- 	| sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
- 	| sh64 | sh64le \
- 	| sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \
- 	| strongarm \
- 	| tahoe | thumb | tic4x | tic80 | tron \
- 	| v850 | v850e \
- 	| we32k \
- 	| x86 | xscale | xstormy16 | xtensa \
- 	| z8k)
- 		basic_machine=$basic_machine-unknown
- 		;;
- 	m6811 | m68hc11 | m6812 | m68hc12)
- 		# Motorola 68HC11/12.
- 		basic_machine=$basic_machine-unknown
- 		os=-none
- 		;;
- 	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
- 		;;
- 
- 	# We use `pc' rather than `unknown'
- 	# because (1) that's what they normally are, and
- 	# (2) the word "unknown" tends to confuse beginning users.
- 	i*86 | x86_64)
- 	  basic_machine=$basic_machine-pc
- 	  ;;
- 	# Object if more than one company name word.
- 	*-*-*)
- 		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
- 		exit 1
- 		;;
- 	# Recognize the basic CPU types with company name.
- 	580-* \
- 	| a29k-* \
- 	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
- 	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
- 	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
- 	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
- 	| avr-* \
- 	| bs2000-* \
- 	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
- 	| clipper-* | cydra-* \
- 	| d10v-* | d30v-* | dlx-* \
- 	| elxsi-* \
- 	| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
- 	| h8300-* | h8500-* \
- 	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
- 	| i*86-* | i860-* | i960-* | ia64-* \
- 	| ip2k-* | iq2000-* \
- 	| m32r-* \
- 	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
- 	| m88110-* | m88k-* | mcore-* \
- 	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
- 	| mips16-* \
- 	| mips64-* | mips64el-* \
- 	| mips64vr-* | mips64vrel-* \
- 	| mips64orion-* | mips64orionel-* \
- 	| mips64vr4100-* | mips64vr4100el-* \
- 	| mips64vr4300-* | mips64vr4300el-* \
- 	| mips64vr5000-* | mips64vr5000el-* \
- 	| mipsisa32-* | mipsisa32el-* \
- 	| mipsisa32r2-* | mipsisa32r2el-* \
- 	| mipsisa64-* | mipsisa64el-* \
- 	| mipsisa64r2-* | mipsisa64r2el-* \
- 	| mipsisa64sb1-* | mipsisa64sb1el-* \
- 	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
- 	| mipstx39-* | mipstx39el-* \
- 	| msp430-* \
- 	| none-* | np1-* | nv1-* | ns16k-* | ns32k-* \
- 	| orion-* \
- 	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
- 	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
- 	| pyramid-* \
- 	| romp-* | rs6000-* \
- 	| sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
- 	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
- 	| sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
- 	| sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
- 	| tahoe-* | thumb-* \
- 	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
- 	| tron-* \
- 	| v850-* | v850e-* | vax-* \
- 	| we32k-* \
- 	| x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
- 	| xtensa-* \
- 	| ymp-* \
- 	| z8k-*)
- 		;;
- 	# Recognize the various machine names and aliases which stand
- 	# for a CPU type and a company and sometimes even an OS.
- 	386bsd)
- 		basic_machine=i386-unknown
- 		os=-bsd
- 		;;
- 	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
- 		basic_machine=m68000-att
- 		;;
- 	3b*)
- 		basic_machine=we32k-att
- 		;;
- 	a29khif)
- 		basic_machine=a29k-amd
- 		os=-udi
- 		;;
-     	abacus)
- 		basic_machine=abacus-unknown
- 		;;
- 	adobe68k)
- 		basic_machine=m68010-adobe
- 		os=-scout
- 		;;
- 	alliant | fx80)
- 		basic_machine=fx80-alliant
- 		;;
- 	altos | altos3068)
- 		basic_machine=m68k-altos
- 		;;
- 	am29k)
- 		basic_machine=a29k-none
- 		os=-bsd
- 		;;
- 	amd64)
- 		basic_machine=x86_64-pc
- 		;;
- 	amd64-*)
- 		basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
- 		;;
- 	amdahl)
- 		basic_machine=580-amdahl
- 		os=-sysv
- 		;;
- 	amiga | amiga-*)
- 		basic_machine=m68k-unknown
- 		;;
- 	amigaos | amigados)
- 		basic_machine=m68k-unknown
- 		os=-amigaos
- 		;;
- 	amigaunix | amix)
- 		basic_machine=m68k-unknown
- 		os=-sysv4
- 		;;
- 	apollo68)
- 		basic_machine=m68k-apollo
- 		os=-sysv
- 		;;
- 	apollo68bsd)
- 		basic_machine=m68k-apollo
- 		os=-bsd
- 		;;
- 	aux)
- 		basic_machine=m68k-apple
- 		os=-aux
- 		;;
- 	balance)
- 		basic_machine=ns32k-sequent
- 		os=-dynix
- 		;;
- 	c90)
- 		basic_machine=c90-cray
- 		os=-unicos
- 		;;
- 	convex-c1)
- 		basic_machine=c1-convex
- 		os=-bsd
- 		;;
- 	convex-c2)
- 		basic_machine=c2-convex
- 		os=-bsd
- 		;;
- 	convex-c32)
- 		basic_machine=c32-convex
- 		os=-bsd
- 		;;
- 	convex-c34)
- 		basic_machine=c34-convex
- 		os=-bsd
- 		;;
- 	convex-c38)
- 		basic_machine=c38-convex
- 		os=-bsd
- 		;;
- 	cray | j90)
- 		basic_machine=j90-cray
- 		os=-unicos
- 		;;
- 	cr16c)
- 		basic_machine=cr16c-unknown
- 		os=-elf
- 		;;
- 	crds | unos)
- 		basic_machine=m68k-crds
- 		;;
- 	cris | cris-* | etrax*)
- 		basic_machine=cris-axis
- 		;;
- 	da30 | da30-*)
- 		basic_machine=m68k-da30
- 		;;
- 	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
- 		basic_machine=mips-dec
- 		;;
- 	decsystem10* | dec10*)
- 		basic_machine=pdp10-dec
- 		os=-tops10
- 		;;
- 	decsystem20* | dec20*)
- 		basic_machine=pdp10-dec
- 		os=-tops20
- 		;;
- 	delta | 3300 | motorola-3300 | motorola-delta \
- 	      | 3300-motorola | delta-motorola)
- 		basic_machine=m68k-motorola
- 		;;
- 	delta88)
- 		basic_machine=m88k-motorola
- 		os=-sysv3
- 		;;
- 	dpx20 | dpx20-*)
- 		basic_machine=rs6000-bull
- 		os=-bosx
- 		;;
- 	dpx2* | dpx2*-bull)
- 		basic_machine=m68k-bull
- 		os=-sysv3
- 		;;
- 	ebmon29k)
- 		basic_machine=a29k-amd
- 		os=-ebmon
- 		;;
- 	elxsi)
- 		basic_machine=elxsi-elxsi
- 		os=-bsd
- 		;;
- 	encore | umax | mmax)
- 		basic_machine=ns32k-encore
- 		;;
- 	es1800 | OSE68k | ose68k | ose | OSE)
- 		basic_machine=m68k-ericsson
- 		os=-ose
- 		;;
- 	fx2800)
- 		basic_machine=i860-alliant
- 		;;
- 	genix)
- 		basic_machine=ns32k-ns
- 		;;
- 	gmicro)
- 		basic_machine=tron-gmicro
- 		os=-sysv
- 		;;
- 	go32)
- 		basic_machine=i386-pc
- 		os=-go32
- 		;;
- 	h3050r* | hiux*)
- 		basic_machine=hppa1.1-hitachi
- 		os=-hiuxwe2
- 		;;
- 	h8300hms)
- 		basic_machine=h8300-hitachi
- 		os=-hms
- 		;;
- 	h8300xray)
- 		basic_machine=h8300-hitachi
- 		os=-xray
- 		;;
- 	h8500hms)
- 		basic_machine=h8500-hitachi
- 		os=-hms
- 		;;
- 	harris)
- 		basic_machine=m88k-harris
- 		os=-sysv3
- 		;;
- 	hp300-*)
- 		basic_machine=m68k-hp
- 		;;
- 	hp300bsd)
- 		basic_machine=m68k-hp
- 		os=-bsd
- 		;;
- 	hp300hpux)
- 		basic_machine=m68k-hp
- 		os=-hpux
- 		;;
- 	hp3k9[0-9][0-9] | hp9[0-9][0-9])
- 		basic_machine=hppa1.0-hp
- 		;;
- 	hp9k2[0-9][0-9] | hp9k31[0-9])
- 		basic_machine=m68000-hp
- 		;;
- 	hp9k3[2-9][0-9])
- 		basic_machine=m68k-hp
- 		;;
- 	hp9k6[0-9][0-9] | hp6[0-9][0-9])
- 		basic_machine=hppa1.0-hp
- 		;;
- 	hp9k7[0-79][0-9] | hp7[0-79][0-9])
- 		basic_machine=hppa1.1-hp
- 		;;
- 	hp9k78[0-9] | hp78[0-9])
- 		# FIXME: really hppa2.0-hp
- 		basic_machine=hppa1.1-hp
- 		;;
- 	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
- 		# FIXME: really hppa2.0-hp
- 		basic_machine=hppa1.1-hp
- 		;;
- 	hp9k8[0-9][13679] | hp8[0-9][13679])
- 		basic_machine=hppa1.1-hp
- 		;;
- 	hp9k8[0-9][0-9] | hp8[0-9][0-9])
- 		basic_machine=hppa1.0-hp
- 		;;
- 	hppa-next)
- 		os=-nextstep3
- 		;;
- 	hppaosf)
- 		basic_machine=hppa1.1-hp
- 		os=-osf
- 		;;
- 	hppro)
- 		basic_machine=hppa1.1-hp
- 		os=-proelf
- 		;;
- 	i370-ibm* | ibm*)
- 		basic_machine=i370-ibm
- 		;;
- # I'm not sure what "Sysv32" means.  Should this be sysv3.2?
- 	i*86v32)
- 		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- 		os=-sysv32
- 		;;
- 	i*86v4*)
- 		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- 		os=-sysv4
- 		;;
- 	i*86v)
- 		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- 		os=-sysv
- 		;;
- 	i*86sol2)
- 		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- 		os=-solaris2
- 		;;
- 	i386mach)
- 		basic_machine=i386-mach
- 		os=-mach
- 		;;
- 	i386-vsta | vsta)
- 		basic_machine=i386-unknown
- 		os=-vsta
- 		;;
- 	iris | iris4d)
- 		basic_machine=mips-sgi
- 		case $os in
- 		    -irix*)
- 			;;
- 		    *)
- 			os=-irix4
- 			;;
- 		esac
- 		;;
- 	isi68 | isi)
- 		basic_machine=m68k-isi
- 		os=-sysv
- 		;;
- 	m88k-omron*)
- 		basic_machine=m88k-omron
- 		;;
- 	magnum | m3230)
- 		basic_machine=mips-mips
- 		os=-sysv
- 		;;
- 	merlin)
- 		basic_machine=ns32k-utek
- 		os=-sysv
- 		;;
- 	mingw32)
- 		basic_machine=i386-pc
- 		os=-mingw32
- 		;;
- 	miniframe)
- 		basic_machine=m68000-convergent
- 		;;
- 	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
- 		basic_machine=m68k-atari
- 		os=-mint
- 		;;
- 	mips3*-*)
- 		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
- 		;;
- 	mips3*)
- 		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
- 		;;
- 	mmix*)
- 		basic_machine=mmix-knuth
- 		os=-mmixware
- 		;;
- 	monitor)
- 		basic_machine=m68k-rom68k
- 		os=-coff
- 		;;
- 	morphos)
- 		basic_machine=powerpc-unknown
- 		os=-morphos
- 		;;
- 	msdos)
- 		basic_machine=i386-pc
- 		os=-msdos
- 		;;
- 	mvs)
- 		basic_machine=i370-ibm
- 		os=-mvs
- 		;;
- 	ncr3000)
- 		basic_machine=i486-ncr
- 		os=-sysv4
- 		;;
- 	netbsd386)
- 		basic_machine=i386-unknown
- 		os=-netbsd
- 		;;
- 	netwinder)
- 		basic_machine=armv4l-rebel
- 		os=-linux
- 		;;
- 	news | news700 | news800 | news900)
- 		basic_machine=m68k-sony
- 		os=-newsos
- 		;;
- 	news1000)
- 		basic_machine=m68030-sony
- 		os=-newsos
- 		;;
- 	news-3600 | risc-news)
- 		basic_machine=mips-sony
- 		os=-newsos
- 		;;
- 	necv70)
- 		basic_machine=v70-nec
- 		os=-sysv
- 		;;
- 	next | m*-next )
- 		basic_machine=m68k-next
- 		case $os in
- 		    -nextstep* )
- 			;;
- 		    -ns2*)
- 		      os=-nextstep2
- 			;;
- 		    *)
- 		      os=-nextstep3
- 			;;
- 		esac
- 		;;
- 	nh3000)
- 		basic_machine=m68k-harris
- 		os=-cxux
- 		;;
- 	nh[45]000)
- 		basic_machine=m88k-harris
- 		os=-cxux
- 		;;
- 	nindy960)
- 		basic_machine=i960-intel
- 		os=-nindy
- 		;;
- 	mon960)
- 		basic_machine=i960-intel
- 		os=-mon960
- 		;;
- 	nonstopux)
- 		basic_machine=mips-compaq
- 		os=-nonstopux
- 		;;
- 	np1)
- 		basic_machine=np1-gould
- 		;;
- 	nv1)
- 		basic_machine=nv1-cray
- 		os=-unicosmp
- 		;;
- 	nsr-tandem)
- 		basic_machine=nsr-tandem
- 		;;
- 	op50n-* | op60c-*)
- 		basic_machine=hppa1.1-oki
- 		os=-proelf
- 		;;
- 	or32 | or32-*)
- 		basic_machine=or32-unknown
- 		os=-coff
- 		;;
- 	os400)
- 		basic_machine=powerpc-ibm
- 		os=-os400
- 		;;
- 	OSE68000 | ose68000)
- 		basic_machine=m68000-ericsson
- 		os=-ose
- 		;;
- 	os68k)
- 		basic_machine=m68k-none
- 		os=-os68k
- 		;;
- 	pa-hitachi)
- 		basic_machine=hppa1.1-hitachi
- 		os=-hiuxwe2
- 		;;
- 	paragon)
- 		basic_machine=i860-intel
- 		os=-osf
- 		;;
- 	pbd)
- 		basic_machine=sparc-tti
- 		;;
- 	pbb)
- 		basic_machine=m68k-tti
- 		;;
- 	pc532 | pc532-*)
- 		basic_machine=ns32k-pc532
- 		;;
- 	pentium | p5 | k5 | k6 | nexgen | viac3)
- 		basic_machine=i586-pc
- 		;;
- 	pentiumpro | p6 | 6x86 | athlon | athlon_*)
- 		basic_machine=i686-pc
- 		;;
- 	pentiumii | pentium2 | pentiumiii | pentium3)
- 		basic_machine=i686-pc
- 		;;
- 	pentium4)
- 		basic_machine=i786-pc
- 		;;
- 	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
- 		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
- 		;;
- 	pentiumpro-* | p6-* | 6x86-* | athlon-*)
- 		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
- 		;;
- 	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
- 		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
- 		;;
- 	pentium4-*)
- 		basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
- 		;;
- 	pn)
- 		basic_machine=pn-gould
- 		;;
- 	power)	basic_machine=power-ibm
- 		;;
- 	ppc)	basic_machine=powerpc-unknown
- 		;;
- 	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
- 		;;
- 	ppcle | powerpclittle | ppc-le | powerpc-little)
- 		basic_machine=powerpcle-unknown
- 		;;
- 	ppcle-* | powerpclittle-*)
- 		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
- 		;;
- 	ppc64)	basic_machine=powerpc64-unknown
- 		;;
- 	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
- 		;;
- 	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
- 		basic_machine=powerpc64le-unknown
- 		;;
- 	ppc64le-* | powerpc64little-*)
- 		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
- 		;;
- 	ps2)
- 		basic_machine=i386-ibm
- 		;;
- 	pw32)
- 		basic_machine=i586-unknown
- 		os=-pw32
- 		;;
- 	rom68k)
- 		basic_machine=m68k-rom68k
- 		os=-coff
- 		;;
- 	rm[46]00)
- 		basic_machine=mips-siemens
- 		;;
- 	rtpc | rtpc-*)
- 		basic_machine=romp-ibm
- 		;;
- 	s390 | s390-*)
- 		basic_machine=s390-ibm
- 		;;
- 	s390x | s390x-*)
- 		basic_machine=s390x-ibm
- 		;;
- 	sa29200)
- 		basic_machine=a29k-amd
- 		os=-udi
- 		;;
- 	sb1)
- 		basic_machine=mipsisa64sb1-unknown
- 		;;
- 	sb1el)
- 		basic_machine=mipsisa64sb1el-unknown
- 		;;
- 	sei)
- 		basic_machine=mips-sei
- 		os=-seiux
- 		;;
- 	sequent)
- 		basic_machine=i386-sequent
- 		;;
- 	sh)
- 		basic_machine=sh-hitachi
- 		os=-hms
- 		;;
- 	sh64)
- 		basic_machine=sh64-unknown
- 		;;
- 	sparclite-wrs | simso-wrs)
- 		basic_machine=sparclite-wrs
- 		os=-vxworks
- 		;;
- 	sps7)
- 		basic_machine=m68k-bull
- 		os=-sysv2
- 		;;
- 	spur)
- 		basic_machine=spur-unknown
- 		;;
- 	st2000)
- 		basic_machine=m68k-tandem
- 		;;
- 	stratus)
- 		basic_machine=i860-stratus
- 		os=-sysv4
- 		;;
- 	sun2)
- 		basic_machine=m68000-sun
- 		;;
- 	sun2os3)
- 		basic_machine=m68000-sun
- 		os=-sunos3
- 		;;
- 	sun2os4)
- 		basic_machine=m68000-sun
- 		os=-sunos4
- 		;;
- 	sun3os3)
- 		basic_machine=m68k-sun
- 		os=-sunos3
- 		;;
- 	sun3os4)
- 		basic_machine=m68k-sun
- 		os=-sunos4
- 		;;
- 	sun4os3)
- 		basic_machine=sparc-sun
- 		os=-sunos3
- 		;;
- 	sun4os4)
- 		basic_machine=sparc-sun
- 		os=-sunos4
- 		;;
- 	sun4sol2)
- 		basic_machine=sparc-sun
- 		os=-solaris2
- 		;;
- 	sun3 | sun3-*)
- 		basic_machine=m68k-sun
- 		;;
- 	sun4)
- 		basic_machine=sparc-sun
- 		;;
- 	sun386 | sun386i | roadrunner)
- 		basic_machine=i386-sun
- 		;;
- 	sv1)
- 		basic_machine=sv1-cray
- 		os=-unicos
- 		;;
- 	symmetry)
- 		basic_machine=i386-sequent
- 		os=-dynix
- 		;;
- 	t3e)
- 		basic_machine=alphaev5-cray
- 		os=-unicos
- 		;;
- 	t90)
- 		basic_machine=t90-cray
- 		os=-unicos
- 		;;
- 	tic54x | c54x*)
- 		basic_machine=tic54x-unknown
- 		os=-coff
- 		;;
- 	tic55x | c55x*)
- 		basic_machine=tic55x-unknown
- 		os=-coff
- 		;;
- 	tic6x | c6x*)
- 		basic_machine=tic6x-unknown
- 		os=-coff
- 		;;
- 	tx39)
- 		basic_machine=mipstx39-unknown
- 		;;
- 	tx39el)
- 		basic_machine=mipstx39el-unknown
- 		;;
- 	toad1)
- 		basic_machine=pdp10-xkl
- 		os=-tops20
- 		;;
- 	tower | tower-32)
- 		basic_machine=m68k-ncr
- 		;;
- 	tpf)
- 		basic_machine=s390x-ibm
- 		os=-tpf
- 		;;
- 	udi29k)
- 		basic_machine=a29k-amd
- 		os=-udi
- 		;;
- 	ultra3)
- 		basic_machine=a29k-nyu
- 		os=-sym1
- 		;;
- 	v810 | necv810)
- 		basic_machine=v810-nec
- 		os=-none
- 		;;
- 	vaxv)
- 		basic_machine=vax-dec
- 		os=-sysv
- 		;;
- 	vms)
- 		basic_machine=vax-dec
- 		os=-vms
- 		;;
- 	vpp*|vx|vx-*)
- 		basic_machine=f301-fujitsu
- 		;;
- 	vxworks960)
- 		basic_machine=i960-wrs
- 		os=-vxworks
- 		;;
- 	vxworks68)
- 		basic_machine=m68k-wrs
- 		os=-vxworks
- 		;;
- 	vxworks29k)
- 		basic_machine=a29k-wrs
- 		os=-vxworks
- 		;;
- 	w65*)
- 		basic_machine=w65-wdc
- 		os=-none
- 		;;
- 	w89k-*)
- 		basic_machine=hppa1.1-winbond
- 		os=-proelf
- 		;;
- 	xps | xps100)
- 		basic_machine=xps100-honeywell
- 		;;
- 	ymp)
- 		basic_machine=ymp-cray
- 		os=-unicos
- 		;;
- 	z8k-*-coff)
- 		basic_machine=z8k-unknown
- 		os=-sim
- 		;;
- 	none)
- 		basic_machine=none-none
- 		os=-none
- 		;;
- 
- # Here we handle the default manufacturer of certain CPU types.  It is in
- # some cases the only manufacturer, in others, it is the most popular.
- 	w89k)
- 		basic_machine=hppa1.1-winbond
- 		;;
- 	op50n)
- 		basic_machine=hppa1.1-oki
- 		;;
- 	op60c)
- 		basic_machine=hppa1.1-oki
- 		;;
- 	romp)
- 		basic_machine=romp-ibm
- 		;;
- 	rs6000)
- 		basic_machine=rs6000-ibm
- 		;;
- 	vax)
- 		basic_machine=vax-dec
- 		;;
- 	pdp10)
- 		# there are many clones, so DEC is not a safe bet
- 		basic_machine=pdp10-unknown
- 		;;
- 	pdp11)
- 		basic_machine=pdp11-dec
- 		;;
- 	we32k)
- 		basic_machine=we32k-att
- 		;;
- 	sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
- 		basic_machine=sh-unknown
- 		;;
- 	sh64)
- 		basic_machine=sh64-unknown
- 		;;
- 	sparc | sparcv9 | sparcv9b)
- 		basic_machine=sparc-sun
- 		;;
- 	cydra)
- 		basic_machine=cydra-cydrome
- 		;;
- 	orion)
- 		basic_machine=orion-highlevel
- 		;;
- 	orion105)
- 		basic_machine=clipper-highlevel
- 		;;
- 	mac | mpw | mac-mpw)
- 		basic_machine=m68k-apple
- 		;;
- 	pmac | pmac-mpw)
- 		basic_machine=powerpc-apple
- 		;;
- 	*-unknown)
- 		# Make sure to match an already-canonicalized machine name.
- 		;;
- 	*)
- 		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
- 		exit 1
- 		;;
- esac
- 
- # Here we canonicalize certain aliases for manufacturers.
- case $basic_machine in
- 	*-digital*)
- 		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
- 		;;
- 	*-commodore*)
- 		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
- 		;;
- 	*)
- 		;;
- esac
- 
- # Decode manufacturer-specific aliases for certain operating systems.
- 
- if [ x"$os" != x"" ]
- then
- case $os in
-         # First match some system type aliases
-         # that might get confused with valid system types.
- 	# -solaris* is a basic system type, with this one exception.
- 	-solaris1 | -solaris1.*)
- 		os=`echo $os | sed -e 's|solaris1|sunos4|'`
- 		;;
- 	-solaris)
- 		os=-solaris2
- 		;;
- 	-svr4*)
- 		os=-sysv4
- 		;;
- 	-unixware*)
- 		os=-sysv4.2uw
- 		;;
- 	-gnu/linux*)
- 		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
- 		;;
- 	# First accept the basic system types.
- 	# The portable systems comes first.
- 	# Each alternative MUST END IN A *, to match a version number.
- 	# -sysv* is not here because it comes later, after sysvr4.
- 	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
- 	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
- 	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
- 	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
- 	      | -aos* \
- 	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
- 	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
- 	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \
- 	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
- 	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
- 	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
- 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
- 	      | -chorusos* | -chorusrdb* \
- 	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
- 	      | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \
- 	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
- 	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
- 	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
- 	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
- 	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
- 	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*)
- 	# Remember, each alternative MUST END IN *, to match a version number.
- 		;;
- 	-qnx*)
- 		case $basic_machine in
- 		    x86-* | i*86-*)
- 			;;
- 		    *)
- 			os=-nto$os
- 			;;
- 		esac
- 		;;
- 	-nto-qnx*)
- 		;;
- 	-nto*)
- 		os=`echo $os | sed -e 's|nto|nto-qnx|'`
- 		;;
- 	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
- 	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
- 	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
- 		;;
- 	-mac*)
- 		os=`echo $os | sed -e 's|mac|macos|'`
- 		;;
- 	-linux-dietlibc)
- 		os=-linux-dietlibc
- 		;;
- 	-linux*)
- 		os=`echo $os | sed -e 's|linux|linux-gnu|'`
- 		;;
- 	-sunos5*)
- 		os=`echo $os | sed -e 's|sunos5|solaris2|'`
- 		;;
- 	-sunos6*)
- 		os=`echo $os | sed -e 's|sunos6|solaris3|'`
- 		;;
- 	-opened*)
- 		os=-openedition
- 		;;
-         -os400*)
- 		os=-os400
- 		;;
- 	-wince*)
- 		os=-wince
- 		;;
- 	-osfrose*)
- 		os=-osfrose
- 		;;
- 	-osf*)
- 		os=-osf
- 		;;
- 	-utek*)
- 		os=-bsd
- 		;;
- 	-dynix*)
- 		os=-bsd
- 		;;
- 	-acis*)
- 		os=-aos
- 		;;
- 	-atheos*)
- 		os=-atheos
- 		;;
- 	-syllable*)
- 		os=-syllable
- 		;;
- 	-386bsd)
- 		os=-bsd
- 		;;
- 	-ctix* | -uts*)
- 		os=-sysv
- 		;;
- 	-nova*)
- 		os=-rtmk-nova
- 		;;
- 	-ns2 )
- 		os=-nextstep2
- 		;;
- 	-nsk*)
- 		os=-nsk
- 		;;
- 	# Preserve the version number of sinix5.
- 	-sinix5.*)
- 		os=`echo $os | sed -e 's|sinix|sysv|'`
- 		;;
- 	-sinix*)
- 		os=-sysv4
- 		;;
-         -tpf*)
- 		os=-tpf
- 		;;
- 	-triton*)
- 		os=-sysv3
- 		;;
- 	-oss*)
- 		os=-sysv3
- 		;;
- 	-svr4)
- 		os=-sysv4
- 		;;
- 	-svr3)
- 		os=-sysv3
- 		;;
- 	-sysvr4)
- 		os=-sysv4
- 		;;
- 	# This must come after -sysvr4.
- 	-sysv*)
- 		;;
- 	-ose*)
- 		os=-ose
- 		;;
- 	-es1800*)
- 		os=-ose
- 		;;
- 	-xenix)
- 		os=-xenix
- 		;;
- 	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
- 		os=-mint
- 		;;
- 	-aros*)
- 		os=-aros
- 		;;
- 	-kaos*)
- 		os=-kaos
- 		;;
- 	-none)
- 		;;
- 	*)
- 		# Get rid of the `-' at the beginning of $os.
- 		os=`echo $os | sed 's/[^-]*-//'`
- 		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
- 		exit 1
- 		;;
- esac
- else
- 
- # Here we handle the default operating systems that come with various machines.
- # The value should be what the vendor currently ships out the door with their
- # machine or put another way, the most popular os provided with the machine.
- 
- # Note that if you're going to try to match "-MANUFACTURER" here (say,
- # "-sun"), then you have to tell the case statement up towards the top
- # that MANUFACTURER isn't an operating system.  Otherwise, code above
- # will signal an error saying that MANUFACTURER isn't an operating
- # system, and we'll never get to this point.
- 
- case $basic_machine in
- 	*-acorn)
- 		os=-riscix1.2
- 		;;
- 	arm*-rebel)
- 		os=-linux
- 		;;
- 	arm*-semi)
- 		os=-aout
- 		;;
-     c4x-* | tic4x-*)
-         os=-coff
-         ;;
- 	# This must come before the *-dec entry.
- 	pdp10-*)
- 		os=-tops20
- 		;;
- 	pdp11-*)
- 		os=-none
- 		;;
- 	*-dec | vax-*)
- 		os=-ultrix4.2
- 		;;
- 	m68*-apollo)
- 		os=-domain
- 		;;
- 	i386-sun)
- 		os=-sunos4.0.2
- 		;;
- 	m68000-sun)
- 		os=-sunos3
- 		# This also exists in the configure program, but was not the
- 		# default.
- 		# os=-sunos4
- 		;;
- 	m68*-cisco)
- 		os=-aout
- 		;;
- 	mips*-cisco)
- 		os=-elf
- 		;;
- 	mips*-*)
- 		os=-elf
- 		;;
- 	or32-*)
- 		os=-coff
- 		;;
- 	*-tti)	# must be before sparc entry or we get the wrong os.
- 		os=-sysv3
- 		;;
- 	sparc-* | *-sun)
- 		os=-sunos4.1.1
- 		;;
- 	*-be)
- 		os=-beos
- 		;;
- 	*-ibm)
- 		os=-aix
- 		;;
- 	*-wec)
- 		os=-proelf
- 		;;
- 	*-winbond)
- 		os=-proelf
- 		;;
- 	*-oki)
- 		os=-proelf
- 		;;
- 	*-hp)
- 		os=-hpux
- 		;;
- 	*-hitachi)
- 		os=-hiux
- 		;;
- 	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
- 		os=-sysv
- 		;;
- 	*-cbm)
- 		os=-amigaos
- 		;;
- 	*-dg)
- 		os=-dgux
- 		;;
- 	*-dolphin)
- 		os=-sysv3
- 		;;
- 	m68k-ccur)
- 		os=-rtu
- 		;;
- 	m88k-omron*)
- 		os=-luna
- 		;;
- 	*-next )
- 		os=-nextstep
- 		;;
- 	*-sequent)
- 		os=-ptx
- 		;;
- 	*-crds)
- 		os=-unos
- 		;;
- 	*-ns)
- 		os=-genix
- 		;;
- 	i370-*)
- 		os=-mvs
- 		;;
- 	*-next)
- 		os=-nextstep3
- 		;;
- 	*-gould)
- 		os=-sysv
- 		;;
- 	*-highlevel)
- 		os=-bsd
- 		;;
- 	*-encore)
- 		os=-bsd
- 		;;
- 	*-sgi)
- 		os=-irix
- 		;;
- 	*-siemens)
- 		os=-sysv4
- 		;;
- 	*-masscomp)
- 		os=-rtu
- 		;;
- 	f30[01]-fujitsu | f700-fujitsu)
- 		os=-uxpv
- 		;;
- 	*-rom68k)
- 		os=-coff
- 		;;
- 	*-*bug)
- 		os=-coff
- 		;;
- 	*-apple)
- 		os=-macos
- 		;;
- 	*-atari*)
- 		os=-mint
- 		;;
- 	*)
- 		os=-none
- 		;;
- esac
- fi
- 
- # Here we handle the case where we know the os, and the CPU type, but not the
- # manufacturer.  We pick the logical manufacturer.
- vendor=unknown
- case $basic_machine in
- 	*-unknown)
- 		case $os in
- 			-riscix*)
- 				vendor=acorn
- 				;;
- 			-sunos*)
- 				vendor=sun
- 				;;
- 			-aix*)
- 				vendor=ibm
- 				;;
- 			-beos*)
- 				vendor=be
- 				;;
- 			-hpux*)
- 				vendor=hp
- 				;;
- 			-mpeix*)
- 				vendor=hp
- 				;;
- 			-hiux*)
- 				vendor=hitachi
- 				;;
- 			-unos*)
- 				vendor=crds
- 				;;
- 			-dgux*)
- 				vendor=dg
- 				;;
- 			-luna*)
- 				vendor=omron
- 				;;
- 			-genix*)
- 				vendor=ns
- 				;;
- 			-mvs* | -opened*)
- 				vendor=ibm
- 				;;
- 			-os400*)
- 				vendor=ibm
- 				;;
- 			-ptx*)
- 				vendor=sequent
- 				;;
- 			-tpf*)
- 				vendor=ibm
- 				;;
- 			-vxsim* | -vxworks* | -windiss*)
- 				vendor=wrs
- 				;;
- 			-aux*)
- 				vendor=apple
- 				;;
- 			-hms*)
- 				vendor=hitachi
- 				;;
- 			-mpw* | -macos*)
- 				vendor=apple
- 				;;
- 			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
- 				vendor=atari
- 				;;
- 			-vos*)
- 				vendor=stratus
- 				;;
- 		esac
- 		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
- 		;;
- esac
- 
- echo $basic_machine$os
- exit 0
- 
- # Local variables:
- # eval: (add-hook 'write-file-hooks 'time-stamp)
- # time-stamp-start: "timestamp='"
- # time-stamp-format: "%:y-%02m-%02d"
- # time-stamp-end: "'"
- # End:
--- 0 ----
diff -Nrcpad gcc-3.4.3/boehm-gc/configure gcc-4.0.0/boehm-gc/configure
*** gcc-3.4.3/boehm-gc/configure	Fri Nov  5 04:14:05 2004
--- gcc-4.0.0/boehm-gc/configure	Thu Apr 21 07:04:10 2005
***************
*** 1,64 ****
  #! /bin/sh
- 
  # Guess values for system-dependent variables and create Makefiles.
! # Generated automatically using autoconf version 2.13 
! # Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
  #
  # This configure script is free software; the Free Software Foundation
  # gives unlimited permission to copy, distribute and modify it.
  
! # Defaults:
! ac_help=
  ac_default_prefix=/usr/local
! # Any additions from configure.in:
! ac_help="$ac_help
!   --enable-multilib       build many library versions (default)"
! ac_help="$ac_help
!   --enable-maintainer-mode enable make rules and dependencies not useful
!                           (and sometimes confusing) to the casual installer"
! ac_help="$ac_help
!   --enable-shared[=PKGS]  build shared libraries [default=yes]"
! ac_help="$ac_help
!   --enable-static[=PKGS]  build static libraries [default=yes]"
! ac_help="$ac_help
!   --enable-fast-install[=PKGS]  optimize for fast installation [default=yes]"
! ac_help="$ac_help
!   --with-gnu-ld           assume the C compiler uses GNU ld [default=no]"
! ac_help="$ac_help
!   --disable-libtool-lock  avoid locking (might break parallel builds)"
! ac_help="$ac_help
!   --with-pic              try to use only PIC/non-PIC objects [default=use both]"
! ac_help="$ac_help
!   --with-target-subdir=SUBDIR
!                           configuring with a cross compiler"
! ac_help="$ac_help
!   --with-cross-host=HOST  configuring with a cross compiler"
! ac_help="$ac_help
!   --enable-maintainer-mode enable make rules and dependencies not useful
!                           (and sometimes confusing) to the casual installer"
! ac_help="$ac_help
!   --enable-parallel-mark	parallelize marking and free list construction"
! ac_help="$ac_help
!   --with-ecos             enable runtime eCos target support"
! ac_help="$ac_help
!   --enable-shared[=PKGS]  build shared libraries [default=yes]"
! ac_help="$ac_help
!   --with-target-subdir=SUBDIR
!                           configuring with a cross compiler"
! ac_help="$ac_help
!   --with-cross-host=HOST  configuring with a cross compiler"
! ac_help="$ac_help
!   --enable-full-debug	include full support for pointer backtracing etc."
  
  # Initialize some variables set by options.
  # The variables have the same names as the options, with
  # dashes changed to underlines.
! build=NONE
! cache_file=./config.cache
  exec_prefix=NONE
- host=NONE
  no_create=
- nonopt=NONE
  no_recursion=
  prefix=NONE
  program_prefix=NONE
--- 1,325 ----
  #! /bin/sh
  # Guess values for system-dependent variables and create Makefiles.
! # Generated by GNU Autoconf 2.59.
  #
+ # Copyright (C) 2003 Free Software Foundation, Inc.
  # This configure script is free software; the Free Software Foundation
  # gives unlimited permission to copy, distribute and modify it.
+ ## --------------------- ##
+ ## M4sh Initialization.  ##
+ ## --------------------- ##
  
! # Be Bourne compatible
! if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
!   emulate sh
!   NULLCMD=:
!   # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
!   # is contrary to our usage.  Disable this feature.
!   alias -g '${1+"$@"}'='"$@"'
! elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
!   set -o posix
! fi
! DUALCASE=1; export DUALCASE # for MKS sh
! 
! # Support unset when possible.
! if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
!   as_unset=unset
! else
!   as_unset=false
! fi
! 
! 
! # Work around bugs in pre-3.0 UWIN ksh.
! $as_unset ENV MAIL MAILPATH
! PS1='$ '
! PS2='> '
! PS4='+ '
! 
! # NLS nuisances.
! for as_var in \
!   LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
!   LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
!   LC_TELEPHONE LC_TIME
! do
!   if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
!     eval $as_var=C; export $as_var
!   else
!     $as_unset $as_var
!   fi
! done
! 
! # Required to use basename.
! if expr a : '\(a\)' >/dev/null 2>&1; then
!   as_expr=expr
! else
!   as_expr=false
! fi
! 
! if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
!   as_basename=basename
! else
!   as_basename=false
! fi
! 
! 
! # Name of the executable.
! as_me=`$as_basename "$0" ||
! $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
! 	 X"$0" : 'X\(//\)$' \| \
! 	 X"$0" : 'X\(/\)$' \| \
! 	 .     : '\(.\)' 2>/dev/null ||
! echo X/"$0" |
!     sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
!   	  /^X\/\(\/\/\)$/{ s//\1/; q; }
!   	  /^X\/\(\/\).*/{ s//\1/; q; }
!   	  s/.*/./; q'`
! 
! 
! # PATH needs CR, and LINENO needs CR and PATH.
! # Avoid depending upon Character Ranges.
! as_cr_letters='abcdefghijklmnopqrstuvwxyz'
! as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
! as_cr_Letters=$as_cr_letters$as_cr_LETTERS
! as_cr_digits='0123456789'
! as_cr_alnum=$as_cr_Letters$as_cr_digits
! 
! # The user is always right.
! if test "${PATH_SEPARATOR+set}" != set; then
!   echo "#! /bin/sh" >conf$$.sh
!   echo  "exit 0"   >>conf$$.sh
!   chmod +x conf$$.sh
!   if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
!     PATH_SEPARATOR=';'
!   else
!     PATH_SEPARATOR=:
!   fi
!   rm -f conf$$.sh
! fi
! 
! 
!   as_lineno_1=$LINENO
!   as_lineno_2=$LINENO
!   as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
!   test "x$as_lineno_1" != "x$as_lineno_2" &&
!   test "x$as_lineno_3"  = "x$as_lineno_2"  || {
!   # Find who we are.  Look in the path if we contain no path at all
!   # relative or not.
!   case $0 in
!     *[\\/]* ) as_myself=$0 ;;
!     *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
! for as_dir in $PATH
! do
!   IFS=$as_save_IFS
!   test -z "$as_dir" && as_dir=.
!   test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
! done
! 
!        ;;
!   esac
!   # We did not find ourselves, most probably we were run as `sh COMMAND'
!   # in which case we are not to be found in the path.
!   if test "x$as_myself" = x; then
!     as_myself=$0
!   fi
!   if test ! -f "$as_myself"; then
!     { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
!    { (exit 1); exit 1; }; }
!   fi
!   case $CONFIG_SHELL in
!   '')
!     as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
! for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
! do
!   IFS=$as_save_IFS
!   test -z "$as_dir" && as_dir=.
!   for as_base in sh bash ksh sh5; do
! 	 case $as_dir in
! 	 /*)
! 	   if ("$as_dir/$as_base" -c '
!   as_lineno_1=$LINENO
!   as_lineno_2=$LINENO
!   as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
!   test "x$as_lineno_1" != "x$as_lineno_2" &&
!   test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
! 	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
! 	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
! 	     CONFIG_SHELL=$as_dir/$as_base
! 	     export CONFIG_SHELL
! 	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
! 	   fi;;
! 	 esac
!        done
! done
! ;;
!   esac
! 
!   # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
!   # uniformly replaced by the line number.  The first 'sed' inserts a
!   # line-number line before each line; the second 'sed' does the real
!   # work.  The second script uses 'N' to pair each line-number line
!   # with the numbered line, and appends trailing '-' during
!   # substitution so that $LINENO is not a special case at line end.
!   # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
!   # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
!   sed '=' <$as_myself |
!     sed '
!       N
!       s,$,-,
!       : loop
!       s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
!       t loop
!       s,-$,,
!       s,^['$as_cr_digits']*\n,,
!     ' >$as_me.lineno &&
!   chmod +x $as_me.lineno ||
!     { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
!    { (exit 1); exit 1; }; }
! 
!   # Don't try to exec as it changes $[0], causing all sort of problems
!   # (the dirname of $[0] is not the place where we might find the
!   # original and so on.  Autoconf is especially sensible to this).
!   . ./$as_me.lineno
!   # Exit status is that of the last command.
!   exit
! }
! 
! 
! case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
!   *c*,-n*) ECHO_N= ECHO_C='
! ' ECHO_T='	' ;;
!   *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
!   *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
! esac
! 
! if expr a : '\(a\)' >/dev/null 2>&1; then
!   as_expr=expr
! else
!   as_expr=false
! fi
! 
! rm -f conf$$ conf$$.exe conf$$.file
! echo >conf$$.file
! if ln -s conf$$.file conf$$ 2>/dev/null; then
!   # We could just check for DJGPP; but this test a) works b) is more generic
!   # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
!   if test -f conf$$.exe; then
!     # Don't use ln at all; we don't have any links
!     as_ln_s='cp -p'
!   else
!     as_ln_s='ln -s'
!   fi
! elif ln conf$$.file conf$$ 2>/dev/null; then
!   as_ln_s=ln
! else
!   as_ln_s='cp -p'
! fi
! rm -f conf$$ conf$$.exe conf$$.file
! 
! if mkdir -p . 2>/dev/null; then
!   as_mkdir_p=:
! else
!   test -d ./-p && rmdir ./-p
!   as_mkdir_p=false
! fi
! 
! as_executable_p="test -f"
! 
! # Sed expression to map a string onto a valid CPP name.
! as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
! 
! # Sed expression to map a string onto a valid variable name.
! as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
! 
! 
! # IFS
! # We need space, tab and new line, in precisely that order.
! as_nl='
! '
! IFS=" 	$as_nl"
! 
! # CDPATH.
! $as_unset CDPATH
! 
! 
! # Name of the host.
! # hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
! # so uname gets run too.
! ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
! 
! exec 6>&1
! 
! #
! # Initializations.
! #
  ac_default_prefix=/usr/local
! ac_config_libobj_dir=.
! cross_compiling=no
! subdirs=
! MFLAGS=
! MAKEFLAGS=
! SHELL=${CONFIG_SHELL-/bin/sh}
! 
! # Maximum number of lines to put in a shell here document.
! # This variable seems obsolete.  It should probably be removed, and
! # only ac_max_sed_lines should be used.
! : ${ac_max_here_lines=38}
! 
! # Identity of this package.
! PACKAGE_NAME=
! PACKAGE_TARNAME=
! PACKAGE_VERSION=
! PACKAGE_STRING=
! PACKAGE_BUGREPORT=
! 
! ac_unique_file="gcj_mlc.c"
! # Factoring default headers for most tests.
! ac_includes_default="\
! #include <stdio.h>
! #if HAVE_SYS_TYPES_H
! # include <sys/types.h>
! #endif
! #if HAVE_SYS_STAT_H
! # include <sys/stat.h>
! #endif
! #if STDC_HEADERS
! # include <stdlib.h>
! # include <stddef.h>
! #else
! # if HAVE_STDLIB_H
! #  include <stdlib.h>
! # endif
! #endif
! #if HAVE_STRING_H
! # if !STDC_HEADERS && HAVE_MEMORY_H
! #  include <memory.h>
! # endif
! # include <string.h>
! #endif
! #if HAVE_STRINGS_H
! # include <strings.h>
! #endif
! #if HAVE_INTTYPES_H
! # include <inttypes.h>
! #else
! # if HAVE_STDINT_H
! #  include <stdint.h>
! # endif
! #endif
! #if HAVE_UNISTD_H
! # include <unistd.h>
! #endif"
! 
! ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS multi_basedir build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os target_noncanonical mkinstalldirs INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar CC ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CXX ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CFLAGS CXXFLAGS CCAS CCASFLAGS AS ac_ct_AS AR ac_ct_AR RANLIB ac_ct_RANLIB MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT GC_CFLAGS LN_S LIBTOOL CXXCPP CPPFLAGS THREADLIBS POWERPC_DARWIN_TRUE POWERPC_DARWIN_FALSE EXTRA_TEST_LIBS target_all CPLUSPLUS_TRUE CPLUSPLUS_FALSE AM_CPPFLAGS addobjs addincludes addlibs addtests CPP EGREP MY_CFLAGS toolexecdir toolexeclibdir LIBOBJS LTLIBOBJS'
! ac_subst_files=''
  
  # Initialize some variables set by options.
+ ac_init_help=
+ ac_init_version=false
  # The variables have the same names as the options, with
  # dashes changed to underlines.
! cache_file=/dev/null
  exec_prefix=NONE
  no_create=
  no_recursion=
  prefix=NONE
  program_prefix=NONE
*************** program_transform_name=s,x,x,
*** 67,76 ****
  silent=
  site=
  srcdir=
- target=NONE
  verbose=
  x_includes=NONE
  x_libraries=NONE
  bindir='${exec_prefix}/bin'
  sbindir='${exec_prefix}/sbin'
  libexecdir='${exec_prefix}/libexec'
--- 328,342 ----
  silent=
  site=
  srcdir=
  verbose=
  x_includes=NONE
  x_libraries=NONE
+ 
+ # Installation directory options.
+ # These are left unexpanded so users can "make install exec_prefix=/foo"
+ # and all the variables that are supposed to be based on exec_prefix
+ # by default will actually change.
+ # Use braces instead of parens because sh, perl, etc. also accept them.
  bindir='${exec_prefix}/bin'
  sbindir='${exec_prefix}/sbin'
  libexecdir='${exec_prefix}/libexec'
*************** oldincludedir='/usr/include'
*** 84,100 ****
  infodir='${prefix}/info'
  mandir='${prefix}/man'
  
- # Initialize some other variables.
- subdirs=
- MFLAGS= MAKEFLAGS=
- SHELL=${CONFIG_SHELL-/bin/sh}
- # Maximum number of lines to put in a shell here document.
- ac_max_here_lines=12
- 
  ac_prev=
  for ac_option
  do
- 
    # If the previous option needs an argument, assign it.
    if test -n "$ac_prev"; then
      eval "$ac_prev=\$ac_option"
--- 350,358 ----
*************** do
*** 102,160 ****
      continue
    fi
  
!   case "$ac_option" in
!   -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
!   *) ac_optarg= ;;
!   esac
  
    # Accept the important Cygnus configure options, so we can diagnose typos.
  
!   case "$ac_option" in
  
    -bindir | --bindir | --bindi | --bind | --bin | --bi)
      ac_prev=bindir ;;
    -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
!     bindir="$ac_optarg" ;;
  
    -build | --build | --buil | --bui | --bu)
!     ac_prev=build ;;
    -build=* | --build=* | --buil=* | --bui=* | --bu=*)
!     build="$ac_optarg" ;;
  
    -cache-file | --cache-file | --cache-fil | --cache-fi \
    | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
      ac_prev=cache_file ;;
    -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
    | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
!     cache_file="$ac_optarg" ;;
  
    -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
      ac_prev=datadir ;;
    -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
    | --da=*)
!     datadir="$ac_optarg" ;;
  
    -disable-* | --disable-*)
!     ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
      # Reject names that are not valid shell variable names.
!     if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
!       { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
!     fi
!     ac_feature=`echo $ac_feature| sed 's/-/_/g'`
!     eval "enable_${ac_feature}=no" ;;
  
    -enable-* | --enable-*)
!     ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
      # Reject names that are not valid shell variable names.
!     if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
!       { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
!     fi
!     ac_feature=`echo $ac_feature| sed 's/-/_/g'`
!     case "$ac_option" in
!       *=*) ;;
        *) ac_optarg=yes ;;
      esac
!     eval "enable_${ac_feature}='$ac_optarg'" ;;
  
    -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
    | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
--- 360,418 ----
      continue
    fi
  
!   ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
  
    # Accept the important Cygnus configure options, so we can diagnose typos.
  
!   case $ac_option in
  
    -bindir | --bindir | --bindi | --bind | --bin | --bi)
      ac_prev=bindir ;;
    -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
!     bindir=$ac_optarg ;;
  
    -build | --build | --buil | --bui | --bu)
!     ac_prev=build_alias ;;
    -build=* | --build=* | --buil=* | --bui=* | --bu=*)
!     build_alias=$ac_optarg ;;
  
    -cache-file | --cache-file | --cache-fil | --cache-fi \
    | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
      ac_prev=cache_file ;;
    -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
    | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
!     cache_file=$ac_optarg ;;
! 
!   --config-cache | -C)
!     cache_file=config.cache ;;
  
    -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
      ac_prev=datadir ;;
    -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
    | --da=*)
!     datadir=$ac_optarg ;;
  
    -disable-* | --disable-*)
!     ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
      # Reject names that are not valid shell variable names.
!     expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
!       { echo "$as_me: error: invalid feature name: $ac_feature" >&2
!    { (exit 1); exit 1; }; }
!     ac_feature=`echo $ac_feature | sed 's/-/_/g'`
!     eval "enable_$ac_feature=no" ;;
  
    -enable-* | --enable-*)
!     ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
      # Reject names that are not valid shell variable names.
!     expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
!       { echo "$as_me: error: invalid feature name: $ac_feature" >&2
!    { (exit 1); exit 1; }; }
!     ac_feature=`echo $ac_feature | sed 's/-/_/g'`
!     case $ac_option in
!       *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
        *) ac_optarg=yes ;;
      esac
!     eval "enable_$ac_feature='$ac_optarg'" ;;
  
    -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
    | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
*************** do
*** 163,257 ****
    -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
    | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
    | --exec=* | --exe=* | --ex=*)
!     exec_prefix="$ac_optarg" ;;
  
    -gas | --gas | --ga | --g)
      # Obsolete; use --with-gas.
      with_gas=yes ;;
  
!   -help | --help | --hel | --he)
!     # Omit some internal or obsolete options to make the list less imposing.
!     # This message is too long to be a string in the A/UX 3.1 sh.
!     cat << EOF
! Usage: configure [options] [host]
! Options: [defaults in brackets after descriptions]
! Configuration:
!   --cache-file=FILE       cache test results in FILE
!   --help                  print this message
!   --no-create             do not create output files
!   --quiet, --silent       do not print \`checking...' messages
!   --version               print the version of autoconf that created configure
! Directory and file names:
!   --prefix=PREFIX         install architecture-independent files in PREFIX
!                           [$ac_default_prefix]
!   --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
!                           [same as prefix]
!   --bindir=DIR            user executables in DIR [EPREFIX/bin]
!   --sbindir=DIR           system admin executables in DIR [EPREFIX/sbin]
!   --libexecdir=DIR        program executables in DIR [EPREFIX/libexec]
!   --datadir=DIR           read-only architecture-independent data in DIR
!                           [PREFIX/share]
!   --sysconfdir=DIR        read-only single-machine data in DIR [PREFIX/etc]
!   --sharedstatedir=DIR    modifiable architecture-independent data in DIR
!                           [PREFIX/com]
!   --localstatedir=DIR     modifiable single-machine data in DIR [PREFIX/var]
!   --libdir=DIR            object code libraries in DIR [EPREFIX/lib]
!   --includedir=DIR        C header files in DIR [PREFIX/include]
!   --oldincludedir=DIR     C header files for non-gcc in DIR [/usr/include]
!   --infodir=DIR           info documentation in DIR [PREFIX/info]
!   --mandir=DIR            man documentation in DIR [PREFIX/man]
!   --srcdir=DIR            find the sources in DIR [configure dir or ..]
!   --program-prefix=PREFIX prepend PREFIX to installed program names
!   --program-suffix=SUFFIX append SUFFIX to installed program names
!   --program-transform-name=PROGRAM
!                           run sed PROGRAM on installed program names
! EOF
!     cat << EOF
! Host type:
!   --build=BUILD           configure for building on BUILD [BUILD=HOST]
!   --host=HOST             configure for HOST [guessed]
!   --target=TARGET         configure for TARGET [TARGET=HOST]
! Features and packages:
!   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
!   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
!   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
!   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
!   --x-includes=DIR        X include files are in DIR
!   --x-libraries=DIR       X library files are in DIR
! EOF
!     if test -n "$ac_help"; then
!       echo "--enable and --with options recognized:$ac_help"
!     fi
!     exit 0 ;;
  
    -host | --host | --hos | --ho)
!     ac_prev=host ;;
    -host=* | --host=* | --hos=* | --ho=*)
!     host="$ac_optarg" ;;
  
    -includedir | --includedir | --includedi | --included | --include \
    | --includ | --inclu | --incl | --inc)
      ac_prev=includedir ;;
    -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
    | --includ=* | --inclu=* | --incl=* | --inc=*)
!     includedir="$ac_optarg" ;;
  
    -infodir | --infodir | --infodi | --infod | --info | --inf)
      ac_prev=infodir ;;
    -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
!     infodir="$ac_optarg" ;;
  
    -libdir | --libdir | --libdi | --libd)
      ac_prev=libdir ;;
    -libdir=* | --libdir=* | --libdi=* | --libd=*)
!     libdir="$ac_optarg" ;;
  
    -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
    | --libexe | --libex | --libe)
      ac_prev=libexecdir ;;
    -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
    | --libexe=* | --libex=* | --libe=*)
!     libexecdir="$ac_optarg" ;;
  
    -localstatedir | --localstatedir | --localstatedi | --localstated \
    | --localstate | --localstat | --localsta | --localst \
--- 421,467 ----
    -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
    | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
    | --exec=* | --exe=* | --ex=*)
!     exec_prefix=$ac_optarg ;;
  
    -gas | --gas | --ga | --g)
      # Obsolete; use --with-gas.
      with_gas=yes ;;
  
!   -help | --help | --hel | --he | -h)
!     ac_init_help=long ;;
!   -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
!     ac_init_help=recursive ;;
!   -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
!     ac_init_help=short ;;
  
    -host | --host | --hos | --ho)
!     ac_prev=host_alias ;;
    -host=* | --host=* | --hos=* | --ho=*)
!     host_alias=$ac_optarg ;;
  
    -includedir | --includedir | --includedi | --included | --include \
    | --includ | --inclu | --incl | --inc)
      ac_prev=includedir ;;
    -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
    | --includ=* | --inclu=* | --incl=* | --inc=*)
!     includedir=$ac_optarg ;;
  
    -infodir | --infodir | --infodi | --infod | --info | --inf)
      ac_prev=infodir ;;
    -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
!     infodir=$ac_optarg ;;
  
    -libdir | --libdir | --libdi | --libd)
      ac_prev=libdir ;;
    -libdir=* | --libdir=* | --libdi=* | --libd=*)
!     libdir=$ac_optarg ;;
  
    -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
    | --libexe | --libex | --libe)
      ac_prev=libexecdir ;;
    -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
    | --libexe=* | --libex=* | --libe=*)
!     libexecdir=$ac_optarg ;;
  
    -localstatedir | --localstatedir | --localstatedi | --localstated \
    | --localstate | --localstat | --localsta | --localst \
*************** EOF
*** 260,278 ****
    -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
    | --localstate=* | --localstat=* | --localsta=* | --localst=* \
    | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
!     localstatedir="$ac_optarg" ;;
  
    -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
      ac_prev=mandir ;;
    -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
!     mandir="$ac_optarg" ;;
  
    -nfp | --nfp | --nf)
      # Obsolete; use --without-fp.
      with_fp=no ;;
  
    -no-create | --no-create | --no-creat | --no-crea | --no-cre \
!   | --no-cr | --no-c)
      no_create=yes ;;
  
    -no-recursion | --no-recursion | --no-recursio | --no-recursi \
--- 470,488 ----
    -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
    | --localstate=* | --localstat=* | --localsta=* | --localst=* \
    | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
!     localstatedir=$ac_optarg ;;
  
    -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
      ac_prev=mandir ;;
    -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
!     mandir=$ac_optarg ;;
  
    -nfp | --nfp | --nf)
      # Obsolete; use --without-fp.
      with_fp=no ;;
  
    -no-create | --no-create | --no-creat | --no-crea | --no-cre \
!   | --no-cr | --no-c | -n)
      no_create=yes ;;
  
    -no-recursion | --no-recursion | --no-recursio | --no-recursi \
*************** EOF
*** 286,311 ****
    -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
    | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
    | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
!     oldincludedir="$ac_optarg" ;;
  
    -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
      ac_prev=prefix ;;
    -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
!     prefix="$ac_optarg" ;;
  
    -program-prefix | --program-prefix | --program-prefi | --program-pref \
    | --program-pre | --program-pr | --program-p)
      ac_prev=program_prefix ;;
    -program-prefix=* | --program-prefix=* | --program-prefi=* \
    | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
!     program_prefix="$ac_optarg" ;;
  
    -program-suffix | --program-suffix | --program-suffi | --program-suff \
    | --program-suf | --program-su | --program-s)
      ac_prev=program_suffix ;;
    -program-suffix=* | --program-suffix=* | --program-suffi=* \
    | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
!     program_suffix="$ac_optarg" ;;
  
    -program-transform-name | --program-transform-name \
    | --program-transform-nam | --program-transform-na \
--- 496,521 ----
    -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
    | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
    | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
!     oldincludedir=$ac_optarg ;;
  
    -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
      ac_prev=prefix ;;
    -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
!     prefix=$ac_optarg ;;
  
    -program-prefix | --program-prefix | --program-prefi | --program-pref \
    | --program-pre | --program-pr | --program-p)
      ac_prev=program_prefix ;;
    -program-prefix=* | --program-prefix=* | --program-prefi=* \
    | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
!     program_prefix=$ac_optarg ;;
  
    -program-suffix | --program-suffix | --program-suffi | --program-suff \
    | --program-suf | --program-su | --program-s)
      ac_prev=program_suffix ;;
    -program-suffix=* | --program-suffix=* | --program-suffi=* \
    | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
!     program_suffix=$ac_optarg ;;
  
    -program-transform-name | --program-transform-name \
    | --program-transform-nam | --program-transform-na \
*************** EOF
*** 322,328 ****
    | --program-transfo=* | --program-transf=* \
    | --program-trans=* | --program-tran=* \
    | --progr-tra=* | --program-tr=* | --program-t=*)
!     program_transform_name="$ac_optarg" ;;
  
    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
    | -silent | --silent | --silen | --sile | --sil)
--- 532,538 ----
    | --program-transfo=* | --program-transf=* \
    | --program-trans=* | --program-tran=* \
    | --progr-tra=* | --program-tr=* | --program-t=*)
!     program_transform_name=$ac_optarg ;;
  
    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
    | -silent | --silent | --silen | --sile | --sil)
*************** EOF
*** 332,338 ****
      ac_prev=sbindir ;;
    -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
    | --sbi=* | --sb=*)
!     sbindir="$ac_optarg" ;;
  
    -sharedstatedir | --sharedstatedir | --sharedstatedi \
    | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
--- 542,548 ----
      ac_prev=sbindir ;;
    -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
    | --sbi=* | --sb=*)
!     sbindir=$ac_optarg ;;
  
    -sharedstatedir | --sharedstatedir | --sharedstatedi \
    | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
*************** EOF
*** 343,400 ****
    | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
    | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
    | --sha=* | --sh=*)
!     sharedstatedir="$ac_optarg" ;;
  
    -site | --site | --sit)
      ac_prev=site ;;
    -site=* | --site=* | --sit=*)
!     site="$ac_optarg" ;;
  
    -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
      ac_prev=srcdir ;;
    -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
!     srcdir="$ac_optarg" ;;
  
    -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
    | --syscon | --sysco | --sysc | --sys | --sy)
      ac_prev=sysconfdir ;;
    -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
    | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
!     sysconfdir="$ac_optarg" ;;
  
    -target | --target | --targe | --targ | --tar | --ta | --t)
!     ac_prev=target ;;
    -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
!     target="$ac_optarg" ;;
  
    -v | -verbose | --verbose | --verbos | --verbo | --verb)
      verbose=yes ;;
  
!   -version | --version | --versio | --versi | --vers)
!     echo "configure generated by autoconf version 2.13"
!     exit 0 ;;
  
    -with-* | --with-*)
!     ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
      # Reject names that are not valid shell variable names.
!     if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
!       { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
!     fi
      ac_package=`echo $ac_package| sed 's/-/_/g'`
!     case "$ac_option" in
!       *=*) ;;
        *) ac_optarg=yes ;;
      esac
!     eval "with_${ac_package}='$ac_optarg'" ;;
  
    -without-* | --without-*)
!     ac_package=`echo $ac_option|sed -e 's/-*without-//'`
      # Reject names that are not valid shell variable names.
!     if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
!       { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
!     fi
!     ac_package=`echo $ac_package| sed 's/-/_/g'`
!     eval "with_${ac_package}=no" ;;
  
    --x)
      # Obsolete; use --with-x.
--- 553,609 ----
    | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
    | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
    | --sha=* | --sh=*)
!     sharedstatedir=$ac_optarg ;;
  
    -site | --site | --sit)
      ac_prev=site ;;
    -site=* | --site=* | --sit=*)
!     site=$ac_optarg ;;
  
    -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
      ac_prev=srcdir ;;
    -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
!     srcdir=$ac_optarg ;;
  
    -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
    | --syscon | --sysco | --sysc | --sys | --sy)
      ac_prev=sysconfdir ;;
    -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
    | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
!     sysconfdir=$ac_optarg ;;
  
    -target | --target | --targe | --targ | --tar | --ta | --t)
!     ac_prev=target_alias ;;
    -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
!     target_alias=$ac_optarg ;;
  
    -v | -verbose | --verbose | --verbos | --verbo | --verb)
      verbose=yes ;;
  
!   -version | --version | --versio | --versi | --vers | -V)
!     ac_init_version=: ;;
  
    -with-* | --with-*)
!     ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
      # Reject names that are not valid shell variable names.
!     expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
!       { echo "$as_me: error: invalid package name: $ac_package" >&2
!    { (exit 1); exit 1; }; }
      ac_package=`echo $ac_package| sed 's/-/_/g'`
!     case $ac_option in
!       *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
        *) ac_optarg=yes ;;
      esac
!     eval "with_$ac_package='$ac_optarg'" ;;
  
    -without-* | --without-*)
!     ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
      # Reject names that are not valid shell variable names.
!     expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
!       { echo "$as_me: error: invalid package name: $ac_package" >&2
!    { (exit 1); exit 1; }; }
!     ac_package=`echo $ac_package | sed 's/-/_/g'`
!     eval "with_$ac_package=no" ;;
  
    --x)
      # Obsolete; use --with-x.
*************** EOF
*** 405,503 ****
      ac_prev=x_includes ;;
    -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
    | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
!     x_includes="$ac_optarg" ;;
  
    -x-libraries | --x-libraries | --x-librarie | --x-librari \
    | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
      ac_prev=x_libraries ;;
    -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
    | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
!     x_libraries="$ac_optarg" ;;
  
!   -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
      ;;
  
    *)
!     if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
!       echo "configure: warning: $ac_option: invalid host type" 1>&2
!     fi
!     if test "x$nonopt" != xNONE; then
!       { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
!     fi
!     nonopt="$ac_option"
      ;;
  
    esac
  done
  
  if test -n "$ac_prev"; then
!   { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
! fi
! 
! trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
! 
! # File descriptor usage:
! # 0 standard input
! # 1 file creation
! # 2 errors and warnings
! # 3 some systems may open it to /dev/tty
! # 4 used on the Kubota Titan
! # 6 checking for... messages and results
! # 5 compiler messages saved in config.log
! if test "$silent" = yes; then
!   exec 6>/dev/null
! else
!   exec 6>&1
  fi
- exec 5>./config.log
  
! echo "\
! This file contains any messages produced by compilers while
! running configure, to aid debugging if configure makes a mistake.
! " 1>&5
  
! # Strip out --no-create and --no-recursion so they do not pile up.
! # Also quote any args containing shell metacharacters.
! ac_configure_args=
! for ac_arg
  do
!   case "$ac_arg" in
!   -no-create | --no-create | --no-creat | --no-crea | --no-cre \
!   | --no-cr | --no-c) ;;
!   -no-recursion | --no-recursion | --no-recursio | --no-recursi \
!   | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
!   *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
!   ac_configure_args="$ac_configure_args '$ac_arg'" ;;
!   *) ac_configure_args="$ac_configure_args $ac_arg" ;;
    esac
  done
  
! # NLS nuisances.
! # Only set these to C if already set.  These must not be set unconditionally
! # because not all systems understand e.g. LANG=C (notably SCO).
! # Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
! # Non-C LC_CTYPE values break the ctype check.
! if test "${LANG+set}"   = set; then LANG=C;   export LANG;   fi
! if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
! if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
! if test "${LC_CTYPE+set}"    = set; then LC_CTYPE=C;    export LC_CTYPE;    fi
  
! # confdefs.h avoids OS command line length limits that DEFS can exceed.
! rm -rf conftest* confdefs.h
! # AIX cpp loses on an empty file, so make sure it contains at least a newline.
! echo > confdefs.h
  
- # A filename unique to this package, relative to the directory that
- # configure is in, which we can look for to find out if srcdir is correct.
- ac_unique_file=gcj_mlc.c
  
  # Find the source files, if location was not specified.
  if test -z "$srcdir"; then
    ac_srcdir_defaulted=yes
    # Try the directory containing this script, then its parent.
!   ac_prog=$0
!   ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
!   test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
    srcdir=$ac_confdir
    if test ! -r $srcdir/$ac_unique_file; then
      srcdir=..
--- 614,723 ----
      ac_prev=x_includes ;;
    -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
    | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
!     x_includes=$ac_optarg ;;
  
    -x-libraries | --x-libraries | --x-librarie | --x-librari \
    | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
      ac_prev=x_libraries ;;
    -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
    | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
!     x_libraries=$ac_optarg ;;
  
!   -*) { echo "$as_me: error: unrecognized option: $ac_option
! Try \`$0 --help' for more information." >&2
!    { (exit 1); exit 1; }; }
      ;;
  
+   *=*)
+     ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+     # Reject names that are not valid shell variable names.
+     expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+       { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+    { (exit 1); exit 1; }; }
+     ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
+     eval "$ac_envvar='$ac_optarg'"
+     export $ac_envvar ;;
+ 
    *)
!     # FIXME: should be removed in autoconf 3.0.
!     echo "$as_me: WARNING: you should use --build, --host, --target" >&2
!     expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
!       echo "$as_me: WARNING: invalid host type: $ac_option" >&2
!     : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
      ;;
  
    esac
  done
  
  if test -n "$ac_prev"; then
!   ac_option=--`echo $ac_prev | sed 's/_/-/g'`
!   { echo "$as_me: error: missing argument to $ac_option" >&2
!    { (exit 1); exit 1; }; }
  fi
  
! # Be sure to have absolute paths.
! for ac_var in exec_prefix prefix
! do
!   eval ac_val=$`echo $ac_var`
!   case $ac_val in
!     [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
!     *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
!    { (exit 1); exit 1; }; };;
!   esac
! done
  
! # Be sure to have absolute paths.
! for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
! 	      localstatedir libdir includedir oldincludedir infodir mandir
  do
!   eval ac_val=$`echo $ac_var`
!   case $ac_val in
!     [\\/$]* | ?:[\\/]* ) ;;
!     *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
!    { (exit 1); exit 1; }; };;
    esac
  done
  
! # There might be people who depend on the old broken behavior: `$host'
! # used to hold the argument of --host etc.
! # FIXME: To remove some day.
! build=$build_alias
! host=$host_alias
! target=$target_alias
  
! # FIXME: To remove some day.
! if test "x$host_alias" != x; then
!   if test "x$build_alias" = x; then
!     cross_compiling=maybe
!     echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
!     If a cross compiler is detected then cross compile mode will be used." >&2
!   elif test "x$build_alias" != "x$host_alias"; then
!     cross_compiling=yes
!   fi
! fi
! 
! ac_tool_prefix=
! test -n "$host_alias" && ac_tool_prefix=$host_alias-
! 
! test "$silent" = yes && exec 6>/dev/null
  
  
  # Find the source files, if location was not specified.
  if test -z "$srcdir"; then
    ac_srcdir_defaulted=yes
    # Try the directory containing this script, then its parent.
!   ac_confdir=`(dirname "$0") 2>/dev/null ||
! $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
! 	 X"$0" : 'X\(//\)[^/]' \| \
! 	 X"$0" : 'X\(//\)$' \| \
! 	 X"$0" : 'X\(/\)' \| \
! 	 .     : '\(.\)' 2>/dev/null ||
! echo X"$0" |
!     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
!   	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
!   	  /^X\(\/\/\)$/{ s//\1/; q; }
!   	  /^X\(\/\).*/{ s//\1/; q; }
!   	  s/.*/./; q'`
    srcdir=$ac_confdir
    if test ! -r $srcdir/$ac_unique_file; then
      srcdir=..
*************** else
*** 507,519 ****
  fi
  if test ! -r $srcdir/$ac_unique_file; then
    if test "$ac_srcdir_defaulted" = yes; then
!     { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
    else
!     { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
    fi
  fi
! srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
  
  # Prefer explicitly selected file to automatically selected ones.
  if test -z "$CONFIG_SITE"; then
    if test "x$prefix" != xNONE; then
--- 727,1210 ----
  fi
  if test ! -r $srcdir/$ac_unique_file; then
    if test "$ac_srcdir_defaulted" = yes; then
!     { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
!    { (exit 1); exit 1; }; }
    else
!     { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
!    { (exit 1); exit 1; }; }
    fi
  fi
! (cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
!   { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
!    { (exit 1); exit 1; }; }
! srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
! ac_env_build_alias_set=${build_alias+set}
! ac_env_build_alias_value=$build_alias
! ac_cv_env_build_alias_set=${build_alias+set}
! ac_cv_env_build_alias_value=$build_alias
! ac_env_host_alias_set=${host_alias+set}
! ac_env_host_alias_value=$host_alias
! ac_cv_env_host_alias_set=${host_alias+set}
! ac_cv_env_host_alias_value=$host_alias
! ac_env_target_alias_set=${target_alias+set}
! ac_env_target_alias_value=$target_alias
! ac_cv_env_target_alias_set=${target_alias+set}
! ac_cv_env_target_alias_value=$target_alias
! ac_env_CXXCPP_set=${CXXCPP+set}
! ac_env_CXXCPP_value=$CXXCPP
! ac_cv_env_CXXCPP_set=${CXXCPP+set}
! ac_cv_env_CXXCPP_value=$CXXCPP
! ac_env_CPPFLAGS_set=${CPPFLAGS+set}
! ac_env_CPPFLAGS_value=$CPPFLAGS
! ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
! ac_cv_env_CPPFLAGS_value=$CPPFLAGS
! ac_env_CPP_set=${CPP+set}
! ac_env_CPP_value=$CPP
! ac_cv_env_CPP_set=${CPP+set}
! ac_cv_env_CPP_value=$CPP
! 
! #
! # Report the --help message.
! #
! if test "$ac_init_help" = "long"; then
!   # Omit some internal or obsolete options to make the list less imposing.
!   # This message is too long to be a string in the A/UX 3.1 sh.
!   cat <<_ACEOF
! \`configure' configures this package to adapt to many kinds of systems.
! 
! Usage: $0 [OPTION]... [VAR=VALUE]...
! 
! To assign environment variables (e.g., CC, CFLAGS...), specify them as
! VAR=VALUE.  See below for descriptions of some of the useful variables.
! 
! Defaults for the options are specified in brackets.
! 
! Configuration:
!   -h, --help              display this help and exit
!       --help=short        display options specific to this package
!       --help=recursive    display the short help of all the included packages
!   -V, --version           display version information and exit
!   -q, --quiet, --silent   do not print \`checking...' messages
!       --cache-file=FILE   cache test results in FILE [disabled]
!   -C, --config-cache      alias for \`--cache-file=config.cache'
!   -n, --no-create         do not create output files
!       --srcdir=DIR        find the sources in DIR [configure dir or \`..']
! 
! _ACEOF
  
+   cat <<_ACEOF
+ Installation directories:
+   --prefix=PREFIX         install architecture-independent files in PREFIX
+ 			  [$ac_default_prefix]
+   --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+ 			  [PREFIX]
+ 
+ By default, \`make install' will install all the files in
+ \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+ an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+ for instance \`--prefix=\$HOME'.
+ 
+ For better control, use the options below.
+ 
+ Fine tuning of the installation directories:
+   --bindir=DIR           user executables [EPREFIX/bin]
+   --sbindir=DIR          system admin executables [EPREFIX/sbin]
+   --libexecdir=DIR       program executables [EPREFIX/libexec]
+   --datadir=DIR          read-only architecture-independent data [PREFIX/share]
+   --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
+   --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
+   --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
+   --libdir=DIR           object code libraries [EPREFIX/lib]
+   --includedir=DIR       C header files [PREFIX/include]
+   --oldincludedir=DIR    C header files for non-gcc [/usr/include]
+   --infodir=DIR          info documentation [PREFIX/info]
+   --mandir=DIR           man documentation [PREFIX/man]
+ _ACEOF
+ 
+   cat <<\_ACEOF
+ 
+ Program names:
+   --program-prefix=PREFIX            prepend PREFIX to installed program names
+   --program-suffix=SUFFIX            append SUFFIX to installed program names
+   --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
+ 
+ System types:
+   --build=BUILD     configure for building on BUILD [guessed]
+   --host=HOST       cross-compile to build programs to run on HOST [BUILD]
+   --target=TARGET   configure for building compilers for TARGET [HOST]
+ _ACEOF
+ fi
+ 
+ if test -n "$ac_init_help"; then
+ 
+   cat <<\_ACEOF
+ 
+ Optional Features:
+   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+   --enable-multilib       build many library versions (default)
+   --disable-dependency-tracking  speeds up one-time build
+   --enable-dependency-tracking   do not reject slow dependency extractors
+   --enable-maintainer-mode  enable make rules and dependencies not useful
+ 			  (and sometimes confusing) to the casual installer
+   --enable-shared=PKGS  build shared libraries default=yes
+   --enable-static=PKGS  build static libraries default=yes
+   --enable-fast-install=PKGS  optimize for fast installation default=yes
+   --disable-libtool-lock  avoid locking (might break parallel builds)
+   --enable-parallel-mark	parallelize marking and free list construction
+   --enable-gc-debug	include full support for pointer backtracing etc.
+ 
+ Optional Packages:
+   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+   --with-gnu-ld           assume the C compiler uses GNU ld default=no
+   --with-pic              try to use only PIC/non-PIC objects default=use both
+   --with-target-subdir=SUBDIR
+                           configuring with a cross compiler
+   --with-cross-host=HOST  configuring with a cross compiler
+   --with-ecos             enable runtime eCos target support
+ 
+ Some influential environment variables:
+   CC          C compiler command
+   CFLAGS      C compiler flags
+   LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+               nonstandard directory <lib dir>
+   CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
+               headers in a nonstandard directory <include dir>
+   CXX         C++ compiler command
+   CXXFLAGS    C++ compiler flags
+   CXXCPP      C++ preprocessor
+   CPP         C preprocessor
+ 
+ Use these variables to override the choices made by `configure' or to help
+ it to find libraries and programs with nonstandard names/locations.
+ 
+ _ACEOF
+ fi
+ 
+ if test "$ac_init_help" = "recursive"; then
+   # If there are subdirs, report their specific --help.
+   ac_popdir=`pwd`
+   for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+     test -d $ac_dir || continue
+     ac_builddir=.
+ 
+ if test "$ac_dir" != .; then
+   ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+   # A "../" for each directory in $ac_dir_suffix.
+   ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+ else
+   ac_dir_suffix= ac_top_builddir=
+ fi
+ 
+ case $srcdir in
+   .)  # No --srcdir option.  We are building in place.
+     ac_srcdir=.
+     if test -z "$ac_top_builddir"; then
+        ac_top_srcdir=.
+     else
+        ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+     fi ;;
+   [\\/]* | ?:[\\/]* )  # Absolute path.
+     ac_srcdir=$srcdir$ac_dir_suffix;
+     ac_top_srcdir=$srcdir ;;
+   *) # Relative path.
+     ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+     ac_top_srcdir=$ac_top_builddir$srcdir ;;
+ esac
+ 
+ # Do not use `cd foo && pwd` to compute absolute paths, because
+ # the directories may not exist.
+ case `pwd` in
+ .) ac_abs_builddir="$ac_dir";;
+ *)
+   case "$ac_dir" in
+   .) ac_abs_builddir=`pwd`;;
+   [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+   *) ac_abs_builddir=`pwd`/"$ac_dir";;
+   esac;;
+ esac
+ case $ac_abs_builddir in
+ .) ac_abs_top_builddir=${ac_top_builddir}.;;
+ *)
+   case ${ac_top_builddir}. in
+   .) ac_abs_top_builddir=$ac_abs_builddir;;
+   [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+   *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+   esac;;
+ esac
+ case $ac_abs_builddir in
+ .) ac_abs_srcdir=$ac_srcdir;;
+ *)
+   case $ac_srcdir in
+   .) ac_abs_srcdir=$ac_abs_builddir;;
+   [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+   *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+   esac;;
+ esac
+ case $ac_abs_builddir in
+ .) ac_abs_top_srcdir=$ac_top_srcdir;;
+ *)
+   case $ac_top_srcdir in
+   .) ac_abs_top_srcdir=$ac_abs_builddir;;
+   [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+   *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+   esac;;
+ esac
+ 
+     cd $ac_dir
+     # Check for guested configure; otherwise get Cygnus style configure.
+     if test -f $ac_srcdir/configure.gnu; then
+       echo
+       $SHELL $ac_srcdir/configure.gnu  --help=recursive
+     elif test -f $ac_srcdir/configure; then
+       echo
+       $SHELL $ac_srcdir/configure  --help=recursive
+     elif test -f $ac_srcdir/configure.ac ||
+ 	   test -f $ac_srcdir/configure.in; then
+       echo
+       $ac_configure --help
+     else
+       echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+     fi
+     cd $ac_popdir
+   done
+ fi
+ 
+ test -n "$ac_init_help" && exit 0
+ if $ac_init_version; then
+   cat <<\_ACEOF
+ 
+ Copyright (C) 2003 Free Software Foundation, Inc.
+ This configure script is free software; the Free Software Foundation
+ gives unlimited permission to copy, distribute and modify it.
+ _ACEOF
+   exit 0
+ fi
+ exec 5>config.log
+ cat >&5 <<_ACEOF
+ This file contains any messages produced by compilers while
+ running configure, to aid debugging if configure makes a mistake.
+ 
+ It was created by $as_me, which was
+ generated by GNU Autoconf 2.59.  Invocation command line was
+ 
+   $ $0 $@
+ 
+ _ACEOF
+ {
+ cat <<_ASUNAME
+ ## --------- ##
+ ## Platform. ##
+ ## --------- ##
+ 
+ hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+ uname -m = `(uname -m) 2>/dev/null || echo unknown`
+ uname -r = `(uname -r) 2>/dev/null || echo unknown`
+ uname -s = `(uname -s) 2>/dev/null || echo unknown`
+ uname -v = `(uname -v) 2>/dev/null || echo unknown`
+ 
+ /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+ /bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+ 
+ /bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+ /usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+ /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+ hostinfo               = `(hostinfo) 2>/dev/null               || echo unknown`
+ /bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+ /usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+ /bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+ 
+ _ASUNAME
+ 
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   echo "PATH: $as_dir"
+ done
+ 
+ } >&5
+ 
+ cat >&5 <<_ACEOF
+ 
+ 
+ ## ----------- ##
+ ## Core tests. ##
+ ## ----------- ##
+ 
+ _ACEOF
+ 
+ 
+ # Keep a trace of the command line.
+ # Strip out --no-create and --no-recursion so they do not pile up.
+ # Strip out --silent because we don't want to record it for future runs.
+ # Also quote any args containing shell meta-characters.
+ # Make two passes to allow for proper duplicate-argument suppression.
+ ac_configure_args=
+ ac_configure_args0=
+ ac_configure_args1=
+ ac_sep=
+ ac_must_keep_next=false
+ for ac_pass in 1 2
+ do
+   for ac_arg
+   do
+     case $ac_arg in
+     -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+     -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+     | -silent | --silent | --silen | --sile | --sil)
+       continue ;;
+     *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+       ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+     esac
+     case $ac_pass in
+     1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+     2)
+       ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+       if test $ac_must_keep_next = true; then
+ 	ac_must_keep_next=false # Got value, back to normal.
+       else
+ 	case $ac_arg in
+ 	  *=* | --config-cache | -C | -disable-* | --disable-* \
+ 	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+ 	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+ 	  | -with-* | --with-* | -without-* | --without-* | --x)
+ 	    case "$ac_configure_args0 " in
+ 	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+ 	    esac
+ 	    ;;
+ 	  -* ) ac_must_keep_next=true ;;
+ 	esac
+       fi
+       ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
+       # Get rid of the leading space.
+       ac_sep=" "
+       ;;
+     esac
+   done
+ done
+ $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+ $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+ 
+ # When interrupted or exit'd, cleanup temporary files, and complete
+ # config.log.  We remove comments because anyway the quotes in there
+ # would cause problems or look ugly.
+ # WARNING: Be sure not to use single quotes in there, as some shells,
+ # such as our DU 5.0 friend, will then `close' the trap.
+ trap 'exit_status=$?
+   # Save into config.log some information that might help in debugging.
+   {
+     echo
+ 
+     cat <<\_ASBOX
+ ## ---------------- ##
+ ## Cache variables. ##
+ ## ---------------- ##
+ _ASBOX
+     echo
+     # The following way of writing the cache mishandles newlines in values,
+ {
+   (set) 2>&1 |
+     case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
+     *ac_space=\ *)
+       sed -n \
+ 	"s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
+ 	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
+       ;;
+     *)
+       sed -n \
+ 	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+       ;;
+     esac;
+ }
+     echo
+ 
+     cat <<\_ASBOX
+ ## ----------------- ##
+ ## Output variables. ##
+ ## ----------------- ##
+ _ASBOX
+     echo
+     for ac_var in $ac_subst_vars
+     do
+       eval ac_val=$`echo $ac_var`
+       echo "$ac_var='"'"'$ac_val'"'"'"
+     done | sort
+     echo
+ 
+     if test -n "$ac_subst_files"; then
+       cat <<\_ASBOX
+ ## ------------- ##
+ ## Output files. ##
+ ## ------------- ##
+ _ASBOX
+       echo
+       for ac_var in $ac_subst_files
+       do
+ 	eval ac_val=$`echo $ac_var`
+ 	echo "$ac_var='"'"'$ac_val'"'"'"
+       done | sort
+       echo
+     fi
+ 
+     if test -s confdefs.h; then
+       cat <<\_ASBOX
+ ## ----------- ##
+ ## confdefs.h. ##
+ ## ----------- ##
+ _ASBOX
+       echo
+       sed "/^$/d" confdefs.h | sort
+       echo
+     fi
+     test "$ac_signal" != 0 &&
+       echo "$as_me: caught signal $ac_signal"
+     echo "$as_me: exit $exit_status"
+   } >&5
+   rm -f core *.core &&
+   rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
+     exit $exit_status
+      ' 0
+ for ac_signal in 1 2 13 15; do
+   trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+ done
+ ac_signal=0
+ 
+ # confdefs.h avoids OS command line length limits that DEFS can exceed.
+ rm -rf conftest* confdefs.h
+ # AIX cpp loses on an empty file, so make sure it contains at least a newline.
+ echo >confdefs.h
+ 
+ # Predefined preprocessor variables.
+ 
+ cat >>confdefs.h <<_ACEOF
+ #define PACKAGE_NAME "$PACKAGE_NAME"
+ _ACEOF
+ 
+ 
+ cat >>confdefs.h <<_ACEOF
+ #define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+ _ACEOF
+ 
+ 
+ cat >>confdefs.h <<_ACEOF
+ #define PACKAGE_VERSION "$PACKAGE_VERSION"
+ _ACEOF
+ 
+ 
+ cat >>confdefs.h <<_ACEOF
+ #define PACKAGE_STRING "$PACKAGE_STRING"
+ _ACEOF
+ 
+ 
+ cat >>confdefs.h <<_ACEOF
+ #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+ _ACEOF
+ 
+ 
+ # Let the site file select an alternate cache file if it wants to.
  # Prefer explicitly selected file to automatically selected ones.
  if test -z "$CONFIG_SITE"; then
    if test "x$prefix" != xNONE; then
*************** if test -z "$CONFIG_SITE"; then
*** 524,562 ****
  fi
  for ac_site_file in $CONFIG_SITE; do
    if test -r "$ac_site_file"; then
!     echo "loading site script $ac_site_file"
      . "$ac_site_file"
    fi
  done
  
  if test -r "$cache_file"; then
!   echo "loading cache $cache_file"
!   . $cache_file
  else
!   echo "creating cache $cache_file"
!   > $cache_file
  fi
  
  ac_ext=c
- # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
  ac_cpp='$CPP $CPPFLAGS'
! ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
! ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
! cross_compiling=$ac_cv_prog_cc_cross
  
- ac_exeext=
- ac_objext=o
- if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
-   # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
-   if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
-     ac_n= ac_c='
- ' ac_t='	'
-   else
-     ac_n=-n ac_c= ac_t=
-   fi
- else
-   ac_n= ac_c='\c' ac_t=
- fi
  
  
  
--- 1215,1317 ----
  fi
  for ac_site_file in $CONFIG_SITE; do
    if test -r "$ac_site_file"; then
!     { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
! echo "$as_me: loading site script $ac_site_file" >&6;}
!     sed 's/^/| /' "$ac_site_file" >&5
      . "$ac_site_file"
    fi
  done
  
  if test -r "$cache_file"; then
!   # Some versions of bash will fail to source /dev/null (special
!   # files actually), so we avoid doing that.
!   if test -f "$cache_file"; then
!     { echo "$as_me:$LINENO: loading cache $cache_file" >&5
! echo "$as_me: loading cache $cache_file" >&6;}
!     case $cache_file in
!       [\\/]* | ?:[\\/]* ) . $cache_file;;
!       *)                      . ./$cache_file;;
!     esac
!   fi
  else
!   { echo "$as_me:$LINENO: creating cache $cache_file" >&5
! echo "$as_me: creating cache $cache_file" >&6;}
!   >$cache_file
! fi
! 
! # Check that the precious variables saved in the cache have kept the same
! # value.
! ac_cache_corrupted=false
! for ac_var in `(set) 2>&1 |
! 	       sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
!   eval ac_old_set=\$ac_cv_env_${ac_var}_set
!   eval ac_new_set=\$ac_env_${ac_var}_set
!   eval ac_old_val="\$ac_cv_env_${ac_var}_value"
!   eval ac_new_val="\$ac_env_${ac_var}_value"
!   case $ac_old_set,$ac_new_set in
!     set,)
!       { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
! echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
!       ac_cache_corrupted=: ;;
!     ,set)
!       { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
! echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
!       ac_cache_corrupted=: ;;
!     ,);;
!     *)
!       if test "x$ac_old_val" != "x$ac_new_val"; then
! 	{ echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
! echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
! 	{ echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
! echo "$as_me:   former value:  $ac_old_val" >&2;}
! 	{ echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
! echo "$as_me:   current value: $ac_new_val" >&2;}
! 	ac_cache_corrupted=:
!       fi;;
!   esac
!   # Pass precious variables to config.status.
!   if test "$ac_new_set" = set; then
!     case $ac_new_val in
!     *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
!       ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
!     *) ac_arg=$ac_var=$ac_new_val ;;
!     esac
!     case " $ac_configure_args " in
!       *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
!       *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
!     esac
!   fi
! done
! if $ac_cache_corrupted; then
!   { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
! echo "$as_me: error: changes in the environment can compromise the build" >&2;}
!   { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
! echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
!    { (exit 1); exit 1; }; }
  fi
  
  ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
! ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
! ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
! ac_compiler_gnu=$ac_cv_c_compiler_gnu
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
  
  
  
  
*************** fi
*** 566,573 ****
  # exported.
  ORIGINAL_LD_FOR_MULTILIBS=$LD
  
  ac_aux_dir=
! for ac_dir in . $srcdir/.; do
    if test -f $ac_dir/install-sh; then
      ac_aux_dir=$ac_dir
      ac_install_sh="$ac_aux_dir/install-sh -c"
--- 1321,1361 ----
  # exported.
  ORIGINAL_LD_FOR_MULTILIBS=$LD
  
+ # Default to --enable-multilib
+ # Check whether --enable-multilib or --disable-multilib was given.
+ if test "${enable_multilib+set}" = set; then
+   enableval="$enable_multilib"
+   case "$enableval" in
+   yes) multilib=yes ;;
+   no)  multilib=no ;;
+   *)   { { echo "$as_me:$LINENO: error: bad value $enableval for multilib option" >&5
+ echo "$as_me: error: bad value $enableval for multilib option" >&2;}
+    { (exit 1); exit 1; }; } ;;
+  esac
+ else
+   multilib=yes
+ fi;
+ 
+ # We may get other options which we leave undocumented:
+ # --with-target-subdir, --with-multisrctop, --with-multisubdir
+ # See config-ml.in if you want the gory details.
+ 
+ if test "$srcdir" = "."; then
+   if test "$with_target_subdir" != "."; then
+     multi_basedir="$srcdir/$with_multisrctop../.."
+   else
+     multi_basedir="$srcdir/$with_multisrctop.."
+   fi
+ else
+   multi_basedir="$srcdir/.."
+ fi
+ 
+ 
+           ac_config_commands="$ac_config_commands default-1"
+ 
+ 
  ac_aux_dir=
! for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
    if test -f $ac_dir/install-sh; then
      ac_aux_dir=$ac_dir
      ac_install_sh="$ac_aux_dir/install-sh -c"
*************** for ac_dir in . $srcdir/.; do
*** 576,591 ****
      ac_aux_dir=$ac_dir
      ac_install_sh="$ac_aux_dir/install.sh -c"
      break
    fi
  done
  if test -z "$ac_aux_dir"; then
!   { echo "configure: error: can not find install-sh or install.sh in . $srcdir/." 1>&2; exit 1; }
  fi
! ac_config_guess=$ac_aux_dir/config.guess
! ac_config_sub=$ac_aux_dir/config.sub
! ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
  
  
  # Find a good install program.  We prefer a C program (faster),
  # so one script is as good as another.  But avoid the broken or
  # incompatible versions:
--- 1364,1491 ----
      ac_aux_dir=$ac_dir
      ac_install_sh="$ac_aux_dir/install.sh -c"
      break
+   elif test -f $ac_dir/shtool; then
+     ac_aux_dir=$ac_dir
+     ac_install_sh="$ac_aux_dir/shtool install -c"
+     break
    fi
  done
  if test -z "$ac_aux_dir"; then
!   { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
! echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
!    { (exit 1); exit 1; }; }
  fi
! ac_config_guess="$SHELL $ac_aux_dir/config.guess"
! ac_config_sub="$SHELL $ac_aux_dir/config.sub"
! ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
! 
! # Make sure we can run config.sub.
! $ac_config_sub sun4 >/dev/null 2>&1 ||
!   { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5
! echo "$as_me: error: cannot run $ac_config_sub" >&2;}
!    { (exit 1); exit 1; }; }
! 
! echo "$as_me:$LINENO: checking build system type" >&5
! echo $ECHO_N "checking build system type... $ECHO_C" >&6
! if test "${ac_cv_build+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
! else
!   ac_cv_build_alias=$build_alias
! test -z "$ac_cv_build_alias" &&
!   ac_cv_build_alias=`$ac_config_guess`
! test -z "$ac_cv_build_alias" &&
!   { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
! echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
!    { (exit 1); exit 1; }; }
! ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
!   { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5
! echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;}
!    { (exit 1); exit 1; }; }
! 
! fi
! echo "$as_me:$LINENO: result: $ac_cv_build" >&5
! echo "${ECHO_T}$ac_cv_build" >&6
! build=$ac_cv_build
! build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
! build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
! build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
! 
! 
! echo "$as_me:$LINENO: checking host system type" >&5
! echo $ECHO_N "checking host system type... $ECHO_C" >&6
! if test "${ac_cv_host+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
! else
!   ac_cv_host_alias=$host_alias
! test -z "$ac_cv_host_alias" &&
!   ac_cv_host_alias=$ac_cv_build_alias
! ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
!   { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5
! echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
!    { (exit 1); exit 1; }; }
! 
! fi
! echo "$as_me:$LINENO: result: $ac_cv_host" >&5
! echo "${ECHO_T}$ac_cv_host" >&6
! host=$ac_cv_host
! host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
! host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
! host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
! 
! 
! echo "$as_me:$LINENO: checking target system type" >&5
! echo $ECHO_N "checking target system type... $ECHO_C" >&6
! if test "${ac_cv_target+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
! else
!   ac_cv_target_alias=$target_alias
! test "x$ac_cv_target_alias" = "x" &&
!   ac_cv_target_alias=$ac_cv_host_alias
! ac_cv_target=`$ac_config_sub $ac_cv_target_alias` ||
!   { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_target_alias failed" >&5
! echo "$as_me: error: $ac_config_sub $ac_cv_target_alias failed" >&2;}
!    { (exit 1); exit 1; }; }
! 
! fi
! echo "$as_me:$LINENO: result: $ac_cv_target" >&5
! echo "${ECHO_T}$ac_cv_target" >&6
! target=$ac_cv_target
! target_cpu=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
! target_vendor=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
! target_os=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
! 
  
+ # The aliases save the names the user supplied, while $host etc.
+ # will get canonicalized.
+ test -n "$target_alias" &&
+   test "$program_prefix$program_suffix$program_transform_name" = \
+     NONENONEs,x,x, &&
+   program_prefix=${target_alias}-
+ 
+ # Get the 'noncanonical' system names.
+  case ${build_alias} in
+   "") build_noncanonical=${build} ;;
+   *) build_noncanonical=${build_alias} ;;
+ esac
  
+  case ${host_alias} in
+   "") host_noncanonical=${build_noncanonical} ;;
+   *) host_noncanonical=${host_alias} ;;
+ esac
+ 
+  case ${target_alias} in
+   "") target_noncanonical=${host_noncanonical} ;;
+   *) target_noncanonical=${target_alias} ;;
+ esac
+ 
+ 
+ 
+ 
+ # This works around an automake problem.
+ mkinstalldirs="`cd $ac_aux_dir && ${PWDCMD-pwd}`/mkinstalldirs"
+ 
+ 
+ am__api_version="1.9"
  # Find a good install program.  We prefer a C program (faster),
  # so one script is as good as another.  But avoid the broken or
  # incompatible versions:
*************** ac_configure=$ac_aux_dir/configure # Thi
*** 593,1436 ****
  # SunOS /usr/etc/install
  # IRIX /sbin/install
  # AIX /bin/install
  # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
  # AFS /usr/afsws/bin/install, which mishandles nonexistent args
  # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
  # ./install, which can be erroneously created by make from ./install.sh.
! echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
! echo "configure:602: checking for a BSD compatible install" >&5
  if test -z "$INSTALL"; then
! if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!     IFS="${IFS= 	}"; ac_save_IFS="$IFS"; IFS=":"
!   for ac_dir in $PATH; do
!     # Account for people who put trailing slashes in PATH elements.
!     case "$ac_dir/" in
!     /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
!     *)
!       # OSF1 and SCO ODT 3.0 have their own names for install.
!       # Don't use installbsd from OSF since it installs stuff as root
!       # by default.
!       for ac_prog in ginstall scoinst install; do
!         if test -f $ac_dir/$ac_prog; then
  	  if test $ac_prog = install &&
!             grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
  	    # AIX install.  It has an incompatible calling convention.
  	    :
  	  else
! 	    ac_cv_path_install="$ac_dir/$ac_prog -c"
! 	    break 2
  	  fi
  	fi
        done
!       ;;
!     esac
!   done
!   IFS="$ac_save_IFS"
  
  fi
    if test "${ac_cv_path_install+set}" = set; then
!     INSTALL="$ac_cv_path_install"
    else
      # As a last resort, use the slow shell script.  We don't cache a
      # path for INSTALL within a source directory, because that will
      # break other packages using the cache if that directory is
      # removed, or if the path is relative.
!     INSTALL="$ac_install_sh"
    fi
  fi
! echo "$ac_t""$INSTALL" 1>&6
  
  # Use test -z because SunOS4 sh mishandles braces in ${var-val}.
  # It thinks the first close brace ends the variable substitution.
  test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
  
! test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
  
  test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
  
! echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6
! echo "configure:655: checking whether build environment is sane" >&5
  # Just in case
  sleep 1
! echo timestamp > conftestfile
  # Do `set' in a subshell so we don't clobber the current shell's
  # arguments.  Must try -L first in case configure is actually a
  # symlink; some systems play weird games with the mod time of symlinks
  # (eg FreeBSD returns the mod time of the symlink's containing
  # directory).
  if (
!    set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
     if test "$*" = "X"; then
        # -L didn't work.
!       set X `ls -t $srcdir/configure conftestfile`
     fi
!    if test "$*" != "X $srcdir/configure conftestfile" \
!       && test "$*" != "X conftestfile $srcdir/configure"; then
  
        # If neither matched, then we have a broken ls.  This can happen
        # if, for instance, CONFIG_SHELL is bash and it inherits a
        # broken ls alias from the environment.  This has actually
        # happened.  Such a system could not be considered "sane".
!       { echo "configure: error: ls -t appears to fail.  Make sure there is not a broken
! alias in your environment" 1>&2; exit 1; }
     fi
  
!    test "$2" = conftestfile
     )
  then
     # Ok.
     :
  else
!    { echo "configure: error: newly created file is older than distributed files!
! Check your system clock" 1>&2; exit 1; }
! fi
! rm -f conftest*
! echo "$ac_t""yes" 1>&6
! if test "$program_transform_name" = s,x,x,; then
!   program_transform_name=
! else
!   # Double any \ or $.  echo might interpret backslashes.
!   cat <<\EOF_SED > conftestsed
! s,\\,\\\\,g; s,\$,$$,g
! EOF_SED
!   program_transform_name="`echo $program_transform_name|sed -f conftestsed`"
!   rm -f conftestsed
  fi
  test "$program_prefix" != NONE &&
!   program_transform_name="s,^,${program_prefix},; $program_transform_name"
  # Use a double $ so make ignores it.
  test "$program_suffix" != NONE &&
!   program_transform_name="s,\$\$,${program_suffix},; $program_transform_name"
  
! # sed with no file args requires a program.
! test "$program_transform_name" = "" && program_transform_name="s,x,x,"
  
! echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
! echo "configure:712: checking whether ${MAKE-make} sets \${MAKE}" >&5
! set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
! if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftestmake <<\EOF
  all:
! 	@echo 'ac_maketemp="${MAKE}"'
! EOF
  # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
! eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
  if test -n "$ac_maketemp"; then
    eval ac_cv_prog_make_${ac_make}_set=yes
  else
    eval ac_cv_prog_make_${ac_make}_set=no
  fi
! rm -f conftestmake
  fi
  if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
    SET_MAKE=
  else
!   echo "$ac_t""no" 1>&6
    SET_MAKE="MAKE=${MAKE-make}"
  fi
  
! if test $host != $build; then
!   ac_tool_prefix=${host_alias}-
  else
!   ac_tool_prefix=
  fi
  
! echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6
! echo "configure:745: checking for Cygwin environment" >&5
! if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 750 "configure"
! #include "confdefs.h"
  
! int main() {
  
! #ifndef __CYGWIN__
! #define __CYGWIN__ __CYGWIN32__
! #endif
! return __CYGWIN__;
! ; return 0; }
! EOF
! if { (eval echo configure:761: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
!   rm -rf conftest*
!   ac_cv_cygwin=yes
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   ac_cv_cygwin=no
  fi
! rm -f conftest*
! rm -f conftest*
  fi
  
! echo "$ac_t""$ac_cv_cygwin" 1>&6
! CYGWIN=
! test "$ac_cv_cygwin" = yes && CYGWIN=yes
! echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6
! echo "configure:778: checking for mingw32 environment" >&5
! if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 783 "configure"
! #include "confdefs.h"
  
! int main() {
! return __MINGW32__;
! ; return 0; }
! EOF
! if { (eval echo configure:790: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
!   rm -rf conftest*
!   ac_cv_mingw32=yes
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   ac_cv_mingw32=no
  fi
! rm -f conftest*
! rm -f conftest*
  fi
  
! echo "$ac_t""$ac_cv_mingw32" 1>&6
! MINGW32=
! test "$ac_cv_mingw32" = yes && MINGW32=yes
  
! # Check whether --enable-multilib or --disable-multilib was given.
! if test "${enable_multilib+set}" = set; then
!   enableval="$enable_multilib"
!   case "${enableval}" in
!   yes) multilib=yes ;;
!   no)  multilib=no ;;
!   *)   { echo "configure: error: bad value ${enableval} for multilib option" 1>&2; exit 1; } ;;
!  esac
  else
!   multilib=yes
  fi
  
  
! if test "${srcdir}" = "."; then
!   if test "${with_target_subdir}" != "." -a -n "${with_target_subdir}"; then
!     gc_basedir="${srcdir}/${with_multisrctop}../."
!   else
!     gc_basedir="${srcdir}/${with_multisrctop}."
    fi
  else
!   gc_basedir="${srcdir}/."
  fi
  
! ac_aux_dir=
! for ac_dir in $gc_basedir/.. $srcdir/$gc_basedir/..; do
!   if test -f $ac_dir/install-sh; then
!     ac_aux_dir=$ac_dir
!     ac_install_sh="$ac_aux_dir/install-sh -c"
!     break
!   elif test -f $ac_dir/install.sh; then
!     ac_aux_dir=$ac_dir
!     ac_install_sh="$ac_aux_dir/install.sh -c"
!     break
    fi
  done
! if test -z "$ac_aux_dir"; then
!   { echo "configure: error: can not find install-sh or install.sh in $gc_basedir/.. $srcdir/$gc_basedir/.." 1>&2; exit 1; }
  fi
- ac_config_guess=$ac_aux_dir/config.guess
- ac_config_sub=$ac_aux_dir/config.sub
- ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
  
! if :; then :; else
!   # This overrides the previous occurrence for automake, but not for
!   # autoconf, which is exactly what we want.
!   ac_aux_dir=
! for ac_dir in .. $srcdir/..; do
!   if test -f $ac_dir/install-sh; then
!     ac_aux_dir=$ac_dir
!     ac_install_sh="$ac_aux_dir/install-sh -c"
!     break
!   elif test -f $ac_dir/install.sh; then
!     ac_aux_dir=$ac_dir
!     ac_install_sh="$ac_aux_dir/install.sh -c"
!     break
    fi
  done
! if test -z "$ac_aux_dir"; then
!   { echo "configure: error: can not find install-sh or install.sh in .. $srcdir/.." 1>&2; exit 1; }
  fi
- ac_config_guess=$ac_aux_dir/config.guess
- ac_config_sub=$ac_aux_dir/config.sub
- ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
  
  fi
  
  
! # Do some error checking and defaulting for the host and target type.
! # The inputs are:
! #    configure --host=HOST --target=TARGET --build=BUILD NONOPT
! #
! # The rules are:
! # 1. You are not allowed to specify --host, --target, and nonopt at the
! #    same time.
! # 2. Host defaults to nonopt.
! # 3. If nonopt is not specified, then host defaults to the current host,
! #    as determined by config.guess.
! # 4. Target and build default to nonopt.
! # 5. If nonopt is not specified, then target and build default to host.
  
! # The aliases save the names the user supplied, while $host etc.
! # will get canonicalized.
! case $host---$target---$nonopt in
! NONE---*---* | *---NONE---* | *---*---NONE) ;;
! *) { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } ;;
! esac
  
  
! # Make sure we can run config.sub.
! if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then :
! else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
  fi
  
! echo $ac_n "checking host system type""... $ac_c" 1>&6
! echo "configure:901: checking host system type" >&5
  
- host_alias=$host
- case "$host_alias" in
- NONE)
-   case $nonopt in
-   NONE)
-     if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then :
-     else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; }
-     fi ;;
-   *) host_alias=$nonopt ;;
-   esac ;;
- esac
  
! host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias`
! host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
! host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
! host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
! echo "$ac_t""$host" 1>&6
  
! echo $ac_n "checking target system type""... $ac_c" 1>&6
! echo "configure:922: checking target system type" >&5
  
! target_alias=$target
! case "$target_alias" in
! NONE)
!   case $nonopt in
!   NONE) target_alias=$host_alias ;;
!   *) target_alias=$nonopt ;;
!   esac ;;
! esac
  
! target=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $target_alias`
! target_cpu=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
! target_vendor=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
! target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
! echo "$ac_t""$target" 1>&6
  
! echo $ac_n "checking build system type""... $ac_c" 1>&6
! echo "configure:940: checking build system type" >&5
  
! build_alias=$build
! case "$build_alias" in
! NONE)
!   case $nonopt in
!   NONE) build_alias=$host_alias ;;
!   *) build_alias=$nonopt ;;
!   esac ;;
! esac
  
! build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias`
! build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
! build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
! build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
! echo "$ac_t""$build" 1>&6
  
! test "$host_alias" != "$target_alias" &&
!   test "$program_prefix$program_suffix$program_transform_name" = \
!     NONENONEs,x,x, &&
!   program_prefix=${target_alias}-
  
  
! # This works around an automake problem.
! mkinstalldirs="`cd $ac_aux_dir && ${PWDCMD-pwd}`/mkinstalldirs"
  
  
  
! PACKAGE=gc
  
! VERSION=6.0
  
! if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
!   { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; }
  fi
  
  
  
! missing_dir=`cd $ac_aux_dir && pwd`
! echo $ac_n "checking for working aclocal""... $ac_c" 1>&6
! echo "configure:980: checking for working aclocal" >&5
! # Run test in a subshell; some versions of sh will print an error if
! # an executable is not found, even if stderr is redirected.
! # Redirect stdin to placate older versions of autoconf.  Sigh.
! if (aclocal --version) < /dev/null > /dev/null 2>&1; then
!    ACLOCAL=aclocal
!    echo "$ac_t""found" 1>&6
  else
!    ACLOCAL="$missing_dir/missing aclocal"
!    echo "$ac_t""missing" 1>&6
  fi
  
! echo $ac_n "checking for working autoconf""... $ac_c" 1>&6
! echo "configure:993: checking for working autoconf" >&5
! # Run test in a subshell; some versions of sh will print an error if
! # an executable is not found, even if stderr is redirected.
! # Redirect stdin to placate older versions of autoconf.  Sigh.
! if (autoconf --version) < /dev/null > /dev/null 2>&1; then
!    AUTOCONF=autoconf
!    echo "$ac_t""found" 1>&6
  else
!    AUTOCONF="$missing_dir/missing autoconf"
!    echo "$ac_t""missing" 1>&6
  fi
  
! echo $ac_n "checking for working automake""... $ac_c" 1>&6
! echo "configure:1006: checking for working automake" >&5
! # Run test in a subshell; some versions of sh will print an error if
! # an executable is not found, even if stderr is redirected.
! # Redirect stdin to placate older versions of autoconf.  Sigh.
! if (automake --version) < /dev/null > /dev/null 2>&1; then
!    AUTOMAKE=automake
!    echo "$ac_t""found" 1>&6
  else
!    AUTOMAKE="$missing_dir/missing automake"
!    echo "$ac_t""missing" 1>&6
  fi
  
! echo $ac_n "checking for working autoheader""... $ac_c" 1>&6
! echo "configure:1019: checking for working autoheader" >&5
! # Run test in a subshell; some versions of sh will print an error if
! # an executable is not found, even if stderr is redirected.
! # Redirect stdin to placate older versions of autoconf.  Sigh.
! if (autoheader --version) < /dev/null > /dev/null 2>&1; then
!    AUTOHEADER=autoheader
!    echo "$ac_t""found" 1>&6
  else
!    AUTOHEADER="$missing_dir/missing autoheader"
!    echo "$ac_t""missing" 1>&6
  fi
  
- echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6
- echo "configure:1032: checking for working makeinfo" >&5
- # Run test in a subshell; some versions of sh will print an error if
- # an executable is not found, even if stderr is redirected.
- # Redirect stdin to placate older versions of autoconf.  Sigh.
- if (makeinfo --version) < /dev/null > /dev/null 2>&1; then
-    MAKEINFO=makeinfo
-    echo "$ac_t""found" 1>&6
  else
!    MAKEINFO="$missing_dir/missing makeinfo"
!    echo "$ac_t""missing" 1>&6
  fi
  
  
  
! # FIXME: We temporarily define our own version of AC_PROG_CC.  This is
! # copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS.  We
! # are probably using a cross compiler, which will not be able to fully
! # link an executable.  This should really be fixed in autoconf
! # itself.
  
  
  
  
! # Extract the first word of "gcc", so it can be a program name with args.
! set dummy gcc; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:1058: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$CC"; then
!   ac_cv_prog_CC="$CC" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_CC="gcc"
!       break
      fi
    done
!   IFS="$ac_save_ifs"
  fi
  fi
! CC="$ac_cv_prog_CC"
! if test -n "$CC"; then
!   echo "$ac_t""$CC" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
! if test -z "$CC"; then
!   # Extract the first word of "cc", so it can be a program name with args.
! set dummy cc; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:1088: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$CC"; then
!   ac_cv_prog_CC="$CC" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_prog_rejected=no
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
!         ac_prog_rejected=yes
! 	continue
!       fi
!       ac_cv_prog_CC="cc"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
! if test $ac_prog_rejected = yes; then
!   # We found a bogon in the path, so make sure we never use it.
!   set dummy $ac_cv_prog_CC
!   shift
!   if test $# -gt 0; then
!     # We chose a different compiler from the bogus one.
!     # However, it has the same basename, so the bogon will be chosen
!     # first if we set CC to just the basename; use the full file name.
!     shift
!     set dummy "$ac_dir/$ac_word" "$@"
!     shift
!     ac_cv_prog_CC="$@"
    fi
  fi
  fi
! fi
! CC="$ac_cv_prog_CC"
! if test -n "$CC"; then
!   echo "$ac_t""$CC" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
!   test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
  fi
! 
! echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
! echo "configure:1137: checking whether we are using GNU C" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.c <<EOF
! #ifdef __GNUC__
!   yes;
! #endif
! EOF
! if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1146: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
!   ac_cv_prog_gcc=yes
  else
!   ac_cv_prog_gcc=no
  fi
  fi
  
! echo "$ac_t""$ac_cv_prog_gcc" 1>&6
  
! if test $ac_cv_prog_gcc = yes; then
!   GCC=yes
!   ac_test_CFLAGS="${CFLAGS+set}"
!   ac_save_CFLAGS="$CFLAGS"
!   CFLAGS=
!   echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
! echo "configure:1161: checking whether ${CC-cc} accepts -g" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   echo 'void f(){}' > conftest.c
! if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
!   ac_cv_prog_cc_g=yes
  else
!   ac_cv_prog_cc_g=no
  fi
! rm -f conftest*
  
  fi
  
! echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
!   if test "$ac_test_CFLAGS" = set; then
!     CFLAGS="$ac_save_CFLAGS"
!   elif test $ac_cv_prog_cc_g = yes; then
!     CFLAGS="-g -O2"
    else
!     CFLAGS="-O2"
    fi
  else
!   GCC=
!   test "${CFLAGS+set}" = set || CFLAGS="-g"
  fi
  
  
! # Likewise for AC_PROG_CXX.
  
  
  
! for ac_prog in $CCC c++ g++ gcc CC cxx cc++
! do
! # Extract the first word of "$ac_prog", so it can be a program name with args.
! set dummy $ac_prog; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:1198: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
! else
!   if test -n "$CXX"; then
!   ac_cv_prog_CXX="$CXX" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_CXX="$ac_prog"
!       break
      fi
    done
!   IFS="$ac_save_ifs"
  fi
  fi
! CXX="$ac_cv_prog_CXX"
! if test -n "$CXX"; then
!   echo "$ac_t""$CXX" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
- test -n "$CXX" && break
- done
- test -n "$CXX" || CXX="gcc"
  
- test -z "$CXX" && { echo "configure: error: no acceptable c++ found in \$PATH" 1>&2; exit 1; }
  
! echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6
! echo "configure:1231: checking whether we are using GNU C++" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
! else
!   cat > conftest.C <<EOF
! #ifdef __GNUC__
!   yes;
! #endif
! EOF
! if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1240: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
!   ac_cv_prog_gxx=yes
  else
!   ac_cv_prog_gxx=no
! fi
  fi
  
! echo "$ac_t""$ac_cv_prog_gxx" 1>&6
  
! if test $ac_cv_prog_gxx = yes; then
!   GXX=yes
!   ac_test_CXXFLAGS="${CXXFLAGS+set}"
!   ac_save_CXXFLAGS="$CXXFLAGS"
!   CXXFLAGS=
!   echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6
! echo "configure:1255: checking whether ${CXX-g++} accepts -g" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
! else
!   echo 'void f(){}' > conftest.cc
! if test -z "`${CXX-g++} -g -c conftest.cc 2>&1`"; then
!   ac_cv_prog_cxx_g=yes
  else
!   ac_cv_prog_cxx_g=no
  fi
  rm -f conftest*
  
  fi
! 
! echo "$ac_t""$ac_cv_prog_cxx_g" 1>&6
!   if test "$ac_test_CXXFLAGS" = set; then
!     CXXFLAGS="$ac_save_CXXFLAGS"
!   elif test $ac_cv_prog_cxx_g = yes; then
!     CXXFLAGS="-g -O2"
!   else
!     CXXFLAGS="-O2"
!   fi
  else
!   GXX=
!   test "${CXXFLAGS+set}" = set || CXXFLAGS="-g"
  fi
  
  
- # AC_CHECK_TOOL does AC_REQUIRE (AC_CANONICAL_BUILD).  If we don't
- # run it explicitly here, it will be run implicitly before
- # NEWLIB_CONFIGURE, which doesn't work because that means that it will
- # be run before AC_CANONICAL_HOST.
- echo $ac_n "checking build system type""... $ac_c" 1>&6
- echo "configure:1288: checking build system type" >&5
  
- build_alias=$build
- case "$build_alias" in
- NONE)
-   case $nonopt in
-   NONE) build_alias=$host_alias ;;
-   *) build_alias=$nonopt ;;
-   esac ;;
- esac
  
- build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias`
- build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
- build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
- build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
- echo "$ac_t""$build" 1>&6
  
  
! # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args.
  set dummy ${ac_tool_prefix}as; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:1309: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test -n "$AS"; then
    ac_cv_prog_AS="$AS" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_AS="${ac_tool_prefix}as"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
!   test -z "$ac_cv_prog_AS" && ac_cv_prog_AS="as"
  fi
  fi
! AS="$ac_cv_prog_AS"
  if test -n "$AS"; then
!   echo "$ac_t""$AS" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
  
  
! # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:1341: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test -n "$AR"; then
    ac_cv_prog_AR="$AR" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_AR="${ac_tool_prefix}ar"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
!   test -z "$ac_cv_prog_AR" && ac_cv_prog_AR="ar"
  fi
  fi
! AR="$ac_cv_prog_AR"
  if test -n "$AR"; then
!   echo "$ac_t""$AR" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
  
  
! # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ranlib; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:1373: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test -n "$RANLIB"; then
    ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
  fi
  fi
! RANLIB="$ac_cv_prog_RANLIB"
  if test -n "$RANLIB"; then
!   echo "$ac_t""$RANLIB" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
! 
  if test -z "$ac_cv_prog_RANLIB"; then
! if test -n "$ac_tool_prefix"; then
    # Extract the first word of "ranlib", so it can be a program name with args.
  set dummy ranlib; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:1405: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$RANLIB"; then
!   ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_RANLIB="ranlib"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
!   test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":"
  fi
  fi
! RANLIB="$ac_cv_prog_RANLIB"
! if test -n "$RANLIB"; then
!   echo "$ac_t""$RANLIB" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
  else
!   RANLIB=":"
! fi
  fi
  
  
--- 1493,3856 ----
  # SunOS /usr/etc/install
  # IRIX /sbin/install
  # AIX /bin/install
+ # AmigaOS /C/install, which installs bootblocks on floppy discs
  # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
  # AFS /usr/afsws/bin/install, which mishandles nonexistent args
  # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+ # OS/2's system install, which has a completely different semantic
  # ./install, which can be erroneously created by make from ./install.sh.
! echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
! echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
  if test -z "$INSTALL"; then
! if test "${ac_cv_path_install+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
! for as_dir in $PATH
! do
!   IFS=$as_save_IFS
!   test -z "$as_dir" && as_dir=.
!   # Account for people who put trailing slashes in PATH elements.
! case $as_dir/ in
!   ./ | .// | /cC/* | \
!   /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
!   ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
!   /usr/ucb/* ) ;;
!   *)
!     # OSF1 and SCO ODT 3.0 have their own names for install.
!     # Don't use installbsd from OSF since it installs stuff as root
!     # by default.
!     for ac_prog in ginstall scoinst install; do
!       for ac_exec_ext in '' $ac_executable_extensions; do
! 	if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
  	  if test $ac_prog = install &&
! 	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
  	    # AIX install.  It has an incompatible calling convention.
  	    :
+ 	  elif test $ac_prog = install &&
+ 	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ 	    # program-specific install script used by HP pwplus--don't use.
+ 	    :
  	  else
! 	    ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
! 	    break 3
  	  fi
  	fi
        done
!     done
!     ;;
! esac
! done
! 
  
  fi
    if test "${ac_cv_path_install+set}" = set; then
!     INSTALL=$ac_cv_path_install
    else
      # As a last resort, use the slow shell script.  We don't cache a
      # path for INSTALL within a source directory, because that will
      # break other packages using the cache if that directory is
      # removed, or if the path is relative.
!     INSTALL=$ac_install_sh
    fi
  fi
! echo "$as_me:$LINENO: result: $INSTALL" >&5
! echo "${ECHO_T}$INSTALL" >&6
  
  # Use test -z because SunOS4 sh mishandles braces in ${var-val}.
  # It thinks the first close brace ends the variable substitution.
  test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
  
! test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
  
  test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
  
! echo "$as_me:$LINENO: checking whether build environment is sane" >&5
! echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6
  # Just in case
  sleep 1
! echo timestamp > conftest.file
  # Do `set' in a subshell so we don't clobber the current shell's
  # arguments.  Must try -L first in case configure is actually a
  # symlink; some systems play weird games with the mod time of symlinks
  # (eg FreeBSD returns the mod time of the symlink's containing
  # directory).
  if (
!    set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
     if test "$*" = "X"; then
        # -L didn't work.
!       set X `ls -t $srcdir/configure conftest.file`
     fi
!    rm -f conftest.file
!    if test "$*" != "X $srcdir/configure conftest.file" \
!       && test "$*" != "X conftest.file $srcdir/configure"; then
  
        # If neither matched, then we have a broken ls.  This can happen
        # if, for instance, CONFIG_SHELL is bash and it inherits a
        # broken ls alias from the environment.  This has actually
        # happened.  Such a system could not be considered "sane".
!       { { echo "$as_me:$LINENO: error: ls -t appears to fail.  Make sure there is not a broken
! alias in your environment" >&5
! echo "$as_me: error: ls -t appears to fail.  Make sure there is not a broken
! alias in your environment" >&2;}
!    { (exit 1); exit 1; }; }
     fi
  
!    test "$2" = conftest.file
     )
  then
     # Ok.
     :
  else
!    { { echo "$as_me:$LINENO: error: newly created file is older than distributed files!
! Check your system clock" >&5
! echo "$as_me: error: newly created file is older than distributed files!
! Check your system clock" >&2;}
!    { (exit 1); exit 1; }; }
  fi
+ echo "$as_me:$LINENO: result: yes" >&5
+ echo "${ECHO_T}yes" >&6
  test "$program_prefix" != NONE &&
!   program_transform_name="s,^,$program_prefix,;$program_transform_name"
  # Use a double $ so make ignores it.
  test "$program_suffix" != NONE &&
!   program_transform_name="s,\$,$program_suffix,;$program_transform_name"
! # Double any \ or $.  echo might interpret backslashes.
! # By default was `s,x,x', remove it if useless.
! cat <<\_ACEOF >conftest.sed
! s/[\\$]/&&/g;s/;s,x,x,$//
! _ACEOF
! program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
! rm conftest.sed
  
! # expand $ac_aux_dir to an absolute path
! am_aux_dir=`cd $ac_aux_dir && pwd`
  
! test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
! # Use eval to expand $SHELL
! if eval "$MISSING --run true"; then
!   am_missing_run="$MISSING --run "
  else
!   am_missing_run=
!   { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
! echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
! fi
! 
! if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
!   # We used to keeping the `.' as first argument, in order to
!   # allow $(mkdir_p) to be used without argument.  As in
!   #   $(mkdir_p) $(somedir)
!   # where $(somedir) is conditionally defined.  However this is wrong
!   # for two reasons:
!   #  1. if the package is installed by a user who cannot write `.'
!   #     make install will fail,
!   #  2. the above comment should most certainly read
!   #     $(mkdir_p) $(DESTDIR)$(somedir)
!   #     so it does not work when $(somedir) is undefined and
!   #     $(DESTDIR) is not.
!   #  To support the latter case, we have to write
!   #     test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
!   #  so the `.' trick is pointless.
!   mkdir_p='mkdir -p --'
! else
!   # On NextStep and OpenStep, the `mkdir' command does not
!   # recognize any option.  It will interpret all options as
!   # directories to create, and then abort because `.' already
!   # exists.
!   for d in ./-p ./--version;
!   do
!     test -d $d && rmdir $d
!   done
!   # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
!   if test -f "$ac_aux_dir/mkinstalldirs"; then
!     mkdir_p='$(mkinstalldirs)'
!   else
!     mkdir_p='$(install_sh) -d'
!   fi
! fi
! 
! for ac_prog in gawk mawk nawk awk
! do
!   # Extract the first word of "$ac_prog", so it can be a program name with args.
! set dummy $ac_prog; ac_word=$2
! echo "$as_me:$LINENO: checking for $ac_word" >&5
! echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
! if test "${ac_cv_prog_AWK+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
! else
!   if test -n "$AWK"; then
!   ac_cv_prog_AWK="$AWK" # Let the user override the test.
! else
! as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
! for as_dir in $PATH
! do
!   IFS=$as_save_IFS
!   test -z "$as_dir" && as_dir=.
!   for ac_exec_ext in '' $ac_executable_extensions; do
!   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
!     ac_cv_prog_AWK="$ac_prog"
!     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
!     break 2
!   fi
! done
! done
! 
! fi
! fi
! AWK=$ac_cv_prog_AWK
! if test -n "$AWK"; then
!   echo "$as_me:$LINENO: result: $AWK" >&5
! echo "${ECHO_T}$AWK" >&6
! else
!   echo "$as_me:$LINENO: result: no" >&5
! echo "${ECHO_T}no" >&6
! fi
! 
!   test -n "$AWK" && break
! done
! 
! echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
! echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
! set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
! if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
! else
!   cat >conftest.make <<\_ACEOF
  all:
! 	@echo 'ac_maketemp="$(MAKE)"'
! _ACEOF
  # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
! eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
  if test -n "$ac_maketemp"; then
    eval ac_cv_prog_make_${ac_make}_set=yes
  else
    eval ac_cv_prog_make_${ac_make}_set=no
  fi
! rm -f conftest.make
  fi
  if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
!   echo "$as_me:$LINENO: result: yes" >&5
! echo "${ECHO_T}yes" >&6
    SET_MAKE=
  else
!   echo "$as_me:$LINENO: result: no" >&5
! echo "${ECHO_T}no" >&6
    SET_MAKE="MAKE=${MAKE-make}"
  fi
  
! rm -rf .tst 2>/dev/null
! mkdir .tst 2>/dev/null
! if test -d .tst; then
!   am__leading_dot=.
  else
!   am__leading_dot=_
  fi
+ rmdir .tst 2>/dev/null
  
! # test to see if srcdir already configured
! if test "`cd $srcdir && pwd`" != "`pwd`" &&
!    test -f $srcdir/config.status; then
!   { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
! echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 
! # test whether we have cygpath
! if test -z "$CYGPATH_W"; then
!   if (cygpath --version) >/dev/null 2>/dev/null; then
!     CYGPATH_W='cygpath -w'
!   else
!     CYGPATH_W=echo
!   fi
! fi
! 
! 
! # Define the identity of the package.
!  PACKAGE=gc
!  VERSION=6.3
! 
! 
! # Some tools Automake needs.
! 
! ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
! 
! 
! AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
! 
! 
! AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
! 
! 
! AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
! 
! 
! MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
! 
! install_sh=${install_sh-"$am_aux_dir/install-sh"}
! 
! # Installed binaries are usually stripped using `strip' when the user
! # run `make install-strip'.  However `strip' might not be the right
! # tool to use in cross-compilation environments, therefore Automake
! # will honor the `STRIP' environment variable to overrule this program.
! if test "$cross_compiling" != no; then
!   if test -n "$ac_tool_prefix"; then
!   # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
! set dummy ${ac_tool_prefix}strip; ac_word=$2
! echo "$as_me:$LINENO: checking for $ac_word" >&5
! echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
! if test "${ac_cv_prog_STRIP+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   if test -n "$STRIP"; then
!   ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
! else
! as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
! for as_dir in $PATH
! do
!   IFS=$as_save_IFS
!   test -z "$as_dir" && as_dir=.
!   for ac_exec_ext in '' $ac_executable_extensions; do
!   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
!     ac_cv_prog_STRIP="${ac_tool_prefix}strip"
!     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
!     break 2
!   fi
! done
! done
  
! fi
! fi
! STRIP=$ac_cv_prog_STRIP
! if test -n "$STRIP"; then
!   echo "$as_me:$LINENO: result: $STRIP" >&5
! echo "${ECHO_T}$STRIP" >&6
! else
!   echo "$as_me:$LINENO: result: no" >&5
! echo "${ECHO_T}no" >&6
! fi
  
! fi
! if test -z "$ac_cv_prog_STRIP"; then
!   ac_ct_STRIP=$STRIP
!   # Extract the first word of "strip", so it can be a program name with args.
! set dummy strip; ac_word=$2
! echo "$as_me:$LINENO: checking for $ac_word" >&5
! echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
! if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   if test -n "$ac_ct_STRIP"; then
!   ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
! else
! as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
! for as_dir in $PATH
! do
!   IFS=$as_save_IFS
!   test -z "$as_dir" && as_dir=.
!   for ac_exec_ext in '' $ac_executable_extensions; do
!   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
!     ac_cv_prog_ac_ct_STRIP="strip"
!     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
!     break 2
!   fi
! done
! done
! 
!   test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
  fi
! fi
! ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
! if test -n "$ac_ct_STRIP"; then
!   echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
! echo "${ECHO_T}$ac_ct_STRIP" >&6
! else
!   echo "$as_me:$LINENO: result: no" >&5
! echo "${ECHO_T}no" >&6
  fi
  
!   STRIP=$ac_ct_STRIP
  else
!   STRIP="$ac_cv_prog_STRIP"
! fi
  
! fi
! INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
! 
! # We need awk for the "check" target.  The system "awk" is bad on
! # some platforms.
! # Always define AMTAR for backward compatibility.
! 
! AMTAR=${AMTAR-"${am_missing_run}tar"}
! 
! am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
! 
! 
! 
! 
! 
! 
! # The autoconf 2.5x version of the no-executables hack.
! 
! 
! # Yak.  We must force CC and CXX to /not/ be precious variables; otherwise
! # the wrong, non-multilib-adjusted value will be used in multilibs.
! # As a side effect, we have to subst CFLAGS and CXXFLAGS ourselves.
! 
! 
! 
! ac_ext=c
! ac_cpp='$CPP $CPPFLAGS'
! ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
! ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
! ac_compiler_gnu=$ac_cv_c_compiler_gnu
! if test -n "$ac_tool_prefix"; then
!   # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
! set dummy ${ac_tool_prefix}gcc; ac_word=$2
! echo "$as_me:$LINENO: checking for $ac_word" >&5
! echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
! if test "${ac_cv_prog_CC+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   if test -n "$CC"; then
!   ac_cv_prog_CC="$CC" # Let the user override the test.
! else
! as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
! for as_dir in $PATH
! do
!   IFS=$as_save_IFS
!   test -z "$as_dir" && as_dir=.
!   for ac_exec_ext in '' $ac_executable_extensions; do
!   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
!     ac_cv_prog_CC="${ac_tool_prefix}gcc"
!     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
!     break 2
!   fi
! done
! done
! 
  fi
! fi
! CC=$ac_cv_prog_CC
! if test -n "$CC"; then
!   echo "$as_me:$LINENO: result: $CC" >&5
! echo "${ECHO_T}$CC" >&6
! else
!   echo "$as_me:$LINENO: result: no" >&5
! echo "${ECHO_T}no" >&6
  fi
  
! fi
! if test -z "$ac_cv_prog_CC"; then
!   ac_ct_CC=$CC
!   # Extract the first word of "gcc", so it can be a program name with args.
! set dummy gcc; ac_word=$2
! echo "$as_me:$LINENO: checking for $ac_word" >&5
! echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
! if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
! else
!   if test -n "$ac_ct_CC"; then
!   ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
! else
! as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
! for as_dir in $PATH
! do
!   IFS=$as_save_IFS
!   test -z "$as_dir" && as_dir=.
!   for ac_exec_ext in '' $ac_executable_extensions; do
!   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
!     ac_cv_prog_ac_ct_CC="gcc"
!     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
!     break 2
!   fi
! done
! done
  
! fi
! fi
! ac_ct_CC=$ac_cv_prog_ac_ct_CC
! if test -n "$ac_ct_CC"; then
!   echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
! echo "${ECHO_T}$ac_ct_CC" >&6
  else
!   echo "$as_me:$LINENO: result: no" >&5
! echo "${ECHO_T}no" >&6
  fi
  
+   CC=$ac_ct_CC
+ else
+   CC="$ac_cv_prog_CC"
+ fi
  
! if test -z "$CC"; then
!   if test -n "$ac_tool_prefix"; then
!   # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
! set dummy ${ac_tool_prefix}cc; ac_word=$2
! echo "$as_me:$LINENO: checking for $ac_word" >&5
! echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
! if test "${ac_cv_prog_CC+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
! else
!   if test -n "$CC"; then
!   ac_cv_prog_CC="$CC" # Let the user override the test.
! else
! as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
! for as_dir in $PATH
! do
!   IFS=$as_save_IFS
!   test -z "$as_dir" && as_dir=.
!   for ac_exec_ext in '' $ac_executable_extensions; do
!   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
!     ac_cv_prog_CC="${ac_tool_prefix}cc"
!     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
!     break 2
    fi
+ done
+ done
+ 
+ fi
+ fi
+ CC=$ac_cv_prog_CC
+ if test -n "$CC"; then
+   echo "$as_me:$LINENO: result: $CC" >&5
+ echo "${ECHO_T}$CC" >&6
  else
!   echo "$as_me:$LINENO: result: no" >&5
! echo "${ECHO_T}no" >&6
  fi
  
! fi
! if test -z "$ac_cv_prog_CC"; then
!   ac_ct_CC=$CC
!   # Extract the first word of "cc", so it can be a program name with args.
! set dummy cc; ac_word=$2
! echo "$as_me:$LINENO: checking for $ac_word" >&5
! echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
! if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
! else
!   if test -n "$ac_ct_CC"; then
!   ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
! else
! as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
! for as_dir in $PATH
! do
!   IFS=$as_save_IFS
!   test -z "$as_dir" && as_dir=.
!   for ac_exec_ext in '' $ac_executable_extensions; do
!   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
!     ac_cv_prog_ac_ct_CC="cc"
!     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
!     break 2
    fi
  done
! done
! 
! fi
! fi
! ac_ct_CC=$ac_cv_prog_ac_ct_CC
! if test -n "$ac_ct_CC"; then
!   echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
! echo "${ECHO_T}$ac_ct_CC" >&6
! else
!   echo "$as_me:$LINENO: result: no" >&5
! echo "${ECHO_T}no" >&6
  fi
  
!   CC=$ac_ct_CC
! else
!   CC="$ac_cv_prog_CC"
! fi
! 
! fi
! if test -z "$CC"; then
!   # Extract the first word of "cc", so it can be a program name with args.
! set dummy cc; ac_word=$2
! echo "$as_me:$LINENO: checking for $ac_word" >&5
! echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
! if test "${ac_cv_prog_CC+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
! else
!   if test -n "$CC"; then
!   ac_cv_prog_CC="$CC" # Let the user override the test.
! else
!   ac_prog_rejected=no
! as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
! for as_dir in $PATH
! do
!   IFS=$as_save_IFS
!   test -z "$as_dir" && as_dir=.
!   for ac_exec_ext in '' $ac_executable_extensions; do
!   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
!     if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
!        ac_prog_rejected=yes
!        continue
!      fi
!     ac_cv_prog_CC="cc"
!     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
!     break 2
    fi
  done
! done
! 
! if test $ac_prog_rejected = yes; then
!   # We found a bogon in the path, so make sure we never use it.
!   set dummy $ac_cv_prog_CC
!   shift
!   if test $# != 0; then
!     # We chose a different compiler from the bogus one.
!     # However, it has the same basename, so the bogon will be chosen
!     # first if we set CC to just the basename; use the full file name.
!     shift
!     ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
!   fi
! fi
! fi
! fi
! CC=$ac_cv_prog_CC
! if test -n "$CC"; then
!   echo "$as_me:$LINENO: result: $CC" >&5
! echo "${ECHO_T}$CC" >&6
! else
!   echo "$as_me:$LINENO: result: no" >&5
! echo "${ECHO_T}no" >&6
  fi
  
  fi
+ if test -z "$CC"; then
+   if test -n "$ac_tool_prefix"; then
+   for ac_prog in cl
+   do
+     # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+ set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_prog_CC+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -n "$CC"; then
+   ac_cv_prog_CC="$CC" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
  
+ fi
+ fi
+ CC=$ac_cv_prog_CC
+ if test -n "$CC"; then
+   echo "$as_me:$LINENO: result: $CC" >&5
+ echo "${ECHO_T}$CC" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
  
!     test -n "$CC" && break
!   done
! fi
! if test -z "$CC"; then
!   ac_ct_CC=$CC
!   for ac_prog in cl
! do
!   # Extract the first word of "$ac_prog", so it can be a program name with args.
! set dummy $ac_prog; ac_word=$2
! echo "$as_me:$LINENO: checking for $ac_word" >&5
! echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
! if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
! else
!   if test -n "$ac_ct_CC"; then
!   ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
! else
! as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
! for as_dir in $PATH
! do
!   IFS=$as_save_IFS
!   test -z "$as_dir" && as_dir=.
!   for ac_exec_ext in '' $ac_executable_extensions; do
!   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
!     ac_cv_prog_ac_ct_CC="$ac_prog"
!     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
!     break 2
!   fi
! done
! done
  
! fi
! fi
! ac_ct_CC=$ac_cv_prog_ac_ct_CC
! if test -n "$ac_ct_CC"; then
!   echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
! echo "${ECHO_T}$ac_ct_CC" >&6
! else
!   echo "$as_me:$LINENO: result: no" >&5
! echo "${ECHO_T}no" >&6
! fi
  
+   test -n "$ac_ct_CC" && break
+ done
  
!   CC=$ac_ct_CC
  fi
  
! fi
  
  
! test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
! See \`config.log' for more details." >&5
! echo "$as_me: error: no acceptable C compiler found in \$PATH
! See \`config.log' for more details." >&2;}
!    { (exit 1); exit 1; }; }
  
! # Provide some information about the compiler.
! echo "$as_me:$LINENO:" \
!      "checking for C compiler version" >&5
! ac_compiler=`set X $ac_compile; echo $2`
! { (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
!   (eval $ac_compiler --version </dev/null >&5) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }
! { (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
!   (eval $ac_compiler -v </dev/null >&5) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }
! { (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
!   (eval $ac_compiler -V </dev/null >&5) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }
  
! cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
  
! int
! main ()
! {
  
!   ;
!   return 0;
! }
! _ACEOF
! # FIXME: Cleanup?
! if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
!   (eval $ac_link) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; then
!   gcc_no_link=no
! else
!   gcc_no_link=yes
! fi
  
! if test x$gcc_no_link = xyes; then
!   # Setting cross_compile will disable run tests; it will
!   # also disable AC_CHECK_FILE but that's generally
!   # correct if we can't link.
!   cross_compiling=yes
!   EXEEXT=
! else
!   cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
  
! int
! main ()
! {
  
!   ;
!   return 0;
! }
! _ACEOF
! ac_clean_files_save=$ac_clean_files
! ac_clean_files="$ac_clean_files a.out a.exe b.out"
! # Try to create an executable without -o first, disregard a.out.
! # It will help us diagnose broken compilers, and finding out an intuition
! # of exeext.
! echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
! echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
! ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
! if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
!   (eval $ac_link_default) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; then
!   # Find the output, starting from the most likely.  This scheme is
! # not robust to junk in `.', hence go to wildcards (a.*) only as a last
! # resort.
  
+ # Be careful to initialize this variable, since it used to be cached.
+ # Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
+ ac_cv_exeext=
+ # b.out is created by i960 compilers.
+ for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
+ do
+   test -f "$ac_file" || continue
+   case $ac_file in
+     *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
+ 	;;
+     conftest.$ac_ext )
+ 	# This is the source file.
+ 	;;
+     [ab].out )
+ 	# We found the default executable, but exeext='' is most
+ 	# certainly right.
+ 	break;;
+     *.* )
+ 	ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ 	# FIXME: I believe we export ac_cv_exeext for Libtool,
+ 	# but it would be cool to find out if it's true.  Does anybody
+ 	# maintain Libtool? --akim.
+ 	export ac_cv_exeext
+ 	break;;
+     * )
+ 	break;;
+   esac
+ done
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
  
! { { echo "$as_me:$LINENO: error: C compiler cannot create executables
! See \`config.log' for more details." >&5
! echo "$as_me: error: C compiler cannot create executables
! See \`config.log' for more details." >&2;}
!    { (exit 77); exit 77; }; }
! fi
! 
! ac_exeext=$ac_cv_exeext
! echo "$as_me:$LINENO: result: $ac_file" >&5
! echo "${ECHO_T}$ac_file" >&6
  
+ # Check the compiler produces executables we can run.  If not, either
+ # the compiler is broken, or we cross compile.
+ echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+ echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
+ # FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+ # If not cross compiling, check that we can run a simple program.
+ if test "$cross_compiling" != yes; then
+   if { ac_try='./$ac_file'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+     cross_compiling=no
+   else
+     if test "$cross_compiling" = maybe; then
+ 	cross_compiling=yes
+     else
+ 	{ { echo "$as_me:$LINENO: error: cannot run C compiled programs.
+ If you meant to cross compile, use \`--host'.
+ See \`config.log' for more details." >&5
+ echo "$as_me: error: cannot run C compiled programs.
+ If you meant to cross compile, use \`--host'.
+ See \`config.log' for more details." >&2;}
+    { (exit 1); exit 1; }; }
+     fi
+   fi
+ fi
+ echo "$as_me:$LINENO: result: yes" >&5
+ echo "${ECHO_T}yes" >&6
  
+ rm -f a.out a.exe conftest$ac_cv_exeext b.out
+ ac_clean_files=$ac_clean_files_save
+ # Check the compiler produces executables we can run.  If not, either
+ # the compiler is broken, or we cross compile.
+ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+ echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
+ echo "$as_me:$LINENO: result: $cross_compiling" >&5
+ echo "${ECHO_T}$cross_compiling" >&6
  
! echo "$as_me:$LINENO: checking for suffix of executables" >&5
! echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
! if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
!   (eval $ac_link) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; then
!   # If both `conftest.exe' and `conftest' are `present' (well, observable)
! # catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
! # work properly (i.e., refer to `conftest.exe'), while it won't with
! # `rm'.
! for ac_file in conftest.exe conftest conftest.*; do
!   test -f "$ac_file" || continue
!   case $ac_file in
!     *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
!     *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
! 	  export ac_cv_exeext
! 	  break;;
!     * ) break;;
!   esac
! done
! else
!   { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
! See \`config.log' for more details." >&5
! echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
! See \`config.log' for more details." >&2;}
!    { (exit 1); exit 1; }; }
! fi
  
! rm -f conftest$ac_cv_exeext
! echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
! echo "${ECHO_T}$ac_cv_exeext" >&6
  
! rm -f conftest.$ac_ext
! EXEEXT=$ac_cv_exeext
! ac_exeext=$EXEEXT
  fi
+ echo "$as_me:$LINENO: checking for suffix of object files" >&5
+ echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
+ if test "${ac_cv_objext+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
  
+ int
+ main ()
+ {
  
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.o conftest.obj
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; then
+   for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
+   case $ac_file in
+     *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
+     *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+        break;;
+   esac
+ done
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
  
! { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
! See \`config.log' for more details." >&5
! echo "$as_me: error: cannot compute suffix of object files: cannot compile
! See \`config.log' for more details." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 
! rm -f conftest.$ac_cv_objext conftest.$ac_ext
! fi
! echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
! echo "${ECHO_T}$ac_cv_objext" >&6
! OBJEXT=$ac_cv_objext
! ac_objext=$OBJEXT
! echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
! echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
! if test "${ac_cv_c_compiler_gnu+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
! 
! int
! main ()
! {
! #ifndef __GNUC__
!        choke me
! #endif
! 
!   ;
!   return 0;
! }
! _ACEOF
! rm -f conftest.$ac_objext
! if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
!   ac_status=$?
!   grep -v '^ *+' conftest.er1 >conftest.err
!   rm -f conftest.er1
!   cat conftest.err >&5
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; }; then
!   ac_compiler_gnu=yes
! else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
! ac_compiler_gnu=no
  fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_cv_c_compiler_gnu=$ac_compiler_gnu
  
! fi
! echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
! echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
! GCC=`test $ac_compiler_gnu = yes && echo yes`
! ac_test_CFLAGS=${CFLAGS+set}
! ac_save_CFLAGS=$CFLAGS
! CFLAGS="-g"
! echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
! echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
! if test "${ac_cv_prog_cc_g+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
! 
! int
! main ()
! {
! 
!   ;
!   return 0;
! }
! _ACEOF
! rm -f conftest.$ac_objext
! if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
!   ac_status=$?
!   grep -v '^ *+' conftest.er1 >conftest.err
!   rm -f conftest.er1
!   cat conftest.err >&5
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; }; then
!   ac_cv_prog_cc_g=yes
! else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
! ac_cv_prog_cc_g=no
! fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  fi
+ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+ echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
+ if test "$ac_test_CFLAGS" = set; then
+   CFLAGS=$ac_save_CFLAGS
+ elif test $ac_cv_prog_cc_g = yes; then
+   if test "$GCC" = yes; then
+     CFLAGS="-g -O2"
+   else
+     CFLAGS="-g"
+   fi
+ else
+   if test "$GCC" = yes; then
+     CFLAGS="-O2"
+   else
+     CFLAGS=
+   fi
+ fi
+ echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
+ echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
+ if test "${ac_cv_prog_cc_stdc+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   ac_cv_prog_cc_stdc=no
+ ac_save_CC=$CC
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <stdarg.h>
+ #include <stdio.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ /* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+ struct buf { int x; };
+ FILE * (*rcsopen) (struct buf *, struct stat *, int);
+ static char *e (p, i)
+      char **p;
+      int i;
+ {
+   return p[i];
+ }
+ static char *f (char * (*g) (char **, int), char **p, ...)
+ {
+   char *s;
+   va_list v;
+   va_start (v,p);
+   s = g (p, va_arg (v,int));
+   va_end (v);
+   return s;
+ }
  
! /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
!    function prototypes and stuff, but not '\xHH' hex character constants.
!    These don't provoke an error unfortunately, instead are silently treated
!    as 'x'.  The following induces an error, until -std1 is added to get
!    proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
!    array size at least.  It's necessary to write '\x00'==0 to get something
!    that's true only with -std1.  */
! int osf4_cc_array ['\x00' == 0 ? 1 : -1];
! 
! int test (int i, double x);
! struct s1 {int (*f) (int a);};
! struct s2 {int (*f) (double a);};
! int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
! int argc;
! char **argv;
! int
! main ()
! {
! return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
!   ;
!   return 0;
! }
! _ACEOF
! # Don't try gcc -ansi; that turns off useful extensions and
! # breaks some systems' header files.
! # AIX			-qlanglvl=ansi
! # Ultrix and OSF/1	-std1
! # HP-UX 10.20 and later	-Ae
! # HP-UX older versions	-Aa -D_HPUX_SOURCE
! # SVR4			-Xc -D__EXTENSIONS__
! for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
! do
!   CC="$ac_save_CC $ac_arg"
!   rm -f conftest.$ac_objext
! if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
!   ac_status=$?
!   grep -v '^ *+' conftest.er1 >conftest.err
!   rm -f conftest.er1
!   cat conftest.err >&5
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; }; then
!   ac_cv_prog_cc_stdc=$ac_arg
! break
  else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
  fi
+ rm -f conftest.err conftest.$ac_objext
+ done
+ rm -f conftest.$ac_ext conftest.$ac_objext
+ CC=$ac_save_CC
  
! fi
! 
! case "x$ac_cv_prog_cc_stdc" in
!   x|xno)
!     echo "$as_me:$LINENO: result: none needed" >&5
! echo "${ECHO_T}none needed" >&6 ;;
!   *)
!     echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
! echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
!     CC="$CC $ac_cv_prog_cc_stdc" ;;
! esac
! 
! # Some people use a C++ compiler to compile C.  Since we use `exit',
! # in C++ we need to declare it.  In case someone uses the same compiler
! # for both compiling C and C++ we need to have the C++ compiler decide
! # the declaration of exit, since it's the most demanding environment.
! cat >conftest.$ac_ext <<_ACEOF
! #ifndef __cplusplus
!   choke me
! #endif
! _ACEOF
! rm -f conftest.$ac_objext
! if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
!   ac_status=$?
!   grep -v '^ *+' conftest.er1 >conftest.err
!   rm -f conftest.er1
!   cat conftest.err >&5
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; }; then
!   for ac_declaration in \
!    '' \
!    'extern "C" void std::exit (int) throw (); using std::exit;' \
!    'extern "C" void std::exit (int); using std::exit;' \
!    'extern "C" void exit (int) throw ();' \
!    'extern "C" void exit (int);' \
!    'void exit (int);'
! do
!   cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
! $ac_declaration
! #include <stdlib.h>
! int
! main ()
! {
! exit (42);
!   ;
!   return 0;
! }
! _ACEOF
! rm -f conftest.$ac_objext
! if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
!   ac_status=$?
!   grep -v '^ *+' conftest.er1 >conftest.err
!   rm -f conftest.er1
!   cat conftest.err >&5
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; }; then
!   :
  else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
! continue
! fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
!   cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
! $ac_declaration
! int
! main ()
! {
! exit (42);
!   ;
!   return 0;
! }
! _ACEOF
! rm -f conftest.$ac_objext
! if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
!   ac_status=$?
!   grep -v '^ *+' conftest.er1 >conftest.err
!   rm -f conftest.er1
!   cat conftest.err >&5
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; }; then
!   break
! else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
! fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
! done
! rm -f conftest*
! if test -n "$ac_declaration"; then
!   echo '#ifdef __cplusplus' >>confdefs.h
!   echo $ac_declaration      >>confdefs.h
!   echo '#endif'             >>confdefs.h
  fi
  
  else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
  fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_ext=c
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ DEPDIR="${am__leading_dot}deps"
  
+           ac_config_commands="$ac_config_commands depfiles"
  
  
! am_make=${MAKE-make}
! cat > confinc << 'END'
! am__doit:
! 	@echo done
! .PHONY: am__doit
! END
! # If we don't find an include directive, just comment out the code.
! echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
! echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6
! am__include="#"
! am__quote=
! _am_result=none
! # First try GNU make style include.
! echo "include confinc" > confmf
! # We grep out `Entering directory' and `Leaving directory'
! # messages which can occur if `w' ends up in MAKEFLAGS.
! # In particular we don't look at `^make:' because GNU make might
! # be invoked under some other name (usually "gmake"), in which
! # case it prints its new name instead of `make'.
! if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
!    am__include=include
!    am__quote=
!    _am_result=GNU
! fi
! # Now try BSD make style include.
! if test "$am__include" = "#"; then
!    echo '.include "confinc"' > confmf
!    if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
!       am__include=.include
!       am__quote="\""
!       _am_result=BSD
!    fi
! fi
! 
! 
! echo "$as_me:$LINENO: result: $_am_result" >&5
! echo "${ECHO_T}$_am_result" >&6
! rm -f confinc confmf
  
+ # Check whether --enable-dependency-tracking or --disable-dependency-tracking was given.
+ if test "${enable_dependency_tracking+set}" = set; then
+   enableval="$enable_dependency_tracking"
  
+ fi;
+ if test "x$enable_dependency_tracking" != xno; then
+   am_depcomp="$ac_aux_dir/depcomp"
+   AMDEPBACKSLASH='\'
+ fi
  
  
! if test "x$enable_dependency_tracking" != xno; then
!   AMDEP_TRUE=
!   AMDEP_FALSE='#'
  else
!   AMDEP_TRUE='#'
!   AMDEP_FALSE=
! fi
! 
! 
! 
! 
! depcc="$CC"   am_compiler_list=
! 
! echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
! echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
! if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
!   # We make a subdir and do the tests there.  Otherwise we can end up
!   # making bogus files that we don't know about and never remove.  For
!   # instance it was reported that on HP-UX the gcc test will end up
!   # making a dummy file named `D' -- because `-MD' means `put the output
!   # in D'.
!   mkdir conftest.dir
!   # Copy depcomp to subdir because otherwise we won't find it if we're
!   # using a relative directory.
!   cp "$am_depcomp" conftest.dir
!   cd conftest.dir
!   # We will build objects and dependencies in a subdirectory because
!   # it helps to detect inapplicable dependency modes.  For instance
!   # both Tru64's cc and ICC support -MD to output dependencies as a
!   # side effect of compilation, but ICC will put the dependencies in
!   # the current directory while Tru64 will put them in the object
!   # directory.
!   mkdir sub
! 
!   am_cv_CC_dependencies_compiler_type=none
!   if test "$am_compiler_list" = ""; then
!      am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
!   fi
!   for depmode in $am_compiler_list; do
!     # Setup a source with many dependencies, because some compilers
!     # like to wrap large dependency lists on column 80 (with \), and
!     # we should not choose a depcomp mode which is confused by this.
!     #
!     # We need to recreate these files for each test, as the compiler may
!     # overwrite some of them when testing with obscure command lines.
!     # This happens at least with the AIX C compiler.
!     : > sub/conftest.c
!     for i in 1 2 3 4 5 6; do
!       echo '#include "conftst'$i'.h"' >> sub/conftest.c
!       # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
!       # Solaris 8's {/usr,}/bin/sh.
!       touch sub/conftst$i.h
!     done
!     echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
! 
!     case $depmode in
!     nosideeffect)
!       # after this tag, mechanisms are not by side-effect, so they'll
!       # only be used when explicitly requested
!       if test "x$enable_dependency_tracking" = xyes; then
! 	continue
!       else
! 	break
!       fi
!       ;;
!     none) break ;;
!     esac
!     # We check with `-c' and `-o' for the sake of the "dashmstdout"
!     # mode.  It turns out that the SunPro C++ compiler does not properly
!     # handle `-M -o', and we need to detect this.
!     if depmode=$depmode \
!        source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
!        depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
!        $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
!          >/dev/null 2>conftest.err &&
!        grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
!        grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
!        ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
!       # icc doesn't choke on unknown options, it will just issue warnings
!       # or remarks (even with -Werror).  So we grep stderr for any message
!       # that says an option was ignored or not supported.
!       # When given -MP, icc 7.0 and 7.1 complain thusly:
!       #   icc: Command line warning: ignoring option '-M'; no argument required
!       # The diagnosis changed in icc 8.0:
!       #   icc: Command line remark: option '-MP' not supported
!       if (grep 'ignoring option' conftest.err ||
!           grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
!         am_cv_CC_dependencies_compiler_type=$depmode
!         break
!       fi
      fi
    done
! 
!   cd ..
!   rm -rf conftest.dir
! else
!   am_cv_CC_dependencies_compiler_type=none
  fi
+ 
  fi
! echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
! echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6
! CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
! 
! 
! 
! if
!   test "x$enable_dependency_tracking" != xno \
!   && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
!   am__fastdepCC_TRUE=
!   am__fastdepCC_FALSE='#'
  else
!   am__fastdepCC_TRUE='#'
!   am__fastdepCC_FALSE=
  fi
  
! 
! ac_ext=cc
! ac_cpp='$CXXCPP $CPPFLAGS'
! ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
! ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
! ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
! if test -n "$ac_tool_prefix"; then
!   for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
!   do
!     # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
! set dummy $ac_tool_prefix$ac_prog; ac_word=$2
! echo "$as_me:$LINENO: checking for $ac_word" >&5
! echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
! if test "${ac_cv_prog_CXX+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   if test -n "$CXX"; then
!   ac_cv_prog_CXX="$CXX" # Let the user override the test.
  else
! as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
! for as_dir in $PATH
! do
!   IFS=$as_save_IFS
!   test -z "$as_dir" && as_dir=.
!   for ac_exec_ext in '' $ac_executable_extensions; do
!   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
!     ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
!     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
!     break 2
    fi
+ done
+ done
+ 
  fi
  fi
! CXX=$ac_cv_prog_CXX
! if test -n "$CXX"; then
!   echo "$as_me:$LINENO: result: $CXX" >&5
! echo "${ECHO_T}$CXX" >&6
  else
!   echo "$as_me:$LINENO: result: no" >&5
! echo "${ECHO_T}no" >&6
  fi
  
!     test -n "$CXX" && break
!   done
  fi
! if test -z "$CXX"; then
!   ac_ct_CXX=$CXX
!   for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
! do
!   # Extract the first word of "$ac_prog", so it can be a program name with args.
! set dummy $ac_prog; ac_word=$2
! echo "$as_me:$LINENO: checking for $ac_word" >&5
! echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
! if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   if test -n "$ac_ct_CXX"; then
!   ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
  else
! as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
! for as_dir in $PATH
! do
!   IFS=$as_save_IFS
!   test -z "$as_dir" && as_dir=.
!   for ac_exec_ext in '' $ac_executable_extensions; do
!   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
!     ac_cv_prog_ac_ct_CXX="$ac_prog"
!     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
!     break 2
!   fi
! done
! done
! 
! fi
  fi
+ ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+ if test -n "$ac_ct_CXX"; then
+   echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
+ echo "${ECHO_T}$ac_ct_CXX" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
  fi
  
!   test -n "$ac_ct_CXX" && break
! done
! test -n "$ac_ct_CXX" || ac_ct_CXX="g++"
  
!   CXX=$ac_ct_CXX
! fi
! 
! 
! # Provide some information about the compiler.
! echo "$as_me:$LINENO:" \
!      "checking for C++ compiler version" >&5
! ac_compiler=`set X $ac_compile; echo $2`
! { (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
!   (eval $ac_compiler --version </dev/null >&5) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }
! { (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
!   (eval $ac_compiler -v </dev/null >&5) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }
! { (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
!   (eval $ac_compiler -V </dev/null >&5) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }
! 
! echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
! echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6
! if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
! 
! int
! main ()
! {
! #ifndef __GNUC__
!        choke me
! #endif
! 
!   ;
!   return 0;
! }
! _ACEOF
! rm -f conftest.$ac_objext
! if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
!   ac_status=$?
!   grep -v '^ *+' conftest.er1 >conftest.err
!   rm -f conftest.er1
!   cat conftest.err >&5
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_cxx_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; }; then
!   ac_compiler_gnu=yes
  else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
! ac_compiler_gnu=no
  fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
! ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
  
  fi
+ echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
+ echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6
+ GXX=`test $ac_compiler_gnu = yes && echo yes`
+ ac_test_CXXFLAGS=${CXXFLAGS+set}
+ ac_save_CXXFLAGS=$CXXFLAGS
+ CXXFLAGS="-g"
+ echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
+ echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6
+ if test "${ac_cv_prog_cxx_g+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
  
! int
! main ()
! {
! 
!   ;
!   return 0;
! }
! _ACEOF
! rm -f conftest.$ac_objext
! if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
!   ac_status=$?
!   grep -v '^ *+' conftest.er1 >conftest.err
!   rm -f conftest.er1
!   cat conftest.err >&5
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_cxx_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; }; then
!   ac_cv_prog_cxx_g=yes
! else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
! ac_cv_prog_cxx_g=no
! fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
! fi
! echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
! echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6
! if test "$ac_test_CXXFLAGS" = set; then
!   CXXFLAGS=$ac_save_CXXFLAGS
! elif test $ac_cv_prog_cxx_g = yes; then
!   if test "$GXX" = yes; then
!     CXXFLAGS="-g -O2"
    else
!     CXXFLAGS="-g"
    fi
  else
!   if test "$GXX" = yes; then
!     CXXFLAGS="-O2"
!   else
!     CXXFLAGS=
!   fi
  fi
+ for ac_declaration in \
+    '' \
+    'extern "C" void std::exit (int) throw (); using std::exit;' \
+    'extern "C" void std::exit (int); using std::exit;' \
+    'extern "C" void exit (int) throw ();' \
+    'extern "C" void exit (int);' \
+    'void exit (int);'
+ do
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_declaration
+ #include <stdlib.h>
+ int
+ main ()
+ {
+ exit (42);
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_cxx_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   :
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
  
+ continue
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_declaration
+ int
+ main ()
+ {
+ exit (42);
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_cxx_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   break
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
  
! fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
! done
! rm -f conftest*
! if test -n "$ac_declaration"; then
!   echo '#ifdef __cplusplus' >>confdefs.h
!   echo $ac_declaration      >>confdefs.h
!   echo '#endif'             >>confdefs.h
! fi
  
+ ac_ext=c
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
  
+ depcc="$CXX"  am_compiler_list=
  
! echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
! echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
! if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
!   # We make a subdir and do the tests there.  Otherwise we can end up
!   # making bogus files that we don't know about and never remove.  For
!   # instance it was reported that on HP-UX the gcc test will end up
!   # making a dummy file named `D' -- because `-MD' means `put the output
!   # in D'.
!   mkdir conftest.dir
!   # Copy depcomp to subdir because otherwise we won't find it if we're
!   # using a relative directory.
!   cp "$am_depcomp" conftest.dir
!   cd conftest.dir
!   # We will build objects and dependencies in a subdirectory because
!   # it helps to detect inapplicable dependency modes.  For instance
!   # both Tru64's cc and ICC support -MD to output dependencies as a
!   # side effect of compilation, but ICC will put the dependencies in
!   # the current directory while Tru64 will put them in the object
!   # directory.
!   mkdir sub
! 
!   am_cv_CXX_dependencies_compiler_type=none
!   if test "$am_compiler_list" = ""; then
!      am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
!   fi
!   for depmode in $am_compiler_list; do
!     # Setup a source with many dependencies, because some compilers
!     # like to wrap large dependency lists on column 80 (with \), and
!     # we should not choose a depcomp mode which is confused by this.
!     #
!     # We need to recreate these files for each test, as the compiler may
!     # overwrite some of them when testing with obscure command lines.
!     # This happens at least with the AIX C compiler.
!     : > sub/conftest.c
!     for i in 1 2 3 4 5 6; do
!       echo '#include "conftst'$i'.h"' >> sub/conftest.c
!       # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
!       # Solaris 8's {/usr,}/bin/sh.
!       touch sub/conftst$i.h
!     done
!     echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
! 
!     case $depmode in
!     nosideeffect)
!       # after this tag, mechanisms are not by side-effect, so they'll
!       # only be used when explicitly requested
!       if test "x$enable_dependency_tracking" = xyes; then
! 	continue
!       else
! 	break
!       fi
!       ;;
!     none) break ;;
!     esac
!     # We check with `-c' and `-o' for the sake of the "dashmstdout"
!     # mode.  It turns out that the SunPro C++ compiler does not properly
!     # handle `-M -o', and we need to detect this.
!     if depmode=$depmode \
!        source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
!        depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
!        $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
!          >/dev/null 2>conftest.err &&
!        grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
!        grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
!        ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
!       # icc doesn't choke on unknown options, it will just issue warnings
!       # or remarks (even with -Werror).  So we grep stderr for any message
!       # that says an option was ignored or not supported.
!       # When given -MP, icc 7.0 and 7.1 complain thusly:
!       #   icc: Command line warning: ignoring option '-M'; no argument required
!       # The diagnosis changed in icc 8.0:
!       #   icc: Command line remark: option '-MP' not supported
!       if (grep 'ignoring option' conftest.err ||
!           grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
!         am_cv_CXX_dependencies_compiler_type=$depmode
!         break
!       fi
      fi
    done
! 
!   cd ..
!   rm -rf conftest.dir
! else
!   am_cv_CXX_dependencies_compiler_type=none
  fi
+ 
  fi
! echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5
! echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6
! CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
! 
! 
! 
! if
!   test "x$enable_dependency_tracking" != xno \
!   && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
!   am__fastdepCXX_TRUE=
!   am__fastdepCXX_FALSE='#'
  else
!   am__fastdepCXX_TRUE='#'
!   am__fastdepCXX_FALSE=
  fi
  
  
  
! 
! if test "x$CC" != xcc; then
!   echo "$as_me:$LINENO: checking whether $CC and cc understand -c and -o together" >&5
! echo $ECHO_N "checking whether $CC and cc understand -c and -o together... $ECHO_C" >&6
  else
!   echo "$as_me:$LINENO: checking whether cc understands -c and -o together" >&5
! echo $ECHO_N "checking whether cc understands -c and -o together... $ECHO_C" >&6
  fi
+ set dummy $CC; ac_cc=`echo $2 |
+ 		      sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+ if eval "test \"\${ac_cv_prog_cc_${ac_cc}_c_o+set}\" = set"; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
  
! int
! main ()
! {
  
!   ;
!   return 0;
! }
! _ACEOF
! # Make sure it works both with $CC and with simple cc.
! # We do the test twice because some compilers refuse to overwrite an
! # existing .o file with -o, though they will create one.
! ac_try='$CC -c conftest.$ac_ext -o conftest.$ac_objext >&5'
! if { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } &&
!    test -f conftest.$ac_objext && { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); };
! then
!   eval ac_cv_prog_cc_${ac_cc}_c_o=yes
!   if test "x$CC" != xcc; then
!     # Test first that cc exists at all.
!     if { ac_try='cc -c conftest.$ac_ext >&5'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; }; then
!       ac_try='cc -c conftest.$ac_ext -o conftest.$ac_objext >&5'
!       if { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } &&
! 	 test -f conftest.$ac_objext && { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); };
!       then
! 	# cc works too.
! 	:
!       else
! 	# cc exists but doesn't like -o.
! 	eval ac_cv_prog_cc_${ac_cc}_c_o=no
!       fi
!     fi
!   fi
  else
!   eval ac_cv_prog_cc_${ac_cc}_c_o=no
  fi
  rm -f conftest*
  
  fi
! if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = yes"; then
!   echo "$as_me:$LINENO: result: yes" >&5
! echo "${ECHO_T}yes" >&6
  else
!   echo "$as_me:$LINENO: result: no" >&5
! echo "${ECHO_T}no" >&6
! 
! cat >>confdefs.h <<\_ACEOF
! #define NO_MINUS_C_MINUS_O 1
! _ACEOF
! 
  fi
  
+ # FIXME: we rely on the cache variable name because
+ # there is no other way.
+ set dummy $CC
+ ac_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+ if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" != yes"; then
+    # Losing compiler, so override with the script.
+    # FIXME: It is wrong to rewrite CC.
+    # But if we don't then we get into trouble of one sort or another.
+    # A longer-term fix would be to have automake use am__CC in this case,
+    # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+    CC="$am_aux_dir/compile $CC"
+ fi
  
  
  
  
  
! # Newer automakes demand CCAS and CCASFLAGS.
! : ${CCAS='$(CC)'}
! : ${CCASFLAGS='$(CFLAGS)'}
! 
! 
! 
! if test -n "$ac_tool_prefix"; then
!   # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args.
  set dummy ${ac_tool_prefix}as; ac_word=$2
! echo "$as_me:$LINENO: checking for $ac_word" >&5
! echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
! if test "${ac_cv_prog_AS+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    if test -n "$AS"; then
    ac_cv_prog_AS="$AS" # Let the user override the test.
  else
! as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
! for as_dir in $PATH
! do
!   IFS=$as_save_IFS
!   test -z "$as_dir" && as_dir=.
!   for ac_exec_ext in '' $ac_executable_extensions; do
!   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
!     ac_cv_prog_AS="${ac_tool_prefix}as"
!     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
!     break 2
!   fi
! done
! done
! 
  fi
  fi
! AS=$ac_cv_prog_AS
  if test -n "$AS"; then
!   echo "$as_me:$LINENO: result: $AS" >&5
! echo "${ECHO_T}$AS" >&6
  else
!   echo "$as_me:$LINENO: result: no" >&5
! echo "${ECHO_T}no" >&6
  fi
  
+ fi
+ if test -z "$ac_cv_prog_AS"; then
+   ac_ct_AS=$AS
+   # Extract the first word of "as", so it can be a program name with args.
+ set dummy as; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_prog_ac_ct_AS+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -n "$ac_ct_AS"; then
+   ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_ac_ct_AS="as"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
  
+ fi
+ fi
+ ac_ct_AS=$ac_cv_prog_ac_ct_AS
+ if test -n "$ac_ct_AS"; then
+   echo "$as_me:$LINENO: result: $ac_ct_AS" >&5
+ echo "${ECHO_T}$ac_ct_AS" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
  
!   AS=$ac_ct_AS
! else
!   AS="$ac_cv_prog_AS"
! fi
! 
! if test -n "$ac_tool_prefix"; then
!   # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
! echo "$as_me:$LINENO: checking for $ac_word" >&5
! echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
! if test "${ac_cv_prog_AR+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    if test -n "$AR"; then
    ac_cv_prog_AR="$AR" # Let the user override the test.
  else
! as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
! for as_dir in $PATH
! do
!   IFS=$as_save_IFS
!   test -z "$as_dir" && as_dir=.
!   for ac_exec_ext in '' $ac_executable_extensions; do
!   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
!     ac_cv_prog_AR="${ac_tool_prefix}ar"
!     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
!     break 2
!   fi
! done
! done
! 
  fi
  fi
! AR=$ac_cv_prog_AR
  if test -n "$AR"; then
!   echo "$as_me:$LINENO: result: $AR" >&5
! echo "${ECHO_T}$AR" >&6
  else
!   echo "$as_me:$LINENO: result: no" >&5
! echo "${ECHO_T}no" >&6
  fi
  
+ fi
+ if test -z "$ac_cv_prog_AR"; then
+   ac_ct_AR=$AR
+   # Extract the first word of "ar", so it can be a program name with args.
+ set dummy ar; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_prog_ac_ct_AR+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -n "$ac_ct_AR"; then
+   ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_ac_ct_AR="ar"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
  
+ fi
+ fi
+ ac_ct_AR=$ac_cv_prog_ac_ct_AR
+ if test -n "$ac_ct_AR"; then
+   echo "$as_me:$LINENO: result: $ac_ct_AR" >&5
+ echo "${ECHO_T}$ac_ct_AR" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
  
!   AR=$ac_ct_AR
! else
!   AR="$ac_cv_prog_AR"
! fi
! 
! if test -n "$ac_tool_prefix"; then
!   # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ranlib; ac_word=$2
! echo "$as_me:$LINENO: checking for $ac_word" >&5
! echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
! if test "${ac_cv_prog_RANLIB+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    if test -n "$RANLIB"; then
    ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
  else
! as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
! for as_dir in $PATH
! do
!   IFS=$as_save_IFS
!   test -z "$as_dir" && as_dir=.
!   for ac_exec_ext in '' $ac_executable_extensions; do
!   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
!     ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
!     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
!     break 2
!   fi
! done
! done
! 
  fi
  fi
! RANLIB=$ac_cv_prog_RANLIB
  if test -n "$RANLIB"; then
!   echo "$as_me:$LINENO: result: $RANLIB" >&5
! echo "${ECHO_T}$RANLIB" >&6
  else
!   echo "$as_me:$LINENO: result: no" >&5
! echo "${ECHO_T}no" >&6
  fi
  
! fi
  if test -z "$ac_cv_prog_RANLIB"; then
!   ac_ct_RANLIB=$RANLIB
    # Extract the first word of "ranlib", so it can be a program name with args.
  set dummy ranlib; ac_word=$2
! echo "$as_me:$LINENO: checking for $ac_word" >&5
! echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
! if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   if test -n "$ac_ct_RANLIB"; then
!   ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
  else
! as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
! for as_dir in $PATH
! do
!   IFS=$as_save_IFS
!   test -z "$as_dir" && as_dir=.
!   for ac_exec_ext in '' $ac_executable_extensions; do
!   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
!     ac_cv_prog_ac_ct_RANLIB="ranlib"
!     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
!     break 2
!   fi
! done
! done
! 
!   test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
  fi
  fi
! ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
! if test -n "$ac_ct_RANLIB"; then
!   echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
! echo "${ECHO_T}$ac_ct_RANLIB" >&6
  else
!   echo "$as_me:$LINENO: result: no" >&5
! echo "${ECHO_T}no" >&6
  fi
  
+   RANLIB=$ac_ct_RANLIB
  else
!   RANLIB="$ac_cv_prog_RANLIB"
  fi
  
  
*************** fi
*** 1441,1516 ****
  # SunOS /usr/etc/install
  # IRIX /sbin/install
  # AIX /bin/install
  # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
  # AFS /usr/afsws/bin/install, which mishandles nonexistent args
  # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
  # ./install, which can be erroneously created by make from ./install.sh.
! echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
! echo "configure:1450: checking for a BSD compatible install" >&5
  if test -z "$INSTALL"; then
! if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!     IFS="${IFS= 	}"; ac_save_IFS="$IFS"; IFS=":"
!   for ac_dir in $PATH; do
!     # Account for people who put trailing slashes in PATH elements.
!     case "$ac_dir/" in
!     /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
!     *)
!       # OSF1 and SCO ODT 3.0 have their own names for install.
!       # Don't use installbsd from OSF since it installs stuff as root
!       # by default.
!       for ac_prog in ginstall scoinst install; do
!         if test -f $ac_dir/$ac_prog; then
  	  if test $ac_prog = install &&
!             grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
  	    # AIX install.  It has an incompatible calling convention.
  	    :
  	  else
! 	    ac_cv_path_install="$ac_dir/$ac_prog -c"
! 	    break 2
  	  fi
  	fi
        done
!       ;;
!     esac
!   done
!   IFS="$ac_save_IFS"
  
  fi
    if test "${ac_cv_path_install+set}" = set; then
!     INSTALL="$ac_cv_path_install"
    else
      # As a last resort, use the slow shell script.  We don't cache a
      # path for INSTALL within a source directory, because that will
      # break other packages using the cache if that directory is
      # removed, or if the path is relative.
!     INSTALL="$ac_install_sh"
    fi
  fi
! echo "$ac_t""$INSTALL" 1>&6
  
  # Use test -z because SunOS4 sh mishandles braces in ${var-val}.
  # It thinks the first close brace ends the variable substitution.
  test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
  
! test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
  
  test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
  
  
! echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
! echo "configure:1504: checking whether to enable maintainer-specific portions of Makefiles" >&5
      # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
  if test "${enable_maintainer_mode+set}" = set; then
    enableval="$enable_maintainer_mode"
    USE_MAINTAINER_MODE=$enableval
  else
    USE_MAINTAINER_MODE=no
! fi
  
-   echo "$ac_t""$USE_MAINTAINER_MODE" 1>&6
-   
  
  if test $USE_MAINTAINER_MODE = yes; then
    MAINTAINER_MODE_TRUE=
--- 3861,3951 ----
  # SunOS /usr/etc/install
  # IRIX /sbin/install
  # AIX /bin/install
+ # AmigaOS /C/install, which installs bootblocks on floppy discs
  # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
  # AFS /usr/afsws/bin/install, which mishandles nonexistent args
  # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+ # OS/2's system install, which has a completely different semantic
  # ./install, which can be erroneously created by make from ./install.sh.
! echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
! echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
  if test -z "$INSTALL"; then
! if test "${ac_cv_path_install+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
! for as_dir in $PATH
! do
!   IFS=$as_save_IFS
!   test -z "$as_dir" && as_dir=.
!   # Account for people who put trailing slashes in PATH elements.
! case $as_dir/ in
!   ./ | .// | /cC/* | \
!   /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
!   ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
!   /usr/ucb/* ) ;;
!   *)
!     # OSF1 and SCO ODT 3.0 have their own names for install.
!     # Don't use installbsd from OSF since it installs stuff as root
!     # by default.
!     for ac_prog in ginstall scoinst install; do
!       for ac_exec_ext in '' $ac_executable_extensions; do
! 	if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
  	  if test $ac_prog = install &&
! 	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
  	    # AIX install.  It has an incompatible calling convention.
  	    :
+ 	  elif test $ac_prog = install &&
+ 	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ 	    # program-specific install script used by HP pwplus--don't use.
+ 	    :
  	  else
! 	    ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
! 	    break 3
  	  fi
  	fi
        done
!     done
!     ;;
! esac
! done
! 
  
  fi
    if test "${ac_cv_path_install+set}" = set; then
!     INSTALL=$ac_cv_path_install
    else
      # As a last resort, use the slow shell script.  We don't cache a
      # path for INSTALL within a source directory, because that will
      # break other packages using the cache if that directory is
      # removed, or if the path is relative.
!     INSTALL=$ac_install_sh
    fi
  fi
! echo "$as_me:$LINENO: result: $INSTALL" >&5
! echo "${ECHO_T}$INSTALL" >&6
  
  # Use test -z because SunOS4 sh mishandles braces in ${var-val}.
  # It thinks the first close brace ends the variable substitution.
  test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
  
! test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
  
  test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
  
  
! echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5
! echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6
      # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
  if test "${enable_maintainer_mode+set}" = set; then
    enableval="$enable_maintainer_mode"
    USE_MAINTAINER_MODE=$enableval
  else
    USE_MAINTAINER_MODE=no
! fi;
!   echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5
! echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6
  
  
  if test $USE_MAINTAINER_MODE = yes; then
    MAINTAINER_MODE_TRUE=
*************** else
*** 1519,1574 ****
    MAINTAINER_MODE_TRUE='#'
    MAINTAINER_MODE_FALSE=
  fi
-   MAINT=$MAINTAINER_MODE_TRUE
-   
- 
- 
- # We need AC_EXEEXT to keep automake happy in cygnus mode.  However,
- # at least currently, we never actually build a program, so we never
- # need to use $(EXEEXT).  Moreover, the test for EXEEXT normally
- # fails, because we are probably configuring with a cross compiler
- # which can't create executables.  So we include AC_EXEEXT to keep
- # automake happy, but we don't execute it, since we don't care about
- # the result.
- if false; then
-   # autoconf 2.50 runs AC_EXEEXT by default, and the macro expands
-   # to nothing, so nothing would remain between `then' and `fi' if it
-   # were not for the `:' below.
-   :
-   
  
! echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
! echo "configure:1542: checking for executable suffix" >&5
! if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
! else
!   if test "$CYGWIN" = yes || test "$MINGW32" = yes; then
!   ac_cv_exeext=.exe
! else
!   rm -f conftest*
!   echo 'int main () { return 0; }' > conftest.$ac_ext
!   ac_cv_exeext=
!   if { (eval echo configure:1552: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
!     for file in conftest.*; do
!       case $file in
!       *.c | *.o | *.obj) ;;
!       *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;;
!       esac
!     done
!   else
!     { echo "configure: error: installation or configuration problem: compiler cannot create executables." 1>&2; exit 1; }
!   fi
!   rm -f conftest*
!   test x"${ac_cv_exeext}" = x && ac_cv_exeext=no
! fi
! fi
  
- EXEEXT=""
- test x"${ac_cv_exeext}" != xno && EXEEXT=${ac_cv_exeext}
- echo "$ac_t""${ac_cv_exeext}" 1>&6
- ac_exeext=$EXEEXT
  
- fi
  
  . ${srcdir}/configure.host
  
--- 3954,3963 ----
    MAINTAINER_MODE_TRUE='#'
    MAINTAINER_MODE_FALSE=
  fi
  
!   MAINT=$MAINTAINER_MODE_TRUE
  
  
  
  . ${srcdir}/configure.host
  
*************** case ${gc_basedir} in
*** 1577,1583 ****
  *) gc_flagbasedir='$(top_builddir)/'${gc_basedir} ;;
  esac
  
! gc_cflags="${gc_cflags} -I"'$(top_builddir)'"/./targ-include -I${gc_flagbasedir}/libc/include"
  case "${host}" in
    *-*-cygwin32*)
      gc_cflags="${gc_cflags} -I${gc_flagbasedir}/../winsup/include"
--- 3966,3972 ----
  *) gc_flagbasedir='$(top_builddir)/'${gc_basedir} ;;
  esac
  
! gc_cflags="${gc_cflags} -Iinclude -I"'$(top_builddir)'"/./targ-include -I${gc_flagbasedir}/libc/include"
  case "${host}" in
    *-*-cygwin32*)
      gc_cflags="${gc_cflags} -I${gc_flagbasedir}/../winsup/include"
*************** esac
*** 1588,1594 ****
  GC_CFLAGS=${gc_cflags}
  
  
- 
  # Check whether --enable-shared or --disable-shared was given.
  if test "${enable_shared+set}" = set; then
    enableval="$enable_shared"
--- 3977,3982 ----
*************** no) enable_shared=no ;;
*** 1610,1617 ****
  esac
  else
    enable_shared=yes
! fi
! 
  # Check whether --enable-static or --disable-static was given.
  if test "${enable_static+set}" = set; then
    enableval="$enable_static"
--- 3998,4004 ----
  esac
  else
    enable_shared=yes
! fi;
  # Check whether --enable-static or --disable-static was given.
  if test "${enable_static+set}" = set; then
    enableval="$enable_static"
*************** no) enable_static=no ;;
*** 1633,1640 ****
  esac
  else
    enable_static=yes
! fi
! 
  # Check whether --enable-fast-install or --disable-fast-install was given.
  if test "${enable_fast_install+set}" = set; then
    enableval="$enable_fast_install"
--- 4020,4026 ----
  esac
  else
    enable_static=yes
! fi;
  # Check whether --enable-fast-install or --disable-fast-install was given.
  if test "${enable_fast_install+set}" = set; then
    enableval="$enable_fast_install"
*************** no) enable_fast_install=no ;;
*** 1656,1662 ****
  esac
  else
    enable_fast_install=yes
! fi
  
  # Check whether --with-gnu-ld or --without-gnu-ld was given.
  if test "${with_gnu_ld+set}" = set; then
--- 4042,4048 ----
  esac
  else
    enable_fast_install=yes
! fi;
  
  # Check whether --with-gnu-ld or --without-gnu-ld was given.
  if test "${with_gnu_ld+set}" = set; then
*************** if test "${with_gnu_ld+set}" = set; then
*** 1664,1676 ****
    test "$withval" = no || with_gnu_ld=yes
  else
    with_gnu_ld=no
! fi
! 
  ac_prog=ld
  if test "$GCC" = yes; then
    # Check if gcc -print-prog-name=ld gives a path.
!   echo $ac_n "checking for ld used by GCC""... $ac_c" 1>&6
! echo "configure:1674: checking for ld used by GCC" >&5
    case $host in
    *-*-mingw*)
      # gcc leaves a trailing carriage return which upsets mingw
--- 4050,4061 ----
    test "$withval" = no || with_gnu_ld=yes
  else
    with_gnu_ld=no
! fi;
  ac_prog=ld
  if test "$GCC" = yes; then
    # Check if gcc -print-prog-name=ld gives a path.
!   echo "$as_me:$LINENO: checking for ld used by GCC" >&5
! echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6
    case $host in
    *-*-mingw*)
      # gcc leaves a trailing carriage return which upsets mingw
*************** echo "configure:1674: checking for ld us
*** 1699,1712 ****
      ;;
    esac
  elif test "$with_gnu_ld" = yes; then
!   echo $ac_n "checking for GNU ld""... $ac_c" 1>&6
! echo "configure:1704: checking for GNU ld" >&5
  else
!   echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6
! echo "configure:1707: checking for non-GNU ld" >&5
  fi
! if eval "test \"`echo '$''{'lt_cv_path_LD'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test -z "$LD"; then
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
--- 4084,4097 ----
      ;;
    esac
  elif test "$with_gnu_ld" = yes; then
!   echo "$as_me:$LINENO: checking for GNU ld" >&5
! echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6
  else
!   echo "$as_me:$LINENO: checking for non-GNU ld" >&5
! echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6
  fi
! if test "${lt_cv_path_LD+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    if test -z "$LD"; then
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
*************** fi
*** 1732,1746 ****
  
  LD="$lt_cv_path_LD"
  if test -n "$LD"; then
!   echo "$ac_t""$LD" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
! test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; }
! echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6
! echo "configure:1742: checking if the linker ($LD) is GNU ld" >&5
! if eval "test \"`echo '$''{'lt_cv_prog_gnu_ld'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    # I'd rather use --version here, but apparently some GNU ld's only accept -v.
  if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
--- 4117,4135 ----
  
  LD="$lt_cv_path_LD"
  if test -n "$LD"; then
!   echo "$as_me:$LINENO: result: $LD" >&5
! echo "${ECHO_T}$LD" >&6
  else
!   echo "$as_me:$LINENO: result: no" >&5
! echo "${ECHO_T}no" >&6
  fi
! test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
! echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
!    { (exit 1); exit 1; }; }
! echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
! echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6
! if test "${lt_cv_prog_gnu_ld+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    # I'd rather use --version here, but apparently some GNU ld's only accept -v.
  if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
*************** else
*** 1749,1775 ****
    lt_cv_prog_gnu_ld=no
  fi
  fi
! 
! echo "$ac_t""$lt_cv_prog_gnu_ld" 1>&6
  with_gnu_ld=$lt_cv_prog_gnu_ld
  
  
! echo $ac_n "checking for $LD option to reload object files""... $ac_c" 1>&6
! echo "configure:1759: checking for $LD option to reload object files" >&5
! if eval "test \"`echo '$''{'lt_cv_ld_reload_flag'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    lt_cv_ld_reload_flag='-r'
  fi
! 
! echo "$ac_t""$lt_cv_ld_reload_flag" 1>&6
  reload_flag=$lt_cv_ld_reload_flag
  test -n "$reload_flag" && reload_flag=" $reload_flag"
  
! echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6
! echo "configure:1771: checking for BSD-compatible nm" >&5
! if eval "test \"`echo '$''{'lt_cv_path_NM'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test -n "$NM"; then
    # Let the user override the test.
--- 4138,4164 ----
    lt_cv_prog_gnu_ld=no
  fi
  fi
! echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
! echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6
  with_gnu_ld=$lt_cv_prog_gnu_ld
  
  
! echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5
! echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6
! if test "${lt_cv_ld_reload_flag+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    lt_cv_ld_reload_flag='-r'
  fi
! echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5
! echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6
  reload_flag=$lt_cv_ld_reload_flag
  test -n "$reload_flag" && reload_flag=" $reload_flag"
  
! echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5
! echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6
! if test "${lt_cv_path_NM+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    if test -n "$NM"; then
    # Let the user override the test.
*************** fi
*** 1802,1834 ****
  fi
  
  NM="$lt_cv_path_NM"
! echo "$ac_t""$NM" 1>&6
  
! echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
! echo "configure:1809: checking whether ln -s works" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
! else
!   rm -f conftestdata
! if ln -s X conftestdata 2>/dev/null
! then
!   rm -f conftestdata
!   ac_cv_prog_LN_S="ln -s"
! else
!   ac_cv_prog_LN_S=ln
! fi
! fi
! LN_S="$ac_cv_prog_LN_S"
! if test "$ac_cv_prog_LN_S" = "ln -s"; then
!   echo "$ac_t""yes" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
! echo $ac_n "checking how to recognise dependant libraries""... $ac_c" 1>&6
! echo "configure:1830: checking how to recognise dependant libraries" >&5
! if eval "test \"`echo '$''{'lt_cv_deplibs_check_method'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    lt_cv_file_magic_cmd='$MAGIC_CMD'
  lt_cv_file_magic_test_file=
--- 4191,4214 ----
  fi
  
  NM="$lt_cv_path_NM"
! echo "$as_me:$LINENO: result: $NM" >&5
! echo "${ECHO_T}$NM" >&6
  
! echo "$as_me:$LINENO: checking whether ln -s works" >&5
! echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6
! LN_S=$as_ln_s
! if test "$LN_S" = "ln -s"; then
!   echo "$as_me:$LINENO: result: yes" >&5
! echo "${ECHO_T}yes" >&6
  else
!   echo "$as_me:$LINENO: result: no, using $LN_S" >&5
! echo "${ECHO_T}no, using $LN_S" >&6
  fi
  
! echo "$as_me:$LINENO: checking how to recognise dependant libraries" >&5
! echo $ECHO_N "checking how to recognise dependant libraries... $ECHO_C" >&6
! if test "${lt_cv_deplibs_check_method+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    lt_cv_file_magic_cmd='$MAGIC_CMD'
  lt_cv_file_magic_test_file=
*************** darwin* | rhapsody*)
*** 1879,1885 ****
    lt_cv_deplibs_check_method=pass_all
    ;;
  
! freebsd* )
    if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
      case $host_cpu in
      i*86 )
--- 4259,4265 ----
    lt_cv_deplibs_check_method=pass_all
    ;;
  
! freebsd* | kfreebsd*-gnu)
    if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
      case $host_cpu in
      i*86 )
*************** irix5* | irix6*)
*** 1937,1953 ****
  
  # This must be Linux ELF.
  linux-gnu*)
!   case $host_cpu in
!   alpha* | mips* | hppa* | i*86 | powerpc* | sparc* | ia64* | sh* )
!     lt_cv_deplibs_check_method=pass_all ;;
!   *)
!     # glibc up to 2.1.1 does not perform some relocations on ARM
!     lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;;
!   esac
!   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
    ;;
  
! netbsd*)
    if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
      lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
    else
--- 4317,4326 ----
  
  # This must be Linux ELF.
  linux-gnu*)
!   lt_cv_deplibs_check_method=pass_all
    ;;
  
! netbsd* | knetbsd*-gnu)
    if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
      lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
    else
*************** sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
*** 1995,2028 ****
  esac
  
  fi
! 
! echo "$ac_t""$lt_cv_deplibs_check_method" 1>&6
  file_magic_cmd=$lt_cv_file_magic_cmd
  deplibs_check_method=$lt_cv_deplibs_check_method
  
- echo $ac_n "checking for object suffix""... $ac_c" 1>&6
- echo "configure:2005: checking for object suffix" >&5
- if eval "test \"`echo '$''{'ac_cv_objext'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   rm -f conftest*
- echo 'int i = 1;' > conftest.$ac_ext
- if { (eval echo configure:2011: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   for ac_file in conftest.*; do
-     case $ac_file in
-     *.c) ;;
-     *) ac_cv_objext=`echo $ac_file | sed -e s/conftest.//` ;;
-     esac
-   done
- else
-   { echo "configure: error: installation or configuration problem; compiler does not work" 1>&2; exit 1; }
- fi
- rm -f conftest*
- fi
  
! echo "$ac_t""$ac_cv_objext" 1>&6
! OBJEXT=$ac_cv_objext
! ac_objext=$ac_cv_objext
  
  # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
  
--- 4368,4381 ----
  esac
  
  fi
! echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5
! echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6
  file_magic_cmd=$lt_cv_file_magic_cmd
  deplibs_check_method=$lt_cv_deplibs_check_method
  
  
! 
! 
  
  # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
  
*************** ac_objext=$ac_cv_objext
*** 2030,2039 ****
  case $deplibs_check_method in
  file_magic*)
    if test "$file_magic_cmd" = '$MAGIC_CMD'; then
!     echo $ac_n "checking for ${ac_tool_prefix}file""... $ac_c" 1>&6
! echo "configure:2035: checking for ${ac_tool_prefix}file" >&5
! if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    case $MAGIC_CMD in
    /*)
--- 4383,4392 ----
  case $deplibs_check_method in
  file_magic*)
    if test "$file_magic_cmd" = '$MAGIC_CMD'; then
!     echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5
! echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6
! if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    case $MAGIC_CMD in
    /*)
*************** fi
*** 2085,2101 ****
  
  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
  if test -n "$MAGIC_CMD"; then
!   echo "$ac_t""$MAGIC_CMD" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
  if test -z "$lt_cv_path_MAGIC_CMD"; then
    if test -n "$ac_tool_prefix"; then
!     echo $ac_n "checking for file""... $ac_c" 1>&6
! echo "configure:2097: checking for file" >&5
! if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    case $MAGIC_CMD in
    /*)
--- 4438,4456 ----
  
  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
  if test -n "$MAGIC_CMD"; then
!   echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
! echo "${ECHO_T}$MAGIC_CMD" >&6
  else
!   echo "$as_me:$LINENO: result: no" >&5
! echo "${ECHO_T}no" >&6
  fi
  
  if test -z "$lt_cv_path_MAGIC_CMD"; then
    if test -n "$ac_tool_prefix"; then
!     echo "$as_me:$LINENO: checking for file" >&5
! echo $ECHO_N "checking for file... $ECHO_C" >&6
! if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    case $MAGIC_CMD in
    /*)
*************** fi
*** 2147,2155 ****
  
  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
  if test -n "$MAGIC_CMD"; then
!   echo "$ac_t""$MAGIC_CMD" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
    else
--- 4502,4512 ----
  
  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
  if test -n "$MAGIC_CMD"; then
!   echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
! echo "${ECHO_T}$MAGIC_CMD" >&6
  else
!   echo "$as_me:$LINENO: result: no" >&5
! echo "${ECHO_T}no" >&6
  fi
  
    else
*************** fi
*** 2161,2298 ****
    ;;
  esac
  
! # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ranlib; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:2168: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test -n "$RANLIB"; then
    ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
  fi
  fi
! RANLIB="$ac_cv_prog_RANLIB"
  if test -n "$RANLIB"; then
!   echo "$ac_t""$RANLIB" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
! 
  if test -z "$ac_cv_prog_RANLIB"; then
! if test -n "$ac_tool_prefix"; then
    # Extract the first word of "ranlib", so it can be a program name with args.
  set dummy ranlib; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:2200: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$RANLIB"; then
!   ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_RANLIB="ranlib"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
!   test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":"
  fi
  fi
! RANLIB="$ac_cv_prog_RANLIB"
! if test -n "$RANLIB"; then
!   echo "$ac_t""$RANLIB" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
  else
!   RANLIB=":"
! fi
  fi
  
! # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
  set dummy ${ac_tool_prefix}strip; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:2235: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test -n "$STRIP"; then
    ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_STRIP="${ac_tool_prefix}strip"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
  fi
  fi
! STRIP="$ac_cv_prog_STRIP"
  if test -n "$STRIP"; then
!   echo "$ac_t""$STRIP" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
! 
  if test -z "$ac_cv_prog_STRIP"; then
! if test -n "$ac_tool_prefix"; then
    # Extract the first word of "strip", so it can be a program name with args.
  set dummy strip; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:2267: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$STRIP"; then
!   ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_STRIP="strip"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
!   test -z "$ac_cv_prog_STRIP" && ac_cv_prog_STRIP=":"
  fi
  fi
! STRIP="$ac_cv_prog_STRIP"
! if test -n "$STRIP"; then
!   echo "$ac_t""$STRIP" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
  else
!   STRIP=":"
! fi
  fi
  
  
--- 4518,4681 ----
    ;;
  esac
  
! if test -n "$ac_tool_prefix"; then
!   # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ranlib; ac_word=$2
! echo "$as_me:$LINENO: checking for $ac_word" >&5
! echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
! if test "${ac_cv_prog_RANLIB+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    if test -n "$RANLIB"; then
    ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
  else
! as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
! for as_dir in $PATH
! do
!   IFS=$as_save_IFS
!   test -z "$as_dir" && as_dir=.
!   for ac_exec_ext in '' $ac_executable_extensions; do
!   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
!     ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
!     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
!     break 2
!   fi
! done
! done
! 
  fi
  fi
! RANLIB=$ac_cv_prog_RANLIB
  if test -n "$RANLIB"; then
!   echo "$as_me:$LINENO: result: $RANLIB" >&5
! echo "${ECHO_T}$RANLIB" >&6
  else
!   echo "$as_me:$LINENO: result: no" >&5
! echo "${ECHO_T}no" >&6
  fi
  
! fi
  if test -z "$ac_cv_prog_RANLIB"; then
!   ac_ct_RANLIB=$RANLIB
    # Extract the first word of "ranlib", so it can be a program name with args.
  set dummy ranlib; ac_word=$2
! echo "$as_me:$LINENO: checking for $ac_word" >&5
! echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
! if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   if test -n "$ac_ct_RANLIB"; then
!   ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
  else
! as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
! for as_dir in $PATH
! do
!   IFS=$as_save_IFS
!   test -z "$as_dir" && as_dir=.
!   for ac_exec_ext in '' $ac_executable_extensions; do
!   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
!     ac_cv_prog_ac_ct_RANLIB="ranlib"
!     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
!     break 2
!   fi
! done
! done
! 
!   test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
  fi
  fi
! ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
! if test -n "$ac_ct_RANLIB"; then
!   echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
! echo "${ECHO_T}$ac_ct_RANLIB" >&6
  else
!   echo "$as_me:$LINENO: result: no" >&5
! echo "${ECHO_T}no" >&6
  fi
  
+   RANLIB=$ac_ct_RANLIB
  else
!   RANLIB="$ac_cv_prog_RANLIB"
  fi
  
! if test -n "$ac_tool_prefix"; then
!   # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
  set dummy ${ac_tool_prefix}strip; ac_word=$2
! echo "$as_me:$LINENO: checking for $ac_word" >&5
! echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
! if test "${ac_cv_prog_STRIP+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    if test -n "$STRIP"; then
    ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
  else
! as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
! for as_dir in $PATH
! do
!   IFS=$as_save_IFS
!   test -z "$as_dir" && as_dir=.
!   for ac_exec_ext in '' $ac_executable_extensions; do
!   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
!     ac_cv_prog_STRIP="${ac_tool_prefix}strip"
!     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
!     break 2
!   fi
! done
! done
! 
  fi
  fi
! STRIP=$ac_cv_prog_STRIP
  if test -n "$STRIP"; then
!   echo "$as_me:$LINENO: result: $STRIP" >&5
! echo "${ECHO_T}$STRIP" >&6
  else
!   echo "$as_me:$LINENO: result: no" >&5
! echo "${ECHO_T}no" >&6
  fi
  
! fi
  if test -z "$ac_cv_prog_STRIP"; then
!   ac_ct_STRIP=$STRIP
    # Extract the first word of "strip", so it can be a program name with args.
  set dummy strip; ac_word=$2
! echo "$as_me:$LINENO: checking for $ac_word" >&5
! echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
! if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   if test -n "$ac_ct_STRIP"; then
!   ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
  else
! as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
! for as_dir in $PATH
! do
!   IFS=$as_save_IFS
!   test -z "$as_dir" && as_dir=.
!   for ac_exec_ext in '' $ac_executable_extensions; do
!   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
!     ac_cv_prog_ac_ct_STRIP="strip"
!     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
!     break 2
!   fi
! done
! done
! 
!   test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
  fi
  fi
! ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
! if test -n "$ac_ct_STRIP"; then
!   echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
! echo "${ECHO_T}$ac_ct_STRIP" >&6
  else
!   echo "$as_me:$LINENO: result: no" >&5
! echo "${ECHO_T}no" >&6
  fi
  
+   STRIP=$ac_ct_STRIP
  else
!   STRIP="$ac_cv_prog_STRIP"
  fi
  
  
*************** test "$lt_cv_prog_gnu_ld" = yes && libto
*** 2308,2327 ****
  # Check whether --enable-libtool-lock or --disable-libtool-lock was given.
  if test "${enable_libtool_lock+set}" = set; then
    enableval="$enable_libtool_lock"
-   :
- fi
  
  test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock"
  test x"$silent" = xyes && libtool_flags="$libtool_flags --silent"
  
  # Check whether --with-pic or --without-pic was given.
  if test "${with_pic+set}" = set; then
    withval="$with_pic"
    pic_mode="$withval"
  else
    pic_mode=default
! fi
! 
  test x"$pic_mode" = xyes && libtool_flags="$libtool_flags --prefer-pic"
  test x"$pic_mode" = xno && libtool_flags="$libtool_flags --prefer-non-pic"
  
--- 4691,4709 ----
  # Check whether --enable-libtool-lock or --disable-libtool-lock was given.
  if test "${enable_libtool_lock+set}" = set; then
    enableval="$enable_libtool_lock"
  
+ fi;
  test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock"
  test x"$silent" = xyes && libtool_flags="$libtool_flags --silent"
  
+ 
  # Check whether --with-pic or --without-pic was given.
  if test "${with_pic+set}" = set; then
    withval="$with_pic"
    pic_mode="$withval"
  else
    pic_mode=default
! fi;
  test x"$pic_mode" = xyes && libtool_flags="$libtool_flags --prefer-pic"
  test x"$pic_mode" = xno && libtool_flags="$libtool_flags --prefer-non-pic"
  
*************** test x"$pic_mode" = xno && libtool_flags
*** 2330,2337 ****
  case $host in
  *-*-irix6*)
    # Find out which ABI we are using.
!   echo '#line 2334 "configure"' > conftest.$ac_ext
!   if { (eval echo configure:2335: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
     if test "$lt_cv_prog_gnu_ld" = yes; then
      case `/usr/bin/file conftest.$ac_objext` in
      *32-bit*)
--- 4712,4723 ----
  case $host in
  *-*-irix6*)
    # Find out which ABI we are using.
!   echo '#line 4715 "configure"' > conftest.$ac_ext
!   if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; then
     if test "$lt_cv_prog_gnu_ld" = yes; then
      case `/usr/bin/file conftest.$ac_objext` in
      *32-bit*)
*************** case $host in
*** 2364,2370 ****
  ia64-*-hpux*)
    # Find out which ABI we are using.
    echo 'int i;' > conftest.$ac_ext
!   if { (eval echo configure:2368: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
      case "`/usr/bin/file conftest.o`" in
      *ELF-32*)
        HPUX_IA64_MODE="32"
--- 4750,4760 ----
  ia64-*-hpux*)
    # Find out which ABI we are using.
    echo 'int i;' > conftest.$ac_ext
!   if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; then
      case "`/usr/bin/file conftest.o`" in
      *ELF-32*)
        HPUX_IA64_MODE="32"
*************** ia64-*-hpux*)
*** 2380,2386 ****
  x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
    # Find out which ABI we are using.
    echo 'int i;' > conftest.$ac_ext
!   if { (eval echo configure:2384: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
      case "`/usr/bin/file conftest.o`" in
      *32-bit*)
        case $host in
--- 4770,4780 ----
  x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
    # Find out which ABI we are using.
    echo 'int i;' > conftest.$ac_ext
!   if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; then
      case "`/usr/bin/file conftest.o`" in
      *32-bit*)
        case $host in
*************** x86_64-*linux*|ppc*-*linux*|powerpc*-*li
*** 2423,2469 ****
    # On SCO OpenServer 5, we need -belf to get full-featured binaries.
    SAVE_CFLAGS="$CFLAGS"
    CFLAGS="$CFLAGS -belf"
!   echo $ac_n "checking whether the C compiler needs -belf""... $ac_c" 1>&6
! echo "configure:2428: checking whether the C compiler needs -belf" >&5
! if eval "test \"`echo '$''{'lt_cv_cc_needs_belf'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   
       ac_ext=c
- # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
  ac_cpp='$CPP $CPPFLAGS'
! ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
! ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
! cross_compiling=$ac_cv_prog_cc_cross
  
!      cat > conftest.$ac_ext <<EOF
! #line 2441 "configure"
! #include "confdefs.h"
  
! int main() {
  
! ; return 0; }
! EOF
! if { (eval echo configure:2448: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
    lt_cv_cc_needs_belf=yes
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   lt_cv_cc_needs_belf=no
  fi
! rm -f conftest*
       ac_ext=c
- # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
  ac_cpp='$CPP $CPPFLAGS'
! ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
! ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
! cross_compiling=$ac_cv_prog_cc_cross
  
  fi
! 
! echo "$ac_t""$lt_cv_cc_needs_belf" 1>&6
    if test x"$lt_cv_cc_needs_belf" != x"yes"; then
      # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
      CFLAGS="$SAVE_CFLAGS"
--- 4817,4895 ----
    # On SCO OpenServer 5, we need -belf to get full-featured binaries.
    SAVE_CFLAGS="$CFLAGS"
    CFLAGS="$CFLAGS -belf"
!   echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5
! echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6
! if test "${lt_cv_cc_needs_belf+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
! 
! 
       ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
! ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
! ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
! ac_compiler_gnu=$ac_cv_c_compiler_gnu
  
!      if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
  
! int
! main ()
! {
  
!   ;
!   return 0;
! }
! _ACEOF
! rm -f conftest.$ac_objext conftest$ac_exeext
! if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
!   (eval $ac_link) 2>conftest.er1
!   ac_status=$?
!   grep -v '^ *+' conftest.er1 >conftest.err
!   rm -f conftest.er1
!   cat conftest.err >&5
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest$ac_exeext'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; }; then
    lt_cv_cc_needs_belf=yes
  else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
! lt_cv_cc_needs_belf=no
  fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
       ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
! ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
! ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
! ac_compiler_gnu=$ac_cv_c_compiler_gnu
  
  fi
! echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5
! echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6
    if test x"$lt_cv_cc_needs_belf" != x"yes"; then
      # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
      CFLAGS="$SAVE_CFLAGS"
*************** echo "$ac_t""$lt_cv_cc_needs_belf" 1>&6
*** 2473,2571 ****
  
  esac
  
- echo $ac_n "checking how to run the C++ preprocessor""... $ac_c" 1>&6
- echo "configure:2478: checking how to run the C++ preprocessor" >&5
- if test -z "$CXXCPP"; then
- if eval "test \"`echo '$''{'ac_cv_prog_CXXCPP'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   ac_ext=C
- # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
- ac_cpp='$CXXCPP $CPPFLAGS'
- ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
- ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
- cross_compiling=$ac_cv_prog_cxx_cross
-   CXXCPP="${CXX-g++} -E"
-   cat > conftest.$ac_ext <<EOF
- #line 2491 "configure"
- #include "confdefs.h"
- #include <stdlib.h>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
- { (eval echo configure:2496: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
-   :
- else
-   echo "$ac_err" >&5
-   echo "configure: failed program was:" >&5
-   cat conftest.$ac_ext >&5
-   rm -rf conftest*
-   CXXCPP=/lib/cpp
- fi
- rm -f conftest*
-   ac_cv_prog_CXXCPP="$CXXCPP"
- ac_ext=c
- # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
- ac_cpp='$CPP $CPPFLAGS'
- ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
- ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
- cross_compiling=$ac_cv_prog_cc_cross
- fi
- fi
- CXXCPP="$ac_cv_prog_CXXCPP"
- echo "$ac_t""$CXXCPP" 1>&6
- 
  
  # Save cache, so that ltconfig can load it
! cat > confcache <<\EOF
  # This file is a shell script that caches the results of configure
  # tests run on this system so they can be shared between configure
! # scripts and configure runs.  It is not useful on other systems.
! # If it contains results you don't want to keep, you may remove or edit it.
  #
! # By default, configure uses ./config.cache as the cache file,
! # creating it if it does not exist already.  You can give configure
! # the --cache-file=FILE option to use a different cache file; that is
! # what configure does when it calls configure scripts in
! # subdirectories, so they share the cache.
! # Giving --cache-file=/dev/null disables caching, for debugging configure.
! # config.status only pays attention to the cache file if you give it the
! # --recheck option to rerun configure.
  #
! EOF
  # The following way of writing the cache mishandles newlines in values,
  # but we know of no workaround that is simple, portable, and efficient.
  # So, don't put newlines in cache variables' values.
  # Ultrix sh set writes to stderr and can't be redirected directly,
  # and sets the high bit in the cache file unless we assign to the vars.
! (set) 2>&1 |
!   case `(ac_space=' '; set | grep ac_space) 2>&1` in
!   *ac_space=\ *)
!     # `set' does not quote correctly, so add quotes (double-quote substitution
!     # turns \\\\ into \\, and sed turns \\ into \).
!     sed -n \
!       -e "s/'/'\\\\''/g" \
!       -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
!     ;;
!   *)
!     # `set' quotes correctly as required by POSIX, so do not add quotes.
!     sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
!     ;;
!   esac >> confcache
! if cmp -s $cache_file confcache; then
!   :
! else
    if test -w $cache_file; then
!     echo "updating cache $cache_file"
!     cat confcache > $cache_file
    else
      echo "not updating unwritable cache $cache_file"
    fi
  fi
  rm -f confcache
  
- 
  # Actually configure libtool.  ac_aux_dir is where install-sh is found.
  AR="$AR" LTCC="$CC" CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \
  MAGIC_CMD="$MAGIC_CMD" LD="$LD" LDFLAGS="$LDFLAGS" LIBS="$LIBS" \
--- 4899,4961 ----
  
  esac
  
  
  # Save cache, so that ltconfig can load it
! cat >confcache <<\_ACEOF
  # This file is a shell script that caches the results of configure
  # tests run on this system so they can be shared between configure
! # scripts and configure runs, see configure's option --config-cache.
! # It is not useful on other systems.  If it contains results you don't
! # want to keep, you may remove or edit it.
  #
! # config.status only pays attention to the cache file if you give it
! # the --recheck option to rerun configure.
  #
! # `ac_cv_env_foo' variables (set or unset) will be overridden when
! # loading this file, other *unset* `ac_cv_foo' will be assigned the
! # following values.
! 
! _ACEOF
! 
  # The following way of writing the cache mishandles newlines in values,
  # but we know of no workaround that is simple, portable, and efficient.
  # So, don't put newlines in cache variables' values.
  # Ultrix sh set writes to stderr and can't be redirected directly,
  # and sets the high bit in the cache file unless we assign to the vars.
! {
!   (set) 2>&1 |
!     case `(ac_space=' '; set | grep ac_space) 2>&1` in
!     *ac_space=\ *)
!       # `set' does not quote correctly, so add quotes (double-quote
!       # substitution turns \\\\ into \\, and sed turns \\ into \).
!       sed -n \
! 	"s/'/'\\\\''/g;
! 	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
!       ;;
!     *)
!       # `set' quotes correctly as required by POSIX, so do not add quotes.
!       sed -n \
! 	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
!       ;;
!     esac;
! } |
!   sed '
!      t clear
!      : clear
!      s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
!      t end
!      /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
!      : end' >>confcache
! if diff $cache_file confcache >/dev/null 2>&1; then :; else
    if test -w $cache_file; then
!     test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
!     cat confcache >$cache_file
    else
      echo "not updating unwritable cache $cache_file"
    fi
  fi
  rm -f confcache
  
  # Actually configure libtool.  ac_aux_dir is where install-sh is found.
  AR="$AR" LTCC="$CC" CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \
  MAGIC_CMD="$MAGIC_CMD" LD="$LD" LDFLAGS="$LDFLAGS" LIBS="$LIBS" \
*************** objext="$OBJEXT" exeext="$EXEEXT" reload
*** 2575,2589 ****
  deplibs_check_method="$deplibs_check_method" file_magic_cmd="$file_magic_cmd" \
  ${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig --no-reexec \
  $libtool_flags --no-verify --build="$build" $ac_aux_dir/ltmain.sh $host \
! || { echo "configure: error: libtool configure failed" 1>&2; exit 1; }
  
  # Reload cache, that may have been modified by ltconfig
  if test -r "$cache_file"; then
!   echo "loading cache $cache_file"
!   . $cache_file
  else
!   echo "creating cache $cache_file"
!   > $cache_file
  fi
  
  
--- 4965,4990 ----
  deplibs_check_method="$deplibs_check_method" file_magic_cmd="$file_magic_cmd" \
  ${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig --no-reexec \
  $libtool_flags --no-verify --build="$build" $ac_aux_dir/ltmain.sh $host \
! || { { echo "$as_me:$LINENO: error: libtool configure failed" >&5
! echo "$as_me: error: libtool configure failed" >&2;}
!    { (exit 1); exit 1; }; }
  
  # Reload cache, that may have been modified by ltconfig
  if test -r "$cache_file"; then
!   # Some versions of bash will fail to source /dev/null (special
!   # files actually), so we avoid doing that.
!   if test -f "$cache_file"; then
!     { echo "$as_me:$LINENO: loading cache $cache_file" >&5
! echo "$as_me: loading cache $cache_file" >&6;}
!     case $cache_file in
!       [\\/]* | ?:[\\/]* ) . $cache_file;;
!       *)                      . ./$cache_file;;
!     esac
!   fi
  else
!   { echo "$as_me:$LINENO: creating cache $cache_file" >&5
! echo "$as_me: creating cache $cache_file" >&6;}
!   >$cache_file
  fi
  
  
*************** LIBTOOL='$(SHELL) $(top_builddir)/libtoo
*** 2597,2602 ****
--- 4998,5233 ----
  # clobbered by the next message.
  exec 5>>./config.log
  
+ ac_ext=cc
+ ac_cpp='$CXXCPP $CPPFLAGS'
+ ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+ echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5
+ echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6
+ if test -z "$CXXCPP"; then
+   if test "${ac_cv_prog_CXXCPP+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+       # Double quotes because CXXCPP needs to be expanded
+     for CXXCPP in "$CXX -E" "/lib/cpp"
+     do
+       ac_preproc_ok=false
+ for ac_cxx_preproc_warn_flag in '' yes
+ do
+   # Use a header file that comes with gcc, so configuring glibc
+   # with a fresh cross-compiler works.
+   # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+   # <limits.h> exists even on freestanding compilers.
+   # On the NeXT, cc -E runs the code through the compiler's parser,
+   # not just through cpp. "Syntax error" is here to catch this case.
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #ifdef __STDC__
+ # include <limits.h>
+ #else
+ # include <assert.h>
+ #endif
+ 		     Syntax error
+ _ACEOF
+ if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } >/dev/null; then
+   if test -s conftest.err; then
+     ac_cpp_err=$ac_cxx_preproc_warn_flag
+     ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+   else
+     ac_cpp_err=
+   fi
+ else
+   ac_cpp_err=yes
+ fi
+ if test -z "$ac_cpp_err"; then
+   :
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+   # Broken: fails on valid input.
+ continue
+ fi
+ rm -f conftest.err conftest.$ac_ext
+ 
+   # OK, works on sane cases.  Now check whether non-existent headers
+   # can be detected and how.
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <ac_nonexistent.h>
+ _ACEOF
+ if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } >/dev/null; then
+   if test -s conftest.err; then
+     ac_cpp_err=$ac_cxx_preproc_warn_flag
+     ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+   else
+     ac_cpp_err=
+   fi
+ else
+   ac_cpp_err=yes
+ fi
+ if test -z "$ac_cpp_err"; then
+   # Broken: success on invalid input.
+ continue
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+   # Passes both tests.
+ ac_preproc_ok=:
+ break
+ fi
+ rm -f conftest.err conftest.$ac_ext
+ 
+ done
+ # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+ rm -f conftest.err conftest.$ac_ext
+ if $ac_preproc_ok; then
+   break
+ fi
+ 
+     done
+     ac_cv_prog_CXXCPP=$CXXCPP
+ 
+ fi
+   CXXCPP=$ac_cv_prog_CXXCPP
+ else
+   ac_cv_prog_CXXCPP=$CXXCPP
+ fi
+ echo "$as_me:$LINENO: result: $CXXCPP" >&5
+ echo "${ECHO_T}$CXXCPP" >&6
+ ac_preproc_ok=false
+ for ac_cxx_preproc_warn_flag in '' yes
+ do
+   # Use a header file that comes with gcc, so configuring glibc
+   # with a fresh cross-compiler works.
+   # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+   # <limits.h> exists even on freestanding compilers.
+   # On the NeXT, cc -E runs the code through the compiler's parser,
+   # not just through cpp. "Syntax error" is here to catch this case.
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #ifdef __STDC__
+ # include <limits.h>
+ #else
+ # include <assert.h>
+ #endif
+ 		     Syntax error
+ _ACEOF
+ if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } >/dev/null; then
+   if test -s conftest.err; then
+     ac_cpp_err=$ac_cxx_preproc_warn_flag
+     ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+   else
+     ac_cpp_err=
+   fi
+ else
+   ac_cpp_err=yes
+ fi
+ if test -z "$ac_cpp_err"; then
+   :
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+   # Broken: fails on valid input.
+ continue
+ fi
+ rm -f conftest.err conftest.$ac_ext
+ 
+   # OK, works on sane cases.  Now check whether non-existent headers
+   # can be detected and how.
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <ac_nonexistent.h>
+ _ACEOF
+ if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } >/dev/null; then
+   if test -s conftest.err; then
+     ac_cpp_err=$ac_cxx_preproc_warn_flag
+     ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+   else
+     ac_cpp_err=
+   fi
+ else
+   ac_cpp_err=yes
+ fi
+ if test -z "$ac_cpp_err"; then
+   # Broken: success on invalid input.
+ continue
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+   # Passes both tests.
+ ac_preproc_ok=:
+ break
+ fi
+ rm -f conftest.err conftest.$ac_ext
+ 
+ done
+ # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+ rm -f conftest.err conftest.$ac_ext
+ if $ac_preproc_ok; then
+   :
+ else
+   { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check
+ See \`config.log' for more details." >&5
+ echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check
+ See \`config.log' for more details." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ 
+ ac_ext=c
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ 
  
  
  LIBTOOL_DEPS=$LIBTOOL_DEPS" $ac_aux_dir/ltcf-cxx.sh"
*************** deplibs_check_method="$deplibs_check_met
*** 2611,2617 ****
  file_magic_cmd="$file_magic_cmd" \
  ${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig -o libtool $libtool_flags \
  --build="$build" --add-tag=CXX $ac_aux_dir/ltcf-cxx.sh $host \
! || { echo "configure: error: libtool tag configuration failed" 1>&2; exit 1; }
  CC="$lt_save_CC"
  CFLAGS="$lt_save_CFLAGS"
  
--- 5242,5250 ----
  file_magic_cmd="$file_magic_cmd" \
  ${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig -o libtool $libtool_flags \
  --build="$build" --add-tag=CXX $ac_aux_dir/ltcf-cxx.sh $host \
! || { { echo "$as_me:$LINENO: error: libtool tag configuration failed" >&5
! echo "$as_me: error: libtool tag configuration failed" >&2;}
!    { (exit 1); exit 1; }; }
  CC="$lt_save_CC"
  CFLAGS="$lt_save_CFLAGS"
  
*************** CFLAGS="$lt_save_CFLAGS"
*** 2619,2924 ****
  # clobbered by the next message.
  exec 5>>./config.log
  
-   
  
-   
- 	 
- 	 
  
- # Check whether --with-target-subdir or --without-target-subdir was given.
- if test "${with_target_subdir+set}" = set; then
-   withval="$with_target_subdir"
-   :
- fi
  
- # Check whether --with-cross-host or --without-cross-host was given.
- if test "${with_cross_host+set}" = set; then
-   withval="$with_cross_host"
-   :
- fi
  
  
- echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
- echo "configure:2643: checking whether to enable maintainer-specific portions of Makefiles" >&5
-     # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
- if test "${enable_maintainer_mode+set}" = set; then
-   enableval="$enable_maintainer_mode"
-   USE_MAINTAINER_MODE=$enableval
- else
-   USE_MAINTAINER_MODE=no
- fi
- 
-   echo "$ac_t""$USE_MAINTAINER_MODE" 1>&6
-   
  
- if test $USE_MAINTAINER_MODE = yes; then
-   MAINTAINER_MODE_TRUE=
-   MAINTAINER_MODE_FALSE='#'
- else
-   MAINTAINER_MODE_TRUE='#'
-   MAINTAINER_MODE_FALSE=
- fi
-   MAINT=$MAINTAINER_MODE_TRUE
-   
  
! # automake wants to see AC_EXEEXT.  But we don't need it.  And having
! # it is actually a problem, because the compiler we're passed can't
! # necessarily do a full link.  So we fool automake here.
! if false; then
!   # autoconf 2.50 runs AC_EXEEXT by default, and the macro expands
!   # to nothing, so nothing would remain between `then' and `fi' if it
!   # were not for the `:' below.
!   :
!   
  
! echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
! echo "configure:2676: checking for executable suffix" >&5
! if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
! else
!   if test "$CYGWIN" = yes || test "$MINGW32" = yes; then
!   ac_cv_exeext=.exe
! else
!   rm -f conftest*
!   echo 'int main () { return 0; }' > conftest.$ac_ext
!   ac_cv_exeext=
!   if { (eval echo configure:2686: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
!     for file in conftest.*; do
!       case $file in
!       *.c | *.o | *.obj) ;;
!       *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;;
!       esac
!     done
!   else
!     { echo "configure: error: installation or configuration problem: compiler cannot create executables." 1>&2; exit 1; }
!   fi
!   rm -f conftest*
!   test x"${ac_cv_exeext}" = x && ac_cv_exeext=no
! fi
! fi
  
! EXEEXT=""
! test x"${ac_cv_exeext}" != xno && EXEEXT=${ac_cv_exeext}
! echo "$ac_t""${ac_cv_exeext}" 1>&6
! ac_exeext=$EXEEXT
  
! fi
  
! echo $ac_n "checking for thread model used by GCC""... $ac_c" 1>&6
! echo "configure:2709: checking for thread model used by GCC" >&5
  THREADS=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'`
  if test -z "$THREADS"; then
     THREADS=no
  fi
! echo "$ac_t""$THREADS" 1>&6
  
  # Check whether --enable-parallel-mark or --disable-parallel-mark was given.
  if test "${enable_parallel_mark+set}" = set; then
    enableval="$enable_parallel_mark"
    case "$THREADS" in
        no | none | single)
! 	{ echo "configure: error: Parallel mark requires --enable-threads=x spec" 1>&2; exit 1; }
  	;;
      esac
  
! fi
! 
  
! INCLUDES="-I`cd $srcdir && ${PWDCMD-pwd}`/include"
  THREADLIBS=
  case "$THREADS" in
   no | none | single)
      THREADS=none
      ;;
!  posix | pthreads)
      THREADS=posix
      THREADLIBS=-lpthread
      case "$host" in
       x86-*-linux* | ia64-*-linux* | i586-*-linux* | i686-*-linux* | x86_64-*-linux* | alpha-*-linux*)
! 	cat >> confdefs.h <<\EOF
  #define GC_LINUX_THREADS 1
! EOF
  
! 	cat >> confdefs.h <<\EOF
  #define _REENTRANT 1
! EOF
  
          if test "${enable_parallel_mark}" = yes; then
! 	  cat >> confdefs.h <<\EOF
  #define PARALLEL_MARK 1
! EOF
  
  	fi
! 	cat >> confdefs.h <<\EOF
  #define THREAD_LOCAL_ALLOC 1
! EOF
  
  	;;
       *-*-linux*)
! 	cat >> confdefs.h <<\EOF
  #define GC_LINUX_THREADS 1
! EOF
  
! 	cat >> confdefs.h <<\EOF
  #define _REENTRANT 1
! EOF
  
  	;;
       *-*-aix*)
! 	cat >> confdefs.h <<\EOF
  #define GC_AIX_THREADS 1
! EOF
  
! 	cat >> confdefs.h <<\EOF
  #define _REENTRANT 1
! EOF
  
  	;;
       *-*-hpux*)
! 	echo "configure: warning: "Only HP/UX 11 threads are supported."" 1>&2
! 	cat >> confdefs.h <<\EOF
  #define GC_HPUX_THREADS 1
! EOF
  
! 	cat >> confdefs.h <<\EOF
  #define _POSIX_C_SOURCE 199506L
! EOF
  
  	if test "${enable_parallel_mark}" = yes; then
! 	  cat >> confdefs.h <<\EOF
  #define PARALLEL_MARK 1
! EOF
  
  	fi
! 	cat >> confdefs.h <<\EOF
  #define THREAD_LOCAL_ALLOC 1
! EOF
  
  	THREADLIBS="-lpthread -lrt"
  	;;
       *-*-freebsd*)
! 	echo "configure: warning: "FreeBSD does not yet fully support threads with Boehm GC."" 1>&2
! 	cat >> confdefs.h <<\EOF
  #define GC_FREEBSD_THREADS 1
! EOF
  
! 	INCLUDES="$INCLUDES -pthread"
  	THREADLIBS=-pthread
        	;;
       *-*-solaris*)
! 	cat >> confdefs.h <<\EOF
  #define GC_SOLARIS_THREADS 1
! EOF
  
! 	cat >> confdefs.h <<\EOF
  #define GC_SOLARIS_PTHREADS 1
! EOF
  
  	;;
       *-*-irix*)
! 	cat >> confdefs.h <<\EOF
  #define GC_IRIX_THREADS 1
! EOF
  
  	;;
       *-*-cygwin*)
! 	cat >> confdefs.h <<\EOF
  #define GC_WIN32_THREADS 1
! EOF
  
  	;;
       *-*-darwin*)
! 	cat >> confdefs.h <<\EOF
  #define GC_DARWIN_THREADS 1
! EOF
  
! 	cat >> confdefs.h <<\EOF
  #define THREAD_LOCAL_ALLOC 1
! EOF
  
  	if test "${enable_parallel_mark}" = yes; then
! 	  cat >> confdefs.h <<\EOF
  #define PARALLEL_MARK 1
! EOF
  
  	fi
  	;;
       *-*-osf*)
! 	cat >> confdefs.h <<\EOF
  #define GC_OSF1_THREADS 1
! EOF
  
          if test "${enable_parallel_mark}" = yes; then
! 	  cat >> confdefs.h <<\EOF
  #define PARALLEL_MARK 1
! EOF
  
! 	  cat >> confdefs.h <<\EOF
  #define THREAD_LOCAL_ALLOC 1
! EOF
  
  	  # May want to enable it in other cases, too.
  	  # Measurements havent yet been done.
  	fi
! 	INCLUDES="$INCLUDES -pthread"
  	THREADLIBS="-lpthread -lrt"
  	;;
      esac
      ;;
   win32)
!     cat >> confdefs.h <<\EOF
  #define GC_WIN32_THREADS 1
! EOF
  
              ;;
   dgux386)
      THREADS=dgux386
! echo "$ac_t""$THREADLIBS" 1>&6
      # Use pthread GCC  switch
      THREADLIBS=-pthread
      if test "${enable_parallel_mark}" = yes; then
!         cat >> confdefs.h <<\EOF
  #define PARALLEL_MARK 1
! EOF
  
      fi
!     cat >> confdefs.h <<\EOF
  #define THREAD_LOCAL_ALLOC 1
! EOF
  
!     cat >> confdefs.h <<\EOF
  #define GC_DGUX386_THREADS 1
! EOF
  
!     cat >> confdefs.h <<\EOF
  #define DGUX_THREADS 1
! EOF
  
      # Enable _POSIX4A_DRAFT10_SOURCE with flag -pthread
!     INCLUDES="-pthread $INCLUDES"
      ;;
   aix)
      THREADS=posix
      THREADLIBS=-lpthread
!     cat >> confdefs.h <<\EOF
  #define GC_AIX_THREADS 1
! EOF
  
!     cat >> confdefs.h <<\EOF
  #define _REENTRANT 1
! EOF
  
      ;;
   decosf1 | irix | mach | os2 | solaris | dce | vxworks)
!     { echo "configure: error: thread package $THREADS not yet supported" 1>&2; exit 1; }
      ;;
   *)
!     { echo "configure: error: $THREADS is an unknown thread package" 1>&2; exit 1; }
      ;;
  esac
  
  
! case "$host" in 
     powerpc-*-darwin*)
        powerpc_darwin=true
        ;;
--- 5252,5516 ----
  # clobbered by the next message.
  exec 5>>./config.log
  
  
  
  
  
  
  
  
! # Check whether --with-target-subdir or --without-target-subdir was given.
! if test "${with_target_subdir+set}" = set; then
!   withval="$with_target_subdir"
  
! fi;
  
! # Check whether --with-cross-host or --without-cross-host was given.
! if test "${with_cross_host+set}" = set; then
!   withval="$with_cross_host"
  
! fi;
  
! echo "$as_me:$LINENO: checking for thread model used by GCC" >&5
! echo $ECHO_N "checking for thread model used by GCC... $ECHO_C" >&6
  THREADS=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'`
  if test -z "$THREADS"; then
     THREADS=no
  fi
! echo "$as_me:$LINENO: result: $THREADS" >&5
! echo "${ECHO_T}$THREADS" >&6
  
  # Check whether --enable-parallel-mark or --disable-parallel-mark was given.
  if test "${enable_parallel_mark+set}" = set; then
    enableval="$enable_parallel_mark"
    case "$THREADS" in
        no | none | single)
! 	{ { echo "$as_me:$LINENO: error: Parallel mark requires --enable-threads=x spec" >&5
! echo "$as_me: error: Parallel mark requires --enable-threads=x spec" >&2;}
!    { (exit 1); exit 1; }; }
  	;;
      esac
  
! fi;
  
! AM_CPPFLAGS="-I`cd $srcdir && ${PWDCMD-pwd}`/include"
  THREADLIBS=
  case "$THREADS" in
   no | none | single)
      THREADS=none
      ;;
!  posix | posix95 | pthreads)
      THREADS=posix
      THREADLIBS=-lpthread
      case "$host" in
       x86-*-linux* | ia64-*-linux* | i586-*-linux* | i686-*-linux* | x86_64-*-linux* | alpha-*-linux*)
! 
! cat >>confdefs.h <<\_ACEOF
  #define GC_LINUX_THREADS 1
! _ACEOF
  
! 
! cat >>confdefs.h <<\_ACEOF
  #define _REENTRANT 1
! _ACEOF
  
          if test "${enable_parallel_mark}" = yes; then
! 
! cat >>confdefs.h <<\_ACEOF
  #define PARALLEL_MARK 1
! _ACEOF
  
  	fi
! 
! cat >>confdefs.h <<\_ACEOF
  #define THREAD_LOCAL_ALLOC 1
! _ACEOF
  
  	;;
       *-*-linux*)
! 	cat >>confdefs.h <<\_ACEOF
  #define GC_LINUX_THREADS 1
! _ACEOF
  
! 	cat >>confdefs.h <<\_ACEOF
  #define _REENTRANT 1
! _ACEOF
  
  	;;
       *-*-aix*)
! 
! cat >>confdefs.h <<\_ACEOF
  #define GC_AIX_THREADS 1
! _ACEOF
  
! 	cat >>confdefs.h <<\_ACEOF
  #define _REENTRANT 1
! _ACEOF
  
  	;;
       *-*-hpux*)
! 	{ echo "$as_me:$LINENO: WARNING: \"Only HP/UX 11 threads are supported.\"" >&5
! echo "$as_me: WARNING: \"Only HP/UX 11 threads are supported.\"" >&2;}
! 
! cat >>confdefs.h <<\_ACEOF
  #define GC_HPUX_THREADS 1
! _ACEOF
  
! 
! cat >>confdefs.h <<\_ACEOF
  #define _POSIX_C_SOURCE 199506L
! _ACEOF
  
  	if test "${enable_parallel_mark}" = yes; then
! 	  cat >>confdefs.h <<\_ACEOF
  #define PARALLEL_MARK 1
! _ACEOF
  
  	fi
! 	cat >>confdefs.h <<\_ACEOF
  #define THREAD_LOCAL_ALLOC 1
! _ACEOF
  
  	THREADLIBS="-lpthread -lrt"
  	;;
       *-*-freebsd*)
! 	{ echo "$as_me:$LINENO: WARNING: \"FreeBSD does not yet fully support threads with Boehm GC.\"" >&5
! echo "$as_me: WARNING: \"FreeBSD does not yet fully support threads with Boehm GC.\"" >&2;}
! 
! cat >>confdefs.h <<\_ACEOF
  #define GC_FREEBSD_THREADS 1
! _ACEOF
  
! 	AM_CPPFLAGS="$AM_CPPFLAGS -pthread"
  	THREADLIBS=-pthread
        	;;
       *-*-solaris*)
! 
! cat >>confdefs.h <<\_ACEOF
  #define GC_SOLARIS_THREADS 1
! _ACEOF
  
! 
! cat >>confdefs.h <<\_ACEOF
  #define GC_SOLARIS_PTHREADS 1
! _ACEOF
  
  	;;
       *-*-irix*)
! 
! cat >>confdefs.h <<\_ACEOF
  #define GC_IRIX_THREADS 1
! _ACEOF
  
  	;;
       *-*-cygwin*)
! 
! cat >>confdefs.h <<\_ACEOF
  #define GC_WIN32_THREADS 1
! _ACEOF
  
  	;;
       *-*-darwin*)
! 
! cat >>confdefs.h <<\_ACEOF
  #define GC_DARWIN_THREADS 1
! _ACEOF
  
! 	cat >>confdefs.h <<\_ACEOF
  #define THREAD_LOCAL_ALLOC 1
! _ACEOF
  
  	if test "${enable_parallel_mark}" = yes; then
! 	  cat >>confdefs.h <<\_ACEOF
  #define PARALLEL_MARK 1
! _ACEOF
  
  	fi
  	;;
       *-*-osf*)
! 
! cat >>confdefs.h <<\_ACEOF
  #define GC_OSF1_THREADS 1
! _ACEOF
  
          if test "${enable_parallel_mark}" = yes; then
! 	  cat >>confdefs.h <<\_ACEOF
  #define PARALLEL_MARK 1
! _ACEOF
  
! 	  cat >>confdefs.h <<\_ACEOF
  #define THREAD_LOCAL_ALLOC 1
! _ACEOF
  
  	  # May want to enable it in other cases, too.
  	  # Measurements havent yet been done.
  	fi
! 	AM_CPPFLAGS="$AM_CPPFLAGS -pthread"
  	THREADLIBS="-lpthread -lrt"
  	;;
      esac
      ;;
   win32)
!     cat >>confdefs.h <<\_ACEOF
  #define GC_WIN32_THREADS 1
! _ACEOF
  
              ;;
   dgux386)
      THREADS=dgux386
! echo "$as_me:$LINENO: result: $THREADLIBS" >&5
! echo "${ECHO_T}$THREADLIBS" >&6
      # Use pthread GCC  switch
      THREADLIBS=-pthread
      if test "${enable_parallel_mark}" = yes; then
!         cat >>confdefs.h <<\_ACEOF
  #define PARALLEL_MARK 1
! _ACEOF
  
      fi
!     cat >>confdefs.h <<\_ACEOF
  #define THREAD_LOCAL_ALLOC 1
! _ACEOF
  
! 
! cat >>confdefs.h <<\_ACEOF
  #define GC_DGUX386_THREADS 1
! _ACEOF
  
! 
! cat >>confdefs.h <<\_ACEOF
  #define DGUX_THREADS 1
! _ACEOF
  
      # Enable _POSIX4A_DRAFT10_SOURCE with flag -pthread
!     AM_CPPFLAGS="-pthread $AM_CPPFLAGS"
      ;;
   aix)
      THREADS=posix
      THREADLIBS=-lpthread
!     cat >>confdefs.h <<\_ACEOF
  #define GC_AIX_THREADS 1
! _ACEOF
  
!     cat >>confdefs.h <<\_ACEOF
  #define _REENTRANT 1
! _ACEOF
  
      ;;
   decosf1 | irix | mach | os2 | solaris | dce | vxworks)
!     { { echo "$as_me:$LINENO: error: thread package $THREADS not yet supported" >&5
! echo "$as_me: error: thread package $THREADS not yet supported" >&2;}
!    { (exit 1); exit 1; }; }
      ;;
   *)
!     { { echo "$as_me:$LINENO: error: $THREADS is an unknown thread package" >&5
! echo "$as_me: error: $THREADS is an unknown thread package" >&2;}
!    { (exit 1); exit 1; }; }
      ;;
  esac
  
  
! case "$host" in
     powerpc-*-darwin*)
        powerpc_darwin=true
        ;;
*************** else
*** 2933,2981 ****
    POWERPC_DARWIN_FALSE=
  fi
  
  # We never want libdl on darwin. It is a fake libdl that just ends up making
  # dyld calls anyway
  case "$host" in
    *-*-darwin*) ;;
!   *) 
!     echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
! echo "configure:2943: checking for dlopen in -ldl" >&5
! ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
! if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   ac_save_LIBS="$LIBS"
  LIBS="-ldl  $LIBS"
! cat > conftest.$ac_ext <<EOF
! #line 2951 "configure"
! #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
!     builtin and then its argument prototype would still apply.  */
! char dlopen();
! 
! int main() {
! dlopen()
! ; return 0; }
! EOF
! if { (eval echo configure:2962: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_lib_$ac_lib_var=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_lib_$ac_lib_var=no"
! fi
! rm -f conftest*
! LIBS="$ac_save_LIBS"
  
  fi
! if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
    EXTRA_TEST_LIBS="$EXTRA_TEST_LIBS -ldl"
- else
-   echo "$ac_t""no" 1>&6
  fi
  
      ;;
--- 5525,5607 ----
    POWERPC_DARWIN_FALSE=
  fi
  
+ 
  # We never want libdl on darwin. It is a fake libdl that just ends up making
  # dyld calls anyway
  case "$host" in
    *-*-darwin*) ;;
!   *)
!     echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
! echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
! if test "${ac_cv_lib_dl_dlopen+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   ac_check_lib_save_LIBS=$LIBS
  LIBS="-ldl  $LIBS"
! if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
! 
  /* Override any gcc2 internal prototype to avoid an error.  */
+ #ifdef __cplusplus
+ extern "C"
+ #endif
  /* We use char because int might match the return type of a gcc2
!    builtin and then its argument prototype would still apply.  */
! char dlopen ();
! int
! main ()
! {
! dlopen ();
!   ;
!   return 0;
! }
! _ACEOF
! rm -f conftest.$ac_objext conftest$ac_exeext
! if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
!   (eval $ac_link) 2>conftest.er1
!   ac_status=$?
!   grep -v '^ *+' conftest.er1 >conftest.err
!   rm -f conftest.er1
!   cat conftest.err >&5
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest$ac_exeext'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; }; then
!   ac_cv_lib_dl_dlopen=yes
  else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
  
+ ac_cv_lib_dl_dlopen=no
  fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
! LIBS=$ac_check_lib_save_LIBS
! fi
! echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
! echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
! if test $ac_cv_lib_dl_dlopen = yes; then
    EXTRA_TEST_LIBS="$EXTRA_TEST_LIBS -ldl"
  fi
  
      ;;
*************** esac
*** 2986,3015 ****
  target_all=libgcjgc.la
  
  
- 
  TARGET_ECOS="no"
  # Check whether --with-ecos or --without-ecos was given.
  if test "${with_ecos+set}" = set; then
    withval="$with_ecos"
    TARGET_ECOS="$with_ecos"
  
! fi
! 
  
  addobjs=
  addlibs=
  addincludes=
  addtests=
- CXXINCLUDES=
  case "$TARGET_ECOS" in
     no)
        ;;
     *)
!       cat >> confdefs.h <<\EOF
  #define ECOS 1
! EOF
  
!       CXXINCLUDES="-I${TARGET_ECOS}/include"
        addobjs="$addobjs ecos.lo"
        ;;
  esac
--- 5612,5640 ----
  target_all=libgcjgc.la
  
  
  TARGET_ECOS="no"
+ 
  # Check whether --with-ecos or --without-ecos was given.
  if test "${with_ecos+set}" = set; then
    withval="$with_ecos"
    TARGET_ECOS="$with_ecos"
  
! fi;
  
  addobjs=
  addlibs=
  addincludes=
  addtests=
  case "$TARGET_ECOS" in
     no)
        ;;
     *)
! 
! cat >>confdefs.h <<\_ACEOF
  #define ECOS 1
! _ACEOF
  
!       AM_CPPFLAGS="${AM_CPPFLAGS} -I${TARGET_ECOS}/include"
        addobjs="$addobjs ecos.lo"
        ;;
  esac
*************** fi
*** 3036,3043 ****
  
  # Configuration of shared libraries
  #
! echo $ac_n "checking whether to build shared libraries""... $ac_c" 1>&6
! echo "configure:3041: checking whether to build shared libraries" >&5
  # Check whether --enable-shared or --disable-shared was given.
  if test "${enable_shared+set}" = set; then
    enableval="$enable_shared"
--- 5661,5668 ----
  
  # Configuration of shared libraries
  #
! echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
! echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6
  # Check whether --enable-shared or --disable-shared was given.
  if test "${enable_shared+set}" = set; then
    enableval="$enable_shared"
*************** no) enable_shared=no ;;
*** 3059,3074 ****
  esac
  else
    enable_shared=yes
! fi
! 
  
  case "$host" in
   alpha-*-openbsd*)
       enable_shared=no
!      echo "$ac_t""no" 1>&6
       ;;
   *)
!      echo "$ac_t""yes" 1>&6
       ;;
  esac
  
--- 5684,5700 ----
  esac
  else
    enable_shared=yes
! fi;
  
  case "$host" in
   alpha-*-openbsd*)
       enable_shared=no
!      echo "$as_me:$LINENO: result: no" >&5
! echo "${ECHO_T}no" >&6
       ;;
   *)
!      echo "$as_me:$LINENO: result: yes" >&5
! echo "${ECHO_T}yes" >&6
       ;;
  esac
  
*************** esac
*** 3076,3113 ****
  #
  # We don't set NO_EXECUTE_PERMISSION by default because gcj (and
  # anything else that creates trampolines in gc-allocated memory)
! # always needs exec permission.  The exception to this is IA-64 and
  # some variations of Power PC, where trampolines don't contain
  # executable code.
  #
! echo $ac_n "checking which machine-dependent code should be used""... $ac_c" 1>&6
! echo "configure:3085: checking which machine-dependent code should be used" >&5 
  machdep=
  case "$host" in
   alpha*-*-openbsd*)
      machdep="alpha_mach_dep.lo"
      if test x"${ac_cv_lib_dl_dlopen}" != xyes ; then
!        echo "configure: warning: OpenBSD/Alpha without dlopen(). Shared library support is disabled" 1>&2
      fi
      ;;
   alpha*-*-linux*)
      machdep="alpha_mach_dep.lo"
      ;;
   i?86-*-solaris2.[89] | i?86-*-solaris2.1?)
!     cat >> confdefs.h <<\EOF
  #define SOLARIS25_PROC_VDB_BUG_FIXED 1
! EOF
  
      ;;
   mipstx39-*-elf*)
      machdep="mips_ultrix_mach_dep.lo"
!     cat >> confdefs.h <<\EOF
  #define STACKBASE __stackbase
! EOF
  
!     cat >> confdefs.h <<\EOF
  #define DATASTART_IS_ETEXT 1
! EOF
  
      ;;
   mips-dec-ultrix*)
--- 5702,5743 ----
  #
  # We don't set NO_EXECUTE_PERMISSION by default because gcj (and
  # anything else that creates trampolines in gc-allocated memory)
! # always needs exec permission.  The exceptions to this are IA-64 and
  # some variations of Power PC, where trampolines don't contain
  # executable code.
  #
! echo "$as_me:$LINENO: checking which machine-dependent code should be used" >&5
! echo $ECHO_N "checking which machine-dependent code should be used... $ECHO_C" >&6
  machdep=
  case "$host" in
   alpha*-*-openbsd*)
      machdep="alpha_mach_dep.lo"
      if test x"${ac_cv_lib_dl_dlopen}" != xyes ; then
!        { echo "$as_me:$LINENO: WARNING: OpenBSD/Alpha without dlopen(). Shared library support is disabled" >&5
! echo "$as_me: WARNING: OpenBSD/Alpha without dlopen(). Shared library support is disabled" >&2;}
      fi
      ;;
   alpha*-*-linux*)
      machdep="alpha_mach_dep.lo"
      ;;
   i?86-*-solaris2.[89] | i?86-*-solaris2.1?)
! 
! cat >>confdefs.h <<\_ACEOF
  #define SOLARIS25_PROC_VDB_BUG_FIXED 1
! _ACEOF
  
      ;;
   mipstx39-*-elf*)
      machdep="mips_ultrix_mach_dep.lo"
! 
! cat >>confdefs.h <<\_ACEOF
  #define STACKBASE __stackbase
! _ACEOF
  
! 
! cat >>confdefs.h <<\_ACEOF
  #define DATASTART_IS_ETEXT 1
! _ACEOF
  
      ;;
   mips-dec-ultrix*)
*************** EOF
*** 3115,3122 ****
      ;;
   mips-nec-sysv*|mips-unknown-sysv*)
      ;;
!  mips*-*-linux*) 
!     ;; 
   mips-*-*)
      machdep="mips_sgi_mach_dep.lo"
      ;;
--- 5745,5752 ----
      ;;
   mips-nec-sysv*|mips-unknown-sysv*)
      ;;
!  mips*-*-linux*)
!     ;;
   mips-*-*)
      machdep="mips_sgi_mach_dep.lo"
      ;;
*************** EOF
*** 3125,3148 ****
      ;;
   sparc-sun-solaris2.3)
      machdep="sparc_mach_dep.lo"
!     cat >> confdefs.h <<\EOF
  #define SUNOS53_SHARED_LIB 1
! EOF
  
      ;;
!  sparc-sun-solaris2.*)
      machdep="sparc_mach_dep.lo"
      ;;
   ia64-*-*)
!     cat >> confdefs.h <<\EOF
  #define NO_EXECUTE_PERMISSION 1
! EOF
  
      machdep="mach_dep.lo ia64_save_regs_in_stack.lo"
      ;;
  esac
  if test x"$machdep" = x; then
! echo "$ac_t""$machdep" 1>&6
     machdep="mach_dep.lo"
  fi
  addobjs="$addobjs $machdep"
--- 5755,5781 ----
      ;;
   sparc-sun-solaris2.3)
      machdep="sparc_mach_dep.lo"
! 
! cat >>confdefs.h <<\_ACEOF
  #define SUNOS53_SHARED_LIB 1
! _ACEOF
  
      ;;
!  sparc*-sun-solaris2.*)
      machdep="sparc_mach_dep.lo"
      ;;
   ia64-*-*)
! 
! cat >>confdefs.h <<\_ACEOF
  #define NO_EXECUTE_PERMISSION 1
! _ACEOF
  
      machdep="mach_dep.lo ia64_save_regs_in_stack.lo"
      ;;
  esac
  if test x"$machdep" = x; then
! echo "$as_me:$LINENO: result: $machdep" >&5
! echo "${ECHO_T}$machdep" >&6
     machdep="mach_dep.lo"
  fi
  addobjs="$addobjs $machdep"
*************** addobjs="$addobjs $machdep"
*** 3151,3358 ****
  
  
  
-   
- 
-   
- 	 
- 	 
- 
  #
  # Check for AViiON Machines running DGUX
  #
! echo $ac_n "checking if host is AViiON running DGUX""... $ac_c" 1>&6
! echo "configure:3165: checking if host is AViiON running DGUX" >&5
  ac_is_dgux=no
! echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
! echo "configure:3168: checking how to run the C preprocessor" >&5
  # On Suns, sometimes $CPP names a directory.
  if test -n "$CPP" && test -d "$CPP"; then
    CPP=
  fi
  if test -z "$CPP"; then
! if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!     # This must be in double quotes, not single quotes, because CPP may get
!   # substituted into the Makefile and "${CC-cc}" will confuse make.
!   CPP="${CC-cc} -E"
    # On the NeXT, cc -E runs the code through the compiler's parser,
!   # not just through cpp.
!   cat > conftest.$ac_ext <<EOF
! #line 3183 "configure"
! #include "confdefs.h"
! #include <assert.h>
! Syntax Error
! EOF
! ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:3189: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
! ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
! if test -z "$ac_err"; then
!   :
  else
!   echo "$ac_err" >&5
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   CPP="${CC-cc} -E -traditional-cpp"
!   cat > conftest.$ac_ext <<EOF
! #line 3200 "configure"
! #include "confdefs.h"
! #include <assert.h>
! Syntax Error
! EOF
! ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:3206: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
! ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
! if test -z "$ac_err"; then
    :
  else
!   echo "$ac_err" >&5
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   CPP="${CC-cc} -nologo -E"
!   cat > conftest.$ac_ext <<EOF
! #line 3217 "configure"
! #include "confdefs.h"
! #include <assert.h>
! Syntax Error
! EOF
! ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:3223: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
! ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
! if test -z "$ac_err"; then
!   :
  else
!   echo "$ac_err" >&5
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   CPP=/lib/cpp
  fi
! rm -f conftest*
  fi
! rm -f conftest*
  fi
! rm -f conftest*
!   ac_cv_prog_CPP="$CPP"
  fi
!   CPP="$ac_cv_prog_CPP"
  else
!   ac_cv_prog_CPP="$CPP"
  fi
! echo "$ac_t""$CPP" 1>&6
! 
! ac_safe=`echo "sys/dg_sys_info.h" | sed 'y%./+-%__p_%'`
! echo $ac_n "checking for sys/dg_sys_info.h""... $ac_c" 1>&6
! echo "configure:3249: checking for sys/dg_sys_info.h" >&5
! if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 3254 "configure"
! #include "confdefs.h"
! #include <sys/dg_sys_info.h>
! EOF
! ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:3259: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
! ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
! if test -z "$ac_err"; then
!   rm -rf conftest*
!   eval "ac_cv_header_$ac_safe=yes"
  else
!   echo "$ac_err" >&5
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_header_$ac_safe=no"
  fi
! rm -f conftest*
  fi
! if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
!   ac_is_dgux=yes;
  else
!   echo "$ac_t""no" 1>&6
  fi
  
  
! echo "$ac_t""$ac_is_dgux" 1>&6 
!     ## :GOTCHA: we do not check anything but sys/dg_sys_info.h
! if test $ac_is_dgux = yes; then
!     if test "$enable_full_debug" = "yes"; then
!       CFLAGS="-g -mstandard -DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
!       CXXFLAGS="-g -mstandard -DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
!     else
!       CFLAGS="-DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
!       CXXFLAGS="-DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
      fi
-     
-     
  fi
  
! # Check whether --with-target-subdir or --without-target-subdir was given.
! if test "${with_target_subdir+set}" = set; then
!   withval="$with_target_subdir"
    :
  fi
  
! # Check whether --with-cross-host or --without-cross-host was given.
! if test "${with_cross_host+set}" = set; then
!   withval="$with_cross_host"
    :
  fi
  
  
! # automake wants to see AC_EXEEXT.  But we don't need it.  And having
! # it is actually a problem, because the compiler we're passed can't
! # necessarily do a full link.  So we fool automake here.
! if false; then
!   # autoconf 2.50 runs AC_EXEEXT by default, and the macro expands
!   # to nothing, so nothing would remain between `then' and `fi' if it
!   # were not for the `:' below.
    :
!   
  
! echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
! echo "configure:3319: checking for executable suffix" >&5
! if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test "$CYGWIN" = yes || test "$MINGW32" = yes; then
!   ac_cv_exeext=.exe
  else
!   rm -f conftest*
!   echo 'int main () { return 0; }' > conftest.$ac_ext
!   ac_cv_exeext=
!   if { (eval echo configure:3329: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
!     for file in conftest.*; do
!       case $file in
!       *.c | *.o | *.obj) ;;
!       *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;;
!       esac
!     done
    else
!     { echo "configure: error: installation or configuration problem: compiler cannot create executables." 1>&2; exit 1; }
    fi
!   rm -f conftest*
!   test x"${ac_cv_exeext}" = x && ac_cv_exeext=no
  fi
  fi
  
- EXEEXT=""
- test x"${ac_cv_exeext}" != xno && EXEEXT=${ac_cv_exeext}
- echo "$ac_t""${ac_cv_exeext}" 1>&6
- ac_exeext=$EXEEXT
  
  fi
  
! echo $ac_n "checking whether Solaris gcc optimization fix is necessary""... $ac_c" 1>&6
! echo "configure:3352: checking whether Solaris gcc optimization fix is necessary" >&5
  case "$host" in
!  sparc-sun-solaris2*|*aix*)
      if test "$GCC" = yes; then
!        echo "$ac_t""yes" 1>&6
         new_CFLAGS=
         for i in $CFLAGS; do
  	  case "$i" in
--- 5784,6448 ----
  
  
  
  #
  # Check for AViiON Machines running DGUX
  #
! echo "$as_me:$LINENO: checking if host is AViiON running DGUX" >&5
! echo $ECHO_N "checking if host is AViiON running DGUX... $ECHO_C" >&6
  ac_is_dgux=no
! ac_ext=c
! ac_cpp='$CPP $CPPFLAGS'
! ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
! ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
! ac_compiler_gnu=$ac_cv_c_compiler_gnu
! echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
! echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
  # On Suns, sometimes $CPP names a directory.
  if test -n "$CPP" && test -d "$CPP"; then
    CPP=
  fi
  if test -z "$CPP"; then
!   if test "${ac_cv_prog_CPP+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!       # Double quotes because CPP needs to be expanded
!     for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
!     do
!       ac_preproc_ok=false
! for ac_c_preproc_warn_flag in '' yes
! do
!   # Use a header file that comes with gcc, so configuring glibc
!   # with a fresh cross-compiler works.
!   # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
!   # <limits.h> exists even on freestanding compilers.
    # On the NeXT, cc -E runs the code through the compiler's parser,
!   # not just through cpp. "Syntax error" is here to catch this case.
!   cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
! #ifdef __STDC__
! # include <limits.h>
! #else
! # include <assert.h>
! #endif
! 		     Syntax error
! _ACEOF
! if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
!   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
!   ac_status=$?
!   grep -v '^ *+' conftest.er1 >conftest.err
!   rm -f conftest.er1
!   cat conftest.err >&5
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } >/dev/null; then
!   if test -s conftest.err; then
!     ac_cpp_err=$ac_c_preproc_warn_flag
!     ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
!   else
!     ac_cpp_err=
!   fi
  else
!   ac_cpp_err=yes
! fi
! if test -z "$ac_cpp_err"; then
    :
  else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
!   # Broken: fails on valid input.
! continue
! fi
! rm -f conftest.err conftest.$ac_ext
! 
!   # OK, works on sane cases.  Now check whether non-existent headers
!   # can be detected and how.
!   cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
! #include <ac_nonexistent.h>
! _ACEOF
! if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
!   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
!   ac_status=$?
!   grep -v '^ *+' conftest.er1 >conftest.err
!   rm -f conftest.er1
!   cat conftest.err >&5
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } >/dev/null; then
!   if test -s conftest.err; then
!     ac_cpp_err=$ac_c_preproc_warn_flag
!     ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
!   else
!     ac_cpp_err=
!   fi
  else
!   ac_cpp_err=yes
  fi
! if test -z "$ac_cpp_err"; then
!   # Broken: success on invalid input.
! continue
! else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
!   # Passes both tests.
! ac_preproc_ok=:
! break
  fi
! rm -f conftest.err conftest.$ac_ext
! 
! done
! # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
! rm -f conftest.err conftest.$ac_ext
! if $ac_preproc_ok; then
!   break
  fi
! 
!     done
!     ac_cv_prog_CPP=$CPP
! 
  fi
!   CPP=$ac_cv_prog_CPP
  else
!   ac_cv_prog_CPP=$CPP
  fi
! echo "$as_me:$LINENO: result: $CPP" >&5
! echo "${ECHO_T}$CPP" >&6
! ac_preproc_ok=false
! for ac_c_preproc_warn_flag in '' yes
! do
!   # Use a header file that comes with gcc, so configuring glibc
!   # with a fresh cross-compiler works.
!   # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
!   # <limits.h> exists even on freestanding compilers.
!   # On the NeXT, cc -E runs the code through the compiler's parser,
!   # not just through cpp. "Syntax error" is here to catch this case.
!   cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
! #ifdef __STDC__
! # include <limits.h>
! #else
! # include <assert.h>
! #endif
! 		     Syntax error
! _ACEOF
! if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
!   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
!   ac_status=$?
!   grep -v '^ *+' conftest.er1 >conftest.err
!   rm -f conftest.er1
!   cat conftest.err >&5
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } >/dev/null; then
!   if test -s conftest.err; then
!     ac_cpp_err=$ac_c_preproc_warn_flag
!     ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
!   else
!     ac_cpp_err=
!   fi
  else
!   ac_cpp_err=yes
! fi
! if test -z "$ac_cpp_err"; then
!   :
  else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
!   # Broken: fails on valid input.
! continue
  fi
! rm -f conftest.err conftest.$ac_ext
! 
!   # OK, works on sane cases.  Now check whether non-existent headers
!   # can be detected and how.
!   cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
! #include <ac_nonexistent.h>
! _ACEOF
! if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
!   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
!   ac_status=$?
!   grep -v '^ *+' conftest.er1 >conftest.err
!   rm -f conftest.er1
!   cat conftest.err >&5
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } >/dev/null; then
!   if test -s conftest.err; then
!     ac_cpp_err=$ac_c_preproc_warn_flag
!     ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
!   else
!     ac_cpp_err=
!   fi
! else
!   ac_cpp_err=yes
  fi
! if test -z "$ac_cpp_err"; then
!   # Broken: success on invalid input.
! continue
  else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
!   # Passes both tests.
! ac_preproc_ok=:
! break
  fi
+ rm -f conftest.err conftest.$ac_ext
  
+ done
+ # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+ rm -f conftest.err conftest.$ac_ext
+ if $ac_preproc_ok; then
+   :
+ else
+   { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+ See \`config.log' for more details." >&5
+ echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+ See \`config.log' for more details." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
  
! ac_ext=c
! ac_cpp='$CPP $CPPFLAGS'
! ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
! ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
! ac_compiler_gnu=$ac_cv_c_compiler_gnu
! 
! 
! echo "$as_me:$LINENO: checking for egrep" >&5
! echo $ECHO_N "checking for egrep... $ECHO_C" >&6
! if test "${ac_cv_prog_egrep+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
! else
!   if echo a | (grep -E '(a|b)') >/dev/null 2>&1
!     then ac_cv_prog_egrep='grep -E'
!     else ac_cv_prog_egrep='egrep'
      fi
  fi
+ echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
+ echo "${ECHO_T}$ac_cv_prog_egrep" >&6
+  EGREP=$ac_cv_prog_egrep
  
! 
! echo "$as_me:$LINENO: checking for ANSI C header files" >&5
! echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
! if test "${ac_cv_header_stdc+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
! else
!   cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
! #include <stdlib.h>
! #include <stdarg.h>
! #include <string.h>
! #include <float.h>
! 
! int
! main ()
! {
! 
!   ;
!   return 0;
! }
! _ACEOF
! rm -f conftest.$ac_objext
! if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
!   ac_status=$?
!   grep -v '^ *+' conftest.er1 >conftest.err
!   rm -f conftest.er1
!   cat conftest.err >&5
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; }; then
!   ac_cv_header_stdc=yes
! else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
! ac_cv_header_stdc=no
! fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
! 
! if test $ac_cv_header_stdc = yes; then
!   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
!   cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
! #include <string.h>
! 
! _ACEOF
! if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
!   $EGREP "memchr" >/dev/null 2>&1; then
    :
+ else
+   ac_cv_header_stdc=no
  fi
+ rm -f conftest*
  
! fi
! 
! if test $ac_cv_header_stdc = yes; then
!   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
!   cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
! #include <stdlib.h>
! 
! _ACEOF
! if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
!   $EGREP "free" >/dev/null 2>&1; then
    :
+ else
+   ac_cv_header_stdc=no
  fi
+ rm -f conftest*
  
+ fi
  
! if test $ac_cv_header_stdc = yes; then
!   # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
!   if test "$cross_compiling" = yes; then
    :
! else
!   cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
! #include <ctype.h>
! #if ((' ' & 0x0FF) == 0x020)
! # define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
! # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
! #else
! # define ISLOWER(c) \
! 		   (('a' <= (c) && (c) <= 'i') \
! 		     || ('j' <= (c) && (c) <= 'r') \
! 		     || ('s' <= (c) && (c) <= 'z'))
! # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
! #endif
  
! #define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
! int
! main ()
! {
!   int i;
!   for (i = 0; i < 256; i++)
!     if (XOR (islower (i), ISLOWER (i))
! 	|| toupper (i) != TOUPPER (i))
!       exit(2);
!   exit (0);
! }
! _ACEOF
! rm -f conftest$ac_exeext
! if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
!   (eval $ac_link) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; }; then
!   :
  else
!   echo "$as_me: program exited with status $ac_status" >&5
! echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
! ( exit $ac_status )
! ac_cv_header_stdc=no
! fi
! rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
! fi
! fi
! fi
! echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
! echo "${ECHO_T}$ac_cv_header_stdc" >&6
! if test $ac_cv_header_stdc = yes; then
! 
! cat >>confdefs.h <<\_ACEOF
! #define STDC_HEADERS 1
! _ACEOF
! 
! fi
! 
! # On IRIX 5.3, sys/types and inttypes.h are conflicting.
! 
! 
! 
! 
! 
! 
! 
! 
! 
! for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
! 		  inttypes.h stdint.h unistd.h
! do
! as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
! echo "$as_me:$LINENO: checking for $ac_header" >&5
! echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
! if eval "test \"\${$as_ac_Header+set}\" = set"; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
! $ac_includes_default
! 
! #include <$ac_header>
! _ACEOF
! rm -f conftest.$ac_objext
! if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
!   ac_status=$?
!   grep -v '^ *+' conftest.er1 >conftest.err
!   rm -f conftest.er1
!   cat conftest.err >&5
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; }; then
!   eval "$as_ac_Header=yes"
! else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
! eval "$as_ac_Header=no"
! fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
! fi
! echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
! echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
! if test `eval echo '${'$as_ac_Header'}'` = yes; then
!   cat >>confdefs.h <<_ACEOF
! #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
! _ACEOF
! 
! fi
! 
! done
! 
! 
! if test "${ac_cv_header_sys_dg_sys_info_h+set}" = set; then
!   echo "$as_me:$LINENO: checking for sys/dg_sys_info.h" >&5
! echo $ECHO_N "checking for sys/dg_sys_info.h... $ECHO_C" >&6
! if test "${ac_cv_header_sys_dg_sys_info_h+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
! fi
! echo "$as_me:$LINENO: result: $ac_cv_header_sys_dg_sys_info_h" >&5
! echo "${ECHO_T}$ac_cv_header_sys_dg_sys_info_h" >&6
! else
!   # Is the header compilable?
! echo "$as_me:$LINENO: checking sys/dg_sys_info.h usability" >&5
! echo $ECHO_N "checking sys/dg_sys_info.h usability... $ECHO_C" >&6
! cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
! $ac_includes_default
! #include <sys/dg_sys_info.h>
! _ACEOF
! rm -f conftest.$ac_objext
! if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
!   ac_status=$?
!   grep -v '^ *+' conftest.er1 >conftest.err
!   rm -f conftest.er1
!   cat conftest.err >&5
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; }; then
!   ac_header_compiler=yes
! else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
! ac_header_compiler=no
! fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
! echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
! echo "${ECHO_T}$ac_header_compiler" >&6
! 
! # Is the header present?
! echo "$as_me:$LINENO: checking sys/dg_sys_info.h presence" >&5
! echo $ECHO_N "checking sys/dg_sys_info.h presence... $ECHO_C" >&6
! cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
! #include <sys/dg_sys_info.h>
! _ACEOF
! if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
!   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
!   ac_status=$?
!   grep -v '^ *+' conftest.er1 >conftest.err
!   rm -f conftest.er1
!   cat conftest.err >&5
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } >/dev/null; then
!   if test -s conftest.err; then
!     ac_cpp_err=$ac_c_preproc_warn_flag
!     ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
    else
!     ac_cpp_err=
    fi
! else
!   ac_cpp_err=yes
! fi
! if test -z "$ac_cpp_err"; then
!   ac_header_preproc=yes
! else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
!   ac_header_preproc=no
  fi
+ rm -f conftest.err conftest.$ac_ext
+ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+ echo "${ECHO_T}$ac_header_preproc" >&6
+ 
+ # So?  What about this header?
+ case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+   yes:no: )
+     { echo "$as_me:$LINENO: WARNING: sys/dg_sys_info.h: accepted by the compiler, rejected by the preprocessor!" >&5
+ echo "$as_me: WARNING: sys/dg_sys_info.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+     { echo "$as_me:$LINENO: WARNING: sys/dg_sys_info.h: proceeding with the compiler's result" >&5
+ echo "$as_me: WARNING: sys/dg_sys_info.h: proceeding with the compiler's result" >&2;}
+     ac_header_preproc=yes
+     ;;
+   no:yes:* )
+     { echo "$as_me:$LINENO: WARNING: sys/dg_sys_info.h: present but cannot be compiled" >&5
+ echo "$as_me: WARNING: sys/dg_sys_info.h: present but cannot be compiled" >&2;}
+     { echo "$as_me:$LINENO: WARNING: sys/dg_sys_info.h:     check for missing prerequisite headers?" >&5
+ echo "$as_me: WARNING: sys/dg_sys_info.h:     check for missing prerequisite headers?" >&2;}
+     { echo "$as_me:$LINENO: WARNING: sys/dg_sys_info.h: see the Autoconf documentation" >&5
+ echo "$as_me: WARNING: sys/dg_sys_info.h: see the Autoconf documentation" >&2;}
+     { echo "$as_me:$LINENO: WARNING: sys/dg_sys_info.h:     section \"Present But Cannot Be Compiled\"" >&5
+ echo "$as_me: WARNING: sys/dg_sys_info.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+     { echo "$as_me:$LINENO: WARNING: sys/dg_sys_info.h: proceeding with the preprocessor's result" >&5
+ echo "$as_me: WARNING: sys/dg_sys_info.h: proceeding with the preprocessor's result" >&2;}
+     { echo "$as_me:$LINENO: WARNING: sys/dg_sys_info.h: in the future, the compiler will take precedence" >&5
+ echo "$as_me: WARNING: sys/dg_sys_info.h: in the future, the compiler will take precedence" >&2;}
+     (
+       cat <<\_ASBOX
+ ## ------------------------------------------ ##
+ ## Report this to the AC_PACKAGE_NAME lists.  ##
+ ## ------------------------------------------ ##
+ _ASBOX
+     ) |
+       sed "s/^/$as_me: WARNING:     /" >&2
+     ;;
+ esac
+ echo "$as_me:$LINENO: checking for sys/dg_sys_info.h" >&5
+ echo $ECHO_N "checking for sys/dg_sys_info.h... $ECHO_C" >&6
+ if test "${ac_cv_header_sys_dg_sys_info_h+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   ac_cv_header_sys_dg_sys_info_h=$ac_header_preproc
  fi
+ echo "$as_me:$LINENO: result: $ac_cv_header_sys_dg_sys_info_h" >&5
+ echo "${ECHO_T}$ac_cv_header_sys_dg_sys_info_h" >&6
+ 
+ fi
+ if test $ac_cv_header_sys_dg_sys_info_h = yes; then
+   ac_is_dgux=yes;
+ fi
+ 
+ 
+ 
+ echo "$as_me:$LINENO: result: $ac_is_dgux" >&5
+ echo "${ECHO_T}$ac_is_dgux" >&6
+     ## :GOTCHA: we do not check anything but sys/dg_sys_info.h
+ if test $ac_is_dgux = yes; then
+     if test "$enable_full_debug" = "yes"; then
+       CFLAGS="-g -mstandard -DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
+       CXXFLAGS="-g -mstandard -DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
+     else
+       CFLAGS="-DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
+       CXXFLAGS="-DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
+     fi
  
  
  fi
  
! echo "$as_me:$LINENO: checking whether Solaris gcc optimization fix is necessary" >&5
! echo $ECHO_N "checking whether Solaris gcc optimization fix is necessary... $ECHO_C" >&6
  case "$host" in
!  *aix*)
      if test "$GCC" = yes; then
!        echo "$as_me:$LINENO: result: yes" >&5
! echo "${ECHO_T}yes" >&6
         new_CFLAGS=
         for i in $CFLAGS; do
  	  case "$i" in
*************** case "$host" in
*** 3365,3464 ****
         done
         CFLAGS="$new_CFLAGS"
      else
!        echo "$ac_t""no" 1>&6
      fi
      ;;
!  *) echo "$ac_t""no" 1>&6 ;;
  esac
  
  MY_CFLAGS="$CFLAGS"
  
  
! cat >> confdefs.h <<\EOF
  #define SILENT 1
! EOF
  
! cat >> confdefs.h <<\EOF
  #define NO_SIGNALS 1
! EOF
  
! cat >> confdefs.h <<\EOF
  #define ALL_INTERIOR_POINTERS 1
! EOF
  
  
! cat >> confdefs.h <<\EOF
  #define JAVA_FINALIZATION 1
! EOF
  
! cat >> confdefs.h <<\EOF
  #define GC_GCJ_SUPPORT 1
! EOF
  
! cat >> confdefs.h <<\EOF
  #define ATOMIC_UNCOLLECTABLE 1
! EOF
  
  
  if test -n "${with_cross_host}"; then
!    cat >> confdefs.h <<\EOF
  #define NO_SIGSET 1
! EOF
  
!    cat >> confdefs.h <<\EOF
  #define NO_DEBUGGING 1
! EOF
  
  fi
  
! # Check whether --enable-full-debug or --disable-full-debug was given.
! if test "${enable_full_debug+set}" = set; then
!   enableval="$enable_full_debug"
!    if test "$enable_full_debug" = "yes"; then
!     echo "configure: warning: "Must define GC_DEBUG and use debug alloc. in clients."" 1>&2
!     cat >> confdefs.h <<\EOF
  #define KEEP_BACK_PTRS 1
! EOF
  
!     cat >> confdefs.h <<\EOF
  #define DBG_HDRS_ALL 1
! EOF
  
      case $host in
        ia64-*-linux* )
! 	cat >> confdefs.h <<\EOF
  #define MAKE_BACK_GRAPH 1
! EOF
  
        ;;
        x86-*-linux* | i586-*-linux* | i686-*-linux* | x86_64-*-linux* )
! 	cat >> confdefs.h <<\EOF
  #define MAKE_BACK_GRAPH 1
! EOF
  
! 	echo "configure: warning: "Client must not use -fomit-frame-pointer."" 1>&2
! 	cat >> confdefs.h <<\EOF
  #define SAVE_CALL_COUNT 8
! EOF
  
        ;;
        i345686-*-dgux*)
! 	cat >> confdefs.h <<\EOF
  #define MAKE_BACK_GRAPH 1
! EOF
  
        ;;
!     esac 
    fi
! fi
  
  
  if test -n "$with_cross_host" &&
     test x"$with_cross_host" != x"no"; then
!   toolexecdir='$(exec_prefix)/$(target_alias)'
    toolexeclibdir='$(toolexecdir)/lib'
  else
!   toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
    toolexeclibdir='$(libdir)'
  fi
  multi_os_directory=`$CC -print-multi-os-directory`
--- 6455,6577 ----
         done
         CFLAGS="$new_CFLAGS"
      else
!        echo "$as_me:$LINENO: result: no" >&5
! echo "${ECHO_T}no" >&6
      fi
      ;;
!  *) echo "$as_me:$LINENO: result: no" >&5
! echo "${ECHO_T}no" >&6 ;;
  esac
  
  MY_CFLAGS="$CFLAGS"
  
  
! 
! cat >>confdefs.h <<\_ACEOF
  #define SILENT 1
! _ACEOF
  
! 
! cat >>confdefs.h <<\_ACEOF
  #define NO_SIGNALS 1
! _ACEOF
  
! 
! cat >>confdefs.h <<\_ACEOF
  #define ALL_INTERIOR_POINTERS 1
! _ACEOF
  
  
! 
! cat >>confdefs.h <<\_ACEOF
  #define JAVA_FINALIZATION 1
! _ACEOF
  
! 
! cat >>confdefs.h <<\_ACEOF
  #define GC_GCJ_SUPPORT 1
! _ACEOF
  
! 
! cat >>confdefs.h <<\_ACEOF
  #define ATOMIC_UNCOLLECTABLE 1
! _ACEOF
  
  
  if test -n "${with_cross_host}"; then
! 
! cat >>confdefs.h <<\_ACEOF
  #define NO_SIGSET 1
! _ACEOF
  
! 
! cat >>confdefs.h <<\_ACEOF
  #define NO_DEBUGGING 1
! _ACEOF
  
  fi
  
! # Check whether --enable-gc-debug or --disable-gc-debug was given.
! if test "${enable_gc_debug+set}" = set; then
!   enableval="$enable_gc_debug"
!    if test "$enable_gc_debug" = "yes"; then
!     { echo "$as_me:$LINENO: WARNING: \"Must define GC_DEBUG and use debug alloc. in clients.\"" >&5
! echo "$as_me: WARNING: \"Must define GC_DEBUG and use debug alloc. in clients.\"" >&2;}
! 
! cat >>confdefs.h <<\_ACEOF
  #define KEEP_BACK_PTRS 1
! _ACEOF
  
! 
! cat >>confdefs.h <<\_ACEOF
  #define DBG_HDRS_ALL 1
! _ACEOF
  
      case $host in
        ia64-*-linux* )
! 
! cat >>confdefs.h <<\_ACEOF
  #define MAKE_BACK_GRAPH 1
! _ACEOF
  
        ;;
        x86-*-linux* | i586-*-linux* | i686-*-linux* | x86_64-*-linux* )
! 	cat >>confdefs.h <<\_ACEOF
  #define MAKE_BACK_GRAPH 1
! _ACEOF
  
! 	{ echo "$as_me:$LINENO: WARNING: \"Client must not use -fomit-frame-pointer.\"" >&5
! echo "$as_me: WARNING: \"Client must not use -fomit-frame-pointer.\"" >&2;}
! 
! cat >>confdefs.h <<\_ACEOF
  #define SAVE_CALL_COUNT 8
! _ACEOF
  
        ;;
        i345686-*-dgux*)
! 	cat >>confdefs.h <<\_ACEOF
  #define MAKE_BACK_GRAPH 1
! _ACEOF
  
        ;;
!     esac
    fi
! fi;
  
+ if test "${gc_use_mmap}" = "yes"; then
+ 
+ cat >>confdefs.h <<\_ACEOF
+ #define USE_MMAP 1
+ _ACEOF
+ 
+ fi
  
  if test -n "$with_cross_host" &&
     test x"$with_cross_host" != x"no"; then
!   toolexecdir='$(exec_prefix)/$(target_noncanonical)'
    toolexeclibdir='$(toolexecdir)/lib'
  else
!   toolexecdir='$(libdir)/gcc-lib/$(target_noncanonical)'
    toolexeclibdir='$(libdir)'
  fi
  multi_os_directory=`$CC -print-multi-os-directory`
*************** else
*** 3475,3811 ****
    multilib_arg=
  fi
  
! trap '' 1 2 15
! cat > confcache <<\EOF
  # This file is a shell script that caches the results of configure
  # tests run on this system so they can be shared between configure
! # scripts and configure runs.  It is not useful on other systems.
! # If it contains results you don't want to keep, you may remove or edit it.
  #
! # By default, configure uses ./config.cache as the cache file,
! # creating it if it does not exist already.  You can give configure
! # the --cache-file=FILE option to use a different cache file; that is
! # what configure does when it calls configure scripts in
! # subdirectories, so they share the cache.
! # Giving --cache-file=/dev/null disables caching, for debugging configure.
! # config.status only pays attention to the cache file if you give it the
! # --recheck option to rerun configure.
  #
! EOF
  # The following way of writing the cache mishandles newlines in values,
  # but we know of no workaround that is simple, portable, and efficient.
  # So, don't put newlines in cache variables' values.
  # Ultrix sh set writes to stderr and can't be redirected directly,
  # and sets the high bit in the cache file unless we assign to the vars.
! (set) 2>&1 |
!   case `(ac_space=' '; set | grep ac_space) 2>&1` in
!   *ac_space=\ *)
!     # `set' does not quote correctly, so add quotes (double-quote substitution
!     # turns \\\\ into \\, and sed turns \\ into \).
!     sed -n \
!       -e "s/'/'\\\\''/g" \
!       -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
!     ;;
!   *)
!     # `set' quotes correctly as required by POSIX, so do not add quotes.
!     sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
!     ;;
!   esac >> confcache
! if cmp -s $cache_file confcache; then
!   :
! else
    if test -w $cache_file; then
!     echo "updating cache $cache_file"
!     cat confcache > $cache_file
    else
      echo "not updating unwritable cache $cache_file"
    fi
  fi
  rm -f confcache
  
- trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
- 
  test "x$prefix" = xNONE && prefix=$ac_default_prefix
  # Let make expand exec_prefix.
  test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
  
! # Any assignment to VPATH causes Sun make to only execute
! # the first set of double-colon rules, so remove it if not needed.
! # If there is a colon in the path, we need to keep it.
  if test "x$srcdir" = x.; then
!   ac_vpsub='/^[ 	]*VPATH[ 	]*=[^:]*$/d'
  fi
  
! trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
  
! # Transform confdefs.h into DEFS.
! # Protect against shell expansion while executing Makefile rules.
! # Protect against Makefile macro expansion.
! cat > conftest.defs <<\EOF
! s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g
! s%[ 	`~#$^&*(){}\\|;'"<>?]%\\&%g
! s%\[%\\&%g
! s%\]%\\&%g
! s%\$%$$%g
! EOF
! DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '`
! rm -f conftest.defs
  
  
- # Without the "./", some shells look in PATH for config.status.
- : ${CONFIG_STATUS=./config.status}
  
! echo creating $CONFIG_STATUS
! rm -f $CONFIG_STATUS
! cat > $CONFIG_STATUS <<EOF
! #! /bin/sh
! # Generated automatically by configure.
  # Run this file to recreate the current configuration.
- # This directory was configured as follows,
- # on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
- #
- # $0 $ac_configure_args
- #
  # Compiler output produced by configure, useful for debugging
! # configure, is in ./config.log if it exists.
  
! ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
! for ac_option
  do
!   case "\$ac_option" in
    -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
!     echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
!     exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
!   -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
!     echo "$CONFIG_STATUS generated by autoconf version 2.13"
!     exit 0 ;;
!   -help | --help | --hel | --he | --h)
!     echo "\$ac_cs_usage"; exit 0 ;;
!   *) echo "\$ac_cs_usage"; exit 1 ;;
    esac
  done
  
! ac_given_srcdir=$srcdir
! ac_given_INSTALL="$INSTALL"
  
! trap 'rm -fr `echo "Makefile include/Makefile" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
! EOF
! cat >> $CONFIG_STATUS <<EOF
  
! # Protect against being on the right side of a sed subst in config.status.
! sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
!  s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
! $ac_vpsub
! $extrasub
! s%@SHELL@%$SHELL%g
! s%@CFLAGS@%$CFLAGS%g
! s%@CPPFLAGS@%$CPPFLAGS%g
! s%@CXXFLAGS@%$CXXFLAGS%g
! s%@FFLAGS@%$FFLAGS%g
! s%@DEFS@%$DEFS%g
! s%@LDFLAGS@%$LDFLAGS%g
! s%@LIBS@%$LIBS%g
! s%@exec_prefix@%$exec_prefix%g
! s%@prefix@%$prefix%g
! s%@program_transform_name@%$program_transform_name%g
! s%@bindir@%$bindir%g
! s%@sbindir@%$sbindir%g
! s%@libexecdir@%$libexecdir%g
! s%@datadir@%$datadir%g
! s%@sysconfdir@%$sysconfdir%g
! s%@sharedstatedir@%$sharedstatedir%g
! s%@localstatedir@%$localstatedir%g
! s%@libdir@%$libdir%g
! s%@includedir@%$includedir%g
! s%@oldincludedir@%$oldincludedir%g
! s%@infodir@%$infodir%g
! s%@mandir@%$mandir%g
! s%@gc_basedir@%$gc_basedir%g
! s%@host@%$host%g
! s%@host_alias@%$host_alias%g
! s%@host_cpu@%$host_cpu%g
! s%@host_vendor@%$host_vendor%g
! s%@host_os@%$host_os%g
! s%@target@%$target%g
! s%@target_alias@%$target_alias%g
! s%@target_cpu@%$target_cpu%g
! s%@target_vendor@%$target_vendor%g
! s%@target_os@%$target_os%g
! s%@build@%$build%g
! s%@build_alias@%$build_alias%g
! s%@build_cpu@%$build_cpu%g
! s%@build_vendor@%$build_vendor%g
! s%@build_os@%$build_os%g
! s%@mkinstalldirs@%$mkinstalldirs%g
! s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
! s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
! s%@INSTALL_DATA@%$INSTALL_DATA%g
! s%@PACKAGE@%$PACKAGE%g
! s%@VERSION@%$VERSION%g
! s%@ACLOCAL@%$ACLOCAL%g
! s%@AUTOCONF@%$AUTOCONF%g
! s%@AUTOMAKE@%$AUTOMAKE%g
! s%@AUTOHEADER@%$AUTOHEADER%g
! s%@MAKEINFO@%$MAKEINFO%g
! s%@SET_MAKE@%$SET_MAKE%g
! s%@CC@%$CC%g
! s%@CXX@%$CXX%g
! s%@AS@%$AS%g
! s%@AR@%$AR%g
! s%@RANLIB@%$RANLIB%g
! s%@MAINTAINER_MODE_TRUE@%$MAINTAINER_MODE_TRUE%g
! s%@MAINTAINER_MODE_FALSE@%$MAINTAINER_MODE_FALSE%g
! s%@MAINT@%$MAINT%g
! s%@EXEEXT@%$EXEEXT%g
! s%@GC_CFLAGS@%$GC_CFLAGS%g
! s%@LN_S@%$LN_S%g
! s%@OBJEXT@%$OBJEXT%g
! s%@STRIP@%$STRIP%g
! s%@LIBTOOL@%$LIBTOOL%g
! s%@CXXCPP@%$CXXCPP%g
! s%@THREADLIBS@%$THREADLIBS%g
! s%@POWERPC_DARWIN_TRUE@%$POWERPC_DARWIN_TRUE%g
! s%@POWERPC_DARWIN_FALSE@%$POWERPC_DARWIN_FALSE%g
! s%@EXTRA_TEST_LIBS@%$EXTRA_TEST_LIBS%g
! s%@target_all@%$target_all%g
! s%@CPLUSPLUS_TRUE@%$CPLUSPLUS_TRUE%g
! s%@CPLUSPLUS_FALSE@%$CPLUSPLUS_FALSE%g
! s%@INCLUDES@%$INCLUDES%g
! s%@CXXINCLUDES@%$CXXINCLUDES%g
! s%@addobjs@%$addobjs%g
! s%@addincludes@%$addincludes%g
! s%@addlibs@%$addlibs%g
! s%@addtests@%$addtests%g
! s%@CPP@%$CPP%g
! s%@MY_CFLAGS@%$MY_CFLAGS%g
! s%@toolexecdir@%$toolexecdir%g
! s%@toolexeclibdir@%$toolexeclibdir%g
  
  CEOF
- EOF
  
! cat >> $CONFIG_STATUS <<\EOF
  
! # Split the substitutions into bite-sized pieces for seds with
! # small command number limits, like on Digital OSF/1 and HP-UX.
! ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
! ac_file=1 # Number of current file.
! ac_beg=1 # First line for current file.
! ac_end=$ac_max_sed_cmds # Line after last line for current file.
! ac_more_lines=:
! ac_sed_cmds=""
! while $ac_more_lines; do
!   if test $ac_beg -gt 1; then
!     sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
!   else
!     sed "${ac_end}q" conftest.subs > conftest.s$ac_file
    fi
!   if test ! -s conftest.s$ac_file; then
!     ac_more_lines=false
!     rm -f conftest.s$ac_file
    else
!     if test -z "$ac_sed_cmds"; then
!       ac_sed_cmds="sed -f conftest.s$ac_file"
      else
!       ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
!     fi
!     ac_file=`expr $ac_file + 1`
!     ac_beg=$ac_end
!     ac_end=`expr $ac_end + $ac_max_sed_cmds`
    fi
  done
! if test -z "$ac_sed_cmds"; then
!   ac_sed_cmds=cat
! fi
! EOF
  
! cat >> $CONFIG_STATUS <<EOF
  
! CONFIG_FILES=\${CONFIG_FILES-"Makefile include/Makefile"}
! EOF
! cat >> $CONFIG_STATUS <<\EOF
! for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
    # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
!   case "$ac_file" in
!   *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
!        ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
!   *) ac_file_in="${ac_file}.in" ;;
    esac
  
!   # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
  
!   # Remove last slash and all that follows it.  Not all systems have dirname.
!   ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
!   if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
!     # The file is in a subdirectory.
!     test ! -d "$ac_dir" && mkdir "$ac_dir"
!     ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
!     # A "../" for each directory in $ac_dir_suffix.
!     ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
    else
!     ac_dir_suffix= ac_dots=
    fi
  
!   case "$ac_given_srcdir" in
!   .)  srcdir=.
!       if test -z "$ac_dots"; then top_srcdir=.
!       else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
!   /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
!   *) # Relative path.
!     srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
!     top_srcdir="$ac_dots$ac_given_srcdir" ;;
    esac
  
!   case "$ac_given_INSTALL" in
!   [/$]*) INSTALL="$ac_given_INSTALL" ;;
!   *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
!   esac
  
!   echo creating "$ac_file"
!   rm -f "$ac_file"
!   configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
!   case "$ac_file" in
!   *Makefile*) ac_comsub="1i\\
! # $configure_input" ;;
!   *) ac_comsub= ;;
!   esac
  
!   ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
!   sed -e "$ac_comsub
! s%@configure_input@%$configure_input%g
! s%@srcdir@%$srcdir%g
! s%@top_srcdir@%$top_srcdir%g
! s%@INSTALL@%$INSTALL%g
! " $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
! fi; done
! rm -f conftest.s*
  
! EOF
! cat >> $CONFIG_STATUS <<EOF
! srcdir=${srcdir}
! host=${host}
! target=${target}
! with_multisubdir=${with_multisubdir}
! ac_configure_args="${multilib_arg} ${ac_configure_args}"
! CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
! gc_basedir=${gc_basedir}
! CC="${CC}"
! ORIGINAL_LD_FOR_MULTILIBS="${ORIGINAL_LD_FOR_MULTILIBS}"
! DEFS="$DEFS"
! INCLUDES="$INCLUDES"
  
! EOF
! cat >> $CONFIG_STATUS <<\EOF
  
- echo "$INCLUDES $DEFS" > boehm-cflags
  
! if test -n "$CONFIG_FILES"; then
!   LD="${ORIGINAL_LD_FOR_MULTILIBS}"
!   ac_file=Makefile . ${gc_basedir}/../config-ml.in
! fi
! exit 0
! EOF
  chmod +x $CONFIG_STATUS
! rm -fr confdefs* $ac_clean_files
! test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
  
--- 6588,8089 ----
    multilib_arg=
  fi
  
!                     ac_config_headers="$ac_config_headers include/gc_config.h include/gc_ext_config.h"
! 
! 
!                     ac_config_files="$ac_config_files Makefile include/Makefile"
! 
! cat >confcache <<\_ACEOF
  # This file is a shell script that caches the results of configure
  # tests run on this system so they can be shared between configure
! # scripts and configure runs, see configure's option --config-cache.
! # It is not useful on other systems.  If it contains results you don't
! # want to keep, you may remove or edit it.
  #
! # config.status only pays attention to the cache file if you give it
! # the --recheck option to rerun configure.
  #
! # `ac_cv_env_foo' variables (set or unset) will be overridden when
! # loading this file, other *unset* `ac_cv_foo' will be assigned the
! # following values.
! 
! _ACEOF
! 
  # The following way of writing the cache mishandles newlines in values,
  # but we know of no workaround that is simple, portable, and efficient.
  # So, don't put newlines in cache variables' values.
  # Ultrix sh set writes to stderr and can't be redirected directly,
  # and sets the high bit in the cache file unless we assign to the vars.
! {
!   (set) 2>&1 |
!     case `(ac_space=' '; set | grep ac_space) 2>&1` in
!     *ac_space=\ *)
!       # `set' does not quote correctly, so add quotes (double-quote
!       # substitution turns \\\\ into \\, and sed turns \\ into \).
!       sed -n \
! 	"s/'/'\\\\''/g;
! 	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
!       ;;
!     *)
!       # `set' quotes correctly as required by POSIX, so do not add quotes.
!       sed -n \
! 	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
!       ;;
!     esac;
! } |
!   sed '
!      t clear
!      : clear
!      s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
!      t end
!      /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
!      : end' >>confcache
! if diff $cache_file confcache >/dev/null 2>&1; then :; else
    if test -w $cache_file; then
!     test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
!     cat confcache >$cache_file
    else
      echo "not updating unwritable cache $cache_file"
    fi
  fi
  rm -f confcache
  
  test "x$prefix" = xNONE && prefix=$ac_default_prefix
  # Let make expand exec_prefix.
  test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
  
! # VPATH may cause trouble with some makes, so we remove $(srcdir),
! # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
! # trailing colons and then remove the whole line if VPATH becomes empty
! # (actually we leave an empty line to preserve line numbers).
  if test "x$srcdir" = x.; then
!   ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
! s/:*\$(srcdir):*/:/;
! s/:*\${srcdir}:*/:/;
! s/:*@srcdir@:*/:/;
! s/^\([^=]*=[	 ]*\):*/\1/;
! s/:*$//;
! s/^[^=]*=[	 ]*$//;
! }'
  fi
  
! DEFS=-DHAVE_CONFIG_H
  
! ac_libobjs=
! ac_ltlibobjs=
! for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
!   # 1. Remove the extension, and $U if already installed.
!   ac_i=`echo "$ac_i" |
! 	 sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
!   # 2. Add them.
!   ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
!   ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
! done
! LIBOBJS=$ac_libobjs
  
+ LTLIBOBJS=$ac_ltlibobjs
  
  
! if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"AMDEP\" was never defined.
! Usually this means the macro was only invoked conditionally." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
! Usually this means the macro was only invoked conditionally." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined.
! Usually this means the macro was only invoked conditionally." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined.
! Usually this means the macro was only invoked conditionally." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! if test -z "${POWERPC_DARWIN_TRUE}" && test -z "${POWERPC_DARWIN_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"POWERPC_DARWIN\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"POWERPC_DARWIN\" was never defined.
! Usually this means the macro was only invoked conditionally." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! if test -z "${CPLUSPLUS_TRUE}" && test -z "${CPLUSPLUS_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"CPLUSPLUS\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"CPLUSPLUS\" was never defined.
! Usually this means the macro was only invoked conditionally." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 
! : ${CONFIG_STATUS=./config.status}
! ac_clean_files_save=$ac_clean_files
! ac_clean_files="$ac_clean_files $CONFIG_STATUS"
! { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
! echo "$as_me: creating $CONFIG_STATUS" >&6;}
! cat >$CONFIG_STATUS <<_ACEOF
! #! $SHELL
! # Generated by $as_me.
  # Run this file to recreate the current configuration.
  # Compiler output produced by configure, useful for debugging
! # configure, is in config.log if it exists.
  
! debug=false
! ac_cs_recheck=false
! ac_cs_silent=false
! SHELL=\${CONFIG_SHELL-$SHELL}
! _ACEOF
! 
! cat >>$CONFIG_STATUS <<\_ACEOF
! ## --------------------- ##
! ## M4sh Initialization.  ##
! ## --------------------- ##
! 
! # Be Bourne compatible
! if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
!   emulate sh
!   NULLCMD=:
!   # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
!   # is contrary to our usage.  Disable this feature.
!   alias -g '${1+"$@"}'='"$@"'
! elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
!   set -o posix
! fi
! DUALCASE=1; export DUALCASE # for MKS sh
! 
! # Support unset when possible.
! if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
!   as_unset=unset
! else
!   as_unset=false
! fi
! 
! 
! # Work around bugs in pre-3.0 UWIN ksh.
! $as_unset ENV MAIL MAILPATH
! PS1='$ '
! PS2='> '
! PS4='+ '
! 
! # NLS nuisances.
! for as_var in \
!   LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
!   LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
!   LC_TELEPHONE LC_TIME
  do
!   if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
!     eval $as_var=C; export $as_var
!   else
!     $as_unset $as_var
!   fi
! done
! 
! # Required to use basename.
! if expr a : '\(a\)' >/dev/null 2>&1; then
!   as_expr=expr
! else
!   as_expr=false
! fi
! 
! if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
!   as_basename=basename
! else
!   as_basename=false
! fi
! 
! 
! # Name of the executable.
! as_me=`$as_basename "$0" ||
! $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
! 	 X"$0" : 'X\(//\)$' \| \
! 	 X"$0" : 'X\(/\)$' \| \
! 	 .     : '\(.\)' 2>/dev/null ||
! echo X/"$0" |
!     sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
!   	  /^X\/\(\/\/\)$/{ s//\1/; q; }
!   	  /^X\/\(\/\).*/{ s//\1/; q; }
!   	  s/.*/./; q'`
! 
! 
! # PATH needs CR, and LINENO needs CR and PATH.
! # Avoid depending upon Character Ranges.
! as_cr_letters='abcdefghijklmnopqrstuvwxyz'
! as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
! as_cr_Letters=$as_cr_letters$as_cr_LETTERS
! as_cr_digits='0123456789'
! as_cr_alnum=$as_cr_Letters$as_cr_digits
! 
! # The user is always right.
! if test "${PATH_SEPARATOR+set}" != set; then
!   echo "#! /bin/sh" >conf$$.sh
!   echo  "exit 0"   >>conf$$.sh
!   chmod +x conf$$.sh
!   if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
!     PATH_SEPARATOR=';'
!   else
!     PATH_SEPARATOR=:
!   fi
!   rm -f conf$$.sh
! fi
! 
! 
!   as_lineno_1=$LINENO
!   as_lineno_2=$LINENO
!   as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
!   test "x$as_lineno_1" != "x$as_lineno_2" &&
!   test "x$as_lineno_3"  = "x$as_lineno_2"  || {
!   # Find who we are.  Look in the path if we contain no path at all
!   # relative or not.
!   case $0 in
!     *[\\/]* ) as_myself=$0 ;;
!     *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
! for as_dir in $PATH
! do
!   IFS=$as_save_IFS
!   test -z "$as_dir" && as_dir=.
!   test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
! done
! 
!        ;;
!   esac
!   # We did not find ourselves, most probably we were run as `sh COMMAND'
!   # in which case we are not to be found in the path.
!   if test "x$as_myself" = x; then
!     as_myself=$0
!   fi
!   if test ! -f "$as_myself"; then
!     { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
! echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
!    { (exit 1); exit 1; }; }
!   fi
!   case $CONFIG_SHELL in
!   '')
!     as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
! for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
! do
!   IFS=$as_save_IFS
!   test -z "$as_dir" && as_dir=.
!   for as_base in sh bash ksh sh5; do
! 	 case $as_dir in
! 	 /*)
! 	   if ("$as_dir/$as_base" -c '
!   as_lineno_1=$LINENO
!   as_lineno_2=$LINENO
!   as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
!   test "x$as_lineno_1" != "x$as_lineno_2" &&
!   test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
! 	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
! 	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
! 	     CONFIG_SHELL=$as_dir/$as_base
! 	     export CONFIG_SHELL
! 	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
! 	   fi;;
! 	 esac
!        done
! done
! ;;
!   esac
! 
!   # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
!   # uniformly replaced by the line number.  The first 'sed' inserts a
!   # line-number line before each line; the second 'sed' does the real
!   # work.  The second script uses 'N' to pair each line-number line
!   # with the numbered line, and appends trailing '-' during
!   # substitution so that $LINENO is not a special case at line end.
!   # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
!   # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
!   sed '=' <$as_myself |
!     sed '
!       N
!       s,$,-,
!       : loop
!       s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
!       t loop
!       s,-$,,
!       s,^['$as_cr_digits']*\n,,
!     ' >$as_me.lineno &&
!   chmod +x $as_me.lineno ||
!     { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
! echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
!    { (exit 1); exit 1; }; }
! 
!   # Don't try to exec as it changes $[0], causing all sort of problems
!   # (the dirname of $[0] is not the place where we might find the
!   # original and so on.  Autoconf is especially sensible to this).
!   . ./$as_me.lineno
!   # Exit status is that of the last command.
!   exit
! }
! 
! 
! case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
!   *c*,-n*) ECHO_N= ECHO_C='
! ' ECHO_T='	' ;;
!   *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
!   *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
! esac
! 
! if expr a : '\(a\)' >/dev/null 2>&1; then
!   as_expr=expr
! else
!   as_expr=false
! fi
! 
! rm -f conf$$ conf$$.exe conf$$.file
! echo >conf$$.file
! if ln -s conf$$.file conf$$ 2>/dev/null; then
!   # We could just check for DJGPP; but this test a) works b) is more generic
!   # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
!   if test -f conf$$.exe; then
!     # Don't use ln at all; we don't have any links
!     as_ln_s='cp -p'
!   else
!     as_ln_s='ln -s'
!   fi
! elif ln conf$$.file conf$$ 2>/dev/null; then
!   as_ln_s=ln
! else
!   as_ln_s='cp -p'
! fi
! rm -f conf$$ conf$$.exe conf$$.file
! 
! if mkdir -p . 2>/dev/null; then
!   as_mkdir_p=:
! else
!   test -d ./-p && rmdir ./-p
!   as_mkdir_p=false
! fi
! 
! as_executable_p="test -f"
! 
! # Sed expression to map a string onto a valid CPP name.
! as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
! 
! # Sed expression to map a string onto a valid variable name.
! as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
! 
! 
! # IFS
! # We need space, tab and new line, in precisely that order.
! as_nl='
! '
! IFS=" 	$as_nl"
! 
! # CDPATH.
! $as_unset CDPATH
! 
! exec 6>&1
! 
! # Open the log real soon, to keep \$[0] and so on meaningful, and to
! # report actual input values of CONFIG_FILES etc. instead of their
! # values after options handling.  Logging --version etc. is OK.
! exec 5>>config.log
! {
!   echo
!   sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
! ## Running $as_me. ##
! _ASBOX
! } >&5
! cat >&5 <<_CSEOF
! 
! This file was extended by $as_me, which was
! generated by GNU Autoconf 2.59.  Invocation command line was
! 
!   CONFIG_FILES    = $CONFIG_FILES
!   CONFIG_HEADERS  = $CONFIG_HEADERS
!   CONFIG_LINKS    = $CONFIG_LINKS
!   CONFIG_COMMANDS = $CONFIG_COMMANDS
!   $ $0 $@
! 
! _CSEOF
! echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
! echo >&5
! _ACEOF
! 
! # Files that config.status was made for.
! if test -n "$ac_config_files"; then
!   echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
! fi
! 
! if test -n "$ac_config_headers"; then
!   echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
! fi
! 
! if test -n "$ac_config_links"; then
!   echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
! fi
! 
! if test -n "$ac_config_commands"; then
!   echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
! fi
! 
! cat >>$CONFIG_STATUS <<\_ACEOF
! 
! ac_cs_usage="\
! \`$as_me' instantiates files from templates according to the
! current configuration.
! 
! Usage: $0 [OPTIONS] [FILE]...
! 
!   -h, --help       print this help, then exit
!   -V, --version    print version number, then exit
!   -q, --quiet      do not print progress messages
!   -d, --debug      don't remove temporary files
!       --recheck    update $as_me by reconfiguring in the same conditions
!   --file=FILE[:TEMPLATE]
! 		   instantiate the configuration file FILE
!   --header=FILE[:TEMPLATE]
! 		   instantiate the configuration header FILE
! 
! Configuration files:
! $config_files
! 
! Configuration headers:
! $config_headers
! 
! Configuration commands:
! $config_commands
! 
! Report bugs to <bug-autoconf@gnu.org>."
! _ACEOF
! 
! cat >>$CONFIG_STATUS <<_ACEOF
! ac_cs_version="\\
! config.status
! configured by $0, generated by GNU Autoconf 2.59,
!   with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
! 
! Copyright (C) 2003 Free Software Foundation, Inc.
! This config.status script is free software; the Free Software Foundation
! gives unlimited permission to copy, distribute and modify it."
! srcdir=$srcdir
! INSTALL="$INSTALL"
! _ACEOF
! 
! cat >>$CONFIG_STATUS <<\_ACEOF
! # If no file are specified by the user, then we need to provide default
! # value.  By we need to know if files were specified by the user.
! ac_need_defaults=:
! while test $# != 0
! do
!   case $1 in
!   --*=*)
!     ac_option=`expr "x$1" : 'x\([^=]*\)='`
!     ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
!     ac_shift=:
!     ;;
!   -*)
!     ac_option=$1
!     ac_optarg=$2
!     ac_shift=shift
!     ;;
!   *) # This is not an option, so the user has probably given explicit
!      # arguments.
!      ac_option=$1
!      ac_need_defaults=false;;
!   esac
! 
!   case $ac_option in
!   # Handling of the options.
! _ACEOF
! cat >>$CONFIG_STATUS <<\_ACEOF
    -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
!     ac_cs_recheck=: ;;
!   --version | --vers* | -V )
!     echo "$ac_cs_version"; exit 0 ;;
!   --he | --h)
!     # Conflict between --help and --header
!     { { echo "$as_me:$LINENO: error: ambiguous option: $1
! Try \`$0 --help' for more information." >&5
! echo "$as_me: error: ambiguous option: $1
! Try \`$0 --help' for more information." >&2;}
!    { (exit 1); exit 1; }; };;
!   --help | --hel | -h )
!     echo "$ac_cs_usage"; exit 0 ;;
!   --debug | --d* | -d )
!     debug=: ;;
!   --file | --fil | --fi | --f )
!     $ac_shift
!     CONFIG_FILES="$CONFIG_FILES $ac_optarg"
!     ac_need_defaults=false;;
!   --header | --heade | --head | --hea )
!     $ac_shift
!     CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
!     ac_need_defaults=false;;
!   -q | -quiet | --quiet | --quie | --qui | --qu | --q \
!   | -silent | --silent | --silen | --sile | --sil | --si | --s)
!     ac_cs_silent=: ;;
! 
!   # This is an error.
!   -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
! Try \`$0 --help' for more information." >&5
! echo "$as_me: error: unrecognized option: $1
! Try \`$0 --help' for more information." >&2;}
!    { (exit 1); exit 1; }; } ;;
! 
!   *) ac_config_targets="$ac_config_targets $1" ;;
! 
    esac
+   shift
  done
  
! ac_configure_extra_args=
  
! if $ac_cs_silent; then
!   exec 6>/dev/null
!   ac_configure_extra_args="$ac_configure_extra_args --silent"
! fi
  
! _ACEOF
! cat >>$CONFIG_STATUS <<_ACEOF
! if \$ac_cs_recheck; then
!   echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
!   exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
! fi
! 
! _ACEOF
  
+ cat >>$CONFIG_STATUS <<_ACEOF
+ #
+ # INIT-COMMANDS section.
+ #
+ 
+ 
+ srcdir="$srcdir"
+ host="$host"
+ target="$target"
+ with_multisubdir="$with_multisubdir"
+ with_multisrctop="$with_multisrctop"
+ with_target_subdir="$with_target_subdir"
+ ac_configure_args="${multilib_arg} ${ac_configure_args}"
+ multi_basedir="$multi_basedir"
+ CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+ CC="$CC"
+ AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+ 
+ _ACEOF
+ 
+ 
+ 
+ cat >>$CONFIG_STATUS <<\_ACEOF
+ for ac_config_target in $ac_config_targets
+ do
+   case "$ac_config_target" in
+   # Handling of arguments.
+   "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+   "include/Makefile" ) CONFIG_FILES="$CONFIG_FILES include/Makefile" ;;
+   "default-1" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
+   "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+   "include/gc_config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS include/gc_config.h" ;;
+   "include/gc_ext_config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS include/gc_ext_config.h" ;;
+   *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+ echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+    { (exit 1); exit 1; }; };;
+   esac
+ done
+ 
+ # If the user did not use the arguments to specify the items to instantiate,
+ # then the envvar interface is used.  Set only those that are not.
+ # We use the long form for the default assignment because of an extremely
+ # bizarre bug on SunOS 4.1.3.
+ if $ac_need_defaults; then
+   test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+   test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+   test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+ fi
+ 
+ # Have a temporary directory for convenience.  Make it in the build tree
+ # simply because there is no reason to put it here, and in addition,
+ # creating and moving files from /tmp can sometimes cause problems.
+ # Create a temporary directory, and hook for its removal unless debugging.
+ $debug ||
+ {
+   trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
+   trap '{ (exit 1); exit 1; }' 1 2 13 15
+ }
+ 
+ # Create a (secure) tmp directory for tmp files.
+ 
+ {
+   tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
+   test -n "$tmp" && test -d "$tmp"
+ }  ||
+ {
+   tmp=./confstat$$-$RANDOM
+   (umask 077 && mkdir $tmp)
+ } ||
+ {
+    echo "$me: cannot create a temporary directory in ." >&2
+    { (exit 1); exit 1; }
+ }
+ 
+ _ACEOF
+ 
+ cat >>$CONFIG_STATUS <<_ACEOF
+ 
+ #
+ # CONFIG_FILES section.
+ #
+ 
+ # No need to generate the scripts if there are no CONFIG_FILES.
+ # This happens for instance when ./config.status config.h
+ if test -n "\$CONFIG_FILES"; then
+   # Protect against being on the right side of a sed subst in config.status.
+   sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
+    s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
+ s,@SHELL@,$SHELL,;t t
+ s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
+ s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
+ s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
+ s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
+ s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
+ s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
+ s,@exec_prefix@,$exec_prefix,;t t
+ s,@prefix@,$prefix,;t t
+ s,@program_transform_name@,$program_transform_name,;t t
+ s,@bindir@,$bindir,;t t
+ s,@sbindir@,$sbindir,;t t
+ s,@libexecdir@,$libexecdir,;t t
+ s,@datadir@,$datadir,;t t
+ s,@sysconfdir@,$sysconfdir,;t t
+ s,@sharedstatedir@,$sharedstatedir,;t t
+ s,@localstatedir@,$localstatedir,;t t
+ s,@libdir@,$libdir,;t t
+ s,@includedir@,$includedir,;t t
+ s,@oldincludedir@,$oldincludedir,;t t
+ s,@infodir@,$infodir,;t t
+ s,@mandir@,$mandir,;t t
+ s,@build_alias@,$build_alias,;t t
+ s,@host_alias@,$host_alias,;t t
+ s,@target_alias@,$target_alias,;t t
+ s,@DEFS@,$DEFS,;t t
+ s,@ECHO_C@,$ECHO_C,;t t
+ s,@ECHO_N@,$ECHO_N,;t t
+ s,@ECHO_T@,$ECHO_T,;t t
+ s,@LIBS@,$LIBS,;t t
+ s,@multi_basedir@,$multi_basedir,;t t
+ s,@build@,$build,;t t
+ s,@build_cpu@,$build_cpu,;t t
+ s,@build_vendor@,$build_vendor,;t t
+ s,@build_os@,$build_os,;t t
+ s,@host@,$host,;t t
+ s,@host_cpu@,$host_cpu,;t t
+ s,@host_vendor@,$host_vendor,;t t
+ s,@host_os@,$host_os,;t t
+ s,@target@,$target,;t t
+ s,@target_cpu@,$target_cpu,;t t
+ s,@target_vendor@,$target_vendor,;t t
+ s,@target_os@,$target_os,;t t
+ s,@target_noncanonical@,$target_noncanonical,;t t
+ s,@mkinstalldirs@,$mkinstalldirs,;t t
+ s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
+ s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
+ s,@INSTALL_DATA@,$INSTALL_DATA,;t t
+ s,@CYGPATH_W@,$CYGPATH_W,;t t
+ s,@PACKAGE@,$PACKAGE,;t t
+ s,@VERSION@,$VERSION,;t t
+ s,@ACLOCAL@,$ACLOCAL,;t t
+ s,@AUTOCONF@,$AUTOCONF,;t t
+ s,@AUTOMAKE@,$AUTOMAKE,;t t
+ s,@AUTOHEADER@,$AUTOHEADER,;t t
+ s,@MAKEINFO@,$MAKEINFO,;t t
+ s,@install_sh@,$install_sh,;t t
+ s,@STRIP@,$STRIP,;t t
+ s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t
+ s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t
+ s,@mkdir_p@,$mkdir_p,;t t
+ s,@AWK@,$AWK,;t t
+ s,@SET_MAKE@,$SET_MAKE,;t t
+ s,@am__leading_dot@,$am__leading_dot,;t t
+ s,@AMTAR@,$AMTAR,;t t
+ s,@am__tar@,$am__tar,;t t
+ s,@am__untar@,$am__untar,;t t
+ s,@CC@,$CC,;t t
+ s,@ac_ct_CC@,$ac_ct_CC,;t t
+ s,@EXEEXT@,$EXEEXT,;t t
+ s,@OBJEXT@,$OBJEXT,;t t
+ s,@DEPDIR@,$DEPDIR,;t t
+ s,@am__include@,$am__include,;t t
+ s,@am__quote@,$am__quote,;t t
+ s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t
+ s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t
+ s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t
+ s,@CCDEPMODE@,$CCDEPMODE,;t t
+ s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t
+ s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t
+ s,@CXX@,$CXX,;t t
+ s,@ac_ct_CXX@,$ac_ct_CXX,;t t
+ s,@CXXDEPMODE@,$CXXDEPMODE,;t t
+ s,@am__fastdepCXX_TRUE@,$am__fastdepCXX_TRUE,;t t
+ s,@am__fastdepCXX_FALSE@,$am__fastdepCXX_FALSE,;t t
+ s,@CFLAGS@,$CFLAGS,;t t
+ s,@CXXFLAGS@,$CXXFLAGS,;t t
+ s,@CCAS@,$CCAS,;t t
+ s,@CCASFLAGS@,$CCASFLAGS,;t t
+ s,@AS@,$AS,;t t
+ s,@ac_ct_AS@,$ac_ct_AS,;t t
+ s,@AR@,$AR,;t t
+ s,@ac_ct_AR@,$ac_ct_AR,;t t
+ s,@RANLIB@,$RANLIB,;t t
+ s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
+ s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t
+ s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t
+ s,@MAINT@,$MAINT,;t t
+ s,@GC_CFLAGS@,$GC_CFLAGS,;t t
+ s,@LN_S@,$LN_S,;t t
+ s,@LIBTOOL@,$LIBTOOL,;t t
+ s,@CXXCPP@,$CXXCPP,;t t
+ s,@CPPFLAGS@,$CPPFLAGS,;t t
+ s,@THREADLIBS@,$THREADLIBS,;t t
+ s,@POWERPC_DARWIN_TRUE@,$POWERPC_DARWIN_TRUE,;t t
+ s,@POWERPC_DARWIN_FALSE@,$POWERPC_DARWIN_FALSE,;t t
+ s,@EXTRA_TEST_LIBS@,$EXTRA_TEST_LIBS,;t t
+ s,@target_all@,$target_all,;t t
+ s,@CPLUSPLUS_TRUE@,$CPLUSPLUS_TRUE,;t t
+ s,@CPLUSPLUS_FALSE@,$CPLUSPLUS_FALSE,;t t
+ s,@AM_CPPFLAGS@,$AM_CPPFLAGS,;t t
+ s,@addobjs@,$addobjs,;t t
+ s,@addincludes@,$addincludes,;t t
+ s,@addlibs@,$addlibs,;t t
+ s,@addtests@,$addtests,;t t
+ s,@CPP@,$CPP,;t t
+ s,@EGREP@,$EGREP,;t t
+ s,@MY_CFLAGS@,$MY_CFLAGS,;t t
+ s,@toolexecdir@,$toolexecdir,;t t
+ s,@toolexeclibdir@,$toolexeclibdir,;t t
+ s,@LIBOBJS@,$LIBOBJS,;t t
+ s,@LTLIBOBJS@,$LTLIBOBJS,;t t
  CEOF
  
! _ACEOF
  
!   cat >>$CONFIG_STATUS <<\_ACEOF
!   # Split the substitutions into bite-sized pieces for seds with
!   # small command number limits, like on Digital OSF/1 and HP-UX.
!   ac_max_sed_lines=48
!   ac_sed_frag=1 # Number of current file.
!   ac_beg=1 # First line for current file.
!   ac_end=$ac_max_sed_lines # Line after last line for current file.
!   ac_more_lines=:
!   ac_sed_cmds=
!   while $ac_more_lines; do
!     if test $ac_beg -gt 1; then
!       sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
!     else
!       sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
!     fi
!     if test ! -s $tmp/subs.frag; then
!       ac_more_lines=false
!     else
!       # The purpose of the label and of the branching condition is to
!       # speed up the sed processing (if there are no `@' at all, there
!       # is no need to browse any of the substitutions).
!       # These are the two extra sed commands mentioned above.
!       (echo ':t
!   /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
!       if test -z "$ac_sed_cmds"; then
! 	ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
!       else
! 	ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
!       fi
!       ac_sed_frag=`expr $ac_sed_frag + 1`
!       ac_beg=$ac_end
!       ac_end=`expr $ac_end + $ac_max_sed_lines`
!     fi
!   done
!   if test -z "$ac_sed_cmds"; then
!     ac_sed_cmds=cat
    fi
! fi # test -n "$CONFIG_FILES"
! 
! _ACEOF
! cat >>$CONFIG_STATUS <<\_ACEOF
! for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
!   # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
!   case $ac_file in
!   - | *:- | *:-:* ) # input from stdin
! 	cat >$tmp/stdin
! 	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
! 	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
!   *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
! 	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
!   * )   ac_file_in=$ac_file.in ;;
!   esac
! 
!   # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
!   ac_dir=`(dirname "$ac_file") 2>/dev/null ||
! $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
! 	 X"$ac_file" : 'X\(//\)[^/]' \| \
! 	 X"$ac_file" : 'X\(//\)$' \| \
! 	 X"$ac_file" : 'X\(/\)' \| \
! 	 .     : '\(.\)' 2>/dev/null ||
! echo X"$ac_file" |
!     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
!   	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
!   	  /^X\(\/\/\)$/{ s//\1/; q; }
!   	  /^X\(\/\).*/{ s//\1/; q; }
!   	  s/.*/./; q'`
!   { if $as_mkdir_p; then
!     mkdir -p "$ac_dir"
    else
!     as_dir="$ac_dir"
!     as_dirs=
!     while test ! -d "$as_dir"; do
!       as_dirs="$as_dir $as_dirs"
!       as_dir=`(dirname "$as_dir") 2>/dev/null ||
! $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
! 	 X"$as_dir" : 'X\(//\)[^/]' \| \
! 	 X"$as_dir" : 'X\(//\)$' \| \
! 	 X"$as_dir" : 'X\(/\)' \| \
! 	 .     : '\(.\)' 2>/dev/null ||
! echo X"$as_dir" |
!     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
!   	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
!   	  /^X\(\/\/\)$/{ s//\1/; q; }
!   	  /^X\(\/\).*/{ s//\1/; q; }
!   	  s/.*/./; q'`
!     done
!     test ! -n "$as_dirs" || mkdir $as_dirs
!   fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
! echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
!    { (exit 1); exit 1; }; }; }
! 
!   ac_builddir=.
! 
! if test "$ac_dir" != .; then
!   ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
!   # A "../" for each directory in $ac_dir_suffix.
!   ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
! else
!   ac_dir_suffix= ac_top_builddir=
! fi
! 
! case $srcdir in
!   .)  # No --srcdir option.  We are building in place.
!     ac_srcdir=.
!     if test -z "$ac_top_builddir"; then
!        ac_top_srcdir=.
      else
!        ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
!     fi ;;
!   [\\/]* | ?:[\\/]* )  # Absolute path.
!     ac_srcdir=$srcdir$ac_dir_suffix;
!     ac_top_srcdir=$srcdir ;;
!   *) # Relative path.
!     ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
!     ac_top_srcdir=$ac_top_builddir$srcdir ;;
! esac
! 
! # Do not use `cd foo && pwd` to compute absolute paths, because
! # the directories may not exist.
! case `pwd` in
! .) ac_abs_builddir="$ac_dir";;
! *)
!   case "$ac_dir" in
!   .) ac_abs_builddir=`pwd`;;
!   [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
!   *) ac_abs_builddir=`pwd`/"$ac_dir";;
!   esac;;
! esac
! case $ac_abs_builddir in
! .) ac_abs_top_builddir=${ac_top_builddir}.;;
! *)
!   case ${ac_top_builddir}. in
!   .) ac_abs_top_builddir=$ac_abs_builddir;;
!   [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
!   *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
!   esac;;
! esac
! case $ac_abs_builddir in
! .) ac_abs_srcdir=$ac_srcdir;;
! *)
!   case $ac_srcdir in
!   .) ac_abs_srcdir=$ac_abs_builddir;;
!   [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
!   *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
!   esac;;
! esac
! case $ac_abs_builddir in
! .) ac_abs_top_srcdir=$ac_top_srcdir;;
! *)
!   case $ac_top_srcdir in
!   .) ac_abs_top_srcdir=$ac_abs_builddir;;
!   [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
!   *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
!   esac;;
! esac
! 
! 
!   case $INSTALL in
!   [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
!   *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
!   esac
! 
!   if test x"$ac_file" != x-; then
!     { echo "$as_me:$LINENO: creating $ac_file" >&5
! echo "$as_me: creating $ac_file" >&6;}
!     rm -f "$ac_file"
!   fi
!   # Let's still pretend it is `configure' which instantiates (i.e., don't
!   # use $as_me), people would be surprised to read:
!   #    /* config.h.  Generated by config.status.  */
!   if test x"$ac_file" = x-; then
!     configure_input=
!   else
!     configure_input="$ac_file.  "
!   fi
!   configure_input=$configure_input"Generated from `echo $ac_file_in |
! 				     sed 's,.*/,,'` by configure."
! 
!   # First look for the input files in the build tree, otherwise in the
!   # src tree.
!   ac_file_inputs=`IFS=:
!     for f in $ac_file_in; do
!       case $f in
!       -) echo $tmp/stdin ;;
!       [\\/$]*)
! 	 # Absolute (can't be DOS-style, as IFS=:)
! 	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
! echo "$as_me: error: cannot find input file: $f" >&2;}
!    { (exit 1); exit 1; }; }
! 	 echo "$f";;
!       *) # Relative
! 	 if test -f "$f"; then
! 	   # Build tree
! 	   echo "$f"
! 	 elif test -f "$srcdir/$f"; then
! 	   # Source tree
! 	   echo "$srcdir/$f"
! 	 else
! 	   # /dev/null tree
! 	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
! echo "$as_me: error: cannot find input file: $f" >&2;}
!    { (exit 1); exit 1; }; }
! 	 fi;;
!       esac
!     done` || { (exit 1); exit 1; }
! _ACEOF
! cat >>$CONFIG_STATUS <<_ACEOF
!   sed "$ac_vpsub
! $extrasub
! _ACEOF
! cat >>$CONFIG_STATUS <<\_ACEOF
! :t
! /@[a-zA-Z_][a-zA-Z_0-9]*@/!b
! s,@configure_input@,$configure_input,;t t
! s,@srcdir@,$ac_srcdir,;t t
! s,@abs_srcdir@,$ac_abs_srcdir,;t t
! s,@top_srcdir@,$ac_top_srcdir,;t t
! s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
! s,@builddir@,$ac_builddir,;t t
! s,@abs_builddir@,$ac_abs_builddir,;t t
! s,@top_builddir@,$ac_top_builddir,;t t
! s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
! s,@INSTALL@,$ac_INSTALL,;t t
! " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
!   rm -f $tmp/stdin
!   if test x"$ac_file" != x-; then
!     mv $tmp/out $ac_file
!   else
!     cat $tmp/out
!     rm -f $tmp/out
    fi
+ 
  done
! _ACEOF
! cat >>$CONFIG_STATUS <<\_ACEOF
  
! #
! # CONFIG_HEADER section.
! #
  
! # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
! # NAME is the cpp macro being defined and VALUE is the value it is being given.
! #
! # ac_d sets the value in "#define NAME VALUE" lines.
! ac_dA='s,^\([	 ]*\)#\([	 ]*define[	 ][	 ]*\)'
! ac_dB='[	 ].*$,\1#\2'
! ac_dC=' '
! ac_dD=',;t'
! # ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
! ac_uA='s,^\([	 ]*\)#\([	 ]*\)undef\([	 ][	 ]*\)'
! ac_uB='$,\1#\2define\3'
! ac_uC=' '
! ac_uD=',;t'
! 
! for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
    # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
!   case $ac_file in
!   - | *:- | *:-:* ) # input from stdin
! 	cat >$tmp/stdin
! 	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
! 	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
!   *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
! 	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
!   * )   ac_file_in=$ac_file.in ;;
    esac
  
!   test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
! echo "$as_me: creating $ac_file" >&6;}
  
!   # First look for the input files in the build tree, otherwise in the
!   # src tree.
!   ac_file_inputs=`IFS=:
!     for f in $ac_file_in; do
!       case $f in
!       -) echo $tmp/stdin ;;
!       [\\/$]*)
! 	 # Absolute (can't be DOS-style, as IFS=:)
! 	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
! echo "$as_me: error: cannot find input file: $f" >&2;}
!    { (exit 1); exit 1; }; }
! 	 # Do quote $f, to prevent DOS paths from being IFS'd.
! 	 echo "$f";;
!       *) # Relative
! 	 if test -f "$f"; then
! 	   # Build tree
! 	   echo "$f"
! 	 elif test -f "$srcdir/$f"; then
! 	   # Source tree
! 	   echo "$srcdir/$f"
! 	 else
! 	   # /dev/null tree
! 	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
! echo "$as_me: error: cannot find input file: $f" >&2;}
!    { (exit 1); exit 1; }; }
! 	 fi;;
!       esac
!     done` || { (exit 1); exit 1; }
!   # Remove the trailing spaces.
!   sed 's/[	 ]*$//' $ac_file_inputs >$tmp/in
! 
! _ACEOF
! 
! # Transform confdefs.h into two sed scripts, `conftest.defines' and
! # `conftest.undefs', that substitutes the proper values into
! # config.h.in to produce config.h.  The first handles `#define'
! # templates, and the second `#undef' templates.
! # And first: Protect against being on the right side of a sed subst in
! # config.status.  Protect against being in an unquoted here document
! # in config.status.
! rm -f conftest.defines conftest.undefs
! # Using a here document instead of a string reduces the quoting nightmare.
! # Putting comments in sed scripts is not portable.
! #
! # `end' is used to avoid that the second main sed command (meant for
! # 0-ary CPP macros) applies to n-ary macro definitions.
! # See the Autoconf documentation for `clear'.
! cat >confdef2sed.sed <<\_ACEOF
! s/[\\&,]/\\&/g
! s,[\\$`],\\&,g
! t clear
! : clear
! s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 (][^	 (]*\)\(([^)]*)\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
! t end
! s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 ][^	 ]*\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
! : end
! _ACEOF
! # If some macros were called several times there might be several times
! # the same #defines, which is useless.  Nevertheless, we may not want to
! # sort them, since we want the *last* AC-DEFINE to be honored.
! uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
! sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
! rm -f confdef2sed.sed
! 
! # This sed command replaces #undef with comments.  This is necessary, for
! # example, in the case of _POSIX_SOURCE, which is predefined and required
! # on some systems where configure will not decide to define it.
! cat >>conftest.undefs <<\_ACEOF
! s,^[	 ]*#[	 ]*undef[	 ][	 ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
! _ACEOF
! 
! # Break up conftest.defines because some shells have a limit on the size
! # of here documents, and old seds have small limits too (100 cmds).
! echo '  # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
! echo '  if grep "^[	 ]*#[	 ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
! echo '  # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
! echo '  :' >>$CONFIG_STATUS
! rm -f conftest.tail
! while grep . conftest.defines >/dev/null
! do
!   # Write a limited-size here document to $tmp/defines.sed.
!   echo '  cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
!   # Speed up: don't consider the non `#define' lines.
!   echo '/^[	 ]*#[	 ]*define/!b' >>$CONFIG_STATUS
!   # Work around the forget-to-reset-the-flag bug.
!   echo 't clr' >>$CONFIG_STATUS
!   echo ': clr' >>$CONFIG_STATUS
!   sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
!   echo 'CEOF
!   sed -f $tmp/defines.sed $tmp/in >$tmp/out
!   rm -f $tmp/in
!   mv $tmp/out $tmp/in
! ' >>$CONFIG_STATUS
!   sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
!   rm -f conftest.defines
!   mv conftest.tail conftest.defines
! done
! rm -f conftest.defines
! echo '  fi # grep' >>$CONFIG_STATUS
! echo >>$CONFIG_STATUS
! 
! # Break up conftest.undefs because some shells have a limit on the size
! # of here documents, and old seds have small limits too (100 cmds).
! echo '  # Handle all the #undef templates' >>$CONFIG_STATUS
! rm -f conftest.tail
! while grep . conftest.undefs >/dev/null
! do
!   # Write a limited-size here document to $tmp/undefs.sed.
!   echo '  cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
!   # Speed up: don't consider the non `#undef'
!   echo '/^[	 ]*#[	 ]*undef/!b' >>$CONFIG_STATUS
!   # Work around the forget-to-reset-the-flag bug.
!   echo 't clr' >>$CONFIG_STATUS
!   echo ': clr' >>$CONFIG_STATUS
!   sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
!   echo 'CEOF
!   sed -f $tmp/undefs.sed $tmp/in >$tmp/out
!   rm -f $tmp/in
!   mv $tmp/out $tmp/in
! ' >>$CONFIG_STATUS
!   sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
!   rm -f conftest.undefs
!   mv conftest.tail conftest.undefs
! done
! rm -f conftest.undefs
! 
! cat >>$CONFIG_STATUS <<\_ACEOF
!   # Let's still pretend it is `configure' which instantiates (i.e., don't
!   # use $as_me), people would be surprised to read:
!   #    /* config.h.  Generated by config.status.  */
!   if test x"$ac_file" = x-; then
!     echo "/* Generated by configure.  */" >$tmp/config.h
    else
!     echo "/* $ac_file.  Generated by configure.  */" >$tmp/config.h
    fi
+   cat $tmp/in >>$tmp/config.h
+   rm -f $tmp/in
+   if test x"$ac_file" != x-; then
+     if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
+       { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+ echo "$as_me: $ac_file is unchanged" >&6;}
+     else
+       ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ 	 X"$ac_file" : 'X\(//\)[^/]' \| \
+ 	 X"$ac_file" : 'X\(//\)$' \| \
+ 	 X"$ac_file" : 'X\(/\)' \| \
+ 	 .     : '\(.\)' 2>/dev/null ||
+ echo X"$ac_file" |
+     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+   	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+   	  /^X\(\/\/\)$/{ s//\1/; q; }
+   	  /^X\(\/\).*/{ s//\1/; q; }
+   	  s/.*/./; q'`
+       { if $as_mkdir_p; then
+     mkdir -p "$ac_dir"
+   else
+     as_dir="$ac_dir"
+     as_dirs=
+     while test ! -d "$as_dir"; do
+       as_dirs="$as_dir $as_dirs"
+       as_dir=`(dirname "$as_dir") 2>/dev/null ||
+ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ 	 X"$as_dir" : 'X\(//\)[^/]' \| \
+ 	 X"$as_dir" : 'X\(//\)$' \| \
+ 	 X"$as_dir" : 'X\(/\)' \| \
+ 	 .     : '\(.\)' 2>/dev/null ||
+ echo X"$as_dir" |
+     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+   	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+   	  /^X\(\/\/\)$/{ s//\1/; q; }
+   	  /^X\(\/\).*/{ s//\1/; q; }
+   	  s/.*/./; q'`
+     done
+     test ! -n "$as_dirs" || mkdir $as_dirs
+   fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+ echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+    { (exit 1); exit 1; }; }; }
  
!       rm -f $ac_file
!       mv $tmp/config.h $ac_file
!     fi
!   else
!     cat $tmp/config.h
!     rm -f $tmp/config.h
!   fi
! # Compute $ac_file's index in $config_headers.
! _am_stamp_count=1
! for _am_header in $config_headers :; do
!   case $_am_header in
!     $ac_file | $ac_file:* )
!       break ;;
!     * )
!       _am_stamp_count=`expr $_am_stamp_count + 1` ;;
    esac
+ done
+ echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null ||
+ $as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ 	 X$ac_file : 'X\(//\)[^/]' \| \
+ 	 X$ac_file : 'X\(//\)$' \| \
+ 	 X$ac_file : 'X\(/\)' \| \
+ 	 .     : '\(.\)' 2>/dev/null ||
+ echo X$ac_file |
+     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+   	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+   	  /^X\(\/\/\)$/{ s//\1/; q; }
+   	  /^X\(\/\).*/{ s//\1/; q; }
+   	  s/.*/./; q'`/stamp-h$_am_stamp_count
+ done
+ _ACEOF
+ cat >>$CONFIG_STATUS <<\_ACEOF
  
! #
! # CONFIG_COMMANDS section.
! #
! for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
!   ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
!   ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
!   ac_dir=`(dirname "$ac_dest") 2>/dev/null ||
! $as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
! 	 X"$ac_dest" : 'X\(//\)[^/]' \| \
! 	 X"$ac_dest" : 'X\(//\)$' \| \
! 	 X"$ac_dest" : 'X\(/\)' \| \
! 	 .     : '\(.\)' 2>/dev/null ||
! echo X"$ac_dest" |
!     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
!   	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
!   	  /^X\(\/\/\)$/{ s//\1/; q; }
!   	  /^X\(\/\).*/{ s//\1/; q; }
!   	  s/.*/./; q'`
!   { if $as_mkdir_p; then
!     mkdir -p "$ac_dir"
!   else
!     as_dir="$ac_dir"
!     as_dirs=
!     while test ! -d "$as_dir"; do
!       as_dirs="$as_dir $as_dirs"
!       as_dir=`(dirname "$as_dir") 2>/dev/null ||
! $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
! 	 X"$as_dir" : 'X\(//\)[^/]' \| \
! 	 X"$as_dir" : 'X\(//\)$' \| \
! 	 X"$as_dir" : 'X\(/\)' \| \
! 	 .     : '\(.\)' 2>/dev/null ||
! echo X"$as_dir" |
!     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
!   	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
!   	  /^X\(\/\/\)$/{ s//\1/; q; }
!   	  /^X\(\/\).*/{ s//\1/; q; }
!   	  s/.*/./; q'`
!     done
!     test ! -n "$as_dirs" || mkdir $as_dirs
!   fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
! echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
!    { (exit 1); exit 1; }; }; }
  
!   ac_builddir=.
  
! if test "$ac_dir" != .; then
!   ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
!   # A "../" for each directory in $ac_dir_suffix.
!   ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
! else
!   ac_dir_suffix= ac_top_builddir=
! fi
  
! case $srcdir in
!   .)  # No --srcdir option.  We are building in place.
!     ac_srcdir=.
!     if test -z "$ac_top_builddir"; then
!        ac_top_srcdir=.
!     else
!        ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
!     fi ;;
!   [\\/]* | ?:[\\/]* )  # Absolute path.
!     ac_srcdir=$srcdir$ac_dir_suffix;
!     ac_top_srcdir=$srcdir ;;
!   *) # Relative path.
!     ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
!     ac_top_srcdir=$ac_top_builddir$srcdir ;;
! esac
  
! # Do not use `cd foo && pwd` to compute absolute paths, because
! # the directories may not exist.
! case `pwd` in
! .) ac_abs_builddir="$ac_dir";;
! *)
!   case "$ac_dir" in
!   .) ac_abs_builddir=`pwd`;;
!   [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
!   *) ac_abs_builddir=`pwd`/"$ac_dir";;
!   esac;;
! esac
! case $ac_abs_builddir in
! .) ac_abs_top_builddir=${ac_top_builddir}.;;
! *)
!   case ${ac_top_builddir}. in
!   .) ac_abs_top_builddir=$ac_abs_builddir;;
!   [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
!   *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
!   esac;;
! esac
! case $ac_abs_builddir in
! .) ac_abs_srcdir=$ac_srcdir;;
! *)
!   case $ac_srcdir in
!   .) ac_abs_srcdir=$ac_abs_builddir;;
!   [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
!   *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
!   esac;;
! esac
! case $ac_abs_builddir in
! .) ac_abs_top_srcdir=$ac_top_srcdir;;
! *)
!   case $ac_top_srcdir in
!   .) ac_abs_top_srcdir=$ac_abs_builddir;;
!   [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
!   *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
!   esac;;
! esac
  
  
!   { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
! echo "$as_me: executing $ac_dest commands" >&6;}
!   case $ac_dest in
!     default-1 )
! # Only add multilib support code if we just rebuilt the top-level
! # Makefile.
! case " $CONFIG_FILES " in
!  *" Makefile "*)
!    ac_file=Makefile . ${multi_basedir}/config-ml.in
!    ;;
! esac ;;
!     depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do
!   # Strip MF so we end up with the name of the file.
!   mf=`echo "$mf" | sed -e 's/:.*$//'`
!   # Check whether this is an Automake generated Makefile or not.
!   # We used to match only the files named `Makefile.in', but
!   # some people rename them; so instead we look at the file content.
!   # Grep'ing the first line is not enough: some people post-process
!   # each Makefile.in and add a new line on top of each file to say so.
!   # So let's grep whole file.
!   if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
!     dirpart=`(dirname "$mf") 2>/dev/null ||
! $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
! 	 X"$mf" : 'X\(//\)[^/]' \| \
! 	 X"$mf" : 'X\(//\)$' \| \
! 	 X"$mf" : 'X\(/\)' \| \
! 	 .     : '\(.\)' 2>/dev/null ||
! echo X"$mf" |
!     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
!   	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
!   	  /^X\(\/\/\)$/{ s//\1/; q; }
!   	  /^X\(\/\).*/{ s//\1/; q; }
!   	  s/.*/./; q'`
!   else
!     continue
!   fi
!   # Extract the definition of DEPDIR, am__include, and am__quote
!   # from the Makefile without running `make'.
!   DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
!   test -z "$DEPDIR" && continue
!   am__include=`sed -n 's/^am__include = //p' < "$mf"`
!   test -z "am__include" && continue
!   am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
!   # When using ansi2knr, U may be empty or an underscore; expand it
!   U=`sed -n 's/^U = //p' < "$mf"`
!   # Find all dependency output files, they are included files with
!   # $(DEPDIR) in their names.  We invoke sed twice because it is the
!   # simplest approach to changing $(DEPDIR) to its actual value in the
!   # expansion.
!   for file in `sed -n "
!     s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
!        sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
!     # Make sure the directory exists.
!     test -f "$dirpart/$file" && continue
!     fdir=`(dirname "$file") 2>/dev/null ||
! $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
! 	 X"$file" : 'X\(//\)[^/]' \| \
! 	 X"$file" : 'X\(//\)$' \| \
! 	 X"$file" : 'X\(/\)' \| \
! 	 .     : '\(.\)' 2>/dev/null ||
! echo X"$file" |
!     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
!   	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
!   	  /^X\(\/\/\)$/{ s//\1/; q; }
!   	  /^X\(\/\).*/{ s//\1/; q; }
!   	  s/.*/./; q'`
!     { if $as_mkdir_p; then
!     mkdir -p $dirpart/$fdir
!   else
!     as_dir=$dirpart/$fdir
!     as_dirs=
!     while test ! -d "$as_dir"; do
!       as_dirs="$as_dir $as_dirs"
!       as_dir=`(dirname "$as_dir") 2>/dev/null ||
! $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
! 	 X"$as_dir" : 'X\(//\)[^/]' \| \
! 	 X"$as_dir" : 'X\(//\)$' \| \
! 	 X"$as_dir" : 'X\(/\)' \| \
! 	 .     : '\(.\)' 2>/dev/null ||
! echo X"$as_dir" |
!     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
!   	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
!   	  /^X\(\/\/\)$/{ s//\1/; q; }
!   	  /^X\(\/\).*/{ s//\1/; q; }
!   	  s/.*/./; q'`
!     done
!     test ! -n "$as_dirs" || mkdir $as_dirs
!   fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5
! echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;}
!    { (exit 1); exit 1; }; }; }
! 
!     # echo "creating $dirpart/$file"
!     echo '# dummy' > "$dirpart/$file"
!   done
! done
!  ;;
!   esac
! done
! _ACEOF
! 
! cat >>$CONFIG_STATUS <<\_ACEOF
! 
! { (exit 0); exit 0; }
! _ACEOF
  chmod +x $CONFIG_STATUS
! ac_clean_files=$ac_clean_files_save
! 
! 
! # configure is writing to config.log, and then calls config.status.
! # config.status does its own redirection, appending to config.log.
! # Unfortunately, on DOS this fails, as config.log is still kept open
! # by configure, so config.status won't be able to write to it; its
! # output is simply discarded.  So we exec the FD to /dev/null,
! # effectively closing config.log, so it can be properly (re)opened and
! # appended to by config.status.  When coming back to configure, we
! # need to make the FD available again.
! if test "$no_create" != yes; then
!   ac_cs_success=:
!   ac_config_status_args=
!   test "$silent" = yes &&
!     ac_config_status_args="$ac_config_status_args --quiet"
!   exec 5>/dev/null
!   $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
!   exec 5>>config.log
!   # Use ||, not &&, to avoid exiting from the if with $? = 1, which
!   # would make configure fail if this is the last instruction.
!   $ac_cs_success || { (exit 1); exit 1; }
! fi
  
diff -Nrcpad gcc-3.4.3/boehm-gc/configure.ac gcc-4.0.0/boehm-gc/configure.ac
*** gcc-3.4.3/boehm-gc/configure.ac	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/boehm-gc/configure.ac	Wed Feb 16 04:10:41 2005
***************
*** 0 ****
--- 1,478 ----
+ # Copyright (c) 1999, 2000, 2001, 2002, 2003 by Red Hat, Inc. All rights reserved.
+ # Copyright 2004 Nathanael Nerode
+ # 
+ # THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
+ # OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ # 
+ # Permission is hereby granted to use or copy this program
+ # for any purpose,  provided the above notices are retained on all copies.
+ # Permission to modify the code and to distribute modified code is granted,
+ # provided the above notices are retained, and a notice that the code was
+ # modified is included with the above copyright notice.
+ #
+ # Original author: Tom Tromey
+ # Modified by Nathanael Nerode
+ 
+ dnl Process this file with autoconf to produce configure.
+ 
+ AC_PREREQ(2.59)
+ AC_INIT
+ AC_CONFIG_SRCDIR(gcj_mlc.c)
+ # This works around the fact that libtool configuration may change LD
+ # for this particular configuration, but some shells, instead of
+ # keeping the changes in LD private, export them just because LD is
+ # exported.
+ ORIGINAL_LD_FOR_MULTILIBS=$LD
+ 
+ AM_ENABLE_MULTILIB(, ..)
+ 
+ AC_CANONICAL_HOST
+ AC_CANONICAL_TARGET
+ 
+ # Get the 'noncanonical' system names.
+ ACX_NONCANONICAL_TARGET
+ 
+ # This works around an automake problem.
+ mkinstalldirs="`cd $ac_aux_dir && ${PWDCMD-pwd}`/mkinstalldirs"
+ AC_SUBST(mkinstalldirs)
+ 
+ AM_INIT_AUTOMAKE(gc, 6.3, no-define)
+ 
+ # The autoconf 2.5x version of the no-executables hack.
+ GCC_NO_EXECUTABLES
+ 
+ # Yak.  We must force CC and CXX to /not/ be precious variables; otherwise
+ # the wrong, non-multilib-adjusted value will be used in multilibs.
+ # As a side effect, we have to subst CFLAGS and CXXFLAGS ourselves.
+ 
+ m4_rename([_AC_ARG_VAR_PRECIOUS],[real_PRECIOUS])
+ m4_define([_AC_ARG_VAR_PRECIOUS],[])
+ AC_PROG_CC
+ AC_PROG_CXX
+ m4_rename([real_PRECIOUS],[_AC_ARG_VAR_PRECIOUS])
+ 
+ AM_PROG_CC_C_O
+ 
+ AC_SUBST(CFLAGS)
+ AC_SUBST(CXXFLAGS)
+ 
+ # Newer automakes demand CCAS and CCASFLAGS.
+ : ${CCAS='$(CC)'}
+ : ${CCASFLAGS='$(CFLAGS)'}
+ AC_SUBST(CCAS)
+ AC_SUBST(CCASFLAGS)
+ 
+ AC_CHECK_TOOL(AS, as)
+ AC_CHECK_TOOL(AR, ar)
+ AC_CHECK_TOOL(RANLIB, ranlib, :)
+ 
+ AC_PROG_INSTALL
+ 
+ AM_MAINTAINER_MODE
+ 
+ . ${srcdir}/configure.host
+ 
+ case ${gc_basedir} in
+ /* | [A-Za-z]:[/\\]*) gc_flagbasedir=${gc_basedir} ;;
+ *) gc_flagbasedir='$(top_builddir)/'${gc_basedir} ;;
+ esac
+ 
+ gc_cflags="${gc_cflags} -Iinclude -I"'$(top_builddir)'"/./targ-include -I${gc_flagbasedir}/libc/include"
+ case "${host}" in
+   *-*-cygwin32*)
+     gc_cflags="${gc_cflags} -I${gc_flagbasedir}/../winsup/include"
+     ;;
+ esac
+ 
+ dnl gc_cflags="${gc_cflags} -fno-builtin"
+ 
+ GC_CFLAGS=${gc_cflags}
+ AC_SUBST(GC_CFLAGS)
+ 
+ AC_PROG_LIBTOOL
+ 
+ dnl We use these options to decide which functions to include.
+ AC_ARG_WITH(target-subdir,
+ [  --with-target-subdir=SUBDIR
+                           configuring with a cross compiler])
+ AC_ARG_WITH(cross-host,
+ [  --with-cross-host=HOST  configuring with a cross compiler])
+ 
+ AC_MSG_CHECKING([for thread model used by GCC])
+ THREADS=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'`
+ if test -z "$THREADS"; then
+    THREADS=no
+ fi
+ AC_MSG_RESULT([$THREADS])
+ 
+ AC_ARG_ENABLE(parallel-mark,
+ [  --enable-parallel-mark	parallelize marking and free list construction],
+    [case "$THREADS" in
+       no | none | single)
+ 	AC_MSG_ERROR([Parallel mark requires --enable-threads=x spec])
+ 	;;
+     esac]
+ )
+ 
+ AM_CPPFLAGS="-I`cd $srcdir && ${PWDCMD-pwd}`/include"
+ THREADLIBS=
+ case "$THREADS" in
+  no | none | single)
+     THREADS=none
+     ;;
+  posix | posix95 | pthreads)
+     THREADS=posix
+     THREADLIBS=-lpthread
+     case "$host" in
+      x86-*-linux* | ia64-*-linux* | i586-*-linux* | i686-*-linux* | x86_64-*-linux* | alpha-*-linux*)
+ 	AC_DEFINE(GC_LINUX_THREADS,1,[support for Xavier Leroy's Linux threads])
+ 	AC_DEFINE(_REENTRANT,1,[Use reentrant code])
+         if test "${enable_parallel_mark}" = yes; then
+ 	  AC_DEFINE(PARALLEL_MARK,1,[allow the marker to run in multiple threads])
+ 	fi
+ 	AC_DEFINE(THREAD_LOCAL_ALLOC,1,[define GC_local_malloc() & GC_local_malloc_atomic()])
+ 	;;
+      *-*-linux*)
+ 	AC_DEFINE(GC_LINUX_THREADS,1)
+ 	AC_DEFINE(_REENTRANT,1)
+ 	;;
+      *-*-aix*)
+ 	AC_DEFINE(GC_AIX_THREADS,1,[support AIX threads])
+ 	AC_DEFINE(_REENTRANT,1)
+ 	;;
+      *-*-hpux*)
+ 	AC_MSG_WARN("Only HP/UX 11 threads are supported.")
+ 	AC_DEFINE(GC_HPUX_THREADS,1,[enables support for HP/UX 11 pthreads])
+ 	AC_DEFINE(_POSIX_C_SOURCE,199506L,[POSIX version of C Source])
+ 	if test "${enable_parallel_mark}" = yes; then
+ 	  AC_DEFINE(PARALLEL_MARK,1)
+ 	fi
+ 	AC_DEFINE(THREAD_LOCAL_ALLOC,1)
+ 	THREADLIBS="-lpthread -lrt"
+ 	;;
+      *-*-freebsd*)
+ 	AC_MSG_WARN("FreeBSD does not yet fully support threads with Boehm GC.")
+ 	AC_DEFINE(GC_FREEBSD_THREADS,1,[support FreeBSD threads])
+ 	AM_CPPFLAGS="$AM_CPPFLAGS -pthread"
+ 	THREADLIBS=-pthread
+       	;;
+      *-*-solaris*)
+ 	AC_DEFINE(GC_SOLARIS_THREADS,1,[support for Solaris (thr_) threads])
+ 	AC_DEFINE(GC_SOLARIS_PTHREADS,1,[support for Solaris pthreads])
+ 	;;
+      *-*-irix*)
+ 	AC_DEFINE(GC_IRIX_THREADS,1,[support for Irix pthreads])
+ 	;;
+      *-*-cygwin*)
+ 	AC_DEFINE(GC_WIN32_THREADS,1,[support for win32 threads])
+ 	;;
+      *-*-darwin*)
+ 	AC_DEFINE(GC_DARWIN_THREADS,1,[support for Mac OS X pthreads])
+ 	AC_DEFINE(THREAD_LOCAL_ALLOC,1)
+ 	if test "${enable_parallel_mark}" = yes; then
+ 	  AC_DEFINE(PARALLEL_MARK,1)
+ 	fi
+ 	;;
+      *-*-osf*)
+ 	AC_DEFINE(GC_OSF1_THREADS,1,[support for Tru64 pthreads])
+         if test "${enable_parallel_mark}" = yes; then
+ 	  AC_DEFINE(PARALLEL_MARK,1)
+ 	  AC_DEFINE(THREAD_LOCAL_ALLOC,1)
+ 	  # May want to enable it in other cases, too.
+ 	  # Measurements havent yet been done.
+ 	fi
+ 	AM_CPPFLAGS="$AM_CPPFLAGS -pthread"
+ 	THREADLIBS="-lpthread -lrt"
+ 	;;
+     esac
+     ;;
+  win32)
+     AC_DEFINE(GC_WIN32_THREADS,1)
+     dnl Old wine getenv may not return NULL for missing entry.
+     dnl Define EMPTY_GETENV_RESULTS here to work around the bug.
+     ;;
+  dgux386)
+     THREADS=dgux386
+ AC_MSG_RESULT($THREADLIBS)
+     # Use pthread GCC  switch
+     THREADLIBS=-pthread
+     if test "${enable_parallel_mark}" = yes; then
+         AC_DEFINE(PARALLEL_MARK,1)
+     fi
+     AC_DEFINE(THREAD_LOCAL_ALLOC,1)
+     AC_DEFINE(GC_DGUX386_THREADS,1,[support for DB/UX on I386 threads])
+     AC_DEFINE(DGUX_THREADS,1,[No description])
+     # Enable _POSIX4A_DRAFT10_SOURCE with flag -pthread
+     AM_CPPFLAGS="-pthread $AM_CPPFLAGS"
+     ;;
+  aix)
+     THREADS=posix
+     THREADLIBS=-lpthread
+     AC_DEFINE(GC_AIX_THREADS,1)
+     AC_DEFINE(_REENTRANT,1)
+     ;;
+  decosf1 | irix | mach | os2 | solaris | dce | vxworks)
+     AC_MSG_ERROR(thread package $THREADS not yet supported)
+     ;;
+  *)
+     AC_MSG_ERROR($THREADS is an unknown thread package)
+     ;;
+ esac
+ AC_SUBST(THREADLIBS)
+ 
+ case "$host" in
+    powerpc-*-darwin*)
+       powerpc_darwin=true
+       ;;
+ esac
+ AM_CONDITIONAL(POWERPC_DARWIN,test x$powerpc_darwin = xtrue)
+ 
+ # We never want libdl on darwin. It is a fake libdl that just ends up making
+ # dyld calls anyway
+ case "$host" in
+   *-*-darwin*) ;;
+   *)
+     AC_CHECK_LIB(dl, dlopen, EXTRA_TEST_LIBS="$EXTRA_TEST_LIBS -ldl")
+     ;;
+ esac
+ 
+ AC_SUBST(EXTRA_TEST_LIBS)
+ 
+ target_all=libgcjgc.la
+ AC_SUBST(target_all)
+ 
+ dnl If the target is an eCos system, use the appropriate eCos
+ dnl I/O routines.
+ dnl FIXME: this should not be a local option but a global target
+ dnl system; at present there is no eCos target.
+ TARGET_ECOS="no"
+ AC_ARG_WITH(ecos,
+ [  --with-ecos             enable runtime eCos target support],
+ TARGET_ECOS="$with_ecos"
+ )
+ 
+ addobjs=
+ addlibs=
+ addincludes=
+ addtests=
+ case "$TARGET_ECOS" in
+    no)
+       ;;
+    *)
+       AC_DEFINE(ECOS,1,[Target is ECOS])
+       AM_CPPFLAGS="${AM_CPPFLAGS} -I${TARGET_ECOS}/include"
+       addobjs="$addobjs ecos.lo"
+       ;;
+ esac
+ 
+ if test "${enable_cplusplus}" = yes; then
+       addincludes="$addincludes include/gc_cpp.h include/gc_allocator.h"
+       addtests="$addtests test_cpp"
+ fi
+ 
+ AM_CONDITIONAL(CPLUSPLUS, test "${enable_cplusplus}" = yes)
+ 
+ AC_SUBST(CXX)
+ 
+ AC_SUBST(AM_CPPFLAGS)
+ 
+ # Configuration of shared libraries
+ #
+ AC_MSG_CHECKING(whether to build shared libraries)
+ AC_ENABLE_SHARED
+ 
+ case "$host" in
+  alpha-*-openbsd*)
+      enable_shared=no
+      AC_MSG_RESULT(no)
+      ;;
+  *)
+      AC_MSG_RESULT(yes)
+      ;;
+ esac
+ 
+ # Configuration of machine-dependent code
+ #
+ # We don't set NO_EXECUTE_PERMISSION by default because gcj (and
+ # anything else that creates trampolines in gc-allocated memory)
+ # always needs exec permission.  The exceptions to this are IA-64 and
+ # some variations of Power PC, where trampolines don't contain
+ # executable code.
+ #
+ AC_MSG_CHECKING(which machine-dependent code should be used)
+ machdep=
+ case "$host" in
+  alpha*-*-openbsd*)
+     machdep="alpha_mach_dep.lo"
+     if test x"${ac_cv_lib_dl_dlopen}" != xyes ; then
+        AC_MSG_WARN(OpenBSD/Alpha without dlopen(). Shared library support is disabled)
+     fi
+     ;;
+  alpha*-*-linux*)
+     machdep="alpha_mach_dep.lo"
+     ;;
+  i?86-*-solaris2.[[89]] | i?86-*-solaris2.1?)
+     AC_DEFINE(SOLARIS25_PROC_VDB_BUG_FIXED,1,[PROC_VDB in Solaris 2.5 gives wrong values for dirty bits])
+     ;;
+  mipstx39-*-elf*)
+     machdep="mips_ultrix_mach_dep.lo"
+     AC_DEFINE(STACKBASE, __stackbase,[No description])
+     AC_DEFINE(DATASTART_IS_ETEXT,1,[No description])
+     ;;
+  mips-dec-ultrix*)
+     machdep="mips_ultrix_mach-dep.lo"
+     ;;
+  mips-nec-sysv*|mips-unknown-sysv*)
+     ;;
+  mips*-*-linux*)
+     ;;
+  mips-*-*)
+     machdep="mips_sgi_mach_dep.lo"
+     ;;
+  sparc-*-netbsd*)
+     machdep="sparc_netbsd_mach_dep.lo"
+     ;;
+  sparc-sun-solaris2.3)
+     machdep="sparc_mach_dep.lo"
+     AC_DEFINE(SUNOS53_SHARED_LIB,1,[Avoid Solaris 5.3 dynamic library bug])
+     ;;
+  sparc*-sun-solaris2.*)
+     machdep="sparc_mach_dep.lo"
+     ;;
+  ia64-*-*)
+     AC_DEFINE(NO_EXECUTE_PERMISSION,1,[cause some or all of the heap to not have execute permission])
+     machdep="mach_dep.lo ia64_save_regs_in_stack.lo"
+     ;;
+ esac
+ if test x"$machdep" = x; then
+ AC_MSG_RESULT($machdep)
+    machdep="mach_dep.lo"
+ fi
+ addobjs="$addobjs $machdep"
+ AC_SUBST(addobjs)
+ AC_SUBST(addincludes)
+ AC_SUBST(addlibs)
+ AC_SUBST(addtests)
+ 
+ #
+ # Check for AViiON Machines running DGUX
+ #
+ AC_MSG_CHECKING(if host is AViiON running DGUX)
+ ac_is_dgux=no
+ AC_CHECK_HEADER(sys/dg_sys_info.h,
+ [ac_is_dgux=yes;])
+ 
+ AC_MSG_RESULT($ac_is_dgux)
+     ## :GOTCHA: we do not check anything but sys/dg_sys_info.h
+ if test $ac_is_dgux = yes; then
+     if test "$enable_full_debug" = "yes"; then
+       CFLAGS="-g -mstandard -DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
+       CXXFLAGS="-g -mstandard -DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
+     else
+       CFLAGS="-DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
+       CXXFLAGS="-DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
+     fi
+     AC_SUBST(CFLAGS)
+     AC_SUBST(CXXFLAGS)
+ fi
+ 
+ dnl As of 4.13a2, the collector will not properly work on Solaris when
+ dnl built with gcc and -O.  So we remove -O in the appropriate case.
+ dnl Not needed anymore on Solaris.
+ AC_MSG_CHECKING(whether Solaris gcc optimization fix is necessary)
+ case "$host" in
+  *aix*)
+     if test "$GCC" = yes; then
+        AC_MSG_RESULT(yes)
+        new_CFLAGS=
+        for i in $CFLAGS; do
+ 	  case "$i" in
+ 	   -O*)
+ 	      ;;
+ 	   *)
+ 	      new_CFLAGS="$new_CFLAGS $i"
+ 	      ;;
+ 	  esac
+        done
+        CFLAGS="$new_CFLAGS"
+     else
+        AC_MSG_RESULT(no)
+     fi
+     ;;
+  *) AC_MSG_RESULT(no) ;;
+ esac
+ 
+ dnl We need to override the top-level CFLAGS.  This is how we do it.
+ MY_CFLAGS="$CFLAGS"
+ AC_SUBST(MY_CFLAGS)
+ 
+ dnl Include defines that have become de facto standard.
+ dnl ALL_INTERIOR_POINTERS can be overridden in startup code.
+ AC_DEFINE(SILENT,1,[disables statistics printing])
+ AC_DEFINE(NO_SIGNALS,1,[does not disable signals])
+ AC_DEFINE(ALL_INTERIOR_POINTERS,1,[allows all pointers to the interior of objects to be recognized])
+ 
+ dnl By default, make the library as general as possible.
+ AC_DEFINE(JAVA_FINALIZATION,1,[make it somewhat safer to finalize objects out of order])
+ AC_DEFINE(GC_GCJ_SUPPORT,1,[include support for gcj])
+ AC_DEFINE(ATOMIC_UNCOLLECTABLE,1,[include code for GC_malloc_atomic_uncollectable])
+ 
+ dnl This is something of a hack.  When cross-compiling we turn off
+ dnl some functionality. These is only correct when targetting an
+ dnl embedded system.  FIXME.
+ if test -n "${with_cross_host}"; then
+    AC_DEFINE(NO_SIGSET,1,[use empty GC_disable_signals and GC_enable_signals])
+    AC_DEFINE(NO_DEBUGGING,1,[removes GC_dump])
+ fi
+ 
+ AC_ARG_ENABLE(gc-debug,
+ [  --enable-gc-debug	include full support for pointer backtracing etc.],
+ [ if test "$enable_gc_debug" = "yes"; then
+     AC_MSG_WARN("Must define GC_DEBUG and use debug alloc. in clients.")
+     AC_DEFINE(KEEP_BACK_PTRS,1,[Add code to save back pointers])
+     AC_DEFINE(DBG_HDRS_ALL,1,[Make sure that all objects have debug headers])
+     case $host in
+       ia64-*-linux* )
+ 	AC_DEFINE(MAKE_BACK_GRAPH,1,[Enable GC_PRINT_BACK_HEIGHT environment variable])
+       ;;
+       x86-*-linux* | i586-*-linux* | i686-*-linux* | x86_64-*-linux* )
+ 	AC_DEFINE(MAKE_BACK_GRAPH,1)
+ 	AC_MSG_WARN("Client must not use -fomit-frame-pointer.")
+ 	AC_DEFINE(SAVE_CALL_COUNT, 8, [number of call frames saved with objects allocated through the debugging interface])
+       ;;
+       i[3456]86-*-dgux*)
+ 	AC_DEFINE(MAKE_BACK_GRAPH,1)
+       ;;
+     esac 
+   fi])
+ 
+ if test "${gc_use_mmap}" = "yes"; then
+   AC_DEFINE(USE_MMAP, 1, [use MMAP instead of sbrk to get new memory])
+ fi
+ 
+ if test -n "$with_cross_host" &&
+    test x"$with_cross_host" != x"no"; then
+   toolexecdir='$(exec_prefix)/$(target_noncanonical)'
+   toolexeclibdir='$(toolexecdir)/lib'
+ else
+   toolexecdir='$(libdir)/gcc-lib/$(target_noncanonical)'
+   toolexeclibdir='$(libdir)'
+ fi
+ multi_os_directory=`$CC -print-multi-os-directory`
+ case $multi_os_directory in
+   .) ;; # Avoid trailing /.
+   *) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;;
+ esac
+ AC_SUBST(toolexecdir)
+ AC_SUBST(toolexeclibdir)
+ 
+ if test "${multilib}" = "yes"; then
+   multilib_arg="--enable-multilib"
+ else
+   multilib_arg=
+ fi
+ 
+ AC_CONFIG_HEADERS([include/gc_config.h include/gc_ext_config.h])
+ 
+ AC_CONFIG_FILES(Makefile include/Makefile)
+ AC_OUTPUT
diff -Nrcpad gcc-3.4.3/boehm-gc/configure.host gcc-4.0.0/boehm-gc/configure.host
*** gcc-3.4.3/boehm-gc/configure.host	Mon Jul 28 04:18:20 2003
--- gcc-4.0.0/boehm-gc/configure.host	Wed Feb 16 04:10:41 2005
***************
*** 18,25 ****
--- 18,28 ----
  
  # It sets the following shell variables:
  #   gc_cflags	Special CFLAGS to use when building
+ #   gc_use_mmap  Set to "yes" on platforms where mmap should be used instead
+ #		 of sbrk. This will define USE_MMAP.
  
  gc_cflags=""
+ gc_use_mmap=
  
  # We should set -fexceptions if we are using gcc and might be used
  # inside something like gcj.  This is the zeroth approximation:
*************** else
*** 37,42 ****
--- 40,51 ----
      esac
  fi
  
+ case "${host}" in
+   *-linux*)
+     gc_use_mmap=yes
+     ;;
+ esac
+ 
  case "${target_optspace}:${host}" in
    yes:*)
      gc_cflags="${gc_cflags} -Os"
diff -Nrcpad gcc-3.4.3/boehm-gc/configure.in gcc-4.0.0/boehm-gc/configure.in
*** gcc-3.4.3/boehm-gc/configure.in	Tue Jan 20 15:15:48 2004
--- gcc-4.0.0/boehm-gc/configure.in	Thu Jan  1 00:00:00 1970
***************
*** 1,463 ****
- # Copyright (c) 1999, 2000, 2001, 2002, 2003 by Red Hat, Inc. All rights reserved.
- # 
- # THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
- # OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- # 
- # Permission is hereby granted to use or copy this program
- # for any purpose,  provided the above notices are retained on all copies.
- # Permission to modify the code and to distribute modified code is granted,
- # provided the above notices are retained, and a notice that the code was
- # modified is included with the above copyright notice.
- #
- # Original author: Tom Tromey
- 
- dnl Process this file with autoconf to produce configure.
- 
- AC_PREREQ(2.13)
- AC_INIT(gcj_mlc.c)
- 
- # This works around the fact that libtool configuration may change LD
- # for this particular configuration, but some shells, instead of
- # keeping the changes in LD private, export them just because LD is
- # exported.
- ORIGINAL_LD_FOR_MULTILIBS=$LD
- 
- dnl Can't be done in GC_CONFIGURE because that confuses automake. 
- AC_CONFIG_AUX_DIR(.)
- 
- GC_CONFIGURE(.)
- 
- AM_PROG_LIBTOOL
- 
- dnl We use these options to decide which functions to include.
- AC_ARG_WITH(target-subdir,
- [  --with-target-subdir=SUBDIR
-                           configuring with a cross compiler])
- AC_ARG_WITH(cross-host,
- [  --with-cross-host=HOST  configuring with a cross compiler])
- 
- AM_MAINTAINER_MODE
- # automake wants to see AC_EXEEXT.  But we don't need it.  And having
- # it is actually a problem, because the compiler we're passed can't
- # necessarily do a full link.  So we fool automake here.
- if false; then
-   # autoconf 2.50 runs AC_EXEEXT by default, and the macro expands
-   # to nothing, so nothing would remain between `then' and `fi' if it
-   # were not for the `:' below.
-   :
-   AC_EXEEXT
- fi
- 
- AC_MSG_CHECKING([for thread model used by GCC])
- THREADS=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'`
- if test -z "$THREADS"; then
-    THREADS=no
- fi
- AC_MSG_RESULT([$THREADS])
- 
- AC_ARG_ENABLE(parallel-mark,
- [  --enable-parallel-mark	parallelize marking and free list construction],
-    [case "$THREADS" in
-       no | none | single)
- 	AC_MSG_ERROR([Parallel mark requires --enable-threads=x spec])
- 	;;
-     esac]
- )
- 
- INCLUDES="-I`cd $srcdir && ${PWDCMD-pwd}`/include"
- THREADLIBS=
- case "$THREADS" in
-  no | none | single)
-     THREADS=none
-     ;;
-  posix | pthreads)
-     THREADS=posix
-     THREADLIBS=-lpthread
-     case "$host" in
-      x86-*-linux* | ia64-*-linux* | i586-*-linux* | i686-*-linux* | x86_64-*-linux* | alpha-*-linux*)
- 	AC_DEFINE(GC_LINUX_THREADS)
- 	AC_DEFINE(_REENTRANT)
-         if test "${enable_parallel_mark}" = yes; then
- 	  AC_DEFINE(PARALLEL_MARK)
- 	fi
- 	AC_DEFINE(THREAD_LOCAL_ALLOC)
- 	;;
-      *-*-linux*)
- 	AC_DEFINE(GC_LINUX_THREADS)
- 	AC_DEFINE(_REENTRANT)
- 	;;
-      *-*-aix*)
- 	AC_DEFINE(GC_AIX_THREADS)
- 	AC_DEFINE(_REENTRANT)
- 	;;
-      *-*-hpux*)
- 	AC_MSG_WARN("Only HP/UX 11 threads are supported.")
- 	AC_DEFINE(GC_HPUX_THREADS)
- 	AC_DEFINE(_POSIX_C_SOURCE,199506L)
- 	if test "${enable_parallel_mark}" = yes; then
- 	  AC_DEFINE(PARALLEL_MARK)
- 	fi
- 	AC_DEFINE(THREAD_LOCAL_ALLOC)
- 	THREADLIBS="-lpthread -lrt"
- 	;;
-      *-*-freebsd*)
- 	AC_MSG_WARN("FreeBSD does not yet fully support threads with Boehm GC.")
- 	AC_DEFINE(GC_FREEBSD_THREADS)
- 	INCLUDES="$INCLUDES -pthread"
- 	THREADLIBS=-pthread
-       	;;
-      *-*-solaris*)
- 	AC_DEFINE(GC_SOLARIS_THREADS)
- 	AC_DEFINE(GC_SOLARIS_PTHREADS)
- 	;;
-      *-*-irix*)
- 	AC_DEFINE(GC_IRIX_THREADS)
- 	;;
-      *-*-cygwin*)
- 	AC_DEFINE(GC_WIN32_THREADS)
- 	;;
-      *-*-darwin*)
- 	AC_DEFINE(GC_DARWIN_THREADS)
- 	AC_DEFINE(THREAD_LOCAL_ALLOC)
- 	if test "${enable_parallel_mark}" = yes; then
- 	  AC_DEFINE(PARALLEL_MARK)
- 	fi
- 	;;
-      *-*-osf*)
- 	AC_DEFINE(GC_OSF1_THREADS)
-         if test "${enable_parallel_mark}" = yes; then
- 	  AC_DEFINE(PARALLEL_MARK)
- 	  AC_DEFINE(THREAD_LOCAL_ALLOC)
- 	  # May want to enable it in other cases, too.
- 	  # Measurements havent yet been done.
- 	fi
- 	INCLUDES="$INCLUDES -pthread"
- 	THREADLIBS="-lpthread -lrt"
- 	;;
-     esac
-     ;;
-  win32)
-     AC_DEFINE(GC_WIN32_THREADS)
-     dnl Old wine getenv may not return NULL for missing entry.
-     dnl Define EMPTY_GETENV_RESULTS here to work around the bug.
-     ;;
-  dgux386)
-     THREADS=dgux386
- AC_MSG_RESULT($THREADLIBS)
-     # Use pthread GCC  switch
-     THREADLIBS=-pthread
-     if test "${enable_parallel_mark}" = yes; then
-         AC_DEFINE(PARALLEL_MARK)
-     fi
-     AC_DEFINE(THREAD_LOCAL_ALLOC)
-     AC_DEFINE(GC_DGUX386_THREADS)
-     AC_DEFINE(DGUX_THREADS)
-     # Enable _POSIX4A_DRAFT10_SOURCE with flag -pthread
-     INCLUDES="-pthread $INCLUDES"
-     ;;
-  aix)
-     THREADS=posix
-     THREADLIBS=-lpthread
-     AC_DEFINE(GC_AIX_THREADS)
-     AC_DEFINE(_REENTRANT)
-     ;;
-  decosf1 | irix | mach | os2 | solaris | dce | vxworks)
-     AC_MSG_ERROR(thread package $THREADS not yet supported)
-     ;;
-  *)
-     AC_MSG_ERROR($THREADS is an unknown thread package)
-     ;;
- esac
- AC_SUBST(THREADLIBS)
- 
- case "$host" in 
-    powerpc-*-darwin*)
-       powerpc_darwin=true
-       ;;
- esac
- AM_CONDITIONAL(POWERPC_DARWIN,test x$powerpc_darwin = xtrue)
- 
- # We never want libdl on darwin. It is a fake libdl that just ends up making
- # dyld calls anyway
- case "$host" in
-   *-*-darwin*) ;;
-   *) 
-     AC_CHECK_LIB(dl, dlopen, EXTRA_TEST_LIBS="$EXTRA_TEST_LIBS -ldl")
-     ;;
- esac
- 
- AC_SUBST(EXTRA_TEST_LIBS)
- 
- target_all=libgcjgc.la
- AC_SUBST(target_all)
- AC_SUBST(target_alias)
- 
- dnl If the target is an eCos system, use the appropriate eCos
- dnl I/O routines.
- dnl FIXME: this should not be a local option but a global target
- dnl system; at present there is no eCos target.
- TARGET_ECOS="no"
- AC_ARG_WITH(ecos,
- [  --with-ecos             enable runtime eCos target support],
- TARGET_ECOS="$with_ecos"
- )
- 
- addobjs=
- addlibs=
- addincludes=
- addtests=
- CXXINCLUDES=
- case "$TARGET_ECOS" in
-    no)
-       ;;
-    *)
-       AC_DEFINE(ECOS)
-       CXXINCLUDES="-I${TARGET_ECOS}/include"
-       addobjs="$addobjs ecos.lo"
-       ;;
- esac
- 
- if test "${enable_cplusplus}" = yes; then
-       addincludes="$addincludes include/gc_cpp.h include/gc_allocator.h"
-       addtests="$addtests test_cpp"
- fi
- 
- AM_CONDITIONAL(CPLUSPLUS, test "${enable_cplusplus}" = yes)
- 
- AC_SUBST(CXX)
- 
- AC_SUBST(INCLUDES)
- AC_SUBST(CXXINCLUDES)
- 
- # Configuration of shared libraries
- #
- AC_MSG_CHECKING(whether to build shared libraries)
- AC_ENABLE_SHARED
- 
- case "$host" in
-  alpha-*-openbsd*)
-      enable_shared=no
-      AC_MSG_RESULT(no)
-      ;;
-  *)
-      AC_MSG_RESULT(yes)
-      ;;
- esac
- 
- # Configuration of machine-dependent code
- #
- # We don't set NO_EXECUTE_PERMISSION by default because gcj (and
- # anything else that creates trampolines in gc-allocated memory)
- # always needs exec permission.  The exceptions to this are IA-64 and
- # some variations of Power PC, where trampolines don't contain
- # executable code.
- #
- AC_MSG_CHECKING(which machine-dependent code should be used) 
- machdep=
- case "$host" in
-  alpha*-*-openbsd*)
-     machdep="alpha_mach_dep.lo"
-     if test x"${ac_cv_lib_dl_dlopen}" != xyes ; then
-        AC_MSG_WARN(OpenBSD/Alpha without dlopen(). Shared library support is disabled)
-     fi
-     ;;
-  alpha*-*-linux*)
-     machdep="alpha_mach_dep.lo"
-     ;;
-  i?86-*-solaris2.[[89]] | i?86-*-solaris2.1?)
-     AC_DEFINE(SOLARIS25_PROC_VDB_BUG_FIXED)
-     ;;
-  mipstx39-*-elf*)
-     machdep="mips_ultrix_mach_dep.lo"
-     AC_DEFINE(STACKBASE, __stackbase)
-     AC_DEFINE(DATASTART_IS_ETEXT)
-     ;;
-  mips-dec-ultrix*)
-     machdep="mips_ultrix_mach-dep.lo"
-     ;;
-  mips-nec-sysv*|mips-unknown-sysv*)
-     ;;
-  mips*-*-linux*) 
-     ;; 
-  mips-*-*)
-     machdep="mips_sgi_mach_dep.lo"
-     ;;
-  sparc-*-netbsd*)
-     machdep="sparc_netbsd_mach_dep.lo"
-     ;;
-  sparc-sun-solaris2.3)
-     machdep="sparc_mach_dep.lo"
-     AC_DEFINE(SUNOS53_SHARED_LIB)
-     ;;
-  sparc-sun-solaris2.*)
-     machdep="sparc_mach_dep.lo"
-     ;;
-  ia64-*-*)
-     AC_DEFINE(NO_EXECUTE_PERMISSION)
-     machdep="mach_dep.lo ia64_save_regs_in_stack.lo"
-     ;;
- esac
- if test x"$machdep" = x; then
- AC_MSG_RESULT($machdep)
-    machdep="mach_dep.lo"
- fi
- addobjs="$addobjs $machdep"
- AC_SUBST(addobjs)
- AC_SUBST(addincludes)
- AC_SUBST(addlibs)
- AC_SUBST(addtests)
- 
- AC_PROG_LIBTOOL
- 
- #
- # Check for AViiON Machines running DGUX
- #
- AC_MSG_CHECKING(if host is AViiON running DGUX)
- ac_is_dgux=no
- AC_CHECK_HEADER(sys/dg_sys_info.h,
- [ac_is_dgux=yes;])
- 
- AC_MSG_RESULT($ac_is_dgux) 
-     ## :GOTCHA: we do not check anything but sys/dg_sys_info.h
- if test $ac_is_dgux = yes; then
-     if test "$enable_full_debug" = "yes"; then
-       CFLAGS="-g -mstandard -DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
-       CXXFLAGS="-g -mstandard -DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
-     else
-       CFLAGS="-DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
-       CXXFLAGS="-DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
-     fi
-     AC_SUBST(CFLAGS)
-     AC_SUBST(CXXFLAGS)
- fi
- 
- dnl We use these options to decide which functions to include.
- AC_ARG_WITH(target-subdir,
- [  --with-target-subdir=SUBDIR
-                           configuring with a cross compiler])
- AC_ARG_WITH(cross-host,
- [  --with-cross-host=HOST  configuring with a cross compiler])
- 
- # automake wants to see AC_EXEEXT.  But we don't need it.  And having
- # it is actually a problem, because the compiler we're passed can't
- # necessarily do a full link.  So we fool automake here.
- if false; then
-   # autoconf 2.50 runs AC_EXEEXT by default, and the macro expands
-   # to nothing, so nothing would remain between `then' and `fi' if it
-   # were not for the `:' below.
-   :
-   AC_EXEEXT
- fi
- 
- dnl As of 4.13a2, the collector will not properly work on Solaris when
- dnl built with gcc and -O.  So we remove -O in the appropriate case.
- dnl
- AC_MSG_CHECKING(whether Solaris gcc optimization fix is necessary)
- case "$host" in
-  sparc-sun-solaris2*|*aix*)
-     if test "$GCC" = yes; then
-        AC_MSG_RESULT(yes)
-        new_CFLAGS=
-        for i in $CFLAGS; do
- 	  case "$i" in
- 	   -O*)
- 	      ;;
- 	   *)
- 	      new_CFLAGS="$new_CFLAGS $i"
- 	      ;;
- 	  esac
-        done
-        CFLAGS="$new_CFLAGS"
-     else
-        AC_MSG_RESULT(no)
-     fi
-     ;;
-  *) AC_MSG_RESULT(no) ;;
- esac
- 
- dnl We need to override the top-level CFLAGS.  This is how we do it.
- MY_CFLAGS="$CFLAGS"
- AC_SUBST(MY_CFLAGS)
- 
- dnl Include defines that have become de facto standard.
- dnl ALL_INTERIOR_POINTERS can be overridden in startup code.
- AC_DEFINE(SILENT)
- AC_DEFINE(NO_SIGNALS)
- AC_DEFINE(ALL_INTERIOR_POINTERS)
- 
- dnl By default, make the library as general as possible.
- AC_DEFINE(JAVA_FINALIZATION)
- AC_DEFINE(GC_GCJ_SUPPORT)
- AC_DEFINE(ATOMIC_UNCOLLECTABLE)
- 
- dnl This is something of a hack.  When cross-compiling we turn off
- dnl some functionality. These is only correct when targetting an
- dnl embedded system.  FIXME.
- if test -n "${with_cross_host}"; then
-    AC_DEFINE(NO_SIGSET)
-    AC_DEFINE(NO_DEBUGGING)
- fi
- 
- AC_ARG_ENABLE(full-debug,
- [  --enable-full-debug	include full support for pointer backtracing etc.],
- [ if test "$enable_full_debug" = "yes"; then
-     AC_MSG_WARN("Must define GC_DEBUG and use debug alloc. in clients.")
-     AC_DEFINE(KEEP_BACK_PTRS)
-     AC_DEFINE(DBG_HDRS_ALL)
-     case $host in
-       ia64-*-linux* )
- 	AC_DEFINE(MAKE_BACK_GRAPH)
-       ;;
-       x86-*-linux* | i586-*-linux* | i686-*-linux* | x86_64-*-linux* )
- 	AC_DEFINE(MAKE_BACK_GRAPH)
- 	AC_MSG_WARN("Client must not use -fomit-frame-pointer.")
- 	AC_DEFINE(SAVE_CALL_COUNT, 8)
-       ;;
-       i[3456]86-*-dgux*)
- 	AC_DEFINE(MAKE_BACK_GRAPH)
-       ;;
-     esac ]
-   fi)
- 
- if test -n "$with_cross_host" &&
-    test x"$with_cross_host" != x"no"; then
-   toolexecdir='$(exec_prefix)/$(target_alias)'
-   toolexeclibdir='$(toolexecdir)/lib'
- else
-   toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
-   toolexeclibdir='$(libdir)'
- fi
- multi_os_directory=`$CC -print-multi-os-directory`
- case $multi_os_directory in
-   .) ;; # Avoid trailing /.
-   *) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;;
- esac
- AC_SUBST(toolexecdir)
- AC_SUBST(toolexeclibdir)
- 
- if test "${multilib}" = "yes"; then
-   multilib_arg="--enable-multilib"
- else
-   multilib_arg=
- fi
- 
- AC_OUTPUT(Makefile include/Makefile, [
- dnl Put all the -I and -D options in a file.
- echo "$INCLUDES $DEFS" > boehm-cflags
- 
- if test -n "$CONFIG_FILES"; then
-   LD="${ORIGINAL_LD_FOR_MULTILIBS}"
-   ac_file=Makefile . ${gc_basedir}/../config-ml.in
- fi],
- srcdir=${srcdir}
- host=${host}
- target=${target}
- with_multisubdir=${with_multisubdir}
- ac_configure_args="${multilib_arg} ${ac_configure_args}"
- CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
- gc_basedir=${gc_basedir}
- CC="${CC}"
- ORIGINAL_LD_FOR_MULTILIBS="${ORIGINAL_LD_FOR_MULTILIBS}"
- DEFS="$DEFS"
- INCLUDES="$INCLUDES"
- )
--- 0 ----
diff -Nrcpad gcc-3.4.3/boehm-gc/cord/cordprnt.c gcc-4.0.0/boehm-gc/cord/cordprnt.c
*** gcc-3.4.3/boehm-gc/cord/cordprnt.c	Mon Jul 28 04:18:22 2003
--- gcc-4.0.0/boehm-gc/cord/cordprnt.c	Fri Aug 13 23:05:31 2004
*************** int CORD_vsprintf(CORD * out, CORD forma
*** 261,267 ****
  #		    ifdef __va_copy
                        __va_copy(vsprintf_args, args);
  #		    else
! #		      if defined(__GNUC__) /* and probably in other cases */
                          va_copy(vsprintf_args, args);
  #		      else
  			vsprintf_args = args;
--- 261,267 ----
  #		    ifdef __va_copy
                        __va_copy(vsprintf_args, args);
  #		    else
! #		      if defined(__GNUC__) && !defined(__DJGPP__) /* and probably in other cases */
                          va_copy(vsprintf_args, args);
  #		      else
  			vsprintf_args = args;
diff -Nrcpad gcc-3.4.3/boehm-gc/cord/cordtest.c gcc-4.0.0/boehm-gc/cord/cordtest.c
*** gcc-3.4.3/boehm-gc/cord/cordtest.c	Fri Aug 17 18:30:48 2001
--- gcc-4.0.0/boehm-gc/cord/cordtest.c	Fri Aug 13 23:05:31 2004
***************
*** 11,16 ****
--- 11,17 ----
   * modified is included with the above copyright notice.
   */
  /* Boehm, August 24, 1994 11:58 am PDT */
+ # include "gc.h"	/* For GC_INIT() only */
  # include "cord.h"
  # include <string.h>
  # include <stdio.h>
*************** void test_basics()
*** 116,122 ****
  
  void test_extras()
  {
! #   if defined(__OS2__)
  #	define FNAME1 "tmp1"
  #	define FNAME2 "tmp2"
  #   elif defined(AMIGA)
--- 117,123 ----
  
  void test_extras()
  {
! #   if defined(__OS2__) || defined(__DJGPP__)
  #	define FNAME1 "tmp1"
  #	define FNAME2 "tmp2"
  #   elif defined(AMIGA)
*************** void test_extras()
*** 162,167 ****
--- 163,172 ----
          x = CORD_cat(x,x);
      }
      if ((f = fopen(FNAME2, "w")) == 0) ABORT("2nd open failed");
+ #   ifdef __DJGPP__
+       /* FIXME: DJGPP workaround.  Why does this help? */
+       if (fflush(f) != 0) ABORT("fflush failed");
+ #   endif
      if (CORD_put(x,f) == EOF) ABORT("CORD_put failed");
      if (fclose(f) == EOF) ABORT("fclose failed");
      w = CORD_from_file(f2 = fopen(FNAME2, "rb"));
*************** main()
*** 221,226 ****
--- 226,232 ----
  #   ifdef THINK_C
          printf("cordtest:\n");
  #   endif
+     GC_INIT();
      test_basics();
      test_extras();
      test_printf();
diff -Nrcpad gcc-3.4.3/boehm-gc/cord/cordxtra.c gcc-4.0.0/boehm-gc/cord/cordxtra.c
*** gcc-3.4.3/boehm-gc/cord/cordxtra.c	Fri Aug 17 18:30:48 2001
--- gcc-4.0.0/boehm-gc/cord/cordxtra.c	Fri Aug 13 23:05:31 2004
*************** size_t CORD_str(CORD x, size_t start, CO
*** 385,393 ****
          mask <<= 8;
          mask |= 0xff;
          s_buf <<= 8;
!         s_buf |= s_start[i];
          x_buf <<= 8;
!         x_buf |= CORD_pos_fetch(xpos);
          CORD_next(xpos);
      }
      for (match_pos = start; ; match_pos++) {
--- 385,393 ----
          mask <<= 8;
          mask |= 0xff;
          s_buf <<= 8;
!         s_buf |= (unsigned char)s_start[i];
          x_buf <<= 8;
!         x_buf |= (unsigned char)CORD_pos_fetch(xpos);
          CORD_next(xpos);
      }
      for (match_pos = start; ; match_pos++) {
*************** size_t CORD_str(CORD x, size_t start, CO
*** 402,408 ****
  	    return(CORD_NOT_FOUND);
  	}
      	x_buf <<= 8;
!         x_buf |= CORD_pos_fetch(xpos);
          CORD_next(xpos);
      }
  }
--- 402,408 ----
  	    return(CORD_NOT_FOUND);
  	}
      	x_buf <<= 8;
!         x_buf |= (unsigned char)CORD_pos_fetch(xpos);
          CORD_next(xpos);
      }
  }
diff -Nrcpad gcc-3.4.3/boehm-gc/cord/de.c gcc-4.0.0/boehm-gc/cord/de.c
*** gcc-3.4.3/boehm-gc/cord/de.c	Fri Aug 17 18:30:48 2001
--- gcc-4.0.0/boehm-gc/cord/de.c	Fri Aug 13 23:05:31 2004
*************** char ** argv;
*** 569,577 ****
  #if defined(MACINTOSH)
  	console_options.title = "\pDumb Editor";
  	cshow(stdout);
- 	GC_init();
  	argc = ccommand(&argv);
  #endif
      
      if (argc != 2) goto usage;
      arg_file_name = argv[1];
--- 569,577 ----
  #if defined(MACINTOSH)
  	console_options.title = "\pDumb Editor";
  	cshow(stdout);
  	argc = ccommand(&argv);
  #endif
+     GC_INIT();
      
      if (argc != 2) goto usage;
      arg_file_name = argv[1];
diff -Nrcpad gcc-3.4.3/boehm-gc/darwin_stop_world.c gcc-4.0.0/boehm-gc/darwin_stop_world.c
*** gcc-3.4.3/boehm-gc/darwin_stop_world.c	Mon Jul 28 03:46:09 2003
--- gcc-4.0.0/boehm-gc/darwin_stop_world.c	Fri Aug 13 23:05:29 2004
***************
*** 2,9 ****
  
  # if defined(GC_DARWIN_THREADS)
  
- #define DEBUG_THREADS 0
- 
  /* From "Inside Mac OS X - Mach-O Runtime Architecture" published by Apple
     Page 49:
     "The space beneath the stack pointer, where a new stack frame would normally
--- 2,7 ----
***************
*** 16,116 ****
  */
  #define PPC_RED_ZONE_SIZE 224
  
  void GC_push_all_stacks() {
      int i;
      kern_return_t r;
!     GC_thread p;
!     pthread_t me;
      ptr_t lo, hi;
! #	if defined(POWERPC)
!         ppc_thread_state_t state;
! #	else
! #		error FIXME for non-ppc OS X
! #	endif
!     mach_msg_type_number_t thread_state_count = MACHINE_THREAD_STATE_COUNT;
!     
!     me = pthread_self();
      if (!GC_thr_initialized) GC_thr_init();
      
!     for(i=0;i<THREAD_TABLE_SZ;i++) {
!         for(p=GC_threads[i];p!=0;p=p->next) {
!             if(p -> flags & FINISHED) continue;
!             if(pthread_equal(p->id,me)) {
!                 lo = GC_approx_sp();
!             } else {
!                 /* Get the thread state (registers, etc) */
!                 r = thread_get_state(
!                     p->stop_info.mach_thread,
!                     MACHINE_THREAD_STATE,
!                     (natural_t*)&state,
!                     &thread_state_count);
!                 if(r != KERN_SUCCESS) ABORT("thread_get_state failed");
!     
!                 #ifdef POWERPC
!                     lo = (void*)(state.r1 - PPC_RED_ZONE_SIZE);
!                     
!                     GC_push_one(state.r0); 
!                     GC_push_one(state.r2); 
!                     GC_push_one(state.r3); 
!                     GC_push_one(state.r4); 
!                     GC_push_one(state.r5); 
!                     GC_push_one(state.r6); 
!                     GC_push_one(state.r7); 
!                     GC_push_one(state.r8); 
!                     GC_push_one(state.r9); 
!                     GC_push_one(state.r10); 
!                     GC_push_one(state.r11); 
!                     GC_push_one(state.r12); 
!                     GC_push_one(state.r13); 
!                     GC_push_one(state.r14); 
!                     GC_push_one(state.r15); 
!                     GC_push_one(state.r16); 
!                     GC_push_one(state.r17); 
!                     GC_push_one(state.r18); 
!                     GC_push_one(state.r19); 
!                     GC_push_one(state.r20); 
!                     GC_push_one(state.r21); 
!                     GC_push_one(state.r22); 
!                     GC_push_one(state.r23); 
!                     GC_push_one(state.r24); 
!                     GC_push_one(state.r25); 
!                     GC_push_one(state.r26); 
!                     GC_push_one(state.r27); 
!                     GC_push_one(state.r28); 
!                     GC_push_one(state.r29); 
!                     GC_push_one(state.r30); 
!                     GC_push_one(state.r31);
!                 #else
!                 #	error FIXME for non-PPC darwin
!                 #endif /* !POWERPC */
!             } /* p != me */
!             if(p->flags & MAIN_THREAD)
!                 hi = GC_stackbottom;
!             else
!                 hi = p->stack_end;
!             #if DEBUG_THREADS
!                 GC_printf3("Darwin: Stack for thread 0x%lx = [%lx,%lx)\n",
!                     (unsigned long) p -> id,
!                     (unsigned long) lo,
!                     (unsigned long) hi
!                 );
!             #endif
!             GC_push_all_stack(lo,hi);
!         } /* for(p=GC_threads[i]...) */
!     } /* for(i=0;i<THREAD_TABLE_SZ...) */
  }
  
  /* Caller holds allocation lock.	*/
  void GC_stop_world()
  {
!     int i;
      GC_thread p;
!     pthread_t my_thread = pthread_self();
      kern_return_t kern_result;
      
!     #if DEBUG_THREADS
!     GC_printf1("Stopping the world from 0x%lx\n", pthread_self());
!     #endif
         
      /* Make sure all free list construction has stopped before we start. */
      /* No new construction can start, since free list construction is	*/
--- 14,271 ----
  */
  #define PPC_RED_ZONE_SIZE 224
  
+ /* Not 64-bit clean. Wait until Apple defines their 64-bit ABI */
+ typedef struct StackFrame {
+   unsigned int	savedSP;
+   unsigned int	savedCR;
+   unsigned int	savedLR;
+   unsigned int	reserved[2];
+   unsigned int	savedRTOC;
+ } StackFrame;
+ 
+ 
+ unsigned int FindTopOfStack(unsigned int stack_start) {
+   StackFrame	*frame;
+   
+   if (stack_start == 0) {
+     __asm__ volatile("lwz	%0,0(r1)" : "=r" (frame));
+   } else {
+     frame = (StackFrame *)stack_start;
+   }
+ 
+ # ifdef DEBUG_THREADS
+     /* GC_printf1("FindTopOfStack start at sp = %p\n", frame); */
+ # endif
+   do {
+     if (frame->savedSP == NULL) break;
+     		/* if there are no more stack frames, stop */
+ 
+     frame = (StackFrame*)frame->savedSP;
+ 
+     /* we do these next two checks after going to the next frame
+        because the LR for the first stack frame in the loop
+        is not set up on purpose, so we shouldn't check it. */
+     if ((frame->savedLR & ~3) == 0) break; /* if the next LR is bogus, stop */
+     if ((~(frame->savedLR) & ~3) == 0) break; /* ditto */
+   } while (1); 
+ 
+ # ifdef DEBUG_THREADS
+     /* GC_printf1("FindTopOfStack finish at sp = %p\n", frame); */
+ # endif
+ 
+   return (unsigned int)frame;
+ }	
+ 
  void GC_push_all_stacks() {
      int i;
      kern_return_t r;
!     mach_port_t me;
      ptr_t lo, hi;
!     thread_act_array_t act_list = 0;
!     mach_msg_type_number_t listcount = 0;
! 
!     me = mach_thread_self();
      if (!GC_thr_initialized) GC_thr_init();
      
!     r = task_threads(current_task(), &act_list, &listcount);
!     if(r != KERN_SUCCESS) ABORT("task_threads failed");
!     for(i = 0; i < listcount; i++) {
!       thread_act_t thread = act_list[i];
!       if (thread == me) {
! 	lo = GC_approx_sp();
! 	hi = (ptr_t)FindTopOfStack(0);
!       } else {
! #      ifdef POWERPC
! 	ppc_thread_state_t info;
! 	mach_msg_type_number_t outCount = THREAD_STATE_MAX;
! 	r = thread_get_state(thread, MACHINE_THREAD_STATE,
! 			     (natural_t *)&info, &outCount);
! 	if(r != KERN_SUCCESS) ABORT("task_get_state failed");
! 
! 	lo = (void*)(info.r1 - PPC_RED_ZONE_SIZE);
! 	hi = (ptr_t)FindTopOfStack(info.r1);
! 
! 	GC_push_one(info.r0); 
! 	GC_push_one(info.r2); 
! 	GC_push_one(info.r3); 
! 	GC_push_one(info.r4); 
! 	GC_push_one(info.r5); 
! 	GC_push_one(info.r6); 
! 	GC_push_one(info.r7); 
! 	GC_push_one(info.r8); 
! 	GC_push_one(info.r9); 
! 	GC_push_one(info.r10); 
! 	GC_push_one(info.r11); 
! 	GC_push_one(info.r12); 
! 	GC_push_one(info.r13); 
! 	GC_push_one(info.r14); 
! 	GC_push_one(info.r15); 
! 	GC_push_one(info.r16); 
! 	GC_push_one(info.r17); 
! 	GC_push_one(info.r18); 
! 	GC_push_one(info.r19); 
! 	GC_push_one(info.r20); 
! 	GC_push_one(info.r21); 
! 	GC_push_one(info.r22); 
! 	GC_push_one(info.r23); 
! 	GC_push_one(info.r24); 
! 	GC_push_one(info.r25); 
! 	GC_push_one(info.r26); 
! 	GC_push_one(info.r27); 
! 	GC_push_one(info.r28); 
! 	GC_push_one(info.r29); 
! 	GC_push_one(info.r30); 
! 	GC_push_one(info.r31);
! #      else
! 	/* FIXME: Remove after testing:	*/
! 	WARN("This is completely untested and likely will not work\n", 0);
! 	i386_thread_state_t info;
! 	mach_msg_type_number_t outCount = THREAD_STATE_MAX;
! 	r = thread_get_state(thread, MACHINE_THREAD_STATE,
! 			     (natural_t *)&info, &outCount);
! 	if(r != KERN_SUCCESS) ABORT("task_get_state failed");
! 
! 	lo = (void*)info.esp;
! 	hi = (ptr_t)FindTopOfStack(info.esp);
! 
! 	GC_push_one(info.eax); 
! 	GC_push_one(info.ebx); 
! 	GC_push_one(info.ecx); 
! 	GC_push_one(info.edx); 
! 	GC_push_one(info.edi); 
! 	GC_push_one(info.esi); 
! 	/* GC_push_one(info.ebp);  */
! 	/* GC_push_one(info.esp);  */
! 	GC_push_one(info.ss); 
! 	GC_push_one(info.eip); 
! 	GC_push_one(info.cs); 
! 	GC_push_one(info.ds); 
! 	GC_push_one(info.es); 
! 	GC_push_one(info.fs); 
! 	GC_push_one(info.gs); 
! #      endif /* !POWERPC */
!       }
! #     if DEBUG_THREADS
!        GC_printf3("Darwin: Stack for thread 0x%lx = [%lx,%lx)\n",
! 		  (unsigned long) thread,
! 		  (unsigned long) lo,
! 		  (unsigned long) hi
! 		 );
! #     endif
!       GC_push_all_stack(lo, hi); 
!     } /* for(p=GC_threads[i]...) */
  }
  
+ static mach_port_t GC_mach_handler_thread;
+ static int GC_use_mach_handler_thread = 0;
+ 
+ static struct GC_mach_thread GC_mach_threads[THREAD_TABLE_SZ];
+ static int GC_mach_threads_count;
+ 
+ void GC_stop_init() {
+   int i;
+ 
+   for (i = 0; i < THREAD_TABLE_SZ; i++) {
+     GC_mach_threads[i].thread = 0;
+     GC_mach_threads[i].already_suspended = 0;
+   }
+   GC_mach_threads_count = 0;
+ }
+ 
+ /* returns true if there's a thread in act_list that wasn't in old_list */
+ int GC_suspend_thread_list(thread_act_array_t act_list, int count, 
+ 			   thread_act_array_t old_list, int old_count) {
+   mach_port_t my_thread = mach_thread_self();
+   int i, j;
+ 
+   int changed = 0;
+ 
+   for(i = 0; i < count; i++) {
+     thread_act_t thread = act_list[i];
+ #   if DEBUG_THREADS 
+       GC_printf1("Attempting to suspend thread %p\n", thread);
+ #   endif
+     /* find the current thread in the old list */
+     int found = 0;
+     for(j = 0; j < old_count; j++) {
+       thread_act_t old_thread = old_list[j];
+       if (old_thread == thread) {
+ 	found = 1;
+ 	break;
+       }
+     }
+     if (!found) {
+       /* add it to the GC_mach_threads list */
+       GC_mach_threads[GC_mach_threads_count].thread = thread;
+       /* default is not suspended */
+       GC_mach_threads[GC_mach_threads_count].already_suspended = 0;
+       changed = 1;
+     }      
+ 
+     if (thread != my_thread &&
+ 	(!GC_use_mach_handler_thread
+ 	 || (GC_use_mach_handler_thread
+ 	     && GC_mach_handler_thread != thread))) {
+       struct thread_basic_info info;
+       mach_msg_type_number_t outCount = THREAD_INFO_MAX;
+       kern_return_t kern_result = thread_info(thread, THREAD_BASIC_INFO,
+ 				(thread_info_t)&info, &outCount);
+       if(kern_result != KERN_SUCCESS) {
+ 	/* the thread may have quit since the thread_threads () call 
+ 	 * we mark already_suspended so it's not dealt with anymore later
+ 	 */
+         if (!found) {
+ 	  GC_mach_threads[GC_mach_threads_count].already_suspended = TRUE;
+     	  GC_mach_threads_count++;
+ 	}
+ 	continue;
+       }
+ #     if DEBUG_THREADS
+         GC_printf2("Thread state for 0x%lx = %d\n", thread, info.run_state);
+ #     endif
+       if (!found) {
+ 	GC_mach_threads[GC_mach_threads_count].already_suspended = info.suspend_count;
+       }
+       if (info.suspend_count) continue;
+       
+ #     if DEBUG_THREADS
+         GC_printf1("Suspending 0x%lx\n", thread);
+ #     endif
+       /* Suspend the thread */
+       kern_result = thread_suspend(thread);
+       if(kern_result != KERN_SUCCESS) {
+ 	/* the thread may have quit since the thread_threads () call 
+ 	 * we mark already_suspended so it's not dealt with anymore later
+ 	 */
+         if (!found) {
+ 	  GC_mach_threads[GC_mach_threads_count].already_suspended = TRUE;
+     	  GC_mach_threads_count++;
+ 	}
+ 	continue;
+       }
+     } 
+     if (!found) GC_mach_threads_count++;
+   }
+   return changed;
+ }
+ 
+ 
  /* Caller holds allocation lock.	*/
  void GC_stop_world()
  {
!   int i, changes;
      GC_thread p;
!     mach_port_t my_thread = mach_thread_self();
      kern_return_t kern_result;
+     thread_act_array_t act_list, prev_list;
+     mach_msg_type_number_t listcount, prevcount;
      
! #   if DEBUG_THREADS
!       GC_printf1("Stopping the world from 0x%lx\n", mach_thread_self());
! #   endif
! 
!     /* clear out the mach threads list table */
!     GC_stop_init(); 
         
      /* Make sure all free list construction has stopped before we start. */
      /* No new construction can start, since free list construction is	*/
*************** void GC_stop_world()
*** 122,164 ****
        /* We should have previously waited for it to become zero. */
  #   endif /* PARALLEL_MARK */
  
!     for (i = 0; i < THREAD_TABLE_SZ; i++) {
!         for (p = GC_threads[i]; p != 0; p = p -> next) {
!             if (p -> id == my_thread) continue;
!             if (p -> flags & FINISHED) continue;
!             if (p -> thread_blocked) /* Will wait */ continue;
!             
!             #if DEBUG_THREADS
!             GC_printf1("Suspending thread 0x%lx\n", p -> id);
!             #endif
!             
!             /* Suspend the thread */
!             kern_result = thread_suspend(p->stop_info.mach_thread);
!             if(kern_result != KERN_SUCCESS) ABORT("thread_suspend failed");
!             
!             /* This is only needed if we are modifying the threads 
!                state. thread_abort_safely should also be used
!                if this code is ever added in again.
!                
!                kern_result = thread_abort(p->stop_info.mach_thread);
!                if(kern_result != KERN_SUCCESS)
!                    ABORT("thread_abort failed (%ul)",kern_result);
!             */
!         }
!     }
!     
  #   ifdef MPROTECT_VDB
!     if(GC_incremental) {
          extern void GC_mprotect_stop();
          GC_mprotect_stop();
!     }
  #   endif
      
  #   ifdef PARALLEL_MARK
        GC_release_mark_lock();
  #   endif
      #if DEBUG_THREADS
!       GC_printf1("World stopped from 0x%lx\n", pthread_self());
      #endif
  }
  
--- 277,316 ----
        /* We should have previously waited for it to become zero. */
  #   endif /* PARALLEL_MARK */
  
!       /* Loop stopping threads until you have gone over the whole list
! 	 twice without a new one appearing. thread_create() won't
! 	 return (and thus the thread stop) until the new thread
! 	 exists, so there is no window whereby you could stop a
! 	 thread, recognise it is stopped, but then have a new thread
! 	 it created before stopping show up later.
!       */
!       
!       changes = 1;
!       prev_list = NULL;
!       prevcount = 0;
!       do {
! 	int result;
! 	kern_result = task_threads(current_task(), &act_list, &listcount);
! 	result = GC_suspend_thread_list(act_list, listcount,
! 					prev_list, prevcount);
! 	changes = result;
! 	prev_list = act_list;
! 	prevcount = listcount;
!       } while (changes);
!       
!  
  #   ifdef MPROTECT_VDB
!       if(GC_incremental) {
          extern void GC_mprotect_stop();
          GC_mprotect_stop();
!       }
  #   endif
      
  #   ifdef PARALLEL_MARK
        GC_release_mark_lock();
  #   endif
      #if DEBUG_THREADS
!       GC_printf1("World stopped from 0x%lx\n", my_thread);
      #endif
  }
  
*************** void GC_stop_world()
*** 166,209 ****
  /* the world stopped.							*/
  void GC_start_world()
  {
!     pthread_t my_thread = pthread_self();
!     int i;
!     GC_thread p;
!     kern_return_t kern_result;
! 
  #   if DEBUG_THREADS
        GC_printf0("World starting\n");
  #   endif
  
  #   ifdef MPROTECT_VDB
!     if(GC_incremental) {
          extern void GC_mprotect_resume();
          GC_mprotect_resume();
!     }
  #   endif
  
!     for (i = 0; i < THREAD_TABLE_SZ; i++) {
!         for (p = GC_threads[i]; p != 0; p = p -> next) {
!             if (p -> id == my_thread) continue;
!             if (p -> flags & FINISHED) continue;
!             if (p -> thread_blocked) continue;
!     
!             #if DEBUG_THREADS
!             GC_printf1("Resuming 0x%lx\n", p -> id);
!             #endif
!             
!             /* Resume the thread */
!             kern_result = thread_resume(p->stop_info.mach_thread);
!             if(kern_result != KERN_SUCCESS) ABORT("thread_resume failed");
!         }
      }
!     #if DEBUG_THREADS
!       GC_printf0("World started\n");
!     #endif
  }
  
! void GC_stop_init() {
! 
  }
  
  #endif
--- 318,380 ----
  /* the world stopped.							*/
  void GC_start_world()
  {
!   mach_port_t my_thread = mach_thread_self();
!   int i, j;
!   GC_thread p;
!   kern_return_t kern_result;
!   thread_act_array_t act_list;
!   mach_msg_type_number_t listcount;
!   
  #   if DEBUG_THREADS
        GC_printf0("World starting\n");
  #   endif
  
  #   ifdef MPROTECT_VDB
!       if(GC_incremental) {
          extern void GC_mprotect_resume();
          GC_mprotect_resume();
!       }
  #   endif
  
!     kern_result = task_threads(current_task(), &act_list, &listcount);
!     for(i = 0; i < listcount; i++) {
!       thread_act_t thread = act_list[i];
!       if (thread != my_thread &&
! 	  (!GC_use_mach_handler_thread ||
! 	   (GC_use_mach_handler_thread && GC_mach_handler_thread != thread))) {
! 	for(j = 0; j < GC_mach_threads_count; j++) {
! 	  if (thread == GC_mach_threads[j].thread) {
! 	    if (GC_mach_threads[j].already_suspended) {
! #             if DEBUG_THREADS
! 	        GC_printf1("Not resuming already suspended thread %p\n", thread);
! #             endif
! 	      continue;
! 	    }
! 	    struct thread_basic_info info;
! 	    mach_msg_type_number_t outCount = THREAD_INFO_MAX;
! 	    kern_result = thread_info(thread, THREAD_BASIC_INFO,
! 				      (thread_info_t)&info, &outCount);
! 	    if(kern_result != KERN_SUCCESS) ABORT("thread_info failed");
! #           if DEBUG_THREADS
! 	      GC_printf2("Thread state for 0x%lx = %d\n", thread,
! 			 info.run_state);
! 	      GC_printf1("Resuming 0x%lx\n", thread);
! #           endif
! 	    /* Resume the thread */
! 	    kern_result = thread_resume(thread);
! 	    if(kern_result != KERN_SUCCESS) ABORT("thread_resume failed");
! 	  } 
! 	}
!       }
      }
! #   if DEBUG_THREADS
!      GC_printf0("World started\n");
! #   endif
  }
  
! void GC_darwin_register_mach_handler_thread(mach_port_t thread) {
!   GC_mach_handler_thread = thread;
!   GC_use_mach_handler_thread = 1;
  }
  
  #endif
diff -Nrcpad gcc-3.4.3/boehm-gc/dbg_mlc.c gcc-4.0.0/boehm-gc/dbg_mlc.c
*** gcc-3.4.3/boehm-gc/dbg_mlc.c	Mon Jul 28 04:18:20 2003
--- gcc-4.0.0/boehm-gc/dbg_mlc.c	Fri Aug 13 23:05:29 2004
***************
*** 2,8 ****
   * Copyright 1988, 1989 Hans-J. Boehm, Alan J. Demers
   * Copyright (c) 1991-1995 by Xerox Corporation.  All rights reserved.
   * Copyright (c) 1997 by Silicon Graphics.  All rights reserved.
!  * Copyright (c) 1999-2000 by Hewlett-Packard Company.  All rights reserved.
   *
   * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
   * OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
--- 2,8 ----
   * Copyright 1988, 1989 Hans-J. Boehm, Alan J. Demers
   * Copyright (c) 1991-1995 by Xerox Corporation.  All rights reserved.
   * Copyright (c) 1997 by Silicon Graphics.  All rights reserved.
!  * Copyright (c) 1999-2004 Hewlett-Packard Development Company, L.P.
   *
   * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
   * OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
*************** ptr_t p;
*** 195,207 ****
  		 (unsigned long)i);
        switch(source) {
  	case GC_REFD_FROM_ROOT:
! 	  GC_err_printf1("root at 0x%lx\n", (unsigned long)base);
  	  goto out;
  	case GC_REFD_FROM_REG:
! 	  GC_err_printf0("root in register\n");
  	  goto out;
  	case GC_FINALIZER_REFD:
! 	  GC_err_printf0("list of finalizable objects\n");
  	  goto out;
  	case GC_REFD_FROM_HEAP:
  	  GC_err_printf1("offset %ld in object:\n", (unsigned long)offset);
--- 195,207 ----
  		 (unsigned long)i);
        switch(source) {
  	case GC_REFD_FROM_ROOT:
! 	  GC_err_printf1("root at 0x%lx\n\n", (unsigned long)base);
  	  goto out;
  	case GC_REFD_FROM_REG:
! 	  GC_err_printf0("root in register\n\n");
  	  goto out;
  	case GC_FINALIZER_REFD:
! 	  GC_err_printf0("list of finalizable objects\n\n");
  	  goto out;
  	case GC_REFD_FROM_HEAP:
  	  GC_err_printf1("offset %ld in object:\n", (unsigned long)offset);
*************** ptr_t p;
*** 217,231 ****
  
    /* Force a garbage collection and generate a backtrace from a	*/
    /* random heap address.					*/
!   void GC_generate_random_backtrace(void)
    {
      void * current;
-     GC_gcollect();
      current = GC_generate_random_valid_address();
!     GC_printf1("Chose address 0x%lx in object\n", (unsigned long)current);
      GC_print_backtrace(current);
    }
      
  #endif /* KEEP_BACK_PTRS */
  
  # define CROSSES_HBLK(p, sz) \
--- 217,236 ----
  
    /* Force a garbage collection and generate a backtrace from a	*/
    /* random heap address.					*/
!   void GC_generate_random_backtrace_no_gc(void)
    {
      void * current;
      current = GC_generate_random_valid_address();
!     GC_printf1("\n****Chose address 0x%lx in object\n", (unsigned long)current);
      GC_print_backtrace(current);
    }
      
+   void GC_generate_random_backtrace(void)
+   {
+     GC_gcollect();
+     GC_generate_random_backtrace_no_gc();
+   }
+     
  #endif /* KEEP_BACK_PTRS */
  
  # define CROSSES_HBLK(p, sz) \
*************** register oh * ohdr;
*** 325,330 ****
--- 330,387 ----
  }
  #endif /* !SHORT_DBG_HDRS */
  
+ static GC_describe_type_fn GC_describe_type_fns[MAXOBJKINDS] = {0};
+ 
+ void GC_register_describe_type_fn(kind, fn)
+ int kind;
+ GC_describe_type_fn fn;
+ {
+   GC_describe_type_fns[kind] = fn;
+ }
+ 
+ /* Print a type description for the object whose client-visible address	*/
+ /* is p.								*/
+ void GC_print_type(p)
+ ptr_t p;
+ {
+     hdr * hhdr = GC_find_header(p);
+     char buffer[GC_TYPE_DESCR_LEN + 1];
+     int kind = hhdr -> hb_obj_kind;
+ 
+     if (0 != GC_describe_type_fns[kind] && GC_is_marked(GC_base(p))) {
+ 	/* This should preclude free list objects except with	*/
+ 	/* thread-local allocation.				*/
+ 	buffer[GC_TYPE_DESCR_LEN] = 0;
+ 	(GC_describe_type_fns[kind])(p, buffer);
+ 	GC_ASSERT(buffer[GC_TYPE_DESCR_LEN] == 0);
+ 	GC_err_puts(buffer);
+     } else {
+ 	switch(kind) {
+ 	  case PTRFREE:
+ 	    GC_err_puts("PTRFREE");
+ 	    break;
+ 	  case NORMAL:
+ 	    GC_err_puts("NORMAL");
+ 	    break;
+ 	  case UNCOLLECTABLE:
+ 	    GC_err_puts("UNCOLLECTABLE");
+ 	    break;
+ #	  ifdef ATOMIC_UNCOLLECTABLE
+ 	    case AUNCOLLECTABLE:
+ 	      GC_err_puts("ATOMIC UNCOLLECTABLE");
+ 	      break;
+ #	  endif
+ 	  case STUBBORN:
+ 	    GC_err_puts("STUBBORN");
+ 	    break;
+ 	  default:
+ 	    GC_err_printf2("kind %ld, descr 0x%lx", kind, hhdr -> hb_descr);
+ 	}
+     }
+ }
+ 
+     
+ 
  void GC_print_obj(p)
  ptr_t p;
  {
*************** ptr_t p;
*** 334,344 ****
      GC_err_printf1("0x%lx (", ((unsigned long)ohdr + sizeof(oh)));
      GC_err_puts(ohdr -> oh_string);
  #   ifdef SHORT_DBG_HDRS
!       GC_err_printf1(":%ld)\n", (unsigned long)(ohdr -> oh_int));
  #   else
!       GC_err_printf2(":%ld, sz=%ld)\n", (unsigned long)(ohdr -> oh_int),
            			        (unsigned long)(ohdr -> oh_sz));
  #   endif
      PRINT_CALL_CHAIN(ohdr);
  }
  
--- 391,403 ----
      GC_err_printf1("0x%lx (", ((unsigned long)ohdr + sizeof(oh)));
      GC_err_puts(ohdr -> oh_string);
  #   ifdef SHORT_DBG_HDRS
!       GC_err_printf1(":%ld, ", (unsigned long)(ohdr -> oh_int));
  #   else
!       GC_err_printf2(":%ld, sz=%ld, ", (unsigned long)(ohdr -> oh_int),
            			        (unsigned long)(ohdr -> oh_sz));
  #   endif
+     GC_print_type((ptr_t)(ohdr + 1));
+     GC_err_puts(")\n");
      PRINT_CALL_CHAIN(ohdr);
  }
  
*************** void GC_start_debugging()
*** 403,408 ****
--- 462,469 ----
      GC_register_displacement((word)sizeof(oh));
  }
  
+ size_t GC_debug_header_size = sizeof(oh);
+ 
  # if defined(__STDC__) || defined(__cplusplus)
      void GC_debug_register_displacement(GC_word offset)
  # else
*************** GC_PTR p;
*** 757,763 ****
  		    uncollectable = TRUE;
  	    }
  #	endif
! 	if (uncollectable) GC_free(base);
      } /* !GC_find_leak */
  }
  
--- 818,832 ----
  		    uncollectable = TRUE;
  	    }
  #	endif
! 	if (uncollectable) {
! 	    GC_free(base);
! 	} else {
! 	    size_t i;
! 	    size_t obj_sz = hhdr -> hb_sz - BYTES_TO_WORDS(sizeof(oh));
! 
! 	    for (i = 0; i < obj_sz; ++i) ((word *)p)[i] = 0xdeadbeef;
! 	    GC_ASSERT((word *)p + i == (word *)base + hhdr -> hb_sz);
! 	}
      } /* !GC_find_leak */
  }
  
*************** GC_PTR *ocd;
*** 1013,1019 ****
      GC_finalization_proc my_old_fn;
      GC_PTR my_old_cd;
      ptr_t base = GC_base(obj);
!     if (0 == base || (ptr_t)obj - base != sizeof(oh)) {
          GC_err_printf1(
  	    "GC_debug_register_finalizer called with non-base-pointer 0x%lx\n",
  	    obj);
--- 1082,1089 ----
      GC_finalization_proc my_old_fn;
      GC_PTR my_old_cd;
      ptr_t base = GC_base(obj);
!     if (0 == base) return;
!     if ((ptr_t)obj - base != sizeof(oh)) {
          GC_err_printf1(
  	    "GC_debug_register_finalizer called with non-base-pointer 0x%lx\n",
  	    obj);
*************** GC_PTR *ocd;
*** 1045,1051 ****
      GC_finalization_proc my_old_fn;
      GC_PTR my_old_cd;
      ptr_t base = GC_base(obj);
!     if (0 == base || (ptr_t)obj - base != sizeof(oh)) {
          GC_err_printf1(
  	  "GC_debug_register_finalizer_no_order called with non-base-pointer 0x%lx\n",
  	  obj);
--- 1115,1122 ----
      GC_finalization_proc my_old_fn;
      GC_PTR my_old_cd;
      ptr_t base = GC_base(obj);
!     if (0 == base) return;
!     if ((ptr_t)obj - base != sizeof(oh)) {
          GC_err_printf1(
  	  "GC_debug_register_finalizer_no_order called with non-base-pointer 0x%lx\n",
  	  obj);
*************** GC_PTR *ocd;
*** 1078,1084 ****
      GC_finalization_proc my_old_fn;
      GC_PTR my_old_cd;
      ptr_t base = GC_base(obj);
!     if (0 == base || (ptr_t)obj - base != sizeof(oh)) {
          GC_err_printf1(
  	    "GC_debug_register_finalizer_ignore_self called with non-base-pointer 0x%lx\n",
  	    obj);
--- 1149,1156 ----
      GC_finalization_proc my_old_fn;
      GC_PTR my_old_cd;
      ptr_t base = GC_base(obj);
!     if (0 == base) return;
!     if ((ptr_t)obj - base != sizeof(oh)) {
          GC_err_printf1(
  	    "GC_debug_register_finalizer_ignore_self called with non-base-pointer 0x%lx\n",
  	    obj);
diff -Nrcpad gcc-3.4.3/boehm-gc/doc/README gcc-4.0.0/boehm-gc/doc/README
*** gcc-3.4.3/boehm-gc/doc/README	Mon Jul 28 04:18:22 2003
--- gcc-4.0.0/boehm-gc/doc/README	Fri Aug 13 23:05:31 2004
***************
*** 1,7 ****
  Copyright (c) 1988, 1989 Hans-J. Boehm, Alan J. Demers
  Copyright (c) 1991-1996 by Xerox Corporation.  All rights reserved.
  Copyright (c) 1996-1999 by Silicon Graphics.  All rights reserved.
! Copyright (c) 1999-2003 by Hewlett-Packard Company. All rights reserved.
  
  The file linux_threads.c is also
  Copyright (c) 1998 by Fergus Henderson.  All rights reserved.
--- 1,7 ----
  Copyright (c) 1988, 1989 Hans-J. Boehm, Alan J. Demers
  Copyright (c) 1991-1996 by Xerox Corporation.  All rights reserved.
  Copyright (c) 1996-1999 by Silicon Graphics.  All rights reserved.
! Copyright (c) 1999-2004 Hewlett-Packard Development Company, L.P.
  
  The file linux_threads.c is also
  Copyright (c) 1998 by Fergus Henderson.  All rights reserved.
*************** are GPL'ed, but with an exception that s
*** 28,34 ****
  collector.  (If you are concerned about such things, I recommend you look
  at the notice in config.guess or ltmain.sh.)
  
! This is version 6.3alpha1 of a conservative garbage collector for C and C++.
  
  You might find a more recent version of this at
  
--- 28,34 ----
  collector.  (If you are concerned about such things, I recommend you look
  at the notice in config.guess or ltmain.sh.)
  
! This is version 6.3 of a conservative garbage collector for C and C++.
  
  You might find a more recent version of this at
  
diff -Nrcpad gcc-3.4.3/boehm-gc/doc/README.changes gcc-4.0.0/boehm-gc/doc/README.changes
*** gcc-3.4.3/boehm-gc/doc/README.changes	Mon Jul 28 04:18:22 2003
--- gcc-4.0.0/boehm-gc/doc/README.changes	Fri Aug 13 23:05:32 2004
*************** Since 6.2alpha4:
*** 1836,1842 ****
     libgccpp.
  
  Since 6.2alpha5:
!  - There was extra underscore in the name of GC_save_registers_in_stack
     for NetBSD/SPARC.  (Thanks to Jaap Boender for the patch.)
   - Integrated Brian Alliet's patch for Darwin.  This restructured the
     linuxthreads/pthreads support to separate generic pthreads support
--- 1836,1842 ----
     libgccpp.
  
  Since 6.2alpha5:
!  - There was an extra underscore in the name of GC_save_registers_in_stack
     for NetBSD/SPARC.  (Thanks to Jaap Boender for the patch.)
   - Integrated Brian Alliet's patch for Darwin.  This restructured the
     linuxthreads/pthreads support to separate generic pthreads support
*************** Since 6.2:
*** 1894,1900 ****
--- 1894,2112 ----
     (Thanks to Roger Sayle for the patch.)
   - Applied more AIX threads patches from Scott Ananian.
  
+ Since 6.3alpha1:
+  - Reenabled I_HOLD_LOCK assertion in aix_irix_threads.h.
+  - Put back the WINABI qualifier for GC_CreateThread.  (Thanks to
+    Danny Smith for the patch.  6.3alpha1 had the qualifier in one place
+    but not elsewhere, which was clearly wrong.)
+  - Sometimes explicitly define __private_extern__ before DARWIN dyld.h
+    include.  (Thanks to Andreas Tobker for postting the patch.)
+  - Included signal.h from pthread_support.c.  Removed GC_looping_handler,
+    which was dead code.
+  - GC_find_start was misdeclared by gc_pmark.h if PRINT_BLACK_LIST was
+    defined.  (Thanks to Glauco Masotti for testing and reporting this.)
+    Changed GC_find_start to never just return 0.  According to its
+    comment it doesn't, and it's unclear that's correct.
+  - GC_alloc_large had several largely compensating bugs in the
+    computation of GC_words_wasted.  (It was confused about bytes vs.
+    words in two places.)
+  - Integrated Slava Sysoltev's patch to support more recent versions of
+    the Intel compiler on IA64/Linux.
+  - Changed win32 spinlock initialization to conditionally set a spin count.
+    (Emmanual Stumpf pointed out that enabling this makes a large performance
+    difference on win32 multiprocessors.)  Also cleaned up the win32 spinlock
+    initialization code a bit.
+  - Fixed thread support for HP/UX/IA64.  The register backing store base for
+    the main thread was sometimes not set correctly.  (Thanks to Laurent
+    Morichetti.)
+  - Added -DEMPTY_GETENV_RESULTS flag to work around Wine problem.
+  - Declare GC_stack_alloc and GC_stack_free in solaris_threads.h to
+    avoid 64-bit size mismatches.  (Thanks to Bernie Solomon.)
+  - Fixed GC_generic_push_regs to avoid a potential and very unfortunate
+    tail call optimization.  This could lead to prematurely reclaimed
+    objects on configurations that used the generic routine and the new
+    build infrastructure (which potentially optimizes mach_dep.c).
+    This was a serious bug, but it's unclear whether it has resulted in
+    any real failures.
+  - Fixed CORD_str to deal with signed characters.  (Thanks to Alexandr
+    Petrosian for noticing the problem and supplying the patch.)
+  - Merged a couple of NOSYS/ECOS tests into os_dep.c from gcj.  (Thanks
+    to Anthony Green.)
+  - Partially merged a win32 patch from Ben Hutchings, and substantially
+    revised other parts of win32_threads.c.  It had several problems.
+    Under MinGW with a statically linked library, the main thread was
+    not registered.  Cygwin detached threads leaked thread descriptors.
+    There were several race conditions.  For now, unfortunately the
+    static threads limit remains, though we increased it, and made table
+    traversal cost depend on the actual thread count.
+    There is also still some code duplication with pthread_support.c.
+    (Thread descriptors did become much smaller, since Ben Hutchings
+    removed the thread context from them.)
+  - Integrated a Solaris configure.in patch from Rainer Orth.
+  - Added GC_IGNORE_FB and associated warning to very partially address
+    the issue of the collector treating a mapped frame buffer as part
+    of the root set.  (Thanks to David Peroutka for providing some
+    insight.  More would be helpful.  Is there anything that can be used
+    to at least partially identify such memory segments?)
+    
+ Since 6.3alpha2:
+  - Removed -DSMALL_CONFIG from BCC_MAKEFILE.
+  - Changed macros to test for an ARM processor (Patch from Richard Earnshaw.)
+  - Mostly applied a DJGPP patch from Doug Kaufman.  Especially Makefile.dj
+    had suffered from serious bit rot.
+  - Rewrote GC_apply_to_maps, eliminating an off-by-one subscript error,
+    and a call to alloca (for lcc compatibility).
+  - Changed USE_MUNMAP behavior on posixy platforms to immediately remap
+    the memory with PROT_NONE instead of unmapping it.  The latter risks
+    an intervening mmap grabbing the address space out from underneath us.
+    Updated this code to reflect a cleaner patch from Ulrich Drepper.
+  - Replaced _T with _Tp in new_gc_alloc.h to avoid a MACOS X conflict.
+    (Patch from Andrew Begel.)
+  - Dynamically choose whether or not lock should spin on win32.  (Thanks
+    to Maurizio Vairani for the patch.)  This may be a significant performance
+    improvement for win32.
+  - Fix Makefile.direct to actually include NT_STATIC_THREADS_MAKEFILE
+    in the distribution.  (Again thanks to Maurizio Vairani.)
+  - Maybe_install_looping_handler() was accidentally exported, violating
+    our name space convention.
+  - Made os_dep.c use sigsetjmp and SA_NODEFER for NetBSD.  (Thanks to
+    Christian Limpach.)  (I generalized the patch to use sigsetjmp on all
+    UNIX_LIKE platforms, admittedly a slightly risky move.  But it may avoid
+    similar problems on some other platforms. I also cleaned up the defn
+    of UNIX_LIKE a bit. - Hans)
+  - Integrated Andrew Begel's Darwin threads patch, adjusted according to
+    some of Fergus Hendersons's comments.  (Patch didn't apply cleanly,
+    errors are possible.)
+  - Added another test or two for the Intel 8.0 compiler to avoid
+    confusing it with gcc.  The single-threaded collector should now build
+    with icc, at least on ia64. 
+ 
+ Since 6.3alpha3:
+  - USE_MMAP was broken by confusion in the code dealing with USE_MMAP_ANON.
+    (This was pointed out, and fixes were suggested by several other people.)
+  - Darwin supprt was broken in alpha3 as a result of my misintegration of
+    Andrew Begel's patches.  Fixed with another patch from Andrew Begel.
+  - A new sanity check in pthread_stop_world.c:GC_push_all_stacks() was
+    overly aggressive.  We may collect from an unregistered thread during
+    thread creation.  Fixed by explicitly checking for that case.  (Added
+    GC_in_thread_creation.)
+ 
+ Since 6.3alpha4:
+  - Fix & vs && typo in GC_generic_malloc and
+    GC_generic_malloc_ignore_off_page.  (Propagated from the gcc tree.)
+  - Removed SA_NODEFER hack from NetBSD and Solaris write-protect handler.
+    (According to Christian Limpach, the NetBSD problem is fixed.
+    Presumably so is the Solaris 2.3 problem.)
+  - Removed placement delete from gc_cpp.h for the SGI compiler.
+    (Thanks to Simon Gornall for the patch.)
+  - Changed semantics of the GC_IGNORE_FB environment variable, based 
+    on experimentation by Nicolas Cannasse pointing out that the old
+    interpretation was useless.  We still need help in identifying win32
+    graphics memory mappings.  The current "solution" is a hack.
+  - Removed "MAKEOVERRIDES =" from Makefile.am and thus Makefile.in.
+    It probably made more sense in the gcc context.
+  - Explicitly ensure that NEED_FIND_LIMIT is defined for {Open,Net}BSD/ELF.
+  - Replaced USE_HPUX_TLS macro by USE_COMPILER_TLS, since gcc often
+    supports the same extension on various platforms.
+  - Added some basic (completely untested) defines for win64, in support
+    of future work.
+  - Declared GC_jmp_buf in os_dep.s as JMP_BUF instead of jmp_buf, fixing
+    a memory overwrite bug on Solaris and perhaps other platforms.
+  - Added 0 != __libc_stack_end test to GC_linux_stack_base.  (Thanks to Jakub
+    Jelinek, both for the patch, and for explaining the problem to me.)
+    Otherwise "prelink"ing could cause the collector to fail.
+  - Changed default thread local storage implementation to USE_PTHREAD_SPECIFIC
+    for HP/UX with gcc.  The compiler-based implementation appears to work
+    only with the vendor compiler.
+  - Export GC_debug_header_size and GC_USR_PTR_FROM_BASE from gc_mark.h,
+    making client mark code cleaner and less dependent on GC version.
+  - Export several new procedures and GC_generic_malloc from gc_mark.h
+    to support user-defined kinds.  Use the new procedures to replace existing
+    code in gcj_mlc.c and typd_mlc.c.
+  - Added support for GC_BACKTRACES.
+  - Fixed a remaining problem in CORD_str with signed characters.  (Thanks
+    to Alexandr Petrosian for the patch.)
+  - Removed supposedly redundant, but very buggy, definitions of finalizer
+    macros from javaxfc.h.  Fortunately this file probably has no users.
+    The correct declarations were already in gc.h.
+  - Also need to set GC_in_thread_creation while waiting for GC during
+    thread termination, since it is also possible to collect from an
+    unregistered thread in that case.
+  - Define NO_GETENV for Windows CE, since getenv doesn't appear to exist.
+    + some other minor WinCE fixes. (Thanks to Alain Novak.)
+  - Added GC_register_describe_type_fn.
+  - Arrange for debugging finalizer registration to ignore non-heap
+    registrations, since the regular version of the routine also behaves
+    that way.
+  - GC_gcj_malloc and friends need to check for finalizers waiting to be run.
+    One of the more obscure allocation routines with missing a LOCK() call.
+  - Fixed cvtres invocations in NT_MAKEFILE and NT_STATIC_THREADS_MAKEFILE
+    to work with VS.NET.
+  - Cleaned up GC_INIT calls in test.  Updated gc.man to encourage GC_INIT
+    use in portable code.
+  - Taught the GC to use libunwind if --enable-full-debug is specified on
+    IA64 and libunwind is present.
+  - The USE_MUNMAP code could get confused about the age of a block and
+    prematurely unmap it.  GC_unmap_old had a bug related to wrapping of
+    GC_gc_no.  GC_freehblk and GC_merge_unmapped didn't maintain
+    hb_last_reclaimed reasonably when blocks were merged.  The code was
+    fixed to reflect original intent, but that may not always be an
+    improvement.  See todo list item.
+ 
+ Since 6.3alpha5:
+  - Define USE_GENERIC_PUSH_REGS for NetBSD/M68K.
+  - Fixed the X86_64 PREFETCH macros to correctly handle ia32e (which uses
+    different prefetch instructions from AMD64).  (Thanks to H.J. Lu.)
+  - GC_config_macros.h did not correctly define GC_WIN32_THREADS from
+    GC_THREADS. 
+  - Added simple_example.html.
+  - Merged Andrew Gray's patch to correctly restore signal handlers on
+    FreeBSD.
+  - Merged a patch from Andreas Jaeger to deal with prefetch-related warnings
+    on x86-64.  Added some other casts so that the PREFETCH macros
+    always get a ptr_t argument.  Removed some casts inthe PREFETCH
+    implementations.
+  - At Jesse Jones suggestion: Added a header guard for gc_allocator.h
+    and changed GC_debug_free to clobber contents of deallocated object.
+  - The signal masking code in pthread_stop_world.c contained some errors.
+    In particular SIGSEGV was masked in the handler, in spite of the fact that
+    it wrote to the heap.  This could lead to an uncaught SIGSEGV, which
+    apparently became much more likely in Linux 2.6.  Also fixed some
+    typos, and reduced code duplication in the same area.
+  - Remove ltconfig, clean up configure messages for DGUX (thanks to
+    Adrian Bunk for the patches).
+  - Integrated NetBSD/OpenBSD patches from Marc Recht and Matthias Drochner.
+ 
+ Since gc6.3alpha6:
+  - Compile test_cpp.cc with CXXCOMPILE instead of COMPILE.
+  - Very large allocations could cause a collector hang.  Correct
+    calculation of GC_collect_at_heapsize.
+  - GC_print_hblkfreelist printed some bogus results if USE_MUNMAP
+    was defined.
+  - The generic GC_THREADS macro didn't work correctly on Solaris,
+    since the implementation failed to include gc_config_macros.h
+    before deciding whether or not to compile the rest of the file.
+  - Threadlibs.c failed to expand the generic GC_THREADS macro.
+  - Correct MacOSX thread stop code. (Thanks to Dick Porter.)
+  - SMALL_OBJ definition was off by one.  This could cause crashes
+    at startup.  (Thanks to Zoltan Varga for narrowing this down to
+    a trivial test case.)
+  - Integrate Paolo Molara's patch to deal with a race in the Darwin
+    thread stopping code.
+  - Changed X86_64 implementation to use SA_SIGINFO in the MPROTECT_VDB
+    implementation.  The old approach appears to have been broken by
+    recent kernels.
+  - Add GC_ATTR_UNUSED to eliminate a warning in gc_allocator.h.  (Thanks
+    to Andrew Begel.)
+  - Fix GC_task_self declaration in os_dep.c.  (Thanks to Andrew Pinski.)
+  - Increase INITIAL_BUF_SZ in os_dep.c for Solaris /proc reads.
+   
  To do:
+  - The USE_MUNMAP code should really use a separate data structure
+    indexed by physical page to keep track of time since last use of
+    a page.  Using hblk headers means we lose track of ages when
+    blocks are merged, and we can't unmap pages that have been allocated and
+    dropped by the blacklisting code.  I suspect both of these matter.
   - A dynamic libgc.so references dlopen unconditionally, but doesn't link
     against libdl.
   - GC_proc_fd for Solaris is not correctly updated in response to a
diff -Nrcpad gcc-3.4.3/boehm-gc/doc/README.darwin gcc-4.0.0/boehm-gc/doc/README.darwin
*** gcc-3.4.3/boehm-gc/doc/README.darwin	Mon Jul 28 03:46:20 2003
--- gcc-4.0.0/boehm-gc/doc/README.darwin	Fri Aug 13 23:05:32 2004
***************
*** 1,5 ****
! Darwin/MacOSX Support - July 22, 2003
! ====================================
  
  Important Usage Notes
  =====================
--- 1,5 ----
! Darwin/MacOSX Support - December 16, 2003
! =========================================
  
  Important Usage Notes
  =====================
*************** run and perhaps called GC_malloc(), crea
*** 15,21 ****
  for each library to call GC_init():
  
  #include <gc/gc.h>
! void my_library_init() { GC_init(); }
  
  Compile this code into a my_library_init.o, and link it into your
  dylib. When you link the dylib, pass the -init argument with
--- 15,21 ----
  for each library to call GC_init():
  
  #include <gc/gc.h>
! extern "C" void my_library_init() { GC_init(); }
  
  Compile this code into a my_library_init.o, and link it into your
  dylib. When you link the dylib, pass the -init argument with
*************** work reliably with workarounds for a few
*** 34,39 ****
--- 34,45 ----
  these workaround may not work correctly in all cases. There may also
  be additional problems that I have not found. 
  
+ Thread-local GC allocation will not work with threads that are not
+ created using the GC-provided override of pthread_create(). Threads
+ created without the GC-provided pthread_create() do not have the
+ necessary data structures in the GC to store this data. 
+ 
+ 
  Implementation Information
  ==========================
  Darwin/MacOSX support is nearly complete. Thread support is reliable on 
*************** Darwin versions (MacOSX 10.1). Shared li
*** 42,52 ****
  added and the gc can be run from a shared library. There is currently only
  support for Darwin/PPC although adding x86 support should be trivial.
  
! Thread support is implemented in terms of mach thread_suspend and 
  thread_resume calls. These provide a very clean interface to thread
  suspension. This implementation doesn't rely on pthread_kill so the
! code works on Darwin < 6.0 (MacOSX 10.1). All the code to stop the
! world is located in darwin_stop_world.c.
  
  The original incremental collector support unfortunatelly no longer works
  on recent Darwin versions. It also relied on some undocumented kernel
--- 48,74 ----
  added and the gc can be run from a shared library. There is currently only
  support for Darwin/PPC although adding x86 support should be trivial.
  
! Thread support is implemented in terms of mach thread_suspend and
  thread_resume calls. These provide a very clean interface to thread
  suspension. This implementation doesn't rely on pthread_kill so the
! code works on Darwin < 6.0 (MacOSX 10.1). All the code to stop and
! start the world is located in darwin_stop_world.c.
! 
! Since not all uses of the GC enable clients to override pthread_create()
! before threads have been created, the code for stopping the world has
! been rewritten to look for threads using Mach kernel calls. Each
! thread identified in this way is suspended and resumed as above. In
! addition, since Mach kernel threads do not contain pointers to their
! stacks, a stack-walking function has been written to find the stack
! limits. Given an initial stack pointer (for the current thread, a
! pointer to a stack-allocated local variable will do; for a non-active
! thread, we grab the value of register 1 (on PowerPC)), it
! will walk the PPC Mach-O-ABI compliant stack chain until it reaches the
! top of the stack. This appears to work correctly for GCC-compiled C,
! C++, Objective-C, and Objective-C++ code, as well as for Java
! programs that use JNI. If you run code that does not follow the stack
! layout or stack pointer conventions laid out in the PPC Mach-O ABI,
! then this will likely crash the garbage collector. 
  
  The original incremental collector support unfortunatelly no longer works
  on recent Darwin versions. It also relied on some undocumented kernel
diff -Nrcpad gcc-3.4.3/boehm-gc/doc/README.environment gcc-4.0.0/boehm-gc/doc/README.environment
*** gcc-3.4.3/boehm-gc/doc/README.environment	Mon Jul 28 04:18:22 2003
--- gcc-4.0.0/boehm-gc/doc/README.environment	Fri Aug 13 23:05:32 2004
***************
*** 1,6 ****
  The garbage collector looks at a number of environment variables which are
  then used to affect its operation.  These are examined only on Un*x-like
! platforms.
  
  GC_INITIAL_HEAP_SIZE=<bytes> -	Initial heap size in bytes.  May speed up
  				process start-up.
--- 1,6 ----
  The garbage collector looks at a number of environment variables which are
  then used to affect its operation.  These are examined only on Un*x-like
! platforms and win32.
  
  GC_INITIAL_HEAP_SIZE=<bytes> -	Initial heap size in bytes.  May speed up
  				process start-up.
*************** GC_DUMP_REGULARLY - Generate a GC debugg
*** 26,31 ****
--- 26,39 ----
  		    if you have a bug to report, but please include only the
  		    last complete dump.
  
+ GC_BACKTRACES=<n> - Generate n random backtraces (for heap profiling) after
+ 		    each GC.  Collector must have been built with
+ 		    KEEP_BACK_PTRS.  This won't generate useful output unless
+ 		    most objects in the heap were allocated through debug
+ 		    allocators.  This is intended to be only a statistical
+ 		    sample;  individual traces may be erroneous due to
+ 		    concurrent heap mutation.
+ 
  GC_PRINT_ADDRESS_MAP - Linux only.  Dump /proc/self/maps, i.e. various address
  		       maps for the process, to stderr on every GC.  Useful for
  		       mapping root addresses to source for deciphering leak
*************** GC_RETRY_SIGNALS, GC_NO_RETRY_SIGNALS - 
*** 86,91 ****
--- 94,121 ----
  		     was turned into a runtime flag to enable last-minute
  		     work-arounds.
  
+ GC_IGNORE_FB[=<n>] -  (Win32 only.) Try to avoid treating a mapped
+ 		frame buffer as part of the root set.  Certain (higher end?)
+ 		graphics cards seems to result in the graphics memory mapped
+ 		into the user address space as writable memory.
+ 		Unfortunately, there seems to be no systematic way to
+ 		identify such memory.  Setting the environment variable to n
+ 		causes the collector to ignore mappings longer than n MB.
+ 		The default value of n is currently 15.  (This should cover
+ 		a 16 MB graphics card, since the mapping appears to be slightly
+ 		shorter than all of graphics memory.  It will fail if a dll
+ 		writes pointers to collectable objects into a data segment
+ 		whose length is >= 15MB.  Empirically that's rare, but
+ 		certainly possible.)  WARNING: Security sensitive applications
+ 		should probably disable this feature by setting
+ 		GC_disallow_ignore_fb, or by building with -DNO_GETENV,
+ 		since small values could force collection of reachable
+ 		objects, which is conceivably a	(difficult to exploit)
+ 		security hole.  GC_IGNORE_FB values less than 3 MB
+ 		are never honored, eliminating this risk for most,
+ 		but not all, applications.  This feature is likely to disappear
+ 		if/when we find a less disgusting "solution".
+ 
  The following turn on runtime flags that are also program settable.  Checked
  only during initialization.  We expect that they will usually be set through
  other means, but this may help with debugging and testing:
diff -Nrcpad gcc-3.4.3/boehm-gc/doc/README.macros gcc-4.0.0/boehm-gc/doc/README.macros
*** gcc-3.4.3/boehm-gc/doc/README.macros	Mon Jul 28 04:18:22 2003
--- gcc-4.0.0/boehm-gc/doc/README.macros	Fri Aug 13 23:05:32 2004
*************** SRC_M3		Set if the collector is being bu
*** 85,89 ****
--- 85,94 ----
  		It's there primarily incase someone wants to port to a similar
  		system.
  
+ USE_COMPILER_TLS  Assume the existence of __thread-style thread-local
+ 		storage.  Set automatically for thread-local allocation with
+ 		the HP/UX vendor compiler.  Usable with gcc on sufficiently
+ 		up-to-date ELF platforms.
+ 
  
  
diff -Nrcpad gcc-3.4.3/boehm-gc/doc/README.win32 gcc-4.0.0/boehm-gc/doc/README.win32
*** gcc-3.4.3/boehm-gc/doc/README.win32	Mon Jul 28 04:18:22 2003
--- gcc-4.0.0/boehm-gc/doc/README.win32	Fri Aug 13 23:05:32 2004
***************
*** 1,34 ****
! The collector has at various times been compiled under Windows 95 & NT,
! with the original Microsoft SDK, with Visual C++ 2.0, 4.0, and 6, with
! the GNU win32 environment, with Borland 4.5,  with Watcom C, and recently
  with the Digital Mars compiler.  It is likely that some of these have been
  broken in the meantime.  Patches are appreciated.
  
! It runs under both win32s and win32, but with different semantics.
! Under win32, all writable pages outside of the heaps and stack are
! scanned for roots.  Thus the collector sees pointers in DLL data
! segments.  Under win32s, only the main data segment is scanned.
! (The main data segment should always be scanned.  Under some
! versions of win32s, other regions may also be scanned.)
! Thus all accessible objects should be accessible from local variables
! or variables in the main data segment.  Alternatively, other data
! segments (e.g. in DLLs) may be registered with the collector by
! calling GC_init() and then GC_register_root_section(a), where
! a is the address of some variable inside the data segment.  (Duplicate
! registrations are ignored, but not terribly quickly.)
! 
! (There are two reasons for this.  We didn't want to see many 16:16
! pointers.  And the VirtualQuery call has different semantics under
! the two systems, and under different versions of win32s.)
! 
! Win32 applications compiled with some flavor of gcc currently behave
! like win32s applications, in that dynamic library data segments are
! not scanned.  (Gcc does not directly support Microsoft's "structured
! exception handling".  It turns out that use of this feature is
! unavoidable if you scan arbitrary memory segments obtained from
! VirtualQuery.)
! 
! The collector test program "gctest" is linked as a GUI application,
  but does not open any windows.  Its output appears in the file
  "gc.log".  It may be started from the file manager.  The hour glass
  cursor may appear as long as it's running.  If it is started from the
--- 1,11 ----
! The collector has at various times been compiled under Windows 95 & later, NT,
! and XP, with the original Microsoft SDK, with Visual C++ 2.0, 4.0, and 6, with
! the GNU win32 tools, with Borland 4.5,  with Watcom C, and recently
  with the Digital Mars compiler.  It is likely that some of these have been
  broken in the meantime.  Patches are appreciated.
  
! For historical reasons,
! the collector test program "gctest" is linked as a GUI application,
  but does not open any windows.  Its output appears in the file
  "gc.log".  It may be started from the file manager.  The hour glass
  cursor may appear as long as it's running.  If it is started from the
*************** This is currently incompatible with -DUS
*** 60,70 ****
--- 37,59 ----
  Clark for tracking this down.  There's some chance this may be fixed
  in 6.1alpha4, since we now separate heap sections with an unused page.)
  
+ Microsoft Tools
+ ---------------
  For Microsoft development tools, rename NT_MAKEFILE as
  MAKEFILE.  (Make sure that the CPU environment variable is defined
  to be i386.)  In order to use the gc_cpp.h C++ interface, all
  client code should include gc_cpp.h.
  
+ For historical reasons,
+ the collector test program "gctest" is linked as a GUI application,
+ but does not open any windows.  Its output appears in the file
+ "gc.log".  It may be started from the file manager.  The hour glass
+ cursor may appear as long as it's running.  If it is started from the
+ command line, it will usually run in the background.  Wait a few
+ minutes (a few seconds on a modern machine) before you check the output.
+ You should see either a failure indication or a "Collector appears to
+ work" message.
+ 
  If you would prefer a VC++.NET project file, ask boehm@acm.org.  One has
  been contributed, but it seems to contain some absolute paths etc., so
  it can presumably only be a starting point, and is not in the standard
*************** Clients may need to define GC_NOT_DLL be
*** 75,87 ****
  collector was built as a static library (as it normally is in the
  absence of thread support).
  
  For GNU-win32, use the regular makefile, possibly after uncommenting
  the line "include Makefile.DLLs".  The latter should be necessary only
! if you want to package the collector as a DLL.  The GNU-win32 port is
  believed to work only for b18, not b19, probably due to linker changes
  in b19.  This is probably fixable with a different definition of
  DATASTART and DATAEND in gcconfig.h.
  
  For Borland tools, use BCC_MAKEFILE.  Note that
  Borland's compiler defaults to 1 byte alignment in structures (-a1),
  whereas Visual C++ appears to default to 8 byte alignment (/Zp8).
--- 64,85 ----
  collector was built as a static library (as it normally is in the
  absence of thread support).
  
+ GNU Tools
+ ---------
  For GNU-win32, use the regular makefile, possibly after uncommenting
  the line "include Makefile.DLLs".  The latter should be necessary only
! if you want to package the collector as a DLL.
! [Is the following sentence obsolete? -HB] The GNU-win32 port is
  believed to work only for b18, not b19, probably due to linker changes
  in b19.  This is probably fixable with a different definition of
  DATASTART and DATAEND in gcconfig.h.
  
+ The collector should also be buildable under Cygwin with either the
+ old standard Makefile, or with the "configure;make" machinery.
+ 
+ Borland Tools
+ -------------
+ [Rarely tested.]
  For Borland tools, use BCC_MAKEFILE.  Note that
  Borland's compiler defaults to 1 byte alignment in structures (-a1),
  whereas Visual C++ appears to default to 8 byte alignment (/Zp8).
*************** version, change the line near the top.  
*** 97,102 ****
--- 95,102 ----
  require the assembler.  If you do have the assembler, I recommend
  removing the -DUSE_GENERIC.
  
+ Incremental Collection
+ ----------------------
  There is some support for incremental collection.  This is
  currently pretty simple-minded.  Pages are protected.  Protection
  faults are caught by a handler installed at the bottom of the handler
*************** is called.)
*** 112,118 ****
  
  Note that incremental collection is disabled with -DSMALL_CONFIG.
  
! James Clark has contributed the necessary code to support win32 threads.
  Use NT_THREADS_MAKEFILE (a.k.a gc.mak) instead of NT_MAKEFILE
  to build this version.  Note that this requires some files whose names
  are more than 8 + 3 characters long.  Thus you should unpack the tar file
--- 112,122 ----
  
  Note that incremental collection is disabled with -DSMALL_CONFIG.
  
! Threads
! -------
! 
! James Clark has contributed the necessary code to support win32 threads
! with the collector in a DLL.
  Use NT_THREADS_MAKEFILE (a.k.a gc.mak) instead of NT_MAKEFILE
  to build this version.  Note that this requires some files whose names
  are more than 8 + 3 characters long.  Thus you should unpack the tar file
*************** This version relies on the collector res
*** 128,139 ****
  
  This version currently supports incremental collection only if it is
  enabled before any additional threads are created.
- Version 4.13 attempts to fix some of the earlier problems, but there
- may be other issues.  If you need solid support for win32 threads, you
- might check with Geodesic Systems.  Their collector must be licensed,
- but they have invested far more time in win32-specific issues.
  
! Hans
  
  Ivan V. Demakov's README for the Watcom port:
  
--- 132,162 ----
  
  This version currently supports incremental collection only if it is
  enabled before any additional threads are created.
  
! Since 6.3alpha2, threads are also better supported in static library builds
! with Microsoft tools (use NT_STATIC_THREADS_MAKEFILE) and with the GNU
! tools.  In all cases,the collector must be built with GC_WIN32_THREADS
! defined, even if the Cygwin pthreads interface is used.
! (NT_STATIC_THREADS_MAKEFILE does this implicitly.  Under Cygwin,
! ./configure --enable-threads=posix defines GC_WIN32_THREADS.)  Threads must be
! created with GC_CreateThread.  This can be accomplished by
! including gc.h and then calling CreateThread, which is redefined
! by gc.h.
! 
! For the statically linked versions, it is required that GC_init()
! be called before other GC calls, since there seems to be no implicit way
! to initialize the allocation lock.  The easiest way to ensure this in
! portable code is to call GC_INIT() from the main executable (not
! a dynamic library) before calling any other GC_ routines.
! 
! We strongly advise against using the TerminateThread() win32 API call,
! especially with the garbage collector.  Any use is likely to provoke a
! crash in the GC, since it makes it impossible for the collector to
! correctly track threads.
! 
! 
! Watcom compiler
! ---------------
  
  Ivan V. Demakov's README for the Watcom port:
  
*************** important, otherwise resulting programs 
*** 167,170 ****
--- 190,215 ----
  
  Ivan Demakov (email: ivan@tgrad.nsk.su)
  
+ Win32S
+ ------
+ 
+ [The following is probably obsolete.  The win32s support is still in the
+ collector, but I doubt anyone cares, or has tested it recently.]
+ 
+ The collector runs under both win32s and win32, but with different semantics.
+ Under win32, all writable pages outside of the heaps and stack are
+ scanned for roots.  Thus the collector sees pointers in DLL data
+ segments.  Under win32s, only the main data segment is scanned.
+ (The main data segment should always be scanned.  Under some
+ versions of win32s, other regions may also be scanned.)
+ Thus all accessible objects should be accessible from local variables
+ or variables in the main data segment.  Alternatively, other data
+ segments (e.g. in DLLs) may be registered with the collector by
+ calling GC_init() and then GC_register_root_section(a), where
+ a is the address of some variable inside the data segment.  (Duplicate
+ registrations are ignored, but not terribly quickly.)
+ 
+ (There are two reasons for this.  We didn't want to see many 16:16
+ pointers.  And the VirtualQuery call has different semantics under
+ the two systems, and under different versions of win32s.)
  
diff -Nrcpad gcc-3.4.3/boehm-gc/doc/debugging.html gcc-4.0.0/boehm-gc/doc/debugging.html
*** gcc-3.4.3/boehm-gc/doc/debugging.html	Mon Jul 28 04:18:22 2003
--- gcc-4.0.0/boehm-gc/doc/debugging.html	Fri Aug 13 23:05:32 2004
*************** The garbage collector generates warning 
*** 47,52 ****
--- 47,56 ----
  <PRE>
  Needed to allocate blacklisted block at 0x...
  </pre>
+ or
+ <PRE>
+ Repeated allocation of very large block ...
+ </pre>
  when it needs to allocate a block at a location that it knows to be
  referenced by a false pointer.  These false pointers can be either permanent
  (<I>e.g.</i> a static integer variable that never changes) or temporary.
*************** is commonly caused by data structures th
*** 123,129 ****
  but were not cleared, or by caches growing without bounds.
  <LI> Pointer misidentification.  The garbage collector is interpreting
  integers or other data as pointers and retaining the "referenced"
! objects.
  <LI> Heap fragmentation.  This should never result in unbounded growth,
  but it may account for larger heaps.  This is most commonly caused
  by allocation of large objects.  On some platforms it can be reduced
--- 127,134 ----
  but were not cleared, or by caches growing without bounds.
  <LI> Pointer misidentification.  The garbage collector is interpreting
  integers or other data as pointers and retaining the "referenced"
! objects.  A common symptom is that GC_dump() shows much of the heap
! as black-listed.
  <LI> Heap fragmentation.  This should never result in unbounded growth,
  but it may account for larger heaps.  This is most commonly caused
  by allocation of large objects.  On some platforms it can be reduced
*************** primitives is <TT>gc_typed.h</tt>, or se
*** 180,185 ****
--- 185,196 ----
  <LI> Consider using <TT>GC_malloc_ignore_off_page()</tt>
  to allocate large objects.  (See <TT>gc.h</tt> and above for details.
  Large means &gt; 100K in most environments.)
+ <LI> If your heap size is larger than 100MB or so, build the collector with
+ -DLARGE_CONFIG.  This allows the collector to keep more precise black-list
+ information.
+ <LI> If you are using heaps close to, or larger than, a gigabyte on a 32-bit
+ machine, you may want to consider moving to a platform with 64-bit pointers.
+ This is very likely to resolve any false pointer issues.
  </ol>
  <H2>Prematurely Reclaimed Objects</h2>
  The usual symptom of this is a segmentation fault, or an obviously overwritten
diff -Nrcpad gcc-3.4.3/boehm-gc/doc/gc.man gcc-4.0.0/boehm-gc/doc/gc.man
*** gcc-3.4.3/boehm-gc/doc/gc.man	Fri Aug 17 18:30:49 2001
--- gcc-4.0.0/boehm-gc/doc/gc.man	Fri Aug 13 23:05:32 2004
***************
*** 1,12 ****
! .TH GC_MALLOC 1L "12 February 1996"
  .SH NAME
  GC_malloc, GC_malloc_atomic, GC_free, GC_realloc, GC_enable_incremental, GC_register_finalizer, GC_malloc_ignore_off_page, GC_malloc_atomic_ignore_off_page, GC_set_warn_proc \- Garbage collecting malloc replacement
  .SH SYNOPSIS
  #include "gc.h"
  .br
! # define malloc(n) GC_malloc(n)
  .br
! ... malloc(...) ...
  .br
  .sp
  cc ... gc.a
--- 1,14 ----
! .TH GC_MALLOC 1L "2 October 2003"
  .SH NAME
  GC_malloc, GC_malloc_atomic, GC_free, GC_realloc, GC_enable_incremental, GC_register_finalizer, GC_malloc_ignore_off_page, GC_malloc_atomic_ignore_off_page, GC_set_warn_proc \- Garbage collecting malloc replacement
  .SH SYNOPSIS
  #include "gc.h"
  .br
! void * GC_malloc(size_t size);
  .br
! void GC_free(void *ptr);
! .br
! void * GC_realloc(void *ptr, size_t size);
  .br
  .sp
  cc ... gc.a
*************** will attempt to reclaim inaccessible spa
*** 23,28 ****
--- 25,35 ----
  GC_malloc
  or friends.
  .LP
+ In most cases it is preferable to call the macros GC_MALLOC, GC_FREE, etc.
+ instead of calling GC_malloc and friends directly.  This allows debugging
+ versions of the routines to be substituted by defining GC_DEBUG before
+ including gc.h.
+ .LP
  See the documentation in the include file gc_cpp.h for an alternate, C++ specific interface to the garbage collector.
  .LP
  Unlike the standard implementations of malloc,
*************** It is also possible to use the collector
*** 56,64 ****
  .LP
  The collector may, on rare occasion produce warning messages.  On UNIX machines these appear on stderr.  Warning messages can be filtered, redirected, or ignored with
  .I
! GC_set_warn_proc.
  This is recommended for production code.  See gc.h for details.
  .LP
  Debugging versions of many of the above routines are provided as macros.  Their names are identical to the above, but consist of all capital letters.  If GC_DEBUG is defined before gc.h is included, these routines do additional checking, and allow the leak detecting version of the collector to produce slightly more useful output.  Without GC_DEBUG defined, they behave exactly like the lower-case versions.
  .LP
  On some machines, collection will be performed incrementally after a call to
--- 63,78 ----
  .LP
  The collector may, on rare occasion produce warning messages.  On UNIX machines these appear on stderr.  Warning messages can be filtered, redirected, or ignored with
  .I
! GC_set_warn_proc
  This is recommended for production code.  See gc.h for details.
  .LP
+ Fully portable code should call
+ .I
+ GC_INIT
+ from the main program before making any other GC calls.
+ On most platforms this does nothing and the collector is initialized on first use.
+ On a few platforms explicit initialization is necessary.  And it can never hurt. 
+ .LP
  Debugging versions of many of the above routines are provided as macros.  Their names are identical to the above, but consist of all capital letters.  If GC_DEBUG is defined before gc.h is included, these routines do additional checking, and allow the leak detecting version of the collector to produce slightly more useful output.  Without GC_DEBUG defined, they behave exactly like the lower-case versions.
  .LP
  On some machines, collection will be performed incrementally after a call to
*************** Other facilities not discussed here incl
*** 71,80 ****
  .SH "SEE ALSO"
  The README and gc.h files in the distribution.  More detailed definitions of the functions exported by the collector are given there.  (The above list is not complete.)
  .LP
  Boehm, H., and M. Weiser, "Garbage Collection in an Uncooperative Environment",
  \fISoftware Practice & Experience\fP, September 1988, pp. 807-820.
  .LP
  The malloc(3) man page.
  .LP
  .SH AUTHOR
! Hans-J. Boehm (boehm@parc.xerox.com).  Some of the code was written by others, most notably Alan Demers.
--- 85,97 ----
  .SH "SEE ALSO"
  The README and gc.h files in the distribution.  More detailed definitions of the functions exported by the collector are given there.  (The above list is not complete.)
  .LP
+ The web site at http://www.hpl.hp.com/personal/Hans_Boehm/gc .
+ .LP
  Boehm, H., and M. Weiser, "Garbage Collection in an Uncooperative Environment",
  \fISoftware Practice & Experience\fP, September 1988, pp. 807-820.
  .LP
  The malloc(3) man page.
  .LP
  .SH AUTHOR
! Hans-J. Boehm (Hans.Boehm@hp.com).
! Some of the code was written by others, most notably Alan Demers.
diff -Nrcpad gcc-3.4.3/boehm-gc/doc/gcdescr.html gcc-4.0.0/boehm-gc/doc/gcdescr.html
*** gcc-3.4.3/boehm-gc/doc/gcdescr.html	Mon Jul 28 04:18:22 2003
--- gcc-4.0.0/boehm-gc/doc/gcdescr.html	Fri Aug 13 23:05:32 2004
***************
*** 4,10 ****
      <AUTHOR> Hans-J. Boehm, HP Labs (Much of this was written at SGI)</author>
  </HEAD>
  <BODY>
! <H1> <I>This is under construction</i> </h1>
  <H1> Conservative GC Algorithmic Overview </h1>
  <P>
  This is a description of the algorithms and data structures used in our
--- 4,10 ----
      <AUTHOR> Hans-J. Boehm, HP Labs (Much of this was written at SGI)</author>
  </HEAD>
  <BODY>
! <H1> <I>This is under construction, and may always be.</i> </h1>
  <H1> Conservative GC Algorithmic Overview </h1>
  <P>
  This is a description of the algorithms and data structures used in our
*************** We assume the default finalization model
*** 27,46 ****
  is very localized.
  <H2> Introduction </h2>
  The garbage collector uses a modified mark-sweep algorithm.  Conceptually
! it operates roughly in four phases:
  
  <OL>
  
  <LI>
! <I>Preparation</i> Clear all mark bits, indicating that all objects
  are potentially unreachable.
  
  <LI>
  <I>Mark phase</i> Marks all objects that can be reachable via chains of
! pointers from variables.  Normally the collector has no real information
  about the location of pointer variables in the heap, so it
  views all static data areas, stacks and registers as potentially containing
! containing pointers.  Any bit patterns that represent addresses inside
  heap objects managed by the collector are viewed as pointers.
  Unless the client program has made heap object layout information
  available to the collector, any heap objects found to be reachable from
--- 27,48 ----
  is very localized.
  <H2> Introduction </h2>
  The garbage collector uses a modified mark-sweep algorithm.  Conceptually
! it operates roughly in four phases, which are performed occasionally
! as part of a memory allocation:
  
  <OL>
  
  <LI>
! <I>Preparation</i> Each object has an associated mark bit.
! Clear all mark bits, indicating that all objects
  are potentially unreachable.
  
  <LI>
  <I>Mark phase</i> Marks all objects that can be reachable via chains of
! pointers from variables.  Often the collector has no real information
  about the location of pointer variables in the heap, so it
  views all static data areas, stacks and registers as potentially containing
! pointers.  Any bit patterns that represent addresses inside
  heap objects managed by the collector are viewed as pointers.
  Unless the client program has made heap object layout information
  available to the collector, any heap objects found to be reachable from
*************** others are not.  Some may have per-objec
*** 87,94 ****
  determine pointer locations.  Or a specific kind may correspond
  to one specific object layout.  Two built-in kinds are uncollectable.
  One (<TT>STUBBORN</tt>) is immutable without special precautions.
! In spite of that, it is very likely that most applications currently
  use at most two kinds: <TT>NORMAL</tt> and <TT>PTRFREE</tt> objects.
  <P>
  The collector uses a two level allocator.  A large block is defined to
  be one larger than half of <TT>HBLKSIZE</tt>, which is a power of 2,
--- 89,100 ----
  determine pointer locations.  Or a specific kind may correspond
  to one specific object layout.  Two built-in kinds are uncollectable.
  One (<TT>STUBBORN</tt>) is immutable without special precautions.
! In spite of that, it is very likely that most C clients of the
! collector currently
  use at most two kinds: <TT>NORMAL</tt> and <TT>PTRFREE</tt> objects.
+ The <A HREF="http://gcc.gnu.org/java">gcj</a> runtime also makes
+ heavy use of a kind (allocated with GC_gcj_malloc) that stores
+ type information at a known offset in method tables.
  <P>
  The collector uses a two level allocator.  A large block is defined to
  be one larger than half of <TT>HBLKSIZE</tt>, which is a power of 2,
*************** for a single pool of physical memory.
*** 175,180 ****
--- 181,212 ----
  
  <H2>Mark phase</h2>
  
+ At each collection, the collector marks all objects that are
+ possibly reachable from pointer variables.  Since it cannot generally
+ tell where pointer variables are located, it scans the following
+ <I>root segments</i> for pointers:
+ <UL>
+ <LI>The registers.  Depending on the architecture, this may be done using
+ assembly code, or by calling a <TT>setjmp</tt>-like function which saves
+ register contents on the stack.
+ <LI>The stack(s).  In the case of a single-threaded application,
+ on most platforms this
+ is done by scanning the memory between (an approximation of) the current
+ stack pointer and <TT>GC_stackbottom</tt>.  (For Itanium, the register stack
+ scanned separately.)  The <TT>GC_stackbottom</tt> variable is set in
+ a highly platform-specific way depending on the appropriate configuration
+ information in <TT>gcconfig.h</tt>.  Note that the currently active
+ stack needs to be scanned carefully, since callee-save registers of
+ client code may appear inside collector stack frames, which may
+ change during the mark process.  This is addressed by scanning
+ some sections of the stack "eagerly", effectively capturing a snapshot
+ at one point in time.
+ <LI>Static data region(s).  In the simplest case, this is the region
+ between <TT>DATASTART</tt> and <TT>DATAEND</tt>, as defined in
+ <TT>gcconfig.h</tt>.  However, in most cases, this will also involve
+ static data regions associated with dynamic libraries.  These are
+ identified by the mostly platform-specific code in <TT>dyn_load.c</tt>.
+ </ul> 
  The marker maintains an explicit stack of memory regions that are known
  to be accessible, but that have not yet been searched for contained pointers.
  Each stack entry contains the starting address of the block to be scanned,
*************** as well as a descriptor of the block.  I
*** 182,189 ****
  available for the block, then the descriptor is simply a length.
  (For other possibilities, see <TT>gc_mark.h</tt>.)
  <P>
! At the beginning of the mark phase, all root segments are pushed on the
! stack by <TT>GC_push_roots</tt>.  If <TT>ALL_INTERIOR_PTRS</tt> is not
  defined, then stack roots require special treatment.  In this case, the
  normal marking code ignores interior pointers, but <TT>GC_push_all_stack</tt>
  explicitly checks for interior pointers and pushes descriptors for target
--- 214,224 ----
  available for the block, then the descriptor is simply a length.
  (For other possibilities, see <TT>gc_mark.h</tt>.)
  <P>
! At the beginning of the mark phase, all root segments
! (as described above) are pushed on the
! stack by <TT>GC_push_roots</tt>.  (Registers and eagerly processed
! stack sections are processed by pushing the referenced objects instead
! of the stack section itself.)  If <TT>ALL_INTERIOR_PTRS</tt> is not
  defined, then stack roots require special treatment.  In this case, the
  normal marking code ignores interior pointers, but <TT>GC_push_all_stack</tt>
  explicitly checks for interior pointers and pushes descriptors for target
*************** if there is low demand for small pointer
*** 479,486 ****
  We support several different threading models.  Unfortunately Pthreads,
  the only reasonably well standardized thread model, supports too narrow
  an interface for conservative garbage collection.  There appears to be
! no completely portable way to allow the collector to coexist with various Pthreads
! implementations.  Hence we currently support only a few of the more
  common Pthreads implementations.
  <P>
  In particular, it is very difficult for the collector to stop all other
--- 514,522 ----
  We support several different threading models.  Unfortunately Pthreads,
  the only reasonably well standardized thread model, supports too narrow
  an interface for conservative garbage collection.  There appears to be
! no completely portable way to allow the collector
! to coexist with various Pthreads
! implementations.  Hence we currently support only the more
  common Pthreads implementations.
  <P>
  In particular, it is very difficult for the collector to stop all other
*************** accomplished with <TT># define</tt>'s in
*** 510,515 ****
--- 546,555 ----
  (really <TT>gc_pthread_redirects.h</tt>), or optionally
  by using ld's function call wrapping mechanism under Linux.
  <P>
+ Recent versions of the collector support several facilites to enhance
+ the processor-scalability and thread performance of the collector.
+ These are discussed in more detail <A HREF="scale.html">here</a>.
+ <P>
  Comments are appreciated.  Please send mail to
  <A HREF="mailto:boehm@acm.org"><TT>boehm@acm.org</tt></a> or
  <A HREF="mailto:Hans.Boehm@hp.com"><TT>Hans.Boehm@hp.com</tt></a>
diff -Nrcpad gcc-3.4.3/boehm-gc/doc/gcinterface.html gcc-4.0.0/boehm-gc/doc/gcinterface.html
*** gcc-3.4.3/boehm-gc/doc/gcinterface.html	Mon Jul 28 03:46:20 2003
--- gcc-4.0.0/boehm-gc/doc/gcinterface.html	Fri Aug 13 23:05:32 2004
***************
*** 5,35 ****
  <BODY>
  <H1>C Interface</h1>
  On many platforms, a single-threaded garbage collector library can be built
! to act as a plug-in malloc replacement.  (Build with -DREDIRECT_MALLOC=GC_malloc
! -DIGNORE_FREE.)  This is often the best way to deal with third-party libraries
! which leak or prematurely free objects.  -DREDIRECT_MALLOC is intended
  primarily as an easy way to adapt old code, not for new development.
  <P>
  New code should use the interface discussed below.
  <P>
  Code must be linked against the GC library.  On most UNIX platforms,
! this will be gc.a.
  <P>
  The following describes the standard C interface to the garbage collector.
  It is not a complete definition of the interface.  It describes only the
  most commonly used functionality, approximately in decreasing order of
! frequency of use.  The description assumes an ANSI C compiler.
  The full interface is described in
  <A HREF="http://hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gch.txt">gc.h</a>
  or <TT>gc.h</tt> in the distribution.
  <P>
! Clients should include gc.h.
  <P>
  In the case of multithreaded code,
! gc.h should be included after the threads header file, and
! after defining the appropriate GC_XXXX_THREADS macro.
! (For 6.2alpha4 and later, simply defining GC_THREADS should suffice.)
! Gc.h must be included
  in files that use either GC or threads primitives, since threads primitives
  will be redefined to cooperate with the GC on many platforms.
  <DL>
--- 5,37 ----
  <BODY>
  <H1>C Interface</h1>
  On many platforms, a single-threaded garbage collector library can be built
! to act as a plug-in malloc replacement.
! (Build with <TT>-DREDIRECT_MALLOC=GC_malloc -DIGNORE_FREE</tt>.)
! This is often the best way to deal with third-party libraries
! which leak or prematurely free objects.  <TT>-DREDIRECT_MALLOC</tt> is intended
  primarily as an easy way to adapt old code, not for new development.
  <P>
  New code should use the interface discussed below.
  <P>
  Code must be linked against the GC library.  On most UNIX platforms,
! depending on how the collector is built, this will be <TT>gc.a</tt>
! or <TT>libgc.{a,so}</tt>.
  <P>
  The following describes the standard C interface to the garbage collector.
  It is not a complete definition of the interface.  It describes only the
  most commonly used functionality, approximately in decreasing order of
! frequency of use.
  The full interface is described in
  <A HREF="http://hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gch.txt">gc.h</a>
  or <TT>gc.h</tt> in the distribution.
  <P>
! Clients should include <TT>gc.h</tt>.
  <P>
  In the case of multithreaded code,
! <TT>gc.h</tt> should be included after the threads header file, and
! after defining the appropriate <TT>GC_</tt><I>XXXX</i><TT>_THREADS</tt> macro.
! (For 6.2alpha4 and later, simply defining <TT>GC_THREADS</tt> should suffice.)
! The header file <TT>gc.h</tt> must be included
  in files that use either GC or threads primitives, since threads primitives
  will be redefined to cooperate with the GC on many platforms.
  <DL>
*************** Allocates and clears <I>nbytes</i> of st
*** 39,47 ****
  Requires (amortized) time proportional to <I>nbytes</i>.
  The resulting object will be automatically deallocated when unreferenced.
  References from objects allocated with the system malloc are usually not
! considered by the collector.  (See GC_MALLOC_UNCOLLECTABLE, however.)
! GC_MALLOC is a macro which invokes GC_malloc by default or, if GC_DEBUG
! is defined before gc.h is included, a debugging version that checks
  occasionally for overwrite errors, and the like.
  <DT> <B>void * GC_MALLOC_ATOMIC(size_t <I>nbytes</i>)</b>
  <DD>
--- 41,50 ----
  Requires (amortized) time proportional to <I>nbytes</i>.
  The resulting object will be automatically deallocated when unreferenced.
  References from objects allocated with the system malloc are usually not
! considered by the collector.  (See <TT>GC_MALLOC_UNCOLLECTABLE</tt>, however.)
! <TT>GC_MALLOC</tt> is a macro which invokes <TT>GC_malloc</tt> by default or,
! if <TT>GC_DEBUG</tt>
! is defined before <TT>gc.h</tt> is included, a debugging version that checks
  occasionally for overwrite errors, and the like.
  <DT> <B>void * GC_MALLOC_ATOMIC(size_t <I>nbytes</i>)</b>
  <DD>
*************** collector using the interface in
*** 57,116 ****
  <A HREF="http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc_typedh.txt">gc_typed.h</a> in the distribution.
  <DT> <B>void * GC_MALLOC_UNCOLLECTABLE(size_t <I>nbytes</i>)</b>
  <DD>
! Identical to GC_MALLOC, except that the resulting object is not automatically
  deallocated.  Unlike the system-provided malloc, the collector does
  scan the object for pointers to garbage-collectable memory, even if the
  block itself does not appear to be reachable.  (Objects allocated in this way
  are effectively treated as roots by the collector.)
! <DT> <B> void * GC_REALLOC(void *old, size_t new_size) </b>
  <DD>
  Allocate a new object of the indicated size and copy (a prefix of) the
  old object into the new object.  The old object is reused in place if
! convenient.  If the original object was allocated with GC_malloc_atomic,
  the new object is subject to the same constraints.  If it was allocated
  as an uncollectable object, then the new object is uncollectable, and
  the old object (if different) is deallocated.
! (Use GC_REALLOC with GC_MALLOC, etc.)
! <DT> <B> void GC_FREE(void *dead) </b>
  <DD>
  Explicitly deallocate an object.  Typically not useful for small
! collectable objects.  (Use GC_FREE with GC_MALLOC, etc.)
  <DT> <B> void * GC_MALLOC_IGNORE_OFF_PAGE(size_t <I>nbytes</i>) </b>
  <DD>
  <DT> <B> void * GC_MALLOC_ATOMIC_IGNORE_OFF_PAGE(size_t <I>nbytes</i>) </b>
  <DD>
! Analogous to GC_MALLOC and GC_MALLOC_ATOMIC, except that the client
  guarantees that as long
  as the resulting object is of use, a pointer is maintained to someplace
  inside the first 512 bytes of the object.  This pointer should be declared
  volatile to avoid interference from compiler optimizations.
  (Other nonvolatile pointers to the object may exist as well.)
  This is the
! preferred way to allocate objects that are likely to be > 100KBytes in size.
  It greatly reduces the risk that such objects will be accidentally retained
  when they are no longer needed.  Thus space usage may be significantly reduced.
  <DT> <B> void GC_gcollect(void) </b>
  <DD>
  Explicitly force a garbage collection.
  <DT> <B> void GC_enable_incremental(void) </b>
  <DD>
  Cause the garbage collector to perform a small amount of work
! every few invocations of GC_malloc or the like, instead of performing
  an entire collection at once.  This is likely to increase total
  running time.  It will improve response on a platform that either has
! suitable support in the garbage collector (Irix and most other Unix
  versions, win32 if the collector was suitably built) or if "stubborn"
! allocation is used (see <A HREF="http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gch.txt">gc.h</a>).
  On many platforms this interacts poorly with system calls 
  that write to the garbage collected heap.
! <DT> <B> GC_warn_proc GC_set_warn_proc(GC_warn_proc p) </b>
  <DD>
  Replace the default procedure used by the collector to print warnings.
  The collector
  may otherwise write to sterr, most commonly because GC_malloc was used
  in a situation in which GC_malloc_ignore_off_page would have been more
  appropriate.  See <A HREF="http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gch.txt">gc.h</a> for details.
! <DT> <B> void GC_register_finalizer(...) </b>
  <DD>
  Register a function to be called when an object becomes inaccessible.
  This is often useful as a backup method for releasing system resources
--- 60,129 ----
  <A HREF="http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc_typedh.txt">gc_typed.h</a> in the distribution.
  <DT> <B>void * GC_MALLOC_UNCOLLECTABLE(size_t <I>nbytes</i>)</b>
  <DD>
! Identical to <TT>GC_MALLOC</tt>,
! except that the resulting object is not automatically
  deallocated.  Unlike the system-provided malloc, the collector does
  scan the object for pointers to garbage-collectable memory, even if the
  block itself does not appear to be reachable.  (Objects allocated in this way
  are effectively treated as roots by the collector.)
! <DT> <B> void * GC_REALLOC(void *<I>old</i>, size_t <I>new_size</i>) </b>
  <DD>
  Allocate a new object of the indicated size and copy (a prefix of) the
  old object into the new object.  The old object is reused in place if
! convenient.  If the original object was allocated with
! <TT>GC_MALLOC_ATOMIC</tt>,
  the new object is subject to the same constraints.  If it was allocated
  as an uncollectable object, then the new object is uncollectable, and
  the old object (if different) is deallocated.
! <DT> <B> void GC_FREE(void *<I>dead</i>) </b>
  <DD>
  Explicitly deallocate an object.  Typically not useful for small
! collectable objects.
  <DT> <B> void * GC_MALLOC_IGNORE_OFF_PAGE(size_t <I>nbytes</i>) </b>
  <DD>
  <DT> <B> void * GC_MALLOC_ATOMIC_IGNORE_OFF_PAGE(size_t <I>nbytes</i>) </b>
  <DD>
! Analogous to <TT>GC_MALLOC</tt> and <TT>GC_MALLOC_ATOMIC</tt>,
! except that the client
  guarantees that as long
  as the resulting object is of use, a pointer is maintained to someplace
  inside the first 512 bytes of the object.  This pointer should be declared
  volatile to avoid interference from compiler optimizations.
  (Other nonvolatile pointers to the object may exist as well.)
  This is the
! preferred way to allocate objects that are likely to be &gt; 100KBytes in size.
  It greatly reduces the risk that such objects will be accidentally retained
  when they are no longer needed.  Thus space usage may be significantly reduced.
+ <DT> <B> void GC_INIT(void) </b>
+ <DD>
+ On some platforms, it is necessary to invoke this
+ <I>from the main executable, not from a dynamic library,</i> before
+ the initial invocation of a GC routine.  It is recommended that this be done
+ in portable code, though we try to ensure that it expands to a no-op
+ on as many platforms as possible.
  <DT> <B> void GC_gcollect(void) </b>
  <DD>
  Explicitly force a garbage collection.
  <DT> <B> void GC_enable_incremental(void) </b>
  <DD>
  Cause the garbage collector to perform a small amount of work
! every few invocations of <TT>GC_MALLOC</tt> or the like, instead of performing
  an entire collection at once.  This is likely to increase total
  running time.  It will improve response on a platform that either has
! suitable support in the garbage collector (Linux and most Unix
  versions, win32 if the collector was suitably built) or if "stubborn"
! allocation is used (see
! <A HREF="http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gch.txt">gc.h</a>).
  On many platforms this interacts poorly with system calls 
  that write to the garbage collected heap.
! <DT> <B> GC_warn_proc GC_set_warn_proc(GC_warn_proc <I>p</i>) </b>
  <DD>
  Replace the default procedure used by the collector to print warnings.
  The collector
  may otherwise write to sterr, most commonly because GC_malloc was used
  in a situation in which GC_malloc_ignore_off_page would have been more
  appropriate.  See <A HREF="http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gch.txt">gc.h</a> for details.
! <DT> <B> void GC_REGISTER_FINALIZER(...) </b>
  <DD>
  Register a function to be called when an object becomes inaccessible.
  This is often useful as a backup method for releasing system resources
*************** See <A HREF="http://www.hpl.hp.com/perso
*** 123,129 ****
  of the design.
  <P>
  Note that an object may become inaccessible before client code is done
! operating on its fields.  Suitable synchronization is usually required.
  See <A HREF="http://portal.acm.org/citation.cfm?doid=604131.604153">here</a>
  or <A HREF="http://www.hpl.hp.com/techreports/2002/HPL-2002-335.html">here</a>
  for details.
--- 136,143 ----
  of the design.
  <P>
  Note that an object may become inaccessible before client code is done
! operating on objects referenced by its fields.
! Suitable synchronization is usually required.
  See <A HREF="http://portal.acm.org/citation.cfm?doid=604131.604153">here</a>
  or <A HREF="http://www.hpl.hp.com/techreports/2002/HPL-2002-335.html">here</a>
  for details.
*************** for details.
*** 131,143 ****
  <P>
  If you are concerned with multiprocessor performance and scalability,
  you should consider enabling and using thread local allocation (<I>e.g.</i>
! GC_LOCAL_MALLOC, see <TT>gc_local_alloc.h</tt>.  If your platform
  supports it, you should build the collector with parallel marking support
! (-DPARALLEL_MARK, or --enable-parallel-mark).
  <P>
  If the collector is used in an environment in which pointer location
  information for heap objects is easily available, this can be passed on
! to the colllector using the interfaces in either <TT>gc_typed.h</tt>
  or <TT>gc_gcj.h</tt>.
  <P>
  The collector distribution also includes a <B>string package</b> that takes
--- 145,157 ----
  <P>
  If you are concerned with multiprocessor performance and scalability,
  you should consider enabling and using thread local allocation (<I>e.g.</i>
! <TT>GC_LOCAL_MALLOC</tt>, see <TT>gc_local_alloc.h</tt>.  If your platform
  supports it, you should build the collector with parallel marking support
! (<TT>-DPARALLEL_MARK</tt>, or <TT>--enable-parallel-mark</tt>).
  <P>
  If the collector is used in an environment in which pointer location
  information for heap objects is easily available, this can be passed on
! to the collector using the interfaces in either <TT>gc_typed.h</tt>
  or <TT>gc_gcj.h</tt>.
  <P>
  The collector distribution also includes a <B>string package</b> that takes
*************** advantage of the collector.  For details
*** 145,151 ****
  <A HREF="http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/cordh.txt">cord.h</a>
  
  <H1>C++ Interface</h1>
! There are three distinct ways to use the collector from C++:
  <DL>
  <DT> <B> STL allocators </b>
  <DD>
--- 159,189 ----
  <A HREF="http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/cordh.txt">cord.h</a>
  
  <H1>C++ Interface</h1>
! Usage of the collector from C++ is complicated by the fact that there
! are many "standard" ways to allocate memory in C++.  The default ::new
! operator, default malloc, and default STL allocators allocate memory
! that is not garbage collected, and is not normally "traced" by the
! collector.  This means that any pointers in memory allocated by these
! default allocators will not be seen by the collector.  Garbage-collectable
! memory referenced only by pointers stored in such default-allocated
! objects is likely to be reclaimed prematurely by the collector.
! <P>
! It is the programmers responsibility to ensure that garbage-collectable
! memory is referenced by pointers stored in one of
! <UL>
! <LI> Program variables
! <LI> Garbage-collected objects
! <LI> Uncollected but "traceable" objects
! </ul>
! "Traceable" objects are not necessarily reclaimed by the collector,
! but are scanned for pointers to collectable objects.
! They are allocated by <TT>GC_MALLOC_UNCOLLECTABLE</tt>, as described
! above, and through some interfaces described below.
! <P>
! The easiest way to ensure that collectable objects are properly referenced
! is to allocate only collectable objects.  This requires that every
! allocation go through one of the following interfaces, each one of
! which replaces a standard C++ allocation mechanism:
  <DL>
  <DT> <B> STL allocators </b>
  <DD>
*************** multiple threads, but are faster.
*** 170,176 ****
  For an example, click <A HREF="http://hpl.hp.com/personal/Hans_Boehm/gc/gc_alloc_exC.txt">here</a>.
  <P>
  Recent versions of the collector also include a more standard-conforming
! allocator implemention in <TT>gc_allocator.h</tt>.  It defines
  <UL>
  <LI> traceable_allocator
  <LI> gc_allocator
--- 208,214 ----
  For an example, click <A HREF="http://hpl.hp.com/personal/Hans_Boehm/gc/gc_alloc_exC.txt">here</a>.
  <P>
  Recent versions of the collector also include a more standard-conforming
! allocator implementation in <TT>gc_allocator.h</tt>.  It defines
  <UL>
  <LI> traceable_allocator
  <LI> gc_allocator
*************** Again the former allocates uncollectable
*** 179,187 ****
  This should work with any fully standard-conforming C++ compiler.
  <DT> <B> Class inheritance based interface </b>
  <DD>
! Users may include gc_cpp.h and then cause members of certain classes to
! be allocated in garbage collectable memory by inheriting from class gc.
  For details see <A HREF="http://hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc_cpph.txt">gc_cpp.h</a>.
  <DT> <B> C interface </b>
  <DD>
  It is also possible to use the C interface from 
--- 217,231 ----
  This should work with any fully standard-conforming C++ compiler.
  <DT> <B> Class inheritance based interface </b>
  <DD>
! Users may include gc_cpp.h and then cause members of classes to
! be allocated in garbage collectable memory by having those classes
! inherit from class gc.
  For details see <A HREF="http://hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc_cpph.txt">gc_cpp.h</a>.
+ <P>
+ Linking against libgccpp in addition to the gc library overrides
+ ::new (and friends) to allocate traceable memory but uncollectable
+ memory, making it safe to refer to collectable objects from the resulting
+ memory.
  <DT> <B> C interface </b>
  <DD>
  It is also possible to use the C interface from 
*************** It is also possible to use the C interfa
*** 189,202 ****
  On platforms which use malloc to implement ::new, it should usually be possible
  to use a version of the collector that has been compiled as a malloc
  replacement.  It is also possible to replace ::new and other allocation
! functions suitably.
  <P>
  Note that user-implemented small-block allocation often works poorly with
  an underlying garbage-collected large block allocator, since the collector
  has to view all objects accessible from the user's free list as reachable.
! This is likely to cause problems if GC_malloc is used with something like
  the original HP version of STL.
! This approach works with the SGI versions of the STL only if the
  <TT>malloc_alloc</tt> allocator is used.
  </dl>
  </body>
--- 233,247 ----
  On platforms which use malloc to implement ::new, it should usually be possible
  to use a version of the collector that has been compiled as a malloc
  replacement.  It is also possible to replace ::new and other allocation
! functions suitably, as is done by libgccpp.
  <P>
  Note that user-implemented small-block allocation often works poorly with
  an underlying garbage-collected large block allocator, since the collector
  has to view all objects accessible from the user's free list as reachable.
! This is likely to cause problems if <TT>GC_MALLOC</tt>
! is used with something like
  the original HP version of STL.
! This approach works well with the SGI versions of the STL only if the
  <TT>malloc_alloc</tt> allocator is used.
  </dl>
  </body>
diff -Nrcpad gcc-3.4.3/boehm-gc/doc/simple_example.html gcc-4.0.0/boehm-gc/doc/simple_example.html
*** gcc-3.4.3/boehm-gc/doc/simple_example.html	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/boehm-gc/doc/simple_example.html	Thu Aug 12 21:14:29 2004
***************
*** 0 ****
--- 1,202 ----
+ <HTML>
+ <HEAD>
+ <TITLE>Using the Garbage Collector: A simple example</title>
+ </head>
+ <BODY>
+ <H1>Using the Garbage Collector: A simple example</h1>
+ The following consists of step-by-step instructions for building and
+ using the collector.  We'll assume a Linux/gcc platform and
+ a single-threaded application.  <FONT COLOR=green>The green
+ text contains information about other platforms or scenarios.
+ It can be skipped, especially on first reading</font>.
+ <H2>Building the collector</h2>
+ If you haven't already so, unpack the collector and enter
+ the newly created directory with
+ <PRE>
+ tar xvfz gc<version>.tar.gz
+ cd gc<version>
+ </pre>
+ <P>
+ You can configure, build, and install the collector in a private
+ directory, say /home/xyz/gc, with the following commands:
+ <PRE>
+ ./configure --prefix=/home/xyz/gc --disable-threads
+ make
+ make check
+ make install
+ </pre>
+ Here the "<TT>make check</tt>" command is optional, but highly recommended.
+ It runs a basic correctness test which usually takes well under a minute.
+ <FONT COLOR=green>
+ <H3>Other platforms</h3>
+ On non-Unix, non-Linux platforms, the collector is usually built by copying
+ the appropriate makefile (see the platform-specific README in doc/README.xxx
+ in the distribution) to the file "Makefile" (overwriting the copy of
+ Makefile.direct that was originally there), and then typing "make"
+ (or "nmake" or ...).  This builds the library in the source tree.  You may
+ want to move it and the files in the include directory to a more convenient
+ place.
+ <P>
+ If you use a makefile that does not require running a configure script,
+ you should first look at the makefile, and adjust any options that are
+ documented there.
+ <P>
+ If your platform provides a "make" utility, that is generally preferred
+ to platform- and compiler- dependent "project" files.  (At least that is the
+ strong preference of the would-be maintainer of those project files.)
+ <H3>Threads</h3>
+ If you need thread support, configure the collector with
+ <PRE>
+ --enable-threads=posix --enable-thread-local-alloc --enable-parallel-mark
+ </pre>
+ instead of
+ <TT>--disable-threads</tt>
+ If your target is a real old-fashioned uniprocessor (no "hyperthreading",
+ etc.) you will want to omit <TT>--enable-parallel-mark</tt>.
+ <H3>C++</h3>
+ You will need to include the C++ support, which unfortunately tends to
+ be among the least portable parts of the collector, since it seems
+ to rely on some corner cases of the language.  On Linux, it
+ suffices to add <TT>--enable-cplusplus</tt> to the configure options.
+ </font>
+ <H2>Writing the program</h2>
+ You will need a
+ <PRE>
+ #include "gc.h"
+ </pre>
+ at the beginning of every file that allocates memory through the
+ garbage collector.  Call <TT>GC_MALLOC</tt> wherever you would
+ have call <TT>malloc</tt>.  This initializes memory to zero like
+ <TT>calloc</tt>; there is no need to explicitly clear the
+ result.
+ <P>
+ If you know that an object will not contain pointers to the
+ garbage-collected heap, and you don't need it to be initialized,
+ call <TT>GC_MALLOC_ATOMIC</tt> instead.
+ <P>
+ A function <TT>GC_FREE</tt> is provided but need not be called.
+ For very small objects, your program will probably perform better if
+ you do not call it, and let the collector do its job.
+ <P>
+ A <TT>GC_REALLOC</tt> function behaves like the C library <TT>realloc</tt>.
+ It allocates uninitialized pointer-free memory if the original
+ object was allocated that way.
+ <P>
+ The following program <TT>loop.c</tt> is a trivial example:
+ <PRE>
+ #include "gc.h"
+ #include &lt;assert.h&gt;
+ #include &lt;stdio.h&gt;
+ 
+ int main()
+ {
+   int i;
+ 
+   GC_INIT();	/* Optional on Linux/X86; see below.  */
+   for (i = 0; i < 10000000; ++i)
+    {
+      int **p = (int **) GC_MALLOC(sizeof(int *));
+      int *q = (int *) GC_MALLOC_ATOMIC(sizeof(int));
+      assert(*p == 0);
+      *p = (int *) GC_REALLOC(q, 2 * sizeof(int));
+      if (i % 100000 == 0)
+        printf("Heap size = %d\n", GC_get_heap_size());
+    }
+   return 0;
+ }
+ </pre>
+ <FONT COLOR=green>
+ <H3>Interaction with the system malloc</h3>
+ It is usually best not to mix garbage-collected allocation with the system
+ <TT>malloc-free</tt>.  If you do, you need to be careful not to store
+ pointers to the garbage-collected heap in memory allocated with the system
+ <TT>malloc</tt>.
+ <H3>Other Platforms</h3>
+ On some other platforms it is necessary to call <TT>GC_INIT()</tt> from the main program,
+ which is presumed to be part of the main executable, not a dynamic library.
+ This can never hurt, and is thus generally good practice.
+ 
+ <H3>Threads</h3>
+ For a multithreaded program some more rules apply:
+ <UL>
+ <LI>
+ Files that either allocate through the GC <I>or make thread-related calls</i>
+ should first define the macro <TT>GC_THREADS</tt>, and then
+ include <TT>"gc.h"</tt>.  On some platforms this will redefine some
+ threads primitives, e.g. to let the collector keep track of thread creation.
+ <LI>
+ To take advantage of fast thread-local allocation, use the following instead
+ of including <TT>gc.h</tt>:
+ <PRE>
+ #define GC_REDIRECT_TO_LOCAL
+ #include "gc_local_alloc.h"
+ </pre>
+ This will cause GC_MALLOC and GC_MALLOC_ATOMIC to keep per-thread allocation
+ caches, and greatly reduce the number of lock acquisitions during allocation.
+ </ul>
+ 
+ <H3>C++</h3>
+ In the case of C++, you need to be especially careful not to store pointers
+ to the garbage-collected heap in areas that are not traced by the collector.
+ The collector includes some <A HREF="gcinterface.html">alternate interfaces</a>
+ to make that easier.
+ 
+ <H3>Debugging</h3>
+ Additional debug checks can be performed by defining <TT>GC_DEBUG</tt> before
+ including <TT>gc.h</tt>.  Additional options are available if the collector
+ is also built with <TT>--enable-full_debug</tt> and all allocations are
+ performed with <TT>GC_DEBUG</tt> defined.
+ 
+ <H3>What if I can't rewrite/recompile my program?</h3>
+ You may be able to build the collector with <TT>--enable-redirect-malloc</tt>
+ and set the <TT>LD_PRELOAD</tt> environment variable to point to the resulting
+ library, thus replacing the standard <TT>malloc</tt> with its garbage-collected
+ counterpart.  This is rather platform dependent.  See the
+ <A HREF="leak.html">leak detection documentation</a> for some more details.
+ 
+ </font>
+ 
+ <H2>Compiling and linking</h2>
+ 
+ The above application <TT>loop.c</tt> test program can be compiled and linked
+ with
+ 
+ <PRE>
+ cc -I/home/xyz/gc/include loop.c /home/xyz/gc/lib/libgc.a -o loop
+ </pre>
+ 
+ The <TT>-I</tt> option directs the compiler to the right include
+ directory.  In this case, we list the static library
+ directly on the compile line; the dynamic library could have been
+ used instead, provided we arranged for the dynamic loader to find
+ it, e.g. by setting <TT>LD_LIBRARY_PATH</tt>.
+ 
+ <FONT COLOR=green>
+ 
+ <H3>Threads</h3>
+ 
+ On pthread platforms, you will of course also have to link with
+ <TT>-lpthread</tt>,
+ and compile with any thread-safety options required by your compiler.
+ On some platforms, you may also need to link with <TT>-ldl</tt>
+ or <TT>-lrt</tt>.
+ Looking at threadlibs.c in the GC build directory
+ should give you the appropriate
+ list if a plain <TT>-lpthread</tt> doesn't work.
+ 
+ </font>
+ 
+ <H2>Running the executable</h2>
+ 
+ The executable can of course be run normally, e.g. by typing
+ 
+ <PRE>
+ ./loop
+ </pre>
+ 
+ The operation of the collector is affected by a number of environment variables.
+ For example, setting <TT>GC_PRINT_STATS</tt> produces some
+ GC statistics on stdout.
+ See <TT>README.environment</tt> in the distribution for details.
+ </body>
+ </html>
diff -Nrcpad gcc-3.4.3/boehm-gc/dyn_load.c gcc-4.0.0/boehm-gc/dyn_load.c
*** gcc-3.4.3/boehm-gc/dyn_load.c	Wed Jul 30 17:42:28 2003
--- gcc-4.0.0/boehm-gc/dyn_load.c	Sat Feb 26 15:42:11 2005
***************
*** 80,85 ****
--- 80,90 ----
  #   define l_name	lm_name
  #endif
  
+ #if defined(NETBSD)
+ #   include <machine/elf_machdep.h>
+ #   define ELFSIZE ARCH_ELFSIZE
+ #endif
+ 
  #if defined(LINUX) && defined(__ELF__) || defined(SCO_ELF) || \
      (defined(FREEBSD) && defined(__ELF__)) || defined(DGUX) || \
      (defined(NETBSD) && defined(__ELF__)) || defined(HURD)
***************
*** 91,100 ****
  /* Newer versions of GNU/Linux define this macro.  We
   * define it similarly for any ELF systems that don't.  */
  #  ifndef ElfW
! #    if !defined(ELF_CLASS) || ELF_CLASS == ELFCLASS32
! #      define ElfW(type) Elf32_##type
  #    else
! #      define ElfW(type) Elf64_##type
  #    endif
  #  endif
  
--- 96,113 ----
  /* Newer versions of GNU/Linux define this macro.  We
   * define it similarly for any ELF systems that don't.  */
  #  ifndef ElfW
! #    ifdef __NetBSD__
! #      if ELFSIZE == 32
! #        define ElfW(type) Elf32_##type
! #      else
! #        define ElfW(type) Elf64_##type
! #      endif
  #    else
! #      if !defined(ELF_CLASS) || ELF_CLASS == ELFCLASS32
! #        define ElfW(type) Elf32_##type
! #      else
! #        define ElfW(type) Elf64_##type
! #      endif
  #    endif
  #  endif
  
*************** extern void * GC_roots_present();
*** 552,557 ****
--- 565,571 ----
  	/* The type is a lie, since the real type doesn't make sense here, */
  	/* and we only test for NULL.					   */
  
+ 
  /* We use /proc to track down all parts of the address space that are	*/
  /* mapped by the process, and throw out regions we know we shouldn't	*/
  /* worry about.  This may also work under other SVR4 variants.		*/
*************** void GC_register_dynamic_libraries()
*** 726,731 ****
--- 740,833 ----
    
  # define HAVE_REGISTER_MAIN_STATIC_DATA
  
+   /* The frame buffer testing code is dead in this version.	*/
+   /* We leave it here temporarily in case the switch to just 	*/
+   /* testing for MEM_IMAGE sections causes un expected 		*/
+   /* problems.							*/
+   GC_bool GC_warn_fb = TRUE;	/* Warn about traced likely 	*/
+   				/* graphics memory.		*/
+   GC_bool GC_disallow_ignore_fb = FALSE;
+   int GC_ignore_fb_mb;	/* Ignore mappings bigger than the 	*/
+   			/* specified number of MB.		*/
+   GC_bool GC_ignore_fb = FALSE; /* Enable frame buffer 	*/
+   				/* checking.		*/
+   
+   /* Issue warning if tracing apparent framebuffer. 		*/
+   /* This limits us to one warning, and it's a back door to	*/
+   /* disable that.						*/
+  
+   /* Should [start, start+len) be treated as a frame buffer	*/
+   /* and ignored?						*/
+   /* Unfortunately, we currently have no real way to tell	*/
+   /* automatically, and rely largely on user input.		*/
+   /* FIXME: If we had more data on this phenomenon (e.g.	*/
+   /* is start aligned to a MB multiple?) we should be able to	*/
+   /* do better.							*/
+   /* Based on a very limited sample, it appears that:		*/
+   /* 	- Frame buffer mappings appear as mappings of length	*/
+   /* 	  2**n MB - 192K.  (We guess the 192K can vary a bit.)	*/
+   /*	- Have a stating address at best 64K aligned.		*/
+   /* I'd love more information about the mapping, since I	*/
+   /* can't reproduce the problem.				*/
+   static GC_bool is_frame_buffer(ptr_t start, size_t len)
+   {
+     static GC_bool initialized = FALSE;
+ #   define MB (1024*1024)
+ #   define DEFAULT_FB_MB 15
+ #   define MIN_FB_MB 3
+ 
+     if (GC_disallow_ignore_fb) return FALSE;
+     if (!initialized) {
+       char * ignore_fb_string =  GETENV("GC_IGNORE_FB");
+ 
+       if (0 != ignore_fb_string) {
+ 	while (*ignore_fb_string == ' ' || *ignore_fb_string == '\t')
+ 	  ++ignore_fb_string;
+ 	if (*ignore_fb_string == '\0') {
+ 	  GC_ignore_fb_mb = DEFAULT_FB_MB;
+ 	} else {
+ 	  GC_ignore_fb_mb = atoi(ignore_fb_string);
+ 	  if (GC_ignore_fb_mb < MIN_FB_MB) {
+ 	    WARN("Bad GC_IGNORE_FB value.  Using %ld\n", DEFAULT_FB_MB);
+ 	    GC_ignore_fb_mb = DEFAULT_FB_MB;
+ 	  }
+ 	}
+ 	GC_ignore_fb = TRUE;
+       } else {
+ 	GC_ignore_fb_mb = DEFAULT_FB_MB;  /* For warning */
+       }
+       initialized = TRUE;
+     }
+     if (len >= ((size_t)GC_ignore_fb_mb << 20)) {
+       if (GC_ignore_fb) {
+ 	return TRUE;
+       } else {
+ 	if (GC_warn_fb) {
+ 	  WARN("Possible frame buffer mapping at 0x%lx: \n"
+ 	       "\tConsider setting GC_IGNORE_FB to improve performance.\n",
+ 	       start);
+ 	  GC_warn_fb = FALSE;
+ 	}
+ 	return FALSE;
+       }
+     } else {
+       return FALSE;
+     }
+   }
+ 
+ # ifdef DEBUG_VIRTUALQUERY
+   void GC_dump_meminfo(MEMORY_BASIC_INFORMATION *buf)
+   {
+     GC_printf4("BaseAddress = %lx, AllocationBase = %lx, RegionSize = %lx(%lu)\n",
+ 	       buf -> BaseAddress, buf -> AllocationBase, buf -> RegionSize,
+ 	       buf -> RegionSize);
+     GC_printf4("\tAllocationProtect = %lx, State = %lx, Protect = %lx, "
+ 	       "Type = %lx\n",
+ 	       buf -> AllocationProtect, buf -> State, buf -> Protect,
+ 	       buf -> Type);
+   }
+ # endif /* DEBUG_VIRTUALQUERY */
+ 
    void GC_register_dynamic_libraries()
    {
      MEMORY_BASIC_INFORMATION buf;
*************** void GC_register_dynamic_libraries()
*** 762,768 ****
  	    if (buf.State == MEM_COMMIT
  		&& (protect == PAGE_EXECUTE_READWRITE
  		    || protect == PAGE_READWRITE)
! 		&& !GC_is_heap_base(buf.AllocationBase)) {
  		if ((char *)p != limit) {
  		    GC_cond_add_roots(base, limit);
  		    base = p;
--- 864,878 ----
  	    if (buf.State == MEM_COMMIT
  		&& (protect == PAGE_EXECUTE_READWRITE
  		    || protect == PAGE_READWRITE)
! 		&& !GC_is_heap_base(buf.AllocationBase)
! 		/* This used to check for
! 		 * !is_frame_buffer(p, buf.RegionSize, buf.Type)
! 		 * instead of just checking for MEM_IMAGE.
! 		 * If something breaks, change it back. */
! 		&& buf.Type == MEM_IMAGE) {
! #	        ifdef DEBUG_VIRTUALQUERY
! 	          GC_dump_meminfo(&buf);
! #	        endif
  		if ((char *)p != limit) {
  		    GC_cond_add_roots(base, limit);
  		    base = p;
*************** void GC_register_dynamic_libraries()
*** 980,991 ****
  
  #ifdef DARWIN
  
  #ifndef __private_extern__
! #define __private_extern__ extern
! #include <mach-o/dyld.h>
! #undef __private_extern__
  #else
! #include <mach-o/dyld.h>
  #endif
  #include <mach-o/getsect.h>
  
--- 1090,1102 ----
  
  #ifdef DARWIN
  
+ /* __private_extern__ hack required for pre-3.4 gcc versions.	*/
  #ifndef __private_extern__
! # define __private_extern__ extern
! # include <mach-o/dyld.h>
! # undef __private_extern__
  #else
! # include <mach-o/dyld.h>
  #endif
  #include <mach-o/getsect.h>
  
diff -Nrcpad gcc-3.4.3/boehm-gc/finalize.c gcc-4.0.0/boehm-gc/finalize.c
*** gcc-3.4.3/boehm-gc/finalize.c	Mon Jul 28 04:18:20 2003
--- gcc-4.0.0/boehm-gc/finalize.c	Sat Aug 28 00:41:40 2004
*************** static GC_word last_finalizer_notificati
*** 809,814 ****
--- 809,844 ----
  
  void GC_notify_or_invoke_finalizers GC_PROTO((void))
  {
+     /* This is a convenient place to generate backtraces if appropriate, */
+     /* since that code is not callable with the allocation lock.	 */
+ #   if defined(KEEP_BACK_PTRS) || defined(MAKE_BACK_GRAPH)
+       static word last_back_trace_gc_no = 1;	/* Skip first one. */
+ 
+       if (GC_gc_no > last_back_trace_gc_no) {
+ 	word i;
+ 
+ #	ifdef KEEP_BACK_PTRS
+ 	  LOCK();
+ 	  /* Stops when GC_gc_no wraps; that's OK.	*/
+ 	  last_back_trace_gc_no = (word)(-1);  /* disable others. */
+ 	  for (i = 0; i < GC_backtraces; ++i) {
+ 	      /* FIXME: This tolerates concurrent heap mutation,	*/
+ 	      /* which may cause occasional mysterious results.		*/
+ 	      /* We need to release the GC lock, since GC_print_callers	*/
+ 	      /* acquires it.  It probably shouldn't.			*/
+ 	      UNLOCK();
+ 	      GC_generate_random_backtrace_no_gc();
+ 	      LOCK();
+ 	  }
+ 	  last_back_trace_gc_no = GC_gc_no;
+ 	  UNLOCK();
+ #	endif
+ #       ifdef MAKE_BACK_GRAPH
+ 	  if (GC_print_back_height)
+             GC_print_back_graph_stats();
+ #	endif
+       }
+ #   endif
      if (GC_finalize_now == 0) return;
      if (!GC_finalize_on_demand) {
  	(void) GC_invoke_finalizers();
diff -Nrcpad gcc-3.4.3/boehm-gc/gcj_mlc.c gcc-4.0.0/boehm-gc/gcj_mlc.c
*** gcc-3.4.3/boehm-gc/gcj_mlc.c	Mon Jul 28 04:18:20 2003
--- gcc-4.0.0/boehm-gc/gcj_mlc.c	Fri Aug 13 23:05:30 2004
***************
*** 14,21 ****
   */
  /* Boehm, July 31, 1995 5:02 pm PDT */
  
- #ifdef GC_GCJ_SUPPORT
- 
  /*
   * This is an allocator interface tuned for gcj (the GNU static
   * java compiler).
--- 14,19 ----
***************
*** 40,45 ****
--- 38,45 ----
  #include "gc_gcj.h"
  #include "private/dbg_mlc.h"
  
+ #ifdef GC_GCJ_SUPPORT
+ 
  GC_bool GC_gcj_malloc_initialized = FALSE;
  
  int GC_gcj_kind;	/* Object kind for objects with descriptors     */
*************** void GC_init_gcj_malloc(int mp_index, vo
*** 72,117 ****
          GC_printf0("Gcj-style type information is disabled!\n");
        }
  #   endif
      GC_mark_procs[mp_index] = (GC_mark_proc)mp;
      if (mp_index >= GC_n_mark_procs) ABORT("GC_init_gcj_malloc: bad index");
      /* Set up object kind gcj-style indirect descriptor. */
!       GC_gcjobjfreelist = (ptr_t *)
!           GC_INTERNAL_MALLOC((MAXOBJSZ+1)*sizeof(ptr_t), PTRFREE);
!       if (GC_gcjobjfreelist == 0) ABORT("Couldn't allocate GC_gcjobjfreelist");
!       BZERO(GC_gcjobjfreelist, (MAXOBJSZ+1)*sizeof(ptr_t));
!       GC_gcj_kind = GC_n_kinds++;
!       GC_obj_kinds[GC_gcj_kind].ok_freelist = GC_gcjobjfreelist;
!       GC_obj_kinds[GC_gcj_kind].ok_reclaim_list = 0;
        if (ignore_gcj_info) {
  	/* Use a simple length-based descriptor, thus forcing a fully	*/
  	/* conservative scan.						*/
!         GC_obj_kinds[GC_gcj_kind].ok_descriptor = (0 | GC_DS_LENGTH);
!         GC_obj_kinds[GC_gcj_kind].ok_relocate_descr = TRUE;
        } else {
! 	GC_obj_kinds[GC_gcj_kind].ok_descriptor =
!     	  (((word)(-MARK_DESCR_OFFSET - GC_INDIR_PER_OBJ_BIAS))
! 	   | GC_DS_PER_OBJECT);
!         GC_obj_kinds[GC_gcj_kind].ok_relocate_descr = FALSE;
        }
-       GC_obj_kinds[GC_gcj_kind].ok_init = TRUE;
      /* Set up object kind for objects that require mark proc call.	*/
-       GC_gcjdebugobjfreelist = (ptr_t *)
-           GC_INTERNAL_MALLOC((MAXOBJSZ+1)*sizeof(ptr_t), PTRFREE);
-       if (GC_gcjdebugobjfreelist == 0)
- 	  ABORT("Couldn't allocate GC_gcjdebugobjfreelist");
-       BZERO(GC_gcjdebugobjfreelist, (MAXOBJSZ+1)*sizeof(ptr_t));
-       GC_gcj_debug_kind = GC_n_kinds++;
-       GC_obj_kinds[GC_gcj_debug_kind].ok_freelist = GC_gcjdebugobjfreelist;
-       GC_obj_kinds[GC_gcj_debug_kind].ok_reclaim_list = 0;
        if (ignore_gcj_info) {
!         GC_obj_kinds[GC_gcj_kind].ok_descriptor = (0 | GC_DS_LENGTH);
!         GC_obj_kinds[GC_gcj_kind].ok_relocate_descr = TRUE;
        } else {
!         GC_obj_kinds[GC_gcj_debug_kind].ok_descriptor =
!     	  GC_MAKE_PROC(mp_index, 1 /* allocated with debug info */);
!         GC_obj_kinds[GC_gcj_debug_kind].ok_relocate_descr = FALSE;
        }
-       GC_obj_kinds[GC_gcj_debug_kind].ok_init = TRUE;
      UNLOCK();
      ENABLE_SIGNALS();
  }
--- 72,107 ----
          GC_printf0("Gcj-style type information is disabled!\n");
        }
  #   endif
+     GC_ASSERT(GC_mark_procs[mp_index] == (GC_mark_proc)0); /* unused */
      GC_mark_procs[mp_index] = (GC_mark_proc)mp;
      if (mp_index >= GC_n_mark_procs) ABORT("GC_init_gcj_malloc: bad index");
      /* Set up object kind gcj-style indirect descriptor. */
!       GC_gcjobjfreelist = (ptr_t *)GC_new_free_list_inner();
        if (ignore_gcj_info) {
  	/* Use a simple length-based descriptor, thus forcing a fully	*/
  	/* conservative scan.						*/
! 	GC_gcj_kind = GC_new_kind_inner((void **)GC_gcjobjfreelist,
! 					(0 | GC_DS_LENGTH),
! 				        TRUE, TRUE);
        } else {
! 	GC_gcj_kind = GC_new_kind_inner(
! 			(void **)GC_gcjobjfreelist,
! 			(((word)(-MARK_DESCR_OFFSET - GC_INDIR_PER_OBJ_BIAS))
! 	   		 | GC_DS_PER_OBJECT),
! 			FALSE, TRUE);
        }
      /* Set up object kind for objects that require mark proc call.	*/
        if (ignore_gcj_info) {
! 	GC_gcj_debug_kind = GC_gcj_kind;
!         GC_gcjdebugobjfreelist = GC_gcjobjfreelist;
        } else {
!         GC_gcjdebugobjfreelist = (ptr_t *)GC_new_free_list_inner();
! 	GC_gcj_debug_kind = GC_new_kind_inner(
! 				(void **)GC_gcjdebugobjfreelist,
! 				GC_MAKE_PROC(mp_index,
! 				     	     1 /* allocated with debug info */),
! 				FALSE, TRUE);
        }
      UNLOCK();
      ENABLE_SIGNALS();
  }
*************** ptr_t GC_clear_stack();
*** 124,129 ****
--- 114,138 ----
  #define GENERAL_MALLOC_IOP(lb,k) \
      (GC_PTR)GC_clear_stack(GC_generic_malloc_inner_ignore_off_page(lb, k))
  
+ /* We need a mechanism to release the lock and invoke finalizers.	*/
+ /* We don't really have an opportunity to do this on a rarely executed	*/
+ /* path on which the lock is not held.  Thus we check at a 		*/
+ /* rarely executed point at which it is safe to release the lock.	*/
+ /* We do this even where we could just call GC_INVOKE_FINALIZERS,	*/
+ /* since it's probably cheaper and certainly more uniform.		*/
+ /* FIXME - Consider doing the same elsewhere?				*/
+ static void maybe_finalize()
+ {
+    static int last_finalized_no = 0;
+ 
+    if (GC_gc_no == last_finalized_no) return;
+    if (!GC_is_initialized) return;
+    UNLOCK();
+    GC_INVOKE_FINALIZERS();
+    last_finalized_no = GC_gc_no;
+    LOCK();
+ }
+ 
  /* Allocate an object, clear it, and store the pointer to the	*/
  /* type structure (vtable in gcj).				*/
  /* This adds a byte at the end of the object if GC_malloc would.*/
*************** DCL_LOCK_STATE;
*** 143,149 ****
  	opp = &(GC_gcjobjfreelist[lw]);
  	LOCK();
  	op = *opp;
!         if( EXPECT(op == 0, 0)) {
              op = (ptr_t)GENERAL_MALLOC((word)lb, GC_gcj_kind);
  	    if (0 == op) {
  		UNLOCK();
--- 152,159 ----
  	opp = &(GC_gcjobjfreelist[lw]);
  	LOCK();
  	op = *opp;
!         if(EXPECT(op == 0, 0)) {
! 	    maybe_finalize();
              op = (ptr_t)GENERAL_MALLOC((word)lb, GC_gcj_kind);
  	    if (0 == op) {
  		UNLOCK();
*************** DCL_LOCK_STATE;
*** 161,166 ****
--- 171,177 ----
  	UNLOCK();
      } else {
  	LOCK();
+ 	maybe_finalize();
  	op = (ptr_t)GENERAL_MALLOC((word)lb, GC_gcj_kind);
  	if (0 == op) {
  	    UNLOCK();
*************** GC_PTR GC_debug_gcj_malloc(size_t lb, vo
*** 179,188 ****
  {
      GC_PTR result;
  
!     /* We clone the code from GC_debug_gcj_malloc, so that we 	*/
!     /* dont end up with extra frames on the stack, which could	*/
      /* confuse the backtrace.					*/
      LOCK();
      result = GC_generic_malloc_inner(lb + DEBUG_BYTES, GC_gcj_debug_kind);
      if (result == 0) {
  	UNLOCK();
--- 190,199 ----
  {
      GC_PTR result;
  
!     /* We're careful to avoid extra calls, which could		 */
      /* confuse the backtrace.					*/
      LOCK();
+     maybe_finalize();
      result = GC_generic_malloc_inner(lb + DEBUG_BYTES, GC_gcj_debug_kind);
      if (result == 0) {
  	UNLOCK();
*************** DCL_LOCK_STATE;
*** 215,220 ****
--- 226,232 ----
      LOCK();
      op = *opp;
      if( EXPECT(op == 0, 0) ) {
+ 	maybe_finalize();
          op = (ptr_t)GC_clear_stack(
  		GC_generic_malloc_words_small_inner(lw, GC_gcj_kind));
  	if (0 == op) {
*************** void * GC_debug_gcj_fast_malloc(size_t l
*** 242,247 ****
--- 254,260 ----
      /* dont end up with extra frames on the stack, which could	*/
      /* confuse the backtrace.					*/
      LOCK();
+     maybe_finalize();
      result = GC_generic_malloc_inner(lb + DEBUG_BYTES, GC_gcj_debug_kind);
      if (result == 0) {
  	UNLOCK();
*************** DCL_LOCK_STATE;
*** 278,283 ****
--- 291,297 ----
  	opp = &(GC_gcjobjfreelist[lw]);
  	LOCK();
          if( (op = *opp) == 0 ) {
+ 	    maybe_finalize();
              op = (ptr_t)GENERAL_MALLOC_IOP(lb, GC_gcj_kind);
  #	    ifdef MERGE_SIZES
  		lw = GC_size_map[lb];	/* May have been uninitialized.	*/
*************** DCL_LOCK_STATE;
*** 289,294 ****
--- 303,310 ----
  	*(void **)op = ptr_to_struct_containing_descr;
  	UNLOCK();
      } else {
+ 	LOCK();
+ 	maybe_finalize();
          op = (ptr_t)GENERAL_MALLOC_IOP(lb, GC_gcj_kind);
          if (0 != op) {
            *(void **)op = ptr_to_struct_containing_descr;
diff -Nrcpad gcc-3.4.3/boehm-gc/headers.c gcc-4.0.0/boehm-gc/headers.c
*** gcc-3.4.3/boehm-gc/headers.c	Fri Aug 17 18:30:45 2001
--- gcc-4.0.0/boehm-gc/headers.c	Fri Aug 13 23:05:30 2004
*************** register struct hblk * h;
*** 206,212 ****
  {
      hdr * result;
      
!     if (!get_index((word) h)) return(FALSE);
      result = alloc_hdr();
      SET_HDR(h, result);
  #   ifdef USE_MUNMAP
--- 206,212 ----
  {
      hdr * result;
      
!     if (!get_index((word) h)) return(0);
      result = alloc_hdr();
      SET_HDR(h, result);
  #   ifdef USE_MUNMAP
diff -Nrcpad gcc-3.4.3/boehm-gc/if_not_there.c gcc-4.0.0/boehm-gc/if_not_there.c
*** gcc-3.4.3/boehm-gc/if_not_there.c	Fri Aug 17 18:30:45 2001
--- gcc-4.0.0/boehm-gc/if_not_there.c	Fri Aug 13 23:05:30 2004
***************
*** 4,9 ****
--- 4,12 ----
  # include <stdio.h>
  # include <stdlib.h>
  # include <unistd.h>
+ #ifdef __DJGPP__
+ #include <dirent.h>
+ #endif /* __DJGPP__ */
  
  int main(argc, argv, envp)
  int argc;
*************** char ** argv;
*** 11,22 ****
--- 14,34 ----
  char ** envp;
  {
      FILE * f;
+ #ifdef __DJGPP__
+     DIR * d;
+ #endif /* __DJGPP__ */
      if (argc < 3) goto Usage;
      if ((f = fopen(argv[1], "rb")) != 0
          || (f = fopen(argv[1], "r")) != 0) {
          fclose(f);
          return(0);
      }
+ #ifdef __DJGPP__
+     if ((d = opendir(argv[1])) != 0) {
+ 	    closedir(d);
+ 	    return(0);
+     }
+ #endif
      printf("^^^^Starting command^^^^\n");
      fflush(stdout);
      execvp(argv[2], argv+2);
diff -Nrcpad gcc-3.4.3/boehm-gc/include/Makefile.in gcc-4.0.0/boehm-gc/include/Makefile.in
*** gcc-3.4.3/boehm-gc/include/Makefile.in	Mon Jul 28 04:18:22 2003
--- gcc-4.0.0/boehm-gc/include/Makefile.in	Tue Mar  1 23:28:07 2005
***************
*** 1,6 ****
! # Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
  
! # Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
  # This Makefile.in is free software; the Free Software Foundation
  # gives unlimited permission to copy and/or distribute it,
  # with or without modifications, as long as this notice is preserved.
--- 1,8 ----
! # Makefile.in generated by automake 1.9.3 from Makefile.am.
! # @configure_input@
  
! # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
! # 2003, 2004  Free Software Foundation, Inc.
  # This Makefile.in is free software; the Free Software Foundation
  # gives unlimited permission to copy and/or distribute it,
  # with or without modifications, as long as this notice is preserved.
***************
*** 10,240 ****
  # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  # PARTICULAR PURPOSE.
  
! 
! SHELL = @SHELL@
  
  srcdir = @srcdir@
  top_srcdir = @top_srcdir@
  VPATH = @srcdir@
- prefix = @prefix@
- exec_prefix = @exec_prefix@
- 
- bindir = @bindir@
- sbindir = @sbindir@
- libexecdir = @libexecdir@
- datadir = @datadir@
- sysconfdir = @sysconfdir@
- sharedstatedir = @sharedstatedir@
- localstatedir = @localstatedir@
- libdir = @libdir@
- infodir = @infodir@
- mandir = @mandir@
- includedir = @includedir@
- oldincludedir = /usr/include
- 
- DESTDIR =
- 
  pkgdatadir = $(datadir)/@PACKAGE@
  pkglibdir = $(libdir)/@PACKAGE@
  pkgincludedir = $(includedir)/@PACKAGE@
- 
  top_builddir = ..
! 
! ACLOCAL = @ACLOCAL@
! AUTOCONF = @AUTOCONF@
! AUTOMAKE = @AUTOMAKE@
! AUTOHEADER = @AUTOHEADER@
! 
  INSTALL = @INSTALL@
! INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
! INSTALL_DATA = @INSTALL_DATA@
! INSTALL_SCRIPT = @INSTALL_SCRIPT@
! transform = @program_transform_name@
! 
  NORMAL_INSTALL = :
  PRE_INSTALL = :
  POST_INSTALL = :
  NORMAL_UNINSTALL = :
  PRE_UNINSTALL = :
  POST_UNINSTALL = :
- build_alias = @build_alias@
  build_triplet = @build@
- host_alias = @host_alias@
  host_triplet = @host@
- target_alias = @target_alias@
  target_triplet = @target@
  AR = @AR@
  AS = @AS@
  CC = @CC@
  CFLAGS = @CFLAGS@
  CPP = @CPP@
  CXX = @CXX@
  CXXCPP = @CXXCPP@
  CXXFLAGS = @CXXFLAGS@
! CXXINCLUDES = @CXXINCLUDES@
! DLLTOOL = @DLLTOOL@
  EXEEXT = @EXEEXT@
  EXTRA_TEST_LIBS = @EXTRA_TEST_LIBS@
- GCJ = @GCJ@
- GCJFLAGS = @GCJFLAGS@
  GC_CFLAGS = @GC_CFLAGS@
! INCLUDES = @INCLUDES@
  LIBTOOL = @LIBTOOL@
  LN_S = @LN_S@
  MAINT = @MAINT@
  MAKEINFO = @MAKEINFO@
  MY_CFLAGS = @MY_CFLAGS@
- OBJDUMP = @OBJDUMP@
  OBJEXT = @OBJEXT@
  PACKAGE = @PACKAGE@
  RANLIB = @RANLIB@
  STRIP = @STRIP@
  THREADLIBS = @THREADLIBS@
  VERSION = @VERSION@
  addincludes = @addincludes@
  addlibs = @addlibs@
  addobjs = @addobjs@
  addtests = @addtests@
! gc_basedir = @gc_basedir@
  mkinstalldirs = @mkinstalldirs@
  target_all = @target_all@
  toolexecdir = @toolexecdir@
  toolexeclibdir = @toolexeclibdir@
- 
  AUTOMAKE_OPTIONS = foreign
- 
  noinst_HEADERS = gc.h gc_backptr.h gc_local_alloc.h \
    gc_pthread_redirects.h gc_cpp.h
  
! CONFIG_CLEAN_FILES = 
! HEADERS =  $(noinst_HEADERS)
  
! DIST_COMMON =  Makefile.am Makefile.in
  
  
! DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
  
! TAR = gtar
! GZIP_ENV = --best
! all: all-redirect
! .SUFFIXES:
! $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) 
! 	cd $(top_srcdir) && $(AUTOMAKE) --cygnus include/Makefile
  
! Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status
! 	cd $(top_builddir) \
! 	  && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
  
  
! tags: TAGS
  
! ID: $(HEADERS) $(SOURCES) $(LISP)
! 	list='$(SOURCES) $(HEADERS)'; \
! 	unique=`for i in $$list; do echo $$i; done | \
! 	  awk '    { files[$$0] = 1; } \
  	       END { for (i in files) print i; }'`; \
! 	here=`pwd` && cd $(srcdir) \
! 	  && mkid -f$$here/ID $$unique $(LISP)
  
! TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) $(LISP)
  	tags=; \
  	here=`pwd`; \
! 	list='$(SOURCES) $(HEADERS)'; \
! 	unique=`for i in $$list; do echo $$i; done | \
! 	  awk '    { files[$$0] = 1; } \
  	       END { for (i in files) print i; }'`; \
! 	test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
! 	  || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags  $$unique $(LISP) -o $$here/TAGS)
! 
! mostlyclean-tags:
  
! clean-tags:
  
  distclean-tags:
! 	-rm -f TAGS ID
! 
! maintainer-clean-tags:
! 
! distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
! 
! subdir = include
  
  distdir: $(DISTFILES)
! 	@for file in $(DISTFILES); do \
! 	  if test -f $$file; then d=.; else d=$(srcdir); fi; \
  	  if test -d $$d/$$file; then \
! 	    cp -pr $$d/$$file $(distdir)/$$file; \
  	  else \
  	    test -f $(distdir)/$$file \
! 	    || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
! 	    || cp -p $$d/$$file $(distdir)/$$file || :; \
  	  fi; \
  	done
! info-am:
! info: info-am
! dvi-am:
! dvi: dvi-am
! check-am:
  check: check-am
! installcheck-am:
! installcheck: installcheck-am
! install-info-am: 
! install-info: install-info-am
! install-exec-am:
  install-exec: install-exec-am
- 
- install-data-am:
  install-data: install-data-am
  
  install-am: all-am
  	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
- install: install-am
- uninstall-am:
- uninstall: uninstall-am
- all-am: Makefile $(HEADERS)
- all-redirect: all-am
- install-strip:
- 	$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
- installdirs:
- 
  
  mostlyclean-generic:
  
  clean-generic:
  
  distclean-generic:
! 	-rm -f Makefile $(CONFIG_CLEAN_FILES)
! 	-rm -f config.cache config.log stamp-h stamp-h[0-9]*
  
  maintainer-clean-generic:
! mostlyclean-am:  mostlyclean-tags mostlyclean-generic
  
! mostlyclean: mostlyclean-am
  
! clean-am:  clean-tags clean-generic mostlyclean-am
  
! clean: clean-am
  
! distclean-am:  distclean-tags distclean-generic clean-am
! 	-rm -f libtool
  
! distclean: distclean-am
  
! maintainer-clean-am:  maintainer-clean-tags maintainer-clean-generic \
! 		distclean-am
! 	@echo "This command is intended for maintainers to use;"
! 	@echo "it deletes files that may require special tools to rebuild."
  
  maintainer-clean: maintainer-clean-am
  
! .PHONY: tags mostlyclean-tags distclean-tags clean-tags \
! maintainer-clean-tags distdir info-am info dvi-am dvi check check-am \
! installcheck-am installcheck install-info-am install-info \
! install-exec-am install-exec install-data-am install-data install-am \
! install uninstall-am uninstall all-redirect all-am all installdirs \
! mostlyclean-generic distclean-generic clean-generic \
! maintainer-clean-generic clean mostlyclean distclean maintainer-clean
  
  
  # Tell versions [3.59,3.63) of GNU make to not export all variables.
  # Otherwise a system limit (for SysV at least) may be exceeded.
--- 12,416 ----
  # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  # PARTICULAR PURPOSE.
  
! @SET_MAKE@
  
  srcdir = @srcdir@
  top_srcdir = @top_srcdir@
  VPATH = @srcdir@
  pkgdatadir = $(datadir)/@PACKAGE@
  pkglibdir = $(libdir)/@PACKAGE@
  pkgincludedir = $(includedir)/@PACKAGE@
  top_builddir = ..
! am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
  INSTALL = @INSTALL@
! install_sh_DATA = $(install_sh) -c -m 644
! install_sh_PROGRAM = $(install_sh) -c
! install_sh_SCRIPT = $(install_sh) -c
! INSTALL_HEADER = $(INSTALL_DATA)
! transform = $(program_transform_name)
  NORMAL_INSTALL = :
  PRE_INSTALL = :
  POST_INSTALL = :
  NORMAL_UNINSTALL = :
  PRE_UNINSTALL = :
  POST_UNINSTALL = :
  build_triplet = @build@
  host_triplet = @host@
  target_triplet = @target@
+ subdir = include
+ DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+ 	$(srcdir)/Makefile.in $(srcdir)/gc_config.h.in \
+ 	$(srcdir)/gc_ext_config.h.in
+ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
+ 	$(top_srcdir)/../config/no-executables.m4 \
+ 	$(top_srcdir)/../libtool.m4 $(top_srcdir)/configure.ac
+ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ 	$(ACLOCAL_M4)
+ CONFIG_HEADER = gc_config.h gc_ext_config.h
+ CONFIG_CLEAN_FILES =
+ SOURCES =
+ DIST_SOURCES =
+ HEADERS = $(noinst_HEADERS)
+ ETAGS = etags
+ CTAGS = ctags
+ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ ACLOCAL = @ACLOCAL@
+ AMDEP_FALSE = @AMDEP_FALSE@
+ AMDEP_TRUE = @AMDEP_TRUE@
+ AMTAR = @AMTAR@
+ AM_CPPFLAGS = @AM_CPPFLAGS@
  AR = @AR@
  AS = @AS@
+ AUTOCONF = @AUTOCONF@
+ AUTOHEADER = @AUTOHEADER@
+ AUTOMAKE = @AUTOMAKE@
+ AWK = @AWK@
  CC = @CC@
+ CCAS = @CCAS@
+ CCASFLAGS = @CCASFLAGS@
+ CCDEPMODE = @CCDEPMODE@
  CFLAGS = @CFLAGS@
+ CPLUSPLUS_FALSE = @CPLUSPLUS_FALSE@
+ CPLUSPLUS_TRUE = @CPLUSPLUS_TRUE@
  CPP = @CPP@
+ CPPFLAGS = @CPPFLAGS@
  CXX = @CXX@
  CXXCPP = @CXXCPP@
+ CXXDEPMODE = @CXXDEPMODE@
  CXXFLAGS = @CXXFLAGS@
! CYGPATH_W = @CYGPATH_W@
! DEFS = @DEFS@
! DEPDIR = @DEPDIR@
! ECHO_C = @ECHO_C@
! ECHO_N = @ECHO_N@
! ECHO_T = @ECHO_T@
! EGREP = @EGREP@
  EXEEXT = @EXEEXT@
  EXTRA_TEST_LIBS = @EXTRA_TEST_LIBS@
  GC_CFLAGS = @GC_CFLAGS@
! INSTALL_DATA = @INSTALL_DATA@
! INSTALL_PROGRAM = @INSTALL_PROGRAM@
! INSTALL_SCRIPT = @INSTALL_SCRIPT@
! INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
! LIBOBJS = @LIBOBJS@
! LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
  MAINT = @MAINT@
+ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
  MAKEINFO = @MAKEINFO@
  MY_CFLAGS = @MY_CFLAGS@
  OBJEXT = @OBJEXT@
  PACKAGE = @PACKAGE@
+ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+ PACKAGE_NAME = @PACKAGE_NAME@
+ PACKAGE_STRING = @PACKAGE_STRING@
+ PACKAGE_TARNAME = @PACKAGE_TARNAME@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+ POWERPC_DARWIN_FALSE = @POWERPC_DARWIN_FALSE@
+ POWERPC_DARWIN_TRUE = @POWERPC_DARWIN_TRUE@
  RANLIB = @RANLIB@
+ SET_MAKE = @SET_MAKE@
+ SHELL = @SHELL@
  STRIP = @STRIP@
  THREADLIBS = @THREADLIBS@
  VERSION = @VERSION@
+ ac_ct_AR = @ac_ct_AR@
+ ac_ct_AS = @ac_ct_AS@
+ ac_ct_CC = @ac_ct_CC@
+ ac_ct_CXX = @ac_ct_CXX@
+ ac_ct_RANLIB = @ac_ct_RANLIB@
+ ac_ct_STRIP = @ac_ct_STRIP@
  addincludes = @addincludes@
  addlibs = @addlibs@
  addobjs = @addobjs@
  addtests = @addtests@
! am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
! am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
! am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
! am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
! am__include = @am__include@
! am__leading_dot = @am__leading_dot@
! am__quote = @am__quote@
! am__tar = @am__tar@
! am__untar = @am__untar@
! bindir = @bindir@
! build = @build@
! build_alias = @build_alias@
! build_cpu = @build_cpu@
! build_os = @build_os@
! build_vendor = @build_vendor@
! datadir = @datadir@
! exec_prefix = @exec_prefix@
! host = @host@
! host_alias = @host_alias@
! host_cpu = @host_cpu@
! host_os = @host_os@
! host_vendor = @host_vendor@
! includedir = @includedir@
! infodir = @infodir@
! install_sh = @install_sh@
! libdir = @libdir@
! libexecdir = @libexecdir@
! localstatedir = @localstatedir@
! mandir = @mandir@
! mkdir_p = @mkdir_p@
  mkinstalldirs = @mkinstalldirs@
+ multi_basedir = @multi_basedir@
+ oldincludedir = @oldincludedir@
+ prefix = @prefix@
+ program_transform_name = @program_transform_name@
+ sbindir = @sbindir@
+ sharedstatedir = @sharedstatedir@
+ sysconfdir = @sysconfdir@
+ target = @target@
+ target_alias = @target_alias@
  target_all = @target_all@
+ target_cpu = @target_cpu@
+ target_noncanonical = @target_noncanonical@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
  toolexecdir = @toolexecdir@
  toolexeclibdir = @toolexeclibdir@
  AUTOMAKE_OPTIONS = foreign
  noinst_HEADERS = gc.h gc_backptr.h gc_local_alloc.h \
    gc_pthread_redirects.h gc_cpp.h
  
! all: gc_config.h gc_ext_config.h
! 	$(MAKE) $(AM_MAKEFLAGS) all-am
  
! .SUFFIXES:
! $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
! 	@for dep in $?; do \
! 	  case '$(am__configure_deps)' in \
! 	    *$$dep*) \
! 	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
! 		&& exit 0; \
! 	      exit 1;; \
! 	  esac; \
! 	done; \
! 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  include/Makefile'; \
! 	cd $(top_srcdir) && \
! 	  $(AUTOMAKE) --foreign  include/Makefile
! .PRECIOUS: Makefile
! Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
! 	@case '$?' in \
! 	  *config.status*) \
! 	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
! 	  *) \
! 	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
! 	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
! 	esac;
  
+ $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
  
! $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
! 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
! $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
! 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
  
! gc_config.h: stamp-h1
! 	@if test ! -f $@; then \
! 	  rm -f stamp-h1; \
! 	  $(MAKE) stamp-h1; \
! 	else :; fi
  
! stamp-h1: $(srcdir)/gc_config.h.in $(top_builddir)/config.status
! 	@rm -f stamp-h1
! 	cd $(top_builddir) && $(SHELL) ./config.status include/gc_config.h
! $(srcdir)/gc_config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) 
! 	cd $(top_srcdir) && $(AUTOHEADER)
! 	rm -f stamp-h1
! 	touch $@
  
+ gc_ext_config.h: stamp-h2
+ 	@if test ! -f $@; then \
+ 	  rm -f stamp-h2; \
+ 	  $(MAKE) stamp-h2; \
+ 	else :; fi
  
! stamp-h2: $(srcdir)/gc_ext_config.h.in $(top_builddir)/config.status
! 	@rm -f stamp-h2
! 	cd $(top_builddir) && $(SHELL) ./config.status include/gc_ext_config.h
  
! distclean-hdr:
! 	-rm -f gc_config.h stamp-h1 gc_ext_config.h stamp-h2
! 
! mostlyclean-libtool:
! 	-rm -f *.lo
! 
! clean-libtool:
! 	-rm -rf .libs _libs
! 
! distclean-libtool:
! 	-rm -f libtool
! uninstall-info-am:
! 
! ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
! 	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
! 	unique=`for i in $$list; do \
! 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
! 	  done | \
! 	  $(AWK) '    { files[$$0] = 1; } \
  	       END { for (i in files) print i; }'`; \
! 	mkid -fID $$unique
! tags: TAGS
  
! TAGS:  $(HEADERS) $(SOURCES) gc_config.h.in gc_ext_config.h.in $(TAGS_DEPENDENCIES) \
! 		$(TAGS_FILES) $(LISP)
  	tags=; \
  	here=`pwd`; \
! 	list='$(SOURCES) $(HEADERS) gc_config.h.in gc_ext_config.h.in $(LISP) $(TAGS_FILES)'; \
! 	unique=`for i in $$list; do \
! 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
! 	  done | \
! 	  $(AWK) '    { files[$$0] = 1; } \
  	       END { for (i in files) print i; }'`; \
! 	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
! 	  test -n "$$unique" || unique=$$empty_fix; \
! 	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
! 	    $$tags $$unique; \
! 	fi
! ctags: CTAGS
! CTAGS:  $(HEADERS) $(SOURCES) gc_config.h.in gc_ext_config.h.in $(TAGS_DEPENDENCIES) \
! 		$(TAGS_FILES) $(LISP)
! 	tags=; \
! 	here=`pwd`; \
! 	list='$(SOURCES) $(HEADERS) gc_config.h.in gc_ext_config.h.in $(LISP) $(TAGS_FILES)'; \
! 	unique=`for i in $$list; do \
! 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
! 	  done | \
! 	  $(AWK) '    { files[$$0] = 1; } \
! 	       END { for (i in files) print i; }'`; \
! 	test -z "$(CTAGS_ARGS)$$tags$$unique" \
! 	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
! 	     $$tags $$unique
  
! GTAGS:
! 	here=`$(am__cd) $(top_builddir) && pwd` \
! 	  && cd $(top_srcdir) \
! 	  && gtags -i $(GTAGS_ARGS) $$here
  
  distclean-tags:
! 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
  
  distdir: $(DISTFILES)
! 	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
! 	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
! 	list='$(DISTFILES)'; for file in $$list; do \
! 	  case $$file in \
! 	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
! 	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
! 	  esac; \
! 	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
! 	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
! 	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
! 	    dir="/$$dir"; \
! 	    $(mkdir_p) "$(distdir)$$dir"; \
! 	  else \
! 	    dir=''; \
! 	  fi; \
  	  if test -d $$d/$$file; then \
! 	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
! 	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
! 	    fi; \
! 	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
  	  else \
  	    test -f $(distdir)/$$file \
! 	    || cp -p $$d/$$file $(distdir)/$$file \
! 	    || exit 1; \
  	  fi; \
  	done
! check-am: all-am
  check: check-am
! all-am: Makefile $(HEADERS) gc_config.h gc_ext_config.h
! installdirs:
! install: install-am
  install-exec: install-exec-am
  install-data: install-data-am
+ uninstall: uninstall-am
  
  install-am: all-am
  	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
  
+ installcheck: installcheck-am
+ install-strip:
+ 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ 	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ 	  `test -z '$(STRIP)' || \
+ 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
  mostlyclean-generic:
  
  clean-generic:
  
  distclean-generic:
! 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
  
  maintainer-clean-generic:
! 	@echo "This command is intended for maintainers to use"
! 	@echo "it deletes files that may require special tools to rebuild."
! clean: clean-am
  
! clean-am: clean-generic clean-libtool mostlyclean-am
  
! distclean: distclean-am
! 	-rm -f Makefile
! distclean-am: clean-am distclean-generic distclean-hdr \
! 	distclean-libtool distclean-tags
  
! dvi: dvi-am
  
! dvi-am:
  
! html: html-am
  
! info: info-am
! 
! info-am:
! 
! install-data-am:
! 
! install-exec-am:
! 
! install-info: install-info-am
! 
! install-man:
! 
! installcheck-am:
  
  maintainer-clean: maintainer-clean-am
+ 	-rm -f Makefile
+ maintainer-clean-am: distclean-am maintainer-clean-generic
  
! mostlyclean: mostlyclean-am
! 
! mostlyclean-am: mostlyclean-generic mostlyclean-libtool
  
+ pdf: pdf-am
+ 
+ pdf-am:
+ 
+ ps: ps-am
+ 
+ ps-am:
+ 
+ uninstall-am: uninstall-info-am
+ 
+ .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ 	clean-libtool ctags distclean distclean-generic distclean-hdr \
+ 	distclean-libtool distclean-tags distdir dvi dvi-am html \
+ 	html-am info info-am install install-am install-data \
+ 	install-data-am install-exec install-exec-am install-info \
+ 	install-info-am install-man install-strip installcheck \
+ 	installcheck-am installdirs maintainer-clean \
+ 	maintainer-clean-generic mostlyclean mostlyclean-generic \
+ 	mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
+ 	uninstall-am uninstall-info-am
  
  # Tell versions [3.59,3.63) of GNU make to not export all variables.
  # Otherwise a system limit (for SysV at least) may be exceeded.
diff -Nrcpad gcc-3.4.3/boehm-gc/include/gc.h gcc-4.0.0/boehm-gc/include/gc.h
*** gcc-3.4.3/boehm-gc/include/gc.h	Thu Jul 31 04:52:36 2003
--- gcc-4.0.0/boehm-gc/include/gc.h	Sun Jan  2 03:35:57 2005
***************
*** 30,35 ****
--- 30,58 ----
  
  # define _GC_H
  
+ /* 
+  * As this header includes gc_config.h, preprocessor conflicts can occur with 
+  * clients that include their own autoconf headers. The following #undef's 
+  * work around some likely conflicts.
+  */
+ 
+ # ifdef PACKAGE_NAME
+ #   undef PACKAGE_NAME
+ # endif
+ # ifdef PACKAGE_BUGREPORT
+ #  undef PACKAGE_BUGREPORT
+ # endif
+ # ifdef PACKAGE_STRING
+ #  undef PACKAGE_STRING
+ # endif
+ # ifdef PACKAGE_TARNAME
+ #  undef PACKAGE_TARNAME
+ # endif
+ # ifdef PACKAGE_VERSION
+ #  undef PACKAGE_VERSION
+ # endif
+ 
+ # include <gc_config.h>
  # include "gc_config_macros.h"
  
  # if defined(__STDC__) || defined(__cplusplus)
***************
*** 52,62 ****
  /* even semi-portably.  The following is probably no better/worse 	*/
  /* than almost anything else.						*/
  /* The ANSI standard suggests that size_t and ptr_diff_t might be 	*/
! /* better choices.  But those appear to have incorrect definitions	*/
! /* on may systems.  Notably "typedef int size_t" seems to be both	*/
! /* frequent and WRONG.							*/
! typedef unsigned long GC_word;
! typedef long GC_signed_word;
  
  /* Public read-only variables */
  
--- 75,92 ----
  /* even semi-portably.  The following is probably no better/worse 	*/
  /* than almost anything else.						*/
  /* The ANSI standard suggests that size_t and ptr_diff_t might be 	*/
! /* better choices.  But those had incorrect definitions on some older	*/
! /* systems.  Notably "typedef int size_t" is WRONG.			*/
! #ifndef _WIN64
!   typedef unsigned long GC_word;
!   typedef long GC_signed_word;
! #else
!   /* Win64 isn't really supported yet, but this is the first step. And	*/
!   /* it might cause error messages to show up in more plausible places.	*/
!   /* This needs basetsd.h, which is included by windows.h.	 	*/
!   typedef ULONG_PTR GC_word;
!   typedef LONG_PTR GC_word;
! #endif
  
  /* Public read-only variables */
  
*************** GC_API unsigned long GC_time_limit;
*** 247,252 ****
--- 277,283 ----
   * allocation, since unlike the regular allocation routines, GC_local_malloc
   * is not self-initializing.  If you use GC_local_malloc you should arrange
   * to call this somehow (e.g. from a constructor) before doing any allocation.
+  * For win32 threads, it needs to be called explicitly.
   */
  GC_API void GC_init GC_PROTO((void));
  
*************** GC_API GC_PTR GC_malloc_atomic_ignore_of
*** 470,483 ****
  # include <features.h>
  # if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1 || __GLIBC__ > 2) \
       && !defined(__ia64__)
! #   define GC_HAVE_BUILTIN_BACKTRACE
! #   define GC_CAN_SAVE_CALL_STACKS
  # endif
  # if defined(__i386__) || defined(__x86_64__)
  #   define GC_CAN_SAVE_CALL_STACKS
  # endif
  #endif
  
  #if defined(__sparc__)
  #   define GC_CAN_SAVE_CALL_STACKS
  #endif
--- 501,519 ----
  # include <features.h>
  # if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1 || __GLIBC__ > 2) \
       && !defined(__ia64__)
! #   ifndef GC_HAVE_BUILTIN_BACKTRACE
! #     define GC_HAVE_BUILTIN_BACKTRACE
! #   endif
  # endif
  # if defined(__i386__) || defined(__x86_64__)
  #   define GC_CAN_SAVE_CALL_STACKS
  # endif
  #endif
  
+ #if defined(GC_HAVE_BUILTIN_BACKTRACE) && !defined(GC_CAN_SAVE_CALL_STACKS)
+ # define GC_CAN_SAVE_CALL_STACKS
+ #endif
+ 
  #if defined(__sparc__)
  #   define GC_CAN_SAVE_CALL_STACKS
  #endif
*************** GC_API GC_PTR GC_debug_realloc_replaceme
*** 604,610 ****
  
  /* Finalization.  Some of these primitives are grossly unsafe.		*/
  /* The idea is to make them both cheap, and sufficient to build		*/
! /* a safer layer, closer to PCedar finalization.			*/
  /* The interface represents my conclusions from a long discussion	*/
  /* with Alan Demers, Dan Greene, Carl Hauser, Barry Hayes, 		*/
  /* Christian Jacobi, and Russ Atkinson.  It's not perfect, and		*/
--- 640,646 ----
  
  /* Finalization.  Some of these primitives are grossly unsafe.		*/
  /* The idea is to make them both cheap, and sufficient to build		*/
! /* a safer layer, closer to Modula-3, Java, or PCedar finalization.	*/
  /* The interface represents my conclusions from a long discussion	*/
  /* with Alan Demers, Dan Greene, Carl Hauser, Barry Hayes, 		*/
  /* Christian Jacobi, and Russ Atkinson.  It's not perfect, and		*/
*************** GC_API GC_PTR GC_call_with_alloc_lock
*** 774,779 ****
--- 810,816 ----
  
  /* The following routines are primarily intended for use with a 	*/
  /* preprocessor which inserts calls to check C pointer arithmetic.	*/
+ /* They indicate failure by invoking the corresponding _print_proc.	*/
  
  /* Check that p and q point to the same object.  		*/
  /* Fail conspicuously if they don't.				*/
*************** GC_API GC_PTR GC_is_valid_displacement G
*** 851,857 ****
  #   define GC_PTR_STORE(p, q) *((p) = (q))
  #endif
  
! /* Fynctions called to report pointer checking errors */
  GC_API void (*GC_same_obj_print_proc) GC_PROTO((GC_PTR p, GC_PTR q));
  
  GC_API void (*GC_is_valid_displacement_print_proc)
--- 888,894 ----
  #   define GC_PTR_STORE(p, q) *((p) = (q))
  #endif
  
! /* Functions called to report pointer checking errors */
  GC_API void (*GC_same_obj_print_proc) GC_PROTO((GC_PTR p, GC_PTR q));
  
  GC_API void (*GC_is_valid_displacement_print_proc)
*************** extern void GC_thr_init();	/* Needed for
*** 919,931 ****
  
  #endif /* defined(GC_WIN32_THREADS)  && !cygwin */
  
! /*
!  * If you are planning on putting
!  * the collector in a SunOS 5 dynamic library, you need to call GC_INIT()
!  * from the statically loaded program section.
!  * This circumvents a Solaris 2.X (X<=4) linker bug.
!  */
! #if defined(sparc) || defined(__sparc)
  #   define GC_INIT() { extern end, etext; \
  		       GC_noop(&end, &etext); }
  #else
--- 956,974 ----
  
  #endif /* defined(GC_WIN32_THREADS)  && !cygwin */
  
!  /*
!   * Fully portable code should call GC_INIT() from the main program
!   * before making any other GC_ calls.  On most platforms this is a
!   * no-op and the collector self-initializes.  But a number of platforms
!   * make that too hard.
!   */
! #if (defined(sparc) || defined(__sparc)) && defined(sun)
!     /*
!      * If you are planning on putting
!      * the collector in a SunOS 5 dynamic library, you need to call GC_INIT()
!      * from the statically loaded program section.
!      * This circumvents a Solaris 2.X (X<=4) linker bug.
!      */
  #   define GC_INIT() { extern end, etext; \
  		       GC_noop(&end, &etext); }
  #else
*************** extern void GC_thr_init();	/* Needed for
*** 936,948 ****
       */
  #   define GC_INIT() { GC_add_roots(DATASTART, DATAEND); }
  # else
! #  if defined(__APPLE__) && defined(__MACH__)
  #   define GC_INIT() { GC_init(); }
  #  else
  #   define GC_INIT()
! #  endif
! # endif
! #endif
  
  #if !defined(_WIN32_WCE) \
      && ((defined(_MSDOS) || defined(_MSC_VER)) && (_M_IX86 >= 300) \
--- 979,991 ----
       */
  #   define GC_INIT() { GC_add_roots(DATASTART, DATAEND); }
  # else
! #  if defined(__APPLE__) && defined(__MACH__) || defined(GC_WIN32_THREADS)
  #   define GC_INIT() { GC_init(); }
  #  else
  #   define GC_INIT()
! #  endif /* !__MACH && !GC_WIN32_THREADS */
! # endif /* !AIX && !cygwin */
! #endif /* !sparc */
  
  #if !defined(_WIN32_WCE) \
      && ((defined(_MSDOS) || defined(_MSC_VER)) && (_M_IX86 >= 300) \
diff -Nrcpad gcc-3.4.3/boehm-gc/include/gc_allocator.h gcc-4.0.0/boehm-gc/include/gc_allocator.h
*** gcc-3.4.3/boehm-gc/include/gc_allocator.h	Mon Jul 28 03:46:17 2003
--- gcc-4.0.0/boehm-gc/include/gc_allocator.h	Fri Aug 13 23:05:32 2004
***************
*** 35,41 ****
   * library, which itself was derived from the SGI STL implementation.
   */
  
! #include "gc.h" 	// For size_t
  
  /* First some helpers to allow us to dispatch on whether or not a type
   * is known to be pointerfree.
--- 35,51 ----
   * library, which itself was derived from the SGI STL implementation.
   */
  
! #ifndef GC_ALLOCATOR_H
! 
! #define GC_ALLOCATOR_H
! 
! #include "gc.h"
! 
! #if defined(__GNUC__)
! #  define GC_ATTR_UNUSED __attribute__((unused))
! #else
! #  define GC_ATTR_UNUSED
! #endif
  
  /* First some helpers to allow us to dispatch on whether or not a type
   * is known to be pointerfree.
*************** public:
*** 118,124 ****
    }
  
    // __p is not permitted to be a null pointer.
!   void deallocate(pointer __p, size_type GC_n)
      { GC_FREE(__p); }
  
    size_type max_size() const throw()
--- 128,134 ----
    }
  
    // __p is not permitted to be a null pointer.
!   void deallocate(pointer __p, size_type GC_ATTR_UNUSED GC_n)
      { GC_FREE(__p); }
  
    size_type max_size() const throw()
*************** public:
*** 194,200 ****
    }
  
    // __p is not permitted to be a null pointer.
!   void deallocate(pointer __p, size_type GC_n)
      { GC_FREE(__p); }
  
    size_type max_size() const throw()
--- 204,210 ----
    }
  
    // __p is not permitted to be a null pointer.
!   void deallocate(pointer __p, size_type GC_ATTR_UNUSED GC_n)
      { GC_FREE(__p); }
  
    size_type max_size() const throw()
*************** inline bool operator!=(const traceable_a
*** 230,232 ****
--- 240,243 ----
    return false;
  }
  
+ #endif /* GC_ALLOCATOR_H */
diff -Nrcpad gcc-3.4.3/boehm-gc/include/gc_config.h.in gcc-4.0.0/boehm-gc/include/gc_config.h.in
*** gcc-3.4.3/boehm-gc/include/gc_config.h.in	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/boehm-gc/include/gc_config.h.in	Wed Feb 16 04:10:42 2005
***************
*** 0 ****
--- 1,155 ----
+ /* include/gc_config.h.in.  Generated from configure.ac by autoheader.  */
+ 
+ /* allows all pointers to the interior of objects to be recognized */
+ #undef ALL_INTERIOR_POINTERS
+ 
+ /* include code for GC_malloc_atomic_uncollectable */
+ #undef ATOMIC_UNCOLLECTABLE
+ 
+ /* No description */
+ #undef DATASTART_IS_ETEXT
+ 
+ /* Make sure that all objects have debug headers */
+ #undef DBG_HDRS_ALL
+ 
+ /* No description */
+ #undef DGUX_THREADS
+ 
+ /* Target is ECOS */
+ #undef ECOS
+ 
+ /* support AIX threads */
+ #undef GC_AIX_THREADS
+ 
+ /* support for Mac OS X pthreads */
+ #undef GC_DARWIN_THREADS
+ 
+ /* support for DB/UX on I386 threads */
+ #undef GC_DGUX386_THREADS
+ 
+ /* support FreeBSD threads */
+ #undef GC_FREEBSD_THREADS
+ 
+ /* include support for gcj */
+ #undef GC_GCJ_SUPPORT
+ 
+ /* enables support for HP/UX 11 pthreads */
+ #undef GC_HPUX_THREADS
+ 
+ /* support for Irix pthreads */
+ #undef GC_IRIX_THREADS
+ 
+ /* support for Xavier Leroy's Linux threads */
+ #undef GC_LINUX_THREADS
+ 
+ /* support for Tru64 pthreads */
+ #undef GC_OSF1_THREADS
+ 
+ /* support for Solaris pthreads */
+ #undef GC_SOLARIS_PTHREADS
+ 
+ /* support for Solaris (thr_) threads */
+ #undef GC_SOLARIS_THREADS
+ 
+ /* support for win32 threads */
+ #undef GC_WIN32_THREADS
+ 
+ /* Define to 1 if you have the <inttypes.h> header file. */
+ #undef HAVE_INTTYPES_H
+ 
+ /* Define to 1 if you have the <memory.h> header file. */
+ #undef HAVE_MEMORY_H
+ 
+ /* Define to 1 if you have the <stdint.h> header file. */
+ #undef HAVE_STDINT_H
+ 
+ /* Define to 1 if you have the <stdlib.h> header file. */
+ #undef HAVE_STDLIB_H
+ 
+ /* Define to 1 if you have the <strings.h> header file. */
+ #undef HAVE_STRINGS_H
+ 
+ /* Define to 1 if you have the <string.h> header file. */
+ #undef HAVE_STRING_H
+ 
+ /* Define to 1 if you have the <sys/stat.h> header file. */
+ #undef HAVE_SYS_STAT_H
+ 
+ /* Define to 1 if you have the <sys/types.h> header file. */
+ #undef HAVE_SYS_TYPES_H
+ 
+ /* Define to 1 if you have the <unistd.h> header file. */
+ #undef HAVE_UNISTD_H
+ 
+ /* make it somewhat safer to finalize objects out of order */
+ #undef JAVA_FINALIZATION
+ 
+ /* Add code to save back pointers */
+ #undef KEEP_BACK_PTRS
+ 
+ /* Enable GC_PRINT_BACK_HEIGHT environment variable */
+ #undef MAKE_BACK_GRAPH
+ 
+ /* removes GC_dump */
+ #undef NO_DEBUGGING
+ 
+ /* cause some or all of the heap to not have execute permission */
+ #undef NO_EXECUTE_PERMISSION
+ 
+ /* Define to 1 if your C compiler doesn't accept -c and -o together. */
+ #undef NO_MINUS_C_MINUS_O
+ 
+ /* does not disable signals */
+ #undef NO_SIGNALS
+ 
+ /* use empty GC_disable_signals and GC_enable_signals */
+ #undef NO_SIGSET
+ 
+ /* Define to the address where bug reports for this package should be sent. */
+ #undef PACKAGE_BUGREPORT
+ 
+ /* Define to the full name of this package. */
+ #undef PACKAGE_NAME
+ 
+ /* Define to the full name and version of this package. */
+ #undef PACKAGE_STRING
+ 
+ /* Define to the one symbol short name of this package. */
+ #undef PACKAGE_TARNAME
+ 
+ /* Define to the version of this package. */
+ #undef PACKAGE_VERSION
+ 
+ /* allow the marker to run in multiple threads */
+ #undef PARALLEL_MARK
+ 
+ /* number of call frames saved with objects allocated through the debugging
+    interface */
+ #undef SAVE_CALL_COUNT
+ 
+ /* disables statistics printing */
+ #undef SILENT
+ 
+ /* PROC_VDB in Solaris 2.5 gives wrong values for dirty bits */
+ #undef SOLARIS25_PROC_VDB_BUG_FIXED
+ 
+ /* No description */
+ #undef STACKBASE
+ 
+ /* Define to 1 if you have the ANSI C header files. */
+ #undef STDC_HEADERS
+ 
+ /* Avoid Solaris 5.3 dynamic library bug */
+ #undef SUNOS53_SHARED_LIB
+ 
+ /* define GC_local_malloc() & GC_local_malloc_atomic() */
+ #undef THREAD_LOCAL_ALLOC
+ 
+ /* use MMAP instead of sbrk to get new memory */
+ #undef USE_MMAP
+ 
+ /* POSIX version of C Source */
+ #undef _POSIX_C_SOURCE
+ 
+ /* Use reentrant code */
+ #undef _REENTRANT
diff -Nrcpad gcc-3.4.3/boehm-gc/include/gc_config_macros.h gcc-4.0.0/boehm-gc/include/gc_config_macros.h
*** gcc-3.4.3/boehm-gc/include/gc_config_macros.h	Mon Jul 28 03:46:17 2003
--- gcc-4.0.0/boehm-gc/include/gc_config_macros.h	Fri Aug 13 23:05:32 2004
***************
*** 1,43 ****
  /*
   * This should never be included directly.  It is included only from gc.h.
   * We separate it only to make gc.h more suitable as documentation.
-  * 
-  * Some tests for old macros.  These violate our namespace rules and will
-  * disappear shortly.  Use the GC_ names.
   */
- #if defined(SOLARIS_THREADS) || defined(_SOLARIS_THREADS)
- # define GC_SOLARIS_THREADS
- #endif
- #if defined(_SOLARIS_PTHREADS)
- # define GC_SOLARIS_PTHREADS
- #endif
- #if defined(IRIX_THREADS)
- # define GC_IRIX_THREADS
- #endif
- #if defined(DGUX_THREADS)
- # if !defined(GC_DGUX386_THREADS)
- #  define GC_DGUX386_THREADS
- # endif
- #endif
- #if defined(AIX_THREADS)
- # define GC_AIX_THREADS
- #endif
- #if defined(HPUX_THREADS)
- # define GC_HPUX_THREADS
- #endif
- #if defined(OSF1_THREADS)
- # define GC_OSF1_THREADS
- #endif
- #if defined(LINUX_THREADS)
- # define GC_LINUX_THREADS
- #endif
- #if defined(WIN32_THREADS)
- # define GC_WIN32_THREADS
- #endif
- #if defined(USE_LD_WRAP)
- # define GC_USE_LD_WRAP
- #endif
- 
  #if !defined(_REENTRANT) && (defined(GC_SOLARIS_THREADS) \
  		             || defined(GC_SOLARIS_PTHREADS) \
  			     || defined(GC_HPUX_THREADS) \
--- 1,7 ----
***************
*** 97,103 ****
  # endif
  #endif /* GC_THREADS */
  
! #if defined(GC_THREADS) && !defined(GC_PTHREADS) && defined(MSWIN32)
  # define GC_WIN32_THREADS
  #endif
  
--- 61,70 ----
  # endif
  #endif /* GC_THREADS */
  
! #if defined(GC_THREADS) && !defined(GC_PTHREADS) && \
!     (defined(_WIN32) || defined(_MSC_VER) || defined(__CYGWIN__) \
!      || defined(__MINGW32__) || defined(__BORLANDC__) \
!      || defined(_WIN32_WCE))
  # define GC_WIN32_THREADS
  #endif
  
***************
*** 106,113 ****
  #endif
  
  # define __GC
! # include <stddef.h>
! # ifdef _WIN32_WCE
  /* Yet more kluges for WinCE */
  #   include <stdlib.h>		/* size_t is defined here */
      typedef long ptrdiff_t;	/* ptrdiff_t is not defined */
--- 73,81 ----
  #endif
  
  # define __GC
! # ifndef _WIN32_WCE
! #   include <stddef.h>
! # else /* ! _WIN32_WCE */
  /* Yet more kluges for WinCE */
  #   include <stdlib.h>		/* size_t is defined here */
      typedef long ptrdiff_t;	/* ptrdiff_t is not defined */
diff -Nrcpad gcc-3.4.3/boehm-gc/include/gc_cpp.h gcc-4.0.0/boehm-gc/include/gc_cpp.h
*** gcc-3.4.3/boehm-gc/include/gc_cpp.h	Mon Jul 28 04:18:23 2003
--- gcc-4.0.0/boehm-gc/include/gc_cpp.h	Fri Aug 13 23:05:32 2004
*************** by UseGC.  GC is an alias for UseGC, unl
*** 152,157 ****
--- 152,162 ----
  #   define GC_OPERATOR_NEW_ARRAY
  #endif
  
+ #if    ! defined ( __BORLANDC__ )  /* Confuses the Borland compiler. */ \
+     && ! defined ( __sgi )
+ #  define GC_PLACEMENT_DELETE
+ #endif
+ 
  enum GCPlacement {UseGC,
  #ifndef GC_NAME_CONFLICT
  		  GC=UseGC,
*************** class gc {public:
*** 165,171 ****
      	/* Must be redefined here, since the other overloadings	*/
      	/* hide the global definition.				*/
      inline void operator delete( void* obj );
! #   ifndef __BORLANDC__  /* Confuses the Borland compiler. */
        inline void operator delete( void*, void* );
  #   endif
  
--- 170,176 ----
      	/* Must be redefined here, since the other overloadings	*/
      	/* hide the global definition.				*/
      inline void operator delete( void* obj );
! #   ifdef GC_PLACEMENT_DELETE  
        inline void operator delete( void*, void* );
  #   endif
  
*************** class gc {public:
*** 174,180 ****
      inline void* operator new[]( size_t size, GCPlacement gcp );
      inline void* operator new[]( size_t size, void *p );
      inline void operator delete[]( void* obj );
! #   ifndef __BORLANDC__
        inline void gc::operator delete[]( void*, void* );
  #   endif
  #endif /* GC_OPERATOR_NEW_ARRAY */
--- 179,185 ----
      inline void* operator new[]( size_t size, GCPlacement gcp );
      inline void* operator new[]( size_t size, void *p );
      inline void operator delete[]( void* obj );
! #   ifdef GC_PLACEMENT_DELETE
        inline void gc::operator delete[]( void*, void* );
  #   endif
  #endif /* GC_OPERATOR_NEW_ARRAY */
*************** inline void* gc::operator new( size_t si
*** 282,288 ****
  inline void gc::operator delete( void* obj ) {
      GC_FREE( obj );}
      
! #ifndef __BORLANDC__
    inline void gc::operator delete( void*, void* ) {}
  #endif
  
--- 287,293 ----
  inline void gc::operator delete( void* obj ) {
      GC_FREE( obj );}
      
! #ifdef GC_PLACEMENT_DELETE
    inline void gc::operator delete( void*, void* ) {}
  #endif
  
*************** inline void* gc::operator new[]( size_t 
*** 300,306 ****
  inline void gc::operator delete[]( void* obj ) {
      gc::operator delete( obj );}
  
! #ifndef __BORLANDC__
    inline void gc::operator delete[]( void*, void* ) {}
  #endif
      
--- 305,311 ----
  inline void gc::operator delete[]( void* obj ) {
      gc::operator delete( obj );}
  
! #ifdef GC_PLACEMENT_DELETE
    inline void gc::operator delete[]( void*, void* ) {}
  #endif
      
diff -Nrcpad gcc-3.4.3/boehm-gc/include/gc_ext_config.h.in gcc-4.0.0/boehm-gc/include/gc_ext_config.h.in
*** gcc-3.4.3/boehm-gc/include/gc_ext_config.h.in	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/boehm-gc/include/gc_ext_config.h.in	Sun Jan  2 03:35:57 2005
***************
*** 0 ****
--- 1,5 ----
+ /* include/gc_ext_config.h.in.  This contains definitions needed by
+ external clients that do not want to include the full gc.h.  Currently this
+ is used by libjava/include/boehm-gc.h. */
+ 
+ #undef THREAD_LOCAL_ALLOC
diff -Nrcpad gcc-3.4.3/boehm-gc/include/gc_gcj.h gcc-4.0.0/boehm-gc/include/gc_gcj.h
*** gcc-3.4.3/boehm-gc/include/gc_gcj.h	Tue Oct 16 09:01:38 2001
--- gcc-4.0.0/boehm-gc/include/gc_gcj.h	Fri Aug 13 23:05:32 2004
***************
*** 53,59 ****
  /* respectively for the allocated objects.  Mark_proc will be 		*/
  /* used to build the descriptor for objects allocated through the	*/
  /* debugging interface.  The mark_proc will be invoked on all such 	*/
! /* objects with an "environment" value of 1.  The client may chose	*/
  /* to use the same mark_proc for some of its generated mark descriptors.*/
  /* In that case, it should use a different "environment" value to	*/
  /* detect the presence or absence of the debug header.			*/
--- 53,59 ----
  /* respectively for the allocated objects.  Mark_proc will be 		*/
  /* used to build the descriptor for objects allocated through the	*/
  /* debugging interface.  The mark_proc will be invoked on all such 	*/
! /* objects with an "environment" value of 1.  The client may choose	*/
  /* to use the same mark_proc for some of its generated mark descriptors.*/
  /* In that case, it should use a different "environment" value to	*/
  /* detect the presence or absence of the debug header.			*/
*************** extern void * GC_debug_gcj_fast_malloc(s
*** 88,93 ****
--- 88,104 ----
  extern void * GC_gcj_malloc_ignore_off_page(size_t lb,
  				void * ptr_to_struct_containing_descr);
  
+ /* The kind numbers of normal and debug gcj objects.		*/
+ /* Useful only for debug support, we hope.			*/
+ extern int GC_gcj_kind;
+ 
+ extern int GC_gcj_debug_kind;
+ 
+ # if defined(GC_LOCAL_ALLOC_H) && defined(GC_REDIRECT_TO_LOCAL)
+     --> gc_local_alloc.h should be included after this.  Otherwise
+     --> we undo the redirection.
+ # endif
+ 
  # ifdef GC_DEBUG
  #   define GC_GCJ_MALLOC(s,d) GC_debug_gcj_malloc(s,d,GC_EXTRAS)
  #   define GC_GCJ_FAST_MALLOC(s,d) GC_debug_gcj_fast_malloc(s,d,GC_EXTRAS)
diff -Nrcpad gcc-3.4.3/boehm-gc/include/gc_local_alloc.h gcc-4.0.0/boehm-gc/include/gc_local_alloc.h
*** gcc-3.4.3/boehm-gc/include/gc_local_alloc.h	Mon Jul 28 04:18:23 2003
--- gcc-4.0.0/boehm-gc/include/gc_local_alloc.h	Fri Aug 13 23:05:32 2004
*************** GC_PTR GC_local_malloc_atomic(size_t byt
*** 61,66 ****
--- 61,67 ----
  #endif
  
  # ifdef GC_DEBUG
+     /* We don't really use local allocation in this case.	*/
  #   define GC_LOCAL_MALLOC(s) GC_debug_malloc(s,GC_EXTRAS)
  #   define GC_LOCAL_MALLOC_ATOMIC(s) GC_debug_malloc_atomic(s,GC_EXTRAS)
  #   ifdef GC_GCJ_SUPPORT
diff -Nrcpad gcc-3.4.3/boehm-gc/include/gc_mark.h gcc-4.0.0/boehm-gc/include/gc_mark.h
*** gcc-3.4.3/boehm-gc/include/gc_mark.h	Mon Jul 28 04:18:23 2003
--- gcc-4.0.0/boehm-gc/include/gc_mark.h	Fri Aug 13 23:05:32 2004
***************
*** 19,28 ****
   * This interface should not be used by normal C or C++ clients.
   * It will be useful to runtimes for other languages.
   * 
!  * Note that this file is not "namespace-clean", i.e. it introduces names
!  * not prefixed with GC_, which may collide with the client's names.  It
!  * should be included only in those few places that directly provide
!  * information to the collector.
   */
  #ifndef GC_MARK_H
  # define GC_MARK_H
--- 19,26 ----
   * This interface should not be used by normal C or C++ clients.
   * It will be useful to runtimes for other languages.
   * 
!  * This is an experts-only interface!  There are many ways to break the
!  * collector in subtle ways by using this functionality.
   */
  #ifndef GC_MARK_H
  # define GC_MARK_H
*************** struct GC_ms_entry *GC_mark_and_push
*** 143,147 ****
--- 141,203 ----
  	  GC_mark_and_push(obj, msp, lim, src) : \
  	  msp)
  
+ extern size_t GC_debug_header_size;
+        /* The size of the header added to objects allocated through    */
+        /* the GC_debug routines.                                       */
+        /* Defined as a variable so that client mark procedures don't   */
+        /* need to be recompiled for collector version changes.         */
+ #define GC_USR_PTR_FROM_BASE(p) ((GC_PTR)((char *)(p) + GC_debug_header_size))
+ 
+ /* And some routines to support creation of new "kinds", e.g. with	*/
+ /* custom mark procedures, by language runtimes.			*/
+ /* The _inner versions assume the caller holds the allocation lock.	*/
+ 
+ /* Return a new free list array.	*/
+ void ** GC_new_free_list GC_PROTO((void));
+ void ** GC_new_free_list_inner GC_PROTO((void));
+ 
+ /* Return a new kind, as specified. */
+ int GC_new_kind GC_PROTO((void **free_list, GC_word mark_descriptor_template,
+ 		          int add_size_to_descriptor, int clear_new_objects));
+ 		/* The last two parameters must be zero or one. */
+ int GC_new_kind_inner GC_PROTO((void **free_list,
+ 				GC_word mark_descriptor_template,
+ 		                int add_size_to_descriptor,
+ 				int clear_new_objects));
+ 
+ /* Return a new mark procedure identifier, suitable for use as	*/
+ /* the first argument in GC_MAKE_PROC.				*/
+ int GC_new_proc GC_PROTO((GC_mark_proc));
+ int GC_new_proc_inner GC_PROTO((GC_mark_proc));
+ 
+ /* Allocate an object of a given kind.  Note that in multithreaded	*/
+ /* contexts, this is usually unsafe for kinds that have the descriptor	*/
+ /* in the object itself, since there is otherwise a window in which	*/
+ /* the descriptor is not correct.  Even in the single-threaded case,	*/
+ /* we need to be sure that cleared objects on a free list don't		*/
+ /* cause a GC crash if they are accidentally traced.			*/
+ /* ptr_t */char * GC_generic_malloc GC_PROTO((GC_word lb, int k));
+ 
+ /* FIXME - Should return void *, but that requires other changes.	*/
+ 
+ typedef void (*GC_describe_type_fn) GC_PROTO((void *p, char *out_buf));
+ 				/* A procedure which			*/
+ 				/* produces a human-readable 		*/
+ 				/* description of the "type" of object	*/
+ 				/* p into the buffer out_buf of length	*/
+ 				/* GC_TYPE_DESCR_LEN.  This is used by	*/
+ 				/* the debug support when printing 	*/
+ 				/* objects.				*/ 
+ 				/* These functions should be as robust	*/
+ 				/* as possible, though we do avoid 	*/
+ 				/* invoking them on objects on the 	*/
+ 				/* global free list.			*/
+ #	define GC_TYPE_DESCR_LEN 40
+ 
+ void GC_register_describe_type_fn GC_PROTO((int kind, GC_describe_type_fn knd));
+ 				/* Register a describe_type function	*/
+ 				/* to be used when printing objects	*/
+ 				/* of a particular kind.		*/
+ 
  #endif  /* GC_MARK_H */
  
diff -Nrcpad gcc-3.4.3/boehm-gc/include/javaxfc.h gcc-4.0.0/boehm-gc/include/javaxfc.h
*** gcc-3.4.3/boehm-gc/include/javaxfc.h	Fri Aug 17 18:30:50 2001
--- gcc-4.0.0/boehm-gc/include/javaxfc.h	Fri Aug 13 23:05:33 2004
***************
*** 18,41 ****
   */
  void GC_finalize_all();
  
- /*
-  * A version of GC_register_finalizer that allows the object to be
-  * finalized before the objects it references.  This is again error
-  * prone, in that it makes it easy to accidentally reference finalized
-  * objects.  Again, recommended only for JVM implementors.
-  */
- void GC_register_finalizer_no_order(GC_PTR obj,
- 			       GC_finalization_proc fn, GC_PTR cd,
- 			       GC_finalization_proc *ofn, GC_PTR * ocd);
- 
- void GC_debug_register_finalizer_no_order(GC_PTR obj,
- 			       GC_finalization_proc fn, GC_PTR cd,
- 			       GC_finalization_proc *ofn, GC_PTR * ocd);
  
- #ifdef GC_DEBUG
- #   define GC_REGISTER_FINALIZER(p, f, d, of, od) \
- 	GC_debug_register_finalizer_no_order(p, f, d, of, od)
- #else
- #   define GC_REGISTER_FINALIZER(p, f, d, of, od) \
- 	GC_register_finalizer_no_order(p, f, d, of, od)
- #endif
--- 18,21 ----
diff -Nrcpad gcc-3.4.3/boehm-gc/include/new_gc_alloc.h gcc-4.0.0/boehm-gc/include/new_gc_alloc.h
*** gcc-3.4.3/boehm-gc/include/new_gc_alloc.h	Mon Jul 28 04:18:23 2003
--- gcc-4.0.0/boehm-gc/include/new_gc_alloc.h	Fri Aug 13 23:05:33 2004
*************** __STL_END_NAMESPACE
*** 393,404 ****
  
  __STL_BEGIN_NAMESPACE
  
! template <class _T>
! struct _Alloc_traits<_T, gc_alloc >
  {
    static const bool _S_instanceless = true;
!   typedef simple_alloc<_T, gc_alloc > _Alloc_type;
!   typedef __allocator<_T, gc_alloc > allocator_type;
  };
  
  inline bool operator==(const gc_alloc&,
--- 393,404 ----
  
  __STL_BEGIN_NAMESPACE
  
! template <class _Tp>
! struct _Alloc_traits<_Tp, gc_alloc >
  {
    static const bool _S_instanceless = true;
!   typedef simple_alloc<_Tp, gc_alloc > _Alloc_type;
!   typedef __allocator<_Tp, gc_alloc > allocator_type;
  };
  
  inline bool operator==(const gc_alloc&,
*************** inline bool operator!=(const gc_alloc&,
*** 413,424 ****
    return false;
  }
  
! template <class _T>
! struct _Alloc_traits<_T, single_client_gc_alloc >
  {
    static const bool _S_instanceless = true;
!   typedef simple_alloc<_T, single_client_gc_alloc > _Alloc_type;
!   typedef __allocator<_T, single_client_gc_alloc > allocator_type;
  };
  
  inline bool operator==(const single_client_gc_alloc&,
--- 413,424 ----
    return false;
  }
  
! template <class _Tp>
! struct _Alloc_traits<_Tp, single_client_gc_alloc >
  {
    static const bool _S_instanceless = true;
!   typedef simple_alloc<_Tp, single_client_gc_alloc > _Alloc_type;
!   typedef __allocator<_Tp, single_client_gc_alloc > allocator_type;
  };
  
  inline bool operator==(const single_client_gc_alloc&,
*************** inline bool operator!=(const single_clie
*** 433,444 ****
    return false;
  }
  
! template <class _T>
! struct _Alloc_traits<_T, traceable_alloc >
  {
    static const bool _S_instanceless = true;
!   typedef simple_alloc<_T, traceable_alloc > _Alloc_type;
!   typedef __allocator<_T, traceable_alloc > allocator_type;
  };
  
  inline bool operator==(const traceable_alloc&,
--- 433,444 ----
    return false;
  }
  
! template <class _Tp>
! struct _Alloc_traits<_Tp, traceable_alloc >
  {
    static const bool _S_instanceless = true;
!   typedef simple_alloc<_Tp, traceable_alloc > _Alloc_type;
!   typedef __allocator<_Tp, traceable_alloc > allocator_type;
  };
  
  inline bool operator==(const traceable_alloc&,
*************** inline bool operator!=(const traceable_a
*** 453,464 ****
    return false;
  }
  
! template <class _T>
! struct _Alloc_traits<_T, single_client_traceable_alloc >
  {
    static const bool _S_instanceless = true;
!   typedef simple_alloc<_T, single_client_traceable_alloc > _Alloc_type;
!   typedef __allocator<_T, single_client_traceable_alloc > allocator_type;
  };
  
  inline bool operator==(const single_client_traceable_alloc&,
--- 453,464 ----
    return false;
  }
  
! template <class _Tp>
! struct _Alloc_traits<_Tp, single_client_traceable_alloc >
  {
    static const bool _S_instanceless = true;
!   typedef simple_alloc<_Tp, single_client_traceable_alloc > _Alloc_type;
!   typedef __allocator<_Tp, single_client_traceable_alloc > allocator_type;
  };
  
  inline bool operator==(const single_client_traceable_alloc&,
diff -Nrcpad gcc-3.4.3/boehm-gc/include/private/darwin_stop_world.h gcc-4.0.0/boehm-gc/include/private/darwin_stop_world.h
*** gcc-3.4.3/boehm-gc/include/private/darwin_stop_world.h	Mon Jul 28 03:46:18 2003
--- gcc-4.0.0/boehm-gc/include/private/darwin_stop_world.h	Fri Aug 13 23:05:33 2004
*************** struct thread_stop_info {
*** 12,15 ****
--- 12,22 ----
      mach_port_t mach_thread;
  };
  
+ struct GC_mach_thread {
+   thread_act_t thread;
+   int already_suspended;
+ };
+ 
+ void GC_darwin_register_mach_handler_thread(mach_port_t thread);
+ 
  #endif
diff -Nrcpad gcc-3.4.3/boehm-gc/include/private/dbg_mlc.h gcc-4.0.0/boehm-gc/include/private/dbg_mlc.h
*** gcc-3.4.3/boehm-gc/include/private/dbg_mlc.h	Mon Jul 28 04:18:23 2003
--- gcc-4.0.0/boehm-gc/include/private/dbg_mlc.h	Fri Aug 13 23:05:33 2004
*************** typedef struct {
*** 123,129 ****
  #   define UNCOLLECTABLE_DEBUG_BYTES (sizeof (oh) + sizeof (word))
  #   define DEBUG_BYTES (UNCOLLECTABLE_DEBUG_BYTES - EXTRA_BYTES)
  #endif
- #define USR_PTR_FROM_BASE(p) ((ptr_t)(p) + sizeof(oh))
  
  /* Round bytes to words without adding extra byte at end.	*/
  #define SIMPLE_ROUNDED_UP_WORDS(n) BYTES_TO_WORDS((n) + WORDS_TO_BYTES(1) - 1)
--- 123,128 ----
diff -Nrcpad gcc-3.4.3/boehm-gc/include/private/gc_pmark.h gcc-4.0.0/boehm-gc/include/private/gc_pmark.h
*** gcc-3.4.3/boehm-gc/include/private/gc_pmark.h	Mon Jul 28 04:18:23 2003
--- gcc-4.0.0/boehm-gc/include/private/gc_pmark.h	Mon Aug 23 21:40:17 2004
***************
*** 25,30 ****
--- 25,32 ----
  #ifndef GC_PMARK_H
  # define GC_PMARK_H
  
+ # include "gc.h"	/* For configuration */
+ 
  # if defined(KEEP_BACK_PTRS) || defined(PRINT_BLACK_LIST)
  #   include "dbg_mlc.h"
  # endif
*************** extern mse * GC_mark_stack;
*** 135,146 ****
  /* Return a pointer to within 1st page of object.  	*/
  /* Set *new_hdr_p to corr. hdr.				*/
  #ifdef __STDC__
! # ifdef PRINT_BLACK_LIST
!     ptr_t GC_find_start(ptr_t current, hdr *hhdr, hdr **new_hdr_p,
! 		    	word source);
! # else
!     ptr_t GC_find_start(ptr_t current, hdr *hhdr, hdr **new_hdr_p);
! # endif
  #else
    ptr_t GC_find_start();
  #endif
--- 137,143 ----
  /* Return a pointer to within 1st page of object.  	*/
  /* Set *new_hdr_p to corr. hdr.				*/
  #ifdef __STDC__
!   ptr_t GC_find_start(ptr_t current, hdr *hhdr, hdr **new_hdr_p);
  #else
    ptr_t GC_find_start();
  #endif
diff -Nrcpad gcc-3.4.3/boehm-gc/include/private/gc_priv.h gcc-4.0.0/boehm-gc/include/private/gc_priv.h
*** gcc-3.4.3/boehm-gc/include/private/gc_priv.h	Fri Oct  3 18:43:06 2003
--- gcc-4.0.0/boehm-gc/include/private/gc_priv.h	Wed Feb 16 04:10:42 2005
***************
*** 19,24 ****
--- 19,28 ----
  # ifndef GC_PRIVATE_H
  # define GC_PRIVATE_H
  
+ /* Autoconf definitions. */
+ /* FIXME: This should really be included directly from each .c file. */
+ #include <gc_config.h>
+ 
  #if defined(mips) && defined(SYSTYPE_BSD) && defined(sony_news)
      /* sony RISC NEWS, NEWSOS 4 */
  #   define BSD_TIME
*************** extern GC_warn_proc GC_current_warn_proc
*** 550,556 ****
  
  #define CPP_MAXOBJBYTES (CPP_HBLKSIZE/2)
  #define MAXOBJBYTES ((word)CPP_MAXOBJBYTES)
! #define CPP_MAXOBJSZ    BYTES_TO_WORDS(CPP_HBLKSIZE/2)
  #define MAXOBJSZ ((word)CPP_MAXOBJSZ)
  		
  # define divHBLKSZ(n) ((n) >> LOG_HBLKSIZE)
--- 554,560 ----
  
  #define CPP_MAXOBJBYTES (CPP_HBLKSIZE/2)
  #define MAXOBJBYTES ((word)CPP_MAXOBJBYTES)
! #define CPP_MAXOBJSZ    BYTES_TO_WORDS(CPP_MAXOBJBYTES)
  #define MAXOBJSZ ((word)CPP_MAXOBJSZ)
  		
  # define divHBLKSZ(n) ((n) >> LOG_HBLKSIZE)
*************** extern GC_warn_proc GC_current_warn_proc
*** 578,584 ****
  # else
  #       define ALIGNED_WORDS(n) ROUNDED_UP_WORDS(n)
  # endif
! # define SMALL_OBJ(bytes) ((bytes) < (MAXOBJBYTES - EXTRA_BYTES))
  # define ADD_SLOP(bytes) ((bytes) + EXTRA_BYTES)
  # ifndef MIN_WORDS
      /* MIN_WORDS is the size of the smallest allocated object.	*/
--- 582,588 ----
  # else
  #       define ALIGNED_WORDS(n) ROUNDED_UP_WORDS(n)
  # endif
! # define SMALL_OBJ(bytes) ((bytes) <= (MAXOBJBYTES - EXTRA_BYTES))
  # define ADD_SLOP(bytes) ((bytes) + EXTRA_BYTES)
  # ifndef MIN_WORDS
      /* MIN_WORDS is the size of the smallest allocated object.	*/
*************** extern GC_warn_proc GC_current_warn_proc
*** 615,620 ****
--- 619,628 ----
  #     define LOG_PHT_ENTRIES  16 /* Collisions are likely if heap grows	*/
  				 /* to more than 64K hblks >= 256MB.	*/
  				 /* Each hash table occupies 8K bytes.  */
+ 				 /* Even for somewhat smaller heaps, 	*/
+ 				 /* say half that, collisions may be an	*/
+ 				 /* issue because we blacklist 		*/
+ 				 /* addresses outside the heap.		*/
  #   endif
  # endif
  # define PHT_ENTRIES ((word)1 << LOG_PHT_ENTRIES)
*************** struct _GC_arrays {
*** 934,944 ****
    	char _valid_offsets[VALID_OFFSET_SZ];
  				/* GC_valid_offsets[i] == TRUE ==> i 	*/
  				/* is registered as a displacement.	*/
- #	define OFFSET_VALID(displ) \
- 	  (GC_all_interior_pointers || GC_valid_offsets[displ])
    	char _modws_valid_offsets[sizeof(word)];
  				/* GC_valid_offsets[i] ==>		  */
  				/* GC_modws_valid_offsets[i%sizeof(word)] */
  # ifdef STUBBORN_ALLOC
      page_hash_table _changed_pages;
          /* Stubborn object pages that were changes since last call to	*/
--- 942,952 ----
    	char _valid_offsets[VALID_OFFSET_SZ];
  				/* GC_valid_offsets[i] == TRUE ==> i 	*/
  				/* is registered as a displacement.	*/
    	char _modws_valid_offsets[sizeof(word)];
  				/* GC_valid_offsets[i] ==>		  */
  				/* GC_modws_valid_offsets[i%sizeof(word)] */
+ #   define OFFSET_VALID(displ) \
+ 	  (GC_all_interior_pointers || GC_valid_offsets[displ])
  # ifdef STUBBORN_ALLOC
      page_hash_table _changed_pages;
          /* Stubborn object pages that were changes since last call to	*/
*************** struct _GC_arrays {
*** 966,972 ****
  #   endif
  # else
  #   ifdef SMALL_CONFIG
! #     define MAX_HEAP_SECTS 128		/* Roughly 1GB			*/
  #   else
  #     define MAX_HEAP_SECTS 384		/* Roughly 3GB			*/
  #   endif
--- 974,980 ----
  #   endif
  # else
  #   ifdef SMALL_CONFIG
! #     define MAX_HEAP_SECTS 128		/* Roughly 256MB (128*2048*1K)	*/
  #   else
  #     define MAX_HEAP_SECTS 384		/* Roughly 3GB			*/
  #   endif
*************** GC_bool GC_is_tmp_root GC_PROTO((ptr_t p
*** 1436,1441 ****
--- 1444,1450 ----
  # endif
  void GC_register_dynamic_libraries GC_PROTO((void));
    		/* Add dynamic library data sections to the root set. */
+ 
  GC_bool GC_register_main_static_data GC_PROTO((void));
  		/* We need to register the main data segment.  Returns	*/
  		/* TRUE unless this is done implicitly as part of	*/
*************** void GC_collect_a_little_inner GC_PROTO(
*** 1610,1616 ****
    				/* collection work, if appropriate.	*/
    				/* A unit is an amount appropriate for  */
    				/* HBLKSIZE bytes of allocation.	*/
! ptr_t GC_generic_malloc GC_PROTO((word lb, int k));
    				/* Allocate an object of the given	*/
    				/* kind.  By default, there are only	*/
    				/* a few kinds: composite(pointerfree), */
--- 1619,1625 ----
    				/* collection work, if appropriate.	*/
    				/* A unit is an amount appropriate for  */
    				/* HBLKSIZE bytes of allocation.	*/
! /* ptr_t GC_generic_malloc GC_PROTO((word lb, int k)); */
    				/* Allocate an object of the given	*/
    				/* kind.  By default, there are only	*/
    				/* a few kinds: composite(pointerfree), */
*************** ptr_t GC_generic_malloc GC_PROTO((word l
*** 1620,1631 ****
--- 1629,1645 ----
  				/* internals to add more, e.g. to	*/
  				/* communicate object layout info	*/
  				/* to the collector.			*/
+ 				/* The actual decl is in gc_mark.h.	*/
  ptr_t GC_generic_malloc_ignore_off_page GC_PROTO((size_t b, int k));
    				/* As above, but pointers past the 	*/
    				/* first page of the resulting object	*/
    				/* are ignored.				*/
  ptr_t GC_generic_malloc_inner GC_PROTO((word lb, int k));
    				/* Ditto, but I already hold lock, etc.	*/
+ ptr_t GC_generic_malloc_words_small_inner GC_PROTO((word lw, int k));
+ 				/* Analogous to the above, but assumes	*/
+ 				/* a small object size, and bypasses	*/
+ 				/* MERGE_SIZES mechanism.		*/
  ptr_t GC_generic_malloc_words_small GC_PROTO((size_t lw, int k));
    				/* As above, but size in units of words */
    				/* Bypasses MERGE_SIZES.  Assumes	*/
*************** extern GC_bool GC_print_stats;	/* Produc
*** 1717,1722 ****
--- 1731,1747 ----
  # define COND_DUMP
  #endif
  
+ #ifdef KEEP_BACK_PTRS
+   extern long GC_backtraces;
+   void GC_generate_random_backtrace_no_gc(void);
+ #endif
+ 
+ extern GC_bool GC_print_back_height;
+ 
+ #ifdef MAKE_BACK_GRAPH
+   void GC_print_back_graph_stats(void);
+ #endif
+ 
  /* Macros used for collector internal allocation.	*/
  /* These assume the collector lock is held.		*/
  #ifdef DBG_HDRS_ALL
diff -Nrcpad gcc-3.4.3/boehm-gc/include/private/gcconfig.h gcc-4.0.0/boehm-gc/include/private/gcconfig.h
*** gcc-3.4.3/boehm-gc/include/private/gcconfig.h	Wed Apr 21 15:17:48 2004
--- gcc-4.0.0/boehm-gc/include/private/gcconfig.h	Tue Apr 12 19:48:42 2005
***************
*** 2,8 ****
   * Copyright 1988, 1989 Hans-J. Boehm, Alan J. Demers
   * Copyright (c) 1991-1994 by Xerox Corporation.  All rights reserved.
   * Copyright (c) 1996 by Silicon Graphics.  All rights reserved.
!  * Copyright (c) 2000 by Hewlett-Packard Company.  All rights reserved.
   *
   * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
   * OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
--- 2,8 ----
   * Copyright 1988, 1989 Hans-J. Boehm, Alan J. Demers
   * Copyright (c) 1991-1994 by Xerox Corporation.  All rights reserved.
   * Copyright (c) 1996 by Silicon Graphics.  All rights reserved.
!  * Copyright (c) 2000-2004 Hewlett-Packard Development Company, L.P.
   *
   * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
   * OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
***************
*** 249,254 ****
--- 249,258 ----
  #    define SH
  #    define mach_type_known
  # endif
+ # if defined(LINUX) && defined(__m32r__)
+ #    define M32R
+ #    define mach_type_known
+ # endif
  # if defined(__alpha) || defined(__alpha__)
  #   define ALPHA
  #   if !defined(LINUX) && !defined(NETBSD) && !defined(OPENBSD) && !defined(FREEBSD)
***************
*** 307,312 ****
--- 311,320 ----
  #   define I386
  #   define mach_type_known
  # endif
+ # if defined(__NetBSD__) && defined(__x86_64__)
+ #    define X86_64
+ #    define mach_type_known
+ # endif
  # if defined(bsdi) && (defined(i386) || defined(__i386__))
  #    define I386
  #    define BSDI
***************
*** 347,352 ****
--- 355,365 ----
  #     define MSWIN32	/* or Win32s */
  #     define mach_type_known
  #   endif
+ #   if defined(_MSC_VER) && defined(_M_IA64)
+ #     define IA64
+ #     define MSWIN32	/* Really win64, but we don't treat 64-bit 	*/
+ 			/* variants as a differnt platform.		*/
+ #   endif
  # endif
  # if defined(__DJGPP__)
  #   define I386
***************
*** 588,594 ****
   * USE_GENERIC_PUSH_REGS the preferred approach for marking from registers.
   */
  # if defined(__GNUC__) && ((__GNUC__ >= 3) || \
! 			   (__GNUC__ == 2 && __GNUC_MINOR__ >= 8))
  #   define HAVE_BUILTIN_UNWIND_INIT
  # endif
  
--- 601,608 ----
   * USE_GENERIC_PUSH_REGS the preferred approach for marking from registers.
   */
  # if defined(__GNUC__) && ((__GNUC__ >= 3) || \
! 			   (__GNUC__ == 2 && __GNUC_MINOR__ >= 8)) \
! 		       && !defined(__INTEL_COMPILER)
  #   define HAVE_BUILTIN_UNWIND_INIT
  # endif
  
***************
*** 599,606 ****
  #   ifdef OPENBSD
  #	define OS_TYPE "OPENBSD"
  #	define HEURISTIC2
! 	extern char etext[];
! #	define DATASTART ((ptr_t)(etext))
  #   endif
  #   ifdef NETBSD
  #	define OS_TYPE "NETBSD"
--- 613,626 ----
  #   ifdef OPENBSD
  #	define OS_TYPE "OPENBSD"
  #	define HEURISTIC2
! #	ifdef __ELF__
! #	  define DATASTART GC_data_start
! #	  define DYNAMIC_LOADING
! #	else
! 	  extern char etext[];
! #	  define DATASTART ((ptr_t)(etext))
! #       endif
! #       define USE_GENERIC_PUSH_REGS
  #   endif
  #   ifdef NETBSD
  #	define OS_TYPE "NETBSD"
***************
*** 612,624 ****
  	  extern char etext[];
  #	  define DATASTART ((ptr_t)(etext))
  #       endif
  #   endif
  #   ifdef LINUX
  #       define OS_TYPE "LINUX"
  #       define STACKBOTTOM ((ptr_t)0xf0000000)
- #	define USE_MMAP
  #       define USE_GENERIC_PUSH_REGS
! 		/* We never got around to the assembly version. */
  /* #       define MPROTECT_VDB - Reported to not work  9/17/01 */
  #       ifdef __ELF__
  #            define DYNAMIC_LOADING
--- 632,645 ----
  	  extern char etext[];
  #	  define DATASTART ((ptr_t)(etext))
  #       endif
+ #	define USE_GENERIC_PUSH_REGS
  #   endif
  #   ifdef LINUX
  #       define OS_TYPE "LINUX"
  #       define STACKBOTTOM ((ptr_t)0xf0000000)
  #       define USE_GENERIC_PUSH_REGS
! #	     define USE_MMAP
! 	      /* We never got around to the assembly version. */
  /* #       define MPROTECT_VDB - Reported to not work  9/17/01 */
  #       ifdef __ELF__
  #            define DYNAMIC_LOADING
***************
*** 925,934 ****
  
  # ifdef I386
  #   define MACH_TYPE "I386"
! #   define ALIGNMENT 4	/* Appears to hold for all "32 bit" compilers	*/
  			/* except Borland.  The -a4 option fixes 	*/
  			/* Borland.					*/
                          /* Ivan Demakov: For Watcom the option is -zp4. */
  #   ifndef SMALL_CONFIG
  #     define ALIGN_DOUBLE /* Not strictly necessary, but may give speed   */
  			  /* improvement on Pentiums.			  */
--- 946,962 ----
  
  # ifdef I386
  #   define MACH_TYPE "I386"
! #   if defined(__LP64__) || defined(_WIN64)
! #     define CPP_WORDSZ 64
! #     define ALIGNMENT 8
! #   else
! #     define CPP_WORDSZ 32
! #     define ALIGNMENT 4
! 			/* Appears to hold for all "32 bit" compilers	*/
  			/* except Borland.  The -a4 option fixes 	*/
  			/* Borland.					*/
                          /* Ivan Demakov: For Watcom the option is -zp4. */
+ #   endif
  #   ifndef SMALL_CONFIG
  #     define ALIGN_DOUBLE /* Not strictly necessary, but may give speed   */
  			  /* improvement on Pentiums.			  */
***************
*** 1042,1048 ****
  	    /* possibly because Linux threads is itself a malloc client */
  	    /* and can't deal with the signals.				*/
  #	endif
! #	define HEAP_START 0x1000
  		/* This encourages mmap to give us low addresses,	*/
  		/* thus allowing the heap to grow to ~3GB		*/
  #       ifdef __ELF__
--- 1070,1076 ----
  	    /* possibly because Linux threads is itself a malloc client */
  	    /* and can't deal with the signals.				*/
  #	endif
! #	define HEAP_START (ptr_t)0x1000
  		/* This encourages mmap to give us low addresses,	*/
  		/* thus allowing the heap to grow to ~3GB		*/
  #       ifdef __ELF__
***************
*** 1073,1078 ****
--- 1101,1108 ----
  #            define DATASTART ((ptr_t)((((word) (etext)) + 0xfff) & ~0xfff))
  #       endif
  #	ifdef USE_I686_PREFETCH
+ 	  /* FIXME: Thus should use __builtin_prefetch, but we'll leave that	*/
+ 	  /* for the next rtelease.						*/
  #	  define PREFETCH(x) \
  	    __asm__ __volatile__ ("	prefetchnta	%0": : "m"(*(char *)(x)))
  	    /* Empirically prefetcht0 is much more effective at reducing	*/
***************
*** 1514,1520 ****
  #   endif
  #   ifdef LINUX
  #       define OS_TYPE "LINUX"
! #       define STACKBOTTOM ((ptr_t) 0x120000000)
  #       ifdef __ELF__
  #	  define SEARCH_FOR_DATA_START
  #         define DYNAMIC_LOADING
--- 1544,1550 ----
  #   endif
  #   ifdef LINUX
  #       define OS_TYPE "LINUX"
! #       define LINUX_STACKBOTTOM
  #       ifdef __ELF__
  #	  define SEARCH_FOR_DATA_START
  #         define DYNAMIC_LOADING
***************
*** 1562,1567 ****
--- 1592,1598 ----
      	/* first putenv call.						*/
  	extern char ** environ;
  #       define STACKBOTTOM ((ptr_t)environ)
+ #       define HPUX_STACKBOTTOM
  #       define DYNAMIC_LOADING
  #       include <unistd.h>
  #       define GETPAGESIZE() sysconf(_SC_PAGE_SIZE)
***************
*** 1571,1579 ****
  	/* address minus one page.					*/
  #	define BACKING_STORE_DISPLACEMENT 0x1000000
  #	define BACKING_STORE_ALIGNMENT 0x1000
! #       define BACKING_STORE_BASE \
! 	  (ptr_t)(((word)GC_stackbottom - BACKING_STORE_DISPLACEMENT - 1) \
! 			& ~(BACKING_STORE_ALIGNMENT - 1))
  #   endif
  #   ifdef LINUX
  #   	define CPP_WORDSZ 64
--- 1602,1610 ----
  	/* address minus one page.					*/
  #	define BACKING_STORE_DISPLACEMENT 0x1000000
  #	define BACKING_STORE_ALIGNMENT 0x1000
! 	extern ptr_t GC_register_stackbottom;
! #	define BACKING_STORE_BASE GC_register_stackbottom
! 	/* Known to be wrong for recent HP/UX versions!!!	*/
  #   endif
  #   ifdef LINUX
  #   	define CPP_WORDSZ 64
***************
*** 1591,1598 ****
  	/* constants:						*/
  #       define BACKING_STORE_ALIGNMENT 0x100000
  #       define BACKING_STORE_DISPLACEMENT 0x80000000
! 	extern char * GC_register_stackbottom;
! #	define BACKING_STORE_BASE ((ptr_t)GC_register_stackbottom)
  #	define SEARCH_FOR_DATA_START
  #	ifdef __GNUC__
  #         define DYNAMIC_LOADING
--- 1622,1629 ----
  	/* constants:						*/
  #       define BACKING_STORE_ALIGNMENT 0x100000
  #       define BACKING_STORE_DISPLACEMENT 0x80000000
! 	extern ptr_t GC_register_stackbottom;
! #	define BACKING_STORE_BASE GC_register_stackbottom
  #	define SEARCH_FOR_DATA_START
  #	ifdef __GNUC__
  #         define DYNAMIC_LOADING
***************
*** 1606,1619 ****
  	extern int _end[];
  #	define DATAEND (_end)
  #       ifdef __GNUC__
! #	  define PREFETCH(x) \
! 	    __asm__ ("	lfetch	[%0]": : "r"((void *)(x)))
! #	  define PREFETCH_FOR_WRITE(x) \
! 	    __asm__ ("	lfetch.excl	[%0]": : "r"((void *)(x)))
! #	  define CLEAR_DOUBLE(x) \
! 	    __asm__ ("	stf.spill	[%0]=f0": : "r"((void *)(x)))
  #       endif
  #   endif
  # endif
  
  # ifdef M88K
--- 1637,1673 ----
  	extern int _end[];
  #	define DATAEND (_end)
  #       ifdef __GNUC__
! #	  ifndef __INTEL_COMPILER
! #	    define PREFETCH(x) \
! 	      __asm__ ("	lfetch	[%0]": : "r"(x))
! #	    define PREFETCH_FOR_WRITE(x) \
! 	      __asm__ ("	lfetch.excl	[%0]": : "r"(x))
! #	    define CLEAR_DOUBLE(x) \
! 	      __asm__ ("	stf.spill	[%0]=f0": : "r"((void *)(x)))
! #	  else
! #           include <ia64intrin.h>
! #	    define PREFETCH(x) \
! 	      __lfetch(__lfhint_none, (x))
! #	    define PREFETCH_FOR_WRITE(x) \
! 	      __lfetch(__lfhint_nta,  (x))
! #	    define CLEAR_DOUBLE(x) \
! 	      __stf_spill((void *)(x), 0)
! #	  endif // __INTEL_COMPILER
  #       endif
  #   endif
+ #   ifdef MSWIN32
+       /* FIXME: This is a very partial guess.  There is no port, yet.	*/
+ #     define OS_TYPE "MSWIN32"
+ 		/* STACKBOTTOM and DATASTART are handled specially in 	*/
+ 		/* os_dep.c.						*/
+ #     define DATAEND  /* not needed */
+ #     if defined(_WIN64)
+ #       define CPP_WORDSZ 64
+ #     else
+ #       define CPP_WORDSZ 32   /* Is this possible?	*/
+ #     endif
+ #     define ALIGNMENT 8
+ #   endif
  # endif
  
  # ifdef M88K
***************
*** 1768,1773 ****
--- 1822,1844 ----
  #   define DATAEND /* not needed */
  # endif
  
+ # ifdef M32R
+ #   define CPP_WORDSZ 32
+ #   define MACH_TYPE "M32R"
+ #   define ALIGNMENT 4
+ #   ifdef LINUX
+ #     define OS_TYPE "LINUX"
+ #     define LINUX_STACKBOTTOM
+ #     undef STACK_GRAN
+ #     define STACK_GRAN 0x10000000
+ #     define USE_GENERIC_PUSH_REGS
+ #     define DYNAMIC_LOADING
+ #     define SEARCH_FOR_DATA_START
+       extern int _end[];
+ #     define DATAEND (_end)
+ #   endif
+ # endif
+ 
  # ifdef X86_64
  #   define MACH_TYPE "X86_64"
  #   define ALIGNMENT 8
***************
*** 1801,1813 ****
  	     extern int etext[];
  #            define DATASTART ((ptr_t)((((word) (etext)) + 0xfff) & ~0xfff))
  #       endif
! #	if defined(__GNUC__) && __GNUC__ >= 3
! #	    define PREFETCH(x) __builtin_prefetch ((x), 0, 0)
! #	    define PREFETCH_FOR_WRITE(x) __builtin_prefetch ((x), 1)
  #	endif
  #   endif
  # endif
  
  #if defined(LINUX) && defined(REDIRECT_MALLOC)
      /* Rld appears to allocate some memory with its own allocator, and	*/
      /* some through malloc, which might be redirected.  To make this	*/
--- 1872,1899 ----
  	     extern int etext[];
  #            define DATASTART ((ptr_t)((((word) (etext)) + 0xfff) & ~0xfff))
  #       endif
! #       if defined(__GNUC__) && __GNUC >= 3
! #	    define PREFETCH(x) __builtin_prefetch((x), 0, 0)
! #	    define PREFETCH_FOR_WRITE(x) __builtin_prefetch((x), 1)
  #	endif
  #   endif
+ #   ifdef NETBSD
+ #	define OS_TYPE "NETBSD"
+ #	ifdef __ELF__
+ #	    define DYNAMIC_LOADING
+ #	endif
+ #	define HEURISTIC2
+ 	extern char etext[];
+ #	define SEARCH_FOR_DATA_START
+ #   endif
  # endif
  
+ #if defined(LINUX) && defined(USE_MMAP)
+     /* The kernel may do a somewhat better job merging mappings etc.	*/
+     /* with anonymous mappings.						*/
+ #   define USE_MMAP_ANON
+ #endif
+ 
  #if defined(LINUX) && defined(REDIRECT_MALLOC)
      /* Rld appears to allocate some memory with its own allocator, and	*/
      /* some through malloc, which might be redirected.  To make this	*/
***************
*** 1862,1870 ****
  #   define SUNOS5SIGS
  # endif
  
! # if defined(SVR4) || defined(LINUX) || defined(IRIX) || defined(HPUX) \
  	    || defined(OPENBSD) || defined(NETBSD) || defined(FREEBSD) \
! 	    || defined(DGUX) || defined(BSD) \
  	    || defined(_AIX) || defined(DARWIN) || defined(OSF1)
  #   define UNIX_LIKE   /* Basic Unix-like system calls work.	*/
  # endif
--- 1948,1960 ----
  #   define SUNOS5SIGS
  # endif
  
! # if defined(FREEBSD) && (__FreeBSD__ >= 4)
! #   define SUNOS5SIGS
! # endif
! 
! # if defined(SVR4) || defined(LINUX) || defined(IRIX5) || defined(HPUX) \
  	    || defined(OPENBSD) || defined(NETBSD) || defined(FREEBSD) \
! 	    || defined(DGUX) || defined(BSD) || defined(SUNOS4) \
  	    || defined(_AIX) || defined(DARWIN) || defined(OSF1)
  #   define UNIX_LIKE   /* Basic Unix-like system calls work.	*/
  # endif
***************
*** 1980,1985 ****
--- 2070,2079 ----
  #	define USE_GENERIC_PUSH_REGS
  # endif
  
+ # if defined(MSWINCE)
+ #   define NO_GETENV
+ # endif
+ 
  # if defined(SPARC)
  #   define ASM_CLEAR_CODE	/* Stack clearing is crucial, and we 	*/
  				/* include assembly code to do it well.	*/
diff -Nrcpad gcc-3.4.3/boehm-gc/include/private/pthread_support.h gcc-4.0.0/boehm-gc/include/private/pthread_support.h
*** gcc-3.4.3/boehm-gc/include/private/pthread_support.h	Mon Jul 28 03:46:18 2003
--- gcc-4.0.0/boehm-gc/include/private/pthread_support.h	Fri Aug 13 23:05:35 2004
*************** GC_thread GC_lookup_thread(pthread_t id)
*** 93,97 ****
--- 93,102 ----
  
  void GC_stop_init();
  
+ extern GC_bool GC_in_thread_creation;
+ 	/* We may currently be in thread creation or destruction.	*/
+ 	/* Only set to TRUE while allocation lock is held.		*/
+ 	/* When set, it is OK to run GC from unknown thread.		*/
+ 
  #endif /* GC_PTHREADS && !GC_SOLARIS_THREADS.... etc */
  #endif /* GC_PTHREAD_SUPPORT_H */
diff -Nrcpad gcc-3.4.3/boehm-gc/include/private/solaris_threads.h gcc-4.0.0/boehm-gc/include/private/solaris_threads.h
*** gcc-3.4.3/boehm-gc/include/private/solaris_threads.h	Mon Jul 28 04:18:23 2003
--- gcc-4.0.0/boehm-gc/include/private/solaris_threads.h	Fri Aug 13 23:05:35 2004
***************
*** 30,35 ****
--- 30,37 ----
    extern size_t GC_min_stack_sz;
    extern size_t GC_page_sz;
    extern void GC_thr_init(void);
+   extern ptr_t GC_stack_alloc(size_t * stack_size);
+   extern void GC_stack_free(ptr_t stack, size_t size);
  
  # endif /* GC_SOLARIS_THREADS */
  
diff -Nrcpad gcc-3.4.3/boehm-gc/include/private/specific.h gcc-4.0.0/boehm-gc/include/private/specific.h
*** gcc-3.4.3/boehm-gc/include/private/specific.h	Mon Jul 28 04:18:23 2003
--- gcc-4.0.0/boehm-gc/include/private/specific.h	Fri Aug 13 23:05:35 2004
*************** static __inline__ void * PREFIXED(getspe
*** 85,91 ****
      unsigned hash_val = CACHE_HASH(qtid);
      tse * volatile * entry_ptr = key -> cache + hash_val;
      tse * entry = *entry_ptr;   /* Must be loaded only once.	*/
!    if (EXPECT(entry -> qtid == qtid, 1)) {
        GC_ASSERT(entry -> thread == pthread_self());
        return entry -> value;
      }
--- 85,91 ----
      unsigned hash_val = CACHE_HASH(qtid);
      tse * volatile * entry_ptr = key -> cache + hash_val;
      tse * entry = *entry_ptr;   /* Must be loaded only once.	*/
!     if (EXPECT(entry -> qtid == qtid, 1)) {
        GC_ASSERT(entry -> thread == pthread_self());
        return entry -> value;
      }
diff -Nrcpad gcc-3.4.3/boehm-gc/install-sh gcc-4.0.0/boehm-gc/install-sh
*** gcc-3.4.3/boehm-gc/install-sh	Fri Aug 17 18:39:16 2001
--- gcc-4.0.0/boehm-gc/install-sh	Thu Jan  1 00:00:00 1970
***************
*** 1,251 ****
- #!/bin/sh
- #
- # install - install a program, script, or datafile
- # This comes from X11R5 (mit/util/scripts/install.sh).
- #
- # Copyright 1991 by the Massachusetts Institute of Technology
- #
- # Permission to use, copy, modify, distribute, and sell this software and its
- # documentation for any purpose is hereby granted without fee, provided that
- # the above copyright notice appear in all copies and that both that
- # copyright notice and this permission notice appear in supporting
- # documentation, and that the name of M.I.T. not be used in advertising or
- # publicity pertaining to distribution of the software without specific,
- # written prior permission.  M.I.T. makes no representations about the
- # suitability of this software for any purpose.  It is provided "as is"
- # without express or implied warranty.
- #
- # Calling this script install-sh is preferred over install.sh, to prevent
- # `make' implicit rules from creating a file called install from it
- # when there is no Makefile.
- #
- # This script is compatible with the BSD install script, but was written
- # from scratch.  It can only install one file at a time, a restriction
- # shared with many OS's install programs.
- 
- 
- # set DOITPROG to echo to test this script
- 
- # Don't use :- since 4.3BSD and earlier shells don't like it.
- doit="${DOITPROG-}"
- 
- 
- # put in absolute paths if you don't have them in your path; or use env. vars.
- 
- mvprog="${MVPROG-mv}"
- cpprog="${CPPROG-cp}"
- chmodprog="${CHMODPROG-chmod}"
- chownprog="${CHOWNPROG-chown}"
- chgrpprog="${CHGRPPROG-chgrp}"
- stripprog="${STRIPPROG-strip}"
- rmprog="${RMPROG-rm}"
- mkdirprog="${MKDIRPROG-mkdir}"
- 
- transformbasename=""
- transform_arg=""
- instcmd="$mvprog"
- chmodcmd="$chmodprog 0755"
- chowncmd=""
- chgrpcmd=""
- stripcmd=""
- rmcmd="$rmprog -f"
- mvcmd="$mvprog"
- src=""
- dst=""
- dir_arg=""
- 
- while [ x"$1" != x ]; do
-     case $1 in
- 	-c) instcmd="$cpprog"
- 	    shift
- 	    continue;;
- 
- 	-d) dir_arg=true
- 	    shift
- 	    continue;;
- 
- 	-m) chmodcmd="$chmodprog $2"
- 	    shift
- 	    shift
- 	    continue;;
- 
- 	-o) chowncmd="$chownprog $2"
- 	    shift
- 	    shift
- 	    continue;;
- 
- 	-g) chgrpcmd="$chgrpprog $2"
- 	    shift
- 	    shift
- 	    continue;;
- 
- 	-s) stripcmd="$stripprog"
- 	    shift
- 	    continue;;
- 
- 	-t=*) transformarg=`echo $1 | sed 's/-t=//'`
- 	    shift
- 	    continue;;
- 
- 	-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
- 	    shift
- 	    continue;;
- 
- 	*)  if [ x"$src" = x ]
- 	    then
- 		src=$1
- 	    else
- 		# this colon is to work around a 386BSD /bin/sh bug
- 		:
- 		dst=$1
- 	    fi
- 	    shift
- 	    continue;;
-     esac
- done
- 
- if [ x"$src" = x ]
- then
- 	echo "install:	no input file specified"
- 	exit 1
- else
- 	true
- fi
- 
- if [ x"$dir_arg" != x ]; then
- 	dst=$src
- 	src=""
- 	
- 	if [ -d $dst ]; then
- 		instcmd=:
- 		chmodcmd=""
- 	else
- 		instcmd=mkdir
- 	fi
- else
- 
- # Waiting for this to be detected by the "$instcmd $src $dsttmp" command
- # might cause directories to be created, which would be especially bad 
- # if $src (and thus $dsttmp) contains '*'.
- 
- 	if [ -f $src -o -d $src ]
- 	then
- 		true
- 	else
- 		echo "install:  $src does not exist"
- 		exit 1
- 	fi
- 	
- 	if [ x"$dst" = x ]
- 	then
- 		echo "install:	no destination specified"
- 		exit 1
- 	else
- 		true
- 	fi
- 
- # If destination is a directory, append the input filename; if your system
- # does not like double slashes in filenames, you may need to add some logic
- 
- 	if [ -d $dst ]
- 	then
- 		dst="$dst"/`basename $src`
- 	else
- 		true
- 	fi
- fi
- 
- ## this sed command emulates the dirname command
- dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
- 
- # Make sure that the destination directory exists.
- #  this part is taken from Noah Friedman's mkinstalldirs script
- 
- # Skip lots of stat calls in the usual case.
- if [ ! -d "$dstdir" ]; then
- defaultIFS='	
- '
- IFS="${IFS-${defaultIFS}}"
- 
- oIFS="${IFS}"
- # Some sh's can't handle IFS=/ for some reason.
- IFS='%'
- set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
- IFS="${oIFS}"
- 
- pathcomp=''
- 
- while [ $# -ne 0 ] ; do
- 	pathcomp="${pathcomp}${1}"
- 	shift
- 
- 	if [ ! -d "${pathcomp}" ] ;
-         then
- 		$mkdirprog "${pathcomp}"
- 	else
- 		true
- 	fi
- 
- 	pathcomp="${pathcomp}/"
- done
- fi
- 
- if [ x"$dir_arg" != x ]
- then
- 	$doit $instcmd $dst &&
- 
- 	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
- 	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
- 	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
- 	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
- else
- 
- # If we're going to rename the final executable, determine the name now.
- 
- 	if [ x"$transformarg" = x ] 
- 	then
- 		dstfile=`basename $dst`
- 	else
- 		dstfile=`basename $dst $transformbasename | 
- 			sed $transformarg`$transformbasename
- 	fi
- 
- # don't allow the sed command to completely eliminate the filename
- 
- 	if [ x"$dstfile" = x ] 
- 	then
- 		dstfile=`basename $dst`
- 	else
- 		true
- 	fi
- 
- # Make a temp file name in the proper directory.
- 
- 	dsttmp=$dstdir/#inst.$$#
- 
- # Move or copy the file name to the temp name
- 
- 	$doit $instcmd $src $dsttmp &&
- 
- 	trap "rm -f ${dsttmp}" 0 &&
- 
- # and set any options; do chmod last to preserve setuid bits
- 
- # If any of these fail, we abort the whole thing.  If we want to
- # ignore errors from any of these, just make sure not to ignore
- # errors from the above "$doit $instcmd $src $dsttmp" command.
- 
- 	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
- 	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
- 	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
- 	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
- 
- # Now rename the file to the real destination.
- 
- 	$doit $rmcmd -f $dstdir/$dstfile &&
- 	$doit $mvcmd $dsttmp $dstdir/$dstfile 
- 
- fi &&
- 
- 
- exit 0
--- 0 ----
diff -Nrcpad gcc-3.4.3/boehm-gc/libtool.m4 gcc-4.0.0/boehm-gc/libtool.m4
*** gcc-3.4.3/boehm-gc/libtool.m4	Fri Aug 17 18:39:16 2001
--- gcc-4.0.0/boehm-gc/libtool.m4	Thu Jan  1 00:00:00 1970
***************
*** 1,435 ****
- ## libtool.m4 - Configure libtool for the target system. -*-Shell-script-*-
- ## Copyright (C) 1996-1999 Free Software Foundation, Inc.
- ## Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
- ##
- ## This program is free software; you can redistribute it and/or modify
- ## it under the terms of the GNU General Public License as published by
- ## the Free Software Foundation; either version 2 of the License, or
- ## (at your option) any later version.
- ##
- ## This program is distributed in the hope that it will be useful, but
- ## WITHOUT ANY WARRANTY; without even the implied warranty of
- ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- ## General Public License for more details.
- ##
- ## You should have received a copy of the GNU General Public License
- ## along with this program; if not, write to the Free Software
- ## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- ##
- ## As a special exception to the GNU General Public License, if you
- ## distribute this file as part of a program that contains a
- ## configuration script generated by Autoconf, you may include it under
- ## the same distribution terms that you use for the rest of that program.
- 
- # serial 40 AC_PROG_LIBTOOL
- AC_DEFUN(AC_PROG_LIBTOOL,
- [AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
- 
- # Save cache, so that ltconfig can load it
- AC_CACHE_SAVE
- 
- # Actually configure libtool.  ac_aux_dir is where install-sh is found.
- CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \
- LD="$LD" LDFLAGS="$LDFLAGS" LIBS="$LIBS" \
- LN_S="$LN_S" NM="$NM" RANLIB="$RANLIB" \
- DLLTOOL="$DLLTOOL" AS="$AS" OBJDUMP="$OBJDUMP" \
- ${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig --no-reexec \
- $libtool_flags --no-verify $ac_aux_dir/ltmain.sh $lt_target \
- || AC_MSG_ERROR([libtool configure failed])
- 
- # Reload cache, that may have been modified by ltconfig
- AC_CACHE_LOAD
- 
- # This can be used to rebuild libtool when needed
- LIBTOOL_DEPS="$ac_aux_dir/ltconfig $ac_aux_dir/ltmain.sh"
- 
- # Always use our own libtool.
- LIBTOOL='$(SHELL) $(top_builddir)/libtool'
- AC_SUBST(LIBTOOL)dnl
- 
- # Redirect the config.log output again, so that the ltconfig log is not
- # clobbered by the next message.
- exec 5>>./config.log
- ])
- 
- AC_DEFUN(AC_LIBTOOL_SETUP,
- [AC_PREREQ(2.13)dnl
- AC_REQUIRE([AC_ENABLE_SHARED])dnl
- AC_REQUIRE([AC_ENABLE_STATIC])dnl
- AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl
- AC_REQUIRE([AC_CANONICAL_HOST])dnl
- AC_REQUIRE([AC_CANONICAL_BUILD])dnl
- AC_REQUIRE([AC_PROG_RANLIB])dnl
- AC_REQUIRE([AC_PROG_CC])dnl
- AC_REQUIRE([AC_PROG_LD])dnl
- AC_REQUIRE([AC_PROG_NM])dnl
- AC_REQUIRE([AC_PROG_LN_S])dnl
- dnl
- 
- case "$target" in
- NONE) lt_target="$host" ;;
- *) lt_target="$target" ;;
- esac
- 
- # Check for any special flags to pass to ltconfig.
- #
- # the following will cause an existing older ltconfig to fail, so
- # we ignore this at the expense of the cache file... Checking this 
- # will just take longer ... bummer!
- #libtool_flags="--cache-file=$cache_file"
- #
- test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared"
- test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static"
- test "$enable_fast_install" = no && libtool_flags="$libtool_flags --disable-fast-install"
- test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc"
- test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld"
- ifdef([AC_PROVIDE_AC_LIBTOOL_DLOPEN],
- [libtool_flags="$libtool_flags --enable-dlopen"])
- ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
- [libtool_flags="$libtool_flags --enable-win32-dll"])
- AC_ARG_ENABLE(libtool-lock,
-   [  --disable-libtool-lock  avoid locking (might break parallel builds)])
- test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock"
- test x"$silent" = xyes && libtool_flags="$libtool_flags --silent"
- 
- # Some flags need to be propagated to the compiler or linker for good
- # libtool support.
- case "$lt_target" in
- *-*-irix6*)
-   # Find out which ABI we are using.
-   echo '[#]line __oline__ "configure"' > conftest.$ac_ext
-   if AC_TRY_EVAL(ac_compile); then
-     case "`/usr/bin/file conftest.o`" in
-     *32-bit*)
-       LD="${LD-ld} -32"
-       ;;
-     *N32*)
-       LD="${LD-ld} -n32"
-       ;;
-     *64-bit*)
-       LD="${LD-ld} -64"
-       ;;
-     esac
-   fi
-   rm -rf conftest*
-   ;;
- 
- *-*-sco3.2v5*)
-   # On SCO OpenServer 5, we need -belf to get full-featured binaries.
-   SAVE_CFLAGS="$CFLAGS"
-   CFLAGS="$CFLAGS -belf"
-   AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
-     [AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])])
-   if test x"$lt_cv_cc_needs_belf" != x"yes"; then
-     # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
-     CFLAGS="$SAVE_CFLAGS"
-   fi
-   ;;
- 
- ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
- [*-*-cygwin* | *-*-mingw*)
-   AC_CHECK_TOOL(DLLTOOL, dlltool, false)
-   AC_CHECK_TOOL(AS, as, false)
-   AC_CHECK_TOOL(OBJDUMP, objdump, false)
-   ;;
- ])
- esac
- ])
- 
- # AC_LIBTOOL_DLOPEN - enable checks for dlopen support
- AC_DEFUN(AC_LIBTOOL_DLOPEN, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])])
- 
- # AC_LIBTOOL_WIN32_DLL - declare package support for building win32 dll's
- AC_DEFUN(AC_LIBTOOL_WIN32_DLL, [AC_BEFORE([$0], [AC_LIBTOOL_SETUP])])
- 
- # AC_ENABLE_SHARED - implement the --enable-shared flag
- # Usage: AC_ENABLE_SHARED[(DEFAULT)]
- #   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
- #   `yes'.
- AC_DEFUN(AC_ENABLE_SHARED, [dnl
- define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
- AC_ARG_ENABLE(shared,
- changequote(<<, >>)dnl
- <<  --enable-shared[=PKGS]  build shared libraries [default=>>AC_ENABLE_SHARED_DEFAULT],
- changequote([, ])dnl
- [p=${PACKAGE-default}
- case "$enableval" in
- yes) enable_shared=yes ;;
- no) enable_shared=no ;;
- *)
-   enable_shared=no
-   # Look at the argument we got.  We use all the common list separators.
-   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
-   for pkg in $enableval; do
-     if test "X$pkg" = "X$p"; then
-       enable_shared=yes
-     fi
-   done
-   IFS="$ac_save_ifs"
-   ;;
- esac],
- enable_shared=AC_ENABLE_SHARED_DEFAULT)dnl
- ])
- 
- # AC_DISABLE_SHARED - set the default shared flag to --disable-shared
- AC_DEFUN(AC_DISABLE_SHARED, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
- AC_ENABLE_SHARED(no)])
- 
- # AC_ENABLE_STATIC - implement the --enable-static flag
- # Usage: AC_ENABLE_STATIC[(DEFAULT)]
- #   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
- #   `yes'.
- AC_DEFUN(AC_ENABLE_STATIC, [dnl
- define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
- AC_ARG_ENABLE(static,
- changequote(<<, >>)dnl
- <<  --enable-static[=PKGS]  build static libraries [default=>>AC_ENABLE_STATIC_DEFAULT],
- changequote([, ])dnl
- [p=${PACKAGE-default}
- case "$enableval" in
- yes) enable_static=yes ;;
- no) enable_static=no ;;
- *)
-   enable_static=no
-   # Look at the argument we got.  We use all the common list separators.
-   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
-   for pkg in $enableval; do
-     if test "X$pkg" = "X$p"; then
-       enable_static=yes
-     fi
-   done
-   IFS="$ac_save_ifs"
-   ;;
- esac],
- enable_static=AC_ENABLE_STATIC_DEFAULT)dnl
- ])
- 
- # AC_DISABLE_STATIC - set the default static flag to --disable-static
- AC_DEFUN(AC_DISABLE_STATIC, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
- AC_ENABLE_STATIC(no)])
- 
- 
- # AC_ENABLE_FAST_INSTALL - implement the --enable-fast-install flag
- # Usage: AC_ENABLE_FAST_INSTALL[(DEFAULT)]
- #   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
- #   `yes'.
- AC_DEFUN(AC_ENABLE_FAST_INSTALL, [dnl
- define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
- AC_ARG_ENABLE(fast-install,
- changequote(<<, >>)dnl
- <<  --enable-fast-install[=PKGS]  optimize for fast installation [default=>>AC_ENABLE_FAST_INSTALL_DEFAULT],
- changequote([, ])dnl
- [p=${PACKAGE-default}
- case "$enableval" in
- yes) enable_fast_install=yes ;;
- no) enable_fast_install=no ;;
- *)
-   enable_fast_install=no
-   # Look at the argument we got.  We use all the common list separators.
-   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
-   for pkg in $enableval; do
-     if test "X$pkg" = "X$p"; then
-       enable_fast_install=yes
-     fi
-   done
-   IFS="$ac_save_ifs"
-   ;;
- esac],
- enable_fast_install=AC_ENABLE_FAST_INSTALL_DEFAULT)dnl
- ])
- 
- # AC_ENABLE_FAST_INSTALL - set the default to --disable-fast-install
- AC_DEFUN(AC_DISABLE_FAST_INSTALL, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
- AC_ENABLE_FAST_INSTALL(no)])
- 
- # AC_PROG_LD - find the path to the GNU or non-GNU linker
- AC_DEFUN(AC_PROG_LD,
- [AC_ARG_WITH(gnu-ld,
- [  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]],
- test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
- AC_REQUIRE([AC_PROG_CC])dnl
- AC_REQUIRE([AC_CANONICAL_HOST])dnl
- AC_REQUIRE([AC_CANONICAL_BUILD])dnl
- ac_prog=ld
- if test "$ac_cv_prog_gcc" = yes; then
-   # Check if gcc -print-prog-name=ld gives a path.
-   AC_MSG_CHECKING([for ld used by GCC])
-   ac_prog=`($CC -print-prog-name=ld) 2>&5`
-   case "$ac_prog" in
-     # Accept absolute paths.
- changequote(,)dnl
-     [\\/]* | [A-Za-z]:[\\/]*)
-       re_direlt='/[^/][^/]*/\.\./'
- changequote([,])dnl
-       # Canonicalize the path of ld
-       ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
-       while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
- 	ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
-       done
-       test -z "$LD" && LD="$ac_prog"
-       ;;
-   "")
-     # If it fails, then pretend we aren't using GCC.
-     ac_prog=ld
-     ;;
-   *)
-     # If it is relative, then search for the first ld in PATH.
-     with_gnu_ld=unknown
-     ;;
-   esac
- elif test "$with_gnu_ld" = yes; then
-   AC_MSG_CHECKING([for GNU ld])
- else
-   AC_MSG_CHECKING([for non-GNU ld])
- fi
- AC_CACHE_VAL(ac_cv_path_LD,
- [if test -z "$LD"; then
-   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
-   for ac_dir in $PATH; do
-     test -z "$ac_dir" && ac_dir=.
-     if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
-       ac_cv_path_LD="$ac_dir/$ac_prog"
-       # Check to see if the program is GNU ld.  I'd rather use --version,
-       # but apparently some GNU ld's only accept -v.
-       # Break only if it was the GNU/non-GNU ld that we prefer.
-       if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
- 	test "$with_gnu_ld" != no && break
-       else
- 	test "$with_gnu_ld" != yes && break
-       fi
-     fi
-   done
-   IFS="$ac_save_ifs"
- else
-   ac_cv_path_LD="$LD" # Let the user override the test with a path.
- fi])
- LD="$ac_cv_path_LD"
- if test -n "$LD"; then
-   AC_MSG_RESULT($LD)
- else
-   AC_MSG_RESULT(no)
- fi
- test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
- AC_PROG_LD_GNU
- ])
- 
- AC_DEFUN(AC_PROG_LD_GNU,
- [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], ac_cv_prog_gnu_ld,
- [# I'd rather use --version here, but apparently some GNU ld's only accept -v.
- if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
-   ac_cv_prog_gnu_ld=yes
- else
-   ac_cv_prog_gnu_ld=no
- fi])
- ])
- 
- # AC_PROG_NM - find the path to a BSD-compatible name lister
- AC_DEFUN(AC_PROG_NM,
- [AC_MSG_CHECKING([for BSD-compatible nm])
- AC_CACHE_VAL(ac_cv_path_NM,
- [if test -n "$NM"; then
-   # Let the user override the test.
-   ac_cv_path_NM="$NM"
- else
-   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
-   for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
-     test -z "$ac_dir" && ac_dir=.
-     if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext ; then
-       # Check to see if the nm accepts a BSD-compat flag.
-       # Adding the `sed 1q' prevents false positives on HP-UX, which says:
-       #   nm: unknown option "B" ignored
-       if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
- 	ac_cv_path_NM="$ac_dir/nm -B"
- 	break
-       elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
- 	ac_cv_path_NM="$ac_dir/nm -p"
- 	break
-       else
- 	ac_cv_path_NM=${ac_cv_path_NM="$ac_dir/nm"} # keep the first match, but
- 	continue # so that we can try to find one that supports BSD flags
-       fi
-     fi
-   done
-   IFS="$ac_save_ifs"
-   test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm
- fi])
- NM="$ac_cv_path_NM"
- AC_MSG_RESULT([$NM])
- ])
- 
- # AC_CHECK_LIBM - check for math library
- AC_DEFUN(AC_CHECK_LIBM,
- [AC_REQUIRE([AC_CANONICAL_HOST])dnl
- LIBM=
- case "$lt_target" in
- *-*-beos* | *-*-cygwin*)
-   # These system don't have libm
-   ;;
- *-ncr-sysv4.3*)
-   AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
-   AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
-   ;;
- *)
-   AC_CHECK_LIB(m, main, LIBM="-lm")
-   ;;
- esac
- ])
- 
- # AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for
- # the libltdl convenience library, adds --enable-ltdl-convenience to
- # the configure arguments.  Note that LIBLTDL is not AC_SUBSTed, nor
- # is AC_CONFIG_SUBDIRS called.  If DIR is not provided, it is assumed
- # to be `${top_builddir}/libltdl'.  Make sure you start DIR with
- # '${top_builddir}/' (note the single quotes!) if your package is not
- # flat, and, if you're not using automake, define top_builddir as
- # appropriate in the Makefiles.
- AC_DEFUN(AC_LIBLTDL_CONVENIENCE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-   case "$enable_ltdl_convenience" in
-   no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
-   "") enable_ltdl_convenience=yes
-       ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
-   esac
-   LIBLTDL=ifelse($#,1,$1,['${top_builddir}/libltdl'])/libltdlc.la
-   INCLTDL=ifelse($#,1,-I$1,['-I${top_builddir}/libltdl'])
- ])
- 
- # AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for
- # the libltdl installable library, and adds --enable-ltdl-install to
- # the configure arguments.  Note that LIBLTDL is not AC_SUBSTed, nor
- # is AC_CONFIG_SUBDIRS called.  If DIR is not provided, it is assumed
- # to be `${top_builddir}/libltdl'.  Make sure you start DIR with
- # '${top_builddir}/' (note the single quotes!) if your package is not
- # flat, and, if you're not using automake, define top_builddir as
- # appropriate in the Makefiles.
- # In the future, this macro may have to be called after AC_PROG_LIBTOOL.
- AC_DEFUN(AC_LIBLTDL_INSTALLABLE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-   AC_CHECK_LIB(ltdl, main,
-   [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
-   [if test x"$enable_ltdl_install" = xno; then
-      AC_MSG_WARN([libltdl not installed, but installation disabled])
-    else
-      enable_ltdl_install=yes
-    fi
-   ])
-   if test x"$enable_ltdl_install" = x"yes"; then
-     ac_configure_args="$ac_configure_args --enable-ltdl-install"
-     LIBLTDL=ifelse($#,1,$1,['${top_builddir}/libltdl'])/libltdl.la
-     INCLTDL=ifelse($#,1,-I$1,['-I${top_builddir}/libltdl'])
-   else
-     ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
-     LIBLTDL="-lltdl"
-     INCLTDL=
-   fi
- ])
- 
- dnl old names
- AC_DEFUN(AM_PROG_LIBTOOL, [indir([AC_PROG_LIBTOOL])])dnl
- AC_DEFUN(AM_ENABLE_SHARED, [indir([AC_ENABLE_SHARED], $@)])dnl
- AC_DEFUN(AM_ENABLE_STATIC, [indir([AC_ENABLE_STATIC], $@)])dnl
- AC_DEFUN(AM_DISABLE_SHARED, [indir([AC_DISABLE_SHARED], $@)])dnl
- AC_DEFUN(AM_DISABLE_STATIC, [indir([AC_DISABLE_STATIC], $@)])dnl
- AC_DEFUN(AM_PROG_LD, [indir([AC_PROG_LD])])dnl
- AC_DEFUN(AM_PROG_NM, [indir([AC_PROG_NM])])dnl
- 
- dnl This is just to silence aclocal about the macro not being used
- ifelse([AC_DISABLE_FAST_INSTALL])dnl
--- 0 ----
diff -Nrcpad gcc-3.4.3/boehm-gc/ltconfig gcc-4.0.0/boehm-gc/ltconfig
*** gcc-3.4.3/boehm-gc/ltconfig	Wed Nov 20 15:59:06 2002
--- gcc-4.0.0/boehm-gc/ltconfig	Thu Jan  1 00:00:00 1970
***************
*** 1,3078 ****
- #! /bin/sh
- 
- # ltconfig - Create a system-specific libtool.
- # Copyright (C) 1996-1999 Free Software Foundation, Inc.
- # Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
- #
- # This file is free software; you can redistribute it and/or modify it
- # under the terms of the GNU General Public License as published by
- # the Free Software Foundation; either version 2 of the License, or
- # (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful, but
- # WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- # General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program; if not, write to the Free Software
- # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- #
- # As a special exception to the GNU General Public License, if you
- # distribute this file as part of a program that contains a
- # configuration script generated by Autoconf, you may include it under
- # the same distribution terms that you use for the rest of that program.
- 
- # A lot of this script is taken from autoconf-2.10.
- 
- # Check that we are running under the correct shell.
- SHELL=${CONFIG_SHELL-/bin/sh}
- echo=echo
- if test "X$1" = X--no-reexec; then
-   # Discard the --no-reexec flag, and continue.
-   shift
- elif test "X$1" = X--fallback-echo; then
-   # Avoid inline document here, it may be left over
-   :
- elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
-   # Yippee, $echo works!
-   :
- else
-   # Restart under the correct shell.
-   exec "$SHELL" "$0" --no-reexec ${1+"$@"}
- fi
- 
- if test "X$1" = X--fallback-echo; then
-   # used as fallback echo
-   shift
-   cat <<EOF
- $*
- EOF
-   exit 0
- fi
- 
- # Find the correct PATH separator.  Usually this is `:', but
- # DJGPP uses `;' like DOS.
- if test "X${PATH_SEPARATOR+set}" != Xset; then
-   UNAME=${UNAME-`uname 2>/dev/null`}
-   case X$UNAME in
-     *-DOS) PATH_SEPARATOR=';' ;;
-     *)     PATH_SEPARATOR=':' ;;
-   esac
- fi
- 
- # The HP-UX ksh and POSIX shell print the target directory to stdout
- # if CDPATH is set.
- if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
- 
- if test "X${echo_test_string+set}" != Xset; then
-   # find a string as large as possible, as long as the shell can cope with it
-   for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
-     # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
-     if (echo_test_string="`eval $cmd`") 2>/dev/null &&
-        echo_test_string="`eval $cmd`" &&
-        (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null; then
-       break
-     fi
-   done
- fi
- 
- if test "X`($echo '\t') 2>/dev/null`" != 'X\t' ||
-    test "X`($echo "$echo_test_string") 2>/dev/null`" != X"$echo_test_string"; then
-   # The Solaris, AIX, and Digital Unix default echo programs unquote
-   # backslashes.  This makes it impossible to quote backslashes using
-   #   echo "$something" | sed 's/\\/\\\\/g'
-   #
-   # So, first we look for a working echo in the user's PATH.
- 
-   IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
-   for dir in $PATH /usr/ucb; do
-     if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
-        test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
-        test "X`($dir/echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
-       echo="$dir/echo"
-       break
-     fi
-   done
-   IFS="$save_ifs"
- 
-   if test "X$echo" = Xecho; then
-     # We didn't find a better echo, so look for alternatives.
-     if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
-        test "X`(print -r "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
-       # This shell has a builtin print -r that does the trick.
-       echo='print -r'
-     elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
- 	 test "X$CONFIG_SHELL" != X/bin/ksh; then
-       # If we have ksh, try running ltconfig again with it.
-       ORIGINAL_CONFIG_SHELL="${CONFIG_SHELL-/bin/sh}"
-       export ORIGINAL_CONFIG_SHELL
-       CONFIG_SHELL=/bin/ksh
-       export CONFIG_SHELL
-       exec "$CONFIG_SHELL" "$0" --no-reexec ${1+"$@"}
-     else
-       # Try using printf.
-       echo='printf "%s\n"'
-       if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
- 	 test "X`($echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
- 	# Cool, printf works
- 	:
-       elif test "X`("$ORIGINAL_CONFIG_SHELL" "$0" --fallback-echo '\t') 2>/dev/null`" = 'X\t' &&
- 	   test "X`("$ORIGINAL_CONFIG_SHELL" "$0" --fallback-echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
- 	CONFIG_SHELL="$ORIGINAL_CONFIG_SHELL"
- 	export CONFIG_SHELL
- 	SHELL="$CONFIG_SHELL"
- 	export SHELL
- 	echo="$CONFIG_SHELL $0 --fallback-echo"
-       elif test "X`("$CONFIG_SHELL" "$0" --fallback-echo '\t') 2>/dev/null`" = 'X\t' &&
- 	   test "X`("$CONFIG_SHELL" "$0" --fallback-echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
- 	echo="$CONFIG_SHELL $0 --fallback-echo"
-       else
- 	# maybe with a smaller string...
- 	prev=:
- 
- 	for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
- 	  if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null; then
- 	    break
- 	  fi
- 	  prev="$cmd"
- 	done
- 
- 	if test "$prev" != 'sed 50q "$0"'; then
- 	  echo_test_string=`eval $prev`
- 	  export echo_test_string
- 	  exec "${ORIGINAL_CONFIG_SHELL}" "$0" ${1+"$@"}
- 	else
- 	  # Oops.  We lost completely, so just stick with echo.
- 	  echo=echo
- 	fi
-       fi
-     fi
-   fi
- fi
- 
- # Sed substitution that helps us do robust quoting.  It backslashifies
- # metacharacters that are still active within double-quoted strings.
- Xsed='sed -e s/^X//'
- sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'
- 
- # Same as above, but do not quote variable references.
- double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'
- 
- # Sed substitution to delay expansion of an escaped shell variable in a
- # double_quote_subst'ed string.
- delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
- 
- # The name of this program.
- progname=`$echo "X$0" | $Xsed -e 's%^.*/%%'`
- 
- # Constants:
- PROGRAM=ltconfig
- PACKAGE=libtool
- VERSION=1.3.4
- TIMESTAMP=" (1.385.2.196 1999/12/07 21:47:57)"
- ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
- ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
- rm="rm -f"
- 
- help="Try \`$progname --help' for more information."
- 
- # Global variables:
- default_ofile=libtool
- can_build_shared=yes
- enable_shared=yes
- # All known linkers require a `.a' archive for static linking (except M$VC,
- # which needs '.lib').
- enable_static=yes
- enable_fast_install=yes
- enable_dlopen=unknown
- enable_win32_dll=no
- ltmain=
- silent=
- srcdir=
- ac_config_guess=
- ac_config_sub=
- host=
- nonopt=
- ofile="$default_ofile"
- verify_host=yes
- with_gcc=no
- with_gnu_ld=no
- need_locks=yes
- ac_ext=c
- objext=o
- libext=a
- exeext=
- cache_file=
- 
- old_AR="$AR"
- old_CC="$CC"
- old_CFLAGS="$CFLAGS"
- old_CPPFLAGS="$CPPFLAGS"
- old_LDFLAGS="$LDFLAGS"
- old_LD="$LD"
- old_LN_S="$LN_S"
- old_LIBS="$LIBS"
- old_NM="$NM"
- old_RANLIB="$RANLIB"
- old_DLLTOOL="$DLLTOOL"
- old_OBJDUMP="$OBJDUMP"
- old_AS="$AS"
- 
- # Parse the command line options.
- args=
- prev=
- for option
- do
-   case "$option" in
-   -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
-   *) optarg= ;;
-   esac
- 
-   # If the previous option needs an argument, assign it.
-   if test -n "$prev"; then
-     eval "$prev=\$option"
-     prev=
-     continue
-   fi
- 
-   case "$option" in
-   --help) cat <<EOM
- Usage: $progname [OPTION]... [HOST [LTMAIN]]
- 
- Generate a system-specific libtool script.
- 
-     --debug                enable verbose shell tracing
-     --disable-shared       do not build shared libraries
-     --disable-static       do not build static libraries
-     --disable-fast-install do not optimize for fast installation
-     --enable-dlopen        enable dlopen support
-     --enable-win32-dll     enable building dlls on win32 hosts
-     --help                 display this help and exit
-     --no-verify            do not verify that HOST is a valid host type
- -o, --output=FILE          specify the output file [default=$default_ofile]
-     --quiet                same as \`--silent'
-     --silent               do not print informational messages
-     --srcdir=DIR           find \`config.guess' in DIR
-     --version              output version information and exit
-     --with-gcc             assume that the GNU C compiler will be used
-     --with-gnu-ld          assume that the C compiler uses the GNU linker
-     --disable-lock         disable file locking
-     --cache-file=FILE      configure cache file
- 
- LTMAIN is the \`ltmain.sh' shell script fragment or \`ltmain.c' program
- that provides basic libtool functionality.
- 
- HOST is the canonical host system name [default=guessed].
- EOM
-   exit 0
-   ;;
- 
-   --debug)
-     echo "$progname: enabling shell trace mode"
-     set -x
-     ;;
- 
-   --disable-shared) enable_shared=no ;;
- 
-   --disable-static) enable_static=no ;;
- 
-   --disable-fast-install) enable_fast_install=no ;;
- 
-   --enable-dlopen) enable_dlopen=yes ;;
- 
-   --enable-win32-dll) enable_win32_dll=yes ;;
- 
-   --quiet | --silent) silent=yes ;;
- 
-   --srcdir) prev=srcdir ;;
-   --srcdir=*) srcdir="$optarg" ;;
- 
-   --no-verify) verify_host=no ;;
- 
-   --output | -o) prev=ofile ;;
-   --output=*) ofile="$optarg" ;;
- 
-   --version) echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"; exit 0 ;;
- 
-   --with-gcc) with_gcc=yes ;;
-   --with-gnu-ld) with_gnu_ld=yes ;;
- 
-   --disable-lock) need_locks=no ;;
- 
-   --cache-file=*) cache_file="$optarg" ;;
- 
-   -*)
-     echo "$progname: unrecognized option \`$option'" 1>&2
-     echo "$help" 1>&2
-     exit 1
-     ;;
- 
-   *)
-     if test -z "$ltmain"; then
-       ltmain="$option"
-     elif test -z "$host"; then
- # This generates an unnecessary warning for sparc-sun-solaris4.1.3_U1
- #      if test -n "`echo $option| sed 's/[-a-z0-9.]//g'`"; then
- #        echo "$progname: warning \`$option' is not a valid host type" 1>&2
- #      fi
-       host="$option"
-     else
-       echo "$progname: too many arguments" 1>&2
-       echo "$help" 1>&2
-       exit 1
-     fi ;;
-   esac
- done
- 
- if test -z "$ltmain"; then
-   echo "$progname: you must specify a LTMAIN file" 1>&2
-   echo "$help" 1>&2
-   exit 1
- fi
- 
- if test ! -f "$ltmain"; then
-   echo "$progname: \`$ltmain' does not exist" 1>&2
-   echo "$help" 1>&2
-   exit 1
- fi
- 
- # Quote any args containing shell metacharacters.
- ltconfig_args=
- for arg
- do
-   case "$arg" in
-   *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
-   ltconfig_args="$ltconfig_args '$arg'" ;;
-   *) ltconfig_args="$ltconfig_args $arg" ;;
-   esac
- done
- 
- # A relevant subset of AC_INIT.
- 
- # File descriptor usage:
- # 0 standard input
- # 1 file creation
- # 2 errors and warnings
- # 3 some systems may open it to /dev/tty
- # 4 used on the Kubota Titan
- # 5 compiler messages saved in config.log
- # 6 checking for... messages and results
- if test "$silent" = yes; then
-   exec 6>/dev/null
- else
-   exec 6>&1
- fi
- exec 5>>./config.log
- 
- # NLS nuisances.
- # Only set LANG and LC_ALL to C if already set.
- # These must not be set unconditionally because not all systems understand
- # e.g. LANG=C (notably SCO).
- if test "X${LC_ALL+set}" = Xset; then LC_ALL=C; export LC_ALL; fi
- if test "X${LANG+set}"   = Xset; then LANG=C;   export LANG;   fi
- 
- if test -n "$cache_file" && test -r "$cache_file"; then
-   echo "loading cache $cache_file within ltconfig"
-   . $cache_file
- fi
- 
- if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
-   # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
-   if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
-     ac_n= ac_c='
- ' ac_t='	'
-   else
-     ac_n=-n ac_c= ac_t=
-   fi
- else
-   ac_n= ac_c='\c' ac_t=
- fi
- 
- if test -z "$srcdir"; then
-   # Assume the source directory is the same one as the path to LTMAIN.
-   srcdir=`$echo "X$ltmain" | $Xsed -e 's%/[^/]*$%%'`
-   test "$srcdir" = "$ltmain" && srcdir=.
- fi
- 
- trap "$rm conftest*; exit 1" 1 2 15
- if test "$verify_host" = yes; then
-   # Check for config.guess and config.sub.
-   ac_aux_dir=
-   for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
-     if test -f $ac_dir/config.guess; then
-       ac_aux_dir=$ac_dir
-       break
-     fi
-   done
-   if test -z "$ac_aux_dir"; then
-     echo "$progname: cannot find config.guess in $srcdir $srcdir/.. $srcdir/../.." 1>&2
-     echo "$help" 1>&2
-     exit 1
-   fi
-   ac_config_guess=$ac_aux_dir/config.guess
-   ac_config_sub=$ac_aux_dir/config.sub
- 
-   # Make sure we can run config.sub.
-   if $SHELL $ac_config_sub sun4 >/dev/null 2>&1; then :
-   else
-     echo "$progname: cannot run $ac_config_sub" 1>&2
-     echo "$help" 1>&2
-     exit 1
-   fi
- 
-   echo $ac_n "checking host system type""... $ac_c" 1>&6
- 
-   host_alias=$host
-   case "$host_alias" in
-   "")
-     if host_alias=`$SHELL $ac_config_guess`; then :
-     else
-       echo "$progname: cannot guess host type; you must specify one" 1>&2
-       echo "$help" 1>&2
-       exit 1
-     fi ;;
-   esac
-   host=`$SHELL $ac_config_sub $host_alias`
-   echo "$ac_t$host" 1>&6
- 
-   # Make sure the host verified.
-   test -z "$host" && exit 1
- 
- elif test -z "$host"; then
-   echo "$progname: you must specify a host type if you use \`--no-verify'" 1>&2
-   echo "$help" 1>&2
-   exit 1
- else
-   host_alias=$host
- fi
- 
- # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
- case "$host_os" in
- linux-gnu*) ;;
- linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
- esac
- 
- host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
- host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
- host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
- 
- case "$host_os" in
- aix3*)
-   # AIX sometimes has problems with the GCC collect2 program.  For some
-   # reason, if we set the COLLECT_NAMES environment variable, the problems
-   # vanish in a puff of smoke.
-   if test "X${COLLECT_NAMES+set}" != Xset; then
-     COLLECT_NAMES=
-     export COLLECT_NAMES
-   fi
-   ;;
- esac
- 
- # Determine commands to create old-style static archives.
- old_archive_cmds='$AR cru $oldlib$oldobjs'
- old_postinstall_cmds='chmod 644 $oldlib'
- old_postuninstall_cmds=
- 
- # Set a sane default for `AR'.
- test -z "$AR" && AR=ar
- 
- # Set a sane default for `OBJDUMP'.
- test -z "$OBJDUMP" && OBJDUMP=objdump
- 
- # If RANLIB is not set, then run the test.
- if test "${RANLIB+set}" != "set"; then
-   result=no
- 
-   echo $ac_n "checking for ranlib... $ac_c" 1>&6
-   IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
-   for dir in $PATH; do
-     test -z "$dir" && dir=.
-     if test -f $dir/ranlib || test -f $dir/ranlib$ac_exeext; then
-       RANLIB="ranlib"
-       result="ranlib"
-       break
-     fi
-   done
-   IFS="$save_ifs"
- 
-   echo "$ac_t$result" 1>&6
- fi
- 
- if test -n "$RANLIB"; then
-   old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
-   old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
- fi
- 
- # Set sane defaults for `DLLTOOL', `OBJDUMP', and `AS', used on cygwin.
- test -z "$DLLTOOL" && DLLTOOL=dlltool
- test -z "$OBJDUMP" && OBJDUMP=objdump
- test -z "$AS" && AS=as
- 
- # Check to see if we are using GCC.
- if test "$with_gcc" != yes || test -z "$CC"; then
-   # If CC is not set, then try to find GCC or a usable CC.
-   if test -z "$CC"; then
-     echo $ac_n "checking for gcc... $ac_c" 1>&6
-     IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
-     for dir in $PATH; do
-       test -z "$dir" && dir=.
-       if test -f $dir/gcc || test -f $dir/gcc$ac_exeext; then
- 	CC="gcc"
- 	break
-       fi
-     done
-     IFS="$save_ifs"
- 
-     if test -n "$CC"; then
-       echo "$ac_t$CC" 1>&6
-     else
-       echo "$ac_t"no 1>&6
-     fi
-   fi
- 
-   # Not "gcc", so try "cc", rejecting "/usr/ucb/cc".
-   if test -z "$CC"; then
-     echo $ac_n "checking for cc... $ac_c" 1>&6
-     IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
-     cc_rejected=no
-     for dir in $PATH; do
-       test -z "$dir" && dir=.
-       if test -f $dir/cc || test -f $dir/cc$ac_exeext; then
- 	if test "$dir/cc" = "/usr/ucb/cc"; then
- 	  cc_rejected=yes
- 	  continue
- 	fi
- 	CC="cc"
- 	break
-       fi
-     done
-     IFS="$save_ifs"
-     if test $cc_rejected = yes; then
-       # We found a bogon in the path, so make sure we never use it.
-       set dummy $CC
-       shift
-       if test $# -gt 0; then
- 	# We chose a different compiler from the bogus one.
- 	# However, it has the same name, so the bogon will be chosen
- 	# first if we set CC to just the name; use the full file name.
- 	shift
- 	set dummy "$dir/cc" "$@"
- 	shift
- 	CC="$@"
-       fi
-     fi
- 
-     if test -n "$CC"; then
-       echo "$ac_t$CC" 1>&6
-     else
-       echo "$ac_t"no 1>&6
-     fi
- 
-     if test -z "$CC"; then
-       echo "$progname: error: no acceptable cc found in \$PATH" 1>&2
-       exit 1
-     fi
-   fi
- 
-   # Now see if the compiler is really GCC.
-   with_gcc=no
-   echo $ac_n "checking whether we are using GNU C... $ac_c" 1>&6
-   echo "$progname:581: checking whether we are using GNU C" >&5
- 
-   $rm conftest.c
-   cat > conftest.c <<EOF
- #ifdef __GNUC__
-   yes;
- #endif
- EOF
-   if { ac_try='${CC-cc} -E conftest.c'; { (eval echo $progname:589: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
-     with_gcc=yes
-   fi
-   $rm conftest.c
-   echo "$ac_t$with_gcc" 1>&6
- fi
- 
- # Allow CC to be a program name with arguments.
- set dummy $CC
- compiler="$2"
- 
- echo $ac_n "checking for object suffix... $ac_c" 1>&6
- $rm conftest*
- echo 'int i = 1;' > conftest.c
- echo "$progname:603: checking for object suffix" >& 5
- if { (eval echo $progname:604: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; }; then
-   # Append any warnings to the config.log.
-   cat conftest.err 1>&5
- 
-   for ac_file in conftest.*; do
-     case $ac_file in
-     *.c) ;;
-     *) objext=`echo $ac_file | sed -e s/conftest.//` ;;
-     esac
-   done
- else
-   cat conftest.err 1>&5
-   echo "$progname: failed program was:" >&5
-   cat conftest.c >&5
- fi
- $rm conftest*
- echo "$ac_t$objext" 1>&6
- 
- echo $ac_n "checking for executable suffix... $ac_c" 1>&6
- if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   ac_cv_exeext="no"
-   $rm conftest*
-   echo 'main () { return 0; }' > conftest.c
-   echo "$progname:629: checking for executable suffix" >& 5
-   if { (eval echo $progname:630: \"$ac_link\") 1>&5; (eval $ac_link) 2>conftest.err; }; then
-     # Append any warnings to the config.log.
-     cat conftest.err 1>&5
- 
-     for ac_file in conftest.*; do
-       case $ac_file in
-       *.c | *.err | *.$objext ) ;;
-       *) ac_cv_exeext=.`echo $ac_file | sed -e s/conftest.//` ;;
-       esac
-     done
-   else
-     cat conftest.err 1>&5
-     echo "$progname: failed program was:" >&5
-     cat conftest.c >&5
-   fi
-   $rm conftest*
- fi
- if test "X$ac_cv_exeext" = Xno; then
-   exeext=""
- else
-   exeext="$ac_cv_exeext"
- fi
- echo "$ac_t$ac_cv_exeext" 1>&6
- 
- echo $ac_n "checking for $compiler option to produce PIC... $ac_c" 1>&6
- pic_flag=
- special_shlib_compile_flags=
- wl=
- link_static_flag=
- no_builtin_flag=
- 
- if test "$with_gcc" = yes; then
-   wl='-Wl,'
-   link_static_flag='-static'
- 
-   case "$host_os" in
-   beos* | irix5* | irix6* | osf3* | osf4* | osf5*)
-     # PIC is the default for these OSes.
-     ;;
-   aix*)
-     # Below there is a dirty hack to force normal static linking with -ldl
-     # The problem is because libdl dynamically linked with both libc and
-     # libC (AIX C++ library), which obviously doesn't included in libraries
-     # list by gcc. This cause undefined symbols with -static flags.
-     # This hack allows C programs to be linked with "-static -ldl", but
-     # we not sure about C++ programs.
-     link_static_flag="$link_static_flag ${wl}-lC"
-     ;;
-   cygwin* | mingw* | os2*)
-     # We can build DLLs from non-PIC.
-     ;;
-   amigaos*)
-     # FIXME: we need at least 68020 code to build shared libraries, but
-     # adding the `-m68020' flag to GCC prevents building anything better,
-     # like `-m68040'.
-     pic_flag='-m68020 -resident32 -malways-restore-a4'
-     ;;
-   sysv4*MP*)
-     if test -d /usr/nec; then
-        pic_flag=-Kconform_pic
-     fi
-     ;;
-   *)
-     pic_flag='-fPIC'
-     ;;
-   esac
- else
-   # PORTME Check for PIC flags for the system compiler.
-   case "$host_os" in
-   aix3* | aix4*)
-     # All AIX code is PIC.
-     link_static_flag='-bnso -bI:/lib/syscalls.exp'
-     ;;
- 
-   hpux9* | hpux10* | hpux11*)
-     # Is there a better link_static_flag that works with the bundled CC?
-     wl='-Wl,'
-     link_static_flag="${wl}-a ${wl}archive"
-     pic_flag='+Z'
-     ;;
- 
-   irix5* | irix6*)
-     wl='-Wl,'
-     link_static_flag='-non_shared'
-     # PIC (with -KPIC) is the default.
-     ;;
- 
-   cygwin* | mingw* | os2*)
-     # We can build DLLs from non-PIC.
-     ;;
- 
-   osf3* | osf4* | osf5*)
-     # All OSF/1 code is PIC.
-     wl='-Wl,'
-     link_static_flag='-non_shared'
-     ;;
- 
-   sco3.2v5*)
-     pic_flag='-Kpic'
-     link_static_flag='-dn'
-     special_shlib_compile_flags='-belf'
-     ;;
- 
-   solaris*)
-     pic_flag='-KPIC'
-     link_static_flag='-Bstatic'
-     wl='-Wl,'
-     ;;
- 
-   sunos4*)
-     pic_flag='-PIC'
-     link_static_flag='-Bstatic'
-     wl='-Qoption ld '
-     ;;
- 
-   sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
-     pic_flag='-KPIC'
-     link_static_flag='-Bstatic'
-     wl='-Wl,'
-     ;;
- 
-   uts4*)
-     pic_flag='-pic'
-     link_static_flag='-Bstatic'
-     ;;
-   sysv4*MP*)
-     if test -d /usr/nec ;then
-       pic_flag='-Kconform_pic'
-       link_static_flag='-Bstatic'
-     fi
-     ;;
-   *)
-     can_build_shared=no
-     ;;
-   esac
- fi
- 
- if test -n "$pic_flag"; then
-   echo "$ac_t$pic_flag" 1>&6
- 
-   # Check to make sure the pic_flag actually works.
-   echo $ac_n "checking if $compiler PIC flag $pic_flag works... $ac_c" 1>&6
-   $rm conftest*
-   echo "int some_variable = 0;" > conftest.c
-   save_CFLAGS="$CFLAGS"
-   CFLAGS="$CFLAGS $pic_flag -DPIC"
-   echo "$progname:776: checking if $compiler PIC flag $pic_flag works" >&5
-   if { (eval echo $progname:777: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.$objext; then
-     # Append any warnings to the config.log.
-     cat conftest.err 1>&5
-     
-     case "$host_os" in
-     hpux9* | hpux10* | hpux11*)
-       # On HP-UX, both CC and GCC only warn that PIC is supported... then they
-       # create non-PIC objects.  So, if there were any warnings, we assume that
-       # PIC is not supported.
-       if test -s conftest.err; then
- 	echo "$ac_t"no 1>&6
- 	can_build_shared=no
- 	pic_flag=
-       else
- 	echo "$ac_t"yes 1>&6
- 	pic_flag=" $pic_flag"
-       fi
-       ;;
-     *)
-       echo "$ac_t"yes 1>&6
-       pic_flag=" $pic_flag"
-       ;;
-     esac
-   else
-     # Append any errors to the config.log.
-     cat conftest.err 1>&5
-     can_build_shared=no
-     pic_flag=
-     echo "$ac_t"no 1>&6
-   fi
-   CFLAGS="$save_CFLAGS"
-   $rm conftest*
- else
-   echo "$ac_t"none 1>&6
- fi
- 
- # Check to see if options -o and -c are simultaneously supported by compiler
- echo $ac_n "checking if $compiler supports -c -o file.o... $ac_c" 1>&6
- $rm -r conftest 2>/dev/null
- mkdir conftest
- cd conftest
- $rm conftest*
- echo "int some_variable = 0;" > conftest.c
- mkdir out
- # According to Tom Tromey, Ian Lance Taylor reported there are C compilers
- # that will create temporary files in the current directory regardless of
- # the output directory.  Thus, making CWD read-only will cause this test
- # to fail, enabling locking or at least warning the user not to do parallel
- # builds.
- chmod -w .
- save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -o out/conftest2.o"
- echo "$progname:829: checking if $compiler supports -c -o file.o" >&5
- if { (eval echo $progname:830: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.o; then
- 
-   # The compiler can only warn and ignore the option if not recognized
-   # So say no if there are warnings
-     if test -s out/conftest.err; then
-       echo "$ac_t"no 1>&6
-       compiler_c_o=no
-     else
-       echo "$ac_t"yes 1>&6
-       compiler_c_o=yes
-     fi
- else
-   # Append any errors to the config.log.
-   cat out/conftest.err 1>&5
-   compiler_c_o=no
-   echo "$ac_t"no 1>&6
- fi
- CFLAGS="$save_CFLAGS"
- chmod u+w .
- $rm conftest* out/*
- rmdir out
- cd ..
- rmdir conftest
- $rm -r conftest 2>/dev/null
- 
- if test x"$compiler_c_o" = x"yes"; then
-   # Check to see if we can write to a .lo
-   echo $ac_n "checking if $compiler supports -c -o file.lo... $ac_c" 1>&6
-   $rm conftest*
-   echo "int some_variable = 0;" > conftest.c
-   save_CFLAGS="$CFLAGS"
-   CFLAGS="$CFLAGS -c -o conftest.lo"
-   echo "$progname:862: checking if $compiler supports -c -o file.lo" >&5
- if { (eval echo $progname:863: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.lo; then
- 
-     # The compiler can only warn and ignore the option if not recognized
-     # So say no if there are warnings
-       if test -s conftest.err; then
- 	echo "$ac_t"no 1>&6
- 	compiler_o_lo=no
-       else
- 	echo "$ac_t"yes 1>&6
- 	compiler_o_lo=yes
-       fi
-   else
-     # Append any errors to the config.log.
-     cat conftest.err 1>&5
-     compiler_o_lo=no
-     echo "$ac_t"no 1>&6
-   fi
-   CFLAGS="$save_CFLAGS"
-   $rm conftest*
- else
-   compiler_o_lo=no
- fi
- 
- # Check to see if we can do hard links to lock some files if needed
- hard_links="nottested"
- if test "$compiler_c_o" = no && test "$need_locks" != no; then
-   # do not overwrite the value of need_locks provided by the user
-   echo $ac_n "checking if we can lock with hard links... $ac_c" 1>&6
-   hard_links=yes
-   $rm conftest*
-   ln conftest.a conftest.b 2>/dev/null && hard_links=no
-   touch conftest.a
-   ln conftest.a conftest.b 2>&5 || hard_links=no
-   ln conftest.a conftest.b 2>/dev/null && hard_links=no
-   echo "$ac_t$hard_links" 1>&6
-   $rm conftest*
-   if test "$hard_links" = no; then
-     echo "*** WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2
-     need_locks=warn
-   fi
- else
-   need_locks=no
- fi
- 
- if test "$with_gcc" = yes; then
-   # Check to see if options -fno-rtti -fno-exceptions are supported by compiler
-   echo $ac_n "checking if $compiler supports -fno-rtti -fno-exceptions ... $ac_c" 1>&6
-   $rm conftest*
-   echo "int some_variable = 0;" > conftest.c
-   save_CFLAGS="$CFLAGS"
-   CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.c"
-   echo "$progname:914: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
-   if { (eval echo $progname:915: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.o; then
- 
-     # The compiler can only warn and ignore the option if not recognized
-     # So say no if there are warnings
-       if test -s conftest.err; then
- 	echo "$ac_t"no 1>&6
- 	compiler_rtti_exceptions=no
-       else
- 	echo "$ac_t"yes 1>&6
- 	compiler_rtti_exceptions=yes
-       fi
-   else
-     # Append any errors to the config.log.
-     cat conftest.err 1>&5
-     compiler_rtti_exceptions=no
-     echo "$ac_t"no 1>&6
-   fi
-   CFLAGS="$save_CFLAGS"
-   $rm conftest*
- 
-   if test "$compiler_rtti_exceptions" = "yes"; then
-     no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions'
-   else
-     no_builtin_flag=' -fno-builtin'
-   fi
-   
- fi
- 
- # Check for any special shared library compilation flags.
- if test -n "$special_shlib_compile_flags"; then
-   echo "$progname: warning: \`$CC' requires \`$special_shlib_compile_flags' to build shared libraries" 1>&2
-   if echo "$old_CC $old_CFLAGS " | egrep -e "[ 	]$special_shlib_compile_flags[ 	]" >/dev/null; then :
-   else
-     echo "$progname: add \`$special_shlib_compile_flags' to the CC or CFLAGS env variable and reconfigure" 1>&2
-     can_build_shared=no
-   fi
- fi
- 
- echo $ac_n "checking if $compiler static flag $link_static_flag works... $ac_c" 1>&6
- $rm conftest*
- echo 'main(){return(0);}' > conftest.c
- save_LDFLAGS="$LDFLAGS"
- LDFLAGS="$LDFLAGS $link_static_flag"
- echo "$progname:958: checking if $compiler static flag $link_static_flag works" >&5
- if { (eval echo $progname:959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
-   echo "$ac_t$link_static_flag" 1>&6
- else
-   echo "$ac_t"none 1>&6
-   link_static_flag=
- fi
- LDFLAGS="$save_LDFLAGS"
- $rm conftest*
- 
- if test -z "$LN_S"; then
-   # Check to see if we can use ln -s, or we need hard links.
-   echo $ac_n "checking whether ln -s works... $ac_c" 1>&6
-   $rm conftest.dat
-   if ln -s X conftest.dat 2>/dev/null; then
-     $rm conftest.dat
-     LN_S="ln -s"
-   else
-     LN_S=ln
-   fi
-   if test "$LN_S" = "ln -s"; then
-     echo "$ac_t"yes 1>&6
-   else
-     echo "$ac_t"no 1>&6
-   fi
- fi
- 
- # Make sure LD is an absolute path.
- if test -z "$LD"; then
-   ac_prog=ld
-   if test "$with_gcc" = yes; then
-     # Check if gcc -print-prog-name=ld gives a path.
-     echo $ac_n "checking for ld used by GCC... $ac_c" 1>&6
-     echo "$progname:991: checking for ld used by GCC" >&5
-     ac_prog=`($CC -print-prog-name=ld) 2>&5`
-     case "$ac_prog" in
-     # Accept absolute paths.
-     [\\/]* | [A-Za-z]:[\\/]*)
-       re_direlt='/[^/][^/]*/\.\./'
-       # Canonicalize the path of ld
-       ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
-       while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
- 	ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
-       done
-       test -z "$LD" && LD="$ac_prog"
-       ;;
-     "")
-       # If it fails, then pretend we are not using GCC.
-       ac_prog=ld
-       ;;
-     *)
-       # If it is relative, then search for the first ld in PATH.
-       with_gnu_ld=unknown
-       ;;
-     esac
-   elif test "$with_gnu_ld" = yes; then
-     echo $ac_n "checking for GNU ld... $ac_c" 1>&6
-     echo "$progname:1015: checking for GNU ld" >&5
-   else
-     echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6
-     echo "$progname:1018: checking for non-GNU ld" >&5
-   fi
- 
-   if test -z "$LD"; then
-     IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
-     for ac_dir in $PATH; do
-       test -z "$ac_dir" && ac_dir=.
-       if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
- 	LD="$ac_dir/$ac_prog"
- 	# Check to see if the program is GNU ld.  I'd rather use --version,
- 	# but apparently some GNU ld's only accept -v.
- 	# Break only if it was the GNU/non-GNU ld that we prefer.
- 	if "$LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
- 	  test "$with_gnu_ld" != no && break
- 	else
- 	  test "$with_gnu_ld" != yes && break
- 	fi
-       fi
-     done
-     IFS="$ac_save_ifs"
-   fi
- 
-   if test -n "$LD"; then
-     echo "$ac_t$LD" 1>&6
-   else
-     echo "$ac_t"no 1>&6
-   fi
- 
-   if test -z "$LD"; then
-     echo "$progname: error: no acceptable ld found in \$PATH" 1>&2
-     exit 1
-   fi
- fi
- 
- # Check to see if it really is or is not GNU ld.
- echo $ac_n "checking if the linker ($LD) is GNU ld... $ac_c" 1>&6
- # I'd rather use --version here, but apparently some GNU ld's only accept -v.
- if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
-   with_gnu_ld=yes
- else
-   with_gnu_ld=no
- fi
- echo "$ac_t$with_gnu_ld" 1>&6
- 
- # See if the linker supports building shared libraries.
- echo $ac_n "checking whether the linker ($LD) supports shared libraries... $ac_c" 1>&6
- 
- allow_undefined_flag=
- no_undefined_flag=
- need_lib_prefix=unknown
- need_version=unknown
- # when you set need_version to no, make sure it does not cause -set_version
- # flags to be left without arguments
- archive_cmds=
- archive_expsym_cmds=
- old_archive_from_new_cmds=
- export_dynamic_flag_spec=
- whole_archive_flag_spec=
- thread_safe_flag_spec=
- hardcode_libdir_flag_spec=
- hardcode_libdir_separator=
- hardcode_direct=no
- hardcode_minus_L=no
- hardcode_shlibpath_var=unsupported
- runpath_var=
- always_export_symbols=no
- export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols'
- # include_expsyms should be a list of space-separated symbols to be *always*
- # included in the symbol list
- include_expsyms=
- # exclude_expsyms can be an egrep regular expression of symbols to exclude
- # it will be wrapped by ` (' and `)$', so one must not match beginning or
- # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
- # as well as any symbol that contains `d'.
- exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
- # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
- # platforms (ab)use it in PIC code, but their linkers get confused if
- # the symbol is explicitly referenced.  Since portable code cannot
- # rely on this symbol name, it's probably fine to never include it in
- # preloaded symbol tables.
- 
- case "$host_os" in
- cygwin* | mingw*)
-   # FIXME: the MSVC++ port hasn't been tested in a loooong time
-   # When not using gcc, we currently assume that we are using
-   # Microsoft Visual C++.
-   if test "$with_gcc" != yes; then
-     with_gnu_ld=no
-   fi
-   ;;
- 
- esac
- 
- ld_shlibs=yes
- if test "$with_gnu_ld" = yes; then
-   # If archive_cmds runs LD, not CC, wlarc should be empty
-   wlarc='${wl}'
- 
-   # See if GNU ld supports shared libraries.
-   case "$host_os" in
-   aix3* | aix4*)
-     # On AIX, the GNU linker is very broken
-     ld_shlibs=no
-     cat <<EOF 1>&2
- 
- *** Warning: the GNU linker, at least up to release 2.9.1, is reported
- *** to be unable to reliably create shared libraries on AIX.
- *** Therefore, libtool is disabling shared libraries support.  If you
- *** really care for shared libraries, you may want to modify your PATH
- *** so that a non-GNU linker is found, and then restart.
- 
- EOF
-     ;;
- 
-   amigaos*)
-     archive_cmds='$rm $objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $objdir/a2ixlibrary.data~$AR cru $lib $libobjs~$RANLIB $lib~(cd $objdir && a2ixlibrary -32)'
-     hardcode_libdir_flag_spec='-L$libdir'
-     hardcode_minus_L=yes
- 
-     # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
-     # that the semantics of dynamic libraries on AmigaOS, at least up
-     # to version 4, is to share data among multiple programs linked
-     # with the same dynamic library.  Since this doesn't match the
-     # behavior of shared libraries on other platforms, we can use
-     # them.
-     ld_shlibs=no
-     ;;
- 
-   beos*)
-     if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
-       allow_undefined_flag=unsupported
-       # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
-       # support --undefined.  This deserves some investigation.  FIXME
-       archive_cmds='$CC -nostart $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
-     else
-       ld_shlibs=no
-     fi
-     ;;
- 
-   cygwin* | mingw*)
-     # hardcode_libdir_flag_spec is actually meaningless, as there is
-     # no search path for DLLs.
-     hardcode_libdir_flag_spec='-L$libdir'
-     allow_undefined_flag=unsupported
-     always_export_symbols=yes
- 
-     # Extract the symbol export list from an `--export-all' def file,
-     # then regenerate the def file from the symbol export list, so that
-     # the compiled dll only exports the symbol export list.
-     export_symbols_cmds='test -f $objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~
-       test -f $objdir/$soname-ltdll.$objext || (cd $objdir && $CC -c $soname-ltdll.c)~
-       $DLLTOOL --export-all --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --output-def $objdir/$soname-def  $objdir/$soname-ltdll.$objext $libobjs $convenience~
-       sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]* ; *//" < $objdir/$soname-def > $export_symbols'
- 
-     archive_expsym_cmds='echo EXPORTS > $objdir/$soname-def~
-       _lt_hint=1;
-       for symbol in `cat $export_symbols`; do
- 	echo "	\$symbol @ \$_lt_hint ; " >> $objdir/$soname-def;
- 	_lt_hint=`expr 1 + \$_lt_hint`;
-       done~
-       test -f $objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~
-       test -f $objdir/$soname-ltdll.$objext || (cd $objdir && $CC -c $soname-ltdll.c)~
-       $CC -Wl,--base-file,$objdir/$soname-base -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts~
-       $DLLTOOL --as=$AS --dllname $soname --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --def $objdir/$soname-def --base-file $objdir/$soname-base --output-exp $objdir/$soname-exp~
-       $CC -Wl,--base-file,$objdir/$soname-base $objdir/$soname-exp -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts~
-       $DLLTOOL --as=$AS --dllname $soname --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --def $objdir/$soname-def --base-file $objdir/$soname-base --output-exp $objdir/$soname-exp~
-       $CC $objdir/$soname-exp -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts'
- 
-       old_archive_from_new_cmds='$DLLTOOL --as=$AS --dllname $soname --def $objdir/$soname-def --output-lib $objdir/$libname.a' 
-     ;;
- 
-   netbsd*)
-     if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-       archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
-       archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-     else
-       archive_cmds='$LD -Bshareable $libobjs $deplibs $linkopts -o $lib'
-       # can we support soname and/or expsyms with a.out? -oliva
-     fi
-     ;;
- 
-   solaris* | sysv5*)
-     if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
-       ld_shlibs=no
-       cat <<EOF 1>&2
- 
- *** Warning: The releases 2.8.* of the GNU linker cannot reliably
- *** create shared libraries on Solaris systems.  Therefore, libtool
- *** is disabling shared libraries support.  We urge you to upgrade GNU
- *** binutils to release 2.9.1 or newer.  Another option is to modify
- *** your PATH or compiler configuration so that the native linker is
- *** used, and then restart.
- 
- EOF
-     elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
-       archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
-       archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-     else
-       ld_shlibs=no
-     fi
-     ;;      
- 
-   sunos4*)
-     archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linkopts'
-     wlarc=
-     hardcode_direct=yes
-     hardcode_shlibpath_var=no
-     ;;
- 
-   *)
-     if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
-       archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
-       archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-     else
-       ld_shlibs=no
-     fi
-     ;;
-   esac
- 
-   if test "$ld_shlibs" = yes; then
-     runpath_var=LD_RUN_PATH
-     hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
-     export_dynamic_flag_spec='${wl}--export-dynamic'
-     case $host_os in
-     cygwin* | mingw*)
-       # dlltool doesn't understand --whole-archive et. al.
-       whole_archive_flag_spec=
-       ;;
-     *)
-       # ancient GNU ld didn't support --whole-archive et. al.
-       if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then
-         whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-       else
-         whole_archive_flag_spec=
-       fi
-       ;;
-     esac
-   fi
- else
-   # PORTME fill in a description of your system's linker (not GNU ld)
-   case "$host_os" in
-   aix3*)
-     allow_undefined_flag=unsupported
-     always_export_symbols=yes
-     archive_expsym_cmds='$LD -o $objdir/$soname $libobjs $deplibs $linkopts -bE:$export_symbols -T512 -H512 -bM:SRE~$AR cru $lib $objdir/$soname'
-     # Note: this linker hardcodes the directories in LIBPATH if there
-     # are no directories specified by -L.
-     hardcode_minus_L=yes
-     if test "$with_gcc" = yes && test -z "$link_static_flag"; then
-       # Neither direct hardcoding nor static linking is supported with a
-       # broken collect2.
-       hardcode_direct=unsupported
-     fi
-     ;;
- 
-   aix4*)
-     hardcode_libdir_flag_spec='${wl}-b ${wl}nolibpath ${wl}-b ${wl}libpath:$libdir:/usr/lib:/lib'
-     hardcode_libdir_separator=':'
-     if test "$with_gcc" = yes; then
-       collect2name=`${CC} -print-prog-name=collect2`
-       if test -f "$collect2name" && \
- 	 strings "$collect2name" | grep resolve_lib_name >/dev/null
-       then
- 	# We have reworked collect2
- 	hardcode_direct=yes
-       else
- 	# We have old collect2
- 	hardcode_direct=unsupported
- 	# It fails to find uninstalled libraries when the uninstalled
- 	# path is not listed in the libpath.  Setting hardcode_minus_L
- 	# to unsupported forces relinking
- 	hardcode_minus_L=yes
- 	hardcode_libdir_flag_spec='-L$libdir'
- 	hardcode_libdir_separator=
-       fi
-       shared_flag='-shared'
-     else
-       shared_flag='${wl}-bM:SRE'
-       hardcode_direct=yes
-     fi
-     allow_undefined_flag=' ${wl}-berok'
-     archive_cmds="\$CC $shared_flag"' -o $objdir/$soname $libobjs $deplibs $linkopts ${wl}-bexpall ${wl}-bnoentry${allow_undefined_flag}'
-     archive_expsym_cmds="\$CC $shared_flag"' -o $objdir/$soname $libobjs $deplibs $linkopts ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}'
-     case "$host_os" in aix4.[01]|aix4.[01].*)
-       # According to Greg Wooledge, -bexpall is only supported from AIX 4.2 on
-       always_export_symbols=yes ;;
-     esac
-    ;;
- 
-   amigaos*)
-     archive_cmds='$rm $objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $objdir/a2ixlibrary.data~$AR cru $lib $libobjs~$RANLIB $lib~(cd $objdir && a2ixlibrary -32)'
-     hardcode_libdir_flag_spec='-L$libdir'
-     hardcode_minus_L=yes
-     # see comment about different semantics on the GNU ld section
-     ld_shlibs=no
-     ;;
- 
-   cygwin* | mingw*)
-     # When not using gcc, we currently assume that we are using
-     # Microsoft Visual C++.
-     # hardcode_libdir_flag_spec is actually meaningless, as there is
-     # no search path for DLLs.
-     hardcode_libdir_flag_spec=' '
-     allow_undefined_flag=unsupported
-     # Tell ltmain to make .lib files, not .a files.
-     libext=lib
-     # FIXME: Setting linknames here is a bad hack.
-     archive_cmds='$CC -o $lib $libobjs $linkopts `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames='
-     # The linker will automatically build a .lib file if we build a DLL.
-     old_archive_from_new_cmds='true'
-     # FIXME: Should let the user specify the lib program.
-     old_archive_cmds='lib /OUT:$oldlib$oldobjs'
-     fix_srcfile_path='`cygpath -w $srcfile`'
-     ;;
- 
-   freebsd1*)
-     ld_shlibs=no
-     ;;
- 
-   # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
-   # support.  Future versions do this automatically, but an explicit c++rt0.o
-   # does not break anything, and helps significantly (at the cost of a little
-   # extra space).
-   freebsd2.2*)
-     archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts /usr/lib/c++rt0.o'
-     hardcode_libdir_flag_spec='-R$libdir'
-     hardcode_direct=yes
-     hardcode_shlibpath_var=no
-     ;;
- 
-   # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-   freebsd2*)
-     archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts'
-     hardcode_direct=yes
-     hardcode_minus_L=yes
-     hardcode_shlibpath_var=no
-     ;;
- 
-   # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
-   freebsd*)
-     archive_cmds='$CC -shared -o $lib $libobjs $deplibs $linkopts'
-     hardcode_libdir_flag_spec='-R$libdir'
-     hardcode_direct=yes
-     hardcode_shlibpath_var=no
-     ;;
- 
-   hpux9* | hpux10* | hpux11*)
-     case "$host_os" in
-     hpux9*) archive_cmds='$rm $objdir/$soname~$LD -b +b $install_libdir -o $objdir/$soname $libobjs $deplibs $linkopts~test $objdir/$soname = $lib || mv $objdir/$soname $lib' ;;
-     *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linkopts' ;;
-     esac
-     hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
-     hardcode_libdir_separator=:
-     hardcode_direct=yes
-     hardcode_minus_L=yes # Not in the search PATH, but as the default
- 			 # location of the library.
-     export_dynamic_flag_spec='${wl}-E'
-     ;;
- 
-   irix5* | irix6*)
-     if test "$with_gcc" = yes; then
-       archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
-     else
-       archive_cmds='$LD -shared $libobjs $deplibs $linkopts -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
-     fi
-     hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-     hardcode_libdir_separator=:
-     ;;
- 
-   netbsd*)
-     if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-       archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts'  # a.out
-     else
-       archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linkopts'      # ELF
-     fi
-     hardcode_libdir_flag_spec='${wl}-R$libdir'
-     hardcode_direct=yes
-     hardcode_shlibpath_var=no
-     ;;
- 
-   openbsd*)
-     archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts'
-     hardcode_libdir_flag_spec='-R$libdir'
-     hardcode_direct=yes
-     hardcode_shlibpath_var=no
-     ;;
- 
-   os2*)
-     hardcode_libdir_flag_spec='-L$libdir'
-     hardcode_minus_L=yes
-     allow_undefined_flag=unsupported
-     archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $objdir/$libname.def~$echo DATA >> $objdir/$libname.def~$echo " SINGLE NONSHARED" >> $objdir/$libname.def~$echo EXPORTS >> $objdir/$libname.def~emxexp $libobjs >> $objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $linkopts $objdir/$libname.def'
-     old_archive_from_new_cmds='emximp -o $objdir/$libname.a $objdir/$libname.def'
-     ;;
- 
-   osf3*)
-     if test "$with_gcc" = yes; then
-       allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $linkopts ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
-     else
-       allow_undefined_flag=' -expect_unresolved \*'
-       archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linkopts -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
-     fi
-     hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-     hardcode_libdir_separator=:
-     ;;
- 
-   osf4* | osf5*)  # As osf3* with the addition of the -msym flag
-     if test "$with_gcc" = yes; then
-       allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $linkopts ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
-     else
-       allow_undefined_flag=' -expect_unresolved \*'
-       archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linkopts -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
-     fi
-     hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-     hardcode_libdir_separator=:
-     ;;
- 
-   sco3.2v5*)
-     archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
-     hardcode_shlibpath_var=no
-     runpath_var=LD_RUN_PATH
-     hardcode_runpath_var=yes
-     ;;
- 
-   solaris*)
-     no_undefined_flag=' -z text'
-     # $CC -shared without GNU ld will not create a library from C++
-     # object files and a static libstdc++, better avoid it by now
-     archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linkopts'
-     archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- 		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linkopts~$rm $lib.exp'
-     hardcode_libdir_flag_spec='-R$libdir'
-     hardcode_shlibpath_var=no
-     case "$host_os" in
-     solaris2.[0-5] | solaris2.[0-5].*) ;;
-     *) # Supported since Solaris 2.6 (maybe 2.5.1?)
-       whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
-     esac
-     ;;
- 
-   sunos4*)
-     archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linkopts'
-     hardcode_libdir_flag_spec='-L$libdir'
-     hardcode_direct=yes
-     hardcode_minus_L=yes
-     hardcode_shlibpath_var=no
-     ;;
- 
-   sysv4)
-     archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
-     runpath_var='LD_RUN_PATH'
-     hardcode_shlibpath_var=no
-     hardcode_direct=no #Motorola manual says yes, but my tests say they lie 
-     ;;  
- 
-   sysv4.3*)
-     archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
-     hardcode_shlibpath_var=no
-     export_dynamic_flag_spec='-Bexport'
-     ;;
- 
-   sysv5*)
-     no_undefined_flag=' -z text'
-     # $CC -shared without GNU ld will not create a library from C++
-     # object files and a static libstdc++, better avoid it by now
-     archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linkopts'
-     archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- 		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linkopts~$rm $lib.exp'
-     hardcode_libdir_flag_spec=
-     hardcode_shlibpath_var=no
-     runpath_var='LD_RUN_PATH'
-     ;;
- 
-   uts4*)
-     archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
-     hardcode_libdir_flag_spec='-L$libdir'
-     hardcode_shlibpath_var=no
-     ;;
- 
-   dgux*)
-     archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
-     hardcode_libdir_flag_spec='-L$libdir'
-     hardcode_shlibpath_var=no
-     ;;
- 
-   sysv4*MP*)
-     if test -d /usr/nec; then
-       archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
-       hardcode_shlibpath_var=no
-       runpath_var=LD_RUN_PATH
-       hardcode_runpath_var=yes
-       ld_shlibs=yes
-     fi
-     ;;
- 
-   sysv4.2uw2*)
-     archive_cmds='$LD -G -o $lib $libobjs $deplibs $linkopts'
-     hardcode_direct=yes
-     hardcode_minus_L=no
-     hardcode_shlibpath_var=no
-     hardcode_runpath_var=yes
-     runpath_var=LD_RUN_PATH
-     ;;
- 
-   unixware7*)
-     archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
-     runpath_var='LD_RUN_PATH'
-     hardcode_shlibpath_var=no
-     ;;
- 
-   *)
-     ld_shlibs=no
-     ;;
-   esac
- fi
- echo "$ac_t$ld_shlibs" 1>&6
- test "$ld_shlibs" = no && can_build_shared=no
- 
- if test -z "$NM"; then
-   echo $ac_n "checking for BSD-compatible nm... $ac_c" 1>&6
-   case "$NM" in
-   [\\/]* | [A-Za-z]:[\\/]*) ;; # Let the user override the test with a path.
-   *)
-     IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
-     for ac_dir in $PATH /usr/ucb /usr/ccs/bin /bin; do
-       test -z "$ac_dir" && ac_dir=.
-       if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext; then
- 	# Check to see if the nm accepts a BSD-compat flag.
- 	# Adding the `sed 1q' prevents false positives on HP-UX, which says:
- 	#   nm: unknown option "B" ignored
- 	if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
- 	  NM="$ac_dir/nm -B"
- 	  break
- 	elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
- 	  NM="$ac_dir/nm -p"
- 	  break
- 	else
- 	  NM=${NM="$ac_dir/nm"} # keep the first match, but
- 	  continue # so that we can try to find one that supports BSD flags
- 	fi
-       fi
-     done
-     IFS="$ac_save_ifs"
-     test -z "$NM" && NM=nm
-     ;;
-   esac
-   echo "$ac_t$NM" 1>&6
- fi
- 
- # Check for command to grab the raw symbol name followed by C symbol from nm.
- echo $ac_n "checking command to parse $NM output... $ac_c" 1>&6
- 
- # These are sane defaults that work on at least a few old systems.
- # [They come from Ultrix.  What could be older than Ultrix?!! ;)]
- 
- # Character class describing NM global symbol codes.
- symcode='[BCDEGRST]'
- 
- # Regexp to match symbols that can be accessed directly from C.
- sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
- 
- # Transform the above into a raw symbol and a C symbol.
- symxfrm='\1 \2\3 \3'
- 
- # Transform an extracted symbol line into a proper C declaration
- global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'"
- 
- # Define system-specific variables.
- case "$host_os" in
- aix*)
-   symcode='[BCDT]'
-   ;;
- cygwin* | mingw*)
-   symcode='[ABCDGISTW]'
-   ;;
- hpux*) # Its linker distinguishes data from code symbols
-   global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^. .* \(.*\)$/extern char \1;/p'"
-   ;;
- irix*)
-   symcode='[BCDEGRST]'
-   ;;
- solaris*)
-   symcode='[BDT]'
-   ;;
- sysv4)
-   symcode='[DFNSTU]'
-   ;;
- esac
- 
- # If we're using GNU nm, then use its standard symbol codes.
- if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then
-   symcode='[ABCDGISTW]'
- fi
- 
- # Try without a prefix undercore, then with it.
- for ac_symprfx in "" "_"; do
- 
-   # Write the raw and C identifiers.
-   global_symbol_pipe="sed -n -e 's/^.*[ 	]\($symcode\)[ 	][ 	]*\($ac_symprfx\)$sympat$/$symxfrm/p'"
- 
-   # Check to see that the pipe works correctly.
-   pipe_works=no
-   $rm conftest*
-   cat > conftest.c <<EOF
- #ifdef __cplusplus
- extern "C" {
- #endif
- char nm_test_var;
- void nm_test_func(){}
- #ifdef __cplusplus
- }
- #endif
- main(){nm_test_var='a';nm_test_func();return(0);}
- EOF
- 
-   echo "$progname:1635: checking if global_symbol_pipe works" >&5
-   if { (eval echo $progname:1636: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } && test -s conftest.$objext; then
-     # Now try to grab the symbols.
-     nlist=conftest.nm
-     if { echo "$progname:1639: eval \"$NM conftest.$objext | $global_symbol_pipe > $nlist\"" >&5; eval "$NM conftest.$objext | $global_symbol_pipe > $nlist 2>&5"; } && test -s "$nlist"; then
- 
-       # Try sorting and uniquifying the output.
-       if sort "$nlist" | uniq > "$nlist"T; then
- 	mv -f "$nlist"T "$nlist"
-       else
- 	rm -f "$nlist"T
-       fi
- 
-       # Make sure that we snagged all the symbols we need.
-       if egrep ' nm_test_var$' "$nlist" >/dev/null; then
- 	if egrep ' nm_test_func$' "$nlist" >/dev/null; then
- 	  cat <<EOF > conftest.c
- #ifdef __cplusplus
- extern "C" {
- #endif
- 
- EOF
- 	  # Now generate the symbol file.
- 	  eval "$global_symbol_to_cdecl"' < "$nlist" >> conftest.c'
- 
- 	  cat <<EOF >> conftest.c
- #if defined (__STDC__) && __STDC__
- # define lt_ptr_t void *
- #else
- # define lt_ptr_t char *
- # define const
- #endif
- 
- /* The mapping between symbol names and symbols. */
- const struct {
-   const char *name;
-   lt_ptr_t address;
- }
- lt_preloaded_symbols[] =
- {
- EOF
- 	  sed 's/^. \(.*\) \(.*\)$/  {"\2", (lt_ptr_t) \&\2},/' < "$nlist" >> conftest.c
- 	  cat <<\EOF >> conftest.c
-   {0, (lt_ptr_t) 0}
- };
- 
- #ifdef __cplusplus
- }
- #endif
- EOF
- 	  # Now try linking the two files.
- 	  mv conftest.$objext conftstm.$objext
- 	  save_LIBS="$LIBS"
- 	  save_CFLAGS="$CFLAGS"
- 	  LIBS="conftstm.$objext"
- 	  CFLAGS="$CFLAGS$no_builtin_flag"
- 	  if { (eval echo $progname:1691: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- 	    pipe_works=yes
- 	  else
- 	    echo "$progname: failed program was:" >&5
- 	    cat conftest.c >&5
- 	  fi
- 	  LIBS="$save_LIBS"
- 	else
- 	  echo "cannot find nm_test_func in $nlist" >&5
- 	fi
-       else
- 	echo "cannot find nm_test_var in $nlist" >&5
-       fi
-     else
-       echo "cannot run $global_symbol_pipe" >&5
-     fi
-   else
-     echo "$progname: failed program was:" >&5
-     cat conftest.c >&5
-   fi
-   $rm conftest* conftst*
- 
-   # Do not use the global_symbol_pipe unless it works.
-   if test "$pipe_works" = yes; then
-     break
-   else
-     global_symbol_pipe=
-   fi
- done
- if test "$pipe_works" = yes; then
-   echo "${ac_t}ok" 1>&6
- else
-   echo "${ac_t}failed" 1>&6
- fi
- 
- if test -z "$global_symbol_pipe"; then
-   global_symbol_to_cdecl=
- fi
- 
- # Check hardcoding attributes.
- echo $ac_n "checking how to hardcode library paths into programs... $ac_c" 1>&6
- hardcode_action=
- if test -n "$hardcode_libdir_flag_spec" || \
-    test -n "$runpath_var"; then
- 
-   # We can hardcode non-existant directories.
-   if test "$hardcode_direct" != no &&
-      # If the only mechanism to avoid hardcoding is shlibpath_var, we
-      # have to relink, otherwise we might link with an installed library
-      # when we should be linking with a yet-to-be-installed one
-      ## test "$hardcode_shlibpath_var" != no &&
-      test "$hardcode_minus_L" != no; then
-     # Linking always hardcodes the temporary library directory.
-     hardcode_action=relink
-   else
-     # We can link without hardcoding, and we can hardcode nonexisting dirs.
-     hardcode_action=immediate
-   fi
- else
-   # We cannot hardcode anything, or else we can only hardcode existing
-   # directories.
-   hardcode_action=unsupported
- fi
- echo "$ac_t$hardcode_action" 1>&6
- 
- 
- reload_flag=
- reload_cmds='$LD$reload_flag -o $output$reload_objs'
- echo $ac_n "checking for $LD option to reload object files... $ac_c" 1>&6
- # PORTME Some linkers may need a different reload flag.
- reload_flag='-r'
- echo "$ac_t$reload_flag" 1>&6
- test -n "$reload_flag" && reload_flag=" $reload_flag"
- 
- # PORTME Fill in your ld.so characteristics
- library_names_spec=
- libname_spec='lib$name'
- soname_spec=
- postinstall_cmds=
- postuninstall_cmds=
- finish_cmds=
- finish_eval=
- shlibpath_var=
- shlibpath_overrides_runpath=unknown
- version_type=none
- dynamic_linker="$host_os ld.so"
- sys_lib_dlsearch_path_spec="/lib /usr/lib"
- sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
- file_magic_cmd=
- file_magic_test_file=
- deplibs_check_method='unknown'
- # Need to set the preceding variable on all platforms that support
- # interlibrary dependencies.
- # 'none' -- dependencies not supported.
- # `unknown' -- same as none, but documents that we really don't know.
- # 'pass_all' -- all dependencies passed with no checks.
- # 'test_compile' -- check by making test program.
- # 'file_magic [regex]' -- check by looking for files in library path
- # which responds to the $file_magic_cmd with a given egrep regex.
- # If you have `file' or equivalent on your system and you're not sure
- # whether `pass_all' will *always* work, you probably want this one.
- echo $ac_n "checking dynamic linker characteristics... $ac_c" 1>&6
- case "$host_os" in
- aix3*)
-   version_type=linux
-   library_names_spec='${libname}${release}.so$versuffix $libname.a'
-   shlibpath_var=LIBPATH
- 
-   # AIX has no versioning support, so we append a major version to the name.
-   soname_spec='${libname}${release}.so$major'
-   ;;
- 
- aix4*)
-   version_type=linux
-   # AIX has no versioning support, so currently we can not hardcode correct
-   # soname into executable. Probably we can add versioning support to
-   # collect2, so additional links can be useful in future.
-   # We preserve .a as extension for shared libraries though AIX4.2
-   # and later linker supports .so
-   library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.a'
-   shlibpath_var=LIBPATH
-   deplibs_check_method=pass_all
-   ;;
- 
- amigaos*)
-   library_names_spec='$libname.ixlibrary $libname.a'
-   # Create ${libname}_ixlibrary.a entries in /sys/libs.
-   finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
-   ;;
- 
- beos*)
-   library_names_spec='${libname}.so'
-   dynamic_linker="$host_os ld.so"
-   shlibpath_var=LIBRARY_PATH
-   deplibs_check_method=pass_all
-   lt_cv_dlopen="load_add_on"
-   lt_cv_dlopen_libs=
-   lt_cv_dlopen_self=yes
-   ;;
- 
- bsdi4*)
-   version_type=linux
-   need_version=no
-   library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-   soname_spec='${libname}${release}.so$major'
-   finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
-   shlibpath_var=LD_LIBRARY_PATH
-   deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
-   file_magic_cmd=/usr/bin/file
-   file_magic_test_file=/shlib/libc.so
-   sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
-   sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
-   export_dynamic_flag_spec=-rdynamic
-   # the default ld.so.conf also contains /usr/contrib/lib and
-   # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
-   # libtool to hard-code these into programs
-   ;;
- 
- cygwin* | mingw*)
-   version_type=windows
-   need_version=no
-   need_lib_prefix=no
-   if test "$with_gcc" = yes; then
-     library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.a'
-   else
-     library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.lib'
-   fi
-   dynamic_linker='Win32 ld.exe'
-   deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
-   file_magic_cmd='${OBJDUMP} -f'
-   # FIXME: first we should search . and the directory the executable is in
-   shlibpath_var=PATH
-   lt_cv_dlopen="LoadLibrary"
-   lt_cv_dlopen_libs=
-   ;;
- 
- freebsd1*)
-   dynamic_linker=no
-   ;;
-   
- freebsd*)
-   objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
-   version_type=freebsd-$objformat
-   case "$version_type" in
-     freebsd-elf*)
-       deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object'
-       file_magic_cmd=/usr/bin/file
-       file_magic_test_file=`echo /usr/lib/libc.so*`
-       library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
-       need_version=no
-       need_lib_prefix=no
-       ;;
-     freebsd-*)
-       deplibs_check_method=unknown
-       library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix'
-       need_version=yes
-       ;;
-   esac
-   shlibpath_var=LD_LIBRARY_PATH
-   case "$host_os" in
-   freebsd2* | freebsd3.[01]* | freebsdelf3.[01]*)
-     shlibpath_overrides_runpath=yes
-     ;;
-   *) # from 3.2 on
-     shlibpath_overrides_runpath=no
-     ;;
-   esac
-   ;;
- 
- gnu*)
-   version_type=linux
-   need_lib_prefix=no
-   need_version=no
-   library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so'
-   soname_spec='${libname}${release}.so$major'
-   shlibpath_var=LD_LIBRARY_PATH
-   ;;
- 
- hpux9* | hpux10* | hpux11*)
-   # Give a soname corresponding to the major version so that dld.sl refuses to
-   # link against other versions.
-   dynamic_linker="$host_os dld.sl"
-   version_type=sunos
-   need_lib_prefix=no
-   need_version=no
-   shlibpath_var=SHLIB_PATH
-   shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
-   library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl'
-   soname_spec='${libname}${release}.sl$major'
-   # HP-UX runs *really* slowly unless shared libraries are mode 555.
-   postinstall_cmds='chmod 555 $lib'
-   ;;
- 
- irix5* | irix6*)
-   version_type=irix
-   need_lib_prefix=no
-   need_version=no
-   soname_spec='${libname}${release}.so.$major'
-   library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major ${libname}${release}.so $libname.so'
-   case "$host_os" in
-   irix5*)
-     libsuff= shlibsuff=
-     # this will be overridden with pass_all, but let us keep it just in case
-     deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1"
-     ;;
-   *)
-     case "$LD" in # libtool.m4 will add one of these switches to LD
-     *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;;
-     *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;;
-     *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;;
-     *) libsuff= shlibsuff= libmagic=never-match;;
-     esac
-     ;;
-   esac
-   shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
-   shlibpath_overrides_runpath=no
-   sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
-   sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
-   file_magic_cmd=/usr/bin/file
-   file_magic_test_file=`echo /lib${libsuff}/libc.so*`
-   deplibs_check_method='pass_all'
-   ;;
- 
- # No shared lib support for Linux oldld, aout, or coff.
- linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*)
-   dynamic_linker=no
-   ;;
- 
- # This must be Linux ELF.
- linux-gnu*)
-   version_type=linux
-   need_lib_prefix=no
-   need_version=no
-   library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-   soname_spec='${libname}${release}.so$major'
-   finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
-   shlibpath_var=LD_LIBRARY_PATH
-   shlibpath_overrides_runpath=no
-   deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
-   file_magic_cmd=/usr/bin/file
-   file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
- 
-   if test -f /lib/ld.so.1; then
-     dynamic_linker='GNU ld.so'
-   else
-     # Only the GNU ld.so supports shared libraries on MkLinux.
-     case "$host_cpu" in
-     powerpc*) dynamic_linker=no ;;
-     *) dynamic_linker='Linux ld.so' ;;
-     esac
-   fi
-   ;;
- 
- netbsd*)
-   version_type=sunos
-   if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-     library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
-     finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-     dynamic_linker='NetBSD (a.out) ld.so'
-   else
-     library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so'
-     soname_spec='${libname}${release}.so$major'
-     dynamic_linker='NetBSD ld.elf_so'
-   fi
-   shlibpath_var=LD_LIBRARY_PATH
-   ;;
- 
- openbsd*)
-   version_type=sunos
-   if test "$with_gnu_ld" = yes; then
-     need_lib_prefix=no
-     need_version=no
-   fi
-   library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
-   finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-   shlibpath_var=LD_LIBRARY_PATH
-   ;;
- 
- os2*)
-   libname_spec='$name'
-   need_lib_prefix=no
-   library_names_spec='$libname.dll $libname.a'
-   dynamic_linker='OS/2 ld.exe'
-   shlibpath_var=LIBPATH
-   ;;
- 
- osf3* | osf4* | osf5*)
-   version_type=osf
-   need_version=no
-   soname_spec='${libname}${release}.so$major'
-   library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-   shlibpath_var=LD_LIBRARY_PATH
-   # this will be overridden with pass_all, but let us keep it just in case
-   deplibs_check_method='file_magic COFF format alpha shared library'
-   file_magic_cmd=/usr/bin/file
-   file_magic_test_file=/shlib/libc.so
-   deplibs_check_method='pass_all'
-   sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
-   sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
-   ;;
- 
- sco3.2v5*)
-   version_type=osf
-   soname_spec='${libname}${release}.so$major'
-   library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-   shlibpath_var=LD_LIBRARY_PATH
-   ;;
- 
- solaris*)
-   version_type=linux
-   need_lib_prefix=no
-   need_version=no
-   library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-   soname_spec='${libname}${release}.so$major'
-   shlibpath_var=LD_LIBRARY_PATH
-   shlibpath_overrides_runpath=yes
-   # ldd complains unless libraries are executable
-   postinstall_cmds='chmod +x $lib'
-   deplibs_check_method="file_magic ELF [0-9][0-9]-bit [LM]SB dynamic lib"
-   file_magic_cmd=/usr/bin/file
-   file_magic_test_file=/lib/libc.so
-   ;;
- 
- sunos4*)
-   version_type=sunos
-   library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
-   finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
-   shlibpath_var=LD_LIBRARY_PATH
-   shlibpath_overrides_runpath=yes
-   if test "$with_gnu_ld" = yes; then
-     need_lib_prefix=no
-   fi
-   need_version=yes
-   ;;
- 
- sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
-   version_type=linux
-   library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-   soname_spec='${libname}${release}.so$major'
-   shlibpath_var=LD_LIBRARY_PATH
-   case "$host_vendor" in
-     ncr)
-       deplibs_check_method='pass_all'
-       ;;
-     motorola)
-       need_lib_prefix=no
-       need_version=no
-       shlibpath_overrides_runpath=no
-       sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
-       deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
-       file_magic_cmd=/usr/bin/file
-       file_magic_test_file=`echo /usr/lib/libc.so*`
-       ;;
-   esac
-   ;;
- 
- uts4*)
-   version_type=linux
-   library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-   soname_spec='${libname}${release}.so$major'
-   shlibpath_var=LD_LIBRARY_PATH
-   ;;
- 
- dgux*)
-   version_type=linux
-   need_lib_prefix=no
-   need_version=no
-   library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-   soname_spec='${libname}${release}.so$major'
-   shlibpath_var=LD_LIBRARY_PATH
-   ;;
- 
- sysv4*MP*)
-   if test -d /usr/nec ;then
-     version_type=linux
-     library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so'
-     soname_spec='$libname.so.$major'
-     shlibpath_var=LD_LIBRARY_PATH
-   fi
-   ;;
- 
- *)
-   dynamic_linker=no
-   ;;
- esac
- echo "$ac_t$dynamic_linker" 1>&6
- test "$dynamic_linker" = no && can_build_shared=no
- 
- # Report the final consequences.
- echo "checking if libtool supports shared libraries... $can_build_shared" 1>&6
- 
- # Only try to build win32 dlls if AC_LIBTOOL_WIN32_DLL was used in
- # configure.in, otherwise build static only libraries.
- case "$host_os" in
- cygwin* | mingw* | os2*)
-   if test x$can_build_shared = xyes; then
-     test x$enable_win32_dll = xno && can_build_shared=no
-     echo "checking if package supports dlls... $can_build_shared" 1>&6
-   fi
- ;;
- esac
- 
- if test -n "$file_magic_test_file" && test -n "$file_magic_cmd"; then
-   case "$deplibs_check_method" in
-   "file_magic "*)
-     file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
-     if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
-        egrep "$file_magic_regex" > /dev/null; then
-       :
-     else
-       cat <<EOF 1>&2
- 
- *** Warning: the command libtool uses to detect shared libraries,
- *** $file_magic_cmd, produces output that libtool cannot recognize.
- *** The result is that libtool may fail to recognize shared libraries
- *** as such.  This will affect the creation of libtool libraries that
- *** depend on shared libraries, but programs linked with such libtool
- *** libraries will work regardless of this problem.  Nevertheless, you
- *** may want to report the problem to your system manager and/or to
- *** bug-libtool@gnu.org
- 
- EOF
-     fi ;;
-   esac
- fi
- 
- echo $ac_n "checking whether to build shared libraries... $ac_c" 1>&6
- test "$can_build_shared" = "no" && enable_shared=no
- 
- # On AIX, shared libraries and static libraries use the same namespace, and
- # are all built from PIC.
- case "$host_os" in
- aix3*)
-   test "$enable_shared" = yes && enable_static=no
-   if test -n "$RANLIB"; then
-     archive_cmds="$archive_cmds~\$RANLIB \$lib"
-     postinstall_cmds='$RANLIB $lib'
-   fi
-   ;;
- 
- aix4*)
-   test "$enable_shared" = yes && enable_static=no
-   ;;
- esac
- 
- echo "$ac_t$enable_shared" 1>&6
- 
- # Make sure either enable_shared or enable_static is yes.
- test "$enable_shared" = yes || enable_static=yes
- 
- echo "checking whether to build static libraries... $enable_static" 1>&6
- 
- if test "$hardcode_action" = relink; then
-   # Fast installation is not supported
-   enable_fast_install=no
- elif test "$shlibpath_overrides_runpath" = yes ||
-      test "$enable_shared" = no; then
-   # Fast installation is not necessary
-   enable_fast_install=needless
- fi
- 
- echo $ac_n "checking for objdir... $ac_c" 1>&6
- rm -f .libs 2>/dev/null
- mkdir .libs 2>/dev/null
- if test -d .libs; then
-   objdir=.libs
- else
-   # MS-DOS does not allow filenames that begin with a dot.
-   objdir=_libs
- fi
- rmdir .libs 2>/dev/null
- echo "$ac_t$objdir" 1>&6
- 
- if test "x$enable_dlopen" != xyes; then
-   enable_dlopen=unknown
-   enable_dlopen_self=unknown
-   enable_dlopen_self_static=unknown
- else
- if eval "test \"`echo '$''{'lt_cv_dlopen'+set}'`\" != set"; then
-   lt_cv_dlopen=no lt_cv_dlopen_libs=
- echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
- echo "$progname:2212: checking for dlopen in -ldl" >&5
- ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   ac_save_LIBS="$LIBS"
- LIBS="-ldl  $LIBS"
- cat > conftest.$ac_ext <<EOF
- #line 2220 "ltconfig"
- /* Override any gcc2 internal prototype to avoid an error.  */
- /* We use char because int might match the return type of a gcc2
-     builtin and then its argument prototype would still apply.  */
- #ifdef __cplusplus
- extern "C"
- #endif
- char dlopen();
- 
- int main() {
- dlopen()
- ; return 0; }
- EOF
- if { (eval echo $progname:2233: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_lib_$ac_lib_var=yes"
- else
-   echo "$progname: failed program was:" >&5
-   cat conftest.$ac_ext >&5
-   rm -rf conftest*
-   eval "ac_cv_lib_$ac_lib_var=no"
- fi
- rm -f conftest*
- LIBS="$ac_save_LIBS"
- 
- fi
- if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
-   echo "$ac_t""yes" 1>&6
-   lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
- else
-   echo "$ac_t""no" 1>&6
- echo $ac_n "checking for dlopen""... $ac_c" 1>&6
- echo "$progname:2252: checking for dlopen" >&5
- if eval "test \"`echo '$''{'ac_cv_func_dlopen'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
- #line 2257 "ltconfig"
- /* System header to define __stub macros and hopefully few prototypes,
-     which can conflict with char dlopen(); below.  */
- #include <assert.h>
- /* Override any gcc2 internal prototype to avoid an error.  */
- /* We use char because int might match the return type of a gcc2
-     builtin and then its argument prototype would still apply.  */
- #ifdef __cplusplus
- extern "C"
- #endif
- char dlopen();
- 
- int main() {
- 
- /* The GNU C library defines this for functions which it implements
-     to always fail with ENOSYS.  Some functions are actually named
-     something starting with __ and the normal name is an alias.  */
- #if defined (__stub_dlopen) || defined (__stub___dlopen)
- choke me
- #else
- dlopen();
- #endif
- 
- ; return 0; }
- EOF
- if { (eval echo $progname:2282: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_func_dlopen=yes"
- else
-   echo "$progname: failed program was:" >&5
-   cat conftest.$ac_ext >&5
-   rm -rf conftest*
-   eval "ac_cv_func_dlopen=no"
- fi
- rm -f conftest*
- fi
- if eval "test \"`echo '$ac_cv_func_'dlopen`\" = yes"; then
-   echo "$ac_t""yes" 1>&6
-   lt_cv_dlopen="dlopen"
- else
-   echo "$ac_t""no" 1>&6
- echo $ac_n "checking for dld_link in -ldld""... $ac_c" 1>&6
- echo "$progname:2299: checking for dld_link in -ldld" >&5
- ac_lib_var=`echo dld'_'dld_link | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   ac_save_LIBS="$LIBS"
- LIBS="-ldld  $LIBS"
- cat > conftest.$ac_ext <<EOF
- #line 2307 "ltconfig"
- /* Override any gcc2 internal prototype to avoid an error.  */
- /* We use char because int might match the return type of a gcc2
-     builtin and then its argument prototype would still apply.  */
- #ifdef __cplusplus
- extern "C"
- #endif
- char dld_link();
- 
- int main() {
- dld_link()
- ; return 0; }
- EOF
- if { (eval echo $progname:2320: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_lib_$ac_lib_var=yes"
- else
-   echo "$progname: failed program was:" >&5
-   cat conftest.$ac_ext >&5
-   rm -rf conftest*
-   eval "ac_cv_lib_$ac_lib_var=no"
- fi
- rm -f conftest*
- LIBS="$ac_save_LIBS"
- 
- fi
- if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
-   echo "$ac_t""yes" 1>&6
-   lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
- else
-   echo "$ac_t""no" 1>&6
- echo $ac_n "checking for shl_load""... $ac_c" 1>&6
- echo "$progname:2339: checking for shl_load" >&5
- if eval "test \"`echo '$''{'ac_cv_func_shl_load'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
- #line 2344 "ltconfig"
- /* System header to define __stub macros and hopefully few prototypes,
-     which can conflict with char shl_load(); below.  */
- #include <assert.h>
- /* Override any gcc2 internal prototype to avoid an error.  */
- /* We use char because int might match the return type of a gcc2
-     builtin and then its argument prototype would still apply.  */
- #ifdef __cplusplus
- extern "C"
- #endif
- char shl_load();
- 
- int main() {
- 
- /* The GNU C library defines this for functions which it implements
-     to always fail with ENOSYS.  Some functions are actually named
-     something starting with __ and the normal name is an alias.  */
- #if defined (__stub_shl_load) || defined (__stub___shl_load)
- choke me
- #else
- shl_load();
- #endif
- 
- ; return 0; }
- EOF
- if { (eval echo $progname:2369: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_func_shl_load=yes"
- else
-   echo "$progname: failed program was:" >&5
-   cat conftest.$ac_ext >&5
-   rm -rf conftest*
-   eval "ac_cv_func_shl_load=no"
- fi
- rm -f conftest*
- fi
- 
- if eval "test \"`echo '$ac_cv_func_'shl_load`\" = yes"; then
-   echo "$ac_t""yes" 1>&6
-   lt_cv_dlopen="shl_load"
- else
-   echo "$ac_t""no" 1>&6
- echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6
- echo "$progname:2387: checking for shl_load in -ldld" >&5
- ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   ac_save_LIBS="$LIBS"
- LIBS="-ldld  $LIBS"
- cat > conftest.$ac_ext <<EOF
- #line 2395 "ltconfig"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error.  */
- /* We use char because int might match the return type of a gcc2
-     builtin and then its argument prototype would still apply.  */
- #ifdef __cplusplus
- extern "C"
- #endif
- char shl_load();
- 
- int main() {
- shl_load()
- ; return 0; }
- EOF
- if { (eval echo $progname:2409: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_lib_$ac_lib_var=yes"
- else
-   echo "$progname: failed program was:" >&5
-   cat conftest.$ac_ext >&5
-   rm -rf conftest*
-   eval "ac_cv_lib_$ac_lib_var=no"
- fi
- rm -f conftest*
- LIBS="$ac_save_LIBS"
- 
- fi
- if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
-   echo "$ac_t""yes" 1>&6
-   lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
- else
-   echo "$ac_t""no" 1>&6
- fi
- 
- 
- fi
- 
-     
- fi
- 
-   
- fi
- 
- 
- fi
- 
- fi
- 
-   if test "x$lt_cv_dlopen" != xno; then
-     enable_dlopen=yes
-   fi
- 
-   case "$lt_cv_dlopen" in
-   dlopen)
- for ac_hdr in dlfcn.h; do
- ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
- echo "$progname:2452: checking for $ac_hdr" >&5
- if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
- #line 2457 "ltconfig"
- #include <$ac_hdr>
- int fnord = 0;
- EOF
- ac_try="$ac_compile >/dev/null 2>conftest.out"
- { (eval echo $progname:2462: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
-   rm -rf conftest*
-   eval "ac_cv_header_$ac_safe=yes"
- else
-   echo "$ac_err" >&5
-   echo "$progname: failed program was:" >&5
-   cat conftest.$ac_ext >&5
-   rm -rf conftest*
-   eval "ac_cv_header_$ac_safe=no"
- fi
- rm -f conftest*
- fi
- if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
-   echo "$ac_t""yes" 1>&6
- else
-   echo "$ac_t""no" 1>&6
- fi
- done
- 
-     if test "x$ac_cv_header_dlfcn_h" = xyes; then
-       CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
-     fi
-     eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
-     LIBS="$lt_cv_dlopen_libs $LIBS"
- 
-   echo $ac_n "checking whether a program can dlopen itself""... $ac_c" 1>&6
- echo "$progname:2490: checking whether a program can dlopen itself" >&5
- if test "${lt_cv_dlopen_self+set}" = set; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   if test "$cross_compiling" = yes; then
-     lt_cv_dlopen_self=cross
-   else
-     cat > conftest.c <<EOF
- #line 2498 "ltconfig"
- 
- #if HAVE_DLFCN_H
- #include <dlfcn.h>
- #endif
- 
- #include <stdio.h>
- 
- #ifdef RTLD_GLOBAL
- # define LTDL_GLOBAL	RTLD_GLOBAL
- #else
- # ifdef DL_GLOBAL
- #  define LTDL_GLOBAL	DL_GLOBAL
- # else
- #  define LTDL_GLOBAL	0
- # endif
- #endif
- 
- /* We may have to define LTDL_LAZY_OR_NOW in the command line if we
-    find out it does not work in some platform. */
- #ifndef LTDL_LAZY_OR_NOW
- # ifdef RTLD_LAZY
- #  define LTDL_LAZY_OR_NOW	RTLD_LAZY
- # else
- #  ifdef DL_LAZY
- #   define LTDL_LAZY_OR_NOW	DL_LAZY
- #  else
- #   ifdef RTLD_NOW
- #    define LTDL_LAZY_OR_NOW	RTLD_NOW
- #   else
- #    ifdef DL_NOW
- #     define LTDL_LAZY_OR_NOW	DL_NOW
- #    else
- #     define LTDL_LAZY_OR_NOW	0
- #    endif
- #   endif
- #  endif
- # endif
- #endif
- 
- fnord() { int i=42;}
- main() { void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW);
-     if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord");
- 	       if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); } 
- 
- EOF
- if { (eval echo $progname:2544: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
- then
-   lt_cv_dlopen_self=yes
- else
-   echo "$progname: failed program was:" >&5
-   cat conftest.$ac_ext >&5
-   rm -fr conftest*
-   lt_cv_dlopen_self=no
- fi
- rm -fr conftest*
- fi
- 
- fi
- 
- echo "$ac_t""$lt_cv_dlopen_self" 1>&6
- 
-   if test "$lt_cv_dlopen_self" = yes; then
-     LDFLAGS="$LDFLAGS $link_static_flag"
-   echo $ac_n "checking whether a statically linked program can dlopen itself""... $ac_c" 1>&6
- echo "$progname:2563: checking whether a statically linked program can dlopen itself" >&5
- if test "${lt_cv_dlopen_self_static+set}" = set; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   if test "$cross_compiling" = yes; then
-     lt_cv_dlopen_self_static=cross
-   else
-     cat > conftest.c <<EOF
- #line 2571 "ltconfig"
- 
- #if HAVE_DLFCN_H
- #include <dlfcn.h>
- #endif
- 
- #include <stdio.h>
- 
- #ifdef RTLD_GLOBAL
- # define LTDL_GLOBAL	RTLD_GLOBAL
- #else
- # ifdef DL_GLOBAL
- #  define LTDL_GLOBAL	DL_GLOBAL
- # else
- #  define LTDL_GLOBAL	0
- # endif
- #endif
- 
- /* We may have to define LTDL_LAZY_OR_NOW in the command line if we
-    find out it does not work in some platform. */
- #ifndef LTDL_LAZY_OR_NOW
- # ifdef RTLD_LAZY
- #  define LTDL_LAZY_OR_NOW	RTLD_LAZY
- # else
- #  ifdef DL_LAZY
- #   define LTDL_LAZY_OR_NOW	DL_LAZY
- #  else
- #   ifdef RTLD_NOW
- #    define LTDL_LAZY_OR_NOW	RTLD_NOW
- #   else
- #    ifdef DL_NOW
- #     define LTDL_LAZY_OR_NOW	DL_NOW
- #    else
- #     define LTDL_LAZY_OR_NOW	0
- #    endif
- #   endif
- #  endif
- # endif
- #endif
- 
- fnord() { int i=42;}
- main() { void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW);
-     if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord");
-     if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); } 
- 
- EOF
- if { (eval echo $progname:2617: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
- then
-   lt_cv_dlopen_self_static=yes
- else
-   echo "$progname: failed program was:" >&5
-   cat conftest.$ac_ext >&5
-   rm -fr conftest*
-   lt_cv_dlopen_self_static=no
- fi
- rm -fr conftest*
- fi
- 
- fi
- 
- echo "$ac_t""$lt_cv_dlopen_self_static" 1>&6
- fi
-     ;;
-   esac
- 
-   case "$lt_cv_dlopen_self" in
-   yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
-   *) enable_dlopen_self=unknown ;;
-   esac
- 
-   case "$lt_cv_dlopen_self_static" in
-   yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
-   *) enable_dlopen_self_static=unknown ;;
-   esac
- fi
- 
- # Copy echo and quote the copy, instead of the original, because it is
- # used later.
- ltecho="$echo"
- if test "X$ltecho" = "X$CONFIG_SHELL $0 --fallback-echo"; then
-    ltecho="$CONFIG_SHELL \$0 --fallback-echo"
- fi
- LTSHELL="$SHELL"
- 
- LTCONFIG_VERSION="$VERSION"
- 
- # Only quote variables if we're using ltmain.sh.
- case "$ltmain" in
- *.sh)
-   # Now quote all the things that may contain metacharacters.
-   for var in ltecho old_CC old_CFLAGS old_CPPFLAGS \
-     old_LD old_LDFLAGS old_LIBS \
-     old_NM old_RANLIB old_LN_S old_DLLTOOL old_OBJDUMP old_AS \
-     AR CC LD LN_S NM LTSHELL LTCONFIG_VERSION \
-     reload_flag reload_cmds wl \
-     pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \
-     thread_safe_flag_spec whole_archive_flag_spec libname_spec \
-     library_names_spec soname_spec \
-     RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \
-     old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds postuninstall_cmds \
-     file_magic_cmd export_symbols_cmds deplibs_check_method allow_undefined_flag no_undefined_flag \
-     finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \
-     hardcode_libdir_flag_spec hardcode_libdir_separator  \
-     sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
-     compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do
- 
-     case "$var" in
-     reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \
-     old_postinstall_cmds | old_postuninstall_cmds | \
-     export_symbols_cmds | archive_cmds | archive_expsym_cmds | \
-     postinstall_cmds | postuninstall_cmds | \
-     finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
-       # Double-quote double-evaled strings.
-       eval "$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
-       ;;
-     *)
-       eval "$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
-       ;;
-     esac
-   done
- 
-   case "$ltecho" in
-   *'\$0 --fallback-echo"')
-     ltecho=`$echo "X$ltecho" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
-     ;;
-   esac
- 
-   trap "$rm \"$ofile\"; exit 1" 1 2 15
-   echo "creating $ofile"
-   $rm "$ofile"
-   cat <<EOF > "$ofile"
- #! $SHELL
- 
- # `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
- # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
- # NOTE: Changes made to this file will be lost: look at ltconfig or ltmain.sh.
- #
- # Copyright (C) 1996-1999 Free Software Foundation, Inc.
- # Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
- #
- # This program is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation; either version 2 of the License, or
- # (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful, but
- # WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- # General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program; if not, write to the Free Software
- # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- #
- # As a special exception to the GNU General Public License, if you
- # distribute this file as part of a program that contains a
- # configuration script generated by Autoconf, you may include it under
- # the same distribution terms that you use for the rest of that program.
- 
- # Sed that helps us avoid accidentally triggering echo(1) options like -n.
- Xsed="sed -e s/^X//"
- 
- # The HP-UX ksh and POSIX shell print the target directory to stdout
- # if CDPATH is set.
- if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
- 
- ### BEGIN LIBTOOL CONFIG
- EOF
-   cfgfile="$ofile"
-   ;;
- 
- *)
-   # Double-quote the variables that need it (for aesthetics).
-   for var in old_CC old_CFLAGS old_CPPFLAGS \
-     old_LD old_LDFLAGS old_LIBS \
-     old_NM old_RANLIB old_LN_S old_DLLTOOL old_OBJDUMP old_AS; do
-     eval "$var=\\\"\$var\\\""
-   done
- 
-   # Just create a config file.
-   cfgfile="$ofile.cfg"
-   trap "$rm \"$cfgfile\"; exit 1" 1 2 15
-   echo "creating $cfgfile"
-   $rm "$cfgfile"
-   cat <<EOF > "$cfgfile"
- # `$echo "$cfgfile" | sed 's%^.*/%%'` - Libtool configuration file.
- # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
- EOF
-   ;;
- esac
- 
- cat <<EOF >> "$cfgfile"
- # Libtool was configured as follows, on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
- #
- # CC=$old_CC CFLAGS=$old_CFLAGS CPPFLAGS=$old_CPPFLAGS \\
- # LD=$old_LD LDFLAGS=$old_LDFLAGS LIBS=$old_LIBS \\
- # NM=$old_NM RANLIB=$old_RANLIB LN_S=$old_LN_S \\
- # DLLTOOL=$old_DLLTOOL OBJDUMP=$old_OBJDUMP AS=$old_AS \\
- #   $0$ltconfig_args
- #
- # Compiler and other test output produced by $progname, useful for
- # debugging $progname, is in ./config.log if it exists.
- 
- # The version of $progname that generated this script.
- LTCONFIG_VERSION=$LTCONFIG_VERSION
- 
- # Shell to use when invoking shell scripts.
- SHELL=$LTSHELL
- 
- # Whether or not to build shared libraries.
- build_libtool_libs=$enable_shared
- 
- # Whether or not to build static libraries.
- build_old_libs=$enable_static
- 
- # Whether or not to optimize for fast installation.
- fast_install=$enable_fast_install
- 
- # The host system.
- host_alias=$host_alias
- host=$host
- 
- # An echo program that does not interpret backslashes.
- echo=$ltecho
- 
- # The archiver.
- AR=$AR
- 
- # The default C compiler.
- CC=$CC
- 
- # The linker used to build libraries.
- LD=$LD
- 
- # Whether we need hard or soft links.
- LN_S=$LN_S
- 
- # A BSD-compatible nm program.
- NM=$NM
- 
- # Used on cygwin: DLL creation program.
- DLLTOOL="$DLLTOOL"
- 
- # Used on cygwin: object dumper.
- OBJDUMP="$OBJDUMP"
- 
- # Used on cygwin: assembler.
- AS="$AS"
- 
- # The name of the directory that contains temporary libtool files.
- objdir=$objdir
- 
- # How to create reloadable object files.
- reload_flag=$reload_flag
- reload_cmds=$reload_cmds
- 
- # How to pass a linker flag through the compiler.
- wl=$wl
- 
- # Object file suffix (normally "o").
- objext="$objext"
- 
- # Old archive suffix (normally "a").
- libext="$libext"
- 
- # Executable file suffix (normally "").
- exeext="$exeext"
- 
- # Additional compiler flags for building library objects.
- pic_flag=$pic_flag
- 
- # Does compiler simultaneously support -c and -o options?
- compiler_c_o=$compiler_c_o
- 
- # Can we write directly to a .lo ?
- compiler_o_lo=$compiler_o_lo
- 
- # Must we lock files when doing compilation ?
- need_locks=$need_locks
- 
- # Do we need the lib prefix for modules?
- need_lib_prefix=$need_lib_prefix
- 
- # Do we need a version for libraries?
- need_version=$need_version
- 
- # Whether dlopen is supported.
- dlopen=$enable_dlopen
- 
- # Whether dlopen of programs is supported.
- dlopen_self=$enable_dlopen_self
- 
- # Whether dlopen of statically linked programs is supported.
- dlopen_self_static=$enable_dlopen_self_static
- 
- # Compiler flag to prevent dynamic linking.
- link_static_flag=$link_static_flag
- 
- # Compiler flag to turn off builtin functions.
- no_builtin_flag=$no_builtin_flag
- 
- # Compiler flag to allow reflexive dlopens.
- export_dynamic_flag_spec=$export_dynamic_flag_spec
- 
- # Compiler flag to generate shared objects directly from archives.
- whole_archive_flag_spec=$whole_archive_flag_spec
- 
- # Compiler flag to generate thread-safe objects.
- thread_safe_flag_spec=$thread_safe_flag_spec
- 
- # Library versioning type.
- version_type=$version_type
- 
- # Format of library name prefix.
- libname_spec=$libname_spec
- 
- # List of archive names.  First name is the real one, the rest are links.
- # The last name is the one that the linker finds with -lNAME.
- library_names_spec=$library_names_spec
- 
- # The coded name of the library, if different from the real name.
- soname_spec=$soname_spec
- 
- # Commands used to build and install an old-style archive.
- RANLIB=$RANLIB
- old_archive_cmds=$old_archive_cmds
- old_postinstall_cmds=$old_postinstall_cmds
- old_postuninstall_cmds=$old_postuninstall_cmds
- 
- # Create an old-style archive from a shared archive.
- old_archive_from_new_cmds=$old_archive_from_new_cmds
- 
- # Commands used to build and install a shared archive.
- archive_cmds=$archive_cmds
- archive_expsym_cmds=$archive_expsym_cmds
- postinstall_cmds=$postinstall_cmds
- postuninstall_cmds=$postuninstall_cmds
- 
- # Method to check whether dependent libraries are shared objects.
- deplibs_check_method=$deplibs_check_method
- 
- # Command to use when deplibs_check_method == file_magic.
- file_magic_cmd=$file_magic_cmd
- 
- # Flag that allows shared libraries with undefined symbols to be built.
- allow_undefined_flag=$allow_undefined_flag
- 
- # Flag that forces no undefined symbols.
- no_undefined_flag=$no_undefined_flag
- 
- # Commands used to finish a libtool library installation in a directory.
- finish_cmds=$finish_cmds
- 
- # Same as above, but a single script fragment to be evaled but not shown.
- finish_eval=$finish_eval
- 
- # Take the output of nm and produce a listing of raw symbols and C names.
- global_symbol_pipe=$global_symbol_pipe
- 
- # Transform the output of nm in a proper C declaration
- global_symbol_to_cdecl=$global_symbol_to_cdecl
- 
- # This is the shared library runtime path variable.
- runpath_var=$runpath_var
- 
- # This is the shared library path variable.
- shlibpath_var=$shlibpath_var
- 
- # Is shlibpath searched before the hard-coded library search path?
- shlibpath_overrides_runpath=$shlibpath_overrides_runpath
- 
- # How to hardcode a shared library path into an executable.
- hardcode_action=$hardcode_action
- 
- # Flag to hardcode \$libdir into a binary during linking.
- # This must work even if \$libdir does not exist.
- hardcode_libdir_flag_spec=$hardcode_libdir_flag_spec
- 
- # Whether we need a single -rpath flag with a separated argument.
- hardcode_libdir_separator=$hardcode_libdir_separator
- 
- # Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
- # resulting binary.
- hardcode_direct=$hardcode_direct
- 
- # Set to yes if using the -LDIR flag during linking hardcodes DIR into the
- # resulting binary.
- hardcode_minus_L=$hardcode_minus_L
- 
- # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
- # the resulting binary.
- hardcode_shlibpath_var=$hardcode_shlibpath_var
- 
- # Compile-time system search path for libraries
- sys_lib_search_path_spec=$sys_lib_search_path_spec
- 
- # Run-time system search path for libraries
- sys_lib_dlsearch_path_spec=$sys_lib_dlsearch_path_spec
- 
- # Fix the shell variable \$srcfile for the compiler.
- fix_srcfile_path="$fix_srcfile_path"
- 
- # Set to yes if exported symbols are required.
- always_export_symbols=$always_export_symbols
- 
- # The commands to list exported symbols.
- export_symbols_cmds=$export_symbols_cmds
- 
- # Symbols that should not be listed in the preloaded symbols.
- exclude_expsyms=$exclude_expsyms
- 
- # Symbols that must always be exported.
- include_expsyms=$include_expsyms
- 
- EOF
- 
- case "$ltmain" in
- *.sh)
-   echo '### END LIBTOOL CONFIG' >> "$ofile"
-   echo >> "$ofile"
-   case "$host_os" in
-   aix3*)
-     cat <<\EOF >> "$ofile"
- 
- # AIX sometimes has problems with the GCC collect2 program.  For some
- # reason, if we set the COLLECT_NAMES environment variable, the problems
- # vanish in a puff of smoke.
- if test "X${COLLECT_NAMES+set}" != Xset; then
-   COLLECT_NAMES=
-   export COLLECT_NAMES
- fi
- EOF
-     ;;
-   esac
- 
-   # Append the ltmain.sh script.
-   sed '$q' "$ltmain" >> "$ofile" || (rm -f "$ofile"; exit 1)
-   # We use sed instead of cat because bash on DJGPP gets confused if
-   # if finds mixed CR/LF and LF-only lines.  Since sed operates in
-   # text mode, it properly converts lines to CR/LF.  This bash problem
-   # is reportedly fixed, but why not run on old versions too?
- 
-   chmod +x "$ofile"
-   ;;
- 
- *)
-   # Compile the libtool program.
-   echo "FIXME: would compile $ltmain"
-   ;;
- esac
- 
- test -n "$cache_file" || exit 0
- 
- # AC_CACHE_SAVE
- trap '' 1 2 15
- cat > confcache <<\EOF
- # This file is a shell script that caches the results of configure
- # tests run on this system so they can be shared between configure
- # scripts and configure runs.  It is not useful on other systems.
- # If it contains results you don't want to keep, you may remove or edit it.
- #
- # By default, configure uses ./config.cache as the cache file,
- # creating it if it does not exist already.  You can give configure
- # the --cache-file=FILE option to use a different cache file; that is
- # what configure does when it calls configure scripts in
- # subdirectories, so they share the cache.
- # Giving --cache-file=/dev/null disables caching, for debugging configure.
- # config.status only pays attention to the cache file if you give it the
- # --recheck option to rerun configure.
- #
- EOF
- # The following way of writing the cache mishandles newlines in values,
- # but we know of no workaround that is simple, portable, and efficient.
- # So, don't put newlines in cache variables' values.
- # Ultrix sh set writes to stderr and can't be redirected directly,
- # and sets the high bit in the cache file unless we assign to the vars.
- (set) 2>&1 |
-   case `(ac_space=' '; set | grep ac_space) 2>&1` in
-   *ac_space=\ *)
-     # `set' does not quote correctly, so add quotes (double-quote substitution
-     # turns \\\\ into \\, and sed turns \\ into \).
-     sed -n \
-       -e "s/'/'\\\\''/g" \
-       -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
-     ;;
-   *)
-     # `set' quotes correctly as required by POSIX, so do not add quotes.
-     sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
-     ;;
-   esac >> confcache
- if cmp -s $cache_file confcache; then
-   :
- else
-   if test -w $cache_file; then
-     echo "updating cache $cache_file"
-     cat confcache > $cache_file
-   else
-     echo "not updating unwritable cache $cache_file"
-   fi
- fi
- rm -f confcache
- 
- exit 0
- 
- # Local Variables:
- # mode:shell-script
- # sh-indentation:2
- # End:
--- 0 ----
diff -Nrcpad gcc-3.4.3/boehm-gc/ltmain.sh gcc-4.0.0/boehm-gc/ltmain.sh
*** gcc-3.4.3/boehm-gc/ltmain.sh	Wed Nov 20 15:59:07 2002
--- gcc-4.0.0/boehm-gc/ltmain.sh	Thu Jan  1 00:00:00 1970
***************
*** 1,4012 ****
- # ltmain.sh - Provide generalized library-building support services.
- # NOTE: Changing this file will not affect anything until you rerun ltconfig.
- #
- # Copyright (C) 1996-1999 Free Software Foundation, Inc.
- # Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
- #
- # This program is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation; either version 2 of the License, or
- # (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful, but
- # WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- # General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program; if not, write to the Free Software
- # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- #
- # As a special exception to the GNU General Public License, if you
- # distribute this file as part of a program that contains a
- # configuration script generated by Autoconf, you may include it under
- # the same distribution terms that you use for the rest of that program.
- 
- # Check that we have a working $echo.
- if test "X$1" = X--no-reexec; then
-   # Discard the --no-reexec flag, and continue.
-   shift
- elif test "X$1" = X--fallback-echo; then
-   # Avoid inline document here, it may be left over
-   :
- elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
-   # Yippee, $echo works!
-   :
- else
-   # Restart under the correct shell, and then maybe $echo will work.
-   exec $SHELL "$0" --no-reexec ${1+"$@"}
- fi
- 
- if test "X$1" = X--fallback-echo; then
-   # used as fallback echo
-   shift
-   cat <<EOF
- $*
- EOF
-   exit 0
- fi
- 
- # The name of this program.
- progname=`$echo "$0" | sed 's%^.*/%%'`
- modename="$progname"
- 
- # Constants.
- PROGRAM=ltmain.sh
- PACKAGE=libtool
- VERSION=1.3.4
- TIMESTAMP=" (1.385.2.196 1999/12/07 21:47:57)"
- 
- default_mode=
- help="Try \`$progname --help' for more information."
- magic="%%%MAGIC variable%%%"
- mkdir="mkdir"
- mv="mv -f"
- rm="rm -f"
- 
- # Sed substitution that helps us do robust quoting.  It backslashifies
- # metacharacters that are still active within double-quoted strings.
- Xsed='sed -e 1s/^X//'
- sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g'
- SP2NL='tr \040 \012'
- NL2SP='tr \015\012 \040\040'
- 
- # NLS nuisances.
- # Only set LANG and LC_ALL to C if already set.
- # These must not be set unconditionally because not all systems understand
- # e.g. LANG=C (notably SCO).
- # We save the old values to restore during execute mode.
- if test "${LC_ALL+set}" = set; then
-   save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL
- fi
- if test "${LANG+set}" = set; then
-   save_LANG="$LANG"; LANG=C; export LANG
- fi
- 
- if test "$LTCONFIG_VERSION" != "$VERSION"; then
-   echo "$modename: ltconfig version \`$LTCONFIG_VERSION' does not match $PROGRAM version \`$VERSION'" 1>&2
-   echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
-   exit 1
- fi
- 
- if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
-   echo "$modename: not configured to build any kind of library" 1>&2
-   echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
-   exit 1
- fi
- 
- # Global variables.
- mode=$default_mode
- nonopt=
- prev=
- prevopt=
- run=
- show="$echo"
- show_help=
- execute_dlfiles=
- lo2o="s/\\.lo\$/.${objext}/"
- o2lo="s/\\.${objext}\$/.lo/"
- 
- # Parse our command line options once, thoroughly.
- while test $# -gt 0
- do
-   arg="$1"
-   shift
- 
-   case "$arg" in
-   -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;;
-   *) optarg= ;;
-   esac
- 
-   # If the previous option needs an argument, assign it.
-   if test -n "$prev"; then
-     case "$prev" in
-     execute_dlfiles)
-       eval "$prev=\"\$$prev \$arg\""
-       ;;
-     *)
-       eval "$prev=\$arg"
-       ;;
-     esac
- 
-     prev=
-     prevopt=
-     continue
-   fi
- 
-   # Have we seen a non-optional argument yet?
-   case "$arg" in
-   --help)
-     show_help=yes
-     ;;
- 
-   --version)
-     echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"
-     exit 0
-     ;;
- 
-   --config)
-     sed -e '1,/^### BEGIN LIBTOOL CONFIG/d' -e '/^### END LIBTOOL CONFIG/,$d' $0
-     exit 0
-     ;;
- 
-   --debug)
-     echo "$progname: enabling shell trace mode"
-     set -x
-     ;;
- 
-   --dry-run | -n)
-     run=:
-     ;;
- 
-   --features)
-     echo "host: $host"
-     if test "$build_libtool_libs" = yes; then
-       echo "enable shared libraries"
-     else
-       echo "disable shared libraries"
-     fi
-     if test "$build_old_libs" = yes; then
-       echo "enable static libraries"
-     else
-       echo "disable static libraries"
-     fi
-     exit 0
-     ;;
- 
-   --finish) mode="finish" ;;
- 
-   --mode) prevopt="--mode" prev=mode ;;
-   --mode=*) mode="$optarg" ;;
- 
-   --quiet | --silent)
-     show=:
-     ;;
- 
-   -dlopen)
-     prevopt="-dlopen"
-     prev=execute_dlfiles
-     ;;
- 
-   -*)
-     $echo "$modename: unrecognized option \`$arg'" 1>&2
-     $echo "$help" 1>&2
-     exit 1
-     ;;
- 
-   *)
-     nonopt="$arg"
-     break
-     ;;
-   esac
- done
- 
- if test -n "$prevopt"; then
-   $echo "$modename: option \`$prevopt' requires an argument" 1>&2
-   $echo "$help" 1>&2
-   exit 1
- fi
- 
- if test -z "$show_help"; then
- 
-   # Infer the operation mode.
-   if test -z "$mode"; then
-     case "$nonopt" in
-     *cc | *++ | gcc* | *-gcc*)
-       mode=link
-       for arg
-       do
- 	case "$arg" in
- 	-c)
- 	   mode=compile
- 	   break
- 	   ;;
- 	esac
-       done
-       ;;
-     *db | *dbx | *strace | *truss)
-       mode=execute
-       ;;
-     *install*|cp|mv)
-       mode=install
-       ;;
-     *rm)
-       mode=uninstall
-       ;;
-     *)
-       # If we have no mode, but dlfiles were specified, then do execute mode.
-       test -n "$execute_dlfiles" && mode=execute
- 
-       # Just use the default operation mode.
-       if test -z "$mode"; then
- 	if test -n "$nonopt"; then
- 	  $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2
- 	else
- 	  $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2
- 	fi
-       fi
-       ;;
-     esac
-   fi
- 
-   # Only execute mode is allowed to have -dlopen flags.
-   if test -n "$execute_dlfiles" && test "$mode" != execute; then
-     $echo "$modename: unrecognized option \`-dlopen'" 1>&2
-     $echo "$help" 1>&2
-     exit 1
-   fi
- 
-   # Change the help message to a mode-specific one.
-   generic_help="$help"
-   help="Try \`$modename --help --mode=$mode' for more information."
- 
-   # These modes are in order of execution frequency so that they run quickly.
-   case "$mode" in
-   # libtool compile mode
-   compile)
-     modename="$modename: compile"
-     # Get the compilation command and the source file.
-     base_compile=
-     lastarg=
-     srcfile="$nonopt"
-     suppress_output=
- 
-     user_target=no
-     for arg
-     do
-       # Accept any command-line options.
-       case "$arg" in
-       -o)
- 	if test "$user_target" != "no"; then
- 	  $echo "$modename: you cannot specify \`-o' more than once" 1>&2
- 	  exit 1
- 	fi
- 	user_target=next
- 	;;
- 
-       -static)
- 	build_old_libs=yes
- 	continue
- 	;;
-       esac
- 
-       case "$user_target" in
-       next)
- 	# The next one is the -o target name
- 	user_target=yes
- 	continue
- 	;;
-       yes)
- 	# We got the output file
- 	user_target=set
- 	libobj="$arg"
- 	continue
- 	;;
-       esac
- 
-       # Accept the current argument as the source file.
-       lastarg="$srcfile"
-       srcfile="$arg"
- 
-       # Aesthetically quote the previous argument.
- 
-       # Backslashify any backslashes, double quotes, and dollar signs.
-       # These are the only characters that are still specially
-       # interpreted inside of double-quoted scrings.
-       lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"`
- 
-       # Double-quote args containing other shell metacharacters.
-       # Many Bourne shells cannot handle close brackets correctly in scan
-       # sets, so we specify it separately.
-       case "$lastarg" in
-       *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
- 	lastarg="\"$lastarg\""
- 	;;
-       esac
- 
-       # Add the previous argument to base_compile.
-       if test -z "$base_compile"; then
- 	base_compile="$lastarg"
-       else
- 	base_compile="$base_compile $lastarg"
-       fi
-     done
- 
-     case "$user_target" in
-     set)
-       ;;
-     no)
-       # Get the name of the library object.
-       libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'`
-       ;;
-     *)
-       $echo "$modename: you must specify a target with \`-o'" 1>&2
-       exit 1
-       ;;
-     esac
- 
-     # Recognize several different file suffixes.
-     # If the user specifies -o file.o, it is replaced with file.lo
-     xform='[cCFSfmso]'
-     case "$libobj" in
-     *.ada) xform=ada ;;
-     *.adb) xform=adb ;;
-     *.ads) xform=ads ;;
-     *.asm) xform=asm ;;
-     *.c++) xform=c++ ;;
-     *.cc) xform=cc ;;
-     *.cpp) xform=cpp ;;
-     *.cxx) xform=cxx ;;
-     *.f90) xform=f90 ;;
-     *.for) xform=for ;;
-     esac
- 
-     libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
- 
-     case "$libobj" in
-     *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;;
-     *)
-       $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2
-       exit 1
-       ;;
-     esac
- 
-     if test -z "$base_compile"; then
-       $echo "$modename: you must specify a compilation command" 1>&2
-       $echo "$help" 1>&2
-       exit 1
-     fi
- 
-     # Delete any leftover library objects.
-     if test "$build_old_libs" = yes; then
-       removelist="$obj $libobj"
-     else
-       removelist="$libobj"
-     fi
- 
-     $run $rm $removelist
-     trap "$run $rm $removelist; exit 1" 1 2 15
- 
-     # Calculate the filename of the output object if compiler does
-     # not support -o with -c
-     if test "$compiler_c_o" = no; then
-       output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\..*$%%'`.${objext}
-       lockfile="$output_obj.lock"
-       removelist="$removelist $output_obj $lockfile"
-       trap "$run $rm $removelist; exit 1" 1 2 15
-     else
-       need_locks=no
-       lockfile=
-     fi
- 
-     # Lock this critical section if it is needed
-     # We use this script file to make the link, it avoids creating a new file
-     if test "$need_locks" = yes; then
-       until ln "$0" "$lockfile" 2>/dev/null; do
- 	$show "Waiting for $lockfile to be removed"
- 	sleep 2
-       done
-     elif test "$need_locks" = warn; then
-       if test -f "$lockfile"; then
- 	echo "\
- *** ERROR, $lockfile exists and contains:
- `cat $lockfile 2>/dev/null`
- 
- This indicates that another process is trying to use the same
- temporary object file, and libtool could not work around it because
- your compiler does not support \`-c' and \`-o' together.  If you
- repeat this compilation, it may succeed, by chance, but you had better
- avoid parallel builds (make -j) in this platform, or get a better
- compiler."
- 
- 	$run $rm $removelist
- 	exit 1
-       fi
-       echo $srcfile > "$lockfile"
-     fi
- 
-     if test -n "$fix_srcfile_path"; then
-       eval srcfile=\"$fix_srcfile_path\"
-     fi
- 
-     # Only build a PIC object if we are building libtool libraries.
-     if test "$build_libtool_libs" = yes; then
-       # Without this assignment, base_compile gets emptied.
-       fbsd_hideous_sh_bug=$base_compile
- 
-       # All platforms use -DPIC, to notify preprocessed assembler code.
-       command="$base_compile $srcfile $pic_flag -DPIC"
-       if test "$build_old_libs" = yes; then
- 	lo_libobj="$libobj"
- 	dir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'`
- 	if test "X$dir" = "X$libobj"; then
- 	  dir="$objdir"
- 	else
- 	  dir="$dir/$objdir"
- 	fi
- 	libobj="$dir/"`$echo "X$libobj" | $Xsed -e 's%^.*/%%'`
- 
- 	if test -d "$dir"; then
- 	  $show "$rm $libobj"
- 	  $run $rm $libobj
- 	else
- 	  $show "$mkdir $dir"
- 	  $run $mkdir $dir
- 	  status=$?
- 	  if test $status -ne 0 && test ! -d $dir; then
- 	    exit $status
- 	  fi
- 	fi
-       fi
-       if test "$compiler_o_lo" = yes; then
- 	output_obj="$libobj"
- 	command="$command -o $output_obj"
-       elif test "$compiler_c_o" = yes; then
- 	output_obj="$obj"
- 	command="$command -o $output_obj"
-       fi
- 
-       $run $rm "$output_obj"
-       $show "$command"
-       if $run eval "$command"; then :
-       else
- 	test -n "$output_obj" && $run $rm $removelist
- 	exit 1
-       fi
- 
-       if test "$need_locks" = warn &&
- 	 test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then
- 	echo "\
- *** ERROR, $lockfile contains:
- `cat $lockfile 2>/dev/null`
- 
- but it should contain:
- $srcfile
- 
- This indicates that another process is trying to use the same
- temporary object file, and libtool could not work around it because
- your compiler does not support \`-c' and \`-o' together.  If you
- repeat this compilation, it may succeed, by chance, but you had better
- avoid parallel builds (make -j) in this platform, or get a better
- compiler."
- 
- 	$run $rm $removelist
- 	exit 1
-       fi
- 
-       # Just move the object if needed, then go on to compile the next one
-       if test x"$output_obj" != x"$libobj"; then
- 	$show "$mv $output_obj $libobj"
- 	if $run $mv $output_obj $libobj; then :
- 	else
- 	  error=$?
- 	  $run $rm $removelist
- 	  exit $error
- 	fi
-       fi
- 
-       # If we have no pic_flag, then copy the object into place and finish.
-       if test -z "$pic_flag" && test "$build_old_libs" = yes; then
- 	# Rename the .lo from within objdir to obj
- 	if test -f $obj; then
- 	  $show $rm $obj
- 	  $run $rm $obj
- 	fi
- 
- 	$show "$mv $libobj $obj"
- 	if $run $mv $libobj $obj; then :
- 	else
- 	  error=$?
- 	  $run $rm $removelist
- 	  exit $error
- 	fi
- 
- 	xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
- 	if test "X$xdir" = "X$obj"; then
- 	  xdir="."
- 	else
- 	  xdir="$xdir"
- 	fi
- 	baseobj=`$echo "X$obj" | $Xsed -e "s%.*/%%"`
- 	libobj=`$echo "X$baseobj" | $Xsed -e "$o2lo"`
- 	# Now arrange that obj and lo_libobj become the same file
- 	$show "(cd $xdir && $LN_S $baseobj $libobj)"
- 	if $run eval '(cd $xdir && $LN_S $baseobj $libobj)'; then
- 	  exit 0
- 	else
- 	  error=$?
- 	  $run $rm $removelist
- 	  exit $error
- 	fi
-       fi
- 
-       # Allow error messages only from the first compilation.
-       suppress_output=' >/dev/null 2>&1'
-     fi
- 
-     # Only build a position-dependent object if we build old libraries.
-     if test "$build_old_libs" = yes; then
-       command="$base_compile $srcfile"
-       if test "$compiler_c_o" = yes; then
- 	command="$command -o $obj"
- 	output_obj="$obj"
-       fi
- 
-       # Suppress compiler output if we already did a PIC compilation.
-       command="$command$suppress_output"
-       $run $rm "$output_obj"
-       $show "$command"
-       if $run eval "$command"; then :
-       else
- 	$run $rm $removelist
- 	exit 1
-       fi
- 
-       if test "$need_locks" = warn &&
- 	 test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then
- 	echo "\
- *** ERROR, $lockfile contains:
- `cat $lockfile 2>/dev/null`
- 
- but it should contain:
- $srcfile
- 
- This indicates that another process is trying to use the same
- temporary object file, and libtool could not work around it because
- your compiler does not support \`-c' and \`-o' together.  If you
- repeat this compilation, it may succeed, by chance, but you had better
- avoid parallel builds (make -j) in this platform, or get a better
- compiler."
- 
- 	$run $rm $removelist
- 	exit 1
-       fi
- 
-       # Just move the object if needed
-       if test x"$output_obj" != x"$obj"; then
- 	$show "$mv $output_obj $obj"
- 	if $run $mv $output_obj $obj; then :
- 	else
- 	  error=$?
- 	  $run $rm $removelist
- 	  exit $error
- 	fi
-       fi
- 
-       # Create an invalid libtool object if no PIC, so that we do not
-       # accidentally link it into a program.
-       if test "$build_libtool_libs" != yes; then
- 	$show "echo timestamp > $libobj"
- 	$run eval "echo timestamp > \$libobj" || exit $?
-       else
- 	# Move the .lo from within objdir
- 	$show "$mv $libobj $lo_libobj"
- 	if $run $mv $libobj $lo_libobj; then :
- 	else
- 	  error=$?
- 	  $run $rm $removelist
- 	  exit $error
- 	fi
-       fi
-     fi
- 
-     # Unlock the critical section if it was locked
-     if test "$need_locks" != no; then
-       $rm "$lockfile"
-     fi
- 
-     exit 0
-     ;;
- 
-   # libtool link mode
-   link)
-     modename="$modename: link"
-     case "$host" in
-     *-*-cygwin* | *-*-mingw* | *-*-os2*)
-       # It is impossible to link a dll without this setting, and
-       # we shouldn't force the makefile maintainer to figure out
-       # which system we are compiling for in order to pass an extra
-       # flag for every libtool invokation.
-       # allow_undefined=no
- 
-       # FIXME: Unfortunately, there are problems with the above when trying
-       # to make a dll which has undefined symbols, in which case not
-       # even a static library is built.  For now, we need to specify
-       # -no-undefined on the libtool link line when we can be certain
-       # that all symbols are satisfied, otherwise we get a static library.
-       allow_undefined=yes
- 
-       # This is a source program that is used to create dlls on Windows
-       # Don't remove nor modify the starting and closing comments
- # /* ltdll.c starts here */
- # #define WIN32_LEAN_AND_MEAN
- # #include <windows.h>
- # #undef WIN32_LEAN_AND_MEAN
- # #include <stdio.h>
- #
- # #ifndef __CYGWIN__
- # #  ifdef __CYGWIN32__
- # #    define __CYGWIN__ __CYGWIN32__
- # #  endif
- # #endif
- #
- # #ifdef __cplusplus
- # extern "C" {
- # #endif
- # BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
- # #ifdef __cplusplus
- # }
- # #endif
- #
- # #ifdef __CYGWIN__
- # #include <cygwin/cygwin_dll.h>
- # DECLARE_CYGWIN_DLL( DllMain );
- # #endif
- # HINSTANCE __hDllInstance_base;
- #
- # BOOL APIENTRY
- # DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
- # {
- #   __hDllInstance_base = hInst;
- #   return TRUE;
- # }
- # /* ltdll.c ends here */
-       # This is a source program that is used to create import libraries
-       # on Windows for dlls which lack them. Don't remove nor modify the
-       # starting and closing comments
- # /* impgen.c starts here */
- # /*   Copyright (C) 1999 Free Software Foundation, Inc.
- # 
- #  This file is part of GNU libtool.
- # 
- #  This program is free software; you can redistribute it and/or modify
- #  it under the terms of the GNU General Public License as published by
- #  the Free Software Foundation; either version 2 of the License, or
- #  (at your option) any later version.
- # 
- #  This program is distributed in the hope that it will be useful,
- #  but WITHOUT ANY WARRANTY; without even the implied warranty of
- #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- #  GNU General Public License for more details.
- # 
- #  You should have received a copy of the GNU General Public License
- #  along with this program; if not, write to the Free Software
- #  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- #  */
- # 
- #  #include <stdio.h>		/* for printf() */
- #  #include <unistd.h>		/* for open(), lseek(), read() */
- #  #include <fcntl.h>		/* for O_RDONLY, O_BINARY */
- #  #include <string.h>		/* for strdup() */
- # 
- #  static unsigned int
- #  pe_get16 (fd, offset)
- #       int fd;
- #       int offset;
- #  {
- #    unsigned char b[2];
- #    lseek (fd, offset, SEEK_SET);
- #    read (fd, b, 2);
- #    return b[0] + (b[1]<<8);
- #  }
- # 
- #  static unsigned int
- #  pe_get32 (fd, offset)
- #      int fd;
- #      int offset;
- #  {
- #    unsigned char b[4];
- #    lseek (fd, offset, SEEK_SET);
- #    read (fd, b, 4);
- #    return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
- #  }
- # 
- #  static unsigned int
- #  pe_as32 (ptr)
- #       void *ptr;
- #  {
- #    unsigned char *b = ptr;
- #    return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
- #  }
- # 
- #  int
- #  main (argc, argv)
- #      int argc;
- #      char *argv[];
- #  {
- #      int dll;
- #      unsigned long pe_header_offset, opthdr_ofs, num_entries, i;
- #      unsigned long export_rva, export_size, nsections, secptr, expptr;
- #      unsigned long name_rvas, nexp;
- #      unsigned char *expdata, *erva;
- #      char *filename, *dll_name;
- # 
- #      filename = argv[1];
- # 
- #      dll = open(filename, O_RDONLY|O_BINARY);
- #      if (!dll)
- #  	return 1;
- # 
- #      dll_name = filename;
- #    
- #      for (i=0; filename[i]; i++)
- #  	if (filename[i] == '/' || filename[i] == '\\'  || filename[i] == ':')
- #  	    dll_name = filename + i +1;
- # 
- #      pe_header_offset = pe_get32 (dll, 0x3c);
- #      opthdr_ofs = pe_header_offset + 4 + 20;
- #      num_entries = pe_get32 (dll, opthdr_ofs + 92);
- # 
- #      if (num_entries < 1) /* no exports */
- #  	return 1;
- # 
- #      export_rva = pe_get32 (dll, opthdr_ofs + 96);
- #      export_size = pe_get32 (dll, opthdr_ofs + 100);
- #      nsections = pe_get16 (dll, pe_header_offset + 4 +2);
- #      secptr = (pe_header_offset + 4 + 20 +
- #  	      pe_get16 (dll, pe_header_offset + 4 + 16));
- # 
- #      expptr = 0;
- #      for (i = 0; i < nsections; i++)
- #      {
- #  	char sname[8];
- #  	unsigned long secptr1 = secptr + 40 * i;
- #  	unsigned long vaddr = pe_get32 (dll, secptr1 + 12);
- #  	unsigned long vsize = pe_get32 (dll, secptr1 + 16);
- #  	unsigned long fptr = pe_get32 (dll, secptr1 + 20);
- #  	lseek(dll, secptr1, SEEK_SET);
- #  	read(dll, sname, 8);
- #  	if (vaddr <= export_rva && vaddr+vsize > export_rva)
- #  	{
- #  	    expptr = fptr + (export_rva - vaddr);
- #  	    if (export_rva + export_size > vaddr + vsize)
- #  		export_size = vsize - (export_rva - vaddr);
- #  	    break;
- #  	}
- #      }
- # 
- #      expdata = (unsigned char*)malloc(export_size);
- #      lseek (dll, expptr, SEEK_SET);
- #      read (dll, expdata, export_size);
- #      erva = expdata - export_rva;
- # 
- #      nexp = pe_as32 (expdata+24);
- #      name_rvas = pe_as32 (expdata+32);
- # 
- #      printf ("EXPORTS\n");
- #      for (i = 0; i<nexp; i++)
- #      {
- #  	unsigned long name_rva = pe_as32 (erva+name_rvas+i*4);
- #  	printf ("\t%s @ %ld ;\n", erva+name_rva, 1+ i);
- #      }
- # 
- #      return 0;
- #  }
- # /* impgen.c ends here */
-       ;;
-     *)
-       allow_undefined=yes
-       ;;
-     esac
-     compile_command="$nonopt"
-     finalize_command="$nonopt"
- 
-     compile_rpath=
-     finalize_rpath=
-     compile_shlibpath=
-     finalize_shlibpath=
-     convenience=
-     old_convenience=
-     deplibs=
-     linkopts=
- 
-     if test -n "$shlibpath_var"; then
-       # get the directories listed in $shlibpath_var
-       eval lib_search_path=\`\$echo \"X \${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
-     else
-       lib_search_path=
-     fi
-     # now prepend the system-specific ones
-     eval lib_search_path=\"$sys_lib_search_path_spec\$lib_search_path\"
-     eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
-     
-     avoid_version=no
-     dlfiles=
-     dlprefiles=
-     dlself=no
-     export_dynamic=no
-     export_symbols=
-     export_symbols_regex=
-     generated=
-     libobjs=
-     link_against_libtool_libs=
-     ltlibs=
-     module=no
-     objs=
-     prefer_static_libs=no
-     preload=no
-     prev=
-     prevarg=
-     release=
-     rpath=
-     xrpath=
-     perm_rpath=
-     temp_rpath=
-     thread_safe=no
-     vinfo=
- 
-     # We need to know -static, to get the right output filenames.
-     for arg
-     do
-       case "$arg" in
-       -all-static | -static)
- 	if test "X$arg" = "X-all-static"; then
- 	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
- 	    $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2
- 	  fi
- 	  if test -n "$link_static_flag"; then
- 	    dlopen_self=$dlopen_self_static
- 	  fi
- 	else
- 	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
- 	    dlopen_self=$dlopen_self_static
- 	  fi
- 	fi
- 	build_libtool_libs=no
- 	build_old_libs=yes
- 	prefer_static_libs=yes
- 	break
- 	;;
-       esac
-     done
- 
-     # See if our shared archives depend on static archives.
-     test -n "$old_archive_from_new_cmds" && build_old_libs=yes
- 
-     # Go through the arguments, transforming them on the way.
-     while test $# -gt 0; do
-       arg="$1"
-       shift
- 
-       # If the previous option needs an argument, assign it.
-       if test -n "$prev"; then
- 	case "$prev" in
- 	output)
- 	  compile_command="$compile_command @OUTPUT@"
- 	  finalize_command="$finalize_command @OUTPUT@"
- 	  ;;
- 	esac
- 
- 	case "$prev" in
- 	dlfiles|dlprefiles)
- 	  if test "$preload" = no; then
- 	    # Add the symbol object into the linking commands.
- 	    compile_command="$compile_command @SYMFILE@"
- 	    finalize_command="$finalize_command @SYMFILE@"
- 	    preload=yes
- 	  fi
- 	  case "$arg" in
- 	  *.la | *.lo) ;;  # We handle these cases below.
- 	  force)
- 	    if test "$dlself" = no; then
- 	      dlself=needless
- 	      export_dynamic=yes
- 	    fi
- 	    prev=
- 	    continue
- 	    ;;
- 	  self)
- 	    if test "$prev" = dlprefiles; then
- 	      dlself=yes
- 	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
- 	      dlself=yes
- 	    else
- 	      dlself=needless
- 	      export_dynamic=yes
- 	    fi
- 	    prev=
- 	    continue
- 	    ;;
- 	  *)
- 	    if test "$prev" = dlfiles; then
- 	      dlfiles="$dlfiles $arg"
- 	    else
- 	      dlprefiles="$dlprefiles $arg"
- 	    fi
- 	    prev=
- 	    ;;
- 	  esac
- 	  ;;
- 	expsyms)
- 	  export_symbols="$arg"
- 	  if test ! -f "$arg"; then
- 	    $echo "$modename: symbol file \`$arg' does not exist"
- 	    exit 1
- 	  fi
- 	  prev=
- 	  continue
- 	  ;;
- 	expsyms_regex)
- 	  export_symbols_regex="$arg"
- 	  prev=
- 	  continue
- 	  ;;
- 	release)
- 	  release="-$arg"
- 	  prev=
- 	  continue
- 	  ;;
- 	rpath | xrpath)
- 	  # We need an absolute path.
- 	  case "$arg" in
- 	  [\\/]* | [A-Za-z]:[\\/]*) ;;
- 	  *)
- 	    $echo "$modename: only absolute run-paths are allowed" 1>&2
- 	    exit 1
- 	    ;;
- 	  esac
- 	  if test "$prev" = rpath; then
- 	    case "$rpath " in
- 	    *" $arg "*) ;;
- 	    *) rpath="$rpath $arg" ;;
- 	    esac
- 	  else
- 	    case "$xrpath " in
- 	    *" $arg "*) ;;
- 	    *) xrpath="$xrpath $arg" ;;
- 	    esac
- 	  fi
- 	  prev=
- 	  continue
- 	  ;;
- 	*)
- 	  eval "$prev=\"\$arg\""
- 	  prev=
- 	  continue
- 	  ;;
- 	esac
-       fi
- 
-       prevarg="$arg"
- 
-       case "$arg" in
-       -all-static)
- 	if test -n "$link_static_flag"; then
- 	  compile_command="$compile_command $link_static_flag"
- 	  finalize_command="$finalize_command $link_static_flag"
- 	fi
- 	continue
- 	;;
- 
-       -allow-undefined)
- 	# FIXME: remove this flag sometime in the future.
- 	$echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2
- 	continue
- 	;;
- 
-       -avoid-version)
- 	avoid_version=yes
- 	continue
- 	;;
- 
-       -dlopen)
- 	prev=dlfiles
- 	continue
- 	;;
- 
-       -dlpreopen)
- 	prev=dlprefiles
- 	continue
- 	;;
- 
-       -export-dynamic)
- 	export_dynamic=yes
- 	continue
- 	;;
- 
-       -export-symbols | -export-symbols-regex)
- 	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
- 	  $echo "$modename: not more than one -exported-symbols argument allowed"
- 	  exit 1
- 	fi
- 	if test "X$arg" = "X-export-symbols"; then
- 	  prev=expsyms
- 	else
- 	  prev=expsyms_regex
- 	fi
- 	continue
- 	;;
- 
-       -L*)
- 	dir=`$echo "X$arg" | $Xsed -e 's/^-L//'`
- 	# We need an absolute path.
- 	case "$dir" in
- 	[\\/]* | [A-Za-z]:[\\/]*) ;;
- 	*)
- 	  absdir=`cd "$dir" && pwd`
- 	  if test -z "$absdir"; then
- 	    $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
- 	    $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
- 	    absdir="$dir"
- 	  fi
- 	  dir="$absdir"
- 	  ;;
- 	esac
- 	case " $deplibs " in
- 	*" $arg "*) ;;
- 	*) deplibs="$deplibs $arg";;
- 	esac
- 	case " $lib_search_path " in
- 	*" $dir "*) ;;
- 	*) lib_search_path="$lib_search_path $dir";;
- 	esac
- 	case "$host" in
- 	*-*-cygwin* | *-*-mingw* | *-*-os2*)
- 	  dllsearchdir=`cd "$dir" && pwd || echo "$dir"`
- 	  case ":$dllsearchpath:" in
- 	  ::) dllsearchpath="$dllsearchdir";;
- 	  *":$dllsearchdir:"*) ;;
- 	  *) dllsearchpath="$dllsearchpath:$dllsearchdir";;
- 	  esac
- 	  ;;
- 	esac
- 	;;
- 
-       -l*)
- 	if test "$arg" = "-lc"; then
- 	  case "$host" in
- 	  *-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*)
- 	    # These systems don't actually have c library (as such)
- 	    continue
- 	    ;;
- 	  esac
- 	elif test "$arg" = "-lm"; then
- 	  case "$host" in
- 	  *-*-cygwin* | *-*-beos*)
- 	    # These systems don't actually have math library (as such)
- 	    continue
- 	    ;;
- 	  esac
- 	fi
- 	deplibs="$deplibs $arg"
- 	;;
- 
-       -module)
- 	module=yes
- 	continue
- 	;;
- 
-       -no-undefined)
- 	allow_undefined=no
- 	continue
- 	;;
- 
-       -o) prev=output ;;
- 
-       -release)
- 	prev=release
- 	continue
- 	;;
- 
-       -rpath)
- 	prev=rpath
- 	continue
- 	;;
- 
-       -R)
- 	prev=xrpath
- 	continue
- 	;;
- 
-       -R*)
- 	dir=`$echo "X$arg" | $Xsed -e 's/^-R//'`
- 	# We need an absolute path.
- 	case "$dir" in
- 	[\\/]* | [A-Za-z]:[\\/]*) ;;
- 	*)
- 	  $echo "$modename: only absolute run-paths are allowed" 1>&2
- 	  exit 1
- 	  ;;
- 	esac
- 	case "$xrpath " in
- 	*" $dir "*) ;;
- 	*) xrpath="$xrpath $dir" ;;
- 	esac
- 	continue
- 	;;
- 
-       -static)
- 	# If we have no pic_flag, then this is the same as -all-static.
- 	if test -z "$pic_flag" && test -n "$link_static_flag"; then
- 	  compile_command="$compile_command $link_static_flag"
- 	  finalize_command="$finalize_command $link_static_flag"
- 	fi
- 	continue
- 	;;
- 
-       -thread-safe)
- 	thread_safe=yes
- 	continue
- 	;;
- 
-       -version-info)
- 	prev=vinfo
- 	continue
- 	;;
- 
-       # Some other compiler flag.
-       -* | +*)
- 	# Unknown arguments in both finalize_command and compile_command need
- 	# to be aesthetically quoted because they are evaled later.
- 	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- 	case "$arg" in
- 	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
- 	  arg="\"$arg\""
- 	  ;;
- 	esac
- 	;;
- 
-       *.o | *.obj | *.a | *.lib)
- 	# A standard object.
- 	objs="$objs $arg"
- 	;;
- 
-       *.lo)
- 	# A library object.
- 	if test "$prev" = dlfiles; then
- 	  dlfiles="$dlfiles $arg"
- 	  if test "$build_libtool_libs" = yes && test "$dlopen" = yes; then
- 	    prev=
- 	    continue
- 	  else
- 	    # If libtool objects are unsupported, then we need to preload.
- 	    prev=dlprefiles
- 	  fi
- 	fi
- 
- 	if test "$prev" = dlprefiles; then
- 	  # Preload the old-style object.
- 	  dlprefiles="$dlprefiles "`$echo "X$arg" | $Xsed -e "$lo2o"`
- 	  prev=
- 	fi
- 	libobjs="$libobjs $arg"
- 	;;
- 
-       *.la)
- 	# A libtool-controlled library.
- 
- 	dlname=
- 	libdir=
- 	library_names=
- 	old_library=
- 
- 	# Check to see that this really is a libtool archive.
- 	if (sed -e '2q' $arg | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
- 	else
- 	  $echo "$modename: \`$arg' is not a valid libtool archive" 1>&2
- 	  exit 1
- 	fi
- 
- 	# If the library was installed with an old release of libtool,
- 	# it will not redefine variable installed.
- 	installed=yes
- 
- 	# Read the .la file
- 	# If there is no directory component, then add one.
- 	case "$arg" in
- 	*/* | *\\*) . $arg ;;
- 	*) . ./$arg ;;
- 	esac
- 
- 	# Get the name of the library we link against.
- 	linklib=
- 	for l in $old_library $library_names; do
- 	  linklib="$l"
- 	done
- 
- 	if test -z "$linklib"; then
- 	  $echo "$modename: cannot find name of link library for \`$arg'" 1>&2
- 	  exit 1
- 	fi
- 
- 	# Find the relevant object directory and library name.
- 	name=`$echo "X$arg" | $Xsed -e 's%^.*/%%' -e 's/\.la$//' -e 's/^lib//'`
- 
- 	if test "X$installed" = Xyes; then
- 	  dir="$libdir"
- 	else
- 	  dir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
- 	  if test "X$dir" = "X$arg"; then
- 	    dir="$objdir"
- 	  else
- 	    dir="$dir/$objdir"
- 	  fi
- 	fi
- 
- 	if test -n "$dependency_libs"; then
- 	  # Extract -R and -L from dependency_libs
- 	  temp_deplibs=
- 	  for deplib in $dependency_libs; do
- 	    case "$deplib" in
- 	    -R*) temp_xrpath=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
- 		 case " $rpath $xrpath " in
- 		 *" $temp_xrpath "*) ;;
- 		 *) xrpath="$xrpath $temp_xrpath";;
- 		 esac;;
- 	    -L*) case "$compile_command $temp_deplibs " in
- 		 *" $deplib "*) ;;
- 		 *) temp_deplibs="$temp_deplibs $deplib";;
- 		 esac
- 		 temp_dir=`$echo "X$deplib" | $Xsed -e 's/^-L//'`
- 		 case " $lib_search_path " in
- 		 *" $temp_dir "*) ;;
- 		 *) lib_search_path="$lib_search_path $temp_dir";;
- 		 esac
- 		 ;;
- 	    *) temp_deplibs="$temp_deplibs $deplib";;
- 	    esac
- 	  done
- 	  dependency_libs="$temp_deplibs"
- 	fi
- 
- 	if test -z "$libdir"; then
- 	  # It is a libtool convenience library, so add in its objects.
- 	  convenience="$convenience $dir/$old_library"
- 	  old_convenience="$old_convenience $dir/$old_library"
- 	  deplibs="$deplibs$dependency_libs"
- 	  compile_command="$compile_command $dir/$old_library$dependency_libs"
- 	  finalize_command="$finalize_command $dir/$old_library$dependency_libs"
- 	  continue
- 	fi
- 
- 	# This library was specified with -dlopen.
- 	if test "$prev" = dlfiles; then
- 	  dlfiles="$dlfiles $arg"
- 	  if test -z "$dlname" || test "$dlopen" != yes || test "$build_libtool_libs" = no; then
- 	    # If there is no dlname, no dlopen support or we're linking statically,
- 	    # we need to preload.
- 	    prev=dlprefiles
- 	  else
- 	    # We should not create a dependency on this library, but we
- 	    # may need any libraries it requires.
- 	    compile_command="$compile_command$dependency_libs"
- 	    finalize_command="$finalize_command$dependency_libs"
- 	    prev=
- 	    continue
- 	  fi
- 	fi
- 
- 	# The library was specified with -dlpreopen.
- 	if test "$prev" = dlprefiles; then
- 	  # Prefer using a static library (so that no silly _DYNAMIC symbols
- 	  # are required to link).
- 	  if test -n "$old_library"; then
- 	    dlprefiles="$dlprefiles $dir/$old_library"
- 	  else
- 	    dlprefiles="$dlprefiles $dir/$linklib"
- 	  fi
- 	  prev=
- 	fi
- 
- 	if test -n "$library_names" &&
- 	   { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
- 	  link_against_libtool_libs="$link_against_libtool_libs $arg"
- 	  if test -n "$shlibpath_var"; then
- 	    # Make sure the rpath contains only unique directories.
- 	    case "$temp_rpath " in
- 	    *" $dir "*) ;;
- 	    *) temp_rpath="$temp_rpath $dir" ;;
- 	    esac
- 	  fi
- 
- 	  # We need an absolute path.
- 	  case "$dir" in
- 	  [\\/] | [A-Za-z]:[\\/]*) absdir="$dir" ;;
- 	  *)
- 	    absdir=`cd "$dir" && pwd`
- 	    if test -z "$absdir"; then
- 	      $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
- 	      $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
- 	      absdir="$dir"
- 	    fi
- 	    ;;
- 	  esac
- 	  
- 	  # This is the magic to use -rpath.
- 	  # Skip directories that are in the system default run-time
- 	  # search path, unless they have been requested with -R.
- 	  case " $sys_lib_dlsearch_path " in
- 	  *" $absdir "*) ;;
- 	  *)
- 	    case "$compile_rpath " in
- 	    *" $absdir "*) ;;
- 	    *) compile_rpath="$compile_rpath $absdir" 
- 	    esac
- 	    ;;
- 	  esac
- 
- 	  case " $sys_lib_dlsearch_path " in
- 	  *" $libdir "*) ;;
- 	  *)
- 	    case "$finalize_rpath " in
- 	    *" $libdir "*) ;;
- 	    *) finalize_rpath="$finalize_rpath $libdir"
- 	    esac
- 	    ;;
- 	  esac
- 
- 	  lib_linked=yes
- 	  case "$hardcode_action" in
- 	  immediate | unsupported)
- 	    if test "$hardcode_direct" = no; then
- 	      compile_command="$compile_command $dir/$linklib"
- 	      deplibs="$deplibs $dir/$linklib"
- 	      case "$host" in
- 	      *-*-cygwin* | *-*-mingw* | *-*-os2*)
- 		dllsearchdir=`cd "$dir" && pwd || echo "$dir"`
- 		if test -n "$dllsearchpath"; then
- 		  dllsearchpath="$dllsearchpath:$dllsearchdir"
- 		else
- 		  dllsearchpath="$dllsearchdir"
- 		fi
- 		;;
- 	      esac
- 	    elif test "$hardcode_minus_L" = no; then
- 	      case "$host" in
- 	      *-*-sunos*)
- 		compile_shlibpath="$compile_shlibpath$dir:"
- 		;;
- 	      esac
- 	      case "$compile_command " in
- 	      *" -L$dir "*) ;;
- 	      *) compile_command="$compile_command -L$dir";;
- 	      esac
- 	      compile_command="$compile_command -l$name"
- 	      deplibs="$deplibs -L$dir -l$name"
- 	    elif test "$hardcode_shlibpath_var" = no; then
- 	      case ":$compile_shlibpath:" in
- 	      *":$dir:"*) ;;
- 	      *) compile_shlibpath="$compile_shlibpath$dir:";;
- 	      esac
- 	      compile_command="$compile_command -l$name"
- 	      deplibs="$deplibs -l$name"
- 	    else
- 	      lib_linked=no
- 	    fi
- 	    ;;
- 
- 	  relink)
- 	    if test "$hardcode_direct" = yes; then
- 	      compile_command="$compile_command $absdir/$linklib"
- 	      deplibs="$deplibs $absdir/$linklib"
- 	    elif test "$hardcode_minus_L" = yes; then
- 	      case "$compile_command " in
- 	      *" -L$absdir "*) ;;
- 	      *) compile_command="$compile_command -L$absdir";;
- 	      esac
- 	      compile_command="$compile_command -l$name"
- 	      deplibs="$deplibs -L$absdir -l$name"
- 	    elif test "$hardcode_shlibpath_var" = yes; then
- 	      case ":$compile_shlibpath:" in
- 	      *":$absdir:"*) ;;
- 	      *) compile_shlibpath="$compile_shlibpath$absdir:";;
- 	      esac
- 	      compile_command="$compile_command -l$name"
- 	      deplibs="$deplibs -l$name"
- 	    else
- 	      lib_linked=no
- 	    fi
- 	    ;;
- 
- 	  *)
- 	    lib_linked=no
- 	    ;;
- 	  esac
- 
- 	  if test "$lib_linked" != yes; then
- 	    $echo "$modename: configuration error: unsupported hardcode properties"
- 	    exit 1
- 	  fi
- 
- 	  # Finalize command for both is simple: just hardcode it.
- 	  if test "$hardcode_direct" = yes; then
- 	    finalize_command="$finalize_command $libdir/$linklib"
- 	  elif test "$hardcode_minus_L" = yes; then
- 	    case "$finalize_command " in
- 	    *" -L$libdir "*) ;;
- 	    *) finalize_command="$finalize_command -L$libdir";;
- 	    esac
- 	    finalize_command="$finalize_command -l$name"
- 	  elif test "$hardcode_shlibpath_var" = yes; then
- 	    case ":$finalize_shlibpath:" in
- 	    *":$libdir:"*) ;;
- 	    *) finalize_shlibpath="$finalize_shlibpath$libdir:";;
- 	    esac
- 	    finalize_command="$finalize_command -l$name"
- 	  else
- 	    # We cannot seem to hardcode it, guess we'll fake it.
- 	    case "$finalize_command " in
- 	    *" -L$dir "*) ;;
- 	    *) finalize_command="$finalize_command -L$libdir";;
- 	    esac
- 	    finalize_command="$finalize_command -l$name"
- 	  fi
- 	else
- 	  # Transform directly to old archives if we don't build new libraries.
- 	  if test -n "$pic_flag" && test -z "$old_library"; then
- 	    $echo "$modename: cannot find static library for \`$arg'" 1>&2
- 	    exit 1
- 	  fi
- 
- 	  # Here we assume that one of hardcode_direct or hardcode_minus_L
- 	  # is not unsupported.  This is valid on all known static and
- 	  # shared platforms.
- 	  if test "$hardcode_direct" != unsupported; then
- 	    test -n "$old_library" && linklib="$old_library"
- 	    compile_command="$compile_command $dir/$linklib"
- 	    finalize_command="$finalize_command $dir/$linklib"
- 	  else
- 	    case "$compile_command " in
- 	    *" -L$dir "*) ;;
- 	    *) compile_command="$compile_command -L$dir";;
- 	    esac
- 	    compile_command="$compile_command -l$name"
- 	    case "$finalize_command " in
- 	    *" -L$dir "*) ;;
- 	    *) finalize_command="$finalize_command -L$dir";;
- 	    esac
- 	    finalize_command="$finalize_command -l$name"
- 	  fi
- 	fi
- 
- 	# Add in any libraries that this one depends upon.
- 	compile_command="$compile_command$dependency_libs"
- 	finalize_command="$finalize_command$dependency_libs"
- 	continue
- 	;;
- 
-       # Some other compiler argument.
-       *)
- 	# Unknown arguments in both finalize_command and compile_command need
- 	# to be aesthetically quoted because they are evaled later.
- 	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- 	case "$arg" in
- 	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
- 	  arg="\"$arg\""
- 	  ;;
- 	esac
- 	;;
-       esac
- 
-       # Now actually substitute the argument into the commands.
-       if test -n "$arg"; then
- 	compile_command="$compile_command $arg"
- 	finalize_command="$finalize_command $arg"
-       fi
-     done
- 
-     if test -n "$prev"; then
-       $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
-       $echo "$help" 1>&2
-       exit 1
-     fi
- 
-     if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
-       eval arg=\"$export_dynamic_flag_spec\"
-       compile_command="$compile_command $arg"
-       finalize_command="$finalize_command $arg"
-     fi
- 
-     oldlibs=
-     # calculate the name of the file, without its directory
-     outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
-     libobjs_save="$libobjs"
- 
-     case "$output" in
-     "")
-       $echo "$modename: you must specify an output file" 1>&2
-       $echo "$help" 1>&2
-       exit 1
-       ;;
- 
-     *.a | *.lib)
-       if test -n "$link_against_libtool_libs"; then
- 	$echo "$modename: error: cannot link libtool libraries into archives" 1>&2
- 	exit 1
-       fi
- 
-       if test -n "$deplibs"; then
- 	$echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2
-       fi
- 
-       if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
- 	$echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2
-       fi
- 
-       if test -n "$rpath"; then
- 	$echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2
-       fi
- 
-       if test -n "$xrpath"; then
- 	$echo "$modename: warning: \`-R' is ignored for archives" 1>&2
-       fi
- 
-       if test -n "$vinfo"; then
- 	$echo "$modename: warning: \`-version-info' is ignored for archives" 1>&2
-       fi
- 
-       if test -n "$release"; then
- 	$echo "$modename: warning: \`-release' is ignored for archives" 1>&2
-       fi
- 
-       if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
- 	$echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2
-       fi
- 
-       # Now set the variables for building old libraries.
-       build_libtool_libs=no
-       oldlibs="$output"
-       ;;
- 
-     *.la)
-       # Make sure we only generate libraries of the form `libNAME.la'.
-       case "$outputname" in
-       lib*)
- 	name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
- 	eval libname=\"$libname_spec\"
- 	;;
-       *)
- 	if test "$module" = no; then
- 	  $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2
- 	  $echo "$help" 1>&2
- 	  exit 1
- 	fi
- 	if test "$need_lib_prefix" != no; then
- 	  # Add the "lib" prefix for modules if required
- 	  name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
- 	  eval libname=\"$libname_spec\"
- 	else
- 	  libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
- 	fi
- 	;;
-       esac
- 
-       output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
-       if test "X$output_objdir" = "X$output"; then
- 	output_objdir="$objdir"
-       else
- 	output_objdir="$output_objdir/$objdir"
-       fi
- 
-       if test -n "$objs"; then
- 	$echo "$modename: cannot build libtool library \`$output' from non-libtool objects:$objs" 2>&1
- 	exit 1
-       fi
- 
-       # How the heck are we supposed to write a wrapper for a shared library?
-       if test -n "$link_against_libtool_libs"; then
- 	 $echo "$modename: error: cannot link shared libraries into libtool libraries" 1>&2
- 	 exit 1
-       fi
- 
-       if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
- 	$echo "$modename: warning: \`-dlopen' is ignored for libtool libraries" 1>&2
-       fi
- 
-       set dummy $rpath
-       if test $# -gt 2; then
- 	$echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2
-       fi
-       install_libdir="$2"
- 
-       oldlibs=
-       if test -z "$rpath"; then
- 	if test "$build_libtool_libs" = yes; then
- 	  # Building a libtool convenience library.
- 	  libext=al
- 	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
- 	  build_libtool_libs=convenience
- 	  build_old_libs=yes
- 	fi
- 	dependency_libs="$deplibs"
- 
- 	if test -n "$vinfo"; then
- 	  $echo "$modename: warning: \`-version-info' is ignored for convenience libraries" 1>&2
- 	fi
- 
- 	if test -n "$release"; then
- 	  $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2
- 	fi
-       else
- 
- 	# Parse the version information argument.
- 	IFS="${IFS= 	}"; save_ifs="$IFS"; IFS=':'
- 	set dummy $vinfo 0 0 0
- 	IFS="$save_ifs"
- 
- 	if test -n "$8"; then
- 	  $echo "$modename: too many parameters to \`-version-info'" 1>&2
- 	  $echo "$help" 1>&2
- 	  exit 1
- 	fi
- 
- 	current="$2"
- 	revision="$3"
- 	age="$4"
- 
- 	# Check that each of the things are valid numbers.
- 	case "$current" in
- 	0 | [1-9] | [1-9][0-9]*) ;;
- 	*)
- 	  $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2
- 	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
- 	  exit 1
- 	  ;;
- 	esac
- 
- 	case "$revision" in
- 	0 | [1-9] | [1-9][0-9]*) ;;
- 	*)
- 	  $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2
- 	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
- 	  exit 1
- 	  ;;
- 	esac
- 
- 	case "$age" in
- 	0 | [1-9] | [1-9][0-9]*) ;;
- 	*)
- 	  $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2
- 	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
- 	  exit 1
- 	  ;;
- 	esac
- 
- 	if test $age -gt $current; then
- 	  $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2
- 	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
- 	  exit 1
- 	fi
- 
- 	# Calculate the version variables.
- 	major=
- 	versuffix=
- 	verstring=
- 	case "$version_type" in
- 	none) ;;
- 
- 	irix)
- 	  major=`expr $current - $age + 1`
- 	  versuffix="$major.$revision"
- 	  verstring="sgi$major.$revision"
- 
- 	  # Add in all the interfaces that we are compatible with.
- 	  loop=$revision
- 	  while test $loop != 0; do
- 	    iface=`expr $revision - $loop`
- 	    loop=`expr $loop - 1`
- 	    verstring="sgi$major.$iface:$verstring"
- 	  done
- 	  ;;
- 
- 	linux)
- 	  major=.`expr $current - $age`
- 	  versuffix="$major.$age.$revision"
- 	  ;;
- 
- 	osf)
- 	  major=.`expr $current - $age`
- 	  versuffix=".$current.$age.$revision"
- 	  verstring="$current.$age.$revision"
- 
- 	  # Add in all the interfaces that we are compatible with.
- 	  loop=$age
- 	  while test $loop != 0; do
- 	    iface=`expr $current - $loop`
- 	    loop=`expr $loop - 1`
- 	    verstring="$verstring:${iface}.0"
- 	  done
- 
- 	  # Make executables depend on our current version.
- 	  verstring="$verstring:${current}.0"
- 	  ;;
- 
- 	sunos)
- 	  major=".$current"
- 	  versuffix=".$current.$revision"
- 	  ;;
- 
- 	freebsd-aout)
- 	  major=".$current"
- 	  versuffix=".$current.$revision";
- 	  ;;
- 
- 	freebsd-elf)
- 	  major=".$current"
- 	  versuffix=".$current";
- 	  ;;
- 
- 	windows)
- 	  # Like Linux, but with '-' rather than '.', since we only
- 	  # want one extension on Windows 95.
- 	  major=`expr $current - $age`
- 	  versuffix="-$major-$age-$revision"
- 	  ;;
- 
- 	*)
- 	  $echo "$modename: unknown library version type \`$version_type'" 1>&2
- 	  echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
- 	  exit 1
- 	  ;;
- 	esac
- 
- 	# Clear the version info if we defaulted, and they specified a release.
- 	if test -z "$vinfo" && test -n "$release"; then
- 	  major=
- 	  verstring="0.0"
- 	  if test "$need_version" = no; then
- 	    versuffix=
- 	  else
- 	    versuffix=".0.0"
- 	  fi
- 	fi
- 
- 	# Remove version info from name if versioning should be avoided
- 	if test "$avoid_version" = yes && test "$need_version" = no; then
- 	  major=
- 	  versuffix=
- 	  verstring=""
- 	fi
- 	
- 	# Check to see if the archive will have undefined symbols.
- 	if test "$allow_undefined" = yes; then
- 	  if test "$allow_undefined_flag" = unsupported; then
- 	    $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2
- 	    build_libtool_libs=no
- 	    build_old_libs=yes
- 	  fi
- 	else
- 	  # Don't allow undefined symbols.
- 	  allow_undefined_flag="$no_undefined_flag"
- 	fi
- 
- 	dependency_libs="$deplibs"
- 	case "$host" in
- 	*-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*)
- 	  # these systems don't actually have a c library (as such)!
- 	  ;;
- 	*)
- 	  # Add libc to deplibs on all other systems.
- 	  deplibs="$deplibs -lc"
- 	  ;;
- 	esac
-       fi
- 
-       # Create the output directory, or remove our outputs if we need to.
-       if test -d $output_objdir; then
- 	$show "${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*"
- 	$run ${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*
-       else
- 	$show "$mkdir $output_objdir"
- 	$run $mkdir $output_objdir
- 	status=$?
- 	if test $status -ne 0 && test ! -d $output_objdir; then
- 	  exit $status
- 	fi
-       fi
- 
-       # Now set the variables for building old libraries.
-       if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
- 	oldlibs="$oldlibs $output_objdir/$libname.$libext"
- 
- 	# Transform .lo files to .o files.
- 	oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
-       fi
- 
-       if test "$build_libtool_libs" = yes; then
- 	# Transform deplibs into only deplibs that can be linked in shared.
- 	name_save=$name
- 	libname_save=$libname
- 	release_save=$release
- 	versuffix_save=$versuffix
- 	major_save=$major
- 	# I'm not sure if I'm treating the release correctly.  I think
- 	# release should show up in the -l (ie -lgmp5) so we don't want to
- 	# add it in twice.  Is that correct?
- 	release=""
- 	versuffix=""
- 	major=""
- 	newdeplibs=
- 	droppeddeps=no
- 	case "$deplibs_check_method" in
- 	pass_all)
- 	  # Don't check for shared/static.  Everything works.
- 	  # This might be a little naive.  We might want to check
- 	  # whether the library exists or not.  But this is on
- 	  # osf3 & osf4 and I'm not really sure... Just
- 	  # implementing what was already the behaviour.
- 	  newdeplibs=$deplibs
- 	  ;;
- 	test_compile)
- 	  # This code stresses the "libraries are programs" paradigm to its
- 	  # limits. Maybe even breaks it.  We compile a program, linking it
- 	  # against the deplibs as a proxy for the library.  Then we can check
- 	  # whether they linked in statically or dynamically with ldd.
- 	  $rm conftest.c
- 	  cat > conftest.c <<EOF
- 	  int main() { return 0; }
- EOF
- 	  $rm conftest
- 	  $CC -o conftest conftest.c $deplibs
- 	  if test $? -eq 0 ; then
- 	    ldd_output=`ldd conftest`
- 	    for i in $deplibs; do
- 	      name="`expr $i : '-l\(.*\)'`"
- 	      # If $name is empty we are operating on a -L argument.
- 	      if test "$name" != "" ; then
- 		libname=`eval \\$echo \"$libname_spec\"`
- 		deplib_matches=`eval \\$echo \"$library_names_spec\"`
- 		set dummy $deplib_matches
- 		deplib_match=$2
- 		if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
- 		  newdeplibs="$newdeplibs $i"
- 		else
- 		  droppeddeps=yes
- 		  echo
- 		  echo "*** Warning: This library needs some functionality provided by $i."
- 		  echo "*** I have the capability to make that library automatically link in when"
- 		  echo "*** you link to this library.  But I can only do this if you have a"
- 		  echo "*** shared version of the library, which you do not appear to have."
- 		fi
- 	      else
- 		newdeplibs="$newdeplibs $i"
- 	      fi
- 	    done
- 	  else
- 	    # Error occured in the first compile.  Let's try to salvage the situation:
- 	    # Compile a seperate program for each library.
- 	    for i in $deplibs; do
- 	      name="`expr $i : '-l\(.*\)'`"
- 	     # If $name is empty we are operating on a -L argument.
- 	      if test "$name" != "" ; then
- 		$rm conftest
- 		$CC -o conftest conftest.c $i
- 		# Did it work?
- 		if test $? -eq 0 ; then
- 		  ldd_output=`ldd conftest`
- 		  libname=`eval \\$echo \"$libname_spec\"`
- 		  deplib_matches=`eval \\$echo \"$library_names_spec\"`
- 		  set dummy $deplib_matches
- 		  deplib_match=$2
- 		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
- 		    newdeplibs="$newdeplibs $i"
- 		  else
- 		    droppeddeps=yes
- 		    echo
- 		    echo "*** Warning: This library needs some functionality provided by $i."
- 		    echo "*** I have the capability to make that library automatically link in when"
- 		    echo "*** you link to this library.  But I can only do this if you have a"
- 		    echo "*** shared version of the library, which you do not appear to have."
- 		  fi
- 		else
- 		  droppeddeps=yes
- 		  echo
- 		  echo "*** Warning!  Library $i is needed by this library but I was not able to"
- 		  echo "***  make it link in!  You will probably need to install it or some"
- 		  echo "*** library that it depends on before this library will be fully"
- 		  echo "*** functional.  Installing it before continuing would be even better."
- 		fi
- 	      else
- 		newdeplibs="$newdeplibs $i"
- 	      fi
- 	    done
- 	  fi
- 	  ;;
- 	file_magic*)
- 	  set dummy $deplibs_check_method
- 	  file_magic_regex="`expr \"$deplibs_check_method\" : \"$2 \(.*\)\"`"
- 	  for a_deplib in $deplibs; do
- 	    name="`expr $a_deplib : '-l\(.*\)'`"
- 	    # If $name is empty we are operating on a -L argument.
- 	    if test "$name" != "" ; then
- 	      libname=`eval \\$echo \"$libname_spec\"`
- 	      for i in $lib_search_path; do
- 		    potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
- 		    for potent_lib in $potential_libs; do
- 		      # Follow soft links.
- 		      if ls -lLd "$potent_lib" 2>/dev/null \
- 			 | grep " -> " >/dev/null; then
- 			continue 
- 		      fi
- 		      # The statement above tries to avoid entering an
- 		      # endless loop below, in case of cyclic links.
- 		      # We might still enter an endless loop, since a link
- 		      # loop can be closed while we follow links,
- 		      # but so what?
- 		      potlib="$potent_lib"
- 		      while test -h "$potlib" 2>/dev/null; do
- 			potliblink=`ls -ld $potlib | sed 's/.* -> //'`
- 			case "$potliblink" in
- 			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
- 			*) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
- 			esac
- 		      done
- 		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \
- 			 | sed 10q \
- 			 | egrep "$file_magic_regex" > /dev/null; then
- 			newdeplibs="$newdeplibs $a_deplib"
- 			a_deplib=""
- 			break 2
- 		      fi
- 		    done
- 	      done
- 	      if test -n "$a_deplib" ; then
- 		droppeddeps=yes
- 		echo
- 		echo "*** Warning: This library needs some functionality provided by $a_deplib."
- 		echo "*** I have the capability to make that library automatically link in when"
- 		echo "*** you link to this library.  But I can only do this if you have a"
- 		echo "*** shared version of the library, which you do not appear to have."
- 	      fi
- 	    else
- 	      # Add a -L argument.
- 	      newdeplibs="$newdeplibs $a_deplib"
- 	    fi
- 	  done # Gone through all deplibs.
- 	  ;;
- 	none | unknown | *)
- 	  newdeplibs=""
- 	  if $echo "X $deplibs" | $Xsed -e 's/ -lc$//' \
- 	       -e 's/ -[LR][^ ]*//g' -e 's/[ 	]//g' |
- 	     grep . >/dev/null; then
- 	    echo
- 	    if test "X$deplibs_check_method" = "Xnone"; then
- 	      echo "*** Warning: inter-library dependencies are not supported in this platform."
- 	    else
- 	      echo "*** Warning: inter-library dependencies are not known to be supported."
- 	    fi
- 	    echo "*** All declared inter-library dependencies are being dropped."
- 	    droppeddeps=yes
- 	  fi
- 	  ;;
- 	esac
- 	versuffix=$versuffix_save
- 	major=$major_save
- 	release=$release_save
- 	libname=$libname_save
- 	name=$name_save
- 
- 	if test "$droppeddeps" = yes; then
- 	  if test "$module" = yes; then
- 	    echo
- 	    echo "*** Warning: libtool could not satisfy all declared inter-library"
- 	    echo "*** dependencies of module $libname.  Therefore, libtool will create"
- 	    echo "*** a static module, that should work as long as the dlopening"
- 	    echo "*** application is linked with the -dlopen flag."
- 	    if test -z "$global_symbol_pipe"; then
- 	      echo
- 	      echo "*** However, this would only work if libtool was able to extract symbol"
- 	      echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
- 	      echo "*** not find such a program.  So, this module is probably useless."
- 	      echo "*** \`nm' from GNU binutils and a full rebuild may help."
- 	    fi
- 	    if test "$build_old_libs" = no; then
- 	      oldlibs="$output_objdir/$libname.$libext"
- 	      build_libtool_libs=module
- 	      build_old_libs=yes
- 	    else
- 	      build_libtool_libs=no
- 	    fi
- 	  else
- 	    echo "*** The inter-library dependencies that have been dropped here will be"
- 	    echo "*** automatically added whenever a program is linked with this library"
- 	    echo "*** or is declared to -dlopen it."
- 	  fi
- 	fi
- 	# Done checking deplibs!
- 	deplibs=$newdeplibs
-       fi
- 
-       # All the library-specific variables (install_libdir is set above).
-       library_names=
-       old_library=
-       dlname=
-       
-       # Test again, we may have decided not to build it any more
-       if test "$build_libtool_libs" = yes; then
- 	# Get the real and link names of the library.
- 	eval library_names=\"$library_names_spec\"
- 	set dummy $library_names
- 	realname="$2"
- 	shift; shift
- 
- 	if test -n "$soname_spec"; then
- 	  eval soname=\"$soname_spec\"
- 	else
- 	  soname="$realname"
- 	fi
- 
- 	lib="$output_objdir/$realname"
- 	for link
- 	do
- 	  linknames="$linknames $link"
- 	done
- 
- 	# Ensure that we have .o objects for linkers which dislike .lo
- 	# (e.g. aix) in case we are running --disable-static
- 	for obj in $libobjs; do
- 	  xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
- 	  if test "X$xdir" = "X$obj"; then
- 	    xdir="."
- 	  else
- 	    xdir="$xdir"
- 	  fi
- 	  baseobj=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
- 	  oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"`
- 	  if test ! -f $xdir/$oldobj; then
- 	    $show "(cd $xdir && ${LN_S} $baseobj $oldobj)"
- 	    $run eval '(cd $xdir && ${LN_S} $baseobj $oldobj)' || exit $?
- 	  fi
- 	done
- 
- 	# Use standard objects if they are pic
- 	test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
- 
- 	# Prepare the list of exported symbols
- 	if test -z "$export_symbols"; then
- 	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
- 	    $show "generating symbol list for \`$libname.la'"
- 	    export_symbols="$output_objdir/$libname.exp"
- 	    $run $rm $export_symbols
- 	    eval cmds=\"$export_symbols_cmds\"
- 	    IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
- 	    for cmd in $cmds; do
- 	      IFS="$save_ifs"
- 	      $show "$cmd"
- 	      $run eval "$cmd" || exit $?
- 	    done
- 	    IFS="$save_ifs"
- 	    if test -n "$export_symbols_regex"; then
- 	      $show "egrep -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\""
- 	      $run eval 'egrep -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
- 	      $show "$mv \"${export_symbols}T\" \"$export_symbols\""
- 	      $run eval '$mv "${export_symbols}T" "$export_symbols"'
- 	    fi
- 	  fi
- 	fi
- 
- 	if test -n "$export_symbols" && test -n "$include_expsyms"; then
- 	  $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"'
- 	fi
- 
- 	if test -n "$convenience"; then
- 	  if test -n "$whole_archive_flag_spec"; then
- 	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
- 	  else
- 	    gentop="$output_objdir/${outputname}x"
- 	    $show "${rm}r $gentop"
- 	    $run ${rm}r "$gentop"
- 	    $show "mkdir $gentop"
- 	    $run mkdir "$gentop"
- 	    status=$?
- 	    if test $status -ne 0 && test ! -d "$gentop"; then
- 	      exit $status
- 	    fi
- 	    generated="$generated $gentop"
- 
- 	    for xlib in $convenience; do
- 	      # Extract the objects.
- 	      case "$xlib" in
- 	      [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
- 	      *) xabs=`pwd`"/$xlib" ;;
- 	      esac
- 	      xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
- 	      xdir="$gentop/$xlib"
- 
- 	      $show "${rm}r $xdir"
- 	      $run ${rm}r "$xdir"
- 	      $show "mkdir $xdir"
- 	      $run mkdir "$xdir"
- 	      status=$?
- 	      if test $status -ne 0 && test ! -d "$xdir"; then
- 		exit $status
- 	      fi
- 	      $show "(cd $xdir && $AR x $xabs)"
- 	      $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
- 
- 	      libobjs="$libobjs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP`
- 	    done
- 	  fi
- 	fi
- 
- 	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
- 	  eval flag=\"$thread_safe_flag_spec\"
- 	  linkopts="$linkopts $flag"
- 	fi
- 
- 	# Do each of the archive commands.
- 	if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
- 	  eval cmds=\"$archive_expsym_cmds\"
- 	else
- 	  eval cmds=\"$archive_cmds\"
- 	fi
- 	IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
- 	for cmd in $cmds; do
- 	  IFS="$save_ifs"
- 	  $show "$cmd"
- 	  $run eval "$cmd" || exit $?
- 	done
- 	IFS="$save_ifs"
- 
- 	# Create links to the real library.
- 	for linkname in $linknames; do
- 	  if test "$realname" != "$linkname"; then
- 	    $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)"
- 	    $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $?
- 	  fi
- 	done
- 
- 	# If -module or -export-dynamic was specified, set the dlname.
- 	if test "$module" = yes || test "$export_dynamic" = yes; then
- 	  # On all known operating systems, these are identical.
- 	  dlname="$soname"
- 	fi
-       fi
-       ;;
- 
-     *.lo | *.o | *.obj)
-       if test -n "$link_against_libtool_libs"; then
- 	$echo "$modename: error: cannot link libtool libraries into objects" 1>&2
- 	exit 1
-       fi
- 
-       if test -n "$deplibs"; then
- 	$echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2
-       fi
- 
-       if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
- 	$echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2
-       fi
- 
-       if test -n "$rpath"; then
- 	$echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2
-       fi
- 
-       if test -n "$xrpath"; then
- 	$echo "$modename: warning: \`-R' is ignored for objects" 1>&2
-       fi
- 
-       if test -n "$vinfo"; then
- 	$echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2
-       fi
- 
-       if test -n "$release"; then
- 	$echo "$modename: warning: \`-release' is ignored for objects" 1>&2
-       fi
- 
-       case "$output" in
-       *.lo)
- 	if test -n "$objs"; then
- 	  $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2
- 	  exit 1
- 	fi
- 	libobj="$output"
- 	obj=`$echo "X$output" | $Xsed -e "$lo2o"`
- 	;;
-       *)
- 	libobj=
- 	obj="$output"
- 	;;
-       esac
- 
-       # Delete the old objects.
-       $run $rm $obj $libobj
- 
-       # Objects from convenience libraries.  This assumes
-       # single-version convenience libraries.  Whenever we create
-       # different ones for PIC/non-PIC, this we'll have to duplicate
-       # the extraction.
-       reload_conv_objs=
-       gentop=
-       # reload_cmds runs $LD directly, so let us get rid of
-       # -Wl from whole_archive_flag_spec
-       wl= 
- 
-       if test -n "$convenience"; then
- 	if test -n "$whole_archive_flag_spec"; then
- 	  eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\"
- 	else
- 	  gentop="$output_objdir/${obj}x"
- 	  $show "${rm}r $gentop"
- 	  $run ${rm}r "$gentop"
- 	  $show "mkdir $gentop"
- 	  $run mkdir "$gentop"
- 	  status=$?
- 	  if test $status -ne 0 && test ! -d "$gentop"; then
- 	    exit $status
- 	  fi
- 	  generated="$generated $gentop"
- 
- 	  for xlib in $convenience; do
- 	    # Extract the objects.
- 	    case "$xlib" in
- 	    [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
- 	    *) xabs=`pwd`"/$xlib" ;;
- 	    esac
- 	    xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
- 	    xdir="$gentop/$xlib"
- 
- 	    $show "${rm}r $xdir"
- 	    $run ${rm}r "$xdir"
- 	    $show "mkdir $xdir"
- 	    $run mkdir "$xdir"
- 	    status=$?
- 	    if test $status -ne 0 && test ! -d "$xdir"; then
- 	      exit $status
- 	    fi
- 	    $show "(cd $xdir && $AR x $xabs)"
- 	    $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
- 
- 	    reload_conv_objs="$reload_objs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP`
- 	  done
- 	fi
-       fi
- 
-       # Create the old-style object.
-       reload_objs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs"
- 
-       output="$obj"
-       eval cmds=\"$reload_cmds\"
-       IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
-       for cmd in $cmds; do
- 	IFS="$save_ifs"
- 	$show "$cmd"
- 	$run eval "$cmd" || exit $?
-       done
-       IFS="$save_ifs"
- 
-       # Exit if we aren't doing a library object file.
-       if test -z "$libobj"; then
- 	if test -n "$gentop"; then
- 	  $show "${rm}r $gentop"
- 	  $run ${rm}r $gentop
- 	fi
- 
- 	exit 0
-       fi
- 
-       if test "$build_libtool_libs" != yes; then
- 	if test -n "$gentop"; then
- 	  $show "${rm}r $gentop"
- 	  $run ${rm}r $gentop
- 	fi
- 
- 	# Create an invalid libtool object if no PIC, so that we don't
- 	# accidentally link it into a program.
- 	$show "echo timestamp > $libobj"
- 	$run eval "echo timestamp > $libobj" || exit $?
- 	exit 0
-       fi
- 
-       if test -n "$pic_flag"; then
- 	# Only do commands if we really have different PIC objects.
- 	reload_objs="$libobjs $reload_conv_objs"
- 	output="$libobj"
- 	eval cmds=\"$reload_cmds\"
- 	IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
- 	for cmd in $cmds; do
- 	  IFS="$save_ifs"
- 	  $show "$cmd"
- 	  $run eval "$cmd" || exit $?
- 	done
- 	IFS="$save_ifs"
-       else
- 	# Just create a symlink.
- 	$show $rm $libobj
- 	$run $rm $libobj
- 	xdir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'`
- 	if test "X$xdir" = "X$libobj"; then
- 	  xdir="."
- 	else
- 	  xdir="$xdir"
- 	fi
- 	baseobj=`$echo "X$libobj" | $Xsed -e 's%^.*/%%'`
- 	oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"`
- 	$show "(cd $xdir && $LN_S $oldobj $baseobj)"
- 	$run eval '(cd $xdir && $LN_S $oldobj $baseobj)' || exit $?
-       fi
- 
-       if test -n "$gentop"; then
- 	$show "${rm}r $gentop"
- 	$run ${rm}r $gentop
-       fi
- 
-       exit 0
-       ;;
- 
-     # Anything else should be a program.
-     *)
-       if test -n "$vinfo"; then
- 	$echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2
-       fi
- 
-       if test -n "$release"; then
- 	$echo "$modename: warning: \`-release' is ignored for programs" 1>&2
-       fi
- 
-       if test "$preload" = yes; then
- 	if test "$dlopen" = unknown && test "$dlopen_self" = unknown &&
- 	   test "$dlopen_self_static" = unknown; then
- 	  $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support."
- 	fi 
-       fi
-     
-       if test -n "$rpath$xrpath"; then
- 	# If the user specified any rpath flags, then add them.
- 	for libdir in $rpath $xrpath; do
- 	  # This is the magic to use -rpath.
- 	  case "$compile_rpath " in
- 	  *" $libdir "*) ;;
- 	  *) compile_rpath="$compile_rpath $libdir" ;;
- 	  esac
- 	  case "$finalize_rpath " in
- 	  *" $libdir "*) ;;
- 	  *) finalize_rpath="$finalize_rpath $libdir" ;;
- 	  esac
- 	done
-       fi
- 
-       # Now hardcode the library paths
-       rpath=
-       hardcode_libdirs=
-       for libdir in $compile_rpath $finalize_rpath; do
- 	if test -n "$hardcode_libdir_flag_spec"; then
- 	  if test -n "$hardcode_libdir_separator"; then
- 	    if test -z "$hardcode_libdirs"; then
- 	      hardcode_libdirs="$libdir"
- 	    else
- 	      # Just accumulate the unique libdirs.
- 	      case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in
- 	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
- 		;;
- 	      *)
- 		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
- 		;;
- 	      esac
- 	    fi
- 	  else
- 	    eval flag=\"$hardcode_libdir_flag_spec\"
- 	    rpath="$rpath $flag"
- 	  fi
- 	elif test -n "$runpath_var"; then
- 	  case "$perm_rpath " in
- 	  *" $libdir "*) ;;
- 	  *) perm_rpath="$perm_rpath $libdir" ;;
- 	  esac
- 	fi
-       done
-       # Substitute the hardcoded libdirs into the rpath.
-       if test -n "$hardcode_libdir_separator" &&
- 	 test -n "$hardcode_libdirs"; then
- 	libdir="$hardcode_libdirs"
- 	eval rpath=\" $hardcode_libdir_flag_spec\"
-       fi
-       compile_rpath="$rpath"
- 
-       rpath=
-       hardcode_libdirs=
-       for libdir in $finalize_rpath; do
- 	if test -n "$hardcode_libdir_flag_spec"; then
- 	  if test -n "$hardcode_libdir_separator"; then
- 	    if test -z "$hardcode_libdirs"; then
- 	      hardcode_libdirs="$libdir"
- 	    else
- 	      # Just accumulate the unique libdirs.
- 	      case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in
- 	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
- 		;;
- 	      *)
- 		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
- 		;;
- 	      esac
- 	    fi
- 	  else
- 	    eval flag=\"$hardcode_libdir_flag_spec\"
- 	    rpath="$rpath $flag"
- 	  fi
- 	elif test -n "$runpath_var"; then
- 	  case "$finalize_perm_rpath " in
- 	  *" $libdir "*) ;;
- 	  *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
- 	  esac
- 	fi
-       done
-       # Substitute the hardcoded libdirs into the rpath.
-       if test -n "$hardcode_libdir_separator" &&
- 	 test -n "$hardcode_libdirs"; then
- 	libdir="$hardcode_libdirs"
- 	eval rpath=\" $hardcode_libdir_flag_spec\"
-       fi
-       finalize_rpath="$rpath"
- 
-       output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
-       if test "X$output_objdir" = "X$output"; then
- 	output_objdir="$objdir"
-       else
- 	output_objdir="$output_objdir/$objdir"
-       fi
- 
-       # Create the binary in the object directory, then wrap it.
-       if test ! -d $output_objdir; then
- 	$show "$mkdir $output_objdir"
- 	$run $mkdir $output_objdir
- 	status=$?
- 	if test $status -ne 0 && test ! -d $output_objdir; then
- 	  exit $status
- 	fi
-       fi
- 
-       if test -n "$libobjs" && test "$build_old_libs" = yes; then
- 	# Transform all the library objects into standard objects.
- 	compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
- 	finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
-       fi
- 
-       dlsyms=
-       if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
- 	if test -n "$NM" && test -n "$global_symbol_pipe"; then
- 	  dlsyms="${outputname}S.c"
- 	else
- 	  $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2
- 	fi
-       fi
- 
-       if test -n "$dlsyms"; then
- 	case "$dlsyms" in
- 	"") ;;
- 	*.c)
- 	  # Discover the nlist of each of the dlfiles.
- 	  nlist="$output_objdir/${outputname}.nm"
- 
- 	  $show "$rm $nlist ${nlist}S ${nlist}T"
- 	  $run $rm "$nlist" "${nlist}S" "${nlist}T"
- 
- 	  # Parse the name list into a source file.
- 	  $show "creating $output_objdir/$dlsyms"
- 
- 	  test -z "$run" && $echo > "$output_objdir/$dlsyms" "\
- /* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */
- /* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */
- 
- #ifdef __cplusplus
- extern \"C\" {
- #endif
- 
- /* Prevent the only kind of declaration conflicts we can make. */
- #define lt_preloaded_symbols some_other_symbol
- 
- /* External symbol declarations for the compiler. */\
- "
- 
- 	  if test "$dlself" = yes; then
- 	    $show "generating symbol list for \`$output'"
- 
- 	    test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist"
- 
- 	    # Add our own program objects to the symbol list.
- 	    progfiles=`$echo "X$objs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
- 	    for arg in $progfiles; do
- 	      $show "extracting global C symbols from \`$arg'"
- 	      $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
- 	    done
- 
- 	    if test -n "$exclude_expsyms"; then
- 	      $run eval 'egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
- 	      $run eval '$mv "$nlist"T "$nlist"'
- 	    fi
- 	    
- 	    if test -n "$export_symbols_regex"; then
- 	      $run eval 'egrep -e "$export_symbols_regex" "$nlist" > "$nlist"T'
- 	      $run eval '$mv "$nlist"T "$nlist"'
- 	    fi
- 
- 	    # Prepare the list of exported symbols
- 	    if test -z "$export_symbols"; then
- 	      export_symbols="$output_objdir/$output.exp"
- 	      $run $rm $export_symbols
- 	      $run eval "sed -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
- 	    else
- 	      $run eval "sed -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"'
- 	      $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T'
- 	      $run eval 'mv "$nlist"T "$nlist"'
- 	    fi
- 	  fi
- 
- 	  for arg in $dlprefiles; do
- 	    $show "extracting global C symbols from \`$arg'"
- 	    name=`echo "$arg" | sed -e 's%^.*/%%'`
- 	    $run eval 'echo ": $name " >> "$nlist"'
- 	    $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
- 	  done
- 
- 	  if test -z "$run"; then
- 	    # Make sure we have at least an empty file.
- 	    test -f "$nlist" || : > "$nlist"
- 
- 	    if test -n "$exclude_expsyms"; then
- 	      egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
- 	      $mv "$nlist"T "$nlist"
- 	    fi
- 
- 	    # Try sorting and uniquifying the output.
- 	    if grep -v "^: " < "$nlist" | sort +2 | uniq > "$nlist"S; then
- 	      :
- 	    else
- 	      grep -v "^: " < "$nlist" > "$nlist"S
- 	    fi
- 
- 	    if test -f "$nlist"S; then
- 	      eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"'
- 	    else
- 	      echo '/* NONE */' >> "$output_objdir/$dlsyms"
- 	    fi
- 
- 	    $echo >> "$output_objdir/$dlsyms" "\
- 
- #undef lt_preloaded_symbols
- 
- #if defined (__STDC__) && __STDC__
- # define lt_ptr_t void *
- #else
- # define lt_ptr_t char *
- # define const
- #endif
- 
- /* The mapping between symbol names and symbols. */
- const struct {
-   const char *name;
-   lt_ptr_t address;
- }
- lt_preloaded_symbols[] =
- {\
- "
- 
- 	    sed -n -e 's/^: \([^ ]*\) $/  {\"\1\", (lt_ptr_t) 0},/p' \
- 		-e 's/^. \([^ ]*\) \([^ ]*\)$/  {"\2", (lt_ptr_t) \&\2},/p' \
- 		  < "$nlist" >> "$output_objdir/$dlsyms"
- 
- 	    $echo >> "$output_objdir/$dlsyms" "\
-   {0, (lt_ptr_t) 0}
- };
- 
- /* This works around a problem in FreeBSD linker */
- #ifdef FREEBSD_WORKAROUND
- static const void *lt_preloaded_setup() {
-   return lt_preloaded_symbols;
- }
- #endif
- 
- #ifdef __cplusplus
- }
- #endif\
- "
- 	  fi
- 
- 	  pic_flag_for_symtable=
- 	  case "$host" in
- 	  # compiling the symbol table file with pic_flag works around
- 	  # a FreeBSD bug that causes programs to crash when -lm is
- 	  # linked before any other PIC object.  But we must not use
- 	  # pic_flag when linking with -static.  The problem exists in
- 	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
- 	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
- 	    case "$compile_command " in
- 	    *" -static "*) ;;
- 	    *) pic_flag_for_symtable=" $pic_flag -DPIC -DFREEBSD_WORKAROUND";;
- 	    esac;;
- 	  *-*-hpux*)
- 	    case "$compile_command " in
- 	    *" -static "*) ;;
- 	    *) pic_flag_for_symtable=" $pic_flag -DPIC";;
- 	    esac
- 	  esac
- 
- 	  # Now compile the dynamic symbol file.
- 	  $show "(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")"
- 	  $run eval '(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $?
- 
- 	  # Clean up the generated files.
- 	  $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T"
- 	  $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T"
- 
- 	  # Transform the symbol file into the correct name.
- 	  compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
- 	  finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
- 	  ;;
- 	*)
- 	  $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2
- 	  exit 1
- 	  ;;
- 	esac
-       else
- 	# We keep going just in case the user didn't refer to
- 	# lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
- 	# really was required.
- 
- 	# Nullify the symbol file.
- 	compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
- 	finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
-       fi
- 
-       if test -z "$link_against_libtool_libs" || test "$build_libtool_libs" != yes; then
- 	# Replace the output file specification.
- 	compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
- 	link_command="$compile_command$compile_rpath"
- 
- 	# We have no uninstalled library dependencies, so finalize right now.
- 	$show "$link_command"
- 	$run eval "$link_command"
- 	status=$?
- 	
- 	# Delete the generated files.
- 	if test -n "$dlsyms"; then
- 	  $show "$rm $output_objdir/${outputname}S.${objext}"
- 	  $run $rm "$output_objdir/${outputname}S.${objext}"
- 	fi
- 
- 	exit $status
-       fi
- 
-       if test -n "$shlibpath_var"; then
- 	# We should set the shlibpath_var
- 	rpath=
- 	for dir in $temp_rpath; do
- 	  case "$dir" in
- 	  [\\/]* | [A-Za-z]:[\\/]*)
- 	    # Absolute path.
- 	    rpath="$rpath$dir:"
- 	    ;;
- 	  *)
- 	    # Relative path: add a thisdir entry.
- 	    rpath="$rpath\$thisdir/$dir:"
- 	    ;;
- 	  esac
- 	done
- 	temp_rpath="$rpath"
-       fi
- 
-       if test -n "$compile_shlibpath$finalize_shlibpath"; then
- 	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
-       fi
-       if test -n "$finalize_shlibpath"; then
- 	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
-       fi
- 
-       compile_var=
-       finalize_var=
-       if test -n "$runpath_var"; then
- 	if test -n "$perm_rpath"; then
- 	  # We should set the runpath_var.
- 	  rpath=
- 	  for dir in $perm_rpath; do
- 	    rpath="$rpath$dir:"
- 	  done
- 	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
- 	fi
- 	if test -n "$finalize_perm_rpath"; then
- 	  # We should set the runpath_var.
- 	  rpath=
- 	  for dir in $finalize_perm_rpath; do
- 	    rpath="$rpath$dir:"
- 	  done
- 	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
- 	fi
-       fi
- 
-       if test "$hardcode_action" = relink; then
- 	# Fast installation is not supported
- 	link_command="$compile_var$compile_command$compile_rpath"
- 	relink_command="$finalize_var$finalize_command$finalize_rpath"
- 	
- 	$echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2
- 	$echo "$modename: \`$output' will be relinked during installation" 1>&2
-       else
- 	if test "$fast_install" != no; then
- 	  link_command="$finalize_var$compile_command$finalize_rpath"
- 	  if test "$fast_install" = yes; then
- 	    relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
- 	  else
- 	    # fast_install is set to needless
- 	    relink_command=
- 	  fi
- 	else
- 	  link_command="$compile_var$compile_command$compile_rpath"
- 	  relink_command="$finalize_var$finalize_command$finalize_rpath"
- 	fi
-       fi
- 
-       # Replace the output file specification.
-       link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
-       
-       # Delete the old output files.
-       $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname
- 
-       $show "$link_command"
-       $run eval "$link_command" || exit $?
- 
-       # Now create the wrapper script.
-       $show "creating $output"
- 
-       # Quote the relink command for shipping.
-       if test -n "$relink_command"; then
- 	relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
-       fi
- 
-       # Quote $echo for shipping.
-       if test "X$echo" = "X$SHELL $0 --fallback-echo"; then
- 	case "$0" in
- 	[\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";;
- 	*) qecho="$SHELL `pwd`/$0 --fallback-echo";;
- 	esac
- 	qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"`
-       else
- 	qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"`
-       fi
- 
-       # Only actually do things if our run command is non-null.
-       if test -z "$run"; then
- 	# win32 will think the script is a binary if it has
- 	# a .exe suffix, so we strip it off here.
- 	case $output in
- 	  *.exe) output=`echo $output|sed 's,.exe$,,'` ;;
- 	esac
- 	$rm $output
- 	trap "$rm $output; exit 1" 1 2 15
- 
- 	$echo > $output "\
- #! $SHELL
- 
- # $output - temporary wrapper script for $objdir/$outputname
- # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
- #
- # The $output program cannot be directly executed until all the libtool
- # libraries that it depends on are installed.
- #
- # This wrapper script should never be moved out of the build directory.
- # If it is, it will not operate correctly.
- 
- # Sed substitution that helps us do robust quoting.  It backslashifies
- # metacharacters that are still active within double-quoted strings.
- Xsed='sed -e 1s/^X//'
- sed_quote_subst='$sed_quote_subst'
- 
- # The HP-UX ksh and POSIX shell print the target directory to stdout
- # if CDPATH is set.
- if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi
- 
- relink_command=\"$relink_command\"
- 
- # This environment variable determines our operation mode.
- if test \"\$libtool_install_magic\" = \"$magic\"; then
-   # install mode needs the following variable:
-   link_against_libtool_libs='$link_against_libtool_libs'
- else
-   # When we are sourced in execute mode, \$file and \$echo are already set.
-   if test \"\$libtool_execute_magic\" != \"$magic\"; then
-     echo=\"$qecho\"
-     file=\"\$0\"
-     # Make sure echo works.
-     if test \"X\$1\" = X--no-reexec; then
-       # Discard the --no-reexec flag, and continue.
-       shift
-     elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then
-       # Yippee, \$echo works!
-       :
-     else
-       # Restart under the correct shell, and then maybe \$echo will work.
-       exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
-     fi
-   fi\
- "
- 	$echo >> $output "\
- 
-   # Find the directory that this script lives in.
-   thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
-   test \"x\$thisdir\" = \"x\$file\" && thisdir=.
- 
-   # Follow symbolic links until we get to the real thisdir.
-   file=\`ls -ld \"\$file\" | sed -n 's/.*-> //p'\`
-   while test -n \"\$file\"; do
-     destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
- 
-     # If there was a directory component, then change thisdir.
-     if test \"x\$destdir\" != \"x\$file\"; then
-       case \"\$destdir\" in
-       [\\/]* | [A-Za-z]:[\\/]*) thisdir=\"\$destdir\" ;;
-       *) thisdir=\"\$thisdir/\$destdir\" ;;
-       esac
-     fi
- 
-     file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
-     file=\`ls -ld \"\$thisdir/\$file\" | sed -n 's/.*-> //p'\`
-   done
- 
-   # Try to get the absolute directory name.
-   absdir=\`cd \"\$thisdir\" && pwd\`
-   test -n \"\$absdir\" && thisdir=\"\$absdir\"
- "
- 
- 	if test "$fast_install" = yes; then
- 	  echo >> $output "\
-   program=lt-'$outputname'
-   progdir=\"\$thisdir/$objdir\"
-   
-   if test ! -f \"\$progdir/\$program\" || \\
-      { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | sed 1q\`; \\
-        test \"X\$file\" != \"X\$progdir/\$program\"; }; then
- 
-     file=\"\$\$-\$program\"
- 
-     if test ! -d \"\$progdir\"; then
-       $mkdir \"\$progdir\"
-     else
-       $rm \"\$progdir/\$file\"
-     fi"
- 
- 	  echo >> $output "\
- 
-     # relink executable if necessary
-     if test -n \"\$relink_command\"; then
-       if (cd \"\$thisdir\" && eval \$relink_command); then :
-       else
- 	$rm \"\$progdir/\$file\"
- 	exit 1
-       fi
-     fi
- 
-     $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
-     { $rm \"\$progdir/\$program\";
-       $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; }
-     $rm \"\$progdir/\$file\"
-   fi"
- 	else
- 	  echo >> $output "\
-   program='$outputname'
-   progdir=\"\$thisdir/$objdir\"
- "
- 	fi
- 
- 	echo >> $output "\
- 
-   if test -f \"\$progdir/\$program\"; then"
- 
- 	# Export our shlibpath_var if we have one.
- 	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
- 	  $echo >> $output "\
-     # Add our own library path to $shlibpath_var
-     $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
- 
-     # Some systems cannot cope with colon-terminated $shlibpath_var
-     # The second colon is a workaround for a bug in BeOS R4 sed
-     $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
- 
-     export $shlibpath_var
- "
- 	fi
- 
- 	# fixup the dll searchpath if we need to.
- 	if test -n "$dllsearchpath"; then
- 	  $echo >> $output "\
-     # Add the dll search path components to the executable PATH
-     PATH=$dllsearchpath:\$PATH
- "
- 	fi
- 
- 	$echo >> $output "\
-     if test \"\$libtool_execute_magic\" != \"$magic\"; then
-       # Run the actual program with our arguments.
- "
- 	case $host in
- 	*-*-cygwin* | *-*-mingw | *-*-os2*)
- 	  # win32 systems need to use the prog path for dll
- 	  # lookup to work
- 	  $echo >> $output "\
-       exec \$progdir\\\\\$program \${1+\"\$@\"}
- "
- 	  ;;
- 	*)
- 	  $echo >> $output "\
-       # Export the path to the program.
-       PATH=\"\$progdir:\$PATH\"
-       export PATH
- 
-       exec \$program \${1+\"\$@\"}
- "
- 	  ;;
- 	esac
- 	$echo >> $output "\
-       \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\"
-       exit 1
-     fi
-   else
-     # The program doesn't exist.
-     \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2
-     \$echo \"This script is just a wrapper for \$program.\" 1>&2
-     echo \"See the $PACKAGE documentation for more information.\" 1>&2
-     exit 1
-   fi
- fi\
- "
- 	chmod +x $output
-       fi
-       exit 0
-       ;;
-     esac
- 
-     # See if we need to build an old-fashioned archive.
-     for oldlib in $oldlibs; do
- 
-       if test "$build_libtool_libs" = convenience; then
- 	oldobjs="$libobjs_save"
- 	addlibs="$convenience"
- 	build_libtool_libs=no
-       else
- 	if test "$build_libtool_libs" = module; then
- 	  oldobjs="$libobjs_save"
- 	  build_libtool_libs=no
- 	else
- 	  oldobjs="$objs "`$echo "X$libobjs_save" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`
- 	fi
- 	addlibs="$old_convenience"
-       fi
- 
-       if test -n "$addlibs"; then
- 	gentop="$output_objdir/${outputname}x"
- 	$show "${rm}r $gentop"
- 	$run ${rm}r "$gentop"
- 	$show "mkdir $gentop"
- 	$run mkdir "$gentop"
- 	status=$?
- 	if test $status -ne 0 && test ! -d "$gentop"; then
- 	  exit $status
- 	fi
- 	generated="$generated $gentop"
- 	  
- 	# Add in members from convenience archives.
- 	for xlib in $addlibs; do
- 	  # Extract the objects.
- 	  case "$xlib" in
- 	  [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
- 	  *) xabs=`pwd`"/$xlib" ;;
- 	  esac
- 	  xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
- 	  xdir="$gentop/$xlib"
- 
- 	  $show "${rm}r $xdir"
- 	  $run ${rm}r "$xdir"
- 	  $show "mkdir $xdir"
- 	  $run mkdir "$xdir"
- 	  status=$?
- 	  if test $status -ne 0 && test ! -d "$xdir"; then
- 	    exit $status
- 	  fi
- 	  $show "(cd $xdir && $AR x $xabs)"
- 	  $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
- 
- 	  oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP`
- 	done
-       fi
- 
-       # Do each command in the archive commands.
-       if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
- 	eval cmds=\"$old_archive_from_new_cmds\"
-       else
- 	# Ensure that we have .o objects in place in case we decided
- 	# not to build a shared library, and have fallen back to building
- 	# static libs even though --disable-static was passed!
- 	for oldobj in $oldobjs; do
- 	  if test ! -f $oldobj; then
- 	    xdir=`$echo "X$oldobj" | $Xsed -e 's%/[^/]*$%%'`
- 	    if test "X$xdir" = "X$oldobj"; then
- 	      xdir="."
- 	    else
- 	      xdir="$xdir"
- 	    fi
- 	    baseobj=`$echo "X$oldobj" | $Xsed -e 's%^.*/%%'`
- 	    obj=`$echo "X$baseobj" | $Xsed -e "$o2lo"`
- 	    $show "(cd $xdir && ${LN_S} $obj $baseobj)"
- 	    $run eval '(cd $xdir && ${LN_S} $obj $baseobj)' || exit $?
- 	  fi
- 	done
- 
- 	eval cmds=\"$old_archive_cmds\"
-       fi
-       IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
-       for cmd in $cmds; do
- 	IFS="$save_ifs"
- 	$show "$cmd"
- 	$run eval "$cmd" || exit $?
-       done
-       IFS="$save_ifs"
-     done
- 
-     if test -n "$generated"; then
-       $show "${rm}r$generated"
-       $run ${rm}r$generated
-     fi
- 
-     # Now create the libtool archive.
-     case "$output" in
-     *.la)
-       old_library=
-       test "$build_old_libs" = yes && old_library="$libname.$libext"
-       $show "creating $output"
- 
-       if test -n "$xrpath"; then
- 	temp_xrpath=
- 	for libdir in $xrpath; do
- 	  temp_xrpath="$temp_xrpath -R$libdir"
- 	done
- 	dependency_libs="$temp_xrpath $dependency_libs"
-       fi
- 
-       # Only create the output if not a dry run.
-       if test -z "$run"; then
- 	for installed in no yes; do
- 	  if test "$installed" = yes; then
- 	    if test -z "$install_libdir"; then
- 	      break
- 	    fi
- 	    output="$output_objdir/$outputname"i
- 	  fi
- 	  $rm $output
- 	  $echo > $output "\
- # $outputname - a libtool library file
- # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
- #
- # Please DO NOT delete this file!
- # It is necessary for linking the library.
- 
- # The name that we can dlopen(3).
- dlname='$dlname'
- 
- # Names of this library.
- library_names='$library_names'
- 
- # The name of the static archive.
- old_library='$old_library'
- 
- # Libraries that this one depends upon.
- dependency_libs='$dependency_libs'
- 
- # Version information for $libname.
- current=$current
- age=$age
- revision=$revision
- 
- # Is this an already installed library?
- installed=$installed
- 
- # Directory that this library needs to be installed in:
- libdir='$install_libdir'\
- "
- 	done
-       fi
- 
-       # Do a symbolic link so that the libtool archive can be found in
-       # LD_LIBRARY_PATH before the program is installed.
-       $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)"
-       $run eval "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" || exit $?
-       ;;
-     esac
-     exit 0
-     ;;
- 
-   # libtool install mode
-   install)
-     modename="$modename: install"
- 
-     # There may be an optional sh(1) argument at the beginning of
-     # install_prog (especially on Windows NT).
-     if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh; then
-       # Aesthetically quote it.
-       arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"`
-       case "$arg" in
-       *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
- 	arg="\"$arg\""
- 	;;
-       esac
-       install_prog="$arg "
-       arg="$1"
-       shift
-     else
-       install_prog=
-       arg="$nonopt"
-     fi
- 
-     # The real first argument should be the name of the installation program.
-     # Aesthetically quote it.
-     arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
-     case "$arg" in
-     *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
-       arg="\"$arg\""
-       ;;
-     esac
-     install_prog="$install_prog$arg"
- 
-     # We need to accept at least all the BSD install flags.
-     dest=
-     files=
-     opts=
-     prev=
-     install_type=
-     isdir=no
-     stripme=
-     for arg
-     do
-       if test -n "$dest"; then
- 	files="$files $dest"
- 	dest="$arg"
- 	continue
-       fi
- 
-       case "$arg" in
-       -d) isdir=yes ;;
-       -f) prev="-f" ;;
-       -g) prev="-g" ;;
-       -m) prev="-m" ;;
-       -o) prev="-o" ;;
-       -s)
- 	stripme=" -s"
- 	continue
- 	;;
-       -*) ;;
- 
-       *)
- 	# If the previous option needed an argument, then skip it.
- 	if test -n "$prev"; then
- 	  prev=
- 	else
- 	  dest="$arg"
- 	  continue
- 	fi
- 	;;
-       esac
- 
-       # Aesthetically quote the argument.
-       arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
-       case "$arg" in
-       *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
- 	arg="\"$arg\""
- 	;;
-       esac
-       install_prog="$install_prog $arg"
-     done
- 
-     if test -z "$install_prog"; then
-       $echo "$modename: you must specify an install program" 1>&2
-       $echo "$help" 1>&2
-       exit 1
-     fi
- 
-     if test -n "$prev"; then
-       $echo "$modename: the \`$prev' option requires an argument" 1>&2
-       $echo "$help" 1>&2
-       exit 1
-     fi
- 
-     if test -z "$files"; then
-       if test -z "$dest"; then
- 	$echo "$modename: no file or destination specified" 1>&2
-       else
- 	$echo "$modename: you must specify a destination" 1>&2
-       fi
-       $echo "$help" 1>&2
-       exit 1
-     fi
- 
-     # Strip any trailing slash from the destination.
-     dest=`$echo "X$dest" | $Xsed -e 's%/$%%'`
- 
-     # Check to see that the destination is a directory.
-     test -d "$dest" && isdir=yes
-     if test "$isdir" = yes; then
-       destdir="$dest"
-       destname=
-     else
-       destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'`
-       test "X$destdir" = "X$dest" && destdir=.
-       destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'`
- 
-       # Not a directory, so check to see that there is only one file specified.
-       set dummy $files
-       if test $# -gt 2; then
- 	$echo "$modename: \`$dest' is not a directory" 1>&2
- 	$echo "$help" 1>&2
- 	exit 1
-       fi
-     fi
-     case "$destdir" in
-     [\\/]* | [A-Za-z]:[\\/]*) ;;
-     *)
-       for file in $files; do
- 	case "$file" in
- 	*.lo) ;;
- 	*)
- 	  $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2
- 	  $echo "$help" 1>&2
- 	  exit 1
- 	  ;;
- 	esac
-       done
-       ;;
-     esac
- 
-     # This variable tells wrapper scripts just to set variables rather
-     # than running their programs.
-     libtool_install_magic="$magic"
- 
-     staticlibs=
-     future_libdirs=
-     current_libdirs=
-     for file in $files; do
- 
-       # Do each installation.
-       case "$file" in
-       *.a | *.lib)
- 	# Do the static libraries later.
- 	staticlibs="$staticlibs $file"
- 	;;
- 
-       *.la)
- 	# Check to see that this really is a libtool archive.
- 	if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
- 	else
- 	  $echo "$modename: \`$file' is not a valid libtool archive" 1>&2
- 	  $echo "$help" 1>&2
- 	  exit 1
- 	fi
- 
- 	library_names=
- 	old_library=
- 	# If there is no directory component, then add one.
- 	case "$file" in
- 	*/* | *\\*) . $file ;;
- 	*) . ./$file ;;
- 	esac
- 
- 	# Add the libdir to current_libdirs if it is the destination.
- 	if test "X$destdir" = "X$libdir"; then
- 	  case "$current_libdirs " in
- 	  *" $libdir "*) ;;
- 	  *) current_libdirs="$current_libdirs $libdir" ;;
- 	  esac
- 	else
- 	  # Note the libdir as a future libdir.
- 	  case "$future_libdirs " in
- 	  *" $libdir "*) ;;
- 	  *) future_libdirs="$future_libdirs $libdir" ;;
- 	  esac
- 	fi
- 
- 	dir="`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/"
- 	test "X$dir" = "X$file/" && dir=
- 	dir="$dir$objdir"
- 
- 	# See the names of the shared library.
- 	set dummy $library_names
- 	if test -n "$2"; then
- 	  realname="$2"
- 	  shift
- 	  shift
- 
- 	  # Install the shared library and build the symlinks.
- 	  $show "$install_prog $dir/$realname $destdir/$realname"
- 	  $run eval "$install_prog $dir/$realname $destdir/$realname" || exit $?
- 
- 	  if test $# -gt 0; then
- 	    # Delete the old symlinks, and create new ones.
- 	    for linkname
- 	    do
- 	      if test "$linkname" != "$realname"; then
- 		$show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
- 		$run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
- 	      fi
- 	    done
- 	  fi
- 
- 	  # Do each command in the postinstall commands.
- 	  lib="$destdir/$realname"
- 	  eval cmds=\"$postinstall_cmds\"
- 	  IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
- 	  for cmd in $cmds; do
- 	    IFS="$save_ifs"
- 	    $show "$cmd"
- 	    $run eval "$cmd" || exit $?
- 	  done
- 	  IFS="$save_ifs"
- 	fi
- 
- 	# Install the pseudo-library for information purposes.
- 	name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
- 	instname="$dir/$name"i
- 	$show "$install_prog $instname $destdir/$name"
- 	$run eval "$install_prog $instname $destdir/$name" || exit $?
- 
- 	# Maybe install the static library, too.
- 	test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
- 	;;
- 
-       *.lo)
- 	# Install (i.e. copy) a libtool object.
- 
- 	# Figure out destination file name, if it wasn't already specified.
- 	if test -n "$destname"; then
- 	  destfile="$destdir/$destname"
- 	else
- 	  destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
- 	  destfile="$destdir/$destfile"
- 	fi
- 
- 	# Deduce the name of the destination old-style object file.
- 	case "$destfile" in
- 	*.lo)
- 	  staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"`
- 	  ;;
- 	*.o | *.obj)
- 	  staticdest="$destfile"
- 	  destfile=
- 	  ;;
- 	*)
- 	  $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2
- 	  $echo "$help" 1>&2
- 	  exit 1
- 	  ;;
- 	esac
- 
- 	# Install the libtool object if requested.
- 	if test -n "$destfile"; then
- 	  $show "$install_prog $file $destfile"
- 	  $run eval "$install_prog $file $destfile" || exit $?
- 	fi
- 
- 	# Install the old object if enabled.
- 	if test "$build_old_libs" = yes; then
- 	  # Deduce the name of the old-style object file.
- 	  staticobj=`$echo "X$file" | $Xsed -e "$lo2o"`
- 
- 	  $show "$install_prog $staticobj $staticdest"
- 	  $run eval "$install_prog \$staticobj \$staticdest" || exit $?
- 	fi
- 	exit 0
- 	;;
- 
-       *)
- 	# Figure out destination file name, if it wasn't already specified.
- 	if test -n "$destname"; then
- 	  destfile="$destdir/$destname"
- 	else
- 	  destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
- 	  destfile="$destdir/$destfile"
- 	fi
- 
- 	# Do a test to see if this is really a libtool program.
- 	if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
- 	  link_against_libtool_libs=
- 	  relink_command=
- 
- 	  # If there is no directory component, then add one.
- 	  case "$file" in
- 	  */* | *\\*) . $file ;;
- 	  *) . ./$file ;;
- 	  esac
- 
- 	  # Check the variables that should have been set.
- 	  if test -z "$link_against_libtool_libs"; then
- 	    $echo "$modename: invalid libtool wrapper script \`$file'" 1>&2
- 	    exit 1
- 	  fi
- 
- 	  finalize=yes
- 	  for lib in $link_against_libtool_libs; do
- 	    # Check to see that each library is installed.
- 	    libdir=
- 	    if test -f "$lib"; then
- 	      # If there is no directory component, then add one.
- 	      case "$lib" in
- 	      */* | *\\*) . $lib ;;
- 	      *) . ./$lib ;;
- 	      esac
- 	    fi
- 	    libfile="$libdir/`$echo "X$lib" | $Xsed -e 's%^.*/%%g'`"
- 	    if test -n "$libdir" && test ! -f "$libfile"; then
- 	      $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2
- 	      finalize=no
- 	    fi
- 	  done
- 
- 	  outputname=
- 	  if test "$fast_install" = no && test -n "$relink_command"; then
- 	    if test "$finalize" = yes && test -z "$run"; then
- 	      tmpdir="/tmp"
- 	      test -n "$TMPDIR" && tmpdir="$TMPDIR"
- 	      tmpdir="$tmpdir/libtool-$$"
- 	      if $mkdir -p "$tmpdir" && chmod 700 "$tmpdir"; then :
- 	      else
- 		$echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2
- 		continue
- 	      fi
- 	      outputname="$tmpdir/$file"
- 	      # Replace the output file specification.
- 	      relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
- 
- 	      $show "$relink_command"
- 	      if $run eval "$relink_command"; then :
- 	      else
- 		$echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
- 		${rm}r "$tmpdir"
- 		continue
- 	      fi
- 	      file="$outputname"
- 	    else
- 	      $echo "$modename: warning: cannot relink \`$file'" 1>&2
- 	    fi
- 	  else
- 	    # Install the binary that we compiled earlier.
- 	    file=`$echo "X$file" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
- 	  fi
- 	fi
- 
- 	$show "$install_prog$stripme $file $destfile"
- 	$run eval "$install_prog\$stripme \$file \$destfile" || exit $?
- 	test -n "$outputname" && ${rm}r "$tmpdir"
- 	;;
-       esac
-     done
- 
-     for file in $staticlibs; do
-       name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
- 
-       # Set up the ranlib parameters.
-       oldlib="$destdir/$name"
- 
-       $show "$install_prog $file $oldlib"
-       $run eval "$install_prog \$file \$oldlib" || exit $?
- 
-       # Do each command in the postinstall commands.
-       eval cmds=\"$old_postinstall_cmds\"
-       IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
-       for cmd in $cmds; do
- 	IFS="$save_ifs"
- 	$show "$cmd"
- 	$run eval "$cmd" || exit $?
-       done
-       IFS="$save_ifs"
-     done
- 
-     if test -n "$future_libdirs"; then
-       $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2
-     fi
- 
-     if test -n "$current_libdirs"; then
-       # Maybe just do a dry run.
-       test -n "$run" && current_libdirs=" -n$current_libdirs"
-       exec $SHELL $0 --finish$current_libdirs
-       exit 1
-     fi
- 
-     exit 0
-     ;;
- 
-   # libtool finish mode
-   finish)
-     modename="$modename: finish"
-     libdirs="$nonopt"
-     admincmds=
- 
-     if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
-       for dir
-       do
- 	libdirs="$libdirs $dir"
-       done
- 
-       for libdir in $libdirs; do
- 	if test -n "$finish_cmds"; then
- 	  # Do each command in the finish commands.
- 	  eval cmds=\"$finish_cmds\"
- 	  IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
- 	  for cmd in $cmds; do
- 	    IFS="$save_ifs"
- 	    $show "$cmd"
- 	    $run eval "$cmd" || admincmds="$admincmds
-        $cmd"
- 	  done
- 	  IFS="$save_ifs"
- 	fi
- 	if test -n "$finish_eval"; then
- 	  # Do the single finish_eval.
- 	  eval cmds=\"$finish_eval\"
- 	  $run eval "$cmds" || admincmds="$admincmds
-        $cmds"
- 	fi
-       done
-     fi
- 
-     # Exit here if they wanted silent mode.
-     test "$show" = : && exit 0
- 
-     echo "----------------------------------------------------------------------"
-     echo "Libraries have been installed in:"
-     for libdir in $libdirs; do
-       echo "   $libdir"
-     done
-     echo
-     echo "If you ever happen to want to link against installed libraries"
-     echo "in a given directory, LIBDIR, you must either use libtool, and"
-     echo "specify the full pathname of the library, or use \`-LLIBDIR'"
-     echo "flag during linking and do at least one of the following:"
-     if test -n "$shlibpath_var"; then
-       echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
-       echo "     during execution"
-     fi
-     if test -n "$runpath_var"; then
-       echo "   - add LIBDIR to the \`$runpath_var' environment variable"
-       echo "     during linking"
-     fi
-     if test -n "$hardcode_libdir_flag_spec"; then
-       libdir=LIBDIR
-       eval flag=\"$hardcode_libdir_flag_spec\"
- 
-       echo "   - use the \`$flag' linker flag"
-     fi
-     if test -n "$admincmds"; then
-       echo "   - have your system administrator run these commands:$admincmds"
-     fi
-     if test -f /etc/ld.so.conf; then
-       echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
-     fi
-     echo
-     echo "See any operating system documentation about shared libraries for"
-     echo "more information, such as the ld(1) and ld.so(8) manual pages."
-     echo "----------------------------------------------------------------------"
-     exit 0
-     ;;
- 
-   # libtool execute mode
-   execute)
-     modename="$modename: execute"
- 
-     # The first argument is the command name.
-     cmd="$nonopt"
-     if test -z "$cmd"; then
-       $echo "$modename: you must specify a COMMAND" 1>&2
-       $echo "$help"
-       exit 1
-     fi
- 
-     # Handle -dlopen flags immediately.
-     for file in $execute_dlfiles; do
-       if test ! -f "$file"; then
- 	$echo "$modename: \`$file' is not a file" 1>&2
- 	$echo "$help" 1>&2
- 	exit 1
-       fi
- 
-       dir=
-       case "$file" in
-       *.la)
- 	# Check to see that this really is a libtool archive.
- 	if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
- 	else
- 	  $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
- 	  $echo "$help" 1>&2
- 	  exit 1
- 	fi
- 
- 	# Read the libtool library.
- 	dlname=
- 	library_names=
- 
- 	# If there is no directory component, then add one.
- 	case "$file" in
- 	*/* | *\\*) . $file ;;
- 	*) . ./$file ;;
- 	esac
- 
- 	# Skip this library if it cannot be dlopened.
- 	if test -z "$dlname"; then
- 	  # Warn if it was a shared library.
- 	  test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'"
- 	  continue
- 	fi
- 
- 	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
- 	test "X$dir" = "X$file" && dir=.
- 
- 	if test -f "$dir/$objdir/$dlname"; then
- 	  dir="$dir/$objdir"
- 	else
- 	  $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2
- 	  exit 1
- 	fi
- 	;;
- 
-       *.lo)
- 	# Just add the directory containing the .lo file.
- 	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
- 	test "X$dir" = "X$file" && dir=.
- 	;;
- 
-       *)
- 	$echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2
- 	continue
- 	;;
-       esac
- 
-       # Get the absolute pathname.
-       absdir=`cd "$dir" && pwd`
-       test -n "$absdir" && dir="$absdir"
- 
-       # Now add the directory to shlibpath_var.
-       if eval "test -z \"\$$shlibpath_var\""; then
- 	eval "$shlibpath_var=\"\$dir\""
-       else
- 	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
-       fi
-     done
- 
-     # This variable tells wrapper scripts just to set shlibpath_var
-     # rather than running their programs.
-     libtool_execute_magic="$magic"
- 
-     # Check if any of the arguments is a wrapper script.
-     args=
-     for file
-     do
-       case "$file" in
-       -*) ;;
-       *)
- 	# Do a test to see if this is really a libtool program.
- 	if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
- 	  # If there is no directory component, then add one.
- 	  case "$file" in
- 	  */* | *\\*) . $file ;;
- 	  *) . ./$file ;;
- 	  esac
- 
- 	  # Transform arg to wrapped name.
- 	  file="$progdir/$program"
- 	fi
- 	;;
-       esac
-       # Quote arguments (to preserve shell metacharacters).
-       file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"`
-       args="$args \"$file\""
-     done
- 
-     if test -z "$run"; then
-       if test -n "$shlibpath_var"; then
-         # Export the shlibpath_var.
-         eval "export $shlibpath_var"
-       fi
- 
-       # Restore saved enviroment variables
-       if test "${save_LC_ALL+set}" = set; then
- 	LC_ALL="$save_LC_ALL"; export LC_ALL
-       fi
-       if test "${save_LANG+set}" = set; then
- 	LANG="$save_LANG"; export LANG
-       fi
- 
-       # Now actually exec the command.
-       eval "exec \$cmd$args"
- 
-       $echo "$modename: cannot exec \$cmd$args"
-       exit 1
-     else
-       # Display what would be done.
-       if test -n "$shlibpath_var"; then
-         eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
-         $echo "export $shlibpath_var"
-       fi
-       $echo "$cmd$args"
-       exit 0
-     fi
-     ;;
- 
-   # libtool uninstall mode
-   uninstall)
-     modename="$modename: uninstall"
-     rm="$nonopt"
-     files=
- 
-     for arg
-     do
-       case "$arg" in
-       -*) rm="$rm $arg" ;;
-       *) files="$files $arg" ;;
-       esac
-     done
- 
-     if test -z "$rm"; then
-       $echo "$modename: you must specify an RM program" 1>&2
-       $echo "$help" 1>&2
-       exit 1
-     fi
- 
-     for file in $files; do
-       dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
-       test "X$dir" = "X$file" && dir=.
-       name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
- 
-       rmfiles="$file"
- 
-       case "$name" in
-       *.la)
- 	# Possibly a libtool archive, so verify it.
- 	if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
- 	  . $dir/$name
- 
- 	  # Delete the libtool libraries and symlinks.
- 	  for n in $library_names; do
- 	    rmfiles="$rmfiles $dir/$n"
- 	  done
- 	  test -n "$old_library" && rmfiles="$rmfiles $dir/$old_library"
- 
- 	  $show "$rm $rmfiles"
- 	  $run $rm $rmfiles
- 
- 	  if test -n "$library_names"; then
- 	    # Do each command in the postuninstall commands.
- 	    eval cmds=\"$postuninstall_cmds\"
- 	    IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
- 	    for cmd in $cmds; do
- 	      IFS="$save_ifs"
- 	      $show "$cmd"
- 	      $run eval "$cmd"
- 	    done
- 	    IFS="$save_ifs"
- 	  fi
- 
- 	  if test -n "$old_library"; then
- 	    # Do each command in the old_postuninstall commands.
- 	    eval cmds=\"$old_postuninstall_cmds\"
- 	    IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
- 	    for cmd in $cmds; do
- 	      IFS="$save_ifs"
- 	      $show "$cmd"
- 	      $run eval "$cmd"
- 	    done
- 	    IFS="$save_ifs"
- 	  fi
- 
- 	  # FIXME: should reinstall the best remaining shared library.
- 	fi
- 	;;
- 
-       *.lo)
- 	if test "$build_old_libs" = yes; then
- 	  oldobj=`$echo "X$name" | $Xsed -e "$lo2o"`
- 	  rmfiles="$rmfiles $dir/$oldobj"
- 	fi
- 	$show "$rm $rmfiles"
- 	$run $rm $rmfiles
- 	;;
- 
-       *)
- 	$show "$rm $rmfiles"
- 	$run $rm $rmfiles
- 	;;
-       esac
-     done
-     exit 0
-     ;;
- 
-   "")
-     $echo "$modename: you must specify a MODE" 1>&2
-     $echo "$generic_help" 1>&2
-     exit 1
-     ;;
-   esac
- 
-   $echo "$modename: invalid operation mode \`$mode'" 1>&2
-   $echo "$generic_help" 1>&2
-   exit 1
- fi # test -z "$show_help"
- 
- # We need to display help for each of the modes.
- case "$mode" in
- "") $echo \
- "Usage: $modename [OPTION]... [MODE-ARG]...
- 
- Provide generalized library-building support services.
- 
-     --config          show all configuration variables
-     --debug           enable verbose shell tracing
- -n, --dry-run         display commands without modifying any files
-     --features        display basic configuration information and exit
-     --finish          same as \`--mode=finish'
-     --help            display this help message and exit
-     --mode=MODE       use operation mode MODE [default=inferred from MODE-ARGS]
-     --quiet           same as \`--silent'
-     --silent          don't print informational messages
-     --version         print version information
- 
- MODE must be one of the following:
- 
-       compile         compile a source file into a libtool object
-       execute         automatically set library path, then run a program
-       finish          complete the installation of libtool libraries
-       install         install libraries or executables
-       link            create a library or an executable
-       uninstall       remove libraries from an installed directory
- 
- MODE-ARGS vary depending on the MODE.  Try \`$modename --help --mode=MODE' for
- a more detailed description of MODE."
-   exit 0
-   ;;
- 
- compile)
-   $echo \
- "Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
- 
- Compile a source file into a libtool library object.
- 
- This mode accepts the following additional options:
- 
-   -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
-   -static           always build a \`.o' file suitable for static linking
- 
- COMPILE-COMMAND is a command to be used in creating a \`standard' object file
- from the given SOURCEFILE.
- 
- The output file name is determined by removing the directory component from
- SOURCEFILE, then substituting the C source code suffix \`.c' with the
- library object suffix, \`.lo'."
-   ;;
- 
- execute)
-   $echo \
- "Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]...
- 
- Automatically set library path, then run a program.
- 
- This mode accepts the following additional options:
- 
-   -dlopen FILE      add the directory containing FILE to the library path
- 
- This mode sets the library path environment variable according to \`-dlopen'
- flags.
- 
- If any of the ARGS are libtool executable wrappers, then they are translated
- into their corresponding uninstalled binary, and any of their required library
- directories are added to the library path.
- 
- Then, COMMAND is executed, with ARGS as arguments."
-   ;;
- 
- finish)
-   $echo \
- "Usage: $modename [OPTION]... --mode=finish [LIBDIR]...
- 
- Complete the installation of libtool libraries.
- 
- Each LIBDIR is a directory that contains libtool libraries.
- 
- The commands that this mode executes may require superuser privileges.  Use
- the \`--dry-run' option if you just want to see what would be executed."
-   ;;
- 
- install)
-   $echo \
- "Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND...
- 
- Install executables or libraries.
- 
- INSTALL-COMMAND is the installation command.  The first component should be
- either the \`install' or \`cp' program.
- 
- The rest of the components are interpreted as arguments to that command (only
- BSD-compatible install options are recognized)."
-   ;;
- 
- link)
-   $echo \
- "Usage: $modename [OPTION]... --mode=link LINK-COMMAND...
- 
- Link object files or libraries together to form another library, or to
- create an executable program.
- 
- LINK-COMMAND is a command using the C compiler that you would use to create
- a program from several object files.
- 
- The following components of LINK-COMMAND are treated specially:
- 
-   -all-static       do not do any dynamic linking at all
-   -avoid-version    do not add a version suffix if possible
-   -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
-   -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
-   -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
-   -export-symbols SYMFILE
- 		    try to export only the symbols listed in SYMFILE
-   -export-symbols-regex REGEX
- 		    try to export only the symbols matching REGEX
-   -LLIBDIR          search LIBDIR for required installed libraries
-   -lNAME            OUTPUT-FILE requires the installed library libNAME
-   -module           build a library that can dlopened
-   -no-undefined     declare that a library does not refer to external symbols
-   -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
-   -release RELEASE  specify package release information
-   -rpath LIBDIR     the created library will eventually be installed in LIBDIR
-   -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
-   -static           do not do any dynamic linking of libtool libraries
-   -version-info CURRENT[:REVISION[:AGE]]
- 		    specify library version info [each variable defaults to 0]
- 
- All other options (arguments beginning with \`-') are ignored.
- 
- Every other argument is treated as a filename.  Files ending in \`.la' are
- treated as uninstalled libtool libraries, other files are standard or library
- object files.
- 
- If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
- only library objects (\`.lo' files) may be specified, and \`-rpath' is
- required, except when creating a convenience library.
- 
- If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
- using \`ar' and \`ranlib', or on Windows using \`lib'.
- 
- If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
- is created, otherwise an executable program is created."
-   ;;
- 
- uninstall)
-   $echo \
- "Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
- 
- Remove libraries from an installation directory.
- 
- RM is the name of the program to use to delete files associated with each FILE
- (typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
- to RM.
- 
- If FILE is a libtool library, all the files associated with it are deleted.
- Otherwise, only FILE itself is deleted using RM."
-   ;;
- 
- *)
-   $echo "$modename: invalid operation mode \`$mode'" 1>&2
-   $echo "$help" 1>&2
-   exit 1
-   ;;
- esac
- 
- echo
- $echo "Try \`$modename --help' for more information about other modes."
- 
- exit 0
- 
- # Local Variables:
- # mode:shell-script
- # sh-indentation:2
- # End:
--- 0 ----
diff -Nrcpad gcc-3.4.3/boehm-gc/mach_dep.c gcc-4.0.0/boehm-gc/mach_dep.c
*** gcc-3.4.3/boehm-gc/mach_dep.c	Fri Oct  3 18:43:06 2003
--- gcc-4.0.0/boehm-gc/mach_dep.c	Wed Feb  9 21:33:02 2005
*************** void GC_push_regs()
*** 400,460 ****
  }
  #endif /* !USE_GENERIC_PUSH_REGS && !USE_ASM_PUSH_REGS */
  
  #if defined(USE_GENERIC_PUSH_REGS)
  void GC_generic_push_regs(cold_gc_frame)
  ptr_t cold_gc_frame;
  {
! 	{
! 	    word dummy;
! 
! #	    ifdef HAVE_BUILTIN_UNWIND_INIT
! 	      /* This was suggested by Richard Henderson as the way to	*/
! 	      /* force callee-save registers and register windows onto	*/
! 	      /* the stack.						*/
! 	      __builtin_unwind_init();
! #	    else /* !HAVE_BUILTIN_UNWIND_INIT */
! 	      /* Generic code                          */
! 	      /* The idea is due to Parag Patel at HP. */
! 	      /* We're not sure whether he would like  */
! 	      /* to be he acknowledged for it or not.  */
! 	      jmp_buf regs;
! 	      register word * i = (word *) regs;
! 	      register ptr_t lim = (ptr_t)(regs) + (sizeof regs);
! 
! 	      /* Setjmp doesn't always clear all of the buffer.		*/
! 	      /* That tends to preserve garbage.  Clear it.   		*/
! 		for (; (char *)i < lim; i++) {
! 		    *i = 0;
! 		}
! #	      if defined(POWERPC) || defined(MSWIN32) || defined(MSWINCE) \
!                 || defined(UTS4) || defined(LINUX) || defined(EWS4800)
! 		  (void) setjmp(regs);
! #	      else
! 	          (void) _setjmp(regs);
! #	      endif
! #	    endif /* !HAVE_BUILTIN_UNWIND_INIT */
! #           if (defined(SPARC) && !defined(HAVE_BUILTIN_UNWIND_INIT)) \
! 		|| defined(IA64)
! 	      /* On a register window machine, we need to save register	*/
! 	      /* contents on the stack for this to work.  The setjmp	*/
! 	      /* is probably not needed on SPARC, since pointers are	*/
! 	      /* only stored in windowed or scratch registers.  It is	*/
! 	      /* needed on IA64, since some non-windowed registers are	*/
! 	      /* preserved.						*/
! 	      {
! 	        GC_save_regs_ret_val = GC_save_regs_in_stack();
! 		/* On IA64 gcc, could use __builtin_ia64_flushrs() and	*/
! 		/* __builtin_ia64_flushrs().  The latter will be done	*/
! 		/* implicitly by __builtin_unwind_init() for gcc3.0.1	*/
! 		/* and later.						*/
! 	      }
! #           endif
! 	    GC_push_current_stack(cold_gc_frame);
! 	    /* Strongly discourage the compiler from treating the above	*/
! 	    /* as a tail-call, since that would pop the register 	*/
! 	    /* contents before we get a chance to look at them.		*/
! 	    GC_noop1((word)(&dummy));
! 	}
  }
  #endif /* USE_GENERIC_PUSH_REGS */
  
--- 400,478 ----
  }
  #endif /* !USE_GENERIC_PUSH_REGS && !USE_ASM_PUSH_REGS */
  
+ void GC_with_callee_saves_pushed(fn, arg)
+ void (*fn)();
+ ptr_t arg;
+ {
+     word dummy;
+ 
+ #   if defined(USE_GENERIC_PUSH_REGS)
+ #     ifdef HAVE_BUILTIN_UNWIND_INIT
+         /* This was suggested by Richard Henderson as the way to	*/
+         /* force callee-save registers and register windows onto	*/
+         /* the stack.						*/
+         __builtin_unwind_init();
+ #     else /* !HAVE_BUILTIN_UNWIND_INIT */
+         /* Generic code                          */
+         /* The idea is due to Parag Patel at HP. */
+         /* We're not sure whether he would like  */
+         /* to be he acknowledged for it or not.  */
+         jmp_buf regs;
+         register word * i = (word *) regs;
+         register ptr_t lim = (ptr_t)(regs) + (sizeof regs);
+   
+         /* Setjmp doesn't always clear all of the buffer.		*/
+         /* That tends to preserve garbage.  Clear it.   		*/
+   	for (; (char *)i < lim; i++) {
+   	    *i = 0;
+   	}
+ #       if defined(POWERPC) || defined(MSWIN32) || defined(MSWINCE) \
+                   || defined(UTS4) || defined(LINUX) || defined(EWS4800)
+   	  (void) setjmp(regs);
+ #       else
+             (void) _setjmp(regs);
+   	  /* We don't want to mess with signals. According to	*/
+   	  /* SUSV3, setjmp() may or may not save signal mask.	*/
+   	  /* _setjmp won't, but is less portable.		*/
+ #       endif
+ #     endif /* !HAVE_BUILTIN_UNWIND_INIT */
+ #   elif defined(PTHREADS) && !defined(MSWIN32) /* !USE_GENERIC_PUSH_REGS */
+       /* We may still need this to save thread contexts.	*/
+       /* This should probably be used in all Posix/non-gcc	*/
+       /* settings.  We defer that change to minimize risk.	*/
+       ucontext_t ctxt;
+       getcontext(&ctxt);
+ #   else  /* Shouldn't be needed */
+       ABORT("Unexpected call to GC_with_callee_saves_pushed");
+ #   endif
+ #   if (defined(SPARC) && !defined(HAVE_BUILTIN_UNWIND_INIT)) \
+ 	|| defined(IA64)
+       /* On a register window machine, we need to save register	*/
+       /* contents on the stack for this to work.  The setjmp	*/
+       /* is probably not needed on SPARC, since pointers are	*/
+       /* only stored in windowed or scratch registers.  It is	*/
+       /* needed on IA64, since some non-windowed registers are	*/
+       /* preserved.						*/
+       {
+         GC_save_regs_ret_val = GC_save_regs_in_stack();
+ 	/* On IA64 gcc, could use __builtin_ia64_flushrs() and	*/
+ 	/* __builtin_ia64_flushrs().  The latter will be done	*/
+ 	/* implicitly by __builtin_unwind_init() for gcc3.0.1	*/
+ 	/* and later.						*/
+       }
+ #   endif
+     fn(arg);
+     /* Strongly discourage the compiler from treating the above	*/
+     /* as a tail-call, since that would pop the register 	*/
+     /* contents before we get a chance to look at them.		*/
+     GC_noop1((word)(&dummy));
+ }
+ 
  #if defined(USE_GENERIC_PUSH_REGS)
  void GC_generic_push_regs(cold_gc_frame)
  ptr_t cold_gc_frame;
  {
!     GC_with_callee_saves_pushed(GC_push_current_stack, cold_gc_frame);
  }
  #endif /* USE_GENERIC_PUSH_REGS */
  
diff -Nrcpad gcc-3.4.3/boehm-gc/malloc.c gcc-4.0.0/boehm-gc/malloc.c
*** gcc-3.4.3/boehm-gc/malloc.c	Wed Jan  7 21:47:35 2004
--- gcc-4.0.0/boehm-gc/malloc.c	Fri Aug 13 23:05:30 2004
*************** register struct obj_kind * kind;
*** 36,41 ****
--- 36,42 ----
  /* Allocate a large block of size lw words.	*/
  /* The block is not cleared.			*/
  /* Flags is 0 or IGNORE_OFF_PAGE.		*/
+ /* We hold the allocation lock.			*/
  ptr_t GC_alloc_large(lw, k, flags)
  word lw;
  int k;
*************** unsigned flags;
*** 62,81 ****
      if (h == 0) {
  	result = 0;
      } else {
! 	int total_bytes = BYTES_TO_WORDS(n_blocks * HBLKSIZE);
  	if (n_blocks > 1) {
! 	    GC_large_allocd_bytes += n_blocks * HBLKSIZE;
  	    if (GC_large_allocd_bytes > GC_max_large_allocd_bytes)
  	        GC_max_large_allocd_bytes = GC_large_allocd_bytes;
  	}
  	result = (ptr_t) (h -> hb_body);
! 	GC_words_wasted += total_bytes - lw;
      }
      return result;
  }
  
  
  /* Allocate a large block of size lb bytes.  Clear if appropriate.	*/
  ptr_t GC_alloc_large_and_clear(lw, k, flags)
  word lw;
  int k;
--- 63,83 ----
      if (h == 0) {
  	result = 0;
      } else {
! 	int total_bytes = n_blocks * HBLKSIZE;
  	if (n_blocks > 1) {
! 	    GC_large_allocd_bytes += total_bytes;
  	    if (GC_large_allocd_bytes > GC_max_large_allocd_bytes)
  	        GC_max_large_allocd_bytes = GC_large_allocd_bytes;
  	}
  	result = (ptr_t) (h -> hb_body);
! 	GC_words_wasted += BYTES_TO_WORDS(total_bytes) - lw;
      }
      return result;
  }
  
  
  /* Allocate a large block of size lb bytes.  Clear if appropriate.	*/
+ /* We hold the allocation lock.						*/
  ptr_t GC_alloc_large_and_clear(lw, k, flags)
  word lw;
  int k;
*************** DCL_LOCK_STATE;
*** 311,316 ****
--- 313,331 ----
  }
  
  # ifdef REDIRECT_MALLOC
+ 
+ /* Avoid unnecessary nested procedure calls here, by #defining some	*/
+ /* malloc replacements.  Otherwise we end up saving a 			*/
+ /* meaningless return address in the object.  It also speeds things up,	*/
+ /* but it is admittedly quite ugly.					*/
+ # ifdef GC_ADD_CALLER
+ #   define RA GC_RETURN_ADDR,
+ # else
+ #   define RA
+ # endif
+ # define GC_debug_malloc_replacement(lb) \
+ 	GC_debug_malloc(lb, RA "unknown", 0)
+ 
  # ifdef __STDC__
      GC_PTR malloc(size_t lb)
  # else
*************** DCL_LOCK_STATE;
*** 363,368 ****
--- 378,385 ----
   /* and thus the right thing will happen even without overriding it.	 */
   /* This seems to be true on most Linux systems.			 */
  
+ #undef GC_debug_malloc_replacement
+ 
  # endif /* REDIRECT_MALLOC */
  
  /* Explicitly deallocate an object p.				*/
diff -Nrcpad gcc-3.4.3/boehm-gc/mallocx.c gcc-4.0.0/boehm-gc/mallocx.c
*** gcc-3.4.3/boehm-gc/mallocx.c	Wed Jan  7 21:47:35 2004
--- gcc-4.0.0/boehm-gc/mallocx.c	Fri Aug 13 23:05:30 2004
*************** int obj_kind;
*** 147,152 ****
--- 147,162 ----
  # endif
  
  # ifdef REDIRECT_REALLOC
+ 
+ /* As with malloc, avoid two levels of extra calls here.	*/
+ # ifdef GC_ADD_CALLER
+ #   define RA GC_RETURN_ADDR,
+ # else
+ #   define RA
+ # endif
+ # define GC_debug_realloc_replacement(p, lb) \
+ 	GC_debug_realloc(p, lb, RA "unknown", 0)
+ 
  # ifdef __STDC__
      GC_PTR realloc(GC_PTR p, size_t lb)
  # else
*************** int obj_kind;
*** 157,162 ****
--- 167,174 ----
    {
      return(REDIRECT_REALLOC(p, lb));
    }
+ 
+ # undef GC_debug_realloc_replacement
  # endif /* REDIRECT_REALLOC */
  
  
diff -Nrcpad gcc-3.4.3/boehm-gc/mark.c gcc-4.0.0/boehm-gc/mark.c
*** gcc-3.4.3/boehm-gc/mark.c	Mon Jul 28 04:18:20 2003
--- gcc-4.0.0/boehm-gc/mark.c	Fri Aug 13 23:05:30 2004
*************** register hdr *hhdr, **new_hdr_p;
*** 558,565 ****
  	      current = current - HBLKSIZE*(word)hhdr;
  	      hhdr = HDR(current);
  	    } while(IS_FORWARDING_ADDR_OR_NIL(hhdr));
! 	    /* current points to the start of the large object */
! 	    if (hhdr -> hb_flags & IGNORE_OFF_PAGE) return(0);
  	    if ((word *)orig - (word *)current
  	         >= (ptrdiff_t)(hhdr->hb_sz)) {
  	        /* Pointer past the end of the block */
--- 558,565 ----
  	      current = current - HBLKSIZE*(word)hhdr;
  	      hhdr = HDR(current);
  	    } while(IS_FORWARDING_ADDR_OR_NIL(hhdr));
! 	    /* current points to near the start of the large object */
! 	    if (hhdr -> hb_flags & IGNORE_OFF_PAGE) return(orig);
  	    if ((word *)orig - (word *)current
  	         >= (ptrdiff_t)(hhdr->hb_sz)) {
  	        /* Pointer past the end of the block */
*************** mse * mark_stack_limit;
*** 684,690 ****
                current = *current_p;
  	      FIXUP_POINTER(current);
  	      if ((ptr_t)current >= least_ha && (ptr_t)current < greatest_ha) {
! 		PREFETCH(current);
                  HC_PUSH_CONTENTS((ptr_t)current, mark_stack_top,
  			      mark_stack_limit, current_p, exit1);
  	      }
--- 684,690 ----
                current = *current_p;
  	      FIXUP_POINTER(current);
  	      if ((ptr_t)current >= least_ha && (ptr_t)current < greatest_ha) {
! 		PREFETCH((ptr_t)current);
                  HC_PUSH_CONTENTS((ptr_t)current, mark_stack_top,
  			      mark_stack_limit, current_p, exit1);
  	      }
*************** mse * mark_stack_limit;
*** 760,766 ****
  	  FIXUP_POINTER(deferred);
  	  limit = (word *)((char *)limit - ALIGNMENT);
  	  if ((ptr_t)deferred >= least_ha && (ptr_t)deferred <  greatest_ha) {
! 	    PREFETCH(deferred);
  	    break;
  	  }
  	  if (current_p > limit) goto next_object;
--- 760,766 ----
  	  FIXUP_POINTER(deferred);
  	  limit = (word *)((char *)limit - ALIGNMENT);
  	  if ((ptr_t)deferred >= least_ha && (ptr_t)deferred <  greatest_ha) {
! 	    PREFETCH((ptr_t)deferred);
  	    break;
  	  }
  	  if (current_p > limit) goto next_object;
*************** mse * mark_stack_limit;
*** 770,776 ****
  	  FIXUP_POINTER(deferred);
  	  limit = (word *)((char *)limit - ALIGNMENT);
  	  if ((ptr_t)deferred >= least_ha && (ptr_t)deferred <  greatest_ha) {
! 	    PREFETCH(deferred);
  	    break;
  	  }
  	  if (current_p > limit) goto next_object;
--- 770,776 ----
  	  FIXUP_POINTER(deferred);
  	  limit = (word *)((char *)limit - ALIGNMENT);
  	  if ((ptr_t)deferred >= least_ha && (ptr_t)deferred <  greatest_ha) {
! 	    PREFETCH((ptr_t)deferred);
  	    break;
  	  }
  	  if (current_p > limit) goto next_object;
*************** mse * mark_stack_limit;
*** 787,793 ****
          if ((ptr_t)current >= least_ha && (ptr_t)current <  greatest_ha) {
    	  /* Prefetch the contents of the object we just pushed.  It's	*/
    	  /* likely we will need them soon.				*/
!   	  PREFETCH(current);
            HC_PUSH_CONTENTS((ptr_t)current, mark_stack_top,
    		           mark_stack_limit, current_p, exit2);
          }
--- 787,793 ----
          if ((ptr_t)current >= least_ha && (ptr_t)current <  greatest_ha) {
    	  /* Prefetch the contents of the object we just pushed.  It's	*/
    	  /* likely we will need them soon.				*/
!   	  PREFETCH((ptr_t)current);
            HC_PUSH_CONTENTS((ptr_t)current, mark_stack_top,
    		           mark_stack_limit, current_p, exit2);
          }
*************** register hdr * hhdr;
*** 1739,1745 ****
  {
      register int sz = hhdr -> hb_sz;
      
!     if (sz < MAXOBJSZ) {
           return(GC_page_was_dirty(h));
      } else {
      	 register ptr_t p = (ptr_t)h;
--- 1739,1745 ----
  {
      register int sz = hhdr -> hb_sz;
      
!     if (sz <= MAXOBJSZ) {
           return(GC_page_was_dirty(h));
      } else {
      	 register ptr_t p = (ptr_t)h;
diff -Nrcpad gcc-3.4.3/boehm-gc/mark_rts.c gcc-4.0.0/boehm-gc/mark_rts.c
*** gcc-3.4.3/boehm-gc/mark_rts.c	Mon Jul 28 04:18:20 2003
--- gcc-4.0.0/boehm-gc/mark_rts.c	Wed Feb  9 21:33:02 2005
*************** ptr_t p;
*** 368,375 ****
  
  ptr_t GC_approx_sp()
  {
!     word dummy;
  
  #   ifdef _MSC_VER
  #     pragma warning(disable:4172)
  #   endif
--- 368,378 ----
  
  ptr_t GC_approx_sp()
  {
!     VOLATILE word dummy;
  
+     dummy = 42;	/* Force stack to grow if necessary.	Otherwise the	*/
+     		/* later accesses might cause the kernel to think we're	*/
+     		/* doing something wrong.				*/
  #   ifdef _MSC_VER
  #     pragma warning(disable:4172)
  #   endif
diff -Nrcpad gcc-3.4.3/boehm-gc/misc.c gcc-4.0.0/boehm-gc/misc.c
*** gcc-3.4.3/boehm-gc/misc.c	Fri Oct  3 18:43:06 2003
--- gcc-4.0.0/boehm-gc/misc.c	Sat Aug 21 07:49:17 2004
*************** GC_bool GC_print_back_height = 0;
*** 116,121 ****
--- 116,126 ----
    GC_bool GC_dump_regularly = 0;  /* Generate regular debugging dumps. */
  #endif
  
+ #ifdef KEEP_BACK_PTRS
+   long GC_backtraces = 0;	/* Number of random backtraces to 	*/
+   				/* generate for each GC.		*/
+ #endif
+ 
  #ifdef FIND_LEAK
    int GC_find_leak = 1;
  #else
*************** void GC_init()
*** 470,476 ****
      DISABLE_SIGNALS();
  
  #if defined(GC_WIN32_THREADS) && !defined(GC_PTHREADS)
!     if (!GC_is_initialized) InitializeCriticalSection(&GC_allocate_ml);
  #endif /* MSWIN32 */
  
      LOCK();
--- 475,492 ----
      DISABLE_SIGNALS();
  
  #if defined(GC_WIN32_THREADS) && !defined(GC_PTHREADS)
!     if (!GC_is_initialized) {
!       BOOL (WINAPI *pfn) (LPCRITICAL_SECTION, DWORD) = NULL;
!       HMODULE hK32 = GetModuleHandle("kernel32.dll");
!       if (hK32)
! 	  pfn = (BOOL (WINAPI *) (LPCRITICAL_SECTION, DWORD))
! 		GetProcAddress (hK32,
! 				"InitializeCriticalSectionAndSpinCount");
!       if (pfn)
!           pfn(&GC_allocate_ml, 4000);
!       else
! 	  InitializeCriticalSection (&GC_allocate_ml);
!     }
  #endif /* MSWIN32 */
  
      LOCK();
*************** int sig;
*** 537,543 ****
  
  static GC_bool installed_looping_handler = FALSE;
  
! void maybe_install_looping_handler()
  {
      /* Install looping handler before the write fault handler, so we	*/
      /* handle write faults correctly.					*/
--- 553,559 ----
  
  static GC_bool installed_looping_handler = FALSE;
  
! static void maybe_install_looping_handler()
  {
      /* Install looping handler before the write fault handler, so we	*/
      /* handle write faults correctly.					*/
*************** void GC_init_inner()
*** 575,580 ****
--- 591,605 ----
          GC_dump_regularly = 1;
        }
  #   endif
+ #   ifdef KEEP_BACK_PTRS
+       {
+         char * backtraces_string = GETENV("GC_BACKTRACES");
+         if (0 != backtraces_string) {
+           GC_backtraces = atol(backtraces_string);
+ 	  if (backtraces_string[0] == '\0') GC_backtraces = 1;
+         }
+       }
+ #   endif
      if (0 != GETENV("GC_FIND_LEAK")) {
        GC_find_leak = 1;
  #     ifdef __STDC__
*************** void GC_init_inner()
*** 650,663 ****
  	|| defined(GC_SOLARIS_THREADS)
        if (GC_stackbottom == 0) {
  	GC_stackbottom = GC_get_stack_base();
! #       if defined(LINUX) && defined(IA64)
  	  GC_register_stackbottom = GC_get_register_stack_base();
  #       endif
        } else {
! #       if defined(LINUX) && defined(IA64)
  	  if (GC_register_stackbottom == 0) {
  	    WARN("GC_register_stackbottom should be set with GC_stackbottom", 0);
! 	    /* The following is likely to fail, since we rely on 	*/
  	    /* alignment properties that may not hold with a user set	*/
  	    /* GC_stackbottom.						*/
  	    GC_register_stackbottom = GC_get_register_stack_base();
--- 675,688 ----
  	|| defined(GC_SOLARIS_THREADS)
        if (GC_stackbottom == 0) {
  	GC_stackbottom = GC_get_stack_base();
! #       if (defined(LINUX) || defined(HPUX)) && defined(IA64)
  	  GC_register_stackbottom = GC_get_register_stack_base();
  #       endif
        } else {
! #       if (defined(LINUX) || defined(HPUX)) && defined(IA64)
  	  if (GC_register_stackbottom == 0) {
  	    WARN("GC_register_stackbottom should be set with GC_stackbottom", 0);
! 	    /* The following may fail, since we may rely on	 	*/
  	    /* alignment properties that may not hold with a user set	*/
  	    /* GC_stackbottom.						*/
  	    GC_register_stackbottom = GC_get_register_stack_base();
*************** void GC_init_inner()
*** 754,760 ****
        }
  #   endif /* !SMALL_CONFIG */
      COND_DUMP;
!     /* Get black list set up and/or incrmental GC started */
        if (!GC_dont_precollect || GC_incremental) GC_gcollect_inner();
      GC_is_initialized = TRUE;
  #   ifdef STUBBORN_ALLOC
--- 779,785 ----
        }
  #   endif /* !SMALL_CONFIG */
      COND_DUMP;
!     /* Get black list set up and/or incremental GC started */
        if (!GC_dont_precollect || GC_incremental) GC_gcollect_inner();
      GC_is_initialized = TRUE;
  #   ifdef STUBBORN_ALLOC
*************** GC_CONST char * msg;
*** 1031,1037 ****
  {
  #   if defined(MSWIN32)
        (void) MessageBoxA(NULL, msg, "Fatal error in gc", MB_ICONERROR|MB_OK);
-       DebugBreak();
  #   else
        GC_err_printf1("%s\n", msg);
  #   endif
--- 1056,1061 ----
*************** GC_CONST char * msg;
*** 1042,1048 ****
  	    /* about threads.						*/
  	    for(;;) {}
      }
! #   ifdef MSWIN32
  	DebugBreak();
  #   else
          (void) abort();
--- 1066,1072 ----
  	    /* about threads.						*/
  	    for(;;) {}
      }
! #   if defined(MSWIN32) || defined(MSWINCE)
  	DebugBreak();
  #   else
          (void) abort();
*************** void GC_disable()
*** 1064,1069 ****
--- 1088,1162 ----
      UNLOCK();
  }
  
+ /* Helper procedures for new kind creation.	*/
+ void ** GC_new_free_list_inner()
+ {
+     void *result = GC_INTERNAL_MALLOC((MAXOBJSZ+1)*sizeof(ptr_t), PTRFREE);
+     if (result == 0) ABORT("Failed to allocate freelist for new kind");
+     BZERO(result, (MAXOBJSZ+1)*sizeof(ptr_t));
+     return result;
+ }
+ 
+ void ** GC_new_free_list()
+ {
+     void *result;
+     LOCK(); DISABLE_SIGNALS();
+     result = GC_new_free_list_inner();
+     UNLOCK(); ENABLE_SIGNALS();
+     return result;
+ }
+ 
+ int GC_new_kind_inner(fl, descr, adjust, clear)
+ void **fl;
+ GC_word descr;
+ int adjust;
+ int clear;
+ {
+     int result = GC_n_kinds++;
+ 
+     if (GC_n_kinds > MAXOBJKINDS) ABORT("Too many kinds");
+     GC_obj_kinds[result].ok_freelist = (ptr_t *)fl;
+     GC_obj_kinds[result].ok_reclaim_list = 0;
+     GC_obj_kinds[result].ok_descriptor = descr;
+     GC_obj_kinds[result].ok_relocate_descr = adjust;
+     GC_obj_kinds[result].ok_init = clear;
+     return result;
+ }
+ 
+ int GC_new_kind(fl, descr, adjust, clear)
+ void **fl;
+ GC_word descr;
+ int adjust;
+ int clear;
+ {
+     int result;
+     LOCK(); DISABLE_SIGNALS();
+     result = GC_new_kind_inner(fl, descr, adjust, clear);
+     UNLOCK(); ENABLE_SIGNALS();
+     return result;
+ }
+ 
+ int GC_new_proc_inner(proc)
+ GC_mark_proc proc;
+ {
+     int result = GC_n_mark_procs++;
+ 
+     if (GC_n_mark_procs > MAX_MARK_PROCS) ABORT("Too many mark procedures");
+     GC_mark_procs[result] = proc;
+     return result;
+ }
+ 
+ int GC_new_proc(proc)
+ GC_mark_proc proc;
+ {
+     int result;
+     LOCK(); DISABLE_SIGNALS();
+     result = GC_new_proc_inner(proc);
+     UNLOCK(); ENABLE_SIGNALS();
+     return result;
+ }
+ 
+ 
  #if !defined(NO_DEBUGGING)
  
  void GC_dump()
diff -Nrcpad gcc-3.4.3/boehm-gc/mkinstalldirs gcc-4.0.0/boehm-gc/mkinstalldirs
*** gcc-3.4.3/boehm-gc/mkinstalldirs	Fri Aug 17 18:39:16 2001
--- gcc-4.0.0/boehm-gc/mkinstalldirs	Thu Jan  1 00:00:00 1970
***************
*** 1,36 ****
- #! /bin/sh
- # mkinstalldirs --- make directory hierarchy
- # Author: Noah Friedman <friedman@prep.ai.mit.edu>
- # Created: 1993-05-16
- # Last modified: 1994-03-25
- # Public domain
- 
- errstatus=0
- 
- for file in ${1+"$@"} ; do 
-    set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
-    shift
- 
-    pathcomp=
-    for d in ${1+"$@"} ; do
-      pathcomp="$pathcomp$d"
-      case "$pathcomp" in
-        -* ) pathcomp=./$pathcomp ;;
-      esac
- 
-      if test ! -d "$pathcomp"; then
-         echo "mkdir $pathcomp" 1>&2
-         mkdir "$pathcomp" > /dev/null 2>&1 || lasterr=$?
-      fi
- 
-      if test ! -d "$pathcomp"; then
- 	errstatus=$lasterr
-      fi
- 
-      pathcomp="$pathcomp/"
-    done
- done
- 
- exit $errstatus
- 
- # mkinstalldirs ends here
--- 0 ----
diff -Nrcpad gcc-3.4.3/boehm-gc/new_hblk.c gcc-4.0.0/boehm-gc/new_hblk.c
*** gcc-3.4.3/boehm-gc/new_hblk.c	Tue Oct 16 09:01:35 2001
--- gcc-4.0.0/boehm-gc/new_hblk.c	Fri Aug 13 23:05:30 2004
*************** ptr_t ofl;
*** 104,110 ****
      p[3] = 0;
      p += 4;
      for (; p < lim; p += 4) {
! 	PREFETCH_FOR_WRITE(p+64);
          p[0] = (word)(p-4);
          p[1] = 0;
  	CLEAR_DOUBLE(p+2);
--- 104,110 ----
      p[3] = 0;
      p += 4;
      for (; p < lim; p += 4) {
! 	PREFETCH_FOR_WRITE((ptr_t)(p+64));
          p[0] = (word)(p-4);
          p[1] = 0;
  	CLEAR_DOUBLE(p+2);
*************** ptr_t ofl;
*** 142,148 ****
      p[4] = (word)p;
      p += 8;
      for (; p < lim; p += 8) {
! 	PREFETCH_FOR_WRITE(p+64);
          p[0] = (word)(p-4);
          p[4] = (word)p;
      };
--- 142,148 ----
      p[4] = (word)p;
      p += 8;
      for (; p < lim; p += 8) {
! 	PREFETCH_FOR_WRITE((ptr_t)(p+64));
          p[0] = (word)(p-4);
          p[4] = (word)p;
      };
*************** ptr_t list;
*** 171,180 ****
    /* If we were more serious about it, these should go inside	*/
    /* the loops.  But write prefetches usually don't seem to	*/
    /* matter much.						*/
!     PREFETCH_FOR_WRITE((char *)h);
!     PREFETCH_FOR_WRITE((char *)h + 128);
!     PREFETCH_FOR_WRITE((char *)h + 256);
!     PREFETCH_FOR_WRITE((char *)h + 378);
    /* Handle small objects sizes more efficiently.  For larger objects 	*/
    /* the difference is less significant.				*/
  #  ifndef SMALL_CONFIG
--- 171,180 ----
    /* If we were more serious about it, these should go inside	*/
    /* the loops.  But write prefetches usually don't seem to	*/
    /* matter much.						*/
!     PREFETCH_FOR_WRITE((ptr_t)h);
!     PREFETCH_FOR_WRITE((ptr_t)h + 128);
!     PREFETCH_FOR_WRITE((ptr_t)h + 256);
!     PREFETCH_FOR_WRITE((ptr_t)h + 378);
    /* Handle small objects sizes more efficiently.  For larger objects 	*/
    /* the difference is less significant.				*/
  #  ifndef SMALL_CONFIG
diff -Nrcpad gcc-3.4.3/boehm-gc/os_dep.c gcc-4.0.0/boehm-gc/os_dep.c
*** gcc-3.4.3/boehm-gc/os_dep.c	Mon Sep 22 16:00:23 2003
--- gcc-4.0.0/boehm-gc/os_dep.c	Fri Aug 13 23:05:30 2004
***************
*** 87,92 ****
--- 87,98 ----
  #  endif
  #endif
  
+ #if (defined(NETBSD) || defined(OPENBSD)) && defined(__ELF__) \
+     && !defined(NEED_FIND_LIMIT)
+    /* Used by GC_init_netbsd_elf() below.	*/
+ #  define NEED_FIND_LIMIT
+ #endif
+ 
  #ifdef NEED_FIND_LIMIT
  #   include <setjmp.h>
  #endif
***************
*** 111,135 ****
  # include <sys/uio.h>
  # include <malloc.h>   /* for locking */
  #endif
! #ifdef USE_MMAP
  # include <sys/types.h>
  # include <sys/mman.h>
  # include <sys/stat.h>
  #endif
  
  #ifdef UNIX_LIKE
  # include <fcntl.h>
! #endif
! 
! #if defined(SUNOS5SIGS) || defined (HURD) || defined(LINUX)
! # ifdef SUNOS5SIGS
  #  include <sys/siginfo.h>
  # endif
! # undef setjmp
! # undef longjmp
! # define setjmp(env) sigsetjmp(env, 1)
! # define longjmp(env, val) siglongjmp(env, val)
! # define jmp_buf sigjmp_buf
  #endif
  
  #ifdef DARWIN
--- 117,146 ----
  # include <sys/uio.h>
  # include <malloc.h>   /* for locking */
  #endif
! #if defined(USE_MMAP) || defined(USE_MUNMAP)
! # ifndef USE_MMAP
!     --> USE_MUNMAP requires USE_MMAP
! # endif
  # include <sys/types.h>
  # include <sys/mman.h>
  # include <sys/stat.h>
+ # include <errno.h>
  #endif
  
  #ifdef UNIX_LIKE
  # include <fcntl.h>
! # if defined(SUNOS5SIGS) && !defined(FREEBSD)
  #  include <sys/siginfo.h>
  # endif
!   /* Define SETJMP and friends to be the version that restores	*/
!   /* the signal mask.						*/
! # define SETJMP(env) sigsetjmp(env, 1)
! # define LONGJMP(env, val) siglongjmp(env, val)
! # define JMP_BUF sigjmp_buf
! #else
! # define SETJMP(env) setjmp(env)
! # define LONGJMP(env, val) longjmp(env, val)
! # define JMP_BUF jmp_buf
  #endif
  
  #ifdef DARWIN
*************** ssize_t GC_repeat_read(int fd, char *buf
*** 183,227 ****
  /*
   * Apply fn to a buffer containing the contents of /proc/self/maps.
   * Return the result of fn or, if we failed, 0.
   */
  
  word GC_apply_to_maps(word (*fn)(char *))
  {
      int f;
      int result;
!     int maps_size;
!     char maps_temp[32768];
!     char *maps_buf;
  
!     /* Read /proc/self/maps	*/
!         /* Note that we may not allocate, and thus can't use stdio.	*/
!         f = open("/proc/self/maps", O_RDONLY);
!         if (-1 == f) return 0;
! 	/* stat() doesn't work for /proc/self/maps, so we have to
! 	   read it to find out how large it is... */
! 	maps_size = 0;
  	do {
! 	    result = GC_repeat_read(f, maps_temp, sizeof(maps_temp));
! 	    if (result <= 0) return 0;
! 	    maps_size += result;
! 	} while (result == sizeof(maps_temp));
! 
! 	if (maps_size > sizeof(maps_temp)) {
! 	    /* If larger than our buffer, close and re-read it. */
! 	    close(f);
  	    f = open("/proc/self/maps", O_RDONLY);
  	    if (-1 == f) return 0;
! 	    maps_buf = alloca(maps_size);
! 	    if (NULL == maps_buf) return 0;
! 	    result = GC_repeat_read(f, maps_buf, maps_size);
! 	    if (result <= 0) return 0;
! 	} else {
! 	    /* Otherwise use the fixed size buffer */
! 	    maps_buf = maps_temp;
! 	}
! 
! 	close(f);
!         maps_buf[result] = '\0';
  	
      /* Apply fn to result. */
  	return fn(maps_buf);
--- 194,234 ----
  /*
   * Apply fn to a buffer containing the contents of /proc/self/maps.
   * Return the result of fn or, if we failed, 0.
+  * We currently do nothing to /proc/self/maps other than simply read
+  * it.  This code could be simplified if we could determine its size
+  * ahead of time.
   */
  
  word GC_apply_to_maps(word (*fn)(char *))
  {
      int f;
      int result;
!     size_t maps_size = 4000;  /* Initial guess. 	*/
!     static char init_buf[1];
!     static char *maps_buf = init_buf;
!     static size_t maps_buf_sz = 1;
  
!     /* Read /proc/self/maps, growing maps_buf as necessary.	*/
!         /* Note that we may not allocate conventionally, and	*/
!         /* thus can't use stdio.				*/
  	do {
! 	    if (maps_size >= maps_buf_sz) {
! 	      /* Grow only by powers of 2, since we leak "too small" buffers. */
! 	      while (maps_size >= maps_buf_sz) maps_buf_sz *= 2;
! 	      maps_buf = GC_scratch_alloc(maps_buf_sz);
! 	      if (maps_buf == 0) return 0;
! 	    }
  	    f = open("/proc/self/maps", O_RDONLY);
  	    if (-1 == f) return 0;
! 	    maps_size = 0;
! 	    do {
! 	        result = GC_repeat_read(f, maps_buf, maps_buf_sz-1);
! 	        if (result <= 0) return 0;
! 	        maps_size += result;
! 	    } while (result == maps_buf_sz-1);
! 	    close(f);
! 	} while (maps_size >= maps_buf_sz);
!         maps_buf[maps_size] = '\0';
  	
      /* Apply fn to result. */
  	return fn(maps_buf);
*************** char *GC_parse_map_entry(char *buf_ptr, 
*** 352,358 ****
  # endif /* ECOS_GC_MEMORY_SIZE */
  
  // setjmp() function, as described in ANSI para 7.6.1.1
! #define setjmp( __env__ )  hal_setjmp( __env__ )
  
  // FIXME: This is a simple way of allocating memory which is
  // compatible with ECOS early releases.  Later releases use a more
--- 359,366 ----
  # endif /* ECOS_GC_MEMORY_SIZE */
  
  // setjmp() function, as described in ANSI para 7.6.1.1
! #undef SETJMP
! #define SETJMP( __env__ )  hal_setjmp( __env__ )
  
  // FIXME: This is a simple way of allocating memory which is
  // compatible with ECOS early releases.  Later releases use a more
*************** ptr_t GC_get_stack_base()
*** 688,696 ****
  	typedef void (*handler)();
  #   endif
  
! #   if defined(SUNOS5SIGS) || defined(IRIX5) || defined(OSF1) || defined(HURD)
  	static struct sigaction old_segv_act;
! #	if defined(_sigargs) /* !Irix6.x */ || defined(HPUX) || defined(HURD)
  	    static struct sigaction old_bus_act;
  #	endif
  #   else
--- 696,706 ----
  	typedef void (*handler)();
  #   endif
  
! #   if defined(SUNOS5SIGS) || defined(IRIX5) || defined(OSF1) \
!     || defined(HURD) || defined(NETBSD)
  	static struct sigaction old_segv_act;
! #	if defined(_sigargs) /* !Irix6.x */ || defined(HPUX) \
! 	|| defined(HURD) || defined(NETBSD)
  	    static struct sigaction old_bus_act;
  #	endif
  #   else
*************** ptr_t GC_get_stack_base()
*** 704,724 ****
        handler h;
  #   endif
      {
! #     if defined(SUNOS5SIGS) || defined(IRIX5)  \
!         || defined(OSF1) || defined(HURD)
  	  struct sigaction	act;
  
  	  act.sa_handler	= h;
! #	  ifdef SUNOS5SIGS
              act.sa_flags          = SA_RESTART | SA_NODEFER;
  #         else
              act.sa_flags          = SA_RESTART;
  #	  endif
-           /* The presence of SA_NODEFER represents yet another gross    */
-           /* hack.  Under Solaris 2.3, siglongjmp doesn't appear to     */
-           /* interact correctly with -lthread.  We hide the confusion   */
-           /* by making sure that signal handling doesn't affect the     */
-           /* signal mask.                                               */
  
  	  (void) sigemptyset(&act.sa_mask);
  #	  ifdef GC_IRIX_THREADS
--- 714,730 ----
        handler h;
  #   endif
      {
! #	if defined(SUNOS5SIGS) || defined(IRIX5)  \
!         || defined(OSF1) || defined(HURD) || defined(NETBSD)
  	  struct sigaction	act;
  
  	  act.sa_handler	= h;
! #	  if 0 /* Was necessary for Solaris 2.3 and very temporary 	*/
! 	       /* NetBSD bugs.						*/
              act.sa_flags          = SA_RESTART | SA_NODEFER;
  #         else
              act.sa_flags          = SA_RESTART;
  #	  endif
  
  	  (void) sigemptyset(&act.sa_mask);
  #	  ifdef GC_IRIX_THREADS
*************** ptr_t GC_get_stack_base()
*** 729,735 ****
  #	  else
  	        (void) sigaction(SIGSEGV, &act, &old_segv_act);
  #		if defined(IRIX5) && defined(_sigargs) /* Irix 5.x, not 6.x */ \
! 		   || defined(HPUX) || defined(HURD)
  		    /* Under Irix 5.x or HP/UX, we may get SIGBUS.	*/
  		    /* Pthreads doesn't exist under Irix 5.x, so we	*/
  		    /* don't have to worry in the threads case.		*/
--- 735,741 ----
  #	  else
  	        (void) sigaction(SIGSEGV, &act, &old_segv_act);
  #		if defined(IRIX5) && defined(_sigargs) /* Irix 5.x, not 6.x */ \
! 		   || defined(HPUX) || defined(HURD) || defined(NETBSD)
  		    /* Under Irix 5.x or HP/UX, we may get SIGBUS.	*/
  		    /* Pthreads doesn't exist under Irix 5.x, so we	*/
  		    /* don't have to worry in the threads case.		*/
*************** ptr_t GC_get_stack_base()
*** 748,760 ****
  # ifdef NEED_FIND_LIMIT
    /* Some tools to implement HEURISTIC2	*/
  #   define MIN_PAGE_SIZE 256	/* Smallest conceivable page size, bytes */
!     /* static */ jmp_buf GC_jmp_buf;
      
      /*ARGSUSED*/
      void GC_fault_handler(sig)
      int sig;
      {
!         longjmp(GC_jmp_buf, 1);
      }
  
      void GC_setup_temporary_fault_handler()
--- 754,766 ----
  # ifdef NEED_FIND_LIMIT
    /* Some tools to implement HEURISTIC2	*/
  #   define MIN_PAGE_SIZE 256	/* Smallest conceivable page size, bytes */
!     /* static */ JMP_BUF GC_jmp_buf;
      
      /*ARGSUSED*/
      void GC_fault_handler(sig)
      int sig;
      {
!         LONGJMP(GC_jmp_buf, 1);
      }
  
      void GC_setup_temporary_fault_handler()
*************** ptr_t GC_get_stack_base()
*** 764,782 ****
      
      void GC_reset_fault_handler()
      {
! #     if defined(SUNOS5SIGS) || defined(IRIX5) \
! 	 || defined(OSF1) || defined(HURD)
! 	(void) sigaction(SIGSEGV, &old_segv_act, 0);
! #	if defined(IRIX5) && defined(_sigargs) /* Irix 5.x, not 6.x */ \
! 	   || defined(HPUX) || defined(HURD)
! 	    (void) sigaction(SIGBUS, &old_bus_act, 0);
! #	endif
! #      else
! 	(void) signal(SIGSEGV, old_segv_handler);
! #	ifdef SIGBUS
! 	  (void) signal(SIGBUS, old_bus_handler);
! #	endif
! #     endif
      }
  
      /* Return the first nonaddressible location > p (up) or 	*/
--- 770,788 ----
      
      void GC_reset_fault_handler()
      {
! #       if defined(SUNOS5SIGS) || defined(IRIX5) \
! 	   || defined(OSF1) || defined(HURD) || defined(NETBSD)
! 	  (void) sigaction(SIGSEGV, &old_segv_act, 0);
! #	  if defined(IRIX5) && defined(_sigargs) /* Irix 5.x, not 6.x */ \
! 	     || defined(HPUX) || defined(HURD) || defined(NETBSD)
! 	      (void) sigaction(SIGBUS, &old_bus_act, 0);
! #	  endif
! #       else
!   	  (void) signal(SIGSEGV, old_segv_handler);
! #	  ifdef SIGBUS
! 	    (void) signal(SIGBUS, old_bus_handler);
! #	  endif
! #       endif
      }
  
      /* Return the first nonaddressible location > p (up) or 	*/
*************** ptr_t GC_get_stack_base()
*** 786,816 ****
      ptr_t p;
      GC_bool up;
      {
!       static VOLATILE ptr_t result;
!   		/* Needs to be static, since otherwise it may not be	*/
!   		/* preserved across the longjmp.  Can safely be 	*/
!   		/* static since it's only called once, with the		*/
!   		/* allocation lock held.				*/
  
  
!       GC_setup_temporary_fault_handler();
!       if (setjmp(GC_jmp_buf) == 0) {
! 	result = (ptr_t)(((word)(p))
! 			 & ~(MIN_PAGE_SIZE-1));
! 	for (;;) {
! 	  if (up) {
! 	    result += MIN_PAGE_SIZE;
! 	  } else {
! 	    result -= MIN_PAGE_SIZE;
! 	  }
! 	  GC_noop1((word)(*result));
  	}
!       }
!       GC_reset_fault_handler();
!       if (!up) {
! 	result += MIN_PAGE_SIZE;
!       }
!       return(result);
      }
  # endif
  
--- 792,822 ----
      ptr_t p;
      GC_bool up;
      {
!         static VOLATILE ptr_t result;
!     		/* Needs to be static, since otherwise it may not be	*/
!     		/* preserved across the longjmp.  Can safely be 	*/
!     		/* static since it's only called once, with the		*/
!     		/* allocation lock held.				*/
  
  
! 	GC_setup_temporary_fault_handler();
! 	if (SETJMP(GC_jmp_buf) == 0) {
! 	    result = (ptr_t)(((word)(p))
! 			      & ~(MIN_PAGE_SIZE-1));
! 	    for (;;) {
!  	        if (up) {
! 		    result += MIN_PAGE_SIZE;
!  	        } else {
! 		    result -= MIN_PAGE_SIZE;
!  	        }
! 		GC_noop1((word)(*result));
! 	    }
  	}
! 	GC_reset_fault_handler();
!  	if (!up) {
! 	    result += MIN_PAGE_SIZE;
!  	}
! 	return(result);
      }
  # endif
  
*************** ptr_t GC_get_stack_base()
*** 821,826 ****
--- 827,855 ----
    }
  #endif
  
+ #ifdef HPUX_STACKBOTTOM
+ 
+ #include <sys/param.h>
+ #include <sys/pstat.h>
+ 
+   ptr_t GC_get_register_stack_base(void)
+   {
+     struct pst_vm_status vm_status;
+ 
+     int i = 0;
+     while (pstat_getprocvm(&vm_status, sizeof(vm_status), 0, i++) == 1) {
+       if (vm_status.pst_type == PS_RSESTACK) {
+         return (ptr_t) vm_status.pst_vaddr;
+       }
+     }
+ 
+     /* old way to get the register stackbottom */
+     return (ptr_t)(((word)GC_stackbottom - BACKING_STORE_DISPLACEMENT - 1)
+                    & ~(BACKING_STORE_ALIGNMENT - 1));
+   }
+ 
+ #endif /* HPUX_STACK_BOTTOM */
+ 
  #ifdef LINUX_STACKBOTTOM
  
  #include <sys/types.h>
*************** ptr_t GC_get_stack_base()
*** 903,909 ****
      size_t i, buf_offset = 0;
  
      /* First try the easy way.  This should work for glibc 2.2	*/
!       if (0 != &__libc_stack_end) {
  #       ifdef IA64
  	  /* Some versions of glibc set the address 16 bytes too	*/
  	  /* low while the initialization code is running.		*/
--- 932,942 ----
      size_t i, buf_offset = 0;
  
      /* First try the easy way.  This should work for glibc 2.2	*/
!     /* This fails in a prelinked ("prelink" command) executable */
!     /* since the correct value of __libc_stack_end never	*/
!     /* becomes visible to us.  The second test works around 	*/
!     /* this.							*/  
!       if (0 != &__libc_stack_end && 0 != __libc_stack_end ) {
  #       ifdef IA64
  	  /* Some versions of glibc set the address 16 bytes too	*/
  	  /* low while the initialization code is running.		*/
*************** int * etext_addr;
*** 1328,1334 ****
      /* max_page_size to &etext if &etext is at a page boundary	*/
      
      GC_setup_temporary_fault_handler();
!     if (setjmp(GC_jmp_buf) == 0) {
      	/* Try writing to the address.	*/
      	*result = *result;
          GC_reset_fault_handler();
--- 1361,1367 ----
      /* max_page_size to &etext if &etext is at a page boundary	*/
      
      GC_setup_temporary_fault_handler();
!     if (SETJMP(GC_jmp_buf) == 0) {
      	/* Try writing to the address.	*/
      	*result = *result;
          GC_reset_fault_handler();
*************** int * etext_addr;
*** 1362,1368 ****
  			      & ~((word)max_page_size - 1);
      VOLATILE ptr_t result = (ptr_t)text_end;
      GC_setup_temporary_fault_handler();
!     if (setjmp(GC_jmp_buf) == 0) {
  	/* Try reading at the address.				*/
  	/* This should happen before there is another thread.	*/
  	for (; next_page < (word)(DATAEND); next_page += (word)max_page_size)
--- 1395,1401 ----
  			      & ~((word)max_page_size - 1);
      VOLATILE ptr_t result = (ptr_t)text_end;
      GC_setup_temporary_fault_handler();
!     if (SETJMP(GC_jmp_buf) == 0) {
  	/* Try reading at the address.				*/
  	/* This should happen before there is another thread.	*/
  	for (; next_page < (word)(DATAEND); next_page += (word)max_page_size)
*************** word bytes;
*** 1497,1504 ****
  
  #else  /* Not RS6000 */
  
! #if defined(USE_MMAP)
! /* Tested only under Linux, IRIX5 and Solaris 2 */
  
  #ifdef USE_MMAP_FIXED
  #   define GC_MMAP_FLAGS MAP_FIXED | MAP_PRIVATE
--- 1530,1536 ----
  
  #else  /* Not RS6000 */
  
! #if defined(USE_MMAP) || defined(USE_MUNMAP)
  
  #ifdef USE_MMAP_FIXED
  #   define GC_MMAP_FLAGS MAP_FIXED | MAP_PRIVATE
*************** word bytes;
*** 1508,1513 ****
--- 1540,1562 ----
  #   define GC_MMAP_FLAGS MAP_PRIVATE
  #endif
  
+ #ifdef USE_MMAP_ANON
+ # define zero_fd -1
+ # if defined(MAP_ANONYMOUS)
+ #   define OPT_MAP_ANON MAP_ANONYMOUS
+ # else
+ #   define OPT_MAP_ANON MAP_ANON
+ # endif
+ #else
+   static int zero_fd;
+ # define OPT_MAP_ANON 0
+ #endif 
+ 
+ #endif /* defined(USE_MMAP) || defined(USE_MUNMAP) */
+ 
+ #if defined(USE_MMAP)
+ /* Tested only under Linux, IRIX5 and Solaris 2 */
+ 
  #ifndef HEAP_START
  #   define HEAP_START 0
  #endif
*************** word bytes;
*** 1520,1542 ****
  
  #   ifndef USE_MMAP_ANON
        static GC_bool initialized = FALSE;
-       static int fd;
  
        if (!initialized) {
! 	  fd = open("/dev/zero", O_RDONLY);
! 	  fcntl(fd, F_SETFD, FD_CLOEXEC);
  	  initialized = TRUE;
        }
  #   endif
  
      if (bytes & (GC_page_size -1)) ABORT("Bad GET_MEM arg");
! #   ifdef USE_MMAP_ANON
!       result = mmap(last_addr, bytes, PROT_READ | PROT_WRITE | OPT_PROT_EXEC,
! 		    GC_MMAP_FLAGS | MAP_ANON, -1, 0/* offset */);
! #   else
!       result = mmap(last_addr, bytes, PROT_READ | PROT_WRITE | OPT_PROT_EXEC,
! 		    GC_MMAP_FLAGS, fd, 0/* offset */);
! #   endif
      if (result == MAP_FAILED) return(0);
      last_addr = (ptr_t)result + bytes + GC_page_size - 1;
      last_addr = (ptr_t)((word)last_addr & ~(GC_page_size - 1));
--- 1569,1585 ----
  
  #   ifndef USE_MMAP_ANON
        static GC_bool initialized = FALSE;
  
        if (!initialized) {
! 	  zero_fd = open("/dev/zero", O_RDONLY);
! 	  fcntl(zero_fd, F_SETFD, FD_CLOEXEC);
  	  initialized = TRUE;
        }
  #   endif
  
      if (bytes & (GC_page_size -1)) ABORT("Bad GET_MEM arg");
!     result = mmap(last_addr, bytes, PROT_READ | PROT_WRITE | OPT_PROT_EXEC,
! 		  GC_MMAP_FLAGS | OPT_MAP_ANON, zero_fd, 0/* offset */);
      if (result == MAP_FAILED) return(0);
      last_addr = (ptr_t)result + bytes + GC_page_size - 1;
      last_addr = (ptr_t)((word)last_addr & ~(GC_page_size - 1));
*************** void GC_unmap(ptr_t start, word bytes)
*** 1794,1800 ****
  	  len -= free_len;
        }
  #   else
!       if (munmap(start_addr, len) != 0) ABORT("munmap failed");
        GC_unmapped_bytes += len;
  #   endif
  }
--- 1837,1851 ----
  	  len -= free_len;
        }
  #   else
!       /* We immediately remap it to prevent an intervening mmap from	*/
!       /* accidentally grabbing the same address space.			*/
!       {
! 	void * result;
!         result = mmap(start_addr, len, PROT_NONE,
! 		      MAP_PRIVATE | MAP_FIXED | OPT_MAP_ANON,
! 		      zero_fd, 0/* offset */);
!         if (result != (void *)start_addr) ABORT("mmap(...PROT_NONE...) failed");
!       }
        GC_unmapped_bytes += len;
  #   endif
  }
*************** void GC_unmap(ptr_t start, word bytes)
*** 1802,1814 ****
  
  void GC_remap(ptr_t start, word bytes)
  {
-     static int zero_descr = -1;
      ptr_t start_addr = GC_unmap_start(start, bytes);
      ptr_t end_addr = GC_unmap_end(start, bytes);
      word len = end_addr - start_addr;
-     ptr_t result;
  
  #   if defined(MSWIN32) || defined(MSWINCE)
        if (0 == start_addr) return;
        while (len != 0) {
            MEMORY_BASIC_INFORMATION mem_info;
--- 1853,1865 ----
  
  void GC_remap(ptr_t start, word bytes)
  {
      ptr_t start_addr = GC_unmap_start(start, bytes);
      ptr_t end_addr = GC_unmap_end(start, bytes);
      word len = end_addr - start_addr;
  
  #   if defined(MSWIN32) || defined(MSWINCE)
+       ptr_t result;
+ 
        if (0 == start_addr) return;
        while (len != 0) {
            MEMORY_BASIC_INFORMATION mem_info;
*************** void GC_remap(ptr_t start, word bytes)
*** 1828,1840 ****
  	  len -= alloc_len;
        }
  #   else
!       if (-1 == zero_descr) zero_descr = open("/dev/zero", O_RDWR);
!       fcntl(zero_descr, F_SETFD, FD_CLOEXEC);
        if (0 == start_addr) return;
!       result = mmap(start_addr, len, PROT_READ | PROT_WRITE | OPT_PROT_EXEC,
! 		    MAP_FIXED | MAP_PRIVATE, zero_descr, 0);
!       if (result != start_addr) {
! 	  ABORT("mmap remapping failed");
        }
        GC_unmapped_bytes -= len;
  #   endif
--- 1879,1895 ----
  	  len -= alloc_len;
        }
  #   else
!       /* It was already remapped with PROT_NONE. */
!       int result; 
! 
        if (0 == start_addr) return;
!       result = mprotect(start_addr, len,
! 		        PROT_READ | PROT_WRITE | OPT_PROT_EXEC);
!       if (result != 0) {
! 	  GC_err_printf3(
! 		"Mprotect failed at 0x%lx (length %ld) with errno %ld\n",
! 	        start_addr, len, errno);
! 	  ABORT("Mprotect remapping failed");
        }
        GC_unmapped_bytes -= len;
  #   endif
*************** GC_bool is_ptrfree;
*** 2137,2143 ****
      /* Using vm_protect (mach syscall) over mprotect (BSD syscall) seems to
         decrease the likelihood of some of the problems described below. */
      #include <mach/vm_map.h>
!     extern mach_port_t GC_task_self;
      #define PROTECT(addr,len) \
          if(vm_protect(GC_task_self,(vm_address_t)(addr),(vm_size_t)(len), \
                  FALSE,VM_PROT_READ) != KERN_SUCCESS) { \
--- 2192,2198 ----
      /* Using vm_protect (mach syscall) over mprotect (BSD syscall) seems to
         decrease the likelihood of some of the problems described below. */
      #include <mach/vm_map.h>
!     static mach_port_t GC_task_self;
      #define PROTECT(addr,len) \
          if(vm_protect(GC_task_self,(vm_address_t)(addr),(vm_size_t)(len), \
                  FALSE,VM_PROT_READ) != KERN_SUCCESS) { \
*************** GC_bool is_ptrfree;
*** 2170,2178 ****
  # endif /* !DARWIN */
  # endif /* MSWIN32 || MSWINCE || DARWIN */
  
! #if defined(SUNOS4) || defined(FREEBSD)
      typedef void (* SIG_PF)();
! #endif /* SUNOS4 || FREEBSD */
  
  #if defined(SUNOS5SIGS) || defined(OSF1) || defined(LINUX) \
      || defined(HURD)
--- 2225,2233 ----
  # endif /* !DARWIN */
  # endif /* MSWIN32 || MSWINCE || DARWIN */
  
! #if defined(SUNOS4) || (defined(FREEBSD) && !defined(SUNOS5SIGS))
      typedef void (* SIG_PF)();
! #endif /* SUNOS4 || (FREEBSD && !SUNOS5SIGS) */
  
  #if defined(SUNOS5SIGS) || defined(OSF1) || defined(LINUX) \
      || defined(HURD)
*************** GC_bool is_ptrfree;
*** 2199,2211 ****
  #endif /* IRIX5 || OSF1 || HURD */
  
  #if defined(SUNOS5SIGS)
! # ifdef HPUX
! #   define SIGINFO __siginfo
  # else
! #   define SIGINFO siginfo
  # endif
  # ifdef __STDC__
!     typedef void (* REAL_SIG_PF)(int, struct SIGINFO *, void *);
  # else
      typedef void (* REAL_SIG_PF)();
  # endif
--- 2254,2266 ----
  #endif /* IRIX5 || OSF1 || HURD */
  
  #if defined(SUNOS5SIGS)
! # if defined(HPUX) || defined(FREEBSD)
! #   define SIGINFO_T siginfo_t
  # else
! #   define SIGINFO_T struct siginfo
  # endif
  # ifdef __STDC__
!     typedef void (* REAL_SIG_PF)(int, SIGINFO_T *, void *);
  # else
      typedef void (* REAL_SIG_PF)();
  # endif
*************** GC_bool is_ptrfree;
*** 2225,2232 ****
  #   if defined(ALPHA) || defined(M68K)
        typedef void (* REAL_SIG_PF)(int, int, s_c *);
  #   else
! #     if defined(IA64) || defined(HP_PA)
          typedef void (* REAL_SIG_PF)(int, siginfo_t *, s_c *);
  #     else
          typedef void (* REAL_SIG_PF)(int, s_c);
  #     endif
--- 2280,2290 ----
  #   if defined(ALPHA) || defined(M68K)
        typedef void (* REAL_SIG_PF)(int, int, s_c *);
  #   else
! #     if defined(IA64) || defined(HP_PA) || defined(X86_64)
          typedef void (* REAL_SIG_PF)(int, siginfo_t *, s_c *);
+ 	/* FIXME:						  */
+ 	/* According to SUSV3, the last argument should have type */
+ 	/* void * or ucontext_t *				  */
  #     else
          typedef void (* REAL_SIG_PF)(int, s_c);
  #     endif
*************** SIG_PF GC_old_segv_handler;	/* Also old 
*** 2301,2307 ****
  
  /*ARGSUSED*/
  #if !defined(DARWIN)
! # if defined (SUNOS4) || defined(FREEBSD)
      void GC_write_fault_handler(sig, code, scp, addr)
      int sig, code;
      struct sigcontext *scp;
--- 2359,2365 ----
  
  /*ARGSUSED*/
  #if !defined(DARWIN)
! # if defined (SUNOS4) || (defined(FREEBSD) && !defined(SUNOS5SIGS))
      void GC_write_fault_handler(sig, code, scp, addr)
      int sig, code;
      struct sigcontext *scp;
*************** SIG_PF GC_old_segv_handler;	/* Also old 
*** 2316,2322 ****
  #     define SIG_OK (sig == SIGBUS)
  #     define CODE_OK (code == BUS_PAGE_FAULT)
  #   endif
! # endif /* SUNOS4 || FREEBSD */
  
  # if defined(IRIX5) || defined(OSF1) || defined(HURD)
  #   include <errno.h>
--- 2374,2380 ----
  #     define SIG_OK (sig == SIGBUS)
  #     define CODE_OK (code == BUS_PAGE_FAULT)
  #   endif
! # endif /* SUNOS4 || (FREEBSD && !SUNOS5SIGS) */
  
  # if defined(IRIX5) || defined(OSF1) || defined(HURD)
  #   include <errno.h>
*************** SIG_PF GC_old_segv_handler;	/* Also old 
*** 2339,2345 ****
  #   if defined(ALPHA) || defined(M68K)
        void GC_write_fault_handler(int sig, int code, s_c * sc)
  #   else
! #     if defined(IA64) || defined(HP_PA)
          void GC_write_fault_handler(int sig, siginfo_t * si, s_c * scp)
  #     else
  #       if defined(ARM32)
--- 2397,2403 ----
  #   if defined(ALPHA) || defined(M68K)
        void GC_write_fault_handler(int sig, int code, s_c * sc)
  #   else
! #     if defined(IA64) || defined(HP_PA) || defined(X86_64)
          void GC_write_fault_handler(int sig, siginfo_t * si, s_c * scp)
  #     else
  #       if defined(ARM32)
*************** SIG_PF GC_old_segv_handler;	/* Also old 
*** 2358,2368 ****
  
  # if defined(SUNOS5SIGS)
  #  ifdef __STDC__
!     void GC_write_fault_handler(int sig, struct SIGINFO *scp, void * context)
  #  else
      void GC_write_fault_handler(sig, scp, context)
      int sig;
!     struct SIGINFO *scp;
      void * context;
  #  endif
  #   ifdef HPUX
--- 2416,2426 ----
  
  # if defined(SUNOS5SIGS)
  #  ifdef __STDC__
!     void GC_write_fault_handler(int sig, SIGINFO_T *scp, void * context)
  #  else
      void GC_write_fault_handler(sig, scp, context)
      int sig;
!     SIGINFO_T *scp;
      void * context;
  #  endif
  #   ifdef HPUX
*************** SIG_PF GC_old_segv_handler;	/* Also old 
*** 2373,2381 ****
  		     || (scp -> si_code == SEGV_UNKNOWN) \
  		     || (scp -> si_code == BUS_OBJERR)
  #   else
! #     define SIG_OK (sig == SIGSEGV)
! #     define CODE_OK (scp -> si_code == SEGV_ACCERR)
! #   endif
  # endif /* SUNOS5SIGS */
  
  # if defined(MSWIN32) || defined(MSWINCE)
--- 2431,2444 ----
  		     || (scp -> si_code == SEGV_UNKNOWN) \
  		     || (scp -> si_code == BUS_OBJERR)
  #   else
! #     ifdef FREEBSD
! #       define SIG_OK (sig == SIGBUS)
! #       define CODE_OK (scp -> si_code == BUS_PAGE_FAULT)
! #     else
! #       define SIG_OK (sig == SIGSEGV)
! #       define CODE_OK (scp -> si_code == SEGV_ACCERR)
! #     endif
! #   endif    
  # endif /* SUNOS5SIGS */
  
  # if defined(MSWIN32) || defined(MSWINCE)
*************** SIG_PF GC_old_segv_handler;	/* Also old 
*** 2400,2406 ****
  	char * addr = (char *) (scp -> si_addr);
  #   endif
  #   ifdef LINUX
! #     if defined(I386) || defined (X86_64)
  	char * addr = (char *) (sc.cr2);
  #     else
  #	if defined(M68K)
--- 2463,2469 ----
  	char * addr = (char *) (scp -> si_addr);
  #   endif
  #   ifdef LINUX
! #     if defined(I386)
  	char * addr = (char *) (sc.cr2);
  #     else
  #	if defined(M68K)
*************** SIG_PF GC_old_segv_handler;	/* Also old 
*** 2435,2441 ****
  #	  ifdef ALPHA
              char * addr = get_fault_addr(sc);
  #	  else
! #	    if defined(IA64) || defined(HP_PA)
  	      char * addr = si -> si_addr;
  	      /* I believe this is claimed to work on all platforms for	*/
  	      /* Linux 2.3.47 and later.  Hopefully we don't have to	*/
--- 2498,2504 ----
  #	  ifdef ALPHA
              char * addr = get_fault_addr(sc);
  #	  else
! #	    if defined(IA64) || defined(HP_PA) || defined(X86_64)
  	      char * addr = si -> si_addr;
  	      /* I believe this is claimed to work on all platforms for	*/
  	      /* Linux 2.3.47 and later.  Hopefully we don't have to	*/
*************** SIG_PF GC_old_segv_handler;	/* Also old 
*** 2478,2483 ****
--- 2541,2550 ----
  	    in_allocd_block = (HDR(addr) != 0);
  #	endif
          if (!in_allocd_block) {
+ 	    /* FIXME - We should make sure that we invoke the	*/
+ 	    /* old handler with the appropriate calling 	*/
+ 	    /* sequence, which often depends on SA_SIGINFO.	*/
+ 
  	    /* Heap blocks now begin and end on page boundaries */
              SIG_PF old_handler;
              
*************** SIG_PF GC_old_segv_handler;	/* Also old 
*** 2494,2504 ****
  		    return(EXCEPTION_CONTINUE_SEARCH);
  #		endif
              } else {
! #		if defined (SUNOS4) || defined(FREEBSD)
  		    (*old_handler) (sig, code, scp, addr);
  		    return;
  #		endif
  #		if defined (SUNOS5SIGS)
  		    (*(REAL_SIG_PF)old_handler) (sig, scp, context);
  		    return;
  #		endif
--- 2561,2577 ----
  		    return(EXCEPTION_CONTINUE_SEARCH);
  #		endif
              } else {
! #		if defined (SUNOS4) \
!                     || (defined(FREEBSD) && !defined(SUNOS5SIGS))
  		    (*old_handler) (sig, code, scp, addr);
  		    return;
  #		endif
  #		if defined (SUNOS5SIGS)
+                     /*
+                      * FIXME: For FreeBSD, this code should check if the 
+                      * old signal handler used the traditional BSD style and
+                      * if so call it using that style.
+                      */
  		    (*(REAL_SIG_PF)old_handler) (sig, scp, context);
  		    return;
  #		endif
*************** SIG_PF GC_old_segv_handler;	/* Also old 
*** 2506,2512 ****
  #		    if defined(ALPHA) || defined(M68K)
  		        (*(REAL_SIG_PF)old_handler) (sig, code, sc);
  #		    else 
! #		      if defined(IA64) || defined(HP_PA)
  		        (*(REAL_SIG_PF)old_handler) (sig, si, scp);
  #		      else
  		        (*(REAL_SIG_PF)old_handler) (sig, sc);
--- 2579,2585 ----
  #		    if defined(ALPHA) || defined(M68K)
  		        (*(REAL_SIG_PF)old_handler) (sig, code, sc);
  #		    else 
! #		      if defined(IA64) || defined(HP_PA) || defined(X86_64)
  		        (*(REAL_SIG_PF)old_handler) (sig, si, scp);
  #		      else
  		        (*(REAL_SIG_PF)old_handler) (sig, sc);
*************** void GC_dirty_init()
*** 2600,2606 ****
        struct sigaction	act, oldact;
        /* We should probably specify SA_SIGINFO for Linux, and handle 	*/
        /* the different architectures more uniformly.			*/
! #     if defined(IRIX5) || defined(LINUX) || defined(OSF1) || defined(HURD)
      	act.sa_flags	= SA_RESTART;
          act.sa_handler  = (SIG_PF)GC_write_fault_handler;
  #     else
--- 2673,2680 ----
        struct sigaction	act, oldact;
        /* We should probably specify SA_SIGINFO for Linux, and handle 	*/
        /* the different architectures more uniformly.			*/
! #     if defined(IRIX5) || defined(LINUX) && !defined(X86_64) \
! 	 || defined(OSF1) || defined(HURD)
      	act.sa_flags	= SA_RESTART;
          act.sa_handler  = (SIG_PF)GC_write_fault_handler;
  #     else
*************** void GC_dirty_init()
*** 2623,2629 ****
          GC_err_printf0("Page size not multiple of HBLKSIZE\n");
          ABORT("Page size not multiple of HBLKSIZE");
      }
! #   if defined(SUNOS4) || defined(FREEBSD)
        GC_old_bus_handler = signal(SIGBUS, GC_write_fault_handler);
        if (GC_old_bus_handler == SIG_IGN) {
          GC_err_printf0("Previously ignored bus error!?");
--- 2697,2703 ----
          GC_err_printf0("Page size not multiple of HBLKSIZE\n");
          ABORT("Page size not multiple of HBLKSIZE");
      }
! #   if defined(SUNOS4) || (defined(FREEBSD) && !defined(SUNOS5SIGS))
        GC_old_bus_handler = signal(SIGBUS, GC_write_fault_handler);
        if (GC_old_bus_handler == SIG_IGN) {
          GC_err_printf0("Previously ignored bus error!?");
*************** void GC_dirty_init()
*** 2647,2659 ****
  #	endif
        }
  #   endif
! #   if defined(SUNOS5SIGS) || defined(IRIX5) || defined(LINUX) \
!        || defined(OSF1) || defined(HURD)
        /* SUNOS5SIGS includes HPUX */
  #     if defined(GC_IRIX_THREADS)
        	sigaction(SIGSEGV, 0, &oldact);
        	sigaction(SIGSEGV, &act, 0);
! #     else
  	{
  	  int res = sigaction(SIGSEGV, &act, &oldact);
  	  if (res != 0) ABORT("Sigaction failed");
--- 2721,2733 ----
  #	endif
        }
  #   endif
! #   if (defined(SUNOS5SIGS) && !defined(FREEBSD)) || defined(IRIX5) \
!        || defined(LINUX) || defined(OSF1) || defined(HURD)
        /* SUNOS5SIGS includes HPUX */
  #     if defined(GC_IRIX_THREADS)
        	sigaction(SIGSEGV, 0, &oldact);
        	sigaction(SIGSEGV, &act, 0);
! #     else 
  	{
  	  int res = sigaction(SIGSEGV, &act, &oldact);
  	  if (res != 0) ABORT("Sigaction failed");
*************** void GC_dirty_init()
*** 2679,2686 ****
  	  GC_err_printf0("Replaced other SIGSEGV handler\n");
  #       endif
        }
! #   endif
! #   if defined(HPUX) || defined(LINUX) || defined(HURD)
        sigaction(SIGBUS, &act, &oldact);
        GC_old_bus_handler = oldact.sa_handler;
        if (GC_old_bus_handler == SIG_IGN) {
--- 2753,2761 ----
  	  GC_err_printf0("Replaced other SIGSEGV handler\n");
  #       endif
        }
! #   endif /* (SUNOS5SIGS && !FREEBSD) || IRIX5 || LINUX || OSF1 || HURD */
! #   if defined(HPUX) || defined(LINUX) || defined(HURD) \
!       || (defined(FREEBSD) && defined(SUNOS5SIGS))
        sigaction(SIGBUS, &act, &oldact);
        GC_old_bus_handler = oldact.sa_handler;
        if (GC_old_bus_handler == SIG_IGN) {
*************** void GC_dirty_init()
*** 2692,2698 ****
  	  GC_err_printf0("Replaced other SIGBUS handler\n");
  #       endif
        }
! #   endif /* HPUX || LINUX || HURD */
  #   if defined(MSWIN32)
        GC_old_segv_handler = SetUnhandledExceptionFilter(GC_write_fault_handler);
        if (GC_old_segv_handler != NULL) {
--- 2767,2773 ----
  	  GC_err_printf0("Replaced other SIGBUS handler\n");
  #       endif
        }
! #   endif /* HPUX || LINUX || HURD || (FREEBSD && SUNOS5SIGS) */
  #   if defined(MSWIN32)
        GC_old_segv_handler = SetUnhandledExceptionFilter(GC_write_fault_handler);
        if (GC_old_segv_handler != NULL) {
*************** word n;
*** 2977,2983 ****
  #include <sys/procfs.h>
  #include <sys/stat.h>
  
! #define INITIAL_BUF_SZ 4096
  word GC_proc_buf_size = INITIAL_BUF_SZ;
  char *GC_proc_buf;
  
--- 3052,3058 ----
  #include <sys/procfs.h>
  #include <sys/stat.h>
  
! #define INITIAL_BUF_SZ 16384
  word GC_proc_buf_size = INITIAL_BUF_SZ;
  char *GC_proc_buf;
  
*************** int dummy;
*** 3091,3097 ****
                  GC_proc_buf = bufp = new_buf;
                  GC_proc_buf_size = new_size;
              }
!             if (syscall(SYS_read, GC_proc_fd, bufp, GC_proc_buf_size) <= 0) {
                  WARN("Insufficient space for /proc read\n", 0);
                  /* Punt:	*/
          	memset(GC_grungy_pages, 0xff, sizeof (page_hash_table));
--- 3166,3172 ----
                  GC_proc_buf = bufp = new_buf;
                  GC_proc_buf_size = new_size;
              }
!             if (READ(GC_proc_fd, bufp, GC_proc_buf_size) <= 0) {
                  WARN("Insufficient space for /proc read\n", 0);
                  /* Punt:	*/
          	memset(GC_grungy_pages, 0xff, sizeof (page_hash_table));
*************** extern kern_return_t exception_raise_sta
*** 3312,3319 ****
  
  #define MAX_EXCEPTION_PORTS 16
  
- static mach_port_t GC_task_self;
- 
  static struct {
      mach_msg_type_number_t count;
      exception_mask_t      masks[MAX_EXCEPTION_PORTS];
--- 3387,3392 ----
*************** static void *GC_mprotect_thread(void *ar
*** 3431,3436 ****
--- 3504,3511 ----
      } msg;
  
      mach_msg_id_t id;
+ 
+     GC_darwin_register_mach_handler_thread(mach_thread_self());
      
      for(;;) {
          r = mach_msg(
*************** kern_return_t catch_exception_raise_stat
*** 3888,3900 ****
  
  #endif /* NEED_CALLINFO */
  
  #ifdef SAVE_CALL_CHAIN
  
  #if NARGS == 0 && NFRAMES % 2 == 0 /* No padding */ \
      && defined(GC_HAVE_BUILTIN_BACKTRACE)
  
- #include <execinfo.h>
- 
  void GC_save_callers (info) 
  struct callinfo info[NFRAMES];
  {
--- 3963,3977 ----
  
  #endif /* NEED_CALLINFO */
  
+ #if defined(GC_HAVE_BUILTIN_BACKTRACE)
+ # include <execinfo.h>
+ #endif
+ 
  #ifdef SAVE_CALL_CHAIN
  
  #if NARGS == 0 && NFRAMES % 2 == 0 /* No padding */ \
      && defined(GC_HAVE_BUILTIN_BACKTRACE)
  
  void GC_save_callers (info) 
  struct callinfo info[NFRAMES];
  {
*************** struct callinfo info[NFRAMES];
*** 3970,3975 ****
--- 4047,4054 ----
      static int reentry_count = 0;
      GC_bool stop = FALSE;
  
+     /* FIXME: This should probably use a different lock, so that we	*/
+     /* become callable with or without the allocation lock.		*/
      LOCK();
        ++reentry_count;
      UNLOCK();
*************** struct callinfo info[NFRAMES];
*** 4004,4010 ****
  #	  ifdef LINUX
  	    FILE *pipe;
  #	  endif
! #	  if defined(GC_HAVE_BUILTIN_BACKTRACE)
  	    char **sym_name =
  	      backtrace_symbols((void **)(&(info[i].ci_pc)), 1);
  	    char *name = sym_name[0];
--- 4083,4090 ----
  #	  ifdef LINUX
  	    FILE *pipe;
  #	  endif
! #	  if defined(GC_HAVE_BUILTIN_BACKTRACE) \
! 	     && !defined(GC_BACKTRACE_SYMBOLS_BROKEN)
  	    char **sym_name =
  	      backtrace_symbols((void **)(&(info[i].ci_pc)), 1);
  	    char *name = sym_name[0];
*************** struct callinfo info[NFRAMES];
*** 4023,4028 ****
--- 4103,4111 ----
  #		define RESULT_SZ 200
  		static char result_buf[RESULT_SZ];
  		size_t result_len;
+ 		char *old_preload;
+ #		define PRELOAD_SZ 200
+     		char preload_buf[PRELOAD_SZ];
  		static GC_bool found_exe_name = FALSE;
  		static GC_bool will_fail = FALSE;
  		int ret_code;
*************** struct callinfo info[NFRAMES];
*** 4044,4050 ****
--- 4127,4146 ----
  		/* isn't time critical.					*/
  		sprintf(cmd_buf, "/usr/bin/addr2line -f -e %s 0x%lx", exe_name,
  				 (unsigned long)info[i].ci_pc);
+ 		old_preload = getenv ("LD_PRELOAD");
+ 	        if (0 != old_preload) {
+ 		  if (strlen (old_preload) >= PRELOAD_SZ) {
+ 		    will_fail = TRUE;
+ 		    goto out;
+ 		  }
+ 		  strcpy (preload_buf, old_preload);
+ 		  unsetenv ("LD_PRELOAD");
+ 	        }
  		pipe = popen(cmd_buf, "r");
+ 		if (0 != old_preload
+ 		    && 0 != setenv ("LD_PRELOAD", preload_buf, 0)) {
+ 		  WARN("Failed to reset LD_PRELOAD\n", 0);
+       		}
  		if (pipe == NULL
  		    || (result_len = fread(result_buf, 1, RESULT_SZ - 1, pipe))
  		       == 0) {
*************** struct callinfo info[NFRAMES];
*** 4081,4087 ****
  	    }
  #	  endif /* LINUX */
  	  GC_err_printf1("\t\t%s\n", name);
! #	  if defined(GC_HAVE_BUILTIN_BACKTRACE)
  	    free(sym_name);  /* May call GC_free; that's OK */
  #         endif
  	}
--- 4177,4184 ----
  	    }
  #	  endif /* LINUX */
  	  GC_err_printf1("\t\t%s\n", name);
! #	  if defined(GC_HAVE_BUILTIN_BACKTRACE) \
! 	     && !defined(GC_BACKTRACE_SYMBOLS_BROKEN)
  	    free(sym_name);  /* May call GC_free; that's OK */
  #         endif
  	}
diff -Nrcpad gcc-3.4.3/boehm-gc/powerpc_darwin_mach_dep.s gcc-4.0.0/boehm-gc/powerpc_darwin_mach_dep.s
*** gcc-3.4.3/boehm-gc/powerpc_darwin_mach_dep.s	Mon Jul 28 03:46:10 2003
--- gcc-4.0.0/boehm-gc/powerpc_darwin_mach_dep.s	Sun Aug 15 21:32:11 2004
*************** _GC_push_regs:
*** 64,70 ****
  ; PIC stuff, generated by GCC
  
  .data
! .picsymbol_stub
  L_GC_push_one$stub:
  	.indirect_symbol _GC_push_one
  	mflr r0
--- 64,71 ----
  ; PIC stuff, generated by GCC
  
  .data
! .section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
! 	.align 2
  L_GC_push_one$stub:
  	.indirect_symbol _GC_push_one
  	mflr r0
*************** L0$_GC_push_one:
*** 73,81 ****
  	mflr r11
  	addis r11,r11,ha16(L_GC_push_one$lazy_ptr-L0$_GC_push_one)
  	mtlr r0
! 	lwz r12,lo16(L_GC_push_one$lazy_ptr-L0$_GC_push_one)(r11)
  	mtctr r12
- 	addi r11,r11,lo16(L_GC_push_one$lazy_ptr-L0$_GC_push_one)
  	bctr
  .data
  .lazy_symbol_pointer
--- 74,81 ----
  	mflr r11
  	addis r11,r11,ha16(L_GC_push_one$lazy_ptr-L0$_GC_push_one)
  	mtlr r0
! 	lwzu r12,lo16(L_GC_push_one$lazy_ptr-L0$_GC_push_one)(r11)
  	mtctr r12
  	bctr
  .data
  .lazy_symbol_pointer
diff -Nrcpad gcc-3.4.3/boehm-gc/pthread_stop_world.c gcc-4.0.0/boehm-gc/pthread_stop_world.c
*** gcc-3.4.3/boehm-gc/pthread_stop_world.c	Mon Jul 28 03:46:09 2003
--- gcc-4.0.0/boehm-gc/pthread_stop_world.c	Wed Feb  9 21:33:02 2005
*************** void GC_print_sig_mask()
*** 39,44 ****
--- 39,72 ----
  
  #endif
  
+ /* Remove the signals that we want to allow in thread stopping 	*/
+ /* handler from a set.						*/
+ void GC_remove_allowed_signals(sigset_t *set)
+ {
+ #   ifdef NO_SIGNALS
+       if (sigdelset(set, SIGINT) != 0
+ 	  || sigdelset(set, SIGQUIT) != 0
+ 	  || sigdelset(set, SIGABRT) != 0
+ 	  || sigdelset(set, SIGTERM) != 0) {
+         ABORT("sigdelset() failed");
+       }
+ #   endif
+ 
+ #   ifdef MPROTECT_VDB
+       /* Handlers write to the thread structure, which is in the heap,	*/
+       /* and hence can trigger a protection fault.			*/
+       if (sigdelset(set, SIGSEGV) != 0
+ #	  ifdef SIGBUS
+ 	    || sigdelset(set, SIGBUS) != 0
+ # 	  endif
+ 	  ) {
+         ABORT("sigdelset() failed");
+       }
+ #   endif
+ }
+ 
+ static sigset_t suspend_handler_mask;
+ 
  word GC_stop_count;	/* Incremented at the beginning of GC_stop_world. */
  
  #ifdef GC_OSF1_THREADS
*************** word GC_stop_count;	/* Incremented at th
*** 73,84 ****
  
  sem_t GC_suspend_ack_sem;
  
  void GC_suspend_handler(int sig)
  {
      int dummy;
      pthread_t my_thread = pthread_self();
      GC_thread me;
-     sigset_t mask;
  #   ifdef PARALLEL_MARK
  	word my_mark_no = GC_mark_no;
  	/* Marker can't proceed until we acknowledge.  Thus this is	*/
--- 101,131 ----
  
  sem_t GC_suspend_ack_sem;
  
+ void GC_suspend_handler_inner(ptr_t sig_arg);
+ 
+ #if defined(IA64) || defined(HP_PA)
+ extern void GC_with_callee_saves_pushed();
+ 
  void GC_suspend_handler(int sig)
  {
+   GC_with_callee_saves_pushed(GC_suspend_handler_inner, (ptr_t)(word)sig);
+ }
+ 
+ #else
+ /* We believe that in all other cases the full context is already	*/
+ /* in the signal handler frame.						*/
+ void GC_suspend_handler(int sig)
+ {
+   GC_suspend_handler_inner((ptr_t)(word)sig);
+ }
+ #endif
+ 
+ void GC_suspend_handler_inner(ptr_t sig_arg)
+ {
+     int sig = (int)(word)sig_arg;
      int dummy;
      pthread_t my_thread = pthread_self();
      GC_thread me;
  #   ifdef PARALLEL_MARK
  	word my_mark_no = GC_mark_no;
  	/* Marker can't proceed until we acknowledge.  Thus this is	*/
*************** void GC_suspend_handler(int sig)
*** 125,141 ****
      /* this thread a SIG_THR_RESTART signal.			*/
      /* SIG_THR_RESTART should be masked at this point.  Thus there	*/
      /* is no race.						*/
-     if (sigfillset(&mask) != 0) ABORT("sigfillset() failed");
-     if (sigdelset(&mask, SIG_THR_RESTART) != 0) ABORT("sigdelset() failed");
- #   ifdef NO_SIGNALS
-       if (sigdelset(&mask, SIGINT) != 0) ABORT("sigdelset() failed");
-       if (sigdelset(&mask, SIGQUIT) != 0) ABORT("sigdelset() failed");
-       if (sigdelset(&mask, SIGTERM) != 0) ABORT("sigdelset() failed");
-       if (sigdelset(&mask, SIGABRT) != 0) ABORT("sigdelset() failed");
- #   endif
      do {
  	    me->stop_info.signal = 0;
! 	    sigsuspend(&mask);             /* Wait for signal */
      } while (me->stop_info.signal != SIG_THR_RESTART);
      /* If the RESTART signal gets lost, we can still lose.  That should be  */
      /* less likely than losing the SUSPEND signal, since we don't do much   */
--- 172,180 ----
      /* this thread a SIG_THR_RESTART signal.			*/
      /* SIG_THR_RESTART should be masked at this point.  Thus there	*/
      /* is no race.						*/
      do {
  	    me->stop_info.signal = 0;
! 	    sigsuspend(&suspend_handler_mask);        /* Wait for signal */
      } while (me->stop_info.signal != SIG_THR_RESTART);
      /* If the RESTART signal gets lost, we can still lose.  That should be  */
      /* less likely than losing the SUSPEND signal, since we don't do much   */
*************** void GC_restart_handler(int sig)
*** 186,191 ****
--- 225,231 ----
  /* world is stopped.  Should not fail if it isn't.			*/
  void GC_push_all_stacks()
  {
+     GC_bool found_me = FALSE;
      int i;
      GC_thread p;
      ptr_t lo, hi;
*************** void GC_push_all_stacks()
*** 206,211 ****
--- 246,252 ----
  #  	    else
   	        lo = GC_approx_sp();
  #           endif
+ 	    found_me = TRUE;
  	    IF_IA64(bs_hi = (ptr_t)GC_save_regs_in_stack();)
  	} else {
  	    lo = p -> stop_info.stack_ptr;
*************** void GC_push_all_stacks()
*** 232,237 ****
--- 273,283 ----
            GC_push_all_stack(lo, hi);
  #	endif
  #	ifdef IA64
+ #         if DEBUG_THREADS
+             GC_printf3("Reg stack for thread 0x%lx = [%lx,%lx)\n",
+     	        (unsigned long) p -> id,
+ 		(unsigned long) bs_lo, (unsigned long) bs_hi);
+ #	  endif
            if (pthread_equal(p -> id, me)) {
  	    GC_push_all_eager(bs_lo, bs_hi);
  	  } else {
*************** void GC_push_all_stacks()
*** 240,245 ****
--- 286,293 ----
  #	endif
        }
      }
+     if (!found_me && !GC_in_thread_creation)
+       ABORT("Collecting from unknown thread.");
  }
  
  /* There seems to be a very rare thread stopping problem.  To help us  */
*************** void GC_stop_world()
*** 341,349 ****
  	  }
        }
      for (i = 0; i < n_live_threads; i++) {
! 	  if (0 != (code = sem_wait(&GC_suspend_ack_sem))) {
  	      GC_err_printf1("Sem_wait returned %ld\n", (unsigned long)code);
  	      ABORT("sem_wait for handler failed");
  	  }
      }
  #   ifdef PARALLEL_MARK
--- 389,399 ----
  	  }
        }
      for (i = 0; i < n_live_threads; i++) {
! 	  while (0 != (code = sem_wait(&GC_suspend_ack_sem))) {
! 	    if (errno != EINTR) {
  	      GC_err_printf1("Sem_wait returned %ld\n", (unsigned long)code);
  	      ABORT("sem_wait for handler failed");
+ 	    }
  	  }
      }
  #   ifdef PARALLEL_MARK
*************** void GC_stop_init() {
*** 408,423 ****
      if (sigfillset(&act.sa_mask) != 0) {
      	ABORT("sigfillset() failed");
      }
! #   ifdef NO_SIGNALS
!       if (sigdelset(&act.sa_mask, SIGINT) != 0
! 	  || sigdelset(&act.sa_mask, SIGQUIT != 0)
! 	  || sigdelset(&act.sa_mask, SIGABRT != 0)
! 	  || sigdelset(&act.sa_mask, SIGTERM != 0)) {
!         ABORT("sigdelset() failed");
!       }
! #   endif
! 
!     /* SIG_THR_RESTART is unmasked by the handler when necessary. 	*/
      act.sa_handler = GC_suspend_handler;
      if (sigaction(SIG_SUSPEND, &act, NULL) != 0) {
      	ABORT("Cannot set SIG_SUSPEND handler");
--- 458,466 ----
      if (sigfillset(&act.sa_mask) != 0) {
      	ABORT("sigfillset() failed");
      }
!     GC_remove_allowed_signals(&act.sa_mask);
!     /* SIG_THR_RESTART is set in the resulting mask.		*/
!     /* It is unmasked by the handler when necessary. 		*/
      act.sa_handler = GC_suspend_handler;
      if (sigaction(SIG_SUSPEND, &act, NULL) != 0) {
      	ABORT("Cannot set SIG_SUSPEND handler");
*************** void GC_stop_init() {
*** 428,433 ****
--- 471,482 ----
      	ABORT("Cannot set SIG_THR_RESTART handler");
      }
  
+     /* Inititialize suspend_handler_mask. It excludes SIG_THR_RESTART. */
+       if (sigfillset(&suspend_handler_mask) != 0) ABORT("sigfillset() failed");
+       GC_remove_allowed_signals(&suspend_handler_mask);
+       if (sigdelset(&suspend_handler_mask, SIG_THR_RESTART) != 0)
+ 	  ABORT("sigdelset() failed");
+ 
      /* Check for GC_RETRY_SIGNALS.	*/
        if (0 != GETENV("GC_RETRY_SIGNALS")) {
  	  GC_retry_signals = TRUE;
diff -Nrcpad gcc-3.4.3/boehm-gc/pthread_support.c gcc-4.0.0/boehm-gc/pthread_support.c
*** gcc-3.4.3/boehm-gc/pthread_support.c	Mon Jul 28 03:46:09 2003
--- gcc-4.0.0/boehm-gc/pthread_support.c	Fri Aug 13 23:05:30 2004
***************
*** 47,52 ****
--- 47,53 ----
  /*#define DEBUG_THREADS 1*/
  /*#define GC_ASSERTIONS*/
  
+ # include "gc.h"
  # include "private/pthread_support.h"
  
  # if defined(GC_PTHREADS) && !defined(GC_SOLARIS_THREADS) \
***************
*** 54,61 ****
       && !defined(GC_AIX_THREADS)
  
  # if defined(GC_HPUX_THREADS) && !defined(USE_PTHREAD_SPECIFIC) \
!      && !defined(USE_HPUX_TLS)
! #   define USE_HPUX_TLS
  # endif
  
  # if (defined(GC_DGUX386_THREADS) || defined(GC_OSF1_THREADS) || \
--- 55,71 ----
       && !defined(GC_AIX_THREADS)
  
  # if defined(GC_HPUX_THREADS) && !defined(USE_PTHREAD_SPECIFIC) \
!      && !defined(USE_COMPILER_TLS)
! #   ifdef __GNUC__
! #     define USE_PTHREAD_SPECIFIC
!       /* Empirically, as of gcc 3.3, USE_COMPILER_TLS doesn't work.	*/
! #   else
! #     define USE_COMPILER_TLS
! #   endif
! # endif
! 
! # if defined USE_HPUX_TLS
!     --> Macro replaced by USE_COMPILER_TLS
  # endif
  
  # if (defined(GC_DGUX386_THREADS) || defined(GC_OSF1_THREADS) || \
***************
*** 72,78 ****
  # endif
  
  # ifdef THREAD_LOCAL_ALLOC
! #   if !defined(USE_PTHREAD_SPECIFIC) && !defined(USE_HPUX_TLS)
  #     include "private/specific.h"
  #   endif
  #   if defined(USE_PTHREAD_SPECIFIC)
--- 82,88 ----
  # endif
  
  # ifdef THREAD_LOCAL_ALLOC
! #   if !defined(USE_PTHREAD_SPECIFIC) && !defined(USE_COMPILER_TLS)
  #     include "private/specific.h"
  #   endif
  #   if defined(USE_PTHREAD_SPECIFIC)
***************
*** 81,87 ****
  #     define GC_key_create pthread_key_create
        typedef pthread_key_t GC_key_t;
  #   endif
! #   if defined(USE_HPUX_TLS)
  #     define GC_getspecific(x) (x)
  #     define GC_setspecific(key, v) ((key) = (v), 0)
  #     define GC_key_create(key, d) 0
--- 91,97 ----
  #     define GC_key_create pthread_key_create
        typedef pthread_key_t GC_key_t;
  #   endif
! #   if defined(USE_COMPILER_TLS)
  #     define GC_getspecific(x) (x)
  #     define GC_setspecific(key, v) ((key) = (v), 0)
  #     define GC_key_create(key, d) 0
***************
*** 99,104 ****
--- 109,115 ----
  # include <sys/types.h>
  # include <sys/stat.h>
  # include <fcntl.h>
+ # include <signal.h>
  
  #if defined(GC_DARWIN_THREADS)
  # include "private/darwin_semaphore.h"
*************** void GC_init_parallel();
*** 158,164 ****
  
  /* We don't really support thread-local allocation with DBG_HDRS_ALL */
  
! #ifdef USE_HPUX_TLS
    __thread
  #endif
  GC_key_t GC_thread_key;
--- 169,175 ----
  
  /* We don't really support thread-local allocation with DBG_HDRS_ALL */
  
! #ifdef USE_COMPILER_TLS
    __thread
  #endif
  GC_key_t GC_thread_key;
*************** static __inline__ void start_mark_thread
*** 500,518 ****
  
  #endif /* !PARALLEL_MARK */
  
- /* Defining INSTALL_LOOPING_SEGV_HANDLER causes SIGSEGV and SIGBUS to 	*/
- /* result in an infinite loop in a signal handler.  This can be very	*/
- /* useful for debugging, since (as of RH7) gdb still seems to have	*/
- /* serious problems with threads.					*/
- #ifdef INSTALL_LOOPING_SEGV_HANDLER
- void GC_looping_handler(int sig)
- {
-     GC_printf3("Signal %ld in thread %lx, pid %ld\n",
- 	       sig, pthread_self(), getpid());
-     for (;;);
- }
- #endif
- 
  GC_bool GC_thr_initialized = FALSE;
  
  volatile GC_thread GC_threads[THREAD_TABLE_SZ];
--- 511,516 ----
*************** void GC_delete_gc_thread(pthread_t id, G
*** 622,628 ****
      GC_INTERNAL_FREE(p);
  }
  
! /* Return a GC_thread corresponding to a given thread_t.	*/
  /* Returns 0 if it's not there.					*/
  /* Caller holds  allocation lock or otherwise inhibits 		*/
  /* updates.							*/
--- 620,626 ----
      GC_INTERNAL_FREE(p);
  }
  
! /* Return a GC_thread corresponding to a given pthread_t.	*/
  /* Returns 0 if it's not there.					*/
  /* Caller holds  allocation lock or otherwise inhibits 		*/
  /* updates.							*/
*************** void GC_wait_for_gc_completion(GC_bool w
*** 747,753 ****
--- 745,753 ----
  	while (GC_incremental && GC_collection_in_progress()
  	       && (wait_for_all || old_gc_no == GC_gc_no)) {
  	    ENTER_GC();
+ 	    GC_in_thread_creation = TRUE;
              GC_collect_a_little_inner(1);
+ 	    GC_in_thread_creation = FALSE;
  	    EXIT_GC();
  	    UNLOCK();
  	    sched_yield();
*************** void GC_thread_exit_proc(void *arg)
*** 1055,1063 ****
  	me -> flags |= FINISHED;
      }
  #   if defined(THREAD_LOCAL_ALLOC) && !defined(USE_PTHREAD_SPECIFIC) \
!        && !defined(USE_HPUX_TLS) && !defined(DBG_HDRS_ALL)
        GC_remove_specific(GC_thread_key);
  #   endif
      GC_wait_for_gc_completion(FALSE);
      UNLOCK();
  }
--- 1055,1064 ----
  	me -> flags |= FINISHED;
      }
  #   if defined(THREAD_LOCAL_ALLOC) && !defined(USE_PTHREAD_SPECIFIC) \
!        && !defined(USE_COMPILER_TLS) && !defined(DBG_HDRS_ALL)
        GC_remove_specific(GC_thread_key);
  #   endif
+     /* The following may run the GC from "nonexistent" thread.	*/
      GC_wait_for_gc_completion(FALSE);
      UNLOCK();
  }
*************** WRAP_FUNC(pthread_detach)(pthread_t thre
*** 1115,1120 ****
--- 1116,1123 ----
      return result;
  }
  
+ GC_bool GC_in_thread_creation = FALSE;
+ 
  void * GC_start_routine(void * arg)
  {
      int dummy;
*************** void * GC_start_routine(void * arg)
*** 1132,1138 ****
--- 1135,1143 ----
          GC_printf1("sp = 0x%lx\n", (long) &arg);
  #   endif
      LOCK();
+     GC_in_thread_creation = TRUE;
      me = GC_new_thread(my_pthread);
+     GC_in_thread_creation = FALSE;
  #ifdef GC_DARWIN_THREADS
      me -> stop_info.mach_thread = mach_thread_self();
  #else
*************** WRAP_FUNC(pthread_create)(pthread_t *new
*** 1301,1312 ****
  void GC_pause()
  {
      int i;
! #	ifndef __GNUC__
!         volatile word dummy = 0;
! #	endif
  
      for (i = 0; i < 10; ++i) { 
! #     ifdef __GNUC__
          __asm__ __volatile__ (" " : : : "memory");
  #     else
  	/* Something that's unlikely to be optimized away. */
--- 1306,1317 ----
  void GC_pause()
  {
      int i;
! #   if !defined(__GNUC__) || defined(__INTEL_COMPILER)
!       volatile word dummy = 0;
! #   endif
  
      for (i = 0; i < 10; ++i) { 
! #     if defined(__GNUC__) && !defined(__INTEL_COMPILER)
          __asm__ __volatile__ (" " : : : "memory");
  #     else
  	/* Something that's unlikely to be optimized away. */
*************** void GC_pause()
*** 1315,1321 ****
      }
  }
      
! #define SPIN_MAX 1024	/* Maximum number of calls to GC_pause before	*/
  			/* give up.					*/
  
  VOLATILE GC_bool GC_collecting = 0;
--- 1320,1326 ----
      }
  }
      
! #define SPIN_MAX 128	/* Maximum number of calls to GC_pause before	*/
  			/* give up.					*/
  
  VOLATILE GC_bool GC_collecting = 0;
*************** VOLATILE GC_bool GC_collecting = 0;
*** 1340,1358 ****
  /* yield by calling pthread_mutex_lock(); it never makes sense to	*/
  /* explicitly sleep.							*/
  
  void GC_generic_lock(pthread_mutex_t * lock)
  {
  #ifndef NO_PTHREAD_TRYLOCK
      unsigned pause_length = 1;
      unsigned i;
      
!     if (0 == pthread_mutex_trylock(lock)) return;
      for (; pause_length <= SPIN_MAX; pause_length <<= 1) {
  	for (i = 0; i < pause_length; ++i) {
  	    GC_pause();
  	}
          switch(pthread_mutex_trylock(lock)) {
  	    case 0:
  		return;
  	    case EBUSY:
  		break;
--- 1345,1378 ----
  /* yield by calling pthread_mutex_lock(); it never makes sense to	*/
  /* explicitly sleep.							*/
  
+ #define LOCK_STATS
+ #ifdef LOCK_STATS
+   unsigned long GC_spin_count = 0;
+   unsigned long GC_block_count = 0;
+   unsigned long GC_unlocked_count = 0;
+ #endif
+ 
  void GC_generic_lock(pthread_mutex_t * lock)
  {
  #ifndef NO_PTHREAD_TRYLOCK
      unsigned pause_length = 1;
      unsigned i;
      
!     if (0 == pthread_mutex_trylock(lock)) {
! #       ifdef LOCK_STATS
! 	    ++GC_unlocked_count;
! #       endif
! 	return;
!     }
      for (; pause_length <= SPIN_MAX; pause_length <<= 1) {
  	for (i = 0; i < pause_length; ++i) {
  	    GC_pause();
  	}
          switch(pthread_mutex_trylock(lock)) {
  	    case 0:
+ #		ifdef LOCK_STATS
+ 		    ++GC_spin_count;
+ #		endif
  		return;
  	    case EBUSY:
  		break;
*************** void GC_generic_lock(pthread_mutex_t * l
*** 1361,1366 ****
--- 1381,1389 ----
          }
      }
  #endif /* !NO_PTHREAD_TRYLOCK */
+ #   ifdef LOCK_STATS
+ 	++GC_block_count;
+ #   endif
      pthread_mutex_lock(lock);
  }
  
diff -Nrcpad gcc-3.4.3/boehm-gc/solaris_pthreads.c gcc-4.0.0/boehm-gc/solaris_pthreads.c
*** gcc-3.4.3/boehm-gc/solaris_pthreads.c	Mon Jul 28 04:18:21 2003
--- gcc-4.0.0/boehm-gc/solaris_pthreads.c	Mon Aug 16 16:32:26 2004
***************
*** 16,23 ****
   * Modified by Peter C. for Solaris Posix Threads.
   */
  
  # if defined(GC_SOLARIS_PTHREADS)
- # include "private/gc_priv.h"
  # include <pthread.h>
  # include <thread.h>
  # include <signal.h>
--- 16,24 ----
   * Modified by Peter C. for Solaris Posix Threads.
   */
  
+ #include "private/gc_priv.h"
+ 
  # if defined(GC_SOLARIS_PTHREADS)
  # include <pthread.h>
  # include <thread.h>
  # include <signal.h>
diff -Nrcpad gcc-3.4.3/boehm-gc/solaris_threads.c gcc-4.0.0/boehm-gc/solaris_threads.c
*** gcc-3.4.3/boehm-gc/solaris_threads.c	Mon Jul 28 04:18:21 2003
--- gcc-4.0.0/boehm-gc/solaris_threads.c	Mon Aug 16 16:32:26 2004
***************
*** 16,24 ****
   */
  /* Boehm, September 14, 1994 4:44 pm PDT */
  
! # if defined(GC_SOLARIS_THREADS) || defined(GC_SOLARIS_PTHREADS)
  
! # include "private/gc_priv.h"
  # include "private/solaris_threads.h"
  # include <thread.h>
  # include <synch.h>
--- 16,24 ----
   */
  /* Boehm, September 14, 1994 4:44 pm PDT */
  
! #include "private/gc_priv.h"
  
! # if defined(GC_SOLARIS_THREADS) || defined(GC_SOLARIS_PTHREADS)
  # include "private/solaris_threads.h"
  # include <thread.h>
  # include <synch.h>
*************** void GC_thr_init(void)
*** 786,791 ****
--- 786,792 ----
  {
      GC_thread t;
      thread_t tid;
+     int ret;
  
      if (GC_thr_initialized)
  	    return;
*************** void GC_thr_init(void)
*** 803,811 ****
        t = GC_new_thread(thr_self());
        t -> stack_size = 0;
        t -> flags = DETACHED | CLIENT_OWNS_STACK;
!     if (thr_create(0 /* stack */, 0 /* stack_size */, GC_thr_daemon,
!     		   0 /* arg */, THR_DETACHED | THR_DAEMON,
!     		   &tid /* thread_id */) != 0) {
      	ABORT("Cant fork daemon");
      }
      thr_setprio(tid, 126);
--- 804,814 ----
        t = GC_new_thread(thr_self());
        t -> stack_size = 0;
        t -> flags = DETACHED | CLIENT_OWNS_STACK;
!     ret = thr_create(0 /* stack */, 0 /* stack_size */, GC_thr_daemon,
!     		     0 /* arg */, THR_DETACHED | THR_DAEMON,
!     		     &tid /* thread_id */);
!     if (ret != 0) {
! 	GC_err_printf1("Thr_create returned %ld\n", ret);
      	ABORT("Cant fork daemon");
      }
      thr_setprio(tid, 126);
diff -Nrcpad gcc-3.4.3/boehm-gc/specific.c gcc-4.0.0/boehm-gc/specific.c
*** gcc-3.4.3/boehm-gc/specific.c	Fri Mar 29 22:52:13 2002
--- gcc-4.0.0/boehm-gc/specific.c	Mon Aug 16 23:06:46 2004
***************
*** 11,19 ****
   * modified is included with the above copyright notice.
   */
  
  #if defined(GC_LINUX_THREADS)
  
- #include "private/gc_priv.h" /* For GC_compare_and_exchange, GC_memory_barrier */
  #include "private/specific.h"
  
  static tse invalid_tse = {INVALID_QTID, 0, 0, INVALID_THREADID};
--- 11,20 ----
   * modified is included with the above copyright notice.
   */
  
+ #include "private/gc_priv.h" /* For GC_compare_and_exchange, GC_memory_barrier */
+ 
  #if defined(GC_LINUX_THREADS)
  
  #include "private/specific.h"
  
  static tse invalid_tse = {INVALID_QTID, 0, 0, INVALID_THREADID};
diff -Nrcpad gcc-3.4.3/boehm-gc/tests/middle.c gcc-4.0.0/boehm-gc/tests/middle.c
*** gcc-3.4.3/boehm-gc/tests/middle.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/boehm-gc/tests/middle.c	Thu Aug 12 21:14:30 2004
***************
*** 0 ****
--- 1,25 ----
+ /*
+  * Test at the boundary between small and large objects.
+  * Inspired by a test case from Zoltan Varga.
+  */
+ #include <gc.h>
+ #include <stdio.h>
+ 
+ int main ()
+ {
+         int i;
+ 
+         GC_all_interior_pointers = 0;
+ 
+         for (i = 0; i < 20000; ++i) {
+                 GC_malloc_atomic (4096);
+                 GC_malloc (4096);
+ 	}
+         for (i = 0; i < 20000; ++i) {
+                 GC_malloc_atomic (2048);
+                 GC_malloc (2048);
+ 	}
+ 	printf("Final heap size is %ld\n", GC_get_heap_size());
+ 	return 0;
+ }
+ 
diff -Nrcpad gcc-3.4.3/boehm-gc/tests/test.c gcc-4.0.0/boehm-gc/tests/test.c
*** gcc-3.4.3/boehm-gc/tests/test.c	Mon Jul 28 04:18:23 2003
--- gcc-4.0.0/boehm-gc/tests/test.c	Fri Aug 13 23:05:35 2004
*************** sexpr y;
*** 208,214 ****
  #ifdef GC_GCJ_SUPPORT
  
  #include "gc_mark.h"
- #include "private/dbg_mlc.h"  /* For USR_PTR_FROM_BASE */
  #include "gc_gcj.h"
  
  /* The following struct emulates the vtable in gcj.	*/
--- 208,213 ----
*************** struct GC_ms_entry * fake_gcj_mark_proc(
*** 233,239 ****
      sexpr x;
      if (1 == env) {
  	/* Object allocated with debug allocator.	*/
! 	addr = (word *)USR_PTR_FROM_BASE(addr);
      }
      x = (sexpr)(addr + 1); /* Skip the vtable pointer. */
      mark_stack_ptr = GC_MARK_AND_PUSH(
--- 232,238 ----
      sexpr x;
      if (1 == env) {
  	/* Object allocated with debug allocator.	*/
! 	addr = (word *)GC_USR_PTR_FROM_BASE(addr);
      }
      x = (sexpr)(addr + 1); /* Skip the vtable pointer. */
      mark_stack_ptr = GC_MARK_AND_PUSH(
*************** void run_one_test()
*** 1256,1264 ****
  	FAIL;
        }
        if (!TEST_FAIL_COUNT(1)) {
! #	if!(defined(RS6000) || defined(POWERPC) || defined(IA64))
  	  /* ON RS6000s function pointers point to a descriptor in the	*/
  	  /* data segment, so there should have been no failures.	*/
      	  (void)GC_printf0("GC_is_visible produced wrong failure indication\n");
      	  FAIL;
  #	endif
--- 1255,1265 ----
  	FAIL;
        }
        if (!TEST_FAIL_COUNT(1)) {
! #	if!(defined(RS6000) || defined(POWERPC) || defined(IA64)) || defined(M68K)
  	  /* ON RS6000s function pointers point to a descriptor in the	*/
  	  /* data segment, so there should have been no failures.	*/
+ 	  /* The same applies to IA64.  Something similar seems to	*/
+ 	  /* be going on with NetBSD/M68K.				*/
      	  (void)GC_printf0("GC_is_visible produced wrong failure indication\n");
      	  FAIL;
  #	endif
*************** void SetMinimumStack(long minSize)
*** 1486,1495 ****
  #   endif
      n_tests = 0;
      
- #if defined(__APPLE__) && defined(__MACH__)
- 	GC_INIT();
- #endif
-     
  #   if defined(DJGPP)
  	/* No good way to determine stack base from library; do it */
  	/* manually on this platform.				   */
--- 1487,1492 ----
*************** void SetMinimumStack(long minSize)
*** 1501,1507 ****
  	/* Cheat and let stdio initialize toolbox for us.	*/
  	printf("Testing GC Macintosh port.\n");
  #   endif
!     GC_INIT();	/* Only needed if gc is dynamic library.	*/
      (void) GC_set_warn_proc(warn_proc);
  #   if (defined(MPROTECT_VDB) || defined(PROC_VDB)) \
            && !defined(MAKE_BACK_GRAPH)
--- 1498,1504 ----
  	/* Cheat and let stdio initialize toolbox for us.	*/
  	printf("Testing GC Macintosh port.\n");
  #   endif
!     GC_INIT();	/* Only needed on a few platforms.	*/
      (void) GC_set_warn_proc(warn_proc);
  #   if (defined(MPROTECT_VDB) || defined(PROC_VDB)) \
            && !defined(MAKE_BACK_GRAPH)
*************** main()
*** 1794,1802 ****
            (void)GC_printf0("pthread_default_stacksize_np failed.\n");
  	}
  #   endif	/* GC_HPUX_THREADS */
! # 	if defined(__APPLE__) && defined(__MACH__)
! 		GC_INIT();
! #	endif
  
      pthread_attr_init(&attr);
  #   if defined(GC_IRIX_THREADS) || defined(GC_FREEBSD_THREADS) \
--- 1791,1797 ----
            (void)GC_printf0("pthread_default_stacksize_np failed.\n");
  	}
  #   endif	/* GC_HPUX_THREADS */
!     GC_INIT();
  
      pthread_attr_init(&attr);
  #   if defined(GC_IRIX_THREADS) || defined(GC_FREEBSD_THREADS) \
diff -Nrcpad gcc-3.4.3/boehm-gc/tests/test_cpp.cc gcc-4.0.0/boehm-gc/tests/test_cpp.cc
*** gcc-3.4.3/boehm-gc/tests/test_cpp.cc	Mon Jul 28 04:18:23 2003
--- gcc-4.0.0/boehm-gc/tests/test_cpp.cc	Fri Aug 13 23:05:36 2004
*************** int APIENTRY WinMain(
*** 192,198 ****
  # endif
  #endif
  
!    GC_init();
  
  #  if defined(MACOS)                        // MacOS
      char* argv_[] = {"test_cpp", "10"};     //   doesn't
--- 192,198 ----
  # endif
  #endif
  
!    GC_INIT();
  
  #  if defined(MACOS)                        // MacOS
      char* argv_[] = {"test_cpp", "10"};     //   doesn't
diff -Nrcpad gcc-3.4.3/boehm-gc/tests/trace_test.c gcc-4.0.0/boehm-gc/tests/trace_test.c
*** gcc-3.4.3/boehm-gc/tests/trace_test.c	Fri Aug 17 18:30:51 2001
--- gcc-4.0.0/boehm-gc/tests/trace_test.c	Fri Aug 13 23:05:36 2004
*************** struct treenode {
*** 10,15 ****
--- 10,16 ----
  struct treenode * mktree(int i) {
    struct treenode * r = GC_MALLOC(sizeof(struct treenode));
    if (0 == i) return 0;
+   if (1 == i) r = GC_MALLOC_ATOMIC(sizeof(struct treenode));
    r -> x = mktree(i-1);
    r -> y = mktree(i-1);
    return r;
diff -Nrcpad gcc-3.4.3/boehm-gc/threadlibs.c gcc-4.0.0/boehm-gc/threadlibs.c
*** gcc-3.4.3/boehm-gc/threadlibs.c	Mon Jul 28 04:18:21 2003
--- gcc-4.0.0/boehm-gc/threadlibs.c	Fri Aug 13 23:05:30 2004
***************
*** 1,3 ****
--- 1,4 ----
+ # include "gc_config_macros.h"
  # include "private/gcconfig.h"
  # include <stdio.h>
  
diff -Nrcpad gcc-3.4.3/boehm-gc/typd_mlc.c gcc-4.0.0/boehm-gc/typd_mlc.c
*** gcc-3.4.3/boehm-gc/typd_mlc.c	Mon Jul 28 04:18:21 2003
--- gcc-4.0.0/boehm-gc/typd_mlc.c	Fri Aug 13 23:05:30 2004
*************** mse * GC_array_mark_proc GC_PROTO((regis
*** 348,355 ****
  				   mse * mark_stack_limit,
  				   word env));
  
- GC_descr GC_generic_array_descr;
- 
  /* Caller does not hold allocation lock. */
  void GC_init_explicit_typing()
  {
--- 348,353 ----
*************** void GC_init_explicit_typing()
*** 370,416 ****
      }
      GC_explicit_typing_initialized = TRUE;
      /* Set up object kind with simple indirect descriptor. */
!       GC_eobjfreelist = (ptr_t *)
!           GC_INTERNAL_MALLOC((MAXOBJSZ+1)*sizeof(ptr_t), PTRFREE);
!       if (GC_eobjfreelist == 0) ABORT("Couldn't allocate GC_eobjfreelist");
!       BZERO(GC_eobjfreelist, (MAXOBJSZ+1)*sizeof(ptr_t));
!       GC_explicit_kind = GC_n_kinds++;
!       GC_obj_kinds[GC_explicit_kind].ok_freelist = GC_eobjfreelist;
!       GC_obj_kinds[GC_explicit_kind].ok_reclaim_list = 0;
!       GC_obj_kinds[GC_explicit_kind].ok_descriptor =
!     		(((word)WORDS_TO_BYTES(-1)) | GC_DS_PER_OBJECT);
!       GC_obj_kinds[GC_explicit_kind].ok_relocate_descr = TRUE;
!       GC_obj_kinds[GC_explicit_kind].ok_init = TRUE;
      		/* Descriptors are in the last word of the object. */
!       GC_typed_mark_proc_index = GC_n_mark_procs;
!       GC_mark_procs[GC_typed_mark_proc_index] = GC_typed_mark_proc;
!       GC_n_mark_procs++;
!         /* Moving this up breaks DEC AXP compiler.      */
      /* Set up object kind with array descriptor. */
!       GC_arobjfreelist = (ptr_t *)
!           GC_INTERNAL_MALLOC((MAXOBJSZ+1)*sizeof(ptr_t), PTRFREE);
!       if (GC_arobjfreelist == 0) ABORT("Couldn't allocate GC_arobjfreelist");
!       BZERO(GC_arobjfreelist, (MAXOBJSZ+1)*sizeof(ptr_t));
!       if (GC_n_mark_procs >= MAX_MARK_PROCS)
!       		ABORT("No slot for array mark proc");
!       GC_array_mark_proc_index = GC_n_mark_procs++;
!       if (GC_n_kinds >= MAXOBJKINDS)
!       		ABORT("No kind available for array objects");
!       GC_array_kind = GC_n_kinds++;
!       GC_obj_kinds[GC_array_kind].ok_freelist = GC_arobjfreelist;
!       GC_obj_kinds[GC_array_kind].ok_reclaim_list = 0;
!       GC_obj_kinds[GC_array_kind].ok_descriptor =
!     		GC_MAKE_PROC(GC_array_mark_proc_index, 0);;
!       GC_obj_kinds[GC_array_kind].ok_relocate_descr = FALSE;
!       GC_obj_kinds[GC_array_kind].ok_init = TRUE;
!     		/* Descriptors are in the last word of the object. */
!             GC_mark_procs[GC_array_mark_proc_index] = GC_array_mark_proc;
        for (i = 0; i < WORDSZ/2; i++) {
            GC_descr d = (((word)(-1)) >> (WORDSZ - i)) << (WORDSZ - i);
            d |= GC_DS_BITMAP;
            GC_bm_table[i] = d;
        }
-       GC_generic_array_descr = GC_MAKE_PROC(GC_array_mark_proc_index, 0); 
      UNLOCK();
      ENABLE_SIGNALS();
  }
--- 368,392 ----
      }
      GC_explicit_typing_initialized = TRUE;
      /* Set up object kind with simple indirect descriptor. */
!       GC_eobjfreelist = (ptr_t *)GC_new_free_list_inner();
!       GC_explicit_kind = GC_new_kind_inner(
! 		      	    (void **)GC_eobjfreelist,
! 		      	    (((word)WORDS_TO_BYTES(-1)) | GC_DS_PER_OBJECT),
! 			    TRUE, TRUE);
      		/* Descriptors are in the last word of the object. */
!       GC_typed_mark_proc_index = GC_new_proc_inner(GC_typed_mark_proc);
      /* Set up object kind with array descriptor. */
!       GC_arobjfreelist = (ptr_t *)GC_new_free_list_inner();
!       GC_array_mark_proc_index = GC_new_proc_inner(GC_array_mark_proc);
!       GC_array_kind = GC_new_kind_inner(
! 		      	    (void **)GC_arobjfreelist,
! 			    GC_MAKE_PROC(GC_array_mark_proc_index, 0),
! 			    FALSE, TRUE);
        for (i = 0; i < WORDSZ/2; i++) {
            GC_descr d = (((word)(-1)) >> (WORDSZ - i)) << (WORDSZ - i);
            d |= GC_DS_BITMAP;
            GC_bm_table[i] = d;
        }
      UNLOCK();
      ENABLE_SIGNALS();
  }
diff -Nrcpad gcc-3.4.3/boehm-gc/version.h gcc-4.0.0/boehm-gc/version.h
*** gcc-3.4.3/boehm-gc/version.h	Mon Jul 28 04:18:21 2003
--- gcc-4.0.0/boehm-gc/version.h	Fri Aug 13 23:05:30 2004
***************
*** 3,9 ****
  /* it to keep the old-style build process working.		*/
  #define GC_TMP_VERSION_MAJOR 6
  #define GC_TMP_VERSION_MINOR 3
! #define GC_TMP_ALPHA_VERSION 1
  
  #ifndef GC_NOT_ALPHA
  #   define GC_NOT_ALPHA 0xff
--- 3,9 ----
  /* it to keep the old-style build process working.		*/
  #define GC_TMP_VERSION_MAJOR 6
  #define GC_TMP_VERSION_MINOR 3
! #define GC_TMP_ALPHA_VERSION GC_NOT_ALPHA
  
  #ifndef GC_NOT_ALPHA
  #   define GC_NOT_ALPHA 0xff
***************
*** 14,20 ****
       GC_TMP_VERSION_MINOR != GC_VERSION_MINOR || \
       defined(GC_ALPHA_VERSION) != (GC_TMP_ALPHA_VERSION != GC_NOT_ALPHA) || \
       defined(GC_ALPHA_VERSION) && GC_TMP_ALPHA_VERSION != GC_ALPHA_VERSION
! #   error Inconsistent version info.  Check version.h and configure.in.
  # endif
  #else
  # define GC_VERSION_MAJOR GC_TMP_VERSION_MAJOR
--- 14,20 ----
       GC_TMP_VERSION_MINOR != GC_VERSION_MINOR || \
       defined(GC_ALPHA_VERSION) != (GC_TMP_ALPHA_VERSION != GC_NOT_ALPHA) || \
       defined(GC_ALPHA_VERSION) && GC_TMP_ALPHA_VERSION != GC_ALPHA_VERSION
! #   error Inconsistent version info.  Check README, version.h, and configure.in.
  # endif
  #else
  # define GC_VERSION_MAJOR GC_TMP_VERSION_MAJOR
diff -Nrcpad gcc-3.4.3/boehm-gc/win32_threads.c gcc-4.0.0/boehm-gc/win32_threads.c
*** gcc-3.4.3/boehm-gc/win32_threads.c	Fri Oct  3 18:43:06 2003
--- gcc-4.0.0/boehm-gc/win32_threads.c	Mon Aug 23 15:07:00 2004
***************
*** 1,6 ****
  #if defined(GC_WIN32_THREADS) 
  
- #include "private/gc_priv.h"
  #include <windows.h>
  
  #ifdef CYGWIN32
--- 1,7 ----
+ #include "private/gc_priv.h"
+ 
  #if defined(GC_WIN32_THREADS) 
  
  #include <windows.h>
  
  #ifdef CYGWIN32
*************** static GC_thread GC_new_thread(void) {
*** 130,136 ****
  	ABORT("DuplicateHandle failed");
    }
    thread_table[i].stack_base = GC_get_stack_base();
!   /* Up until this point, GC_psuh_all_stacks considers this thread	*/
    /* invalid.								*/
    if (thread_table[i].stack_base == NULL) 
      ABORT("Failed to find stack base in GC_new_thread");
--- 131,137 ----
  	ABORT("DuplicateHandle failed");
    }
    thread_table[i].stack_base = GC_get_stack_base();
!   /* Up until this point, GC_push_all_stacks considers this thread	*/
    /* invalid.								*/
    if (thread_table[i].stack_base == NULL) 
      ABORT("Failed to find stack base in GC_new_thread");
diff -Nrcpad gcc-3.4.3/bugs.html gcc-4.0.0/bugs.html
*** gcc-3.4.3/bugs.html	Fri Nov  5 04:14:09 2004
--- gcc-4.0.0/bugs.html	Thu Apr 21 07:04:13 2005
*************** also contain C++ code, so you might want
*** 779,786 ****
  be safe.  It should not be necessary to recompile if you have changed
  to a bug-fix release of the same version of the compiler; bug-fix
  releases are careful to avoid ABI changes. See also the
! <a href="onlinedocs/gcc/Compatibility.html">compatibility section</a>
! of the GCC manual.</p>
  
  <p>Remark: A major release is designated by a change to the first or second
  component of the two- or three-part version number.  A minor (bug-fix)
--- 779,786 ----
  be safe.  It should not be necessary to recompile if you have changed
  to a bug-fix release of the same version of the compiler; bug-fix
  releases are careful to avoid ABI changes. See also the
! <a href="http://gcc.gnu.org/onlinedocs/gcc/Compatibility.html">compatibility
! section</a> of the GCC manual.</p>
  
  <p>Remark: A major release is designated by a change to the first or second
  component of the two- or three-part version number.  A minor (bug-fix)
*************** template &lt;typename T&gt; struct B : A
*** 932,939 ****
  </ul>
  
  <p>In addition to the problems listed above, the manual contains a section on
! <a href="http://gcc.gnu.org/onlinedocs/gcc/C---Misunderstandings.html">Common
! Misunderstandings with GNU C++</a>.</p>
  
  </body>
  </html>
--- 932,939 ----
  </ul>
  
  <p>In addition to the problems listed above, the manual contains a section on
! <a href="http://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Misunderstandings.html">
! Common Misunderstandings with GNU C++</a>.</p>
  
  </body>
  </html>
diff -Nrcpad gcc-3.4.3/compile gcc-4.0.0/compile
*** gcc-3.4.3/compile	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/compile	Tue Nov 16 01:04:30 2004
***************
*** 0 ****
--- 1,142 ----
+ #! /bin/sh
+ # Wrapper for compilers which do not understand `-c -o'.
+ 
+ scriptversion=2004-10-12.08
+ 
+ # Copyright (C) 1999, 2000, 2003, 2004 Free Software Foundation, Inc.
+ # Written by Tom Tromey <tromey@cygnus.com>.
+ #
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2, or (at your option)
+ # any later version.
+ #
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ # GNU General Public License for more details.
+ #
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ 
+ # As a special exception to the GNU General Public License, if you
+ # distribute this file as part of a program that contains a
+ # configuration script generated by Autoconf, you may include it under
+ # the same distribution terms that you use for the rest of that program.
+ 
+ # This file is maintained in Automake, please report
+ # bugs to <bug-automake@gnu.org> or send patches to
+ # <automake-patches@gnu.org>.
+ 
+ case $1 in
+   '')
+      echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
+      exit 1;
+      ;;
+   -h | --h*)
+     cat <<\EOF
+ Usage: compile [--help] [--version] PROGRAM [ARGS]
+ 
+ Wrapper for compilers which do not understand `-c -o'.
+ Remove `-o dest.o' from ARGS, run PROGRAM with the remaining
+ arguments, and rename the output as expected.
+ 
+ If you are trying to build a whole package this is not the
+ right script to run: please start by reading the file `INSTALL'.
+ 
+ Report bugs to <bug-automake@gnu.org>.
+ EOF
+     exit 0
+     ;;
+   -v | --v*)
+     echo "compile $scriptversion"
+     exit 0
+     ;;
+ esac
+ 
+ ofile=
+ cfile=
+ eat=
+ 
+ for arg
+ do
+   if test -n "$eat"; then
+     eat=
+   else
+     case $1 in
+       -o)
+ 	# configure might choose to run compile as `compile cc -o foo foo.c'.
+ 	# So we strip `-o arg' only if arg is an object.
+ 	eat=1
+ 	case $2 in
+ 	  *.o | *.obj)
+ 	    ofile=$2
+ 	    ;;
+ 	  *)
+ 	    set x "$@" -o "$2"
+ 	    shift
+ 	    ;;
+ 	esac
+ 	;;
+       *.c)
+ 	cfile=$1
+ 	set x "$@" "$1"
+ 	shift
+ 	;;
+       *)
+ 	set x "$@" "$1"
+ 	shift
+ 	;;
+     esac
+   fi
+   shift
+ done
+ 
+ if test -z "$ofile" || test -z "$cfile"; then
+   # If no `-o' option was seen then we might have been invoked from a
+   # pattern rule where we don't need one.  That is ok -- this is a
+   # normal compilation that the losing compiler can handle.  If no
+   # `.c' file was seen then we are probably linking.  That is also
+   # ok.
+   exec "$@"
+ fi
+ 
+ # Name of file we expect compiler to create.
+ cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
+ 
+ # Create the lock directory.
+ # Note: use `[/.-]' here to ensure that we don't use the same name
+ # that we are using for the .o file.  Also, base the name on the expected
+ # object file name, since that is what matters with a parallel build.
+ lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d
+ while true; do
+   if mkdir "$lockdir" >/dev/null 2>&1; then
+     break
+   fi
+   sleep 1
+ done
+ # FIXME: race condition here if user kills between mkdir and trap.
+ trap "rmdir '$lockdir'; exit 1" 1 2 15
+ 
+ # Run the compile.
+ "$@"
+ ret=$?
+ 
+ if test -f "$cofile"; then
+   mv "$cofile" "$ofile"
+ elif test -f "${cofile}bj"; then
+   mv "${cofile}bj" "$ofile"
+ fi
+ 
+ rmdir "$lockdir"
+ exit $ret
+ 
+ # Local Variables:
+ # mode: shell-script
+ # sh-indentation: 2
+ # eval: (add-hook 'write-file-hooks 'time-stamp)
+ # time-stamp-start: "scriptversion="
+ # time-stamp-format: "%:y-%02m-%02d.%02H"
+ # time-stamp-end: "$"
+ # End:
diff -Nrcpad gcc-3.4.3/config/ChangeLog gcc-4.0.0/config/ChangeLog
*** gcc-3.4.3/config/ChangeLog	Fri Nov  5 03:33:15 2004
--- gcc-4.0.0/config/ChangeLog	Thu Apr 21 05:17:19 2005
***************
*** 1,23 ****
! 2004-11-04  Release Manager
  
! 	* GCC 3.4.3 released.
  
  2004-09-23  H.J. Lu  <hongjiu.lu@intel.com>
  
  	PR bootstrap/17369
  	* gcc-lib-path.m4: New file.
  
! 2004-09-06  Release Manager
  
! 	* GCC 3.4.2 released.
  
! 2004-07-01  Release Manager
  
! 	* GCC 3.4.1 released.
  
! 2004-04-18  Release Manager
  
! 	* GCC 3.4.0 released.
  
  2003-10-14  Nathanael Nerode  <neroden@gcc.gnu.org>
  
--- 1,90 ----
! 2005-04-20  Release Manager
  
! 	* GCC 4.0.0 released.
! 
! 2005-04-16  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* acx.m4 (ACX_PROG_GNAT): Remove spurious break.
! 
! 2005-01-23  Joseph S. Myers  <joseph@codesourcery.com>
! 
! 	* warnings.m4 (ACX_PROG_CC_WARNING_ALMOST_PEDANTIC): Don't do
! 	anything for non-GCC compilers.
! 
! 2004-12-03  Richard Sandiford  <rsandifo@redhat.com>
! 
! 	* gxx-include-dir.m4: New file.
! 
! 2004-12-02  Richard Sandiford  <rsandifo@redhat.com>
! 
! 	* gcc-version.m4: New file.
! 
! 2004-09-24  Zack Weinberg  <zack@codesourcery.com>
! 
! 	* warnings.m4: New file.
  
  2004-09-23  H.J. Lu  <hongjiu.lu@intel.com>
  
  	PR bootstrap/17369
  	* gcc-lib-path.m4: New file.
  
! 2004-09-22  Kelley Cook  <kcook@gcc.gnu.org>
  
! 	* gettext-sister.m4: Renamed from gettext.m4
! 	* codeset.m4, gettext.m4, glibc21.m4, iconv.m4, intdiv0.m4, po.m4,
! 	inttypes.m4, inttypes-pri.m4, inttypes_h.m4, lcmessage.m4, lib-ld.m4,
! 	lib-link.m4, lib-prefix.m4, nls.m4, progtest.m4, stdint_h.m4,
! 	uintmax_t.m4, ulonglong.m4: Import from gettext-0.12.1 sources.
  
! 2004-08-31  Robert Bowdidge <bowdidge@apple.com>
  
! 	* mh-ppc-darwin: Add file, and override BOOT_CFLAGS.
  
! 2004-08-13  Nathanael Nerode  <neroden@gcc.gnu.org>
  
! 	* Add ACX_{TARGET,HOST,BUILD}_NONCANONICAL,
! 	which do an automatic AC_SUBST on _GCC_TOPLEV_*_NONCANONICAL.
! 	The intention is that we will migrate to these bit by bit.
! 
! 2004-08-01  Robert Millan  <robertmh@gnu.org>
! 
! 	* mt-linux: Rename to ...
! 	* mt-gnu: ... this.
! 
! 2004-06-09  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* acx.m4 (ACX_PROG_LN): From gcc, modified to
! 	accept a parameter.
! 
! 2004-05-23  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* acx.m4 (ACX_HEADER_STDBOOL, ACX_HEADER_STRING):
! 	From gcc.
! 
! 2004-04-16  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
! 
! 	* acx.m4 (ACX_PROG_GNAT): Check if ${CC} produces object file for
! 	Ada compilation.
! 	Fix acx_cv_cc_gcc_supports_ada spelling.
! 
! 2004-03-08  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	PR ada/14131
! 	Move language detection to the top level.
! 	* acx.m4 (ACX_PROG_GNAT): New macro, moved here
! 	from the gcc subdirectory.
! 
! 2004-03-09  Hans-Peter Nilsson  <hp@axis.com>
! 
! 	* accross.m4 (AC_C_BIGENDIAN_CROSS): Compile endian probe with
! 	"-c".  Properly quote parameter for AC_MSG_ERROR.
! 
! 2004-01-14  Maciej W. Rozycki  <macro@ds2.pg.gda.pl>
! 
! 	* acinclude.m4: Quote names of macros to be defined by AC_DEFUN
! 	throughout.
! 	* aclocal.m4: Regenerate.
! 	* configure: Regenerate.
  
  2003-10-14  Nathanael Nerode  <neroden@gcc.gnu.org>
  
diff -Nrcpad gcc-3.4.3/config/accross.m4 gcc-4.0.0/config/accross.m4
*** gcc-3.4.3/config/accross.m4	Mon Dec 16 18:18:44 2002
--- gcc-4.0.0/config/accross.m4	Tue Mar  9 01:16:10 2004
*************** void _ebcdic() { char* s = (char*) ebcdi
*** 64,70 ****
  int main() { _ascii (); _ebcdic (); return 0; }
  EOF
  ] if test -f conftest.c ; then
!      if ${CC-cc} ${CFLAGS} conftest.c -o conftest.o && test -f conftest.o ; then
          if test `grep -l BIGenDianSyS conftest.o` ; then
             echo $ac_n ' big endian probe OK, ' 1>&AC_FD_MSG
             ac_cv_c_bigendian=yes
--- 64,70 ----
  int main() { _ascii (); _ebcdic (); return 0; }
  EOF
  ] if test -f conftest.c ; then
!      if ${CC-cc} ${CFLAGS} -c conftest.c -o conftest.o && test -f conftest.o ; then
          if test `grep -l BIGenDianSyS conftest.o` ; then
             echo $ac_n ' big endian probe OK, ' 1>&AC_FD_MSG
             ac_cv_c_bigendian=yes
*************** else
*** 93,98 ****
  fi
  AC_DEFINE_UNQUOTED(BYTEORDER, $BYTEORDER, [1234 = LIL_ENDIAN, 4321 = BIGENDIAN])
  if test $ac_cv_c_bigendian = unknown; then
!   AC_MSG_ERROR(unknown endianess - sorry, please pre-set ac_cv_c_bigendian)
  fi
  ])
--- 93,98 ----
  fi
  AC_DEFINE_UNQUOTED(BYTEORDER, $BYTEORDER, [1234 = LIL_ENDIAN, 4321 = BIGENDIAN])
  if test $ac_cv_c_bigendian = unknown; then
!   AC_MSG_ERROR([unknown endianess - sorry, please pre-set ac_cv_c_bigendian])
  fi
  ])
diff -Nrcpad gcc-3.4.3/config/acinclude.m4 gcc-4.0.0/config/acinclude.m4
*** gcc-3.4.3/config/acinclude.m4	Mon May 19 18:09:58 2003
--- gcc-4.0.0/config/acinclude.m4	Fri Feb  6 00:54:14 2004
*************** dnl and doesn't call AC_PROG_CXX_GNU, ca
*** 6,12 ****
  dnl We are probably using a cross compiler, which will not be able to fully
  dnl link an executable.  This should really be fixed in autoconf itself.
  dnl Find a working G++ cross compiler. This only works for the GNU C++ compiler.
! AC_DEFUN(CYG_AC_PROG_CXX_CROSS,
  [AC_BEFORE([$0], [AC_PROG_CXXCPP])
  AC_CHECK_PROGS(CXX, $CCC c++ g++ gcc CC cxx cc++, gcc)
  
--- 6,12 ----
  dnl We are probably using a cross compiler, which will not be able to fully
  dnl link an executable.  This should really be fixed in autoconf itself.
  dnl Find a working G++ cross compiler. This only works for the GNU C++ compiler.
! AC_DEFUN([CYG_AC_PROG_CXX_CROSS],
  [AC_BEFORE([$0], [AC_PROG_CXXCPP])
  AC_CHECK_PROGS(CXX, $CCC c++ g++ gcc CC cxx cc++, gcc)
  
*************** fi
*** 35,41 ****
  ])
  
  dnl See if the G++ compiler we found works.
! AC_DEFUN(CYG_AC_PROG_GXX_WORKS,
  [AC_MSG_CHECKING([whether the G++ compiler ($CXX $CXXFLAGS $LDFLAGS) actually works])
  AC_LANG_SAVE
  AC_LANG_CPLUSPLUS
--- 35,41 ----
  ])
  
  dnl See if the G++ compiler we found works.
! AC_DEFUN([CYG_AC_PROG_GXX_WORKS],
  [AC_MSG_CHECKING([whether the G++ compiler ($CXX $CXXFLAGS $LDFLAGS) actually works])
  AC_LANG_SAVE
  AC_LANG_CPLUSPLUS
*************** AC_SUBST(CXX)
*** 103,109 ****
  dnl ====================================================================
  dnl Find a working GCC cross compiler. This only works for the GNU gcc compiler.
  dnl This is based on the macros above for G++.
! AC_DEFUN(CYG_AC_PROG_CC_CROSS,
  [AC_BEFORE([$0], [AC_PROG_CCPP])
  AC_CHECK_PROGS(CC, cc, gcc)
  
--- 103,109 ----
  dnl ====================================================================
  dnl Find a working GCC cross compiler. This only works for the GNU gcc compiler.
  dnl This is based on the macros above for G++.
! AC_DEFUN([CYG_AC_PROG_CC_CROSS],
  [AC_BEFORE([$0], [AC_PROG_CCPP])
  AC_CHECK_PROGS(CC, cc, gcc)
  
*************** fi
*** 132,138 ****
  ])
  
  dnl See if the GCC compiler we found works.
! AC_DEFUN(CYG_AC_PROG_GCC_WORKS,
  [AC_MSG_CHECKING([whether the Gcc compiler ($CC $CFLAGS $LDFLAGS) actually works])
  AC_LANG_SAVE
  AC_LANG_C
--- 132,138 ----
  ])
  
  dnl See if the GCC compiler we found works.
! AC_DEFUN([CYG_AC_PROG_GCC_WORKS],
  [AC_MSG_CHECKING([whether the Gcc compiler ($CC $CFLAGS $LDFLAGS) actually works])
  AC_LANG_SAVE
  AC_LANG_C
*************** AC_SUBST(CC)
*** 199,205 ****
  dnl ====================================================================
  dnl Find the BFD library in the build tree. This is used to access and
  dnl manipulate object or executable files.
! AC_DEFUN(CYG_AC_PATH_BFD, [
  AC_MSG_CHECKING(for the bfd header in the build tree)
  dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.."
  dnl Look for the header file
--- 199,205 ----
  dnl ====================================================================
  dnl Find the BFD library in the build tree. This is used to access and
  dnl manipulate object or executable files.
! AC_DEFUN([CYG_AC_PATH_BFD], [
  AC_MSG_CHECKING(for the bfd header in the build tree)
  dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.."
  dnl Look for the header file
*************** AC_SUBST(BFDLIB)
*** 241,247 ****
  dnl ====================================================================
  dnl Find the libiberty library. This defines many commonly used C
  dnl functions that exists in various states based on the underlying OS.
! AC_DEFUN(CYG_AC_PATH_LIBERTY, [
  AC_MSG_CHECKING(for the liberty library in the build tree)
  dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.."
  AC_CACHE_VAL(ac_cv_c_liberty,[
--- 241,247 ----
  dnl ====================================================================
  dnl Find the libiberty library. This defines many commonly used C
  dnl functions that exists in various states based on the underlying OS.
! AC_DEFUN([CYG_AC_PATH_LIBERTY], [
  AC_MSG_CHECKING(for the liberty library in the build tree)
  dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.."
  AC_CACHE_VAL(ac_cv_c_liberty,[
*************** AC_SUBST(LIBERTY)
*** 262,268 ****
  
  dnl ====================================================================
  dnl Find the opcodes library. This is used to do dissasemblies.
! AC_DEFUN(CYG_AC_PATH_OPCODES, [
  AC_MSG_CHECKING(for the opcodes library in the build tree)
  dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.."
  AC_CACHE_VAL(ac_cv_c_opc,[
--- 262,268 ----
  
  dnl ====================================================================
  dnl Find the opcodes library. This is used to do dissasemblies.
! AC_DEFUN([CYG_AC_PATH_OPCODES], [
  AC_MSG_CHECKING(for the opcodes library in the build tree)
  dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.."
  AC_CACHE_VAL(ac_cv_c_opc,[
*************** AC_SUBST(OPCODESLIB)
*** 284,290 ****
  dnl ====================================================================
  dnl Look for the DejaGnu header file in the source tree. This file
  dnl defines the functions used to testing support.
! AC_DEFUN(CYG_AC_PATH_DEJAGNU, [
  AC_MSG_CHECKING(for the testing support files in the source tree)
  dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.."
  AC_CACHE_VAL(ac_cv_c_dejagnu,[
--- 284,290 ----
  dnl ====================================================================
  dnl Look for the DejaGnu header file in the source tree. This file
  dnl defines the functions used to testing support.
! AC_DEFUN([CYG_AC_PATH_DEJAGNU], [
  AC_MSG_CHECKING(for the testing support files in the source tree)
  dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.."
  AC_CACHE_VAL(ac_cv_c_dejagnu,[
*************** AC_SUBST(DEJAGNUHDIR)
*** 335,341 ****
  dnl ====================================================================
  dnl Find the libintl library in the build tree. This is for
  dnl  internationalization support.
! AC_DEFUN(CYG_AC_PATH_INTL, [
  AC_MSG_CHECKING(for the intl header in the build tree)
  dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.."
  dnl Look for the header file
--- 335,341 ----
  dnl ====================================================================
  dnl Find the libintl library in the build tree. This is for
  dnl  internationalization support.
! AC_DEFUN([CYG_AC_PATH_INTL], [
  AC_MSG_CHECKING(for the intl header in the build tree)
  dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.."
  dnl Look for the header file
*************** AC_SUBST(INTLLIB)
*** 375,381 ****
  
  dnl ====================================================================
  dnl Find the simulator library.
! AC_DEFUN(CYG_AC_PATH_SIM, [
  dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.. ../../../../../../../../../.."
  case "$target_cpu" in
      powerpc)	target_dir=ppc ;;
--- 375,381 ----
  
  dnl ====================================================================
  dnl Find the simulator library.
! AC_DEFUN([CYG_AC_PATH_SIM], [
  dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.. ../../../../../../../../../.."
  case "$target_cpu" in
      powerpc)	target_dir=ppc ;;
*************** AC_SUBST(SIMLIB)
*** 457,463 ****
  
  dnl ====================================================================
  dnl Find the libiberty library.
! AC_DEFUN(CYG_AC_PATH_LIBIBERTY, [
  AC_MSG_CHECKING(for the libiberty library in the build tree)
  dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.."
  AC_CACHE_VAL(ac_cv_c_libib,[
--- 457,463 ----
  
  dnl ====================================================================
  dnl Find the libiberty library.
! AC_DEFUN([CYG_AC_PATH_LIBIBERTY], [
  AC_MSG_CHECKING(for the libiberty library in the build tree)
  dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.."
  AC_CACHE_VAL(ac_cv_c_libib,[
*************** AC_SUBST(LIBIBERTY)
*** 477,483 ****
  ])
  
  dnl ====================================================================
! AC_DEFUN(CYG_AC_PATH_DEVO, [
  AC_MSG_CHECKING(for devo headers in the source tree)
  dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.."
  AC_CACHE_VAL(ac_cv_c_devoh,[
--- 477,483 ----
  ])
  
  dnl ====================================================================
! AC_DEFUN([CYG_AC_PATH_DEVO], [
  AC_MSG_CHECKING(for devo headers in the source tree)
  dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.."
  AC_CACHE_VAL(ac_cv_c_devoh,[
*************** AC_SUBST(DEVOHDIR)
*** 498,504 ****
  
  dnl ====================================================================
  dnl find the IDE library and headers.
! AC_DEFUN(CYG_AC_PATH_IDE, [
  AC_MSG_CHECKING(for IDE headers in the source tree)
  dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.."
  IDEHDIR=
--- 498,504 ----
  
  dnl ====================================================================
  dnl find the IDE library and headers.
! AC_DEFUN([CYG_AC_PATH_IDE], [
  AC_MSG_CHECKING(for IDE headers in the source tree)
  dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.."
  IDEHDIR=
*************** AC_SUBST(IDETCLLIB)
*** 591,597 ****
  
  dnl ====================================================================
  dnl Find all the ILU headers and libraries
! AC_DEFUN(CYG_AC_PATH_ILU, [
  AC_MSG_CHECKING(for ILU kernel headers in the source tree)
  dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.."
  AC_CACHE_VAL(ac_cv_c_iluh,[
--- 591,597 ----
  
  dnl ====================================================================
  dnl Find all the ILU headers and libraries
! AC_DEFUN([CYG_AC_PATH_ILU], [
  AC_MSG_CHECKING(for ILU kernel headers in the source tree)
  dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.."
  AC_CACHE_VAL(ac_cv_c_iluh,[
*************** dnl ====================================
*** 752,758 ****
  dnl This defines the byte order for the host. We can't use
  dnl AC_C_BIGENDIAN, cause we want to create a config file and
  dnl substitue the real value, so the header files work right
! AC_DEFUN(CYG_AC_C_ENDIAN, [
  AC_MSG_CHECKING(to see if this is a little endian host)
  AC_CACHE_VAL(ac_cv_c_little_endian, [
  ac_cv_c_little_endian=unknown
--- 752,758 ----
  dnl This defines the byte order for the host. We can't use
  dnl AC_C_BIGENDIAN, cause we want to create a config file and
  dnl substitue the real value, so the header files work right
! AC_DEFUN([CYG_AC_C_ENDIAN], [
  AC_MSG_CHECKING(to see if this is a little endian host)
  AC_CACHE_VAL(ac_cv_c_little_endian, [
  ac_cv_c_little_endian=unknown
*************** AC_SUBST(ENDIAN)
*** 809,815 ****
  dnl ====================================================================
  dnl Look for the path to libgcc, so we can use it to directly link
  dnl in libgcc.a with LD.
! AC_DEFUN(CYG_AC_PATH_LIBGCC,
  [AC_MSG_CHECKING([Looking for the path to libgcc.a])
  AC_LANG_SAVE
  AC_LANG_C
--- 809,815 ----
  dnl ====================================================================
  dnl Look for the path to libgcc, so we can use it to directly link
  dnl in libgcc.a with LD.
! AC_DEFUN([CYG_AC_PATH_LIBGCC],
  [AC_MSG_CHECKING([Looking for the path to libgcc.a])
  AC_LANG_SAVE
  AC_LANG_C
*************** dnl Warning: transition of version 9 to 
*** 844,855 ****
  dnl because 10 sorts before 9. We also look for just tcl. We have to
  dnl be careful that we don't match stuff like tclX by accident.
  dnl the alternative search directory is involked by --with-tclinclude
! AC_DEFUN(CYG_AC_PATH_TCL, [
      CYG_AC_PATH_TCLH
      CYG_AC_PATH_TCLCONFIG
      CYG_AC_LOAD_TCLCONFIG
  ])
! AC_DEFUN(CYG_AC_PATH_TCLH, [
  dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.."
  no_tcl=true
  AC_MSG_CHECKING(for Tcl headers in the source tree)
--- 844,855 ----
  dnl because 10 sorts before 9. We also look for just tcl. We have to
  dnl be careful that we don't match stuff like tclX by accident.
  dnl the alternative search directory is involked by --with-tclinclude
! AC_DEFUN([CYG_AC_PATH_TCL], [
      CYG_AC_PATH_TCLH
      CYG_AC_PATH_TCLCONFIG
      CYG_AC_LOAD_TCLCONFIG
  ])
! AC_DEFUN([CYG_AC_PATH_TCLH], [
  dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.."
  no_tcl=true
  AC_MSG_CHECKING(for Tcl headers in the source tree)
*************** AC_SUBST(TCLHDIR)
*** 935,941 ****
  
  dnl ====================================================================
  dnl Ok, lets find the tcl configuration
! AC_DEFUN(CYG_AC_PATH_TCLCONFIG, [
  dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.."
  dnl First, look for one uninstalled.  
  dnl the alternative search directory is invoked by --with-tclconfig
--- 935,941 ----
  
  dnl ====================================================================
  dnl Ok, lets find the tcl configuration
! AC_DEFUN([CYG_AC_PATH_TCLCONFIG], [
  dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.."
  dnl First, look for one uninstalled.  
  dnl the alternative search directory is invoked by --with-tclconfig
*************** AC_SUBST(TCLCONFIG)
*** 1024,1030 ****
  
  dnl Defined as a separate macro so we don't have to cache the values
  dnl from PATH_TCLCONFIG (because this can also be cached).
! AC_DEFUN(CYG_AC_LOAD_TCLCONFIG, [
      . $TCLCONFIG
  
  dnl AC_SUBST(TCL_VERSION)
--- 1024,1030 ----
  
  dnl Defined as a separate macro so we don't have to cache the values
  dnl from PATH_TCLCONFIG (because this can also be cached).
! AC_DEFUN([CYG_AC_LOAD_TCLCONFIG], [
      . $TCLCONFIG
  
  dnl AC_SUBST(TCL_VERSION)
*************** dnl    AC_SUBST(TCL_UNSHARED_LIB_SUFFIX)
*** 1070,1081 ****
  ])
  
  dnl ====================================================================
! AC_DEFUN(CYG_AC_PATH_TK, [
      CYG_AC_PATH_TKH
      CYG_AC_PATH_TKCONFIG
      CYG_AC_LOAD_TKCONFIG
  ])
! AC_DEFUN(CYG_AC_PATH_TKH, [
  #
  # Ok, lets find the tk source trees so we can use the headers
  # If the directory (presumably symlink) named "tk" exists, use that one
--- 1070,1081 ----
  ])
  
  dnl ====================================================================
! AC_DEFUN([CYG_AC_PATH_TK], [
      CYG_AC_PATH_TKH
      CYG_AC_PATH_TKCONFIG
      CYG_AC_LOAD_TKCONFIG
  ])
! AC_DEFUN([CYG_AC_PATH_TKH], [
  #
  # Ok, lets find the tk source trees so we can use the headers
  # If the directory (presumably symlink) named "tk" exists, use that one
*************** fi
*** 1168,1174 ****
  AC_SUBST(TKHDIR)
  ])
  
! AC_DEFUN(CYG_AC_PATH_TKCONFIG, [
  dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.."
  dnl First, look for one uninstalled.  
  dnl the alternative search directory is invoked by --with-tkconfig
--- 1168,1174 ----
  AC_SUBST(TKHDIR)
  ])
  
! AC_DEFUN([CYG_AC_PATH_TKCONFIG], [
  dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.."
  dnl First, look for one uninstalled.  
  dnl the alternative search directory is invoked by --with-tkconfig
*************** AC_SUBST(TKCONFIG)
*** 1257,1263 ****
  
  dnl Defined as a separate macro so we don't have to cache the values
  dnl from PATH_TKCONFIG (because this can also be cached).
! AC_DEFUN(CYG_AC_LOAD_TKCONFIG, [
      if test -f "$TKCONFIG" ; then
        . $TKCONFIG
      fi
--- 1257,1263 ----
  
  dnl Defined as a separate macro so we don't have to cache the values
  dnl from PATH_TKCONFIG (because this can also be cached).
! AC_DEFUN([CYG_AC_LOAD_TKCONFIG], [
      if test -f "$TKCONFIG" ; then
        . $TKCONFIG
      fi
*************** dnl    AC_SUBST(TK_EXEC_PREFIX)
*** 1287,1299 ****
  dnl ====================================================================
  dnl Ok, lets find the itcl source trees so we can use the headers
  dnl the alternative search directory is involked by --with-itclinclude
! AC_DEFUN(CYG_AC_PATH_ITCL, [
      CYG_AC_PATH_ITCLH
      CYG_AC_PATH_ITCLLIB
      CYG_AC_PATH_ITCLSH
      CYG_AC_PATH_ITCLMKIDX
  ])
! AC_DEFUN(CYG_AC_PATH_ITCLH, [
  dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.."
  no_itcl=true
  AC_MSG_CHECKING(for Itcl headers in the source tree)
--- 1287,1299 ----
  dnl ====================================================================
  dnl Ok, lets find the itcl source trees so we can use the headers
  dnl the alternative search directory is involked by --with-itclinclude
! AC_DEFUN([CYG_AC_PATH_ITCL], [
      CYG_AC_PATH_ITCLH
      CYG_AC_PATH_ITCLLIB
      CYG_AC_PATH_ITCLSH
      CYG_AC_PATH_ITCLMKIDX
  ])
! AC_DEFUN([CYG_AC_PATH_ITCLH], [
  dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.."
  no_itcl=true
  AC_MSG_CHECKING(for Itcl headers in the source tree)
*************** AC_SUBST(ITCLHDIR)
*** 1367,1373 ****
  dnl Ok, lets find the itcl library
  dnl First, look for one uninstalled.  
  dnl the alternative search directory is invoked by --with-itcllib
! AC_DEFUN(CYG_AC_PATH_ITCLLIB, [
  dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.."
  if test x"${no_itcl}" = x ; then
      dnl we reset no_itcl incase something fails here
--- 1367,1373 ----
  dnl Ok, lets find the itcl library
  dnl First, look for one uninstalled.  
  dnl the alternative search directory is invoked by --with-itcllib
! AC_DEFUN([CYG_AC_PATH_ITCLLIB], [
  dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.."
  if test x"${no_itcl}" = x ; then
      dnl we reset no_itcl incase something fails here
*************** AC_SUBST(ITCLLIB)
*** 1454,1460 ****
  dnl ====================================================================
  dnl Ok, lets find the itcl source trees so we can use the itcl_sh script
  dnl the alternative search directory is involked by --with-itclinclude
! AC_DEFUN(CYG_AC_PATH_ITCLSH, [
  dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.."
  no_itcl=true
  AC_MSG_CHECKING(for the itcl_sh script)
--- 1454,1460 ----
  dnl ====================================================================
  dnl Ok, lets find the itcl source trees so we can use the itcl_sh script
  dnl the alternative search directory is involked by --with-itclinclude
! AC_DEFUN([CYG_AC_PATH_ITCLSH], [
  dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.."
  no_itcl=true
  AC_MSG_CHECKING(for the itcl_sh script)
*************** AC_SUBST(ITCLSH)
*** 1516,1522 ****
  dnl ====================================================================
  dnl Ok, lets find the itcl source trees so we can use the itcl_sh script
  dnl the alternative search directory is involked by --with-itclinclude
! AC_DEFUN(CYG_AC_PATH_ITCLMKIDX, [
  dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.."
  no_itcl=true
  AC_MSG_CHECKING(for itcl_mkindex.tcl script)
--- 1516,1522 ----
  dnl ====================================================================
  dnl Ok, lets find the itcl source trees so we can use the itcl_sh script
  dnl the alternative search directory is involked by --with-itclinclude
! AC_DEFUN([CYG_AC_PATH_ITCLMKIDX], [
  dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.."
  no_itcl=true
  AC_MSG_CHECKING(for itcl_mkindex.tcl script)
*************** AC_SUBST(ITCLMKIDX)
*** 1582,1592 ****
  dnl ====================================================================
  dnl Ok, lets find the tix source trees so we can use the headers
  dnl the alternative search directory is involked by --with-tixinclude
! AC_DEFUN(CYG_AC_PATH_TIX, [
      CYG_AC_PATH_TIXH
      CYG_AC_PATH_TIXLIB
  ])
! AC_DEFUN(CYG_AC_PATH_TIXH, [
  dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.."
  no_tix=true
  AC_MSG_CHECKING(for Tix headers in the source tree)
--- 1582,1592 ----
  dnl ====================================================================
  dnl Ok, lets find the tix source trees so we can use the headers
  dnl the alternative search directory is involked by --with-tixinclude
! AC_DEFUN([CYG_AC_PATH_TIX], [
      CYG_AC_PATH_TIXH
      CYG_AC_PATH_TIXLIB
  ])
! AC_DEFUN([CYG_AC_PATH_TIXH], [
  dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.."
  no_tix=true
  AC_MSG_CHECKING(for Tix headers in the source tree)
*************** fi
*** 1663,1669 ****
  AC_SUBST(TIXHDIR)
  ])
  
! AC_DEFUN(CYG_AC_PATH_TIXCONFIG, [
  #
  # Ok, lets find the tix configuration
  # First, look for one uninstalled.  
--- 1663,1669 ----
  AC_SUBST(TIXHDIR)
  ])
  
! AC_DEFUN([CYG_AC_PATH_TIXCONFIG], [
  #
  # Ok, lets find the tix configuration
  # First, look for one uninstalled.  
*************** fi
*** 1737,1743 ****
  
  # Defined as a separate macro so we don't have to cache the values
  # from PATH_TIXCONFIG (because this can also be cached).
! AC_DEFUN(CYG_AC_LOAD_TIXCONFIG, [
      if test -f "$TIXCONFIG" ; then
        . $TIXCONFIG
      fi
--- 1737,1743 ----
  
  # Defined as a separate macro so we don't have to cache the values
  # from PATH_TIXCONFIG (because this can also be cached).
! AC_DEFUN([CYG_AC_LOAD_TIXCONFIG], [
      if test -f "$TIXCONFIG" ; then
        . $TIXCONFIG
      fi
*************** AC_DEFUN(CYG_AC_LOAD_TIXCONFIG, [
*** 1746,1752 ****
      AC_SUBST(TIX_LIB_FULL_PATH)
  ])
  
! AC_DEFUN(CYG_AC_PATH_ITCLCONFIG, [
  #
  # Ok, lets find the itcl configuration
  # First, look for one uninstalled.  
--- 1746,1752 ----
      AC_SUBST(TIX_LIB_FULL_PATH)
  ])
  
! AC_DEFUN([CYG_AC_PATH_ITCLCONFIG], [
  #
  # Ok, lets find the itcl configuration
  # First, look for one uninstalled.  
*************** fi
*** 1820,1826 ****
  
  # Defined as a separate macro so we don't have to cache the values
  # from PATH_ITCLCONFIG (because this can also be cached).
! AC_DEFUN(CYG_AC_LOAD_ITCLCONFIG, [
      if test -f "$ITCLCONFIG" ; then
        . $ITCLCONFIG
      fi
--- 1820,1826 ----
  
  # Defined as a separate macro so we don't have to cache the values
  # from PATH_ITCLCONFIG (because this can also be cached).
! AC_DEFUN([CYG_AC_LOAD_ITCLCONFIG], [
      if test -f "$ITCLCONFIG" ; then
        . $ITCLCONFIG
      fi
*************** AC_DEFUN(CYG_AC_LOAD_ITCLCONFIG, [
*** 1833,1839 ****
  ])
  
  
! AC_DEFUN(CYG_AC_PATH_ITKCONFIG, [
  #
  # Ok, lets find the itk configuration
  # First, look for one uninstalled.  
--- 1833,1839 ----
  ])
  
  
! AC_DEFUN([CYG_AC_PATH_ITKCONFIG], [
  #
  # Ok, lets find the itk configuration
  # First, look for one uninstalled.  
*************** fi
*** 1907,1913 ****
  
  # Defined as a separate macro so we don't have to cache the values
  # from PATH_ITKCONFIG (because this can also be cached).
! AC_DEFUN(CYG_AC_LOAD_ITKCONFIG, [
      if test -f "$ITKCONFIG" ; then
        . $ITKCONFIG
      fi
--- 1907,1913 ----
  
  # Defined as a separate macro so we don't have to cache the values
  # from PATH_ITKCONFIG (because this can also be cached).
! AC_DEFUN([CYG_AC_LOAD_ITKCONFIG], [
      if test -f "$ITKCONFIG" ; then
        . $ITKCONFIG
      fi
*************** AC_DEFUN(CYG_AC_LOAD_ITKCONFIG, [
*** 1921,1931 ****
  dnl ====================================================================
  dnl Ok, lets find the libgui source trees so we can use the headers
  dnl the alternative search directory is involked by --with-libguiinclude
! AC_DEFUN(CYG_AC_PATH_LIBGUI, [
      CYG_AC_PATH_LIBGUIH
      CYG_AC_PATH_LIBGUILIB
  ])
! AC_DEFUN(CYG_AC_PATH_LIBGUIH, [
  dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../..../../../../../../../../../../.."
  no_libgui=true
  AC_MSG_CHECKING(for Libgui headers in the source tree)
--- 1921,1931 ----
  dnl ====================================================================
  dnl Ok, lets find the libgui source trees so we can use the headers
  dnl the alternative search directory is involked by --with-libguiinclude
! AC_DEFUN([CYG_AC_PATH_LIBGUI], [
      CYG_AC_PATH_LIBGUIH
      CYG_AC_PATH_LIBGUILIB
  ])
! AC_DEFUN([CYG_AC_PATH_LIBGUIH], [
  dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../..../../../../../../../../../../.."
  no_libgui=true
  AC_MSG_CHECKING(for Libgui headers in the source tree)
*************** AC_SUBST(LIBGUIHDIR)
*** 1995,2001 ****
  
  dnl ====================================================================
  dnl find the GUI library
! AC_DEFUN(CYG_AC_PATH_LIBGUILIB, [
  AC_MSG_CHECKING(for GUI library  in the build tree)
  dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.."
  dnl look for the library
--- 1995,2001 ----
  
  dnl ====================================================================
  dnl find the GUI library
! AC_DEFUN([CYG_AC_PATH_LIBGUILIB], [
  AC_MSG_CHECKING(for GUI library  in the build tree)
  dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.."
  dnl look for the library
diff -Nrcpad gcc-3.4.3/config/acx.m4 gcc-4.0.0/config/acx.m4
*** gcc-3.4.3/config/acx.m4	Thu Sep 25 14:27:52 2003
--- gcc-4.0.0/config/acx.m4	Sat Apr 16 10:03:26 2005
*************** esac
*** 38,43 ****
--- 38,67 ----
  ]) []dnl # _GCC_TOPLEV_NONCANONICAL_TARGET
  
  dnl ####
+ dnl # ACX_NONCANONICAL_BUILD
+ dnl # Like underscored version, but AC_SUBST's.
+ AC_DEFUN([ACX_NONCANONICAL_BUILD],
+ [AC_REQUIRE([_GCC_TOPLEV_NONCANONICAL_BUILD]) []dnl
+ AC_SUBST(build_noncanonical)
+ ]) []dnl # ACX_NONCANONICAL_BUILD
+ 
+ dnl ####
+ dnl # ACX_NONCANONICAL_HOST
+ dnl # Like underscored version, but AC_SUBST's.
+ AC_DEFUN([ACX_NONCANONICAL_HOST],
+ [AC_REQUIRE([_GCC_TOPLEV_NONCANONICAL_HOST]) []dnl
+ AC_SUBST(host_noncanonical)
+ ]) []dnl # ACX_NONCANONICAL_HOST
+ 
+ dnl ####
+ dnl # ACX_NONCANONICAL_TARGET
+ dnl # Like underscored version, but AC_SUBST's.
+ AC_DEFUN([ACX_NONCANONICAL_TARGET],
+ [AC_REQUIRE([_GCC_TOPLEV_NONCANONICAL_TARGET]) []dnl
+ AC_SUBST(target_noncanonical)
+ ]) []dnl # ACX_NONCANONICAL_TARGET
+ 
+ dnl ####
  dnl # GCC_TOPLEV_SUBDIRS
  dnl # GCC & friends build 'build', 'host', and 'target' tools.  These must
  dnl # be separated into three well-known subdirectories of the build directory:
*************** AC_DEFUN([AC_PROG_CPP_WERROR],
*** 155,157 ****
--- 179,307 ----
  [AC_REQUIRE([AC_PROG_CPP])dnl
  m4_define([AC_CHECK_HEADER],m4_defn([_AC_CHECK_HEADER_OLD]))
  ac_c_preproc_warn_flag=yes])# AC_PROG_CPP_WERROR
+ 
+ # Test for GNAT.
+ # We require the gnatbind program, and a compiler driver that
+ # understands Ada.  We use the user's CC setting, already found.
+ #
+ # Sets the shell variable have_gnat to yes or no as appropriate, and
+ # substitutes GNATBIND.
+ AC_DEFUN([ACX_PROG_GNAT],
+ [AC_REQUIRE([AC_CHECK_TOOL_PREFIX])
+ AC_REQUIRE([AC_PROG_CC])
+ AC_CHECK_TOOL(GNATBIND, gnatbind, no)
+ AC_CACHE_CHECK([whether compiler driver understands Ada],
+ 		 acx_cv_cc_gcc_supports_ada,
+ [cat >conftest.adb <<EOF
+ procedure conftest is begin null; end conftest;
+ EOF
+ acx_cv_cc_gcc_supports_ada=no
+ # There is a bug in old released versions of GCC which causes the
+ # driver to exit successfully when the appropriate language module
+ # has not been installed.  This is fixed in 2.95.4, 3.0.2, and 3.1.
+ # Therefore we must check for the error message as well as an
+ # unsuccessful exit.
+ # Other compilers, like HP Tru64 UNIX cc, exit successfully when
+ # given a .adb file, but produce no object file.  So we must check
+ # if an object file was really produced to guard against this.
+ errors=`(${CC} -c conftest.adb) 2>&1 || echo failure`
+ if test x"$errors" = x && test -f conftest.$ac_objext; then
+   acx_cv_cc_gcc_supports_ada=yes
+ fi
+ rm -f conftest.*])
+ 
+ if test x$GNATBIND != xno && test x$acx_cv_cc_gcc_supports_ada != xno; then
+   have_gnat=yes
+ else
+   have_gnat=no
+ fi
+ ])
+ 
+ dnl 'make compare' can be significantly faster, if cmp itself can
+ dnl skip bytes instead of using tail.  The test being performed is
+ dnl "if cmp --ignore-initial=2 t1 t2 && ! cmp --ignore-initial=1 t1 t2"
+ dnl but we need to sink errors and handle broken shells.  We also test
+ dnl for the parameter format "cmp file1 file2 skip1 skip2" which is
+ dnl accepted by cmp on some systems.
+ AC_DEFUN([ACX_PROG_CMP_IGNORE_INITIAL],
+ [AC_CACHE_CHECK([how to compare bootstrapped objects], gcc_cv_prog_cmp_skip,
+ [ echo abfoo >t1
+   echo cdfoo >t2
+   gcc_cv_prog_cmp_skip='tail +16c $$f1 > tmp-foo1; tail +16c $$f2 > tmp-foo2; cmp tmp-foo1 tmp-foo2'
+   if cmp t1 t2 2 2 > /dev/null 2>&1; then
+     if cmp t1 t2 1 1 > /dev/null 2>&1; then
+       :
+     else
+       gcc_cv_prog_cmp_skip='cmp $$f1 $$f2 16 16'
+     fi
+   fi
+   if cmp --ignore-initial=2 t1 t2 > /dev/null 2>&1; then
+     if cmp --ignore-initial=1 t1 t2 > /dev/null 2>&1; then
+       :
+     else
+       gcc_cv_prog_cmp_skip='cmp --ignore-initial=16 $$f1 $$f2'
+     fi
+   fi
+   rm t1 t2
+ ])
+ do_compare="$gcc_cv_prog_cmp_skip"
+ AC_SUBST(do_compare)
+ ])
+ 
+ dnl See whether we can include both string.h and strings.h.
+ AC_DEFUN([ACX_HEADER_STRING],
+ [AC_CACHE_CHECK([whether string.h and strings.h may both be included],
+   gcc_cv_header_string,
+ [AC_TRY_COMPILE([#include <string.h>
+ #include <strings.h>], , gcc_cv_header_string=yes, gcc_cv_header_string=no)])
+ if test $gcc_cv_header_string = yes; then
+   AC_DEFINE(STRING_WITH_STRINGS, 1, [Define if you can safely include both <string.h> and <strings.h>.])
+ fi
+ ])
+ 
+ dnl See if stdbool.h properly defines bool and true/false.
+ dnl Check whether _Bool is built-in.
+ AC_DEFUN([ACX_HEADER_STDBOOL],
+ [AC_CACHE_CHECK([for working stdbool.h],
+   ac_cv_header_stdbool_h,
+ [AC_TRY_COMPILE([#include <stdbool.h>],
+ [bool foo = false;],
+ ac_cv_header_stdbool_h=yes, ac_cv_header_stdbool_h=no)])
+ if test $ac_cv_header_stdbool_h = yes; then
+   AC_DEFINE(HAVE_STDBOOL_H, 1,
+   [Define if you have a working <stdbool.h> header file.])
+ fi
+ AC_CACHE_CHECK(for built-in _Bool, gcc_cv_c__bool,
+ [AC_TRY_COMPILE(,
+ [_Bool foo;],
+ gcc_cv_c__bool=yes, gcc_cv_c__bool=no)
+ ])
+ if test $gcc_cv_c__bool = yes; then
+   AC_DEFINE(HAVE__BOOL, 1, [Define if the \`_Bool' type is built-in.])
+ fi
+ ])
+ 
+ dnl See if hard links work and if not, try to substitute $1 or simple copy.
+ AC_DEFUN([ACX_PROG_LN],
+ [AC_MSG_CHECKING(whether ln works)
+ AC_CACHE_VAL(acx_cv_prog_LN,
+ [rm -f conftestdata_t
+ echo >conftestdata_f
+ if ln conftestdata_f conftestdata_t 2>/dev/null
+ then
+   acx_cv_prog_LN=ln
+ else
+   acx_cv_prog_LN=no
+ fi
+ rm -f conftestdata_f conftestdata_t
+ ])dnl
+ if test $acx_cv_prog_LN = no; then
+   LN="ifelse([$1],,cp,[$1])"
+   AC_MSG_RESULT([no, using $LN])
+ else
+   LN="$acx_cv_prog_LN"
+   AC_MSG_RESULT(yes)
+ fi
+ AC_SUBST(LN)dnl
+ ])
+ 
diff -Nrcpad gcc-3.4.3/config/codeset.m4 gcc-4.0.0/config/codeset.m4
*** gcc-3.4.3/config/codeset.m4	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/config/codeset.m4	Wed Sep 22 23:53:46 2004
***************
*** 0 ****
--- 1,23 ----
+ # codeset.m4 serial AM1 (gettext-0.10.40)
+ dnl Copyright (C) 2000-2002 Free Software Foundation, Inc.
+ dnl This file is free software, distributed under the terms of the GNU
+ dnl General Public License.  As a special exception to the GNU General
+ dnl Public License, this file may be distributed as part of a program
+ dnl that contains a configuration script generated by Autoconf, under
+ dnl the same distribution terms as the rest of that program.
+ 
+ dnl From Bruno Haible.
+ 
+ AC_DEFUN([AM_LANGINFO_CODESET],
+ [
+   AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset,
+     [AC_TRY_LINK([#include <langinfo.h>],
+       [char* cs = nl_langinfo(CODESET);],
+       am_cv_langinfo_codeset=yes,
+       am_cv_langinfo_codeset=no)
+     ])
+   if test $am_cv_langinfo_codeset = yes; then
+     AC_DEFINE(HAVE_LANGINFO_CODESET, 1,
+       [Define if you have <langinfo.h> and nl_langinfo(CODESET).])
+   fi
+ ])
diff -Nrcpad gcc-3.4.3/config/gcc-version.m4 gcc-4.0.0/config/gcc-version.m4
*** gcc-3.4.3/config/gcc-version.m4	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/config/gcc-version.m4	Thu Dec  2 11:03:18 2004
***************
*** 0 ****
--- 1,28 ----
+ dnl Usage: TL_AC_GCC_VERSION(TOPSRCDIR)
+ dnl
+ dnl Set up the variables:
+ dnl
+ dnl     gcc_version_trigger: pathname of gcc's version.c, if available
+ dnl     gcc_version_full: full gcc version string
+ dnl     gcc_version: the first "word" in $gcc_version_full
+ dnl
+ dnl TOPSRCDIR is the top-level source directory.
+ AC_DEFUN([TL_AC_GCC_VERSION],
+ [
+ changequote(,)dnl
+ if test "${with_gcc_version_trigger+set}" = set; then
+   gcc_version_trigger=$with_gcc_version_trigger
+ else
+   gcc_version_trigger=$1/gcc/version.c
+ fi
+ if test -f "${gcc_version_trigger}"; then
+   gcc_version_full=`grep version_string "${gcc_version_trigger}" | sed -e 's/.*"\([^"]*\)".*/\1/'`
+ else
+   gcc_version_full=`$CC -v 2>&1 | sed -n 's/^gcc version //p'`
+ fi
+ gcc_version=`echo ${gcc_version_full} | sed -e 's/\([^ ]*\) .*/\1/'`
+ changequote([,])dnl
+ AC_SUBST(gcc_version_trigger)
+ AC_SUBST(gcc_version_full)
+ AC_SUBST(gcc_version)
+ ])dnl
diff -Nrcpad gcc-3.4.3/config/gettext-sister.m4 gcc-4.0.0/config/gettext-sister.m4
*** gcc-3.4.3/config/gettext-sister.m4	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/config/gettext-sister.m4	Wed Sep 22 23:53:46 2004
***************
*** 0 ****
--- 1,66 ----
+ # intl sister-directory configuration rules.
+ #
+ 
+ # The idea behind this macro is that there's no need to repeat all the
+ # autoconf probes done by the intl directory - it's already done them
+ # for us.  In fact, there's no need even to look at the cache for the
+ # answers.  All we need to do is nab a few pieces of information.
+ # The intl directory is set up to make this easy, by generating a
+ # small file which can be sourced as a shell script; then we produce
+ # the necessary substitutions and definitions for this directory.
+ 
+ AC_DEFUN([ZW_GNU_GETTEXT_SISTER_DIR],
+ [# If we haven't got the data from the intl directory,
+ # assume NLS is disabled.
+ USE_NLS=no	AC_SUBST(USE_NLS)
+ LIBINTL=	AC_SUBST(LIBINTL)
+ LIBINTL_DEP=	AC_SUBST(LIBINTL_DEP)
+ INCINTL=	AC_SUBST(INCINTL)
+ XGETTEXT=	AC_SUBST(XGETTEXT)
+ GMSGFMT=	AC_SUBST(GMSGFMT)
+ POSUB=		AC_SUBST(POSUB)
+ if test -f ../intl/config.intl; then
+   . ../intl/config.intl
+ fi
+ AC_MSG_CHECKING([whether NLS is requested])
+ if test x"$USE_NLS" != xyes; then
+   AC_MSG_RESULT(no)
+ else
+   AC_MSG_RESULT(yes)
+   AC_DEFINE(ENABLE_NLS, 1, 
+  [Define to 1 if translation of program messages to the 
+   user's native language is requested.])
+ 
+   AC_MSG_CHECKING(for catalogs to be installed)
+   # Look for .po and .gmo files in the source directory.
+   CATALOGS=  AC_SUBST(CATALOGS)
+   XLINGUAS=
+   for cat in $srcdir/po/*.gmo $srcdir/po/*.po; do
+     # If there aren't any .gmo files the shell will give us the
+     # literal string "../path/to/srcdir/po/*.gmo" which has to be
+     # weeded out.
+     case "$cat" in *\**)
+       continue;;
+     esac
+     # The quadruple backslash is collapsed to a double backslash
+     # by the backticks, then collapsed again by the double quotes,
+     # leaving us with one backslash in the sed expression (right
+     # before the dot that mustn't act as a wildcard).
+     cat=`echo $cat | sed -e "s!$srcdir/!!" -e "s!\\\\.po!.gmo!"`
+     lang=`echo $cat | sed -e 's!po/!!' -e "s!\\\\.gmo!!"`
+     # The user is allowed to set LINGUAS to a list of languages to
+     # install catalogs for.  If it's empty that means "all of them."
+     if test "x$LINGUAS" = x; then
+       CATALOGS="$CATALOGS $cat"
+       XLINGUAS="$XLINGUAS $lang"
+     else
+       case "$LINGUAS" in *$lang*)
+         CATALOGS="$CATALOGS $cat"
+         XLINGUAS="$XLINGUAS $lang"
+         ;;
+       esac
+     fi
+   done
+   LINGUAS="$XLINGUAS"
+   AC_MSG_RESULT($LINGUAS)
+ fi])
diff -Nrcpad gcc-3.4.3/config/gettext.m4 gcc-4.0.0/config/gettext.m4
*** gcc-3.4.3/config/gettext.m4	Tue Oct 14 21:39:57 2003
--- gcc-4.0.0/config/gettext.m4	Wed Sep 22 23:53:46 2004
***************
*** 1,66 ****
! # intl sister-directory configuration rules.
! #
  
! # The idea behind this macro is that there's no need to repeat all the
! # autoconf probes done by the intl directory - it's already done them
! # for us.  In fact, there's no need even to look at the cache for the
! # answers.  All we need to do is nab a few pieces of information.
! # The intl directory is set up to make this easy, by generating a
! # small file which can be sourced as a shell script; then we produce
! # the necessary substitutions and definitions for this directory.
  
! AC_DEFUN([ZW_GNU_GETTEXT_SISTER_DIR],
! [# If we haven't got the data from the intl directory,
! # assume NLS is disabled.
! USE_NLS=no	AC_SUBST(USE_NLS)
! LIBINTL=	AC_SUBST(LIBINTL)
! LIBINTL_DEP=	AC_SUBST(LIBINTL_DEP)
! INCINTL=	AC_SUBST(INCINTL)
! XGETTEXT=	AC_SUBST(XGETTEXT)
! GMSGFMT=	AC_SUBST(GMSGFMT)
! POSUB=		AC_SUBST(POSUB)
! if test -f ../intl/config.intl; then
!   . ../intl/config.intl
! fi
! AC_MSG_CHECKING([whether NLS is requested])
! if test x"$USE_NLS" != xyes; then
!   AC_MSG_RESULT(no)
! else
!   AC_MSG_RESULT(yes)
!   AC_DEFINE(ENABLE_NLS, 1, 
!  [Define to 1 if translation of program messages to the 
!   user's native language is requested.])
  
!   AC_MSG_CHECKING(for catalogs to be installed)
!   # Look for .po and .gmo files in the source directory.
!   CATALOGS=  AC_SUBST(CATALOGS)
!   XLINGUAS=
!   for cat in $srcdir/po/*.gmo $srcdir/po/*.po; do
!     # If there aren't any .gmo files the shell will give us the
!     # literal string "../path/to/srcdir/po/*.gmo" which has to be
!     # weeded out.
!     case "$cat" in *\**)
!       continue;;
!     esac
!     # The quadruple backslash is collapsed to a double backslash
!     # by the backticks, then collapsed again by the double quotes,
!     # leaving us with one backslash in the sed expression (right
!     # before the dot that mustn't act as a wildcard).
!     cat=`echo $cat | sed -e "s!$srcdir/!!" -e "s!\\\\.po!.gmo!"`
!     lang=`echo $cat | sed -e 's!po/!!' -e "s!\\\\.gmo!!"`
!     # The user is allowed to set LINGUAS to a list of languages to
!     # install catalogs for.  If it's empty that means "all of them."
!     if test "x$LINGUAS" = x; then
!       CATALOGS="$CATALOGS $cat"
!       XLINGUAS="$XLINGUAS $lang"
      else
!       case "$LINGUAS" in *$lang*)
!         CATALOGS="$CATALOGS $cat"
!         XLINGUAS="$XLINGUAS $lang"
!         ;;
!       esac
      fi
!   done
!   LINGUAS="$XLINGUAS"
!   AC_MSG_RESULT($LINGUAS)
! fi])
--- 1,415 ----
! # gettext.m4 serial 20 (gettext-0.12)
! dnl Copyright (C) 1995-2003 Free Software Foundation, Inc.
! dnl This file is free software, distributed under the terms of the GNU
! dnl General Public License.  As a special exception to the GNU General
! dnl Public License, this file may be distributed as part of a program
! dnl that contains a configuration script generated by Autoconf, under
! dnl the same distribution terms as the rest of that program.
! dnl
! dnl This file can can be used in projects which are not available under
! dnl the GNU General Public License or the GNU Library General Public
! dnl License but which still want to provide support for the GNU gettext
! dnl functionality.
! dnl Please note that the actual code of the GNU gettext library is covered
! dnl by the GNU Library General Public License, and the rest of the GNU
! dnl gettext package package is covered by the GNU General Public License.
! dnl They are *not* in the public domain.
  
! dnl Authors:
! dnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
! dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2003.
  
! dnl Macro to add for using GNU gettext.
  
! dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]).
! dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The
! dnl    default (if it is not specified or empty) is 'no-libtool'.
! dnl    INTLSYMBOL should be 'external' for packages with no intl directory,
! dnl    and 'no-libtool' or 'use-libtool' for packages with an intl directory.
! dnl    If INTLSYMBOL is 'use-libtool', then a libtool library
! dnl    $(top_builddir)/intl/libintl.la will be created (shared and/or static,
! dnl    depending on --{enable,disable}-{shared,static} and on the presence of
! dnl    AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library
! dnl    $(top_builddir)/intl/libintl.a will be created.
! dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
! dnl    implementations (in libc or libintl) without the ngettext() function
! dnl    will be ignored.  If NEEDSYMBOL is specified and is
! dnl    'need-formatstring-macros', then GNU gettext implementations that don't
! dnl    support the ISO C 99 <inttypes.h> formatstring macros will be ignored.
! dnl INTLDIR is used to find the intl libraries.  If empty,
! dnl    the value `$(top_builddir)/intl/' is used.
! dnl
! dnl The result of the configuration is one of three cases:
! dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
! dnl    and used.
! dnl    Catalog format: GNU --> install in $(datadir)
! dnl    Catalog extension: .mo after installation, .gmo in source tree
! dnl 2) GNU gettext has been found in the system's C library.
! dnl    Catalog format: GNU --> install in $(datadir)
! dnl    Catalog extension: .mo after installation, .gmo in source tree
! dnl 3) No internationalization, always use English msgid.
! dnl    Catalog format: none
! dnl    Catalog extension: none
! dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur.
! dnl The use of .gmo is historical (it was needed to avoid overwriting the
! dnl GNU format catalogs when building on a platform with an X/Open gettext),
! dnl but we keep it in order not to force irrelevant filename changes on the
! dnl maintainers.
! dnl
! AC_DEFUN([AM_GNU_GETTEXT],
! [
!   dnl Argument checking.
!   ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], ,
!     [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT
! ])])])])])
!   ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], ,
!     [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT
! ])])])])
!   define(gt_included_intl, ifelse([$1], [external], [no], [yes]))
!   define(gt_libtool_suffix_prefix, ifelse([$1], [use-libtool], [l], []))
! 
!   AC_REQUIRE([AM_PO_SUBDIRS])dnl
!   ifelse(gt_included_intl, yes, [
!     AC_REQUIRE([AM_INTL_SUBDIR])dnl
!   ])
! 
!   dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
!   AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
!   AC_REQUIRE([AC_LIB_RPATH])
! 
!   dnl Sometimes libintl requires libiconv, so first search for libiconv.
!   dnl Ideally we would do this search only after the
!   dnl      if test "$USE_NLS" = "yes"; then
!   dnl        if test "$gt_cv_func_gnugettext_libc" != "yes"; then
!   dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT
!   dnl the configure script would need to contain the same shell code
!   dnl again, outside any 'if'. There are two solutions:
!   dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'.
!   dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE.
!   dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not
!   dnl documented, we avoid it.
!   ifelse(gt_included_intl, yes, , [
!     AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
!   ])
! 
!   dnl Set USE_NLS.
!   AM_NLS
! 
!   ifelse(gt_included_intl, yes, [
!     BUILD_INCLUDED_LIBINTL=no
!     USE_INCLUDED_LIBINTL=no
!   ])
!   LIBINTL=
!   LTLIBINTL=
!   POSUB=
! 
!   dnl If we use NLS figure out what method
!   if test "$USE_NLS" = "yes"; then
!     gt_use_preinstalled_gnugettext=no
!     ifelse(gt_included_intl, yes, [
!       AC_MSG_CHECKING([whether included gettext is requested])
!       AC_ARG_WITH(included-gettext,
!         [  --with-included-gettext use the GNU gettext library included here],
!         nls_cv_force_use_gnu_gettext=$withval,
!         nls_cv_force_use_gnu_gettext=no)
!       AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
! 
!       nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
!       if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
!     ])
!         dnl User does not insist on using GNU NLS library.  Figure out what
!         dnl to use.  If GNU gettext is available we use this.  Else we have
!         dnl to fall back to GNU NLS library.
! 
!         dnl Add a version number to the cache macros.
!         define([gt_api_version], ifelse([$2], [need-formatstring-macros], 3, ifelse([$2], [need-ngettext], 2, 1)))
!         define([gt_cv_func_gnugettext_libc], [gt_cv_func_gnugettext]gt_api_version[_libc])
!         define([gt_cv_func_gnugettext_libintl], [gt_cv_func_gnugettext]gt_api_version[_libintl])
! 
!         AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc,
!          [AC_TRY_LINK([#include <libintl.h>
! ]ifelse([$2], [need-formatstring-macros],
! [#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
! #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
! #endif
! changequote(,)dnl
! typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
! changequote([,])dnl
! ], [])[extern int _nl_msg_cat_cntr;
! extern int *_nl_domain_bindings;],
!             [bindtextdomain ("", "");
! return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_domain_bindings],
!             gt_cv_func_gnugettext_libc=yes,
!             gt_cv_func_gnugettext_libc=no)])
! 
!         if test "$gt_cv_func_gnugettext_libc" != "yes"; then
!           dnl Sometimes libintl requires libiconv, so first search for libiconv.
!           ifelse(gt_included_intl, yes, , [
!             AM_ICONV_LINK
!           ])
!           dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL
!           dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv])
!           dnl because that would add "-liconv" to LIBINTL and LTLIBINTL
!           dnl even if libiconv doesn't exist.
!           AC_LIB_LINKFLAGS_BODY([intl])
!           AC_CACHE_CHECK([for GNU gettext in libintl],
!             gt_cv_func_gnugettext_libintl,
!            [gt_save_CPPFLAGS="$CPPFLAGS"
!             CPPFLAGS="$CPPFLAGS $INCINTL"
!             gt_save_LIBS="$LIBS"
!             LIBS="$LIBS $LIBINTL"
!             dnl Now see whether libintl exists and does not depend on libiconv.
!             AC_TRY_LINK([#include <libintl.h>
! ]ifelse([$2], [need-formatstring-macros],
! [#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
! #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
! #endif
! changequote(,)dnl
! typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
! changequote([,])dnl
! ], [])[extern int _nl_msg_cat_cntr;
! extern
! #ifdef __cplusplus
! "C"
! #endif
! const char *_nl_expand_alias ();],
!               [bindtextdomain ("", "");
! return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)],
!               gt_cv_func_gnugettext_libintl=yes,
!               gt_cv_func_gnugettext_libintl=no)
!             dnl Now see whether libintl exists and depends on libiconv.
!             if test "$gt_cv_func_gnugettext_libintl" != yes && test -n "$LIBICONV"; then
!               LIBS="$LIBS $LIBICONV"
!               AC_TRY_LINK([#include <libintl.h>
! ]ifelse([$2], [need-formatstring-macros],
! [#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
! #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
! #endif
! changequote(,)dnl
! typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
! changequote([,])dnl
! ], [])[extern int _nl_msg_cat_cntr;
! extern
! #ifdef __cplusplus
! "C"
! #endif
! const char *_nl_expand_alias ();],
!                 [bindtextdomain ("", "");
! return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)],
!                [LIBINTL="$LIBINTL $LIBICONV"
!                 LTLIBINTL="$LTLIBINTL $LTLIBICONV"
!                 gt_cv_func_gnugettext_libintl=yes
!                ])
!             fi
!             CPPFLAGS="$gt_save_CPPFLAGS"
!             LIBS="$gt_save_LIBS"])
!         fi
! 
!         dnl If an already present or preinstalled GNU gettext() is found,
!         dnl use it.  But if this macro is used in GNU gettext, and GNU
!         dnl gettext is already preinstalled in libintl, we update this
!         dnl libintl.  (Cf. the install rule in intl/Makefile.in.)
!         if test "$gt_cv_func_gnugettext_libc" = "yes" \
!            || { test "$gt_cv_func_gnugettext_libintl" = "yes" \
!                 && test "$PACKAGE" != gettext-runtime \
!                 && test "$PACKAGE" != gettext-tools; }; then
!           gt_use_preinstalled_gnugettext=yes
!         else
!           dnl Reset the values set by searching for libintl.
!           LIBINTL=
!           LTLIBINTL=
!           INCINTL=
!         fi
! 
!     ifelse(gt_included_intl, yes, [
!         if test "$gt_use_preinstalled_gnugettext" != "yes"; then
!           dnl GNU gettext is not found in the C library.
!           dnl Fall back on included GNU gettext library.
!           nls_cv_use_gnu_gettext=yes
!         fi
!       fi
! 
!       if test "$nls_cv_use_gnu_gettext" = "yes"; then
!         dnl Mark actions used to generate GNU NLS library.
!         BUILD_INCLUDED_LIBINTL=yes
!         USE_INCLUDED_LIBINTL=yes
!         LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV"
!         LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV"
!         LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
!       fi
! 
!       if test "$gt_use_preinstalled_gnugettext" = "yes" \
!          || test "$nls_cv_use_gnu_gettext" = "yes"; then
!         dnl Mark actions to use GNU gettext tools.
!         CATOBJEXT=.gmo
!       fi
!     ])
! 
!     if test "$gt_use_preinstalled_gnugettext" = "yes" \
!        || test "$nls_cv_use_gnu_gettext" = "yes"; then
!       AC_DEFINE(ENABLE_NLS, 1,
!         [Define to 1 if translation of program messages to the user's native language
!    is requested.])
      else
!       USE_NLS=no
      fi
!   fi
! 
!   AC_MSG_CHECKING([whether to use NLS])
!   AC_MSG_RESULT([$USE_NLS])
!   if test "$USE_NLS" = "yes"; then
!     AC_MSG_CHECKING([where the gettext function comes from])
!     if test "$gt_use_preinstalled_gnugettext" = "yes"; then
!       if test "$gt_cv_func_gnugettext_libintl" = "yes"; then
!         gt_source="external libintl"
!       else
!         gt_source="libc"
!       fi
!     else
!       gt_source="included intl directory"
!     fi
!     AC_MSG_RESULT([$gt_source])
!   fi
! 
!   if test "$USE_NLS" = "yes"; then
! 
!     if test "$gt_use_preinstalled_gnugettext" = "yes"; then
!       if test "$gt_cv_func_gnugettext_libintl" = "yes"; then
!         AC_MSG_CHECKING([how to link with libintl])
!         AC_MSG_RESULT([$LIBINTL])
!         AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL])
!       fi
! 
!       dnl For backward compatibility. Some packages may be using this.
!       AC_DEFINE(HAVE_GETTEXT, 1,
!        [Define if the GNU gettext() function is already present or preinstalled.])
!       AC_DEFINE(HAVE_DCGETTEXT, 1,
!        [Define if the GNU dcgettext() function is already present or preinstalled.])
!     fi
! 
!     dnl We need to process the po/ directory.
!     POSUB=po
!   fi
! 
!   ifelse(gt_included_intl, yes, [
!     dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
!     dnl to 'yes' because some of the testsuite requires it.
!     if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then
!       BUILD_INCLUDED_LIBINTL=yes
!     fi
! 
!     dnl Make all variables we use known to autoconf.
!     AC_SUBST(BUILD_INCLUDED_LIBINTL)
!     AC_SUBST(USE_INCLUDED_LIBINTL)
!     AC_SUBST(CATOBJEXT)
! 
!     dnl For backward compatibility. Some configure.ins may be using this.
!     nls_cv_header_intl=
!     nls_cv_header_libgt=
! 
!     dnl For backward compatibility. Some Makefiles may be using this.
!     DATADIRNAME=share
!     AC_SUBST(DATADIRNAME)
! 
!     dnl For backward compatibility. Some Makefiles may be using this.
!     INSTOBJEXT=.mo
!     AC_SUBST(INSTOBJEXT)
! 
!     dnl For backward compatibility. Some Makefiles may be using this.
!     GENCAT=gencat
!     AC_SUBST(GENCAT)
! 
!     dnl For backward compatibility. Some Makefiles may be using this.
!     if test "$USE_INCLUDED_LIBINTL" = yes; then
!       INTLOBJS="\$(GETTOBJS)"
!     fi
!     AC_SUBST(INTLOBJS)
! 
!     dnl Enable libtool support if the surrounding package wishes it.
!     INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix
!     AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX)
!   ])
! 
!   dnl For backward compatibility. Some Makefiles may be using this.
!   INTLLIBS="$LIBINTL"
!   AC_SUBST(INTLLIBS)
! 
!   dnl Make all documented variables known to autoconf.
!   AC_SUBST(LIBINTL)
!   AC_SUBST(LTLIBINTL)
!   AC_SUBST(POSUB)
! ])
! 
! 
! dnl Checks for all prerequisites of the intl subdirectory,
! dnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS,
! dnl            USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL.
! AC_DEFUN([AM_INTL_SUBDIR],
! [
!   AC_REQUIRE([AC_PROG_INSTALL])dnl
!   AC_REQUIRE([AM_MKINSTALLDIRS])dnl
!   AC_REQUIRE([AC_PROG_CC])dnl
!   AC_REQUIRE([AC_CANONICAL_HOST])dnl
!   AC_REQUIRE([AC_PROG_RANLIB])dnl
!   AC_REQUIRE([AC_ISC_POSIX])dnl
!   AC_REQUIRE([AC_HEADER_STDC])dnl
!   AC_REQUIRE([AC_C_CONST])dnl
!   AC_REQUIRE([AC_C_INLINE])dnl
!   AC_REQUIRE([AC_TYPE_OFF_T])dnl
!   AC_REQUIRE([AC_TYPE_SIZE_T])dnl
!   AC_REQUIRE([AC_FUNC_ALLOCA])dnl
!   AC_REQUIRE([AC_FUNC_MMAP])dnl
!   AC_REQUIRE([jm_GLIBC21])dnl
!   AC_REQUIRE([gt_INTDIV0])dnl
!   AC_REQUIRE([jm_AC_TYPE_UINTMAX_T])dnl
!   AC_REQUIRE([gt_HEADER_INTTYPES_H])dnl
!   AC_REQUIRE([gt_INTTYPES_PRI])dnl
! 
!   AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \
! stdlib.h string.h unistd.h sys/param.h])
!   AC_CHECK_FUNCS([feof_unlocked fgets_unlocked getc_unlocked getcwd getegid \
! geteuid getgid getuid mempcpy munmap putenv setenv setlocale stpcpy \
! strcasecmp strdup strtoul tsearch __argz_count __argz_stringify __argz_next \
! __fsetlocking])
! 
!   AM_ICONV
!   AM_LANGINFO_CODESET
!   if test $ac_cv_header_locale_h = yes; then
!     AM_LC_MESSAGES
!   fi
! 
!   dnl intl/plural.c is generated from intl/plural.y. It requires bison,
!   dnl because plural.y uses bison specific features. It requires at least
!   dnl bison-1.26 because earlier versions generate a plural.c that doesn't
!   dnl compile.
!   dnl bison is only needed for the maintainer (who touches plural.y). But in
!   dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put
!   dnl the rule in general Makefile. Now, some people carelessly touch the
!   dnl files or have a broken "make" program, hence the plural.c rule will
!   dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not
!   dnl present or too old.
!   AC_CHECK_PROGS([INTLBISON], [bison])
!   if test -z "$INTLBISON"; then
!     ac_verc_fail=yes
!   else
!     dnl Found it, now check the version.
!     AC_MSG_CHECKING([version of bison])
! changequote(<<,>>)dnl
!     ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
!     case $ac_prog_version in
!       '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
!       1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)
! changequote([,])dnl
!          ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
!       *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
!     esac
!     AC_MSG_RESULT([$ac_prog_version])
!   fi
!   if test $ac_verc_fail = yes; then
!     INTLBISON=:
!   fi
! ])
! 
! 
! dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version])
! AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
diff -Nrcpad gcc-3.4.3/config/glibc21.m4 gcc-4.0.0/config/glibc21.m4
*** gcc-3.4.3/config/glibc21.m4	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/config/glibc21.m4	Wed Sep 22 23:53:46 2004
***************
*** 0 ****
--- 1,32 ----
+ # glibc21.m4 serial 2 (fileutils-4.1.3, gettext-0.10.40)
+ dnl Copyright (C) 2000-2002 Free Software Foundation, Inc.
+ dnl This file is free software, distributed under the terms of the GNU
+ dnl General Public License.  As a special exception to the GNU General
+ dnl Public License, this file may be distributed as part of a program
+ dnl that contains a configuration script generated by Autoconf, under
+ dnl the same distribution terms as the rest of that program.
+ 
+ # Test for the GNU C Library, version 2.1 or newer.
+ # From Bruno Haible.
+ 
+ AC_DEFUN([jm_GLIBC21],
+   [
+     AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer,
+       ac_cv_gnu_library_2_1,
+       [AC_EGREP_CPP([Lucky GNU user],
+ 	[
+ #include <features.h>
+ #ifdef __GNU_LIBRARY__
+  #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
+   Lucky GNU user
+  #endif
+ #endif
+ 	],
+ 	ac_cv_gnu_library_2_1=yes,
+ 	ac_cv_gnu_library_2_1=no)
+       ]
+     )
+     AC_SUBST(GLIBC21)
+     GLIBC21="$ac_cv_gnu_library_2_1"
+   ]
+ )
diff -Nrcpad gcc-3.4.3/config/gxx-include-dir.m4 gcc-4.0.0/config/gxx-include-dir.m4
*** gcc-3.4.3/config/gxx-include-dir.m4	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/config/gxx-include-dir.m4	Fri Dec  3 10:44:37 2004
***************
*** 0 ****
--- 1,26 ----
+ dnl Usage: TL_AC_GXX_INCLUDE_DIR
+ dnl
+ dnl Set $gxx_include_dir to the location of the installed C++ include
+ dnl directory.  The value depends on $gcc_version and the configuration
+ dnl options --with-gxx-include-dir and --enable-version-specific-runtime-libs.
+ dnl
+ dnl If you change the default here, you'll need to change the gcc and
+ dnl libstdc++-v3 subdirectories too.
+ AC_DEFUN([TL_AC_GXX_INCLUDE_DIR],
+ [
+ case "${with_gxx_include_dir}" in
+   yes)
+     AC_MSG_ERROR([--with-gxx-include-dir=[[dir]] requires a directory])
+     ;;
+   no | "")
+     case "${enable_version_specific_runtime_libs}" in
+       yes) gxx_include_dir='${libsubdir}/include/c++' ;;
+       *)
+ 	libstdcxx_incdir=c++/${gcc_version}
+ 	gxx_include_dir='${prefix}/include/'${libstdcxx_incdir} ;;
+     esac ;;
+   *) gxx_include_dir=${with_gxx_include_dir} ;;
+ esac
+ AC_SUBST(gxx_include_dir)
+ AC_SUBST(libstdcxx_incdir)
+ ])
diff -Nrcpad gcc-3.4.3/config/iconv.m4 gcc-4.0.0/config/iconv.m4
*** gcc-3.4.3/config/iconv.m4	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/config/iconv.m4	Wed Sep 22 23:53:46 2004
***************
*** 0 ****
--- 1,103 ----
+ # iconv.m4 serial AM4 (gettext-0.11.3)
+ dnl Copyright (C) 2000-2002 Free Software Foundation, Inc.
+ dnl This file is free software, distributed under the terms of the GNU
+ dnl General Public License.  As a special exception to the GNU General
+ dnl Public License, this file may be distributed as part of a program
+ dnl that contains a configuration script generated by Autoconf, under
+ dnl the same distribution terms as the rest of that program.
+ 
+ dnl From Bruno Haible.
+ 
+ AC_DEFUN([AM_ICONV_LINKFLAGS_BODY],
+ [
+   dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
+   AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+   AC_REQUIRE([AC_LIB_RPATH])
+ 
+   dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+   dnl accordingly.
+   AC_LIB_LINKFLAGS_BODY([iconv])
+ ])
+ 
+ AC_DEFUN([AM_ICONV_LINK],
+ [
+   dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
+   dnl those with the standalone portable GNU libiconv installed).
+ 
+   dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+   dnl accordingly.
+   AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
+ 
+   dnl Add $INCICONV to CPPFLAGS before performing the following checks,
+   dnl because if the user has installed libiconv and not disabled its use
+   dnl via --without-libiconv-prefix, he wants to use it. The first
+   dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed.
+   am_save_CPPFLAGS="$CPPFLAGS"
+   AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])
+ 
+   AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [
+     am_cv_func_iconv="no, consider installing GNU libiconv"
+     am_cv_lib_iconv=no
+     AC_TRY_LINK([#include <stdlib.h>
+ #include <iconv.h>],
+       [iconv_t cd = iconv_open("","");
+        iconv(cd,NULL,NULL,NULL,NULL);
+        iconv_close(cd);],
+       am_cv_func_iconv=yes)
+     if test "$am_cv_func_iconv" != yes; then
+       am_save_LIBS="$LIBS"
+       LIBS="$LIBS $LIBICONV"
+       AC_TRY_LINK([#include <stdlib.h>
+ #include <iconv.h>],
+         [iconv_t cd = iconv_open("","");
+          iconv(cd,NULL,NULL,NULL,NULL);
+          iconv_close(cd);],
+         am_cv_lib_iconv=yes
+         am_cv_func_iconv=yes)
+       LIBS="$am_save_LIBS"
+     fi
+   ])
+   if test "$am_cv_func_iconv" = yes; then
+     AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])
+   fi
+   if test "$am_cv_lib_iconv" = yes; then
+     AC_MSG_CHECKING([how to link with libiconv])
+     AC_MSG_RESULT([$LIBICONV])
+   else
+     dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV
+     dnl either.
+     CPPFLAGS="$am_save_CPPFLAGS"
+     LIBICONV=
+     LTLIBICONV=
+   fi
+   AC_SUBST(LIBICONV)
+   AC_SUBST(LTLIBICONV)
+ ])
+ 
+ AC_DEFUN([AM_ICONV],
+ [
+   AM_ICONV_LINK
+   if test "$am_cv_func_iconv" = yes; then
+     AC_MSG_CHECKING([for iconv declaration])
+     AC_CACHE_VAL(am_cv_proto_iconv, [
+       AC_TRY_COMPILE([
+ #include <stdlib.h>
+ #include <iconv.h>
+ extern
+ #ifdef __cplusplus
+ "C"
+ #endif
+ #if defined(__STDC__) || defined(__cplusplus)
+ size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+ #else
+ size_t iconv();
+ #endif
+ ], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const")
+       am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
+     am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+     AC_MSG_RESULT([$]{ac_t:-
+          }[$]am_cv_proto_iconv)
+     AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1,
+       [Define as const if the declaration of iconv() needs const.])
+   fi
+ ])
diff -Nrcpad gcc-3.4.3/config/intdiv0.m4 gcc-4.0.0/config/intdiv0.m4
*** gcc-3.4.3/config/intdiv0.m4	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/config/intdiv0.m4	Wed Sep 22 23:53:46 2004
***************
*** 0 ****
--- 1,72 ----
+ # intdiv0.m4 serial 1 (gettext-0.11.3)
+ dnl Copyright (C) 2002 Free Software Foundation, Inc.
+ dnl This file is free software, distributed under the terms of the GNU
+ dnl General Public License.  As a special exception to the GNU General
+ dnl Public License, this file may be distributed as part of a program
+ dnl that contains a configuration script generated by Autoconf, under
+ dnl the same distribution terms as the rest of that program.
+ 
+ dnl From Bruno Haible.
+ 
+ AC_DEFUN([gt_INTDIV0],
+ [
+   AC_REQUIRE([AC_PROG_CC])dnl
+   AC_REQUIRE([AC_CANONICAL_HOST])dnl
+ 
+   AC_CACHE_CHECK([whether integer division by zero raises SIGFPE],
+     gt_cv_int_divbyzero_sigfpe,
+     [
+       AC_TRY_RUN([
+ #include <stdlib.h>
+ #include <signal.h>
+ 
+ static void
+ #ifdef __cplusplus
+ sigfpe_handler (int sig)
+ #else
+ sigfpe_handler (sig) int sig;
+ #endif
+ {
+   /* Exit with code 0 if SIGFPE, with code 1 if any other signal.  */
+   exit (sig != SIGFPE);
+ }
+ 
+ int x = 1;
+ int y = 0;
+ int z;
+ int nan;
+ 
+ int main ()
+ {
+   signal (SIGFPE, sigfpe_handler);
+ /* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP.  */
+ #if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP)
+   signal (SIGTRAP, sigfpe_handler);
+ #endif
+ /* Linux/SPARC yields signal SIGILL.  */
+ #if defined (__sparc__) && defined (__linux__)
+   signal (SIGILL, sigfpe_handler);
+ #endif
+ 
+   z = x / y;
+   nan = y / y;
+   exit (1);
+ }
+ ], gt_cv_int_divbyzero_sigfpe=yes, gt_cv_int_divbyzero_sigfpe=no,
+         [
+           # Guess based on the CPU.
+           case "$host_cpu" in
+             alpha* | i[34567]86 | m68k | s390*)
+               gt_cv_int_divbyzero_sigfpe="guessing yes";;
+             *)
+               gt_cv_int_divbyzero_sigfpe="guessing no";;
+           esac
+         ])
+     ])
+   case "$gt_cv_int_divbyzero_sigfpe" in
+     *yes) value=1;;
+     *) value=0;;
+   esac
+   AC_DEFINE_UNQUOTED(INTDIV0_RAISES_SIGFPE, $value,
+     [Define if integer division by zero raises signal SIGFPE.])
+ ])
diff -Nrcpad gcc-3.4.3/config/inttypes-pri.m4 gcc-4.0.0/config/inttypes-pri.m4
*** gcc-3.4.3/config/inttypes-pri.m4	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/config/inttypes-pri.m4	Wed Sep 22 23:53:46 2004
***************
*** 0 ****
--- 1,32 ----
+ # inttypes-pri.m4 serial 1 (gettext-0.11.4)
+ dnl Copyright (C) 1997-2002 Free Software Foundation, Inc.
+ dnl This file is free software, distributed under the terms of the GNU
+ dnl General Public License.  As a special exception to the GNU General
+ dnl Public License, this file may be distributed as part of a program
+ dnl that contains a configuration script generated by Autoconf, under
+ dnl the same distribution terms as the rest of that program.
+ 
+ dnl From Bruno Haible.
+ 
+ # Define PRI_MACROS_BROKEN if <inttypes.h> exists and defines the PRI*
+ # macros to non-string values.  This is the case on AIX 4.3.3.
+ 
+ AC_DEFUN([gt_INTTYPES_PRI],
+ [
+   AC_REQUIRE([gt_HEADER_INTTYPES_H])
+   if test $gt_cv_header_inttypes_h = yes; then
+     AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken],
+       gt_cv_inttypes_pri_broken,
+       [
+         AC_TRY_COMPILE([#include <inttypes.h>
+ #ifdef PRId32
+ char *p = PRId32;
+ #endif
+ ], [], gt_cv_inttypes_pri_broken=no, gt_cv_inttypes_pri_broken=yes)
+       ])
+   fi
+   if test "$gt_cv_inttypes_pri_broken" = yes; then
+     AC_DEFINE_UNQUOTED(PRI_MACROS_BROKEN, 1,
+       [Define if <inttypes.h> exists and defines unusable PRI* macros.])
+   fi
+ ])
diff -Nrcpad gcc-3.4.3/config/inttypes.m4 gcc-4.0.0/config/inttypes.m4
*** gcc-3.4.3/config/inttypes.m4	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/config/inttypes.m4	Wed Sep 22 23:53:46 2004
***************
*** 0 ****
--- 1,27 ----
+ # inttypes.m4 serial 1 (gettext-0.11.4)
+ dnl Copyright (C) 1997-2002 Free Software Foundation, Inc.
+ dnl This file is free software, distributed under the terms of the GNU
+ dnl General Public License.  As a special exception to the GNU General
+ dnl Public License, this file may be distributed as part of a program
+ dnl that contains a configuration script generated by Autoconf, under
+ dnl the same distribution terms as the rest of that program.
+ 
+ dnl From Paul Eggert.
+ 
+ # Define HAVE_INTTYPES_H if <inttypes.h> exists and doesn't clash with
+ # <sys/types.h>.
+ 
+ AC_DEFUN([gt_HEADER_INTTYPES_H],
+ [
+   AC_CACHE_CHECK([for inttypes.h], gt_cv_header_inttypes_h,
+   [
+     AC_TRY_COMPILE(
+       [#include <sys/types.h>
+ #include <inttypes.h>],
+       [], gt_cv_header_inttypes_h=yes, gt_cv_header_inttypes_h=no)
+   ])
+   if test $gt_cv_header_inttypes_h = yes; then
+     AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H, 1,
+       [Define if <inttypes.h> exists and doesn't clash with <sys/types.h>.])
+   fi
+ ])
diff -Nrcpad gcc-3.4.3/config/inttypes_h.m4 gcc-4.0.0/config/inttypes_h.m4
*** gcc-3.4.3/config/inttypes_h.m4	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/config/inttypes_h.m4	Wed Sep 22 23:53:46 2004
***************
*** 0 ****
--- 1,28 ----
+ # inttypes_h.m4 serial 5 (gettext-0.12)
+ dnl Copyright (C) 1997-2003 Free Software Foundation, Inc.
+ dnl This file is free software, distributed under the terms of the GNU
+ dnl General Public License.  As a special exception to the GNU General
+ dnl Public License, this file may be distributed as part of a program
+ dnl that contains a configuration script generated by Autoconf, under
+ dnl the same distribution terms as the rest of that program.
+ 
+ dnl From Paul Eggert.
+ 
+ # Define HAVE_INTTYPES_H_WITH_UINTMAX if <inttypes.h> exists,
+ # doesn't clash with <sys/types.h>, and declares uintmax_t.
+ 
+ AC_DEFUN([jm_AC_HEADER_INTTYPES_H],
+ [
+   AC_CACHE_CHECK([for inttypes.h], jm_ac_cv_header_inttypes_h,
+   [AC_TRY_COMPILE(
+     [#include <sys/types.h>
+ #include <inttypes.h>],
+     [uintmax_t i = (uintmax_t) -1;],
+     jm_ac_cv_header_inttypes_h=yes,
+     jm_ac_cv_header_inttypes_h=no)])
+   if test $jm_ac_cv_header_inttypes_h = yes; then
+     AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H_WITH_UINTMAX, 1,
+       [Define if <inttypes.h> exists, doesn't clash with <sys/types.h>,
+        and declares uintmax_t. ])
+   fi
+ ])
diff -Nrcpad gcc-3.4.3/config/lcmessage.m4 gcc-4.0.0/config/lcmessage.m4
*** gcc-3.4.3/config/lcmessage.m4	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/config/lcmessage.m4	Wed Sep 22 23:53:46 2004
***************
*** 0 ****
--- 1,32 ----
+ # lcmessage.m4 serial 3 (gettext-0.11.3)
+ dnl Copyright (C) 1995-2002 Free Software Foundation, Inc.
+ dnl This file is free software, distributed under the terms of the GNU
+ dnl General Public License.  As a special exception to the GNU General
+ dnl Public License, this file may be distributed as part of a program
+ dnl that contains a configuration script generated by Autoconf, under
+ dnl the same distribution terms as the rest of that program.
+ dnl
+ dnl This file can can be used in projects which are not available under
+ dnl the GNU General Public License or the GNU Library General Public
+ dnl License but which still want to provide support for the GNU gettext
+ dnl functionality.
+ dnl Please note that the actual code of the GNU gettext library is covered
+ dnl by the GNU Library General Public License, and the rest of the GNU
+ dnl gettext package package is covered by the GNU General Public License.
+ dnl They are *not* in the public domain.
+ 
+ dnl Authors:
+ dnl   Ulrich Drepper <drepper@cygnus.com>, 1995.
+ 
+ # Check whether LC_MESSAGES is available in <locale.h>.
+ 
+ AC_DEFUN([AM_LC_MESSAGES],
+ [
+   AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
+     [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
+        am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
+   if test $am_cv_val_LC_MESSAGES = yes; then
+     AC_DEFINE(HAVE_LC_MESSAGES, 1,
+       [Define if your <locale.h> file defines LC_MESSAGES.])
+   fi
+ ])
diff -Nrcpad gcc-3.4.3/config/lib-ld.m4 gcc-4.0.0/config/lib-ld.m4
*** gcc-3.4.3/config/lib-ld.m4	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/config/lib-ld.m4	Wed Sep 22 23:53:46 2004
***************
*** 0 ****
--- 1,110 ----
+ # lib-ld.m4 serial 2 (gettext-0.12)
+ dnl Copyright (C) 1996-2003 Free Software Foundation, Inc.
+ dnl This file is free software, distributed under the terms of the GNU
+ dnl General Public License.  As a special exception to the GNU General
+ dnl Public License, this file may be distributed as part of a program
+ dnl that contains a configuration script generated by Autoconf, under
+ dnl the same distribution terms as the rest of that program.
+ 
+ dnl Subroutines of libtool.m4,
+ dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision
+ dnl with libtool.m4.
+ 
+ dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.
+ AC_DEFUN([AC_LIB_PROG_LD_GNU],
+ [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld,
+ [# I'd rather use --version here, but apparently some GNU ld's only accept -v.
+ if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
+   acl_cv_prog_gnu_ld=yes
+ else
+   acl_cv_prog_gnu_ld=no
+ fi])
+ with_gnu_ld=$acl_cv_prog_gnu_ld
+ ])
+ 
+ dnl From libtool-1.4. Sets the variable LD.
+ AC_DEFUN([AC_LIB_PROG_LD],
+ [AC_ARG_WITH(gnu-ld,
+ [  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]],
+ test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
+ AC_REQUIRE([AC_PROG_CC])dnl
+ AC_REQUIRE([AC_CANONICAL_HOST])dnl
+ # Prepare PATH_SEPARATOR.
+ # The user is always right.
+ if test "${PATH_SEPARATOR+set}" != set; then
+   echo "#! /bin/sh" >conf$$.sh
+   echo  "exit 0"   >>conf$$.sh
+   chmod +x conf$$.sh
+   if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+     PATH_SEPARATOR=';'
+   else
+     PATH_SEPARATOR=:
+   fi
+   rm -f conf$$.sh
+ fi
+ ac_prog=ld
+ if test "$GCC" = yes; then
+   # Check if gcc -print-prog-name=ld gives a path.
+   AC_MSG_CHECKING([for ld used by GCC])
+   case $host in
+   *-*-mingw*)
+     # gcc leaves a trailing carriage return which upsets mingw
+     ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+   *)
+     ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+   esac
+   case $ac_prog in
+     # Accept absolute paths.
+     [[\\/]* | [A-Za-z]:[\\/]*)]
+       [re_direlt='/[^/][^/]*/\.\./']
+       # Canonicalize the path of ld
+       ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+       while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+ 	ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+       done
+       test -z "$LD" && LD="$ac_prog"
+       ;;
+   "")
+     # If it fails, then pretend we aren't using GCC.
+     ac_prog=ld
+     ;;
+   *)
+     # If it is relative, then search for the first ld in PATH.
+     with_gnu_ld=unknown
+     ;;
+   esac
+ elif test "$with_gnu_ld" = yes; then
+   AC_MSG_CHECKING([for GNU ld])
+ else
+   AC_MSG_CHECKING([for non-GNU ld])
+ fi
+ AC_CACHE_VAL(acl_cv_path_LD,
+ [if test -z "$LD"; then
+   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+   for ac_dir in $PATH; do
+     test -z "$ac_dir" && ac_dir=.
+     if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+       acl_cv_path_LD="$ac_dir/$ac_prog"
+       # Check to see if the program is GNU ld.  I'd rather use --version,
+       # but apparently some GNU ld's only accept -v.
+       # Break only if it was the GNU/non-GNU ld that we prefer.
+       if "$acl_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
+ 	test "$with_gnu_ld" != no && break
+       else
+ 	test "$with_gnu_ld" != yes && break
+       fi
+     fi
+   done
+   IFS="$ac_save_ifs"
+ else
+   acl_cv_path_LD="$LD" # Let the user override the test with a path.
+ fi])
+ LD="$acl_cv_path_LD"
+ if test -n "$LD"; then
+   AC_MSG_RESULT($LD)
+ else
+   AC_MSG_RESULT(no)
+ fi
+ test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+ AC_LIB_PROG_LD_GNU
+ ])
diff -Nrcpad gcc-3.4.3/config/lib-link.m4 gcc-4.0.0/config/lib-link.m4
*** gcc-3.4.3/config/lib-link.m4	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/config/lib-link.m4	Wed Sep 22 23:53:46 2004
***************
*** 0 ****
--- 1,551 ----
+ # lib-link.m4 serial 4 (gettext-0.12)
+ dnl Copyright (C) 2001-2003 Free Software Foundation, Inc.
+ dnl This file is free software, distributed under the terms of the GNU
+ dnl General Public License.  As a special exception to the GNU General
+ dnl Public License, this file may be distributed as part of a program
+ dnl that contains a configuration script generated by Autoconf, under
+ dnl the same distribution terms as the rest of that program.
+ 
+ dnl From Bruno Haible.
+ 
+ dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
+ dnl the libraries corresponding to explicit and implicit dependencies.
+ dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and
+ dnl augments the CPPFLAGS variable.
+ AC_DEFUN([AC_LIB_LINKFLAGS],
+ [
+   AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+   AC_REQUIRE([AC_LIB_RPATH])
+   define([Name],[translit([$1],[./-], [___])])
+   define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                                [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+   AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
+     AC_LIB_LINKFLAGS_BODY([$1], [$2])
+     ac_cv_lib[]Name[]_libs="$LIB[]NAME"
+     ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
+     ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
+   ])
+   LIB[]NAME="$ac_cv_lib[]Name[]_libs"
+   LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
+   INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
+   AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+   AC_SUBST([LIB]NAME)
+   AC_SUBST([LTLIB]NAME)
+   dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
+   dnl results of this search when this library appears as a dependency.
+   HAVE_LIB[]NAME=yes
+   undefine([Name])
+   undefine([NAME])
+ ])
+ 
+ dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode)
+ dnl searches for libname and the libraries corresponding to explicit and
+ dnl implicit dependencies, together with the specified include files and
+ dnl the ability to compile and link the specified testcode. If found, it
+ dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and
+ dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and
+ dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
+ dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
+ AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
+ [
+   AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+   AC_REQUIRE([AC_LIB_RPATH])
+   define([Name],[translit([$1],[./-], [___])])
+   define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                                [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+ 
+   dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
+   dnl accordingly.
+   AC_LIB_LINKFLAGS_BODY([$1], [$2])
+ 
+   dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,
+   dnl because if the user has installed lib[]Name and not disabled its use
+   dnl via --without-lib[]Name-prefix, he wants to use it.
+   ac_save_CPPFLAGS="$CPPFLAGS"
+   AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+ 
+   AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
+     ac_save_LIBS="$LIBS"
+     LIBS="$LIBS $LIB[]NAME"
+     AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no])
+     LIBS="$ac_save_LIBS"
+   ])
+   if test "$ac_cv_lib[]Name" = yes; then
+     HAVE_LIB[]NAME=yes
+     AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.])
+     AC_MSG_CHECKING([how to link with lib[]$1])
+     AC_MSG_RESULT([$LIB[]NAME])
+   else
+     HAVE_LIB[]NAME=no
+     dnl If $LIB[]NAME didn't lead to a usable library, we don't need
+     dnl $INC[]NAME either.
+     CPPFLAGS="$ac_save_CPPFLAGS"
+     LIB[]NAME=
+     LTLIB[]NAME=
+   fi
+   AC_SUBST([HAVE_LIB]NAME)
+   AC_SUBST([LIB]NAME)
+   AC_SUBST([LTLIB]NAME)
+   undefine([Name])
+   undefine([NAME])
+ ])
+ 
+ dnl Determine the platform dependent parameters needed to use rpath:
+ dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator,
+ dnl hardcode_direct, hardcode_minus_L.
+ AC_DEFUN([AC_LIB_RPATH],
+ [
+   AC_REQUIRE([AC_PROG_CC])                dnl we use $CC, $GCC, $LDFLAGS
+   AC_REQUIRE([AC_LIB_PROG_LD])            dnl we use $LD, $with_gnu_ld
+   AC_REQUIRE([AC_CANONICAL_HOST])         dnl we use $host
+   AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
+   AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [
+     CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+     ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+     . ./conftest.sh
+     rm -f ./conftest.sh
+     acl_cv_rpath=done
+   ])
+   wl="$acl_cv_wl"
+   libext="$acl_cv_libext"
+   shlibext="$acl_cv_shlibext"
+   hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+   hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+   hardcode_direct="$acl_cv_hardcode_direct"
+   hardcode_minus_L="$acl_cv_hardcode_minus_L"
+   dnl Determine whether the user wants rpath handling at all.
+   AC_ARG_ENABLE(rpath,
+     [  --disable-rpath         do not hardcode runtime library paths],
+     :, enable_rpath=yes)
+ ])
+ 
+ dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
+ dnl the libraries corresponding to explicit and implicit dependencies.
+ dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
+ AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
+ [
+   define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                                [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+   dnl By default, look in $includedir and $libdir.
+   use_additional=yes
+   AC_LIB_WITH_FINAL_PREFIX([
+     eval additional_includedir=\"$includedir\"
+     eval additional_libdir=\"$libdir\"
+   ])
+   AC_LIB_ARG_WITH([lib$1-prefix],
+ [  --with-lib$1-prefix[=DIR]  search for lib$1 in DIR/include and DIR/lib
+   --without-lib$1-prefix     don't search for lib$1 in includedir and libdir],
+ [
+     if test "X$withval" = "Xno"; then
+       use_additional=no
+     else
+       if test "X$withval" = "X"; then
+         AC_LIB_WITH_FINAL_PREFIX([
+           eval additional_includedir=\"$includedir\"
+           eval additional_libdir=\"$libdir\"
+         ])
+       else
+         additional_includedir="$withval/include"
+         additional_libdir="$withval/lib"
+       fi
+     fi
+ ])
+   dnl Search the library and its dependencies in $additional_libdir and
+   dnl $LDFLAGS. Using breadth-first-seach.
+   LIB[]NAME=
+   LTLIB[]NAME=
+   INC[]NAME=
+   rpathdirs=
+   ltrpathdirs=
+   names_already_handled=
+   names_next_round='$1 $2'
+   while test -n "$names_next_round"; do
+     names_this_round="$names_next_round"
+     names_next_round=
+     for name in $names_this_round; do
+       already_handled=
+       for n in $names_already_handled; do
+         if test "$n" = "$name"; then
+           already_handled=yes
+           break
+         fi
+       done
+       if test -z "$already_handled"; then
+         names_already_handled="$names_already_handled $name"
+         dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
+         dnl or AC_LIB_HAVE_LINKFLAGS call.
+         uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+         eval value=\"\$HAVE_LIB$uppername\"
+         if test -n "$value"; then
+           if test "$value" = yes; then
+             eval value=\"\$LIB$uppername\"
+             test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
+             eval value=\"\$LTLIB$uppername\"
+             test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
+           else
+             dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
+             dnl that this library doesn't exist. So just drop it.
+             :
+           fi
+         else
+           dnl Search the library lib$name in $additional_libdir and $LDFLAGS
+           dnl and the already constructed $LIBNAME/$LTLIBNAME.
+           found_dir=
+           found_la=
+           found_so=
+           found_a=
+           if test $use_additional = yes; then
+             if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
+               found_dir="$additional_libdir"
+               found_so="$additional_libdir/lib$name.$shlibext"
+               if test -f "$additional_libdir/lib$name.la"; then
+                 found_la="$additional_libdir/lib$name.la"
+               fi
+             else
+               if test -f "$additional_libdir/lib$name.$libext"; then
+                 found_dir="$additional_libdir"
+                 found_a="$additional_libdir/lib$name.$libext"
+                 if test -f "$additional_libdir/lib$name.la"; then
+                   found_la="$additional_libdir/lib$name.la"
+                 fi
+               fi
+             fi
+           fi
+           if test "X$found_dir" = "X"; then
+             for x in $LDFLAGS $LTLIB[]NAME; do
+               AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+               case "$x" in
+                 -L*)
+                   dir=`echo "X$x" | sed -e 's/^X-L//'`
+                   if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
+                     found_dir="$dir"
+                     found_so="$dir/lib$name.$shlibext"
+                     if test -f "$dir/lib$name.la"; then
+                       found_la="$dir/lib$name.la"
+                     fi
+                   else
+                     if test -f "$dir/lib$name.$libext"; then
+                       found_dir="$dir"
+                       found_a="$dir/lib$name.$libext"
+                       if test -f "$dir/lib$name.la"; then
+                         found_la="$dir/lib$name.la"
+                       fi
+                     fi
+                   fi
+                   ;;
+               esac
+               if test "X$found_dir" != "X"; then
+                 break
+               fi
+             done
+           fi
+           if test "X$found_dir" != "X"; then
+             dnl Found the library.
+             LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
+             if test "X$found_so" != "X"; then
+               dnl Linking with a shared library. We attempt to hardcode its
+               dnl directory into the executable's runpath, unless it's the
+               dnl standard /usr/lib.
+               if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then
+                 dnl No hardcoding is needed.
+                 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+               else
+                 dnl Use an explicit option to hardcode DIR into the resulting
+                 dnl binary.
+                 dnl Potentially add DIR to ltrpathdirs.
+                 dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+                 haveit=
+                 for x in $ltrpathdirs; do
+                   if test "X$x" = "X$found_dir"; then
+                     haveit=yes
+                     break
+                   fi
+                 done
+                 if test -z "$haveit"; then
+                   ltrpathdirs="$ltrpathdirs $found_dir"
+                 fi
+                 dnl The hardcoding into $LIBNAME is system dependent.
+                 if test "$hardcode_direct" = yes; then
+                   dnl Using DIR/libNAME.so during linking hardcodes DIR into the
+                   dnl resulting binary.
+                   LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+                 else
+                   if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
+                     dnl Use an explicit option to hardcode DIR into the resulting
+                     dnl binary.
+                     LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+                     dnl Potentially add DIR to rpathdirs.
+                     dnl The rpathdirs will be appended to $LIBNAME at the end.
+                     haveit=
+                     for x in $rpathdirs; do
+                       if test "X$x" = "X$found_dir"; then
+                         haveit=yes
+                         break
+                       fi
+                     done
+                     if test -z "$haveit"; then
+                       rpathdirs="$rpathdirs $found_dir"
+                     fi
+                   else
+                     dnl Rely on "-L$found_dir".
+                     dnl But don't add it if it's already contained in the LDFLAGS
+                     dnl or the already constructed $LIBNAME
+                     haveit=
+                     for x in $LDFLAGS $LIB[]NAME; do
+                       AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                       if test "X$x" = "X-L$found_dir"; then
+                         haveit=yes
+                         break
+                       fi
+                     done
+                     if test -z "$haveit"; then
+                       LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
+                     fi
+                     if test "$hardcode_minus_L" != no; then
+                       dnl FIXME: Not sure whether we should use
+                       dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+                       dnl here.
+                       LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+                     else
+                       dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH
+                       dnl here, because this doesn't fit in flags passed to the
+                       dnl compiler. So give up. No hardcoding. This affects only
+                       dnl very old systems.
+                       dnl FIXME: Not sure whether we should use
+                       dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+                       dnl here.
+                       LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+                     fi
+                   fi
+                 fi
+               fi
+             else
+               if test "X$found_a" != "X"; then
+                 dnl Linking with a static library.
+                 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
+               else
+                 dnl We shouldn't come here, but anyway it's good to have a
+                 dnl fallback.
+                 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
+               fi
+             fi
+             dnl Assume the include files are nearby.
+             additional_includedir=
+             case "$found_dir" in
+               */lib | */lib/)
+                 basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
+                 additional_includedir="$basedir/include"
+                 ;;
+             esac
+             if test "X$additional_includedir" != "X"; then
+               dnl Potentially add $additional_includedir to $INCNAME.
+               dnl But don't add it
+               dnl   1. if it's the standard /usr/include,
+               dnl   2. if it's /usr/local/include and we are using GCC on Linux,
+               dnl   3. if it's already present in $CPPFLAGS or the already
+               dnl      constructed $INCNAME,
+               dnl   4. if it doesn't exist as a directory.
+               if test "X$additional_includedir" != "X/usr/include"; then
+                 haveit=
+                 if test "X$additional_includedir" = "X/usr/local/include"; then
+                   if test -n "$GCC"; then
+                     case $host_os in
+                       linux*) haveit=yes;;
+                     esac
+                   fi
+                 fi
+                 if test -z "$haveit"; then
+                   for x in $CPPFLAGS $INC[]NAME; do
+                     AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                     if test "X$x" = "X-I$additional_includedir"; then
+                       haveit=yes
+                       break
+                     fi
+                   done
+                   if test -z "$haveit"; then
+                     if test -d "$additional_includedir"; then
+                       dnl Really add $additional_includedir to $INCNAME.
+                       INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
+                     fi
+                   fi
+                 fi
+               fi
+             fi
+             dnl Look for dependencies.
+             if test -n "$found_la"; then
+               dnl Read the .la file. It defines the variables
+               dnl dlname, library_names, old_library, dependency_libs, current,
+               dnl age, revision, installed, dlopen, dlpreopen, libdir.
+               save_libdir="$libdir"
+               case "$found_la" in
+                 */* | *\\*) . "$found_la" ;;
+                 *) . "./$found_la" ;;
+               esac
+               libdir="$save_libdir"
+               dnl We use only dependency_libs.
+               for dep in $dependency_libs; do
+                 case "$dep" in
+                   -L*)
+                     additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+                     dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
+                     dnl But don't add it
+                     dnl   1. if it's the standard /usr/lib,
+                     dnl   2. if it's /usr/local/lib and we are using GCC on Linux,
+                     dnl   3. if it's already present in $LDFLAGS or the already
+                     dnl      constructed $LIBNAME,
+                     dnl   4. if it doesn't exist as a directory.
+                     if test "X$additional_libdir" != "X/usr/lib"; then
+                       haveit=
+                       if test "X$additional_libdir" = "X/usr/local/lib"; then
+                         if test -n "$GCC"; then
+                           case $host_os in
+                             linux*) haveit=yes;;
+                           esac
+                         fi
+                       fi
+                       if test -z "$haveit"; then
+                         haveit=
+                         for x in $LDFLAGS $LIB[]NAME; do
+                           AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                           if test "X$x" = "X-L$additional_libdir"; then
+                             haveit=yes
+                             break
+                           fi
+                         done
+                         if test -z "$haveit"; then
+                           if test -d "$additional_libdir"; then
+                             dnl Really add $additional_libdir to $LIBNAME.
+                             LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
+                           fi
+                         fi
+                         haveit=
+                         for x in $LDFLAGS $LTLIB[]NAME; do
+                           AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                           if test "X$x" = "X-L$additional_libdir"; then
+                             haveit=yes
+                             break
+                           fi
+                         done
+                         if test -z "$haveit"; then
+                           if test -d "$additional_libdir"; then
+                             dnl Really add $additional_libdir to $LTLIBNAME.
+                             LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
+                           fi
+                         fi
+                       fi
+                     fi
+                     ;;
+                   -R*)
+                     dir=`echo "X$dep" | sed -e 's/^X-R//'`
+                     if test "$enable_rpath" != no; then
+                       dnl Potentially add DIR to rpathdirs.
+                       dnl The rpathdirs will be appended to $LIBNAME at the end.
+                       haveit=
+                       for x in $rpathdirs; do
+                         if test "X$x" = "X$dir"; then
+                           haveit=yes
+                           break
+                         fi
+                       done
+                       if test -z "$haveit"; then
+                         rpathdirs="$rpathdirs $dir"
+                       fi
+                       dnl Potentially add DIR to ltrpathdirs.
+                       dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+                       haveit=
+                       for x in $ltrpathdirs; do
+                         if test "X$x" = "X$dir"; then
+                           haveit=yes
+                           break
+                         fi
+                       done
+                       if test -z "$haveit"; then
+                         ltrpathdirs="$ltrpathdirs $dir"
+                       fi
+                     fi
+                     ;;
+                   -l*)
+                     dnl Handle this in the next round.
+                     names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+                     ;;
+                   *.la)
+                     dnl Handle this in the next round. Throw away the .la's
+                     dnl directory; it is already contained in a preceding -L
+                     dnl option.
+                     names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+                     ;;
+                   *)
+                     dnl Most likely an immediate library name.
+                     LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
+                     LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
+                     ;;
+                 esac
+               done
+             fi
+           else
+             dnl Didn't find the library; assume it is in the system directories
+             dnl known to the linker and runtime loader. (All the system
+             dnl directories known to the linker should also be known to the
+             dnl runtime loader, otherwise the system is severely misconfigured.)
+             LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+             LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
+           fi
+         fi
+       fi
+     done
+   done
+   if test "X$rpathdirs" != "X"; then
+     if test -n "$hardcode_libdir_separator"; then
+       dnl Weird platform: only the last -rpath option counts, the user must
+       dnl pass all path elements in one option. We can arrange that for a
+       dnl single library, but not when more than one $LIBNAMEs are used.
+       alldirs=
+       for found_dir in $rpathdirs; do
+         alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
+       done
+       dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl.
+       acl_save_libdir="$libdir"
+       libdir="$alldirs"
+       eval flag=\"$hardcode_libdir_flag_spec\"
+       libdir="$acl_save_libdir"
+       LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+     else
+       dnl The -rpath options are cumulative.
+       for found_dir in $rpathdirs; do
+         acl_save_libdir="$libdir"
+         libdir="$found_dir"
+         eval flag=\"$hardcode_libdir_flag_spec\"
+         libdir="$acl_save_libdir"
+         LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+       done
+     fi
+   fi
+   if test "X$ltrpathdirs" != "X"; then
+     dnl When using libtool, the option that works for both libraries and
+     dnl executables is -R. The -R options are cumulative.
+     for found_dir in $ltrpathdirs; do
+       LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
+     done
+   fi
+ ])
+ 
+ dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
+ dnl unless already present in VAR.
+ dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
+ dnl contains two or three consecutive elements that belong together.
+ AC_DEFUN([AC_LIB_APPENDTOVAR],
+ [
+   for element in [$2]; do
+     haveit=
+     for x in $[$1]; do
+       AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+       if test "X$x" = "X$element"; then
+         haveit=yes
+         break
+       fi
+     done
+     if test -z "$haveit"; then
+       [$1]="${[$1]}${[$1]:+ }$element"
+     fi
+   done
+ ])
diff -Nrcpad gcc-3.4.3/config/lib-prefix.m4 gcc-4.0.0/config/lib-prefix.m4
*** gcc-3.4.3/config/lib-prefix.m4	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/config/lib-prefix.m4	Wed Sep 22 23:53:46 2004
***************
*** 0 ****
--- 1,155 ----
+ # lib-prefix.m4 serial 2 (gettext-0.12)
+ dnl Copyright (C) 2001-2003 Free Software Foundation, Inc.
+ dnl This file is free software, distributed under the terms of the GNU
+ dnl General Public License.  As a special exception to the GNU General
+ dnl Public License, this file may be distributed as part of a program
+ dnl that contains a configuration script generated by Autoconf, under
+ dnl the same distribution terms as the rest of that program.
+ 
+ dnl From Bruno Haible.
+ 
+ dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
+ dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
+ dnl require excessive bracketing.
+ ifdef([AC_HELP_STRING],
+ [AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
+ [AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
+ 
+ dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
+ dnl to access previously installed libraries. The basic assumption is that
+ dnl a user will want packages to use other packages he previously installed
+ dnl with the same --prefix option.
+ dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
+ dnl libraries, but is otherwise very convenient.
+ AC_DEFUN([AC_LIB_PREFIX],
+ [
+   AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
+   AC_REQUIRE([AC_PROG_CC])
+   AC_REQUIRE([AC_CANONICAL_HOST])
+   AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+   dnl By default, look in $includedir and $libdir.
+   use_additional=yes
+   AC_LIB_WITH_FINAL_PREFIX([
+     eval additional_includedir=\"$includedir\"
+     eval additional_libdir=\"$libdir\"
+   ])
+   AC_LIB_ARG_WITH([lib-prefix],
+ [  --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
+   --without-lib-prefix    don't search for libraries in includedir and libdir],
+ [
+     if test "X$withval" = "Xno"; then
+       use_additional=no
+     else
+       if test "X$withval" = "X"; then
+         AC_LIB_WITH_FINAL_PREFIX([
+           eval additional_includedir=\"$includedir\"
+           eval additional_libdir=\"$libdir\"
+         ])
+       else
+         additional_includedir="$withval/include"
+         additional_libdir="$withval/lib"
+       fi
+     fi
+ ])
+   if test $use_additional = yes; then
+     dnl Potentially add $additional_includedir to $CPPFLAGS.
+     dnl But don't add it
+     dnl   1. if it's the standard /usr/include,
+     dnl   2. if it's already present in $CPPFLAGS,
+     dnl   3. if it's /usr/local/include and we are using GCC on Linux,
+     dnl   4. if it doesn't exist as a directory.
+     if test "X$additional_includedir" != "X/usr/include"; then
+       haveit=
+       for x in $CPPFLAGS; do
+         AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+         if test "X$x" = "X-I$additional_includedir"; then
+           haveit=yes
+           break
+         fi
+       done
+       if test -z "$haveit"; then
+         if test "X$additional_includedir" = "X/usr/local/include"; then
+           if test -n "$GCC"; then
+             case $host_os in
+               linux*) haveit=yes;;
+             esac
+           fi
+         fi
+         if test -z "$haveit"; then
+           if test -d "$additional_includedir"; then
+             dnl Really add $additional_includedir to $CPPFLAGS.
+             CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
+           fi
+         fi
+       fi
+     fi
+     dnl Potentially add $additional_libdir to $LDFLAGS.
+     dnl But don't add it
+     dnl   1. if it's the standard /usr/lib,
+     dnl   2. if it's already present in $LDFLAGS,
+     dnl   3. if it's /usr/local/lib and we are using GCC on Linux,
+     dnl   4. if it doesn't exist as a directory.
+     if test "X$additional_libdir" != "X/usr/lib"; then
+       haveit=
+       for x in $LDFLAGS; do
+         AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+         if test "X$x" = "X-L$additional_libdir"; then
+           haveit=yes
+           break
+         fi
+       done
+       if test -z "$haveit"; then
+         if test "X$additional_libdir" = "X/usr/local/lib"; then
+           if test -n "$GCC"; then
+             case $host_os in
+               linux*) haveit=yes;;
+             esac
+           fi
+         fi
+         if test -z "$haveit"; then
+           if test -d "$additional_libdir"; then
+             dnl Really add $additional_libdir to $LDFLAGS.
+             LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
+           fi
+         fi
+       fi
+     fi
+   fi
+ ])
+ 
+ dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
+ dnl acl_final_exec_prefix, containing the values to which $prefix and
+ dnl $exec_prefix will expand at the end of the configure script.
+ AC_DEFUN([AC_LIB_PREPARE_PREFIX],
+ [
+   dnl Unfortunately, prefix and exec_prefix get only finally determined
+   dnl at the end of configure.
+   if test "X$prefix" = "XNONE"; then
+     acl_final_prefix="$ac_default_prefix"
+   else
+     acl_final_prefix="$prefix"
+   fi
+   if test "X$exec_prefix" = "XNONE"; then
+     acl_final_exec_prefix='${prefix}'
+   else
+     acl_final_exec_prefix="$exec_prefix"
+   fi
+   acl_save_prefix="$prefix"
+   prefix="$acl_final_prefix"
+   eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+   prefix="$acl_save_prefix"
+ ])
+ 
+ dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
+ dnl variables prefix and exec_prefix bound to the values they will have
+ dnl at the end of the configure script.
+ AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
+ [
+   acl_save_prefix="$prefix"
+   prefix="$acl_final_prefix"
+   acl_save_exec_prefix="$exec_prefix"
+   exec_prefix="$acl_final_exec_prefix"
+   $1
+   exec_prefix="$acl_save_exec_prefix"
+   prefix="$acl_save_prefix"
+ ])
diff -Nrcpad gcc-3.4.3/config/mh-ppc-darwin gcc-4.0.0/config/mh-ppc-darwin
*** gcc-3.4.3/config/mh-ppc-darwin	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/config/mh-ppc-darwin	Wed Sep  1 03:34:59 2004
***************
*** 0 ****
--- 1,6 ----
+ # The -mdynamic-no-pic ensures that the compiler executable is built without
+ # position-independent-code -- the usual default on Darwin. This fix speeds
+ # compiles by 3-5%.
+ 
+ BOOT_CFLAGS=-g -O2 -mdynamic-no-pic
+ 
diff -Nrcpad gcc-3.4.3/config/mh-x86omitfp gcc-4.0.0/config/mh-x86omitfp
*** gcc-3.4.3/config/mh-x86omitfp	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/config/mh-x86omitfp	Mon Sep 20 00:58:42 2004
***************
*** 0 ****
--- 1,2 ----
+ # Add -fomit-frame-pointer to the usual BOOT_CFLAGS to speed up the compiler.
+ BOOT_CFLAGS = -O2 -g -fomit-frame-pointer
diff -Nrcpad gcc-3.4.3/config/mt-gnu gcc-4.0.0/config/mt-gnu
*** gcc-3.4.3/config/mt-gnu	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/config/mt-gnu	Tue Aug  3 20:48:48 2004
***************
*** 0 ****
--- 1 ----
+ CXXFLAGS_FOR_TARGET = $(CXXFLAGS) -D_GNU_SOURCE
diff -Nrcpad gcc-3.4.3/config/mt-linux gcc-4.0.0/config/mt-linux
*** gcc-3.4.3/config/mt-linux	Tue May 22 01:17:23 2001
--- gcc-4.0.0/config/mt-linux	Thu Jan  1 00:00:00 1970
***************
*** 1 ****
- CXXFLAGS_FOR_TARGET = $(CXXFLAGS) -D_GNU_SOURCE
--- 0 ----
diff -Nrcpad gcc-3.4.3/config/nls.m4 gcc-4.0.0/config/nls.m4
*** gcc-3.4.3/config/nls.m4	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/config/nls.m4	Wed Sep 22 23:53:46 2004
***************
*** 0 ****
--- 1,49 ----
+ # nls.m4 serial 1 (gettext-0.12)
+ dnl Copyright (C) 1995-2003 Free Software Foundation, Inc.
+ dnl This file is free software, distributed under the terms of the GNU
+ dnl General Public License.  As a special exception to the GNU General
+ dnl Public License, this file may be distributed as part of a program
+ dnl that contains a configuration script generated by Autoconf, under
+ dnl the same distribution terms as the rest of that program.
+ dnl
+ dnl This file can can be used in projects which are not available under
+ dnl the GNU General Public License or the GNU Library General Public
+ dnl License but which still want to provide support for the GNU gettext
+ dnl functionality.
+ dnl Please note that the actual code of the GNU gettext library is covered
+ dnl by the GNU Library General Public License, and the rest of the GNU
+ dnl gettext package package is covered by the GNU General Public License.
+ dnl They are *not* in the public domain.
+ 
+ dnl Authors:
+ dnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+ dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2003.
+ 
+ AC_DEFUN([AM_NLS],
+ [
+   AC_MSG_CHECKING([whether NLS is requested])
+   dnl Default is enabled NLS
+   AC_ARG_ENABLE(nls,
+     [  --disable-nls           do not use Native Language Support],
+     USE_NLS=$enableval, USE_NLS=yes)
+   AC_MSG_RESULT($USE_NLS)
+   AC_SUBST(USE_NLS)
+ ])
+ 
+ AC_DEFUN([AM_MKINSTALLDIRS],
+ [
+   dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
+   dnl find the mkinstalldirs script in another subdir but $(top_srcdir).
+   dnl Try to locate it.
+   MKINSTALLDIRS=
+   if test -n "$ac_aux_dir"; then
+     case "$ac_aux_dir" in
+       /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;;
+       *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;;
+     esac
+   fi
+   if test -z "$MKINSTALLDIRS"; then
+     MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
+   fi
+   AC_SUBST(MKINSTALLDIRS)
+ ])
diff -Nrcpad gcc-3.4.3/config/po.m4 gcc-4.0.0/config/po.m4
*** gcc-3.4.3/config/po.m4	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/config/po.m4	Wed Sep 22 23:53:46 2004
***************
*** 0 ****
--- 1,197 ----
+ # po.m4 serial 1 (gettext-0.12)
+ dnl Copyright (C) 1995-2003 Free Software Foundation, Inc.
+ dnl This file is free software, distributed under the terms of the GNU
+ dnl General Public License.  As a special exception to the GNU General
+ dnl Public License, this file may be distributed as part of a program
+ dnl that contains a configuration script generated by Autoconf, under
+ dnl the same distribution terms as the rest of that program.
+ dnl
+ dnl This file can can be used in projects which are not available under
+ dnl the GNU General Public License or the GNU Library General Public
+ dnl License but which still want to provide support for the GNU gettext
+ dnl functionality.
+ dnl Please note that the actual code of the GNU gettext library is covered
+ dnl by the GNU Library General Public License, and the rest of the GNU
+ dnl gettext package package is covered by the GNU General Public License.
+ dnl They are *not* in the public domain.
+ 
+ dnl Authors:
+ dnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+ dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2003.
+ 
+ dnl Checks for all prerequisites of the po subdirectory.
+ AC_DEFUN([AM_PO_SUBDIRS],
+ [
+   AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+   AC_REQUIRE([AC_PROG_INSTALL])dnl
+   AC_REQUIRE([AM_MKINSTALLDIRS])dnl
+   AC_REQUIRE([AM_NLS])dnl
+ 
+   dnl Perform the following tests also if --disable-nls has been given,
+   dnl because they are needed for "make dist" to work.
+ 
+   dnl Search for GNU msgfmt in the PATH.
+   dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions.
+   dnl The second test excludes FreeBSD msgfmt.
+   AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
+     [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1 &&
+      (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
+     :)
+   AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
+ 
+   dnl Search for GNU xgettext 0.12 or newer in the PATH.
+   dnl The first test excludes Solaris xgettext and early GNU xgettext versions.
+   dnl The second test excludes FreeBSD xgettext.
+   AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
+     [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
+      (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
+     :)
+   dnl Remove leftover from FreeBSD xgettext call.
+   rm -f messages.po
+ 
+   dnl Search for GNU msgmerge 0.11 or newer in the PATH.
+   AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge,
+     [$ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1], :)
+ 
+   dnl This could go away some day; the PATH_PROG_WITH_TEST already does it.
+   dnl Test whether we really found GNU msgfmt.
+   if test "$GMSGFMT" != ":"; then
+     dnl If it is no GNU msgfmt we define it as : so that the
+     dnl Makefiles still can work.
+     if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 &&
+        (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+       : ;
+     else
+       GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'`
+       AC_MSG_RESULT(
+         [found $GMSGFMT program is not GNU msgfmt; ignore it])
+       GMSGFMT=":"
+     fi
+   fi
+ 
+   dnl This could go away some day; the PATH_PROG_WITH_TEST already does it.
+   dnl Test whether we really found GNU xgettext.
+   if test "$XGETTEXT" != ":"; then
+     dnl If it is no GNU xgettext we define it as : so that the
+     dnl Makefiles still can work.
+     if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
+        (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+       : ;
+     else
+       AC_MSG_RESULT(
+         [found xgettext program is not GNU xgettext; ignore it])
+       XGETTEXT=":"
+     fi
+     dnl Remove leftover from FreeBSD xgettext call.
+     rm -f messages.po
+   fi
+ 
+   AC_OUTPUT_COMMANDS([
+     for ac_file in $CONFIG_FILES; do
+       # Support "outfile[:infile[:infile...]]"
+       case "$ac_file" in
+         *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+       esac
+       # PO directories have a Makefile.in generated from Makefile.in.in.
+       case "$ac_file" in */Makefile.in)
+         # Adjust a relative srcdir.
+         ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+         ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+         ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+         # In autoconf-2.13 it is called $ac_given_srcdir.
+         # In autoconf-2.50 it is called $srcdir.
+         test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+         case "$ac_given_srcdir" in
+           .)  top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+           /*) top_srcdir="$ac_given_srcdir" ;;
+           *)  top_srcdir="$ac_dots$ac_given_srcdir" ;;
+         esac
+         if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+           rm -f "$ac_dir/POTFILES"
+           test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+           cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ 	]*\$/d" -e "s,.*,     $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+           POMAKEFILEDEPS="POTFILES.in"
+           # ALL_LINGUAS, POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES depend
+           # on $ac_dir but don't depend on user-specified configuration
+           # parameters.
+           if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+             # The LINGUAS file contains the set of available languages.
+             if test -n "$OBSOLETE_ALL_LINGUAS"; then
+               test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+             fi
+             ALL_LINGUAS_=`sed -e "/^#/d" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+             # Hide the ALL_LINGUAS assigment from automake.
+             eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+             POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+           else
+             # The set of available languages was given in configure.in.
+             eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
+           fi
+           case "$ac_given_srcdir" in
+             .) srcdirpre= ;;
+             *) srcdirpre='$(srcdir)/' ;;
+           esac
+           POFILES=
+           GMOFILES=
+           UPDATEPOFILES=
+           DUMMYPOFILES=
+           for lang in $ALL_LINGUAS; do
+             POFILES="$POFILES $srcdirpre$lang.po"
+             GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+             UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+             DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+           done
+           # CATALOGS depends on both $ac_dir and the user's LINGUAS
+           # environment variable.
+           INST_LINGUAS=
+           if test -n "$ALL_LINGUAS"; then
+             for presentlang in $ALL_LINGUAS; do
+               useit=no
+               if test "%UNSET%" != "$LINGUAS"; then
+                 desiredlanguages="$LINGUAS"
+               else
+                 desiredlanguages="$ALL_LINGUAS"
+               fi
+               for desiredlang in $desiredlanguages; do
+                 # Use the presentlang catalog if desiredlang is
+                 #   a. equal to presentlang, or
+                 #   b. a variant of presentlang (because in this case,
+                 #      presentlang can be used as a fallback for messages
+                 #      which are not translated in the desiredlang catalog).
+                 case "$desiredlang" in
+                   "$presentlang"*) useit=yes;;
+                 esac
+               done
+               if test $useit = yes; then
+                 INST_LINGUAS="$INST_LINGUAS $presentlang"
+               fi
+             done
+           fi
+           CATALOGS=
+           if test -n "$INST_LINGUAS"; then
+             for lang in $INST_LINGUAS; do
+               CATALOGS="$CATALOGS $lang.gmo"
+             done
+           fi
+           test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+           sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+           for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
+             if test -f "$f"; then
+               case "$f" in
+                 *.orig | *.bak | *~) ;;
+                 *) cat "$f" >> "$ac_dir/Makefile" ;;
+               esac
+             fi
+           done
+         fi
+         ;;
+       esac
+     done],
+    [# Capture the value of obsolete ALL_LINGUAS because we need it to compute
+     # POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES, CATALOGS. But hide it
+     # from automake.
+     eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
+     # Capture the value of LINGUAS because we need it to compute CATALOGS.
+     LINGUAS="${LINGUAS-%UNSET%}"
+    ])
+ ])
diff -Nrcpad gcc-3.4.3/config/stdint_h.m4 gcc-4.0.0/config/stdint_h.m4
*** gcc-3.4.3/config/stdint_h.m4	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/config/stdint_h.m4	Wed Sep 22 23:53:46 2004
***************
*** 0 ****
--- 1,28 ----
+ # stdint_h.m4 serial 3 (gettext-0.12)
+ dnl Copyright (C) 1997-2003 Free Software Foundation, Inc.
+ dnl This file is free software, distributed under the terms of the GNU
+ dnl General Public License.  As a special exception to the GNU General
+ dnl Public License, this file may be distributed as part of a program
+ dnl that contains a configuration script generated by Autoconf, under
+ dnl the same distribution terms as the rest of that program.
+ 
+ dnl From Paul Eggert.
+ 
+ # Define HAVE_STDINT_H_WITH_UINTMAX if <stdint.h> exists,
+ # doesn't clash with <sys/types.h>, and declares uintmax_t.
+ 
+ AC_DEFUN([jm_AC_HEADER_STDINT_H],
+ [
+   AC_CACHE_CHECK([for stdint.h], jm_ac_cv_header_stdint_h,
+   [AC_TRY_COMPILE(
+     [#include <sys/types.h>
+ #include <stdint.h>],
+     [uintmax_t i = (uintmax_t) -1;],
+     jm_ac_cv_header_stdint_h=yes,
+     jm_ac_cv_header_stdint_h=no)])
+   if test $jm_ac_cv_header_stdint_h = yes; then
+     AC_DEFINE_UNQUOTED(HAVE_STDINT_H_WITH_UINTMAX, 1,
+       [Define if <stdint.h> exists, doesn't clash with <sys/types.h>,
+        and declares uintmax_t. ])
+   fi
+ ])
diff -Nrcpad gcc-3.4.3/config/uintmax_t.m4 gcc-4.0.0/config/uintmax_t.m4
*** gcc-3.4.3/config/uintmax_t.m4	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/config/uintmax_t.m4	Wed Sep 22 23:53:46 2004
***************
*** 0 ****
--- 1,32 ----
+ # uintmax_t.m4 serial 7 (gettext-0.12)
+ dnl Copyright (C) 1997-2003 Free Software Foundation, Inc.
+ dnl This file is free software, distributed under the terms of the GNU
+ dnl General Public License.  As a special exception to the GNU General
+ dnl Public License, this file may be distributed as part of a program
+ dnl that contains a configuration script generated by Autoconf, under
+ dnl the same distribution terms as the rest of that program.
+ 
+ dnl From Paul Eggert.
+ 
+ AC_PREREQ(2.13)
+ 
+ # Define uintmax_t to 'unsigned long' or 'unsigned long long'
+ # if it is not already defined in <stdint.h> or <inttypes.h>.
+ 
+ AC_DEFUN([jm_AC_TYPE_UINTMAX_T],
+ [
+   AC_REQUIRE([jm_AC_HEADER_INTTYPES_H])
+   AC_REQUIRE([jm_AC_HEADER_STDINT_H])
+   if test $jm_ac_cv_header_inttypes_h = no && test $jm_ac_cv_header_stdint_h = no; then
+     AC_REQUIRE([jm_AC_TYPE_UNSIGNED_LONG_LONG])
+     test $ac_cv_type_unsigned_long_long = yes \
+       && ac_type='unsigned long long' \
+       || ac_type='unsigned long'
+     AC_DEFINE_UNQUOTED(uintmax_t, $ac_type,
+       [Define to unsigned long or unsigned long long
+        if <stdint.h> and <inttypes.h> don't define.])
+   else
+     AC_DEFINE(HAVE_UINTMAX_T, 1,
+       [Define if you have the 'uintmax_t' type in <stdint.h> or <inttypes.h>.])
+   fi
+ ])
diff -Nrcpad gcc-3.4.3/config/ulonglong.m4 gcc-4.0.0/config/ulonglong.m4
*** gcc-3.4.3/config/ulonglong.m4	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/config/ulonglong.m4	Wed Sep 22 23:53:46 2004
***************
*** 0 ****
--- 1,23 ----
+ # ulonglong.m4 serial 2 (fileutils-4.0.32, gettext-0.10.40)
+ dnl Copyright (C) 1999-2002 Free Software Foundation, Inc.
+ dnl This file is free software, distributed under the terms of the GNU
+ dnl General Public License.  As a special exception to the GNU General
+ dnl Public License, this file may be distributed as part of a program
+ dnl that contains a configuration script generated by Autoconf, under
+ dnl the same distribution terms as the rest of that program.
+ 
+ dnl From Paul Eggert.
+ 
+ AC_DEFUN([jm_AC_TYPE_UNSIGNED_LONG_LONG],
+ [
+   AC_CACHE_CHECK([for unsigned long long], ac_cv_type_unsigned_long_long,
+   [AC_TRY_LINK([unsigned long long ull = 1; int i = 63;],
+     [unsigned long long ullmax = (unsigned long long) -1;
+      return ull << i | ull >> i | ullmax / ull | ullmax % ull;],
+     ac_cv_type_unsigned_long_long=yes,
+     ac_cv_type_unsigned_long_long=no)])
+   if test $ac_cv_type_unsigned_long_long = yes; then
+     AC_DEFINE(HAVE_UNSIGNED_LONG_LONG, 1,
+       [Define if you have the unsigned long long type.])
+   fi
+ ])
diff -Nrcpad gcc-3.4.3/config/warnings.m4 gcc-4.0.0/config/warnings.m4
*** gcc-3.4.3/config/warnings.m4	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/config/warnings.m4	Sun Jan 23 19:21:24 2005
***************
*** 0 ****
--- 1,99 ----
+ # Autoconf include file defining macros related to compile-time warnings.
+ 
+ # Copyright 2004, 2005 Free Software Foundation, Inc.
+ 
+ #This file is part of GCC.
+ 
+ #GCC is free software; you can redistribute it and/or modify it under
+ #the terms of the GNU General Public License as published by the Free
+ #Software Foundation; either version 2, or (at your option) any later
+ #version.
+ 
+ #GCC is distributed in the hope that it will be useful, but WITHOUT
+ #ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ #FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ #for more details.
+ 
+ #You should have received a copy of the GNU General Public License
+ #along with GCC; see the file COPYING.  If not, write to the Free
+ #Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+ #02111-1307, USA.
+ 
+ # ACX_PROG_CC_WARNING_OPTS([-Wfoo -Wbar -Wbaz])
+ #   Sets @WARN_CFLAGS@ to the subset of the given options which the
+ #   compiler accepts.
+ AC_DEFUN([ACX_PROG_CC_WARNING_OPTS],
+ [AC_REQUIRE([AC_PROG_CC])dnl
+ AC_SUBST([WARN_CFLAGS])dnl
+ WARN_CFLAGS=
+ save_CFLAGS="$CFLAGS"
+ for option in $1; do
+   AS_VAR_PUSHDEF([acx_Woption], [acx_cv_prog_cc_warning_$option])
+   AC_CACHE_CHECK([whether $CC supports $option], acx_Woption,
+     [CFLAGS="$option"
+     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
+       [AS_VAR_SET(acx_Woption, yes)],
+       [AS_VAR_SET(acx_Woption, no)])
+   ])
+   AS_IF([test AS_VAR_GET(acx_Woption) = yes],
+         [WARN_CFLAGS="$WARN_CFLAGS${WARN_CFLAGS:+ }$option"])
+   AS_VAR_POPDEF([acx_Woption])dnl
+ done
+ CFLAGS="$save_CFLAGS"
+ ])# ACX_PROG_CC_WARNING_OPTS
+ 
+ # ACX_PROG_CC_WARNING_ALMOST_PEDANTIC([-Wno-long-long ...])
+ #   Sets WARN_PEDANTIC to "-pedantic" + the argument, if the compiler is GCC
+ #   and accepts all of those options simultaneously, otherwise to nothing.
+ AC_DEFUN([ACX_PROG_CC_WARNING_ALMOST_PEDANTIC],
+ [AC_REQUIRE([AC_PROG_CC])dnl
+ AC_SUBST([WARN_PEDANTIC])dnl
+ AS_VAR_PUSHDEF([acx_Pedantic], [acx_cv_prog_cc_pedantic_$1])dnl
+ WARN_PEDANTIC=
+ AS_IF([test $GCC = yes],
+ [AC_CACHE_CHECK([whether $CC supports -pedantic $1], acx_Pedantic,
+ [save_CFLAGS="$CFLAGS"
+ CFLAGS="-pedantic $1"
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
+    [AS_VAR_SET(acx_Pedantic, yes)],
+    [AS_VAR_SET(acx_Pedantic, no)])
+ CFLAGS="$save_CFLAGS"])
+ AS_IF([test AS_VAR_GET(acx_Pedantic) = yes],
+       [WARN_PEDANTIC="-pedantic $1"])
+ ])
+ AS_VAR_POPDEF([acx_Pedantic])dnl
+ ])# ACX_PROG_CC_WARNING_ALMOST_PEDANTIC
+ 
+ # ACX_PROG_CC_WARNINGS_ARE_ERRORS([x.y.z])
+ #   sets WERROR to "-Werror" if the compiler is GCC >=x.y.z, or if
+ #   --enable-werror-always was given on the command line, otherwise
+ #   to nothing.
+ #   If the argument is the word "manual" instead of a version number,
+ #   then WERROR will be set to -Werror only if --enable-werror-always
+ #   appeared on the configure command line.
+ AC_DEFUN([ACX_PROG_CC_WARNINGS_ARE_ERRORS],
+ [AC_REQUIRE([AC_PROG_CC])dnl
+ AC_SUBST([WERROR])dnl
+ WERROR=
+ AC_ARG_ENABLE(werror-always, 
+     AS_HELP_STRING([--enable-werror-always],
+ 		   [enable -Werror despite compiler version]),
+ [], [enable_werror_always=no])
+ AS_IF([test $enable_werror_always = yes],
+       [WERROR=-Werror],
+  m4_if($1, [manual],,
+  [AS_VAR_PUSHDEF([acx_GCCvers], [acx_cv_prog_cc_gcc_$1_or_newer])dnl
+   AC_CACHE_CHECK([whether $CC is GCC >=$1], acx_GCCvers,
+     [set fnord `echo $1 | tr '.' ' '`
+      shift
+      AC_PREPROC_IFELSE(
+ [#if __GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ \
+   < [$]1 * 10000 + [$]2 * 100 + [$]3
+ #error insufficient
+ #endif],
+    [AS_VAR_SET(acx_GCCvers, yes)],
+    [AS_VAR_SET(acx_GCCvers, no)])])
+  AS_IF([test AS_VAR_GET(acx_GCCvers) = yes],
+        [WERROR=-WerrorB])
+   AS_VAR_POPDEF([acx_GCCvers])]))
+ ])# ACX_PROG_CC_WARNINGS_ARE_ERRORS
diff -Nrcpad gcc-3.4.3/config-ml.in gcc-4.0.0/config-ml.in
*** gcc-3.4.3/config-ml.in	Mon Jan  5 00:41:14 2004
--- gcc-4.0.0/config-ml.in	Thu Jan 13 00:47:56 2005
***************
*** 1,7 ****
  # Configure fragment invoked in the post-target section for subdirs
  # wanting multilib support.
  #
! # Copyright (C) 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003
  #   Free Software Foundation, Inc.
  #
  # This file is free software; you can redistribute it and/or modify
--- 1,7 ----
  # Configure fragment invoked in the post-target section for subdirs
  # wanting multilib support.
  #
! # Copyright (C) 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
  #   Free Software Foundation, Inc.
  #
  # This file is free software; you can redistribute it and/or modify
*************** ml_realsrcdir=${srcdir}
*** 108,113 ****
--- 108,118 ----
  ml_verbose=--verbose
  for option in ${ac_configure_args}
  do
+   # strip single quotes surrounding individual options
+   case $option in
+   \'*\') eval option=$option ;;
+   esac
+ 
    case $option in
    --*) ;;
    -*) option=-$option ;;
*************** multi-do:
*** 546,551 ****
--- 551,559 ----
  		flags=`echo $$i | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; \
  		if (cd ../$${dir}/$${lib}; $(MAKE) $(FLAGS_TO_PASS) \
  				CFLAGS="$(CFLAGS) $${flags}" \
+ 				FCFLAGS="$(FCFLAGS) $${flags}" \
+ 				FFLAGS="$(FFLAGS) $${flags}" \
+ 				ADAFLAGS="$(ADAFLAGS) $${flags}" \
  				prefix="$(prefix)" \
  				exec_prefix="$(exec_prefix)" \
  				GCJFLAGS="$(GCJFLAGS) $${flags}" \
*************** if [ -n "${multidirs}" ] && [ -z "${ml_n
*** 777,788 ****
          break
        fi
      done
!     ml_config_env='CC="${CC_}$flags" CXX="${CXX_}$flags" GCJ="${GCJ_}$flags"'
  
      if [ "${with_target_subdir}" = "." ]; then
  	CC_=$CC' '
  	CXX_=$CXX' '
  	GCJ_=$GCJ' '
      else
  	# Create a regular expression that matches any string as long
  	# as ML_POPDIR.
--- 785,798 ----
          break
        fi
      done
!     ml_config_env='CC="${CC_}$flags" CXX="${CXX_}$flags" F77="${F77_}$flags" GCJ="${GCJ_}$flags" GFORTRAN="${GFORTRAN_}$flags"'
  
      if [ "${with_target_subdir}" = "." ]; then
  	CC_=$CC' '
  	CXX_=$CXX' '
+ 	F77_=$F77' '
  	GCJ_=$GCJ' '
+ 	GFORTRAN_=$GFORTRAN' '
      else
  	# Create a regular expression that matches any string as long
  	# as ML_POPDIR.
*************** if [ -n "${multidirs}" ] && [ -z "${ml_n
*** 811,816 ****
--- 821,838 ----
  	  esac
  	done
  
+ 	F77_=
+ 	for arg in ${F77}; do
+ 	  case $arg in
+ 	  -[BIL]"${ML_POPDIR}"/*)
+ 	    F77_="${F77_}"`echo "X${arg}" | sed -n "s/X\\(-[BIL]${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X-[BIL]${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
+ 	  "${ML_POPDIR}"/*)
+ 	    F77_="${F77_}"`echo "X${arg}" | sed -n "s/X\\(${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
+ 	  *)
+ 	    F77_="${F77_}${arg} " ;;
+ 	  esac
+ 	done
+ 
  	GCJ_=
  	for arg in ${GCJ}; do
  	  case $arg in
*************** if [ -n "${multidirs}" ] && [ -z "${ml_n
*** 823,828 ****
--- 845,862 ----
  	  esac
  	done
  
+ 	GFORTRAN_=
+ 	for arg in ${GFORTRAN}; do
+ 	  case $arg in
+ 	  -[BIL]"${ML_POPDIR}"/*)
+ 	    GFORTRAN_="${GFORTRAN_}"`echo "X${arg}" | sed -n "s/X\\(-[BIL]${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X-[BIL]${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
+ 	  "${ML_POPDIR}"/*)
+ 	    GFORTRAN_="${GFORTRAN_}"`echo "X${arg}" | sed -n "s/X\\(${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
+ 	  *)
+ 	    GFORTRAN_="${GFORTRAN_}${arg} " ;;
+ 	  esac
+ 	done
+ 
  	if test "x${LD_LIBRARY_PATH+set}" = xset; then
  	  LD_LIBRARY_PATH_=
  	  for arg in `echo "$LD_LIBRARY_PATH" | tr ':' ' '`; do
diff -Nrcpad gcc-3.4.3/config.guess gcc-4.0.0/config.guess
*** gcc-3.4.3/config.guess	Sun Feb 22 14:44:23 2004
--- gcc-4.0.0/config.guess	Tue Nov 16 00:57:00 2004
***************
*** 1,9 ****
  #! /bin/sh
  # Attempt to guess a canonical system name.
  #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
! #   2000, 2001, 2002, 2003 Free Software Foundation, Inc.
  
! timestamp='2004-02-16'
  
  # This file is free software; you can redistribute it and/or modify it
  # under the terms of the GNU General Public License as published by
--- 1,9 ----
  #! /bin/sh
  # Attempt to guess a canonical system name.
  #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
! #   2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
  
! timestamp='2004-11-12'
  
  # This file is free software; you can redistribute it and/or modify it
  # under the terms of the GNU General Public License as published by
*************** version="\
*** 53,59 ****
  GNU config.guess ($timestamp)
  
  Originally written by Per Bothner.
! Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
  Free Software Foundation, Inc.
  
  This is free software; see the source for copying conditions.  There is NO
--- 53,59 ----
  GNU config.guess ($timestamp)
  
  Originally written by Per Bothner.
! Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
  Free Software Foundation, Inc.
  
  This is free software; see the source for copying conditions.  There is NO
*************** case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$
*** 203,217 ****
      amiga:OpenBSD:*:*)
  	echo m68k-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
-     arc:OpenBSD:*:*)
- 	echo mipsel-unknown-openbsd${UNAME_RELEASE}
- 	exit 0 ;;
      cats:OpenBSD:*:*)
  	echo arm-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      hp300:OpenBSD:*:*)
  	echo m68k-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      mac68k:OpenBSD:*:*)
  	echo m68k-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
--- 203,217 ----
      amiga:OpenBSD:*:*)
  	echo m68k-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      cats:OpenBSD:*:*)
  	echo arm-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      hp300:OpenBSD:*:*)
  	echo m68k-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
+     luna88k:OpenBSD:*:*)
+     	echo m88k-unknown-openbsd${UNAME_RELEASE}
+ 	exit 0 ;;
      mac68k:OpenBSD:*:*)
  	echo m68k-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
*************** case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$
*** 227,247 ****
      mvmeppc:OpenBSD:*:*)
  	echo powerpc-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
-     pegasos:OpenBSD:*:*)
- 	echo powerpc-unknown-openbsd${UNAME_RELEASE}
- 	exit 0 ;;
-     pmax:OpenBSD:*:*)
- 	echo mipsel-unknown-openbsd${UNAME_RELEASE}
- 	exit 0 ;;
      sgi:OpenBSD:*:*)
! 	echo mipseb-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      sun3:OpenBSD:*:*)
  	echo m68k-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
-     wgrisc:OpenBSD:*:*)
- 	echo mipsel-unknown-openbsd${UNAME_RELEASE}
- 	exit 0 ;;
      *:OpenBSD:*:*)
  	echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
--- 227,238 ----
      mvmeppc:OpenBSD:*:*)
  	echo powerpc-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      sgi:OpenBSD:*:*)
! 	echo mips64-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      sun3:OpenBSD:*:*)
  	echo m68k-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      *:OpenBSD:*:*)
  	echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
*************** case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$
*** 255,263 ****
  	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
  	exit 0 ;;
      alpha:OSF1:*:*)
! 	if test $UNAME_RELEASE = "V4.0"; then
  		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
! 	fi
  	# According to Compaq, /usr/sbin/psrinfo has been available on
  	# OSF/1 and Tru64 systems produced since 1995.  I hope that
  	# covers most systems running today.  This code pipes the CPU
--- 246,259 ----
  	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
  	exit 0 ;;
      alpha:OSF1:*:*)
! 	case $UNAME_RELEASE in
! 	*4.0)
  		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
! 		;;
! 	*5.*)
! 	        UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
! 		;;
! 	esac
  	# According to Compaq, /usr/sbin/psrinfo has been available on
  	# OSF/1 and Tru64 systems produced since 1995.  I hope that
  	# covers most systems running today.  This code pipes the CPU
*************** case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$
*** 295,308 ****
  	    "EV7.9 (21364A)")
  		UNAME_MACHINE="alphaev79" ;;
  	esac
  	# A Vn.n version is a released version.
  	# A Tn.n version is a released field test version.
  	# A Xn.n version is an unreleased experimental baselevel.
  	# 1.2 uses "1.2" for uname -r.
! 	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
! 	exit 0 ;;
!     Alpha*:OpenVMS:*:*)
! 	echo alpha-hp-vms
  	exit 0 ;;
      Alpha\ *:Windows_NT*:*)
  	# How do we know it's Interix rather than the generic POSIX subsystem?
--- 291,302 ----
  	    "EV7.9 (21364A)")
  		UNAME_MACHINE="alphaev79" ;;
  	esac
+ 	# A Pn.n version is a patched version.
  	# A Vn.n version is a released version.
  	# A Tn.n version is a released field test version.
  	# A Xn.n version is an unreleased experimental baselevel.
  	# 1.2 uses "1.2" for uname -r.
! 	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
  	exit 0 ;;
      Alpha\ *:Windows_NT*:*)
  	# How do we know it's Interix rather than the generic POSIX subsystem?
*************** case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$
*** 325,330 ****
--- 319,327 ----
      *:OS/390:*:*)
  	echo i370-ibm-openedition
  	exit 0 ;;
+     *:z/VM:*:*)
+ 	echo s390-ibm-zvmoe
+ 	exit 0 ;;
      *:OS400:*:*)
          echo powerpc-ibm-os400
  	exit 0 ;;
*************** case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$
*** 348,354 ****
      DRS?6000:unix:4.0:6*)
  	echo sparc-icl-nx6
  	exit 0 ;;
!     DRS?6000:UNIX_SV:4.2*:7*)
  	case `/usr/bin/uname -p` in
  	    sparc) echo sparc-icl-nx7 && exit 0 ;;
  	esac ;;
--- 345,351 ----
      DRS?6000:unix:4.0:6*)
  	echo sparc-icl-nx6
  	exit 0 ;;
!     DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
  	case `/usr/bin/uname -p` in
  	    sparc) echo sparc-icl-nx7 && exit 0 ;;
  	esac ;;
*************** EOF
*** 758,764 ****
  	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
  	exit 0 ;;
      *:UNICOS/mp:*:*)
! 	echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
  	exit 0 ;;
      F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
  	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
--- 755,761 ----
  	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
  	exit 0 ;;
      *:UNICOS/mp:*:*)
! 	echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
  	exit 0 ;;
      F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
  	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
*************** EOF
*** 781,801 ****
  	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
  	exit 0 ;;
      *:FreeBSD:*:*)
! 	# Determine whether the default compiler uses glibc.
! 	eval $set_cc_for_build
! 	sed 's/^	//' << EOF >$dummy.c
! 	#include <features.h>
! 	#if __GLIBC__ >= 2
! 	LIBC=gnu
! 	#else
! 	LIBC=
! 	#endif
! EOF
! 	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
! 	# GNU/KFreeBSD systems have a "k" prefix to indicate we are using
! 	# FreeBSD's kernel, but not the complete OS.
! 	case ${LIBC} in gnu) kernel_only='k' ;; esac
! 	echo ${UNAME_MACHINE}-unknown-${kernel_only}freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC}
  	exit 0 ;;
      i*:CYGWIN*:*)
  	echo ${UNAME_MACHINE}-pc-cygwin
--- 778,784 ----
  	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
  	exit 0 ;;
      *:FreeBSD:*:*)
! 	echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
  	exit 0 ;;
      i*:CYGWIN*:*)
  	echo ${UNAME_MACHINE}-pc-cygwin
*************** EOF
*** 844,852 ****
--- 827,844 ----
      cris:Linux:*:*)
  	echo cris-axis-linux-gnu
  	exit 0 ;;
+     crisv32:Linux:*:*)
+ 	echo crisv32-axis-linux-gnu
+ 	exit 0 ;;
+     frv:Linux:*:*)
+     	echo frv-unknown-linux-gnu
+ 	exit 0 ;;
      ia64:Linux:*:*)
  	echo ${UNAME_MACHINE}-unknown-linux-gnu
  	exit 0 ;;
+     m32r*:Linux:*:*)
+ 	echo ${UNAME_MACHINE}-unknown-linux-gnu
+ 	exit 0 ;;
      m68*:Linux:*:*)
  	echo ${UNAME_MACHINE}-unknown-linux-gnu
  	exit 0 ;;
*************** EOF
*** 1087,1095 ****
      M680?0:D-NIX:5.3:*)
  	echo m68k-diab-dnix
  	exit 0 ;;
!     M68*:*:R3V[567]*:*)
  	test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
!     3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0)
  	OS_REL=''
  	test -r /etc/.relid \
  	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
--- 1079,1087 ----
      M680?0:D-NIX:5.3:*)
  	echo m68k-diab-dnix
  	exit 0 ;;
!     M68*:*:R3V[5678]*:*)
  	test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
!     3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
  	OS_REL=''
  	test -r /etc/.relid \
  	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
*************** EOF
*** 1187,1195 ****
  	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
  	exit 0 ;;
      *:Darwin:*:*)
! 	case `uname -p` in
  	    *86) UNAME_PROCESSOR=i686 ;;
! 	    powerpc) UNAME_PROCESSOR=powerpc ;;
  	esac
  	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
  	exit 0 ;;
--- 1179,1188 ----
  	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
  	exit 0 ;;
      *:Darwin:*:*)
! 	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
! 	case $UNAME_PROCESSOR in
  	    *86) UNAME_PROCESSOR=i686 ;;
! 	    unknown) UNAME_PROCESSOR=powerpc ;;
  	esac
  	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
  	exit 0 ;;
*************** EOF
*** 1251,1256 ****
--- 1244,1259 ----
      *:DragonFly:*:*)
  	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
  	exit 0 ;;
+     *:*VMS:*:*)
+     	UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ 	case "${UNAME_MACHINE}" in
+ 	    A*) echo alpha-dec-vms && exit 0 ;;
+ 	    I*) echo ia64-dec-vms && exit 0 ;;
+ 	    V*) echo vax-dec-vms && exit 0 ;;
+ 	esac ;;
+     *:XENIX:*:SysV)
+ 	echo i386-pc-xenix
+ 	exit 0 ;;
  esac
  
  #echo '(No uname command or uname output not recognized.)' 1>&2
diff -Nrcpad gcc-3.4.3/config.if gcc-4.0.0/config.if
*** gcc-3.4.3/config.if	Wed Jul 16 06:34:53 2003
--- gcc-4.0.0/config.if	Thu Jan  1 00:00:00 1970
***************
*** 1,37 ****
- #! /dev/null
- # Don't call it directly. This shell script fragment is called to
- # determine:
- #
- #	1. libstcxx_incdir: the interface name for libstdc++.
- #
- 
- # Get the top level src dir.
- if [ -z "${topsrcdir}" -a -z "${top_srcdir}" ]
- then
-   echo "Undefined top level src dir: topsrcdir and top_srcdir are empty" >&2
-   exit 1
- fi
- 
- if [ -n "${topsrcdir}" ]
- then
-   if_topsrcdir=${topsrcdir}
- else
-   if_topsrcdir=${top_srcdir}
- fi
- 
- # Set libstdcxx_incdir.
- # This is the same as gcc/configure.in and libstdc++-v3/acinclude.m4. 
- if test -z "$gcc_version"; then
-   if test -z "${gcc_version_trigger}" \
-      && test -f ${if_topsrcdir}/gcc/version.c; then
-     gcc_version_trigger=${if_topsrcdir}/gcc/version.c
-   fi    
-   if test -f "${gcc_version_trigger}"; then
-     gcc_version_full=`grep version_string "${gcc_version_trigger}" | sed -e 's/.*"\([^"]*\)".*/\1/'`
-   else
-     gcc_version_full=`$CC -v 2>&1 | sed -n 's/^gcc version //p'`
-   fi
-   gcc_version=`echo ${gcc_version_full} | sed -e 's/\([^ ]*\) .*/\1/'`
- fi
- libstdcxx_incdir=c++/${gcc_version}
- 
--- 0 ----
diff -Nrcpad gcc-3.4.3/config.sub gcc-4.0.0/config.sub
*** gcc-3.4.3/config.sub	Sun Feb 22 14:44:23 2004
--- gcc-4.0.0/config.sub	Tue Jan 18 01:20:48 2005
***************
*** 1,9 ****
  #! /bin/sh
  # Configuration validation subroutine script.
  #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
! #   2000, 2001, 2002, 2003 Free Software Foundation, Inc.
  
! timestamp='2004-02-16'
  
  # This file is (in principle) common to ALL GNU software.
  # The presence of a machine in this file suggests that SOME GNU software
--- 1,9 ----
  #! /bin/sh
  # Configuration validation subroutine script.
  #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
! #   2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
  
! timestamp='2004-11-30'
  
  # This file is (in principle) common to ALL GNU software.
  # The presence of a machine in this file suggests that SOME GNU software
*************** Report bugs and patches to <config-patch
*** 70,76 ****
  version="\
  GNU config.sub ($timestamp)
  
! Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
  Free Software Foundation, Inc.
  
  This is free software; see the source for copying conditions.  There is NO
--- 70,76 ----
  version="\
  GNU config.sub ($timestamp)
  
! Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
  Free Software Foundation, Inc.
  
  This is free software; see the source for copying conditions.  There is NO
*************** case $os in
*** 145,151 ****
  	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
  	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
  	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
! 	-apple | -axis)
  		os=
  		basic_machine=$1
  		;;
--- 145,151 ----
  	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
  	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
  	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
! 	-apple | -axis | -knuth | -cray)
  		os=
  		basic_machine=$1
  		;;
*************** case $basic_machine in
*** 237,243 ****
  	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
  	| i370 | i860 | i960 | ia64 \
  	| ip2k | iq2000 \
! 	| m32r | m68000 | m68k | m88k | mcore \
  	| mips | mipsbe | mipseb | mipsel | mipsle \
  	| mips16 \
  	| mips64 | mips64el \
--- 237,243 ----
  	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
  	| i370 | i860 | i960 | ia64 \
  	| ip2k | iq2000 \
! 	| m32r | m32rle | m68000 | m68k | m88k | maxq | mcore \
  	| mips | mipsbe | mipseb | mipsel | mipsle \
  	| mips16 \
  	| mips64 | mips64el \
*************** case $basic_machine in
*** 262,273 ****
  	| pyramid \
  	| sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
  	| sh64 | sh64le \
! 	| sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \
  	| strongarm \
  	| tahoe | thumb | tic4x | tic80 | tron \
  	| v850 | v850e \
  	| we32k \
! 	| x86 | xscale | xstormy16 | xtensa \
  	| z8k)
  		basic_machine=$basic_machine-unknown
  		;;
--- 262,273 ----
  	| pyramid \
  	| sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
  	| sh64 | sh64le \
! 	| sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \
  	| strongarm \
  	| tahoe | thumb | tic4x | tic80 | tron \
  	| v850 | v850e \
  	| we32k \
! 	| x86 | xscale | xscalee[bl] | xstormy16 | xtensa \
  	| z8k)
  		basic_machine=$basic_machine-unknown
  		;;
*************** case $basic_machine in
*** 300,306 ****
  	| avr-* \
  	| bs2000-* \
  	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
! 	| clipper-* | cydra-* \
  	| d10v-* | d30v-* | dlx-* \
  	| elxsi-* \
  	| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
--- 300,306 ----
  	| avr-* \
  	| bs2000-* \
  	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
! 	| clipper-* | craynv-* | cydra-* \
  	| d10v-* | d30v-* | dlx-* \
  	| elxsi-* \
  	| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
*************** case $basic_machine in
*** 308,316 ****
  	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
  	| i*86-* | i860-* | i960-* | ia64-* \
  	| ip2k-* | iq2000-* \
! 	| m32r-* \
  	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
! 	| m88110-* | m88k-* | mcore-* \
  	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
  	| mips16-* \
  	| mips64-* | mips64el-* \
--- 308,316 ----
  	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
  	| i*86-* | i860-* | i960-* | ia64-* \
  	| ip2k-* | iq2000-* \
! 	| m32r-* | m32rle-* \
  	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
! 	| m88110-* | m88k-* | maxq-* | mcore-* \
  	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
  	| mips16-* \
  	| mips64-* | mips64el-* \
*************** case $basic_machine in
*** 326,333 ****
  	| mipsisa64sb1-* | mipsisa64sb1el-* \
  	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
  	| mipstx39-* | mipstx39el-* \
  	| msp430-* \
! 	| none-* | np1-* | nv1-* | ns16k-* | ns32k-* \
  	| orion-* \
  	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
  	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
--- 326,334 ----
  	| mipsisa64sb1-* | mipsisa64sb1el-* \
  	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
  	| mipstx39-* | mipstx39el-* \
+ 	| mmix-* \
  	| msp430-* \
! 	| none-* | np1-* | ns16k-* | ns32k-* \
  	| orion-* \
  	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
  	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
*************** case $basic_machine in
*** 336,349 ****
  	| sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
  	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
  	| sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
! 	| sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
  	| tahoe-* | thumb-* \
  	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
  	| tron-* \
  	| v850-* | v850e-* | vax-* \
  	| we32k-* \
! 	| x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
! 	| xtensa-* \
  	| ymp-* \
  	| z8k-*)
  		;;
--- 337,350 ----
  	| sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
  	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
  	| sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
! 	| sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
  	| tahoe-* | thumb-* \
  	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
  	| tron-* \
  	| v850-* | v850e-* | vax-* \
  	| we32k-* \
! 	| x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \
! 	| xstormy16-* | xtensa-* \
  	| ymp-* \
  	| z8k-*)
  		;;
*************** case $basic_machine in
*** 445,450 ****
--- 446,455 ----
  		basic_machine=j90-cray
  		os=-unicos
  		;;
+ 	craynv)
+ 		basic_machine=craynv-cray
+ 		os=-unicosmp
+ 		;;
  	cr16c)
  		basic_machine=cr16c-unknown
  		os=-elf
*************** case $basic_machine in
*** 452,460 ****
--- 457,472 ----
  	crds | unos)
  		basic_machine=m68k-crds
  		;;
+ 	crisv32 | crisv32-* | etraxfs*)
+ 		basic_machine=crisv32-axis
+ 		;;
  	cris | cris-* | etrax*)
  		basic_machine=cris-axis
  		;;
+ 	crx)
+ 		basic_machine=crx-unknown
+ 		os=-elf
+ 		;;
  	da30 | da30-*)
  		basic_machine=m68k-da30
  		;;
*************** case $basic_machine in
*** 477,482 ****
--- 489,498 ----
  		basic_machine=m88k-motorola
  		os=-sysv3
  		;;
+ 	djgpp)
+ 		basic_machine=i586-pc
+ 		os=-msdosdjgpp
+ 		;;
  	dpx20 | dpx20-*)
  		basic_machine=rs6000-bull
  		os=-bosx
*************** case $basic_machine in
*** 655,664 ****
  	mips3*)
  		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
  		;;
- 	mmix*)
- 		basic_machine=mmix-knuth
- 		os=-mmixware
- 		;;
  	monitor)
  		basic_machine=m68k-rom68k
  		os=-coff
--- 671,676 ----
*************** case $basic_machine in
*** 739,748 ****
  	np1)
  		basic_machine=np1-gould
  		;;
- 	nv1)
- 		basic_machine=nv1-cray
- 		os=-unicosmp
- 		;;
  	nsr-tandem)
  		basic_machine=nsr-tandem
  		;;
--- 751,756 ----
*************** case $basic_machine in
*** 1025,1030 ****
--- 1033,1042 ----
  		basic_machine=hppa1.1-winbond
  		os=-proelf
  		;;
+ 	xbox)
+ 		basic_machine=i686-pc
+ 		os=-mingw32
+ 		;;
  	xps | xps100)
  		basic_machine=xps100-honeywell
  		;;
*************** case $basic_machine in
*** 1055,1060 ****
--- 1067,1075 ----
  	romp)
  		basic_machine=romp-ibm
  		;;
+ 	mmix)
+ 		basic_machine=mmix-knuth
+ 		;;
  	rs6000)
  		basic_machine=rs6000-ibm
  		;;
*************** case $basic_machine in
*** 1077,1083 ****
  	sh64)
  		basic_machine=sh64-unknown
  		;;
! 	sparc | sparcv9 | sparcv9b)
  		basic_machine=sparc-sun
  		;;
  	cydra)
--- 1092,1098 ----
  	sh64)
  		basic_machine=sh64-unknown
  		;;
! 	sparc | sparcv8 | sparcv9 | sparcv9b)
  		basic_machine=sparc-sun
  		;;
  	cydra)
*************** case $os in
*** 1290,1295 ****
--- 1305,1313 ----
  	-kaos*)
  		os=-kaos
  		;;
+ 	-zvmoe)
+ 		os=-zvmoe
+ 		;;
  	-none)
  		;;
  	*)
*************** case $basic_machine in
*** 1370,1375 ****
--- 1388,1396 ----
  	*-ibm)
  		os=-aix
  		;;
+     	*-knuth)
+ 		os=-mmixware
+ 		;;
  	*-wec)
  		os=-proelf
  		;;
diff -Nrcpad gcc-3.4.3/configure gcc-4.0.0/configure
*** gcc-3.4.3/configure	Thu Nov  4 17:05:21 2004
--- gcc-4.0.0/configure	Thu Apr 21 07:04:10 2005
*************** ac_help=
*** 12,17 ****
--- 12,29 ----
  ac_default_prefix=/usr/local
  # Any additions from configure.in:
  ac_help="$ac_help
+   --enable-libada        Builds libada directory"
+ ac_help="$ac_help
+   --with-mpfr-dir=PATH    Specify source directory for MPFR library"
+ ac_help="$ac_help
+   --with-mpfr=PATH        Specify directory for installed MPFR library"
+ ac_help="$ac_help
+   --with-gmp-dir=PATH     Specify source directory for GMP library"
+ ac_help="$ac_help
+   --with-gmp=PATH         Specify directory for installed GMP library"
+ ac_help="$ac_help
+   --enable-bootstrap[=lean]     Enable bootstrapping [no]"
+ ac_help="$ac_help
    --enable-serial-[{host,target,build}-]configure
                            Force sequential configuration of
                            sub-packages for the host, target or build
*************** ac_help="$ac_help
*** 19,24 ****
--- 31,38 ----
  ac_help="$ac_help
    --enable-maintainer-mode enable make rules and dependencies not useful
                            (and sometimes confusing) to the casual installer"
+ ac_help="$ac_help
+   --enable-werror         enable -Werror in bootstrap stage2 and later"
  
  # Initialize some variables set by options.
  # The variables have the same names as the options, with
*************** else { echo "configure: error: can not r
*** 577,583 ****
  fi
  
  echo $ac_n "checking host system type""... $ac_c" 1>&6
! echo "configure:581: checking host system type" >&5
  
  host_alias=$host
  case "$host_alias" in
--- 591,597 ----
  fi
  
  echo $ac_n "checking host system type""... $ac_c" 1>&6
! echo "configure:595: checking host system type" >&5
  
  host_alias=$host
  case "$host_alias" in
*************** host_os=`echo $host | sed 's/^\([^-]*\)-
*** 598,604 ****
  echo "$ac_t""$host" 1>&6
  
  echo $ac_n "checking target system type""... $ac_c" 1>&6
! echo "configure:602: checking target system type" >&5
  
  target_alias=$target
  case "$target_alias" in
--- 612,618 ----
  echo "$ac_t""$host" 1>&6
  
  echo $ac_n "checking target system type""... $ac_c" 1>&6
! echo "configure:616: checking target system type" >&5
  
  target_alias=$target
  case "$target_alias" in
*************** target_os=`echo $target | sed 's/^\([^-]
*** 616,622 ****
  echo "$ac_t""$target" 1>&6
  
  echo $ac_n "checking build system type""... $ac_c" 1>&6
! echo "configure:620: checking build system type" >&5
  
  build_alias=$build
  case "$build_alias" in
--- 630,636 ----
  echo "$ac_t""$target" 1>&6
  
  echo $ac_n "checking build system type""... $ac_c" 1>&6
! echo "configure:634: checking build system type" >&5
  
  build_alias=$build
  case "$build_alias" in
*************** test "$program_transform_name" = "" && p
*** 671,677 ****
  # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
  # ./install, which can be erroneously created by make from ./install.sh.
  echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
! echo "configure:675: checking for a BSD compatible install" >&5
  if test -z "$INSTALL"; then
  if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
--- 685,691 ----
  # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
  # ./install, which can be erroneously created by make from ./install.sh.
  echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
! echo "configure:689: checking for a BSD compatible install" >&5
  if test -z "$INSTALL"; then
  if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
*************** test -z "$INSTALL_SCRIPT" && INSTALL_SCR
*** 723,771 ****
  
  test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
  
  
! # Autoconf M4 include file defining utility macros for complex Canadian
! # cross builds.
! 
!  
!  
!  
!  
! 
! ####
! # _NCN_TOOL_PREFIXES:  Some stuff that oughtta be done in AC_CANONICAL_SYSTEM 
! # or AC_INIT.
! # These demand that AC_CANONICAL_SYSTEM be called beforehand.
!  
! ####
! # NCN_CHECK_TARGET_TOOL(variable, prog-to-check-for,[value-if-not-found],[path])
! # Like AC_CHECK_TOOL, but tries a prefix of the target, not the host.
! # Code is pretty much lifted from autoconf2.53.
! 
!  
! 
! ####
! # NCN_STRICT_CHECK_TOOL(variable, prog-to-check-for,[value-if-not-found],[path])
! # Like AC_CHECK_TOOL, but requires the prefix if build!=host.
! 
!  
! 
! ####
! # NCN_STRICT_CHECK_TARGET_TOOL(variable, prog-to-check-for,[value-if-not-found],[path])
! # Like NCN_CHECK_TARGET_TOOL, but requires the prefix if build!=target.
! 
!  
! ###
! # AC_PROG_CPP_WERROR
! # Used for autoconf 2.5x to force AC_PREPROC_IFELSE to reject code which
! # triggers warnings from the preprocessor.  Will be in autoconf 2.58.
! # For now, using this also overrides header checks to use only the
! # preprocessor (matches 2.13 behavior; matching 2.58's behavior is a
! # bit harder from here).
! # Eventually autoconf will default to checking headers with the compiler
! # instead, and we'll have to do this differently.
  
! # AC_PROG_CPP_WERROR
  
  
  ### we might need to use some other shell than /bin/sh for running subshells
--- 737,786 ----
  
  test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
  
+ echo $ac_n "checking whether ln works""... $ac_c" 1>&6
+ echo "configure:742: checking whether ln works" >&5
+ if eval "test \"`echo '$''{'acx_cv_prog_LN'+set}'`\" = set"; then
+   echo $ac_n "(cached) $ac_c" 1>&6
+ else
+   rm -f conftestdata_t
+ echo >conftestdata_f
+ if ln conftestdata_f conftestdata_t 2>/dev/null
+ then
+   acx_cv_prog_LN=ln
+ else
+   acx_cv_prog_LN=no
+ fi
+ rm -f conftestdata_f conftestdata_t
  
! fi
! if test $acx_cv_prog_LN = no; then
!   LN="cp"
!   echo "$ac_t""no, using $LN" 1>&6
! else
!   LN="$acx_cv_prog_LN"
!   echo "$ac_t""yes" 1>&6
! fi
  
! echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
! echo "configure:766: checking whether ln -s works" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
! else
!   rm -f conftestdata
! if ln -s X conftestdata 2>/dev/null
! then
!   rm -f conftestdata
!   ac_cv_prog_LN_S="ln -s"
! else
!   ac_cv_prog_LN_S=ln
! fi
! fi
! LN_S="$ac_cv_prog_LN_S"
! if test "$ac_cv_prog_LN_S" = "ln -s"; then
!   echo "$ac_t""yes" 1>&6
! else
!   echo "$ac_t""no" 1>&6
! fi
  
  
  ### we might need to use some other shell than /bin/sh for running subshells
*************** rm -f conftestsed.out
*** 818,827 ****
  
  moveifchange=${srcdir}/move-if-change
  
  # Set srcdir to "." if that's what it is.
  # This is important for multilib support.
  pwd=`${PWDCMD-pwd}`
- srcpwd=`cd ${srcdir} ; ${PWDCMD-pwd}`
  if test "${pwd}" = "${srcpwd}" ; then
    srcdir=.
  fi
--- 833,849 ----
  
  moveifchange=${srcdir}/move-if-change
  
+ srcpwd=`cd ${srcdir} ; ${PWDCMD-pwd}`
+ 
+ # We pass INSTALL explicitly to sub-makes.  Make sure that it is not
+ # a relative path.
+ if test "$INSTALL" = "${srcdir}/install-sh -c"; then
+   INSTALL="${srcpwd}/install-sh -c"
+ fi
+ 
  # Set srcdir to "." if that's what it is.
  # This is important for multilib support.
  pwd=`${PWDCMD-pwd}`
  if test "${pwd}" = "${srcpwd}" ; then
    srcdir=.
  fi
*************** fi
*** 829,853 ****
  topsrcdir=$srcpwd
  
  extra_host_args=
  # Define the trigger file to make sure configure will re-run whenever
  # the gcc version number changes.
! if test "${with_gcc_version_trigger+set}" = set ; then
!   gcc_version_trigger="$with_gcc_version_trigger"
!   gcc_version=`grep version_string ${with_gcc_version_trigger} | sed -e 's/.*\"\([^ \"]*\)[ \"].*/\1/'`
  else
!   # If gcc's sources are available, define the trigger file.
!   if test -f ${topsrcdir}/gcc/version.c ; then
!     gcc_version_trigger=${topsrcdir}/gcc/version.c
!     gcc_version=`grep version_string ${gcc_version_trigger} | sed -e 's/.*\"\([^ \"]*\)[ \"].*/\1/'`
!     case "$ac_configure_args" in
!       *--with-gcc-version-trigger=$gcc_version_trigger* )
!         ;;
!       * )
!         # Add to all subconfigure arguments: build, host, and target.
!         ac_configure_args="$ac_configure_args --with-gcc-version-trigger=$gcc_version_trigger"
!         ;;
!     esac
!   fi
  fi
  
  ### To add a new directory to the tree, first choose whether it is a target
--- 851,886 ----
  topsrcdir=$srcpwd
  
  extra_host_args=
+ 
  # Define the trigger file to make sure configure will re-run whenever
  # the gcc version number changes.
! 
! if test "${with_gcc_version_trigger+set}" = set; then
!   gcc_version_trigger=$with_gcc_version_trigger
  else
!   gcc_version_trigger=$topsrcdir/gcc/version.c
! fi
! if test -f "${gcc_version_trigger}"; then
!   gcc_version_full=`grep version_string "${gcc_version_trigger}" | sed -e 's/.*"\([^"]*\)".*/\1/'`
! else
!   gcc_version_full=`$CC -v 2>&1 | sed -n 's/^gcc version //p'`
! fi
! gcc_version=`echo ${gcc_version_full} | sed -e 's/\([^ ]*\) .*/\1/'`
! 
! 
! 
! 
! if test -f $gcc_version_trigger ; then
!   case "$ac_configure_args" in
!     *--with-gcc-version-trigger=$gcc_version_trigger* )
!       ;;
!     * )
!       # Add to all subconfigure arguments: build, host, and target.
!       ac_configure_args="$ac_configure_args --with-gcc-version-trigger=$gcc_version_trigger"
!       ;;
!   esac
! else
!   gcc_version_trigger=
  fi
  
  ### To add a new directory to the tree, first choose whether it is a target
*************** fi
*** 864,879 ****
  # Double entries in build_configdirs, configdirs, or target_configdirs may
  # cause circular dependencies and break everything horribly.
  
  # these libraries are used by various programs built for the host environment
  #
! host_libs="intl mmalloc libiberty opcodes bfd readline tcl tk itcl tix libgui zlib"
  
  # these tools are built for the host environment
  # Note, the powerpc-eabi build depends on sim occurring before gdb in order to
  # know that we are building the simulator.
  # binutils, gas and ld appear in that order because it makes sense to run
  # "make check" in that particular order.
! host_tools="texinfo byacc flex bison binutils gas ld gcc sid sim gdb make patch prms send-pr gprof etc expect dejagnu ash bash bzip2 m4 autoconf automake libtool diff rcs fileutils shellutils time textutils wdiff find uudecode hello tar gzip indent recode release sed utils guile perl gawk findutils gettext zip fastjar"
  
  # libgcj represents the runtime libraries only used by gcj.
  libgcj="target-libffi \
--- 897,920 ----
  # Double entries in build_configdirs, configdirs, or target_configdirs may
  # cause circular dependencies and break everything horribly.
  
+ # these library is used by various programs built for the build
+ # environment
+ #
+ build_libs="build-libiberty"
+ 
+ # these tools are built for the build environment
+ build_tools="build-texinfo build-byacc build-flex build-bison build-m4 build-fixincludes"
+ 
  # these libraries are used by various programs built for the host environment
  #
! host_libs="intl mmalloc libiberty opcodes bfd readline tcl tk itcl libgui zlib libcpp"
  
  # these tools are built for the host environment
  # Note, the powerpc-eabi build depends on sim occurring before gdb in order to
  # know that we are building the simulator.
  # binutils, gas and ld appear in that order because it makes sense to run
  # "make check" in that particular order.
! host_tools="texinfo byacc flex bison binutils gas ld fixincludes gcc sid sim gdb make patch prms send-pr gprof etc expect dejagnu ash bash bzip2 m4 autoconf automake libtool diff rcs fileutils shellutils time textutils wdiff find uudecode hello tar gzip indent recode release sed utils guile perl gawk findutils gettext zip fastjar"
  
  # libgcj represents the runtime libraries only used by gcj.
  libgcj="target-libffi \
*************** target_libraries="target-libiberty \
*** 889,897 ****
  		target-libgloss \
  		target-newlib \
  		target-libstdc++-v3 \
! 		target-libf2c \
  		${libgcj} \
! 		target-libobjc"
  
  # these tools are built using the target libraries, and are intended to
  # run only in the target environment
--- 930,940 ----
  		target-libgloss \
  		target-newlib \
  		target-libstdc++-v3 \
! 		target-libmudflap \
! 		target-libgfortran \
  		${libgcj} \
! 		target-libobjc \
! 		target-libada"
  
  # these tools are built using the target libraries, and are intended to
  # run only in the target environment
*************** target_tools="target-examples target-gro
*** 909,927 ****
  ## is important because configure will choke if they ever get through.
  ## ${configdirs} is directories we build using the host tools.
  ## ${target_configdirs} is directories we build using the target tools.
- #
  configdirs=`echo ${host_libs} ${host_tools}`
  target_configdirs=`echo ${target_libraries} ${target_tools}`
! 
! # Only make build modules if build != host.
! # This should be done more generally, but at the moment it doesn't matter.
! if test ${host_alias} != ${build_alias} ; then
!   # This is the only build module.
!   build_modules=libiberty
! else
!   build_modules=
! fi
! 
  
  ################################################################################
  
--- 952,960 ----
  ## is important because configure will choke if they ever get through.
  ## ${configdirs} is directories we build using the host tools.
  ## ${target_configdirs} is directories we build using the target tools.
  configdirs=`echo ${host_libs} ${host_tools}`
  target_configdirs=`echo ${target_libraries} ${target_tools}`
! build_configdirs=`echo ${build_libs} ${build_tools}`
  
  ################################################################################
  
*************** fi
*** 987,993 ****
  case ${with_x} in
    yes | "") ;; # the default value for this tree is that X11 is available
    no)
!     skipdirs="${skipdirs} tk tix itcl libgui"
      # We won't be able to build gdbtk without X.
      enable_gdbtk=no 
      ;;
--- 1020,1026 ----
  case ${with_x} in
    yes | "") ;; # the default value for this tree is that X11 is available
    no)
!     skipdirs="${skipdirs} tk itcl libgui"
      # We won't be able to build gdbtk without X.
      enable_gdbtk=no 
      ;;
*************** case "${host}" in
*** 1038,1072 ****
      noconfigdirs="$noconfigdirs byacc"
      ;;
    i[3456789]86-*-vsta)
!     noconfigdirs="tcl expect dejagnu make texinfo bison patch flex byacc send-pr gprof uudecode dejagnu diff guile perl itcl tix gnuserv gettext"
      ;;
    i[3456789]86-*-go32* | i[3456789]86-*-msdosdjgpp*)
!     noconfigdirs="tcl tk expect dejagnu send-pr uudecode guile itcl tix gnuserv libffi"
      ;;
    i[3456789]86-*-mingw32*)
!     # noconfigdirs="tcl tk expect dejagnu make texinfo bison patch flex byacc send-pr uudecode dejagnu diff guile perl itcl tix gnuserv"
!     noconfigdirs="expect dejagnu autoconf automake send-pr rcs guile perl texinfo libtool"
      ;;
    i[3456789]86-*-beos*)
!     noconfigdirs="$noconfigdirs tk itcl tix libgui gdb"
      ;;
    *-*-cygwin*)
!     noconfigdirs="autoconf automake send-pr rcs guile perl"
      ;;
    *-*-netbsd*)
!     noconfigdirs="rcs"
      ;;
    ppc*-*-pe)
!     noconfigdirs="patch diff make tk tcl expect dejagnu autoconf automake texinfo bison send-pr gprof rcs guile perl itcl tix gnuserv"
      ;;
    powerpc-*-beos*)
!     noconfigdirs="$noconfigdirs tk itcl tix libgui gdb dejagnu readline"
!     ;;
!   *-*-darwin*)
!     noconfigdirs="$noconfigdirs tk itcl tix libgui"
      ;;
  esac
  
  # Save it here so that, even in case of --enable-libgcj, if the Java
  # front-end isn't enabled, we still get libgcj disabled.
  libgcj_saved=$libgcj
--- 1071,1115 ----
      noconfigdirs="$noconfigdirs byacc"
      ;;
    i[3456789]86-*-vsta)
!     noconfigdirs="$noconfigdirs tcl expect dejagnu make texinfo bison patch flex byacc send-pr gprof uudecode dejagnu diff guile perl itcl gnuserv gettext"
      ;;
    i[3456789]86-*-go32* | i[3456789]86-*-msdosdjgpp*)
!     noconfigdirs="$noconfigdirs tcl tk expect dejagnu send-pr uudecode guile itcl gnuserv libffi"
      ;;
    i[3456789]86-*-mingw32*)
!     # noconfigdirs="tcl tk expect dejagnu make texinfo bison patch flex byacc send-pr uudecode dejagnu diff guile perl itcl gnuserv"
!     noconfigdirs="$noconfigdirs expect dejagnu autoconf automake send-pr rcs guile perl texinfo libtool"
      ;;
    i[3456789]86-*-beos*)
!     noconfigdirs="$noconfigdirs tk itcl libgui gdb"
      ;;
    *-*-cygwin*)
!     noconfigdirs="$noconfigdirs autoconf automake send-pr rcs guile perl"
      ;;
    *-*-netbsd*)
!     noconfigdirs="$noconfigdirs rcs"
      ;;
    ppc*-*-pe)
!     noconfigdirs="$noconfigdirs patch diff make tk tcl expect dejagnu autoconf automake texinfo bison send-pr gprof rcs guile perl itcl gnuserv"
      ;;
    powerpc-*-beos*)
!     noconfigdirs="$noconfigdirs tk itcl libgui gdb dejagnu readline"
      ;;
  esac
  
+ 
+ # Check whether --enable-libada or --disable-libada was given.
+ if test "${enable_libada+set}" = set; then
+   enableval="$enable_libada"
+   ENABLE_LIBADA=$enableval
+ else
+   ENABLE_LIBADA=yes
+ fi
+ 
+ if test "${ENABLE_LIBADA}" != "yes" ; then
+   noconfigdirs="$noconfigdirs target-libada"
+ fi
+ 
  # Save it here so that, even in case of --enable-libgcj, if the Java
  # front-end isn't enabled, we still get libgcj disabled.
  libgcj_saved=$libgcj
*************** no)
*** 1083,1106 ****
    ;;
  esac
  
  case "${target}" in
    *-*-chorusos)
      noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}"
      ;;
    powerpc-*-darwin*)
!     noconfigdirs="$noconfigdirs bfd binutils ld gas opcodes gdb gprof"
!     noconfigdirs="$noconfigdirs target-libobjc"
      ;;
    *-*-darwin*)
      noconfigdirs="$noconfigdirs bfd binutils ld gas opcodes gdb gprof"
!     noconfigdirs="$noconfigdirs target-libobjc ${libgcj}"
      ;;
    *-*-freebsd[12] | *-*-freebsd[12].* | *-*-freebsd*aout*)
      noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}"
      ;;
    *-*-kaos*)
      # Remove unsupported stuff on all kaOS configurations.
!     skipdirs="target-libiberty ${libgcj} target-libstdc++-v3 target-libf2c target-librx"
      skipdirs="$skipdirs target-libobjc target-examples target-groff target-gperf"
      skipdirs="$skipdirs zlib fastjar target-libjava target-boehm-gc target-zlib"
      noconfigdirs="$noconfigdirs target-libgloss"
--- 1126,1188 ----
    ;;
  esac
  
+ 
+ # Allow --disable-libmudflap to exclude target-libmudflap
+ case $enable_libmudflap in
+ yes)
+     ;;
+ no)
+     noconfigdirs="$noconfigdirs target-libmudflap"
+     ;;
+ "")
+     case "${target}" in
+     *-*-linux*-gnu | *-*-gnu* | *-*-k*bsd*-gnu)
+         # Enable libmudflap by default in GNU and friends.
+ 	;;
+     *-*-freebsd*)
+         # Enable libmudflap by default in FreeBSD.
+ 	;;
+     *)
+         # Disable it by default everywhere else.
+ 	noconfigdirs="$noconfigdirs target-libmudflap"
+ 	;;
+     esac
+ esac
+ 
+ 
  case "${target}" in
    *-*-chorusos)
      noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}"
      ;;
    powerpc-*-darwin*)
!     noconfigdirs="$noconfigdirs bfd binutils ld gas opcodes gdb gprof ${libgcj}"
      ;;
    *-*-darwin*)
      noconfigdirs="$noconfigdirs bfd binutils ld gas opcodes gdb gprof"
!     noconfigdirs="$noconfigdirs ${libgcj}"
      ;;
    *-*-freebsd[12] | *-*-freebsd[12].* | *-*-freebsd*aout*)
      noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}"
      ;;
+   *-*-freebsd*)
+     noconfigdirs="$noconfigdirs target-newlib target-libgloss"
+     if test "x$with_gmp" = x && test "x$with_gmp_dir" = x \
+ 	&& test -f /usr/local/include/gmp.h; then
+       with_gmp=/usr/local
+     fi
+ 
+     # Skip some stuff that's unsupported on some FreeBSD configurations.
+     case "${target}" in
+       i*86-*-*) ;;
+       alpha*-*-*) ;;
+       *)
+ 	noconfigdirs="$noconfigdirs ${libgcj}"
+ 	;;
+     esac
+     ;;
    *-*-kaos*)
      # Remove unsupported stuff on all kaOS configurations.
!     skipdirs="target-libiberty ${libgcj} target-libstdc++-v3 target-librx"
      skipdirs="$skipdirs target-libobjc target-examples target-groff target-gperf"
      skipdirs="$skipdirs zlib fastjar target-libjava target-boehm-gc target-zlib"
      noconfigdirs="$noconfigdirs target-libgloss"
*************** case "${target}" in
*** 1118,1134 ****
  	;;
      esac
      ;;
!   *-*-netware)
!     noconfigdirs="$noconfigdirs target-libstdc++-v3 target-newlib target-libiberty target-libgloss ${libgcj}"
      ;;
    *-*-rtems*)
      noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
-     case ${target} in
- 	h8300*-*-* | h8500-*-*)
- 	  noconfigdirs="$noconfigdirs target-libf2c"
-           ;;
-         *) ;;
-     esac
      ;;
    *-*-uclinux*)
      noconfigdirs="$noconfigdirs target-newlib target-libgloss target-rda ${libgcj}"
--- 1200,1210 ----
  	;;
      esac
      ;;
!   *-*-netware*)
!     noconfigdirs="$noconfigdirs target-newlib target-libiberty target-libgloss ${libgcj} target-libmudflap"
      ;;
    *-*-rtems*)
      noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
      ;;
    *-*-uclinux*)
      noconfigdirs="$noconfigdirs target-newlib target-libgloss target-rda ${libgcj}"
*************** case "${target}" in
*** 1149,1157 ****
      # newlib is not 64 bit ready
      noconfigdirs="$noconfigdirs target-newlib target-libgloss"
      ;;
-   alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
-     noconfigdirs="$noconfigdirs target-newlib target-libgloss"
-     ;;
    alpha*-*-*)
      # newlib is not 64 bit ready
      noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}"
--- 1225,1230 ----
*************** case "${target}" in
*** 1166,1172 ****
      noconfigdirs="$noconfigdirs ${libgcj}"
      noconfigdirs="$noconfigdirs target-examples"
      noconfigdirs="$noconfigdirs target-libiberty texinfo send-pr"
!     noconfigdirs="$noconfigdirs tcl tix tk itcl libgui sim"
      noconfigdirs="$noconfigdirs expect dejagnu"
      # the C++ libraries don't build on top of CE's C libraries
      noconfigdirs="$noconfigdirs target-libstdc++-v3"
--- 1239,1245 ----
      noconfigdirs="$noconfigdirs ${libgcj}"
      noconfigdirs="$noconfigdirs target-examples"
      noconfigdirs="$noconfigdirs target-libiberty texinfo send-pr"
!     noconfigdirs="$noconfigdirs tcl tk itcl libgui sim"
      noconfigdirs="$noconfigdirs expect dejagnu"
      # the C++ libraries don't build on top of CE's C libraries
      noconfigdirs="$noconfigdirs target-libstdc++-v3"
*************** case "${target}" in
*** 1180,1195 ****
    arc-*-*)
      noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
      ;;
    arm-*-coff | strongarm-*-coff | xscale-*-coff)
      noconfigdirs="$noconfigdirs ${libgcj}"
      ;;
!   arm-*-elf* | strongarm-*-elf* | xscale-*-elf*)
      noconfigdirs="$noconfigdirs target-libffi target-qthreads"
      ;;
!   arm-*-pe*)
!     noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
      ;;
!   arm-*-oabi*)
      noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
      ;;
    thumb-*-coff)
--- 1253,1270 ----
    arc-*-*)
      noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
      ;;
+   arm-semi-aof )
+     ;;
    arm-*-coff | strongarm-*-coff | xscale-*-coff)
      noconfigdirs="$noconfigdirs ${libgcj}"
      ;;
!   arm-*-elf* | strongarm-*-elf* | xscale-*-elf* | arm*-*-eabi* )
      noconfigdirs="$noconfigdirs target-libffi target-qthreads"
      ;;
!   arm*-*-symbianelf*)
!     noconfigdirs="$noconfigdirs ${libgcj} target-libiberty"
      ;;
!   arm-*-pe*)
      noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
      ;;
    thumb-*-coff)
*************** case "${target}" in
*** 1198,1206 ****
    thumb-*-elf)
      noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
      ;;
-   thumb-*-oabi)
-     noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
-     ;;
    thumb-*-pe)
      noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
      ;;
--- 1273,1278 ----
*************** case "${target}" in
*** 1216,1223 ****
    c54x*-*-* | tic54x-*-*)
      noconfigdirs="$noconfigdirs target-libstdc++-v3 target-libgloss ${libgcj} gcc gdb newlib"
      ;;
!   cris-*-*)
!     noconfigdirs="$noconfigdirs ${libgcj} target-newlib target-libgloss"
      ;;
    d10v-*-*)
      noconfigdirs="$noconfigdirs target-libstdc++-v3 target-libgloss ${libgcj}"
--- 1288,1303 ----
    c54x*-*-* | tic54x-*-*)
      noconfigdirs="$noconfigdirs target-libstdc++-v3 target-libgloss ${libgcj} gcc gdb newlib"
      ;;
!   cris-*-* | crisv32-*-*)
!     case "${target}" in
!       *-*-elf | *-*-aout)
! 	noconfigdirs="$noconfigdirs ${libgcj}";;
!       *)
! 	noconfigdirs="$noconfigdirs ${libgcj} target-newlib target-libgloss";;
!     esac
!     ;;
!   crx-*-*)
!     noconfigdirs="$noconfigdirs target-libstdc++-v3 target-mudflap ${libgcj}"
      ;;
    d10v-*-*)
      noconfigdirs="$noconfigdirs target-libstdc++-v3 target-libgloss ${libgcj}"
*************** case "${target}" in
*** 1232,1241 ****
      noconfigdirs="$noconfigdirs ${libgcj}"
      ;;
    h8300*-*-*)
!     noconfigdirs="$noconfigdirs target-libgloss ${libgcj} target-libf2c"
      ;;
    h8500-*-*)
!     noconfigdirs="$noconfigdirs target-libstdc++-v3 target-libgloss ${libgcj} target-libf2c"
      ;;
    hppa*64*-*-linux* | parisc*64*-*-linux*)
      # In this case, it's because the hppa64-linux target is for
--- 1312,1323 ----
      noconfigdirs="$noconfigdirs ${libgcj}"
      ;;
    h8300*-*-*)
!     noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
      ;;
    h8500-*-*)
!     noconfigdirs="$noconfigdirs target-libstdc++-v3 target-libgloss ${libgcj}"
!     ;;
!   hppa1.1-*-osf* | hppa1.1-*-bsd* )
      ;;
    hppa*64*-*-linux* | parisc*64*-*-linux*)
      # In this case, it's because the hppa64-linux target is for
*************** case "${target}" in
*** 1243,1255 ****
      # headers, crt*.o, etc., all of which are needed by these.
      noconfigdirs="$noconfigdirs target-zlib"
      ;;
    hppa*-*-*elf* | \
-   parisc*-*-linux* | hppa*-*-linux* | \
    hppa*-*-lites* | \
    hppa*-*-openbsd* | \
    hppa*64*-*-*)
      noconfigdirs="$noconfigdirs ${libgcj}"
-     # Do configure ld/binutils/gas for this case.
      ;;
    hppa*-*-*)
      # According to Alexandre Oliva <aoliva@redhat.com>, libjava won't
--- 1325,1337 ----
      # headers, crt*.o, etc., all of which are needed by these.
      noconfigdirs="$noconfigdirs target-zlib"
      ;;
+   parisc*-*-linux* | hppa*-*-linux*)
+     ;;
    hppa*-*-*elf* | \
    hppa*-*-lites* | \
    hppa*-*-openbsd* | \
    hppa*64*-*-*)
      noconfigdirs="$noconfigdirs ${libgcj}"
      ;;
    hppa*-*-*)
      # According to Alexandre Oliva <aoliva@redhat.com>, libjava won't
*************** case "${target}" in
*** 1261,1278 ****
      ;;
    ia64*-*-elf*)
      # No gdb support yet.
!     noconfigdirs="$noconfigdirs tix readline mmalloc libgui itcl gdb"
      ;;
    ia64*-**-hpux*)
      # No gdb or ld support yet.
!     noconfigdirs="$noconfigdirs ${libgcj} tix readline mmalloc libgui itcl gdb ld"
      ;;
    i[3456789]86-*-coff | i[3456789]86-*-elf)
      noconfigdirs="$noconfigdirs ${libgcj}"
      ;;
-   i[3456789]86-*-freebsd* | i[3456789]86-*-kfreebsd*-gnu)
-     noconfigdirs="$noconfigdirs target-newlib target-libgloss"
-     ;;
    i[3456789]86-*-linux*)
      # The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's
      # not build java stuff by default.
--- 1343,1359 ----
      ;;
    ia64*-*-elf*)
      # No gdb support yet.
!     noconfigdirs="$noconfigdirs readline mmalloc libgui itcl gdb"
      ;;
    ia64*-**-hpux*)
      # No gdb or ld support yet.
!     noconfigdirs="$noconfigdirs ${libgcj} readline mmalloc libgui itcl gdb ld"
!     ;;
!   i370-*-opened*)
      ;;
    i[3456789]86-*-coff | i[3456789]86-*-elf)
      noconfigdirs="$noconfigdirs ${libgcj}"
      ;;
    i[3456789]86-*-linux*)
      # The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's
      # not build java stuff by default.
*************** case "${target}" in
*** 1299,1321 ****
      # Can't build gdb for mingw32 if not native.
      case "${host}" in
        i[3456789]86-*-mingw32) ;; # keep gdb tcl tk expect etc.
!       *) noconfigdirs="$noconfigdirs gdb tcl tk expect itcl tix gnuserv"
           ;;
      esac
      ;;    
    *-*-cygwin*)
      target_configdirs="$target_configdirs target-libtermcap target-winsup"
      noconfigdirs="$noconfigdirs target-gperf target-libgloss ${libgcj}"
!     # always build newlib.
!     skipdirs=`echo " ${skipdirs} " | sed -e 's/ target-newlib / /'`
  
      # Can't build gdb for Cygwin if not native.
      case "${host}" in
        *-*-cygwin*) ;; # keep gdb tcl tk expect etc.
!       *) noconfigdirs="$noconfigdirs gdb tcl tk expect itcl tix libgui gnuserv"
           ;;
      esac
      ;;    
    i[3456789]86-*-pe)
      noconfigdirs="$noconfigdirs target-libstdc++-v3 target-libgloss ${libgcj}"
      ;;
--- 1380,1409 ----
      # Can't build gdb for mingw32 if not native.
      case "${host}" in
        i[3456789]86-*-mingw32) ;; # keep gdb tcl tk expect etc.
!       *) noconfigdirs="$noconfigdirs gdb tcl tk expect itcl gnuserv"
           ;;
      esac
      ;;    
    *-*-cygwin*)
      target_configdirs="$target_configdirs target-libtermcap target-winsup"
      noconfigdirs="$noconfigdirs target-gperf target-libgloss ${libgcj}"
!     # always build newlib if winsup directory is present.
!     if test -d "$srcdir/winsup"; then
!       skipdirs=`echo " ${skipdirs} " | sed -e 's/ target-newlib / /'`
!     elif test -d "$srcdir/newlib"; then
!       echo "Warning: winsup is missing so newlib can't be built."
!     fi
  
      # Can't build gdb for Cygwin if not native.
      case "${host}" in
        *-*-cygwin*) ;; # keep gdb tcl tk expect etc.
!       *) noconfigdirs="$noconfigdirs gdb tcl tk expect itcl libgui gnuserv"
           ;;
      esac
      ;;    
+   i[3456789]86-moss-msdos | i[3456789]86-*-moss* | \
+   i[3456789]86-*-uwin* | i[3456789]86-*-interix* )
+     ;;
    i[3456789]86-*-pe)
      noconfigdirs="$noconfigdirs target-libstdc++-v3 target-libgloss ${libgcj}"
      ;;
*************** case "${target}" in
*** 1354,1360 ****
      noconfigdirs="$noconfigdirs target-libstdc++-v3"
      ;;
    mmix-*-*)
!     noconfigdirs="$noconfigdirs ${libgcj} gdb libgloss"
      ;;
    mn10200-*-*)
      noconfigdirs="$noconfigdirs ${libgcj}"
--- 1442,1448 ----
      noconfigdirs="$noconfigdirs target-libstdc++-v3"
      ;;
    mmix-*-*)
!     noconfigdirs="$noconfigdirs ${libgcj} gdb libgloss target-libgfortran"
      ;;
    mn10200-*-*)
      noconfigdirs="$noconfigdirs ${libgcj}"
*************** case "${target}" in
*** 1368,1380 ****
      ;;
    powerpc*-*-winnt* | powerpc*-*-pe* | ppc*-*-pe)
      target_configdirs="$target_configdirs target-winsup"
!     noconfigdirs="$noconfigdirs gdb tcl tk make expect target-libgloss itcl tix gnuserv ${libgcj}"
      # always build newlib.
      skipdirs=`echo " ${skipdirs} " | sed -e 's/ target-newlib / /'`
      ;;
      # This is temporary until we can link against shared libraries
    powerpcle-*-solaris*)
!     noconfigdirs="$noconfigdirs gdb sim make tcl tk expect itcl tix gnuserv ${libgcj}"
      ;;
    powerpc-*-beos*)
      noconfigdirs="$noconfigdirs gdb target-newlib target-libgloss ${libgcj}"
--- 1456,1468 ----
      ;;
    powerpc*-*-winnt* | powerpc*-*-pe* | ppc*-*-pe)
      target_configdirs="$target_configdirs target-winsup"
!     noconfigdirs="$noconfigdirs gdb tcl tk make expect target-libgloss itcl gnuserv ${libgcj}"
      # always build newlib.
      skipdirs=`echo " ${skipdirs} " | sed -e 's/ target-newlib / /'`
      ;;
      # This is temporary until we can link against shared libraries
    powerpcle-*-solaris*)
!     noconfigdirs="$noconfigdirs gdb sim make tcl tk expect itcl gnuserv ${libgcj}"
      ;;
    powerpc-*-beos*)
      noconfigdirs="$noconfigdirs gdb target-newlib target-libgloss ${libgcj}"
*************** case "${target}" in
*** 1382,1392 ****
    powerpc-*-eabi)
      noconfigdirs="$noconfigdirs ${libgcj}"
      ;;
    rs6000-*-lynxos*)
      noconfigdirs="$noconfigdirs target-newlib gprof ${libgcj}"
      ;;
    rs6000-*-aix*)
!     noconfigdirs="$noconfigdirs gprof ${libgcj}"
      ;;
    rs6000-*-*)
      noconfigdirs="$noconfigdirs gprof ${libgcj}"
--- 1470,1482 ----
    powerpc-*-eabi)
      noconfigdirs="$noconfigdirs ${libgcj}"
      ;;
+   powerpc-*-eabi* | powerpcle-*-eabi* | powerpc-*-rtems* )
+     ;;
    rs6000-*-lynxos*)
      noconfigdirs="$noconfigdirs target-newlib gprof ${libgcj}"
      ;;
    rs6000-*-aix*)
!     noconfigdirs="$noconfigdirs gprof target-libgloss ${libgcj}"
      ;;
    rs6000-*-*)
      noconfigdirs="$noconfigdirs gprof ${libgcj}"
*************** case "${target}" in
*** 1395,1402 ****
      noconfigdirs="$noconfigdirs ld binutils gprof target-libgloss ${libgcj}"
      ;;
    mips*-*-irix5*)
!     # The GNU linker does not support shared libraries.
!     noconfigdirs="$noconfigdirs ld gprof target-libgloss ${libgcj}"
      ;;
    mips*-*-irix6*)
      # Linking libjava exceeds command-line length limits on at least
--- 1485,1491 ----
      noconfigdirs="$noconfigdirs ld binutils gprof target-libgloss ${libgcj}"
      ;;
    mips*-*-irix5*)
!     noconfigdirs="$noconfigdirs gprof target-libgloss ${libgcj}"
      ;;
    mips*-*-irix6*)
      # Linking libjava exceeds command-line length limits on at least
*************** case "${target}" in
*** 1426,1432 ****
    romp-*-*)
      noconfigdirs="$noconfigdirs bfd binutils ld gas opcodes target-libgloss ${libgcj}"
      ;;
!   sh-*-*)
      case "${host}" in
        i[3456789]86-*-vsta) ;; # don't add gprof back in
        i[3456789]86-*-go32*) ;; # don't add gprof back in
--- 1515,1521 ----
    romp-*-*)
      noconfigdirs="$noconfigdirs bfd binutils ld gas opcodes target-libgloss ${libgcj}"
      ;;
!   sh-*-* | sh64-*-*)
      case "${host}" in
        i[3456789]86-*-vsta) ;; # don't add gprof back in
        i[3456789]86-*-go32*) ;; # don't add gprof back in
*************** case "${target}" in
*** 1435,1443 ****
      esac
      noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
      ;;
-   sh64-*-*)
-     noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
-     ;;
    sparc-*-elf*)
      noconfigdirs="$noconfigdirs ${libgcj}"
      ;;
--- 1524,1529 ----
*************** case "${target}" in
*** 1455,1460 ****
--- 1541,1549 ----
             use_gnu_ld=no
      fi
      ;;
+   sparc-*-solaris2.[0-6] | sparc-*-solaris2.[0-6].*)
+     noconfigdirs="$noconfigdirs ${libgcj}"
+     ;;
    sparc-*-solaris* | sparc64-*-solaris* | sparcv9-*-solaris*)
      ;;
    v810-*-*)
*************** case "${target}" in
*** 1481,1487 ****
    ip2k-*-*)
      noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj}"
      ;;
!   *-*-linux*)
      noconfigdirs="$noconfigdirs target-newlib target-libgloss"
      ;;
    *-*-lynxos*)
--- 1570,1576 ----
    ip2k-*-*)
      noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj}"
      ;;
!   *-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu)
      noconfigdirs="$noconfigdirs target-newlib target-libgloss"
      ;;
    *-*-lynxos*)
*************** case "${noconfigdirs}" in
*** 1499,1603 ****
    *target-newlib*) noconfigdirs="$noconfigdirs target-libgloss" ;;
  esac
  
  # Figure out what language subdirectories are present.
  # Look if the user specified --enable-languages="..."; if not, use
  # the environment variable $LANGUAGES if defined. $LANGUAGES might
  # go away some day.
  # NB:  embedded tabs in this IF block -- do not untabify
! if test x"${enable_languages+set}" != xset; then
!   if test x"${LANGUAGES+set}" = xset; then
!     enable_languages="${LANGUAGES}"
!       echo configure.in: warning: setting LANGUAGES is deprecated, use --enable-languages instead 1>&2
    else
!     enable_languages=all
!   fi
! else
!   if test x"${enable_languages}" = x ||
!      test x"${enable_languages}" = xyes;
!      then
!     echo configure.in: --enable-languages needs at least one language argument 1>&2
!     exit 1
    fi
! fi
! enable_languages=`echo "${enable_languages}" | sed -e 's/[ 	,][ 	,]*/,/g' -e 's/,$//'`
  
! # First scan to see if an enabled language requires some other language.
! # We assume that a given config-lang.in will list all the language
! # front ends it requires, even if some are required indirectly.
! for lang_frag in ${srcdir}/gcc/*/config-lang.in .. ; do
!   case ${lang_frag} in
!     ..) ;;
!     # The odd quoting in the next line works around
!     # an apparent bug in bash 1.12 on linux.
!     ${srcdir}/gcc/[*]/config-lang.in) ;;
!     *)
!       # From the config-lang.in, get $language, $lang_requires
!       language=
!       lang_requires=
!       . ${lang_frag}
!       for other in ${lang_requires} ; do
!         case ,${enable_languages}, in
! 	  *,$other,*) ;;
! 	  *,all,*) ;;
! 	  *,$language,*)
! 	    echo " \`$other' language required by \`$language'; enabling" 1>&2
! 	    enable_languages="${enable_languages},${other}"
  	    ;;
! 	esac
!       done
!       ;;
!   esac
! done
  
! for lang_frag in ${srcdir}/gcc/*/config-lang.in .. ; do
!   case ${lang_frag} in
!     ..) ;;
!     # The odd quoting in the next line works around
!     # an apparent bug in bash 1.12 on linux.
!     ${srcdir}/gcc/[*]/config-lang.in) ;;
!     *)
!       # From the config-lang.in, get $language, $target_libs, 
!       # $lang_dirs, and $build_by_default
!       language=
!       target_libs=
!       lang_dirs=
!       build_by_default=
!       . ${lang_frag}
!       if test "x$language" = x ; then
!         echo "${lang_frag} doesn't set \$language." 1>&2
!         exit 1
!       fi
!       case ,${enable_languages}, in
!         *,${language},*)
!           # Language was explicitly selected; include it.
!           add_this_lang=yes
!           ;;
!         *,all,*)
!           # 'all' was selected; include 'default' languages.
!           case ${build_by_default} in
!             no) add_this_lang=no ;;
!             *) add_this_lang=yes ;;
!           esac 
!           ;;
!         *) add_this_lang=no ;;
!       esac
!       case ${add_this_lang} in
!         no)
!           # Remove language-dependent dirs.
!           eval noconfigdirs='"$noconfigdirs "'\"$target_libs $lang_dirs\"
!           ;;
!       esac
!       ;;
!   esac
! done
  
! # Remove the entries in $skipdirs and $noconfigdirs from $configdirs and
! # $target_configdirs.
  # If we have the source for $noconfigdirs entries, add them to $notsupp.
  
  notsupp=""
  for dir in . $skipdirs $noconfigdirs ; do
!   dirname=`echo $dir | sed -e s/target-//g`
    if test $dir != .  && echo " ${configdirs} " | grep " ${dir} " >/dev/null 2>&1; then
      configdirs=`echo " ${configdirs} " | sed -e "s/ ${dir} / /"`
      if test -r $srcdir/$dirname/configure ; then
--- 1588,2468 ----
    *target-newlib*) noconfigdirs="$noconfigdirs target-libgloss" ;;
  esac
  
+ # Work in distributions that contain no compiler tools, like Autoconf.
+ tentative_cc=""
+ host_makefile_frag=/dev/null
+ if test -d ${srcdir}/config ; then
+ case "${host}" in
+   m68k-hp-hpux*)
+     # Avoid "too much defining" errors from HPUX compiler.
+     tentative_cc="cc -Wp,-H256000"
+     # If "ar" in $PATH is GNU ar, the symbol table may need rebuilding.
+     # If it's HP/UX ar, this should be harmless.
+     RANLIB="ar ts"
+     ;;
+   m68k-apollo-sysv*)
+     tentative_cc="cc -A ansi -A runtype,any -A systype,any -U__STDC__ -DUSG"
+     ;;
+   m68k-apollo-bsd*)
+     #None of the Apollo compilers can compile gas or binutils.  The preprocessor
+     # chokes on bfd, the compiler won't let you assign integers to enums, and
+     # other problems.  Defining CC to gcc is a questionable way to say "don't use
+     # the apollo compiler" (the preferred version of GCC could be called cc,
+     # or whatever), but I'm not sure leaving CC as cc is any better...
+     #CC=cc -A ansi -A runtype,any -A systype,any -U__STDC__ -DNO_STDARG
+     # Used to have BISON=yacc.
+     tentative_cc=gcc
+     ;;
+   m88k-dg-dgux*)
+     tentative_cc="gcc -Wall -ansi -D__using_DGUX"
+     ;;
+   m88k-harris-cxux*)
+     # Under CX/UX, we want to tell the compiler to use ANSI mode.
+     tentative_cc="cc -Xa"
+     host_makefile_frag="config/mh-cxux"
+     ;;
+   m88k-motorola-sysv*)
+     ;;
+   mips*-dec-ultrix*)
+     tentative_cc="cc -Wf,-XNg1000"
+     host_makefile_frag="config/mh-decstation"
+     ;;
+   mips*-nec-sysv4*)
+     # The C compiler on NEC MIPS SVR4 needs bigger tables.
+     tentative_cc="cc -ZXNd=5000 -ZXNg=1000"
+     host_makefile_frag="config/mh-necv4"
+     ;;
+   mips*-sgi-irix4*)
+     # Tell compiler to use K&R C.  We can't compile under the SGI Ansi
+     # environment.  Also bump switch table size so that cp-parse will
+     # compile.  Bump string length limit so linker builds.
+     tentative_cc="cc -cckr -Wf,-XNg1500 -Wf,-XNk1000 -Wf,-XNh2000 -Wf,-XNl8192"
+     ;;
+   mips*-*-sysv4*)
+     host_makefile_frag="config/mh-sysv4"
+     ;;
+   mips*-*-sysv*)
+     # This is for a MIPS running RISC/os 4.52C.
+ 
+     # This is needed for GDB, but needs to be in the top-level make because
+     # if a library is compiled with the bsd headers and gets linked with the
+     # sysv system libraries all hell can break loose (e.g. a jmp_buf might be
+     # a different size).
+     # ptrace(2) apparently has problems in the BSD environment.  No workaround is
+     # known except to select the sysv environment.  Could we use /proc instead?
+     # These "sysv environments" and "bsd environments" often end up being a pain.
+     #
+     # This is not part of CFLAGS because perhaps not all C compilers have this
+     # option.
+     tentative_cc="cc -systype sysv"
+     ;;
+   i370-ibm-opened*)
+     tentative_cc="c89"
+     ;;
+   i[3456789]86-*-sysv5*)
+     host_makefile_frag="config/mh-sysv5"
+     ;;
+   i[3456789]86-*-dgux*)
+     tentative_cc="gcc -Wall -ansi -D__using_DGUX"
+     host_makefile_frag="config/mh-dgux386"
+     ;;
+   i[3456789]86-ncr-sysv4.3*)
+     # The MetaWare compiler will generate a copyright message unless you
+     # turn it off by adding the -Hnocopyr flag.
+     tentative_cc="cc -Hnocopyr"
+     ;;
+   i[3456789]86-ncr-sysv4*)
+     # for an NCR 3000 (i486/SVR4) system.
+     # The NCR 3000 ships with a MetaWare compiler installed as /bin/cc.
+     # This compiler not only emits obnoxious copyright messages every time
+     # you run it, but it chokes and dies on a whole bunch of GNU source
+     # files.  Default to using the AT&T compiler installed in /usr/ccs/ATT/cc.
+     tentative_cc="/usr/ccs/ATT/cc"
+     host_makefile_frag="config/mh-ncr3000"
+     ;;
+   i[3456789]86-*-sco3.2v5*)
+     ;;
+   i[3456789]86-*-sco*)
+     # The native C compiler botches some simple uses of const.  Unfortunately,
+     # it doesn't defined anything like "__sco__" for us to test for in ansidecl.h.
+     tentative_cc="cc -Dconst="
+     host_makefile_frag="config/mh-sco"
+     ;;
+   i[3456789]86-*-udk*)
+     host_makefile_frag="config/mh-sysv5"
+     ;;
+   i[3456789]86-*-solaris2*)
+     host_makefile_frag="config/mh-sysv4"
+     ;;
+   i[3456789]86-*-msdosdjgpp*)
+     host_makefile_frag="config/mh-djgpp"
+     ;;
+   *-cygwin*)
+     host_makefile_frag="config/mh-cygwin"
+     ;;
+   *-mingw32*)
+     host_makefile_frag="config/mh-mingw32"
+     ;;
+   *-interix*)
+     host_makefile_frag="config/mh-interix"
+     ;;
+   vax-*-ultrix2*)
+     # The old BSD pcc isn't up to compiling parts of gdb so use gcc
+     tentative_cc=gcc
+     ;;
+   *-*-solaris2*)
+     host_makefile_frag="config/mh-solaris"
+     ;;
+   m68k-sun-sunos*)
+     # Sun's C compiler needs the -J flag to be able to compile cp-parse.c
+     # without overflowing the jump tables (-J says to use a 32 bit table)
+     tentative_cc="cc -J"
+     ;;
+   *-hp-hpux*)
+     tentative_cc="cc -Wp,-H256000"
+     ;;
+   *-*-hiux*)
+     tentative_cc="cc -Wp,-H256000"
+     ;;
+   rs6000-*-lynxos*)
+     # /bin/cc is less than useful for our purposes.  Always use GCC
+     tentative_cc="/usr/cygnus/progressive/bin/gcc"
+     host_makefile_frag="config/mh-lynxrs6k"
+     ;;
+   powerpc-*-darwin*)
+     host_makefile_frag="config/mh-ppc-darwin"
+     ;;
+   *-*-lynxos*)
+     # /bin/cc is less than useful for our purposes.  Always use GCC
+     tentative_cc="/bin/gcc"
+     ;;
+   *-*-sysv4*)
+     host_makefile_frag="config/mh-sysv4"
+     ;;
+   # This is placed last to prevent interfering with the cases above.
+   i[3456789]86-*-*)
+     # Build the stage2 and stage3 compilers with -fomit-frame-pointer.
+     host_makefile_frag="config/mh-x86omitfp"
+     ;;
+ esac
+ fi
+ 
+ # If we aren't going to be using gcc, see if we can extract a definition
+ # of CC from the fragment.
+ # Actually, use the 'pre-extracted' version above.
+ if test -z "${CC}" && test "${build}" = "${host}" ; then
+   IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}:"
+   found=
+   for dir in $PATH; do
+     test -z "$dir" && dir=.
+     if test -f $dir/gcc; then
+       found=yes
+       break
+     fi
+   done
+   IFS="$save_ifs"
+   if test -z "${found}" && test -n "${tentative_cc}" ; then
+     CC=$tentative_cc
+   fi
+ fi
+ 
+ if test "${build}" != "${host}" ; then
+   # If we are doing a Canadian Cross, in which the host and build systems
+   # are not the same, we set reasonable default values for the tools.
+ 
+   CC=${CC-${host_alias}-gcc}
+   CFLAGS=${CFLAGS-"-g -O2"}
+   CXX=${CXX-${host_alias}-c++}
+   CXXFLAGS=${CXXFLAGS-"-g -O2"}
+   CC_FOR_BUILD=${CC_FOR_BUILD-gcc}
+   CC_FOR_TARGET=${CC_FOR_TARGET-${target_alias}-gcc}
+   CXX_FOR_TARGET=${CXX_FOR_TARGET-${target_alias}-c++}
+   GCJ_FOR_TARGET=${GCJ_FOR_TARGET-${target_alias}-gcj}
+   GCC_FOR_TARGET=${GCC_FOR_TARGET-${CC_FOR_TARGET-${target_alias}-gcc}}
+   BUILD_PREFIX=${build_alias}-
+   BUILD_PREFIX_1=${build_alias}-
+ 
+ else
+   # Set reasonable default values for some tools even if not Canadian.
+   # Of course, these are different reasonable default values, originally
+   # specified directly in the Makefile.
+   # We don't export, so that autoconf can do its job.
+   # Note that all these settings are above the fragment inclusion point
+   # in Makefile.in, so can still be overridden by fragments.
+   # This is all going to change when we autoconfiscate...
+ 
+   CC_FOR_BUILD="\$(CC)"
+   GCC_FOR_TARGET="\$(USUAL_GCC_FOR_TARGET)"
+   BUILD_PREFIX=
+   BUILD_PREFIX_1=loser-
+ 
+   # Extract the first word of "gcc", so it can be a program name with args.
+ set dummy gcc; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+ echo "configure:1803: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+   echo $ac_n "(cached) $ac_c" 1>&6
+ else
+   if test -n "$CC"; then
+   ac_cv_prog_CC="$CC" # Let the user override the test.
+ else
+   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
+   ac_dummy="$PATH"
+   for ac_dir in $ac_dummy; do
+     test -z "$ac_dir" && ac_dir=.
+     if test -f $ac_dir/$ac_word; then
+       ac_cv_prog_CC="gcc"
+       break
+     fi
+   done
+   IFS="$ac_save_ifs"
+ fi
+ fi
+ CC="$ac_cv_prog_CC"
+ if test -n "$CC"; then
+   echo "$ac_t""$CC" 1>&6
+ else
+   echo "$ac_t""no" 1>&6
+ fi
+ 
+ if test -z "$CC"; then
+   # Extract the first word of "cc", so it can be a program name with args.
+ set dummy cc; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+ echo "configure:1833: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+   echo $ac_n "(cached) $ac_c" 1>&6
+ else
+   if test -n "$CC"; then
+   ac_cv_prog_CC="$CC" # Let the user override the test.
+ else
+   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
+   ac_prog_rejected=no
+   ac_dummy="$PATH"
+   for ac_dir in $ac_dummy; do
+     test -z "$ac_dir" && ac_dir=.
+     if test -f $ac_dir/$ac_word; then
+       if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
+         ac_prog_rejected=yes
+ 	continue
+       fi
+       ac_cv_prog_CC="cc"
+       break
+     fi
+   done
+   IFS="$ac_save_ifs"
+ if test $ac_prog_rejected = yes; then
+   # We found a bogon in the path, so make sure we never use it.
+   set dummy $ac_cv_prog_CC
+   shift
+   if test $# -gt 0; then
+     # We chose a different compiler from the bogus one.
+     # However, it has the same basename, so the bogon will be chosen
+     # first if we set CC to just the basename; use the full file name.
+     shift
+     set dummy "$ac_dir/$ac_word" "$@"
+     shift
+     ac_cv_prog_CC="$@"
+   fi
+ fi
+ fi
+ fi
+ CC="$ac_cv_prog_CC"
+ if test -n "$CC"; then
+   echo "$ac_t""$CC" 1>&6
+ else
+   echo "$ac_t""no" 1>&6
+ fi
+ 
+   if test -z "$CC"; then
+     case "`uname -s`" in
+     *win32* | *WIN32*)
+       # Extract the first word of "cl", so it can be a program name with args.
+ set dummy cl; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+ echo "configure:1884: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+   echo $ac_n "(cached) $ac_c" 1>&6
+ else
+   if test -n "$CC"; then
+   ac_cv_prog_CC="$CC" # Let the user override the test.
+ else
+   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
+   ac_dummy="$PATH"
+   for ac_dir in $ac_dummy; do
+     test -z "$ac_dir" && ac_dir=.
+     if test -f $ac_dir/$ac_word; then
+       ac_cv_prog_CC="cl"
+       break
+     fi
+   done
+   IFS="$ac_save_ifs"
+ fi
+ fi
+ CC="$ac_cv_prog_CC"
+ if test -n "$CC"; then
+   echo "$ac_t""$CC" 1>&6
+ else
+   echo "$ac_t""no" 1>&6
+ fi
+  ;;
+     esac
+   fi
+   test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
+ fi
+ 
+ echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
+ echo "configure:1916: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+ 
+ ac_ext=c
+ # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+ cross_compiling=$ac_cv_prog_cc_cross
+ 
+ cat > conftest.$ac_ext << EOF
+ 
+ #line 1927 "configure"
+ #include "confdefs.h"
+ 
+ main(){return(0);}
+ EOF
+ if { (eval echo configure:1932: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+   ac_cv_prog_cc_works=yes
+   # If we can't run a trivial program, we are probably using a cross compiler.
+   if (./conftest; exit) 2>/dev/null; then
+     ac_cv_prog_cc_cross=no
+   else
+     ac_cv_prog_cc_cross=yes
+   fi
+ else
+   echo "configure: failed program was:" >&5
+   cat conftest.$ac_ext >&5
+   ac_cv_prog_cc_works=no
+ fi
+ rm -fr conftest*
+ ac_ext=c
+ # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+ cross_compiling=$ac_cv_prog_cc_cross
+ 
+ echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
+ if test $ac_cv_prog_cc_works = no; then
+   { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
+ fi
+ echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
+ echo "configure:1958: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+ echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
+ cross_compiling=$ac_cv_prog_cc_cross
+ 
+ echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
+ echo "configure:1963: checking whether we are using GNU C" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
+   echo $ac_n "(cached) $ac_c" 1>&6
+ else
+   cat > conftest.c <<EOF
+ #ifdef __GNUC__
+   yes;
+ #endif
+ EOF
+ if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1972: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+   ac_cv_prog_gcc=yes
+ else
+   ac_cv_prog_gcc=no
+ fi
+ fi
+ 
+ echo "$ac_t""$ac_cv_prog_gcc" 1>&6
+ 
+ if test $ac_cv_prog_gcc = yes; then
+   GCC=yes
+ else
+   GCC=
+ fi
+ 
+ ac_test_CFLAGS="${CFLAGS+set}"
+ ac_save_CFLAGS="$CFLAGS"
+ CFLAGS=
+ echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
+ echo "configure:1991: checking whether ${CC-cc} accepts -g" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
+   echo $ac_n "(cached) $ac_c" 1>&6
+ else
+   echo 'void f(){}' > conftest.c
+ if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
+   ac_cv_prog_cc_g=yes
+ else
+   ac_cv_prog_cc_g=no
+ fi
+ rm -f conftest*
+ 
+ fi
+ 
+ echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
+ if test "$ac_test_CFLAGS" = set; then
+   CFLAGS="$ac_save_CFLAGS"
+ elif test $ac_cv_prog_cc_g = yes; then
+   if test "$GCC" = yes; then
+     CFLAGS="-g -O2"
+   else
+     CFLAGS="-g"
+   fi
+ else
+   if test "$GCC" = yes; then
+     CFLAGS="-O2"
+   else
+     CFLAGS=
+   fi
+ fi
+ 
+ 
+   # We must set the default linker to the linker used by gcc for the correct
+   # operation of libtool.  If LD is not defined and we are using gcc, try to
+   # set the LD default to the ld used by gcc.
+   if test -z "$LD"; then
+     if test "$GCC" = yes; then
+       case $build in
+       *-*-mingw*)
+ 	gcc_prog_ld=`$CC -print-prog-name=ld 2>&1 | tr -d '\015'` ;;
+       *)
+ 	gcc_prog_ld=`$CC -print-prog-name=ld 2>&1` ;;
+       esac
+       case $gcc_prog_ld in
+       # Accept absolute paths.
+       [\\/]* | [A-Za-z]:[\\/]*)
+         LD="$gcc_prog_ld" ;;
+       esac
+     fi
+   fi
+ 
+   CXX=${CXX-"c++"}
+   CFLAGS=${CFLAGS-"-g"}
+   CXXFLAGS=${CXXFLAGS-"-g -O2"}
+ fi
+ 
+ if test $host != $build; then
+   ac_tool_prefix=${host_alias}-
+ else
+   ac_tool_prefix=
+ fi
+ 
+ 
+ 
+ # Extract the first word of "${ac_tool_prefix}gnatbind", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}gnatbind; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+ echo "configure:2058: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_GNATBIND'+set}'`\" = set"; then
+   echo $ac_n "(cached) $ac_c" 1>&6
+ else
+   if test -n "$GNATBIND"; then
+   ac_cv_prog_GNATBIND="$GNATBIND" # Let the user override the test.
+ else
+   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
+   ac_dummy="$PATH"
+   for ac_dir in $ac_dummy; do
+     test -z "$ac_dir" && ac_dir=.
+     if test -f $ac_dir/$ac_word; then
+       ac_cv_prog_GNATBIND="${ac_tool_prefix}gnatbind"
+       break
+     fi
+   done
+   IFS="$ac_save_ifs"
+ fi
+ fi
+ GNATBIND="$ac_cv_prog_GNATBIND"
+ if test -n "$GNATBIND"; then
+   echo "$ac_t""$GNATBIND" 1>&6
+ else
+   echo "$ac_t""no" 1>&6
+ fi
+ 
+ 
+ if test -z "$ac_cv_prog_GNATBIND"; then
+ if test -n "$ac_tool_prefix"; then
+   # Extract the first word of "gnatbind", so it can be a program name with args.
+ set dummy gnatbind; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+ echo "configure:2090: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_GNATBIND'+set}'`\" = set"; then
+   echo $ac_n "(cached) $ac_c" 1>&6
+ else
+   if test -n "$GNATBIND"; then
+   ac_cv_prog_GNATBIND="$GNATBIND" # Let the user override the test.
+ else
+   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
+   ac_dummy="$PATH"
+   for ac_dir in $ac_dummy; do
+     test -z "$ac_dir" && ac_dir=.
+     if test -f $ac_dir/$ac_word; then
+       ac_cv_prog_GNATBIND="gnatbind"
+       break
+     fi
+   done
+   IFS="$ac_save_ifs"
+   test -z "$ac_cv_prog_GNATBIND" && ac_cv_prog_GNATBIND="no"
+ fi
+ fi
+ GNATBIND="$ac_cv_prog_GNATBIND"
+ if test -n "$GNATBIND"; then
+   echo "$ac_t""$GNATBIND" 1>&6
+ else
+   echo "$ac_t""no" 1>&6
+ fi
+ 
+ else
+   GNATBIND="no"
+ fi
+ fi
+ 
+ echo $ac_n "checking whether compiler driver understands Ada""... $ac_c" 1>&6
+ echo "configure:2123: checking whether compiler driver understands Ada" >&5
+ if eval "test \"`echo '$''{'acx_cv_cc_gcc_supports_ada'+set}'`\" = set"; then
+   echo $ac_n "(cached) $ac_c" 1>&6
+ else
+   cat >conftest.adb <<EOF
+ procedure conftest is begin null; end conftest;
+ EOF
+ acx_cv_cc_gcc_supports_ada=no
+ # There is a bug in old released versions of GCC which causes the
+ # driver to exit successfully when the appropriate language module
+ # has not been installed.  This is fixed in 2.95.4, 3.0.2, and 3.1.
+ # Therefore we must check for the error message as well as an
+ # unsuccessful exit.
+ # Other compilers, like HP Tru64 UNIX cc, exit successfully when
+ # given a .adb file, but produce no object file.  So we must check
+ # if an object file was really produced to guard against this.
+ errors=`(${CC} -c conftest.adb) 2>&1 || echo failure`
+ if test x"$errors" = x && test -f conftest.$ac_objext; then
+   acx_cv_cc_gcc_supports_ada=yes
+ fi
+ rm -f conftest.*
+ fi
+ 
+ echo "$ac_t""$acx_cv_cc_gcc_supports_ada" 1>&6
+ 
+ if test x$GNATBIND != xno && test x$acx_cv_cc_gcc_supports_ada != xno; then
+   have_gnat=yes
+ else
+   have_gnat=no
+ fi
+ 
+ echo $ac_n "checking how to compare bootstrapped objects""... $ac_c" 1>&6
+ echo "configure:2155: checking how to compare bootstrapped objects" >&5
+ if eval "test \"`echo '$''{'gcc_cv_prog_cmp_skip'+set}'`\" = set"; then
+   echo $ac_n "(cached) $ac_c" 1>&6
+ else
+    echo abfoo >t1
+   echo cdfoo >t2
+   gcc_cv_prog_cmp_skip='tail +16c $$f1 > tmp-foo1; tail +16c $$f2 > tmp-foo2; cmp tmp-foo1 tmp-foo2'
+   if cmp t1 t2 2 2 > /dev/null 2>&1; then
+     if cmp t1 t2 1 1 > /dev/null 2>&1; then
+       :
+     else
+       gcc_cv_prog_cmp_skip='cmp $$f1 $$f2 16 16'
+     fi
+   fi
+   if cmp --ignore-initial=2 t1 t2 > /dev/null 2>&1; then
+     if cmp --ignore-initial=1 t1 t2 > /dev/null 2>&1; then
+       :
+     else
+       gcc_cv_prog_cmp_skip='cmp --ignore-initial=16 $$f1 $$f2'
+     fi
+   fi
+   rm t1 t2
+ 
+ fi
+ 
+ echo "$ac_t""$gcc_cv_prog_cmp_skip" 1>&6
+ do_compare="$gcc_cv_prog_cmp_skip"
+ 
+ 
+ 
+ # Check for GMP and MPFR
+ gmplibs=
+ gmpinc=
+ have_gmp=yes
+ # Specify a location for mpfr
+ # check for this first so it ends up on the link line before gmp.
+ # Check whether --with-mpfr-dir or --without-mpfr-dir was given.
+ if test "${with_mpfr_dir+set}" = set; then
+   withval="$with_mpfr_dir"
+   :
+ fi
+ 
+ 
+ if test "x$with_mpfr_dir" != x; then
+   gmpinc="-I$with_mpfr_dir/mpfr"
+   gmplibs="$with_mpfr_dir/libmpfr.a"
+ else
+   gmplibs="-lmpfr"
+ fi
+ 
+ # Check whether --with-mpfr or --without-mpfr was given.
+ if test "${with_mpfr+set}" = set; then
+   withval="$with_mpfr"
+   :
+ fi
+ 
+ 
+ if test "x$with_mpfr" != x; then
+   gmplibs="-L$with_mpfr/lib $gmplibs"
+   gmpinc="-I$with_mpfr/include"
+ fi
+ 
+ # Specify a location for gmp
+ # Check whether --with-gmp-dir or --without-gmp-dir was given.
+ if test "${with_gmp_dir+set}" = set; then
+   withval="$with_gmp_dir"
+   :
+ fi
+ 
+ 
+ if test "x$with_gmp_dir" != x; then
+   gmpinc="$gmpinc -I$with_gmp_dir"
+   if test -f "$with_gmp_dir/.libs/libgmp.a"; then
+     gmplibs="$gmplibs $with_gmp_dir/.libs/libgmp.a"
+   elif test -f "$with_gmp_dir/_libs/libgmp.a"; then
+     gmplibs="$gmplibs $with_gmp_dir/_libs/libgmp.a"
+   fi
+   # One of the later tests will catch the error if neither library is present.
+ else
+   gmplibs="$gmplibs -lgmp"
+ fi
+ 
+ # Check whether --with-gmp or --without-gmp was given.
+ if test "${with_gmp+set}" = set; then
+   withval="$with_gmp"
+   :
+ fi
+ 
+ 
+ if test "x$with_gmp" != x; then
+   gmplibs="-L$with_gmp/lib $gmplibs"
+   gmpinc="-I$with_gmp/include $gmpinc"
+ fi
+ 
+ saved_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $gmpinc"
+ # Check GMP actually works
+ echo $ac_n "checking for correct version of gmp.h""... $ac_c" 1>&6
+ echo "configure:2253: checking for correct version of gmp.h" >&5
+ cat > conftest.$ac_ext <<EOF
+ #line 2255 "configure"
+ #include "confdefs.h"
+ #include "gmp.h"
+ int main() {
+ 
+ #if __GNU_MP_VERSION < 3
+ choke me
+ #endif
+ 
+ ; return 0; }
+ EOF
+ if { (eval echo configure:2266: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+   rm -rf conftest*
+   echo "$ac_t""yes" 1>&6
+ else
+   echo "configure: failed program was:" >&5
+   cat conftest.$ac_ext >&5
+   rm -rf conftest*
+   echo "$ac_t""no" 1>&6; have_gmp=no
+ fi
+ rm -f conftest*
+ 
+ if test x"$have_gmp" = xyes; then
+   echo $ac_n "checking for MPFR""... $ac_c" 1>&6
+ echo "configure:2279: checking for MPFR" >&5
+ 
+   saved_LIBS="$LIBS"
+   LIBS="$LIBS $gmplibs"
+   cat > conftest.$ac_ext <<EOF
+ #line 2284 "configure"
+ #include "confdefs.h"
+ #include <gmp.h>
+ #include <mpfr.h>
+ int main() {
+ mpfr_t n; mpfr_init(n);
+ ; return 0; }
+ EOF
+ if { (eval echo configure:2292: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+   rm -rf conftest*
+   echo "$ac_t""yes" 1>&6
+ else
+   echo "configure: failed program was:" >&5
+   cat conftest.$ac_ext >&5
+   rm -rf conftest*
+   echo "$ac_t""no" 1>&6; have_gmp=no
+ fi
+ rm -f conftest*
+   LIBS="$saved_LIBS"
+   CFLAGS="$saved_CFLAGS"
+ fi
+ 
+ # Flags needed for both GMP and/or MPFR
+ 
+ 
+ 
+ # By default, C is the only stage 1 language.
+ stage1_languages=c
+ 
+ 
  # Figure out what language subdirectories are present.
  # Look if the user specified --enable-languages="..."; if not, use
  # the environment variable $LANGUAGES if defined. $LANGUAGES might
  # go away some day.
  # NB:  embedded tabs in this IF block -- do not untabify
! if test -d ${srcdir}/gcc; then
!   if test x"${enable_languages+set}" != xset; then
!     if test x"${LANGUAGES+set}" = xset; then
!       enable_languages="${LANGUAGES}"
!         echo configure.in: warning: setting LANGUAGES is deprecated, use --enable-languages instead 1>&2
!     else
!       enable_languages=all
!     fi
    else
!     if test x"${enable_languages}" = x ||
!        test x"${enable_languages}" = xyes;
!        then
!       echo configure.in: --enable-languages needs at least one language argument 1>&2
!       exit 1
!     fi
    fi
!   enable_languages=`echo "${enable_languages}" | sed -e 's/[ 	,][ 	,]*/,/g' -e 's/,$//'`
  
!   # First scan to see if an enabled language requires some other language.
!   # We assume that a given config-lang.in will list all the language
!   # front ends it requires, even if some are required indirectly.
!   for lang_frag in ${srcdir}/gcc/*/config-lang.in .. ; do
!     case ${lang_frag} in
!       ..) ;;
!       # The odd quoting in the next line works around
!       # an apparent bug in bash 1.12 on linux.
!       ${srcdir}/gcc/[*]/config-lang.in) ;;
!       *)
!         # From the config-lang.in, get $language, $lang_requires
!         language=
!         lang_requires=
!         . ${lang_frag}
!         for other in ${lang_requires} ; do
!           case ,${enable_languages}, in
! 	    *,$other,*) ;;
! 	    *,all,*) ;;
! 	    *,$language,*)
! 	      echo " \`$other' language required by \`$language'; enabling" 1>&2
! 	      enable_languages="${enable_languages},${other}"
! 	      ;;
! 	  esac
!         done
!         ;;
!     esac
!   done
! 
!   new_enable_languages=c
!   missing_languages=`echo ",$enable_languages," | sed -e s/,all,/,/ -e s/,c,/,/ `
!   potential_languages=c
! 
!   for lang_frag in ${srcdir}/gcc/*/config-lang.in .. ; do
!     case ${lang_frag} in
!       ..) ;;
!       # The odd quoting in the next line works around
!       # an apparent bug in bash 1.12 on linux.
!       ${srcdir}/gcc/[*]/config-lang.in) ;;
!       *)
!         # From the config-lang.in, get $language, $target_libs, 
!         # $lang_dirs, $boot_language, and $build_by_default
!         language=
!         target_libs=
!         lang_dirs=
!         boot_language=
!         build_by_default=
!         need_gmp=
!         . ${lang_frag}
!         potential_languages="${potential_languages},${language}"
!         # This is quite sensitive to the ordering of the case statement arms.
!         case ,${enable_languages},:${language}:${have_gnat}:${build_by_default} in
!           *::*:*)
!             echo "${lang_frag} doesn't set \$language." 1>&2
!             exit 1
!             ;;
!           *:ada:no:*)
!             # Ada was requested with no preexisting GNAT.  Disable unconditionally.
!             add_this_lang=no
!             ;;
!           *,${language},*:*:*:*)
!             # Language was explicitly selected; include it.
!             add_this_lang=yes
!             ;;
!           *,all,*:*:*:no)
!             # 'all' was selected, but this is not a default language
!             # so do not include it.
!             add_this_lang=no
!             ;;
!           *,all,*:*:*:*)
!             # 'all' was selected and this is a default language; include it.
!             add_this_lang=yes
!             ;;
!           *)
!             add_this_lang=no
!             ;;
!         esac
! 
!         # Disable languages that need GMP if it isn't available.
!         case ,${enable_languages},:${have_gmp}:${need_gmp} in
!           *,${language},*:no:yes)
!             # Specifically requested language; tell them.
!             { echo "configure: error: GMP with MPFR support is required to build $language" 1>&2; exit 1; }
!             ;;
!           *:no:yes)
!             # Silently disable.
!             add_this_lang=no
!             ;;
!         esac
!         
! 	case $add_this_lang in
! 	  no)
!             # Remove language-dependent dirs.
!             eval noconfigdirs='"$noconfigdirs "'\"$target_libs $lang_dirs\"
  	    ;;
!           *)
! 	    new_enable_languages="$new_enable_languages,$language"
! 	    missing_languages=`echo "$missing_languages" | sed "s/,$language,/,/"`
! 	    case ${boot_language} in
! 	      yes)
! 		# Add to (comma-separated) list of stage 1 languages.
! 		stage1_languages="${stage1_languages},${language}"
! 		;;
! 	    esac
! 	    ;;
!         esac
!         ;;
!     esac
!   done
  
!   missing_languages=`echo "$missing_languages" | sed -e "s/^,//" -e "s/,$//"`
!   if test "x$missing_languages" != x; then
!     { echo "configure: error: 
! The following requested languages were not found: ${missing_languages}
! The available languages are: ${potential_languages}" 1>&2; exit 1; }
!   fi
  
!   if test "x$new_enable_languages" != "x$enable_languages"; then
!     echo The following languages will be built: ${new_enable_languages}
!   fi
!   enable_languages="$new_enable_languages"
!   ac_configure_args=`echo " $ac_configure_args" | sed -e 's/ --enable-languages=[^ ]*//' -e 's/$/ --enable-languages='"$enable_languages"/ `
! fi
! 
! # Remove the entries in $skipdirs and $noconfigdirs from $configdirs,
! # $build_configdirs and $target_configdirs.
  # If we have the source for $noconfigdirs entries, add them to $notsupp.
  
  notsupp=""
  for dir in . $skipdirs $noconfigdirs ; do
!   dirname=`echo $dir | sed -e s/target-//g -e s/build-//g`
    if test $dir != .  && echo " ${configdirs} " | grep " ${dir} " >/dev/null 2>&1; then
      configdirs=`echo " ${configdirs} " | sed -e "s/ ${dir} / /"`
      if test -r $srcdir/$dirname/configure ; then
*************** for dir in . $skipdirs $noconfigdirs ; d
*** 1608,1613 ****
--- 2473,2488 ----
        fi
      fi
    fi
+   if test $dir != .  && echo " ${build_configdirs} " | grep " ${dir} " >/dev/null 2>&1; then
+     build_configdirs=`echo " ${build_configdirs} " | sed -e "s/ ${dir} / /"`
+     if test -r $srcdir/$dirname/configure ; then
+       if echo " ${skipdirs} " | grep " ${dir} " >/dev/null 2>&1; then
+ 	true
+       else
+ 	notsupp="$notsupp $dir"
+       fi
+     fi
+   fi
    if test $dir != . && echo " ${target_configdirs} " | grep " ${dir} " >/dev/null 2>&1; then
      target_configdirs=`echo " ${target_configdirs} " | sed -e "s/ ${dir} / /"`
      if test -r $srcdir/$dirname/configure ; then
*************** fi
*** 1640,1645 ****
--- 2515,2529 ----
  # Quietly strip out all directories which aren't configurable in this tree.
  # This relies on all configurable subdirectories being autoconfiscated, which
  # is now the case.
+ build_configdirs_all="$build_configdirs"
+ build_configdirs=
+ for i in ${build_configdirs_all} ; do
+   j=`echo $i | sed -e s/build-//g` 
+   if test -f ${srcdir}/$j/configure ; then
+     build_configdirs="${build_configdirs} $i"
+   fi
+ done
+ 
  configdirs_all="$configdirs"
  configdirs=
  for i in ${configdirs_all} ; do
*************** for i in ${configdirs_all} ; do
*** 1647,1652 ****
--- 2531,2537 ----
      configdirs="${configdirs} $i"
    fi
  done
+ 
  target_configdirs_all="$target_configdirs"
  target_configdirs=
  for i in ${target_configdirs_all} ; do
*************** if test -n "${notsupp}" && test -z "${no
*** 1673,1679 ****
  	  appdirs=""
  	  break
  	fi
! 	if echo " ${target_configdirs} " | grep " ${dir} " >/dev/null 2>&1; then
  	  appdirs=""
  	  break
  	fi
--- 2558,2564 ----
  	  appdirs=""
  	  break
  	fi
! 	if echo " ${target_configdirs} " | grep " target-${dir} " >/dev/null 2>&1; then
  	  appdirs=""
  	  break
  	fi
*************** while test $# != 0 ; do
*** 1766,1935 ****
    shift; shift
  done
  
- # Work in distributions that contain no compiler tools, like Autoconf.
- tentative_cc=""
- host_makefile_frag=/dev/null
- if test -d ${srcdir}/config ; then
- case "${host}" in
-   m68k-hp-hpux*)
-     # Avoid "too much defining" errors from HPUX compiler.
-     tentative_cc="cc -Wp,-H256000"
-     # If "ar" in $PATH is GNU ar, the symbol table may need rebuilding.
-     # If it's HP/UX ar, this should be harmless.
-     RANLIB="ar ts"
-     ;;
-   m68k-apollo-sysv*)
-     tentative_cc="cc -A ansi -A runtype,any -A systype,any -U__STDC__ -DUSG"
-     ;;
-   m68k-apollo-bsd*)
-     #None of the Apollo compilers can compile gas or binutils.  The preprocessor
-     # chokes on bfd, the compiler won't let you assign integers to enums, and
-     # other problems.  Defining CC to gcc is a questionable way to say "don't use
-     # the apollo compiler" (the preferred version of GCC could be called cc,
-     # or whatever), but I'm not sure leaving CC as cc is any better...
-     #CC=cc -A ansi -A runtype,any -A systype,any -U__STDC__ -DNO_STDARG
-     # Used to have BISON=yacc.
-     tentative_cc=gcc
-     ;;
-   m88k-dg-dgux*)
-     tentative_cc="gcc -Wall -ansi -D__using_DGUX"
-     ;;
-   m88k-harris-cxux*)
-     # Under CX/UX, we want to tell the compiler to use ANSI mode.
-     tentative_cc="cc -Xa"
-     host_makefile_frag="config/mh-cxux"
-     ;;
-   m88k-motorola-sysv*)
-     ;;
-   mips*-dec-ultrix*)
-     tentative_cc="cc -Wf,-XNg1000"
-     host_makefile_frag="config/mh-decstation"
-     ;;
-   mips*-nec-sysv4*)
-     # The C compiler on NEC MIPS SVR4 needs bigger tables.
-     tentative_cc="cc -ZXNd=5000 -ZXNg=1000"
-     host_makefile_frag="config/mh-necv4"
-     ;;
-   mips*-sgi-irix4*)
-     # Tell compiler to use K&R C.  We can't compile under the SGI Ansi
-     # environment.  Also bump switch table size so that cp-parse will
-     # compile.  Bump string length limit so linker builds.
-     tentative_cc="cc -cckr -Wf,-XNg1500 -Wf,-XNk1000 -Wf,-XNh2000 -Wf,-XNl8192"
-     ;;
-   mips*-*-sysv4*)
-     host_makefile_frag="config/mh-sysv4"
-     ;;
-   mips*-*-sysv*)
-     # This is for a MIPS running RISC/os 4.52C.
- 
-     # This is needed for GDB, but needs to be in the top-level make because
-     # if a library is compiled with the bsd headers and gets linked with the
-     # sysv system libraries all hell can break loose (e.g. a jmp_buf might be
-     # a different size).
-     # ptrace(2) apparently has problems in the BSD environment.  No workaround is
-     # known except to select the sysv environment.  Could we use /proc instead?
-     # These "sysv environments" and "bsd environments" often end up being a pain.
-     #
-     # This is not part of CFLAGS because perhaps not all C compilers have this
-     # option.
-     tentative_cc="cc -systype sysv"
-     ;;
-   i370-ibm-opened*)
-     tentative_cc="c89"
-     ;;
-   i[3456789]86-*-sysv5*)
-     host_makefile_frag="config/mh-sysv5"
-     ;;
-   i[3456789]86-*-dgux*)
-     tentative_cc="gcc -Wall -ansi -D__using_DGUX"
-     host_makefile_frag="config/mh-dgux386"
-     ;;
-   i[3456789]86-ncr-sysv4.3*)
-     # The MetaWare compiler will generate a copyright message unless you
-     # turn it off by adding the -Hnocopyr flag.
-     tentative_cc="cc -Hnocopyr"
-     ;;
-   i[3456789]86-ncr-sysv4*)
-     # for an NCR 3000 (i486/SVR4) system.
-     # The NCR 3000 ships with a MetaWare compiler installed as /bin/cc.
-     # This compiler not only emits obnoxious copyright messages every time
-     # you run it, but it chokes and dies on a whole bunch of GNU source
-     # files.  Default to using the AT&T compiler installed in /usr/ccs/ATT/cc.
-     tentative_cc="/usr/ccs/ATT/cc"
-     host_makefile_frag="config/mh-ncr3000"
-     ;;
-   i[3456789]86-*-sco3.2v5*)
-     ;;
-   i[3456789]86-*-sco*)
-     # The native C compiler botches some simple uses of const.  Unfortunately,
-     # it doesn't defined anything like "__sco__" for us to test for in ansidecl.h.
-     tentative_cc="cc -Dconst="
-     host_makefile_frag="config/mh-sco"
-     ;;
-   i[3456789]86-*-udk*)
-     host_makefile_frag="config/mh-sysv5"
-     ;;
-   i[3456789]86-*-solaris2*)
-     host_makefile_frag="config/mh-sysv4"
-     ;;
-   i[3456789]86-*-msdosdjgpp*)
-     host_makefile_frag="config/mh-djgpp"
-     ;;
-   *-cygwin*)
-     host_makefile_frag="config/mh-cygwin"
-     ;;
-   *-mingw32*)
-     host_makefile_frag="config/mh-mingw32"
-     ;;
-   *-interix*)
-     host_makefile_frag="config/mh-interix"
-     ;;
-   vax-*-ultrix2*)
-     # The old BSD pcc isn't up to compiling parts of gdb so use gcc
-     tentative_cc=gcc
-     ;;
-   *-*-solaris2*)
-     host_makefile_frag="config/mh-solaris"
-     ;;
-   m68k-sun-sunos*)
-     # Sun's C compiler needs the -J flag to be able to compile cp-parse.c
-     # without overflowing the jump tables (-J says to use a 32 bit table)
-     tentative_cc="cc -J"
-     ;;
-   *-hp-hpux*)
-     tentative_cc="cc -Wp,-H256000"
-     ;;
-   *-*-hiux*)
-     tentative_cc="cc -Wp,-H256000"
-     ;;
-   rs6000-*-lynxos*)
-     # /bin/cc is less than useful for our purposes.  Always use GCC
-     tentative_cc="/usr/cygnus/progressive/bin/gcc"
-     host_makefile_frag="config/mh-lynxrs6k"
-     ;;
-   *-*-lynxos*)
-     # /bin/cc is less than useful for our purposes.  Always use GCC
-     tentative_cc="/bin/gcc"
-     ;;
-   *-*-sysv4*)
-     host_makefile_frag="config/mh-sysv4"
-     ;;
- esac
- fi
- 
  extra_arflags_for_target=
  extra_nmflags_for_target=
  extra_ranlibflags_for_target=
  target_makefile_frag=/dev/null
  case "${target}" in
!   i[3456789]86-*-netware*)
!     target_makefile_frag="config/mt-netware"
!     ;;
!   powerpc-*-netware*)
      target_makefile_frag="config/mt-netware"
      ;;
!   *-*-linux*)
!     target_makefile_frag="config/mt-linux"
      ;;
    *-*-aix4.[3456789]* | *-*-aix[56789].*)
      # nm and ar from AIX 4.3 and above require -X32_64 flag to all ar and nm 
--- 2651,2666 ----
    shift; shift
  done
  
  extra_arflags_for_target=
  extra_nmflags_for_target=
  extra_ranlibflags_for_target=
  target_makefile_frag=/dev/null
  case "${target}" in
!   *-*-netware*)
      target_makefile_frag="config/mt-netware"
      ;;
!   *-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu)
!     target_makefile_frag="config/mt-gnu"
      ;;
    *-*-aix4.[3456789]* | *-*-aix[56789].*)
      # nm and ar from AIX 4.3 and above require -X32_64 flag to all ar and nm 
*************** if test x${with_newlib} != xno && echo "
*** 2010,2016 ****
    extra_host_args="$extra_host_args --with-newlib"
  fi
  
- 
  # Default to using --with-stabs for certain targets.
  if test x${with_stabs} = x ; then
    case "${target}" in
--- 2741,2746 ----
*************** case "${host}" in
*** 2031,2311 ****
      ;;
  esac
  
- # If we aren't going to be using gcc, see if we can extract a definition
- # of CC from the fragment.
- # Actually, use the 'pre-extracted' version above.
- if test -z "${CC}" && test "${build}" = "${host}" ; then
-   IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}:"
-   found=
-   for dir in $PATH; do
-     test -z "$dir" && dir=.
-     if test -f $dir/gcc; then
-       found=yes
-       break
-     fi
-   done
-   IFS="$save_ifs"
-   if test -z "${found}" && test -n "${tentative_cc}" ; then
-     CC=$tentative_cc
-   fi
- fi
- 
  # Some systems (e.g., one of the i386-aix systems the gas testers are
  # using) don't handle "\$" correctly, so don't use it here.
  tooldir='${exec_prefix}'/${target_alias}
  build_tooldir=${tooldir}
  
! # Generate a default definition for YACC.  This is used if the makefile can't
! # locate bison or byacc in objdir.
! 
! for prog in 'bison -y' byacc yacc
  do
!   set dummy $prog; tmp=$2
!   IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}:"
!   for dir in $PATH; do
!     test -z "$dir" && dir=.
!     if test -f $dir/$tmp; then
!       DEFAULT_YACC="$prog"
        break
      fi
    done
!   IFS="$save_ifs"
  
!   test -n "$DEFAULT_YACC" && break
  done
  
! # Generate a default definition for M4.  This is used if the makefile can't
! # locate m4 in objdir.
! 
! for prog in gm4 gnum4 m4
  do
!   set dummy $prog; tmp=$2
!   IFS="${IFS=   }"; save_ifs="$IFS"; IFS="${IFS}:"
!   for dir in $PATH; do
!     test -z "$dir" && dir=.
!     if test -f $dir/$tmp; then
!       DEFAULT_M4="$prog"
        break
      fi
    done
!   IFS="$save_ifs"
  
!   test -n "$DEFAULT_M4" && break
  done
  
! # Generate a default definition for LEX.  This is used if the makefile can't
! # locate flex in objdir.
! 
! for prog in flex lex
  do
!   set dummy $prog; tmp=$2
!   IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}:"
!   for dir in $PATH; do
!     test -z "$dir" && dir=.
!     if test -f $dir/$tmp; then
!       DEFAULT_LEX="$prog"
        break
      fi
    done
!   IFS="$save_ifs"
  
!   test -n "$DEFAULT_LEX" && break
  done
  
! if test "${build}" != "${host}" ; then
!   # If we are doing a Canadian Cross, in which the host and build systems
!   # are not the same, we set reasonable default values for the tools.
! 
!   BISON=${BISON-bison}
!   CC=${CC-${host_alias}-gcc}
!   CFLAGS=${CFLAGS-"-g -O2"}
!   CXX=${CXX-${host_alias}-c++}
!   CXXFLAGS=${CXXFLAGS-"-g -O2"}
!   CC_FOR_BUILD=${CC_FOR_BUILD-gcc}
!   CC_FOR_TARGET=${CC_FOR_TARGET-${target_alias}-gcc}
!   CXX_FOR_TARGET=${CXX_FOR_TARGET-${target_alias}-c++}
!   GCJ_FOR_TARGET=${GCJ_FOR_TARGET-${target_alias}-gcj}
!   GCC_FOR_TARGET=${GCC_FOR_TARGET-${CC_FOR_TARGET-${target_alias}-gcc}}
!   BUILD_PREFIX=${build_alias}-
!   BUILD_PREFIX_1=${build_alias}-
!   MAKEINFO=${MAKEINFO-makeinfo}
! 
!   if test -z "${YACC}" ; then
!     IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}:"
!     for dir in $PATH; do
!       test -z "$dir" && dir=.
!       if test -f $dir/bison; then
! 	YACC="bison -y"
! 	break
!       fi
!       if test -f $dir/byacc; then
! 	YACC=byacc
! 	break
!       fi
!       if test -f $dir/yacc; then
! 	YACC=yacc
! 	break
!       fi
!     done
!     IFS="$save_ifs"
!     if test -z "${YACC}" ; then
!       YACC="bison -y"
      fi
!   fi
! 
!   if test -z "${LEX}" ; then
!     IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}:"
!     for dir in $PATH; do
!       test -z "$dir" && dir=.
!       if test -f $dir/flex; then
! 	LEX=flex
! 	break
!       fi
!       if test -f $dir/lex; then
! 	LEX=lex
! 	break
!       fi
!     done
!     IFS="$save_ifs"
!     LEX=${LEX-flex}
!   fi
! 
  else
!   # Set reasonable default values for some tools even if not Canadian.
!   # Of course, these are different reasonable default values, originally
!   # specified directly in the Makefile.
!   # We don't export, so that autoconf can do its job.
!   # Note that all these settings are above the fragment inclusion point
!   # in Makefile.in, so can still be overridden by fragments.
!   # This is all going to change when we autoconfiscate...
! 
!   BISON="\$(USUAL_BISON)"
!   CC_FOR_BUILD="\$(CC)"
!   GCC_FOR_TARGET="\$(USUAL_GCC_FOR_TARGET)"
!   BUILD_PREFIX=
!   BUILD_PREFIX_1=loser-
!   MAKEINFO="\$(USUAL_MAKEINFO)"
!   LEX="\$(USUAL_LEX)"
!   YACC="\$(USUAL_YACC)"
  
!   # If CC is still not set, try to get gcc.
!   cc_prog_is_gcc=
!   if test -z "${CC}" ; then
!     IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}:"
!     for dir in $PATH; do
!       test -z "$dir" && dir=.
!       if test -f $dir/gcc; then
! 	CC="gcc"
! 	cc_prog_is_gcc=yes
! 	echo 'void f(){}' > conftest.c
! 	if test -z "`${CC} -g -c conftest.c 2>&1`"; then
! 	  CFLAGS=${CFLAGS-"-g -O2"}
! 	  CXXFLAGS=${CXXFLAGS-"-g -O2"}
! 	else
! 	  CFLAGS=${CFLAGS-"-O2"}
! 	  CXXFLAGS=${CXXFLAGS-"-O2"}
! 	fi
! 	rm -f conftest*
! 	break
!       fi
!     done
!     IFS="$save_ifs"
!     CC=${CC-cc}
!   else
!     # Determine if we are using gcc.
!     cat > conftest.c <<EOF
! #ifdef __GNUC__
!   yes;
! #endif
! EOF
!     if ${CC} -E conftest.c | grep yes >/dev/null 2>&1; then
!       cc_prog_is_gcc=yes
!     fi
!     rm -f conftest.c
!     if test -z "${CFLAGS}"; then
!       # Here CC is set but CFLAGS is not.  Use a quick hack to use -O2 if CC
!       # is set to a version of gcc.
!       if test "$cc_prog_is_gcc" = yes; then
! 	echo 'void f(){}' > conftest.c
! 	if test -z "`${CC} -g -c conftest.c 2>&1`"; then
! 	  CFLAGS=${CFLAGS-"-g -O2"}
! 	  CXXFLAGS=${CXXFLAGS-"-g -O2"}
! 	else
! 	  CFLAGS=${CFLAGS-"-O2"}
! 	  CXXFLAGS=${CXXFLAGS-"-O2"}
! 	fi
! 	rm -f conftest*
!       fi
!     fi
!   fi
  
!   # We must set the default linker to the linker used by gcc for the correct
!   # operation of libtool.  If LD is not defined and we are using gcc, try to
!   # set the LD default to the ld used by gcc.
!   if test -z "$LD"; then
!     if test "$cc_prog_is_gcc" = yes; then
!       case $build in
!       *-*-mingw*)
! 	gcc_prog_ld=`$CC -print-prog-name=ld 2>&1 | tr -d '\015'` ;;
!       *)
! 	gcc_prog_ld=`$CC -print-prog-name=ld 2>&1` ;;
!       esac
!       case $gcc_prog_ld in
!       # Accept absolute paths.
!       [\\/]* | [A-Za-z]:[\\/]*)
!         LD="$gcc_prog_ld" ;;
!       esac
      fi
!   fi
! 
!   CXX=${CXX-"c++"}
!   CFLAGS=${CFLAGS-"-g"}
!   CXXFLAGS=${CXXFLAGS-"-g -O2"}
  fi
- 
- # FIXME Should this be done recursively ??? (Useful for e.g. gdbtest)
- # Set up the list of links to be made.
- # ${links} is the list of link names, and ${files} is the list of names to link to.
- 
- # Make the links.
- configlinks="${links}"
- if test -r ./config.status  ; then
-   mv -f ./config.status ./config.back
  fi
! while test -n "${files}" ; do
!   # set file to car of files, files to cdr of files
!   set ${files}; file=$1; shift; files=$*
!   set ${links}; link=$1; shift; links=$*
  
!   if test ! -r ${srcdir}/${file} ; then
!     if test ! -r ${file} ; then
!       echo '***' "${progname}: cannot create a link \"${link}\"," 1>&2
!       echo '***' "since the file \"${srcdir}/${file}\" does not exist." 1>&2
!       exit 1
!     else
!       srcfile=${file}
!     fi
!   else
!     srcfile=${srcdir}/${file}
!   fi
  
!   ${remove} -f ${link}
!   # Make a symlink if possible, otherwise try a hard link
!   if ${symbolic_link} ${srcfile} ${link} >/dev/null 2>&1 ; then
!     true
!   else
!     # We need to re-remove the file because Lynx leaves a 
!     # very strange directory there when it fails an NFS symlink.
!     ${remove} -r -f ${link}
!     ${hard_link} ${srcfile} ${link}
!   fi
!   if test ! -r ${link} ; then
!     echo '***' "${progname}: unable to link \"${link}\" to \"${srcfile}\"." 1>&2
!     exit 1
!   fi
  
!   echo "Linked \"${link}\" to \"${srcfile}\"."
  done
  
  # Create a .gdbinit file which runs the one in srcdir
  # and tells GDB to look there for source files.
--- 2761,2985 ----
      ;;
  esac
  
  # Some systems (e.g., one of the i386-aix systems the gas testers are
  # using) don't handle "\$" correctly, so don't use it here.
  tooldir='${exec_prefix}'/${target_alias}
  build_tooldir=${tooldir}
  
! # Generate default definitions for YACC, M4, LEX and other programs that run
! # on the build machine.  These are used if the Makefile can't locate these
! # programs in objdir.
! MISSING=`cd $ac_aux_dir && ${PWDCMD-pwd}`/missing
! for ac_prog in bison
  do
! # Extract the first word of "$ac_prog", so it can be a program name with args.
! set dummy $ac_prog; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:2779: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_BISON'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
! else
!   if test -n "$CONFIGURED_BISON"; then
!   ac_cv_prog_CONFIGURED_BISON="$CONFIGURED_BISON" # Let the user override the test.
! else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_CONFIGURED_BISON="$ac_prog"
        break
      fi
    done
!   IFS="$ac_save_ifs"
! fi
! fi
! CONFIGURED_BISON="$ac_cv_prog_CONFIGURED_BISON"
! if test -n "$CONFIGURED_BISON"; then
!   echo "$ac_t""$CONFIGURED_BISON" 1>&6
! else
!   echo "$ac_t""no" 1>&6
! fi
  
! test -n "$CONFIGURED_BISON" && break
  done
+ test -n "$CONFIGURED_BISON" || CONFIGURED_BISON="$MISSING bison"
  
! for ac_prog in 'bison -y' byacc yacc
  do
! # Extract the first word of "$ac_prog", so it can be a program name with args.
! set dummy $ac_prog; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:2814: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_YACC'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
! else
!   if test -n "$CONFIGURED_YACC"; then
!   ac_cv_prog_CONFIGURED_YACC="$CONFIGURED_YACC" # Let the user override the test.
! else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_CONFIGURED_YACC="$ac_prog"
        break
      fi
    done
!   IFS="$ac_save_ifs"
! fi
! fi
! CONFIGURED_YACC="$ac_cv_prog_CONFIGURED_YACC"
! if test -n "$CONFIGURED_YACC"; then
!   echo "$ac_t""$CONFIGURED_YACC" 1>&6
! else
!   echo "$ac_t""no" 1>&6
! fi
  
! test -n "$CONFIGURED_YACC" && break
  done
+ test -n "$CONFIGURED_YACC" || CONFIGURED_YACC="$MISSING bison -y"
  
! for ac_prog in gm4 gnum4 m4
  do
! # Extract the first word of "$ac_prog", so it can be a program name with args.
! set dummy $ac_prog; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:2849: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_M4'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
! else
!   if test -n "$CONFIGURED_M4"; then
!   ac_cv_prog_CONFIGURED_M4="$CONFIGURED_M4" # Let the user override the test.
! else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_CONFIGURED_M4="$ac_prog"
        break
      fi
    done
!   IFS="$ac_save_ifs"
! fi
! fi
! CONFIGURED_M4="$ac_cv_prog_CONFIGURED_M4"
! if test -n "$CONFIGURED_M4"; then
!   echo "$ac_t""$CONFIGURED_M4" 1>&6
! else
!   echo "$ac_t""no" 1>&6
! fi
  
! test -n "$CONFIGURED_M4" && break
  done
+ test -n "$CONFIGURED_M4" || CONFIGURED_M4="$MISSING m4"
  
! for ac_prog in flex
! do
! # Extract the first word of "$ac_prog", so it can be a program name with args.
! set dummy $ac_prog; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:2884: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_FLEX'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
! else
!   if test -n "$CONFIGURED_FLEX"; then
!   ac_cv_prog_CONFIGURED_FLEX="$CONFIGURED_FLEX" # Let the user override the test.
! else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_CONFIGURED_FLEX="$ac_prog"
!       break
      fi
!   done
!   IFS="$ac_save_ifs"
! fi
! fi
! CONFIGURED_FLEX="$ac_cv_prog_CONFIGURED_FLEX"
! if test -n "$CONFIGURED_FLEX"; then
!   echo "$ac_t""$CONFIGURED_FLEX" 1>&6
  else
!   echo "$ac_t""no" 1>&6
! fi
  
! test -n "$CONFIGURED_FLEX" && break
! done
! test -n "$CONFIGURED_FLEX" || CONFIGURED_FLEX="$MISSING flex"
  
! for ac_prog in flex lex
! do
! # Extract the first word of "$ac_prog", so it can be a program name with args.
! set dummy $ac_prog; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:2919: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_LEX'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
! else
!   if test -n "$CONFIGURED_LEX"; then
!   ac_cv_prog_CONFIGURED_LEX="$CONFIGURED_LEX" # Let the user override the test.
! else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_CONFIGURED_LEX="$ac_prog"
!       break
      fi
!   done
!   IFS="$ac_save_ifs"
  fi
  fi
! CONFIGURED_LEX="$ac_cv_prog_CONFIGURED_LEX"
! if test -n "$CONFIGURED_LEX"; then
!   echo "$ac_t""$CONFIGURED_LEX" 1>&6
! else
!   echo "$ac_t""no" 1>&6
! fi
  
! test -n "$CONFIGURED_LEX" && break
! done
! test -n "$CONFIGURED_LEX" || CONFIGURED_LEX="$MISSING flex"
  
! for ac_prog in makeinfo
! do
! # Extract the first word of "$ac_prog", so it can be a program name with args.
! set dummy $ac_prog; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:2954: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_MAKEINFO'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
! else
!   if test -n "$CONFIGURED_MAKEINFO"; then
!   ac_cv_prog_CONFIGURED_MAKEINFO="$CONFIGURED_MAKEINFO" # Let the user override the test.
! else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_CONFIGURED_MAKEINFO="$ac_prog"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
! fi
! fi
! CONFIGURED_MAKEINFO="$ac_cv_prog_CONFIGURED_MAKEINFO"
! if test -n "$CONFIGURED_MAKEINFO"; then
!   echo "$ac_t""$CONFIGURED_MAKEINFO" 1>&6
! else
!   echo "$ac_t""no" 1>&6
! fi
  
! test -n "$CONFIGURED_MAKEINFO" && break
  done
+ test -n "$CONFIGURED_MAKEINFO" || CONFIGURED_MAKEINFO="$MISSING makeinfo"
+ 
  
  # Create a .gdbinit file which runs the one in srcdir
  # and tells GDB to look there for source files.
*************** esac
*** 2397,2419 ****
  
  case "${host}" in
    *-*-hpux*) RPATH_ENVVAR=SHLIB_PATH ;;
    *) RPATH_ENVVAR=LD_LIBRARY_PATH ;;
  esac
  
  # Record target_configdirs and the configure arguments for target and
  # build configuration in Makefile.
  target_configdirs=`echo "${target_configdirs}" | sed -e 's/target-//g'`
! 
! # This is the final value for target_configdirs.  configdirs already
! # has its final value, as does build_modules.  It's time to create some 
! # lists of valid targets.
! 
! all_build_modules=
! configure_build_modules=
! for module in ${build_modules} ; do
!   all_build_modules=all-build-${module}
!   configure_build_modules=configure-build-${module}
! done
  
  # Determine whether gdb needs tk/tcl or not.
  # Use 'maybe' since enable_gdbtk might be true even if tk isn't available
--- 3071,3084 ----
  
  case "${host}" in
    *-*-hpux*) RPATH_ENVVAR=SHLIB_PATH ;;
+   *-*-darwin* | *-*-rhapsody* ) RPATH_ENVVAR=DYLD_LIBRARY_PATH ;;
    *) RPATH_ENVVAR=LD_LIBRARY_PATH ;;
  esac
  
  # Record target_configdirs and the configure arguments for target and
  # build configuration in Makefile.
  target_configdirs=`echo "${target_configdirs}" | sed -e 's/target-//g'`
! build_configdirs=`echo "${build_configdirs}" | sed -e 's/build-//g'`
  
  # Determine whether gdb needs tk/tcl or not.
  # Use 'maybe' since enable_gdbtk might be true even if tk isn't available
*************** done
*** 2423,2429 ****
  # leave out the maybe dependencies when enable_gdbtk is false.  I'm not
  # 100% sure that that's safe though.
  
! gdb_tk="maybe-all-tcl maybe-all-tk maybe-all-itcl maybe-all-tix maybe-all-libgui"
  case "$enable_gdbtk" in
    no)
      GDB_TK="" ;;
--- 3088,3094 ----
  # leave out the maybe dependencies when enable_gdbtk is false.  I'm not
  # 100% sure that that's safe though.
  
! gdb_tk="maybe-all-tcl maybe-all-tk maybe-all-itcl maybe-all-libgui"
  case "$enable_gdbtk" in
    no)
      GDB_TK="" ;;
*************** case "$enable_gdbtk" in
*** 2441,2471 ****
      ;;
  esac
  
! # Create the 'maybe dependencies'.  This uses a temporary file.
  
  # While at that, we remove Makefiles if we were started for recursive
  # configuration, so that the top-level Makefile reconfigures them,
  # like we used to do when configure itself was recursive.
- rm -f maybedep.tmp
- echo '# maybedep.tmp' > maybedep.tmp
  
! # Make-targets which may need maybe dependencies.
! mts="configure all install check clean distclean dvi info install-info"
! mts="${mts} installcheck mostlyclean maintainer-clean TAGS"
  
! # Loop over modules and make-targets.
! for module in ${build_modules} ; do
    if test -z "${no_recursion}" \
       && test -f ${build_subdir}/${module}/Makefile; then
      echo 1>&2 "*** removing ${build_subdir}/${module}/Makefile to force reconfigure"
      rm -f ${build_subdir}/${module}/Makefile
    fi
!   for mt in ${mts} ; do
!     case ${mt} in
!       install) ;; # No installing build modules.
!       *) echo "maybe-${mt}-build-${module}: ${mt}-build-${module}" >> maybedep.tmp ;;
!     esac
!   done
  done
  for module in ${configdirs} ; do
    if test -z "${no_recursion}" \
--- 3106,3199 ----
      ;;
  esac
  
! # Strip out unwanted targets.
  
  # While at that, we remove Makefiles if we were started for recursive
  # configuration, so that the top-level Makefile reconfigures them,
  # like we used to do when configure itself was recursive.
  
! # Loop over modules.  $extrasub must be used with care, limiting as
! # much as possible the usage of range addresses.  That's because autoconf
! # splits the sed script to overcome limits in the number of commands,
! # and relying on carefully-timed sed passes may turn out to be very hard
! # to maintain later.  In this particular case, you just have to be careful
! # not to nest @if/@endif pairs, because configure will not warn you at all.
  
! # Check whether --enable-bootstrap or --disable-bootstrap was given.
! if test "${enable_bootstrap+set}" = set; then
!   enableval="$enable_bootstrap"
!   :
! else
!   enable_bootstrap=default
! fi
! 
! 
! # Issue errors and warnings for invalid/strange bootstrap combinations.
! case "$configdirs" in
!   *gcc*) have_compiler=yes ;;
!   *) have_compiler=no ;;
! esac
! 
! case "$have_compiler:$host:$target:$enable_bootstrap" in
!   *:*:*:no) ;;
! 
!   # Default behavior.  (We'll) enable bootstrap if we have a compiler
!   # and we are in a native configuration.
!   yes:$build:$build:default)
!     # This will become 'yes'
!     enable_bootstrap=no ;;
! 
!   *:*:*:default)
!     enable_bootstrap=no ;;
! 
!   # We have a compiler and we are in a native configuration, bootstrap is ok
!   yes:$build:$build:yes | yes:$build:$build:lean)
!     ;;
! 
!   # Other configurations, but we have a compiler.  Assume the user knows
!   # what he's doing.
!   yes:*:*:yes | yes:*:*:lean)
!     echo "configure: warning: trying to bootstrap a cross compiler" 1>&2
!     ;;
! 
!   # No compiler: if they passed --enable-bootstrap explicitly, fail
!   no:*:*:yes | no:*:*:lean)
!     { echo "configure: error: cannot bootstrap without a compiler" 1>&2; exit 1; } ;;
! 
!   # Fail if wrong command line
!   *)
!     { echo "configure: error: invalid option for --enable-bootstrap" 1>&2; exit 1; }
!     ;;
! esac
! 
! # Adjust the toplevel makefile according to whether bootstrap was selected.
! case "$enable_bootstrap" in
!   yes)
!     bootstrap_lean='#'
!     default_target=bootstrap
!     bootstrap_suffix=bootstrap ;;
!   lean)
!     bootstrap_lean=''
!     default_target=bootstrap
!     bootstrap_suffix=bootstrap ;;
!   no)
!     default_target=all
!     bootstrap_suffix=no-bootstrap ;;
! esac
! 
! 
! 
! for module in ${build_configdirs} ; do
    if test -z "${no_recursion}" \
       && test -f ${build_subdir}/${module}/Makefile; then
      echo 1>&2 "*** removing ${build_subdir}/${module}/Makefile to force reconfigure"
      rm -f ${build_subdir}/${module}/Makefile
    fi
!   extrasub="$extrasub
! /^@if build-$module\$/d
! /^@endif build-$module\$/d
! /^@if build-$module-$bootstrap_suffix\$/d
! /^@endif build-$module-$bootstrap_suffix\$/d"
  done
  for module in ${configdirs} ; do
    if test -z "${no_recursion}" \
*************** for module in ${configdirs} ; do
*** 2473,2481 ****
      echo 1>&2 "*** removing ${module}/Makefile to force reconfigure"
      rm -f ${module}/Makefile
    fi
!   for mt in ${mts} ; do
!     echo "maybe-${mt}-${module}: ${mt}-${module}" >> maybedep.tmp
!   done
  done
  for module in ${target_configdirs} ; do
    if test -z "${no_recursion}" \
--- 3201,3211 ----
      echo 1>&2 "*** removing ${module}/Makefile to force reconfigure"
      rm -f ${module}/Makefile
    fi
!   extrasub="$extrasub
! /^@if $module\$/d
! /^@endif $module\$/d
! /^@if $module-$bootstrap_suffix\$/d
! /^@endif $module-$bootstrap_suffix\$/d"
  done
  for module in ${target_configdirs} ; do
    if test -z "${no_recursion}" \
*************** for module in ${target_configdirs} ; do
*** 2483,2494 ****
      echo 1>&2 "*** removing ${target_subdir}/${module}/Makefile to force reconfigure"
      rm -f ${target_subdir}/${module}/Makefile
    fi
!   for mt in ${mts} ; do
!     echo "maybe-${mt}-target-${module}: ${mt}-target-${module}" >> maybedep.tmp
!   done
  done
- maybe_dependencies=maybedep.tmp
  
  
  # Create the serialization dependencies.  This uses a temporary file.
  
--- 3213,3227 ----
      echo 1>&2 "*** removing ${target_subdir}/${module}/Makefile to force reconfigure"
      rm -f ${target_subdir}/${module}/Makefile
    fi
!   extrasub="$extrasub
! /^@if target-$module\$/d
! /^@endif target-$module\$/d
! /^@if target-$module-$bootstrap_suffix\$/d
! /^@endif target-$module-$bootstrap_suffix\$/d"
  done
  
+ extrasub="$extrasub
+ /^@if /,/^@endif /d"
  
  # Create the serialization dependencies.  This uses a temporary file.
  
*************** baseargs="$baseargs --program-transform-
*** 2594,2600 ****
  # For the build-side libraries, we just need to pretend we're native,
  # and not use the same cache file.  Multilibs are neither needed nor
  # desired.
! build_configargs="--cache-file=../config.cache --build=${build_alias} --host=${build_alias} ${baseargs}"
  
  # For host modules, accept cache file option, or specification as blank.
  case "${cache_file}" in
--- 3327,3333 ----
  # For the build-side libraries, we just need to pretend we're native,
  # and not use the same cache file.  Multilibs are neither needed nor
  # desired.
! build_configargs="--cache-file=../config.cache --build=${build_alias} --host=${build_alias} --target=${target_alias} ${baseargs}"
  
  # For host modules, accept cache file option, or specification as blank.
  case "${cache_file}" in
*************** fi
*** 2645,2653 ****
  target_configargs="--cache-file=./config.cache --host=${target_alias} --build=${build_alias} ${target_configargs}"
  
  # provide a proper gxx_include_dir.
! # Note, if you change the default, make sure to fix both here and in
! # the gcc and libstdc++-v3 subdirectories.
! # Check whether --with-gxx-include-dir or --without-gxx-include-dir was given.
  case "${with_gxx_include_dir}" in
    yes)
      { echo "configure: error: --with-gxx-include-dir=[dir] requires a directory" 1>&2; exit 1; }
--- 3378,3384 ----
  target_configargs="--cache-file=./config.cache --host=${target_alias} --build=${build_alias} ${target_configargs}"
  
  # provide a proper gxx_include_dir.
! 
  case "${with_gxx_include_dir}" in
    yes)
      { echo "configure: error: --with-gxx-include-dir=[dir] requires a directory" 1>&2; exit 1; }
*************** case "${with_gxx_include_dir}" in
*** 2656,2667 ****
      case "${enable_version_specific_runtime_libs}" in
        yes) gxx_include_dir='${libsubdir}/include/c++' ;;
        *)
!         . ${srcdir}/config.if
!         gxx_include_dir='${prefix}/include/'${libstdcxx_incdir} ;;
      esac ;;
    *) gxx_include_dir=${with_gxx_include_dir} ;;
  esac
  
  FLAGS_FOR_TARGET=
  case " $target_configdirs " in
   *" newlib "*)
--- 3387,3401 ----
      case "${enable_version_specific_runtime_libs}" in
        yes) gxx_include_dir='${libsubdir}/include/c++' ;;
        *)
! 	libstdcxx_incdir=c++/${gcc_version}
! 	gxx_include_dir='${prefix}/include/'${libstdcxx_incdir} ;;
      esac ;;
    *) gxx_include_dir=${with_gxx_include_dir} ;;
  esac
  
+ 
+ 
+ 
  FLAGS_FOR_TARGET=
  case " $target_configdirs " in
   *" newlib "*)
*************** else
*** 2754,2759 ****
--- 3488,3507 ----
  fi
  GCJ_FOR_TARGET=$GCJ_FOR_TARGET' $(FLAGS_FOR_TARGET)'
  
+ if test "x${GFORTRAN_FOR_TARGET+set}" = xset; then
+   :
+ elif test -d ${srcdir}/gcc; then
+   GFORTRAN_FOR_TARGET='$$r/gcc/gfortran -B$$r/gcc/'
+ elif test "$host" = "$target"; then
+   GFORTRAN_FOR_TARGET='gfortran'
+ else
+   GFORTRAN_FOR_TARGET=`echo gfortran | sed "${program_transform_name}"`
+ fi
+ case $GFORTRAN_FOR_TARGET in
+ *' $(FLAGS_FOR_TARGET)') ;;
+ *) GFORTRAN_FOR_TARGET=$GFORTRAN_FOR_TARGET' $(FLAGS_FOR_TARGET)' ;;
+ esac
+ 
  # Don't use libstdc++-v3's flags to configure/build itself.
  libstdcxx_flags='`test ! -f $$r/$(TARGET_SUBDIR)/libstdc++-v3/scripts/testsuite_flags || $(SHELL) $$r/$(TARGET_SUBDIR)/libstdc++-v3/scripts/testsuite_flags --build-includes` -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src/.libs'
  raw_libstdcxx_flags='-L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src/.libs'
*************** qqRAW_CXX_FOR_TARGET=`echo "$qRAW_CXX_FO
*** 2795,2810 ****
  # Wrap CC_FOR_TARGET and friends, for certain types of builds.
  CC_FOR_TARGET="\$(STAGE_CC_WRAPPER) ${CC_FOR_TARGET}"
  GCJ_FOR_TARGET="\$(STAGE_CC_WRAPPER) ${GCJ_FOR_TARGET}"
  CXX_FOR_TARGET="\$(STAGE_CC_WRAPPER) ${qCXX_FOR_TARGET}"
  RAW_CXX_FOR_TARGET="\$(STAGE_CC_WRAPPER) ${qRAW_CXX_FOR_TARGET}"
  CXX_FOR_TARGET_FOR_RECURSIVE_MAKE="\$(STAGE_CC_WRAPPER) ${qqCXX_FOR_TARGET}"
  RAW_CXX_FOR_TARGET_FOR_RECURSIVE_MAKE="\$(STAGE_CC_WRAPPER) ${qqRAW_CXX_FOR_TARGET}"
  
  # Makefile fragments.
! host_makefile_frag=${srcdir}/${host_makefile_frag}
! target_makefile_frag=${srcdir}/${target_makefile_frag}
! alphaieee_frag=${srcdir}/${alphaieee_frag}
! ospace_frag=${srcdir}/${ospace_frag}
  
  
  
--- 3543,3562 ----
  # Wrap CC_FOR_TARGET and friends, for certain types of builds.
  CC_FOR_TARGET="\$(STAGE_CC_WRAPPER) ${CC_FOR_TARGET}"
  GCJ_FOR_TARGET="\$(STAGE_CC_WRAPPER) ${GCJ_FOR_TARGET}"
+ GFORTRAN_FOR_TARGET="\$(STAGE_CC_WRAPPER) ${GFORTRAN_FOR_TARGET}"
  CXX_FOR_TARGET="\$(STAGE_CC_WRAPPER) ${qCXX_FOR_TARGET}"
  RAW_CXX_FOR_TARGET="\$(STAGE_CC_WRAPPER) ${qRAW_CXX_FOR_TARGET}"
  CXX_FOR_TARGET_FOR_RECURSIVE_MAKE="\$(STAGE_CC_WRAPPER) ${qqCXX_FOR_TARGET}"
  RAW_CXX_FOR_TARGET_FOR_RECURSIVE_MAKE="\$(STAGE_CC_WRAPPER) ${qqRAW_CXX_FOR_TARGET}"
  
  # Makefile fragments.
! for frag in host_makefile_frag target_makefile_frag alphaieee_frag ospace_frag;
! do
!   eval fragval=\$$frag
!   if test $fragval != /dev/null; then
!     eval $frag=${srcdir}/$fragval
!   fi
! done
  
  
  
*************** ospace_frag=${srcdir}/${ospace_frag}
*** 2819,2834 ****
  
  
  
- 
- 
- 
- 
- 
  # Build module lists & subconfigure args.
  
  
  
- 
  # Host module lists & subconfigure args.
  
  
--- 3571,3580 ----
*************** ospace_frag=${srcdir}/${ospace_frag}
*** 2841,2850 ****
  
  
  
- 
- 
- 
- 
  # Host tools.
  ncn_tool_prefix=
  test -n "$host_alias" && ncn_tool_prefix=$host_alias-
--- 3587,3592 ----
*************** test -n "$target_alias" && ncn_target_to
*** 2855,2861 ****
    # Extract the first word of "${ncn_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ncn_tool_prefix}ar; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:2859: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
--- 3597,3603 ----
    # Extract the first word of "${ncn_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ncn_tool_prefix}ar; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3601: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
*************** if test -z "$ac_cv_prog_AR" ; then
*** 2888,2894 ****
      # Extract the first word of "ar", so it can be a program name with args.
  set dummy ar; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:2892: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_AR'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
--- 3630,3636 ----
      # Extract the first word of "ar", so it can be a program name with args.
  set dummy ar; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3634: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_AR'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
*************** fi
*** 2927,2933 ****
    # Extract the first word of "${ncn_tool_prefix}as", so it can be a program name with args.
  set dummy ${ncn_tool_prefix}as; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:2931: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
--- 3669,3675 ----
    # Extract the first word of "${ncn_tool_prefix}as", so it can be a program name with args.
  set dummy ${ncn_tool_prefix}as; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3673: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
*************** if test -z "$ac_cv_prog_AS" ; then
*** 2960,2966 ****
      # Extract the first word of "as", so it can be a program name with args.
  set dummy as; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:2964: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_AS'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
--- 3702,3708 ----
      # Extract the first word of "as", so it can be a program name with args.
  set dummy as; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3706: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_AS'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
*************** fi
*** 2999,3005 ****
    # Extract the first word of "${ncn_tool_prefix}dlltool", so it can be a program name with args.
  set dummy ${ncn_tool_prefix}dlltool; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3003: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
--- 3741,3747 ----
    # Extract the first word of "${ncn_tool_prefix}dlltool", so it can be a program name with args.
  set dummy ${ncn_tool_prefix}dlltool; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3745: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
*************** if test -z "$ac_cv_prog_DLLTOOL" ; then
*** 3032,3038 ****
      # Extract the first word of "dlltool", so it can be a program name with args.
  set dummy dlltool; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3036: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_DLLTOOL'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
--- 3774,3780 ----
      # Extract the first word of "dlltool", so it can be a program name with args.
  set dummy dlltool; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3778: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_DLLTOOL'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
*************** fi
*** 3071,3077 ****
    # Extract the first word of "${ncn_tool_prefix}ld", so it can be a program name with args.
  set dummy ${ncn_tool_prefix}ld; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3075: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_LD'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
--- 3813,3819 ----
    # Extract the first word of "${ncn_tool_prefix}ld", so it can be a program name with args.
  set dummy ${ncn_tool_prefix}ld; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3817: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_LD'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
*************** if test -z "$ac_cv_prog_LD" ; then
*** 3104,3110 ****
      # Extract the first word of "ld", so it can be a program name with args.
  set dummy ld; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3108: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_LD'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
--- 3846,3852 ----
      # Extract the first word of "ld", so it can be a program name with args.
  set dummy ld; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3850: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_LD'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
*************** fi
*** 3143,3149 ****
    # Extract the first word of "${ncn_tool_prefix}nm", so it can be a program name with args.
  set dummy ${ncn_tool_prefix}nm; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3147: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_NM'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
--- 3885,3891 ----
    # Extract the first word of "${ncn_tool_prefix}nm", so it can be a program name with args.
  set dummy ${ncn_tool_prefix}nm; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3889: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_NM'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
*************** if test -z "$ac_cv_prog_NM" ; then
*** 3176,3182 ****
      # Extract the first word of "nm", so it can be a program name with args.
  set dummy nm; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3180: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_NM'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
--- 3918,3924 ----
      # Extract the first word of "nm", so it can be a program name with args.
  set dummy nm; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3922: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_NM'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
*************** fi
*** 3215,3221 ****
    # Extract the first word of "${ncn_tool_prefix}ranlib", so it can be a program name with args.
  set dummy ${ncn_tool_prefix}ranlib; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3219: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
--- 3957,3963 ----
    # Extract the first word of "${ncn_tool_prefix}ranlib", so it can be a program name with args.
  set dummy ${ncn_tool_prefix}ranlib; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3961: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
*************** if test -z "$ac_cv_prog_RANLIB" ; then
*** 3248,3254 ****
      # Extract the first word of "ranlib", so it can be a program name with args.
  set dummy ranlib; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3252: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_RANLIB'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
--- 3990,3996 ----
      # Extract the first word of "ranlib", so it can be a program name with args.
  set dummy ranlib; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3994: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_RANLIB'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
*************** fi
*** 3287,3293 ****
    # Extract the first word of "${ncn_tool_prefix}windres", so it can be a program name with args.
  set dummy ${ncn_tool_prefix}windres; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3291: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_WINDRES'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
--- 4029,4035 ----
    # Extract the first word of "${ncn_tool_prefix}windres", so it can be a program name with args.
  set dummy ${ncn_tool_prefix}windres; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4033: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_WINDRES'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
*************** if test -z "$ac_cv_prog_WINDRES" ; then
*** 3320,3326 ****
      # Extract the first word of "windres", so it can be a program name with args.
  set dummy windres; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3324: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_WINDRES'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
--- 4062,4068 ----
      # Extract the first word of "windres", so it can be a program name with args.
  set dummy windres; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4066: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_WINDRES'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
*************** fi
*** 3359,3365 ****
    # Extract the first word of "${ncn_tool_prefix}objcopy", so it can be a program name with args.
  set dummy ${ncn_tool_prefix}objcopy; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3363: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_OBJCOPY'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
--- 4101,4107 ----
    # Extract the first word of "${ncn_tool_prefix}objcopy", so it can be a program name with args.
  set dummy ${ncn_tool_prefix}objcopy; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4105: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_OBJCOPY'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
*************** if test -z "$ac_cv_prog_OBJCOPY" ; then
*** 3392,3398 ****
      # Extract the first word of "objcopy", so it can be a program name with args.
  set dummy objcopy; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3396: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_OBJCOPY'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
--- 4134,4140 ----
      # Extract the first word of "objcopy", so it can be a program name with args.
  set dummy objcopy; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4138: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_OBJCOPY'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
*************** fi
*** 3431,3437 ****
    # Extract the first word of "${ncn_tool_prefix}objdump", so it can be a program name with args.
  set dummy ${ncn_tool_prefix}objdump; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3435: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_OBJDUMP'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
--- 4173,4179 ----
    # Extract the first word of "${ncn_tool_prefix}objdump", so it can be a program name with args.
  set dummy ${ncn_tool_prefix}objdump; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4177: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_OBJDUMP'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
*************** if test -z "$ac_cv_prog_OBJDUMP" ; then
*** 3464,3470 ****
      # Extract the first word of "objdump", so it can be a program name with args.
  set dummy objdump; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3468: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_OBJDUMP'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
--- 4206,4212 ----
      # Extract the first word of "objdump", so it can be a program name with args.
  set dummy objdump; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4210: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_OBJDUMP'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
*************** fi
*** 3505,4016 ****
  
  
  
- 
- 
- 
  # Target tools.
   if test -n "$ncn_target_tool_prefix"; then
    # Extract the first word of "${ncn_target_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ncn_target_tool_prefix}ar; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3517: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_AR_FOR_TARGET'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$AR_FOR_TARGET"; then
!   ac_cv_prog_AR_FOR_TARGET="$AR_FOR_TARGET" # Let the user override the test.
  else
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
    ac_dummy="$PATH"
    for ac_dir in $ac_dummy; do
      test -z "$ac_dir" && ac_dir=.
      if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_AR_FOR_TARGET="${ncn_target_tool_prefix}ar"
        break
      fi
    done
    IFS="$ac_save_ifs"
  fi
  fi
! AR_FOR_TARGET="$ac_cv_prog_AR_FOR_TARGET"
! if test -n "$AR_FOR_TARGET"; then
!   echo "$ac_t""$AR_FOR_TARGET" 1>&6
  else
    echo "$ac_t""no" 1>&6
  fi
  
  fi
! if test -z "$ac_cv_prog_AR_FOR_TARGET" ; then
    if test $build = $target ; then
!     ncn_cv_AR_FOR_TARGET=$AR_FOR_TARGET
      # Extract the first word of "ar", so it can be a program name with args.
  set dummy ar; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3550: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_AR_FOR_TARGET'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$ncn_cv_AR_FOR_TARGET"; then
!   ac_cv_prog_ncn_cv_AR_FOR_TARGET="$ncn_cv_AR_FOR_TARGET" # Let the user override the test.
  else
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
    ac_dummy="$PATH"
    for ac_dir in $ac_dummy; do
      test -z "$ac_dir" && ac_dir=.
      if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_ncn_cv_AR_FOR_TARGET="ar"
        break
      fi
    done
    IFS="$ac_save_ifs"
!   test -z "$ac_cv_prog_ncn_cv_AR_FOR_TARGET" && ac_cv_prog_ncn_cv_AR_FOR_TARGET="ar"
  fi
  fi
! ncn_cv_AR_FOR_TARGET="$ac_cv_prog_ncn_cv_AR_FOR_TARGET"
! if test -n "$ncn_cv_AR_FOR_TARGET"; then
!   echo "$ac_t""$ncn_cv_AR_FOR_TARGET" 1>&6
  else
    echo "$ac_t""no" 1>&6
  fi
   
!     AR_FOR_TARGET=$ncn_cv_AR_FOR_TARGET
    else
!     AR_FOR_TARGET="${ncn_target_tool_prefix}ar"
    fi
  else
!   AR_FOR_TARGET="$ac_cv_prog_AR_FOR_TARGET"
  fi
  
   if test -n "$ncn_target_tool_prefix"; then
    # Extract the first word of "${ncn_target_tool_prefix}as", so it can be a program name with args.
  set dummy ${ncn_target_tool_prefix}as; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3589: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_AS_FOR_TARGET'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$AS_FOR_TARGET"; then
!   ac_cv_prog_AS_FOR_TARGET="$AS_FOR_TARGET" # Let the user override the test.
  else
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
    ac_dummy="$PATH"
    for ac_dir in $ac_dummy; do
      test -z "$ac_dir" && ac_dir=.
      if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_AS_FOR_TARGET="${ncn_target_tool_prefix}as"
        break
      fi
    done
    IFS="$ac_save_ifs"
  fi
  fi
! AS_FOR_TARGET="$ac_cv_prog_AS_FOR_TARGET"
! if test -n "$AS_FOR_TARGET"; then
!   echo "$ac_t""$AS_FOR_TARGET" 1>&6
  else
    echo "$ac_t""no" 1>&6
  fi
  
  fi
! if test -z "$ac_cv_prog_AS_FOR_TARGET" ; then
    if test $build = $target ; then
!     ncn_cv_AS_FOR_TARGET=$AS_FOR_TARGET
      # Extract the first word of "as", so it can be a program name with args.
  set dummy as; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3622: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_AS_FOR_TARGET'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$ncn_cv_AS_FOR_TARGET"; then
!   ac_cv_prog_ncn_cv_AS_FOR_TARGET="$ncn_cv_AS_FOR_TARGET" # Let the user override the test.
  else
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
    ac_dummy="$PATH"
    for ac_dir in $ac_dummy; do
      test -z "$ac_dir" && ac_dir=.
      if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_ncn_cv_AS_FOR_TARGET="as"
        break
      fi
    done
    IFS="$ac_save_ifs"
!   test -z "$ac_cv_prog_ncn_cv_AS_FOR_TARGET" && ac_cv_prog_ncn_cv_AS_FOR_TARGET="as"
  fi
  fi
! ncn_cv_AS_FOR_TARGET="$ac_cv_prog_ncn_cv_AS_FOR_TARGET"
! if test -n "$ncn_cv_AS_FOR_TARGET"; then
!   echo "$ac_t""$ncn_cv_AS_FOR_TARGET" 1>&6
  else
    echo "$ac_t""no" 1>&6
  fi
   
!     AS_FOR_TARGET=$ncn_cv_AS_FOR_TARGET
    else
!     AS_FOR_TARGET="${ncn_target_tool_prefix}as"
    fi
  else
!   AS_FOR_TARGET="$ac_cv_prog_AS_FOR_TARGET"
  fi
  
   if test -n "$ncn_target_tool_prefix"; then
    # Extract the first word of "${ncn_target_tool_prefix}dlltool", so it can be a program name with args.
  set dummy ${ncn_target_tool_prefix}dlltool; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3661: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL_FOR_TARGET'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$DLLTOOL_FOR_TARGET"; then
!   ac_cv_prog_DLLTOOL_FOR_TARGET="$DLLTOOL_FOR_TARGET" # Let the user override the test.
  else
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
    ac_dummy="$PATH"
    for ac_dir in $ac_dummy; do
      test -z "$ac_dir" && ac_dir=.
      if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_DLLTOOL_FOR_TARGET="${ncn_target_tool_prefix}dlltool"
        break
      fi
    done
    IFS="$ac_save_ifs"
  fi
  fi
! DLLTOOL_FOR_TARGET="$ac_cv_prog_DLLTOOL_FOR_TARGET"
! if test -n "$DLLTOOL_FOR_TARGET"; then
!   echo "$ac_t""$DLLTOOL_FOR_TARGET" 1>&6
  else
    echo "$ac_t""no" 1>&6
  fi
  
  fi
! if test -z "$ac_cv_prog_DLLTOOL_FOR_TARGET" ; then
    if test $build = $target ; then
!     ncn_cv_DLLTOOL_FOR_TARGET=$DLLTOOL_FOR_TARGET
      # Extract the first word of "dlltool", so it can be a program name with args.
  set dummy dlltool; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3694: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_DLLTOOL_FOR_TARGET'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$ncn_cv_DLLTOOL_FOR_TARGET"; then
!   ac_cv_prog_ncn_cv_DLLTOOL_FOR_TARGET="$ncn_cv_DLLTOOL_FOR_TARGET" # Let the user override the test.
  else
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
    ac_dummy="$PATH"
    for ac_dir in $ac_dummy; do
      test -z "$ac_dir" && ac_dir=.
      if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_ncn_cv_DLLTOOL_FOR_TARGET="dlltool"
        break
      fi
    done
    IFS="$ac_save_ifs"
!   test -z "$ac_cv_prog_ncn_cv_DLLTOOL_FOR_TARGET" && ac_cv_prog_ncn_cv_DLLTOOL_FOR_TARGET="dlltool"
  fi
  fi
! ncn_cv_DLLTOOL_FOR_TARGET="$ac_cv_prog_ncn_cv_DLLTOOL_FOR_TARGET"
! if test -n "$ncn_cv_DLLTOOL_FOR_TARGET"; then
!   echo "$ac_t""$ncn_cv_DLLTOOL_FOR_TARGET" 1>&6
  else
    echo "$ac_t""no" 1>&6
  fi
   
!     DLLTOOL_FOR_TARGET=$ncn_cv_DLLTOOL_FOR_TARGET
    else
!     DLLTOOL_FOR_TARGET="${ncn_target_tool_prefix}dlltool"
    fi
  else
!   DLLTOOL_FOR_TARGET="$ac_cv_prog_DLLTOOL_FOR_TARGET"
  fi
  
   if test -n "$ncn_target_tool_prefix"; then
    # Extract the first word of "${ncn_target_tool_prefix}ld", so it can be a program name with args.
  set dummy ${ncn_target_tool_prefix}ld; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3733: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_LD_FOR_TARGET'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$LD_FOR_TARGET"; then
!   ac_cv_prog_LD_FOR_TARGET="$LD_FOR_TARGET" # Let the user override the test.
  else
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
    ac_dummy="$PATH"
    for ac_dir in $ac_dummy; do
      test -z "$ac_dir" && ac_dir=.
      if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_LD_FOR_TARGET="${ncn_target_tool_prefix}ld"
        break
      fi
    done
    IFS="$ac_save_ifs"
  fi
  fi
! LD_FOR_TARGET="$ac_cv_prog_LD_FOR_TARGET"
! if test -n "$LD_FOR_TARGET"; then
!   echo "$ac_t""$LD_FOR_TARGET" 1>&6
  else
    echo "$ac_t""no" 1>&6
  fi
  
  fi
! if test -z "$ac_cv_prog_LD_FOR_TARGET" ; then
    if test $build = $target ; then
!     ncn_cv_LD_FOR_TARGET=$LD_FOR_TARGET
      # Extract the first word of "ld", so it can be a program name with args.
  set dummy ld; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3766: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_LD_FOR_TARGET'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$ncn_cv_LD_FOR_TARGET"; then
!   ac_cv_prog_ncn_cv_LD_FOR_TARGET="$ncn_cv_LD_FOR_TARGET" # Let the user override the test.
  else
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
    ac_dummy="$PATH"
    for ac_dir in $ac_dummy; do
      test -z "$ac_dir" && ac_dir=.
      if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_ncn_cv_LD_FOR_TARGET="ld"
        break
      fi
    done
    IFS="$ac_save_ifs"
!   test -z "$ac_cv_prog_ncn_cv_LD_FOR_TARGET" && ac_cv_prog_ncn_cv_LD_FOR_TARGET="ld"
  fi
  fi
! ncn_cv_LD_FOR_TARGET="$ac_cv_prog_ncn_cv_LD_FOR_TARGET"
! if test -n "$ncn_cv_LD_FOR_TARGET"; then
!   echo "$ac_t""$ncn_cv_LD_FOR_TARGET" 1>&6
  else
    echo "$ac_t""no" 1>&6
  fi
   
!     LD_FOR_TARGET=$ncn_cv_LD_FOR_TARGET
    else
!     LD_FOR_TARGET="${ncn_target_tool_prefix}ld"
    fi
  else
!   LD_FOR_TARGET="$ac_cv_prog_LD_FOR_TARGET"
  fi
  
   if test -n "$ncn_target_tool_prefix"; then
    # Extract the first word of "${ncn_target_tool_prefix}nm", so it can be a program name with args.
  set dummy ${ncn_target_tool_prefix}nm; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3805: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_NM_FOR_TARGET'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$NM_FOR_TARGET"; then
!   ac_cv_prog_NM_FOR_TARGET="$NM_FOR_TARGET" # Let the user override the test.
  else
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
    ac_dummy="$PATH"
    for ac_dir in $ac_dummy; do
      test -z "$ac_dir" && ac_dir=.
      if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_NM_FOR_TARGET="${ncn_target_tool_prefix}nm"
        break
      fi
    done
    IFS="$ac_save_ifs"
  fi
  fi
! NM_FOR_TARGET="$ac_cv_prog_NM_FOR_TARGET"
! if test -n "$NM_FOR_TARGET"; then
!   echo "$ac_t""$NM_FOR_TARGET" 1>&6
  else
    echo "$ac_t""no" 1>&6
  fi
  
  fi
! if test -z "$ac_cv_prog_NM_FOR_TARGET" ; then
    if test $build = $target ; then
!     ncn_cv_NM_FOR_TARGET=$NM_FOR_TARGET
      # Extract the first word of "nm", so it can be a program name with args.
  set dummy nm; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3838: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_NM_FOR_TARGET'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$ncn_cv_NM_FOR_TARGET"; then
!   ac_cv_prog_ncn_cv_NM_FOR_TARGET="$ncn_cv_NM_FOR_TARGET" # Let the user override the test.
  else
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
    ac_dummy="$PATH"
    for ac_dir in $ac_dummy; do
      test -z "$ac_dir" && ac_dir=.
      if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_ncn_cv_NM_FOR_TARGET="nm"
        break
      fi
    done
    IFS="$ac_save_ifs"
!   test -z "$ac_cv_prog_ncn_cv_NM_FOR_TARGET" && ac_cv_prog_ncn_cv_NM_FOR_TARGET="nm"
  fi
  fi
! ncn_cv_NM_FOR_TARGET="$ac_cv_prog_ncn_cv_NM_FOR_TARGET"
! if test -n "$ncn_cv_NM_FOR_TARGET"; then
!   echo "$ac_t""$ncn_cv_NM_FOR_TARGET" 1>&6
  else
    echo "$ac_t""no" 1>&6
  fi
   
!     NM_FOR_TARGET=$ncn_cv_NM_FOR_TARGET
    else
!     NM_FOR_TARGET="${ncn_target_tool_prefix}nm"
    fi
  else
!   NM_FOR_TARGET="$ac_cv_prog_NM_FOR_TARGET"
  fi
  
   if test -n "$ncn_target_tool_prefix"; then
    # Extract the first word of "${ncn_target_tool_prefix}ranlib", so it can be a program name with args.
  set dummy ${ncn_target_tool_prefix}ranlib; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3877: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_RANLIB_FOR_TARGET'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$RANLIB_FOR_TARGET"; then
!   ac_cv_prog_RANLIB_FOR_TARGET="$RANLIB_FOR_TARGET" # Let the user override the test.
  else
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
    ac_dummy="$PATH"
    for ac_dir in $ac_dummy; do
      test -z "$ac_dir" && ac_dir=.
      if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_RANLIB_FOR_TARGET="${ncn_target_tool_prefix}ranlib"
        break
      fi
    done
    IFS="$ac_save_ifs"
  fi
  fi
! RANLIB_FOR_TARGET="$ac_cv_prog_RANLIB_FOR_TARGET"
! if test -n "$RANLIB_FOR_TARGET"; then
!   echo "$ac_t""$RANLIB_FOR_TARGET" 1>&6
  else
    echo "$ac_t""no" 1>&6
  fi
  
  fi
! if test -z "$ac_cv_prog_RANLIB_FOR_TARGET" ; then
    if test $build = $target ; then
!     ncn_cv_RANLIB_FOR_TARGET=$RANLIB_FOR_TARGET
      # Extract the first word of "ranlib", so it can be a program name with args.
  set dummy ranlib; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3910: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_RANLIB_FOR_TARGET'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$ncn_cv_RANLIB_FOR_TARGET"; then
!   ac_cv_prog_ncn_cv_RANLIB_FOR_TARGET="$ncn_cv_RANLIB_FOR_TARGET" # Let the user override the test.
  else
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
    ac_dummy="$PATH"
    for ac_dir in $ac_dummy; do
      test -z "$ac_dir" && ac_dir=.
      if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_ncn_cv_RANLIB_FOR_TARGET="ranlib"
        break
      fi
    done
    IFS="$ac_save_ifs"
!   test -z "$ac_cv_prog_ncn_cv_RANLIB_FOR_TARGET" && ac_cv_prog_ncn_cv_RANLIB_FOR_TARGET=":"
  fi
  fi
! ncn_cv_RANLIB_FOR_TARGET="$ac_cv_prog_ncn_cv_RANLIB_FOR_TARGET"
! if test -n "$ncn_cv_RANLIB_FOR_TARGET"; then
!   echo "$ac_t""$ncn_cv_RANLIB_FOR_TARGET" 1>&6
  else
    echo "$ac_t""no" 1>&6
  fi
   
!     RANLIB_FOR_TARGET=$ncn_cv_RANLIB_FOR_TARGET
    else
!     RANLIB_FOR_TARGET=":"
    fi
  else
!   RANLIB_FOR_TARGET="$ac_cv_prog_RANLIB_FOR_TARGET"
  fi
  
   if test -n "$ncn_target_tool_prefix"; then
    # Extract the first word of "${ncn_target_tool_prefix}windres", so it can be a program name with args.
  set dummy ${ncn_target_tool_prefix}windres; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3949: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_WINDRES_FOR_TARGET'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$WINDRES_FOR_TARGET"; then
!   ac_cv_prog_WINDRES_FOR_TARGET="$WINDRES_FOR_TARGET" # Let the user override the test.
  else
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
    ac_dummy="$PATH"
    for ac_dir in $ac_dummy; do
      test -z "$ac_dir" && ac_dir=.
      if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_WINDRES_FOR_TARGET="${ncn_target_tool_prefix}windres"
        break
      fi
    done
    IFS="$ac_save_ifs"
  fi
  fi
! WINDRES_FOR_TARGET="$ac_cv_prog_WINDRES_FOR_TARGET"
! if test -n "$WINDRES_FOR_TARGET"; then
!   echo "$ac_t""$WINDRES_FOR_TARGET" 1>&6
  else
    echo "$ac_t""no" 1>&6
  fi
  
  fi
! if test -z "$ac_cv_prog_WINDRES_FOR_TARGET" ; then
    if test $build = $target ; then
!     ncn_cv_WINDRES_FOR_TARGET=$WINDRES_FOR_TARGET
      # Extract the first word of "windres", so it can be a program name with args.
  set dummy windres; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3982: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_WINDRES_FOR_TARGET'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$ncn_cv_WINDRES_FOR_TARGET"; then
!   ac_cv_prog_ncn_cv_WINDRES_FOR_TARGET="$ncn_cv_WINDRES_FOR_TARGET" # Let the user override the test.
  else
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
    ac_dummy="$PATH"
    for ac_dir in $ac_dummy; do
      test -z "$ac_dir" && ac_dir=.
      if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_ncn_cv_WINDRES_FOR_TARGET="windres"
        break
      fi
    done
    IFS="$ac_save_ifs"
!   test -z "$ac_cv_prog_ncn_cv_WINDRES_FOR_TARGET" && ac_cv_prog_ncn_cv_WINDRES_FOR_TARGET="windres"
  fi
  fi
! ncn_cv_WINDRES_FOR_TARGET="$ac_cv_prog_ncn_cv_WINDRES_FOR_TARGET"
! if test -n "$ncn_cv_WINDRES_FOR_TARGET"; then
!   echo "$ac_t""$ncn_cv_WINDRES_FOR_TARGET" 1>&6
  else
    echo "$ac_t""no" 1>&6
  fi
   
!     WINDRES_FOR_TARGET=$ncn_cv_WINDRES_FOR_TARGET
    else
!     WINDRES_FOR_TARGET="${ncn_target_tool_prefix}windres"
    fi
  else
!   WINDRES_FOR_TARGET="$ac_cv_prog_WINDRES_FOR_TARGET"
  fi
  
  
--- 4247,4755 ----
  
  
  
  # Target tools.
   if test -n "$ncn_target_tool_prefix"; then
    # Extract the first word of "${ncn_target_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ncn_target_tool_prefix}ar; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4256: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_AR_FOR_TARGET'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$CONFIGURED_AR_FOR_TARGET"; then
!   ac_cv_prog_CONFIGURED_AR_FOR_TARGET="$CONFIGURED_AR_FOR_TARGET" # Let the user override the test.
  else
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
    ac_dummy="$PATH"
    for ac_dir in $ac_dummy; do
      test -z "$ac_dir" && ac_dir=.
      if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_CONFIGURED_AR_FOR_TARGET="${ncn_target_tool_prefix}ar"
        break
      fi
    done
    IFS="$ac_save_ifs"
  fi
  fi
! CONFIGURED_AR_FOR_TARGET="$ac_cv_prog_CONFIGURED_AR_FOR_TARGET"
! if test -n "$CONFIGURED_AR_FOR_TARGET"; then
!   echo "$ac_t""$CONFIGURED_AR_FOR_TARGET" 1>&6
  else
    echo "$ac_t""no" 1>&6
  fi
  
  fi
! if test -z "$ac_cv_prog_CONFIGURED_AR_FOR_TARGET" ; then
    if test $build = $target ; then
!     ncn_cv_CONFIGURED_AR_FOR_TARGET=$CONFIGURED_AR_FOR_TARGET
      # Extract the first word of "ar", so it can be a program name with args.
  set dummy ar; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4289: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_CONFIGURED_AR_FOR_TARGET'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$ncn_cv_CONFIGURED_AR_FOR_TARGET"; then
!   ac_cv_prog_ncn_cv_CONFIGURED_AR_FOR_TARGET="$ncn_cv_CONFIGURED_AR_FOR_TARGET" # Let the user override the test.
  else
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
    ac_dummy="$PATH"
    for ac_dir in $ac_dummy; do
      test -z "$ac_dir" && ac_dir=.
      if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_ncn_cv_CONFIGURED_AR_FOR_TARGET="ar"
        break
      fi
    done
    IFS="$ac_save_ifs"
!   test -z "$ac_cv_prog_ncn_cv_CONFIGURED_AR_FOR_TARGET" && ac_cv_prog_ncn_cv_CONFIGURED_AR_FOR_TARGET="ar"
  fi
  fi
! ncn_cv_CONFIGURED_AR_FOR_TARGET="$ac_cv_prog_ncn_cv_CONFIGURED_AR_FOR_TARGET"
! if test -n "$ncn_cv_CONFIGURED_AR_FOR_TARGET"; then
!   echo "$ac_t""$ncn_cv_CONFIGURED_AR_FOR_TARGET" 1>&6
  else
    echo "$ac_t""no" 1>&6
  fi
   
!     CONFIGURED_AR_FOR_TARGET=$ncn_cv_CONFIGURED_AR_FOR_TARGET
    else
!     CONFIGURED_AR_FOR_TARGET="${ncn_target_tool_prefix}ar"
    fi
  else
!   CONFIGURED_AR_FOR_TARGET="$ac_cv_prog_CONFIGURED_AR_FOR_TARGET"
  fi
  
   if test -n "$ncn_target_tool_prefix"; then
    # Extract the first word of "${ncn_target_tool_prefix}as", so it can be a program name with args.
  set dummy ${ncn_target_tool_prefix}as; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4328: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_AS_FOR_TARGET'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$CONFIGURED_AS_FOR_TARGET"; then
!   ac_cv_prog_CONFIGURED_AS_FOR_TARGET="$CONFIGURED_AS_FOR_TARGET" # Let the user override the test.
  else
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
    ac_dummy="$PATH"
    for ac_dir in $ac_dummy; do
      test -z "$ac_dir" && ac_dir=.
      if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_CONFIGURED_AS_FOR_TARGET="${ncn_target_tool_prefix}as"
        break
      fi
    done
    IFS="$ac_save_ifs"
  fi
  fi
! CONFIGURED_AS_FOR_TARGET="$ac_cv_prog_CONFIGURED_AS_FOR_TARGET"
! if test -n "$CONFIGURED_AS_FOR_TARGET"; then
!   echo "$ac_t""$CONFIGURED_AS_FOR_TARGET" 1>&6
  else
    echo "$ac_t""no" 1>&6
  fi
  
  fi
! if test -z "$ac_cv_prog_CONFIGURED_AS_FOR_TARGET" ; then
    if test $build = $target ; then
!     ncn_cv_CONFIGURED_AS_FOR_TARGET=$CONFIGURED_AS_FOR_TARGET
      # Extract the first word of "as", so it can be a program name with args.
  set dummy as; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4361: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_CONFIGURED_AS_FOR_TARGET'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$ncn_cv_CONFIGURED_AS_FOR_TARGET"; then
!   ac_cv_prog_ncn_cv_CONFIGURED_AS_FOR_TARGET="$ncn_cv_CONFIGURED_AS_FOR_TARGET" # Let the user override the test.
  else
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
    ac_dummy="$PATH"
    for ac_dir in $ac_dummy; do
      test -z "$ac_dir" && ac_dir=.
      if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_ncn_cv_CONFIGURED_AS_FOR_TARGET="as"
        break
      fi
    done
    IFS="$ac_save_ifs"
!   test -z "$ac_cv_prog_ncn_cv_CONFIGURED_AS_FOR_TARGET" && ac_cv_prog_ncn_cv_CONFIGURED_AS_FOR_TARGET="as"
  fi
  fi
! ncn_cv_CONFIGURED_AS_FOR_TARGET="$ac_cv_prog_ncn_cv_CONFIGURED_AS_FOR_TARGET"
! if test -n "$ncn_cv_CONFIGURED_AS_FOR_TARGET"; then
!   echo "$ac_t""$ncn_cv_CONFIGURED_AS_FOR_TARGET" 1>&6
  else
    echo "$ac_t""no" 1>&6
  fi
   
!     CONFIGURED_AS_FOR_TARGET=$ncn_cv_CONFIGURED_AS_FOR_TARGET
    else
!     CONFIGURED_AS_FOR_TARGET="${ncn_target_tool_prefix}as"
    fi
  else
!   CONFIGURED_AS_FOR_TARGET="$ac_cv_prog_CONFIGURED_AS_FOR_TARGET"
  fi
  
   if test -n "$ncn_target_tool_prefix"; then
    # Extract the first word of "${ncn_target_tool_prefix}dlltool", so it can be a program name with args.
  set dummy ${ncn_target_tool_prefix}dlltool; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4400: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_DLLTOOL_FOR_TARGET'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$CONFIGURED_DLLTOOL_FOR_TARGET"; then
!   ac_cv_prog_CONFIGURED_DLLTOOL_FOR_TARGET="$CONFIGURED_DLLTOOL_FOR_TARGET" # Let the user override the test.
  else
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
    ac_dummy="$PATH"
    for ac_dir in $ac_dummy; do
      test -z "$ac_dir" && ac_dir=.
      if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_CONFIGURED_DLLTOOL_FOR_TARGET="${ncn_target_tool_prefix}dlltool"
        break
      fi
    done
    IFS="$ac_save_ifs"
  fi
  fi
! CONFIGURED_DLLTOOL_FOR_TARGET="$ac_cv_prog_CONFIGURED_DLLTOOL_FOR_TARGET"
! if test -n "$CONFIGURED_DLLTOOL_FOR_TARGET"; then
!   echo "$ac_t""$CONFIGURED_DLLTOOL_FOR_TARGET" 1>&6
  else
    echo "$ac_t""no" 1>&6
  fi
  
  fi
! if test -z "$ac_cv_prog_CONFIGURED_DLLTOOL_FOR_TARGET" ; then
    if test $build = $target ; then
!     ncn_cv_CONFIGURED_DLLTOOL_FOR_TARGET=$CONFIGURED_DLLTOOL_FOR_TARGET
      # Extract the first word of "dlltool", so it can be a program name with args.
  set dummy dlltool; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4433: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_CONFIGURED_DLLTOOL_FOR_TARGET'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$ncn_cv_CONFIGURED_DLLTOOL_FOR_TARGET"; then
!   ac_cv_prog_ncn_cv_CONFIGURED_DLLTOOL_FOR_TARGET="$ncn_cv_CONFIGURED_DLLTOOL_FOR_TARGET" # Let the user override the test.
  else
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
    ac_dummy="$PATH"
    for ac_dir in $ac_dummy; do
      test -z "$ac_dir" && ac_dir=.
      if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_ncn_cv_CONFIGURED_DLLTOOL_FOR_TARGET="dlltool"
        break
      fi
    done
    IFS="$ac_save_ifs"
!   test -z "$ac_cv_prog_ncn_cv_CONFIGURED_DLLTOOL_FOR_TARGET" && ac_cv_prog_ncn_cv_CONFIGURED_DLLTOOL_FOR_TARGET="dlltool"
  fi
  fi
! ncn_cv_CONFIGURED_DLLTOOL_FOR_TARGET="$ac_cv_prog_ncn_cv_CONFIGURED_DLLTOOL_FOR_TARGET"
! if test -n "$ncn_cv_CONFIGURED_DLLTOOL_FOR_TARGET"; then
!   echo "$ac_t""$ncn_cv_CONFIGURED_DLLTOOL_FOR_TARGET" 1>&6
  else
    echo "$ac_t""no" 1>&6
  fi
   
!     CONFIGURED_DLLTOOL_FOR_TARGET=$ncn_cv_CONFIGURED_DLLTOOL_FOR_TARGET
    else
!     CONFIGURED_DLLTOOL_FOR_TARGET="${ncn_target_tool_prefix}dlltool"
    fi
  else
!   CONFIGURED_DLLTOOL_FOR_TARGET="$ac_cv_prog_CONFIGURED_DLLTOOL_FOR_TARGET"
  fi
  
   if test -n "$ncn_target_tool_prefix"; then
    # Extract the first word of "${ncn_target_tool_prefix}ld", so it can be a program name with args.
  set dummy ${ncn_target_tool_prefix}ld; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4472: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_LD_FOR_TARGET'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$CONFIGURED_LD_FOR_TARGET"; then
!   ac_cv_prog_CONFIGURED_LD_FOR_TARGET="$CONFIGURED_LD_FOR_TARGET" # Let the user override the test.
  else
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
    ac_dummy="$PATH"
    for ac_dir in $ac_dummy; do
      test -z "$ac_dir" && ac_dir=.
      if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_CONFIGURED_LD_FOR_TARGET="${ncn_target_tool_prefix}ld"
        break
      fi
    done
    IFS="$ac_save_ifs"
  fi
  fi
! CONFIGURED_LD_FOR_TARGET="$ac_cv_prog_CONFIGURED_LD_FOR_TARGET"
! if test -n "$CONFIGURED_LD_FOR_TARGET"; then
!   echo "$ac_t""$CONFIGURED_LD_FOR_TARGET" 1>&6
  else
    echo "$ac_t""no" 1>&6
  fi
  
  fi
! if test -z "$ac_cv_prog_CONFIGURED_LD_FOR_TARGET" ; then
    if test $build = $target ; then
!     ncn_cv_CONFIGURED_LD_FOR_TARGET=$CONFIGURED_LD_FOR_TARGET
      # Extract the first word of "ld", so it can be a program name with args.
  set dummy ld; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4505: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_CONFIGURED_LD_FOR_TARGET'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$ncn_cv_CONFIGURED_LD_FOR_TARGET"; then
!   ac_cv_prog_ncn_cv_CONFIGURED_LD_FOR_TARGET="$ncn_cv_CONFIGURED_LD_FOR_TARGET" # Let the user override the test.
  else
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
    ac_dummy="$PATH"
    for ac_dir in $ac_dummy; do
      test -z "$ac_dir" && ac_dir=.
      if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_ncn_cv_CONFIGURED_LD_FOR_TARGET="ld"
        break
      fi
    done
    IFS="$ac_save_ifs"
!   test -z "$ac_cv_prog_ncn_cv_CONFIGURED_LD_FOR_TARGET" && ac_cv_prog_ncn_cv_CONFIGURED_LD_FOR_TARGET="ld"
  fi
  fi
! ncn_cv_CONFIGURED_LD_FOR_TARGET="$ac_cv_prog_ncn_cv_CONFIGURED_LD_FOR_TARGET"
! if test -n "$ncn_cv_CONFIGURED_LD_FOR_TARGET"; then
!   echo "$ac_t""$ncn_cv_CONFIGURED_LD_FOR_TARGET" 1>&6
  else
    echo "$ac_t""no" 1>&6
  fi
   
!     CONFIGURED_LD_FOR_TARGET=$ncn_cv_CONFIGURED_LD_FOR_TARGET
    else
!     CONFIGURED_LD_FOR_TARGET="${ncn_target_tool_prefix}ld"
    fi
  else
!   CONFIGURED_LD_FOR_TARGET="$ac_cv_prog_CONFIGURED_LD_FOR_TARGET"
  fi
  
   if test -n "$ncn_target_tool_prefix"; then
    # Extract the first word of "${ncn_target_tool_prefix}nm", so it can be a program name with args.
  set dummy ${ncn_target_tool_prefix}nm; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4544: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_NM_FOR_TARGET'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$CONFIGURED_NM_FOR_TARGET"; then
!   ac_cv_prog_CONFIGURED_NM_FOR_TARGET="$CONFIGURED_NM_FOR_TARGET" # Let the user override the test.
  else
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
    ac_dummy="$PATH"
    for ac_dir in $ac_dummy; do
      test -z "$ac_dir" && ac_dir=.
      if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_CONFIGURED_NM_FOR_TARGET="${ncn_target_tool_prefix}nm"
        break
      fi
    done
    IFS="$ac_save_ifs"
  fi
  fi
! CONFIGURED_NM_FOR_TARGET="$ac_cv_prog_CONFIGURED_NM_FOR_TARGET"
! if test -n "$CONFIGURED_NM_FOR_TARGET"; then
!   echo "$ac_t""$CONFIGURED_NM_FOR_TARGET" 1>&6
  else
    echo "$ac_t""no" 1>&6
  fi
  
  fi
! if test -z "$ac_cv_prog_CONFIGURED_NM_FOR_TARGET" ; then
    if test $build = $target ; then
!     ncn_cv_CONFIGURED_NM_FOR_TARGET=$CONFIGURED_NM_FOR_TARGET
      # Extract the first word of "nm", so it can be a program name with args.
  set dummy nm; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4577: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_CONFIGURED_NM_FOR_TARGET'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$ncn_cv_CONFIGURED_NM_FOR_TARGET"; then
!   ac_cv_prog_ncn_cv_CONFIGURED_NM_FOR_TARGET="$ncn_cv_CONFIGURED_NM_FOR_TARGET" # Let the user override the test.
  else
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
    ac_dummy="$PATH"
    for ac_dir in $ac_dummy; do
      test -z "$ac_dir" && ac_dir=.
      if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_ncn_cv_CONFIGURED_NM_FOR_TARGET="nm"
        break
      fi
    done
    IFS="$ac_save_ifs"
!   test -z "$ac_cv_prog_ncn_cv_CONFIGURED_NM_FOR_TARGET" && ac_cv_prog_ncn_cv_CONFIGURED_NM_FOR_TARGET="nm"
  fi
  fi
! ncn_cv_CONFIGURED_NM_FOR_TARGET="$ac_cv_prog_ncn_cv_CONFIGURED_NM_FOR_TARGET"
! if test -n "$ncn_cv_CONFIGURED_NM_FOR_TARGET"; then
!   echo "$ac_t""$ncn_cv_CONFIGURED_NM_FOR_TARGET" 1>&6
  else
    echo "$ac_t""no" 1>&6
  fi
   
!     CONFIGURED_NM_FOR_TARGET=$ncn_cv_CONFIGURED_NM_FOR_TARGET
    else
!     CONFIGURED_NM_FOR_TARGET="${ncn_target_tool_prefix}nm"
    fi
  else
!   CONFIGURED_NM_FOR_TARGET="$ac_cv_prog_CONFIGURED_NM_FOR_TARGET"
  fi
  
   if test -n "$ncn_target_tool_prefix"; then
    # Extract the first word of "${ncn_target_tool_prefix}ranlib", so it can be a program name with args.
  set dummy ${ncn_target_tool_prefix}ranlib; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4616: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_RANLIB_FOR_TARGET'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$CONFIGURED_RANLIB_FOR_TARGET"; then
!   ac_cv_prog_CONFIGURED_RANLIB_FOR_TARGET="$CONFIGURED_RANLIB_FOR_TARGET" # Let the user override the test.
  else
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
    ac_dummy="$PATH"
    for ac_dir in $ac_dummy; do
      test -z "$ac_dir" && ac_dir=.
      if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_CONFIGURED_RANLIB_FOR_TARGET="${ncn_target_tool_prefix}ranlib"
        break
      fi
    done
    IFS="$ac_save_ifs"
  fi
  fi
! CONFIGURED_RANLIB_FOR_TARGET="$ac_cv_prog_CONFIGURED_RANLIB_FOR_TARGET"
! if test -n "$CONFIGURED_RANLIB_FOR_TARGET"; then
!   echo "$ac_t""$CONFIGURED_RANLIB_FOR_TARGET" 1>&6
  else
    echo "$ac_t""no" 1>&6
  fi
  
  fi
! if test -z "$ac_cv_prog_CONFIGURED_RANLIB_FOR_TARGET" ; then
    if test $build = $target ; then
!     ncn_cv_CONFIGURED_RANLIB_FOR_TARGET=$CONFIGURED_RANLIB_FOR_TARGET
      # Extract the first word of "ranlib", so it can be a program name with args.
  set dummy ranlib; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4649: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_CONFIGURED_RANLIB_FOR_TARGET'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$ncn_cv_CONFIGURED_RANLIB_FOR_TARGET"; then
!   ac_cv_prog_ncn_cv_CONFIGURED_RANLIB_FOR_TARGET="$ncn_cv_CONFIGURED_RANLIB_FOR_TARGET" # Let the user override the test.
  else
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
    ac_dummy="$PATH"
    for ac_dir in $ac_dummy; do
      test -z "$ac_dir" && ac_dir=.
      if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_ncn_cv_CONFIGURED_RANLIB_FOR_TARGET="ranlib"
        break
      fi
    done
    IFS="$ac_save_ifs"
!   test -z "$ac_cv_prog_ncn_cv_CONFIGURED_RANLIB_FOR_TARGET" && ac_cv_prog_ncn_cv_CONFIGURED_RANLIB_FOR_TARGET=":"
  fi
  fi
! ncn_cv_CONFIGURED_RANLIB_FOR_TARGET="$ac_cv_prog_ncn_cv_CONFIGURED_RANLIB_FOR_TARGET"
! if test -n "$ncn_cv_CONFIGURED_RANLIB_FOR_TARGET"; then
!   echo "$ac_t""$ncn_cv_CONFIGURED_RANLIB_FOR_TARGET" 1>&6
  else
    echo "$ac_t""no" 1>&6
  fi
   
!     CONFIGURED_RANLIB_FOR_TARGET=$ncn_cv_CONFIGURED_RANLIB_FOR_TARGET
    else
!     CONFIGURED_RANLIB_FOR_TARGET=":"
    fi
  else
!   CONFIGURED_RANLIB_FOR_TARGET="$ac_cv_prog_CONFIGURED_RANLIB_FOR_TARGET"
  fi
  
   if test -n "$ncn_target_tool_prefix"; then
    # Extract the first word of "${ncn_target_tool_prefix}windres", so it can be a program name with args.
  set dummy ${ncn_target_tool_prefix}windres; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4688: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_WINDRES_FOR_TARGET'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$CONFIGURED_WINDRES_FOR_TARGET"; then
!   ac_cv_prog_CONFIGURED_WINDRES_FOR_TARGET="$CONFIGURED_WINDRES_FOR_TARGET" # Let the user override the test.
  else
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
    ac_dummy="$PATH"
    for ac_dir in $ac_dummy; do
      test -z "$ac_dir" && ac_dir=.
      if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_CONFIGURED_WINDRES_FOR_TARGET="${ncn_target_tool_prefix}windres"
        break
      fi
    done
    IFS="$ac_save_ifs"
  fi
  fi
! CONFIGURED_WINDRES_FOR_TARGET="$ac_cv_prog_CONFIGURED_WINDRES_FOR_TARGET"
! if test -n "$CONFIGURED_WINDRES_FOR_TARGET"; then
!   echo "$ac_t""$CONFIGURED_WINDRES_FOR_TARGET" 1>&6
  else
    echo "$ac_t""no" 1>&6
  fi
  
  fi
! if test -z "$ac_cv_prog_CONFIGURED_WINDRES_FOR_TARGET" ; then
    if test $build = $target ; then
!     ncn_cv_CONFIGURED_WINDRES_FOR_TARGET=$CONFIGURED_WINDRES_FOR_TARGET
      # Extract the first word of "windres", so it can be a program name with args.
  set dummy windres; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4721: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_CONFIGURED_WINDRES_FOR_TARGET'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$ncn_cv_CONFIGURED_WINDRES_FOR_TARGET"; then
!   ac_cv_prog_ncn_cv_CONFIGURED_WINDRES_FOR_TARGET="$ncn_cv_CONFIGURED_WINDRES_FOR_TARGET" # Let the user override the test.
  else
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
    ac_dummy="$PATH"
    for ac_dir in $ac_dummy; do
      test -z "$ac_dir" && ac_dir=.
      if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_ncn_cv_CONFIGURED_WINDRES_FOR_TARGET="windres"
        break
      fi
    done
    IFS="$ac_save_ifs"
!   test -z "$ac_cv_prog_ncn_cv_CONFIGURED_WINDRES_FOR_TARGET" && ac_cv_prog_ncn_cv_CONFIGURED_WINDRES_FOR_TARGET="windres"
  fi
  fi
! ncn_cv_CONFIGURED_WINDRES_FOR_TARGET="$ac_cv_prog_ncn_cv_CONFIGURED_WINDRES_FOR_TARGET"
! if test -n "$ncn_cv_CONFIGURED_WINDRES_FOR_TARGET"; then
!   echo "$ac_t""$ncn_cv_CONFIGURED_WINDRES_FOR_TARGET" 1>&6
  else
    echo "$ac_t""no" 1>&6
  fi
   
!     CONFIGURED_WINDRES_FOR_TARGET=$ncn_cv_CONFIGURED_WINDRES_FOR_TARGET
    else
!     CONFIGURED_WINDRES_FOR_TARGET="${ncn_target_tool_prefix}windres"
    fi
  else
!   CONFIGURED_WINDRES_FOR_TARGET="$ac_cv_prog_CONFIGURED_WINDRES_FOR_TARGET"
  fi
  
  
*************** fi
*** 4023,4028 ****
--- 4762,4768 ----
  
  
  
+ 
  # Fix up target tools.
  if test "x${build}" = "x${host}" ; then
    # In this case, the newly built tools can and should be used,
*************** if test "x${build}" = "x${host}" ; then
*** 4038,4051 ****
    NM_FOR_TARGET="\$(USUAL_NM_FOR_TARGET)"
    RANLIB_FOR_TARGET="\$(USUAL_RANLIB_FOR_TARGET)"
    WINDRES_FOR_TARGET="\$(USUAL_WINDRES_FOR_TARGET)"
  fi
  # Certain tools may need extra flags.
  AR_FOR_TARGET=${AR_FOR_TARGET}${extra_arflags_for_target}
  RANLIB_FOR_TARGET=${RANLIB_FOR_TARGET}${extra_ranlibflags_for_target}
  NM_FOR_TARGET=${NM_FOR_TARGET}${extra_nmflags_for_target}
  
  echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
! echo "configure:4049: checking whether to enable maintainer-specific portions of Makefiles" >&5
  # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
  if test "${enable_maintainer_mode+set}" = set; then
    enableval="$enable_maintainer_mode"
--- 4778,4808 ----
    NM_FOR_TARGET="\$(USUAL_NM_FOR_TARGET)"
    RANLIB_FOR_TARGET="\$(USUAL_RANLIB_FOR_TARGET)"
    WINDRES_FOR_TARGET="\$(USUAL_WINDRES_FOR_TARGET)"
+ else
+   # Just use the ones we found.
+   AR_FOR_TARGET="\$(CONFIGURED_AR_FOR_TARGET)"
+   AS_FOR_TARGET="\$(CONFIGURED_AS_FOR_TARGET)"
+   DLLTOOL_FOR_TARGET="\$(CONFIGURED_DLLTOOL_FOR_TARGET)"
+   LD_FOR_TARGET="\$(CONFIGURED_LD_FOR_TARGET)"
+   NM_FOR_TARGET="\$(CONFIGURED_NM_FOR_TARGET)"
+   RANLIB_FOR_TARGET="\$(CONFIGURED_RANLIB_FOR_TARGET)"
+   WINDRES_FOR_TARGET="\$(CONFIGURED_WINDRES_FOR_TARGET)"  
  fi
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
  # Certain tools may need extra flags.
  AR_FOR_TARGET=${AR_FOR_TARGET}${extra_arflags_for_target}
  RANLIB_FOR_TARGET=${RANLIB_FOR_TARGET}${extra_ranlibflags_for_target}
  NM_FOR_TARGET=${NM_FOR_TARGET}${extra_nmflags_for_target}
  
  echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
! echo "configure:4806: checking whether to enable maintainer-specific portions of Makefiles" >&5
  # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
  if test "${enable_maintainer_mode+set}" = set; then
    enableval="$enable_maintainer_mode"
*************** else
*** 4066,4071 ****
--- 4823,4902 ----
  fi	
  MAINT=$MAINTAINER_MODE_TRUE
  
+ # ---------------------
+ # GCC bootstrap support
+ # ---------------------
+ 
+ # Stage specific cflags for build.
+ stage1_cflags="-g"
+ case $build in
+   vax-*-*)
+     case ${GCC} in
+       yes) stage1_cflags="-g -Wa,-J" ;;
+       *) stage1_cflags="-g -J" ;;
+     esac ;;
+   powerpc-*-darwin*)
+     # The spiffy cpp-precomp chokes on some legitimate constructs in GCC
+     # sources; use -no-cpp-precomp to get to GNU cpp.
+     # Apple's GCC has bugs in designated initializer handling, so disable
+     # that too.
+     stage1_cflags="-g -no-cpp-precomp -DHAVE_DESIGNATED_INITIALIZERS=0"
+     ;;
+ esac
+ 
+ 
+ # It makes debugging easier if we create as symlinks the stage directories
+ # gcc for stageN-gcc and stagePREV-gcc for stage(N-1).  In case this is not
+ # possible, however, we can resort to mv.
+ echo $ac_n "checking if symbolic links between directories work""... $ac_c" 1>&6
+ echo "configure:4853: checking if symbolic links between directories work" >&5
+ if eval "test \"`echo '$''{'gcc_cv_prog_ln_s_dir'+set}'`\" = set"; then
+   echo $ac_n "(cached) $ac_c" 1>&6
+ else
+   if test "${LN_S}" = "ln -s" \
+    && mkdir confdir.s1 \
+    && ln -s confdir.s1 confdir.s2 \
+    && echo timestamp1 > confdir.s1/conftest.1 \
+    && cmp confdir.s1/conftest.1 confdir.s2/conftest.1 \
+    && echo timestamp2 > confdir.s2/conftest.2 \
+    && cmp confdir.s1/conftest.2 confdir.s1/conftest.2 \
+    && rm -f confdir.s2; then
+   gcc_cv_prog_ln_s_dir=yes
+ else
+   gcc_cv_prog_ln_s_dir=yes
+ fi
+ rm -rf confdir.s1 confdir.s2
+ fi
+ 
+ echo "$ac_t""$gcc_cv_prog_ln_s_dir" 1>&6
+ 
+ case ${gcc_cv_prog_ln_s_dir} in
+   yes)
+     CREATE_LINK_TO_DIR='ln -s $$1 $$2'
+     UNDO_LINK_TO_DIR='rm -f $$1' ;;
+   *)
+     CREATE_LINK_TO_DIR='mv $$1 $$2'
+     UNDO_LINK_TO_DIR='mv $$1 $$2' ;;
+ esac
+ 
+ 
+ 
+ # Enable -Werror in bootstrap stage2 and later.
+ # Change the default to "no" on release branches.
+ # Check whether --enable-werror or --disable-werror was given.
+ if test "${enable_werror+set}" = set; then
+   enableval="$enable_werror"
+   :
+ else
+   enable_werror=yes
+ fi
+ 
+ case ${enable_werror} in
+   yes) stage2_werror_flag="--enable-werror-always" ;;
+   *) stage2_werror_flag="" ;;
+ esac
+ 
+ 
  # If gcc is built natively with shared library enabled, set
  # $RPATH_ENVVAR to make sure the newly built gcc shared librares are
  # used.
*************** s%@build_os@%$build_os%g
*** 4268,4281 ****
  s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
  s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
  s%@INSTALL_DATA@%$INSTALL_DATA%g
  s%@TOPLEVEL_CONFIGURE_ARGUMENTS@%$TOPLEVEL_CONFIGURE_ARGUMENTS%g
  s%@build_subdir@%$build_subdir%g
  s%@host_subdir@%$host_subdir%g
  s%@target_subdir@%$target_subdir%g
! /@maybe_dependencies@/r $maybe_dependencies
! s%@maybe_dependencies@%%g
  /@serialization_dependencies@/r $serialization_dependencies
  s%@serialization_dependencies@%%g
  /@host_makefile_frag@/r $host_makefile_frag
  s%@host_makefile_frag@%%g
  /@target_makefile_frag@/r $target_makefile_frag
--- 5099,5131 ----
  s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
  s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
  s%@INSTALL_DATA@%$INSTALL_DATA%g
+ s%@LN@%$LN%g
+ s%@LN_S@%$LN_S%g
  s%@TOPLEVEL_CONFIGURE_ARGUMENTS@%$TOPLEVEL_CONFIGURE_ARGUMENTS%g
+ s%@gcc_version_trigger@%$gcc_version_trigger%g
+ s%@gcc_version_full@%$gcc_version_full%g
+ s%@gcc_version@%$gcc_version%g
  s%@build_subdir@%$build_subdir%g
  s%@host_subdir@%$host_subdir%g
  s%@target_subdir@%$target_subdir%g
! s%@CC@%$CC%g
! s%@GNATBIND@%$GNATBIND%g
! s%@do_compare@%$do_compare%g
! s%@gmplibs@%$gmplibs%g
! s%@gmpinc@%$gmpinc%g
! s%@stage1_languages@%$stage1_languages%g
! s%@CONFIGURED_BISON@%$CONFIGURED_BISON%g
! s%@CONFIGURED_YACC@%$CONFIGURED_YACC%g
! s%@CONFIGURED_M4@%$CONFIGURED_M4%g
! s%@CONFIGURED_FLEX@%$CONFIGURED_FLEX%g
! s%@CONFIGURED_LEX@%$CONFIGURED_LEX%g
! s%@CONFIGURED_MAKEINFO@%$CONFIGURED_MAKEINFO%g
! s%@bootstrap_lean@%$bootstrap_lean%g
! s%@default_target@%$default_target%g
  /@serialization_dependencies@/r $serialization_dependencies
  s%@serialization_dependencies@%%g
+ s%@gxx_include_dir@%$gxx_include_dir%g
+ s%@libstdcxx_incdir@%$libstdcxx_incdir%g
  /@host_makefile_frag@/r $host_makefile_frag
  s%@host_makefile_frag@%%g
  /@target_makefile_frag@/r $target_makefile_frag
*************** s%@SET_LIB_PATH@%$SET_LIB_PATH%g
*** 4288,4313 ****
  s%@RPATH_ENVVAR@%$RPATH_ENVVAR%g
  s%@BUILD_PREFIX@%$BUILD_PREFIX%g
  s%@BUILD_PREFIX_1@%$BUILD_PREFIX_1%g
- s%@configlinks@%$configlinks%g
- s%@gcc_version_trigger@%$gcc_version_trigger%g
- s%@gcc_version@%$gcc_version%g
  s%@tooldir@%$tooldir%g
  s%@build_tooldir@%$build_tooldir%g
  s%@GDB_TK@%$GDB_TK%g
- s%@gxx_include_dir@%$gxx_include_dir%g
- s%@libstdcxx_incdir@%$libstdcxx_incdir%g
  s%@build_configargs@%$build_configargs%g
! s%@configure_build_modules@%$configure_build_modules%g
! s%@all_build_modules@%$all_build_modules%g
  s%@host_configargs@%$host_configargs%g
  s%@configdirs@%$configdirs%g
  s%@target_configargs@%$target_configargs%g
  s%@target_configdirs@%$target_configdirs%g
- s%@BISON@%$BISON%g
  s%@CC_FOR_BUILD@%$CC_FOR_BUILD%g
- s%@LEX@%$LEX%g
- s%@MAKEINFO@%$MAKEINFO%g
- s%@YACC@%$YACC%g
  s%@config_shell@%$config_shell%g
  s%@AR@%$AR%g
  s%@ncn_cv_AR@%$ncn_cv_AR%g
--- 5138,5153 ----
  s%@RPATH_ENVVAR@%$RPATH_ENVVAR%g
  s%@BUILD_PREFIX@%$BUILD_PREFIX%g
  s%@BUILD_PREFIX_1@%$BUILD_PREFIX_1%g
  s%@tooldir@%$tooldir%g
  s%@build_tooldir@%$build_tooldir%g
  s%@GDB_TK@%$GDB_TK%g
  s%@build_configargs@%$build_configargs%g
! s%@build_configdirs@%$build_configdirs%g
  s%@host_configargs@%$host_configargs%g
  s%@configdirs@%$configdirs%g
  s%@target_configargs@%$target_configargs%g
  s%@target_configdirs@%$target_configdirs%g
  s%@CC_FOR_BUILD@%$CC_FOR_BUILD%g
  s%@config_shell@%$config_shell%g
  s%@AR@%$AR%g
  s%@ncn_cv_AR@%$ncn_cv_AR%g
*************** s%@OBJCOPY@%$OBJCOPY%g
*** 4327,4363 ****
  s%@ncn_cv_OBJCOPY@%$ncn_cv_OBJCOPY%g
  s%@OBJDUMP@%$OBJDUMP%g
  s%@ncn_cv_OBJDUMP@%$ncn_cv_OBJDUMP%g
- s%@CC@%$CC%g
  s%@CXX@%$CXX%g
  s%@CFLAGS_FOR_BUILD@%$CFLAGS_FOR_BUILD%g
! s%@DEFAULT_YACC@%$DEFAULT_YACC%g
! s%@DEFAULT_LEX@%$DEFAULT_LEX%g
! s%@DEFAULT_M4@%$DEFAULT_M4%g
! s%@AR_FOR_TARGET@%$AR_FOR_TARGET%g
! s%@ncn_cv_AR_FOR_TARGET@%$ncn_cv_AR_FOR_TARGET%g
! s%@AS_FOR_TARGET@%$AS_FOR_TARGET%g
! s%@ncn_cv_AS_FOR_TARGET@%$ncn_cv_AS_FOR_TARGET%g
! s%@DLLTOOL_FOR_TARGET@%$DLLTOOL_FOR_TARGET%g
! s%@ncn_cv_DLLTOOL_FOR_TARGET@%$ncn_cv_DLLTOOL_FOR_TARGET%g
! s%@LD_FOR_TARGET@%$LD_FOR_TARGET%g
! s%@ncn_cv_LD_FOR_TARGET@%$ncn_cv_LD_FOR_TARGET%g
! s%@NM_FOR_TARGET@%$NM_FOR_TARGET%g
! s%@ncn_cv_NM_FOR_TARGET@%$ncn_cv_NM_FOR_TARGET%g
! s%@RANLIB_FOR_TARGET@%$RANLIB_FOR_TARGET%g
! s%@ncn_cv_RANLIB_FOR_TARGET@%$ncn_cv_RANLIB_FOR_TARGET%g
! s%@WINDRES_FOR_TARGET@%$WINDRES_FOR_TARGET%g
! s%@ncn_cv_WINDRES_FOR_TARGET@%$ncn_cv_WINDRES_FOR_TARGET%g
  s%@GCC_FOR_TARGET@%$GCC_FOR_TARGET%g
  s%@FLAGS_FOR_TARGET@%$FLAGS_FOR_TARGET%g
  s%@CC_FOR_TARGET@%$CC_FOR_TARGET%g
  s%@GCJ_FOR_TARGET@%$GCJ_FOR_TARGET%g
  s%@CXX_FOR_TARGET@%$CXX_FOR_TARGET%g
  s%@RAW_CXX_FOR_TARGET@%$RAW_CXX_FOR_TARGET%g
  s%@CXX_FOR_TARGET_FOR_RECURSIVE_MAKE@%$CXX_FOR_TARGET_FOR_RECURSIVE_MAKE%g
  s%@RAW_CXX_FOR_TARGET_FOR_RECURSIVE_MAKE@%$RAW_CXX_FOR_TARGET_FOR_RECURSIVE_MAKE%g
  s%@MAINTAINER_MODE_TRUE@%$MAINTAINER_MODE_TRUE%g
  s%@MAINTAINER_MODE_FALSE@%$MAINTAINER_MODE_FALSE%g
  s%@MAINT@%$MAINT%g
  s%@SET_GCC_LIB_PATH@%$SET_GCC_LIB_PATH%g
  
  CEOF
--- 5167,5211 ----
  s%@ncn_cv_OBJCOPY@%$ncn_cv_OBJCOPY%g
  s%@OBJDUMP@%$OBJDUMP%g
  s%@ncn_cv_OBJDUMP@%$ncn_cv_OBJDUMP%g
  s%@CXX@%$CXX%g
  s%@CFLAGS_FOR_BUILD@%$CFLAGS_FOR_BUILD%g
! s%@CONFIGURED_AR_FOR_TARGET@%$CONFIGURED_AR_FOR_TARGET%g
! s%@ncn_cv_CONFIGURED_AR_FOR_TARGET@%$ncn_cv_CONFIGURED_AR_FOR_TARGET%g
! s%@CONFIGURED_AS_FOR_TARGET@%$CONFIGURED_AS_FOR_TARGET%g
! s%@ncn_cv_CONFIGURED_AS_FOR_TARGET@%$ncn_cv_CONFIGURED_AS_FOR_TARGET%g
! s%@CONFIGURED_DLLTOOL_FOR_TARGET@%$CONFIGURED_DLLTOOL_FOR_TARGET%g
! s%@ncn_cv_CONFIGURED_DLLTOOL_FOR_TARGET@%$ncn_cv_CONFIGURED_DLLTOOL_FOR_TARGET%g
! s%@CONFIGURED_LD_FOR_TARGET@%$CONFIGURED_LD_FOR_TARGET%g
! s%@ncn_cv_CONFIGURED_LD_FOR_TARGET@%$ncn_cv_CONFIGURED_LD_FOR_TARGET%g
! s%@CONFIGURED_NM_FOR_TARGET@%$CONFIGURED_NM_FOR_TARGET%g
! s%@ncn_cv_CONFIGURED_NM_FOR_TARGET@%$ncn_cv_CONFIGURED_NM_FOR_TARGET%g
! s%@CONFIGURED_RANLIB_FOR_TARGET@%$CONFIGURED_RANLIB_FOR_TARGET%g
! s%@ncn_cv_CONFIGURED_RANLIB_FOR_TARGET@%$ncn_cv_CONFIGURED_RANLIB_FOR_TARGET%g
! s%@CONFIGURED_WINDRES_FOR_TARGET@%$CONFIGURED_WINDRES_FOR_TARGET%g
! s%@ncn_cv_CONFIGURED_WINDRES_FOR_TARGET@%$ncn_cv_CONFIGURED_WINDRES_FOR_TARGET%g
  s%@GCC_FOR_TARGET@%$GCC_FOR_TARGET%g
  s%@FLAGS_FOR_TARGET@%$FLAGS_FOR_TARGET%g
  s%@CC_FOR_TARGET@%$CC_FOR_TARGET%g
  s%@GCJ_FOR_TARGET@%$GCJ_FOR_TARGET%g
+ s%@GFORTRAN_FOR_TARGET@%$GFORTRAN_FOR_TARGET%g
  s%@CXX_FOR_TARGET@%$CXX_FOR_TARGET%g
  s%@RAW_CXX_FOR_TARGET@%$RAW_CXX_FOR_TARGET%g
  s%@CXX_FOR_TARGET_FOR_RECURSIVE_MAKE@%$CXX_FOR_TARGET_FOR_RECURSIVE_MAKE%g
  s%@RAW_CXX_FOR_TARGET_FOR_RECURSIVE_MAKE@%$RAW_CXX_FOR_TARGET_FOR_RECURSIVE_MAKE%g
+ s%@AR_FOR_TARGET@%$AR_FOR_TARGET%g
+ s%@AS_FOR_TARGET@%$AS_FOR_TARGET%g
+ s%@DLLTOOL_FOR_TARGET@%$DLLTOOL_FOR_TARGET%g
+ s%@LD_FOR_TARGET@%$LD_FOR_TARGET%g
+ s%@NM_FOR_TARGET@%$NM_FOR_TARGET%g
+ s%@RANLIB_FOR_TARGET@%$RANLIB_FOR_TARGET%g
+ s%@WINDRES_FOR_TARGET@%$WINDRES_FOR_TARGET%g
  s%@MAINTAINER_MODE_TRUE@%$MAINTAINER_MODE_TRUE%g
  s%@MAINTAINER_MODE_FALSE@%$MAINTAINER_MODE_FALSE%g
  s%@MAINT@%$MAINT%g
+ s%@stage1_cflags@%$stage1_cflags%g
+ s%@CREATE_LINK_TO_DIR@%$CREATE_LINK_TO_DIR%g
+ s%@UNDO_LINK_TO_DIR@%$UNDO_LINK_TO_DIR%g
+ s%@stage2_werror_flag@%$stage2_werror_flag%g
  s%@SET_GCC_LIB_PATH@%$SET_GCC_LIB_PATH%g
  
  CEOF
diff -Nrcpad gcc-3.4.3/configure.in gcc-4.0.0/configure.in
*** gcc-3.4.3/configure.in	Thu Nov  4 17:05:20 2004
--- gcc-4.0.0/configure.in	Thu Apr 21 02:45:11 2005
***************
*** 18,23 ****
--- 18,27 ----
  ##############################################################################
  ### WARNING: this file contains embedded tabs.  Do not run untabify on this file.
  
+ sinclude(config/acx.m4)
+ sinclude(config/gcc-version.m4)
+ sinclude(config/gxx-include-dir.m4)
+ 
  AC_INIT(move-if-change)
  AC_PREREQ(2.13)
  AC_CANONICAL_SYSTEM
*************** AC_ARG_PROGRAM
*** 25,32 ****
  
  # Get 'install' or 'install-sh' and its variants.
  AC_PROG_INSTALL
! 
! sinclude(config/acx.m4)
  
  ### we might need to use some other shell than /bin/sh for running subshells
  ### If we are on Windows, search for the shell.  This will permit people
--- 29,36 ----
  
  # Get 'install' or 'install-sh' and its variants.
  AC_PROG_INSTALL
! ACX_PROG_LN
! AC_PROG_LN_S
  
  ### we might need to use some other shell than /bin/sh for running subshells
  ### If we are on Windows, search for the shell.  This will permit people
*************** AC_SUBST(TOPLEVEL_CONFIGURE_ARGUMENTS)
*** 78,87 ****
  
  moveifchange=${srcdir}/move-if-change
  
  # Set srcdir to "." if that's what it is.
  # This is important for multilib support.
  pwd=`${PWDCMD-pwd}`
- srcpwd=`cd ${srcdir} ; ${PWDCMD-pwd}`
  if test "${pwd}" = "${srcpwd}" ; then
    srcdir=.
  fi
--- 82,98 ----
  
  moveifchange=${srcdir}/move-if-change
  
+ srcpwd=`cd ${srcdir} ; ${PWDCMD-pwd}`
+ 
+ # We pass INSTALL explicitly to sub-makes.  Make sure that it is not
+ # a relative path.
+ if test "$INSTALL" = "${srcdir}/install-sh -c"; then
+   INSTALL="${srcpwd}/install-sh -c"
+ fi
+ 
  # Set srcdir to "." if that's what it is.
  # This is important for multilib support.
  pwd=`${PWDCMD-pwd}`
  if test "${pwd}" = "${srcpwd}" ; then
    srcdir=.
  fi
*************** fi
*** 89,113 ****
  topsrcdir=$srcpwd
  
  extra_host_args=
  # Define the trigger file to make sure configure will re-run whenever
  # the gcc version number changes.
! if test "${with_gcc_version_trigger+set}" = set ; then
!   gcc_version_trigger="$with_gcc_version_trigger"
!   gcc_version=`grep version_string ${with_gcc_version_trigger} | sed -e 's/.*\"\([[^ \"]]*\)[[ \"]].*/\1/'`
  else
!   # If gcc's sources are available, define the trigger file.
!   if test -f ${topsrcdir}/gcc/version.c ; then
!     gcc_version_trigger=${topsrcdir}/gcc/version.c
!     gcc_version=`grep version_string ${gcc_version_trigger} | sed -e 's/.*\"\([[^ \"]]*\)[[ \"]].*/\1/'`
!     case "$ac_configure_args" in
!       *--with-gcc-version-trigger=$gcc_version_trigger* )
!         ;;
!       * )
!         # Add to all subconfigure arguments: build, host, and target.
!         ac_configure_args="$ac_configure_args --with-gcc-version-trigger=$gcc_version_trigger"
!         ;;
!     esac
!   fi
  fi
  
  ### To add a new directory to the tree, first choose whether it is a target
--- 100,120 ----
  topsrcdir=$srcpwd
  
  extra_host_args=
+ 
  # Define the trigger file to make sure configure will re-run whenever
  # the gcc version number changes.
! TL_AC_GCC_VERSION([$topsrcdir])
! if test -f $gcc_version_trigger ; then
!   case "$ac_configure_args" in
!     *--with-gcc-version-trigger=$gcc_version_trigger* )
!       ;;
!     * )
!       # Add to all subconfigure arguments: build, host, and target.
!       ac_configure_args="$ac_configure_args --with-gcc-version-trigger=$gcc_version_trigger"
!       ;;
!   esac
  else
!   gcc_version_trigger=
  fi
  
  ### To add a new directory to the tree, first choose whether it is a target
*************** fi
*** 124,139 ****
  # Double entries in build_configdirs, configdirs, or target_configdirs may
  # cause circular dependencies and break everything horribly.
  
  # these libraries are used by various programs built for the host environment
  #
! host_libs="intl mmalloc libiberty opcodes bfd readline tcl tk itcl tix libgui zlib"
  
  # these tools are built for the host environment
  # Note, the powerpc-eabi build depends on sim occurring before gdb in order to
  # know that we are building the simulator.
  # binutils, gas and ld appear in that order because it makes sense to run
  # "make check" in that particular order.
! host_tools="texinfo byacc flex bison binutils gas ld gcc sid sim gdb make patch prms send-pr gprof etc expect dejagnu ash bash bzip2 m4 autoconf automake libtool diff rcs fileutils shellutils time textutils wdiff find uudecode hello tar gzip indent recode release sed utils guile perl gawk findutils gettext zip fastjar"
  
  # libgcj represents the runtime libraries only used by gcj.
  libgcj="target-libffi \
--- 131,154 ----
  # Double entries in build_configdirs, configdirs, or target_configdirs may
  # cause circular dependencies and break everything horribly.
  
+ # these library is used by various programs built for the build
+ # environment
+ #
+ build_libs="build-libiberty"
+ 
+ # these tools are built for the build environment
+ build_tools="build-texinfo build-byacc build-flex build-bison build-m4 build-fixincludes"
+ 
  # these libraries are used by various programs built for the host environment
  #
! host_libs="intl mmalloc libiberty opcodes bfd readline tcl tk itcl libgui zlib libcpp"
  
  # these tools are built for the host environment
  # Note, the powerpc-eabi build depends on sim occurring before gdb in order to
  # know that we are building the simulator.
  # binutils, gas and ld appear in that order because it makes sense to run
  # "make check" in that particular order.
! host_tools="texinfo byacc flex bison binutils gas ld fixincludes gcc sid sim gdb make patch prms send-pr gprof etc expect dejagnu ash bash bzip2 m4 autoconf automake libtool diff rcs fileutils shellutils time textutils wdiff find uudecode hello tar gzip indent recode release sed utils guile perl gawk findutils gettext zip fastjar"
  
  # libgcj represents the runtime libraries only used by gcj.
  libgcj="target-libffi \
*************** target_libraries="target-libiberty \
*** 149,157 ****
  		target-libgloss \
  		target-newlib \
  		target-libstdc++-v3 \
! 		target-libf2c \
  		${libgcj} \
! 		target-libobjc"
  
  # these tools are built using the target libraries, and are intended to
  # run only in the target environment
--- 164,174 ----
  		target-libgloss \
  		target-newlib \
  		target-libstdc++-v3 \
! 		target-libmudflap \
! 		target-libgfortran \
  		${libgcj} \
! 		target-libobjc \
! 		target-libada"
  
  # these tools are built using the target libraries, and are intended to
  # run only in the target environment
*************** target_tools="target-examples target-gro
*** 169,187 ****
  ## is important because configure will choke if they ever get through.
  ## ${configdirs} is directories we build using the host tools.
  ## ${target_configdirs} is directories we build using the target tools.
- #
  configdirs=`echo ${host_libs} ${host_tools}`
  target_configdirs=`echo ${target_libraries} ${target_tools}`
! 
! # Only make build modules if build != host.
! # This should be done more generally, but at the moment it doesn't matter.
! if test ${host_alias} != ${build_alias} ; then
!   # This is the only build module.
!   build_modules=libiberty
! else
!   build_modules=
! fi
! 
  
  ################################################################################
  
--- 186,194 ----
  ## is important because configure will choke if they ever get through.
  ## ${configdirs} is directories we build using the host tools.
  ## ${target_configdirs} is directories we build using the target tools.
  configdirs=`echo ${host_libs} ${host_tools}`
  target_configdirs=`echo ${target_libraries} ${target_tools}`
! build_configdirs=`echo ${build_libs} ${build_tools}`
  
  ################################################################################
  
*************** fi
*** 226,232 ****
  case ${with_x} in
    yes | "") ;; # the default value for this tree is that X11 is available
    no)
!     skipdirs="${skipdirs} tk tix itcl libgui"
      # We won't be able to build gdbtk without X.
      enable_gdbtk=no 
      ;;
--- 233,239 ----
  case ${with_x} in
    yes | "") ;; # the default value for this tree is that X11 is available
    no)
!     skipdirs="${skipdirs} tk itcl libgui"
      # We won't be able to build gdbtk without X.
      enable_gdbtk=no 
      ;;
*************** case "${host}" in
*** 277,311 ****
      noconfigdirs="$noconfigdirs byacc"
      ;;
    i[[3456789]]86-*-vsta)
!     noconfigdirs="tcl expect dejagnu make texinfo bison patch flex byacc send-pr gprof uudecode dejagnu diff guile perl itcl tix gnuserv gettext"
      ;;
    i[[3456789]]86-*-go32* | i[[3456789]]86-*-msdosdjgpp*)
!     noconfigdirs="tcl tk expect dejagnu send-pr uudecode guile itcl tix gnuserv libffi"
      ;;
    i[[3456789]]86-*-mingw32*)
!     # noconfigdirs="tcl tk expect dejagnu make texinfo bison patch flex byacc send-pr uudecode dejagnu diff guile perl itcl tix gnuserv"
!     noconfigdirs="expect dejagnu autoconf automake send-pr rcs guile perl texinfo libtool"
      ;;
    i[[3456789]]86-*-beos*)
!     noconfigdirs="$noconfigdirs tk itcl tix libgui gdb"
      ;;
    *-*-cygwin*)
!     noconfigdirs="autoconf automake send-pr rcs guile perl"
      ;;
    *-*-netbsd*)
!     noconfigdirs="rcs"
      ;;
    ppc*-*-pe)
!     noconfigdirs="patch diff make tk tcl expect dejagnu autoconf automake texinfo bison send-pr gprof rcs guile perl itcl tix gnuserv"
      ;;
    powerpc-*-beos*)
!     noconfigdirs="$noconfigdirs tk itcl tix libgui gdb dejagnu readline"
!     ;;
!   *-*-darwin*)
!     noconfigdirs="$noconfigdirs tk itcl tix libgui"
      ;;
  esac
  
  # Save it here so that, even in case of --enable-libgcj, if the Java
  # front-end isn't enabled, we still get libgcj disabled.
  libgcj_saved=$libgcj
--- 284,324 ----
      noconfigdirs="$noconfigdirs byacc"
      ;;
    i[[3456789]]86-*-vsta)
!     noconfigdirs="$noconfigdirs tcl expect dejagnu make texinfo bison patch flex byacc send-pr gprof uudecode dejagnu diff guile perl itcl gnuserv gettext"
      ;;
    i[[3456789]]86-*-go32* | i[[3456789]]86-*-msdosdjgpp*)
!     noconfigdirs="$noconfigdirs tcl tk expect dejagnu send-pr uudecode guile itcl gnuserv libffi"
      ;;
    i[[3456789]]86-*-mingw32*)
!     # noconfigdirs="tcl tk expect dejagnu make texinfo bison patch flex byacc send-pr uudecode dejagnu diff guile perl itcl gnuserv"
!     noconfigdirs="$noconfigdirs expect dejagnu autoconf automake send-pr rcs guile perl texinfo libtool"
      ;;
    i[[3456789]]86-*-beos*)
!     noconfigdirs="$noconfigdirs tk itcl libgui gdb"
      ;;
    *-*-cygwin*)
!     noconfigdirs="$noconfigdirs autoconf automake send-pr rcs guile perl"
      ;;
    *-*-netbsd*)
!     noconfigdirs="$noconfigdirs rcs"
      ;;
    ppc*-*-pe)
!     noconfigdirs="$noconfigdirs patch diff make tk tcl expect dejagnu autoconf automake texinfo bison send-pr gprof rcs guile perl itcl gnuserv"
      ;;
    powerpc-*-beos*)
!     noconfigdirs="$noconfigdirs tk itcl libgui gdb dejagnu readline"
      ;;
  esac
  
+ 
+ AC_ARG_ENABLE(libada,
+ [  --enable-libada        Builds libada directory],
+ ENABLE_LIBADA=$enableval,
+ ENABLE_LIBADA=yes)
+ if test "${ENABLE_LIBADA}" != "yes" ; then
+   noconfigdirs="$noconfigdirs target-libada"
+ fi
+ 
  # Save it here so that, even in case of --enable-libgcj, if the Java
  # front-end isn't enabled, we still get libgcj disabled.
  libgcj_saved=$libgcj
*************** no)
*** 322,345 ****
    ;;
  esac
  
  case "${target}" in
    *-*-chorusos)
      noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}"
      ;;
    powerpc-*-darwin*)
!     noconfigdirs="$noconfigdirs bfd binutils ld gas opcodes gdb gprof"
!     noconfigdirs="$noconfigdirs target-libobjc"
      ;;
    *-*-darwin*)
      noconfigdirs="$noconfigdirs bfd binutils ld gas opcodes gdb gprof"
!     noconfigdirs="$noconfigdirs target-libobjc ${libgcj}"
      ;;
    *-*-freebsd[[12]] | *-*-freebsd[[12]].* | *-*-freebsd*aout*)
      noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}"
      ;;
    *-*-kaos*)
      # Remove unsupported stuff on all kaOS configurations.
!     skipdirs="target-libiberty ${libgcj} target-libstdc++-v3 target-libf2c target-librx"
      skipdirs="$skipdirs target-libobjc target-examples target-groff target-gperf"
      skipdirs="$skipdirs zlib fastjar target-libjava target-boehm-gc target-zlib"
      noconfigdirs="$noconfigdirs target-libgloss"
--- 335,397 ----
    ;;
  esac
  
+ 
+ # Allow --disable-libmudflap to exclude target-libmudflap
+ case $enable_libmudflap in
+ yes)
+     ;;
+ no)
+     noconfigdirs="$noconfigdirs target-libmudflap"
+     ;;
+ "")
+     case "${target}" in
+     *-*-linux*-gnu | *-*-gnu* | *-*-k*bsd*-gnu)
+         # Enable libmudflap by default in GNU and friends.
+ 	;;
+     *-*-freebsd*)
+         # Enable libmudflap by default in FreeBSD.
+ 	;;
+     *)
+         # Disable it by default everywhere else.
+ 	noconfigdirs="$noconfigdirs target-libmudflap"
+ 	;;
+     esac
+ esac
+ 
+ 
  case "${target}" in
    *-*-chorusos)
      noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}"
      ;;
    powerpc-*-darwin*)
!     noconfigdirs="$noconfigdirs bfd binutils ld gas opcodes gdb gprof ${libgcj}"
      ;;
    *-*-darwin*)
      noconfigdirs="$noconfigdirs bfd binutils ld gas opcodes gdb gprof"
!     noconfigdirs="$noconfigdirs ${libgcj}"
      ;;
    *-*-freebsd[[12]] | *-*-freebsd[[12]].* | *-*-freebsd*aout*)
      noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}"
      ;;
+   *-*-freebsd*)
+     noconfigdirs="$noconfigdirs target-newlib target-libgloss"
+     if test "x$with_gmp" = x && test "x$with_gmp_dir" = x \
+ 	&& test -f /usr/local/include/gmp.h; then
+       with_gmp=/usr/local
+     fi
+ 
+     # Skip some stuff that's unsupported on some FreeBSD configurations.
+     case "${target}" in
+       i*86-*-*) ;;
+       alpha*-*-*) ;;
+       *)
+ 	noconfigdirs="$noconfigdirs ${libgcj}"
+ 	;;
+     esac
+     ;;
    *-*-kaos*)
      # Remove unsupported stuff on all kaOS configurations.
!     skipdirs="target-libiberty ${libgcj} target-libstdc++-v3 target-librx"
      skipdirs="$skipdirs target-libobjc target-examples target-groff target-gperf"
      skipdirs="$skipdirs zlib fastjar target-libjava target-boehm-gc target-zlib"
      noconfigdirs="$noconfigdirs target-libgloss"
*************** case "${target}" in
*** 357,373 ****
  	;;
      esac
      ;;
!   *-*-netware)
!     noconfigdirs="$noconfigdirs target-libstdc++-v3 target-newlib target-libiberty target-libgloss ${libgcj}"
      ;;
    *-*-rtems*)
      noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
-     case ${target} in
- 	h8300*-*-* | h8500-*-*)
- 	  noconfigdirs="$noconfigdirs target-libf2c"
-           ;;
-         *) ;;
-     esac
      ;;
    *-*-uclinux*)
      noconfigdirs="$noconfigdirs target-newlib target-libgloss target-rda ${libgcj}"
--- 409,419 ----
  	;;
      esac
      ;;
!   *-*-netware*)
!     noconfigdirs="$noconfigdirs target-newlib target-libiberty target-libgloss ${libgcj} target-libmudflap"
      ;;
    *-*-rtems*)
      noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
      ;;
    *-*-uclinux*)
      noconfigdirs="$noconfigdirs target-newlib target-libgloss target-rda ${libgcj}"
*************** case "${target}" in
*** 388,396 ****
      # newlib is not 64 bit ready
      noconfigdirs="$noconfigdirs target-newlib target-libgloss"
      ;;
-   alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
-     noconfigdirs="$noconfigdirs target-newlib target-libgloss"
-     ;;
    alpha*-*-*)
      # newlib is not 64 bit ready
      noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}"
--- 434,439 ----
*************** case "${target}" in
*** 405,411 ****
      noconfigdirs="$noconfigdirs ${libgcj}"
      noconfigdirs="$noconfigdirs target-examples"
      noconfigdirs="$noconfigdirs target-libiberty texinfo send-pr"
!     noconfigdirs="$noconfigdirs tcl tix tk itcl libgui sim"
      noconfigdirs="$noconfigdirs expect dejagnu"
      # the C++ libraries don't build on top of CE's C libraries
      noconfigdirs="$noconfigdirs target-libstdc++-v3"
--- 448,454 ----
      noconfigdirs="$noconfigdirs ${libgcj}"
      noconfigdirs="$noconfigdirs target-examples"
      noconfigdirs="$noconfigdirs target-libiberty texinfo send-pr"
!     noconfigdirs="$noconfigdirs tcl tk itcl libgui sim"
      noconfigdirs="$noconfigdirs expect dejagnu"
      # the C++ libraries don't build on top of CE's C libraries
      noconfigdirs="$noconfigdirs target-libstdc++-v3"
*************** case "${target}" in
*** 419,434 ****
    arc-*-*)
      noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
      ;;
    arm-*-coff | strongarm-*-coff | xscale-*-coff)
      noconfigdirs="$noconfigdirs ${libgcj}"
      ;;
!   arm-*-elf* | strongarm-*-elf* | xscale-*-elf*)
      noconfigdirs="$noconfigdirs target-libffi target-qthreads"
      ;;
!   arm-*-pe*)
!     noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
      ;;
!   arm-*-oabi*)
      noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
      ;;
    thumb-*-coff)
--- 462,479 ----
    arc-*-*)
      noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
      ;;
+   arm-semi-aof )
+     ;;
    arm-*-coff | strongarm-*-coff | xscale-*-coff)
      noconfigdirs="$noconfigdirs ${libgcj}"
      ;;
!   arm-*-elf* | strongarm-*-elf* | xscale-*-elf* | arm*-*-eabi* )
      noconfigdirs="$noconfigdirs target-libffi target-qthreads"
      ;;
!   arm*-*-symbianelf*)
!     noconfigdirs="$noconfigdirs ${libgcj} target-libiberty"
      ;;
!   arm-*-pe*)
      noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
      ;;
    thumb-*-coff)
*************** case "${target}" in
*** 437,445 ****
    thumb-*-elf)
      noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
      ;;
-   thumb-*-oabi)
-     noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
-     ;;
    thumb-*-pe)
      noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
      ;;
--- 482,487 ----
*************** case "${target}" in
*** 455,462 ****
    c54x*-*-* | tic54x-*-*)
      noconfigdirs="$noconfigdirs target-libstdc++-v3 target-libgloss ${libgcj} gcc gdb newlib"
      ;;
!   cris-*-*)
!     noconfigdirs="$noconfigdirs ${libgcj} target-newlib target-libgloss"
      ;;
    d10v-*-*)
      noconfigdirs="$noconfigdirs target-libstdc++-v3 target-libgloss ${libgcj}"
--- 497,512 ----
    c54x*-*-* | tic54x-*-*)
      noconfigdirs="$noconfigdirs target-libstdc++-v3 target-libgloss ${libgcj} gcc gdb newlib"
      ;;
!   cris-*-* | crisv32-*-*)
!     case "${target}" in
!       *-*-elf | *-*-aout)
! 	noconfigdirs="$noconfigdirs ${libgcj}";;
!       *)
! 	noconfigdirs="$noconfigdirs ${libgcj} target-newlib target-libgloss";;
!     esac
!     ;;
!   crx-*-*)
!     noconfigdirs="$noconfigdirs target-libstdc++-v3 target-mudflap ${libgcj}"
      ;;
    d10v-*-*)
      noconfigdirs="$noconfigdirs target-libstdc++-v3 target-libgloss ${libgcj}"
*************** case "${target}" in
*** 471,480 ****
      noconfigdirs="$noconfigdirs ${libgcj}"
      ;;
    h8300*-*-*)
!     noconfigdirs="$noconfigdirs target-libgloss ${libgcj} target-libf2c"
      ;;
    h8500-*-*)
!     noconfigdirs="$noconfigdirs target-libstdc++-v3 target-libgloss ${libgcj} target-libf2c"
      ;;
    hppa*64*-*-linux* | parisc*64*-*-linux*)
      # In this case, it's because the hppa64-linux target is for
--- 521,532 ----
      noconfigdirs="$noconfigdirs ${libgcj}"
      ;;
    h8300*-*-*)
!     noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
      ;;
    h8500-*-*)
!     noconfigdirs="$noconfigdirs target-libstdc++-v3 target-libgloss ${libgcj}"
!     ;;
!   hppa1.1-*-osf* | hppa1.1-*-bsd* )
      ;;
    hppa*64*-*-linux* | parisc*64*-*-linux*)
      # In this case, it's because the hppa64-linux target is for
*************** case "${target}" in
*** 482,494 ****
      # headers, crt*.o, etc., all of which are needed by these.
      noconfigdirs="$noconfigdirs target-zlib"
      ;;
    hppa*-*-*elf* | \
-   parisc*-*-linux* | hppa*-*-linux* | \
    hppa*-*-lites* | \
    hppa*-*-openbsd* | \
    hppa*64*-*-*)
      noconfigdirs="$noconfigdirs ${libgcj}"
-     # Do configure ld/binutils/gas for this case.
      ;;
    hppa*-*-*)
      # According to Alexandre Oliva <aoliva@redhat.com>, libjava won't
--- 534,546 ----
      # headers, crt*.o, etc., all of which are needed by these.
      noconfigdirs="$noconfigdirs target-zlib"
      ;;
+   parisc*-*-linux* | hppa*-*-linux*)
+     ;;
    hppa*-*-*elf* | \
    hppa*-*-lites* | \
    hppa*-*-openbsd* | \
    hppa*64*-*-*)
      noconfigdirs="$noconfigdirs ${libgcj}"
      ;;
    hppa*-*-*)
      # According to Alexandre Oliva <aoliva@redhat.com>, libjava won't
*************** case "${target}" in
*** 500,517 ****
      ;;
    ia64*-*-elf*)
      # No gdb support yet.
!     noconfigdirs="$noconfigdirs tix readline mmalloc libgui itcl gdb"
      ;;
    ia64*-**-hpux*)
      # No gdb or ld support yet.
!     noconfigdirs="$noconfigdirs ${libgcj} tix readline mmalloc libgui itcl gdb ld"
      ;;
    i[[3456789]]86-*-coff | i[[3456789]]86-*-elf)
      noconfigdirs="$noconfigdirs ${libgcj}"
      ;;
-   i[[3456789]]86-*-freebsd* | i[[3456789]]86-*-kfreebsd*-gnu)
-     noconfigdirs="$noconfigdirs target-newlib target-libgloss"
-     ;;
    i[[3456789]]86-*-linux*)
      # The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's
      # not build java stuff by default.
--- 552,568 ----
      ;;
    ia64*-*-elf*)
      # No gdb support yet.
!     noconfigdirs="$noconfigdirs readline mmalloc libgui itcl gdb"
      ;;
    ia64*-**-hpux*)
      # No gdb or ld support yet.
!     noconfigdirs="$noconfigdirs ${libgcj} readline mmalloc libgui itcl gdb ld"
!     ;;
!   i370-*-opened*)
      ;;
    i[[3456789]]86-*-coff | i[[3456789]]86-*-elf)
      noconfigdirs="$noconfigdirs ${libgcj}"
      ;;
    i[[3456789]]86-*-linux*)
      # The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's
      # not build java stuff by default.
*************** case "${target}" in
*** 538,560 ****
      # Can't build gdb for mingw32 if not native.
      case "${host}" in
        i[[3456789]]86-*-mingw32) ;; # keep gdb tcl tk expect etc.
!       *) noconfigdirs="$noconfigdirs gdb tcl tk expect itcl tix gnuserv"
           ;;
      esac
      ;;    
    *-*-cygwin*)
      target_configdirs="$target_configdirs target-libtermcap target-winsup"
      noconfigdirs="$noconfigdirs target-gperf target-libgloss ${libgcj}"
!     # always build newlib.
!     skipdirs=`echo " ${skipdirs} " | sed -e 's/ target-newlib / /'`
  
      # Can't build gdb for Cygwin if not native.
      case "${host}" in
        *-*-cygwin*) ;; # keep gdb tcl tk expect etc.
!       *) noconfigdirs="$noconfigdirs gdb tcl tk expect itcl tix libgui gnuserv"
           ;;
      esac
      ;;    
    i[[3456789]]86-*-pe)
      noconfigdirs="$noconfigdirs target-libstdc++-v3 target-libgloss ${libgcj}"
      ;;
--- 589,618 ----
      # Can't build gdb for mingw32 if not native.
      case "${host}" in
        i[[3456789]]86-*-mingw32) ;; # keep gdb tcl tk expect etc.
!       *) noconfigdirs="$noconfigdirs gdb tcl tk expect itcl gnuserv"
           ;;
      esac
      ;;    
    *-*-cygwin*)
      target_configdirs="$target_configdirs target-libtermcap target-winsup"
      noconfigdirs="$noconfigdirs target-gperf target-libgloss ${libgcj}"
!     # always build newlib if winsup directory is present.
!     if test -d "$srcdir/winsup"; then
!       skipdirs=`echo " ${skipdirs} " | sed -e 's/ target-newlib / /'`
!     elif test -d "$srcdir/newlib"; then
!       echo "Warning: winsup is missing so newlib can't be built."
!     fi
  
      # Can't build gdb for Cygwin if not native.
      case "${host}" in
        *-*-cygwin*) ;; # keep gdb tcl tk expect etc.
!       *) noconfigdirs="$noconfigdirs gdb tcl tk expect itcl libgui gnuserv"
           ;;
      esac
      ;;    
+   i[[3456789]]86-moss-msdos | i[[3456789]]86-*-moss* | \
+   i[[3456789]]86-*-uwin* | i[[3456789]]86-*-interix* )
+     ;;
    i[[3456789]]86-*-pe)
      noconfigdirs="$noconfigdirs target-libstdc++-v3 target-libgloss ${libgcj}"
      ;;
*************** case "${target}" in
*** 593,599 ****
      noconfigdirs="$noconfigdirs target-libstdc++-v3"
      ;;
    mmix-*-*)
!     noconfigdirs="$noconfigdirs ${libgcj} gdb libgloss"
      ;;
    mn10200-*-*)
      noconfigdirs="$noconfigdirs ${libgcj}"
--- 651,657 ----
      noconfigdirs="$noconfigdirs target-libstdc++-v3"
      ;;
    mmix-*-*)
!     noconfigdirs="$noconfigdirs ${libgcj} gdb libgloss target-libgfortran"
      ;;
    mn10200-*-*)
      noconfigdirs="$noconfigdirs ${libgcj}"
*************** case "${target}" in
*** 607,619 ****
      ;;
    powerpc*-*-winnt* | powerpc*-*-pe* | ppc*-*-pe)
      target_configdirs="$target_configdirs target-winsup"
!     noconfigdirs="$noconfigdirs gdb tcl tk make expect target-libgloss itcl tix gnuserv ${libgcj}"
      # always build newlib.
      skipdirs=`echo " ${skipdirs} " | sed -e 's/ target-newlib / /'`
      ;;
      # This is temporary until we can link against shared libraries
    powerpcle-*-solaris*)
!     noconfigdirs="$noconfigdirs gdb sim make tcl tk expect itcl tix gnuserv ${libgcj}"
      ;;
    powerpc-*-beos*)
      noconfigdirs="$noconfigdirs gdb target-newlib target-libgloss ${libgcj}"
--- 665,677 ----
      ;;
    powerpc*-*-winnt* | powerpc*-*-pe* | ppc*-*-pe)
      target_configdirs="$target_configdirs target-winsup"
!     noconfigdirs="$noconfigdirs gdb tcl tk make expect target-libgloss itcl gnuserv ${libgcj}"
      # always build newlib.
      skipdirs=`echo " ${skipdirs} " | sed -e 's/ target-newlib / /'`
      ;;
      # This is temporary until we can link against shared libraries
    powerpcle-*-solaris*)
!     noconfigdirs="$noconfigdirs gdb sim make tcl tk expect itcl gnuserv ${libgcj}"
      ;;
    powerpc-*-beos*)
      noconfigdirs="$noconfigdirs gdb target-newlib target-libgloss ${libgcj}"
*************** case "${target}" in
*** 621,631 ****
    powerpc-*-eabi)
      noconfigdirs="$noconfigdirs ${libgcj}"
      ;;
    rs6000-*-lynxos*)
      noconfigdirs="$noconfigdirs target-newlib gprof ${libgcj}"
      ;;
    rs6000-*-aix*)
!     noconfigdirs="$noconfigdirs gprof ${libgcj}"
      ;;
    rs6000-*-*)
      noconfigdirs="$noconfigdirs gprof ${libgcj}"
--- 679,691 ----
    powerpc-*-eabi)
      noconfigdirs="$noconfigdirs ${libgcj}"
      ;;
+   powerpc-*-eabi* | powerpcle-*-eabi* | powerpc-*-rtems* )
+     ;;
    rs6000-*-lynxos*)
      noconfigdirs="$noconfigdirs target-newlib gprof ${libgcj}"
      ;;
    rs6000-*-aix*)
!     noconfigdirs="$noconfigdirs gprof target-libgloss ${libgcj}"
      ;;
    rs6000-*-*)
      noconfigdirs="$noconfigdirs gprof ${libgcj}"
*************** case "${target}" in
*** 634,641 ****
      noconfigdirs="$noconfigdirs ld binutils gprof target-libgloss ${libgcj}"
      ;;
    mips*-*-irix5*)
!     # The GNU linker does not support shared libraries.
!     noconfigdirs="$noconfigdirs ld gprof target-libgloss ${libgcj}"
      ;;
    mips*-*-irix6*)
      # Linking libjava exceeds command-line length limits on at least
--- 694,700 ----
      noconfigdirs="$noconfigdirs ld binutils gprof target-libgloss ${libgcj}"
      ;;
    mips*-*-irix5*)
!     noconfigdirs="$noconfigdirs gprof target-libgloss ${libgcj}"
      ;;
    mips*-*-irix6*)
      # Linking libjava exceeds command-line length limits on at least
*************** case "${target}" in
*** 665,671 ****
    romp-*-*)
      noconfigdirs="$noconfigdirs bfd binutils ld gas opcodes target-libgloss ${libgcj}"
      ;;
!   sh-*-*)
      case "${host}" in
        i[[3456789]]86-*-vsta) ;; # don't add gprof back in
        i[[3456789]]86-*-go32*) ;; # don't add gprof back in
--- 724,730 ----
    romp-*-*)
      noconfigdirs="$noconfigdirs bfd binutils ld gas opcodes target-libgloss ${libgcj}"
      ;;
!   sh-*-* | sh64-*-*)
      case "${host}" in
        i[[3456789]]86-*-vsta) ;; # don't add gprof back in
        i[[3456789]]86-*-go32*) ;; # don't add gprof back in
*************** case "${target}" in
*** 674,682 ****
      esac
      noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
      ;;
-   sh64-*-*)
-     noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
-     ;;
    sparc-*-elf*)
      noconfigdirs="$noconfigdirs ${libgcj}"
      ;;
--- 733,738 ----
*************** case "${target}" in
*** 694,699 ****
--- 750,758 ----
             use_gnu_ld=no
      fi
      ;;
+   sparc-*-solaris2.[[0-6]] | sparc-*-solaris2.[[0-6]].*)
+     noconfigdirs="$noconfigdirs ${libgcj}"
+     ;;
    sparc-*-solaris* | sparc64-*-solaris* | sparcv9-*-solaris*)
      ;;
    v810-*-*)
*************** case "${target}" in
*** 720,726 ****
    ip2k-*-*)
      noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj}"
      ;;
!   *-*-linux*)
      noconfigdirs="$noconfigdirs target-newlib target-libgloss"
      ;;
    *-*-lynxos*)
--- 779,785 ----
    ip2k-*-*)
      noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj}"
      ;;
!   *-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu)
      noconfigdirs="$noconfigdirs target-newlib target-libgloss"
      ;;
    *-*-lynxos*)
*************** case "${noconfigdirs}" in
*** 738,842 ****
    *target-newlib*) noconfigdirs="$noconfigdirs target-libgloss" ;;
  esac
  
  # Figure out what language subdirectories are present.
  # Look if the user specified --enable-languages="..."; if not, use
  # the environment variable $LANGUAGES if defined. $LANGUAGES might
  # go away some day.
  # NB:  embedded tabs in this IF block -- do not untabify
! if test x"${enable_languages+set}" != xset; then
!   if test x"${LANGUAGES+set}" = xset; then
!     enable_languages="${LANGUAGES}"
!       echo configure.in: warning: setting LANGUAGES is deprecated, use --enable-languages instead 1>&2
    else
!     enable_languages=all
!   fi
! else
!   if test x"${enable_languages}" = x ||
!      test x"${enable_languages}" = xyes;
!      then
!     echo configure.in: --enable-languages needs at least one language argument 1>&2
!     exit 1
    fi
! fi
! enable_languages=`echo "${enable_languages}" | sed -e 's/[[ 	,]][[ 	,]]*/,/g' -e 's/,$//'`
  
! # First scan to see if an enabled language requires some other language.
! # We assume that a given config-lang.in will list all the language
! # front ends it requires, even if some are required indirectly.
! for lang_frag in ${srcdir}/gcc/*/config-lang.in .. ; do
!   case ${lang_frag} in
!     ..) ;;
!     # The odd quoting in the next line works around
!     # an apparent bug in bash 1.12 on linux.
!     ${srcdir}/gcc/[[*]]/config-lang.in) ;;
!     *)
!       # From the config-lang.in, get $language, $lang_requires
!       language=
!       lang_requires=
!       . ${lang_frag}
!       for other in ${lang_requires} ; do
!         case ,${enable_languages}, in
! 	  *,$other,*) ;;
! 	  *,all,*) ;;
! 	  *,$language,*)
! 	    echo " \`$other' language required by \`$language'; enabling" 1>&2
! 	    enable_languages="${enable_languages},${other}"
  	    ;;
! 	esac
!       done
!       ;;
!   esac
! done
  
! for lang_frag in ${srcdir}/gcc/*/config-lang.in .. ; do
!   case ${lang_frag} in
!     ..) ;;
!     # The odd quoting in the next line works around
!     # an apparent bug in bash 1.12 on linux.
!     ${srcdir}/gcc/[[*]]/config-lang.in) ;;
!     *)
!       # From the config-lang.in, get $language, $target_libs, 
!       # $lang_dirs, and $build_by_default
!       language=
!       target_libs=
!       lang_dirs=
!       build_by_default=
!       . ${lang_frag}
!       if test "x$language" = x ; then
!         echo "${lang_frag} doesn't set \$language." 1>&2
!         exit 1
!       fi
!       case ,${enable_languages}, in
!         *,${language},*)
!           # Language was explicitly selected; include it.
!           add_this_lang=yes
!           ;;
!         *,all,*)
!           # 'all' was selected; include 'default' languages.
!           case ${build_by_default} in
!             no) add_this_lang=no ;;
!             *) add_this_lang=yes ;;
!           esac 
!           ;;
!         *) add_this_lang=no ;;
!       esac
!       case ${add_this_lang} in
!         no)
!           # Remove language-dependent dirs.
!           eval noconfigdirs='"$noconfigdirs "'\"$target_libs $lang_dirs\"
!           ;;
!       esac
!       ;;
!   esac
! done
  
! # Remove the entries in $skipdirs and $noconfigdirs from $configdirs and
! # $target_configdirs.
  # If we have the source for $noconfigdirs entries, add them to $notsupp.
  
  notsupp=""
  for dir in . $skipdirs $noconfigdirs ; do
!   dirname=`echo $dir | sed -e s/target-//g`
    if test $dir != .  && echo " ${configdirs} " | grep " ${dir} " >/dev/null 2>&1; then
      configdirs=`echo " ${configdirs} " | sed -e "s/ ${dir} / /"`
      if test -r $srcdir/$dirname/configure ; then
--- 797,1267 ----
    *target-newlib*) noconfigdirs="$noconfigdirs target-libgloss" ;;
  esac
  
+ # Work in distributions that contain no compiler tools, like Autoconf.
+ tentative_cc=""
+ host_makefile_frag=/dev/null
+ if test -d ${srcdir}/config ; then
+ case "${host}" in
+   m68k-hp-hpux*)
+     # Avoid "too much defining" errors from HPUX compiler.
+     tentative_cc="cc -Wp,-H256000"
+     # If "ar" in $PATH is GNU ar, the symbol table may need rebuilding.
+     # If it's HP/UX ar, this should be harmless.
+     RANLIB="ar ts"
+     ;;
+   m68k-apollo-sysv*)
+     tentative_cc="cc -A ansi -A runtype,any -A systype,any -U__STDC__ -DUSG"
+     ;;
+   m68k-apollo-bsd*)
+     #None of the Apollo compilers can compile gas or binutils.  The preprocessor
+     # chokes on bfd, the compiler won't let you assign integers to enums, and
+     # other problems.  Defining CC to gcc is a questionable way to say "don't use
+     # the apollo compiler" (the preferred version of GCC could be called cc,
+     # or whatever), but I'm not sure leaving CC as cc is any better...
+     #CC=cc -A ansi -A runtype,any -A systype,any -U__STDC__ -DNO_STDARG
+     # Used to have BISON=yacc.
+     tentative_cc=gcc
+     ;;
+   m88k-dg-dgux*)
+     tentative_cc="gcc -Wall -ansi -D__using_DGUX"
+     ;;
+   m88k-harris-cxux*)
+     # Under CX/UX, we want to tell the compiler to use ANSI mode.
+     tentative_cc="cc -Xa"
+     host_makefile_frag="config/mh-cxux"
+     ;;
+   m88k-motorola-sysv*)
+     ;;
+   mips*-dec-ultrix*)
+     tentative_cc="cc -Wf,-XNg1000"
+     host_makefile_frag="config/mh-decstation"
+     ;;
+   mips*-nec-sysv4*)
+     # The C compiler on NEC MIPS SVR4 needs bigger tables.
+     tentative_cc="cc -ZXNd=5000 -ZXNg=1000"
+     host_makefile_frag="config/mh-necv4"
+     ;;
+   mips*-sgi-irix4*)
+     # Tell compiler to use K&R C.  We can't compile under the SGI Ansi
+     # environment.  Also bump switch table size so that cp-parse will
+     # compile.  Bump string length limit so linker builds.
+     tentative_cc="cc -cckr -Wf,-XNg1500 -Wf,-XNk1000 -Wf,-XNh2000 -Wf,-XNl8192"
+     ;;
+   mips*-*-sysv4*)
+     host_makefile_frag="config/mh-sysv4"
+     ;;
+   mips*-*-sysv*)
+     # This is for a MIPS running RISC/os 4.52C.
+ 
+     # This is needed for GDB, but needs to be in the top-level make because
+     # if a library is compiled with the bsd headers and gets linked with the
+     # sysv system libraries all hell can break loose (e.g. a jmp_buf might be
+     # a different size).
+     # ptrace(2) apparently has problems in the BSD environment.  No workaround is
+     # known except to select the sysv environment.  Could we use /proc instead?
+     # These "sysv environments" and "bsd environments" often end up being a pain.
+     #
+     # This is not part of CFLAGS because perhaps not all C compilers have this
+     # option.
+     tentative_cc="cc -systype sysv"
+     ;;
+   i370-ibm-opened*)
+     tentative_cc="c89"
+     ;;
+   i[[3456789]]86-*-sysv5*)
+     host_makefile_frag="config/mh-sysv5"
+     ;;
+   i[[3456789]]86-*-dgux*)
+     tentative_cc="gcc -Wall -ansi -D__using_DGUX"
+     host_makefile_frag="config/mh-dgux386"
+     ;;
+   i[[3456789]]86-ncr-sysv4.3*)
+     # The MetaWare compiler will generate a copyright message unless you
+     # turn it off by adding the -Hnocopyr flag.
+     tentative_cc="cc -Hnocopyr"
+     ;;
+   i[[3456789]]86-ncr-sysv4*)
+     # for an NCR 3000 (i486/SVR4) system.
+     # The NCR 3000 ships with a MetaWare compiler installed as /bin/cc.
+     # This compiler not only emits obnoxious copyright messages every time
+     # you run it, but it chokes and dies on a whole bunch of GNU source
+     # files.  Default to using the AT&T compiler installed in /usr/ccs/ATT/cc.
+     tentative_cc="/usr/ccs/ATT/cc"
+     host_makefile_frag="config/mh-ncr3000"
+     ;;
+   i[[3456789]]86-*-sco3.2v5*)
+     ;;
+   i[[3456789]]86-*-sco*)
+     # The native C compiler botches some simple uses of const.  Unfortunately,
+     # it doesn't defined anything like "__sco__" for us to test for in ansidecl.h.
+     tentative_cc="cc -Dconst="
+     host_makefile_frag="config/mh-sco"
+     ;;
+   i[[3456789]]86-*-udk*)
+     host_makefile_frag="config/mh-sysv5"
+     ;;
+   i[[3456789]]86-*-solaris2*)
+     host_makefile_frag="config/mh-sysv4"
+     ;;
+   i[[3456789]]86-*-msdosdjgpp*)
+     host_makefile_frag="config/mh-djgpp"
+     ;;
+   *-cygwin*)
+     host_makefile_frag="config/mh-cygwin"
+     ;;
+   *-mingw32*)
+     host_makefile_frag="config/mh-mingw32"
+     ;;
+   *-interix*)
+     host_makefile_frag="config/mh-interix"
+     ;;
+   vax-*-ultrix2*)
+     # The old BSD pcc isn't up to compiling parts of gdb so use gcc
+     tentative_cc=gcc
+     ;;
+   *-*-solaris2*)
+     host_makefile_frag="config/mh-solaris"
+     ;;
+   m68k-sun-sunos*)
+     # Sun's C compiler needs the -J flag to be able to compile cp-parse.c
+     # without overflowing the jump tables (-J says to use a 32 bit table)
+     tentative_cc="cc -J"
+     ;;
+   *-hp-hpux*)
+     tentative_cc="cc -Wp,-H256000"
+     ;;
+   *-*-hiux*)
+     tentative_cc="cc -Wp,-H256000"
+     ;;
+   rs6000-*-lynxos*)
+     # /bin/cc is less than useful for our purposes.  Always use GCC
+     tentative_cc="/usr/cygnus/progressive/bin/gcc"
+     host_makefile_frag="config/mh-lynxrs6k"
+     ;;
+   powerpc-*-darwin*)
+     host_makefile_frag="config/mh-ppc-darwin"
+     ;;
+   *-*-lynxos*)
+     # /bin/cc is less than useful for our purposes.  Always use GCC
+     tentative_cc="/bin/gcc"
+     ;;
+   *-*-sysv4*)
+     host_makefile_frag="config/mh-sysv4"
+     ;;
+   # This is placed last to prevent interfering with the cases above.
+   i[[3456789]]86-*-*)
+     # Build the stage2 and stage3 compilers with -fomit-frame-pointer.
+     host_makefile_frag="config/mh-x86omitfp"
+     ;;
+ esac
+ fi
+ 
+ # If we aren't going to be using gcc, see if we can extract a definition
+ # of CC from the fragment.
+ # Actually, use the 'pre-extracted' version above.
+ if test -z "${CC}" && test "${build}" = "${host}" ; then
+   IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}:"
+   found=
+   for dir in $PATH; do
+     test -z "$dir" && dir=.
+     if test -f $dir/gcc; then
+       found=yes
+       break
+     fi
+   done
+   IFS="$save_ifs"
+   if test -z "${found}" && test -n "${tentative_cc}" ; then
+     CC=$tentative_cc
+   fi
+ fi
+ 
+ if test "${build}" != "${host}" ; then
+   # If we are doing a Canadian Cross, in which the host and build systems
+   # are not the same, we set reasonable default values for the tools.
+ 
+   CC=${CC-${host_alias}-gcc}
+   CFLAGS=${CFLAGS-"-g -O2"}
+   CXX=${CXX-${host_alias}-c++}
+   CXXFLAGS=${CXXFLAGS-"-g -O2"}
+   CC_FOR_BUILD=${CC_FOR_BUILD-gcc}
+   CC_FOR_TARGET=${CC_FOR_TARGET-${target_alias}-gcc}
+   CXX_FOR_TARGET=${CXX_FOR_TARGET-${target_alias}-c++}
+   GCJ_FOR_TARGET=${GCJ_FOR_TARGET-${target_alias}-gcj}
+   GCC_FOR_TARGET=${GCC_FOR_TARGET-${CC_FOR_TARGET-${target_alias}-gcc}}
+   BUILD_PREFIX=${build_alias}-
+   BUILD_PREFIX_1=${build_alias}-
+ 
+ else
+   # Set reasonable default values for some tools even if not Canadian.
+   # Of course, these are different reasonable default values, originally
+   # specified directly in the Makefile.
+   # We don't export, so that autoconf can do its job.
+   # Note that all these settings are above the fragment inclusion point
+   # in Makefile.in, so can still be overridden by fragments.
+   # This is all going to change when we autoconfiscate...
+ 
+   CC_FOR_BUILD="\$(CC)"
+   GCC_FOR_TARGET="\$(USUAL_GCC_FOR_TARGET)"
+   BUILD_PREFIX=
+   BUILD_PREFIX_1=loser-
+ 
+   AC_PROG_CC
+ 
+   # We must set the default linker to the linker used by gcc for the correct
+   # operation of libtool.  If LD is not defined and we are using gcc, try to
+   # set the LD default to the ld used by gcc.
+   if test -z "$LD"; then
+     if test "$GCC" = yes; then
+       case $build in
+       *-*-mingw*)
+ 	gcc_prog_ld=`$CC -print-prog-name=ld 2>&1 | tr -d '\015'` ;;
+       *)
+ 	gcc_prog_ld=`$CC -print-prog-name=ld 2>&1` ;;
+       esac
+       case $gcc_prog_ld in
+       # Accept absolute paths.
+       [[\\/]* | [A-Za-z]:[\\/]*)]
+         LD="$gcc_prog_ld" ;;
+       esac
+     fi
+   fi
+ 
+   CXX=${CXX-"c++"}
+   CFLAGS=${CFLAGS-"-g"}
+   CXXFLAGS=${CXXFLAGS-"-g -O2"}
+ fi
+ 
+ ACX_PROG_GNAT
+ ACX_PROG_CMP_IGNORE_INITIAL
+ 
+ # Check for GMP and MPFR
+ gmplibs=
+ gmpinc=
+ have_gmp=yes
+ # Specify a location for mpfr
+ # check for this first so it ends up on the link line before gmp.
+ AC_ARG_WITH(mpfr-dir, [  --with-mpfr-dir=PATH    Specify source directory for MPFR library])
+ 
+ if test "x$with_mpfr_dir" != x; then
+   gmpinc="-I$with_mpfr_dir/mpfr"
+   gmplibs="$with_mpfr_dir/libmpfr.a"
+ else
+   gmplibs="-lmpfr"
+ fi
+ 
+ AC_ARG_WITH(mpfr, [  --with-mpfr=PATH        Specify directory for installed MPFR library])
+ 
+ if test "x$with_mpfr" != x; then
+   gmplibs="-L$with_mpfr/lib $gmplibs"
+   gmpinc="-I$with_mpfr/include"
+ fi
+ 
+ # Specify a location for gmp
+ AC_ARG_WITH(gmp-dir, [  --with-gmp-dir=PATH     Specify source directory for GMP library])
+ 
+ if test "x$with_gmp_dir" != x; then
+   gmpinc="$gmpinc -I$with_gmp_dir"
+   if test -f "$with_gmp_dir/.libs/libgmp.a"; then
+     gmplibs="$gmplibs $with_gmp_dir/.libs/libgmp.a"
+   elif test -f "$with_gmp_dir/_libs/libgmp.a"; then
+     gmplibs="$gmplibs $with_gmp_dir/_libs/libgmp.a"
+   fi
+   # One of the later tests will catch the error if neither library is present.
+ else
+   gmplibs="$gmplibs -lgmp"
+ fi
+ 
+ AC_ARG_WITH(gmp, [  --with-gmp=PATH         Specify directory for installed GMP library])
+ 
+ if test "x$with_gmp" != x; then
+   gmplibs="-L$with_gmp/lib $gmplibs"
+   gmpinc="-I$with_gmp/include $gmpinc"
+ fi
+ 
+ saved_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $gmpinc"
+ # Check GMP actually works
+ AC_MSG_CHECKING([for correct version of gmp.h])
+ AC_TRY_COMPILE([#include "gmp.h"],[
+ #if __GNU_MP_VERSION < 3
+ choke me
+ #endif
+ ], [AC_MSG_RESULT([yes])],
+   [AC_MSG_RESULT([no]); have_gmp=no])
+ 
+ if test x"$have_gmp" = xyes; then
+   AC_MSG_CHECKING([for MPFR])
+ 
+   saved_LIBS="$LIBS"
+   LIBS="$LIBS $gmplibs"
+   AC_TRY_LINK([#include <gmp.h>
+ #include <mpfr.h>], [mpfr_t n; mpfr_init(n);],
+     [AC_MSG_RESULT([yes])],  [AC_MSG_RESULT([no]); have_gmp=no])
+   LIBS="$saved_LIBS"
+   CFLAGS="$saved_CFLAGS"
+ fi
+ 
+ # Flags needed for both GMP and/or MPFR
+ AC_SUBST(gmplibs)
+ AC_SUBST(gmpinc)
+ 
+ # By default, C is the only stage 1 language.
+ stage1_languages=c
+ AC_SUBST(stage1_languages)
+ 
  # Figure out what language subdirectories are present.
  # Look if the user specified --enable-languages="..."; if not, use
  # the environment variable $LANGUAGES if defined. $LANGUAGES might
  # go away some day.
  # NB:  embedded tabs in this IF block -- do not untabify
! if test -d ${srcdir}/gcc; then
!   if test x"${enable_languages+set}" != xset; then
!     if test x"${LANGUAGES+set}" = xset; then
!       enable_languages="${LANGUAGES}"
!         echo configure.in: warning: setting LANGUAGES is deprecated, use --enable-languages instead 1>&2
!     else
!       enable_languages=all
!     fi
    else
!     if test x"${enable_languages}" = x ||
!        test x"${enable_languages}" = xyes;
!        then
!       echo configure.in: --enable-languages needs at least one language argument 1>&2
!       exit 1
!     fi
    fi
!   enable_languages=`echo "${enable_languages}" | sed -e 's/[[ 	,]][[ 	,]]*/,/g' -e 's/,$//'`
  
!   # First scan to see if an enabled language requires some other language.
!   # We assume that a given config-lang.in will list all the language
!   # front ends it requires, even if some are required indirectly.
!   for lang_frag in ${srcdir}/gcc/*/config-lang.in .. ; do
!     case ${lang_frag} in
!       ..) ;;
!       # The odd quoting in the next line works around
!       # an apparent bug in bash 1.12 on linux.
!       ${srcdir}/gcc/[[*]]/config-lang.in) ;;
!       *)
!         # From the config-lang.in, get $language, $lang_requires
!         language=
!         lang_requires=
!         . ${lang_frag}
!         for other in ${lang_requires} ; do
!           case ,${enable_languages}, in
! 	    *,$other,*) ;;
! 	    *,all,*) ;;
! 	    *,$language,*)
! 	      echo " \`$other' language required by \`$language'; enabling" 1>&2
! 	      enable_languages="${enable_languages},${other}"
! 	      ;;
! 	  esac
!         done
!         ;;
!     esac
!   done
! 
!   new_enable_languages=c
!   missing_languages=`echo ",$enable_languages," | sed -e s/,all,/,/ -e s/,c,/,/ `
!   potential_languages=c
! 
!   for lang_frag in ${srcdir}/gcc/*/config-lang.in .. ; do
!     case ${lang_frag} in
!       ..) ;;
!       # The odd quoting in the next line works around
!       # an apparent bug in bash 1.12 on linux.
!       ${srcdir}/gcc/[[*]]/config-lang.in) ;;
!       *)
!         # From the config-lang.in, get $language, $target_libs, 
!         # $lang_dirs, $boot_language, and $build_by_default
!         language=
!         target_libs=
!         lang_dirs=
!         boot_language=
!         build_by_default=
!         need_gmp=
!         . ${lang_frag}
!         potential_languages="${potential_languages},${language}"
!         # This is quite sensitive to the ordering of the case statement arms.
!         case ,${enable_languages},:${language}:${have_gnat}:${build_by_default} in
!           *::*:*)
!             echo "${lang_frag} doesn't set \$language." 1>&2
!             exit 1
!             ;;
!           *:ada:no:*)
!             # Ada was requested with no preexisting GNAT.  Disable unconditionally.
!             add_this_lang=no
!             ;;
!           *,${language},*:*:*:*)
!             # Language was explicitly selected; include it.
!             add_this_lang=yes
!             ;;
!           *,all,*:*:*:no)
!             # 'all' was selected, but this is not a default language
!             # so do not include it.
!             add_this_lang=no
!             ;;
!           *,all,*:*:*:*)
!             # 'all' was selected and this is a default language; include it.
!             add_this_lang=yes
!             ;;
!           *)
!             add_this_lang=no
!             ;;
!         esac
! 
!         # Disable languages that need GMP if it isn't available.
!         case ,${enable_languages},:${have_gmp}:${need_gmp} in
!           *,${language},*:no:yes)
!             # Specifically requested language; tell them.
!             AC_MSG_ERROR([GMP with MPFR support is required to build $language])
!             ;;
!           *:no:yes)
!             # Silently disable.
!             add_this_lang=no
!             ;;
!         esac
!         
! 	case $add_this_lang in
! 	  no)
!             # Remove language-dependent dirs.
!             eval noconfigdirs='"$noconfigdirs "'\"$target_libs $lang_dirs\"
  	    ;;
!           *)
! 	    new_enable_languages="$new_enable_languages,$language"
! 	    missing_languages=`echo "$missing_languages" | sed "s/,$language,/,/"`
! 	    case ${boot_language} in
! 	      yes)
! 		# Add to (comma-separated) list of stage 1 languages.
! 		stage1_languages="${stage1_languages},${language}"
! 		;;
! 	    esac
! 	    ;;
!         esac
!         ;;
!     esac
!   done
  
!   missing_languages=`echo "$missing_languages" | sed -e "s/^,//" -e "s/,$//"`
!   if test "x$missing_languages" != x; then
!     AC_MSG_ERROR([
! The following requested languages were not found: ${missing_languages}
! The available languages are: ${potential_languages}])
!   fi
  
!   if test "x$new_enable_languages" != "x$enable_languages"; then
!     echo The following languages will be built: ${new_enable_languages}
!   fi
!   enable_languages="$new_enable_languages"
!   ac_configure_args=`echo " $ac_configure_args" | sed -e 's/ --enable-languages=[[^ ]]*//' -e 's/$/ --enable-languages='"$enable_languages"/ `
! fi
! 
! # Remove the entries in $skipdirs and $noconfigdirs from $configdirs,
! # $build_configdirs and $target_configdirs.
  # If we have the source for $noconfigdirs entries, add them to $notsupp.
  
  notsupp=""
  for dir in . $skipdirs $noconfigdirs ; do
!   dirname=`echo $dir | sed -e s/target-//g -e s/build-//g`
    if test $dir != .  && echo " ${configdirs} " | grep " ${dir} " >/dev/null 2>&1; then
      configdirs=`echo " ${configdirs} " | sed -e "s/ ${dir} / /"`
      if test -r $srcdir/$dirname/configure ; then
*************** for dir in . $skipdirs $noconfigdirs ; d
*** 847,852 ****
--- 1272,1287 ----
        fi
      fi
    fi
+   if test $dir != .  && echo " ${build_configdirs} " | grep " ${dir} " >/dev/null 2>&1; then
+     build_configdirs=`echo " ${build_configdirs} " | sed -e "s/ ${dir} / /"`
+     if test -r $srcdir/$dirname/configure ; then
+       if echo " ${skipdirs} " | grep " ${dir} " >/dev/null 2>&1; then
+ 	true
+       else
+ 	notsupp="$notsupp $dir"
+       fi
+     fi
+   fi
    if test $dir != . && echo " ${target_configdirs} " | grep " ${dir} " >/dev/null 2>&1; then
      target_configdirs=`echo " ${target_configdirs} " | sed -e "s/ ${dir} / /"`
      if test -r $srcdir/$dirname/configure ; then
*************** fi
*** 879,884 ****
--- 1314,1328 ----
  # Quietly strip out all directories which aren't configurable in this tree.
  # This relies on all configurable subdirectories being autoconfiscated, which
  # is now the case.
+ build_configdirs_all="$build_configdirs"
+ build_configdirs=
+ for i in ${build_configdirs_all} ; do
+   j=`echo $i | sed -e s/build-//g` 
+   if test -f ${srcdir}/$j/configure ; then
+     build_configdirs="${build_configdirs} $i"
+   fi
+ done
+ 
  configdirs_all="$configdirs"
  configdirs=
  for i in ${configdirs_all} ; do
*************** for i in ${configdirs_all} ; do
*** 886,891 ****
--- 1330,1336 ----
      configdirs="${configdirs} $i"
    fi
  done
+ 
  target_configdirs_all="$target_configdirs"
  target_configdirs=
  for i in ${target_configdirs_all} ; do
*************** if test -n "${notsupp}" && test -z "${no
*** 912,918 ****
  	  appdirs=""
  	  break
  	fi
! 	if echo " ${target_configdirs} " | grep " ${dir} " >/dev/null 2>&1; then
  	  appdirs=""
  	  break
  	fi
--- 1357,1363 ----
  	  appdirs=""
  	  break
  	fi
! 	if echo " ${target_configdirs} " | grep " target-${dir} " >/dev/null 2>&1; then
  	  appdirs=""
  	  break
  	fi
*************** while test $# != 0 ; do
*** 1005,1174 ****
    shift; shift
  done
  
- # Work in distributions that contain no compiler tools, like Autoconf.
- tentative_cc=""
- host_makefile_frag=/dev/null
- if test -d ${srcdir}/config ; then
- case "${host}" in
-   m68k-hp-hpux*)
-     # Avoid "too much defining" errors from HPUX compiler.
-     tentative_cc="cc -Wp,-H256000"
-     # If "ar" in $PATH is GNU ar, the symbol table may need rebuilding.
-     # If it's HP/UX ar, this should be harmless.
-     RANLIB="ar ts"
-     ;;
-   m68k-apollo-sysv*)
-     tentative_cc="cc -A ansi -A runtype,any -A systype,any -U__STDC__ -DUSG"
-     ;;
-   m68k-apollo-bsd*)
-     #None of the Apollo compilers can compile gas or binutils.  The preprocessor
-     # chokes on bfd, the compiler won't let you assign integers to enums, and
-     # other problems.  Defining CC to gcc is a questionable way to say "don't use
-     # the apollo compiler" (the preferred version of GCC could be called cc,
-     # or whatever), but I'm not sure leaving CC as cc is any better...
-     #CC=cc -A ansi -A runtype,any -A systype,any -U__STDC__ -DNO_STDARG
-     # Used to have BISON=yacc.
-     tentative_cc=gcc
-     ;;
-   m88k-dg-dgux*)
-     tentative_cc="gcc -Wall -ansi -D__using_DGUX"
-     ;;
-   m88k-harris-cxux*)
-     # Under CX/UX, we want to tell the compiler to use ANSI mode.
-     tentative_cc="cc -Xa"
-     host_makefile_frag="config/mh-cxux"
-     ;;
-   m88k-motorola-sysv*)
-     ;;
-   mips*-dec-ultrix*)
-     tentative_cc="cc -Wf,-XNg1000"
-     host_makefile_frag="config/mh-decstation"
-     ;;
-   mips*-nec-sysv4*)
-     # The C compiler on NEC MIPS SVR4 needs bigger tables.
-     tentative_cc="cc -ZXNd=5000 -ZXNg=1000"
-     host_makefile_frag="config/mh-necv4"
-     ;;
-   mips*-sgi-irix4*)
-     # Tell compiler to use K&R C.  We can't compile under the SGI Ansi
-     # environment.  Also bump switch table size so that cp-parse will
-     # compile.  Bump string length limit so linker builds.
-     tentative_cc="cc -cckr -Wf,-XNg1500 -Wf,-XNk1000 -Wf,-XNh2000 -Wf,-XNl8192"
-     ;;
-   mips*-*-sysv4*)
-     host_makefile_frag="config/mh-sysv4"
-     ;;
-   mips*-*-sysv*)
-     # This is for a MIPS running RISC/os 4.52C.
- 
-     # This is needed for GDB, but needs to be in the top-level make because
-     # if a library is compiled with the bsd headers and gets linked with the
-     # sysv system libraries all hell can break loose (e.g. a jmp_buf might be
-     # a different size).
-     # ptrace(2) apparently has problems in the BSD environment.  No workaround is
-     # known except to select the sysv environment.  Could we use /proc instead?
-     # These "sysv environments" and "bsd environments" often end up being a pain.
-     #
-     # This is not part of CFLAGS because perhaps not all C compilers have this
-     # option.
-     tentative_cc="cc -systype sysv"
-     ;;
-   i370-ibm-opened*)
-     tentative_cc="c89"
-     ;;
-   i[[3456789]]86-*-sysv5*)
-     host_makefile_frag="config/mh-sysv5"
-     ;;
-   i[[3456789]]86-*-dgux*)
-     tentative_cc="gcc -Wall -ansi -D__using_DGUX"
-     host_makefile_frag="config/mh-dgux386"
-     ;;
-   i[[3456789]]86-ncr-sysv4.3*)
-     # The MetaWare compiler will generate a copyright message unless you
-     # turn it off by adding the -Hnocopyr flag.
-     tentative_cc="cc -Hnocopyr"
-     ;;
-   i[[3456789]]86-ncr-sysv4*)
-     # for an NCR 3000 (i486/SVR4) system.
-     # The NCR 3000 ships with a MetaWare compiler installed as /bin/cc.
-     # This compiler not only emits obnoxious copyright messages every time
-     # you run it, but it chokes and dies on a whole bunch of GNU source
-     # files.  Default to using the AT&T compiler installed in /usr/ccs/ATT/cc.
-     tentative_cc="/usr/ccs/ATT/cc"
-     host_makefile_frag="config/mh-ncr3000"
-     ;;
-   i[[3456789]]86-*-sco3.2v5*)
-     ;;
-   i[[3456789]]86-*-sco*)
-     # The native C compiler botches some simple uses of const.  Unfortunately,
-     # it doesn't defined anything like "__sco__" for us to test for in ansidecl.h.
-     tentative_cc="cc -Dconst="
-     host_makefile_frag="config/mh-sco"
-     ;;
-   i[[3456789]]86-*-udk*)
-     host_makefile_frag="config/mh-sysv5"
-     ;;
-   i[[3456789]]86-*-solaris2*)
-     host_makefile_frag="config/mh-sysv4"
-     ;;
-   i[[3456789]]86-*-msdosdjgpp*)
-     host_makefile_frag="config/mh-djgpp"
-     ;;
-   *-cygwin*)
-     host_makefile_frag="config/mh-cygwin"
-     ;;
-   *-mingw32*)
-     host_makefile_frag="config/mh-mingw32"
-     ;;
-   *-interix*)
-     host_makefile_frag="config/mh-interix"
-     ;;
-   vax-*-ultrix2*)
-     # The old BSD pcc isn't up to compiling parts of gdb so use gcc
-     tentative_cc=gcc
-     ;;
-   *-*-solaris2*)
-     host_makefile_frag="config/mh-solaris"
-     ;;
-   m68k-sun-sunos*)
-     # Sun's C compiler needs the -J flag to be able to compile cp-parse.c
-     # without overflowing the jump tables (-J says to use a 32 bit table)
-     tentative_cc="cc -J"
-     ;;
-   *-hp-hpux*)
-     tentative_cc="cc -Wp,-H256000"
-     ;;
-   *-*-hiux*)
-     tentative_cc="cc -Wp,-H256000"
-     ;;
-   rs6000-*-lynxos*)
-     # /bin/cc is less than useful for our purposes.  Always use GCC
-     tentative_cc="/usr/cygnus/progressive/bin/gcc"
-     host_makefile_frag="config/mh-lynxrs6k"
-     ;;
-   *-*-lynxos*)
-     # /bin/cc is less than useful for our purposes.  Always use GCC
-     tentative_cc="/bin/gcc"
-     ;;
-   *-*-sysv4*)
-     host_makefile_frag="config/mh-sysv4"
-     ;;
- esac
- fi
- 
  extra_arflags_for_target=
  extra_nmflags_for_target=
  extra_ranlibflags_for_target=
  target_makefile_frag=/dev/null
  case "${target}" in
!   i[[3456789]]86-*-netware*)
!     target_makefile_frag="config/mt-netware"
!     ;;
!   powerpc-*-netware*)
      target_makefile_frag="config/mt-netware"
      ;;
!   *-*-linux*)
!     target_makefile_frag="config/mt-linux"
      ;;
    *-*-aix4.[[3456789]]* | *-*-aix[[56789]].*)
      # nm and ar from AIX 4.3 and above require -X32_64 flag to all ar and nm 
--- 1450,1465 ----
    shift; shift
  done
  
  extra_arflags_for_target=
  extra_nmflags_for_target=
  extra_ranlibflags_for_target=
  target_makefile_frag=/dev/null
  case "${target}" in
!   *-*-netware*)
      target_makefile_frag="config/mt-netware"
      ;;
!   *-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu)
!     target_makefile_frag="config/mt-gnu"
      ;;
    *-*-aix4.[[3456789]]* | *-*-aix[[56789]].*)
      # nm and ar from AIX 4.3 and above require -X32_64 flag to all ar and nm 
*************** if test x${with_newlib} != xno && echo "
*** 1249,1255 ****
    extra_host_args="$extra_host_args --with-newlib"
  fi
  
- 
  # Default to using --with-stabs for certain targets.
  if test x${with_stabs} = x ; then
    case "${target}" in
--- 1540,1545 ----
*************** case "${host}" in
*** 1270,1550 ****
      ;;
  esac
  
- # If we aren't going to be using gcc, see if we can extract a definition
- # of CC from the fragment.
- # Actually, use the 'pre-extracted' version above.
- if test -z "${CC}" && test "${build}" = "${host}" ; then
-   IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}:"
-   found=
-   for dir in $PATH; do
-     test -z "$dir" && dir=.
-     if test -f $dir/gcc; then
-       found=yes
-       break
-     fi
-   done
-   IFS="$save_ifs"
-   if test -z "${found}" && test -n "${tentative_cc}" ; then
-     CC=$tentative_cc
-   fi
- fi
- 
  # Some systems (e.g., one of the i386-aix systems the gas testers are
  # using) don't handle "\$" correctly, so don't use it here.
  tooldir='${exec_prefix}'/${target_alias}
  build_tooldir=${tooldir}
  
! # Generate a default definition for YACC.  This is used if the makefile can't
! # locate bison or byacc in objdir.
! 
! for prog in 'bison -y' byacc yacc
! do
!   set dummy $prog; tmp=$2
!   IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}:"
!   for dir in $PATH; do
!     test -z "$dir" && dir=.
!     if test -f $dir/$tmp; then
!       DEFAULT_YACC="$prog"
!       break
!     fi
!   done
!   IFS="$save_ifs"
! 
!   test -n "$DEFAULT_YACC" && break
! done
! 
! # Generate a default definition for M4.  This is used if the makefile can't
! # locate m4 in objdir.
! 
! for prog in gm4 gnum4 m4
! do
!   set dummy $prog; tmp=$2
!   IFS="${IFS=   }"; save_ifs="$IFS"; IFS="${IFS}:"
!   for dir in $PATH; do
!     test -z "$dir" && dir=.
!     if test -f $dir/$tmp; then
!       DEFAULT_M4="$prog"
!       break
!     fi
!   done
!   IFS="$save_ifs"
! 
!   test -n "$DEFAULT_M4" && break
! done
! 
! # Generate a default definition for LEX.  This is used if the makefile can't
! # locate flex in objdir.
! 
! for prog in flex lex
! do
!   set dummy $prog; tmp=$2
!   IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}:"
!   for dir in $PATH; do
!     test -z "$dir" && dir=.
!     if test -f $dir/$tmp; then
!       DEFAULT_LEX="$prog"
!       break
!     fi
!   done
!   IFS="$save_ifs"
! 
!   test -n "$DEFAULT_LEX" && break
! done
! 
! if test "${build}" != "${host}" ; then
!   # If we are doing a Canadian Cross, in which the host and build systems
!   # are not the same, we set reasonable default values for the tools.
! 
!   BISON=${BISON-bison}
!   CC=${CC-${host_alias}-gcc}
!   CFLAGS=${CFLAGS-"-g -O2"}
!   CXX=${CXX-${host_alias}-c++}
!   CXXFLAGS=${CXXFLAGS-"-g -O2"}
!   CC_FOR_BUILD=${CC_FOR_BUILD-gcc}
!   CC_FOR_TARGET=${CC_FOR_TARGET-${target_alias}-gcc}
!   CXX_FOR_TARGET=${CXX_FOR_TARGET-${target_alias}-c++}
!   GCJ_FOR_TARGET=${GCJ_FOR_TARGET-${target_alias}-gcj}
!   GCC_FOR_TARGET=${GCC_FOR_TARGET-${CC_FOR_TARGET-${target_alias}-gcc}}
!   BUILD_PREFIX=${build_alias}-
!   BUILD_PREFIX_1=${build_alias}-
!   MAKEINFO=${MAKEINFO-makeinfo}
! 
!   if test -z "${YACC}" ; then
!     IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}:"
!     for dir in $PATH; do
!       test -z "$dir" && dir=.
!       if test -f $dir/bison; then
! 	YACC="bison -y"
! 	break
!       fi
!       if test -f $dir/byacc; then
! 	YACC=byacc
! 	break
!       fi
!       if test -f $dir/yacc; then
! 	YACC=yacc
! 	break
!       fi
!     done
!     IFS="$save_ifs"
!     if test -z "${YACC}" ; then
!       YACC="bison -y"
!     fi
!   fi
! 
!   if test -z "${LEX}" ; then
!     IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}:"
!     for dir in $PATH; do
!       test -z "$dir" && dir=.
!       if test -f $dir/flex; then
! 	LEX=flex
! 	break
!       fi
!       if test -f $dir/lex; then
! 	LEX=lex
! 	break
!       fi
!     done
!     IFS="$save_ifs"
!     LEX=${LEX-flex}
!   fi
! 
! else
!   # Set reasonable default values for some tools even if not Canadian.
!   # Of course, these are different reasonable default values, originally
!   # specified directly in the Makefile.
!   # We don't export, so that autoconf can do its job.
!   # Note that all these settings are above the fragment inclusion point
!   # in Makefile.in, so can still be overridden by fragments.
!   # This is all going to change when we autoconfiscate...
! 
!   BISON="\$(USUAL_BISON)"
!   CC_FOR_BUILD="\$(CC)"
!   GCC_FOR_TARGET="\$(USUAL_GCC_FOR_TARGET)"
!   BUILD_PREFIX=
!   BUILD_PREFIX_1=loser-
!   MAKEINFO="\$(USUAL_MAKEINFO)"
!   LEX="\$(USUAL_LEX)"
!   YACC="\$(USUAL_YACC)"
! 
!   # If CC is still not set, try to get gcc.
!   cc_prog_is_gcc=
!   if test -z "${CC}" ; then
!     IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}:"
!     for dir in $PATH; do
!       test -z "$dir" && dir=.
!       if test -f $dir/gcc; then
! 	CC="gcc"
! 	cc_prog_is_gcc=yes
! 	echo 'void f(){}' > conftest.c
! 	if test -z "`${CC} -g -c conftest.c 2>&1`"; then
! 	  CFLAGS=${CFLAGS-"-g -O2"}
! 	  CXXFLAGS=${CXXFLAGS-"-g -O2"}
! 	else
! 	  CFLAGS=${CFLAGS-"-O2"}
! 	  CXXFLAGS=${CXXFLAGS-"-O2"}
! 	fi
! 	rm -f conftest*
! 	break
!       fi
!     done
!     IFS="$save_ifs"
!     CC=${CC-cc}
!   else
!     # Determine if we are using gcc.
!     cat > conftest.c <<EOF
! #ifdef __GNUC__
!   yes;
! #endif
! EOF
!     if ${CC} -E conftest.c | grep yes >/dev/null 2>&1; then
!       cc_prog_is_gcc=yes
!     fi
!     rm -f conftest.c
!     if test -z "${CFLAGS}"; then
!       # Here CC is set but CFLAGS is not.  Use a quick hack to use -O2 if CC
!       # is set to a version of gcc.
!       if test "$cc_prog_is_gcc" = yes; then
! 	echo 'void f(){}' > conftest.c
! 	if test -z "`${CC} -g -c conftest.c 2>&1`"; then
! 	  CFLAGS=${CFLAGS-"-g -O2"}
! 	  CXXFLAGS=${CXXFLAGS-"-g -O2"}
! 	else
! 	  CFLAGS=${CFLAGS-"-O2"}
! 	  CXXFLAGS=${CXXFLAGS-"-O2"}
! 	fi
! 	rm -f conftest*
!       fi
!     fi
!   fi
! 
!   # We must set the default linker to the linker used by gcc for the correct
!   # operation of libtool.  If LD is not defined and we are using gcc, try to
!   # set the LD default to the ld used by gcc.
!   if test -z "$LD"; then
!     if test "$cc_prog_is_gcc" = yes; then
!       case $build in
!       *-*-mingw*)
! 	gcc_prog_ld=`$CC -print-prog-name=ld 2>&1 | tr -d '\015'` ;;
!       *)
! 	gcc_prog_ld=`$CC -print-prog-name=ld 2>&1` ;;
!       esac
!       case $gcc_prog_ld in
!       # Accept absolute paths.
!       [[\\/]* | [A-Za-z]:[\\/]*)]
!         LD="$gcc_prog_ld" ;;
!       esac
!     fi
!   fi
! 
!   CXX=${CXX-"c++"}
!   CFLAGS=${CFLAGS-"-g"}
!   CXXFLAGS=${CXXFLAGS-"-g -O2"}
! fi
! 
! # FIXME Should this be done recursively ??? (Useful for e.g. gdbtest)
! # Set up the list of links to be made.
! # ${links} is the list of link names, and ${files} is the list of names to link to.
! 
! # Make the links.
! configlinks="${links}"
! if test -r ./config.status  ; then
!   mv -f ./config.status ./config.back
! fi
! while test -n "${files}" ; do
!   # set file to car of files, files to cdr of files
!   set ${files}; file=$1; shift; files=$*
!   set ${links}; link=$1; shift; links=$*
! 
!   if test ! -r ${srcdir}/${file} ; then
!     if test ! -r ${file} ; then
!       echo '***' "${progname}: cannot create a link \"${link}\"," 1>&2
!       echo '***' "since the file \"${srcdir}/${file}\" does not exist." 1>&2
!       exit 1
!     else
!       srcfile=${file}
!     fi
!   else
!     srcfile=${srcdir}/${file}
!   fi
! 
!   ${remove} -f ${link}
!   # Make a symlink if possible, otherwise try a hard link
!   if ${symbolic_link} ${srcfile} ${link} >/dev/null 2>&1 ; then
!     true
!   else
!     # We need to re-remove the file because Lynx leaves a 
!     # very strange directory there when it fails an NFS symlink.
!     ${remove} -r -f ${link}
!     ${hard_link} ${srcfile} ${link}
!   fi
!   if test ! -r ${link} ; then
!     echo '***' "${progname}: unable to link \"${link}\" to \"${srcfile}\"." 1>&2
!     exit 1
!   fi
! 
!   echo "Linked \"${link}\" to \"${srcfile}\"."
! done
  
  # Create a .gdbinit file which runs the one in srcdir
  # and tells GDB to look there for source files.
--- 1560,1580 ----
      ;;
  esac
  
  # Some systems (e.g., one of the i386-aix systems the gas testers are
  # using) don't handle "\$" correctly, so don't use it here.
  tooldir='${exec_prefix}'/${target_alias}
  build_tooldir=${tooldir}
  
! # Generate default definitions for YACC, M4, LEX and other programs that run
! # on the build machine.  These are used if the Makefile can't locate these
! # programs in objdir.
! MISSING=`cd $ac_aux_dir && ${PWDCMD-pwd}`/missing
! AC_CHECK_PROGS([CONFIGURED_BISON], [bison], [$MISSING bison])
! AC_CHECK_PROGS([CONFIGURED_YACC], ['bison -y' byacc yacc], [$MISSING bison -y])
! AC_CHECK_PROGS([CONFIGURED_M4], [gm4 gnum4 m4], [$MISSING m4])
! AC_CHECK_PROGS([CONFIGURED_FLEX], [flex], [$MISSING flex])
! AC_CHECK_PROGS([CONFIGURED_LEX], [flex lex], [$MISSING flex])
! AC_CHECK_PROGS([CONFIGURED_MAKEINFO], makeinfo, [$MISSING makeinfo])
  
  # Create a .gdbinit file which runs the one in srcdir
  # and tells GDB to look there for source files.
*************** esac
*** 1636,1658 ****
  
  case "${host}" in
    *-*-hpux*) RPATH_ENVVAR=SHLIB_PATH ;;
    *) RPATH_ENVVAR=LD_LIBRARY_PATH ;;
  esac
  
  # Record target_configdirs and the configure arguments for target and
  # build configuration in Makefile.
  target_configdirs=`echo "${target_configdirs}" | sed -e 's/target-//g'`
! 
! # This is the final value for target_configdirs.  configdirs already
! # has its final value, as does build_modules.  It's time to create some 
! # lists of valid targets.
! 
! all_build_modules=
! configure_build_modules=
! for module in ${build_modules} ; do
!   all_build_modules=all-build-${module}
!   configure_build_modules=configure-build-${module}
! done
  
  # Determine whether gdb needs tk/tcl or not.
  # Use 'maybe' since enable_gdbtk might be true even if tk isn't available
--- 1666,1679 ----
  
  case "${host}" in
    *-*-hpux*) RPATH_ENVVAR=SHLIB_PATH ;;
+   *-*-darwin* | *-*-rhapsody* ) RPATH_ENVVAR=DYLD_LIBRARY_PATH ;;
    *) RPATH_ENVVAR=LD_LIBRARY_PATH ;;
  esac
  
  # Record target_configdirs and the configure arguments for target and
  # build configuration in Makefile.
  target_configdirs=`echo "${target_configdirs}" | sed -e 's/target-//g'`
! build_configdirs=`echo "${build_configdirs}" | sed -e 's/build-//g'`
  
  # Determine whether gdb needs tk/tcl or not.
  # Use 'maybe' since enable_gdbtk might be true even if tk isn't available
*************** done
*** 1662,1668 ****
  # leave out the maybe dependencies when enable_gdbtk is false.  I'm not
  # 100% sure that that's safe though.
  
! gdb_tk="maybe-all-tcl maybe-all-tk maybe-all-itcl maybe-all-tix maybe-all-libgui"
  case "$enable_gdbtk" in
    no)
      GDB_TK="" ;;
--- 1683,1689 ----
  # leave out the maybe dependencies when enable_gdbtk is false.  I'm not
  # 100% sure that that's safe though.
  
! gdb_tk="maybe-all-tcl maybe-all-tk maybe-all-itcl maybe-all-libgui"
  case "$enable_gdbtk" in
    no)
      GDB_TK="" ;;
*************** case "$enable_gdbtk" in
*** 1680,1710 ****
      ;;
  esac
  
! # Create the 'maybe dependencies'.  This uses a temporary file.
  
  # While at that, we remove Makefiles if we were started for recursive
  # configuration, so that the top-level Makefile reconfigures them,
  # like we used to do when configure itself was recursive.
- rm -f maybedep.tmp
- echo '# maybedep.tmp' > maybedep.tmp
  
! # Make-targets which may need maybe dependencies.
! mts="configure all install check clean distclean dvi info install-info"
! mts="${mts} installcheck mostlyclean maintainer-clean TAGS"
  
! # Loop over modules and make-targets.
! for module in ${build_modules} ; do
    if test -z "${no_recursion}" \
       && test -f ${build_subdir}/${module}/Makefile; then
      echo 1>&2 "*** removing ${build_subdir}/${module}/Makefile to force reconfigure"
      rm -f ${build_subdir}/${module}/Makefile
    fi
!   for mt in ${mts} ; do
!     case ${mt} in
!       install) ;; # No installing build modules.
!       *) echo "maybe-${mt}-build-${module}: ${mt}-build-${module}" >> maybedep.tmp ;;
!     esac
!   done
  done
  for module in ${configdirs} ; do
    if test -z "${no_recursion}" \
--- 1701,1789 ----
      ;;
  esac
  
! # Strip out unwanted targets.
  
  # While at that, we remove Makefiles if we were started for recursive
  # configuration, so that the top-level Makefile reconfigures them,
  # like we used to do when configure itself was recursive.
  
! # Loop over modules.  $extrasub must be used with care, limiting as
! # much as possible the usage of range addresses.  That's because autoconf
! # splits the sed script to overcome limits in the number of commands,
! # and relying on carefully-timed sed passes may turn out to be very hard
! # to maintain later.  In this particular case, you just have to be careful
! # not to nest @if/@endif pairs, because configure will not warn you at all.
  
! AC_ARG_ENABLE([bootstrap],
! [  --enable-bootstrap[=lean]     Enable bootstrapping [no]],,
! enable_bootstrap=default)
! 
! # Issue errors and warnings for invalid/strange bootstrap combinations.
! case "$configdirs" in
!   *gcc*) have_compiler=yes ;;
!   *) have_compiler=no ;;
! esac
! 
! case "$have_compiler:$host:$target:$enable_bootstrap" in
!   *:*:*:no) ;;
! 
!   # Default behavior.  (We'll) enable bootstrap if we have a compiler
!   # and we are in a native configuration.
!   yes:$build:$build:default)
!     # This will become 'yes'
!     enable_bootstrap=no ;;
! 
!   *:*:*:default)
!     enable_bootstrap=no ;;
! 
!   # We have a compiler and we are in a native configuration, bootstrap is ok
!   yes:$build:$build:yes | yes:$build:$build:lean)
!     ;;
! 
!   # Other configurations, but we have a compiler.  Assume the user knows
!   # what he's doing.
!   yes:*:*:yes | yes:*:*:lean)
!     AC_MSG_WARN([trying to bootstrap a cross compiler])
!     ;;
! 
!   # No compiler: if they passed --enable-bootstrap explicitly, fail
!   no:*:*:yes | no:*:*:lean)
!     AC_MSG_ERROR([cannot bootstrap without a compiler]) ;;
! 
!   # Fail if wrong command line
!   *)
!     AC_MSG_ERROR([invalid option for --enable-bootstrap])
!     ;;
! esac
! 
! # Adjust the toplevel makefile according to whether bootstrap was selected.
! case "$enable_bootstrap" in
!   yes)
!     bootstrap_lean='#'
!     default_target=bootstrap
!     bootstrap_suffix=bootstrap ;;
!   lean)
!     bootstrap_lean=''
!     default_target=bootstrap
!     bootstrap_suffix=bootstrap ;;
!   no)
!     default_target=all
!     bootstrap_suffix=no-bootstrap ;;
! esac
! AC_SUBST(bootstrap_lean)
! AC_SUBST(default_target)
! 
! for module in ${build_configdirs} ; do
    if test -z "${no_recursion}" \
       && test -f ${build_subdir}/${module}/Makefile; then
      echo 1>&2 "*** removing ${build_subdir}/${module}/Makefile to force reconfigure"
      rm -f ${build_subdir}/${module}/Makefile
    fi
!   extrasub="$extrasub
! /^@if build-$module\$/d
! /^@endif build-$module\$/d
! /^@if build-$module-$bootstrap_suffix\$/d
! /^@endif build-$module-$bootstrap_suffix\$/d"
  done
  for module in ${configdirs} ; do
    if test -z "${no_recursion}" \
*************** for module in ${configdirs} ; do
*** 1712,1720 ****
      echo 1>&2 "*** removing ${module}/Makefile to force reconfigure"
      rm -f ${module}/Makefile
    fi
!   for mt in ${mts} ; do
!     echo "maybe-${mt}-${module}: ${mt}-${module}" >> maybedep.tmp
!   done
  done
  for module in ${target_configdirs} ; do
    if test -z "${no_recursion}" \
--- 1791,1801 ----
      echo 1>&2 "*** removing ${module}/Makefile to force reconfigure"
      rm -f ${module}/Makefile
    fi
!   extrasub="$extrasub
! /^@if $module\$/d
! /^@endif $module\$/d
! /^@if $module-$bootstrap_suffix\$/d
! /^@endif $module-$bootstrap_suffix\$/d"
  done
  for module in ${target_configdirs} ; do
    if test -z "${no_recursion}" \
*************** for module in ${target_configdirs} ; do
*** 1722,1733 ****
      echo 1>&2 "*** removing ${target_subdir}/${module}/Makefile to force reconfigure"
      rm -f ${target_subdir}/${module}/Makefile
    fi
!   for mt in ${mts} ; do
!     echo "maybe-${mt}-target-${module}: ${mt}-target-${module}" >> maybedep.tmp
!   done
  done
! maybe_dependencies=maybedep.tmp
! AC_SUBST_FILE(maybe_dependencies)
  
  # Create the serialization dependencies.  This uses a temporary file.
  
--- 1803,1817 ----
      echo 1>&2 "*** removing ${target_subdir}/${module}/Makefile to force reconfigure"
      rm -f ${target_subdir}/${module}/Makefile
    fi
!   extrasub="$extrasub
! /^@if target-$module\$/d
! /^@endif target-$module\$/d
! /^@if target-$module-$bootstrap_suffix\$/d
! /^@endif target-$module-$bootstrap_suffix\$/d"
  done
! 
! extrasub="$extrasub
! /^@if /,/^@endif /d"
  
  # Create the serialization dependencies.  This uses a temporary file.
  
*************** baseargs="$baseargs --program-transform-
*** 1832,1838 ****
  # For the build-side libraries, we just need to pretend we're native,
  # and not use the same cache file.  Multilibs are neither needed nor
  # desired.
! build_configargs="--cache-file=../config.cache --build=${build_alias} --host=${build_alias} ${baseargs}"
  
  # For host modules, accept cache file option, or specification as blank.
  case "${cache_file}" in
--- 1916,1922 ----
  # For the build-side libraries, we just need to pretend we're native,
  # and not use the same cache file.  Multilibs are neither needed nor
  # desired.
! build_configargs="--cache-file=../config.cache --build=${build_alias} --host=${build_alias} --target=${target_alias} ${baseargs}"
  
  # For host modules, accept cache file option, or specification as blank.
  case "${cache_file}" in
*************** fi
*** 1883,1904 ****
  target_configargs="--cache-file=./config.cache --host=${target_alias} --build=${build_alias} ${target_configargs}"
  
  # provide a proper gxx_include_dir.
! # Note, if you change the default, make sure to fix both here and in
! # the gcc and libstdc++-v3 subdirectories.
! # Check whether --with-gxx-include-dir or --without-gxx-include-dir was given.
! case "${with_gxx_include_dir}" in
!   yes)
!     AC_MSG_ERROR([--with-gxx-include-dir=[[dir]] requires a directory])
!     ;;
!   no | "")
!     case "${enable_version_specific_runtime_libs}" in
!       yes) gxx_include_dir='${libsubdir}/include/c++' ;;
!       *)
!         . ${srcdir}/config.if
!         gxx_include_dir='${prefix}/include/'${libstdcxx_incdir} ;;
!     esac ;;
!   *) gxx_include_dir=${with_gxx_include_dir} ;;
! esac
  
  FLAGS_FOR_TARGET=
  case " $target_configdirs " in
--- 1967,1973 ----
  target_configargs="--cache-file=./config.cache --host=${target_alias} --build=${build_alias} ${target_configargs}"
  
  # provide a proper gxx_include_dir.
! TL_AC_GXX_INCLUDE_DIR
  
  FLAGS_FOR_TARGET=
  case " $target_configdirs " in
*************** else
*** 1992,1997 ****
--- 2061,2080 ----
  fi
  GCJ_FOR_TARGET=$GCJ_FOR_TARGET' $(FLAGS_FOR_TARGET)'
  
+ if test "x${GFORTRAN_FOR_TARGET+set}" = xset; then
+   :
+ elif test -d ${srcdir}/gcc; then
+   GFORTRAN_FOR_TARGET='$$r/gcc/gfortran -B$$r/gcc/'
+ elif test "$host" = "$target"; then
+   GFORTRAN_FOR_TARGET='gfortran'
+ else
+   GFORTRAN_FOR_TARGET=`echo gfortran | sed "${program_transform_name}"`
+ fi
+ case $GFORTRAN_FOR_TARGET in
+ *' $(FLAGS_FOR_TARGET)') ;;
+ *) GFORTRAN_FOR_TARGET=$GFORTRAN_FOR_TARGET' $(FLAGS_FOR_TARGET)' ;;
+ esac
+ 
  # Don't use libstdc++-v3's flags to configure/build itself.
  libstdcxx_flags='`test ! -f $$r/$(TARGET_SUBDIR)/libstdc++-v3/scripts/testsuite_flags || $(SHELL) $$r/$(TARGET_SUBDIR)/libstdc++-v3/scripts/testsuite_flags --build-includes` -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src/.libs'
  raw_libstdcxx_flags='-L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src/.libs'
*************** qqRAW_CXX_FOR_TARGET=`echo "$qRAW_CXX_FO
*** 2033,2048 ****
  # Wrap CC_FOR_TARGET and friends, for certain types of builds.
  CC_FOR_TARGET="\$(STAGE_CC_WRAPPER) ${CC_FOR_TARGET}"
  GCJ_FOR_TARGET="\$(STAGE_CC_WRAPPER) ${GCJ_FOR_TARGET}"
  CXX_FOR_TARGET="\$(STAGE_CC_WRAPPER) ${qCXX_FOR_TARGET}"
  RAW_CXX_FOR_TARGET="\$(STAGE_CC_WRAPPER) ${qRAW_CXX_FOR_TARGET}"
  CXX_FOR_TARGET_FOR_RECURSIVE_MAKE="\$(STAGE_CC_WRAPPER) ${qqCXX_FOR_TARGET}"
  RAW_CXX_FOR_TARGET_FOR_RECURSIVE_MAKE="\$(STAGE_CC_WRAPPER) ${qqRAW_CXX_FOR_TARGET}"
  
  # Makefile fragments.
! host_makefile_frag=${srcdir}/${host_makefile_frag}
! target_makefile_frag=${srcdir}/${target_makefile_frag}
! alphaieee_frag=${srcdir}/${alphaieee_frag}
! ospace_frag=${srcdir}/${ospace_frag}
  AC_SUBST_FILE(host_makefile_frag)
  AC_SUBST_FILE(target_makefile_frag)
  AC_SUBST_FILE(alphaieee_frag)
--- 2116,2135 ----
  # Wrap CC_FOR_TARGET and friends, for certain types of builds.
  CC_FOR_TARGET="\$(STAGE_CC_WRAPPER) ${CC_FOR_TARGET}"
  GCJ_FOR_TARGET="\$(STAGE_CC_WRAPPER) ${GCJ_FOR_TARGET}"
+ GFORTRAN_FOR_TARGET="\$(STAGE_CC_WRAPPER) ${GFORTRAN_FOR_TARGET}"
  CXX_FOR_TARGET="\$(STAGE_CC_WRAPPER) ${qCXX_FOR_TARGET}"
  RAW_CXX_FOR_TARGET="\$(STAGE_CC_WRAPPER) ${qRAW_CXX_FOR_TARGET}"
  CXX_FOR_TARGET_FOR_RECURSIVE_MAKE="\$(STAGE_CC_WRAPPER) ${qqCXX_FOR_TARGET}"
  RAW_CXX_FOR_TARGET_FOR_RECURSIVE_MAKE="\$(STAGE_CC_WRAPPER) ${qqRAW_CXX_FOR_TARGET}"
  
  # Makefile fragments.
! for frag in host_makefile_frag target_makefile_frag alphaieee_frag ospace_frag;
! do
!   eval fragval=\$$frag
!   if test $fragval != /dev/null; then
!     eval $frag=${srcdir}/$fragval
!   fi
! done
  AC_SUBST_FILE(host_makefile_frag)
  AC_SUBST_FILE(target_makefile_frag)
  AC_SUBST_FILE(alphaieee_frag)
*************** AC_SUBST(SET_LIB_PATH)
*** 2053,2071 ****
  AC_SUBST(RPATH_ENVVAR)
  AC_SUBST(BUILD_PREFIX)
  AC_SUBST(BUILD_PREFIX_1)
- AC_SUBST(configlinks)
- AC_SUBST(gcc_version_trigger)
- AC_SUBST(gcc_version)
  AC_SUBST(tooldir)
  AC_SUBST(build_tooldir)
  AC_SUBST(GDB_TK)
- AC_SUBST(gxx_include_dir)
- AC_SUBST(libstdcxx_incdir)
  
  # Build module lists & subconfigure args.
  AC_SUBST(build_configargs)
! AC_SUBST(configure_build_modules)
! AC_SUBST(all_build_modules)
  
  # Host module lists & subconfigure args.
  AC_SUBST(host_configargs)
--- 2140,2152 ----
  AC_SUBST(RPATH_ENVVAR)
  AC_SUBST(BUILD_PREFIX)
  AC_SUBST(BUILD_PREFIX_1)
  AC_SUBST(tooldir)
  AC_SUBST(build_tooldir)
  AC_SUBST(GDB_TK)
  
  # Build module lists & subconfigure args.
  AC_SUBST(build_configargs)
! AC_SUBST(build_configdirs)
  
  # Host module lists & subconfigure args.
  AC_SUBST(host_configargs)
*************** AC_SUBST(target_configargs)
*** 2076,2086 ****
  AC_SUBST(target_configdirs)
  
  # Build tools.
- AC_SUBST(BISON)
  AC_SUBST(CC_FOR_BUILD)
- AC_SUBST(LEX)
- AC_SUBST(MAKEINFO)
- AC_SUBST(YACC)
  AC_SUBST(config_shell)
  
  # Host tools.
--- 2157,2163 ----
*************** AC_SUBST(CXX)
*** 2098,2120 ****
  AC_SUBST(CFLAGS)
  AC_SUBST(CFLAGS_FOR_BUILD)
  AC_SUBST(CXXFLAGS)
- AC_SUBST(DEFAULT_YACC)
- AC_SUBST(DEFAULT_LEX)
- AC_SUBST(DEFAULT_M4)
  
  # Target tools.
! NCN_STRICT_CHECK_TARGET_TOOL(AR_FOR_TARGET, ar)
! NCN_STRICT_CHECK_TARGET_TOOL(AS_FOR_TARGET, as)
! NCN_STRICT_CHECK_TARGET_TOOL(DLLTOOL_FOR_TARGET, dlltool)
! NCN_STRICT_CHECK_TARGET_TOOL(LD_FOR_TARGET, ld)
! NCN_STRICT_CHECK_TARGET_TOOL(NM_FOR_TARGET, nm)
! NCN_STRICT_CHECK_TARGET_TOOL(RANLIB_FOR_TARGET, ranlib, :)
! NCN_STRICT_CHECK_TARGET_TOOL(WINDRES_FOR_TARGET, windres)
  
  AC_SUBST(GCC_FOR_TARGET)
  AC_SUBST(FLAGS_FOR_TARGET)
  AC_SUBST(CC_FOR_TARGET)
  AC_SUBST(GCJ_FOR_TARGET)
  AC_SUBST(CXX_FOR_TARGET)
  AC_SUBST(RAW_CXX_FOR_TARGET)
  AC_SUBST(CXX_FOR_TARGET_FOR_RECURSIVE_MAKE)
--- 2175,2195 ----
  AC_SUBST(CFLAGS)
  AC_SUBST(CFLAGS_FOR_BUILD)
  AC_SUBST(CXXFLAGS)
  
  # Target tools.
! NCN_STRICT_CHECK_TARGET_TOOL(CONFIGURED_AR_FOR_TARGET, ar)
! NCN_STRICT_CHECK_TARGET_TOOL(CONFIGURED_AS_FOR_TARGET, as)
! NCN_STRICT_CHECK_TARGET_TOOL(CONFIGURED_DLLTOOL_FOR_TARGET, dlltool)
! NCN_STRICT_CHECK_TARGET_TOOL(CONFIGURED_LD_FOR_TARGET, ld)
! NCN_STRICT_CHECK_TARGET_TOOL(CONFIGURED_NM_FOR_TARGET, nm)
! NCN_STRICT_CHECK_TARGET_TOOL(CONFIGURED_RANLIB_FOR_TARGET, ranlib, :)
! NCN_STRICT_CHECK_TARGET_TOOL(CONFIGURED_WINDRES_FOR_TARGET, windres)
  
  AC_SUBST(GCC_FOR_TARGET)
  AC_SUBST(FLAGS_FOR_TARGET)
  AC_SUBST(CC_FOR_TARGET)
  AC_SUBST(GCJ_FOR_TARGET)
+ AC_SUBST(GFORTRAN_FOR_TARGET)
  AC_SUBST(CXX_FOR_TARGET)
  AC_SUBST(RAW_CXX_FOR_TARGET)
  AC_SUBST(CXX_FOR_TARGET_FOR_RECURSIVE_MAKE)
*************** if test "x${build}" = "x${host}" ; then
*** 2135,2141 ****
--- 2210,2233 ----
    NM_FOR_TARGET="\$(USUAL_NM_FOR_TARGET)"
    RANLIB_FOR_TARGET="\$(USUAL_RANLIB_FOR_TARGET)"
    WINDRES_FOR_TARGET="\$(USUAL_WINDRES_FOR_TARGET)"
+ else
+   # Just use the ones we found.
+   AR_FOR_TARGET="\$(CONFIGURED_AR_FOR_TARGET)"
+   AS_FOR_TARGET="\$(CONFIGURED_AS_FOR_TARGET)"
+   DLLTOOL_FOR_TARGET="\$(CONFIGURED_DLLTOOL_FOR_TARGET)"
+   LD_FOR_TARGET="\$(CONFIGURED_LD_FOR_TARGET)"
+   NM_FOR_TARGET="\$(CONFIGURED_NM_FOR_TARGET)"
+   RANLIB_FOR_TARGET="\$(CONFIGURED_RANLIB_FOR_TARGET)"
+   WINDRES_FOR_TARGET="\$(CONFIGURED_WINDRES_FOR_TARGET)"  
  fi
+ AC_SUBST(AR_FOR_TARGET)
+ AC_SUBST(AS_FOR_TARGET)
+ AC_SUBST(DLLTOOL_FOR_TARGET)
+ AC_SUBST(LD_FOR_TARGET)
+ AC_SUBST(NM_FOR_TARGET)
+ AC_SUBST(RANLIB_FOR_TARGET)
+ AC_SUBST(WINDRES_FOR_TARGET)
+ 
  # Certain tools may need extra flags.
  AR_FOR_TARGET=${AR_FOR_TARGET}${extra_arflags_for_target}
  RANLIB_FOR_TARGET=${RANLIB_FOR_TARGET}${extra_ranlibflags_for_target}
*************** fi	
*** 2160,2165 ****
--- 2252,2320 ----
  MAINT=$MAINTAINER_MODE_TRUE
  AC_SUBST(MAINT)dnl
  
+ # ---------------------
+ # GCC bootstrap support
+ # ---------------------
+ 
+ # Stage specific cflags for build.
+ stage1_cflags="-g"
+ case $build in
+   vax-*-*)
+     case ${GCC} in
+       yes) stage1_cflags="-g -Wa,-J" ;;
+       *) stage1_cflags="-g -J" ;;
+     esac ;;
+   powerpc-*-darwin*)
+     # The spiffy cpp-precomp chokes on some legitimate constructs in GCC
+     # sources; use -no-cpp-precomp to get to GNU cpp.
+     # Apple's GCC has bugs in designated initializer handling, so disable
+     # that too.
+     stage1_cflags="-g -no-cpp-precomp -DHAVE_DESIGNATED_INITIALIZERS=0"
+     ;;
+ esac
+ AC_SUBST(stage1_cflags)
+ 
+ # It makes debugging easier if we create as symlinks the stage directories
+ # gcc for stageN-gcc and stagePREV-gcc for stage(N-1).  In case this is not
+ # possible, however, we can resort to mv.
+ AC_CACHE_CHECK([if symbolic links between directories work],
+ [gcc_cv_prog_ln_s_dir],
+ [if test "${LN_S}" = "ln -s" \
+    && mkdir confdir.s1 \
+    && ln -s confdir.s1 confdir.s2 \
+    && echo timestamp1 > confdir.s1/conftest.1 \
+    && cmp confdir.s1/conftest.1 confdir.s2/conftest.1 \
+    && echo timestamp2 > confdir.s2/conftest.2 \
+    && cmp confdir.s1/conftest.2 confdir.s1/conftest.2 \
+    && rm -f confdir.s2; then
+   gcc_cv_prog_ln_s_dir=yes
+ else
+   gcc_cv_prog_ln_s_dir=yes
+ fi
+ rm -rf confdir.s1 confdir.s2])
+ 
+ case ${gcc_cv_prog_ln_s_dir} in
+   yes)
+     CREATE_LINK_TO_DIR='ln -s $$1 $$2'
+     UNDO_LINK_TO_DIR='rm -f $$1' ;;
+   *)
+     CREATE_LINK_TO_DIR='mv $$1 $$2'
+     UNDO_LINK_TO_DIR='mv $$1 $$2' ;;
+ esac
+ AC_SUBST(CREATE_LINK_TO_DIR)
+ AC_SUBST(UNDO_LINK_TO_DIR)
+ 
+ # Enable -Werror in bootstrap stage2 and later.
+ # Change the default to "no" on release branches.
+ AC_ARG_ENABLE(werror,
+ [  --enable-werror         enable -Werror in bootstrap stage2 and later], [],
+ [enable_werror=yes])
+ case ${enable_werror} in
+   yes) stage2_werror_flag="--enable-werror-always" ;;
+   *) stage2_werror_flag="" ;;
+ esac
+ AC_SUBST(stage2_werror_flag)
+ 
  # If gcc is built natively with shared library enabled, set
  # $RPATH_ENVVAR to make sure the newly built gcc shared librares are
  # used.
diff -Nrcpad gcc-3.4.3/contrib/ChangeLog gcc-4.0.0/contrib/ChangeLog
*** gcc-3.4.3/contrib/ChangeLog	Fri Nov  5 03:33:18 2004
--- gcc-4.0.0/contrib/ChangeLog	Thu Apr 21 05:17:21 2005
***************
*** 1,10 ****
! 2004-11-04  Release Manager
  
! 	* GCC 3.4.3 released.
  
! 2004-09-06  Release Manager
  
! 	* GCC 3.4.2 released.
  
  2004-08-26  Matthias Klose  <doko@debian.org>
  
--- 1,53 ----
! 2005-04-20  Release Manager
  
! 	* GCC 4.0.0 released.
  
! 2005-04-17  Joseph S. Myers  <joseph@codesourcery.com>
  
! 	* gennews (files): Update for GCC 4.0.
! 
! 2005-03-21  Zack Weinberg  <zack@codesourcery.com>
! 
! 	Merge from mainline:
! 
!     2005-03-18  Alexandre Oliva  <aoliva@redhat.com>
! 
! 	* gcc_update (silent): Unset instead of initializing to null.
! 
!     2005-03-18  Andreas Schwab  <schwab@suse.de>
! 
! 	* gcc_update (apply_patch): Properly quote $1.
! 
!     2005-03-18  Zack Weinberg  <zack@codesourcery.com>
! 
! 	* gcc_update: Add --silent option.
! 
! 2005-03-08  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
! 
! 	* warn_summary (keywordFilter): Update sed pattern for new quoting
! 	style in warnings.
! 
! 2005-03-07  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
! 
! 	* warn_summary: Add -fortran subdir flag.
! 	(subdirectoryFilter): Fix missing ada subdir.
! 
! 2004-11-20  Hans-Peter Nilsson  <hp@bitrange.com>
! 
! 	* gcc_update (touch_files): Don't rely on "make" being GNU make;
! 	grep for "Touching" to determine that the rule executes.
! 
! 2004-11-14  Hans-Peter Nilsson  <hp@bitrange.com>
! 
! 	* gcc_update (touch_files): Explicitly pass --no-print-directory.
! 
! 2004-11-04  Andrew Pinski  <pinskia@physics.uc.edu>
! 
! 	* gcc_update (boehm-gc/aclocal.m4): Remove boehm-gc/acinclude.m4.
! 
! 2004-08-04  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* gcc_update: Add fixincludes.
  
  2004-08-26  Matthias Klose  <doko@debian.org>
  
***************
*** 15,36 ****
  	* test_summary: Include baseline used for libstdc++-v3 abi check
  	in test summary.
  
! 2004-07-01  Release Manager
  
! 	* GCC 3.4.1 released.
  
! 2004-06-09  Arnaud Charlet  <charlet@act-europe.fr>
  
! 	PR ada/14150
! 	* gcc_update (files_and_dependencies): Remove gcc/ada/*.texi.
  
  2004-05-15  Joseph S. Myers  <jsm@polyomino.org.uk>
  
  	* gennews: Update for GCC 3.4.
  
! 2004-04-18  Release Manager
  
! 	* GCC 3.4.0 released.
  
  2004-01-09  Kelley Cook  <kcook@gcc.gnu.org>
  
--- 58,167 ----
  	* test_summary: Include baseline used for libstdc++-v3 abi check
  	in test summary.
  
! 2004-08-25  Ben Elliston  <bje@au.ibm.com>
  
! 	* gcc_update (libcpp/Makefile.in): Remove libcpp/Makefile.am.
  
! 2004-08-20  Andreas Tobler  <a.tobler@schweiz.ch>
  
! 	* gcc_update (self): libjava/configure.in -> configure.ac. Automake
! 	update done.
! 
! 2004-08-04  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* gcc_update: libjava/configure.ac -> configure.in.  Automake
! 	1.4 does not handle configure.ac properly.
! 
! 2004-08-04  Andreas Schwab  <schwab@suse.de>
! 
! 	* gcc_update: libjava/configure.in -> configure.ac.
! 
! 2004-08-03  Richard Earnshaw <rearnsha@arm.com>
! 
! 	* gcc_update: gcc/config/arm/arm-tune.md -> arm-cores.def gentune.sh.
! 
! 2004-07-16  Jeff Law  <law@redhat.com>
! 
! 	* analyze_brprob: Fix comments.  More consistent output format.
! 
! 2004-06-17  Diego Novillo  <dnovillo@redhat.com>
! 
! 	* tree-ssa.doxy: Update for doxygen 1.3.5.
! 
! 2004-06-14  Andreas Jaeger  <aj@suse.de>
! 
! 	* gcc_update: boehm-gc/configure.in -> configure.ac.
! 
! 2004-06-16  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* gcc_update (boehm-gc/configure): Depend on
! 	boehm-gc/configure.ac instead of boehm-gc/configure.in
! 
! 2004-06-14  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* gcc_update (libmudflap/configure): Depend on
! 	libmudflap/configure.ac instead of libmudflap/configure.in
! 
! 2004-06-14  Andreas Jaeger  <aj@suse.de>
! 
! 	* gcc_update: Add libcpp.
! 
! 2004-06-10  Andreas Jaeger  <aj@suse.de>
! 
! 	* gcc_update: Add libgfortran.
! 
! 2004-05-29  Andrew Pinski  <pinskia@physics.uc.edu>
! 
! 	* gcc_update (libbanshee/configure): Depend on
! 	libbanshee/configure.ac instead of libbanshee/configure.in
! 
! 2004-05-17  Zack Weinberg  <zack@codesourcery.com>
! 
! 	* gcc_update: Remove gcc/f/intdoc.texi and all libf2c files
! 	from list of files to be touched.
! 	* convert_to_f2c, convert_to_g2c, download_f2c: Delete.
  
  2004-05-15  Joseph S. Myers  <jsm@polyomino.org.uk>
  
  	* gennews: Update for GCC 3.4.
  
! 2004-05-13  Diego Novillo  <dnovillo@redhat.com>
  
! 	Merge from tree-ssa-20020619-branch.
! 
! 	* filter_gcc_for_doxygen: New file.
! 	* filter_knr2ansi.pl: New file.
! 	* filter_params.pl: New file.
! 	* tree-ssa.doxy: New file.
! 	* contrib/gcc_update (files_and_dependencies): Handle
! 	libbanshee and libmudflap.
! 
! 2004-04-12  Kelley Cook  <kcook@gcc.gnu.org>
! 	    Andreas Jaeger  <aj@suse.de>
! 
! 	* gcc_update (files_and_dependencies): Insert zlib dependencies.
! 
! 2004-04-09  Nathanael Nerode  <neroden@gcc.gnu.org>
! 
! 	* gcc_update (files_and_dependencies): libobjc/configure now
! 	depends on configure.ac, not configure.in.
! 
! 2004-04-01  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* gcc_update (files_and_dependencies): Remove gcc/ada/*.texi.
! 
! 2004-03-16  Andreas Tobler  <a.tobler@schweiz.ch>
! 
! 	* gcc_update (files_and_dependencies): Insert libffi dependencies.
! 
! 2004-03-10  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* gcc_update (files_and_dependencies): Insert libada/configure.
! 
! 2004-02-29  Andrew Pinski  <pinskia@physics.uc.edu>
! 
! 	* gcc_update (files_and_dependencies): Update intl/configure.in
! 	to intl/configure.ac.
  
  2004-01-09  Kelley Cook  <kcook@gcc.gnu.org>
  
diff -Nrcpad gcc-3.4.3/contrib/ChangeLog.tree-ssa gcc-4.0.0/contrib/ChangeLog.tree-ssa
*** gcc-3.4.3/contrib/ChangeLog.tree-ssa	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/contrib/ChangeLog.tree-ssa	Thu May 13 06:39:08 2004
***************
*** 0 ****
--- 1,46 ----
+ 2004-03-25  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* gcc_update (files_and_dependencies): Add libbanshee and
+ 	libmudflap dependencies.
+ 
+ 2003-11-27  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa.doxy (FILE_PATTERNS): Update.
+ 
+ 2003-11-21  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa.doxy: Do not generate latex output.
+ 
+ 2003-07-21  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa.doxy: Include tree* files
+ 
+ 2003-07-15  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa.doxy: Add tree-must-alias.c.
+ 
+ 2003-01-28  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* filter_params.pl: Surround comments in @verbatim/@endverbatim.
+ 
+ 2003-01-19  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa.doxy (OUTPUT_DIRECTORY, INPUT_FILTER): Replace
+ 	hardwired values for with replaceable strings.
+ 
+ 2003-01-18  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* filter_params.pl: Change most comments to start with /**.
+ 
+ 2002-12-23  Steven Bosscher <Steven.Bosscher@usafa.af.mil>
+ 
+ 	* filter_params.pl: Filter ATTRIBUTE_UNUSED.
+ 
+ 2002-12-12  Daniel Berlin  <dberlin@dberlin.org>
+ 	    Steven Bosscher <Steven.Bosscher@usafa.af.mil>
+ 	    Diego Novillo <dnovillo@redhat.com>
+ 
+ 	* filter_gcc_for_doxygen: New file.
+ 	* filter_knr2ansi.pl: New file.
+ 	* filter_params.pl: New file.
+ 	* tree-ssa.doxy: New file.
diff -Nrcpad gcc-3.4.3/contrib/analyze_brprob gcc-4.0.0/contrib/analyze_brprob
*** gcc-3.4.3/contrib/analyze_brprob	Fri May 23 16:20:44 2003
--- gcc-4.0.0/contrib/analyze_brprob	Fri Jul 16 18:58:00 2004
***************
*** 33,39 ****
  #  Step 1: Compile and profile your program.  You need to use -fprofile-arcs
  #    flag to get the profiles
  #  Step 2: Generate log files.  The information about given heuristics are
! #    saved into *.life dumps.  You need to pass the -df switch to the compiler as well
  #    as -fbranch-probabilities to get the results of profiling noted in the dumps.
  #    Ensure that there are no "Arc profiling: some edge counts were bad." warnings.
  #  Step 3: Run this script to concatenate all *.life files:
--- 33,39 ----
  #  Step 1: Compile and profile your program.  You need to use -fprofile-arcs
  #    flag to get the profiles
  #  Step 2: Generate log files.  The information about given heuristics are
! #    saved into *.bp dumps.  You need to pass the -db switch to the compiler as well
  #    as -fbranch-probabilities to get the results of profiling noted in the dumps.
  #    Ensure that there are no "Arc profiling: some edge counts were bad." warnings.
  #  Step 3: Run this script to concatenate all *.life files:
*************** END {
*** 131,142 ****
    maxcounts = longeval(counts["combined"])
    maxbranches = branches["combined"]
    max = names["combined"]
!   printf("HEURISTICS                  BRANCHES  (REL)  HITRATE             COVERAGE  (REL)\n")
    for (i = 0; i < nnames ; i++)
     {
       name = names[i]
       counts[name] = longeval(counts[name])
!      printf ("%-27s %8i %5.1f%% %6s%%/%6s%% %12s %5.1f%%\n",
  	     name,
  	     branches[name], branches[name] * 100 / maxbranches,
  	     longeval("("hits[name]") * 100 /(" counts[name]"-0.00001)"),
--- 131,142 ----
    maxcounts = longeval(counts["combined"])
    maxbranches = branches["combined"]
    max = names["combined"]
!   printf("HEURISTICS                 BRANCHES  (REL)  HITRATE              COVERAGE  (REL)\n")
    for (i = 0; i < nnames ; i++)
     {
       name = names[i]
       counts[name] = longeval(counts[name])
!      printf ("%-26s %8i %5.1f%% %6s%% / %6s%% %12s %5.1f%%\n",
  	     name,
  	     branches[name], branches[name] * 100 / maxbranches,
  	     longeval("("hits[name]") * 100 /(" counts[name]"-0.00001)"),
diff -Nrcpad gcc-3.4.3/contrib/convert_to_f2c gcc-4.0.0/contrib/convert_to_f2c
*** gcc-3.4.3/contrib/convert_to_f2c	Sat Sep 11 21:53:17 1999
--- gcc-4.0.0/contrib/convert_to_f2c	Thu Jan  1 00:00:00 1970
***************
*** 1,48 ****
- #!/bin/sh
- #
- # convert_to_f2c [g2c-dir]
- #
- # Renames certain files in a g2c (libg2c) directory so they no longer have the
- # `.netlib' suffix, a la netlib's f2c distribution.  If `g2c-dir' is not
- # specified, `g2c-YYYYMMDD' is the default, where YYYYMMDD is the current
- # date.  The directory is renamed such that the first `g' becomes an `f',
- # usually `g2c-YYYYMMDD' -> `f2c-YYYYMMDD'.
- #
- # (C) 1999 Free Software Foundation
- # Originally by James Craig Burley <craig@jcb-sc.com>, September 1999.
- #
- # This script is Free Software, and it can be copied, distributed and
- # modified as defined in the GNU General Public License.  A copy of
- # its license can be downloaded from http://www.gnu.org/copyleft/gpl.html
- 
- set -e
- 
- if [ x$1 = x ]
- then
-   dir=g2c-`date +%Y%m%d`
- else
-   dir=$1
- fi
- 
- newdir=`echo $dir | sed -e "s:g:f:"`
- 
- cd $dir
- 
- set +e
- 
- mv -i changes.netlib changes
- mv -i disclaimer.netlib disclaimer
- mv -i g2c.hin f2c.h
- mv -i permission.netlib permission
- mv -i readme.netlib readme
- cd libF77
- mv -i README.netlib README
- mv -i makefile.netlib makefile
- cd ../libI77
- mv -i README.netlib README
- mv -i makefile.netlib makefile
- cd ..
- 
- cd ..
- 
- mv -iv $dir $newdir
--- 0 ----
diff -Nrcpad gcc-3.4.3/contrib/convert_to_g2c gcc-4.0.0/contrib/convert_to_g2c
*** gcc-3.4.3/contrib/convert_to_g2c	Sat Sep 11 21:53:17 1999
--- gcc-4.0.0/contrib/convert_to_g2c	Thu Jan  1 00:00:00 1970
***************
*** 1,48 ****
- #!/bin/sh
- #
- # convert_to_g2c [f2c-dir]
- #
- # Renames certain files in a netlib f2c directory so they have the `.netlib'
- # suffix, a la g77's version of f2c (libg2c).  If `f2c-dir' is not specified,
- # `f2c-YYYYMMDD' is the default, where YYYYMMDD is the current date.
- # The directory is renamed such that the first `f' becomes a `g',
- # usually `f2c-YYYYMMDD' -> `g2c-YYYYMMDD'.
- #
- # (C) 1999 Free Software Foundation
- # Originally by James Craig Burley <craig@jcb-sc.com>, September 1999.
- #
- # This script is Free Software, and it can be copied, distributed and
- # modified as defined in the GNU General Public License.  A copy of
- # its license can be downloaded from http://www.gnu.org/copyleft/gpl.html
- 
- set -e
- 
- if [ x$1 = x ]
- then
-   dir=f2c-`date +%Y%m%d`
- else
-   dir=$1
- fi
- 
- newdir=`echo $dir | sed -e "s:f:g:"`
- 
- cd $dir
- 
- set +e
- 
- mv -i changes changes.netlib
- mv -i disclaimer disclaimer.netlib
- mv -i f2c.h g2c.hin
- mv -i permission permission.netlib
- mv -i readme readme.netlib
- cd libF77
- mv -i README README.netlib
- mv -i makefile makefile.netlib
- cd ../libI77
- mv -i README README.netlib
- mv -i makefile makefile.netlib
- cd ..
- 
- cd ..
- 
- mv -iv $dir $newdir
--- 0 ----
diff -Nrcpad gcc-3.4.3/contrib/download_f2c gcc-4.0.0/contrib/download_f2c
*** gcc-3.4.3/contrib/download_f2c	Sat Sep 11 21:53:17 1999
--- gcc-4.0.0/contrib/download_f2c	Thu Jan  1 00:00:00 1970
***************
*** 1,77 ****
- #!/bin/sh
- #
- # download_f2c
- #
- # Unpacks a directory full of f2c stuff obtained from netlib, naming
- # the directory f2c-YYYYMMDD (YYYYMMDD being the current date),
- # leaving it in current working directory.
- #
- # This shell script downloads the tarball from netlib, unpacks everything,
- # and strips off the redundant files, leaving a bare-bones (but fully
- # reproducible) f2c source directory.  (You must have yacc/bison to rebuild
- # gram.c, by the way.)
- #
- # (C) 1999 Free Software Foundation
- # Originally by James Craig Burley <craig@jcb-sc.com>, September 1999.
- #
- # This script is Free Software, and it can be copied, distributed and
- # modified as defined in the GNU General Public License.  A copy of
- # its license can be downloaded from http://www.gnu.org/copyleft/gpl.html
- #
- # FIXME: Replace WHOAMI with whatever is the canonical way to
- # obtain the user's email address these days.
- 
- dir=f2c-`date +%Y%m%d`
- if [ ! -d $dir ]
- then
-   mkdir $dir
- fi
- cd $dir
- 
- echo Preparing $dir...
- 
- if [ ! -d tmp ]
- then
-   mkdir tmp
- fi
- 
- if [ ! -f tmp/f2c.tar ]
- then
-   cd tmp
-   echo Downloading f2c.tar via ftp...
-   ftp -n netlib.bell-labs.com <<EOF
-   user ftp WHOAMI
-   type binary
-   cd netlib
-   get f2c.tar
-   quit
- EOF
-   cd ..
- fi
- 
- echo Unpacking f2c.tar...
- 
- tar xf tmp/f2c.tar
- cd f2c
- find . -name "*.gz" -print | sed -e "s:^\(.*\).gz:rm -f \1.Z:g" | sh
- mv src libf77.gz libi77.gz f2c.1t.gz f2c.h.gz changes.gz disclaimer.gz readme.gz permission.gz ..
- cd ..
- rm -fr f2c
- gunzip *.gz
- (cd src; rm -f MD5 MD5.gz gram.c.gz .depend .depend.gz f2c.1.gz index.html index.html.gz; gunzip *.gz)
- sh libf77 > /dev/null && rm libf77
- rm -f libF77/xsum0.out libF77/libF77.xsum
- sh libi77 > /dev/null && rm libi77
- rm -f libI77/xsum0.out libI77/libI77.xsum
- rm -f src/xsum0.out
- touch src/xsum.out
- cmp f2c.h src/f2c.h && rm -fv src/f2c.h
- cmp src/readme src/README && rm -fv src/readme
- 
- echo Deleting f2c.tar...
- rm tmp/f2c.tar
- rmdir tmp
- 
- cd ..
- 
- echo Latest f2c now in $dir.
--- 0 ----
diff -Nrcpad gcc-3.4.3/contrib/filter_gcc_for_doxygen gcc-4.0.0/contrib/filter_gcc_for_doxygen
*** gcc-3.4.3/contrib/filter_gcc_for_doxygen	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/contrib/filter_gcc_for_doxygen	Thu May 13 06:39:08 2004
***************
*** 0 ****
--- 1,12 ----
+ #!/bin/sh
+ 
+ # This filters GCC source before Doxygen can get confused by it;
+ # this script is listed in the doxyfile. The output is not very
+ # pretty, but at least we get output that Doxygen can understand.
+ #
+ # $1 is a source file of some kind. The source we wish doxygen to
+ # process is put on stdout.
+ 
+ dir=`dirname $0`
+ perl $dir/filter_params.pl < $1 | perl $dir/filter_knr2ansi.pl 
+ exit 0
diff -Nrcpad gcc-3.4.3/contrib/filter_knr2ansi.pl gcc-4.0.0/contrib/filter_knr2ansi.pl
*** gcc-3.4.3/contrib/filter_knr2ansi.pl	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/contrib/filter_knr2ansi.pl	Thu May 13 06:39:08 2004
***************
*** 0 ****
--- 1,45 ----
+ #!/usr/bin/perl
+ #
+ # Goes thourgh the input line by line to find K&R style function
+ # declarations, and replaces them with ANSI style declarations.
+ #
+ @blah = <>;
+ 
+ for ($i = 0; $i < @blah; $i++)
+ {
+ 	if ($blah[$i] =~ /^([a-zA-Z_0-9]+)\s*\([^)]+\)\s*$/)
+ 	{
+ 		$name = $1;
+ 		$funci = $i;
+ 		$blah[$funci]="$name (";
+ 		$i++;
+ 		$lastline = $i;
+ 		while ($lastline < @blah && $blah[$lastline] !~ /^{/)
+ 		{
+ 			$lastline++;
+ 		}
+ 		$lastline--;
+ 		while ($i < @blah && $blah[$i] !~ /^{/)
+ 		{
+ 			$arg = $blah[$i];
+ 			if ($i != $lastline)
+ 			{
+ 				$arg =~ s/;/,/g;
+ 			}
+ 			else
+ 			{
+ 				$arg =~ s/;//g;
+ 			}
+ 			$blah[$i] = "";
+ 			$blah[$funci] = "$blah[$funci]" . "$arg";
+ 			$i++;
+ 		}
+ 		$blah[$funci] = "$blah[$funci]" . ")\n";
+ 	}
+ }
+ 
+ for ($i = 0; $i < @blah; $i++)
+ {
+ 	print $blah[$i];
+ }
+ 
diff -Nrcpad gcc-3.4.3/contrib/filter_params.pl gcc-4.0.0/contrib/filter_params.pl
*** gcc-3.4.3/contrib/filter_params.pl	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/contrib/filter_params.pl	Thu May 13 06:39:08 2004
***************
*** 0 ****
--- 1,14 ----
+ #!/usr/bin/perl
+ 
+ # Filters out some of the #defines used thourghout the GCC sources:
+ # - GTY(()) marks declarations for gengtype.c
+ # - PARAMS(()) is used for K&R compatibility. See ansidecl.h.
+ 
+ while (<>) {
+     s/^\/\* /\/\*\* \@verbatim /;
+     s/\*\// \@endverbatim \*\//;
+     s/GTY[ \t]*\(\(.*\)\)//g;
+     s/[ \t]ATTRIBUTE_UNUSED//g;
+     s/PARAMS[ \t]*\(\((.*?)\)\)/\($1\)/sg;
+     print;
+ }
diff -Nrcpad gcc-3.4.3/contrib/gcc_update gcc-4.0.0/contrib/gcc_update
*** gcc-3.4.3/contrib/gcc_update	Wed Jun  9 09:15:14 2004
--- gcc-4.0.0/contrib/gcc_update	Tue Mar 22 06:46:23 2005
***************
*** 19,24 ****
--- 19,27 ----
  # If the first parameter is --list, a list of the generated files and
  # their dependencies will be printed; --help prints this message.
  #
+ # If the first parameter is --silent, this script prints nothing other
+ # than error messages; the second parameter is then interpreted as above.
+ #
  # Examples:
  #
  # contrib/gcc_update -r gcc_latest_snapshot
***************
*** 29,35 ****
  # contrib/gcc_update --list
  #
  #
! # (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation
  # Originally by Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>, August 1998.
  #
  # This script is Free Software, and it can be copied, distributed and
--- 32,38 ----
  # contrib/gcc_update --list
  #
  #
! # (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation
  # Originally by Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>, August 1998.
  #
  # This script is Free Software, and it can be copied, distributed and
*************** UPDATE_OPTIONS=-Pd
*** 51,100 ****
  # Arrange for the value of $0 to be available for functions
  self=$0
  
  # This function prints a list of all generated files, along with their
  # dependencies.  Note that only one target is supported per line: the
  # colon is stripped from the output.
  files_and_dependencies () {
      sed -e 's/ *#.*//' -e '/^$/d' -e 's/://' <<\EOF
  # intl library
  intl/plural.c: intl/plural.y
! intl/configure: intl/configure.in intl/aclocal.m4
! intl/config.h.in: intl/configure.in intl/aclocal.m4
  # Now, proceed to gcc automatically generated files
  gcc/configure: gcc/configure.ac
  gcc/cstamp-h.in: gcc/configure.ac
  gcc/config.in: gcc/cstamp-h.in
  gcc/fixinc/fixincl.x: gcc/fixinc/fixincl.tpl gcc/fixinc/inclhack.def
  # And then, language-specific files
- gcc/f/intdoc.texi: gcc/f/intdoc.in gcc/f/intdoc.c gcc/f/intrin.h gcc/f/intrin.def
  gcc/cp/cfns.h: gcc/cp/cfns.gperf
  gcc/java/keyword.h: gcc/java/keyword.gperf
  # testsuite
  # Without this, _Pragma3.c can have a false negative.
  gcc/testsuite/gcc.dg/cpp/_Pragma3.c: gcc/testsuite/gcc.dg/cpp/mi1c.h
  # And libraries, at last
! libf2c/configure: libf2c/configure.in
! libf2c/libF77/configure: libf2c/libF77/configure.in
! libf2c/libI77/configure: libf2c/libI77/configure.in
! libf2c/libI77/stamp-h.in: libf2c/libI77/configure.in
! libf2c/libI77/config.h.in: libf2c/libI77/configure.in libf2c/libI77/stamp-h.in
! libf2c/libU77/configure: libf2c/libU77/configure.in
! libf2c/libU77/stamp-h.in: libf2c/libU77/configure.in libf2c/libU77/acconfig.h
! libobjc/configure: libobjc/configure.in
! # fastjar
  fastjar/aclocal.m4: fastjar/configure.ac
  fastjar/Makefile.in: fastjar/Makefile.am fastjar/configure.ac fastjar/aclocal.m4
  fastjar/configure: fastjar/configure.ac fastjar/aclocal.m4
! boehm-gc/aclocal.m4: boehm-gc/configure.in boehm-gc/acinclude.m4
! boehm-gc/Makefile.in: boehm-gc/Makefile.am boehm-gc/configure.in boehm-gc/aclocal.m4
! boehm-gc/configure: boehm-gc/configure.in boehm-gc/aclocal.m4
! libjava/aclocal.m4: libjava/configure.in libjava/acinclude.m4
! libjava/Makefile.in: libjava/Makefile.am libjava/configure.in libjava/aclocal.m4
! libjava/configure: libjava/configure.in libjava/aclocal.m4
  libjava/libltdl/aclocal.m4: libjava/libltdl/configure.ac libjava/libltdl/acinclude.m4
  libjava/libltdl/Makefile.in: libjava/libltdl/Makefile.am libjava/libltdl/configure.ac libjava/libltdl/aclocal.m4
  libjava/libltdl/configure: libjava/libltdl/configure.ac libjava/libltdl/aclocal.m4
  libjava/libltdl/config-h.in: libjava/libltdl/configure.ac libjava/libltdl/aclocal.m4
  # Top level
  Makefile.in: Makefile.tpl Makefile.def
  configure: configure.in config/acx.m4
--- 54,123 ----
  # Arrange for the value of $0 to be available for functions
  self=$0
  
+ # This function prints its arguments to standard output unless
+ # "silent" is set.
+ unset silent
+ chat () {
+     if [ -z "$silent" ]; then
+         echo "$@"
+     fi
+ }
+ 
  # This function prints a list of all generated files, along with their
  # dependencies.  Note that only one target is supported per line: the
  # colon is stripped from the output.
  files_and_dependencies () {
      sed -e 's/ *#.*//' -e '/^$/d' -e 's/://' <<\EOF
+ # fixincludes
+ fixincludes/configure: fixincludes/configure.ac fixincludes/aclocal.m4
+ fixincludes/config.h.in: fixincludes/configure.ac fixincludes/aclocal.m4
  # intl library
  intl/plural.c: intl/plural.y
! intl/configure: intl/configure.ac intl/aclocal.m4
! intl/config.h.in: intl/configure.ac intl/aclocal.m4
  # Now, proceed to gcc automatically generated files
  gcc/configure: gcc/configure.ac
  gcc/cstamp-h.in: gcc/configure.ac
  gcc/config.in: gcc/cstamp-h.in
  gcc/fixinc/fixincl.x: gcc/fixinc/fixincl.tpl gcc/fixinc/inclhack.def
+ gcc/config/arm/arm-tune.md: gcc/config/arm/arm-cores.def gcc/config/arm/gentune.sh
  # And then, language-specific files
  gcc/cp/cfns.h: gcc/cp/cfns.gperf
  gcc/java/keyword.h: gcc/java/keyword.gperf
  # testsuite
  # Without this, _Pragma3.c can have a false negative.
  gcc/testsuite/gcc.dg/cpp/_Pragma3.c: gcc/testsuite/gcc.dg/cpp/mi1c.h
  # And libraries, at last
! libbanshee/configure: libbanshee/configure.ac
! libmudflap/configure: libmudflap/configure.ac
! libobjc/configure: libobjc/configure.ac
! zlib/aclocal.m4: zlib/configure.ac zlib/acinclude.m4
! zlib/Makefile.in: zlib/Makefile.am zlib/configure.ac zlib/aclocal.m4
! zlib/configure: zlib/configure.ac zlib/aclocal.m4
  fastjar/aclocal.m4: fastjar/configure.ac
  fastjar/Makefile.in: fastjar/Makefile.am fastjar/configure.ac fastjar/aclocal.m4
  fastjar/configure: fastjar/configure.ac fastjar/aclocal.m4
! boehm-gc/aclocal.m4: boehm-gc/configure.ac
! boehm-gc/Makefile.in: boehm-gc/Makefile.am boehm-gc/configure.ac boehm-gc/aclocal.m4
! boehm-gc/configure: boehm-gc/configure.ac boehm-gc/aclocal.m4
! libada/configure: libada/configure.ac
! libffi/aclocal.m4: libffi/configure.ac libffi/acinclude.m4
! libffi/Makefile.in: libffi/Makefile.am libffi/configure.ac libffi/aclocal.m4
! libffi/configure: libffi/configure.ac libffi/aclocal.m4
! libffi/fficonfig.h.in: libffi/configure.ac libffi/aclocal.m4
! libgfortran/aclocal.m4: libgfortran/configure.ac libgfortran/acinclude.m4
! libgfortran/Makefile.in: libgfortran/Makefile.am libgfortran/configure.ac libgfortran/aclocal.m4
! libgfortran/configure: libgfortran/configure.ac libgfortran/aclocal.m4
! libjava/aclocal.m4: libjava/configure.ac libjava/acinclude.m4
! libjava/Makefile.in: libjava/Makefile.am libjava/configure.ac libjava/aclocal.m4
! libjava/configure: libjava/configure.ac libjava/aclocal.m4
  libjava/libltdl/aclocal.m4: libjava/libltdl/configure.ac libjava/libltdl/acinclude.m4
  libjava/libltdl/Makefile.in: libjava/libltdl/Makefile.am libjava/libltdl/configure.ac libjava/libltdl/aclocal.m4
  libjava/libltdl/configure: libjava/libltdl/configure.ac libjava/libltdl/aclocal.m4
  libjava/libltdl/config-h.in: libjava/libltdl/configure.ac libjava/libltdl/aclocal.m4
+ libcpp/aclocal.m4: libcpp/configure.ac
+ libcpp/Makefile.in: libcpp/configure.ac libcpp/aclocal.m4
+ libcpp/configure: libcpp/configure.ac libcpp/aclocal.m4
  # Top level
  Makefile.in: Makefile.tpl Makefile.def
  configure: configure.in config/acx.m4
*************** touch_files () {
*** 114,123 ****
      echo ':' >> Makefile.$$
      echo '	@for f in $? $@; do test -f $$f || exit 0; done; \' >> Makefile.$$
      echo '	echo Touching $@...; \' >> Makefile.$$
!     echo '	echo Touching $@... 1>&2; \' >> Makefile.$$
      echo '	touch $@' >> Makefile.$$
      files_and_dependencies | sed 's,[^ ]* ,,;s,$, :,' >> Makefile.$$
!     while ${MAKE-make} -s -f Makefile.$$ all | grep . > /dev/null; do
        sleep 1
      done 2>&1
      rm -f Makefile.$$
--- 137,155 ----
      echo ':' >> Makefile.$$
      echo '	@for f in $? $@; do test -f $$f || exit 0; done; \' >> Makefile.$$
      echo '	echo Touching $@...; \' >> Makefile.$$
!     chat '	echo Touching $@... 1>&2; \' >> Makefile.$$
      echo '	touch $@' >> Makefile.$$
      files_and_dependencies | sed 's,[^ ]* ,,;s,$, :,' >> Makefile.$$
! 
!     # We would have to explicitly shut off the "Entering... Leaving..."
!     # messages through "--no-print-directory" to handle the case when
!     # we were called from a recursive invocation (i.e. "$(MAKE)" in a
!     # Makefile, not just make).  Passing only "-s" doesn't help then,
!     # because make has helpfully added "-w" to MAKEFLAGS automatically.
!     # Unfortunately we do not require GNU make other than for building
!     # and testing, so let's just grep known text explicitly echoed by
!     # the rule.
!     while ${MAKE-make} -s -f Makefile.$$ all | grep Touching > /dev/null; do
        sleep 1
      done 2>&1
      rm -f Makefile.$$
*************** touch_files () {
*** 128,148 ****
  # this script.  By re-execing it, we ensure that the appropriate
  # dependencies and rules will be used.
  touch_files_reexec () {
!     echo "Adjusting file timestamps"
!     exec ${CONFIG_SHELL-/bin/sh} $self --touch
  }
  
  # This functions applies a patch to an existing tree.
  apply_patch () {
!     if [ -f $1 ]; then
  	echo "Applying patch file $1"
! 	case "$1" in
  	*gz)
! 	    gzip -d -c $1 | patch -p1 ;;
  	*bz2)
! 	    bzip2 -d -c $1 | patch -p1 ;;
  	*)
! 	    cat $1 | patch -p1 ;;
  	esac
      fi
      touch_files_reexec
--- 160,180 ----
  # this script.  By re-execing it, we ensure that the appropriate
  # dependencies and rules will be used.
  touch_files_reexec () {
!     chat "Adjusting file timestamps"
!     exec ${CONFIG_SHELL-/bin/sh} $self ${silent+"--silent"} --touch
  }
  
  # This functions applies a patch to an existing tree.
  apply_patch () {
!     if [ -f "$1" ]; then
  	echo "Applying patch file $1"
! 	case $1 in
  	*gz)
! 	    gzip -d -c "$1" | patch -p1 ;;
  	*bz2)
! 	    bzip2 -d -c "$1" | patch -p1 ;;
  	*)
! 	    patch -p1 < "$1";;
  	esac
      fi
      touch_files_reexec
*************** if [ ! -f gcc/version.c ]; then
*** 155,160 ****
--- 187,199 ----
  fi
  
  case "$1" in
+ --silent)
+     silent=t
+     shift
+     ;;
+ esac
+ 
+ case "$1" in
  # First of all, check whether we are going to process a patch.
  --patch)
      if test "$#" != 2; then
*************** else
*** 208,215 ****
      set -- $UPDATE_OPTIONS ${1+"$@"}
  fi
  
! echo "Updating CVS tree"
! $GCC_CVS -q update ${1+"$@"}
  if [ $? -ne 0 ]; then
      (touch_files_reexec)
      echo "CVS update of full tree failed." >&2
--- 247,255 ----
      set -- $UPDATE_OPTIONS ${1+"$@"}
  fi
  
! chat "Updating CVS tree"
! 
! $GCC_CVS -q ${silent+-Q} update ${1+"$@"}
  if [ $? -ne 0 ]; then
      (touch_files_reexec)
      echo "CVS update of full tree failed." >&2
diff -Nrcpad gcc-3.4.3/contrib/gennews gcc-4.0.0/contrib/gennews
*** gcc-3.4.3/contrib/gennews	Sat May 15 09:51:28 2004
--- gcc-4.0.0/contrib/gennews	Sun Apr 17 11:20:25 2005
***************
*** 3,9 ****
  # Script to generate the NEWS file from online release notes.
  # Contributed by Joseph Myers <jsm28@cam.ac.uk>.
  #
! # Copyright (C) 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
  # This file is part of GCC.
  #
  # GCC is free software; you can redistribute it and/or modify
--- 3,9 ----
  # Script to generate the NEWS file from online release notes.
  # Contributed by Joseph Myers <jsm28@cam.ac.uk>.
  #
! # Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
  # This file is part of GCC.
  #
  # GCC is free software; you can redistribute it and/or modify
***************
*** 22,28 ****
  # Boston, MA 02111-1307, USA.
  
  website=http://gcc.gnu.org/
! files="gcc-3.4/index.html gcc-3.4/changes.html
      gcc-3.3/index.html gcc-3.3/changes.html
      gcc-3.2/index.html gcc-3.2/changes.html
      gcc-3.1/index.html gcc-3.1/changes.html
--- 22,29 ----
  # Boston, MA 02111-1307, USA.
  
  website=http://gcc.gnu.org/
! files="gcc-4.0/index.html gcc-4.0/changes.html
!     gcc-3.4/index.html gcc-3.4/changes.html
      gcc-3.3/index.html gcc-3.3/changes.html
      gcc-3.2/index.html gcc-3.2/changes.html
      gcc-3.1/index.html gcc-3.1/changes.html
diff -Nrcpad gcc-3.4.3/contrib/reghunt/ChangeLog gcc-4.0.0/contrib/reghunt/ChangeLog
*** gcc-3.4.3/contrib/reghunt/ChangeLog	Fri Nov  5 03:33:21 2004
--- gcc-4.0.0/contrib/reghunt/ChangeLog	Thu Apr 21 05:17:24 2005
***************
*** 1,18 ****
! 2004-11-04  Release Manager
! 
! 	* GCC 3.4.3 released.
! 
! 2004-09-06  Release Manager
! 
! 	* GCC 3.4.2 released.
! 
! 2004-07-01  Release Manager
  
! 	* GCC 3.4.1 released.
  
! 2004-04-18  Release Manager
  
! 	* GCC 3.4.0 released.
  
  2003-06-24  Janis Johnson  <janis187@us.ibm.com>
  
--- 1,10 ----
! 2005-04-20  Release Manager
  
! 	* GCC 4.0.0 released.
  
! 2005-01-17  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* reg_periodic, reg_search: Fix the uses of date command.
  
  2003-06-24  Janis Johnson  <janis187@us.ibm.com>
  
diff -Nrcpad gcc-3.4.3/contrib/reghunt/reg_periodic gcc-4.0.0/contrib/reghunt/reg_periodic
*** gcc-3.4.3/contrib/reghunt/reg_periodic	Tue Jun 24 17:18:39 2003
--- gcc-4.0.0/contrib/reghunt/reg_periodic	Tue Jan 18 02:04:51 2005
***************
*** 25,31 ****
  #               is STOP in the current directory.
  #
  #
! # Copyright (c) 2002, 2003 Free Software Foundation, Inc.
  #
  # This file is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
--- 25,31 ----
  #               is STOP in the current directory.
  #
  #
! # Copyright (c) 2002, 2003, 2005 Free Software Foundation, Inc.
  #
  # This file is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
*************** error() {
*** 70,76 ****
  # control tools and report to the user.
  
  make_date() {
!   MADE_DATE="`${DATE} -u +\"%Y-%m-%d %H:%M %Z\" --date \"1970-01-01 00:00:${1}\"`" \
      || error "make_date: date command failed"
  }
  
--- 70,76 ----
  # control tools and report to the user.
  
  make_date() {
!   MADE_DATE="`${DATE} -u +\"%Y-%m-%d %H:%M %Z\" --date \"1970-01-01 ${1} seconds\"`" \
      || error "make_date: date command failed"
  }
  
diff -Nrcpad gcc-3.4.3/contrib/reghunt/reg_search gcc-4.0.0/contrib/reghunt/reg_search
*** gcc-3.4.3/contrib/reghunt/reg_search	Tue Jun 24 17:18:39 2003
--- gcc-4.0.0/contrib/reghunt/reg_search	Tue Jan 18 02:04:51 2005
***************
*** 45,51 ****
  #
  #
  #
! # Copyright (c) 2002, 2003 Free Software Foundation, Inc.
  #
  # This file is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
--- 45,51 ----
  #
  #
  #
! # Copyright (c) 2002, 2003, 2005 Free Software Foundation, Inc.
  #
  # This file is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
*************** error() {
*** 96,102 ****
  # control tools and report to the user.
  
  make_date() {
!   MADE_DATE="`${DATE} -u +\"%Y-%m-%d %H:%M %Z\" --date \"1970-01-01 00:00:${1}\"`" \
      || error "make_date: date command failed"
  }
  
--- 96,102 ----
  # control tools and report to the user.
  
  make_date() {
!   MADE_DATE="`${DATE} -u +\"%Y-%m-%d %H:%M %Z\" --date \"1970-01-01 ${1} seconds\"`" \
      || error "make_date: date command failed"
  }
  
diff -Nrcpad gcc-3.4.3/contrib/regression/ChangeLog gcc-4.0.0/contrib/regression/ChangeLog
*** gcc-3.4.3/contrib/regression/ChangeLog	Fri Nov  5 03:33:24 2004
--- gcc-4.0.0/contrib/regression/ChangeLog	Thu Apr 21 05:17:26 2005
***************
*** 1,18 ****
! 2004-11-04  Release Manager
  
! 	* GCC 3.4.3 released.
  
! 2004-09-06  Release Manager
  
! 	* GCC 3.4.2 released.
  
! 2004-07-01  Release Manager
  
! 	* GCC 3.4.1 released.
  
! 2004-04-18  Release Manager
  
! 	* GCC 3.4.0 released.
  
  2003-09-18  Andreas Tobler  <a.tobler@schweiz.ch>
  
--- 1,24 ----
! 2005-04-20  Release Manager
  
! 	* GCC 4.0.0 released.
  
! 2004-11-07  James A. Morrison  <phython@gcc.gnu.org>
  
! 	* README: Update website URL.
  
! 2004-10-27  Geoffrey Keating  <geoffk@apple.com>
  
! 	* btest-gcc.sh (TESTLOGS): The libstdc++-v3 test log is called
! 	libstd++.sum not libstdc++-v3.sum.
  
! 2004-10-26  Geoffrey Keating  <geoffk@apple.com>
  
! 	* btest-gcc.sh (TESTLOGS): Examine regressions in libstdc++,
! 	libffi, and libjava.
! 
! 2004-05-13  Andrew Pinski  <pinskia@physics.uc.edu>
! 
! 	* btest-gcc.sh: Remove g77.sum from TESTLOGS.
  
  2003-09-18  Andreas Tobler  <a.tobler@schweiz.ch>
  
diff -Nrcpad gcc-3.4.3/contrib/regression/README gcc-4.0.0/contrib/regression/README
*** gcc-3.4.3/contrib/regression/README	Sat Feb  2 05:23:34 2002
--- gcc-4.0.0/contrib/regression/README	Sun Nov  7 17:08:09 2004
***************
*** 1,5 ****
  This directory contains scripts that are used by the regression
! tester, <http://people.redhat.com/geoffk/gcc-regression/>.
  
  The primary script is 'btest-gcc.sh'.  This is the script that is run
  to actually test the compiler.
--- 1,5 ----
  This directory contains scripts that are used by the regression
! tester, <http://gcc.gnu.org/regtest/>
  
  The primary script is 'btest-gcc.sh'.  This is the script that is run
  to actually test the compiler.
diff -Nrcpad gcc-3.4.3/contrib/regression/btest-gcc.sh gcc-4.0.0/contrib/regression/btest-gcc.sh
*** gcc-3.4.3/contrib/regression/btest-gcc.sh	Thu Sep 18 20:25:51 2003
--- gcc-4.0.0/contrib/regression/btest-gcc.sh	Wed Oct 27 18:19:41 2004
*************** H_REAL_TARGET=`$SOURCE/config.sub $H_TAR
*** 98,108 ****
  # look at.
  TESTLOGS="gcc/testsuite/gcc.sum
  gcc/testsuite/g++.sum
! gcc/testsuite/g77.sum
! gcc/testsuite/objc.sum"
! # $H_TARGET/libstdc++-v3/testsuite/libstdc++-v3.sum
! # $H_TARGET/libjava/testsuite/libjava.sum
! # $H_TARGET/libffi/testsuite/libffi.sum
  
  # Build.
  echo build > $RESULT
--- 98,105 ----
  # look at.
  TESTLOGS="gcc/testsuite/gcc.sum
  gcc/testsuite/g++.sum
! gcc/testsuite/objc.sum
! $H_TARGET/libstdc++-v3/testsuite/libstdc++.sum"
  
  # Build.
  echo build > $RESULT
*************** make check-target-libstdc++-v3
*** 128,136 ****
--- 125,139 ----
  
  # Test libffi
  make check-target-libffi
+ if [ -f $BUILD/$H_TARGET/libffi/testsuite/libffi.sum ] ; then
+   TESTLOGS="$TESTLOGS $H_TARGET/libffi/testsuite/libffi.sum"
+ fi
  
  # Test libjava
  make check-target-libjava
+ if [ -f $BUILD/$H_TARGET/libjava/testsuite/libjava.sum ] ; then
+   TESTLOGS="$TESTLOGS $H_TARGET/libjava/testsuite/libjava.sum"
+ fi
  
  # Test the just-built GCC with the GDB testsuite.
  if [ -d $GDB_TESTSUITE ] ; then
diff -Nrcpad gcc-3.4.3/contrib/tree-ssa.doxy gcc-4.0.0/contrib/tree-ssa.doxy
*** gcc-3.4.3/contrib/tree-ssa.doxy	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/contrib/tree-ssa.doxy	Thu Jun 17 11:40:27 2004
***************
*** 0 ****
--- 1,1113 ----
+ # Doxyfile 1.3.5
+ 
+ # This file describes the settings to be used by the documentation system
+ # doxygen (www.doxygen.org) for a project
+ #
+ # All text after a hash (#) is considered a comment and will be ignored
+ # The format is:
+ #       TAG = value [value, ...]
+ # For lists items can also be appended using:
+ #       TAG += value [value, ...]
+ # Values that contain spaces should be placed between quotes (" ")
+ 
+ 
+ #-----------------------------------------------------------------------------
+ # NOTE: YOU MUST EDIT THE FOLLOWING HARDWIRED PATHS BEFORE USING THIS FILE.
+ #-----------------------------------------------------------------------------
+ 
+ # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
+ # base path where the generated documentation will be put. 
+ # If a relative path is entered, it will be relative to the location 
+ # where doxygen was started. If left blank the current directory will be used.
+ 
+ OUTPUT_DIRECTORY       = @OUTPUT_DIRECTORY@
+ 
+ # The INPUT_FILTER tag can be used to specify a program that doxygen should 
+ # invoke to filter for each input file. Doxygen will invoke the filter program 
+ # by executing (via popen()) the command <filter> <input-file>, where <filter> 
+ # is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
+ # input file. Doxygen will then use the output that the filter program writes 
+ # to standard output.
+ 
+ INPUT_FILTER           = @INPUT_FILTER@
+ 
+ #-----------------------------------------------------------------------------
+ 
+ 
+ 
+ 
+ #---------------------------------------------------------------------------
+ # Project related configuration options
+ #---------------------------------------------------------------------------
+ 
+ # The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
+ # by quotes) that should identify the project.
+ 
+ PROJECT_NAME           = "Tree SSA"
+ 
+ # The PROJECT_NUMBER tag can be used to enter a project or revision number. 
+ # This could be handy for archiving the generated documentation or 
+ # if some version control system is used.
+ 
+ PROJECT_NUMBER         = 
+ 
+ 
+ # The OUTPUT_LANGUAGE tag is used to specify the language in which all 
+ # documentation generated by doxygen is written. Doxygen will use this 
+ # information to generate all constant output in the proper language. 
+ # The default language is English, other supported languages are: 
+ # Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, 
+ # Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en 
+ # (Japanese with English messages), Korean, Norwegian, Polish, Portuguese, 
+ # Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
+ 
+ OUTPUT_LANGUAGE        = English
+ 
+ # This tag can be used to specify the encoding used in the generated output. 
+ # The encoding is not always determined by the language that is chosen, 
+ # but also whether or not the output is meant for Windows or non-Windows users. 
+ # In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES 
+ # forces the Windows encoding (this is the default for the Windows binary), 
+ # whereas setting the tag to NO uses a Unix-style encoding (the default for 
+ # all platforms other than Windows).
+ 
+ USE_WINDOWS_ENCODING   = NO
+ 
+ # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
+ # include brief member descriptions after the members that are listed in 
+ # the file and class documentation (similar to JavaDoc). 
+ # Set to NO to disable this.
+ 
+ BRIEF_MEMBER_DESC      = YES
+ 
+ # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
+ # the brief description of a member or function before the detailed description. 
+ # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
+ # brief descriptions will be completely suppressed.
+ 
+ REPEAT_BRIEF           = YES
+ 
+ # This tag implements a quasi-intelligent brief description abbreviator 
+ # that is used to form the text in various listings. Each string 
+ # in this list, if found as the leading text of the brief description, will be 
+ # stripped from the text and the result after processing the whole list, is used 
+ # as the annotated text. Otherwise, the brief description is used as-is. If left 
+ # blank, the following values are used ("$name" is automatically replaced with the 
+ # name of the entity): "The $name class" "The $name widget" "The $name file" 
+ # "is" "provides" "specifies" "contains" "represents" "a" "an" "the"
+ 
+ ABBREVIATE_BRIEF       = 
+ 
+ # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
+ # Doxygen will generate a detailed section even if there is only a brief 
+ # description.
+ 
+ ALWAYS_DETAILED_SEC    = YES
+ 
+ # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited 
+ # members of a class in the documentation of that class as if those members were 
+ # ordinary class members. Constructors, destructors and assignment operators of 
+ # the base classes will not be shown.
+ 
+ INLINE_INHERITED_MEMB  = YES
+ 
+ # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
+ # path before files name in the file list and in the header files. If set 
+ # to NO the shortest path that makes the file name unique will be used.
+ 
+ FULL_PATH_NAMES        = NO
+ 
+ # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
+ # can be used to strip a user-defined part of the path. Stripping is 
+ # only done if one of the specified strings matches the left-hand part of 
+ # the path. It is allowed to use relative paths in the argument list.
+ 
+ STRIP_FROM_PATH        = 
+ 
+ # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
+ # (but less readable) file names. This can be useful is your file systems 
+ # doesn't support long names like on DOS, Mac, or CD-ROM.
+ 
+ SHORT_NAMES            = NO
+ 
+ # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
+ # will interpret the first line (until the first dot) of a JavaDoc-style 
+ # comment as the brief description. If set to NO, the JavaDoc 
+ # comments will behave just like the Qt-style comments (thus requiring an 
+ # explicit @brief command for a brief description.
+ 
+ JAVADOC_AUTOBRIEF      = NO
+ 
+ # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
+ # treat a multi-line C++ special comment block (i.e. a block of //! or /// 
+ # comments) as a brief description. This used to be the default behaviour. 
+ # The new default is to treat a multi-line C++ comment block as a detailed 
+ # description. Set this tag to YES if you prefer the old behaviour instead.
+ 
+ MULTILINE_CPP_IS_BRIEF = NO
+ 
+ # If the DETAILS_AT_TOP tag is set to YES then Doxygen 
+ # will output the detailed description near the top, like JavaDoc.
+ # If set to NO, the detailed description appears after the member 
+ # documentation.
+ 
+ DETAILS_AT_TOP         = NO
+ 
+ # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
+ # member inherits the documentation from any documented member that it 
+ # re-implements.
+ 
+ INHERIT_DOCS           = YES
+ 
+ # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
+ # tag is set to YES, then doxygen will reuse the documentation of the first 
+ # member in the group (if any) for the other members of the group. By default 
+ # all members of a group must be documented explicitly.
+ 
+ DISTRIBUTE_GROUP_DOC   = NO
+ 
+ # The TAB_SIZE tag can be used to set the number of spaces in a tab. 
+ # Doxygen uses this value to replace tabs by spaces in code fragments.
+ 
+ TAB_SIZE               = 8
+ 
+ # This tag can be used to specify a number of aliases that acts 
+ # as commands in the documentation. An alias has the form "name=value". 
+ # For example adding "sideeffect=\par Side Effects:\n" will allow you to 
+ # put the command \sideeffect (or @sideeffect) in the documentation, which 
+ # will result in a user-defined paragraph with heading "Side Effects:". 
+ # You can put \n's in the value part of an alias to insert newlines.
+ 
+ ALIASES                = 
+ 
+ # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources 
+ # only. Doxygen will then generate output that is more tailored for C. 
+ # For instance, some of the names that are used will be different. The list 
+ # of all members will be omitted, etc.
+ 
+ OPTIMIZE_OUTPUT_FOR_C  = YES
+ 
+ # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources 
+ # only. Doxygen will then generate output that is more tailored for Java. 
+ # For instance, namespaces will be presented as packages, qualified scopes 
+ # will look different, etc.
+ 
+ OPTIMIZE_OUTPUT_JAVA   = NO
+ 
+ # Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
+ # the same type (for instance a group of public functions) to be put as a 
+ # subgroup of that type (e.g. under the Public Functions section). Set it to 
+ # NO to prevent subgrouping. Alternatively, this can be done per class using 
+ # the \nosubgrouping command.
+ 
+ SUBGROUPING            = YES
+ 
+ #---------------------------------------------------------------------------
+ # Build related configuration options
+ #---------------------------------------------------------------------------
+ 
+ # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
+ # documentation are documented, even if no documentation was available. 
+ # Private class members and static file members will be hidden unless 
+ # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+ 
+ EXTRACT_ALL            = YES
+ 
+ # If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
+ # will be included in the documentation.
+ 
+ EXTRACT_PRIVATE        = YES
+ 
+ # If the EXTRACT_STATIC tag is set to YES all static members of a file 
+ # will be included in the documentation.
+ 
+ EXTRACT_STATIC         = YES
+ 
+ # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
+ # defined locally in source files will be included in the documentation. 
+ # If set to NO only classes defined in header files are included.
+ 
+ EXTRACT_LOCAL_CLASSES  = YES
+ 
+ # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
+ # undocumented members of documented classes, files or namespaces. 
+ # If set to NO (the default) these members will be included in the 
+ # various overviews, but no documentation section is generated. 
+ # This option has no effect if EXTRACT_ALL is enabled.
+ 
+ HIDE_UNDOC_MEMBERS     = NO
+ 
+ # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
+ # undocumented classes that are normally visible in the class hierarchy. 
+ # If set to NO (the default) these classes will be included in the various 
+ # overviews. This option has no effect if EXTRACT_ALL is enabled.
+ 
+ HIDE_UNDOC_CLASSES     = NO
+ 
+ # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
+ # friend (class|struct|union) declarations. 
+ # If set to NO (the default) these declarations will be included in the 
+ # documentation.
+ 
+ HIDE_FRIEND_COMPOUNDS  = NO
+ 
+ # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
+ # documentation blocks found inside the body of a function. 
+ # If set to NO (the default) these blocks will be appended to the 
+ # function's detailed documentation block.
+ 
+ HIDE_IN_BODY_DOCS      = NO
+ 
+ # The INTERNAL_DOCS tag determines if documentation 
+ # that is typed after a \internal command is included. If the tag is set 
+ # to NO (the default) then the documentation will be excluded. 
+ # Set it to YES to include the internal documentation.
+ 
+ INTERNAL_DOCS          = NO
+ 
+ # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
+ # file names in lower-case letters. If set to YES upper-case letters are also 
+ # allowed. This is useful if you have classes or files whose names only differ 
+ # in case and if your file system supports case sensitive file names. Windows 
+ # users are advised to set this option to NO.
+ 
+ CASE_SENSE_NAMES       = YES
+ 
+ # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
+ # will show members with their full class and namespace scopes in the 
+ # documentation. If set to YES the scope will be hidden.
+ 
+ HIDE_SCOPE_NAMES       = NO
+ 
+ # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
+ # will put a list of the files that are included by a file in the documentation 
+ # of that file.
+ 
+ SHOW_INCLUDE_FILES     = YES
+ 
+ # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
+ # is inserted in the documentation for inline members.
+ 
+ INLINE_INFO            = YES
+ 
+ # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
+ # will sort the (detailed) documentation of file and class members 
+ # alphabetically by member name. If set to NO the members will appear in 
+ # declaration order.
+ 
+ SORT_MEMBER_DOCS       = YES
+ 
+ # The GENERATE_TODOLIST tag can be used to enable (YES) or 
+ # disable (NO) the todo list. This list is created by putting \todo 
+ # commands in the documentation.
+ 
+ GENERATE_TODOLIST      = YES
+ 
+ # The GENERATE_TESTLIST tag can be used to enable (YES) or 
+ # disable (NO) the test list. This list is created by putting \test 
+ # commands in the documentation.
+ 
+ GENERATE_TESTLIST      = YES
+ 
+ # The GENERATE_BUGLIST tag can be used to enable (YES) or 
+ # disable (NO) the bug list. This list is created by putting \bug 
+ # commands in the documentation.
+ 
+ GENERATE_BUGLIST       = YES
+ 
+ # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
+ # disable (NO) the deprecated list. This list is created by putting 
+ # \deprecated commands in the documentation.
+ 
+ GENERATE_DEPRECATEDLIST= YES
+ 
+ # The ENABLED_SECTIONS tag can be used to enable conditional 
+ # documentation sections, marked by \if sectionname ... \endif.
+ 
+ ENABLED_SECTIONS       = 
+ 
+ # The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
+ # the initial value of a variable or define consists of for it to appear in 
+ # the documentation. If the initializer consists of more lines than specified 
+ # here it will be hidden. Use a value of 0 to hide initializers completely. 
+ # The appearance of the initializer of individual variables and defines in the 
+ # documentation can be controlled using \showinitializer or \hideinitializer 
+ # command in the documentation regardless of this setting.
+ 
+ MAX_INITIALIZER_LINES  = 30
+ 
+ # Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
+ # at the bottom of the documentation of classes and structs. If set to YES the 
+ # list will mention the files that were used to generate the documentation.
+ 
+ SHOW_USED_FILES        = YES
+ 
+ #---------------------------------------------------------------------------
+ # configuration options related to warning and progress messages
+ #---------------------------------------------------------------------------
+ 
+ # The QUIET tag can be used to turn on/off the messages that are generated 
+ # by doxygen. Possible values are YES and NO. If left blank NO is used.
+ 
+ QUIET                  = NO
+ 
+ # The WARNINGS tag can be used to turn on/off the warning messages that are 
+ # generated by doxygen. Possible values are YES and NO. If left blank 
+ # NO is used.
+ 
+ WARNINGS               = YES
+ 
+ # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
+ # for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
+ # automatically be disabled.
+ 
+ WARN_IF_UNDOCUMENTED   = YES
+ 
+ # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
+ # potential errors in the documentation, such as not documenting some 
+ # parameters in a documented function, or documenting parameters that 
+ # don't exist or using markup commands wrongly.
+ 
+ WARN_IF_DOC_ERROR      = YES
+ 
+ # The WARN_FORMAT tag determines the format of the warning messages that 
+ # doxygen can produce. The string should contain the $file, $line, and $text 
+ # tags, which will be replaced by the file and line number from which the 
+ # warning originated and the warning text.
+ 
+ WARN_FORMAT            = "$file:$line: $text"
+ 
+ # The WARN_LOGFILE tag can be used to specify a file to which warning 
+ # and error messages should be written. If left blank the output is written 
+ # to stderr.
+ 
+ WARN_LOGFILE           = 
+ 
+ #---------------------------------------------------------------------------
+ # configuration options related to the input files
+ #---------------------------------------------------------------------------
+ 
+ # The INPUT tag can be used to specify the files and/or directories that contain 
+ # documented source files. You may enter file names like "myfile.cpp" or 
+ # directories like "/usr/src/myproject". Separate the files or directories 
+ # with spaces.
+ 
+ INPUT                  = .
+ 
+ # If the value of the INPUT tag contains directories, you can use the 
+ # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+ # and *.h) to filter out the source-files in the directories. If left 
+ # blank the following patterns are tested: 
+ # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp 
+ # *.h++ *.idl *.odl *.cs *.php *.php3 *.inc
+ 
+ FILE_PATTERNS          = tree* \
+                          *mudflap* \
+                          c-simplify.c \
+                          gimpl* \
+                          domwalk*
+ 
+ # The RECURSIVE tag can be used to turn specify whether or not subdirectories 
+ # should be searched for input files as well. Possible values are YES and NO. 
+ # If left blank NO is used.
+ 
+ RECURSIVE              = NO
+ 
+ # The EXCLUDE tag can be used to specify files and/or directories that should 
+ # excluded from the INPUT source files. This way you can easily exclude a 
+ # subdirectory from a directory tree whose root is specified with the INPUT tag.
+ 
+ EXCLUDE                = 
+ 
+ # The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories 
+ # that are symbolic links (a Unix filesystem feature) are excluded from the input.
+ 
+ EXCLUDE_SYMLINKS       = NO
+ 
+ # If the value of the INPUT tag contains directories, you can use the 
+ # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
+ # certain files from those directories.
+ 
+ EXCLUDE_PATTERNS       = 
+ 
+ # The EXAMPLE_PATH tag can be used to specify one or more files or 
+ # directories that contain example code fragments that are included (see 
+ # the \include command).
+ 
+ EXAMPLE_PATH           = 
+ 
+ # If the value of the EXAMPLE_PATH tag contains directories, you can use the 
+ # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+ # and *.h) to filter out the source-files in the directories. If left 
+ # blank all files are included.
+ 
+ EXAMPLE_PATTERNS       = 
+ 
+ # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
+ # searched for input files to be used with the \include or \dontinclude 
+ # commands irrespective of the value of the RECURSIVE tag. 
+ # Possible values are YES and NO. If left blank NO is used.
+ 
+ EXAMPLE_RECURSIVE      = NO
+ 
+ # The IMAGE_PATH tag can be used to specify one or more files or 
+ # directories that contain image that are included in the documentation (see 
+ # the \image command).
+ 
+ IMAGE_PATH             = 
+ 
+ # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
+ # INPUT_FILTER) will be used to filter the input files when producing source 
+ # files to browse (i.e. when SOURCE_BROWSER is set to YES).
+ 
+ FILTER_SOURCE_FILES    = NO
+ 
+ #---------------------------------------------------------------------------
+ # configuration options related to source browsing
+ #---------------------------------------------------------------------------
+ 
+ # If the SOURCE_BROWSER tag is set to YES then a list of source files will 
+ # be generated. Documented entities will be cross-referenced with these sources. 
+ # Note: To get rid of all source code in the generated output, make sure also 
+ # VERBATIM_HEADERS is set to NO.
+ 
+ SOURCE_BROWSER         = YES
+ 
+ # Setting the INLINE_SOURCES tag to YES will include the body 
+ # of functions and classes directly in the documentation.
+ 
+ INLINE_SOURCES         = YES
+ 
+ # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
+ # doxygen to hide any special comment blocks from generated source code 
+ # fragments. Normal C and C++ comments will always remain visible.
+ 
+ STRIP_CODE_COMMENTS    = YES
+ 
+ # If the REFERENCED_BY_RELATION tag is set to YES (the default) 
+ # then for each documented function all documented 
+ # functions referencing it will be listed.
+ 
+ REFERENCED_BY_RELATION = YES
+ 
+ # If the REFERENCES_RELATION tag is set to YES (the default) 
+ # then for each documented function all documented entities 
+ # called/used by that function will be listed.
+ 
+ REFERENCES_RELATION    = YES
+ 
+ # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
+ # will generate a verbatim copy of the header file for each class for 
+ # which an include is specified. Set to NO to disable this.
+ 
+ VERBATIM_HEADERS       = YES
+ 
+ #---------------------------------------------------------------------------
+ # configuration options related to the alphabetical class index
+ #---------------------------------------------------------------------------
+ 
+ # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
+ # of all compounds will be generated. Enable this if the project 
+ # contains a lot of classes, structs, unions or interfaces.
+ 
+ ALPHABETICAL_INDEX     = YES
+ 
+ # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
+ # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
+ # in which this list will be split (can be a number in the range [1..20])
+ 
+ COLS_IN_ALPHA_INDEX    = 5
+ 
+ # In case all classes in a project start with a common prefix, all 
+ # classes will be put under the same header in the alphabetical index. 
+ # The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
+ # should be ignored while generating the index headers.
+ 
+ IGNORE_PREFIX          = 
+ 
+ #---------------------------------------------------------------------------
+ # configuration options related to the HTML output
+ #---------------------------------------------------------------------------
+ 
+ # If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
+ # generate HTML output.
+ 
+ GENERATE_HTML          = YES
+ 
+ # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
+ # If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+ # put in front of it. If left blank `html' will be used as the default path.
+ 
+ HTML_OUTPUT            = html
+ 
+ # The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
+ # each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
+ # doxygen will generate files with .html extension.
+ 
+ HTML_FILE_EXTENSION    = .html
+ 
+ # The HTML_HEADER tag can be used to specify a personal HTML header for 
+ # each generated HTML page. If it is left blank doxygen will generate a 
+ # standard header.
+ 
+ HTML_HEADER            = 
+ 
+ # The HTML_FOOTER tag can be used to specify a personal HTML footer for 
+ # each generated HTML page. If it is left blank doxygen will generate a 
+ # standard footer.
+ 
+ HTML_FOOTER            = 
+ 
+ # The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
+ # style sheet that is used by each HTML page. It can be used to 
+ # fine-tune the look of the HTML output. If the tag is left blank doxygen 
+ # will generate a default style sheet. Note that doxygen will try to copy 
+ # the style sheet file to the HTML output directory, so don't put your own 
+ # stylesheet in the HTML output directory as well, or it will be erased!
+ 
+ HTML_STYLESHEET        = 
+ 
+ # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
+ # files or namespaces will be aligned in HTML using tables. If set to 
+ # NO a bullet list will be used.
+ 
+ HTML_ALIGN_MEMBERS     = YES
+ 
+ # If the GENERATE_HTMLHELP tag is set to YES, additional index files 
+ # will be generated that can be used as input for tools like the 
+ # Microsoft HTML help workshop to generate a compressed HTML help file (.chm) 
+ # of the generated HTML documentation.
+ 
+ GENERATE_HTMLHELP      = NO
+ 
+ # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
+ # be used to specify the file name of the resulting .chm file. You 
+ # can add a path in front of the file if the result should not be 
+ # written to the html output directory.
+ 
+ CHM_FILE               = 
+ 
+ # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
+ # be used to specify the location (absolute path including file name) of 
+ # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
+ # the HTML help compiler on the generated index.hhp.
+ 
+ HHC_LOCATION           = 
+ 
+ # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
+ # controls if a separate .chi index file is generated (YES) or that 
+ # it should be included in the master .chm file (NO).
+ 
+ GENERATE_CHI           = NO
+ 
+ # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
+ # controls whether a binary table of contents is generated (YES) or a 
+ # normal table of contents (NO) in the .chm file.
+ 
+ BINARY_TOC             = NO
+ 
+ # The TOC_EXPAND flag can be set to YES to add extra items for group members 
+ # to the contents of the HTML help documentation and to the tree view.
+ 
+ TOC_EXPAND             = NO
+ 
+ # The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
+ # top of each HTML page. The value NO (the default) enables the index and 
+ # the value YES disables it.
+ 
+ DISABLE_INDEX          = NO
+ 
+ # This tag can be used to set the number of enum values (range [1..20]) 
+ # that doxygen will group on one line in the generated HTML documentation.
+ 
+ ENUM_VALUES_PER_LINE   = 4
+ 
+ # If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+ # generated containing a tree-like index structure (just like the one that 
+ # is generated for HTML Help). For this to work a browser that supports 
+ # JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, 
+ # Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are 
+ # probably better off using the HTML help feature.
+ 
+ GENERATE_TREEVIEW      = NO
+ 
+ # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
+ # used to set the initial width (in pixels) of the frame in which the tree 
+ # is shown.
+ 
+ TREEVIEW_WIDTH         = 250
+ 
+ #---------------------------------------------------------------------------
+ # configuration options related to the LaTeX output
+ #---------------------------------------------------------------------------
+ 
+ # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
+ # generate Latex output.
+ 
+ GENERATE_LATEX         = NO
+ 
+ # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
+ # If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+ # put in front of it. If left blank `latex' will be used as the default path.
+ 
+ LATEX_OUTPUT           = latex
+ 
+ # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
+ # invoked. If left blank `latex' will be used as the default command name.
+ 
+ LATEX_CMD_NAME         = latex
+ 
+ # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
+ # generate index for LaTeX. If left blank `makeindex' will be used as the 
+ # default command name.
+ 
+ MAKEINDEX_CMD_NAME     = makeindex
+ 
+ # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
+ # LaTeX documents. This may be useful for small projects and may help to 
+ # save some trees in general.
+ 
+ COMPACT_LATEX          = NO
+ 
+ # The PAPER_TYPE tag can be used to set the paper type that is used 
+ # by the printer. Possible values are: a4, a4wide, letter, legal and 
+ # executive. If left blank a4wide will be used.
+ 
+ PAPER_TYPE             = letter
+ 
+ # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
+ # packages that should be included in the LaTeX output.
+ 
+ EXTRA_PACKAGES         = 
+ 
+ # The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
+ # the generated latex document. The header should contain everything until 
+ # the first chapter. If it is left blank doxygen will generate a 
+ # standard header. Notice: only use this tag if you know what you are doing!
+ 
+ LATEX_HEADER           = 
+ 
+ # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
+ # is prepared for conversion to pdf (using ps2pdf). The pdf file will 
+ # contain links (just like the HTML output) instead of page references 
+ # This makes the output suitable for online browsing using a pdf viewer.
+ 
+ PDF_HYPERLINKS         = YES
+ 
+ # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
+ # plain latex in the generated Makefile. Set this option to YES to get a 
+ # higher quality PDF documentation.
+ 
+ USE_PDFLATEX           = YES
+ 
+ # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
+ # command to the generated LaTeX files. This will instruct LaTeX to keep 
+ # running if errors occur, instead of asking the user for help. 
+ # This option is also used when generating formulas in HTML.
+ 
+ LATEX_BATCHMODE        = YES
+ 
+ # If LATEX_HIDE_INDICES is set to YES then doxygen will not 
+ # include the index chapters (such as File Index, Compound Index, etc.) 
+ # in the output.
+ 
+ LATEX_HIDE_INDICES     = NO
+ 
+ #---------------------------------------------------------------------------
+ # configuration options related to the RTF output
+ #---------------------------------------------------------------------------
+ 
+ # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
+ # The RTF output is optimized for Word 97 and may not look very pretty with 
+ # other RTF readers or editors.
+ 
+ GENERATE_RTF           = NO
+ 
+ # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
+ # If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+ # put in front of it. If left blank `rtf' will be used as the default path.
+ 
+ RTF_OUTPUT             = rtf
+ 
+ # If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
+ # RTF documents. This may be useful for small projects and may help to 
+ # save some trees in general.
+ 
+ COMPACT_RTF            = NO
+ 
+ # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
+ # will contain hyperlink fields. The RTF file will 
+ # contain links (just like the HTML output) instead of page references. 
+ # This makes the output suitable for online browsing using WORD or other 
+ # programs which support those fields. 
+ # Note: wordpad (write) and others do not support links.
+ 
+ RTF_HYPERLINKS         = NO
+ 
+ # Load stylesheet definitions from file. Syntax is similar to doxygen's 
+ # config file, i.e. a series of assignments. You only have to provide 
+ # replacements, missing definitions are set to their default value.
+ 
+ RTF_STYLESHEET_FILE    = 
+ 
+ # Set optional variables used in the generation of an rtf document. 
+ # Syntax is similar to doxygen's config file.
+ 
+ RTF_EXTENSIONS_FILE    = 
+ 
+ #---------------------------------------------------------------------------
+ # configuration options related to the man page output
+ #---------------------------------------------------------------------------
+ 
+ # If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
+ # generate man pages
+ 
+ GENERATE_MAN           = NO
+ 
+ # The MAN_OUTPUT tag is used to specify where the man pages will be put. 
+ # If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+ # put in front of it. If left blank `man' will be used as the default path.
+ 
+ MAN_OUTPUT             = man
+ 
+ # The MAN_EXTENSION tag determines the extension that is added to 
+ # the generated man pages (default is the subroutine's section .3)
+ 
+ MAN_EXTENSION          = .3
+ 
+ # If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
+ # then it will generate one additional man file for each entity 
+ # documented in the real man page(s). These additional files 
+ # only source the real man page, but without them the man command 
+ # would be unable to find the correct page. The default is NO.
+ 
+ MAN_LINKS              = NO
+ 
+ #---------------------------------------------------------------------------
+ # configuration options related to the XML output
+ #---------------------------------------------------------------------------
+ 
+ # If the GENERATE_XML tag is set to YES Doxygen will 
+ # generate an XML file that captures the structure of 
+ # the code including all documentation.
+ 
+ GENERATE_XML           = NO
+ 
+ # The XML_OUTPUT tag is used to specify where the XML pages will be put. 
+ # If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+ # put in front of it. If left blank `xml' will be used as the default path.
+ 
+ XML_OUTPUT             = xml
+ 
+ # The XML_SCHEMA tag can be used to specify an XML schema, 
+ # which can be used by a validating XML parser to check the 
+ # syntax of the XML files.
+ 
+ XML_SCHEMA             = 
+ 
+ # The XML_DTD tag can be used to specify an XML DTD, 
+ # which can be used by a validating XML parser to check the 
+ # syntax of the XML files.
+ 
+ XML_DTD                = 
+ 
+ # If the XML_PROGRAMLISTING tag is set to YES Doxygen will 
+ # dump the program listings (including syntax highlighting 
+ # and cross-referencing information) to the XML output. Note that 
+ # enabling this will significantly increase the size of the XML output.
+ 
+ XML_PROGRAMLISTING     = YES
+ 
+ #---------------------------------------------------------------------------
+ # configuration options for the AutoGen Definitions output
+ #---------------------------------------------------------------------------
+ 
+ # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
+ # generate an AutoGen Definitions (see autogen.sf.net) file 
+ # that captures the structure of the code including all 
+ # documentation. Note that this feature is still experimental 
+ # and incomplete at the moment.
+ 
+ GENERATE_AUTOGEN_DEF   = NO
+ 
+ #---------------------------------------------------------------------------
+ # configuration options related to the Perl module output
+ #---------------------------------------------------------------------------
+ 
+ # If the GENERATE_PERLMOD tag is set to YES Doxygen will 
+ # generate a Perl module file that captures the structure of 
+ # the code including all documentation. Note that this 
+ # feature is still experimental and incomplete at the 
+ # moment.
+ 
+ GENERATE_PERLMOD       = NO
+ 
+ # If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
+ # the necessary Makefile rules, Perl scripts and LaTeX code to be able 
+ # to generate PDF and DVI output from the Perl module output.
+ 
+ PERLMOD_LATEX          = NO
+ 
+ # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
+ # nicely formatted so it can be parsed by a human reader.  This is useful 
+ # if you want to understand what is going on.  On the other hand, if this 
+ # tag is set to NO the size of the Perl module output will be much smaller 
+ # and Perl will parse it just the same.
+ 
+ PERLMOD_PRETTY         = YES
+ 
+ # The names of the make variables in the generated doxyrules.make file 
+ # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
+ # This is useful so different doxyrules.make files included by the same 
+ # Makefile don't overwrite each other's variables.
+ 
+ PERLMOD_MAKEVAR_PREFIX = 
+ 
+ #---------------------------------------------------------------------------
+ # Configuration options related to the preprocessor   
+ #---------------------------------------------------------------------------
+ 
+ # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
+ # evaluate all C-preprocessor directives found in the sources and include 
+ # files.
+ 
+ ENABLE_PREPROCESSING   = YES
+ 
+ # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
+ # names in the source code. If set to NO (the default) only conditional 
+ # compilation will be performed. Macro expansion can be done in a controlled 
+ # way by setting EXPAND_ONLY_PREDEF to YES.
+ 
+ MACRO_EXPANSION        = NO
+ 
+ # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
+ # then the macro expansion is limited to the macros specified with the 
+ # PREDEFINED and EXPAND_AS_PREDEFINED tags.
+ 
+ EXPAND_ONLY_PREDEF     = NO
+ 
+ # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
+ # in the INCLUDE_PATH (see below) will be search if a #include is found.
+ 
+ SEARCH_INCLUDES        = YES
+ 
+ # The INCLUDE_PATH tag can be used to specify one or more directories that 
+ # contain include files that are not input files but should be processed by 
+ # the preprocessor.
+ 
+ INCLUDE_PATH           = 
+ 
+ # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
+ # patterns (like *.h and *.hpp) to filter out the header-files in the 
+ # directories. If left blank, the patterns specified with FILE_PATTERNS will 
+ # be used.
+ 
+ INCLUDE_FILE_PATTERNS  = 
+ 
+ # The PREDEFINED tag can be used to specify one or more macro names that 
+ # are defined before the preprocessor is started (similar to the -D option of 
+ # gcc). The argument of the tag is a list of macros of the form: name 
+ # or name=definition (no spaces). If the definition and the = are 
+ # omitted =1 is assumed.
+ 
+ PREDEFINED             = 
+ 
+ # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
+ # this tag can be used to specify a list of macro names that should be expanded. 
+ # The macro definition that is found in the sources will be used. 
+ # Use the PREDEFINED tag if you want to use a different macro definition.
+ 
+ EXPAND_AS_DEFINED      = 
+ 
+ # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
+ # doxygen's preprocessor will remove all function-like macros that are alone 
+ # on a line, have an all uppercase name, and do not end with a semicolon. Such 
+ # function macros are typically used for boiler-plate code, and will confuse the 
+ # parser if not removed.
+ 
+ SKIP_FUNCTION_MACROS   = YES
+ 
+ #---------------------------------------------------------------------------
+ # Configuration::addtions related to external references   
+ #---------------------------------------------------------------------------
+ 
+ # The TAGFILES option can be used to specify one or more tagfiles. 
+ # Optionally an initial location of the external documentation 
+ # can be added for each tagfile. The format of a tag file without 
+ # this location is as follows: 
+ #   TAGFILES = file1 file2 ... 
+ # Adding location for the tag files is done as follows: 
+ #   TAGFILES = file1=loc1 "file2 = loc2" ... 
+ # where "loc1" and "loc2" can be relative or absolute paths or 
+ # URLs. If a location is present for each tag, the installdox tool 
+ # does not have to be run to correct the links.
+ # Note that each tag file must have a unique name
+ # (where the name does NOT include the path)
+ # If a tag file is not located in the directory in which doxygen 
+ # is run, you must also specify the path to the tagfile here.
+ 
+ TAGFILES               = 
+ 
+ # When a file name is specified after GENERATE_TAGFILE, doxygen will create 
+ # a tag file that is based on the input files it reads.
+ 
+ GENERATE_TAGFILE       = 
+ 
+ # If the ALLEXTERNALS tag is set to YES all external classes will be listed 
+ # in the class index. If set to NO only the inherited external classes 
+ # will be listed.
+ 
+ ALLEXTERNALS           = NO
+ 
+ # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
+ # in the modules index. If set to NO, only the current project's groups will 
+ # be listed.
+ 
+ EXTERNAL_GROUPS        = YES
+ 
+ # The PERL_PATH should be the absolute path and name of the perl script 
+ # interpreter (i.e. the result of `which perl').
+ 
+ PERL_PATH              = /usr/bin/perl
+ 
+ #---------------------------------------------------------------------------
+ # Configuration options related to the dot tool   
+ #---------------------------------------------------------------------------
+ 
+ # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
+ # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or 
+ # super classes. Setting the tag to NO turns the diagrams off. Note that this 
+ # option is superseded by the HAVE_DOT option below. This is only a fallback. It is 
+ # recommended to install and use dot, since it yields more powerful graphs.
+ 
+ CLASS_DIAGRAMS         = YES
+ 
+ # If set to YES, the inheritance and collaboration graphs will hide 
+ # inheritance and usage relations if the target is undocumented 
+ # or is not a class.
+ 
+ HIDE_UNDOC_RELATIONS   = YES
+ 
+ # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
+ # available from the path. This tool is part of Graphviz, a graph visualization 
+ # toolkit from AT&T and Lucent Bell Labs. The other options in this section 
+ # have no effect if this option is set to NO (the default)
+ 
+ HAVE_DOT               = YES
+ 
+ # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+ # will generate a graph for each documented class showing the direct and 
+ # indirect inheritance relations. Setting this tag to YES will force the 
+ # the CLASS_DIAGRAMS tag to NO.
+ 
+ CLASS_GRAPH            = YES
+ 
+ # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+ # will generate a graph for each documented class showing the direct and 
+ # indirect implementation dependencies (inheritance, containment, and 
+ # class references variables) of the class with other documented classes.
+ 
+ COLLABORATION_GRAPH    = YES
+ 
+ # If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
+ # collaboration diagrams in a style similar to the OMG's Unified Modeling 
+ # Language.
+ 
+ UML_LOOK               = NO
+ 
+ # If set to YES, the inheritance and collaboration graphs will show the 
+ # relations between templates and their instances.
+ 
+ TEMPLATE_RELATIONS     = YES
+ 
+ # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
+ # tags are set to YES then doxygen will generate a graph for each documented 
+ # file showing the direct and indirect include dependencies of the file with 
+ # other documented files.
+ 
+ INCLUDE_GRAPH          = YES
+ 
+ # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
+ # HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
+ # documented header file showing the documented files that directly or 
+ # indirectly include this file.
+ 
+ INCLUDED_BY_GRAPH      = YES
+ 
+ # If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will 
+ # generate a call dependency graph for every global function or class method. 
+ # Note that enabling this option will significantly increase the time of a run. 
+ # So in most cases it will be better to enable call graphs for selected 
+ # functions only using the \callgraph command.
+ 
+ CALL_GRAPH             = NO
+ 
+ # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
+ # will graphical hierarchy of all classes instead of a textual one.
+ 
+ GRAPHICAL_HIERARCHY    = YES
+ 
+ # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
+ # generated by dot. Possible values are png, jpg, or gif
+ # If left blank png will be used.
+ 
+ DOT_IMAGE_FORMAT       = png
+ 
+ # The tag DOT_PATH can be used to specify the path where the dot tool can be 
+ # found. If left blank, it is assumed the dot tool can be found on the path.
+ 
+ DOT_PATH               = 
+ 
+ # The DOTFILE_DIRS tag can be used to specify one or more directories that 
+ # contain dot files that are included in the documentation (see the 
+ # \dotfile command).
+ 
+ DOTFILE_DIRS           = 
+ 
+ # The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width 
+ # (in pixels) of the graphs generated by dot. If a graph becomes larger than 
+ # this value, doxygen will try to truncate the graph, so that it fits within 
+ # the specified constraint. Beware that most browsers cannot cope with very 
+ # large images.
+ 
+ MAX_DOT_GRAPH_WIDTH    = 1024
+ 
+ # The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height 
+ # (in pixels) of the graphs generated by dot. If a graph becomes larger than 
+ # this value, doxygen will try to truncate the graph, so that it fits within 
+ # the specified constraint. Beware that most browsers cannot cope with very 
+ # large images.
+ 
+ MAX_DOT_GRAPH_HEIGHT   = 1024
+ 
+ # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
+ # graphs generated by dot. A depth value of 3 means that only nodes reachable 
+ # from the root by following a path via at most 3 edges will be shown. Nodes that 
+ # lay further from the root node will be omitted. Note that setting this option to 
+ # 1 or 2 may greatly reduce the computation time needed for large code bases. Also 
+ # note that a graph may be further truncated if the graph's image dimensions are 
+ # not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT). 
+ # If 0 is used for the depth value (the default), the graph is not depth-constrained.
+ 
+ MAX_DOT_GRAPH_DEPTH    = 0
+ 
+ # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
+ # generate a legend page explaining the meaning of the various boxes and 
+ # arrows in the dot generated graphs.
+ 
+ GENERATE_LEGEND        = YES
+ 
+ # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
+ # remove the intermediate dot files that are used to generate 
+ # the various graphs.
+ 
+ DOT_CLEANUP            = YES
+ 
+ #---------------------------------------------------------------------------
+ # Configuration::addtions related to the search engine   
+ #---------------------------------------------------------------------------
+ 
+ # The SEARCHENGINE tag specifies whether or not a search engine should be 
+ # used. If set to NO the values of all tags below this one will be ignored.
+ 
+ SEARCHENGINE           = NO
diff -Nrcpad gcc-3.4.3/contrib/warn_summary gcc-4.0.0/contrib/warn_summary
*** gcc-3.4.3/contrib/warn_summary	Wed Jan  2 03:35:21 2002
--- gcc-4.0.0/contrib/warn_summary	Tue Mar  8 13:45:41 2005
***************
*** 3,9 ****
  # This script parses the output of a gcc bootstrap when using warning
  # flags and determines various statistics.
  # 
! # usage: warn_summary [-llf] [-s stage] [-nosub|-ch|-cp|-f|-java|-ada|-intl|-fixinc]
  # 	[-pass|-wpass] [file(s)]
  #
  # -llf
--- 3,9 ----
  # This script parses the output of a gcc bootstrap when using warning
  # flags and determines various statistics.
  # 
! # usage: warn_summary [-llf] [-s stage] [-nosub|-ch|-cp|-f|-fortran|-java|-ada|-intl|-fixinc]
  # 	[-pass|-wpass] [file(s)]
  #
  # -llf
***************
*** 19,26 ****
  #
  # -nosub
  # Only show warnings from the gcc top level directory.
! # -ch|-cp|-f|-java|-ada|-intl|-fixinc
! # Only show warnings from the specified language subdirectory.
  # These override each other so only the last one passed takes effect.
  #
  # -pass
--- 19,26 ----
  #
  # -nosub
  # Only show warnings from the gcc top level directory.
! # -ch|-cp|-f|-fortran|-java|-ada|-intl|-fixinc
! # Only show warnings from the specified gcc subdirectory.
  # These override each other so only the last one passed takes effect.
  #
  # -pass
*************** subdirectoryFilter()
*** 57,63 ****
    else
      if test "$filter" = nosub ; then
        # Omit all subdirectories.
!       egrep -v '/gcc/(ch|cp|f|java|intl|fixinc)/'
      else
        # Pass through only subdir $filter.
        grep "/gcc/$filter/"
--- 57,63 ----
    else
      if test "$filter" = nosub ; then
        # Omit all subdirectories.
!       egrep -v '/gcc/(ch|cp|f|fortran|java|ada|intl|fixinc)/'
      else
        # Pass through only subdir $filter.
        grep "/gcc/$filter/"
*************** keywordFilter() {
*** 107,113 ****
  	s/`\(const\)'"'"'/"\1"/g;
  	s/`\(noreturn\)'"'"'/"\1"/g;
  	s/`\(longjmp\)'"'"' or `\(vfork\)'"'"'/"\1" or "\2"/g;
! 	s/`'"[^']*'/"'`???'"'/g;"'
  	s/.*format, .* arg (arg [0-9][0-9]*)/??? format, ??? arg (arg ???)/;
  	s/\([( ]\)arg [0-9][0-9]*\([) ]\)/\1arg ???\2/;
  	s/"\([^"]*\)"/`\1'"'"'/g'
--- 107,113 ----
  	s/`\(const\)'"'"'/"\1"/g;
  	s/`\(noreturn\)'"'"'/"\1"/g;
  	s/`\(longjmp\)'"'"' or `\(vfork\)'"'"'/"\1" or "\2"/g;
! 	s/'"[\`'][^']*'/"'"???"/g;
  	s/.*format, .* arg (arg [0-9][0-9]*)/??? format, ??? arg (arg ???)/;
  	s/\([( ]\)arg [0-9][0-9]*\([) ]\)/\1arg ???\2/;
  	s/"\([^"]*\)"/`\1'"'"'/g'
*************** s%^[^ ]*/\(lib[a-z23+-]*/\)%\1%;'
*** 132,138 ****
  
  # Start the main section.
  
! usage="usage: `basename $0` [-llf] [-s stage] [-nosub|-ch|-cp|-f|-java|-ada|-intl|-fixinc] [-pass|-wpass] [file(s)]"
  stageN=3
  tmpfile=/tmp/tmp-warn.$$
  
--- 132,138 ----
  
  # Start the main section.
  
! usage="usage: `basename $0` [-llf] [-s stage] [-nosub|-ch|-cp|-f|-fortran|-java|-ada|-intl|-fixinc] [-pass|-wpass] [file(s)]"
  stageN=3
  tmpfile=/tmp/tmp-warn.$$
  
*************** while test -n "$1" ; do
*** 158,164 ****
     -s)  if test -z "$2"; then echo $usage 1>&2; exit 1; fi
  	stageN="$2"; shift 2 ;;
     -s*) stageN="`expr $1 : '-s\(.*\)'`" ; shift ;;
!    -nosub|-ch|-cp|-f|-java|-ada|-intl|-fixinc) filter="`expr $1 : '-\(.*\)'`" ; shift ;;
     -pass) pass=1 ; shift ;;
     -wpass) pass=w ; shift ;;
     -*)  echo $usage 1>&2 ; exit 1 ;;
--- 158,164 ----
     -s)  if test -z "$2"; then echo $usage 1>&2; exit 1; fi
  	stageN="$2"; shift 2 ;;
     -s*) stageN="`expr $1 : '-s\(.*\)'`" ; shift ;;
!    -nosub|-ch|-cp|-f|-fortran|-java|-ada|-intl|-fixinc) filter="`expr $1 : '-\(.*\)'`" ; shift ;;
     -pass) pass=1 ; shift ;;
     -wpass) pass=w ; shift ;;
     -*)  echo $usage 1>&2 ; exit 1 ;;
diff -Nrcpad gcc-3.4.3/depcomp gcc-4.0.0/depcomp
*** gcc-3.4.3/depcomp	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/depcomp	Thu Sep 23 01:21:50 2004
***************
*** 0 ****
--- 1,522 ----
+ #! /bin/sh
+ # depcomp - compile a program generating dependencies as side-effects
+ 
+ scriptversion=2004-05-31.23
+ 
+ # Copyright (C) 1999, 2000, 2003, 2004 Free Software Foundation, Inc.
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2, or (at your option)
+ # any later version.
+ 
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ # GNU General Public License for more details.
+ 
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ # 02111-1307, USA.
+ 
+ # As a special exception to the GNU General Public License, if you
+ # distribute this file as part of a program that contains a
+ # configuration script generated by Autoconf, you may include it under
+ # the same distribution terms that you use for the rest of that program.
+ 
+ # Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
+ 
+ case $1 in
+   '')
+      echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
+      exit 1;
+      ;;
+   -h | --h*)
+     cat <<\EOF
+ Usage: depcomp [--help] [--version] PROGRAM [ARGS]
+ 
+ Run PROGRAMS ARGS to compile a file, generating dependencies
+ as side-effects.
+ 
+ Environment variables:
+   depmode     Dependency tracking mode.
+   source      Source file read by `PROGRAMS ARGS'.
+   object      Object file output by `PROGRAMS ARGS'.
+   DEPDIR      directory where to store dependencies.
+   depfile     Dependency file to output.
+   tmpdepfile  Temporary file to use when outputing dependencies.
+   libtool     Whether libtool is used (yes/no).
+ 
+ Report bugs to <bug-automake@gnu.org>.
+ EOF
+     exit 0
+     ;;
+   -v | --v*)
+     echo "depcomp $scriptversion"
+     exit 0
+     ;;
+ esac
+ 
+ if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+   echo "depcomp: Variables source, object and depmode must be set" 1>&2
+   exit 1
+ fi
+ 
+ # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
+ depfile=${depfile-`echo "$object" |
+   sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
+ tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+ 
+ rm -f "$tmpdepfile"
+ 
+ # Some modes work just like other modes, but use different flags.  We
+ # parameterize here, but still list the modes in the big case below,
+ # to make depend.m4 easier to write.  Note that we *cannot* use a case
+ # here, because this file can only contain one case statement.
+ if test "$depmode" = hp; then
+   # HP compiler uses -M and no extra arg.
+   gccflag=-M
+   depmode=gcc
+ fi
+ 
+ if test "$depmode" = dashXmstdout; then
+    # This is just like dashmstdout with a different argument.
+    dashmflag=-xM
+    depmode=dashmstdout
+ fi
+ 
+ case "$depmode" in
+ gcc3)
+ ## gcc 3 implements dependency tracking that does exactly what
+ ## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
+ ## it if -MD -MP comes after the -MF stuff.  Hmm.
+   "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
+   stat=$?
+   if test $stat -eq 0; then :
+   else
+     rm -f "$tmpdepfile"
+     exit $stat
+   fi
+   mv "$tmpdepfile" "$depfile"
+   ;;
+ 
+ gcc)
+ ## There are various ways to get dependency output from gcc.  Here's
+ ## why we pick this rather obscure method:
+ ## - Don't want to use -MD because we'd like the dependencies to end
+ ##   up in a subdir.  Having to rename by hand is ugly.
+ ##   (We might end up doing this anyway to support other compilers.)
+ ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+ ##   -MM, not -M (despite what the docs say).
+ ## - Using -M directly means running the compiler twice (even worse
+ ##   than renaming).
+   if test -z "$gccflag"; then
+     gccflag=-MD,
+   fi
+   "$@" -Wp,"$gccflag$tmpdepfile"
+   stat=$?
+   if test $stat -eq 0; then :
+   else
+     rm -f "$tmpdepfile"
+     exit $stat
+   fi
+   rm -f "$depfile"
+   echo "$object : \\" > "$depfile"
+   alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+ ## The second -e expression handles DOS-style file names with drive letters.
+   sed -e 's/^[^:]*: / /' \
+       -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+ ## This next piece of magic avoids the `deleted header file' problem.
+ ## The problem is that when a header file which appears in a .P file
+ ## is deleted, the dependency causes make to die (because there is
+ ## typically no way to rebuild the header).  We avoid this by adding
+ ## dummy dependencies for each header file.  Too bad gcc doesn't do
+ ## this for us directly.
+   tr ' ' '
+ ' < "$tmpdepfile" |
+ ## Some versions of gcc put a space before the `:'.  On the theory
+ ## that the space means something, we add a space to the output as
+ ## well.
+ ## Some versions of the HPUX 10.20 sed can't process this invocation
+ ## correctly.  Breaking it into two sed invocations is a workaround.
+     sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+   rm -f "$tmpdepfile"
+   ;;
+ 
+ hp)
+   # This case exists only to let depend.m4 do its work.  It works by
+   # looking at the text of this script.  This case will never be run,
+   # since it is checked for above.
+   exit 1
+   ;;
+ 
+ sgi)
+   if test "$libtool" = yes; then
+     "$@" "-Wp,-MDupdate,$tmpdepfile"
+   else
+     "$@" -MDupdate "$tmpdepfile"
+   fi
+   stat=$?
+   if test $stat -eq 0; then :
+   else
+     rm -f "$tmpdepfile"
+     exit $stat
+   fi
+   rm -f "$depfile"
+ 
+   if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
+     echo "$object : \\" > "$depfile"
+ 
+     # Clip off the initial element (the dependent).  Don't try to be
+     # clever and replace this with sed code, as IRIX sed won't handle
+     # lines with more than a fixed number of characters (4096 in
+     # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
+     # the IRIX cc adds comments like `#:fec' to the end of the
+     # dependency line.
+     tr ' ' '
+ ' < "$tmpdepfile" \
+     | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
+     tr '
+ ' ' ' >> $depfile
+     echo >> $depfile
+ 
+     # The second pass generates a dummy entry for each header file.
+     tr ' ' '
+ ' < "$tmpdepfile" \
+    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+    >> $depfile
+   else
+     # The sourcefile does not contain any dependencies, so just
+     # store a dummy comment line, to avoid errors with the Makefile
+     # "include basename.Plo" scheme.
+     echo "#dummy" > "$depfile"
+   fi
+   rm -f "$tmpdepfile"
+   ;;
+ 
+ aix)
+   # The C for AIX Compiler uses -M and outputs the dependencies
+   # in a .u file.  In older versions, this file always lives in the
+   # current directory.  Also, the AIX compiler puts `$object:' at the
+   # start of each line; $object doesn't have directory information.
+   # Version 6 uses the directory in both cases.
+   stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
+   tmpdepfile="$stripped.u"
+   if test "$libtool" = yes; then
+     "$@" -Wc,-M
+   else
+     "$@" -M
+   fi
+   stat=$?
+ 
+   if test -f "$tmpdepfile"; then :
+   else
+     stripped=`echo "$stripped" | sed 's,^.*/,,'`
+     tmpdepfile="$stripped.u"
+   fi
+ 
+   if test $stat -eq 0; then :
+   else
+     rm -f "$tmpdepfile"
+     exit $stat
+   fi
+ 
+   if test -f "$tmpdepfile"; then
+     outname="$stripped.o"
+     # Each line is of the form `foo.o: dependent.h'.
+     # Do two passes, one to just change these to
+     # `$object: dependent.h' and one to simply `dependent.h:'.
+     sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
+     sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
+   else
+     # The sourcefile does not contain any dependencies, so just
+     # store a dummy comment line, to avoid errors with the Makefile
+     # "include basename.Plo" scheme.
+     echo "#dummy" > "$depfile"
+   fi
+   rm -f "$tmpdepfile"
+   ;;
+ 
+ icc)
+   # Intel's C compiler understands `-MD -MF file'.  However on
+   #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
+   # ICC 7.0 will fill foo.d with something like
+   #    foo.o: sub/foo.c
+   #    foo.o: sub/foo.h
+   # which is wrong.  We want:
+   #    sub/foo.o: sub/foo.c
+   #    sub/foo.o: sub/foo.h
+   #    sub/foo.c:
+   #    sub/foo.h:
+   # ICC 7.1 will output
+   #    foo.o: sub/foo.c sub/foo.h
+   # and will wrap long lines using \ :
+   #    foo.o: sub/foo.c ... \
+   #     sub/foo.h ... \
+   #     ...
+ 
+   "$@" -MD -MF "$tmpdepfile"
+   stat=$?
+   if test $stat -eq 0; then :
+   else
+     rm -f "$tmpdepfile"
+     exit $stat
+   fi
+   rm -f "$depfile"
+   # Each line is of the form `foo.o: dependent.h',
+   # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+   # Do two passes, one to just change these to
+   # `$object: dependent.h' and one to simply `dependent.h:'.
+   sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
+   # Some versions of the HPUX 10.20 sed can't process this invocation
+   # correctly.  Breaking it into two sed invocations is a workaround.
+   sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
+     sed -e 's/$/ :/' >> "$depfile"
+   rm -f "$tmpdepfile"
+   ;;
+ 
+ tru64)
+    # The Tru64 compiler uses -MD to generate dependencies as a side
+    # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
+    # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+    # dependencies in `foo.d' instead, so we check for that too.
+    # Subdirectories are respected.
+    dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+    test "x$dir" = "x$object" && dir=
+    base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+ 
+    if test "$libtool" = yes; then
+       # Dependencies are output in .lo.d with libtool 1.4.
+       # With libtool 1.5 they are output both in $dir.libs/$base.o.d
+       # and in $dir.libs/$base.o.d and $dir$base.o.d.  We process the
+       # latter, because the former will be cleaned when $dir.libs is
+       # erased.
+       tmpdepfile1="$dir.libs/$base.lo.d"
+       tmpdepfile2="$dir$base.o.d"
+       tmpdepfile3="$dir.libs/$base.d"
+       "$@" -Wc,-MD
+    else
+       tmpdepfile1="$dir$base.o.d"
+       tmpdepfile2="$dir$base.d"
+       tmpdepfile3="$dir$base.d"
+       "$@" -MD
+    fi
+ 
+    stat=$?
+    if test $stat -eq 0; then :
+    else
+       rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+       exit $stat
+    fi
+ 
+    if test -f "$tmpdepfile1"; then
+       tmpdepfile="$tmpdepfile1"
+    elif test -f "$tmpdepfile2"; then
+       tmpdepfile="$tmpdepfile2"
+    else
+       tmpdepfile="$tmpdepfile3"
+    fi
+    if test -f "$tmpdepfile"; then
+       sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+       # That's a tab and a space in the [].
+       sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+    else
+       echo "#dummy" > "$depfile"
+    fi
+    rm -f "$tmpdepfile"
+    ;;
+ 
+ #nosideeffect)
+   # This comment above is used by automake to tell side-effect
+   # dependency tracking mechanisms from slower ones.
+ 
+ dashmstdout)
+   # Important note: in order to support this mode, a compiler *must*
+   # always write the preprocessed file to stdout, regardless of -o.
+   "$@" || exit $?
+ 
+   # Remove the call to Libtool.
+   if test "$libtool" = yes; then
+     while test $1 != '--mode=compile'; do
+       shift
+     done
+     shift
+   fi
+ 
+   # Remove `-o $object'.
+   IFS=" "
+   for arg
+   do
+     case $arg in
+     -o)
+       shift
+       ;;
+     $object)
+       shift
+       ;;
+     *)
+       set fnord "$@" "$arg"
+       shift # fnord
+       shift # $arg
+       ;;
+     esac
+   done
+ 
+   test -z "$dashmflag" && dashmflag=-M
+   # Require at least two characters before searching for `:'
+   # in the target name.  This is to cope with DOS-style filenames:
+   # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
+   "$@" $dashmflag |
+     sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
+   rm -f "$depfile"
+   cat < "$tmpdepfile" > "$depfile"
+   tr ' ' '
+ ' < "$tmpdepfile" | \
+ ## Some versions of the HPUX 10.20 sed can't process this invocation
+ ## correctly.  Breaking it into two sed invocations is a workaround.
+     sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+   rm -f "$tmpdepfile"
+   ;;
+ 
+ dashXmstdout)
+   # This case only exists to satisfy depend.m4.  It is never actually
+   # run, as this mode is specially recognized in the preamble.
+   exit 1
+   ;;
+ 
+ makedepend)
+   "$@" || exit $?
+   # Remove any Libtool call
+   if test "$libtool" = yes; then
+     while test $1 != '--mode=compile'; do
+       shift
+     done
+     shift
+   fi
+   # X makedepend
+   shift
+   cleared=no
+   for arg in "$@"; do
+     case $cleared in
+     no)
+       set ""; shift
+       cleared=yes ;;
+     esac
+     case "$arg" in
+     -D*|-I*)
+       set fnord "$@" "$arg"; shift ;;
+     # Strip any option that makedepend may not understand.  Remove
+     # the object too, otherwise makedepend will parse it as a source file.
+     -*|$object)
+       ;;
+     *)
+       set fnord "$@" "$arg"; shift ;;
+     esac
+   done
+   obj_suffix="`echo $object | sed 's/^.*\././'`"
+   touch "$tmpdepfile"
+   ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+   rm -f "$depfile"
+   cat < "$tmpdepfile" > "$depfile"
+   sed '1,2d' "$tmpdepfile" | tr ' ' '
+ ' | \
+ ## Some versions of the HPUX 10.20 sed can't process this invocation
+ ## correctly.  Breaking it into two sed invocations is a workaround.
+     sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+   rm -f "$tmpdepfile" "$tmpdepfile".bak
+   ;;
+ 
+ cpp)
+   # Important note: in order to support this mode, a compiler *must*
+   # always write the preprocessed file to stdout.
+   "$@" || exit $?
+ 
+   # Remove the call to Libtool.
+   if test "$libtool" = yes; then
+     while test $1 != '--mode=compile'; do
+       shift
+     done
+     shift
+   fi
+ 
+   # Remove `-o $object'.
+   IFS=" "
+   for arg
+   do
+     case $arg in
+     -o)
+       shift
+       ;;
+     $object)
+       shift
+       ;;
+     *)
+       set fnord "$@" "$arg"
+       shift # fnord
+       shift # $arg
+       ;;
+     esac
+   done
+ 
+   "$@" -E |
+     sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
+     sed '$ s: \\$::' > "$tmpdepfile"
+   rm -f "$depfile"
+   echo "$object : \\" > "$depfile"
+   cat < "$tmpdepfile" >> "$depfile"
+   sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+   rm -f "$tmpdepfile"
+   ;;
+ 
+ msvisualcpp)
+   # Important note: in order to support this mode, a compiler *must*
+   # always write the preprocessed file to stdout, regardless of -o,
+   # because we must use -o when running libtool.
+   "$@" || exit $?
+   IFS=" "
+   for arg
+   do
+     case "$arg" in
+     "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+ 	set fnord "$@"
+ 	shift
+ 	shift
+ 	;;
+     *)
+ 	set fnord "$@" "$arg"
+ 	shift
+ 	shift
+ 	;;
+     esac
+   done
+   "$@" -E |
+   sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
+   rm -f "$depfile"
+   echo "$object : \\" > "$depfile"
+   . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
+   echo "	" >> "$depfile"
+   . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+   rm -f "$tmpdepfile"
+   ;;
+ 
+ none)
+   exec "$@"
+   ;;
+ 
+ *)
+   echo "Unknown depmode $depmode" 1>&2
+   exit 1
+   ;;
+ esac
+ 
+ exit 0
+ 
+ # Local Variables:
+ # mode: shell-script
+ # sh-indentation: 2
+ # eval: (add-hook 'write-file-hooks 'time-stamp)
+ # time-stamp-start: "scriptversion="
+ # time-stamp-format: "%:y-%02m-%02d.%02H"
+ # time-stamp-end: "$"
+ # End:
diff -Nrcpad gcc-3.4.3/fastjar/.cvsignore gcc-4.0.0/fastjar/.cvsignore
*** gcc-3.4.3/fastjar/.cvsignore	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fastjar/.cvsignore	Tue Jun 15 07:36:33 2004
***************
*** 0 ****
--- 1 ----
+ autom4te.cache
diff -Nrcpad gcc-3.4.3/fastjar/ChangeLog gcc-4.0.0/fastjar/ChangeLog
*** gcc-3.4.3/fastjar/ChangeLog	Fri Nov  5 03:33:27 2004
--- gcc-4.0.0/fastjar/ChangeLog	Thu Apr 21 05:17:29 2005
***************
*** 1,12 ****
! 2004-11-04  Release Manager
  
! 	* GCC 3.4.3 released.
  
! 2004-09-06  Release Manager
  
! 	* GCC 3.4.2 released.
  
! 2004-07-07  Kelley Cook  <kcook@gcc.gnu.org>
  
  	PR other/15194
  	* configure.ac: Add check for long long.
--- 1,113 ----
! 2005-04-20  Release Manager
  
! 	* GCC 4.0.0 released.
  
! 2004-12-02  Richard Sandiford  <rsandifo@redhat.com>
  
! 	* configure.ac: Use TL_AC_GCC_VERSION to set gcc_version.
! 	* configure, aclocal.m4, Makefile.in: Regenerate.
  
! 2004-11-15  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* Makefile.am: Remove -no-dependencies.
! 	* Makefile.in: Regenerate.
! 
! 2004-11-13  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* Makefile.am: Define ACLOCAL_AMFLAGS.
! 	* acinclude.m4: Remove unnecessary sinclude.
! 	* aclocal.m4, Makefile.in, configure: Regenerate (autoreconf 1.9.3).
! 
! 2004-09-23  Tom Tromey  <tromey@redhat.com>
! 
! 	* jartool.c (extract_jar): Unconditionally read extra data in the
! 	entry header; don't read it after the file contents.
! 
! 2004-08-11  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	PR bootstrap/16164
! 	* Makefile.am: Force fastjar.info to be built in build directory.
! 	* Makefile.in: Regenerate.
! 
! 2004-07-23  Thomas Fitzsimmons  <fitzsim@redhat.com>
! 
! 	* Makefile.am: Rename jar binary to fastjar.
! 	* Makefile.in: Regenerate.
! 	* fastjar.texi: Rename references to jar binary with fastjar.
! 
! 2004-07-19  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	* jartool.c (main): Ensure that only one of ftruncate and _chsize
! 	is used.
! 
! 2004-07-11  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	PR 16472
! 	* configure.ac: Check for ftruncate() and _chsize().
! 	* jartool.c (main): Use _chsize if ftruncate not available.
! 	* configure, config.h.in: Rebuilt.
! 
! 2004-07-09  Richard Sandiford  <rsandifo@redhat.com>
! 
! 	* jartool.c (find_entry, looks_like_dir): Remove inline spec.
! 
! 2004-07-07  Matthias Klose  <doko@debian.org>
! 
! 	* Makefile.am (jar_CPPFLAGS): Add AM_CPPFLAGS.
! 	* Makefile.in: Regenerate.
! 
! 2004-07-06  Matthias Klose  <doko@debian.org>
! 
! 	* Makefile.in: Regenerate.
! 	* fastjar.texi: Update for '-u'.
! 	
! 2004-07-06  Casey Marshall <csm@gnu.org>
! 
! 	PR 7854
! 	* Makefile.am
! 	(jar_SOURCES): added shift.c, shift.h.
!         (jar_CPPFLAGS): define WITH_SHIFT_DOWN.
! 
!         * compress.c
!         Added FSF copyright.
!         (write_data): new function.
!         (compress_file): call write_data.
! 
!         * jartool.c
!         Updated copyright year.
!         (progname): new variable.
!         (end_of_entries): new variable.
!         (main): open and read file when updating.
!         (find_entry): new function.
!         (looks_like_dir): new function.
!         (read_entries): new function.
!         (make_manifest): added parameter `updating'.
!         Call `add_file_to_jar' with `updating'.
!         (add_to_jar_with_dir): added parameter `updating'.
!         Call `add_to_jar' with `updating'.
!         (add_to_jar): added parameter `updating'.
!         Call `add_file_to_jar' with `updating'.
!         Don't add directories if they already exist.
!         (add_file_to_jar): added parameter `updating'.
!         Update entries if they already exist.
! 
!         * jartool.h
!         Added #ifndef __FASTJAR_JARTOOL_H__.
!         (struct zipentry): added `flags'.
! 
!         * shift.c: new file.
! 
!         * shift.h: new file.
! 
!         * zipfile.h
!         (CEN_FLAGS): new constant.
! 
! 2004-07-05  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* Makefile.am: Silence two automake warnings.
! 	* Makefile.in: Regenerate.
! 
! 2004-06-25  Kelley Cook  <kcook@gcc.gnu.org>
  
  	PR other/15194
  	* configure.ac: Add check for long long.
***************
*** 14,26 ****
  	* configure: Regenerate
  	* config.h.in: Regenerate.
  
! 2004-07-01  Release Manager
! 
! 	* GCC 3.4.1 released.
! 
! 2004-04-18  Release Manager
  
! 	* GCC 3.4.0 released.
  
  2004-04-12  Kelley Cook  <kcook@gcc.gnu.org>
  
--- 115,127 ----
  	* configure: Regenerate
  	* config.h.in: Regenerate.
  
! 2004-06-15  Paolo Bonzini  <bonzini@gnu.org>
  
! 	* acinclude.m4: Quote first argument of AC_DEFUNs.
! 	* aclocal.m4: Regenerate with automake 1.8.
! 	* Makefile.in: Likewise.
! 	* configure: Regenerate.
! 	* .cvsignore: New file.
  
  2004-04-12  Kelley Cook  <kcook@gcc.gnu.org>
  
***************
*** 30,35 ****
--- 131,145 ----
  	* configure: Regenerate.
  	* Makefile.in Regenerate.
  
+ 2004-03-10  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* configure.ac: Bump AC_PREREQ to 2.59.
+ 	* configure: Regenerate.
+ 
+ 2004-03-09  Hans-Peter Nilsson  <hp@axis.com>
+ 
+ 	* configure: Regenerate for config/accross.m4 correction.
+ 
  2004-01-09  Kelley Cook  <kcook@gcc.gnu.org>
  
  	* configure.in: Rename file to ...
diff -Nrcpad gcc-3.4.3/fastjar/Makefile.am gcc-4.0.0/fastjar/Makefile.am
*** gcc-3.4.3/fastjar/Makefile.am	Wed Apr 14 23:49:37 2004
--- gcc-4.0.0/fastjar/Makefile.am	Mon Nov 15 23:50:05 2004
***************
*** 1,7 ****
  # Process this with automake to create Makefile.in
  
! ## We definitely don't want dependency tracking when using automake 1.4.
! AUTOMAKE_OPTIONS = no-dependencies
  
  # Work around what appears to be a GNU make bug handling MAKEFLAGS
  # values defined in terms of make variables, as is the case for CC and
--- 1,6 ----
  # Process this with automake to create Makefile.in
  
! ACLOCAL_AMFLAGS = -I ../config
  
  # Work around what appears to be a GNU make bug handling MAKEFLAGS
  # values defined in terms of make variables, as is the case for CC and
*************** AM_MAKEFLAGS = \
*** 41,55 ****
  	"RANLIB=$(RANLIB)" \
  	"DESTDIR=$(DESTDIR)"
  
! INCLUDES = -I. -I$(top_srcdir) $(ZINCS) -I$(top_srcdir)/../include
  
  LIBIBERTY = ../libiberty/libiberty.a
  
! bin_PROGRAMS = jar grepjar
! jar_SOURCES = jartool.c dostime.c compress.c pushback.c jartool.h \
! zipfile.h dostime.h compress.h pushback.h
! jar_LDADD = $(ZLIBS) $(LIBIBERTY)
! jar_DEPENDENCIES = $(ZDEPS) $(LIBIBERTY)
  
  grepjar_SOURCES = jargrep.c dostime.c compress.c pushback.c jartool.h \
  zipfile.h dostime.h compress.h pushback.h
--- 40,55 ----
  	"RANLIB=$(RANLIB)" \
  	"DESTDIR=$(DESTDIR)"
  
! AM_CPPFLAGS = -I. -I$(top_srcdir) $(ZINCS) -I$(top_srcdir)/../include
  
  LIBIBERTY = ../libiberty/libiberty.a
  
! bin_PROGRAMS = fastjar grepjar
! fastjar_SOURCES = jartool.c dostime.c compress.c pushback.c shift.c jartool.h \
! zipfile.h dostime.h compress.h pushback.h shift.h
! fastjar_LDADD = $(ZLIBS) $(LIBIBERTY)
! fastjar_DEPENDENCIES = $(ZDEPS) $(LIBIBERTY)
! fastjar_CPPFLAGS = $(AM_CPPFLAGS) -DWITH_SHIFT_DOWN
  
  grepjar_SOURCES = jargrep.c dostime.c compress.c pushback.c jartool.h \
  zipfile.h dostime.h compress.h pushback.h
*************** info_TEXINFOS = fastjar.texi
*** 64,84 ****
  fastjar_TEXINFOS = \
  	../gcc/doc/include/gcc-common.texi \
  	../gcc/doc/include/gpl.texi
! man_MANS = jar.1 grepjar.1
  EXTRA_DIST = $(man_MANS)
  
  TEXI2POD = perl $(srcdir)/../contrib/texi2pod.pl
  POD2MAN = pod2man --center="GNU" --release="gcc-@gcc_version@"
  
! %.1: %.pod
  	-($(POD2MAN) --section=1 $< > $(@).T$$$$ && \
  		mv -f $(@).T$$$$ $@) || \
  		(rm -f $(@).T$$$$ && exit 1)
  
! .INTERMEDIATE: jar.pod grepjar.pod
  
! jar.pod: $(srcdir)/fastjar.texi
! 	-$(TEXI2POD) -D jar $< > $@
  
  grepjar.pod: $(srcdir)/fastjar.texi
  	-$(TEXI2POD) -D grepjar $< > $@
--- 64,84 ----
  fastjar_TEXINFOS = \
  	../gcc/doc/include/gcc-common.texi \
  	../gcc/doc/include/gpl.texi
! man_MANS = fastjar.1 grepjar.1
  EXTRA_DIST = $(man_MANS)
  
  TEXI2POD = perl $(srcdir)/../contrib/texi2pod.pl
  POD2MAN = pod2man --center="GNU" --release="gcc-@gcc_version@"
  
! .pod.1:
  	-($(POD2MAN) --section=1 $< > $(@).T$$$$ && \
  		mv -f $(@).T$$$$ $@) || \
  		(rm -f $(@).T$$$$ && exit 1)
  
! .INTERMEDIATE: fastjar.pod grepjar.pod
  
! fastjar.pod: $(srcdir)/fastjar.texi
! 	-$(TEXI2POD) -D fastjar $< > $@
  
  grepjar.pod: $(srcdir)/fastjar.texi
  	-$(TEXI2POD) -D grepjar $< > $@
*************** endif
*** 96,108 ****
  
  all-local: $(STAMP_GENINSRC) 
  
! stamp-geninsrc: jar.1 grepjar.1 fastjar.info
! 	-cp -p $(top_builddir)/jar.1 $(srcdir)/jar.1
  	-cp -p $(top_builddir)/grepjar.1 $(srcdir)/grepjar.1
  	-cp -p $(top_builddir)/fastjar.info $(srcdir)/fastjar.info
  	touch $@
  
! CLEANFILES = stamp-geninsrc
! MAINTAINERCLEANFILES = $(srcdir)/jar.1 \
                         $(srcdir)/grepjar.1 \
                         $(srcdir)/fastjar.info
--- 96,108 ----
  
  all-local: $(STAMP_GENINSRC) 
  
! stamp-geninsrc: fastjar.1 grepjar.1 fastjar.info
! 	-cp -p $(top_builddir)/fastjar.1 $(srcdir)/fastjar.1
  	-cp -p $(top_builddir)/grepjar.1 $(srcdir)/grepjar.1
  	-cp -p $(top_builddir)/fastjar.info $(srcdir)/fastjar.info
  	touch $@
  
! CLEANFILES = stamp-geninsrc fastjar.info
! MAINTAINERCLEANFILES = $(srcdir)/fastjar.1 \
                         $(srcdir)/grepjar.1 \
                         $(srcdir)/fastjar.info
diff -Nrcpad gcc-3.4.3/fastjar/Makefile.in gcc-4.0.0/fastjar/Makefile.in
*** gcc-3.4.3/fastjar/Makefile.in	Fri Nov  5 04:14:05 2004
--- gcc-4.0.0/fastjar/Makefile.in	Thu Apr 21 07:04:10 2005
***************
*** 1,8 ****
! # Makefile.in generated by automake 1.7.9 from Makefile.am.
  # @configure_input@
  
! # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
! # Free Software Foundation, Inc.
  # This Makefile.in is free software; the Free Software Foundation
  # gives unlimited permission to copy and/or distribute it,
  # with or without modifications, as long as this notice is preserved.
--- 1,8 ----
! # Makefile.in generated by automake 1.9.3 from Makefile.am.
  # @configure_input@
  
! # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
! # 2003, 2004  Free Software Foundation, Inc.
  # This Makefile.in is free software; the Free Software Foundation
  # gives unlimited permission to copy and/or distribute it,
  # with or without modifications, as long as this notice is preserved.
***************
*** 16,21 ****
--- 16,23 ----
  
  # Process this with automake to create Makefile.in
  
+ SOURCES = $(fastjar_SOURCES) $(grepjar_SOURCES)
+ 
  srcdir = @srcdir@
  top_srcdir = @top_srcdir@
  VPATH = @srcdir@
*************** pkgdatadir = $(datadir)/@PACKAGE@
*** 23,29 ****
  pkglibdir = $(libdir)/@PACKAGE@
  pkgincludedir = $(includedir)/@PACKAGE@
  top_builddir = .
- 
  am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
  INSTALL = @INSTALL@
  install_sh_DATA = $(install_sh) -c -m 644
--- 25,30 ----
*************** POST_INSTALL = :
*** 37,42 ****
--- 38,113 ----
  NORMAL_UNINSTALL = :
  PRE_UNINSTALL = :
  POST_UNINSTALL = :
+ bin_PROGRAMS = fastjar$(EXEEXT) grepjar$(EXEEXT)
+ subdir = .
+ DIST_COMMON = README $(am__configure_deps) $(fastjar_TEXINFOS) \
+ 	$(srcdir)/../compile $(srcdir)/../depcomp \
+ 	$(srcdir)/../install-sh $(srcdir)/../missing \
+ 	$(srcdir)/../mkinstalldirs $(srcdir)/Makefile.am \
+ 	$(srcdir)/Makefile.in $(srcdir)/config.h.in \
+ 	$(srcdir)/install-defs.sh.in $(top_srcdir)/configure AUTHORS \
+ 	COPYING ChangeLog INSTALL NEWS
+ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+ am__aclocal_m4_deps = $(top_srcdir)/../config/accross.m4 \
+ 	$(top_srcdir)/../config/gcc-version.m4 \
+ 	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ 	$(ACLOCAL_M4)
+ am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+  configure.lineno configure.status.lineno
+ mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
+ CONFIG_HEADER = config.h
+ CONFIG_CLEAN_FILES = install-defs.sh
+ am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(infodir)" \
+ 	"$(DESTDIR)$(man1dir)"
+ binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+ PROGRAMS = $(bin_PROGRAMS)
+ am_fastjar_OBJECTS = fastjar-jartool.$(OBJEXT) \
+ 	fastjar-dostime.$(OBJEXT) fastjar-compress.$(OBJEXT) \
+ 	fastjar-pushback.$(OBJEXT) fastjar-shift.$(OBJEXT)
+ fastjar_OBJECTS = $(am_fastjar_OBJECTS)
+ am__DEPENDENCIES_1 =
+ am__DEPENDENCIES_2 = ../libiberty/libiberty.a
+ am_grepjar_OBJECTS = jargrep.$(OBJEXT) dostime.$(OBJEXT) \
+ 	compress.$(OBJEXT) pushback.$(OBJEXT)
+ grepjar_OBJECTS = $(am_grepjar_OBJECTS)
+ DEFAULT_INCLUDES = -I. -I$(srcdir) -I.
+ depcomp = $(SHELL) $(top_srcdir)/../depcomp
+ am__depfiles_maybe = depfiles
+ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+ CCLD = $(CC)
+ LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+ SOURCES = $(fastjar_SOURCES) $(grepjar_SOURCES)
+ DIST_SOURCES = $(fastjar_SOURCES) $(grepjar_SOURCES)
+ INFO_DEPS = fastjar.info
+ am__TEXINFO_TEX_DIR = $(srcdir)/../gcc/doc/include
+ DVIS = fastjar.dvi
+ PDFS = fastjar.pdf
+ PSS = fastjar.ps
+ HTMLS = fastjar.html
+ TEXINFOS = fastjar.texi
+ TEXI2DVI = texi2dvi
+ TEXI2PDF = $(TEXI2DVI) --pdf --batch
+ MAKEINFOHTML = $(MAKEINFO) --html
+ AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS)
+ DVIPS = dvips
+ man1dir = $(mandir)/man1
+ NROFF = nroff
+ MANS = $(man_MANS)
+ ETAGS = etags
+ CTAGS = ctags
+ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ distdir = $(PACKAGE)-$(VERSION)
+ top_distdir = $(distdir)
+ am__remove_distdir = \
+   { test ! -d $(distdir) \
+     || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
+          && rm -fr $(distdir); }; }
+ DIST_ARCHIVES = $(distdir).tar.gz
+ GZIP_ENV = --best
+ distuninstallcheck_listfiles = find . -type f -print
+ distcleancheck_listfiles = find . -type f -print
  ACLOCAL = @ACLOCAL@
  AMDEP_FALSE = @AMDEP_FALSE@
  AMDEP_TRUE = @AMDEP_TRUE@
*************** am__fastdepCC_TRUE = @am__fastdepCC_TRUE
*** 97,108 ****
--- 168,183 ----
  am__include = @am__include@
  am__leading_dot = @am__leading_dot@
  am__quote = @am__quote@
+ am__tar = @am__tar@
+ am__untar = @am__untar@
  bindir = @bindir@
  build_alias = @build_alias@
  datadir = @datadir@
  exec_prefix = @exec_prefix@
  fastjar_warn_cflags = @fastjar_warn_cflags@
  gcc_version = @gcc_version@
+ gcc_version_full = @gcc_version_full@
+ gcc_version_trigger = @gcc_version_trigger@
  host_alias = @host_alias@
  includedir = @includedir@
  infodir = @infodir@
*************** libdir = @libdir@
*** 111,116 ****
--- 186,192 ----
  libexecdir = @libexecdir@
  localstatedir = @localstatedir@
  mandir = @mandir@
+ mkdir_p = @mkdir_p@
  oldincludedir = @oldincludedir@
  prefix = @prefix@
  program_transform_name = @program_transform_name@
*************** sbindir = @sbindir@
*** 118,125 ****
  sharedstatedir = @sharedstatedir@
  sysconfdir = @sysconfdir@
  target_alias = @target_alias@
! 
! AUTOMAKE_OPTIONS = no-dependencies
  
  # Work around what appears to be a GNU make bug handling MAKEFLAGS
  # values defined in terms of make variables, as is the case for CC and
--- 194,200 ----
  sharedstatedir = @sharedstatedir@
  sysconfdir = @sysconfdir@
  target_alias = @target_alias@
! ACLOCAL_AMFLAGS = -I ../config
  
  # Work around what appears to be a GNU make bug handling MAKEFLAGS
  # values defined in terms of make variables, as is the case for CC and
*************** AM_MAKEFLAGS = \
*** 159,271 ****
  	"RANLIB=$(RANLIB)" \
  	"DESTDIR=$(DESTDIR)"
  
! 
! INCLUDES = -I. -I$(top_srcdir) $(ZINCS) -I$(top_srcdir)/../include
! 
  LIBIBERTY = ../libiberty/libiberty.a
  
! bin_PROGRAMS = jar grepjar
! jar_SOURCES = jartool.c dostime.c compress.c pushback.c jartool.h \
! zipfile.h dostime.h compress.h pushback.h
! 
! jar_LDADD = $(ZLIBS) $(LIBIBERTY)
! jar_DEPENDENCIES = $(ZDEPS) $(LIBIBERTY)
! 
  grepjar_SOURCES = jargrep.c dostime.c compress.c pushback.c jartool.h \
  zipfile.h dostime.h compress.h pushback.h
  
  grepjar_LDADD = $(ZLIBS) $(LIBIBERTY)
  grepjar_DEPENDENCIES = $(ZDEPS) $(LIBIBERTY)
- 
  AM_CFLAGS = @fastjar_warn_cflags@
  AM_MAKEINFOFLAGS = -I $(srcdir)/../gcc/doc/include
- 
  TEXINFO_TEX = ../gcc/doc/include/texinfo.tex
  info_TEXINFOS = fastjar.texi
  fastjar_TEXINFOS = \
  	../gcc/doc/include/gcc-common.texi \
  	../gcc/doc/include/gpl.texi
  
! man_MANS = jar.1 grepjar.1
  EXTRA_DIST = $(man_MANS)
- 
  TEXI2POD = perl $(srcdir)/../contrib/texi2pod.pl
  POD2MAN = pod2man --center="GNU" --release="gcc-@gcc_version@"
  @GENINSRC_FALSE@STAMP_GENINSRC = 
  
- 
  # GCC LOCAL CHANGE
  # The following commands allow us to release tarballs with the man pages
  # and info documentation prebuilt.  This feature is enabled via 
  # --enable-generated-files-in-srcdir in the configure script.
  @GENINSRC_TRUE@STAMP_GENINSRC = stamp-geninsrc
! 
! CLEANFILES = stamp-geninsrc
! MAINTAINERCLEANFILES = $(srcdir)/jar.1 \
                         $(srcdir)/grepjar.1 \
                         $(srcdir)/fastjar.info
  
- subdir = .
- ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
- mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
- CONFIG_HEADER = config.h
- CONFIG_CLEAN_FILES = install-defs.sh
- bin_PROGRAMS = jar$(EXEEXT) grepjar$(EXEEXT)
- PROGRAMS = $(bin_PROGRAMS)
- 
- am_grepjar_OBJECTS = jargrep.$(OBJEXT) dostime.$(OBJEXT) \
- 	compress.$(OBJEXT) pushback.$(OBJEXT)
- grepjar_OBJECTS = $(am_grepjar_OBJECTS)
- grepjar_LDFLAGS =
- am_jar_OBJECTS = jartool.$(OBJEXT) dostime.$(OBJEXT) compress.$(OBJEXT) \
- 	pushback.$(OBJEXT)
- jar_OBJECTS = $(am_jar_OBJECTS)
- jar_LDFLAGS =
- 
- DEFAULT_INCLUDES =  -I. -I$(srcdir) -I.
- depcomp =
- am__depfiles_maybe =
- COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
- 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
- CCLD = $(CC)
- LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
- DIST_SOURCES = $(grepjar_SOURCES) $(jar_SOURCES)
- am__TEXINFO_TEX_DIR = $(srcdir)/../gcc/doc/include
- INFO_DEPS = fastjar.info
- DVIS = fastjar.dvi
- PDFS = fastjar.pdf
- PSS = fastjar.ps
- TEXINFOS = fastjar.texi
- 
- NROFF = nroff
- MANS = $(man_MANS)
- DIST_COMMON = README $(fastjar_TEXINFOS) $(srcdir)/Makefile.in \
- 	$(srcdir)/configure ../install-sh ../missing ../mkinstalldirs \
- 	AUTHORS COPYING ChangeLog INSTALL Makefile.am NEWS acinclude.m4 \
- 	aclocal.m4 config.h.in configure configure.ac \
- 	install-defs.sh.in
- SOURCES = $(grepjar_SOURCES) $(jar_SOURCES)
- 
  all: config.h
  	$(MAKE) $(AM_MAKEFLAGS) all-am
  
  .SUFFIXES:
! .SUFFIXES: .c .dvi .info .o .obj .pdf .ps .texi
! 
! am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
!  configure.lineno
! $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am  $(top_srcdir)/configure.ac $(ACLOCAL_M4)
  	cd $(top_srcdir) && \
  	  $(AUTOMAKE) --gnu  Makefile
! Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in  $(top_builddir)/config.status
! 	cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)
  
! $(top_builddir)/config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
  	$(SHELL) ./config.status --recheck
- $(srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(srcdir)/configure.ac $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
- 	cd $(srcdir) && $(AUTOCONF)
  
! $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.ac acinclude.m4
  	cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
  
  config.h: stamp-h1
--- 234,313 ----
  	"RANLIB=$(RANLIB)" \
  	"DESTDIR=$(DESTDIR)"
  
! AM_CPPFLAGS = -I. -I$(top_srcdir) $(ZINCS) -I$(top_srcdir)/../include
  LIBIBERTY = ../libiberty/libiberty.a
+ fastjar_SOURCES = jartool.c dostime.c compress.c pushback.c shift.c jartool.h \
+ zipfile.h dostime.h compress.h pushback.h shift.h
  
! fastjar_LDADD = $(ZLIBS) $(LIBIBERTY)
! fastjar_DEPENDENCIES = $(ZDEPS) $(LIBIBERTY)
! fastjar_CPPFLAGS = $(AM_CPPFLAGS) -DWITH_SHIFT_DOWN
  grepjar_SOURCES = jargrep.c dostime.c compress.c pushback.c jartool.h \
  zipfile.h dostime.h compress.h pushback.h
  
  grepjar_LDADD = $(ZLIBS) $(LIBIBERTY)
  grepjar_DEPENDENCIES = $(ZDEPS) $(LIBIBERTY)
  AM_CFLAGS = @fastjar_warn_cflags@
  AM_MAKEINFOFLAGS = -I $(srcdir)/../gcc/doc/include
  TEXINFO_TEX = ../gcc/doc/include/texinfo.tex
  info_TEXINFOS = fastjar.texi
  fastjar_TEXINFOS = \
  	../gcc/doc/include/gcc-common.texi \
  	../gcc/doc/include/gpl.texi
  
! man_MANS = fastjar.1 grepjar.1
  EXTRA_DIST = $(man_MANS)
  TEXI2POD = perl $(srcdir)/../contrib/texi2pod.pl
  POD2MAN = pod2man --center="GNU" --release="gcc-@gcc_version@"
  @GENINSRC_FALSE@STAMP_GENINSRC = 
  
  # GCC LOCAL CHANGE
  # The following commands allow us to release tarballs with the man pages
  # and info documentation prebuilt.  This feature is enabled via 
  # --enable-generated-files-in-srcdir in the configure script.
  @GENINSRC_TRUE@STAMP_GENINSRC = stamp-geninsrc
! CLEANFILES = stamp-geninsrc fastjar.info
! MAINTAINERCLEANFILES = $(srcdir)/fastjar.1 \
                         $(srcdir)/grepjar.1 \
                         $(srcdir)/fastjar.info
  
  all: config.h
  	$(MAKE) $(AM_MAKEFLAGS) all-am
  
  .SUFFIXES:
! .SUFFIXES: .1 .c .dvi .o .obj .pod .ps
! am--refresh:
! 	@:
! $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
! 	@for dep in $?; do \
! 	  case '$(am__configure_deps)' in \
! 	    *$$dep*) \
! 	      echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \
! 	      cd $(srcdir) && $(AUTOMAKE) --gnu  \
! 		&& exit 0; \
! 	      exit 1;; \
! 	  esac; \
! 	done; \
! 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  Makefile'; \
  	cd $(top_srcdir) && \
  	  $(AUTOMAKE) --gnu  Makefile
! .PRECIOUS: Makefile
! Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
! 	@case '$?' in \
! 	  *config.status*) \
! 	    echo ' $(SHELL) ./config.status'; \
! 	    $(SHELL) ./config.status;; \
! 	  *) \
! 	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
! 	    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
! 	esac;
  
! $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
  	$(SHELL) ./config.status --recheck
  
! $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
! 	cd $(srcdir) && $(AUTOCONF)
! $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
  	cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
  
  config.h: stamp-h1
*************** config.h: stamp-h1
*** 277,302 ****
  stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
  	@rm -f stamp-h1
  	cd $(top_builddir) && $(SHELL) ./config.status config.h
! 
! $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(top_srcdir)/configure.ac $(ACLOCAL_M4) 
  	cd $(top_srcdir) && $(AUTOHEADER)
! 	touch $(srcdir)/config.h.in
  
  distclean-hdr:
  	-rm -f config.h stamp-h1
! install-defs.sh: $(top_builddir)/config.status install-defs.sh.in
  	cd $(top_builddir) && $(SHELL) ./config.status $@
- binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
  install-binPROGRAMS: $(bin_PROGRAMS)
  	@$(NORMAL_INSTALL)
! 	$(mkinstalldirs) $(DESTDIR)$(bindir)
  	@list='$(bin_PROGRAMS)'; for p in $$list; do \
  	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
  	  if test -f $$p \
  	  ; then \
  	    f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
! 	   echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f"; \
! 	   $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f || exit 1; \
  	  else :; fi; \
  	done
  
--- 319,343 ----
  stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
  	@rm -f stamp-h1
  	cd $(top_builddir) && $(SHELL) ./config.status config.h
! $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) 
  	cd $(top_srcdir) && $(AUTOHEADER)
! 	rm -f stamp-h1
! 	touch $@
  
  distclean-hdr:
  	-rm -f config.h stamp-h1
! install-defs.sh: $(top_builddir)/config.status $(srcdir)/install-defs.sh.in
  	cd $(top_builddir) && $(SHELL) ./config.status $@
  install-binPROGRAMS: $(bin_PROGRAMS)
  	@$(NORMAL_INSTALL)
! 	test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
  	@list='$(bin_PROGRAMS)'; for p in $$list; do \
  	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
  	  if test -f $$p \
  	  ; then \
  	    f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
! 	   echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
! 	   $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
  	  else :; fi; \
  	done
  
*************** uninstall-binPROGRAMS:
*** 304,355 ****
  	@$(NORMAL_UNINSTALL)
  	@list='$(bin_PROGRAMS)'; for p in $$list; do \
  	  f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
! 	  echo " rm -f $(DESTDIR)$(bindir)/$$f"; \
! 	  rm -f $(DESTDIR)$(bindir)/$$f; \
  	done
  
  clean-binPROGRAMS:
  	-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
  grepjar$(EXEEXT): $(grepjar_OBJECTS) $(grepjar_DEPENDENCIES) 
  	@rm -f grepjar$(EXEEXT)
  	$(LINK) $(grepjar_LDFLAGS) $(grepjar_OBJECTS) $(grepjar_LDADD) $(LIBS)
- jar$(EXEEXT): $(jar_OBJECTS) $(jar_DEPENDENCIES) 
- 	@rm -f jar$(EXEEXT)
- 	$(LINK) $(jar_LDFLAGS) $(jar_OBJECTS) $(jar_LDADD) $(LIBS)
  
  mostlyclean-compile:
! 	-rm -f *.$(OBJEXT) core *.core
  
  distclean-compile:
  	-rm -f *.tab.c
  
  .c.o:
! 	$(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$<
  
  .c.obj:
! 	$(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`
  
! .texi.info:
! 	@rm -f $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]
! 	$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
! 	 -o $@ `test -f '$<' || echo '$(srcdir)/'`$<
  
! .texi.dvi:
  	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
  	MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
! 	$(TEXI2DVI) `test -f '$<' || echo '$(srcdir)/'`$<
  
! .texi.pdf:
  	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
  	MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
! 	$(TEXI2PDF) `test -f '$<' || echo '$(srcdir)/'`$<
! fastjar.info: fastjar.texi $(fastjar_TEXINFOS)
! fastjar.dvi: fastjar.texi $(fastjar_TEXINFOS)
! fastjar.pdf: fastjar.texi $(fastjar_TEXINFOS)
! TEXI2DVI = texi2dvi
  
! TEXI2PDF = $(TEXI2DVI) --pdf --batch
! DVIPS = dvips
  .dvi.ps:
  	$(DVIPS) -o $@ $<
  
--- 345,502 ----
  	@$(NORMAL_UNINSTALL)
  	@list='$(bin_PROGRAMS)'; for p in $$list; do \
  	  f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
! 	  echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
! 	  rm -f "$(DESTDIR)$(bindir)/$$f"; \
  	done
  
  clean-binPROGRAMS:
  	-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+ fastjar$(EXEEXT): $(fastjar_OBJECTS) $(fastjar_DEPENDENCIES) 
+ 	@rm -f fastjar$(EXEEXT)
+ 	$(LINK) $(fastjar_LDFLAGS) $(fastjar_OBJECTS) $(fastjar_LDADD) $(LIBS)
  grepjar$(EXEEXT): $(grepjar_OBJECTS) $(grepjar_DEPENDENCIES) 
  	@rm -f grepjar$(EXEEXT)
  	$(LINK) $(grepjar_LDFLAGS) $(grepjar_OBJECTS) $(grepjar_LDADD) $(LIBS)
  
  mostlyclean-compile:
! 	-rm -f *.$(OBJEXT)
  
  distclean-compile:
  	-rm -f *.tab.c
  
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/compress.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dostime.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fastjar-compress.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fastjar-dostime.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fastjar-jartool.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fastjar-pushback.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fastjar-shift.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jargrep.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pushback.Po@am__quote@
+ 
  .c.o:
! @am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
! @am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(COMPILE) -c $<
  
  .c.obj:
! @am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
! @am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
  
! fastjar-jartool.o: jartool.c
! @am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastjar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT fastjar-jartool.o -MD -MP -MF "$(DEPDIR)/fastjar-jartool.Tpo" -c -o fastjar-jartool.o `test -f 'jartool.c' || echo '$(srcdir)/'`jartool.c; \
! @am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fastjar-jartool.Tpo" "$(DEPDIR)/fastjar-jartool.Po"; else rm -f "$(DEPDIR)/fastjar-jartool.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jartool.c' object='fastjar-jartool.o' libtool=no @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastjar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o fastjar-jartool.o `test -f 'jartool.c' || echo '$(srcdir)/'`jartool.c
  
! fastjar-jartool.obj: jartool.c
! @am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastjar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT fastjar-jartool.obj -MD -MP -MF "$(DEPDIR)/fastjar-jartool.Tpo" -c -o fastjar-jartool.obj `if test -f 'jartool.c'; then $(CYGPATH_W) 'jartool.c'; else $(CYGPATH_W) '$(srcdir)/jartool.c'; fi`; \
! @am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fastjar-jartool.Tpo" "$(DEPDIR)/fastjar-jartool.Po"; else rm -f "$(DEPDIR)/fastjar-jartool.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jartool.c' object='fastjar-jartool.obj' libtool=no @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastjar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o fastjar-jartool.obj `if test -f 'jartool.c'; then $(CYGPATH_W) 'jartool.c'; else $(CYGPATH_W) '$(srcdir)/jartool.c'; fi`
! 
! fastjar-dostime.o: dostime.c
! @am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastjar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT fastjar-dostime.o -MD -MP -MF "$(DEPDIR)/fastjar-dostime.Tpo" -c -o fastjar-dostime.o `test -f 'dostime.c' || echo '$(srcdir)/'`dostime.c; \
! @am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fastjar-dostime.Tpo" "$(DEPDIR)/fastjar-dostime.Po"; else rm -f "$(DEPDIR)/fastjar-dostime.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='dostime.c' object='fastjar-dostime.o' libtool=no @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastjar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o fastjar-dostime.o `test -f 'dostime.c' || echo '$(srcdir)/'`dostime.c
! 
! fastjar-dostime.obj: dostime.c
! @am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastjar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT fastjar-dostime.obj -MD -MP -MF "$(DEPDIR)/fastjar-dostime.Tpo" -c -o fastjar-dostime.obj `if test -f 'dostime.c'; then $(CYGPATH_W) 'dostime.c'; else $(CYGPATH_W) '$(srcdir)/dostime.c'; fi`; \
! @am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fastjar-dostime.Tpo" "$(DEPDIR)/fastjar-dostime.Po"; else rm -f "$(DEPDIR)/fastjar-dostime.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='dostime.c' object='fastjar-dostime.obj' libtool=no @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastjar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o fastjar-dostime.obj `if test -f 'dostime.c'; then $(CYGPATH_W) 'dostime.c'; else $(CYGPATH_W) '$(srcdir)/dostime.c'; fi`
! 
! fastjar-compress.o: compress.c
! @am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastjar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT fastjar-compress.o -MD -MP -MF "$(DEPDIR)/fastjar-compress.Tpo" -c -o fastjar-compress.o `test -f 'compress.c' || echo '$(srcdir)/'`compress.c; \
! @am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fastjar-compress.Tpo" "$(DEPDIR)/fastjar-compress.Po"; else rm -f "$(DEPDIR)/fastjar-compress.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='compress.c' object='fastjar-compress.o' libtool=no @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastjar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o fastjar-compress.o `test -f 'compress.c' || echo '$(srcdir)/'`compress.c
! 
! fastjar-compress.obj: compress.c
! @am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastjar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT fastjar-compress.obj -MD -MP -MF "$(DEPDIR)/fastjar-compress.Tpo" -c -o fastjar-compress.obj `if test -f 'compress.c'; then $(CYGPATH_W) 'compress.c'; else $(CYGPATH_W) '$(srcdir)/compress.c'; fi`; \
! @am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fastjar-compress.Tpo" "$(DEPDIR)/fastjar-compress.Po"; else rm -f "$(DEPDIR)/fastjar-compress.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='compress.c' object='fastjar-compress.obj' libtool=no @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastjar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o fastjar-compress.obj `if test -f 'compress.c'; then $(CYGPATH_W) 'compress.c'; else $(CYGPATH_W) '$(srcdir)/compress.c'; fi`
! 
! fastjar-pushback.o: pushback.c
! @am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastjar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT fastjar-pushback.o -MD -MP -MF "$(DEPDIR)/fastjar-pushback.Tpo" -c -o fastjar-pushback.o `test -f 'pushback.c' || echo '$(srcdir)/'`pushback.c; \
! @am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fastjar-pushback.Tpo" "$(DEPDIR)/fastjar-pushback.Po"; else rm -f "$(DEPDIR)/fastjar-pushback.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pushback.c' object='fastjar-pushback.o' libtool=no @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastjar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o fastjar-pushback.o `test -f 'pushback.c' || echo '$(srcdir)/'`pushback.c
! 
! fastjar-pushback.obj: pushback.c
! @am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastjar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT fastjar-pushback.obj -MD -MP -MF "$(DEPDIR)/fastjar-pushback.Tpo" -c -o fastjar-pushback.obj `if test -f 'pushback.c'; then $(CYGPATH_W) 'pushback.c'; else $(CYGPATH_W) '$(srcdir)/pushback.c'; fi`; \
! @am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fastjar-pushback.Tpo" "$(DEPDIR)/fastjar-pushback.Po"; else rm -f "$(DEPDIR)/fastjar-pushback.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pushback.c' object='fastjar-pushback.obj' libtool=no @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastjar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o fastjar-pushback.obj `if test -f 'pushback.c'; then $(CYGPATH_W) 'pushback.c'; else $(CYGPATH_W) '$(srcdir)/pushback.c'; fi`
! 
! fastjar-shift.o: shift.c
! @am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastjar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT fastjar-shift.o -MD -MP -MF "$(DEPDIR)/fastjar-shift.Tpo" -c -o fastjar-shift.o `test -f 'shift.c' || echo '$(srcdir)/'`shift.c; \
! @am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fastjar-shift.Tpo" "$(DEPDIR)/fastjar-shift.Po"; else rm -f "$(DEPDIR)/fastjar-shift.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='shift.c' object='fastjar-shift.o' libtool=no @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastjar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o fastjar-shift.o `test -f 'shift.c' || echo '$(srcdir)/'`shift.c
! 
! fastjar-shift.obj: shift.c
! @am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastjar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT fastjar-shift.obj -MD -MP -MF "$(DEPDIR)/fastjar-shift.Tpo" -c -o fastjar-shift.obj `if test -f 'shift.c'; then $(CYGPATH_W) 'shift.c'; else $(CYGPATH_W) '$(srcdir)/shift.c'; fi`; \
! @am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fastjar-shift.Tpo" "$(DEPDIR)/fastjar-shift.Po"; else rm -f "$(DEPDIR)/fastjar-shift.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='shift.c' object='fastjar-shift.obj' libtool=no @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastjar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o fastjar-shift.obj `if test -f 'shift.c'; then $(CYGPATH_W) 'shift.c'; else $(CYGPATH_W) '$(srcdir)/shift.c'; fi`
! 
! fastjar.info: fastjar.texi $(fastjar_TEXINFOS)
! 	restore=: && backupdir="$(am__leading_dot)am$$$$" && \
! 	rm -rf $$backupdir && mkdir $$backupdir && \
! 	for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
! 	  if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
! 	done; \
! 	if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
! 	 -o $@ `test -f 'fastjar.texi' || echo '$(srcdir)/'`fastjar.texi; \
! 	then \
! 	  rc=0; \
! 	else \
! 	  rc=$$?; \
! 	  $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
! 	fi; \
! 	rm -rf $$backupdir; exit $$rc
! 
! fastjar.dvi: fastjar.texi $(fastjar_TEXINFOS) 
  	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
  	MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
! 	$(TEXI2DVI) -o $@ `test -f 'fastjar.texi' || echo '$(srcdir)/'`fastjar.texi
  
! fastjar.pdf: fastjar.texi $(fastjar_TEXINFOS) 
  	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
  	MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
! 	$(TEXI2PDF) -o $@ `test -f 'fastjar.texi' || echo '$(srcdir)/'`fastjar.texi
  
! fastjar.html: fastjar.texi $(fastjar_TEXINFOS) 
! 	rm -rf $(@:.html=.htp)
! 	if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
! 	 -o $(@:.html=.htp) `test -f 'fastjar.texi' || echo '$(srcdir)/'`fastjar.texi; \
! 	then \
! 	  rm -rf $@; \
! 	  if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
! 	    mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \
! 	else \
! 	  if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
! 	    rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
! 	  exit 1; \
! 	fi
  .dvi.ps:
  	$(DVIPS) -o $@ $<
  
*************** uninstall-info-am:
*** 360,367 ****
  	  list='$(INFO_DEPS)'; \
  	  for file in $$list; do \
  	    relfile=`echo "$$file" | sed 's|^.*/||'`; \
! 	    echo " install-info --info-dir=$(DESTDIR)$(infodir) --remove $(DESTDIR)$(infodir)/$$relfile"; \
! 	    install-info --info-dir=$(DESTDIR)$(infodir) --remove $(DESTDIR)$(infodir)/$$relfile; \
  	  done; \
  	else :; fi
  	@$(NORMAL_UNINSTALL)
--- 507,514 ----
  	  list='$(INFO_DEPS)'; \
  	  for file in $$list; do \
  	    relfile=`echo "$$file" | sed 's|^.*/||'`; \
! 	    echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \
! 	    install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \
  	  done; \
  	else :; fi
  	@$(NORMAL_UNINSTALL)
*************** uninstall-info-am:
*** 369,383 ****
  	for file in $$list; do \
  	  relfile=`echo "$$file" | sed 's|^.*/||'`; \
  	  relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \
! 	  (if cd $(DESTDIR)$(infodir); then \
  	     echo " rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9])"; \
  	     rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \
  	   else :; fi); \
  	done
  
  dist-info: $(INFO_DEPS)
  	list='$(INFO_DEPS)'; \
  	for base in $$list; do \
  	  if test -f $$base; then d=.; else d=$(srcdir); fi; \
  	  for file in $$d/$$base*; do \
  	    relfile=`expr "$$file" : "$$d/\(.*\)"`; \
--- 516,534 ----
  	for file in $$list; do \
  	  relfile=`echo "$$file" | sed 's|^.*/||'`; \
  	  relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \
! 	  (if cd "$(DESTDIR)$(infodir)"; then \
  	     echo " rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9])"; \
  	     rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \
  	   else :; fi); \
  	done
  
  dist-info: $(INFO_DEPS)
+ 	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
  	list='$(INFO_DEPS)'; \
  	for base in $$list; do \
+ 	  case $$base in \
+ 	    $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \
+ 	  esac; \
  	  if test -f $$base; then d=.; else d=$(srcdir); fi; \
  	  for file in $$d/$$base*; do \
  	    relfile=`expr "$$file" : "$$d/\(.*\)"`; \
*************** dist-info: $(INFO_DEPS)
*** 387,396 ****
  	done
  
  mostlyclean-aminfo:
! 	-rm -f fastjar.aux fastjar.cp fastjar.cps fastjar.fn fastjar.fns fastjar.ky \
  	  fastjar.kys fastjar.log fastjar.pg fastjar.pgs fastjar.tmp \
  	  fastjar.toc fastjar.tp fastjar.tps fastjar.vr fastjar.vrs \
! 	  fastjar.dvi fastjar.pdf fastjar.ps
  
  maintainer-clean-aminfo:
  	@list='$(INFO_DEPS)'; for i in $$list; do \
--- 538,547 ----
  	done
  
  mostlyclean-aminfo:
! 	-rm -rf fastjar.aux fastjar.cp fastjar.cps fastjar.fn fastjar.fns fastjar.ky \
  	  fastjar.kys fastjar.log fastjar.pg fastjar.pgs fastjar.tmp \
  	  fastjar.toc fastjar.tp fastjar.tps fastjar.vr fastjar.vrs \
! 	  fastjar.dvi fastjar.pdf fastjar.ps fastjar.html
  
  maintainer-clean-aminfo:
  	@list='$(INFO_DEPS)'; for i in $$list; do \
*************** maintainer-clean-aminfo:
*** 398,408 ****
  	  echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \
  	  rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \
  	done
- 
- man1dir = $(mandir)/man1
  install-man1: $(man1_MANS) $(man_MANS)
  	@$(NORMAL_INSTALL)
! 	$(mkinstalldirs) $(DESTDIR)$(man1dir)
  	@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
  	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
  	for i in $$l2; do \
--- 549,557 ----
  	  echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \
  	  rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \
  	done
  install-man1: $(man1_MANS) $(man_MANS)
  	@$(NORMAL_INSTALL)
! 	test -z "$(man1dir)" || $(mkdir_p) "$(DESTDIR)$(man1dir)"
  	@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
  	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
  	for i in $$l2; do \
*************** install-man1: $(man1_MANS) $(man_MANS)
*** 421,428 ****
  	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
  	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
  	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
! 	  echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst"; \
! 	  $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst; \
  	done
  uninstall-man1:
  	@$(NORMAL_UNINSTALL)
--- 570,577 ----
  	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
  	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
  	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
! 	  echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
! 	  $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
  	done
  uninstall-man1:
  	@$(NORMAL_UNINSTALL)
*************** uninstall-man1:
*** 442,459 ****
  	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
  	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
  	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
! 	  echo " rm -f $(DESTDIR)$(man1dir)/$$inst"; \
! 	  rm -f $(DESTDIR)$(man1dir)/$$inst; \
  	done
  
- ETAGS = etags
- ETAGSFLAGS =
- 
- CTAGS = ctags
- CTAGSFLAGS =
- 
- tags: TAGS
- 
  ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
  	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
  	unique=`for i in $$list; do \
--- 591,600 ----
  	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
  	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
  	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
! 	  echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
! 	  rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
  	done
  
  ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
  	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
  	unique=`for i in $$list; do \
*************** ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS
*** 462,467 ****
--- 603,609 ----
  	  $(AWK) '    { files[$$0] = 1; } \
  	       END { for (i in files) print i; }'`; \
  	mkid -fID $$unique
+ tags: TAGS
  
  TAGS:  $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
  		$(TAGS_FILES) $(LISP)
*************** TAGS:  $(HEADERS) $(SOURCES) config.h.in
*** 473,482 ****
  	  done | \
  	  $(AWK) '    { files[$$0] = 1; } \
  	       END { for (i in files) print i; }'`; \
! 	test -z "$(ETAGS_ARGS)$$tags$$unique" \
! 	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
! 	     $$tags $$unique
! 
  ctags: CTAGS
  CTAGS:  $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
  		$(TAGS_FILES) $(LISP)
--- 615,625 ----
  	  done | \
  	  $(AWK) '    { files[$$0] = 1; } \
  	       END { for (i in files) print i; }'`; \
! 	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
! 	  test -n "$$unique" || unique=$$empty_fix; \
! 	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
! 	    $$tags $$unique; \
! 	fi
  ctags: CTAGS
  CTAGS:  $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
  		$(TAGS_FILES) $(LISP)
*************** GTAGS:
*** 499,522 ****
  
  distclean-tags:
  	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
- DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
- 
- top_distdir = .
- distdir = $(PACKAGE)-$(VERSION)
- 
- am__remove_distdir = \
-   { test ! -d $(distdir) \
-     || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
-          && rm -fr $(distdir); }; }
- 
- GZIP_ENV = --best
- distuninstallcheck_listfiles = find . -type f -print
- distcleancheck_listfiles = find . -type f -print
  
  distdir: $(DISTFILES)
  	$(am__remove_distdir)
  	mkdir $(distdir)
! 	$(mkinstalldirs) $(distdir)/. $(distdir)/.. $(distdir)/../gcc/doc/include
  	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
  	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
  	list='$(DISTFILES)'; for file in $$list; do \
--- 642,652 ----
  
  distclean-tags:
  	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
  
  distdir: $(DISTFILES)
  	$(am__remove_distdir)
  	mkdir $(distdir)
! 	$(mkdir_p) $(distdir)/. $(distdir)/.. $(distdir)/../config $(distdir)/../gcc/doc/include
  	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
  	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
  	list='$(DISTFILES)'; for file in $$list; do \
*************** distdir: $(DISTFILES)
*** 528,534 ****
  	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
  	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
  	    dir="/$$dir"; \
! 	    $(mkinstalldirs) "$(distdir)$$dir"; \
  	  else \
  	    dir=''; \
  	  fi; \
--- 658,664 ----
  	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
  	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
  	    dir="/$$dir"; \
! 	    $(mkdir_p) "$(distdir)$$dir"; \
  	  else \
  	    dir=''; \
  	  fi; \
*************** distdir: $(DISTFILES)
*** 552,570 ****
  	  ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
  	|| chmod -R a+r $(distdir)
  dist-gzip: distdir
! 	$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
  	$(am__remove_distdir)
  
  dist dist-all: distdir
! 	$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
  	$(am__remove_distdir)
  
  # This target untars the dist file and tries a VPATH configuration.  Then
  # it guarantees that the distribution is self-contained by making another
  # tarfile.
  distcheck: dist
! 	$(am__remove_distdir)
! 	GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf -
  	chmod -R a-w $(distdir); chmod a+w $(distdir)
  	mkdir $(distdir)/_build
  	mkdir $(distdir)/_inst
--- 682,727 ----
  	  ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
  	|| chmod -R a+r $(distdir)
  dist-gzip: distdir
! 	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
! 	$(am__remove_distdir)
! 
! dist-bzip2: distdir
! 	tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
! 	$(am__remove_distdir)
! 
! dist-tarZ: distdir
! 	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
! 	$(am__remove_distdir)
! 
! dist-shar: distdir
! 	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
! 	$(am__remove_distdir)
! 
! dist-zip: distdir
! 	-rm -f $(distdir).zip
! 	zip -rq $(distdir).zip $(distdir)
  	$(am__remove_distdir)
  
  dist dist-all: distdir
! 	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
  	$(am__remove_distdir)
  
  # This target untars the dist file and tries a VPATH configuration.  Then
  # it guarantees that the distribution is self-contained by making another
  # tarfile.
  distcheck: dist
! 	case '$(DIST_ARCHIVES)' in \
! 	*.tar.gz*) \
! 	  GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
! 	*.tar.bz2*) \
! 	  bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
! 	*.tar.Z*) \
! 	  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
! 	*.shar.gz*) \
! 	  GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
! 	*.zip*) \
! 	  unzip $(distdir).zip ;;\
! 	esac
  	chmod -R a-w $(distdir); chmod a+w $(distdir)
  	mkdir $(distdir)/_build
  	mkdir $(distdir)/_inst
*************** distcheck: dist
*** 584,602 ****
  	        distuninstallcheck \
  	  && chmod -R a-w "$$dc_install_base" \
  	  && ({ \
! 	       (cd ../.. && $(mkinstalldirs) "$$dc_destdir") \
  	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
  	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
  	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
  	            distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
  	      } || { rm -rf "$$dc_destdir"; exit 1; }) \
  	  && rm -rf "$$dc_destdir" \
! 	  && $(MAKE) $(AM_MAKEFLAGS) dist-gzip \
! 	  && rm -f $(distdir).tar.gz \
  	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
  	$(am__remove_distdir)
! 	@echo "$(distdir).tar.gz is ready for distribution" | \
! 	  sed 'h;s/./=/g;p;x;p;x'
  distuninstallcheck:
  	@cd $(distuninstallcheck_dir) \
  	&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
--- 741,760 ----
  	        distuninstallcheck \
  	  && chmod -R a-w "$$dc_install_base" \
  	  && ({ \
! 	       (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
  	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
  	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
  	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
  	            distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
  	      } || { rm -rf "$$dc_destdir"; exit 1; }) \
  	  && rm -rf "$$dc_destdir" \
! 	  && $(MAKE) $(AM_MAKEFLAGS) dist \
! 	  && rm -rf $(DIST_ARCHIVES) \
  	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
  	$(am__remove_distdir)
! 	@(echo "$(distdir) archives ready for distribution: "; \
! 	  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
! 	  sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'
  distuninstallcheck:
  	@cd $(distuninstallcheck_dir) \
  	&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
*************** distcleancheck: distclean
*** 618,626 ****
  check-am: all-am
  check: check-am
  all-am: Makefile $(INFO_DEPS) $(PROGRAMS) $(MANS) config.h all-local
- 
  installdirs:
! 	$(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(infodir) $(DESTDIR)$(man1dir)
  install: install-am
  install-exec: install-exec-am
  install-data: install-data-am
--- 776,785 ----
  check-am: all-am
  check: check-am
  all-am: Makefile $(INFO_DEPS) $(PROGRAMS) $(MANS) config.h all-local
  installdirs:
! 	for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)"; do \
! 	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
! 	done
  install: install-am
  install-exec: install-exec-am
  install-data: install-data-am
*************** clean-generic:
*** 641,647 ****
  	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
  
  distclean-generic:
! 	-rm -f $(CONFIG_CLEAN_FILES)
  
  maintainer-clean-generic:
  	@echo "This command is intended for maintainers to use"
--- 800,806 ----
  	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
  
  distclean-generic:
! 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
  
  maintainer-clean-generic:
  	@echo "This command is intended for maintainers to use"
*************** clean-am: clean-binPROGRAMS clean-generi
*** 653,666 ****
  
  distclean: distclean-am
  	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
  	-rm -f Makefile
! distclean-am: clean-am distclean-compile distclean-generic distclean-hdr \
! 	distclean-tags
  
  dvi: dvi-am
  
  dvi-am: $(DVIS)
  
  info: info-am
  
  info-am: $(INFO_DEPS)
--- 812,830 ----
  
  distclean: distclean-am
  	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ 	-rm -rf ./$(DEPDIR)
  	-rm -f Makefile
! distclean-am: clean-am distclean-compile distclean-generic \
! 	distclean-hdr distclean-tags
  
  dvi: dvi-am
  
  dvi-am: $(DVIS)
  
+ html: html-am
+ 
+ html-am: $(HTMLS)
+ 
  info: info-am
  
  info-am: $(INFO_DEPS)
*************** install-info: install-info-am
*** 673,689 ****
  
  install-info-am: $(INFO_DEPS)
  	@$(NORMAL_INSTALL)
! 	$(mkinstalldirs) $(DESTDIR)$(infodir)
! 	@list='$(INFO_DEPS)'; \
  	for file in $$list; do \
  	  if test -f $$file; then d=.; else d=$(srcdir); fi; \
  	  file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \
  	  for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \
                         $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \
  	    if test -f $$ifile; then \
  	      relfile=`echo "$$ifile" | sed 's|^.*/||'`; \
! 	      echo " $(INSTALL_DATA) $$ifile $(DESTDIR)$(infodir)/$$relfile"; \
! 	      $(INSTALL_DATA) $$ifile $(DESTDIR)$(infodir)/$$relfile; \
  	    else : ; fi; \
  	  done; \
  	done
--- 837,857 ----
  
  install-info-am: $(INFO_DEPS)
  	@$(NORMAL_INSTALL)
! 	test -z "$(infodir)" || $(mkdir_p) "$(DESTDIR)$(infodir)"
! 	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
! 	list='$(INFO_DEPS)'; \
  	for file in $$list; do \
+ 	  case $$file in \
+ 	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ 	  esac; \
  	  if test -f $$file; then d=.; else d=$(srcdir); fi; \
  	  file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \
  	  for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \
                         $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \
  	    if test -f $$ifile; then \
  	      relfile=`echo "$$ifile" | sed 's|^.*/||'`; \
! 	      echo " $(INSTALL_DATA) '$$ifile' '$(DESTDIR)$(infodir)/$$relfile'"; \
! 	      $(INSTALL_DATA) "$$ifile" "$(DESTDIR)$(infodir)/$$relfile"; \
  	    else : ; fi; \
  	  done; \
  	done
*************** install-info-am: $(INFO_DEPS)
*** 693,700 ****
  	  list='$(INFO_DEPS)'; \
  	  for file in $$list; do \
  	    relfile=`echo "$$file" | sed 's|^.*/||'`; \
! 	    echo " install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$relfile";\
! 	    install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$relfile || :;\
  	  done; \
  	else : ; fi
  install-man: install-man1
--- 861,868 ----
  	  list='$(INFO_DEPS)'; \
  	  for file in $$list; do \
  	    relfile=`echo "$$file" | sed 's|^.*/||'`; \
! 	    echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\
! 	    install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\
  	  done; \
  	else : ; fi
  install-man: install-man1
*************** installcheck-am:
*** 704,709 ****
--- 872,878 ----
  maintainer-clean: maintainer-clean-am
  	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
  	-rm -rf $(top_srcdir)/autom4te.cache
+ 	-rm -rf ./$(DEPDIR)
  	-rm -f Makefile
  maintainer-clean-am: distclean-am maintainer-clean-aminfo \
  	maintainer-clean-generic
*************** uninstall-am: uninstall-binPROGRAMS unin
*** 725,739 ****
  
  uninstall-man: uninstall-man1
  
! .PHONY: CTAGS GTAGS all all-am all-local check check-am clean \
! 	clean-binPROGRAMS clean-generic ctags dist dist-all dist-gzip \
! 	dist-info distcheck distclean distclean-compile \
! 	distclean-generic distclean-hdr distclean-tags distcleancheck \
! 	distdir distuninstallcheck dvi dvi-am info info-am install \
! 	install-am install-binPROGRAMS install-data install-data-am \
! 	install-exec install-exec-am install-info install-info-am \
! 	install-man install-man1 install-strip installcheck \
! 	installcheck-am installdirs maintainer-clean \
  	maintainer-clean-aminfo maintainer-clean-generic mostlyclean \
  	mostlyclean-aminfo mostlyclean-compile mostlyclean-generic pdf \
  	pdf-am ps ps-am tags uninstall uninstall-am \
--- 894,909 ----
  
  uninstall-man: uninstall-man1
  
! .PHONY: CTAGS GTAGS all all-am all-local am--refresh check check-am \
! 	clean clean-binPROGRAMS clean-generic ctags dist dist-all \
! 	dist-bzip2 dist-gzip dist-info dist-shar dist-tarZ dist-zip \
! 	distcheck distclean distclean-compile distclean-generic \
! 	distclean-hdr distclean-tags distcleancheck distdir \
! 	distuninstallcheck dvi dvi-am html html-am info info-am \
! 	install install-am install-binPROGRAMS install-data \
! 	install-data-am install-exec install-exec-am install-info \
! 	install-info-am install-man install-man1 install-strip \
! 	installcheck installcheck-am installdirs maintainer-clean \
  	maintainer-clean-aminfo maintainer-clean-generic mostlyclean \
  	mostlyclean-aminfo mostlyclean-compile mostlyclean-generic pdf \
  	pdf-am ps ps-am tags uninstall uninstall-am \
*************** uninstall-man: uninstall-man1
*** 741,763 ****
  	uninstall-man1
  
  
! %.1: %.pod
  	-($(POD2MAN) --section=1 $< > $(@).T$$$$ && \
  		mv -f $(@).T$$$$ $@) || \
  		(rm -f $(@).T$$$$ && exit 1)
  
! .INTERMEDIATE: jar.pod grepjar.pod
  
! jar.pod: $(srcdir)/fastjar.texi
! 	-$(TEXI2POD) -D jar $< > $@
  
  grepjar.pod: $(srcdir)/fastjar.texi
  	-$(TEXI2POD) -D grepjar $< > $@
  
  all-local: $(STAMP_GENINSRC) 
  
! stamp-geninsrc: jar.1 grepjar.1 fastjar.info
! 	-cp -p $(top_builddir)/jar.1 $(srcdir)/jar.1
  	-cp -p $(top_builddir)/grepjar.1 $(srcdir)/grepjar.1
  	-cp -p $(top_builddir)/fastjar.info $(srcdir)/fastjar.info
  	touch $@
--- 911,933 ----
  	uninstall-man1
  
  
! .pod.1:
  	-($(POD2MAN) --section=1 $< > $(@).T$$$$ && \
  		mv -f $(@).T$$$$ $@) || \
  		(rm -f $(@).T$$$$ && exit 1)
  
! .INTERMEDIATE: fastjar.pod grepjar.pod
  
! fastjar.pod: $(srcdir)/fastjar.texi
! 	-$(TEXI2POD) -D fastjar $< > $@
  
  grepjar.pod: $(srcdir)/fastjar.texi
  	-$(TEXI2POD) -D grepjar $< > $@
  
  all-local: $(STAMP_GENINSRC) 
  
! stamp-geninsrc: fastjar.1 grepjar.1 fastjar.info
! 	-cp -p $(top_builddir)/fastjar.1 $(srcdir)/fastjar.1
  	-cp -p $(top_builddir)/grepjar.1 $(srcdir)/grepjar.1
  	-cp -p $(top_builddir)/fastjar.info $(srcdir)/fastjar.info
  	touch $@
diff -Nrcpad gcc-3.4.3/fastjar/acinclude.m4 gcc-4.0.0/fastjar/acinclude.m4
*** gcc-3.4.3/fastjar/acinclude.m4	Mon Dec 16 18:18:45 2002
--- gcc-4.0.0/fastjar/acinclude.m4	Sat Nov 13 16:38:04 2004
***************
*** 1,8 ****
- sinclude(../config/accross.m4)
- 
  dnl Define MKDIR_TAKES_ONE_ARG if mkdir accepts only one argument instead
  dnl of the usual 2.
! AC_DEFUN(gcc_AC_FUNC_MKDIR_TAKES_ONE_ARG,
  [AC_CACHE_CHECK([if mkdir takes one argument], gcc_cv_mkdir_takes_one_arg,
  [AC_TRY_COMPILE([
  #include <sys/types.h>
--- 1,6 ----
  dnl Define MKDIR_TAKES_ONE_ARG if mkdir accepts only one argument instead
  dnl of the usual 2.
! AC_DEFUN([gcc_AC_FUNC_MKDIR_TAKES_ONE_ARG],
  [AC_CACHE_CHECK([if mkdir takes one argument], gcc_cv_mkdir_takes_one_arg,
  [AC_TRY_COMPILE([
  #include <sys/types.h>
diff -Nrcpad gcc-3.4.3/fastjar/aclocal.m4 gcc-4.0.0/fastjar/aclocal.m4
*** gcc-3.4.3/fastjar/aclocal.m4	Fri Nov  5 04:14:05 2004
--- gcc-4.0.0/fastjar/aclocal.m4	Thu Apr 21 07:04:10 2005
***************
*** 1,6 ****
! # generated automatically by aclocal 1.7.9 -*- Autoconf -*-
  
! # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002
  # Free Software Foundation, Inc.
  # This file is free software; the Free Software Foundation
  # gives unlimited permission to copy and/or distribute it,
--- 1,6 ----
! # generated automatically by aclocal 1.9.3 -*- Autoconf -*-
  
! # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
  # Free Software Foundation, Inc.
  # This file is free software; the Free Software Foundation
  # gives unlimited permission to copy and/or distribute it,
***************
*** 11,166 ****
  # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  # PARTICULAR PURPOSE.
  
! sinclude(../config/accross.m4)
! 
! dnl Define MKDIR_TAKES_ONE_ARG if mkdir accepts only one argument instead
! dnl of the usual 2.
! AC_DEFUN(gcc_AC_FUNC_MKDIR_TAKES_ONE_ARG,
! [AC_CACHE_CHECK([if mkdir takes one argument], gcc_cv_mkdir_takes_one_arg,
! [AC_TRY_COMPILE([
! #include <sys/types.h>
! #ifdef HAVE_SYS_STAT_H
! # include <sys/stat.h>
! #endif
! #ifdef HAVE_UNISTD_H
! # include <unistd.h>
! #endif
! #ifdef HAVE_DIRECT_H
! # include <direct.h>
! #endif], [mkdir ("foo", 0);],
!          gcc_cv_mkdir_takes_one_arg=no, gcc_cv_mkdir_takes_one_arg=yes)])
! if test $gcc_cv_mkdir_takes_one_arg = yes ; then
!    AC_DEFINE(MKDIR_TAKES_ONE_ARG, 1, [Define if host mkdir takes a
! single argument.])
! fi
! ])
! 
! # Do all the work for Automake.                            -*- Autoconf -*-
! 
! # This macro actually does too much some checks are only needed if
! # your package does certain things.  But this isn't really a big deal.
! 
! # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
! # Free Software Foundation, Inc.
! 
! # This program is free software; you can redistribute it and/or modify
! # it under the terms of the GNU General Public License as published by
! # the Free Software Foundation; either version 2, or (at your option)
! # any later version.
! 
! # This program is distributed in the hope that it will be useful,
! # but WITHOUT ANY WARRANTY; without even the implied warranty of
! # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! # GNU General Public License for more details.
! 
! # You should have received a copy of the GNU General Public License
! # along with this program; if not, write to the Free Software
! # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
! # 02111-1307, USA.
! 
! # serial 10
! 
! AC_PREREQ([2.54])
! 
! # Autoconf 2.50 wants to disallow AM_ names.  We explicitly allow
! # the ones we care about.
! m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
! 
! # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
! # AM_INIT_AUTOMAKE([OPTIONS])
! # -----------------------------------------------
! # The call with PACKAGE and VERSION arguments is the old style
! # call (pre autoconf-2.50), which is being phased out.  PACKAGE
! # and VERSION should now be passed to AC_INIT and removed from
! # the call to AM_INIT_AUTOMAKE.
! # We support both call styles for the transition.  After
! # the next Automake release, Autoconf can make the AC_INIT
! # arguments mandatory, and then we can depend on a new Autoconf
! # release and drop the old call support.
! AC_DEFUN([AM_INIT_AUTOMAKE],
! [AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
!  AC_REQUIRE([AC_PROG_INSTALL])dnl
! # test to see if srcdir already configured
! if test "`cd $srcdir && pwd`" != "`pwd`" &&
!    test -f $srcdir/config.status; then
!   AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
! fi
! 
! # test whether we have cygpath
! if test -z "$CYGPATH_W"; then
!   if (cygpath --version) >/dev/null 2>/dev/null; then
!     CYGPATH_W='cygpath -w'
!   else
!     CYGPATH_W=echo
!   fi
! fi
! AC_SUBST([CYGPATH_W])
! 
! # Define the identity of the package.
! dnl Distinguish between old-style and new-style calls.
! m4_ifval([$2],
! [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
!  AC_SUBST([PACKAGE], [$1])dnl
!  AC_SUBST([VERSION], [$2])],
! [_AM_SET_OPTIONS([$1])dnl
!  AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
!  AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
! 
! _AM_IF_OPTION([no-define],,
! [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
!  AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
! 
! # Some tools Automake needs.
! AC_REQUIRE([AM_SANITY_CHECK])dnl
! AC_REQUIRE([AC_ARG_PROGRAM])dnl
! AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
! AM_MISSING_PROG(AUTOCONF, autoconf)
! AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
! AM_MISSING_PROG(AUTOHEADER, autoheader)
! AM_MISSING_PROG(MAKEINFO, makeinfo)
! AM_MISSING_PROG(AMTAR, tar)
! AM_PROG_INSTALL_SH
! AM_PROG_INSTALL_STRIP
! # We need awk for the "check" target.  The system "awk" is bad on
! # some platforms.
! AC_REQUIRE([AC_PROG_AWK])dnl
! AC_REQUIRE([AC_PROG_MAKE_SET])dnl
! AC_REQUIRE([AM_SET_LEADING_DOT])dnl
! 
! _AM_IF_OPTION([no-dependencies],,
! [AC_PROVIDE_IFELSE([AC_PROG_CC],
!                   [_AM_DEPENDENCIES(CC)],
!                   [define([AC_PROG_CC],
!                           defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
! AC_PROVIDE_IFELSE([AC_PROG_CXX],
!                   [_AM_DEPENDENCIES(CXX)],
!                   [define([AC_PROG_CXX],
!                           defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
! ])
! ])
! 
! 
! # When config.status generates a header, we must update the stamp-h file.
! # This file resides in the same directory as the config header
! # that is generated.  The stamp files are numbered to have different names.
! 
! # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
! # loop where config.status creates the headers, so we can generate
! # our stamp files there.
! AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
! [# Compute $1's index in $config_headers.
! _am_stamp_count=1
! for _am_header in $config_headers :; do
!   case $_am_header in
!     $1 | $1:* )
!       break ;;
!     * )
!       _am_stamp_count=`expr $_am_stamp_count + 1` ;;
!   esac
! done
! echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
! 
! # Copyright 2002  Free Software Foundation, Inc.
  
  # This program is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
--- 11,19 ----
  # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  # PARTICULAR PURPOSE.
  
! #                                                        -*- Autoconf -*-
! # Copyright (C) 2002, 2003  Free Software Foundation, Inc.
! # Generated from amversion.in; do not edit by hand.
  
  # This program is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
*************** echo "timestamp for $1" >`AS_DIRNAME([$1
*** 180,351 ****
  # ----------------------------
  # Automake X.Y traces this macro to ensure aclocal.m4 has been
  # generated from the m4 files accompanying Automake X.Y.
! AC_DEFUN([AM_AUTOMAKE_VERSION],[am__api_version="1.7"])
  
  # AM_SET_CURRENT_AUTOMAKE_VERSION
  # -------------------------------
  # Call AM_AUTOMAKE_VERSION so it can be traced.
  # This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
  AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
! 	 [AM_AUTOMAKE_VERSION([1.7.9])])
! 
! # Helper functions for option handling.                    -*- Autoconf -*-
! 
! # Copyright 2001, 2002  Free Software Foundation, Inc.
! 
! # This program is free software; you can redistribute it and/or modify
! # it under the terms of the GNU General Public License as published by
! # the Free Software Foundation; either version 2, or (at your option)
! # any later version.
! 
! # This program is distributed in the hope that it will be useful,
! # but WITHOUT ANY WARRANTY; without even the implied warranty of
! # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! # GNU General Public License for more details.
! 
! # You should have received a copy of the GNU General Public License
! # along with this program; if not, write to the Free Software
! # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
! # 02111-1307, USA.
! 
! # serial 2
! 
! # _AM_MANGLE_OPTION(NAME)
! # -----------------------
! AC_DEFUN([_AM_MANGLE_OPTION],
! [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
! 
! # _AM_SET_OPTION(NAME)
! # ------------------------------
! # Set option NAME.  Presently that only means defining a flag for this option.
! AC_DEFUN([_AM_SET_OPTION],
! [m4_define(_AM_MANGLE_OPTION([$1]), 1)])
! 
! # _AM_SET_OPTIONS(OPTIONS)
! # ----------------------------------
! # OPTIONS is a space-separated list of Automake options.
! AC_DEFUN([_AM_SET_OPTIONS],
! [AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
! 
! # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
! # -------------------------------------------
! # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
! AC_DEFUN([_AM_IF_OPTION],
! [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
! 
! #
! # Check to make sure that the build environment is sane.
! #
! 
! # Copyright 1996, 1997, 2000, 2001 Free Software Foundation, Inc.
! 
! # This program is free software; you can redistribute it and/or modify
! # it under the terms of the GNU General Public License as published by
! # the Free Software Foundation; either version 2, or (at your option)
! # any later version.
! 
! # This program is distributed in the hope that it will be useful,
! # but WITHOUT ANY WARRANTY; without even the implied warranty of
! # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! # GNU General Public License for more details.
! 
! # You should have received a copy of the GNU General Public License
! # along with this program; if not, write to the Free Software
! # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
! # 02111-1307, USA.
! 
! # serial 3
! 
! # AM_SANITY_CHECK
! # ---------------
! AC_DEFUN([AM_SANITY_CHECK],
! [AC_MSG_CHECKING([whether build environment is sane])
! # Just in case
! sleep 1
! echo timestamp > conftest.file
! # Do `set' in a subshell so we don't clobber the current shell's
! # arguments.  Must try -L first in case configure is actually a
! # symlink; some systems play weird games with the mod time of symlinks
! # (eg FreeBSD returns the mod time of the symlink's containing
! # directory).
! if (
!    set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
!    if test "$[*]" = "X"; then
!       # -L didn't work.
!       set X `ls -t $srcdir/configure conftest.file`
!    fi
!    rm -f conftest.file
!    if test "$[*]" != "X $srcdir/configure conftest.file" \
!       && test "$[*]" != "X conftest.file $srcdir/configure"; then
! 
!       # If neither matched, then we have a broken ls.  This can happen
!       # if, for instance, CONFIG_SHELL is bash and it inherits a
!       # broken ls alias from the environment.  This has actually
!       # happened.  Such a system could not be considered "sane".
!       AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
! alias in your environment])
!    fi
! 
!    test "$[2]" = conftest.file
!    )
! then
!    # Ok.
!    :
! else
!    AC_MSG_ERROR([newly created file is older than distributed files!
! Check your system clock])
! fi
! AC_MSG_RESULT(yes)])
! 
! #  -*- Autoconf -*-
! 
! 
! # Copyright 1997, 1999, 2000, 2001 Free Software Foundation, Inc.
! 
! # This program is free software; you can redistribute it and/or modify
! # it under the terms of the GNU General Public License as published by
! # the Free Software Foundation; either version 2, or (at your option)
! # any later version.
! 
! # This program is distributed in the hope that it will be useful,
! # but WITHOUT ANY WARRANTY; without even the implied warranty of
! # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! # GNU General Public License for more details.
! 
! # You should have received a copy of the GNU General Public License
! # along with this program; if not, write to the Free Software
! # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
! # 02111-1307, USA.
! 
! # serial 3
! 
! # AM_MISSING_PROG(NAME, PROGRAM)
! # ------------------------------
! AC_DEFUN([AM_MISSING_PROG],
! [AC_REQUIRE([AM_MISSING_HAS_RUN])
! $1=${$1-"${am_missing_run}$2"}
! AC_SUBST($1)])
! 
! 
! # AM_MISSING_HAS_RUN
! # ------------------
! # Define MISSING if not defined so far and test if it supports --run.
! # If it does, set am_missing_run to use it, otherwise, to nothing.
! AC_DEFUN([AM_MISSING_HAS_RUN],
! [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
! test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
! # Use eval to expand $SHELL
! if eval "$MISSING --run true"; then
!   am_missing_run="$MISSING --run "
! else
!   am_missing_run=
!   AC_MSG_WARN([`missing' script is too old or missing])
! fi
! ])
  
  # AM_AUX_DIR_EXPAND
  
! # Copyright 2001 Free Software Foundation, Inc.
  
  # This program is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
--- 33,50 ----
  # ----------------------------
  # Automake X.Y traces this macro to ensure aclocal.m4 has been
  # generated from the m4 files accompanying Automake X.Y.
! AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"])
  
  # AM_SET_CURRENT_AUTOMAKE_VERSION
  # -------------------------------
  # Call AM_AUTOMAKE_VERSION so it can be traced.
  # This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
  AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
! 	 [AM_AUTOMAKE_VERSION([1.9.3])])
  
  # AM_AUX_DIR_EXPAND
  
! # Copyright (C) 2001, 2003 Free Software Foundation, Inc.
  
  # This program is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
*************** fi
*** 400,480 ****
  # absolute PATH.  The drawback is that using absolute paths prevent a
  # configured tree to be moved without reconfiguration.
  
! # Rely on autoconf to set up CDPATH properly.
! AC_PREREQ([2.50])
! 
! AC_DEFUN([AM_AUX_DIR_EXPAND], [
  # expand $ac_aux_dir to an absolute path
  am_aux_dir=`cd $ac_aux_dir && pwd`
  ])
  
! # AM_PROG_INSTALL_SH
! # ------------------
! # Define $install_sh.
! 
! # Copyright 2001 Free Software Foundation, Inc.
! 
! # This program is free software; you can redistribute it and/or modify
! # it under the terms of the GNU General Public License as published by
! # the Free Software Foundation; either version 2, or (at your option)
! # any later version.
! 
! # This program is distributed in the hope that it will be useful,
! # but WITHOUT ANY WARRANTY; without even the implied warranty of
! # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! # GNU General Public License for more details.
! 
! # You should have received a copy of the GNU General Public License
! # along with this program; if not, write to the Free Software
! # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
! # 02111-1307, USA.
! 
! AC_DEFUN([AM_PROG_INSTALL_SH],
! [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
! install_sh=${install_sh-"$am_aux_dir/install-sh"}
! AC_SUBST(install_sh)])
! 
! # AM_PROG_INSTALL_STRIP
! 
! # Copyright 2001 Free Software Foundation, Inc.
! 
! # This program is free software; you can redistribute it and/or modify
! # it under the terms of the GNU General Public License as published by
! # the Free Software Foundation; either version 2, or (at your option)
! # any later version.
! 
! # This program is distributed in the hope that it will be useful,
! # but WITHOUT ANY WARRANTY; without even the implied warranty of
! # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! # GNU General Public License for more details.
! 
! # You should have received a copy of the GNU General Public License
! # along with this program; if not, write to the Free Software
! # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
! # 02111-1307, USA.
! 
! # One issue with vendor `install' (even GNU) is that you can't
! # specify the program used to strip binaries.  This is especially
! # annoying in cross-compiling environments, where the build's strip
! # is unlikely to handle the host's binaries.
! # Fortunately install-sh will honor a STRIPPROG variable, so we
! # always use install-sh in `make install-strip', and initialize
! # STRIPPROG with the value of the STRIP variable (set by the user).
! AC_DEFUN([AM_PROG_INSTALL_STRIP],
! [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
! # Installed binaries are usually stripped using `strip' when the user
! # run `make install-strip'.  However `strip' might not be the right
! # tool to use in cross-compilation environments, therefore Automake
! # will honor the `STRIP' environment variable to overrule this program.
! dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
! if test "$cross_compiling" != no; then
!   AC_CHECK_TOOL([STRIP], [strip], :)
! fi
! INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
! AC_SUBST([INSTALL_STRIP_PROGRAM])])
  
! #                                                          -*- Autoconf -*-
! # Copyright (C) 2003  Free Software Foundation, Inc.
  
  # This program is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
--- 99,114 ----
  # absolute PATH.  The drawback is that using absolute paths prevent a
  # configured tree to be moved without reconfiguration.
  
! AC_DEFUN([AM_AUX_DIR_EXPAND],
! [dnl Rely on autoconf to set up CDPATH properly.
! AC_PREREQ([2.50])dnl
  # expand $ac_aux_dir to an absolute path
  am_aux_dir=`cd $ac_aux_dir && pwd`
  ])
  
! # AM_CONDITIONAL                                              -*- Autoconf -*-
  
! # Copyright (C) 1997, 2000, 2001, 2003, 2004 Free Software Foundation, Inc.
  
  # This program is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
*************** AC_SUBST([INSTALL_STRIP_PROGRAM])])
*** 491,514 ****
  # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  # 02111-1307, USA.
  
! # serial 1
  
! # Check whether the underlying file-system supports filenames
! # with a leading dot.  For instance MS-DOS doesn't.
! AC_DEFUN([AM_SET_LEADING_DOT],
! [rm -rf .tst 2>/dev/null
! mkdir .tst 2>/dev/null
! if test -d .tst; then
!   am__leading_dot=.
  else
!   am__leading_dot=_
  fi
! rmdir .tst 2>/dev/null
! AC_SUBST([am__leading_dot])])
  
! # serial 5						-*- Autoconf -*-
  
! # Copyright (C) 1999, 2000, 2001, 2002, 2003  Free Software Foundation, Inc.
  
  # This program is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
--- 125,158 ----
  # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  # 02111-1307, USA.
  
! # serial 6
  
! # AM_CONDITIONAL(NAME, SHELL-CONDITION)
! # -------------------------------------
! # Define a conditional.
! AC_DEFUN([AM_CONDITIONAL],
! [AC_PREREQ(2.52)dnl
!  ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
! 	[$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
! AC_SUBST([$1_TRUE])
! AC_SUBST([$1_FALSE])
! if $2; then
!   $1_TRUE=
!   $1_FALSE='#'
  else
!   $1_TRUE='#'
!   $1_FALSE=
  fi
! AC_CONFIG_COMMANDS_PRE(
! [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
!   AC_MSG_ERROR([[conditional "$1" was never defined.
! Usually this means the macro was only invoked conditionally.]])
! fi])])
  
! # serial 7						-*- Autoconf -*-
  
! # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
! # Free Software Foundation, Inc.
  
  # This program is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
*************** AC_CACHE_CHECK([dependency style of $dep
*** 592,598 ****
      : > sub/conftest.c
      for i in 1 2 3 4 5 6; do
        echo '#include "conftst'$i'.h"' >> sub/conftest.c
!       : > sub/conftst$i.h
      done
      echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
  
--- 236,244 ----
      : > sub/conftest.c
      for i in 1 2 3 4 5 6; do
        echo '#include "conftst'$i'.h"' >> sub/conftest.c
!       # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
!       # Solaris 8's {/usr,}/bin/sh.
!       touch sub/conftst$i.h
      done
      echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
  
*************** AC_CACHE_CHECK([dependency style of $dep
*** 620,628 ****
         grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
         ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
        # icc doesn't choke on unknown options, it will just issue warnings
!       # (even with -Werror).  So we grep stderr for any message
!       # that says an option was ignored.
!       if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else
          am_cv_$1_dependencies_compiler_type=$depmode
          break
        fi
--- 266,279 ----
         grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
         ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
        # icc doesn't choke on unknown options, it will just issue warnings
!       # or remarks (even with -Werror).  So we grep stderr for any message
!       # that says an option was ignored or not supported.
!       # When given -MP, icc 7.0 and 7.1 complain thusly:
!       #   icc: Command line warning: ignoring option '-M'; no argument required
!       # The diagnosis changed in icc 8.0:
!       #   icc: Command line remark: option '-MP' not supported
!       if (grep 'ignoring option' conftest.err ||
!           grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
          am_cv_$1_dependencies_compiler_type=$depmode
          break
        fi
*************** AC_SUBST([DEPDIR], ["${am__leading_dot}d
*** 656,663 ****
  # ------------
  AC_DEFUN([AM_DEP_TRACK],
  [AC_ARG_ENABLE(dependency-tracking,
! [  --disable-dependency-tracking Speeds up one-time builds
!   --enable-dependency-tracking  Do not reject slow dependency extractors])
  if test "x$enable_dependency_tracking" != xno; then
    am_depcomp="$ac_aux_dir/depcomp"
    AMDEPBACKSLASH='\'
--- 307,314 ----
  # ------------
  AC_DEFUN([AM_DEP_TRACK],
  [AC_ARG_ENABLE(dependency-tracking,
! [  --disable-dependency-tracking  speeds up one-time build
!   --enable-dependency-tracking   do not reject slow dependency extractors])
  if test "x$enable_dependency_tracking" != xno; then
    am_depcomp="$ac_aux_dir/depcomp"
    AMDEPBACKSLASH='\'
*************** AC_SUBST([AMDEPBACKSLASH])
*** 668,674 ****
  
  # Generate code to set up dependency tracking.   -*- Autoconf -*-
  
! # Copyright 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
  
  # This program is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
--- 319,326 ----
  
  # Generate code to set up dependency tracking.   -*- Autoconf -*-
  
! # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
! #   Free Software Foundation, Inc.
  
  # This program is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
*************** AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS
*** 704,730 ****
    else
      continue
    fi
!   grep '^DEP_FILES *= *[[^ @%:@]]' < "$mf" > /dev/null || continue
!   # Extract the definition of DEP_FILES from the Makefile without
!   # running `make'.
!   DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"`
    test -z "$DEPDIR" && continue
    # When using ansi2knr, U may be empty or an underscore; expand it
!   U=`sed -n -e '/^U = / s///p' < "$mf"`
!   test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
!   # We invoke sed twice because it is the simplest approach to
!   # changing $(DEPDIR) to its actual value in the expansion.
!   for file in `sed -n -e '
!     /^DEP_FILES = .*\\\\$/ {
!       s/^DEP_FILES = //
!       :loop
! 	s/\\\\$//
! 	p
! 	n
! 	/\\\\$/ b loop
!       p
!     }
!     /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \
         sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
      # Make sure the directory exists.
      test -f "$dirpart/$file" && continue
--- 356,376 ----
    else
      continue
    fi
!   # Extract the definition of DEPDIR, am__include, and am__quote
!   # from the Makefile without running `make'.
!   DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
    test -z "$DEPDIR" && continue
+   am__include=`sed -n 's/^am__include = //p' < "$mf"`
+   test -z "am__include" && continue
+   am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
    # When using ansi2knr, U may be empty or an underscore; expand it
!   U=`sed -n 's/^U = //p' < "$mf"`
!   # Find all dependency output files, they are included files with
!   # $(DEPDIR) in their names.  We invoke sed twice because it is the
!   # simplest approach to changing $(DEPDIR) to its actual value in the
!   # expansion.
!   for file in `sed -n "
!     s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
         sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
      # Make sure the directory exists.
      test -f "$dirpart/$file" && continue
*************** AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS]
*** 750,755 ****
--- 396,649 ----
       [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
  ])
  
+ # Like AC_CONFIG_HEADER, but automatically create stamp file. -*- Autoconf -*-
+ 
+ # Copyright (C) 1996, 1997, 2000, 2001, 2003 Free Software Foundation, Inc.
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2, or (at your option)
+ # any later version.
+ 
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ # GNU General Public License for more details.
+ 
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ # 02111-1307, USA.
+ 
+ # serial 7
+ 
+ # AM_CONFIG_HEADER is obsolete.  It has been replaced by AC_CONFIG_HEADERS.
+ AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
+ 
+ # Do all the work for Automake.                            -*- Autoconf -*-
+ 
+ # This macro actually does too much some checks are only needed if
+ # your package does certain things.  But this isn't really a big deal.
+ 
+ # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
+ # Free Software Foundation, Inc.
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2, or (at your option)
+ # any later version.
+ 
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ # GNU General Public License for more details.
+ 
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ # 02111-1307, USA.
+ 
+ # serial 11
+ 
+ # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+ # AM_INIT_AUTOMAKE([OPTIONS])
+ # -----------------------------------------------
+ # The call with PACKAGE and VERSION arguments is the old style
+ # call (pre autoconf-2.50), which is being phased out.  PACKAGE
+ # and VERSION should now be passed to AC_INIT and removed from
+ # the call to AM_INIT_AUTOMAKE.
+ # We support both call styles for the transition.  After
+ # the next Automake release, Autoconf can make the AC_INIT
+ # arguments mandatory, and then we can depend on a new Autoconf
+ # release and drop the old call support.
+ AC_DEFUN([AM_INIT_AUTOMAKE],
+ [AC_PREREQ([2.58])dnl
+ dnl Autoconf wants to disallow AM_ names.  We explicitly allow
+ dnl the ones we care about.
+ m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+ AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+ AC_REQUIRE([AC_PROG_INSTALL])dnl
+ # test to see if srcdir already configured
+ if test "`cd $srcdir && pwd`" != "`pwd`" &&
+    test -f $srcdir/config.status; then
+   AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+ fi
+ 
+ # test whether we have cygpath
+ if test -z "$CYGPATH_W"; then
+   if (cygpath --version) >/dev/null 2>/dev/null; then
+     CYGPATH_W='cygpath -w'
+   else
+     CYGPATH_W=echo
+   fi
+ fi
+ AC_SUBST([CYGPATH_W])
+ 
+ # Define the identity of the package.
+ dnl Distinguish between old-style and new-style calls.
+ m4_ifval([$2],
+ [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+  AC_SUBST([PACKAGE], [$1])dnl
+  AC_SUBST([VERSION], [$2])],
+ [_AM_SET_OPTIONS([$1])dnl
+  AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+  AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+ 
+ _AM_IF_OPTION([no-define],,
+ [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+  AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+ 
+ # Some tools Automake needs.
+ AC_REQUIRE([AM_SANITY_CHECK])dnl
+ AC_REQUIRE([AC_ARG_PROGRAM])dnl
+ AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+ AM_MISSING_PROG(AUTOCONF, autoconf)
+ AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+ AM_MISSING_PROG(AUTOHEADER, autoheader)
+ AM_MISSING_PROG(MAKEINFO, makeinfo)
+ AM_PROG_INSTALL_SH
+ AM_PROG_INSTALL_STRIP
+ AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+ # We need awk for the "check" target.  The system "awk" is bad on
+ # some platforms.
+ AC_REQUIRE([AC_PROG_AWK])dnl
+ AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+ AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+ _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+               [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+ 	      		     [_AM_PROG_TAR([v7])])])
+ _AM_IF_OPTION([no-dependencies],,
+ [AC_PROVIDE_IFELSE([AC_PROG_CC],
+                   [_AM_DEPENDENCIES(CC)],
+                   [define([AC_PROG_CC],
+                           defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+ AC_PROVIDE_IFELSE([AC_PROG_CXX],
+                   [_AM_DEPENDENCIES(CXX)],
+                   [define([AC_PROG_CXX],
+                           defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+ ])
+ ])
+ 
+ 
+ # When config.status generates a header, we must update the stamp-h file.
+ # This file resides in the same directory as the config header
+ # that is generated.  The stamp files are numbered to have different names.
+ 
+ # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+ # loop where config.status creates the headers, so we can generate
+ # our stamp files there.
+ AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+ [# Compute $1's index in $config_headers.
+ _am_stamp_count=1
+ for _am_header in $config_headers :; do
+   case $_am_header in
+     $1 | $1:* )
+       break ;;
+     * )
+       _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+   esac
+ done
+ echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
+ 
+ # AM_PROG_INSTALL_SH
+ # ------------------
+ # Define $install_sh.
+ 
+ # Copyright (C) 2001, 2003 Free Software Foundation, Inc.
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2, or (at your option)
+ # any later version.
+ 
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ # GNU General Public License for more details.
+ 
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ # 02111-1307, USA.
+ 
+ AC_DEFUN([AM_PROG_INSTALL_SH],
+ [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+ install_sh=${install_sh-"$am_aux_dir/install-sh"}
+ AC_SUBST(install_sh)])
+ 
+ #                                                          -*- Autoconf -*-
+ # Copyright (C) 2003  Free Software Foundation, Inc.
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2, or (at your option)
+ # any later version.
+ 
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ # GNU General Public License for more details.
+ 
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ # 02111-1307, USA.
+ 
+ # serial 1
+ 
+ # Check whether the underlying file-system supports filenames
+ # with a leading dot.  For instance MS-DOS doesn't.
+ AC_DEFUN([AM_SET_LEADING_DOT],
+ [rm -rf .tst 2>/dev/null
+ mkdir .tst 2>/dev/null
+ if test -d .tst; then
+   am__leading_dot=.
+ else
+   am__leading_dot=_
+ fi
+ rmdir .tst 2>/dev/null
+ AC_SUBST([am__leading_dot])])
+ 
+ # Add --enable-maintainer-mode option to configure.
+ # From Jim Meyering
+ 
+ # Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004
+ # Free Software Foundation, Inc.
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2, or (at your option)
+ # any later version.
+ 
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ # GNU General Public License for more details.
+ 
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ # 02111-1307, USA.
+ 
+ # serial 3
+ 
+ AC_DEFUN([AM_MAINTAINER_MODE],
+ [AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+   dnl maintainer-mode is disabled by default
+   AC_ARG_ENABLE(maintainer-mode,
+ [  --enable-maintainer-mode  enable make rules and dependencies not useful
+ 			  (and sometimes confusing) to the casual installer],
+       USE_MAINTAINER_MODE=$enableval,
+       USE_MAINTAINER_MODE=no)
+   AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+   AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes])
+   MAINT=$MAINTAINER_MODE_TRUE
+   AC_SUBST(MAINT)dnl
+ ]
+ )
+ 
+ AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
+ 
  # Check to see how 'make' treats includes.	-*- Autoconf -*-
  
  # Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
*************** AC_MSG_RESULT([$_am_result])
*** 813,821 ****
  rm -f confinc confmf
  ])
  
! # AM_CONDITIONAL                                              -*- Autoconf -*-
  
! # Copyright 1997, 2000, 2001 Free Software Foundation, Inc.
  
  # This program is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
--- 707,716 ----
  rm -f confinc confmf
  ])
  
! #  -*- Autoconf -*-
  
! 
! # Copyright (C) 1997, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
  
  # This program is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
*************** rm -f confinc confmf
*** 832,865 ****
  # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  # 02111-1307, USA.
  
! # serial 5
  
! AC_PREREQ(2.52)
  
! # AM_CONDITIONAL(NAME, SHELL-CONDITION)
! # -------------------------------------
! # Define a conditional.
! AC_DEFUN([AM_CONDITIONAL],
! [ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
!         [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
! AC_SUBST([$1_TRUE])
! AC_SUBST([$1_FALSE])
! if $2; then
!   $1_TRUE=
!   $1_FALSE='#'
  else
!   $1_TRUE='#'
!   $1_FALSE=
  fi
! AC_CONFIG_COMMANDS_PRE(
! [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
!   AC_MSG_ERROR([conditional "$1" was never defined.
! Usually this means the macro was only invoked conditionally.])
! fi])])
  
! # Like AC_CONFIG_HEADER, but automatically create stamp file. -*- Autoconf -*-
  
! # Copyright 1996, 1997, 2000, 2001 Free Software Foundation, Inc.
  
  # This program is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
--- 727,763 ----
  # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  # 02111-1307, USA.
  
! # serial 3
  
! # AM_MISSING_PROG(NAME, PROGRAM)
! # ------------------------------
! AC_DEFUN([AM_MISSING_PROG],
! [AC_REQUIRE([AM_MISSING_HAS_RUN])
! $1=${$1-"${am_missing_run}$2"}
! AC_SUBST($1)])
  
! 
! # AM_MISSING_HAS_RUN
! # ------------------
! # Define MISSING if not defined so far and test if it supports --run.
! # If it does, set am_missing_run to use it, otherwise, to nothing.
! AC_DEFUN([AM_MISSING_HAS_RUN],
! [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
! test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
! # Use eval to expand $SHELL
! if eval "$MISSING --run true"; then
!   am_missing_run="$MISSING --run "
  else
!   am_missing_run=
!   AC_MSG_WARN([`missing' script is too old or missing])
  fi
! ])
  
! # AM_PROG_MKDIR_P
! # ---------------
! # Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise.
  
! # Copyright (C) 2003, 2004 Free Software Foundation, Inc.
  
  # This program is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
*************** fi])])
*** 876,892 ****
  # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  # 02111-1307, USA.
  
! AC_PREREQ([2.52])
  
! # serial 6
  
! # AM_CONFIG_HEADER is obsolete.  It has been replaced by AC_CONFIG_HEADERS.
! AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
  
! # Add --enable-maintainer-mode option to configure.
! # From Jim Meyering
  
! # Copyright 1996, 1998, 2000, 2001, 2002  Free Software Foundation, Inc.
  
  # This program is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
--- 774,881 ----
  # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  # 02111-1307, USA.
  
! # Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories
! # created by `make install' are always world readable, even if the
! # installer happens to have an overly restrictive umask (e.g. 077).
! # This was a mistake.  There are at least two reasons why we must not
! # use `-m 0755':
! #   - it causes special bits like SGID to be ignored,
! #   - it may be too restrictive (some setups expect 775 directories).
! #
! # Do not use -m 0755 and let people choose whatever they expect by
! # setting umask.
! #
! # We cannot accept any implementation of `mkdir' that recognizes `-p'.
! # Some implementations (such as Solaris 8's) are not thread-safe: if a
! # parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c'
! # concurrently, both version can detect that a/ is missing, but only
! # one can create it and the other will error out.  Consequently we
! # restrict ourselves to GNU make (using the --version option ensures
! # this.)
! AC_DEFUN([AM_PROG_MKDIR_P],
! [if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
!   # We used to keeping the `.' as first argument, in order to
!   # allow $(mkdir_p) to be used without argument.  As in
!   #   $(mkdir_p) $(somedir)
!   # where $(somedir) is conditionally defined.  However this is wrong
!   # for two reasons:
!   #  1. if the package is installed by a user who cannot write `.'
!   #     make install will fail,
!   #  2. the above comment should most certainly read
!   #     $(mkdir_p) $(DESTDIR)$(somedir)
!   #     so it does not work when $(somedir) is undefined and
!   #     $(DESTDIR) is not.
!   #  To support the latter case, we have to write
!   #     test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
!   #  so the `.' trick is pointless.
!   mkdir_p='mkdir -p --'
! else
!   # On NextStep and OpenStep, the `mkdir' command does not
!   # recognize any option.  It will interpret all options as
!   # directories to create, and then abort because `.' already
!   # exists.
!   for d in ./-p ./--version;
!   do
!     test -d $d && rmdir $d
!   done
!   # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
!   if test -f "$ac_aux_dir/mkinstalldirs"; then
!     mkdir_p='$(mkinstalldirs)'
!   else
!     mkdir_p='$(install_sh) -d'
!   fi
! fi
! AC_SUBST([mkdir_p])])
  
! # Helper functions for option handling.                    -*- Autoconf -*-
  
! # Copyright (C) 2001, 2002, 2003  Free Software Foundation, Inc.
  
! # This program is free software; you can redistribute it and/or modify
! # it under the terms of the GNU General Public License as published by
! # the Free Software Foundation; either version 2, or (at your option)
! # any later version.
  
! # This program is distributed in the hope that it will be useful,
! # but WITHOUT ANY WARRANTY; without even the implied warranty of
! # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! # GNU General Public License for more details.
! 
! # You should have received a copy of the GNU General Public License
! # along with this program; if not, write to the Free Software
! # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
! # 02111-1307, USA.
! 
! # serial 2
! 
! # _AM_MANGLE_OPTION(NAME)
! # -----------------------
! AC_DEFUN([_AM_MANGLE_OPTION],
! [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
! 
! # _AM_SET_OPTION(NAME)
! # ------------------------------
! # Set option NAME.  Presently that only means defining a flag for this option.
! AC_DEFUN([_AM_SET_OPTION],
! [m4_define(_AM_MANGLE_OPTION([$1]), 1)])
! 
! # _AM_SET_OPTIONS(OPTIONS)
! # ----------------------------------
! # OPTIONS is a space-separated list of Automake options.
! AC_DEFUN([_AM_SET_OPTIONS],
! [AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
! 
! # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
! # -------------------------------------------
! # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
! AC_DEFUN([_AM_IF_OPTION],
! [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
! 
! #
! # Check to make sure that the build environment is sane.
! #
! 
! # Copyright (C) 1996, 1997, 2000, 2001, 2003 Free Software Foundation, Inc.
  
  # This program is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
*************** AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_
*** 903,924 ****
  # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  # 02111-1307, USA.
  
! # serial 2
  
! AC_DEFUN([AM_MAINTAINER_MODE],
! [AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
!   dnl maintainer-mode is disabled by default
!   AC_ARG_ENABLE(maintainer-mode,
! [  --enable-maintainer-mode enable make rules and dependencies not useful
!                           (and sometimes confusing) to the casual installer],
!       USE_MAINTAINER_MODE=$enableval,
!       USE_MAINTAINER_MODE=no)
!   AC_MSG_RESULT([$USE_MAINTAINER_MODE])
!   AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes])
!   MAINT=$MAINTAINER_MODE_TRUE
!   AC_SUBST(MAINT)dnl
! ]
! )
  
! AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
  
--- 892,1087 ----
  # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  # 02111-1307, USA.
  
! # serial 3
  
! # AM_SANITY_CHECK
! # ---------------
! AC_DEFUN([AM_SANITY_CHECK],
! [AC_MSG_CHECKING([whether build environment is sane])
! # Just in case
! sleep 1
! echo timestamp > conftest.file
! # Do `set' in a subshell so we don't clobber the current shell's
! # arguments.  Must try -L first in case configure is actually a
! # symlink; some systems play weird games with the mod time of symlinks
! # (eg FreeBSD returns the mod time of the symlink's containing
! # directory).
! if (
!    set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
!    if test "$[*]" = "X"; then
!       # -L didn't work.
!       set X `ls -t $srcdir/configure conftest.file`
!    fi
!    rm -f conftest.file
!    if test "$[*]" != "X $srcdir/configure conftest.file" \
!       && test "$[*]" != "X conftest.file $srcdir/configure"; then
  
!       # If neither matched, then we have a broken ls.  This can happen
!       # if, for instance, CONFIG_SHELL is bash and it inherits a
!       # broken ls alias from the environment.  This has actually
!       # happened.  Such a system could not be considered "sane".
!       AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
! alias in your environment])
!    fi
! 
!    test "$[2]" = conftest.file
!    )
! then
!    # Ok.
!    :
! else
!    AC_MSG_ERROR([newly created file is older than distributed files!
! Check your system clock])
! fi
! AC_MSG_RESULT(yes)])
! 
! # AM_PROG_INSTALL_STRIP
! 
! # Copyright (C) 2001, 2003 Free Software Foundation, Inc.
! 
! # This program is free software; you can redistribute it and/or modify
! # it under the terms of the GNU General Public License as published by
! # the Free Software Foundation; either version 2, or (at your option)
! # any later version.
! 
! # This program is distributed in the hope that it will be useful,
! # but WITHOUT ANY WARRANTY; without even the implied warranty of
! # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! # GNU General Public License for more details.
  
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ # 02111-1307, USA.
+ 
+ # One issue with vendor `install' (even GNU) is that you can't
+ # specify the program used to strip binaries.  This is especially
+ # annoying in cross-compiling environments, where the build's strip
+ # is unlikely to handle the host's binaries.
+ # Fortunately install-sh will honor a STRIPPROG variable, so we
+ # always use install-sh in `make install-strip', and initialize
+ # STRIPPROG with the value of the STRIP variable (set by the user).
+ AC_DEFUN([AM_PROG_INSTALL_STRIP],
+ [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+ # Installed binaries are usually stripped using `strip' when the user
+ # run `make install-strip'.  However `strip' might not be the right
+ # tool to use in cross-compilation environments, therefore Automake
+ # will honor the `STRIP' environment variable to overrule this program.
+ dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+ if test "$cross_compiling" != no; then
+   AC_CHECK_TOOL([STRIP], [strip], :)
+ fi
+ INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
+ AC_SUBST([INSTALL_STRIP_PROGRAM])])
+ 
+ # Check how to create a tarball.                            -*- Autoconf -*-
+ 
+ # Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2, or (at your option)
+ # any later version.
+ 
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ # GNU General Public License for more details.
+ 
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ # 02111-1307, USA.
+ 
+ # serial 1
+ 
+ 
+ # _AM_PROG_TAR(FORMAT)
+ # --------------------
+ # Check how to create a tarball in format FORMAT.
+ # FORMAT should be one of `v7', `ustar', or `pax'.
+ #
+ # Substitute a variable $(am__tar) that is a command
+ # writing to stdout a FORMAT-tarball containing the directory
+ # $tardir.
+ #     tardir=directory && $(am__tar) > result.tar
+ #
+ # Substitute a variable $(am__untar) that extract such
+ # a tarball read from stdin.
+ #     $(am__untar) < result.tar
+ AC_DEFUN([_AM_PROG_TAR],
+ [# Always define AMTAR for backward compatibility.
+ AM_MISSING_PROG([AMTAR], [tar])
+ m4_if([$1], [v7],
+      [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+      [m4_case([$1], [ustar],, [pax],,
+               [m4_fatal([Unknown tar format])])
+ AC_MSG_CHECKING([how to create a $1 tar archive])
+ # Loop over all known methods to create a tar archive until one works.
+ _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+ _am_tools=${am_cv_prog_tar_$1-$_am_tools}
+ # Do not fold the above two line into one, because Tru64 sh and
+ # Solaris sh will not grok spaces in the rhs of `-'.
+ for _am_tool in $_am_tools
+ do
+   case $_am_tool in
+   gnutar)
+     for _am_tar in tar gnutar gtar;
+     do
+       AM_RUN_LOG([$_am_tar --version]) && break
+     done
+     am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+     am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+     am__untar="$_am_tar -xf -"
+     ;;
+   plaintar)
+     # Must skip GNU tar: if it does not support --format= it doesn't create
+     # ustar tarball either.
+     (tar --version) >/dev/null 2>&1 && continue
+     am__tar='tar chf - "$$tardir"'
+     am__tar_='tar chf - "$tardir"'
+     am__untar='tar xf -'
+     ;;
+   pax)
+     am__tar='pax -L -x $1 -w "$$tardir"'
+     am__tar_='pax -L -x $1 -w "$tardir"'
+     am__untar='pax -r'
+     ;;
+   cpio)
+     am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+     am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+     am__untar='cpio -i -H $1 -d'
+     ;;
+   none)
+     am__tar=false
+     am__tar_=false
+     am__untar=false
+     ;;
+   esac
+ 
+   # If the value was cached, stop now.  We just wanted to have am__tar
+   # and am__untar set.
+   test -n "${am_cv_prog_tar_$1}" && break
+ 
+   # tar/untar a dummy directory, and stop if the command works
+   rm -rf conftest.dir
+   mkdir conftest.dir
+   echo GrepMe > conftest.dir/file
+   AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+   rm -rf conftest.dir
+   if test -s conftest.tar; then
+     AM_RUN_LOG([$am__untar <conftest.tar])
+     grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+   fi
+ done
+ rm -rf conftest.dir
+ 
+ AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+ AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+ AC_SUBST([am__tar])
+ AC_SUBST([am__untar])
+ ]) # _AM_PROG_TAR
+ 
+ m4_include([../config/accross.m4])
+ m4_include([../config/gcc-version.m4])
+ m4_include([acinclude.m4])
diff -Nrcpad gcc-3.4.3/fastjar/compress.c gcc-4.0.0/fastjar/compress.c
*** gcc-3.4.3/fastjar/compress.c	Thu Jan  3 04:57:56 2002
--- gcc-4.0.0/fastjar/compress.c	Tue Jul  6 21:40:08 2004
***************
*** 74,79 ****
--- 74,80 ----
  /*
    compress.c - code for handling deflation
    Copyright (C) 1999  Bryan Burns
+   Copyright (C) 2004  Free Software Foundation, Inc.
    
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License
***************
*** 109,116 ****
--- 110,121 ----
  #include "jartool.h"
  #include "pushback.h"
  #include "compress.h"
+ #include "shift.h"
+ 
+ int write_data (int, void *, size_t, struct zipentry *);
  
  extern int seekable;
+ extern off_t end_of_entries;
  
  static z_stream zs;
  
*************** void init_compression(){
*** 133,139 ****
    }
  }
  
! int compress_file(int in_fd, int out_fd, struct zipentry *ze){
    Bytef in_buff[RDSZ];
    Bytef out_buff[RDSZ];
    unsigned int rdamt, wramt;
--- 138,173 ----
    }
  }
  
! int
! write_data (int fd, void *buf, size_t len, struct zipentry *ze)
! {
! #ifdef WITH_SHIFT_DOWN
!   struct zipentry *next = NULL;
!   off_t here = lseek (fd, 0, SEEK_CUR);
!   /*
!    * If we are updating and there is not enough space before the next
!    * entry, expand the file.
!    */
!   if (ze)
!     {
!       next = ze->next_entry;
!       if (next && here + len >= next->offset)
! 	{
! 	  if (shift_down (fd, next->offset, (here + len) - next->offset, next))
! 	    {
! 	      perror ("can't expand file");
! 	      exit (1);
! 	    }
! 	}
!     }
! #endif /* WITH_SHIFT_DOWN */
! 
!   return write (fd, buf, len);
! }
! 
! int compress_file(int in_fd, int out_fd, struct zipentry *ze,
! 		  struct zipentry *existing)
! {
    Bytef in_buff[RDSZ];
    Bytef out_buff[RDSZ];
    unsigned int rdamt, wramt;
*************** int compress_file(int in_fd, int out_fd,
*** 183,192 ****
      /* If the output buffer is full, dump it to disk */
      if(zs.avail_out == 0){
  
!       if(write(out_fd, out_buff, RDSZ) != RDSZ){
!         perror("write");
!         exit(1);
!       }
  
        /* clear the output buffer */
        zs.next_out = out_buff;
--- 217,227 ----
      /* If the output buffer is full, dump it to disk */
      if(zs.avail_out == 0){
  
!       if (write_data (out_fd, out_buff, RDSZ, existing) != RDSZ)
! 	{
! 	  perror("write");
! 	  exit(1);
! 	}
  
        /* clear the output buffer */
        zs.next_out = out_buff;
*************** int compress_file(int in_fd, int out_fd,
*** 201,210 ****
  
      wramt = RDSZ - zs.avail_out;
  
!     if(write(out_fd, out_buff, wramt) != (int)wramt){
!       perror("write");
!       exit(1);
!     }
      /* clear the output buffer */
      zs.next_out = out_buff;
      zs.avail_out = (uInt)RDSZ;
--- 236,246 ----
  
      wramt = RDSZ - zs.avail_out;
  
!     if (write_data (out_fd, out_buff, wramt, existing) != (int)wramt)
!       {
! 	perror("write");
! 	exit(1);
!       }
      /* clear the output buffer */
      zs.next_out = out_buff;
      zs.avail_out = (uInt)RDSZ;
*************** int compress_file(int in_fd, int out_fd,
*** 215,224 ****
    while(deflate(&zs, Z_FINISH) == Z_OK){
      wramt = RDSZ - zs.avail_out;
  
!     if(write(out_fd, out_buff, wramt) != (int)wramt){
!       perror("write");
!       exit(1);
!     }
  
      zs.next_out = out_buff;
      zs.avail_out = (uInt)RDSZ;
--- 251,261 ----
    while(deflate(&zs, Z_FINISH) == Z_OK){
      wramt = RDSZ - zs.avail_out;
  
!     if (write_data (out_fd, out_buff, wramt, existing) != (int)wramt)
!       {
! 	perror("write");
! 	exit(1);
!       }
  
      zs.next_out = out_buff;
      zs.avail_out = (uInt)RDSZ;
*************** int compress_file(int in_fd, int out_fd,
*** 228,237 ****
    if(zs.avail_out != RDSZ){
      wramt = RDSZ - zs.avail_out;
  
!     if(write(out_fd, out_buff, wramt) != (int)wramt){
!       perror("write");
!       exit(1);
!     }
    }
  
    /* update fastjar's entry information */
--- 265,275 ----
    if(zs.avail_out != RDSZ){
      wramt = RDSZ - zs.avail_out;
  
!     if (write_data (out_fd, out_buff, wramt, existing) != (int)wramt)
!       {
! 	perror("write");
! 	exit(1);
!       }
    }
  
    /* update fastjar's entry information */
diff -Nrcpad gcc-3.4.3/fastjar/compress.h gcc-4.0.0/fastjar/compress.h
*** gcc-3.4.3/fastjar/compress.h	Thu Dec 14 18:45:35 2000
--- gcc-4.0.0/fastjar/compress.h	Tue Jul  6 21:40:08 2004
***************
*** 46,52 ****
  void init_compression(void);
  
  /* Compresses the file specified by in_fd and appends it to out_fd */
! int compress_file(int in_fd, int out_fd, struct zipentry *ze);
  
  /* Frees memory used by compression function */
  void end_compression(void);
--- 46,52 ----
  void init_compression(void);
  
  /* Compresses the file specified by in_fd and appends it to out_fd */
! int compress_file(int, int, struct zipentry *, struct zipentry *);
  
  /* Frees memory used by compression function */
  void end_compression(void);
diff -Nrcpad gcc-3.4.3/fastjar/config.h.in gcc-4.0.0/fastjar/config.h.in
*** gcc-3.4.3/fastjar/config.h.in	Wed Jul  7 03:16:27 2004
--- gcc-4.0.0/fastjar/config.h.in	Mon Jul 19 20:08:20 2004
***************
*** 10,15 ****
--- 10,18 ----
  /* Define to 1 if you have the <fcntl.h> header file. */
  #undef HAVE_FCNTL_H
  
+ /* Define to 1 if you have the `ftruncate' function. */
+ #undef HAVE_FTRUNCATE
+ 
  /* Define to 1 if you have the <inttypes.h> header file. */
  #undef HAVE_INTTYPES_H
  
***************
*** 57,62 ****
--- 60,68 ----
  /* Define to 1 if you have the <unistd.h> header file. */
  #undef HAVE_UNISTD_H
  
+ /* Define to 1 if you have the `_chsize' function. */
+ #undef HAVE__CHSIZE
+ 
  /* Define if the host machine stores words of multi-word integers in
     big-endian order. */
  #undef HOST_WORDS_BIG_ENDIAN
diff -Nrcpad gcc-3.4.3/fastjar/configure gcc-4.0.0/fastjar/configure
*** gcc-3.4.3/fastjar/configure	Fri Nov  5 04:14:05 2004
--- gcc-4.0.0/fastjar/configure	Thu Apr 21 07:04:10 2005
***************
*** 1,9 ****
  #! /bin/sh
  # Guess values for system-dependent variables and create Makefiles.
! # Generated by GNU Autoconf 2.57.
  #
! # Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002
! # Free Software Foundation, Inc.
  # This configure script is free software; the Free Software Foundation
  # gives unlimited permission to copy, distribute and modify it.
  ## --------------------- ##
--- 1,8 ----
  #! /bin/sh
  # Guess values for system-dependent variables and create Makefiles.
! # Generated by GNU Autoconf 2.59.
  #
! # Copyright (C) 2003 Free Software Foundation, Inc.
  # This configure script is free software; the Free Software Foundation
  # gives unlimited permission to copy, distribute and modify it.
  ## --------------------- ##
*************** if test -n "${ZSH_VERSION+set}" && (emul
*** 20,28 ****
  elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
    set -o posix
  fi
  
  # Support unset when possible.
! if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
    as_unset=unset
  else
    as_unset=false
--- 19,28 ----
  elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
    set -o posix
  fi
+ DUALCASE=1; export DUALCASE # for MKS sh
  
  # Support unset when possible.
! if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
    as_unset=unset
  else
    as_unset=false
*************** for as_var in \
*** 41,47 ****
    LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
    LC_TELEPHONE LC_TIME
  do
!   if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then
      eval $as_var=C; export $as_var
    else
      $as_unset $as_var
--- 41,47 ----
    LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
    LC_TELEPHONE LC_TIME
  do
!   if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
      eval $as_var=C; export $as_var
    else
      $as_unset $as_var
*************** rm -f conf$$ conf$$.exe conf$$.file
*** 218,233 ****
  if mkdir -p . 2>/dev/null; then
    as_mkdir_p=:
  else
    as_mkdir_p=false
  fi
  
  as_executable_p="test -f"
  
  # Sed expression to map a string onto a valid CPP name.
! as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g"
  
  # Sed expression to map a string onto a valid variable name.
! as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
  
  
  # IFS
--- 218,234 ----
  if mkdir -p . 2>/dev/null; then
    as_mkdir_p=:
  else
+   test -d ./-p && rmdir ./-p
    as_mkdir_p=false
  fi
  
  as_executable_p="test -f"
  
  # Sed expression to map a string onto a valid CPP name.
! as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
  
  # Sed expression to map a string onto a valid variable name.
! as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
  
  
  # IFS
*************** ac_includes_default="\
*** 308,314 ****
  # include <unistd.h>
  #endif"
  
! ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO AMTAR install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM AWK SET_MAKE am__leading_dot CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE RM CP CHMOD MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT fastjar_warn_cflags CPP EGREP ZLIBS ZDEPS ZINCS GENINSRC_TRUE GENINSRC_FALSE gcc_version LIBOBJS LTLIBOBJS'
  ac_subst_files=''
  
  # Initialize some variables set by options.
--- 309,315 ----
  # include <unistd.h>
  #endif"
  
! ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE RM CP CHMOD MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT fastjar_warn_cflags CPP EGREP ZLIBS ZDEPS ZINCS GENINSRC_TRUE GENINSRC_FALSE gcc_version_trigger gcc_version_full gcc_version LIBOBJS LTLIBOBJS'
  ac_subst_files=''
  
  # Initialize some variables set by options.
*************** done
*** 667,673 ****
  
  # Be sure to have absolute paths.
  for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
!               localstatedir libdir includedir oldincludedir infodir mandir
  do
    eval ac_val=$`echo $ac_var`
    case $ac_val in
--- 668,674 ----
  
  # Be sure to have absolute paths.
  for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
! 	      localstatedir libdir includedir oldincludedir infodir mandir
  do
    eval ac_val=$`echo $ac_var`
    case $ac_val in
*************** if test -z "$srcdir"; then
*** 707,716 ****
    # Try the directory containing this script, then its parent.
    ac_confdir=`(dirname "$0") 2>/dev/null ||
  $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
!          X"$0" : 'X\(//\)[^/]' \| \
!          X"$0" : 'X\(//\)$' \| \
!          X"$0" : 'X\(/\)' \| \
!          .     : '\(.\)' 2>/dev/null ||
  echo X"$0" |
      sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
    	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
--- 708,717 ----
    # Try the directory containing this script, then its parent.
    ac_confdir=`(dirname "$0") 2>/dev/null ||
  $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
! 	 X"$0" : 'X\(//\)[^/]' \| \
! 	 X"$0" : 'X\(//\)$' \| \
! 	 X"$0" : 'X\(/\)' \| \
! 	 .     : '\(.\)' 2>/dev/null ||
  echo X"$0" |
      sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
    	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
*************** _ACEOF
*** 802,810 ****
    cat <<_ACEOF
  Installation directories:
    --prefix=PREFIX         install architecture-independent files in PREFIX
!                           [$ac_default_prefix]
    --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
!                           [PREFIX]
  
  By default, \`make install' will install all the files in
  \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
--- 803,811 ----
    cat <<_ACEOF
  Installation directories:
    --prefix=PREFIX         install architecture-independent files in PREFIX
! 			  [$ac_default_prefix]
    --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
! 			  [PREFIX]
  
  By default, \`make install' will install all the files in
  \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
*************** if test -n "$ac_init_help"; then
*** 844,853 ****
  Optional Features:
    --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
    --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
!   --disable-dependency-tracking Speeds up one-time builds
!   --enable-dependency-tracking  Do not reject slow dependency extractors
!   --enable-maintainer-mode enable make rules and dependencies not useful
!                           (and sometimes confusing) to the casual installer
    --enable-generated-files-in-srcdir
                            put copies of generated files in source dir
                            intended for creating source tarballs for users
--- 845,854 ----
  Optional Features:
    --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
    --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
!   --disable-dependency-tracking  speeds up one-time build
!   --enable-dependency-tracking   do not reject slow dependency extractors
!   --enable-maintainer-mode  enable make rules and dependencies not useful
! 			  (and sometimes confusing) to the casual installer
    --enable-generated-files-in-srcdir
                            put copies of generated files in source dir
                            intended for creating source tarballs for users
*************** case $srcdir in
*** 903,914 ****
      ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
      ac_top_srcdir=$ac_top_builddir$srcdir ;;
  esac
! # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
! # absolute.
! ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
! ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd`
! ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
! ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
  
      cd $ac_dir
      # Check for guested configure; otherwise get Cygnus style configure.
--- 904,948 ----
      ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
      ac_top_srcdir=$ac_top_builddir$srcdir ;;
  esac
! 
! # Do not use `cd foo && pwd` to compute absolute paths, because
! # the directories may not exist.
! case `pwd` in
! .) ac_abs_builddir="$ac_dir";;
! *)
!   case "$ac_dir" in
!   .) ac_abs_builddir=`pwd`;;
!   [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
!   *) ac_abs_builddir=`pwd`/"$ac_dir";;
!   esac;;
! esac
! case $ac_abs_builddir in
! .) ac_abs_top_builddir=${ac_top_builddir}.;;
! *)
!   case ${ac_top_builddir}. in
!   .) ac_abs_top_builddir=$ac_abs_builddir;;
!   [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
!   *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
!   esac;;
! esac
! case $ac_abs_builddir in
! .) ac_abs_srcdir=$ac_srcdir;;
! *)
!   case $ac_srcdir in
!   .) ac_abs_srcdir=$ac_abs_builddir;;
!   [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
!   *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
!   esac;;
! esac
! case $ac_abs_builddir in
! .) ac_abs_top_srcdir=$ac_top_srcdir;;
! *)
!   case $ac_top_srcdir in
!   .) ac_abs_top_srcdir=$ac_abs_builddir;;
!   [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
!   *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
!   esac;;
! esac
  
      cd $ac_dir
      # Check for guested configure; otherwise get Cygnus style configure.
*************** ac_abs_top_srcdir=`cd "$ac_dir" && cd $a
*** 919,925 ****
        echo
        $SHELL $ac_srcdir/configure  --help=recursive
      elif test -f $ac_srcdir/configure.ac ||
!            test -f $ac_srcdir/configure.in; then
        echo
        $ac_configure --help
      else
--- 953,959 ----
        echo
        $SHELL $ac_srcdir/configure  --help=recursive
      elif test -f $ac_srcdir/configure.ac ||
! 	   test -f $ac_srcdir/configure.in; then
        echo
        $ac_configure --help
      else
*************** test -n "$ac_init_help" && exit 0
*** 933,940 ****
  if $ac_init_version; then
    cat <<\_ACEOF
  
! Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002
! Free Software Foundation, Inc.
  This configure script is free software; the Free Software Foundation
  gives unlimited permission to copy, distribute and modify it.
  _ACEOF
--- 967,973 ----
  if $ac_init_version; then
    cat <<\_ACEOF
  
! Copyright (C) 2003 Free Software Foundation, Inc.
  This configure script is free software; the Free Software Foundation
  gives unlimited permission to copy, distribute and modify it.
  _ACEOF
*************** This file contains any messages produced
*** 946,952 ****
  running configure, to aid debugging if configure makes a mistake.
  
  It was created by $as_me, which was
! generated by GNU Autoconf 2.57.  Invocation command line was
  
    $ $0 $@
  
--- 979,985 ----
  running configure, to aid debugging if configure makes a mistake.
  
  It was created by $as_me, which was
! generated by GNU Autoconf 2.59.  Invocation command line was
  
    $ $0 $@
  
*************** do
*** 1023,1041 ****
      2)
        ac_configure_args1="$ac_configure_args1 '$ac_arg'"
        if test $ac_must_keep_next = true; then
!         ac_must_keep_next=false # Got value, back to normal.
        else
!         case $ac_arg in
!           *=* | --config-cache | -C | -disable-* | --disable-* \
!           | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
!           | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
!           | -with-* | --with-* | -without-* | --without-* | --x)
!             case "$ac_configure_args0 " in
!               "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
!             esac
!             ;;
!           -* ) ac_must_keep_next=true ;;
!         esac
        fi
        ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
        # Get rid of the leading space.
--- 1056,1074 ----
      2)
        ac_configure_args1="$ac_configure_args1 '$ac_arg'"
        if test $ac_must_keep_next = true; then
! 	ac_must_keep_next=false # Got value, back to normal.
        else
! 	case $ac_arg in
! 	  *=* | --config-cache | -C | -disable-* | --disable-* \
! 	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
! 	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
! 	  | -with-* | --with-* | -without-* | --without-* | --x)
! 	    case "$ac_configure_args0 " in
! 	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
! 	    esac
! 	    ;;
! 	  -* ) ac_must_keep_next=true ;;
! 	esac
        fi
        ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
        # Get rid of the leading space.
*************** _ASBOX
*** 1069,1080 ****
      case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
      *ac_space=\ *)
        sed -n \
!         "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
!     	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
        ;;
      *)
        sed -n \
!         "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
        ;;
      esac;
  }
--- 1102,1113 ----
      case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
      *ac_space=\ *)
        sed -n \
! 	"s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
! 	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
        ;;
      *)
        sed -n \
! 	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
        ;;
      esac;
  }
*************** _ASBOX
*** 1103,1109 ****
        for ac_var in $ac_subst_files
        do
  	eval ac_val=$`echo $ac_var`
!         echo "$ac_var='"'"'$ac_val'"'"'"
        done | sort
        echo
      fi
--- 1136,1142 ----
        for ac_var in $ac_subst_files
        do
  	eval ac_val=$`echo $ac_var`
! 	echo "$ac_var='"'"'$ac_val'"'"'"
        done | sort
        echo
      fi
*************** _ASBOX
*** 1122,1128 ****
        echo "$as_me: caught signal $ac_signal"
      echo "$as_me: exit $exit_status"
    } >&5
!   rm -f core core.* *.core &&
    rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
      exit $exit_status
       ' 0
--- 1155,1161 ----
        echo "$as_me: caught signal $ac_signal"
      echo "$as_me: exit $exit_status"
    } >&5
!   rm -f core *.core &&
    rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
      exit $exit_status
       ' 0
*************** fi
*** 1202,1208 ****
  # value.
  ac_cache_corrupted=false
  for ac_var in `(set) 2>&1 |
!                sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
    eval ac_old_set=\$ac_cv_env_${ac_var}_set
    eval ac_new_set=\$ac_env_${ac_var}_set
    eval ac_old_val="\$ac_cv_env_${ac_var}_value"
--- 1235,1241 ----
  # value.
  ac_cache_corrupted=false
  for ac_var in `(set) 2>&1 |
! 	       sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
    eval ac_old_set=\$ac_cv_env_${ac_var}_set
    eval ac_new_set=\$ac_env_${ac_var}_set
    eval ac_old_val="\$ac_cv_env_${ac_var}_value"
*************** echo "$as_me: error: \`$ac_var' was not 
*** 1219,1231 ****
      ,);;
      *)
        if test "x$ac_old_val" != "x$ac_new_val"; then
!         { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
  echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
!         { echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
  echo "$as_me:   former value:  $ac_old_val" >&2;}
!         { echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
  echo "$as_me:   current value: $ac_new_val" >&2;}
!         ac_cache_corrupted=:
        fi;;
    esac
    # Pass precious variables to config.status.
--- 1252,1264 ----
      ,);;
      *)
        if test "x$ac_old_val" != "x$ac_new_val"; then
! 	{ echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
  echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
! 	{ echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
  echo "$as_me:   former value:  $ac_old_val" >&2;}
! 	{ echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
  echo "$as_me:   current value: $ac_new_val" >&2;}
! 	ac_cache_corrupted=:
        fi;;
    esac
    # Pass precious variables to config.status.
*************** ac_compiler_gnu=$ac_cv_c_compiler_gnu
*** 1273,1279 ****
  
  
  
! am__api_version="1.7"
  ac_aux_dir=
  for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
    if test -f $ac_dir/install-sh; then
--- 1306,1312 ----
  
  
  
! am__api_version="1.9"
  ac_aux_dir=
  for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
    if test -f $ac_dir/install-sh; then
*************** ac_configure="$SHELL $ac_aux_dir/configu
*** 1310,1315 ****
--- 1343,1349 ----
  # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
  # AFS /usr/afsws/bin/install, which mishandles nonexistent args
  # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+ # OS/2's system install, which has a completely different semantic
  # ./install, which can be erroneously created by make from ./install.sh.
  echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
  echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
*************** do
*** 1326,1331 ****
--- 1360,1366 ----
  case $as_dir/ in
    ./ | .// | /cC/* | \
    /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+   ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
    /usr/ucb/* ) ;;
    *)
      # OSF1 and SCO ODT 3.0 have their own names for install.
*************** case $as_dir/ in
*** 1333,1352 ****
      # by default.
      for ac_prog in ginstall scoinst install; do
        for ac_exec_ext in '' $ac_executable_extensions; do
!         if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
!           if test $ac_prog = install &&
!             grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
!             # AIX install.  It has an incompatible calling convention.
!             :
!           elif test $ac_prog = install &&
!             grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
!             # program-specific install script used by HP pwplus--don't use.
!             :
!           else
!             ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
!             break 3
!           fi
!         fi
        done
      done
      ;;
--- 1368,1387 ----
      # by default.
      for ac_prog in ginstall scoinst install; do
        for ac_exec_ext in '' $ac_executable_extensions; do
! 	if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
! 	  if test $ac_prog = install &&
! 	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
! 	    # AIX install.  It has an incompatible calling convention.
! 	    :
! 	  elif test $ac_prog = install &&
! 	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
! 	    # program-specific install script used by HP pwplus--don't use.
! 	    :
! 	  else
! 	    ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
! 	    break 3
! 	  fi
! 	fi
        done
      done
      ;;
*************** _ACEOF
*** 1434,1440 ****
  program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
  rm conftest.sed
  
- 
  # expand $ac_aux_dir to an absolute path
  am_aux_dir=`cd $ac_aux_dir && pwd`
  
--- 1469,1474 ----
*************** else
*** 1448,1453 ****
--- 1482,1520 ----
  echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
  fi
  
+ if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
+   # We used to keeping the `.' as first argument, in order to
+   # allow $(mkdir_p) to be used without argument.  As in
+   #   $(mkdir_p) $(somedir)
+   # where $(somedir) is conditionally defined.  However this is wrong
+   # for two reasons:
+   #  1. if the package is installed by a user who cannot write `.'
+   #     make install will fail,
+   #  2. the above comment should most certainly read
+   #     $(mkdir_p) $(DESTDIR)$(somedir)
+   #     so it does not work when $(somedir) is undefined and
+   #     $(DESTDIR) is not.
+   #  To support the latter case, we have to write
+   #     test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
+   #  so the `.' trick is pointless.
+   mkdir_p='mkdir -p --'
+ else
+   # On NextStep and OpenStep, the `mkdir' command does not
+   # recognize any option.  It will interpret all options as
+   # directories to create, and then abort because `.' already
+   # exists.
+   for d in ./-p ./--version;
+   do
+     test -d $d && rmdir $d
+   done
+   # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
+   if test -f "$ac_aux_dir/mkinstalldirs"; then
+     mkdir_p='$(mkinstalldirs)'
+   else
+     mkdir_p='$(install_sh) -d'
+   fi
+ fi
+ 
  for ac_prog in gawk mawk nawk awk
  do
    # Extract the first word of "$ac_prog", so it can be a program name with args.
*************** done
*** 1490,1496 ****
  
  echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
  echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
! set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,./+-,__p_,'`
  if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
--- 1557,1563 ----
  
  echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
  echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
! set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
  if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
*************** else
*** 1526,1532 ****
  fi
  rmdir .tst 2>/dev/null
  
!  # test to see if srcdir already configured
  if test "`cd $srcdir && pwd`" != "`pwd`" &&
     test -f $srcdir/config.status; then
    { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
--- 1593,1599 ----
  fi
  rmdir .tst 2>/dev/null
  
! # test to see if srcdir already configured
  if test "`cd $srcdir && pwd`" != "`pwd`" &&
     test -f $srcdir/config.status; then
    { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
*************** AUTOHEADER=${AUTOHEADER-"${am_missing_ru
*** 1574,1582 ****
  
  MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
  
- 
- AMTAR=${AMTAR-"${am_missing_run}tar"}
- 
  install_sh=${install_sh-"$am_aux_dir/install-sh"}
  
  # Installed binaries are usually stripped using `strip' when the user
--- 1641,1646 ----
*************** INSTALL_STRIP_PROGRAM="\${SHELL} \$(inst
*** 1669,1674 ****
--- 1733,1745 ----
  
  # We need awk for the "check" target.  The system "awk" is bad on
  # some platforms.
+ # Always define AMTAR for backward compatibility.
+ 
+ AMTAR=${AMTAR-"${am_missing_run}tar"}
+ 
+ am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+ 
+ 
  
  
  
*************** ac_compiler=`set X $ac_compile; echo $2`
*** 2011,2017 ****
    (exit $ac_status); }
  
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 2082,2087 ----
*************** ac_clean_files="$ac_clean_files a.out a.
*** 2031,2038 ****
  # Try to create an executable without -o first, disregard a.out.
  # It will help us diagnose broken compilers, and finding out an intuition
  # of exeext.
! echo "$as_me:$LINENO: checking for C compiler default output" >&5
! echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6
  ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
  if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
    (eval $ac_link_default) 2>&5
--- 2101,2108 ----
  # Try to create an executable without -o first, disregard a.out.
  # It will help us diagnose broken compilers, and finding out an intuition
  # of exeext.
! echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
! echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
  ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
  if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
    (eval $ac_link_default) 2>&5
*************** do
*** 2052,2074 ****
    test -f "$ac_file" || continue
    case $ac_file in
      *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
!         ;;
      conftest.$ac_ext )
!         # This is the source file.
!         ;;
      [ab].out )
!         # We found the default executable, but exeext='' is most
!         # certainly right.
!         break;;
      *.* )
!         ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
!         # FIXME: I believe we export ac_cv_exeext for Libtool,
!         # but it would be cool to find out if it's true.  Does anybody
!         # maintain Libtool? --akim.
!         export ac_cv_exeext
!         break;;
      * )
!         break;;
    esac
  done
  else
--- 2122,2144 ----
    test -f "$ac_file" || continue
    case $ac_file in
      *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
! 	;;
      conftest.$ac_ext )
! 	# This is the source file.
! 	;;
      [ab].out )
! 	# We found the default executable, but exeext='' is most
! 	# certainly right.
! 	break;;
      *.* )
! 	ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
! 	# FIXME: I believe we export ac_cv_exeext for Libtool,
! 	# but it would be cool to find out if it's true.  Does anybody
! 	# maintain Libtool? --akim.
! 	export ac_cv_exeext
! 	break;;
      * )
! 	break;;
    esac
  done
  else
*************** for ac_file in conftest.exe conftest con
*** 2142,2149 ****
    case $ac_file in
      *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
      *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
!           export ac_cv_exeext
!           break;;
      * ) break;;
    esac
  done
--- 2212,2219 ----
    case $ac_file in
      *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
      *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
! 	  export ac_cv_exeext
! 	  break;;
      * ) break;;
    esac
  done
*************** if test "${ac_cv_objext+set}" = set; the
*** 2168,2174 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 2238,2243 ----
*************** if test "${ac_cv_c_compiler_gnu+set}" = 
*** 2219,2225 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 2288,2293 ----
*************** main ()
*** 2239,2249 ****
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>&5
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 2307,2327 ----
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
    ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 2256,2262 ****
  
  ac_compiler_gnu=no
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
  ac_cv_c_compiler_gnu=$ac_compiler_gnu
  
  fi
--- 2334,2340 ----
  
  ac_compiler_gnu=no
  fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  ac_cv_c_compiler_gnu=$ac_compiler_gnu
  
  fi
*************** if test "${ac_cv_prog_cc_g+set}" = set; 
*** 2272,2278 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 2350,2355 ----
*************** main ()
*** 2289,2299 ****
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>&5
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 2366,2386 ----
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
    ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 2306,2312 ****
  
  ac_cv_prog_cc_g=no
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
  fi
  echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
  echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
--- 2393,2399 ----
  
  ac_cv_prog_cc_g=no
  fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  fi
  echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
  echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
*************** else
*** 2333,2339 ****
    ac_cv_prog_cc_stdc=no
  ac_save_CC=$CC
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 2420,2425 ----
*************** static char *f (char * (*g) (char **, in
*** 2361,2366 ****
--- 2447,2462 ----
    va_end (v);
    return s;
  }
+ 
+ /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+    function prototypes and stuff, but not '\xHH' hex character constants.
+    These don't provoke an error unfortunately, instead are silently treated
+    as 'x'.  The following induces an error, until -std1 is added to get
+    proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+    array size at least.  It's necessary to write '\x00'==0 to get something
+    that's true only with -std1.  */
+ int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+ 
  int test (int i, double x);
  struct s1 {int (*f) (int a);};
  struct s2 {int (*f) (double a);};
*************** do
*** 2387,2397 ****
    CC="$ac_save_CC $ac_arg"
    rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>&5
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 2483,2503 ----
    CC="$ac_save_CC $ac_arg"
    rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
    ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
*************** else
*** 2404,2410 ****
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext
  done
  rm -f conftest.$ac_ext conftest.$ac_objext
  CC=$ac_save_CC
--- 2510,2516 ----
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.err conftest.$ac_objext
  done
  rm -f conftest.$ac_ext conftest.$ac_objext
  CC=$ac_save_CC
*************** cat >conftest.$ac_ext <<_ACEOF
*** 2432,2450 ****
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>&5
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); }; }; then
    for ac_declaration in \
!    ''\
!    '#include <stdlib.h>' \
     'extern "C" void std::exit (int) throw (); using std::exit;' \
     'extern "C" void std::exit (int); using std::exit;' \
     'extern "C" void exit (int) throw ();' \
--- 2538,2565 ----
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
    ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); }; }; then
    for ac_declaration in \
!    '' \
     'extern "C" void std::exit (int) throw (); using std::exit;' \
     'extern "C" void std::exit (int); using std::exit;' \
     'extern "C" void exit (int) throw ();' \
*************** if { (eval echo "$as_me:$LINENO: \"$ac_c
*** 2452,2465 ****
     'void exit (int);'
  do
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
- #include <stdlib.h>
  $ac_declaration
  int
  main ()
  {
--- 2567,2579 ----
     'void exit (int);'
  do
    cat >conftest.$ac_ext <<_ACEOF
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
  $ac_declaration
+ #include <stdlib.h>
  int
  main ()
  {
*************** exit (42);
*** 2470,2480 ****
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>&5
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 2584,2604 ----
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
    ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 2487,2495 ****
  
  continue
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 2611,2618 ----
  
  continue
  fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
    cat >conftest.$ac_ext <<_ACEOF
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
*************** exit (42);
*** 2506,2516 ****
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>&5
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 2629,2649 ----
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
    ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
*************** else
*** 2522,2528 ****
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
  done
  rm -f conftest*
  if test -n "$ac_declaration"; then
--- 2655,2661 ----
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  done
  rm -f conftest*
  if test -n "$ac_declaration"; then
*************** else
*** 2536,2542 ****
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
  ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 2669,2675 ----
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
*************** else
*** 2649,2655 ****
      : > sub/conftest.c
      for i in 1 2 3 4 5 6; do
        echo '#include "conftst'$i'.h"' >> sub/conftest.c
!       : > sub/conftst$i.h
      done
      echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
  
--- 2782,2790 ----
      : > sub/conftest.c
      for i in 1 2 3 4 5 6; do
        echo '#include "conftst'$i'.h"' >> sub/conftest.c
!       # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
!       # Solaris 8's {/usr,}/bin/sh.
!       touch sub/conftst$i.h
      done
      echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
  
*************** else
*** 2677,2685 ****
         grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
         ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
        # icc doesn't choke on unknown options, it will just issue warnings
!       # (even with -Werror).  So we grep stderr for any message
!       # that says an option was ignored.
!       if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else
          am_cv_CC_dependencies_compiler_type=$depmode
          break
        fi
--- 2812,2825 ----
         grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
         ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
        # icc doesn't choke on unknown options, it will just issue warnings
!       # or remarks (even with -Werror).  So we grep stderr for any message
!       # that says an option was ignored or not supported.
!       # When given -MP, icc 7.0 and 7.1 complain thusly:
!       #   icc: Command line warning: ignoring option '-M'; no argument required
!       # The diagnosis changed in icc 8.0:
!       #   icc: Command line remark: option '-MP' not supported
!       if (grep 'ignoring option' conftest.err ||
!           grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
          am_cv_CC_dependencies_compiler_type=$depmode
          break
        fi
*************** fi
*** 2721,2726 ****
--- 2861,2867 ----
  # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
  # AFS /usr/afsws/bin/install, which mishandles nonexistent args
  # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+ # OS/2's system install, which has a completely different semantic
  # ./install, which can be erroneously created by make from ./install.sh.
  echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
  echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
*************** do
*** 2737,2742 ****
--- 2878,2884 ----
  case $as_dir/ in
    ./ | .// | /cC/* | \
    /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+   ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
    /usr/ucb/* ) ;;
    *)
      # OSF1 and SCO ODT 3.0 have their own names for install.
*************** case $as_dir/ in
*** 2744,2763 ****
      # by default.
      for ac_prog in ginstall scoinst install; do
        for ac_exec_ext in '' $ac_executable_extensions; do
!         if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
!           if test $ac_prog = install &&
!             grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
!             # AIX install.  It has an incompatible calling convention.
!             :
!           elif test $ac_prog = install &&
!             grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
!             # program-specific install script used by HP pwplus--don't use.
!             :
!           else
!             ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
!             break 3
!           fi
!         fi
        done
      done
      ;;
--- 2886,2905 ----
      # by default.
      for ac_prog in ginstall scoinst install; do
        for ac_exec_ext in '' $ac_executable_extensions; do
! 	if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
! 	  if test $ac_prog = install &&
! 	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
! 	    # AIX install.  It has an incompatible calling convention.
! 	    :
! 	  elif test $ac_prog = install &&
! 	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
! 	    # program-specific install script used by HP pwplus--don't use.
! 	    :
! 	  else
! 	    ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
! 	    break 3
! 	  fi
! 	fi
        done
      done
      ;;
*************** if eval "test \"\${$as_ac_Header+set}\" 
*** 2998,3004 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 3140,3145 ----
*************** return 0;
*** 3018,3028 ****
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>&5
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 3159,3179 ----
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
    ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 3035,3041 ****
  
  eval "$as_ac_Header=no"
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
  fi
  echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
  echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
--- 3186,3192 ----
  
  eval "$as_ac_Header=no"
  fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  fi
  echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
  echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
*************** else
*** 3058,3064 ****
    ac_func_search_save_LIBS=$LIBS
  ac_cv_search_opendir=no
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 3209,3214 ----
*************** opendir ();
*** 3082,3092 ****
  _ACEOF
  rm -f conftest.$ac_objext conftest$ac_exeext
  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
!   (eval $ac_link) 2>&5
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
!          { ac_try='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 3232,3252 ----
  _ACEOF
  rm -f conftest.$ac_objext conftest$ac_exeext
  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
!   (eval $ac_link) 2>conftest.er1
    ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
*************** else
*** 3098,3109 ****
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  if test "$ac_cv_search_opendir" = no; then
    for ac_lib in dir; do
      LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
      cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 3258,3269 ----
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
  if test "$ac_cv_search_opendir" = no; then
    for ac_lib in dir; do
      LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
      cat >conftest.$ac_ext <<_ACEOF
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
*************** opendir ();
*** 3127,3137 ****
  _ACEOF
  rm -f conftest.$ac_objext conftest$ac_exeext
  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
!   (eval $ac_link) 2>&5
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
!          { ac_try='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 3287,3307 ----
  _ACEOF
  rm -f conftest.$ac_objext conftest$ac_exeext
  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
!   (eval $ac_link) 2>conftest.er1
    ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
*************** else
*** 3144,3150 ****
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
    done
  fi
  LIBS=$ac_func_search_save_LIBS
--- 3314,3321 ----
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
    done
  fi
  LIBS=$ac_func_search_save_LIBS
*************** else
*** 3165,3171 ****
    ac_func_search_save_LIBS=$LIBS
  ac_cv_search_opendir=no
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 3336,3341 ----
*************** opendir ();
*** 3189,3199 ****
  _ACEOF
  rm -f conftest.$ac_objext conftest$ac_exeext
  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
!   (eval $ac_link) 2>&5
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
!          { ac_try='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 3359,3379 ----
  _ACEOF
  rm -f conftest.$ac_objext conftest$ac_exeext
  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
!   (eval $ac_link) 2>conftest.er1
    ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
*************** else
*** 3205,3216 ****
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  if test "$ac_cv_search_opendir" = no; then
    for ac_lib in x; do
      LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
      cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 3385,3396 ----
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
  if test "$ac_cv_search_opendir" = no; then
    for ac_lib in x; do
      LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
      cat >conftest.$ac_ext <<_ACEOF
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
*************** opendir ();
*** 3234,3244 ****
  _ACEOF
  rm -f conftest.$ac_objext conftest$ac_exeext
  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
!   (eval $ac_link) 2>&5
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
!          { ac_try='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 3414,3434 ----
  _ACEOF
  rm -f conftest.$ac_objext conftest$ac_exeext
  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
!   (eval $ac_link) 2>conftest.er1
    ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
*************** else
*** 3251,3257 ****
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
    done
  fi
  LIBS=$ac_func_search_save_LIBS
--- 3441,3448 ----
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
    done
  fi
  LIBS=$ac_func_search_save_LIBS
*************** do
*** 3293,3299 ****
    # On the NeXT, cc -E runs the code through the compiler's parser,
    # not just through cpp. "Syntax error" is here to catch this case.
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 3484,3489 ----
*************** cat >>conftest.$ac_ext <<_ACEOF
*** 3304,3310 ****
  #else
  # include <assert.h>
  #endif
!                      Syntax error
  _ACEOF
  if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
    (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
--- 3494,3500 ----
  #else
  # include <assert.h>
  #endif
! 		     Syntax error
  _ACEOF
  if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
    (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
*************** if { (eval echo "$as_me:$LINENO: \"$ac_c
*** 3316,3321 ****
--- 3506,3512 ----
    (exit $ac_status); } >/dev/null; then
    if test -s conftest.err; then
      ac_cpp_err=$ac_c_preproc_warn_flag
+     ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
    else
      ac_cpp_err=
    fi
*************** rm -f conftest.err conftest.$ac_ext
*** 3336,3342 ****
    # OK, works on sane cases.  Now check whether non-existent headers
    # can be detected and how.
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 3527,3532 ----
*************** if { (eval echo "$as_me:$LINENO: \"$ac_c
*** 3354,3359 ****
--- 3544,3550 ----
    (exit $ac_status); } >/dev/null; then
    if test -s conftest.err; then
      ac_cpp_err=$ac_c_preproc_warn_flag
+     ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
    else
      ac_cpp_err=
    fi
*************** do
*** 3400,3406 ****
    # On the NeXT, cc -E runs the code through the compiler's parser,
    # not just through cpp. "Syntax error" is here to catch this case.
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 3591,3596 ----
*************** cat >>conftest.$ac_ext <<_ACEOF
*** 3411,3417 ****
  #else
  # include <assert.h>
  #endif
!                      Syntax error
  _ACEOF
  if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
    (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
--- 3601,3607 ----
  #else
  # include <assert.h>
  #endif
! 		     Syntax error
  _ACEOF
  if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
    (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
*************** if { (eval echo "$as_me:$LINENO: \"$ac_c
*** 3423,3428 ****
--- 3613,3619 ----
    (exit $ac_status); } >/dev/null; then
    if test -s conftest.err; then
      ac_cpp_err=$ac_c_preproc_warn_flag
+     ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
    else
      ac_cpp_err=
    fi
*************** rm -f conftest.err conftest.$ac_ext
*** 3443,3449 ****
    # OK, works on sane cases.  Now check whether non-existent headers
    # can be detected and how.
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 3634,3639 ----
*************** if { (eval echo "$as_me:$LINENO: \"$ac_c
*** 3461,3466 ****
--- 3651,3657 ----
    (exit $ac_status); } >/dev/null; then
    if test -s conftest.err; then
      ac_cpp_err=$ac_c_preproc_warn_flag
+     ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
    else
      ac_cpp_err=
    fi
*************** if test "${ac_cv_header_stdc+set}" = set
*** 3521,3527 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 3712,3717 ----
*************** main ()
*** 3542,3552 ****
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>&5
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 3732,3752 ----
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
    ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 3559,3570 ****
  
  ac_cv_header_stdc=no
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
  
  if test $ac_cv_header_stdc = yes; then
    # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 3759,3769 ----
  
  ac_cv_header_stdc=no
  fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  
  if test $ac_cv_header_stdc = yes; then
    # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
    cat >conftest.$ac_ext <<_ACEOF
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
*************** fi
*** 3586,3592 ****
  if test $ac_cv_header_stdc = yes; then
    # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 3785,3790 ----
*************** if test $ac_cv_header_stdc = yes; then
*** 3611,3617 ****
    :
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 3809,3814 ----
*************** cat >>conftest.$ac_ext <<_ACEOF
*** 3623,3631 ****
  # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
  #else
  # define ISLOWER(c) \
!                    (('a' <= (c) && (c) <= 'i') \
!                      || ('j' <= (c) && (c) <= 'r') \
!                      || ('s' <= (c) && (c) <= 'z'))
  # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
  #endif
  
--- 3820,3828 ----
  # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
  #else
  # define ISLOWER(c) \
! 		   (('a' <= (c) && (c) <= 'i') \
! 		     || ('j' <= (c) && (c) <= 'r') \
! 		     || ('s' <= (c) && (c) <= 'z'))
  # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
  #endif
  
*************** main ()
*** 3636,3642 ****
    int i;
    for (i = 0; i < 256; i++)
      if (XOR (islower (i), ISLOWER (i))
!         || toupper (i) != TOUPPER (i))
        exit(2);
    exit (0);
  }
--- 3833,3839 ----
    int i;
    for (i = 0; i < 256; i++)
      if (XOR (islower (i), ISLOWER (i))
! 	|| toupper (i) != TOUPPER (i))
        exit(2);
    exit (0);
  }
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 3661,3667 ****
  ( exit $ac_status )
  ac_cv_header_stdc=no
  fi
! rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
  fi
  fi
  fi
--- 3858,3864 ----
  ( exit $ac_status )
  ac_cv_header_stdc=no
  fi
! rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
  fi
  fi
  fi
*************** if test "${ac_cv_struct_tm+set}" = set; 
*** 3681,3687 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 3878,3883 ----
*************** struct tm *tp; tp->tm_sec;
*** 3700,3710 ****
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>&5
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 3896,3916 ----
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
    ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 3717,3723 ****
  
  ac_cv_struct_tm=sys/time.h
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
  fi
  echo "$as_me:$LINENO: result: $ac_cv_struct_tm" >&5
  echo "${ECHO_T}$ac_cv_struct_tm" >&6
--- 3923,3929 ----
  
  ac_cv_struct_tm=sys/time.h
  fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  fi
  echo "$as_me:$LINENO: result: $ac_cv_struct_tm" >&5
  echo "${ECHO_T}$ac_cv_struct_tm" >&6
*************** fi
*** 3740,3746 ****
  
  
  for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
!                   inttypes.h stdint.h unistd.h
  do
  as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
  echo "$as_me:$LINENO: checking for $ac_header" >&5
--- 3946,3952 ----
  
  
  for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
! 		  inttypes.h stdint.h unistd.h
  do
  as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
  echo "$as_me:$LINENO: checking for $ac_header" >&5
*************** if eval "test \"\${$as_ac_Header+set}\" 
*** 3749,3755 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 3955,3960 ----
*************** $ac_includes_default
*** 3761,3771 ****
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>&5
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 3966,3986 ----
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
    ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 3778,3784 ****
  
  eval "$as_ac_Header=no"
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
  fi
  echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
  echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
--- 3993,3999 ----
  
  eval "$as_ac_Header=no"
  fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  fi
  echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
  echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
*************** else
*** 3813,3819 ****
  echo "$as_me:$LINENO: checking $ac_header usability" >&5
  echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 4028,4033 ----
*************** $ac_includes_default
*** 3824,3834 ****
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>&5
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 4038,4058 ----
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
    ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 3841,3847 ****
  
  ac_header_compiler=no
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
  echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
  echo "${ECHO_T}$ac_header_compiler" >&6
  
--- 4065,4071 ----
  
  ac_header_compiler=no
  fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
  echo "${ECHO_T}$ac_header_compiler" >&6
  
*************** echo "${ECHO_T}$ac_header_compiler" >&6
*** 3849,3855 ****
  echo "$as_me:$LINENO: checking $ac_header presence" >&5
  echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 4073,4078 ----
*************** if { (eval echo "$as_me:$LINENO: \"$ac_c
*** 3867,3872 ****
--- 4090,4096 ----
    (exit $ac_status); } >/dev/null; then
    if test -s conftest.err; then
      ac_cpp_err=$ac_c_preproc_warn_flag
+     ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
    else
      ac_cpp_err=
    fi
*************** echo "$as_me:$LINENO: result: $ac_header
*** 3886,3918 ****
  echo "${ECHO_T}$ac_header_preproc" >&6
  
  # So?  What about this header?
! case $ac_header_compiler:$ac_header_preproc in
!   yes:no )
      { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
  echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
!     { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
! echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
!     (
!       cat <<\_ASBOX
! ## ------------------------------------ ##
! ## Report this to bug-autoconf@gnu.org. ##
! ## ------------------------------------ ##
! _ASBOX
!     ) |
!       sed "s/^/$as_me: WARNING:     /" >&2
      ;;
!   no:yes )
      { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
  echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
!     { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
! echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
      { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
  echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
      (
        cat <<\_ASBOX
! ## ------------------------------------ ##
! ## Report this to bug-autoconf@gnu.org. ##
! ## ------------------------------------ ##
  _ASBOX
      ) |
        sed "s/^/$as_me: WARNING:     /" >&2
--- 4110,4141 ----
  echo "${ECHO_T}$ac_header_preproc" >&6
  
  # So?  What about this header?
! case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
!   yes:no: )
      { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
  echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
!     { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
! echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
!     ac_header_preproc=yes
      ;;
!   no:yes:* )
      { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
  echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
!     { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
! echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
!     { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
! echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
!     { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
! echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
      { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
  echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+ echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
      (
        cat <<\_ASBOX
! ## ------------------------------------------ ##
! ## Report this to the AC_PACKAGE_NAME lists.  ##
! ## ------------------------------------------ ##
  _ASBOX
      ) |
        sed "s/^/$as_me: WARNING:     /" >&2
*************** echo $ECHO_N "checking for $ac_header...
*** 3923,3929 ****
  if eval "test \"\${$as_ac_Header+set}\" = set"; then
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   eval "$as_ac_Header=$ac_header_preproc"
  fi
  echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
  echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
--- 4146,4152 ----
  if eval "test \"\${$as_ac_Header+set}\" = set"; then
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   eval "$as_ac_Header=\$ac_header_preproc"
  fi
  echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
  echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
*************** fi
*** 3939,3951 ****
  done
  
  
  echo "$as_me:$LINENO: checking for off_t" >&5
  echo $ECHO_N "checking for off_t... $ECHO_C" >&6
  if test "${ac_cv_type_off_t+set}" = set; then
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 4162,4277 ----
  done
  
  
+ 
+ 
+ for ac_func in ftruncate _chsize
+ do
+ as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ echo "$as_me:$LINENO: checking for $ac_func" >&5
+ echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+ if eval "test \"\${$as_ac_var+set}\" = set"; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ /* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+    For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+ #define $ac_func innocuous_$ac_func
+ 
+ /* System header to define __stub macros and hopefully few prototypes,
+     which can conflict with char $ac_func (); below.
+     Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+     <limits.h> exists even on freestanding compilers.  */
+ 
+ #ifdef __STDC__
+ # include <limits.h>
+ #else
+ # include <assert.h>
+ #endif
+ 
+ #undef $ac_func
+ 
+ /* Override any gcc2 internal prototype to avoid an error.  */
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ /* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+ char $ac_func ();
+ /* The GNU C library defines this for functions which it implements
+     to always fail with ENOSYS.  Some functions are actually named
+     something starting with __ and the normal name is an alias.  */
+ #if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+ choke me
+ #else
+ char (*f) () = $ac_func;
+ #endif
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ int
+ main ()
+ {
+ return f != $ac_func;
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+   (eval $ac_link) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest$ac_exeext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   eval "$as_ac_var=yes"
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ eval "$as_ac_var=no"
+ fi
+ rm -f conftest.err conftest.$ac_objext \
+       conftest$ac_exeext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+ echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+ if test `eval echo '${'$as_ac_var'}'` = yes; then
+   cat >>confdefs.h <<_ACEOF
+ #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+ _ACEOF
+ 
+ fi
+ done
+ 
+ 
  echo "$as_me:$LINENO: checking for off_t" >&5
  echo $ECHO_N "checking for off_t... $ECHO_C" >&6
  if test "${ac_cv_type_off_t+set}" = set; then
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
*************** if (sizeof (off_t))
*** 3965,3975 ****
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>&5
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 4291,4311 ----
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
    ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 3982,3988 ****
  
  ac_cv_type_off_t=no
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
  fi
  echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5
  echo "${ECHO_T}$ac_cv_type_off_t" >&6
--- 4318,4324 ----
  
  ac_cv_type_off_t=no
  fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  fi
  echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5
  echo "${ECHO_T}$ac_cv_type_off_t" >&6
*************** if test "${ac_cv_struct_tm+set}" = set; 
*** 4002,4008 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 4338,4343 ----
*************** struct tm *tp; tp->tm_sec;
*** 4021,4031 ****
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>&5
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 4356,4376 ----
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
    ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 4038,4044 ****
  
  ac_cv_struct_tm=sys/time.h
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
  fi
  echo "$as_me:$LINENO: result: $ac_cv_struct_tm" >&5
  echo "${ECHO_T}$ac_cv_struct_tm" >&6
--- 4383,4389 ----
  
  ac_cv_struct_tm=sys/time.h
  fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  fi
  echo "$as_me:$LINENO: result: $ac_cv_struct_tm" >&5
  echo "${ECHO_T}$ac_cv_struct_tm" >&6
*************** if test "${gcc_cv_mkdir_takes_one_arg+se
*** 4058,4064 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 4403,4408 ----
*************** mkdir ("foo", 0);
*** 4085,4095 ****
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>&5
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 4429,4449 ----
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
    ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 4102,4108 ****
  
  gcc_cv_mkdir_takes_one_arg=yes
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
  fi
  echo "$as_me:$LINENO: result: $gcc_cv_mkdir_takes_one_arg" >&5
  echo "${ECHO_T}$gcc_cv_mkdir_takes_one_arg" >&6
--- 4456,4462 ----
  
  gcc_cv_mkdir_takes_one_arg=yes
  fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  fi
  echo "$as_me:$LINENO: result: $gcc_cv_mkdir_takes_one_arg" >&5
  echo "${ECHO_T}$gcc_cv_mkdir_takes_one_arg" >&6
*************** if test "${ac_cv_sizeof_char+set}" = set
*** 4122,4128 ****
  else
    for ac_size in 4 8 1 2 16 12  ; do # List sizes in rough order of prevalence.
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 4476,4481 ----
*************** switch (0) case 0: case (sizeof (char) =
*** 4142,4152 ****
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>&5
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 4495,4515 ----
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
    ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
*************** else
*** 4158,4164 ****
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
    if test x$ac_cv_sizeof_char != x ; then break; fi
  done
  
--- 4521,4527 ----
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
    if test x$ac_cv_sizeof_char != x ; then break; fi
  done
  
*************** if test "${ac_cv_sizeof_short+set}" = se
*** 4184,4190 ****
  else
    for ac_size in 4 8 1 2 16 12  ; do # List sizes in rough order of prevalence.
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 4547,4552 ----
*************** switch (0) case 0: case (sizeof (short) 
*** 4204,4214 ****
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>&5
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 4566,4586 ----
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
    ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
*************** else
*** 4220,4226 ****
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
    if test x$ac_cv_sizeof_short != x ; then break; fi
  done
  
--- 4592,4598 ----
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
    if test x$ac_cv_sizeof_short != x ; then break; fi
  done
  
*************** if test "${ac_cv_sizeof_int+set}" = set;
*** 4246,4252 ****
  else
    for ac_size in 4 8 1 2 16 12  ; do # List sizes in rough order of prevalence.
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 4618,4623 ----
*************** switch (0) case 0: case (sizeof (int) ==
*** 4266,4276 ****
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>&5
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 4637,4657 ----
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
    ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
*************** else
*** 4282,4288 ****
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
    if test x$ac_cv_sizeof_int != x ; then break; fi
  done
  
--- 4663,4669 ----
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
    if test x$ac_cv_sizeof_int != x ; then break; fi
  done
  
*************** if test "${ac_cv_sizeof_long+set}" = set
*** 4308,4314 ****
  else
    for ac_size in 4 8 1 2 16 12  ; do # List sizes in rough order of prevalence.
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 4689,4694 ----
*************** switch (0) case 0: case (sizeof (long) =
*** 4328,4338 ****
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>&5
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 4708,4728 ----
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
    ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
*************** else
*** 4344,4350 ****
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
    if test x$ac_cv_sizeof_long != x ; then break; fi
  done
  
--- 4734,4740 ----
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
    if test x$ac_cv_sizeof_long != x ; then break; fi
  done
  
*************** if test "${ac_cv_type_long_long+set}" = 
*** 4369,4375 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 4759,4764 ----
*************** if (sizeof (long long))
*** 4389,4399 ****
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>&5
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 4778,4798 ----
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
    ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 4406,4412 ****
  
  ac_cv_type_long_long=no
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
  fi
  echo "$as_me:$LINENO: result: $ac_cv_type_long_long" >&5
  echo "${ECHO_T}$ac_cv_type_long_long" >&6
--- 4805,4811 ----
  
  ac_cv_type_long_long=no
  fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  fi
  echo "$as_me:$LINENO: result: $ac_cv_type_long_long" >&5
  echo "${ECHO_T}$ac_cv_type_long_long" >&6
*************** if test "${ac_cv_sizeof_long_long+set}" 
*** 4423,4429 ****
  else
    for ac_size in 4 8 1 2 16 12  ; do # List sizes in rough order of prevalence.
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 4822,4827 ----
*************** switch (0) case 0: case (sizeof (long lo
*** 4443,4453 ****
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>&5
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 4841,4861 ----
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
    ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
*************** else
*** 4459,4465 ****
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
    if test x$ac_cv_sizeof_long_long != x ; then break; fi
  done
  
--- 4867,4873 ----
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
    if test x$ac_cv_sizeof_long_long != x ; then break; fi
  done
  
*************** else
*** 4489,4495 ****
    ac_cv_c_bigendian=unknown
  # See if sys/param.h defines the BYTE_ORDER macro.
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 4897,4902 ----
*************** main ()
*** 4510,4520 ****
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>&5
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 4917,4937 ----
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
    ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
*************** if { (eval echo "$as_me:$LINENO: \"$ac_c
*** 4522,4528 ****
    (exit $ac_status); }; }; then
    # It does; now see whether it defined to BIG_ENDIAN or not.
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 4939,4944 ----
*************** main ()
*** 4543,4553 ****
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>&5
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 4959,4979 ----
  _ACEOF
  rm -f conftest.$ac_objext
  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
!   (eval $ac_compile) 2>conftest.er1
    ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 4560,4578 ****
  
  ac_cv_c_bigendian=no
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
  else
    echo "$as_me: failed program was:" >&5
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
  if test $ac_cv_c_bigendian = unknown; then
  if test "$cross_compiling" = yes; then
     echo $ac_n "cross-compiling... " 2>&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 4986,5003 ----
  
  ac_cv_c_bigendian=no
  fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  else
    echo "$as_me: failed program was:" >&5
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  if test $ac_cv_c_bigendian = unknown; then
  if test "$cross_compiling" = yes; then
     echo $ac_n "cross-compiling... " 2>&6
  else
    cat >conftest.$ac_ext <<_ACEOF
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 4609,4615 ****
  ( exit $ac_status )
  ac_cv_c_bigendian=yes
  fi
! rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
  fi
  fi
  fi
--- 5034,5040 ----
  ( exit $ac_status )
  ac_cv_c_bigendian=yes
  fi
! rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
  fi
  fi
  fi
*************** else
*** 4695,4701 ****
    ac_check_lib_save_LIBS=$LIBS
  LIBS="-lz  $LIBS"
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 5120,5125 ----
*************** deflate ();
*** 4719,4729 ****
  _ACEOF
  rm -f conftest.$ac_objext conftest$ac_exeext
  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
!   (eval $ac_link) 2>&5
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
!          { ac_try='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 5143,5163 ----
  _ACEOF
  rm -f conftest.$ac_objext conftest$ac_exeext
  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
!   (eval $ac_link) 2>conftest.er1
    ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } &&
! 	 { ac_try='test -z "$ac_c_werror_flag"
! 			 || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
! 	 { ac_try='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 4736,4742 ****
  
  ac_cv_lib_z_deflate=no
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  LIBS=$ac_check_lib_save_LIBS
  fi
  echo "$as_me:$LINENO: result: $ac_cv_lib_z_deflate" >&5
--- 5170,5177 ----
  
  ac_cv_lib_z_deflate=no
  fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
  LIBS=$ac_check_lib_save_LIBS
  fi
  echo "$as_me:$LINENO: result: $ac_cv_lib_z_deflate" >&5
*************** else
*** 4791,4806 ****
  fi
  
  
! # Get the version trigger filename from the toplevel
  if test "${with_gcc_version_trigger+set}" = set; then
!    gcc_version_trigger=$with_gcc_version_trigger
  else
!    gcc_version_trigger=${srcdir}/version.c
  fi
- gcc_version_full=`grep version_string ${gcc_version_trigger} | sed -e 's/.*"\([^"]*\)".*/\1/'`
  gcc_version=`echo ${gcc_version_full} | sed -e 's/\([^ ]*\) .*/\1/'`
  
  
                      ac_config_files="$ac_config_files Makefile install-defs.sh"
  cat >confcache <<\_ACEOF
  # This file is a shell script that caches the results of configure
--- 5226,5248 ----
  fi
  
  
! 
  if test "${with_gcc_version_trigger+set}" = set; then
!   gcc_version_trigger=$with_gcc_version_trigger
  else
!   gcc_version_trigger=$srcdir/../gcc/version.c
! fi
! if test -f "${gcc_version_trigger}"; then
!   gcc_version_full=`grep version_string "${gcc_version_trigger}" | sed -e 's/.*"\([^"]*\)".*/\1/'`
! else
!   gcc_version_full=`$CC -v 2>&1 | sed -n 's/^gcc version //p'`
  fi
  gcc_version=`echo ${gcc_version_full} | sed -e 's/\([^ ]*\) .*/\1/'`
  
  
+ 
+ 
+ 
                      ac_config_files="$ac_config_files Makefile install-defs.sh"
  cat >confcache <<\_ACEOF
  # This file is a shell script that caches the results of configure
*************** _ACEOF
*** 4830,4842 ****
        # `set' does not quote correctly, so add quotes (double-quote
        # substitution turns \\\\ into \\, and sed turns \\ into \).
        sed -n \
!         "s/'/'\\\\''/g;
!     	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
        ;;
      *)
        # `set' quotes correctly as required by POSIX, so do not add quotes.
        sed -n \
!         "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
        ;;
      esac;
  } |
--- 5272,5284 ----
        # `set' does not quote correctly, so add quotes (double-quote
        # substitution turns \\\\ into \\, and sed turns \\ into \).
        sed -n \
! 	"s/'/'\\\\''/g;
! 	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
        ;;
      *)
        # `set' quotes correctly as required by POSIX, so do not add quotes.
        sed -n \
! 	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
        ;;
      esac;
  } |
*************** test "x$exec_prefix" = xNONE && exec_pre
*** 4866,4878 ****
  # trailing colons and then remove the whole line if VPATH becomes empty
  # (actually we leave an empty line to preserve line numbers).
  if test "x$srcdir" = x.; then
!   ac_vpsub='/^[ 	]*VPATH[ 	]*=/{
  s/:*\$(srcdir):*/:/;
  s/:*\${srcdir}:*/:/;
  s/:*@srcdir@:*/:/;
! s/^\([^=]*=[ 	]*\):*/\1/;
  s/:*$//;
! s/^[^=]*=[ 	]*$//;
  }'
  fi
  
--- 5308,5320 ----
  # trailing colons and then remove the whole line if VPATH becomes empty
  # (actually we leave an empty line to preserve line numbers).
  if test "x$srcdir" = x.; then
!   ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
  s/:*\$(srcdir):*/:/;
  s/:*\${srcdir}:*/:/;
  s/:*@srcdir@:*/:/;
! s/^\([^=]*=[	 ]*\):*/\1/;
  s/:*$//;
! s/^[^=]*=[	 ]*$//;
  }'
  fi
  
*************** ac_ltlibobjs=
*** 4883,4889 ****
  for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
    # 1. Remove the extension, and $U if already installed.
    ac_i=`echo "$ac_i" |
!          sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
    # 2. Add them.
    ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
    ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
--- 5325,5331 ----
  for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
    # 1. Remove the extension, and $U if already installed.
    ac_i=`echo "$ac_i" |
! 	 sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
    # 2. Add them.
    ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
    ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
*************** if test -n "${ZSH_VERSION+set}" && (emul
*** 4955,4963 ****
  elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
    set -o posix
  fi
  
  # Support unset when possible.
! if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
    as_unset=unset
  else
    as_unset=false
--- 5397,5406 ----
  elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
    set -o posix
  fi
+ DUALCASE=1; export DUALCASE # for MKS sh
  
  # Support unset when possible.
! if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
    as_unset=unset
  else
    as_unset=false
*************** for as_var in \
*** 4976,4982 ****
    LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
    LC_TELEPHONE LC_TIME
  do
!   if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then
      eval $as_var=C; export $as_var
    else
      $as_unset $as_var
--- 5419,5425 ----
    LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
    LC_TELEPHONE LC_TIME
  do
!   if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
      eval $as_var=C; export $as_var
    else
      $as_unset $as_var
*************** rm -f conf$$ conf$$.exe conf$$.file
*** 5155,5170 ****
  if mkdir -p . 2>/dev/null; then
    as_mkdir_p=:
  else
    as_mkdir_p=false
  fi
  
  as_executable_p="test -f"
  
  # Sed expression to map a string onto a valid CPP name.
! as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g"
  
  # Sed expression to map a string onto a valid variable name.
! as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
  
  
  # IFS
--- 5598,5614 ----
  if mkdir -p . 2>/dev/null; then
    as_mkdir_p=:
  else
+   test -d ./-p && rmdir ./-p
    as_mkdir_p=false
  fi
  
  as_executable_p="test -f"
  
  # Sed expression to map a string onto a valid CPP name.
! as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
  
  # Sed expression to map a string onto a valid variable name.
! as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
  
  
  # IFS
*************** _ASBOX
*** 5191,5197 ****
  cat >&5 <<_CSEOF
  
  This file was extended by $as_me, which was
! generated by GNU Autoconf 2.57.  Invocation command line was
  
    CONFIG_FILES    = $CONFIG_FILES
    CONFIG_HEADERS  = $CONFIG_HEADERS
--- 5635,5641 ----
  cat >&5 <<_CSEOF
  
  This file was extended by $as_me, which was
! generated by GNU Autoconf 2.59.  Invocation command line was
  
    CONFIG_FILES    = $CONFIG_FILES
    CONFIG_HEADERS  = $CONFIG_HEADERS
*************** Usage: $0 [OPTIONS] [FILE]...
*** 5235,5243 ****
    -d, --debug      don't remove temporary files
        --recheck    update $as_me by reconfiguring in the same conditions
    --file=FILE[:TEMPLATE]
!                    instantiate the configuration file FILE
    --header=FILE[:TEMPLATE]
!                    instantiate the configuration header FILE
  
  Configuration files:
  $config_files
--- 5679,5687 ----
    -d, --debug      don't remove temporary files
        --recheck    update $as_me by reconfiguring in the same conditions
    --file=FILE[:TEMPLATE]
! 		   instantiate the configuration file FILE
    --header=FILE[:TEMPLATE]
! 		   instantiate the configuration header FILE
  
  Configuration files:
  $config_files
*************** _ACEOF
*** 5254,5264 ****
  cat >>$CONFIG_STATUS <<_ACEOF
  ac_cs_version="\\
  config.status
! configured by $0, generated by GNU Autoconf 2.57,
    with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
  
! Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
! Free Software Foundation, Inc.
  This config.status script is free software; the Free Software Foundation
  gives unlimited permission to copy, distribute and modify it."
  srcdir=$srcdir
--- 5698,5707 ----
  cat >>$CONFIG_STATUS <<_ACEOF
  ac_cs_version="\\
  config.status
! configured by $0, generated by GNU Autoconf 2.59,
    with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
  
! Copyright (C) 2003 Free Software Foundation, Inc.
  This config.status script is free software; the Free Software Foundation
  gives unlimited permission to copy, distribute and modify it."
  srcdir=$srcdir
*************** s,@AUTOCONF@,$AUTOCONF,;t t
*** 5464,5477 ****
  s,@AUTOMAKE@,$AUTOMAKE,;t t
  s,@AUTOHEADER@,$AUTOHEADER,;t t
  s,@MAKEINFO@,$MAKEINFO,;t t
- s,@AMTAR@,$AMTAR,;t t
  s,@install_sh@,$install_sh,;t t
  s,@STRIP@,$STRIP,;t t
  s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t
  s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t
  s,@AWK@,$AWK,;t t
  s,@SET_MAKE@,$SET_MAKE,;t t
  s,@am__leading_dot@,$am__leading_dot,;t t
  s,@CC@,$CC,;t t
  s,@CFLAGS@,$CFLAGS,;t t
  s,@LDFLAGS@,$LDFLAGS,;t t
--- 5907,5923 ----
  s,@AUTOMAKE@,$AUTOMAKE,;t t
  s,@AUTOHEADER@,$AUTOHEADER,;t t
  s,@MAKEINFO@,$MAKEINFO,;t t
  s,@install_sh@,$install_sh,;t t
  s,@STRIP@,$STRIP,;t t
  s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t
  s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t
+ s,@mkdir_p@,$mkdir_p,;t t
  s,@AWK@,$AWK,;t t
  s,@SET_MAKE@,$SET_MAKE,;t t
  s,@am__leading_dot@,$am__leading_dot,;t t
+ s,@AMTAR@,$AMTAR,;t t
+ s,@am__tar@,$am__tar,;t t
+ s,@am__untar@,$am__untar,;t t
  s,@CC@,$CC,;t t
  s,@CFLAGS@,$CFLAGS,;t t
  s,@LDFLAGS@,$LDFLAGS,;t t
*************** s,@ZDEPS@,$ZDEPS,;t t
*** 5502,5507 ****
--- 5948,5955 ----
  s,@ZINCS@,$ZINCS,;t t
  s,@GENINSRC_TRUE@,$GENINSRC_TRUE,;t t
  s,@GENINSRC_FALSE@,$GENINSRC_FALSE,;t t
+ s,@gcc_version_trigger@,$gcc_version_trigger,;t t
+ s,@gcc_version_full@,$gcc_version_full,;t t
  s,@gcc_version@,$gcc_version,;t t
  s,@LIBOBJS@,$LIBOBJS,;t t
  s,@LTLIBOBJS@,$LTLIBOBJS,;t t
*************** _ACEOF
*** 5534,5542 ****
        (echo ':t
    /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
        if test -z "$ac_sed_cmds"; then
!   	ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
        else
!   	ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
        fi
        ac_sed_frag=`expr $ac_sed_frag + 1`
        ac_beg=$ac_end
--- 5982,5990 ----
        (echo ':t
    /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
        if test -z "$ac_sed_cmds"; then
! 	ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
        else
! 	ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
        fi
        ac_sed_frag=`expr $ac_sed_frag + 1`
        ac_beg=$ac_end
*************** for ac_file in : $CONFIG_FILES; do test 
*** 5554,5574 ****
    # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
    case $ac_file in
    - | *:- | *:-:* ) # input from stdin
!         cat >$tmp/stdin
!         ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
!         ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
    *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
!         ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
    * )   ac_file_in=$ac_file.in ;;
    esac
  
    # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
    ac_dir=`(dirname "$ac_file") 2>/dev/null ||
  $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
!          X"$ac_file" : 'X\(//\)[^/]' \| \
!          X"$ac_file" : 'X\(//\)$' \| \
!          X"$ac_file" : 'X\(/\)' \| \
!          .     : '\(.\)' 2>/dev/null ||
  echo X"$ac_file" |
      sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
    	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
--- 6002,6022 ----
    # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
    case $ac_file in
    - | *:- | *:-:* ) # input from stdin
! 	cat >$tmp/stdin
! 	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
! 	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
    *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
! 	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
    * )   ac_file_in=$ac_file.in ;;
    esac
  
    # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
    ac_dir=`(dirname "$ac_file") 2>/dev/null ||
  $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
! 	 X"$ac_file" : 'X\(//\)[^/]' \| \
! 	 X"$ac_file" : 'X\(//\)$' \| \
! 	 X"$ac_file" : 'X\(/\)' \| \
! 	 .     : '\(.\)' 2>/dev/null ||
  echo X"$ac_file" |
      sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
    	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
*************** echo X"$ac_file" |
*** 5584,5593 ****
        as_dirs="$as_dir $as_dirs"
        as_dir=`(dirname "$as_dir") 2>/dev/null ||
  $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
!          X"$as_dir" : 'X\(//\)[^/]' \| \
!          X"$as_dir" : 'X\(//\)$' \| \
!          X"$as_dir" : 'X\(/\)' \| \
!          .     : '\(.\)' 2>/dev/null ||
  echo X"$as_dir" |
      sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
    	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
--- 6032,6041 ----
        as_dirs="$as_dir $as_dirs"
        as_dir=`(dirname "$as_dir") 2>/dev/null ||
  $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
! 	 X"$as_dir" : 'X\(//\)[^/]' \| \
! 	 X"$as_dir" : 'X\(//\)$' \| \
! 	 X"$as_dir" : 'X\(/\)' \| \
! 	 .     : '\(.\)' 2>/dev/null ||
  echo X"$as_dir" |
      sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
    	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
*************** case $srcdir in
*** 5625,5636 ****
      ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
      ac_top_srcdir=$ac_top_builddir$srcdir ;;
  esac
! # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
! # absolute.
! ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
! ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd`
! ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
! ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
  
  
    case $INSTALL in
--- 6073,6117 ----
      ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
      ac_top_srcdir=$ac_top_builddir$srcdir ;;
  esac
! 
! # Do not use `cd foo && pwd` to compute absolute paths, because
! # the directories may not exist.
! case `pwd` in
! .) ac_abs_builddir="$ac_dir";;
! *)
!   case "$ac_dir" in
!   .) ac_abs_builddir=`pwd`;;
!   [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
!   *) ac_abs_builddir=`pwd`/"$ac_dir";;
!   esac;;
! esac
! case $ac_abs_builddir in
! .) ac_abs_top_builddir=${ac_top_builddir}.;;
! *)
!   case ${ac_top_builddir}. in
!   .) ac_abs_top_builddir=$ac_abs_builddir;;
!   [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
!   *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
!   esac;;
! esac
! case $ac_abs_builddir in
! .) ac_abs_srcdir=$ac_srcdir;;
! *)
!   case $ac_srcdir in
!   .) ac_abs_srcdir=$ac_abs_builddir;;
!   [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
!   *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
!   esac;;
! esac
! case $ac_abs_builddir in
! .) ac_abs_top_srcdir=$ac_top_srcdir;;
! *)
!   case $ac_top_srcdir in
!   .) ac_abs_top_srcdir=$ac_abs_builddir;;
!   [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
!   *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
!   esac;;
! esac
  
  
    case $INSTALL in
*************** echo "$as_me: creating $ac_file" >&6;}
*** 5652,5658 ****
      configure_input="$ac_file.  "
    fi
    configure_input=$configure_input"Generated from `echo $ac_file_in |
!                                      sed 's,.*/,,'` by configure."
  
    # First look for the input files in the build tree, otherwise in the
    # src tree.
--- 6133,6139 ----
      configure_input="$ac_file.  "
    fi
    configure_input=$configure_input"Generated from `echo $ac_file_in |
! 				     sed 's,.*/,,'` by configure."
  
    # First look for the input files in the build tree, otherwise in the
    # src tree.
*************** echo "$as_me: creating $ac_file" >&6;}
*** 5661,5684 ****
        case $f in
        -) echo $tmp/stdin ;;
        [\\/$]*)
!          # Absolute (can't be DOS-style, as IFS=:)
!          test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
  echo "$as_me: error: cannot find input file: $f" >&2;}
     { (exit 1); exit 1; }; }
!          echo $f;;
        *) # Relative
!          if test -f "$f"; then
!            # Build tree
!            echo $f
!          elif test -f "$srcdir/$f"; then
!            # Source tree
!            echo $srcdir/$f
!          else
!            # /dev/null tree
!            { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
  echo "$as_me: error: cannot find input file: $f" >&2;}
     { (exit 1); exit 1; }; }
!          fi;;
        esac
      done` || { (exit 1); exit 1; }
  _ACEOF
--- 6142,6165 ----
        case $f in
        -) echo $tmp/stdin ;;
        [\\/$]*)
! 	 # Absolute (can't be DOS-style, as IFS=:)
! 	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
  echo "$as_me: error: cannot find input file: $f" >&2;}
     { (exit 1); exit 1; }; }
! 	 echo "$f";;
        *) # Relative
! 	 if test -f "$f"; then
! 	   # Build tree
! 	   echo "$f"
! 	 elif test -f "$srcdir/$f"; then
! 	   # Source tree
! 	   echo "$srcdir/$f"
! 	 else
! 	   # /dev/null tree
! 	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
  echo "$as_me: error: cannot find input file: $f" >&2;}
     { (exit 1); exit 1; }; }
! 	 fi;;
        esac
      done` || { (exit 1); exit 1; }
  _ACEOF
*************** cat >>$CONFIG_STATUS <<\_ACEOF
*** 5720,5731 ****
  # NAME is the cpp macro being defined and VALUE is the value it is being given.
  #
  # ac_d sets the value in "#define NAME VALUE" lines.
! ac_dA='s,^\([ 	]*\)#\([ 	]*define[ 	][ 	]*\)'
! ac_dB='[ 	].*$,\1#\2'
  ac_dC=' '
  ac_dD=',;t'
  # ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
! ac_uA='s,^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
  ac_uB='$,\1#\2define\3'
  ac_uC=' '
  ac_uD=',;t'
--- 6201,6212 ----
  # NAME is the cpp macro being defined and VALUE is the value it is being given.
  #
  # ac_d sets the value in "#define NAME VALUE" lines.
! ac_dA='s,^\([	 ]*\)#\([	 ]*define[	 ][	 ]*\)'
! ac_dB='[	 ].*$,\1#\2'
  ac_dC=' '
  ac_dD=',;t'
  # ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
! ac_uA='s,^\([	 ]*\)#\([	 ]*\)undef\([	 ][	 ]*\)'
  ac_uB='$,\1#\2define\3'
  ac_uC=' '
  ac_uD=',;t'
*************** for ac_file in : $CONFIG_HEADERS; do tes
*** 5734,5744 ****
    # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
    case $ac_file in
    - | *:- | *:-:* ) # input from stdin
!         cat >$tmp/stdin
!         ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
!         ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
    *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
!         ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
    * )   ac_file_in=$ac_file.in ;;
    esac
  
--- 6215,6225 ----
    # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
    case $ac_file in
    - | *:- | *:-:* ) # input from stdin
! 	cat >$tmp/stdin
! 	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
! 	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
    *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
! 	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
    * )   ac_file_in=$ac_file.in ;;
    esac
  
*************** echo "$as_me: creating $ac_file" >&6;}
*** 5752,5779 ****
        case $f in
        -) echo $tmp/stdin ;;
        [\\/$]*)
!          # Absolute (can't be DOS-style, as IFS=:)
!          test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
  echo "$as_me: error: cannot find input file: $f" >&2;}
     { (exit 1); exit 1; }; }
!          echo $f;;
        *) # Relative
!          if test -f "$f"; then
!            # Build tree
!            echo $f
!          elif test -f "$srcdir/$f"; then
!            # Source tree
!            echo $srcdir/$f
!          else
!            # /dev/null tree
!            { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
  echo "$as_me: error: cannot find input file: $f" >&2;}
     { (exit 1); exit 1; }; }
!          fi;;
        esac
      done` || { (exit 1); exit 1; }
    # Remove the trailing spaces.
!   sed 's/[ 	]*$//' $ac_file_inputs >$tmp/in
  
  _ACEOF
  
--- 6233,6261 ----
        case $f in
        -) echo $tmp/stdin ;;
        [\\/$]*)
! 	 # Absolute (can't be DOS-style, as IFS=:)
! 	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
  echo "$as_me: error: cannot find input file: $f" >&2;}
     { (exit 1); exit 1; }; }
! 	 # Do quote $f, to prevent DOS paths from being IFS'd.
! 	 echo "$f";;
        *) # Relative
! 	 if test -f "$f"; then
! 	   # Build tree
! 	   echo "$f"
! 	 elif test -f "$srcdir/$f"; then
! 	   # Source tree
! 	   echo "$srcdir/$f"
! 	 else
! 	   # /dev/null tree
! 	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
  echo "$as_me: error: cannot find input file: $f" >&2;}
     { (exit 1); exit 1; }; }
! 	 fi;;
        esac
      done` || { (exit 1); exit 1; }
    # Remove the trailing spaces.
!   sed 's/[	 ]*$//' $ac_file_inputs >$tmp/in
  
  _ACEOF
  
*************** s/[\\&,]/\\&/g
*** 5796,5804 ****
  s,[\\$`],\\&,g
  t clear
  : clear
! s,^[ 	]*#[ 	]*define[ 	][ 	]*\([^ 	(][^ 	(]*\)\(([^)]*)\)[ 	]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
  t end
! s,^[ 	]*#[ 	]*define[ 	][ 	]*\([^ 	][^ 	]*\)[ 	]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
  : end
  _ACEOF
  # If some macros were called several times there might be several times
--- 6278,6286 ----
  s,[\\$`],\\&,g
  t clear
  : clear
! s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 (][^	 (]*\)\(([^)]*)\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
  t end
! s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 ][^	 ]*\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
  : end
  _ACEOF
  # If some macros were called several times there might be several times
*************** rm -f confdef2sed.sed
*** 5812,5824 ****
  # example, in the case of _POSIX_SOURCE, which is predefined and required
  # on some systems where configure will not decide to define it.
  cat >>conftest.undefs <<\_ACEOF
! s,^[ 	]*#[ 	]*undef[ 	][ 	]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
  _ACEOF
  
  # Break up conftest.defines because some shells have a limit on the size
  # of here documents, and old seds have small limits too (100 cmds).
  echo '  # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
! echo '  if grep "^[ 	]*#[ 	]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
  echo '  # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
  echo '  :' >>$CONFIG_STATUS
  rm -f conftest.tail
--- 6294,6306 ----
  # example, in the case of _POSIX_SOURCE, which is predefined and required
  # on some systems where configure will not decide to define it.
  cat >>conftest.undefs <<\_ACEOF
! s,^[	 ]*#[	 ]*undef[	 ][	 ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
  _ACEOF
  
  # Break up conftest.defines because some shells have a limit on the size
  # of here documents, and old seds have small limits too (100 cmds).
  echo '  # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
! echo '  if grep "^[	 ]*#[	 ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
  echo '  # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
  echo '  :' >>$CONFIG_STATUS
  rm -f conftest.tail
*************** do
*** 5827,5833 ****
    # Write a limited-size here document to $tmp/defines.sed.
    echo '  cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
    # Speed up: don't consider the non `#define' lines.
!   echo '/^[ 	]*#[ 	]*define/!b' >>$CONFIG_STATUS
    # Work around the forget-to-reset-the-flag bug.
    echo 't clr' >>$CONFIG_STATUS
    echo ': clr' >>$CONFIG_STATUS
--- 6309,6315 ----
    # Write a limited-size here document to $tmp/defines.sed.
    echo '  cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
    # Speed up: don't consider the non `#define' lines.
!   echo '/^[	 ]*#[	 ]*define/!b' >>$CONFIG_STATUS
    # Work around the forget-to-reset-the-flag bug.
    echo 't clr' >>$CONFIG_STATUS
    echo ': clr' >>$CONFIG_STATUS
*************** do
*** 5854,5860 ****
    # Write a limited-size here document to $tmp/undefs.sed.
    echo '  cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
    # Speed up: don't consider the non `#undef'
!   echo '/^[ 	]*#[ 	]*undef/!b' >>$CONFIG_STATUS
    # Work around the forget-to-reset-the-flag bug.
    echo 't clr' >>$CONFIG_STATUS
    echo ': clr' >>$CONFIG_STATUS
--- 6336,6342 ----
    # Write a limited-size here document to $tmp/undefs.sed.
    echo '  cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
    # Speed up: don't consider the non `#undef'
!   echo '/^[	 ]*#[	 ]*undef/!b' >>$CONFIG_STATUS
    # Work around the forget-to-reset-the-flag bug.
    echo 't clr' >>$CONFIG_STATUS
    echo ': clr' >>$CONFIG_STATUS
*************** echo "$as_me: $ac_file is unchanged" >&6
*** 5888,5897 ****
      else
        ac_dir=`(dirname "$ac_file") 2>/dev/null ||
  $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
!          X"$ac_file" : 'X\(//\)[^/]' \| \
!          X"$ac_file" : 'X\(//\)$' \| \
!          X"$ac_file" : 'X\(/\)' \| \
!          .     : '\(.\)' 2>/dev/null ||
  echo X"$ac_file" |
      sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
    	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
--- 6370,6379 ----
      else
        ac_dir=`(dirname "$ac_file") 2>/dev/null ||
  $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
! 	 X"$ac_file" : 'X\(//\)[^/]' \| \
! 	 X"$ac_file" : 'X\(//\)$' \| \
! 	 X"$ac_file" : 'X\(/\)' \| \
! 	 .     : '\(.\)' 2>/dev/null ||
  echo X"$ac_file" |
      sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
    	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
*************** echo X"$ac_file" |
*** 5907,5916 ****
        as_dirs="$as_dir $as_dirs"
        as_dir=`(dirname "$as_dir") 2>/dev/null ||
  $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
!          X"$as_dir" : 'X\(//\)[^/]' \| \
!          X"$as_dir" : 'X\(//\)$' \| \
!          X"$as_dir" : 'X\(/\)' \| \
!          .     : '\(.\)' 2>/dev/null ||
  echo X"$as_dir" |
      sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
    	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
--- 6389,6398 ----
        as_dirs="$as_dir $as_dirs"
        as_dir=`(dirname "$as_dir") 2>/dev/null ||
  $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
! 	 X"$as_dir" : 'X\(//\)[^/]' \| \
! 	 X"$as_dir" : 'X\(//\)$' \| \
! 	 X"$as_dir" : 'X\(/\)' \| \
! 	 .     : '\(.\)' 2>/dev/null ||
  echo X"$as_dir" |
      sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
    	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
*************** for _am_header in $config_headers :; do
*** 5942,5951 ****
  done
  echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null ||
  $as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
!          X$ac_file : 'X\(//\)[^/]' \| \
!          X$ac_file : 'X\(//\)$' \| \
!          X$ac_file : 'X\(/\)' \| \
!          .     : '\(.\)' 2>/dev/null ||
  echo X$ac_file |
      sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
    	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
--- 6424,6433 ----
  done
  echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null ||
  $as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
! 	 X$ac_file : 'X\(//\)[^/]' \| \
! 	 X$ac_file : 'X\(//\)$' \| \
! 	 X$ac_file : 'X\(/\)' \| \
! 	 .     : '\(.\)' 2>/dev/null ||
  echo X$ac_file |
      sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
    	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
*************** for ac_file in : $CONFIG_COMMANDS; do te
*** 5964,5979 ****
    ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
    ac_dir=`(dirname "$ac_dest") 2>/dev/null ||
  $as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
!          X"$ac_dest" : 'X\(//\)[^/]' \| \
!          X"$ac_dest" : 'X\(//\)$' \| \
!          X"$ac_dest" : 'X\(/\)' \| \
!          .     : '\(.\)' 2>/dev/null ||
  echo X"$ac_dest" |
      sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
    	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
    	  /^X\(\/\/\)$/{ s//\1/; q; }
    	  /^X\(\/\).*/{ s//\1/; q; }
    	  s/.*/./; q'`
    ac_builddir=.
  
  if test "$ac_dir" != .; then
--- 6446,6486 ----
    ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
    ac_dir=`(dirname "$ac_dest") 2>/dev/null ||
  $as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
! 	 X"$ac_dest" : 'X\(//\)[^/]' \| \
! 	 X"$ac_dest" : 'X\(//\)$' \| \
! 	 X"$ac_dest" : 'X\(/\)' \| \
! 	 .     : '\(.\)' 2>/dev/null ||
  echo X"$ac_dest" |
      sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
    	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
    	  /^X\(\/\/\)$/{ s//\1/; q; }
    	  /^X\(\/\).*/{ s//\1/; q; }
    	  s/.*/./; q'`
+   { if $as_mkdir_p; then
+     mkdir -p "$ac_dir"
+   else
+     as_dir="$ac_dir"
+     as_dirs=
+     while test ! -d "$as_dir"; do
+       as_dirs="$as_dir $as_dirs"
+       as_dir=`(dirname "$as_dir") 2>/dev/null ||
+ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ 	 X"$as_dir" : 'X\(//\)[^/]' \| \
+ 	 X"$as_dir" : 'X\(//\)$' \| \
+ 	 X"$as_dir" : 'X\(/\)' \| \
+ 	 .     : '\(.\)' 2>/dev/null ||
+ echo X"$as_dir" |
+     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+   	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+   	  /^X\(\/\/\)$/{ s//\1/; q; }
+   	  /^X\(\/\).*/{ s//\1/; q; }
+   	  s/.*/./; q'`
+     done
+     test ! -n "$as_dirs" || mkdir $as_dirs
+   fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+ echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+    { (exit 1); exit 1; }; }; }
+ 
    ac_builddir=.
  
  if test "$ac_dir" != .; then
*************** case $srcdir in
*** 5999,6010 ****
      ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
      ac_top_srcdir=$ac_top_builddir$srcdir ;;
  esac
! # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
! # absolute.
! ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
! ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd`
! ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
! ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
  
  
    { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
--- 6506,6550 ----
      ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
      ac_top_srcdir=$ac_top_builddir$srcdir ;;
  esac
! 
! # Do not use `cd foo && pwd` to compute absolute paths, because
! # the directories may not exist.
! case `pwd` in
! .) ac_abs_builddir="$ac_dir";;
! *)
!   case "$ac_dir" in
!   .) ac_abs_builddir=`pwd`;;
!   [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
!   *) ac_abs_builddir=`pwd`/"$ac_dir";;
!   esac;;
! esac
! case $ac_abs_builddir in
! .) ac_abs_top_builddir=${ac_top_builddir}.;;
! *)
!   case ${ac_top_builddir}. in
!   .) ac_abs_top_builddir=$ac_abs_builddir;;
!   [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
!   *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
!   esac;;
! esac
! case $ac_abs_builddir in
! .) ac_abs_srcdir=$ac_srcdir;;
! *)
!   case $ac_srcdir in
!   .) ac_abs_srcdir=$ac_abs_builddir;;
!   [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
!   *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
!   esac;;
! esac
! case $ac_abs_builddir in
! .) ac_abs_top_srcdir=$ac_top_srcdir;;
! *)
!   case $ac_top_srcdir in
!   .) ac_abs_top_srcdir=$ac_abs_builddir;;
!   [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
!   *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
!   esac;;
! esac
  
  
    { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
*************** echo "$as_me: executing $ac_dest command
*** 6022,6031 ****
    if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
      dirpart=`(dirname "$mf") 2>/dev/null ||
  $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
!          X"$mf" : 'X\(//\)[^/]' \| \
!          X"$mf" : 'X\(//\)$' \| \
!          X"$mf" : 'X\(/\)' \| \
!          .     : '\(.\)' 2>/dev/null ||
  echo X"$mf" |
      sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
    	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
--- 6562,6571 ----
    if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
      dirpart=`(dirname "$mf") 2>/dev/null ||
  $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
! 	 X"$mf" : 'X\(//\)[^/]' \| \
! 	 X"$mf" : 'X\(//\)$' \| \
! 	 X"$mf" : 'X\(/\)' \| \
! 	 .     : '\(.\)' 2>/dev/null ||
  echo X"$mf" |
      sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
    	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
*************** echo X"$mf" |
*** 6035,6070 ****
    else
      continue
    fi
!   grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue
!   # Extract the definition of DEP_FILES from the Makefile without
!   # running `make'.
!   DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"`
    test -z "$DEPDIR" && continue
    # When using ansi2knr, U may be empty or an underscore; expand it
!   U=`sed -n -e '/^U = / s///p' < "$mf"`
!   test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
!   # We invoke sed twice because it is the simplest approach to
!   # changing $(DEPDIR) to its actual value in the expansion.
!   for file in `sed -n -e '
!     /^DEP_FILES = .*\\\\$/ {
!       s/^DEP_FILES = //
!       :loop
! 	s/\\\\$//
! 	p
! 	n
! 	/\\\\$/ b loop
!       p
!     }
!     /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \
         sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
      # Make sure the directory exists.
      test -f "$dirpart/$file" && continue
      fdir=`(dirname "$file") 2>/dev/null ||
  $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
!          X"$file" : 'X\(//\)[^/]' \| \
!          X"$file" : 'X\(//\)$' \| \
!          X"$file" : 'X\(/\)' \| \
!          .     : '\(.\)' 2>/dev/null ||
  echo X"$file" |
      sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
    	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
--- 6575,6604 ----
    else
      continue
    fi
!   # Extract the definition of DEPDIR, am__include, and am__quote
!   # from the Makefile without running `make'.
!   DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
    test -z "$DEPDIR" && continue
+   am__include=`sed -n 's/^am__include = //p' < "$mf"`
+   test -z "am__include" && continue
+   am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
    # When using ansi2knr, U may be empty or an underscore; expand it
!   U=`sed -n 's/^U = //p' < "$mf"`
!   # Find all dependency output files, they are included files with
!   # $(DEPDIR) in their names.  We invoke sed twice because it is the
!   # simplest approach to changing $(DEPDIR) to its actual value in the
!   # expansion.
!   for file in `sed -n "
!     s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
         sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
      # Make sure the directory exists.
      test -f "$dirpart/$file" && continue
      fdir=`(dirname "$file") 2>/dev/null ||
  $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
! 	 X"$file" : 'X\(//\)[^/]' \| \
! 	 X"$file" : 'X\(//\)$' \| \
! 	 X"$file" : 'X\(/\)' \| \
! 	 .     : '\(.\)' 2>/dev/null ||
  echo X"$file" |
      sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
    	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
*************** echo X"$file" |
*** 6080,6089 ****
        as_dirs="$as_dir $as_dirs"
        as_dir=`(dirname "$as_dir") 2>/dev/null ||
  $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
!          X"$as_dir" : 'X\(//\)[^/]' \| \
!          X"$as_dir" : 'X\(//\)$' \| \
!          X"$as_dir" : 'X\(/\)' \| \
!          .     : '\(.\)' 2>/dev/null ||
  echo X"$as_dir" |
      sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
    	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
--- 6614,6623 ----
        as_dirs="$as_dir $as_dirs"
        as_dir=`(dirname "$as_dir") 2>/dev/null ||
  $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
! 	 X"$as_dir" : 'X\(//\)[^/]' \| \
! 	 X"$as_dir" : 'X\(//\)$' \| \
! 	 X"$as_dir" : 'X\(/\)' \| \
! 	 .     : '\(.\)' 2>/dev/null ||
  echo X"$as_dir" |
      sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
    	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
diff -Nrcpad gcc-3.4.3/fastjar/configure.ac gcc-4.0.0/fastjar/configure.ac
*** gcc-3.4.3/fastjar/configure.ac	Wed Jul  7 03:16:28 2004
--- gcc-4.0.0/fastjar/configure.ac	Thu Dec  2 11:03:21 2004
***************
*** 1,5 ****
  dnl Process this file with autoconf to produce a configure script.
! AC_PREREQ(2.57)
  AC_INIT(jartool.h)
  AM_INIT_AUTOMAKE(fastjar, 0.92-gcc)
  AM_CONFIG_HEADER(config.h)
--- 1,5 ----
  dnl Process this file with autoconf to produce a configure script.
! AC_PREREQ(2.59)
  AC_INIT(jartool.h)
  AM_INIT_AUTOMAKE(fastjar, 0.92-gcc)
  AM_CONFIG_HEADER(config.h)
*************** AC_HEADER_STDC
*** 27,32 ****
--- 27,34 ----
  AC_STRUCT_TM
  AC_CHECK_HEADERS(fcntl.h unistd.h sys/param.h stdlib.h limits.h)
  
+ AC_CHECK_FUNCS(ftruncate _chsize)
+ 
  dnl Checks for typedefs, structures, and compiler characteristics.
  AC_TYPE_OFF_T
  AC_STRUCT_TM
*************** AC_MSG_CHECKING([whether to place genera
*** 87,102 ****
  AC_MSG_RESULT($generated_files_in_srcdir)
  AM_CONDITIONAL(GENINSRC, test x$generated_files_in_srcdir = xyes)
  
! # Get the version trigger filename from the toplevel
! if test "${with_gcc_version_trigger+set}" = set; then
!    gcc_version_trigger=$with_gcc_version_trigger
! else
!    gcc_version_trigger=${srcdir}/version.c
! fi
! changequote(,)dnl
! gcc_version_full=`grep version_string ${gcc_version_trigger} | sed -e 's/.*"\([^"]*\)".*/\1/'`
! gcc_version=`echo ${gcc_version_full} | sed -e 's/\([^ ]*\) .*/\1/'`
! changequote([,])dnl
! AC_SUBST(gcc_version)
  
  AC_OUTPUT(Makefile install-defs.sh)
--- 89,94 ----
  AC_MSG_RESULT($generated_files_in_srcdir)
  AM_CONDITIONAL(GENINSRC, test x$generated_files_in_srcdir = xyes)
  
! TL_AC_GCC_VERSION([$srcdir/..])
  
  AC_OUTPUT(Makefile install-defs.sh)
diff -Nrcpad gcc-3.4.3/fastjar/fastjar.1 gcc-4.0.0/fastjar/fastjar.1
*** gcc-3.4.3/fastjar/fastjar.1	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fastjar/fastjar.1	Thu Apr 21 07:33:11 2005
***************
*** 0 ****
--- 1,214 ----
+ .\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13
+ .\"
+ .\" Standard preamble:
+ .\" ========================================================================
+ .de Sh \" Subsection heading
+ .br
+ .if t .Sp
+ .ne 5
+ .PP
+ \fB\\$1\fR
+ .PP
+ ..
+ .de Sp \" Vertical space (when we can't use .PP)
+ .if t .sp .5v
+ .if n .sp
+ ..
+ .de Vb \" Begin verbatim text
+ .ft CW
+ .nf
+ .ne \\$1
+ ..
+ .de Ve \" End verbatim text
+ .ft R
+ .fi
+ ..
+ .\" Set up some character translations and predefined strings.  \*(-- will
+ .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+ .\" double quote, and \*(R" will give a right double quote.  | will give a
+ .\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used to
+ .\" do unbreakable dashes and therefore won't be available.  \*(C` and \*(C'
+ .\" expand to `' in nroff, nothing in troff, for use with C<>.
+ .tr \(*W-|\(bv\*(Tr
+ .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+ .ie n \{\
+ .    ds -- \(*W-
+ .    ds PI pi
+ .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+ .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+ .    ds L" ""
+ .    ds R" ""
+ .    ds C` ""
+ .    ds C' ""
+ 'br\}
+ .el\{\
+ .    ds -- \|\(em\|
+ .    ds PI \(*p
+ .    ds L" ``
+ .    ds R" ''
+ 'br\}
+ .\"
+ .\" If the F register is turned on, we'll generate index entries on stderr for
+ .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+ .\" entries marked with X<> in POD.  Of course, you'll have to process the
+ .\" output yourself in some meaningful fashion.
+ .if \nF \{\
+ .    de IX
+ .    tm Index:\\$1\t\\n%\t"\\$2"
+ ..
+ .    nr % 0
+ .    rr F
+ .\}
+ .\"
+ .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+ .\" way too many mistakes in technical documents.
+ .hy 0
+ .if n .na
+ .\"
+ .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+ .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+ .    \" fudge factors for nroff and troff
+ .if n \{\
+ .    ds #H 0
+ .    ds #V .8m
+ .    ds #F .3m
+ .    ds #[ \f1
+ .    ds #] \fP
+ .\}
+ .if t \{\
+ .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+ .    ds #V .6m
+ .    ds #F 0
+ .    ds #[ \&
+ .    ds #] \&
+ .\}
+ .    \" simple accents for nroff and troff
+ .if n \{\
+ .    ds ' \&
+ .    ds ` \&
+ .    ds ^ \&
+ .    ds , \&
+ .    ds ~ ~
+ .    ds /
+ .\}
+ .if t \{\
+ .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+ .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+ .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+ .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+ .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+ .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+ .\}
+ .    \" troff and (daisy-wheel) nroff accents
+ .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+ .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+ .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+ .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+ .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+ .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+ .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+ .ds ae a\h'-(\w'a'u*4/10)'e
+ .ds Ae A\h'-(\w'A'u*4/10)'E
+ .    \" corrections for vroff
+ .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+ .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+ .    \" for low resolution devices (crt and lpr)
+ .if \n(.H>23 .if \n(.V>19 \
+ \{\
+ .    ds : e
+ .    ds 8 ss
+ .    ds o a
+ .    ds d- d\h'-1'\(ga
+ .    ds D- D\h'-1'\(hy
+ .    ds th \o'bp'
+ .    ds Th \o'LP'
+ .    ds ae ae
+ .    ds Ae AE
+ .\}
+ .rm #[ #] #H #V #F C
+ .\" ========================================================================
+ .\"
+ .IX Title "FASTJAR 1"
+ .TH FASTJAR 1 "2005-04-21" "gcc-4.0.0" "GNU"
+ .SH "NAME"
+ fastjar \- archive tool for Java archives
+ .SH "SYNOPSIS"
+ .IX Header "SYNOPSIS"
+ fastjar \fB\-ctxu\fR [\fB\s-1OPTIONS\s0\fR] [\fIjar-file\fR] [\fImanifest-file\fR] [\fB\-C\fR \fIdir\fR] \fIfiles\fR...
+ .SH "DESCRIPTION"
+ .IX Header "DESCRIPTION"
+ \&\f(CW\*(C`fastjar\*(C'\fR is an implementation of Sun's jar utility that comes with
+ the \s-1JDK\s0, written entirely in C, and runs in a fraction of the time while
+ being feature compatible.
+ .PP
+ If any file is a directory then it is processed recursively.  The
+ manifest file name and the archive file name needs to be specified in
+ the same order the \fB\-m\fR and \fB\-f\fR flags are specified.
+ .SH "OPTIONS"
+ .IX Header "OPTIONS"
+ Exactly one of the following actions must be specified:
+ .IP "\fB\-c\fR" 4
+ .IX Item "-c"
+ Create new archive.
+ .IP "\fB\-t\fR" 4
+ .IX Item "-t"
+ List table of contents for archive.
+ .IP "\fB\-x\fR" 4
+ .IX Item "-x"
+ Extract named (or all) files from archive.
+ .IP "\fB\-u\fR" 4
+ .IX Item "-u"
+ Update existing archive.
+ .PP
+ The following parameters are optional:
+ .IP "\fB\-@\fR" 4
+ .IX Item "-@"
+ Read the names of the files to add to the archive from stdin.  This
+ option is supported only in combination with \fB\-c\fR or \fB\-u\fR.
+ Non standard option added in the \s-1GCC\s0 version.
+ .IP "\fB\-C\fR \fIdirectory\fR" 4
+ .IX Item "-C directory"
+ Change to the \fIdirectory\fR and include the following file.
+ .IP "\fB\-E\fR" 4
+ .IX Item "-E"
+ Prevent fastjar from reading the content of a directory when specifying
+ one (and instead relying on the provided list of files to populate the
+ archive with regard to the directory entry). Non standard option added
+ in the \s-1GCC\s0 version.
+ .IP "\fB\-M\fR" 4
+ .IX Item "-M"
+ Do not create a manifest file for the entries.
+ .IP "\fB\-0\fR" 4
+ .IX Item "-0"
+ Store only; use no \s-1ZIP\s0 compression.
+ .IP "\fB\-V\fR" 4
+ .IX Item "-V"
+ .PD 0
+ .IP "\fB\-\-version\fR" 4
+ .IX Item "--version"
+ .PD
+ Display version information.
+ .IP "\fB\-f\fR \fIarchive\fR" 4
+ .IX Item "-f archive"
+ Specify archive file name.
+ .IP "\fB\-m\fR \fImanifest\fR" 4
+ .IX Item "-m manifest"
+ Include manifest information from specified \fImanifest\fR file.
+ .IP "\fB\-v\fR" 4
+ .IX Item "-v"
+ Generate verbose output on standard output.
+ .PP
+ All remaining options are considered to be names of files.
+ .SH "SEE ALSO"
+ .IX Header "SEE ALSO"
+ \&\fIgcj\fR\|(1), \fIgij\fR\|(1), \fIgrepjar\fR\|(1)
+ and the Info entry for \fIgcj\fR.
+ .SH "COPYRIGHT"
+ .IX Header "COPYRIGHT"
+ Copyright (C) 2002 Matthias Klose
+ .PP
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the \s-1GNU\s0 General Public License as published by the
+ Free Software Foundation; either version 2, or (at your option) any
+ later version. A copy of the license is included in the
+ man page \fIgpl\fR\|(7).
diff -Nrcpad gcc-3.4.3/fastjar/fastjar.info gcc-4.0.0/fastjar/fastjar.info
*** gcc-3.4.3/fastjar/fastjar.info	Fri Nov  5 04:35:36 2004
--- gcc-4.0.0/fastjar/fastjar.info	Thu Apr 21 07:33:09 2005
***************
*** 1,5 ****
  This is fastjar.info, produced by makeinfo version 4.7 from
! /home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/fastjar/fastjar.texi.
  
  INFO-DIR-SECTION Programming
  START-INFO-DIR-ENTRY
--- 1,5 ----
  This is fastjar.info, produced by makeinfo version 4.7 from
! /scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/fastjar/fastjar.texi.
  
  INFO-DIR-SECTION Programming
  START-INFO-DIR-ENTRY
*************** END-INFO-DIR-ENTRY
*** 8,14 ****
  
  INFO-DIR-SECTION Individual utilities
  START-INFO-DIR-ENTRY
! * jar: (fastjar)Invoking jar.
                              An archive tool for Java archives
  * grepjar: (fastjar)Invoking grepjar.
                              Search files in a jar file for a pattern
--- 8,14 ----
  
  INFO-DIR-SECTION Individual utilities
  START-INFO-DIR-ENTRY
! * fastjar: (fastjar)Invoking fastjar.
                              An archive tool for Java archives
  * grepjar: (fastjar)Invoking grepjar.
                              Search files in a jar file for a pattern
*************** later version. A copy of the license is 
*** 23,46 ****
  entitled "GNU General Public License".
  
  
! File: fastjar.info,  Node: Top,  Next: Invoking jar,  Up: (dir)
  
  Introduction
  ************
  
! This manual describes how to use `jar' and `grepjar'.
  
  * Menu:
  
! * Invoking jar::	Options supported by `jar'
  * Invoking grepjar::    Options supported by `grepjar'
  * Copying::		The GNU General Public License
  
  
! File: fastjar.info,  Node: Invoking jar,  Next: Invoking grepjar,  Prev: Top,  Up: Top
  
! 1 Invoking jar
! **************
  
  `fastjar' is an implementation of Sun's jar utility that comes with the
  JDK, written entirely in C, and runs in a fraction of the time while
--- 23,46 ----
  entitled "GNU General Public License".
  
  
! File: fastjar.info,  Node: Top,  Next: Invoking fastjar,  Up: (dir)
  
  Introduction
  ************
  
! This manual describes how to use `fastjar' and `grepjar'.
  
  * Menu:
  
! * Invoking fastjar::	Options supported by `fastjar'
  * Invoking grepjar::    Options supported by `grepjar'
  * Copying::		The GNU General Public License
  
  
! File: fastjar.info,  Node: Invoking fastjar,  Next: Invoking grepjar,  Prev: Top,  Up: Top
  
! 1 Invoking fastjar
! ******************
  
  `fastjar' is an implementation of Sun's jar utility that comes with the
  JDK, written entirely in C, and runs in a fraction of the time while
*************** the same order the `-m' and `-f' flags a
*** 62,69 ****
       Extract named (or all) files from archive.
  
  `-u'
!      Update existing archive. This option is disabled due to bugs
!      (currently fails with exit status 1 and does nothing).
  
  
     The following parameters are optional:
--- 62,68 ----
       Extract named (or all) files from archive.
  
  `-u'
!      Update existing archive.
  
  
     The following parameters are optional:
*************** the same order the `-m' and `-f' flags a
*** 105,111 ****
     All remaining options are considered to be names of files.
  
  
! File: fastjar.info,  Node: Invoking grepjar,  Next: Copying,  Prev: Invoking jar,  Up: Top
  
  2 Invoking grepjar
  ******************
--- 104,110 ----
     All remaining options are considered to be names of files.
  
  
! File: fastjar.info,  Node: Invoking grepjar,  Next: Copying,  Prev: Invoking fastjar,  Up: Top
  
  2 Invoking grepjar
  ******************
*************** GNU Library General Public License inste
*** 503,511 ****
  
  
  Tag Table:
! Node: Top873
! Node: Invoking jar1175
! Node: Invoking grepjar2959
! Node: Copying3566
  
  End Tag Table
--- 502,510 ----
  
  
  Tag Table:
! Node: Top889
! Node: Invoking fastjar1207
! Node: Invoking grepjar2907
! Node: Copying3518
  
  End Tag Table
diff -Nrcpad gcc-3.4.3/fastjar/fastjar.texi gcc-4.0.0/fastjar/fastjar.texi
*** gcc-3.4.3/fastjar/fastjar.texi	Wed Aug 13 21:04:12 2003
--- gcc-4.0.0/fastjar/fastjar.texi	Fri Jul 23 23:34:13 2004
***************
*** 24,30 ****
  
  @dircategory Individual utilities
  @direntry
! * jar: (fastjar)Invoking jar.
                              An archive tool for Java archives
  * grepjar: (fastjar)Invoking grepjar.
                              Search files in a jar file for a pattern
--- 24,30 ----
  
  @dircategory Individual utilities
  @direntry
! * fastjar: (fastjar)Invoking fastjar.
                              An archive tool for Java archives
  * grepjar: (fastjar)Invoking grepjar.
                              Search files in a jar file for a pattern
*************** section entitled ``GNU General Public Li
*** 74,93 ****
  @node Top
  @top Introduction
  
! This manual describes how to use @command{jar} and @command{grepjar}.
  
  @menu
! * Invoking jar::	Options supported by @command{jar}
  * Invoking grepjar::    Options supported by @command{grepjar}
  * Copying::		The GNU General Public License
  @end menu
  
! @node Invoking jar
! @chapter Invoking jar
  
! @c man title jar archive tool for Java archives
  
! @c man begin DESCRIPTION jar
  
  @code{fastjar} is an implementation of Sun's jar utility that comes with
  the JDK, written entirely in C, and runs in a fraction of the time while
--- 74,93 ----
  @node Top
  @top Introduction
  
! This manual describes how to use @command{fastjar} and @command{grepjar}.
  
  @menu
! * Invoking fastjar::	Options supported by @command{fastjar}
  * Invoking grepjar::    Options supported by @command{grepjar}
  * Copying::		The GNU General Public License
  @end menu
  
! @node Invoking fastjar
! @chapter Invoking fastjar
  
! @c man title fastjar archive tool for Java archives
  
! @c man begin DESCRIPTION fastjar
  
  @code{fastjar} is an implementation of Sun's jar utility that comes with
  the JDK, written entirely in C, and runs in a fraction of the time while
*************** the same order the @option{-m} and @opti
*** 100,115 ****
  @c man end
  
  @ignore
! @c man begin SYNOPSIS jar
! jar @option{-ctxu} [@option{OPTIONS}] [@var{jar-file}] [@var{manifest-file}] [@option{-C} @var{dir}] @var{files}@dots{}
  @c man end
! @c man begin SEEALSO jar
  gcj(1), gij(1), grepjar(1)
  and the Info entry for @file{gcj}.
  @c man end
  @end ignore
  
! @c man begin OPTIONS jar
  
  Exactly one of the following actions must be specified:
  
--- 100,115 ----
  @c man end
  
  @ignore
! @c man begin SYNOPSIS fastjar
! fastjar @option{-ctxu} [@option{OPTIONS}] [@var{jar-file}] [@var{manifest-file}] [@option{-C} @var{dir}] @var{files}@dots{}
  @c man end
! @c man begin SEEALSO fastjar
  gcj(1), gij(1), grepjar(1)
  and the Info entry for @file{gcj}.
  @c man end
  @end ignore
  
! @c man begin OPTIONS fastjar
  
  Exactly one of the following actions must be specified:
  
*************** List table of contents for archive.
*** 125,132 ****
  Extract named (or all) files from archive.
  
  @item -u
! Update existing archive. This option is disabled due to bugs (currently
! fails with exit status 1 and does nothing).
  
  @end table
  
--- 125,131 ----
  Extract named (or all) files from archive.
  
  @item -u
! Update existing archive.
  
  @end table
  
*************** a pattern.
*** 190,196 ****
  grepjar [@option{-bcinsw}] @option{-e} @var{PATTERN} | @var{PATTERN} @var{files}@dots{}
  @c man end
  @c man begin SEEALSO grepjar
! jar(1), gcj(1), gij(1), gfdl(7) and the Info entry for @file{gcj}.
  @c man end
  @end ignore
  
--- 189,195 ----
  grepjar [@option{-bcinsw}] @option{-e} @var{PATTERN} | @var{PATTERN} @var{files}@dots{}
  @c man end
  @c man begin SEEALSO grepjar
! fastjar(1), gcj(1), gij(1), gfdl(7) and the Info entry for @file{gcj}.
  @c man end
  @end ignore
  
diff -Nrcpad gcc-3.4.3/fastjar/grepjar.1 gcc-4.0.0/fastjar/grepjar.1
*** gcc-3.4.3/fastjar/grepjar.1	Fri Nov  5 04:35:38 2004
--- gcc-4.0.0/fastjar/grepjar.1	Thu Apr 21 07:33:11 2005
***************
*** 129,135 ****
  .\" ========================================================================
  .\"
  .IX Title "GREPJAR 1"
! .TH GREPJAR 1 "2004-11-05" "gcc-3.4.3" "GNU"
  .SH "NAME"
  grepjar \- search files in a jar file for a pattern
  .SH "SYNOPSIS"
--- 129,135 ----
  .\" ========================================================================
  .\"
  .IX Title "GREPJAR 1"
! .TH GREPJAR 1 "2005-04-21" "gcc-4.0.0" "GNU"
  .SH "NAME"
  grepjar \- search files in a jar file for a pattern
  .SH "SYNOPSIS"
*************** Print help, then exit.
*** 174,180 ****
  Print version number, then exit.
  .SH "SEE ALSO"
  .IX Header "SEE ALSO"
! \&\fIjar\fR\|(1), \fIgcj\fR\|(1), \fIgij\fR\|(1), \fIgfdl\fR\|(7) and the Info entry for \fIgcj\fR.
  .SH "COPYRIGHT"
  .IX Header "COPYRIGHT"
  Copyright (C) 2002 Matthias Klose
--- 174,180 ----
  Print version number, then exit.
  .SH "SEE ALSO"
  .IX Header "SEE ALSO"
! \&\fIfastjar\fR\|(1), \fIgcj\fR\|(1), \fIgij\fR\|(1), \fIgfdl\fR\|(7) and the Info entry for \fIgcj\fR.
  .SH "COPYRIGHT"
  .IX Header "COPYRIGHT"
  Copyright (C) 2002 Matthias Klose
diff -Nrcpad gcc-3.4.3/fastjar/jar.1 gcc-4.0.0/fastjar/jar.1
*** gcc-3.4.3/fastjar/jar.1	Fri Nov  5 04:35:38 2004
--- gcc-4.0.0/fastjar/jar.1	Thu Jan  1 00:00:00 1970
***************
*** 1,215 ****
- .\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13
- .\"
- .\" Standard preamble:
- .\" ========================================================================
- .de Sh \" Subsection heading
- .br
- .if t .Sp
- .ne 5
- .PP
- \fB\\$1\fR
- .PP
- ..
- .de Sp \" Vertical space (when we can't use .PP)
- .if t .sp .5v
- .if n .sp
- ..
- .de Vb \" Begin verbatim text
- .ft CW
- .nf
- .ne \\$1
- ..
- .de Ve \" End verbatim text
- .ft R
- .fi
- ..
- .\" Set up some character translations and predefined strings.  \*(-- will
- .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
- .\" double quote, and \*(R" will give a right double quote.  | will give a
- .\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used to
- .\" do unbreakable dashes and therefore won't be available.  \*(C` and \*(C'
- .\" expand to `' in nroff, nothing in troff, for use with C<>.
- .tr \(*W-|\(bv\*(Tr
- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
- .ie n \{\
- .    ds -- \(*W-
- .    ds PI pi
- .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
- .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
- .    ds L" ""
- .    ds R" ""
- .    ds C` ""
- .    ds C' ""
- 'br\}
- .el\{\
- .    ds -- \|\(em\|
- .    ds PI \(*p
- .    ds L" ``
- .    ds R" ''
- 'br\}
- .\"
- .\" If the F register is turned on, we'll generate index entries on stderr for
- .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
- .\" entries marked with X<> in POD.  Of course, you'll have to process the
- .\" output yourself in some meaningful fashion.
- .if \nF \{\
- .    de IX
- .    tm Index:\\$1\t\\n%\t"\\$2"
- ..
- .    nr % 0
- .    rr F
- .\}
- .\"
- .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
- .\" way too many mistakes in technical documents.
- .hy 0
- .if n .na
- .\"
- .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
- .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
- .    \" fudge factors for nroff and troff
- .if n \{\
- .    ds #H 0
- .    ds #V .8m
- .    ds #F .3m
- .    ds #[ \f1
- .    ds #] \fP
- .\}
- .if t \{\
- .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
- .    ds #V .6m
- .    ds #F 0
- .    ds #[ \&
- .    ds #] \&
- .\}
- .    \" simple accents for nroff and troff
- .if n \{\
- .    ds ' \&
- .    ds ` \&
- .    ds ^ \&
- .    ds , \&
- .    ds ~ ~
- .    ds /
- .\}
- .if t \{\
- .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
- .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
- .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
- .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
- .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
- .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
- .\}
- .    \" troff and (daisy-wheel) nroff accents
- .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
- .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
- .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
- .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
- .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
- .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
- .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
- .ds ae a\h'-(\w'a'u*4/10)'e
- .ds Ae A\h'-(\w'A'u*4/10)'E
- .    \" corrections for vroff
- .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
- .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
- .    \" for low resolution devices (crt and lpr)
- .if \n(.H>23 .if \n(.V>19 \
- \{\
- .    ds : e
- .    ds 8 ss
- .    ds o a
- .    ds d- d\h'-1'\(ga
- .    ds D- D\h'-1'\(hy
- .    ds th \o'bp'
- .    ds Th \o'LP'
- .    ds ae ae
- .    ds Ae AE
- .\}
- .rm #[ #] #H #V #F C
- .\" ========================================================================
- .\"
- .IX Title "JAR 1"
- .TH JAR 1 "2004-11-05" "gcc-3.4.3" "GNU"
- .SH "NAME"
- jar \- archive tool for Java archives
- .SH "SYNOPSIS"
- .IX Header "SYNOPSIS"
- jar \fB\-ctxu\fR [\fB\s-1OPTIONS\s0\fR] [\fIjar-file\fR] [\fImanifest-file\fR] [\fB\-C\fR \fIdir\fR] \fIfiles\fR...
- .SH "DESCRIPTION"
- .IX Header "DESCRIPTION"
- \&\f(CW\*(C`fastjar\*(C'\fR is an implementation of Sun's jar utility that comes with
- the \s-1JDK\s0, written entirely in C, and runs in a fraction of the time while
- being feature compatible.
- .PP
- If any file is a directory then it is processed recursively.  The
- manifest file name and the archive file name needs to be specified in
- the same order the \fB\-m\fR and \fB\-f\fR flags are specified.
- .SH "OPTIONS"
- .IX Header "OPTIONS"
- Exactly one of the following actions must be specified:
- .IP "\fB\-c\fR" 4
- .IX Item "-c"
- Create new archive.
- .IP "\fB\-t\fR" 4
- .IX Item "-t"
- List table of contents for archive.
- .IP "\fB\-x\fR" 4
- .IX Item "-x"
- Extract named (or all) files from archive.
- .IP "\fB\-u\fR" 4
- .IX Item "-u"
- Update existing archive. This option is disabled due to bugs (currently
- fails with exit status 1 and does nothing).
- .PP
- The following parameters are optional:
- .IP "\fB\-@\fR" 4
- .IX Item "-@"
- Read the names of the files to add to the archive from stdin.  This
- option is supported only in combination with \fB\-c\fR or \fB\-u\fR.
- Non standard option added in the \s-1GCC\s0 version.
- .IP "\fB\-C\fR \fIdirectory\fR" 4
- .IX Item "-C directory"
- Change to the \fIdirectory\fR and include the following file.
- .IP "\fB\-E\fR" 4
- .IX Item "-E"
- Prevent fastjar from reading the content of a directory when specifying
- one (and instead relying on the provided list of files to populate the
- archive with regard to the directory entry). Non standard option added
- in the \s-1GCC\s0 version.
- .IP "\fB\-M\fR" 4
- .IX Item "-M"
- Do not create a manifest file for the entries.
- .IP "\fB\-0\fR" 4
- .IX Item "-0"
- Store only; use no \s-1ZIP\s0 compression.
- .IP "\fB\-V\fR" 4
- .IX Item "-V"
- .PD 0
- .IP "\fB\-\-version\fR" 4
- .IX Item "--version"
- .PD
- Display version information.
- .IP "\fB\-f\fR \fIarchive\fR" 4
- .IX Item "-f archive"
- Specify archive file name.
- .IP "\fB\-m\fR \fImanifest\fR" 4
- .IX Item "-m manifest"
- Include manifest information from specified \fImanifest\fR file.
- .IP "\fB\-v\fR" 4
- .IX Item "-v"
- Generate verbose output on standard output.
- .PP
- All remaining options are considered to be names of files.
- .SH "SEE ALSO"
- .IX Header "SEE ALSO"
- \&\fIgcj\fR\|(1), \fIgij\fR\|(1), \fIgrepjar\fR\|(1)
- and the Info entry for \fIgcj\fR.
- .SH "COPYRIGHT"
- .IX Header "COPYRIGHT"
- Copyright (C) 2002 Matthias Klose
- .PP
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the \s-1GNU\s0 General Public License as published by the
- Free Software Foundation; either version 2, or (at your option) any
- later version. A copy of the license is included in the
- man page \fIgpl\fR\|(7).
--- 0 ----
diff -Nrcpad gcc-3.4.3/fastjar/jartool.c gcc-4.0.0/fastjar/jartool.c
*** gcc-3.4.3/fastjar/jartool.c	Wed Jan  7 18:46:04 2004
--- gcc-4.0.0/fastjar/jartool.c	Thu Sep 23 23:40:33 2004
***************
*** 1,6 ****
  /*
    jartool.c - main functions for fastjar utility
!   Copyright (C) 2002 Free Software Foundation
    Copyright (C) 1999, 2000, 2001  Bryan Burns
    
    This program is free software; you can redistribute it and/or
--- 1,6 ----
  /*
    jartool.c - main functions for fastjar utility
!   Copyright (C) 2002, 2004  Free Software Foundation
    Copyright (C) 1999, 2000, 2001  Bryan Burns
    
    This program is free software; you can redistribute it and/or
***************
*** 238,243 ****
--- 238,244 ----
  #include "dostime.h"
  #include "pushback.h"
  #include "compress.h"
+ #include "shift.h"
  
  /* Some systems have mkdir that takes a single argument.  */
  #ifdef MKDIR_TAKES_ONE_ARG
*************** void init_headers(void);
*** 273,287 ****
  int consume(pb_file *, int);
  int list_jar(int, char**, int);
  int extract_jar(int, char**, int);
! int add_file_to_jar(int, int, const char*, struct stat*);
! int add_to_jar(int, const char*);
! int add_to_jar_with_dir(int, const char*, const char*);
  int create_central_header(int);
! int make_manifest(int, const char*);
  static void init_args(char **, int);
  static char *get_next_arg (void);
  static char *jt_strdup (char*);
  static void expand_options (int *argcp, char ***argvp);
  
  /* global variables */
  ub1 file_header[30];
--- 274,291 ----
  int consume(pb_file *, int);
  int list_jar(int, char**, int);
  int extract_jar(int, char**, int);
! int add_file_to_jar(int, int, const char*, struct stat*, int);
! int add_to_jar(int, const char*, int);
! int add_to_jar_with_dir(int, const char*, const char*, int);
  int create_central_header(int);
! int make_manifest(int, const char*, int);
! int read_entries (int);
  static void init_args(char **, int);
  static char *get_next_arg (void);
  static char *jt_strdup (char*);
  static void expand_options (int *argcp, char ***argvp);
+ static struct zipentry *find_entry (const char *);
+ static int looks_like_dir (const char *);
  
  /* global variables */
  ub1 file_header[30];
*************** zipentry *ziptail; /* tail of the linked
*** 305,310 ****
--- 309,320 ----
  
  int number_of_entries; /* number of entries in the linked list */
  
+ /* What we go by. */
+ const char *progname;
+ 
+ /* The offset of the end of the last zip entry. */
+ ub4 end_of_entries;
+ 
  /* This is used to mark options with no short value.  */
  #define LONG_OPT(Num)  ((Num) + 128)
  
*************** int main(int argc, char **argv){
*** 340,345 ****
--- 350,357 ----
    int new_argc;
    char **new_argv;
  
+   progname = argv[0];
+ 
    do_compress = TRUE;
    verbose = FALSE;
    
*************** int main(int argc, char **argv){
*** 418,432 ****
    new_argv[new_argc] = NULL;
  
    if(action == ACTION_NONE){
!     fprintf(stderr, "One of options -{ctxu} must be specified.\n");
      usage(argv[0]);
    }
  
-   if(action == ACTION_UPDATE){
-     fprintf(stderr, "%s: `-u' mode unimplemented.\n", argv[0]);
-     exit(1);
-   }
- 
    /* Verify unsupported combinations and warn of the use of non
       standard features */
    if(verbose && use_explicit_list_only)
--- 430,440 ----
    new_argv[new_argc] = NULL;
  
    if(action == ACTION_NONE){
!     fprintf(stderr, "%s: one of options -{ctxu} must be specified.\n",
! 	    progname);
      usage(argv[0]);
    }
  
    /* Verify unsupported combinations and warn of the use of non
       standard features */
    if(verbose && use_explicit_list_only)
*************** int main(int argc, char **argv){
*** 435,441 ****
      fprintf (stderr, "Warning: using non standard '-@' option\n");
    if(read_names_from_stdin
        && (action != ACTION_CREATE && action != ACTION_UPDATE)){
!       fprintf(stderr, "Option '-@' is supported only with '-c' or '-u'.\n");
        usage(argv[0]);
    }
  
--- 443,450 ----
      fprintf (stderr, "Warning: using non standard '-@' option\n");
    if(read_names_from_stdin
        && (action != ACTION_CREATE && action != ACTION_UPDATE)){
!       fprintf(stderr, "%s: option '-@' is supported only with '-c' or '-u'.\n",
! 	      progname);
        usage(argv[0]);
    }
  
*************** int main(int argc, char **argv){
*** 445,452 ****
        jarfd = open(jarfile, O_CREAT | O_BINARY | O_WRONLY | O_TRUNC, 0666);
  
        if(jarfd < 0){
!         fprintf(stderr, "Error opening %s for writing!\n", jarfile);
!         perror(jarfile);
          exit(1);
        }
        
--- 454,461 ----
        jarfd = open(jarfile, O_CREAT | O_BINARY | O_WRONLY | O_TRUNC, 0666);
  
        if(jarfd < 0){
!         fprintf(stderr, "%s: error opening %s for writing: %s\n", progname,
! 		jarfile, strerror (errno));
          exit(1);
        }
        
*************** int main(int argc, char **argv){
*** 470,477 ****
        jarfd = open(jarfile, O_RDONLY | O_BINARY);
  
        if(jarfd < 0){
!         fprintf(stderr, "Error opening %s for reading!\n", jarfile);
!         perror(jarfile);
          exit(1);
        }
  
--- 479,486 ----
        jarfd = open(jarfile, O_RDONLY | O_BINARY);
  
        if(jarfd < 0){
!         fprintf(stderr, "%s: error opening %s for reading: %s\n", progname,
! 		jarfile, strerror (errno));
          exit(1);
        }
  
*************** int main(int argc, char **argv){
*** 484,511 ****
      }
    }
  
    if(action == ACTION_CREATE || action == ACTION_UPDATE){
      const char *arg;
      init_headers();
  
-    if((action == ACTION_UPDATE) && jarfile) {
-       if((jarfd = open(jarfile, O_RDWR | O_BINARY)) < 0) {
- 	fprintf(stderr, "Error opening %s for reading!\n", jarfile);
-         perror(jarfile);
-         exit(1);
-       }
-     }
- 
      if(do_compress)
        init_compression();
!   
  
      /* Add the META-INF/ directory and the manifest */
      if(manifest && mfile)
!       make_manifest(jarfd, mfile);
!     else if(manifest)
!       make_manifest(jarfd, NULL);
!     
      init_args (new_argv, 0);
      /* now we add the files to the archive */
      while ((arg = get_next_arg ())){
--- 493,543 ----
      }
    }
  
+   if (action == ACTION_UPDATE)
+     {
+       if (!jarfile)
+ 	{
+ 	  fprintf (stderr, "%s: `-u' mode requires a file name\n",
+ 		   argv[0]);
+ 	  exit (1);
+ 	}
+ 
+       if ((jarfd = open (jarfile, O_RDWR | O_BINARY)) < 0)
+ 	{
+ 	  fprintf (stderr, "Error opening %s for reading!\n", jarfile);
+ 	  perror (jarfile);
+ 	  exit (1);
+ 	}
+ 
+       /* Assert that jarfd is seekable. */
+       if (lseek (jarfd, 0, SEEK_CUR) == -1)
+ 	{
+ 	  fprintf (stderr, "%s: %s is not seekable\n", argv[0], jarfile);
+ 	  exit (1);
+ 	}
+ 
+       seekable = TRUE;
+     }
+ 
    if(action == ACTION_CREATE || action == ACTION_UPDATE){
      const char *arg;
      init_headers();
  
      if(do_compress)
        init_compression();
! 
!     if (action == ACTION_UPDATE)
!       {
! 	if (read_entries (jarfd))
! 	  exit (1);
!       }
  
      /* Add the META-INF/ directory and the manifest */
      if(manifest && mfile)
!       make_manifest(jarfd, mfile, action == ACTION_UPDATE);
!     else if(manifest && action == ACTION_CREATE)
!       make_manifest(jarfd, NULL, FALSE);
! 
      init_args (new_argv, 0);
      /* now we add the files to the archive */
      while ((arg = get_next_arg ())){
*************** int main(int argc, char **argv){
*** 514,530 ****
  	const char *dir_to_change = get_next_arg ();
  	const char *file_to_add = get_next_arg ();
          if (!dir_to_change || !file_to_add) {
!           fprintf(stderr, "Error: missing argument for -C.\n");
!           exit(1);
!         }
! 	if (add_to_jar_with_dir(jarfd, dir_to_change, file_to_add)) {
!           fprintf(stderr,
!                  "Error adding %s (in directory %s) to jar archive!\n",
!                  file_to_add, dir_to_change);
            exit(1);
          }
        } else {
!         if(add_to_jar(jarfd, arg)){
            fprintf(stderr, "Error adding %s to jar archive!\n", arg);
            exit(1);
          }
--- 546,564 ----
  	const char *dir_to_change = get_next_arg ();
  	const char *file_to_add = get_next_arg ();
          if (!dir_to_change || !file_to_add) {
!           fprintf(stderr, "%s: error: missing argument for -C.\n", progname);
            exit(1);
          }
+ 	if (add_to_jar_with_dir(jarfd, dir_to_change, file_to_add,
+ 				action == ACTION_UPDATE))
+ 	  {
+ 	    fprintf(stderr,
+ 		    "Error adding %s (in directory %s) to jar archive!\n",
+ 		    file_to_add, dir_to_change);
+ 	    exit(1);
+ 	  }
        } else {
!         if(add_to_jar(jarfd, arg, action == ACTION_UPDATE)){
            fprintf(stderr, "Error adding %s to jar archive!\n", arg);
            exit(1);
          }
*************** int main(int argc, char **argv){
*** 533,543 ****
      /* de-initialize the compression DS */
      if(do_compress)
        end_compression();
      
      create_central_header(jarfd);
!     
!     if (close(jarfd) != 0) {
!       fprintf(stderr, "Error closing jar archive!\n");
      }
    } else if(action == ACTION_LIST){
      list_jar(jarfd, &new_argv[0], new_argc);
--- 567,593 ----
      /* de-initialize the compression DS */
      if(do_compress)
        end_compression();
+ 
+     if (action == ACTION_UPDATE)
+       lseek (jarfd, end_of_entries, SEEK_SET);
      
      create_central_header(jarfd);
! 
! #if ! (HAVE_FTRUNCATE || HAVE__CHSIZE)
!   #error neither ftruncate() or _chsize() available
! #endif
!     /* Check if the file shrunk when we updated it. */
!     if (action == ACTION_UPDATE)
! #if HAVE_FTRUNCATE
!       ftruncate (jarfd, lseek (jarfd, 0, SEEK_CUR));
! #else
!       _chsize (jarfd, lseek (jarfd, 0, SEEK_CUR));
! #endif
! 
!     if (jarfd != STDIN_FILENO && close(jarfd) != 0) {
!       fprintf(stderr, "%s: error closing jar archive: %s\n",
! 	      progname, strerror (errno));
!       exit (1);
      }
    } else if(action == ACTION_LIST){
      list_jar(jarfd, &new_argv[0], new_argc);
*************** void add_entry(struct zipentry *ze){
*** 688,694 ****
    number_of_entries++;
  }
  
! int make_manifest(int jfd, const char *mf_name){
    time_t current_time;
    int nlen;   /* length of file name */
    int mod_time; /* file modification time */
--- 738,912 ----
    number_of_entries++;
  }
  
! static struct zipentry *
! find_entry (const char *fname)
! {
!   struct zipentry *ze;
! 
!   for (ze = ziptail; ze; ze = ze->next_entry)
!     {
!       if (!strcmp (ze->filename, fname))
! 	return ze;
!     }
!   return NULL;
! }
! 
! 
! static int
! looks_like_dir (const char *fname)
! {
!   struct zipentry *ze;
!   size_t len = strlen (fname);
! 
!   for (ze = ziptail; ze; ze = ze->next_entry)
!     {
!       if (strlen (ze->filename) > len
! 	  && !strncmp (fname, ze->filename, len)
! 	  && ze->filename[len] == '/')
! 	return 1;
!     }
!   return 0;
! }
! 
! 
! /*
!  * Read the zip entries of an existing file, building `ziplist' as we go.
!  */
! int read_entries (int fd)
! {
!   struct zipentry *ze;
!   ub1 intbuf[4];
!   ub1 header[46];
!   ub2 len;
!   ub2 count, i;
!   off_t offset;
! 
!   if (lseek (fd, -22, SEEK_END) == -1)
!     {
!       fprintf (stderr, "%s: %s: can't seek file\n", progname, jarfile);
!       return 1;
!     }
! 
!   if (read (fd, intbuf, 4) < 4)
!     {
!       perror (progname);
!       return 1;
!     }
!   /* Is there a zipfile comment? */
!   while (UNPACK_UB4(intbuf, 0) != 0x06054b50)
!     {
!       if (lseek (fd, -5, SEEK_CUR) == -1 ||
! 	  read (fd, intbuf, 4) != 4)
! 	{
! 	  fprintf (stderr, "%s: can't find end of central directory: %s\n",
! 		   progname, strerror (errno));
! 	  return 1;
! 	}
!     }
! 
!   /* Skip disk numbers. */
!   if (lseek (fd, 6, SEEK_CUR) == -1)
!     {
!       perror (progname);
!       return 1;
!     }
! 
!   /* Number of entries in the central directory. */
!   if (read (fd, intbuf, 2) != 2)
!     {
!       perror (progname);
!       return 1;
!     }
!   count = UNPACK_UB2(intbuf, 0);
! 
!   if (lseek (fd, 4, SEEK_CUR) == -1)
!     {
!       perror (progname);
!       return 1;
!     }
! 
!   /* Offset where the central directory begins. */
!   if (read (fd, intbuf, 4) != 4)
!     {
!       perror (progname);
!       return 1;
!     }
!   offset = UNPACK_UB4(intbuf, 0);
!   end_of_entries = offset;
! 
!   if (lseek (fd, offset, SEEK_SET) != offset)
!     {
!       perror (progname);
!       return 1;
!     }
! 
!   if (read (fd, header, 46) != 46)
!     {
!       fprintf (stderr, "%s: %s: unexpected end of file\n",
! 	       progname, jarfile);
!       return 1;
!     }
! 
!   for (i = 0; i < count; i++)
!     {
!       if (UNPACK_UB4(header, 0) != 0x02014b50)
! 	{
! 	  fprintf (stderr, "%s: can't find central directory header\n",
! 		   progname);
! 	  return 1;
! 	}
!       ze = (struct zipentry *) malloc (sizeof (struct zipentry));
!       if (!ze)
! 	{
! 	  perror (progname);
! 	  return 1;
! 	}
!       memset (ze, 0, sizeof (struct zipentry));
!       ze->flags = UNPACK_UB2(header, CEN_FLAGS);
!       ze->mod_time = UNPACK_UB2(header, CEN_MODTIME);
!       ze->mod_date = UNPACK_UB2(header, CEN_MODDATE);
!       ze->crc = UNPACK_UB4(header, CEN_CRC);
!       ze->usize = UNPACK_UB4(header, CEN_USIZE);
!       ze->csize = UNPACK_UB4(header, CEN_CSIZE);
!       ze->offset = UNPACK_UB4(header, CEN_OFFSET);
!       ze->compressed = (header[CEN_COMP] || header[CEN_COMP+1]);
!       len = UNPACK_UB2(header, CEN_FNLEN);
!       ze->filename = (char *) malloc ((len+1) * sizeof (char));
!       if (!ze->filename)
! 	{
! 	  perror (progname);
! 	  return 1;
! 	}
!       if (read (fd, ze->filename, len) != len)
! 	{
! 	  fprintf (stderr, "%s: %s: unexpected end of file\n",
! 		   progname, jarfile);
! 	  return 1;
! 	}
!       len = UNPACK_UB4(header, CEN_EFLEN);
!       len += UNPACK_UB4(header, CEN_COMLEN);
!       if (lseek (fd, len, SEEK_CUR) == -1)
! 	{
! 	  perror (progname);
! 	  return 1;
! 	}
!       add_entry (ze);
!       if (i < count - 1)
! 	{
! 	  if (read (fd, header, 46) != 46)
! 	    {
! 	      fprintf (stderr, "%s: %s: unexpected end of file\n",
! 		       progname, jarfile);
! 	      return 1;
! 	    }
! 	}
!     }
! 
!   lseek (fd, 0, SEEK_SET);
!   return 0;
! }
! 
! int make_manifest(int jfd, const char *mf_name, int updating){
    time_t current_time;
    int nlen;   /* length of file name */
    int mod_time; /* file modification time */
*************** int make_manifest(int jfd, const char *m
*** 812,818 ****
        exit(1);
      }
  
!     if(add_file_to_jar(jfd, mfd, "META-INF/MANIFEST.MF", &statbuf)){
        perror("error writing to jar");
        exit(1);
      }
--- 1030,1036 ----
        exit(1);
      }
  
!     if(add_file_to_jar(jfd, mfd, "META-INF/MANIFEST.MF", &statbuf, updating)){
        perror("error writing to jar");
        exit(1);
      }
*************** int make_manifest(int jfd, const char *m
*** 823,831 ****
  }
  
  /* Implements -C by wrapping add_to_jar.  new_dir is the directory 
!    to switch to. */
  int 
! add_to_jar_with_dir (int fd, const char* new_dir, const char* file)
  {
    int retval;
    char old_dir[MAXPATHLEN]; 
--- 1041,1056 ----
  }
  
  /* Implements -C by wrapping add_to_jar.  new_dir is the directory 
!    to switch to.
! 
!    `updating', if nonzero, will indicate that we are updating an
!    existing file, and will need to take special care. If set, we will
!    also expect that the linked list of zip entries will be filled in
!    with the jar file's current contents.
!  */
  int 
! add_to_jar_with_dir (int fd, const char* new_dir, const char* file,
! 		     const int updating)
  {
    int retval;
    char old_dir[MAXPATHLEN]; 
*************** add_to_jar_with_dir (int fd, const char*
*** 837,843 ****
      perror(new_dir);
      return 1;
    }
!   retval=add_to_jar(fd, file);
    if (chdir(old_dir) == -1) {
      perror(old_dir);
      return 1;
--- 1062,1068 ----
      perror(new_dir);
      return 1;
    }
!   retval=add_to_jar(fd, file, updating);
    if (chdir(old_dir) == -1) {
      perror(old_dir);
      return 1;
*************** add_to_jar_with_dir (int fd, const char*
*** 846,856 ****
  }
  
  int 
! add_to_jar (int fd, const char *file) {
    struct stat statbuf;
    DIR *dir;
    struct dirent *de;
    zipentry *ze;
    int stat_return;
  
    /* This is a quick compatibility fix -- Simon Weijgers <simon@weijgers.com> 
--- 1071,1083 ----
  }
  
  int 
! add_to_jar (int fd, const char *file, const int updating)
! {
    struct stat statbuf;
    DIR *dir;
    struct dirent *de;
    zipentry *ze;
+   zipentry *existing = NULL;
    int stat_return;
  
    /* This is a quick compatibility fix -- Simon Weijgers <simon@weijgers.com> 
*************** add_to_jar (int fd, const char *file) {
*** 917,925 ****
      PACK_UB2(file_header, LOC_FNLEN, nlen);
      PACK_UB4(file_header, LOC_MODTIME, mod_time);
  
-     if(verbose)
-       printf("adding: %s (in=%d) (out=%d) (stored 0%%)\n", fullname, 0, 0);
- 
      ze = (zipentry*)malloc(sizeof(zipentry));
      if(ze == NULL){
        perror("malloc");
--- 1144,1149 ----
*************** add_to_jar (int fd, const char *file) {
*** 936,945 ****
      ze->mod_date = (ub2)((mod_time & 0xffff0000) >> 16);
      ze->compressed = FALSE;
  
!     add_entry(ze);
  
!     write(fd, file_header, 30);
!     write(fd, fullname, nlen);
  
      while(!use_explicit_list_only && (de = readdir(dir)) != NULL){
        if(de->d_name[0] == '.')
--- 1160,1195 ----
      ze->mod_date = (ub2)((mod_time & 0xffff0000) >> 16);
      ze->compressed = FALSE;
  
!     if (updating)
!       {
! 	if ((existing = find_entry (ze->filename)) != NULL)
! 	  {
! 	    if (existing->usize != 0)
! 	      {
! 		/* XXX overwriting non-directory with directory? */
! 		fprintf (stderr, "%s: %s: can't overwrite non-directory with directory\n",
! 			 progname, fullname);
! 		return 1;
! 	      }
! 	  }
! 	if (lseek (fd, end_of_entries, SEEK_SET) == -1)
! 	  {
! 	    fprintf (stderr, "%s %d\n", __FILE__, __LINE__);
! 	    perror ("lseek");
! 	    return 1;
! 	  }
!       }
  
!     if (!existing)
!       {
! 	add_entry (ze);
! 	write (fd, file_header, 30);
! 	write (fd, fullname, nlen);
! 	end_of_entries = lseek (fd, 0, SEEK_CUR);
! 
! 	if (verbose)
! 	  printf ("adding: %s (in=%d) (out=%d) (stored 0%%)\n", fullname, 0, 0);
!       }
  
      while(!use_explicit_list_only && (de = readdir(dir)) != NULL){
        if(de->d_name[0] == '.')
*************** add_to_jar (int fd, const char *file) {
*** 953,959 ****
  
        strcpy(t_ptr, de->d_name);
  
!       if (add_to_jar(fd, fullname)) {
          fprintf(stderr, "Error adding file to jar!\n");
          return 1;
        }
--- 1203,1209 ----
  
        strcpy(t_ptr, de->d_name);
  
!       if (add_to_jar(fd, fullname, updating)) {
          fprintf(stderr, "Error adding file to jar!\n");
          return 1;
        }
*************** add_to_jar (int fd, const char *file) {
*** 971,977 ****
        return 1;
      }
      
!     if(add_file_to_jar(fd, add_fd, file, &statbuf)){
        fprintf(stderr, "Error adding file to jar!\n");
        return 1;
      }
--- 1221,1227 ----
        return 1;
      }
      
!     if(add_file_to_jar(fd, add_fd, file, &statbuf, updating)){
        fprintf(stderr, "Error adding file to jar!\n");
        return 1;
      }
*************** add_to_jar (int fd, const char *file) {
*** 982,989 ****
    return 0;
  }
  
! int add_file_to_jar(int jfd, int ffd, const char *fname, struct stat *statbuf){
! 
    unsigned short file_name_length;
    unsigned long mod_time;
    ub1 rd_buff[RDSZ];
--- 1232,1240 ----
    return 0;
  }
  
! int add_file_to_jar(int jfd, int ffd, const char *fname, struct stat *statbuf,
! 		    const int updating)
! {
    unsigned short file_name_length;
    unsigned long mod_time;
    ub1 rd_buff[RDSZ];
*************** int add_file_to_jar(int jfd, int ffd, co
*** 991,996 ****
--- 1242,1259 ----
    off_t offset = 0;
    int rdamt;
    struct zipentry *ze;
+   struct zipentry *existing = NULL;
+ 
+   if (updating)
+     {
+       existing = find_entry (fname);
+       if (existing && looks_like_dir (fname))
+ 	{
+ 	  fprintf (stderr, "%s: %s is a directory in the archive\n",
+ 		   progname, fname);
+ 	  return 1;
+ 	}
+     }
  
    mod_time = unix2dostime(&(statbuf->st_mtime));
    file_name_length = strlen(fname);
*************** int add_file_to_jar(int jfd, int ffd, co
*** 1045,1057 ****
  
    ze->csize = statbuf->st_size;
    ze->usize = ze->csize;
!   ze->offset = lseek(jfd, 0, SEEK_CUR);
    if(do_compress)
      ze->compressed = TRUE;
    else
      ze->compressed = FALSE;
!   
!   add_entry(ze);
    
    /* Write the local header */
    write(jfd, file_header, 30);
--- 1308,1336 ----
  
    ze->csize = statbuf->st_size;
    ze->usize = ze->csize;
! 
!   if (existing)
!     ze->offset = existing->offset;
!   else if (updating)
!     ze->offset = end_of_entries;
!   else
!     ze->offset = lseek(jfd, 0, SEEK_CUR);
! 
    if(do_compress)
      ze->compressed = TRUE;
    else
      ze->compressed = FALSE;
! 
!   if (!existing)
!     add_entry(ze);
!   if (updating && lseek (jfd, ze->offset, SEEK_SET) < 0)
!     {
!       perror ("lseek");
!       return 1;
!     }
! 
!   /* We can safely write the header here, since it will be the same size
!      as before */
    
    /* Write the local header */
    write(jfd, file_header, 30);
*************** int add_file_to_jar(int jfd, int ffd, co
*** 1061,1074 ****
  
  
    if(verbose){
!     printf("adding: %s ", fname);
      fflush(stdout);
    }
   
    if(do_compress){
      /* compress the file */
!     compress_file(ffd, jfd, ze);
    } else {
      /* Write the contents of the file (uncompressed) to the zip file */
      /* calculate the CRC as we go along */
      ze->crc = crc32(0L, Z_NULL, 0); 
--- 1340,1370 ----
  
  
    if(verbose){
!     if (existing)
!       printf ("updating: %s ", fname);
!     else
!       printf("adding: %s ", fname);
      fflush(stdout);
    }
   
    if(do_compress){
      /* compress the file */
!     compress_file(ffd, jfd, ze, existing);
    } else {
+     /* If we are not writing the last entry, make space for it. */
+     if (existing && existing->next_entry)
+       {
+ 	if (ze->usize > existing->usize)
+ 	  {
+ 	    if (shift_down (jfd, existing->next_entry->offset,
+ 			    ze->usize - existing->usize, existing->next_entry))
+ 	      {
+ 		fprintf (stderr, "%s: %s\n", progname, strerror (errno));
+ 		return 1;
+ 	      }
+ 	  }
+       }
+ 
      /* Write the contents of the file (uncompressed) to the zip file */
      /* calculate the CRC as we go along */
      ze->crc = crc32(0L, Z_NULL, 0); 
*************** int add_file_to_jar(int jfd, int ffd, co
*** 1112,1123 ****
--- 1408,1449 ----
      /* Sun's jar tool will only allow a data descriptor if the entry is
         compressed, but we'll save 16 bytes/entry if we only use it when
         we can't seek back on the file */
+     /* Technically, you CAN'T have a data descriptor unless the data
+        part has an obvious end, which DEFLATED does. Otherwise, there
+        would not be any way to determine where the data descriptor is.
+        Store an uncompressed file that ends with 0x504b0708, and see.
+        -- csm */
      
      if(write(jfd, data_descriptor, 16) != 16){
        perror("write");
        return 0;
      }
    }
+ 
+   if (existing)
+     {
+       int dd = (existing->flags & (1 << 3)) ? 12 : 0;
+       if (existing->next_entry && ze->csize < existing->csize + dd)
+ 	{
+ 	  if (shift_up (jfd, existing->next_entry->offset,
+ 			existing->csize + dd - ze->csize,
+ 			existing->next_entry))
+ 	    {
+ 	      perror (progname);
+ 	      return 1;
+ 	    }
+ 	}
+       /* Replace the existing entry data with this entry's. */
+       existing->csize = ze->csize;
+       existing->usize = ze->usize;
+       existing->crc = ze->crc;
+       existing->mod_time = ze->mod_time;
+       existing->mod_date = ze->mod_date;
+       free (ze->filename);
+       free (ze);
+     }
+   else if (updating)
+     end_of_entries = lseek (jfd, 0, SEEK_CUR);
    
    if(verbose)
      printf("(in=%d) (out=%d) (%s %d%%)\n", 
*************** int extract_jar(int fd, char **files, in
*** 1479,1486 ****
        exit(1);
      }
  
      if(method == 8 || flags & 0x0008){
-         consume(&pbf, eflen);
        
        inflate_file(&pbf, f_fd, &ze);
      } else {
--- 1805,1814 ----
        exit(1);
      }
  
+     if (eflen > 0)
+       consume(&pbf, eflen);
+ 
      if(method == 8 || flags & 0x0008){
        
        inflate_file(&pbf, f_fd, &ze);
      } else {
*************** int extract_jar(int fd, char **files, in
*** 1513,1520 ****
          printf("%d bytes written\n", out_a);
  #endif
        }
- 
-         consume(&pbf, eflen);
      }
  
      /* if there is a data descriptor left, compare the CRC */
--- 1841,1846 ----
*************** void version ()
*** 1890,1896 ****
  {
    printf("jar (%s) %s\n\n", PACKAGE, VERSION);
    printf("Copyright 1999, 2000, 2001  Bryan Burns\n");
!   printf("Copyright 2002 Free Software Foundation\n");
    printf("\
  This is free software; see the source for copying conditions.  There is NO\n\
  warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n");
--- 2216,2222 ----
  {
    printf("jar (%s) %s\n\n", PACKAGE, VERSION);
    printf("Copyright 1999, 2000, 2001  Bryan Burns\n");
!   printf("Copyright 2002, 2004 Free Software Foundation\n");
    printf("\
  This is free software; see the source for copying conditions.  There is NO\n\
  warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n");
diff -Nrcpad gcc-3.4.3/fastjar/jartool.h gcc-4.0.0/fastjar/jartool.h
*** gcc-3.4.3/fastjar/jartool.h	Wed Jul  7 03:16:28 2004
--- gcc-4.0.0/fastjar/jartool.h	Tue Jul  6 21:40:08 2004
***************
*** 52,57 ****
--- 52,61 ----
    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
   */
  
+ #ifndef __FASTJAR_JARTOOL_H__
+ #define __FASTJAR_JARTOOL_H__
+ 
+ #include <sys/types.h>
  #include "config.h"
  
  #define ACTION_NONE 0
*************** struct zipentry {
*** 104,112 ****
--- 108,119 ----
    ub4 usize;
    ub4 offset;
    ub1 compressed;
+   ub2 flags;
    char *filename;
    
    struct zipentry *next_entry;
  };
  
  typedef struct zipentry zipentry;
+ 
+ #endif /* __FASTJAR_JARTOOL_H__ */
diff -Nrcpad gcc-3.4.3/fastjar/shift.c gcc-4.0.0/fastjar/shift.c
*** gcc-3.4.3/fastjar/shift.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fastjar/shift.c	Tue Jul  6 21:40:08 2004
***************
*** 0 ****
--- 1,166 ----
+ /* shift.c -- utilities to move regions of data in a file.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or (at
+ your option) any later version.
+   
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+   
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA.  */
+ 
+ 
+ #include <sys/types.h>
+ #include <unistd.h>
+ #include <stdio.h>
+ #include "jartool.h"
+ #include "shift.h"
+ 
+ #define BUFFER_SIZE 1024
+ 
+ #define MIN(a, b) ((a) < (b) ? (a) : (b))
+ 
+ /*
+  * Shift the contents of a file up by `amount' bytes, starting at `begin'.
+  * The file is not truncated, data from `amount' to `begin - amount' is
+  * overwritten. The current file pointer of `fd' is preserved. Note that
+  * this might be past the new "end" of the file.
+  *
+  * If this function is passed a `struct zipentry', then all `offset'
+  * fields from that entry down the list that are greater than or equal
+  * to `begin' will be decreased by `amount'.
+  * 
+  * fd     - The file descriptor.
+  * begin  - The offset of the first byte that should be shifted.
+  * amount - The number of bytes to shift by.
+  * ze     - A pointer into a list of zip entries that should be updated
+  *          to reflect the modified offset.
+  */
+ int
+ shift_up (int fd, off_t begin, off_t amount, struct zipentry *ze)
+ {
+   extern off_t end_of_entries;
+   int len, moved = 0;
+   ub1 buffer[BUFFER_SIZE];
+   off_t where, end, save;
+ 
+   if (amount <= 0)
+     return 0;
+ 
+   if ((save = lseek (fd, 0, SEEK_CUR)) == -1)
+     return 1;
+   if ((end = lseek (fd, 0, SEEK_END)) == -1)
+     return 1;
+   if (end < begin)
+     return 0;
+ 
+   where = begin;
+ 
+   do
+     {
+       if (lseek (fd, where, SEEK_SET) < 0)
+ 	return 1;
+       if ((len = read (fd, buffer, BUFFER_SIZE)) < 0)
+ 	return 1;
+       if (len == 0)
+ 	break;
+       if (lseek (fd, where - amount, SEEK_SET) < 0)
+ 	return 1;
+       if (write (fd, buffer, len) < 0)
+ 	return 1;
+       where += len;
+     }
+   while (where < end);
+ 
+   for (; ze; ze = ze->next_entry)
+     {
+       if (ze->offset >= begin)
+ 	{
+ 	  ze->offset -= amount;
+ 	  moved = 1;
+ 	}
+     }
+   if (moved)
+     end_of_entries -= amount;
+ 
+   if (lseek (fd, save, SEEK_SET) == -1)
+     return 1;
+   return 0;
+ }
+ 
+ /*
+  * Shift the contents of this file down by `amount' bytes, extending the
+  * end of file, starting at `begin'. This function will preserve the
+  * current file pointer of `fd'. Naturally, this function will fail if
+  * `fd' is not seekable.
+  *
+  * If this function is passed a `struct zipentry', then all `offset'
+  * fields from that entry down the list that are greater than or equal
+  * to `begin' will be increased by `amount'.
+  *
+  * fd     - The file descriptor.
+  * begin  - The offset of the first byte that should be shifted.
+  * amount - The number of bytes to shift by.
+  * ze     - A pointer into a list of zip entries that should be updated
+  *          to reflect the modified offset.
+  */
+ int
+ shift_down (int fd, off_t begin, off_t amount, struct zipentry *ze)
+ {
+   extern off_t end_of_entries;
+   int off, len, moved = 0;
+   ub1 buffer[BUFFER_SIZE];
+   off_t where, save;
+ 
+   if (amount <= 0)
+     return 0;
+ 
+   if ((save = lseek (fd, 0, SEEK_CUR)) == -1)
+     return 1;
+   if ((where = lseek (fd, 0, SEEK_END)) == -1)
+     return 1;
+   if (where < begin)
+     return 0;
+   off = (where - begin) % BUFFER_SIZE;
+   if (off == 0)
+     where -= BUFFER_SIZE;
+   else
+     where -= off;
+ 
+   do
+     {
+       if (lseek (fd, where, SEEK_SET) < 0)
+ 	return 1;
+       if ((len = read (fd, buffer, BUFFER_SIZE)) < 0)
+ 	return 1;
+       if (lseek (fd, where + amount, SEEK_SET) < 0)
+ 	return 1;
+       if (write (fd, buffer, len) < 0)
+ 	return 1;
+       where -= BUFFER_SIZE;
+     }
+   while (where >= begin);
+ 
+   for (; ze; ze = ze->next_entry)
+     {
+       if (ze->offset >= begin)
+ 	{
+ 	  ze->offset += amount;
+ 	  moved = 1;
+ 	}
+     }
+   if (moved)
+     end_of_entries += amount;
+ 
+   if (lseek (fd, save, SEEK_SET) == -1)
+     return 1;
+ 
+   return 0;
+ }
diff -Nrcpad gcc-3.4.3/fastjar/shift.h gcc-4.0.0/fastjar/shift.h
*** gcc-3.4.3/fastjar/shift.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fastjar/shift.h	Tue Jul  6 21:40:08 2004
***************
*** 0 ****
--- 1,29 ----
+ /* shift.h -- utilities to move regions of data in a file.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or (at
+ your option) any later version.
+   
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+   
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA.  */
+ 
+ 
+ #ifndef __FASTJAR_SHIFT_H__
+ #define __FASTJAR_SHIFT_H__
+ 
+ #include <sys/types.h>
+ #include "jartool.h"
+ 
+ int shift_down (int, off_t, off_t, struct zipentry *);
+ int shift_up (int, off_t, off_t, struct zipentry *);
+ 
+ #endif /* __FASTJAR_SHIFT_H__ */
diff -Nrcpad gcc-3.4.3/fastjar/zipfile.h gcc-4.0.0/fastjar/zipfile.h
*** gcc-3.4.3/fastjar/zipfile.h	Sat Dec  9 03:08:23 2000
--- gcc-4.0.0/fastjar/zipfile.h	Tue Jul  6 21:40:08 2004
***************
*** 47,52 ****
--- 47,53 ----
  #define LOC_FNLEN   26 /* filename length */
  #define LOC_EFLEN   28 /* extra-field length */
  
+ #define CEN_FLAGS    8
  #define CEN_COMP    10 /* compression method */
  #define CEN_MODTIME 12
  #define CEN_MODDATE 14
diff -Nrcpad gcc-3.4.3/fixincludes/.cvsignore gcc-4.0.0/fixincludes/.cvsignore
*** gcc-3.4.3/fixincludes/.cvsignore	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/.cvsignore	Tue Aug 31 09:26:05 2004
***************
*** 0 ****
--- 1 ----
+ autom4te.cache
diff -Nrcpad gcc-3.4.3/fixincludes/ChangeLog gcc-4.0.0/fixincludes/ChangeLog
*** gcc-3.4.3/fixincludes/ChangeLog	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/ChangeLog	Thu Apr 21 05:17:31 2005
***************
*** 0 ****
--- 1,243 ----
+ 2005-04-20  Release Manager
+ 
+ 	* GCC 4.0.0 released.
+ 
+ 2005-03-21  Richard Guenther  <rguenth@gcc.gnu.org>
+ 
+ 	PR target/20166
+ 	* inclhack.def: Add fix for array of incomplete structures
+ 	in function prototype in pthread.h.
+ 	* fixincl.x: Regenerate.
+ 	* tests/base/pthread.h: Adjust.
+ 
+ 2005-03-15  Joseph S. Myers  <joseph@codesourcery.com>
+ 
+ 	* inclhack.def (hpux_htonl): New fix.
+ 	* tests/base/netinet/in.h: New test.
+ 	* fixincl.x: Regenerate.
+ 
+ 2005-02-23  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	* Makefile.in (full-stamp, test-stamp, $(AF)): Add $(CFLAGS) to link.
+ 
+ 2004-12-13  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR 18458
+ 	* Makefile.in (install): Add @EXEEXT@ to the end of the program name,
+ 	fixincl.
+ 
+ 2004-12-02  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* configure.ac: Use TL_AC_GCC_VERSION to set gcc_version.
+ 	* aclocal.m4: Include ../config/gcc-version.m4.
+ 	* configure: Regenerate.
+ 
+ 2004-11-26  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* inclhack.def (gnu_types): Do not use on Solaris 2.1x.
+ 	(stdio_va_list): Likewise.
+ 	(stdio_stdarg.h): Likewise.
+ 	(solaris_stdio_tag): Add bypass.
+ 	* fixincl.x: Regenerated.
+ 
+ 2004-11-23  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* mkfixinc.sh: Check error code from 'cat'.  Don't try running
+ 	built fixincl program.
+ 	* mkheaders.in: Use @SHELL@ rather than ${SHELL} to avoid picking
+ 	up csh from user.
+ 
+ 2004-11-20  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* inclhack.def (alpha_pthread_init): Fix technical problems with
+ 	the last check-in caused by CVS variable substitution.
+ 	* fixincl.x: Likewise.
+ 	* tests/base/pthread.h: Likewise.
+ 
+ 2004-11-20  Roger Sayle  <roger@eyesopen.com>
+ 	    Bruce Korb  <bkorb@gnu.org>
+ 
+ 	* inclhack.def (alpha_pthread_init): New fix.
+ 	* fixincl.x: Regenerate.
+ 	* tests/base/pthread.h: Update for new test.
+ 
+ 2004-11-15  Bruce Korb  <bkorb@gnu.org>
+ 
+ 	* fixincl.c(fix_with_system): correct misuse of variables and
+ 	incorrect application of "sizeof()".
+ 
+ 2004-11-13  Joseph S. Myers  <joseph@codesourcery.com>
+ 
+ 	* inclhack.def (hpux_maxint, limits_ifndefs, math_huge_val_ifndef,
+ 	svr4__p, undefine_null): Remove.
+ 	* fixincl.x: Regenerate.
+ 	* tests/base/AvailabilityMacros.h, tests/base/com_err.h: New.
+ 	* tests/base/sys/param.h: Remove.
+ 	* tests/base/curses.h, tests/base/math.h, tests/base/testing.h,
+ 	tests/base/sys/limits.h: Update.
+ 
+ 2004-11-12  Mike Stump  <mrs@apple.com>
+ 
+ 	* Makefile.in (html): Add html generation support.
+ 
+ 2004-11-12  Joseph S. Myers  <joseph@codesourcery.com>
+ 
+ 	* inclhack.def (sco_math): Bypass on __GNUG__.
+ 	(sysz_stdlib_for_sun): Bypass on _CLASSIC_ANSI_TYPES.
+ 	* fixincl.x: Regenerate.
+ 
+ 2004-11-09  Joseph S. Myers  <joseph@codesourcery.com>
+ 
+ 	* inclhack.def (hpux8_bogus_inlines): Bypass on __GNUG__.
+ 	(int_abort_free_and_exit, sun_malloc, sysv68_string): Bypass on
+ 	_CLASSIC_ANSI_TYPES.
+ 	(sun_auth_proto): Bypass on __cplusplus.
+ 	* fixincl.x: Regenerate.
+ 
+ 2004-11-05  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* Makefile.in (mostlyclean): Add fixinc.sh.
+ 	(clean): Add mkheaders.
+ 	(distclean): New.
+ 	(dvi): New.
+ 	(info): New.
+ 	(installcheck): New.
+ 
+ 2004-11-05  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* Makefile.in (mostlyclean, distclean): New targets.
+ 
+ 2004-11-04  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* configure.ac: Add code to determine noncanonical_target,
+ 	local_prefix, gcc_version; process mkheaders.in to make mkheaders.
+ 	* configure: Regenerate.
+ 	* fixinc.in: Move here from gcc/; fix many cross-hosting bugs.
+ 	* mkfixinc.sh: Move here from gcc/; update for changes to fixinc.in.
+ 	* mkheaders.in: Move here from gcc/; remove some unnecessary macros;
+ 	update for changes to fixinc.in.
+ 	* Makefile.in: Add many new macros.
+ 	(install): New target.
+ 	(mkheaders): New target.
+ 	(fixinc.sh): New target.
+ 	(all): Add mkheaders and fixinc.sh.
+ 	* README-fixinc: Move here from gcc/.
+ 
+ 2004-11-01  Mike Stump  <mrs@apple.com>
+ 
+ 	* inclhack.def (stdio_va_list): Break out clients from here...
+ 	(stdio_va_list_clients): ...to here.  Also, don't fix if stdarg.h is
+         included or ifdef va_start.
+ 	* fixincl.x: Regenerate.
+ 
+ 2004-10-28  Mike Stump  <mrs@apple.com>
+ 
+ 	* inclhack.def (void_null): Avoid changing NULL on C++ friendly
+ 	systems.
+ 	* fixincl.x: Regenerate.
+ 
+ 2004-10-27  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* inclhack.def (darwin_gcc4_breakage): New.
+ 	* fixincl.x: Regenerate.
+ 
+ 2004-10-27  Aaron W. LaFramboise  <aaronavay62@aaronwl.com>
+ 
+ 	PR bootstrap/17832
+ 
+ 	* fixfixes.c (main): Check for _PC_NAME_MAX.
+ 
+ 2004-10-27  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	PR other/17991
+ 
+ 	* configure.ac: Fix typo.
+ 	* configure: Regenerate.
+ 	* fixincl.c (fix_with_system): tSCC is not a pointer.  Fix.
+ 
+ 2004-10-20  Aaron W. LaFramboise  <aaronavay62@aaronwl.com>
+ 
+ 	PR bootstrap/17832
+ 
+ 	* fixincl.c (SIGCHLD): Remove definition.
+ 	(initialize): Remove SIGIOT and SIGPIPE checks.
+ 	(create_file): Fix mkdir() for Win32.
+ 	(internal_fix): Use dup2() instead of fcntl().
+ 
+ 	* fixlib.h (SIGQUIT): Define if undefined.
+ 	(SIGIOT): Same.
+ 	(SIGPIPE): Same.
+ 	(SIGALRM): Same.
+ 	(SIGKILL): Same.
+ 
+ 	* procopen.c (chain_open): Use dup2() instead of fcntl().
+ 
+ 2004-08-14  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	PR other/17991
+ 
+ 	* Makefile.in (ALLOBJ, TESTOBJ, FIXOBJ): Add fixopts.o.
+ 	Update copyright year.
+ 	* fixfixes.c (main): Call initialize_opts from fixopts.c.
+ 	* fixincl.c (initialize): Call initialize_opts from fixopts.c,
+ 	do not include code for parsing options (environment vars).
+ 	(fix_with_system): Use a search path for applyfix, so that you
+ 	can run the test suite with two-process fixincludes.
+ 	* fixopts.c: New file.
+ 	* configure.ac: Add --enable-twoprocess.  Export ac_exeext
+ 	to config.h.  Default to --enable-twoprocess for MinGW32.
+ 	* config.h.in: Regenerate.
+ 	* configure: Regenerate.
+ 
+ 2004-10-04  Loren J. Rittle  <ljrittle@acm.org>
+ 
+ 	* tests/base/sys/cdefs.h: Update from test area.
+ 
+ 2004-09-17  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* inclhack.def (linux_ia64_ucontext): New fix.
+ 	* fixincl.x: Regenerate.
+ 	* tests/base/sys/ucontext.h: New file.
+ 
+ 2004-09-15  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* tests/base/sys/time.h: Correct mismatch in 2004-09-10 check-in.
+ 	* tests/base/stdlib.h: Likewise.
+ 
+ 2004-09-13  Loren J. Rittle  <ljrittle@acm.org>
+ 
+ 	* inclhack.def (freebsd_gcc4_breakage): Add.
+ 	* fixincl.x: Regenerate.
+ 	* tests/base/sys/cdefs.h: Update for new test.
+ 
+ 2004-09-10  Adam Nemet  <anemet@lnxw.com>
+ 
+ 	* inclhack.def (lynx_void_int): Remove.
+ 	(lynxos_fcntl_proto): Remove.
+ 	(lynxos_no_warning_in_sys_time_h): New fix.
+ 	(lynxos_missing_putenv): New fix.
+ 	* fixincl.x: Regenerate.
+ 	* tests/base/fcntl.h: Remove.
+ 	* tests/base/sys/time.h: Update from test area.
+ 	* tests/base/curses.h: Likewise.
+ 	* tests/base/stdlib.h: Likewise.
+ 
+ 2004-09-03  Jan Beulich  <jbeulich@novell.com>
+ 
+ 	* inclhack.def: Suppress exception_structure and math_exception
+ 	for NetWare headers.
+ 	* fixincl.x: Regenerate.
+ 
+ 2004-08-31  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* .cvsignore: New.
+ 	* Makefile.in: From gcc/fixinc/Makefile.in, making it fully
+ 	autoconfiscated.
+ 	* configure.ac: New.
+ 	* config.h.in: Generate.
+ 	* configure: Generate.
+ 	* aclocal.m4: New.
+ 	* fixlib.h: Remove inclusions of gcc files.
+ 	* system.h: New.
+ 
+ 	Other files copied from gcc/fixinc.
diff -Nrcpad gcc-3.4.3/fixincludes/Makefile.in gcc-4.0.0/fixincludes/Makefile.in
*** gcc-3.4.3/fixincludes/Makefile.in	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/Makefile.in	Wed Feb 23 22:30:01 2005
***************
*** 0 ****
--- 1,184 ----
+ # Makefile for fixincludes.
+ #
+ #   Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004
+ #   Free Software Foundation, Inc.
+ 
+ #This file is part of fixincludes.
+ 
+ #fixincludes is free software; you can redistribute it and/or modify
+ #it under the terms of the GNU General Public License as published by
+ #the Free Software Foundation; either version 2, or (at your option)
+ #any later version.
+ 
+ #fixincludes is distributed in the hope that it will be useful,
+ #but WITHOUT ANY WARRANTY; without even the implied warranty of
+ #MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ #GNU General Public License for more details.
+ 
+ #You should have received a copy of the GNU General Public License
+ #along with fixincludes; see the file COPYING.  If not, write to
+ #the Free Software Foundation, 59 Temple Place - Suite 330,
+ #Boston, MA 02111-1307, USA.
+ 
+ SHELL=@SHELL@
+ 
+ # Some versions of `touch' (such as the version on Solaris 2.8) 
+ # do not correctly set the timestamp due to buggy versions of `utime'
+ # in the kernel.  So, we use `echo' instead. 
+ STAMP = echo timestamp >
+ 
+ CC = @CC@
+ CFLAGS = @CFLAGS@
+ LDFLAGS = @LDFLAGS@
+ INCLUDES = -I. -I$(srcdir) -I../include -I$(srcdir)/../include
+ FIXINC_CFLAGS = -DHAVE_CONFIG_H $(INCLUDES)
+ 
+ # Directory where sources are, from where we are.
+ srcdir = @srcdir@
+ VPATH = $(srcdir)
+ 
+ # Directory in which to put the directories used by the compiler.
+ libdir = @libdir@
+ # Directory in which GCC puts its executables.
+ libexecdir = @libexecdir@
+ 
+ # End of variables for you to override.
+ 
+ # The target that we're configured for.
+ target = @target@
+ target_noncanonical:=@target_noncanonical@
+ 
+ # The version of GCC in this tree
+ gcc_version=@gcc_version@
+ 
+ # Directory in which the compiler finds libraries etc.
+ libsubdir = $(libdir)/gcc/$(target_noncanonical)/$(version)
+ # Directory in which the compiler finds executables
+ libexecsubdir = $(libexecdir)/gcc/$(target_noncanonical)/$(gcc_version)
+ # Where our executable files go
+ itoolsdir = $(libexecsubdir)/install-tools
+ # Where our data files go
+ itoolsdatadir = $(libsubdir)/install-tools
+ 
+ # Locate mkinstalldirs.
+ mkinstalldirs=$(SHELL) $(srcdir)/../mkinstalldirs
+ 
+ default : all
+ 
+ # Now figure out from those variables how to compile and link.
+ 
+ .c.o:
+ 	$(CC) -c $(CFLAGS) $(CPPFLAGS) $(FIXINC_CFLAGS) $<
+ 
+ # The only suffixes we want for implicit rules are .c and .o.
+ .SUFFIXES:
+ .SUFFIXES: .c .o
+ 
+ #
+ 
+ ## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+ ##
+ ##  Makefile for constructing the "best" include fixer we can
+ ##
+ ## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+ 
+ LIBIBERTY=../libiberty/libiberty.a
+ 
+ ALLOBJ = fixincl.o fixtests.o fixfixes.o server.o procopen.o \
+       fixlib.o fixopts.o
+ 
+ TESTOBJ = fixincl.o fixlib.o fixtests.o fixopts.o
+ FIXOBJ  = fixfixes.o fixlib.o fixopts.o
+ 
+ HDR = server.h fixlib.h
+ FI  = fixincl@EXEEXT@
+ AF  = applyfix@EXEEXT@
+ 
+ all : @TARGET@ fixinc.sh mkheaders
+ gen : $(srcdir)/fixincl.x
+ 
+ 
+ oneprocess : full-stamp
+ twoprocess : test-stamp $(AF)
+ 
+ full-stamp : $(ALLOBJ) $(LIBIBERTY)
+ 	$(CC) $(CFLAGS) $(LDFLAGS) -o $(FI) $(ALLOBJ) $(LIBIBERTY)
+ 	$(STAMP) $@
+ 
+ test-stamp : $(TESTOBJ) $(LIBIBERTY)
+ 	$(CC) $(CFLAGS) $(LDFLAGS) -o $(FI) $(TESTOBJ) $(LIBIBERTY)
+ 	$(STAMP) $@
+ 
+ $(AF): $(FIXOBJ) $(LIBIBERTY)
+ 	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(FIXOBJ) $(LIBIBERTY)
+ 
+ $(ALLOBJ)   : $(HDR)
+ fixincl.o   : fixincl.c  $(srcdir)/fixincl.x
+ fixtests.o  : fixtests.c
+ fixfixes.o  : fixfixes.c $(srcdir)/fixincl.x
+ server.o    : server.c
+ procopen.o  : procopen.c
+ fixlib.o    : fixlib.c
+ 
+ fixinc.sh : fixinc.in mkfixinc.sh Makefile
+ 	srcdir="$(srcdir)" $(SHELL) $(srcdir)/mkfixinc.sh $(target)
+ 
+ $(srcdir)/fixincl.x: @MAINT@ fixincl.tpl inclhack.def
+ 	cd $(srcdir) ; $(SHELL) ./genfixes
+ 
+ mostlyclean : 
+ 	rm -f *.o *-stamp $(AF) $(FI) *~ fixinc.sh
+ 
+ clean: mostlyclean
+ 	rm -f mkheaders
+ 
+ distclean: clean
+ 	rm -f Makefile config.h config.log config.status stamp-h
+ 
+ maintainer-clean: distclean
+ 	rm -f $(srcdir)/fixincl.x
+ 
+ distclean : clean
+ 
+ Makefile: $(srcdir)/Makefile.in config.status
+ 	$(SHELL) ./config.status Makefile
+ 
+ mkheaders: $(srcdir)/mkheaders.in config.status
+ 	CONFIG_FILES=mkheaders CONFIG_HEADERS= ./config.status
+ 
+ config.h: stamp-h
+ stamp-h: $(srcdir)/config.h.in config.status
+ 	$(SHELL) ./config.status config.h
+ 
+ config.status: $(srcdir)/configure
+ 	$(SHELL) ./config.status --recheck
+ 
+ $(srcdir)/configure: @MAINT@ $(srcdir)/configure.ac
+ 	autoconf
+ 
+ $(srcdir)/config.h.in: @MAINT@ $(srcdir)/configure.ac
+ 	autoheader
+ 
+ $(srcdir)/aclocal.m4: @MAINT@ $(srcdir)/../gcc/aclocal.m4
+ 	cp $(srcdir)/../gcc/aclocal.m4 .
+ 
+ check : all
+ 	autogen -T $(srcdir)/check.tpl $(srcdir)/inclhack.def
+ 	$(SHELL) ./check.sh $(srcdir)/tests/base
+ 	@rm -f ./check.sh
+ 
+ install : all
+ 	-rm -rf $(DESTDIR)$(itoolsdir)
+ 	$(mkinstalldirs) $(DESTDIR)$(itoolsdir) 
+ 	$(mkinstalldirs) $(DESTDIR)$(itoolsdatadir)/include
+ 	$(INSTALL_DATA) $(srcdir)/README-fixinc \
+ 	  $(DESTDIR)$(itoolsdatadir)/include/README
+ 	$(INSTALL_SCRIPT) fixinc.sh $(DESTDIR)$(itoolsdir)/fixinc.sh
+ 	$(INSTALL_PROGRAM) fixincl@EXEEXT@ \
+ 	  $(DESTDIR)$(itoolsdir)/fixincl@EXEEXT@
+ 	$(INSTALL_SCRIPT) mkheaders $(DESTDIR)$(itoolsdir)/mkheaders
+ 
+ dvi :
+ info :
+ html :
+ installcheck :
diff -Nrcpad gcc-3.4.3/fixincludes/README gcc-4.0.0/fixincludes/README
*** gcc-3.4.3/fixincludes/README	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/README	Tue Aug 31 09:26:05 2004
***************
*** 0 ****
--- 1,299 ----
+ 
+ FIXINCLUDES OPERATION
+ =====================
+ 
+ See also:  http://autogen.SourceForge.net/fixinc.html
+ 
+ The set of fixes required was distilled down to just the data required
+ to specify what needed to happen for each fix.  Those data were edited
+ into a file named gcc/fixinc/inclhack.def.  A program called AutoGen
+ (http://autogen.SourceForge.net) uses these definitions to instantiate
+ several different templates that then produces code for a fixinclude
+ program (fixincl.x) and a shell script to test its functioning.  On
+ certain platforms (viz. those that do not have functional bidirectional
+ pipes), the fixincl program is split into two.  This should only concern
+ you on DOS and BeOS.
+ 
+ Regards,
+ 	Bruce <bkorb@gnu.org>
+ 
+ 
+ 
+ GCC MAINTAINER INFORMATION
+ ==========================
+ 
+ If you are having some problem with a system header that is either
+ broken by the manufacturer, or is broken by the fixinclude process,
+ then you will need to alter or add information to the include fix
+ definitions file, ``inclhack.def''.  Please also send relevant
+ information to gcc-bugs@gcc.gnu.org, gcc-patches@gcc.gnu.org and,
+ please, to me:  bkorb@gnu.org.
+ 
+ To make your fix, you will need to do several things:
+ 
+ 1.  Obtain access to the AutoGen program on some platform.  It does
+     not have to be your build platform, but it is more convenient.
+ 
+ 2.  Edit "inclhack.def" to reflect the changes you need to make.
+     See below for information on how to make those changes.
+ 
+ 3.  Run the "genfixes" shell script to produce a new copy of
+     the "fixincl.x" file.
+ 
+ 4.  Rebuild the compiler and check the header causing the issue.
+     Make sure it is now properly handled.  Add tests to the
+     "test_text" entry(ies) that validate your fix.  This will
+     help ensure that future fixes won't negate your work.
+ 
+ 5.  Go into the fixinc build directory and type, "make check".
+     You are guaranteed to have issues printed out as a result.
+     Look at the diffs produced.  Make sure you have not clobbered
+     the proper functioning of a different fix.  Make sure your
+     fix is properly tested and it does what it is supposed to do.
+ 
+ 6.  Now that you have the right things happening, syncronize the
+     $(srcdir)/tests/base directory with the $(builddir)/tests/res
+     directory.  The output of "make check" will be some diffs that
+     should give you some hints about what to do.
+ 
+ 7.  Rerun "make check" and verify that there are no issues left.
+ 
+ 
+ MAKING CHANGES TO INCLHACK.DEF
+ ==============================
+ 
+ 0.  If you are not the fixincludes maintainer, please send that
+     person email about any changes you may want to make.  Thanks!
+ 
+ 1.  Every fix must have a "hackname" that is compatible with C syntax
+     for variable names and is unique without regard to alphabetic case.
+     Please keep them alphabetical by this name.  :-)
+ 
+ 2.  If the problem is known to exist only in certain files,
+     then name each such file with a "files = " entry.
+ 
+ 3.  It is relatively expensive to fire off a process to fix a source
+     file, therefore write apply tests to avoid unnecessary fix
+     processes.  The preferred apply tests are "select", "bypass" and
+     "c_test" because they are performed internally.  "test" sends
+     a command to a server shell that actually fires off one or more
+     processes to do the testing.  Avoid it, if you can, but it is
+     still more efficient than a fix process.  Also available is
+     "mach".  If the target machine matches any of the named
+     globbing-style patterns, then the machine name test will pass.
+     It is desired, however, to limit the use of this test.
+ 
+     These tests are required to:
+ 
+     1.  Be positive for all header files that require the fix.
+ 
+     It is desireable to:
+ 
+     2.  Be negative as often as possible whenever the fix is not
+         required, avoiding the process overhead.
+ 
+     It is nice if:
+ 
+     3.  The expression is as simple as possible to both
+         process and understand by people.  :-)
+ 
+         Please take advantage of the fact AutoGen will glue
+         together string fragments.  It helps.  Also take note
+         that double quote strings and single quote strings have
+         different formation rules.  Double quote strings are a
+         tiny superset of ANSI-C string syntax.  Single quote
+         strings follow shell single quote string formation
+         rules, except that the backslash is processed before
+         '\\', '\'' and '#' characters (using C character syntax).
+ 
+     Examples of test specifications:
+ 
+       hackname = broken_assert_stdio;
+       files    = assert.h;
+       select   = stderr;
+       bypass   = "include.*stdio.h";
+ 
+     The ``broken_assert_stdio'' fix will be applied only to a file
+     named "assert.h" if it contains the string "stderr" _and_ it
+     does _not_ contain the expression "include.*stdio.h".
+ 
+       hackname = no_double_slash;
+       c_test   = "double_slash";
+ 
+     The ``no_double_slash'' fix will be applied if the
+     ``double_slash_test()'' function says to.  See ``fixtests.c''
+     for documentation on how to include new functions into that
+     module.
+ 
+ 4.  There are currently four methods of fixing a file:
+ 
+     1.  a series of sed expressions.  Each will be an individual
+         "-e" argument to a single invocation of sed.
+ 
+     2.  a shell script.  These scripts are _required_ to read all
+         of stdin in order to avoid pipe stalls.  They may choose to
+         discard the input.
+ 
+     3.  Replacement text.  If the replacement is empty, then no
+         fix is applied.  Otherwise, the replacement text is
+         written to the output file and no further fixes are
+         applied.  If you really want a no-op file, replace the
+         file with a comment.
+ 
+         Replacement text "fixes" must be first in this file!!
+ 
+     4.  A C language subroutine method for both tests and fixes.
+         See ``fixtests.c'' for instructions on writing C-language
+         applicability tests and ``fixfixes.c'' for C-language fixing.
+         These files also contain tables that describe the currently
+         implemented fixes and tests.
+ 
+     If at all possible, you should try to use one of the C language
+     fixes as it is far more efficient.  There are currently five
+     such fixes, three of which are very special purpose:
+ 
+     i) char_macro_def - This function repairs the definition of an
+         ioctl macro that presumes CPP macro substitution within
+         pairs of single quote characters.
+ 
+     ii) char_macro_use - This function repairs the usage of ioctl
+         macros that no longer can wrap an argument with single quotes.
+ 
+     iii) machine_name - This function will look at "#if", "#ifdef",
+         "#ifndef" and "#elif" directive lines and replace the first
+         occurrence of a non-reserved name that is traditionally
+         pre-defined by the native compiler.
+ 
+     The next two are for general use:
+ 
+     iv) wrap - wraps the entire file with "#ifndef", "#define" and
+         "#endif" self-exclusionary text.  It also, optionally, inserts
+         a prolog after the "#define" and an epilog just before the
+         "#endif".  You can use this for a fix as follows:
+ 
+             c_fix     = wrap;
+             c_fix_arg = "/* prolog text */";
+             c_fix_arg = "/* epilog text */";
+ 
+         If you want an epilog without a prolog, set the first "c_fix_arg"
+         to the empty string.  Both or the second "c_fix_arg"s may be
+         omitted and the file will still be wrapped.
+ 
+ 	THERE IS A SPECIAL EXCEPTION TO THIS, HOWEVER:
+ 
+ 	If the regular expression '#if.*__need' is found, then it is
+ 	assumed that the file needs to be read and interpreted more
+ 	than once.  However, the prolog and epilog text (if any) will
+ 	be inserted.
+ 
+     v) format - Replaces text selected with a regular expression with
+         a specialized formating string.  The formatting works as follows:
+         The format text is copied to the output until a '%' character
+         is found.  If the character after the '%' is another '%', then
+         one '%' is output and processing continues.  If the following
+         character is not a digit, then the '%' and that character are
+         copied and processing continues.  Finally, if the '%' *is*
+         followed by a digit, that digit is used as an index into the
+         regmatch_t array to replace the two characters with the matched
+         text.  i.e.: "%0" is replaced by the full matching text, "%1"
+         is the first matching sub-expression, etc.
+ 
+         This is used as follows:
+ 
+             c_fix     = format;
+             c_fix_arg = "#ifndef %1\n%0\n#endif";
+             c_fix_arg = "#define[ \t]+([A-Z][A-Z0-9a-z_]*).*";
+ 
+         This would wrap a traditional #define inside of a "#ifndef"/"#endif"
+         pair.  The second "c_fix_arg" may be omitted *IF* there is
+         a select clause and the first one matches the text you want
+         replaced.  You may delete text by supplying an empty string for
+         the format (the first "c_fix_arg").
+ 
+ 	Note: In general, a format c_fix may be used in place of one
+ 	sed expression.  However, it will need to be rewritten by
+ 	hand.  For example:
+ 
+ 	sed = 's@^#if __GNUC__ == 2 && __GNUC_MINOR__ >= 7$'
+ 	       '@& || __GNUC__ >= 3@';
+ 
+ 	may be rewritten using a format c_fix as:
+ 
+ 	c_fix     = format;
+ 	c_fix_arg = '%0 || __GNUC__ >= 3';
+ 	c_fix_arg = '^#if __GNUC__ == 2 && __GNUC_MINOR__ >= 7$';
+ 
+ 	Multiple sed substitution expressions probably ought to remain sed
+ 	expressions in order to maintain clarity.  Also note that if the
+ 	second sed expression is the same as the first select expression,
+ 	then you may omit the second c_fix_arg.  The select expression will
+ 	be picked up and used in its absence.
+ 
+ EXAMPLES OF FIXES:
+ ==================
+ 
+       hackname = AAA_ki_iface;
+       replace; /* empty replacement -> no fixing the file */
+ 
+     When this ``fix'' is invoked, it will prevent any fixes
+     from being applied.
+ 
+     ------------------
+ 
+       hackname = AAB_svr4_no_varargs;
+       replace  = "/* This file was generated by fixincludes.  */\n"
+                  "#ifndef _SYS_VARARGS_H\n"
+                  "#define _SYS_VARARGS_H\n\n"
+ 
+                  "#ifdef __STDC__\n"
+                  "#include <stdarg.h>\n"
+                  "#else\n"
+                  "#include <varargs.h>\n"
+                  "#endif\n\n"
+ 
+                  "#endif  /* _SYS_VARARGS_H */\n";
+ 
+     When this ``fix'' is invoked, the replacement text will be
+     emitted into the replacement include file.  No further fixes
+     will be applied.
+ 
+     ------------------
+ 
+         hackname  = hpux11_fabsf;
+         files     = math.h;
+         select    = "^[ \t]*#[ \t]*define[ \t]+fabsf\\(.*";
+         bypass    = "__cplusplus";
+ 
+         c_fix     = format;
+         c_fix_arg = "#ifndef __cplusplus\n%0\n#endif";
+ 
+         test_text =
+         "#  define fabsf(x) ((float)fabs((double)(float)(x)))\n";
+ 
+     This fix will ensure that the #define for fabs is wrapped
+     with C++ protection, providing the header is not already
+     C++ aware.
+ 
+     ------------------
+ 
+ 5.  Testing fixes.
+ 
+     The brute force method is, of course, to configure and build
+     GCC.  But you can also:
+ 
+         cd ${top_builddir}/gcc
+         rm -rf fixinc.sh include/ stmp-fixinc
+         make stmp-fixinc
+ 
+     I would really recommend, however:
+ 
+         cd ${top_builddir}/gcc/fixinc
+         make check
+ 
+     To do this, you *must* have autogen installed on your system.
+     The "check" step will proceed to construct a shell script that
+     will exercize all the fixes, using the sample test_text
+     provided with each fix.  Once done, the changes made will
+     be compared against the changes saved in the source directory.
+     If you are changing the tests or fixes, the change will likely
+     be highlighted.
diff -Nrcpad gcc-3.4.3/fixincludes/README-fixinc gcc-4.0.0/fixincludes/README-fixinc
*** gcc-3.4.3/fixincludes/README-fixinc	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/README-fixinc	Fri Nov  5 04:48:32 2004
***************
*** 0 ****
--- 1,14 ----
+ This README file is copied into the directory for GCC-only header files
+ when fixincludes is run by the makefile for GCC.
+ 
+ Many of the files in this directory were automatically edited from the
+ standard system header files by the fixincludes process.  They are
+ system-specific, and will not work on any other kind of system.  They
+ are also not part of GCC.  The reason we have to do this is because
+ GCC requires ANSI C headers and many vendors supply ANSI-incompatible
+ headers.
+ 
+ Because this is an automated process, sometimes headers get "fixed"
+ that do not, strictly speaking, need a fix.  As long as nothing is broken
+ by the process, it is just an unfortunate collateral inconvenience.
+ We would like to rectify it, if it is not "too inconvenient".
diff -Nrcpad gcc-3.4.3/fixincludes/aclocal.m4 gcc-4.0.0/fixincludes/aclocal.m4
*** gcc-3.4.3/fixincludes/aclocal.m4	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/aclocal.m4	Thu Dec  2 11:03:21 2004
***************
*** 0 ****
--- 1,679 ----
+ sinclude(../config/acx.m4)
+ sinclude(../config/accross.m4)
+ sinclude(../config/gcc-version.m4)
+ sinclude(../config/gettext.m4)
+ sinclude(../config/progtest.m4)
+ 
+ dnl See whether we need a declaration for a function.
+ dnl The result is highly dependent on the INCLUDES passed in, so make sure
+ dnl to use a different cache variable name in this macro if it is invoked
+ dnl in a different context somewhere else.
+ dnl gcc_AC_CHECK_DECL(SYMBOL,
+ dnl 	[ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, INCLUDES]]])
+ AC_DEFUN([gcc_AC_CHECK_DECL],
+ [AC_MSG_CHECKING([whether $1 is declared])
+ AC_CACHE_VAL(gcc_cv_have_decl_$1,
+ [AC_TRY_COMPILE([$4],
+ [#ifndef $1
+ char *(*pfn) = (char *(*)) $1 ;
+ #endif], eval "gcc_cv_have_decl_$1=yes", eval "gcc_cv_have_decl_$1=no")])
+ if eval "test \"`echo '$gcc_cv_have_decl_'$1`\" = yes"; then
+   AC_MSG_RESULT(yes) ; ifelse([$2], , :, [$2])
+ else
+   AC_MSG_RESULT(no) ; ifelse([$3], , :, [$3])
+ fi
+ ])dnl
+ 
+ dnl Check multiple functions to see whether each needs a declaration.
+ dnl Arrange to define HAVE_DECL_<FUNCTION> to 0 or 1 as appropriate.
+ dnl gcc_AC_CHECK_DECLS(SYMBOLS,
+ dnl 	[ACTION-IF-NEEDED [, ACTION-IF-NOT-NEEDED [, INCLUDES]]])
+ AC_DEFUN([gcc_AC_CHECK_DECLS],
+ [AC_FOREACH([gcc_AC_Func], [$1],
+   [AH_TEMPLATE(AS_TR_CPP(HAVE_DECL_[]gcc_AC_Func),
+   [Define to 1 if we found a declaration for ']gcc_AC_Func[', otherwise
+    define to 0.])])dnl
+ for ac_func in $1
+ do
+   ac_tr_decl=AS_TR_CPP([HAVE_DECL_$ac_func])
+ gcc_AC_CHECK_DECL($ac_func,
+   [AC_DEFINE_UNQUOTED($ac_tr_decl, 1) $2],
+   [AC_DEFINE_UNQUOTED($ac_tr_decl, 0) $3],
+ dnl It is possible that the include files passed in here are local headers
+ dnl which supply a backup declaration for the relevant prototype based on
+ dnl the definition of (or lack of) the HAVE_DECL_ macro.  If so, this test
+ dnl will always return success.  E.g. see libiberty.h's handling of
+ dnl `basename'.  To avoid this, we define the relevant HAVE_DECL_ macro to
+ dnl 1 so that any local headers used do not provide their own prototype
+ dnl during this test.
+ #undef $ac_tr_decl
+ #define $ac_tr_decl 1
+   $4
+ )
+ done
+ ])
+ 
+ dnl 'make compare' can be significantly faster, if cmp itself can
+ dnl skip bytes instead of using tail.  The test being performed is
+ dnl "if cmp --ignore-initial=2 t1 t2 && ! cmp --ignore-initial=1 t1 t2"
+ dnl but we need to sink errors and handle broken shells.  We also test
+ dnl for the parameter format "cmp file1 file2 skip1 skip2" which is
+ dnl accepted by cmp on some systems.
+ AC_DEFUN([gcc_AC_PROG_CMP_IGNORE_INITIAL],
+ [AC_CACHE_CHECK([for cmp's capabilities], gcc_cv_prog_cmp_skip,
+ [ echo abfoo >t1
+   echo cdfoo >t2
+   gcc_cv_prog_cmp_skip=slowcompare
+   if cmp --ignore-initial=2 t1 t2 > /dev/null 2>&1; then
+     if cmp --ignore-initial=1 t1 t2 > /dev/null 2>&1; then
+       :
+     else
+       gcc_cv_prog_cmp_skip=gnucompare
+     fi
+   fi
+   if test $gcc_cv_prog_cmp_skip = slowcompare ; then
+     if cmp t1 t2 2 2 > /dev/null 2>&1; then
+       if cmp t1 t2 1 1 > /dev/null 2>&1; then
+         :
+       else
+         gcc_cv_prog_cmp_skip=fastcompare
+       fi
+     fi
+   fi
+   rm t1 t2
+ ])
+ make_compare_target=$gcc_cv_prog_cmp_skip
+ AC_SUBST(make_compare_target)
+ ])
+ 
+ dnl See if the printf functions in libc support %p in format strings.
+ AC_DEFUN([gcc_AC_FUNC_PRINTF_PTR],
+ [AC_CACHE_CHECK(whether the printf functions support %p,
+   gcc_cv_func_printf_ptr,
+ [AC_TRY_RUN([#include <stdio.h>
+ 
+ int main()
+ {
+   char buf[64];
+   char *p = buf, *q = NULL;
+   sprintf(buf, "%p", p);
+   sscanf(buf, "%p", &q);
+   return (p != q);
+ }], gcc_cv_func_printf_ptr=yes, gcc_cv_func_printf_ptr=no,
+ 	gcc_cv_func_printf_ptr=no)
+ rm -f core core.* *.core])
+ if test $gcc_cv_func_printf_ptr = yes ; then
+   AC_DEFINE(HAVE_PRINTF_PTR, 1, [Define if printf supports "%p".])
+ fi
+ ])
+ 
+ dnl See if symbolic links work and if not, try to substitute either hard links or simple copy.
+ AC_DEFUN([gcc_AC_PROG_LN_S],
+ [AC_MSG_CHECKING(whether ln -s works)
+ AC_CACHE_VAL(gcc_cv_prog_LN_S,
+ [rm -f conftestdata_t
+ echo >conftestdata_f
+ if ln -s conftestdata_f conftestdata_t 2>/dev/null
+ then
+   gcc_cv_prog_LN_S="ln -s"
+ else
+   if ln conftestdata_f conftestdata_t 2>/dev/null
+   then
+     gcc_cv_prog_LN_S=ln
+   else
+     gcc_cv_prog_LN_S=cp
+   fi
+ fi
+ rm -f conftestdata_f conftestdata_t
+ ])dnl
+ LN_S="$gcc_cv_prog_LN_S"
+ if test "$gcc_cv_prog_LN_S" = "ln -s"; then
+   AC_MSG_RESULT(yes)
+ else
+   if test "$gcc_cv_prog_LN_S" = "ln"; then
+     AC_MSG_RESULT([no, using ln])
+   else
+     AC_MSG_RESULT([no, and neither does ln, so using cp])
+   fi
+ fi
+ AC_SUBST(LN_S)dnl
+ ])
+ 
+ dnl Define MKDIR_TAKES_ONE_ARG if mkdir accepts only one argument instead
+ dnl of the usual 2.
+ AC_DEFUN([gcc_AC_FUNC_MKDIR_TAKES_ONE_ARG],
+ [AC_CACHE_CHECK([if mkdir takes one argument], gcc_cv_mkdir_takes_one_arg,
+ [AC_TRY_COMPILE([
+ #include <sys/types.h>
+ #ifdef HAVE_SYS_STAT_H
+ # include <sys/stat.h>
+ #endif
+ #ifdef HAVE_UNISTD_H
+ # include <unistd.h>
+ #endif
+ #ifdef HAVE_DIRECT_H
+ # include <direct.h>
+ #endif], [mkdir ("foo", 0);], 
+         gcc_cv_mkdir_takes_one_arg=no, gcc_cv_mkdir_takes_one_arg=yes)])
+ if test $gcc_cv_mkdir_takes_one_arg = yes ; then
+   AC_DEFINE(MKDIR_TAKES_ONE_ARG, 1, [Define if host mkdir takes a single argument.])
+ fi
+ ])
+ 
+ AC_DEFUN([gcc_AC_PROG_INSTALL],
+ [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+ # Find a good install program.  We prefer a C program (faster),
+ # so one script is as good as another.  But avoid the broken or
+ # incompatible versions:
+ # SysV /etc/install, /usr/sbin/install
+ # SunOS /usr/etc/install
+ # IRIX /sbin/install
+ # AIX /bin/install
+ # AFS /usr/afsws/bin/install, which mishandles nonexistent args
+ # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+ # ./install, which can be erroneously created by make from ./install.sh.
+ AC_MSG_CHECKING(for a BSD compatible install)
+ if test -z "$INSTALL"; then
+ AC_CACHE_VAL(ac_cv_path_install,
+ [  IFS="${IFS= 	}"; ac_save_IFS="$IFS"; IFS="${IFS}:"
+   for ac_dir in $PATH; do
+     # Account for people who put trailing slashes in PATH elements.
+     case "$ac_dir/" in
+     /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
+     *)
+       # OSF1 and SCO ODT 3.0 have their own names for install.
+       for ac_prog in ginstall scoinst install; do
+         if test -f $ac_dir/$ac_prog; then
+ 	  if test $ac_prog = install &&
+             grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
+ 	    # AIX install.  It has an incompatible calling convention.
+ 	    # OSF/1 installbsd also uses dspmsg, but is usable.
+ 	    :
+ 	  else
+ 	    ac_cv_path_install="$ac_dir/$ac_prog -c"
+ 	    break 2
+ 	  fi
+ 	fi
+       done
+       ;;
+     esac
+   done
+   IFS="$ac_save_IFS"
+ ])dnl
+   if test "${ac_cv_path_install+set}" = set; then
+     INSTALL="$ac_cv_path_install"
+   else
+     # As a last resort, use the slow shell script.  We don't cache a
+     # path for INSTALL within a source directory, because that will
+     # break other packages using the cache if that directory is
+     # removed, or if the path is relative.
+     INSTALL="$ac_install_sh"
+   fi
+ fi
+ dnl We do special magic for INSTALL instead of AC_SUBST, to get
+ dnl relative paths right.
+ AC_MSG_RESULT($INSTALL)
+ AC_SUBST(INSTALL)dnl
+ 
+ # Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+ # It thinks the first close brace ends the variable substitution.
+ test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+ AC_SUBST(INSTALL_PROGRAM)dnl
+ 
+ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+ AC_SUBST(INSTALL_DATA)dnl
+ ])
+ 
+ dnl GCC_PATH_PROG(VARIABLE, PROG-TO-CHECK-FOR [, VALUE-IF-NOT-FOUND [, PATH]])
+ dnl like AC_PATH_PROG but use other cache variables
+ AC_DEFUN([GCC_PATH_PROG],
+ [# Extract the first word of "$2", so it can be a program name with args.
+ set dummy $2; ac_word=[$]2
+ AC_MSG_CHECKING([for $ac_word])
+ AC_CACHE_VAL(gcc_cv_path_$1,
+ [case "[$]$1" in
+   /*)
+   gcc_cv_path_$1="[$]$1" # Let the user override the test with a path.
+   ;;
+   ?:/*)			 
+   gcc_cv_path_$1="[$]$1" # Let the user override the test with a dos path.
+   ;;
+   *)
+   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
+ dnl $ac_dummy forces splitting on constant user-supplied paths.
+ dnl POSIX.2 word splitting is done only on the output of word expansions,
+ dnl not every word.  This closes a longstanding sh security hole.
+   ac_dummy="ifelse([$4], , $PATH, [$4])"
+   for ac_dir in $ac_dummy; do 
+     test -z "$ac_dir" && ac_dir=.
+     if test -f $ac_dir/$ac_word; then
+       gcc_cv_path_$1="$ac_dir/$ac_word"
+       break
+     fi
+   done
+   IFS="$ac_save_ifs"
+ dnl If no 3rd arg is given, leave the cache variable unset,
+ dnl so GCC_PATH_PROGS will keep looking.
+ ifelse([$3], , , [  test -z "[$]gcc_cv_path_$1" && gcc_cv_path_$1="$3"
+ ])dnl
+   ;;
+ esac])dnl
+ $1="$gcc_cv_path_$1"
+ if test -n "[$]$1"; then
+   AC_MSG_RESULT([$]$1)
+ else
+   AC_MSG_RESULT(no)
+ fi
+ AC_SUBST($1)dnl
+ ])
+ 
+ # mmap(2) blacklisting.  Some platforms provide the mmap library routine
+ # but don't support all of the features we need from it.
+ AC_DEFUN([gcc_AC_FUNC_MMAP_BLACKLIST],
+ [
+ AC_CHECK_HEADER([sys/mman.h],
+ 		[gcc_header_sys_mman_h=yes], [gcc_header_sys_mman_h=no])
+ AC_CHECK_FUNC([mmap], [gcc_func_mmap=yes], [gcc_func_mmap=no])
+ if test "$gcc_header_sys_mman_h" != yes \
+  || test "$gcc_func_mmap" != yes; then
+    gcc_cv_func_mmap_file=no
+    gcc_cv_func_mmap_dev_zero=no
+    gcc_cv_func_mmap_anon=no
+ else
+    AC_CACHE_CHECK([whether read-only mmap of a plain file works], 
+   gcc_cv_func_mmap_file,
+   [# Add a system to this blacklist if 
+    # mmap(0, stat_size, PROT_READ, MAP_PRIVATE, fd, 0) doesn't return a
+    # memory area containing the same data that you'd get if you applied
+    # read() to the same fd.  The only system known to have a problem here
+    # is VMS, where text files have record structure.
+    case "$host_os" in
+      vms* | ultrix*) 
+         gcc_cv_func_mmap_file=no ;;
+      *)
+         gcc_cv_func_mmap_file=yes;;
+    esac])
+    AC_CACHE_CHECK([whether mmap from /dev/zero works],
+   gcc_cv_func_mmap_dev_zero,
+   [# Add a system to this blacklist if it has mmap() but /dev/zero
+    # does not exist, or if mmapping /dev/zero does not give anonymous
+    # zeroed pages with both the following properties:
+    # 1. If you map N consecutive pages in with one call, and then
+    #    unmap any subset of those pages, the pages that were not
+    #    explicitly unmapped remain accessible.
+    # 2. If you map two adjacent blocks of memory and then unmap them
+    #    both at once, they must both go away.
+    # Systems known to be in this category are Windows (all variants),
+    # VMS, and Darwin.
+    case "$host_os" in
+      vms* | cygwin* | pe | mingw* | darwin* | ultrix* | hpux10* | hpux11.00)
+         gcc_cv_func_mmap_dev_zero=no ;;
+      *)
+         gcc_cv_func_mmap_dev_zero=yes;;
+    esac])
+ 
+    # Unlike /dev/zero, the MAP_ANON(YMOUS) defines can be probed for.
+    AC_CACHE_CHECK([for MAP_ANON(YMOUS)], gcc_cv_decl_map_anon,
+     [AC_TRY_COMPILE(
+ [#include <sys/types.h>
+ #include <sys/mman.h>
+ #include <unistd.h>
+ 
+ #ifndef MAP_ANONYMOUS
+ #define MAP_ANONYMOUS MAP_ANON
+ #endif
+ ],
+ [int n = MAP_ANONYMOUS;],
+     gcc_cv_decl_map_anon=yes,
+     gcc_cv_decl_map_anon=no)])
+ 
+    if test $gcc_cv_decl_map_anon = no; then
+      gcc_cv_func_mmap_anon=no
+    else
+      AC_CACHE_CHECK([whether mmap with MAP_ANON(YMOUS) works],
+      gcc_cv_func_mmap_anon,
+   [# Add a system to this blacklist if it has mmap() and MAP_ANON or
+    # MAP_ANONYMOUS, but using mmap(..., MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)
+    # doesn't give anonymous zeroed pages with the same properties listed
+    # above for use of /dev/zero.
+    # Systems known to be in this category are Windows, VMS, and SCO Unix.
+    case "$host_os" in
+      vms* | cygwin* | pe | mingw* | sco* | udk* )
+         gcc_cv_func_mmap_anon=no ;;
+      *)
+         gcc_cv_func_mmap_anon=yes;;
+    esac])
+    fi
+ fi
+ 
+ if test $gcc_cv_func_mmap_file = yes; then
+   AC_DEFINE(HAVE_MMAP_FILE, 1,
+ 	    [Define if read-only mmap of a plain file works.])
+ fi
+ if test $gcc_cv_func_mmap_dev_zero = yes; then
+   AC_DEFINE(HAVE_MMAP_DEV_ZERO, 1,
+ 	    [Define if mmap of /dev/zero works.])
+ fi
+ if test $gcc_cv_func_mmap_anon = yes; then
+   AC_DEFINE(HAVE_MMAP_ANON, 1,
+ 	    [Define if mmap with MAP_ANON(YMOUS) works.])
+ fi
+ ])
+ 
+ dnl Locate a program and check that its version is acceptable.
+ dnl AC_PROG_CHECK_VER(var, name, version-switch,
+ dnl                  version-extract-regexp, version-glob)
+ AC_DEFUN([gcc_AC_CHECK_PROG_VER],
+ [AC_CHECK_PROG([$1], [$2], [$2])
+ if test -n "[$]$1"; then
+   # Found it, now check the version.
+   AC_CACHE_CHECK(for modern $2, gcc_cv_prog_$2_modern,
+ [changequote(<<,>>)dnl
+   ac_prog_version=`<<$>>$1 $3 2>&1 |
+                    sed -n 's/^.*patsubst(<<$4>>,/,\/).*$/\1/p'`
+ changequote([,])dnl
+   echo "configure:__oline__: version of $2 is $ac_prog_version" >&AC_FD_CC
+ changequote(<<,>>)dnl
+   case $ac_prog_version in
+     '')     gcc_cv_prog_$2_modern=no;;
+     <<$5>>)
+             gcc_cv_prog_$2_modern=yes;;
+     *)      gcc_cv_prog_$2_modern=no;;
+   esac
+ changequote([,])dnl
+ ])
+ else
+   gcc_cv_prog_$2_modern=no
+ fi
+ ])
+ 
+ dnl Determine if enumerated bitfields are unsigned.   ISO C says they can 
+ dnl be either signed or unsigned.
+ dnl
+ AC_DEFUN([gcc_AC_C_ENUM_BF_UNSIGNED],
+ [AC_CACHE_CHECK(for unsigned enumerated bitfields, gcc_cv_enum_bf_unsigned,
+ [AC_TRY_RUN(#include <stdlib.h>
+ enum t { BLAH = 128 } ;
+ struct s_t { enum t member : 8; } s ;
+ int main(void)
+ {            
+         s.member = BLAH;
+         if (s.member < 0) exit(1);
+         exit(0);
+ 
+ }, gcc_cv_enum_bf_unsigned=yes, gcc_cv_enum_bf_unsigned=no, gcc_cv_enum_bf_unsigned=yes)])
+ if test $gcc_cv_enum_bf_unsigned = yes; then
+   AC_DEFINE(ENUM_BITFIELDS_ARE_UNSIGNED, 1,
+     [Define if enumerated bitfields are treated as unsigned values.])
+ fi])
+ 
+ dnl Probe number of bits in a byte.
+ dnl Note C89 requires CHAR_BIT >= 8.
+ dnl
+ AC_DEFUN([gcc_AC_C_CHAR_BIT],
+ [AC_CACHE_CHECK(for CHAR_BIT, gcc_cv_decl_char_bit,
+ [AC_EGREP_CPP(found,
+ [#ifdef HAVE_LIMITS_H
+ #include <limits.h>
+ #endif
+ #ifdef CHAR_BIT
+ found
+ #endif], gcc_cv_decl_char_bit=yes, gcc_cv_decl_char_bit=no)
+ ])
+ if test $gcc_cv_decl_char_bit = no; then
+   AC_CACHE_CHECK(number of bits in a byte, gcc_cv_c_nbby,
+ [i=8
+  gcc_cv_c_nbby=
+  while test $i -lt 65; do
+    AC_TRY_COMPILE(,
+      [switch(0) {
+   case (unsigned char)((unsigned long)1 << $i) == ((unsigned long)1 << $i):
+   case (unsigned char)((unsigned long)1<<($i-1)) == ((unsigned long)1<<($i-1)):
+   ; }], 
+      [gcc_cv_c_nbby=$i; break])
+    i=`expr $i + 1`
+  done
+  test -z "$gcc_cv_c_nbby" && gcc_cv_c_nbby=failed
+ ])
+ if test $gcc_cv_c_nbby = failed; then
+   AC_MSG_ERROR(cannot determine number of bits in a byte)
+ else
+   AC_DEFINE_UNQUOTED(CHAR_BIT, $gcc_cv_c_nbby,
+   [Define as the number of bits in a byte, if \`limits.h' doesn't.])
+ fi
+ fi])
+ 
+ dnl Checking for long long.
+ dnl By Caolan McNamara <caolan@skynet.ie>
+ dnl Added check for __int64, Zack Weinberg <zackw@stanford.edu>
+ dnl
+ AC_DEFUN([gcc_AC_C_LONG_LONG],
+ [AC_CACHE_CHECK(for long long int, ac_cv_c_long_long,
+   [AC_TRY_COMPILE(,[long long int i;],
+          ac_cv_c_long_long=yes,
+          ac_cv_c_long_long=no)])
+   if test $ac_cv_c_long_long = yes; then
+     AC_DEFINE(HAVE_LONG_LONG, 1,
+       [Define if your compiler supports the \`long long' type.])
+   fi
+ AC_CACHE_CHECK(for __int64, ac_cv_c___int64,
+   [AC_TRY_COMPILE(,[__int64 i;],
+ 	ac_cv_c___int64=yes,
+ 	ac_cv_c___int64=no)])
+   if test $ac_cv_c___int64 = yes; then
+     AC_DEFINE(HAVE___INT64, 1,
+       [Define if your compiler supports the \`__int64' type.])
+   fi
+ ])
+ 
+ #serial AM2
+ 
+ dnl From Bruno Haible.
+ 
+ AC_DEFUN([AM_ICONV],
+ [
+   dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
+   dnl those with the standalone portable GNU libiconv installed).
+ 
+   am_cv_lib_iconv_ldpath=
+   AC_ARG_WITH([libiconv-prefix],
+ [  --with-libiconv-prefix=DIR  search for libiconv in DIR/include and DIR/lib], [
+     for dir in `echo "$withval" | tr : ' '`; do
+       if test -d $dir/include; then CPPFLAGS="$CPPFLAGS -I$dir/include"; fi
+       if test -d $dir/lib; then am_cv_lib_iconv_ldpath="-L$dir/lib"; fi
+     done
+    ])
+ 
+   AC_CHECK_HEADERS([iconv.h])
+ 
+   AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [
+     am_cv_func_iconv="no, consider installing GNU libiconv"
+     am_cv_lib_iconv=no
+     AC_TRY_LINK([#include <stdlib.h>
+ #include <iconv.h>],
+       [iconv_t cd = iconv_open("","");
+        iconv(cd,NULL,NULL,NULL,NULL);
+        iconv_close(cd);],
+       am_cv_func_iconv=yes)
+     if test "$am_cv_func_iconv" != yes; then
+       am_save_LIBS="$LIBS"
+       LIBS="$LIBS $am_cv_libiconv_ldpath -liconv"
+       AC_TRY_LINK([#include <stdlib.h>
+ #include <iconv.h>],
+         [iconv_t cd = iconv_open("","");
+          iconv(cd,NULL,NULL,NULL,NULL);
+          iconv_close(cd);],
+         am_cv_lib_iconv=yes
+         am_cv_func_iconv=yes)
+       LIBS="$am_save_LIBS"
+     fi
+   ])
+   if test "$am_cv_func_iconv" = yes; then
+     AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])
+     AC_MSG_CHECKING([for iconv declaration])
+     AC_CACHE_VAL(am_cv_proto_iconv, [
+       AC_TRY_COMPILE([
+ #include <stdlib.h>
+ #include <iconv.h>
+ extern
+ #ifdef __cplusplus
+ "C"
+ #endif
+ #if defined(__STDC__) || defined(__cplusplus)
+ size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+ #else
+ size_t iconv();
+ #endif
+ ], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const")
+       am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
+     am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+     AC_MSG_RESULT([$]{ac_t:-
+          }[$]am_cv_proto_iconv)
+     AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1,
+       [Define as const if the declaration of iconv() needs const.])
+   fi
+   LIBICONV=
+   if test "$am_cv_lib_iconv" = yes; then
+     LIBICONV="$am_cv_lib_iconv_ldpath -liconv"
+   fi
+   AC_SUBST(LIBICONV)
+ ])
+ 
+ AC_DEFUN([gcc_AC_INITFINI_ARRAY],
+ [AC_ARG_ENABLE(initfini-array,
+ 	[  --enable-initfini-array	use .init_array/.fini_array sections],
+ 	[], [
+ AC_CACHE_CHECK(for .preinit_array/.init_array/.fini_array support,
+ 		 gcc_cv_initfini_array, [dnl
+   AC_TRY_RUN([
+ static int x = -1;
+ int main (void) { return x; }
+ int foo (void) { x = 0; }
+ int (*fp) (void) __attribute__ ((section (".init_array"))) = foo;],
+ 	     [gcc_cv_initfini_array=yes], [gcc_cv_initfini_array=no],
+ 	     [gcc_cv_initfini_array=no])])
+   enable_initfini_array=$gcc_cv_initfini_array
+ ])
+ if test $enable_initfini_array = yes; then
+   AC_DEFINE(HAVE_INITFINI_ARRAY, 1,
+     [Define .init_array/.fini_array sections are available and working.])
+ fi])
+ 
+ dnl # _gcc_COMPUTE_GAS_VERSION
+ dnl # Used by gcc_GAS_VERSION_GTE_IFELSE
+ dnl #
+ dnl # WARNING:
+ dnl # gcc_cv_as_gas_srcdir must be defined before this.
+ dnl # This gross requirement will go away eventually.
+ AC_DEFUN([_gcc_COMPUTE_GAS_VERSION],
+ [gcc_cv_as_bfd_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/bfd
+ for f in $gcc_cv_as_bfd_srcdir/configure \
+          $gcc_cv_as_gas_srcdir/configure \
+          $gcc_cv_as_gas_srcdir/configure.in \
+          $gcc_cv_as_gas_srcdir/Makefile.in ; do
+   gcc_cv_gas_version=`grep '^VERSION=[[0-9]]*\.[[0-9]]*' $f`
+   if test x$gcc_cv_gas_version != x; then
+     break
+   fi
+ done
+ gcc_cv_gas_major_version=`expr "$gcc_cv_gas_version" : "VERSION=\([[0-9]]*\)"`
+ gcc_cv_gas_minor_version=`expr "$gcc_cv_gas_version" : "VERSION=[[0-9]]*\.\([[0-9]]*\)"`
+ gcc_cv_gas_patch_version=`expr "$gcc_cv_gas_version" : "VERSION=[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)"`
+ case $gcc_cv_gas_patch_version in
+   "") gcc_cv_gas_patch_version="0" ;;
+ esac
+ gcc_cv_gas_vers=`expr \( \( $gcc_cv_gas_major_version \* 1000 \) \
+ 			    + $gcc_cv_gas_minor_version \) \* 1000 \
+ 			    + $gcc_cv_gas_patch_version`
+ ]) []dnl # _gcc_COMPUTE_GAS_VERSION
+ 
+ dnl # gcc_GAS_VERSION_GTE_IFELSE([elf,] major, minor, patchlevel,
+ dnl #                     [command_if_true = :], [command_if_false = :])
+ dnl # Check to see if the version of GAS is greater than or
+ dnl # equal to the specified version.
+ dnl #
+ dnl # The first ifelse() shortens the shell code if the patchlevel
+ dnl # is unimportant (the usual case).  The others handle missing
+ dnl # commands.  Note that the tests are structured so that the most
+ dnl # common version number cases are tested first.
+ AC_DEFUN([_gcc_GAS_VERSION_GTE_IFELSE],
+ [ifelse([$1], elf,
+  [if test $in_tree_gas_is_elf = yes \
+   &&],
+  [if]) test $gcc_cv_gas_vers -ge `expr \( \( $2 \* 1000 \) + $3 \) \* 1000 + $4`
+   then dnl
+ ifelse([$5],,:,[$5])[]dnl
+ ifelse([$6],,,[
+   else $6])
+ fi])
+ 
+ AC_DEFUN([gcc_GAS_VERSION_GTE_IFELSE],
+ [AC_REQUIRE([_gcc_COMPUTE_GAS_VERSION])dnl
+ ifelse([$1], elf, [_gcc_GAS_VERSION_GTE_IFELSE($@)],
+                   [_gcc_GAS_VERSION_GTE_IFELSE(,$@)])])
+ 
+ dnl gcc_GAS_CHECK_FEATURE(description, cv, [[elf,]major,minor,patchlevel],
+ dnl [extra switches to as], [assembler input],
+ dnl [extra testing logic], [command if feature available])
+ dnl
+ dnl Checks for an assembler feature.  If we are building an in-tree
+ dnl gas, the feature is available if the associated assembler version
+ dnl is greater than or equal to major.minor.patchlevel.  If not, then
+ dnl ASSEMBLER INPUT is fed to the assembler and the feature is available
+ dnl if assembly succeeds.  If EXTRA TESTING LOGIC is not the empty string,
+ dnl then it is run instead of simply setting CV to "yes" - it is responsible
+ dnl for doing so, if appropriate.
+ AC_DEFUN([gcc_GAS_CHECK_FEATURE],
+ [AC_CACHE_CHECK([assembler for $1], [$2],
+  [[$2]=no
+   ifelse([$3],,,[dnl
+   if test $in_tree_gas = yes; then
+     gcc_GAS_VERSION_GTE_IFELSE($3, [[$2]=yes])
+   el])if test x$gcc_cv_as != x; then
+     echo ifelse(m4_substr([$5],0,1),[$], "[$5]", '[$5]') > conftest.s
+     if AC_TRY_COMMAND([$gcc_cv_as $4 -o conftest.o conftest.s >&AC_FD_CC])
+     then
+ 	ifelse([$6],, [$2]=yes, [$6])
+     else
+       echo "configure: failed program was" >&AC_FD_CC
+       cat conftest.s >&AC_FD_CC
+     fi
+     rm -f conftest.o conftest.s
+   fi])
+ ifelse([$7],,,[dnl
+ if test $[$2] = yes; then
+   $7
+ fi])])
+ 
+ # lcmessage.m4 serial 3 (gettext-0.11.3)
+ dnl Copyright (C) 1995-2002 Free Software Foundation, Inc.
+ dnl This file is free software, distributed under the terms of the GNU
+ dnl General Public License.  As a special exception to the GNU General
+ dnl Public License, this file may be distributed as part of a program
+ dnl that contains a configuration script generated by Autoconf, under
+ dnl the same distribution terms as the rest of that program.
+ dnl
+ dnl This file can can be used in projects which are not available under
+ dnl the GNU General Public License or the GNU Library General Public
+ dnl License but which still want to provide support for the GNU gettext
+ dnl functionality.
+ dnl Please note that the actual code of the GNU gettext library is covered
+ dnl by the GNU Library General Public License, and the rest of the GNU
+ dnl gettext package package is covered by the GNU General Public License.
+ dnl They are *not* in the public domain.
+ 
+ dnl Authors:
+ dnl   Ulrich Drepper <drepper@cygnus.com>, 1995.
+ 
+ # Check whether LC_MESSAGES is available in <locale.h>.
+ 
+ AC_DEFUN([AM_LC_MESSAGES],
+ [
+   AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
+     [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
+        am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
+   if test $am_cv_val_LC_MESSAGES = yes; then
+     AC_DEFINE(HAVE_LC_MESSAGES, 1,
+       [Define if your <locale.h> file defines LC_MESSAGES.])
+   fi
+ ])
diff -Nrcpad gcc-3.4.3/fixincludes/check.tpl gcc-4.0.0/fixincludes/check.tpl
*** gcc-3.4.3/fixincludes/check.tpl	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/check.tpl	Tue Aug 31 09:26:05 2004
***************
*** 0 ****
--- 1,176 ----
+ [= autogen5 template sh=check.sh =]
+ [=
+ #
+ #  This file contanes the shell template to run tests on the fixes
+ #
+ =]#!/bin/sh
+ 
+ set -e
+ TESTDIR=tests
+ TESTBASE=`cd $1;${PWDCMD-pwd}`
+ 
+ [ -d ${TESTDIR} ] || mkdir ${TESTDIR}
+ cd ${TESTDIR}
+ TESTDIR=`${PWDCMD-pwd}`
+ 
+ TARGET_MACHINE='*'
+ DESTDIR=`${PWDCMD-pwd}`/res
+ SRCDIR=`${PWDCMD-pwd}`/inc
+ FIND_BASE='.'
+ VERBOSE=[=` echo ${VERBOSE-1} `=]
+ INPUT=`${PWDCMD-pwd}`
+ ORIGDIR=${INPUT}
+ 
+ export TARGET_MACHINE DESTDIR SRCDIR FIND_BASE VERBOSE INPUT ORIGDIR
+ 
+ rm -rf ${DESTDIR} ${SRCDIR}
+ mkdir ${DESTDIR} ${SRCDIR}
+ (
+ [=
+   (shellf
+     "for f in %s
+      do case $f in
+         */* ) echo $f | sed 's;/[^/]*$;;' ;;
+         esac
+      done | sort -u | \
+      while read g
+      do echo \"  mkdir \\${SRCDIR}/$g || mkdir -p \\${SRCDIR}/$g || exit 1\"
+      done" (join " " (stack "fix.files"))  ) =]
+ ) 2> /dev/null[= # suppress 'No such file or directory' messages =]
+ cd inc
+ [=
+ (define sfile "")
+ (define HACK  "")
+ (define dfile "")              =][=
+ 
+ FOR fix                        =][=
+ 
+   IF (> (count "test_text") 1) =][=
+     (set! HACK (string-upcase! (get "hackname")))
+     (set! sfile (if (exist? "files") (get "files[]") "testing.h"))
+     (set! dfile (string-append
+           (if (*==* sfile "/")
+               (shellf "echo \"%s\"|sed 's,/[^/]*,/,'" sfile )
+               "" )
+           (string-tr! (get "hackname") "_A-Z" "-a-z")
+     )           )              =][=
+ 
+     FOR test_text (for-from 1) =]
+ cat >> [=(. sfile)=] <<_HACK_EOF_
+ 
+ 
+ #if defined( [=(. HACK)=]_CHECK_[=(for-index)=] )
+ [=test_text=]
+ #endif  /* [=(. HACK)=]_CHECK_[=(for-index)=] */
+ _HACK_EOF_
+ echo [=(. sfile)=] | ../../fixincl
+ mv -f [=(. sfile)=] [=(. dfile)=]-[=(for-index)=].h
+ [ -f ${DESTDIR}/[=(. sfile)=] ] && [=#
+    =]mv ${DESTDIR}/[=(. sfile)=] ${DESTDIR}/[=(. dfile)=]-[=(for-index)=].h[=
+ 
+     ENDFOR  test_text =][=
+ 
+   ENDIF  multi-test   =][=
+ 
+ ENDFOR  fix
+ 
+ =][=
+ 
+ FOR fix  =][=
+   (set! HACK (string-upcase! (get "hackname")))  =][=
+ 
+   IF (not (exist? "test_text")) =][=
+     (if (not (exist? "replace"))
+         (error (sprintf "include fix '%s' has no test text"
+                         (get "hackname") )) )
+          =][=
+   ELSE   =]
+ cat >> [=
+     IF (exist? "files") =][=
+       files[0] =][=
+     ELSE =]testing.h[=
+     ENDIF =] <<_HACK_EOF_
+ 
+ 
+ #if defined( [=(. HACK)=]_CHECK )
+ [=test_text=]
+ #endif  /* [=(. HACK)=]_CHECK */
+ _HACK_EOF_
+ [=ENDIF =][=
+ 
+ ENDFOR  fix
+ 
+ =]
+ 
+ find . -type f | sed 's;^\./;;' | sort | ../../fixincl
+ cd ${DESTDIR}
+ 
+ exitok=true
+ 
+ find * -type f -print > ${TESTDIR}/LIST
+ 
+ #  Special hack for sys/types.h:  the #define-d types for size_t,
+ #  ptrdiff_t and wchar_t are different for each port.  Therefore,
+ #  strip off the defined-to type so that the test results are the
+ #  same for all platforms.
+ #
+ sed 's/\(#define __[A-Z_]*_TYPE__\).*/\1/' sys/types.h > XX
+ mv -f XX sys/types.h
+ 
+ #  The following subshell weirdness is for saving an exit
+ #  status from within a while loop that reads input.  If you can
+ #  think of a cleaner way, suggest away, please...
+ #
+ exitok=`
+ exec < ${TESTDIR}/LIST
+ while read f
+ do
+   if [ ! -f ${TESTBASE}/$f ]
+   then
+     echo "Newly fixed header:  $f" >&2
+     exitok=false
+ 
+   elif cmp $f ${TESTBASE}/$f >&2
+   then
+     :
+ 
+   else
+     ${DIFF:-diff} -c $f ${TESTBASE}/$f >&2 || :
+     exitok=false
+   fi
+ done
+ echo $exitok`
+ 
+ cd $TESTBASE
+ 
+ find * -type f -print | \
+ fgrep -v 'CVS/' > ${TESTDIR}/LIST
+ 
+ exitok=`
+ exec < ${TESTDIR}/LIST
+ while read f
+ do
+   if [ -s $f ] && [ ! -f ${DESTDIR}/$f ]
+   then
+     echo "Missing header fix:  $f" >&2
+     exitok=false
+   fi
+ done
+ echo $exitok`
+ 
+ echo
+ if $exitok
+ then
+   cd ${TESTDIR}
+   rm -rf inc res LIST
+   cd ..
+   rmdir ${TESTDIR} > /dev/null 2>&1 || :
+   echo All fixinclude tests pass >&2
+ else
+   echo There were fixinclude test FAILURES  >&2
+ fi
+ $exitok[=
+ 
+ (if (defined? 'set-writable) (set-writable))
+ 
+ =]
diff -Nrcpad gcc-3.4.3/fixincludes/config.h.in gcc-4.0.0/fixincludes/config.h.in
*** gcc-3.4.3/fixincludes/config.h.in	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/config.h.in	Thu Apr 21 07:04:09 2005
***************
*** 0 ****
--- 1,122 ----
+ /* config.h.in.  Generated from configure.ac by autoheader.  */
+ 
+ /* Defined to the executable file extension on the host system */
+ #undef EXE_EXT
+ 
+ /* Define to 1 if you have the declaration of `abort', and to 0 if you don't.
+    */
+ #undef HAVE_DECL_ABORT
+ 
+ /* Define to 1 if you have the declaration of `errno', and to 0 if you don't.
+    */
+ #undef HAVE_DECL_ERRNO
+ 
+ /* Define to 1 if you have the declaration of `fprintf_unlocked', and to 0 if
+    you don't. */
+ #undef HAVE_DECL_FPRINTF_UNLOCKED
+ 
+ /* Define to 1 if you have the declaration of `fputc_unlocked', and to 0 if
+    you don't. */
+ #undef HAVE_DECL_FPUTC_UNLOCKED
+ 
+ /* Define to 1 if you have the declaration of `fputs_unlocked', and to 0 if
+    you don't. */
+ #undef HAVE_DECL_FPUTS_UNLOCKED
+ 
+ /* Define to 1 if you have the declaration of `fwrite_unlocked', and to 0 if
+    you don't. */
+ #undef HAVE_DECL_FWRITE_UNLOCKED
+ 
+ /* Define to 1 if you have the declaration of `putc_unlocked', and to 0 if you
+    don't. */
+ #undef HAVE_DECL_PUTC_UNLOCKED
+ 
+ /* Define to 1 if you have the <fcntl.h> header file. */
+ #undef HAVE_FCNTL_H
+ 
+ /* Define to 1 if you have the `fprintf_unlocked' function. */
+ #undef HAVE_FPRINTF_UNLOCKED
+ 
+ /* Define to 1 if you have the `fputc_unlocked' function. */
+ #undef HAVE_FPUTC_UNLOCKED
+ 
+ /* Define to 1 if you have the `fputs_unlocked' function. */
+ #undef HAVE_FPUTS_UNLOCKED
+ 
+ /* Define to 1 if you have the `fwrite_unlocked' function. */
+ #undef HAVE_FWRITE_UNLOCKED
+ 
+ /* Define to 1 if you have the <inttypes.h> header file. */
+ #undef HAVE_INTTYPES_H
+ 
+ /* Define to 1 if you have the <memory.h> header file. */
+ #undef HAVE_MEMORY_H
+ 
+ /* Define if mmap with MAP_ANON(YMOUS) works. */
+ #undef HAVE_MMAP_ANON
+ 
+ /* Define if mmap of /dev/zero works. */
+ #undef HAVE_MMAP_DEV_ZERO
+ 
+ /* Define if read-only mmap of a plain file works. */
+ #undef HAVE_MMAP_FILE
+ 
+ /* Define to 1 if you have the `putc_unlocked' function. */
+ #undef HAVE_PUTC_UNLOCKED
+ 
+ /* Define to 1 if you have the <stddef.h> header file. */
+ #undef HAVE_STDDEF_H
+ 
+ /* Define to 1 if you have the <stdint.h> header file. */
+ #undef HAVE_STDINT_H
+ 
+ /* Define to 1 if you have the <stdlib.h> header file. */
+ #undef HAVE_STDLIB_H
+ 
+ /* Define to 1 if you have the <strings.h> header file. */
+ #undef HAVE_STRINGS_H
+ 
+ /* Define to 1 if you have the <string.h> header file. */
+ #undef HAVE_STRING_H
+ 
+ /* Define to 1 if you have the <sys/file.h> header file. */
+ #undef HAVE_SYS_FILE_H
+ 
+ /* Define to 1 if you have the <sys/stat.h> header file. */
+ #undef HAVE_SYS_STAT_H
+ 
+ /* Define to 1 if you have the <sys/types.h> header file. */
+ #undef HAVE_SYS_TYPES_H
+ 
+ /* Define to 1 if you have the <unistd.h> header file. */
+ #undef HAVE_UNISTD_H
+ 
+ /* Define to the address where bug reports for this package should be sent. */
+ #undef PACKAGE_BUGREPORT
+ 
+ /* Define to the full name of this package. */
+ #undef PACKAGE_NAME
+ 
+ /* Define to the full name and version of this package. */
+ #undef PACKAGE_STRING
+ 
+ /* Define to the one symbol short name of this package. */
+ #undef PACKAGE_TARNAME
+ 
+ /* Define to the version of this package. */
+ #undef PACKAGE_VERSION
+ 
+ /* Define if testing and fixing are done by separate process */
+ #undef SEPARATE_FIX_PROC
+ 
+ /* Define to 1 if you have the ANSI C header files. */
+ #undef STDC_HEADERS
+ 
+ /* Define to xatexit if the host system does not support atexit */
+ #undef atexit
+ 
+ /* Define to empty if `const' does not conform to ANSI C. */
+ #undef const
+ 
+ /* Define to xexit if the host system does not support atexit */
+ #undef exit
diff -Nrcpad gcc-3.4.3/fixincludes/configure gcc-4.0.0/fixincludes/configure
*** gcc-3.4.3/fixincludes/configure	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/configure	Thu Dec  2 11:03:21 2004
***************
*** 0 ****
--- 1,5375 ----
+ #! /bin/sh
+ # Guess values for system-dependent variables and create Makefiles.
+ # Generated by GNU Autoconf 2.59 for fixincludes  .
+ #
+ # Copyright (C) 2003 Free Software Foundation, Inc.
+ # This configure script is free software; the Free Software Foundation
+ # gives unlimited permission to copy, distribute and modify it.
+ ## --------------------- ##
+ ## M4sh Initialization.  ##
+ ## --------------------- ##
+ 
+ # Be Bourne compatible
+ if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+   emulate sh
+   NULLCMD=:
+   # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+   # is contrary to our usage.  Disable this feature.
+   alias -g '${1+"$@"}'='"$@"'
+ elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+   set -o posix
+ fi
+ DUALCASE=1; export DUALCASE # for MKS sh
+ 
+ # Support unset when possible.
+ if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+   as_unset=unset
+ else
+   as_unset=false
+ fi
+ 
+ 
+ # Work around bugs in pre-3.0 UWIN ksh.
+ $as_unset ENV MAIL MAILPATH
+ PS1='$ '
+ PS2='> '
+ PS4='+ '
+ 
+ # NLS nuisances.
+ for as_var in \
+   LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+   LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+   LC_TELEPHONE LC_TIME
+ do
+   if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+     eval $as_var=C; export $as_var
+   else
+     $as_unset $as_var
+   fi
+ done
+ 
+ # Required to use basename.
+ if expr a : '\(a\)' >/dev/null 2>&1; then
+   as_expr=expr
+ else
+   as_expr=false
+ fi
+ 
+ if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+   as_basename=basename
+ else
+   as_basename=false
+ fi
+ 
+ 
+ # Name of the executable.
+ as_me=`$as_basename "$0" ||
+ $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ 	 X"$0" : 'X\(//\)$' \| \
+ 	 X"$0" : 'X\(/\)$' \| \
+ 	 .     : '\(.\)' 2>/dev/null ||
+ echo X/"$0" |
+     sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+   	  /^X\/\(\/\/\)$/{ s//\1/; q; }
+   	  /^X\/\(\/\).*/{ s//\1/; q; }
+   	  s/.*/./; q'`
+ 
+ 
+ # PATH needs CR, and LINENO needs CR and PATH.
+ # Avoid depending upon Character Ranges.
+ as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+ as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+ as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+ as_cr_digits='0123456789'
+ as_cr_alnum=$as_cr_Letters$as_cr_digits
+ 
+ # The user is always right.
+ if test "${PATH_SEPARATOR+set}" != set; then
+   echo "#! /bin/sh" >conf$$.sh
+   echo  "exit 0"   >>conf$$.sh
+   chmod +x conf$$.sh
+   if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+     PATH_SEPARATOR=';'
+   else
+     PATH_SEPARATOR=:
+   fi
+   rm -f conf$$.sh
+ fi
+ 
+ 
+   as_lineno_1=$LINENO
+   as_lineno_2=$LINENO
+   as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+   test "x$as_lineno_1" != "x$as_lineno_2" &&
+   test "x$as_lineno_3"  = "x$as_lineno_2"  || {
+   # Find who we are.  Look in the path if we contain no path at all
+   # relative or not.
+   case $0 in
+     *[\\/]* ) as_myself=$0 ;;
+     *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+ 
+        ;;
+   esac
+   # We did not find ourselves, most probably we were run as `sh COMMAND'
+   # in which case we are not to be found in the path.
+   if test "x$as_myself" = x; then
+     as_myself=$0
+   fi
+   if test ! -f "$as_myself"; then
+     { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
+    { (exit 1); exit 1; }; }
+   fi
+   case $CONFIG_SHELL in
+   '')
+     as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for as_base in sh bash ksh sh5; do
+ 	 case $as_dir in
+ 	 /*)
+ 	   if ("$as_dir/$as_base" -c '
+   as_lineno_1=$LINENO
+   as_lineno_2=$LINENO
+   as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+   test "x$as_lineno_1" != "x$as_lineno_2" &&
+   test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
+ 	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+ 	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+ 	     CONFIG_SHELL=$as_dir/$as_base
+ 	     export CONFIG_SHELL
+ 	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+ 	   fi;;
+ 	 esac
+        done
+ done
+ ;;
+   esac
+ 
+   # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+   # uniformly replaced by the line number.  The first 'sed' inserts a
+   # line-number line before each line; the second 'sed' does the real
+   # work.  The second script uses 'N' to pair each line-number line
+   # with the numbered line, and appends trailing '-' during
+   # substitution so that $LINENO is not a special case at line end.
+   # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+   # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
+   sed '=' <$as_myself |
+     sed '
+       N
+       s,$,-,
+       : loop
+       s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+       t loop
+       s,-$,,
+       s,^['$as_cr_digits']*\n,,
+     ' >$as_me.lineno &&
+   chmod +x $as_me.lineno ||
+     { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+    { (exit 1); exit 1; }; }
+ 
+   # Don't try to exec as it changes $[0], causing all sort of problems
+   # (the dirname of $[0] is not the place where we might find the
+   # original and so on.  Autoconf is especially sensible to this).
+   . ./$as_me.lineno
+   # Exit status is that of the last command.
+   exit
+ }
+ 
+ 
+ case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+   *c*,-n*) ECHO_N= ECHO_C='
+ ' ECHO_T='	' ;;
+   *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+   *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
+ esac
+ 
+ if expr a : '\(a\)' >/dev/null 2>&1; then
+   as_expr=expr
+ else
+   as_expr=false
+ fi
+ 
+ rm -f conf$$ conf$$.exe conf$$.file
+ echo >conf$$.file
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+   # We could just check for DJGPP; but this test a) works b) is more generic
+   # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+   if test -f conf$$.exe; then
+     # Don't use ln at all; we don't have any links
+     as_ln_s='cp -p'
+   else
+     as_ln_s='ln -s'
+   fi
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+   as_ln_s=ln
+ else
+   as_ln_s='cp -p'
+ fi
+ rm -f conf$$ conf$$.exe conf$$.file
+ 
+ if mkdir -p . 2>/dev/null; then
+   as_mkdir_p=:
+ else
+   test -d ./-p && rmdir ./-p
+   as_mkdir_p=false
+ fi
+ 
+ as_executable_p="test -f"
+ 
+ # Sed expression to map a string onto a valid CPP name.
+ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+ 
+ # Sed expression to map a string onto a valid variable name.
+ as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+ 
+ 
+ # IFS
+ # We need space, tab and new line, in precisely that order.
+ as_nl='
+ '
+ IFS=" 	$as_nl"
+ 
+ # CDPATH.
+ $as_unset CDPATH
+ 
+ 
+ # Name of the host.
+ # hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+ # so uname gets run too.
+ ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+ 
+ exec 6>&1
+ 
+ #
+ # Initializations.
+ #
+ ac_default_prefix=/usr/local
+ ac_config_libobj_dir=.
+ cross_compiling=no
+ subdirs=
+ MFLAGS=
+ MAKEFLAGS=
+ SHELL=${CONFIG_SHELL-/bin/sh}
+ 
+ # Maximum number of lines to put in a shell here document.
+ # This variable seems obsolete.  It should probably be removed, and
+ # only ac_max_sed_lines should be used.
+ : ${ac_max_here_lines=38}
+ 
+ # Identity of this package.
+ PACKAGE_NAME='fixincludes'
+ PACKAGE_TARNAME='fixincludes'
+ PACKAGE_VERSION=' '
+ PACKAGE_STRING='fixincludes  '
+ PACKAGE_BUGREPORT=''
+ 
+ ac_unique_file="inclhack.def"
+ # Factoring default headers for most tests.
+ ac_includes_default="\
+ #include <stdio.h>
+ #if HAVE_SYS_TYPES_H
+ # include <sys/types.h>
+ #endif
+ #if HAVE_SYS_STAT_H
+ # include <sys/stat.h>
+ #endif
+ #if STDC_HEADERS
+ # include <stdlib.h>
+ # include <stddef.h>
+ #else
+ # if HAVE_STDLIB_H
+ #  include <stdlib.h>
+ # endif
+ #endif
+ #if HAVE_STRING_H
+ # if !STDC_HEADERS && HAVE_MEMORY_H
+ #  include <memory.h>
+ # endif
+ # include <string.h>
+ #endif
+ #if HAVE_STRINGS_H
+ # include <strings.h>
+ #endif
+ #if HAVE_INTTYPES_H
+ # include <inttypes.h>
+ #else
+ # if HAVE_STDINT_H
+ #  include <stdint.h>
+ # endif
+ #endif
+ #if HAVE_UNISTD_H
+ # include <unistd.h>
+ #endif"
+ 
+ ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT target_noncanonical TARGET gcc_version_trigger gcc_version_full gcc_version CPP EGREP MAINT LIBOBJS LTLIBOBJS'
+ ac_subst_files=''
+ 
+ # Initialize some variables set by options.
+ ac_init_help=
+ ac_init_version=false
+ # The variables have the same names as the options, with
+ # dashes changed to underlines.
+ cache_file=/dev/null
+ exec_prefix=NONE
+ no_create=
+ no_recursion=
+ prefix=NONE
+ program_prefix=NONE
+ program_suffix=NONE
+ program_transform_name=s,x,x,
+ silent=
+ site=
+ srcdir=
+ verbose=
+ x_includes=NONE
+ x_libraries=NONE
+ 
+ # Installation directory options.
+ # These are left unexpanded so users can "make install exec_prefix=/foo"
+ # and all the variables that are supposed to be based on exec_prefix
+ # by default will actually change.
+ # Use braces instead of parens because sh, perl, etc. also accept them.
+ bindir='${exec_prefix}/bin'
+ sbindir='${exec_prefix}/sbin'
+ libexecdir='${exec_prefix}/libexec'
+ datadir='${prefix}/share'
+ sysconfdir='${prefix}/etc'
+ sharedstatedir='${prefix}/com'
+ localstatedir='${prefix}/var'
+ libdir='${exec_prefix}/lib'
+ includedir='${prefix}/include'
+ oldincludedir='/usr/include'
+ infodir='${prefix}/info'
+ mandir='${prefix}/man'
+ 
+ ac_prev=
+ for ac_option
+ do
+   # If the previous option needs an argument, assign it.
+   if test -n "$ac_prev"; then
+     eval "$ac_prev=\$ac_option"
+     ac_prev=
+     continue
+   fi
+ 
+   ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
+ 
+   # Accept the important Cygnus configure options, so we can diagnose typos.
+ 
+   case $ac_option in
+ 
+   -bindir | --bindir | --bindi | --bind | --bin | --bi)
+     ac_prev=bindir ;;
+   -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+     bindir=$ac_optarg ;;
+ 
+   -build | --build | --buil | --bui | --bu)
+     ac_prev=build_alias ;;
+   -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+     build_alias=$ac_optarg ;;
+ 
+   -cache-file | --cache-file | --cache-fil | --cache-fi \
+   | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+     ac_prev=cache_file ;;
+   -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+   | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+     cache_file=$ac_optarg ;;
+ 
+   --config-cache | -C)
+     cache_file=config.cache ;;
+ 
+   -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+     ac_prev=datadir ;;
+   -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+   | --da=*)
+     datadir=$ac_optarg ;;
+ 
+   -disable-* | --disable-*)
+     ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+     # Reject names that are not valid shell variable names.
+     expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+       { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+    { (exit 1); exit 1; }; }
+     ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+     eval "enable_$ac_feature=no" ;;
+ 
+   -enable-* | --enable-*)
+     ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+     # Reject names that are not valid shell variable names.
+     expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+       { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+    { (exit 1); exit 1; }; }
+     ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+     case $ac_option in
+       *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+       *) ac_optarg=yes ;;
+     esac
+     eval "enable_$ac_feature='$ac_optarg'" ;;
+ 
+   -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+   | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+   | --exec | --exe | --ex)
+     ac_prev=exec_prefix ;;
+   -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+   | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+   | --exec=* | --exe=* | --ex=*)
+     exec_prefix=$ac_optarg ;;
+ 
+   -gas | --gas | --ga | --g)
+     # Obsolete; use --with-gas.
+     with_gas=yes ;;
+ 
+   -help | --help | --hel | --he | -h)
+     ac_init_help=long ;;
+   -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+     ac_init_help=recursive ;;
+   -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+     ac_init_help=short ;;
+ 
+   -host | --host | --hos | --ho)
+     ac_prev=host_alias ;;
+   -host=* | --host=* | --hos=* | --ho=*)
+     host_alias=$ac_optarg ;;
+ 
+   -includedir | --includedir | --includedi | --included | --include \
+   | --includ | --inclu | --incl | --inc)
+     ac_prev=includedir ;;
+   -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+   | --includ=* | --inclu=* | --incl=* | --inc=*)
+     includedir=$ac_optarg ;;
+ 
+   -infodir | --infodir | --infodi | --infod | --info | --inf)
+     ac_prev=infodir ;;
+   -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+     infodir=$ac_optarg ;;
+ 
+   -libdir | --libdir | --libdi | --libd)
+     ac_prev=libdir ;;
+   -libdir=* | --libdir=* | --libdi=* | --libd=*)
+     libdir=$ac_optarg ;;
+ 
+   -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+   | --libexe | --libex | --libe)
+     ac_prev=libexecdir ;;
+   -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+   | --libexe=* | --libex=* | --libe=*)
+     libexecdir=$ac_optarg ;;
+ 
+   -localstatedir | --localstatedir | --localstatedi | --localstated \
+   | --localstate | --localstat | --localsta | --localst \
+   | --locals | --local | --loca | --loc | --lo)
+     ac_prev=localstatedir ;;
+   -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+   | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+   | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+     localstatedir=$ac_optarg ;;
+ 
+   -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+     ac_prev=mandir ;;
+   -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+     mandir=$ac_optarg ;;
+ 
+   -nfp | --nfp | --nf)
+     # Obsolete; use --without-fp.
+     with_fp=no ;;
+ 
+   -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+   | --no-cr | --no-c | -n)
+     no_create=yes ;;
+ 
+   -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+   | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+     no_recursion=yes ;;
+ 
+   -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+   | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+   | --oldin | --oldi | --old | --ol | --o)
+     ac_prev=oldincludedir ;;
+   -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+   | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+   | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+     oldincludedir=$ac_optarg ;;
+ 
+   -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+     ac_prev=prefix ;;
+   -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+     prefix=$ac_optarg ;;
+ 
+   -program-prefix | --program-prefix | --program-prefi | --program-pref \
+   | --program-pre | --program-pr | --program-p)
+     ac_prev=program_prefix ;;
+   -program-prefix=* | --program-prefix=* | --program-prefi=* \
+   | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+     program_prefix=$ac_optarg ;;
+ 
+   -program-suffix | --program-suffix | --program-suffi | --program-suff \
+   | --program-suf | --program-su | --program-s)
+     ac_prev=program_suffix ;;
+   -program-suffix=* | --program-suffix=* | --program-suffi=* \
+   | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+     program_suffix=$ac_optarg ;;
+ 
+   -program-transform-name | --program-transform-name \
+   | --program-transform-nam | --program-transform-na \
+   | --program-transform-n | --program-transform- \
+   | --program-transform | --program-transfor \
+   | --program-transfo | --program-transf \
+   | --program-trans | --program-tran \
+   | --progr-tra | --program-tr | --program-t)
+     ac_prev=program_transform_name ;;
+   -program-transform-name=* | --program-transform-name=* \
+   | --program-transform-nam=* | --program-transform-na=* \
+   | --program-transform-n=* | --program-transform-=* \
+   | --program-transform=* | --program-transfor=* \
+   | --program-transfo=* | --program-transf=* \
+   | --program-trans=* | --program-tran=* \
+   | --progr-tra=* | --program-tr=* | --program-t=*)
+     program_transform_name=$ac_optarg ;;
+ 
+   -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+   | -silent | --silent | --silen | --sile | --sil)
+     silent=yes ;;
+ 
+   -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+     ac_prev=sbindir ;;
+   -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+   | --sbi=* | --sb=*)
+     sbindir=$ac_optarg ;;
+ 
+   -sharedstatedir | --sharedstatedir | --sharedstatedi \
+   | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+   | --sharedst | --shareds | --shared | --share | --shar \
+   | --sha | --sh)
+     ac_prev=sharedstatedir ;;
+   -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+   | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+   | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+   | --sha=* | --sh=*)
+     sharedstatedir=$ac_optarg ;;
+ 
+   -site | --site | --sit)
+     ac_prev=site ;;
+   -site=* | --site=* | --sit=*)
+     site=$ac_optarg ;;
+ 
+   -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+     ac_prev=srcdir ;;
+   -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+     srcdir=$ac_optarg ;;
+ 
+   -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+   | --syscon | --sysco | --sysc | --sys | --sy)
+     ac_prev=sysconfdir ;;
+   -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+   | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+     sysconfdir=$ac_optarg ;;
+ 
+   -target | --target | --targe | --targ | --tar | --ta | --t)
+     ac_prev=target_alias ;;
+   -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+     target_alias=$ac_optarg ;;
+ 
+   -v | -verbose | --verbose | --verbos | --verbo | --verb)
+     verbose=yes ;;
+ 
+   -version | --version | --versio | --versi | --vers | -V)
+     ac_init_version=: ;;
+ 
+   -with-* | --with-*)
+     ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+     # Reject names that are not valid shell variable names.
+     expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+       { echo "$as_me: error: invalid package name: $ac_package" >&2
+    { (exit 1); exit 1; }; }
+     ac_package=`echo $ac_package| sed 's/-/_/g'`
+     case $ac_option in
+       *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+       *) ac_optarg=yes ;;
+     esac
+     eval "with_$ac_package='$ac_optarg'" ;;
+ 
+   -without-* | --without-*)
+     ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+     # Reject names that are not valid shell variable names.
+     expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+       { echo "$as_me: error: invalid package name: $ac_package" >&2
+    { (exit 1); exit 1; }; }
+     ac_package=`echo $ac_package | sed 's/-/_/g'`
+     eval "with_$ac_package=no" ;;
+ 
+   --x)
+     # Obsolete; use --with-x.
+     with_x=yes ;;
+ 
+   -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+   | --x-incl | --x-inc | --x-in | --x-i)
+     ac_prev=x_includes ;;
+   -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+   | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+     x_includes=$ac_optarg ;;
+ 
+   -x-libraries | --x-libraries | --x-librarie | --x-librari \
+   | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+     ac_prev=x_libraries ;;
+   -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+   | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+     x_libraries=$ac_optarg ;;
+ 
+   -*) { echo "$as_me: error: unrecognized option: $ac_option
+ Try \`$0 --help' for more information." >&2
+    { (exit 1); exit 1; }; }
+     ;;
+ 
+   *=*)
+     ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+     # Reject names that are not valid shell variable names.
+     expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+       { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+    { (exit 1); exit 1; }; }
+     ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
+     eval "$ac_envvar='$ac_optarg'"
+     export $ac_envvar ;;
+ 
+   *)
+     # FIXME: should be removed in autoconf 3.0.
+     echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+     expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+       echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+     : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+     ;;
+ 
+   esac
+ done
+ 
+ if test -n "$ac_prev"; then
+   ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+   { echo "$as_me: error: missing argument to $ac_option" >&2
+    { (exit 1); exit 1; }; }
+ fi
+ 
+ # Be sure to have absolute paths.
+ for ac_var in exec_prefix prefix
+ do
+   eval ac_val=$`echo $ac_var`
+   case $ac_val in
+     [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
+     *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+    { (exit 1); exit 1; }; };;
+   esac
+ done
+ 
+ # Be sure to have absolute paths.
+ for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
+ 	      localstatedir libdir includedir oldincludedir infodir mandir
+ do
+   eval ac_val=$`echo $ac_var`
+   case $ac_val in
+     [\\/$]* | ?:[\\/]* ) ;;
+     *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+    { (exit 1); exit 1; }; };;
+   esac
+ done
+ 
+ # There might be people who depend on the old broken behavior: `$host'
+ # used to hold the argument of --host etc.
+ # FIXME: To remove some day.
+ build=$build_alias
+ host=$host_alias
+ target=$target_alias
+ 
+ # FIXME: To remove some day.
+ if test "x$host_alias" != x; then
+   if test "x$build_alias" = x; then
+     cross_compiling=maybe
+     echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+     If a cross compiler is detected then cross compile mode will be used." >&2
+   elif test "x$build_alias" != "x$host_alias"; then
+     cross_compiling=yes
+   fi
+ fi
+ 
+ ac_tool_prefix=
+ test -n "$host_alias" && ac_tool_prefix=$host_alias-
+ 
+ test "$silent" = yes && exec 6>/dev/null
+ 
+ 
+ # Find the source files, if location was not specified.
+ if test -z "$srcdir"; then
+   ac_srcdir_defaulted=yes
+   # Try the directory containing this script, then its parent.
+   ac_confdir=`(dirname "$0") 2>/dev/null ||
+ $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ 	 X"$0" : 'X\(//\)[^/]' \| \
+ 	 X"$0" : 'X\(//\)$' \| \
+ 	 X"$0" : 'X\(/\)' \| \
+ 	 .     : '\(.\)' 2>/dev/null ||
+ echo X"$0" |
+     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+   	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+   	  /^X\(\/\/\)$/{ s//\1/; q; }
+   	  /^X\(\/\).*/{ s//\1/; q; }
+   	  s/.*/./; q'`
+   srcdir=$ac_confdir
+   if test ! -r $srcdir/$ac_unique_file; then
+     srcdir=..
+   fi
+ else
+   ac_srcdir_defaulted=no
+ fi
+ if test ! -r $srcdir/$ac_unique_file; then
+   if test "$ac_srcdir_defaulted" = yes; then
+     { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
+    { (exit 1); exit 1; }; }
+   else
+     { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+    { (exit 1); exit 1; }; }
+   fi
+ fi
+ (cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
+   { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
+    { (exit 1); exit 1; }; }
+ srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
+ ac_env_build_alias_set=${build_alias+set}
+ ac_env_build_alias_value=$build_alias
+ ac_cv_env_build_alias_set=${build_alias+set}
+ ac_cv_env_build_alias_value=$build_alias
+ ac_env_host_alias_set=${host_alias+set}
+ ac_env_host_alias_value=$host_alias
+ ac_cv_env_host_alias_set=${host_alias+set}
+ ac_cv_env_host_alias_value=$host_alias
+ ac_env_target_alias_set=${target_alias+set}
+ ac_env_target_alias_value=$target_alias
+ ac_cv_env_target_alias_set=${target_alias+set}
+ ac_cv_env_target_alias_value=$target_alias
+ ac_env_CC_set=${CC+set}
+ ac_env_CC_value=$CC
+ ac_cv_env_CC_set=${CC+set}
+ ac_cv_env_CC_value=$CC
+ ac_env_CFLAGS_set=${CFLAGS+set}
+ ac_env_CFLAGS_value=$CFLAGS
+ ac_cv_env_CFLAGS_set=${CFLAGS+set}
+ ac_cv_env_CFLAGS_value=$CFLAGS
+ ac_env_LDFLAGS_set=${LDFLAGS+set}
+ ac_env_LDFLAGS_value=$LDFLAGS
+ ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
+ ac_cv_env_LDFLAGS_value=$LDFLAGS
+ ac_env_CPPFLAGS_set=${CPPFLAGS+set}
+ ac_env_CPPFLAGS_value=$CPPFLAGS
+ ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
+ ac_cv_env_CPPFLAGS_value=$CPPFLAGS
+ ac_env_CPP_set=${CPP+set}
+ ac_env_CPP_value=$CPP
+ ac_cv_env_CPP_set=${CPP+set}
+ ac_cv_env_CPP_value=$CPP
+ 
+ #
+ # Report the --help message.
+ #
+ if test "$ac_init_help" = "long"; then
+   # Omit some internal or obsolete options to make the list less imposing.
+   # This message is too long to be a string in the A/UX 3.1 sh.
+   cat <<_ACEOF
+ \`configure' configures fixincludes   to adapt to many kinds of systems.
+ 
+ Usage: $0 [OPTION]... [VAR=VALUE]...
+ 
+ To assign environment variables (e.g., CC, CFLAGS...), specify them as
+ VAR=VALUE.  See below for descriptions of some of the useful variables.
+ 
+ Defaults for the options are specified in brackets.
+ 
+ Configuration:
+   -h, --help              display this help and exit
+       --help=short        display options specific to this package
+       --help=recursive    display the short help of all the included packages
+   -V, --version           display version information and exit
+   -q, --quiet, --silent   do not print \`checking...' messages
+       --cache-file=FILE   cache test results in FILE [disabled]
+   -C, --config-cache      alias for \`--cache-file=config.cache'
+   -n, --no-create         do not create output files
+       --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+ 
+ _ACEOF
+ 
+   cat <<_ACEOF
+ Installation directories:
+   --prefix=PREFIX         install architecture-independent files in PREFIX
+ 			  [$ac_default_prefix]
+   --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+ 			  [PREFIX]
+ 
+ By default, \`make install' will install all the files in
+ \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+ an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+ for instance \`--prefix=\$HOME'.
+ 
+ For better control, use the options below.
+ 
+ Fine tuning of the installation directories:
+   --bindir=DIR           user executables [EPREFIX/bin]
+   --sbindir=DIR          system admin executables [EPREFIX/sbin]
+   --libexecdir=DIR       program executables [EPREFIX/libexec]
+   --datadir=DIR          read-only architecture-independent data [PREFIX/share]
+   --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
+   --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
+   --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
+   --libdir=DIR           object code libraries [EPREFIX/lib]
+   --includedir=DIR       C header files [PREFIX/include]
+   --oldincludedir=DIR    C header files for non-gcc [/usr/include]
+   --infodir=DIR          info documentation [PREFIX/info]
+   --mandir=DIR           man documentation [PREFIX/man]
+ _ACEOF
+ 
+   cat <<\_ACEOF
+ 
+ System types:
+   --build=BUILD     configure for building on BUILD [guessed]
+   --host=HOST       cross-compile to build programs to run on HOST [BUILD]
+   --target=TARGET   configure for building compilers for TARGET [HOST]
+ _ACEOF
+ fi
+ 
+ if test -n "$ac_init_help"; then
+   case $ac_init_help in
+      short | recursive ) echo "Configuration of fixincludes  :";;
+    esac
+   cat <<\_ACEOF
+ 
+ Optional Features:
+   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+   --enable-twoprocess       Use a separate process to apply the fixes
+   --enable-maintainer-mode enable make rules and dependencies not useful
+                           (and sometimes confusing) to the casual installer
+ 
+ Optional Packages:
+   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+   --with-local-prefix=DIR specifies directory to put local include
+ 
+ Some influential environment variables:
+   CC          C compiler command
+   CFLAGS      C compiler flags
+   LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+               nonstandard directory <lib dir>
+   CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
+               headers in a nonstandard directory <include dir>
+   CPP         C preprocessor
+ 
+ Use these variables to override the choices made by `configure' or to help
+ it to find libraries and programs with nonstandard names/locations.
+ 
+ _ACEOF
+ fi
+ 
+ if test "$ac_init_help" = "recursive"; then
+   # If there are subdirs, report their specific --help.
+   ac_popdir=`pwd`
+   for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+     test -d $ac_dir || continue
+     ac_builddir=.
+ 
+ if test "$ac_dir" != .; then
+   ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+   # A "../" for each directory in $ac_dir_suffix.
+   ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+ else
+   ac_dir_suffix= ac_top_builddir=
+ fi
+ 
+ case $srcdir in
+   .)  # No --srcdir option.  We are building in place.
+     ac_srcdir=.
+     if test -z "$ac_top_builddir"; then
+        ac_top_srcdir=.
+     else
+        ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+     fi ;;
+   [\\/]* | ?:[\\/]* )  # Absolute path.
+     ac_srcdir=$srcdir$ac_dir_suffix;
+     ac_top_srcdir=$srcdir ;;
+   *) # Relative path.
+     ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+     ac_top_srcdir=$ac_top_builddir$srcdir ;;
+ esac
+ 
+ # Do not use `cd foo && pwd` to compute absolute paths, because
+ # the directories may not exist.
+ case `pwd` in
+ .) ac_abs_builddir="$ac_dir";;
+ *)
+   case "$ac_dir" in
+   .) ac_abs_builddir=`pwd`;;
+   [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+   *) ac_abs_builddir=`pwd`/"$ac_dir";;
+   esac;;
+ esac
+ case $ac_abs_builddir in
+ .) ac_abs_top_builddir=${ac_top_builddir}.;;
+ *)
+   case ${ac_top_builddir}. in
+   .) ac_abs_top_builddir=$ac_abs_builddir;;
+   [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+   *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+   esac;;
+ esac
+ case $ac_abs_builddir in
+ .) ac_abs_srcdir=$ac_srcdir;;
+ *)
+   case $ac_srcdir in
+   .) ac_abs_srcdir=$ac_abs_builddir;;
+   [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+   *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+   esac;;
+ esac
+ case $ac_abs_builddir in
+ .) ac_abs_top_srcdir=$ac_top_srcdir;;
+ *)
+   case $ac_top_srcdir in
+   .) ac_abs_top_srcdir=$ac_abs_builddir;;
+   [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+   *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+   esac;;
+ esac
+ 
+     cd $ac_dir
+     # Check for guested configure; otherwise get Cygnus style configure.
+     if test -f $ac_srcdir/configure.gnu; then
+       echo
+       $SHELL $ac_srcdir/configure.gnu  --help=recursive
+     elif test -f $ac_srcdir/configure; then
+       echo
+       $SHELL $ac_srcdir/configure  --help=recursive
+     elif test -f $ac_srcdir/configure.ac ||
+ 	   test -f $ac_srcdir/configure.in; then
+       echo
+       $ac_configure --help
+     else
+       echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+     fi
+     cd $ac_popdir
+   done
+ fi
+ 
+ test -n "$ac_init_help" && exit 0
+ if $ac_init_version; then
+   cat <<\_ACEOF
+ fixincludes configure
+ generated by GNU Autoconf 2.59
+ 
+ Copyright (C) 2003 Free Software Foundation, Inc.
+ This configure script is free software; the Free Software Foundation
+ gives unlimited permission to copy, distribute and modify it.
+ _ACEOF
+   exit 0
+ fi
+ exec 5>config.log
+ cat >&5 <<_ACEOF
+ This file contains any messages produced by compilers while
+ running configure, to aid debugging if configure makes a mistake.
+ 
+ It was created by fixincludes $as_me  , which was
+ generated by GNU Autoconf 2.59.  Invocation command line was
+ 
+   $ $0 $@
+ 
+ _ACEOF
+ {
+ cat <<_ASUNAME
+ ## --------- ##
+ ## Platform. ##
+ ## --------- ##
+ 
+ hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+ uname -m = `(uname -m) 2>/dev/null || echo unknown`
+ uname -r = `(uname -r) 2>/dev/null || echo unknown`
+ uname -s = `(uname -s) 2>/dev/null || echo unknown`
+ uname -v = `(uname -v) 2>/dev/null || echo unknown`
+ 
+ /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+ /bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+ 
+ /bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+ /usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+ /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+ hostinfo               = `(hostinfo) 2>/dev/null               || echo unknown`
+ /bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+ /usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+ /bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+ 
+ _ASUNAME
+ 
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   echo "PATH: $as_dir"
+ done
+ 
+ } >&5
+ 
+ cat >&5 <<_ACEOF
+ 
+ 
+ ## ----------- ##
+ ## Core tests. ##
+ ## ----------- ##
+ 
+ _ACEOF
+ 
+ 
+ # Keep a trace of the command line.
+ # Strip out --no-create and --no-recursion so they do not pile up.
+ # Strip out --silent because we don't want to record it for future runs.
+ # Also quote any args containing shell meta-characters.
+ # Make two passes to allow for proper duplicate-argument suppression.
+ ac_configure_args=
+ ac_configure_args0=
+ ac_configure_args1=
+ ac_sep=
+ ac_must_keep_next=false
+ for ac_pass in 1 2
+ do
+   for ac_arg
+   do
+     case $ac_arg in
+     -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+     -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+     | -silent | --silent | --silen | --sile | --sil)
+       continue ;;
+     *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+       ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+     esac
+     case $ac_pass in
+     1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+     2)
+       ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+       if test $ac_must_keep_next = true; then
+ 	ac_must_keep_next=false # Got value, back to normal.
+       else
+ 	case $ac_arg in
+ 	  *=* | --config-cache | -C | -disable-* | --disable-* \
+ 	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+ 	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+ 	  | -with-* | --with-* | -without-* | --without-* | --x)
+ 	    case "$ac_configure_args0 " in
+ 	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+ 	    esac
+ 	    ;;
+ 	  -* ) ac_must_keep_next=true ;;
+ 	esac
+       fi
+       ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
+       # Get rid of the leading space.
+       ac_sep=" "
+       ;;
+     esac
+   done
+ done
+ $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+ $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+ 
+ # When interrupted or exit'd, cleanup temporary files, and complete
+ # config.log.  We remove comments because anyway the quotes in there
+ # would cause problems or look ugly.
+ # WARNING: Be sure not to use single quotes in there, as some shells,
+ # such as our DU 5.0 friend, will then `close' the trap.
+ trap 'exit_status=$?
+   # Save into config.log some information that might help in debugging.
+   {
+     echo
+ 
+     cat <<\_ASBOX
+ ## ---------------- ##
+ ## Cache variables. ##
+ ## ---------------- ##
+ _ASBOX
+     echo
+     # The following way of writing the cache mishandles newlines in values,
+ {
+   (set) 2>&1 |
+     case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
+     *ac_space=\ *)
+       sed -n \
+ 	"s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
+ 	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
+       ;;
+     *)
+       sed -n \
+ 	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+       ;;
+     esac;
+ }
+     echo
+ 
+     cat <<\_ASBOX
+ ## ----------------- ##
+ ## Output variables. ##
+ ## ----------------- ##
+ _ASBOX
+     echo
+     for ac_var in $ac_subst_vars
+     do
+       eval ac_val=$`echo $ac_var`
+       echo "$ac_var='"'"'$ac_val'"'"'"
+     done | sort
+     echo
+ 
+     if test -n "$ac_subst_files"; then
+       cat <<\_ASBOX
+ ## ------------- ##
+ ## Output files. ##
+ ## ------------- ##
+ _ASBOX
+       echo
+       for ac_var in $ac_subst_files
+       do
+ 	eval ac_val=$`echo $ac_var`
+ 	echo "$ac_var='"'"'$ac_val'"'"'"
+       done | sort
+       echo
+     fi
+ 
+     if test -s confdefs.h; then
+       cat <<\_ASBOX
+ ## ----------- ##
+ ## confdefs.h. ##
+ ## ----------- ##
+ _ASBOX
+       echo
+       sed "/^$/d" confdefs.h | sort
+       echo
+     fi
+     test "$ac_signal" != 0 &&
+       echo "$as_me: caught signal $ac_signal"
+     echo "$as_me: exit $exit_status"
+   } >&5
+   rm -f core *.core &&
+   rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
+     exit $exit_status
+      ' 0
+ for ac_signal in 1 2 13 15; do
+   trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+ done
+ ac_signal=0
+ 
+ # confdefs.h avoids OS command line length limits that DEFS can exceed.
+ rm -rf conftest* confdefs.h
+ # AIX cpp loses on an empty file, so make sure it contains at least a newline.
+ echo >confdefs.h
+ 
+ # Predefined preprocessor variables.
+ 
+ cat >>confdefs.h <<_ACEOF
+ #define PACKAGE_NAME "$PACKAGE_NAME"
+ _ACEOF
+ 
+ 
+ cat >>confdefs.h <<_ACEOF
+ #define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+ _ACEOF
+ 
+ 
+ cat >>confdefs.h <<_ACEOF
+ #define PACKAGE_VERSION "$PACKAGE_VERSION"
+ _ACEOF
+ 
+ 
+ cat >>confdefs.h <<_ACEOF
+ #define PACKAGE_STRING "$PACKAGE_STRING"
+ _ACEOF
+ 
+ 
+ cat >>confdefs.h <<_ACEOF
+ #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+ _ACEOF
+ 
+ 
+ # Let the site file select an alternate cache file if it wants to.
+ # Prefer explicitly selected file to automatically selected ones.
+ if test -z "$CONFIG_SITE"; then
+   if test "x$prefix" != xNONE; then
+     CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+   else
+     CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+   fi
+ fi
+ for ac_site_file in $CONFIG_SITE; do
+   if test -r "$ac_site_file"; then
+     { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+ echo "$as_me: loading site script $ac_site_file" >&6;}
+     sed 's/^/| /' "$ac_site_file" >&5
+     . "$ac_site_file"
+   fi
+ done
+ 
+ if test -r "$cache_file"; then
+   # Some versions of bash will fail to source /dev/null (special
+   # files actually), so we avoid doing that.
+   if test -f "$cache_file"; then
+     { echo "$as_me:$LINENO: loading cache $cache_file" >&5
+ echo "$as_me: loading cache $cache_file" >&6;}
+     case $cache_file in
+       [\\/]* | ?:[\\/]* ) . $cache_file;;
+       *)                      . ./$cache_file;;
+     esac
+   fi
+ else
+   { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+ echo "$as_me: creating cache $cache_file" >&6;}
+   >$cache_file
+ fi
+ 
+ # Check that the precious variables saved in the cache have kept the same
+ # value.
+ ac_cache_corrupted=false
+ for ac_var in `(set) 2>&1 |
+ 	       sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
+   eval ac_old_set=\$ac_cv_env_${ac_var}_set
+   eval ac_new_set=\$ac_env_${ac_var}_set
+   eval ac_old_val="\$ac_cv_env_${ac_var}_value"
+   eval ac_new_val="\$ac_env_${ac_var}_value"
+   case $ac_old_set,$ac_new_set in
+     set,)
+       { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+ echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+       ac_cache_corrupted=: ;;
+     ,set)
+       { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+ echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+       ac_cache_corrupted=: ;;
+     ,);;
+     *)
+       if test "x$ac_old_val" != "x$ac_new_val"; then
+ 	{ echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+ echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ 	{ echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
+ echo "$as_me:   former value:  $ac_old_val" >&2;}
+ 	{ echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
+ echo "$as_me:   current value: $ac_new_val" >&2;}
+ 	ac_cache_corrupted=:
+       fi;;
+   esac
+   # Pass precious variables to config.status.
+   if test "$ac_new_set" = set; then
+     case $ac_new_val in
+     *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+       ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+     *) ac_arg=$ac_var=$ac_new_val ;;
+     esac
+     case " $ac_configure_args " in
+       *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+       *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+     esac
+   fi
+ done
+ if $ac_cache_corrupted; then
+   { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+ echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+   { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+ echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ 
+ ac_ext=c
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ ac_aux_dir=
+ for ac_dir in .. $srcdir/..; do
+   if test -f $ac_dir/install-sh; then
+     ac_aux_dir=$ac_dir
+     ac_install_sh="$ac_aux_dir/install-sh -c"
+     break
+   elif test -f $ac_dir/install.sh; then
+     ac_aux_dir=$ac_dir
+     ac_install_sh="$ac_aux_dir/install.sh -c"
+     break
+   elif test -f $ac_dir/shtool; then
+     ac_aux_dir=$ac_dir
+     ac_install_sh="$ac_aux_dir/shtool install -c"
+     break
+   fi
+ done
+ if test -z "$ac_aux_dir"; then
+   { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in .. $srcdir/.." >&5
+ echo "$as_me: error: cannot find install-sh or install.sh in .. $srcdir/.." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ ac_config_guess="$SHELL $ac_aux_dir/config.guess"
+ ac_config_sub="$SHELL $ac_aux_dir/config.sub"
+ ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
+ 
+ # Make sure we can run config.sub.
+ $ac_config_sub sun4 >/dev/null 2>&1 ||
+   { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5
+ echo "$as_me: error: cannot run $ac_config_sub" >&2;}
+    { (exit 1); exit 1; }; }
+ 
+ echo "$as_me:$LINENO: checking build system type" >&5
+ echo $ECHO_N "checking build system type... $ECHO_C" >&6
+ if test "${ac_cv_build+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   ac_cv_build_alias=$build_alias
+ test -z "$ac_cv_build_alias" &&
+   ac_cv_build_alias=`$ac_config_guess`
+ test -z "$ac_cv_build_alias" &&
+   { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
+ echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
+    { (exit 1); exit 1; }; }
+ ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
+   { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5
+ echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;}
+    { (exit 1); exit 1; }; }
+ 
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_build" >&5
+ echo "${ECHO_T}$ac_cv_build" >&6
+ build=$ac_cv_build
+ build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+ build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+ build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+ 
+ 
+ echo "$as_me:$LINENO: checking host system type" >&5
+ echo $ECHO_N "checking host system type... $ECHO_C" >&6
+ if test "${ac_cv_host+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   ac_cv_host_alias=$host_alias
+ test -z "$ac_cv_host_alias" &&
+   ac_cv_host_alias=$ac_cv_build_alias
+ ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
+   { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5
+ echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
+    { (exit 1); exit 1; }; }
+ 
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+ echo "${ECHO_T}$ac_cv_host" >&6
+ host=$ac_cv_host
+ host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+ host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+ host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+ 
+ 
+ echo "$as_me:$LINENO: checking target system type" >&5
+ echo $ECHO_N "checking target system type... $ECHO_C" >&6
+ if test "${ac_cv_target+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   ac_cv_target_alias=$target_alias
+ test "x$ac_cv_target_alias" = "x" &&
+   ac_cv_target_alias=$ac_cv_host_alias
+ ac_cv_target=`$ac_config_sub $ac_cv_target_alias` ||
+   { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_target_alias failed" >&5
+ echo "$as_me: error: $ac_config_sub $ac_cv_target_alias failed" >&2;}
+    { (exit 1); exit 1; }; }
+ 
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_target" >&5
+ echo "${ECHO_T}$ac_cv_target" >&6
+ target=$ac_cv_target
+ target_cpu=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+ target_vendor=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+ target_os=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+ 
+ 
+ # The aliases save the names the user supplied, while $host etc.
+ # will get canonicalized.
+ test -n "$target_alias" &&
+   test "$program_prefix$program_suffix$program_transform_name" = \
+     NONENONEs,x,x, &&
+   program_prefix=${target_alias}-
+ ac_ext=c
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ if test -n "$ac_tool_prefix"; then
+   # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}gcc; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_prog_CC+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -n "$CC"; then
+   ac_cv_prog_CC="$CC" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_CC="${ac_tool_prefix}gcc"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+ fi
+ fi
+ CC=$ac_cv_prog_CC
+ if test -n "$CC"; then
+   echo "$as_me:$LINENO: result: $CC" >&5
+ echo "${ECHO_T}$CC" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+ fi
+ if test -z "$ac_cv_prog_CC"; then
+   ac_ct_CC=$CC
+   # Extract the first word of "gcc", so it can be a program name with args.
+ set dummy gcc; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -n "$ac_ct_CC"; then
+   ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_ac_ct_CC="gcc"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+ fi
+ fi
+ ac_ct_CC=$ac_cv_prog_ac_ct_CC
+ if test -n "$ac_ct_CC"; then
+   echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+ echo "${ECHO_T}$ac_ct_CC" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+   CC=$ac_ct_CC
+ else
+   CC="$ac_cv_prog_CC"
+ fi
+ 
+ if test -z "$CC"; then
+   if test -n "$ac_tool_prefix"; then
+   # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}cc; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_prog_CC+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -n "$CC"; then
+   ac_cv_prog_CC="$CC" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_CC="${ac_tool_prefix}cc"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+ fi
+ fi
+ CC=$ac_cv_prog_CC
+ if test -n "$CC"; then
+   echo "$as_me:$LINENO: result: $CC" >&5
+ echo "${ECHO_T}$CC" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+ fi
+ if test -z "$ac_cv_prog_CC"; then
+   ac_ct_CC=$CC
+   # Extract the first word of "cc", so it can be a program name with args.
+ set dummy cc; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -n "$ac_ct_CC"; then
+   ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_ac_ct_CC="cc"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+ fi
+ fi
+ ac_ct_CC=$ac_cv_prog_ac_ct_CC
+ if test -n "$ac_ct_CC"; then
+   echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+ echo "${ECHO_T}$ac_ct_CC" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+   CC=$ac_ct_CC
+ else
+   CC="$ac_cv_prog_CC"
+ fi
+ 
+ fi
+ if test -z "$CC"; then
+   # Extract the first word of "cc", so it can be a program name with args.
+ set dummy cc; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_prog_CC+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -n "$CC"; then
+   ac_cv_prog_CC="$CC" # Let the user override the test.
+ else
+   ac_prog_rejected=no
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+        ac_prog_rejected=yes
+        continue
+      fi
+     ac_cv_prog_CC="cc"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+ if test $ac_prog_rejected = yes; then
+   # We found a bogon in the path, so make sure we never use it.
+   set dummy $ac_cv_prog_CC
+   shift
+   if test $# != 0; then
+     # We chose a different compiler from the bogus one.
+     # However, it has the same basename, so the bogon will be chosen
+     # first if we set CC to just the basename; use the full file name.
+     shift
+     ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+   fi
+ fi
+ fi
+ fi
+ CC=$ac_cv_prog_CC
+ if test -n "$CC"; then
+   echo "$as_me:$LINENO: result: $CC" >&5
+ echo "${ECHO_T}$CC" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+ fi
+ if test -z "$CC"; then
+   if test -n "$ac_tool_prefix"; then
+   for ac_prog in cl
+   do
+     # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+ set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_prog_CC+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -n "$CC"; then
+   ac_cv_prog_CC="$CC" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+ fi
+ fi
+ CC=$ac_cv_prog_CC
+ if test -n "$CC"; then
+   echo "$as_me:$LINENO: result: $CC" >&5
+ echo "${ECHO_T}$CC" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+     test -n "$CC" && break
+   done
+ fi
+ if test -z "$CC"; then
+   ac_ct_CC=$CC
+   for ac_prog in cl
+ do
+   # Extract the first word of "$ac_prog", so it can be a program name with args.
+ set dummy $ac_prog; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -n "$ac_ct_CC"; then
+   ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_ac_ct_CC="$ac_prog"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+ fi
+ fi
+ ac_ct_CC=$ac_cv_prog_ac_ct_CC
+ if test -n "$ac_ct_CC"; then
+   echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+ echo "${ECHO_T}$ac_ct_CC" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+   test -n "$ac_ct_CC" && break
+ done
+ 
+   CC=$ac_ct_CC
+ fi
+ 
+ fi
+ 
+ 
+ test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+ See \`config.log' for more details." >&5
+ echo "$as_me: error: no acceptable C compiler found in \$PATH
+ See \`config.log' for more details." >&2;}
+    { (exit 1); exit 1; }; }
+ 
+ # Provide some information about the compiler.
+ echo "$as_me:$LINENO:" \
+      "checking for C compiler version" >&5
+ ac_compiler=`set X $ac_compile; echo $2`
+ { (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+   (eval $ac_compiler --version </dev/null >&5) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }
+ { (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+   (eval $ac_compiler -v </dev/null >&5) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }
+ { (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+   (eval $ac_compiler -V </dev/null >&5) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }
+ 
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ 
+ int
+ main ()
+ {
+ 
+   ;
+   return 0;
+ }
+ _ACEOF
+ ac_clean_files_save=$ac_clean_files
+ ac_clean_files="$ac_clean_files a.out a.exe b.out"
+ # Try to create an executable without -o first, disregard a.out.
+ # It will help us diagnose broken compilers, and finding out an intuition
+ # of exeext.
+ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
+ echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
+ ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+ if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
+   (eval $ac_link_default) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; then
+   # Find the output, starting from the most likely.  This scheme is
+ # not robust to junk in `.', hence go to wildcards (a.*) only as a last
+ # resort.
+ 
+ # Be careful to initialize this variable, since it used to be cached.
+ # Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
+ ac_cv_exeext=
+ # b.out is created by i960 compilers.
+ for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
+ do
+   test -f "$ac_file" || continue
+   case $ac_file in
+     *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
+ 	;;
+     conftest.$ac_ext )
+ 	# This is the source file.
+ 	;;
+     [ab].out )
+ 	# We found the default executable, but exeext='' is most
+ 	# certainly right.
+ 	break;;
+     *.* )
+ 	ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ 	# FIXME: I believe we export ac_cv_exeext for Libtool,
+ 	# but it would be cool to find out if it's true.  Does anybody
+ 	# maintain Libtool? --akim.
+ 	export ac_cv_exeext
+ 	break;;
+     * )
+ 	break;;
+   esac
+ done
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ { { echo "$as_me:$LINENO: error: C compiler cannot create executables
+ See \`config.log' for more details." >&5
+ echo "$as_me: error: C compiler cannot create executables
+ See \`config.log' for more details." >&2;}
+    { (exit 77); exit 77; }; }
+ fi
+ 
+ ac_exeext=$ac_cv_exeext
+ echo "$as_me:$LINENO: result: $ac_file" >&5
+ echo "${ECHO_T}$ac_file" >&6
+ 
+ # Check the compiler produces executables we can run.  If not, either
+ # the compiler is broken, or we cross compile.
+ echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+ echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
+ # FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+ # If not cross compiling, check that we can run a simple program.
+ if test "$cross_compiling" != yes; then
+   if { ac_try='./$ac_file'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+     cross_compiling=no
+   else
+     if test "$cross_compiling" = maybe; then
+ 	cross_compiling=yes
+     else
+ 	{ { echo "$as_me:$LINENO: error: cannot run C compiled programs.
+ If you meant to cross compile, use \`--host'.
+ See \`config.log' for more details." >&5
+ echo "$as_me: error: cannot run C compiled programs.
+ If you meant to cross compile, use \`--host'.
+ See \`config.log' for more details." >&2;}
+    { (exit 1); exit 1; }; }
+     fi
+   fi
+ fi
+ echo "$as_me:$LINENO: result: yes" >&5
+ echo "${ECHO_T}yes" >&6
+ 
+ rm -f a.out a.exe conftest$ac_cv_exeext b.out
+ ac_clean_files=$ac_clean_files_save
+ # Check the compiler produces executables we can run.  If not, either
+ # the compiler is broken, or we cross compile.
+ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+ echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
+ echo "$as_me:$LINENO: result: $cross_compiling" >&5
+ echo "${ECHO_T}$cross_compiling" >&6
+ 
+ echo "$as_me:$LINENO: checking for suffix of executables" >&5
+ echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+   (eval $ac_link) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; then
+   # If both `conftest.exe' and `conftest' are `present' (well, observable)
+ # catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+ # work properly (i.e., refer to `conftest.exe'), while it won't with
+ # `rm'.
+ for ac_file in conftest.exe conftest conftest.*; do
+   test -f "$ac_file" || continue
+   case $ac_file in
+     *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
+     *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ 	  export ac_cv_exeext
+ 	  break;;
+     * ) break;;
+   esac
+ done
+ else
+   { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+ See \`config.log' for more details." >&5
+ echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
+ See \`config.log' for more details." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ 
+ rm -f conftest$ac_cv_exeext
+ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+ echo "${ECHO_T}$ac_cv_exeext" >&6
+ 
+ rm -f conftest.$ac_ext
+ EXEEXT=$ac_cv_exeext
+ ac_exeext=$EXEEXT
+ echo "$as_me:$LINENO: checking for suffix of object files" >&5
+ echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
+ if test "${ac_cv_objext+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ 
+ int
+ main ()
+ {
+ 
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.o conftest.obj
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; then
+   for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
+   case $ac_file in
+     *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
+     *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+        break;;
+   esac
+ done
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+ See \`config.log' for more details." >&5
+ echo "$as_me: error: cannot compute suffix of object files: cannot compile
+ See \`config.log' for more details." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ 
+ rm -f conftest.$ac_cv_objext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+ echo "${ECHO_T}$ac_cv_objext" >&6
+ OBJEXT=$ac_cv_objext
+ ac_objext=$OBJEXT
+ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+ echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
+ if test "${ac_cv_c_compiler_gnu+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ 
+ int
+ main ()
+ {
+ #ifndef __GNUC__
+        choke me
+ #endif
+ 
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_compiler_gnu=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_compiler_gnu=no
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_cv_c_compiler_gnu=$ac_compiler_gnu
+ 
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+ echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
+ GCC=`test $ac_compiler_gnu = yes && echo yes`
+ ac_test_CFLAGS=${CFLAGS+set}
+ ac_save_CFLAGS=$CFLAGS
+ CFLAGS="-g"
+ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+ echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
+ if test "${ac_cv_prog_cc_g+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ 
+ int
+ main ()
+ {
+ 
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_prog_cc_g=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_prog_cc_g=no
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+ echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
+ if test "$ac_test_CFLAGS" = set; then
+   CFLAGS=$ac_save_CFLAGS
+ elif test $ac_cv_prog_cc_g = yes; then
+   if test "$GCC" = yes; then
+     CFLAGS="-g -O2"
+   else
+     CFLAGS="-g"
+   fi
+ else
+   if test "$GCC" = yes; then
+     CFLAGS="-O2"
+   else
+     CFLAGS=
+   fi
+ fi
+ echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
+ echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
+ if test "${ac_cv_prog_cc_stdc+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   ac_cv_prog_cc_stdc=no
+ ac_save_CC=$CC
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <stdarg.h>
+ #include <stdio.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ /* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+ struct buf { int x; };
+ FILE * (*rcsopen) (struct buf *, struct stat *, int);
+ static char *e (p, i)
+      char **p;
+      int i;
+ {
+   return p[i];
+ }
+ static char *f (char * (*g) (char **, int), char **p, ...)
+ {
+   char *s;
+   va_list v;
+   va_start (v,p);
+   s = g (p, va_arg (v,int));
+   va_end (v);
+   return s;
+ }
+ 
+ /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+    function prototypes and stuff, but not '\xHH' hex character constants.
+    These don't provoke an error unfortunately, instead are silently treated
+    as 'x'.  The following induces an error, until -std1 is added to get
+    proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+    array size at least.  It's necessary to write '\x00'==0 to get something
+    that's true only with -std1.  */
+ int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+ 
+ int test (int i, double x);
+ struct s1 {int (*f) (int a);};
+ struct s2 {int (*f) (double a);};
+ int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+ int argc;
+ char **argv;
+ int
+ main ()
+ {
+ return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+   ;
+   return 0;
+ }
+ _ACEOF
+ # Don't try gcc -ansi; that turns off useful extensions and
+ # breaks some systems' header files.
+ # AIX			-qlanglvl=ansi
+ # Ultrix and OSF/1	-std1
+ # HP-UX 10.20 and later	-Ae
+ # HP-UX older versions	-Aa -D_HPUX_SOURCE
+ # SVR4			-Xc -D__EXTENSIONS__
+ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+ do
+   CC="$ac_save_CC $ac_arg"
+   rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_prog_cc_stdc=$ac_arg
+ break
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ fi
+ rm -f conftest.err conftest.$ac_objext
+ done
+ rm -f conftest.$ac_ext conftest.$ac_objext
+ CC=$ac_save_CC
+ 
+ fi
+ 
+ case "x$ac_cv_prog_cc_stdc" in
+   x|xno)
+     echo "$as_me:$LINENO: result: none needed" >&5
+ echo "${ECHO_T}none needed" >&6 ;;
+   *)
+     echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
+ echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
+     CC="$CC $ac_cv_prog_cc_stdc" ;;
+ esac
+ 
+ # Some people use a C++ compiler to compile C.  Since we use `exit',
+ # in C++ we need to declare it.  In case someone uses the same compiler
+ # for both compiling C and C++ we need to have the C++ compiler decide
+ # the declaration of exit, since it's the most demanding environment.
+ cat >conftest.$ac_ext <<_ACEOF
+ #ifndef __cplusplus
+   choke me
+ #endif
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   for ac_declaration in \
+    '' \
+    'extern "C" void std::exit (int) throw (); using std::exit;' \
+    'extern "C" void std::exit (int); using std::exit;' \
+    'extern "C" void exit (int) throw ();' \
+    'extern "C" void exit (int);' \
+    'void exit (int);'
+ do
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_declaration
+ #include <stdlib.h>
+ int
+ main ()
+ {
+ exit (42);
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   :
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ continue
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_declaration
+ int
+ main ()
+ {
+ exit (42);
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   break
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+ rm -f conftest*
+ if test -n "$ac_declaration"; then
+   echo '#ifdef __cplusplus' >>confdefs.h
+   echo $ac_declaration      >>confdefs.h
+   echo '#endif'             >>confdefs.h
+ fi
+ 
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_ext=c
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ 
+ 
+ # Determine the noncanonical target name, for directory use.
+  case ${build_alias} in
+   "") build_noncanonical=${build} ;;
+   *) build_noncanonical=${build_alias} ;;
+ esac
+ 
+  case ${host_alias} in
+   "") host_noncanonical=${build_noncanonical} ;;
+   *) host_noncanonical=${host_alias} ;;
+ esac
+ 
+  case ${target_alias} in
+   "") target_noncanonical=${host_noncanonical} ;;
+   *) target_noncanonical=${target_alias} ;;
+ esac
+ 
+ 
+ 
+ 
+ # Specify the local prefix
+ local_prefix=
+ 
+ # Check whether --with-local-prefix or --without-local-prefix was given.
+ if test "${with_local_prefix+set}" = set; then
+   withval="$with_local_prefix"
+   case "${withval}" in
+ yes)	{ { echo "$as_me:$LINENO: error: bad value ${withval} given for local include directory prefix" >&5
+ echo "$as_me: error: bad value ${withval} given for local include directory prefix" >&2;}
+    { (exit 1); exit 1; }; } ;;
+ no)	;;
+ *)	local_prefix=$with_local_prefix ;;
+ esac
+ fi;
+ 
+ # Default local prefix if it is empty
+ if test x$local_prefix = x; then
+ 	local_prefix=/usr/local
+ fi
+ 
+ # Choose one or two-process fix methodology.  Systems that cannot handle
+ # bi-directional pipes must use the two process method.
+ #
+ # Check whether --enable-twoprocess or --disable-twoprocess was given.
+ if test "${enable_twoprocess+set}" = set; then
+   enableval="$enable_twoprocess"
+   if test "x$enable_twoprocess" = xyes; then
+ 	TARGET=twoprocess
+ else
+ 	TARGET=oneprocess
+ fi
+ else
+   case $host in
+ 	i?86-*-msdosdjgpp* | \
+ 	i?86-*-mingw32* | \
+ 	*-*-beos* )
+ 		TARGET=twoprocess
+ 		;;
+ 
+ 	* )
+ 		TARGET=oneprocess
+ 		;;
+ esac
+ fi;
+ 
+ 
+ if test $TARGET = twoprocess; then
+ 
+ cat >>confdefs.h <<\_ACEOF
+ #define SEPARATE_FIX_PROC 1
+ _ACEOF
+ 
+ fi
+ 
+ 
+ if test "${with_gcc_version_trigger+set}" = set; then
+   gcc_version_trigger=$with_gcc_version_trigger
+ else
+   gcc_version_trigger=$srcdir/../gcc/version.c
+ fi
+ if test -f "${gcc_version_trigger}"; then
+   gcc_version_full=`grep version_string "${gcc_version_trigger}" | sed -e 's/.*"\([^"]*\)".*/\1/'`
+ else
+   gcc_version_full=`$CC -v 2>&1 | sed -n 's/^gcc version //p'`
+ fi
+ gcc_version=`echo ${gcc_version_full} | sed -e 's/\([^ ]*\) .*/\1/'`
+ 
+ 
+ 
+ 
+ 
+ case $host in
+ 	vax-dec-bsd* )
+ 
+ cat >>confdefs.h <<\_ACEOF
+ #define exit xexit
+ _ACEOF
+ 
+ 
+ cat >>confdefs.h <<\_ACEOF
+ #define atexit xatexit
+ _ACEOF
+ 
+ 		;;
+ esac
+ 
+ 
+ cat >>confdefs.h <<_ACEOF
+ #define EXE_EXT "$ac_exeext"
+ _ACEOF
+ 
+ 
+ # Checks for header files.
+ 
+ ac_ext=c
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+ echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
+ # On Suns, sometimes $CPP names a directory.
+ if test -n "$CPP" && test -d "$CPP"; then
+   CPP=
+ fi
+ if test -z "$CPP"; then
+   if test "${ac_cv_prog_CPP+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+       # Double quotes because CPP needs to be expanded
+     for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+     do
+       ac_preproc_ok=false
+ for ac_c_preproc_warn_flag in '' yes
+ do
+   # Use a header file that comes with gcc, so configuring glibc
+   # with a fresh cross-compiler works.
+   # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+   # <limits.h> exists even on freestanding compilers.
+   # On the NeXT, cc -E runs the code through the compiler's parser,
+   # not just through cpp. "Syntax error" is here to catch this case.
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #ifdef __STDC__
+ # include <limits.h>
+ #else
+ # include <assert.h>
+ #endif
+ 		     Syntax error
+ _ACEOF
+ if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } >/dev/null; then
+   if test -s conftest.err; then
+     ac_cpp_err=$ac_c_preproc_warn_flag
+     ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+   else
+     ac_cpp_err=
+   fi
+ else
+   ac_cpp_err=yes
+ fi
+ if test -z "$ac_cpp_err"; then
+   :
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+   # Broken: fails on valid input.
+ continue
+ fi
+ rm -f conftest.err conftest.$ac_ext
+ 
+   # OK, works on sane cases.  Now check whether non-existent headers
+   # can be detected and how.
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <ac_nonexistent.h>
+ _ACEOF
+ if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } >/dev/null; then
+   if test -s conftest.err; then
+     ac_cpp_err=$ac_c_preproc_warn_flag
+     ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+   else
+     ac_cpp_err=
+   fi
+ else
+   ac_cpp_err=yes
+ fi
+ if test -z "$ac_cpp_err"; then
+   # Broken: success on invalid input.
+ continue
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+   # Passes both tests.
+ ac_preproc_ok=:
+ break
+ fi
+ rm -f conftest.err conftest.$ac_ext
+ 
+ done
+ # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+ rm -f conftest.err conftest.$ac_ext
+ if $ac_preproc_ok; then
+   break
+ fi
+ 
+     done
+     ac_cv_prog_CPP=$CPP
+ 
+ fi
+   CPP=$ac_cv_prog_CPP
+ else
+   ac_cv_prog_CPP=$CPP
+ fi
+ echo "$as_me:$LINENO: result: $CPP" >&5
+ echo "${ECHO_T}$CPP" >&6
+ ac_preproc_ok=false
+ for ac_c_preproc_warn_flag in '' yes
+ do
+   # Use a header file that comes with gcc, so configuring glibc
+   # with a fresh cross-compiler works.
+   # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+   # <limits.h> exists even on freestanding compilers.
+   # On the NeXT, cc -E runs the code through the compiler's parser,
+   # not just through cpp. "Syntax error" is here to catch this case.
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #ifdef __STDC__
+ # include <limits.h>
+ #else
+ # include <assert.h>
+ #endif
+ 		     Syntax error
+ _ACEOF
+ if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } >/dev/null; then
+   if test -s conftest.err; then
+     ac_cpp_err=$ac_c_preproc_warn_flag
+     ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+   else
+     ac_cpp_err=
+   fi
+ else
+   ac_cpp_err=yes
+ fi
+ if test -z "$ac_cpp_err"; then
+   :
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+   # Broken: fails on valid input.
+ continue
+ fi
+ rm -f conftest.err conftest.$ac_ext
+ 
+   # OK, works on sane cases.  Now check whether non-existent headers
+   # can be detected and how.
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <ac_nonexistent.h>
+ _ACEOF
+ if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } >/dev/null; then
+   if test -s conftest.err; then
+     ac_cpp_err=$ac_c_preproc_warn_flag
+     ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+   else
+     ac_cpp_err=
+   fi
+ else
+   ac_cpp_err=yes
+ fi
+ if test -z "$ac_cpp_err"; then
+   # Broken: success on invalid input.
+ continue
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+   # Passes both tests.
+ ac_preproc_ok=:
+ break
+ fi
+ rm -f conftest.err conftest.$ac_ext
+ 
+ done
+ # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+ rm -f conftest.err conftest.$ac_ext
+ if $ac_preproc_ok; then
+   :
+ else
+   { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+ See \`config.log' for more details." >&5
+ echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+ See \`config.log' for more details." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
+ 
+ ac_ext=c
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ 
+ 
+ echo "$as_me:$LINENO: checking for egrep" >&5
+ echo $ECHO_N "checking for egrep... $ECHO_C" >&6
+ if test "${ac_cv_prog_egrep+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if echo a | (grep -E '(a|b)') >/dev/null 2>&1
+     then ac_cv_prog_egrep='grep -E'
+     else ac_cv_prog_egrep='egrep'
+     fi
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
+ echo "${ECHO_T}$ac_cv_prog_egrep" >&6
+  EGREP=$ac_cv_prog_egrep
+ 
+ 
+ echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+ echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+ if test "${ac_cv_header_stdc+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <stdlib.h>
+ #include <stdarg.h>
+ #include <string.h>
+ #include <float.h>
+ 
+ int
+ main ()
+ {
+ 
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_header_stdc=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_header_stdc=no
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ 
+ if test $ac_cv_header_stdc = yes; then
+   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <string.h>
+ 
+ _ACEOF
+ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+   $EGREP "memchr" >/dev/null 2>&1; then
+   :
+ else
+   ac_cv_header_stdc=no
+ fi
+ rm -f conftest*
+ 
+ fi
+ 
+ if test $ac_cv_header_stdc = yes; then
+   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <stdlib.h>
+ 
+ _ACEOF
+ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+   $EGREP "free" >/dev/null 2>&1; then
+   :
+ else
+   ac_cv_header_stdc=no
+ fi
+ rm -f conftest*
+ 
+ fi
+ 
+ if test $ac_cv_header_stdc = yes; then
+   # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+   if test "$cross_compiling" = yes; then
+   :
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <ctype.h>
+ #if ((' ' & 0x0FF) == 0x020)
+ # define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+ # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+ #else
+ # define ISLOWER(c) \
+ 		   (('a' <= (c) && (c) <= 'i') \
+ 		     || ('j' <= (c) && (c) <= 'r') \
+ 		     || ('s' <= (c) && (c) <= 'z'))
+ # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+ #endif
+ 
+ #define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+ int
+ main ()
+ {
+   int i;
+   for (i = 0; i < 256; i++)
+     if (XOR (islower (i), ISLOWER (i))
+ 	|| toupper (i) != TOUPPER (i))
+       exit(2);
+   exit (0);
+ }
+ _ACEOF
+ rm -f conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+   (eval $ac_link) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   :
+ else
+   echo "$as_me: program exited with status $ac_status" >&5
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ( exit $ac_status )
+ ac_cv_header_stdc=no
+ fi
+ rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+ fi
+ fi
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+ echo "${ECHO_T}$ac_cv_header_stdc" >&6
+ if test $ac_cv_header_stdc = yes; then
+ 
+ cat >>confdefs.h <<\_ACEOF
+ #define STDC_HEADERS 1
+ _ACEOF
+ 
+ fi
+ 
+ # On IRIX 5.3, sys/types and inttypes.h are conflicting.
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+ 		  inttypes.h stdint.h unistd.h
+ do
+ as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+ echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+ if eval "test \"\${$as_ac_Header+set}\" = set"; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
+ 
+ #include <$ac_header>
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   eval "$as_ac_Header=yes"
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ eval "$as_ac_Header=no"
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+ echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+ if test `eval echo '${'$as_ac_Header'}'` = yes; then
+   cat >>confdefs.h <<_ACEOF
+ #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+ _ACEOF
+ 
+ fi
+ 
+ done
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ for ac_header in stddef.h stdlib.h strings.h unistd.h fcntl.h sys/file.h \
+ 	sys/stat.h
+ do
+ as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ if eval "test \"\${$as_ac_Header+set}\" = set"; then
+   echo "$as_me:$LINENO: checking for $ac_header" >&5
+ echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+ if eval "test \"\${$as_ac_Header+set}\" = set"; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ fi
+ echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+ echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+ else
+   # Is the header compilable?
+ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+ echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
+ #include <$ac_header>
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_header_compiler=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_header_compiler=no
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+ echo "${ECHO_T}$ac_header_compiler" >&6
+ 
+ # Is the header present?
+ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+ echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <$ac_header>
+ _ACEOF
+ if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } >/dev/null; then
+   if test -s conftest.err; then
+     ac_cpp_err=$ac_c_preproc_warn_flag
+     ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+   else
+     ac_cpp_err=
+   fi
+ else
+   ac_cpp_err=yes
+ fi
+ if test -z "$ac_cpp_err"; then
+   ac_header_preproc=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+   ac_header_preproc=no
+ fi
+ rm -f conftest.err conftest.$ac_ext
+ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+ echo "${ECHO_T}$ac_header_preproc" >&6
+ 
+ # So?  What about this header?
+ case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+   yes:no: )
+     { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+ echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+     { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+ echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+     ac_header_preproc=yes
+     ;;
+   no:yes:* )
+     { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+ echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+     { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+ echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+     { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+ echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+     { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+ echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+     { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+ echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+ echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+     (
+       cat <<\_ASBOX
+ ## -------------------------------------- ##
+ ## Report this to the fixincludes lists.  ##
+ ## -------------------------------------- ##
+ _ASBOX
+     ) |
+       sed "s/^/$as_me: WARNING:     /" >&2
+     ;;
+ esac
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+ echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+ if eval "test \"\${$as_ac_Header+set}\" = set"; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   eval "$as_ac_Header=\$ac_header_preproc"
+ fi
+ echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+ echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+ 
+ fi
+ if test `eval echo '${'$as_ac_Header'}'` = yes; then
+   cat >>confdefs.h <<_ACEOF
+ #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+ _ACEOF
+ 
+ fi
+ 
+ done
+ 
+ 
+ 
+ 
+ 
+ 
+ for ac_func in putc_unlocked fputc_unlocked fputs_unlocked \
+         fwrite_unlocked fprintf_unlocked
+ do
+ as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ echo "$as_me:$LINENO: checking for $ac_func" >&5
+ echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+ if eval "test \"\${$as_ac_var+set}\" = set"; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ /* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+    For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+ #define $ac_func innocuous_$ac_func
+ 
+ /* System header to define __stub macros and hopefully few prototypes,
+     which can conflict with char $ac_func (); below.
+     Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+     <limits.h> exists even on freestanding compilers.  */
+ 
+ #ifdef __STDC__
+ # include <limits.h>
+ #else
+ # include <assert.h>
+ #endif
+ 
+ #undef $ac_func
+ 
+ /* Override any gcc2 internal prototype to avoid an error.  */
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ /* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+ char $ac_func ();
+ /* The GNU C library defines this for functions which it implements
+     to always fail with ENOSYS.  Some functions are actually named
+     something starting with __ and the normal name is an alias.  */
+ #if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+ choke me
+ #else
+ char (*f) () = $ac_func;
+ #endif
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ int
+ main ()
+ {
+ return f != $ac_func;
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+   (eval $ac_link) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest$ac_exeext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   eval "$as_ac_var=yes"
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ eval "$as_ac_var=no"
+ fi
+ rm -f conftest.err conftest.$ac_objext \
+       conftest$ac_exeext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+ echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+ if test `eval echo '${'$as_ac_var'}'` = yes; then
+   cat >>confdefs.h <<_ACEOF
+ #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+ _ACEOF
+ 
+ fi
+ done
+ 
+ echo "$as_me:$LINENO: checking whether abort is declared" >&5
+ echo $ECHO_N "checking whether abort is declared... $ECHO_C" >&6
+ if test "${ac_cv_have_decl_abort+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
+ int
+ main ()
+ {
+ #ifndef abort
+   char *p = (char *) abort;
+ #endif
+ 
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_have_decl_abort=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_have_decl_abort=no
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_have_decl_abort" >&5
+ echo "${ECHO_T}$ac_cv_have_decl_abort" >&6
+ if test $ac_cv_have_decl_abort = yes; then
+ 
+ cat >>confdefs.h <<_ACEOF
+ #define HAVE_DECL_ABORT 1
+ _ACEOF
+ 
+ 
+ else
+   cat >>confdefs.h <<_ACEOF
+ #define HAVE_DECL_ABORT 0
+ _ACEOF
+ 
+ 
+ fi
+ echo "$as_me:$LINENO: checking whether errno is declared" >&5
+ echo $ECHO_N "checking whether errno is declared... $ECHO_C" >&6
+ if test "${ac_cv_have_decl_errno+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
+ int
+ main ()
+ {
+ #ifndef errno
+   char *p = (char *) errno;
+ #endif
+ 
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_have_decl_errno=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_have_decl_errno=no
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_have_decl_errno" >&5
+ echo "${ECHO_T}$ac_cv_have_decl_errno" >&6
+ if test $ac_cv_have_decl_errno = yes; then
+ 
+ cat >>confdefs.h <<_ACEOF
+ #define HAVE_DECL_ERRNO 1
+ _ACEOF
+ 
+ 
+ else
+   cat >>confdefs.h <<_ACEOF
+ #define HAVE_DECL_ERRNO 0
+ _ACEOF
+ 
+ 
+ fi
+ echo "$as_me:$LINENO: checking whether putc_unlocked is declared" >&5
+ echo $ECHO_N "checking whether putc_unlocked is declared... $ECHO_C" >&6
+ if test "${ac_cv_have_decl_putc_unlocked+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
+ int
+ main ()
+ {
+ #ifndef putc_unlocked
+   char *p = (char *) putc_unlocked;
+ #endif
+ 
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_have_decl_putc_unlocked=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_have_decl_putc_unlocked=no
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_have_decl_putc_unlocked" >&5
+ echo "${ECHO_T}$ac_cv_have_decl_putc_unlocked" >&6
+ if test $ac_cv_have_decl_putc_unlocked = yes; then
+ 
+ cat >>confdefs.h <<_ACEOF
+ #define HAVE_DECL_PUTC_UNLOCKED 1
+ _ACEOF
+ 
+ 
+ else
+   cat >>confdefs.h <<_ACEOF
+ #define HAVE_DECL_PUTC_UNLOCKED 0
+ _ACEOF
+ 
+ 
+ fi
+ echo "$as_me:$LINENO: checking whether fputc_unlocked is declared" >&5
+ echo $ECHO_N "checking whether fputc_unlocked is declared... $ECHO_C" >&6
+ if test "${ac_cv_have_decl_fputc_unlocked+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
+ int
+ main ()
+ {
+ #ifndef fputc_unlocked
+   char *p = (char *) fputc_unlocked;
+ #endif
+ 
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_have_decl_fputc_unlocked=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_have_decl_fputc_unlocked=no
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_have_decl_fputc_unlocked" >&5
+ echo "${ECHO_T}$ac_cv_have_decl_fputc_unlocked" >&6
+ if test $ac_cv_have_decl_fputc_unlocked = yes; then
+ 
+ cat >>confdefs.h <<_ACEOF
+ #define HAVE_DECL_FPUTC_UNLOCKED 1
+ _ACEOF
+ 
+ 
+ else
+   cat >>confdefs.h <<_ACEOF
+ #define HAVE_DECL_FPUTC_UNLOCKED 0
+ _ACEOF
+ 
+ 
+ fi
+ echo "$as_me:$LINENO: checking whether fputs_unlocked is declared" >&5
+ echo $ECHO_N "checking whether fputs_unlocked is declared... $ECHO_C" >&6
+ if test "${ac_cv_have_decl_fputs_unlocked+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
+ int
+ main ()
+ {
+ #ifndef fputs_unlocked
+   char *p = (char *) fputs_unlocked;
+ #endif
+ 
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_have_decl_fputs_unlocked=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_have_decl_fputs_unlocked=no
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_have_decl_fputs_unlocked" >&5
+ echo "${ECHO_T}$ac_cv_have_decl_fputs_unlocked" >&6
+ if test $ac_cv_have_decl_fputs_unlocked = yes; then
+ 
+ cat >>confdefs.h <<_ACEOF
+ #define HAVE_DECL_FPUTS_UNLOCKED 1
+ _ACEOF
+ 
+ 
+ else
+   cat >>confdefs.h <<_ACEOF
+ #define HAVE_DECL_FPUTS_UNLOCKED 0
+ _ACEOF
+ 
+ 
+ fi
+ echo "$as_me:$LINENO: checking whether fwrite_unlocked is declared" >&5
+ echo $ECHO_N "checking whether fwrite_unlocked is declared... $ECHO_C" >&6
+ if test "${ac_cv_have_decl_fwrite_unlocked+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
+ int
+ main ()
+ {
+ #ifndef fwrite_unlocked
+   char *p = (char *) fwrite_unlocked;
+ #endif
+ 
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_have_decl_fwrite_unlocked=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_have_decl_fwrite_unlocked=no
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_have_decl_fwrite_unlocked" >&5
+ echo "${ECHO_T}$ac_cv_have_decl_fwrite_unlocked" >&6
+ if test $ac_cv_have_decl_fwrite_unlocked = yes; then
+ 
+ cat >>confdefs.h <<_ACEOF
+ #define HAVE_DECL_FWRITE_UNLOCKED 1
+ _ACEOF
+ 
+ 
+ else
+   cat >>confdefs.h <<_ACEOF
+ #define HAVE_DECL_FWRITE_UNLOCKED 0
+ _ACEOF
+ 
+ 
+ fi
+ echo "$as_me:$LINENO: checking whether fprintf_unlocked is declared" >&5
+ echo $ECHO_N "checking whether fprintf_unlocked is declared... $ECHO_C" >&6
+ if test "${ac_cv_have_decl_fprintf_unlocked+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
+ int
+ main ()
+ {
+ #ifndef fprintf_unlocked
+   char *p = (char *) fprintf_unlocked;
+ #endif
+ 
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_have_decl_fprintf_unlocked=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_have_decl_fprintf_unlocked=no
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_have_decl_fprintf_unlocked" >&5
+ echo "${ECHO_T}$ac_cv_have_decl_fprintf_unlocked" >&6
+ if test $ac_cv_have_decl_fprintf_unlocked = yes; then
+ 
+ cat >>confdefs.h <<_ACEOF
+ #define HAVE_DECL_FPRINTF_UNLOCKED 1
+ _ACEOF
+ 
+ 
+ else
+   cat >>confdefs.h <<_ACEOF
+ #define HAVE_DECL_FPRINTF_UNLOCKED 0
+ _ACEOF
+ 
+ 
+ fi
+ 
+ 
+ 
+ # Checks for typedefs, structures, and compiler characteristics.
+ echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
+ echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6
+ if test "${ac_cv_c_const+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ 
+ int
+ main ()
+ {
+ /* FIXME: Include the comments suggested by Paul. */
+ #ifndef __cplusplus
+   /* Ultrix mips cc rejects this.  */
+   typedef int charset[2];
+   const charset x;
+   /* SunOS 4.1.1 cc rejects this.  */
+   char const *const *ccp;
+   char **p;
+   /* NEC SVR4.0.2 mips cc rejects this.  */
+   struct point {int x, y;};
+   static struct point const zero = {0,0};
+   /* AIX XL C 1.02.0.0 rejects this.
+      It does not let you subtract one const X* pointer from another in
+      an arm of an if-expression whose if-part is not a constant
+      expression */
+   const char *g = "string";
+   ccp = &g + (g ? g-g : 0);
+   /* HPUX 7.0 cc rejects these. */
+   ++ccp;
+   p = (char**) ccp;
+   ccp = (char const *const *) p;
+   { /* SCO 3.2v4 cc rejects this.  */
+     char *t;
+     char const *s = 0 ? (char *) 0 : (char const *) 0;
+ 
+     *t++ = 0;
+   }
+   { /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
+     int x[] = {25, 17};
+     const int *foo = &x[0];
+     ++foo;
+   }
+   { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+     typedef const int *iptr;
+     iptr p = 0;
+     ++p;
+   }
+   { /* AIX XL C 1.02.0.0 rejects this saying
+        "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+     struct s { int j; const int *ap[3]; };
+     struct s *b; b->j = 5;
+   }
+   { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+     const int foo = 10;
+   }
+ #endif
+ 
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_c_const=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_c_const=no
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
+ echo "${ECHO_T}$ac_cv_c_const" >&6
+ if test $ac_cv_c_const = no; then
+ 
+ cat >>confdefs.h <<\_ACEOF
+ #define const
+ _ACEOF
+ 
+ fi
+ 
+ 
+ # Checks for library functions.
+ 
+ if test "${ac_cv_header_sys_mman_h+set}" = set; then
+   echo "$as_me:$LINENO: checking for sys/mman.h" >&5
+ echo $ECHO_N "checking for sys/mman.h... $ECHO_C" >&6
+ if test "${ac_cv_header_sys_mman_h+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_header_sys_mman_h" >&5
+ echo "${ECHO_T}$ac_cv_header_sys_mman_h" >&6
+ else
+   # Is the header compilable?
+ echo "$as_me:$LINENO: checking sys/mman.h usability" >&5
+ echo $ECHO_N "checking sys/mman.h usability... $ECHO_C" >&6
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ $ac_includes_default
+ #include <sys/mman.h>
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_header_compiler=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_header_compiler=no
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+ echo "${ECHO_T}$ac_header_compiler" >&6
+ 
+ # Is the header present?
+ echo "$as_me:$LINENO: checking sys/mman.h presence" >&5
+ echo $ECHO_N "checking sys/mman.h presence... $ECHO_C" >&6
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <sys/mman.h>
+ _ACEOF
+ if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } >/dev/null; then
+   if test -s conftest.err; then
+     ac_cpp_err=$ac_c_preproc_warn_flag
+     ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+   else
+     ac_cpp_err=
+   fi
+ else
+   ac_cpp_err=yes
+ fi
+ if test -z "$ac_cpp_err"; then
+   ac_header_preproc=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+   ac_header_preproc=no
+ fi
+ rm -f conftest.err conftest.$ac_ext
+ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+ echo "${ECHO_T}$ac_header_preproc" >&6
+ 
+ # So?  What about this header?
+ case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+   yes:no: )
+     { echo "$as_me:$LINENO: WARNING: sys/mman.h: accepted by the compiler, rejected by the preprocessor!" >&5
+ echo "$as_me: WARNING: sys/mman.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+     { echo "$as_me:$LINENO: WARNING: sys/mman.h: proceeding with the compiler's result" >&5
+ echo "$as_me: WARNING: sys/mman.h: proceeding with the compiler's result" >&2;}
+     ac_header_preproc=yes
+     ;;
+   no:yes:* )
+     { echo "$as_me:$LINENO: WARNING: sys/mman.h: present but cannot be compiled" >&5
+ echo "$as_me: WARNING: sys/mman.h: present but cannot be compiled" >&2;}
+     { echo "$as_me:$LINENO: WARNING: sys/mman.h:     check for missing prerequisite headers?" >&5
+ echo "$as_me: WARNING: sys/mman.h:     check for missing prerequisite headers?" >&2;}
+     { echo "$as_me:$LINENO: WARNING: sys/mman.h: see the Autoconf documentation" >&5
+ echo "$as_me: WARNING: sys/mman.h: see the Autoconf documentation" >&2;}
+     { echo "$as_me:$LINENO: WARNING: sys/mman.h:     section \"Present But Cannot Be Compiled\"" >&5
+ echo "$as_me: WARNING: sys/mman.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+     { echo "$as_me:$LINENO: WARNING: sys/mman.h: proceeding with the preprocessor's result" >&5
+ echo "$as_me: WARNING: sys/mman.h: proceeding with the preprocessor's result" >&2;}
+     { echo "$as_me:$LINENO: WARNING: sys/mman.h: in the future, the compiler will take precedence" >&5
+ echo "$as_me: WARNING: sys/mman.h: in the future, the compiler will take precedence" >&2;}
+     (
+       cat <<\_ASBOX
+ ## -------------------------------------- ##
+ ## Report this to the fixincludes lists.  ##
+ ## -------------------------------------- ##
+ _ASBOX
+     ) |
+       sed "s/^/$as_me: WARNING:     /" >&2
+     ;;
+ esac
+ echo "$as_me:$LINENO: checking for sys/mman.h" >&5
+ echo $ECHO_N "checking for sys/mman.h... $ECHO_C" >&6
+ if test "${ac_cv_header_sys_mman_h+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   ac_cv_header_sys_mman_h=$ac_header_preproc
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_header_sys_mman_h" >&5
+ echo "${ECHO_T}$ac_cv_header_sys_mman_h" >&6
+ 
+ fi
+ if test $ac_cv_header_sys_mman_h = yes; then
+   gcc_header_sys_mman_h=yes
+ else
+   gcc_header_sys_mman_h=no
+ fi
+ 
+ 
+ echo "$as_me:$LINENO: checking for mmap" >&5
+ echo $ECHO_N "checking for mmap... $ECHO_C" >&6
+ if test "${ac_cv_func_mmap+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ /* Define mmap to an innocuous variant, in case <limits.h> declares mmap.
+    For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+ #define mmap innocuous_mmap
+ 
+ /* System header to define __stub macros and hopefully few prototypes,
+     which can conflict with char mmap (); below.
+     Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+     <limits.h> exists even on freestanding compilers.  */
+ 
+ #ifdef __STDC__
+ # include <limits.h>
+ #else
+ # include <assert.h>
+ #endif
+ 
+ #undef mmap
+ 
+ /* Override any gcc2 internal prototype to avoid an error.  */
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ /* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+ char mmap ();
+ /* The GNU C library defines this for functions which it implements
+     to always fail with ENOSYS.  Some functions are actually named
+     something starting with __ and the normal name is an alias.  */
+ #if defined (__stub_mmap) || defined (__stub___mmap)
+ choke me
+ #else
+ char (*f) () = mmap;
+ #endif
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ int
+ main ()
+ {
+ return f != mmap;
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+   (eval $ac_link) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest$ac_exeext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   ac_cv_func_mmap=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ ac_cv_func_mmap=no
+ fi
+ rm -f conftest.err conftest.$ac_objext \
+       conftest$ac_exeext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_func_mmap" >&5
+ echo "${ECHO_T}$ac_cv_func_mmap" >&6
+ if test $ac_cv_func_mmap = yes; then
+   gcc_func_mmap=yes
+ else
+   gcc_func_mmap=no
+ fi
+ 
+ if test "$gcc_header_sys_mman_h" != yes \
+  || test "$gcc_func_mmap" != yes; then
+    gcc_cv_func_mmap_file=no
+    gcc_cv_func_mmap_dev_zero=no
+    gcc_cv_func_mmap_anon=no
+ else
+    echo "$as_me:$LINENO: checking whether read-only mmap of a plain file works" >&5
+ echo $ECHO_N "checking whether read-only mmap of a plain file works... $ECHO_C" >&6
+ if test "${gcc_cv_func_mmap_file+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   # Add a system to this blacklist if
+    # mmap(0, stat_size, PROT_READ, MAP_PRIVATE, fd, 0) doesn't return a
+    # memory area containing the same data that you'd get if you applied
+    # read() to the same fd.  The only system known to have a problem here
+    # is VMS, where text files have record structure.
+    case "$host_os" in
+      vms* | ultrix*)
+         gcc_cv_func_mmap_file=no ;;
+      *)
+         gcc_cv_func_mmap_file=yes;;
+    esac
+ fi
+ echo "$as_me:$LINENO: result: $gcc_cv_func_mmap_file" >&5
+ echo "${ECHO_T}$gcc_cv_func_mmap_file" >&6
+    echo "$as_me:$LINENO: checking whether mmap from /dev/zero works" >&5
+ echo $ECHO_N "checking whether mmap from /dev/zero works... $ECHO_C" >&6
+ if test "${gcc_cv_func_mmap_dev_zero+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   # Add a system to this blacklist if it has mmap() but /dev/zero
+    # does not exist, or if mmapping /dev/zero does not give anonymous
+    # zeroed pages with both the following properties:
+    # 1. If you map N consecutive pages in with one call, and then
+    #    unmap any subset of those pages, the pages that were not
+    #    explicitly unmapped remain accessible.
+    # 2. If you map two adjacent blocks of memory and then unmap them
+    #    both at once, they must both go away.
+    # Systems known to be in this category are Windows (all variants),
+    # VMS, and Darwin.
+    case "$host_os" in
+      vms* | cygwin* | pe | mingw* | darwin* | ultrix* | hpux10* | hpux11.00)
+         gcc_cv_func_mmap_dev_zero=no ;;
+      *)
+         gcc_cv_func_mmap_dev_zero=yes;;
+    esac
+ fi
+ echo "$as_me:$LINENO: result: $gcc_cv_func_mmap_dev_zero" >&5
+ echo "${ECHO_T}$gcc_cv_func_mmap_dev_zero" >&6
+ 
+    # Unlike /dev/zero, the MAP_ANON(YMOUS) defines can be probed for.
+    echo "$as_me:$LINENO: checking for MAP_ANON(YMOUS)" >&5
+ echo $ECHO_N "checking for MAP_ANON(YMOUS)... $ECHO_C" >&6
+ if test "${gcc_cv_decl_map_anon+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <sys/types.h>
+ #include <sys/mman.h>
+ #include <unistd.h>
+ 
+ #ifndef MAP_ANONYMOUS
+ #define MAP_ANONYMOUS MAP_ANON
+ #endif
+ 
+ int
+ main ()
+ {
+ int n = MAP_ANONYMOUS;
+   ;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>conftest.er1
+   ac_status=$?
+   grep -v '^ *+' conftest.er1 >conftest.err
+   rm -f conftest.er1
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+ 	 { ac_try='test -z "$ac_c_werror_flag"
+ 			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; } &&
+ 	 { ac_try='test -s conftest.$ac_objext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   gcc_cv_decl_map_anon=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ gcc_cv_decl_map_anon=no
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $gcc_cv_decl_map_anon" >&5
+ echo "${ECHO_T}$gcc_cv_decl_map_anon" >&6
+ 
+    if test $gcc_cv_decl_map_anon = no; then
+      gcc_cv_func_mmap_anon=no
+    else
+      echo "$as_me:$LINENO: checking whether mmap with MAP_ANON(YMOUS) works" >&5
+ echo $ECHO_N "checking whether mmap with MAP_ANON(YMOUS) works... $ECHO_C" >&6
+ if test "${gcc_cv_func_mmap_anon+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   # Add a system to this blacklist if it has mmap() and MAP_ANON or
+    # MAP_ANONYMOUS, but using mmap(..., MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)
+    # doesn't give anonymous zeroed pages with the same properties listed
+    # above for use of /dev/zero.
+    # Systems known to be in this category are Windows, VMS, and SCO Unix.
+    case "$host_os" in
+      vms* | cygwin* | pe | mingw* | sco* | udk* )
+         gcc_cv_func_mmap_anon=no ;;
+      *)
+         gcc_cv_func_mmap_anon=yes;;
+    esac
+ fi
+ echo "$as_me:$LINENO: result: $gcc_cv_func_mmap_anon" >&5
+ echo "${ECHO_T}$gcc_cv_func_mmap_anon" >&6
+    fi
+ fi
+ 
+ if test $gcc_cv_func_mmap_file = yes; then
+ 
+ cat >>confdefs.h <<\_ACEOF
+ #define HAVE_MMAP_FILE 1
+ _ACEOF
+ 
+ fi
+ if test $gcc_cv_func_mmap_dev_zero = yes; then
+ 
+ cat >>confdefs.h <<\_ACEOF
+ #define HAVE_MMAP_DEV_ZERO 1
+ _ACEOF
+ 
+ fi
+ if test $gcc_cv_func_mmap_anon = yes; then
+ 
+ cat >>confdefs.h <<\_ACEOF
+ #define HAVE_MMAP_ANON 1
+ _ACEOF
+ 
+ fi
+ 
+ 
+ echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5
+ echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6
+ # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
+ if test "${enable_maintainer_mode+set}" = set; then
+   enableval="$enable_maintainer_mode"
+   USE_MAINTAINER_MODE=$enableval
+ else
+   USE_MAINTAINER_MODE=no
+ fi;
+ echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5
+ echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6
+ if test "$USE_MAINTAINER_MODE" = yes; then
+   MAINT=
+ else
+   MAINT='#'
+ fi
+ 
+ 
+           ac_config_headers="$ac_config_headers config.h"
+ 
+                     ac_config_files="$ac_config_files Makefile mkheaders"
+ 
+ cat >confcache <<\_ACEOF
+ # This file is a shell script that caches the results of configure
+ # tests run on this system so they can be shared between configure
+ # scripts and configure runs, see configure's option --config-cache.
+ # It is not useful on other systems.  If it contains results you don't
+ # want to keep, you may remove or edit it.
+ #
+ # config.status only pays attention to the cache file if you give it
+ # the --recheck option to rerun configure.
+ #
+ # `ac_cv_env_foo' variables (set or unset) will be overridden when
+ # loading this file, other *unset* `ac_cv_foo' will be assigned the
+ # following values.
+ 
+ _ACEOF
+ 
+ # The following way of writing the cache mishandles newlines in values,
+ # but we know of no workaround that is simple, portable, and efficient.
+ # So, don't put newlines in cache variables' values.
+ # Ultrix sh set writes to stderr and can't be redirected directly,
+ # and sets the high bit in the cache file unless we assign to the vars.
+ {
+   (set) 2>&1 |
+     case `(ac_space=' '; set | grep ac_space) 2>&1` in
+     *ac_space=\ *)
+       # `set' does not quote correctly, so add quotes (double-quote
+       # substitution turns \\\\ into \\, and sed turns \\ into \).
+       sed -n \
+ 	"s/'/'\\\\''/g;
+ 	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+       ;;
+     *)
+       # `set' quotes correctly as required by POSIX, so do not add quotes.
+       sed -n \
+ 	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+       ;;
+     esac;
+ } |
+   sed '
+      t clear
+      : clear
+      s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+      t end
+      /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+      : end' >>confcache
+ if diff $cache_file confcache >/dev/null 2>&1; then :; else
+   if test -w $cache_file; then
+     test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+     cat confcache >$cache_file
+   else
+     echo "not updating unwritable cache $cache_file"
+   fi
+ fi
+ rm -f confcache
+ 
+ test "x$prefix" = xNONE && prefix=$ac_default_prefix
+ # Let make expand exec_prefix.
+ test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+ 
+ # VPATH may cause trouble with some makes, so we remove $(srcdir),
+ # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+ # trailing colons and then remove the whole line if VPATH becomes empty
+ # (actually we leave an empty line to preserve line numbers).
+ if test "x$srcdir" = x.; then
+   ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
+ s/:*\$(srcdir):*/:/;
+ s/:*\${srcdir}:*/:/;
+ s/:*@srcdir@:*/:/;
+ s/^\([^=]*=[	 ]*\):*/\1/;
+ s/:*$//;
+ s/^[^=]*=[	 ]*$//;
+ }'
+ fi
+ 
+ DEFS=-DHAVE_CONFIG_H
+ 
+ ac_libobjs=
+ ac_ltlibobjs=
+ for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+   # 1. Remove the extension, and $U if already installed.
+   ac_i=`echo "$ac_i" |
+ 	 sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
+   # 2. Add them.
+   ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
+   ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
+ done
+ LIBOBJS=$ac_libobjs
+ 
+ LTLIBOBJS=$ac_ltlibobjs
+ 
+ 
+ 
+ : ${CONFIG_STATUS=./config.status}
+ ac_clean_files_save=$ac_clean_files
+ ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+ { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+ echo "$as_me: creating $CONFIG_STATUS" >&6;}
+ cat >$CONFIG_STATUS <<_ACEOF
+ #! $SHELL
+ # Generated by $as_me.
+ # Run this file to recreate the current configuration.
+ # Compiler output produced by configure, useful for debugging
+ # configure, is in config.log if it exists.
+ 
+ debug=false
+ ac_cs_recheck=false
+ ac_cs_silent=false
+ SHELL=\${CONFIG_SHELL-$SHELL}
+ _ACEOF
+ 
+ cat >>$CONFIG_STATUS <<\_ACEOF
+ ## --------------------- ##
+ ## M4sh Initialization.  ##
+ ## --------------------- ##
+ 
+ # Be Bourne compatible
+ if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+   emulate sh
+   NULLCMD=:
+   # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+   # is contrary to our usage.  Disable this feature.
+   alias -g '${1+"$@"}'='"$@"'
+ elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+   set -o posix
+ fi
+ DUALCASE=1; export DUALCASE # for MKS sh
+ 
+ # Support unset when possible.
+ if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+   as_unset=unset
+ else
+   as_unset=false
+ fi
+ 
+ 
+ # Work around bugs in pre-3.0 UWIN ksh.
+ $as_unset ENV MAIL MAILPATH
+ PS1='$ '
+ PS2='> '
+ PS4='+ '
+ 
+ # NLS nuisances.
+ for as_var in \
+   LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+   LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+   LC_TELEPHONE LC_TIME
+ do
+   if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+     eval $as_var=C; export $as_var
+   else
+     $as_unset $as_var
+   fi
+ done
+ 
+ # Required to use basename.
+ if expr a : '\(a\)' >/dev/null 2>&1; then
+   as_expr=expr
+ else
+   as_expr=false
+ fi
+ 
+ if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+   as_basename=basename
+ else
+   as_basename=false
+ fi
+ 
+ 
+ # Name of the executable.
+ as_me=`$as_basename "$0" ||
+ $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ 	 X"$0" : 'X\(//\)$' \| \
+ 	 X"$0" : 'X\(/\)$' \| \
+ 	 .     : '\(.\)' 2>/dev/null ||
+ echo X/"$0" |
+     sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+   	  /^X\/\(\/\/\)$/{ s//\1/; q; }
+   	  /^X\/\(\/\).*/{ s//\1/; q; }
+   	  s/.*/./; q'`
+ 
+ 
+ # PATH needs CR, and LINENO needs CR and PATH.
+ # Avoid depending upon Character Ranges.
+ as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+ as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+ as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+ as_cr_digits='0123456789'
+ as_cr_alnum=$as_cr_Letters$as_cr_digits
+ 
+ # The user is always right.
+ if test "${PATH_SEPARATOR+set}" != set; then
+   echo "#! /bin/sh" >conf$$.sh
+   echo  "exit 0"   >>conf$$.sh
+   chmod +x conf$$.sh
+   if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+     PATH_SEPARATOR=';'
+   else
+     PATH_SEPARATOR=:
+   fi
+   rm -f conf$$.sh
+ fi
+ 
+ 
+   as_lineno_1=$LINENO
+   as_lineno_2=$LINENO
+   as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+   test "x$as_lineno_1" != "x$as_lineno_2" &&
+   test "x$as_lineno_3"  = "x$as_lineno_2"  || {
+   # Find who we are.  Look in the path if we contain no path at all
+   # relative or not.
+   case $0 in
+     *[\\/]* ) as_myself=$0 ;;
+     *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+ 
+        ;;
+   esac
+   # We did not find ourselves, most probably we were run as `sh COMMAND'
+   # in which case we are not to be found in the path.
+   if test "x$as_myself" = x; then
+     as_myself=$0
+   fi
+   if test ! -f "$as_myself"; then
+     { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
+ echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
+    { (exit 1); exit 1; }; }
+   fi
+   case $CONFIG_SHELL in
+   '')
+     as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for as_base in sh bash ksh sh5; do
+ 	 case $as_dir in
+ 	 /*)
+ 	   if ("$as_dir/$as_base" -c '
+   as_lineno_1=$LINENO
+   as_lineno_2=$LINENO
+   as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+   test "x$as_lineno_1" != "x$as_lineno_2" &&
+   test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
+ 	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+ 	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+ 	     CONFIG_SHELL=$as_dir/$as_base
+ 	     export CONFIG_SHELL
+ 	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+ 	   fi;;
+ 	 esac
+        done
+ done
+ ;;
+   esac
+ 
+   # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+   # uniformly replaced by the line number.  The first 'sed' inserts a
+   # line-number line before each line; the second 'sed' does the real
+   # work.  The second script uses 'N' to pair each line-number line
+   # with the numbered line, and appends trailing '-' during
+   # substitution so that $LINENO is not a special case at line end.
+   # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+   # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
+   sed '=' <$as_myself |
+     sed '
+       N
+       s,$,-,
+       : loop
+       s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+       t loop
+       s,-$,,
+       s,^['$as_cr_digits']*\n,,
+     ' >$as_me.lineno &&
+   chmod +x $as_me.lineno ||
+     { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
+ echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
+    { (exit 1); exit 1; }; }
+ 
+   # Don't try to exec as it changes $[0], causing all sort of problems
+   # (the dirname of $[0] is not the place where we might find the
+   # original and so on.  Autoconf is especially sensible to this).
+   . ./$as_me.lineno
+   # Exit status is that of the last command.
+   exit
+ }
+ 
+ 
+ case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+   *c*,-n*) ECHO_N= ECHO_C='
+ ' ECHO_T='	' ;;
+   *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+   *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
+ esac
+ 
+ if expr a : '\(a\)' >/dev/null 2>&1; then
+   as_expr=expr
+ else
+   as_expr=false
+ fi
+ 
+ rm -f conf$$ conf$$.exe conf$$.file
+ echo >conf$$.file
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+   # We could just check for DJGPP; but this test a) works b) is more generic
+   # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+   if test -f conf$$.exe; then
+     # Don't use ln at all; we don't have any links
+     as_ln_s='cp -p'
+   else
+     as_ln_s='ln -s'
+   fi
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+   as_ln_s=ln
+ else
+   as_ln_s='cp -p'
+ fi
+ rm -f conf$$ conf$$.exe conf$$.file
+ 
+ if mkdir -p . 2>/dev/null; then
+   as_mkdir_p=:
+ else
+   test -d ./-p && rmdir ./-p
+   as_mkdir_p=false
+ fi
+ 
+ as_executable_p="test -f"
+ 
+ # Sed expression to map a string onto a valid CPP name.
+ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+ 
+ # Sed expression to map a string onto a valid variable name.
+ as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+ 
+ 
+ # IFS
+ # We need space, tab and new line, in precisely that order.
+ as_nl='
+ '
+ IFS=" 	$as_nl"
+ 
+ # CDPATH.
+ $as_unset CDPATH
+ 
+ exec 6>&1
+ 
+ # Open the log real soon, to keep \$[0] and so on meaningful, and to
+ # report actual input values of CONFIG_FILES etc. instead of their
+ # values after options handling.  Logging --version etc. is OK.
+ exec 5>>config.log
+ {
+   echo
+   sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+ ## Running $as_me. ##
+ _ASBOX
+ } >&5
+ cat >&5 <<_CSEOF
+ 
+ This file was extended by fixincludes $as_me  , which was
+ generated by GNU Autoconf 2.59.  Invocation command line was
+ 
+   CONFIG_FILES    = $CONFIG_FILES
+   CONFIG_HEADERS  = $CONFIG_HEADERS
+   CONFIG_LINKS    = $CONFIG_LINKS
+   CONFIG_COMMANDS = $CONFIG_COMMANDS
+   $ $0 $@
+ 
+ _CSEOF
+ echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
+ echo >&5
+ _ACEOF
+ 
+ # Files that config.status was made for.
+ if test -n "$ac_config_files"; then
+   echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
+ fi
+ 
+ if test -n "$ac_config_headers"; then
+   echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
+ fi
+ 
+ if test -n "$ac_config_links"; then
+   echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
+ fi
+ 
+ if test -n "$ac_config_commands"; then
+   echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
+ fi
+ 
+ cat >>$CONFIG_STATUS <<\_ACEOF
+ 
+ ac_cs_usage="\
+ \`$as_me' instantiates files from templates according to the
+ current configuration.
+ 
+ Usage: $0 [OPTIONS] [FILE]...
+ 
+   -h, --help       print this help, then exit
+   -V, --version    print version number, then exit
+   -q, --quiet      do not print progress messages
+   -d, --debug      don't remove temporary files
+       --recheck    update $as_me by reconfiguring in the same conditions
+   --file=FILE[:TEMPLATE]
+ 		   instantiate the configuration file FILE
+   --header=FILE[:TEMPLATE]
+ 		   instantiate the configuration header FILE
+ 
+ Configuration files:
+ $config_files
+ 
+ Configuration headers:
+ $config_headers
+ 
+ Report bugs to <bug-autoconf@gnu.org>."
+ _ACEOF
+ 
+ cat >>$CONFIG_STATUS <<_ACEOF
+ ac_cs_version="\\
+ fixincludes config.status
+ configured by $0, generated by GNU Autoconf 2.59,
+   with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
+ 
+ Copyright (C) 2003 Free Software Foundation, Inc.
+ This config.status script is free software; the Free Software Foundation
+ gives unlimited permission to copy, distribute and modify it."
+ srcdir=$srcdir
+ _ACEOF
+ 
+ cat >>$CONFIG_STATUS <<\_ACEOF
+ # If no file are specified by the user, then we need to provide default
+ # value.  By we need to know if files were specified by the user.
+ ac_need_defaults=:
+ while test $# != 0
+ do
+   case $1 in
+   --*=*)
+     ac_option=`expr "x$1" : 'x\([^=]*\)='`
+     ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
+     ac_shift=:
+     ;;
+   -*)
+     ac_option=$1
+     ac_optarg=$2
+     ac_shift=shift
+     ;;
+   *) # This is not an option, so the user has probably given explicit
+      # arguments.
+      ac_option=$1
+      ac_need_defaults=false;;
+   esac
+ 
+   case $ac_option in
+   # Handling of the options.
+ _ACEOF
+ cat >>$CONFIG_STATUS <<\_ACEOF
+   -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+     ac_cs_recheck=: ;;
+   --version | --vers* | -V )
+     echo "$ac_cs_version"; exit 0 ;;
+   --he | --h)
+     # Conflict between --help and --header
+     { { echo "$as_me:$LINENO: error: ambiguous option: $1
+ Try \`$0 --help' for more information." >&5
+ echo "$as_me: error: ambiguous option: $1
+ Try \`$0 --help' for more information." >&2;}
+    { (exit 1); exit 1; }; };;
+   --help | --hel | -h )
+     echo "$ac_cs_usage"; exit 0 ;;
+   --debug | --d* | -d )
+     debug=: ;;
+   --file | --fil | --fi | --f )
+     $ac_shift
+     CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+     ac_need_defaults=false;;
+   --header | --heade | --head | --hea )
+     $ac_shift
+     CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+     ac_need_defaults=false;;
+   -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+   | -silent | --silent | --silen | --sile | --sil | --si | --s)
+     ac_cs_silent=: ;;
+ 
+   # This is an error.
+   -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
+ Try \`$0 --help' for more information." >&5
+ echo "$as_me: error: unrecognized option: $1
+ Try \`$0 --help' for more information." >&2;}
+    { (exit 1); exit 1; }; } ;;
+ 
+   *) ac_config_targets="$ac_config_targets $1" ;;
+ 
+   esac
+   shift
+ done
+ 
+ ac_configure_extra_args=
+ 
+ if $ac_cs_silent; then
+   exec 6>/dev/null
+   ac_configure_extra_args="$ac_configure_extra_args --silent"
+ fi
+ 
+ _ACEOF
+ cat >>$CONFIG_STATUS <<_ACEOF
+ if \$ac_cs_recheck; then
+   echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+   exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+ fi
+ 
+ _ACEOF
+ 
+ 
+ 
+ 
+ 
+ cat >>$CONFIG_STATUS <<\_ACEOF
+ for ac_config_target in $ac_config_targets
+ do
+   case "$ac_config_target" in
+   # Handling of arguments.
+   "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+   "mkheaders" ) CONFIG_FILES="$CONFIG_FILES mkheaders" ;;
+   "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+   *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+ echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+    { (exit 1); exit 1; }; };;
+   esac
+ done
+ 
+ # If the user did not use the arguments to specify the items to instantiate,
+ # then the envvar interface is used.  Set only those that are not.
+ # We use the long form for the default assignment because of an extremely
+ # bizarre bug on SunOS 4.1.3.
+ if $ac_need_defaults; then
+   test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+   test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+ fi
+ 
+ # Have a temporary directory for convenience.  Make it in the build tree
+ # simply because there is no reason to put it here, and in addition,
+ # creating and moving files from /tmp can sometimes cause problems.
+ # Create a temporary directory, and hook for its removal unless debugging.
+ $debug ||
+ {
+   trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
+   trap '{ (exit 1); exit 1; }' 1 2 13 15
+ }
+ 
+ # Create a (secure) tmp directory for tmp files.
+ 
+ {
+   tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
+   test -n "$tmp" && test -d "$tmp"
+ }  ||
+ {
+   tmp=./confstat$$-$RANDOM
+   (umask 077 && mkdir $tmp)
+ } ||
+ {
+    echo "$me: cannot create a temporary directory in ." >&2
+    { (exit 1); exit 1; }
+ }
+ 
+ _ACEOF
+ 
+ cat >>$CONFIG_STATUS <<_ACEOF
+ 
+ #
+ # CONFIG_FILES section.
+ #
+ 
+ # No need to generate the scripts if there are no CONFIG_FILES.
+ # This happens for instance when ./config.status config.h
+ if test -n "\$CONFIG_FILES"; then
+   # Protect against being on the right side of a sed subst in config.status.
+   sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
+    s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
+ s,@SHELL@,$SHELL,;t t
+ s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
+ s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
+ s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
+ s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
+ s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
+ s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
+ s,@exec_prefix@,$exec_prefix,;t t
+ s,@prefix@,$prefix,;t t
+ s,@program_transform_name@,$program_transform_name,;t t
+ s,@bindir@,$bindir,;t t
+ s,@sbindir@,$sbindir,;t t
+ s,@libexecdir@,$libexecdir,;t t
+ s,@datadir@,$datadir,;t t
+ s,@sysconfdir@,$sysconfdir,;t t
+ s,@sharedstatedir@,$sharedstatedir,;t t
+ s,@localstatedir@,$localstatedir,;t t
+ s,@libdir@,$libdir,;t t
+ s,@includedir@,$includedir,;t t
+ s,@oldincludedir@,$oldincludedir,;t t
+ s,@infodir@,$infodir,;t t
+ s,@mandir@,$mandir,;t t
+ s,@build_alias@,$build_alias,;t t
+ s,@host_alias@,$host_alias,;t t
+ s,@target_alias@,$target_alias,;t t
+ s,@DEFS@,$DEFS,;t t
+ s,@ECHO_C@,$ECHO_C,;t t
+ s,@ECHO_N@,$ECHO_N,;t t
+ s,@ECHO_T@,$ECHO_T,;t t
+ s,@LIBS@,$LIBS,;t t
+ s,@build@,$build,;t t
+ s,@build_cpu@,$build_cpu,;t t
+ s,@build_vendor@,$build_vendor,;t t
+ s,@build_os@,$build_os,;t t
+ s,@host@,$host,;t t
+ s,@host_cpu@,$host_cpu,;t t
+ s,@host_vendor@,$host_vendor,;t t
+ s,@host_os@,$host_os,;t t
+ s,@target@,$target,;t t
+ s,@target_cpu@,$target_cpu,;t t
+ s,@target_vendor@,$target_vendor,;t t
+ s,@target_os@,$target_os,;t t
+ s,@CC@,$CC,;t t
+ s,@CFLAGS@,$CFLAGS,;t t
+ s,@LDFLAGS@,$LDFLAGS,;t t
+ s,@CPPFLAGS@,$CPPFLAGS,;t t
+ s,@ac_ct_CC@,$ac_ct_CC,;t t
+ s,@EXEEXT@,$EXEEXT,;t t
+ s,@OBJEXT@,$OBJEXT,;t t
+ s,@target_noncanonical@,$target_noncanonical,;t t
+ s,@TARGET@,$TARGET,;t t
+ s,@gcc_version_trigger@,$gcc_version_trigger,;t t
+ s,@gcc_version_full@,$gcc_version_full,;t t
+ s,@gcc_version@,$gcc_version,;t t
+ s,@CPP@,$CPP,;t t
+ s,@EGREP@,$EGREP,;t t
+ s,@MAINT@,$MAINT,;t t
+ s,@LIBOBJS@,$LIBOBJS,;t t
+ s,@LTLIBOBJS@,$LTLIBOBJS,;t t
+ CEOF
+ 
+ _ACEOF
+ 
+   cat >>$CONFIG_STATUS <<\_ACEOF
+   # Split the substitutions into bite-sized pieces for seds with
+   # small command number limits, like on Digital OSF/1 and HP-UX.
+   ac_max_sed_lines=48
+   ac_sed_frag=1 # Number of current file.
+   ac_beg=1 # First line for current file.
+   ac_end=$ac_max_sed_lines # Line after last line for current file.
+   ac_more_lines=:
+   ac_sed_cmds=
+   while $ac_more_lines; do
+     if test $ac_beg -gt 1; then
+       sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+     else
+       sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+     fi
+     if test ! -s $tmp/subs.frag; then
+       ac_more_lines=false
+     else
+       # The purpose of the label and of the branching condition is to
+       # speed up the sed processing (if there are no `@' at all, there
+       # is no need to browse any of the substitutions).
+       # These are the two extra sed commands mentioned above.
+       (echo ':t
+   /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
+       if test -z "$ac_sed_cmds"; then
+ 	ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
+       else
+ 	ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+       fi
+       ac_sed_frag=`expr $ac_sed_frag + 1`
+       ac_beg=$ac_end
+       ac_end=`expr $ac_end + $ac_max_sed_lines`
+     fi
+   done
+   if test -z "$ac_sed_cmds"; then
+     ac_sed_cmds=cat
+   fi
+ fi # test -n "$CONFIG_FILES"
+ 
+ _ACEOF
+ cat >>$CONFIG_STATUS <<\_ACEOF
+ for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
+   # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+   case $ac_file in
+   - | *:- | *:-:* ) # input from stdin
+ 	cat >$tmp/stdin
+ 	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ 	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+   *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ 	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+   * )   ac_file_in=$ac_file.in ;;
+   esac
+ 
+   # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
+   ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ 	 X"$ac_file" : 'X\(//\)[^/]' \| \
+ 	 X"$ac_file" : 'X\(//\)$' \| \
+ 	 X"$ac_file" : 'X\(/\)' \| \
+ 	 .     : '\(.\)' 2>/dev/null ||
+ echo X"$ac_file" |
+     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+   	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+   	  /^X\(\/\/\)$/{ s//\1/; q; }
+   	  /^X\(\/\).*/{ s//\1/; q; }
+   	  s/.*/./; q'`
+   { if $as_mkdir_p; then
+     mkdir -p "$ac_dir"
+   else
+     as_dir="$ac_dir"
+     as_dirs=
+     while test ! -d "$as_dir"; do
+       as_dirs="$as_dir $as_dirs"
+       as_dir=`(dirname "$as_dir") 2>/dev/null ||
+ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ 	 X"$as_dir" : 'X\(//\)[^/]' \| \
+ 	 X"$as_dir" : 'X\(//\)$' \| \
+ 	 X"$as_dir" : 'X\(/\)' \| \
+ 	 .     : '\(.\)' 2>/dev/null ||
+ echo X"$as_dir" |
+     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+   	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+   	  /^X\(\/\/\)$/{ s//\1/; q; }
+   	  /^X\(\/\).*/{ s//\1/; q; }
+   	  s/.*/./; q'`
+     done
+     test ! -n "$as_dirs" || mkdir $as_dirs
+   fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+ echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+    { (exit 1); exit 1; }; }; }
+ 
+   ac_builddir=.
+ 
+ if test "$ac_dir" != .; then
+   ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+   # A "../" for each directory in $ac_dir_suffix.
+   ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+ else
+   ac_dir_suffix= ac_top_builddir=
+ fi
+ 
+ case $srcdir in
+   .)  # No --srcdir option.  We are building in place.
+     ac_srcdir=.
+     if test -z "$ac_top_builddir"; then
+        ac_top_srcdir=.
+     else
+        ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+     fi ;;
+   [\\/]* | ?:[\\/]* )  # Absolute path.
+     ac_srcdir=$srcdir$ac_dir_suffix;
+     ac_top_srcdir=$srcdir ;;
+   *) # Relative path.
+     ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+     ac_top_srcdir=$ac_top_builddir$srcdir ;;
+ esac
+ 
+ # Do not use `cd foo && pwd` to compute absolute paths, because
+ # the directories may not exist.
+ case `pwd` in
+ .) ac_abs_builddir="$ac_dir";;
+ *)
+   case "$ac_dir" in
+   .) ac_abs_builddir=`pwd`;;
+   [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+   *) ac_abs_builddir=`pwd`/"$ac_dir";;
+   esac;;
+ esac
+ case $ac_abs_builddir in
+ .) ac_abs_top_builddir=${ac_top_builddir}.;;
+ *)
+   case ${ac_top_builddir}. in
+   .) ac_abs_top_builddir=$ac_abs_builddir;;
+   [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+   *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+   esac;;
+ esac
+ case $ac_abs_builddir in
+ .) ac_abs_srcdir=$ac_srcdir;;
+ *)
+   case $ac_srcdir in
+   .) ac_abs_srcdir=$ac_abs_builddir;;
+   [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+   *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+   esac;;
+ esac
+ case $ac_abs_builddir in
+ .) ac_abs_top_srcdir=$ac_top_srcdir;;
+ *)
+   case $ac_top_srcdir in
+   .) ac_abs_top_srcdir=$ac_abs_builddir;;
+   [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+   *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+   esac;;
+ esac
+ 
+ 
+ 
+   if test x"$ac_file" != x-; then
+     { echo "$as_me:$LINENO: creating $ac_file" >&5
+ echo "$as_me: creating $ac_file" >&6;}
+     rm -f "$ac_file"
+   fi
+   # Let's still pretend it is `configure' which instantiates (i.e., don't
+   # use $as_me), people would be surprised to read:
+   #    /* config.h.  Generated by config.status.  */
+   if test x"$ac_file" = x-; then
+     configure_input=
+   else
+     configure_input="$ac_file.  "
+   fi
+   configure_input=$configure_input"Generated from `echo $ac_file_in |
+ 				     sed 's,.*/,,'` by configure."
+ 
+   # First look for the input files in the build tree, otherwise in the
+   # src tree.
+   ac_file_inputs=`IFS=:
+     for f in $ac_file_in; do
+       case $f in
+       -) echo $tmp/stdin ;;
+       [\\/$]*)
+ 	 # Absolute (can't be DOS-style, as IFS=:)
+ 	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+ echo "$as_me: error: cannot find input file: $f" >&2;}
+    { (exit 1); exit 1; }; }
+ 	 echo "$f";;
+       *) # Relative
+ 	 if test -f "$f"; then
+ 	   # Build tree
+ 	   echo "$f"
+ 	 elif test -f "$srcdir/$f"; then
+ 	   # Source tree
+ 	   echo "$srcdir/$f"
+ 	 else
+ 	   # /dev/null tree
+ 	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+ echo "$as_me: error: cannot find input file: $f" >&2;}
+    { (exit 1); exit 1; }; }
+ 	 fi;;
+       esac
+     done` || { (exit 1); exit 1; }
+ _ACEOF
+ cat >>$CONFIG_STATUS <<_ACEOF
+   sed "$ac_vpsub
+ $extrasub
+ _ACEOF
+ cat >>$CONFIG_STATUS <<\_ACEOF
+ :t
+ /@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+ s,@configure_input@,$configure_input,;t t
+ s,@srcdir@,$ac_srcdir,;t t
+ s,@abs_srcdir@,$ac_abs_srcdir,;t t
+ s,@top_srcdir@,$ac_top_srcdir,;t t
+ s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
+ s,@builddir@,$ac_builddir,;t t
+ s,@abs_builddir@,$ac_abs_builddir,;t t
+ s,@top_builddir@,$ac_top_builddir,;t t
+ s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
+ " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
+   rm -f $tmp/stdin
+   if test x"$ac_file" != x-; then
+     mv $tmp/out $ac_file
+   else
+     cat $tmp/out
+     rm -f $tmp/out
+   fi
+ 
+ done
+ _ACEOF
+ cat >>$CONFIG_STATUS <<\_ACEOF
+ 
+ #
+ # CONFIG_HEADER section.
+ #
+ 
+ # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+ # NAME is the cpp macro being defined and VALUE is the value it is being given.
+ #
+ # ac_d sets the value in "#define NAME VALUE" lines.
+ ac_dA='s,^\([	 ]*\)#\([	 ]*define[	 ][	 ]*\)'
+ ac_dB='[	 ].*$,\1#\2'
+ ac_dC=' '
+ ac_dD=',;t'
+ # ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ ac_uA='s,^\([	 ]*\)#\([	 ]*\)undef\([	 ][	 ]*\)'
+ ac_uB='$,\1#\2define\3'
+ ac_uC=' '
+ ac_uD=',;t'
+ 
+ for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
+   # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+   case $ac_file in
+   - | *:- | *:-:* ) # input from stdin
+ 	cat >$tmp/stdin
+ 	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ 	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+   *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ 	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+   * )   ac_file_in=$ac_file.in ;;
+   esac
+ 
+   test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
+ echo "$as_me: creating $ac_file" >&6;}
+ 
+   # First look for the input files in the build tree, otherwise in the
+   # src tree.
+   ac_file_inputs=`IFS=:
+     for f in $ac_file_in; do
+       case $f in
+       -) echo $tmp/stdin ;;
+       [\\/$]*)
+ 	 # Absolute (can't be DOS-style, as IFS=:)
+ 	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+ echo "$as_me: error: cannot find input file: $f" >&2;}
+    { (exit 1); exit 1; }; }
+ 	 # Do quote $f, to prevent DOS paths from being IFS'd.
+ 	 echo "$f";;
+       *) # Relative
+ 	 if test -f "$f"; then
+ 	   # Build tree
+ 	   echo "$f"
+ 	 elif test -f "$srcdir/$f"; then
+ 	   # Source tree
+ 	   echo "$srcdir/$f"
+ 	 else
+ 	   # /dev/null tree
+ 	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+ echo "$as_me: error: cannot find input file: $f" >&2;}
+    { (exit 1); exit 1; }; }
+ 	 fi;;
+       esac
+     done` || { (exit 1); exit 1; }
+   # Remove the trailing spaces.
+   sed 's/[	 ]*$//' $ac_file_inputs >$tmp/in
+ 
+ _ACEOF
+ 
+ # Transform confdefs.h into two sed scripts, `conftest.defines' and
+ # `conftest.undefs', that substitutes the proper values into
+ # config.h.in to produce config.h.  The first handles `#define'
+ # templates, and the second `#undef' templates.
+ # And first: Protect against being on the right side of a sed subst in
+ # config.status.  Protect against being in an unquoted here document
+ # in config.status.
+ rm -f conftest.defines conftest.undefs
+ # Using a here document instead of a string reduces the quoting nightmare.
+ # Putting comments in sed scripts is not portable.
+ #
+ # `end' is used to avoid that the second main sed command (meant for
+ # 0-ary CPP macros) applies to n-ary macro definitions.
+ # See the Autoconf documentation for `clear'.
+ cat >confdef2sed.sed <<\_ACEOF
+ s/[\\&,]/\\&/g
+ s,[\\$`],\\&,g
+ t clear
+ : clear
+ s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 (][^	 (]*\)\(([^)]*)\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
+ t end
+ s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 ][^	 ]*\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
+ : end
+ _ACEOF
+ # If some macros were called several times there might be several times
+ # the same #defines, which is useless.  Nevertheless, we may not want to
+ # sort them, since we want the *last* AC-DEFINE to be honored.
+ uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
+ sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
+ rm -f confdef2sed.sed
+ 
+ # This sed command replaces #undef with comments.  This is necessary, for
+ # example, in the case of _POSIX_SOURCE, which is predefined and required
+ # on some systems where configure will not decide to define it.
+ cat >>conftest.undefs <<\_ACEOF
+ s,^[	 ]*#[	 ]*undef[	 ][	 ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
+ _ACEOF
+ 
+ # Break up conftest.defines because some shells have a limit on the size
+ # of here documents, and old seds have small limits too (100 cmds).
+ echo '  # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
+ echo '  if grep "^[	 ]*#[	 ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
+ echo '  # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
+ echo '  :' >>$CONFIG_STATUS
+ rm -f conftest.tail
+ while grep . conftest.defines >/dev/null
+ do
+   # Write a limited-size here document to $tmp/defines.sed.
+   echo '  cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
+   # Speed up: don't consider the non `#define' lines.
+   echo '/^[	 ]*#[	 ]*define/!b' >>$CONFIG_STATUS
+   # Work around the forget-to-reset-the-flag bug.
+   echo 't clr' >>$CONFIG_STATUS
+   echo ': clr' >>$CONFIG_STATUS
+   sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
+   echo 'CEOF
+   sed -f $tmp/defines.sed $tmp/in >$tmp/out
+   rm -f $tmp/in
+   mv $tmp/out $tmp/in
+ ' >>$CONFIG_STATUS
+   sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
+   rm -f conftest.defines
+   mv conftest.tail conftest.defines
+ done
+ rm -f conftest.defines
+ echo '  fi # grep' >>$CONFIG_STATUS
+ echo >>$CONFIG_STATUS
+ 
+ # Break up conftest.undefs because some shells have a limit on the size
+ # of here documents, and old seds have small limits too (100 cmds).
+ echo '  # Handle all the #undef templates' >>$CONFIG_STATUS
+ rm -f conftest.tail
+ while grep . conftest.undefs >/dev/null
+ do
+   # Write a limited-size here document to $tmp/undefs.sed.
+   echo '  cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
+   # Speed up: don't consider the non `#undef'
+   echo '/^[	 ]*#[	 ]*undef/!b' >>$CONFIG_STATUS
+   # Work around the forget-to-reset-the-flag bug.
+   echo 't clr' >>$CONFIG_STATUS
+   echo ': clr' >>$CONFIG_STATUS
+   sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
+   echo 'CEOF
+   sed -f $tmp/undefs.sed $tmp/in >$tmp/out
+   rm -f $tmp/in
+   mv $tmp/out $tmp/in
+ ' >>$CONFIG_STATUS
+   sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
+   rm -f conftest.undefs
+   mv conftest.tail conftest.undefs
+ done
+ rm -f conftest.undefs
+ 
+ cat >>$CONFIG_STATUS <<\_ACEOF
+   # Let's still pretend it is `configure' which instantiates (i.e., don't
+   # use $as_me), people would be surprised to read:
+   #    /* config.h.  Generated by config.status.  */
+   if test x"$ac_file" = x-; then
+     echo "/* Generated by configure.  */" >$tmp/config.h
+   else
+     echo "/* $ac_file.  Generated by configure.  */" >$tmp/config.h
+   fi
+   cat $tmp/in >>$tmp/config.h
+   rm -f $tmp/in
+   if test x"$ac_file" != x-; then
+     if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
+       { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+ echo "$as_me: $ac_file is unchanged" >&6;}
+     else
+       ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ 	 X"$ac_file" : 'X\(//\)[^/]' \| \
+ 	 X"$ac_file" : 'X\(//\)$' \| \
+ 	 X"$ac_file" : 'X\(/\)' \| \
+ 	 .     : '\(.\)' 2>/dev/null ||
+ echo X"$ac_file" |
+     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+   	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+   	  /^X\(\/\/\)$/{ s//\1/; q; }
+   	  /^X\(\/\).*/{ s//\1/; q; }
+   	  s/.*/./; q'`
+       { if $as_mkdir_p; then
+     mkdir -p "$ac_dir"
+   else
+     as_dir="$ac_dir"
+     as_dirs=
+     while test ! -d "$as_dir"; do
+       as_dirs="$as_dir $as_dirs"
+       as_dir=`(dirname "$as_dir") 2>/dev/null ||
+ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ 	 X"$as_dir" : 'X\(//\)[^/]' \| \
+ 	 X"$as_dir" : 'X\(//\)$' \| \
+ 	 X"$as_dir" : 'X\(/\)' \| \
+ 	 .     : '\(.\)' 2>/dev/null ||
+ echo X"$as_dir" |
+     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+   	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+   	  /^X\(\/\/\)$/{ s//\1/; q; }
+   	  /^X\(\/\).*/{ s//\1/; q; }
+   	  s/.*/./; q'`
+     done
+     test ! -n "$as_dirs" || mkdir $as_dirs
+   fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+ echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+    { (exit 1); exit 1; }; }; }
+ 
+       rm -f $ac_file
+       mv $tmp/config.h $ac_file
+     fi
+   else
+     cat $tmp/config.h
+     rm -f $tmp/config.h
+   fi
+   # Run the commands associated with the file.
+   case $ac_file in
+     config.h ) echo timestamp > stamp-h ;;
+   esac
+ done
+ _ACEOF
+ 
+ cat >>$CONFIG_STATUS <<\_ACEOF
+ 
+ { (exit 0); exit 0; }
+ _ACEOF
+ chmod +x $CONFIG_STATUS
+ ac_clean_files=$ac_clean_files_save
+ 
+ 
+ # configure is writing to config.log, and then calls config.status.
+ # config.status does its own redirection, appending to config.log.
+ # Unfortunately, on DOS this fails, as config.log is still kept open
+ # by configure, so config.status won't be able to write to it; its
+ # output is simply discarded.  So we exec the FD to /dev/null,
+ # effectively closing config.log, so it can be properly (re)opened and
+ # appended to by config.status.  When coming back to configure, we
+ # need to make the FD available again.
+ if test "$no_create" != yes; then
+   ac_cs_success=:
+   ac_config_status_args=
+   test "$silent" = yes &&
+     ac_config_status_args="$ac_config_status_args --quiet"
+   exec 5>/dev/null
+   $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+   exec 5>>config.log
+   # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+   # would make configure fail if this is the last instruction.
+   $ac_cs_success || { (exit 1); exit 1; }
+ fi
+ 
diff -Nrcpad gcc-3.4.3/fixincludes/configure.ac gcc-4.0.0/fixincludes/configure.ac
*** gcc-3.4.3/fixincludes/configure.ac	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/configure.ac	Thu Dec  2 11:03:21 2004
***************
*** 0 ****
--- 1,98 ----
+ AC_PREREQ(2.59)
+ 
+ AC_INIT(fixincludes, [ ])
+ AC_CONFIG_SRCDIR(inclhack.def)
+ AC_CONFIG_AUX_DIR(..)
+ AC_CANONICAL_SYSTEM
+ AC_PROG_CC
+ 
+ # Determine the noncanonical target name, for directory use.
+ ACX_NONCANONICAL_TARGET
+ 
+ # Specify the local prefix
+ local_prefix=
+ AC_ARG_WITH(local-prefix,
+ [  --with-local-prefix=DIR specifies directory to put local include],
+ [case "${withval}" in
+ yes)	AC_MSG_ERROR(bad value ${withval} given for local include directory prefix) ;;
+ no)	;;
+ *)	local_prefix=$with_local_prefix ;;
+ esac])
+ 
+ # Default local prefix if it is empty
+ if test x$local_prefix = x; then
+ 	local_prefix=/usr/local
+ fi
+ 
+ # Choose one or two-process fix methodology.  Systems that cannot handle
+ # bi-directional pipes must use the two process method.
+ #
+ AC_ARG_ENABLE([twoprocess],
+ [  --enable-twoprocess       Use a separate process to apply the fixes],
+ [if test "x$enable_twoprocess" = xyes; then
+ 	TARGET=twoprocess
+ else
+ 	TARGET=oneprocess
+ fi],
+ [case $host in
+ 	i?86-*-msdosdjgpp* | \
+ 	i?86-*-mingw32* | \
+ 	*-*-beos* )
+ 		TARGET=twoprocess
+ 		;;
+ 
+ 	* )
+ 		TARGET=oneprocess
+ 		;;
+ esac])
+ AC_SUBST(TARGET)
+ 
+ if test $TARGET = twoprocess; then
+ 	AC_DEFINE(SEPARATE_FIX_PROC, 1,
+ 		  [Define if testing and fixing are done by separate process])
+ fi
+ 
+ TL_AC_GCC_VERSION([$srcdir/..])
+ 
+ case $host in
+ 	vax-dec-bsd* )
+ 		AC_DEFINE(exit, xexit, [Define to xexit if the host system does not support atexit])
+ 		AC_DEFINE(atexit, xatexit, [Define to xatexit if the host system does not support atexit])
+ 		;;
+ esac
+ 
+ AC_DEFINE_UNQUOTED([EXE_EXT], "$ac_exeext",
+   [Defined to the executable file extension on the host system])
+ 
+ # Checks for header files.
+ AC_HEADER_STDC
+ AC_CHECK_HEADERS([stddef.h stdlib.h strings.h unistd.h fcntl.h sys/file.h \
+ 	sys/stat.h])
+ AC_CHECK_FUNCS(putc_unlocked fputc_unlocked fputs_unlocked \
+         fwrite_unlocked fprintf_unlocked)
+ AC_CHECK_DECLS([abort, errno, putc_unlocked, fputc_unlocked,
+         fputs_unlocked, fwrite_unlocked, fprintf_unlocked])
+ 
+ # Checks for typedefs, structures, and compiler characteristics.
+ AC_C_CONST
+ 
+ # Checks for library functions.
+ gcc_AC_FUNC_MMAP_BLACKLIST
+ 
+ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+ AC_ARG_ENABLE(maintainer-mode,
+ [  --enable-maintainer-mode enable make rules and dependencies not useful
+                           (and sometimes confusing) to the casual installer],
+       USE_MAINTAINER_MODE=$enableval,
+       USE_MAINTAINER_MODE=no)
+ AC_MSG_RESULT($USE_MAINTAINER_MODE)
+ if test "$USE_MAINTAINER_MODE" = yes; then
+   MAINT=
+ else
+   MAINT='#'
+ fi	
+ AC_SUBST(MAINT)
+ 
+ AC_CONFIG_HEADERS(config.h, [echo timestamp > stamp-h])
+ AC_CONFIG_FILES(Makefile mkheaders)
+ AC_OUTPUT
diff -Nrcpad gcc-3.4.3/fixincludes/fixfixes.c gcc-4.0.0/fixincludes/fixfixes.c
*** gcc-3.4.3/fixincludes/fixfixes.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/fixfixes.c	Wed Oct 27 20:13:57 2004
***************
*** 0 ****
--- 1,807 ----
+ 
+ /*
+ 
+    Test to see if a particular fix should be applied to a header file.
+ 
+    Copyright (C) 1997, 1998, 1999, 2000, 2001, 2003, 2004
+    Free Software Foundation, Inc.
+ 
+ = = = = = = = = = = = = = = = = = = = = = = = = =
+ 
+ NOTE TO DEVELOPERS
+ 
+ The routines you write here must work closely with fixincl.c.
+ 
+ Here are the rules:
+ 
+ 1.  Every test procedure name must be suffixed with "_fix".
+     These routines will be referenced from inclhack.def, sans the suffix.
+ 
+ 2.  Use the "FIX_PROC_HEAD()" macro _with_ the "_fix" suffix
+     (I cannot use the ## magic from ANSI C) for defining your entry point.
+ 
+ 3.  Put your test name into the FIXUP_TABLE.
+ 
+ 4.  Do not read anything from stdin.  It is closed.
+ 
+ 5.  Write to stderr only in the event of a reportable error
+     In such an event, call "exit (EXIT_FAILURE)".
+ 
+ 6.  You have access to the fixDescList entry for the fix in question.
+     This may be useful, for example, if there are interesting strings
+     or pre-compiled regular expressions stored there.
+ 
+ = = = = = = = = = = = = = = = = = = = = = = = = =
+ 
+ This file is part of GCC.
+ 
+ GCC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GCC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING.  If not, write to
+ the Free Software Foundation, 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.  */
+ 
+ #include "fixlib.h"
+ #define    GTYPE_SE_CT 1
+ 
+ #ifdef SEPARATE_FIX_PROC
+ #include "fixincl.x"
+ #endif
+ 
+ tSCC zNeedsArg[] = "fixincl error:  `%s' needs %s argument (c_fix_arg[%d])\n";
+ 
+ typedef void t_fix_proc (const char *, const char *, tFixDesc *) ;
+ typedef struct {
+     const char*  fix_name;
+     t_fix_proc*  fix_proc;
+ } fix_entry_t;
+ 
+ #define FIXUP_TABLE \
+   _FT_( "char_macro_def",   char_macro_def_fix ) \
+   _FT_( "char_macro_use",   char_macro_use_fix ) \
+   _FT_( "format",           format_fix )         \
+   _FT_( "machine_name",     machine_name_fix )   \
+   _FT_( "wrap",             wrap_fix )           \
+   _FT_( "gnu_type",         gnu_type_fix )
+ 
+ 
+ #define FIX_PROC_HEAD( fix )	\
+ static void fix (const char* filname ATTRIBUTE_UNUSED , \
+                  const char* text ATTRIBUTE_UNUSED , \
+                  tFixDesc* p_fixd ATTRIBUTE_UNUSED )
+ 
+ #ifdef NEED_PRINT_QUOTE
+ /*
+  *  Skip over a quoted string.  Single quote strings may
+  *  contain multiple characters if the first character is
+  *  a backslash.  Especially a backslash followed by octal digits.
+  *  We are not doing a correctness syntax check here.
+  */
+ static char*
+ print_quote(char q, char* text )
+ {
+   fputc( q, stdout );
+ 
+   for (;;)
+     {
+       char ch = *(text++);
+       fputc( ch, stdout );
+ 
+       switch (ch)
+         {
+         case '\\':
+           if (*text == NUL)
+             goto quote_done;
+ 
+           fputc( *(text++), stdout );
+           break;
+ 
+         case '"':
+         case '\'':
+           if (ch != q)
+             break;
+           /*FALLTHROUGH*/
+ 
+         case '\n':
+         case NUL:
+           goto quote_done;
+         }
+     } quote_done:;
+ 
+   return text;
+ }
+ #endif /* NEED_PRINT_QUOTE */
+ 
+ 
+ /*
+  *  Emit the GNU standard type wrapped up in such a way that
+  *  this thing can be encountered countless times during a compile
+  *  and not cause even a warning.
+  */
+ static const char*
+ emit_gnu_type (const char* text, regmatch_t* rm )
+ {
+   char z_TYPE[ 64 ];
+   char z_type[ 64 ];
+ 
+   fwrite (text, rm[0].rm_so, 1, stdout);
+ 
+   {
+     const char* ps = text   + rm[1].rm_so;
+     const char* pe = text   + rm[1].rm_eo;
+     char* pd = z_type;
+     char* pD = z_TYPE;
+ 
+     while (ps < pe)
+       *(pD++) = TOUPPER( *(pd++) = *(ps++) );
+ 
+     *pD = *pd = NUL;
+   }
+ 
+   /*
+    *  Now print out the reformed typedef,
+    *  with a C++ guard for WCHAR
+    */
+   {
+     tSCC z_fmt[] = "\
+ #if !defined(_GCC_%s_T)%s\n\
+ #define _GCC_%s_T\n\
+ typedef __%s_TYPE__ %s_t;\n\
+ #endif\n";
+ 
+     const char *const pz_guard = (strcmp (z_type, "wchar") == 0)
+                            ? " && ! defined(__cplusplus)" : "";
+ 
+     printf (z_fmt, z_TYPE, pz_guard, z_TYPE, z_TYPE, z_type);
+   }
+ 
+   return text += rm[0].rm_eo;
+ }
+ 
+ 
+ /*
+  *  Copy the `format' string to std out, replacing `%n' expressions
+  *  with the matched text from a regular expression evaluation.
+  *  Doubled '%' characters will be replaced with a single copy.
+  *  '%' characters in other contexts and all other characters are
+  *  copied out verbatim.
+  */
+ static void
+ format_write (tCC* format, tCC* text, regmatch_t av[] )
+ {
+   int c;
+ 
+   while ((c = (unsigned)*(format++)) != NUL) {
+ 
+     if (c != '%')
+       {
+         putchar(c);
+         continue;
+       }
+ 
+     c = (unsigned)*(format++);
+ 
+     /*
+      *  IF the character following a '%' is not a digit,
+      *  THEN we will always emit a '%' and we may or may
+      *  not emit the following character.  We will end on
+      *  a NUL and we will emit only one of a pair of '%'.
+      */
+     if (! ISDIGIT ( c ))
+       {
+         putchar( '%' );
+         switch (c) {
+         case NUL:
+           return;
+         case '%':
+           break;
+         default:
+           putchar(c);
+         }
+       }
+ 
+     /*
+      *  Emit the matched subexpression numbered 'c'.
+      *  IF, of course, there was such a match...
+      */
+     else {
+       regmatch_t*  pRM = av + (c - (unsigned)'0');
+       size_t len;
+ 
+       if (pRM->rm_so < 0)
+         continue;
+ 
+       len = pRM->rm_eo - pRM->rm_so;
+       if (len > 0)
+         fwrite(text + pRM->rm_so, len, 1, stdout);
+     }
+   }
+ }
+ 
+ 
+ /*
+  *  Search for multiple copies of a regular expression.  Each block
+  *  of matched text is replaced with the format string, as described
+  *  above in `format_write'.
+  */
+ FIX_PROC_HEAD( format_fix )
+ {
+   tCC*  pz_pat = p_fixd->patch_args[2];
+   tCC*  pz_fmt = p_fixd->patch_args[1];
+   regex_t re;
+   regmatch_t rm[10];
+   IGNORE_ARG(filname);
+ 
+   /*
+    *  We must have a format
+    */
+   if (pz_fmt == (tCC*)NULL)
+     {
+       fprintf( stderr, zNeedsArg, p_fixd->fix_name, "replacement format", 0 );
+       exit (EXIT_BROKEN);
+     }
+ 
+   /*
+    *  IF we don't have a search text, then go find the first
+    *  regular expression among the tests.
+    */
+   if (pz_pat == (tCC*)NULL)
+     {
+       tTestDesc* pTD = p_fixd->p_test_desc;
+       int        ct  = p_fixd->test_ct;
+       for (;;)
+         {
+           if (ct-- <= 0)
+             {
+               fprintf( stderr, zNeedsArg, p_fixd->fix_name, "search text", 1 );
+               exit (EXIT_BROKEN);
+             }
+ 
+           if (pTD->type == TT_EGREP)
+             {
+               pz_pat = pTD->pz_test_text;
+               break;
+             }
+ 
+           pTD++;
+         }
+     }
+ 
+   /*
+    *  Replace every copy of the text we find
+    */
+   compile_re (pz_pat, &re, 1, "format search-text", "format_fix" );
+   while (xregexec (&re, text, 10, rm, 0) == 0)
+     {
+       fwrite( text, rm[0].rm_so, 1, stdout );
+       format_write( pz_fmt, text, rm );
+       text += rm[0].rm_eo;
+     }
+ 
+   /*
+    *  Dump out the rest of the file
+    */
+   fputs (text, stdout);
+ }
+ 
+ 
+ /* Scan the input file for all occurrences of text like this:
+ 
+    #define TIOCCONS _IO(T, 12)
+ 
+    and change them to read like this:
+ 
+    #define TIOCCONS _IO('T', 12)
+ 
+    which is the required syntax per the C standard.  (The definition of
+    _IO also has to be tweaked - see below.)  'IO' is actually whatever you
+    provide as the `c_fix_arg' argument.  */
+ 
+ FIX_PROC_HEAD( char_macro_use_fix )
+ {
+   /* This regexp looks for a traditional-syntax #define (# in column 1)
+      of an object-like macro.  */
+   static const char pat[] =
+     "^#[ \t]*define[ \t]+[_A-Za-z][_A-Za-z0-9]*[ \t]+";
+   static regex_t re;
+ 
+   const char* str = p_fixd->patch_args[1];
+   regmatch_t rm[1];
+   const char *p, *limit;
+   size_t len;
+   IGNORE_ARG(filname);
+ 
+   if (str == NULL)
+     {
+       fprintf (stderr, zNeedsArg, p_fixd->fix_name, "ioctl type", 0);
+       exit (EXIT_BROKEN);
+     }
+ 
+   len = strlen (str);
+   compile_re (pat, &re, 1, "macro pattern", "char_macro_use_fix");
+ 
+   for (p = text;
+        xregexec (&re, p, 1, rm, 0) == 0;
+        p = limit + 1)
+     {
+       /* p + rm[0].rm_eo is the first character of the macro replacement.
+ 	 Find the end of the macro replacement, and the STR we were
+ 	 sent to look for within the replacement.  */
+       p += rm[0].rm_eo;
+       limit = p - 1;
+       do
+ 	{
+ 	  limit = strchr (limit + 1, '\n');
+ 	  if (!limit)
+ 	    goto done;
+ 	}
+       while (limit[-1] == '\\');
+ 
+       do
+ 	{
+ 	  if (*p == str[0] && !strncmp (p+1, str+1, len-1))
+ 	    goto found;
+ 	}
+       while (++p < limit - len);
+       /* Hit end of line.  */
+       continue;
+ 
+     found:
+       /* Found STR on this line.  If the macro needs fixing,
+ 	 the next few chars will be whitespace or uppercase,
+ 	 then an open paren, then a single letter.  */
+       while ((ISSPACE (*p) || ISUPPER (*p)) && p < limit) p++;
+       if (*p++ != '(')
+ 	continue;
+       if (!ISALPHA (*p))
+ 	continue;
+       if (ISIDNUM (p[1]))
+ 	continue;
+ 
+       /* Splat all preceding text into the output buffer,
+ 	 quote the character at p, then proceed.  */
+       fwrite (text, 1, p - text, stdout);
+       putchar ('\'');
+       putchar (*p);
+       putchar ('\'');
+       text = p + 1;
+     }
+  done:
+   fputs (text, stdout);
+ }
+ 
+ 
+ /* Scan the input file for all occurrences of text like this:
+ 
+    #define xxxIOxx(x, y) (....'x'<<16....)
+ 
+    and change them to read like this:
+ 
+    #define xxxIOxx(x, y) (....x<<16....)
+ 
+    which is the required syntax per the C standard.  (The uses of _IO
+    also has to be tweaked - see above.)  'IO' is actually whatever
+    you provide as the `c_fix_arg' argument.  */
+ FIX_PROC_HEAD( char_macro_def_fix )
+ {
+   /* This regexp looks for any traditional-syntax #define (# in column 1).  */
+   static const char pat[] =
+     "^#[ \t]*define[ \t]+";
+   static regex_t re;
+ 
+   const char* str = p_fixd->patch_args[1];
+   regmatch_t rm[1];
+   const char *p, *limit;
+   char arg;
+   size_t len;
+   IGNORE_ARG(filname);
+ 
+   if (str == NULL)
+     {
+       fprintf (stderr, zNeedsArg, p_fixd->fix_name, "ioctl type", 0);
+       exit (EXIT_BROKEN);
+     }
+ 
+   len = strlen (str);
+   compile_re (pat, &re, 1, "macro pattern", "fix_char_macro_defines");
+ 
+   for (p = text;
+        xregexec (&re, p, 1, rm, 0) == 0;
+        p = limit + 1)
+     {
+       /* p + rm[0].rm_eo is the first character of the macro name.
+ 	 Find the end of the macro replacement, and the STR we were
+ 	 sent to look for within the name.  */
+       p += rm[0].rm_eo;
+       limit = p - 1;
+       do
+ 	{
+ 	  limit = strchr (limit + 1, '\n');
+ 	  if (!limit)
+ 	    goto done;
+ 	}
+       while (limit[-1] == '\\');
+ 
+       do
+ 	{
+ 	  if (*p == str[0] && !strncmp (p+1, str+1, len-1))
+ 	    goto found;
+ 	  p++;
+ 	}
+       while (ISIDNUM (*p));
+       /* Hit end of macro name without finding the string.  */
+       continue;
+ 
+     found:
+       /* Found STR in this macro name.  If the macro needs fixing,
+ 	 there may be a few uppercase letters, then there will be an
+ 	 open paren with _no_ intervening whitespace, and then a
+ 	 single letter.  */
+       while (ISUPPER (*p) && p < limit) p++;
+       if (*p++ != '(')
+ 	continue;
+       if (!ISALPHA (*p))
+ 	continue;
+       if (ISIDNUM (p[1]))
+ 	continue;
+ 
+       /* The character at P is the one to look for in the following
+ 	 text.  */
+       arg = *p;
+       p += 2;
+ 
+       while (p < limit)
+ 	{
+ 	  if (p[-1] == '\'' && p[0] == arg && p[1] == '\'')
+ 	    {
+ 	      /* Remove the quotes from this use of ARG.  */
+ 	      p--;
+ 	      fwrite (text, 1, p - text, stdout);
+ 	      putchar (arg);
+ 	      p += 3;
+ 	      text = p;
+ 	    }
+ 	  else
+ 	    p++;
+ 	}
+     }
+  done:
+   fputs (text, stdout);
+ }
+ 
+ /* Fix for machine name #ifdefs that are not in the namespace reserved
+    by the C standard.  They won't be defined if compiling with -ansi,
+    and the headers will break.  We go to some trouble to only change
+    #ifdefs where the macro is defined by GCC in non-ansi mode; this
+    minimizes the number of headers touched.  */
+ 
+ #define SCRATCHSZ 64   /* hopefully long enough */
+ 
+ FIX_PROC_HEAD( machine_name_fix )
+ {
+   regmatch_t match[2];
+   const char *line, *base, *limit, *p, *q;
+   regex_t *label_re, *name_re;
+   char scratch[SCRATCHSZ];
+   size_t len;
+   IGNORE_ARG(filname);
+   IGNORE_ARG(p_fixd);
+ 
+   if (!mn_get_regexps (&label_re, &name_re, "machine_name_fix"))
+     {
+       fputs( "The target machine has no needed machine name fixes\n", stderr );
+       goto done;
+     }
+ 
+   scratch[0] = '_';
+   scratch[1] = '_';
+ 
+   for (base = text;
+        xregexec (label_re, base, 2, match, 0) == 0;
+        base = limit)
+     {
+       base += match[0].rm_eo;
+       /* We're looking at an #if or #ifdef.  Scan forward for the
+          next non-escaped newline.  */
+       line = limit = base;
+       do
+         {
+           limit++;
+           limit = strchr (limit, '\n');
+           if (!limit)
+             goto done;
+         }
+       while (limit[-1] == '\\');
+ 
+       /* If the 'name_pat' matches in between base and limit, we have
+          a bogon.  It is not worth the hassle of excluding comments
+          because comments on #if/#ifdef lines are rare, and strings on
+          such lines are illegal.
+ 
+          REG_NOTBOL means 'base' is not at the beginning of a line, which
+          shouldn't matter since the name_re has no ^ anchor, but let's
+          be accurate anyway.  */
+ 
+       for (;;)
+         {
+         again:
+           if (base == limit)
+             break;
+ 
+           if (xregexec (name_re, base, 1, match, REG_NOTBOL))
+             goto done;  /* No remaining match in this file */
+ 
+           /* Match; is it on the line?  */
+           if (match[0].rm_eo > limit - base)
+             break;
+ 
+           p = base + match[0].rm_so;
+           base += match[0].rm_eo;
+ 
+           /* One more test: if on the same line we have the same string
+              with the appropriate underscores, then leave it alone.
+              We want exactly two leading and trailing underscores.  */
+           if (*p == '_')
+             {
+               len = base - p - ((*base == '_') ? 2 : 1);
+               q = p + 1;
+             }
+           else
+             {
+               len = base - p - ((*base == '_') ? 1 : 0);
+               q = p;
+             }
+           if (len + 4 > SCRATCHSZ)
+             abort ();
+           memcpy (&scratch[2], q, len);
+           len += 2;
+           scratch[len++] = '_';
+           scratch[len++] = '_';
+ 
+           for (q = line; q <= limit - len; q++)
+             if (*q == '_' && !strncmp (q, scratch, len))
+               goto again;
+           
+           fwrite (text, 1, p - text, stdout);
+           fwrite (scratch, 1, len, stdout);
+ 
+           text = base;
+         }
+     }
+  done:
+   fputs (text, stdout);
+ }
+ 
+ 
+ FIX_PROC_HEAD( wrap_fix )
+ {
+   tSCC   z_no_wrap_pat[] = "^#if.*__need_";
+   static regex_t no_wrapping_re; /* assume zeroed data */
+ 
+   tCC*   pz_name = NULL;
+ 
+   if (no_wrapping_re.allocated == 0)
+     compile_re( z_no_wrap_pat, &no_wrapping_re, 0, "no-wrap pattern",
+                 "wrap-fix" );
+ 
+   /*
+    *  IF we do *not* match the no-wrap re, then we have a double negative.
+    *  A double negative means YES.
+    */
+   if (xregexec( &no_wrapping_re, text, 0, NULL, 0 ) != 0)
+     {
+       /*
+        *  A single file can get wrapped more than once by different fixes.
+        *  A single fix can wrap multiple files.  Therefore, guard with
+        *  *both* the fix name and the file name.
+        */
+       size_t ln = strlen( filname ) + strlen( p_fixd->fix_name ) + 14;
+       char*  pz = xmalloc( ln );
+       pz_name = pz;
+       sprintf( pz, "FIXINC_WRAP_%s-%s", filname, p_fixd->fix_name );
+ 
+       for (pz += 12; 1; pz++) {
+         char ch = *pz;
+ 
+         if (ch == NUL)
+           break;
+ 
+         if (! ISALNUM( ch )) {
+           *pz = '_';
+         }
+         else {
+           *pz = TOUPPER( ch );
+         }
+       }
+ 
+       printf( "#ifndef %s\n", pz_name );
+       printf( "#define %s 1\n\n", pz_name );
+     }
+ 
+   if (p_fixd->patch_args[1] == (tCC*)NULL)
+     fputs( text, stdout );
+ 
+   else {
+     fputs( p_fixd->patch_args[1], stdout );
+     fputs( text, stdout );
+     if (p_fixd->patch_args[2] != (tCC*)NULL)
+       fputs( p_fixd->patch_args[2], stdout );
+   }
+ 
+   if (pz_name != NULL) {
+     printf( "\n#endif  /* %s */\n", pz_name );
+     free( (void*)pz_name );
+   }
+ }
+ 
+ 
+ /*
+  *  Search for multiple copies of a regular expression.  Each block
+  *  of matched text is replaced with the format string, as described
+  *  above in `format_write'.
+  */
+ FIX_PROC_HEAD( gnu_type_fix )
+ {
+   const char* pz_pat;
+   regex_t    re;
+   regmatch_t rm[GTYPE_SE_CT+1];
+   IGNORE_ARG(filname);
+ 
+   {
+     tTestDesc* pTD = p_fixd->p_test_desc;
+     int        ct  = p_fixd->test_ct;
+     for (;;)
+       {
+         if (ct-- <= 0)
+           {
+             fprintf (stderr, zNeedsArg, p_fixd->fix_name, "search text", 1);
+             exit (EXIT_BROKEN);
+           }
+ 
+         if (pTD->type == TT_EGREP)
+           {
+             pz_pat = pTD->pz_test_text;
+             break;
+           }
+ 
+         pTD++;
+       }
+   }
+ 
+   compile_re (pz_pat, &re, 1, "gnu type typedef", "gnu_type_fix");
+ 
+   while (xregexec (&re, text, GTYPE_SE_CT+1, rm, 0) == 0)
+     {
+       text = emit_gnu_type (text, rm);
+     }
+ 
+   /*
+    *  Dump out the rest of the file
+    */
+   fputs (text, stdout);
+ }
+ 
+ 
+ /* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
+ 
+      test for fix selector
+ 
+      THIS IS THE ONLY EXPORTED ROUTINE
+ 
+ */
+ void
+ apply_fix( tFixDesc* p_fixd, tCC* filname )
+ {
+ #define _FT_(n,p) { n, p },
+   static fix_entry_t fix_table[] = { FIXUP_TABLE { NULL, NULL }};
+ #undef _FT_
+ #define FIX_TABLE_CT (ARRAY_SIZE (fix_table)-1)
+ 
+   tCC* fixname = p_fixd->patch_args[0];
+   char* buf;
+   int ct = FIX_TABLE_CT;
+   fix_entry_t* pfe = fix_table;
+ 
+   for (;;)
+     {
+       if (strcmp (pfe->fix_name, fixname) == 0)
+         break;
+       if (--ct <= 0)
+         {
+           fprintf (stderr, "fixincl error:  the `%s' fix is unknown\n",
+                    fixname );
+           exit (EXIT_BROKEN);
+         }
+       pfe++;
+     }
+ 
+   buf = load_file_data (stdin);
+   (*pfe->fix_proc)( filname, buf, p_fixd );
+ }
+ 
+ #ifdef SEPARATE_FIX_PROC
+ tSCC z_usage[] =
+ "USAGE: applyfix <fix-name> <file-to-fix> <file-source> <file-destination>\n";
+ tSCC z_reopen[] =
+ "FS error %d (%s) reopening %s as std%s\n";
+ 
+ int
+ main( int argc, char** argv )
+ {
+   tFixDesc* pFix;
+   char* pz_tmptmp;
+   char* pz_tmp_base;
+   char* pz_tmp_dot;
+ 
+   if (argc != 5)
+     {
+     usage_failure:
+       fputs (z_usage, stderr);
+       return EXIT_FAILURE;
+     }
+ 
+   initialize_opts ();
+ 
+   {
+     char* pz = argv[1];
+     long  idx;
+ 
+     if (! ISDIGIT ( *pz ))
+       goto usage_failure;
+ 
+     idx = strtol (pz, &pz, 10);
+     if ((*pz != NUL) || ((unsigned)idx >= FIX_COUNT))
+       goto usage_failure;
+     pFix = fixDescList + idx;
+   }
+ 
+   if (freopen (argv[3], "r", stdin) != stdin)
+     {
+       fprintf (stderr, z_reopen, errno, strerror( errno ), argv[3], "in");
+       return EXIT_FAILURE;
+     }
+ 
+   pz_tmptmp = xmalloc (strlen (argv[4]) + 5);
+   strcpy( pz_tmptmp, argv[4] );
+ 
+   /* Don't lose because "12345678" and "12345678X" map to the same
+      file under DOS restricted 8+3 file namespace.  Note that DOS
+      doesn't allow more than one dot in the trunk of a file name.  */
+   pz_tmp_base = basename( pz_tmptmp );
+   pz_tmp_dot = strchr( pz_tmp_base, '.' );
+ #ifdef _PC_NAME_MAX
+   if (pathconf( pz_tmptmp, _PC_NAME_MAX ) <= 12	/* is this DOS or Windows9X? */
+       && pz_tmp_dot != (char*)NULL)
+     strcpy (pz_tmp_dot+1, "X"); /* nuke the original extension */
+   else
+ #endif /* _PC_NAME_MAX */
+     strcat (pz_tmptmp, ".X");
+   if (freopen (pz_tmptmp, "w", stdout) != stdout)
+     {
+       fprintf (stderr, z_reopen, errno, strerror( errno ), pz_tmptmp, "out");
+       return EXIT_FAILURE;
+     }
+ 
+   apply_fix (pFix, argv[1]);
+   fclose (stdout);
+   fclose (stdin);
+   unlink (argv[4]);
+   if (rename (pz_tmptmp, argv[4]) != 0)
+     {
+       fprintf (stderr, "error %d (%s) renaming %s to %s\n", errno,
+                strerror( errno ), pz_tmptmp, argv[4]);
+       return EXIT_FAILURE;
+     }
+ 
+   return EXIT_SUCCESS;
+ }
+ #endif
diff -Nrcpad gcc-3.4.3/fixincludes/fixinc.in gcc-4.0.0/fixincludes/fixinc.in
*** gcc-3.4.3/fixincludes/fixinc.in	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/fixinc.in	Fri Nov  5 04:48:32 2004
***************
*** 0 ****
--- 1,500 ----
+ #!/bin/sh
+ #
+ # Install modified versions of certain ANSI-incompatible system header
+ # files which are fixed to work correctly with ANSI C and placed in a
+ # directory that GCC will search.
+ #
+ # See README-fixinc for more information.
+ #
+ #  fixincludes copyright (c) 1998, 1999, 2000, 2002
+ #  The Free Software Foundation, Inc.
+ #
+ # fixincludes is free software.
+ # 
+ # You may redistribute it and/or modify it under the terms of the
+ # GNU General Public License, as published by the Free Software
+ # Foundation; either version 2, or (at your option) any later version.
+ # 
+ # fixincludes is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ # See the GNU General Public License for more details.
+ # 
+ # You should have received a copy of the GNU General Public License
+ # along with fixincludes.  See the file "COPYING".  If not,
+ # write to:  The Free Software Foundation, Inc.,
+ #            59 Temple Place - Suite 330,
+ #            Boston,  MA  02111-1307, USA.
+ #
+ # # # # # # # # # # # # # # # # # # # # #
+ 
+ # Usage: fixinc.sh output-dir input-dir
+ #
+ # Directory in which to store the results.
+ # Fail if no arg to specify a directory for the output.
+ if [ "x$1" = "x" ]
+ then
+   echo fixincludes: no output directory specified
+   exit 1
+ fi
+ 
+ LIB=${1}
+ shift
+ 
+ # Make sure it exists.
+ if [ ! -d $LIB ]; then
+   mkdir $LIB || {
+     echo fixincludes:  output dir '`'$LIB"' cannot be created"
+     exit 1
+   }
+ else
+   ( cd $LIB && touch DONE && rm DONE ) || {
+     echo fixincludes:  output dir '`'$LIB"' is an invalid directory"
+     exit 1
+   }
+ fi
+ 
+ if test -z "$VERBOSE"
+ then
+   VERBOSE=2
+   export VERBOSE
+ else
+   case "$VERBOSE" in
+   [0-9] ) : ;;
+   * )  VERBOSE=3 ;;
+   esac
+ fi
+ 
+ # Define what target system we're fixing.
+ #
+ if test -r ./Makefile; then
+   target_canonical="`sed -n -e 's,^target[ 	]*=[ 	]*\(.*\)$,\1,p' < Makefile`"
+ fi
+ 
+ # If not from the Makefile, then try config.guess
+ #
+ if test -z "${target_canonical}" ; then
+   if test -x ./config.guess ; then
+     target_canonical="`config.guess`" ; fi
+   test -z "${target_canonical}" && target_canonical=unknown
+ fi
+ export target_canonical
+ 
+ # # # # # # # # # # # # # # # # # # # # #
+ #
+ # Define PWDCMD as a command to use to get the working dir
+ # in the form that we want.
+ PWDCMD=${PWDCMD-pwd}
+ 
+ case "`$PWDCMD`" in
+ //*)
+     # On an Apollo, discard everything before `/usr'.
+     PWDCMD="eval pwd | sed -e 's,.*/usr/,/usr/,'"
+     ;;
+ esac
+ 
+ # Original directory.
+ ORIGDIR=`${PWDCMD}`
+ export ORIGDIR
+ FIXINCL=`${PWDCMD}`/fixincl
+ if [ ! -x $FIXINCL ] ; then
+   echo "Cannot find fixincl" >&2
+   exit 1
+ fi
+ export FIXINCL
+ 
+ # Make LIB absolute only if needed to avoid problems with the amd.
+ case $LIB in
+ /*)
+     ;;
+ *)
+     cd $LIB; LIB=`${PWDCMD}`
+     ;;
+ esac
+ 
+ if test $VERBOSE -gt 0
+ then echo Fixing headers into ${LIB} for ${target_canonical} target ; fi
+ 
+ # Determine whether this system has symbolic links.
+ if test -n "$DJDIR"; then
+   LINKS=false
+ elif ln -s X $LIB/ShouldNotExist 2>/dev/null; then
+   rm -f $LIB/ShouldNotExist
+   LINKS=true
+ elif ln -s X /tmp/ShouldNotExist 2>/dev/null; then
+   rm -f /tmp/ShouldNotExist
+   LINKS=true
+ else
+   LINKS=false
+ fi
+ 
+ # # # # # # # # # # # # # # # # # # # # #
+ #
+ #  In the file macro_list are listed all the predefined
+ #  macros that are not in the C89 reserved namespace (the reserved
+ #  namespace is all identifiers beginnning with two underscores or one
+ #  underscore followed by a capital letter).  A regular expression to find
+ #  any of those macros in a header file is written to MN_NAME_PAT.
+ #
+ #  Note dependency on ASCII. \012 = newline.
+ #  tr ' ' '\n' is, alas, not portable.
+ 
+ if test -s ${MACRO_LIST}
+ then
+   if test $VERBOSE -gt 0; then
+     echo "Forbidden identifiers: `tr '\012' ' ' < ${MACRO_LIST}`"
+   fi
+   MN_NAME_PAT="`sed 's/^/\\\\</; s/$/\\\\>/; $!s/$/|/' \
+       < ${MACRO_LIST} | tr -d '\012'`"
+   export MN_NAME_PAT
+ else
+   if test $VERBOSE -gt 0
+   then echo "No forbidden identifiers defined by this target" ; fi
+ fi
+ 
+ # # # # # # # # # # # # # # # # # # # # #
+ #
+ #  Search each input directory for broken header files.
+ #  This loop ends near the end of the file.
+ #
+ if test $# -eq 0
+ then
+     INPUTLIST="/usr/include"
+ else
+     INPUTLIST="$@"
+ fi
+ 
+ for INPUT in ${INPUTLIST} ; do
+ 
+ cd ${ORIGDIR}
+ 
+ #  Make sure a directory exists before changing into it,
+ #  otherwise Solaris2 will fail-exit the script.
+ #
+ if [ ! -d ${INPUT} ]; then
+   continue
+ fi
+ cd ${INPUT}
+ 
+ INPUT=`${PWDCMD}`
+ export INPUT
+ 
+ #
+ # # # # # # # # # # # # # # # # # # # # #
+ #
+ if test $VERBOSE -gt 1
+ then echo Finding directories and links to directories ; fi
+ 
+ # Find all directories and all symlinks that point to directories.
+ # Put the list in $all_dirs.
+ # Each time we find a symlink, add it to newdirs
+ # so that we do another find within the dir the link points to.
+ # Note that $all_dirs may have duplicates in it;
+ # later parts of this file are supposed to ignore them.
+ dirs="."
+ levels=2
+ all_dirs=""
+ search_dirs=""
+ 
+ while [ -n "$dirs" ] && [ $levels -gt 0 ]
+ do
+   levels=`expr $levels - 1`
+   newdirs=
+   for d in $dirs
+   do
+     if test $VERBOSE -gt 1
+     then echo " Searching $INPUT/$d" ; fi
+ 
+     # Find all directories under $d, relative to $d, excluding $d itself.
+     # (The /. is needed after $d in case $d is a symlink.)
+     all_dirs="$all_dirs `find $d/. -type d -print | \
+                sed -e '/\/\.$/d' -e 's@/./@/@g'`"
+     # Find all links to directories.
+     # Using `-exec test -d' in find fails on some systems,
+     # and trying to run test via sh fails on others,
+     # so this is the simplest alternative left.
+     # First find all the links, then test each one.
+     theselinks=
+     $LINKS && \
+       theselinks=`find $d/. -type l -print | sed -e 's@/./@/@g'`
+     for d1 in $theselinks --dummy--
+     do
+       # If the link points to a directory,
+       # add that dir to $newdirs
+       if [ -d $d1 ]
+       then
+         all_dirs="$all_dirs $d1"
+         if [ "`ls -ld $d1 | sed -n 's/.*-> //p'`" != "." ]
+         then
+           newdirs="$newdirs $d1"
+           search_dirs="$search_dirs $d1"
+         fi
+       fi
+     done
+   done
+ 
+   dirs="$newdirs"
+ done
+ 
+ # # # # # # # # # # # # # # # # # # # # #
+ #
+ dirs=
+ if test $VERBOSE -gt 2
+ then echo "All directories (including links to directories):"
+      echo $all_dirs
+ fi
+ 
+ for file in $all_dirs; do
+   rm -rf $LIB/$file
+   if [ ! -d $LIB/$file ]
+   then mkdir $LIB/$file
+   fi
+ done
+ mkdir $LIB/root
+ 
+ # # # # # # # # # # # # # # # # # # # # #
+ #
+ # treetops gets an alternating list
+ # of old directories to copy
+ # and the new directories to copy to.
+ treetops=". ${LIB}"
+ 
+ if $LINKS; then
+   if test $VERBOSE -gt 1
+   then echo 'Making symbolic directory links' ; fi
+   cwd=`${PWDCMD}`
+ 
+   for sym_link in $search_dirs; do
+     cd ${INPUT}
+     dest=`ls -ld ${sym_link} | sed -n 's/.*-> //p'`
+ 
+     # In case $dest is relative, get to ${sym_link}'s dir first.
+     #
+     cd ./`echo ${sym_link} | sed 's;/[^/]*$;;'`
+ 
+     # Check that the target directory exists.
+     # Redirections changed to avoid bug in sh on Ultrix.
+     #
+     (cd $dest) > /dev/null 2>&1
+     if [ $? = 0 ]; then
+       cd $dest
+ 
+       # full_dest_dir gets the dir that the link actually leads to.
+       #
+       full_dest_dir=`${PWDCMD}`
+ 
+       # Canonicalize ${INPUT} now to minimize the time an
+       # automounter has to change the result of ${PWDCMD}.
+       #
+       cinput=`cd ${INPUT}; ${PWDCMD}`
+ 
+       # If a link points to ., make a similar link to .
+       #
+       if [ ${full_dest_dir} = ${cinput} ]; then
+         if test $VERBOSE -gt 2
+         then echo ${sym_link} '->' . ': Making self link' ; fi
+         rm -fr ${LIB}/${sym_link} > /dev/null 2>&1
+         ln -s . ${LIB}/${sym_link} > /dev/null 2>&1
+ 
+       # If link leads back into ${INPUT},
+       # make a similar link here.
+       #
+       elif expr ${full_dest_dir} : "${cinput}/.*" > /dev/null; then
+         # Y gets the actual target dir name, relative to ${INPUT}.
+         y=`echo ${full_dest_dir} | sed -n "s&${cinput}/&&p"`
+         # DOTS is the relative path from ${LIB}/${sym_link} back to ${LIB}.
+         dots=`echo "${sym_link}" |
+           sed -e 's@^./@@' -e 's@/./@/@g' -e 's@[^/][^/]*@..@g' -e 's@..$@@'`
+         if test $VERBOSE -gt 2
+         then echo ${sym_link} '->' $dots$y ': Making local link' ; fi
+         rm -fr ${LIB}/${sym_link} > /dev/null 2>&1
+         ln -s $dots$y ${LIB}/${sym_link} > /dev/null 2>&1
+ 
+       else
+         # If the link is to a dir $target outside ${INPUT},
+         # repoint the link at ${INPUT}/root$target
+         # and process $target into ${INPUT}/root$target
+         # treat this directory as if it actually contained the files.
+         #
+         if test $VERBOSE -gt 2
+         then echo ${sym_link} '->' root${full_dest_dir} ': Making rooted link'
+         fi
+         if [ -d $LIB/root${full_dest_dir} ]
+         then true
+         else
+           dirname=root${full_dest_dir}/
+           dirmade=.
+           cd $LIB
+           while [ x$dirname != x ]; do
+             component=`echo $dirname | sed -e 's|/.*$||'`
+             mkdir $component >/dev/null 2>&1
+             cd $component
+             dirmade=$dirmade/$component
+             dirname=`echo $dirname | sed -e 's|[^/]*/||'`
+           done
+         fi
+ 
+         # Duplicate directory structure created in ${LIB}/${sym_link} in new
+         # root area.
+         #
+         for file2 in $all_dirs; do
+           case $file2 in
+             ${sym_link}/*)
+               dupdir=${LIB}/root${full_dest_dir}/`echo $file2 |
+                       sed -n "s|^${sym_link}/||p"`
+               if test $VERBOSE -gt 2
+               then echo "Duplicating ${sym_link}'s ${dupdir}" ; fi
+               if [ -d ${dupdir} ]
+               then true
+               else
+                 mkdir ${dupdir}
+               fi
+               ;;
+             *)
+               ;;
+           esac
+         done
+ 
+         # Get the path from ${LIB} to ${sym_link}, accounting for symlinks.
+         #
+         parent=`echo "${sym_link}" | sed -e 's@/[^/]*$@@'`
+         libabs=`cd ${LIB}; ${PWDCMD}`
+         file2=`cd ${LIB}; cd $parent; ${PWDCMD} | sed -e "s@^${libabs}@@"`
+ 
+         # DOTS is the relative path from ${LIB}/${sym_link} back to ${LIB}.
+         #
+         dots=`echo "$file2" | sed -e 's@/[^/]*@../@g'`
+         rm -fr ${LIB}/${sym_link} > /dev/null 2>&1
+         ln -s ${dots}root${full_dest_dir} ${LIB}/${sym_link} > /dev/null 2>&1
+         treetops="$treetops ${sym_link} ${LIB}/root${full_dest_dir}"
+       fi
+     fi
+   done
+ fi
+ 
+ # # # # # # # # # # # # # # # # # # # # #
+ #
+ required=
+ set x $treetops
+ shift
+ while [ $# != 0 ]; do
+   # $1 is an old directory to copy, and $2 is the new directory to copy to.
+   #
+   SRCDIR=`cd ${INPUT} ; cd $1 ; ${PWDCMD}`
+   export SRCDIR
+ 
+   FIND_BASE=$1
+   export FIND_BASE
+   shift
+ 
+   DESTDIR=`cd $1;${PWDCMD}`
+   export DESTDIR
+   shift
+ 
+   # The same dir can appear more than once in treetops.
+   # There's no need to scan it more than once.
+   #
+   if [ -f ${DESTDIR}/DONE ]
+   then continue ; fi
+ 
+   touch ${DESTDIR}/DONE
+   if test $VERBOSE -gt 1
+   then echo Fixing directory ${SRCDIR} into ${DESTDIR} ; fi
+ 
+   # Check files which are symlinks as well as those which are files.
+   #
+   cd ${INPUT}
+   required="$required `if $LINKS; then
+     find ${FIND_BASE}/. -name '*.h' \( -type f -o -type l \) -print
+   else
+     find ${FIND_BASE}/. -name '*.h' -type f -print
+   fi | \
+     sed -e 's;/\./;/;g' -e 's;//*;/;g' | \
+     ${FIXINCL}`"
+ done
+ 
+ ## Make sure that any include files referenced using double quotes
+ ## exist in the fixed directory.  This comes last since otherwise
+ ## we might end up deleting some of these files "because they don't
+ ## need any change."
+ set x `echo $required`
+ shift
+ while [ $# != 0 ]; do
+   newreq=
+   while [ $# != 0 ]; do
+     # $1 is the directory to copy from,
+     # $2 is the unfixed file,
+     # $3 is the fixed file name.
+     #
+     cd ${INPUT}
+     cd $1
+     if [ -f $2 ] ; then
+       if [ -r $2 ] && [ ! -r $3 ]; then
+         cp $2 $3 >/dev/null 2>&1 || echo "Can't copy $2" >&2
+         chmod +w $3 2>/dev/null
+         chmod a+r $3 2>/dev/null
+         if test $VERBOSE -gt 2
+         then echo Copied $2 ; fi
+         for include in `egrep '^[ 	]*#[ 	]*include[ 	]*"[^/]' $3 |
+              sed -e 's/^[ 	]*#[ 	]*include[ 	]*"\([^"]*\)".*$/\1/'`
+         do
+ 	  dir=`echo $2 | sed -e s'|/[^/]*$||'`
+ 	  dir2=`echo $3 | sed -e s'|/[^/]*$||'`
+ 	  newreq="$newreq $1 $dir/$include $dir2/$include"
+         done
+       fi
+     fi
+     shift; shift; shift
+   done
+   set x $newreq
+   shift
+ done
+ 
+ if test $VERBOSE -gt 2
+ then echo 'Cleaning up DONE files.' ; fi
+ cd $LIB
+ # Look for files case-insensitively, for the benefit of
+ # DOS/Windows filesystems.
+ find . -name '[Dd][Oo][Nn][Ee]' -exec rm -f '{}' ';'
+ 
+ if test $VERBOSE -gt 1
+ then echo 'Cleaning up unneeded directories:' ; fi
+ cd $LIB
+ all_dirs=`find . -type d \! -name '.' -print | sort -r`
+ for file in $all_dirs; do
+   if rmdir $LIB/$file > /dev/null
+   then
+     test $VERBOSE -gt 3 && echo "  removed $file"
+   fi
+ done 2> /dev/null
+ 
+ # On systems which don't support symlinks, `find' may barf
+ # if called with "-type l" predicate.  So only use that if
+ # we know we should look for symlinks.
+ if $LINKS; then
+   test $VERBOSE -gt 2 && echo "Removing unused symlinks"
+ 
+   all_dirs=`find . -type l -print`
+   for file in $all_dirs
+   do
+     if test ! -d $file
+     then
+       rm -f $file
+       test $VERBOSE -gt 3 && echo "  removed $file"
+       rmdir `dirname $file` > /dev/null && \
+            test $VERBOSE -gt 3 && \
+            echo "  removed `dirname $file`"
+     fi
+   done 2> /dev/null
+ fi
+ 
+ if test $VERBOSE -gt 0
+ then echo fixincludes is done ; fi
+ 
+ # # # # # # # # # # # # # # # # # # # # #
+ #
+ # End of for INPUT directories
+ #
+ done
+ #
+ # # # # # # # # # # # # # # # # # # # # #
diff -Nrcpad gcc-3.4.3/fixincludes/fixincl.c gcc-4.0.0/fixincludes/fixincl.c
*** gcc-3.4.3/fixincludes/fixincl.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/fixincl.c	Wed Nov 17 05:06:41 2004
***************
*** 0 ****
--- 1,1420 ----
+ /* Install modified versions of certain ANSI-incompatible system header
+    files which are fixed to work correctly with ANSI C and placed in a
+    directory that GCC will search.
+ 
+    Copyright (C) 1997, 1998, 1999, 2000, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GCC.
+ 
+ GCC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GCC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING.  If not, write to
+ the Free Software Foundation, 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.  */
+ 
+ #include "fixlib.h"
+ 
+ #include <sys/stat.h>
+ 
+ #if defined( HAVE_MMAP_FILE )
+ #include <sys/mman.h>
+ #define  BAD_ADDR ((void*)-1)
+ #endif
+ 
+ #ifndef SEPARATE_FIX_PROC
+ #include "server.h"
+ #endif
+ 
+ /*  The contents of this string are not very important.  It is mostly
+     just used as part of the "I am alive and working" test.  */
+ 
+ static const char program_id[] = "fixincl version 1.1";
+ 
+ /*  This format will be used at the start of every generated file */
+ 
+ static const char z_std_preamble[] =
+ "/*  DO NOT EDIT THIS FILE.\n\n\
+     It has been auto-edited by fixincludes from:\n\n\
+ \t\"%s/%s\"\n\n\
+     This had to be done to correct non-standard usages in the\n\
+     original, manufacturer supplied header file.  */\n\n";
+ 
+ int find_base_len = 0;
+ 
+ typedef enum {
+   VERB_SILENT = 0,
+   VERB_FIXES,
+   VERB_APPLIES,
+   VERB_PROGRESS,
+   VERB_TESTS,
+   VERB_EVERYTHING
+ } te_verbose;
+ 
+ te_verbose  verbose_level = VERB_PROGRESS;
+ int have_tty = 0;
+ 
+ #define VLEVEL(l)  ((unsigned int) verbose_level >= (unsigned int) l)
+ #define NOT_SILENT VLEVEL(VERB_FIXES)
+ 
+ pid_t process_chain_head = (pid_t) -1;
+ 
+ char*  pz_curr_file;  /*  name of the current file under test/fix  */
+ char*  pz_curr_data;  /*  original contents of that file  */
+ char*  pz_temp_file;  /*  for DOS, a place to stash the temporary
+                           fixed data between system(3) calls  */
+ t_bool curr_data_mapped;
+ int    data_map_fd;
+ size_t data_map_size;
+ size_t ttl_data_size = 0;
+ 
+ #ifdef DO_STATS
+ int process_ct = 0;
+ int apply_ct = 0;
+ int fixed_ct = 0;
+ int altered_ct = 0;
+ #endif /* DO_STATS */
+ 
+ const char incl_quote_pat[] = "^[ \t]*#[ \t]*include[ \t]*\"[^/]";
+ tSCC z_fork_err[] = "Error %d (%s) starting filter process for %s\n";
+ regex_t incl_quote_re;
+ 
+ static void do_version (void) ATTRIBUTE_NORETURN;
+ char *load_file (const char *);
+ void run_compiles (void);
+ void initialize (int argc, char** argv);
+ void process (void);
+ 
+ /*  External Source Code */
+ 
+ #include "fixincl.x"
+ 
+ /* * * * * * * * * * * * * * * * * * *
+  *
+  *  MAIN ROUTINE
+  */
+ extern int main (int, char **);
+ int
+ main (int argc, char** argv)
+ {
+   char *file_name_buf;
+ 
+   initialize ( argc, argv );
+ 
+   have_tty = isatty (fileno (stderr));
+ 
+   /* Before anything else, ensure we can allocate our file name buffer. */
+   file_name_buf = load_file_data (stdin);
+ 
+   /*  Because of the way server shells work, you have to keep stdin, out
+       and err open so that the proper input file does not get closed
+       by accident  */
+ 
+   freopen ("/dev/null", "r", stdin);
+ 
+   if (file_name_buf == (char *) NULL)
+     {
+       fputs ("No file names listed for fixing\n", stderr);
+       exit (EXIT_FAILURE);
+     }
+ 
+   for (;;)
+     {
+       char* pz_end;
+ 
+       /*  skip to start of name, past any "./" prefixes */
+ 
+       while (ISSPACE (*file_name_buf))  file_name_buf++;
+       while ((file_name_buf[0] == '.') && (file_name_buf[1] == '/'))
+         file_name_buf += 2;
+ 
+       /*  Check for end of list  */
+ 
+       if (*file_name_buf == NUL)
+         break;
+ 
+       /*  Set global file name pointer and find end of name */
+ 
+       pz_curr_file = file_name_buf;
+       pz_end = strchr( pz_curr_file, '\n' );
+       if (pz_end == (char*)NULL)
+         pz_end = file_name_buf = pz_curr_file + strlen (pz_curr_file);
+       else
+         file_name_buf = pz_end + 1;
+ 
+       while ((pz_end > pz_curr_file) && ISSPACE( pz_end[-1]))  pz_end--;
+ 
+       /*  IF no name is found (blank line) or comment marker, skip line  */
+ 
+       if ((pz_curr_file == pz_end) || (*pz_curr_file == '#'))
+         continue;
+       *pz_end = NUL;
+ 
+       process ();
+     } /*  for (;;) */
+ 
+ #ifdef DO_STATS
+   if (VLEVEL( VERB_PROGRESS )) {
+     tSCC zFmt[] =
+       "\
+ Processed %5d files containing %d bytes    \n\
+ Applying  %5d fixes to %d files\n\
+ Altering  %5d of them\n";
+ 
+     fprintf (stderr, zFmt, process_ct, ttl_data_size, apply_ct,
+              fixed_ct, altered_ct);
+   }
+ #endif /* DO_STATS */
+ 
+ # ifdef SEPARATE_FIX_PROC
+   unlink( pz_temp_file );
+ # endif
+   exit (EXIT_SUCCESS);
+ }
+ 
+ 
+ static void
+ do_version (void)
+ {
+   static const char zFmt[] = "echo '%s'";
+   char zBuf[ 1024 ];
+ 
+   /* The 'version' option is really used to test that:
+      1.  The program loads correctly (no missing libraries)
+      2.  that we can compile all the regular expressions.
+      3.  we can correctly run our server shell process
+   */
+   run_compiles ();
+   sprintf (zBuf, zFmt, program_id);
+ #ifndef SEPARATE_FIX_PROC
+   puts (zBuf + 5);
+   exit (strcmp (run_shell (zBuf), program_id));
+ #else
+   exit (system (zBuf));
+ #endif
+ }
+ 
+ /* * * * * * * * * * * * */
+ 
+ void
+ initialize ( int argc, char** argv )
+ {
+   xmalloc_set_program_name (argv[0]);
+ 
+   switch (argc)
+     {
+     case 1:
+       break;
+ 
+     case 2:
+       if (strcmp (argv[1], "-v") == 0)
+         do_version ();
+       if (freopen (argv[1], "r", stdin) == (FILE*)NULL)
+         {
+           fprintf (stderr, "Error %d (%s) reopening %s as stdin\n",
+                    errno, xstrerror (errno), argv[1] );
+           exit (EXIT_FAILURE);
+         }
+       break;
+ 
+     default:
+       fputs ("fixincl ERROR:  too many command line arguments\n", stderr);
+       exit (EXIT_FAILURE);
+     }
+ 
+ #ifdef SIGCHLD
+   /* We *MUST* set SIGCHLD to SIG_DFL so that the wait4() call will
+      receive the signal.  A different setting is inheritable */
+   signal (SIGCHLD, SIG_DFL);
+ #endif
+ 
+   initialize_opts ();
+ 
+   if (ISDIGIT ( *pz_verbose ))
+     verbose_level = (te_verbose)atoi( pz_verbose );
+   else
+     switch (*pz_verbose) {
+     case 's':
+     case 'S':
+       verbose_level = VERB_SILENT;     break;
+ 
+     case 'f':
+     case 'F':
+       verbose_level = VERB_FIXES;      break;
+ 
+     case 'a':
+     case 'A':
+       verbose_level = VERB_APPLIES;    break;
+ 
+     default:
+     case 'p':
+     case 'P':
+       verbose_level = VERB_PROGRESS;   break;
+ 
+     case 't':
+     case 'T':
+       verbose_level = VERB_TESTS;      break;
+ 
+     case 'e':
+     case 'E':
+       verbose_level = VERB_EVERYTHING; break;
+     }
+   if (verbose_level >= VERB_EVERYTHING) {
+     verbose_level = VERB_EVERYTHING;
+     fputs ("fixinc verbosity:  EVERYTHING\n", stderr);
+   }
+   while ((pz_find_base[0] == '.') && (pz_find_base[1] == '/'))
+     pz_find_base += 2;
+   if ((pz_find_base[0] != '.') || (pz_find_base[1] != NUL))
+     find_base_len = strlen( pz_find_base );
+ 
+   /*  Compile all the regular expressions now.
+       That way, it is done only once for the whole run.
+       */
+   run_compiles ();
+ 
+ # ifdef SEPARATE_FIX_PROC
+   /* NULL as the first argument to `tempnam' causes it to DTRT
+      wrt the temporary directory where the file will be created.  */
+   pz_temp_file = tempnam( NULL, "fxinc" );
+ # endif
+ 
+   signal (SIGQUIT, SIG_IGN);
+   signal (SIGIOT,  SIG_IGN);
+   signal (SIGPIPE, SIG_IGN);
+   signal (SIGALRM, SIG_IGN);
+   signal (SIGTERM, SIG_IGN);
+ }
+ 
+ /* * * * * * * * * * * * *
+ 
+    load_file loads all the contents of a file into malloc-ed memory.
+    Its argument is the name of the file to read in; the returned
+    result is the NUL terminated contents of the file.  The file
+    is presumed to be an ASCII text file containing no NULs.  */
+ char *
+ load_file ( const char* fname )
+ {
+   struct stat stbf;
+   char* res;
+ 
+   if (stat (fname, &stbf) != 0)
+     {
+       if (NOT_SILENT)
+         fprintf (stderr, "error %d (%s) stat-ing %s\n",
+                  errno, xstrerror (errno), fname );
+       return (char *) NULL;
+     }
+   if (stbf.st_size == 0)
+     return (char*)NULL;
+ 
+   /*  Make the data map size one larger than the file size for documentation
+       purposes.  Truth is that there will be a following NUL character if
+       the file size is not a multiple of the page size.  If it is a multiple,
+       then this adjustment sometimes fails anyway.  */
+   data_map_size = stbf.st_size+1;
+   data_map_fd   = open (fname, O_RDONLY);
+   ttl_data_size += data_map_size-1;
+ 
+   if (data_map_fd < 0)
+     {
+       if (NOT_SILENT)
+         fprintf (stderr, "error %d (%s) opening %s for read\n",
+                  errno, xstrerror (errno), fname);
+       return (char*)NULL;
+     }
+ 
+ #ifdef HAVE_MMAP_FILE
+   curr_data_mapped = BOOL_TRUE;
+ 
+   /*  IF the file size is a multiple of the page size,
+       THEN sometimes you will seg fault trying to access a trailing byte */
+   if ((stbf.st_size & (getpagesize()-1)) == 0)
+     res = (char*)BAD_ADDR;
+   else
+     res = (char*)mmap ((void*)NULL, data_map_size, PROT_READ,
+                        MAP_PRIVATE, data_map_fd, 0);
+   if (res == (char*)BAD_ADDR)
+ #endif
+     {
+       FILE* fp = fdopen (data_map_fd, "r");
+       curr_data_mapped = BOOL_FALSE;
+       res = load_file_data (fp);
+       fclose (fp);
+     }
+ 
+   return res;
+ }
+ 
+ static int
+ machine_matches( tFixDesc* p_fixd )
+         {
+ # ifndef SEPARATE_FIX_PROC
+           tSCC case_fmt[] = "case %s in\n";     /*  9 bytes, plus string */
+           tSCC esac_fmt[] =
+                " )\n    echo %s ;;\n* ) echo %s ;;\nesac";/*  4 bytes */
+           tSCC skip[] = "skip";                 /*  4 bytes */
+           tSCC run[] = "run";                   /*  3 bytes */
+           /* total bytes to add to machine sum:    49 - see fixincl.tpl */
+ 
+           const char **papz_machs = p_fixd->papz_machs;
+           char *pz;
+           const char *pz_sep = "";
+           tCC *pz_if_true;
+           tCC *pz_if_false;
+           char cmd_buf[ MACH_LIST_SIZE_LIMIT ]; /* size lim from fixincl.tpl */
+ 
+           /* Start the case statement */
+ 
+           sprintf (cmd_buf, case_fmt, pz_machine);
+           pz = cmd_buf + strlen (cmd_buf);
+ 
+           /*  Determine if a match means to apply the fix or not apply it */
+ 
+           if (p_fixd->fd_flags & FD_MACH_IFNOT)
+             {
+               pz_if_true  = skip;
+               pz_if_false = run;
+             }
+           else
+             {
+               pz_if_true  = run;
+               pz_if_false = skip;
+             }
+ 
+           /*  Emit all the machine names.  If there are more than one,
+               then we will insert " | \\\n" between the names  */
+ 
+           for (;;)
+             {
+               const char* pz_mach = *(papz_machs++);
+ 
+               if (pz_mach == (const char*) NULL)
+                 break;
+               sprintf (pz, "%s%s", pz_sep, pz_mach);
+               pz += strlen (pz);
+               pz_sep = " | \\\n";
+             }
+ 
+           /* Now emit the match and not-match actions and the esac */
+ 
+           sprintf (pz, esac_fmt, pz_if_true, pz_if_false);
+ 
+           /*  Run the script.
+               The result will start either with 's' or 'r'.  */
+ 
+           {
+             int skip;
+             pz = run_shell (cmd_buf);
+             skip = (*pz == 's');
+             free ( (void*)pz );
+             if (skip)
+               {
+                 p_fixd->fd_flags |= FD_SKIP_TEST;
+ 		return BOOL_FALSE;
+ 	      }
+ 	  }
+ 
+   return BOOL_TRUE;
+ # else /* is SEPARATE_FIX_PROC */
+   const char **papz_machs = p_fixd->papz_machs;
+   int invert = (p_fixd->fd_flags & FD_MACH_IFNOT) != 0;
+   for (;;)
+     {
+       const char* pz_mach = *(papz_machs++);
+ 
+       if (pz_mach == (const char*) NULL)
+         break;
+       if (strstr (pz_mach, "dos") != NULL && !invert)
+ 	return BOOL_TRUE;
+     }
+ 
+   p_fixd->fd_flags |= FD_SKIP_TEST;
+   return BOOL_FALSE;
+ # endif
+ }
+ 
+ /* * * * * * * * * * * * *
+ 
+    run_compiles   run all the regexp compiles for all the fixes once.
+    */
+ void
+ run_compiles (void)
+ {
+   tFixDesc *p_fixd = fixDescList;
+   int fix_ct = FIX_COUNT;
+   regex_t *p_re = xcalloc (REGEX_COUNT, sizeof (regex_t));
+ 
+   /*  Make sure compile_re does not stumble across invalid data */
+ 
+   memset (&incl_quote_re, '\0', sizeof (regex_t));
+ 
+   compile_re (incl_quote_pat, &incl_quote_re, 1,
+               "quoted include", "run_compiles");
+ 
+   /*  Allow machine name tests to be ignored (testing, mainly) */
+ 
+   if (pz_machine && ((*pz_machine == '\0') || (*pz_machine == '*')))
+     pz_machine = (char*)NULL;
+ 
+   /* FOR every fixup, ...  */
+   do
+     {
+       tTestDesc *p_test = p_fixd->p_test_desc;
+       int test_ct = p_fixd->test_ct;
+ 
+       /*  IF the machine type pointer is not NULL (we are not in test mode)
+              AND this test is for or not done on particular machines
+           THEN ...   */
+ 
+       if (  (pz_machine != NULL)
+          && (p_fixd->papz_machs != (const char**) NULL)
+          && ! machine_matches (p_fixd) )
+         continue;
+ 
+       /* FOR every test for the fixup, ...  */
+ 
+       while (--test_ct >= 0)
+         {
+           switch (p_test->type)
+             {
+             case TT_EGREP:
+             case TT_NEGREP:
+               p_test->p_test_regex = p_re++;
+               compile_re (p_test->pz_test_text, p_test->p_test_regex, 0,
+                           "select test", p_fixd->fix_name);
+             default: break;
+             }
+           p_test++;
+         }
+     }
+   while (p_fixd++, --fix_ct > 0);
+ }
+ 
+ 
+ /* * * * * * * * * * * * *
+ 
+    create_file  Create the output modified file.
+    Input:    the name of the file to create
+    Returns:  a file pointer to the new, open file  */
+ 
+ #if defined(S_IRUSR) && defined(S_IWUSR) && \
+     defined(S_IRGRP) && defined(S_IROTH)
+ 
+ #   define S_IRALL (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)
+ #else
+ #   define S_IRALL 0644
+ #endif
+ 
+ #if defined(S_IRWXU) && defined(S_IRGRP) && defined(S_IXGRP) && \
+     defined(S_IROTH) && defined(S_IXOTH)
+ 
+ #   define S_DIRALL (S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH)
+ #else
+ #   define S_DIRALL 0755
+ #endif
+ 
+ 
+ static FILE *
+ create_file (void)
+ {
+   int fd;
+   FILE *pf;
+   char fname[MAXPATHLEN];
+ 
+   sprintf (fname, "%s/%s", pz_dest_dir, pz_curr_file + find_base_len);
+ 
+   fd = open (fname, O_WRONLY | O_CREAT | O_TRUNC, S_IRALL);
+ 
+   /*  We may need to create the directories needed... */
+   if ((fd < 0) && (errno == ENOENT))
+     {
+       char *pz_dir = strchr (fname + 1, '/');
+       struct stat stbf;
+ 
+       while (pz_dir != (char *) NULL)
+         {
+           *pz_dir = NUL;
+           if (stat (fname, &stbf) < 0)
+             {
+ #ifdef _WIN32
+               mkdir (fname);
+ #else
+               mkdir (fname, S_IFDIR | S_DIRALL);
+ #endif
+             }
+ 
+           *pz_dir = '/';
+           pz_dir = strchr (pz_dir + 1, '/');
+         }
+ 
+       /*  Now, lets try the open again... */
+       fd = open (fname, O_WRONLY | O_CREAT | O_TRUNC, S_IRALL);
+     }
+   if (fd < 0)
+     {
+       fprintf (stderr, "Error %d (%s) creating %s\n",
+                errno, xstrerror (errno), fname);
+       exit (EXIT_FAILURE);
+     }
+   if (NOT_SILENT)
+     fprintf (stderr, "Fixed:  %s\n", pz_curr_file);
+   pf = fdopen (fd, "w");
+ 
+   /*
+    *  IF pz_machine is NULL, then we are in some sort of test mode.
+    *  Do not insert the current directory name.  Use a constant string.
+    */
+   fprintf (pf, z_std_preamble,
+            (pz_machine == NULL)
+            ? "fixinc/tests/inc"
+            : pz_input_dir,
+            pz_curr_file);
+ 
+   return pf;
+ }
+ 
+ 
+ /* * * * * * * * * * * * *
+ 
+   test_test   make sure a shell-style test expression passes.
+   Input:  a pointer to the descriptor of the test to run and
+           the name of the file that we might want to fix
+   Result: APPLY_FIX or SKIP_FIX, depending on the result of the
+           shell script we run.  */
+ #ifndef SEPARATE_FIX_PROC
+ static int
+ test_test (tTestDesc* p_test, char* pz_test_file)
+ {
+   tSCC cmd_fmt[] =
+ "file=%s\n\
+ if ( test %s ) > /dev/null 2>&1\n\
+ then echo TRUE\n\
+ else echo FALSE\n\
+ fi";
+ 
+   char *pz_res;
+   int res;
+ 
+   static char cmd_buf[4096];
+ 
+   sprintf (cmd_buf, cmd_fmt, pz_test_file, p_test->pz_test_text);
+   pz_res = run_shell (cmd_buf);
+ 
+   switch (*pz_res) {
+   case 'T':
+     res = APPLY_FIX;
+     break;
+ 
+   case 'F':
+     res = SKIP_FIX;
+     break;
+ 
+   default:
+     fprintf (stderr, "Script yielded bogus result of `%s':\n%s\n\n",
+              pz_res, cmd_buf );
+     res = SKIP_FIX;
+   }
+ 
+   free ((void *) pz_res);
+   return res;
+ }
+ #else
+ /*
+  *  IF we are in MS-DOS land, then whatever shell-type test is required
+  *  will, by definition, fail
+  */
+ #define test_test(t,tf)  SKIP_FIX
+ #endif
+ 
+ /* * * * * * * * * * * * *
+ 
+   egrep_test   make sure an egrep expression is found in the file text.
+   Input:  a pointer to the descriptor of the test to run and
+           the pointer to the contents of the file under suspicion
+   Result: APPLY_FIX if the pattern is found, SKIP_FIX otherwise
+ 
+   The caller may choose to reverse meaning if the sense of the test
+   is inverted.  */
+ 
+ static int
+ egrep_test (char* pz_data, tTestDesc* p_test)
+ {
+ #ifdef DEBUG
+   if (p_test->p_test_regex == 0)
+     fprintf (stderr, "fixincl ERROR RE not compiled:  `%s'\n",
+              p_test->pz_test_text);
+ #endif
+   if (xregexec (p_test->p_test_regex, pz_data, 0, 0, 0) == 0)
+     return APPLY_FIX;
+   return SKIP_FIX;
+ }
+ 
+ 
+ /* * * * * * * * * * * * *
+ 
+   quoted_file_exists  Make sure that a file exists before we emit
+   the file name.  If we emit the name, our invoking shell will try
+   to copy a non-existing file into the destination directory.  */
+ 
+ static int
+ quoted_file_exists (const char* pz_src_path,
+                     const char* pz_file_path, 
+                     const char* pz_file)
+ {
+   char z[ MAXPATHLEN ];
+   char* pz;
+   sprintf (z, "%s/%s/", pz_src_path, pz_file_path);
+   pz = z + strlen ( z );
+ 
+   for (;;) {
+     char ch = *pz_file++;
+     if (! ISGRAPH( ch ))
+       return 0;
+     if (ch == '"')
+       break;
+     *pz++ = ch;
+   }
+   *pz = '\0';
+   {
+     struct stat s;
+     if (stat (z, &s) != 0)
+       return 0;
+     return S_ISREG( s.st_mode );
+   }
+ }
+ 
+ 
+ /* * * * * * * * * * * * *
+  *
+    extract_quoted_files
+ 
+    The syntax, `#include "file.h"' specifies that the compiler is to
+    search the local directory of the current file before the include
+    list.  Consequently, if we have modified a header and stored it in
+    another directory, any files that are included by that modified
+    file in that fashion must also be copied into this new directory.
+    This routine finds those flavors of #include and for each one found
+    emits a triple of:
+ 
+     1.  source directory of the original file
+     2.  the relative path file name of the #includ-ed file
+     3.  the full destination path for this file
+ 
+    Input:  the text of the file, the file name and a pointer to the
+            match list where the match information was stored.
+    Result: internally nothing.  The results are written to stdout
+            for interpretation by the invoking shell  */
+ 
+ 
+ static void
+ extract_quoted_files (char* pz_data, 
+                       const char* pz_fixed_file,
+                       regmatch_t* p_re_match)
+ {
+   char *pz_dir_end = strrchr (pz_fixed_file, '/');
+   char *pz_incl_quot = pz_data;
+ 
+   if (VLEVEL( VERB_APPLIES ))
+     fprintf (stderr, "Quoted includes in %s\n", pz_fixed_file);
+ 
+   /*  Set "pz_fixed_file" to point to the containing subdirectory of the source
+       If there is none, then it is in our current directory, ".".   */
+ 
+   if (pz_dir_end == (char *) NULL)
+     pz_fixed_file = ".";
+   else
+     *pz_dir_end = '\0';
+ 
+   for (;;)
+     {
+       pz_incl_quot += p_re_match->rm_so;
+ 
+       /*  Skip forward to the included file name */
+       while (*pz_incl_quot != '"')
+         pz_incl_quot++;
+ 
+       if (quoted_file_exists (pz_src_dir, pz_fixed_file, pz_incl_quot))
+         {
+           /* Print the source directory and the subdirectory
+              of the file in question.  */
+           printf ("%s  %s/", pz_src_dir, pz_fixed_file);
+           pz_dir_end = pz_incl_quot;
+ 
+           /* Append to the directory the relative path of the desired file */
+           while (*pz_incl_quot != '"')
+             putc (*pz_incl_quot++, stdout);
+ 
+           /* Now print the destination directory appended with the
+              relative path of the desired file */
+           printf ("  %s/%s/", pz_dest_dir, pz_fixed_file);
+           while (*pz_dir_end != '"')
+             putc (*pz_dir_end++, stdout);
+ 
+           /* End of entry */
+           putc ('\n', stdout);
+         }
+ 
+       /* Find the next entry */
+       if (xregexec (&incl_quote_re, pz_incl_quot, 1, p_re_match, 0) != 0)
+         break;
+     }
+ }
+ 
+ 
+ /* * * * * * * * * * * * *
+ 
+     Somebody wrote a *_fix subroutine that we must call.
+     */
+ #ifndef SEPARATE_FIX_PROC
+ static int
+ internal_fix (int read_fd, tFixDesc* p_fixd)
+ {
+   int fd[2];
+ 
+   if (pipe( fd ) != 0)
+     {
+       fprintf (stderr, "Error %d on pipe(2) call\n", errno );
+       exit (EXIT_FAILURE);
+     }
+ 
+   for (;;)
+     {
+       pid_t childid = fork();
+ 
+       switch (childid)
+         {
+         case -1:
+           break;
+ 
+         case 0:
+           close (fd[0]);
+           goto do_child_task;
+ 
+         default:
+           /*
+            *  Parent process
+            */
+           close (read_fd);
+           close (fd[1]);
+           return fd[0];
+         }
+ 
+       /*
+        *  Parent in error
+        */
+       fprintf (stderr, z_fork_err, errno, xstrerror (errno),
+                p_fixd->fix_name);
+       {
+         static int failCt = 0;
+         if ((errno != EAGAIN) || (++failCt > 10))
+           exit (EXIT_FAILURE);
+         sleep (1);
+       }
+     } do_child_task:;
+ 
+   /*
+    *  Close our current stdin and stdout
+    */
+   close (STDIN_FILENO);
+   close (STDOUT_FILENO);
+   UNLOAD_DATA();
+ 
+   /*
+    *  Make the fd passed in the stdin, and the write end of
+    *  the new pipe become the stdout.
+    */
+   dup2 (fd[1], STDOUT_FILENO);
+   dup2 (read_fd, STDIN_FILENO);
+ 
+   apply_fix (p_fixd, pz_curr_file);
+   exit (0);
+ }
+ #endif /* !SEPARATE_FIX_PROC */
+ 
+ 
+ #ifdef SEPARATE_FIX_PROC
+ static void
+ fix_with_system (tFixDesc* p_fixd,
+                  tCC* pz_fix_file,
+                  tCC* pz_file_source,
+                  tCC* pz_temp_file)
+ {
+   char*  pz_cmd;
+   char*  pz_scan;
+   size_t argsize;
+ 
+   if (p_fixd->fd_flags & FD_SUBROUTINE)
+     {
+       static const char z_applyfix_prog[] =
+ 	"/../fixincludes/applyfix" EXE_EXT;
+ 
+       struct stat buf;
+       argsize = 32
+               + strlen (pz_orig_dir)
+               + sizeof (z_applyfix_prog)
+               + strlen (pz_fix_file)
+               + strlen (pz_file_source)
+               + strlen (pz_temp_file);
+ 
+       /* Allocate something sure to be big enough for our purposes */
+       pz_cmd = xmalloc (argsize);
+       strcpy (pz_cmd, pz_orig_dir);
+       pz_scan = pz_cmd + strlen (pz_orig_dir);
+ 
+       strcpy (pz_scan, z_applyfix_prog);
+ 
+       /* IF we can't find the "applyfix" executable file at the first guess,
+ 	 try one level higher up  */
+       if (stat (pz_cmd, &buf) == -1)
+ 	{
+ 	  strcpy (pz_scan, "/..");
+ 	  strcpy (pz_scan+3, z_applyfix_prog);
+ 	}
+ 
+       pz_scan += strlen (pz_scan);
+ 
+       /*
+        *  Now add the fix number and file names that may be needed
+        */
+       sprintf (pz_scan, " %ld '%s' '%s' '%s'", p_fixd - fixDescList,
+ 	       pz_fix_file, pz_file_source, pz_temp_file);
+     }
+   else /* NOT an "internal" fix: */
+     {
+       size_t parg_size;
+ #ifdef __MSDOS__
+       /* Don't use the "src > dstX; rm -f dst; mv -f dstX dst" trick:
+          dst is a temporary file anyway, so we know there's no other
+          file by that name; and DOS's system(3) doesn't mind to
+          clobber existing file in redirection.  Besides, with DOS 8+3
+          limited file namespace, we can easily lose if dst already has
+          an extension that is 3 or more characters long.
+ 
+          I do not think the 8+3 issue is relevant because all the files
+          we operate on are named "*.h", making 8+2 adequate.  Anyway,
+          the following bizarre use of 'cat' only works on DOS boxes.
+          It causes the file to be dropped into a temporary file for
+          'cat' to read (pipes do not work on DOS).  */
+       tSCC   z_cmd_fmt[] = " '%s' | cat > '%s'";
+ #else
+       /* Don't use positional formatting arguments because some lame-o
+          implementations cannot cope  :-(.  */
+       tSCC   z_cmd_fmt[] = " %s > %sX ; rm -f %s; mv -f %sX %s";
+ #endif
+       tCC**  ppArgs = p_fixd->patch_args;
+ 
+       argsize = sizeof( z_cmd_fmt ) + strlen( pz_temp_file )
+               + strlen( pz_file_source );
+       parg_size = argsize;
+       
+ 
+       /*
+        *  Compute the size of the command line.  Add lotsa extra space
+        *  because some of the args to sed use lotsa single quotes.
+        *  (This requires three extra bytes per quote.  Here we allow
+        *  for up to 8 single quotes for each argument, including the
+        *  command name "sed" itself.  Nobody will *ever* need more. :)
+        */
+       for (;;)
+         {
+           tCC* p_arg = *(ppArgs++);
+           if (p_arg == NULL)
+             break;
+           argsize += 24 + strlen( p_arg );
+         }
+ 
+       /* Estimated buffer size we will need.  */
+       pz_scan = pz_cmd = xmalloc (argsize);
+       /* How much of it do we allot to the program name and its
+          arguments.  */
+       parg_size = argsize - parg_size;
+ 
+       ppArgs = p_fixd->patch_args;
+ 
+       /*
+        *  Copy the program name, unquoted
+        */
+       {
+         tCC*   pArg = *(ppArgs++);
+         for (;;)
+           {
+             char ch = *(pArg++);
+             if (ch == NUL)
+               break;
+             *(pz_scan++) = ch;
+           }
+       }
+ 
+       /*
+        *  Copy the program arguments, quoted
+        */
+       for (;;)
+         {
+           tCC*   pArg = *(ppArgs++);
+ 	  char*  pz_scan_save;
+           if (pArg == NULL)
+             break;
+           *(pz_scan++) = ' ';
+           pz_scan = make_raw_shell_str( pz_scan_save = pz_scan, pArg,
+ 					parg_size - (pz_scan - pz_cmd) );
+ 	  /*
+ 	   *  Make sure we don't overflow the buffer due to sloppy
+ 	   *  size estimation.
+ 	   */
+ 	  while (pz_scan == (char*)NULL)
+ 	    {
+ 	      size_t already_filled = pz_scan_save - pz_cmd;
+ 	      pz_cmd = xrealloc (pz_cmd, argsize += 100);
+ 	      pz_scan_save = pz_scan = pz_cmd + already_filled;
+ 	      parg_size += 100;
+ 	      pz_scan = make_raw_shell_str( pz_scan, pArg,
+ 					    parg_size - (pz_scan - pz_cmd) );
+ 	    }
+         }
+ 
+       /*
+        *  add the file machinations.
+        */
+ #ifdef __MSDOS__
+       sprintf (pz_scan, z_cmd_fmt, pz_file_source, pz_temp_file );
+ #else
+       sprintf (pz_scan, z_cmd_fmt, pz_file_source, pz_temp_file,
+                pz_temp_file, pz_temp_file, pz_temp_file);
+ #endif
+     }
+   system( pz_cmd );
+   free( (void*)pz_cmd );
+ }
+ 
+ /* * * * * * * * * * * * *
+ 
+     This loop should only cycle for 1/2 of one loop.
+     "chain_open" starts a process that uses "read_fd" as
+     its stdin and returns the new fd this process will use
+     for stdout.  */
+ 
+ #else /* is *NOT* SEPARATE_FIX_PROC */
+ static int
+ start_fixer (int read_fd, tFixDesc* p_fixd, char* pz_fix_file)
+ {
+   tCC* pz_cmd_save;
+   char* pz_cmd;
+ 
+   if ((p_fixd->fd_flags & FD_SUBROUTINE) != 0)
+     return internal_fix (read_fd, p_fixd);
+ 
+   if ((p_fixd->fd_flags & FD_SHELL_SCRIPT) == 0)
+     {
+       pz_cmd = NULL;
+       pz_cmd_save = NULL;
+     }
+   else
+     {
+       tSCC z_cmd_fmt[] = "file='%s'\n%s";
+       pz_cmd = xmalloc (strlen (p_fixd->patch_args[2])
+ 			+ sizeof (z_cmd_fmt) + strlen (pz_fix_file));
+       sprintf (pz_cmd, z_cmd_fmt, pz_fix_file, p_fixd->patch_args[2]);
+       pz_cmd_save = p_fixd->patch_args[2];
+       p_fixd->patch_args[2] = pz_cmd;
+     }
+ 
+   /*  Start a fix process, handing off the  previous read fd for its
+       stdin and getting a new fd that reads from the fix process' stdout.
+       We normally will not loop, but we will up to 10 times if we keep
+       getting "EAGAIN" errors.
+ 
+       */
+   for (;;)
+     {
+       static int failCt = 0;
+       int fd;
+ 
+       fd = chain_open (read_fd,
+                        (tCC **) p_fixd->patch_args,
+                        (process_chain_head == -1)
+                        ? &process_chain_head : (pid_t *) NULL);
+ 
+       if (fd != -1)
+         {
+           read_fd = fd;
+           break;
+         }
+ 
+       fprintf (stderr, z_fork_err, errno, xstrerror (errno),
+                p_fixd->fix_name);
+ 
+       if ((errno != EAGAIN) || (++failCt > 10))
+         exit (EXIT_FAILURE);
+       sleep (1);
+     }
+ 
+   /*  IF we allocated a shell script command,
+       THEN free it and restore the command format to the fix description */
+   if (pz_cmd != (char*)NULL)
+     {
+       free ((void*)pz_cmd);
+       p_fixd->patch_args[2] = pz_cmd_save;
+     }
+ 
+   return read_fd;
+ }
+ #endif
+ 
+ 
+ /* * * * * * * * * * * * *
+ 
+    Process the potential fixes for a particular include file.
+    Input:  the original text of the file and the file's name
+    Result: none.  A new file may or may not be created.  */
+ 
+ static t_bool
+ fix_applies (tFixDesc* p_fixd)
+ {
+   const char *pz_fname = pz_curr_file;
+   const char *pz_scan = p_fixd->file_list;
+   int test_ct;
+   tTestDesc *p_test;
+ 
+ # ifdef SEPARATE_FIX_PROC
+   /*
+    *  There is only one fix that uses a shell script as of this writing.
+    *  I hope to nuke it anyway, it does not apply to DOS and it would
+    *  be painful to implement.  Therefore, no "shell" fixes for DOS.
+    */
+   if (p_fixd->fd_flags & (FD_SHELL_SCRIPT | FD_SKIP_TEST))
+     return BOOL_FALSE;
+ # else
+   if (p_fixd->fd_flags & FD_SKIP_TEST)
+     return BOOL_FALSE;
+ # endif
+ 
+   /*  IF there is a file name restriction,
+       THEN ensure the current file name matches one in the pattern  */
+ 
+   if (pz_scan != (char *) NULL)
+     {
+       size_t name_len;
+ 
+       while ((pz_fname[0] == '.') && (pz_fname[1] == '/'))
+         pz_fname += 2;
+       name_len = strlen (pz_fname);
+ 
+       for (;;)
+         {
+           pz_scan = strstr (pz_scan + 1, pz_fname);
+           /*  IF we can't match the string at all,
+               THEN bail  */
+           if (pz_scan == (char *) NULL)
+             return BOOL_FALSE;
+ 
+           /*  IF the match is surrounded by the '|' markers,
+               THEN we found a full match -- time to run the tests  */
+ 
+           if ((pz_scan[-1] == '|') && (pz_scan[name_len] == '|'))
+             break;
+         }
+     }
+ 
+   /*  FOR each test, see if it fails.
+       IF it does fail, then we go on to the next test */
+ 
+   for (p_test = p_fixd->p_test_desc, test_ct = p_fixd->test_ct;
+        test_ct-- > 0;
+        p_test++)
+     {
+       switch (p_test->type)
+         {
+         case TT_TEST:
+           if (test_test (p_test, pz_curr_file) != APPLY_FIX) {
+ #ifdef DEBUG
+             if (VLEVEL( VERB_EVERYTHING ))
+               fprintf (stderr, z_failed, "TEST", p_fixd->fix_name,
+                        pz_fname, p_fixd->test_ct - test_ct);
+ #endif
+             return BOOL_FALSE;
+           }
+           break;
+ 
+         case TT_EGREP:
+           if (egrep_test (pz_curr_data, p_test) != APPLY_FIX) {
+ #ifdef DEBUG
+             if (VLEVEL( VERB_EVERYTHING ))
+               fprintf (stderr, z_failed, "EGREP", p_fixd->fix_name,
+                        pz_fname, p_fixd->test_ct - test_ct);
+ #endif
+             return BOOL_FALSE;
+           }
+           break;
+ 
+         case TT_NEGREP:
+           if (egrep_test (pz_curr_data, p_test) == APPLY_FIX) {
+ #ifdef DEBUG
+             if (VLEVEL( VERB_EVERYTHING ))
+               fprintf (stderr, z_failed, "NEGREP", p_fixd->fix_name,
+                        pz_fname, p_fixd->test_ct - test_ct);
+ #endif
+             /*  Negated sense  */
+             return BOOL_FALSE;
+           }
+           break;
+ 
+         case TT_FUNCTION:
+           if (run_test (p_test->pz_test_text, pz_curr_file, pz_curr_data)
+               != APPLY_FIX) {
+ #ifdef DEBUG
+             if (VLEVEL( VERB_EVERYTHING ))
+               fprintf (stderr, z_failed, "FTEST", p_fixd->fix_name,
+                        pz_fname, p_fixd->test_ct - test_ct);
+ #endif
+             return BOOL_FALSE;
+           }
+           break;
+         }
+     }
+ 
+   return BOOL_TRUE;
+ }
+ 
+ 
+ /* * * * * * * * * * * * *
+ 
+    Write out a replacement file  */
+ 
+ static void
+ write_replacement (tFixDesc* p_fixd)
+ {
+    const char* pz_text = p_fixd->patch_args[0];
+ 
+    if ((pz_text == (char*)NULL) || (*pz_text == NUL))
+      return;
+ 
+    {
+      FILE* out_fp = create_file ();
+      fputs (pz_text, out_fp);
+      fclose (out_fp);
+    }
+ }
+ 
+ 
+ /* * * * * * * * * * * * *
+ 
+     We have work to do.  Read back in the output
+     of the filtering chain.  Compare each byte as we read it with
+     the contents of the original file.  As soon as we find any
+     difference, we will create the output file, write out all
+     the matched text and then copy any remaining data from the
+     output of the filter chain.
+     */
+ static void
+ test_for_changes (int read_fd)
+ {
+   FILE *in_fp = fdopen (read_fd, "r");
+   FILE *out_fp = (FILE *) NULL;
+   unsigned char *pz_cmp = (unsigned char*)pz_curr_data;
+ 
+ #ifdef DO_STATS
+   fixed_ct++;
+ #endif
+   for (;;)
+     {
+       int ch;
+ 
+       ch = getc (in_fp);
+       if (ch == EOF)
+         break;
+       ch &= 0xFF; /* all bytes are 8 bits */
+ 
+       /*  IF we are emitting the output
+           THEN emit this character, too.
+       */
+       if (out_fp != (FILE *) NULL)
+         putc (ch, out_fp);
+ 
+       /*  ELSE if this character does not match the original,
+           THEN now is the time to start the output.
+       */
+       else if (ch != *pz_cmp)
+         {
+           out_fp = create_file ();
+ 
+ #ifdef DO_STATS
+           altered_ct++;
+ #endif
+           /*  IF there are matched data, write the matched part now. */
+           if ((char*)pz_cmp != pz_curr_data)
+             fwrite (pz_curr_data, (size_t)((char*)pz_cmp - pz_curr_data),
+ 					1, out_fp);
+ 
+           /*  Emit the current unmatching character */
+           putc (ch, out_fp);
+         }
+       else
+         /*  ELSE the character matches.  Advance the compare ptr */
+         pz_cmp++;
+     }
+ 
+   /*  IF we created the output file, ... */
+   if (out_fp != (FILE *) NULL)
+     {
+       regmatch_t match;
+ 
+       /* Close the file and see if we have to worry about
+          `#include "file.h"' constructs.  */
+       fclose (out_fp);
+       if (xregexec (&incl_quote_re, pz_curr_data, 1, &match, 0) == 0)
+         extract_quoted_files (pz_curr_data, pz_curr_file, &match);
+     }
+ 
+   fclose (in_fp);
+   close (read_fd);  /* probably redundant, but I'm paranoid */
+ }
+ 
+ 
+ /* * * * * * * * * * * * *
+ 
+    Process the potential fixes for a particular include file.
+    Input:  the original text of the file and the file's name
+    Result: none.  A new file may or may not be created.  */
+ 
+ void
+ process (void)
+ {
+   tFixDesc *p_fixd = fixDescList;
+   int todo_ct = FIX_COUNT;
+   int read_fd = -1;
+ # ifndef SEPARATE_FIX_PROC
+   int num_children = 0;
+ # else /* is SEPARATE_FIX_PROC */
+   char* pz_file_source = pz_curr_file;
+ # endif
+ 
+   if (access (pz_curr_file, R_OK) != 0)
+     {
+       int erno = errno;
+       fprintf (stderr, "Cannot access %s from %s\n\terror %d (%s)\n",
+                pz_curr_file, getcwd ((char *) NULL, MAXPATHLEN),
+                erno, xstrerror (erno));
+       return;
+     }
+ 
+   pz_curr_data = load_file (pz_curr_file);
+   if (pz_curr_data == (char *) NULL)
+     return;
+ 
+ #ifdef DO_STATS
+   process_ct++;
+ #endif
+   if (VLEVEL( VERB_PROGRESS ) && have_tty)
+     fprintf (stderr, "%6lu %-50s   \r",
+ 	     (unsigned long) data_map_size, pz_curr_file);
+ 
+ # ifndef SEPARATE_FIX_PROC
+   process_chain_head = NOPROCESS;
+ 
+   /* For every fix in our fix list, ...  */
+   for (; todo_ct > 0; p_fixd++, todo_ct--)
+     {
+       if (! fix_applies (p_fixd))
+         continue;
+ 
+       if (VLEVEL( VERB_APPLIES ))
+         fprintf (stderr, "Applying %-24s to %s\n",
+                  p_fixd->fix_name, pz_curr_file);
+ 
+       if (p_fixd->fd_flags & FD_REPLACEMENT)
+         {
+           write_replacement (p_fixd);
+           UNLOAD_DATA();
+           return;
+         }
+ 
+       /*  IF we do not have a read pointer,
+           THEN this is the first fix for the current file.
+           Open the source file.  That will be used as stdin for
+           the first fix.  Any subsequent fixes will use the
+           stdout descriptor of the previous fix for its stdin.  */
+ 
+       if (read_fd == -1)
+         {
+           read_fd = open (pz_curr_file, O_RDONLY);
+           if (read_fd < 0)
+             {
+               fprintf (stderr, "Error %d (%s) opening %s\n", errno,
+                        xstrerror (errno), pz_curr_file);
+               exit (EXIT_FAILURE);
+             }
+ 
+           /*  Ensure we do not get duplicate output */
+ 
+           fflush (stdout);
+         }
+ 
+       read_fd = start_fixer (read_fd, p_fixd, pz_curr_file);
+       num_children++;
+     }
+ 
+   /*  IF we have a read-back file descriptor,
+       THEN check for changes and write output if changed.   */
+ 
+   if (read_fd >= 0)
+     {
+       test_for_changes (read_fd);
+ #ifdef DO_STATS
+       apply_ct += num_children;
+ #endif
+       /* Wait for child processes created by chain_open()
+          to avoid leaving zombies.  */
+       do  {
+         wait ((int *) NULL);
+       } while (--num_children > 0);
+     }
+ 
+ # else /* is SEPARATE_FIX_PROC */
+ 
+   for (; todo_ct > 0; p_fixd++, todo_ct--)
+     {
+       if (! fix_applies (p_fixd))
+         continue;
+ 
+       if (VLEVEL( VERB_APPLIES ))
+         fprintf (stderr, "Applying %-24s to %s\n",
+                  p_fixd->fix_name, pz_curr_file);
+ 
+       if (p_fixd->fd_flags & FD_REPLACEMENT)
+         {
+           write_replacement (p_fixd);
+           UNLOAD_DATA();
+           return;
+         }
+       fix_with_system (p_fixd, pz_curr_file, pz_file_source, pz_temp_file);
+       pz_file_source = pz_temp_file;
+     }
+ 
+   read_fd = open (pz_temp_file, O_RDONLY);
+   if (read_fd < 0)
+     {
+       if (errno != ENOENT)
+         fprintf (stderr, "error %d (%s) opening output (%s) for read\n",
+                  errno, xstrerror (errno), pz_temp_file);
+     }
+   else
+     {
+       test_for_changes (read_fd);
+       /* Unlinking a file while it is still open is a Bad Idea on
+          DOS/Windows.  */
+       close (read_fd);
+       unlink (pz_temp_file);
+     }
+ 
+ # endif
+   UNLOAD_DATA();
+ }
diff -Nrcpad gcc-3.4.3/fixincludes/fixincl.tpl gcc-4.0.0/fixincludes/fixincl.tpl
*** gcc-3.4.3/fixincludes/fixincl.tpl	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/fixincl.tpl	Tue Aug 31 09:26:05 2004
***************
*** 0 ****
--- 1,220 ----
+ [= AutoGen5 Template -*- Mode: C -*-
+ x=fixincl.x =]
+ [= (dne " * " "/* ")=]
+  */
+ /* DO NOT CVS-MERGE THIS FILE, EITHER [=`date`=]
+  *
+  * You must regenerate it.  Use the ./genfixes script.
+  *
+  *
+  * This is part of the fixincl program used to install modified versions of
+  * certain ANSI-incompatible system header files which are fixed to work
+  * correctly with ANSI C and placed in a directory that GNU C will search.
+  *
+  * This file contains [=(count "fix")=] fixup descriptions.
+  *
+  * See README for more information.
+  *
+  *  inclhack copyright (c) 1998, 1999, 2000, 2001
+  *  The Free Software Foundation, Inc.
+  *
+  [=(define re-ct 0) (define max-mach 0) (define ct 0)
+    (define HACK "") (define Hack "")    (define tmp "")
+    (gpl "inclhack" " *  ")=]
+  */
+ [=
+ 
+ FOR fix =]
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of [=
+     (set! Hack (string-capitalize! (get "hackname")))
+     (set! HACK (string-upcase!     (get "hackname")))
+     (if (and (not (exist? "test_text")) (not (exist? "replace")))
+         (error (sprintf "include fix '%s' has no test text" Hack )) )
+     (. Hack)=] fix
+  */[=
+ 
+ # Note that this is not just for debugging purposes, but in case
+   some C fix wishes to refer to the regexps it is paired with.
+   See commentary at the top of fixfixes.c.
+ =]
+ tSCC z[=(. Hack)=]Name[] =
+      "[=hackname=]";
+ 
+ /*
+  *  File name selection pattern
+  */[=
+ 
+   IF (exist? "files")=]
+ tSCC z[=(. Hack)=]List[] =
+   "[=FOR files =]|[=files=][=ENDFOR=]|";[=
+ 
+   ELSE =]
+ #define z[=(. Hack)=]List (char*)NULL[=
+   ENDIF (exist? "files") =]
+ /*
+  *  Machine/OS name selection pattern
+  */[=
+ 
+   IF (exist? "mach")=]
+ tSCC* apz[=(. Hack)=]Machs[] = {[=
+     (set! ct 0) =][=
+ 
+     FOR mach =]
+         [=
+       (set! tmp (get "mach"))
+       (set! ct (+ ct (string-length tmp) 5))
+       (kr-string tmp)=],[=
+     ENDFOR=]
+         (const char*)NULL };[=
+ 
+     (if (> ct max-mach) (set! max-mach ct)) =][=
+ 
+   ELSE =]
+ #define apz[=(. Hack)=]Machs (const char**)NULL[=
+   ENDIF (exist? "files") =][=
+ 
+   IF (exist? "select")=]
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */[=
+     FOR select =]
+ tSCC z[=(. Hack)=]Select[=(for-index)=][] =
+        [=(kr-string (get "select"))=];[=
+     ENDFOR select =][=
+   ENDIF =][=
+ 
+   IF (exist? "bypass")=]
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */[=
+     FOR bypass =]
+ tSCC z[=(. Hack)=]Bypass[=(for-index)=][] =
+        [=(kr-string (get "bypass"))=];[=
+     ENDFOR bypass =][=
+   ENDIF =][=
+ 
+   IF (exist? "test")=]
+ 
+ /*
+  *  perform the 'test' shell command - do fix on success
+  */[=
+     FOR test =]
+ tSCC z[=(. Hack)=]Test[=(for-index)=][] =
+        [=(kr-string (get "test"))=];[=
+     ENDFOR  =][=
+   ENDIF     =][=
+ 
+   IF (exist? "c_test")=]
+ 
+ /*
+  *  perform the C function call test
+  */[=
+     FOR c_test =]
+ tSCC z[=(. Hack)=]FTst[=(for-index)=][] = "[=c_test=]";[=
+     ENDFOR c_test =][=
+   ENDIF =][=
+ 
+   IF (set! ct (+ (count "select") (count "bypass") 
+               (count "test") (count "c_test")))
+ 
+      (= ct 0)
+ =]
+ #define [=(. HACK)=]_TEST_CT  0
+ #define a[=(. Hack)=]Tests   (tTestDesc*)NULL[=
+   ELSE =]
+ 
+ #define    [=(. HACK)=]_TEST_CT  [=(. ct)=][=
+ 	(set! re-ct (+ re-ct (count "select") (count "bypass"))) =]
+ static tTestDesc a[=(. Hack)=]Tests[] = {[=
+ 
+     FOR test =]
+   { TT_TEST,     z[=(. Hack)=]Test[=(for-index)=],   0 /* unused */ },[=
+     ENDFOR test =][=
+ 
+     FOR c_test =]
+   { TT_FUNCTION, z[=(. Hack)=]FTst[=(for-index)=],   0 /* unused */ },[=
+     ENDFOR c_test =][=
+ 
+     FOR bypass =]
+   { TT_NEGREP,   z[=(. Hack)=]Bypass[=(for-index)=], (regex_t*)NULL },[=
+     ENDFOR bypass =][=
+ 
+     FOR select =]
+   { TT_EGREP,    z[=(. Hack)=]Select[=(for-index)=], (regex_t*)NULL },[=
+     ENDFOR select =] };[=
+   ENDIF =]
+ 
+ /*
+  *  Fix Command Arguments for [=(. Hack)=]
+  */
+ static const char* apz[=(. Hack)=]Patch[] = {[=
+     IF   (exist? "sed")=] "sed"[=
+       FOR sed=],
+     "-e", [=(kr-string (get "sed"))=][=
+       ENDFOR sed=],[=
+ 
+     ELIF (exist? "shell")=] "sh", "-c",
+     [=(kr-string (get "shell"))=],[=
+ 
+     ELIF (exist? "c_fix")=]
+     [=(kr-string (get "c_fix"))=],[=
+ 
+       FOR c_fix_arg =]
+     [=(kr-string (get "c_fix_arg"))=],[=
+       ENDFOR c_fix_arg =][=
+ 
+     ELIF (> (len "replace") 0) =]
+ [=(kr-string (get "replace"))=],[=
+ 
+     ENDIF=]
+     (char*)NULL };
+ [=ENDFOR fix=]
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  List of all fixes
+  */[=
+ #  as of this writing, 49 bytes are needed by the case statement format.
+    We also must allow for the size of the target machine machine name.
+    This allows for a 79 byte machine name.  Better be enough.
+ =]
+ #define REGEX_COUNT          [= (. re-ct) =]
+ #define MACH_LIST_SIZE_LIMIT [= (+ 128 max-mach) =]
+ #define FIX_COUNT            [= (count "fix") =]
+ 
+ /*
+  *  Enumerate the fixes[= # in a way that minimizes diffs :-) =]
+  */
+ typedef enum {[=
+ 
+ FOR fix "," =]
+     [=(string-upcase! (get "hackname"))=]_FIXIDX[=
+ ENDFOR
+ 
+ =]
+ } t_fixinc_idx;
+ 
+ tFixDesc fixDescList[ FIX_COUNT ] = {[=
+ 
+ 
+ FOR fix ",\n" =][=
+     (set! Hack (string-capitalize! (get "hackname")))
+     (set! HACK (string-upcase!     (get "hackname"))) =]
+   {  z[=(. Hack)=]Name,    z[=(. Hack)=]List,
+      apz[=(. Hack)=]Machs,
+      [=(. HACK)=]_TEST_CT, [=
+        IF (exist? "not_machine") =]FD_MACH_IFNOT[=
+        ELSE                      =]FD_MACH_ONLY[=
+        ENDIF =][=
+        IF    (exist? "shell")    =] | FD_SHELL_SCRIPT[=
+        ELIF  (exist? "c_fix")    =] | FD_SUBROUTINE[=
+        ELIF  (exist? "replace")  =] | FD_REPLACEMENT[=
+        ENDIF =],
+      a[=(. Hack)=]Tests,   apz[=(. Hack)=]Patch, 0 }[=
+ 
+ ENDFOR =]
+ };
diff -Nrcpad gcc-3.4.3/fixincludes/fixincl.x gcc-4.0.0/fixincludes/fixincl.x
*** gcc-3.4.3/fixincludes/fixincl.x	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/fixincl.x	Mon Mar 21 16:17:48 2005
***************
*** 0 ****
--- 1,8248 ----
+ /*  -*- buffer-read-only: t -*- vi: set ro:
+  * 
+  * DO NOT EDIT THIS FILE   (fixincl.x)
+  * 
+  * It has been AutoGen-ed  Monday March 21, 2005 at 04:21:15 PM CET
+  * From the definitions    inclhack.def
+  * and the template file   fixincl
+  */
+ /* DO NOT CVS-MERGE THIS FILE, EITHER Mon Mar 21 16:21:15 CET 2005
+  *
+  * You must regenerate it.  Use the ./genfixes script.
+  *
+  *
+  * This is part of the fixincl program used to install modified versions of
+  * certain ANSI-incompatible system header files which are fixed to work
+  * correctly with ANSI C and placed in a directory that GNU C will search.
+  *
+  * This file contains 179 fixup descriptions.
+  *
+  * See README for more information.
+  *
+  *  inclhack copyright (c) 1998, 1999, 2000, 2001
+  *  The Free Software Foundation, Inc.
+  *
+   *  inclhack is free software.
+  *  
+  *  You may redistribute it and/or modify it under the terms of the
+  *  GNU General Public License, as published by the Free Software
+  *  Foundation; either version 2, or (at your option) any later version.
+  *  
+  *  inclhack is distributed in the hope that it will be useful,
+  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+  *  See the GNU General Public License for more details.
+  *  
+  *  You should have received a copy of the GNU General Public License
+  *  along with inclhack.  See the file "COPYING".  If not,
+  *  write to:  The Free Software Foundation, Inc.,
+  *             59 Temple Place - Suite 330,
+  *             Boston,  MA  02111-1307, USA.
+  */
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Aab_Fd_Zero_Asm_Posix_Types_H fix
+  */
+ tSCC zAab_Fd_Zero_Asm_Posix_Types_HName[] =
+      "AAB_fd_zero_asm_posix_types_h";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zAab_Fd_Zero_Asm_Posix_Types_HList[] =
+   "|asm/posix_types.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzAab_Fd_Zero_Asm_Posix_Types_HMachs[] = {
+         "i[34567]86-*-linux*",
+         (const char*)NULL };
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zAab_Fd_Zero_Asm_Posix_Types_HBypass0[] =
+        "} while";
+ 
+ #define    AAB_FD_ZERO_ASM_POSIX_TYPES_H_TEST_CT  1
+ static tTestDesc aAab_Fd_Zero_Asm_Posix_Types_HTests[] = {
+   { TT_NEGREP,   zAab_Fd_Zero_Asm_Posix_Types_HBypass0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Aab_Fd_Zero_Asm_Posix_Types_H
+  */
+ static const char* apzAab_Fd_Zero_Asm_Posix_Types_HPatch[] = {
+ "/* This file fixes a bug in the __FD_ZERO macro\n\
+    for older versions of the Linux kernel. */\n\
+ #ifndef _POSIX_TYPES_H_WRAPPER\n\
+ #include <features.h>\n\
+  #include_next <asm/posix_types.h>\n\n\
+ #if defined(__FD_ZERO) && !defined(__GLIBC__)\n\
+ #undef __FD_ZERO\n\
+ #define __FD_ZERO(fdsetp) \\\n\
+   do { \\\n\
+     int __d0, __d1; \\\n\
+ __asm__ __volatile__(\"cld ; rep ; stosl\" \\\n\
+ : \"=&c\" (__d0), \"=&D\" (__d1) \\\n\
+ : \"a\" (0), \"0\" (__FDSET_LONGS), \\\n\
+   \"1\" ((__kernel_fd_set *) (fdsetp)) :\"memory\"); \\\n\
+   } while (0)\n\
+ #endif\n\n\
+ #define _POSIX_TYPES_H_WRAPPER\n\
+ #endif /* _POSIX_TYPES_H_WRAPPER */",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Aab_Fd_Zero_Gnu_Types_H fix
+  */
+ tSCC zAab_Fd_Zero_Gnu_Types_HName[] =
+      "AAB_fd_zero_gnu_types_h";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zAab_Fd_Zero_Gnu_Types_HList[] =
+   "|gnu/types.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzAab_Fd_Zero_Gnu_Types_HMachs[] = {
+         "i[34567]86-*-linux*",
+         (const char*)NULL };
+ #define AAB_FD_ZERO_GNU_TYPES_H_TEST_CT  0
+ #define aAab_Fd_Zero_Gnu_Types_HTests   (tTestDesc*)NULL
+ 
+ /*
+  *  Fix Command Arguments for Aab_Fd_Zero_Gnu_Types_H
+  */
+ static const char* apzAab_Fd_Zero_Gnu_Types_HPatch[] = {
+ "/* This file fixes a bug in the __FD_ZERO macro present in glibc 1.x. */\n\
+ #ifndef _TYPES_H_WRAPPER\n\
+ #include <features.h>\n\
+ #include_next <gnu/types.h>\n\n\
+ #if defined(__FD_ZERO) && !defined(__GLIBC__)\n\
+ #undef __FD_ZERO\n\
+ # define __FD_ZERO(fdsetp) \\\\\n\
+   do { \\\\\n\
+     int __d0, __d1; \\\\\n\
+ __asm__ __volatile__(\"cld ; rep ; stosl\" \\\\\n\
+         \t: \"=&c\" (__d0), \"=&D\" (__d1) \\\\\n\
+         \t: \"a\" (0), \"0\" (__FDSET_LONGS), \\\\\n\
+   \"1\" ((__fd_set *) (fdsetp)) :\"memory\"); \\\\\n\
+   } while (0)\n\
+ #endif\n\n\
+ #define _TYPES_H_WRAPPER\n\
+ #endif /* _TYPES_H_WRAPPER */",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Aab_Fd_Zero_Selectbits_H fix
+  */
+ tSCC zAab_Fd_Zero_Selectbits_HName[] =
+      "AAB_fd_zero_selectbits_h";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zAab_Fd_Zero_Selectbits_HList[] =
+   "|selectbits.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzAab_Fd_Zero_Selectbits_HMachs[] = {
+         "i[34567]86-*-linux*",
+         (const char*)NULL };
+ #define AAB_FD_ZERO_SELECTBITS_H_TEST_CT  0
+ #define aAab_Fd_Zero_Selectbits_HTests   (tTestDesc*)NULL
+ 
+ /*
+  *  Fix Command Arguments for Aab_Fd_Zero_Selectbits_H
+  */
+ static const char* apzAab_Fd_Zero_Selectbits_HPatch[] = {
+ "/* This file fixes a bug in the __FD_ZERO macro present in glibc 2.0.x. */\n\
+ #ifndef _SELECTBITS_H_WRAPPER\n\
+   #include <features.h>\n\
+   #include_next <selectbits.h>\n\n\
+   #if defined(__FD_ZERO) && defined(__GLIBC__) \\\\\n\
+   && defined(__GLIBC_MINOR__) && __GLIBC__ == 2 \\\\\n\
+   && __GLIBC_MINOR__ == 0\n\
+      #undef __FD_ZERO\n\
+      #define __FD_ZERO(fdsetp) \\\\\n\
+      do { \\\\\n\
+         int __d0, __d1; \\\\\n\
+       __asm__ __volatile__ (\"cld; rep; stosl\" \\\\\n\
+                         : \"=&c\" (__d0), \"=&D\" (__d1) \\\\\n\
+                         : \"a\" (0), \"0\" (sizeof (__fd_set) \\\\\n\
+                                         / sizeof (__fd_mask)), \\\\\n\
+                           \"1\" ((__fd_mask *) (fdsetp)) \\\\\n\
+                         : \"memory\"); \\\\\n\
+       } while (0)\n\
+   #endif\n\n\
+   #define _SELECTBITS_H_WRAPPER\n\
+ #endif /* _SELECTBITS_H_WRAPPER */",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Aab_Solaris_Sys_Varargs_H fix
+  */
+ tSCC zAab_Solaris_Sys_Varargs_HName[] =
+      "AAB_solaris_sys_varargs_h";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zAab_Solaris_Sys_Varargs_HList[] =
+   "|sys/varargs.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzAab_Solaris_Sys_Varargs_HMachs[] = {
+         "*-*-solaris*",
+         (const char*)NULL };
+ #define AAB_SOLARIS_SYS_VARARGS_H_TEST_CT  0
+ #define aAab_Solaris_Sys_Varargs_HTests   (tTestDesc*)NULL
+ 
+ /*
+  *  Fix Command Arguments for Aab_Solaris_Sys_Varargs_H
+  */
+ static const char* apzAab_Solaris_Sys_Varargs_HPatch[] = {
+ "#ifdef __STDC__\n\
+   #include <stdarg.h>\n\
+ #else\n\
+   #include <varargs.h>\n\
+ #endif",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Aab_Sun_Memcpy fix
+  */
+ tSCC zAab_Sun_MemcpyName[] =
+      "AAB_sun_memcpy";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zAab_Sun_MemcpyList[] =
+   "|memory.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzAab_Sun_MemcpyMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zAab_Sun_MemcpySelect0[] =
+        "/\\*\t@\\(#\\)(head/memory.h\t50.1\t |memory\\.h 1\\.[2-4] 8./../.. SMI; from S5R2 1\\.2\t)\\*/";
+ 
+ #define    AAB_SUN_MEMCPY_TEST_CT  1
+ static tTestDesc aAab_Sun_MemcpyTests[] = {
+   { TT_EGREP,    zAab_Sun_MemcpySelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Aab_Sun_Memcpy
+  */
+ static const char* apzAab_Sun_MemcpyPatch[] = {
+ "/* This file was generated by fixincludes */\n\
+ #ifndef __memory_h__\n\
+   #define __memory_h__\n\n\
+   #ifdef __STDC__\n\
+     extern void *memccpy();\n\
+     extern void *memchr();\n\
+     extern void *memcpy();\n\
+     extern void *memset();\n\
+   #else\n\
+     extern char *memccpy();\n\
+     extern char *memchr();\n\
+     extern char *memcpy();\n\
+     extern char *memset();\n\
+   #endif /* __STDC__ */\n\n\
+   extern int memcmp();\n\n\
+ #endif /* __memory_h__ */\n\
+ _EndOfHeader;\n\
+ };\n\n\n\
+ /*\n\
+  *  Completely replace <sys/varargs.h> with a file that includes gcc's\n\
+  *  stdarg.h or varargs.h files as appropriate.\n\
+  */\n\
+ #ifdef SVR4\n\
+ fix = {\n\
+     hackname = AAB_svr4_no_varargs;\n\
+     files    = sys/varargs.h;\n\
+     replace  = \"/* This file was generated by fixincludes.  */\\n\"\n\
+                \"#ifndef _SYS_VARARGS_H\\n\"\n\
+                \"#define _SYS_VARARGS_H\\n\\n\"\n\n\
+                \"#ifdef __STDC__\\n\"\n\
+                \"#include <stdarg.h>\\n\"\n\
+                \"#else\\n\"\n\
+                \"#include <varargs.h>\\n\"\n\
+                \"#endif\\n\\n\"\n\n\
+                \"#endif  /* _SYS_VARARGS_H */\\n\";\n\
+ };\n\
+ #endif\n\n\n\
+ /*\n\
+  *  Completely replace <sys/byteorder.h> with a file that implements gcc's\n\
+  *  optimized byteswapping.  (The original probably implemented some\n\
+  *  incompatible optimized byteswapping.)\n\
+  */\n\
+ fix = {\n\
+     hackname = AAB_svr4_replace_byteorder;\n\
+     mach     = \"*-*-sysv4*\";\n\
+     mach     = \"i[34567]86-*-sysv5*\";\n\
+     mach     = \"i[34567]86-*-sco3.2v5*\";\n\
+     mach     = \"i[34567]86-*-udk*\";\n\
+     mach     = \"i[34567]86-*-solaris2.[0-4]\";\n\
+     mach     = \"powerpcle-*-solaris2.[0-4]\";\n\
+     mach     = \"sparc-*-solaris2.[0-4]\";\n\
+     mach     = \"i[34567]86-sequent-ptx*\";\n\
+     files    = sys/byteorder.h;\n\
+     replace  = <<-  _EndOfHeader_\n\
+ #ifndef _SYS_BYTEORDER_H\n\
+ #define _SYS_BYTEORDER_H\n\n\
+ /* Functions to convert `short' and `long' quantities from host byte order\n\
+    to (internet) network byte order (i.e. big-endian).\n\n\
+    Written by Ron Guilmette (rfg@ncd.com).\n\n\
+    This isn't actually used by GCC.  It is installed by fixinc.svr4.\n\n\
+    For big-endian machines these functions are essentially no-ops.\n\n\
+    For little-endian machines, we define the functions using specialized\n\
+    asm sequences in cases where doing so yields better code (e.g. i386).  */\n\n\
+ #if !defined (__GNUC__) && !defined (__GNUG__)\n\
+   #error You lose!  This file is only useful with GNU compilers.\n\
+ #endif\n\n\
+ #ifndef __BYTE_ORDER__\n\
+   /* Byte order defines.  These are as defined on UnixWare 1.1, but with\n\
+      double underscores added at the front and back.  */\n\
+   #define __LITTLE_ENDIAN__   1234\n\
+   #define __BIG_ENDIAN__      4321\n\
+   #define __PDP_ENDIAN__      3412\n\
+ #endif\n\n\
+ #ifdef __STDC__\n\
+   static __inline__ unsigned long htonl (unsigned long);\n\
+   static __inline__ unsigned short htons (unsigned int);\n\
+   static __inline__ unsigned long ntohl (unsigned long);\n\
+   static __inline__ unsigned short ntohs (unsigned int);\n\
+ #endif /* defined (__STDC__) */\n\n\
+ #if defined (__i386__)\n\n\
+   #ifndef __BYTE_ORDER__\n\
+     #define __BYTE_ORDER__ __LITTLE_ENDIAN__\n\
+   #endif\n\n\
+   /* Convert a host long to a network long.  */\n\n\
+   /* We must use a new-style function definition, so that this will also\n\
+      be valid for C++.  */\n\
+   static __inline__ unsigned long\n\
+   htonl (unsigned long __arg)\n\
+   {\n\
+     register unsigned long __result;\n\n\
+     __asm__ (\"xchg%B0 %b0,%h0\n\
+   ror%L0 $16,%0\n\
+   xchg%B0 %b0,%h0\" : \"=q\" (__result) : \"0\" (__arg));\n\
+     return __result;\n\
+   }\n\n\
+   /* Convert a host short to a network short.  */\n\n\
+   static __inline__ unsigned short\n\
+   htons (unsigned int __arg)\n\
+   {\n\
+     register unsigned short __result;\n\n\
+     __asm__ (\"xchg%B0 %b0,%h0\" : \"=q\" (__result) : \"0\" (__arg));\n\
+     return __result;\n\
+   }\n\n\
+ #elif (defined (__ns32k__) || defined (__vax__) || defined (__arm__))\n\n\
+   #ifndef __BYTE_ORDER__\n\
+     #define __BYTE_ORDER__ __LITTLE_ENDIAN__\n\
+   #endif\n\n\
+   /* For other little-endian machines, using C code is just as efficient as\n\
+      using assembly code.  */\n\n\
+   /* Convert a host long to a network long.  */\n\n\
+   static __inline__ unsigned long\n\
+   htonl (unsigned long __arg)\n\
+   {\n\
+     register unsigned long __result;\n\n\
+     __result = (__arg >> 24) & 0x000000ff;\n\
+     __result |= (__arg >> 8) & 0x0000ff00;\n\
+     __result |= (__arg << 8) & 0x00ff0000;\n\
+     __result |= (__arg << 24) & 0xff000000;\n\
+     return __result;\n\
+   }\n\n\
+   /* Convert a host short to a network short.  */\n\n\
+   static __inline__ unsigned short\n\
+   htons (unsigned int __arg)\n\
+   {\n\
+     register unsigned short __result;\n\n\
+     __result = (__arg << 8) & 0xff00;\n\
+     __result |= (__arg >> 8) & 0x00ff;\n\
+     return __result;\n\
+   }\n\n\
+ #else /* must be a big-endian machine */\n\n\
+   #ifndef __BYTE_ORDER__\n\
+     #define __BYTE_ORDER__ __BIG_ENDIAN__\n\
+   #endif\n\n\
+   /* Convert a host long to a network long.  */\n\n\
+   static __inline__ unsigned long\n\
+   htonl (unsigned long __arg)\n\
+   {\n\
+     return __arg;\n\
+   }\n\n\
+   /* Convert a host short to a network short.  */\n\n\
+   static __inline__ unsigned short\n\
+   htons (unsigned int __arg)\n\
+   {\n\
+     return __arg;\n\
+   }\n\n\
+ #endif /* big-endian */\n\n\
+ /* Convert a network long to a host long.  */\n\n\
+ static __inline__ unsigned long\n\
+ ntohl (unsigned long __arg)\n\
+ {\n\
+   return htonl (__arg);\n\
+ }\n\n\
+ /* Convert a network short to a host short.  */\n\n\
+ static __inline__ unsigned short\n\
+ ntohs (unsigned int __arg)\n\
+ {\n\
+   return htons (__arg);\n\
+ }\n\
+ #endif",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Aab_Ultrix_Ansi_Compat fix
+  */
+ tSCC zAab_Ultrix_Ansi_CompatName[] =
+      "AAB_ultrix_ansi_compat";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zAab_Ultrix_Ansi_CompatList[] =
+   "|ansi_compat.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzAab_Ultrix_Ansi_CompatMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zAab_Ultrix_Ansi_CompatSelect0[] =
+        "ULTRIX";
+ 
+ #define    AAB_ULTRIX_ANSI_COMPAT_TEST_CT  1
+ static tTestDesc aAab_Ultrix_Ansi_CompatTests[] = {
+   { TT_EGREP,    zAab_Ultrix_Ansi_CompatSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Aab_Ultrix_Ansi_Compat
+  */
+ static const char* apzAab_Ultrix_Ansi_CompatPatch[] = {
+ "/* This file intentionally left blank.  */\n",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Aab_Ultrix_Limits fix
+  */
+ tSCC zAab_Ultrix_LimitsName[] =
+      "AAB_ultrix_limits";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zAab_Ultrix_LimitsList[] =
+   "|limits.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzAab_Ultrix_LimitsMachs[] = {
+         "*-*-ultrix4.3",
+         (const char*)NULL };
+ #define AAB_ULTRIX_LIMITS_TEST_CT  0
+ #define aAab_Ultrix_LimitsTests   (tTestDesc*)NULL
+ 
+ /*
+  *  Fix Command Arguments for Aab_Ultrix_Limits
+  */
+ static const char* apzAab_Ultrix_LimitsPatch[] = {
+ "#ifndef _LIMITS_INCLUDED\n\
+   #define _LIMITS_INCLUDED\n\
+   #include <sys/limits.h>\n\
+ #endif /* _LIMITS_INCLUDED */",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Aab_Ultrix_Memory fix
+  */
+ tSCC zAab_Ultrix_MemoryName[] =
+      "AAB_ultrix_memory";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zAab_Ultrix_MemoryList[] =
+   "|memory.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzAab_Ultrix_MemoryMachs[] = {
+         "*-*-ultrix4.3",
+         (const char*)NULL };
+ #define AAB_ULTRIX_MEMORY_TEST_CT  0
+ #define aAab_Ultrix_MemoryTests   (tTestDesc*)NULL
+ 
+ /*
+  *  Fix Command Arguments for Aab_Ultrix_Memory
+  */
+ static const char* apzAab_Ultrix_MemoryPatch[] = {
+ "#ifndef _MEMORY_INCLUDED\n\
+   #define _MEMORY_INCLUDED\n\
+   #include <strings.h>\n\
+ #endif /* _MEMORY_INCLUDED */",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Aab_Ultrix_String fix
+  */
+ tSCC zAab_Ultrix_StringName[] =
+      "AAB_ultrix_string";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zAab_Ultrix_StringList[] =
+   "|string.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzAab_Ultrix_StringMachs[] = {
+         "*-*-ultrix4.3",
+         (const char*)NULL };
+ #define AAB_ULTRIX_STRING_TEST_CT  0
+ #define aAab_Ultrix_StringTests   (tTestDesc*)NULL
+ 
+ /*
+  *  Fix Command Arguments for Aab_Ultrix_String
+  */
+ static const char* apzAab_Ultrix_StringPatch[] = {
+ "#ifndef _STRING_INCLUDED\n\
+   #define _STRING_INCLUDED\n\
+   #include <strings.h>\n\
+ #endif /* _STRING_INCLUDED */",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Aix_Pthread fix
+  */
+ tSCC zAix_PthreadName[] =
+      "aix_pthread";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zAix_PthreadList[] =
+   "|pthread.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzAix_PthreadMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zAix_PthreadSelect0[] =
+        "(#define [A-Za-z_0-9]+)(\\\\\n\
+ [^A-Za-z_0-9 \t\n\
+ (])";
+ 
+ #define    AIX_PTHREAD_TEST_CT  1
+ static tTestDesc aAix_PthreadTests[] = {
+   { TT_EGREP,    zAix_PthreadSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Aix_Pthread
+  */
+ static const char* apzAix_PthreadPatch[] = {
+     "format",
+     "%1 %2",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Aix_Sysmachine fix
+  */
+ tSCC zAix_SysmachineName[] =
+      "aix_sysmachine";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zAix_SysmachineList[] =
+   "|sys/machine.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzAix_SysmachineMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zAix_SysmachineSelect0[] =
+        "\\\\ +\n";
+ 
+ #define    AIX_SYSMACHINE_TEST_CT  1
+ static tTestDesc aAix_SysmachineTests[] = {
+   { TT_EGREP,    zAix_SysmachineSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Aix_Sysmachine
+  */
+ static const char* apzAix_SysmachinePatch[] = {
+     "format",
+     "\\\n",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Aix_Syswait fix
+  */
+ tSCC zAix_SyswaitName[] =
+      "aix_syswait";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zAix_SyswaitList[] =
+   "|sys/wait.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzAix_SyswaitMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zAix_SyswaitSelect0[] =
+        "^extern pid_t wait3\\(\\);\n";
+ tSCC zAix_SyswaitSelect1[] =
+        "bos325,";
+ 
+ #define    AIX_SYSWAIT_TEST_CT  2
+ static tTestDesc aAix_SyswaitTests[] = {
+   { TT_EGREP,    zAix_SyswaitSelect0, (regex_t*)NULL },
+   { TT_EGREP,    zAix_SyswaitSelect1, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Aix_Syswait
+  */
+ static const char* apzAix_SyswaitPatch[] = {
+     "format",
+     "struct rusage;\n\
+ %0",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Aix_Syswait_2 fix
+  */
+ tSCC zAix_Syswait_2Name[] =
+      "aix_syswait_2";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zAix_Syswait_2List[] =
+   "|sys/wait.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzAix_Syswait_2Machs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zAix_Syswait_2Select0[] =
+        "\\? (\\(\\(\\(\\(unsigned[^)]*\\)[^)]*\\) >> [^)]*\\) \\& 0xff\\) : -1)";
+ 
+ #define    AIX_SYSWAIT_2_TEST_CT  1
+ static tTestDesc aAix_Syswait_2Tests[] = {
+   { TT_EGREP,    zAix_Syswait_2Select0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Aix_Syswait_2
+  */
+ static const char* apzAix_Syswait_2Patch[] = {
+     "format",
+     "? (int)%1",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Aix_Volatile fix
+  */
+ tSCC zAix_VolatileName[] =
+      "aix_volatile";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zAix_VolatileList[] =
+   "|sys/signal.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzAix_VolatileMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zAix_VolatileSelect0[] =
+        "typedef volatile int sig_atomic_t";
+ 
+ #define    AIX_VOLATILE_TEST_CT  1
+ static tTestDesc aAix_VolatileTests[] = {
+   { TT_EGREP,    zAix_VolatileSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Aix_Volatile
+  */
+ static const char* apzAix_VolatilePatch[] = {
+     "format",
+     "typedef int sig_atomic_t",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Alpha___Assert fix
+  */
+ tSCC zAlpha___AssertName[] =
+      "alpha___assert";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zAlpha___AssertList[] =
+   "|assert.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzAlpha___AssertMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zAlpha___AssertSelect0[] =
+        "__assert\\(char \\*, char \\*, int\\)";
+ 
+ #define    ALPHA___ASSERT_TEST_CT  1
+ static tTestDesc aAlpha___AssertTests[] = {
+   { TT_EGREP,    zAlpha___AssertSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Alpha___Assert
+  */
+ static const char* apzAlpha___AssertPatch[] = {
+     "format",
+     "__assert(const char *, const char *, int)",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Alpha___Extern_Prefix fix
+  */
+ tSCC zAlpha___Extern_PrefixName[] =
+      "alpha___extern_prefix";
+ 
+ /*
+  *  File name selection pattern
+  */
+ #define zAlpha___Extern_PrefixList (char*)NULL
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzAlpha___Extern_PrefixMachs[] = {
+         "alpha*-dec-osf*",
+         (const char*)NULL };
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zAlpha___Extern_PrefixSelect0[] =
+        "(.*)(defined\\(__DECC\\)|def[ \t]*__DECC)[ \t]*\n\
+ (#[ \t]*pragma[ \t]*extern_prefix.*)";
+ 
+ #define    ALPHA___EXTERN_PREFIX_TEST_CT  1
+ static tTestDesc aAlpha___Extern_PrefixTests[] = {
+   { TT_EGREP,    zAlpha___Extern_PrefixSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Alpha___Extern_Prefix
+  */
+ static const char* apzAlpha___Extern_PrefixPatch[] = {
+     "format",
+     "%1 (defined(__DECC) || defined(__PRAGMA_EXTERN_PREFIX))\n\
+ %3",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Alpha___Extern_Prefix_Standards fix
+  */
+ tSCC zAlpha___Extern_Prefix_StandardsName[] =
+      "alpha___extern_prefix_standards";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zAlpha___Extern_Prefix_StandardsList[] =
+   "|standards.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzAlpha___Extern_Prefix_StandardsMachs[] = {
+         "alpha*-dec-osf*",
+         (const char*)NULL };
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zAlpha___Extern_Prefix_StandardsSelect0[] =
+        ".*!defined\\(_LIBC_POLLUTION_H_\\) && !defined\\(__DECC\\)";
+ 
+ #define    ALPHA___EXTERN_PREFIX_STANDARDS_TEST_CT  1
+ static tTestDesc aAlpha___Extern_Prefix_StandardsTests[] = {
+   { TT_EGREP,    zAlpha___Extern_Prefix_StandardsSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Alpha___Extern_Prefix_Standards
+  */
+ static const char* apzAlpha___Extern_Prefix_StandardsPatch[] = {
+     "format",
+     "%0 && !defined(__PRAGMA_EXTERN_PREFIX)",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Alpha___Extern_Prefix_Sys_Stat fix
+  */
+ tSCC zAlpha___Extern_Prefix_Sys_StatName[] =
+      "alpha___extern_prefix_sys_stat";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zAlpha___Extern_Prefix_Sys_StatList[] =
+   "|sys/stat.h|sys/mount.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzAlpha___Extern_Prefix_Sys_StatMachs[] = {
+         "alpha*-dec-osf5*",
+         (const char*)NULL };
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zAlpha___Extern_Prefix_Sys_StatSelect0[] =
+        "#[ \t]*if[ \t]*defined\\(__DECC\\)";
+ 
+ #define    ALPHA___EXTERN_PREFIX_SYS_STAT_TEST_CT  1
+ static tTestDesc aAlpha___Extern_Prefix_Sys_StatTests[] = {
+   { TT_EGREP,    zAlpha___Extern_Prefix_Sys_StatSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Alpha___Extern_Prefix_Sys_Stat
+  */
+ static const char* apzAlpha___Extern_Prefix_Sys_StatPatch[] = {
+     "format",
+     "%0 || defined(__PRAGMA_EXTERN_PREFIX)",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Alpha_Assert fix
+  */
+ tSCC zAlpha_AssertName[] =
+      "alpha_assert";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zAlpha_AssertList[] =
+   "|assert.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzAlpha_AssertMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zAlpha_AssertSelect0[] =
+        "(#define assert\\(EX\\).*)\\(\\(int\\) \\(EX\\)\\)";
+ 
+ #define    ALPHA_ASSERT_TEST_CT  1
+ static tTestDesc aAlpha_AssertTests[] = {
+   { TT_EGREP,    zAlpha_AssertSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Alpha_Assert
+  */
+ static const char* apzAlpha_AssertPatch[] = {
+     "format",
+     "%1(EX)",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Alpha_Bad_Lval fix
+  */
+ tSCC zAlpha_Bad_LvalName[] =
+      "alpha_bad_lval";
+ 
+ /*
+  *  File name selection pattern
+  */
+ #define zAlpha_Bad_LvalList (char*)NULL
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzAlpha_Bad_LvalMachs[] = {
+         "alpha*-dec-osf*",
+         (const char*)NULL };
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zAlpha_Bad_LvalSelect0[] =
+        "^[ \t]*#[ \t]*pragma[ \t]+extern_prefix";
+ 
+ #define    ALPHA_BAD_LVAL_TEST_CT  1
+ static tTestDesc aAlpha_Bad_LvalTests[] = {
+   { TT_EGREP,    zAlpha_Bad_LvalSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Alpha_Bad_Lval
+  */
+ static const char* apzAlpha_Bad_LvalPatch[] = { "sed",
+     "-e", "s/^[ \t]*#[ \t]*define[ \t][ \t]*\\([^(]*\\)\\(([^)]*)\\)[ \t]*\\(_.*\\)\\1\\2[ \t]*$/#define \\1 \\3\\1/",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Alpha_Getopt fix
+  */
+ tSCC zAlpha_GetoptName[] =
+      "alpha_getopt";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zAlpha_GetoptList[] =
+   "|stdio.h|stdlib.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzAlpha_GetoptMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zAlpha_GetoptSelect0[] =
+        "getopt\\(int, char \\*\\[\\], *char \\*\\)";
+ 
+ #define    ALPHA_GETOPT_TEST_CT  1
+ static tTestDesc aAlpha_GetoptTests[] = {
+   { TT_EGREP,    zAlpha_GetoptSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Alpha_Getopt
+  */
+ static const char* apzAlpha_GetoptPatch[] = {
+     "format",
+     "getopt(int, char *const[], const char *)",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Alpha_Parens fix
+  */
+ tSCC zAlpha_ParensName[] =
+      "alpha_parens";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zAlpha_ParensList[] =
+   "|sym.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzAlpha_ParensMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zAlpha_ParensSelect0[] =
+        "#ifndef\\(__mips64\\)";
+ 
+ #define    ALPHA_PARENS_TEST_CT  1
+ static tTestDesc aAlpha_ParensTests[] = {
+   { TT_EGREP,    zAlpha_ParensSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Alpha_Parens
+  */
+ static const char* apzAlpha_ParensPatch[] = {
+     "format",
+     "#ifndef __mips64",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Alpha_Pthread fix
+  */
+ tSCC zAlpha_PthreadName[] =
+      "alpha_pthread";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zAlpha_PthreadList[] =
+   "|pthread.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzAlpha_PthreadMachs[] = {
+         "alpha*-dec-osf*",
+         (const char*)NULL };
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zAlpha_PthreadSelect0[] =
+        "((#[ \t]*if)([ \t]*defined[ \t]*\\(_PTHREAD_ENV_DECC\\)|def _PTHREAD_ENV_DECC)(.*))\n\
+ (#[ \t]*define _PTHREAD_USE_PTDNAM_)";
+ 
+ #define    ALPHA_PTHREAD_TEST_CT  1
+ static tTestDesc aAlpha_PthreadTests[] = {
+   { TT_EGREP,    zAlpha_PthreadSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Alpha_Pthread
+  */
+ static const char* apzAlpha_PthreadPatch[] = {
+     "format",
+     "%2 defined (_PTHREAD_ENV_DECC)%4 || defined (__PRAGMA_EXTERN_PREFIX)\n\
+ %5",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Alpha_Pthread_Gcc fix
+  */
+ tSCC zAlpha_Pthread_GccName[] =
+      "alpha_pthread_gcc";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zAlpha_Pthread_GccList[] =
+   "|pthread.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzAlpha_Pthread_GccMachs[] = {
+         "alpha*-dec-osf*",
+         (const char*)NULL };
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zAlpha_Pthread_GccSelect0[] =
+        "#else\n\
+ # error <pthread.h>: unrecognized compiler.";
+ 
+ #define    ALPHA_PTHREAD_GCC_TEST_CT  1
+ static tTestDesc aAlpha_Pthread_GccTests[] = {
+   { TT_EGREP,    zAlpha_Pthread_GccSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Alpha_Pthread_Gcc
+  */
+ static const char* apzAlpha_Pthread_GccPatch[] = {
+     "format",
+     "#elif defined (__GNUC__)\n\
+ # define _PTHREAD_ENV_GCC\n\
+ %0",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Alpha_Pthread_Init fix
+  */
+ tSCC zAlpha_Pthread_InitName[] =
+      "alpha_pthread_init";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zAlpha_Pthread_InitList[] =
+   "|pthread.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzAlpha_Pthread_InitMachs[] = {
+         "alpha*-dec-osf*",
+         (const char*)NULL };
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zAlpha_Pthread_InitSelect0[] =
+        " \\* @\\(#\\).RCSfile: pthread\\.h,v \\$ .Revision: 1\\.1\\.33\\.21 \\$ \\(DEC\\) .Date: 2000/08/15 15:30:13 \\$";
+ 
+ #define    ALPHA_PTHREAD_INIT_TEST_CT  1
+ static tTestDesc aAlpha_Pthread_InitTests[] = {
+   { TT_EGREP,    zAlpha_Pthread_InitSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Alpha_Pthread_Init
+  */
+ static const char* apzAlpha_Pthread_InitPatch[] = { "sed",
+     "-e", "s@MVALID\\(.*\\)A}@MVALID\\1A, 0, 0, 0, 0, 0, 0 }@\n\
+ s@MVALID\\(.*\\)_}@MVALID\\1_, 0, 0, 0, 0 }@\n\
+ s@CVALID\\(.*\\)A}@CVALID\\1A, 0, 0, 0, 0 }@\n\
+ s@CVALID\\(.*\\)_}@CVALID\\1_, 0, 0 }@\n\
+ s@WVALID\\(.*\\)A}@WVALID\\1A, 0, 0, 0, 0, 0, 0, 0, 0, 0 }@\n\
+ s@WVALID\\(.*\\)_}@WVALID\\1_, 0, 0, 0, 0, 0, 0, 0 }@\n",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Alpha_Sbrk fix
+  */
+ tSCC zAlpha_SbrkName[] =
+      "alpha_sbrk";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zAlpha_SbrkList[] =
+   "|unistd.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzAlpha_SbrkMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zAlpha_SbrkSelect0[] =
+        "char[ \t]*\\*[\t ]*sbrk[ \t]*\\(";
+ 
+ #define    ALPHA_SBRK_TEST_CT  1
+ static tTestDesc aAlpha_SbrkTests[] = {
+   { TT_EGREP,    zAlpha_SbrkSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Alpha_Sbrk
+  */
+ static const char* apzAlpha_SbrkPatch[] = {
+     "format",
+     "void *sbrk(",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Alpha_Wchar fix
+  */
+ tSCC zAlpha_WcharName[] =
+      "alpha_wchar";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zAlpha_WcharList[] =
+   "|wchar.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzAlpha_WcharMachs[] = {
+         "alpha*-dec-osf4*",
+         (const char*)NULL };
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zAlpha_WcharSelect0[] =
+        "#define wcstok wcstok_r";
+ 
+ #define    ALPHA_WCHAR_TEST_CT  1
+ static tTestDesc aAlpha_WcharTests[] = {
+   { TT_EGREP,    zAlpha_WcharSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Alpha_Wchar
+  */
+ static const char* apzAlpha_WcharPatch[] = { "sed",
+     "-e", "s@#define wcstok wcstok_r@extern wchar_t *wcstok __((wchar_t *, const wchar_t *, wchar_t **)) __asm__(\"wcstok_r\");@",
+     "-e", "s@#define wcsftime __wcsftime_isoc@extern size_t   wcsftime __((wchar_t *, size_t, const wchar_t *, const struct tm *)) __asm__(\"__wcsftime_isoc\");@",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Avoid_Bool_Define fix
+  */
+ tSCC zAvoid_Bool_DefineName[] =
+      "avoid_bool_define";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zAvoid_Bool_DefineList[] =
+   "|curses.h|curses_colr/curses.h|term.h|tinfo.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzAvoid_Bool_DefineMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zAvoid_Bool_DefineSelect0[] =
+        "#[ \t]*define[ \t]+bool[ \t]";
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zAvoid_Bool_DefineBypass0[] =
+        "__cplusplus";
+ 
+ #define    AVOID_BOOL_DEFINE_TEST_CT  2
+ static tTestDesc aAvoid_Bool_DefineTests[] = {
+   { TT_NEGREP,   zAvoid_Bool_DefineBypass0, (regex_t*)NULL },
+   { TT_EGREP,    zAvoid_Bool_DefineSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Avoid_Bool_Define
+  */
+ static const char* apzAvoid_Bool_DefinePatch[] = {
+     "format",
+     "#ifndef __cplusplus\n\
+ %0\n\
+ #endif",
+     "^[ \t]*#[ \t]*define[ \t]+bool[ \t].*",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Avoid_Bool_Type fix
+  */
+ tSCC zAvoid_Bool_TypeName[] =
+      "avoid_bool_type";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zAvoid_Bool_TypeList[] =
+   "|curses.h|curses_colr/curses.h|term.h|tinfo.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzAvoid_Bool_TypeMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zAvoid_Bool_TypeSelect0[] =
+        "^[ \t]*typedef[ \t].*[ \t]bool[ \t]*;";
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zAvoid_Bool_TypeBypass0[] =
+        "__cplusplus";
+ 
+ #define    AVOID_BOOL_TYPE_TEST_CT  2
+ static tTestDesc aAvoid_Bool_TypeTests[] = {
+   { TT_NEGREP,   zAvoid_Bool_TypeBypass0, (regex_t*)NULL },
+   { TT_EGREP,    zAvoid_Bool_TypeSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Avoid_Bool_Type
+  */
+ static const char* apzAvoid_Bool_TypePatch[] = {
+     "format",
+     "#ifndef __cplusplus\n\
+ %0\n\
+ #endif",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Avoid_Wchar_T_Type fix
+  */
+ tSCC zAvoid_Wchar_T_TypeName[] =
+      "avoid_wchar_t_type";
+ 
+ /*
+  *  File name selection pattern
+  */
+ #define zAvoid_Wchar_T_TypeList (char*)NULL
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzAvoid_Wchar_T_TypeMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zAvoid_Wchar_T_TypeSelect0[] =
+        "^[ \t]*typedef[ \t].*[ \t]wchar_t[ \t]*;";
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zAvoid_Wchar_T_TypeBypass0[] =
+        "__cplusplus";
+ tSCC zAvoid_Wchar_T_TypeBypass1[] =
+        "_LINUX_NLS_H";
+ tSCC zAvoid_Wchar_T_TypeBypass2[] =
+        "XFree86: xc/lib/X11/Xlib\\.h";
+ 
+ #define    AVOID_WCHAR_T_TYPE_TEST_CT  4
+ static tTestDesc aAvoid_Wchar_T_TypeTests[] = {
+   { TT_NEGREP,   zAvoid_Wchar_T_TypeBypass0, (regex_t*)NULL },
+   { TT_NEGREP,   zAvoid_Wchar_T_TypeBypass1, (regex_t*)NULL },
+   { TT_NEGREP,   zAvoid_Wchar_T_TypeBypass2, (regex_t*)NULL },
+   { TT_EGREP,    zAvoid_Wchar_T_TypeSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Avoid_Wchar_T_Type
+  */
+ static const char* apzAvoid_Wchar_T_TypePatch[] = {
+     "format",
+     "#ifndef __cplusplus\n\
+ %0\n\
+ #endif",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Bad_Struct_Term fix
+  */
+ tSCC zBad_Struct_TermName[] =
+      "bad_struct_term";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zBad_Struct_TermList[] =
+   "|curses.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzBad_Struct_TermMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zBad_Struct_TermSelect0[] =
+        "^[ \t]*typedef[ \t]+struct[ \t]+term[ \t]*;";
+ 
+ #define    BAD_STRUCT_TERM_TEST_CT  1
+ static tTestDesc aBad_Struct_TermTests[] = {
+   { TT_EGREP,    zBad_Struct_TermSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Bad_Struct_Term
+  */
+ static const char* apzBad_Struct_TermPatch[] = {
+     "format",
+     "struct term;",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Badquote fix
+  */
+ tSCC zBadquoteName[] =
+      "badquote";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zBadquoteList[] =
+   "|sundev/vuid_event.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzBadquoteMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zBadquoteSelect0[] =
+        "doesn't";
+ 
+ #define    BADQUOTE_TEST_CT  1
+ static tTestDesc aBadquoteTests[] = {
+   { TT_EGREP,    zBadquoteSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Badquote
+  */
+ static const char* apzBadquotePatch[] = {
+     "format",
+     "does not",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Broken_Assert_Stdio fix
+  */
+ tSCC zBroken_Assert_StdioName[] =
+      "broken_assert_stdio";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zBroken_Assert_StdioList[] =
+   "|assert.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzBroken_Assert_StdioMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zBroken_Assert_StdioSelect0[] =
+        "stderr";
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zBroken_Assert_StdioBypass0[] =
+        "include.*stdio\\.h";
+ 
+ #define    BROKEN_ASSERT_STDIO_TEST_CT  2
+ static tTestDesc aBroken_Assert_StdioTests[] = {
+   { TT_NEGREP,   zBroken_Assert_StdioBypass0, (regex_t*)NULL },
+   { TT_EGREP,    zBroken_Assert_StdioSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Broken_Assert_Stdio
+  */
+ static const char* apzBroken_Assert_StdioPatch[] = {
+     "wrap",
+     "#include <stdio.h>\n",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Broken_Assert_Stdlib fix
+  */
+ tSCC zBroken_Assert_StdlibName[] =
+      "broken_assert_stdlib";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zBroken_Assert_StdlibList[] =
+   "|assert.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzBroken_Assert_StdlibMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zBroken_Assert_StdlibSelect0[] =
+        "exit *\\(|abort *\\(";
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zBroken_Assert_StdlibBypass0[] =
+        "include.*stdlib\\.h";
+ 
+ #define    BROKEN_ASSERT_STDLIB_TEST_CT  2
+ static tTestDesc aBroken_Assert_StdlibTests[] = {
+   { TT_NEGREP,   zBroken_Assert_StdlibBypass0, (regex_t*)NULL },
+   { TT_EGREP,    zBroken_Assert_StdlibSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Broken_Assert_Stdlib
+  */
+ static const char* apzBroken_Assert_StdlibPatch[] = {
+     "wrap",
+     "#ifdef __cplusplus\n\
+ #include <stdlib.h>\n\
+ #endif\n",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Broken_Cabs fix
+  */
+ tSCC zBroken_CabsName[] =
+      "broken_cabs";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zBroken_CabsList[] =
+   "|math.h|architecture/ppc/math.h|architecture/i386/math.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzBroken_CabsMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zBroken_CabsSelect0[] =
+        "^extern[ \\t]+double[ \\t]+cabs";
+ 
+ #define    BROKEN_CABS_TEST_CT  1
+ static tTestDesc aBroken_CabsTests[] = {
+   { TT_EGREP,    zBroken_CabsSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Broken_Cabs
+  */
+ static const char* apzBroken_CabsPatch[] = {
+     "format",
+     "",
+     "^extern[ \t]+double[ \t]+cabs[ \t]*\\([^\\)]*\\);",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Bsd_Stdio_Attrs_Conflict fix
+  */
+ tSCC zBsd_Stdio_Attrs_ConflictName[] =
+      "bsd_stdio_attrs_conflict";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zBsd_Stdio_Attrs_ConflictList[] =
+   "|stdio.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzBsd_Stdio_Attrs_ConflictMachs[] = {
+         "*-*-*bsd*",
+         "*-*-*darwin*",
+         (const char*)NULL };
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zBsd_Stdio_Attrs_ConflictSelect0[] =
+        "^#define[ \t]*vfscanf[ \t]*__svfscanf[ \t]*$";
+ 
+ #define    BSD_STDIO_ATTRS_CONFLICT_TEST_CT  1
+ static tTestDesc aBsd_Stdio_Attrs_ConflictTests[] = {
+   { TT_EGREP,    zBsd_Stdio_Attrs_ConflictSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Bsd_Stdio_Attrs_Conflict
+  */
+ static const char* apzBsd_Stdio_Attrs_ConflictPatch[] = {
+     "format",
+     "#define _BSD_STRING(_BSD_X) _BSD_STRINGX(_BSD_X)\n\
+ #define _BSD_STRINGX(_BSD_X) #_BSD_X\n\
+ int vfscanf(FILE *, const char *, __builtin_va_list) __asm__ (_BSD_STRING(__USER_LABEL_PREFIX__) \"__svfscanf\");",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Ctrl_Quotes_Def fix
+  */
+ tSCC zCtrl_Quotes_DefName[] =
+      "ctrl_quotes_def";
+ 
+ /*
+  *  File name selection pattern
+  */
+ #define zCtrl_Quotes_DefList (char*)NULL
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzCtrl_Quotes_DefMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zCtrl_Quotes_DefSelect0[] =
+        "define[ \t]+[A-Z0-9_]+CTRL\\([a-zA-Z][,)]";
+ 
+ #define    CTRL_QUOTES_DEF_TEST_CT  1
+ static tTestDesc aCtrl_Quotes_DefTests[] = {
+   { TT_EGREP,    zCtrl_Quotes_DefSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Ctrl_Quotes_Def
+  */
+ static const char* apzCtrl_Quotes_DefPatch[] = {
+     "char_macro_def",
+     "CTRL",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Ctrl_Quotes_Use fix
+  */
+ tSCC zCtrl_Quotes_UseName[] =
+      "ctrl_quotes_use";
+ 
+ /*
+  *  File name selection pattern
+  */
+ #define zCtrl_Quotes_UseList (char*)NULL
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzCtrl_Quotes_UseMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zCtrl_Quotes_UseSelect0[] =
+        "define[ \t]+[A-Z0-9_]+[ \t]+[A-Z0-9_]+CTRL[ \t]*\\( *[^,']";
+ 
+ #define    CTRL_QUOTES_USE_TEST_CT  1
+ static tTestDesc aCtrl_Quotes_UseTests[] = {
+   { TT_EGREP,    zCtrl_Quotes_UseSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Ctrl_Quotes_Use
+  */
+ static const char* apzCtrl_Quotes_UsePatch[] = {
+     "char_macro_use",
+     "CTRL",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Cxx_Unready fix
+  */
+ tSCC zCxx_UnreadyName[] =
+      "cxx_unready";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zCxx_UnreadyList[] =
+   "|sys/mman.h|rpc/types.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzCxx_UnreadyMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zCxx_UnreadySelect0[] =
+        "[^#]+malloc.*;";
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zCxx_UnreadyBypass0[] =
+        "\"C\"|__BEGIN_DECLS";
+ 
+ #define    CXX_UNREADY_TEST_CT  2
+ static tTestDesc aCxx_UnreadyTests[] = {
+   { TT_NEGREP,   zCxx_UnreadyBypass0, (regex_t*)NULL },
+   { TT_EGREP,    zCxx_UnreadySelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Cxx_Unready
+  */
+ static const char* apzCxx_UnreadyPatch[] = {
+     "wrap",
+     "#ifdef __cplusplus\n\
+ extern \"C\" {\n\
+ #endif\n",
+     "#ifdef __cplusplus\n\
+ }\n\
+ #endif\n",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Darwin_Gcc4_Breakage fix
+  */
+ tSCC zDarwin_Gcc4_BreakageName[] =
+      "darwin_gcc4_breakage";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zDarwin_Gcc4_BreakageList[] =
+   "|AvailabilityMacros.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzDarwin_Gcc4_BreakageMachs[] = {
+         "*-*-darwin*",
+         (const char*)NULL };
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zDarwin_Gcc4_BreakageSelect0[] =
+        "\\(__GNUC__ >= 3\\) && \\(__GNUC_MINOR__ >= 1\\)";
+ 
+ #define    DARWIN_GCC4_BREAKAGE_TEST_CT  1
+ static tTestDesc aDarwin_Gcc4_BreakageTests[] = {
+   { TT_EGREP,    zDarwin_Gcc4_BreakageSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Darwin_Gcc4_Breakage
+  */
+ static const char* apzDarwin_Gcc4_BreakagePatch[] = {
+     "format",
+     "((__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Darwin_Private_Extern fix
+  */
+ tSCC zDarwin_Private_ExternName[] =
+      "darwin_private_extern";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zDarwin_Private_ExternList[] =
+   "|mach-o/dyld.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzDarwin_Private_ExternMachs[] = {
+         "*-*-darwin*",
+         (const char*)NULL };
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zDarwin_Private_ExternSelect0[] =
+        "__private_extern__ [a-z_]+ _dyld_";
+ 
+ #define    DARWIN_PRIVATE_EXTERN_TEST_CT  1
+ static tTestDesc aDarwin_Private_ExternTests[] = {
+   { TT_EGREP,    zDarwin_Private_ExternSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Darwin_Private_Extern
+  */
+ static const char* apzDarwin_Private_ExternPatch[] = {
+     "format",
+     "extern",
+     "__private_extern__",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Dec_Intern_Asm fix
+  */
+ tSCC zDec_Intern_AsmName[] =
+      "dec_intern_asm";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zDec_Intern_AsmList[] =
+   "|c_asm.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzDec_Intern_AsmMachs (const char**)NULL
+ #define DEC_INTERN_ASM_TEST_CT  0
+ #define aDec_Intern_AsmTests   (tTestDesc*)NULL
+ 
+ /*
+  *  Fix Command Arguments for Dec_Intern_Asm
+  */
+ static const char* apzDec_Intern_AsmPatch[] = { "sed",
+     "-e", "/^[ \t]*float[ \t]*fasm/i\\\n\
+ #ifdef __DECC\n",
+     "-e", "/^[ \t]*#[ \t]*pragma[ \t]*intrinsic([ \t]*dasm/a\\\n\
+ #endif\n",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Djgpp_Wchar_H fix
+  */
+ tSCC zDjgpp_Wchar_HName[] =
+      "djgpp_wchar_h";
+ 
+ /*
+  *  File name selection pattern
+  */
+ #define zDjgpp_Wchar_HList (char*)NULL
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzDjgpp_Wchar_HMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zDjgpp_Wchar_HSelect0[] =
+        "__DJ_wint_t";
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zDjgpp_Wchar_HBypass0[] =
+        "sys/djtypes.h";
+ 
+ #define    DJGPP_WCHAR_H_TEST_CT  2
+ static tTestDesc aDjgpp_Wchar_HTests[] = {
+   { TT_NEGREP,   zDjgpp_Wchar_HBypass0, (regex_t*)NULL },
+   { TT_EGREP,    zDjgpp_Wchar_HSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Djgpp_Wchar_H
+  */
+ static const char* apzDjgpp_Wchar_HPatch[] = {
+     "format",
+     "%0\n\
+ #include <sys/djtypes.h>",
+     "#include <stddef.h>",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Ecd_Cursor fix
+  */
+ tSCC zEcd_CursorName[] =
+      "ecd_cursor";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zEcd_CursorList[] =
+   "|sunwindow/win_lock.h|sunwindow/win_cursor.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzEcd_CursorMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zEcd_CursorSelect0[] =
+        "ecd\\.cursor";
+ 
+ #define    ECD_CURSOR_TEST_CT  1
+ static tTestDesc aEcd_CursorTests[] = {
+   { TT_EGREP,    zEcd_CursorSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Ecd_Cursor
+  */
+ static const char* apzEcd_CursorPatch[] = {
+     "format",
+     "ecd_cursor",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Exception_Structure fix
+  */
+ tSCC zException_StructureName[] =
+      "exception_structure";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zException_StructureList[] =
+   "|math.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzException_StructureMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zException_StructureSelect0[] =
+        "matherr";
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zException_StructureBypass0[] =
+        "matherr.*(struct exception|__MATH_EXCEPTION|[ \\t]*__FP_EXCEPTION[ \\t]*\\*[ \\t]*)";
+ 
+ #define    EXCEPTION_STRUCTURE_TEST_CT  2
+ static tTestDesc aException_StructureTests[] = {
+   { TT_NEGREP,   zException_StructureBypass0, (regex_t*)NULL },
+   { TT_EGREP,    zException_StructureSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Exception_Structure
+  */
+ static const char* apzException_StructurePatch[] = {
+     "wrap",
+     "struct exception;\n",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Freebsd_Gcc3_Breakage fix
+  */
+ tSCC zFreebsd_Gcc3_BreakageName[] =
+      "freebsd_gcc3_breakage";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zFreebsd_Gcc3_BreakageList[] =
+   "|sys/cdefs.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzFreebsd_Gcc3_BreakageMachs[] = {
+         "*-*-freebsd*",
+         (const char*)NULL };
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zFreebsd_Gcc3_BreakageSelect0[] =
+        "^#if __GNUC__ == 2 && __GNUC_MINOR__ >= 7$";
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zFreebsd_Gcc3_BreakageBypass0[] =
+        "__GNUC__[ \\t]*([>=]=[ \\t]*[3-9]|>[ \\t]*2)";
+ 
+ #define    FREEBSD_GCC3_BREAKAGE_TEST_CT  2
+ static tTestDesc aFreebsd_Gcc3_BreakageTests[] = {
+   { TT_NEGREP,   zFreebsd_Gcc3_BreakageBypass0, (regex_t*)NULL },
+   { TT_EGREP,    zFreebsd_Gcc3_BreakageSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Freebsd_Gcc3_Breakage
+  */
+ static const char* apzFreebsd_Gcc3_BreakagePatch[] = {
+     "format",
+     "%0 || __GNUC__ >= 3",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Freebsd_Gcc4_Breakage fix
+  */
+ tSCC zFreebsd_Gcc4_BreakageName[] =
+      "freebsd_gcc4_breakage";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zFreebsd_Gcc4_BreakageList[] =
+   "|sys/cdefs.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzFreebsd_Gcc4_BreakageMachs[] = {
+         "*-*-freebsd*",
+         (const char*)NULL };
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zFreebsd_Gcc4_BreakageSelect0[] =
+        "^#if __GNUC__ == 2 && __GNUC_MINOR__ >= 7 \\|\\| __GNUC__ == 3$";
+ 
+ #define    FREEBSD_GCC4_BREAKAGE_TEST_CT  1
+ static tTestDesc aFreebsd_Gcc4_BreakageTests[] = {
+   { TT_EGREP,    zFreebsd_Gcc4_BreakageSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Freebsd_Gcc4_Breakage
+  */
+ static const char* apzFreebsd_Gcc4_BreakagePatch[] = {
+     "format",
+     "#if __GNUC__ == 2 && __GNUC_MINOR__ >= 7 || __GNUC__ >= 3",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Gnu_Types fix
+  */
+ tSCC zGnu_TypesName[] =
+      "gnu_types";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zGnu_TypesList[] =
+   "|sys/types.h|stdlib.h|sys/stdtypes.h|stddef.h|memory.h|unistd.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzGnu_TypesMachs[] = {
+         "*-*-solaris2.1[0-9]*",
+         (const char*)NULL };
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zGnu_TypesSelect0[] =
+        "^[ \t]*typedef[ \t]+.*[ \t](ptrdiff|size|wchar)_t;";
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zGnu_TypesBypass0[] =
+        "_GCC_(PTRDIFF|SIZE|WCHAR)_T";
+ 
+ #define    GNU_TYPES_TEST_CT  2
+ static tTestDesc aGnu_TypesTests[] = {
+   { TT_NEGREP,   zGnu_TypesBypass0, (regex_t*)NULL },
+   { TT_EGREP,    zGnu_TypesSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Gnu_Types
+  */
+ static const char* apzGnu_TypesPatch[] = {
+     "gnu_type",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Hp_Inline fix
+  */
+ tSCC zHp_InlineName[] =
+      "hp_inline";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zHp_InlineList[] =
+   "|sys/spinlock.h|machine/machparam.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzHp_InlineMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zHp_InlineSelect0[] =
+        "[ \t]*#[ \t]*include[ \t]+\"\\.\\./machine/";
+ 
+ #define    HP_INLINE_TEST_CT  1
+ static tTestDesc aHp_InlineTests[] = {
+   { TT_EGREP,    zHp_InlineSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Hp_Inline
+  */
+ static const char* apzHp_InlinePatch[] = {
+     "format",
+     "%1<machine/%2.h>",
+     "([ \t]*#[ \t]*include[ \t]+)\"\\.\\./machine/([a-z]+)\\.h\"",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Hp_Sysfile fix
+  */
+ tSCC zHp_SysfileName[] =
+      "hp_sysfile";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zHp_SysfileList[] =
+   "|sys/file.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzHp_SysfileMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zHp_SysfileSelect0[] =
+        "HPUX_SOURCE";
+ 
+ #define    HP_SYSFILE_TEST_CT  1
+ static tTestDesc aHp_SysfileTests[] = {
+   { TT_EGREP,    zHp_SysfileSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Hp_Sysfile
+  */
+ static const char* apzHp_SysfilePatch[] = {
+     "format",
+     "(struct file *, ...)",
+     "\\(\\.\\.\\.\\)",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Hpux10_Cpp_Pow_Inline fix
+  */
+ tSCC zHpux10_Cpp_Pow_InlineName[] =
+      "hpux10_cpp_pow_inline";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zHpux10_Cpp_Pow_InlineList[] =
+   "|fixinc-test-limits.h|math.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzHpux10_Cpp_Pow_InlineMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zHpux10_Cpp_Pow_InlineSelect0[] =
+        "^# +ifdef +__cplusplus\n\
+  +\\}\n\
+  +inline +double +pow\\(double +__d,int +__expon\\) +\\{\n\
+ [ \t]+return +pow\\(__d,\\(double\\)__expon\\);\n\
+  +\\}\n\
+  +extern +\"C\" +\\{\n\
+ #else\n\
+ # +endif";
+ 
+ #define    HPUX10_CPP_POW_INLINE_TEST_CT  1
+ static tTestDesc aHpux10_Cpp_Pow_InlineTests[] = {
+   { TT_EGREP,    zHpux10_Cpp_Pow_InlineSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Hpux10_Cpp_Pow_Inline
+  */
+ static const char* apzHpux10_Cpp_Pow_InlinePatch[] = {
+     "format",
+     "",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Hpux11_Cpp_Pow_Inline fix
+  */
+ tSCC zHpux11_Cpp_Pow_InlineName[] =
+      "hpux11_cpp_pow_inline";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zHpux11_Cpp_Pow_InlineList[] =
+   "|math.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzHpux11_Cpp_Pow_InlineMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zHpux11_Cpp_Pow_InlineSelect0[] =
+        " +inline double pow\\(double d,int expon\\) \\{\n\
+  +return pow\\(d, \\(double\\)expon\\);\n\
+  +\\}\n";
+ 
+ #define    HPUX11_CPP_POW_INLINE_TEST_CT  1
+ static tTestDesc aHpux11_Cpp_Pow_InlineTests[] = {
+   { TT_EGREP,    zHpux11_Cpp_Pow_InlineSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Hpux11_Cpp_Pow_Inline
+  */
+ static const char* apzHpux11_Cpp_Pow_InlinePatch[] = {
+     "format",
+     "",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Hpux10_Ctype_Declarations1 fix
+  */
+ tSCC zHpux10_Ctype_Declarations1Name[] =
+      "hpux10_ctype_declarations1";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zHpux10_Ctype_Declarations1List[] =
+   "|ctype.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzHpux10_Ctype_Declarations1Machs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zHpux10_Ctype_Declarations1Select0[] =
+        "^#[ \t]*define _toupper\\(__c\\)[ \t]*__toupper\\(__c\\)";
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zHpux10_Ctype_Declarations1Bypass0[] =
+        "^[ \t]*extern[ \t]*int[ \t]*__tolower[ \t]*\\(";
+ 
+ #define    HPUX10_CTYPE_DECLARATIONS1_TEST_CT  2
+ static tTestDesc aHpux10_Ctype_Declarations1Tests[] = {
+   { TT_NEGREP,   zHpux10_Ctype_Declarations1Bypass0, (regex_t*)NULL },
+   { TT_EGREP,    zHpux10_Ctype_Declarations1Select0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Hpux10_Ctype_Declarations1
+  */
+ static const char* apzHpux10_Ctype_Declarations1Patch[] = {
+     "format",
+     "#ifdef _PROTOTYPES\n\
+ extern int __tolower(int);\n\
+ extern int __toupper(int);\n\
+ #else /* NOT _PROTOTYPES */\n\
+ extern int __tolower();\n\
+ extern int __toupper();\n\
+ #endif /* _PROTOTYPES */\n\n\
+ %0\n",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Hpux10_Ctype_Declarations2 fix
+  */
+ tSCC zHpux10_Ctype_Declarations2Name[] =
+      "hpux10_ctype_declarations2";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zHpux10_Ctype_Declarations2List[] =
+   "|ctype.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzHpux10_Ctype_Declarations2Machs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zHpux10_Ctype_Declarations2Select0[] =
+        "^#  if defined\\(_SB_CTYPE_MACROS\\) && \\!defined\\(__lint\\)";
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zHpux10_Ctype_Declarations2Bypass0[] =
+        "^[ \t]*extern[ \t]*int[ \t]*_isalnum[ \t]*\\(";
+ 
+ #define    HPUX10_CTYPE_DECLARATIONS2_TEST_CT  2
+ static tTestDesc aHpux10_Ctype_Declarations2Tests[] = {
+   { TT_NEGREP,   zHpux10_Ctype_Declarations2Bypass0, (regex_t*)NULL },
+   { TT_EGREP,    zHpux10_Ctype_Declarations2Select0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Hpux10_Ctype_Declarations2
+  */
+ static const char* apzHpux10_Ctype_Declarations2Patch[] = {
+     "format",
+     "%0\n\n\
+ #ifdef _PROTOTYPES\n\
+      extern int _isalnum(int);\n\
+      extern int _isalpha(int);\n\
+      extern int _iscntrl(int);\n\
+      extern int _isdigit(int);\n\
+      extern int _isgraph(int);\n\
+      extern int _islower(int);\n\
+      extern int _isprint(int);\n\
+      extern int _ispunct(int);\n\
+      extern int _isspace(int);\n\
+      extern int _isupper(int);\n\
+      extern int _isxdigit(int);\n\
+ #  else /* not _PROTOTYPES */\n\
+      extern int _isalnum();\n\
+      extern int _isalpha();\n\
+      extern int _iscntrl();\n\
+      extern int _isdigit();\n\
+      extern int _isgraph();\n\
+      extern int _islower();\n\
+      extern int _isprint();\n\
+      extern int _ispunct();\n\
+      extern int _isspace();\n\
+      extern int _isupper();\n\
+      extern int _isxdigit();\n\
+ #endif /* _PROTOTYPES */\n",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Hpux10_Stdio_Declarations fix
+  */
+ tSCC zHpux10_Stdio_DeclarationsName[] =
+      "hpux10_stdio_declarations";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zHpux10_Stdio_DeclarationsList[] =
+   "|stdio.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzHpux10_Stdio_DeclarationsMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zHpux10_Stdio_DeclarationsSelect0[] =
+        "^#[ \t]*define _iob[ \t]*__iob";
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zHpux10_Stdio_DeclarationsBypass0[] =
+        "^[ \t]*extern[ \t]*int[ \t]*vsnprintf[ \t]*\\(";
+ 
+ #define    HPUX10_STDIO_DECLARATIONS_TEST_CT  2
+ static tTestDesc aHpux10_Stdio_DeclarationsTests[] = {
+   { TT_NEGREP,   zHpux10_Stdio_DeclarationsBypass0, (regex_t*)NULL },
+   { TT_EGREP,    zHpux10_Stdio_DeclarationsSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Hpux10_Stdio_Declarations
+  */
+ static const char* apzHpux10_Stdio_DeclarationsPatch[] = {
+     "format",
+     "%0\n\n\
+ #  if defined(__STDC__) || defined(__cplusplus)\n\
+      extern int snprintf(char *, size_t, const char *, ...);\n\
+      extern int vsnprintf(char *, size_t, const char *, __va_list);\n\
+ #  else /* not __STDC__) || __cplusplus */\n\
+      extern int snprintf();\n\
+      extern int vsnprintf();\n\
+ #  endif /* __STDC__) || __cplusplus */\n",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Hpux11_Abs fix
+  */
+ tSCC zHpux11_AbsName[] =
+      "hpux11_abs";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zHpux11_AbsList[] =
+   "|stdlib.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzHpux11_AbsMachs[] = {
+         "ia64-hp-hpux11*",
+         (const char*)NULL };
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zHpux11_AbsSelect0[] =
+        "ifndef _MATH_INCLUDED";
+ 
+ #define    HPUX11_ABS_TEST_CT  1
+ static tTestDesc aHpux11_AbsTests[] = {
+   { TT_EGREP,    zHpux11_AbsSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Hpux11_Abs
+  */
+ static const char* apzHpux11_AbsPatch[] = {
+     "format",
+     "if !defined(_MATH_INCLUDED) || defined(__GNUG__)",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Hpux11_Fabsf fix
+  */
+ tSCC zHpux11_FabsfName[] =
+      "hpux11_fabsf";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zHpux11_FabsfList[] =
+   "|math.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzHpux11_FabsfMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zHpux11_FabsfSelect0[] =
+        "^[ \t]*#[ \t]*define[ \t]+fabsf\\(.*";
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zHpux11_FabsfBypass0[] =
+        "__cplusplus";
+ 
+ #define    HPUX11_FABSF_TEST_CT  2
+ static tTestDesc aHpux11_FabsfTests[] = {
+   { TT_NEGREP,   zHpux11_FabsfBypass0, (regex_t*)NULL },
+   { TT_EGREP,    zHpux11_FabsfSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Hpux11_Fabsf
+  */
+ static const char* apzHpux11_FabsfPatch[] = {
+     "format",
+     "#ifndef __cplusplus\n\
+ %0\n\
+ #endif",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Hpux11_Size_T fix
+  */
+ tSCC zHpux11_Size_TName[] =
+      "hpux11_size_t";
+ 
+ /*
+  *  File name selection pattern
+  */
+ #define zHpux11_Size_TList (char*)NULL
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzHpux11_Size_TMachs[] = {
+         "*-hp-hpux11*",
+         (const char*)NULL };
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zHpux11_Size_TSelect0[] =
+        "__size_t";
+ 
+ #define    HPUX11_SIZE_T_TEST_CT  1
+ static tTestDesc aHpux11_Size_TTests[] = {
+   { TT_EGREP,    zHpux11_Size_TSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Hpux11_Size_T
+  */
+ static const char* apzHpux11_Size_TPatch[] = {
+     "format",
+     "_hpux_size_t",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Hpux11_Snprintf fix
+  */
+ tSCC zHpux11_SnprintfName[] =
+      "hpux11_snprintf";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zHpux11_SnprintfList[] =
+   "|stdio.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzHpux11_SnprintfMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zHpux11_SnprintfSelect0[] =
+        "(extern int snprintf *\\(char *\\*, *(|__|_hpux_)size_t,) *(char *\\*, *\\.\\.\\.\\);)";
+ 
+ #define    HPUX11_SNPRINTF_TEST_CT  1
+ static tTestDesc aHpux11_SnprintfTests[] = {
+   { TT_EGREP,    zHpux11_SnprintfSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Hpux11_Snprintf
+  */
+ static const char* apzHpux11_SnprintfPatch[] = {
+     "format",
+     "%1 const %3",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Hpux11_Uint32_C fix
+  */
+ tSCC zHpux11_Uint32_CName[] =
+      "hpux11_uint32_c";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zHpux11_Uint32_CList[] =
+   "|inttypes.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzHpux11_Uint32_CMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zHpux11_Uint32_CSelect0[] =
+        "^#define UINT32_C\\(__c\\)[ \t]*__CONCAT__\\(__CONCAT_U__\\(__c\\),l\\)";
+ 
+ #define    HPUX11_UINT32_C_TEST_CT  1
+ static tTestDesc aHpux11_Uint32_CTests[] = {
+   { TT_EGREP,    zHpux11_Uint32_CSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Hpux11_Uint32_C
+  */
+ static const char* apzHpux11_Uint32_CPatch[] = {
+     "format",
+     "#define UINT32_C(__c) __CONCAT__(__c,ul)",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Hpux11_Vsnprintf fix
+  */
+ tSCC zHpux11_VsnprintfName[] =
+      "hpux11_vsnprintf";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zHpux11_VsnprintfList[] =
+   "|stdio.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzHpux11_VsnprintfMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zHpux11_VsnprintfSelect0[] =
+        "(extern int vsnprintf\\(char \\*, _[hpux]*_size_t, const char \\*,) __va__list\\);";
+ 
+ #define    HPUX11_VSNPRINTF_TEST_CT  1
+ static tTestDesc aHpux11_VsnprintfTests[] = {
+   { TT_EGREP,    zHpux11_VsnprintfSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Hpux11_Vsnprintf
+  */
+ static const char* apzHpux11_VsnprintfPatch[] = {
+     "format",
+     "%1 __va_list);",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Hpux8_Bogus_Inlines fix
+  */
+ tSCC zHpux8_Bogus_InlinesName[] =
+      "hpux8_bogus_inlines";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zHpux8_Bogus_InlinesList[] =
+   "|math.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzHpux8_Bogus_InlinesMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zHpux8_Bogus_InlinesSelect0[] =
+        "inline";
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zHpux8_Bogus_InlinesBypass0[] =
+        "__GNUG__";
+ 
+ #define    HPUX8_BOGUS_INLINES_TEST_CT  2
+ static tTestDesc aHpux8_Bogus_InlinesTests[] = {
+   { TT_NEGREP,   zHpux8_Bogus_InlinesBypass0, (regex_t*)NULL },
+   { TT_EGREP,    zHpux8_Bogus_InlinesSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Hpux8_Bogus_Inlines
+  */
+ static const char* apzHpux8_Bogus_InlinesPatch[] = { "sed",
+     "-e", "s@inline int abs(int [a-z][a-z]*) {.*}@extern \"C\" int abs(int);@",
+     "-e", "s@inline double abs(double [a-z][a-z]*) {.*}@@",
+     "-e", "s@inline int sqr(int [a-z][a-z]*) {.*}@@",
+     "-e", "s@inline double sqr(double [a-z][a-z]*) {.*}@@",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Hpux_Ctype_Macros fix
+  */
+ tSCC zHpux_Ctype_MacrosName[] =
+      "hpux_ctype_macros";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zHpux_Ctype_MacrosList[] =
+   "|ctype.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzHpux_Ctype_MacrosMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zHpux_Ctype_MacrosSelect0[] =
+        "((: |\\()__SB_masks \\? )(__SB_masks\\[__(alnum|c)\\] & _IS)";
+ 
+ #define    HPUX_CTYPE_MACROS_TEST_CT  1
+ static tTestDesc aHpux_Ctype_MacrosTests[] = {
+   { TT_EGREP,    zHpux_Ctype_MacrosSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Hpux_Ctype_Macros
+  */
+ static const char* apzHpux_Ctype_MacrosPatch[] = {
+     "format",
+     "%1(int)%3",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Hpux_Htonl fix
+  */
+ tSCC zHpux_HtonlName[] =
+      "hpux_htonl";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zHpux_HtonlList[] =
+   "|netinet/in.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzHpux_HtonlMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zHpux_HtonlSelect0[] =
+        "#ifndef _XOPEN_SOURCE_EXTENDED\n\
+ (/\\*\n\
+  \\* Macros for number representation conversion\\.\n\
+  \\*/\n\
+ #ifndef ntohl)";
+ 
+ #define    HPUX_HTONL_TEST_CT  1
+ static tTestDesc aHpux_HtonlTests[] = {
+   { TT_EGREP,    zHpux_HtonlSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Hpux_Htonl
+  */
+ static const char* apzHpux_HtonlPatch[] = {
+     "format",
+     "#if 1\n\
+ %1",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Hpux_Long_Double fix
+  */
+ tSCC zHpux_Long_DoubleName[] =
+      "hpux_long_double";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zHpux_Long_DoubleList[] =
+   "|stdlib.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzHpux_Long_DoubleMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zHpux_Long_DoubleSelect0[] =
+        "extern[ \t]long_double[ \t]strtold";
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zHpux_Long_DoubleBypass0[] =
+        "long_double_t";
+ 
+ #define    HPUX_LONG_DOUBLE_TEST_CT  2
+ static tTestDesc aHpux_Long_DoubleTests[] = {
+   { TT_NEGREP,   zHpux_Long_DoubleBypass0, (regex_t*)NULL },
+   { TT_EGREP,    zHpux_Long_DoubleSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Hpux_Long_Double
+  */
+ static const char* apzHpux_Long_DoublePatch[] = { "sed",
+     "-e", "/^#[ \t]*ifndef _LONG_DOUBLE/,/\\/\\* _LONG_DOUBLE \\*\\//D",
+     "-e", "s/long_double/long double/g",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Hpux_Systime fix
+  */
+ tSCC zHpux_SystimeName[] =
+      "hpux_systime";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zHpux_SystimeList[] =
+   "|sys/time.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzHpux_SystimeMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zHpux_SystimeSelect0[] =
+        "^extern struct sigevent;";
+ 
+ #define    HPUX_SYSTIME_TEST_CT  1
+ static tTestDesc aHpux_SystimeTests[] = {
+   { TT_EGREP,    zHpux_SystimeSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Hpux_Systime
+  */
+ static const char* apzHpux_SystimePatch[] = {
+     "format",
+     "struct sigevent;",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Int_Abort_Free_And_Exit fix
+  */
+ tSCC zInt_Abort_Free_And_ExitName[] =
+      "int_abort_free_and_exit";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zInt_Abort_Free_And_ExitList[] =
+   "|stdlib.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzInt_Abort_Free_And_ExitMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zInt_Abort_Free_And_ExitSelect0[] =
+        "int[ \t]+(abort|free|exit)[ \t]*\\(";
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zInt_Abort_Free_And_ExitBypass0[] =
+        "_CLASSIC_ANSI_TYPES";
+ 
+ #define    INT_ABORT_FREE_AND_EXIT_TEST_CT  2
+ static tTestDesc aInt_Abort_Free_And_ExitTests[] = {
+   { TT_NEGREP,   zInt_Abort_Free_And_ExitBypass0, (regex_t*)NULL },
+   { TT_EGREP,    zInt_Abort_Free_And_ExitSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Int_Abort_Free_And_Exit
+  */
+ static const char* apzInt_Abort_Free_And_ExitPatch[] = {
+     "format",
+     "void\t%1(",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Io_Quotes_Def fix
+  */
+ tSCC zIo_Quotes_DefName[] =
+      "io_quotes_def";
+ 
+ /*
+  *  File name selection pattern
+  */
+ #define zIo_Quotes_DefList (char*)NULL
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzIo_Quotes_DefMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zIo_Quotes_DefSelect0[] =
+        "define[ \t]+[A-Z0-9_]+IO[A-Z]*\\([a-zA-Z][,)]";
+ 
+ #define    IO_QUOTES_DEF_TEST_CT  1
+ static tTestDesc aIo_Quotes_DefTests[] = {
+   { TT_EGREP,    zIo_Quotes_DefSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Io_Quotes_Def
+  */
+ static const char* apzIo_Quotes_DefPatch[] = {
+     "char_macro_def",
+     "IO",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Io_Quotes_Use fix
+  */
+ tSCC zIo_Quotes_UseName[] =
+      "io_quotes_use";
+ 
+ /*
+  *  File name selection pattern
+  */
+ #define zIo_Quotes_UseList (char*)NULL
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzIo_Quotes_UseMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zIo_Quotes_UseSelect0[] =
+        "define[ \t]+[A-Z0-9_]+[ \t]+[A-Z0-9_]+IO[A-Z]*[ \t]*\\( *[^,']";
+ 
+ #define    IO_QUOTES_USE_TEST_CT  1
+ static tTestDesc aIo_Quotes_UseTests[] = {
+   { TT_EGREP,    zIo_Quotes_UseSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Io_Quotes_Use
+  */
+ static const char* apzIo_Quotes_UsePatch[] = {
+     "char_macro_use",
+     "IO",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Ip_Missing_Semi fix
+  */
+ tSCC zIp_Missing_SemiName[] =
+      "ip_missing_semi";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zIp_Missing_SemiList[] =
+   "|netinet/ip.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzIp_Missing_SemiMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zIp_Missing_SemiSelect0[] =
+        "}$";
+ 
+ #define    IP_MISSING_SEMI_TEST_CT  1
+ static tTestDesc aIp_Missing_SemiTests[] = {
+   { TT_EGREP,    zIp_Missing_SemiSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Ip_Missing_Semi
+  */
+ static const char* apzIp_Missing_SemiPatch[] = { "sed",
+     "-e", "/^struct/,/^};/s/}$/};/",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Irix___Restrict fix
+  */
+ tSCC zIrix___RestrictName[] =
+      "irix___restrict";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zIrix___RestrictList[] =
+   "|internal/sgimacros.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzIrix___RestrictMachs[] = {
+         "mips-sgi-irix6.5",
+         (const char*)NULL };
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zIrix___RestrictSelect0[] =
+        "(#ifdef __c99\n\
+ )(#[ \t]*define __restrict restrict)";
+ 
+ #define    IRIX___RESTRICT_TEST_CT  1
+ static tTestDesc aIrix___RestrictTests[] = {
+   { TT_EGREP,    zIrix___RestrictSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Irix___Restrict
+  */
+ static const char* apzIrix___RestrictPatch[] = {
+     "format",
+     "%1#  ifndef __cplusplus\n\
+ %2\n\
+ #  endif",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Irix___Generic1 fix
+  */
+ tSCC zIrix___Generic1Name[] =
+      "irix___generic1";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zIrix___Generic1List[] =
+   "|internal/math_core.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzIrix___Generic1Machs[] = {
+         "mips-sgi-irix6.5",
+         (const char*)NULL };
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zIrix___Generic1Select0[] =
+        "#define ([a-z]+)\\(x\\) *__generic.*";
+ 
+ #define    IRIX___GENERIC1_TEST_CT  1
+ static tTestDesc aIrix___Generic1Tests[] = {
+   { TT_EGREP,    zIrix___Generic1Select0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Irix___Generic1
+  */
+ static const char* apzIrix___Generic1Patch[] = {
+     "format",
+     "extern int %1(double);\n\
+ extern int %1f(float);\n\
+ extern int %1l(long double);\n\
+ #define %1(x) (sizeof(x) == sizeof(double) ? _%1(x) \\\n\
+                : sizeof(x) == sizeof(float) ? _%1f(x) \\\n\
+                : _%1l(x))\n",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Irix___Generic2 fix
+  */
+ tSCC zIrix___Generic2Name[] =
+      "irix___generic2";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zIrix___Generic2List[] =
+   "|internal/math_core.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzIrix___Generic2Machs[] = {
+         "mips-sgi-irix6.5",
+         (const char*)NULL };
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zIrix___Generic2Select0[] =
+        "#define ([a-z]+)\\(x,y\\) *__generic.*";
+ 
+ #define    IRIX___GENERIC2_TEST_CT  1
+ static tTestDesc aIrix___Generic2Tests[] = {
+   { TT_EGREP,    zIrix___Generic2Select0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Irix___Generic2
+  */
+ static const char* apzIrix___Generic2Patch[] = {
+     "format",
+     "#define %1(x,y) \\\n\
+   ((sizeof(x)<=4 && sizeof(y)<=4) ? _%1f(x,y) \\\n\
+    : (sizeof(x)<=8 && sizeof(y)<=8) ? _%1(x,y) \\\n\
+    : _%1l(x,y))\n",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Irix_Asm_Apostrophe fix
+  */
+ tSCC zIrix_Asm_ApostropheName[] =
+      "irix_asm_apostrophe";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zIrix_Asm_ApostropheList[] =
+   "|sys/asm.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzIrix_Asm_ApostropheMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zIrix_Asm_ApostropheSelect0[] =
+        "^[ \t]*#.*[Ww]e're";
+ 
+ #define    IRIX_ASM_APOSTROPHE_TEST_CT  1
+ static tTestDesc aIrix_Asm_ApostropheTests[] = {
+   { TT_EGREP,    zIrix_Asm_ApostropheSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Irix_Asm_Apostrophe
+  */
+ static const char* apzIrix_Asm_ApostrophePatch[] = {
+     "format",
+     "%1 are",
+     "^([ \t]*#.*[Ww]e)'re",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Irix_Limits_Const fix
+  */
+ tSCC zIrix_Limits_ConstName[] =
+      "irix_limits_const";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zIrix_Limits_ConstList[] =
+   "|fixinc-test-limits.h|limits.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzIrix_Limits_ConstMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zIrix_Limits_ConstSelect0[] =
+        "^extern const ";
+ 
+ #define    IRIX_LIMITS_CONST_TEST_CT  1
+ static tTestDesc aIrix_Limits_ConstTests[] = {
+   { TT_EGREP,    zIrix_Limits_ConstSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Irix_Limits_Const
+  */
+ static const char* apzIrix_Limits_ConstPatch[] = {
+     "format",
+     "extern __const ",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Irix_Socklen_T fix
+  */
+ tSCC zIrix_Socklen_TName[] =
+      "irix_socklen_t";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zIrix_Socklen_TList[] =
+   "|sys/socket.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzIrix_Socklen_TMachs[] = {
+         "mips-sgi-irix6.5",
+         (const char*)NULL };
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zIrix_Socklen_TSelect0[] =
+        "(#define _SOCKLEN_T\n\
+ )(typedef u_int32_t socklen_t;)";
+ 
+ #define    IRIX_SOCKLEN_T_TEST_CT  1
+ static tTestDesc aIrix_Socklen_TTests[] = {
+   { TT_EGREP,    zIrix_Socklen_TSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Irix_Socklen_T
+  */
+ static const char* apzIrix_Socklen_TPatch[] = {
+     "format",
+     "%1#if _NO_XOPEN4 && _NO_XOPEN5\n\
+ typedef int socklen_t;\n\
+ #else\n\
+ %2\n\
+ #endif /* _NO_XOPEN4 && _NO_XOPEN5 */",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Irix_Stdio_Va_List fix
+  */
+ tSCC zIrix_Stdio_Va_ListName[] =
+      "irix_stdio_va_list";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zIrix_Stdio_Va_ListList[] =
+   "|stdio.h|internal/stdio_core.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzIrix_Stdio_Va_ListMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zIrix_Stdio_Va_ListSelect0[] =
+        "/\\* va_list \\*/ char \\*";
+ 
+ #define    IRIX_STDIO_VA_LIST_TEST_CT  1
+ static tTestDesc aIrix_Stdio_Va_ListTests[] = {
+   { TT_EGREP,    zIrix_Stdio_Va_ListSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Irix_Stdio_Va_List
+  */
+ static const char* apzIrix_Stdio_Va_ListPatch[] = {
+     "format",
+     "__gnuc_va_list",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Irix_Wcsftime fix
+  */
+ tSCC zIrix_WcsftimeName[] =
+      "irix_wcsftime";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zIrix_WcsftimeList[] =
+   "|internal/wchar_core.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzIrix_WcsftimeMachs[] = {
+         "mips-sgi-irix6.5",
+         (const char*)NULL };
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zIrix_WcsftimeSelect0[] =
+        "#if _NO_XOPEN5\n\
+ (extern size_t[ \t]+wcsftime.*const char *.*)";
+ 
+ #define    IRIX_WCSFTIME_TEST_CT  1
+ static tTestDesc aIrix_WcsftimeTests[] = {
+   { TT_EGREP,    zIrix_WcsftimeSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Irix_Wcsftime
+  */
+ static const char* apzIrix_WcsftimePatch[] = {
+     "format",
+     "#if _NO_XOPEN5 && !defined(__c99)\n\
+ %1",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Isc_Fmod fix
+  */
+ tSCC zIsc_FmodName[] =
+      "isc_fmod";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zIsc_FmodList[] =
+   "|math.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzIsc_FmodMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zIsc_FmodSelect0[] =
+        "fmod\\(double\\)";
+ 
+ #define    ISC_FMOD_TEST_CT  1
+ static tTestDesc aIsc_FmodTests[] = {
+   { TT_EGREP,    zIsc_FmodSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Isc_Fmod
+  */
+ static const char* apzIsc_FmodPatch[] = {
+     "format",
+     "fmod(double, double)",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Isc_Omits_With_Stdc fix
+  */
+ tSCC zIsc_Omits_With_StdcName[] =
+      "isc_omits_with_stdc";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zIsc_Omits_With_StdcList[] =
+   "|stdio.h|math.h|ctype.h|sys/limits.h|sys/fcntl.h|sys/dirent.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzIsc_Omits_With_StdcMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zIsc_Omits_With_StdcSelect0[] =
+        "!defined\\(__STDC__\\) && !defined\\(_POSIX_SOURCE\\)";
+ 
+ #define    ISC_OMITS_WITH_STDC_TEST_CT  1
+ static tTestDesc aIsc_Omits_With_StdcTests[] = {
+   { TT_EGREP,    zIsc_Omits_With_StdcSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Isc_Omits_With_Stdc
+  */
+ static const char* apzIsc_Omits_With_StdcPatch[] = {
+     "format",
+     "!defined(_POSIX_SOURCE)",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Kandr_Concat fix
+  */
+ tSCC zKandr_ConcatName[] =
+      "kandr_concat";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zKandr_ConcatList[] =
+   "|sparc/asm_linkage.h|sun3/asm_linkage.h|sun3x/asm_linkage.h|sun4/asm_linkage.h|sun4c/asm_linkage.h|sun4m/asm_linkage.h|sun4c/debug/asm_linkage.h|sun4m/debug/asm_linkage.h|arm/as_support.h|arm/mc_type.h|arm/xcb.h|dev/chardefmac.h|dev/ps_irq.h|dev/screen.h|dev/scsi.h|sys/tty.h|Xm.acorn/XmP.h|bsd43/bsd43_.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzKandr_ConcatMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zKandr_ConcatSelect0[] =
+        "/\\*\\*/";
+ 
+ #define    KANDR_CONCAT_TEST_CT  1
+ static tTestDesc aKandr_ConcatTests[] = {
+   { TT_EGREP,    zKandr_ConcatSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Kandr_Concat
+  */
+ static const char* apzKandr_ConcatPatch[] = {
+     "format",
+     "##",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Libc1_G_Va_List fix
+  */
+ tSCC zLibc1_G_Va_ListName[] =
+      "libc1_G_va_list";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zLibc1_G_Va_ListList[] =
+   "|_G_config.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzLibc1_G_Va_ListMachs[] = {
+         "*-*-linux*libc1",
+         (const char*)NULL };
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zLibc1_G_Va_ListSelect0[] =
+        "typedef void \\* _G_va_list;";
+ 
+ #define    LIBC1_G_VA_LIST_TEST_CT  1
+ static tTestDesc aLibc1_G_Va_ListTests[] = {
+   { TT_EGREP,    zLibc1_G_Va_ListSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Libc1_G_Va_List
+  */
+ static const char* apzLibc1_G_Va_ListPatch[] = {
+     "format",
+     "typedef __builtin_va_list _G_va_list;",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Libc1_Ifdefd_Memx fix
+  */
+ tSCC zLibc1_Ifdefd_MemxName[] =
+      "libc1_ifdefd_memx";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zLibc1_Ifdefd_MemxList[] =
+   "|testing.h|string.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzLibc1_Ifdefd_MemxMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zLibc1_Ifdefd_MemxSelect0[] =
+        "' is a built-in function for gcc 2\\.x\\. \\*/";
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zLibc1_Ifdefd_MemxBypass0[] =
+        "__cplusplus";
+ 
+ #define    LIBC1_IFDEFD_MEMX_TEST_CT  2
+ static tTestDesc aLibc1_Ifdefd_MemxTests[] = {
+   { TT_NEGREP,   zLibc1_Ifdefd_MemxBypass0, (regex_t*)NULL },
+   { TT_EGREP,    zLibc1_Ifdefd_MemxSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Libc1_Ifdefd_Memx
+  */
+ static const char* apzLibc1_Ifdefd_MemxPatch[] = {
+     "format",
+     "%1",
+     "/\\* `mem...' is a built-in function for gcc 2\\.x\\. \\*/\n\
+ #if defined\\(__STDC__\\) && __GNUC__ < 2\n\
+ (/\\* .* \\*/\n\
+ extern [a-z_]+ mem.*(\n\
+ [^#].*)*;)\n\
+ #endif",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Linux_Ia64_Ucontext fix
+  */
+ tSCC zLinux_Ia64_UcontextName[] =
+      "linux_ia64_ucontext";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zLinux_Ia64_UcontextList[] =
+   "|sys/ucontext.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzLinux_Ia64_UcontextMachs[] = {
+         "ia64-*-linux*",
+         (const char*)NULL };
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zLinux_Ia64_UcontextSelect0[] =
+        "\\(\\(\\(char \\*\\) &\\(\\(struct sigcontext \\*\\) 0\\)->sc_gr\\[0\\]\\) - \\(char \\*\\) 0\\)";
+ 
+ #define    LINUX_IA64_UCONTEXT_TEST_CT  1
+ static tTestDesc aLinux_Ia64_UcontextTests[] = {
+   { TT_EGREP,    zLinux_Ia64_UcontextSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Linux_Ia64_Ucontext
+  */
+ static const char* apzLinux_Ia64_UcontextPatch[] = {
+     "format",
+     "__builtin_offsetof (struct sigcontext, sc_gr[0])",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Lynxos_No_Warning_In_Sys_Time_H fix
+  */
+ tSCC zLynxos_No_Warning_In_Sys_Time_HName[] =
+      "lynxos_no_warning_in_sys_time_h";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zLynxos_No_Warning_In_Sys_Time_HList[] =
+   "|sys/time.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzLynxos_No_Warning_In_Sys_Time_HMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zLynxos_No_Warning_In_Sys_Time_HSelect0[] =
+        "#warning[ \t]+Using <time.h> instead of <sys/time.h>";
+ 
+ #define    LYNXOS_NO_WARNING_IN_SYS_TIME_H_TEST_CT  1
+ static tTestDesc aLynxos_No_Warning_In_Sys_Time_HTests[] = {
+   { TT_EGREP,    zLynxos_No_Warning_In_Sys_Time_HSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Lynxos_No_Warning_In_Sys_Time_H
+  */
+ static const char* apzLynxos_No_Warning_In_Sys_Time_HPatch[] = {
+     "format",
+     "",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Lynxos_Missing_Putenv fix
+  */
+ tSCC zLynxos_Missing_PutenvName[] =
+      "lynxos_missing_putenv";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zLynxos_Missing_PutenvList[] =
+   "|stdlib.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzLynxos_Missing_PutenvMachs[] = {
+         "*-*-lynxos*",
+         (const char*)NULL };
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zLynxos_Missing_PutenvSelect0[] =
+        "extern char \\*getenv[ \t]*_AP\\(\\(const char \\*\\)\\);";
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zLynxos_Missing_PutenvBypass0[] =
+        "putenv[ \\t]*\\(";
+ 
+ #define    LYNXOS_MISSING_PUTENV_TEST_CT  2
+ static tTestDesc aLynxos_Missing_PutenvTests[] = {
+   { TT_NEGREP,   zLynxos_Missing_PutenvBypass0, (regex_t*)NULL },
+   { TT_EGREP,    zLynxos_Missing_PutenvSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Lynxos_Missing_Putenv
+  */
+ static const char* apzLynxos_Missing_PutenvPatch[] = {
+     "format",
+     "%0\n\
+ extern int putenv\t\t\t\t_AP((char *));",
+     "extern char \\*getenv[ \t]*_AP\\(\\(const char \\*\\)\\);",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Machine_Ansi_H_Va_List fix
+  */
+ tSCC zMachine_Ansi_H_Va_ListName[] =
+      "machine_ansi_h_va_list";
+ 
+ /*
+  *  File name selection pattern
+  */
+ #define zMachine_Ansi_H_Va_ListList (char*)NULL
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzMachine_Ansi_H_Va_ListMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zMachine_Ansi_H_Va_ListSelect0[] =
+        "define[ \t]+_BSD_VA_LIST_[ \t]";
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zMachine_Ansi_H_Va_ListBypass0[] =
+        "__builtin_va_list";
+ 
+ #define    MACHINE_ANSI_H_VA_LIST_TEST_CT  2
+ static tTestDesc aMachine_Ansi_H_Va_ListTests[] = {
+   { TT_NEGREP,   zMachine_Ansi_H_Va_ListBypass0, (regex_t*)NULL },
+   { TT_EGREP,    zMachine_Ansi_H_Va_ListSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Machine_Ansi_H_Va_List
+  */
+ static const char* apzMachine_Ansi_H_Va_ListPatch[] = {
+     "format",
+     "%1__builtin_va_list",
+     "(define[ \t]+_BSD_VA_LIST_[ \t]+).*",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Machine_Name fix
+  */
+ tSCC zMachine_NameName[] =
+      "machine_name";
+ 
+ /*
+  *  File name selection pattern
+  */
+ #define zMachine_NameList (char*)NULL
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzMachine_NameMachs (const char**)NULL
+ 
+ /*
+  *  perform the C function call test
+  */
+ tSCC zMachine_NameFTst0[] = "machine_name";
+ 
+ #define    MACHINE_NAME_TEST_CT  1
+ static tTestDesc aMachine_NameTests[] = {
+   { TT_FUNCTION, zMachine_NameFTst0,   0 /* unused */ }, };
+ 
+ /*
+  *  Fix Command Arguments for Machine_Name
+  */
+ static const char* apzMachine_NamePatch[] = {
+     "machine_name",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Math_Exception fix
+  */
+ tSCC zMath_ExceptionName[] =
+      "math_exception";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zMath_ExceptionList[] =
+   "|math.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzMath_ExceptionMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zMath_ExceptionSelect0[] =
+        "struct exception";
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zMath_ExceptionBypass0[] =
+        "We have a problem when using C\\+\\+|for C\\+\\+, _[a-z0-9A-Z_]+_exception; for C, exception";
+ 
+ #define    MATH_EXCEPTION_TEST_CT  2
+ static tTestDesc aMath_ExceptionTests[] = {
+   { TT_NEGREP,   zMath_ExceptionBypass0, (regex_t*)NULL },
+   { TT_EGREP,    zMath_ExceptionSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Math_Exception
+  */
+ static const char* apzMath_ExceptionPatch[] = {
+     "wrap",
+     "#ifdef __cplusplus\n\
+ #define exception __math_exception\n\
+ #endif\n",
+     "#ifdef __cplusplus\n\
+ #undef exception\n\
+ #endif\n",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Math_Huge_Val_From_Dbl_Max fix
+  */
+ tSCC zMath_Huge_Val_From_Dbl_MaxName[] =
+      "math_huge_val_from_dbl_max";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zMath_Huge_Val_From_Dbl_MaxList[] =
+   "|math.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzMath_Huge_Val_From_Dbl_MaxMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zMath_Huge_Val_From_Dbl_MaxSelect0[] =
+        "define[ \t]+HUGE_VAL[ \t]+DBL_MAX";
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zMath_Huge_Val_From_Dbl_MaxBypass0[] =
+        "define[ \t]+DBL_MAX";
+ 
+ #define    MATH_HUGE_VAL_FROM_DBL_MAX_TEST_CT  2
+ static tTestDesc aMath_Huge_Val_From_Dbl_MaxTests[] = {
+   { TT_NEGREP,   zMath_Huge_Val_From_Dbl_MaxBypass0, (regex_t*)NULL },
+   { TT_EGREP,    zMath_Huge_Val_From_Dbl_MaxSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Math_Huge_Val_From_Dbl_Max
+  */
+ static const char* apzMath_Huge_Val_From_Dbl_MaxPatch[] = { "sh", "-c",
+     "\tdbl_max_def=`egrep 'define[ \t]+DBL_MAX[ \t]+.*' float.h | sed 's/.*DBL_MAX[ \t]*//' 2>/dev/null`\n\n\
+ \tif ( test -n \"${dbl_max_def}\" ) > /dev/null 2>&1\n\
+ \tthen sed -e '/define[ \t]*HUGE_VAL[ \t]*DBL_MAX/s@DBL_MAX@'\"$dbl_max_def@\"\n\
+ \telse cat\n\
+ \tfi",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Nested_Auth_Des fix
+  */
+ tSCC zNested_Auth_DesName[] =
+      "nested_auth_des";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zNested_Auth_DesList[] =
+   "|rpc/rpc.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzNested_Auth_DesMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zNested_Auth_DesSelect0[] =
+        "(/\\*.*rpc/auth_des\\.h>.*)/\\*";
+ 
+ #define    NESTED_AUTH_DES_TEST_CT  1
+ static tTestDesc aNested_Auth_DesTests[] = {
+   { TT_EGREP,    zNested_Auth_DesSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Nested_Auth_Des
+  */
+ static const char* apzNested_Auth_DesPatch[] = {
+     "format",
+     "%1*/ /*",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Nested_Motorola fix
+  */
+ tSCC zNested_MotorolaName[] =
+      "nested_motorola";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zNested_MotorolaList[] =
+   "|sys/limits.h|limits.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzNested_MotorolaMachs[] = {
+         "m68k-motorola-sysv*",
+         (const char*)NULL };
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zNested_MotorolaSelect0[] =
+        "max # bytes atomic in write|error value returned by Math lib";
+ 
+ #define    NESTED_MOTOROLA_TEST_CT  1
+ static tTestDesc aNested_MotorolaTests[] = {
+   { TT_EGREP,    zNested_MotorolaSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Nested_Motorola
+  */
+ static const char* apzNested_MotorolaPatch[] = { "sed",
+     "-e", "s@^\\(#undef[ \t][ \t]*PIPE_BUF[ \t]*/\\* max # bytes atomic in write to a\\)$@\\1 */@",
+     "-e", "s@\\(/\\*#define\tHUGE_VAL\t3.[0-9e+]* \\)\\(/\\*error value returned by Math lib\\*/\\)$@\\1*/ \\2@",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Nested_Sys_Limits fix
+  */
+ tSCC zNested_Sys_LimitsName[] =
+      "nested_sys_limits";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zNested_Sys_LimitsList[] =
+   "|sys/limits.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzNested_Sys_LimitsMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zNested_Sys_LimitsSelect0[] =
+        "CHILD_MAX";
+ 
+ #define    NESTED_SYS_LIMITS_TEST_CT  1
+ static tTestDesc aNested_Sys_LimitsTests[] = {
+   { TT_EGREP,    zNested_Sys_LimitsSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Nested_Sys_Limits
+  */
+ static const char* apzNested_Sys_LimitsPatch[] = { "sed",
+     "-e", "/CHILD_MAX/s,/\\* Max, Max,",
+     "-e", "/OPEN_MAX/s,/\\* Max, Max,",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Netbsd_Extra_Semicolon fix
+  */
+ tSCC zNetbsd_Extra_SemicolonName[] =
+      "netbsd_extra_semicolon";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zNetbsd_Extra_SemicolonList[] =
+   "|sys/cdefs.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzNetbsd_Extra_SemicolonMachs[] = {
+         "*-*-netbsd*",
+         (const char*)NULL };
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zNetbsd_Extra_SemicolonSelect0[] =
+        "#define[ \t]*__END_DECLS[ \t]*};";
+ 
+ #define    NETBSD_EXTRA_SEMICOLON_TEST_CT  1
+ static tTestDesc aNetbsd_Extra_SemicolonTests[] = {
+   { TT_EGREP,    zNetbsd_Extra_SemicolonSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Netbsd_Extra_Semicolon
+  */
+ static const char* apzNetbsd_Extra_SemicolonPatch[] = {
+     "format",
+     "#define __END_DECLS }",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Next_Math_Prefix fix
+  */
+ tSCC zNext_Math_PrefixName[] =
+      "next_math_prefix";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zNext_Math_PrefixList[] =
+   "|ansi/math.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzNext_Math_PrefixMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zNext_Math_PrefixSelect0[] =
+        "^extern[ \t]+double[ \t]+__const__[ \t]";
+ 
+ #define    NEXT_MATH_PREFIX_TEST_CT  1
+ static tTestDesc aNext_Math_PrefixTests[] = {
+   { TT_EGREP,    zNext_Math_PrefixSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Next_Math_Prefix
+  */
+ static const char* apzNext_Math_PrefixPatch[] = {
+     "format",
+     "extern double %1(",
+     "^extern[ \t]+double[ \t]+__const__[ \t]+([a-z]+)\\(",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Next_Template fix
+  */
+ tSCC zNext_TemplateName[] =
+      "next_template";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zNext_TemplateList[] =
+   "|bsd/libc.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzNext_TemplateMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zNext_TemplateSelect0[] =
+        "[ \t]template\\)";
+ 
+ #define    NEXT_TEMPLATE_TEST_CT  1
+ static tTestDesc aNext_TemplateTests[] = {
+   { TT_EGREP,    zNext_TemplateSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Next_Template
+  */
+ static const char* apzNext_TemplatePatch[] = {
+     "format",
+     "(%1)",
+     "\\(([^)]*)[ \t]template\\)",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Next_Volitile fix
+  */
+ tSCC zNext_VolitileName[] =
+      "next_volitile";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zNext_VolitileList[] =
+   "|ansi/stdlib.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzNext_VolitileMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zNext_VolitileSelect0[] =
+        "^extern[ \t]+volatile[ \t]+void[ \t]";
+ 
+ #define    NEXT_VOLITILE_TEST_CT  1
+ static tTestDesc aNext_VolitileTests[] = {
+   { TT_EGREP,    zNext_VolitileSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Next_Volitile
+  */
+ static const char* apzNext_VolitilePatch[] = {
+     "format",
+     "extern void %1(",
+     "^extern[ \t]+volatile[ \t]+void[ \t]+(exit|abort)\\(",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Next_Wait_Union fix
+  */
+ tSCC zNext_Wait_UnionName[] =
+      "next_wait_union";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zNext_Wait_UnionList[] =
+   "|sys/wait.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzNext_Wait_UnionMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zNext_Wait_UnionSelect0[] =
+        "wait\\(union wait";
+ 
+ #define    NEXT_WAIT_UNION_TEST_CT  1
+ static tTestDesc aNext_Wait_UnionTests[] = {
+   { TT_EGREP,    zNext_Wait_UnionSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Next_Wait_Union
+  */
+ static const char* apzNext_Wait_UnionPatch[] = {
+     "format",
+     "wait(void",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Nodeent_Syntax fix
+  */
+ tSCC zNodeent_SyntaxName[] =
+      "nodeent_syntax";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zNodeent_SyntaxList[] =
+   "|netdnet/dnetdb.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzNodeent_SyntaxMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zNodeent_SyntaxSelect0[] =
+        "char[ \t]*\\*na_addr[ \t]*$";
+ 
+ #define    NODEENT_SYNTAX_TEST_CT  1
+ static tTestDesc aNodeent_SyntaxTests[] = {
+   { TT_EGREP,    zNodeent_SyntaxSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Nodeent_Syntax
+  */
+ static const char* apzNodeent_SyntaxPatch[] = {
+     "format",
+     "%0;",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Obstack_Lvalue_Cast fix
+  */
+ tSCC zObstack_Lvalue_CastName[] =
+      "obstack_lvalue_cast";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zObstack_Lvalue_CastList[] =
+   "|obstack.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzObstack_Lvalue_CastMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zObstack_Lvalue_CastSelect0[] =
+        "\\*\\(\\(([^()]*)\\*\\)(.*)\\)\\+\\+ = \\(([^()]*)\\)";
+ 
+ #define    OBSTACK_LVALUE_CAST_TEST_CT  1
+ static tTestDesc aObstack_Lvalue_CastTests[] = {
+   { TT_EGREP,    zObstack_Lvalue_CastSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Obstack_Lvalue_Cast
+  */
+ static const char* apzObstack_Lvalue_CastPatch[] = {
+     "format",
+     "((*((%1*)%2) = (%3)), (%2 += sizeof (%1)))",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Osf_Namespace_A fix
+  */
+ tSCC zOsf_Namespace_AName[] =
+      "osf_namespace_a";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zOsf_Namespace_AList[] =
+   "|reg_types.h|sys/lc_core.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzOsf_Namespace_AMachs (const char**)NULL
+ 
+ /*
+  *  perform the 'test' shell command - do fix on success
+  */
+ tSCC zOsf_Namespace_ATest0[] =
+        " -r reg_types.h";
+ tSCC zOsf_Namespace_ATest1[] =
+        " -r sys/lc_core.h";
+ tSCC zOsf_Namespace_ATest2[] =
+        " -n \"`grep '} regex_t;' reg_types.h`\"";
+ tSCC zOsf_Namespace_ATest3[] =
+        " -z \"`grep __regex_t regex.h`\"";
+ 
+ #define    OSF_NAMESPACE_A_TEST_CT  4
+ static tTestDesc aOsf_Namespace_ATests[] = {
+   { TT_TEST,     zOsf_Namespace_ATest0,   0 /* unused */ },
+   { TT_TEST,     zOsf_Namespace_ATest1,   0 /* unused */ },
+   { TT_TEST,     zOsf_Namespace_ATest2,   0 /* unused */ },
+   { TT_TEST,     zOsf_Namespace_ATest3,   0 /* unused */ }, };
+ 
+ /*
+  *  Fix Command Arguments for Osf_Namespace_A
+  */
+ static const char* apzOsf_Namespace_APatch[] = {
+     "format",
+     "__%0",
+     "reg(ex|off|match)_t",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Osf_Namespace_C fix
+  */
+ tSCC zOsf_Namespace_CName[] =
+      "osf_namespace_c";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zOsf_Namespace_CList[] =
+   "|regex.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzOsf_Namespace_CMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zOsf_Namespace_CSelect0[] =
+        "#include <reg_types.h>.*";
+ 
+ /*
+  *  perform the 'test' shell command - do fix on success
+  */
+ tSCC zOsf_Namespace_CTest0[] =
+        " -r reg_types.h";
+ tSCC zOsf_Namespace_CTest1[] =
+        " -r sys/lc_core.h";
+ tSCC zOsf_Namespace_CTest2[] =
+        " -n \"`grep '} regex_t;' reg_types.h`\"";
+ tSCC zOsf_Namespace_CTest3[] =
+        " -z \"`grep __regex_t regex.h`\"";
+ 
+ #define    OSF_NAMESPACE_C_TEST_CT  5
+ static tTestDesc aOsf_Namespace_CTests[] = {
+   { TT_TEST,     zOsf_Namespace_CTest0,   0 /* unused */ },
+   { TT_TEST,     zOsf_Namespace_CTest1,   0 /* unused */ },
+   { TT_TEST,     zOsf_Namespace_CTest2,   0 /* unused */ },
+   { TT_TEST,     zOsf_Namespace_CTest3,   0 /* unused */ },
+   { TT_EGREP,    zOsf_Namespace_CSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Osf_Namespace_C
+  */
+ static const char* apzOsf_Namespace_CPatch[] = {
+     "format",
+     "%0\n\
+ typedef __regex_t\tregex_t;\n\
+ typedef __regoff_t\tregoff_t;\n\
+ typedef __regmatch_t\tregmatch_t;",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Pthread_Page_Size fix
+  */
+ tSCC zPthread_Page_SizeName[] =
+      "pthread_page_size";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zPthread_Page_SizeList[] =
+   "|pthread.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzPthread_Page_SizeMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zPthread_Page_SizeSelect0[] =
+        "^int __page_size";
+ 
+ #define    PTHREAD_PAGE_SIZE_TEST_CT  1
+ static tTestDesc aPthread_Page_SizeTests[] = {
+   { TT_EGREP,    zPthread_Page_SizeSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Pthread_Page_Size
+  */
+ static const char* apzPthread_Page_SizePatch[] = {
+     "format",
+     "extern %0",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Pthread_Incomplete_Struct_Argument fix
+  */
+ tSCC zPthread_Incomplete_Struct_ArgumentName[] =
+      "pthread_incomplete_struct_argument";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zPthread_Incomplete_Struct_ArgumentList[] =
+   "|pthread.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzPthread_Incomplete_Struct_ArgumentMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zPthread_Incomplete_Struct_ArgumentSelect0[] =
+        "struct __jmp_buf_tag";
+ 
+ #define    PTHREAD_INCOMPLETE_STRUCT_ARGUMENT_TEST_CT  1
+ static tTestDesc aPthread_Incomplete_Struct_ArgumentTests[] = {
+   { TT_EGREP,    zPthread_Incomplete_Struct_ArgumentSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Pthread_Incomplete_Struct_Argument
+  */
+ static const char* apzPthread_Incomplete_Struct_ArgumentPatch[] = {
+     "format",
+     "%1 *%2%3",
+     "^(extern int __sigsetjmp \\(struct __jmp_buf_tag) (__env)\\[1\\](.*)$",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Read_Ret_Type fix
+  */
+ tSCC zRead_Ret_TypeName[] =
+      "read_ret_type";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zRead_Ret_TypeList[] =
+   "|stdio.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzRead_Ret_TypeMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zRead_Ret_TypeSelect0[] =
+        "extern int\t.*, fread\\(\\), fwrite\\(\\)";
+ 
+ #define    READ_RET_TYPE_TEST_CT  1
+ static tTestDesc aRead_Ret_TypeTests[] = {
+   { TT_EGREP,    zRead_Ret_TypeSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Read_Ret_Type
+  */
+ static const char* apzRead_Ret_TypePatch[] = {
+     "format",
+     "extern unsigned int fread(), fwrite();\n\
+ %1%2",
+     "(extern int\t.*), fread\\(\\), fwrite\\(\\)(.*)",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Rpc_Xdr_Lvalue_Cast_A fix
+  */
+ tSCC zRpc_Xdr_Lvalue_Cast_AName[] =
+      "rpc_xdr_lvalue_cast_a";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zRpc_Xdr_Lvalue_Cast_AList[] =
+   "|rpc/xdr.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzRpc_Xdr_Lvalue_Cast_AMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zRpc_Xdr_Lvalue_Cast_ASelect0[] =
+        "#define[ \t]*IXDR_GET_LONG.*\\\\\n\
+ .*__extension__.*";
+ 
+ #define    RPC_XDR_LVALUE_CAST_A_TEST_CT  1
+ static tTestDesc aRpc_Xdr_Lvalue_Cast_ATests[] = {
+   { TT_EGREP,    zRpc_Xdr_Lvalue_Cast_ASelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Rpc_Xdr_Lvalue_Cast_A
+  */
+ static const char* apzRpc_Xdr_Lvalue_Cast_APatch[] = {
+     "format",
+     "#define IXDR_GET_LONG(buf) ((long)IXDR_GET_U_INT32(buf))",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Rpc_Xdr_Lvalue_Cast_B fix
+  */
+ tSCC zRpc_Xdr_Lvalue_Cast_BName[] =
+      "rpc_xdr_lvalue_cast_b";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zRpc_Xdr_Lvalue_Cast_BList[] =
+   "|rpc/xdr.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzRpc_Xdr_Lvalue_Cast_BMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zRpc_Xdr_Lvalue_Cast_BSelect0[] =
+        "#define[ \t]*IXDR_PUT_LONG.*\\\\\n\
+ .*__extension__.*";
+ 
+ #define    RPC_XDR_LVALUE_CAST_B_TEST_CT  1
+ static tTestDesc aRpc_Xdr_Lvalue_Cast_BTests[] = {
+   { TT_EGREP,    zRpc_Xdr_Lvalue_Cast_BSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Rpc_Xdr_Lvalue_Cast_B
+  */
+ static const char* apzRpc_Xdr_Lvalue_Cast_BPatch[] = {
+     "format",
+     "#define IXDR_PUT_LONG(buf, v) ((long)IXDR_PUT_INT32(buf, (long)(v)))",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Rs6000_Double fix
+  */
+ tSCC zRs6000_DoubleName[] =
+      "rs6000_double";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zRs6000_DoubleList[] =
+   "|math.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzRs6000_DoubleMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zRs6000_DoubleSelect0[] =
+        "[^a-zA-Z_]class\\(";
+ 
+ #define    RS6000_DOUBLE_TEST_CT  1
+ static tTestDesc aRs6000_DoubleTests[] = {
+   { TT_EGREP,    zRs6000_DoubleSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Rs6000_Double
+  */
+ static const char* apzRs6000_DoublePatch[] = {
+     "format",
+     "#ifndef __cplusplus\n\
+ %0\n\
+ #endif",
+     "^.*[^a-zA-Z_]class\\(.*",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Rs6000_Fchmod fix
+  */
+ tSCC zRs6000_FchmodName[] =
+      "rs6000_fchmod";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zRs6000_FchmodList[] =
+   "|sys/stat.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzRs6000_FchmodMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zRs6000_FchmodSelect0[] =
+        "fchmod\\(char \\*";
+ 
+ #define    RS6000_FCHMOD_TEST_CT  1
+ static tTestDesc aRs6000_FchmodTests[] = {
+   { TT_EGREP,    zRs6000_FchmodSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Rs6000_Fchmod
+  */
+ static const char* apzRs6000_FchmodPatch[] = {
+     "format",
+     "fchmod(int",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Rs6000_Param fix
+  */
+ tSCC zRs6000_ParamName[] =
+      "rs6000_param";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zRs6000_ParamList[] =
+   "|stdio.h|unistd.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzRs6000_ParamMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zRs6000_ParamSelect0[] =
+        "rename\\(const char \\*old, const char \\*new\\)";
+ 
+ #define    RS6000_PARAM_TEST_CT  1
+ static tTestDesc aRs6000_ParamTests[] = {
+   { TT_EGREP,    zRs6000_ParamSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Rs6000_Param
+  */
+ static const char* apzRs6000_ParamPatch[] = {
+     "format",
+     "rename(const char *_old, const char *_new)",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Sco_Math fix
+  */
+ tSCC zSco_MathName[] =
+      "sco_math";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zSco_MathList[] =
+   "|math.h|ansi/math.h|posix/math.h|xpg4/math.h|xpg4v2/math.h|xpg4plus/math.h|ods_30_compat/math.h|oldstyle/math.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzSco_MathMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zSco_MathSelect0[] =
+        "inline double abs";
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zSco_MathBypass0[] =
+        "__GNUG__";
+ 
+ #define    SCO_MATH_TEST_CT  2
+ static tTestDesc aSco_MathTests[] = {
+   { TT_NEGREP,   zSco_MathBypass0, (regex_t*)NULL },
+   { TT_EGREP,    zSco_MathSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Sco_Math
+  */
+ static const char* apzSco_MathPatch[] = { "sed",
+     "-e", "/#define.*__fp_class(a) \\\\/i\\\n\
+ #ifndef __GNUC__\n",
+     "-e", "/.*__builtin_generic/a\\\n\
+ #else\\\n\
+ #define __fp_class(a) \\\\\\\n\
+   __builtin_choose_expr(__builtin_types_compatible_p(typeof(a),long double),\\\\\\\n\
+    __fpclassifyl(a), \\\\\\\n\
+     __builtin_choose_expr(__builtin_types_compatible_p(typeof(a), float), \\\\\\\n\
+       __fpclassifyf(a),__fpclassify(a)))\\\n\
+ #endif",
+     "-e", "/extern \"C\\+\\+\"/N;/inline double abs/i\\\n\
+ #ifndef __GNUC__\n",
+     "-e", "/inline long double trunc/N;/inline long double trunc.*}.*extern \"C\\+\\+\"/a\\\n\
+ #endif /* ! __GNUC__ */",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Sco_Regset fix
+  */
+ tSCC zSco_RegsetName[] =
+      "sco_regset";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zSco_RegsetList[] =
+   "|sys/regset.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzSco_RegsetMachs[] = {
+         "*-*-sco3.2v5*",
+         (const char*)NULL };
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zSco_RegsetSelect0[] =
+        "(struct[ \t]+.*)fpstate";
+ 
+ #define    SCO_REGSET_TEST_CT  1
+ static tTestDesc aSco_RegsetTests[] = {
+   { TT_EGREP,    zSco_RegsetSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Sco_Regset
+  */
+ static const char* apzSco_RegsetPatch[] = {
+     "format",
+     "%1rsfpstate",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Sco_Static_Func fix
+  */
+ tSCC zSco_Static_FuncName[] =
+      "sco_static_func";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zSco_Static_FuncList[] =
+   "|sys/stat.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzSco_Static_FuncMachs[] = {
+         "i?86-*-sco3.2*",
+         (const char*)NULL };
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zSco_Static_FuncSelect0[] =
+        "^static int";
+ 
+ #define    SCO_STATIC_FUNC_TEST_CT  1
+ static tTestDesc aSco_Static_FuncTests[] = {
+   { TT_EGREP,    zSco_Static_FuncSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Sco_Static_Func
+  */
+ static const char* apzSco_Static_FuncPatch[] = { "sed",
+     "-e", "/^static int/i\\\n\
+ #if __cplusplus\\\n\
+ extern \"C\" {\\\n\
+ #endif /* __cplusplus */",
+     "-e", "/^}$/a\\\n\
+ #if __cplusplus\\\n\
+  }\\\n\
+ #endif /* __cplusplus */",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Sco_Utime fix
+  */
+ tSCC zSco_UtimeName[] =
+      "sco_utime";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zSco_UtimeList[] =
+   "|sys/times.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzSco_UtimeMachs[] = {
+         "i?86-*-sco3.2v4*",
+         (const char*)NULL };
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zSco_UtimeSelect0[] =
+        "\\(const char \\*, struct utimbuf \\*\\);";
+ 
+ #define    SCO_UTIME_TEST_CT  1
+ static tTestDesc aSco_UtimeTests[] = {
+   { TT_EGREP,    zSco_UtimeSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Sco_Utime
+  */
+ static const char* apzSco_UtimePatch[] = {
+     "format",
+     "(const char *, const struct utimbuf *);",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Solaris_Mutex_Init_1 fix
+  */
+ tSCC zSolaris_Mutex_Init_1Name[] =
+      "solaris_mutex_init_1";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zSolaris_Mutex_Init_1List[] =
+   "|pthread.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzSolaris_Mutex_Init_1Machs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zSolaris_Mutex_Init_1Select0[] =
+        "@\\(#\\)pthread.h[ \t]+1.1[0-9][ \t]+9[567]/[0-9/]+ SMI";
+ 
+ #define    SOLARIS_MUTEX_INIT_1_TEST_CT  1
+ static tTestDesc aSolaris_Mutex_Init_1Tests[] = {
+   { TT_EGREP,    zSolaris_Mutex_Init_1Select0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Solaris_Mutex_Init_1
+  */
+ static const char* apzSolaris_Mutex_Init_1Patch[] = { "sed",
+     "-e", "/define[ \t]*PTHREAD_MUTEX_INI/s/{0, 0,/{{{0}, 0}, {{{0}}},/\n\
+ /define[ \t]*PTHREAD_COND_INI/s/{0,/{{{0},0},/",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Solaris_Mutex_Init_2 fix
+  */
+ tSCC zSolaris_Mutex_Init_2Name[] =
+      "solaris_mutex_init_2";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zSolaris_Mutex_Init_2List[] =
+   "|pthread.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzSolaris_Mutex_Init_2Machs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zSolaris_Mutex_Init_2Select0[] =
+        "@\\(#\\)pthread.h[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
+ 
+ #define    SOLARIS_MUTEX_INIT_2_TEST_CT  1
+ static tTestDesc aSolaris_Mutex_Init_2Tests[] = {
+   { TT_EGREP,    zSolaris_Mutex_Init_2Select0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Solaris_Mutex_Init_2
+  */
+ static const char* apzSolaris_Mutex_Init_2Patch[] = {
+     "format",
+     "#if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)\n\
+ %0\n\
+ #else\n\
+ %1, {0}}%3\n\
+ #endif",
+     "(^#define[ \t]+PTHREAD_(MUTEX|COND)_INITIALIZER[ \t]+\\{.*),[ \t]*0\\}(|[ \t].*)$",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Solaris_Socket fix
+  */
+ tSCC zSolaris_SocketName[] =
+      "solaris_socket";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zSolaris_SocketList[] =
+   "|sys/socket.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzSolaris_SocketMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zSolaris_SocketSelect0[] =
+        "@\\(#\\)socket.h[ \t]+1.[123][0-9][ \t]+9[567]/[0-9/]+ SMI";
+ 
+ #define    SOLARIS_SOCKET_TEST_CT  1
+ static tTestDesc aSolaris_SocketTests[] = {
+   { TT_EGREP,    zSolaris_SocketSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Solaris_Socket
+  */
+ static const char* apzSolaris_SocketPatch[] = {
+     "format",
+     "extern int %1(int, %2void *, int, int);",
+     "^extern int (recv|send)\\(int, (const )*char \\*, int, int\\);",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Solaris_Stdio_Tag fix
+  */
+ tSCC zSolaris_Stdio_TagName[] =
+      "solaris_stdio_tag";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zSolaris_Stdio_TagList[] =
+   "|stdio_tag.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzSolaris_Stdio_TagMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zSolaris_Stdio_TagSelect0[] =
+        "__cplusplus < 54321L";
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zSolaris_Stdio_TagBypass0[] =
+        "__GNUC__";
+ 
+ #define    SOLARIS_STDIO_TAG_TEST_CT  2
+ static tTestDesc aSolaris_Stdio_TagTests[] = {
+   { TT_NEGREP,   zSolaris_Stdio_TagBypass0, (regex_t*)NULL },
+   { TT_EGREP,    zSolaris_Stdio_TagSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Solaris_Stdio_Tag
+  */
+ static const char* apzSolaris_Stdio_TagPatch[] = { "sed",
+     "-e", "s/defined(__cplusplus) && (__cplusplus < 54321L)/0/",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Solaris_Unistd fix
+  */
+ tSCC zSolaris_UnistdName[] =
+      "solaris_unistd";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zSolaris_UnistdList[] =
+   "|unistd.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzSolaris_UnistdMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zSolaris_UnistdSelect0[] =
+        "@\\(#\\)unistd.h[ \t]+1.3[0-9][ \t]+9[567]/[0-9/]+ SMI";
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zSolaris_UnistdBypass0[] =
+        "getpagesize";
+ 
+ #define    SOLARIS_UNISTD_TEST_CT  2
+ static tTestDesc aSolaris_UnistdTests[] = {
+   { TT_NEGREP,   zSolaris_UnistdBypass0, (regex_t*)NULL },
+   { TT_EGREP,    zSolaris_UnistdSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Solaris_Unistd
+  */
+ static const char* apzSolaris_UnistdPatch[] = {
+     "format",
+     "extern int getpagesize();\n\
+ %0",
+     "^extern (pid_t|int) getpgid\\(.*\\);",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Solaris_Widec fix
+  */
+ tSCC zSolaris_WidecName[] =
+      "solaris_widec";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zSolaris_WidecList[] =
+   "|widec.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzSolaris_WidecMachs[] = {
+         "*-*-solaris2.[0-5]",
+         "*-*-solaris2.[0-5].*",
+         (const char*)NULL };
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zSolaris_WidecSelect0[] =
+        "#include <euc.h>";
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zSolaris_WidecBypass0[] =
+        "include.*wchar\\.h";
+ 
+ #define    SOLARIS_WIDEC_TEST_CT  2
+ static tTestDesc aSolaris_WidecTests[] = {
+   { TT_NEGREP,   zSolaris_WidecBypass0, (regex_t*)NULL },
+   { TT_EGREP,    zSolaris_WidecSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Solaris_Widec
+  */
+ static const char* apzSolaris_WidecPatch[] = {
+     "format",
+     "%0\n\
+ #include <wchar.h>",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Statsswtch fix
+  */
+ tSCC zStatsswtchName[] =
+      "statsswtch";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zStatsswtchList[] =
+   "|rpcsvc/rstat.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzStatsswtchMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zStatsswtchSelect0[] =
+        "boottime$";
+ 
+ #define    STATSSWTCH_TEST_CT  1
+ static tTestDesc aStatsswtchTests[] = {
+   { TT_EGREP,    zStatsswtchSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Statsswtch
+  */
+ static const char* apzStatsswtchPatch[] = {
+     "format",
+     "boottime;",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Stdio_Stdarg_H fix
+  */
+ tSCC zStdio_Stdarg_HName[] =
+      "stdio_stdarg_h";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zStdio_Stdarg_HList[] =
+   "|stdio.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzStdio_Stdarg_HMachs[] = {
+         "*-*-solaris2.1[0-9]",
+         (const char*)NULL };
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zStdio_Stdarg_HBypass0[] =
+        "include.*(stdarg.h|machine/ansi.h)";
+ 
+ #define    STDIO_STDARG_H_TEST_CT  1
+ static tTestDesc aStdio_Stdarg_HTests[] = {
+   { TT_NEGREP,   zStdio_Stdarg_HBypass0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Stdio_Stdarg_H
+  */
+ static const char* apzStdio_Stdarg_HPatch[] = {
+     "wrap",
+     "#define __need___va_list\n\
+ #include <stdarg.h>\n",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Stdio_Va_List fix
+  */
+ tSCC zStdio_Va_ListName[] =
+      "stdio_va_list";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zStdio_Va_ListList[] =
+   "|stdio.h|internal/stdio_core.h|internal/wchar_core.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzStdio_Va_ListMachs[] = {
+         "*-*-solaris2.1[0-9]",
+         (const char*)NULL };
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zStdio_Va_ListBypass0[] =
+        "__gnuc_va_list|_BSD_VA_LIST_|__DJ_va_list|_G_va_list";
+ 
+ #define    STDIO_VA_LIST_TEST_CT  1
+ static tTestDesc aStdio_Va_ListTests[] = {
+   { TT_NEGREP,   zStdio_Va_ListBypass0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Stdio_Va_List
+  */
+ static const char* apzStdio_Va_ListPatch[] = { "sed",
+     "-e", "s@[ \t]va_list\\([ \t)]\\)@ __gnuc_va_list\\1@\n\
+ s@(va_list)&@(__gnuc_va_list)\\&@\n\
+ s@ _VA_LIST_));@ __gnuc_va_list));@\n\
+ s@ __VA_LIST__));@ __gnuc_va_list));@\n\
+ s@ va_list@ __not_va_list__@\n\
+ s@\\*va_list@*__not_va_list__@\n\
+ s@ __va_list)@ __gnuc_va_list)@\n\
+ s@typedef[ \t]\\(.*\\)[ \t]va_list[ \t]*;@typedef \\1 __not_va_list__;@\n\
+ s@typedef[ \t]*__va_list__@typedef __gnuc_va_list@\n\
+ s@GNUC_VA_LIST@GNUC_Va_LIST@\n\
+ s@_VA_LIST_DEFINED@_Va_LIST_DEFINED@\n\
+ s@_NEED___VA_LIST@_NEED___Va_LIST@\n\
+ s@VA_LIST@DUMMY_VA_LIST@\n\
+ s@_Va_LIST@_VA_LIST@",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Stdio_Va_List_Clients fix
+  */
+ tSCC zStdio_Va_List_ClientsName[] =
+      "stdio_va_list_clients";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zStdio_Va_List_ClientsList[] =
+   "|com_err.h|cps.h|curses.h|krb5.h|lc_core.h|pfmt.h|wchar.h|curses_colr/curses.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzStdio_Va_List_ClientsMachs (const char**)NULL
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zStdio_Va_List_ClientsBypass0[] =
+        "__gnuc_va_list|_BSD_VA_LIST_|__DJ_va_list|_G_va_list";
+ tSCC zStdio_Va_List_ClientsBypass1[] =
+        "include <stdarg\\.h>|#ifdef va_start";
+ 
+ #define    STDIO_VA_LIST_CLIENTS_TEST_CT  2
+ static tTestDesc aStdio_Va_List_ClientsTests[] = {
+   { TT_NEGREP,   zStdio_Va_List_ClientsBypass0, (regex_t*)NULL },
+   { TT_NEGREP,   zStdio_Va_List_ClientsBypass1, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Stdio_Va_List_Clients
+  */
+ static const char* apzStdio_Va_List_ClientsPatch[] = { "sed",
+     "-e", "s@[ \t]va_list\\([ \t)]\\)@ __gnuc_va_list\\1@\n\
+ s@(va_list)&@(__gnuc_va_list)\\&@\n\
+ s@ _VA_LIST_));@ __gnuc_va_list));@\n\
+ s@ __VA_LIST__));@ __gnuc_va_list));@\n\
+ s@ va_list@ __not_va_list__@\n\
+ s@\\*va_list@*__not_va_list__@\n\
+ s@ __va_list)@ __gnuc_va_list)@\n\
+ s@typedef[ \t]\\(.*\\)[ \t]va_list[ \t]*;@typedef \\1 __not_va_list__;@\n\
+ s@typedef[ \t]*__va_list__@typedef __gnuc_va_list@\n\
+ s@GNUC_VA_LIST@GNUC_Va_LIST@\n\
+ s@_VA_LIST_DEFINED@_Va_LIST_DEFINED@\n\
+ s@_NEED___VA_LIST@_NEED___Va_LIST@\n\
+ s@VA_LIST@DUMMY_VA_LIST@\n\
+ s@_Va_LIST@_VA_LIST@",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Strict_Ansi_Not fix
+  */
+ tSCC zStrict_Ansi_NotName[] =
+      "strict_ansi_not";
+ 
+ /*
+  *  File name selection pattern
+  */
+ #define zStrict_Ansi_NotList (char*)NULL
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzStrict_Ansi_NotMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zStrict_Ansi_NotSelect0[] =
+        "^([ \t]*#[ \t]*if.*)(!__STDC__|__STDC__[ \t]*==[ \t]*0|__STDC__[ \t]*!=[ \t]*1|__STDC__[ \t]*-[ \t]*0[ \t]*==[ \t]*0)";
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zStrict_Ansi_NotBypass0[] =
+        "GNU and MIPS C compilers define __STDC__ differently";
+ tSCC zStrict_Ansi_NotBypass1[] =
+        "__SCO_VERSION__.*__STDC__ != 1";
+ 
+ /*
+  *  perform the C function call test
+  */
+ tSCC zStrict_Ansi_NotFTst0[] = "stdc_0_in_system_headers";
+ 
+ #define    STRICT_ANSI_NOT_TEST_CT  4
+ static tTestDesc aStrict_Ansi_NotTests[] = {
+   { TT_FUNCTION, zStrict_Ansi_NotFTst0,   0 /* unused */ },
+   { TT_NEGREP,   zStrict_Ansi_NotBypass0, (regex_t*)NULL },
+   { TT_NEGREP,   zStrict_Ansi_NotBypass1, (regex_t*)NULL },
+   { TT_EGREP,    zStrict_Ansi_NotSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Strict_Ansi_Not
+  */
+ static const char* apzStrict_Ansi_NotPatch[] = {
+     "format",
+     "%1 !defined(__STRICT_ANSI__)",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Strict_Ansi_Not_Ctd fix
+  */
+ tSCC zStrict_Ansi_Not_CtdName[] =
+      "strict_ansi_not_ctd";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zStrict_Ansi_Not_CtdList[] =
+   "|math.h|limits.h|stdio.h|signal.h|stdlib.h|sys/signal.h|time.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzStrict_Ansi_Not_CtdMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zStrict_Ansi_Not_CtdSelect0[] =
+        "^([ \t]*(\\(|&&|\\|\\|)([ \t(]*!*[ \t]*defined\\([a-zA-Z_0-9]+\\)[ \t]*[|&][|&])*[ \t(]*)(__STDC__[ \t]*(|-[ \t]*0[ \t]*)==[ \t]*0)";
+ 
+ /*
+  *  perform the C function call test
+  */
+ tSCC zStrict_Ansi_Not_CtdFTst0[] = "stdc_0_in_system_headers";
+ 
+ #define    STRICT_ANSI_NOT_CTD_TEST_CT  2
+ static tTestDesc aStrict_Ansi_Not_CtdTests[] = {
+   { TT_FUNCTION, zStrict_Ansi_Not_CtdFTst0,   0 /* unused */ },
+   { TT_EGREP,    zStrict_Ansi_Not_CtdSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Strict_Ansi_Not_Ctd
+  */
+ static const char* apzStrict_Ansi_Not_CtdPatch[] = {
+     "format",
+     "%1 !defined(__STRICT_ANSI__)",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Strict_Ansi_Only fix
+  */
+ tSCC zStrict_Ansi_OnlyName[] =
+      "strict_ansi_only";
+ 
+ /*
+  *  File name selection pattern
+  */
+ #define zStrict_Ansi_OnlyList (char*)NULL
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzStrict_Ansi_OnlyMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zStrict_Ansi_OnlySelect0[] =
+        "^([ \t]*#[ \t]*if.*)(__STDC__[ \t]*!=[ \t]*0|__STDC__[ \t]*==[ \t]*1|__STDC__[ \t]*-[ \t]*0[ \t]*==[ \t]*1|__STDC__[ \t]*-[ \t]*0[ \t]*!=[ \t]*0)";
+ 
+ /*
+  *  perform the C function call test
+  */
+ tSCC zStrict_Ansi_OnlyFTst0[] = "stdc_0_in_system_headers";
+ 
+ #define    STRICT_ANSI_ONLY_TEST_CT  2
+ static tTestDesc aStrict_Ansi_OnlyTests[] = {
+   { TT_FUNCTION, zStrict_Ansi_OnlyFTst0,   0 /* unused */ },
+   { TT_EGREP,    zStrict_Ansi_OnlySelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Strict_Ansi_Only
+  */
+ static const char* apzStrict_Ansi_OnlyPatch[] = {
+     "format",
+     "%1 defined(__STRICT_ANSI__)",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Struct_File fix
+  */
+ tSCC zStruct_FileName[] =
+      "struct_file";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zStruct_FileList[] =
+   "|rpc/xdr.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzStruct_FileMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zStruct_FileSelect0[] =
+        "^.*xdrstdio_create.*struct __file_s";
+ 
+ #define    STRUCT_FILE_TEST_CT  1
+ static tTestDesc aStruct_FileTests[] = {
+   { TT_EGREP,    zStruct_FileSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Struct_File
+  */
+ static const char* apzStruct_FilePatch[] = {
+     "format",
+     "struct __file_s;\n\
+ %0",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Struct_Sockaddr fix
+  */
+ tSCC zStruct_SockaddrName[] =
+      "struct_sockaddr";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zStruct_SockaddrList[] =
+   "|rpc/auth.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzStruct_SockaddrMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zStruct_SockaddrSelect0[] =
+        "^.*authdes_create.*struct sockaddr[^_]";
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zStruct_SockaddrBypass0[] =
+        "<sys/socket.h>";
+ tSCC zStruct_SockaddrBypass1[] =
+        "struct sockaddr;\n";
+ 
+ #define    STRUCT_SOCKADDR_TEST_CT  3
+ static tTestDesc aStruct_SockaddrTests[] = {
+   { TT_NEGREP,   zStruct_SockaddrBypass0, (regex_t*)NULL },
+   { TT_NEGREP,   zStruct_SockaddrBypass1, (regex_t*)NULL },
+   { TT_EGREP,    zStruct_SockaddrSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Struct_Sockaddr
+  */
+ static const char* apzStruct_SockaddrPatch[] = {
+     "format",
+     "struct sockaddr;\n\
+ %0",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Sun_Auth_Proto fix
+  */
+ tSCC zSun_Auth_ProtoName[] =
+      "sun_auth_proto";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zSun_Auth_ProtoList[] =
+   "|rpc/auth.h|rpc/clnt.h|rpc/svc.h|rpc/xdr.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzSun_Auth_ProtoMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zSun_Auth_ProtoSelect0[] =
+        "\\(\\*[a-z][a-z_]*\\)\\(\\)";
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zSun_Auth_ProtoBypass0[] =
+        "__cplusplus";
+ 
+ #define    SUN_AUTH_PROTO_TEST_CT  2
+ static tTestDesc aSun_Auth_ProtoTests[] = {
+   { TT_NEGREP,   zSun_Auth_ProtoBypass0, (regex_t*)NULL },
+   { TT_EGREP,    zSun_Auth_ProtoSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Sun_Auth_Proto
+  */
+ static const char* apzSun_Auth_ProtoPatch[] = {
+     "format",
+     "#ifdef __cplusplus\n\
+ %1(...);%2\n\
+ #else\n\
+ %1();%2\n\
+ #endif",
+     "(.*\\(\\*[a-z][a-z_]*\\))\\(\\);(.*)",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Sun_Bogus_Ifdef fix
+  */
+ tSCC zSun_Bogus_IfdefName[] =
+      "sun_bogus_ifdef";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zSun_Bogus_IfdefList[] =
+   "|hsfs/hsfs_spec.h|hsfs/iso_spec.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzSun_Bogus_IfdefMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zSun_Bogus_IfdefSelect0[] =
+        "#ifdef(.*\\|\\|.*)";
+ 
+ #define    SUN_BOGUS_IFDEF_TEST_CT  1
+ static tTestDesc aSun_Bogus_IfdefTests[] = {
+   { TT_EGREP,    zSun_Bogus_IfdefSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Sun_Bogus_Ifdef
+  */
+ static const char* apzSun_Bogus_IfdefPatch[] = {
+     "format",
+     "#if%1",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Sun_Catmacro fix
+  */
+ tSCC zSun_CatmacroName[] =
+      "sun_catmacro";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zSun_CatmacroList[] =
+   "|pixrect/memvar.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzSun_CatmacroMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zSun_CatmacroSelect0[] =
+        "^#define[ \t]+CAT\\(a,b\\).*";
+ 
+ #define    SUN_CATMACRO_TEST_CT  1
+ static tTestDesc aSun_CatmacroTests[] = {
+   { TT_EGREP,    zSun_CatmacroSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Sun_Catmacro
+  */
+ static const char* apzSun_CatmacroPatch[] = {
+     "format",
+     "#ifdef __STDC__\n\
+ #  define CAT(a,b) a##b\n\
+ #else\n\
+ %0\n\
+ #endif",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Sun_Malloc fix
+  */
+ tSCC zSun_MallocName[] =
+      "sun_malloc";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zSun_MallocList[] =
+   "|malloc.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzSun_MallocMachs (const char**)NULL
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zSun_MallocBypass0[] =
+        "_CLASSIC_ANSI_TYPES";
+ 
+ #define    SUN_MALLOC_TEST_CT  1
+ static tTestDesc aSun_MallocTests[] = {
+   { TT_NEGREP,   zSun_MallocBypass0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Sun_Malloc
+  */
+ static const char* apzSun_MallocPatch[] = { "sed",
+     "-e", "s/typedef[ \t]char \\*\tmalloc_t/typedef void \\*\tmalloc_t/g",
+     "-e", "s/int[ \t][ \t]*free/void\tfree/g",
+     "-e", "s/char\\([ \t]*\\*[ \t]*malloc\\)/void\\1/g",
+     "-e", "s/char\\([ \t]*\\*[ \t]*realloc\\)/void\\1/g",
+     "-e", "s/char\\([ \t]*\\*[ \t]*calloc\\)/void\\1/g",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Sun_Rusers_Semi fix
+  */
+ tSCC zSun_Rusers_SemiName[] =
+      "sun_rusers_semi";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zSun_Rusers_SemiList[] =
+   "|rpcsvc/rusers.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzSun_Rusers_SemiMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zSun_Rusers_SemiSelect0[] =
+        "_cnt$";
+ 
+ #define    SUN_RUSERS_SEMI_TEST_CT  1
+ static tTestDesc aSun_Rusers_SemiTests[] = {
+   { TT_EGREP,    zSun_Rusers_SemiSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Sun_Rusers_Semi
+  */
+ static const char* apzSun_Rusers_SemiPatch[] = { "sed",
+     "-e", "/^struct/,/^};/s/_cnt$/_cnt;/",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Sun_Signal fix
+  */
+ tSCC zSun_SignalName[] =
+      "sun_signal";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zSun_SignalList[] =
+   "|sys/signal.h|signal.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzSun_SignalMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zSun_SignalSelect0[] =
+        "^void\t\\(\\*signal\\(\\)\\)\\(\\);.*";
+ 
+ #define    SUN_SIGNAL_TEST_CT  1
+ static tTestDesc aSun_SignalTests[] = {
+   { TT_EGREP,    zSun_SignalSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Sun_Signal
+  */
+ static const char* apzSun_SignalPatch[] = {
+     "format",
+     "#ifdef __cplusplus\n\
+ void\t(*signal(...))(...);\n\
+ #else\n\
+ %0\n\
+ #endif",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Sunos_Strlen fix
+  */
+ tSCC zSunos_StrlenName[] =
+      "sunos_strlen";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zSunos_StrlenList[] =
+   "|strings.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzSunos_StrlenMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zSunos_StrlenSelect0[] =
+        "int[ \t]*strlen\\(\\);(.*)";
+ 
+ #define    SUNOS_STRLEN_TEST_CT  1
+ static tTestDesc aSunos_StrlenTests[] = {
+   { TT_EGREP,    zSunos_StrlenSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Sunos_Strlen
+  */
+ static const char* apzSunos_StrlenPatch[] = {
+     "format",
+     "__SIZE_TYPE__ strlen();%1",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Svr4_Disable_Opt fix
+  */
+ tSCC zSvr4_Disable_OptName[] =
+      "svr4_disable_opt";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zSvr4_Disable_OptList[] =
+   "|string.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzSvr4_Disable_OptMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zSvr4_Disable_OptSelect0[] =
+        "#define.*__std_hdr_";
+ 
+ #define    SVR4_DISABLE_OPT_TEST_CT  1
+ static tTestDesc aSvr4_Disable_OptTests[] = {
+   { TT_EGREP,    zSvr4_Disable_OptSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Svr4_Disable_Opt
+  */
+ static const char* apzSvr4_Disable_OptPatch[] = { "sed",
+     "-e", "/#define.*__std_hdr_/d",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Svr4_Getcwd fix
+  */
+ tSCC zSvr4_GetcwdName[] =
+      "svr4_getcwd";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zSvr4_GetcwdList[] =
+   "|stdlib.h|unistd.h|prototypes.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzSvr4_GetcwdMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zSvr4_GetcwdSelect0[] =
+        "getcwd\\(char \\*, int\\)";
+ 
+ #define    SVR4_GETCWD_TEST_CT  1
+ static tTestDesc aSvr4_GetcwdTests[] = {
+   { TT_EGREP,    zSvr4_GetcwdSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Svr4_Getcwd
+  */
+ static const char* apzSvr4_GetcwdPatch[] = {
+     "format",
+     "getcwd(char *, size_t)",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Svr4_Krnl fix
+  */
+ tSCC zSvr4_KrnlName[] =
+      "svr4_krnl";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zSvr4_KrnlList[] =
+   "|fs/rfs/rf_cache.h|sys/erec.h|sys/err.h|sys/char.h|sys/getpages.h|sys/map.h|sys/cmn_err.h|sys/kdebugger.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzSvr4_KrnlMachs[] = {
+         "*-*-sysv4*",
+         "i?86-sequent-ptx*",
+         (const char*)NULL };
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zSvr4_KrnlBypass0[] =
+        "_KERNEL";
+ 
+ #define    SVR4_KRNL_TEST_CT  1
+ static tTestDesc aSvr4_KrnlTests[] = {
+   { TT_NEGREP,   zSvr4_KrnlBypass0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Svr4_Krnl
+  */
+ static const char* apzSvr4_KrnlPatch[] = {
+     "wrap",
+     "#ifdef _KERNEL\n",
+     "#endif /* _KERNEL */\n",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Svr4_Profil fix
+  */
+ tSCC zSvr4_ProfilName[] =
+      "svr4_profil";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zSvr4_ProfilList[] =
+   "|stdlib.h|unistd.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzSvr4_ProfilMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zSvr4_ProfilSelect0[] =
+        "profil\\(unsigned short \\*, unsigned int, unsigned int, unsigned int\\)";
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zSvr4_ProfilBypass0[] =
+        "Silicon Graphics";
+ 
+ #define    SVR4_PROFIL_TEST_CT  2
+ static tTestDesc aSvr4_ProfilTests[] = {
+   { TT_NEGREP,   zSvr4_ProfilBypass0, (regex_t*)NULL },
+   { TT_EGREP,    zSvr4_ProfilSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Svr4_Profil
+  */
+ static const char* apzSvr4_ProfilPatch[] = {
+     "format",
+     "profil(unsigned short *, size_t, int, unsigned int)",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Svr4_Sighandler_Type fix
+  */
+ tSCC zSvr4_Sighandler_TypeName[] =
+      "svr4_sighandler_type";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zSvr4_Sighandler_TypeList[] =
+   "|sys/signal.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzSvr4_Sighandler_TypeMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zSvr4_Sighandler_TypeSelect0[] =
+        "void *\\(\\*\\)\\(\\)";
+ 
+ #define    SVR4_SIGHANDLER_TYPE_TEST_CT  1
+ static tTestDesc aSvr4_Sighandler_TypeTests[] = {
+   { TT_EGREP,    zSvr4_Sighandler_TypeSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Svr4_Sighandler_Type
+  */
+ static const char* apzSvr4_Sighandler_TypePatch[] = {
+     "format",
+     "void (*)(int)",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Svr4_Undeclared_Getrnge fix
+  */
+ tSCC zSvr4_Undeclared_GetrngeName[] =
+      "svr4_undeclared_getrnge";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zSvr4_Undeclared_GetrngeList[] =
+   "|regexp.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzSvr4_Undeclared_GetrngeMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zSvr4_Undeclared_GetrngeSelect0[] =
+        "getrnge";
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zSvr4_Undeclared_GetrngeBypass0[] =
+        "static void getrnge";
+ 
+ #define    SVR4_UNDECLARED_GETRNGE_TEST_CT  2
+ static tTestDesc aSvr4_Undeclared_GetrngeTests[] = {
+   { TT_NEGREP,   zSvr4_Undeclared_GetrngeBypass0, (regex_t*)NULL },
+   { TT_EGREP,    zSvr4_Undeclared_GetrngeSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Svr4_Undeclared_Getrnge
+  */
+ static const char* apzSvr4_Undeclared_GetrngePatch[] = {
+     "format",
+     "%0\n\
+ static int getrnge ();",
+     "^static int[ \t]+size;",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Sysv68_String fix
+  */
+ tSCC zSysv68_StringName[] =
+      "sysv68_string";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zSysv68_StringList[] =
+   "|testing.h|string.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzSysv68_StringMachs (const char**)NULL
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zSysv68_StringBypass0[] =
+        "_CLASSIC_ANSI_TYPES";
+ 
+ #define    SYSV68_STRING_TEST_CT  1
+ static tTestDesc aSysv68_StringTests[] = {
+   { TT_NEGREP,   zSysv68_StringBypass0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Sysv68_String
+  */
+ static const char* apzSysv68_StringPatch[] = { "sed",
+     "-e", "s/extern[ \t]*int[ \t]*strlen();/extern unsigned int strlen();/",
+     "-e", "s/extern[ \t]*int[ \t]*ffs[ \t]*(long);/extern int ffs(int);/",
+     "-e", "s/strdup(char \\*s1);/strdup(const char *s1);/",
+     "-e", "/^extern char$/N",
+     "-e", "s/^extern char\\(\\n\t\\*memccpy(),\\)$/extern void\\1/",
+     "-e", "/^extern int$/N",
+     "-e", "s/^extern int\\(\\n\tstrlen(),\\)/extern size_t\\1/",
+     "-e", "/^\tstrncmp(),$/N",
+     "-e", "s/^\\(\tstrncmp()\\),\\n\\(\tstrlen(),\\)$/\\1;\\\n\
+ extern unsigned int\\\n\
+ \\2/",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Sysz_Stdlib_For_Sun fix
+  */
+ tSCC zSysz_Stdlib_For_SunName[] =
+      "sysz_stdlib_for_sun";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zSysz_Stdlib_For_SunList[] =
+   "|stdlib.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzSysz_Stdlib_For_SunMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zSysz_Stdlib_For_SunSelect0[] =
+        "char[ \t]*\\*[ \t]*(calloc|malloc|realloc|bsearch)[ \t]*\\(";
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zSysz_Stdlib_For_SunBypass0[] =
+        "_CLASSIC_ANSI_TYPES";
+ 
+ #define    SYSZ_STDLIB_FOR_SUN_TEST_CT  2
+ static tTestDesc aSysz_Stdlib_For_SunTests[] = {
+   { TT_NEGREP,   zSysz_Stdlib_For_SunBypass0, (regex_t*)NULL },
+   { TT_EGREP,    zSysz_Stdlib_For_SunSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Sysz_Stdlib_For_Sun
+  */
+ static const char* apzSysz_Stdlib_For_SunPatch[] = {
+     "format",
+     "void *\t%1(",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Thread_Keyword fix
+  */
+ tSCC zThread_KeywordName[] =
+      "thread_keyword";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zThread_KeywordList[] =
+   "|pthread.h|bits/sigthread.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzThread_KeywordMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zThread_KeywordSelect0[] =
+        "([* ])__thread([,)])";
+ 
+ #define    THREAD_KEYWORD_TEST_CT  1
+ static tTestDesc aThread_KeywordTests[] = {
+   { TT_EGREP,    zThread_KeywordSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Thread_Keyword
+  */
+ static const char* apzThread_KeywordPatch[] = {
+     "format",
+     "%1__thr%2",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Tinfo_Cplusplus fix
+  */
+ tSCC zTinfo_CplusplusName[] =
+      "tinfo_cplusplus";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zTinfo_CplusplusList[] =
+   "|tinfo.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzTinfo_CplusplusMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zTinfo_CplusplusSelect0[] =
+        "[ \t]_cplusplus";
+ 
+ #define    TINFO_CPLUSPLUS_TEST_CT  1
+ static tTestDesc aTinfo_CplusplusTests[] = {
+   { TT_EGREP,    zTinfo_CplusplusSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Tinfo_Cplusplus
+  */
+ static const char* apzTinfo_CplusplusPatch[] = {
+     "format",
+     " __cplusplus",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Ultrix_Atexit_Param fix
+  */
+ tSCC zUltrix_Atexit_ParamName[] =
+      "ultrix_atexit_param";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zUltrix_Atexit_ParamList[] =
+   "|stdlib.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzUltrix_Atexit_ParamMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zUltrix_Atexit_ParamSelect0[] =
+        "atexit\\(.*\\(\\)";
+ 
+ #define    ULTRIX_ATEXIT_PARAM_TEST_CT  1
+ static tTestDesc aUltrix_Atexit_ParamTests[] = {
+   { TT_EGREP,    zUltrix_Atexit_ParamSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Ultrix_Atexit_Param
+  */
+ static const char* apzUltrix_Atexit_ParamPatch[] = {
+     "format",
+     "atexit( void (*__func)( void )",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Ultrix_Atof_Param fix
+  */
+ tSCC zUltrix_Atof_ParamName[] =
+      "ultrix_atof_param";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zUltrix_Atof_ParamList[] =
+   "|math.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzUltrix_Atof_ParamMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zUltrix_Atof_ParamSelect0[] =
+        "atof\\([ \t]*char";
+ 
+ #define    ULTRIX_ATOF_PARAM_TEST_CT  1
+ static tTestDesc aUltrix_Atof_ParamTests[] = {
+   { TT_EGREP,    zUltrix_Atof_ParamSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Ultrix_Atof_Param
+  */
+ static const char* apzUltrix_Atof_ParamPatch[] = {
+     "format",
+     "atof(const char",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Ultrix_Const fix
+  */
+ tSCC zUltrix_ConstName[] =
+      "ultrix_const";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zUltrix_ConstList[] =
+   "|stdio.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzUltrix_ConstMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zUltrix_ConstSelect0[] =
+        "perror\\( char \\*";
+ 
+ #define    ULTRIX_CONST_TEST_CT  1
+ static tTestDesc aUltrix_ConstTests[] = {
+   { TT_EGREP,    zUltrix_ConstSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Ultrix_Const
+  */
+ static const char* apzUltrix_ConstPatch[] = {
+     "format",
+     "%1 const %3 *__",
+     "([ \t*](perror|fputs|fwrite|scanf|fscanf)\\(.*)[ \t]+(char|void) \\*__",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Ultrix_Const2 fix
+  */
+ tSCC zUltrix_Const2Name[] =
+      "ultrix_const2";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zUltrix_Const2List[] =
+   "|stdio.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzUltrix_Const2Machs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zUltrix_Const2Select0[] =
+        "\\*fopen\\( char \\*";
+ 
+ #define    ULTRIX_CONST2_TEST_CT  1
+ static tTestDesc aUltrix_Const2Tests[] = {
+   { TT_EGREP,    zUltrix_Const2Select0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Ultrix_Const2
+  */
+ static const char* apzUltrix_Const2Patch[] = {
+     "format",
+     "%1( const char *%3, const char *",
+     "([ \t*](fopen|sscanf|popen|tempnam))\\([ \t]*char[ \t]*\\*([^,]*),[ \t]*char[ \t]*\\*[ \t]*",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Ultrix_Const3 fix
+  */
+ tSCC zUltrix_Const3Name[] =
+      "ultrix_const3";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zUltrix_Const3List[] =
+   "|stdio.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzUltrix_Const3Machs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zUltrix_Const3Select0[] =
+        "fdopen\\( .*, char \\*";
+ 
+ #define    ULTRIX_CONST3_TEST_CT  1
+ static tTestDesc aUltrix_Const3Tests[] = {
+   { TT_EGREP,    zUltrix_Const3Select0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Ultrix_Const3
+  */
+ static const char* apzUltrix_Const3Patch[] = {
+     "format",
+     "%1 const %3 *__",
+     "([ \t*](fdopen)\\(.*)[ \t]+(char|void) \\*__",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Ultrix_Fix_Fixproto fix
+  */
+ tSCC zUltrix_Fix_FixprotoName[] =
+      "ultrix_fix_fixproto";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zUltrix_Fix_FixprotoList[] =
+   "|sys/utsname.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzUltrix_Fix_FixprotoMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zUltrix_Fix_FixprotoSelect0[] =
+        "ULTRIX";
+ 
+ #define    ULTRIX_FIX_FIXPROTO_TEST_CT  1
+ static tTestDesc aUltrix_Fix_FixprotoTests[] = {
+   { TT_EGREP,    zUltrix_Fix_FixprotoSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Ultrix_Fix_Fixproto
+  */
+ static const char* apzUltrix_Fix_FixprotoPatch[] = {
+     "format",
+     "struct utsname;\n\
+ %0",
+     "^[ \t]*extern[ \t]*int[ \t]*uname\\(\\);",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Ultrix_Ifdef fix
+  */
+ tSCC zUltrix_IfdefName[] =
+      "ultrix_ifdef";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zUltrix_IfdefList[] =
+   "|sys/file.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzUltrix_IfdefMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zUltrix_IfdefSelect0[] =
+        "^#ifdef KERNEL[ \t]+&&";
+ 
+ #define    ULTRIX_IFDEF_TEST_CT  1
+ static tTestDesc aUltrix_IfdefTests[] = {
+   { TT_EGREP,    zUltrix_IfdefSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Ultrix_Ifdef
+  */
+ static const char* apzUltrix_IfdefPatch[] = {
+     "format",
+     "#if defined(KERNEL) &&",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Ultrix_Locale fix
+  */
+ tSCC zUltrix_LocaleName[] =
+      "ultrix_locale";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zUltrix_LocaleList[] =
+   "|locale.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzUltrix_LocaleMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zUltrix_LocaleSelect0[] =
+        "@\\(#\\)locale\\.h.*6\\.1.*\\(ULTRIX\\)";
+ 
+ #define    ULTRIX_LOCALE_TEST_CT  1
+ static tTestDesc aUltrix_LocaleTests[] = {
+   { TT_EGREP,    zUltrix_LocaleSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Ultrix_Locale
+  */
+ static const char* apzUltrix_LocalePatch[] = {
+     "wrap",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Ultrix_Math_Ifdef fix
+  */
+ tSCC zUltrix_Math_IfdefName[] =
+      "ultrix_math_ifdef";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zUltrix_Math_IfdefList[] =
+   "|sys/limits.h|float.h|math.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzUltrix_Math_IfdefMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zUltrix_Math_IfdefSelect0[] =
+        "^(#if.*)\\|\\|[ \t]+CC\\$[a-z]+";
+ 
+ #define    ULTRIX_MATH_IFDEF_TEST_CT  1
+ static tTestDesc aUltrix_Math_IfdefTests[] = {
+   { TT_EGREP,    zUltrix_Math_IfdefSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Ultrix_Math_Ifdef
+  */
+ static const char* apzUltrix_Math_IfdefPatch[] = {
+     "format",
+     "%1",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Ultrix_Nested_Ioctl fix
+  */
+ tSCC zUltrix_Nested_IoctlName[] =
+      "ultrix_nested_ioctl";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zUltrix_Nested_IoctlList[] =
+   "|sys/ioctl.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzUltrix_Nested_IoctlMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zUltrix_Nested_IoctlSelect0[] =
+        "^/\\* #define SIOCSCREEN";
+ 
+ #define    ULTRIX_NESTED_IOCTL_TEST_CT  1
+ static tTestDesc aUltrix_Nested_IoctlTests[] = {
+   { TT_EGREP,    zUltrix_Nested_IoctlSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Ultrix_Nested_Ioctl
+  */
+ static const char* apzUltrix_Nested_IoctlPatch[] = { "sed",
+     "-e", "/^\\/\\* #define SIOCSCREEN/s@/\\* screend@*//* screend@",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Ultrix_Nested_Svc fix
+  */
+ tSCC zUltrix_Nested_SvcName[] =
+      "ultrix_nested_svc";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zUltrix_Nested_SvcList[] =
+   "|rpc/svc.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzUltrix_Nested_SvcMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zUltrix_Nested_SvcSelect0[] =
+        "^ \\*[ \t]*int protocol;  */\\*";
+ 
+ #define    ULTRIX_NESTED_SVC_TEST_CT  1
+ static tTestDesc aUltrix_Nested_SvcTests[] = {
+   { TT_EGREP,    zUltrix_Nested_SvcSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Ultrix_Nested_Svc
+  */
+ static const char* apzUltrix_Nested_SvcPatch[] = { "sed",
+     "-e", "s@^\\( \\*\tint protocol;  \\)/\\*@\\1*/ /*@",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Ultrix_Stat fix
+  */
+ tSCC zUltrix_StatName[] =
+      "ultrix_stat";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zUltrix_StatList[] =
+   "|sys/stat.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzUltrix_StatMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zUltrix_StatSelect0[] =
+        "@\\(#\\)stat\\.h.*6\\.1.*\\(ULTRIX\\)";
+ 
+ #define    ULTRIX_STAT_TEST_CT  1
+ static tTestDesc aUltrix_StatTests[] = {
+   { TT_EGREP,    zUltrix_StatSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Ultrix_Stat
+  */
+ static const char* apzUltrix_StatPatch[] = { "sed",
+     "-e", "/^#define[ \t]S_IFPORT[ \t]*S_IFIFO$/a\\\n\
+ \\\n\
+ /* macro to test for symbolic link */\\\n\
+ #define S_ISLNK(mode) (((mode) & S_IFMT) == S_IFLNK)\\\n\n",
+     "-e", "/^[ \t]*fstat(),$/a\\\n\
+ \tlstat(),\n",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Ultrix_Static fix
+  */
+ tSCC zUltrix_StaticName[] =
+      "ultrix_static";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zUltrix_StaticList[] =
+   "|machine/cpu.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzUltrix_StaticMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zUltrix_StaticSelect0[] =
+        "#include \"r[34]_cpu";
+ 
+ #define    ULTRIX_STATIC_TEST_CT  1
+ static tTestDesc aUltrix_StaticTests[] = {
+   { TT_EGREP,    zUltrix_StaticSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Ultrix_Static
+  */
+ static const char* apzUltrix_StaticPatch[] = { "sed",
+     "-e", "s/^static struct tlb_pid_state/struct tlb_pid_state/",
+     "-e", "s/^#include \"r3_cpu\\.h\"$/#include <machine\\/r3_cpu\\.h>/",
+     "-e", "s/^#include \"r4_cpu\\.h\"$/#include <machine\\/r4_cpu\\.h>/",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Ultrix_Stdlib fix
+  */
+ tSCC zUltrix_StdlibName[] =
+      "ultrix_stdlib";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zUltrix_StdlibList[] =
+   "|stdlib.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzUltrix_StdlibMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zUltrix_StdlibSelect0[] =
+        "@\\(#\\)stdlib\\.h.*6\\.1.*\\(ULTRIX\\)";
+ 
+ #define    ULTRIX_STDLIB_TEST_CT  1
+ static tTestDesc aUltrix_StdlibTests[] = {
+   { TT_EGREP,    zUltrix_StdlibSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Ultrix_Stdlib
+  */
+ static const char* apzUltrix_StdlibPatch[] = { "sed",
+     "-e", "/^char.*getenv( const char .* );.*$/a\\\n\
+ int\t\tsetenv( const char *__name, const char *__val, int __ovrwrt );\\\n\
+ void\t\tunsetenv( const char *__name );\\\n\
+ int\t\tputenv( char *__s );\n",
+     "-e", "/^char.*getenv();.*$/a\\\n\
+ int\tsetenv();\\\n\
+ void\tunsetenv();\\\n\
+ int\tputenv();\n",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Ultrix_Strings fix
+  */
+ tSCC zUltrix_StringsName[] =
+      "ultrix_strings";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zUltrix_StringsList[] =
+   "|strings.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzUltrix_StringsMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zUltrix_StringsSelect0[] =
+        "@\\(#\\)strings\\.h.*6\\.1.*\\(ULTRIX\\)";
+ 
+ #define    ULTRIX_STRINGS_TEST_CT  1
+ static tTestDesc aUltrix_StringsTests[] = {
+   { TT_EGREP,    zUltrix_StringsSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Ultrix_Strings
+  */
+ static const char* apzUltrix_StringsPatch[] = {
+     "wrap",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Ultrix_Strings2 fix
+  */
+ tSCC zUltrix_Strings2Name[] =
+      "ultrix_strings2";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zUltrix_Strings2List[] =
+   "|strings.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzUltrix_Strings2Machs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zUltrix_Strings2Select0[] =
+        "@\\(#\\)strings\\.h.*6\\.1.*\\(ULTRIX\\)";
+ 
+ #define    ULTRIX_STRINGS2_TEST_CT  1
+ static tTestDesc aUltrix_Strings2Tests[] = {
+   { TT_EGREP,    zUltrix_Strings2Select0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Ultrix_Strings2
+  */
+ static const char* apzUltrix_Strings2Patch[] = { "sed",
+     "-e", "/^.*strncmp( const .* );.*/a\\\n\
+ \\\n\
+ extern int\\\n\
+ \tstrcasecmp( const char *__s1, const char *__s2),\\\n\
+ \tstrncasecmp( const char *__s1, const char *__s2, size_t __n );\n",
+     "-e", "/^.*strncmp();.*/a\\\n\
+ extern int\\\n\
+ \tstrcasecmp(),\\\n\
+ \tstrncasecmp();\n",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Ultrix_Sys_Time fix
+  */
+ tSCC zUltrix_Sys_TimeName[] =
+      "ultrix_sys_time";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zUltrix_Sys_TimeList[] =
+   "|sys/time.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzUltrix_Sys_TimeMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zUltrix_Sys_TimeSelect0[] =
+        "@\\(#\\)time\\.h.*6\\.1.*\\(ULTRIX\\)";
+ 
+ #define    ULTRIX_SYS_TIME_TEST_CT  1
+ static tTestDesc aUltrix_Sys_TimeTests[] = {
+   { TT_EGREP,    zUltrix_Sys_TimeSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Ultrix_Sys_Time
+  */
+ static const char* apzUltrix_Sys_TimePatch[] = { "sed",
+     "-e", "/^extern.*time_t.*time( time_t .* );.*$/a\\\n\
+ \\\n\
+ extern int adjtime(struct timeval *, struct timeval *);\\\n\
+ extern int getitimer(int, struct itimerval *);\\\n\
+ extern int setitimer(int, struct itimerval *, struct itimerval *);\\\n\
+ extern int gettimeofday(struct timeval *, struct timezone *);\\\n\
+ extern int settimeofday(struct timeval *, struct timezone *);\\\n\
+ extern void profil(const void *, size_t, size_t, unsigned int);\\\n\
+ extern int stime(const time_t *);\\\n\
+ extern int utimes(const char *, const struct timeval[2]);\\\n\
+ extern int select(int, fd_set *, fd_set *, fd_set *, struct timeval *);\n",
+     "-e", "/^extern.*double.*difftime();.*$/a\\\n\
+ extern\tint adjtime();\\\n\
+ extern\tint getitimer();\\\n\
+ extern\tint setitimer();\\\n\
+ extern\tint gettimeofday();\\\n\
+ extern\tint settimeofday();\\\n\
+ extern\tvoid profil();\\\n\
+ extern\tint stime();\\\n\
+ extern\tint utimes();\\\n\
+ extern\tint select();\n",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Ultrix_Unistd fix
+  */
+ tSCC zUltrix_UnistdName[] =
+      "ultrix_unistd";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zUltrix_UnistdList[] =
+   "|unistd.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzUltrix_UnistdMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zUltrix_UnistdSelect0[] =
+        "@\\(#\\)unistd\\.h.*6\\.1.*\\(ULTRIX\\)";
+ 
+ #define    ULTRIX_UNISTD_TEST_CT  1
+ static tTestDesc aUltrix_UnistdTests[] = {
+   { TT_EGREP,    zUltrix_UnistdSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Ultrix_Unistd
+  */
+ static const char* apzUltrix_UnistdPatch[] = { "sed",
+     "-e", "/^[ \t]*getgroups(),.*$/a\\\n\
+ \tgetpagesize(),\n",
+     "-e", "/^[ \t]*fork(),.*$/a\\\n\
+ \tvfork(),\n",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Unicosmk_Restrict fix
+  */
+ tSCC zUnicosmk_RestrictName[] =
+      "unicosmk_restrict";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zUnicosmk_RestrictList[] =
+   "|stdio.h|stdlib.h|wchar.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzUnicosmk_RestrictMachs[] = {
+         "*-*-unicosmk*",
+         (const char*)NULL };
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zUnicosmk_RestrictSelect0[] =
+        "(\\*[ \t]*)restrict([ \t]+)";
+ 
+ #define    UNICOSMK_RESTRICT_TEST_CT  1
+ static tTestDesc aUnicosmk_RestrictTests[] = {
+   { TT_EGREP,    zUnicosmk_RestrictSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Unicosmk_Restrict
+  */
+ static const char* apzUnicosmk_RestrictPatch[] = {
+     "format",
+     "%1__restrict__%2",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Uw7_Byteorder_Fix fix
+  */
+ tSCC zUw7_Byteorder_FixName[] =
+      "uw7_byteorder_fix";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zUw7_Byteorder_FixList[] =
+   "|arpa/inet.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzUw7_Byteorder_FixMachs[] = {
+         "*-*-sysv4*",
+         "i?86-*-sysv5*",
+         "i?86-*-udk*",
+         "i?86-*-solaris2.[0-4]",
+         "powerpcle-*-solaris2.[0-4]",
+         "sparc-*-solaris2.[0-4]",
+         (const char*)NULL };
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zUw7_Byteorder_FixSelect0[] =
+        "in_port_t";
+ 
+ /*
+  *  perform the 'test' shell command - do fix on success
+  */
+ tSCC zUw7_Byteorder_FixTest0[] =
+        "-f sys/byteorder.h";
+ 
+ #define    UW7_BYTEORDER_FIX_TEST_CT  2
+ static tTestDesc aUw7_Byteorder_FixTests[] = {
+   { TT_TEST,     zUw7_Byteorder_FixTest0,   0 /* unused */ },
+   { TT_EGREP,    zUw7_Byteorder_FixSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Uw7_Byteorder_Fix
+  */
+ static const char* apzUw7_Byteorder_FixPatch[] = {
+     "format",
+     "",
+     "^extern.*[ \t](htons|ntohs).*\\(in_port_t\\).*;",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Va_I960_Macro fix
+  */
+ tSCC zVa_I960_MacroName[] =
+      "va_i960_macro";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zVa_I960_MacroList[] =
+   "|arch/i960/archI960.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzVa_I960_MacroMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zVa_I960_MacroSelect0[] =
+        "__(vsiz|vali|vpad|alignof__)";
+ 
+ #define    VA_I960_MACRO_TEST_CT  1
+ static tTestDesc aVa_I960_MacroTests[] = {
+   { TT_EGREP,    zVa_I960_MacroSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Va_I960_Macro
+  */
+ static const char* apzVa_I960_MacroPatch[] = {
+     "format",
+     "__vx%1",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Void_Null fix
+  */
+ tSCC zVoid_NullName[] =
+      "void_null";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zVoid_NullList[] =
+   "|curses.h|dbm.h|locale.h|stdio.h|stdlib.h|string.h|time.h|unistd.h|sys/dir.h|sys/param.h|sys/types.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzVoid_NullMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zVoid_NullSelect0[] =
+        "^#[ \t]*define[ \t]+NULL[ \t]+\\(\\(void[ \t]*\\*\\)0\\)";
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zVoid_NullBypass0[] =
+        "__cplusplus";
+ 
+ #define    VOID_NULL_TEST_CT  2
+ static tTestDesc aVoid_NullTests[] = {
+   { TT_NEGREP,   zVoid_NullBypass0, (regex_t*)NULL },
+   { TT_EGREP,    zVoid_NullSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Void_Null
+  */
+ static const char* apzVoid_NullPatch[] = {
+     "format",
+     "#define NULL 0",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Vxworks_Gcc_Problem fix
+  */
+ tSCC zVxworks_Gcc_ProblemName[] =
+      "vxworks_gcc_problem";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zVxworks_Gcc_ProblemList[] =
+   "|types/vxTypesBase.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzVxworks_Gcc_ProblemMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zVxworks_Gcc_ProblemSelect0[] =
+        "__GNUC_TYPEOF_FEATURE_BROKEN_USE_DEFAULT_UNTIL_FIXED__";
+ 
+ #define    VXWORKS_GCC_PROBLEM_TEST_CT  1
+ static tTestDesc aVxworks_Gcc_ProblemTests[] = {
+   { TT_EGREP,    zVxworks_Gcc_ProblemSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Vxworks_Gcc_Problem
+  */
+ static const char* apzVxworks_Gcc_ProblemPatch[] = { "sed",
+     "-e", "s/#ifdef __GNUC_TYPEOF_FEATURE_BROKEN_USE_DEFAULT_UNTIL_FIXED__/#if 1/",
+     "-e", "/[ \t]size_t/i\\\n\
+ #ifndef _GCC_SIZE_T\\\n\
+ #define _GCC_SIZE_T\n",
+     "-e", "/[ \t]size_t/a\\\n\
+ #endif\n",
+     "-e", "/[ \t]ptrdiff_t/i\\\n\
+ #ifndef _GCC_PTRDIFF_T\\\n\
+ #define _GCC_PTRDIFF_T\n",
+     "-e", "/[ \t]ptrdiff_t/a\\\n\
+ #endif\n",
+     "-e", "/[ \t]wchar_t/i\\\n\
+ #ifndef _GCC_WCHAR_T\\\n\
+ #define _GCC_WCHAR_T\n",
+     "-e", "/[ \t]wchar_t/a\\\n\
+ #endif\n",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Vxworks_Needs_Vxtypes fix
+  */
+ tSCC zVxworks_Needs_VxtypesName[] =
+      "vxworks_needs_vxtypes";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zVxworks_Needs_VxtypesList[] =
+   "|time.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzVxworks_Needs_VxtypesMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zVxworks_Needs_VxtypesSelect0[] =
+        "uint_t([ \t]+_clocks_per_sec)";
+ 
+ #define    VXWORKS_NEEDS_VXTYPES_TEST_CT  1
+ static tTestDesc aVxworks_Needs_VxtypesTests[] = {
+   { TT_EGREP,    zVxworks_Needs_VxtypesSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Vxworks_Needs_Vxtypes
+  */
+ static const char* apzVxworks_Needs_VxtypesPatch[] = {
+     "format",
+     "unsigned int%1",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Vxworks_Needs_Vxworks fix
+  */
+ tSCC zVxworks_Needs_VxworksName[] =
+      "vxworks_needs_vxworks";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zVxworks_Needs_VxworksList[] =
+   "|sys/stat.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzVxworks_Needs_VxworksMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zVxworks_Needs_VxworksSelect0[] =
+        "#[ \t]define[ \t]+__INCstath";
+ 
+ /*
+  *  perform the 'test' shell command - do fix on success
+  */
+ tSCC zVxworks_Needs_VxworksTest0[] =
+        " -r types/vxTypesOld.h";
+ tSCC zVxworks_Needs_VxworksTest1[] =
+        " -n \"`egrep '#include' $file`\"";
+ tSCC zVxworks_Needs_VxworksTest2[] =
+        " -n \"`egrep ULONG $file`\"";
+ 
+ #define    VXWORKS_NEEDS_VXWORKS_TEST_CT  4
+ static tTestDesc aVxworks_Needs_VxworksTests[] = {
+   { TT_TEST,     zVxworks_Needs_VxworksTest0,   0 /* unused */ },
+   { TT_TEST,     zVxworks_Needs_VxworksTest1,   0 /* unused */ },
+   { TT_TEST,     zVxworks_Needs_VxworksTest2,   0 /* unused */ },
+   { TT_EGREP,    zVxworks_Needs_VxworksSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Vxworks_Needs_Vxworks
+  */
+ static const char* apzVxworks_Needs_VxworksPatch[] = { "sed",
+     "-e", "/#[ \t]define[ \t][ \t]*__INCstath/a\\\n\
+ #include <types/vxTypesOld.h>\n",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Vxworks_Time fix
+  */
+ tSCC zVxworks_TimeName[] =
+      "vxworks_time";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zVxworks_TimeList[] =
+   "|time.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzVxworks_TimeMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zVxworks_TimeSelect0[] =
+        "#[ \t]*define[ \t]+VOIDFUNCPTR[ \t].*";
+ 
+ /*
+  *  perform the 'test' shell command - do fix on success
+  */
+ tSCC zVxworks_TimeTest0[] =
+        " -r vxWorks.h";
+ 
+ #define    VXWORKS_TIME_TEST_CT  2
+ static tTestDesc aVxworks_TimeTests[] = {
+   { TT_TEST,     zVxworks_TimeTest0,   0 /* unused */ },
+   { TT_EGREP,    zVxworks_TimeSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Vxworks_Time
+  */
+ static const char* apzVxworks_TimePatch[] = {
+     "format",
+     "#ifndef __gcc_VOIDFUNCPTR_defined\n\
+ #ifdef __cplusplus\n\
+ typedef void (*__gcc_VOIDFUNCPTR) (...);\n\
+ #else\n\
+ typedef void (*__gcc_VOIDFUNCPTR) ();\n\
+ #endif\n\
+ #define __gcc_VOIDFUNCPTR_defined\n\
+ #endif\n\
+ #define VOIDFUNCPTR __gcc_VOIDFUNCPTR",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Windiss_Math1 fix
+  */
+ tSCC zWindiss_Math1Name[] =
+      "windiss_math1";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zWindiss_Math1List[] =
+   "|math.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzWindiss_Math1Machs[] = {
+         "*-*-windiss",
+         (const char*)NULL };
+ #define WINDISS_MATH1_TEST_CT  0
+ #define aWindiss_Math1Tests   (tTestDesc*)NULL
+ 
+ /*
+  *  Fix Command Arguments for Windiss_Math1
+  */
+ static const char* apzWindiss_Math1Patch[] = { "sed",
+     "-e", "s|inline long double cosl.*|#ifndef __GNUC__|",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Windiss_Math2 fix
+  */
+ tSCC zWindiss_Math2Name[] =
+      "windiss_math2";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zWindiss_Math2List[] =
+   "|math.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzWindiss_Math2Machs[] = {
+         "*-*-windiss",
+         (const char*)NULL };
+ #define WINDISS_MATH2_TEST_CT  0
+ #define aWindiss_Math2Tests   (tTestDesc*)NULL
+ 
+ /*
+  *  Fix Command Arguments for Windiss_Math2
+  */
+ static const char* apzWindiss_Math2Patch[] = { "sed",
+     "-e", "s|/\\* long double declarations \\*/|#endif /* __GNUC__ */|",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of Windiss_Valist fix
+  */
+ tSCC zWindiss_ValistName[] =
+      "windiss_valist";
+ 
+ /*
+  *  File name selection pattern
+  */
+ #define zWindiss_ValistList (char*)NULL
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzWindiss_ValistMachs[] = {
+         "*-*-windiss",
+         (const char*)NULL };
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zWindiss_ValistSelect0[] =
+        "(#include.*)diab/va_list.h";
+ 
+ #define    WINDISS_VALIST_TEST_CT  1
+ static tTestDesc aWindiss_ValistTests[] = {
+   { TT_EGREP,    zWindiss_ValistSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Windiss_Valist
+  */
+ static const char* apzWindiss_ValistPatch[] = { "sed",
+     "-e", "s|diab/va_list.h|stdarg.h|",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of X11_Class fix
+  */
+ tSCC zX11_ClassName[] =
+      "x11_class";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zX11_ClassList[] =
+   "|X11/ShellP.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzX11_ClassMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zX11_ClassSelect0[] =
+        "^([ \t]*char \\*)class;(.*)";
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zX11_ClassBypass0[] =
+        "__cplusplus";
+ 
+ #define    X11_CLASS_TEST_CT  2
+ static tTestDesc aX11_ClassTests[] = {
+   { TT_NEGREP,   zX11_ClassBypass0, (regex_t*)NULL },
+   { TT_EGREP,    zX11_ClassSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for X11_Class
+  */
+ static const char* apzX11_ClassPatch[] = {
+     "format",
+     "#ifdef __cplusplus\n\
+ %1c_class;%2\n\
+ #else\n\
+ %1class;%2\n\
+ #endif",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of X11_Class_Usage fix
+  */
+ tSCC zX11_Class_UsageName[] =
+      "x11_class_usage";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zX11_Class_UsageList[] =
+   "|Xm/BaseClassI.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzX11_Class_UsageMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zX11_Class_UsageSelect0[] =
+        " class\\)";
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zX11_Class_UsageBypass0[] =
+        "__cplusplus";
+ 
+ #define    X11_CLASS_USAGE_TEST_CT  2
+ static tTestDesc aX11_Class_UsageTests[] = {
+   { TT_NEGREP,   zX11_Class_UsageBypass0, (regex_t*)NULL },
+   { TT_EGREP,    zX11_Class_UsageSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for X11_Class_Usage
+  */
+ static const char* apzX11_Class_UsagePatch[] = {
+     "format",
+     " c_class)",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of X11_New fix
+  */
+ tSCC zX11_NewName[] =
+      "x11_new";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zX11_NewList[] =
+   "|Xm/Traversal.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzX11_NewMachs (const char**)NULL
+ 
+ /*
+  *  content bypass pattern - skip fix if pattern found
+  */
+ tSCC zX11_NewBypass0[] =
+        "__cplusplus";
+ 
+ #define    X11_NEW_TEST_CT  1
+ static tTestDesc aX11_NewTests[] = {
+   { TT_NEGREP,   zX11_NewBypass0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for X11_New
+  */
+ static const char* apzX11_NewPatch[] = { "sed",
+     "-e", "/Widget\told, new;/i\\\n\
+ #ifdef __cplusplus\\\n\
+ \tWidget\told, c_new;\\\n\
+ #else\n",
+     "-e", "/Widget\told, new;/a\\\n\
+ #endif\n",
+     "-e", "s/Widget new,/Widget c_new,/g",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  Description of X11_Sprintf fix
+  */
+ tSCC zX11_SprintfName[] =
+      "x11_sprintf";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zX11_SprintfList[] =
+   "|X11/Xmu.h|X11/Xmu/Xmu.h|";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ #define apzX11_SprintfMachs (const char**)NULL
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zX11_SprintfSelect0[] =
+        "^extern char \\*\tsprintf\\(\\);$";
+ 
+ #define    X11_SPRINTF_TEST_CT  1
+ static tTestDesc aX11_SprintfTests[] = {
+   { TT_EGREP,    zX11_SprintfSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for X11_Sprintf
+  */
+ static const char* apzX11_SprintfPatch[] = {
+     "format",
+     "#ifndef __STDC__\n\
+ %0\n\
+ #endif /* !defined __STDC__ */",
+     (char*)NULL };
+ 
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
+  *  List of all fixes
+  */
+ #define REGEX_COUNT          209
+ #define MACH_LIST_SIZE_LIMIT 261
+ #define FIX_COUNT            179
+ 
+ /*
+  *  Enumerate the fixes
+  */
+ typedef enum {
+     AAB_FD_ZERO_ASM_POSIX_TYPES_H_FIXIDX,
+     AAB_FD_ZERO_GNU_TYPES_H_FIXIDX,
+     AAB_FD_ZERO_SELECTBITS_H_FIXIDX,
+     AAB_SOLARIS_SYS_VARARGS_H_FIXIDX,
+     AAB_SUN_MEMCPY_FIXIDX,
+     AAB_ULTRIX_ANSI_COMPAT_FIXIDX,
+     AAB_ULTRIX_LIMITS_FIXIDX,
+     AAB_ULTRIX_MEMORY_FIXIDX,
+     AAB_ULTRIX_STRING_FIXIDX,
+     AIX_PTHREAD_FIXIDX,
+     AIX_SYSMACHINE_FIXIDX,
+     AIX_SYSWAIT_FIXIDX,
+     AIX_SYSWAIT_2_FIXIDX,
+     AIX_VOLATILE_FIXIDX,
+     ALPHA___ASSERT_FIXIDX,
+     ALPHA___EXTERN_PREFIX_FIXIDX,
+     ALPHA___EXTERN_PREFIX_STANDARDS_FIXIDX,
+     ALPHA___EXTERN_PREFIX_SYS_STAT_FIXIDX,
+     ALPHA_ASSERT_FIXIDX,
+     ALPHA_BAD_LVAL_FIXIDX,
+     ALPHA_GETOPT_FIXIDX,
+     ALPHA_PARENS_FIXIDX,
+     ALPHA_PTHREAD_FIXIDX,
+     ALPHA_PTHREAD_GCC_FIXIDX,
+     ALPHA_PTHREAD_INIT_FIXIDX,
+     ALPHA_SBRK_FIXIDX,
+     ALPHA_WCHAR_FIXIDX,
+     AVOID_BOOL_DEFINE_FIXIDX,
+     AVOID_BOOL_TYPE_FIXIDX,
+     AVOID_WCHAR_T_TYPE_FIXIDX,
+     BAD_STRUCT_TERM_FIXIDX,
+     BADQUOTE_FIXIDX,
+     BROKEN_ASSERT_STDIO_FIXIDX,
+     BROKEN_ASSERT_STDLIB_FIXIDX,
+     BROKEN_CABS_FIXIDX,
+     BSD_STDIO_ATTRS_CONFLICT_FIXIDX,
+     CTRL_QUOTES_DEF_FIXIDX,
+     CTRL_QUOTES_USE_FIXIDX,
+     CXX_UNREADY_FIXIDX,
+     DARWIN_GCC4_BREAKAGE_FIXIDX,
+     DARWIN_PRIVATE_EXTERN_FIXIDX,
+     DEC_INTERN_ASM_FIXIDX,
+     DJGPP_WCHAR_H_FIXIDX,
+     ECD_CURSOR_FIXIDX,
+     EXCEPTION_STRUCTURE_FIXIDX,
+     FREEBSD_GCC3_BREAKAGE_FIXIDX,
+     FREEBSD_GCC4_BREAKAGE_FIXIDX,
+     GNU_TYPES_FIXIDX,
+     HP_INLINE_FIXIDX,
+     HP_SYSFILE_FIXIDX,
+     HPUX10_CPP_POW_INLINE_FIXIDX,
+     HPUX11_CPP_POW_INLINE_FIXIDX,
+     HPUX10_CTYPE_DECLARATIONS1_FIXIDX,
+     HPUX10_CTYPE_DECLARATIONS2_FIXIDX,
+     HPUX10_STDIO_DECLARATIONS_FIXIDX,
+     HPUX11_ABS_FIXIDX,
+     HPUX11_FABSF_FIXIDX,
+     HPUX11_SIZE_T_FIXIDX,
+     HPUX11_SNPRINTF_FIXIDX,
+     HPUX11_UINT32_C_FIXIDX,
+     HPUX11_VSNPRINTF_FIXIDX,
+     HPUX8_BOGUS_INLINES_FIXIDX,
+     HPUX_CTYPE_MACROS_FIXIDX,
+     HPUX_HTONL_FIXIDX,
+     HPUX_LONG_DOUBLE_FIXIDX,
+     HPUX_SYSTIME_FIXIDX,
+     INT_ABORT_FREE_AND_EXIT_FIXIDX,
+     IO_QUOTES_DEF_FIXIDX,
+     IO_QUOTES_USE_FIXIDX,
+     IP_MISSING_SEMI_FIXIDX,
+     IRIX___RESTRICT_FIXIDX,
+     IRIX___GENERIC1_FIXIDX,
+     IRIX___GENERIC2_FIXIDX,
+     IRIX_ASM_APOSTROPHE_FIXIDX,
+     IRIX_LIMITS_CONST_FIXIDX,
+     IRIX_SOCKLEN_T_FIXIDX,
+     IRIX_STDIO_VA_LIST_FIXIDX,
+     IRIX_WCSFTIME_FIXIDX,
+     ISC_FMOD_FIXIDX,
+     ISC_OMITS_WITH_STDC_FIXIDX,
+     KANDR_CONCAT_FIXIDX,
+     LIBC1_G_VA_LIST_FIXIDX,
+     LIBC1_IFDEFD_MEMX_FIXIDX,
+     LINUX_IA64_UCONTEXT_FIXIDX,
+     LYNXOS_NO_WARNING_IN_SYS_TIME_H_FIXIDX,
+     LYNXOS_MISSING_PUTENV_FIXIDX,
+     MACHINE_ANSI_H_VA_LIST_FIXIDX,
+     MACHINE_NAME_FIXIDX,
+     MATH_EXCEPTION_FIXIDX,
+     MATH_HUGE_VAL_FROM_DBL_MAX_FIXIDX,
+     NESTED_AUTH_DES_FIXIDX,
+     NESTED_MOTOROLA_FIXIDX,
+     NESTED_SYS_LIMITS_FIXIDX,
+     NETBSD_EXTRA_SEMICOLON_FIXIDX,
+     NEXT_MATH_PREFIX_FIXIDX,
+     NEXT_TEMPLATE_FIXIDX,
+     NEXT_VOLITILE_FIXIDX,
+     NEXT_WAIT_UNION_FIXIDX,
+     NODEENT_SYNTAX_FIXIDX,
+     OBSTACK_LVALUE_CAST_FIXIDX,
+     OSF_NAMESPACE_A_FIXIDX,
+     OSF_NAMESPACE_C_FIXIDX,
+     PTHREAD_PAGE_SIZE_FIXIDX,
+     PTHREAD_INCOMPLETE_STRUCT_ARGUMENT_FIXIDX,
+     READ_RET_TYPE_FIXIDX,
+     RPC_XDR_LVALUE_CAST_A_FIXIDX,
+     RPC_XDR_LVALUE_CAST_B_FIXIDX,
+     RS6000_DOUBLE_FIXIDX,
+     RS6000_FCHMOD_FIXIDX,
+     RS6000_PARAM_FIXIDX,
+     SCO_MATH_FIXIDX,
+     SCO_REGSET_FIXIDX,
+     SCO_STATIC_FUNC_FIXIDX,
+     SCO_UTIME_FIXIDX,
+     SOLARIS_MUTEX_INIT_1_FIXIDX,
+     SOLARIS_MUTEX_INIT_2_FIXIDX,
+     SOLARIS_SOCKET_FIXIDX,
+     SOLARIS_STDIO_TAG_FIXIDX,
+     SOLARIS_UNISTD_FIXIDX,
+     SOLARIS_WIDEC_FIXIDX,
+     STATSSWTCH_FIXIDX,
+     STDIO_STDARG_H_FIXIDX,
+     STDIO_VA_LIST_FIXIDX,
+     STDIO_VA_LIST_CLIENTS_FIXIDX,
+     STRICT_ANSI_NOT_FIXIDX,
+     STRICT_ANSI_NOT_CTD_FIXIDX,
+     STRICT_ANSI_ONLY_FIXIDX,
+     STRUCT_FILE_FIXIDX,
+     STRUCT_SOCKADDR_FIXIDX,
+     SUN_AUTH_PROTO_FIXIDX,
+     SUN_BOGUS_IFDEF_FIXIDX,
+     SUN_CATMACRO_FIXIDX,
+     SUN_MALLOC_FIXIDX,
+     SUN_RUSERS_SEMI_FIXIDX,
+     SUN_SIGNAL_FIXIDX,
+     SUNOS_STRLEN_FIXIDX,
+     SVR4_DISABLE_OPT_FIXIDX,
+     SVR4_GETCWD_FIXIDX,
+     SVR4_KRNL_FIXIDX,
+     SVR4_PROFIL_FIXIDX,
+     SVR4_SIGHANDLER_TYPE_FIXIDX,
+     SVR4_UNDECLARED_GETRNGE_FIXIDX,
+     SYSV68_STRING_FIXIDX,
+     SYSZ_STDLIB_FOR_SUN_FIXIDX,
+     THREAD_KEYWORD_FIXIDX,
+     TINFO_CPLUSPLUS_FIXIDX,
+     ULTRIX_ATEXIT_PARAM_FIXIDX,
+     ULTRIX_ATOF_PARAM_FIXIDX,
+     ULTRIX_CONST_FIXIDX,
+     ULTRIX_CONST2_FIXIDX,
+     ULTRIX_CONST3_FIXIDX,
+     ULTRIX_FIX_FIXPROTO_FIXIDX,
+     ULTRIX_IFDEF_FIXIDX,
+     ULTRIX_LOCALE_FIXIDX,
+     ULTRIX_MATH_IFDEF_FIXIDX,
+     ULTRIX_NESTED_IOCTL_FIXIDX,
+     ULTRIX_NESTED_SVC_FIXIDX,
+     ULTRIX_STAT_FIXIDX,
+     ULTRIX_STATIC_FIXIDX,
+     ULTRIX_STDLIB_FIXIDX,
+     ULTRIX_STRINGS_FIXIDX,
+     ULTRIX_STRINGS2_FIXIDX,
+     ULTRIX_SYS_TIME_FIXIDX,
+     ULTRIX_UNISTD_FIXIDX,
+     UNICOSMK_RESTRICT_FIXIDX,
+     UW7_BYTEORDER_FIX_FIXIDX,
+     VA_I960_MACRO_FIXIDX,
+     VOID_NULL_FIXIDX,
+     VXWORKS_GCC_PROBLEM_FIXIDX,
+     VXWORKS_NEEDS_VXTYPES_FIXIDX,
+     VXWORKS_NEEDS_VXWORKS_FIXIDX,
+     VXWORKS_TIME_FIXIDX,
+     WINDISS_MATH1_FIXIDX,
+     WINDISS_MATH2_FIXIDX,
+     WINDISS_VALIST_FIXIDX,
+     X11_CLASS_FIXIDX,
+     X11_CLASS_USAGE_FIXIDX,
+     X11_NEW_FIXIDX,
+     X11_SPRINTF_FIXIDX
+ } t_fixinc_idx;
+ 
+ tFixDesc fixDescList[ FIX_COUNT ] = {
+   {  zAab_Fd_Zero_Asm_Posix_Types_HName,    zAab_Fd_Zero_Asm_Posix_Types_HList,
+      apzAab_Fd_Zero_Asm_Posix_Types_HMachs,
+      AAB_FD_ZERO_ASM_POSIX_TYPES_H_TEST_CT, FD_MACH_ONLY | FD_REPLACEMENT,
+      aAab_Fd_Zero_Asm_Posix_Types_HTests,   apzAab_Fd_Zero_Asm_Posix_Types_HPatch, 0 },
+ 
+   {  zAab_Fd_Zero_Gnu_Types_HName,    zAab_Fd_Zero_Gnu_Types_HList,
+      apzAab_Fd_Zero_Gnu_Types_HMachs,
+      AAB_FD_ZERO_GNU_TYPES_H_TEST_CT, FD_MACH_ONLY | FD_REPLACEMENT,
+      aAab_Fd_Zero_Gnu_Types_HTests,   apzAab_Fd_Zero_Gnu_Types_HPatch, 0 },
+ 
+   {  zAab_Fd_Zero_Selectbits_HName,    zAab_Fd_Zero_Selectbits_HList,
+      apzAab_Fd_Zero_Selectbits_HMachs,
+      AAB_FD_ZERO_SELECTBITS_H_TEST_CT, FD_MACH_ONLY | FD_REPLACEMENT,
+      aAab_Fd_Zero_Selectbits_HTests,   apzAab_Fd_Zero_Selectbits_HPatch, 0 },
+ 
+   {  zAab_Solaris_Sys_Varargs_HName,    zAab_Solaris_Sys_Varargs_HList,
+      apzAab_Solaris_Sys_Varargs_HMachs,
+      AAB_SOLARIS_SYS_VARARGS_H_TEST_CT, FD_MACH_ONLY | FD_REPLACEMENT,
+      aAab_Solaris_Sys_Varargs_HTests,   apzAab_Solaris_Sys_Varargs_HPatch, 0 },
+ 
+   {  zAab_Sun_MemcpyName,    zAab_Sun_MemcpyList,
+      apzAab_Sun_MemcpyMachs,
+      AAB_SUN_MEMCPY_TEST_CT, FD_MACH_ONLY | FD_REPLACEMENT,
+      aAab_Sun_MemcpyTests,   apzAab_Sun_MemcpyPatch, 0 },
+ 
+   {  zAab_Ultrix_Ansi_CompatName,    zAab_Ultrix_Ansi_CompatList,
+      apzAab_Ultrix_Ansi_CompatMachs,
+      AAB_ULTRIX_ANSI_COMPAT_TEST_CT, FD_MACH_ONLY | FD_REPLACEMENT,
+      aAab_Ultrix_Ansi_CompatTests,   apzAab_Ultrix_Ansi_CompatPatch, 0 },
+ 
+   {  zAab_Ultrix_LimitsName,    zAab_Ultrix_LimitsList,
+      apzAab_Ultrix_LimitsMachs,
+      AAB_ULTRIX_LIMITS_TEST_CT, FD_MACH_ONLY | FD_REPLACEMENT,
+      aAab_Ultrix_LimitsTests,   apzAab_Ultrix_LimitsPatch, 0 },
+ 
+   {  zAab_Ultrix_MemoryName,    zAab_Ultrix_MemoryList,
+      apzAab_Ultrix_MemoryMachs,
+      AAB_ULTRIX_MEMORY_TEST_CT, FD_MACH_ONLY | FD_REPLACEMENT,
+      aAab_Ultrix_MemoryTests,   apzAab_Ultrix_MemoryPatch, 0 },
+ 
+   {  zAab_Ultrix_StringName,    zAab_Ultrix_StringList,
+      apzAab_Ultrix_StringMachs,
+      AAB_ULTRIX_STRING_TEST_CT, FD_MACH_ONLY | FD_REPLACEMENT,
+      aAab_Ultrix_StringTests,   apzAab_Ultrix_StringPatch, 0 },
+ 
+   {  zAix_PthreadName,    zAix_PthreadList,
+      apzAix_PthreadMachs,
+      AIX_PTHREAD_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aAix_PthreadTests,   apzAix_PthreadPatch, 0 },
+ 
+   {  zAix_SysmachineName,    zAix_SysmachineList,
+      apzAix_SysmachineMachs,
+      AIX_SYSMACHINE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aAix_SysmachineTests,   apzAix_SysmachinePatch, 0 },
+ 
+   {  zAix_SyswaitName,    zAix_SyswaitList,
+      apzAix_SyswaitMachs,
+      AIX_SYSWAIT_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aAix_SyswaitTests,   apzAix_SyswaitPatch, 0 },
+ 
+   {  zAix_Syswait_2Name,    zAix_Syswait_2List,
+      apzAix_Syswait_2Machs,
+      AIX_SYSWAIT_2_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aAix_Syswait_2Tests,   apzAix_Syswait_2Patch, 0 },
+ 
+   {  zAix_VolatileName,    zAix_VolatileList,
+      apzAix_VolatileMachs,
+      AIX_VOLATILE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aAix_VolatileTests,   apzAix_VolatilePatch, 0 },
+ 
+   {  zAlpha___AssertName,    zAlpha___AssertList,
+      apzAlpha___AssertMachs,
+      ALPHA___ASSERT_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aAlpha___AssertTests,   apzAlpha___AssertPatch, 0 },
+ 
+   {  zAlpha___Extern_PrefixName,    zAlpha___Extern_PrefixList,
+      apzAlpha___Extern_PrefixMachs,
+      ALPHA___EXTERN_PREFIX_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aAlpha___Extern_PrefixTests,   apzAlpha___Extern_PrefixPatch, 0 },
+ 
+   {  zAlpha___Extern_Prefix_StandardsName,    zAlpha___Extern_Prefix_StandardsList,
+      apzAlpha___Extern_Prefix_StandardsMachs,
+      ALPHA___EXTERN_PREFIX_STANDARDS_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aAlpha___Extern_Prefix_StandardsTests,   apzAlpha___Extern_Prefix_StandardsPatch, 0 },
+ 
+   {  zAlpha___Extern_Prefix_Sys_StatName,    zAlpha___Extern_Prefix_Sys_StatList,
+      apzAlpha___Extern_Prefix_Sys_StatMachs,
+      ALPHA___EXTERN_PREFIX_SYS_STAT_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aAlpha___Extern_Prefix_Sys_StatTests,   apzAlpha___Extern_Prefix_Sys_StatPatch, 0 },
+ 
+   {  zAlpha_AssertName,    zAlpha_AssertList,
+      apzAlpha_AssertMachs,
+      ALPHA_ASSERT_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aAlpha_AssertTests,   apzAlpha_AssertPatch, 0 },
+ 
+   {  zAlpha_Bad_LvalName,    zAlpha_Bad_LvalList,
+      apzAlpha_Bad_LvalMachs,
+      ALPHA_BAD_LVAL_TEST_CT, FD_MACH_ONLY,
+      aAlpha_Bad_LvalTests,   apzAlpha_Bad_LvalPatch, 0 },
+ 
+   {  zAlpha_GetoptName,    zAlpha_GetoptList,
+      apzAlpha_GetoptMachs,
+      ALPHA_GETOPT_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aAlpha_GetoptTests,   apzAlpha_GetoptPatch, 0 },
+ 
+   {  zAlpha_ParensName,    zAlpha_ParensList,
+      apzAlpha_ParensMachs,
+      ALPHA_PARENS_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aAlpha_ParensTests,   apzAlpha_ParensPatch, 0 },
+ 
+   {  zAlpha_PthreadName,    zAlpha_PthreadList,
+      apzAlpha_PthreadMachs,
+      ALPHA_PTHREAD_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aAlpha_PthreadTests,   apzAlpha_PthreadPatch, 0 },
+ 
+   {  zAlpha_Pthread_GccName,    zAlpha_Pthread_GccList,
+      apzAlpha_Pthread_GccMachs,
+      ALPHA_PTHREAD_GCC_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aAlpha_Pthread_GccTests,   apzAlpha_Pthread_GccPatch, 0 },
+ 
+   {  zAlpha_Pthread_InitName,    zAlpha_Pthread_InitList,
+      apzAlpha_Pthread_InitMachs,
+      ALPHA_PTHREAD_INIT_TEST_CT, FD_MACH_ONLY,
+      aAlpha_Pthread_InitTests,   apzAlpha_Pthread_InitPatch, 0 },
+ 
+   {  zAlpha_SbrkName,    zAlpha_SbrkList,
+      apzAlpha_SbrkMachs,
+      ALPHA_SBRK_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aAlpha_SbrkTests,   apzAlpha_SbrkPatch, 0 },
+ 
+   {  zAlpha_WcharName,    zAlpha_WcharList,
+      apzAlpha_WcharMachs,
+      ALPHA_WCHAR_TEST_CT, FD_MACH_ONLY,
+      aAlpha_WcharTests,   apzAlpha_WcharPatch, 0 },
+ 
+   {  zAvoid_Bool_DefineName,    zAvoid_Bool_DefineList,
+      apzAvoid_Bool_DefineMachs,
+      AVOID_BOOL_DEFINE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aAvoid_Bool_DefineTests,   apzAvoid_Bool_DefinePatch, 0 },
+ 
+   {  zAvoid_Bool_TypeName,    zAvoid_Bool_TypeList,
+      apzAvoid_Bool_TypeMachs,
+      AVOID_BOOL_TYPE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aAvoid_Bool_TypeTests,   apzAvoid_Bool_TypePatch, 0 },
+ 
+   {  zAvoid_Wchar_T_TypeName,    zAvoid_Wchar_T_TypeList,
+      apzAvoid_Wchar_T_TypeMachs,
+      AVOID_WCHAR_T_TYPE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aAvoid_Wchar_T_TypeTests,   apzAvoid_Wchar_T_TypePatch, 0 },
+ 
+   {  zBad_Struct_TermName,    zBad_Struct_TermList,
+      apzBad_Struct_TermMachs,
+      BAD_STRUCT_TERM_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aBad_Struct_TermTests,   apzBad_Struct_TermPatch, 0 },
+ 
+   {  zBadquoteName,    zBadquoteList,
+      apzBadquoteMachs,
+      BADQUOTE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aBadquoteTests,   apzBadquotePatch, 0 },
+ 
+   {  zBroken_Assert_StdioName,    zBroken_Assert_StdioList,
+      apzBroken_Assert_StdioMachs,
+      BROKEN_ASSERT_STDIO_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aBroken_Assert_StdioTests,   apzBroken_Assert_StdioPatch, 0 },
+ 
+   {  zBroken_Assert_StdlibName,    zBroken_Assert_StdlibList,
+      apzBroken_Assert_StdlibMachs,
+      BROKEN_ASSERT_STDLIB_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aBroken_Assert_StdlibTests,   apzBroken_Assert_StdlibPatch, 0 },
+ 
+   {  zBroken_CabsName,    zBroken_CabsList,
+      apzBroken_CabsMachs,
+      BROKEN_CABS_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aBroken_CabsTests,   apzBroken_CabsPatch, 0 },
+ 
+   {  zBsd_Stdio_Attrs_ConflictName,    zBsd_Stdio_Attrs_ConflictList,
+      apzBsd_Stdio_Attrs_ConflictMachs,
+      BSD_STDIO_ATTRS_CONFLICT_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aBsd_Stdio_Attrs_ConflictTests,   apzBsd_Stdio_Attrs_ConflictPatch, 0 },
+ 
+   {  zCtrl_Quotes_DefName,    zCtrl_Quotes_DefList,
+      apzCtrl_Quotes_DefMachs,
+      CTRL_QUOTES_DEF_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aCtrl_Quotes_DefTests,   apzCtrl_Quotes_DefPatch, 0 },
+ 
+   {  zCtrl_Quotes_UseName,    zCtrl_Quotes_UseList,
+      apzCtrl_Quotes_UseMachs,
+      CTRL_QUOTES_USE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aCtrl_Quotes_UseTests,   apzCtrl_Quotes_UsePatch, 0 },
+ 
+   {  zCxx_UnreadyName,    zCxx_UnreadyList,
+      apzCxx_UnreadyMachs,
+      CXX_UNREADY_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aCxx_UnreadyTests,   apzCxx_UnreadyPatch, 0 },
+ 
+   {  zDarwin_Gcc4_BreakageName,    zDarwin_Gcc4_BreakageList,
+      apzDarwin_Gcc4_BreakageMachs,
+      DARWIN_GCC4_BREAKAGE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aDarwin_Gcc4_BreakageTests,   apzDarwin_Gcc4_BreakagePatch, 0 },
+ 
+   {  zDarwin_Private_ExternName,    zDarwin_Private_ExternList,
+      apzDarwin_Private_ExternMachs,
+      DARWIN_PRIVATE_EXTERN_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aDarwin_Private_ExternTests,   apzDarwin_Private_ExternPatch, 0 },
+ 
+   {  zDec_Intern_AsmName,    zDec_Intern_AsmList,
+      apzDec_Intern_AsmMachs,
+      DEC_INTERN_ASM_TEST_CT, FD_MACH_ONLY,
+      aDec_Intern_AsmTests,   apzDec_Intern_AsmPatch, 0 },
+ 
+   {  zDjgpp_Wchar_HName,    zDjgpp_Wchar_HList,
+      apzDjgpp_Wchar_HMachs,
+      DJGPP_WCHAR_H_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aDjgpp_Wchar_HTests,   apzDjgpp_Wchar_HPatch, 0 },
+ 
+   {  zEcd_CursorName,    zEcd_CursorList,
+      apzEcd_CursorMachs,
+      ECD_CURSOR_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aEcd_CursorTests,   apzEcd_CursorPatch, 0 },
+ 
+   {  zException_StructureName,    zException_StructureList,
+      apzException_StructureMachs,
+      EXCEPTION_STRUCTURE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aException_StructureTests,   apzException_StructurePatch, 0 },
+ 
+   {  zFreebsd_Gcc3_BreakageName,    zFreebsd_Gcc3_BreakageList,
+      apzFreebsd_Gcc3_BreakageMachs,
+      FREEBSD_GCC3_BREAKAGE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aFreebsd_Gcc3_BreakageTests,   apzFreebsd_Gcc3_BreakagePatch, 0 },
+ 
+   {  zFreebsd_Gcc4_BreakageName,    zFreebsd_Gcc4_BreakageList,
+      apzFreebsd_Gcc4_BreakageMachs,
+      FREEBSD_GCC4_BREAKAGE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aFreebsd_Gcc4_BreakageTests,   apzFreebsd_Gcc4_BreakagePatch, 0 },
+ 
+   {  zGnu_TypesName,    zGnu_TypesList,
+      apzGnu_TypesMachs,
+      GNU_TYPES_TEST_CT, FD_MACH_IFNOT | FD_SUBROUTINE,
+      aGnu_TypesTests,   apzGnu_TypesPatch, 0 },
+ 
+   {  zHp_InlineName,    zHp_InlineList,
+      apzHp_InlineMachs,
+      HP_INLINE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aHp_InlineTests,   apzHp_InlinePatch, 0 },
+ 
+   {  zHp_SysfileName,    zHp_SysfileList,
+      apzHp_SysfileMachs,
+      HP_SYSFILE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aHp_SysfileTests,   apzHp_SysfilePatch, 0 },
+ 
+   {  zHpux10_Cpp_Pow_InlineName,    zHpux10_Cpp_Pow_InlineList,
+      apzHpux10_Cpp_Pow_InlineMachs,
+      HPUX10_CPP_POW_INLINE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aHpux10_Cpp_Pow_InlineTests,   apzHpux10_Cpp_Pow_InlinePatch, 0 },
+ 
+   {  zHpux11_Cpp_Pow_InlineName,    zHpux11_Cpp_Pow_InlineList,
+      apzHpux11_Cpp_Pow_InlineMachs,
+      HPUX11_CPP_POW_INLINE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aHpux11_Cpp_Pow_InlineTests,   apzHpux11_Cpp_Pow_InlinePatch, 0 },
+ 
+   {  zHpux10_Ctype_Declarations1Name,    zHpux10_Ctype_Declarations1List,
+      apzHpux10_Ctype_Declarations1Machs,
+      HPUX10_CTYPE_DECLARATIONS1_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aHpux10_Ctype_Declarations1Tests,   apzHpux10_Ctype_Declarations1Patch, 0 },
+ 
+   {  zHpux10_Ctype_Declarations2Name,    zHpux10_Ctype_Declarations2List,
+      apzHpux10_Ctype_Declarations2Machs,
+      HPUX10_CTYPE_DECLARATIONS2_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aHpux10_Ctype_Declarations2Tests,   apzHpux10_Ctype_Declarations2Patch, 0 },
+ 
+   {  zHpux10_Stdio_DeclarationsName,    zHpux10_Stdio_DeclarationsList,
+      apzHpux10_Stdio_DeclarationsMachs,
+      HPUX10_STDIO_DECLARATIONS_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aHpux10_Stdio_DeclarationsTests,   apzHpux10_Stdio_DeclarationsPatch, 0 },
+ 
+   {  zHpux11_AbsName,    zHpux11_AbsList,
+      apzHpux11_AbsMachs,
+      HPUX11_ABS_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aHpux11_AbsTests,   apzHpux11_AbsPatch, 0 },
+ 
+   {  zHpux11_FabsfName,    zHpux11_FabsfList,
+      apzHpux11_FabsfMachs,
+      HPUX11_FABSF_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aHpux11_FabsfTests,   apzHpux11_FabsfPatch, 0 },
+ 
+   {  zHpux11_Size_TName,    zHpux11_Size_TList,
+      apzHpux11_Size_TMachs,
+      HPUX11_SIZE_T_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aHpux11_Size_TTests,   apzHpux11_Size_TPatch, 0 },
+ 
+   {  zHpux11_SnprintfName,    zHpux11_SnprintfList,
+      apzHpux11_SnprintfMachs,
+      HPUX11_SNPRINTF_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aHpux11_SnprintfTests,   apzHpux11_SnprintfPatch, 0 },
+ 
+   {  zHpux11_Uint32_CName,    zHpux11_Uint32_CList,
+      apzHpux11_Uint32_CMachs,
+      HPUX11_UINT32_C_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aHpux11_Uint32_CTests,   apzHpux11_Uint32_CPatch, 0 },
+ 
+   {  zHpux11_VsnprintfName,    zHpux11_VsnprintfList,
+      apzHpux11_VsnprintfMachs,
+      HPUX11_VSNPRINTF_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aHpux11_VsnprintfTests,   apzHpux11_VsnprintfPatch, 0 },
+ 
+   {  zHpux8_Bogus_InlinesName,    zHpux8_Bogus_InlinesList,
+      apzHpux8_Bogus_InlinesMachs,
+      HPUX8_BOGUS_INLINES_TEST_CT, FD_MACH_ONLY,
+      aHpux8_Bogus_InlinesTests,   apzHpux8_Bogus_InlinesPatch, 0 },
+ 
+   {  zHpux_Ctype_MacrosName,    zHpux_Ctype_MacrosList,
+      apzHpux_Ctype_MacrosMachs,
+      HPUX_CTYPE_MACROS_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aHpux_Ctype_MacrosTests,   apzHpux_Ctype_MacrosPatch, 0 },
+ 
+   {  zHpux_HtonlName,    zHpux_HtonlList,
+      apzHpux_HtonlMachs,
+      HPUX_HTONL_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aHpux_HtonlTests,   apzHpux_HtonlPatch, 0 },
+ 
+   {  zHpux_Long_DoubleName,    zHpux_Long_DoubleList,
+      apzHpux_Long_DoubleMachs,
+      HPUX_LONG_DOUBLE_TEST_CT, FD_MACH_ONLY,
+      aHpux_Long_DoubleTests,   apzHpux_Long_DoublePatch, 0 },
+ 
+   {  zHpux_SystimeName,    zHpux_SystimeList,
+      apzHpux_SystimeMachs,
+      HPUX_SYSTIME_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aHpux_SystimeTests,   apzHpux_SystimePatch, 0 },
+ 
+   {  zInt_Abort_Free_And_ExitName,    zInt_Abort_Free_And_ExitList,
+      apzInt_Abort_Free_And_ExitMachs,
+      INT_ABORT_FREE_AND_EXIT_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aInt_Abort_Free_And_ExitTests,   apzInt_Abort_Free_And_ExitPatch, 0 },
+ 
+   {  zIo_Quotes_DefName,    zIo_Quotes_DefList,
+      apzIo_Quotes_DefMachs,
+      IO_QUOTES_DEF_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aIo_Quotes_DefTests,   apzIo_Quotes_DefPatch, 0 },
+ 
+   {  zIo_Quotes_UseName,    zIo_Quotes_UseList,
+      apzIo_Quotes_UseMachs,
+      IO_QUOTES_USE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aIo_Quotes_UseTests,   apzIo_Quotes_UsePatch, 0 },
+ 
+   {  zIp_Missing_SemiName,    zIp_Missing_SemiList,
+      apzIp_Missing_SemiMachs,
+      IP_MISSING_SEMI_TEST_CT, FD_MACH_ONLY,
+      aIp_Missing_SemiTests,   apzIp_Missing_SemiPatch, 0 },
+ 
+   {  zIrix___RestrictName,    zIrix___RestrictList,
+      apzIrix___RestrictMachs,
+      IRIX___RESTRICT_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aIrix___RestrictTests,   apzIrix___RestrictPatch, 0 },
+ 
+   {  zIrix___Generic1Name,    zIrix___Generic1List,
+      apzIrix___Generic1Machs,
+      IRIX___GENERIC1_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aIrix___Generic1Tests,   apzIrix___Generic1Patch, 0 },
+ 
+   {  zIrix___Generic2Name,    zIrix___Generic2List,
+      apzIrix___Generic2Machs,
+      IRIX___GENERIC2_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aIrix___Generic2Tests,   apzIrix___Generic2Patch, 0 },
+ 
+   {  zIrix_Asm_ApostropheName,    zIrix_Asm_ApostropheList,
+      apzIrix_Asm_ApostropheMachs,
+      IRIX_ASM_APOSTROPHE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aIrix_Asm_ApostropheTests,   apzIrix_Asm_ApostrophePatch, 0 },
+ 
+   {  zIrix_Limits_ConstName,    zIrix_Limits_ConstList,
+      apzIrix_Limits_ConstMachs,
+      IRIX_LIMITS_CONST_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aIrix_Limits_ConstTests,   apzIrix_Limits_ConstPatch, 0 },
+ 
+   {  zIrix_Socklen_TName,    zIrix_Socklen_TList,
+      apzIrix_Socklen_TMachs,
+      IRIX_SOCKLEN_T_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aIrix_Socklen_TTests,   apzIrix_Socklen_TPatch, 0 },
+ 
+   {  zIrix_Stdio_Va_ListName,    zIrix_Stdio_Va_ListList,
+      apzIrix_Stdio_Va_ListMachs,
+      IRIX_STDIO_VA_LIST_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aIrix_Stdio_Va_ListTests,   apzIrix_Stdio_Va_ListPatch, 0 },
+ 
+   {  zIrix_WcsftimeName,    zIrix_WcsftimeList,
+      apzIrix_WcsftimeMachs,
+      IRIX_WCSFTIME_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aIrix_WcsftimeTests,   apzIrix_WcsftimePatch, 0 },
+ 
+   {  zIsc_FmodName,    zIsc_FmodList,
+      apzIsc_FmodMachs,
+      ISC_FMOD_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aIsc_FmodTests,   apzIsc_FmodPatch, 0 },
+ 
+   {  zIsc_Omits_With_StdcName,    zIsc_Omits_With_StdcList,
+      apzIsc_Omits_With_StdcMachs,
+      ISC_OMITS_WITH_STDC_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aIsc_Omits_With_StdcTests,   apzIsc_Omits_With_StdcPatch, 0 },
+ 
+   {  zKandr_ConcatName,    zKandr_ConcatList,
+      apzKandr_ConcatMachs,
+      KANDR_CONCAT_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aKandr_ConcatTests,   apzKandr_ConcatPatch, 0 },
+ 
+   {  zLibc1_G_Va_ListName,    zLibc1_G_Va_ListList,
+      apzLibc1_G_Va_ListMachs,
+      LIBC1_G_VA_LIST_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aLibc1_G_Va_ListTests,   apzLibc1_G_Va_ListPatch, 0 },
+ 
+   {  zLibc1_Ifdefd_MemxName,    zLibc1_Ifdefd_MemxList,
+      apzLibc1_Ifdefd_MemxMachs,
+      LIBC1_IFDEFD_MEMX_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aLibc1_Ifdefd_MemxTests,   apzLibc1_Ifdefd_MemxPatch, 0 },
+ 
+   {  zLinux_Ia64_UcontextName,    zLinux_Ia64_UcontextList,
+      apzLinux_Ia64_UcontextMachs,
+      LINUX_IA64_UCONTEXT_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aLinux_Ia64_UcontextTests,   apzLinux_Ia64_UcontextPatch, 0 },
+ 
+   {  zLynxos_No_Warning_In_Sys_Time_HName,    zLynxos_No_Warning_In_Sys_Time_HList,
+      apzLynxos_No_Warning_In_Sys_Time_HMachs,
+      LYNXOS_NO_WARNING_IN_SYS_TIME_H_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aLynxos_No_Warning_In_Sys_Time_HTests,   apzLynxos_No_Warning_In_Sys_Time_HPatch, 0 },
+ 
+   {  zLynxos_Missing_PutenvName,    zLynxos_Missing_PutenvList,
+      apzLynxos_Missing_PutenvMachs,
+      LYNXOS_MISSING_PUTENV_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aLynxos_Missing_PutenvTests,   apzLynxos_Missing_PutenvPatch, 0 },
+ 
+   {  zMachine_Ansi_H_Va_ListName,    zMachine_Ansi_H_Va_ListList,
+      apzMachine_Ansi_H_Va_ListMachs,
+      MACHINE_ANSI_H_VA_LIST_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aMachine_Ansi_H_Va_ListTests,   apzMachine_Ansi_H_Va_ListPatch, 0 },
+ 
+   {  zMachine_NameName,    zMachine_NameList,
+      apzMachine_NameMachs,
+      MACHINE_NAME_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aMachine_NameTests,   apzMachine_NamePatch, 0 },
+ 
+   {  zMath_ExceptionName,    zMath_ExceptionList,
+      apzMath_ExceptionMachs,
+      MATH_EXCEPTION_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aMath_ExceptionTests,   apzMath_ExceptionPatch, 0 },
+ 
+   {  zMath_Huge_Val_From_Dbl_MaxName,    zMath_Huge_Val_From_Dbl_MaxList,
+      apzMath_Huge_Val_From_Dbl_MaxMachs,
+      MATH_HUGE_VAL_FROM_DBL_MAX_TEST_CT, FD_MACH_ONLY | FD_SHELL_SCRIPT,
+      aMath_Huge_Val_From_Dbl_MaxTests,   apzMath_Huge_Val_From_Dbl_MaxPatch, 0 },
+ 
+   {  zNested_Auth_DesName,    zNested_Auth_DesList,
+      apzNested_Auth_DesMachs,
+      NESTED_AUTH_DES_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aNested_Auth_DesTests,   apzNested_Auth_DesPatch, 0 },
+ 
+   {  zNested_MotorolaName,    zNested_MotorolaList,
+      apzNested_MotorolaMachs,
+      NESTED_MOTOROLA_TEST_CT, FD_MACH_ONLY,
+      aNested_MotorolaTests,   apzNested_MotorolaPatch, 0 },
+ 
+   {  zNested_Sys_LimitsName,    zNested_Sys_LimitsList,
+      apzNested_Sys_LimitsMachs,
+      NESTED_SYS_LIMITS_TEST_CT, FD_MACH_ONLY,
+      aNested_Sys_LimitsTests,   apzNested_Sys_LimitsPatch, 0 },
+ 
+   {  zNetbsd_Extra_SemicolonName,    zNetbsd_Extra_SemicolonList,
+      apzNetbsd_Extra_SemicolonMachs,
+      NETBSD_EXTRA_SEMICOLON_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aNetbsd_Extra_SemicolonTests,   apzNetbsd_Extra_SemicolonPatch, 0 },
+ 
+   {  zNext_Math_PrefixName,    zNext_Math_PrefixList,
+      apzNext_Math_PrefixMachs,
+      NEXT_MATH_PREFIX_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aNext_Math_PrefixTests,   apzNext_Math_PrefixPatch, 0 },
+ 
+   {  zNext_TemplateName,    zNext_TemplateList,
+      apzNext_TemplateMachs,
+      NEXT_TEMPLATE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aNext_TemplateTests,   apzNext_TemplatePatch, 0 },
+ 
+   {  zNext_VolitileName,    zNext_VolitileList,
+      apzNext_VolitileMachs,
+      NEXT_VOLITILE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aNext_VolitileTests,   apzNext_VolitilePatch, 0 },
+ 
+   {  zNext_Wait_UnionName,    zNext_Wait_UnionList,
+      apzNext_Wait_UnionMachs,
+      NEXT_WAIT_UNION_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aNext_Wait_UnionTests,   apzNext_Wait_UnionPatch, 0 },
+ 
+   {  zNodeent_SyntaxName,    zNodeent_SyntaxList,
+      apzNodeent_SyntaxMachs,
+      NODEENT_SYNTAX_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aNodeent_SyntaxTests,   apzNodeent_SyntaxPatch, 0 },
+ 
+   {  zObstack_Lvalue_CastName,    zObstack_Lvalue_CastList,
+      apzObstack_Lvalue_CastMachs,
+      OBSTACK_LVALUE_CAST_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aObstack_Lvalue_CastTests,   apzObstack_Lvalue_CastPatch, 0 },
+ 
+   {  zOsf_Namespace_AName,    zOsf_Namespace_AList,
+      apzOsf_Namespace_AMachs,
+      OSF_NAMESPACE_A_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aOsf_Namespace_ATests,   apzOsf_Namespace_APatch, 0 },
+ 
+   {  zOsf_Namespace_CName,    zOsf_Namespace_CList,
+      apzOsf_Namespace_CMachs,
+      OSF_NAMESPACE_C_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aOsf_Namespace_CTests,   apzOsf_Namespace_CPatch, 0 },
+ 
+   {  zPthread_Page_SizeName,    zPthread_Page_SizeList,
+      apzPthread_Page_SizeMachs,
+      PTHREAD_PAGE_SIZE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aPthread_Page_SizeTests,   apzPthread_Page_SizePatch, 0 },
+ 
+   {  zPthread_Incomplete_Struct_ArgumentName,    zPthread_Incomplete_Struct_ArgumentList,
+      apzPthread_Incomplete_Struct_ArgumentMachs,
+      PTHREAD_INCOMPLETE_STRUCT_ARGUMENT_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aPthread_Incomplete_Struct_ArgumentTests,   apzPthread_Incomplete_Struct_ArgumentPatch, 0 },
+ 
+   {  zRead_Ret_TypeName,    zRead_Ret_TypeList,
+      apzRead_Ret_TypeMachs,
+      READ_RET_TYPE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aRead_Ret_TypeTests,   apzRead_Ret_TypePatch, 0 },
+ 
+   {  zRpc_Xdr_Lvalue_Cast_AName,    zRpc_Xdr_Lvalue_Cast_AList,
+      apzRpc_Xdr_Lvalue_Cast_AMachs,
+      RPC_XDR_LVALUE_CAST_A_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aRpc_Xdr_Lvalue_Cast_ATests,   apzRpc_Xdr_Lvalue_Cast_APatch, 0 },
+ 
+   {  zRpc_Xdr_Lvalue_Cast_BName,    zRpc_Xdr_Lvalue_Cast_BList,
+      apzRpc_Xdr_Lvalue_Cast_BMachs,
+      RPC_XDR_LVALUE_CAST_B_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aRpc_Xdr_Lvalue_Cast_BTests,   apzRpc_Xdr_Lvalue_Cast_BPatch, 0 },
+ 
+   {  zRs6000_DoubleName,    zRs6000_DoubleList,
+      apzRs6000_DoubleMachs,
+      RS6000_DOUBLE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aRs6000_DoubleTests,   apzRs6000_DoublePatch, 0 },
+ 
+   {  zRs6000_FchmodName,    zRs6000_FchmodList,
+      apzRs6000_FchmodMachs,
+      RS6000_FCHMOD_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aRs6000_FchmodTests,   apzRs6000_FchmodPatch, 0 },
+ 
+   {  zRs6000_ParamName,    zRs6000_ParamList,
+      apzRs6000_ParamMachs,
+      RS6000_PARAM_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aRs6000_ParamTests,   apzRs6000_ParamPatch, 0 },
+ 
+   {  zSco_MathName,    zSco_MathList,
+      apzSco_MathMachs,
+      SCO_MATH_TEST_CT, FD_MACH_ONLY,
+      aSco_MathTests,   apzSco_MathPatch, 0 },
+ 
+   {  zSco_RegsetName,    zSco_RegsetList,
+      apzSco_RegsetMachs,
+      SCO_REGSET_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aSco_RegsetTests,   apzSco_RegsetPatch, 0 },
+ 
+   {  zSco_Static_FuncName,    zSco_Static_FuncList,
+      apzSco_Static_FuncMachs,
+      SCO_STATIC_FUNC_TEST_CT, FD_MACH_ONLY,
+      aSco_Static_FuncTests,   apzSco_Static_FuncPatch, 0 },
+ 
+   {  zSco_UtimeName,    zSco_UtimeList,
+      apzSco_UtimeMachs,
+      SCO_UTIME_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aSco_UtimeTests,   apzSco_UtimePatch, 0 },
+ 
+   {  zSolaris_Mutex_Init_1Name,    zSolaris_Mutex_Init_1List,
+      apzSolaris_Mutex_Init_1Machs,
+      SOLARIS_MUTEX_INIT_1_TEST_CT, FD_MACH_ONLY,
+      aSolaris_Mutex_Init_1Tests,   apzSolaris_Mutex_Init_1Patch, 0 },
+ 
+   {  zSolaris_Mutex_Init_2Name,    zSolaris_Mutex_Init_2List,
+      apzSolaris_Mutex_Init_2Machs,
+      SOLARIS_MUTEX_INIT_2_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aSolaris_Mutex_Init_2Tests,   apzSolaris_Mutex_Init_2Patch, 0 },
+ 
+   {  zSolaris_SocketName,    zSolaris_SocketList,
+      apzSolaris_SocketMachs,
+      SOLARIS_SOCKET_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aSolaris_SocketTests,   apzSolaris_SocketPatch, 0 },
+ 
+   {  zSolaris_Stdio_TagName,    zSolaris_Stdio_TagList,
+      apzSolaris_Stdio_TagMachs,
+      SOLARIS_STDIO_TAG_TEST_CT, FD_MACH_ONLY,
+      aSolaris_Stdio_TagTests,   apzSolaris_Stdio_TagPatch, 0 },
+ 
+   {  zSolaris_UnistdName,    zSolaris_UnistdList,
+      apzSolaris_UnistdMachs,
+      SOLARIS_UNISTD_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aSolaris_UnistdTests,   apzSolaris_UnistdPatch, 0 },
+ 
+   {  zSolaris_WidecName,    zSolaris_WidecList,
+      apzSolaris_WidecMachs,
+      SOLARIS_WIDEC_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aSolaris_WidecTests,   apzSolaris_WidecPatch, 0 },
+ 
+   {  zStatsswtchName,    zStatsswtchList,
+      apzStatsswtchMachs,
+      STATSSWTCH_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aStatsswtchTests,   apzStatsswtchPatch, 0 },
+ 
+   {  zStdio_Stdarg_HName,    zStdio_Stdarg_HList,
+      apzStdio_Stdarg_HMachs,
+      STDIO_STDARG_H_TEST_CT, FD_MACH_IFNOT | FD_SUBROUTINE,
+      aStdio_Stdarg_HTests,   apzStdio_Stdarg_HPatch, 0 },
+ 
+   {  zStdio_Va_ListName,    zStdio_Va_ListList,
+      apzStdio_Va_ListMachs,
+      STDIO_VA_LIST_TEST_CT, FD_MACH_IFNOT,
+      aStdio_Va_ListTests,   apzStdio_Va_ListPatch, 0 },
+ 
+   {  zStdio_Va_List_ClientsName,    zStdio_Va_List_ClientsList,
+      apzStdio_Va_List_ClientsMachs,
+      STDIO_VA_LIST_CLIENTS_TEST_CT, FD_MACH_ONLY,
+      aStdio_Va_List_ClientsTests,   apzStdio_Va_List_ClientsPatch, 0 },
+ 
+   {  zStrict_Ansi_NotName,    zStrict_Ansi_NotList,
+      apzStrict_Ansi_NotMachs,
+      STRICT_ANSI_NOT_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aStrict_Ansi_NotTests,   apzStrict_Ansi_NotPatch, 0 },
+ 
+   {  zStrict_Ansi_Not_CtdName,    zStrict_Ansi_Not_CtdList,
+      apzStrict_Ansi_Not_CtdMachs,
+      STRICT_ANSI_NOT_CTD_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aStrict_Ansi_Not_CtdTests,   apzStrict_Ansi_Not_CtdPatch, 0 },
+ 
+   {  zStrict_Ansi_OnlyName,    zStrict_Ansi_OnlyList,
+      apzStrict_Ansi_OnlyMachs,
+      STRICT_ANSI_ONLY_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aStrict_Ansi_OnlyTests,   apzStrict_Ansi_OnlyPatch, 0 },
+ 
+   {  zStruct_FileName,    zStruct_FileList,
+      apzStruct_FileMachs,
+      STRUCT_FILE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aStruct_FileTests,   apzStruct_FilePatch, 0 },
+ 
+   {  zStruct_SockaddrName,    zStruct_SockaddrList,
+      apzStruct_SockaddrMachs,
+      STRUCT_SOCKADDR_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aStruct_SockaddrTests,   apzStruct_SockaddrPatch, 0 },
+ 
+   {  zSun_Auth_ProtoName,    zSun_Auth_ProtoList,
+      apzSun_Auth_ProtoMachs,
+      SUN_AUTH_PROTO_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aSun_Auth_ProtoTests,   apzSun_Auth_ProtoPatch, 0 },
+ 
+   {  zSun_Bogus_IfdefName,    zSun_Bogus_IfdefList,
+      apzSun_Bogus_IfdefMachs,
+      SUN_BOGUS_IFDEF_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aSun_Bogus_IfdefTests,   apzSun_Bogus_IfdefPatch, 0 },
+ 
+   {  zSun_CatmacroName,    zSun_CatmacroList,
+      apzSun_CatmacroMachs,
+      SUN_CATMACRO_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aSun_CatmacroTests,   apzSun_CatmacroPatch, 0 },
+ 
+   {  zSun_MallocName,    zSun_MallocList,
+      apzSun_MallocMachs,
+      SUN_MALLOC_TEST_CT, FD_MACH_ONLY,
+      aSun_MallocTests,   apzSun_MallocPatch, 0 },
+ 
+   {  zSun_Rusers_SemiName,    zSun_Rusers_SemiList,
+      apzSun_Rusers_SemiMachs,
+      SUN_RUSERS_SEMI_TEST_CT, FD_MACH_ONLY,
+      aSun_Rusers_SemiTests,   apzSun_Rusers_SemiPatch, 0 },
+ 
+   {  zSun_SignalName,    zSun_SignalList,
+      apzSun_SignalMachs,
+      SUN_SIGNAL_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aSun_SignalTests,   apzSun_SignalPatch, 0 },
+ 
+   {  zSunos_StrlenName,    zSunos_StrlenList,
+      apzSunos_StrlenMachs,
+      SUNOS_STRLEN_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aSunos_StrlenTests,   apzSunos_StrlenPatch, 0 },
+ 
+   {  zSvr4_Disable_OptName,    zSvr4_Disable_OptList,
+      apzSvr4_Disable_OptMachs,
+      SVR4_DISABLE_OPT_TEST_CT, FD_MACH_ONLY,
+      aSvr4_Disable_OptTests,   apzSvr4_Disable_OptPatch, 0 },
+ 
+   {  zSvr4_GetcwdName,    zSvr4_GetcwdList,
+      apzSvr4_GetcwdMachs,
+      SVR4_GETCWD_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aSvr4_GetcwdTests,   apzSvr4_GetcwdPatch, 0 },
+ 
+   {  zSvr4_KrnlName,    zSvr4_KrnlList,
+      apzSvr4_KrnlMachs,
+      SVR4_KRNL_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aSvr4_KrnlTests,   apzSvr4_KrnlPatch, 0 },
+ 
+   {  zSvr4_ProfilName,    zSvr4_ProfilList,
+      apzSvr4_ProfilMachs,
+      SVR4_PROFIL_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aSvr4_ProfilTests,   apzSvr4_ProfilPatch, 0 },
+ 
+   {  zSvr4_Sighandler_TypeName,    zSvr4_Sighandler_TypeList,
+      apzSvr4_Sighandler_TypeMachs,
+      SVR4_SIGHANDLER_TYPE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aSvr4_Sighandler_TypeTests,   apzSvr4_Sighandler_TypePatch, 0 },
+ 
+   {  zSvr4_Undeclared_GetrngeName,    zSvr4_Undeclared_GetrngeList,
+      apzSvr4_Undeclared_GetrngeMachs,
+      SVR4_UNDECLARED_GETRNGE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aSvr4_Undeclared_GetrngeTests,   apzSvr4_Undeclared_GetrngePatch, 0 },
+ 
+   {  zSysv68_StringName,    zSysv68_StringList,
+      apzSysv68_StringMachs,
+      SYSV68_STRING_TEST_CT, FD_MACH_ONLY,
+      aSysv68_StringTests,   apzSysv68_StringPatch, 0 },
+ 
+   {  zSysz_Stdlib_For_SunName,    zSysz_Stdlib_For_SunList,
+      apzSysz_Stdlib_For_SunMachs,
+      SYSZ_STDLIB_FOR_SUN_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aSysz_Stdlib_For_SunTests,   apzSysz_Stdlib_For_SunPatch, 0 },
+ 
+   {  zThread_KeywordName,    zThread_KeywordList,
+      apzThread_KeywordMachs,
+      THREAD_KEYWORD_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aThread_KeywordTests,   apzThread_KeywordPatch, 0 },
+ 
+   {  zTinfo_CplusplusName,    zTinfo_CplusplusList,
+      apzTinfo_CplusplusMachs,
+      TINFO_CPLUSPLUS_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aTinfo_CplusplusTests,   apzTinfo_CplusplusPatch, 0 },
+ 
+   {  zUltrix_Atexit_ParamName,    zUltrix_Atexit_ParamList,
+      apzUltrix_Atexit_ParamMachs,
+      ULTRIX_ATEXIT_PARAM_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aUltrix_Atexit_ParamTests,   apzUltrix_Atexit_ParamPatch, 0 },
+ 
+   {  zUltrix_Atof_ParamName,    zUltrix_Atof_ParamList,
+      apzUltrix_Atof_ParamMachs,
+      ULTRIX_ATOF_PARAM_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aUltrix_Atof_ParamTests,   apzUltrix_Atof_ParamPatch, 0 },
+ 
+   {  zUltrix_ConstName,    zUltrix_ConstList,
+      apzUltrix_ConstMachs,
+      ULTRIX_CONST_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aUltrix_ConstTests,   apzUltrix_ConstPatch, 0 },
+ 
+   {  zUltrix_Const2Name,    zUltrix_Const2List,
+      apzUltrix_Const2Machs,
+      ULTRIX_CONST2_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aUltrix_Const2Tests,   apzUltrix_Const2Patch, 0 },
+ 
+   {  zUltrix_Const3Name,    zUltrix_Const3List,
+      apzUltrix_Const3Machs,
+      ULTRIX_CONST3_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aUltrix_Const3Tests,   apzUltrix_Const3Patch, 0 },
+ 
+   {  zUltrix_Fix_FixprotoName,    zUltrix_Fix_FixprotoList,
+      apzUltrix_Fix_FixprotoMachs,
+      ULTRIX_FIX_FIXPROTO_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aUltrix_Fix_FixprotoTests,   apzUltrix_Fix_FixprotoPatch, 0 },
+ 
+   {  zUltrix_IfdefName,    zUltrix_IfdefList,
+      apzUltrix_IfdefMachs,
+      ULTRIX_IFDEF_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aUltrix_IfdefTests,   apzUltrix_IfdefPatch, 0 },
+ 
+   {  zUltrix_LocaleName,    zUltrix_LocaleList,
+      apzUltrix_LocaleMachs,
+      ULTRIX_LOCALE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aUltrix_LocaleTests,   apzUltrix_LocalePatch, 0 },
+ 
+   {  zUltrix_Math_IfdefName,    zUltrix_Math_IfdefList,
+      apzUltrix_Math_IfdefMachs,
+      ULTRIX_MATH_IFDEF_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aUltrix_Math_IfdefTests,   apzUltrix_Math_IfdefPatch, 0 },
+ 
+   {  zUltrix_Nested_IoctlName,    zUltrix_Nested_IoctlList,
+      apzUltrix_Nested_IoctlMachs,
+      ULTRIX_NESTED_IOCTL_TEST_CT, FD_MACH_ONLY,
+      aUltrix_Nested_IoctlTests,   apzUltrix_Nested_IoctlPatch, 0 },
+ 
+   {  zUltrix_Nested_SvcName,    zUltrix_Nested_SvcList,
+      apzUltrix_Nested_SvcMachs,
+      ULTRIX_NESTED_SVC_TEST_CT, FD_MACH_ONLY,
+      aUltrix_Nested_SvcTests,   apzUltrix_Nested_SvcPatch, 0 },
+ 
+   {  zUltrix_StatName,    zUltrix_StatList,
+      apzUltrix_StatMachs,
+      ULTRIX_STAT_TEST_CT, FD_MACH_ONLY,
+      aUltrix_StatTests,   apzUltrix_StatPatch, 0 },
+ 
+   {  zUltrix_StaticName,    zUltrix_StaticList,
+      apzUltrix_StaticMachs,
+      ULTRIX_STATIC_TEST_CT, FD_MACH_ONLY,
+      aUltrix_StaticTests,   apzUltrix_StaticPatch, 0 },
+ 
+   {  zUltrix_StdlibName,    zUltrix_StdlibList,
+      apzUltrix_StdlibMachs,
+      ULTRIX_STDLIB_TEST_CT, FD_MACH_ONLY,
+      aUltrix_StdlibTests,   apzUltrix_StdlibPatch, 0 },
+ 
+   {  zUltrix_StringsName,    zUltrix_StringsList,
+      apzUltrix_StringsMachs,
+      ULTRIX_STRINGS_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aUltrix_StringsTests,   apzUltrix_StringsPatch, 0 },
+ 
+   {  zUltrix_Strings2Name,    zUltrix_Strings2List,
+      apzUltrix_Strings2Machs,
+      ULTRIX_STRINGS2_TEST_CT, FD_MACH_ONLY,
+      aUltrix_Strings2Tests,   apzUltrix_Strings2Patch, 0 },
+ 
+   {  zUltrix_Sys_TimeName,    zUltrix_Sys_TimeList,
+      apzUltrix_Sys_TimeMachs,
+      ULTRIX_SYS_TIME_TEST_CT, FD_MACH_ONLY,
+      aUltrix_Sys_TimeTests,   apzUltrix_Sys_TimePatch, 0 },
+ 
+   {  zUltrix_UnistdName,    zUltrix_UnistdList,
+      apzUltrix_UnistdMachs,
+      ULTRIX_UNISTD_TEST_CT, FD_MACH_ONLY,
+      aUltrix_UnistdTests,   apzUltrix_UnistdPatch, 0 },
+ 
+   {  zUnicosmk_RestrictName,    zUnicosmk_RestrictList,
+      apzUnicosmk_RestrictMachs,
+      UNICOSMK_RESTRICT_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aUnicosmk_RestrictTests,   apzUnicosmk_RestrictPatch, 0 },
+ 
+   {  zUw7_Byteorder_FixName,    zUw7_Byteorder_FixList,
+      apzUw7_Byteorder_FixMachs,
+      UW7_BYTEORDER_FIX_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aUw7_Byteorder_FixTests,   apzUw7_Byteorder_FixPatch, 0 },
+ 
+   {  zVa_I960_MacroName,    zVa_I960_MacroList,
+      apzVa_I960_MacroMachs,
+      VA_I960_MACRO_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aVa_I960_MacroTests,   apzVa_I960_MacroPatch, 0 },
+ 
+   {  zVoid_NullName,    zVoid_NullList,
+      apzVoid_NullMachs,
+      VOID_NULL_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aVoid_NullTests,   apzVoid_NullPatch, 0 },
+ 
+   {  zVxworks_Gcc_ProblemName,    zVxworks_Gcc_ProblemList,
+      apzVxworks_Gcc_ProblemMachs,
+      VXWORKS_GCC_PROBLEM_TEST_CT, FD_MACH_ONLY,
+      aVxworks_Gcc_ProblemTests,   apzVxworks_Gcc_ProblemPatch, 0 },
+ 
+   {  zVxworks_Needs_VxtypesName,    zVxworks_Needs_VxtypesList,
+      apzVxworks_Needs_VxtypesMachs,
+      VXWORKS_NEEDS_VXTYPES_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aVxworks_Needs_VxtypesTests,   apzVxworks_Needs_VxtypesPatch, 0 },
+ 
+   {  zVxworks_Needs_VxworksName,    zVxworks_Needs_VxworksList,
+      apzVxworks_Needs_VxworksMachs,
+      VXWORKS_NEEDS_VXWORKS_TEST_CT, FD_MACH_ONLY,
+      aVxworks_Needs_VxworksTests,   apzVxworks_Needs_VxworksPatch, 0 },
+ 
+   {  zVxworks_TimeName,    zVxworks_TimeList,
+      apzVxworks_TimeMachs,
+      VXWORKS_TIME_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aVxworks_TimeTests,   apzVxworks_TimePatch, 0 },
+ 
+   {  zWindiss_Math1Name,    zWindiss_Math1List,
+      apzWindiss_Math1Machs,
+      WINDISS_MATH1_TEST_CT, FD_MACH_ONLY,
+      aWindiss_Math1Tests,   apzWindiss_Math1Patch, 0 },
+ 
+   {  zWindiss_Math2Name,    zWindiss_Math2List,
+      apzWindiss_Math2Machs,
+      WINDISS_MATH2_TEST_CT, FD_MACH_ONLY,
+      aWindiss_Math2Tests,   apzWindiss_Math2Patch, 0 },
+ 
+   {  zWindiss_ValistName,    zWindiss_ValistList,
+      apzWindiss_ValistMachs,
+      WINDISS_VALIST_TEST_CT, FD_MACH_ONLY,
+      aWindiss_ValistTests,   apzWindiss_ValistPatch, 0 },
+ 
+   {  zX11_ClassName,    zX11_ClassList,
+      apzX11_ClassMachs,
+      X11_CLASS_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aX11_ClassTests,   apzX11_ClassPatch, 0 },
+ 
+   {  zX11_Class_UsageName,    zX11_Class_UsageList,
+      apzX11_Class_UsageMachs,
+      X11_CLASS_USAGE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aX11_Class_UsageTests,   apzX11_Class_UsagePatch, 0 },
+ 
+   {  zX11_NewName,    zX11_NewList,
+      apzX11_NewMachs,
+      X11_NEW_TEST_CT, FD_MACH_ONLY,
+      aX11_NewTests,   apzX11_NewPatch, 0 },
+ 
+   {  zX11_SprintfName,    zX11_SprintfList,
+      apzX11_SprintfMachs,
+      X11_SPRINTF_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aX11_SprintfTests,   apzX11_SprintfPatch, 0 }
+ };
diff -Nrcpad gcc-3.4.3/fixincludes/fixlib.c gcc-4.0.0/fixincludes/fixlib.c
*** gcc-3.4.3/fixincludes/fixlib.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/fixlib.c	Fri Oct 15 07:58:38 2004
***************
*** 0 ****
--- 1,281 ----
+ 
+ /* Install modified versions of certain ANSI-incompatible system header
+    files which are fixed to work correctly with ANSI C and placed in a
+    directory that GCC will search.
+ 
+    Copyright (C) 1999, 2000, 2001, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GCC.
+ 
+ GCC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GCC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING.  If not, write to
+ the Free Software Foundation, 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.  */
+ 
+ #include "fixlib.h"
+ 
+ /* * * * * * * * * * * * *
+  
+    load_file_data loads all the contents of a file into malloc-ed memory.
+    Its argument is the file pointer of the file to read in; the returned
+    result is the NUL terminated contents of the file.  The file
+    is presumed to be an ASCII text file containing no NULs.  */
+ 
+ char *
+ load_file_data (FILE* fp)
+ {
+   char *pz_data = (char*)NULL;
+   int    space_left = -1;  /* allow for terminating NUL */
+   size_t space_used = 0;
+ 
+   if (fp == (FILE*)NULL)
+     return pz_data;
+ 
+   do
+     {
+       size_t  size_read;
+ 
+       if (space_left < 1024)
+         {
+           space_left += 4096;
+ 	  pz_data = xrealloc (pz_data, space_left + space_used + 1 );
+         }
+       size_read = fread (pz_data + space_used, 1, space_left, fp);
+ 
+       if (size_read == 0)
+         {
+           if (feof (fp))
+             break;
+ 
+           if (ferror (fp))
+             {
+               int err = errno;
+               if (err != EISDIR)
+                 fprintf (stderr, "error %d (%s) reading input\n", err,
+                          xstrerror (err));
+               free ((void *) pz_data);
+               return (char *) NULL;
+             }
+         }
+ 
+       space_left -= size_read;
+       space_used += size_read;
+     } while (! feof (fp));
+ 
+   pz_data = xrealloc (pz_data, space_used+1 );
+   pz_data[ space_used ] = NUL;
+ 
+   return pz_data;
+ }
+ 
+ #ifdef IS_CXX_HEADER_NEEDED
+ t_bool
+ is_cxx_header (tCC* fname, tCC* text)
+ {
+   /*  First, check to see if the file is in a C++ directory */
+   for (;;)
+     {
+       switch (*(fname++))
+         {
+         case 'C': /* check for "CC/" */
+           if ((fname[0] == 'C') && (fname[1] == '/'))
+             return BOOL_TRUE;
+           break;
+ 
+         case 'x': /* check for "xx/" */
+           if ((fname[0] == 'x') && (fname[1] == '/'))
+             return BOOL_TRUE;
+           break;
+ 
+         case '+': /* check for "++" */
+           if (fname[0] == '+')
+             return BOOL_TRUE;
+           break;
+ 
+         case NUL:
+           goto not_cxx_name;
+         }
+     } not_cxx_name:;
+ 
+   /* Or it might contain one of several phrases which indicate C++ code.
+      Currently recognized are:
+      extern "C++"
+      -*- (Mode: )? C++ -*-   (emacs mode marker)
+      template <
+    */
+     {
+       tSCC cxxpat[] = "\
+ extern[ \t]*\"C\\+\\+\"|\
+ -\\*-[ \t]*([mM]ode:[ \t]*)?[cC]\\+\\+[; \t]*-\\*-|\
+ template[ \t]*<|\
+ ^[ \t]*class[ \t]|\
+ (public|private|protected):|\
+ ^[ \t]*#[ \t]*pragma[ \t]+(interface|implementation)\
+ ";
+       static regex_t cxxre;
+       static int compiled;
+ 
+       if (!compiled)
+ 	compile_re (cxxpat, &cxxre, 0, "contents check", "is_cxx_header");
+ 
+       if (xregexec (&cxxre, text, 0, 0, 0) == 0)
+ 	return BOOL_TRUE;
+     }
+ 		   
+   return BOOL_FALSE;
+ }
+ #endif /* CXX_TYPE_NEEDED */
+ 
+ #ifdef SKIP_QUOTE_NEEDED
+ /*
+  *  Skip over a quoted string.  Single quote strings may
+  *  contain multiple characters if the first character is
+  *  a backslash.  Especially a backslash followed by octal digits.
+  *  We are not doing a correctness syntax check here.
+  */
+ tCC*
+ skip_quote(char q, char* text )
+ {
+   for (;;)
+     {
+       char ch = *(text++);
+       switch (ch)
+         {
+         case '\\':
+           text++; /* skip over whatever character follows */
+           break;
+ 
+         case '"':
+         case '\'':
+           if (ch != q)
+             break;
+           /*FALLTHROUGH*/
+ 
+         case '\n':
+         case NUL:
+           goto skip_done;
+         }
+     } skip_done:;
+ 
+   return text;
+ }
+ #endif /* SKIP_QUOTE_NEEDED */
+ 
+ /* * * * * * * * * * * * *
+  
+    Compile one regular expression pattern for later use.  PAT contains
+    the pattern, RE points to a regex_t structure (which should have
+    been bzeroed).  MATCH is 1 if we need to know where the regex
+    matched, 0 if not. If xregcomp fails, prints an error message and
+    aborts; E1 and E2 are strings to shove into the error message.
+ 
+    The patterns we search for are all egrep patterns.
+    REG_EXTENDED|REG_NEWLINE produces identical regex syntax/semantics
+    to egrep (verified from 4.4BSD Programmer's Reference Manual).  */
+ void
+ compile_re( tCC* pat, regex_t* re, int match, tCC* e1, tCC* e2 )
+ {
+   tSCC z_bad_comp[] = "fixincl ERROR:  cannot compile %s regex for %s\n\
+ \texpr = `%s'\n\terror %s\n";
+   int flags, err;
+ 
+   flags = (match ? REG_EXTENDED|REG_NEWLINE
+ 	   : REG_EXTENDED|REG_NEWLINE|REG_NOSUB);
+   err = xregcomp (re, pat, flags);
+ 
+   if (err)
+     {
+       char rerrbuf[1024];
+       regerror (err, re, rerrbuf, 1024);
+       fprintf (stderr, z_bad_comp, e1, e2, pat, rerrbuf);
+       exit (EXIT_FAILURE);
+     }
+ }
+ 
+ /* * * * * * * * * * * * *
+ 
+    Helper routine and data for the machine_name test and fix.  */
+ 
+ tSCC mn_label_pat[] = "^[ \t]*#[ \t]*(if|ifdef|ifndef)[ \t]+";
+ static regex_t mn_label_re;
+ static regex_t mn_name_re;
+ 
+ static int mn_compiled = 0;
+ 
+ t_bool
+ mn_get_regexps(regex_t** label_re, regex_t** name_re, tCC* who )
+ {
+   if (! pz_mn_name_pat)
+     return BOOL_FALSE;
+ 
+   if (! mn_compiled)
+     {
+       compile_re (mn_label_pat, &mn_label_re, 1, "label pattern", who);
+       compile_re (pz_mn_name_pat, &mn_name_re, 1, "name pattern", who);
+       mn_compiled++;
+     }
+   *label_re = &mn_label_re;
+   *name_re = &mn_name_re;
+   return BOOL_TRUE;
+ }
+ 
+ 
+ #ifdef SEPARATE_FIX_PROC
+ 
+ char*
+ make_raw_shell_str( char* pz_d, tCC* pz_s, size_t smax )
+ {
+   tSCC zQ[] = "'\\''";
+   size_t     dtaSize;
+   char*      pz_d_start = pz_d;
+ 
+   smax--; /* adjust for trailing NUL */
+ 
+   dtaSize = strlen( pz_s ) + 3;
+ 
+   {
+     const char* pz = pz_s - 1;
+ 
+     for (;;) {
+       pz = strchr( pz+1, '\'' );
+       if (pz == (char*)NULL)
+         break;
+       dtaSize += sizeof( zQ )-1;
+     }
+   }
+   if (dtaSize > smax)
+     return (char*)NULL;
+ 
+   *(pz_d++) = '\'';
+ 
+   for (;;) {
+     if (pz_d - pz_d_start >= smax)
+       return (char*)NULL;
+     switch (*(pz_d++) = *(pz_s++)) {
+     case NUL:
+       goto loopDone;
+ 
+     case '\'':
+       if (pz_d - pz_d_start >= smax - sizeof( zQ )-1)
+ 	return (char*)NULL;
+       strcpy( pz_d-1, zQ );
+       pz_d += sizeof( zQ )-2;
+     }
+   } loopDone:;
+   pz_d[-1] = '\'';
+   *pz_d    = NUL;
+ 
+   return pz_d;
+ }
+ 
+ #endif
diff -Nrcpad gcc-3.4.3/fixincludes/fixlib.h gcc-4.0.0/fixincludes/fixlib.h
*** gcc-3.4.3/fixincludes/fixlib.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/fixlib.h	Wed Oct 20 08:21:09 2004
***************
*** 0 ****
--- 1,249 ----
+ 
+ /* Install modified versions of certain ANSI-incompatible system header
+    files which are fixed to work correctly with ANSI C and placed in a
+    directory that GCC will search.
+ 
+    Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2004
+    Free Software Foundation, Inc.
+ 
+ This file is part of GCC.
+ 
+ GCC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GCC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING.  If not, write to
+ the Free Software Foundation, 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.  */
+ 
+ #ifndef GCC_FIXLIB_H
+ #define GCC_FIXLIB_H
+ 
+ #include "config.h"
+ #include "system.h"
+ #include <signal.h>
+ 
+ #include "xregex.h"
+ #include "libiberty.h"
+ 
+ #ifndef STDIN_FILENO
+ # define STDIN_FILENO   0
+ #endif
+ #ifndef STDOUT_FILENO
+ # define STDOUT_FILENO  1
+ #endif
+ 
+ #if ! defined( SIGCHLD ) && defined( SIGCLD )
+ #  define SIGCHLD SIGCLD
+ #endif
+ 
+ #ifndef SIGQUIT
+ #define SIGQUIT SIGTERM
+ #endif
+ #ifndef SIGIOT
+ #define SIGIOT SIGTERM
+ #endif
+ #ifndef SIGPIPE
+ #define SIGPIPE SIGTERM
+ #endif
+ #ifndef SIGALRM
+ #define SIGALRM SIGTERM
+ #endif
+ #ifndef SIGKILL
+ #define SIGKILL SIGTERM
+ #endif
+ 
+ typedef int t_success;
+ 
+ #define FAILURE         (-1)
+ #define SUCCESS           0
+ #define PROBLEM           1
+ 
+ #define SUCCEEDED(p)    ((p) == SUCCESS)
+ #define SUCCESSFUL(p)   SUCCEEDED (p)
+ #define FAILED(p)       ((p) < SUCCESS)
+ #define HADGLITCH(p)    ((p) > SUCCESS)
+ 
+ #ifndef DEBUG
+ # define STATIC static
+ #else
+ # define STATIC
+ #endif
+ 
+ #define tSCC static const char
+ #define tCC  const char
+ #define tSC  static char
+ 
+ /* If this particular system's header files define the macro `MAXPATHLEN',
+    we happily take advantage of it; otherwise we use a value which ought
+    to be large enough.  */
+ #ifndef MAXPATHLEN
+ # define MAXPATHLEN     4096
+ #endif
+ 
+ #ifndef EXIT_SUCCESS
+ # define EXIT_SUCCESS 0
+ #endif
+ #ifndef EXIT_FAILURE
+ # define EXIT_FAILURE 1
+ #endif
+ 
+ #define EXIT_BROKEN  3
+ 
+ #define NUL             '\0'
+ 
+ #ifndef NOPROCESS
+ #define NOPROCESS	((pid_t) -1)
+ #define NULLPROCESS	((pid_t)0)
+ 
+ #define EXIT_PANIC	99
+ #endif /* NOPROCESS */
+ 
+ #define IGNORE_ARG(a)   ((void)(a))
+ 
+ typedef enum t_bool
+ {
+   BOOL_FALSE, BOOL_TRUE
+ } t_bool;
+ 
+ typedef int apply_fix_p_t;  /* Apply Fix Predicate Type */
+ 
+ #define APPLY_FIX 0
+ #define SKIP_FIX  1
+ 
+ #define ENV_TABLE                                    \
+   _ENV_( pz_machine,   BOOL_TRUE, "TARGET_MACHINE",  \
+          "output from config.guess" )                \
+                                                      \
+   _ENV_( pz_orig_dir,  BOOL_TRUE, "ORIGDIR",         \
+          "directory of fixincl and applyfix" )       \
+                                                      \
+   _ENV_( pz_src_dir,   BOOL_TRUE, "SRCDIR",          \
+          "directory of original files" )             \
+                                                      \
+   _ENV_( pz_input_dir, BOOL_TRUE, "INPUT",           \
+          "current directory for fixincl" )           \
+                                                      \
+   _ENV_( pz_dest_dir,  BOOL_TRUE, "DESTDIR",         \
+          "output directory" )                        \
+                                                      \
+   _ENV_( pz_mn_name_pat, BOOL_FALSE, "MN_NAME_PAT",  \
+          "regex matching forbidden identifiers" )    \
+                                                      \
+   _ENV_( pz_verbose,  BOOL_FALSE, "VERBOSE",         \
+          "amount of user entertainment" )            \
+                                                      \
+   _ENV_( pz_find_base, BOOL_TRUE, "FIND_BASE",       \
+          "leader to trim from file names" )
+ 
+ #define _ENV_(v,m,n,t)   extern tCC* v;
+ ENV_TABLE
+ #undef _ENV_
+ 
+ /*  Test Descriptor
+ 
+     Each fix may have associated tests that determine
+     whether the fix needs to be applied or not.
+     Each test has a type (from the te_test_type enumeration);
+     associated test text; and, if the test is TT_EGREP or
+     the negated form TT_NEGREP, a pointer to the compiled
+     version of the text string.
+ 
+     */
+ typedef enum
+ {
+   TT_TEST, TT_EGREP, TT_NEGREP, TT_FUNCTION
+ } te_test_type;
+ 
+ typedef struct test_desc tTestDesc;
+ 
+ struct test_desc
+ {
+   te_test_type type;
+   const char *pz_test_text;
+   regex_t *p_test_regex;
+ };
+ 
+ typedef struct patch_desc tPatchDesc;
+ 
+ /*  Fix Descriptor
+ 
+     Everything you ever wanted to know about how to apply
+     a particular fix (which files, how to qualify them,
+     how to actually make the fix, etc...)
+ 
+     NB:  the FD_ defines are BIT FLAGS, even though
+          some are mutually exclusive
+ 
+     */
+ #define FD_MACH_ONLY      0x0000
+ #define FD_MACH_IFNOT     0x0001
+ #define FD_SHELL_SCRIPT   0x0002
+ #define FD_SUBROUTINE     0x0004
+ #define FD_REPLACEMENT    0x0008
+ #define FD_SKIP_TEST      0x8000
+ 
+ typedef struct fix_desc tFixDesc;
+ struct fix_desc
+ {
+   tCC*        fix_name;       /* Name of the fix */
+   tCC*        file_list;      /* List of files it applies to */
+   tCC**       papz_machs;     /* List of machine/os-es it applies to */
+   int         test_ct;
+   int         fd_flags;
+   tTestDesc*  p_test_desc;
+   tCC**       patch_args;
+   long        unused;
+ };
+ 
+ typedef struct {
+   int         type_name_len;
+   tCC*        pz_type;
+   tCC*        pz_TYPE;
+   tCC*        pz_gtype;
+ } t_gnu_type_map;
+ 
+ extern int gnu_type_map_ct;
+ 
+ #ifdef HAVE_MMAP_FILE
+ #define UNLOAD_DATA() do { if (curr_data_mapped) { \
+   munmap ((void*)pz_curr_data, data_map_size); close (data_map_fd); } \
+   else free ((void*)pz_curr_data); } while(0)
+ #else
+ #define UNLOAD_DATA() free ((void*)pz_curr_data)
+ #endif
+ 
+ /*
+  *  Exported procedures
+  */
+ char * load_file_data ( FILE* fp );
+ 
+ #ifdef IS_CXX_HEADER_NEEDED
+ t_bool is_cxx_header ( tCC* filename, tCC* filetext );
+ #endif /* IS_CXX_HEADER_NEEDED */
+ 
+ #ifdef SKIP_QUOTE_NEEDED
+ tCC*   skip_quote ( char  q, char* text );
+ #endif
+ 
+ void   compile_re ( tCC* pat, regex_t* re, int match, tCC *e1, tCC *e2 );
+ 
+ void   apply_fix ( tFixDesc* p_fixd, tCC* filname );
+ apply_fix_p_t
+        run_test ( tCC* t_name, tCC* f_name, tCC* text );
+ 
+ #ifdef SEPARATE_FIX_PROC
+ char*  make_raw_shell_str ( char* pz_d, tCC* pz_s, size_t smax );
+ #endif
+ 
+ t_bool mn_get_regexps ( regex_t** label_re, regex_t** name_re, tCC *who );
+ 
+ void   initialize_opts ( void );
+ #endif /* ! GCC_FIXLIB_H */
diff -Nrcpad gcc-3.4.3/fixincludes/fixopts.c gcc-4.0.0/fixincludes/fixopts.c
*** gcc-3.4.3/fixincludes/fixopts.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/fixopts.c	Fri Oct 15 07:58:38 2004
***************
*** 0 ****
--- 1,51 ----
+ /* Handle options that are passed from environment variables.
+ 
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GCC.
+ 
+ GCC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GCC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING.  If not, write to
+ the Free Software Foundation, 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.  */
+ 
+ #include "fixlib.h"
+ 
+ #define _ENV_(v,m,n,t)   tCC* v = NULL;
+ ENV_TABLE
+ #undef _ENV_
+ 
+ void
+ initialize_opts ()
+ {
+   static const char var_not_found[] =
+ #ifndef __STDC__
+     "fixincl ERROR:  %s environment variable not defined\n"
+ #else
+     "fixincl ERROR:  %s environment variable not defined\n"
+     "each of these must be defined:\n"
+ # define _ENV_(vv,mm,nn,tt) "\t" nn "  - " tt "\n"
+   ENV_TABLE
+ # undef _ENV_
+ #endif
+     ;
+ 
+ #define _ENV_(v,m,n,t)   { tSCC var[] = n;  \
+   v = getenv (var); if (m && (v == NULL)) { \
+   fprintf (stderr, var_not_found, var);     \
+   exit (EXIT_FAILURE); } }
+ 
+ ENV_TABLE
+ 
+ #undef _ENV_
+ }
diff -Nrcpad gcc-3.4.3/fixincludes/fixtests.c gcc-4.0.0/fixincludes/fixtests.c
*** gcc-3.4.3/fixincludes/fixtests.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/fixtests.c	Tue Aug 31 09:26:05 2004
***************
*** 0 ****
--- 1,155 ----
+ 
+ /*
+ 
+    Test to see if a particular fix should be applied to a header file.
+ 
+    Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
+ 
+ = = = = = = = = = = = = = = = = = = = = = = = = =
+ 
+ NOTE TO DEVELOPERS
+ 
+ The routines you write here must work closely with fixincl.c.
+ 
+ Here are the rules:
+ 
+ 1.  Every test procedure name must be suffixed with "_test".
+     These routines will be referenced from inclhack.def, sans the suffix.
+ 
+ 2.  Use the "TEST_FOR_FIX_PROC_HEAD()" macro _with_ the "_test" suffix
+     (I cannot use the ## magic from ANSI C) for defining your entry point.
+ 
+ 3.  Put your test name into the FIX_TEST_TABLE
+ 
+ 4.  Do not write anything to stdout.  It may be closed.
+ 
+ 5.  Write to stderr only in the event of a reportable error
+     In such an event, call "exit(1)".
+ 
+ = = = = = = = = = = = = = = = = = = = = = = = = =
+ 
+ This file is part of GCC.
+ 
+ GCC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GCC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING.  If not, write to
+ the Free Software Foundation, 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.  */
+ 
+ #include "fixlib.h"
+ 
+ #define _ENV_(v,m,n,t)   extern tCC* v;
+ ENV_TABLE
+ #undef _ENV_
+ 
+ typedef apply_fix_p_t t_test_proc ( tCC* file, tCC* text );
+ 
+ typedef struct {
+     tCC*         test_name;
+     t_test_proc* test_proc;
+ } test_entry_t;
+ 
+ #define FIX_TEST_TABLE							\
+   _FT_( "machine_name",     machine_name_test )				\
+   _FT_( "stdc_0_in_system_headers",    stdc_0_in_system_headers_test )
+ 
+ #define TEST_FOR_FIX_PROC_HEAD( test ) \
+ static apply_fix_p_t test ( tCC* fname ATTRIBUTE_UNUSED, \
+                             tCC* text  ATTRIBUTE_UNUSED )
+ 
+ TEST_FOR_FIX_PROC_HEAD( machine_name_test )
+ {
+   regex_t *label_re, *name_re;
+   regmatch_t match[2];
+   tCC *base, *limit;
+   IGNORE_ARG(fname);
+ 
+   if (!mn_get_regexps (&label_re, &name_re, "machine_name_test"))
+     return SKIP_FIX;
+ 
+   for (base = text;
+        xregexec (label_re, base, 2, match, 0) == 0;
+        base = limit)
+     {
+       base += match[0].rm_eo;
+       /* We're looking at an #if or #ifdef.  Scan forward for the
+ 	 next non-escaped newline.  */
+       limit = base;
+       do
+ 	{
+ 	  limit++;
+ 	  limit = strchr (limit, '\n');
+ 	  if (!limit)
+ 	    return SKIP_FIX;
+ 	}
+       while (limit[-1] == '\\');
+ 
+       /* If the 'name_pat' matches in between base and limit, we have
+ 	 a bogon.  It is not worth the hassle of excluding comments,
+ 	 because comments on #if/#ifdef/#ifndef lines are rare,
+ 	 and strings on such lines are illegal.
+ 
+ 	 REG_NOTBOL means 'base' is not at the beginning of a line, which
+ 	 shouldn't matter since the name_re has no ^ anchor, but let's
+ 	 be accurate anyway.  */
+ 
+       if (xregexec (name_re, base, 1, match, REG_NOTBOL))
+ 	return SKIP_FIX;  /* No match in file - no fix needed */
+ 
+       /* Match; is it on the line?  */
+       if (match[0].rm_eo <= limit - base)
+ 	return APPLY_FIX;  /* Yup */
+ 
+       /* Otherwise, keep looking... */
+     }
+   return SKIP_FIX;
+ }
+ 
+ 
+ TEST_FOR_FIX_PROC_HEAD( stdc_0_in_system_headers_test )
+ {
+ #ifdef STDC_0_IN_SYSTEM_HEADERS
+   return (pz_machine == NULL) ? APPLY_FIX : SKIP_FIX;
+ #else
+   return APPLY_FIX;
+ #endif
+ }
+ 
+ 
+ /* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
+ 
+      test for fix selector
+ 
+      THIS IS THE ONLY EXPORTED ROUTINE
+ 
+ */
+ apply_fix_p_t
+ run_test( tCC* tname, tCC* fname, tCC* text )
+ {
+ #define _FT_(n,p) { n, p },
+   static test_entry_t test_table[] = { FIX_TEST_TABLE { NULL, NULL }};
+ #undef _FT_
+ #define TEST_TABLE_CT (ARRAY_SIZE (test_table)-1)
+ 
+   int ct = TEST_TABLE_CT;
+   test_entry_t* pte = test_table;
+ 
+   do
+     {
+       if (strcmp( pte->test_name, tname ) == 0)
+         return (*pte->test_proc)( fname, text );
+       pte++;
+     } while (--ct > 0);
+   fprintf( stderr, "fixincludes error:  the `%s' fix test is unknown\n",
+            tname );
+   exit( 3 );
+ }
diff -Nrcpad gcc-3.4.3/fixincludes/genfixes gcc-4.0.0/fixincludes/genfixes
*** gcc-3.4.3/fixincludes/genfixes	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/genfixes	Tue Aug 31 09:26:05 2004
***************
*** 0 ****
--- 1,77 ----
+ #! /bin/sh
+ 
+ # Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
+ # This file is part of GCC.
+ 
+ # GCC is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2, or (at your option)
+ # any later version.
+ 
+ # GCC is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ # GNU General Public License for more details.
+ 
+ # You should have received a copy of the GNU General Public License
+ # along with GCC; see the file COPYING.  If not, write to
+ # the Free Software Foundation, 59 Temple Place - Suite 330,
+ # Boston, MA 02111-1307, USA.
+ 
+ SHELL=/bin/sh
+ export SHELL
+ if [ $# -eq 0 ] ; then
+   not_done=false
+ else
+   not_done=true
+ fi
+ 
+ while $not_done
+ do
+   case "$1" in
+   -D )
+     shift
+     if [ $# -eq 0 ] ; then
+       not_done=false
+     else
+       AG="$AG -D$1"
+       shift
+     fi
+     ;;
+ 
+   -D* )
+     AG="$AG $1"
+     shift
+     ;;
+ 
+   '-?' )
+     echo "USAGE: gendefs [ -D<def-name> ... ]"
+     echo "WHERE: '<def-name>' specifies a #define test name from inclhack.def"
+     exit 0
+     ;;
+ 
+   * )
+     not_done=false
+     ;;
+   esac
+ done
+ 
+ if [ $# -eq 0 ] ; then
+   set -- fixincl.x
+ fi
+ 
+ AG="autogen $AG"
+ set -e
+ 
+ if [ -z "`${AG} -v | fgrep 'Ver. 5.'`" ]
+ then
+   echo "AutoGen appears to be out of date or not correctly installed."
+   echo "Please download and install:"
+   echo "   ftp://gcc.gnu.org/pub/gcc/infrastructure/autogen.tar.gz"
+   touch fixincl.x
+ else
+   echo AutoGen-ing fixincl.x
+   $AG inclhack.def
+ fi
+ 
+ exit 0
diff -Nrcpad gcc-3.4.3/fixincludes/inclhack.def gcc-4.0.0/fixincludes/inclhack.def
*** gcc-3.4.3/fixincludes/inclhack.def	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/inclhack.def	Mon Mar 21 16:17:47 2005
***************
*** 0 ****
--- 1,4237 ----
+ /* -*- Mode: C -*-  */
+ 
+ autogen definitions fixincl;
+ 
+ /* Define all the fixes we know about for repairing damaged headers.
+    Please see the README before adding or changing entries in this file.
+ 
+    This is the sort command:
+ 
+    blocksort output=inclhack.sorted \
+           pattern='^/\*$' \
+           trailer='^/\*EOF\*[/]' \
+           input=inclhack.def \
+           key='hackname[ 	]*=[ 	]*(.*);'
+ 
+    Set up a debug test so we can make the templates emit special
+    code while debugging these fixes:  */
+ 
+ #ifdef DEBUG
+ FIXINC_DEBUG = yes;
+ #endif
+ 
+ /*
+  *  This fixes __FD_ZERO bug for linux 2.x.y (x <= 2 && y <= some n)
+  */
+ fix = {
+     hackname = AAB_fd_zero_asm_posix_types_h;
+     files    = asm/posix_types.h;
+     mach     = 'i[34567]86-*-linux*';
+     bypass   = '} while';
+ 
+     /*
+      * Define _POSIX_TYPES_H_WRAPPER at the end of the wrapper, not
+      * the start, so that if #include_next gets another instance of
+      * the wrapper, this will follow the #include_next chain until
+      * we arrive at the real <asm/posix_types.h>.
+      */
+     replace  = <<-  _EndOfHeader_
+ 	/* This file fixes a bug in the __FD_ZERO macro
+ 	   for older versions of the Linux kernel. */
+ 	#ifndef _POSIX_TYPES_H_WRAPPER
+ 	#include <features.h>
+ 	 #include_next <asm/posix_types.h>
+ 	
+ 	#if defined(__FD_ZERO) && !defined(__GLIBC__)
+ 	#undef __FD_ZERO
+ 	#define __FD_ZERO(fdsetp) \
+ 	  do { \
+ 	    int __d0, __d1; \
+ 			__asm__ __volatile__("cld ; rep ; stosl" \
+ 				: "=&c" (__d0), "=&D" (__d1) \
+ 				: "a" (0), "0" (__FDSET_LONGS), \
+ 				  "1" ((__kernel_fd_set *) (fdsetp)) :"memory"); \
+ 	  } while (0)
+ 	#endif
+ 	
+ 	#define _POSIX_TYPES_H_WRAPPER
+ 	#endif /* _POSIX_TYPES_H_WRAPPER */
+ 	_EndOfHeader_;
+ };
+ 
+ 
+ /*
+  *  This fixes __FD_ZERO bug for glibc-1.x
+  */
+ fix = {
+     hackname = AAB_fd_zero_gnu_types_h;
+     files    = gnu/types.h;
+     mach     = 'i[34567]86-*-linux*';
+ 
+     /*
+      * Define _TYPES_H_WRAPPER at the end of the wrapper, not
+      * the start, so that if #include_next gets another instance of
+      * the wrapper, this will follow the #include_next chain until
+      * we arrive at the real <gnu/types.h>.
+      */
+     replace  = <<-  _EndOfHeader_
+ 	/* This file fixes a bug in the __FD_ZERO macro present in glibc 1.x. */
+ 	#ifndef _TYPES_H_WRAPPER
+ 	#include <features.h>
+ 	#include_next <gnu/types.h>
+ 
+ 	#if defined(__FD_ZERO) && !defined(__GLIBC__)
+ 	#undef __FD_ZERO
+ 	# define __FD_ZERO(fdsetp) \\
+ 	  do { \\
+ 	    int __d0, __d1; \\
+ 		__asm__ __volatile__("cld ; rep ; stosl" \\
+         	: "=&c" (__d0), "=&D" (__d1) \\
+         	: "a" (0), "0" (__FDSET_LONGS), \\
+ 		  "1" ((__fd_set *) (fdsetp)) :"memory"); \\
+ 	  } while (0)
+ 	#endif
+ 
+ 	#define _TYPES_H_WRAPPER
+ 	#endif /* _TYPES_H_WRAPPER */
+ 	_EndOfHeader_;
+ };
+ 
+ 
+ /*
+  *  This fixes __FD_ZERO bug for glibc-2.0.x
+  */
+ fix = {
+     hackname = AAB_fd_zero_selectbits_h;
+     files    = selectbits.h;
+     mach     = 'i[34567]86-*-linux*';
+ 
+     /*
+      * Define _SELECTBITS_H_WRAPPER at the end of the wrapper, not
+      * the start, so that if #include_next gets another instance of
+      * the wrapper, this will follow the #include_next chain until
+      * we arrive at the real <selectbits.h>.
+      */
+     replace  = <<-  _EndOfHeader_
+ 	/* This file fixes a bug in the __FD_ZERO macro present in glibc 2.0.x. */
+ 	#ifndef _SELECTBITS_H_WRAPPER
+ 	  #include <features.h>
+ 	  #include_next <selectbits.h>
+ 
+ 	  #if defined(__FD_ZERO) && defined(__GLIBC__) \\
+ 	  && defined(__GLIBC_MINOR__) && __GLIBC__ == 2 \\
+ 	  && __GLIBC_MINOR__ == 0
+ 	     #undef __FD_ZERO
+ 	     #define __FD_ZERO(fdsetp) \\
+ 	     do { \\
+ 	        int __d0, __d1; \\
+ 	      __asm__ __volatile__ ("cld; rep; stosl" \\
+                         : "=&c" (__d0), "=&D" (__d1) \\
+                         : "a" (0), "0" (sizeof (__fd_set) \\
+                                         / sizeof (__fd_mask)), \\
+                           "1" ((__fd_mask *) (fdsetp)) \\
+                         : "memory"); \\
+ 	      } while (0)
+ 	  #endif
+ 
+ 	  #define _SELECTBITS_H_WRAPPER
+ 	#endif /* _SELECTBITS_H_WRAPPER */
+ 	_EndOfHeader_;
+ };
+ 
+ 
+ /*
+  * Solaris <sys/varargs.h> is a DDK (aka kernel-land) header providing
+  * the same interface as <stdarg.h>.  No idea why they couldn't have just
+  * used the standard header.
+  */
+ fix = {
+     hackname = AAB_solaris_sys_varargs_h;
+     files    = "sys/varargs.h";
+     mach     = '*-*-solaris*';
+     replace  = <<-  _EndOfHeader_
+ 	#ifdef __STDC__
+ 	  #include <stdarg.h>
+ 	#else
+ 	  #include <varargs.h>
+ 	#endif
+ 	_EndOfHeader_;
+ };
+ 
+ 
+ /*
+  *  Fix non-ANSI memcpy declaration that conflicts with gcc's builtin
+  *  declaration on Sun OS 4.x.  We must only fix this on Sun OS 4.x, because
+  *  many other systems have similar text but correct versions of the file.
+  *  To ensure only Sun's is fixed, we grep for a likely unique string.
+  *  Fix also on sysV68 R3V7.1 (head/memory.h\t50.1\t )
+  */
+ fix = {
+     hackname = AAB_sun_memcpy;
+     files    = memory.h;
+     select   = "/\\*\t@\\(#\\)"
+              "(head/memory.h\t50.1\t "
+              "|memory\\.h 1\\.[2-4] 8./../.. SMI; from S5R2 1\\.2\t)\\*/";
+ 
+     replace = <<-  _EndOfHeader_
+ 	/* This file was generated by fixincludes */
+ 	#ifndef __memory_h__
+ 	  #define __memory_h__
+ 
+ 	  #ifdef __STDC__
+ 	    extern void *memccpy();
+ 	    extern void *memchr();
+ 	    extern void *memcpy();
+ 	    extern void *memset();
+ 	  #else
+ 	    extern char *memccpy();
+ 	    extern char *memchr();
+ 	    extern char *memcpy();
+ 	    extern char *memset();
+ 	  #endif /* __STDC__ */
+ 
+ 	  extern int memcmp();
+ 
+ 	#endif /* __memory_h__ */
+ 	_EndOfHeader;
+ };
+ 
+ 
+ /*
+  *  Completely replace <sys/varargs.h> with a file that includes gcc's
+  *  stdarg.h or varargs.h files as appropriate.
+  */
+ #ifdef SVR4
+ fix = {
+     hackname = AAB_svr4_no_varargs;
+     files    = sys/varargs.h;
+     replace  = "/* This file was generated by fixincludes.  */\n"
+                "#ifndef _SYS_VARARGS_H\n"
+                "#define _SYS_VARARGS_H\n\n"
+ 
+                "#ifdef __STDC__\n"
+                "#include <stdarg.h>\n"
+                "#else\n"
+                "#include <varargs.h>\n"
+                "#endif\n\n"
+ 
+                "#endif  /* _SYS_VARARGS_H */\n";
+ };
+ #endif
+ 
+ 
+ /*
+  *  Completely replace <sys/byteorder.h> with a file that implements gcc's
+  *  optimized byteswapping.  (The original probably implemented some
+  *  incompatible optimized byteswapping.)
+  */
+ fix = {
+     hackname = AAB_svr4_replace_byteorder;
+     mach     = "*-*-sysv4*";
+     mach     = "i[34567]86-*-sysv5*";
+     mach     = "i[34567]86-*-sco3.2v5*";
+     mach     = "i[34567]86-*-udk*";
+     mach     = "i[34567]86-*-solaris2.[0-4]";
+     mach     = "powerpcle-*-solaris2.[0-4]";
+     mach     = "sparc-*-solaris2.[0-4]";
+     mach     = "i[34567]86-sequent-ptx*";
+     files    = sys/byteorder.h;
+     replace  = <<-  _EndOfHeader_
+ 	#ifndef _SYS_BYTEORDER_H
+ 	#define _SYS_BYTEORDER_H
+ 
+ 	/* Functions to convert `short' and `long' quantities from host byte order
+ 	   to (internet) network byte order (i.e. big-endian).
+ 
+ 	   Written by Ron Guilmette (rfg@ncd.com).
+ 
+ 	   This isn't actually used by GCC.  It is installed by fixinc.svr4.
+ 
+ 	   For big-endian machines these functions are essentially no-ops.
+ 
+ 	   For little-endian machines, we define the functions using specialized
+ 	   asm sequences in cases where doing so yields better code (e.g. i386).  */
+ 
+ 	#if !defined (__GNUC__) && !defined (__GNUG__)
+ 	  #error You lose!  This file is only useful with GNU compilers.
+ 	#endif
+ 
+ 	#ifndef __BYTE_ORDER__
+ 	  /* Byte order defines.  These are as defined on UnixWare 1.1, but with
+ 	     double underscores added at the front and back.  */
+ 	  #define __LITTLE_ENDIAN__   1234
+ 	  #define __BIG_ENDIAN__      4321
+ 	  #define __PDP_ENDIAN__      3412
+ 	#endif
+ 
+ 	#ifdef __STDC__
+ 	  static __inline__ unsigned long htonl (unsigned long);
+ 	  static __inline__ unsigned short htons (unsigned int);
+ 	  static __inline__ unsigned long ntohl (unsigned long);
+ 	  static __inline__ unsigned short ntohs (unsigned int);
+ 	#endif /* defined (__STDC__) */
+ 
+ 	#if defined (__i386__)
+ 
+ 	  #ifndef __BYTE_ORDER__
+ 	    #define __BYTE_ORDER__ __LITTLE_ENDIAN__
+ 	  #endif
+ 
+ 	  /* Convert a host long to a network long.  */
+ 
+ 	  /* We must use a new-style function definition, so that this will also
+ 	     be valid for C++.  */
+ 	  static __inline__ unsigned long
+ 	  htonl (unsigned long __arg)
+ 	  {
+ 	    register unsigned long __result;
+ 
+ 	    __asm__ ("xchg%B0 %b0,%h0
+ 		  ror%L0 $16,%0
+ 		  xchg%B0 %b0,%h0" : "=q" (__result) : "0" (__arg));
+ 	    return __result;
+ 	  }
+ 
+ 	  /* Convert a host short to a network short.  */
+ 
+ 	  static __inline__ unsigned short
+ 	  htons (unsigned int __arg)
+ 	  {
+ 	    register unsigned short __result;
+ 
+ 	    __asm__ ("xchg%B0 %b0,%h0" : "=q" (__result) : "0" (__arg));
+ 	    return __result;
+ 	  }
+ 
+ 	#elif (defined (__ns32k__) || defined (__vax__) || defined (__arm__))
+ 
+ 	  #ifndef __BYTE_ORDER__
+ 	    #define __BYTE_ORDER__ __LITTLE_ENDIAN__
+ 	  #endif
+ 
+ 	  /* For other little-endian machines, using C code is just as efficient as
+ 	     using assembly code.  */
+ 
+ 	  /* Convert a host long to a network long.  */
+ 
+ 	  static __inline__ unsigned long
+ 	  htonl (unsigned long __arg)
+ 	  {
+ 	    register unsigned long __result;
+ 
+ 	    __result = (__arg >> 24) & 0x000000ff;
+ 	    __result |= (__arg >> 8) & 0x0000ff00;
+ 	    __result |= (__arg << 8) & 0x00ff0000;
+ 	    __result |= (__arg << 24) & 0xff000000;
+ 	    return __result;
+ 	  }
+ 
+ 	  /* Convert a host short to a network short.  */
+ 
+ 	  static __inline__ unsigned short
+ 	  htons (unsigned int __arg)
+ 	  {
+ 	    register unsigned short __result;
+ 
+ 	    __result = (__arg << 8) & 0xff00;
+ 	    __result |= (__arg >> 8) & 0x00ff;
+ 	    return __result;
+ 	  }
+ 
+ 	#else /* must be a big-endian machine */
+ 
+ 	  #ifndef __BYTE_ORDER__
+ 	    #define __BYTE_ORDER__ __BIG_ENDIAN__
+ 	  #endif
+ 
+ 	  /* Convert a host long to a network long.  */
+ 
+ 	  static __inline__ unsigned long
+ 	  htonl (unsigned long __arg)
+ 	  {
+ 	    return __arg;
+ 	  }
+ 
+ 	  /* Convert a host short to a network short.  */
+ 
+ 	  static __inline__ unsigned short
+ 	  htons (unsigned int __arg)
+ 	  {
+ 	    return __arg;
+ 	  }
+ 
+ 	#endif /* big-endian */
+ 
+ 	/* Convert a network long to a host long.  */
+ 
+ 	static __inline__ unsigned long
+ 	ntohl (unsigned long __arg)
+ 	{
+ 	  return htonl (__arg);
+ 	}
+ 
+ 	/* Convert a network short to a host short.  */
+ 
+ 	static __inline__ unsigned short
+ 	ntohs (unsigned int __arg)
+ 	{
+ 	  return htons (__arg);
+ 	}
+ 	#endif
+ 	_EndOfHeader_;
+ };
+ 
+ 
+ /*
+  *  Cancel out ansi_compat.h on Ultrix.  Replace it with an empty file.
+  */
+ fix = {
+     hackname = AAB_ultrix_ansi_compat;
+     files    = ansi_compat.h;
+     select   = ULTRIX;
+     replace  = "/* This file intentionally left blank.  */\n";
+ };
+ 
+ 
+ /*
+  *  The Ultrix 4.3 file limits.h is a symbolic link to sys/limits.h.
+  *  Replace limits.h with a file that includes sys/limits.h.
+  */
+ fix = {
+     hackname = AAB_ultrix_limits;
+     files    = limits.h;
+     mach     = "*-*-ultrix4.3";
+     replace  = <<-  _EndOfHeader_
+ 	#ifndef _LIMITS_INCLUDED
+ 	  #define _LIMITS_INCLUDED
+ 	  #include <sys/limits.h>
+ 	#endif /* _LIMITS_INCLUDED */
+ 	_EndOfHeader_;
+ };
+ 
+ 
+ /*
+  *  The ULTRIX 4.3 version of memory.h duplicates definitions
+  *  present in strings.h.  Replace memory.h with a file that includes
+  *  strings.h to prevent problems from multiple inclusion.
+  */
+ fix = {
+     hackname = AAB_ultrix_memory;
+     files    = memory.h;
+     mach     = "*-*-ultrix4.3";
+     replace  = <<-  _EndOfHeader_
+ 	#ifndef _MEMORY_INCLUDED
+ 	  #define _MEMORY_INCLUDED
+ 	  #include <strings.h>
+ 	#endif /* _MEMORY_INCLUDED */
+ 	_EndOfHeader_;
+ };
+ 
+ 
+ /*
+  *  The Ultrix 4.3 file string.h is a symbolic link to strings.h.
+  *  Replace string.h link with a file that includes strings.h to prevent
+  *  problems from multiple inclusion.
+  */
+ fix = {
+     hackname = AAB_ultrix_string;
+     files    = string.h;
+     mach     = "*-*-ultrix4.3";
+     replace  = <<-  _EndOfHeader_
+ 	#ifndef _STRING_INCLUDED
+ 	  #define _STRING_INCLUDED
+ 	  #include <strings.h>
+ 	#endif /* _STRING_INCLUDED */
+ 	_EndOfHeader_;
+ };
+ 
+ 
+ /*
+  *  pthread.h on AIX 4.3.3 tries to define a macro without whitspace
+  *  which violates a requirement of ISO C.
+  */
+ fix = {
+     hackname  = aix_pthread;
+     files     = "pthread.h";
+     select    = "(#define [A-Za-z_0-9]+)(\\\\\n[^A-Za-z_0-9 \t\n(])";
+     c_fix     = format;
+     c_fix_arg = "%1 %2";
+     test_text = "#define PTHREAD_MUTEX_INITIALIZER\\\\\n"
+                 "{...init stuff...}";
+ };
+ 
+ 
+ /*
+  *  sys/machine.h on AIX 4.3.3 puts whitespace between a \ and a newline
+  *  in an otherwise harmless (and #ifed out) macro definition
+  */
+ fix = {
+     hackname  = aix_sysmachine;
+     files     = sys/machine.h;
+     select    = "\\\\ +\n";
+     c_fix     = format;
+     c_fix_arg = "\\\n";
+     test_text = "#define FOO \\\n"
+     " bar \\ \n baz \\ \n bat";
+ };
+ 
+ 
+ /*
+  *  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 fails.
+  */
+ fix = {
+     hackname  = aix_syswait;
+     files     = sys/wait.h;
+     select    = "^extern pid_t wait3\\(\\);\n";
+     select    = "bos325,";
+     c_fix     = format;
+     c_fix_arg = "struct rusage;\n%0";
+     test_text = "/* bos325, */\n"
+     "extern pid_t wait3();\n"
+     "\t/* pid_t wait3(int *, int, struct rusage *); */";
+ };
+ 
+ 
+ /*
+  *  sys/wait.h on AIX 5.2 defines macros that have both signed and
+  *  unsigned types in conditional expressions.
+  */
+ fix = {
+     hackname  = aix_syswait_2;
+     files     = sys/wait.h;
+     select    = '\? (\(\(\(\(unsigned[^)]*\)[^)]*\) >> [^)]*\) \& 0xff\) : -1)';
+     c_fix     = format;
+     c_fix_arg = "? (int)%1";
+     test_text = "#define WSTOPSIG(__x)    (int)(WIFSTOPPED(__x) ? ((((unsigned int)__x) >> 8) & 0xff) : -1)";
+ };
+ 
+ 
+ /*
+  *  sys/signal.h on some versions of AIX uses volatile in the typedef of
+  *  sig_atomic_t, which causes gcc to generate a warning about duplicate
+  *  volatile when a sig_atomic_t variable is declared volatile, as
+  *  required by ANSI C.
+  */
+ fix = {
+     hackname  = aix_volatile;
+     files     = sys/signal.h;
+     select    = "typedef volatile int sig_atomic_t";
+     c_fix     = format;
+     c_fix_arg = "typedef int sig_atomic_t";
+     test_text = "typedef volatile int sig_atomic_t;";
+ };
+ 
+ 
+ /*
+  *  Fix __assert declaration in assert.h on Alpha OSF/1.
+  */
+ fix = {
+     hackname  = alpha___assert;
+     files     = "assert.h";
+     select    = '__assert\(char \*, char \*, int\)';
+     c_fix     = format;
+     c_fix_arg = "__assert(const char *, const char *, int)";
+     test_text = 'extern void __assert(char *, char *, int);';
+ };
+ 
+ 
+ /*
+  *  Obey __PRAGMA_EXTERN_PREFIX for Tru64 UNIX V4/5 headers.
+  */
+ fix = {
+     hackname  = alpha___extern_prefix;
+     select    = "(.*)(defined\\(__DECC\\)|def[ \t]*__DECC)[ \t]*\n(#[ \t]*pragma[ \t]*extern_prefix.*)";
+ 
+     mach      = "alpha*-dec-osf*";
+     c_fix     = format;
+     c_fix_arg = "%1 (defined(__DECC) || defined(__PRAGMA_EXTERN_PREFIX))\n%3";
+ 
+     test_text = "#ifdef  __DECC\n"
+ 		"#pragma extern_prefix \"_P\"\n"
+ 		"#   if defined(__DECC)\n"
+ 		"#     pragma extern_prefix \"_E\"\n"
+ 		"# if !defined(_LIBC_POLLUTION_H_) && defined(__DECC)\n"
+ 		"#  pragma extern_prefix \"\"";
+ };
+ 
+ 
+ /*
+  *  Obey __PRAGMA_EXTERN_PREFIX for Tru64 UNIX V4/5 <standards.h>.
+  */
+ fix = {
+     hackname  = alpha___extern_prefix_standards;
+     files     = standards.h;
+     select    = ".*!defined\\(_LIBC_POLLUTION_H_\\) && !defined\\(__DECC\\)";
+ 
+     mach      = "alpha*-dec-osf*";
+     c_fix     = format;
+     c_fix_arg = "%0 && !defined(__PRAGMA_EXTERN_PREFIX)";
+ 
+     test_text = "#if (_ISO_C_SOURCE>=19990L) && !defined(_LIBC_POLLUTION_H_) && !defined(__DECC)";
+ };
+ 
+ 
+ /*
+  *  Obey __PRAGMA_EXTERN_PREFIX for Tru64 UNIX V5 <sys/mount.h> and
+  *  <sys/stat.h>.  The tests for __DECC are special in various ways, so
+  *  alpha__extern_prefix cannot be used.
+  */
+ fix = {
+     hackname  = alpha___extern_prefix_sys_stat;
+     files     = sys/stat.h;
+     files     = sys/mount.h;
+     select    = "#[ \t]*if[ \t]*defined\\(__DECC\\)";
+ 
+     mach      = "alpha*-dec-osf5*";
+     c_fix     = format;
+     c_fix_arg = "%0 || defined(__PRAGMA_EXTERN_PREFIX)";
+ 
+     test_text = "#   if defined(__DECC)";
+ };
+ 
+ 
+ /*
+  *  Fix assert macro in assert.h on Alpha OSF/1.
+  *  The superfluous int cast breaks C++.
+  */
+ fix = {
+     hackname  = alpha_assert;
+     files     = "assert.h";
+     select    = '(#define assert\(EX\).*)\(\(int\) \(EX\)\)';
+     c_fix     = format;
+     c_fix_arg = "%1(EX)";
+     test_text = '#define assert(EX) (((int) (EX)) ? (void)0 : __assert(#EX, __FILE__, __LINE__))';
+ };
+ 
+ 
+ /*
+  *  Fix #defines under Alpha OSF/1:
+  *  The following files contain '#pragma extern_prefix "_FOO"' followed by
+  *  a '#define something(x,y,z) _FOOsomething(x,y,z)'.  The intent of these
+  *  statements is to reduce namespace pollution.  While these macros work
+  *  properly in most cases, they don't allow you to take a pointer to the
+  *  "something" being modified.  To get around this limitation, change these
+  *  statements to be of the form '#define something _FOOsomething'.
+  *
+  *  sed ain't egrep, lesson 2463:  sed can use self-referential
+  *  regular expressions.  In the substitute expression below,
+  *  "\\1" and "\\2" refer to subexpressions found earlier in the
+  *  same match.  So, we continue to use sed.  "extern_prefix" will
+  *  be a rare match anyway...
+  */
+ fix = {
+     hackname = alpha_bad_lval;
+ 
+     select   = "^[ \t]*#[ \t]*pragma[ \t]+extern_prefix";
+     mach      = "alpha*-dec-osf*";
+ 
+     sed      =
+         "s/^[ \t]*#[ \t]*define[ \t][ \t]*\\([^(]*\\)\\(([^)]*)\\)[ \t]*"
+                "\\(_.*\\)\\1\\2[ \t]*$/#define \\1 \\3\\1/";
+ 
+     test_text = '#pragma extern_prefix "_FOO"'"\n"
+                 "#define something(x,y,z) _FOOsomething(x,y,z)\n"
+                 "#define mumble _FOOmumble";
+ };
+ 
+ 
+ /*
+  *  Fix getopt declarations in stdio.h and stdlib.h on Alpha OSF/1 and AIX.
+  */
+ fix = {
+     hackname  = alpha_getopt;
+     files     = "stdio.h";
+     files     = "stdlib.h";
+     select    = 'getopt\(int, char \*\[\], *char \*\)';
+     c_fix     = format;
+     c_fix_arg = "getopt(int, char *const[], const char *)";
+     test_text = 'extern int getopt(int, char *[], char *);';
+ };
+ 
+ 
+ /*
+  * Remove erroneous parentheses in sym.h on Alpha OSF/1.
+  */
+ fix = {
+     hackname  = alpha_parens;
+     files     = sym.h;
+     select    = '#ifndef\(__mips64\)';
+     c_fix     = format;
+     c_fix_arg = "#ifndef __mips64";
+     test_text = "#ifndef(__mips64) /* bogus */\nextern int foo;\n#endif";
+ };
+ 
+ 
+ /*
+  *  Obey __PRAGMA_EXTERN_PREFIX for Tru64 UNIX <pthread.h>.
+  */
+ fix = {
+     hackname  = alpha_pthread;
+     files     = pthread.h;
+     select    = "((#[ \t]*if)([ \t]*defined[ \t]*\\(_PTHREAD_ENV_DECC\\)|def _PTHREAD_ENV_DECC)(.*))\n"
+ 		"(#[ \t]*define _PTHREAD_USE_PTDNAM_)";
+ 
+     mach      = "alpha*-dec-osf*";
+     c_fix     = format;
+     c_fix_arg = "%2 defined (_PTHREAD_ENV_DECC)%4 || defined (__PRAGMA_EXTERN_PREFIX)\n%5";
+ 
+     test_text = "#  if defined (_PTHREAD_ENV_DECC) || defined (_PTHREAD_ENV_EPCC)\n"
+ 		"#   define _PTHREAD_USE_PTDNAM_\n"
+ 		"#  endif\n"
+ 		"#  ifdef _PTHREAD_ENV_DECC\n"
+ 		"#   define _PTHREAD_USE_PTDNAM_\n"
+ 		"#  endif";
+ };
+ 
+ 
+ /*
+  *  Recognize GCC in Tru64 UNIX V5.1B <pthread.h>.
+  */
+ fix = {
+     hackname  = alpha_pthread_gcc;
+     files     = pthread.h;
+     select    = "#else\n# error <pthread.h>: unrecognized compiler.";
+ 
+     mach      = "alpha*-dec-osf*";
+     c_fix     = format;
+     c_fix_arg = "#elif defined (__GNUC__)\n"
+ 		"# define _PTHREAD_ENV_GCC\n"
+     		"%0";
+ 
+     test_text = "# define _PTHREAD_ENV_INTELC\n"
+ 		"#else\n"
+ 		"# error <pthread.h>: unrecognized compiler.\n"
+ 		"#endif";
+ };
+ 
+ /*
+  * Compaq Tru64 v5.1 defines all of its PTHREAD_*_INITIALIZER macros
+  * incorrectly, specifying less fields in the initializers than are
+  * defined in the corresponding structure types.  Use of these macros
+  * in user code results in spurious warnings.
+  */
+ fix = {
+     hackname  = alpha_pthread_init;
+     files     = pthread.h;
+     select    = ' \* @\(#\).RCSfile: pthread\.h,v \$'
+                 ' .Revision: 1\.1\.33\.21 \$ \(DEC\)'
+                 ' .Date: 2000/08/15 15:30:13 \$';
+     mach      = "alpha*-dec-osf*";
+     sed       = "s@MVALID\\(.*\\)A}@MVALID\\1A, 0, 0, 0, 0, 0, 0 }@\n"
+                 "s@MVALID\\(.*\\)_}@MVALID\\1_, 0, 0, 0, 0 }@\n"
+                 "s@CVALID\\(.*\\)A}@CVALID\\1A, 0, 0, 0, 0 }@\n"
+                 "s@CVALID\\(.*\\)_}@CVALID\\1_, 0, 0 }@\n"
+                 "s@WVALID\\(.*\\)A}@WVALID\\1A, 0, 0, 0, 0, 0, 0, 0, 0, 0 }@\n"
+                 "s@WVALID\\(.*\\)_}@WVALID\\1_, 0, 0, 0, 0, 0, 0, 0 }@\n";
+     test_text = "/*\n"
+                 " * @(#)_RCSfile: pthread.h,v \\$ "
+                 "_Revision: 1.1.33.21 \\$ (DEC) "
+                 "_Date: 2000/08/15 15:30:13 \\$\n"
+                 " */\n"
+ "#ifndef _PTHREAD_NOMETER_STATIC\n"
+ "# define PTHREAD_MUTEX_INITIALIZER \\\n"
+ "    {_PTHREAD_MSTATE_CONFIG, _PTHREAD_MVALID | _PTHREAD_MVF_STA}\n"
+ "# define PTHREAD_COND_INITIALIZER \\\n"
+ "    {_PTHREAD_CSTATE_SLOW, _PTHREAD_CVALID | _PTHREAD_CVF_STA}\n"
+ "# define PTHREAD_MUTEX_INITWITHNAME_NP(_n_,_a_) \\\n"
+ "    {_PTHREAD_MSTATE_CONFIG, _PTHREAD_MVALID | _PTHREAD_MVF_STA, _n_, _a_}\n"
+ "# define PTHREAD_COND_INITWITHNAME_NP(_n_,_a_) \\\n"
+ "    {_PTHREAD_CSTATE_SLOW, _PTHREAD_CVALID | _PTHREAD_CVF_STA, _n_, _a_}\n"
+ "#else\n"
+ "# define PTHREAD_MUTEX_INITIALIZER {0, _PTHREAD_MVALID | _PTHREAD_MVF_STA}\n"
+ "# define PTHREAD_MUTEX_INITWITHNAME_NP(_n_,_a_) \\\n"
+ "    {0, _PTHREAD_MVALID | _PTHREAD_MVF_STA, _n_, _a_}\n"
+ "# define PTHREAD_COND_INITWITHNAME_NP(_n_,_a_) \\\n"
+ "    {0, _PTHREAD_CVALID | _PTHREAD_CVF_STA, _n_, _a_}\n"
+ "#endif\n\n"
+ "#define PTHREAD_RWLOCK_INITIALIZER {_PTHREAD_RWVALID | _PTHREAD_RWVF_STA}\n"
+ "#define PTHREAD_RWLOCK_INITWITHNAME_NP(_n_,_a_) \\\n"
+ "        {_PTHREAD_RWVALID | _PTHREAD_RWVF_STA, _n_, _a_}\n";
+ };
+ 
+ /*
+  *  Fix return value of sbrk in unistd.h on Alpha OSF/1 V2.0
+  *  And OpenBSD.
+  */
+ fix = {
+     hackname = alpha_sbrk;
+     files    = unistd.h;
+     select   = "char[ \t]*\\*[\t ]*sbrk[ \t]*\\(";
+     c_fix     = format;
+     c_fix_arg = "void *sbrk(";
+     test_text = "extern char* sbrk(ptrdiff_t increment);";
+ };
+ 
+ 
+ /*
+  *  Change external names of wcstok/wcsftime via asm instead of macros on
+  *  Tru64 UNIX V4.0.
+  */
+ fix = {
+     hackname = alpha_wchar;
+     files    = wchar.h;
+ 
+     mach     = "alpha*-dec-osf4*";
+     select   = "#define wcstok wcstok_r";
+     sed      = "s@#define wcstok wcstok_r@extern wchar_t *wcstok __((wchar_t *, const wchar_t *, wchar_t **)) __asm__(\"wcstok_r\");@";
+     sed      = "s@#define wcsftime __wcsftime_isoc@extern size_t   wcsftime __((wchar_t *, size_t, const wchar_t *, const struct tm *)) __asm__(\"__wcsftime_isoc\");@";
+     test_text = "#define wcstok wcstok_r\n"
+ 		"#define wcsftime __wcsftime_isoc";
+ };
+ 
+ 
+ /*
+  *  For C++, avoid any typedef or macro definition of bool,
+  *  and use the built in type instead.
+  *  HP/UX 10.20 also has it in curses_colr/curses.h.
+  */
+ fix = {
+     hackname  = avoid_bool_define;
+     files     = curses.h;
+     files     = curses_colr/curses.h;
+     files     = term.h;
+     files     = tinfo.h;
+ 
+     select    = "#[ \t]*define[ \t]+bool[ \t]";
+     bypass    = "__cplusplus";
+ 
+     c_fix     = format;
+     c_fix_arg = "#ifndef __cplusplus\n%0\n#endif";
+     c_fix_arg = "^[ \t]*#[ \t]*define[ \t]+bool[ \t].*";
+ 
+     test_text = "# define bool\t char \n";
+ };
+ 
+ 
+ fix = {
+     hackname = avoid_bool_type;
+     files    = curses.h;
+     files    = curses_colr/curses.h;
+     files    = term.h;
+     files    = tinfo.h;
+ 
+     select    = "^[ \t]*typedef[ \t].*[ \t]bool[ \t]*;";
+     bypass    = "__cplusplus";
+ 
+     c_fix     = format;
+     c_fix_arg = "#ifndef __cplusplus\n%0\n#endif";
+ 
+     test_text = "typedef unsigned int\tbool \t; /* bool\n type */";
+ };
+ 
+ 
+ /*
+  *  For C++, avoid any typedef definition of wchar_t,
+  *  and use the built in type instead.
+  *  Don't do this for headers that are smart enough to do the right
+  *  thing (recent [n]curses.h and Xlib.h).
+  *  Don't do it for <linux/nls.h> which is never used from C++ anyway,
+  *  and will be broken by the edit.
+  */
+ 
+ fix = {
+     hackname = avoid_wchar_t_type;
+ 
+     select    = "^[ \t]*typedef[ \t].*[ \t]wchar_t[ \t]*;";
+     bypass    = "__cplusplus";
+     bypass    = "_LINUX_NLS_H";
+     bypass    = "XFree86: xc/lib/X11/Xlib\\.h";
+ 
+     c_fix     = format;
+     c_fix_arg = "#ifndef __cplusplus\n%0\n#endif";
+ 
+     test_text = "typedef unsigned short\twchar_t \t; /* wchar_t\n type */";
+ };
+ 
+ 
+ /*
+  *  Fix `typedef struct term;' on hppa1.1-hp-hpux9.
+  */
+ fix = {
+     hackname  = bad_struct_term;
+     files     = curses.h;
+     select    = "^[ \t]*typedef[ \t]+struct[ \t]+term[ \t]*;";
+     c_fix     = format;
+     c_fix_arg = "struct term;";
+ 
+     test_text = 'typedef struct term;';
+ };
+ 
+ 
+ /*
+  *  Fix one other error in this file:
+  *  a mismatched quote not inside a C comment.
+  */
+ fix = {
+     hackname  = badquote;
+     files     = sundev/vuid_event.h;
+     select    = "doesn't";
+     c_fix     = format;
+     c_fix_arg = "does not";
+ 
+     test_text = "/* doesn't have matched single quotes */";
+ };
+ 
+ 
+ /*
+  *  check for broken assert.h that needs stdio.h
+  */
+ fix = {
+     hackname  = broken_assert_stdio;
+     files     = assert.h;
+     select    = stderr;
+     bypass    = "include.*stdio\\.h";
+     c_fix     = wrap;
+     c_fix_arg = "#include <stdio.h>\n";
+     test_text = "extern FILE* stderr;";
+ };
+ 
+ 
+ /*
+  *  check for broken assert.h that needs stdlib.h
+  */
+ fix = {
+     hackname  = broken_assert_stdlib;
+     files     = assert.h;
+     select    = 'exit *\(|abort *\(';
+     bypass    = "include.*stdlib\\.h";
+     c_fix     = wrap;
+     c_fix_arg = "#ifdef __cplusplus\n"
+                 "#include <stdlib.h>\n"
+                 "#endif\n";
+     test_text = "extern void exit ( int );";
+ };
+ 
+ 
+ /*
+  *  Remove `extern double cabs' declarations from math.h.
+  *  This conflicts with C99.  Discovered on AIX.
+  *  SunOS4 has its cabs() declaration followed by a comment which
+  *  terminates on the following line.
+  *  Darwin hides its broken cabs in architecture-specific subdirs.
+  */
+ fix = {
+     hackname = broken_cabs;
+     files    = "math.h";
+     files    = "architecture/ppc/math.h";
+     files    = "architecture/i386/math.h";
+     select   = '^extern[ \t]+double[ \t]+cabs';
+ 
+     c_fix     = format;
+     c_fix_arg = "";
+     c_fix_arg = "^extern[ \t]+double[ \t]+cabs[ \t]*\\([^\\)]*\\);";
+ 
+     test_text = "#ifdef __STDC__\n"
+                 "extern     double   cabs(struct dbl_hypot);\n"
+                 "#else\n"
+                 "extern     double   cabs();\n"
+                 "#endif\n"
+                 "extern double cabs ( _Complex z );\n"
+                 "extern double cabs(); /* This is a comment\n"
+                 "                         and it ends here. */";
+ };
+ 
+ 
+ /*
+  *  Various systems derived from BSD4.4 contain a macro definition
+  *  for vfscanf that interacts badly with requirements of builtin-attrs.def.
+  *  Known to be fixed in FreeBSD 5 system headers.
+  */
+ fix = {
+     hackname  = bsd_stdio_attrs_conflict;
+     mach      = *-*-*bsd*;
+     mach      = *-*-*darwin*;
+     files     = stdio.h;
+     select    = "^#define[ \t]*vfscanf[ \t]*__svfscanf[ \t]*$";
+     c_fix     = format;
+     c_fix_arg = '#define _BSD_STRING(_BSD_X) _BSD_STRINGX(_BSD_X)' "\n"
+ 		'#define _BSD_STRINGX(_BSD_X) #_BSD_X' "\n"
+ 		'int vfscanf(FILE *, const char *, __builtin_va_list) '
+ 		'__asm__ (_BSD_STRING(__USER_LABEL_PREFIX__) "__svfscanf");';
+     test_text = '#define  vfscanf	__svfscanf';
+ };
+ 
+ 
+ /*
+  *  Fix various macros used to define ioctl numbers.
+  *  The traditional syntax was:
+  *
+  *    #define _CTRL(n, x) (('n'<<8)+x)
+  *    #define TCTRLCFOO _CTRL(T, 1)
+  *
+  *  but this does not work with the C standard, which disallows macro
+  *  expansion inside strings.  We have to rewrite it thus:
+  *
+  *    #define _CTRL(n, x) ((n<<8)+x)
+  *    #define TCTRLCFOO  _CTRL('T', 1)
+  *
+  *  The select expressions match too much, but the c_fix code is cautious.
+  *
+  *  CTRL might be: CTRL _CTRL ISCTRL BSD43_CTRL ...
+  */
+ fix = {
+     hackname  = ctrl_quotes_def;
+     select    = "define[ \t]+[A-Z0-9_]+CTRL\\([a-zA-Z][,)]";
+     c_fix     = char_macro_def;
+     c_fix_arg = "CTRL";
+ 
+     /*
+      *  This is two tests in order to ensure that the "CTRL(c)" can
+      *  be selected in isolation from the multi-arg format
+      */
+     test_text = "#define BSD43_CTRL(n, x) (('n'<<8)+x)\n";
+     test_text = "#define _CTRL(c) ('c'&037)";
+ };
+ 
+ fix = {
+     hackname  = ctrl_quotes_use;
+     select    = "define[ \t]+[A-Z0-9_]+[ \t]+[A-Z0-9_]+CTRL[ \t]*\\( *[^,']";
+     c_fix     = char_macro_use;
+     c_fix_arg = "CTRL";
+     test_text = "#define TCTRLFOO BSD43_CTRL(T, 1)";
+ };
+ 
+ 
+ /*
+  *  sys/mman.h on HP/UX is not C++ ready,
+  *  even though NO_IMPLICIT_EXTERN_C is defined on HP/UX.
+  *
+  *  rpc/types.h on OSF1/2.0 is not C++ ready,
+  *  even though NO_IMPLICIT_EXTERN_C is defined for the alpha.
+  *
+  *  The problem is the declaration of malloc.
+  */
+ fix = {
+     hackname = cxx_unready;
+     files    = sys/mman.h;
+     files    = rpc/types.h;
+     select   = '[^#]+malloc.*;';  /* Catch any form of declaration
+ 				     not within a macro.  */
+     bypass   = '"C"|__BEGIN_DECLS';
+ 
+     c_fix     = wrap;
+     c_fix_arg = "#ifdef __cplusplus\n"
+                 "extern \"C\" {\n"
+                 "#endif\n";
+     c_fix_arg = "#ifdef __cplusplus\n"
+                 "}\n"
+                 "#endif\n";
+     test_text = "extern void* malloc( size_t );";
+ };
+ 
+ 
+ /*
+  * AvailabilityMacros.h on Darwin breaks with GCC 4.0, because of
+  * bad __GNUC__ tests.
+  */
+ 
+ fix = {
+   hackname  = darwin_gcc4_breakage;
+   mach      = "*-*-darwin*";
+   files     = AvailabilityMacros.h;
+   select    = "\\(__GNUC__ >= 3\\) && \\(__GNUC_MINOR__ >= 1\\)";
+   c_fix     = format;
+   c_fix_arg = "((__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))";
+   test_text = "#if defined(__GNUC__) && (__GNUC__ >= 3) && "
+   	      "(__GNUC_MINOR__ >= 1)\n";
+ };
+ 
+ 
+ /*
+  *  __private_extern__ doesn't exist in FSF GCC.  Even if it did,
+  *  why would you ever put it in a system header file?
+  */
+ fix = {
+   hackname  = darwin_private_extern;
+   mach      = "*-*-darwin*";
+   files     = mach-o/dyld.h;
+   select    = "__private_extern__ [a-z_]+ _dyld_";
+   c_fix     = format;
+   c_fix_arg = "extern";
+   c_fix_arg = "__private_extern__";
+   test_text = "__private_extern__ int _dyld_func_lookup(\n"
+ 	      "const char *dyld_func_name,\n"
+ 	      "unsigned long *address);\n";
+ };
+ 
+ 
+ /*
+  *  Fix <c_asm.h> on Digital UNIX V4.0:
+  *  It contains a prototype for a DEC C internal asm() function,
+  *  clashing with gcc's asm keyword.  So protect this with __DECC.
+  */
+ fix = {
+     hackname = dec_intern_asm;
+     files    = c_asm.h;
+     sed = "/^[ \t]*float[ \t]*fasm/i\\\n#ifdef __DECC\n";
+     sed = "/^[ \t]*#[ \t]*pragma[ \t]*intrinsic([ \t]*dasm/a\\\n"
+           "#endif\n";
+     test_text =
+     "float fasm {\n"
+     "    ... asm stuff ...\n"
+     "};\n#pragma intrinsic( dasm )\n/* END ASM TEST*/";
+ };
+ 
+ 
+ /*
+  * Fix typo in <wchar.h> on DJGPP 2.03.
+  */
+ fix = {
+     hackname  = djgpp_wchar_h;
+     file      = wchar.h;
+     select    = "__DJ_wint_t";
+     bypass    = "sys/djtypes.h";
+     c_fix     = format;
+     c_fix_arg = "%0\n#include <sys/djtypes.h>";
+     c_fix_arg = "#include <stddef.h>";
+     test_text = "#include <stddef.h>\n"
+                 "extern __DJ_wint_t x;\n";
+ };
+ 
+ 
+ /*
+  * Fix these Sun OS files to avoid an invalid identifier in an #ifdef.
+  */
+ fix = {
+     hackname  = ecd_cursor;
+     files     = "sunwindow/win_lock.h";
+     files     = "sunwindow/win_cursor.h";
+     select    = 'ecd\.cursor';
+     c_fix     = format;
+     c_fix_arg = 'ecd_cursor';
+ 
+     test_text = "#ifdef ecd.cursor\n#error bogus\n#endif /* ecd+cursor */";
+ };
+ 
+ 
+ /*
+  *  math.h on SunOS 4 puts the declaration of matherr before the definition
+  *  of struct exception, so the prototype (added by fixproto) causes havoc.
+  *  This must appear before the math_exception fix.
+  */
+ fix = {
+     hackname  = exception_structure;
+     files     = math.h;
+ 
+     /*  If matherr has a prototype already, the header needs no fix.  */
+     bypass    = 'matherr.*(struct exception|__MATH_EXCEPTION|[ \t]*__FP_EXCEPTION[ \t]*\*[ \t]*)';
+     select    = matherr;
+ 
+     c_fix     = wrap;
+     c_fix_arg = "struct exception;\n";
+ 
+     test_text = "extern int matherr();";
+ };
+ 
+ 
+ /*
+  *  Between 8/24/1998 and 2/17/2001, FreeBSD system headers presume
+  *  neither the existence of GCC 3 nor its exact feature set yet break
+  *  (by design?) when __GNUC__ is set beyond 2.
+  */
+ fix = {
+     hackname  = freebsd_gcc3_breakage;
+     mach      = *-*-freebsd*;
+     files     = sys/cdefs.h;
+     select    = '^#if __GNUC__ == 2 && __GNUC_MINOR__ >= 7$';
+     bypass    = '__GNUC__[ \t]*([>=]=[ \t]*[3-9]|>[ \t]*2)';
+     c_fix     = format;
+     c_fix_arg = '%0 || __GNUC__ >= 3';
+     test_text = '#if __GNUC__ == 2 && __GNUC_MINOR__ >= 7';
+ };
+ 
+ 
+ /*
+  *  Some releases of FreeBSD 4 and FreeBSD 5.0 and 5.1 system headers presume
+  *  neither the existence of GCC 4 nor its exact feature set yet break
+  *  (by design?) when __GNUC__ is set beyond 3.
+  */
+ fix = {
+     hackname  = freebsd_gcc4_breakage;
+     mach      = *-*-freebsd*; 
+     files     = sys/cdefs.h;
+     select    = '^#if __GNUC__ == 2 && __GNUC_MINOR__ >= 7 \|\| __GNUC__ == 3$';
+     c_fix     = format;
+     c_fix_arg = '#if __GNUC__ == 2 && __GNUC_MINOR__ >= 7 || __GNUC__ >= 3';
+     test_text = '#if __GNUC__ == 2 && __GNUC_MINOR__ >= 7 || __GNUC__ == 3';
+ };
+ 
+ 
+ /*
+  * Fix these files to use the types we think they should for
+  * ptrdiff_t, size_t, and wchar_t.
+  *
+  * This defines the types in terms of macros predefined by our 'cpp'.
+  * This is supposedly necessary for glibc's handling of these types.
+  * It's probably not necessary for anyone else, but it doesn't hurt.
+  */
+ fix = {
+     hackname  = gnu_types;
+     files  = "sys/types.h";
+     files  = "stdlib.h";
+     files  = "sys/stdtypes.h";
+     files  = "stddef.h";
+     files  = "memory.h";
+     files  = "unistd.h";
+     bypass    = '_GCC_(PTRDIFF|SIZE|WCHAR)_T';
+     select    = "^[ \t]*typedef[ \t]+.*[ \t](ptrdiff|size|wchar)_t;";
+     c_fix     = gnu_type;
+     /* The Solaris 10 headers already define these types correctly.  */
+     mach   = '*-*-solaris2.1[0-9]*';
+     not_machine = true;
+ 
+     test_text = "typedef long int ptrdiff_t; /* long int */\n"
+                 "typedef uint_t size_t; /* uint_t */\n"
+                 "typedef ushort_t wchar_t; /* ushort_t */";
+ };
+ 
+ 
+ /*
+  *  Fix HP & Sony's use of "../machine/xxx.h"
+  *  to refer to:  <machine/xxx.h>
+  */
+ fix = {
+     hackname  = hp_inline;
+     files     = sys/spinlock.h;
+     files     = machine/machparam.h;
+     select    = "[ \t]*#[ \t]*include[ \t]+"  '"\.\./machine/';
+ 
+     c_fix     = format;
+     c_fix_arg = "%1<machine/%2.h>";
+ 
+     c_fix_arg = "([ \t]*#[ \t]*include[ \t]+)"  '"\.\./machine/'
+                 '([a-z]+)\.h"';
+ 
+     test_text = ' # include "../machine/mumble.h"';
+ };
+ 
+ 
+ /*
+  *  Check for (...) in C++ code in HP/UX sys/file.h.
+  */
+ fix = {
+     hackname  = hp_sysfile;
+     files     = sys/file.h;
+     select    = "HPUX_SOURCE";
+ 
+     c_fix     = format;
+     c_fix_arg = "(struct file *, ...)";
+     c_fix_arg = '\(\.\.\.\)';
+ 
+     test_text = "extern void foo(...); /* HPUX_SOURCE - bad varargs */";
+ };
+ 
+ 
+ /*
+  * Delete C++ double pow (double, int) inline function from HP-UX 10 & 11
+  * math.h to prevent clash with define in c_std/bits/std_cmath.h.
+  */
+ fix = {
+     hackname  = hpux10_cpp_pow_inline;
+     files     = fixinc-test-limits.h, math.h;
+     select    = <<-	END_POW_INLINE
+ 	^# +ifdef +__cplusplus
+ 	 +\}
+ 	 +inline +double +pow\(double +__d,int +__expon\) +\{
+ 	[ 	]+return +pow\(__d,\(double\)__expon\);
+ 	 +\}
+ 	 +extern +"C" +\{
+ 	#else
+ 	# +endif
+ 	END_POW_INLINE;
+  
+     c_fix     = format;
+     c_fix_arg = "";
+ 
+     test_text =
+ 	"#    ifdef __cplusplus\n"
+ 	"     }\n"
+ 	"     inline double pow(double __d,int __expon) {\n"
+ 	"\t return pow(__d,(double)__expon);\n"
+ 	"     }\n"
+ 	'     extern "C"' " {\n"
+ 	"#else\n"
+ 	"#    endif";
+ };
+ 
+ fix = {
+      hackname  = hpux11_cpp_pow_inline;
+      files     = math.h;
+      select    = " +inline double pow\\(double d,int expon\\) \\{\n"
+                  " +return pow\\(d, \\(double\\)expon\\);\n"
+                  " +\\}\n";
+      c_fix     = format;
+      c_fix_arg = "";
+ 
+      test_text =
+             "   inline double pow(double d,int expon) {\n"
+             "     return pow(d, (double)expon);\n"
+             "   }\n";
+ };
+ 
+ 
+ /*
+  *  Fix hpux 10.X missing ctype declarations 1
+  */
+ fix = {
+     hackname = hpux10_ctype_declarations1;
+     files    = ctype.h;
+     select   = "^#[ \t]*define _toupper\\(__c\\)[ \t]*__toupper\\(__c\\)";
+     bypass   = "^[ \t]*extern[ \t]*int[ \t]*__tolower[ \t]*\\(";
+     c_fix     = format;
+     c_fix_arg = "#ifdef _PROTOTYPES\n"
+ 		"extern int __tolower(int);\n"
+ 		"extern int __toupper(int);\n"
+ 		"#else /* NOT _PROTOTYPES */\n"
+ 		"extern int __tolower();\n"
+ 		"extern int __toupper();\n"
+ 		"#endif /* _PROTOTYPES */\n\n"
+ 		"%0\n";
+ 
+     test_text = "#  define _toupper(__c)         __toupper(__c)\n";
+ };
+ 
+ 
+ /*
+  *  Fix hpux 10.X missing ctype declarations 2
+  */
+ fix = {
+     hackname = hpux10_ctype_declarations2;
+     files    = ctype.h;
+     select   = "^#  if defined\\(_SB_CTYPE_MACROS\\) && \\!defined\\(__lint\\)";
+     bypass   = "^[ \t]*extern[ \t]*int[ \t]*_isalnum[ \t]*\\(";
+     c_fix     = format;
+     c_fix_arg = "%0\n\n"
+ 		"#ifdef _PROTOTYPES\n"
+ 		"     extern int _isalnum(int);\n"
+ 		"     extern int _isalpha(int);\n"
+ 		"     extern int _iscntrl(int);\n"
+ 		"     extern int _isdigit(int);\n"
+ 		"     extern int _isgraph(int);\n"
+ 		"     extern int _islower(int);\n"
+ 		"     extern int _isprint(int);\n"
+ 		"     extern int _ispunct(int);\n"
+ 		"     extern int _isspace(int);\n"
+ 		"     extern int _isupper(int);\n"
+ 		"     extern int _isxdigit(int);\n"
+ 		"#  else /* not _PROTOTYPES */\n"
+ 		"     extern int _isalnum();\n"
+ 		"     extern int _isalpha();\n"
+ 		"     extern int _iscntrl();\n"
+ 		"     extern int _isdigit();\n"
+ 		"     extern int _isgraph();\n"
+ 		"     extern int _islower();\n"
+ 		"     extern int _isprint();\n"
+ 		"     extern int _ispunct();\n"
+ 		"     extern int _isspace();\n"
+ 		"     extern int _isupper();\n"
+ 		"     extern int _isxdigit();\n"
+ 		"#endif /* _PROTOTYPES */\n";
+ 
+     test_text = "#  if defined(_SB_CTYPE_MACROS) && !defined(__lint)\n"
+ 		"     extern unsigned int *__SB_masks;\n";
+ };
+ 
+ 
+ /*
+  *  Fix hpux 10.X missing stdio declarations
+  */
+ fix = {
+     hackname = hpux10_stdio_declarations;
+     files    = stdio.h;
+     select   = "^#[ \t]*define _iob[ \t]*__iob";
+     bypass   = "^[ \t]*extern[ \t]*int[ \t]*vsnprintf[ \t]*\\(";
+     c_fix     = format;
+     c_fix_arg = "%0\n\n"
+ 	"#  if defined(__STDC__) || defined(__cplusplus)\n"
+ 	"     extern int snprintf(char *, size_t, const char *, ...);\n"
+ 	"     extern int vsnprintf(char *, size_t, const char *, __va_list);\n"
+ 	"#  else /* not __STDC__) || __cplusplus */\n"
+ 	"     extern int snprintf();\n"
+ 	"     extern int vsnprintf();\n"
+ 	"#  endif /* __STDC__) || __cplusplus */\n";
+ 
+     test_text = "#  define _iob __iob\n";
+ };
+ 
+ 
+ /*
+  *  Make sure hpux defines abs in header.
+  */
+ fix = {
+     hackname  = hpux11_abs;
+     mach      = ia64-hp-hpux11*;
+     files     = stdlib.h;
+     select    = "ifndef _MATH_INCLUDED";
+     c_fix     = format;
+     c_fix_arg = "if !defined(_MATH_INCLUDED) || defined(__GNUG__)";
+ //  sed       = "s/ifndef _MATH_INCLUDED/if !defined(_MATH_INCLUDED) || defined(__GNUG__)/";
+     test_text = "#ifndef _MATH_INCLUDED";
+ };
+ 
+ 
+ /*
+  *  Keep HP-UX 11 from stomping on C++ math namespace
+  *  with defines for fabsf.
+  */
+ fix = {
+     hackname  = hpux11_fabsf;
+     files     = math.h;
+     select    = "^[ \t]*#[ \t]*define[ \t]+fabsf\\(.*";
+     bypass    = "__cplusplus";
+ 
+     c_fix     = format;
+     c_fix_arg = "#ifndef __cplusplus\n%0\n#endif";
+ 
+     test_text =
+     "#ifdef _PA_RISC\n"
+     "#  define fabsf(x) ((float)fabs((double)(float)(x)))\n"
+     "#endif";
+ };
+ 
+ 
+ /*
+  * Prevent HP-UX 11 from defining __size_t and preventing size_t from
+  * being defined by having it define _hpux_size_t instead.
+  */
+ fix = {
+     hackname  = hpux11_size_t;
+     mach      = "*-hp-hpux11*";
+     select    = "__size_t";
+ 
+     c_fix     = format;
+     c_fix_arg = "_hpux_size_t";
+ 
+     test_text =
+     "#define __size_t size_t\n"
+     "       extern int getpwuid_r( char *, __size_t, struct passwd **);\n";
+ };
+ 
+ 
+ /*
+  *  Fix hpux 11.00 broken snprintf declaration
+  *  (third argument is char *, needs to be const char * to prevent
+  *  spurious warnings with -Wwrite-strings or in C++).
+  */
+ fix = {
+     hackname = hpux11_snprintf;
+     files    = stdio.h;
+     select   = '(extern int snprintf *\(char *\*, *(|__|_hpux_)size_t,)'
+                                     ' *(char *\*, *\.\.\.\);)';
+     c_fix     = format;
+     c_fix_arg = '%1 const %3';
+ 
+     test_text = "extern int snprintf(char *, size_t, char *, ...);\n"
+                 "extern int snprintf(char *, __size_t, char *, ...);\n"
+                 "extern int snprintf(char *, _hpux_size_t, char *, ...);";
+ };
+ 
+ 
+ /*
+  * In inttypes.h on HPUX 11, the use of __CONCAT__ in the definition
+  * of UINT32_C has undefined behavior according to ISO/ANSI:
+  * the arguments to __CONCAT__ are not macro expanded before the
+  * concatination happens so the trailing ')' in the first argument
+  * is concatinated with the 'l' in the second argument creating an
+  * invalid pp token.  The behavior of invalid pp tokens is undefined.
+  * GCC does not handle these invalid tokens the way the HP compiler does.
+  * This problem will potentially occur anytime macros are used in the
+  * arguments to __CONCAT__.  A general solution to this problem would be to
+  * insert another layer of macro between __CONCAT__ and its use
+  * in UINT32_C.  An example of this solution can be found in the C standard.
+  * A more specific solution, the one used here, is to change the UINT32_C
+  * macro to not used macros in the arguments to __CONCAT__.
+  */
+ fix = {
+     hackname = hpux11_uint32_c;
+     files    = inttypes.h;
+     select   = "^#define UINT32_C\\(__c\\)[ \t]*"
+                          "__CONCAT__\\(__CONCAT_U__\\(__c\\),l\\)";
+     c_fix    = format;
+     c_fix_arg = '#define UINT32_C(__c) __CONCAT__(__c,ul)';
+     test_text =
+     "#define CONCAT_U__(__c)\t__CONCAT__(__c,u)\n"
+     "#define UINT32_C(__c)\t__CONCAT__(__CONCAT_U__(__c),l)";
+ };
+ 
+ 
+ /*
+  *  Fix hpux 11.00 broken vsnprintf declaration
+  */
+ fix = {
+     hackname = hpux11_vsnprintf;
+     files    = stdio.h;
+     select   = '(extern int vsnprintf\(char \*, _[hpux]*_size_t, '
+                                      'const char \*,) __va__list\);';
+     c_fix     = format;
+     c_fix_arg = "%1 __va_list);";
+ 
+     test_text = 'extern int vsnprintf(char *, _hpux_size_t, const char *,'
+                                      ' __va__list);';
+ };
+ 
+ 
+ /*
+  *  get rid of bogus inline definitions in HP-UX 8.0
+  */
+ fix = {
+     hackname = hpux8_bogus_inlines;
+     files    = math.h;
+     select   = inline;
+     bypass   = "__GNUG__";
+     sed = "s@inline int abs(int [a-z][a-z]*) {.*}"
+            "@extern \"C\" int abs(int);@";
+     sed = "s@inline double abs(double [a-z][a-z]*) {.*}@@";
+     sed = "s@inline int sqr(int [a-z][a-z]*) {.*}@@";
+     sed = "s@inline double sqr(double [a-z][a-z]*) {.*}@@";
+     test_text = "inline int abs(int v) { return (v>=0)?v:-v; }\n"
+                 "inline double sqr(double v) { return v**0.5; }";
+ };
+ 
+ 
+ /*
+  *  Fix hpux broken ctype macros
+  */
+ fix = {
+     hackname = hpux_ctype_macros;
+     files    = ctype.h;
+     select   = '((: |\()__SB_masks \? )'
+ 	       '(__SB_masks\[__(alnum|c)\] & _IS)';
+     c_fix     = format;
+     c_fix_arg = "%1(int)%3";
+ 
+     test_text = ": __SB_masks ? __SB_masks[__alnum] & _ISCNTRL\n"
+ 		"# define isalpha(__c) (__SB_masks ? __SB_masks[__c] & _IS\n";
+ };
+ 
+ 
+ /*
+  *  Fix hpux broken #ifndef _XOPEN_SOURCE_EXTENDED conditional on htonl etc.
+  */
+ fix = {
+     hackname = hpux_htonl;
+     files    = netinet/in.h;
+     select   = "#ifndef _XOPEN_SOURCE_EXTENDED\n"
+                "(/\\*\n"
+                " \\* Macros for number representation conversion\\.\n"
+                " \\*/\n"
+                "#ifndef ntohl)";
+     c_fix     = format;
+     c_fix_arg = "#if 1\n%1";
+ 
+     test_text = "#ifndef _XOPEN_SOURCE_EXTENDED\n"
+                 "/*\n"
+                 " * Macros for number representation conversion.\n"
+                 " */\n"
+                 "#ifndef ntohl\n"
+                 "#define ntohl(x)        (x)\n"
+                 "#define ntohs(x)        (x)\n"
+                 "#define htonl(x)        (x)\n"
+                 "#define htons(x)        (x)\n"
+                 "#endif\n"
+                 "#endif  /* ! _XOPEN_SOURCE_EXTENDED */";
+ };
+ 
+ 
+ /*
+  * HP-UX long_double
+  */
+ fix = {
+     hackname  = hpux_long_double;
+     files     = stdlib.h;
+     select    = "extern[ \t]long_double[ \t]strtold";
+     bypass    = "long_double_t";
+     sed       = "/^#[ \t]*ifndef _LONG_DOUBLE/,/\\/\\* _LONG_DOUBLE \\*\\//D";
+     sed       = "s/long_double/long double/g";
+ 
+     test_text = "#  ifndef _LONG_DOUBLE\n"
+ 		"#    define _LONG_DOUBLE\n"
+ 		"     typedef struct {\n"
+ 		"       unsigned int word1, word2, word3, word4;\n"
+ 		"     } long_double;\n"
+ 		"#  endif /* _LONG_DOUBLE */\n"
+ 		"extern long_double strtold(const char *, char **);\n";
+ };
+ 
+ 
+ /*
+  *  Fix hpux10.20 <sys/time.h> to avoid invalid forward decl
+  */
+ fix = {
+     hackname = hpux_systime;
+     files    = sys/time.h;
+     select   = "^extern struct sigevent;";
+ 
+     c_fix     = format;
+     c_fix_arg = "struct sigevent;";
+ 
+     test_text = 'extern struct sigevent;';
+ };
+ 
+ 
+ /*
+  *  Fix return type of abort and free
+  */
+ fix = {
+     hackname  = int_abort_free_and_exit;
+     files     = stdlib.h;
+     select    = "int[ \t]+(abort|free|exit)[ \t]*\\(";
+     bypass    = "_CLASSIC_ANSI_TYPES";
+ 
+     c_fix     = format;
+     c_fix_arg = "void\t%1(";
+ 
+     test_text = "extern int abort(int);\n"
+                 "extern int free(void*);\n"
+                 "extern int exit(void*);";
+ };
+ 
+ 
+ /*
+  *  Fix various macros used to define ioctl numbers.
+  *  The traditional syntax was:
+  *
+  *    #define _IO(n, x) (('n'<<8)+x)
+  *    #define TIOCFOO _IO(T, 1)
+  *
+  *  but this does not work with the C standard, which disallows macro
+  *  expansion inside strings.  We have to rewrite it thus:
+  *
+  *    #define _IO(n, x) ((n<<8)+x)
+  *    #define TIOCFOO  _IO('T', 1)
+  *
+  *  The select expressions match too much, but the c_fix code is cautious.
+  *
+  *  _IO might be: _IO DESIO BSD43__IO with W, R, WR, C, ... suffixes.
+  */
+ fix = {
+     hackname  = io_quotes_def;
+     select    = "define[ \t]+[A-Z0-9_]+IO[A-Z]*\\([a-zA-Z][,)]";
+     c_fix     = char_macro_def;
+     c_fix_arg = "IO";
+     test_text =
+     "#define BSD43__IOWR(n, x) (('n'<<8)+x)\n"
+     "#define _IOWN(x,y,t)  (_IOC_IN|(((t)&_IOCPARM_MASK)<<16)|('x'<<8)|y)\n"
+     "#define _IO(x,y)      ('x'<<8|y)";
+     test_text =
+     "#define XX_IO(x)        ('x'<<8|256)";
+ };
+ 
+ fix = {
+     hackname  = io_quotes_use;
+     select    = "define[ \t]+[A-Z0-9_]+[ \t]+[A-Z0-9_]+IO[A-Z]*[ \t]*"
+                 "\\( *[^,']";
+     c_fix     = char_macro_use;
+     c_fix_arg = "IO";
+     test_text = "#define TIOCFOO BSD43__IOWR(T, 1)\n"
+                 "#define TIOCFOO \\\\\n"
+                 "BSD43__IOWR(T, 1) /* Some are multi-line */";
+ };
+ 
+ 
+ /*
+  *  Check for missing ';' in struct
+  */
+ fix = {
+     hackname = ip_missing_semi;
+     files    = netinet/ip.h;
+     select   = "}$";
+     sed      = "/^struct/,/^};/s/}$/};/";
+     test_text=
+     "struct mumble {\n"
+     "  union {\n"
+     "    int x;\n"
+     "  }\n"
+     "}; /* mumbled struct */\n";
+ };
+ 
+ 
+ /*
+  *  IRIX 6.5.1[89] <internal/sgimacros.h> unconditionally defines
+  *  __restrict as restrict iff __c99.  This is wrong for C++, which
+  *  needs many C99 features, but only supports __restrict.
+  */
+ fix = {
+     hackname  = irix___restrict;
+     files     = internal/sgimacros.h;
+     select    = "(#ifdef __c99\n)(#[ \t]*define __restrict restrict)";
+ 
+     mach      = "mips-sgi-irix6.5";
+     c_fix     = format;
+     c_fix_arg = "%1"
+ 		"#  ifndef __cplusplus\n%2\n#  endif";
+ 
+     test_text = "#ifdef __c99\n#  define __restrict restrict";
+ };
+ 
+ /*
+  * IRIX 6.5.22 <internal/math_core.h> uses the SGI c99 __generic() intrinsic
+  * to define the fpclasify, isfinite, isinf, isnan, isnormal and signbit 
+  * functions.
+  *
+  * This was probably introduced around IRIX 6.5.18
+  */
+ fix = {
+     hackname  = irix___generic1;
+     files     = internal/math_core.h;
+     mach      = "mips-sgi-irix6.5";
+     select    = "#define ([a-z]+)\\(x\\) *__generic.*";
+ 
+     c_fix     = format;
+     c_fix_arg = "extern int %1(double);\n"
+ 		"extern int %1f(float);\n"
+ 		"extern int %1l(long double);\n"
+ 		"#define %1(x) (sizeof(x) == sizeof(double) ? _%1(x) \\\n"
+ 		"               : sizeof(x) == sizeof(float) ? _%1f(x) \\\n"
+ 		"               : _%1l(x))\n";
+ 
+     test_text = 
+       "#define isnan(x) __generic(x,,, _isnan, _isnanf, _isnanl,,,)(x)\n";
+ };
+ 
+ 
+ /* Likewise <internal/math_core.h> on IRIX 6.5.19 and later uses the SGI
+    compiler's __generic intrinsic to define isgreater, isgreaterequal,
+    isless, islessequal, islessgreater and isunordered functions.  */
+ fix = {
+     hackname  = irix___generic2;
+     files     = internal/math_core.h;
+     mach      = "mips-sgi-irix6.5";
+     select    = "#define ([a-z]+)\\(x,y\\) *__generic.*";
+ 
+     c_fix     = format;
+     c_fix_arg = "#define %1(x,y) \\\n"
+ 		"  ((sizeof(x)<=4 && sizeof(y)<=4) ? _%1f(x,y) \\\n"
+ 		"   : (sizeof(x)<=8 && sizeof(y)<=8) ? _%1(x,y) \\\n"
+ 		"   : _%1l(x,y))\n";
+ 
+     test_text = 
+       "#define isless(x,y)         __generic(x,y,, _isless, _islessf, _islessl,,,)(x,y)";
+ };
+ 
+ 
+ /*
+  *  IRIX 5.2's <sys/asm.h> contains an asm comment with a contraction
+  *  that causes the assembly preprocessor to complain about an
+  *  unterminated character constant.
+  */
+ fix = {
+     hackname  = irix_asm_apostrophe;
+     files     = sys/asm.h;
+ 
+     select    = "^[ \t]*#.*[Ww]e're";
+     c_fix     = format;
+     c_fix_arg = "%1 are";
+     c_fix_arg = "^([ \t]*#.*[Ww]e)'re";
+     test_text = "\t# and we're on vacation";
+ };
+ 
+ 
+ /*
+  *  Non-traditional "const" declaration in Irix's limits.h.
+  */
+ fix = {
+     hackname    = irix_limits_const;
+     files       = fixinc-test-limits.h, limits.h;
+     select      = "^extern const ";
+     c_fix       = format;
+     c_fix_arg   = "extern __const ";
+     test_text   = "extern const char limit; /* test limits */";
+ };
+ 
+ 
+ /*
+  *  IRIX 6.5.1[78] <sys/socket.h> has a broken definition of socklen_t.
+  *  Various socket function prototypes use different types instead,
+  *  depending on the API in use (BSD, XPG4/5), but the socklen_t
+  *  definition doesn't reflect this (SGI Bug Id 864477, fixed in
+  *  IRIX 6.5.19).
+  */
+ fix = {
+     hackname  = irix_socklen_t;
+     files     = sys/socket.h;
+     select    = "(#define _SOCKLEN_T\n)(typedef u_int32_t socklen_t;)";
+ 
+     mach      = "mips-sgi-irix6.5";
+     c_fix     = format;
+     c_fix_arg = "%1"
+     		"#if _NO_XOPEN4 && _NO_XOPEN5\n"
+     		"typedef int socklen_t;\n"
+ 		"#else\n"
+     		"%2\n"
+     		"#endif /* _NO_XOPEN4 && _NO_XOPEN5 */";
+ 
+     test_text = "#define _SOCKLEN_T\ntypedef u_int32_t socklen_t;";
+ };
+ 
+ /*
+  *  IRIX 5.x's stdio.h and IRIX 6.5's internal/stdio_core.h declare
+  *  some functions that take a va_list as
+  *  taking char *.  However, GCC uses void * for va_list, so
+  *  calling vfprintf with a va_list fails in C++.  */
+ fix = {
+     hackname  = irix_stdio_va_list;
+     files     = stdio.h;
+     files     = internal/stdio_core.h;
+ 
+     select = '/\* va_list \*/ char \*';
+     c_fix  = format;
+     c_fix_arg = "__gnuc_va_list";
+     test_text =
+     "extern int printf( const char *, /* va_list */ char * );";
+ };
+ 
+ 
+ /*
+  *  IRIX 6.5.19 <internal/wchar_core.h> provides the XPG4 variant of
+  *  wcsftime by default.  ISO C99 requires the XPG5 variant instead.
+  */
+ fix = {
+     hackname  = irix_wcsftime;
+     files     = internal/wchar_core.h;
+     select    = "#if _NO_XOPEN5\n(extern size_t[ \t]+wcsftime.*const char \*.*)";
+ 
+     mach      = "mips-sgi-irix6.5";
+     c_fix     = format;
+     c_fix_arg = "#if _NO_XOPEN5 && !defined(__c99)\n%1";
+ 
+     test_text = "#if _NO_XOPEN5\n"
+ 		"extern size_t          wcsftime(wchar_t *, __SGI_LIBC_NAMESPACE_QUALIFIER size_t, const char *, const struct tm *);";
+ };
+ 
+ /*
+  * Fixing ISC fmod declaration
+  */
+ fix = {
+     hackname  = isc_fmod;
+     files     = math.h;
+     select    = 'fmod\(double\)';
+     c_fix     = format;
+     c_fix_arg = "fmod(double, double)";
+     test_text = "extern double	fmod(double);";
+ };
+ 
+ 
+ /*
+  *  On Interactive Unix 2.2, certain traditional Unix definitions
+  *  (notably getc and putc in stdio.h) are omitted if __STDC__ is
+  *  defined, not just if _POSIX_SOURCE is defined.  This makes it
+  *  impossible to compile any nontrivial program except with -posix.
+  */
+ fix = {
+     hackname = isc_omits_with_stdc;
+ 
+     files     = "stdio.h";
+     files     = "math.h";
+     files     = "ctype.h";
+     files     = "sys/limits.h";
+     files     = "sys/fcntl.h";
+     files     = "sys/dirent.h";
+ 
+     select    = '!defined\(__STDC__\) && !defined\(_POSIX_SOURCE\)';
+     c_fix     = format;
+     c_fix_arg = '!defined(_POSIX_SOURCE)';
+     test_text = "#if !defined(__STDC__) && !defined(_POSIX_SOURCE) /* ? ! */"
+                 "\nint foo;\n#endif";
+ };
+ 
+ 
+ /*
+  * These files in Sun OS 4.x and ARM/RISCiX and BSD4.3
+  * use / * * / to concatenate tokens.
+  */
+ fix = {
+     hackname = kandr_concat;
+     files  = "sparc/asm_linkage.h";
+     files  = "sun3/asm_linkage.h";
+     files  = "sun3x/asm_linkage.h";
+     files  = "sun4/asm_linkage.h";
+     files  = "sun4c/asm_linkage.h";
+     files  = "sun4m/asm_linkage.h";
+     files  = "sun4c/debug/asm_linkage.h";
+     files  = "sun4m/debug/asm_linkage.h";
+     files  = "arm/as_support.h";
+     files  = "arm/mc_type.h";
+     files  = "arm/xcb.h";
+     files  = "dev/chardefmac.h";
+     files  = "dev/ps_irq.h";
+     files  = "dev/screen.h";
+     files  = "dev/scsi.h";
+     files  = "sys/tty.h";
+     files  = "Xm.acorn/XmP.h";
+     files  = bsd43/bsd43_.h;
+     select = '/\*\*/';
+     c_fix     = format;
+     c_fix_arg = '##';
+     test_text = "#define __CONCAT__(a,b) a/**/b";
+ };
+ 
+ 
+ /*
+  *  Fix libc1 _G_va_list definition, used in declarations of several
+  *  more-or-less standard functions, for example vasprintf.
+  */
+ fix = {
+     hackname = libc1_G_va_list;
+     files    = _G_config.h;
+     mach     = '*-*-linux*libc1';
+     select   = 'typedef void \* _G_va_list;';
+     c_fix     = format;
+     c_fix_arg = "typedef __builtin_va_list _G_va_list;";
+     test_text = 'typedef void * _G_va_list;';
+ };
+ 
+ 
+ /*
+  *  GNU libc1 string.h does not prototype memcpy and memcmp for gcc
+  *  versions > 1.  This fix will open up the declaration for all
+  *  versions of GCC and for g++.
+  */
+ fix = {
+     hackname  = libc1_ifdefd_memx;
+ 
+     /* The string.h result is overwritten by AAB_ultrix_string when doing
+        "make check" and will fail.  Therefore, we add the following kludgery
+        to insert the test_text into the special testing header.  :-}  */
+     files     = testing.h;
+     files     = string.h;
+ 
+     c_fix     = format;
+     select    = "' is a built-in function for gcc 2\\.x\\. \\*/";
+     bypass    = __cplusplus;
+     c_fix_arg = "%1";
+     c_fix_arg =
+        '/\* `mem...\' is a built-in function for gcc 2\.x\. \*/' "\n"
+        '#if defined\(__STDC__\) && __GNUC__ < 2'                 "\n"
+        "(/\\* .* \\*/\n"
+        "extern [a-z_]+ mem.*(\n[^#].*)*;)\n"
+        "#endif";
+ 
+     test_text =
+     "/* \\`memcpy' is a built-in function for gcc 2.x. */\n"
+     "#if defined(__STDC__) && __GNUC__ < 2\n"
+     "/* Copy N bytes of SRC to DEST.  */\n"
+     "extern __ptr_t memcpy __P ((__ptr_t __dest, __const __ptr_t __src,\n"
+     "                         size_t __n));\n"
+     "#endif";
+ };
+ 
+ 
+ /* The /usr/include/sys/ucontext.h on ia64-*linux-gnu systems defines
+  * an _SC_GR0_OFFSET macro using an idiom that isn't a compile time
+  * constant on recent versions of g++.
+  */
+ fix = {
+     hackname = linux_ia64_ucontext;
+     files = "sys/ucontext.h";
+     mach = "ia64-*-linux*";
+     select = '\(\(\(char \*\) &\(\(struct sigcontext \*\) 0\)'
+              '->sc_gr\[0\]\) - \(char \*\) 0\)';
+     c_fix = format;
+     c_fix_arg = "__builtin_offsetof \(struct sigcontext, sc_gr[0]\)";
+     test_text = "# define _SC_GR0_OFFSET\t\\\\\n"
+ 	"\t(((char *) &((struct sigcontext *) 0)->sc_gr[0]) - (char *) 0)\n";
+ };
+ 
+ 
+ /*
+  * Apparently some SVR4 systems typedef longlong_t to long ?
+  */
+ #ifdef SVR4
+ fix = {
+     hackname  = longlong_t;
+     select    = "typedef[ \t]+(unsigned[ \t]+)?long[ \t]+(u_)?longlong_t";
+     c_fix     = format;
+     c_fix_arg = "typedef %1long long %2longlong_t";
+     test_text = "typedef long longlong_t\n"
+                 "typedef unsigned long u_longlong_t";
+ };
+ #endif
+ 
+ /* 
+  *  Remove header file warning from sys/time.h.  Autoconf's
+  *  AC_HEADER_TIME recommends to include both sys/time.h and time.h
+  *  which causes warning on LynxOS.  Remove the warning.
+  */
+ fix = {
+     hackname  = lynxos_no_warning_in_sys_time_h;
+     files     = sys/time.h;
+     select    = "#warning[ \t]+Using <time.h> instead of <sys/time.h>";
+     c_fix     = format;
+     c_fix_arg = "";
+     test_text = "#warning Using <time.h> instead of <sys/time.h>";
+ };
+ 
+ 
+ /* 
+  *  Add missing declaration for putenv.
+  */
+ fix = {
+     hackname  = lynxos_missing_putenv;
+     mach      = '*-*-lynxos*';
+     files     = stdlib.h;
+     bypass    = 'putenv[ \t]*\\(';
+     select    = "extern char \\*getenv[ \t]*_AP\\(\\(const char \\*\\)\\);";
+     c_fix     = format;
+     c_fix_arg = "%0\n"
+         "extern int putenv				_AP((char *));";
+     c_fix_arg = "extern char \\*getenv[ \t]*_AP\\(\\(const char \\*\\)\\);";
+     test_text = "extern char *getenv	_AP((const char *));";
+ };
+ 
+ 
+ /*
+  * Fix BSD machine/ansi.h to use __builtin_va_list to define _BSD_VA_LIST_.
+  *
+  * On NetBSD, machine is a symbolic link to an architecture specific
+  * directory name, so we can't match a specific file name here.
+  */
+ fix = {
+     hackname = machine_ansi_h_va_list;
+     select   = "define[ \t]+_BSD_VA_LIST_[ \t]";
+     bypass   = '__builtin_va_list';
+ 
+     c_fix     = format;
+     c_fix_arg = "%1__builtin_va_list";
+     c_fix_arg = "(define[ \t]+_BSD_VA_LIST_[ \t]+).*";
+ 
+     test_text = " # define _BSD_VA_LIST_\tchar**";
+ };
+ 
+ 
+ /*
+  *  Fix non-ansi machine name defines
+  */
+ fix = {
+     hackname  = machine_name;
+     c_test    = machine_name;
+     c_fix     = machine_name;
+ 
+     test_text = "/* MACH_DIFF: */\n"
+     "#if defined( i386 ) || defined( sparc ) || defined( vax )"
+     "\n/* no uniform test, so be careful  :-) */";
+ };
+ 
+ 
+ /*
+  *  Some math.h files define struct exception (it's in the System V
+  *  Interface Definition), which conflicts with the class exception defined
+  *  in the C++ file std/stdexcept.h.  We redefine it to __math_exception.
+  *  This is not a great fix, but I haven't been able to think of anything
+  *  better.  Note that we have to put the #ifdef/#endif blocks at beginning
+  *  and end of file, because fixproto runs after us and may insert
+  *  additional references to struct exception.
+  */
+ fix = {
+     hackname  = math_exception;
+     files     = math.h;
+     select    = "struct exception";
+     /*
+      * This should be bypassed on __cplusplus, but some supposedly C++ C++
+      * aware headers, such as Solaris 8 and 9, don't wrap their struct
+      * exception either.  So currently we bypass only for glibc, based on a
+      * comment in the fixed glibc header.  Ick.
+      */
+     bypass    = 'We have a problem when using C\+\+|for C\+\+, _[a-z0-9A-Z_]+_exception; for C, exception';
+     c_fix     = wrap;
+ 
+     c_fix_arg = "#ifdef __cplusplus\n"
+                 "#define exception __math_exception\n"
+                 "#endif\n";
+ 
+     c_fix_arg = "#ifdef __cplusplus\n"
+                 "#undef exception\n"
+                 "#endif\n";
+ 
+     test_text = "typedef struct exception t_math_exception;";
+ };
+ 
+ 
+ /*
+  *  This looks pretty broken to me.  ``dbl_max_def'' will contain
+  *  "define DBL_MAX " at the start, when what we really want is just
+  *  the value portion.  Can't figure out how to write a test case
+  *  for this either  :-(
+  */
+ fix = {
+     hackname = math_huge_val_from_dbl_max;
+     files    = math.h;
+ 
+     /*
+      * IF HUGE_VAL is defined to be DBL_MAX *and* DBL_MAX is _not_ defined
+      * in math.h, this fix applies.
+      */
+     select   = "define[ \t]+HUGE_VAL[ \t]+DBL_MAX";
+     bypass   = "define[ \t]+DBL_MAX";
+ 
+     shell    =
+     /*
+      *  See if we have a definition for DBL_MAX in float.h.
+      *  If we do, we will replace the one in math.h with that one.
+      */
+ 
+     "\tdbl_max_def=`egrep 'define[ \t]+DBL_MAX[ \t]+.*' float.h "
+                    "| sed 's/.*DBL_MAX[ \t]*//' 2>/dev/null`\n\n"
+ 
+     "\tif ( test -n \"${dbl_max_def}\" ) > /dev/null 2>&1\n"
+     "\tthen sed -e '/define[ \t]*HUGE_VAL[ \t]*DBL_MAX/"
+ 			"s@DBL_MAX@'\"$dbl_max_def@\"\n"
+     "\telse cat\n"
+     "\tfi";
+ 
+     test_text =
+     "`echo '#define DBL_MAX\t3.1415e+9 /* really big */' >> float.h`\n"
+     "#define HUGE_VAL DBL_MAX";
+ };
+ 
+ 
+ /*
+  *  nested comment
+  */
+ fix = {
+     hackname  = nested_auth_des;
+     files     = rpc/rpc.h;
+     select    = '(/\*.*rpc/auth_des\.h>.*)/\*';
+     c_fix     = format;
+     c_fix_arg = "%1*/ /*";
+     test_text = "/*#include <rpc/auth_des.h> /* skip this */";
+ };
+ 
+ 
+ /*
+  * Fix nested comments in Motorola's <limits.h> and <sys/limits.h>
+  */
+ fix = {
+     hackname = nested_motorola;
+     mach     = "m68k-motorola-sysv*";
+     files    = sys/limits.h;
+     files    = limits.h;
+     select   = "max # bytes atomic in write|error value returned by Math lib";
+ 
+     sed = "s@^\\(#undef[ \t][ \t]*PIPE_BUF[ \t]*"
+                    "/\\* max # bytes atomic in write to a\\)$@\\1 */@";
+     sed = "s@\\(/\\*#define\tHUGE_VAL\t3.[0-9e+]* \\)"
+           "\\(/\\*error value returned by Math lib\\*/\\)$@\\1*/ \\2@";
+ 
+     test_text =
+     "#undef PIPE_BUF /* max # bytes atomic in write to a\n"
+     "\t\t/* PIPE */\n"
+     "/*#define\tHUGE_VAL\t3.9e+9 /*error value returned by Math lib*/";
+ };
+ 
+ 
+ /*
+  * Fixing nested comments in ISC <sys/limits.h>
+  */
+ fix = {
+     hackname = nested_sys_limits;
+     files  = sys/limits.h;
+     select = CHILD_MAX;
+     sed    = "/CHILD_MAX/s,/\\* Max, Max,";
+     sed    = "/OPEN_MAX/s,/\\* Max, Max,";
+     test_text = "/*\n#define CHILD_MAX 20 /* Max, Max, ... */ /*\n"
+                 "#define OPEN_MAX  20 /* Max, Max, ... */\n";
+ };
+ 
+ 
+ /*
+  * NetBSD has a semicolon after the ending '}' for some extern "C".
+  */
+ fix = {
+     hackname  = netbsd_extra_semicolon;
+     mach      = *-*-netbsd*;
+     files     = sys/cdefs.h;
+     select    = "#define[ \t]*__END_DECLS[ \t]*};";
+ 
+     c_fix     = format;
+     c_fix_arg = "#define __END_DECLS }";
+ 
+     test_text = "#define __END_DECLS };";
+ };
+ 
+ 
+ /*
+  *  NeXT 3.2 adds const prefix to some math functions.
+  *  These conflict with the built-in functions.
+  */
+ fix = {
+     hackname  = next_math_prefix;
+     files     = ansi/math.h;
+     select    = "^extern[ \t]+double[ \t]+__const__[ \t]";
+ 
+     c_fix     = format;
+     c_fix_arg = "extern double %1(";
+     c_fix_arg = "^extern[ \t]+double[ \t]+__const__[ \t]+([a-z]+)\\(";
+ 
+     test_text = "extern\tdouble\t__const__\tmumble();";
+ };
+ 
+ 
+ /*
+  *  NeXT 3.2 uses the word "template" as a parameter for some
+  *  functions. GCC reports an invalid use of a reserved key word
+  *  with the built-in functions.
+  */
+ fix = {
+     hackname = next_template;
+     files    = bsd/libc.h;
+     select   = "[ \t]template\\)";
+ 
+     c_fix     = format;
+     c_fix_arg = "(%1)";
+     c_fix_arg = "\\(([^)]*)[ \t]template\\)";
+     test_text = "extern mumble( char * template); /* fix */";
+ };
+ 
+ 
+ /*
+  *  NeXT 3.2 includes the keyword volatile in the abort() and  exit()
+  *  function prototypes. That conflicts with the  built-in functions.
+  */
+ fix = {
+     hackname = next_volitile;
+     files    = ansi/stdlib.h;
+     select   = "^extern[ \t]+volatile[ \t]+void[ \t]";
+ 
+     c_fix     = format;
+     c_fix_arg = "extern void %1(";
+     c_fix_arg = "^extern[ \t]+volatile[ \t]+void[ \t]+(exit|abort)\\(";
+ 
+     test_text = "extern\tvolatile\tvoid\tabort();";
+ };
+ 
+ 
+ /*
+  *  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
+  *  conditional, so it doesn't need this fix.  So everything is okay.
+  */
+ fix = {
+     hackname  = next_wait_union;
+     files     = sys/wait.h;
+ 
+     select    = 'wait\(union wait';
+     c_fix     = format;
+     c_fix_arg = "wait(void";
+     test_text = "extern pid_d wait(union wait*);";
+ };
+ 
+ 
+ /*
+  *  a missing semi-colon at the end of the nodeent structure definition.
+  */
+ fix = {
+     hackname  = nodeent_syntax;
+     files     = netdnet/dnetdb.h;
+     select    = "char[ \t]*\\*na_addr[ \t]*$";
+     c_fix     = format;
+     c_fix_arg = "%0;";
+     test_text = "char *na_addr\t";
+ };
+ 
+ 
+ /*
+  *  obstack.h used casts as lvalues.
+  *
+  *  We need to change postincrements of casted pointers (which are
+  *  then dereferenced and assigned into) of the form
+  *
+  *    *((TYPE*)PTRVAR)++ = (VALUE)
+  *
+  *  into expressions like
+  *
+  *    ((*((TYPE*)PTRVAR) = (VALUE)), (PTRVAR += sizeof (TYPE)))
+  *
+  *  which is correct for the cases used in obstack.h since PTRVAR is
+  *  of type char * and the value of the expression is not used.
+  */
+ fix = {
+     hackname  = obstack_lvalue_cast;
+     files     = obstack.h;
+     select    = '\*\(\(([^()]*)\*\)(.*)\)\+\+ = \(([^()]*)\)';
+     c_fix     = format;
+     c_fix_arg = "((*((%1*)%2) = (%3)), (%2 += sizeof (%1)))";
+     test_text = "*((void **) (h)->next_free)++ = (aptr)";
+ };
+ 
+ 
+ /*
+  *  sys/lc_core.h on some versions of OSF1/4.x pollutes the namespace by
+  *  defining regex.h related types.  This causes libg++ build and usage
+  *  failures.  Fixing this correctly requires checking and modifying 3 files.
+  */
+ fix = {
+     hackname = osf_namespace_a;
+     files    = reg_types.h;
+     files    = sys/lc_core.h;
+     test     = " -r reg_types.h";
+     test     = " -r sys/lc_core.h";
+     test     = " -n \"`grep '} regex_t;' reg_types.h`\"";
+     test     = " -z \"`grep __regex_t regex.h`\"";
+ 
+     c_fix     = format;
+     c_fix_arg = "__%0";
+     c_fix_arg = "reg(ex|off|match)_t";
+ 
+     test_text = "`touch sys/lc_core.h`"
+     "typedef struct {\n  int stuff, mo_suff;\n} regex_t;\n"
+     "extern regex_t    re;\n"
+     "extern regoff_t   ro;\n"
+     "extern regmatch_t rm;\n";
+ };
+ 
+ fix = {
+     hackname = osf_namespace_c;
+     files    = regex.h;
+     test     = " -r reg_types.h";
+     test     = " -r sys/lc_core.h";
+     test     = " -n \"`grep '} regex_t;' reg_types.h`\"";
+     test     = " -z \"`grep __regex_t regex.h`\"";
+ 
+     select    = "#include <reg_types\.h>.*";
+     c_fix     = format;
+     c_fix_arg = "%0\n"
+                 "typedef __regex_t\tregex_t;\n"
+                 "typedef __regoff_t\tregoff_t;\n"
+                 "typedef __regmatch_t\tregmatch_t;";
+ 
+     test_text = "#include <reg_types.h>";
+ };
+ 
+ 
+ /*
+  *  Fix __page_size* declarations in pthread.h AIX 4.1.[34].
+  *  The original ones fail if uninitialized externs are not common.
+  *  This is the default for all ANSI standard C++ compilers.
+  */
+ fix = {
+     hackname  = pthread_page_size;
+     files     = pthread.h;
+     select    = "^int __page_size";
+     c_fix     = format;
+     c_fix_arg = "extern %0";
+     test_text = "int __page_size;";
+ };
+ 
+ /*
+  * On broken glibc-2.3.3 systems an array of incomplete structures is
+  * passed to __sigsetjmp.  Fix that to take a pointer instead.
+  */
+ fix = {
+     hackname  = pthread_incomplete_struct_argument;
+     files     = pthread.h;
+     select    = "struct __jmp_buf_tag";
+     c_fix     = format;
+     c_fix_arg = "%1 *%2%3";
+     c_fix_arg = "^(extern int __sigsetjmp \\(struct __jmp_buf_tag) (__env)\\[1\\](.*)$";
+     test_text = "extern int __sigsetjmp (struct __jmp_buf_tag __env[1], int __savemask);";
+ };
+ 
+ /*
+  * On DYNIX/ptx, sys/mc_param.h has an embedded asm for the cpuid instruction
+  * on the P5. This is not used by anything else so we ifdef it out.
+  * Current GCC doesn't seem to complain about the asm, though.
+  */
+ #ifdef PTX
+ fix = {
+     hackname  = ptx_sys_mc_param_h;
+     files     = sys/mc_param.h;
+     sed       = "/__asm/,/}/{"
+                   "/__asm/i\\\n"
+                   "#if !defined (__GNUC__) && !defined (__GNUG__)\n"
+                   "/}/a\\\n"
+                   "#endif\n"
+                 "}";
+     test_text = "__asm\n"
+                 "int _CPUID()\n"
+                 "{\n"
+                 "   non-GNU assembly here\n"
+                 "}";
+ };
+ #endif
+ 
+ 
+ /*
+  *  Fix return type of fread and fwrite on sysV68
+  */
+ fix = {
+     hackname = read_ret_type;
+     files    = stdio.h;
+     select   = "extern int\t.*, fread\\(\\), fwrite\\(\\)";
+     c_fix     = format;
+     c_fix_arg = "extern unsigned int fread(), fwrite();\n%1%2";
+     c_fix_arg = "(extern int\t.*), fread\\(\\), fwrite\\(\\)(.*)";
+ 
+     test_text = "extern int\tfclose(), fflush(), fread(), fwrite(), foo();";
+ };
+ 
+ 
+ /*
+  *  Fix casts as lvalues in glibc's <rpc/xdr.h>.
+  */
+ fix = {
+     hackname  = rpc_xdr_lvalue_cast_a;
+     files     = rpc/xdr.h;
+     select    = "#define[ \t]*IXDR_GET_LONG.*\\\\\n.*__extension__.*";
+     c_fix     = format;
+     c_fix_arg = "#define IXDR_GET_LONG(buf) ((long)IXDR_GET_U_INT32(buf))";
+     test_text = "#define IXDR_GET_LONG(buf) \\\\\n"
+                 "\t((long)ntohl((u_long)*__extension__((u_int32_t*)(buf))++))";
+ };
+ 
+ 
+ fix = {
+     hackname  = rpc_xdr_lvalue_cast_b;
+     files     = rpc/xdr.h;
+     select    = "#define[ \t]*IXDR_PUT_LONG.*\\\\\n.*__extension__.*";
+     c_fix     = format;
+     c_fix_arg = "#define IXDR_PUT_LONG(buf, v) ((long)IXDR_PUT_INT32(buf, (long)(v)))";
+     test_text = "#define IXDR_PUT_LONG(buf, v) \\\\\n"
+                 "\t(*__extension__((u_int32_t*)(buf))++ = (long)htonl((u_long)(v)))";
+ };
+ 
+ 
+ /*
+  *  function class(double x) conflicts with C++ keyword on rs/6000
+  */
+ fix = {
+     hackname  = rs6000_double;
+     files     = math.h;
+     select    = '[^a-zA-Z_]class\(';
+ 
+     c_fix     = format;
+     c_fix_arg = "#ifndef __cplusplus\n%0\n#endif";
+     c_fix_arg = '^.*[^a-zA-Z_]class\(.*';
+ 
+     test_text = "extern int class();";
+ };
+ 
+ 
+ /*
+  *  Wrong fchmod prototype on RS/6000.
+  */
+ fix = {
+     hackname  = rs6000_fchmod;
+     files     = sys/stat.h;
+     select    = 'fchmod\(char \*';
+     c_fix     = format;
+     c_fix_arg = "fchmod(int";
+     test_text = "extern int fchmod(char *, mode_t);";
+ };
+ 
+ 
+ /*
+  *  parameters conflict with C++ new on rs/6000
+  */
+ fix = {
+     hackname  = rs6000_param;
+     files     = "stdio.h";
+     files     = "unistd.h";
+ 
+     select    = 'rename\(const char \*old, const char \*new\)';
+     c_fix     = format;
+     c_fix_arg = 'rename(const char *_old, const char *_new)';
+ 
+     test_text = 'extern int rename(const char *old, const char *new);';
+ };
+ 
+ 
+ /*
+  *  On OpenServer and on UnixWare 7, <math.h> uses the native compiler
+  *  __builtin_generic. We fix that usage to use the GCC equivalent.
+  * It also has a plethora of inline functions that conflict with libstdc++.
+  */
+ fix = {
+     hackname = sco_math;
+     files    = math.h;
+     files    = ansi/math.h;
+     files    = posix/math.h;
+     files    = xpg4/math.h;
+     files    = xpg4v2/math.h;
+     files    = xpg4plus/math.h;
+     files    = ods_30_compat/math.h;
+     files    = oldstyle/math.h;
+     select   = "inline double abs";
+     bypass   = "__GNUG__";
+     sed      = "/#define.*__fp_class(a) \\\\/i\\\n"
+ 	       "#ifndef __GNUC__\n";
+     sed      =
+ "/.*__builtin_generic/a\\\n"
+ "#else\\\n"
+ "#define __fp_class(a) \\\\\\\n"
+ "  __builtin_choose_expr(__builtin_types_compatible_p(typeof(a),long double),\\\\\\\n"
+ "   __fpclassifyl(a), \\\\\\\n"
+ "    __builtin_choose_expr(__builtin_types_compatible_p(typeof(a), float), \\\\\\\n"
+ "      __fpclassifyf(a),__fpclassify(a)))\\\n"
+ "#endif";
+ 
+     sed      = "/extern \"C\\+\\+\"/N;"
+ 	       "/inline double abs/i\\\n"
+                "#ifndef __GNUC__\n";
+     sed      = "/inline long double trunc/N;"
+ 	       "/inline long double trunc.*}.*extern \"C\\+\\+\"/a\\\n"
+ 	       "#endif /* ! __GNUC__ */";
+ 
+     test_text =
+     "#define __fp_class(a) \\\\\n"
+     " __builtin_generic(a,\"ld:__fplcassifyl;f:__fpclassifyf;:__fpclassify\")\n";
+ 
+ };
+ 
+ 
+ /*
+  *  On SCO OpenServer prior to 5.0.7UP1, <sys/regset.h> and <ieeefp.h>
+  *  have a clash on struct _fpstate and struct fpstate.
+  */
+ fix = {
+     hackname = sco_regset;
+     files    = sys/regset.h;
+     mach     = "*-*-sco3.2v5*";
+     select   = "(struct[ \t]+.*)fpstate";
+     c_fix     = format;
+     c_fix_arg = "%1rsfpstate";
+ 
+     test_text =
+     "union u_fps {\n"
+     "    struct\tfpstate\n"
+     "    {\n"
+     "       int whatever;\n"
+     "    }\n"
+     "};\n"
+     "union _u_fps {\n"
+     "    struct _fpstate\n"
+     "    {\n"
+     "       int whatever;\n"
+     "    }\n"
+     "};\n";
+ };
+ 
+ 
+ /*
+  *  The static functions lstat() and fchmod() in <sys/stat.h>
+  *  cause G++ grief since they're not wrapped in "if __cplusplus".
+  *
+  *  On SCO OpenServer 5.0.0 through (at least) 5.0.5 <sys/stat.h> contains
+  *  tiny static wrappers that aren't C++ safe.
+  */
+ fix = {
+     hackname = sco_static_func;
+     files    = sys/stat.h;
+     mach     = "i?86-*-sco3.2*";
+     select   = "^static int";
+ 
+     sed      = "/^static int/i\\\n"
+                "#if __cplusplus\\\n"
+                "extern \"C\" {\\\n"
+                "#endif /* __cplusplus */";
+ 
+     sed      = "/^}$/a\\\n"
+                "#if __cplusplus\\\n"
+                " }\\\n"
+                "#endif /* __cplusplus */";
+ 
+     test_text =
+     "#ifdef __STDC__\n"
+     "static int\tstat(const char *__f, struct stat *__p) {\n"
+     "\treturn __stat32(__f, __p);\n"
+     "}\n\n#  else /* !__STDC__ THIS FAILS ON BSD SYSTEMS */\n"
+ 
+     "static int\tstat(__f, __p)\n"
+     "\tchar *__f;\n"
+     "\tstruct stat *__p;\n"
+     "{\n"
+     "\treturn __stat32(__f, __p);\n"
+     "}\n"
+     "#endif";
+ };
+ 
+ 
+ /*
+  *  Fix prototype declaration of utime in sys/times.h.
+  *  In 3.2v4.0 the const is missing.
+  */
+ fix = {
+     hackname  = sco_utime;
+     files     = sys/times.h;
+     mach      = "i?86-*-sco3.2v4*";
+ 
+     select    = '\(const char \*, struct utimbuf \*\);';
+     c_fix     = format;
+     c_fix_arg = '(const char *, const struct utimbuf *);';
+ 
+     test_text = "extern int utime(const char *, struct utimbuf *);";
+ };
+ 
+ 
+ /*
+  *  Sun Solaris 2.5.1, 2.6 defines PTHREAD_{MUTEX|COND}_INITIALIZER
+  *  incorrectly, so we replace them with versions that correspond to
+  *  the definition.  We also explicitly name this fix "1" and the next
+  *  fix "2" because this one does not deal with the last field.  This
+  *  fix needs to run before the next.
+  */
+ fix = {
+     hackname = solaris_mutex_init_1;
+     select = '@\(#\)pthread.h' "[ \t]+1.1[0-9][ \t]+9[567]/[0-9/]+ SMI";
+     files = pthread.h;
+     sed   = "/define[ \t]*PTHREAD_MUTEX_INI/s/{0, 0,/{{{0}, 0}, {{{0}}},/\n"
+             "/define[ \t]*PTHREAD_COND_INI/s/{0,/{{{0},0},/";
+     test_text =
+     '#ident "@(#)pthread.h  1.16    97/05/05 SMI"'"\n"
+     "#define PTHREAD_MUTEX_INITIALIZER\t{0, 0, 0}\n"
+     "#define PTHREAD_COND_INITIALIZER\t{0, 0} /* */\n";
+ };
+ 
+ 
+ /*
+  * Sun Solaris defines PTHREAD_MUTEX_INITIALIZER with a trailing
+  * "0" for the last field of the pthread_mutex_t structure, which is
+  * of type upad64_t, which itself is typedef'd to int64_t, but with
+  * __STDC__ defined (e.g. by -ansi) it is a union. So change the
+  * initializer to "{0}" instead
+  */
+ fix = {
+     hackname = solaris_mutex_init_2;
+     select = '@\(#\)pthread.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
+     files = pthread.h;
+     c_fix = format;
+     c_fix_arg = "#if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)\n"
+                 "%0\n"
+                 "#else\n"
+                 "%1, {0}}%3\n"
+                 "#endif";
+     c_fix_arg = "(^#define[ \t]+PTHREAD_(MUTEX|COND)_INITIALIZER[ \t]+\\{.*)"
+                 ",[ \t]*0\\}" "(|[ \t].*)$";
+     test_text =
+     '#ident "@(#)pthread.h  1.26  98/04/12 SMI"'"\n"
+     "#define PTHREAD_MUTEX_INITIALIZER\t{{{0},0}, {{{0}}}, 0}\n"
+     "#define PTHREAD_COND_INITIALIZER\t{{{0}, 0}, 0}\t/* DEFAULTCV */\n"
+     "#define PTHREAD_RWLOCK_INITIALIZER\t"
+              "{0, 0, 0, {0, 0, 0}, {0, 0}, {0, 0}}";
+ };
+ 
+ 
+ /*
+  * Solaris 2.5.1 and 2.6 use an outdated prototype for send & recv
+  * in sys/socket.h.  This is corrected in Solaris 7 and up.
+  */
+ fix = {
+     hackname = solaris_socket;
+     files = sys/socket.h;
+     select = '@\(#\)socket.h' "[ \t]+1.[123][0-9][ \t]+9[567]/[0-9/]+ SMI";
+     c_fix = format;
+     c_fix_arg = "extern int %1(int, %2void *, int, int);";
+     c_fix_arg = '^extern int (recv|send)\(int,'
+                 ' (const )*char '
+                 '\*, int, int\);';
+ 
+     test_text = '#ident   "@(#)socket.h   1.30    97/01/20 SMI"'"\n"
+                 "extern int recv(int, char *, int, int);\n"
+                 "extern int send(int, const char *, int, int);";
+ };
+ 
+ 
+ /*
+  * Solaris 2.8 has what appears to be some gross workaround for 
+  * some old version of their c++ compiler.  G++ doesn't want it
+  * either, but doesn't want to be tied to SunPRO version numbers.
+  */
+ fix = {
+     hackname = solaris_stdio_tag;
+     files    = stdio_tag.h;
+ 
+     select   = '__cplusplus < 54321L';
+     /* In Solaris 10, the code in stdio_tag.h is conditionalized on 
+        "!defined(__GNUC__)" so we no longer need to fix it.  */
+     bypass   = '__GNUC__';
+     sed      = 's/defined(__cplusplus) && (__cplusplus < 54321L)/0/';
+ 
+     test_text = "#if\tdefined(__cplusplus) && (__cplusplus < 54321L)";
+ };
+ 
+ 
+ /*
+  * Sun Solaris 2.5.1 doesn't define 'getpagesize' in <unistd.h>, as is done
+  * on Solaris 2.6 and up.
+  */
+ fix = {
+     hackname  = solaris_unistd;
+     files = unistd.h;
+     select = '@\(#\)unistd.h' "[ \t]+1.3[0-9][ \t]+9[567]/[0-9/]+ SMI";
+     bypass = "getpagesize";
+     c_fix = format;
+     c_fix_arg = "extern int getpagesize();\n%0";
+     c_fix_arg = '^extern (pid_t|int) getpgid\(.*\);';
+     test_text = '#ident "@(#)unistd.h   1.33    95/08/28 SMI"'"\n"
+                 "extern pid_t getpgid(pid_t);\n"
+                 "extern int getpgid();";
+ };
+ 
+ 
+ /*
+  * <widec.h> until Solaris 2.5.1 defines macros for a couple of <wchar.h>
+  * functions, breaking their prototypes if that file is included afterwards.
+  * Include <wchar.h> early to avoid this issue, as is done on Solaris 2.6
+  * and up.
+  */
+ fix = {
+     hackname  = solaris_widec;
+     files     = widec.h;
+     mach      = '*-*-solaris2.[0-5]';
+     mach      = '*-*-solaris2.[0-5].*';
+     bypass    = "include.*wchar\\.h";
+     select    = "#include <euc.h>";
+     c_fix     = format;
+     c_fix_arg = "%0\n#include <wchar.h>";
+     test_text = "#include <euc.h>";
+ };
+ 
+ 
+ /*
+  *  a missing semi-colon at the end of the statsswtch structure definition.
+  */
+ fix = {
+     hackname  = statsswtch;
+     files     = rpcsvc/rstat.h;
+     select    = "boottime$";
+     c_fix     = format;
+     c_fix_arg = "boottime;";
+     test_text = "struct statswtch {\n  int boottime\n};";
+ };
+ 
+ 
+ /*
+  *  Arrange for stdio.h to use stdarg.h to define __gnuc_va_list.
+  *  On 4BSD-derived systems, stdio.h defers to machine/ansi.h; that's
+  *  OK too.
+  */
+ fix = {
+     hackname = stdio_stdarg_h;
+     files    = stdio.h;
+     bypass   = "include.*(stdarg\.h|machine/ansi\.h)";
+     /*
+      * On Solaris 10, this fix is unncessary; <stdio.h> includes
+      * <iso/stdio_iso.h>, which includes <sys/va_list.h>.
+       */
+     mach     = '*-*-solaris2.1[0-9]';
+     not_machine = true;
+ 
+     c_fix     = wrap;
+ 
+     c_fix_arg = "#define __need___va_list\n#include <stdarg.h>\n";
+ 
+     test_text = "";
+ };
+ 
+ 
+ /*
+  *  Don't use or define the name va_list in stdio.h.  This is for
+  *  ANSI.  Note _BSD_VA_LIST_ is dealt with elsewhere.  The presence
+  *  of __gnuc_va_list, __DJ_va_list, or _G_va_list is taken to
+  *  indicate that the header knows what it's doing -- under SUSv2,
+  *  stdio.h is required to define va_list, and we shouldn't break
+  *  that.  On IRIX 6.5, internal/wchar_core.h used to get its
+  *  definition of va_list from stdio.h.  Since this doesn't happen any
+  *  longer, use __gnuc_va_list there, too.
+  */
+ fix = {
+     hackname = stdio_va_list;
+     files    = stdio.h;
+     files    = internal/stdio_core.h;
+     files    = internal/wchar_core.h;
+     bypass   = '__gnuc_va_list|_BSD_VA_LIST_|__DJ_va_list|_G_va_list';
+     /* 
+      * On Solaris 10, the definition in 
+      * <stdio.h> is guarded appropriately by the _XPG4 feature macro; 
+      * there is therefore no need for this fix there.
+      */
+     mach = '*-*-solaris2.1[0-9]';
+     not_machine = true;
+ 
+     /*
+      * Use __gnuc_va_list in arg types in place of va_list.
+      * On 386BSD use __gnuc_va_list instead of _VA_LIST_.  On Tru64 UNIX V5.1A
+      * use __gnuc_va_list instead of __VA_LIST__.  We're hoping the
+      * trailing parentheses and semicolon save all other systems from this.
+      * Define __not_va_list__ (something harmless and unused)
+      * instead of va_list.
+      * Don't claim to have defined va_list.
+      */
+     sed = "s@[ \t]va_list\\([ \t)]\\)@ __gnuc_va_list\\1@\n"
+ 	  "s@(va_list)&@(__gnuc_va_list)\\&@\n"
+           "s@ _VA_LIST_));@ __gnuc_va_list));@\n"
+           "s@ __VA_LIST__));@ __gnuc_va_list));@\n"
+           "s@ va_list@ __not_va_list__@\n"
+           "s@\\*va_list@*__not_va_list__@\n"
+           "s@ __va_list)@ __gnuc_va_list)@\n"
+           "s@typedef[ \t]\\(.*\\)[ \t]va_list[ \t]*;"
+            "@typedef \\1 __not_va_list__;@\n"
+ 	  "s@typedef[ \t]*__va_list__@typedef __gnuc_va_list@\n"
+           "s@GNUC_VA_LIST@GNUC_Va_LIST@\n"
+           "s@_VA_LIST_DEFINED@_Va_LIST_DEFINED@\n"
+           "s@_NEED___VA_LIST@_NEED___Va_LIST@\n"
+           "s@VA_LIST@DUMMY_VA_LIST@\n"
+           "s@_Va_LIST@_VA_LIST@";
+     test_text = "extern void mumble( va_list);";
+ };
+ 
+ 
+ /*
+  *  Fix headers that use va_list from stdio.h to use the updated
+  *  va_list from the stdio_va_list change.  Note _BSD_VA_LIST_ is
+  *  dealt with elsewhere.  The presence of __gnuc_va_list,
+  *  __DJ_va_list, or _G_va_list is taken to indicate that the header
+  *  knows what it's doing.
+  */
+ fix = {
+     hackname = stdio_va_list_clients;
+     files    = com_err.h;
+     files    = cps.h;
+     files    = curses.h;
+     files    = krb5.h;
+     files    = lc_core.h;
+     files    = pfmt.h;
+     files    = wchar.h;
+     files    = curses_colr/curses.h;
+     bypass   = '__gnuc_va_list|_BSD_VA_LIST_|__DJ_va_list|_G_va_list';
+     /* Don't fix, if we use va_list from stdarg.h, or if the use is
+        otherwise protected.  */
+     bypass   = 'include <stdarg\.h>|#ifdef va_start';
+ 
+     /*
+      * Use __gnuc_va_list in arg types in place of va_list.
+      * On 386BSD use __gnuc_va_list instead of _VA_LIST_.  On Tru64 UNIX V5.1A
+      * use __gnuc_va_list instead of __VA_LIST__.  We're hoping the
+      * trailing parentheses and semicolon save all other systems from this.
+      * Define __not_va_list__ (something harmless and unused)
+      * instead of va_list.
+      * Don't claim to have defined va_list.
+      */
+     sed = "s@[ \t]va_list\\([ \t)]\\)@ __gnuc_va_list\\1@\n"
+ 	  "s@(va_list)&@(__gnuc_va_list)\\&@\n"
+           "s@ _VA_LIST_));@ __gnuc_va_list));@\n"
+           "s@ __VA_LIST__));@ __gnuc_va_list));@\n"
+           "s@ va_list@ __not_va_list__@\n"
+           "s@\\*va_list@*__not_va_list__@\n"
+           "s@ __va_list)@ __gnuc_va_list)@\n"
+           "s@typedef[ \t]\\(.*\\)[ \t]va_list[ \t]*;"
+            "@typedef \\1 __not_va_list__;@\n"
+ 	  "s@typedef[ \t]*__va_list__@typedef __gnuc_va_list@\n"
+           "s@GNUC_VA_LIST@GNUC_Va_LIST@\n"
+           "s@_VA_LIST_DEFINED@_Va_LIST_DEFINED@\n"
+           "s@_NEED___VA_LIST@_NEED___Va_LIST@\n"
+           "s@VA_LIST@DUMMY_VA_LIST@\n"
+           "s@_Va_LIST@_VA_LIST@";
+     test_text = "extern void mumble( va_list);";
+ };
+ 
+ 
+ /*
+  *  "!__STDC__" or "__STDC__==0" or "__STDC__!=1" or "__STDC__-0==0"
+  *  is "!defined( __STRICT_ANSI__ )"
+  */
+ fix = {
+     hackname = strict_ansi_not;
+     select   = "^([ \t]*#[ \t]*if.*)"
+                "(!__STDC__"
+                "|__STDC__[ \t]*==[ \t]*0"
+                "|__STDC__[ \t]*!=[ \t]*1"
+                "|__STDC__[ \t]*-[ \t]*0[ \t]*==[ \t]*0)";
+     /* Tru64 UNIX V4.0F/V5.1 <standards.h> supports GCC usage of __STDC__. */
+     bypass = 'GNU and MIPS C compilers define __STDC__ differently';
+     /* GNU gmp.h uses "__STDC__ != 1" only if __SCO_VERSION__, which
+        is not defined by GCC, so it is safe.  */
+     bypass = '__SCO_VERSION__.*__STDC__ != 1';
+     c_test   = stdc_0_in_system_headers;
+ 
+     c_fix     = format;
+     c_fix_arg = "%1 !defined(__STRICT_ANSI__)";
+ 
+     test_text = "#if !__STDC__ \n"
+                 "#if __STDC__ == 0\n"
+                 "#if __STDC__ != 1\n"
+                 "#if __STDC__ - 0 == 0"
+                "/* not std C */\nint foo;\n"
+                "\n#end-end-end-end-if :-)";
+ };
+ 
+ /*
+  *  "__STDC__-0==0"
+  *  is "!defined( __STRICT_ANSI__ )" on continued #if-s
+  */
+ fix = {
+     hackname = strict_ansi_not_ctd;
+     files    = math.h, limits.h, stdio.h, signal.h,
+                stdlib.h, sys/signal.h, time.h;
+     /*
+      * Starting at the beginning of a line, skip white space and
+      * a leading "(" or "&&" or "||".  One of those must be found.
+      * Then, zero, one or more copies of a "defined(_FOO_BAR_) &&"
+      * expression.  If these are nested, then they must accumulate
+      * because we won't match any closing parentheses.  Finally,
+      * after skipping over all that, we must then match our suspect
+      * phrase:  "__STDC__-0==0" with or without white space.
+      */
+     select   = "^([ \t]*" '(\(|&&|\|\|)'
+                "([ \t(]*!*[ \t]*defined\\([a-zA-Z_0-9]+\\)[ \t]*[|&][|&])*"
+                "[ \t(]*)"
+                "(__STDC__[ \t]*(|-[ \t]*0[ \t]*)==[ \t]*0)";
+     c_test   = stdc_0_in_system_headers;
+ 
+     c_fix     = format;
+     c_fix_arg = "%1 !defined(__STRICT_ANSI__)";
+ 
+     test_text = "#if 1 && \\\\\n"
+                "&& defined(mumbling) |& (__STDC__ - 0 == 0) \\\\\n"
+                "( __STDC__ == 0 && !defined(_XOPEN_SOURCE) \\\\\n"
+                "|| __STDC__ - 0 == 0 ) /* not std C */\n"
+                "int foo;\n#endif";
+ };
+ 
+ 
+ /*
+  *  "__STDC__!=0" or "__STDC__==1" or "__STDC__-0==1"
+  *  is "defined( __STRICT_ANSI__ )"
+  */
+ fix = {
+     hackname = strict_ansi_only;
+     select   = "^([ \t]*#[ \t]*if.*)"
+                "(__STDC__[ \t]*!=[ \t]*0"
+                "|__STDC__[ \t]*==[ \t]*1"
+                "|__STDC__[ \t]*-[ \t]*0[ \t]*==[ \t]*1"
+                "|__STDC__[ \t]*-[ \t]*0[ \t]*!=[ \t]*0)";
+     c_test   = stdc_0_in_system_headers;
+ 
+     c_fix     = format;
+     c_fix_arg = "%1 defined(__STRICT_ANSI__)";
+ 
+     test_text = "#if __STDC__ == 1 /* is std C\n */\nint foo;\n#endif";
+ };
+ 
+ 
+ /*
+  *  IRIX 4.0.5 <rpc/xdr.h> uses struct __file_s
+  *  in prototype without previous definition.
+  */
+ fix = {
+     hackname  = struct_file;
+     files     = rpc/xdr.h;
+     select    = '^.*xdrstdio_create.*struct __file_s';
+     c_fix     = format;
+     c_fix_arg = "struct __file_s;\n%0";
+     test_text = "extern void xdrstdio_create( struct __file_s* );";
+ };
+ 
+ 
+ /*
+  *  IRIX 4.0.5 <rpc/auth.h> uses struct sockaddr
+  *  in prototype without previous definition.
+  *
+  *  Don't fix OpenBSD, which uses struct sockaddr_in prototyping the same
+  *  function, and does define it.
+  */
+ fix = {
+     hackname  = struct_sockaddr;
+     files     = rpc/auth.h;
+     select    = "^.*authdes_create.*struct sockaddr[^_]";
+     bypass    = "<sys/socket\.h>";
+     bypass    = "struct sockaddr;\n";
+     c_fix     = format;
+     c_fix_arg = "struct sockaddr;\n%0";
+     test_text = "extern AUTH* authdes_create( struct sockaddr* );";
+ };
+ 
+ 
+ /*
+  *  Apply fix this to all OSs since this problem seems to effect
+  *  more than just SunOS.
+  */
+ fix = {
+     hackname = sun_auth_proto;
+     files    = rpc/auth.h;
+     files    = rpc/clnt.h;
+     files    = rpc/svc.h;
+     files    = rpc/xdr.h;
+     bypass   = "__cplusplus";
+     /*
+      *  Select those files containing '(*name)()'.
+      */
+     select    = '\(\*[a-z][a-z_]*\)\(\)';
+ 
+     c_fix     = format;
+     c_fix_arg = "#ifdef __cplusplus\n%1(...);%2\n"
+                 "#else\n%1();%2\n#endif";
+     c_fix_arg = '(.*\(\*[a-z][a-z_]*\))\(\);(.*)';
+ 
+     test_text =
+     "struct auth_t {\n"
+     "    int (*name)(); /* C++ bad */\n"
+     "};";
+ };
+ 
+ 
+ /*
+  *  Fix bogus #ifdef on SunOS 4.1.
+  */
+ fix = {
+     hackname  = sun_bogus_ifdef;
+     files     = "hsfs/hsfs_spec.h";
+     files     = "hsfs/iso_spec.h";
+     select    = '#ifdef(.*\|\|.*)';
+     c_fix     = format;
+     c_fix_arg = "#if%1";
+ 
+     test_text = "#ifdef  __i386__ || __vax__ || __sun4c__";
+ };
+ 
+ 
+ /*
+  *  Fix the CAT macro in SunOS memvar.h.
+  */
+ fix = {
+     hackname  = sun_catmacro;
+     files     = pixrect/memvar.h;
+     select    = "^#define[ \t]+CAT\\(a,b\\).*";
+     c_fix     = format;
+ 
+     c_fix_arg =
+     "#ifdef __STDC__\n"
+     "#  define CAT(a,b) a##b\n"
+     "#else\n%0\n#endif";
+ 
+     test_text =
+     "#define CAT(a,b)\ta/**/b";
+ };
+ 
+ 
+ /*
+  *  Fix return type of free and {c,m,re}alloc in <malloc.h> on SunOS 4.1.
+  *  Also fix return type of {m,re}alloc in <malloc.h> on sysV68
+  */
+ fix = {
+     hackname = sun_malloc;
+     files    = malloc.h;
+     bypass   = "_CLASSIC_ANSI_TYPES";
+ 
+     sed   = "s/typedef[ \t]char \\*\tmalloc_t/typedef void \\*\tmalloc_t/g";
+     sed   = "s/int[ \t][ \t]*free/void\tfree/g";
+     sed   = "s/char\\([ \t]*\\*[ \t]*malloc\\)/void\\1/g";
+     sed   = "s/char\\([ \t]*\\*[ \t]*realloc\\)/void\\1/g";
+     sed   = "s/char\\([ \t]*\\*[ \t]*calloc\\)/void\\1/g";
+ 
+     test_text =
+     "typedef char *\tmalloc_t;\n"
+     "int \tfree();\n"
+     "char*\tmalloc();\n"
+     "char*\tcalloc();\n"
+     "char*\trealloc();";
+ };
+ 
+ 
+ /*
+  *  Check for yet more missing ';' in struct (in SunOS 4.0.x)
+  */
+ fix = {
+     hackname = sun_rusers_semi;
+     files    = rpcsvc/rusers.h;
+     select   = "_cnt$";
+     sed      = "/^struct/,/^};/s/_cnt$/_cnt;/";
+     test_text = "struct mumble\n  int _cnt\n};";
+ };
+ 
+ 
+ /*
+  *  signal.h on SunOS defines signal using (),
+  *  which causes trouble when compiling with g++ -pedantic.
+  */
+ fix = {
+     hackname = sun_signal;
+     files    = sys/signal.h;
+     files    = signal.h;
+     select   = "^void\t" '\(\*signal\(\)\)\(\);.*';
+ 
+     c_fix     = format;
+     c_fix_arg =
+           "#ifdef __cplusplus\n"
+           "void\t(*signal(...))(...);\n"
+           "#else\n%0\n#endif";
+ 
+     test_text = "void\t(*signal())();";
+ };
+ 
+ 
+ /*
+  *  Correct the return type for strlen in strings.h in SunOS 4.
+  */
+ fix = {
+     hackname = sunos_strlen;
+     files    = strings.h;
+     select   = "int[ \t]*strlen\\(\\);(.*)";
+     c_fix     = format;
+     c_fix_arg = "__SIZE_TYPE__ strlen();%1";
+     test_text = " int\tstrlen(); /* string length */";
+ };
+ 
+ 
+ /*
+  *  Disable apparent native compiler optimization cruft in SVR4.2 <string.h>
+  *  that is visible to any ANSI compiler using this include.  Simply
+  *  delete the lines that #define some string functions to internal forms.
+  */
+ fix = {
+     hackname = svr4_disable_opt;
+     files    = string.h;
+     select   = '#define.*__std_hdr_';
+     sed      = '/#define.*__std_hdr_/d';
+     test_text = "#define strlen __std_hdr_strlen\n";
+ };
+ 
+ 
+ /*
+  *  Conditionalize some of <sys/endian.h> on __GNUC__ and __GNUG__.
+  *  On some systems (UnixWare 2, UnixWare 7), the file is byteorder.h
+  *  but we still "hijack" it and redirect it to the GNU byteorder.h..
+  */
+ #ifdef SVR5
+ fix = {
+     hackname = svr4_endian;
+     files    = sys/endian.h;
+ #ifdef LATER
+     /*
+      * since we emit our own sys/byteorder.h,
+      * this fix can never be applied to that file.
+      */
+     files    = sys/byteorder.h;
+ #endif
+     bypass   = '__GNUC__';
+ 
+     sed      = "/#\tifdef\t__STDC__/i\\\n"
+                "#   if !defined (__GNUC__) && !defined (__GNUG__)\n";
+ 
+     sed      = "/#\t\tinclude\t<sys\\/byteorder.h>/s/\t\t/   /";
+ 
+     sed      = "/#   include\t<sys\\/byteorder.h>/i\\\n"
+                "#   endif /* !defined (__GNUC__) && !defined (__GNUG__) */\n";
+ };
+ #endif /* SVR5 */
+ 
+ 
+ /*
+  *  Remove useless extern keyword from struct forward declarations
+  *  in <sys/stream.h> and <sys/strsubr.h>
+  */
+ #ifdef SVR4
+ fix = {
+     hackname = svr4_extern_struct;
+     files    = sys/stream.h;
+     files    = sys/strsubr.h;
+     select   = 'extern struct [a-z_]*;';
+     sed      = 's/extern struct \([a-z][a-z_]*\)/struct \1/';
+ };
+ #endif
+ 
+ /*
+  *  Fix declarations of `ftw' and `nftw' in <ftw.h>.  On some/most SVR4
+  *  systems the file <ftw.h> contains extern declarations of these
+  *  functions followed by explicitly `static' definitions of these
+  *  functions... and that's not allowed according to ANSI C.  (Note
+  *  however that on Solaris, this header file glitch has been pre-fixed by
+  *  Sun.  In the Solaris version of <ftw.h> there are no static
+  *  definitions of any function so we don't need to do any of this stuff
+  *  when on Solaris.
+  */
+ #ifdef SVR4
+ #ifndef SOLARIS
+ fix = {
+     hackname = svr4_ftw;
+     files    = ftw.h;
+     select   = '^extern int ftw\(const';
+ 
+     sed = '/^extern int ftw(const/i' "\\\n"
+             "#if !defined(_STYPES)\\\n"
+             "static\\\n"
+             "#else\\\n"
+             "extern\\\n"
+             "#endif";
+     sed = 's/extern \(int ftw(const.*\)$/\1/';
+     sed = "/^extern int nftw/i\\\n"
+             "#if defined(_STYPES)\\\n"
+             "static\\\n"
+             "#else\\\n"
+             "extern\\\n"
+             "#endif";
+     sed = 's/extern \(int nftw.*\)$/\1/';
+     sed = "/^extern int ftw(),/c\\\n"
+             "#if !defined(_STYPES)\\\n"
+             "static\\\n"
+             "#else\\\n"
+             "extern\\\n"
+             "#endif\\\n"
+             "  int ftw();\\\n"
+             "#if defined(_STYPES)\\\n"
+             "static\\\n"
+             "#else\\\n"
+             "extern\\\n"
+             "#endif\\\n"
+             "  int nftw();";
+ };
+ #endif
+ #endif
+ 
+ 
+ /*
+  *   Fix broken decl of getcwd present on some svr4 systems.
+  */
+ fix = {
+     hackname = svr4_getcwd;
+     files    = stdlib.h;
+     files    = unistd.h;
+     files    = prototypes.h;
+     select   = 'getcwd\(char \*, int\)';
+ 
+     c_fix     = format;
+     c_fix_arg = "getcwd(char *, size_t)";
+ 
+     test_text = "extern char* getcwd(char *, int);";
+ };
+ 
+ 
+ /*
+  *  Wrap some files on System V r4 and DYNIX/ptx systems with
+  *  #ifdef _KERNEL, presumably to prevent kernel headers from
+  *  leaking into userspace.  This may not be necessary at all,
+  *  but it was in the old scripts, so it seems safest to keep it for now.
+  */
+ fix = {
+     /* Can't name this with _kernel, or the test case will hit the bypass! */
+     hackname = svr4_krnl;
+     /* Since I'm rather unsure about the validity of this, limit it
+      * to the specific systems it was operating on before.  It should
+      * also be bypassed for i?86-*-sysv4.3uw2, by that rule, but I didn't
+      * see an easy way to do that.  Hopefully it will be harmless
+      * in any case. -- Nathanael */
+     mach     = '*-*-sysv4*';
+     mach     = 'i?86-sequent-ptx*';
+     files    = fs/rfs/rf_cache.h;
+     files    = sys/erec.h;
+     files    = sys/err.h;
+     files    = sys/char.h;
+     files    = sys/getpages.h;
+     files    = sys/map.h;
+     files    = sys/cmn_err.h;
+     files    = sys/kdebugger.h;
+ 
+     /* This bypass will match _KERNEL, __KERNEL, __KERNEL__, etc.
+      * It will also match SVR4_KERNEL_CHECK, which means that the
+      * testsuite case will always be bypassed.  Which is fine with me. */
+     bypass   = '_KERNEL';
+ 
+     c_fix     = wrap;
+     c_fix_arg = "#ifdef _KERNEL\n";
+     c_fix_arg = "#endif /* _KERNEL */\n";
+ 
+     /* There's no reasonable test for this given that we don't know exactly
+      * what problem inspired it in the first place. */
+     test_text = "";
+ };
+ 
+ 
+ /*
+  *  Delete any #defines of `__i386' which may be present in <ieeefp.h>.  They
+  *  tend to conflict with the compiler's own definition of this symbol.  (We
+  *  will use the compiler's definition.)
+  *  Likewise __sparc, for Solaris, and __i860, and a few others
+  *  (guessing it is necessary for all of them).
+  */
+ #ifdef SVR4
+ fix = {
+     hackname = svr4_mach_defines;
+     files    = ieeefp.h;
+     select   = "#define[ \t]*__(i386|mips|sparc|m88k|m68k)[ \t]";
+     sed      = "/#define[ \t]*__\\(i386|mips|sparc|m88k|m68k\\)[ \t]/d";
+ };
+ #endif
+ 
+ 
+ /*
+  *  Fix declarations of `makedev', `major', and `minor' in <sys/mkdev.h>.
+  *  They are declared as non-static then immediately redeclared as static.
+  */
+ #ifdef SVR5
+ fix = {
+     hackname = svr4_mkdev;
+     files    = sys/mkdev.h;
+     select   = '^static';
+ 
+     sed      = "/^dev_t makedev(/s/^/static /";
+     sed      = "/^major_t major(/s/^/static /";
+     sed      = "/^minor_t minor(/s/^/static /";
+ };
+ #endif /* SVR5 */
+ 
+ 
+ /*
+  *  Fix reference to NC_NPI_RAW in <sys/netcspace.h>.
+  *  Also fix types of array initializers.
+  */
+ #ifdef SVR4
+ fix = {
+     hackname = svr4_netcspace;
+     files    = sys/netcspace.h;
+     select   = 'NC_NPI_RAW';
+     sed      = 's/NC_NPI_RAW/NC_TPI_RAW/g';
+     sed      = 's/NC_/(unsigned long) NC_/';
+ };
+ #endif
+ 
+ /*
+  *  Fix reference to NMSZ in <sys/adv.h>.
+  */
+ #ifdef SVR4
+ fix = {
+     hackname = svr4_nmsz;
+     files    = sys/adv.h;
+     select   = '\[NMSZ\]';
+     sed      = 's/\[NMSZ\]/\[RFS_NMSZ\]/g';
+ };
+ #endif
+ 
+ 
+ /*
+  * Some SVR4 systems supposedly use these non-ANSI preprocessor directives.
+  */
+ #ifdef SVR4
+ fix = {
+     hackname  = svr4_preproc_lint_on;
+     select    = '#lint\(on\)';
+     c_fix     = format;
+     c_fix_arg = 'defined(lint)';
+     test_text = "#if #lint(on)";
+ };
+ fix = {
+     hackname  = svr4_preproc_lint_off;
+     select    = '#lint\(off\)';
+     c_fix     = format;
+     c_fix_arg = '!defined(lint)';
+     test_text = "#if #lint(off)";
+ };
+ fix = {
+     hackname  = svr4_preproc_machine;
+     select    = '#(machine|system|cpu)\(([^)]*)\)';
+     c_fix     = format;
+     c_fix_arg = 'defined(__%1__)';
+     test_text = "#if #machine(i386) || #system(vax) || #cpu(sparc)";
+ };
+ #endif
+ 
+ 
+ /*
+  *   Fix broken decl of profil present on some svr4 systems.
+  */
+ fix = {
+     hackname = svr4_profil;
+     files    = stdlib.h;
+     files    = unistd.h;
+ 
+     select    =
+     'profil\(unsigned short \*, unsigned int, unsigned int, unsigned int\)';
+     /* The fix is wrong on IRIX 5/6 and creates a conflict with another
+        prototype in <sys/profil.h>.  */
+     bypass    = 'Silicon Graphics';
+     c_fix     = format;
+     c_fix_arg = 'profil(unsigned short *, size_t, int, unsigned int)';
+ 
+     test_text =
+     'profil(unsigned short *, unsigned int, unsigned int, unsigned int);';
+ };
+ 
+ 
+ /*
+  *  Convert functions to prototype form, and fix arg names in <sys/stat.h>.
+  */
+ #ifdef SVR4
+ fix = {
+     hackname = svr4_proto_form;
+     files    = sys/stat.h;
+     select   = 'const extern';
+ 
+     sed      = "/^stat([ \t]*[^c]/ {\nN\nN\n"
+                    "s/(.*)\\n/( /\n"
+                    "s/;\\n/, /\n"
+                    "s/;$/)/\n"  "}";
+ 
+     sed      = "/^lstat([ \t]*[^c]/ {\nN\nN\n"
+                    "s/(.*)\\n/( /\n"
+                    "s/;\\n/, /\n"
+                    "s/;$/)/\n"  "}";
+ 
+     sed      = "/^fstat([ \t]*[^i]/ {\nN\nN\n"
+                    "s/(.*)\\n/( /\n"
+                    "s/;\\n/, /\n"
+                    "s/;$/)/\n"  "}";
+ 
+     sed      = "/^mknod([ \t]*[^c]/{\nN\nN\nN\n"
+                    "s/(.*)\\n/( /\n"
+                    "s/;\\n/, /g\n"
+                    "s/;$/)/\n"  "}";
+ 
+     sed      = "1,$s/\\([^A-Za-z]\\)path\\([^A-Za-z]\\)/\\1__path\\2/g";
+     sed      = "1,$s/\\([^A-Za-z]\\)buf\\([^A-Za-z]\\)/\\1__buf\\2/g";
+     sed      = "1,$s/\\([^A-Za-z]\\)fd\\([^A-Za-z]\\)/\\1__fd\\2/g";
+     sed      = "1,$s/ret\\([^u]\\)/__ret\\1/g";
+     sed      = "1,$s/\\([^_]\\)mode\\([^_]\\)/\\1__mode\\2/g";
+     sed      = "1,$s/\\([^_r]\\)dev\\([^_]\\)/\\1__dev\\2/g";
+ };
+ #endif
+ 
+ /*
+  *  Add a prototyped declaration of mmap to <sys/mman.h>.
+  */
+ #ifdef SVR4
+ fix = {
+     hackname = svr4_proto_mmap;
+     files    = sys/mman.h;
+     select   = '^extern caddr_t mmap();$';
+     sed = '/^extern caddr_t mmap();$/c' "\\\n"
+           "#ifdef __STDC__\\\n"
+           "extern caddr_t mmap (caddr_t, size_t, int, int, int, off_t);\\\n"
+           "#else /* !defined(__STDC__) */\\\n"
+           "extern caddr_t mmap ();\\\n"
+           "#endif /* !defined(__STDC__) */\\\n";
+ };
+ #endif
+ 
+ /*
+  *  Add a #define of _SIGACTION_ into <sys/signal.h>.
+  */
+ #ifdef SVR4
+ fix = {
+     hackname = svr4_sigaction;
+     files    = sys/signal.h;
+     sed      = "/^struct sigaction {/i\\\n"
+                "#define _SIGACTION_";
+     sed      = 's/(void *(\*)())/(void (*)(int))/';
+ };
+ #endif
+ 
+ 
+ /*
+  * Correct types for signal handler constants like SIG_DFL; they might be
+  * void (*) (), and should be void (*) (int).  C++ doesn't like the
+  * old style.
+  */
+ fix = {
+     hackname = svr4_sighandler_type;
+     files = sys/signal.h;
+     select = 'void *\(\*\)\(\)';
+     c_fix = format;
+     c_fix_arg = "void (*)(int)";
+     test_text = "#define SIG_DFL (void(*)())0\n"
+                 "#define SIG_IGN (void (*)())0\n";
+ };
+ 
+ /*
+  *  Put storage class at start of decl, to avoid warning.
+  */
+ #ifdef SVR4
+ fix = {
+     hackname = svr4_storage_class;
+     files    = rpc/types.h;
+     select   = 'const extern';
+     sed      = 's/const extern/extern const/g';
+ };
+ #endif
+ 
+ 
+ /*
+  *  Some SysV r4 systems, including Sequent's DYNIX/ptx, use the local
+  *  function 'getrnge' in <regexp.h> before they declare it.  For these
+  *  systems add a 'static int' declaration of 'getrnge' into <regexp.h>
+  *  early on.
+  *
+  *  'getrnge' traditionally manipulates a file-scope global called 'size',
+  *  so put the declaration right after the declaration of 'size'.
+  *
+  *  Don't do this if there is already a `static void getrnge' declaration
+  *  present, since this would cause a redeclaration error.  Solaris 2.x has
+  *  such a declaration.
+  */
+ fix = {
+     hackname  = svr4_undeclared_getrnge;
+     files     = regexp.h;
+     select    = "getrnge";
+     bypass    = "static void getrnge";
+     c_fix     = format;
+     c_fix_arg = "%0\n"
+                 "static int getrnge ();";
+     c_fix_arg = "^static int[ \t]+size;";
+     test_text = "static int size;\n"
+                 "/* stuff which calls getrnge() */\n"
+                 "static getrnge()\n"
+                 "{}";
+ };
+ 
+ 
+ /*
+  *  Like svr4_mach_defines, but with newfangled syntax.
+  *  Source lines are of #define __i386 #machine(i386).   Delete them.
+  */
+ #ifdef SVR5
+ fix = {
+     hackname = svr5_mach_defines;
+     files    = ieeefp.h;
+     select   = "#define[ \t]*__i386.*\(i386\)";
+     sed      = "/#define[ \t]*__i386.*/d";
+ };
+ #endif /*  SVR5 */
+ 
+ 
+ /*
+  *  Fix return value of mem{ccpy,chr,cpy,set} and str{len,spn,cspn}
+  *  in string.h on sysV68
+  *  Correct the return type for strlen in string.h on Lynx.
+  *  Correct the argument type for ffs in string.h on Alpha OSF/1 V2.0.
+  *  Add missing const for strdup on OSF/1 V3.0.
+  *  On sysV88 layout is slightly different.
+  */
+ fix = {
+     hackname = sysv68_string;
+     files    = testing.h;
+     files    = string.h;
+     bypass   = "_CLASSIC_ANSI_TYPES";
+ 
+     sed = "s/extern[ \t]*int[ \t]*strlen();/extern unsigned int strlen();/";
+     sed = "s/extern[ \t]*int[ \t]*ffs[ \t]*(long);/extern int ffs(int);/";
+     sed = "s/strdup(char \\*s1);/strdup(const char *s1);/";
+ 
+     sed = "/^extern char$/N";
+     sed = "s/^extern char\\(\\n\t\\*memccpy(),\\)$/extern void\\1/";
+ 
+     sed = "/^extern int$/N";
+     sed = "s/^extern int\\(\\n\tstrlen(),\\)/extern size_t\\1/";
+ 
+     sed = "/^\tstrncmp(),$/N";
+     sed = 's/^\(' "\t" 'strncmp()\),\n\(' "\t" 'strlen(),\)$/'
+             '\1;' "\\\nextern unsigned int\\\n\\2/";
+ 
+     test_text =
+     "extern int strlen();\n"
+ 
+     "extern int ffs(long);\n"
+ 
+     "extern char\n"
+     "\t*memccpy(),\n"
+     "\tmemcpy();\n"
+ 
+     "extern int\n"
+     "\tstrcmp(),\n"
+     "\tstrncmp(),\n"
+     "\tstrlen(),\n"
+     "\tstrspn();\n"
+ 
+     "extern int\n"
+     "\tstrlen(), strspn();";
+ };
+ 
+ 
+ /*
+  *  Fix return type of calloc, malloc, realloc, bsearch and exit
+  */
+ fix = {
+     hackname = sysz_stdlib_for_sun;
+     files    = stdlib.h;
+     bypass   = "_CLASSIC_ANSI_TYPES";
+ 
+     select    = "char[ \t]*\\*[ \t]*(calloc|malloc|realloc|bsearch)[ \t]*\\(";
+     c_fix     = format;
+     c_fix_arg = "void *\t%1(";
+ 
+     test_text =
+     "extern char*\tcalloc(size_t);\n"
+     "extern char*\tmalloc(size_t);\n"
+     "extern char*\trealloc(void*,size_t);\n"
+     "extern char*\tbsearch(void*,size_t,size_t);\n";
+ };
+ 
+ 
+ /*
+  * __thread is now a keyword.
+  */
+ fix = {
+     hackname  = thread_keyword;
+     files     = "pthread.h";
+     files     = "bits/sigthread.h";
+     select    = "([* ])__thread([,)])";
+     c_fix     = format;
+     c_fix_arg = "%1__thr%2";
+ 
+     test_text =
+ 	"extern int pthread_create (pthread_t *__restrict __thread,\n"
+ 	"extern int pthread_kill (pthread_t __thread, int __signo);\n"
+ 	"extern int pthread_cancel (pthread_t __thread);";
+ };
+ 
+ /*
+  *  if the #if says _cplusplus, not the double underscore __cplusplus
+  *  that it should be
+  */
+ fix = {
+     hackname = tinfo_cplusplus;
+     files    = tinfo.h;
+     select   = "[ \t]_cplusplus";
+ 
+     c_fix     = format;
+     c_fix_arg = " __cplusplus";
+     test_text = "#ifdef _cplusplus\nint bogus;\n#endif";
+ };
+ 
+ 
+ /*
+  *  function parameter to atexit is missing "void" on VAX Ultrix 4.3.
+  */
+ fix = {
+     hackname = ultrix_atexit_param;
+     files    = stdlib.h;
+     select   = 'atexit\(.*\(\)';
+ 
+     c_fix     = format;
+     c_fix_arg = "atexit( void (*__func)( void )";
+ 
+     test_text = "int atexit( void (*__func)() );\n";
+ };
+ 
+ 
+ /*
+  *  parameter to atof not const on DECstation Ultrix V4.0 and NEWS-OS 4.2R.
+  */
+ fix = {
+     hackname = ultrix_atof_param;
+     files    = math.h;
+     select   = "atof\\([ \t]*char";
+ 
+     c_fix     = format;
+     c_fix_arg = "atof(const char";
+ 
+     test_text = "extern double atof( char *__nptr);\n";
+ };
+ 
+ 
+ /*
+  *  parameters not const on DECstation Ultrix V4.0 and OSF/1.
+  */
+ fix = {
+     hackname  = ultrix_const;
+     files     = stdio.h;
+     select    = 'perror\( char \*';
+ 
+     c_fix     = format;
+     c_fix_arg = "%1 const %3 *__";
+     c_fix_arg = "([ \t*](perror|fputs|fwrite|scanf|fscanf)\\(.*)"
+                 "[ \t]+(char|void) \\*__";
+ 
+     test_text =
+     "extern void perror( char *__s );\n"
+     "extern int fputs( char *__s, FILE *);\n"
+     "extern size_t fwrite( void *__ptr, size_t, size_t, FILE *);\n"
+     "extern int fscanf( FILE *__stream, char *__format, ...);\n"
+     "extern int scanf( char *__format, ...);\n";
+ };
+ 
+ 
+ /*
+  *  parameters not const on DECstation Ultrix V4.0 and OSF/1.
+  */
+ fix = {
+     hackname  = ultrix_const2;
+     files     = stdio.h;
+ 
+     select    = '\*fopen\( char \*';
+     c_fix     = format;
+     c_fix_arg = "%1( const char *%3, const char *";
+     c_fix_arg = "([ \t*](fopen|sscanf|popen|tempnam))\\("
+                "[ \t]*char[ \t]*\\*([^,]*),"
+                "[ \t]*char[ \t]*\\*[ \t]*";
+ 
+     test_text =
+     "extern FILE *fopen( char *__filename, char *__type );\n"
+     "extern int sscanf( char *__s, char *__format, ...);\n"
+     "extern FILE *popen(char *, char *);\n"
+     "extern char *tempnam(char*,char*);\n";
+ };
+ 
+ 
+ /*
+  *  parameters not const on Ultrix V4.3.
+  */
+ fix = {
+     hackname  = ultrix_const3;
+     files     = stdio.h;
+     select    = 'fdopen\( .*, char \*';
+ 
+     c_fix     = format;
+     c_fix_arg = "%1 const %3 *__";
+     c_fix_arg = "([ \t*](fdopen)\\(.*)"
+                 "[ \t]+(char|void) \\*__";
+ 
+     test_text =
+     "extern FILE *	fdopen( int __filedes, char *__type );\n";
+ };
+ 
+ 
+ /*
+  * Ultrix V4.[35] puts the declaration of uname before the definition
+  * of struct utsname, so the prototype (added by fixproto) causes havoc.
+  */
+ fix = {
+     hackname = ultrix_fix_fixproto;
+     files    = sys/utsname.h;
+     select   = ULTRIX;
+ 
+     c_fix     = format;
+     c_fix_arg = "struct utsname;\n%0";
+     c_fix_arg = "^[ \t]*extern[ \t]*int[ \t]*uname\\(\\);";
+ 
+     test_text =
+     "/* ULTRIX's uname */\nextern\tint\tuname();";
+ };
+ 
+ 
+ /*
+  *  Check for bad #ifdef line (in Ultrix 4.1)
+  */
+ fix = {
+     hackname = ultrix_ifdef;
+     select   = "^#ifdef KERNEL[ \t]+&&";
+     files    = sys/file.h;
+ 
+     c_fix     = format;
+     c_fix_arg = "#if defined(KERNEL) &&";
+ 
+     test_text =
+     "#ifdef KERNEL\t&& defined( mumbojumbo )\nint oops;\n#endif";
+ };
+ 
+ 
+ /*
+  *  Add once-only latch to Ultrix V4.3 locale.h.
+  */
+ fix = {
+     hackname = ultrix_locale;
+     files  = locale.h;
+     select = "@\\(#\\)locale\\.h.*6\\.1.*\\(ULTRIX\\)";
+     c_fix  = wrap;
+     test_text =
+     "@(#)locale.h   6.1     (ULTRIX)\n";
+ };
+ 
+ 
+ /*
+  * Strip "|| CC$gfloat" from Ultrix math headers.
+  */
+ fix = {
+     hackname  = ultrix_math_ifdef;
+     files     = sys/limits.h;
+     files     = float.h;
+     files     = math.h;
+     select    = "^(#if.*)\\|\\|[ \t]+CC\\$[a-z]+";
+     c_fix     = format;
+     c_fix_arg = "%1";
+ 
+     test_text = '#if     defined(__GFLOAT) || CC\$gfloat';
+ };
+ 
+ 
+ /*
+  *  Avoid nested comments on Ultrix 4.3.
+  */
+ fix = {
+     hackname = ultrix_nested_ioctl;
+     files    = sys/ioctl.h;
+     select   = "^/\\* #define SIOCSCREEN";
+     sed      = "/^\\/\\* #define SIOCSCREEN/s@/\\* screend@*//* screend@";
+     test_text =
+     "/* #define SIOCSCREENON _IOWR('i', 49, int)"
+     "/* screend, net/gw_screen.h */\n";
+ };
+ 
+ 
+ fix = {
+     hackname = ultrix_nested_svc;
+     files    = rpc/svc.h;
+     select   = "^ \\*[ \t]*int protocol;  */\\*";
+     sed      = "s@^\\( \\*\tint protocol;  \\)/\\*@\\1*/ /*@";
+     test_text =
+     " *\tint protocol;  /* like TCP or UDP\n";
+ };
+ 
+ 
+ /*
+  *  Add missing prototype for lstat and define for S_ISLNK
+  *  in Ultrix V4.3 sys/stat.h.
+  */
+ fix = {
+     hackname = ultrix_stat;
+     files  = sys/stat.h;
+     select = "@\\(#\\)stat\\.h.*6\\.1.*\\(ULTRIX\\)";
+     sed    = "/^#define[ \t]S_IFPORT[ \t]*S_IFIFO$/a\\\n"
+ 		"\\\n"
+ 		"/* macro to test for symbolic link */\\\n"
+ 		"#define S_ISLNK(mode) (((mode) & S_IFMT) == S_IFLNK)\\\n"
+ 		"\n";
+     sed    = "/^[ \t]*fstat(),$/a\\\n"
+ 		"\tlstat(),\n";
+     test_text =
+     "@(#)stat.h      6.1     (ULTRIX)\n"
+     "#define S_IFPORT S_IFIFO\n"
+     "\tfstat(),\n/* THE INSERTION LINE FAILS ON BSD SYSTEMS */";
+ };
+ 
+ 
+ /*
+  *  Check for superfluous `static' (in Ultrix 4.2)
+  *  On Ultrix 4.3, includes of other files (r3_cpu.h,r4_cpu.h) is broken.
+  */
+ fix = {
+     hackname = ultrix_static;
+     files  = machine/cpu.h;
+     select = '#include "r[34]_cpu';
+     sed    = "s/^static struct tlb_pid_state/struct tlb_pid_state/";
+     sed    = 's/^#include "r3_cpu\.h"$/#include <machine\/r3_cpu\.h>/';
+     sed    = 's/^#include "r4_cpu\.h"$/#include <machine\/r4_cpu\.h>/';
+     test_text =
+     "static struct tlb_pid_state {\n"
+     "#include \"r3_cpu.h\"\n";
+ };
+ 
+ 
+ /*
+  *  Add missing declarations to Ultrix V4.3 stdlib.h.
+  */
+ fix = {
+     hackname = ultrix_stdlib;
+     files  = stdlib.h;
+     select = "@\\(#\\)stdlib\\.h.*6\\.1.*\\(ULTRIX\\)";
+ 
+     sed    = "/^char.*getenv( const char .* );.*$/a\\\n"
+     "int\t\tsetenv( const char *__name, const char *__val, int __ovrwrt );\\\n"
+     "void\t\tunsetenv( const char *__name );\\\n"
+     "int\t\tputenv( char *__s );\n";
+ 
+     sed    = "/^char.*getenv();.*$/a\\\n"
+     "int\tsetenv();\\\n"
+     "void\tunsetenv();\\\n"
+     "int\tputenv();\n";
+ 
+     test_text =
+     "@(#)stdlib.h      6.1     (ULTRIX)\n"
+     "char *		getenv( const char *__name );\n"
+     "char	*getenv();\n";
+ };
+ 
+ 
+ /*
+  *  Add once-only latch to Ultrix V4.3 strings.h.
+  */
+ fix = {
+     hackname = ultrix_strings;
+     files  = strings.h;
+     select = "@\\(#\\)strings\\.h.*6\\.1.*\\(ULTRIX\\)";
+     c_fix  = wrap;
+     test_text =
+     "@(#)strings.h   6.1     (ULTRIX)\n";
+ };
+ 
+ 
+ /*
+  *  Add missing declarations to Ultrix V4.3 strings.h.
+  */
+ fix = {
+     hackname = ultrix_strings2;
+     files  = strings.h;
+     select = "@\\(#\\)strings\\.h.*6\\.1.*\\(ULTRIX\\)";
+ 
+     sed    = "/^.*strncmp( const .* );.*/a\\\n"
+     "\\\n"
+     "extern int\\\n"
+     "\tstrcasecmp( const char *__s1, const char *__s2),\\\n"
+     "\tstrncasecmp( const char *__s1, const char *__s2, size_t __n );\n";
+ 
+     sed    = "/^.*strncmp();.*/a\\\n"
+     "extern int\\\n"
+     "\tstrcasecmp(),\\\n"
+     "\tstrncasecmp();\n";
+ 
+     test_text =
+     "@(#)strings.h      6.1     (ULTRIX)\n"
+     "\tstrncmp( const char *__s1, const char *__s2, size_t __n );\n"
+     "\tstrncmp();\n";
+ };
+ 
+ 
+ /*
+  *  Add missing declarations to Ultrix V4.3 sys/time.h.
+  */
+ fix = {
+     hackname = ultrix_sys_time;
+     files  = sys/time.h;
+     select = "@\\(#\\)time\\.h.*6\\.1.*\\(ULTRIX\\)";
+ 
+     sed    = "/^extern.*time_t.*time( time_t .* );.*$/a\\\n"
+     "\\\n"
+     "extern int adjtime(struct timeval *, struct timeval *);\\\n"
+     "extern int getitimer(int, struct itimerval *);\\\n"
+     "extern int setitimer(int, struct itimerval *, struct itimerval *);\\\n"
+     "extern int gettimeofday(struct timeval *, struct timezone *);\\\n"
+     "extern int settimeofday(struct timeval *, struct timezone *);\\\n"
+     "extern void profil(const void *, size_t, size_t, unsigned int);\\\n"
+     "extern int stime(const time_t *);\\\n"
+     "extern int utimes(const char *, const struct timeval[2]);\\\n"
+     "extern int select(int, fd_set *, fd_set *, fd_set *, struct timeval *);\n";
+ 
+     sed    = "/^extern.*double.*difftime();.*$/a\\\n"
+     "extern\tint adjtime();\\\n"
+     "extern\tint getitimer();\\\n"
+     "extern\tint setitimer();\\\n"
+     "extern\tint gettimeofday();\\\n"
+     "extern\tint settimeofday();\\\n"
+     "extern\tvoid profil();\\\n"
+     "extern\tint stime();\\\n"
+     "extern\tint utimes();\\\n"
+     "extern\tint select();\n";
+ 
+     test_text =
+     "@(#)time.h      6.1     (ULTRIX)\n"
+     "extern time_t		time( time_t *__tloc );\n"
+     "extern double difftime();\n";
+ };
+ 
+ 
+ /*
+  *  Add missing declarations to Ultrix V4.3 unistd.h.
+  */
+ fix = {
+     hackname = ultrix_unistd;
+     files  = unistd.h;
+     select = "@\\(#\\)unistd\\.h.*6\\.1.*\\(ULTRIX\\)";
+ 
+     sed    = "/^[ \t]*getgroups(),.*$/a\\\n"
+     "\tgetpagesize(),\n";
+ 
+     sed    = "/^[ \t]*fork(),.*$/a\\\n"
+     "\tvfork(),\n";
+ 
+     test_text =
+     "@(#)unistd.h      6.1     (ULTRIX)\n"
+     "\tgetgroups(),\n"
+     "\tfork(),\n";
+ };
+ 
+ 
+ /*
+  * On Cray Unicos/Mk some standard headers use the C99 keyword "restrict"
+  * which must be replaced by __restrict__ for GCC.
+  */
+ fix = {
+     hackname = unicosmk_restrict;
+     files    = stdio.h;
+     files    = stdlib.h;
+     files    = wchar.h;
+     mach     = "*-*-unicosmk*";
+     select   = "(\\*[ \t]*)restrict([ \t]+)";
+ 
+     c_fix     = format;
+     c_fix_arg = "%1__restrict__%2";
+ 
+     test_text = "void f (char * restrict x);";
+ };
+ 
+ /*
+  * If arpa/inet.h prototypes are incompatible with the ones we just
+  * installed in <sys/byteorder.h>, just remove the protos.
+  * Because of this close association, this patch must be applied only
+  * on those systems where the replacement byteorder header is installed.
+  */
+ fix = {
+     hackname = uw7_byteorder_fix;
+     files    = arpa/inet.h;
+     select   = "in_port_t";
+     test     = "-f sys/byteorder.h";
+ #ifndef SVR5
+ 	mach = "*-*-sysv4*";
+ 	mach = "i?86-*-sysv5*";
+ 	mach = "i?86-*-udk*";
+ 	mach = "i?86-*-solaris2.[0-4]";
+ 	mach = "powerpcle-*-solaris2.[0-4]";
+ 	mach = "sparc-*-solaris2.[0-4]";
+ #endif /* SVR5 */
+ 
+     c_fix     = format;
+     c_fix_arg = "";
+     c_fix_arg = "^extern.*[ \t](htons|ntohs).*\\(in_port_t\\).*;";
+ 
+     test_text = "extern in_port_t\thtons __P((in_port_t));\n"
+                 "extern in_port_t\tntohs __P((in_port_t));"
+                 "`[ ! -d $DESTDIR/sys ] && mkdir $DESTDIR/sys\n"
+                 "echo '/* DUMMY */' >> sys/byteorder.h`";
+ };
+ 
+ 
+ /*
+  *  Fix definitions of macros used by va-i960.h in VxWorks header file.
+  */
+ fix = {
+     hackname  = va_i960_macro;
+     files     = arch/i960/archI960.h;
+     select    = "__(vsiz|vali|vpad|alignof__)";
+ 
+     c_fix     = format;
+     c_fix_arg = "__vx%1";
+ 
+     test_text =
+     "extern int __vsiz vsiz;\n"
+     "extern int __vali vali;\n"
+     "extern int __vpad vpad;\n"
+     "#define __alignof__(x) ...";
+ };
+ 
+ 
+ /*
+  *  AIX and Interix headers define NULL to be cast to a void pointer,
+  *  which is illegal in ANSI C++.
+  */
+ fix = {
+     hackname  = void_null;
+     files     = curses.h;
+     files     = dbm.h;
+     files     = locale.h;
+     files     = stdio.h;
+     files     = stdlib.h;
+     files     = string.h;
+     files     = time.h;
+     files     = unistd.h;
+     files     = sys/dir.h;
+     files     = sys/param.h;
+     files     = sys/types.h;
+     /* avoid changing C++ friendly NULL */
+     bypass    = __cplusplus;
+     select    = "^#[ \t]*define[ \t]+NULL[ \t]+\\(\\(void[ \t]*\\*\\)0\\)";
+     c_fix     = format;
+     c_fix_arg = "#define NULL 0";
+     test_text = "# define\tNULL \t((void *)0)  /* typed NULL */";
+ };
+ 
+ 
+ /*
+  *  Make VxWorks header which is almost gcc ready fully gcc ready.
+  */
+ fix = {
+     hackname = vxworks_gcc_problem;
+     files    = types/vxTypesBase.h;
+     select   = "__GNUC_TYPEOF_FEATURE_BROKEN_USE_DEFAULT_UNTIL_FIXED__";
+ 
+     sed = "s/#ifdef __GNUC_TYPEOF_FEATURE_BROKEN_USE_DEFAULT_UNTIL_FIXED__/"
+           "#if 1/";
+ 
+     sed = "/[ \t]size_t/i\\\n"
+         "#ifndef _GCC_SIZE_T\\\n"
+         "#define _GCC_SIZE_T\n";
+ 
+     sed = "/[ \t]size_t/a\\\n"
+         "#endif\n";
+ 
+     sed = "/[ \t]ptrdiff_t/i\\\n"
+         "#ifndef _GCC_PTRDIFF_T\\\n"
+         "#define _GCC_PTRDIFF_T\n";
+ 
+     sed = "/[ \t]ptrdiff_t/a\\\n"
+         "#endif\n";
+ 
+     sed = "/[ \t]wchar_t/i\\\n"
+         "#ifndef _GCC_WCHAR_T\\\n"
+         "#define _GCC_WCHAR_T\n";
+ 
+     sed = "/[ \t]wchar_t/a\\\n"
+         "#endif\n";
+ 
+     test_text =
+     "#ifdef __GNUC_TYPEOF_FEATURE_BROKEN_USE_DEFAULT_UNTIL_FIXED__\n"
+     "typedef unsigned int size_t;\n"
+     "typedef long ptrdiff_t;\n"
+     "typedef unsigned short wchar_t;\n"
+     "#endif /* __GNUC_TYPEOF_FEATURE_BROKEN_USE_DEFAULT_UNTIL_FIXED__ */\n";
+ };
+ 
+ 
+ /*
+  *  Fix VxWorks <time.h> to not require including <vxTypes.h>.
+  */
+ fix = {
+     hackname  = vxworks_needs_vxtypes;
+     files     = time.h;
+     select    = "uint_t([ \t]+_clocks_per_sec)";
+     c_fix     = format;
+     c_fix_arg = "unsigned int%1";
+     test_text = "uint_t\t_clocks_per_sec;";
+ };
+ 
+ 
+ /*
+  *  Fix VxWorks <sys/stat.h> to not require including <vxWorks.h>.
+  */
+ fix = {
+     hackname = vxworks_needs_vxworks;
+     files    = sys/stat.h;
+     test     = " -r types/vxTypesOld.h";
+     test     = " -n \"`egrep '#include' $file`\"";
+     test     = " -n \"`egrep ULONG $file`\"";
+     select   = "#[ \t]define[ \t]+__INCstath";
+ 
+     sed = "/#[ \t]define[ \t][ \t]*__INCstath/a\\\n"
+           "#include <types/vxTypesOld.h>\n";
+ 
+     test_text = "`touch types/vxTypesOld.h`"
+     "#include </dev/null> /* ULONG */\n"
+     "# define\t__INCstath <sys/stat.h>";
+ };
+ 
+ 
+ /*
+  *  Another bad dependency in VxWorks 5.2 <time.h>.
+  */
+ fix = {
+     hackname = vxworks_time;
+     files    = time.h;
+     test     = " -r vxWorks.h";
+ 
+     select    = "#[ \t]*define[ \t]+VOIDFUNCPTR[ \t].*";
+     c_fix     = format;
+ 
+     c_fix_arg =
+     "#ifndef __gcc_VOIDFUNCPTR_defined\n"
+     "#ifdef __cplusplus\n"
+     "typedef void (*__gcc_VOIDFUNCPTR) (...);\n"
+     "#else\n"
+     "typedef void (*__gcc_VOIDFUNCPTR) ();\n"
+     "#endif\n"
+     "#define __gcc_VOIDFUNCPTR_defined\n"
+     "#endif\n"
+     "#define VOIDFUNCPTR __gcc_VOIDFUNCPTR";
+ 
+     test_text = "`touch vxWorks.h`"
+                 "#define VOIDFUNCPTR (void(*)())";
+ };
+ 
+ 
+ /* 
+  * WindISS math.h headers include bogus extern declarations of 
+  * numerous math functions that conflict with libstdc++-v3.
+  */
+ fix = {
+     hackname  = windiss_math1;
+     files     = math.h;
+     mach      = "*-*-windiss";
+     sed       = "s|inline long double cosl.*|#ifndef __GNUC__|";
+ 
+     test_text = "inline long double cosl(long double);";
+ };
+ 
+ fix = {
+     hackname  = windiss_math2;
+     files     = math.h;
+     mach      = "*-*-windiss";
+     sed       = "s|/\\* long double declarations \\*/|"
+                   "#endif /* __GNUC__ */|";
+ 
+     test_text = "/* long double declarations */";
+ };
+ 
+ /*
+  * WindISS headers include "diab/va_list.h" instead of "stdarg.h"
+  */
+ fix = {
+     select    = '(#include.*)diab/va_list.h';
+     hackname  = windiss_valist;
+     sed       = "s|diab/va_list.h|stdarg.h|";
+     mach      = "*-*-windiss";
+ 
+     test_text = "#include <diab/va_list.h>";
+ };
+ 
+ /*
+  *  There are several name conflicts with C++ reserved words in X11 header
+  *  files.  These are fixed in some versions, so don't do the fixes if
+  *  we find __cplusplus in the file.  These were found on the RS/6000.
+  */
+ fix = {
+     hackname  = x11_class;
+     files     = X11/ShellP.h;
+     bypass    = __cplusplus;
+     select    = "^([ \t]*char \\*)class;(.*)";
+     c_fix     = format;
+     c_fix_arg = "#ifdef __cplusplus\n%1c_class;%2\n"
+                 "#else\n%1class;%2\n#endif";
+     test_text =
+     "struct {\n"
+     "   char *class;\n"
+     "} mumble;\n";
+ };
+ 
+ 
+ /*
+  *  class in Xm/BaseClassI.h
+  */
+ fix = {
+     hackname = x11_class_usage;
+     files    = Xm/BaseClassI.h;
+     bypass   = "__cplusplus";
+ 
+     select    = " class\\)";
+     c_fix     = format;
+     c_fix_arg = " c_class)";
+ 
+     test_text = "extern mumble (int  class);\n";
+ };
+ 
+ 
+ /*
+  *  new in Xm/Traversal.h
+  */
+ fix = {
+     hackname = x11_new;
+     files    = Xm/Traversal.h;
+     bypass   = __cplusplus;
+ 
+     sed      = "/Widget\told, new;/i\\\n"
+                    "#ifdef __cplusplus\\\n"
+                    "\tWidget\told, c_new;\\\n"
+                    "#else\n";
+ 
+     sed      = "/Widget\told, new;/a\\\n"
+                    "#endif\n";
+ 
+     sed      = "s/Widget new,/Widget c_new,/g";
+     test_text =
+     "struct wedge {\n"
+     "   Widget\told, new; /* fixinc check FAILS ON BSD */\n"
+     "};\nextern Wedged( Widget new, Widget old );";
+ };
+ 
+ 
+ /*
+  *  Incorrect sprintf declaration in X11/Xmu.h
+  */
+ fix = {
+     hackname = x11_sprintf;
+     files    = X11/Xmu.h;
+     files    = X11/Xmu/Xmu.h;
+     select   = "^extern char \\*\tsprintf\\(\\);$";
+ 
+     c_fix     = format;
+     c_fix_arg = "#ifndef __STDC__\n%0\n#endif /* !defined __STDC__ */";
+ 
+     test_text = "extern char *\tsprintf();";
+ };
+ 
+ /*EOF*/
diff -Nrcpad gcc-3.4.3/fixincludes/mkfixinc.sh gcc-4.0.0/fixincludes/mkfixinc.sh
*** gcc-3.4.3/fixincludes/mkfixinc.sh	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/mkfixinc.sh	Tue Nov 23 22:45:53 2004
***************
*** 0 ****
--- 1,41 ----
+ #! /bin/sh
+ 
+ if [ $# -ne 1 ]
+ then
+   echo "Usage: $0 <target-mach-triplet>"
+   exit 1
+ fi
+ 
+ machine=$1
+ target=fixinc.sh
+ 
+ # Check for special fix rules for particular targets
+ case $machine in
+     alpha*-dec-*vms* | \
+     arm-semi-aof | \
+     hppa1.1-*-osf* | \
+     hppa1.1-*-bsd* | \
+     i370-*-openedition | \
+     i?86-moss-msdos* | \
+     i?86-*-moss* | \
+     i?86-*-pe | \
+     i?86-*-cygwin* | \
+     i?86-*-mingw32* | \
+     i?86-*-uwin* | \
+     i?86-*-interix* | \
+     powerpc-*-eabiaix* | \
+     powerpc-*-eabisim* | \
+     powerpc-*-eabi*    | \
+     powerpc-*-rtems*   | \
+     powerpcle-*-eabisim* | \
+     powerpcle-*-eabi* )
+ 	#  IF there is no include fixing,
+ 	#  THEN create a no-op fixer and exit
+ 	(echo "#! /bin/sh" ; echo "exit 0" ) > ${target}
+         ;;
+ 
+     *)
+ 	cat < ${srcdir}/fixinc.in > ${target} || exit 1
+ 	;;
+ esac
+ chmod 755 ${target}
diff -Nrcpad gcc-3.4.3/fixincludes/mkheaders.in gcc-4.0.0/fixincludes/mkheaders.in
*** gcc-3.4.3/fixincludes/mkheaders.in	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/mkheaders.in	Tue Nov 23 22:45:53 2004
***************
*** 0 ****
--- 1,96 ----
+ #!/bin/sh
+ 
+ # Copyright (C) 2002 Free Software Foundation, Inc.
+ 
+ #This file is part of GCC.
+ 
+ #GCC is free software; you can redistribute it and/or modify it under
+ #the terms of the GNU General Public License as published by the Free
+ #Software Foundation; either version 2, or (at your option) any later
+ #version.
+ 
+ #GCC is distributed in the hope that it will be useful, but WITHOUT
+ #ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ #FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ #for more details.
+ 
+ #You should have received a copy of the GNU General Public License
+ #along with GCC; see the file COPYING.  If not, write to the Free
+ #Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+ #02111-1307, USA.
+ 
+ # Basic information
+ target=@target@
+ target_noncanonical=@target_noncanonical@
+ version=@gcc_version@
+ 
+ VERBOSE=0
+ while [ x$1 = x-v ] ; do
+     shift
+     VERBOSE=`expr $VERBOSE + 1`
+ done
+ export VERBOSE
+ 
+ if [ x$1 = x--help ] ; then
+     echo "Usage: mkheaders [options] [prefix]"
+     echo "Options:"
+     echo "  -v        Print more output (may be repeated for even more output)"
+     echo "  --help    This help"
+     echo "  --version Print version information"
+     exit 0
+ fi
+ 
+ if [ x$1 = x--version ] ; then
+     echo "mkheaders (GCC) version $version"
+     echo "Copyright 2002 Free Software Foundation, Inc."
+     echo "This program is free software; you may redistribute it under the"
+     echo "terms of the GNU General Public License.  This program has"
+     echo "absolutely no warranty."
+     exit 0
+ fi
+ 
+ # Common prefix for installation directories.
+ if [ x$1 != x ] ; then
+   prefix=$1
+ else
+   prefix=@prefix@
+ fi
+ # Directory in which to put host dependent programs and libraries
+ exec_prefix=@exec_prefix@
+ # Directory in which to put the directories used by the compiler.
+ libdir=@libdir@
+ libexecdir=@libexecdir@
+ # Directory in which the compiler finds libraries, etc.
+ libsubdir=${libdir}/gcc/${target_noncanonical}/${version}
+ # Directory in which the compiler finds executables
+ libexecsubdir=${libexecdir}/gcc/${target_noncanonical}/${version}
+ 
+ itoolsdir=${libexecsubdir}/install-tools
+ itoolsdatadir=${libsubdir}/install-tools
+ incdir=${libsubdir}/include
+ 
+ . ${itoolsdatadir}/mkheaders.conf
+ 
+ cd ${itoolsdir}
+ rm -rf ${incdir}/*
+ 
+ if [ x${STMP_FIXINC} != x ] ; then
+ 	TARGET_MACHINE="${target}" target_canonical="${target}" \
+ 	    MACRO_LIST="${itoolsdatadir}/macro_list" \
+ 	    @SHELL@ ./fixinc.sh ${incdir} \
+ 	    ${SYSTEM_HEADER_DIR} ${OTHER_FIXINCLUDES_DIRS}
+ 	rm -f ${incdir}/syslimits.h
+ 	if [ -f ${incdir}/limits.h ]; then
+ 	  mv ${incdir}/limits.h ${incdir}/syslimits.h
+ 	else
+ 	  cp ${itoolsdatadir}/gsyslimits.h ${incdir}/syslimits.h
+ 	fi
+ fi
+ 
+ cp ${itoolsdatadir}/include/* ${incdir}
+ 
+ if [ x${STMP_FIXPROTO} != x ] ; then
+   mkinstalldirs="@SHELL@ ${itoolsdir}/mkinstalldirs"
+   export FIXPROTO_DEFINES mkinstalldirs
+   @SHELL@ fixproto ${incdir} ${incdir} ${SYSTEM_HEADER_DIR} || exit 1
+ fi
diff -Nrcpad gcc-3.4.3/fixincludes/procopen.c gcc-4.0.0/fixincludes/procopen.c
*** gcc-3.4.3/fixincludes/procopen.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/procopen.c	Wed Oct 20 08:21:09 2004
***************
*** 0 ****
--- 1,218 ----
+ 
+ /*
+  *  server.c  Set up and handle communications with a server process.
+  *
+  *  Server Handling copyright 1992-1999, 2004 The Free Software Foundation
+  *
+  *  Server Handling is free software.
+  *  You may redistribute it and/or modify it under the terms of the
+  *  GNU General Public License, as published by the Free Software
+  *  Foundation; either version 2, or (at your option) any later version.
+  *
+  *  Server Handling is distributed in the hope that it will be useful,
+  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  *  GNU General Public License for more details.
+  *
+  *  You should have received a copy of the GNU General Public License
+  *  along with Server Handling.  See the file "COPYING".  If not,
+  *  write to:  The Free Software Foundation, Inc.,
+  *             59 Temple Place - Suite 330,
+  *             Boston,  MA  02111-1307, USA.
+  *
+  * As a special exception, The Free Software Foundation gives
+  * permission for additional uses of the text contained in his release
+  * of ServerHandler.
+  *
+  * The exception is that, if you link the ServerHandler library with other
+  * files to produce an executable, this does not by itself cause the
+  * resulting executable to be covered by the GNU General Public License.
+  * Your use of that executable is in no way restricted on account of
+  * linking the ServerHandler library code into it.
+  *
+  * This exception does not however invalidate any other reasons why
+  * the executable file might be covered by the GNU General Public License.
+  *
+  * This exception applies only to the code released by The Free
+  * Software Foundation under the name ServerHandler.  If you copy code
+  * from other sources under the General Public License into a copy of
+  * ServerHandler, as the General Public License permits, the exception
+  * does not apply to the code that you add in this way.  To avoid
+  * misleading anyone as to the status of such modified files, you must
+  * delete this exception notice from them.
+  *
+  * If you write modifications of your own for ServerHandler, it is your
+  * choice whether to permit this exception to apply to your modifications.
+  * If you do not wish that, delete this exception notice.
+  */
+ 
+ #include "fixlib.h"
+ #include "server.h"
+ 
+ STATIC const char* def_args[] =
+ { (char *) NULL, (char *) NULL };
+ 
+ /*
+  *  chain_open
+  *
+  *  Given an FD for an inferior process to use as stdin,
+  *  start that process and return a NEW FD that that process
+  *  will use for its stdout.  Requires the argument vector
+  *  for the new process and, optionally, a pointer to a place
+  *  to store the child's process id.
+  */
+ int
+ chain_open (int stdin_fd, tCC** pp_args, pid_t* p_child)
+ {
+   t_fd_pair stdout_pair;
+   pid_t ch_id;
+   tCC *pz_cmd;
+ 
+   stdout_pair.read_fd = stdout_pair.write_fd = -1;
+ 
+   /*
+    *  Create a pipe it will be the child process' stdout,
+    *  and the parent will read from it.
+    */
+   if (pipe ((int *) &stdout_pair) < 0)
+     {
+       if (p_child != (pid_t *) NULL)
+         *p_child = NOPROCESS;
+       return -1;
+     }
+ 
+   /*
+    *  If we did not get an arg list, use the default
+    */
+   if (pp_args == (tCC **) NULL)
+     pp_args = def_args;
+ 
+   /*
+    *  If the arg list does not have a program,
+    *  assume the "SHELL" from the environment, or, failing
+    *  that, then sh.  Set argv[0] to whatever we decided on.
+    */
+   if (pz_cmd = *pp_args,
+       (pz_cmd == (char *) NULL) || (*pz_cmd == '\0'))
+     {
+ 
+       pz_cmd = getenv ("SHELL");
+       if (pz_cmd == (char *) NULL)
+         pz_cmd = "sh";
+     }
+ 
+ #ifdef DEBUG_PRINT
+   printf ("START:  %s\n", pz_cmd);
+   {
+     int idx = 0;
+     
+     while (pp_args[++idx] != (char *) NULL)
+       printf ("  ARG %2d:  %s\n", idx, pp_args[idx]);
+   }
+ #endif
+ 
+   /*
+    *  Call fork() and see which process we become
+    */
+   ch_id = fork ();
+   switch (ch_id)
+     {
+     case NOPROCESS:             /* parent - error in call */
+       close (stdout_pair.read_fd);
+       close (stdout_pair.write_fd);
+       if (p_child != (pid_t *) NULL)
+         *p_child = NOPROCESS;
+       return -1;
+ 
+     default:                    /* parent - return opposite FD's */
+       if (p_child != (pid_t *) NULL)
+         *p_child = ch_id;
+ #ifdef DEBUG_PRINT
+       printf ("for pid %d:  stdin from %d, stdout to %d\n"
+               "for parent:  read from %d\n",
+               ch_id, stdin_fd, stdout_pair.write_fd, stdout_pair.read_fd);
+ #endif
+       close (stdin_fd);
+       close (stdout_pair.write_fd);
+       return stdout_pair.read_fd;
+ 
+     case NULLPROCESS:           /* child - continue processing */
+       break;
+     }
+ 
+   /*
+    *  Close the pipe end handed back to the parent process
+    */
+   close (stdout_pair.read_fd);
+ 
+   /*
+    *  Close our current stdin and stdout
+    */
+   close (STDIN_FILENO);
+   close (STDOUT_FILENO);
+ 
+   /*
+    *  Make the fd passed in the stdin, and the write end of
+    *  the new pipe become the stdout.
+    */
+   dup2 (stdout_pair.write_fd, STDOUT_FILENO);
+   dup2 (stdin_fd, STDIN_FILENO);
+ 
+   if (*pp_args == (char *) NULL)
+     *pp_args = pz_cmd;
+ 
+   execvp (pz_cmd, (char**)pp_args);
+   fprintf (stderr, "Error %d:  Could not execvp( '%s', ... ):  %s\n",
+            errno, pz_cmd, xstrerror (errno));
+   exit (EXIT_PANIC);
+ }
+ 
+ 
+ /*
+  *  proc2_open
+  *
+  *  Given a pointer to an argument vector, start a process and
+  *  place its stdin and stdout file descriptors into an fd pair
+  *  structure.  The "write_fd" connects to the inferior process
+  *  stdin, and the "read_fd" connects to its stdout.  The calling
+  *  process should write to "write_fd" and read from "read_fd".
+  *  The return value is the process id of the created process.
+  */
+ pid_t
+ proc2_open (t_fd_pair* p_pair, tCC** pp_args)
+ {
+   pid_t ch_id;
+ 
+   /*  Create a bi-directional pipe.  Writes on 0 arrive on 1 and vice
+      versa, so the parent and child processes will read and write to
+      opposite FD's.  */
+   if (pipe ((int *) p_pair) < 0)
+     return NOPROCESS;
+ 
+   p_pair->read_fd = chain_open (p_pair->read_fd, pp_args, &ch_id);
+   if (ch_id == NOPROCESS)
+     close (p_pair->write_fd);
+ 
+   return ch_id;
+ }
+ 
+ 
+ /*
+  *  proc2_fopen
+  *
+  *  Identical to "proc2_open()", except that the "fd"'s are
+  *  "fdopen(3)"-ed into file pointers instead.
+  */
+ pid_t
+ proc2_fopen (t_pf_pair* pf_pair, tCC** pp_args)
+ {
+   t_fd_pair fd_pair;
+   pid_t ch_id = proc2_open (&fd_pair, pp_args);
+ 
+   if (ch_id == NOPROCESS)
+     return ch_id;
+ 
+   pf_pair->pf_read = fdopen (fd_pair.read_fd, "r");
+   pf_pair->pf_write = fdopen (fd_pair.write_fd, "w");
+   return ch_id;
+ }
diff -Nrcpad gcc-3.4.3/fixincludes/server.c gcc-4.0.0/fixincludes/server.c
*** gcc-3.4.3/fixincludes/server.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/server.c	Tue Aug 31 09:26:05 2004
***************
*** 0 ****
--- 1,305 ----
+ 
+ /*
+  *  server.c  Set up and handle communications with a server process.
+  *
+  *  Server Handling copyright 1992-1999, 2001 The Free Software Foundation
+  *
+  *  Server Handling is free software.
+  *  You may redistribute it and/or modify it under the terms of the
+  *  GNU General Public License, as published by the Free Software
+  *  Foundation; either version 2, or (at your option) any later version.
+  *
+  *  Server Handling is distributed in the hope that it will be useful,
+  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  *  GNU General Public License for more details.
+  *
+  *  You should have received a copy of the GNU General Public License
+  *  along with Server Handling.  See the file "COPYING".  If not,
+  *  write to:  The Free Software Foundation, Inc.,
+  *             59 Temple Place - Suite 330,
+  *             Boston,  MA  02111-1307, USA.
+  *
+  * As a special exception, The Free Software Foundation gives
+  * permission for additional uses of the text contained in his release
+  * of ServerHandler.
+  *
+  * The exception is that, if you link the ServerHandler library with other
+  * files to produce an executable, this does not by itself cause the
+  * resulting executable to be covered by the GNU General Public License.
+  * Your use of that executable is in no way restricted on account of
+  * linking the ServerHandler library code into it.
+  *
+  * This exception does not however invalidate any other reasons why
+  * the executable file might be covered by the GNU General Public License.
+  *
+  * This exception applies only to the code released by The Free
+  * Software Foundation under the name ServerHandler.  If you copy code
+  * from other sources under the General Public License into a copy of
+  * ServerHandler, as the General Public License permits, the exception
+  * does not apply to the code that you add in this way.  To avoid
+  * misleading anyone as to the status of such modified files, you must
+  * delete this exception notice from them.
+  *
+  * If you write modifications of your own for ServerHandler, it is your
+  * choice whether to permit this exception to apply to your modifications.
+  * If you do not wish that, delete this exception notice.
+  */
+ 
+ #include "fixlib.h"
+ #include "server.h"
+ 
+ STATIC volatile enum t_bool read_pipe_timeout;
+ STATIC pid_t server_master_pid = NOPROCESS;
+ 
+ tSCC* def_args[] =
+ { (char *) NULL, (char *) NULL };
+ STATIC t_pf_pair server_pair =
+ { (FILE *) NULL, (FILE *) NULL };
+ STATIC pid_t server_id = NULLPROCESS;
+ /*
+  *  Arbitrary text that should not be found in the shell output.
+  *  It must be a single line and appear verbatim at the start of
+  *  the terminating output line.
+  */
+ tSCC z_done[] = "ShElL-OuTpUt-HaS-bEeN-cOmPlEtEd";
+ tSCC* p_cur_dir = (char *) NULL;
+ 
+ /*
+  *  load_data
+  *
+  *  Read data from a file pointer (a pipe to a process in this context)
+  *  until we either get EOF or we get a marker line back.
+  *  The read data are stored in a malloc-ed string that is truncated
+  *  to size at the end.  Input is assumed to be an ASCII string.
+  */
+ static char *
+ load_data (FILE* fp)
+ {
+   char *pz_text;
+   size_t text_size;
+   char *pz_scan;
+   char z_line[1024];
+   t_bool got_done = BOOL_FALSE;
+ 
+   text_size = sizeof (z_line) * 2;
+   pz_scan = pz_text = xmalloc (text_size);
+ 
+   for (;;)
+     {
+       size_t used_ct;
+ 
+       alarm (10);
+       read_pipe_timeout = BOOL_FALSE;
+       if (fgets (z_line, sizeof (z_line), fp) == (char *) NULL)
+         break;
+ 
+       if (strncmp (z_line, z_done, sizeof (z_done) - 1) == 0)
+ 	{
+ 	  got_done = BOOL_TRUE;
+ 	  break;
+ 	}
+ 
+       strcpy (pz_scan, z_line);
+       pz_scan += strlen (z_line);
+       used_ct = (size_t) (pz_scan - pz_text);
+ 
+       if (text_size - used_ct < sizeof (z_line))
+         {
+           size_t off = (size_t) (pz_scan - pz_text);
+ 	  
+           text_size += 4096;
+           pz_text = xrealloc (pz_text, text_size);
+           pz_scan = pz_text + off;
+         }
+     }
+ 
+   alarm (0);
+   if (read_pipe_timeout || ! got_done)
+     {
+       free ((void *) pz_text);
+       return (char *) NULL;
+     }
+ 
+   while ((pz_scan > pz_text) && ISSPACE (pz_scan[-1]))
+     pz_scan--;
+   *pz_scan = NUL;
+   return xrealloc (pz_text, strlen (pz_text) + 1);
+ }
+ 
+ 
+ /*
+  *  close_server
+  *
+  *  Make certain the server process is dead, close the 
+  *  pipes to it and from it, finally NULL out the file pointers
+  */
+ void
+ close_server (void)
+ {
+   if (  (server_id != NULLPROCESS)
+      && (server_master_pid == getpid ()))
+     {
+       kill ((pid_t) server_id, SIGKILL);
+       server_id = NULLPROCESS;
+       server_master_pid = NOPROCESS;
+       fclose (server_pair.pf_read);
+       fclose (server_pair.pf_write);
+       server_pair.pf_read = server_pair.pf_write = (FILE *) NULL;
+     }
+ }
+ 
+ /*
+  *  sig_handler really only handles the timeout and pipe signals.
+  *  This ensures that we do not wait forever on a request
+  *  to our server, and also that if the server dies, we do not
+  *  die from a sigpipe problem.
+  */
+ static void
+ sig_handler (int signo ATTRIBUTE_UNUSED)
+ {
+ #ifdef DEBUG
+   /* FIXME: this is illegal to do in a signal handler.  */
+   fprintf (stderr,
+           "fixincl ERROR:  sig_handler: killed pid %ld due to %s\n",
+           (long) server_id, signo == SIGPIPE ? "SIGPIPE" : "SIGALRM");
+ #endif
+   close_server ();
+   read_pipe_timeout = BOOL_TRUE;
+ }
+ 
+ 
+ /*
+  *  server_setup  Establish the signal handler for PIPE and ALARM.
+  *  Also establishes the current directory to give to the
+  *  server process at the start of every server command.
+  */
+ static void
+ server_setup (void)
+ {
+   static int atexit_done = 0;
+   char buff [MAXPATHLEN + 1];
+   
+   if (atexit_done++ == 0)
+     atexit (close_server);
+   else
+     fputs ("NOTE: server restarted\n", stderr);
+ 
+   server_master_pid = getpid ();
+ 
+   signal (SIGPIPE, sig_handler);
+   signal (SIGALRM, sig_handler);
+ 
+   fputs ("trap : 1\n", server_pair.pf_write);
+   fflush (server_pair.pf_write);
+   getcwd (buff, MAXPATHLEN + 1);
+   p_cur_dir = xstrdup (buff);
+ }
+ 
+ /*
+  *  find_shell
+  *
+  *  Locate a shell suitable for use.  For various reasons
+  *  (like the use of "trap" in server_setup(), it must be a
+  *  Bourne-like shell.
+  *
+  *  Most of the time, /bin/sh is preferred, but sometimes
+  *  it's quite broken (like on Ultrix).  autoconf lets you
+  *  override with $CONFIG_SHELL, so we do the same.
+  */
+ 
+ static const char *
+ find_shell (void)
+ {
+   char * shell = getenv ("CONFIG_SHELL");
+   if (shell)
+     return shell;
+ 
+   return "/bin/sh";
+ }
+ 
+ 
+ /*
+  *  run_shell
+  *
+  *  Run a shell command on the server.  The command string
+  *  passed in is wrapped inside the sequence:
+  *
+  *     cd <original directory>
+  *     <command string>
+  *     echo
+  *     echo <end-of-command-marker>
+  *
+  *  This ensures that all commands start at a known place in
+  *  the directory structure, that any incomplete output lines
+  *  are completed and that our special marker sequence appears on
+  *  a line by itself.  We have chosen a marker that is
+  *  excessively unlikely to be reproduced in normal output:
+  *
+  *     "ShElL-OuTpUt-HaS-bEeN-cOmPlEtEd"
+  */
+ char *
+ run_shell (const char* pz_cmd)
+ {
+   tSCC zNoServer[] = "Server not running, cannot run:\n%s\n\n";
+   t_bool retry = BOOL_TRUE;
+ 
+  do_retry:
+   /*  IF the shell server process is not running yet,
+       THEN try to start it.  */
+   if (server_id == NULLPROCESS)
+     {
+       def_args[0] = find_shell ();
+ 
+       server_id = proc2_fopen (&server_pair, def_args);
+       if (server_id > 0)
+         server_setup ();
+     }
+ 
+   /*  IF it is still not running, THEN return the nil string.  */
+   if (server_id <= 0)
+     {
+       fprintf (stderr, zNoServer, pz_cmd);
+       return xcalloc (1, 1);
+     }
+ 
+   /*  Make sure the process will pay attention to us, send the
+      supplied command, and then have it output a special marker that
+      we can find.  */
+   fprintf (server_pair.pf_write, "cd %s\n%s\n\necho\necho %s\n",
+            p_cur_dir, pz_cmd, z_done);
+   fflush (server_pair.pf_write);
+ 
+   /*  IF the server died and we received a SIGPIPE,
+       THEN return an empty string.  */
+   if (server_id == NULLPROCESS)
+     {
+       fprintf (stderr, zNoServer, pz_cmd);
+       return xcalloc (1, 1);
+     }
+ 
+   /*  Now try to read back all the data.  If we fail due to either a
+      sigpipe or sigalrm (timeout), we will return the nil string.  */
+   {
+     char *pz = load_data (server_pair.pf_read);
+     
+     if (pz == (char *) NULL)
+       {
+ 	close_server ();
+ 
+ 	if (retry)
+ 	  {
+ 	    retry = BOOL_FALSE;
+ 	    goto do_retry;
+ 	  }
+ 
+         fprintf (stderr, "CLOSING SHELL SERVER - command failure:\n\t%s\n",
+                  pz_cmd);
+         pz = xcalloc (1, 1);
+       }
+ #ifdef DEBUG
+     fprintf( stderr, "run_shell command success:  %s\n", pz );
+ #endif
+     return pz;
+   }
+ }
diff -Nrcpad gcc-3.4.3/fixincludes/server.h gcc-4.0.0/fixincludes/server.h
*** gcc-3.4.3/fixincludes/server.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/server.h	Tue Aug 31 09:26:05 2004
***************
*** 0 ****
--- 1,74 ----
+ 
+ /*
+  *  server.c  Set up and handle communications with a server process.
+  *
+  *  Server Handling copyright 1992-1999 The Free Software Foundation
+  *
+  *  Server Handling is free software.
+  *  You may redistribute it and/or modify it under the terms of the
+  *  GNU General Public License, as published by the Free Software
+  *  Foundation; either version 2, or (at your option) any later version.
+  *
+  *  Server Handling is distributed in the hope that it will be useful,
+  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  *  GNU General Public License for more details.
+  *
+  *  You should have received a copy of the GNU General Public License
+  *  along with Server Handling.  See the file "COPYING".  If not,
+  *  write to:  The Free Software Foundation, Inc.,
+  *             59 Temple Place - Suite 330,
+  *             Boston,  MA  02111-1307, USA.
+  *
+  * As a special exception, The Free Software Foundation gives
+  * permission for additional uses of the text contained in his release
+  * of ServerHandler.
+  *
+  * The exception is that, if you link the ServerHandler library with other
+  * files to produce an executable, this does not by itself cause the
+  * resulting executable to be covered by the GNU General Public License.
+  * Your use of that executable is in no way restricted on account of
+  * linking the ServerHandler library code into it.
+  *
+  * This exception does not however invalidate any other reasons why
+  * the executable file might be covered by the GNU General Public License.
+  *
+  * This exception applies only to the code released by The Free
+  * Software Foundation under the name ServerHandler.  If you copy code
+  * from other sources under the General Public License into a copy of
+  * ServerHandler, as the General Public License permits, the exception
+  * does not apply to the code that you add in this way.  To avoid
+  * misleading anyone as to the status of such modified files, you must
+  * delete this exception notice from them.
+  *
+  * If you write modifications of your own for ServerHandler, it is your
+  * choice whether to permit this exception to apply to your modifications.
+  * If you do not wish that, delete this exception notice.
+  */
+ 
+ #ifndef GCC_SERVER_H
+ #define GCC_SERVER_H
+ 
+ /*
+  *  Dual pipe opening of a child process
+  */
+ 
+ typedef struct
+ {
+   int read_fd;
+   int write_fd;
+ } t_fd_pair;
+ 
+ typedef struct
+ {
+   FILE *pf_read;		/* parent read fp  */
+   FILE *pf_write;		/* parent write fp */
+ } t_pf_pair;
+ 
+ char* run_shell( const char* pzCmd );
+ pid_t proc2_fopen( t_pf_pair* p_pair, tCC** pp_args );
+ pid_t proc2_open( t_fd_pair* p_pair, tCC** pp_args );
+ int   chain_open( int in_fd, tCC** pp_args, pid_t* p_child );
+ void close_server( void );
+ 
+ #endif /* ! GCC_SERVER_H */
diff -Nrcpad gcc-3.4.3/fixincludes/system.h gcc-4.0.0/fixincludes/system.h
*** gcc-3.4.3/fixincludes/system.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/system.h	Tue Aug 31 09:26:05 2004
***************
*** 0 ****
--- 1,156 ----
+ /* Get common system includes and various definitions and declarations based
+    on autoconf macros.
+    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004
+    Free Software Foundation, Inc.
+ 
+ This file is part of libcpp (aka cpplib).
+ 
+ GCC is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2, or (at your option) any later
+ version.
+ 
+ GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING.  If not, write to the Free
+ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+ 02111-1307, USA.  */
+ 
+ 
+ #ifndef FIXINC_SYSTEM_H
+ #define FIXINC_SYSTEM_H
+ 
+ /* We must include stdarg.h before stdio.h.  */
+ #include <stdarg.h>
+ 
+ #ifdef HAVE_STDDEF_H
+ # include <stddef.h>
+ #endif
+ 
+ #include <stdio.h>
+ 
+ /* Define a generic NULL if one hasn't already been defined.  */
+ #ifndef NULL
+ #define NULL 0
+ #endif
+ 
+ /* fixincludes is not a multi-threaded application and therefore we
+    do not have to use the locking functions.  In fact, using the locking
+    functions can cause the compiler to be significantly slower under
+    I/O bound conditions (such as -g -O0 on very large source files).
+ 
+    HAVE_DECL_PUTC_UNLOCKED actually indicates whether or not the stdio
+    code is multi-thread safe by default.  If it is set to 0, then do
+    not worry about using the _unlocked functions.
+ 
+    fputs_unlocked, fwrite_unlocked, and fprintf_unlocked are
+    extensions and need to be prototyped by hand (since we do not
+    define _GNU_SOURCE).  */
+ 
+ #if defined HAVE_DECL_PUTC_UNLOCKED && HAVE_DECL_PUTC_UNLOCKED
+ 
+ # ifdef HAVE_PUTC_UNLOCKED
+ #  undef putc
+ #  define putc(C, Stream) putc_unlocked (C, Stream)
+ # endif
+ # ifdef HAVE_FPUTC_UNLOCKED
+ #  undef fputc
+ #  define fputc(C, Stream) fputc_unlocked (C, Stream)
+ # endif
+ 
+ # ifdef HAVE_FPUTS_UNLOCKED
+ #  undef fputs
+ #  define fputs(String, Stream) fputs_unlocked (String, Stream)
+ #  if defined (HAVE_DECL_FPUTS_UNLOCKED) && !HAVE_DECL_FPUTS_UNLOCKED
+ extern int fputs_unlocked (const char *, FILE *);
+ #  endif
+ # endif
+ # ifdef HAVE_FWRITE_UNLOCKED
+ #  undef fwrite
+ #  define fwrite(Ptr, Size, N, Stream) fwrite_unlocked (Ptr, Size, N, Stream)
+ #  if defined (HAVE_DECL_FWRITE_UNLOCKED) && !HAVE_DECL_FWRITE_UNLOCKED
+ extern int fwrite_unlocked (const void *, size_t, size_t, FILE *);
+ #  endif
+ # endif
+ # ifdef HAVE_FPRINTF_UNLOCKED
+ #  undef fprintf
+ /* We can't use a function-like macro here because we don't know if
+    we have varargs macros.  */
+ #  define fprintf fprintf_unlocked
+ #  if defined (HAVE_DECL_FPRINTF_UNLOCKED) && !HAVE_DECL_FPRINTF_UNLOCKED
+ extern int fprintf_unlocked (FILE *, const char *, ...);
+ #  endif
+ # endif
+ 
+ #endif
+ 
+ /* ??? Glibc's fwrite/fread_unlocked macros cause
+    "warning: signed and unsigned type in conditional expression".  */
+ #undef fread_unlocked
+ #undef fwrite_unlocked
+ 
+ #include <sys/types.h>
+ #include <errno.h>
+ 
+ #if !defined (errno) && defined (HAVE_DECL_ERRNO) && !HAVE_DECL_ERRNO
+ extern int errno;
+ #endif
+ 
+ /* Some of glibc's string inlines cause warnings.  Plus we'd rather
+    rely on (and therefore test) GCC's string builtins.  */
+ #define __NO_STRING_INLINES
+ 
+ #ifdef HAVE_STRING_H
+ # include <string.h>
+ #else
+ # ifdef HAVE_STRINGS_H
+ #  include <strings.h>
+ # endif
+ #endif
+ 
+ #ifdef HAVE_STDLIB_H
+ # include <stdlib.h>
+ #endif
+ 
+ #ifdef HAVE_UNISTD_H
+ # include <unistd.h>
+ #endif
+ 
+ #ifdef HAVE_FCNTL_H
+ # include <fcntl.h>
+ #else
+ # ifdef HAVE_SYS_FILE_H
+ #  include <sys/file.h>
+ # endif
+ #endif
+ 
+ /* The HAVE_DECL_* macros are three-state, undefined, 0 or 1.  If they
+    are defined to 0 then we must provide the relevant declaration
+    here.  These checks will be in the undefined state while configure
+    is running so be careful to test "defined (HAVE_DECL_*)".  */
+ 
+ #if defined (HAVE_DECL_ABORT) && !HAVE_DECL_ABORT
+ extern void abort (void);
+ #endif
+ 
+ #if HAVE_SYS_STAT_H
+ # include <sys/stat.h>
+ #endif
+ 
+ /* Test if something is a normal file.  */
+ #ifndef S_ISREG
+ #define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
+ #endif
+ 
+ /* Filename handling macros.  */
+ #include "filenames.h"
+ 
+ /* Get libiberty declarations.  */
+ #include "libiberty.h"
+ #include "safe-ctype.h"
+ 
+ #endif /* ! FIXINC_SYSTEM_H */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/AvailabilityMacros.h gcc-4.0.0/fixincludes/tests/base/AvailabilityMacros.h
*** gcc-3.4.3/fixincludes/tests/base/AvailabilityMacros.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/AvailabilityMacros.h	Sat Nov 13 20:41:00 2004
***************
*** 0 ****
--- 1,15 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/AvailabilityMacros.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( DARWIN_GCC4_BREAKAGE_CHECK )
+ #if defined(__GNUC__) && ((__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))
+ 
+ #endif  /* DARWIN_GCC4_BREAKAGE_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/X11/ShellP.h gcc-4.0.0/fixincludes/tests/base/X11/ShellP.h
*** gcc-3.4.3/fixincludes/tests/base/X11/ShellP.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/X11/ShellP.h	Tue Aug 31 09:26:07 2004
***************
*** 0 ****
--- 1,21 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/X11/ShellP.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( X11_CLASS_CHECK )
+ struct {
+ #ifdef __cplusplus
+    char *c_class;
+ #else
+    char *class;
+ #endif
+ } mumble;
+ 
+ #endif  /* X11_CLASS_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/X11/Xmu.h gcc-4.0.0/fixincludes/tests/base/X11/Xmu.h
*** gcc-3.4.3/fixincludes/tests/base/X11/Xmu.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/X11/Xmu.h	Tue Aug 31 09:26:07 2004
***************
*** 0 ****
--- 1,16 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/X11/Xmu.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( X11_SPRINTF_CHECK )
+ #ifndef __STDC__
+ extern char *	sprintf();
+ #endif /* !defined __STDC__ */
+ #endif  /* X11_SPRINTF_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/Xm/BaseClassI.h gcc-4.0.0/fixincludes/tests/base/Xm/BaseClassI.h
*** gcc-3.4.3/fixincludes/tests/base/Xm/BaseClassI.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/Xm/BaseClassI.h	Tue Aug 31 09:26:07 2004
***************
*** 0 ****
--- 1,15 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/Xm/BaseClassI.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( X11_CLASS_USAGE_CHECK )
+ extern mumble (int  c_class);
+ 
+ #endif  /* X11_CLASS_USAGE_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/Xm/Traversal.h gcc-4.0.0/fixincludes/tests/base/Xm/Traversal.h
*** gcc-3.4.3/fixincludes/tests/base/Xm/Traversal.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/Xm/Traversal.h	Tue Aug 31 09:26:07 2004
***************
*** 0 ****
--- 1,21 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/Xm/Traversal.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( X11_NEW_CHECK )
+ struct wedge {
+ #ifdef __cplusplus
+ 	Widget	old, c_new;
+ #else
+    Widget	old, new; /* fixinc check FAILS ON BSD */
+ #endif
+ };
+ extern Wedged( Widget c_new, Widget old );
+ #endif  /* X11_NEW_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/_G_config.h gcc-4.0.0/fixincludes/tests/base/_G_config.h
*** gcc-3.4.3/fixincludes/tests/base/_G_config.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/_G_config.h	Tue Aug 31 09:26:07 2004
***************
*** 0 ****
--- 1,14 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/_G_config.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( LIBC1_G_VA_LIST_CHECK )
+ typedef __builtin_va_list _G_va_list;
+ #endif  /* LIBC1_G_VA_LIST_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/ansi/math.h gcc-4.0.0/fixincludes/tests/base/ansi/math.h
*** gcc-3.4.3/fixincludes/tests/base/ansi/math.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/ansi/math.h	Tue Aug 31 09:26:08 2004
***************
*** 0 ****
--- 1,14 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/ansi/math.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( NEXT_MATH_PREFIX_CHECK )
+ extern double mumble();
+ #endif  /* NEXT_MATH_PREFIX_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/ansi/stdlib.h gcc-4.0.0/fixincludes/tests/base/ansi/stdlib.h
*** gcc-3.4.3/fixincludes/tests/base/ansi/stdlib.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/ansi/stdlib.h	Tue Aug 31 09:26:08 2004
***************
*** 0 ****
--- 1,14 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/ansi/stdlib.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( NEXT_VOLITILE_CHECK )
+ extern void abort();
+ #endif  /* NEXT_VOLITILE_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/arch/i960/archI960.h gcc-4.0.0/fixincludes/tests/base/arch/i960/archI960.h
*** gcc-3.4.3/fixincludes/tests/base/arch/i960/archI960.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/arch/i960/archI960.h	Tue Aug 31 09:26:08 2004
***************
*** 0 ****
--- 1,17 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/arch/i960/archI960.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( VA_I960_MACRO_CHECK )
+ extern int __vxvsiz vsiz;
+ extern int __vxvali vali;
+ extern int __vxvpad vpad;
+ #define __vxalignof__(x) ...
+ #endif  /* VA_I960_MACRO_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/arpa/inet.h gcc-4.0.0/fixincludes/tests/base/arpa/inet.h
*** gcc-3.4.3/fixincludes/tests/base/arpa/inet.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/arpa/inet.h	Tue Aug 31 09:26:09 2004
***************
*** 0 ****
--- 1,15 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/arpa/inet.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( UW7_BYTEORDER_FIX_CHECK )
+ 
+ 
+ #endif  /* UW7_BYTEORDER_FIX_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/assert.h gcc-4.0.0/fixincludes/tests/base/assert.h
*** gcc-3.4.3/fixincludes/tests/base/assert.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/assert.h	Tue Aug 31 09:26:07 2004
***************
*** 0 ****
--- 1,43 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/assert.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ #ifndef FIXINC_WRAP_ASSERT_H_BROKEN_ASSERT_STDLIB
+ #define FIXINC_WRAP_ASSERT_H_BROKEN_ASSERT_STDLIB 1
+ 
+ #ifdef __cplusplus
+ #include <stdlib.h>
+ #endif
+ #ifndef FIXINC_WRAP_ASSERT_H_BROKEN_ASSERT_STDIO
+ #define FIXINC_WRAP_ASSERT_H_BROKEN_ASSERT_STDIO 1
+ 
+ #include <stdio.h>
+ 
+ 
+ #if defined( ALPHA___ASSERT_CHECK )
+ extern void __assert(const char *, const char *, int);
+ #endif  /* ALPHA___ASSERT_CHECK */
+ 
+ 
+ #if defined( ALPHA_ASSERT_CHECK )
+ #define assert(EX) ((EX) ? (void)0 : __assert(#EX, __FILE__, __LINE__))
+ #endif  /* ALPHA_ASSERT_CHECK */
+ 
+ 
+ #if defined( BROKEN_ASSERT_STDIO_CHECK )
+ extern FILE* stderr;
+ #endif  /* BROKEN_ASSERT_STDIO_CHECK */
+ 
+ 
+ #if defined( BROKEN_ASSERT_STDLIB_CHECK )
+ extern void exit ( int );
+ #endif  /* BROKEN_ASSERT_STDLIB_CHECK */
+ 
+ #endif  /* FIXINC_WRAP_ASSERT_H_BROKEN_ASSERT_STDIO */
+ 
+ #endif  /* FIXINC_WRAP_ASSERT_H_BROKEN_ASSERT_STDLIB */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/bsd/libc.h gcc-4.0.0/fixincludes/tests/base/bsd/libc.h
*** gcc-3.4.3/fixincludes/tests/base/bsd/libc.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/bsd/libc.h	Tue Aug 31 09:26:09 2004
***************
*** 0 ****
--- 1,14 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/bsd/libc.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( NEXT_TEMPLATE_CHECK )
+ extern mumble( char *); /* fix */
+ #endif  /* NEXT_TEMPLATE_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/c_asm.h gcc-4.0.0/fixincludes/tests/base/c_asm.h
*** gcc-3.4.3/fixincludes/tests/base/c_asm.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/c_asm.h	Tue Aug 31 09:26:07 2004
***************
*** 0 ****
--- 1,20 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/c_asm.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( DEC_INTERN_ASM_CHECK )
+ #ifdef __DECC
+ float fasm {
+     ... asm stuff ...
+ };
+ #pragma intrinsic( dasm )
+ #endif
+ /* END ASM TEST*/
+ #endif  /* DEC_INTERN_ASM_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/com_err.h gcc-4.0.0/fixincludes/tests/base/com_err.h
*** gcc-3.4.3/fixincludes/tests/base/com_err.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/com_err.h	Sat Nov 13 20:41:00 2004
***************
*** 0 ****
--- 1,14 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/com_err.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( STDIO_DUMMY_VA_LIST_CLIENTS_CHECK )
+ extern void mumble( __gnuc_va_list);
+ #endif  /* STDIO_DUMMY_VA_LIST_CLIENTS_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/ctrl-quotes-def-1.h gcc-4.0.0/fixincludes/tests/base/ctrl-quotes-def-1.h
*** gcc-3.4.3/fixincludes/tests/base/ctrl-quotes-def-1.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/ctrl-quotes-def-1.h	Tue Aug 31 09:26:07 2004
***************
*** 0 ****
--- 1,14 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/ctrl-quotes-def-1.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( CTRL_QUOTES_DEF_CHECK_1 )
+ #define _CTRL(c) (c&037)
+ #endif  /* CTRL_QUOTES_DEF_CHECK_1 */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/ctype.h gcc-4.0.0/fixincludes/tests/base/ctype.h
*** gcc-3.4.3/fixincludes/tests/base/ctype.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/ctype.h	Tue Aug 31 09:26:07 2004
***************
*** 0 ****
--- 1,65 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/ctype.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( HPUX10_CTYPE_DECLARATIONS1_CHECK )
+ #ifdef _PROTOTYPES
+ extern int __tolower(int);
+ extern int __toupper(int);
+ #else /* NOT _PROTOTYPES */
+ extern int __tolower();
+ extern int __toupper();
+ #endif /* _PROTOTYPES */
+ 
+ #  define _toupper(__c)         __toupper(__c)
+ 
+ 
+ #endif  /* HPUX10_CTYPE_DECLARATIONS1_CHECK */
+ 
+ 
+ #if defined( HPUX10_CTYPE_DECLARATIONS2_CHECK )
+ #  if defined(_SB_CTYPE_MACROS) && !defined(__lint)
+ 
+ #ifdef _PROTOTYPES
+      extern int _isalnum(int);
+      extern int _isalpha(int);
+      extern int _iscntrl(int);
+      extern int _isdigit(int);
+      extern int _isgraph(int);
+      extern int _islower(int);
+      extern int _isprint(int);
+      extern int _ispunct(int);
+      extern int _isspace(int);
+      extern int _isupper(int);
+      extern int _isxdigit(int);
+ #  else /* not _PROTOTYPES */
+      extern int _isalnum();
+      extern int _isalpha();
+      extern int _iscntrl();
+      extern int _isdigit();
+      extern int _isgraph();
+      extern int _islower();
+      extern int _isprint();
+      extern int _ispunct();
+      extern int _isspace();
+      extern int _isupper();
+      extern int _isxdigit();
+ #endif /* _PROTOTYPES */
+ 
+      extern unsigned int *__SB_masks;
+ 
+ #endif  /* HPUX10_CTYPE_DECLARATIONS2_CHECK */
+ 
+ 
+ #if defined( HPUX_CTYPE_MACROS_CHECK )
+ : __SB_masks ? (int)__SB_masks[__alnum] & _ISCNTRL
+ # define isalpha(__c) (__SB_masks ? (int)__SB_masks[__c] & _IS
+ 
+ #endif  /* HPUX_CTYPE_MACROS_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/curses.h gcc-4.0.0/fixincludes/tests/base/curses.h
*** gcc-3.4.3/fixincludes/tests/base/curses.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/curses.h	Sat Nov 13 20:41:00 2004
***************
*** 0 ****
--- 1,35 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/curses.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( AVOID_BOOL_DEFINE_CHECK )
+ #ifndef __cplusplus
+ # define bool	 char 
+ #endif
+ 
+ #endif  /* AVOID_BOOL_DEFINE_CHECK */
+ 
+ 
+ #if defined( AVOID_BOOL_TYPE_CHECK )
+ #ifndef __cplusplus
+ typedef unsigned int	bool 	;
+ #endif /* bool
+  type */
+ #endif  /* AVOID_BOOL_TYPE_CHECK */
+ 
+ 
+ #if defined( BAD_STRUCT_TERM_CHECK )
+ struct term;
+ #endif  /* BAD_STRUCT_TERM_CHECK */
+ 
+ 
+ #if defined( VOID_NULL_CHECK )
+ #define NULL 0  /* typed NULL */
+ #endif  /* VOID_NULL_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/fixinc-test-limits.h gcc-4.0.0/fixincludes/tests/base/fixinc-test-limits.h
*** gcc-3.4.3/fixincludes/tests/base/fixinc-test-limits.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/fixinc-test-limits.h	Tue Aug 31 09:26:07 2004
***************
*** 0 ****
--- 1,19 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/fixinc-test-limits.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( HPUX10_CPP_POW_INLINE_CHECK )
+ 
+ #endif  /* HPUX10_CPP_POW_INLINE_CHECK */
+ 
+ 
+ #if defined( IRIX_LIMITS_CONST_CHECK )
+ extern __const char limit; /* test limits */
+ #endif  /* IRIX_LIMITS_CONST_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/fs/rfs/rf_cache.h gcc-4.0.0/fixincludes/tests/base/fs/rfs/rf_cache.h
*** gcc-3.4.3/fixincludes/tests/base/fs/rfs/rf_cache.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/fs/rfs/rf_cache.h	Tue Aug 31 09:26:10 2004
***************
*** 0 ****
--- 1,21 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/fs/rfs/rf_cache.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ #ifndef FIXINC_WRAP_FS_RFS_RF_CACHE_H_SVR4_KRNL
+ #define FIXINC_WRAP_FS_RFS_RF_CACHE_H_SVR4_KRNL 1
+ 
+ #ifdef _KERNEL
+ 
+ 
+ #if defined( SVR4_KRNL_CHECK )
+ 
+ #endif  /* SVR4_KRNL_CHECK */
+ #endif /* _KERNEL */
+ 
+ #endif  /* FIXINC_WRAP_FS_RFS_RF_CACHE_H_SVR4_KRNL */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/hsfs/hsfs_spec.h gcc-4.0.0/fixincludes/tests/base/hsfs/hsfs_spec.h
*** gcc-3.4.3/fixincludes/tests/base/hsfs/hsfs_spec.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/hsfs/hsfs_spec.h	Tue Aug 31 09:26:10 2004
***************
*** 0 ****
--- 1,14 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/hsfs/hsfs_spec.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( SUN_BOGUS_IFDEF_CHECK )
+ #if  __i386__ || __vax__ || __sun4c__
+ #endif  /* SUN_BOGUS_IFDEF_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/internal/math_core.h gcc-4.0.0/fixincludes/tests/base/internal/math_core.h
*** gcc-3.4.3/fixincludes/tests/base/internal/math_core.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/internal/math_core.h	Tue Aug 31 09:26:11 2004
***************
*** 0 ****
--- 1,30 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/internal/math_core.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( IRIX___GENERIC1_CHECK )
+ extern int isnan(double);
+ extern int isnanf(float);
+ extern int isnanl(long double);
+ #define isnan(x) (sizeof(x) == sizeof(double) ? _isnan(x) \
+                : sizeof(x) == sizeof(float) ? _isnanf(x) \
+                : _isnanl(x))
+ 
+ 
+ #endif  /* IRIX___GENERIC1_CHECK */
+ 
+ 
+ #if defined( IRIX___GENERIC2_CHECK )
+ #define isless(x,y) \
+   ((sizeof(x)<=4 && sizeof(y)<=4) ? _islessf(x,y) \
+    : (sizeof(x)<=8 && sizeof(y)<=8) ? _isless(x,y) \
+    : _islessl(x,y))
+ 
+ #endif  /* IRIX___GENERIC2_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/internal/sgimacros.h gcc-4.0.0/fixincludes/tests/base/internal/sgimacros.h
*** gcc-3.4.3/fixincludes/tests/base/internal/sgimacros.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/internal/sgimacros.h	Tue Aug 31 09:26:11 2004
***************
*** 0 ****
--- 1,17 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/internal/sgimacros.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( IRIX___RESTRICT_CHECK )
+ #ifdef __c99
+ #  ifndef __cplusplus
+ #  define __restrict restrict
+ #  endif
+ #endif  /* IRIX___RESTRICT_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/internal/wchar_core.h gcc-4.0.0/fixincludes/tests/base/internal/wchar_core.h
*** gcc-3.4.3/fixincludes/tests/base/internal/wchar_core.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/internal/wchar_core.h	Tue Aug 31 09:26:11 2004
***************
*** 0 ****
--- 1,15 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/internal/wchar_core.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( IRIX_WCSFTIME_CHECK )
+ #if _NO_XOPEN5 && !defined(__c99)
+ extern size_t          wcsftime(wchar_t *, __SGI_LIBC_NAMESPACE_QUALIFIER size_t, const char *, const struct tm *);
+ #endif  /* IRIX_WCSFTIME_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/inttypes.h gcc-4.0.0/fixincludes/tests/base/inttypes.h
*** gcc-3.4.3/fixincludes/tests/base/inttypes.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/inttypes.h	Tue Aug 31 09:26:07 2004
***************
*** 0 ****
--- 1,15 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/inttypes.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( HPUX11_UINT32_C_CHECK )
+ #define CONCAT_U__(__c)	__CONCAT__(__c,u)
+ #define UINT32_C(__c) __CONCAT__(__c,ul)
+ #endif  /* HPUX11_UINT32_C_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/io-quotes-def-1.h gcc-4.0.0/fixincludes/tests/base/io-quotes-def-1.h
*** gcc-3.4.3/fixincludes/tests/base/io-quotes-def-1.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/io-quotes-def-1.h	Tue Aug 31 09:26:07 2004
***************
*** 0 ****
--- 1,14 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/io-quotes-def-1.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( IO_QUOTES_DEF_CHECK_1 )
+ #define XX_IO(x)        (x<<8|256)
+ #endif  /* IO_QUOTES_DEF_CHECK_1 */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/locale.h gcc-4.0.0/fixincludes/tests/base/locale.h
*** gcc-3.4.3/fixincludes/tests/base/locale.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/locale.h	Tue Aug 31 09:26:07 2004
***************
*** 0 ****
--- 1,20 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/locale.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ #ifndef FIXINC_WRAP_LOCALE_H_ULTRIX_LOCALE
+ #define FIXINC_WRAP_LOCALE_H_ULTRIX_LOCALE 1
+ 
+ 
+ 
+ #if defined( ULTRIX_LOCALE_CHECK )
+ @(#)locale.h   6.1     (ULTRIX)
+ 
+ #endif  /* ULTRIX_LOCALE_CHECK */
+ 
+ #endif  /* FIXINC_WRAP_LOCALE_H_ULTRIX_LOCALE */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/mach-o/dyld.h gcc-4.0.0/fixincludes/tests/base/mach-o/dyld.h
*** gcc-3.4.3/fixincludes/tests/base/mach-o/dyld.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/mach-o/dyld.h	Tue Aug 31 09:26:11 2004
***************
*** 0 ****
--- 1,17 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/mach-o/dyld.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( DARWIN_PRIVATE_EXTERN_CHECK )
+ extern int _dyld_func_lookup(
+ const char *dyld_func_name,
+ unsigned long *address);
+ 
+ #endif  /* DARWIN_PRIVATE_EXTERN_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/machine/cpu.h gcc-4.0.0/fixincludes/tests/base/machine/cpu.h
*** gcc-3.4.3/fixincludes/tests/base/machine/cpu.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/machine/cpu.h	Tue Aug 31 09:26:12 2004
***************
*** 0 ****
--- 1,16 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/machine/cpu.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( ULTRIX_STATIC_CHECK )
+ struct tlb_pid_state {
+ #include <machine/r3_cpu.h>
+ 
+ #endif  /* ULTRIX_STATIC_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/malloc.h gcc-4.0.0/fixincludes/tests/base/malloc.h
*** gcc-3.4.3/fixincludes/tests/base/malloc.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/malloc.h	Tue Aug 31 09:26:07 2004
***************
*** 0 ****
--- 1,18 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/malloc.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( SUN_MALLOC_CHECK )
+ typedef void *	malloc_t;
+ void	free();
+ void*	malloc();
+ void*	calloc();
+ void*	realloc();
+ #endif  /* SUN_MALLOC_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/math.h gcc-4.0.0/fixincludes/tests/base/math.h
*** gcc-3.4.3/fixincludes/tests/base/math.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/math.h	Sat Nov 13 20:41:00 2004
***************
*** 0 ****
--- 1,119 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/math.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ #ifndef FIXINC_WRAP_MATH_H_MATH_EXCEPTION
+ #define FIXINC_WRAP_MATH_H_MATH_EXCEPTION 1
+ 
+ #ifdef __cplusplus
+ #define exception __math_exception
+ #endif
+ #ifndef FIXINC_WRAP_MATH_H_EXCEPTION_STRUCTURE
+ #define FIXINC_WRAP_MATH_H_EXCEPTION_STRUCTURE 1
+ 
+ struct exception;
+ 
+ 
+ #if defined( BROKEN_CABS_CHECK )
+ #ifdef __STDC__
+ 
+ #else
+ 
+ #endif
+ 
+  /* This is a comment
+                          and it ends here. */
+ #endif  /* BROKEN_CABS_CHECK */
+ 
+ 
+ #if defined( EXCEPTION_STRUCTURE_CHECK )
+ extern int matherr();
+ #endif  /* EXCEPTION_STRUCTURE_CHECK */
+ 
+ 
+ #if defined( HPUX11_CPP_POW_INLINE_CHECK )
+ 
+ #endif  /* HPUX11_CPP_POW_INLINE_CHECK */
+ 
+ 
+ #if defined( HPUX11_FABSF_CHECK )
+ #ifdef _PA_RISC
+ #ifndef __cplusplus
+ #  define fabsf(x) ((float)fabs((double)(float)(x)))
+ #endif
+ #endif
+ #endif  /* HPUX11_FABSF_CHECK */
+ 
+ 
+ #if defined( HPUX8_BOGUS_INLINES_CHECK )
+ extern "C" int abs(int);
+ 
+ #endif  /* HPUX8_BOGUS_INLINES_CHECK */
+ 
+ 
+ #if defined( ISC_FMOD_CHECK )
+ extern double	fmod(double, double);
+ #endif  /* ISC_FMOD_CHECK */
+ 
+ 
+ #if defined( MATH_EXCEPTION_CHECK )
+ typedef struct exception t_math_exception;
+ #endif  /* MATH_EXCEPTION_CHECK */
+ 
+ 
+ #if defined( MATH_HUGE_VAL_FROM_DBL_MAX_CHECK )
+ 
+ #define HUGE_VAL 3.1415e+9 /* really big */
+ #endif  /* MATH_HUGE_VAL_FROM_DBL_MAX_CHECK */
+ 
+ 
+ #if defined( RS6000_DOUBLE_CHECK )
+ #ifndef __cplusplus
+ extern int class();
+ #endif
+ #endif  /* RS6000_DOUBLE_CHECK */
+ 
+ 
+ #if defined( SCO_MATH_CHECK )
+ #define __fp_class(a) \
+  __builtin_generic(a,"ld:__fplcassifyl;f:__fpclassifyf;:__fpclassify")
+ 
+ #endif  /* SCO_MATH_CHECK */
+ 
+ 
+ #if defined( STRICT_ANSI_NOT_CTD_CHECK )
+ #if 1 && \
+ && defined(mumbling) |& ( !defined(__STRICT_ANSI__)) \
+ (  !defined(__STRICT_ANSI__) && !defined(_XOPEN_SOURCE) \
+ ||  !defined(__STRICT_ANSI__) ) /* not std C */
+ int foo;
+ #endif
+ #endif  /* STRICT_ANSI_NOT_CTD_CHECK */
+ 
+ 
+ #if defined( ULTRIX_ATOF_PARAM_CHECK )
+ extern double atof(const char *__nptr);
+ 
+ #endif  /* ULTRIX_ATOF_PARAM_CHECK */
+ 
+ 
+ #if defined( WINDISS_MATH1_CHECK )
+ #ifndef __GNUC__
+ #endif  /* WINDISS_MATH1_CHECK */
+ 
+ 
+ #if defined( WINDISS_MATH2_CHECK )
+ #endif /* __GNUC__ */
+ #endif  /* WINDISS_MATH2_CHECK */
+ 
+ #endif  /* FIXINC_WRAP_MATH_H_EXCEPTION_STRUCTURE */
+ #ifdef __cplusplus
+ #undef exception
+ #endif
+ 
+ #endif  /* FIXINC_WRAP_MATH_H_MATH_EXCEPTION */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/netdnet/dnetdb.h gcc-4.0.0/fixincludes/tests/base/netdnet/dnetdb.h
*** gcc-3.4.3/fixincludes/tests/base/netdnet/dnetdb.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/netdnet/dnetdb.h	Tue Aug 31 09:26:12 2004
***************
*** 0 ****
--- 1,14 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/netdnet/dnetdb.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( NODEENT_SYNTAX_CHECK )
+ char *na_addr	;
+ #endif  /* NODEENT_SYNTAX_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/netinet/in.h gcc-4.0.0/fixincludes/tests/base/netinet/in.h
*** gcc-3.4.3/fixincludes/tests/base/netinet/in.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/netinet/in.h	Tue Mar 15 17:38:06 2005
***************
*** 0 ****
--- 1,24 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/netinet/in.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( HPUX_HTONL_CHECK )
+ #if 1
+ /*
+  * Macros for number representation conversion.
+  */
+ #ifndef ntohl
+ #define ntohl(x)        (x)
+ #define ntohs(x)        (x)
+ #define htonl(x)        (x)
+ #define htons(x)        (x)
+ #endif
+ #endif  /* ! _XOPEN_SOURCE_EXTENDED */
+ #endif  /* HPUX_HTONL_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/netinet/ip.h gcc-4.0.0/fixincludes/tests/base/netinet/ip.h
*** gcc-3.4.3/fixincludes/tests/base/netinet/ip.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/netinet/ip.h	Tue Aug 31 09:26:12 2004
***************
*** 0 ****
--- 1,19 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/netinet/ip.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( IP_MISSING_SEMI_CHECK )
+ struct mumble {
+   union {
+     int x;
+   };
+ }; /* mumbled struct */
+ 
+ #endif  /* IP_MISSING_SEMI_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/obstack.h gcc-4.0.0/fixincludes/tests/base/obstack.h
*** gcc-3.4.3/fixincludes/tests/base/obstack.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/obstack.h	Tue Aug 31 09:26:07 2004
***************
*** 0 ****
--- 1,14 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/obstack.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( OBSTACK_LVALUE_CAST_CHECK )
+ ((*((void **) (h)->next_free) = (aptr)), ( (h)->next_free += sizeof (void *)))
+ #endif  /* OBSTACK_LVALUE_CAST_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/pixrect/memvar.h gcc-4.0.0/fixincludes/tests/base/pixrect/memvar.h
*** gcc-3.4.3/fixincludes/tests/base/pixrect/memvar.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/pixrect/memvar.h	Tue Aug 31 09:26:13 2004
***************
*** 0 ****
--- 1,18 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/pixrect/memvar.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( SUN_CATMACRO_CHECK )
+ #ifdef __STDC__
+ #  define CAT(a,b) a##b
+ #else
+ #define CAT(a,b)	a/**/b
+ #endif
+ #endif  /* SUN_CATMACRO_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/pthread.h gcc-4.0.0/fixincludes/tests/base/pthread.h
*** gcc-3.4.3/fixincludes/tests/base/pthread.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/pthread.h	Mon Mar 21 16:17:54 2005
***************
*** 0 ****
--- 1,105 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/pthread.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( AIX_PTHREAD_CHECK )
+ #define PTHREAD_MUTEX_INITIALIZER \
+ {...init stuff...}
+ #endif  /* AIX_PTHREAD_CHECK */
+ 
+ 
+ #if defined( ALPHA_PTHREAD_CHECK )
+ #  if defined (_PTHREAD_ENV_DECC) || defined (_PTHREAD_ENV_EPCC) || defined (__PRAGMA_EXTERN_PREFIX)
+ #   define _PTHREAD_USE_PTDNAM_
+ #  endif
+ #  if defined (_PTHREAD_ENV_DECC) || defined (__PRAGMA_EXTERN_PREFIX)
+ #   define _PTHREAD_USE_PTDNAM_
+ #  endif
+ #endif  /* ALPHA_PTHREAD_CHECK */
+ 
+ 
+ #if defined( ALPHA_PTHREAD_GCC_CHECK )
+ # define _PTHREAD_ENV_INTELC
+ #elif defined (__GNUC__)
+ # define _PTHREAD_ENV_GCC
+ #else
+ # error <pthread.h>: unrecognized compiler.
+ #endif
+ #endif  /* ALPHA_PTHREAD_GCC_CHECK */
+ 
+ 
+ #if defined( ALPHA_PTHREAD_INIT_CHECK )
+ /*
+  * @(#)_RCSfile: pthread.h,v $ _Revision: 1.1.33.21 $ (DEC) _Date: 2000/08/15 15:30:13 $
+  */
+ #ifndef _PTHREAD_NOMETER_STATIC
+ # define PTHREAD_MUTEX_INITIALIZER     {_PTHREAD_MSTATE_CONFIG, _PTHREAD_MVALID | _PTHREAD_MVF_STA, 0, 0, 0, 0, 0, 0 }
+ # define PTHREAD_COND_INITIALIZER     {_PTHREAD_CSTATE_SLOW, _PTHREAD_CVALID | _PTHREAD_CVF_STA, 0, 0, 0, 0 }
+ # define PTHREAD_MUTEX_INITWITHNAME_NP(_n_,_a_)     {_PTHREAD_MSTATE_CONFIG, _PTHREAD_MVALID | _PTHREAD_MVF_STA, _n_, _a_, 0, 0, 0, 0 }
+ # define PTHREAD_COND_INITWITHNAME_NP(_n_,_a_)     {_PTHREAD_CSTATE_SLOW, _PTHREAD_CVALID | _PTHREAD_CVF_STA, _n_, _a_, 0, 0 }
+ #else
+ # define PTHREAD_MUTEX_INITIALIZER {0, _PTHREAD_MVALID | _PTHREAD_MVF_STA, 0, 0, 0, 0, 0, 0 }
+ # define PTHREAD_MUTEX_INITWITHNAME_NP(_n_,_a_)     {0, _PTHREAD_MVALID | _PTHREAD_MVF_STA, _n_, _a_, 0, 0, 0, 0 }
+ # define PTHREAD_COND_INITWITHNAME_NP(_n_,_a_)     {{{0},0}, _PTHREAD_CVALID | _PTHREAD_CVF_STA, _n_, _a_, 0, 0 }
+ #endif
+ 
+ #define PTHREAD_RWLOCK_INITIALIZER {_PTHREAD_RWVALID | _PTHREAD_RWVF_STA, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
+ #define PTHREAD_RWLOCK_INITWITHNAME_NP(_n_,_a_)         {_PTHREAD_RWVALID | _PTHREAD_RWVF_STA, _n_, _a_, 0, 0, 0, 0, 0, 0, 0 }
+ 
+ #endif  /* ALPHA_PTHREAD_INIT_CHECK */
+ 
+ 
+ #if defined( PTHREAD_PAGE_SIZE_CHECK )
+ extern int __page_size;
+ #endif  /* PTHREAD_PAGE_SIZE_CHECK */
+ 
+ 
+ #if defined( PTHREAD_INCOMPLETE_STRUCT_ARGUMENT_CHECK )
+ extern int __sigsetjmp (struct __jmp_buf_tag *__env, int __savemask);
+ #endif  /* PTHREAD_INCOMPLETE_STRUCT_ARGUMENT_CHECK */
+ 
+ 
+ #if defined( SOLARIS_MUTEX_INIT_1_CHECK )
+ #ident "@(#)pthread.h  1.16    97/05/05 SMI"
+ #if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)
+ #define PTHREAD_MUTEX_INITIALIZER	{{{0}, 0}, {{{0}}}, 0}
+ #else
+ #define PTHREAD_MUTEX_INITIALIZER	{{{0}, 0}, {{{0}}}, {0}}
+ #endif
+ #if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)
+ #define PTHREAD_COND_INITIALIZER	{{{0},0}, 0} /* */
+ #else
+ #define PTHREAD_COND_INITIALIZER	{{{0},0}, {0}} /* */
+ #endif
+ 
+ #endif  /* SOLARIS_MUTEX_INIT_1_CHECK */
+ 
+ 
+ #if defined( SOLARIS_MUTEX_INIT_2_CHECK )
+ #ident "@(#)pthread.h  1.26  98/04/12 SMI"
+ #if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)
+ #define PTHREAD_MUTEX_INITIALIZER	{{{0},0}, {{{0}}}, 0}
+ #else
+ #define PTHREAD_MUTEX_INITIALIZER	{{{0},0}, {{{0}}}, {0}}
+ #endif
+ #if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)
+ #define PTHREAD_COND_INITIALIZER	{{{0}, 0}, 0}	/* DEFAULTCV */
+ #else
+ #define PTHREAD_COND_INITIALIZER	{{{0}, 0}, {0}}	/* DEFAULTCV */
+ #endif
+ #define PTHREAD_RWLOCK_INITIALIZER	{0, 0, 0, {0, 0, 0}, {0, 0}, {0, 0}}
+ #endif  /* SOLARIS_MUTEX_INIT_2_CHECK */
+ 
+ 
+ #if defined( THREAD_KEYWORD_CHECK )
+ extern int pthread_create (pthread_t *__restrict __thr,
+ extern int pthread_kill (pthread_t __thr, int __signo);
+ extern int pthread_cancel (pthread_t __thr);
+ #endif  /* THREAD_KEYWORD_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/reg_types.h gcc-4.0.0/fixincludes/tests/base/reg_types.h
*** gcc-3.4.3/fixincludes/tests/base/reg_types.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/reg_types.h	Tue Aug 31 09:26:07 2004
***************
*** 0 ****
--- 1,20 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/reg_types.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( OSF_NAMESPACE_A_CHECK )
+ typedef struct {
+   int stuff, mo_suff;
+ } __regex_t;
+ extern __regex_t    re;
+ extern __regoff_t   ro;
+ extern __regmatch_t rm;
+ 
+ #endif  /* OSF_NAMESPACE_A_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/regex.h gcc-4.0.0/fixincludes/tests/base/regex.h
*** gcc-3.4.3/fixincludes/tests/base/regex.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/regex.h	Tue Aug 31 09:26:07 2004
***************
*** 0 ****
--- 1,17 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/regex.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( OSF_NAMESPACE_C_CHECK )
+ #include <reg_types.h>
+ typedef __regex_t	regex_t;
+ typedef __regoff_t	regoff_t;
+ typedef __regmatch_t	regmatch_t;
+ #endif  /* OSF_NAMESPACE_C_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/regexp.h gcc-4.0.0/fixincludes/tests/base/regexp.h
*** gcc-3.4.3/fixincludes/tests/base/regexp.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/regexp.h	Tue Aug 31 09:26:07 2004
***************
*** 0 ****
--- 1,18 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/regexp.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( SVR4_UNDECLARED_GETRNGE_CHECK )
+ static int size;
+ static int getrnge ();
+ /* stuff which calls getrnge() */
+ static getrnge()
+ {}
+ #endif  /* SVR4_UNDECLARED_GETRNGE_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/rpc/auth.h gcc-4.0.0/fixincludes/tests/base/rpc/auth.h
*** gcc-3.4.3/fixincludes/tests/base/rpc/auth.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/rpc/auth.h	Tue Aug 31 09:26:13 2004
***************
*** 0 ****
--- 1,26 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/rpc/auth.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( STRUCT_SOCKADDR_CHECK )
+ struct sockaddr;
+ extern AUTH* authdes_create( struct sockaddr* );
+ #endif  /* STRUCT_SOCKADDR_CHECK */
+ 
+ 
+ #if defined( SUN_AUTH_PROTO_CHECK )
+ struct auth_t {
+ #ifdef __cplusplus
+     int (*name)(...); /* C++ bad */
+ #else
+     int (*name)(); /* C++ bad */
+ #endif
+ };
+ #endif  /* SUN_AUTH_PROTO_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/rpc/rpc.h gcc-4.0.0/fixincludes/tests/base/rpc/rpc.h
*** gcc-3.4.3/fixincludes/tests/base/rpc/rpc.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/rpc/rpc.h	Tue Aug 31 09:26:13 2004
***************
*** 0 ****
--- 1,14 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/rpc/rpc.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( NESTED_AUTH_DES_CHECK )
+ /*#include <rpc/auth_des.h> */ /* skip this */
+ #endif  /* NESTED_AUTH_DES_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/rpc/svc.h gcc-4.0.0/fixincludes/tests/base/rpc/svc.h
*** gcc-3.4.3/fixincludes/tests/base/rpc/svc.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/rpc/svc.h	Tue Aug 31 09:26:13 2004
***************
*** 0 ****
--- 1,15 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/rpc/svc.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( ULTRIX_NESTED_SVC_CHECK )
+  *	int protocol;  */ /* like TCP or UDP
+ 
+ #endif  /* ULTRIX_NESTED_SVC_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/rpc/xdr.h gcc-4.0.0/fixincludes/tests/base/rpc/xdr.h
*** gcc-3.4.3/fixincludes/tests/base/rpc/xdr.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/rpc/xdr.h	Tue Aug 31 09:26:13 2004
***************
*** 0 ****
--- 1,25 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/rpc/xdr.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( RPC_XDR_LVALUE_CAST_A_CHECK )
+ #define IXDR_GET_LONG(buf) ((long)IXDR_GET_U_INT32(buf))
+ #endif  /* RPC_XDR_LVALUE_CAST_A_CHECK */
+ 
+ 
+ #if defined( RPC_XDR_LVALUE_CAST_B_CHECK )
+ #define IXDR_PUT_LONG(buf, v) ((long)IXDR_PUT_INT32(buf, (long)(v)))
+ #endif  /* RPC_XDR_LVALUE_CAST_B_CHECK */
+ 
+ 
+ #if defined( STRUCT_FILE_CHECK )
+ struct __file_s;
+ extern void xdrstdio_create( struct __file_s* );
+ #endif  /* STRUCT_FILE_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/rpcsvc/rstat.h gcc-4.0.0/fixincludes/tests/base/rpcsvc/rstat.h
*** gcc-3.4.3/fixincludes/tests/base/rpcsvc/rstat.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/rpcsvc/rstat.h	Tue Aug 31 09:26:13 2004
***************
*** 0 ****
--- 1,16 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/rpcsvc/rstat.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( STATSSWTCH_CHECK )
+ struct statswtch {
+   int boottime;
+ };
+ #endif  /* STATSSWTCH_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/rpcsvc/rusers.h gcc-4.0.0/fixincludes/tests/base/rpcsvc/rusers.h
*** gcc-3.4.3/fixincludes/tests/base/rpcsvc/rusers.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/rpcsvc/rusers.h	Tue Aug 31 09:26:13 2004
***************
*** 0 ****
--- 1,16 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/rpcsvc/rusers.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( SUN_RUSERS_SEMI_CHECK )
+ struct mumble
+   int _cnt;
+ };
+ #endif  /* SUN_RUSERS_SEMI_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/sparc/asm_linkage.h gcc-4.0.0/fixincludes/tests/base/sparc/asm_linkage.h
*** gcc-3.4.3/fixincludes/tests/base/sparc/asm_linkage.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/sparc/asm_linkage.h	Tue Aug 31 09:26:14 2004
***************
*** 0 ****
--- 1,14 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/sparc/asm_linkage.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( KANDR_CONCAT_CHECK )
+ #define __CONCAT__(a,b) a##b
+ #endif  /* KANDR_CONCAT_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/standards.h gcc-4.0.0/fixincludes/tests/base/standards.h
*** gcc-3.4.3/fixincludes/tests/base/standards.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/standards.h	Tue Aug 31 09:26:07 2004
***************
*** 0 ****
--- 1,14 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/standards.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( ALPHA___EXTERN_PREFIX_STANDARDS_CHECK )
+ #if (_ISO_C_SOURCE>=19990L) && !defined(_LIBC_POLLUTION_H_) && !defined(__DECC) && !defined(__PRAGMA_EXTERN_PREFIX)
+ #endif  /* ALPHA___EXTERN_PREFIX_STANDARDS_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/stdio.h gcc-4.0.0/fixincludes/tests/base/stdio.h
*** gcc-3.4.3/fixincludes/tests/base/stdio.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/stdio.h	Tue Aug 31 09:26:07 2004
***************
*** 0 ****
--- 1,109 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/stdio.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ #ifndef FIXINC_WRAP_STDIO_H_STDIO_STDARG_H
+ #define FIXINC_WRAP_STDIO_H_STDIO_STDARG_H 1
+ 
+ #define __need___va_list
+ #include <stdarg.h>
+ 
+ 
+ #if defined( ALPHA_GETOPT_CHECK )
+ extern int getopt(int, char *const[], const char *);
+ #endif  /* ALPHA_GETOPT_CHECK */
+ 
+ 
+ #if defined( BSD_STDIO_ATTRS_CONFLICT_CHECK )
+ #define _BSD_STRING(_BSD_X) _BSD_STRINGX(_BSD_X)
+ #define _BSD_STRINGX(_BSD_X) #_BSD_X
+ int vfscanf(FILE *, const char *, __builtin_va_list) __asm__ (_BSD_STRING(__USER_LABEL_PREFIX__) "__svfscanf");
+ #endif  /* BSD_STDIO_ATTRS_CONFLICT_CHECK */
+ 
+ 
+ #if defined( HPUX10_STDIO_DECLARATIONS_CHECK )
+ #  define _iob __iob
+ 
+ #endif  /* HPUX10_STDIO_DECLARATIONS_CHECK */
+ 
+ 
+ #if defined( HPUX11_SNPRINTF_CHECK )
+ extern int snprintf(char *, size_t, const char *, ...);
+ extern int snprintf(char *, _hpux_size_t, const char *, ...);
+ extern int snprintf(char *, _hpux_size_t, const char *, ...);
+ #endif  /* HPUX11_SNPRINTF_CHECK */
+ 
+ 
+ #if defined( HPUX11_VSNPRINTF_CHECK )
+ extern int vsnprintf(char *, _hpux_size_t, const char *, __gnuc_va_list);
+ #endif  /* HPUX11_VSNPRINTF_CHECK */
+ 
+ 
+ #if defined( IRIX_STDIO_DUMMY_VA_LIST_CHECK )
+ extern int printf( const char *, __gnuc_va_list );
+ #endif  /* IRIX_STDIO_DUMMY_VA_LIST_CHECK */
+ 
+ 
+ #if defined( ISC_OMITS_WITH_STDC_CHECK )
+ #if !defined(_POSIX_SOURCE) /* ? ! */
+ int foo;
+ #endif
+ #endif  /* ISC_OMITS_WITH_STDC_CHECK */
+ 
+ 
+ #if defined( READ_RET_TYPE_CHECK )
+ extern unsigned int fread(), fwrite();
+ extern int	fclose(), fflush(), foo();
+ #endif  /* READ_RET_TYPE_CHECK */
+ 
+ 
+ #if defined( RS6000_PARAM_CHECK )
+ extern int rename(const char *_old, const char *_new);
+ #endif  /* RS6000_PARAM_CHECK */
+ 
+ 
+ #if defined( STDIO_STDARG_H_CHECK )
+ 
+ #endif  /* STDIO_STDARG_H_CHECK */
+ 
+ 
+ #if defined( STDIO_DUMMY_VA_LIST_CHECK )
+ extern void mumble( __gnuc_va_list);
+ #endif  /* STDIO_DUMMY_VA_LIST_CHECK */
+ 
+ 
+ #if defined( ULTRIX_CONST_CHECK )
+ extern void perror( const char *__s );
+ extern int fputs( const char *__s, FILE *);
+ extern size_t fwrite( const void *__ptr, size_t, size_t, FILE *);
+ extern int fscanf( FILE *__stream, const char *__format, ...);
+ extern int scanf( const char *__format, ...);
+ 
+ #endif  /* ULTRIX_CONST_CHECK */
+ 
+ 
+ #if defined( ULTRIX_CONST2_CHECK )
+ extern FILE *fopen( const char *__filename, const char *__type );
+ extern int sscanf( const char *__s, const char *__format, ...);
+ extern FILE *popen( const char *, const char *);
+ extern char *tempnam( const char *, const char *);
+ 
+ #endif  /* ULTRIX_CONST2_CHECK */
+ 
+ 
+ #if defined( ULTRIX_CONST3_CHECK )
+ extern FILE *	fdopen( int __filedes, const char *__type );
+ 
+ #endif  /* ULTRIX_CONST3_CHECK */
+ 
+ 
+ #if defined( UNICOSMK_RESTRICT_CHECK )
+ void f (char * __restrict__ x);
+ #endif  /* UNICOSMK_RESTRICT_CHECK */
+ 
+ #endif  /* FIXINC_WRAP_STDIO_H_STDIO_STDARG_H */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/stdio_tag.h gcc-4.0.0/fixincludes/tests/base/stdio_tag.h
*** gcc-3.4.3/fixincludes/tests/base/stdio_tag.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/stdio_tag.h	Tue Aug 31 09:26:07 2004
***************
*** 0 ****
--- 1,14 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/stdio_tag.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( SOLARIS_STDIO_TAG_CHECK )
+ #if	0
+ #endif  /* SOLARIS_STDIO_TAG_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/stdlib.h gcc-4.0.0/fixincludes/tests/base/stdlib.h
*** gcc-3.4.3/fixincludes/tests/base/stdlib.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/stdlib.h	Wed Sep 15 22:12:58 2004
***************
*** 0 ****
--- 1,72 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/stdlib.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( HPUX11_ABS_CHECK )
+ #if !defined(_MATH_INCLUDED) || defined(__GNUG__)
+ #endif  /* HPUX11_ABS_CHECK */
+ 
+ 
+ #if defined( HPUX_LONG_DOUBLE_CHECK )
+ extern long double strtold(const char *, char **);
+ 
+ #endif  /* HPUX_LONG_DOUBLE_CHECK */
+ 
+ 
+ #if defined( INT_ABORT_FREE_AND_EXIT_CHECK )
+ extern void	abort(int);
+ extern void	free(void*);
+ extern void	exit(void*);
+ #endif  /* INT_ABORT_FREE_AND_EXIT_CHECK */
+ 
+ 
+ #if defined( LYNXOS_MISSING_PUTENV_CHECK )
+ extern char *getenv	_AP((const char *));
+ extern int putenv				_AP((char *));
+ #endif  /* LYNXOS_MISSING_PUTENV_CHECK */
+ 
+ 
+ #if defined( SVR4_GETCWD_CHECK )
+ extern char* getcwd(char *, size_t);
+ #endif  /* SVR4_GETCWD_CHECK */
+ 
+ 
+ #if defined( SVR4_PROFIL_CHECK )
+ profil(unsigned short *, size_t, int, unsigned int);
+ #endif  /* SVR4_PROFIL_CHECK */
+ 
+ 
+ #if defined( SYSZ_STDLIB_FOR_SUN_CHECK )
+ extern void *	calloc(size_t);
+ extern void *	malloc(size_t);
+ extern void *	realloc(void*,size_t);
+ extern void *	bsearch(void*,size_t,size_t);
+ 
+ #endif  /* SYSZ_STDLIB_FOR_SUN_CHECK */
+ 
+ 
+ #if defined( ULTRIX_ATEXIT_PARAM_CHECK )
+ int atexit( void (*__func)( void ) );
+ 
+ #endif  /* ULTRIX_ATEXIT_PARAM_CHECK */
+ 
+ 
+ #if defined( ULTRIX_STDLIB_CHECK )
+ @(#)stdlib.h      6.1     (ULTRIX)
+ char *		getenv( const char *__name );
+ int		setenv( const char *__name, const char *__val, int __ovrwrt );
+ void		unsetenv( const char *__name );
+ int		putenv( char *__s );
+ char	*getenv();
+ int	setenv();
+ void	unsetenv();
+ int	putenv();
+ 
+ #endif  /* ULTRIX_STDLIB_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/string.h gcc-4.0.0/fixincludes/tests/base/string.h
*** gcc-3.4.3/fixincludes/tests/base/string.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/string.h	Tue Aug 31 09:26:07 2004
***************
*** 0 ****
--- 1,13 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/string.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ #ifndef _STRING_INCLUDED
+   #define _STRING_INCLUDED
+   #include <strings.h>
+ #endif /* _STRING_INCLUDED */
\ No newline at end of file
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/strings.h gcc-4.0.0/fixincludes/tests/base/strings.h
*** gcc-3.4.3/fixincludes/tests/base/strings.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/strings.h	Tue Aug 31 09:26:07 2004
***************
*** 0 ****
--- 1,40 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/strings.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ #ifndef FIXINC_WRAP_STRINGS_H_ULTRIX_STRINGS
+ #define FIXINC_WRAP_STRINGS_H_ULTRIX_STRINGS 1
+ 
+ 
+ 
+ #if defined( SUNOS_STRLEN_CHECK )
+  __SIZE_TYPE__ strlen(); /* string length */
+ #endif  /* SUNOS_STRLEN_CHECK */
+ 
+ 
+ #if defined( ULTRIX_STRINGS_CHECK )
+ @(#)strings.h   6.1     (ULTRIX)
+ 
+ #endif  /* ULTRIX_STRINGS_CHECK */
+ 
+ 
+ #if defined( ULTRIX_STRINGS2_CHECK )
+ @(#)strings.h      6.1     (ULTRIX)
+ 	strncmp( const char *__s1, const char *__s2, size_t __n );
+ 
+ extern int
+ 	strcasecmp( const char *__s1, const char *__s2),
+ 	strncasecmp( const char *__s1, const char *__s2, size_t __n );
+ 	strncmp();
+ extern int
+ 	strcasecmp(),
+ 	strncasecmp();
+ 
+ #endif  /* ULTRIX_STRINGS2_CHECK */
+ 
+ #endif  /* FIXINC_WRAP_STRINGS_H_ULTRIX_STRINGS */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/sundev/vuid_event.h gcc-4.0.0/fixincludes/tests/base/sundev/vuid_event.h
*** gcc-3.4.3/fixincludes/tests/base/sundev/vuid_event.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/sundev/vuid_event.h	Tue Aug 31 09:26:14 2004
***************
*** 0 ****
--- 1,14 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/sundev/vuid_event.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( BADQUOTE_CHECK )
+ /* does not have matched single quotes */
+ #endif  /* BADQUOTE_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/sunwindow/win_lock.h gcc-4.0.0/fixincludes/tests/base/sunwindow/win_lock.h
*** gcc-3.4.3/fixincludes/tests/base/sunwindow/win_lock.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/sunwindow/win_lock.h	Tue Aug 31 09:26:15 2004
***************
*** 0 ****
--- 1,16 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/sunwindow/win_lock.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( ECD_CURSOR_CHECK )
+ #ifdef ecd_cursor
+ #error bogus
+ #endif /* ecd+cursor */
+ #endif  /* ECD_CURSOR_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/sym.h gcc-4.0.0/fixincludes/tests/base/sym.h
*** gcc-3.4.3/fixincludes/tests/base/sym.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/sym.h	Tue Aug 31 09:26:07 2004
***************
*** 0 ****
--- 1,16 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/sym.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( ALPHA_PARENS_CHECK )
+ #ifndef __mips64 /* bogus */
+ extern int foo;
+ #endif
+ #endif  /* ALPHA_PARENS_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/sys/asm.h gcc-4.0.0/fixincludes/tests/base/sys/asm.h
*** gcc-3.4.3/fixincludes/tests/base/sys/asm.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/sys/asm.h	Tue Aug 31 09:26:15 2004
***************
*** 0 ****
--- 1,14 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/sys/asm.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( IRIX_ASM_APOSTROPHE_CHECK )
+ 	# and we are on vacation
+ #endif  /* IRIX_ASM_APOSTROPHE_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/sys/cdefs.h gcc-4.0.0/fixincludes/tests/base/sys/cdefs.h
*** gcc-3.4.3/fixincludes/tests/base/sys/cdefs.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/sys/cdefs.h	Tue Oct  5 03:13:43 2004
***************
*** 0 ****
--- 1,24 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/sys/cdefs.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( FREEBSD_GCC3_BREAKAGE_CHECK )
+ #if __GNUC__ == 2 && __GNUC_MINOR__ >= 7
+ #endif  /* FREEBSD_GCC3_BREAKAGE_CHECK */
+ 
+ 
+ #if defined( FREEBSD_GCC4_BREAKAGE_CHECK )
+ #if __GNUC__ == 2 && __GNUC_MINOR__ >= 7 || __GNUC__ >= 3
+ #endif  /* FREEBSD_GCC4_BREAKAGE_CHECK */
+ 
+ 
+ #if defined( NETBSD_EXTRA_SEMICOLON_CHECK )
+ #define __END_DECLS }
+ #endif  /* NETBSD_EXTRA_SEMICOLON_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/sys/file.h gcc-4.0.0/fixincludes/tests/base/sys/file.h
*** gcc-3.4.3/fixincludes/tests/base/sys/file.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/sys/file.h	Tue Aug 31 09:26:15 2004
***************
*** 0 ****
--- 1,21 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/sys/file.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( HP_SYSFILE_CHECK )
+ extern void foo(struct file *, ...); /* HPUX_SOURCE - bad varargs */
+ #endif  /* HP_SYSFILE_CHECK */
+ 
+ 
+ #if defined( ULTRIX_IFDEF_CHECK )
+ #if defined(KERNEL) && defined( mumbojumbo )
+ int oops;
+ #endif
+ #endif  /* ULTRIX_IFDEF_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/sys/ioctl.h gcc-4.0.0/fixincludes/tests/base/sys/ioctl.h
*** gcc-3.4.3/fixincludes/tests/base/sys/ioctl.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/sys/ioctl.h	Tue Aug 31 09:26:15 2004
***************
*** 0 ****
--- 1,15 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/sys/ioctl.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( ULTRIX_NESTED_IOCTL_CHECK )
+ /* #define SIOCSCREENON _IOWR('i', 49, int)*//* screend, net/gw_screen.h */
+ 
+ #endif  /* ULTRIX_NESTED_IOCTL_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/sys/limits.h gcc-4.0.0/fixincludes/tests/base/sys/limits.h
*** gcc-3.4.3/fixincludes/tests/base/sys/limits.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/sys/limits.h	Sat Nov 13 20:41:01 2004
***************
*** 0 ****
--- 1,29 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/sys/limits.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( NESTED_MOTOROLA_CHECK )
+ #undef PIPE_BUF /* max # bytes atomic in write to a */
+ 		/* PIPE */
+ /*#define	HUGE_VAL	3.9e+9 */ /*error value returned by Math lib*/
+ #endif  /* NESTED_MOTOROLA_CHECK */
+ 
+ 
+ #if defined( NESTED_SYS_LIMITS_CHECK )
+ /*
+ #define CHILD_MAX 20  Max, Max, ... */ /*
+ #define OPEN_MAX  20  Max, Max, ... */
+ 
+ #endif  /* NESTED_SYS_LIMITS_CHECK */
+ 
+ 
+ #if defined( ULTRIX_MATH_IFDEF_CHECK )
+ #if     defined(__GFLOAT) 
+ #endif  /* ULTRIX_MATH_IFDEF_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/sys/machine.h gcc-4.0.0/fixincludes/tests/base/sys/machine.h
*** gcc-3.4.3/fixincludes/tests/base/sys/machine.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/sys/machine.h	Tue Aug 31 09:26:15 2004
***************
*** 0 ****
--- 1,16 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/sys/machine.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( AIX_SYSMACHINE_CHECK )
+ #define FOO  bar \
+  baz \
+  bat
+ #endif  /* AIX_SYSMACHINE_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/sys/mman.h gcc-4.0.0/fixincludes/tests/base/sys/mman.h
*** gcc-3.4.3/fixincludes/tests/base/sys/mman.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/sys/mman.h	Tue Aug 31 09:26:15 2004
***************
*** 0 ****
--- 1,25 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/sys/mman.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ #ifndef FIXINC_WRAP_SYS_MMAN_H_CXX_UNREADY
+ #define FIXINC_WRAP_SYS_MMAN_H_CXX_UNREADY 1
+ 
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+ 
+ 
+ #if defined( CXX_UNREADY_CHECK )
+ extern void* malloc( size_t );
+ #endif  /* CXX_UNREADY_CHECK */
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif  /* FIXINC_WRAP_SYS_MMAN_H_CXX_UNREADY */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/sys/regset.h gcc-4.0.0/fixincludes/tests/base/sys/regset.h
*** gcc-3.4.3/fixincludes/tests/base/sys/regset.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/sys/regset.h	Tue Aug 31 09:26:15 2004
***************
*** 0 ****
--- 1,26 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/sys/regset.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( SCO_REGSET_CHECK )
+ union u_fps {
+     struct	rsfpstate
+     {
+        int whatever;
+     }
+ };
+ union _u_fps {
+     struct _rsfpstate
+     {
+        int whatever;
+     }
+ };
+ 
+ #endif  /* SCO_REGSET_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/sys/signal.h gcc-4.0.0/fixincludes/tests/base/sys/signal.h
*** gcc-3.4.3/fixincludes/tests/base/sys/signal.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/sys/signal.h	Tue Aug 31 09:26:15 2004
***************
*** 0 ****
--- 1,30 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/sys/signal.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( AIX_VOLATILE_CHECK )
+ typedef int sig_atomic_t;
+ #endif  /* AIX_VOLATILE_CHECK */
+ 
+ 
+ #if defined( SUN_SIGNAL_CHECK )
+ #ifdef __cplusplus
+ void	(*signal(...))(...);
+ #else
+ void	(*signal())();
+ #endif
+ #endif  /* SUN_SIGNAL_CHECK */
+ 
+ 
+ #if defined( SVR4_SIGHANDLER_TYPE_CHECK )
+ #define SIG_DFL (void (*)(int))0
+ #define SIG_IGN (void (*)(int))0
+ 
+ #endif  /* SVR4_SIGHANDLER_TYPE_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/sys/socket.h gcc-4.0.0/fixincludes/tests/base/sys/socket.h
*** gcc-3.4.3/fixincludes/tests/base/sys/socket.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/sys/socket.h	Tue Aug 31 09:26:15 2004
***************
*** 0 ****
--- 1,26 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/sys/socket.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( IRIX_SOCKLEN_T_CHECK )
+ #define _SOCKLEN_T
+ #if _NO_XOPEN4 && _NO_XOPEN5
+ typedef int socklen_t;
+ #else
+ typedef u_int32_t socklen_t;
+ #endif /* _NO_XOPEN4 && _NO_XOPEN5 */
+ #endif  /* IRIX_SOCKLEN_T_CHECK */
+ 
+ 
+ #if defined( SOLARIS_SOCKET_CHECK )
+ #ident   "@(#)socket.h   1.30    97/01/20 SMI"
+ extern int recv(int, void *, int, int);
+ extern int send(int, const void *, int, int);
+ #endif  /* SOLARIS_SOCKET_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/sys/spinlock.h gcc-4.0.0/fixincludes/tests/base/sys/spinlock.h
*** gcc-3.4.3/fixincludes/tests/base/sys/spinlock.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/sys/spinlock.h	Tue Aug 31 09:26:15 2004
***************
*** 0 ****
--- 1,14 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/sys/spinlock.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( HP_INLINE_CHECK )
+  # include <machine/mumble.h>
+ #endif  /* HP_INLINE_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/sys/stat.h gcc-4.0.0/fixincludes/tests/base/sys/stat.h
*** gcc-3.4.3/fixincludes/tests/base/sys/stat.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/sys/stat.h	Tue Aug 31 09:26:15 2004
***************
*** 0 ****
--- 1,68 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/sys/stat.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( ALPHA___EXTERN_PREFIX_SYS_STAT_CHECK )
+ #   if defined(__DECC) || defined(__PRAGMA_EXTERN_PREFIX)
+ #endif  /* ALPHA___EXTERN_PREFIX_SYS_STAT_CHECK */
+ 
+ 
+ #if defined( RS6000_FCHMOD_CHECK )
+ extern int fchmod(int, mode_t);
+ #endif  /* RS6000_FCHMOD_CHECK */
+ 
+ 
+ #if defined( SCO_STATIC_FUNC_CHECK )
+ #ifdef __STDC__
+ #if __cplusplus
+ extern "C" {
+ #endif /* __cplusplus */
+ static int	stat(const char *__f, struct stat *__p) {
+ 	return __stat32(__f, __p);
+ }
+ #if __cplusplus
+  }
+ #endif /* __cplusplus */
+ 
+ #  else /* !__STDC__ THIS FAILS ON BSD SYSTEMS */
+ #if __cplusplus
+ extern "C" {
+ #endif /* __cplusplus */
+ static int	stat(__f, __p)
+ 	char *__f;
+ 	struct stat *__p;
+ {
+ 	return __stat32(__f, __p);
+ }
+ #if __cplusplus
+  }
+ #endif /* __cplusplus */
+ #endif
+ #endif  /* SCO_STATIC_FUNC_CHECK */
+ 
+ 
+ #if defined( ULTRIX_STAT_CHECK )
+ @(#)stat.h      6.1     (ULTRIX)
+ #define S_IFPORT S_IFIFO
+ 
+ /* macro to test for symbolic link */
+ #define S_ISLNK(mode) (((mode) & S_IFMT) == S_IFLNK)
+ 
+ 	fstat(),
+ 	lstat(),
+ /* THE INSERTION LINE FAILS ON BSD SYSTEMS */
+ #endif  /* ULTRIX_STAT_CHECK */
+ 
+ 
+ #if defined( VXWORKS_NEEDS_VXWORKS_CHECK )
+ #include </dev/null> /* ULONG */
+ # define	__INCstath <sys/stat.h>
+ #include <types/vxTypesOld.h>
+ #endif  /* VXWORKS_NEEDS_VXWORKS_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/sys/time.h gcc-4.0.0/fixincludes/tests/base/sys/time.h
*** gcc-3.4.3/fixincludes/tests/base/sys/time.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/sys/time.h	Wed Sep 15 22:12:58 2004
***************
*** 0 ****
--- 1,46 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/sys/time.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( HPUX_SYSTIME_CHECK )
+ struct sigevent;
+ #endif  /* HPUX_SYSTIME_CHECK */
+ 
+ 
+ #if defined( LYNXOS_NO_WARNING_IN_SYS_TIME_H_CHECK )
+ 
+ #endif  /* LYNXOS_NO_WARNING_IN_SYS_TIME_H_CHECK */
+ 
+ 
+ #if defined( ULTRIX_SYS_TIME_CHECK )
+ @(#)time.h      6.1     (ULTRIX)
+ extern time_t		time( time_t *__tloc );
+ 
+ extern int adjtime(struct timeval *, struct timeval *);
+ extern int getitimer(int, struct itimerval *);
+ extern int setitimer(int, struct itimerval *, struct itimerval *);
+ extern int gettimeofday(struct timeval *, struct timezone *);
+ extern int settimeofday(struct timeval *, struct timezone *);
+ extern void profil(const void *, size_t, size_t, unsigned int);
+ extern int stime(const time_t *);
+ extern int utimes(const char *, const struct timeval[2]);
+ extern int select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
+ extern double difftime();
+ extern	int adjtime();
+ extern	int getitimer();
+ extern	int setitimer();
+ extern	int gettimeofday();
+ extern	int settimeofday();
+ extern	void profil();
+ extern	int stime();
+ extern	int utimes();
+ extern	int select();
+ 
+ #endif  /* ULTRIX_SYS_TIME_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/sys/times.h gcc-4.0.0/fixincludes/tests/base/sys/times.h
*** gcc-3.4.3/fixincludes/tests/base/sys/times.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/sys/times.h	Tue Aug 31 09:26:15 2004
***************
*** 0 ****
--- 1,14 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/sys/times.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( SCO_UTIME_CHECK )
+ extern int utime(const char *, const struct utimbuf *);
+ #endif  /* SCO_UTIME_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/sys/types.h gcc-4.0.0/fixincludes/tests/base/sys/types.h
*** gcc-3.4.3/fixincludes/tests/base/sys/types.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/sys/types.h	Tue Aug 31 09:26:15 2004
***************
*** 0 ****
--- 1,30 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/sys/types.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( GNU_TYPES_CHECK )
+ #if !defined(_GCC_PTRDIFF_T)
+ #define _GCC_PTRDIFF_T
+ typedef __PTRDIFF_TYPE__ ptrdiff_t;
+ #endif
+  /* long int */
+ #if !defined(_GCC_SIZE_T)
+ #define _GCC_SIZE_T
+ typedef __SIZE_TYPE__ size_t;
+ #endif
+  /* uint_t */
+ #ifndef __cplusplus
+ #if !defined(_GCC_WCHAR_T) && ! defined(__cplusplus)
+ #define _GCC_WCHAR_T
+ typedef __WCHAR_TYPE__ wchar_t;
+ #endif
+ 
+ #endif /* ushort_t */
+ #endif  /* GNU_TYPES_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/sys/ucontext.h gcc-4.0.0/fixincludes/tests/base/sys/ucontext.h
*** gcc-3.4.3/fixincludes/tests/base/sys/ucontext.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/sys/ucontext.h	Fri Sep 17 22:58:40 2004
***************
*** 0 ****
--- 1,16 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/sys/ucontext.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( LINUX_IA64_UCONTEXT_CHECK )
+ # define _SC_GR0_OFFSET	\
+ 	__builtin_offsetof (struct sigcontext, sc_gr[0])
+ 
+ #endif  /* LINUX_IA64_UCONTEXT_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/sys/utsname.h gcc-4.0.0/fixincludes/tests/base/sys/utsname.h
*** gcc-3.4.3/fixincludes/tests/base/sys/utsname.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/sys/utsname.h	Tue Aug 31 09:26:15 2004
***************
*** 0 ****
--- 1,16 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/sys/utsname.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( ULTRIX_FIX_FIXPROTO_CHECK )
+ /* ULTRIX's uname */
+ struct utsname;
+ extern	int	uname();
+ #endif  /* ULTRIX_FIX_FIXPROTO_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/sys/wait.h gcc-4.0.0/fixincludes/tests/base/sys/wait.h
*** gcc-3.4.3/fixincludes/tests/base/sys/wait.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/sys/wait.h	Tue Aug 31 09:26:15 2004
***************
*** 0 ****
--- 1,27 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/sys/wait.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( AIX_SYSWAIT_CHECK )
+ /* bos325, */
+ struct rusage;
+ extern pid_t wait3();
+ 	/* pid_t wait3(int *, int, struct rusage *); */
+ #endif  /* AIX_SYSWAIT_CHECK */
+ 
+ 
+ #if defined( AIX_SYSWAIT_2_CHECK )
+ #define WSTOPSIG(__x)    (int)(WIFSTOPPED(__x) ? (int)((((unsigned int)__x) >> 8) & 0xff) : -1)
+ #endif  /* AIX_SYSWAIT_2_CHECK */
+ 
+ 
+ #if defined( NEXT_WAIT_UNION_CHECK )
+ extern pid_d wait(void*);
+ #endif  /* NEXT_WAIT_UNION_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/testing.h gcc-4.0.0/fixincludes/tests/base/testing.h
*** gcc-3.4.3/fixincludes/tests/base/testing.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/testing.h	Sat Nov 13 20:41:00 2004
***************
*** 0 ****
--- 1,134 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/testing.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( ALPHA___EXTERN_PREFIX_CHECK )
+ #if (defined(__DECC) || defined(__PRAGMA_EXTERN_PREFIX))
+ #pragma extern_prefix "_P"
+ #   if  (defined(__DECC) || defined(__PRAGMA_EXTERN_PREFIX))
+ #     pragma extern_prefix "_E"
+ # if !defined(_LIBC_POLLUTION_H_) &&  (defined(__DECC) || defined(__PRAGMA_EXTERN_PREFIX))
+ #  pragma extern_prefix ""
+ #endif  /* ALPHA___EXTERN_PREFIX_CHECK */
+ 
+ 
+ #if defined( ALPHA_BAD_LVAL_CHECK )
+ #pragma extern_prefix "_FOO"
+ #define something _FOOsomething
+ #define mumble _FOOmumble
+ #endif  /* ALPHA_BAD_LVAL_CHECK */
+ 
+ 
+ #if defined( AVOID_WCHAR_T_TYPE_CHECK )
+ #ifndef __cplusplus
+ typedef unsigned short	wchar_t 	;
+ #endif /* wchar_t
+  type */
+ #endif  /* AVOID_WCHAR_T_TYPE_CHECK */
+ 
+ 
+ #if defined( CTRL_QUOTES_DEF_CHECK )
+ #define BSD43_CTRL(n, x) ((n<<8)+x)
+ 
+ #endif  /* CTRL_QUOTES_DEF_CHECK */
+ 
+ 
+ #if defined( CTRL_QUOTES_USE_CHECK )
+ #define TCTRLFOO BSD43_CTRL('T', 1)
+ #endif  /* CTRL_QUOTES_USE_CHECK */
+ 
+ 
+ #if defined( DJGPP_WCHAR_H_CHECK )
+ #include <stddef.h>
+ #include <sys/djtypes.h>
+ extern __DJ_wint_t x;
+ 
+ #endif  /* DJGPP_WCHAR_H_CHECK */
+ 
+ 
+ #if defined( HPUX11_SIZE_T_CHECK )
+ #define _hpux_size_t size_t
+        extern int getpwuid_r( char *, _hpux_size_t, struct passwd **);
+ 
+ #endif  /* HPUX11_SIZE_T_CHECK */
+ 
+ 
+ #if defined( IO_QUOTES_DEF_CHECK )
+ #define BSD43__IOWR(n, x) ((n<<8)+x)
+ #define _IOWN(x,y,t)  (_IOC_IN|(((t)&_IOCPARM_MASK)<<16)|(x<<8)|y)
+ #define _IO(x,y)      (x<<8|y)
+ #endif  /* IO_QUOTES_DEF_CHECK */
+ 
+ 
+ #if defined( IO_QUOTES_USE_CHECK )
+ #define TIOCFOO BSD43__IOWR('T', 1)
+ #define TIOCFOO \
+ BSD43__IOWR('T', 1) /* Some are multi-line */
+ #endif  /* IO_QUOTES_USE_CHECK */
+ 
+ 
+ #if defined( LIBC1_IFDEFD_MEMX_CHECK )
+ /* Copy N bytes of SRC to DEST.  */
+ extern __ptr_t memcpy __P ((__ptr_t __dest, __const __ptr_t __src,
+                          size_t __n));
+ #endif  /* LIBC1_IFDEFD_MEMX_CHECK */
+ 
+ 
+ #if defined( MACHINE_ANSI_H_VA_LIST_CHECK )
+  # define _BSD_VA_LIST_	__builtin_va_list
+ #endif  /* MACHINE_ANSI_H_VA_LIST_CHECK */
+ 
+ 
+ #if defined( MACHINE_NAME_CHECK )
+ /* MACH_DIFF: */
+ #if defined( i386 ) || defined( sparc ) || defined( vax )
+ /* no uniform test, so be careful  :-) */
+ #endif  /* MACHINE_NAME_CHECK */
+ 
+ 
+ #if defined( STRICT_ANSI_NOT_CHECK )
+ #if  !defined(__STRICT_ANSI__) 
+ #if  !defined(__STRICT_ANSI__)
+ #if  !defined(__STRICT_ANSI__)
+ #if  !defined(__STRICT_ANSI__)/* not std C */
+ int foo;
+ 
+ #end-end-end-end-if :-)
+ #endif  /* STRICT_ANSI_NOT_CHECK */
+ 
+ 
+ #if defined( STRICT_ANSI_ONLY_CHECK )
+ #if  defined(__STRICT_ANSI__) /* is std C
+  */
+ int foo;
+ #endif
+ #endif  /* STRICT_ANSI_ONLY_CHECK */
+ 
+ 
+ #if defined( SYSV68_STRING_CHECK )
+ extern unsigned int strlen();
+ extern int ffs(int);
+ extern void
+ 	*memccpy(),
+ 	memcpy();
+ extern int
+ 	strcmp(),
+ 	strncmp();
+ extern unsigned int
+ 	strlen(),
+ 	strspn();
+ extern size_t
+ 	strlen(), strspn();
+ #endif  /* SYSV68_STRING_CHECK */
+ 
+ 
+ #if defined( WINDISS_VALIST_CHECK )
+ #include <stdarg.h>
+ #endif  /* WINDISS_VALIST_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/time.h gcc-4.0.0/fixincludes/tests/base/time.h
*** gcc-3.4.3/fixincludes/tests/base/time.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/time.h	Tue Aug 31 09:26:07 2004
***************
*** 0 ****
--- 1,27 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/time.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( VXWORKS_NEEDS_VXTYPES_CHECK )
+ unsigned int	_clocks_per_sec;
+ #endif  /* VXWORKS_NEEDS_VXTYPES_CHECK */
+ 
+ 
+ #if defined( VXWORKS_TIME_CHECK )
+ #ifndef __gcc_VOIDFUNCPTR_defined
+ #ifdef __cplusplus
+ typedef void (*__gcc_VOIDFUNCPTR) (...);
+ #else
+ typedef void (*__gcc_VOIDFUNCPTR) ();
+ #endif
+ #define __gcc_VOIDFUNCPTR_defined
+ #endif
+ #define VOIDFUNCPTR __gcc_VOIDFUNCPTR
+ #endif  /* VXWORKS_TIME_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/tinfo.h gcc-4.0.0/fixincludes/tests/base/tinfo.h
*** gcc-3.4.3/fixincludes/tests/base/tinfo.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/tinfo.h	Tue Aug 31 09:26:07 2004
***************
*** 0 ****
--- 1,16 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/tinfo.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( TINFO_CPLUSPLUS_CHECK )
+ #ifdef __cplusplus
+ int bogus;
+ #endif
+ #endif  /* TINFO_CPLUSPLUS_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/types/vxTypesBase.h gcc-4.0.0/fixincludes/tests/base/types/vxTypesBase.h
*** gcc-3.4.3/fixincludes/tests/base/types/vxTypesBase.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/types/vxTypesBase.h	Tue Aug 31 09:26:16 2004
***************
*** 0 ****
--- 1,30 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/types/vxTypesBase.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( VXWORKS_GCC_PROBLEM_CHECK )
+ #if 1
+ #ifndef _GCC_SIZE_T
+ #define _GCC_SIZE_T
+ typedef unsigned int size_t;
+ #endif
+ #ifndef _GCC_PTRDIFF_T
+ #define _GCC_PTRDIFF_T
+ typedef long ptrdiff_t;
+ #endif
+ #ifndef __cplusplus
+ #ifndef _GCC_WCHAR_T
+ #define _GCC_WCHAR_T
+ typedef unsigned short wchar_t;
+ #endif
+ #endif
+ #endif /* __GNUC_TYPEOF_FEATURE_BROKEN_USE_DEFAULT_UNTIL_FIXED__ */
+ 
+ #endif  /* VXWORKS_GCC_PROBLEM_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/unistd.h gcc-4.0.0/fixincludes/tests/base/unistd.h
*** gcc-3.4.3/fixincludes/tests/base/unistd.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/unistd.h	Tue Aug 31 09:26:07 2004
***************
*** 0 ****
--- 1,33 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/unistd.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( ALPHA_SBRK_CHECK )
+ extern void *sbrk(ptrdiff_t increment);
+ #endif  /* ALPHA_SBRK_CHECK */
+ 
+ 
+ #if defined( SOLARIS_UNISTD_CHECK )
+ #ident "@(#)unistd.h   1.33    95/08/28 SMI"
+ extern int getpagesize();
+ extern pid_t getpgid(pid_t);
+ extern int getpagesize();
+ extern int getpgid();
+ #endif  /* SOLARIS_UNISTD_CHECK */
+ 
+ 
+ #if defined( ULTRIX_UNISTD_CHECK )
+ @(#)unistd.h      6.1     (ULTRIX)
+ 	getgroups(),
+ 	getpagesize(),
+ 	fork(),
+ 	vfork(),
+ 
+ #endif  /* ULTRIX_UNISTD_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/wchar.h gcc-4.0.0/fixincludes/tests/base/wchar.h
*** gcc-3.4.3/fixincludes/tests/base/wchar.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/wchar.h	Tue Aug 31 09:26:07 2004
***************
*** 0 ****
--- 1,15 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/wchar.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( ALPHA_WCHAR_CHECK )
+ extern wchar_t *wcstok __((wchar_t *, const wchar_t *, wchar_t **)) __asm__("wcstok_r");
+ extern size_t   wcsftime __((wchar_t *, size_t, const wchar_t *, const struct tm *)) __asm__("__wcsftime_isoc");
+ #endif  /* ALPHA_WCHAR_CHECK */
diff -Nrcpad gcc-3.4.3/fixincludes/tests/base/widec.h gcc-4.0.0/fixincludes/tests/base/widec.h
*** gcc-3.4.3/fixincludes/tests/base/widec.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fixincludes/tests/base/widec.h	Tue Aug 31 09:26:07 2004
***************
*** 0 ****
--- 1,15 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/widec.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( SOLARIS_WIDEC_CHECK )
+ #include <euc.h>
+ #include <wchar.h>
+ #endif  /* SOLARIS_WIDEC_CHECK */
diff -Nrcpad gcc-3.4.3/gcc/.cvsignore gcc-4.0.0/gcc/.cvsignore
*** gcc-3.4.3/gcc/.cvsignore	Mon Jan  5 00:39:35 2004
--- gcc-4.0.0/gcc/.cvsignore	Tue Mar 30 08:48:59 2004
***************
*** 1,3 ****
--- 1,7 ----
+ GPATH
+ GRTAGS
+ GSYMS
+ GTAGS
  cscope.files
  cscope.out
  cscope.in.out
diff -Nrcpad gcc-3.4.3/gcc/ChangeLog gcc-4.0.0/gcc/ChangeLog
*** gcc-3.4.3/gcc/ChangeLog	Fri Nov  5 03:33:38 2004
--- gcc-4.0.0/gcc/ChangeLog	Thu Apr 21 05:17:52 2005
***************
*** 1,6847 ****
! 2004-11-04  Release Manager
! 
! 	* GCC 3.4.3 released.
! 
! 2004-10-31  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR middle-end/18129
! 	* varasm.c (copy_constant): Don't copy STRING_CSTs if
! 	flag_writable_strings.
! 	(build_constant_desc): Call copy_constant unconditionally.
! 
! 2004-10-30  Roger Sayle  <roger@eyesopen.com>
! 
! 	PR rtl-optimization/17581
! 	* cselib.c (cselib_process_insn): The last instruction of a libcall
! 	block, with the REG_RETVAL note, should be considered in the libcall.
! 	* gcse.c (do_local_cprop): Allow constants to be propagated outside
! 	of libcall blocks.
! 	(adjust_libcall_notes): Use simplify_replace_rtx instead of
! 	replace_rtx to avoid creating invalid RTL in REG_RETVAL notes.
! 
! 2004-10-27  Andrew Pinski  <pinskia@physics.uc.edu>
! 
! 	PR other/18186
! 	* common.opt (--param): Fix spelling of parameter.
! 
! 2004-10-27  Andreas Krebbel  <krebbel1@de.ibm.com>
! 
! 	* config/s390/s390.md ("*subdf3_cc"): Replaced plus by minus.
! 
! 2004-10-26  Richard Sandiford  <rsandifo@redhat.com>
! 
! 	PR bootstrap/15747
! 	* doc/install.texi (mips-sgi-irix5): Document that /bin/sh has been
! 	reported to hang during bootstrap and that CONFIG_SHELL=/bin/ksh
! 	can be used to work around this.
! 
! 2004-10-26  Roger Sayle  <roger@eyesopen.com>
! 	    John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
! 
! 	Backport 3.4 regression fix from mainline
! 	* cse.c: Change encoding of quantity numbers to avoid undefined
! 	pointer arithmetic on qty_table.
! 	(REGNO_QTY_VALID_P): A quantity is now valid if it isn't negative.
! 	(get_cse_reg_info): Initialize reg_qty to a unique negative value.
! 	(new_basic_block): Assign "real" quantity numbers from zero.
! 	(delete_reg_equiv): Do nothing if quantity is invalid.  Reset the
! 	REG_QTY to its unique negative value.
! 	(merge_equiv_classes): Calculate need_rehash if quantity is valid.
! 	(cse_main): Don't include max_reg when determining max_qty.
! 	(cse_basic_block): Avoid subtracting a large offset from qty_table,
! 	which causes undefined C99 behaviour.  Only allocate needed memory.
! 
! 2004-10-25  Jakub Jelinek  <jakub@redhat.com>
! 
! 	* dwarf2out.c (rtl_for_decl_location): Avoid segfault if
! 	DECL_INCOMING_RTL is NULL.
! 
! 2004-10-21  Eric Christopher  <echristo@redhat.com>
! 
! 	* config/rs6000/rs6000.c (setup_incoming_varargs): Align DFmode
! 	saves.
! 
! 2004-10-22  Bernardo Innocenti  <bernie@develer.com>
! 
! 	Backport from the mainline:
! 	2004-10-22  Peter Barada  <peter@the-baradas.com>
! 	* config/m68k/m68k.h (HARD_REGNO_RENAME_OK): New macro.
! 	* config/m68k/m68k.c (m68k_hard regno_rename_ok): Disallow
! 	renaming of non-live registers in interrupt functions.
! 	* config/m68k/m68k-protos.h (m68k_hard_regno_rename_ok): Add prototype.
! 
! 2004-10-21  Giovanni Bajo  <giovannibajo@gcc.gnu.org>
! 
! 	* config/arc/lib1funcs.asm (___umulsidi3): Fix typo.
! 
! 2004-10-21  Aldy Hernandez  <aldyh@redhat.com>
! 
! 	PR 18004.
! 	* expmed.c (store_bit_field): Pass original 'value' before
! 	recursing.
! 
! 2004-10-21  Ramana Radhakrishnan  <ramana.radhakrishnan@codito.com>
! 
! 	* config/arc/lib1funcs.asm (___umulsidi3): Correct usage of flags.
! 
! 	PR target/17317
! 	* config/arc/arc.h (REGNO_OK_FOR_BASE_P,REGNO_OK_FOR_INDEX_P,
! 	REG_OK_FOR_BASE, REG_OK_FOR_INDEX): Consider blink(r31) as a valid
! 	base and index register for loads.
! 
! 	* config/arc/t-arc: Fix multilib handling.
! 
! 2004-10-18  H.J. Lu  <hongjiu.lu@intel.com>
! 
! 	PR bootstrap/17684
! 	* Makefile.in (clean): Remove libgcc_s$(SHLIB_EXT).1.stage?.
! 	(stage1-start): Remove and copy libunwind.a and
! 	libunwind*$(SHLIB_EXT) instead of libunwind*.
! 	(stage2-start): Likewise.
! 	(stage3-start): Likewise.
! 	(stage4-start): Likewise.
! 	(stageprofile-start): Likewise.
! 	(stagefeedback-start): Likewise.
! 
! 	* config/alpha/t-osf4 (SHLIB_LINK): Use a temporary file for
! 	the shared library to be created and don't remove the existing
! 	shared library.
! 	* config/arm/t-netbsd (SHLIB_LINK): Likewise.
! 	* config/mips/t-iris5-6 (SHLIB_LINK): Likewise.
! 	* config/pa/t-hpux-shlib (SHLIB_LINK): Likewise.
! 	* config/sh/t-linux (SHLIB_LINK): Likewise.
! 	* config/t-libunwind-elf (SHLIBUNWIND_LINK): Likewise.
! 	* config/t-slibgcc-darwin (SHLIB_LINK): Likewise.
! 	* config/t-slibgcc-elf-ver (SHLIB_LINK): Likewise.
! 	* config/t-slibgcc-sld (SHLIB_LINK): Likewise.
! 
! 	* mklibgcc.in (libgcc-stage-start): Also move "*${objext}s"
! 	files.
! 
! 2004-10-18  Jakub Jelinek  <jakub@redhat.com>
! 
! 	* config/i386/i386.md (addqi_1_slp): Test for incdec_operand
! 	operand 1 instead of 2
! 
! 2004-10-17  David O'Brien  <obrien@FreeBSD.org>
! 
! 	* config/rs6000/sysv4.h (LINK_OS_FREEBSD_SPEC): Sync '-p' handling with
! 	other FreeBSD platforms.
! 
! 2004-10-14  Richard Henderson  <rth@redhat.com>
! 
! 	PR debug/14492
! 	* dwarf2out.c (loc_descriptor_from_tree): Handle FIX_*_EXPR.
! 
! 2004-10-14  Richard Henderson  <rth@redhat.com>
! 
! 	PR c/17023
! 	* c-parse.in (compstmt_primary_start): Check last_tree non-null,
! 	not current_function_decl non-null.
! 
! 2004-10-14  Roger Sayle  <roger@eyesopen.com>
! 
! 	PR other/17361
! 	* c-opts.c (c_common_init_options): Scan command line options for
! 	"-lang-asm" and if found allow any of the C-family front-end options.
! 	Likewise, scan all command line options for g77's -traditional-cpp.
! 
! 2004-10-14  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
! 
! 	* doc/install.texi (*-*-solaris2*): Update with info about kernel
! 	patches to solve spurious testsuite failures.
! 
! 2004-10-13  Andrew Pinski  <pinskia@physics.uc.edu>
! 
! 	* dwarf2out.c (rtl_for_decl_location): Do not use MEM_P but use
! 	GET_CODE == MEM.
! 
! 2004-10-13  Richard Henderson  <rth@redhat.com>
! 
!         PR debug/15860
!         * dwarf2out.c (rtl_for_decl_location): Apply big-endian correction
!         for DECL_INCOMING_RTL.
! 
! 2004-10-13  Richard Henderson  <rth@redhat.com>
! 
! 	PR c/17384
! 	* c-common.c (handle_mode_attribute): Disallow mode changes that
! 	alter the CODE of the top-level type.
! 
! 	* crtstuff.c (__FRAME_END__): Remove mode attribute.  Find 32-bit
! 	integer from internal limits macros.
! 	* config/i386/emmintrin.h (__v2df): Fix base type.
! 	* config/i386/xmmintrin.h (__m128, __v4sf): Likewise.
! 
! 2004-10-13  Richard Henderson  <rth@redhat.com>
! 
! 	PR debug/13841
! 	* function.c (instantiate_decl): Recurse for CONCAT.
! 
! 2004-10-13  Eric Botcazou  <ebotcazou@libertysurf.fr>
! 
! 	PR target/14454
! 	* config/sparc/sparc.c (TARGET_ASM_CAN_OUTPUT_MI_THUNK): Set to
! 	sparc_can_output_mi_thunk.
! 	(sparc_output_mi_thunk): Simplify handling of delta offset.  Add
! 	handling of vcall offset.
! 	(sparc_can_output_mi_thunk): New predicate.
! 	* doc/tm.texi (TARGET_ASM_OUTPUT_MI_THUNK): Document VCALL_OFFSET.
! 	(TARGET_ASM_OUTPUT_MI_VCALL_THUNK): Delete.
! 	(TARGET_ASM_CAN_OUTPUT_MI_THUNK): New target hook.
! 
! 	* config/sparc/sparc.md (movdi): Remove redundant test.
! 
! 2004-10-12  Richard Henderson  <rth@redhat.com>
! 
! 	PR rtl-opt/17503
! 	* regclass.c (subregs_of_mode): Turn into an htab.  Make static.
! 	(som_hash, som_eq): New.
! 	(init_subregs_of_mode, record_subregs_of_mode): New.
! 	(cannot_change_mode_set_regs): Rewrite for htab implementation.
! 	(invalid_mode_change_p): Likewise.
! 	* combine.c (gen_lowpart_for_combine): Use record_subregs_of_mode.
! 	* flow.c (mark_used_regs): Likewise.
! 	(life_analysis): Use init_subregs_of_mode.
! 	* regs.h (subregs_of_mode): Remove.
! 	* rtl.h (init_subregs_of_mode, record_subregs_of_mode): Declare.
! 
! 2004-10-10  Roger Sayle  <roger@eyesopen.com>
! 
! 	PR rtl-optimization/17853
! 	* combine.c (combine_simplify_rtx): Don't attempt any simplifications
! 	of vector mode comparison operators.
! 	* cse.c (fold_rtx): Likewise.
! 	* simplify-rtx.c (simplify_gen_relational):  Avoid calling
! 	simplify_relational_operation with vector mode comparison operators.
! 	(simplify_rtx): Likewise.
! 
! 2004-10-09  Joseph S. Myers  <joseph@codesourcery.com>
! 
! 	* config/rs6000/spe.h (atosfix16, atosfix32, atosfix64, atoufix16,
! 	atoufix32, atoufix64, strtosfix16, strtosfix32, strtosfix64,
! 	strtoufix16, strtoufix32, strtoufix64): Declare.
! 
! 2004-10-08  Andrew Pinski  <pinskia@physics.uc.edu>
! 
! 	PR c/16999
! 	* c-ppoutput.c (cb_ident): Don't quote string as it is already
! 	quoted.
! 
! 2004-10-08  Eric Botcazou  <ebotcazou@libertysurf.fr>
! 
! 	PR target/17245
! 	* config/sparc/sparc.c (input_operand): Remove redundant code
! 	for handling LO_SUM.
! 	(legitimate_address_p) <REG+REG>: Do not recheck TARGET_V9.
! 	<LO_SUM>: If LO_SUM is offsettable, accept it for TFmode on V9.
! 	Otherwise only accept it for TFmode if quad move insns are available.
! 
! 2004-10-07  Giovanni Bajo  <giovannibajo@gcc.gnu.org>
! 
! 	PR c++/17115
! 	* tree-inline.c (expand_call_inline): Do not warn for functions
! 	marked with attribute noinline.
! 
! 2004-10-07  Eric Botcazou  <ebotcazou@libertysurf.fr>
! 
! 	* doc/install.texi (*-*-solaris2*): Fix marker for URL.
! 
! 2004-10-07  Richard Sandiford  <rsandifo@redhat.com>
! 
! 	PR target/17770
! 	* config/mips/mips.md (mov_lwl): Remove hazard=none attribute.
! 
! 2004-10-07  Eric Botcazou  <ebotcazou@libertysurf.fr>
! 
! 	PR rtl-optimization/17027
! 	Backport from mainline:
! 	* cfglayout.c (fixup_fallthru_exit_predecessor): If the first block
! 	falls through to exit, split it.
! 	* cfgrtl.c (rtl_split_block): If no insn is specified, split on the
! 	first insn in the basic block.
! 
! 2004-10-06  H.J. Lu  <hongjiu.lu@intel.com>
! 
! 	* doc/invoke.text (freorder-functions): Add a leading `.' to
! 	"text.hot" and "text.unlikely" sections.
! 
! 2004-10-06  Eric Botcazou  <ebotcazou@libertysurf.fr>
! 
! 	PR target/16007
! 	* doc/install.texi (*-*-solaris2*): Mention potential problem
! 	with Sun assembler + GNU linker and C++ programs.
! 	Document status of binutils 2.15 release.
  
! 2004-10-06  Alan Modra  <amodra@bigpond.net.au>
  
! 	PR 16406
! 	* doc/tm.texi (LIBGCC_SPEC): Mention modifications.
! 	(USE_LD_AS_NEEDED, LINK_EH_SPEC): Document.
  
! 2004-10-03  Alan Modra  <amodra@bigpond.net.au>
  
! 	* config/rs6000/linux.h (TARGET_C99_FUNCTIONS): Define.
! 	(OS_MISSING_POWERPC64): Move, and comment.
! 	* config/rs6000/linux64.h (TARGET_C99_FUNCTIONS): Define.
! 	(OS_MISSING_POWERPC64): Move, and comment.
  
! 2004-10-01  Nick Clifton  <nickc@redhat.com>
  
! 	* config/stormy16/stormy16.c (TARGET_BUILD_BUILTIN_VA_LIST_TYPE):
! 	Fix typo in macro name, it should be: TARGET_BUILD_BUILTIN_VA_LIST.
  
! 2004-09-30  Richard Henderson  <rth@redhat.com>
  
! 	* config/alpha/qrnnd.asm: Mark for noexecstack.
  
! 2004-09-30  Richard Henderson  <rth@redhat.com>
  
! 	* unwind-dw2.c (_Unwind_GetGR): Honor DWARF_ZERO_REG.
! 	* doc/tm.texi (DWARF_ZERO_REG): New.
  
! 	* config/alpha/alpha.c (alpha_sa_mask, alpha_expand_prologue,
! 	alpha_expand_epilogue): Revert 2003-09-30 change to store zero.
! 	* config/alpha/alpha.h (DWARF_ZERO_REG): New.
  
! 2004-09-29  David Edelsohn  <edelsohn@gnu.org>
  
! 	PR target/17493
! 	Backport from mainline
! 	2004-07-16  Segher Boessenkool  <segher@kernel.crashing.org>
! 	* config/rs6000/eabi.asm (__eabi_convert): Fix typo (cmpi vs. cmpwi).
  
! 2004-09-28  Giovanni Bajo  <giovannibajo@gcc.gnu.org>
  
! 	PR target/14064
! 	Backport from mainline
! 	2004-09-01  James E Wilson  <wilson@specifixinc.com>
! 	* config/avr/avr.c (avr_unique_section): Delete prototype and
! 	definition.
! 	(TARGET_ASM_UNIQUE_SECTION): Delete.
  
! 2004-09-26  Roger Sayle  <roger@eyesopen.com>
  
! 	PR other/15526
! 	Backport from mainline
! 	2004-05-20  Falk Hueffner  <falk@debian.org>
! 	* libgcc2.c (__mulvsi3): Fix overflow test.
  
! 2004-09-24  Roger Sayle  <roger@eyesopen.com>
  
! 	PR rtl-optimization/9771
! 	* regclass.c (CALL_REALLY_USED_REGNO_P): New macro to eliminate
! 	conditional compilation in init_reg_sets_1.
! 	(init_reg_sets_1): Let global_regs[i] take priority over the frame
! 	(but not stack) pointer exceptions to regs_invalidated_by_call.
! 	(globalize_reg): Globalizing a fixed register may need to update
! 	regs_invalidated_by_call.
  
! 2004-09-23  Denis Chertykov  <denisc@overta.ru>
  
! 	PR target/16884
! 	* config/avr/avr.md ("movmemhi"): Substitute match_dup to
! 	match_scratch.
! 	(*movmemqi_insn): Likewise.
! 	(*movmemhi): Likewise.
! 	(clrmemhi): Likewise.
! 	(*clrmemqi): Likewise.
! 	(*clrmemhi): Likewise.
  
! 2004-09-23  H.J. Lu  <hongjiu.lu@intel.com>
  
! 	PR bootstrap/17369
! 	* Makefile.in (@set_gcc_lib_path@): Added.
  
! 	* configure.ac: Include ../config/gcc-lib-path.m4. Use
! 	TL_AC_GNU_MAKE_GCC_LIB_PATH.
! 	* configure: Regenerated.
  
! 2004-09-23  Joseph S. Myers  <jsm@polyomino.org.uk>
  
! 	PR c/16566
! 	* c-typeck.c (build_component_ref): Don't special-case
! 	COMPOUND_EXPR.
  
! 2004-09-22  Ralf Corsepius  <corsepiu@faw.uni-ulm.de>
  
! 	PR target/15583
! 	* config/rs6000/rtems.h (TARGET_OS_CPP_BUILTINS): Add
! 	builtin_define ("__USE_INIT_FINI__").
  
! 2004-09-20  Richard Sandiford  <rsandifo@redhat.com>
  
! 	PR target/17565
! 	* config/mips/mips.md (define_asm_attributes): Set can_delay to no.
  
! 2004-09-15  James E Wilson  <wilson@specifixinc.com>
  
! 	PR target/17455
! 	* config/ia64/ia64.c (ia64_function_ok_for_sibcall): Return false
! 	if current_function_decl is a sibcall.
  
! 2004-09-15  Alan Modra  <amodra@bigpond.net.au>
  
! 	* config/rs6000/linux64.h (MD_FALLBACK_FRAME_STATE_FOR): Save
! 	location of CR.
! 	* config/rs6000/linux.h (MD_FALLBACK_FRAME_STATE_FOR): Ditto.
  
! 2004-09-15  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	* doc/install.texi (sparc-sun-solaris2*): Properly format warning.
  
! 2004-09-14  Richard Henderson  <rth@redhat.com>
  
! 	PR rtl-opt/17186
! 	* function.c (expand_function_end): Revert last change.
  
! 	* sibcall.c (call_ends_block_p): Fix thinko finding the
! 	last real insn in a block.
  
! 2004-09-14  Joseph S. Myers  <jsm@polyomino.org.uk>
  
! 	PR c/15498
! 	* doc/invoke.texi (Environment Variables): Correct example locale.
  
! 2004-09-14  Daniel Jacobowitz  <dan@debian.org>
  
! 	* reload.c (find_reloads): Swap operand_loc pointers for
! 	find_dummy_reload if we have swapped two operands.
  
! 2004-09-13  Richard Henderson  <rth@redhat.com>
  
! 	PR inline-asm/6806
! 	* cselib.c (cselib_invalidate_rtx): Export.  Remove unused args.
! 	(cselib_invalidate_rtx_note_stores): New.
! 	(cselib_record_sets, cselib_process_insn): Update to match.
! 	* cselib.h (cselib_invalidate_rtx): Declare.
! 	* postreload.c (reload_cse_simplify): Invalidate asm clobbers.
  
! 2004-09-11  Ramana Radhakrishnan <ramana.radhakrishnan@codito.com>
  
! 	PR target/11476
! 	* gcc/config/arc/arc.c (arc_va_args): Call build1 instead
! 	of build for unary tree operators.
  
! 2004-09-11  Andrew Pinski  <apinski@apple.com>
  
! 	PR target/17167
! 	backport from the mainline:
! 	2004-02-28  Andrew Pinski  <pinskia@physics.uc.edu>
! 	* config/darwin.h (machopic_finish): Output stub even if
! 	the symbol is already defined.
! 	2004-02-27  Dale Johannesen  <dalej@apple.com>
! 	* config/darwin.c (machopic_output_possible_stub_label):
! 	Remove.
! 	config/darwin-protos.h:  Ditto.
! 	config/darwin.h:  Remove call to it.
  
! 2004-09-11  David Edelsohn  <edelsohn@gnu.org>
  
! 	PR target/17277
! 	* config/rs6000/aix.h (MD_FROB_UPDATE_CONTEXT): Use __64BIT__ to
! 	choose 64-bit version.
  
! 2004-09-09  Kaz Kojima  <kkojima@gcc.gnu.org>
  
- 	PR 15886
  	Backport from mainline:
! 	2004-06-11  J"orn Rennecke <joern.rennecke@superh.com>
! 
! 	* sh.h (ALLOCATE_INITIAL_VALUE): Use return_address_pointer_rtx.
! 
! 2004-09-09  Alan Modra  <amodra@bigpond.net.au>
! 
! 	* config/rs6000/rs6000.c (rs6000_stack_info): Correct alignment of
! 	save_size.
! 
! 2004-09-08  H.J. Lu  <hongjiu.lu@intel.com>
! 
! 	* configure: Regenerated.
! 
! 2004-09-08  Richard Henderson  <rth@redhat.com>
! 
! 	PR rtl-opt/17186
! 	* function.c (expand_function_end): Have fall-off-the-end
! 	return path jump around return register setup.
! 
! 2004-09-08  H.J. Lu  <hongjiu.lu@intel.com>
! 
! 	PR target/14925:
! 	Makefile.in (LIB2ADDEHSTATIC): New.
! 	(LIB2ADDEHSHARED): New.
! 	(LIBUNWIND): New.
! 	(LIBUNWINDDEP): New.
! 	(SHLIBUNWIND_LINK): New.
! 	(SHLIBUNWIND_INSTALL): New.
! 	(libgcc.mk): Pass LIB2ADDEHSTATIC, LIB2ADDEHSHARED, LIBUNWIND,
! 	LIBUNWINDDEP, SHLIBUNWIND_LINK and SHLIBUNWIND_INSTALL.
! 	(clean): Remove libunwind*
! 	(stage1-start): Remove and copy stage1/libunwind*.
! 	(stage2-start): Remove and copy stage2/libunwind*.
! 	(stage3-start): Remove and copy stage3/libunwind*.
! 	(stage4-start): Remove and copy stage4/libunwind*.
! 	(stageprofile-start): Remove and copy stageprofile/libunwind*.
! 	(stagefeedback-start): Remove and copy stagefeedback/libunwind*.
! 
! 	* config.gcc (ia64*-*-linux*): Always add t-libunwind to
! 	tmake_file. Add t-libunwind-elf and ia64/t-glibc-libunwind to
! 	tmake_file if --with-system-libunwind isn't used.
! 
! 	* config/ia64/t-glibc-libunwind: New file.
! 	* config/t-libunwind-elf: Likewise.
! 	* unwind-compat.c: Likewise.
! 	* unwind-compat.h: Likewise.
! 	* unwind-dw2-fde-compat.c: Likewise.
! 
! 	* config/ia64/t-glibc (LIB2ADDEH): Updated.
! 	* config/ia64/t-hpux (T_CFLAGS): Add -DUSE_LIBUNWIND_EXCEPTIONS.
! 
! 	* config/ia64/unwind-ia64.c: Include "unwind-compat.h". Define
! 	aliases if needed.
! 	* unwind-dw2-fde-glibc.c: Likewise.
! 	* unwind-dw2.c: Likewise.
! 
! 	* config/t-libunwind (LIB2ADDEH): Updated.
! 	(LIB2ADDEHSTATIC): New.
! 	(T_CFLAGS): Add -DUSE_LIBUNWIND_EXCEPTIONS.
! 	(TARGET_LIBGCC2_CFLAGS): Set to -DUSE_GAS_SYMVER.
! 
! 	* configure.ac: Change --enable-libunwind-exceptions to
! 	--with-system-libunwind. Don't define USE_LIBUNWIND_EXCEPTIONS.
! 	* configure: Regenerated.
! 	* config.in: Updated.
! 
! 	* doc/install.texi (ia64-*-linux): Require libunwind 0.98 or
! 	above and mention --with-system-libunwind.
! 	(ia64-*-hpux*): Mention --enable-libunwind-exceptions is
! 	removed in gcc 3.4.3 and later.
! 
! 	* gcc.c (init_spec): Add -lunwind to -lgcc_s if
! 	USE_LIBUNWIND_EXCEPTIONS is defined.
! 
! 	* mklibgcc.in: Support libunwind.
! 
! 2004-09-07  Mark Mitchell  <mark@codesourcery.com>
! 
! 	* version.c (version_string): Restore pre-release marker.
! 	* doc/include/gcc-common.texi: Set version to 3.4.3.
! 
! 2004-09-06  Release Manager
! 
! 	* GCC 3.4.2 released.
! 
! 2004-09-05  Mark Mitchell <mark@codesourcery.com>
! 
! 	PR bootstrap/17325
! 	Backport from mainline
! 	2004-06-23  Wu Yongwei  <adah@sh163.net>
! 	* gthr-win32.h (__GTHREAD_MUTEX_INIT_DEFAULT): Adjust.
! 	(__gthr_i486_lock_cmp_xchg): New inline assembly function.
! 	(__GTHR_W32_InterlockedCompareExchange): New macro to choose a
! 	suitable function for interlocked compare-and-exchange.
! 	(__gthread_mutex_trylock): Use
! 	__GTHR_W32_InterlockedCompareExchange.
! 	(__gthread_mutex_init_function, __gthread_mutex_lock,
! 	__gthread_mutex_trylock, __gthread_mutex_unlock): Adjust the
! 	initial counter value to work correctly under Windows 95.
! 	* config/i386/gthr-win32.c: Adjust include order.
! 	Define __GTHREAD_I486_INLINE_LOCK_PRIMITIVES before including
! 	gthr-win32.h.
! 	(__gthr_win32_mutex_init_function, __gthr_win32_mutex_lock,
! 	__gthr_win32_mutex_trylock, __gthr_win32_mutex_unlock): Adjust
! 	to match inline versions in gthr-win32.h.
! 
! 	2004-04-27  Wu Yongwei  <adah@sh163.net>
! 	* gthr-win32.h (__gthread_mutex_t): Change typedef to new structure.
! 	(__GTHREAD_MUTEX_INIT_DEFAULT): Adjust.
! 	(__gthread_mutex_init_function): Replace CreateMutex with
! 	initialization of custom mutex using CreateSemaphore.
! 	(__gthread_mutex_lock): Use InterlockedIncrement.
! 	(__gthread_mutex_trylock): Use InterlockedCompareExchange.
! 	(__gthread_mutex_unlock): Use InterlockedDecrement and
! 	ReleaseSemaphore to unlock
! 	* config/i386/gthr-win32.c (__gthread_mutex_init_function,
! 	__gthread_mutex_lock, __gthread_mutex_trylock,
! 	__gthread_mutex_unlock): Adjust to match inline versions in
! 	gthr-win32.h.
  
! 2004-09-03  Kaz Kojima  <kkojima@gcc.gnu.org>
  
- 	PR target/17303
  	Backport from mainline:
- 	2004-08-31  Kaz Kojima  <kkojima@gcc.gnu.org>
- 
- 	* config/sh/sh.c (output_branch): Check the insn length possibly
- 	in the delayed slot.
  
! 2004-09-01  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
! 
! 	PR rtl-optimization/16408
! 	* gcse.c (replace_store_insn): Fix LIBCALL/RETVAL notes.
! 
! 2004-09-01  Richard Henderson  <rth@redhat.com>
! 
! 	* config/ns32k/ns32k.h (TRANSFER_FROM_TRAMPOLINE): Remove.
! 	(TRAMPOLINE_TEMPLATE): Merge code from __trampoline inline.
! 
! 2004-09-01  Jakub Jelinek  <jakub@redhat.com>
! 
! 	* libgcc-std.ver (GCC_3.4.2): Export also __trampoline_setup.
! 
! 2004-09-01  Jakub Jelinek  <jakub@redhat.com>
! 
! 	* fold-const.c (operand_equal_p): Require equal sign also for
! 	FIX_{CEIL,TRUNC,FLOOR,ROUND}_EXPR.
! 
! 2004-08-31  Jeff Law  <law@redhat.com>
! 
! 	* gcse.c (remove_reachable_equiv_notes): Scan loops where
! 	the store expression is killed for REG_EQUAL/REG_EQUIV notes
! 	that need to be removed.
! 
! 2004-08-30  Mark Mitchell  <mark@codesourcery.com>
! 
! 	Revert:
! 	2004-08-29  Mark Mitchell  <mark@codesourcery.com>
! 	PR rtl-optimization/16590
! 	* gcse.c (pre_delete): Do not create invalid REG_EQUAL notes.
! 
! 2004-08-29  Mark Mitchell  <mark@codesourcery.com>
! 
! 	PR rtl-optimization/16590
! 	* gcse.c (pre_delete): Do not create invalid REG_EQUAL notes.
! 
! 2004-08-26  Richard Henderson  <rth@redhat.com>
! 
! 	* config/alpha/alpha.h (HARD_REGNO_MODE_OK): Allow complex float
! 	modes.
! 
! 2004-08-26  Kazuhiro Inaoka  <inaoka.kazuhiro@renesas.com>
! 
! 	PR target/17119.
! 	* config/m32r.c (gen_compare): Use reg_or_int16_operand when
! 	checking for a valid constant, regardless of sign.
! 
! 2004-08-25  Richard Henderson  <rth@redhat.com>
! 
! 	PR target/16974
! 	* config/alpha/alpha.md (adddi_fp_hack): Don't rely on splitting
! 	if the constant satisfies add_operand.
! 
! 2004-08-25  Richard Henderson  <rth@redhat.com>
! 
! 	PR debug/10695
! 	* config/alpha/alpha.c (emit_frame_store_1, emit_frame_store): New.
! 	(alpha_expand_prologue): Handle >32-bit frames.  Generate proper
! 	unwind info for >16-bit frames.
! 
! 2004-08-25  Richard Henderson  <rth@redhat.com>
! 
! 	* config/alpha/alpha.c (alpha_cannot_force_const_mem): New.
! 	(TARGET_CANNOT_FORCE_CONST_MEM): New.
  
! 2004-08-25  Richard Earnshaw  <rearnsha@arm.com>
  
! 	PR target/15927
! 	* arm.h (THUMB_SECONDARY_OUTPUT_RELOAD_CLASS): Don't need a secondary
! 	reload if CLASS is BASE_REGS.
  
! 2004-08-25  Richard Earnshaw  <rearnsha@arm.com>
  
! 	* PR target/15948
! 	* arm.md (bicsi3_cbranch): Add alternative to handle tying operands
! 	one and two.
  
! 2004-08-24  Richard Henderson  <rth@redhat.com>
  
! 	PR target/16298
! 	* config/i386/i386.c (legitimate_constant_p): Rework to not accept
! 	random codes within CONST.
  
! 2004-08-24  Paolo Bonzini  <bonzini@gnu.org>
  
! 	PR target/17113
! 	* config/i386/i386.md (movv16qi_internal): Fix typo.
  
! 2004-08-24  Kazuhiro Inaoka  <inaoka.kazuhiro@renesas.com>
  
! 	PR target/17093
! 	* config/m32r/m32r.md (movsi_sda): Add SI mode specification to
! 	UNSPEC.
  
! 2004-08-24  Jonathan Wakely  <redi@gcc.gnu.org>
  
! 	* doc/trouble.texi (C++ misunderstandings): Fix example code.
  
! 2004-08-23  Roger Sayle  <roger@eyesopen.com>
  
! 	PR rtl-optimization/17078
! 	* c-semantics.c (expand_unreachable_if_stmt): If the end of the
! 	specified statement list is reachable, always return a non-NULL
! 	pointer.  If necessary, return error_mark_node.
  
! 2004-08-23  Mark Mitchell  <mark@codesourcery.com>
  
! 	PR c/14492
! 	* dwarf2out.c (loc_descriptor_from_tree): Robustify.
  
! 	PR c/16180
! 	* jump.c (duplicate_loop_exit_test): If the location reached by
! 	the unconditional jump at the top of the loop is outside the loop,
! 	then do not treat it as the exit test.
  
! 2004-08-23  Janis Johnson  <janis187@us.ibm.com>
  
! 	Backports from mainline:
  
! 	2004-02-11  Ziemowit Laski  <zlaski@apple.com>
! 	2004-02-21  Ziemowit Laski  <zlaski@apple.com>
! 	2004-02-27  Ziemowit Laski  <zlaski@apple.com>
! 	2004-03-04  Ziemowit Laski  <zlaski@apple.com>
! 	2004-03-20  Ziemowit Laski  <zlaski@apple.com>
! 	2004-03-24  Ziemowit Laski  <zlaski@apple.com>
! 	2004-05-11  Fariborz Jahanian <fjahanian@apple.com>
!  	2004-07-23  Janis Johnson  <janis187@us.ibm.com>
!  	2004-08-12  Janis Johnson  <janis187@us.ibm.com>
! 	2004-08-12  Ben Elliston <bje@au.ibm.com>
!  	2004-08-16  Janis Johnson  <janis187@us.ibm.com>
  
! 	* c-common.c (vector_size_helper): Remove; call
! 	reconstruct_complex_type() instead.
! 	* hooks.c (hook_constcharptr_tree_null): New hook.
! 	* hooks.h (hook_constcharptr_tree_null): New prototype.
! 	* target-def.h (TARGET_MANGLE_FUNDAMENTAL_TYPE): New target hook.
! 	* target.h (mangle_fundamental_type): New target hook.
! 	* tree.c (reconstruct_complex_type): New function
! 	(formerly vector_size_helper() in c-common.c).
! 	(make_vector): Make externally visible.
! 	* tree.h (reconstruct_complex_type, make_vector): Add prototypes.
! 	* doc/extend.texi (AltiVec builtins): Document additional differences
! 	from the Motorola AltiVec PIM.
! 	* doc/tm.texi (TARGET_MANGLE_FUNDAMENTAL_TYPE): Document.
! 	* config/darwin.h (TARGET_OPTION_TRANSLATE_TABLE): Refer to
! 	SUBTARGET_OPTION_TRANSLATE_TABLE for architecture-specific options.
! 	* config/i386/darwin.h (SUBTARGET_OPTION_TRANSLATE_TABLE): Define it.
! 	* config/rs6000/altivec.h: #error out if '-maltivec' not specified.
! 	(vector, pixel, bool): #define to __vector, __pixel and __bool.
! 	Change vector to __vector (except for the `vector' macro itself).
! 	(__un_args_eq, __bin_args_eq, __tern_args_eq): Move to C-specific
! 	portion of header.
! 	(__altivec_link_error_invalid_argument): Remove prototype; will use
! 	__builtin_altivec_compiletime_error("vec_*") instead.
! 	(vec_*): Fix/complete set of available operation overloads given the
! 	existence of distinct 'vector bool ...' and 'vector pixel' types;
! 	tighten cv-correctness of pointer arguments; in C, always check for
! 	correct argument types before macro expansion.
! 	(vec_splat_s8, vec_splat_s16, vec_splat_s32, vec_splat_u8,
! 	vec_splat_u16, vec_splat_u32): Change C++ definitions to accept a
! 	'const int' argument; the prototypes already do.
! 	(vec_dst, vec_dstst, vec_dststt, vec_dstt, vec_sld, vec_splat): Add
! 	prototypes, marked with always_inline attribute.
! 	* config/rs6000/darwin.h (SUBTARGET_OPTION_TRANSLATE_TABLE): New macro
! 	defining Darwin/PowerPC-specific '-f[no-]altivec' and
! 	'-W[no-]altivec-long-deprecated' switches.
! 	* config/rs6000/rs6000-c.c (rs6000_cpu_cpp_builtins): Pre-define
! 	'__vector', '__pixel' and '__bool' macros using
! 	'__attribute__((altivec(...)))' types.
! 	* config/rs6000/rs6000.c (bool_char_type_node, bool_short_type_node,
! 	bool_int_type_node, pixel_type_node, bool_V16QI_type_node,
! 	bool_V8HI_type_node, bool_V4SI_type_node, pixel_V8HI_type_node):
! 	New type nodes.
! 	(rs6000_warn_altivec_long, rs6000_warn_altivec_long_switch): New, for
! 	handling '-W[no-]altivec-long-deprecated'.
! 	(rs6000_override_options): Handle '-W[no-]altivec-long-deprecated'.
! 	(rs6000_expand_binop_builtin, rs6000_expand_ternop_builtin,
! 	altivec_expand_dst_builtin): Remove casts from integer literals.
! 	(altivec_expand_builtin): Likewise; handle expansion of new
! 	'__builtin_altivec_compiletime_error' function.
! 	(rs6000_init_builtins): Initialize 'vector bool ...' and 'vector pixel'
! 	types, and make them distinct from other vector types; register
! 	'__builtin_altivec_compiletime_error' function.
! 	(print_operand): For 'P', print a full target register name instead of
! 	merely its number.
! 	(rs6000_attribute_table): Add "altivec" attribute.
! 	(rs6000_handle_altivec_attribute): New function.
! 	(rs6000_common_init_builtins): Rename v4si_ftype_char, v8hi_ftype_char,
! 	v16qi_ftype_char, v4sf_ftype_v4si_char, v4si_ftype_v4sf_char,
! 	v4si_ftype_v4si_char, v8hi_ftype_v8hi_char, v16qi_ftype_v16qi_char,
! 	v16qi_ftype_v16qi_v16qi_char, v8hi_ftype_v8hi_v8hi_char,
! 	v4si_ftype_v4si_v4si_char and v4sf_ftype_v4sf_v4sf_char to
! 	end in ..._int; change them to accept an int instead of a char
! 	as the last parameter.
! 	(altivec_expand_dst_builtin): Treat expansion as completed even if
! 	literal argument is invalid (so that other expansions are not tried
! 	in vain).
! 	(TARGET_MANGLE_FUNDAMENTAL_TYPE): Point target hook at
! 	rs6000_mangle_fundamental_type.
! 	(rs6000_mangle_fundamental_type): New function.
! 	* config/rs6000/rs6000.h (TARGET_OPTIONS): Describe
! 	'-m[no-]-warn-altivec-long' (which '-W[no-]altivec-long-deprecated'
! 	maps to).
! 	(rs6000_warn_altivec_long, rs6000_warn_altivec_long_switch): Forward
! 	declare.
! 	(ALTIVEC_BUILTIN_COMPILETIME_ERROR): New built-in enumeration.
  
! 2004-08-20  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/16195
! 	* config/rs6000/rs6000.h (CONDITIONAL_REGISTER_USAGE): Make r30
! 	fixed if TARGET_TOC && TARGET_MINIMAL_TOC.
! 	* config/rs6000/rs6000.c (first_reg_to_save): Pretend
! 	call_used_regs[30] is 0 if TARGET_TOC && TARGET_MINIMAL_TOC.
! 	(rs6000_emit_prologue, rs6000_emit_epilogue): Likewise.
  
! 2004-08-17  Joseph S. Myers  <jsm@polyomino.org.uk>
  
! 	* c-decl.c (grokdeclarator): Allow for function definition where
! 	innermost declarator has attributes.
  
! 2004-08-17  Daniel Bornstein  <danfuzz@milk.com>
  
! 	PR target/17019
! 	* arm.md (addsi3_cbranch_scratch): Correct case labels.
  
! 2004-08-14  Roger Sayle  <roger@eyesopen.com>
! 	    David Billinghurst  <David.Billinghurst@riotinto.com>
  
! 	PR libgfortran/15930
! 	* fixinc/inclhack.def (irix___generic1, irix___generic2): New.
! 	* fixinc/fixincl.x: Regenerate.
! 	* fixinc/tests/base/internal/math_core.h: New file
  
! 2004-08-14  Roger Sayle  <roger@eyesopen.com>
! 	    Bruce Korb  <bkorb@gnu.org>
  
! 	* fixinc/inclhack.def (aix_syswait_2): New fix.
! 	* fixinc/fixincl.x: Regenerate.
! 	* fixinc/tests/base/sys/wait.h: Update for new test.
  
! 2004-08-14  Gerald Pfeifer  <gerald@pfeifer.com>
! 	    Dimitri Papadopoulos-Orfanos  <papadopo@shfj.cea.fr>
! 	    Dave Korn  <dk@artimi.com>
  
! 	* doc/install.texi (Building): Avoid duplicate reference to GNU
! 	make requirement.
! 	(*-*-solaris2*): Do not recommend GNU make any longer.  Simplify.
  
! 2004-08-13  J"orn Rennecke <joern.rennecke@superh.com>
  
! 	* sh.md (cbranch define_delay) Use cond_delay_slot for
! 	non-anulled condition too.
  
! 2004-08-11  Mark Mitchell  <mark@codesourcery.com>
  
! 	PR c++/16618
! 	* ginclude/stddef.h (offsetof): Refine C++ definition.
  
! 2004-08-12  Alan Modra  <amodra@bigpond.net.au>
  
! 	Merge from mainline.
! 	2004-07-01  Alan Modra  <amodra@bigpond.net.au>
! 	* config/rs6000/rs6000.c (rs6000_mixed_function_arg): Rewrite.
! 	(function_arg): Use rs6000_arg_size rather than CLASS_MAX_NREGS in
! 	calculating gpr size for altivec.  Simplify and correct
! 	rs6000_mixed_function_arg calls.  Call rs6000_mixed_function_arg
! 	for ABI_V4 gpr case too.  Fix off-by-one error in long double
! 	reg test.  Generate the correct PARALLEL to handle long double
! 	for ABI_AIX 32-bit.  Use this for -m32 -mpowerpc64 fpr case too.
! 	(function_arg_partial_nregs): Align before calculating regs left.
! 	Don't return info on partial fprs when we need info on gprs.
! 	Correct long double fpr off-by-one error.
  
! 2004-08-11  James E Wilson  <wilson@specifixinc.com>
  
! 	PR rtl-optimization/16490
! 	* cfgrtl.c (cfg_layout_split_edge): Set global_live_at_start and
! 	global_live_at_end for new basic block if already set for other blocks.
  
! 2004-08-07  Roger Sayle  <roger@eyesopen.com>
  
! 	PR middle-end/16790
! 	* fold-const.c (expand_muldiv_1) <NOP_EXPR>: Disallow local
! 	truncations, not just global truncations.
  
! 2004-08-07  Alan Modra  <amodra@bigpond.net.au>
  
! 	* config/rs6000/rs6000.c (function_arg_padding): Revert 2004-07-28.
  
! 2004-08-04  Zack Weinberg  <zack@codesourcery.com>
  
! 	PR 13956
! 	* dbxout.c (dbx_output_lbrac, dbx_output_rbrac): New
! 	functions, broken out of dbxout_block.
! 	(dbxout_block): The block at depth 0 should get LBRAC/RBRAC
! 	stabs too, if it contains symbols.  Use the begin_label and
! 	the Lscope label (emitted by dbxout_function_end) for the
! 	range of this block.
! 	(dbxout_function_decl): Always call dbxout_function_end.
! 	(dbxout_function_end): Return after emitting the "Lscope" symbol
! 	under the same conditions that this function formerly wasn't called.
! 	Add explanatory comments.
  
! 2004-08-03  Yossi Markovich <yossim@il.ibm.com>
! 	    Mostafa Hagog <mustafa@il.ibm.com>
  
! 	* config/rs6000/altivec.md (altivec_vnmsubfp): Fix wrong pattern.
  
! 2004-07-31  Andrew Pinski  <apinski@apple.com>
  
! 	PR other/16842
! 	* mkheaders.in (libsubdir): s/gcc-lib/gcc/.
  
! 2004-07-28  Aldy Hernandez  <aldyh@redhat.com>
  
! 	* config/rs6000/rs6000.md ("move_from_CR_gt_bit"): Rename to
! 	move_from_CR_eq_bit.
! 	Rename UNSPEC_MV_CR_GT to UNSPEC_MV_CR_EQ.
  
  
! 	* config/rs6000/spe.md ("e500_flip_gt_bit"): Rename to
! 	e500_flip_eq_bit.
  
! 	* config/rs6000/rs6000-protos.h: Rename output_e500_flip_gt_bit to
! 	output_e500_flip_eq_bit.
  
! 	* config/rs6000/rs6000.c (output_e500_flip_gt_bit): Rename to
! 	output_e500_flip_eq_bit.
! 	(rs6000_emit_sCOND): Rename call to output_e500_flip_gt_bit to
! 	output_e500_flip_eq_bit.
! 	Rename gen_move_from_CR_gt_bit to gen_move_from_CR_eq_bit.
! 	(print_operand): case D.  Get to EQ bit.
  
! 2004-07-28  Alan Modra  <amodra@bigpond.net.au>
  
! 	* config/rs6000/rs6000.c (function_arg_padding): Pad SFmode upwards.
  
! 2004-07-24  Alexander Kabaev  <kan@freebsd.org>
  
! 	* config/ia64/ia64.h (SUBTARGET_EXTRA_SPECS): Default to nothing.
! 	(EXTRA_SPECS): Use SUBTARGET_EXTRA_SPECS.
  
! 2004-07-26  David Edelsohn  <edelsohn@gnu.org>
  
! 	PR target/16239
! 	* config/rs6000/rs6000.md (movdi_internal64): Further disparage
! 	f->f.
  
! 2004-07-26  Richard Sandiford  <rsandifo@redhat.com>
  
! 	PR rtl-optimization/16643
! 	* cfglayout.h (cfg_layout_initialize): Add a flags parameter.
! 	* cfglayout.c (cfg_layout_initialize): Pass it to cleanup_cfg.
! 	* basic-block.h (reorder_basic_blocks): Add a flags parameter.
! 	* cfglayout.c (reorder_basic_blocks): Pass it to cfg_layout_initialize.
! 	* loop-init.c (loop_optimizer_init): Pass 0 to cfg_layout_initialize.
! 	* rtl.h (tracer): Add a flags parameter.
! 	* tracer.c (tracer): Pass it to cfg_layout_initialise.
! 	* toplev.c (rest_of_handle_stack_regs): Pass 0 to reorder_basic_blocks.
! 	(rest_of_handle_reorder_blocks): Update calls to tracer and
! 	reorder_basic_blocks, passing CLEANUP_UPDATE_LIFE if appropriate.
! 	(rest_of_handle_tracer): Pass 0 to tracer.
  
! 2004-07-24  Zack Weinberg  <zack@codesourcery.com>
  
! 	* config/ia64/hpux.h: Do not disable TLS.
  
! 2004-07-24  Alexander Kabaev  <kan@freebsd.org>
! 	    Zack Weinberg  <zack@codesourcery.com
  
! 	PR 16684
! 	* c-decl.c (diagnose_mismatched_decls): Don't issue a
! 	redundant-declaration warning the first time a builtin is
! 	declared explicitly.
  
! 2004-07-21  Jakub Jelinek  <jakub@redhat.com>
  	    Jan Hubicka  <jh@suse.cz>
  
! 	PR middle-end/15345
! 	PR c/16450
! 	* toplev.c (rest_of_handle_inlining): Set DECL_DEFER_OUTPUT on C
! 	nested functions as well.
! 	* tree-optimize.c (tree_rest_of_compilation): Don't clear decl rtls
! 	for deferred nested inlines.
! 
! 2004-07-17  Eric Botcazou  <ebotcazou@act-europe.fr>
! 
! 	* libgcc2.c (__enable_execute_stack): New symbol.
! 	* libgcc-std.ver (GCC_3.4.2): New version.  Inherit from GCC_3.4
! 	and declare __enable_execute_stack.
! 	* mklibgcc.in (lib2funcs): Add _enable_execute_stack.
! 	* config/netbsd.h (NETBSD_ENABLE_EXECUTE_STACK): ANSIfy.
! 	* config/sol2.h (TRANSFER_FROM_TRAMPOLINE): Rename into
! 	ENABLE_EXECUTE_STACK and ANSIfy.
! 	* config/alpha/alpha.c (alpha_initialize_trampoline): Conditionalize
! 	on ENABLE_EXECUTE_STACK instead of TRANSFER_FROM_TRAMPOLINE.
! 	* config/alpha/netbsd.h (TRANSFER_FROM_TRAMPOLINE): Rename into
! 	ENABLE_EXECUTE_STACK.
! 	* config/alpha/osf.h (TRANSFER_FROM_TRAMPOLINE): Likewise.
! 	* config/i386/i386.c (x86_initialize_trampoline): Conditionalize
! 	on ENABLE_EXECUTE_STACK instead of TRANSFER_FROM_TRAMPOLINE.
! 	* config/i386/netbsd-elf.h (TRANSFER_FROM_TRAMPOLINE): Rename into
! 	ENABLE_EXECUTE_STACK.
! 	* config/i386/netbsd.h (TRANSFER_FROM_TRAMPOLINE): Likewise.
! 	* config/i386/netbsd64.h (TRANSFER_FROM_TRAMPOLINE): Likewise.
! 	* config/sparc/freebsd.h (TRANSFER_FROM_TRAMPOLINE): Likewise.
! 	* config/sparc/netbsd-elf.h (TRANSFER_FROM_TRAMPOLINE): Likewise.
! 	* config/sparc/sparc.c (sparc_initialize_trampoline): Conditionalize
! 	on ENABLE_EXECUTE_STACK instead of TRANSFER_FROM_TRAMPOLINE.
! 	(sparc64_initialize_trampoline): Likewise.
! 	* doc/tm.texi (trampolines): Add ENABLE_EXECUTE_STACK macro.
! 
! 2004-07-16  Andris Pavenis  <pavenis@latnet.lv>
! 
! 	PR preprocessor/16366
! 	* internal.h (struct cpp_reader): New field dir_hash.
! 	* files.c (make_cpp_dir): Use dir_hash, not file_hash.
! 	(_cpp_init_files, _cpp_cleanup_files): Update for new field.
! 
! 2004-07-15  James E Wilson  <wilson@specifixinc.com>
! 
! 	Backport from mainline:
! 	2004-02-19  Steve Ellcey  <sje@cup.hp.com>
! 	* config/ia64/ia64.h (HARD_REGNO_CALLER_SAVE_MODE): New macro.
! 	* testsuite/gcc.dg/20040219-1.c: New test.
! 
! 2004-07-15  Aldy Hernandez  <aldyh@redhat.com>
! 
! 	* config/rs6000/rs6000.md ("*cceq_ior_compare"): Allow
! 	unconditionally.
! 	* config/rs6000/spe.md ("e500_cceq_ior_compare"): Remove.
! 
! 2004-07-14  James E Wilson  <wilson@specifixinc.com>
! 
! 	PR target/16325
! 	* config/mips/mips.h (STARTING_FRAME_OFFSET): When flag_profile_value
! 	and ! TARGET_64BIT, include REG_PARM_STACK_SPACE.
! 
! 2004-07-14  Eric Botcazou  <ebotcazou@libertysurf.fr>
! 
! 	Backport from mainline:
! 	2004-07-13  Eric Botcazou  <ebotcazou@libertysurf.fr>
! 
! 	PR target/13926
! 	* config/sparc/sparc-protos.h (output_ubranch): New prototype.
! 	* config/sparc/sparc.c (output_ubranch): New function.
! 	* config/sparc/sparc.md (jump pattern): Use it.
! 
! 2004-07-13  Richard Sandiford  <rsandifo@redhat.com>
! 
! 	PR rtl-optimization/16380
! 	* loop.c (check_dbra_loop): Sink comparison instructions if they
! 	do something other than set cc0.
! 
! 2004-07-13  Eric Botcazou  <ebotcazou@libertysurf.fr>
! 
! 	PR target/16494
! 	* config/sparc/sparc.c (output_cbranch): Properly guard
! 	the code handling far branches with TARGET_V9.
! 	* config/sparc/sparc.md (length attribute): Document the
! 	side-effect of having a length greater or equal to 3.
! 
! 2004-07-13  Eric Botcazou  <ebotcazou@libertysurf.fr>
! 	    Lloyd Parkes  <lloyd@must-have-coffee.gen.nz>
! 
! 	PR target/15186
! 	* config/sparc/sol2-bi.h (LINK_ARCH64_SPEC_BASE): Pass
! 	/usr/ucblib/sparcv9 as -R path when -compat-bsd is specified.
! 
! 2004-07-13  Eric Botcazou  <ebotcazou@libertysurf.fr>
! 	    Martin Sebor  <sebor@roguewave.com>
! 
! 	PR target/12602
! 	* doc/invoke.texi (SPARC options): Document -threads
! 	and -pthreads on Solaris.
! 
! 2004-07-13  Anthony Heading  <aheading@jpmorgan.com>
! 
! 	* configure.ac (gcc_cv_as_offsetable_lo10): Fix a typo.
! 	* configure: Rebuilt.
! 
! 2004-07-12  Vladimir Makarov  <vmakarov@redhat.com>
! 
! 	PR target/16445
! 	* config/ia64/ia64.c (bundling): Don't count ignored insns.
! 
! 2004-07-10  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
! 
! 	* pa.c (output_indirect_call): Only use %r2 as the link register in
! 	indirect calls with the long PA 2.0 pc-relative branch.
! 
! 2004-07-10  James E Wilson  <wilson@specifixinc.com>
! 
! 	* config/gofast.h (gofast_maybe_init_libfuncs): Use SImode for litodp.
! 
! 2004-07-10  Jakub Jelinek  <jakub@redhat.com>
! 
! 	* Backport from mainline:
! 	2004-07-08  Paolo Bonzini  <bonzini@gnu.org>
! 		    Jakub Jelinek  <jakub@redhat.com>
! 
! 	* config/i386/i386.c (override_options): Enable
! 	SSE prefetches with -mtune, as long as we are
! 	compiling for i686 or higher.  All i686 processors
! 	accept SSE prefetches as NOPS, some i586's don't.
! 
! 	2004-07-07  Jakub Jelinek  <jakub@redhat.com>
! 
! 	* config/i386/i386.c (override_options): Don't set x86_prefetch_sse
! 	from -mtune= option.
! 
! 2004-07-10  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR tree-optimization/16372
! 	* fold-const.c (build_range_check): Use TYPE_MODE's precision for
! 	enumerals.
! 
! 2004-07-09  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
! 
! 	PR target/16459
! 	* pa.c (output_indirect_call): Use %r2 as the link register when
! 	calling $$dyncall with a pc-relative branch.
! 
! 2004-07-08  Gerald Pfeifer  <gerald@pfeifer.com>
! 
! 	* doc/install.texi (Binaries): Mention OpenPKG.
! 
! 2004-07-09  Eric Botcazou  <ebotcazou@libertysurf.fr>
! 
! 	PR target/16416
! 	* config/sparc/sol2-bi.h (OPTION_DEFAULT_SPECS): New macro.
! 	Override default settings to account for -m32 and -m64.
! 
! 2004-07-08  Vladimir Makarov  <vmakarov@redhat.com>
! 
! 	PR target/16414
! 	* config/ia64/ia64.c (ia64_dfa_new_cycle): Fix typo in comparison
! 	of asm_noperands result.
! 
! 2004-07-08  Eric Botcazou  <ebotcazou@libertysurf.fr>
! 
! 	PR target/16430
! 	* config/sparc/sparc.c (function_value): In 64-bit mode,
! 	return the aggregates larger than 16 bytes like unions.
! 
! 2004-07-08  Eric Botcazou  <ebotcazou@libertysurf.fr>
! 
! 	PR target/16199
! 	* config/sparc/sparc.c (sparc_emit_set_symbolic_const64): When
! 	'temp' is zero, generate new pseudos as needed and emit the
! 	sequence of insns in single-assignment form.  Resync comments
! 	with code.
! 	(sparc_emit_set_const64): Pass zero as 'temp' argument to above
! 	function before reload.
! 
! 2004-07-07  Richard Sandiford  <rsandifo@redhat.com>
! 
! 	PR target/16407
! 	* config/mips/mips-protos.h (mips_declare_common_object): Declare.
! 	* config/mips/mips.c (mips_declare_common_object): New function,
! 	mostly split out from...
! 	(mips_output_aligned_decl_common): ...here.
! 	* config/mips/mips.h (ASM_OUTPUT_LOCAL): Remove in favor of...
! 	(ASM_OUTPUT_ALIGNED_LOCAL): ...this new definition.
! 	* config/mips/iris6.h (ASM_OUTPUT_ALIGNED_LOCAL): Undefine this
! 	rather than ASM_OUTPUT_LOCAL.  Call mips_declare_common_object.
! 
! 2004-07-07  Jason Merrill  <jason@redhat.com>
! 
! 	PR c++/15815
! 	* doc/extend.texi (C++ Interface): Correct information and
! 	discourage use.
! 
! 2004-07-07  Andreas Schwab  <schwab@suse.de>
! 
! 	* config/ia64/ia64.md: Define new attribute "empty".
! 	(prologue_use, nop_x, insn_group_barrier): Set it.
! 
! 	* config/ia64/ia64.c (ia64_reorg): When looking for trailing call
! 	skip over "empty" insns.
! 
! 2004-07-07  Vladimir Makarov  <vmakarov@redhat.com>
! 
! 	PR target/16130
! 	PR target/16142
! 	PR target/16143
! 	* config/ia64/ia64.c (ia64_dfa_new_cycle): Reset DFA state for asm
! 	insn.
! 
! 2004-07-06  Kazuhiro Inaoka  <inaoka.kazuhiro@renesas.com>
! 
! 	PR target/1679.
! 	* config/m32r/m32r.c (m32r_function_symbol): New function:
! 	Generate a symbol name RTX with the correct m32r specific flags
! 	set.
! 	(block_move_call): Use new function to generate correct symbol.
! 	* config/m32r/m32r-protos.h: Add prototype for new funcion.
! 	* config/m32r/m32r.h (INITIALIZE_TRAMPOLINE): Use the new
! 	function.
! 
! 2004-07-07  Richard Sandiford  <rsandifo@redhat.com>
! 
! 	PR target/16357
! 	* config/mips/mips.c (mips_block_move_straight): Pass BLKmode memrefs
! 	to mips_expand_unaligned_load, mips_expand_unaligned_store, and
! 	move_by_pieces.
! 
! 2004-07-07  Richard Sandiford  <rsandifo@redhat.com>
! 
! 	PR target/15869
! 	* config/mips/mips.c (mips_avoid_hazards): Call split_all_insns_noflow.
! 
! 2004-07-06  Mark Mitchell  <mark@codesourcery.com>
! 
! 	* doc/include/gcc-common.texi: Increment version number.
! 	* version.c (version_string): Likewise.
! 
! 2004-07-06  Joseph S. Myers  <jsm@polyomino.org.uk>
! 
! 	* doc/sourcebuild.texi: Use semicolons instead of commas in
! 	section title.
! 
! 2004-07-06  Joseph S. Myers  <jsm@polyomino.org.uk>
! 
! 	* doc/bugreport.texi, doc/configterms.texi, doc/contrib.texi,
! 	doc/contribute.texi, doc/cpp.texi, doc/cppinternals.texi,
! 	doc/extend.texi, doc/install.texi, doc/invoke.texi, doc/md.texi,
! 	doc/portability.texi, doc/trouble.texi: Avoid some first-person
! 	references and patronizing comments.  Based on printed manual.
! 	* doc/invoke.texi: Don't reference fortran@gnu.org.
! 	* doc/trouble.texi (Warning when a non-void function value is
! 	ignored): Rewrite.  From Russ Allbery and Chris Devers.
! 
! 2004-07-06  Joseph S. Myers  <jsm@polyomino.org.uk>
! 
! 	* doc/cppinternals.texi, doc/install.texi, doc/invoke.texi,
! 	doc/md.texi, doc/sourcebuild.texi, doc/tm.texi, doc/trouble.texi:
! 	Use terminology "testsuite" and "enumerated".
! 
! 2004-07-06  Eric Christopher  <echristo@redhat.com>
! 
! 	PR rtl-optimization/14700
! 	Backport from mainline:
! 	2004-06-30  Zack Weinberg  <zack@codesourcery.com>
! 	* combine.c (distribute_notes): Don't look at global_regs for
! 	pseudos.
! 
! 	2004-06-24  Eric Christopher  <echristo@redhat.com>
! 	* combine.c (distribute_notes): Don't delete sets to
! 	global register variables.
! 
! 2004-07-04  Gerald Pfeifer  <gerald@pfeifer.com>
! 
! 	* doc/contrib.texi (Contributors): Adjust link for GNU Classpath.
! 
! 2004-07-01  Release Manager
! 
! 	* GCC 3.4.1 released.
! 
! 2004-06-28  Neil Booth  <neil@duron.akihabara.co.uk>
! 
! 	PR preprocessor/16192
! 	PR preprocessor/15913
! 	PR preprocessor/15572
! 	* cppexp.c (_cpp_parse_expr): Handle remaining cases where an
! 	expression is missing.
! 	* cppinit.c (post_options): Traditional cpp doesn't do // comments.
! 	* doc/cpp.texi: Don't document what we do for ill-formed expressions.
! 	* doc/cppopts.texi: Clarify processing of command-line defines.
! 
! 2004-06-28  Richard Sandiford  <rsandifo@redhat.com>
! 
! 	PR target/16176
! 	* config/mips/mips.c (mips_expand_unaligned_load): Use a temporary
! 	register for the destination of the lwl or ldl.
! 
! 2004-06-25  Philip Blundell  <philb@gnu.org>
! 
! 	PR wrong-code/15089
! 	* loop.c (scan_loop): Do not move user-specified register
! 	assignments.
  
! 2004-06-25  Mark Mitchell  <mark@codesourcery.com>
  
! 	PR wrong-code/16129
! 	* alias.c (get_alias_set): Adjust setting of
! 	DECL_POINTER_ALIAS_SET for pointers to aggregates.
  
! 2004-06-25  Richard Sandiford  <rsandifo@redhat.com>
  
! 	PR target/16144
! 	* config/mips/mips.md (divsf, divdf): Don't FAIL if the first operand
! 	is 1.0; force it into a register instead.
  
! 2004-06-24  Alan Modra  <amodra@bigpond.net.au>
  
! 	* calls.c (expand_call): Call INIT_CUMULATIVE_ARGS earlier, and
! 	pass raw n_named_args to it.
  
! 2004-06-22  Richard Henderson  <rth@redhat.com>
  
! 	PR middle-end/16026
! 	* function.c (assign_parms): Don't abort for overaligned PARALLEL.
  
! 2004-06-21  Kelley Cook  <kcook@gcc.gnu.org>
  
! 	PR target/15551
! 	* config/i386/i386.md: Change UNSPEC_STACK_PROBE to UNSPECV_STACK_PROBE.
! 	(allocate_stack_worker): Make unspec_volatile.
! 	(allocate_stack_worker_rex64):  Likewise.
! 	(allocate_stack_worker_postreload):  Likewise.
! 	(allocate_stack_worker_rex64_postreload):  Likewise.
  
! 2004-06-21  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
  
! 	PR rtl-optimization/14782
! 	* pa.c (emit_move_sequence): Use SFmode for 4-byte modes when doing
! 	the address checks for secondary reloads for loads from and stores
! 	to floating-point registers.
! 	* pa.h (EXTRA_CONSTRAINT, case T): Use SFmode for 4-byte modes
! 	in the address check.  Move work around for ELF32 targets to
! 	GO_IF_LEGITIMATE_ADDRESS.
! 	(GO_IF_LEGITIMATE_ADDRESS): Require constant offsets to be
! 	correctly aligned for DImode loads and stores.  Don't allow long
! 	SFmode displacements on ELF32.
  
! 2004-06-21  Richard Henderson  <rth@redhat.com>
  
! 	PR rtl-opt/16114
! 	* cse.c (merge_equiv_classes): Also rehash in response to
! 	delete_reg_equiv changes.
! 	(rehash_using_reg): Don't exclude REGs from rehashing.
  
! 2004-06-21  Richard Sandiford  <rsandifo@redhat.com>
  
! 	PR rtl-optimization/15159
! 	* tree.c (unsafe_for_reeval): Return 2 for TRY_CATCH_EXPRs.
  
! 2004-06-19  Richard Henderson  <rth@redhat.com>
  
! 	PR target/15941
! 	* function.c (assign_parms): If not padding upward or intentionally
! 	forcing upward padding, take offset_rtx into account when determining
! 	the alignment for stack_parm.
  
! 2004-06-19  Richard Henderson  <rth@redhat.com>
  
! 	PR target/15550
! 	* ifcvt.c (noce_try_move): Recognize all generated instructions.
  
! 2004-06-19  Andrew Pinski  <pinskia@physics.uc.edu>
  
! 	PR target/10129
! 	* config/darwin.c (darwin_encode_section_info): When the decl has
! 	a DECL_INITIAL, it is only defined also when it is not a common.
  
! 2004-06-17  Zack Weinberg  <zack@codesourcery.com>
  
! 	Bug 14610
! 	* Makefile.in (min-insn-modes.o): Correct dependencies.
! 	* real.c (encode_ieee_extended, decode_ieee_extended): Always
! 	produce/consume 12-byte little-endian Intel format.
! 	(encode_ieee_extended_128, decode_ieee_extended_128): Delete.
! 	(encode_ieee_extended_motorola, decode_ieee_extended_motorola)
! 	(encode_ieee_extended_intel_96, decode_ieee_extended_intel_96)
! 	(encode_ieee_extended_intel_128, decode_ieee_extended_intel_128):
! 	New functions which convert between 12-byte little-endian Intel
! 	format and the desired format.
! 	(ieee_extended_motorola_format, ieee_extended_intel_96_round_53_format)
! 	(ieee_extended_intel_96_format, ieee_extended_intel_128_format):
! 	Update.
  
! 2004-06-16  James E Wilson  <wilson@specifixinc.com>
  
! 	PR c++/14808
! 	* config/i386/cygwin.h (TARGET_IS_PE_COFF): Delete duplicate macro.
  
! 2004-06-16  Bernardo Innocenti  <bernie@develer.com>
  
! 	Backport from mainline:
! 	2004-06-16  Bernardo Innocenti  <bernie@develer.com>
  
! 	PR target/13292
! 	* config/m68k/m68k.h (TARGET_SWITCHES): Don't remove MASK_68040_ONLY
! 	on -msoft-float.
! 	(TARGET_FLT_EVAL_METHOD): Don't advertise extended precision for
! 	68040 and soft-float.
! 	* config/m68k/m68k.md (truncdfsf2): Explicitly require TARGET_68881
! 	in the TARGET_68040_ONLY case.
  
! 2004-06-16  Vladimir Makarov  <vmakarov@redhat.com>
  
! 	PR target/15653
! 	* config/ia64/ia64.c (ia64_dfa_new_cycle): Do not insert nops
! 	after shifts before asm.
  
! 2004-06-15  Chris Demetriou  <cgd@broadcom.com>
  
! 	* config/mips/linux.h (ASM_PREFERRED_EH_DATA_FORMAT): Remove
! 	definition.
! 	* config/mips/linux64.h (ASM_PREFERRED_EH_DATA_FORMAT): Remove
! 	#undef and #if 0'd definition.
  
! 2004-06-15  Kazuhiro Inaoka  <inaoka.kazuhiro@renesas.com>
  
! 	* config/m32r/m32r.h (RETURN_ADDR_RTX): Define.
! 	(INCOMING_RETURN_ADDR_RTX): Define.
! 	* config/m32r/m32r-protos.h (m32r_return_addr): Added.
! 	* config/m32r/m32r.c (m32r_exppand_prologue): Changed for
! 	__builtin_return_address(0).
! 	(m32r_return_addr): Added for __builtin_return_address(0).
! 	(m32r_reload_lr): Ditto.
  
! 	* longlong.h: Fix macros for m32r add_ssaaaa and sub_ddmmss.
  
! 2004-06-15  Giovanni Bajo  <giovannibajo@gcc.gnu.org>
  
! 	* gccbug.in: Update optimization -> tree-optimization/rtl-optimization.
  
! 2004-06-14  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	* real.c: Fix bit count in head comment.
  
! 2004-06-14  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR middle-end/15945
! 	* simplify-rtx.c (simplify_binary_operation): Don't optimize out
! 	Inf + -Inf, Inf - Inf, Inf / Inf and 0 * Inf if flag_trapping_math.
  
! 2004-06-14  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/15178
! 	* config/i386/sol2.h (ASM_OUTPUT_DEF_FROM_DECLS): Define.
  
! 2004-06-14  Alan Modra  <amodra@bigpond.net.au>
  
! 	* config/rs6000/rs6000.h (ASM_CPU_SPEC): Handle -mpowerpc64 and -mcpu
! 	for power5 and rs64a.  Correct condition for default.  Correct power3,
! 	620, 630, 7400, 7450, G4, 970 and G5 -mcpu entries.  Add -many.
  
! 2004-06-13  Alan Modra  <amodra@bigpond.net.au>
  
! 	Apply mainline 2004-01-27  Alan Modra  <amodra@bigpond.net.au>
! 	* config/rs6000/rs6000.h: Correct target_flags free bits comment.
! 	(PREDICATE_CODES): Remove duplicate.
! 	* config/rs6000/linux64.h (CPP_SYSV_SPEC): Don't define.
! 	(SUBSUBTARGET_OVERRIDE_OPTIONS): Disallow 32 bit TARGET_PROFILE_KERNEL.
! 	(MASK_PROFILE_KERNEL): Adjust define.
  
! 2004-06-13  Hans-Peter Nilsson  <hp@axis.com>
  
! 	PR rtl-optimization/15296
! 	* reorg.c (fill_simple_delay_slots): Use next_real_insn when
! 	getting last consecutive label at a branch.
! 	(relax_delay_slots): Similar, near top of loop.
  
! 2004-06-12  Andreas Jaeger  <aj@suse.de>
  
! 	* libgcc-std.ver: Add __unorddf2 and __unordsf2 with version 3.3.4.
! 	* libgcc-darwin.ver: Likewise.
  
! 2004-06-11  Bernardo Innocenti  <bernie@develer.com>
  
! 	PR target/8309
! 	PR target/13312
! 	Backport from mainline:
  
! 	2004-05-27  Peter Jakubek  <peter@laseranimation.com>
  
! 	* reload.c (find_reloads): Force reload for pseudo registers on big
! 	endian machines.
  
! 2004-06-11  J"orn Rennecke <joern.rennecke@superh.com>
  
! 	* sh.c (dump_table): New argument start.  Changed caller.
! 	(fixup_mova): New function.
! 	(find_barrier): Use it.
! 	(sh_reorg): Likewise.  Check for CODE_FOR_casesi_worker_2.
! 	If the label a mova refers to is above the mova itself, change
! 	the mova into a load.
! 	* sh.md (*casesi_worker): Rename to:
! 	(casesi_worker_1).
! 	(casesi_worker_2): New insn.
  
! 2004-06-11  Hartmut Penner  <hpenner@de.ibm.com>
  
! 	Backport from mainline:
  
! 	* config/rs6000/rs6000.c (output_vec_const_move):
! 	Find all cases of EASY_VECTOR_15_ADD_SELF.
! 	(easy_vector_constant_add_self): Accept
! 	all vector constant loadable by vsplt* and vadd*.
! 	(easy_vector_same): Use easy_vector_splat_const.
! 	(easy_vector_const): Use easy_vector_splat_const.
! 	(easy_vector_splat_const): New function.
! 	(gen_easy_vector_constant_add_self): New function.
  
! 	* config/rs6000/rs6000-protos.c (gen_easy_vector_constant_add_self):
! 	New prototype.
  
! 	* config/rs6000/altivec.md (movv4si splitter): Change to
! 	emit move insn with halfed vector constant.
! 	(*movv8hi splitter): Likewise.
! 	(*movv16qi splitter): Likewise.
  
! 2004-06-10  Joseph S. Myers  <jsm@polyomino.org.uk>
  
! 	* doc/sourcebuild.texi (Front End): Add details of more
! 	installation documentation required.
  
! 2004-06-10  Vladimir Makarov  <vmakarov@redhat.com>
  
! 	PR target/15653
! 	* haifa-sched.c (schedule_block): Finish cycle after issuing asm
! 	insn.
  
! 2004-06-10  Volker Reichelt  <reichelt@igpm.rwth-aachen.de>
  
! 	PR web/15263
! 	* doc/install.texi: Remove superfluous linebreak.
  
! 2004-06-10  Bernardo Innocenti  <bernie@develer.com>
  
! 	PR target/13803
! 	Backport from mainline:
  
! 	2004-05-05  Peter Barada  <peter@the-baradas.com>
  
! 	* config/m68k/m68k.h(EXTRA_CONSTRAINT): Add 'U' for register offset
! 	addressing.
! 	* config/m68k/m68k.md: Add 'U,U' alternative to ColdFire variants of
! 	movsi, movhi, movqi insn patterns.
  
! 2004-06-10  Alan Modra  <amodra@bigpond.net.au>
  
! 	Apply from mainline:
! 	2004-03-12  Jakub Jelinek  <jakub@redhat.com>
! 	* config/rs6000/rs6000-protos.h (rs6000_output_dwarf_dtprel): Add
! 	prototype.
! 	* config/rs6000/rs6000.c (rs6000_output_dwarf_dtprel): New.
! 	* config/rs6000/rs6000.h (ASM_OUTPUT_DWARF_DTPREL): Define.
  
! 2004-06-10  Jakub Jelinek  <jakub@redhat.com>
  
! 	* config/ia64/unwind-ia64.c (uw_frame_state_for): Don't assume a
! 	leaf function without unwind info at RP 0.
  
! 2004-06-10  Alan Modra  <amodra@bigpond.net.au>
  
! 	PR target/15191
! 	2004-05-15  Alan Modra  <amodra@bigpond.net.au>
! 	* config/rs6000/rs6000.c (rs6000_va_arg <ABI_V4>): Don't use
! 	UNITS_PER_WORD to calculate gpr size.  Re-instate code to set reg
! 	count to 8 to handle n_reg > 2.
! 	2004-05-10  Alan Modra  <amodra@bigpond.net.au>
! 	* config/rs6000/rs6000.c (function_arg_boundary): Always align
! 	AltiVec vectors.
! 	(function_arg_advance): Pass TARGET_32BIT -mabi=no-altivec AltiVec
! 	vectors by refererence.  Align the same for TARGET_64BIT to a 16
! 	byte boundary.  Remove useless code.  Add function comment.
! 	(function_arg): Similarly.  Move gpr rs6000_mixed_function_arg
! 	call to where it belongs.
! 	(function_arg_partial_nregs): Return true for all TARGET_32BIT
! 	-mabi=no-altivec AltiVec vectors.  Fix debug output.
! 	(rs6000_va_arg): Adjust for AltiVec change.
! 	2004-05-10  Alan Modra  <amodra@bigpond.net.au>
! 	* config/rs6000/rs6000.c (function_arg_boundary): Align for ABI_V4
! 	when size is 8 bytes.
! 	(function_arg_advance): Account for stack space used by AltiVec
! 	args when -mabi=altivec.  Simplify alignment calculations.  For
! 	ABI_V4, pass AltiVec vectors by reference when -mabi=no-altivec.
! 	(function_arg): Similarly.
! 	(function_arg_pass_by_reference): True for ABI_V4 AltiVec when
! 	not AltiVec ABI.
! 	(rs6000_va_arg): Correct fp arg test.  Adjust for AltiVec change.
! 	Correct alignment, and align before testing reg count.  Remove
! 	TREE_THIS_VOLATILE from reg.  Don't emit unused labels.
! 	(rs6000_complex_function_value): Check TARGET_HARD_FLOAT and
! 	TARGET_FPRS here..
! 	(rs6000_function_value): .. not here before call.
! 	2004-05-07  Alan Modra  <amodra@bigpond.net.au>
! 	* config/rs6000/rs6000.h (STACK_BOUNDARY): Use 128 bit for either
! 	TARGET_ALTIVEC or TARGET_ALTIVEC_ABI.
! 	* config/rs6000/sysv4.h (ABI_STACK_BOUNDARY): Likewise.
! 	(STACK_BOUNDARY): Delete.
  
! 2004-06-10  Alan Modra  <amodra@bigpond.net.au>
  
! 	PR target/14960
! 	2004-04-24  Alan Modra  <amodra@bigpond.net.au>
! 	* config/rs6000/rs6000.c (rs6000_stack_info): Rename total_raw_size
! 	to non_fixed_size, and leave out fixed_size from the sum.
! 	(generate_set_vrsave): Correct clobbers.
! 	(rs6000_emit_epilogue): Test TARGET_ALTIVEC with TARGET_ALTIVEC_SAVE.
! 	(rs6000_function_value): Test TARGET_ALTIVEC and TARGET_ALTIVEC_ABI.
! 	(rs6000_libcall_value): Likewise.
! 	* config/rs6000/rs6000.h (FUNCTION_VALUE_REGNO_P): Likewise.
! 	(FUNCTION_ARG_REGNO_P): Likewise.
  
! 2004-06-10  Alan Modra  <amodra@bigpond.net.au>
  
! 	PR target/14567
! 	2004-03-13  Alan Modra  <amodra@bigpond.net.au>
! 	* config/rs6000/rs6000.h (UNITS_PER_ARG, RS6000_ARG_SIZE): Delete.
! 	(HARD_REGNO_MODE_OK): Disallow TFmode for fp31.
! 	* config/rs6000/rs6000.c (rs6000_arg_size): New function.
! 	Update all users of RS6000_ARG_SIZE.
! 	(function_arg_advance): Count fregno using mode size.
! 	(function_arg): Handle long double split over regs and memory.
! 	(function_arg_partial_nregs): Likewise.
! 	(rs6000_va_arg): Repackage complex args.
! 	2004-02-23  Fariborz Jahanian <fjahanian@apple.com>
! 	* config/rs6000/rs6000.c (function_arg): call to
! 	rs6000_mixed_function_arg for DFmode moved to allow
! 	normal DFmode incoming register assignment.
  
! 2004-06-09  Mark Mitchell  <mark@codesourcery.com>
  
! 	Revert:
! 	PR c++/15815
! 	2004-06-07  Mark Mitchell  <mark@codesourcery.com>
! 	* doc/extend.texi: Deprecate #pragma interface and #pragma
! 	implementation.
  
! 2004-06-08  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
  
! 	PR rtl-optimization/15761
! 	* cfgloopanal.c (count_strange_loop_iterations,
! 	count_loop_iterations): Use gen_int_mode instead
! 	of GEN_INT.
  
! 2004-06-08  Roger Sayle  <roger@eyesopen.com>
  
! 	PR c/14649
! 	* c-typeck.c (require_constant_value, require_constant_elements):
! 	Move declarations to the top of the file.
! 	(build_function_call): If we require a constant value, fold with
! 	fold_initializer.  If the result is a constant, and the function
! 	wasn't called using __builtin_foo, issue a pedantic warning.
! 	(build_unary_op): If we require a constant value, fold tree with
! 	fold_initializer.
! 	(build_binary_op): Use require_constant_value to determine whether
! 	to call fold or fold_initializer.
  
! 2004-06-08  Richard Henderson  <rth@redhat.com>
  
! 	PR middle-end/15228
! 	* function.c (assign_parms): Always set_mem_align with the computed
! 	FUNCTION_ARG_BOUNDARY.  Don't clear stack_parm if !STRICT_ALIGNMENT.
  
! 2004-06-08  Vladimir Makarov  <vmakarov@redhat.com>
  
! 	PR target/15598
! 	* config/ia64/ia64.c (bundling): Add missed TYPE_A.
  
! 2004-06-08  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
  
! 	PR rtl-optimization/15717
! 	* config/i386/i386.c (legitimate_constant_p): Do not allow
! 	x - symbol_ref.
  
! 2004-06-07  James E Wilson  <wilson@specifixinc.com>
  
! 	PR target/15569
! 	* config/ia64/ia64.md (call_value_nogp): Add constraints for op0.
! 	(vall_value_gp): Likewise.
  
! 2004-06-07  Dan Kegel  <dank@kegel.com>
  
! 	PR c++/14808
! 	* config/i386/cygwin.h (TARGET_IS_PE_COFF): New.
! 	* config/i386/cygming.h (TARGET_IS_PE_COFF): New.
  
! 2004-06-07  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	PR target/15783
! 	* config/sparc/sparc.c (function_arg_union_value): Add 'mode'
! 	parameter.  Enumerate the registers inside the PARALLEL.
! 	(function_arg): Adjust call to function_arg_union_value.
! 	(function_value): Likewise.
  
! 2004-06-07  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
  
! 	* pa.c (emit_move_sequence): Fix loading of non 14-bit CONST operands
! 	when generating PIC code.
  
! 	* pa.md: Disable the peephole2 patterns that generate indexed
! 	floating-point stores when indexing is disabled.
  
! 2004-06-07  Joseph S. Myers  <jsm@polyomino.org.uk>
  
! 	PR c/14765
! 	* c-parse.in (compstmt_primary_start): Set last_expr_type to
! 	NULL_TREE.
  
! 2004-06-07  Mark Mitchell  <mark@codesourcery.com>
  
! 	PR c++/15815
! 	* doc/extend.texi: Deprecate #pragma interface and #pragma
! 	implementation.
  
! 2004-06-07  Richard Henderson  <rth@redhat.com>
  
! 	PR rtl-opt/15193
! 	* expmed.c (extract_bit_field): Fix vector_extract return.
  
! 2004-06-07  Mark Mitchell  <mark@codesourcery.com>
  
! 	PR c++/15337
! 	* c-common.c (c_sizeof_or_alignof_type): Use more detailed error
! 	message.
  
! 2004-06-06  Stephane Carrez  <stcarrez@nerim.fr>
  
! 	PR target/14542
! 	* config/m68hc11/m68hc11.md (move peephole2): Emit a use note to avoid
! 	a live change of a register after peephole replacement.
  
! 2004-06-06  Stephane Carrez  <stcarrez@nerim.fr>
  
! 	PR target/14457
! 	* config/m68hc11/m68hc11.c (splitable_operand): New predicate.
! 	* config/m68hc11/m68hc11-protos.h (splitable_operand): Declare.
! 	* config/m68hc11/m68hc11.h (PREDICATE_CODES): Register it.
! 	(inhibit_libc): Must define.
! 	* config/m68hc11/m68hc11.md ("movhi_const0"): Use splitable_operand.
! 	("*andhi3_gen", "iorhi3", "*iorhi3_gen"): Likewise.
! 	("xorhi3"): Likewise.
  
! 2004-06-05  David S. Miller  <davem@nuts.davemloft.net>
  
! 	* config/sparc/linux.h (TARGET_C99_FUNCTIONS): Set.
! 	* config/sparc/linux64.h (TARGET_C99_FUNCTIONS): Likewise.
  
! 2004-06-04  Eric Christopher  <echristo@redhat.com>
  
! 	Backport from mainline:
! 	2004-06-02  Eric Christopher  <echristo@redhat.com>
  
! 	* c-typeck.c (common_type): Don't lose type qualifiers
! 	when creating new variants.
  
! 2004-06-03  Bernardo Innocenti  <bernie@develer.com>
  
! 	PR target/15782
! 	Backport from mainline:
  
! 	2004-06-01  Peter Barada  <peter@the-baradas.com>
! 		    Peter Jakubek  <peter@laseranimation.com>
  
! 	* config/m68k/m68k.c(m68k_output_mi_thunk):  For ColdFire, use %d0 as
! 	a scratch to perform an add to memory.
  
! 2004-06-01  Paul Eggert  <eggert@cs.ucla.edu>
  
! 	PR target/15626
! 	* doc/install.texi (sparc-sun-solaris2*): Document messages issued
! 	by the Sun linker in conjunction with the Sun assembler.
! 	(sparc-sun-solaris2.7): Update revision info for Sun patch 106950.
  
! 2004-06-01  Nicola Pero  <nicola@brainstorm.co.uk>
  
! 	PR objc/7993
! 	* objc-act.c (is_private): Do not emit the 'instance variable %s
! 	is declared private' error.
! 	(is_public): Emit the error after calling is_private.
! 	(lookup_objc_ivar): If the instance variable is private, return 0
! 	- the instance variable is invisible here.
  
! 2004-06-01  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	* doc/invoke.texi (-static-libgcc): Explicitly mention
! 	non-GNU linkers.
  
! 2004-05-31  Kaz Kojima  <kkojima@gcc.gnu.org>
  
! 	PR target/13250
! 	Backport from mainline:
  
! 	2004-05-28  Kaz Kojima  <kkojima@gcc.gnu.org>
! 	* config/sh/sh.md (rotlsi3): Use emit_move_insn.
  
! 2004-05-31  H.J. Lu  <hongjiu.lu@intel.com>
  
! 	PR middle-end/15666
! 	* cgraph.c (cgraph_remove_node): Don't call htab_clear_slot if
! 	we can't find the slot. Abort if we can't find slot and the
! 	node isn't for a builtin function.
  
! 2004-05-31  Roger Sayle  <roger@eyesopen.com>
  
! 	PR middle-end/15069
! 	* fold-const.c (fold_single_bit_test): Only perform "(X & C) != 0"
! 	into "X < 0" (where C is the signbit) if X's type is a full mode.
  
! 2004-05-31  Joseph S. Myers  <jsm@polyomino.org.uk>
  
! 	PR c/15749
! 	* c-decl.c (grokdeclarator, finish_struct): Don't pedwarn for
! 	misuses of structures with flexible array members if
! 	in_system_header.
  
! 2004-05-31  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	PR target/15693
! 	* config/sparc/sparc.c (compare_operand): New predicate.
! 	* config/sparc/sparc.h (PREDICATE_CODES): Add it.
! 	* config/sparc/sparc.md (cmpsi expander): Use it.  If the first
! 	operand is a ZERO_EXTRACT and the second operand is not zero,
! 	force the former to a register.
! 	(cmpdi expander): Likewise.
  
! 2004-05-31  Danny Smith  <dannysmith@users.sourceforge.net>
  
! 	* c-incpath.c (add_path): Canonicalize paths to use '/' if
! 	HAVE_DOS_BASED_FILESYSTEM.
  
! 2004-05-28  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
  
! 	PR bootstrap/14671
! 	* alias.c (init_alias_analysis): Allocate alias_invariant array with
! 	ggc_calloc instead of xrealloc.
! 	(end_alias_analysis): Don't free alias_invariant.
  
! 2004-05-28  DJ Delorie  <dj@redhat.com>
  
! 	* stor-layout.c (place_field): Revert erroneous commit.
  
! 2004-05-28  Nick Clifton  <nickc@redhat.com>
  
! 	Bug 14093
! 	* config/sh/sh-protos.h (sh_promote_prototypes): Declare.
! 	* config/sh/sh.c (sh_promote_prototypes): Remove declaration.
! 	Delete static from definition.
! 	* config/sh/sh.h (FUNCTION_VALUE): Add sh_promote_prototypes call.
  
! 2004-05-27  Kaz Kojima  <kkojima@gcc.gnu.org>
  
! 	Backport from mainline:
  
! 	* config/sh/t-linux (SHLIB_MAPFILES): Use sh specific
! 	libgcc-std.ver.
! 	* config/sh/libgcc-std.ver: New file.
  
! 2004-05-27  Olivier Hainque  <hainque@act-europe.fr>
  
! 	* expr.c (store_constructor): Restore sanity check on
! 	the size of the type before clearing.
  
! 2004-05-27  Alan Modra  <amodra@bigpond.net.au>
  
! 	PR target/14478
! 	* config/rs6000/rs6000.c (reg_or_neg_short_operand): Don't allow zero.
  
! 2004-05-26  Aldy Hernandez  <aldyh@redhat.com>
  
! 	PR/14924
! 	* config/rs6000/rs6000.c (spe_expand_stv_builtin): New.
  
! 2004-05-23  Joseph S. Myers  <jsm@polyomino.org.uk>
  
! 	* doc/gcc.texi, doc/gccint.texi, doc/include/gcc-common.texi:
! 	Update based on printed manual.  Enable setting of offsets for
! 	FSFPRINT and move it to gcc-common.texi.
! 	* doc/gcc.texi: Update FSF printing details.
! 	* doc/gccint.texi: Remove FSF printing details.
  
! 2004-05-21  Jakub Jelinek  <jakub@redhat.com>
  
! 	* config/sparc/linux64.h (OPTION_DEFAULT_SPECS): If SPARC_BI_ARCH,
! 	override sparc.h definition.
  
! 2004-05-20  Jakub Jelinek  <jakub@redhat.com>
  
! 	* config/sparc/linux64.h (TARGET_DEFAULT): Make 64-bit by default
! 	also for TARGET_CPU_DEFAULT == TARGET_CPU_ultrasparc3.
  
! 2004-05-18  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
  
! 	PR target/15202
! 	* pa.md (movdi, movsi, movhi, movqi): Support move from shift amount
! 	register to general register for DI, SI, HI and QI modes.  Remove
! 	move to shift amount register in DF mode.
  
! 2004-05-18  Ulrich Weigand  <uweigand@de.ibm.com>
  
! 	PR middle-end/15054
! 	* expr.c (expand_expr_real): Do not call preserve_temp_slots
! 	on a TARGET_EXPR temp.
! 	* function.c (assign_stack_temp_for_type): Set 'keep' flag for
! 	TARGET_EXPR temp slots.
  
! 2004-05-18  Kaz Kojima  <kkojima@gcc.gnu.org>
  
! 	PR optimization/15100
! 	Backport from mainline:
  
! 	2004-05-11  Kaz Kojima  <kkojima@gcc.gnu.org>
! 	* combine.c (distribute_notes): Don't create a dangling
! 	REG_LIBCALL/REG_RETVAL note.
  
! 2004-05-17  H.J. Lu  <hongjiu.lu@intel.com>
  
! 	Backport from mainline
  
! 	PR target/15301
! 	PR target/15302
! 	2004-05-17  Jan Hubicka  <jh@suse.cz>
  
! 	* i386.c (construct_container): Do not produce BLKmode registers.
! 	(classify_argument): Properly compute alignment of complex types.
  
! 2004-05-15  Joseph S. Myers  <jsm@polyomino.org.uk>
  
! 	* doc/extend.texi: Update WG14 URL.
  
! 2004-05-11  Aldy Hernandez  <aldyh@redhat.com>
  
! 	* config/rs6000/spe.md (spe_evneg): Rename to negv2si2.
  
! 	* config/rs6000/rs6000.c (bdesc_1arg): Change spe_evneg to
! 	negv2si2.
  
! 2004-05-10  Kaz Kojima  <kkojima@gcc.gnu.org>
  
! 	PR target/15130
! 	Backport from mainline:
  
! 	* config/sh/sh-protos.h (sh_expand_epilogue): Change prototype.
! 	* config/sh/sh.c (output_stack_adjust): Take the sibcall epilogue
! 	into account.  Compute the correct number of general registers
! 	for the return value.  Generate a special push/pop sequence when
! 	failing to get a temporary register for non SHmedia epilogue.
! 	(sh_expand_epilogue): Add an argument to show whether it's for
! 	sibcall or not.  Set the 3rd argument of output_stack_adjust to
! 	-1 if needed.
! 	(sh_need_epilogue): Call sh_expand_epilogue with 0.
! 	* config/sh/sh.md (sibcall_epilogue): Call sh_expand_epilogue
! 	with 1.
! 	(epilogue): Call sh_expand_epilogue with 0.
  
! 2004-05-09  Aldy Hernandez  <aldyh@redhat.com>
  
! 	* config/rs6000/spe.md ("tstsflt_gpr"): Fix typo in unspec.
  
! 2004-05-08  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	* doc/install.texi (sparc-sun-solaris2*): Document bootstrap
! 	problems with earlier versions of the GNU compiler.
  
! 2004-05-07  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	PR c++/14962
! 	* c-pragma.c (handle_pragma_redefine_extname): Only change
! 	the assembler name of FUNCTION_DECLs and VAR_DECLs.
  
! 2004-05-07  Loren James Rittle  <ljrittle@acm.org>
  
! 	* config/alpha/freebsd.h (SUBTARGET_EXTRA_SPECS): Proper redefinition.
! 	* config/arm/freebsd.h: Likewise.
! 	* config/ia64/freebsd.h: Likewise.
! 	* config/sparc/freebsd.h: Likewise.
  
! 2004-05-06  Richard Henderson  <rth@redhat.com>
  
! 	* stmt.c (parse_output_constraint): Don't warn for read-write
! 	memory operand.
  
! 2004-05-06  Jan Hubicka  <jh@suse.cz>
  
! 	PR c/15004
! 	* function.c (do_warn_unused_parameter): Break out form ...
! 	(expand_function_end): ... here; warn only when not using cgraphunit.
! 	* function.h (do_warn_unused_parameter): Declare.
! 	* cgraphunit.c: Include function.h.
! 	(cgraph_finalize_function): Do unused parameter warning.
! 	* Makefile.in (cgraphunit.o): Depend on function.h
  
! 2004-05-05  H.J. Lu  <hongjiu.lu@intel.com>
  
! 	PR target/15290
! 	* config/i386/i386.c (ix86_split_to_parts): Use real_to_target
! 	instead of REAL_VALUE_TO_TARGET_LONG_DOUBLE.
  
! 2004-05-03  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
  
! 	* fixinc/inclhack.def (svr4_profil): Don't apply on IRIX 5/6.
! 	* fixinc/fixincl.x: Regenerate.
  
! 2004-05-02  Josef Zlomek  <zlomekj@suse.cz>
  
! 	* cfgrtl.c (cfg_layout_redirect_edge_and_branch): Print the debug
! 	message before redirecting the edge.
  
! 2004-05-02  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	PR optimization/15112
! 	* reload1.c (reload): Don't record unchanging memory locations.
  
! 2004-04-30  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
  
! 	PR other/1963
! 	* config/alpha/osf.h (SWITCHES_NEED_SPACES): Define.
  
! 2004-04-30  David Edelsohn  <edelsohn@gnu.org>
  
! 	Backport from mainline:
  
! 	2004-04-19  David Edelsohn  <edelsohn@gnu.org>
  
! 	* doc/install.texi (*-ibm-aix*): Add AIX 5.1 assembler and archiver
! 	fix information.
  
! 	2004-04-17  Alan Modra  <amodra@bigpond.net.au>
  
! 	PR target/14715
! 	* config/rs6000/rs6000.c (rs6000_stack_info): Make parm_size agree
! 	with STARTING_FRAME_OFFSET.
  
! 	2004-04-07  David Edelsohn  <edelsohn@gnu.org>
  
! 	* config/rs6000/rs6000.c (processor_target_table): Add MASK_MFCRF
! 	to power4 and power5 entries.
  
! 	2004-04-05  David Edelsohn
  
! 	* config/rs6000/rs6000.c (VTABLE_NAME_P): Add _ZTI to special
! 	symbol handling.
  
! 	2004-03-30  Hartmut Penner  <hpenner@de.ibm.com>
  
! 	PR 11591
! 	* config/rs6000/rs6000.c (rs6000_legitimate_address):
! 	Allow any offset to argument pointer in no-strict case.
  
! 	2004-03-25  David Edelsohn  <edelsohn@gnu.org>
  
! 	* config/rs6000/rs6000.c (rs6000_always_hint): New variable.
! 	(rs6000_sched_groups): New variable.
! 	(processor_target_table): Add power5.
! 	(rs6000_override_options): Set rs6000_sched_insert_nops,
! 	rs6000_sched_costly_dep and rs6000_sched_restricted_insns_priority
! 	from rs6000_sched_groups.
! 	(output_cbranch): Use rs6000_always_hint.
! 	(rs6000_variable_issue): Use rs6000_sched_groups.
! 	(rs6000_adjust_cost): Add CPU_POWER5.
! 	(is_microcoded_insn): Use rs6000_sched_groups.
! 	(is_dispatch_slot_restricted): Use rs6000_sched_groups.
! 	Return 2 for POWER5 cracked instructions.
! 	(is_cracked_insn): Use rs6000_sched_groups.
! 	(is_branch_slot_insn): Use rs6000_sched_groups.
! 	(rs6000_issue_rate): Add CPU_POWER5.
! 	(rs6000_sched_finish): Use rs6000_sched_groups.
! 	(rs6000_rtx_costs): Add PROCESSOR_POWER5.
! 	* config/rs6000/rs6000.h (processor_type): Add PROCESSOR_POWER5.
! 	(DEFAULT_SCHED_COSTLY_DEP): Delete.
! 	(DEFAULT_RESTRICTED_INSNS_PRIORITY): Delete.
! 	(DEFAULT_SCHED_FINISH_NOP_INSERTION_SCHEME): Delete.
! 	* config/rs6000/rs6000.md (define_attr "cpu"): Add power5.
! 	* config/rs6000/power5.md: New file.
! 	* doc/invoke.texi: Add power5 option.
  
! 	2004-03-17  Fariborz Jahanian <fjahanian@apple.com>
  
! 	* config/rs6000/rs6000.c (rs6000_stack_info): correct reg_size
! 	for mixed mode.
! 	(rs6000_emit_prologue): Ditto.
! 	(rs6000_emit_epilogue): Ditto.
! 	* config/rs6000/rs6000.h: Definition of DWARF_CIE_DATA_ALIGNMENT
! 	macro for mixed mode.
  
! 	2004-03-04  David Edelsohn  <edelsohn@gnu.org>
! 		    GP <gp@qnx.com>
  
! 	* config/rs6000/rs6000.c (output_function_profiler): Append @plt
! 	when compiling PIC.
  
! 2004-04-30  Paolo Bonzini  <bonzini@gnu.org>
  
! 	* config/altivec/altivec.h [__cplusplus] (vec_subsubs): Rename
! 	to vec_sububs.
! 	[__cplusplus] (vec_subsuhs): Rename to vec_subuhs,
! 	eliminating duplicates.
  
! 2004-04-29  Richard Sandiford  <rsandifo@redhat.com>
  
! 	PR target/15189
! 	* config/mips/mips.md (load_df_low): Use default length.
! 	(load_df_high, store_df_high): Likewise.
  
! 2004-04-29  Philip Blundell  <philb@gnu.org>
  
! 	* Merge from trunk:
! 	2004-04-20  Paul Brook  <paul@codesourcery.com>
  
! 	* config/arm/arm.c (arm_legitimate_address_p): Use rtx_equal_p.
  
! 2004-04-29  Aldy Hernandez  <aldyh@redhat.com>
  
! 	PR/12028
! 	* config/rs6000/rs6000.c (rs6000_emit_cmove): Disable comparisons
! 	of floats on the E500.
! 	(branch_positive_comparison_operator): Do not allow NE even on the
! 	E500.
! 	(ccr_bit): Remove E500 specific code.
! 	Remove miscompilation warning for e500.
! 	(print_operand): Add 'c' and 'D'.
! 	(rs6000_generate_compare): Rewrite to generate correct rtl.
! 	(rs6000_emit_sCOND): Handle E500.
! 	(output_cbranch): Adjust for changes in rs6000_generate_compare.
! 	(output_e500_flip_gt_bit): New.
! 	(rs6000_override_options): Error when user wants altivec and e500
! 	instructions.
  
! 	* config/rs6000/rs6000.md (UNSPEC_MV_CR_GT): New constant.
! 	(move_from_CR_gt_bit): New.
! 	(cceq_ior_compare): Name previously unnamed pattern.  Disable for
! 	E500.
! 	(cceq_rev_compare): Name previously unnamed pattern.  Allow for
! 	E500.
  
! 	* config/rs6000/spe.md (cmpsfeq_gpr): Rewrite as unspec.
! 	(tstsfeq_gpr): Same.
! 	(cmpsfgt_gpr): Same.
! 	(tstsfgt_gpr): Same.
! 	(cmpsflt_gpr): Same.
! 	(tstsflt_gpr): Same.
! 	(e500_cceq_ior_compare): New.
! 	(e500_flip_gt_bit): New.
  
! 	* config/rs6000/rs6000-protos.h (output_e500_flip_gt_bit):
! 	Protoize.
  
! 2004-04-28  Ben Elliston  <bje@au.ibm.com>
  
! 	* doc/invoke.texi (Objective-C Dialect Options): Don't prefix
! 	options with "-" in the option index.
! 	(SPARC Options): Likewise.
! 	(M32R/D Options): Likewise.
  
! 2004-04-28  Joseph S. Myers  <jsm@polyomino.org.uk>
  
! 	* Makefile.in ($(DESTDIR)$(infodir)/%.info): Don't condition
! 	calling install-info on $(DESTDIR)$(infodir)/dir already being
! 	present.
  
! 2004-04-28  H.J. Lu  <hongjiu.lu@intel.com>
  
! 	PR target/15084
! 	* config/i386/i386.md (*movsi_insv_1_rex64): Changed to DImode
! 	and renamed to movdi_insv_1_rex64.
! 	(insv): Support SImode for 32bit and DImode for 64bit.
  
! 2004-04-27  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
  
! 	PR debug/14829
! 	* dwarf2out.c (reg_number): Rename to dbx_reg_number.  Adjust all
! 	callers.
! 	(multiple_reg_loc_descriptor, reg_loc_descriptor): Use gcc register
! 	number for indexing hard_regno_nregs array.
  
! 2004-04-27  Bob Wilson  <bob.wilson@acm.org>
  
! 	* config/xtensa/xtensa.c (call_insn_operand): Check
! 	SYMBOL_REF_EXTERNAL_P in addition to SYMBOL_REF_LOCAL_P.
! 	* config/xtensa/xtensa.h (LEGITIMATE_PIC_OPERAND): Likewise.
! 	* config/xtensa/xtensa.md (call, call_value): Likewise.
  
! 2004-04-26  Zack Weinberg  <zack@codesourcery.com>
  
! 	* config/ia64/hpux.h: Predefine __STDCPP__ when compiling C++.
! 	* config/pa/pa-hpux10.h: Likewise.
! 	* config/pa/pa-hpux11.h: Likewise.
  
! 2004-04-23  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	PR optimization/13985
! 	* cfgloopmanip.c (fix_loop_placements): New prototype.
! 	Call fix_bb_placements on the preheader of loops that have
! 	been reparented.
! 	(remove_path): Adjust call to fix_loop_placements.
  
! 2004-04-23  Nick Clifton  <nickc@redhat.com>
  
! 	* Import this patch from mainline:
! 	2004-04-16  Kazuhiro Inaoka <inaoka.kazuhiro@renesas.com>
  
! 	* config/m32r/m32r.h (BIG_ENDIAN_BIT): Deleted to fix endian
! 	bug.
! 	(TARGET_LITTLE_ENDIAN, TARGET_BIG_ENDIAN,
! 	TARGET_DEFAULT): Changed. Ditto.
! 	(LITTLE_ENDIAN_BIT, TARGET_CPU_DEFAULT,
! 	TARGET_ENDIAN_DEFAULT): Added. Ditto.
! 	* config/m32r/little.h (TARGET_LITTLE_ENDIAN): Deleted.
! 	(TARGET_ENDIAN_DEFAULT): Added.
  
! 2004-04-22  Per Bothner  <per@bothner.com>
  
! 	* cppinit.c (cpp_read_main_file):  Return NULL rather than false.
! 	Fixes PR preprocessor/15067.
  
! 2004-04-22  Ulrich Weigand  <uweigand@de.ibm.com>
  
! 	* function.c (thread_prologue_and_epilogue): Move
! 	NOTE_INSN_FUNCTION_END and NOTE_INSN_FUNCTION_BEG notes
! 	before the epilogue.
  
! 2004-04-22  Ulrich Weigand  <uweigand@de.ibm.com>
  
! 	* dbxout.c (dbxout_symbol_location): Do not output references
! 	to optimized-out constant pool symbols.
  
! 2004-04-22  Ulrich Weigand  <uweigand@de.ibm.com>
  
! 	* expr.c (store_constructor): Use gen_int_mode to correctly
! 	sign-extend CONST_INT value.
  
! 2004-04-22  Ulrich Weigand  <uweigand@de.ibm.com>
  
! 	* combine.c (if_then_else_cond): Check for NULL return value of
! 	simplify_gen_subreg.
  
! 2004-04-22  Ulrich Weigand  <uweigand@de.ibm.com>
  
! 	* reload1.c (emit_reload_insns): Set reg_has_output_reload to one
! 	after setting reg_last_reload_reg for optional output reloads.
  
! 2004-04-22  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
  
! 	* pa64-regs.h (DBX_REGISTER_NUMBER): Simplify and correct mapping of
! 	SAR register.  Fix comment.
! 	(ADDITIONAL_REGISTER_NAMES): Correct register number of SAR register
! 	(%cr11).
  
! 2004-04-21  Kaz Kojima  <kkojima@gcc.gnu.org>
  
! 	Backport from mainline:
  
! 	2004-04-05  Kaz Kojima  <kkojima@gcc.gnu.org>
! 	* config/sh/sh.c (prepare_move_operands): Use emit_call_insn
! 	when the TLS address is generated by a function call.
! 	* config/sh/sh.md (tls_global_dynamic): Use a call expression.
! 	(tls_local_dynamic): Likewise.
  
! 2004-04-21  H.J. Lu  <hongjiu.lu@intel.com>
  
! 	PR target/14813
! 	Backport from mainline:
  
! 	* config/ia64/crtend.asm: Move pointer to __do_global_ctors_aux
! 	in .init_array section to ...
! 	* config/ia64/crtbegin.asm: Here.
  
! 	* config/ia64/crtend.asm: Mark __do_global_ctors_aux global
! 	and hidden if HAVE_INITFINI_ARRAY is defined.
  
! 2004-04-21  Richard Henderson  <rth@redhat.com>
  
! 	PR bootstrap/14671
! 	* alias.c (alias_invariant, alias_invariant_size): Mark GTY.
! 	(reg_known_value, reg_known_value_size): Likewise; make static.
! 	(reg_known_equiv_p): Make static.
! 	(clear_reg_alias_info): Update for new indexing.
! 	(get_reg_known_value, set_reg_known_value): New.
! 	(get_reg_known_equiv_p, set_reg_known_equiv_p): New.
! 	(canon_rtx): Use them.
! 	(init_alias_analysis): Likewise.  Allocate reg_known_value with gc.
! 	Don't play queer offsetting games with reg_known_value and
! 	reg_known_equiv_p.
! 	(end_alias_analysis): Don't free reg_known_value.
! 	* rtl.h (get_reg_known_value, get_reg_known_equiv_p): Declare.
! 	* sched-deps.c (reg_known_equiv_p, reg_known_value): Remove.
! 	(deps_may_trap_p, sched_analyze_1, sched_analyze_2): Use the new
! 	functions instead.
  
! 2004-04-21  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
  
! 	* pa64-hpux.h (LIB_SPEC): Fix library specification used with GNU ld.
  
! 2004-04-21  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
  
! 	* doc/install.texi (Specific, mips-sgi-irix5): Fix IRIX 5.3 IDO
! 	download URL.
  
! 2004-04-21  H.J. Lu  <hongjiu.lu@intel.com>
  
! 	PR target/14857
! 	Backport from mainline:
  
! 	* config/ia64/ia64.c (ia64_encode_section_info): Don't prod
! 	global register variables.
  
! 2004-04-21  H.J. Lu  <hongjiu.lu@intel.com>
  
! 	* PR target/14723
! 	Backport from mainline:
! 	2004-02-14  Jan Hubicka  <jh@suse.cz>
  
! 	* config.gcc: Add support for nocona/prescott/pentium-m/pentium3m
! 	/pentium4m.
! 	* i386.c (override_options): Add support for new CPUs.
! 	* i386.h (TARGET_CPU_DEFAULT_NAMES): New names.
! 	(TARGET_CPU_DEFAULT_pentium_m, TARGET_CPU_DEFAULT_pentium4e): New
! 	constants.
! 	* invoke.texi: Extend documentation of -mtune/-march for new CPUs.
  
! 2004-04-20  Mark Mitchell  <mark@codesourcery.com>
  
! 	* version.c (version_string): Mark as prerelease.
! 	* doc/include/gcc-common.texi: Bump version number.
  
! 2004-04-18  Release Manager
  
! 	* GCC 3.4.0 released.
  
! 2004-04-18  Alan Modra  <amodra@bigpond.net.au>
  
! 	PR bootstrap/14992
! 	* configure.ac: Define HAVE_LD_AS_NEEDED only for linux.
! 	* configure: Regenerate.
! 	* gcc.c (init_gcc_specs): Revert earlier change.
  
! 2004-04-18  Mark Mitchell  <mark@codesourcery.com>
  
! 	PR other/14918
! 	* doc/invoke.texi (-fprofile-generate): Document requirement to
! 	use -fprofile-generate when linking.
  
! 	PR bootstrap/14992
! 	* gcc.c (init_gcc_specs): Only honor HAVE_LD_AS_NEEDED on
! 	GNU/Linux.
  
! 	* doc/extend.texi (Strong Using): Warn users against using this
! 	feature.
  
! 2004-04-17  Richard Sandiford  <rsandifo@redhat.com>
  
! 	* configure.ac (gcc_cv_ld_as_needed): Use AC_CACHE_CHECK.
! 	* configure: Regenerate.
  
! 2004-04-17  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
  
! 	* config.gcc (i[34567]86-*-solaris2*): Default to DWARF-2
! 	debugging on Solaris 7 and up.
  
! 2004-04-16  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
  
! 	* doc/install.texi (Specific, mips-sgi-irix5): Reflect working
! 	IRIX 5 port.
! 	Remove -save-temps workaround, handled automatically.
! 	Require GNU binutils 2.15 for debugging.
! 	Remove SGI make warnings since GNU make is now required.
! 	(Specific, mips-sgi-irix6): Some markup fixes.
! 	Describe MIPSpro C problems and workarounds.
! 	Mention working O32 ABI support.
! 	Recommend GNU as 2.15 for O32 with debugging.
! 	Remove description of fixed structure pass/return bug.
  
! 2004-04-16  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
  
! 	* aclocal.m4 (gcc_AC_PROG_GNAT): Check if ${CC} produces object
! 	file for Ada compilation.
! 	Fix gcc_cv_cc_supports_ada spelling.
! 	* configure: Regenerate.
  
! 2004-04-14  Zack Weinberg  <zack@codesourcery.com>
  
! 	PR 14936
! 	Backport from mainline:
! 	2004-03-12  Matt Austern  <austern@apple.com>
  
! 	* varasm.c (make_decl_one_only): Don't use DECL_COMMON if
! 	we're compiling for a SUPPORTS_ONE_ONLY target.
  
! 2004-04-09  Zack Weinberg  <zack@codesourcery.com>
  
! 	* config/ia64/hpux.h (MEMBER_TYPE_FORCES_BLK): Look only at
! 	mode argument.
! 	* config/ia64/ia64.c (ia64_hpux_file_end): Check
! 	TREE_SYMBOL_REFERENCED on DECL_ASSEMBLER_NAME, not DECL_NAME.
  
! 2004-04-08  Mark Mitchell  <mark@codesourcery.com>
  
! 	* doc/invoke.texi (Precompiled Headers): Warn about known
! 	problems.
  
! 2004-04-08  Joel Sherrill <joel@oarcorp.com>
  
! 	PR ada/14538
! 	* ada/5rosinte.adb: Remove fake mprotect() body.
! 	* ada/5rosinte.ads: Add SA_SIGINFO.  Make pthread_key_t a type
! 	which can be set since Finalize_TCB in 7staprop.adb does not
! 	go through the Set_Specific interface.
! 	* ada/5rtpopsp.adb: Rewrite to use new interface.
! 	* ada/init.c: Reorder so the simple single OS conditional __rtems__
! 	is tested before more complex ones which mix UNIX and embedded
! 	systems in the conditional.
  
! 2004-04-08  Joel Sherrill  <joel@oarcorp.com>
  
! 	PR ada/14665
! 	* ada/osint.adb (Find_Program_Name): Rework to properly handle
! 	filenames which end in .exe or have versioning suffixes like VMS.
  
! 2004-04-08  Joseph S. Myers  <jsm@polyomino.org.uk>
  
! 	* fixinc/inclhack.def (rpc_xdr_lvalue_cast_a,
! 	rpc_xdr_lvalue_cast_b): New fixes.
! 	* fixinc/fixincl.x: Regenerate.
! 	* fixinc/tests/base/rpc/xdr.h: Add new tests.
  
! 2004-04-06  Mark Mitchell  <mark@codesourcery.com>
  
! 	* config/darwin.h (LINK_COMMAND_SPEC): Change c++filt3 to c++filt.
  
! 2004-04-05  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
  
! 	* doc/install.texi: Update HP-UX 11 installation procedure.
  
! 2004-04-05  Jakub Jelinek  <jakuB@redhat.com>
! 	  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
  
! 	PR optimization/13424 (hppa), bootstrap/14462, c/14828
! 	* pa.md: Use replace_equiv_address to retain the attributes of the
! 	memory operands used in the split and peephole2 patterns for optimizing
! 	the pre-reload movstrsi, movstrdi, clrstrsi and clrstrdi patterns.
  
! 2004-04-05  Alexandre Oliva  <aoliva@redhat.com>
  
! 	* cppinit.c (cpp_read_main_file): Return file name obtained by
! 	read_original_filename.  Missed in 2004-02-04's check in to 3.4
! 	branch by Per Bothner.
  
! 2004-04-05  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	* config/sparc/sol2-bi.h (PREFERRED_DEBUGGING_TYPE): Set
! 	to DWARF2_DEBUG unconditionally.
! 	(ASM_DEBUG_SPEC): Set the default to --gdwarf2 unconditionally.
  
! 2004-04-04  Mark Mitchell  <mark@codesourcery.com>
  
! 	PR c++/14804
! 	* varasm.c (initializer_constant_valid_p): Allow NOP_EXPRs to
! 	RECORD_TYPEs.
  
! 2004-04-02  Jakub Jelinek  <jakub@redhat.com>
! 	    Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	PR optimization/13424, optimization/12419
! 	* explow.c (maybe_set_unchanging): Revert 2003-04-07 patch.
! 	Set RTX_UNCHANGING_P even for read-only DECL_EXTERNAL decls.
! 	* expr.c (store_constructor): When clearing aggregate because
! 	of an incomplete or mostly zero constructor, do the clearing
! 	without /u flag and then emit a blockage.
  
! 2004-04-01  Alan Modra  <amodra@bigpond.net.au>
  	    Jakub Jelinek  <jakub@redhat.com>
  
! 	* gcc.c (init_gcc_specs): If HAVE_LD_AS_NEEDED, link with
! 	-lgcc --as-needed -lgcc_s --no-as-needed by default.
! 	* configure.ac (HAVE_LD_AS_NEEDED): Check for ld --as-needed.
! 	* configure: Rebuilt.
! 	* config.in: Rebuilt.
! 	* Makefile.in (stage1-start): Copy also libgcc_s*$(SHLIB_EXT).
! 	(stage2-start, stage3-start, stage4-start): Likewise.
! 	(stageprofile-start, stagefeedback-start): Likewise.
! 
! 2004-04-01  Jakub Jelinek  <jakub@redhat.com>
! 
! 	* config/sparc/sparc.h (DITF_CONVERSION_LIBFUNCS): Define to 0.
! 	* config/sparc/linux.h (DITF_CONVERSION_LIBFUNCS): Redefine to 1.
! 	* config/sparc/linux64.h (DITF_CONVERSION_LIBFUNCS): Redefine to 1.
! 	* config/sparc/sol2.h (DITF_CONVERSION_LIBFUNCS): Redefine to 1.
! 	(SOLARIS_CONVERSION_LIBFUNCS): Rename to SUN_CONVERSION_LIBFUNCS.
! 	* config/sparc/sparc.c (sparc_init_libfuncs): Initialize optabs
! 	with _Q_qtoll, _Q_qtoull and _Q_lltoq if DITF_CONVERSION_LIBFUNCS.
! 	* config.gcc (sparc-*-linux*): Revert 2004-03-23 change.
! 	* config/sparc/t-linux64 (TARGET_LIBGCC2_CFLAGS): Likewise.
! 	* config/sparc/t-linux: Removed.
! 
! 2004-04-01  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR c++/14755
! 	* fold-const.c (fold) <EQ_EXPR>: Properly compute newconst in
! 	"bitfld++ == const" to "++bitfld == const + incr" transformations.
! 
! 2004-03-30  Aldy Hernandez  <aldyh@redhat.com>
! 
! 	PR 14219
! 	* c-typeck.c (build_binary_op): Do not allow comparisons of
! 	vectors.
! 
! 2004-03-26  Ian Lance Taylor  <ian@wasabisystems.com>
! 
! 	PR target/14206
! 	* doc/install.texi (Specific): Document that exec-shield-randomize
! 	interferes with precompiled headers.
! 
! 2004-03-26  Richard Henderson  <rth@redhat.com>
! 
! 	PR 11527
! 	* c-typeck.c (pop_init_level): Emit pending init elements earlier
! 	rather than later.
! 
! 2004-03-25  Jakub Jelinek  <jakub@redhat.com>
! 
! 	* config.gcc (sparc-*-linux*): Add sparc/t-linux to tmake_file.
! 	* config/sparc/t-linux64 (TARGET_LIBGCC2_CFLAGS): Set.
! 	* config/sparc/t-linux: New file.
! 
! 2004-03-25  Jan Hubicka  <jh@suse.cz>
! 
! 	PR debug/13974
! 	* cfgrtl.c (try_redirect_by_replacing_jump,
! 	force_nonfallthru_and_redirect, commit_one_edge_insertion,
! 	cfg_layout_merge_blocks):  Do not attach any line number information
! 	to newly inserted instructions.
! 	* emit-rtl.c (emit_insn*_before, emit_insn*_after): Rename to
! 	emit_insn_*_noloc.
! 	(emit_*insn_before, emit_insn*_after): New.
! 	(emit_*insn_before_setloc, emit_*insn_after_setloc): Do not overwrite
! 	existing locators.
! 	* rtl.h (emit_*insn_before_noloc, emit_*insn_after_noloc): Declare.
! 	(emit_*insn_before_sameloc, emit_*insn_after_sameloc): Kill.
! 
! 2004-03-24  Steven Bosscher  <stevenb@suse.de>
  
! 	PR pch/14137
! 	* c-pch.c (struct c_pch_validity): New flags_info field.
! 	(FLAG_UNIT_AT_A_TIME_SET): New definition.
! 	(pch_init): Write out the flags_info field to the PCH.  Set the
! 	FLAG_UNIT_AT_A_TIME_SET bit of the field if flag_unit_at_a_time
! 	is set.
! 	(c_common_valid_pch): Make sure the flag settings used for compiling
! 	the PCH are the same as those used in the current compilation.
  
! 2004-03-24  Alexandre Oliva  <aoliva@redhat.com>
  
! 	PR preprocessor/14438
! 	* cpplib.c (do_pragma): Remove line_change call after pragma
! 	handler.
  
! 2004-03-23  Ian Lance Taylor  <ian@wasabisystems.com>
  
! 	* doc/extend.texi (ARM Built-in Functions): Replace with correct
! 	declarations.
  
! 2004-03-23  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	PR optimization/14669
! 	* fold-const.c (fold): Only unwiden integer comparisons for equality
! 	and inequality operators, or when the signedness doesn't change.
  
! 2004-03-23  Jason Merrill  <jason@redhat.com>
  
! 	PR c++/14587
! 	* config/i386/winnt.c (associated_type): Look for attributes on
! 	the TYPE_MAIN_VARIANT of *this.
  
! 2004-03-21  Mark Mitchell  <mark@codesourcery.com>
  
! 	PR c/13129
! 	* c-decl.c (warn_if_shadowing): Don't warn about a new declaration
! 	of a file-scope entity.
  
! 2004-03-22  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR c/14069
! 	* c-decl.c (finish_struct): Change type of incorrect flexible array
! 	field into error_mark_node.
  
! 2004-03-22  Ralf Corsepius <corsepiu@faw.uni-ulm.de>
  
! 	PR target/14260
! 	* config/rtems.h: Add STD_LIB_SPEC and LIB_SPEC.
  
! 2004-03-22  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	PR middle-end/14470
! 	* expr.c (mark_queue): New function.
! 	(emit_insns_enqueued_after_mark): New function replacing
! 	emit_queue.  Clear the body of emitted queued insns.
! 	(emit_queue): Call emit_insns_enqueued_after_mark.
! 	(store_expr): Mark the increment queue on entry.  Emit
! 	only the incrementations queued when expanding the source.
  
! 2004-03-22  Danny Smith  <dannysmith@users.sourceforge.net>
  
! 	* gcov-io.h: Update copyright year.
  
! 2004-03-22  Danny Smith  <dannysmith@users.sourceforge.net>
  
! 	PR target/14291
! 	* gcov-io.h (gcov_truncate): Define ftruncate as _chsize for
! 	__MINGW32__.
  
! 2004-03-21  Roger Sayle  <roger@eyesopen.com>
  
! 	PR target/13889
! 	* cse.c (fold_rtx): Avoid substituting constants into unary
! 	conversion operations.
  
! 2004-03-21  Joseph S. Myers  <jsm@polyomino.org.uk>
  
! 	* frontends.texi: Add missing line.
  
! 2004-03-21  Zack Weinberg  <zack@codesourcery.com>
! 	    Chris Devers  <cdevers@pobox.com>
! 	    Joseph S. Myers  <jsm@polyomino.org.uk>
  
! 	* doc/frontends.texi: Rewrite.
! 	* doc/gcc.texi: Update last modification date.
  
! 2004-03-20  Ian Lance Taylor  <ian@wasabisystems.com>
  
! 	PR c/12373
! 	* c-typeck.c (tagged_types_tu_compatible_p): Don't use
! 	DECL_ORIGINAL_TYPE if there isn't one.
  
! 2004-03-20  Joseph S. Myers  <jsm@polyomino.org.uk>
  
! 	PR other/14630
! 	* doc/install.texi: Add info directory category and entry.
  
! 2004-03-20  Joseph S. Myers  <jsm@polyomino.org.uk>
  
! 	PR c/14635
! 	* builtins.def (nan, nanf, nanl, nans, nansf, nansl): Change to
! 	DEF_GCC_BUILTIN.
  
! 2004-03-18  Mark Mitchell  <mark@codesourcery.com>
  
! 	* c-common.c (pointer_int_sum): Do not complain about using
! 	pointers to pointers-to-members.
  
! 	* c-decl.c (grokdeclarator): Do not complain about redeclaring
! 	visible "static" identifiers "extern" in a local scope.
! 	* dwarf2out.c (loc_descriptor_from_tree): Handle pre- and
! 	post-increments/decrements.
  
! 2004-03-17  Jakub Jelinek  <jakub@redhat.com>
  
! 	* config/rs6000/t-linux64 (bispecs): Don't add -mlong-double-128 for
! 	32-bit builds when defaulting to 32-bit.
  
! 2004-03-17  Richard Sandiford  <rsandifo@redhat.com>
  
! 	PR target/14599
! 	* config/mips/mips.md (UNSPEC_GP): New constant.
! 	* config/mips/mips.c (CONST_GP_P): Expect the CONST to contain
! 	an UNSPEC instead of (reg $gp).
! 	(mips16_gp_pseudo_reg): Change accordingly.
! 	(print_operand): Print $gp directly when handling CONST_GP_P.
  
! 2004-03-16  Mark Mitchell  <mark@codesourcery.com>
  
! 	PR c++/14481
! 	* fold-const.c (fold): Set TREE_NO_UNUSED_WARNING on implicitly
! 	generated COMPOUND_EXPRs.
  
! 2004-03-16  Nathanael Nerode  <neroden@gcc.gnu.org>
  
! 	PR bootstrap/12974
! 	* Makefile.in: Pass $(INCLUDES) down to libgcc.mk explicitly.
  
! 2004-03-16  Richard Henderson  <rth@redhat.com>
  
! 	PR middle-end/14535
! 	* except.c (collect_one_action_chain): Create action record for
! 	cleanup outer of exception spec.
  
! 2004-03-16  Ralf Corsepius <corsepiu@faw.uni-ulm.de>
  
! 	PR target/14577
! 	* config.gcc: Switch sh-*-rtems* to ELF.  Add sh-*-rtemscoff.
  
! 2004-03-15  Richard Henderson  <rth@redhat.com>
  
! 	PR target/14547
! 	* target.h (struct gcc_target): Move calls substructure before
! 	booleans.  Add split_complex_arg.
! 	* function.c (assign_parms, split_complex_args): Use it.
! 	* calls.c (expand_call): Likewise.
! 	(split_complex_values): Likewise.  Check for splittable types
! 	before allocating memory.
! 	(split_complex_types): Likewise.
! 	* system.h (SPLIT_COMPLEX_ARGS): Poison.
! 	* expr.h (SPLIT_COMPLEX_ARGS): Remove.
! 	* target-def.h (TARGET_SPLIT_COMPLEX_ARG): New.
! 	* config/alpha/alpha.c (alpha_split_complex_arg): New.
! 	(TARGET_SPLIT_COMPLEX_ARG): New.
! 	* config/alpha/alpha.h (SPLIT_COMPLEX_ARGS): Remove.
! 	* config/rs6000/rs6000.c (TARGET_SPLIT_COMPLEX_ARG): New.
! 	(rs6000_override_options): Zap it for non-AIX.
! 	(rs6000_function_value): Use targetm.calls.split_complex_arg.
! 	* config/rs6000/rs6000.h (SPLIT_COMPLEX_ARGS): Remove.
! 	* config/xtensa/xtensa.c (TARGET_SPLIT_COMPLEX_ARG): New.
! 	* config/xtensa/xtensa.h (SPLIT_COMPLEX_ARGS): Remove.
! 	* doc/tm.texi (TARGET_SPLIT_COMPLEX_ARG): Modify from old
! 	SPLIT_COMPLEX_ARGS entry.
  
! 2004-03-15  Eric Botcazou  <ebotcazou@act-europe.fr>
  
! 	* config/sparc/sparc.h: Rework comments about the code model
! 	in 64-bit environment and the mode 'Pmode'.
! 	* doc/invoke.texi (SPARC options): Rework description of the
! 	different code models supported in 64-bit environment.
  
! 2004-03-14  Joseph S. Myers  <jsm@polyomino.org.uk>
  
! 	* doc/contrib.texi, doc/extend.texi, doc/gcov.texi,
! 	doc/install.texi, doc/invoke.texi, doc/makefile.texi,
! 	doc/sourcebuild.texi, doc/tm.texi, doc/trouble.texi: Capitalize
! 	"gcc", "g++" and "g77" or mark up with appropriate markup.  Adjust
! 	wording and grammar.
  
! 2004-03-13  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	PR c/14114
! 	* c-decl.c (merge_decls): Do not copy the C_DECL_INVISIBLE flag
! 	from the new decl to the old decl.
! 	(pushdecl): Use lookup_name to search for a previous decl with the
! 	same identifier.
  
! 2004-03-13  Dara Hazeghi  <dhazeghi@yahoo.com>
  
! 	* doc/install.texi: Note status of -fnew-ra.
  
! 2004-03-13  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	PR middle-end/14470
! 	* expr.c (store_expr): Call emit_queue before generating the move
! 	from the temporary to the original target.  Protect the temporary
! 	from emit_queue.
  
! 2004-03-13  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/14533
! 	* config/s390/s390.c (legitimize_pic_address): Don't abort on UNSPEC
! 	other than UNSPEC_GOTOFF.
  
! 2004-03-13  Dean Ferreyra <dferreyra@igc.org>
  
! 	PR target/14047
! 	* config/avr/avr.c (avr_progmem_p): Add "attributes" parameter.
! 	(avr_insert_attributes): Pass "attributes" to avr_progmem_p.
! 	* config/avr/avr-protos.h (avr_progmem_p): Change prototype.
  
! 2004-03-12  David Edelsohn  <edelsohn@gnu.org>
  
! 	* doc/install.texi (*-ibm-aix*): Document assembler and achiver
! 	fixes required by libstdc++ and update installation instructions
! 	for libstdc++.a.  Document use of Bash to speed up configuration.
  
! 2004-03-12  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	* doc/tm.texi (registers) <Values in Registers>: Add
! 	entry for REGMODE_NATURAL_SIZE.
  
! 2004-03-11  Richard Henderson  <rth@redhat.com>
  
! 	PR target/14539
! 	* config/alpha/alpha.h (STACK_BOUNDARY): Set to 128.
  
! 2004-03-12  Alan Modra  <amodra@bigpond.net.au>
  
! 	* real.c (encode_ibm_extended): Do round low word.
  
! 2004-03-11  Richard Henderson  <rth@redhat.com>
  
! 	PR middle-end/14477
! 	* except.c (remove_unreachable_regions): Look thru CALL_PLACEHOLDER.
  
! 2004-03-11  Richard Sandiford  <rsandifo@redhat.com>
  
! 	PR target/14496
! 	* config/mips/mips.h (UNITS_PER_FPVALUE): Fix value for
! 	TARGET_SINGLE_FLOAT.
  
! 2004-03-11  Kelley Cook  <kcook@gcc.gnu.org>
  
! 	PR other/14536
! 	* configure: Regenerated with autoconf 2.57.
! 	* config.in: Regenerated with autoheader 2.57.
  
! 2004-03-11  Alan Modra  <amodra@bigpond.net.au>
  
! 	* config/rs6000/linux64.h (MD_FALLBACK_FRAME_STATE_FOR): Don't
! 	bump retaddr here.
  
! 2004-03-11  Alan Modra  <amodra@bigpond.net.au>
  
! 	* config/rs6000/t-linux64 (LIB2FUNCS_EXTRA): Add darwin-ldouble.c.
! 	(SHLIB_MAPFILES): Add libgcc-ppc64.ver.
! 	(SHLIB_MKMAP_OPTS): Delete.
! 	(TARGET_LIBGCC2_CFLAGS): Add -specs.
! 	(bispecs): Add rule.
! 	* config/rs6000/libgcc-ppc64.ver: New file.
! 	* config/rs6000/ppc64-fp.c (__fixtfdi, __floatditf): New functions.
! 	(__floatdidf, __floatdisf): Optimize multiply.
! 	(__fixunstfdi): New function.
! 	* config/rs6000/rs6000.c (rs6000_complex_function_value): Allow for
! 	real and imag parts larger than one register.
! 	(function_arg): Correct type of reg used when fp arg split partially
! 	to stack.
! 	* config/rs6000/darwin-ldouble.c: Protect with #if !_SOFT_FLOAT
! 	and __MACH__ or __powerpc64__.
  
! 2004-03-10  Richard Henderson  <rth@redhat.com>
  
! 	PR c/14517
! 	* c-decl.c (grokdeclarator): Don't warn for duplicate qualifiers
! 	except for pedantic c90 mode.
  
! 2004-03-10  Andrew Haley  <aph@redhat.com>
  
! 	PR optimization/14381
! 	* function.c (expand_function_end): Emit a blockage insn before
! 	the epilogue when -fnon-call-exceptions is used.
  
! 2004-03-10  Joel Sherrill  <joel@oarcorp.com>
  
! 	PR target/14480
! 	* config.gcc (powerpc*-*-rtems*): Use rs6000/t-rtems.
  
! 2004-03-10  Roman Zippel  <zippel@linux-m68k.org>
  
! 	PR bootstrap/12371
! 	* config/m68k/m68k.h (FIXED_REGISTERS): Add arg pointer.
! 	(CALL_USED_REGISTERS): Likewise.
! 	(REG_CLASS_CONTENTS): Likewise.
! 	(REG_ALLOC_ORDER): New.
! 	(REGNO_REG_CLASS): Use regno_reg_class.
! 	* config/m68k/m68k.c: Add regno_reg_class array.
  
! 2004-03-10  Alan Modra  <amodra@bigpond.net.au>
! 	    Hartmut Penner  <hpenner@de.ibm.com>
  
! 	* config/rs6000/rs6000.c (invalid_gpr_mem): New function.
! 	(base_reg_operand): New function.
! 	(legitimate_offset_address_p): Don't test modes in an attempt to
! 	distinguish gpr vs fpr mem loads/stores.  Don't prohibit offsets
! 	invalid for 64-bit gpr loads/stores here.
! 	(secondary_reload_class): Add "inp" parameter.	Generate a reload
! 	for 64-bit gpr loads/stores.
! 	* config/rs6000/rs6000.h (SECONDARY_RELOAD_CLASS): Delete.
! 	(SECONDARY_INPUT_RELOAD_CLASS, SECONDARY_OUTPUT_RELOAD_CLASS): Define.
! 	(PREDICATE_CODES): Add invalid_gpr_mem and base_reg_operand.
! 	(DISPARAGE_RELOAD_CLASS): Define.
! 	* config/rs6000/rs6000-protos.h (secondary_reload_class): Update.
! 	* config/rs6000/rs6000.md (movdf_hardfloat64): Correct attrs.
! 	Add m->b alternative and split.
! 	(movdi_internal64): Replace r->m and m->r with r->Y and Y->r.
! 	Add m->b alternative and split.
! 	* reload.c (find_reloads): Invoke DISPARAGE_RELOAD_CLASS.
  
! 2004-03-10  Hans-Peter Nilsson  <hp@axis.com>
  
! 	PR other/14474
! 	* doc/md.texi (Pattern Ordering, Dependent Patterns)
! 	(Jump Patterns, Looping Patterns): Wrap in separate "@ifset
! 	INTERNALS".
  
! 2004-03-09  Zack Weinberg  <zack@codesourcery.com>
  
! 	* config/ia64/hpux.h (MULTILIB_DEFAULTS): Define.
! 	(LIBGCC_SPEC): Update to match.
  
! 2004-03-09  Ralf Corsepius <corsepiu@faw.uni-ulm.de>
  
! 	* config/h8300/t-rtems (h8300-*-rtems*): New.
! 	* config.gcc: Use config/h8300/t-rtems.
  
! 2004-03-09  Roger Sayle  <roger@eyesopen.com>
  
! 	PR middle-end/14289
! 	* c-typeck.c (c_mark_addressable): A register variable should
! 	be considered global if its not automatic, i.e. TREE_PUBLIC,
! 	TREE_STATIC or DECL_EXTERNAL.
! 	* function.c (put_var_into_stack): Call abort when placing a
! 	hard register into the stack, if x_parm_reg_stack_loc is NULL.
  
! 2004-03-08  David Edelsohn  <edelsohn@gnu.org>
  
! 	* collect2.c (main): Only export initfunc and finifunc if
! 	LD_INIT_SWITCH not defined.
! 	(scan_prog_file): Only export constructors and destructors if
! 	LD_INIT_SWITCH not defined.  Only export symbols not found in
! 	shared objects.
  
! 2004-03-09  Alan Modra  <amodra@bigpond.net.au>
  
! 	* doc/tm.texi (INIT_CUMULATIVE_ARGS): Update doco.
! 	* calls.c (expand_call): Pass n_named_args to INIT_CUMULATIVE_ARGS.
! 	(emit_library_call_value_1): Likewise pass nargs.
! 	* expr.c (block_move_libcall_safe_for_call_parm): Pass 3 here.
! 	* function.c (assign_parms): Pass -1 to INIT_CUMULATIVE_ARGS.
! 	* config/rs6000/rs6000.c (init_cumulative_args): Use n_named_args
! 	parameter instead of scanning TYPE_ARGS_TYPES to count args.
! 	* config/rs6000/rs6000-protos.h (init_cumulative_args): Update
! 	prototype.
! 	* config/rs6000/rs6000.h (INIT_CUMULATIVE_ARGS): Pass extra arg.
! 	(INIT_CUMULATIVE_INCOMING_ARGS): Set extra arg to 1000.
! 	(INIT_CUMULATIVE_LIBCALL_ARGS): Set extra arg to 0.
! 	* config/sh/sh.c (sh_output_mi_thunk): Pass 1 as n_named_args to
! 	INIT_CUMULATIVE_ARGS.
! 	* config/alpha/alpha.h (INIT_CUMULATIVE_ARGS): Update.
! 	* config/alpha/unicosmk.h, config/alpha/vms.h, config/arc/arc.h,
! 	config/arm/arm.h, config/avr/avr.h, config/c4x/c4x.h,
! 	config/cris/cris.h, config/d30v/d30v.h, config/dsp16xx/dsp16xx.h,
! 	config/fr30/fr30.h, config/frv/frv.h, config/h8300/h8300.h,
! 	config/i370/i370.h, config/i386/i386.h, config/i860/i860.h,
! 	config/i960/i960.h, config/ia64/ia64.h, config/ip2k/ip2k.h,
! 	config/iq2000/iq2000.c, config/iq2000/iq2000.h, config/m32r/m32r.h,
! 	config/m68hc11/m68hc11.h, config/m68k/m68k.h, config/mcore/mcore.h,
! 	config/mips/mips.h, config/mmix/mmix.h, config/mn10300/mn10300.h,
! 	config/ns32k/ns32k.h, config/pa/pa.h, config/pdp11/pdp11.h,
! 	config/s390/s390.h, config/sh/sh.h, config/sparc/sparc.h,
! 	config/stormy16/stormy16.h, config/v850/v850.h, config/vax/vax.h,
! 	config/xtensa/xtensa.h: Likewise.
  
! 2004-03-09  Alan Modra  <amodra@bigpond.net.au>
  
! 	PR debug/11983
! 	* dwarf2out.c (enum dw_val_class): Rename dw_val_class_float to
! 	dw_val_class_vec.  Replace use throughout file.
! 	(dw_float_const): Delete.
! 	(dw_vec_const): New.
! 	(dw_val_struct_union): Rename val_float to val_vec.  Replace use
! 	throughout file.
! 	(add_AT_vec): Rename from add_AT_float.  Add elt_size param.
! 	(same_dw_val_p): Adjust vec comparison.  Use memcmp.
! 	(size_of_die): Adjust dw_val_class_vec sizing.
! 	(output_die): Output dw_val_class_vec.
! 	(insert_int, extract_int, insert_float): New functions.
! 	(add_const_value_attribute): Use insert_float for CONST_DOUBLE.
! 	Handle CONST_VECTOR.
! 	(add_location_or_const_value_attribute): Handle CONST_VECTOR.
  
! 2004-03-08  Joel Sherrill  <joel@oarcorp.com>
  
! 	PR target/14480
! 	* config/rs6000/t-rtems: Add missing file on branch.
  
! 2004-03-08  Roger Sayle  <roger@eyesopen.com>
  
! 	* fold-const.c (fold) <EQ_EXPR>: Rewrite optimization to transform
! 	"foo++ == const" into "++foo == const+incr".
  
! 2004-03-08  Ulrich Weigand  <uweigand@de.ibm.com>
  
! 	* config/s390/s390.md ("*extendqidi2_short_displ"): Add CC clobber.
! 	("*extendqisi2_short_displ"): Likewise.
  
! 2004-03-08  Eric Botcazou  <ebotcazou@act-europe.fr>
  
! 	* expr.c (highest_pow2_factor_for_type): Rename into
! 	highest_pow2_factor_for_target.  Use DECL_ALIGN instead of
! 	TYPE_ALIGN when the target is a COMPONENT_REF.
! 	(expand_assignment): Ajust call to highest_pow2_factor_for_type.
  
! 2004-03-08  Alan Modra  <amodra@bigpond.net.au>
  
! 	* config/rs6000/rs6000.c: Formatting fix.
! 	(legitimate_offset_address_p): Correct offset range check.
  
! 	* config/rs6000/rs6000.c (rs6000_override_options): Don't override
! 	-msoft-float by -mcpu.  Consolidate similar code for MASK_MULTIPLE
! 	and MASK_STRING.
  
! 2004-03-07  Aldy Hernandez  <aldyh@redhat.com>
  
! 	* config/rs6000/rs6000.md (ashrdi3): Do not call ashrdi3_no_power
! 	for little endian.
! 	("ashrdi3_no_power"): Disable for little endian.
! 	(ashrdi3): Same.
  
! 2004-03-07  Aldy Hernandez  <aldyh@redhat.com>
  
! 	* config/rs6000/rs6000.c (rs6000_parse_abi_options): SPE and
! 	AltiVec abi cannot co-exist.
  
! 	* config/rs6000/eabispe.h (SUBSUBTARGET_OVERRIDE_OPTIONS): Same.
  
! 2004-03-07  Hans-Peter Nilsson  <hp@axis.com>
  
! 	PR target/14471
! 	* configure.ac (Target-specific assembler checks) <cris-*-*>: New
! 	case, checking for -no-mul-bug-abort option.
! 	* configure, config.in: Regenerate.
! 	* doc/invoke.texi (CRIS Options): Document -mmul-bug-workaround
! 	and -mno-mul-bug-workaround.
! 	* config/cris/cris.md ("smulsi3_highpart", "umulsi3_highpart")
! 	("mulsidi3", "umulsidi3"): Prefix output template with "%!".
! 	("umulhisi3", "umulqihi3", "mulsi3", "mulqihi3", "mulhisi3"):
! 	Ditto.  Make attribute "slottable" dependent on TARGET_MUL_BUG.
! 	* config/cris/mulsi3.asm (__Mul) [__CRIS_arch_version >= 10]: Make
! 	sure mulu.d is not last on cache-line.
! 	* config/cris/cris.h (ASM_SPEC): Translate -mno-mul-bug-workaround
! 	into -no-mul-bug-abort depending on HAVE_AS_MUL_BUG_ABORT_OPTION.
! 	(TARGET_MASK_MUL_BUG, TARGET_MUL_BUG): New macros.
! 	(TARGET_SWITCHES): New options -mmul-bug-workaround and
! 	-mno-mul-bug-workaround.
! 	(TARGET_DEFAULT): Include TARGET_MASK_MUL_BUG.
! 	(PRINT_OPERAND_PUNCT_VALID_P): Include '!'.
! 	* config/cris/cris.c (cris_operand_extend_operator): Clarify
! 	relation to MULT in head comment.
! 	(cris_op_str): Abort for MULT.
! 	(cris_print_operand) <case '!'>: New case.
  
! 2004-03-07  Stephane Carrez  <stcarrez@nerim.fr>
  
! 	* config/m68hc11/m68hc11.md ("*lshrsi3_const"): Disable for 68HC12.
! 	("*lshrsi3"): Also accept an immediate for 68HC12.
! 	("*ashrsi3_const"): Likewise.
! 	("*ashrsi3"): Likewise.
! 	("*ashlsi3_const"): Likewise.
! 	("*ashlsi3"): Likewise.
! 	("cmphi_1_hc12"): Compare two hard register by pushing them and
! 	comparing with a pop; don't use a split for that.
! 	("cmphi split"): Disable compare split for 68HC12.
  
! 	* config/m68hc11/m68hc11.c (m68hc11_notice_update_cc): Invalidate
! 	the status operands if they have side effects.
  
! 2004-03-07  Richard Sandiford  <rsandifo@redhat.com>
  
! 	* config/mips/mips.c (mips_in_small_data_p): Return false if
! 	TARGET_ABICALLS.
  
! 2004-03-06  Stephane Carrez  <stcarrez@nerim.fr>
  
! 	* config/m68hc11/m68hc11.c (m68hc11_gen_movhi): Use 2,-sp to push
! 	the stack register.
! 	(expand_prologue): Don't make an interrupt or a trap handler a far
! 	symbol.
! 	(m68hc11_initial_elimination_offset): Likewise.
  
! 2004-03-06  Richard Henderson  <rth@redhat.com>
  
! 	* config/alpha/alpha.c (alpha_in_small_data_p): False for functions.
  
! 2004-03-06  Richard Henderson  <rth@redhat.com>
  
! 	* config/alpha/alpha.h (MASK_LONG_DOUBLE_128): New.
! 	(TARGET_LONG_DOUBLE_128): New.
! 	(TARGET_SWITCHES): Add long-double-{128,64}.
! 	(TARGET_HAS_XFLOATING_LIBS): Default to TARGET_LONG_DOUBLE_128.
! 	(LONG_DOUBLE_TYPE_SIZE): Honor TARGET_LONG_DOUBLE_128.
! 	(LIBGCC2_LONG_DOUBLE_TYPE_SIZE): New.
! 	(WIDEST_HARDWARE_FP_SIZE): New.
! 	(TARGET_CPU_CPP_BUILTINS): Define __LONG_DOUBLE_128__.
! 	* config/alpha/alpha.c (override_options): Clear MASK_LONG_DOUBLE_128
! 	if TARGET_VAX_FLOAT.
! 	* config/alpha/osf5.h (LONG_DOUBLE_TYPE_SIZE): Remove.
! 	(TARGET_DEFAULT): Set MASK_LONG_DOUBLE_128.
  
! 2004-03-06  Ulrich Weigand  <uweigand@de.ibm.com>
  
! 	* config/s390/s390.md ("load_multiple", "*load_multiple_di",
! 	"*load_multiple_si"): Allow only if reload_completed.
! 	("store_multiple", "*store_multiple_di", "*store_multiple_si"):
! 	Likewise.
  
! 2004-03-06  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	PR c/14465
! 	PR c/14114
! 	* c-decl (pushdecl): Revert previous change.
  
! 2004-03-06  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
  
! 	* pa.md (icacheflush): Reorder operands to make match_scratch operand
! 	last.
! 	* pa.h (INITIALIZE_TRAMPOLINE): Remove unnecessary scratch argument
! 	from calls to gen_icacheflush.
  
! 2004-03-06  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	PR target/14343
! 	* config/i386/i386.md (movv2di_internal): Conditionalize on
! 	TARGET_SSE, not TARGET_SSE2.
  
! 2004-03-06  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	PR c/14114
! 	* c-decl (pushdecl): Do not record a previous, not-in-scope,
! 	external decl for restoration.
  
! 2004-03-05  Waldek Hebisch  <hebisch@math.uni.wroc.pl>
  
! 	PR middle-end/14203
! 	* function.c (uninitialized_vars_warning): Use DECL_RTL_SET_P
! 	instead of testing whether DECL_RTL is not NULL.
  
! 2004-03-05  Andreas Krebbel  <krebbel1@de.ibm.com>
  
! 	* rtl.h (mem_expr_equal_p): Function prototype added.
! 	* cfgcleanup.c (merge_memattrs): New function.
! 	(flow_find_cross_jump): Call merge_memattrs for matching insns.
! 	* emit-rtl.c (mem_expr_equal_p): New function.
  
! 2004-03-05  Bob Wilson  <bob.wilson@acm.org>
  
! 	* config/xtensa/xtensa.c (function_arg): Handle 16-byte aligned args.
! 	(xtensa_va_start): Initialize __va_stk to ($arg_ptr - 32).  Adjust
! 	__va_ndx by 2 words when referencing an argument on the stack.
! 	(xtensa_va_arg): Handle 16-byte aligned args.  Adjust __va_ndx by 2
! 	words when an arg on the stack is first seen.
  
! 2004-03-05  Nathan Sidwell  <nathan@codesourcery.com>
  
! 	PR driver/13577
! 	* gcc.c (cc1_options): Robustify -auxbase-strip from multiple -o
! 	options.
  
! 2004-03-04  Bob Wilson  <bob.wilson@acm.org>
  
! 	* config/xtensa/xtensa.c (xtensa_return_in_msb): New function.
! 	(TARGET_RETURN_IN_MSB): Define to xtensa_return_in_msb.
  
! 2004-03-04  Alan Modra  <amodra@bigpond.net.au>
  
! 	* real.c (encode_ibm_extended): Don't bother rounding low double.
! 	* c-cppbuiltin.c (builtin_define_float_constants): Tweak MAX
! 	when fmt->pnan < fmt->p.
  
! 2004-03-04  Alan Modra  <amodra@bigpond.net.au>
  
! 	PR target/14406
! 	* config/rs6000/rs6000.md (abstf2, abstf2+1): Delete define_insn.
! 	(abstf2, abstf2_internal): New define_expand.
  
! 2004-03-04  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	PR optimization/14235
! 	* expr.c (convert_move): Copy the source to a new pseudo
! 	when converting from a sub-word source to a larger-than-word
! 	register which conflicts with the source.
  
! 2004-03-03  Zack Weinberg  <zack@codesourcery.com>
  
! 	PR 13728
! 	* c-decl.c (diagnose_mismatched_decls): Issue an error for two
! 	parameters with the same name, unless one is a forward decl.
! 	Do not issue a redundant-redeclaration warning for forward
! 	decls of parameters.
  
! 2004-03-03  Stephane Carrez  <stcarrez@nerim.fr>
  
! 	* config/m68hc11/m68hc11.c (m68hc11_override_options): Disable -fweb
! 	because it breaks the 32-bit shift patterns that rely on a match_dup.
! 	(print_operand): Don't print a * before the base address.
  
! 2003-03-03  Richard Henderson  <rth@redhat.com>
  
! 	PR opt/13862
! 	* cselib.c (cselib_record_sets): Don't record multiple sets in
! 	asm insns.
  
! 2004-03-03  Nicolas Pitre <nico@cam.org>
  
! 	* config/arm/ieee754-df.S (muldf3, divdf3): Fix denormalization of
! 	small negative values.
  
! 2004-03-02  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* config/h8300/lib1funcs.asm (___fixunssfsi): Change the
! 	threshold to 0x4f.
  
! 	Revert:
! 	2004-02-27  Kazu Hirata  <kazu@cs.umass.edu>
! 	* config/h8300/fixunssfsi.c (__fixunssfsi): Enable on H8/300
! 	as well.
! 	* config/h8300/lib1funcs.asm (___fixunssfsi): Remove.
! 	* config/h8300/t-h8300 (LIB1ASMFUNCS): Remove _fixunssfsi_asm.
  
! 2004-03-02  Richard Henderson  <rth@redhat.com>
  
! 	PR middle-end/11767
! 	* coverage.c (coverage_counter_ref): Set MEM_NOTRAP_P.
! 	* optabs.c (prepare_cmp_insn): Force trapping memories to registers
! 	before the compare, if flag_non_call_exceptions.
  
! 2004-03-02  Richard Henderson  <rth@redhat.com>
  
! 	PR middle-end/14327
! 	* stmt.c (expand_computed_goto): Do do_pending_stack_adjust before
! 	emitting the label, not after.
  
! 2004-03-02  David O'Brien  <obrien@FreeBSD.org>
  
! 	* config/freebsd-spec.h (FBSD_DYNAMIC_LINKER): Add.
! 	* config/alpha/freebsd.h (SUBTARGET_EXTRA_SPECS): Define
! 	%(fbsd_dynamic_linker),
! 	(LINK_SPEC): Use %(fbsd_dynamic_linker), and sync style with
! 	config/i386/freebsd.h
! 	* config/arm/freebsd.h: Ditto.
! 	* config/i386/freebsd.h: Ditto.
! 	* config/i386/freebsd64.h: Ditto.
! 	* config/ia64/freebsd.h: Ditto.
! 	* config/rs6000/sysv4.h: Ditto.
! 	* config/sparc/freebsd.h: Ditto.
  
! 2004-03-02  Stephane Carrez  <stcarrez@nerim.fr>
  
! 	* config/m68hc11/m68hc11.c (m68hc11_addr_mode): New variable.
! 	(m68hc11_mov_addr_mode): Likewise.
! 	(m68hc11_override_options): Initialize them based on target.
! 	(register_indirect_p): Allow a MEM for indirect addressing modes and
! 	use flags to control what is allowed.
! 	(m68hc11_small_indexed_indirect_p): Use m68hc11_mov_addr_mode for
! 	supported addressing modes.
! 	(m68hc11_register_indirect_p): Use m68hc11_addr_mode.
! 	(go_if_legitimate_address_internal): Likewise.
! 	(m68hc11_indirect_p): Likewise and check the mode.
! 	(print_operand): Allow a (MEM (MEM)) and generate indirect addressing.
  
! 2004-03-02  Stephane Carrez  <stcarrez@nerim.fr>
  
! 	* config/m68hc11/m68hc11.md (move peephole2): New peepholes to optimize
! 	sequences of moves.
! 	(add peepholes): New peepholes to optimize sequences adding small
! 	constants.
! 	(bset peepholes): New peepholes to transform an OR in a bset form
! 	(bclr peepholes): Likewise for bclr form.
! 	(cmp peepholes): New peepholes to avoid register copies when comparing.
  
! 2004-03-02  Stephane Carrez  <stcarrez@nerim.fr>
  
! 	* config/m68hc11/m68hc11.md ("*pushdi_internal"): New insn and split
! 	to separate push from moves.
! 	("*pushdf_internal"): Likewise.
! 	("*pushsf_internal"): Likewise.
! 	("*pushsi_internal"): Likewise.
! 	("movdi_internal"): Use define_insn_and_split; non push operand.
! 	("movdf_internal"): Likewise.
! 	("movsf_internal"): Likewise.
! 	("movsi_internal"): Likewise.
! 	("*movhi_68hc12", "*addhi3_68hc12"): Fix and tune constraints
! 	("*addhi3", "*subhi3", "*andhi3_mem", "*iorhi3_mem"): Likewise.
! 	("*ashlsi3_const1", "*lshrsi3_const1"): Likewise.
  
! 2004-03-02  Stephane Carrez  <stcarrez@nerim.fr>
  
! 	* config/m68hc11/m68hc11.md ("tstqi_z_used"): Use define_insn_and_split.
! 	("cmphi_z_used", "cmpqi_z_used"): Likewise.
! 	("movstrictsi", "movstricthi", "movstrictqi"): Likewise.
! 	("anddi3", "andsi3", "iordi3", "iorsi3"): Likewise.
! 	("xordi3", "xorsi3", "*logicalsi3_zexthi"): Likewise.
! 	("*logicalsi3_zextqi", "*logicalhi3_zexthi_ashift8"): Likewise.
! 	("logicalhi3_zexthi", "*logicalsi3_silshr16"): Likewise.
! 	("*logicalsi3_silshl16", "*logicalsi3_silshl16_zext"): Likewise.
! 	("*ashldi3_const32", "*ashldi3_const1", "addsi_silshr16"): Likewise.
! 	("addsi_andshr16", "*ashlsi3_const16_zexthi"): Likewise.
! 	("*lshrdi3_const32", "*lshrdi_const1"): Likewise.
  
! 2004-03-02  Stephane Carrez  <stcarrez@nerim.fr>
  
! 	* config/m68hc11/m68hc11.md (SOFT_TMP_REGNUM): Define.
! 	(SOFT_XY_REGNUM): Define.
! 	(cmp split): Use the above instead of hard coded numbers.
! 	(8-bit op split): No need to check the mode; allow Q_REG.
! 	(ashift split): Adjust the first operand if it uses the SP and we
! 	are pushing the shifted value.
! 	(plus shift split): Fix when a source is in register D+X.
! 	("doloop_end"): Pass dummy arguments to gen_rtx_NE.
  
! 2004-03-02  Stephane Carrez  <stcarrez@nerim.fr>
  
! 	* config/m68hc11/m68hc11.c (m68hc11_check_z_replacement): Fix when
! 	comparing with Z register.
  
! 2004-03-02  Loren James Rittle  <ljrittle@acm.org>
  
! 	* gcc/doc/install.texi (*-*-freebsd*): Update target information.
  
! 2004-03-01  Mark Mitchell  <mark@codesourcery.com>
  
! 	PR bootstrap/14356
! 	* gcc.c (process_command): Remove const-qualification from argv.
! 	(main): Likewise.
  
! 2004-03-01  Mircea Namolaru  <namolaru@il.ibm.com>
  
! 	* cfgloop.h (get_var_set_from_bct, is_bct_cond): Declaration of
! 	new functions.
! 	* cfgloopanal.c: Include loop.h.
! 	(get_var_set_from_bct): New function.
! 	(is_bct_cond): New function.
! 	(blocks_single_set_registers): Handle branch and count jumps.
! 	(count_loop_iterations): Likewise.
! 	(simple_increment): Likewise
! 	* doloop.c (doloop_condition_get): Export.
! 	* loop-init.c (fixup_loop_exit_succesor): New function.
! 	(loop_optimizer_finalize): Handle loops ending with branch and
! 	count jumps.
! 	* loop-unroll.c: Include toplev.h
! 	(discard_increment): New function.
! 	(expand_bct): New function.
! 	(peel_loop_completely): Handle the removal of branch and count jumps.
! 	(unroll_loop_constant_iterations): Likewise.
! 	(unroll_loop_runtime_iterations): Likewise
! 	* loop.h (doloop_condition_get): Declare.
  
! 2004-02-29  Mark Mitchell  <mark@codesourcery.com>
  
! 	PR debug/14328
! 	* dwarf2out.c (gen_enumeration_type_die): Output all enumeration
! 	constants as signed values.
  
! 2004-02-29  Mark Mitchell  <mark@codesourcery.com>
  
! 	PR middle-end/13448
! 	* c-tree.h (readonly_warning): Rename to ...
! 	(readonly_error): ... this.
! 	* c-typeck.c (build_unary_op): Adjust accordingly.
! 	(readonly_warning): Rename to ...
! 	(readonly_error): ... this and issue errors, not warnings.
! 	(build_modify_expr): Call readonly_error, not readonly_warning.
! 	(c_expand_asm_operands): Likewise.
! 	* tree-inline.c (optimize_inline_calls): Do not inline functions
! 	after errors have occurred.
  
! 2004-02-29  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* doc/cppopts.texi: Fix a typo.
  
! 2004-02-28  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
  
! 	* pa64-hpux.h (LIB_SPEC): Fix linking under HP-UX 11.00 with -p and -pg.
  
! 2004-02-27  Ian Lance Taylor  <ian@wasabisystems.com>
  
! 	PR optimization/7871
! 	* flow.c (mark_set_1): Don't add LOG_LINKS for global registers
! 	from or to call insns.
  
! 2004-02-27  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	PR optimization/7871
! 	* flow.c (propagate_one_insn): Interpret calls as setting global
! 	registers, not merely clobbering them.
  
! 2004-02-27  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* config/h8300/fixunssfsi.c (__fixunssfsi): Enable on H8/300
! 	as well.
! 	* config/h8300/lib1funcs.asm (___fixunssfsi): Remove.
! 	* config/h8300/t-h8300 (LIB1ASMFUNCS): Remove _fixunssfsi_asm.
  
! 2004-02-27  Daniel Jacobowitz  <drow@mvista.com>
  
! 	* config/arm/arm.c (arm_legitimate_address_p): Don't check the mode
! 	size for minipool references.
  
! 2004-02-27  Eric Botcazou  <ebotcazou@act-europe.fr>
! 	    Roger Sayle  <roger@eyesopen.com>
  
! 	* fold-const.c (fold): Revert 2004-02-25 change.  Use the original
! 	operands to build a tree with swapped operands.
! 	* expr.c (expand_expr_real) <MAX_EXPR>: Consistently use the
! 	'unsignedp' predicate to specify the signedness.
  
! 2004-02-26  Aldy Hernandez  <aldyh@redhat.com>
  
! 	* config/rs6000/rs6000.md: Add fixuns_truncsfsi2 and
! 	fix_truncsfsi2.
  
! 	* config/rs6000/spe.md: Delete spe_efsctuiz.
! 	Add spe_fixuns_truncsfsi2.
! 	Add spe_fix_truncsfsi2.
  
! 2004-02-26  Bob Wilson  <bob.wilson@acm.org>
  
! 	* config/xtensa/xtensa.h (TARGET_CPU_CPP_BUILTINS): Define __xtensa__.
  
! 2004-02-25  James E Wilson  <wilson@specifixinc.com>
  
! 	* gcc-simple.c (rtl_zone, tree_zone, garbage_zone, ggc_alloc_typed,
! 	ggc_alloc_zone): New.
! 	(ggc_pch_count_object, gcc_pch_alloc_object, ggc_pch_write_object):
! 	Add bool is_string parameter.
  
! 2004-02-26  Alan Modra  <amodra@bigpond.net.au>
  
! 	* gcse.c (delete_null_pointer_checks_1): Set stop_insn to end, not
! 	beginning of block.  Do not delete CC setter unless HAVE_cc0.
  
! 2004-02-25  Kelley Cook  <kcook@gcc.gnu.org>
  
! 	* doc/contrib.texi: Add an entry for myself.
  
! 2004-02-25  Kelley Cook  <kcook@gcc.gnu.org>
  
! 	* config.gcc: Add comment describing extra_gcc_objs.
! 	i[34567]86-*-cygwin*): Replace host_extra_gcc_objs with extra_gcc_objs.
! 	* configure.ac (extra_gcc_objs): New substitution variable.
! 	(host_extra_gcc_objs): Don't substitute.
  	* configure: Regenerate.
- 	* Makefile.in: Use extra_gcc_objs.
- 
- 2004-02-25  Eric Botcazou  <ebotcazou@act-europe.fr>
- 
- 	* fold-const.c (fold): Treat MAX_EXPR and MIN_EXPR like
- 	comparisons with regard to signedness.
- 
- 2004-02-25  Jakub Jelinek  <jakub@redhat.com>
- 
- 	* gcov-io.c (gcov_open) [GCOV_LOCKED]: Use open + fdopen instead of
- 	fopen.
- 	* libgcov.c: Include sys/stat.h.
- 	* config/rs6000/linux.h (TARGET_HAS_F_SETLKW): Define.
- 	* config/rs6000/linux64.h (TARGET_HAS_F_SETLKW): Define.
- 	* config/sparc/linux.h (TARGET_HAS_F_SETLKW): Define.
- 	* config/sparc/linux64.h (TARGET_HAS_F_SETLKW): Define.
- 
- 2004-02-25  Richard Earnshaw  <rearnsha@arm.com>
- 
- 	* arm.c (arm_legitimate_index_p): For QImode the range of an offset
- 	is -4095...+4095 inclusive.
- 
- 2004-02-25  Eric Botcazou  <ebotcazou@libertysurf.fr>
- 
- 	* doc/install.texi (sparc-sun-solaris2* specific notes): Document
- 	the bootstrap failure with Sun CC 5.4 and 5.5.
- 
- 2004-02-24  Kazu Hirata  <kazu@cs.umass.edu>
- 
- 	* cse.c (cse_change_cc_mode_insns): Stop at any instruction
- 	which modifies NEWREG.
- 	(cse_condition_code_reg): Update the mode of CC_REG in
- 	CC_SRC_INSN on our own.
  
! 2004-02-24  Michael Matz  <matz@suse.de>
! 
! 	* config/i386/i386.c (ix86_comp_type_attributes): Check for
! 	regparm attributes.
! 
! 2004-02-24  Aldy Hernandez  <aldyh@redhat.com>
! 
! 	* config/rs6000/spe.md (spe_fix_truncsfsi2): Delete.
! 	(spe_fixuns_truncsfsi2): Delete.
! 
! 	* config/rs6000/rs6000.md (fix_truncsfsi2): Delete.
! 	(fixuns_truncsfsi2): Delete.
! 
! 2004-02-24  Josef Zlomek  <zlomekj@suse.cz>
! 
! 	PR/14240
! 	* rtlanal.c (replace_label): Fix replacing labels in constant pool.
! 
! 2004-02-24  Bob Wilson  <bob.wilson@acm.org>
! 
! 	* config/xtensa/xtensa-protos.h (xtensa_copy_incoming_a7): Update.
! 	(init_cumulative_args): Likewise.
! 	(a7_overlap_mentioned_p): Delete prototype.
! 	* config/xtensa/xtensa.c (struct machine_function): Replace
! 	incoming_a7_copied field with need_a7_copy and vararg_a7 flags.
! 	Add set_frame_ptr_insn field.
! 	(xtensa_emit_move_sequence): Update call to xtensa_copy_incoming_a7.
! 	(xtensa_copy_incoming_a7): Rewrite to check need_a7_copy flag and check
! 	if the operand is an argument in a7.  If so, copy a7 to a new pseudo
! 	at the function entry and replace the operand with the pseudo.
! 	(init_cumulative_args): Remove unused arguments.  Add new "incoming"
! 	argument and record this flag in CUMULATIVE_ARGS.
! 	(function_arg): Remove result_mode and special-case code to handle
! 	arguments in a7.  Instead, set need_a7_copy flag when there is an
! 	incoming argument in a7.
! 	(xtensa_expand_prologue): Remove code to search for set_frame_ptr insn
! 	and use the value recorded in cfun->machine->set_frame_ptr_insn.
! 	(xtensa_builtin_saveregs): Check for negative gp_left value.  Set
! 	need_a7_copy and vararg_a7 flags.  Use move_block_from_reg instead of
! 	special-case code.
! 	(a7_overlap_mentioned_p): Delete.
! 	* config/xtensa/xtensa.h (CUMULATIVE_ARGS): Add "incoming" flag.
! 	(INIT_CUMULATIVE_ARGS, INIT_CUMULATIVE_INCOMING_ARGS): Remove useless
! 	arguments to init_cumulative_args and pass "incoming" flag instead.
! 	(BLOCK_REG_PADDING): Delete.
! 	* config/xtensa/xtensa.md (movdi, movsf, movdf): Remove unnecessary
! 	checks for reload_in_progress and reload_completed.  Update calls to
! 	xtensa_copy_incoming_a7.
! 	(ashlsi3): Rename existing insn to ashlsi3_internal.  Add expander
! 	to call xtensa_copy_incoming_a7.
! 
! 2004-02-24  Richard Earnshaw  <rearnsha@arm.com>
! 
! 	* invoke.texi (ARM Options): Mark -mapcs-26 and -mno-alignment-traps
! 	as deprecated.  Remove already deprecated synonyms.
! 	* arm.c (arm_override_options): Generate an inform message if the
! 	user tries to invoke the compiler in apcs-26 mode.
! 	* arm.h (TARGET_SWITCHES): Remove help comments from deprecated
! 	switches. Delete deprecated synonyms for -malignment-traps.
! 	(TARGET_DEFAULT): Default to alignment traps.
! 	* arm/coff.h (TARGET_DEFAULT): Default to alignment traps.
! 	* arm/elf.h arm/netbsd.h arm/pe.h arm/semi.h arm/semiaof.h: Likewise.
! 	* arm/unknown-elf.h arm/wince-pe.h: Likewise.
! 
! 2004-02-23  H.J. Lu  <hongjiu.lu@intel.com>
! 
! 	* config/i386/i386.h: Deprecate -mpni/-mno-pni.
! 
! 2004-02-23  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* config/i386/i386.c: Rename pni to sse3.
! 	* config/i386/i386.h: Likewise.
! 	* config/i386/i386.md: Likewise.
! 	* config/i386/pmmintrin.h: Likewise.
! 	* doc/extend.texi: Likewise.
! 	* doc/invoke.texi: Likewise.
! 
! 2004-02-23  Andrew Pinski  <pinskia@physics.uc.edu>
! 
! 	* config/rs6000/linux.h (OS_MISSING_POWERPC64): Define.
! 	* config/rs6000/linux64.h (OS_MISSING_POWERPC64): Define.
! 
! 2004-02-23  Eric Botcazou  <ebotcazou@libertysurf.fr>
! 	    Falk Hueffner  <falk@debian.org>
! 
! 	PR c/14188
! 	* builtins.c (expand_builtin_va_arg): Emit an informative message
! 	if a trap is generated.
! 	* c-typeck.c (build_function_call): Likewise.
! 
! 2004-02-22  Christopher Faylor  <cgf@redhat.com>
! 
! 	* config.gcc (i[34567]86-*-pe|i[34567]86-*-cygwin*): *Really* specify
! 	extra host object file when targetting cygwin rather than generic
! 	object files.
! 
! 2004-02-22  Matthias Klose  <doko@debian.org>
! 
! 	Taken from mainline:
! 
! 	2004-02-12  Geoffrey Keating  <geoffk@apple.com>
! 
! 	* Makefile.in (install-man): Use $(CPP_INSTALL_NAME) and
! 	$(GCOV_INSTALL_NAME) to install manpages.  Remove generic rule
! 	for installing .1 manpages.  Add rules for installing cpp
! 	and gcov manpages under their installed names.
! 
! 2004-02-22  Hans-Peter Nilsson  <hp@axis.com>
! 
! 	PR target/14209
! 	* config/cris/cris.md ("*andsi_movu", "*andhi_movu"): Tweak
! 	constraints to not match postincrement.  Adjust the predicate to
! 	exclude a volatile memory reference.
! 	("*andsi_clear"): Tweak constraints to not match postincrement.
! 	Adjust the predicate to exclude a volatile memory reference.
! 	("*andhi_clear"): Ditto.  Rename from "*andhi_clear_signed".
! 	("*andhi_clear_unsigned"): Remove, non-matching pattern.
! 
! 2004-02-21  Christopher Faylor  <cgf@redhat.com>
! 
! 	* config.gcc (i[34567]86-*-pe|i[34567]86-*-cygwin*): Specify extra host
! 	object file when targetting cygwin.
! 	* config/i386/t-cygwin (EXTRA_GCC_OBJS): Remove definition since it is
! 	overridden by top-level Makefile.
! 
! 2004-02-21  Alan Modra  <amodra@bigpond.net.au>
! 
! 	* combine.c (can_combine_p): Don't ignore SETs marked with
! 	REG_EH_REGION notes.
! 
! 2004-02-21  Jan Hubicka  <jh@suse.cz>
! 
! 	* params.def (max-peeled-insns, max-completely-peeled-insns,
! 	max-once-peeled-insns): Set to 400.
! 
! 2004-02-20  Falk Hueffner  <falk@debian.org>
! 
! 	PR target/14201
! 	* config/alpha/alpha.md (*fix_truncsfsi_ieee): Fix typoed operand
! 	numbers.
! 
! 2004-02-20  Mohan Embar  <gnustuff@thisiscool.com>
! 	    Tom Tromey  <tromey@redhat.com>
  
! 	* doc/install.texi: Moved --disable-libgcj and
! 	--with-system-zlib documentation to new section for
! 	Java-specific options.
! 	Added explicit Cross-Compiler-Specific Options subheading.
! 	Added section for Java-specific options.
  
! 2004-02-20  James E Wilson  <wilson@specifixinc.com>
  
! 	* toplev.c (dump_file_index, dump_file): Put ce3 before rnreg.
  
! 2004-02-20  Josef Zlomek  <zlomekj@suse.cz>
  
! 	* tree-inline.c (copy_body_r): Do not replace ret_label.
  
! 2004-02-20  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* gcc.c (process_command): Allow translation of the copyright
! 	symbol but not the rest of the copyright message.
! 	* gcov.c (print_version): Likewise.  Allow translation of the
! 	message about warranty.
  
! 2004-02-19  Aldy Hernandez  <aldyh@redhat.com>
  
! 	* config/rs6000/spe.md (spe_fixunssfsi2): Rename to
! 	spe_fixuns_truncsfsi2.
  
! 	* config/rs6000/rs6000.md (fixunssfsi2): Rename to
! 	fixuns_truncsfsi2.
  
! 2004-02-19  Richard Sandiford  <rsandifo@redhat.com>
! 	    Maciej W. Rozycki  <macro@ds2.pg.gda.pl>
  
! 	* config/mips/mips.c (mips_address_insns): Treat BLKmode specially.
! 	* config/mips/mips.md: Expand comment above unaligned loads and stores.
  
! 2004-02-20  Alan Modra  <amodra@bigpond.net.au>
  
! 	* function.c (assign_parms): Correct leakage of mainline code
! 	in last commit.  Also leakage from INIT_CUMULATIVE_ARGS patch.
  
! 2004-02-19  Zack Weinberg  <zack@codesourcery.com>
  
! 	* config/ia64/ia64.c (ia64_function_arg): In big-endian mode,
! 	when passing single SFmode quantities in general registers,
! 	put them in the high half.
! 	(struct extern_func_list, extern_func_head): Mark with GTY(()).
! 	(ia64_hpux_add_extern_decl): Save the decl, not the name string.
! 	Allocate memory with ggc_alloc.  No need to copy anything.
! 	(ia64_hpux_file_end): Update to match.
  
! 2004-02-19  David Daney <ddaney@avtrex.com>
  
! 	PR preprocessor/14198
! 	* config/mips/linux.h (TARGET_OS_CPP_BUILTINS): Add
! 	builtin_assert ("machine=mips")
  
! 2004-02-19  Ulrich Weigand  <uweigand@de.ibm.com>
  
! 	* config/s390/s390.md ("*subdf3_cc", "*subdf3_cconly", "*subsf3_cc",
! 	"*subsf3_cconly"): Subtraction is not commutative.
  
! 2004-02-19  Alan Modra  <amodra@bigpond.net.au>
  
! 	* function.c (assign_parms): When building decl_rtl for
! 	SPLIT_COMPLEX_ARGS, ensure inner modes of concat match outer.
  
! 2004-02-19  Olivier Hainque  <hainque@act-europe.fr>
  
! 	* expr.c (is_aligning_offset): Check if we are aligning the
! 	expressions's address over BIGGEST_ALIGNMENT in bytes, not
! 	in bits.
  
! 2004-02-19  Jan Hubicka  <jh@suse.cz>
  
! 	* genextract.c (main): Do not output the memset when not checking.
  
! 2004-02-18  Jakub Jelinek  <jakub@redhat.com>
  
! 	* config/i386/i386.c (override_options): Don't imply 3DNow! for -m64
! 	by default.
  
! 2004-02-18  Ulrich Weigand  <uweigand@de.ibm.com>
  
! 	* config/s390/s390.md ("divmoddisi3"): Fix incorrect mode.
  
! 2004-02-18  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
  
! 	* pa.h (PIC_OFFSET_TABLE_REGNUM): Define to INVALID_REGNUM when not
! 	generating PIC code.
  
! 2004-02-18  Ulrich Weigand  <uweigand@de.ibm.com>
  
! 	* config/s390/s390.c (s390_mainpool_start): Delete the main pool
! 	placeholder insn when chunkifying the pool.
  
! 2004-02-18  Per Bothner  <per@bothner.com>
  
! 	* cpphash.h (struct cpp_buffer):  Restore return_at_eof field.  This
! 	partly reverts my 2003-10-01 change, because we're back to logically
! 	including <command line> inside the main line.
! 	* cpplex.c (_cpp_get_fresh_line):  Check return_at_eof field.
! 	* cppmacro.c (cpp_scan_nooutput):  Set return_at_eof of current buffer.
! 	Fixes PR preprocessor/14103.
  
! 2004-02-18  Richard Earnshaw  <rearnsha@arm.com>
  
! 	PR target/13866
! 	* arm.c (load_multiple_operation): Don't insist that the source reg
! 	of a post-increment component is the same as the destination.
! 	(store_multiple_operation): Likewise.
  
! 2004-02-18  Paul Brook  <paul@codesourcery.com>
  
! 	* rtlanal.c (rtx_varies_p): Return 0 for NULL_RTX
  
! 2004-02-18  Mark Mitchell <mark@codesourcery.com>
  
! 	PR c++/11326
! 	* config/ia64/ia64.c (ia64_struct_value_rtx): Cope with NULL
! 	fntype.
  
! 2004-02-18  Paul Brook  <paul@codesourcery.com>
  
! 	PR debug/12934
! 	* dwarf2out.c (loc_descriptor_from_tree): Handle
! 	EXPR_WITH_FILE_LOCATION.
  
! 2004-02-17  Mark Mitchell  <mark@codesourcery.com>
  
! 	PR c++/11326
! 	* c-common.c (flag_abi_version): Remove.
! 	* c-common.h (flag_abi_version): Likewise.
! 	* c-opts.c (c_common_handle_option): Remove OPT_fabi_version case.
! 	* c.opt (fabi-version): Remove.
! 	* calls.c (expand_call): Always pass a function type to
! 	struct_value_rtx.  Use convert_memory_address.
! 	* common.opt (fabi-version): Add it.
! 	* flags.h (flag_abi_version): Likewise.
! 	(abi_version_at_least): New macro.
! 	* opts.c (common_handle_option): Add OPT_fabi_version.
! 	* toplev.c (flag_abi_version): Define it.
! 	* config/ia64/ia64.h (STRUCT_VALUE_REGNUM): Remove.
! 	* config/ia64/ia64.c (TARGET_STRUCT_VALUE_RTX): Define it.
! 	(ia64_struct_retval_addr_is_first_parm_p):
! 	New function.
! 	(ia64_output_mi_thunk): Use it.
! 	(ia64_struct_value_rtx): New function.
  
! 2004-02-18  Alan Modra  <amodra@bigpond.net.au>
  
! 	PR optimization/14119
! 	* combine.c (try_combine): When attemting to fix unrecognized insns,
! 	don't delete SETs marked with REG_EH_REGION notes.
  
! 2004-02-17  Jan Hubicka  <jh@suse.cz>
  
! 	PR bootstrap/14180
! 	* cselib.c (remove_useless_values): Do not access released
! 	memory.
  
! 2004-02-17  Ulrich Weigand  <uweigand@de.ibm.com>
  
! 	* combine.c (simplify_if_then_else): Do not replace
! 	(if_then_else (ne reg 0) (0) (const_int)) by (reg) if the
! 	modes differ.
  
! 2004-02-17  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
  
! 	* config/mips/t-iris6gld: Renamed to ...
! 	* config/mips/t-irix-gld: ... this.
! 	* config.gcc (mips-sgi-irix6*): Reflect this
! 	(mips-sgi-irix5*): Use it with GNU ld.
  
! 	* config/mips/irix6-crti.asm, config/mips/irix6-crtn.asm: Renamed
! 	to ...
! 	* config/mips/irix-crti.asm, config/mips/irix-crtn.asm: ... this.
! 	* config/mips/t-irix-gld: Reflect this.
! 	* config/mips/iris6gld.h (STARTFILE_SPEC, ENDFILE_SPEC): Likewise.
  
! 	* config/mips/iris5gld.h: New file.
! 	* config.gcc (mips-sgi-irix5*): Use it with GNU ld.
! 	Only use collect2 without gas.
  
! 	* config/mips/iris6.h (IRIX6_STARTFILE_SPEC, IRIX6_ENDFILE_SPEC):
! 	Renamed to IRIX_STARTFILE_SPEC, IRIX_ENDFILE_SPEC.
! 	(STARTFILE_SPEC, ENDFILE_SPEC, SUBTARGET_EXTRA_SPECS): Reflect this.
! 	* config/mips/iris6gld.h (STARTFILE_SPEC, ENDFILE_SPEC): Likewise.
  
! 	* config/mips/iris6.h (SUBTARGET_EXTRA_SPECS): Moved ...
! 	* config/mips/iris5.h: ... here.
  
! 	* config/mips/iris5.h (STARTFILE_SPEC, ENDFILE_SPEC): Renamed to
! 	IRIX_STARTFILE_SPEC, IRIX_ENDFILE_SPEC.
! 	(STARTFILE_SPEC, ENDFILE_SPEC): Define.
  
! 	* config/mips/iris5gas.h (STARTFILE_SPEC, ENDFILE_SPEC): Simplify
! 	using irix_startfile_spec, irix_endfile_spec.
! 	* patches.summary (http):
  
! 2004-02-17  Andrew Pinski  <pinskia@physics.uc.edu>
  
! 	PR c++/14178
! 	* doc/invoke.texi (fabi-version): The default is 2 now.
  
! 2004-02-17  Jonathan Wakely  <redi@gcc.gnu.org>
  
! 	* doc/install.texi: Update description of --gxx-include-dir to
! 	give correct default value. (merged from mainline)
  
! 2004-02-16  Matthias Klose  <doko@debian.org>
  
! 	* config/t-slibgcc-elf-ver: Define SHLIB_NAME and SHLIB_SONAME
! 	in terms of SHLIB_SOVERSION.
! 	* config/m68k/t-slibgcc-elf-ver: New file.
! 	* config/pa/t-slibgcc-elf-ver: New file.
! 	* config.gcc (m68k-linux, parisc-linux): Use them when not
! 	sjlj exceptions are not configured.
  
! 2004-02-16  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	* config/sparc/sparc.c (get_pc_symbol_name): Mark with GTY(()).
  
! 2004-02-16  Joseph S. Myers  <jsm@polyomino.org.uk>
  
! 	* doc/sourcebuild.texi: Mention backends.html.
  
! 2004-02-15  Roger Sayle  <roger@eyesopen.com>
  
! 	Backport from mainline:
  
! 	2004-02-07  Roger Sayle  <roger@eyesopen.com>
! 	PR middle-end/13696
! 	* fold-const.c (fold_convert): New function to provide type
! 	conversion to the middle-end without using convert.
! 	(negate_expr, associate_trees, size_diffop, omit_one_operand,
! 	operand_equal_for_comparison_p, pedantic_omit_one_operand,
! 	invert_truthvalue, optimize_bit_field_compare, range_binop,
! 	decode_field_reference, make_range, build_range_check, unextend,
! 	fold_truthop, extract_muldiv_1, fold_mathfn_compare,
! 	fold_binary_op_with_conditional_arg, fold_inf_compare,
! 	fold_single_bit_test, fold, multiple_of_p): Replace all calls to
! 	convert with calls to fold_convert.
  
! 	2004-02-09  Roger Sayle  <roger@eyesopen.com>
! 	* fold-const.c (fold) <NOP_EXPR>: Use the original type conversion
! 	tree code rather than call fold_convert, which doesn't specify a
! 	default floating point to integer conversion.
  
! 	2004-02-10  Paolo Bonzini  <bonzini@gnu.org>
! 	PR c/14092
! 	* fold-const.c (fold) <NEGATE_EXPR>: Convert result of
! 	negate_expr back to the original type.
  
! 2004-02-15  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
  
! 	Backport from mainline:
  
! 	2004-02-05  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
! 	* config/sh/t-linux (SHLIB_INSTALL): Prepend $$(DESTDIR)
! 	to $$(slibdir) in the installation commands.
  
! 2004-02-15  Roger Sayle  <roger@eyesopen.com>
  
! 	Backport from mainline:
  
! 	2004-01-20  Roger Sayle  <roger@eyesopen.com>
! 	* fold-const.c (fold_convert): Rename to fold_convert_const.
! 	(fold_convert_const): Change arguments to take a tree_code,
! 	a type and the operand/expression to be converted.  Return
! 	NULL_TREE if no simplification is possible.
! 	(fold): Adjust call to fold_convert to match new fold_convert_const.
! 	Avoid modifying the tree passed to fold in-place.
  
! 2004-02-15  Jan Hubicka  <jh@suse.cz>
  
! 	* cselib.c (value_pool): New.
! 	(new_cselib_val): Use pool.
! 	(cselib_init): Initialize value_pool
! 	(cselib_finish): Free pool.
  
! 	* cselib.c: Include alloc-pool.h
! 	(empty_vals, empty_elt_lists, empty_elt_loc_lists): Kill.
! 	(elt_loc_list_pool, elt_list_pool, cselib_val_pool): Declare.
! 	(new_elt_list, new_elt_loc_list, unchain_one_elt_list,
! 	unchain_one_elt_loc_list_pool, unchain_one_value,
! 	new_cselib_val): Simplify using allocpool.
! 	(cselib_init): Initialize allocpools.
! 	(cselib_finish): Finish allocpools.
  
! 2004-02-14  Richard Sandiford  <rsandifo@redhat.com>
  
! 	Backport from mainline:
  
! 	2002-04-08  Richard Sandiford  <rsandifo@redhat.com>
! 	* real.c (encode_ibm_extended): Normalize the input value before
! 	converting it to a double.  Handle the case where a normal value
! 	rounds to infinity.
  
! 2004-02-14  Olivier Hainque  <hainque@act-europe.fr>
  
! 	* loop.c (check_dbra_loop): Use gen_int_mode instead of GEN_INT
! 	for start_value when it is directly moved into reg, and factorize
! 	the retrieval of GET_MODE (reg).
  
! 2004-02-13  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
  
! 	* configure.ac: Search for as, ld below libexec/gcc.
! 	* configure: Regenerate.
  
! 2004-02-13  Jan Hubicka  <jh@suse.cz>
  
! 	* combine.c (recog_for_combine): Avoid allocating unnecesary RTX.
  
! 	* genrecog.c (find_operand): add extra argument stop.
! 	(validate_pattern): Verify that mach_dup is duplicating operand
! 	defined lexically earlier.
  
! 2004-02-13  Ian Lance Taylor  <ian@wasabisystems.com>
  
! 	PR other/10584
! 	* c-opts.c (c_common_post_options): Disable function inlining when
! 	using -finstrument-functions.
! 	* doc/invoke.texi (Code Gen Options): Document this restriction.
  
! 2004-02-12  Chris Demetriou  <cgd@broadcom.com>
  
! 	* config/mips/mips.md (casesi_internal, casesi_internal_di):
! 	Use ".set macro" to avoid warnings about multi-instruction
! 	macros, since they're intentional.
  
! 2004-02-13  Jan Hubicka  <jh@suse.cz>
  
! 	* alias.c (find_base_term, get_addr):  Do not dereference NULL
! 	pointer when all VALUE's locations has been invalidated.
! 	(rtx_equal_for_memref_p): Simplify checking of VALUEs.
  
! 	* cselib.c (discard_useless_values):  Clear out value pointer pointing
! 	to datastructure to be recycled.
  
! 	* gcse.c (bypass_block): Prevent edges to be unified when we are
! 	about to emit compenstation code.
  
! 	* gcse.c (bypass_block): Fix a typo in the previous check-in
! 	to the file.
  
! 	* alloc-pool.c (align_four): Kill.
! 	(create_alloc_pool): Align size to eight.
! 	(free_alloc_pool, free_pool): Invalidate deallocated data.
  
! 2004-02-12  Richard Sandiford  <rsandifo@redhat.com>
  
! 	PR bootstrap/13617
! 	* config/mips/mips-protos.h (mips_output_aligned_decl_common): Declare.
! 	(mips_declare_object): Make variadic.
! 	* config/mips/mips.h (ASM_OUTPUT_ALIGNED_DECL_COMMON): Use
! 	mips_output_aligned_decl_common.
! 	* config/mips/mips.c (mips_output_aligned_decl_common): New function.
! 	(mips_declare_object): Make variadic.
  
! 2004-02-12  Jan Hubicka  <jh@suse.cz>
  
! 	* tree-optimize.c (tree_rest_of_compilation): Do not release DECL_ARGUMENTS
  
! 2004-02-12  Ian Lance Taylor  <ian@wasabisystems.com>
  
! 	PR inline-asm/6162
! 	* reload.c (find_reloads): Only support one pair of commutative
! 	operands.
  
! 2004-02-12  Ian Lance Taylor  <ian@wasabisystems.com>
  
! 	PR target/1532
! 	Backport from mainline:
  
! 	2004-02-11  Richard Henderson  <rth@redhat.com>
  
! 	* flow.c (insn_dead_p): A clobber of a dead hard register is a
! 	dead insn after reload.
  
! 	2004-01-24  Ian Lance Taylor  <ian@wasabisystems.com>
  
! 	* cse.c (cse_cc_succs): Change the mode of the source expression
! 	as soon as decide we need a new mode.  Don't permit changing modes
! 	if we found a match in a successor block.
! 	(cse_condition_code_reg): Save original mode of source expression
! 	so that we know whether we have to change the mode in other
! 	insns.
  
! 	2004-01-24  Andreas Tobler  <a.tobler@schweiz.ch>
  
! 	* cse.c: (cse_cc_succs) Fix comparison warning.
  
! 	2004-01-23  Ian Lance Taylor  <ian@wasabisystems.com>
  
! 	* cse.c (cse_change_cc_mode): New static function.
! 	(cse_change_cc_mode_insns, cse_cc_succs): Likewise.
! 	(cse_condition_code_reg): New function.
! 	* rtl.h (cse_condition_code_reg): Declare.
! 	* toplev.c (rest_of_handle_cse2): Call cse_condition_code_reg.
! 	* target.h (struct gcc_target): Add fixed_condition_code_regs and
! 	cc_modes_compatible.
! 	* target-def.h (TARGET_FIXED_CONDITION_CODE_REGS): Define.
! 	(TARGET_CC_MODES_COMPATIBLE): Define.
! 	(TARGET_INITIALIZER): Add new initializers.
! 	* targhooks.c (default_cc_modes_compatible): New function.
! 	* targhooks.c (default_cc_modes_compatible): Declare.
! 	* hooks.c (hook_bool_intp_intp_false): New function.
! 	* hooks.h (hook_bool_intp_intp_false): Declare.
! 	* config/i386/i386.c (TARGET_FIXED_CONDITION_CODE_REGS): Define.
! 	(TARGET_CC_MODES_COMPATIBLE): Define.
! 	(ix86_fixed_condition_code_regs): New static function.
! 	(ix86_cc_modes_compatible): Likewise.
! 	* doc/tm.texi (Condition Code): Document new hooks.
  
! 2004-02-12  Hartmut Penner  <hpenner@de.ibm.com>
  
! 	* config/rs6000/altivec.md (*movv4si_internal): At least one
! 	operand must be register_operand.
! 	(*movv8hi_internal1): Likewise.
! 	(*movv16qi_internal1): Likewise.
! 	(*movv4sf_internal1): Likewise.
  
! 2004-02-12  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	PR target/14113
! 	Backport from mainline:
  
! 	2004-02-03  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	* config/sparc/sparc.md (call followed by jump define_peephole's):
! 	Delete.
  
! 2004-02-12  Hartmut Penner  <hpenner@de.ibm.com>
  
! 	* gcc/config/rs6000/rs6000.c (rs6000_override_options)
! 	Set AltiVec ABI and vrsave as default for ppc64 linux.
! 	(init_cumulative_args): Post error, if try to return
! 	value in AltiVec register without enable AltiVec.
! 	(function_arg_advance): Ditto for passing arguments.
  
! 2004-02-11  Joseph S. Myers  <jsm@polyomino.org.uk>
  
! 	PR c/456
! 	* cppexp.c (num_binary_op): Don't allow comma operators in #if
! 	constant expressions at all outside C99 mode if pedantic.
  
! 2004-02-10  Aldy Hernandez  <aldyh@redhat.com>
  
! 	* config/rs6000/spe.md ("*movv2si_internal"): Check for register
! 	operand.
! 	(movv4hi_internal): Same.
! 	(movv2sf_internal): Same.
! 	(movv1di_internal): Same.
  
! 2004-02-11  Richard Sandiford  <rsandifo@redhat.com>
  
! 	* emit-rtl.c (mark_label_nuses): Check that a LABEL_REF refers to
! 	a label before updating its usage count.
  
! 2004-02-10  Danny Smith  <dannysmith@users.sourceforge.net>
  
! 	PR c/14088
! 	real.c (real_from_string): Look for 'X' as well as 'x' in
! 	hexfloat strings.
  
! 2004-02-10  Per Bothner  <per@bothner.com>
  
! 	* c-opts.c (c_common_post_options):   Don't emit working directory
! 	in cpp output if -P was specified.
  
! 2004-02-10  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR optimization/13424
! 	Backport from mainline:
  
! 	2004-01-29  Jakub Jelinek  <jakub@redhat.com>
! 	* emit-rtl.c (change_address): Use XEXP (memref, 0) instead
! 	of addr when creating MEM copy.
  
! 	2004-01-28  Jakub Jelinek  <jakub@redhat.com>
! 	* expr.c (store_constructor): Revert 2003-12-03 change.
  
! 	* emit-rtl.c (change_address): Check also if MEM_ATTRS is set as
! 	expected before returning early.  Avoid sharing RTL if they
! 	need to be changed.
  
! 	* config/i386/i386.c (ix86_expand_movstr): Rework rep_mov and strmov
! 	handling so that memory attributes are preserved.  Don't call
! 	ix86_set_move_mem_attrs.
! 	(ix86_set_move_mem_attrs_1, ix86_set_move_mem_attrs): Removed.
! 	(ix86_expand_clrstr): Rename src argument to
! 	dst.  Rework rep_stos and strset handling so that memory attributes
! 	are preserved.
! 	(ix86_expand_strlen): Pass src argument to
! 	ix86_expand_strlensi_unroll_1.  Rework strlenqi_1 handling so that
! 	memory attributes are preserved.
! 	(ix86_expand_strlensi_unroll_1): Add src argument.  Use
! 	change_address instead of gen_rtx_MEM.
! 	* config/i386/i386.md (strmov, strmov_singleop, rep_mov): New
! 	expanders.
! 	(strmovdi_rex64, strmovsi, strmovsi_rex64, strmovhi, strmovhi_rex64,
! 	strmovqi, strmovqi_rex64): Remove.
! 	(rep_mov*, strmov*): Prefix insn names with *.
! 	(strset, strset_singleop, rep_stos): New expanders.
! 	(strsetdi_rex64, strsetsi, strsetsi_rex64, strsethi, strsethi_rex64,
! 	strsetqi, strsetqi_rex64): Remove.
! 	(rep_stos*, strset*): Prefix insn names with *.
! 	(rep_stosqi_rex64): Likewise.  Fix mode of dirflag reg from DImode
! 	to SImode.
! 	(cmpstrsi): Rework cmpstrqi_1 handling so that memory attributes
! 	are preserved.
! 	(cmpstrqi_nz_1, cmpstrqi_nz_rex_1, cmpstrqi_1, cmpstrqi_rex_1):
! 	Prefix insn names with *.
! 	(cmpstrqi_nz_1, cmpstrqi_1): New expanders.
! 	(strlenqi_1, strlenqi_rex_1): Prefix insn names with *.
! 	(strlenqi_1): New expander.
! 	* config/i386/i386.h (ix86_set_move_mem_attrs): Remove prototype.
  
! 	2004-01-24  Jan Hubicka  <jh@suse.cz>
! 	* emit-rtl.c (change_address, adjust_address_1, offset_address,
! 	widen_memory_access):  Return early when there is nothing to change.
  
! 2004-02-10  David Edelsohn  <edelsohn@gnu.org>
  
! 	* configure.ac (gcc_cv_as_powerpc_mfcrf): Correct test for mfcr.
! 	* configure: Regenerate.
  
! 2004-02-10  Ulrich Weigand  <uweigand@de.ibm.com>
  
! 	* cfganal.c (flow_call_edges_add): Never split a libcall block.
  
! 2004-02-10  Richard Sandiford  <rsandifo@redhat.com>
  
! 	* config/mips/mips.h (TARGET_GPWORD): Return false for TARGET_NEWABI
! 	&& TARGET_IRIX.
  
! 2004-02-09  Geoffrey Keating  <geoffk@apple.com>
  
! 	PR 12028
! 	* config/rs6000/rs6000.c (ccr_bit): Don't let consistency check
! 	failure stop compilation, just print helpful message.
  
! 2004-02-09  Fariborz Jahanian <fjahanian@apple.com>
  
! 	* expr.c (emit_group_load): split constant
! 	correctly into register components of PARALLEL insn.
  
! 2004-02-09  DJ Delorie  <dj@redhat.com>
  
! 	* config/i386/xm-djgpp.h (GCC_DRIVER_HOST_INITIALIZATION): No
! 	longer modify standard_exec_prefix, standard_bindir_prefix, or
! 	standard_startfile_prefix.
  
! 2004-02-09  James E Wilson  <wilson@specifixinc.com>
  
! 	PR c++/11295
! 	* c-common.c (c_expand_expr, case STMT_EXPR): Change expand_expr call
! 	to expand_expr_real call, and pass in alt_rtl as last argument.
  
! 	PR libstdc++/5625
! 	* builtin-types.def (BT_WORD, BT_FN_WORD_PTR): New.
! 	* builtins.c (expand_builtin): Handle BUILT_IN_EXTEND_POINTER.
! 	* builtins.def (BUILT_IN_EXTEND_POINTER): New.
! 	* except.c (expand_builtin_extend_pointer): New.
! 	* except.h (expand_builtin_extend_pointer): Declare.
  
! 2004-02-09  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
  
! 	* config/mips/iris5.h (BSS_SECTION_ASM_OP): Define.
! 	* config/mips/iris6.h (BSS_SECTION_ASM_OP): Undef.
  
! 	* config/mips/iris6.h (TARGET_ASM_NAMED_SECTION): Moved ...
! 	* config/mips/iris5.h: ... here.
! 	* config/mips/iris5gas.h (TARGET_ASM_NAMED_SECTION): Remove.
  
! 	* config/mips/iris6.h (EXTRA_SECTION_FUNCTIONS): Move ...
! 	* config/mips/iris5.h: ... here.
  
! 2004-02-09  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
  
! 	* configure.ac: Remove default executable files before AC_PROG_CC.
! 	* configure: Regenerate.
  
! 2004-02-09  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	PR target/13721
! 	* config/h8300/h8300.c (byte_reg): Call abort() if asked to
! 	print a operand other than a register.
  
! 2004-02-09  Nick Clifton  <nickc@redhat.com>
  
! 	* Import these patches from mainline sources:
  
! 	2004-01-21  Inaoka Kazuhiro  <inaoka.kazuhiro@renesas.com>
  
! 	* config/m32r/m32r.h (CPP_SPEC): Define.
  
! 	2004-01-20  Kazuhiro Inaoka  <inaoka.kazuhiro@renesas.com>
  
! 	* config/m32r/m32r.h (TARGET_M32R2). Test for TARGET_M32R2_MASK
! 	not TARGET_M32RX_MASK.
  
! 2004-02-09  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	* cpplib.h (cpp_get_line_maps): Un-constify the structure
! 	pointed to by the pointer returned by the function.
! 	* cpplib.c (cpp_get_line_maps): Likewise.
  
! 2004-02-08  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* c-objc-common.c (c_cannot_inline_tree_fn): Fix a typo in a
! 	warning.
  
! 2004-02-08  Joseph S. Myers  <jsm@polyomino.org.uk>
  
! 	* README.Portability: Change "ISO C89" to "ISO C90".
! 	* c-parse.in (primary, initelt): Likewise.
  
! 2004-02-07  Zack Weinberg  <zack@codesourcery.com>
  
! 	Bug 13856
! 	* c-decl.c (diagnose_mismatched_decls): Only give special
! 	treatment when olddecl is DECL_BUILT_IN, if C_DECL_INVISIBLE
! 	is also true.
! 	(merge_decls): Don't clear DECL_BUILT_IN_CLASS and
! 	DECL_FUNCTION_CODE when defining a built-in function.
! 	Don't update DECL_ESTIMATED_INSNS.
! 	* dwarf2out.c (dwarf2out_decl): Don't ignore built-in
! 	FUNCTION_DECLs.
! 	* tree.h: Delete DECL_ESTIMATED_INSNS.
! 	* tree-inline.c (struct inline_data): Delete inlined_insns field.
! 	(expand_call_inline, optimize_inline_calls): Don't update
! 	DECL_ESTIMATED_INSNS nor inlined_insns.
! 	* cgraphunit.c (cgraph_analyze_function): Don't update
! 	DECL_ESTIMATED_INSNS.
  
! 2004-02-07  Zack Weinberg  <zack@codesourcery.com>
  
! 	* c-common.c (shadow_warning): Delete.
! 	* c-common.h (free_parser_stacks, shadow_warning, sw_kind): Delete.
! 	* c-decl.c (warn_if_shadowing): Issue shadow warnings directly.
! 	* c-opts.c (c_common_parse_file): Don't call free_parser_stacks.
! 	* c-parse.in (free_parser_stacks): Delete.
  
! 2004-02-07  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* c-opts.c, c-ppoutput.c, cppfiles.c, cpphash.h, cppinit.c,
! 	cpplib.h, diagnostic.h, fix-header.c, config/fp-bit.c,
! 	config/mips/iris5.h, doc/makefile.texi: Update copyright.
  
! 2004-02-06  James E Wilson  <wilson@specifixinc.com>
  
! 	* config/ia64/linux.h (MD_FALLBACK_FRAME_STATE_FOR): Only define for
! 	glibc 2.3 or better.
  
! 2004-02-06  Ulrich Weigand  <uweigand@de.ibm.com>
  
! 	* loop.c (force_movables): Transitively increase the priorities of
! 	all insns forces by an insn, not just the first one.
  
! 2004-02-06  Falk Hueffner  <falk@debian.org>
  
! 	PR target/12898
! 	* config/alpha/alpha.c (alpha_emit_set_const_1): If
! 	no_new_pseudos, use gen_rtx_SET directly for SImode constants
! 	which need multiple instructions to emit.
  
! 2004-02-06  H.J. Lu  <hongjiu.lu@intel.com>
  
! 	* doc/invoke.texi: Remove the pni option from -mfpmath=.
  
! 2004-02-05  Kelley Cook  <kcook@gcc.gnu.org>
  
! 	* doc/install.texi:  Update automake and autoconf version
! 	requirements.  Note where to find gcj automake version.
  
! 2004-02-05  Kelley Cook  <kcook@gcc.gnu.org>
  
! 	* Makefile.in (generate-manpages): Move dependencies to ...
! 	(man): here.
! 	* doc/makefile.texi: Document new targets.
! 	* doc/sourcebuild.texi (Make-lang.in): Document new langhooks.
  
! 2004-02-05  Kelley Cook  <kcook@gcc.gnu.org>
  
! 	PR/13485
! 	Makefile.in (srcextra):  Add a level of indirection to ...
! 	(gcc.srcextra): ... here.
! 	(po-generated): Delete.
! 	(po/$(PACKAGE).pot: Use srcextra instead of po-generated.  Depend on
! 	options.c.
! 	(start.encap): Remove superfluous lang.srcextra dependency.
! 	objc/Make-lang.in (po-generated):  Delete.
  
! 2004-02-05  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
  
! 	* config/mips/iris5gas.h (PREFERRED_DEBUGGING_TYPE): Define.
  
! 2004-02-05  Andreas Krebbel  <krebbel1@de.ibm.com>
  
! 	* config/s390/s390.md ("*tmqidi_ext"): New insn.
! 	("*extendqidi2_short_displ", "*extendsiqi2_short_displ"): Old
! 	pre-reload splitters are transformed to post-reload
! 	define_insn_and_split patterns.
! 	("*tmqisi_ext"): Renamed old "*tmqi_ext".
  
! 2004-02-05  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
  
! 	PR middle-end/13750
! 	Revert:
! 	2004-01-15  Geoffrey Keating  <geoffk@apple.com>
! 	PR pch/13361
! 	* c-typeck.c (constructor_asmspec): Delete.
! 	(struct initializer_stack): Delete field 'asmspec'.
! 	(start_init): Delete saving of asmspec.
! 	(finish_init): Don't update constructor_asmspec.
! 	* dwarf2out.c (rtl_for_decl_location): Duplicate string from tree.
! 	* stmt.c (expand_asm): Duplicate strings from tree.
! 	(expand_asm_operands): Likewise.
! 	* tree.c (tree_size): Update computation of size of STRING_CST.
! 	(make_node): Don't make STRING_CST nodes.
! 	(build_string): Allocate string with tree node.
! 	* tree.def (STRING_CST): Update comment.
! 	* tree.h (TREE_STRING_POINTER): Adjust for change to STRING_CST.
! 	(tree_string): Place contents of string in tree node.
! 	* config/sh/sh.c (sh_handle_sp_switch_attribute): Duplicate string
! 	from tree.
  
! 2004-02-05  Joseph S. Myers  <jsm@polyomino.org.uk>
  
! 	* diagnostic.h (DEFINE_DIAGNOSTIC_KIND): Change parameter M to
! 	msgid.
  
! 2004-02-05  Paul Brook  <paul@codesourcery.com>
  
! 	Backport from mainline.
  
! 	2003-11-22  Phil Edwards  <phil@codesourcery.com>
  
! 	PR target/12476
! 	* config/arm/arm.c (arm_output_mi_thunk):  In Thumb mode, use
! 	'bx' instead of 'b' to avoid branch range restrictions.  Output
! 	the thunk immediately before the thunked-to function.
! 	* config/arm/arm.h (ARM_DECLARE_FUNCTION_NAME):  Do not emit
! 	.thumb_func if a thunk is being generated.  Emit .code 16 along
! 	with .thumb_func if a thunk is not being generated.
  
! 	2003-11-05  Mark Mitchell  <mark@codesourcery.com>
  
! 	* calls.c (initialize_argument_information): Add CALL_FROM_THUNK_P
! 	parameter.  Use it instead of current_function_is_thunk.
! 	* function.h (struct function): Update documentation for is_thunk.
! 	* tree.h (CALL_FROM_THUNK_P): New macro.
! 	* config/alpha/alpha.c (alpha_sa_mask): Do not check
! 	no_new_pseudos when testing current_function_is_thunk.
! 	* config/rs6000/rs6000.c (rs6000_ra_ever_killed): Likeiwse.
  
! 2004-02-05  Joseph S. Myers  <jsm@polyomino.org.uk>
  
! 	* sourcebuild.texi (Test Idioms): Update testcase naming
! 	conventions.
  
! 2004-02-04  Per Bothner  <per@bothner.com>
  
! 	Partially revert/redo 2003-10-01 change; fix -fworking-directory.
! 	* c-ppoutput.c (pp_dir_change):  New function.
! 	* c-common.h (pp_dir_change):  New declaration.
! 	* cpplib.h (struct cpp_options):  Remove working_directory field.
! 	* cppinit.c (cpp_find_main_file, cpp_push_main_file):  Merge back to
! 	(cpp_read_main_file):  as before 10-01.  Call _cpp_stack_file.
! 	Don't handle -fworking_directory here, but in c_common_post_options.
! 	(read_original_directory): Don't back up when done.
! 	Don't clear no-longer used working_directory flag.
! 	* cpplib.h:  Update declarations to match.
! 	* c-lex.c (cb_dir_change):  Move to c-opts.c.
! 	(init_c_lex):  Don't set dir_change callback here, since we want
! 	to set it even if flag_preprocess_only.
! 	* c-opts.c (cb_dir_change):  Function moved from c-lex.c.
! 	(c_common_post_options):  Set dir_change callback.
! 	Call pp_dir_change if approporiate.
! 	(finish_options):  Don't call cpp_find_main_file here.	Hence remove
! 	unneeded parameter and result. Do LC_RENAME for <built-in>.
! 	(c_common_post_options):  Call cpp_read_main_file here instead.
! 	(c_common_init):  Update accordingly.
! 	(push_command_line_include):  Don't cpp_push_main_file.
! 	Do LC_RENAME rather than LC_LEASE to get back to main file.
! 	Compared to pre-10-01 version, inline cpp_rename_to_main_file.
! 	(c_common_parse_file):  Call cpp_read_main_file for subsequent main
! 	files, but call finish_options for all files.
! 	* c-opts.c (sanitize_cpp_opts):  Don't set cpp_opts->working_directory.
! 	* fix-header.c (read_scan_file):  Call cpp_read_main_file instead of
! 	cpp_find_main_file + cpp_push_main_file.
! 	* c-lex.c (fe_file_change):  Don't set main_input_filename here.
! 	* opts.c (handle_options):  Only set main_input_filename first time.
  
! 2004-02-04  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
  
! 	* Makefile.in: Move target, host overrides after per-language
! 	fragments.
  
! 	* config/mips/t-iris5-as (FORCE_DEBUG_ADAFLAGS): Clear.
! 	(GNATLIBCFLAGS): Remove -g.
  
! 2004-02-04  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	* config/sparc/sparc.c (function_arg_pass_by_reference): Return 1
! 	for all modes whose size is greater than 8 bytes if ARCH32.
! 	(sparc_va_arg): Handle all modes whose size is greater than 8 bytes
! 	by reference if ARCH32.
  
! 2004-02-04  Ulrich Weigand  <uweigand@de.ibm.com>
  
! 	* config/s390/s390.md ("*la_64" + peepholes, "reload_indi"): Move
! 	to before adddi3 insn patterns.
! 	("*la_31" + peepholes, "*la_31_and", "*la_31_and_cc", "force_la_31",
! 	"reload_insi"): Move to before addsi3 insn patterns.
  
! 2004-02-04  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* doc/interface.texi, doc/tm.texi, doc/trouble.texi: Don't
! 	mention deprecated target macros.
  
! 2004-02-03  Wolfgang Bangerth  <bangerth@dealii.org>
  
! 	* doc/invoke.texi (x86 options): Fix spelling/wording.
  
! 2004-02-03  Richard Sandiford  <rsandifo@redhat.com>
  
! 	* config/mips/iris5.h (ASM_OUTPUT_ASCII): Use mips_output_ascii to
! 	put the original string in a comment.
! 	* config/mips/mips-protos.h (mips_output_ascii): Add prefix argument.
! 	* config/mips/mips.c (mips_output_ascii): Likewise.
! 	* config/mips/mips.h (ASM_OUTPUT_ASCII): Adjust accordingly.
  
! 2004-02-03  Mark Mitchell  <mark@codesourcery.com>
  
! 	PR c++/13975
! 	* tree.h (enum tree_index): Add TI_PUBLIC, TI_PROTECTED, and
! 	TI_PRIVATE.
! 	(access_public_node): Redefine.
! 	(access_protected_node): Likewise.
! 	(access_private_node): Likewise.
! 	* tree.c (build_common_tree_nodes): Create access_public_node,
! 	access_protected_node, and access_private_node.
  
! 2004-02-03  Alan Modra  <amodra@bigpond.net.au>
  
! 	PR target/13914
! 	* config/rs6000/linux64.h (MD_FALLBACK_FRAME_STATE_FOR): Use ap
! 	for retaddr_column.
  
! 2004-02-03  Kelley Cook  <kcook@gcc.gnu.org>
  
! 	* opts.c (OPT_fwritable_strings): Deprecate -fwritable-strings.
  
! 2004-02-03  Steven Bosscher  <s.bosscher@student.tudelft.nl>
  
! 	* toplev.c: Fix broken checkin of 2003-12-30, again.
  
! 2004-02-02  Eric Christopher  <echristo@redhat.com>
! 	    Zack Weinberg  <zack@codesourcery.com>
  
! 	* c-opts.c (c_common_handle_option): Add -finput-charset.
! 	* c.opt: Ditto.
! 	* cppcharset.c (_cpp_convert_input): New function.
! 	(_cpp_default_encoding): Ditto.
! 	* cpphash.h: Add prototypes for above.
! 	* cppfiles.c (read_file_guts): Use _cpp_convert_input.
! 	* cppinit.c (cpp_create_reader): Use _cpp_default_encoding
! 	for narrow execution and input character sets.
! 	* doc/cppopts.texi: Document -finput-charset.
  
! 2004-02-02  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	* doc/invoke.texi (SPARC options): Further improve.
  
! 2004-02-02  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	* config/sparc/sparc.c (function_arg_slotno): Align TImode
! 	arguments on a 16-byte boundary in the parameter array if ARCH64.
! 	Split handling of TFmode.
  
! 2004-02-02  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	* doc/invoke.texi (SPARC options): Document that -mflat is deprecated.
  
! 2004-02-01  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	* config/sparc/sol2-bi.h: Handle TARGET_CPU_ultrasparc3.
! 	(CPP_CPU_SPEC): Handle -mcpu=ultrasparc3.
! 	(ASM_CPU_SPEC): Likewise
! 	* config/sparc/sol2.h: Handle TARGET_CPU_ultrasparc3.
! 	(ASM_CPU_SPEC): Remove -mcpu=v8plus.  Handle -mcpu=ultrasparc3.
  
! 2004-02-01  Jan Hubicka  <jh@suse.cz>
  
! 	PR c++/12850
! 	* cgraph.c (cgraph_remove_node): Clear out saved/insns/arguments and
! 	initial pointers.
! 	* cgraphunit.c (cgraph_finalize_function): Clear out DECL_SAVED_INSNS
! 	for functions that will be only inlined.
! 	(cgraph_mark_function_to_output): Likewise.
! 	(cgraph_expand_function): Sanity check that DECL_DEFER_OUTPUT is clear;
! 	do not clear function body.
! 	* tree-optimize.c (clear_decl_rtl): Use decl_function_context.
! 	(tree_rest_of_compilation): Reorganize the logic releasing function
! 	body to use callgraph datastructure.
  
! 2004-02-01  Richard Sandiford  <rsandifo@redhat.com>
  
! 	* config/mips/mips.md (adddi3_internal_2): Remove superfluous %s.
  
! 2004-01-31  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	* doc/invoke.texi (SPARC options): Restructure and update.
  
! 2004-01-31  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* doc/invoke.texi: Follow spelling conventions.
! 	* doc/tm.texi: Likewise.
  
! 2004-01-31  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* doc/install.texi: Fix typos.
! 	* doc/invoke.texi: Likewise.
  
! 2004-01-31  Ulrich Weigand  <uweigand@de.ibm.com>
  
! 	* config/s390/s390.c (s390_decompose_address): Do not treat virtual
! 	registers as pointers.
! 	* config/s390/s390.md ("*la_31" second peephole2): Fix incorrect mode.
  
! 2004-01-31  Jan Hubicka  <jh@suse.cz>
  
! 	Revert the following patch until after AIX linker bug is fixed:
! 	PR c++/12850
! 	* cgraph.c (cgraph_remove_node): Clear out saved/insns/arguments and
! 	initial pointers.
! 	* cgraphunit.c (cgraph_finalize_function): Clear out DECL_SAVED_INSNS
! 	for functions that will be only inlined.
! 	(cgraph_mark_function_to_output): Likewise.
! 	(cgraph_expand_function): Sanity check that DECL_DEFER_OUTPUT is clear;
! 	do not clear function body.
! 	* tree-optimize.c (clear_decl_rtl): Use decl_function_context.
! 	(tree_rest_of_compilation): Reorganize the logic releasing function
! 	body to use callgraph datastructure.
  
! 2004-01-31  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	alloc-pool.c, alloc-pool.h, c-lex.c, c-pragma.h,
! 	tree-optimize.c, config/alpha/alpha.c, config/alpha/alpha.h,
! 	config/alpha/alpha.md, config/alpha/vms.h, config/arm/arm.h,
! 	config/arm/linux-elf.h, config/avr/avr.c, config/c4x/c4x.c,
! 	config/c4x/c4x.md, config/d30v/d30v.h,
! 	config/frv/frv-protos.h, config/frv/frv.c, config/frv/frv.h,
! 	config/frv/frv.md, config/frv/frvbegin.c, config/frv/frvend.c,
! 	config/i386/cygming.h, config/i386/djgpp.h,
! 	config/i386/emmintrin.h, config/i386/gthr-win32.c,
! 	config/i386/i386-interix.h, config/i386/i386-protos.h,
! 	config/i386/i386.c, config/i386/i386.h, config/i386/openbsd.h,
! 	config/i386/winnt.c, config/i386/xm-mingw32.h,
! 	config/i386/xmmintrin.h, config/ia64/ia64-protos.h,
! 	config/ia64/ia64.c, config/ia64/ia64.md, config/ip2k/ip2k.c,
! 	config/iq2000/iq2000-protos.h, config/iq2000/iq2000.c,
! 	config/iq2000/iq2000.md, config/m32r/m32r-protos.h,
! 	config/m32r/m32r.c, config/m32r/m32r.md, config/m68k/m68k.md,
! 	config/m68k/netbsd-elf.h, config/mcore/mcore-elf.h,
! 	config/mcore/mcore.c, config/mcore/mcore.h,
! 	config/mcore/mcore.md, config/mips/elf.h, config/mips/elf64.h,
! 	config/mips/iris5gas.h, config/mips/iris6.h,
! 	config/mips/iris6gas.h, config/mips/linux.h,
! 	config/mips/mips.md, config/mips/netbsd.h,
! 	config/mips/openbsd.h, config/mips/windiss.h,
! 	config/mn10300/mn10300.c, config/mn10300/mn10300.h,
! 	config/pdp11/pdp11.c, config/rs6000/aix.h,
! 	config/rs6000/altivec.h, config/rs6000/darwin.h,
! 	config/rs6000/xcoff.h, config/s390/s390-protos.h,
! 	config/s390/s390.c, config/s390/s390.h, config/s390/s390.md,
! 	config/sh/netbsd-elf.h, config/sh/sh.h, config/sh/vxworks.h,
! 	config/sparc/sol2.h, config/stormy16/stormy16.h: Update
! 	copyright.
  
! 2004-01-30  Dara Hazeghi  <dhazeghi@yahoo.com>
  
- 	PR bootstrap/9249
- 	* doc/install.texi: document --enable-__cxa_atexit option.
- 	* configure.ac: Disable __cxa_atexit if not supported.
  	* configure: Regenerate.
  
! 2004-01-30  Herman A.J. ten Brugge <hermantenbrugge@home.nl>
! 
! 	PR target/12978
! 	* c4x.md: (movstrqi*) Use match_scratch instead of match_dup.
! 	Remove movstrqi_small because it conflicts with movstrqi_large.
! 
! 2004-01-30  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* Makefile.in (abs_docdir, abs_srcdir): Define.
! 	(doc/%.dvi, doc/gccinstall.dvi): Use $(abs_docdir).
! 
! 2004-01-30  Ulrich Weigand  <uweigand@de.ibm.com>
! 
! 	PR optimization/12147
! 	* reload1.c (reload_reg_free_p): RELOAD_OTHER conflicts with
! 	RELOAD_FOR_OPADDR_ADDR.
! 	(reload_reg_reaches_end_p): RELOAD_FOR_OTHER_ADDRESS register
! 	might be reused as RELOAD_FOR_OPADDR_ADDR register.
! 
! 2004-01-30  Jan Hubicka  <jh@suse.cz>
! 
! 	* reload.c (get_secondary_mem):  Fix updating of
! 	secondary_memlocs_elim_used.
! 
! 2004-01-30  Andrew Pinski <pinskia@physics.uc.edu>
! 
! 	* toplev.c: Include alloc-pool.h.
! 	* Makefile.in (toplev.c): Update dependencies.
! 
! 2004-01-30  Eric Botcazou  <ebotcazou@libertysurf.fr>
! 
! 	* config/sparc/sparc.h: Update copyright.
! 
! 2004-01-30  Eric Botcazou  <ebotcazou@libertysurf.fr>
! 
! 	PR c/12818
! 	* varasm.c (const_hash_1) <STRING_CST>: Use the
! 	address to compute the hash value if flag_writable_strings.
! 	(compare_constant) <STRING_CST>: Compare the addresses
! 	if flag_writable_strings.
! 	(build_constant_desc): Do not copy the expression for a
! 	STRING_CST if flag_writable_strings.
! 
! 2004-01-30  Jan Hubicka  <jh@suse.cz>
! 
! 	PR c++/12850
! 	* cgraph.c (cgraph_remove_node): Clear out saved/insns/arguments and
! 	initial pointers.
! 	* cgraphunit.c (cgraph_finalize_function): Clear out DECL_SAVED_INSNS
! 	for functions that will be only inlined.
! 	(cgraph_mark_function_to_output): Likewise.
! 	(cgraph_expand_function): Sanity check that DECL_DEFER_OUTPUT is clear;
! 	do not clear function body.
! 	* tree-optimize.c (clear_decl_rtl): Use decl_function_context.
! 	(tree_rest_of_compilation): Reorganize the logic releasing function
! 	body to use callgraph datastructure.
! 
! 	* reload.c (secondary_memlocs_elim_used): New static variable.
! 	(get_secondary_mem): Update it.
! 	(find_reloads): Use it.
! 
! 	* alias.c (reg_base_value): Turn into varray.
! 	(reg_base_value_size): Kill.
! 	(old_reg_base_value): New deletable varray.
! 	(alias_invariant_size): New variable.
! 	(REG_BASE_VALUE): Update to use varray.
! 	(find_base_value): Likewise.
! 	(record_set): Likewise.
! 	(record_base_value): Likewise.
! 	(memrefs_conflict_p): Likewise.
! 	(record_set): Likewise
! 	(record_base_value): Likewise.
! 	(memrefs_conflict_p): Use alias_invariant_size.
! 	(init_alias_analysis): Use varray; set alias_invariant_size;
! 	rescale other arrays to be sized by maxreg.
! 	(end_alias_analysis): Save reg_base_value; clear alias_invariant_size.
! 
! 	* basic-block.h (PROP_POSTRELOAD): New macro.
! 	(CLEANUP_LOG_LINKS): New.
! 	* cfgcleanup.c (cleanup_cfg): Only PROP_LOG_LINKS when asked to.
! 	* toplev.c (rest_of_handle_life):  Preserve LOG_LINKS trought cleanup_cfg.
! 
! 	* alloc-pool.c: Include hashtab.h
! 	(alloc_pool_descriptor): New structure
! 	(alloc_pool_hash): New global variable.
! 	(hash_descriptor, eq_descriptor, alloc_pool_descriptor): New.
! 	(create_alloc_pool): Update statistics.
! 	(free_alloc_pool): Likewise.
! 	(pool_alloc): Likewise.
! 	(output_info): New structure
! 	(print_statistics, dump_alloc_pool_statistics): New function.
! 	* alloc-pool.h (alloc_pool_def): Turn name to be constant.
! 	(dump_alloc_pool_statistics): Declare.
! 	* toplev.c (finalize):  Dump statistics.
! 
! 	* varray.c:  Include hashtab.h
! 	(varray_descriptor): New structure.
! 	(hash_descriptor, eq_descriptor, varray_descriptor,
! 	print_statistics): New static functions
! 	(varray_init, varray_grow): Update statistics
! 	(dump_varray_statistics): New function.
! 	* varray.h (dump_varray_statistics): Declare.
! 	* toplev.c (finalize): Call it.
! 
! 2004-01-30  Ulrich Weigand  <uweigand@de.ibm.com>
! 
! 	* configure.ac (gcc_cv_as_dwarf2_debug_line): Enable test for
! 	s390*-*-* targets by specifying a 'nop' insn.
! 	* configure: Regenerate.
  
! 2004-01-30  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	PR target/11475
! 	* config/sparc/sparc.md (movhi_lo_sum): Tighten predicates.
  
! 2004-01-29  Bruce Korb  <bkorb@gnu.org>
  
! 	* fixinc/inclhack.def(math_exception): bypass only for glibc.
! 	(matherr_decl): rename & relocate as exception_structure.
! 	This fix must precede the math_exception fix.
! 	* fixinc/fixincl.x: regen
  
! 2004-01-29  Richard Henderson  <rth@redhat.com>
  
! 	* c-parse.in (extension): Use itype.
! 	(SAVE_EXT_FLAGS): Don't allocate a tree.
! 	(RESTORE_EXT_FLAGS): Don't read a tree.
  
! 2004-01-29  Giovanni Bajo  <giovannibajo@gcc.gnu.org>
  
! 	* c-lex.c (c_lex): Rename to...
! 	(c_lex_with_flags): Add new parameter to get CPP flags.
! 	(c_lex): Thunk to c_lex_with_flags while keeping the old interface.
! 	* c-pragma.h (c_lex_with_flags): Declare.
  
! 2004-01-29  Roger Sayle  <roger@eyesopen.com>
  
! 	PR java/13824
! 	* tree.c (unsafe_for_reeval): Handle EXIT_BLOCK_EXPR nodes specially
! 	as their EXIT_BLOCK_LABELED_BLOCK operands can lead to unbounded
! 	recursion.
  
! 2004-01-28  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
  
! 	* pa.md: Change predicate of a peephole2 pattern from reg_or_0_operand
! 	to register_operand.
  
! 2004-01-28  Zack Weinberg  <zack@codesourcery.com>
  
! 	* config/ia64/ia64.md (fetchadd_acq_si, fetchadd_acq_di)
! 	(cmpxchg_acq_si, cmpxchg_acq_di): Exchange match_dup and
! 	match_operand expressions so that all match_dups appear
! 	lexically after their corresponding match_operands.
  
! 2004-01-28  Zack Weinberg  <zack@codesourcery.com>
! 	    Jim Wilson  <wilson@specifixinc.com>
  
! 	* config/ia64/ia64.c (ia64_split_tmode, ia64_split_tmode_move):
! 	Rewrite to use POST_INC/POST_DEC/POST_MODIFY instead of a
! 	scratch pointer.
! 	(ia64_secondary_reload_class): Delete case GR_REGS.
! 	* config/ia64/ia64.md (movti, *movti_internal, movtf, *movtf_internal):
! 	Do not allocate a scratch register.
! 	(reload_inti, reload_outti, reload_intf, reload_outtf): Delete.
  
! 2004-01-27  Zack Weinberg  <zack@codesourcery.com>
  
! 	* ia64.c (ia64_function_arg): When placing HFAs in integer
! 	registers, do not special case the mode used for complex
! 	types.  Do not advance int_regs until the current register
! 	is full.
  
! 2004-01-28  Jan Hubicka  <jh@suse.cz>
  
! 	* function.c (allocate_struct_function): Do not initialize expr, emit
! 	and varasm.
! 	(prepare_function_start): Do it here.
! 	* c-parse.in (maybe_type_qual): Do not produce line number notes.
  
! 2004-01-28  Richard Sandiford  <rsandifo@redhat.com>
  
! 	* config/fp-bit.c (pack_d): When using paired doubles to implement
! 	a long double, round the high part separately.
! 	(unpack_d): Fix the case in which the high part is a power of two
! 	and the low part is a nonzero value of the opposite sign.
  
! 2004-01-27  Roger Sayle  <roger@eyesopen.com>
  
! 	* config/pa/pa.c (emit_move_sequence): Check that operand1 is a
! 	CONST_INT before using INTVAL.
  
! 2004-01-27  Ulrich Weigand  <uweigand@de.ibm.com>
  
! 	* config/s390/s390.h (TARGET_DEFAULT): Default to !TARGET_BACKCHAIN.
! 	* config/s390/s390.c (s390_return_addr_rtx): Fail for all but current
! 	frame if !TARGET_BACKCHAIN.
! 	* config/s390/s390.md ("allocate_stack"): Use pattern only if
! 	TARGET_BACKCHAIN.
! 	* doc/invoke.texi (-mbackchain/-mno-backchain): Document new default.
  
! 2004-01-27  Richard Sandiford  <rsandifo@redhat.com>
  
! 	PR target/7297
! 	* except.c (init_eh): Use a 5-word __jbuf for __builtin_setjmp().
  
! 2004-01-27  Bob Wilson  <bob.wilson@acm.org>
  
! 	* config/xtensa/xtensa.c (xtensa_copy_incoming_a7): Remove SUBREG
! 	on CQImode and CHImode incoming arguments in register a7.
! 	(function_arg): Wrap BLKmode argument in register a7 in a PARALLEL.
! 	* config/xtensa/xtensa.h (BLOCK_REG_PADDING): Define.
! 	* config/xtensa/xtensa.md (movdi, movdf): Only call force_reg or
! 	xtensa_copy_incoming_a7 before reload.
  
! 2004-01-27  Ian Lance Taylor  <ian@wasabisystems.com>
  
! 	* config/arm/arm.c (output_return_instruction): Only restore IP
! 	into SP if frame_pointer_needed.
  
! 2004-01-27  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	* config/sparc/sparc.c (function_arg_pass_by_reference): Return 1
! 	for SCmode and DCmode if ARCH32.
! 	(sparc_va_arg): Handle SCmode and DCmode by reference if ARCH32.
! 	* config/sparc/sparc.h (RETURN_IN_MEMORY): Return 0 for TCmode
! 	if ARCH32.
! 	(BASE_RETURN_VALUE_REG): Return 32 for all FP modes except TFmode
! 	if ARCH32.
! 	(BASE_OUTGOING_VALUE_REG): Likewise.
  
! 2004-01-27  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	PR target/10904
! 	PR target/13058
! 	* config/sparc/sparc.h (CANNOT_CHANGE_MODE_CLASS): New.
! 	Forbid mode changes from SImode for lower FP regs if ARCH64.
  
! 2004-01-27  Jakub Jelinek  <jakub@redhat.com>
  
! 	* config/i386/i386.c (ix86_constant_alignment): Decrease alignment
! 	of long string literals from 32 bytes to sizeof (void *) when !-Os
! 	and to 1 with -Os.
  
! 2004-01-27  Kaz Kojima  <kkojima@gcc.gnu.org>
  
! 	PR optimization/13567
! 	* cse.c (cse_basic_block): Call cse_insn with a non-null
! 	libcall_insn for the last SET insn of a no-confilict block.
  
! 2004-01-26  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
  
! 	* system.h (CHAR_BITFIELD): Delete.
! 	(BOOL_BITFIELD): New.
! 	* c-decl.c (c_scope): Use BOOL_BITFIELD.
! 	* gengtype-lex.l: Recognize BOOL_BITFIELD instead of CHAR_BITFIELD.
  
! 2004-01-26  J"orn Rennecke <joern.rennecke@superh.com>
  
! 	* doc/tm.texi: Insert some weasel words when LOAD_EXTEND_OP
! 	may or may not return non-NIL.
! 	* postreload.c (reload_cse_simplify_operands): In LOAD_EXTEND_OP code,
! 	check CANNOT_CHANGE_MODE_CLASS
  
! 2004-01-26  Jeff Law  <law@redhat.com>
  
! 	* doc/contrib.texi: Minor cleanup for Paolo Carlini's entry.  Add
! 	acute accents for Petur Runolfsson's entry.
  
  
! 2004-01-26  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	Backport from mainline:
  
! 	2004-01-23  Eric Botcazou  <ebotcazou@act-europe.fr>
! 		    Olivier Hainque  <hainque@act-europe.fr>
  
! 	* fold-const.c (fold_binary_op_with_conditional_arg): Only
! 	build a COMPOUND_EXPR if 'arg' is really a SAVE_EXPR.
  
! 2004-01-26  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	PR target/13666
! 	* config/sparc/sparc.c (function_arg_union_value): New function.
! 	(function_arg): Use it to deal with unions.
! 	(function_value): Likewise.  Define 'regbase' only for ARCH64.
! 	Replace a conditional statement by a simpler one.
  
! 2004-01-26  Richard Sandiford  <rsandifo@redhat.com>
  
! 	* config/mips/mips.c (mips16_optimize_gp): Delete.
! 	(mips_reorg): Don't call it.
  
! 2004-01-25  Richard Sandiford  <rsandifo@redhat.com>
  
! 	* config/mips/mips.c (mips_offset_within_object_p): New function.
! 	(mips_symbolic_constant_p): Use it in the SYMBOL_SMALL_DATA and
! 	SYMBOL_CONSTANT_POOL cases.  Also use it for SYMBOL_GENERAL if the
! 	ABI has 64-bit pointers and the object file only allows 32-bit symbols.
  
! 2004-01-25  Eric Botcazou  <ebotcazou@act-europe.fr>
  
! 	PR bootstrap/13853
! 	* cfgcleanup.c (try_optimize_cfg): Explicitly test against 0.
  
! 2004-01-25  Richard Sandiford  <rsandifo@redhat.com>
  
! 	* config/mips/mips-protos.h (mips_reg_mode_ok_for_base_p): Delete.
! 	(mips_regno_mode_ok_for_base_p): Declare.
! 	* config/mips/mips.h (ARG_POINTER_REGNUM): Renumber to 77.
! 	(FRAME_POINTER_REGNUM): Renumber to 78.
! 	(FIRST_PSEUDO_REGISTER): Update comment accordingly.
! 	(BASE_REG_P, GP_REG_OR_PSEUDO_STRICT_P): Delete.
! 	(GP_REG_OR_PSEUDO_NONSTRICT_P): Delete.
! 	(REGNO_MODE_OK_FOR_BASE_P): Use mips_regno_mode_ok_for_base_p.
! 	(REG_MODE_OK_FOR_BASE_P): Likewise.
! 	* config/mips/mips.c (mips_reg_names, mips_sw_reg_names): Change
! 	entry for 77 to "$arg" and entry for 78 to "$frame".
! 	(mips_regno_to_class): Map 77 and 78 to ALL_REGS.
! 	(mips_reg_mode_ok_for_base_p): Remove.
! 	(mips_regno_mode_ok_for_base_p): New function, derived from old
! 	BASE_REG_P macro.  Don't enforce the mips16 stack pointer
! 	restrictions unless we're being strict.
! 	(mips_valid_base_register_p): Use mips_regno_mode_ok_for_base_p.
  
! 2004-01-24  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* doc/frontends.texi: Update copyright.
! 	* doc/gcov.texi: Likewise.
! 	* doc/gty.texi: Likewise.
! 	* doc/sourcebuild.texi: Likewise.
  
! 2004-01-24  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* config/h8300/coff.h: Update copyright.
! 	* config/h8300/elf.h: Likewise.
! 	* config/h8300/h8300-protos.h: Likewise.
! 	* config/h8300/h8300.c: Likewise.
! 	* config/h8300/h8300.h: Likewise.
! 	* config/h8300/h8300.md: Likewise.
  
! 2004-01-24  Hartmut Penner <hpenner@de.ibm.com>
  
! 	PR target/13674
! 	* config/rs6000/rs6000.md (movdf_hardfloat64): Do not disparage
! 	loading into GPR.
  
! 2004-01-24  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
  
! 	PR optimization/12440
! 	* loop.c: Include ggc.h.
! 	(loop_optimize): Run garbage collector between optimization of loops.
! 	* Makefile.in (loop.o): Add GGC_H dependency.
  
! 2004-01-24  Jakub Jelinek  <jakub@redhat.com>
  
! 	* simplify-rtx.c (simplify_relational_operation): Don't
! 	simplify address == constant into address + -constant == 0.
  
! 2004-01-24  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* gcc.c (process_command): Don't internationalize the
! 	Copyright message.
! 	* mips-tfile.c (main): Likewise.
  
! 2004-01-23  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* recog.c: Fix a typo in copyright.
  
! 2004-01-23  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* alias.c, basic-block.h, c-common.c, c-common.h,
! 	c-cppbuiltin.c, c-pragma.c, c-pretty-print.c, c-semantics.c,
! 	calls.c, cfg.c, cfgcleanup.c, cfgrtl.c, cgraph.h, collect2.c,
! 	combine.c, cppcharset.c, cpptrad.c, cse.c, cselib.c, cselib.h,
! 	defaults.h, df.c, dominance.c, et-forest.c, expmed.c, expr.c,
! 	expr.h, fold-const.c, function.h, gcc.c, gcse.c, genattrtab.c,
! 	genautomata.c, genconditions.c, genflags.c, gengtype.c,
! 	genopinit.c, genrecog.c, gensupport.c, ggc-zone.c, graph.c,
! 	haifa-sched.c, integrate.c, langhooks-def.h, langhooks.c,
! 	langhooks.h, local-alloc.c, optabs.c, optabs.h, postreload.c,
! 	ra.h, recog.c, reg-stack.c, regmove.c, reload.c, reorg.c,
! 	rtlanal.c, sched-deps.c, sched-ebb.c, sdbout.c, system.h,
! 	target.h, targhooks.c, toplev.h, tree-inline.c,
! 	unwind-dw2-fde.h, unwind-pe.h, unwind.h, varray.c, varray.h:
! 	Update copyright.
  
! 2004-01-23  Bob Wilson  <bob.wilson@acm.org>
  
! 	* config/xtensa/xtensa.c (xtensa_va_arg): Handle complex values as
! 	separate real and imaginary parts.
! 	* config/xtensa/xtensa.h (SPLIT_COMPLEX_ARGS): Define.
  
! 2004-01-23  Richard Henderson  <rth@redhat.com>
  
! 	PR opt/12941
! 	* combine.c (SHIFT_COUNT_TRUNCATED): Provide default value.
! 	(simplify_comparison): Don't simplify (eq (zero_extract c 1 r) 0)
! 	if SHIFT_COUNT_TRUNCATED is set.
  
! 2004-01-23  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
  
! 	* fixinc/inclhack.def (alpha___extern_prefix): Renamed to ...
! 	(alpha___extern_prefix_sys_stat): ... this.
! 	Apply to <sys/mount.h>, too.
! 	Tweak to match more variations.
! 	* fixinc/tests/base/sys/stat.h: Adapt for new hackname.
  
! 	* fixinc/inclhack.def (alpha___extern_prefix,
! 	alpha___extern_prefix_standards): New hacks to obey
! 	__PRAGMA_EXTERN_PREFIX.
! 	* fixinc/tests/base/testing.h [ALPHA___EXTERN_PREFIX_CHECK]: New
! 	test.
! 	* fixinc/tests/base/standards.h: Likewise.
  
! 	* fixincl/inclhack.def (alpha_pthread): Tweak to match more
! 	variations.
! 	New testcase.
! 	* fixinc/tests/base/pthread.h: Handle it.
  
! 	* fixinc/fixincl.x: Regenerate.
  
! 2004-01-23  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
  
! 	* fixinc/inclhack.def (bad_lval): Renamed to ...
! 	(alpha_bad_lval): ... this.
! 	Removed file list.
! 	Restrict to alpha*-dec-osf*.
! 	* fixinc/fixincl.x: Regenerate.
! 	* fixinc/tests/base/libgen.h: Remove, moving test ...
! 	* fixinc/tests/base/testing.h: ... here, reflecting new name.
  
! 2004-01-23  Ian Lance Taylor  <ian@wasabisystems.com>
  
! 	* doc/invoke.texi (Optimize Options): Note that --param arguments
! 	are subject to change without notice.
  
! 2004-01-23  Zack Weinberg  <zack@codesourcery.com>
  
! 	PR c/13814
! 	* c-decl.c (diagnose_mismatched_decls): Also discard a
! 	built-in if we encounter an old-style definition with the
! 	same name.
  
! 2004-01-23  Jakub Jelinek  <jakub@redhat.com>
  
! 	* config.gcc (powerpc*-*): Clear $with_cpu or $with_tune if it was
! 	set to default{32,64}.
  
! 2004-01-21  Jakub Jelinek  <jakub@redhat.com>
  
! 	* config/rs6000/linux64.h (MD_FALLBACK_FRAME_STATE_FOR)
! 	[!__powerpc64__]: Corrected to handle kernels with changed ucontext.
  
! 2003-11-30  Jan Hubicka  <jh@suse.cz>
  
! 	* i386.c (ix86_emit_restore_regs_using_mov):  Deal with large offsets.
  
! 2004-01-23  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	* config/sparc/sparc.c (scan_record_type): New function.
! 	(function_arg_slotno): Use it to determine which kinds of
! 	registers the record can be passed in.
  
! 2004-01-22  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
  
! 	* configure.ac (enable_werror): Fixed typo.
! 	* configure: Regenerate.
  
! 2004-01-22  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
  
! 	* config.gcc (mips-sgi-irix6*o32): Removed.
! 	* config/mips/iris6-o32-as.h: Likewise.
! 	* config/mips/iris6-o32-gas.h: Likewise.
! 	* config/mips/iris6-o32.h: Likewise.
  
! 2004-01-22  Bob Wilson  <bob.wilson@acm.org>
  
! 	* config/xtensa/xtensa.c (function_arg): Generalize logic so that it
! 	handles complex and vector modes.
  
! 2004-01-22  Daniel Jacobowitz  <drow@mvista.com>
  
! 	* c-semantics.c (genrtl_while_stmt, genrtl_do_stmt_1)
! 	(genrtl_for_stmt): Remove emit_nop calls.
  
! 2004-01-22  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
  
! 	PR target/13713
! 	PR target/13324
! 	* pa.md (movstrsi_prereload, movstrsi_postreload, movstrdi_prereload,
! 	movstrdi_postreload, clrstrsi_prereload, clrstrsi_postreload,
! 	clrstrdi_prereload, clrstrdi_postreload): Fix constraints.
  
! 2004-01-22  Daniel Jacobowitz  <drow@mvista.com>
  
! 	* config/arm/arm.c: Include "debug.h".
! 	(thumb_pushpop): Take two new arguments.  Add some commentary.
! 	Output frame information when pushing.
! 	(thumb_exit, thumb_unexpanded_epilogue): Update calls to
! 	thumb_pushpop.
! 	(thumb_output_function_prologue): Likewise.  Accumulate a CFA
! 	offset, and pass it to thumb_pushpop.  Output CFI information.
! 	(thumb_expand_prologue): Add some frame-related markers and notes.
  
! 2004-01-22  Ulrich Weigand  <uweigand@de.ibm.com>
  
! 	* config/s390/s390.c (s390_frame_info): Allow large frame sizes
! 	for TARGET_64BIT.
! 	(s390_arg_frame_offset): Change return type to HOST_WIDE_INT.
! 	* config/s390/s390-protos.h (s390_arg_frame_offset): Likewise.
  
! 2004-01-22  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* doc/tm.texi (CASE_VECTOR_PC_RELATIVE): Mention that the
! 	macro need not be defined if jump-tables should contain
! 	relative addresses only when -fPIC or -fPIC is in effect.
  
! 2004-01-22  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	* config/sparc/sparc.c (function_arg_slotno): Use
! 	FLOAT_TYPE_P to detect FP fields in structures.
! 	(function_arg_record_value_1): Likewise.
! 	(function_arg_record_value_2): Likewise.
  
! 2004-01-22  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	PR target/13559
! 	* config/sparc/sparc.c (function_arg_record_value_3): Revert
! 	to 'word_mode' once the first slot has been filled.
  
! 2004-01-22  Olivier Hainque  <hainque@act-europe.fr>
  
! 	* config/sparc/sparc.c (function_arg_record_value_1): Fix
! 	computation of the number of integer registers required.
  
! 2004-01-22  Hartmut Penner  <hpenner@de.ibm.com>
  
! 	* gcc/config/rs6000/rs6000.c (function_arg) Handle
! 	vector register special in function without prototype.
! 	(function_arg_advance): Vector parameters get always
! 	GPRs allocated for the linux64 target.
  
! 2004-01-21  Andrew Pinski  <apinski@apple.com>
  
! 	PR target/13785
! 	* config/rs6000/rs6000.md (call_value): Force operand
! 	1 not operand 0 into a register.
  
! 2004-01-21  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
  
! 	* pa-protos.h: Update copyright.
! 	* pa.h: Likewise.
! 	* pa.md: Likewise.
  
! 	* fixinc/inclhack.def (hpux10_stdio_declarations, ultrix_const3,
! 	ultrix_locale, ultrix_stdlib, ultrix_strings, ultrix_sys_time,
! 	ultrix_unistd): New hacks.
! 	* fixinc/tests/base/stdio.h (HPUX10_STDIO_DECLARATIONS_CHECK,
! 	ULTRIX_CONST2_CHECK): Add checks.
! 	* fixinc/tests/base/stdlib.h (ULTRIX_STDLIB_CHECK): Likewise.
! 	* fixinc/tests/base/strings.h (ULTRIX_STRINGS2_CHECK): Likewise.
! 	* fixinc/tests/base/unistd.h (ULTRIX_UNISTD_CHECK): Likewise.
! 	* fixinc/tests/base/sys/time.h (ULTRIX_SYS_TIME_CHECK): Likewise.
! 	* fixinc/tests/base/locale.h: New file.
! 	* fixincl.x: Rebuilt.
  
! 2004-01-21  Andreas Jaeger  <aj@suse.de>
! 	    Michael Matz  <matz@suse.de>
  
! 	* doc/extend.texi (Extended Asm): Clarify memory clobber.
  
! 2004-01-21  Zack Weinberg  <zack@codesourcery.com>
  
! 	* c-decl.c (merge_decls): Kill different_binding_level and
! 	different_tu arguments; simplify throughout.
! 	(duplicate_decls): Likewise.
! 	(pushdecl, merge_translation_unit_decls): Update calls to
! 	duplicate_decls.
  
! 2004-01-20  Kelley Cook  <kcook@gcc.gnu.org>
  
! 	PR bootstrap/12730
! 	* configure.ac: Delete definition and subsitution of docdir.
! 	Add info, man, srcman and srcinfo to target hooks. Create doc/
! 	directory.
! 	* configure: Regenerate.
! 	* Makefile.in: Don't substitute docdir and delete all references
! 	throughout.
! 	(MAKEINFOFLAGS): Define.
! 	(stmp-docobjdir): Delete.
! 	(INFOFILES, MANFILES): Define.
! 	(info): Call lang.info, srcinfo and lang.srcinfo.
! 	(generated-manpages): Call lang.man, srcman and lang.srcman.
! 	(srcinfo, srcman): New rules to copy back files to source directory.
! 	(doc/%.info, doc/%.dvi, doc/%.1, doc/%.7): New implict rule.
! 	(install-man): Revamp rule.
! 	(clean): Update dvi directory.
! 	(distclean): Delete TAGS from front end directorys.
! 	(maintainer-clean): Delete all document files in source directory.
  
! 	objc/Make-lang.in (objc.man, objc.info): Dummy entries.
! 	(objc.srcman, objc.srcinfo): Likewise.
  
! 2004-01-20  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
  
! 	* Makefile.in (pretty-print.o): Depend on $(CONFIG_H) and
! 	$(SYSTEM_H).
! 	(print-rtl1.o): Depend on $(SYSTEM_H).
  
! 2004-01-20  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
  
! 	* pa-protos.h (compute_frame_size): Use HOST_WIDE_INT for frame sizes.
! 	* pa.c (store_reg, store_reg_modify, load_reg, set_reg_plus_d):
! 	Likewise.  Handle frames larger than 0x7fffffff on 64-bit ports.
! 	(emit_move_sequence): Check scratch_reg first in various if statements.
! 	Extend source simplification to handle all 64-bit CONST_INTs.
! 	(pa_output_function_prologue): Use HOST_WIDE_INT_PRINT_DEC for printing
! 	frame size.
! 	(hppa_expand_prologue, hppa_expand_epilogue): Use HOST_WIDE_INT for
! 	frame offset calculations.
! 	* pa.h (NEW_HP_ASSEMBLER): Add comment.
! 	(MAX_LEGIT_64BIT_CONST_INT, MIN_LEGIT_64BIT_CONST_INT,
! 	LEGITIMATE_64BIT_CONST_INT_P): Define.
! 	(LEGITIMATE_CONSTANT_P): Use LEGITIMATE_64BIT_CONST_INT_P.  Treat
! 	any CONST_INT as legitimate during and after reload.
! 	(VAL_32_BITS_P, INT_32_BITS): Define.
! 	(LEGITIMIZE_RELOAD_ADDRESS): Handle large frame offsets.
  
! 2004-01-21  Alan Modra  <amodra@bigpond.net.au>
  
! 	* config/rs6000/sysv4.h (DWARF2_FRAME_REG_OUT): Define.
! 	* dwarf2out.c (output_cfi): Map regs using DWARF2_FRAME_REG_OUT.
! 	* doc/tm.texi (DWARF_FRAME_REGNUM, DWARF2_FRAME_REG_OUT): Document.
  
! 2004-01-20  Geoffrey Keating  <geoffk@apple.com>
  
! 	* alias.c (new_alias_set): Mark last_alias_set for PCH.
! 	(get_varargs_alias_set): Rename 'set' to 'varargs_set' and mark it
! 	for PCH.
! 	(get_frame_alias_set): Likewise, except rename it to 'frame_set'.
! 	* config/rs6000/rs6000.c (rs6000_sr_alias_set): Mark for PCH.
! 	(get_TOC_alias_set): Mark 'set' for PCH.
  
! 2004-01-20  Richard Sandiford  <rsandifo@redhat.com>
  
! 	* config/mips/mips.c (mips_load_call_address): Make the call insn
! 	use $gp if it could be calling a lazy binding stub.
  
! 2004-01-20  Denis Chertykov  <denisc@overta.ru>
  
! 	PR bootstrap/13735
! 	* config/avr/avr.h (BASE_REG_CLASS): Don't permit to use X
! 	register as pointer after reload.
  
! 2004-01-20  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	PR target/13557
! 	* config/sparc/sparc.c (function_arg): Reorder the cases.
  
! 2004-01-19  Kelley Cook  <kcook@gcc.gnu.org>
  
! 	* Makefile.in (target_noncanonical, program_transform_name): Use
! 	immediate define instead of deferred.
! 	(GCC_INSTALL_NAME, GCC_TARGET_INSTALL_NAME, CPP_INSTALL_NAME,
! 	PROTOIZE_INSTALL_NAME, UNPROTOIZE_INSTALL_NAME, GCOV_INSTALL_NAME,
! 	GCCBUG_INSTALL_NAME): Define via a immediate $(shell) instead of
! 	deferred backquote.
  
! 2004-01-19  Richard Henderson  <rth@redhat.com>
  
! 	* config/alpha/alpha.c (aligned_memory_operand): Check MEM_ALIGN,
! 	don't check memory mode.
! 	(unaligned_memory_operand): Likewise.
! 	(reload_inqi, reload_inhi, reload_outqi, reload_outhi): Don't
! 	abort for op0 not MEM.
  
! 	* config/alpha/alpha.c (alpha_expand_mov_nobwx): If the destination
! 	is not a reg, copy to a scratch first.
! 	(aligned_loadqi, aligned_loadhi, unaligned_loadqi, unaligned_loadhi,
! 	unaligned_loadqi_le, unaligned_loadqi_be, unaligned_loadhi_le,
! 	unaligned_loadhi_be): Expect op0 in DImode; don't SUBREG.
! 	(reload_inqi, reload_inhi): Fix mode of op0.
! 	(reload_inqi_help, reload_inhi_help, reload_outqi_help,
! 	reload_outhi_help): Likewise.  Use define_insn_and_split.
  
! 	* config/alpha/alpha.md (call peepholes): Check for REG_NORETURN
! 	as well as $29 dead.
  
! 2004-01-19  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	* config/sparc/sol2.h (ASM_DECLARE_OBJECT_NAME): New.  Emit
! 	"tls_object" for thread-local objects.
! 	* config/sparc/sparc.c (sparc_elf_asm_named_section): Emit
! 	"#tls" for thread-local sections.
! 	* configure.ac (thread-local checks): Specify --fatal-warnings in
! 	every binutils-specific checks.  For sparc*-*-*, test whether the
! 	OS is Solaris and the tools are native and act accordingly.
! 	* configure: Rebuild.
  
! 2004-01-19  Jeff Law  <law@redhat.com>
  
! 	* contrib.texi: Update Paolo Carlini's entry.  New entries for
! 	Jerry Quinn and Petur Runolfsson.
  
! 2004-01-19  Richard Henderson  <rth@redhat.com>
  
! 	* alpha.h (HARD_REGNO_MODE_OK): Disallow SImode in FP regs.
! 	* alpha.md (UNSPEC_NT_LDA): Remove.
! 	(UNSPEC_CVTLQ, cvtlq): New.
! 	(extendsidi2_1): Rename from extendsidi2_nofix; remove f/f.
! 	(extendsidi2_fix): Remove.
! 	(extendsidi2 splitter): Use cvtlq.
! 	(extendsidi2 fp peepholes): Remove.
! 	(cvtql): Use SFmode instead of SImode.
! 	(fix_trunc?fsi): Update to match.
! 	(floatsisf2_ieee, floatsisf2, floatsidf2_ieee, floatsidf2): New.
! 	(movsi): Rename from movsi_nofix, remove f alternatives.
! 	(movsi_nt_vms): Similarly.
! 	(movsi_fix, movsi_nt_vms_fix): Remove.
! 	(nt_lda): Remove.
! 	* alpha.c (alpha_expand_prologue): Use adddi3, not nt_lda.
  
! 2004-01-19  Jan Hubicka  <jh@suse.cz>
  
! 	* cgraph.c (cgraph_remove_node): Fix removal from linked list.
! 	* cgraphunit.c (cgraph_finalize_compilation_unit): Clear next_needed
  	list.
- 	(cgraph_remove_unreachable_nodes): New function
- 	(cgraph_decide_inlining_of_small_function): Fix pasto.
- 	(cgraph_decide_inlining_incrementally): Fix pasto.
- 	(cgrpah_decide_inlining): Likewise; remove unreachable nodes.
- 
- 2004-01-18  Roger Sayle  <roger@eyesopen.com>
- 
- 	* builtins.c (expand_builtin_expect_jump): Fix thinko of reusing
- 	live "next" variable, which can lead to an infinite loop.
- 
- 2004-01-18  Daniel Jacobowitz  <drow@mvista.com>
- 
- 	* final.c (final_scan_insn): Make non-static again.
- 	* output.h (final_scan_insn): Re-add prototype.
- 	* config/arc/arc.c (arc_output_function_epilogue): Add NULL
- 	to final_scan_insn call.
- 	* config/cris/cris.c (cris_target_asm_function_epilogue): Likewise.
- 	* config/mips/mips.c (mips_output_conditional_branch): Likewise.
- 	* config/pa/pa.c (output_lbranch, output_call): Likewise.
- 	* config/sh/sh.c (print_slot): Likewise.
- 	* config/sparc/sparc.c (sparc_nonflat_function_epilogue): Likewise.
- 	(output_sibcall, sparc_flat_function_epilogue): Likewise.
- 
- 2004-01-18  Jan Hubicka  <jh@suse.cz>
- 
- 	* basic-block.h (try_redirect_by_replacing_jump): Declare.
- 	* cfgcleanup.c (try_optimize_cfg): Use it.
- 	* cfgrtl.c (try_redirect_by_replacing_jump): Export.
- 	(rtl_redirect_edge_and_branch, cfg_layout_redirect_edge_and_branch):
- 	Kill hack.
- 	(cfg_layout_merge_blocks): Use try_redirect_by_replacing_jump.
  
! 2004-01-18  Andrew Pinski  <pinskia@physics.uc.edu>
  
! 	* config/rs6000/altivec.h: Wrap C++ functions in extern "C++"
! 	block.
  
! 	* config/rs6000/rs6000.c (rs6000_special_round_type_align):
! 	Check for NULL in the chain and remove repeated code.
  
! 2004-01-18  Jan Hubicka  <jh@suse.cz>
  
! 	* coverage.c (checksum_string): Rename to ...
! 	(coverage_checksum_string): ... this one, Use crc32_string; recognize
! 	names containing random number and zero the number out in order to get
! 	match.
  
! 2004-01-18  Richard Sandiford  <rsandifo@redhat.com>
  
! 	* config/mips/mips.c (mips_got_alias_set): Mark for PCH.
  
! 2004-01-18  Joseph S. Myers  <jsm@polyomino.org.uk>
  
! 	* doc/c-tree.texi, doc/cpp.texi, doc/extend.texi,
! 	doc/frontends.texi, doc/gcov.texi, doc/gty.texi, doc/install.texi,
! 	doc/invoke.texi, doc/libgcc.texi, doc/md.texi, doc/rtl.texi,
! 	doc/sourcebuild.texi, doc/standards.texi, doc/tm.texi,
! 	doc/trouble.texi: Remove trailing whitespace.
  
! 2004-01-18  Richard Sandiford  <rsandifo@redhat.com>
  
! 	PR target/7618
! 	* config/mips/mips.c: Include cfglayout.h.
! 	(TARGET_ASM_OUTPUT_MI_THUNK, TARGET_ASM_CAN_OUTPUT_MI_THUNK): Define.
! 	(mips_unspec_offset_high): Add temporary register argument.
! 	(mips_load_call_address): New function, split out from...
! 	(mips_expand_call): ...here.
! 	(mips_output_cplocal): New function.
! 	(mips_output_function_prologue, mips_output_function_epilogue): Use it.
! 	(mips_emit_loadgp): New function, split out from...
! 	(mips_expand_prologue): ...here.
! 	(mips_output_mi_thunk): New function.
  
! 2004-01-17  Roger Sayle  <roger@eyesopen.com>
  
! 	* builtins.c (expand_builtin_expect_jump): Fix mistake in my
! 	last patch.  Use XEXP (x, 0) to get a LABEL_REF's CODE_LABEL.
  
! 2004-01-17  Andrew Pinski  <pinskia@physics.uc.edu>
  
! 	* config/rs6000/rs6000.c (rs6000_special_round_type_align):
! 	Return type is unsigned int not int.
! 	* config/rs6000/rs6000-protos.h (rs6000_special_round_type_align):
! 	Likewise.
  
! 2004-01-18  Joseph S. Myers  <jsm@polyomino.org.uk>
  
! 	* doc/contrib.texi, doc/cppenv.texi, doc/extend.texi,
! 	doc/install.texi, doc/invoke.texi, doc/tm.texi: Consistently use
! 	"GNU/Linux" and "Microsoft Windows" terminology.
  
! 2004-01-18  Joseph S. Myers  <jsm@polyomino.org.uk>
  
! 	* doc/c-tree.texi, doc/compat.texi, doc/cpp.texi,
! 	doc/cppopts.texi, doc/extend.texi, doc/install.texi,
! 	doc/interface.texi, doc/invoke.texi, doc/libgcc.texi, doc/md.texi,
! 	doc/objc.texi, doc/rtl.texi, doc/tm.texi, doc/trouble.texi: Use
! 	@smallexample instead of @example.
  
! 2004-01-17  Ziemowit Laski  <zlaski@apple.com>
  
! 	* objc/objc-act.c (build_objc_method_call): Use target
! 	hooks instead of macros to determine if ..._stret
! 	dispatchers should be used (NeXT runtime only).
  
! 2004-01-17  Daniel Jacobowitz  <drow@mvista.com>
  
! 	* rtl.h (emit_insn_before_sameloc, emit_jump_insn_before_sameloc)
! 	(emit_call_insn_before_sameloc, emit_insn_after_sameloc)
! 	(emit_jump_insn_after_sameloc, emit_call_insn_after_sameloc): New
! 	macros.
! 	* reload1.c (emit_reload_insns): Use them.
! 	* emit-rtl.c (emit_insn_before_sameloc, emit_insn_after_sameloc)
! 	(emit_jump_insn_after_sameloc, emit_call_insn_after_sameloc): Check
! 	for NULL PATTERN.
  
! 2004-01-17  Daniel Jacobowitz  <drow@mvista.com>
  
! 	* final.c (SEEN_BB, SEEN_NOTE, SEEN_EMITTED): Define.
! 	(final_scan_insn): Update to take an additional SEEN argument.  Emit
! 	a line note after the prologue.  Make static.
! 	(line_note_exists): Remove.
! 	(final): Don't initialize line_note_exists.  Update call to
! 	final_scan_insn.
! 	* output.h (final_scan_insn): Remove prologue.
! 	* function.c (set_insn_locators): Update comment.
! 	(thread_prologue_and_epilogue_insns): Add a comment.
  
! 2004-01-17  Joseph S. Myers  <jsm@polyomino.org.uk>
  
! 	* doc/invoke.texi, doc/standards.texi: Point to 3.4 version of
! 	c99status.html.
  
! 2004-01-17  Andrew Pinski  <pinskia@physics.uc.edu>
  
! 	PR target/10781
! 	* config/rs6000/rs6000-protos.h (rs6000_special_round_type_align):
! 	Prototype.
! 	* config/rs6000/rs6000.c (rs6000_special_round_type_align):
! 	New function.
! 	* config/rs6000/linux64.h (ROUND_TYPE_ALIGN): Use it.
! 	* config/rs6000/aix.h (ROUND_TYPE_ALIGN): Likewise.
! 	* config/rs6000/darwin.h (ROUND_TYPE_ALIGN): Likewise.
  
! 2004-01-17  Jan Hubicka  <jh@suse.cz>
  
! 	* toplev.c (rest_of_handle_reorder_blocks): Fix pasto in previous
! 	commit.
  
! 	* toplev.c (HAVE_conditional_execution): Provide default.
! 	(rest_of_handle_reorder_blocks): For conditional_execution target
! 	update liveness once after all transformations
! 	(rest_of_compilation): Do crossjumping before ce3.
  
! 2004-01-17  J. Brobecker  <brobecker@gnat.com>
  
! 	* dwarf2out.c (is_subrange_type): Renamed from is_ada_subrange_type().
! 	Remove checks for is_ada() and TREE_UNSIGNED.
! 	(subrange_type_die): Emit a byte_size attribute if the subrange
! 	type size is different from the base type size.
! 	(modified_type_die): Replace call to is_ada_subrange_type() by
! 	call to is_subrange_type().
  
! 2004-01-16  Mark Mitchell  <mark@codesourcery.com>
  
! 	* configure.ac: Do not do internal checking or -Werror by default.
! 	* configure: Regenerated.
  
! 	* doc/include/gcc-common.texi (DEVELOPMENT): @clear it.
! 	* version.c (version_string): Mark as prerelease.
  
! 2004-01-16  Andrew Pinski  <pinskia@physics.uc.edu>
  
! 	* config/sh/sh.c: Include ggc.h.
  
! 2004-01-17  Jan Hubicka  <jh@suse.cz>
  
! 	* c-common.c (c_estimate_num_insns_1): Handle builtin_constant_p and
! 	builtin_expect specially.
! 	* params.def (PARAM_MAX_INLINE_INSNS_AUTO): Set to 100.
! 	(PARAM_LARGE_FUNCTION_INSNS): Set to 3000.
! 	* invoke.texi (max-inline-insns-single): Set to 100.
! 	(large-function-insns): Set to 3000.
  
! 2004-01-16  Jan Hubicka  <jh@suse.cz>
  
! 	* i386.md (load_tp_di): Fix pasto.
  
! 	PR opt/13608
! 	* i386.c (ix86_compute_frame_layout): Fix for alloca on leaf function.
  
! 	* c-pretty-print.c (pp_c_type_cast, pp_c_abstract_declarator,
! 	pp_c_character_constant, pp_c_floating_constant,
! 	pp_c_additive_expression, pp_c_shift_expression,
! 	pp_c_equality_expression, pp_c_and_expression,
! 	pp_c_exclusive_or_expression, pp_c_inclusive_or_expression,
! 	pp_c_logical_and_expression): Remove inline modifier.
! 	* dwarf2out.c (get_AT): Likewise.
! 	* et-forest.c (et_splay): Likewise.
! 	* ra.h (ra_alloc, ra_calloc): Likewise
  
! 2004-01-16  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* config/frv/frv-protos.h: Fix comment formatting.
! 	* config/frv/frv.c: Likewise.
! 	* config/frv/frv.h: Likewise.
! 	* config/frv/frv.md: Likewise.
! 	* config/frv/frvbegin.c: Likewise.
! 	* config/frv/frvend.c: Likewise.
  
! 2004-01-16  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* system.h (LINKER_DOES_NOT_WORK_WITH_DWARF2): Poison.
! 	* doc/tm.texi (PREFERRED_DEBUGGING_TYPE): Don't mention
! 	LINKER_DOES_NOT_WORK_WITH_DWARF2.
! 	(LINKER_DOES_NOT_WORK_WITH_DWARF2): Remove.
  
! 2004-01-16  J"orn Rennecke <joern.rennecke@superh.com>
  
! 	PR 11864
! 	* postreload.c (reload_cse_simplify_operands): Don't remove
! 	implicit extension from LOAD_EXTEND_OP.
  
! 2004-01-16  Jan Hubicka  <jh@suse.cz>
  
! 	PR opt/11350
! 	* cfgcleanup.c (try_optimize_cfg): Suppress tablejump removal
! 	after reload.
! 	* cfgrtl.c (rtl_can_merge_blocks, cfglayout_can_merge_blocks,
! 	rtl_try_redirect_by_replacing_branch): Likewise.
  
! 2004-01-15  Geoffrey Keating  <geoffk@apple.com>
  
! 	PR pch/13689
! 	* alias.c (struct alias_set_entry): Mark for GC.
! 	(alias_sets): Make static, mark for GC.
! 	(record_alias_subset): Use GC to allocate alias structures.
! 	* varray.c (element): Make generic varrays GCed.
  
! 	PR pch/13361
! 	* c-typeck.c (constructor_asmspec): Delete.
! 	(struct initializer_stack): Delete field 'asmspec'.
! 	(start_init): Delete saving of asmspec.
! 	(finish_init): Don't update constructor_asmspec.
! 	* dwarf2out.c (rtl_for_decl_location): Duplicate string from tree.
! 	* stmt.c (expand_asm): Duplicate strings from tree.
! 	(expand_asm_operands): Likewise.
! 	* tree.c (tree_size): Update computation of size of STRING_CST.
! 	(make_node): Don't make STRING_CST nodes.
! 	(build_string): Allocate string with tree node.
! 	* tree.def (STRING_CST): Update comment.
! 	* tree.h (TREE_STRING_POINTER): Adjust for change to STRING_CST.
! 	(tree_string): Place contents of string in tree node.
! 	* config/sh/sh.c (sh_handle_sp_switch_attribute): Duplicate string
! 	from tree.
  
! 	* config/rs6000/rs6000.c (rs6000_va_arg): No need to special-case
! 	altivec operands.
  
! 2004-01-15  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* c-common.h: Fix comment formatting.
! 	* c-cppbuiltin.c: Likewise.
! 	* c-pragma.c: Likewise.
! 	* calls.c: Likewise.
! 	* collect2.c: Likewise.
! 	* cppcharset.c: Likewise.
! 	* cpptrad.c: Likewise.
! 	* dbxout.c: Likewise.
! 	* defaults.h: Likewise.
! 	* dwarf2out.c: Likewise.
! 	* fold-const.c: Likewise.
! 	* genautomata.c: Likewise.
! 	* genconditions.c: Likewise.
! 	* genflags.c: Likewise.
! 	* gengtype.c: Likewise.
! 	* integrate.c: Likewise.
! 	* loop.c: Likewise.
! 	* predict.c: Likewise.
! 	* sdbout.c: Likewise.
  
! 2004-01-15  Zack Weinberg  <zack@codesourcery.com>
  
! 	* config/ia64/ia64.md (*movti_internal): C output template
! 	extracted to ia64.c.
! 	(*movti_internal_reg): Delete.
! 	(reload_inti, reload_outti): Use the correct mode on operand 2
! 	in the first place, don't fix it up in the output template.
! 	(movtf, reload_ointf, reload_outtf): New expanders.
! 	(*movtf_internal): New define_insn_and_split.
! 	* config/ia64/ia64.c (ia64_split_timode): Rename to ia64_split_tmode;
! 	make static; do not hand TFmode CONST_DOUBLEs to split_double.
! 	(ia64_split_tmode_move): New function, body mostly pulled
! 	from ia64.md:*movti_internal.
! 	(ia64_function_arg_words): New function, extracted common
! 	logic from ia64_function_arg et seq.
! 	(ia64_function_arg_offset): Likewise.  Handle correctly the
! 	case of a scalar quantity 16 bytes wide with only 8-byte alignment.
! 	(ia64_function_arg, ia64_function_arg_partial_nregs)
! 	(ia64_function_arg_advance): Use ia64_function_arg_words and
! 	ia64_function_arg_offset.
! 	(ia64_function_value): TCmode does not go in float regs.
! 	(ia64_secondary_reload_class): Also handle TFmode.
! 	* config/ia64/ia64-protos.h: Remove prototype for
! 	ia64_split_timode; add prototype for ia64_split_tmode_move.
  
! 2004-01-15  Kelley Cook  <kcook@gcc.gnu.org>
  
! 	* Makefile.in (MAINT): Make it an immediate assignment.
  
! 2004-01-15  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* config/m32r/m32r.md: Remove useless calls to gen_lowpart.
  
! 2004-01-15  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* config/h8300/coff.h: Replace Hitachi with Renesas.
! 	* config/h8300/elf.h: Likewise.
! 	* config/h8300/h8300-protos.h: Likewise.
! 	* config/h8300/h8300.c: Likewise.
! 	* config/h8300/h8300.h: Likewise.
! 	* config/h8300/h8300.md: Likewise.
! 	* config/h8300/lib1funcs.asm: Likewise.
  
! 2004-01-15  Andrew Pinski  <apinski@apple.com>
  
! 	* config/rs6000/rs6000.c (uses_TOC): Wrap #if TARGET_ELF
! 	around it.
  
! 2004-01-15  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* config/h8300/h8300.c (h8300_return_in_memory): New.
! 	(TARGET_STRUCT_VALUE_RTX): Likewise.
! 	(TARGET_RETURN_IN_MEMORY): Likewise.
! 	* config/h8300/h8300.h (STRUCT_VALUE): Remove.
! 	(RETURN_IN_MEMORY): Likewise.
  
! 2004-01-15  Richard Earnshaw  <rearnsha@arm.com>
  
! 	PR optimization/13375
! 	* gcse.c (handle_avail_expr): Just return if the source is not a
! 	single set.
  
! 2004-01-15  Richard Earnshaw  <rearnsha@arm.com>
! 	    Daniel Jacobowitz  <drow@mvista.com>
  
! 	* arm/lib1funcs.asm (ARM_FUNC_START): Correct interworking case.
! 	(EQUIV): Define.
! 	(ARM_FUNC_ALIAS): New macro.
! 	* arm/ieee754-df.S (gedf2, ledf2, nedf2, eqdf2): Use it.
! 	* arm/ieee754-sf.S (gesf2, lesf2, nesf2, eqsf2): Use it.
  
! 2004-01-15  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
  
! 	PR optimization/12372
! 	* calls.c (expand_call): Add call_fusage data for stack arguments in
! 	constant calls.
  
! 2004-01-15  Alan Modra  <amodra@bigpond.net.au>
  
! 	* config/rs6000/rs6000.c (uses_TOC): Correct comment.  Make static.
! 	(rs6000_elf_declare_function_name): Formatting.
! 	* config/rs6000/rs6000-protos.h (uses_TOC): Remove declaration.
  
! 2004-01-15  Jan Hubicka  <jh@suse.cz>
  
! 	PR bootstrap/13692
! 	* sched-deps.c (sched_analyze_1, sched_analyze_2): Fix thinko in
! 	previous patch.
  
! 2004-01-15  Richard Henderson  <rth@redhat.com>
  
! 	* config/alpha/alpha.h (REG_ALLOC_ORDER): Reorder fp regs after
! 	integer regs of the same call-savedness.
  
! 2004-01-15  Andreas Schwab  <schwab@suse.de>
  
! 	PR bootstrap/13562
! 	* config/m68k/m68k.c (output_move_const_into_data_reg): Clear cc
! 	status for NOTB/NOTW/NEGW methods.
  
! 2004-01-15  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* doc/invoke.texi: Update dump file names.  Fix a typo.
  
! 2004-01-15  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* builtins.c (expand_builtin_va_end): Don't use
! 	EXPAND_BUILTIN_VA_END.
! 	* system.h (EXPAND_BUILTIN_VA_END): Poison.
! 	* config/d30v/d30v.h: Remove a commented-out definition of
! 	EXPAND_BUILTIN_VA_END.
! 	* config/stormy16/stormy16.h: Likewise.
  
! 2004-01-15  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* system.h (STRUCT_VALUE_INCOMING_REGNUM): Poison.
! 	* targhooks.c (default_struct_value_rtx): Don't use
! 	STRUCT_VALUE_INCOMING_REGNUM.
  
! 2004-01-15  Kelley Cook  <kcook@gcc.gnu.org>
  
! 	PR bootstrap/12744
! 	* configure.in: Revamp enable-generated-files-in-srcdir rule to define
! 	GENINSRC and not parsedir.  Define srcextra as a langhook.
! 	* configure: Regenerate.
! 	* Makefile.in: Suppress default .l.c rule.  Don't substitute
! 	parsedir and delete all references throughout.  Conditionally define
! 	rule for srcextra dependent on GENINSRC.
! 	(stmp-docobjdir): Delete.
! 	(c-parse.o, gengtype-lex.o, gengtype-yacc.o): Use implicit build rule.
! 	(srcextra): Copy c-parse.y, c-parse.c, gengtype-lex.c, gengtype-yacc.c,
! 	and gengtype-yacc.h back to source directory.
! 	(maintainer-clean): Delete all parse files in source directory.
! 	(distclean): Delete generated files.
  
! 	* objc/Make-lang.in (objc-parse.o): Use implicit build rule.
! 	(objc-parse.c, objc-parse.y): Don't use parsedir.
! 	(objc.srcextra): Copy objc-parse.y and objc-parse.c back to source
! 	directory if requested.
! 	(po-generated): Don't use parsedir.
! 	(objc.maintainer-clean): Delete above files from source directory.
  
! 2004-01-14  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* doc/tm.texi (FUNCTION_VALUE): Fix a typo.
  
! 2004-01-14  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* doc/tm.texi: Replace RETURN_IN_MEMORY with
! 	TARGET_RETURN_IN_MEMORY.
  
! 2004-01-15  Jan Hubicka  <jh@suse.cz>
  
! 	* builtins.c (std_expand_builtin_va_arg): Align operand when needed.
! 	* i386.c (init_cumulative_args): Set warn_sse; fix handling of variadic
! 	functions accepting SSE arguments
! 	(function_arg): Warn only when asked to warn.
! 	* i386.h (ix86_args): Add warn_sse/warn_mmx fiels.
  
! 2004-01-14  Joseph S. Myers  <jsm@polyomino.org.uk>
  
! 	* c-parse.in (stmts_and_decls): Make label at end of compound
! 	statement a hard error.
  
! 2004-01-14  Jan Hubicka  <jh@suse.cz>
  
! 	* cgraph.c (create_edge): Use local.redefined_extern_inline.
! 	* cgraph.h (cgraph_local_info): Sort fields by size; add
! 	redefined_extern_inline
! 	(cgraph_global_info): Sort fields by size.
! 	(cgraph_node): Likewise.
! 	* cgraphunit.c (cgraph_finalize_function): Se
! 	local.redefined_extern_inline on redefinition.
! 	(cgraph_analyze_function): Use it; fix formating.
  
! 2004-01-14  Jan Hubicka  <jh@suse.cz>
  
! 	PR c++/10776
! 	* sched-deps.c (trye_dependency_cache, anti_dependency_cache,
! 	outptu_dependency_cache, forward_dependency_cahe): Trun to vectors of
! 	bitmaps
! 	(cache_size): New variable
! 	(add_dependence): Update use; canonize early memory locations
! 	(sched_analyze_1): Likewise.
! 	(sched_analyze_2): Likewise.
! 	(init_dependency_caches): Initialize bitmaps.
! 	(free_dependency_caches): Free bitmaps
  
! 2004-01-14  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* calls.c: Replace STRICT_ARGUMENT_NAMING in comments with
! 	targetm.calls.strict_argument_naming().
! 	* target.h: Likewise.
  
! 2004-01-14  Richard Henderson  <rth@redhat.com>
  
! 	PR debug/13231
! 	* dwarf2out.c (dwarf2out_stack_adjust): Skip prologue and epilogue
! 	instructions.
  
! 2004-01-14  Richard Henderson  <rth@redhat.com>
  
! 	PR c++/12491
! 	* except.c (struct eh_region): Add u.fixup.resolved.
! 	(resolve_one_fixup_region): Split out from ...
! 	(resolve_fixup_regions): ... here.
  
! 2004-01-14  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* config/mn10300/mn10300.h (STRUCT_VALUE): Change to 0.
  
! 2004-01-14  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* config/alpha/alpha.h (STRUCT_VALUE): Remove.
! 	* config/alpha/vms.h (STRUCT_VALUE_REGNUM): Remove #undef.
! 	(STRUCT_VALUE): Remove.
  
! 2003-01-14  Steven Bosscher  <stevenb@suse.de>
  
! 	* system.h: Poison PROMOTED_MODE
! 	* integrate.c (expand_inline_function): Don't mention the
! 	PROMOTED_MODE.
! 	* loop.c (update_giv_derive): Same.
! 	* tree.h (DECL_RTL): Same.
  
! 2004-01-14  J"orn Rennecke <joern.rennecke@superh.com>
  
! 	PR target/9365
! 	* sh.c (gen_block_redirect): Add special handling of RETURN.
! 	(gen_far_branch) Don't call gen_stuff_delay_slot if there is no
! 	far branch target (i.e. it's a return).
  
! 2004-01-14  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* regrename.c (find_oldest_value_reg): Fix a warning.
  
! 2004-01-14  Richard Earnshaw  <rearnsha@arm.com>
  
! 	PR bootstrap/12527
! 	* config.gcc (arm*-*-linux*): Don't include unknown-elf.h in tm_file.
! 	Move linux-gas.h and linux-elf.h before aout.h.
! 	* arm/arm.h (INITIALIZE_TRAMPOLINE): Only define if not already.
! 	* arm/linux-elf.h (SUBTARGET_CPU_DEFAULT): Define.
  
! 2004-01-14  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* config/m32r/m32r.md: Use GEN_INT instead of gen_rtx
! 	(CONST_INT, VOIDmode, ...).
  
! 2004-01-14  Richard Earnshaw  <rearnsha@arm.com>
  
! 	* regrename.c (find_oldest_value_reg): If the replacement uses
! 	multiple hard registers, check that all of them are in CLASS.
  
! 2004-01-14  Jan Hubicka  <jh@suse.cz>
  
! 	* alias.c (get_alias_set):  Initialize alias set to 0 when subset is
! 	impossible.
  
! 2004-01-14  Kelley Cook  <kcook@gcc.gnu.org>
  
! 	* Makefile.in: Define MAINT from --enable-maintainer-mode.
  
! 2004-01-14  Hartmut Penner  <hpenner@de.ibm.com>
  
! 	* gcc/config/rs6000/rs6000.c (rs6000_stack_info)
! 	Calculate always vrsave_mask if TARGET_ALTIVEC.
! 	(rs6000_emit_prologue): Emit code for vrsave
! 	only if TARGET_ALTIVEC_VRSAVE.
! 	(rs6000_emit_epilogue): Likewise.
  
! 2004-01-14  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	* config/sparc/sparc.md (tie_add32): Fix pasto.
! 	(tie_add64): Likewise.
  
! 2004-01-14  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
  
! 	* config/i386/i386.md (*addqi_1_slp): Do not access operands[2].
  
! 2004-01-13  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* config/iq2000/iq2000-protos.h: Fix comment formatting.
! 	* config/iq2000/iq2000.c: Likewise.
! 	* config/iq2000/iq2000.md: Likewise.
  
! 2004-01-14  J. Brobecker  <brobecker@gnat.com>
  
! 	* dwarf2out.c (is_ada_subrange_type): No longer check the TYPE_NAME.
! 	(subrange_type_die): Add handle for nameless subrange types.
  
! 2004-01-13  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* config/h8300/h8300-protos.h: Replace do_movsi with
! 	h8300_expand_movsi.
! 	* config/h8300/h8300.c (do_movsi): Change to
! 	h8300_expand_movsi.
! 	* config/h8300/h8300.md (movsi): Replace do_movsi with
! 	h8300_expand_movsi.
! 	(movsf): Likewise.
  
! 2004-01-13  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* config/h8300/h8300.c (dosize): Change to
! 	h8300_emit_stack_adjustment.  Update callers.
  
! 2004-01-13  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* config/h8300/h8300.md (movstrictqi): Add an alternative with
! 	the source being post_inc.  Tighten the predicate for the
! 	destination to register_operand.
! 	(movstricthi): Likewise.
  
! 2004-01-13  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* system.h (SHARED_BSS_SECTION_ASM_OP): Poison.
! 	* varasm.c (bss_section): Don't use SHARED_BSS_SECTION_ASM_OP.
! 	* doc/tm.texi (SHARED_BSS_SECTION_ASM_OP): Remove.
  
! 2004-01-14  Jan Hubicka  <jh@suse.cz>
  
! 	Partial fix PR c++/12850
! 	* cgraphunit.c (cgraph_finalize_function): Always ggc_collect when
! 	at zero nest level.
  
! 2004-01-13  Bernardo Innocenti  <bernie@develer.com>
  
! 	* config/m68k/netbsd-elf.h (REGISTER_NAMES): Add missing "argptr"
! 	pseudo-register.
  
! 2004-01-13  Devang Patel <dpatel@apple.com
  
! 	PR debug/7078
! 	* dbxout.c (dbxout_symbol_name): Emit mangled names for
! 	NAMESPACE_DECL memebers.
  
! 2004-01-13  Andrew Pinski  <pinskia@physics.uc.edu>
  
! 	PR c++/12709
! 	* c-common.c (finish_fname_decls): Use the chain only if the
! 	tree is an expr_stmt.
  
! 2004-01-13  Vladimir Makarov  <vmakarov@redhat.com>
  
! 	* rtl.def: Add comment about new option in automata_option.
  
! 	* genautomata.c (PROGRESS_OPTION): New macro.
! 	(progress_flag): New global variable.
! 	(gen_automata_option): Process `progress'.
! 	(transform_insn_regexps, check_unit_distributions_to_automata,
! 	make_automaton, NDFA_to_DFA, build_automaton, create_automata,
! 	expand_automata, write_automata): Print about the progress only if
! 	progress_flag.  Remove fflush.
! 	(initiate_automaton_gen): Process command line flag `-progress'.
  
! 	* doc/md.texi: Describe the new option.
  
! 2004-01-13  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
  
! 	* cfg.c (dump_bb): Dump entry edges.
  
! 2004-01-13  Richard Earnshaw  <rearnsha@arm.com>
  
! 	* arm.c (thumb_legitimate_address_p): Only allow constant pool
! 	references from SImode.
! 	* arm.md (thumb_movhi_insn): Don't allow minipool references.
  
! 2004-01-13  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* system.h (TEXT_SECTION): Poison.
! 	* varasm.c (text_section): Don't use TEXT_SECTION.
! 	* config/sh/sh.c (sh_file_start): Fix a comment typo.
! 	* doc/tm.texi (TEXT_SECTION): Remove.
  
! 2004-01-13  Ben Elliston  <bje@wasabisystems.com>
  
! 	* doc/rtl.texi (Vector Operations): Remove defunct vec_const item.
  
! 2004-01-12  James E Wilson  <wilson@specifixinc.com>
  
! 	* unwind-libunwind.c: Delete.
  
! 2004-01-12  Zack Weinberg  <zack@codesourcery.com>
  
! 	PR 13656
! 	* c-decl.c (diagnose_mismatched_decls): Whenever newtype or
! 	oldtype is set, set *newtypep or *oldtypep too.  Do not set
! 	them at the very end.
! 	(validate_proto_after_old_defn): Restructure for comprehensibility;
! 	make error messages clearer.
  
! 2004-01-12  Zack Weinberg  <zack@codesourcery.com>
  
! 	* varray.h (VARRAY_POP): Add checking variant, aborts on underflow.
! 	(VARRAY_TOP): Use VARRAY_CHECK so the access is bounds-checked.
! 	* varray.c: No need to prototype error.
! 	(varray_check_failed): Wrap long string onto two lines.
! 	(varray_underflow): New function.
  
! 2004-01-13  Steven Bosscher  <stevenb@suse.de>
  
! 	PR c++/13376
! 	* function.h (struct function): Kill `name' field.
! 	(current_function_name): Make it an extern function.
! 	* function.c (current_function_name): New function.
! 	* graph.c: Update all uses of current_function_name.
! 	* gcse.c: Likewise.
! 	* config/alpha/alpha.c, config/avr/avr.c, config/c4x/c4x.c,
! 	config/mips/mips.c, config/pdp11/pdp11.c: Likewise.
! 	* config/ip2k/ip2k.c (function_prologue): Use MAIN_NAME_P
! 	instead of a strcmp with "main".
  
! 2004-01-13  Jan Hubicka  <jh@suse.cz>
  
! 	* c-decl.c (diagnose_mismatched_decls):  Fix warning calls.
  
! 	* cgraphunit.c (cgraph_optimize_function):  Always do
! 	optimize_inline_calls when there is always_inline callee.
! 	(cgraph_decide_inlining): Fix formating.
! 	* tree-inline.c (inlinable_function_p): Do sorry for alwaysinline
! 	functions.
! 	(expand_call_inline): Likewise.
! 	* toplev.h (sorry): Fix prototype.
  
! 2004-01-12  Roger Sayle  <roger@eyesopen.com>
  
! 	* builtins.c (expand_builtin_expect_jump): Simplify logic. Handle
! 	conditional jumps that drop through to unconditional jumps or the
! 	end of the sequence.
  
! 2004-01-13  Jan Hubicka  <jh@suse.cz>
  
! 	* alias.c (new_alias_set): Construct the alias_set varray.
! 	(init_alias_once): Don't do it here.
  
! 2004-01-12  Marc Espie <espie@openbsd.org>
  
! 	* system.h: handle YYBYACC like YYBISON.
  
! 2004-01-12  Jonathan Merriman <jonm@dualitymedia.com>
  
! 	PR target/10847
! 	* config.gcc: No longer includes conflicting header sparc/sol2.h when
! 	building on sparc64-*-openbsd*.
  
! 2004-01-12  Andrew Pinski  <pinskia@physics.uc.edu>
  
! 	PR debug/13539
! 	* dbxout.c (dbxout_type): Protected inheritance is not
! 	private but protected.
  
! 2004-01-12  Richard Sandiford  <rsandifo@redhat.com>
  
! 	* config/mips/mips.c (mips_symbolic_constant_p): Revert last patch.
  
! 2004-01-12  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	PR optimization/12508.
! 	* combine.c (try_combine): Remove a dead set in a parallel
! 	even if its destination is a subreg.
  
! 	Revert:
! 	2003-06-03  Kazu Hirata  <kazu@cs.umass.edu>
! 	* combine.c (simplify_set): Don't move a subreg in SET_SRC to
! 	SET_DEST if WORD_REGISTER_OPERATIONS is not defined.
  
! 2004-01-12  Geoffrey Keating  <geoffk@apple.com>
  
! 	* real.c: Update copyright date.
! 	* emit-rtl.c: Likewise.
! 	* rtl.h: Likewise.
! 	* dwarf2out.c: Likewise.
! 	* config/rs6000/darwin-ldouble.c: Likewise.
! 	* config/rs6000/rs6000.md: Likewise.
  
! 2004-01-12  David Edelsohn  <edelsohn@gnu.org>
  
! 	* config/rs6000/rs6000.c (rs6000_init_libfuncs): Add AIX
! 	TFmode to SImode libfuncs.
  
! 2004-01-12  Roger Sayle  <roger@eyesopen.com>
  
! 	PR middle-end/11397
! 	* varasm.c (assemble_alias): Remove weak aliases from weak_decls.
  
! 2004-01-12  Jan Hubicka  <jh@suse.cz>
  
! 	PR opt/12826
! 	* loop.c (insert_loop_mem): Preffer VOLATILE memory references to be
! 	stored.
  
! 	PR opt/12863
! 	* cfgcleanup.c (label_is_jump_target_p): Move to...
! 	* rtlanal.c (label_is_jump_target_p): ... here.
! 	* cfgrtl.c (cfg_layout_redirect_edge_and_branch):  Fix redirecting of fallthru
! 	edges unified with branch edges.
  
! 2004-01-12  Richard Earnshaw  <rearnsha@arm.com>
  
! 	* simplify-rtx.c (simplify_immed_subreg): Correctly extract the
! 	high word of an integral CONST_DOUBLE.
  
! 2004-01-12  Paul Brook  <paul@codesourcery.com>
  
! 	* simplify-rtx.c (simplify_plus_minus): Always generate canonical form.
  
! 2004-01-12  J"orn Rennecke <joern.rennecke@superh.com>
  
! 	PR target/13585
! 	* sh-protos.h (check_use_sfunc_addr): Declare.
! 	* sh.c (extract_sfunc_addr, check_use_sfunc_addr): New functions.
! 	* sh.md (use_sfunc_addr): Use check_use_sfunc_addr in insn predicate.
  
! 2004-01-12  Jan Hubicka  <jh@suse.cz>
  
! 	* alias.c:  Invlude varray.h
! 	(alias_sets): Turn into varray.
! 	(get_alias_set_entry): Use VARRAY; mark inline.
! 	(mems_in_disjoint_alias_sets_p): Mark inline.
! 	(record_alias_subset): Use varray.
! 	(init_alias_once): Initialize varray.
! 	(new_alias_set): Grow array.
! 	* varray.c: Make VARRAY_GENERIC_PTR non GTYized.
  
! 2004-01-12  Jan Hubicka  <jh@suse.cz>
  
! 	Partial fix for PR opt/10776 II
! 	* cselib.c: Include params.h
! 	(cselib_invalidate_mem):  Limit amount of nonconflicting memory
! 	locations.
! 	* params.def (PARAM_MAX_CSELIB_MEMORY_LOCATIONS): New.
! 	* Makefile.in (cselib.o): Depend on params.h
  
! 2004-01-12  Richard Sandiford  <rsandifo@redhat.com>
  
! 	* combine.c (combine_simplify_rtx): Don't pass VOIDmode to
! 	simplify_unary_operation if the operand has a known mode.
  
! 2004-01-12  Hartmut Penner  <hpenner@de.ibm.com>
  
! 	PR target/13534
! 	* gcc/config/rs6000/rs6000.c (word_offset_memref_operand): New
! 	predicate to handle 'ld' conform addresses.
! 	* gcc/config/rs6000/rs6000.h (EXTRA_CONSTRAINT): New 'Y'
! 	contraint.
! 	(EXTRA_MEMORY_CONSTRAINT): Tell reload which constraint
! 	are memory contraints.
! 	* gcc/config/rs6000/rs6000-protos.h (word_offset_memref_operand):
! 	New prototype.
! 	* gcc/config/rs6000/rs6000.md (*movdf_hardfloat64):
! 	Change 'o' to 'Y' constraint.
! 	(*movdf_softfloat64): Ditto.
  
! 2004-01-12  Bernardo Innocenti  <bernie@develer.com>
  
! 	* gcc/config/m68k/m68k.md: Switch from the "*..." syntax to the
! 	brace-enclosed syntax in all C output statements.
  
! 2004-01-12  David Edelsohn  <edelsohn@gnu.org>
  
! 	PR target/13401
! 	* config/rs6000/rs6000.c (rs6000_output_function_epilogue):
! 	Objective-C language type value is 14.
  
! 2004-01-12  Markus F.X.J. Oberhumer  <markus@oberhumer.com>
  
! 	PR c/12148
! 	* config/m68k/fpgnulib.c: Fix `-mshort' bugs: Use `long' instead of
! 	`int' in a number of places to make sure we always have a SImode
! 	and not a HImode.  Add a 'L' suffix to a number of constants.
  
! 2004-01-11  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
  
! 	* pa.c: Don't include obstack.h.
  
! 	* pa.md: Correct constraint in pattern for loading PIC label address.
  
! 2004-01-11  Kaz Kojima  <kkojima@gcc.gnu.org>
  
! 	* config/sh/linux.h (ASM_PREFERRED_EH_DATA_FORMAT): Undefine
! 	 before defining.
  
! 2004-01-11  Steven Bosscher  <stevenb@suse.de>
  
! 	PR fortran/9972
! 	* toplev.c (rest_of_handle_inline): Also consider functions
! 	for deferral if the language is GNU F77.
  
! 2004-01-11  Zack Weinberg  <zack@codesourcery.com>
  
! 	* c-decl.c (diagnose_arglist_conflict): Add missing space to
! 	diagnostic messages.
  
! 2004-01-11  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR middle-end/13392
! 	* builtins.c (expand_builtin_expect_jump): Handle conditional jumps
! 	to drop through label.  Don't fall back to SCC even when conditional
! 	jump has not been found.
  
! 2004-01-11  Jan Hubicka  <jh@suse.cz>
  
! 	* invoke.texi: Fix syntax error in previous patch.
  
! 	Partial fix for PR opt/10776
! 	* Makefile.in (reload.o): Include param.h
! 	* params.def (PARAM_MAX_RELOAD_SEARCH_INSNS): New parameter.
! 	* reload.c: Include params.h.
! 	(find_equiv_reg): Work limiting check.
! 	* invoke.texi: Document.
  
! 2004-01-11  Richard Sandiford  <rsandifo@redhat.com>
  
! 	* config/mips/mips.c (mips_symbolic_constant_p): Don't allow
! 	out-of-bounds accesses to string constants.  Simplify mips16
! 	case accordingly.
  
! 2004-01-11  Richard Sandiford  <rsandifo@redhat.com>
  
! 	PR optimization/13469
! 	* toplev.c (rest_of_compilation): Call purge_all_dead_edges after
! 	reload_cse_regs (-fnon-call-exceptions only).
  
! 2004-01-11  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* config/mcore/lib1.asm: Fix comment formatting.
! 	* config/mcore/mcore-elf.h: Likewise.
! 	* config/mcore/mcore.c: Likewise.
! 	* config/mcore/mcore.h: Likewise.
! 	* config/mcore/mcore.md: Likewise.
  
! 2004-01-10  Zack Weinberg  <zack@codesourcery.com>
  
! 	* c-decl.c (duplicate_decls): Break apart into...
! 	(diagnose_arglist_conflict, validate_proto_after_old_defn)
! 	(locate_old_defn, diagnose_mismatched_decls, merge_decls):
! 	... these new functions.  Restructure for comprehensibility.
! 	Remove various archaic special cases.  Always report the
! 	location of the previous declaration when a diagnostic is issued.
! 	(redeclaration_error_message): Fold into diagnose_mismatched_decls.
! 	(match_builtin_function_types): Delete unnecessary forward declaration.
  
! 2004-01-10  Zack Weinberg  <zack@codesourcery.com>
  
! 	* genautomata.c (make_automaton, NDFA_to_DFA):
! 	Print progress bars with '.' characters instead of '*'.
! 	(build_automaton): Change notes to match.
  
! 2004-01-10  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* config/m32r/m32r.md: Use define_constants for unspec and
! 	unspec_volatile.
  
! 2004-01-10  Jan Hubicka  <jh@suse.cz>
  
! 	PR opt/11635
! 	* expr.c (expand_expr_real):  More curefully expand union casts.
  
! 2004-01-10  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* config/m32r/m32r.md (flush_icache): Use 1 for
! 	unspec_volatile.
  
! 2004-01-10  David Edelsohn  <edelsohn@gnu.org>
! 	    James E Wilson  <wilson@specifixinc.com>
  
! 	PR debug/12860
! 	* dbxout.c (dbxout_symbol): Remove initialization of
! 	current_sym_code, current_sym_value, and current_sym_addr.
! 	(dbxout_symbol_location): Same.
! 	(dbxout_prepare_symbol): Zero current_sym_code,
! 	current_sym_value, and current_sym_addr.
  
! 2004-01-10  Richard Sandiford  <rsandifo@redhat.com>
  
! 	* tree.c (get_unwidened): Reorder conditions so that the null pointer
! 	check is done first.
  
! 2004-01-09  Eric Christopher  <echristo@redhat.com>
  
! 	* toplev.c (rest_of_handle_cfg): Add reg_scan pass
! 	if we're running mark_constant_function.
  
! 2004-01-09  Jeff Bailey  <jbailey@nisa.net>
  
! 	PR target/12561
! 	* config/t-gnu: Rename SYSTEM_HEADER_DIR to NATIVE_SYSTEM_HEADER_DIR.
  
! 2004-01-09  Andrew Pinski <pinskia@physics.uc.edu>
  
! 	PR debug/11231
! 	* dbxout.c (dbxout_type_fields): Return if any item is
! 	error_mark_node or the type is error_mark_node.
  
! 2004-01-09  Geoffrey Keating  <geoffk@apple.com>
  
! 	* config/rs6000/darwin-ldouble.c: Add big comment explaining
! 	exactly what is expected as a 'long double'.
! 	(_xlqadd): When a value to be returned is representable as a
! 	'double', just return it directly, do not construct it using a union.
! 	Also, correct final fixup.
! 	(_xlqmul): Likewise.
! 	(_xlqdiv): Likewise.
! 	* real.c (encode_ibm_extended): Make consistent with darwin-ldouble.c.
  
! 	* config/rs6000/rs6000.md (fix_trunctfdi2): Delete.
  
! 2004-01-09  Richard Henderson  <rth@redhat.com>
  
! 	* recog.c (constrain_operands): Validate mem operands.
  
! 2004-01-09   James E Wilson  <wilson@specifixinc.com>
  
! 	* gcc.c (init_spec): Remove -lunwind from shared case.
! 	* conifg/ia64/t-hpux (SHLIB_LINK): Add -lunwind.
  
! 2004-01-09  Steve Ellcey  <sje@cup.hp.com>
  
! 	* configure.ac: (gcc_cv_ld_hidden) Set to true for ia64*-*-hpux*.
! 	* configure: Regenerate
  
! 2004-01-09  Joseph S. Myers  <jsm@polyomino.org.uk>
  
! 	PR c/11234
! 	* c-typeck.c (build_c_cast): If pedantic, warn for conversions
! 	between function and object pointers.
! 	(digest_init): When comparing a pointer to function type to the
! 	target type, only apply TREE_TYPE once to the pointer to function
! 	type.
! 	* except.c (for_each_eh_label_1): Treat data as a pointer to a
! 	function pointer rather than casting it to a function pointer.
! 	(for_each_eh_label): Update caller.
! 	* recog.h (struct insn_data): Use a struct or union for output.
! 	* genoutput.c (output_insn_data): Update.
! 	* final.c (get_insn_template): Update.
  
! 2004-01-09  Mark Mitchell  <mark@codesourcery.com>
  
! 	* expr.h (expand_expr): Make it a macro, not a function.
! 	(expand_expr_real): New function.
! 	* expr.c (store_expr): Adjust logic for deciding whether or not to
! 	copy the value returned by expand_expr.
! 	(expand_expr): Rename to ...
! 	(expand_expr_real): ... this.  Add alt_rtl parameter.  Adjust
! 	calls to language hooks.
! 	* c-common.h (c_expand_expr): Adjust prototype.
! 	* c-common.c (c_expand_expr): Add alt_rtl parameter.
! 	* langhooks-def.h (lhd_expand_expr): Change prototype.
! 	* langhooks.c (lhd_expand_expr): Add all_rtl parameter.
! 	* langhooks.h (lang_hooks): Change type of expand_expr.
! 	* stmt.c (stmt_status): Add x_last_expr_alt_rtl.
! 	(last_expr_alt_rtl): Likewise.
! 	(expand_expr_stmt_value): Set last_expr_alt_rtl.
! 	(clear_last_expr): Clear it.
! 	(expand_end_stmt_expr): Set RTL_EXPR_ATL_RTL.
! 	(expand_end_bindings): Save and restor last_expr_alt_rtl.
! 	* tree.def (RTL_EXPR): Give it an additional operand.
! 	* tree.h (RTL_EXPR_ALT_RTL): New macro.
  
! 2004-01-09  Kazuhiro Inaoka  <inaoka.kazuhiro@renesas.com>
  
! 	* config/m32r/m32r.h (TARGET_CPU_CPP_BUILTINS): Add __m32r__.
! 	* config/m32r/m32r.c (call26_operand): Allow in PIC mode.
  
! 2004-01-09  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	PR target/13380.
! 	* config/m32r/m32r.md: Replace (reg:SI 17) with (reg:CC 17)
! 	or (ne:SI (reg:CC 17) (const_int 0)).
! 	Be specific about modes wherever possible.
  
! 2004-01-09  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* config/m32r/m32r.c (m32r_expand_block_move): Call
! 	gen_movestrsi_internal with two more arguments.
! 	(m32r_output_block_move): Adjust operand numbers.
! 	Properly update the source and destination pointers.
! 	* config/m32r/m32r.md (movstrsi_internal): Use 'r' instead of
! 	'r+'.  Change the set detinations to match_operand.
  
! 2004-01-09  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* final.c (FIRST_INSN_ADDRESS): Remove.
! 	(shorten_branches): Don't use FIRST_INSN_ADDRESS.
! 	* system.h (FIRST_INSN_ADDRESS): Poison.
! 	* config/avr/avr.h: Remove a comment about FIRST_INSN_ADDRESS.
! 	* config/m32r/m32r-protos.h: Remove the prototype for
! 	m32r_first_insn_address.
! 	* config/m32r/m32r.c (m32r_first_insn_address): Remove.
! 	* config/m32r/m32r.h (FIRST_INSN_ADDRESS): Likewise.
! 	* doc/md.texi (FIRST_INSN_ADDRESS): Likewise.
  
! 2004-01-09  J. Brobecker  <brobecker@gnat.com>
  
! 	* dwarf2out.c (gen_enumeration_type_die): Return the DIE that
! 	we just created.
! 	(is_ada_subrange_type): DIEs for enumeration subtypes should be
! 	emitted as subrange types too.
! 	(subrange_type_die): Add handling of enumeration subtypes.
  
! 2004-01-08  Richard Henderson  <rth@redhat.com>
  
! 	PR opt/12441
! 	Revert: Sat Mar 30 14:08:55 CET 2002  Jan Hubicka  <jh@suse.cz>
! 	* i386.c (aligned_operand): Be prepared for SUBREGed registers.
! 	(ix86_decompose_address): Use REG_P instead of GET_CODE (...) == REG.
! 	(ix86_address_cost): Be prepared for SUBREGed registers.
! 	(legitimate_address_p): Accept SUBREGed registers.
  
! 2004-01-08  Kelley Cook  <kcook@gcc.gnu.org>
  
! 	* Makefile.in: Rename configure.in to configure.ac
! 	* doc/sourcebuild.texi: Likewise.
! 	* configure: Regenerate.
! 	* config.in: Regenerate.
  
! 2004-01-08  Stuart Hastings  <stuart@apple.com>
  
! 	* config/i386/i386.md: Typos in MMX/SSE immediate shifts.
  
! 2004-01-08  Jan Hubicka  <jh@suse.cz>
  
! 	* cgraphunit.c (cgraph_decide_inlining):  Fix typo.
  
! 2004-01-08  Geoffrey Keating  <geoffk@apple.com>
  
! 	* config/rs6000/rs6000.md (cmptf_internal1): Correct branch offset.
! 	(UNSPEC_FIX_TRUNC_TF): New constant.
! 	(movtf_internal): Make splitter active only when insn is active.
! 	(extenddftf2): Rewrite to properly load zero into low part.
! 	(extenddftf2_internal): New.
! 	(extendsftf2): Rewrite.
! 	(truncdftf2): Correct length.
! 	(floatditf2): Delete.
! 	(fix_trunc_helper): New.
! 	(fix_trunctfdi2): Use fix_trunc_helper.
! 	(fix_trunctfsi2): Likewise.fix_trunc
! 	(fix_trunctfsi2_internal): New.
  
! 	* config/rs6000/rs6000.c (legitimate_lo_sum_address_p): lo_sum
! 	addresses are legitimate on Darwin even when flag_pic.
! 	(rs6000_legitimize_reload_address) [TARGET_MACHO]: Don't create
! 	non-offsettable addresses for loads of TFmode constants.
  
! 2004-01-08  Kazuhiro Inaoka  <inaoka.kazuhiro@renesas.com>
  
! 	* config/m32r/m32r.h (ASM_OUTPUT_ALIGNED_BSS): Actually emit
! 	variables in the appropriate bss section.
  
! 2004-01-09  Alan Modra  <amodra@bigpond.net.au>
  
! 	* config/rs6000/linux64.h (SUBSUBTARGET_OVERRIDE_OPTIONS): Ensure
! 	target_flags has MASK_POWERPC64 when -m64.
! 	* config/rs6000/rs6000.c (processor_target_table): Add MASK_POWERPC64
! 	to 620, 630, power3, power4 and rs64a entries.
! 	* config/rs6000/rs6000.h (MASK_64BIT): Expand comment.
  
! 2004-01-08  Richard Sandiford  <rsandifo@redhat.com>
  
! 	* simplify-rtx.c (simplify_immed_subreg): Fix construction of
! 	floating-point constants.
  
! 2004-01-08  J. Brobecker  <brobecker@gnat.com>
  
! 	* dwarf2out.c (subrange_type_die): Add context_die parameter.
! 	Create the subrange_type DIE using the given context DIE.
! 	(modified_type_die): Update call to subrange_type_die.
  
! 2004-01-08  Zack Weinberg  <zack@codesourcery.com>
  
! 	* dwarf2.h, unwind-dw2-fde.h, unwind-pe.h, unwind.h:
! 	Add multiple-include guard.
  
! 2004-01-08  Hartmut Penner  <hpenner@de.ibm.com>
  
! 	* gcc/config/rs6000/rs6000.c (easy_vector_constant): Accept
! 	all vector constant loadable by vsplt*.
! 	(output_vec_const_move): Likewise.
  
! 2004-01-07  Joseph S. Myers  <jsm@polyomino.org.uk>
  
! 	PR c/6024
! 	* c-typeck.c (comptypes): Only treat enumerated types in the same
! 	translation unit as compatible with each other when they are the
! 	same type.
! 	* doc/extend.texi: Update.
  
! 2004-01-07  Joseph S. Myers  <jsm@polyomino.org.uk>
  
! 	PR c/12165
! 	* c-decl.c (grokdeclarator): Take type qualifiers of typedefed
! 	array type from the array element type.
  
! 2004-01-07  Alan Modra  <amodra@bigpond.net.au>
  
! 	* config/rs6000/rs6000.c (rs6000_dbx_register_number): New function.
! 	* config/rs6000/rs6000-protos.h (rs6000_dbx_register_number): Declare.
! 	* config/rs6000/rs6000.h (DWARF_FRAME_REGNUM): Define.
! 	(DWARF_REG_TO_UNWIND_COLUMN): Correct column adjustment and comment.
! 	* config/rs6000/sysv4.h (DBX_REGISTER_NUMBER): Define.
  
! 2004-01-06  Eric Christopher  <echristo@redhat.com>
  
! 	* config/mips/mips.h (MDEBUG_ASM_SPEC): Change for dwarf2 default.
! 	(DWARF2_DEBUGGING_INFO): Define.
! 	(PREFERRED_DEBUGGING_TYPE): Set to dwarf2.
! 	* config/mips/openbsd.h (PREFERRED_DEBUGGING_TYPE): Remove.
! 	* config/mips/iris6.h (SUBTARGET_ASM_DEBUGGING_SPEC): Only pass -g0
! 	for irix as.
! 	(SUBTARGET_ASM_OPTIMIZING_SPEC): Only pass O0 for irix as.
! 	* config/mips/iris6gas.h (MDEBUG_ASM_SPEC): Remove.
! 	* config/mips/iris5gas.h: Ditto.
! 	(DBX_DEBUGGING_INFO): Remove.
! 	(DWARF2_DEBUGGING_INFO): Ditto.
! 	(MIPS_DEBUGGING_INFO): Ditto.
! 	(PREFERRED_DEBUGGING_TYPE): Ditto.
! 	* config/mips/elf.h (DWARF2_DEBUGGING_INFO): Remove.
! 	(PREFERRED_DEBUGGING_TYPE): Ditto.
! 	(SUBTARGET_ASM_DEBUGGING_SPEC): Ditto.
! 	* config/mips/elf64.h: Ditto.
  
! 2004-01-06  Jan Hubicka  <jh@suse.cz>
  
! 	* Makefile.in (STAGEPROFILE_FLAGS_TO_PASS): Use -fprofile-generate.
! 	(STAGEFEEDBACK_FLAGS_TO_PASS): Use -fprofile-use.
  
! 2004-01-06  Geoffrey Keating  <geoffk@apple.com>
  
! 	* config/rs6000/t-darwin (LIB2FUNCS_EXTRA): Compile darwin-ldouble.c.
! 	(TARGET_LIBGCC2_CFLAGS): Use -mlong-double-128.
! 	* config/rs6000/darwin-ldouble.c: New.
  
! 	* emit-rtl.c (gen_lowpart_common): Use simplify_gen_subreg
! 	for constants.
! 	(constant_subword): Delete.
! 	* rtl.h (constant_subword): Delete prototype.
! 	(immed_double_const): Is not in varasm.c.
! 	* simplify-rtx.c (simplify_immed_subreg): New.
! 	(simplify_subreg): Use simplify_immed_subreg.
  
! 	* config/rs6000/rs6000.md (floatsitf2): Use expand_float rather
! 	than trying to generate RTL directly.
! 	(fix_trunctfsi2): Use expand_fix rather than trying to generate
! 	RTL directly.
  
! 	* dwarf2out.c (add_const_value_attribute): Remove incorrect comment.
  
! 2004-01-06  David Edelsohn  <edelsohn@gnu.org>
  
! 	* config/rs6000/xcoff.h (EXTRA_SECTION_FUNCTIONS): Split each
! 	function into a separate macro.
! 	(read_only_data_section): Add void argument.
! 	(private_data_section): Same.
! 	(read_only_private_data_section): Same.
! 	(toc_section): Same.
  
! 2004-01-06  Jan Hubicka  <jh@suse.cz>
  
! 	* invoke.texi:  Remove typo in last change.
  
! 	PR target/10301
! 	* config.gcc: Accept opteron and athlon-64 as variants
! 	of k8.
! 	* i386.c (override_options): Likewise.
! 	* invoke.texi (i386 -mtune): Expand documentation.
  
! 2004-01-06  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* alias.c: Fix comment typos.
! 	* builtins.c: Likewise.
! 	* cfg.c: Likewise.
! 	* df.c: Likewise.
! 	* dominance.c: Likewise.
! 	* dwarf2out.c: Likewise.
! 	* emit-rtl.c: Likewise.
! 	* expr.c: Likewise.
! 	* final.c: Likewise.
! 	* fold-const.c: Likewise.
! 	* gcse.c: Likewise.
! 	* genattrtab.c: Likewise.
! 	* genrecog.c: Likewise.
! 	* gensupport.c: Likewise.
! 	* ggc-zone.c: Likewise.
! 	* integrate.c: Likewise.
! 	* local-alloc.c: Likewise.
! 	* loop.c: Likewise.
! 	* recog.c: Likewise.
! 	* regmove.c: Likewise.
! 	* reg-stack.c: Likewise.
! 	* reorg.c: Likewise.
! 	* rtlanal.c: Likewise.
! 	* rtl.h: Likewise.
! 	* sched-ebb.c: Likewise.
! 	* simplify-rtx.c: Likewise.
! 	* toplev.c: Likewise.
! 	* varasm.c: Likewise.
  
! 2004-01-06  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* doc/install.texi: Fix typos.
! 	* doc/invoke.texi: Likewise.
! 	* doc/md.texi: Likewise.
  
! 2004-01-06  Kazuhiro Inaoka  <inaoka.kazuhiro@renesas.com>
  
! 	* config/m32r/m32r.h (TRAMPOLINE_LINE_SIZE): Changed
  
! 2004-01-06  Jan Hubicka  <jh@suse.cz>
  
! 	* i386.c (init_cumulative_args):  Add handling of MMX_REGPARM.
! 	(function_arg_advance):  Do not pass aggregates in SSE; deal handling
! 	of MMX_REGPARM.
! 	(function_arg): Add new warnings about ABI changes;  fix SSE_REGPARM;
! 	add MMX_REGPARM.
! 	* i386.h (ix86_args): Add mmx_words/mmx_regs/mmx_regno fields.
! 	(SSE_REGPARM_MAX): Default to 3 on i386 -msse ABI.
! 	(MMX_REGPARM_MAX): Similarly for -mmmx.
  
! 2004-01-05  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* config/sh/linux.h: Fix comment formatting.
! 	* config/sh/netbsd-elf.h: Likewise.
! 	* config/sh/sh.c: Likewise.
! 	* config/sh/sh.h: Likewise.
! 	* config/sh/vxworks.h: Likewise.
  
! 2004-01-05  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* system.h (ASM_OUTPUT_MAIN_SOURCE_FILENAME): Poison.
! 	* toplev.c (output_file_directive): Don't use
! 	ASM_OUTPUT_MAIN_SOURCE_FILENAME.
  
! 2004-01-05  Steven Bosscher <s.bosscher@student.tudelft.nl>
  
! 	* toplev.c: Fix broken checkin of 2003-12-30.
  
! 2004-01-05  Daniel Berlin  <dberlin@dberlin.org>
  
! 	* ggc-zone.c: Remove everything in #ifdef USING_MALLOC_PAGE_GROUPS
! 	(USING_MMAP): We don't support non-mmap.
! 	(struct alloc_chunk): Steal 1 bit from typecode, use it to mark
! 	large objects.
! 	(struct page_entry): Remove bytes_free.
! 	(struct page_table_chain): Remove.
! 	(struct globals): Remove page_table member.
! 	(loookup_page_table_entry): Function deleted.
! 	(set_page_table_entry): Ditto.
! 	(ggc_allocated_p): No longer need page table lookups.
! 	(ggc_marked_p): Ditto.
! 	(alloc_small_page): Don't care about bytes_free anymore.
! 	(alloc_large_page): Round up size.
! 	(ggc_alloc_zone_1): Mark large objects as such, and calculate
! 	their size the new way.
! 	Remove page table lookups and setting.
! 	(ggc_get_size): Calculate large object size the new way.
! 	(sweep_pages): Redo to account for fact that we no longer have
! 	bytes_free.
! 	(ggc_collect): No longer need to reincrement bytes_free.
! 	(ggc_pch_alloc_object): Handle new large objects properly.
! 	(ggc_pch_read): Put PCH stuff into it's own uncollected zone.
  
! 2004-01-05  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* doc/invoke.texi: Remove a page break.
  
! 2004-01-05  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* config/avr/avr.c (avr_output_function_prologue): Remove an
! 	extra pair of curly braces.
  
! 2004-01-05  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* config/mn10300/mn10300.c: Fix comment formatting.
! 	* config/mn10300/mn10300.h: Likewise.
  
! 2004-01-05  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
  
! 	* tree.h: Update documentation on nothrow_flag.
! 	* print-tree.c (print_node): Print TREE_NOTHROW as "align-ok" for
! 	types.
  
! 2004-01-05  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* doc/invoke.texi: Remove traces of dead ports.
  
! 2004-01-05  Richard Sandiford  <rsandifo@redhat.com>
  
! 	* doc/invoke.texi: Add documentation for the MIPS -mexplicit-relocs
! 	option.
  
! 2004-01-05  Richard Sandiford  <rsandifo@redhat.com>
  
! 	PR target/12945
! 	* coverage.c (coverage_counter_alloc): Set SYMBOL_FLAG_LOCAL for
! 	counter labels.
! 	* config/mips/mips.c (INTERNAL_SYMBOL_P): Delete.
! 	(mips_classify_symbol): Always treat SYMBOL_REF_FLAG as indicating
! 	string constants if TARGET_MIPS16.  Use SYMBOL_REF_DECL to check
! 	the binding of decl symbols, otherwise check SYMBOL_REF_LOCAL_P.
! 	(mips_symbol_insns): Don't trust the local/global classification.
! 	(m16_usym8_4, m16_usym5_4): Same mips16 change as mips_classify_symbol.
! 	(override_options): Make -mabicalls -fno-unit-at-a-time imply
! 	-mno-explicit-relocs.
! 	(mips_encode_section_info): Don't use SYMBOL_REF_FLAG to distinguish
! 	between local and global symbols.
  
! 2004-01-05  Richard Sandiford  <rsandifo@redhat.com>
  
! 	* config/mips/mips-protos.h (mips_dangerous_for_la25_p): Declare.
! 	(mips_preferred_reload_class): Declare.
! 	* config/mips/mips.h (DANGEROUS_FOR_LA25_P): Replace with function.
! 	(EXTRA_CONSTRAINT): Update accordingly.
! 	(PREFERRED_RELOAD_CLASS): Use mips_preferred_reload_class.
! 	* config/mips/mips.c (mips_dangerous_for_la25_p): New function.
! 	(mips_preferred_reload_class): New function.  Prefer LEA_REGS if
! 	mips_dangerous_for_la25_p.
! 	(mips_secondary_reload_class): Use LEA_REGS rather than GR_REGS
! 	if mips_dangerous_for_la25_p.
  
! 2004-01-05  Bernardo Innocenti  <bernie@develer.com>
  
! 	* config/m68k/m68k.c (output_andsi3): Fix signed/unsigned comparison
! 	warning.
  
! 2004-01-04  Nathanael Nerode  <neroden@gcc.gnu.org>
  
! 	* configure.ac: Use AC_PROG_CPP_WERROR.
! 	* configure: Regenerate.
  
! 2004-01-04  Zack Weinberg  <zack@codesourcery.com>
  
! 	* .cvsignore: Add autom4te.cache.
  
! 2004-01-04  Richard Sandiford  <rsandifo@redhat.com>
  
! 	* doc/invoke.texi: Revamp documentation of MIPS options.  Remove
! 	-mabi=meabi, -mabi-fake-default, -mmips-as, -mgas, -mmips-tfile,
! 	-m4650, -mfix7000 and -(m)no-crt0.  Put endianness options first,
! 	then architecture options, then ABI options.  General rewording.
  
! 2004-01-04  Joseph S. Myers  <jsm@polyomino.org.uk>
  
! 	PR c/3414
! 	* doc/extend.texi: Clarify definition of malloc attribute.
  
! 2004-01-04  Jan Hubicka  <jh@suse.cz>
  
! 	* Makefile.in (cgraph.o, cgraphunit.o): Add intl.h dependency.
! 	* cgraph.c (create_edge, dump_cgraph): Update to use inline_failed
! 	* cgraph.h (cgraph_edge): Replace inline_call by inline_failed
! 	(cgraph_inline_p): Add extra argument reason.
! 	* cgraphunit.c: Minor formating fixes.
! 	cgraph_first_inlined_callee): New functions.
! 	(record_call_1): Record builtins too.
! 	(cgraph_analyze_function): Update inline_failed messages.
! 	(cgraph_mark_functions_to_output, cgraph_expand_function, cgraph_inlined_into,
! 	cgraph_inlined_callees, cgraph_estimate_growth): Update to use inline_failed.
! 	(cgraph_check_inline_limits): Likewise; Add argument reason.
! 	(cgraph_set_inline_failed): New static function.
! 	(cgraph_decide_inlining_of_small_function, cgraph_decide_inlining): Set
! 	reasons.
! 	(cgraph_inline_p): Add new argument reason.
! 	* tree-inline.c (expand_call_inline):  Update warning.
  
! 2004-01-03  Nathanael Nerode  <neroden@gcc.gnu.org>
  
! 	* configure.ac: Replace AC_INIT, AC_OUTPUT, AC_CANONICAL_SYSTEM
! 	with modern equivalents.
! 	* configure: Regenerate.
  
! 	* configure.ac: Replace gcc_AC_CHECK_TYPE with AC_CHECK_TYPE.
! 	* aclocal.m4 (gcc_AC_CHECK_TYPE): Remove.
! 	* configure: Regenerate.
  
! 	* doc/install.texi: Note that 'gcc' is now a 2.57 directory.
  
! 	* configure.in: Rename to configure.ac.
! 	* configure.ac: Renamed from configure.in; make minimum necessary
! 	changes for autoconf 2.5x.
! 	* aclocal.m4: Make minimum necessary changes for autoconf 2.5x.
! 	* configure: Regenerate with autoconf 2.57.
  
! 2004-01-03  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* config/mips/linux.h: Fix comment formatting.
! 	* config/mips/mips.c: Likewise.
! 	* config/mips/mips.h: Likewise.
! 	* config/mips/mips.md: Likewise.
! 	* config/mips/netbsd.h: Likewise.
! 	* config/mips/windiss.h: Likewise.
  
! 2004-01-02  Richard Henderson  <rth@redhat.com>
  
! 	* config/i386/i386.md (fp constant pool splitter): Reorg suppression
! 	for sse and 387; add suppression for mmx.
  
! 2004-01-02  Andrew Pinski  <pinskia@physics.uc.edu>
  
! 	* loop.c (loop_optimize): Free all loops_info's mems.
  
! 	* c-typeck.c (finish_init): Free spelling_base before
! 	setting it again.
  
! 	* cfgloop.c (flow_loops_find): Always free the sbitmap
! 	headers.
  
! 	* predict.c (estimate_probability): Free bbs after being
! 	done with it.
  
! 2004-01-02  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* config/mn10300/mn10300.h (PREDICATE_CODES): Add
! 	const_8bit_operand and call_address_operand.
  
! 2004-01-02  Jan Hubicka  <jh@suse.cz>
  
! 	* cgraphunit.c (cgraph_optimize_function):  Call optimize_inline_calls
! 	when there is nothing to inline but warnings are requested.
! 	(cgraph_decide_inlining):  Fix memory leak.
  
! 2004-01-02  Jan Hubicka  <jh@suse.cz>
  
! 	* expr.c (store_constructor):  Fix pasto in previous patch.
  
! 2004-01-02  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* config/i386/cygming.h: Fix comment formatting.
! 	* config/i386/djgpp.h: Likewise.
! 	* config/i386/gthr-win32.c: Likewise.
! 	* config/i386/i386-interix.h: Likewise.
! 	* config/i386/i386.c: Likewise.
! 	* config/i386/i386.h: Likewise.
! 	* config/i386/openbsd.h: Likewise.
! 	* config/i386/winnt.c: Likewise.
! 	* config/i386/xm-mingw32.h: Likewise.
  
! 2004-01-02  Joseph S. Myers  <jsm@polyomino.org.uk>
  
! 	* doc/gcc.texi, doc/invoke.texi, doc/install.texi: Update
! 	copyright and last modification dates.
  
! 2004-01-02  Andreas Jaeger  <aj@suse.de>, Gerald Pfeifer  <gp@suse.de>
  
! 	* doc/install.texi (Specific): Mention x86_64.
  
! 2004-01-01  Hans-Peter Nilsson  <hp@bitrange.com>
  
! 	* builtins.c (expand_builtin_apply_args_1) [STACK_GROWS_DOWNWARD]:
! 	Call force_operand on plus_constant result.
  
! 2004-01-01  Jan Hubicka  <jh@suse.cz>
  
! 	* expmed.c (store_bit_field, extract_bit_field): Use new named patterns
! 	* expr.c (store_constructor): Use vec_init pattern.
! 	* genopinit.c (optabs): Initailize vec_set/vec_extract/vec_init.
! 	* optabs.h (optab_index): ADD OTI_vec_set/OTI_vec_extract/OTI_vec_init
! 	(vec_set_optab, vec_extract_optab, vec_init_optab): New.
! 	* i386.md (vec_setv2df, vec_extractv2df, vec_setv4sf, vec_extractv4sf):
! 	New patterns.
! 	(sse2_unpc?pd): Fix pattern.
! 	(sse2_movlpd): Kill.
! 	(sse2_movsd): Deal with movlpd too.
! 	* i386.c (ix86_expand_builtin): Use sse2_movsd instead of sse2_movlpd.
! 	(ix86_expand_vector_init): New.
! 	* emmintrin.h (__mm_set_pd, __mm_set_ps): Use vector extensions.
! 	* md.texi (vec_set, vec_extract): Document
  
! 2003-12-31  Jan Hubicka  <jh@suse.cz>
  
! 	PR opt/13473
! 	* recog.c (validate_replace_rtx_1):  Take care for RTL sharing inside
! 	ASM input operands
  
! 	PR opt/12617
! 	* toplev.c (dump_file_index): Reorder ce3 and bbro.
! 	(dump_file): Likewise.
! 	(rest_of_compilation): Likewise.
  
! 	PR debug/13367
! 	* cgraph.c (cgraph_function_possibly_inlined):  Even with
! 	flag_really_no_inline we inline always_inline functions.
! 	* cgraphunit.c (cgraph_analyze_function): Clear inlinable flag
! 	for non-always_inline functions when there is flag_really_no_inline.
! 	(cgraph_decide_inlining): Limit work done when not inlining.
! 	(cgraph_decide_inlining_incrementally): Likewise.
! 	(cgraph_optimize_function): Check whether something got inlined.
! 	* c-objc-common.c (c_disregard_inline_limits): Do not always inline
! 	extern inline functions when not inlining.
  
! 	* opts.c (decode_options):  Disable crossjumping at -O1
! 	* invoke.texi (-O1): Document change.
  
! See ChangeLog.10 for earlier changes.
--- 1,6384 ----
! 2005-04-20  Release Manager
  
! 	* GCC 4.0.0 released.
  
! 2005-04-18  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR middle-end/20991
! 	* tree-ssa-ccp.c (fold_stmt): Don't optimize OBJ_TYPE_REFs if that
! 	would result in an already finalized unreachable node becoming
! 	reachable while cgraph_global_info_ready.
  
! 2005-04-19  Ben Elliston  <bje@au.ibm.com>
  
! 	* doc/invoke.texi (Optimize Options): Refer to the correct
! 	optimisation flag -ftree-dominator-opts, not -ftree-dom.
  
! 2005-04-17  Daniel Berlin  <dberlin@dberlin.org>
  
! 	Fix PR tree-optimization/20490
! 	Fix PR tree-optimization/20929
  
! 	* tree-ssa-pre.c (create_expression_by_pieces): Use
! 	force_gimple_operand on result of fold, value number
! 	gimple_operand result.
  
! 2005-04-17  Joseph S. Myers  <joseph@codesourcery.com>
  
! 	Merge from mainline:
  
! 	2005-02-28  Geert Bosch  <bosch@gnat.com>
  
! 		PR ada/15977
! 		* doc/contrib.texi: List contributors for Ada front end
  
! 	2005-03-14  Geoffrey Keating  <geoffk@apple.com>
  
! 		* doc/cppopts.texi (-fexec-charset): Add concept index
! 		entry.
! 		(-fwide-exec-charset): Likewise.
! 		(-finput-charset): Likewise.
  
! 	2005-04-15  David Edelsohn  <edelsohn@gnu.org>
  
! 		* doc/install.texi (*-ibm-aix*): Add comment about system
! 		limits.
  
! 2005-04-17  Richard Sandiford  <rsandifo@redhat.com>
  
! 	* combine.c (combine_simplify_rtx): Remove a transformation that
! 	relies on an invalid assumption about rtl sign-extension semantics.
  
! 2005-04-17  Richard Henderson  <rth@redhat.com>
  
! 	PR target/20375
! 	* config/alpha/alpha.c (alpha_setup_incoming_varargs): Advance a copy
! 	of CUMULATIVE_ARGS past the last named argument.
! 	(alpha_va_start): Expect pretend_args_size only if strictly less than
! 	6 named arguments.
! 	* config/alpha/alpha.h (TARGET_FP, TARGET_FPREGS, TARGET_GAS,
! 	TARGET_IEEE_CONFORMANT, TARGET_IEEE, TARGET_IEEE_WITH_INEXACT,
! 	TARGET_BUILD_CONSTANTS, TARGET_FLOAT_VAX, TARGET_BWX, TARGET_MAX,
! 	TARGET_FIX, TARGET_CIX, TARGET_EXPLICIT_RELOCS, TARGET_SMALL_DATA,
! 	TARGET_TLS_KERNEL, TARGET_SMALL_TEXT, TARGET_LONG_DOUBLE_128,
! 	TARGET_CPU_EV5, TARGET_CPU_EV6, TARGET_SUPPORT_ARCH): Booleanize.
  
! 2005-04-17  Alexandre Oliva  <aoliva@redhat.com>
  
! 	PR middle-end/20739
! 	* gimplify.c (gimplify_addr_expr): Compensate for removal of
! 	e.g. cv-qualification conversions.
  
! 2005-04-16  Gerald Pfeifer  <gerald@pfeifer.com>
  
! 	* doc/install.texi (Specific): Avoid using asterisks in @anchor
! 	names related to target triplets.
! 	Remove i?86-*-esix from platform directory.
! 	Remove powerpc-*-eabiaix from platform directory.
  
! 2005-04-16  Joseph S. Myers  <joseph@codesourcery.com>
  
! 	PR middle-end/20491
! 	* config/ia64/ia64.c (rtx_needs_barrier): Recurse instead of
! 	falling through from SUBREG case to REG.
  
! 2005-04-15  Dave Korn <dave.korn@artimi.com>
  
! 	* gcc.c (default_compilers): Clarify obscure error message when
! 	reading from standard input.
  
! 2005-04-15  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
  
! 	* gthr-posix.c (pthread_cancel): Define.
! 	(pthread_mutexattr_init): Likewise.
! 	(pthread_mutexattr_settype): Likewise.
! 	(pthread_mutexattr_destroy): Likewise.
  
! 2005-04-15  Volker Reichelt  <reichelt@igpm.rwth-aachen.de>
  
! 	* doc/invoke.texi: Fix typos.
! 	* doc/md.texi: Likewise.
! 	* doc/rtl.texi: Likewise.
! 	* doc/sourcebuild.texi: Likewise.
! 	* doc/tm.texi: Likewise.
  
! 2005-04-15  Alexandre Oliva  <aoliva@redhat.com>
  
! 	* tree-eh.c (lower_try_finally_copy): Generate new code in
! 	response to goto_queue entries as if the queue was sorted by
! 	index, not pointers.
! 	(lower_try_finally_switch): Likewise.
  
! 2005-04-15  Richard Sandiford  <rsandifo@redhat.com>
  
! 	* config/mips/mips.h (ASM_OUTPUT_CASE_LABEL): Delete.
! 	(JUMP_TABLES_IN_TEXT_SECTION): Define.
! 	* config/mips/mips.c (mips16_insn_length): Remove reference to
! 	JUMP_TABLES_IN_TEXT_SECTION.
  
! 2005-04-14  Joseph S. Myers  <joseph@codesourcery.com>
  
! 	* doc/cpp.texi, doc/install.texi: Change references to GCC 3.5 to
! 	refer to 4.0.
  
! 2005-04-14  Steve Ellcey  <sje@cup.hp.com>
  
! 	PR target/20924
! 	* config/ia64/ia64.md (divsf3_internal_lat): Generate frcpa with
! 	fpsr 0 instead of fpsr 1.
! 	(divsf3_internal_thr): Ditto.
! 	(divdf3_internal_lat): Ditto.
! 	(divdf3_internal_thr): Ditto.
! 	(divxf3_internal_lat): Ditto.
! 	(divxf3_internal_thr): Ditto.
  
! 2005-04-14  Ulrich Weigand  <uweigand@de.ibm.com>
  
! 	PR target/20927
! 	* config/s390/s390-modes.def: Define TFmode.
  
! 2005-04-14  Alexandre Oliva  <aoliva@redhat.com>
! 	    Roger Sayle  <roger@eyesopen.com>
  
! 	PR target/20126
! 	* loop.c (loop_givs_rescan): If replacement of DEST_ADDR failed,
! 	signal that all GIVs couldn't be reduced.
  
! 2005-04-12  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	* config/sparc/sparc.h (APPLY_RESULT_SIZE): Set to 24 in 64-bit mode.
! 	* config/sparc/sparc.md (untyped_call): Save the registers manually.
  
! 	* config/sparc/sparc.c (legitimate_address_p): Use TARGET_ARCH32.
  
! 2005-04-12  Ulrich Weigand  <uweigand@de.ibm.com>
  
! 	PR middle-end/20917
! 	* config/s390/s390.md ("*set_tp"): Use SET in pattern.
! 	("set_tp_64", "set_tp_31"): Adapt expanded pattern.
  
! 2005-04-09  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/20795
! 	* config/i386/i386.c (construct_container): Pass empty aligned
! 	struct, union or class in memory.
  
! 2005-04-08  Ulrich Weigand  <uweigand@de.ibm.com>
  
  	Backport from mainline:
! 	* config/s390/tpf.h (ASM_SPEC): Define.
  
! 2005-04-07  Andreas Schwab  <schwab@suse.de>
  
  	Backport from mainline:
  
! 	2005-04-03  Steven Bosscher  <stevenb@suse.de>
  
! 	PR middle-end/20648
! 	* bb-reorder.c (duplicate_computed_gotos): Do not unfactor
! 	a computed goto if the edge to the computed goto block has
! 	incoming abnormal edges.  Clarify how the function works.
  
! 2005-04-07  Joseph S. Myers  <joseph@codesourcery.com>
  
! 	PR target/20093
! 	* simplify-rtx.c (simplify_unary_operation): Check
! 	SUBREG_PROMOTED_UNSIGNED_P (op) > 0 for zero-extension.
  
! 2005-04-07  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	PR ada/18659
! 	PR ada/18819
! 	* doc/invoke.texi (Optimize Options): Document that
! 	-ftree-sra is not automatically enabled for the Ada compiler.
  
! 2005-04-06  Richard Sandiford  <rsandifo@redhat.com>
  
! 	* c.opt (-F): Remove trailing whitespace from help string.
! 	(-finput-charset): Use a tab to separate the switch name and help
! 	string.
! 	* common.opt (-fsched-stalled-insns, -fsched-stalled-insns-dep)
! 	(-ftree-vectorizer-verbose): Likewise.
  
! 2005-04-06  Dale Johannesen  <dalej@apple.com>
  
! 	* doc/invoke.texi (Optimization Options):  Remove
! 	duplicate -fcse-follow-jumps.  Add -fweb.
! 	(-ftree-lim):  Fix spelling (-ftree-loop-im, invariants).
! 	(-fivcanon):  Fix spelling (-ftree-loop-ivcanon).
  
! 2005-04-06  Joseph S. Myers  <joseph@codesourcery.com>
  
! 	* c-decl.c (finish_decl): Apply pending #pragma weak regardless of
! 	scope.
  
! 2005-04-06  Ranjit Mathew  <rmathew@hotmail.com>
  
! 	* doc/install.texi: Update the URL for Jacks.
! 	* doc/sourcebuild.texi: Likewise.
  
! 2005-04-06  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	PR target/17245
! 	* config/sparc/sparc.c (legitimate_address_p): Remove 'imm2'.
! 	Revert 2004-10-08 patch.  Reject TFmode LO_SUM in 32-bit mode.
  
! 2005-04-05  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/20076
! 	* tree-inline.c (inline_forbidden_p_1): Prevent inlining functions
! 	that call __builtin_return or __builtin_apply_args.
  
! 2005-04-06 Uros Bizjak <uros@kss-loka.si>
  
! 	PR target/20421
! 	* config/i386/i386.md (frndintxf2_floor, frndintxf2_ceil)
! 	(frndintxf2_trunc, frndintxf2_mask_pm): Add FLAGS_REG clobber.
! 	Allocate local stack slots here.  Set ix86_optimize_mode_switching.
! 	flag here. Implement using define_insn_and_split.
! 	(frndintxf2_floor_i387, frndintxf2_ceil_i387, frndintxf2_trunc_i387)
! 	(frndintxf2_mask_pm_i387): New insn patterns.
! 	(floorsf2, floordf2, floorxf2): Remove local stack slot allocations.
! 	Do not set ix86_optimize_mode_switching flag.
! 	(ceilsf2, ceildf2, ceilxf2): Same.
! 	(btruncsf2, btruncdf2, btruncxf2): Same.
! 	(nearbyintsf2, nearbyintdf2, nearbyintxf2): Same.
  
! 2005-04-05  James E. Wilson  <wilson@specifixinc.com>
  
! 	PR target/20670
! 	* unwind-ia64.c (uw_intall_context): Add missing load of r27.
  
! 2005-04-05  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
! 	* doc/install.texi (Configuration): Document --with-java-home.
  
! 2005-04-05  Dale Johannesen  <dalej@apple.com>
  
! 	PR middle-end/19225
! 	* calls.c (expand_call):  Flush pending deferrals before
! 	throwing call.
  
! 2005-04-06  Zdenek Dvorak  <dvorakz@suse.cz>
  
! 	PR target/20625
! 	* tree-ssa-loop-ivopts.c (generic_type_for): New function.
! 	(add_candidate_1): Use generic_type_for instead of unsigned_type_for.
  
! 2005-04-05  Roger Sayle  <roger@eyesopen.com>
  
! 	* config/i386/i386.md (*truncdfsf2_i387_1): New pattern.
  
! 2005-04-05  Ben Elliston  <bje@au.ibm.com>
  
! 	* doc/invoke.texi (Optimize Options): Mention -ftree-lrs, not
! 	-ftree-live_range_split.  Perhaps renamed at some point?
  
! 2005-04-05  Jason Merrill  <jason@redhat.com>
  
! 	PR c++/19317
! 	* calls.c (expand_call): Disable return slot optimization.
  
! 2005-04-05  Richard Henderson  <rth@redhat.com>
  
! 	PR target/20342
! 	PR target/20447
! 	* config/i386/i386.c (print_operand): Handle vector zeros.
! 	(ix86_split_to_parts): Handle CONST_VECTOR.
! 	(ix86_hard_regno_mode_ok): Allow MMX modes in general regs.
! 	(ix86_modes_tieable_p): Use ix86_hard_regno_mode_ok to decide
! 	what modes to tie for MMX and SSE registers.
! 	* config/i386/i386.h (MMX_REG_MODE_P): Remove.
! 	* config/i386/i386.md: Extend move 0 -> xor peephole to apply
! 	to vector modes as well.
! 	* config/i386/predicates.md (const0_operand): Handle VOIDmode
! 	properly as an input mode.
  
! 2005-04-05  Hans-Peter Nilsson  <hp@axis.com>
  
! 	PR rtl-optimization/20527
! 	* combine.c (can_combine_p) [AUTO_INC_DEC]: When INSN has an
! 	REG_INC note, test that the register also isn't mentioned in PRED
! 	or SUCC.
  
! 2005-04-05  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	* config/sparc/sparc.c (TARGET_ASM_FILE_END): Undefine before
! 	overriding.
  
! 2005-04-05  Olivier Hainque  <hainque@adacore.com>
  
! 	* config/mips/iris6.h (DWARF_FRAME_RETURN_COLUMN): Redefine to
! 	match what the system unwinder expects.
! 	* config/mips/mips.c (mips_frame_set): If we're saving the return
! 	address register and the dwarf return address column number differs
! 	from the hard register number, adjust the note reg to refer to the
! 	former.
  
! 2005-04-05  Eric Botcazou  <ebotcazou@libertysurf.fr>
! 	    Sebastian Pop <sebastian.pop@cri.ensmp.fr>
  
! 	PR tree-optimization/19903
! 	* tree-chrec.c (chrec_convert): Return chrec_dont_know for constants
! 	that don't fit in their type after conversion.
  
! 2005-04-04  Roger Sayle  <roger@eyesopen.com>
! 	    Alexandre Oliva  <aoliva@redhat.com>
  
! 	PR c++/19199
! 	* fold-const.c (non_lvalue): Split tests into...
! 	(maybe_lvalue_p): New function.
! 	(fold_cond_expr_with_comparison): Preserve lvalue-ness for the
! 	C++ front-end prior to lowering into gimple form.
  
! 2004-04-04  Richard Sandiford  <rsandifo@redhat.com>
  
! 	PR target/19537
! 	* Makefile.in (tree-ssa-loop-ivopts.o): Depend on langhooks.h.
! 	* tree-ssa-loop-ivopts.c: Include langhooks.h.
! 	(add_standard_iv_candidates_for_size): New function, extracting code
! 	from add_standard_iv_candidates and parameterizing it by type size.
! 	(add_standard_iv_candidates): Use add_standard_iv_candidates_for_size.
  
! 2005-04-04  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	* doc/invoke.texi (SPARC options): Document that
! 	-mlittle-endian is not supported on Linux either.
  
! 2005-04-04  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	PR target/20446
! 	* config/sparc/sparc.h (NEED_INDICATE_EXEC_STACK): Define to 0.
! 	* config/sparc/linux.h (TARGET_ASM_FILE_END): Delete.
! 	(NEED_INDICATE_EXEC_STACK): Define to 1.
! 	* config/sparc/linux64.h (TARGET_ASM_FILE_END): Delete.
! 	(NEED_INDICATE_EXEC_STACK): Define to 1.
! 	* config/sparc/sparc.c (TARGET_ASM_FILE_END): Set to sparc_file_end.
! 	(add_pc_to_pic_symbol): Rename into pic_helper_symbol.
! 	(add_pc_to_pic_symbol_name): Rename into pic_helper_symbol_name.
! 	(pic_helper_emitted_p): New global.
! 	(emit_pic_helper): New function extracted from...
! 	(load_pic_register): ...here.  Add 'delay_pic_helper' parameter.
! 	Do not call emit_pic_helper if delay_pic_helper is true.
! 	(sparc_expand_prologue): Pass 'false' to load_pic_register.
! 	(sparc_output_mi_thunk): Pass 'true' to load_pic_register.
! 	(sparc_file_end): New function.
  
! 2005-04-04  Richard Henderson  <rth@redhat.com>
! 	    Jakub Jelinek  <jakub@redhat.com>
  
! 	PR rtl-optimization/16104
! 	* fold-const.c (fold_unary): Fix folding of vector conversions.
  
+ 2005-04-04  Nathan Sidwell  <nathan@codesourcery.com>
  
! 	PR debug/20505
! 	* dwarf2out.c (tree_add_const_value_attribute): Only add if it's
! 	an INTEGER_CST.
  
! 2005-04-03  Gabriel Dos Reis  <gdr@integrable-solutions.net>
  
! 	PR c++/18644
! 	* doc/invoke.texi (-Wsynth): Don't document, as it now is void of
! 	semantics.
  
! 2005-04-02  Alexandre Oliva  <aoliva@redhat.com>
  
! 	PR debug/19345
! 	* tree-inline.c (remap_type): Remap TYPE_STUB_DECL.
! 	(remap_decl): Insert type decl in map earlier.
  
! 2005-04-02  Alexandre Oliva  <aoliva@redhat.com>
  
! 	PR tree-optimization/20640
! 	* tree-ssa-dce.c (remove_dead_stmt): Don't redirect edge to
! 	post-dominator if it has phi nodes.
! 	(eliminate_unnecessary_stmts): Remove dead phis in all blocks
! 	before dead statements.
  
! 2005-04-02  Alexandre Oliva  <aoliva@redhat.com>
  
! 	PR middle-end/20491
! 	* final.c (alter_subreg): Don't call subreg_regno for a non-REG.
  
! 2005-04-02  Alexandre Oliva  <aoliva@redhat.com>
  
! 	PR rtl-optimization/20290
! 	* loop.c (for_each_insn_in_loop): Don't assume the loop body runs
! 	in every iteration if the entry point is the exit test.
  
! 2005-04-02  Geoffrey Keating  <geoffk@apple.com>
  
! 	* config/rs6000/t-darwin (TARGET_LIBGCC2_CFLAGS): Add -pipe.
! 	* config/t-darwin (TARGET_LIBGCC2_CFLAGS): Likewise.
  
! 2005-04-02  Geoffrey Keating  <geoffk@apple.com>
  
! 	* config/rs6000/t-darwin8: Comment out ppc64 multilib.
  
! 2005-04-01  Richard Guenther <rguenth@tat.physik.uni-tuebingen.de>
  	    Jan Hubicka  <jh@suse.cz>
+ 	    Steven Bosscher <stevenb@suse.de>
  
! 	* cgraphunit.c (cgraph_estimate_size_after_inlining): Compute
! 	call cost based on argument sizes.
! 	(cgraph_mark_inline_edge): Avoid inline unit from shrinking by
! 	inlining.
! 	* params.def: (max-inline-inssn-single): Set to 450.
! 	(max-inline-insns-auto): Set to 90.
! 	(max-inline-insns-recursive): Set to 450
! 	(max-inline-insns-recursive-auto): Set to 450.
! 	(large-function-insns): Set to 2700.
! 	(inline-call-cost): New parameter.
! 	* tree-inline.c (estimate_move_cost): New function.
! 	(estimate_num_insns_1): Compute move sizes costs by estimate_move_cost
! 	for non-gimple-regs, set cost to 0 for gimple-regs.  Compute call size
! 	based on arguments.
! 	* tree-inline.h (estimate_move_cost): Declare.
! 	* invoke.texi: (max-inline-inssn-single): Change default to 450.
! 	(max-inline-insns-auto): Change default to 90.
! 	(max-inline-insns-recursive): Change default to 450
! 	(max-inline-insns-recursive-auto): Change default to 450.
! 	(large-function-insns): Change default to 2700.
! 	(inline-call-cost): Document new parameter.
  
! 2005-04-01  Paul Brook  <paul@codesourcery.com>
  
! 	* config/arm/arm.c (thumb_call_via_label): Include space for SP.
! 	(arm_output_function_epilogue): Allow call_via_SP.
! 	(thumb_call_via_reg, arm_file_end): Ditto.
! 	* config/arm/arm.h (struct machine_function): Include space for SP.
! 	(thumb_call_via_label): Update declaration.
  
! 2005-04-01  Joseph S. Myers  <joseph@codesourcery.com>
  
! 	* c-decl.c (validate_proto_after_old_defn): Look at
! 	TYPE_MAIN_VARIANT of argument types.
  
! 2005-04-01  Jan Hubicka  <jh@suse.cz>
  
! 	PR middle-end/20635
! 	* varasm.c (mark_decl_referenced): Do not mark extern inline functions
! 	as needed.
  
! 2005-04-01  Paolo Bonzini  <bonzini@gnu.org>
  
! 	PR middle-end/19454
! 	PR rtl-optimization/20600
  
! 	* combine.c (gen_binary): Remove.
! 	(known_cond, simplify_shift_const, find_split_point,
! 	combine_simplify_rtx, simplify_if_then_else, simplify_set,
! 	simplify_logical, expand_field_assignment, extract_left_shift,
! 	force_to_mode, if_then_else_cond, apply_distributive_law,
! 	simplify_and_const_int, simplify_shift_const, gen_lowpart_for_combine,
! 	simplify_comparison, reversed_comparison): Replace with
! 	simplify_gen_binary, simplify_gen_relational or
! 	distribute_and_simplify_rtx.
! 	(distribute_and_simplify_rtx): New function.
  
! 	* config/i386/i386.c (ix86_decompose_address): Look inside SUBREGs
! 	to fix addresses involving EBP and ESP.
! 	(aligned_operand, legitimate_address_p, ix86_address_cost): Be prepared
! 	for SUBREGed registers.
! 	(legitimate_address_p): Accept SUBREGed registers.
  
! 2005-04-01  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR c++/19406
! 	* dwarf2out.c (gen_type_die_for_member): Handle FIELD_DECL.
! 	(dwarf2out_imported_module_or_decl): Use gen_type_die_for_member
! 	for FIELD_DECLs.
  
! 2005-04-01  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* doc/contrib.texi, doc/invoke.texi, doc/tm.texi: Fix typos.
  
! 2005-04-01  Joseph S. Myers  <joseph@codesourcery.com>
  
! 	PR c/17855
! 	* gimplify.c (gimplify_expr): Create a temporary for lvalue
! 	COND_EXPR and CALL_EXPR.
  
! 2005-03-31  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* doc/tree-ssa.texi: Fix a typo.
  
! 2005-03-31  Olivier Hainque  <hainque@adacore.com>
  
! 	* dwarf2out.c (dwarf2out_frame_finish): Honor DWARF2_FRAME_INFO
! 	defined and non-zero.
  
! 2005-03-31  Alan Modra  <amodra@bigpond.net.au>
  
! 	PR target/20611
! 	* config/rs6000/rs6000.md (load_toc_v4_PIC_1b): Remove inline
! 	label operand.  Remove (use (unspec..)).  Don't emit a label on
! 	the offset word.
! 	* config/rs6000/rs6000.c (rs6000_legitimize_tls_address): Don't
! 	generate inline label for load_toc_v4_PIC_1b.
! 	(rs6000_emit_load_toc_table): Likewise.
  
! 2005-03-31  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* config.gcc: Obsolete i860-*-sysv4*, ip2k-*-elf,
! 	ns32k-*-netbsdelf*, and ns32k-*-netbsd*.
  
! 2005-03-31  Alan Modra  <amodra@bigpond.net.au>
  
! 	* config.gcc (cpu_is_64bit): Set for 64-bit powerpc cpus.
! 	(powerpc64-*-linux*): Use it.  Rearrange tm_file assignment.
! 	(powerpc-*-linux*): Build a biarch compiler when --enable-targets
! 	is given with "powerpc64*" or "all", or when --with-cpu chooses
! 	a 64-bit cpu.
  
! 2005-03-30  Richard Henderson  <rth@redhat.com>
  
! 	* cgraph.h (struct cgraph_node): Add alias.
! 	* varasm.c (assemble_alias): Set it.
! 	* cgraphunit.c (cgraph_assemble_pending_functions): Check it and
! 	avoid calling cgraph_expand_function.
  
! 2005-03-30  Joseph S. Myers  <joseph@codesourcery.com>
  
! 	PR c/772
! 	PR c/17913
! 	* c-tree.h (C_DECL_UNJUMPABLE_STMT_EXPR,
! 	C_DECL_UNDEFINABLE_STMT_EXPR, struct c_label_list, struct
! 	c_label_context, label_context_stack): New.
! 	* c-decl.c (define_label): Check for jumps into statement
! 	expressions.  Add label to list of defined labels.
! 	(start_function): Push context on label_context_stack.
! 	(finish_function): Pop context from label_context_stack.
! 	* c-typeck.c (label_context_stack): New.
! 	(c_finish_goto_label): Check for jumps into statement
! 	expressions.  Add label to list of jumped to labels.
! 	(struct c_switch): Add blocked_stmt_expr.
! 	(c_start_case): Initialize it.
! 	(do_case): Check it.
! 	(c_finish_case): Verify !blocked_stmt_expr.
! 	(c_begin_stmt_expr):  Push context on label_context_stack.
! 	Increment blocked_stmt_expr.  Mark labels jumped to from outside
! 	as undefinable.
! 	(c_finish_stmt_expr): December blocked_stmt_expr.  Mark labels
! 	defined in the statement expression and no longer jumpable to.
! 	Mark labels jumped to from just outside the statement expression
! 	as again definable.  Pop context from label_context_stack.
! 	* doc/extend.texi (Statement Exprs): Update.
  
! 2005-03-30  Joseph S. Myers  <joseph@codesourcery.com>
  
! 	PR c/20368
! 	* c-decl.c (start_function): Check for old_decl being
! 	error_mark_node.
  
! 2005-03-30 Mostafa Hagog <mustafa@il.ibm.com>
  
! 	PR middle-end/20177
! 	* ddg.c (create_ddg_dependence): Ignore reg-anti dependency.
! 	* modulo-sched.c (const_iteration_count): Return on NULL
! 	pre-header.
! 	(print_node_sched_params): Return on NULL dump_file.
! 	(generate_reg_moves): Handle reg-anti dependencies and disregard
! 	closing branch when generating register moves.
! 	(sms_schedule): Mark the SMSed block dirty.
! 	* passes.c (rest_of_handle_sms): Call update_life_info for all
! 	basic-blocks.
! 	* testsuite/gcc.dg/20050321-1.c: New test.
! 	* testsuite/gcc.dg/20050330-1.c: New test.
  
! 2005-03-30  Sebastian Pop  <pop@cri.ensmp.fr>
  
! 	* tree-scalar-evolution.c (instantiate_parameters_1): Return
! 	as soon as a chrec_dont_know is detected.
  
! 2005-03-30  Alan Modra  <amodra@bigpond.net.au>
  
! 	* doc/install.texi: Update binutils requirement for powerpc*-linux.
  
! 2005-03-30  Alan Modra  <amodra@bigpond.net.au>
  
! 	PR target/20203
! 	* builtins.c (get_memory_rtx): Expand address exp using EXPAND_NORMAL.
! 	Remove convert_memory_address call duplicating that in memory_address.
  
! 2005-03-29  Alexandre Oliva  <aoliva@redhat.com>
  
! 	PR rtl-optimization/20532
! 	* simplify-rtx.c (simplify_binary_operation): Protect from
! 	overflow when adding coefficients for PLUS or MINUS.  Handle
! 	CONST_DOUBLE exact power of two as multiplier.
  
! 2005-03-29  Richard Henderson  <rth@redhat.com>
  
! 	PR c/20519
! 	* c-decl.c (c_finish_incomplete_decl): Update complete_array_type call.
! 	(build_compound_literal): Likewise.  Propagate decl type into the
! 	initializer.
! 	(finish_decl): Likewise.  Use new return value from complete_array_type
! 	for zero sized arrays.
! 	(complete_array_type): Move ...
! 	* c-common.c (complete_array_type): ... here.  Change first argument
! 	to pointer-to-type-node.  Consistently use sizetype for the index
! 	except for zero sized arrays.  Detect zero sized arrays for pedantic
! 	mode diagnostics.  Create a new type node instead of modifying the
! 	old node in place.
! 	* c-tree.h (complete_array_type): Move decl ...
! 	* c-common.h (complete_array_type): ... here.
  
! 2005-03-29  Richard Henderson  <rth@redhat.com>
  
! 	PR tree-opt/19108
! 	* tree-sra.c (generate_element_init_1): Handle RANGE_EXPR.
  
! 2005-03-29  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR middle-end/20622
! 	* cgraph.h (struct cgraph_varpool_node): Add alias field.
! 	* cgraph.c (cgraph_varpool_assemble_pending_decls): Don't call
! 	assemble_variable on aliases.
! 	* varasm.c (assemble_alias): Set node->alias.
! 	* toplev.c (wrapup_global_declarations): Don't call
! 	rest_of_decl_compilation on aliases again.
  
! 2005-03-29  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	PR middle-end/20263
! 	* varasm.c (make_decl_rtl) [ASM_DECLARE_REGISTER_GLOBAL]: Use
! 	the DECL_NAME, not the DECL_ASSEMBLER_NAME.
  
! 2005-03-24  Geoffrey Keating  <geoffk@apple.com>
  
! 	* c.opt (fvisibility-inlines-hidden): Allow for ObjC++.
  
! 	* config/i386/darwin.h (TARGET_SUBTARGET_DEFAULT): Add
! 	MASK_128BIT_LONG_DOUBLE, MASK_ALIGN_DOUBLE.
  
! 2005-03-25  John David Anglin  <dave.anglin@nrc-crnc.gc.ca>
  
! 	PR target/15491
! 	* vax.c (vax_rtx_costs_1): Merge with vax_rtx_costs.
! 	(vax_rtx_costs): Return false when passed unsupported rtx's.  Handle
! 	FLOAT_EXTEND, FLOAT_TRUNCATE and TRUNCATE.  Fix costs for POST_INC,
! 	PRE_DEC, NEG and NOT.
  
! 2005-03-25  Zdenek Dvorak  <dvorakz@suse.cz>
  
! 	PR rtl-optimization/20249
! 	* cse.c (insert_regs): Do not record equivalence of registers in
! 	different modes.
  
! 2005-03-24  James E Wilson  <wilson@specifixinc.com>
  
! 	* doc/install.texi (--enable-altivec): Delete docs.
  
! 2005-03-24  J"orn Rennecke <joern.rennecke@st.com>
  
! 	Band aid for PR target/20617:
! 	* config/sh/lib1funcs.asm (FUNC, ALIAS): Add .hidden directive.
  
! 2005-03-23  Daniel Berlin  <dberlin@dberlin.org>
  
! 	Fix PR tree-optimization/20601
  
! 	* tree-ssa-pre.c (insert_aux): Add missing condition to
! 	constification.
  
! 2005-03-22  James E Wilson  <wilson@specifixinc.com>
  
! 	PR c++/19769
! 	* dwarf2out.c (declare_in_namespace): Ignore decls with an abstract
! 	origin.
  
! 2005-03-22  Daniel Berlin  <dberlin@dberlin.org>
  
! 	* c-opts.c (c_common_parse_file): Only start/end main source file
! 	if debug hooks says the writer wants it.
! 	* dbxout.c (dbx_debug_hooks): Add start_end_main_source_file
! 	member.
! 	(xcoff_debug_hooks): Ditto.
! 	* debug.c (do_nothing_hooks): Ditto.
! 	* debug.h (gcc_debug_hooks): Ditto.
! 	* dwarf2out.c (dwarf2_debug_hooks): Ditto.
! 	* sdbout.c (sdb_debug_hooks): Ditto.
! 	* vmsdbgout.c (vmsdbg_debug_hooks): Ditto.
  
! 2005-03-22  Mark Mitchell  <mark@codesourcery.com>
  
! 	* doc/extend.texi: Deprecate C++ min/max operators.
  
! 2005-03-22  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/20561
! 	* cfglayout.c (reemit_insn_block_notes): Don't put block notes in
! 	between jump table and its label.
! 	* final.c (shorten_branches): Handle notes in between ADDR_VEC
! 	resp. ADDR_DIFF_VEC and the label preceeding it.
! 	(final_scan_insn): Likewise.  Ensure ADDR_VEC resp. ADDR_DIFF_VEC
! 	is emitted in the right section.
  
! 2005-03-21  Roger Sayle  <roger@eyesopen.com>
  
! 	PR middle-end/20539
! 	* fold-const.c (fold_binary): Fix type mismatch between
! 	TRUTH_{AND,OR,XOR}_EXPR nodes an their operands' types.
! 	(fold_binary) <TRUTH_XOR_EXPR>: Avoid calling invert_truthvalue
! 	for non-truth-valued expressions.
  
! 	* c-common.c (c_common_truthvalue_conversion): Handle ERROR_MARK
! 	and FUNCTION_DECL in the main switch.
! 	<TRUTH_ANDIF_EXPR, TRUTH_ORIF_EXPR, TRUTH_AND_EXPR, TRUTH_OR_EXPR,
! 	TRUTH_XOR_EXPR>: When changing the result type of these tree nodes,
! 	we also need to convert their operands to match.
! 	<TRUTH_NOT_EXPR>: Likewise.
  
! 2005-03-21  Roger Sayle  <roger@eyesopen.com>
  
! 	PR middle-end/20557
! 	* bb-reorder.c (duplicate_computed_gotos): Use can_duplicate_block_p
! 	to determine whether a block can be duplicated, rather than test
! 	whether the block contains noncopyable insns ourselves.
  
! 2005-03-21  Richard Guenther  <rguenth@gcc.gnu.org>
  
! 	* tree-ssa-loop.c (gate_tree_complete_unroll): Run complete
! 	unrolling if -fpeel-loops is specified, too.
! 	* tree-ssa-loop-ivcanon.c (try_unroll_loop_completely):
! 	Remove superfluous check for flag_unroll_loops.
  
! 2005-03-21  Nathan Sidwell  <nathan@codesourcery.com>
  
! 	PR other/20564
! 	* gcov.c (output_lines): Only output function block summary when
! 	outputting branch information.
! 	* doc/gcov.texi: Document format of preamble and additional block
! 	information lines.
  
! 2005-03-21  Richard Sandiford  <rsandifo@redhat.com>
  
! 	* libgcc2.h (LIBGCC2_HAS_SF_MODE): New macro.
! 	(LIBGCC2_HAS_DF_MODE, LIBGCC2_HAS_TF_MODE, LIBGCC2_HAS_XF_MODE): Make
! 	the defaults false if BITS_PER_UNIT != 8.
! 	(SFtype, SCtype, __fixsfdi, __floatdisf, __fixunssfSI, __fixunssfDI)
! 	(__powisf2, __divsc3, __mulsc3): Guard with LIBGCC2_HAS_SF_MODE rather
! 	than BITS_PER_UNIT != 8.
! 	(L_fixdfdi, L_fixsfdi, L_fixtfdi, L_fixunsdfdi, L_fixunsdfsi)
! 	(L_fixunssfdi, L_fixunssfsi, L_fixunstfdi, L_fixunsxfdi, L_fixunsxfsi)
! 	(L_fixxfdi, L_floatdidf, L_floatdisf, L_floatditf, L_floatdixf): Remove
! 	#undefs.
! 	* libgcc2.c (__fixunssfDI, __fixsfdi, __floatdisf, __fixunssfSI)
! 	(__powisf2, __divsc3, __mulsc3): Guard with LIBGCC2_HAS_SF_MODE.
  
! 2005-03-20  Marek Michalkiewicz  <marekm@amelek.gda.pl>
  
! 	PR target/18551
! 	* config/avr/avr.c (avr_output_function_prologue): Do not use
! 	current_function_name() in a label, use a local label instead.
  
! 2005-03-08  Dorit Naishlos  <dorit@il.ibm.com>
! 	    Ira Rosen  <irar@il.ibm.com>
  
! 	PR tree-optimization/20474
! 	* tree-vect-analyze.c (vect_analyze_pointer_ref_access): Check the
! 	size_type of the relevant pointer. Check for COMPLETE_TYPE_P.
  
! 2005-03-20  Joseph S. Myers  <joseph@codesourcery.com>
  
! 	* c-decl.c (check_bitfield_type_and_width): Require bit-field
! 	width to have integer type.
! 	(build_enumerator): Require enumerator value to have integer type.
  
! 2005-03-19  Joseph S. Myers  <joseph@codesourcery.com>
  
! 	* doc/extend.texi (__builtin_inf): Move statement about INFINITY
! 	to __builtin_inff.
  
! 2005-03-19  Joseph S. Myers  <joseph@codesourcery.com>
  
! 	* c.opt (ansi, std=iso9899:1990, std=iso9899:1999,
! 	std=iso9899:199x): Correct descriptions.
  
! 2005-03-19  Joseph S. Myers  <joseph@codesourcery.com>
  
! 	* config.gcc: Consistently use solaris2.1[0-9]* instead of
! 	solaris2.1[0-9].
  
! 2005-03-19  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
  
! 	PR middle-end/20493
! 	* fold-const.c (fold_widened_comparison): Don't optimize casts of
! 	function pointers on targets that require function pointer
! 	canonicalization.
! 	(fold_sign_changed_comparison): Likewise.
  
! 2005-03-19  Andy Hutchinson  <HutchinsonAndy@netscape.net>
  
! 	PR target/18251
! 	* config/avr/avr.md (movmemhi): Rewrite as RTL loop.
! 	(*movmemqi_insn): Delete.
! 	(*movmemhi): Delete.
  
! 2005-03-18  Jan Hubicka  <jh@suse.cz>
  
! 	PR middle-end/20225
! 	* cgraph.c (cgraph_mark_reachable_node): Assert that it is not called
! 	too late.
! 	* varasm.c (find_decl_and_mark_needed): Mark needed only when not
! 	called too late.
  
! 2005-03-18  Ralf Corsepius  <ralf.corsepius@rtems.org>
  
! 	* config/i386/t-rtems-i386 (MULTILIBS): Remove k6, athlon,
! 	mno-fp-ret-in-387 multilib variants.
  
! 2005-03-17  H.J. Lu  <hongjiu.lu@intel.com>
  
! 	PR target/18380
! 	* config/ia64/unwind-ia64.c (_Unwind_FindTableEntry): Removed.
  
! 2005-03-17  Richard Henderson  <rth@redhat.com>
  
! 	* doc/extend.texi (Weak Pragmas): New section.
! 	(attribute alias): Clarify that target must be in the same
! 	translation unit.
  
! 2005-03-16  James E. Wilson  <wilson@specifixinc.com>
  
! 	* config/ia64/ia64.c (issue_nops_and_insn): Check first_insn attribute,
! 	and return without creating new state if before_nops_num is nonzero.
! 	* config/ia64/ia64.md (first_insn): New attribute.
! 	(alloc): Set it to yes.
  
! 2005-03-16  Richard Henderson  <rth@redhat.com>
  
! 	PR middle-end/15700
! 	* varasm.c (struct alias_pair): Rename from struct output_def_pair.
! 	(alias_pairs): Rename from output_defs.
! 	(find_decl_and_mark_needed): Split out from assemble_alias.
! 	(do_assemble_alias): New.
! 	(assemble_output_def): Remove.
! 	(finish_aliases_1, finish_aliases_2): New.
! 	(process_pending_assemble_output_defs): Remove.
! 	(assemble_alias): Defer aliases for which we don't yet have a
! 	non-external decl for the target symbol.
! 	* passes.c (rest_of_decl_compilation): Register variables with cgraph.
! 	* cgraphunit.c (cgraph_finalize_compilation_unit): Use finish_aliases_1.
! 	* toplev.c (compile_file): Use finish_aliases_2 instead of
! 	process_pending_assemble_output_defs.
! 	* tree.h (finish_aliases_1, finish_aliases_2): Declare.
! 	(process_pending_assemble_output_defs): Remove.
  
! 2005-03-16  Andrew Pinski  <pinskia@physics.uc.edu>
  
! 	* config/i386/emmintrin.h (_mm_extract_epi16): Correct the number
! 	of closing parenthesis.
  
! 2005-03-16  Roger Sayle  <roger@eyesopen.com>
  
! 	PR tree-optimization/17454
! 	* tree.c (tree_size): Add case for TREE_BINFO.
! 	* fold-const.c (fold_checksum_tree): Only clear the overloaded
! 	field TYPE_CACHED_VALUES if TYPE_CACHED_VALUES_P is set.
  
! 2005-03-15  Eric Christopher  <echristo@redhat.com>
  
! 	* config/mips/mips.h (DWARF_CIE_DATA_ALIGNMENT): Change for
! 	STACK_GROWS_DOWNWARD.
  
! 2005-03-15  Daniel Jacobowitz  <dan@codesourcery.com>
  
! 	* config/arm/arm.h (CONDITIONAL_REGISTER_USAGE): Don't clear
! 	call_used_regs for wCG registers.
  
! 2005-03-15  Ulrich Weigand  <uweigand@de.ibm.com>
  
! 	* config/s390/s390.c (s390_secondary_output_reload_class): Adapt check
! 	for non-offsettable memory references to cope with outstanding reload
! 	replacements, take 2.
  
! 2005-03-14  Alexandre Oliva  <aoliva@redhat.com>
  
! 	PR c++/20280
! 	* gimplify.c (gimplify_cond_expr): Add fallback argument.  Use a
! 	temporary variable of pointer type if an lvalues is required.
! 	(gimplify_modify_expr_rhs): Request an rvalue from it.
! 	(gimplify_expr): Pass fallback on.
  
! 2005-03-14  Alexandre Oliva  <aoliva@redhat.com>
  
! 	PR middle-end/18628
! 	* cse.c (fold_rtx_mem): Don't fold a load from a jumptable into a
! 	register.
  
! 2005-03-14  Richard Sandiford  <rsandifo@redhat.com>
  
! 	* doc/invoke.texi: Document new MIPS -msym32 and -mno-sym32 options.
! 	* config/mips/mips.h (MASK_SYM32, TARGET_SYM32): New macros.
! 	(TARGET_SWITCHES): Add -msym32 and -mno-sym32.
! 	(ABI_HAS_64BIT_SYMBOLS): Set to false if TARGET_SYM32.
! 	(ASM_SPEC): Pass down -msym32 and -mno-sym32.
  
! 2005-03-14  Richard Sandiford  <rsandifo@redhat.com>
  
! 	* config/mips/mips.h (mips_fix_vr4130_string): Declare.
! 	(TARGET_FIX_VR4130): New macro.
! 	(TARGET_OPTIONS): Add -mfix-vr4130.
! 	(ISA_HAS_MACCHI): New macro.
! 	(ASM_SPEC): Add -mfix-vr4130.
! 	* config/mips/mips.c (mips_fix_vr4130_string): New variable.
! 	(override_options): Handle mips_fix_vr4130_string.
! 	(mips_avoid_hazards): Clear all_noreorder_p
! 	if we're working around VR4130 errata and the macc alternatives
! 	are not available.
! 	* config/mips/mips.md (mfhilo_<mode>): Turn into a define_expand.
! 	(*mfhilo_<mode>, *mfhilo_<mode>_macc): New insns.
! 	* config/mips/vr.h (DEFAULT_VR_ARCH): Set to mfix-vr4130.
! 	(MULTILIB_DEFAULTS): Remove leading "march=".
! 	(DRIVER_SELF_SPECS): Likewise.  Make -mfix-vr4130 imply -march=vr4130
! 	if no architecture option is given.
! 	* config/mips/t-vr (MULTILIB_OPTIONS): Use -mfix-vr4130 for the
! 	VR4130 multilibs.
! 	(MULTILIB_MATCHES): Map -march=vr4130 to the -mfix-vr4130 multilibs.
! 	* doc/invoke.texi: Document -mfix-vr4130.
  
! 2005-03-13  Roger Sayle  <roger@eyesopen.com>
  
! 	PR middle-end/19331
! 	* tree.c (get_unwidened): Treat CONVERT_EXPR and NOP_EXPR identically.
! 	* fold-const.c (fold_sign_changed_comparison): Likewise.
! 	(fold_binary): Optimize comparisons against widened operands if
! 	the extension is represented by a CONVERT_EXPR, same as a NOP_EXPR.
  
! 2005-03-14  Alan Modra  <amodra@bigpond.net.au>
  
! 	* config.gcc: Remove excess indentation.
! 	(powerpc*-*-*, rs6000-*-*): Accept --with-cpu/tune power5 and 8548.
  
! 2005-03-13  Marek Michalkiewicz  <marekm@amelek.gda.pl>
  
! 	PR target/20288
! 	* config/avr/avr.c (print_operand): Add 'p' and 'r'.
! 	(out_movhi_r_mr): Read low byte of volatile MEM first.
! 	(out_movhi_mr_r): Write high byte of volatile MEM first.
  
! 2005-03-11  David Edelsohn  <edelsohn@gnu.org>
  
! 	PR rtl-optimization/20306
! 	* expr.c (emit_move_complex): Set try_int false if mode is
! 	MODE_COMPLEX_FLOAT and mov_optab exists for inner mode.  Only try
! 	emit_block_move if try_int is true.
  
! 2005-03-11  Richard Henderson  <rth@redhat.com>
  
! 	PR target/20415
! 	* config/i386/mmx.md (vec_dupv4hi): Fix predicate.
! 	* config/i386/i386.c (ix86_expand_vector_init_duplicate): Update
! 	to match.
  
! 2005-03-11  Richard Sandiford  <rsandifo@redhat.com>
  
! 	* config/mips/mips.c (override_options): Only warn about -mint64
! 	deprecation if TARGET_INT64.
  
! 2005-03-10  Andrew Pinski  <pinskia@physics.uc.edu>
  
! 	PR rtl-opt/20412
! 	* simplify-rtx.c (simplify_relational_operation_1): Fix typo - check the
! 	correct mode.
  
! 2005-03-10  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/20322
! 	* combine.c (try_combine): If recog_for_combine added CLOBBERs
! 	to NEWI2PAT, fail to combine if they are used by NEWPAT.
  
! 2005-03-10  Aldy Hernandez  <aldyh@redhat.com>
  
! 	* doc/invoke.texi: Add 8540 to list of cpus in rs6000 cpu section.
  
! 2005-03-10  Bob Wilson  <bob.wilson@acm.org>
  
! 	* config/xtensa/xtensa.h (MEMBER_TYPE_FORCES_BLK): Define.
  
! 2005-03-10  Nathan Sidwell  <nathan@codesourcery.com>
  
! 	PR c++/20375
! 	* function.c (struct assign_parm_data_one): Remove last_named
! 	field.
! 	(assign_parm_find_data_types): Don't determine last_named.
! 	Reorder named_parm determination.
! 	(assign_parms): Only setup varargs on the last non-varadic
! 	parameter.
  
! 2005-03-10  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR inline-asm/20314
! 	* gimplify.c (gimplify_asm_expr): Handle input/output constraints
! 	with multiple alternatives.
  
! 	* stmt.c (parse_output_constraint): Fix a typo.
  
! 2005-03-09  Ulrich Weigand  <uweigand@de.ibm.com>
  
! 	* config/s390/s390.c (s390_secondary_output_reload_class): Adapt check
! 	for non-offsettable memory references to cope with outstanding reload
! 	replacements.
! 	* config/s390/s390.md ("reload_outti"): Call find_replacement to
! 	avoid losing outstanding address reloads.
! 	("reload_outdi", "reload_outdf"): Likewise.
  
! 2005-03-08  Ira Rosen  <irar@il.ibm.com>
  
! 	PR tree-optimization/20122
! 	* tree-vect-analyze.c (vect_object_analysis): Analyze initial
! 	condition of access function instead of base.
  
! 2005-03-07  Aldy Hernandez  <aldyh@redhat.com>
  
! 	* config/rs6000/rs6000-protos.h: Rename output_e500_flip_eq_bit to
! 	output_e500_flip_gt_bit.
  
! 	* config/rs6000/rs6000.c (print_operand): case D: Print out bit 31
! 	as bit 31.
! 	(rs6000_generate_compare): Fix logic to look at the correct bits.
! 	(output_e500_flip_eq_bit): Rename to output_e500_flip_gt_bit.
! 	Look at GT bit.
! 	(rs6000_emit_sCOND): Rename gen_e500_flip_eq_bit to
! 	gen_e500_flip_gt_bit.  Rename gen_move_from_CR_eq_bit to
! 	gen_move_from_CR_gt_bit.
  
! 	* config/rs6000/rs6000.md ("move_from_CR_eq_bit"): Change bit
! 	("move_from_CR_eq_bit"): Rename to move_from_CR_gt_bit.
! 	(UNSPEC_MV_CR_EQ): Rename to UNSPEC_MV_CR_GT.
  
! 	* config/rs6000/spe.md ("e500_cr_ior_compare"): New.
! 	(E500_CR_IOR_COMPARE): New constant.
  
! 2005-03-08  Earl Chew <earl_chew@agilent.com>
! 	    David Billinghurst <David.Billinghurst@riotinto.com>
  
! 	* config/i386/host-cygwin.c: New file to support precompiled
! 	headers on cygwin
! 	* config/i386/x-cygwin: Use host-cygwin.c on cygwin host
! 	* config.host: Use above files for cygwin host.
  
! 2005-03-07  Richard Sandiford  <rsandifo@redhat.com>
  
! 	PR rtl-optimization/19683
! 	* reload1.c (choose_reload_regs): Pass the number of bits, not the
! 	number of bytes, to smallest_int_for_mode.  Fix arguments to
! 	REG_CANNOT_CHANGE_MODE_P.
  
! 2005-03-07  David Billinghurst <David.Billinghurst@riotinto.com>
  
! 	* config/i386/cygwin1.c(mingw_scan): Use xstrdup in calls to putenv.
  
! 2005-03-07  Joseph S. Myers  <joseph@codesourcery.com>
  
! 	* config/ia64/hpux.h (LINK_SPEC): Add -z.
! 	* config/ia64/ia64.c (ia64_function_value): Return a REG not a
! 	PARALLEL for an empty structure.
  
! 2005-03-05  James A. Morrison  <phython@gcc.gnu.org>
  
! 	* doc/c-tree.texi: Wrap comments in @r{}.
! 	* doc/cpp.texi: Likewise.
! 	* doc/cppinternals.texi: Likewise.
! 	* doc/extend.texi: Likewise.
! 	* doc/md.texi: Likewise.
! 	* doc/objc.texi: Likewise.
! 	* doc/sourcebuild.texi: Likewise.
! 	* doc/tm.texi: Likewise.
! 	* doc/tree-ssa.texi
  
! 2005-03-04  Devang Patel  <dpatel@apple.com>
  
! 	PR tree-optimization/18815
! 	* tree-if-conv.c (combine_blocks): Adjust loop header edges for
! 	loops with zero exit edges.
  
! 2005-03-05  Joseph S. Myers  <joseph@codesourcery.com>
  
! 	* config.gcc (hppa*64*-*-hpux11*): Use pa/pa-hpux1111.h for
! 	*-*-hpux11.[1-9]*, not just for *-*-hpux11.11.
  
! 2005-03-05  John David Anglin  <dave.danglin@nrc-cnrc.gc.ca>
! 	    Joseph S. Myers  <joseph@codesourcery.com>
  
! 	PR c++/19797
! 	* pa/elf.h, pa64-hpux.h, som.h (ASM_OUTPUT_EXTERNAL_REAL): Define.
! 	(ASM_OUTPUT_EXTERNAL): Call pa_hpux_asm_output_external.
! 	* pa-protos.h (pa_hpux_asm_output_external): Add prototype.
! 	* pa.c (get_plabel): Change argument to symbol_ref.  Call
! 	maybe_get_identifier instead of get_identifier.
! 	(pa_hpux_asm_output_external, pa_hpux_file_end): New functions.
! 	(struct deferred_plabel): Replace name field with symbol field.
! 	(TARGET_ASM_FILE_END): Define as pa_hpux_file_end if
! 	ASM_OUTPUT_EXTERNAL_REAL is defined.
! 	(output_global_address): Use output_addr_const for output of all
! 	symbol_refs.
! 	(output_deferred_plabels): Use symbol_ref instead of name for address
! 	output.
! 	* pa.h (SYMBOL_FLAG_REFERENCED, SYMBOL_REF_REFERENCED_P,
! 	ASM_OUTPUT_SYMBOL_REF): New macros.
! 	* som.h (ASM_OUTPUT_EXTERNAL_LIBCALL): Use assemble_name_raw.  Update
! 	comment.
! 	(ASM_WEAKEN_LABEL): Use targetm.asm_out.globalize_label to globalize
! 	label.
  
! 2005-03-04  Andrew Haley  <aph@redhat.com>
  
! 	* unwind-dw2-fde-glibc.c (struct
! 	unw_eh_callback_data.check_cache):
! 	(frame_hdr_cache): New.
! 	(_Unwind_IteratePhdrCallback): Add ext_dl_phdr_info.
! 	Cache frame header info.
  
! 2005-03-04  Daniel Jacobowitz  <dan@codesourcery.com>
  
! 	2005-03-02  Daniel Jacobowitz  <dan@codesourcery.com>
! 	* config/arm/linux-elf.h (ARM_FUNCTION_PROFILER): Do not use (PLT)
! 	for Thumb.
! 	* config/arm/netbsd-elf.h (ARM_FUNCTION_PROFILER): Likewise.
  
! 2005-03-04  Daniel Berlin <dberlin@dbrelin.org>
  
! 	Fix PR debug/20253
  
! 	* c-opts.c (c_common_parse_file): Call start_source_file
! 	and end_source_file at the approriate times.
  
! 	* dwarf2out.c (dwarf2out_finish): Don't auto-end
! 	the main file, it will be done for us now.
  
! 2005-03-03  Alan Modra  <amodra@bigpond.net.au>
  
! 	PR target/20277
! 	* config/rs6000/rs6000.c (rs6000_override_options): Don't allow
! 	-mcpu to override any other explicitly given flags.
  
! 2005-03-02  Mark Mitchell  <mark@codesourcery.com>
  
! 	PR c++/19916
! 	* varasm.c (initializer_constant_valid_p): Allow conversions
! 	between OFFSET_TYPEs.  Tidy.
  
! 2005-03-02  Geoffrey Keating  <geoffk@apple.com>
  
! 	* config/darwin8.h (LIB_SPEC): Switch -lmx and -lSystem.
  
! 2005-03-02  Richard Guenther  <rguenth@gcc.gnu.org>
  
! 	* cgraph.h (struct cgraph_edge): Add prev_caller and
! 	prev_callee fields.
! 	(cgraph_node_remove_callees): Export.
! 	* cgraph.c (cgraph_create_edge): Initialize prev_caller
! 	and prev_callee.
! 	(cgraph_edge_remove_callee): New function.
! 	(cgraph_edge_remove_caller): Likewise.
! 	(cgraph_remove_edge): Use.
! 	(cgraph_redirect_edge_callee): Likewise.
! 	(cgraph_node_remove_callees): New function.
! 	(cgraph_node_remove_callers): Likewise.
! 	(cgraph_remove_node): Use.
! 	* tree-optimize.c (tree_rest_of_compilation): Use
! 	cgraph_node_remove_callees instead of manual loop.
! 	* cgraphunit.c (cgraph_finalize_function): Likewise.
! 	(cgraph_expand_function): Likewise.
! 	(cgraph_remove_unreachable_nodes): Likewise.
  
! 2005-03-01  Roger Sayle  <roger@eyesopen.com>
  
! 	PR tree-optimization/20216
! 	* tree-chrec.c (tree_fold_factorial): Delete.
! 	(tree_fold_binomial): Change argument list to take a return type
! 	and change the type of K to unsigned int.  Rewrite to avoid explicit
! 	evaluation of factorials, and (recursively) calling fold to perform
! 	compile-time arithmetic.  Return NULL on (internal) overflow.
! 	(chrec_evaluate): Change type of K to an unsigned int.  Avoid
! 	calling tree_fold_binomial unnecessarily.  Return chrec_dont_know
! 	if any intermediate calculation overflows.
! 	(chrec_apply): Update call to chrec_evaluate.
  
! 2005-03-01  Hans-Peter Nilsson  <hp@axis.com>
  
! 	PR target/19065.
! 	* config/cris/cris.h (EXTRA_CONSTRAINT_Q): Accept only (mem (reg)),
! 	not including (reg). Do not check for reg being CRIS_PC_REGNUM.
! 	(EXTRA_MEMORY_CONSTRAINT): Define as 'Q'.
! 	* config/cris/cris.md: Tweak comments referring to Q.
! 	("cmpsi", "cmphi", "cmpqi", "*movsi_internal", "movhi")
! 	("movstricthi", "movqi", "movstrictqi", "movsf", "addsi3")
! 	("addhi3", "addqi3", "subsi3", "subhi3", "subqi3")
! 	("*expanded_andsi", "*expanded_andhi", "*andhi_lowpart", "andqi3")
! 	("*andqi_lowpart", "iorsi3", "iorhi3", "iorqi3", "uminsi3"):
! 	Insert spaces in constraints to align alternatives vertically for
! 	readability.
! 	("cmphi"): Ditto.  Add separate alternative for operand 0 "r",
! 	operand 1: "M".
  
! 2005-02-28  Dale Johannesen  <dalej@apple.com>
! 	    Stan Shebs  <shebs@apple.com>
  
! 	Rewrite of 64-bit Darwin structure-by-value pass/return.
! 	* config/rs6000/rs6000.h (CUMULATIVE_ARGS): New fields
! 	intoffset, use_stack, named.
! 	* config/rs6000/rs6000.c (rs6000_darwin64_function_arg):  Remove.
! 	(rs6000_darwin64_record_arg_advance_flush):  New.
! 	(rs6000_darwin64_record_arg_advance_recurse): New.
! 	(rs6000_darwin64_record_arg_flush):  New.
! 	(rs6000_darwin64_record_arg_recurse):  New.
! 	(rs6000_darwin64_record_arg):  New.
! 	(rs6000_return_in_memory):  Remove AGGREGATE_TYPE_P check.
! 	(function_arg_boundary):  Handle 128-bit aligned structs.
! 	(function_arg_advance):  Rewrite darwin64 struct handling.
! 	(function_arg):  Call rs6000_darwin64_record_arg.
! 	(function_arg_partial_nregs):  Handle darwin64 structs.
! 	(rs6000_darwin64_function_value):  Remove.
! 	(rs6000_function_value):  Call rs6000_darwin64_record_arg.
  
! 2005-02-28  John David Anglin  <dave.anglin#nrc-cnrc.gc.ca>
  
! 	PR target/19819
! 	* pa.h (GO_IF_LEGITIMATE_ADDRESS): Allow allow hard registers during
! 	and after reload in REG+REG indexed addresses without REG_POINTER
! 	set in the base and not set in the index.
  
! 2005-02-28  Roger Sayle  <roger@eyesopen.com>
  
! 	PR middle-end/19874
! 	* tree-ssa.c (tree_ssa_useless_type_conversion_1): A conversion
! 	between different machine modes is never a "useless" conversion.
  
! 2005-02-27  Zack Weinberg  <zack@codesourcery.com>
  
! 	* config/alpha/t-osf4, config/arm/t-netbsd, config/ia64/t-hpux
! 	* config/pa/t-hpux-shlib (SHLIB_INSTALL): Create the
! 	installation directory first.
  
! 2005-02-27  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
  
! 	PR rtl-optimization/17728
! 	* pa.md (mulsi3, divsi3, udivsi3, modsi3): Change predicate for
! 	operand 0 from general_operand to move_dest_operand.
  
! 2005-02-26  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
  
! 	* pa/elf.h, pa/som.h (ASM_OUTPUT_EXTERNAL): Use assemble_name_raw
! 	instead of trying to save and restore TREE_SYMBOL_REFERENCED.
! 	* pa/pa64-hpux.h (ASM_OUTPUT_TYPE_DIRECTIVE): Define.
! 	(ASM_OUTPUT_EXTERNAL): Don't save and restore TREE_SYMBOL_REFERENCED.
  
! 2005-02-26  Andrew Pinski  <pinskia@physics.uc.edu>
  
! 	PR tree-opt/20188
! 	* tree-ssa-alias.c (count_uses_and_derefs): If we have TREE_LIST
! 	for the lhs, also walk over the tree.  Likewise for rhs.
  
! 2005-02-26  Joseph S. Myers  <joseph@codesourcery.com>
  
! 	* doc/invoke.texi, doc/standards.texi: Refer to
! 	gcc-4.0/c99status.html.
  
! 2005-02-26  Paolo Carlini  <pcarlini@suse.de>
  
! 	* doc/extend.texi (5.24 Declaring Attributes of Functions)<noreturn>:
! 	Clarify that the alternative way doesn't work in GNU C++.
  
! 2005-02-25  Steve Ellcey  <sje@cup.hp.com>
  
! 	PR target/19930
! 	* doc/tm.texi (LIBGCC2_LONG_DOUBLE_TYPE_SIZE): Document.
! 	(LIBGCC2_HAS_DF_MODE): New.
! 	(LIBGCC2_HAS_XF_MODE): New.
! 	(LIBGCC2_HAS_TF_MODE): New.
! 	* libgcc2.h (LIBGCC2_HAS_XF_MODE): New name for HAVE_XFMODE.
! 	(LIBGCC2_HAS_TF_MODE): New name for HAVE_TFMODE.
! 	* libgcc2.c (LIBGCC2_HAS_XF_MODE): New name for HAVE_XFMODE.
! 	(LIBGCC2_HAS_TF_MODE): New name for HAVE_TFMODE.
! 	(LIBGCC2_HAS_DF_MODE): New name for HAVE_DFMODE.
! 	* config/ia64/t-ia64 (LIB1ASMFUNCS): Remove __compat
! 	and add _fixtfdi, _fixunstfdi, _floatditf
! 	* lib1funcs.asm: Remove L__compat. Add L_fixtfdi,
! 	L_fixunstfdi, L_floatditf.
! 	* config/ia64/hpux.h (LIBGCC2_HAS_XF_MODE): Define.
! 	(LIBGCC2_HAS_TF_MODE): Define.
  
! 2005-02-25  Diego Novillo  <dnovillo@redhat.com>
  
! 	PR tree-optimization/20204
! 	* tree-into-ssa.c (insert_phi_nodes_for): Do not use
! 	REWRITE_THIS_STMT markers on PHI nodes.
! 	(rewrite_initialize_block): Likewise.
  
! 2005-02-25  Mark Mitchell  <mark@codesourcery.com>
  
! 	* version.c (version_string): Mark as prerelease.
! 	* doc/include/gcc-common.texi (DEVELOPMENT): @clear it.
! 	* configure.ac (is_release): Set to 1.
! 	* configure: Regenerated.
  
! 2005-02-25  Zdenek Dvorak  <dvorakz@suse.cz>
  
! 	PR tree-optimization/19937
! 	* tree-ssa-loop-ivopts.c (rewrite_use_compare): Cast the final value
! 	to the type of the induction variable.
  
! 2005-02-25  Kaz Kojima  <kkojima@gcc.gnu.org>
  
! 	PR rtl-optimization/20117
! 	* bb-reorder.c (duplicate_computed_gotos): Don't duplicate
! 	the block including noncopyable insn.
  
! 2005-02-24  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* cse.c (delete_trivially_dead_insns): Speed up by minimizing
! 	calls to find_reg_note.
  
! 2005-02-24  Richard Henderson  <rth@redhat.com>
  
! 	PR tree-opt/20127
! 	* tree-sra.c (instantiate_element): Copy TREE_THIS_VOLATILE from
! 	the type.
  
! 2005-02-24  Fariborz Jahanian <fjahanian@apple.com>
  
! 	* config/rs6000/rs6000.c (rs6000_legitimize_reload_address): Check for
! 	vector types if to use base reg for misaligned non-word ld/std.
  
! 2005-02-24  Hans-Peter Nilsson  <hp@axis.com>
  
! 	PR target/14619
! 	* config/cris/cris.c (cris_target_asm_function_prologue): Create
! 	dwarf2 label manually and put it after, not before the prologue.
  
! 2005-02-24  David Edelsohn  <edelsohn@gnu.org>
  
! 	PR target/19019
! 	* reload.c (operands_match_p): Only increment register number for
! 	SCALAR_INT_MODE_P modes in multiple hard registers.
  
! 	* config/rs6000/rs6000.md (trunctfdf2): Remove register constraints.
! 	Fix formatting.
  
! 2005-02-24  Volker Reichelt  <reichelt@igpm.rwth-aachen.de>
  
! 	* ChangeLog.5: Fix log message typo(s).
! 	* ChangeLog.7: Likewise.
! 	* ChangeLog.tree-ssa: Likewise.
! 	* cfgexpand.c: Fix comment typo(s).
! 	* conflict.c: Likewise.
! 	* defaults.h: Likewise.
! 	* dwarf2out.c: Likewise.
! 	* gcse.c: Likewise.
! 	* ggc-page.c: Likewise.
! 	* tree-eh.c: Likewise.
! 	* tree-ssa-dom.c: Likewise.
  
! 2005-02-24  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/19019
! 	* mklibgcc.in: Pass -DSHARED when compiling all *_s${objext} objects.
! 	* config/rs6000/darwin-ldouble.c: Only use the .symver directives
! 	if SHARED is defined.
  
! 	PR target/20196
! 	* config/rs6000/rs6000.md (LTU, GTU sCC splitters): Add earlyclobber,
! 	allow splitting only if operands 0 and 3 don't overlap.
  
! 2005-02-24  Richard Henderson  <rth@redhat.com>
  
! 	PR middle-end/19953
! 	* builtins.c (fold_builtin_complex_mul, fold_builtin_complex_div): New.
! 	(fold_builtin_1): Call them.
! 	* fold-const.c (fold_complex_mult_parts): Split out from ...
! 	(fold_complex_mult): ... here.  Fix typo in both imaginary case.
! 	(fold_complex_div_parts, fold_complex_div): New.
! 	(fold): Use them.
! 	* tree.h (fold_complex_mult_parts, fold_complex_div_parts): Declare.
  
! 2005-02-24  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
  
! 	* tree-ssa-ccp.c (visit_assignment): Verify that result of
! 	VIEW_CONVERT_EXPR is_gimple_min_invariant.
  
! 	* print-tree.c (print_node_brief): Print LABEL_DECL_UID.
! 	(print_node): Likewise.
! 	Print TYPE_SIZES_GIMPLIFIED.
  
! 2005-02-24  Hans-Peter Nilsson  <hp@axis.com>
  
! 	* config/cris/cris.md ("umulhisi3", "umulqihi3", "mulsi3")
! 	("mulqihi3", "mulhisi3", "mulsidi3", "umulsidi3"): Mark input
! 	operands as commutative in constraints.
  
! 2005-02-24  Diego Novillo  <dnovillo@redhat.com>
  
! 	* tree-into-ssa.c: Re-organize internal functions.
  
! 2005-02-24  Richard Henderson  <rth@redhat.com>
  
! 	PR middle-end/18902
! 	* c-opts.c (c_common_post_options): Set flag_complex_method to 2
! 	for c99.
! 	* common.opt (fcx-limited-range): New.
! 	* opts.c (set_fast_math_flags): Set flag_cx_limited_range.
! 	* toplev.c (flag_complex_method): Initialize to 1.
! 	(process_options): Set flag_complex_method to 0 if
! 	flag_cx_limited_range.
! 	* doc/invoke.texi (-fcx-limited-range): New.
  
! 2005-02-24  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* cse.c (delete_trivially_dead_insns): Speed up by using
! 	NEXT_INSN and PREV_INSN directly instead of next_real_insn and
! 	prev_real_insn.
  
! 2005-02-24  Andrea Tarani  <andrea.tarani@gilbarco.com>
  
! 	* config/m68k/m68k.c (m68k_save_reg): Also save A5 for non-leaf
! 	functions when -mid-shared-library is being used.
  
! 2005-02-23  Daniel Jacobowitz  <dan@codesourcery.com>
  
! 	* doc/tm.texi (LINK_LIBGCC_SPECIAL): Remove.
! 	(LINK_LIBGCC_SPECIAL_1): Don't mention it.
! 	* gcc.c: Don't check for LINK_LIBGCC_SPECIAL.
! 	* system.h: Poison LINK_LIBGCC_SPECIAL.
  
! 2005-02-23  James E Wilson  <wilson@specifixinc.com>
  
! 	* gengtype.c (note_insn_name): Make 1 element larger.
  
! 2005-02-23  Roger Sayle  <roger@eyesopen.com>
  
! 	PR target/20018
! 	PR rtl-optimization/20097
! 	* simplify-rtx.c (simplify_relational_operation_1): Avoid creating
! 	BImode SUBREGs of SImode registers which confuse the ia64 backend.
  
! 2005-02-23  David Edelsohn  <edelsohn@gnu.org>
  
! 	* t-aix43 (SHLIB_INSTALL): Create directory for shared library.
! 	* t-aix52 (SHLIB_INSTALL): Same.
  
! 2005-02-23  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* genpreds.c: Update copyright.
  
! 2005-02-23  Michael Beach  <michaelb@ieee.org>
  
! 	PR target/20159
! 	* config/sparc/t-elf (startup files): Assemble with CPP.
  
! 2005-02-23  Paolo Bonzini  <bonzini@gnu.org>
  
! 	* genpreds.c (mark_mode_tests): Handle non-VOIDmode match_operands.
! 	(write_predicate_expr): Likewise.
  
! 2005-02-22  Diego Novillo  <dnovillo@redhat.com>
  
! 	PR tree-optimization/20100
! 	PR tree-optimization/20115
! 	* tree-optimize.c (init_tree_optimization_passes): Remove
! 	pass_maybe_create_global_var.
! 	* tree-pass.h (pass_maybe_create_global_var): Remove.
! 	* tree-ssa-alias.c (aliases_computed_p): Declare.
! 	(struct alias_info): Add field NUM_PURE_CONST_CALLS_FOUND.
! 	(count_calls_and_maybe_create_global_var): Remove.
! 	(pass_maybe_create_global_var): Remove.
! 	(init_alias_info): Do not declare aliases_computed_p.
! 	(maybe_create_global_var): If the function contains no
! 	call-clobbered variables and a mix of pure/const and regular
! 	function calls, create .GLOBAL_VAR.
! 	Mark all call-clobbered variables for renaming.
! 	(merge_pointed_to_info): Update comment.
! 	(add_pointed_to_var): Likewise.
! 	(is_escape_site): Likewise.
! 	Accept struct alias_info * instead of size_t *.
! 	Update all users.
! 	Update AI->NUM_CALLS_FOUND and AI->NUM_PURE_CONST_CALLS_FOUND
! 	as necessary.
! 	* tree-ssa-operands.c (get_call_expr_operands): If
! 	ALIASES_COMPUTED_P is false, do not add call-clobbering
! 	operands.
! 	* tree-ssa.c (init_tree_ssa): Set ALIASES_COMPUTED_P to false.
! 	(delete_tree_ssa): Likewise.
  
! 2005-02-22  James E Wilson  <wilson@specifixinc.com>
  
! 	* toplev.c (backend_init): Don't call init_adjust_machine_modes here.
! 	(do_compile): Do call it here.
  
! 2005-02-22  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	PR rtl-optimization/20017.
! 	* passes.c (rest_of_handle_combine, rest_of_handle_cse,
! 	rest_of_handle_cse2, rest_of_handle_gcse): Call
! 	delete_dead_jumptables immediately before calling cleanup_cfg.
  
! 2005-02-22  Devang Patel  <dpatel@apple.com>
  
! 	PR 19952
! 	* tree-if-conv.c (process_phi_nodes): Use bsi_after_labels and skip
! 	all labels
  
! 2005-02-22  David Edelsohn  <edelsohn@gnu.org>
  
! 	* config/rs6000/aix.h (WINT_TYPE): Define.
  
! 2005-02-22  Stan Shebs  <shebs@apple.com>
  
! 	* config/rs6000/rs6000.c (rs6000_override_options): Default to
! 	natural alignment for 64-bit Darwin.
! 	(rs6000_parse_alignment_option): Warn about uses of -malign-power
! 	on 64-bit Darwin.
! 	* doc/invoke.texi: Document this.
  
! 2005-02-22  DJ Delorie  <dj@redhat.com>
  
! 	* c-common.c (c_common_type_for_mode): Pass the mode's precision
! 	to make_[un]signed_type, not the mode itself.
  
! 2005-02-22  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* cfg.c (cached_make_edge): Call make_edge if edge cache is
! 	not available.  Use tail calls wherever possible.
! 	(make_edge): Call unchecked_make_edge to create an edge.
  
! 	* tree-outof-ssa.c (SSANORM_USE_COALESCE_LIST): Remove.
! 	(coalesce_ssa_name): Don't check for
! 	SSANORM_USE_COALESCE_LIST.
! 	(rewrite_out_of_ssa): Don't use SSANORM_USE_COALESCE_LIST.
  
! 2005-02-22  Diego Novillo  <dnovillo@redhat.com>
  
! 	* tree-into-ssa.c (rewrite_blocks): Move debug dumps from ...
! 	(rewrite_into_ssa): ... here.
  
! 2005-02-21  Alexandre Oliva  <aoliva@redhat.com>
  
! 	PR tree-optimization/19786
! 	* tree-ssa-alias.c (compute_flow_insensitive_aliasing): Add one
! 	tag to another's may-alias bitmap when adding to the other's list.
  
! 2005-02-21  DJ Delorie  <dj@redhat.com>
  
! 	* tree-ssa-loop-ivopts.c (computation_cost): Start register
! 	numbering at LAST_VIRTUAL_REGISTER+1 to avoid possibly using hard
! 	registers in unsupported ways.
! 	* expmed.c (init_expmed): Likewise.
  
! 2005-02-21  Stan Cox  <scox@redhat.com>
  
! 	* config/iq2000/iq2000.h (DWARF_FRAME_RETURN_COLUMN): Change to 31.
  
! 2005-02-21  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* tree-cfg.c (fold_cond_expr_cond): New.
! 	(make_edges): Call fold_cond_expr_cond.
! 	(find_taken_edge): Accept nothing but INTEGER_CST.
! 	(find_taken_edge_cond_expr): Reject INTEGER_CST other than 0
! 	and 1.
! 	(find_taken_edge_switch_expr): Remove a check for INTEGER_CST.
  
! 	* flow.c (delete_dead_jumptables): Speed up by scanning insns
! 	that do not belong to any basic block.
  
! 2005-02-21  Jeff Law  <law@redhat.com>
  
! 	* cfganal.c (find_unreachable_blocks): Manually CSE load of
! 	e->dest.
  
! 2005-02-21  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* tree-outof-ssa.c (SSANORM_REMOVE_ALL_PHIS): Remove.
! 	(SSANORM_COALESCE_PARTITIONS, SSANORM_USE_COALESCE_LIST):
! 	Adjust their definitions.
! 	(remove_ssa_form): Don't check for SSANORM_REMOVE_ALL_PHIS.
! 	(rewrite_out_of_ssa): Don't use SSANORM_REMOVE_ALL_PHIS.
  
! 	* c-objc-common.h, c-pretty-print.c, cgraphunit.c, except.c,
! 	genautomata.c, langhooks.c, langhooks.h, system.h,
! 	config/arm/lib1funcs.asm: Update copyright.
  
! 2005-02-21  Ulrich Weigand  <uweigand@de.ibm.com>
  
! 	* dbxout.c (dbxout_function_end): Emit Lscope label always.
  
! 2005-02-21  Richard Guenther  <rguenth@gcc.gnu.org>
  
! 	PR bootstrap/13770
! 	* doc/install.texi: Document --with-gc.
  
! 2005-02-21  Paolo Bonzini  <bonzini@gnu.org>
  
! 	* simplify-rtx.c (simplify_unary_operation): Add a missing
! 	"break" statement.
  
! 2005-02-21  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	PR tree-optimization/18663
! 	* tree-ssa-dom.c (extract_range_from_cond): Return 0
! 	if the type has variable bounds.
  
! 2005-02-20  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* gcse.c: Remove an obsolete comment.
  
! 	* cse.c (init_cse_reg_info): Use xmalloc instead of xrealloc.
  
! 2005-02-20  Hans-Peter Nilsson  <hp@axis.com>
  
! 	* doc/extend.texi (Function Attributes) <Attribute const>: The
! 	attribute "pure" is below this text, not above.
  
! 2005-02-20  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
  
! 	* pa.c (pa_assemble_integer, get_plabel): Small cleanups.
! 	(pa_asm_output_mi_thunk): Use asm_output_insn instead of fprintf.
! 	* som.h (ASM_OUTPUT_EXTERNAL_LIBCALL): Small cleanup.
  
! 2005-02-20  Zack Weinberg  <zack@codesourcery.com>
  
! 	PR 18785
! 	* langhooks.h (struct lang_hooks): Add to_target_charset.
! 	* langhooks.c (lhd_to_target_charset): New function.
! 	* langhooks-def.h: Declare lhd_to_target_charset.
! 	(LANG_HOOKS_TO_TARGET_CHARSET): New macro.
! 	(LANG_HOOKS_INITIALIZER): Update.
! 	* c-common.c (c_common_to_target_charset): New function.
! 	* c-common.h: Declare it.
! 	* c-objc-common.h (LANG_HOOKS_TO_TARGET_CHARSET): Set to
! 	c_common_to_target_charset.
  
! 	* defaults.c (TARGET_BELL, TARGET_BS, TARGET_CR, TARGET_DIGIT0)
! 	(TARGET_ESC, TARGET_FF, TARGET_NEWLINE, TARGET_TAB, TARGET_VT):
! 	Delete definitions.
! 	* system.h: Poison them.
! 	* doc/tm.texi: Don't discuss them.
! 	* builtins.c (fold_builtin_isdigit): Use lang_hooks.to_target_charset.
! 	* c-pretty-print.c (pp_c_integer_constant): Don't use pp_c_char.
! 	(pp_c_char): Do not attempt to generate letter escapes for
! 	newline, tab, etc.
! 	* config/arm/arm.c (output_ascii_pseudo_op): Likewise.
! 	* config/mips/mips.c (mips_output_ascii): Likewise.
  
! 2005-02-20  Dorit Naishlos  <dorit@il.ibm.com>
  
! 	PR tree-optimization/19951
! 	* tree-vect-analyze.c (vect_analyze_loop_form): Check if loop exit edge
! 	is abnormal.
  
! 2005-02-19  Steven Bosscher  <stevenb@suse.de>
  
! 	PR middle-end/19698
! 	* function.h (struct function): New field `max_loop_depth'.
! 	* cfgloop.c (establish_preds): Update maximum loop depth seen so far.
! 	(flow_loops_find): Reset the max loop depth count before finding loops.
! 	* flow.c (MAX_LIVENESS_ROUNDS): New constant.
! 	(update_life_info_in_dirty_blocks): Remove 2002-05-28 workaround.
! 	(calculate_global_regs_live): Make sure the loop will terminate
! 	when the initial sets are not empty.
  
! 2005-02-19  Zack Weinberg  <zack@codesourcery.com>
  
! 	* mklibgcc.in: If libgcc_eh.a would be empty, put a dummy
! 	object inside.
! 	* config/ia64/hpux.h: Don't define LIBGCC_SPEC.
  
! 2005-02-19  Richard Sandiford  <rsandifo@redhat.com>
  
! 	PR other/19525
! 	* doc/invoke.texi: Remove documentation of %M spec.
! 	* gcc.c: Likewise.
! 	(init_spec): Remove %M suffix from -lgcc_s.
! 	(do_spec_1): Remove 'M' case.
! 	* mklibgcc.in: Remove SHLIB_MULTILIB handling.  Expect SHLIB_LINK
! 	to put shared libraries in the multilib directory.  Remove the
! 	shlib_so_soname substitution variable.  Don't add a multilib encoding
! 	to shlib_base_name.  Set shlib_slibdir_qual to the full pathname
! 	reported by -print-multi-os-directory.  Pass @multilib_dir@ to
! 	SHLIB_INSTALL as well as SHLIB_LINK.
! 	* config/t-slibgcc-elf-ver (SHLIB_SONAME): Use @shlib_base_name@.
! 	(SHLIB_NAME): Delete.
! 	(SHLIB_DIR): New macro.
! 	(SHLIB_LINK): Put $(SHLIB_SONAME) and $(SHLIB_SOLINK) in $(SHLIB_DIR).
! 	(SHLIB_INSTALL): Adjust accordingly.
! 	* config/t-slibgcc-darwin: As for t-slibgcc-elf-ver.
! 	* config/t-slibgcc-sld: Likewise.
! 	* config/t-libunwind-elf (SHLIBUNWIND_NAME): Delete.
! 	(SHLIBUNWIND_SONAME): Use @shlib_base_name@.
! 	(SHLIBUNWIND_LINK): Put $(SHLIBUNWIND_SONAME) and $(SHLIB_SOLINK)
! 	in $(SHLIB_DIR).
! 	(SHLIBUNWIND_INSTALL): Adjust accordingly.
! 	* config/i386/t-nwld (SHLIB_SONAME): Delete.
! 	(SHLIB_LINK, SHLIB_INSTALL): Use SHLIB_NAME instead of SHLIB_SONAME.
! 	Use @shlib_base_name@ instead of @shlib_so_name@.
! 	* config/ia64/t-hpux (SHLIB_LINK): Put @shlib_base_name@.so.0
! 	and @shlib_base_name@.so in @multilib_dir@.
! 	(SHLIB_INSTALL): Adjust accordingly.  Add @shlib_slibdir_qual@
! 	to the install path.
! 	* config/mips/t-slibgcc-irix: As for t-slibgcc-elf-ver.
! 	(SHLIB_LINK): Remove previous workaround.
! 	* config/pa/t-hpux-shlib (SHLIB_DIR, SHLIB_SLIBDIR_QUAL): New macros.
! 	(SHLIB_LINK): Put $(SHLIB_SONAME) and $(SHLIB_NAME) in $(SHLIB_DIR).
! 	(SHLIB_INSTALL): Adjust accordingly.  Add $(SHLIB_SLIBDIR_QUAL) to
! 	the install path.
! 	* config/rs6000/t-aix43 (SHLIB_LINK): Put @shlib_base_name@.a in
! 	@multilib_dir@.  Use @multilib_dir@ to check for threading libraries.
! 	(SHLIB_INSTALL): Adjust accordingly.
! 	(SHLIB_LIBS): Use @multilib_dir@ to check for threading libraries.
! 	* config/rs6000/t-aix52: As for config/rs6000/t-aix43.
! 	* config/sh/t-linux (SHLIB_LINK, SHLIB_INSTALL): As for
! 	config/t-slibgcc-elf-ver.
  
! 2005-02-19  Zdenek Dvorak  <dvorakz@suse.cz>
  	    Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/19828
! 	* tree-ssa-loop-im.c: Add a TODO comment.
! 	(movement_possibility): Return MOVE_PRESERVE_EXECUTION for calls
! 	without side-effects.
  
! 2005-02-18  James A. Morrison  <phython@gcc.gnu.org>
  
! 	* tree-ssa-ccp.c (widen_bitfield): Pass type to build_int_cst and don't
! 	call fold_convert.
  
! 2005-02-18  James E. Wilson  <wilson@specifixinc.com>
  
! 	* doc/invoke.texi (IA-64 Options): Delete -mb-step.
! 	* config/ia64/ia64.c (last_group, group_idx): Delete variables.
! 	(errata_find_address_regs, errata_emit_nops, fixup_errata): Delete
! 	functions.
! 	(ia64_reorg): Delete fixup_errata call.
! 	* config/ia64/ia64.h (MASK_B_STEP, TARGET_B_STEP): Delete.
! 	(TARGET_SWITCHES): Delete -mb-step entry.
  
! 2005-02-19  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR c/20043
! 	* c-typeck.c (composite_type): Handle quals in transparent unions.
! 	(type_lists_compatible_p): Likewise.
  
! 2005-02-18  Stan Shebs  <shebs@apple.com>
  
! 	* config/darwin.c (machopic_select_rtx_section): Don't put relocatable
! 	expressions in the .literal8 section.
  
! 2005-02-18  Geoffrey Keating  <geoffk@apple.com>
  
! 	* config/rs6000/darwin-tramp.asm: Remove stray 'APPLE LOCAL' marker.
  
! 2005-02-18  Roger Sayle  <roger@eyesopen.com>
  
! 	* fold-const.c (constant_boolean_node): Always create values of the
! 	specified type, don't bother calling truthvalue_conversion.
  
! 2005-02-18  Joseph S. Myers  <joseph@codesourcery.com>
  
! 	* except.c (output_function_exception_table): Call
! 	assemble_external_libcall (eh_personality_libfunc).
  
! 2005-02-18  Joseph S. Myers  <joseph@codesourcery.com>
  
! 	PR target/19886
! 	* config/ia64/ia64.h (struct machine_function): Add state_num.
! 	* config/ia64/ia64.c (process_epilogue,
! 	process_for_unwind_directive): Use new unwind state numbers each
! 	time rather than state 1.
  
! 2005-02-18  Ulrich Weigand  <uweigand@de.ibm.com>
  
! 	PR target/20054
! 	* config/s390/s390.md ("*llgt_sidi", "*llgt_sidi_split"): Move to
! 	before the "*llgt_didi" pattern.
  
! 2005-02-18  Jason Merrill  <jason@redhat.com>
  
! 	* gimplify.c (gimplify_modify_expr_rhs) [CALL_EXPR]: Revert again.
  
! 2005-02-18  Richard Earnshaw  <rearnsha@arm.com>
  
! 	* arm/lib1funcs.asm (FUNC_ALIAS): New macro.
! 	(div0): Use it in place of ARM_FUNC_ALIAS.
! 	(lshrdi3, ashrdi3, ashlrdi3): Likewise.
  
! 2005-02-18  Andrew Pinski  <pinskia@physics.uc.edu>
  
! 	PR middle-end/20030
! 	* fold-const.c (fold_indirect_ref_1): Use the correct index for zero
! 	access, the lower bound of the array type if it exists.
  
! 2005-02-18  Alexandre Oliva  <aoliva@redhat.com>
  
! 	PR c++/20008
! 	* stmt.c (expand_case): Don't assume cleanup_tree_cfg will remove
! 	cases that are out-of-range for the index type.
  
! 2005-02-18  James A. Morrison  <phython@gcc.gnu.org>
  
! 	* stmt.c (emit_case_bit_tests): Call fold_convert instead of convert.
! 	(estimate_case_costs): Don't call convert.
! 	* expmed.c (expand_shift): Likewise.
! 	(make_tree): Call fold_convert instead of convert.
  
! 2005-02-18  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR c++/19813
! 	* emit-rtl.c (set_mem_attributes_minus_bitpos): Add assertion
! 	that ref to be marked MEM_READONLY_P doesn't have base that needs
! 	constructing.
  
! 2005-02-18  Joseph S. Myers  <joseph@codesourcery.com>
  
! 	* genautomata.c (output_get_cpu_unit_code_func,
! 	output_cpu_unit_reservation_p): Don't generate old-style function
! 	definitions.
  
! 2005-02-18  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR c++/20023
! 	PR tree-optimization/20009
! 	* convert.c (convert_to_integer): Revert 2005-02-16 change.
  
! 	PR tree-optimization/18947
! 	* cgraphunit.c (cgraph_finalize_function): When redefining an extern
! 	inline, remove all nodes that are inlined into the extern inline
! 	being redefined.
  
! 2005-02-17  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* bt-load.c, cfgloop.c, convert.c, dominance.c, global.c,
! 	loop-invariant.c, stmt.c, tree-ssa-forwprop.c,
! 	tree-ssa-live.c, tree-ssanames.c, tree-vn.c,
! 	config/host-linux.c, config/arm/fpa.md, config/avr/avr.h:
! 	Update copyright.
  
! 2005-02-17  Roger Sayle  <roger@eyesopen.com>
  
! 	PR tree-optimization/19917
! 	* tree-eh.c (tree_could_trap_p): Consider calls to weak functions
! 	to be potentially trapping.
  
! 2005-02-17  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* libgcc2.c, tree-vect-analyze.c: Fix comment typos.
  
! 2005-02-17  Andreas Krebbel  <krebbel1@de.ibm.com>
  
! 	* builtins.c (expand_builtin_return_addr): Remove tem parameter.
! 	tem becomes a local variable which is set to the value of the
! 	back end defined INITIAL_FRAME_ADDRESS macro.
! 	(expand_builtin_frame_address): Omit the base parameter to
! 	expand_builtin_return_addr.
! 	(expand_builtin_profile_func): Likewise.
! 	* config/s390/s390.h (INITIAL_FRAME_ADDRESS_RTX): Define new macro.
! 	(DYNAMIC_CHAIN_ADDRESS): Remove the case for the initial frame.
! 	* doc/tm.texi: Documentation for INITIAL_FRAME_ADDRESS_RTX added.
  
! 2005-02-17  Jakub Jelinek  <jakub@redhat.com>
  
! 	* config/s390/s390.c (s390_alloc_pool, s390_free_pool,
! 	s390_chunkify_start): Use BITMAP_ALLOC and BITMAP_FREE.
! 	* config/frv/frv.c (frv_function_epilogue): Likewise.
  
! 2005-02-17  Daniel Berlin  <dberlin@dberlin.org>
  
! 	* lambda-code (perfect_nestify): Remove mark/unmark
! 	for rewriting hack.
! 	* tree-loop-linear.c (linear_transform_loops): Add
! 	rewrite_into_ssa call so that ssa is correct for
! 	rewriting into loop closed.
  
! 2005-02-17  Nathan Sidwell  <nathan@codesourcery.com>
  
! 	* bitmap.h (BITMAP_XMALLOC, BITMAP_XFREE): Remove.
! 	* bb-reorder.c (duplicate_computed_gotos): Use BITMAP_ALLOC and
! 	BITMAP_FREE.
! 	* bt-load.c (btr_def_live_range, combine_btr_defs,
! 	migrate_btr_def, migrate_btr_defs): Likewise.
! 	* cfgcleanup.c (thread_jump): Likewise.
! 	* cfgloop.c (get_loop_body_in_bfs_order): Likewise.
! 	* df.c (df_insn_table_realloc, df_bitmaps_alloc, df_bitmaps_free,
! 	df_alloc, df_free, df_du_chain_create, df_bb_rd_local_compute,
! 	df_rd_local_compute, df_reg_info_compute): Likewise.
! 	* dominance.c (init_dom_info, free_dom_info): Likewise.
! 	* flow.c (init_propagate_block_info,
! 	free_propagate_block_info): Likewise.
! 	* gcse.c (alloc_gcse_mem, free_gcse_mem): Likewise.
! 	* global.c (allocate_bb_info, free_bb_info, calculate_reg_pav,
! 	modify_reg_pav): Likewise.
! 	* loop-invariant.c (find_defs, find_invariant_insn,
! 	find_invariants, free_inv_motion_data): Likewise.
! 	* predict.c (tree_predict_by_opcode,
! 	estimate_bb_frequencies): Likewise.
! 	* stmt.c (expand_case): Likewise.
! 	* tree-cfg.c (tree_duplicate_sese_region): Likewise.
! 	* tree-dfa.c (mark_new_vars_to_rename): Likewise.
! 	* tree-if-conv.c (get_loop_body_in_if_conv_order): Likewise.
! 	* tree-into-ssa.c (insert_phi_nodes_for, def_blocks_free,
! 	get_def_blocks_for, mark_def_site_blocks, rewrite_into_ssa,
! 	rewrite_ssa_into_ssa): Likewise.
! 	* tree-optimize.c (tree_rest_of_compilation): Likewise.
! 	* tree-outof-ssa.c (new_temp_expr_table, free_temp_expr_table,
! 	analyze_edges_for_bb, perform_edge_inserts): Likewise.
! 	* tree-scalar-evolution.c (scev_initialize, scev_finalize): Likewise.
! 	* tree-sra.c (tree_sra): Likewise.
! 	* tree-ssa-alias.c (init_alias_info, delete_alias_info): Likewise.
! 	* tree-ssa-ccp.c (ccp_fold_builtin): Likewise.
! 	* tree-ssa-dce.c (tree_dce_init, tree_dce_done): Likewise.
! 	* tree-ssa-dom.c (tree_ssa_dominator_optimize): Likewise.
! 	* tree-ssa-dse.c (tree_ssa_dse): Likewise.
! 	* tree-ssa-forwprop.c (tree_ssa_forward_propagate_single_use_var):
! 	Likewise.
! 	* tree-ssa-live.c (new_tree_live_info, delete_tree_live_info,
! 	calculate_live_on_entry, calculate_live_on_exit,
! 	build_tree_conflict_graph): Likewise.
! 	* tree-ssa-loop-ivopts.c (tree_ssa_iv_optimize_init, record_use,
! 	record_important_candidates, set_use_iv_cost, find_depends,
! 	determine_use_iv_costs, iv_ca_new, iv_ca_free, free_loop_data,
! 	tree_ssa_iv_optimize_finalize): Likewise.
! 	* tree-ssa-loop-manip.c (add_exit_phis_var, get_loops_exit,
! 	find_uses_to_rename_use, rewrite_into_loop_closed_ssa,
! 	tree_duplicate_loop_to_header_edge): Likewise.
! 	* tree-ssa-pre.c (init_pre, fini_pre): Likewise.
! 	* tree-ssa.c (verify_flow_insensitive_alias_info,
! 	verify_name_tags, verify_ssa, init_tree_ssa,
! 	delete_tree_ssa): Likewise.
! 	* tree-ssanames.c (marked_ssa_names, init_ssanames,
! 	fini_ssanames): Likewise.
! 	* tree-vectorizer.c (slpeel_tree_peel_loop_to_edge): Likewise.
  
! 2005-02-17  Ralf Corsepius  <ralf.corsepius@rtems.org>
  
! 	* config/rs6000/t-rtems: Completely reworked.
  
! 2005-02-17  Ira Rosen  <irar@il.ibm.com>
  
! 	* tree-data-ref.c (array_base_name_differ_p): Remove gcc_assert.
  
! 2005-02-17  Ira Rosen  <irar@il.ibm.com>
  
! 	* tree-vect-analyze.c (vect_analyze_pointer_ref_access): Use
! 	POINTER_TYPE_P when checking that type is a pointer.
! 	(vect_get_memtag): Remove.
! 	(vect_address_analysis): Use POINTER_TYPE_P. Call
! 	vect_object_analysis with dummy parameter for memtag.
! 	(vect_object_analysis): Extract memtag (functionality that
! 	used to be in vect_get_memtag and moved here). Fix printings.
! 	(vect_analyze_data_refs): Fix comment. Call vect_object_analysis
! 	with correct parameters. Remove call to vect_get_memtag.
  
! 2005-02-17  Dorit Naishlos  <dorit@il.ibm.com>
  
! 	* Makefile.in (tree-vect-analyze.o, tree-vect-transform.o): New.
! 	(tree-vectorizer.o): Added missing dependencies.
  
! 	* tree-vectorizer.h (vect_dump, vect_verbosity_level): Added extern
! 	decleration.
! 	(slpeel_tree_peel_loop_to_edge): Function externalized (had a static
! 	declaration in tree-vectorizer.c, now has an extern declaration in
! 	tree-vectorizer.h).
! 	(slpeel_make_loop_iterate_ntimes, slpeel_can_duplicate_loop_p,
! 	slpeel_verify_cfg_after_peeling, vect_strip_conversion,
! 	get_vectype_for_scalar_type, vect_is_simple_use,
! 	vect_is_simple_iv_evolution, vect_can_force_dr_alignment_p,
! 	vect_supportable_dr_alignment, new_loop_vec_info, destroy_loop_vec_info,
! 	new_stmt_vec_info, vect_analyze_loop, vectorizable_load,
! 	vectorizable_store, vectorizable_operation, vectorizable_assignment,
! 	vect_transform_loop, vect_print_dump_info, vect_set_verbosity_level,
! 	find_loop_location): Likewise.
  
! 	* tree-vectorizer.c (langhooks.h): #include removed.
! 	(slpeel_tree_peel_loop_to_edge): Function externalized. Declaration
! 	moved to tree-vectorized.h.
! 	(slpeel_make_loop_iterate_ntimes, slpeel_can_duplicate_loop_p,
! 	slpeel_verify_cfg_after_peeling, vect_strip_conversion,
! 	get_vectype_for_scalar_type, vect_is_simple_use,
! 	vect_is_simple_iv_evolution, vect_can_force_dr_alignment_p,
! 	vect_supportable_dr_alignment, new_loop_vec_info,
! 	destroy_loop_vec_info, new_stmt_vec_info, vect_print_dump_info,
! 	vect_set_verbosity_level, find_loop_location): Likewise.
  
! 	(vect_analyze_loop): Function externalized. Declaration moved to
! 	tree-vectorized.h. Function definition moved to tree-vect-analyze.c.
! 	(vect_analyze_loop_form): Moved to tree-vect-analyze.c.
! 	(vect_mark_stmts_to_be_vectorized, vect_analyze_scalar_cycles,
! 	vect_analyze_data_ref_accesses, vect_analyze_data_ref_dependences,
! 	vect_analyze_data_refs_alignment, vect_compute_data_refs_alignment,
! 	vect_enhance_data_refs_alignment, vect_analyze_operations,
! 	exist_non_indexing_operands_for_use_p, vect_mark_relevant,
! 	vect_stmt_relevant_p, vect_get_loop_niters,
! 	vect_analyze_data_ref_dependence, vect_compute_data_ref_alignment,
! 	vect_analyze_data_ref_access, vect_analyze_pointer_ref_access,
! 	vect_can_advance_ivs_p, vect_get_ptr_offset, vect_analyze_offset_expr,
! 	vect_base_addr_differ_p, vect_object_analysis, vect_address_analysis,
! 	vect_get_memtag): Likewise.
  
! 	(vectorizable_load): Function externalized. Declaration moved to
! 	tree-vectorized.h. Function definition moved to tree-vect-transform.c.
! 	(vectorizable_store, vectorizable_operation, vectorizable_assignment,
! 	vect_transform_loop): Likewise.
! 	(vect_transform_stmt): Moved to tree-vect-transform.c.
! 	(vect_align_data_ref, vect_create_destination_var,
! 	vect_create_data_ref_ptr, vect_create_index_for_vector_ref,
! 	vect_create_addr_base_for_vector_ref, vect_get_new_vect_var,
! 	vect_get_vec_def_for_operand, vect_init_vector,
! 	vect_finish_stmt_generation, vect_generate_tmps_on_preheader,
! 	vect_build_loop_niters, vect_update_ivs_after_vectorizer,
! 	vect_gen_niters_for_prolog_loop, vect_update_inits_of_dr,
! 	vect_update_inits_of_drs, vect_do_peeling_for_alignment,
! 	vect_do_peeling_for_loop_bound): Likewise.
  
! 	* tree-vect-analyze.c: New file.
! 	* tree-vect-transform.c: New file.
  
! 2005-02-17  Jason Merrill  <jason@redhat.com>
  
! 	PR mudflap/19319, c++/19317
! 	* gimplify.c (gimplify_modify_expr_rhs) [CALL_EXPR]: Make return
! 	slot explicit.
  
! 2005-02-17  Gerald Pfeifer  <gerald@pfeifer.com>
  
! 	* doc/install.texi (Specific): Update link for Darwin-specific
! 	tool binary site.
  
! 2005-02-16  James A. Morrison  <phython@gcc.gnu.org>
  
! 	* fold-const.c (invert_truthvalue): <INTEGER_CST>: Call
! 	constant_boolean_node.
  
! 2005-02-16  David Edelsohn  <edelsohn@gnu.org>
  
! 	PR target/19019
! 	* config/rs6000/t-aix43 (SHLIB_MAPFILES): Add libgcc-ppc64.ver.
! 	* config/rs6000/t-aix52 (SHLIB_MAPFILES): Same.
  
! 2005-02-16  Richard Henderson  <rth@redhat.com>
  
! 	PR 19920
! 	* libgcc2.c (WORD_SIZE): Remove all definitions; replace uses
! 	with W_TYPE_SIZE.
! 	(HIGH_WORD_COEFF, HIGH_HALFWORD_COEFF): Remove all definitions;
! 	replace uses with Wtype_MAXp1_F.
! 	(L_fixunstfdi, L_fixtfdi, L_floatditf, L_fixunsxfdi, L_fixxfdi,
! 	L_floatdixf, L_fixunsxfsi, L_fixunsdfdi, L_floatdidf, L_fixunsdfsi,
! 	L_powidf2, L_powixf2, L_powitf2, L_muldc3, L_divdc3, L_mulxc3,
! 	L_divxc3, L_multc3, L_divtc3): Protect with HAVE_DFMODE, HAVE_XFMODE,
! 	and HAVE_TFMODE as appropriate.
! 	(__fixunssfDI): Provide an implementation that doesn't need DFmode.
! 	(__floatdisf): Likewise.
! 	* libgcc2.h (LIBGCC2_DOUBLE_TYPE_SIZE): New.
! 	(HAVE_DFMODE, HAVE_XFMODE, HAVE_TFMODE): New.
! 	(Wtype_MAXp1_F): New.
! 	(DFtype, DCtype, __fixdfdi, __floatdidf, __fixunsdfSI, __fixunsdfDI,
! 	__powidf2, __divdc3, __muldc3): Protect with HAVE_DFMODE.
  
! 2005-02-16  Richard Earnshaw  <rearnsha@arm.com>
  
! 	* PR target/19162
! 	* arm.c (arm_apply_result_size): New function.
! 	* arm.h (APPLY_RESULT_SIZE): Define.
! 	* arm-protos.h (arm_apply_result_size): Add prototype.
! 	* arm.md (RO_REGNUM, FPA_F0_REGNUM, FPA_F7_REGNUM): New constants.
! 	(movxf): New expand.
! 	(ldmsi_postinc4_thumb, stmsi_postinc4_thumb): New patterns for Thumb.
! 	(call_value_symbol): Remove predicate for operand 0.
! 	(call_value_insn, sibcall_value, sibcall_value_insn): Likewise.
! 	(untyped_call): Rework to correclty return values for any type.
! 	(untyped_return): New expand.
! 	* fpa.md (movxf_fpa): Simplify and use sfm/lfm when appropriate.
  
! 2005-02-16  Stan Shebs  <shebs@apple.com>
  
! 	* config.gcc (powerpc-*-darwin*): Use fragment for Darwin 8 or later.
! 	* config/rs6000/t-darwin8: New, for 64-bit multilib.
  
! 2005-02-16  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	* doc/install.texi (sparc-sun-solaris2*): Document required GMP
! 	configure settings on Solaris 7 and later.
  
! 2005-02-16  Diego Novillo  <dnovillo@redhat.com>
  
! 	PR tree-optimization/19865
! 	* tree-optimize.c (init_tree_optimization_passes): Run
! 	pass_may_alias after pass_sra.
  
! 2005-02-16  Richard Henderson  <rth@redhat.com>
! 	    Stuart Hastings  <stuart@apple.com>
  
! 	PR debug/19521
! 	* dbxout.c (dbxout_function_end): Take decl parameter; update callers.
! 	Do nothing if debug info suppressed for this function.
! 	(dbxout_begin_function): Early exit if debug info suppressed for
! 	this function.
  
! 2005-02-16  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	PR target/20007
! 	* config/ip2k/ip2k.c (ip2k_reorg): Adjust calls to
! 	find_basic_blocks.
! 	* config/sh/sh.c (sh_output_mi_thunk): Likewise.
  
! 	PR tree-optimization/19967
! 	* builtins.c (expand_builtin_strstr, expand_builtin_strpbrk,
! 	expand_builtin_strchr, expand_builtin_strrchr): Take a new
! 	argument TYPE.  Adjust calls to fold_builtin_XXX.
! 	(expand_builtin, fold_builtin_1): Adjust calls to
! 	expand_builtin_XXX.
! 	(fold_builtin_strchr, fold_builtin_strpbrk,
! 	fold_builtin_strstr, fold_builtin_strrchr): Convert the folded
! 	result to a requested type TYPE.
  
! 2005-02-16  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR middle-end/19857
! 	* fold-const.c (fold): Don't optimize (T)(x & cst) to
! 	(T)x & (T)cst if (T)cst overflows.
! 	* convert.c (convert_to_integer) <case POINTER_TYPE>: Pass
! 	TYPE_UNSIGNED (type) as type_for_size's UNSIGNEDP argument.
  
! 2005-02-15  Jeff Law  <law@redhat.com>
  
! 	* gcse.c (blocks_with_calls): New bitmap.
! 	(alloc_gcse_mem): Allocate it.
! 	(free_gcse_mem): Free it.
! 	(clear_modifY_mem_tables): Clear it.
! 	(record_last_mem_set_info): Set the proper bit in BLOCK_WITH_CALLS
! 	when we encounter CALL_INSNs.
! 	(compute_transp, case MEM): Handle blocks with calls separate
! 	from blocks without calls.  Use bitmap iterators rather than
! 	FOR_EACH_BB.
  
! 2005-02-15  Peter O'Gorman  <peter@pogma.com>
  
! 	PR bootstrap/18810
! 	* mklibgcc.in (vis_hide): Use a temporary object file, not
! 	-o /dev/null.
  
! 2005-02-15  Andy Hutchinson  <HutchinsonAndy@netscape.net>
  
! 	PR target/19924
! 	* config/avr/avr.h (MODES_TIEABLE_P): Define to 1 to allow subreg
! 	access optimization.
  
! 2005-02-15  David Edelsohn  <edelsohn@gnu.org>
! 	    Alan Modra  <amodra@bigpond.net.au>
  
! 	PR target/19019
! 	* config/rs6000/darwin-ldouble.c (_xlqadd): Rename to __gcc_qadd.
! 	(_xlqsub): Rename to __gcc_qsub.
! 	(_xlqmul): Rename to __gcc_qmul.
! 	(_xlqdiv): Rename to __gcc_qdiv.
! 	Provide versioned symbol aliases with old names.
! 	* config/rs6000/libgcc-ppc64.ver: Rename symbols.
! 	* config/rs6000/rs6000.c (rs6000_init_libfuncs): Rename symbols.
! 	* config/rs6000/t-aix43 (LIB2FUNCS_EXTRA): New.
! 	* config/rs6000/t-aix52 (LIB2FUNCS_EXTRA): New.
! 	* config/rs6000/t-newas (LIB2FUNCS_EXTRA): New.
  
! 2005-02-15  James A. Morrison  <phython@gcc.gnu.org>
  
! 	* fold-const.c (fold): Fold -(~A) to A + 1.  Fold ~(-A) to A - 1.
! 	Fold ~(A - 1) and ~(A + -1) to -A.
  
! 2005-02-15  James A. Morrison  <phython@gcc.gnu.org>
  
! 	PR pch/14940
! 	PR target/19300
! 	* config/host-linux.c (linux_gt_pch_use_address): Copy from
! 	config/pa/pa-host.c:pa_gt_pch_use_address.
  
! 2005-02-15  Daniel Berlin  <dberlin@dberlin.org>
  
! 	* tree-vn.c (get_value_handle): Make sure that given an
! 	is_gimple_min_invariant expression, we always return it.
  
! 2005-02-15  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* passes.c (rest_of_handle_gcse): Fix a comment.
  
! 2005-02-15  Jeff Law  <law@redhat.com>
  
! 	* gcse.c (canon_modify_mem_set_list_set): Kill unnecessary
! 	bitmap.
! 	(alloc_gcse_mem, free_gcse_mem): Corresponding changes.
! 	(canon_list_insert, record_last_mem_set_info): Similarly.
! 	(clear_modify_mem_tables): Similarly.
  
! 2005-02-15  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* bitmap.c, bitmap.h, lambda-code.c, tree-dfa.c, tree-dump.c,
! 	tree-dump.h, tree-ssa-loop-manip.c, value-prof.c,
! 	config/mips/mips.md, config/rs6000/aix.h,
! 	config/rs6000/beos.h, config/rs6000/sysv4.h: Update copyright.
  
! 2005-02-15  Richard Henderson  <rth@redhat.com>
  
! 	* bb-reorder.c (find_traces_1_round): Force fallthru edge from a
! 	call to be best_edge.
  
! 2005-02-14  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* basic-block.h: Adjust the prototype for find_basic_blocks.
! 	* cfgbuild.c (find_basic_blocks): Remove unused arguments.
! 	* passes.c (rest_of_handle_loop_optimize): Adjust the call to
! 	find_basic_blocks.
  
! 	* flow.c (recompute_reg_usage): Remove all arguments.
! 	* passes.c (rest_of_compilation): Adjust the call to
! 	recompute_reg_usage.
! 	* rtl.h: Adjust the prototype for recompute_reg_usage.
  
! 2005-02-14  Daniel Berlin  <dberlin@dberlin.org>
  
! 	* tree-dump.c (dump_files): Update to reflect new member
! 	of dump_file_info.
! 	(dump_register): Add new argument.
! 	Set glob name.
! 	(dump_switch_p_1): Check against glob name if doglob was passed.
! 	(dump_switch_p): Check against regular first, then glob if
! 	we didn't have any hits on the dump name.
! 	* tree-optimize.c (register_one_dump_file):
! 	Pass in glob name as well.
! 	* tree-pass.h (struct dump_file_info): Add glob
! 	member.
  
! 2005-02-14  Joseph S. Myers  <joseph@codesourcery.com>
  
! 	PR preprocessor/16323
! 	* doc/invoke.texi: Document that -Wendif-labels is on by default.
  
! 2005-02-14  David Edelsohn  <edelsohn@gnu.org>
  
! 	PR target/19019
! 	* config/rs6000/rs6000.md (trunctfdf2): Change to define_expand.
! 	(trunctfdf2_internal1): New.
! 	(trunctfdf2_internal2): Renamed from trunctfdf2.
  
! 2005-02-14  Diego Novillo  <dnovillo@redhat.com>
  
! 	PR tree-optimization/19853
! 	* tree-dfa.c (add_referenced_var): Always examine DECL_INITIAL.
  
! 2005-02-14  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* passes.c (rest_of_handle_loop_optimize): Remove calls to
! 	delete_dead_jumptables and cleanup_cfg.
  
! 2005-02-14  Ulrich Weigand  <uweigand@de.ibm.com>
  
! 	* reload.c (find_reloads): Swap address_reloaded flags when
! 	swapping commutative operands.
  
! 2005-02-14  Sebastian Pop  <pop@cri.ensmp.fr>
  
! 	* lambda-code.c (lambda_loopnest_to_gcc_loopnest, perfect_nestify):
! 	Use standard_iv_increment_position for computing the bsi position
! 	for create_iv.
! 	* tree-ssa-loop-manip.c (create_iv): Add a comment on how to compute
! 	the bsi position.
  
! 2005-02-13  Zdenek Dvorak  <dvorakz@suse.cz>
  
! 	PR target/17428
! 	* cfgrtl.c (safe_insert_insn_on_edge): Avoid extending
! 	life range of hard registers.
! 	* value-prof.c (insn_prefetch_values_to_profile): Only
! 	scan normal insns.
  
! 	* value-prof.c (rtl_find_values_to_profile): Do not look for values to
! 	profile in libcalls.
  
! 2005-02-13  Nathan Sidwell  <nathan@codesourcery.com>
  
! 	* bitmap.h (bitmap_and_compl_into): Return bool.
! 	* bitmap.c (bitmap_and_compl_into): Return changed flag.
  
! 2005-02-13  James A. Morrison  <phython@gcc.gnu.org>
  
! 	PR tree-optimization/19944
! 	* fold-const.c (fold): Re-add ABS_EXPR folding.
  
! 2005-02-13  David Edelsohn  <edelsohn@gnu.org>
  
! 	PR target/19019
! 	* config/rs6000/aix.h ({TARGET,MASK}_XL_CALL): Rename to
! 	{TARGET,MASK}_XL_COMPAT.
! 	(SUBTARGET_SWITCHES): Rename xl-call to xl-compat.  Use
! 	MASK_XL_COMPAT.
! 	* config/rs6000/beos.h ({TARGET,MASK}_XL_CALL): Remove.
! 	* config/rs6000/rs6000.c (function_arg): Change TARGET_XL_CALL to
! 	TARGET_XL_COMPAT.
! 	(rs6000_arg_partial_bytes): Same.
! 	(rs6000_generate_compare): Generate PARALLEL for compare if TFmode
! 	and XL compatibility enabled.
! 	* config/rs6000/rs6000.h (TARGET_XL_CALL): Rename to TARGET_XL_COMPAT.
! 	* config/rs6000/rs6000.md (cmptf_internal1): Add !TARGET_XL_COMPAT
! 	test to final condition.
! 	(cmptf_internal2): New.
! 	* doc/invoke.texi (RS/6000 Subtarget Options): Change xl-call to
! 	xl-compat.  Add TFmode information to description.
  
! 2005-02-13  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* flags.h, read-rtl.c, tree-ssa-live.h: Update copyright.
  
! 2005-02-13  Jason Merrill  <jason@redhat.com>
  
! 	PR c++/16405
! 	* fold-const.c (fold_indirect_ref_1): Split out from...
! 	(build_fold_indirect_ref): Here.
! 	(fold_indirect_ref): New fn.
! 	* tree.h: Declare it.
! 	* gimplify.c (gimplify_compound_lval): Call fold_indirect_ref.
! 	(gimplify_modify_expr_rhs): Likewise.
! 	(gimplify_expr): Likewise.
  
! 2005-02-13  James A. Morrison  <phython@gcc.gnu.org>
  
! 	PR tree-optimization/14303
! 	PR tree-optimization/15784
! 	* fold-const.c (fold): Fold ABS_EXPR<x> >= 0 to true, when possible.
! 	Fold ABS_EXPR<x> < 0 to false.  Fold ABS_EXPR<x> == 0 to x == 0 and
! 	ABS_EXPR<x> != 0 to x != 0.
  
! 2005-02-12  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* c-tree.h, combine.c, expmed.c, flow.c, libgcc2.c,
! 	simplify-rtx.c, tree-ssa-live.h: Fix comment typos.  Follow
! 	spelling conventions.
  
! 	* passes.c (rest_of_handle_gcse): Don't run cse_main and
! 	delete_trivially_dead_insns too many times.
  
! 	* passes.c (rest_of_handle_gcse): Remove dead assignments to
! 	tem and tem2.
  
! 2005-02-12  Ira Rosen  <irar@il.ibm.com>
  
! 	* tree-vectorizer.c (vect_get_base_and_offset): Remove.
! 	(vect_is_simple_iv_evolution): Remove redundant parameter
! 	and step check.
! 	(vect_analyze_scalar_cycles): Call vect_is_simple_iv_evolution
! 	without last parameter.
! 	(vect_analyze_pointer_ref_access): Get access_fn as parameter.
! 	Return pointer step. Call vect_is_simple_iv_evolution without
! 	last parameter. Check only that the step is multiple of size
! 	type. Remove stmt_vinfo updates.
! 	(vect_get_memtag_and_dr): Remove.
! 	(vect_get_memtag): New function.
! 	(vect_address_analysis): New function.
! 	(vect_object_analysis): New function.
! 	(vect_analyze_data_refs): Call vect_object_analysis and
! 	vect_get_memtag. Update stmt_vinfo fields.
  
! 2005-02-12  Ira Rosen  <irar@il.ibm.com>
  
! 	* tree-data-ref.c (array_base_name_differ_p): Check that the bases
! 	exist and are objects. Remove checks for pointer.
! 	* tree-vectorizer.c (vect_create_addr_base_for_vector_ref): Use
! 	STMT_VINFO_VECT_DR_BASE_ADDRESS instead of DR_BASE_NAME.
! 	(vect_create_data_ref_ptr): Likewise.
! 	(vect_base_addr_differ_p): New function.
! 	(vect_analyze_data_ref_dependence): Call vect_base_addr_differ_p.
! 	(vect_analyze_pointer_ref_access): Add output parameter - ptr_init.
! 	Don't set the DR_BASE_NAME field of data-ref.
! 	(vect_get_memtag_and_dr): Use ptr_init instead of DR_BASE_NAME.
  
! 2005-02-12  Uros Bizjak  <uros@kss-loka.si>
  
! 	* optabs.h (enum optab_index): Add new OTI_ldexp.
! 	(ldexp_optab): Define corresponding macro.
! 	* optabs.c (init_optabs): Initialize ldexp_optab.
! 	* genopinit.c (optabs): Implement ldexp_optab using ldexp?f3
! 	patterns.
! 	* builtins.c (expand_builtin_mathfn_2): Handle BUILT_IN_LDEXP{,F,L}
! 	using ldexp_optab.
! 	(expand_builtin): Expand BUILT_IN_LDEXP{,F,L} using
! 	expand_builtin_mathfn_2 if flag_unsafe_math_optimizations is set.
  
! 	* config/i386/i386.md (ldexpsf3, ldexpdf3, ldexpxf3): New expanders
! 	to implement ldexpf, ldexp and ldexpl built-ins as inline x87
! 	intrinsics.
  
! 2005-02-12  Ira Rosen  <irar@il.ibm.com>
  
! 	* tree-vectorizer.h (struct _stmt_vec_info): Rename a field: base
! 	to base_address.
! 	* tree-vectorizer.c (new_stmt_vec_info): Rename the above field of
! 	stmt_vec_info.
! 	(vect_get_base_and_offset): Always return an address.
! 	(vect_create_addr_base_for_vector_ref): Remove treatment for
! 	different data reference types.
! 	(vect_compute_data_ref_alignment): Rename base to base_address in
! 	stmt_vec_info. Get the object in order to force its alignment.
! 	(vect_get_memtag_and_dr): Rename base to base_address in
! 	stmt_vec_info. Extract the object for memtag analysis.
  
! 2005-02-12  Hans-Peter Nilsson  <hp@axis.com>
  
! 	PR regression/19898.
! 	* config/cris/cris.c (cris_notice_update_cc): When testing if insn
! 	changes cc_status, use apply modified_in_p to part of cc_status
! 	and insn, not cris_reg_overlap_mentioned_p on SET_DEST of insn
! 	body.
  
! 2005-02-11  Richard Henderson  <rth@redhat.com>
  
! 	* tree-complex.c (expand_complex_libcall): New.
! 	(expand_complex_multiplication): Use it for c99 compliance.
! 	(expand_complex_division): Likewise.
! 	* fold-const.c (fold_complex_add, fold_complex_mult): New.
! 	(fold): Call them.
! 	* builtins.c (built_in_names): Remove const.
! 	* tree.c (build_common_builtin_nodes): Build complex arithmetic
! 	builtins.
! 	* tree.h (BUILT_IN_COMPLEX_MUL_MIN, BUILT_IN_COMPLEX_MUL_MAX): New.
! 	(BUILT_IN_COMPLEX_DIV_MIN, BUILT_IN_COMPLEX_DIV_MAX): New.
! 	(built_in_names): Remove const.
! 	* c-common.c (c_common_type_for_mode): Handle complex modes.
! 	* flags.h, toplev.c (flag_complex_method): Rename from
! 	flag_complex_divide_method.
! 	* libgcc2.c (__divsc3, __divdc3, __divxc3, __divtc3,
! 	__mulsc3, __muldc3, __mulxc3, __multc3): New.
! 	* libgcc2.h: Declare them.
! 	* libgcc-std.ver: Export them.
! 	* mklibgcc.in (lib2funcs): Build them.
  
! 2005-02-11  Steven Bosscher  <stevenb@suse.de>
  
! 	PR tree-optimization/19876
! 	Partially revert my change from 2005-01-14
! 	* tree-ssa-pre.c (compute_antic_aux): Make recursive once again...
! 	(compute_antic): ...and remove the loop here.
  
! 2005-02-11  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR middle-end/19858
! 	* fold-const.c (make_bit_field_ref): If bitpos == 0 and bitsize
! 	is number of inner's bits, avoid creating a BIT_FIELD_REF.
  
! 	* config/rs6000/sysv4.h (ENDFILE_LINUX_SPEC): Use crtendS.o instead of
! 	crtend.o if -pie.  Use %{x:a;:b} spec syntax.
  
! 2005-02-11  Daniel Jacobowitz  <dan@codesourcery.com>
  
! 	* config/mips/linux-unwind.h (mips_fallback_frame_state): Adjust
! 	offsets for the big-endian 32-bit case.
  
! 2005-02-11  Joseph S. Myers  <joseph@codesourcery.com>
  
! 	* config/ia64/hpux.h (WCHAR_TYPE, WCHAR_TYPE_SIZE): Define.
  
! 2005-02-11  Dale Johannesen  <dalej@apple.com>
  
! 	* cselib.c (cselib_process_insn):  Clear out regs where
! 	HARD_REGNO_CALL_PART_CLOBBERED is true at a call.
! 	* reload.c (find_equiv_reg): Ditto.
  
! 2005-02-11  Ian Lance Taylor  <ian@airs.com>
  
! 	* read-rtl.c (read_rtx_1): Give fatal error if we see a vector
! 	with no elements.
  
! 	* tree.c (build_function_type_list): Work correctly if there are
! 	no arguments.
  
! 2005-02-11  Ulrich Weigand  <uweigand@de.ibm.com>
  
! 	* config/s390/s390.md ("*cmpdi_cct", "*cmpsi_cct", "*cmpdi_ccs",
! 	"*cmpsi_ccs"): Use %h instead of %c to print immediate operand.
! 	("*zero_extendhisi2_64", "*zero_extendhisi2_31"): Choose based on
! 	TARGET_ZARCH instead of TARGET_64BIT.
  
! 2005-02-11  Ralf Corsepius  <ralf.corsepius@rtems.org>
  
! 	* config/rs6000/t-rtems:
! 	(MULTILIB_OPTIONS): Remove mcpu=602.
! 	(MUTLILIB_DIRNAMES): Remove m602.
! 	(MULTILIB_MATCHES): Add ${MULTILIB_MATCHES_FLOAT}.
! 	Let mcpu=602 match mcpu=603.
! 	(MULTILIB_NEW_EXCEPTIONS_ONLY): Add mcpu=601, mcpu=602, mcpu=m603.
  
! 2005-02-10  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
  
! 	* pa/linux-unwind.h (pa32_fallback_frame_state): Handle misaligned
! 	signal trampolines.
  
! 2005-02-10  David Daney  <ddaney@avtrex.com>
  
! 	* config/alpha/linux-unwind.h: Add exception clause to copyright.
! 	* config/i386/linux-unwind.h: Likewise.
! 	* config/ia64/linux-unwind.h: Likewise.
! 	* config/mips/linux-unwind.h: Likewise.
! 	* config/pa/linux-unwind.h: Likewise.
! 	* config/rs6000/linux-unwind.h: Likewise.
! 	* config/s390/linux-unwind.h: Likewise.
! 	* config/sh/linux-unwind.h: Likewise.
! 	* config/sparc/linux-unwind.h: Likewise.
  
! 2005-02-10  Steven Bosscher  <stevenb@suse.de>
  
! 	PR tree-optimization/17549
! 	* tree-outof-ssa.c (find_replaceable_in_bb): Do not allow
! 	TER to replace a DEF with its expression if the DEF and the
! 	rhs of the expression we replace into have the same root
! 	variable.
  
! 2005-02-10  Richard Sandiford  <rsandifo@redhat.com>
  
! 	* config/mips/mips.md: Fix the placement of the match_scratch in the
! 	lea64 peephole2.
  
! 2005-02-10  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* cse.c, tree-ssa-loop-ivopts.c, config/rs6000/linux-unwind.h:
! 	Fix comment typos.
  
! 2005-02-10  Zdenek Dvorak  <dvorakz@suse.cz>
  
! 	* tree-ssa-loop-ivopts.c (determine_base_object): Ignore casts.
! 	(strip_offset): Handle addresses.
! 	(add_address_candidates): Use strip_offset.
! 	(difference_cost): Reflect strip_offset change.
! 	(force_var_cost, difference_cost): Strip nops.
  
! 2005-02-10  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* df.h (DF_REF_MODE_CHANGE, DF_REF_MEM_OK): Remove.
  
! 	* builtins.def, haifa-sched.c, libgcc2.c, libgcc2.h,
! 	tree-ssa-loop-ivcanon.c, tree-ssa-loop-niter.c,
! 	config/cris/cris-protos.h, config/cris/cris.c: Update
! 	copyright.
  
! 2005-02-10  Jeff Law  <law@redhat.com>
  
! 	* tree-ssa-dom.c (thread_across_edge): Use xmalloc, not xcalloc.
! 	(lookup_avail_expr): Similarly.
  
! 2005-02-10  Richard Guenther  <rguenth@gcc.gnu.org>
  
! 	* builtins.c (fold_builtin_powi): New function.
! 	(fold_builtin_1): Call it.
  
! 2005-02-10  Steven Bosscher  <stevenb@suse.de>
  
! 	PR documentation/19309
! 	* doc/cpp.texi: The __GNUC__ and related predefined macros
! 	are also defined for the "standalone" cpp.
! 	Some non-GCC compilers may also define __GNUC__.
  
! 2005-02-10  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR c/19342
! 	* c-typeck.c (common_type): New routine.  Old common_type renamed
! 	to...
! 	(c_common_type): ...this.
! 	(build_conditional_expr, build_binary_op): Use c_common_type instead
! 	of common_type.
  
! 2005-02-10  Steven Bosscher  <stevenb@suse.de>
  
! 	* doc/md.texi: Replace @samp{length} with @code{length}.
  
! 2005-02-09  Zdenek Dvorak  <dvorakz@suse.cz>
  
! 	PR tree-optimization/18687
! 	* tree-flow.h (find_loop_niter): Declare.
! 	* tree-ssa-loop-ivcanon.c (canonicalize_loop_induction_variables):
! 	Try using scev even for loops with more than one exit.
! 	* tree-ssa-loop-ivopts.c (struct loop_data): Removed niter field.
! 	(struct ivopts_data): Added niters field.
! 	(struct nfe_cache_elt): New.
! 	(nfe_hash, nfe_eq, niter_for_exit, niter_for_single_dom_exit): New
! 	functions.
! 	(tree_ssa_iv_optimize_init): Initialize niters cache.
! 	(determine_number_of_iterations): Removed.
! 	(find_induction_variables): Do not call determine_number_of_iterations.
! 	Access niters for single exit through niter_for_single_dom_exit.
! 	(add_iv_outer_candidates): Access niters for single exit through
! 	niter_for_single_dom_exit.
! 	(may_eliminate_iv): Take data argument.  Use niter_for_exit.  Do not use
! 	number_of_iterations_cond.
! 	(iv_period): New function.
! 	(determine_use_iv_cost_condition): Pass data to may_eliminate_iv.
! 	(may_replace_final_value): Take data argument.  Use
! 	niter_for_single_dom_exit.
! 	(determine_use_iv_cost_outer): Pass data to may_replace_final_value.
! 	(rewrite_use_compare): Pass data to may_eliminate_iv.
! 	(rewrite_use_outer): Pass data to may_replace_final_value.
! 	(free_loop_data): Clean up the niters cache.
! 	(tree_ssa_iv_optimize_finalize): Free the niters cache.
! 	(tree_ssa_iv_optimize_loop): Do not call loop_commit_inserts.
! 	* tree-ssa-loop-niter.c (find_loop_niter): New function.
! 	(find_loop_niter_by_eval): Use tree_int_cst_lt.
! 	(num_ending_zeros): Moved to tree.c.
! 	* tree.h (num_ending_zeros): Declare.
! 	* tree.c (num_ending_zeros): Moved from tree.c.
  
! 2005-02-09  Richard Henderson  <rth@redhat.com>
  
! 	* builtins.c (DEF_BUILTIN): Add COND argument.
! 	* tree.h (DEF_BUILTIN): Likewise.
! 	* builtins.def (DEF_GCC_BUILTIN, DEF_LIB_BUILTIN, DEF_EXT_LIB_BUILTIN,
! 	DEF_C94_BUILTIN, DEF_C99_BUILTIN, DEF_C99_C90RES_BUILTIN): Update to
! 	match.
! 	(DEF_BUILTIN_STUB): New.
! 	(BUILT_IN_STACK_SAVE, BUILT_IN_STACK_RESTORE, BUILT_IN_INIT_TRAMPOLINE,
! 	BUILT_IN_ADJUST_TRAMPOLINE, BUILT_IN_NONLOCAL_GOTO,
! 	BUILT_IN_PROFILE_FUNC_ENTER, BUILT_IN_PROFILE_FUNC_EXIT): Use it.
! 	* c-common.c (DEF_BUILTIN): Add COND argument.
! 	* tree.c (local_define_builtin): New.
! 	(build_common_builtin_nodes): New.
  
! 2005-02-09  Roger Sayle  <roger@eyesopen.com>
  
! 	* fold-const.c (fold_strip_sign_ops): New function to simplify a
! 	floating point expression ignoring the sign of the result.
! 	(fold) <ABS_EXPR>: Use it to simplify fabs(x).
! 	(fold) <MULT_EXPR>: Use it to simplify x*x.
! 	* tree.h (fold_strip_sign_ops): Prototype here.
! 	* builtins.c (fold_builtin_copysign): Take an additional FNDECL
! 	argument.  Use fold_strip_sign_ops to simplify the first argument.
! 	(fold_builtin_pow):  Use fold_strip_sign_ops to simplify the
! 	first argument when the second argument is an even integer
! 	constant, but only with -funsafe_math_optimizations.
! 	(fold_builtin_1): Update call to fold_builtin_copysign.
  
! 2005-02-09  Ian Lance Taylor  <ian@airs.com>
  
! 	PR middle-end/19583
! 	* gimple-low.c (try_catch_may_fallthru): In EH_FILTER_EXPR case,
! 	just check whether EH_FILTER_FAILURE falls through.
  
! 2005-02-09  Andreas Krebbel  <krebbel1@de.ibm.com>
  
! 	* gcc/haifa-sched.c (schedule_block): Make queued sched group
! 	insns return to ready list in the next turn.
  
! 2005-02-09  Richard Guenther  <rguenth@gcc.gnu.org>
  
! 	PR middle-end/19402
! 	* builtins.def: New __builtin_powi[lf].
! 	* builtins.c (mathfn_built_in): Handle BUILT_IN_POWI.
! 	(expand_builtin_powi): New function.
! 	(expand_builtin): Dispatch to expand_builtin_powi.
! 	* libgcc2.h: Add prototypes for __builtin_powi[lf].
! 	* libgcc2.c: Add __builtin_powi[lf] implementation.
! 	* mklibgcc.in: Add __builtin_powi[lf] to lib2funcs.
! 	* optabs.h: Add powi_optab.
! 	* optabs.c (init_optabs): Initialize powi_optab.
! 	* doc/extend.texi: Document __builtin_powi[lf].
  
! 2005-02-09  Dorit Naishlos  <dorit@il.ibm.com>
  
! 	* tree-vectorizer.c (vect_set_dump_settings): Check that dump_file
! 	exists.
  
! 2005-02-09  Richard Guenther  <rguenth@gcc.gnu.org>
  
! 	PR middle-end/19854
! 	* fold-const.c (try_move_mult_to_index): Remove redundant
! 	type argument.  Create ADDR_EXPR with correct type.
! 	(fold): Update callers of try_move_mult_to_index.  Convert
! 	result to the appropriate type.
  
! 2005-02-09  Roger Sayle  <roger@eyesopen.com>
  
! 	PR target/19597
! 	* config/avr/avr.c (default_rtx_costs): Delete.
! 	(avr_operand_rtx_cost): New function.
! 	(avr_rtx_costs): Completely rewrite.
  
! 2005-02-08  Hans-Peter Nilsson  <hp@axis.com>
  
! 	PR target/19806
! 	* config/cris/cris.c (in_code): New variable.
! 	(cris_output_addr_const): Now a static function, a wrapper for
! 	output_addr_const.
! 	(cris_asm_output_symbol_ref): New function, broken out SYMBOL_REF
! 	case from old cris_output_addr_const.
! 	(cris_asm_output_label_ref): Similar for LABEL_REF.
! 	(cris_output_addr_const_extra): Similar for UNSPEC.
! 	* config/cris/cris.h (OUTPUT_ADDR_CONST_EXTRA)
! 	(ASM_OUTPUT_SYMBOL_REF, ASM_OUTPUT_LABEL_REF): Define.
! 	* config/cris/cris-protos.h (cris_output_addr_const): Remove
! 	declaration.
! 	(cris_asm_output_symbol_ref, cris_output_addr_const_extra)
! 	(cris_asm_output_label_ref): Declare.
  
! 2005-02-08  Paolo Bonzini  <bonzini@gnu.org>
  
! 	PR preprocessor/19801
! 	* doc/cppinternals.texi (Conventions, Lexer, Files): Adjust
! 	filenames that changed when libcpp was moved to the toplevel.
  
! 2005-02-07  Roger Sayle  <roger@eyesopen.com>
  
! 	* simplify-rtx.c (simplify_relational_operation_1): Avoid creating
! 	zero extensions of BImode operands.  Call lowpart_subreg instead
! 	of gen_lowpart_common and gen_lowpart_SUBREG.
  
! 2005-02-07  Nathanael Nerode  <neroden@gcc.gnu.org>
  
! 	PR ada/19489
! 	* libada-mk.in: Use cc_for_cross_gnattools, not cc_set_by_configure.
! 	* configure.ac: Set cc_for_cross_gnattools.
  	* configure: Regenerate.
  
! 2005-02-08  Alan Modra  <amodra@bigpond.net.au>
  
! 	PR target/19803
! 	* predict.c (PROB_VERY_UNLIKELY): Use 1% instead of 10%.
  
! 2005-02-07  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	PR debug/19327
! 	* dbxout.c (dbxout_symbol) <FUNCTION_DECL>: Skip inline instance
! 	of nested functions.
  
! 2005-02-07  Jonathan Wakely  <redi@gcc.gnu.org>
  
! 	* doc/extend.texi: Document deprecated extensions allowing
! 	static floating-point members to have initializers and allowing
! 	floating-point literals in integral constant expressions.
  
! 2005-02-07  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* cfgcleanup.c, df.h, diagnostic.c, rtl.c, tree-vectorizer.h,
! 	config/darwin7.h, config/mips/mips.c,
! 	config/rs6000/altivec.md, config/rs6000/darwin-tramp.asm:
! 	Update copyright.
  
! 	* cse.c: Update comments.
  
! 2005-02-07  Richard Guenther  <rguenth@gcc.gnu.org>
  
! 	PR middle-end/19775
! 	* builtins.c (fold_builtin_sqrt): Transform
! 	sqrt(pow(x,y)) to pow(fabs(x),y*0.5), not
! 	pow(x,y*0.5).
  
! 2005-02-07  Leehod Baruch  <leehod@il.ibm.com>
! 	    Dorit Naishlos  <dorit@il.ibm.com>
  
! 	* doc/invoke.texi (ftree-vectorizer-verbose): New.
! 	* opts.c (OPT_ftree_vectorizer_verbose_): New case for switch.
! 	* common.opt (ftree-vectorizer-verbose): New Flag for the vectorizer
! 	was added.
! 	* tree.h (vect_set_verbosity_level): New extern function declaration
! 	added.
! 	* tree-vectorizer.h (verbosity_levels): New enum type.
! 	* tree-vectorizer.c (vect_debug_stats): Function removed.
! 	(vect_debug_details): Likewise.
! 	(vect_verbosity_level): Global variable was defined and initialized.
! 	(vect_dump): Global variable definition.
! 	(vect_print_dump_info): New function.
! 	(vect_set_dump_settings): New function.
! 	(vect_set_verbosity_level): New function.
! 	(vectorize_loops): Add call to vect_set_dump_settings.
  
! 	(slpeel_make_loop_iterate_ntimes): Dump condition was changed.
! 	(slpeel_tree_duplicate_loop_to_edge_cfg): Likewise.
! 	(slpeel_tree_peel_loop_to_edge): Likewise.
  
! 	(vect_analyze_offset_expr): Call to vect_print_dump_info with
! 	appropriate verbosity level instead of call to vect_debug_details
! 	or vect_debug_stats.
! 	(vect_get_base_and_offset):
! 	(vect_create_addr_base_for_vector_ref):
! 	(get_vectype_for_scalar_type):
! 	(vect_create_data_ref_ptr):
! 	(vect_init_vector):
! 	(vect_get_vec_def_for_operand):
! 	(vect_finish_stmt_generation):
! 	(vectorizable_assignment):
! 	(vectorizable_operation):
! 	(vectorizable_store):
! 	(vectorizable_load):
! 	(vect_transform_stmt):
! 	(vect_update_ivs_after_vectorizer):
! 	(vect_do_peeling_for_loop_bound):
! 	(vect_update_inits_of_drs):
! 	(vect_do_peeling_for_alignment):
! 	(vect_transform_loop):
! 	(vect_is_simple_use):
! 	(vect_analyze_operations):
! 	(vect_is_simple_iv_evolution):
! 	(vect_analyze_scalar_cycles):
! 	(vect_analyze_data_ref_dependence):
! 	(vect_analyze_data_ref_dependences):
! 	(vect_compute_data_ref_alignment):
! 	(vect_enhance_data_refs_alignment):
! 	(vect_analyze_data_refs_alignment):
! 	(vect_analyze_data_ref_access):
! 	(vect_analyze_data_ref_accesses):
! 	(vect_analyze_pointer_ref_access):
! 	(vect_get_memtag_and_dr):
! 	(vect_analyze_data_refs):
! 	(vect_mark_relevant):
! 	(vect_stmt_relevant_p):
! 	(vect_mark_stmts_to_be_vectorized):
! 	(vect_can_advance_ivs_p):
! 	(vect_get_loop_niters):
! 	(vect_analyze_loop_form):
! 	(vect_analyze_loop):
! 	(vectorize_loops): Likewise.
  
! 	(vect_do_peeling_for_loop_bound): Dump format slightly changed.
! 	(vect_update_inits_of_drs):
! 	(vect_do_peeling_for_alignment):
! 	(vect_transform_loop):
! 	(vect_analyze_operations):
! 	(vect_analyze_scalar_cycles):
! 	(vect_analyze_data_ref_dependences):
! 	(vect_analyze_data_refs_alignment):
! 	(vect_analyze_data_ref_accesses):
! 	(vect_analyze_data_refs):
! 	(vect_mark_stmts_to_be_vectorized):
! 	(vect_get_loop_niters):
! 	(vect_analyze_loop_form):
! 	(vect_analyze_loop): Likewise.
! 	(vect_mark_stmts_to_be_vectorized): Add call to print_generic_expr.
  
! 2005-02-07  Richard Sandiford  <rsandifo@redhat.com>
  
! 	PR bootstrap/19796
! 	Revert:
! 	2005-01-26  Richard Sandiford  <rsandifo@redhat.com>
! 	* config/mips/iris6.h (ENDFILE_SPEC): Don't link in irix-csr.o if
! 	either -ffast-math or -funsafe-math-optimizations is in use.
  
! 	2005-01-24  Richard Sandiford  <rsandifo@redhat.com>
! 	* config/mips/irix-csr.c: New file.
! 	* config/mips/t-iris6 (irix-csr.o): New rule to build it.
! 	(EXTRA_MULTILIB_PARTS): Add irix-csr.o.
! 	* config/mips/iris6.h (ENDFILE_SPEC): Include it in n32 and n64
! 	executables.
  
! 2005-02-07  Alexandre Oliva  <aoliva@redhat.com>
  
! 	* config/mn10300/linux.h (LIB_SPEC, STARTFILE_SPEC): Remove
! 	redundant, incorrect definitions.
  
! 	* config/frv/frv.md ("tls_indirect_call"): Turn into libcall-like
! 	expand.
! 	("*tls_indirect_call"): New, reference hard regs directly.
! 	* config/frv/frv.c (gen_inlined_tls_plt): Adjust.
  
! 2005-02-07  Ralf Corsepius  <ralf.corsepius@rtems.org>
  
! 	* config/arm/rtems-elf.h (SUBTARGET_EXTRA_ASM_SPEC):
! 	Let !-mhard-float !-msoft-float imply -mfpu=softfpa.
  
! 2005-02-06  Roger Sayle  <roger@eyesopen.com>
  
! 	PR rtl-optimization/19800
! 	* simplify_rtx.c (simplify_relational_operation_1): Explicitly
! 	call gen_lowpart_common and gen_lowpart_SUBREG instead of calling
! 	gen_lowpart.
  
! 2005-02-07  Ralf Corsepius  <ralf.corsepius@rtems.org>
  
! 	* config/m68k/t-rtems (MULTILIB_MATCHES): Let m528x match m5200.
  
! 2005-02-07  Joseph S. Myers  <joseph@codesourcery.com>
  
! 	PR other/17135
! 	* doc/invoke.texi: Correct documentation of -freorder-functions.
  
! 2005-02-06  Joseph S. Myers  <joseph@codesourcery.com>
  
! 	PR other/14402
! 	* doc/invoke.texi: Don't mention gccbug.
  
! 2005-02-06  Roger Sayle  <roger@eyesopen.com>
! 	    Andrew Pinski  <pinskia@physics.uc.edu>
! 	    Paolo Bonzini  <paolo.bonzini@lu.unisi.ch>
  
! 	* simplify-rtx.c (simplify_relational_operation_1): Simplify
! 	(ne:SI (zero_extract:SI FOO (const_int 1) BAR) (const_int 0))
! 	into just (zero_extract:SI FOO (const_int 1) BAR).
  
! 2005-02-06  Joseph S. Myers  <joseph@codesourcery.com>
  
! 	* doc/cpp.texi: Include gcc-common.texi.  Don't define gcctabopt
! 	macro locally.  Don't give last revision date.  Use GCC version
! 	number from gcc-common.texi.
! 	* doc/cppinternals.texi: Include gcc-common.texi.  Don't give last
! 	revision date.  Use GCC version number from gcc-common.texi.
! 	Describe being a library as current state rather than as 3.x
! 	history.
! 	* doc/gcc.texi: Remove last update date.
! 	* doc/gccint.texi: Likewise.  Update copyright dates.
! 	* doc/install.texi: Update copyright dates.
  
! 2005-02-06  Joseph S. Myers  <joseph@codesourcery.com>
  
! 	PR other/7549
! 	* doc/invoke.texi: Mention for each option included in -Wall that
! 	it is included in -Wall.
! 	* doc/gcc.texi: Update copyright and last modification date.
  
! 2005-02-06  Zdenek Dvorak  <dvorakz@suse.cz>
  
! 	* tree-ssa-loop-ivopts.c (rewrite_use_nonlinear_expr): Do not add
! 	unnecessary cast to original induction variable increments.
  
! 2005-02-06  Zdenek Dvorak  <dvorakz@suse.cz>
  
! 	PR tree-optimization/18219
! 	* tree-ssa-loop-ivopts.c (get_computation_at): Produce computations
! 	in distributed form.
  
! 2005-02-06  Richard Sandiford  <rsandifo@redhat.com>
  
! 	* expmed.c (store_bit_field): Make the SUBREG code adjust bitnum.
! 	Set bitpos and offset later in the function.  Do nothing if the
! 	target is a register and if the bitfield lies completely outside
! 	that register.
! 	(extract_bit_field): Make the same SUBREG, bitpos and offset changes
! 	here.  Return an uninitialised register if the source value is stored
! 	in a register and the bitfield lies completely outside that register.
  
! 2005-02-06  Steven Bosscher  <stevenb@suse.de>
  
! 	* df.c (df_insn_refs_record): Use XEXP to get the operand of a USE,
! 	not SET_DEST.
  
! 2005-02-06  Marcin Dalecki  <martin@dalecki.de>
  
! 	* diagnostic.c (default_diagnostic_finalizer): Fix use of attribute.
  
! 2005-02-06  Geoffrey Keating  <geoffk@apple.com>
  
! 	* config.gcc (*-*-darwin*): Separate darwin7 and darwin8 configs.
! 	* config/darwin8.h: New.
! 	* config/darwin7.h: Update comment.
  
! 2005-02-03  Leehod Baruch  <leehod@il.ibm.com>
! 	    Dorit Naishlos  <dorit@il.ibm.com>
  
! 	* tree-vectorizer.h (LOC): New type.
! 	(UNKNOWN_LOC, EXPR_LOC, LOC_FILE, LOC_LINE): New macros.
! 	(loop_line_number): New field in struct _loop_vec_info.
! 	(LOOP_VINFO_LOC, LOOP_LOC): New macros.
  
! 	* tree-vectorizer.c (input.h): Included.
! 	(find_loop_location): New function.
! 	(vect_debug_stats): Argument changed from loop to LOC. Computation of
! 	loop line number removed.
! 	(vect_debug_details): Likewise.
! 	(new_loop_vec_info): Initialize new field LOOP_VINFO_LOC.
  
! 	(slpeel_make_loop_iterate_ntimes): Call find_loop_location. Argument in
! 	call to vect_debug_details/stats changed from loop to loop_loc.
! 	(slpeel_tree_duplicate_loop_to_edge_cfg): Likewise.
! 	(slpeel_tree_peel_loop_to_edge): Likewise.
  
! 	(vect_analyze_offset_expr): Argument in call to vect_debug_details/stats
! 	changed from NULL to UNKNOWN_LOC.
! 	(vect_get_base_and_offset):
! 	(vect_create_addr_base_for_vector_ref):
! 	(get_vectype_for_scalar_type):
! 	(vect_create_data_ref_ptr):
! 	(vect_init_vector):
! 	(vect_get_vec_def_for_operand):
! 	(vect_finish_stmt_generation):
! 	(vectorizable_assignment):
! 	(vectorizable_operation):
! 	(vectorizable_store):
! 	(vectorizable_load):
! 	(vect_transform_stmt):
! 	(vect_update_ivs_after_vectorizer):
! 	(vect_do_peeling_for_loop_bound):
! 	(vect_do_peeling_for_alignment):
! 	(vect_transform_loop):
! 	(vect_is_simple_use):
! 	(vect_analyze_operations):
! 	(vect_is_simple_iv_evolution):
! 	(vect_analyze_scalar_cycles):
! 	(vect_analyze_data_ref_dependences):
! 	(vect_compute_data_ref_alignment):
! 	(vect_enhance_data_refs_alignment):
! 	(vect_analyze_data_ref_access):
! 	(vect_analyze_data_ref_accesses):
! 	(vect_analyze_pointer_ref_access):
! 	(vect_get_memtag_and_dr):
! 	(vect_analyze_data_refs):
! 	(vect_mark_relevant):
! 	(vect_stmt_relevant_p):
! 	(vect_mark_stmts_to_be_vectorized):
! 	(vect_can_advance_ivs_p):
! 	(vect_get_loop_niters):
! 	(vect_analyze_loop):
! 	(vectorize_loops): Likewise.
  
! 	(vectorizable_load): Argument in call to vect_debug_details/stats
! 	changed from loop to LOOP_LOC (loop_vinfo).
! 	(vect_transform_loop):
! 	(vect_analyze_operations):
! 	(vect_analyze_scalar_cycles):
! 	(vect_analyze_data_ref_dependence):
! 	(vect_enhance_data_refs_alignment):
! 	(vect_analyze_data_ref_accesses):
! 	(vect_analyze_pointer_ref_access):
! 	(vect_analyze_data_refs):
! 	(vect_analyze_loop): Likewise.
  
! 	(vect_analyze_loop_form): Argument in call to vect_debug_details/stats
! 	changed from loop to loop_loc.
  
! 	(vect_enhance_data_refs_alignment): Removed unused variable loop.
  
! 2005-02-03  Leehod Baruch  <leehod@il.ibm.com>
! 	    Dorit Naishlos  <dorit@il.ibm.com>
  
! 	* tree-vectorizer.c (vect_analyze_data_ref_dependence): Function
! 	declaration added.
! 	(vect_analyze_data_ref_dependences): Likewise.
  
! 	(vect_is_simple_use): Argument changed from loop structure to
! 	loop_vect_info structure.
! 	(vect_can_advance_ivs_p): Likewise.
! 	(vect_create_index_for_vector_ref): Likewise.
! 	(vect_update_ivs_after_vectorizer): Likewise.
! 	(new_stmt_vec_info): Likewise.
  
! 	(new_loop_vec_info): Second argument in call to new_stmt_vec_info was
! 	changed from loop to loop_vinfo.
! 	(vect_create_data_ref_ptr): First argument in call to
! 	vect_create_index_for_vector_ref was changed from loop to loop_vinfo.
! 	(vectorizable_assignment): Second argument in call to vect_is_simple_use
! 	was changed from loop to loop_vinfo.
! 	(vectorizable_operation): Likewise.
! 	(vectorizable_store): Likewise.
! 	(vect_mark_stmts_to_be_vectorized): Likewise.
! 	(vect_do_peeling_for_loop_bound): First argument in call to
! 	vect_update_ivs_after_vectorizer was changed from loop to loop_vinfo.
! 	(vect_analyze_operations): Argument in call to vect_can_advance_ivs_p
! 	was changed from loop to loop_vinfo.
! 	(vect_analyze_data_ref_dependences): Third argument in call to
! 	vect_analyze_data_ref_dependence was changed from loop to loop_vinfo.
  
! 	(vect_create_index_for_vector_ref): Get the loop from loop_vinfo.
! 	(vect_create_data_ref_ptr): Likewise.
! 	(vect_init_vector): Likewise.
! 	(vect_get_vec_def_for_operand): Likewise.
! 	(vectorizable_assignment): Likewise.
! 	(vectorizable_operation): Likewise.
! 	(vectorizable_store): Likewise.
! 	(vectorizable_load): Likewise.
! 	(vect_update_ivs_after_vectorizer): Likewise.
! 	(vect_is_simple_use): Likewise.
! 	(vect_analyze_data_ref_dependence): Likewise.
! 	(vect_analyze_pointer_ref_access): Likewise.
! 	(vect_can_advance_ivs_p): Likewise.
  
! 	* tree-vectorizer.h: (_loop_vec_info): Definition and macros moved
! 	before _stmt_vec_info.
! 	(_stmt_vec_info): Loop field replaced by loop_vec_info.
! 	(STMT_VINFO_LOOP): Replaced with STMT_VINFO_LOOP_VINFO.
! 	(new_stmt_vec_info): Argument changed from loop structure to
! 	loop_vect_info structure
  
! 	(vect_analyze_data_ref_dependences): Unnecessary line was removed.
! 	(vect_analyze_offset_expr): Avoid 80 columns overflow.
! 	(vect_create_addr_base_for_vector_ref): Likewise.
! 	(vect_analyze_pointer_ref_access): Likewise.
  
! 2005-02-03  Andrew Pinski  <pinskia@physics.uc.edu>
  
! 	PR tree-opt/19768
! 	* tree-ssa-dse.c (fix_phi_uses): Update the occurs in abnormal
! 	phi flag if the phi is abnormal.
  
! 2005-02-03  Andrew Pinski  <pinskia@physics.uc.edu>
  
! 	PR tree-opt/19736
! 	* tree-ssa.c (replace_immediate_uses): Update the immediate_uses
! 	information for the new statement.
  
! 2005-02-03  Joseph S. Myers  <joseph@codesourcery.com>
  
! 	PR driver/19117
! 	* gcc.c (main): Include the target in -v output.
  
! 2005-02-03  Alexandre Oliva  <aoliva@redhat.com>
  
! 	* combine.c (simplify_comparison, case SIGN_EXTEND, ZERO_EXTEND):
! 	Do not drop the extend if we'd have to add a paradoxical subreg
! 	later.  Include optabs.h and insn-codes.h.
! 	* Makefile.in (combine.o): Depend on $(OPTABS_H).
  
! 2005-02-02  Roger Sayle  <roger@eyesopen.com>
  
! 	PR middle-end/19405
! 	* real.h (REAL_MODE_FORMAT_COMPOSITE_P): New macro.
! 	* fold-const.c (const_binop): Avoid constant folding floating
! 	point operations in modes that use composite representations.
! 	* simplify-rtx.c (simplify_binary_operation): Likewise.
  
! 2005-02-02  Geoffrey Keating  <geoffk@apple.com>
  
! 	* config/rs6000/altivec.md (altivec_dst): Make the first operand
! 	a REG, not a MEM.
! 	(altivec_dstt): Likewise.
! 	(altivec_dstst): Likewise.
! 	(altivec_dststt): Likewise.
! 	* config/rs6000/rs6000.c (altivec_expand_dst_builtin): Adjust creation
! 	of first operand.
  
! 2005-02-03  Dorit Naishlos  <dorit@il.ibm.com>
  
! 	* tree-vectorizer.c (slpeel_make_loop_iterate_ntimes): Copy
! 	EXPR_LOCUS from orig_cond to the new cond_stmt.
! 	(vect_finish_stmt_generation): Copy EXPR_LOCUS from stmt to
! 	the new vec_stmt.
  
! 2005-02-03  Dorit Naishlos  <dorit@il.ibm.com>
  
! 	* tree-vectorizer.c (slpeel_make_loop_iterate_ntimes): Call
! 	standard_iv_increment_position. Remove call to bsi_next
! 	(no need to bump the iterator anymore).
! 	(vect_create_index_for_vector_ref): Call
! 	standard_iv_increment_position. Remove second function argument.
! 	(vect_finish_stmt_generation): Remove call to bsi_next
! 	(no need to bump the iterator anymore).
! 	(vect_create_data_ref_ptr): Remove second argument (bsi) in call
! 	to vect_create_index_for_vector_ref.
  
! 2005-02-03  Dorit Naishlos  <dorit@il.ibm.com>
  
! 	* tree-vectorizer.c (vect_mark_stmts_to_be_vectorized): Check if
! 	phis are used out of the loop.
  
! 2005-02-03  Joseph S. Myers  <joseph@codesourcery.com>
  
! 	PR c/17807
! 	* c-decl.c (undef_nested_function): New variable.
! 	(pop_scope): Diagnose undefined nested functions.
! 	(finish_function): Don't attempt cgraph processing or genericizing
! 	if current top-level function contained an undefined nested
! 	function.  Reset undef_nested_function at the end of a top-level
! 	function.
  
! 2005-02-02  Zdenek Dvorak  <dvorakz@suse.cz>
  
! 	* tree.c (build_int_cst_type): Take sign of the value into account
! 	when deciding whether sign extend the value.
  
! 2005-02-02  Joseph S. Myers  <joseph@codesourcery.com>
  
! 	PR c/18502
! 	* gcc.c (cpp_unique_options): Remove %{trigraphs}.
! 	(cpp_options, cc1_options): Change %{std*&ansi} to
! 	%{std*&ansi&trigraphs}.
  
! 2005-02-02  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* cse.c: Update comments.
  
! 2005-02-02  Aldy Hernandez  <aldyh@redhat.com>
  
! 	* config/rs6000/rs6000.c (rs6000_spe_function_arg): Multi-reg
! 	arguments go on the stack.  Do not put complex doubles in odd/even
! 	pairs.
  
! 2005-02-02  Steven Bosscher  <stevenb@suse.de>
  
! 	* doc/invoke.texi: Update the options enabled at -O1, -O2,
! 	and -O3.  Update the documentation for -fgcse-sm, -fgcse-las,
! 	-ftree-pre, and -fthread-jumps.
  
! 2005-02-02  Richard Sandiford  <rsandifo@redhat.com>
  
! 	PR tree-optimization/19578
! 	* tree-flow.h (modified_noreturn_calls): Declare.
! 	(noreturn_call_p): Declare.
! 	* tree-flow-inline.h (noreturn_call_p): New function.
! 	(modify_stmt): Add modified noreturn calls to modified_noreturn_calls.
! 	* tree-cfg.c (modified_noreturn_calls): New variable.
! 	(cleanup_control_flow): Use noreturn_call_p.  Split basic blocks
! 	that contain a mid-block noreturn call.
! 	* tree-ssa.c (delete_tree_ssa): Clear modified_noreturn_calls.
  
! 2005-02-02  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* df.c (df_def_record_1, df_uses_record): Don't use
! 	DF_FOR_REGALLOC.
! 	* df.h (DF_FOR_REGALLOC): Remove.
  
! 2005-02-02  Joseph S. Myers  <joseph@codesourcery.com>
  
! 	PR c/19435
! 	* c-typeck.c (really_start_incremental_init): Reset
! 	constructor_max_index for arrays of incomplete type.
  
! 2005-02-02  Jeff Law  <law@redhat.com>
  
! 	* gcse.c (struct reg_set): Store the block index where the register
! 	was set rather than the setting insn.
! 	(record_one_set, compute_transp): Corresponding changes.
! 	(pre_insert_copy_insn): Do not call replace_one_set.
! 	(replace_one_set): Remove.
  
! 2005-02-02  Joseph S. Myers  <joseph@codesourcery.com>
  
! 	PR other/15514
! 	* doc/gcov.texi: Fix typo.
  
! 2005-02-01  Richard Henderson  <rth@redhat.com
  
! 	PR target/19680
! 	* config/i386/i386.h (MODES_TIEABLE_P): Use ix86_modes_tieable_p.
! 	* config/i386/i386.c (ix86_hard_regno_mode_ok): Change return
! 	type to bool.
! 	(ix86_tieable_integer_mode_p, ix86_modes_tieable_p): New.
! 	* config/i386/i386-protos.h: Update.
  
! 2005-02-01  Steven Bosscher  <stevenb@suse.de>
  
! 	PR tree-optimization/19217
! 	* tree-cfg.c (verify_expr): Use the data field to see if TP was
! 	seen inside a PHI node.  Do not do the ADDR_EXPR check if it was.
! 	(verify_stmts): Pass (void*)1 as data to verify_expr to signal
! 	that it is walking a PHI node.
  
! 2005-02-01  Joseph S. Myers  <joseph@codesourcery.com>
  
! 	* doc/extend.texi (Nested Functions): Update.
  
! 2005-02-01  Richard Henderson  <rth@redhat.com>
  
! 	PR 19696
! 	* optabs.c (expand_copysign_absneg): Export.
! 	* optabs.h (expand_copysign_absneg): Declare.
! 	* config/rs6000/rs6000.md (copysigntf3): New.
  
! 2005-02-01  Diego Novillo  <dnovillo@redhat.com>
  
! 	PR tree-optimization/19633
! 	* tree-flow.h (struct ptr_info_def): Add field 'pt_null'.
! 	* tree-ssa-alias.c (init_alias_info): Initialize.
! 	(merge_pointed_to_info): Set.
! 	(add_pointed_to_expr): Set pt_null if EXPR is a NULL pointer.
! 	(dump_points_to_info_for): Show value of pt_null.
! 	(struct count_ptr_d): Declare.
! 	(find_ptr_dereference): Remove.
! 	(ptr_is_dereferenced_by): Remove.
! 	(count_ptr_derefs): New local function.
! 	(count_uses_and_derefs): New local function.
! 	(compute_points_to_and_addr_escape): Call it.  If the number
! 	of dereferences is greater than zero, mark the pointer as
! 	dereferenced.  If there are fewer dereferences than uses of
! 	the pointer, the pointer's value escapes.
  
! 2005-02-01  Diego Novillo  <dnovillo@redhat.com>
  
! 	PR tree-optimization/19670
! 	* tree-ssa.c (verify_ssa_name): Don't set TREE_VISITED
! 	here...
! 	(verify_use): ... set it here, instead.
  
! 2005-02-01  Janis Johnson  <janis187@us.ibm.com>
  
! 	* doc/sourcebuild.texi (Test directives): Fix formatting.
  
! 	* doc/sourcebuild.texi (Test directives): Describe selector
! 	expressions.
  
! 2005-02-01  Segher Boessenkool  <segher@kernel.crashing.org>
  
! 	* config.gcc (powerpc64-*-linux*): Default to -m64 also for
! 	specific 64-bit CPUs.
  
! 2005-02-01  Richard Earnshaw  <rearnsha@arm.com>
  
! 	PR target/16201
! 	* arm.c (arm_eliminable_register): New function.
! 	(adjacent_mem_locations): Don't allow eliminable registers.  Use
! 	HOST_WIDE_INT for address offsets.
! 	* arm-protos.h (arm_eliminable_register): Add prototype.
  
! 2005-02-01  Steven Bosscher  <stevenb@suse.de>
  
! 	PR optimization/15242
! 	* params.def (PARAM_MAX_GOTO_DUPLICATION_INSNS): New param.
! 	* basic-block.h (duplicate_computed_gotos): Add prototype.
! 	* bb-reorder.c (duplicate_computed_gotos): New function to
! 	duplicate sufficiently small blocks ending in a computed jump.
! 	* passes.c (rest_of_compilation): Call duplicate_computed_gotos
! 	if not optimizing for size.
! 	* cfgcleanup.c (try_crossjump_bb): If not optimizing for size,
! 	never do tail merging for blocks ending in a computed jump.
! 	* doc/invoke.texi: Document the max-goto-duplication-insns param.
  
! 2005-02-01  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	Patch from Richard Sandiford <rsandifo@redhat.com>
! 	* reload1.c (choose_reload_regs): Prevent the find_equiv_reg() code
! 	from inheriting a subreg equivalence with a non-spill register.
  
! 	* tree.h (DECL_FUNCTION_CODE): Document that it is overloaded.
  
! 2005-02-01  Alexandre Oliva  <aoliva@redhat.com>
  
! 	* config/frv/frv.c (movcc_fp_destination_operand): New.
! 	(gpr_or_memory_operand): Fix typo in comment.
! 	(gpr_or_memory_operand_with_scratch): New.
! 	* config/frv/frv.h (PREDICATE_CODES): Add the two new predicates.
! 	* config/frv/frv.md (movcc_fp, movcc_fp_internal): Use
! 	movcc_fp_destination_operand.
! 	(reload_incc_fp): Use gpr_or_memory_operand_with_scratch.
! 	Legitimize memory addresses using a scratch register.
  
! 2005-01-31  Jeff Law  <law@redhat.com>
  
! 	* tree-into-ssa.c (mark_def_sites_global_data): Make KILLS
! 	bitmap a sparse bitmap instead of a simple bitmap.
! 	(mark_def_sites_initialize_block):  Corresponding changes.
! 	(ssa_mark_def_sites_initialize_block): Likewise.
! 	(ssa_mark_phi_uses): Likewise.
! 	(mark_def_site, ssa_mark_def_sites): Likewise.
! 	(mark_def_site_blocks): Likewise.
! 	(rewrite_ssa_into_ssa): Likewise.
  
! 	* tree-ssa-dom.c (record_cond): Pass correct variable type
! 	for last argument to htab_find_slot_with_hash.
  
! 	* fold-const.c (fold, case CEIL_MOD_EXPR): Do not lose side
! 	effects when optimizing 0 % X.  Do not try to optimize X % 0.
  
! 2005-01-31  James E. Wilson  <wilson@specifixinc.com>
  
! 	* config/ia64/itanium1.md (1_scall bypass): Change 2_mmalua to
! 	1_mmalua.
  
! 2005-02-01  Eric Christopher  <echristo@redhat.com>
  
! 	* config/mips/mips.c (override_options): Warn if -mint64
! 	is used.
! 	* doc/invoke.texi (MIPS Options): Document that -mint64 is
! 	deprecated.
  
! 2005-02-01  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* cse.c (cse_reg_info): Remove hash_next, next, regno.  Add
! 	timestamp.
! 	(cse_reg_info_list, cse_reg_info_list_free, REGHASH_SHIFT,
! 	REGHASH_SIZE, REGHASH_MASK, reg_hash, REGHASH_FN,
! 	cached_cse_reg_info, GET_CSE_REG_INFO): Remove.
! 	(cached_regno): Initialize to INVALID_REGNUM.
! 	(cse_reg_info_table_size,
! 	cse_reg_info_table_first_uninitialized,
! 	cse_reg_info_timestamp): New.
! 	(REG_TICK, REG_IN_TABLE, SUBREG_TICKED, REG_QTY): Use
! 	get_cse_reg_info.
! 	(init_cse_reg_info, get_cse_reg_info_1): New.
! 	(get_cse_reg_info): Cache the last look-up.
! 	(new_basic_block): Update the code to clear mappings from
! 	registers to cse_reg_info entries.
! 	(cse_main): Call init_cse_reg_info.
  
! 	* cse.c (get_cse_reg_info): Update a comment.
  
! 2005-01-31  Steven Bosscher  <stevenb@suse.de>
  
! 	PR c/19333
! 	* c-decl.c (start_decl): Do not warn about arrays of elements with
! 	an incomplete type here.
! 	(grokdeclarator): Do it here by making a pedwarn an error.
! 	* c-typeck.c (push_init_level): If there were previous errors with
! 	the constructor type, do not warn about braces for initializers.
! 	(process_init_element): Likewise for excess initializer elements.
  
! 2005-01-31  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* cse.c (delete_trivially_dead_insn): Don't iterate.
  
! 2005-01-31  Andrew Pinski  <pinskia@physics.uc.edu>
  
! 	* config/rs6000/rs6000.md (copysignsf3): New expand.
! 	(copysigndf3): Likewise.
  
! 2005-01-31  Steven Bosscher  <stevenb@suse.de>
  
! 	* recog.c (constrain_operands): Only look for earlyclobber operand
! 	conflicts if an '&' constraint was seen.
  
! 2005-01-31  Marc Espie <espie@openbsd.org>
  
! 	* config.gcc: Don't include embedded systems fragment, switches default
! 	debugging format to ELF.
! 	* config/i386/openbsdelf.h: Add DBX_REGISTER_NUMBER since we no
! 	longer pick it up there.
  
! 2005-01-31  Dale Johannesen  <dalej@apple.com>
  
! 	* doc/extend.texi (nested functions): Fix linkage description.
! 	Clarify that static is not allowed.
  
! 2005-01-31  Dale Johannesen  <dalej@apple.com>
  
! 	* config/rs6000/darwin.md (movsf_low_di):  Make work.
! 	(movdf_low_di):  Make work.
  
! 2005-01-31  Dale Johannesen  <dalej@apple.com>
  
! 	* config/rs6000/darwin-tramp.asm (__trampoline_setup):
! 	Make work for 64 bit.
  
! 2005-01-31  Roger Sayle  <roger@eyesopen.com>
! 	    Dale Johannesen  <dalej@apple.com>
  
! 	PR middle-end/19650
! 	* fold-const.c (fold_binary_op_with_conditional_arg):
! 	Make types match original operands, before STRIP_NOPS.
  
! 2005-01-31  Alan Modra  <amodra@bigpond.net.au>
  
! 	* config/rs6000/linux-unwind.h (struct gcc_vregs): New.
! 	(struct gcc_regs): Rename from gcc_pt_regs.  Add more regs.
! 	(struct gcc_sigcontext): Delete.  Merge contents to..
! 	(struct gcc_ucontext): ..here.
! 	(get_sigcontext): Delete.
! 	(get_regs): New function, like get_sigcontext but return regs ptr.
! 	64-bit version finds regs from r1 to support vdso.
! 	(ppc_linux_aux_vector): New function.
! 	(ppc_fallback_frame_state): Modify for get_regs.  Restore fprs
! 	and vector regs.
  
! 2005-01-31  Ira Rosen  <irar@il.ibm.com>
  
! 	* tree-vectorizer.c (vect_analyze_offset_expr): Use ssizetype instead
! 	sizetype.
! 	(vect_get_base_and_offset): Use ssizetype instead sizetype. Remove
! 	redundant fold. Fix misalignment for MINUS_EXPR.
! 	(vect_compute_data_ref_alignment): Use ssizetype instead sizetype.
! 	(vect_analyze_pointer_ref_access): Likewise.
! 	(vect_get_memtag_and_dr): Likewise.
  
! 2005-01-31  Richard Henderson  <rth@redhat.com>
  
! 	* config/i386/i386.c (absnegsf2_mixed): Remove all of the # hackery.
! 	(absnegsf2_sse, absnegsf2_i387, absnegdf2_mixed, absnegdf2_sse,
! 	absnegdf2_i387, absnegxf2_i387): Likewise.
  
! 2005-01-31  Richard Henderson  <rth@redhat.com>
  
! 	PR 19696
! 	* optabs.c (expand_copysign_absneg): New.
! 	(expand_copysign_bit): Split out from ...
! 	(expand_copysign): ... here.  Use expand_copysign_absneg.
  
! 2005-01-30  Roger Sayle  <roger@eyesopen.com>
  
! 	PR middle-end/19697
! 	* config/pa/pa.md (anddi3, iordi3): On HPPA64, disallow an integer
! 	constant as the second operand and a register as the third.
  
! 2005-01-31  Danny Smith  <dannysmith@users.sourceforge.net>
  
! 	PR target/19704
! 	* config/i386/i386.c (ix86_function_ok_for_sibcall):  Also check
! 	that dllimport'd functions do not use all call-clobbered registers
! 	to pass parameters.
  
! 2005-01-30  Richard Henderson  <rth@redhat.com>
  
! 	PR 19696
! 	* optabs.c (expand_absneg_bit): Split out from expand_unop and
! 	expand_abs_nojump and generalize.  Use operand_subword and
! 	emit_no_conflict_block.  Support large modes.
! 	(expand_abs_nojump): Use it.  Use HONOR_SIGNED_ZEROS to fall
! 	back to maximum.
! 	(expand_unop): Likewise.  Use HONOR_SIGNED_ZEROS to fall back
! 	negation to subtraction.
! 	(expand_copysign): Check that the format has signed zeros.
! 	Use operand_subword and emit_no_conflict_block.  Support large modes.
  
! 2005-01-30  Daniel Berlin  <dberlin@dberlin.org>
  
! 	Fix PR tree-optimization/19624
  
! 	* Makefile.in (tree-ssa-pre.o): Add CFGLOOP_H.
! 	* tree-ssa-pre.c: Add cfgloop.h.
! 	Update comment.
! 	(pre_stats): New member, constified.
! 	(inserted_exprs): New static variable.
! 	(NECESSARY): New macro.
! 	(create_expression_by_pieces): Fold the expression, and
! 	mark it as defaulting to not necessary. Also put in
! 	inserted_exprs.
! 	(fully_constant_expression): New function.
! 	(insert_into_preds_of_block): Modify to not insert phis when we
! 	are playing with induction variables.
! 	Push phis onto the inserted_exprs vector, and mark them as not
! 	necessary by default.
! 	(insert_aux): Call fully_constant_expression on eprime.
! 	If all edges produce the same value, mark it constant.
! 	(mark_operand_necessary): New function.
! 	(remove_dead_inserted_code): New function.
! 	(init_pre): Init loop optimizer to get loop info.
! 	(fini_pre): Free loop_optimizer, and inserted_exprs vec.
! 	(execute_pre): Commit edge inserts, then remove dead code.
  
! 2005-01-30  Richard Henderson  <rth@redhat.com>
  
! 	* rtl.c (rtx_equal_p): No early exit for CONST_VECTOR.
! 	* varasm.c (const_rtx_hash_1): Handle CONST_VECTOR.
  
! 2005-01-30  Richard Henderson  <rth@redhat.com>
  
! 	PR target/19700
! 	* config/i386/i386.c (ix86_expand_copysign): New.
! 	(ix86_split_copysign_const): New.
! 	(ix86_split_copysign_var): Rename from ix86_split_copysign,
! 	rearrange op1/nmask operands.
! 	* config/i386/i386-protos.h: Update.
! 	* config/i386/i386.md (copysignsf3): Use ix86_expand_copysign.
! 	(copysigndf3): Likewise.
! 	(copysignsf3_const, copysigndf3_const): New.
! 	(copysignsf3_var): Rename from copysignsf3, split out splitter
! 	and fix split predicate for X constraint.
! 	(copysigndf3_var): Similarly.
  
! 2005-01-30  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* optabs.c, doc/c-tree.texi, doc/install.texi, doc/md.texi,
! 	doc/passes.texi, doc/rtl.texi, doc/sourcebuild.texi,
! 	doc/tm.texi, doc/tree-ssa.texi: Update copyright.
  
! 2005-01-29  Richard Henderson  <rth@redhat.com>
  
! 	PR target/19690
! 	* config/i386/i386.md (movdf_nointeger, movdf_integer): Fix ordering
! 	of # and * in constraints.
  
! 2005-01-29  Richard Henderson  <rth@redhat.com>
  
! 	PR middle-end/19689
! 	* expr.c (store_field): Don't strip sub-mode cast when the input
! 	data is even smaller.
  
! 2005-01-29  Richard Henderson  <rth@redhat.com>
  
! 	PR middle-end/19687
! 	* expr.c (categorize_ctor_elements_1): Check for CONSTRUCTOR of a
! 	union being empty.
  
! 2005-01-29  Richard Henderson  <rth@redhat.com>
  
! 	* combine.c (make_field_assignment): Fix argument order
! 	to gen_int_mode.
  
! 2005-01-29  Richard Guenther <richard.guenther@uni-tuebingen.de>
  
! 	PR tree-optimization/15791
! 	* fold-const.c (extract_array_ref): New function.
! 	(fold): Fold comparisons between &a[i] and &a[j] or
! 	semantically equivalent trees.
  
! 2005-01-29  Jeff Law  <law@redhat.com>
  
! 	* gcse.c (insert_expr_in_table): Revamp handling of available
! 	and anticipatable occurrence lists to avoid unnecessary list
! 	walking.
! 	(insert_set_in_table): Similarly.
  
! 2005-01-29  Joseph S. Myers  <joseph@codesourcery.com>
  
! 	* c-common.c (fix_string_type): Just use c_build_qualified_type to
! 	build string type.
! 	(c_build_qualified_type): Build qualified array types with
! 	TYPE_MAIN_VARIANT pointing to corresponding unqualified type.
! 	* c-decl.c (c_make_fname_decl): Build unqualified array type
! 	before qualified type.
! 	(grokdeclarator): Use TYPE_MAIN_VARIANT of typedef type if element
! 	type is qualified, not just if type itself is.  Don't apply
! 	qualifiers to array type when declarator is processed.  Apply
! 	qualifiers to field type whether or not it is an array type.
! 	Don't handle array types specially for applying qualifiers to
! 	variables.
! 	* c-typeck.c (composite_type): Build unqualified element type and
! 	array type when forming composite of array types.
! 	(common_pointer_type, comptypes, comp_target_types,
! 	type_lists_compatible_p, build_indirect_ref, build_array_ref,
! 	convert_for_assignment): Don't apply TYPE_MAIN_VARIANT to array
! 	types.
! 	(type_lists_compatible_p): Cache TREE_VALUE (args1) and TREE_VALUE
! 	(args2) in variables a1 and a2.
  
! 2005-01-29  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* cse.c (n_elements_made, max_elements_made): Remove.
! 	(insert): Don't touch n_elements_made.
! 	(cse_main): Don't touch n_elements_made or max_elements_made.
  
! 2005-01-28  Stephane Carrez  <stcarrez@nerim.fr>
  
! 	PR target/15384
! 	* config/m68hc11/t-m68hc11-gas (dp-bit.c): Fix typo causing a
! 	configuration part of dp-bit.c to be lost.
  
! 2005-01-28  Roger Sayle  <roger@eyesopen.com>
  
! 	* expmed.c (expand_mult_highpart_optab): When attempting to use
! 	a non-widening multiplication in a wider mode, the operands need
! 	to be converted (zero or sign extended) to that mode.
  
! 2005-01-28  Ian Lance Taylor  <ian@airs.com>
  
! 	PR middle-end/16558
! 	PR middle-end/19583
! 	* gimple-low.c (block_may_fallthru): TRY_FINALLY_EXPR only falls
! 	through if both operands fall through.
  
! 2005-01-28  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* cse.c (fold_rtx) <PC>: Don't optimize.
  
! 2005-01-28  Jeff Law  <law@redhat.com>
  
! 	* fold-const.c (fold, case CEIL_MOD_EXPR): Optimize 0 % X.
! 	(case FLOOR_MOD_EXPR, ROUND_MOD_EXPR, TRUNC_MOD_EXPR): Similarly.
  
! 2005-01-28  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* cse.c (cse_reg_info_free_list, cse_reg_info_used_list,
! 	cse_reg_info_used_list_end): Remove.
! 	(cse_reg_info_list, cse_reg_info_list_free): New.
! 	(get_cse_reg_info): When allocating an instance of
! 	cse_reg_info, add it to the beginning of the cse_reg_info_list
! 	list.  Remove code to maintain cse_reg_info_used_list.
! 	(new_basic_block): Reset the free list to the beginning of
! 	cse_reg_info_list.
  
! 2005-01-28  Richard Sandiford  <rsandifo@redhat.com>
  
! 	* config/frv/frv.c (bdesc_2arg): Remove __MDPACKH.
! 	(frv_init_builtins): Change its prototype to take 4 uhalf arguments.
! 	(frv_expand_mdpackh_builtin): New function.
! 	(frv_expand_builtin): Use it to expand __MDPACKH.
! 	* doc/extend.texi (__MDPACKH): Update documentation.
  
! 2005-01-28  Uros Bizjak  <uros@kss-loka.si>
  
! 	* config/i386/i386.c (ix86_expand_fp_absneg_operator): Use
! 	SSE_FLOAT_MODE_P for use_sse computation.
  
! 2005-01-28  Ralf Corsepius  <ralf.corsepius@rtems.org>
  
! 	PR target/19663
! 	* config/sparc/rtemself.h (LINK_GCC_C_SEQUENCE_SPEC): undefine.
  
! 2005-01-27  Richard Henderson  <rth@redhat.com>
  
! 	* builtins.c (expand_builtin_copysign): New.
! 	(expand_builtin): Call it.
! 	* genopinit.c (optabs): Add copysign_optab.
! 	* optabs.c (init_optabs): Initialize it.
! 	(expand_copysign): New.
! 	* optabs.h (OTI_copysign, copysign_optab): New.
! 	(expand_copysign): Declare.
  
! 	* config/alpha/alpha.md (UNSPEC_COPYSIGN): New.
! 	(copysignsf3, ncopysignsf3, copysigndf3, ncopysigndf3): New.
  
! 	* config/i386/i386.c (ix86_build_signbit_mask): Split from ...
! 	(ix86_expand_fp_absneg_operator): ... here.
! 	(ix86_split_copysign): New.
! 	* config/i386/i386-protos.h: Update.
! 	* config/i386/i386.md (UNSPEC_COPYSIGN): New.
! 	(copysignsf3, copysigndf3): New.
  
! 	* config/ia64/ia64.md (UNSPEC_COPYSIGN): New.
! 	(copysignsf3, ncopysignsf3): New.
! 	(copysigndf3, ncopysigndf3): New.
! 	(copysignxf3, ncopysignxf3): New.
! 	* config/ia64/ia64.c (rtx_needs_barrier): Handle UNSPEC_COPYSIGN.
  
! 2005-01-27  Arend Bayer  <arend.bayer@web.de>
! 	    Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* cse.c: (find_best_addr): Don't call copy_rtx before calling
! 	fold_rtx.  Save cost recomputation if fold_rtx did nothing.
! 	(fold_rtx) <ASM_OPERANDS>: Don't do anything if INSN is
! 	NULL_RTX.
  
! 2005-01-27  Jeff Law  <law@redhat.com>
  
! 	* tree-into-ssa.c (ssa_rewrite_initialize_block): Do not register
! 	definitions of SSA_NAMEs which are not being rewritten.
! 	(rewrite_ssa_into_ssa): Only initialize the current definition
! 	of an SSA_NAME if that SSA_NAME has been marked for rewriting.
! 	If checking is enabled, assert that SSA_NAME_AUX is clear for all
! 	SSA_NAMEs before returning.
  
! 2005-01-27  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* c-common.def, c-dump.c, c-gimplify.c, c-objc-common.c,
! 	cfgexpand.c, dbxout.c, function.h, opts.c, tree-flow-inline.h,
! 	tree-ssa-operands.h, tree-ssa-threadupdate.c, tree-tailcall.c,
! 	config/avr/avr.md, config/cris/aout.h, config/cris/cris.h,
! 	config/mips/iris6.h, config/sh/sh.c: Update copyright.
  
! 2005-01-27  Steven Bosscher  <stevenb@suse.de>
  
! 	PR middle-end/17278
! 	* opts.c (decode_options): Move flag_thread_jumps from -O1 and
! 	higher to -O2 and higher.  Likewise for tree PRE.
! 	* tree-ssa-dom.c (tree_ssa_dominator_optimize): Only iterate at -O2
! 	and better.
  
! 2005-01-27  Ian Lance Taylor  <ian@airs.com>
  
! 	PR middle-end/19583
! 	* gimple-low.c (try_catch_may_fallthru): New static function.
! 	(block_may_fallthru): Handle TRY_CATCH_EXPR.
! 	* tree-inline.c (expand_call_inline): Don't warn about reaching
! 	the end of a non-void function being inlined if the function uses
! 	a return slot.
  
! 2005-01-27  Jakub Jelinek  <jakub@redhat.com>
  
! 	* config/i386/i386.h (CALL_USED_REGISTERS): Fix comment pastos.
  
! 	PR c/18946
! 	* c-decl.c (warn_if_shadowing): Handle old_decl error_mark_node.
! 	(pushdecl): Only use DECL_FILE_SCOPE_P if DECL_P.
! 	(implicitly_declare): Handle error_mark_node.
  
! 2005-01-27  Richard Henderson  <rth@redhat.com>
  
! 	PR tree-opt/14329
! 	* tree.h (struct tree_decl): Add debug_expr_is_from.
! 	(DECL_DEBUG_EXPR_IS_FROM): New.
! 	(DECL_DEBUG_EXPR): Rename from DECL_DEBUG_ALIAS_OF.
! 	* dwarf2out.c (dwarf2out_var_location): Update to match.
! 	* tree-outof-ssa.c (create_temp): Likewise.
! 	* var-tracking.c (track_expr_p): Likewise.
! 	* tree-sra.c (instantiate_element): Set DECL_DEBUG_EXPR.
! 	* c-objc-common.c (c_tree_printer) <'D'>: Handle DECL_DEBUG_EXPR.
! 	* toplev.c (default_tree_printer): Likewise.
  
! 2005-01-27  Alexandre Oliva  <aoliva@redhat.com>
  
! 	* config/frv/frv.c (frv_class_likely_spilled_p): Add GR8_REGS,
! 	GR9_REGS, GR89_REGS, FDPIC_FPTR_REGS, FDPIC_REGS.
  
! 2005-01-27  Steven Bosscher  <stevenb@suse.de>
  
! 	* tree.h (SWITCH_COND, SWITCH_BODY, SWITCH_LABELS, CASE_LOW,
! 	CASE_HIGH, CASE_LABEL, ASM_STRING, ASM_OUTPUTS, ASM_INPUTS,
! 	ASM_CLOBBERS): Add tree checks.
  
! 	* c-common.h (SWITCH_TYPE): Rename to SWITCH_STMT_TYPE.
! 	(SWITCH_STMT_COND, SWITCH_STMT_BODY): New.
! 	* c-common.def (SWITCH_STMT): Update to match.
! 	* c-common.c (c_do_switch_warnings): Use SWITCH_STMT accessor
! 	macros instead of SWITCH_EXPR ones.
! 	* c-dump.c (c_dump_tree): Likewise.
! 	* c-gimplify.c (gimplify_switch_stmt): Likewise.
! 	* c-typeck.c (c_start_case, do_case, c_finish_case): Likewise.
  
! 	* doc/c-tree.texi (SWITCH_STMT): Update accessor macro names.
  
! 2005-01-27  Alan Modra  <amodra@bigpond.net.au>
  
! 	* unwind-dw2.c (execute_stack_op): Add missing cases for
! 	DW_OP_shl, DW_OP_shr, DW_OP_shra, DW_OP_xor.
  
! 2005-01-27  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	* config.gcc (Obsolete configurations): Remove 'dummy', add
! 	sparclite-*-coff*, sparclite-*-elf*, sparc86x-*-elf* and
! 	sparc-*-openbsd*.
  
! 2005-01-26  Diego Novillo  <dnovillo@redhat.com>
  
! 	PR tree-optimization/19633
! 	* tree-ssa-alias.c (ptr_is_dereferenced_by): Also handle
! 	CALL_EXPRs.
! 	(maybe_create_global_var): Do not create .GLOBAL_VAR if there
! 	are no call-clobbered variables.
! 	* tree-outof-ssa.c (check_replaceable): Return false for calls
! 	with side-effects.
  
! 2005-01-26  Ulrich Weigand  <uweigand@de.ibm.com>
  
! 	* dbxout.c (dbxout_symbol_location): Resolve constant pool references
! 	even for variables with NULL DECL_INITIAL.
  
! 2005-01-26  Stuart Hastings  <stuart@apple.com>
  
! 	* gimplify.c (shortcut_cond_expr): Re-compute side-effects.
  
! 2005-01-26  Richard Henderson  <rth@redhat.com>
  
! 	PR middle-end/18008
! 	* c-decl.c (finish_struct): Set DECL_MODE after resetting a
! 	field's type.
! 	* expr.c (store_field): Strip conversions to odd-bit-sized types
! 	if the destination field width matches.
  
! 2005-01-26  Richard Henderson  <rth@redhat.com>
  
! 	* c-decl.c, expmed.c, expr.c: Revert last change.
  
! 2005-01-26  Richard Henderson  <rth@redhat.com>
  
! 	PR middle-end/18008
! 	* c-decl.c (finish_struct): Set DECL_MODE after resetting a
! 	field's type.
! 	* expmed.c (store_fixed_bit_field): Create a paradoxical subreg
! 	if we don't need the bits above those present in the current mode.
! 	* expr.c (store_field): Strip conversions to odd-bit-sized types
! 	if the destination field width matches.
  
! 2005-01-26  Richard Sandiford  <rsandifo@redhat.com>
  
! 	* config/mips/iris6.h (ENDFILE_SPEC): Don't link in irix-csr.o if
! 	either -ffast-math or -funsafe-math-optimizations is in use.
  
! 2005-01-26  Marek Michalkiewicz  <marekm@amelek.gda.pl>
  
! 	PR target/19293
! 	PR target/19329
! 	* config/avr/avr.c (notice_update_cc): Only set condition code for
! 	ashrqi3 if shift count > 0.
! 	(out_shift_with_cnt): Handle shift count <= 0 as a no-op.
! 	(ashlqi3_out, ashlhi3_out, ashlsi3_out, ashrqi3_out, ashrhi3_out,
! 	ashrsi3_out, lshrqi3_out, lshrhi3_out, lshrsi3_out): Handle shift
! 	count <= 0 as a no-op, and shift count >= width by copying zero
! 	or sign bit to all bits of the result.
! 	* config/avr/avr.md (all shifts): Add alternatives for zero shift
! 	count, with attribute "length" set to 0 and "cc" set to "none".
  
! 2005-01-26  Aldy Hernandez  <aldyh@redhat.com>
  
! 	* doc/invoke.texi: Document -mTLS.
  
! 	* testsuite/gcc.target/frv/all-tls-global-dynamic.c: New.
! 	* testsuite/gcc.target/frv/all-tls-initial-exec.c: New.
! 	* testsuite/gcc.target/frv/all-tls-initial-exec-pic.c: New.
! 	* testsuite/gcc.target/frv/all-tls-local-dynamic.c: New.
! 	* testsuite/gcc.target/frv/all-tls-local-dynamic-plt.c: New.
! 	* testsuite/gcc.target/frv/all-tls-local-dynamic-plt-pic.c: New.
! 	* testsuite/gcc.target/frv/all-tls-local-exec.c: New.
! 	* testsuite/gcc.target/frv/all-tls-local-exec-TLS.c: New.
  
! 	* configure.ac: Check for a TLS capable gas.
  
  	* configure: Regenerate.
  
! 2005-01-26  Richard Henderson  <rth@redhat.com>
  
! 	PR middle-end/18008
! 	* combine.c (make_field_assignment): Simplify store to zero_extract
! 	from a source with an overlapping mask.
  
! 2005-01-26  Aldy Hernandez  <aldyh@redhat.com>
  
! 	2004-11-11  Eric Christopher  <echristo@redhat.com>
  
! 	* config/frv/frv.md: Add fr400_integer automaton. Don't
! 	allow TYPE_MUL, TYPE_MACC, or TYPE_CUT to issue in parallel
! 	to TYPE_MACC.
  
! 2005-01-26  Steven Bosscher  <stevenb@suse.de>
  
! 	PR middle-end/16585
! 	* cfgbuild.c (make_edges): Do not clear or set
! 	current_function_has_computed_jump.
! 	* function.h (struct function): Remove the has_computed_jump field.
! 	(current_function_has_computed_jump): Do not define.
! 	* sched-rgn.c (is_cfg_nonregular): Return true if a basic block ends
! 	in a computed jump.  Ignore current_function_has_computed_jump.
  
! 2005-01-26  Richard Henderson  <rth@redhat.com>
  
! 	PR middle-end/19515
! 	* expr.c (categorize_ctor_elements): New argument p_must_clear.
! 	(categorize_ctor_elements_1): Likewise.  Detect a union that isn't
! 	fully initialized.
! 	(mostly_zeros_p): Update for new categorize_ctor_elements argument.
! 	* gimplify.c (gimplify_init_constructor): Likewise.  Only shove
! 	objects into static storage if they have more than one non-zero value.
! 	* tree.h (categorize_ctor_elements): Update decl.
  
! 2005-01-26  Steven Bosscher  <stevenb@suse.de>
  
! 	PR middle-end/19616
! 	* tree.h (CALL_EXPR_TAILCALL): Add comment.
! 	* calls.c (check_sibcall_argument_overlap_1): Revert the change
! 	to this function from 2004-07-10.
! 	* tree-tailcall.c (suitable_for_tail_opt_p): Do not consider the
! 	the current function for tail call optimizations if the address
! 	of one of it its arguments is taken.
  
! 2005-01-26  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* cse.c (fold_rtx): Call equiv_constant only when necessary.
  
! 2005-01-26  Bernd Schmidt  <bernd.schmidt@analog.com>
  
! 	* function.c (expand_function_end): If current_function_calls_alloca,
! 	emit stack restore in a place that is reached when the function falls
! 	through at the end.
  
! 2005-01-26  Alexandre Oliva  <aoliva@redhat.com>
  
! 	* Makefile.in (../$(build_subdir)/fixincludes/fixincl): Add dummy
! 	rule to avoid matching inappropriate suffix rule.
  
! 2005-01-26  Jan Hubicka  <jh@suse.cz>
  
! 	PR tree-optimization/19241
! 	* tree-inline.c (copy_body_r): Do not walk subtrees after substituting.
  
! 2005-01-26  Hans-Peter Nilsson  <hp@axis.com>
  
! 	* config/cris/cris.h (LIB_SPEC) <sim*>: Use -lsyslinux, not
! 	-lsyssim.  Wrap -lc -lsyssim in --start-group --end-group instead
! 	of doubling.
! 	(STARTFILE_SPEC): Add crti.o, before crtbegin.o.
! 	<sim*>: Always use crt1.o, regardless of N in simN.
! 	<!sim>: Drop support for -pg and -p variants; always use crt0.o.
! 	(ENDFILE_SPEC): Add crtn.o, after crtend.o.
! 	(CRT_CALL_STATIC_FUNCTION): Remove.
! 	* config/cris/aout.h (STARTFILE_SPEC): <!melinux && sim*>: Always
! 	use crt1.o, regardless of N in simN.
! 	<!sim>: Drop support for -pg and -p variants; always use crt0.o.
! 	(LIB_SPEC): Do not define; default to the one in config/cris/cris.h.
! 	(CRIS_CPP_SUBTARGET_SPEC) <melinux && !nostdinc>: Remove special
! 	case isystem setting.
! 	(MAX_OFILE_ALIGNMENT): Correct to 32, not 16.
  
! 2005-01-25  Ian Lance Taylor  <ian@airs.com>
  
! 	* gimple-low.c (block_may_fallthru): Correct handling of
! 	SWITCH_EXPR--may fall through if SWITCH_LABELS is NULL.
  
! 2005-01-26  Hans-Peter Nilsson  <hp@axis.com>
  
! 	* config/cris/cris.h (CPP_SPEC): Adjust the various mtune=
! 	handlers to match indentation; nested under the mtune=* handler.
! 	Similar for mcpu= and march=.
  
! 2005-01-25  Daniel Jacobowitz  <dan@codesourcery.com>
  
! 	* config/mips/linux.h (LIB_SPEC): Remove -rpath-link.
! 	* config/mips/linux64.h (LIB_SPEC): Likewise.
! 	* config/mn10300/linux.h (LIB_SPEC): Likewise.
! 	* config/sh/linux.h (LIB_SPEC): Likewise.
  
! 2005-01-25  Aldy Hernandez  <aldyh@redhat.com>
  
! 	* config/frv/frv.c (frv_legitimize_tls_address): New.
! 	(TARGET_HAVE_TLS): Define.
! 	(FRV_SYMBOL_REF_TLS_P): Define.
! 	(frv_override_options): Handle new register classes.
! 	(frv_legitimate_address_p): Reject tls addresses.
! 	(frv_legitimize_address): Handle TLS addresses.
! 	(gen_inlined_tls_plt): New.
! 	(gen_tlsmoff): New.
! 	(frv_legitimize_tls_address): New.
! 	(unspec_got_name): Add TLS entries.
! 	(got12_operand): Add R_FRV_TLSMOFF12 case.
! 	(frv_emit_move): Fixup TLS addresses.
! 	(frv_emit_movsi): Legitimize TLS addresses.
  
! 	* config/frv/frv.h (MASK_BIG_TLS): New.
! 	(TARGET_BIG_TLS): New.
! 	(HAVE_AS_TLS): Define.
! 	(TARGET_SWITCHES): Add -mTLS and -mtls options.
! 	(enum reg_class): Add GR8_REGS, GR9_REGS, GR89_REGS.
! 	(REG_CLASS_NAMES): Same.
! 	(REG_CLASS_CONTENTS): Same.
! 	(CONSTRAINT_LEN): New.
! 	(REG_CLASS_FROM_CONSTRAINT): New.
! 	(PREDICATE_CODES): Add symbolic_operand.
  
! 	* config/frv/frv.md (define_constants): Add UNSPEC_GETTLSOFF,
! 	UNSPEC_TLS_LOAD_GOTTLSOFF12, UNSPEC_TLS_INDIRECT_CALL,
! 	UNSPEC_TLS_TLSDESC_LDD, UNSPEC_TLS_TLSDESC_LDD_AUX,
! 	UNSPEC_TLS_TLSOFF_LD, UNSPEC_TLS_LDDI, UNSPEC_TLSOFF_HILO,
! 	R_FRV_GOTTLSOFF_HI, R_FRV_GOTTLSOFF_LO, R_FRV_TLSMOFFHI,
! 	R_FRV_TLSMOFFLO, R_FRV_TLSMOFF12, R_FRV_TLSDESCHI,
! 	R_FRV_TLSDESCLO, R_FRV_GOTTLSDESCHI, R_FRV_GOTTLSDESCLO, GR8_REG,
! 	GR9_REG, GR14_REG, LRREG.
! 	(type): Add load_or_call attribute.
! 	("load_or_call"): New reservation.
! 	("call_gettlsoff"): New.
! 	("tls_indirect_call"): New.
! 	("tls_load_gottlsoff12"): New.
! 	("tlsoff_hilo"): New.
! 	("tls_tlsdesc_ldd"): New.
! 	("tls_tlsoff_ld"): New.
! 	("tls_lddi"): New.
  
! 	* config/frv/frv-protos.h (symbolic_operand): Protoize.
  
! 	2005-01-25  Alexandre Oliva  <aoliva@redhat.com>
  
! 	* config/frv/frv.h (ASM_OUTPUT_DWARF_DTPREL): Define.
! 	* config/frv/frv-protos.h (frv_output_dwarf_dtprel): Declare.
! 	* config/frv/frv.c (TLS_BIAS): Define.
! 	(frv_output_dwarf_dtprel): New.
  
! 2005-01-26  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR rtl-optimization/19579
! 	* ifcvt.c (noce_try_cmove_arith): If emitting instructions to set up
! 	both A and B, see if they don't clobber registers the other expr uses.
  
! 2005-01-25  J"orn Rennecke <joern.rennecke@st.com>
  
! 	* real.c (do_add): Initialize signalling and canonical members.
  
! 	* real.c (real_from_integer): Zero out destination.
  
! 2005-01-18  Jan Hubicka  <jh@suse.cz>
  
! 	PR tree-optimize/19337
! 	* tree-inline.c (initialize_inlined_parameters): Copy
! 	saved_static_chain_decl only.
  
! 2005-01-25  Richard Henderson  <rth@redhat.com>
  
! 	PR target/19556
! 	PR target/19584
! 	* config/i386/i386.c (x86_inter_unit_moves): Zero.
! 	(ix86_preferred_reload_class): Rewrite fp-constant section, with
! 	80387 enabled, to return a proper subclass.  Return the subset that
! 	overlaps with GENERAL_REGS for PLUS.
! 	* config/i386/i386.md (movsi_1, movdi_2): Set type to "mmx" for pxor.
  
! 2005-01-25  Richard Henderson  <rth@redhat.com>
  
! 	PR middle-end/19609
! 	* tree-complex.c (expand_complex_div_wide): Use the correct formulae.
  
! 2005-01-25  Roger Sayle  <roger@eyesopen.com>
  
! 	* expmed.c (choose_multiplier): Change interface to return the
! 	multiplier lowpart as an rtx instead of an unsigned HOST_WIDE_INT.
! 	(expand_divmod): Update calls to choose_multiplier.
  
+ 2005-01-24  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
  
! 	PR middle-end/19330
! 	* expmed.c (extract_bit_field): Use adjust_address instead of
! 	gen_lowpart when op0 is a MEM.
  
! 2005-01-24  Steven Bosscher  <stevenb@suse.de>
  
! 	* cfgexpand.c (expand_gimple_tailcall): Fix typo.
  
! 2005-01-24  Richard Sandiford  <rsandifo@redhat.com>
  
! 	* config/mips/irix-csr.c: New file.
! 	* config/mips/t-iris6 (irix-csr.o): New rule to build it.
! 	(EXTRA_MULTILIB_PARTS): Add irix-csr.o.
! 	* config/mips/iris6.h (ENDFILE_SPEC): Include it in n32 and n64
! 	executables.
  
! 2005-01-24  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	PR bootstrap/19364
! 	* config.gcc (sparc-*-elf*): Remove sol2.h, sparc/sol2.h and
! 	sparc/elf.h, add sparc/sp-elf.h.
! 	(sparc-*-rtems*): Likewise.
! 	(sparclite-*-elf*): Remove sol2.h, sparc/sol2.h, sparc/elf.h and
! 	tm-dwarf2.h, add sparc/sp-elf.h.
! 	(sparc86x-*-elf): Likewise.
! 	(sparc64-*-elf*): Remove sol2.h, sparc/sol2.h and tm-dwarf2.h.
! 	* config/sparc/liteelf.h (TARGET_SUB_OS_CPP_BUILTINS): Rename into
! 	TARGET_OS_CPP_BUILTINS.
! 	* config/sparc/sp86x-elf (TARGET_SUB_OS_CPP_BUILTINS): Likewise.
! 	* config/sparc/rtemself.h (TARGET_SUB_OS_CPP_BUILTINS): Likewise.
! 	Undefine it.
! 	* config/sparc/openbsd64.h (NO_IMPLICIT_EXTERN_C): Undefine.
! 	* config/sparc/sp64-elf.h (NO_IMPLICIT_EXTERN_C): New macro.
! 	(SWITCH_TAKES_ARG): Likewise.
! 	(LOCAL_LABEL_PREFIX): Likewise.
! 	(ASM_GENERATE_INTERNAL_LABEL): Likewise.
! 	(TARGET_N_FORMAT_TYPES): Delete.
! 	(TARGET_FORMAT_TYPES): Likewise.
! 	(ASM_DECLARE_FUNCTION_SIZE): Likewise.
! 	* config/sparc/elf.h: Delete.
! 	* config/sparc/sp-elf.h: New file.
  
! 2005-01-24  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* tree-flow-inline.h (phi_arg_from_edge): Remove.
! 	* tree-flow.h: Remove the corresponding prototype.
! 	* tree-ssa-operands.h, tree-ssa-threadupdate.c, tree-ssa.c,
! 	tree-vectorizer.c: Use dest_idx instead of phi_arg_from_edge.
  
! 2005-01-24  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/17751
! 	* config/rs6000/rs6000.c (rs6000_file_start): Create toc section
! 	for AIX ABI or ELF -fPIC.
! 	(rs6000_emit_load_toc_table): Don't create toc_section here.
! 	(rs6000_xcoff_file_start): Nor here.
  
! 2005-01-24  J"orn Rennecke <joern.rennecke@st.com>
  
! 	* sh.c (ra.h): Don't #include.
! 	(hard_regs_intersect_p): New function, resurrected from ra.c.
  
! 	* sh.c: Fix 1996 Copyright.
  
! 2005-01-24  Richard Henderson  <rth@redhat.com>
! 	    Aldy Hernandez  <aldyh@redhat.com>
  
! 	* regrename.c (note_sets): Handle subregs.
  
! 2005-01-24  Joseph S. Myers  <joseph@codesourcery.com>
  
! 	PR bootstrap/18058
! 	* genconditions.c (write_header, write_conditions): Elide file if
! 	not GCC >= 3.0.1.
  
! 2005-01-24  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* c-opts.c, expmed.c, gengtype.c, tree-complex.c,
! 	config/arm/iwmmxt.md, config/avr/avr.c, config/s390/s390.h:
! 	Update copyright.
  
! 2005-01-24  Jakub Jelinek  <jakub@redhat.com>
  
! 	* builtins.c (get_pointer_alignment, gimplify_va_arg_expr,
! 	expand_builtin_printf, expand_builtin_fprintf,
! 	expand_builtin_sprintf): Use POINTER_TYPE_P instead TREE_CODE
! 	checking against POINTER_TYPE.
! 	(validate_arglist): Handle POINTER_TYPE code by checking
! 	POINTER_TYPE_P.
  
! 2005-01-24  Paolo Bonzini  <bonzini@gnu.org>
  
! 	* rtlanal.c (non_rtx_starting_operands, for_each_rtx_1,
! 	init_rtlanal): New.
! 	(for_each_rtx): Call for_each_rtx_1.
! 	* rtl.h (init_rtlanal): Declare.
! 	* toplev.c (backend_init): Call init_rtlanal.
  
! 2005-01-24  Jakub Jelinek  <jakub@redhat.com>
  
! 	* flow.c (propagate_one_insn): Formatting.
  
! 	PR middle-end/19551
! 	* flow.c (libcall_dead_p): Be more conservative if unsure.
! 	If there are any instructions between insn and call, see if they are
! 	all dead before saying the libcall is dead.
  
! 2005-01-24  Uros Bizjak  <uros@kss-loka.si>
  
! 	* config/i386/i386.md (*extendsfdf2_sse): Use "nonimmediate_operand"
! 	operand constraint for operand 0.
  
! 2005-01-23  Richard Henderson  <rth@redhat.com>
  
! 	PR 19486
! 	* tree-complex.c (expand_complex_div_wide): Set EDGE_FALLTHRU on
! 	edges leading to join block.
  
! 2005-01-23  Roger Sayle  <roger@eyesopen.com>
  
! 	* expmed.c (expand_mult_highpart): Make static.  Change type of
! 	constant multiplier argument from unsigned HOST_WIDE_INT to rtx.
! 	(expand_divmod): Updates calls to expand_mult_highpart by using
! 	gen_int_mode to pass a CONST_INT rtx.
! 	* rtl.h (expand_mult_highpart): Remove prototype.
  
! 2005-01-23  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* flow.c (regset_bytes, regset_size): Remove.
  
! 	* cfganal.c: Fix a reference to Harvey's paper.
  
! 2005-01-23  Steven Bosscher  <stevenb@suse.de>
  
! 	PR rtl-optimization/19464
! 	* tree-optimize.c (init_tree_optimization_passes): Add one more
! 	copyrename pass just before out-of-ssa.
  
! 2005-01-23  Joseph S. Myers  <joseph@codesourcery.com>
  
! 	PR bootstrap/18058
! 	* recog.c (recog_memoized): Don't define if GENERATOR_FILE.
! 	* ggc-none.c (ggc_free): Define.
  
! 2005-01-23  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* cse.c (max_reg, max_insn_uid): Remove.
! 	(cse_main): Don't access max_reg or max_insn_uid.
  
! 	* c-common.c (explicit_flag_signed_bitfields,
! 	lang_statement_code_p, lang_expand_function_end): Remove.
! 	* c-common.h: Remove the corresponding declarations.
! 	* c-opts.c (c_common_handle_option): Remove all write access
! 	to explicit_flag_signed_bitfields.
  
! 	* cgraph.c (cgraph_varpool_n_nodes): Remove.
! 	(cgraph_varpool_node): Don't access cgraph_varpool_n_nodes.
! 	* cgraph.h: Remove the corresponding declaration.
  
! 	* gcse.c (null_pointer_info): Remove.
  
! 2005-01-23  Roger Sayle  <roger@eyesopen.com>
! 	    Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	* combine.c (simplify_logical): Only simplify logical expressions
! 	of the form ior(and(x,y),z) by the inverse distributive law if the
! 	result is cheaper than the original.
  
! 2005-01-23  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* alias.c, c-common.h, c-incpath.c, c-incpath.h, expr.c,
! 	fold-const.c, gimplify.c, params.h, tree-data-ref.c,
! 	tree-if-conv.c, tree-nested.c, tree-outof-ssa.c,
! 	tree-ssa-dom.c, tree-vectorizer.c, tree.def, config/darwin.c,
! 	config/freebsd-spec.h, config/arm/arm.h,
! 	config/h8300/h8300.md, config/i386/i386.md,
! 	config/i386/predicates.md, config/i386/sse.md,
! 	config/ia64/ia64.c, config/ip2k/ip2k.c, config/s390/s390.c,
! 	config/vax/vax.md: Fix comment typos.  Follow spelling
! 	conventions.
  
! 2005-01-23  Steven Bosscher  <stevenb@suse.de>
  
! 	* gengtype.c (walk_type): Produce `not equal to' compares for loop
! 	tests, instead of `less than'.
  
! 2005-01-23  Richard Sandiford  <rsandifo@redhat.com>
  
! 	* function.c (assign_parm_setup_block): When creating a new stack slot
! 	for a parameter, get its alignment from the parameter's DECL_ALIGN
! 	rather than the type's TYPE_ALIGN.  Make sure that the parameter
! 	is at least word aligned.
  
! 2005-01-22  Roger Sayle  <roger@eyesopen.com>
  
! 	PR middle-end/19378
! 	* config/avr/avr.c (avr_hard_regno_mode_ok): Rewrite.
  
! 2005-01-22  Richard Henderson  <rth@redhat.com>
  
! 	PR target/19506
! 	* config/i386/i386.md (movsfcc_1_sse_max): Use nonimmediate_operand
! 	in both compare operands.
! 	(movdfcc_1_sse_max): Likewise.
! 	(movsfcc_1_sse): Likewise.  Add earlyclobber for scratch.
! 	(movdfcc_1_sse): Likewise.
! 	* config/i386/i386.c (ix86_split_sse_movcc): Emit copies into the
! 	scratch register as needed.
  
! 2005-01-22  Richard Henderson  <rth@redhat.com>
  
! 	* config/i386/i386.md (smaxsf3): Fix mnemonic typo.
  
! 	* config/i386/i386.c (ix86_prepare_fp_compare_args): Fix is_sse test.
  
! 2005-01-22  Richard Henderson  <rth@redhat.com>
  
! 	* genopinit.c (optabs): Use smin/smax for floating point too.
! 	* doc/md.texi: Update to match.  Clarify that floating point
! 	results are undefined for +0/-0 and NaN.
! 	* doc/rtl.texi: Likewise.
! 	* rtl.def (SMIN, SMAX): Likewise
! 	* tree.def (MIN_EXPR, MAX_EXPR): Likewise.
  
! 	* config/alpha/alpha.md (smaxdf3, smindf3, smaxsf3, sminsf3): Add
! 	leading 's' to the name.
! 	* config/ia64/ia64.md (smaxsf3, sminsf3, smaxdf3, smindf3,
! 	smaxxf3, sminxf3): Likewise.
! 	* config/rs6000/rs6000.md (smaxdf3, smindf3, smaxsf3, sminsf3):
! 	Likewise.
  
! 2005-01-22  Paul Brook  <paul@codesourcery.com>
  
! 	* config/arm/arm.md: Use "Uy" constraint for wcgr load/stores.
  
! 2005-01-21  Mark Dettinger  <dettinge@de.ibm.com>
  
! 	* config/s390/s390.c (struct processor_costs): New fields
! 	dlgr, dlr, dr, dsgfr, dsgr.
! 	(z900_cost, z990_cost): Values for new fields.
! 	(s390_rtx_costs): New cases MEM und COMPARE in switch
! 	statement. Modified handling of SIGN_EXTEND, ZERO_EXTEND,
! 	DIV, MOD, UDIV, UMOD.
  
! 2005-01-21  Ulrich Weigand  <uweigand@de.ibm.com>
  
! 	* config/s390/s390.md ("doloop_si64"): Reload input value directly
! 	into the register being decremented.
! 	("doloop_si31", "doloop_di"): Likewise.
! 	("*doloop_si_long"): Adapt pattern.
  
! 2005-01-21  Ulrich Weigand  <uweigand@de.ibm.com>
  
! 	* config/s390/s390.h (HARD_REGNO_NREGS): Fix computation for
! 	access registers.
! 	(CLASS_MAX_NREGS): Likewise.
  
! 2005-01-21  Daniel Berlin  <dberlin@dberlin.org>
  
! 	* doc/tree-ssa.texi (Statement Operands): Add example for new
! 	must-def macro. Note deprecation of old operands interface.
  
! 2005-01-22  Richard Sandiford  <rsandifo@redhat.com>
  
! 	PR tree-optimization/19484
! 	* tree-cfg.c (remove_fallthru_edge): New function.
! 	(cleanup_control_flow): Remove fallthru edges from calls that are
! 	now known not to return.
  
! 2005-01-20  Daniel Berlin  <dberlin@dberlin.org>
  
! 	Fix PR tree-optimization/19038
! 	* tree-ssa-dom.c (cprop_operand): Don't replace loop invaeriant
! 	copies with loop variant ones.
  
! 2005-01-22  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* cfganal.c, real.h, reorg.c, timevar.def, tree-ssa-ccp.c,
! 	config/alpha/alpha-protos.h, config/alpha/alpha.h,
! 	config/alpha/alpha.md, config/alpha/predicates.md,
! 	config/sparc/freebsd.h, config/sparc/netbsd-elf.h,
! 	config/sparc/sol2.h: Update copyright.
  
! 	* tree-cfg.c (remove_forwarder_block_with_phi): Look at the
! 	first label to see if it is a nonlocal label.
  
! 2005-01-22  David Edelsohn  <edelsohn@gnu.org>
! 	    Andrew Pinski  <pinskia@physics.uc.edu>
  
! 	PR target/19491
! 	* config/rs6000/rs6000.c (rs6000_va_start): Saturate n_gpr at
! 	maximum number of GPRs.  Saturate n_fpr at maximum number of FPRs.
  
! 2005-01-22  Ralf Corsepius  <ralf.corsepius@rtems.org>
  
! 	* config/rs6000/rtems.h: Update copyright.
  
! 2005-01-22  Ralf Corsepius  <ralf.corsepius@rtems.org>
  
! 	PR target/19548
! 	* config/rs6000/rtems.h: Resurrect cpp_os_rtems_spec from gcc < 3.4.
! 	(CPP_OS_RTEMS_SPEC): New (From gcc-3.3's config/rs6000/sys4.h).
! 	(SUBSUBTARGET_EXTRA_SPECS): Use CPP_OS_RTEMS_SPEC.
  
! 2005-01-22  Volker Reichelt  <reichelt@igpm.rwth-aachen.de>
  
! 	PR c/18809
! 	* c-typeck.c (convert_arguments): Check for error_mark_node.
  
! 2005-01-21  Ian Lance Taylor  <ian@airs.com>
  
! 	PR tree-optimization/13000
! 	* tree-inline.c: Include "tree-flow.h".
! 	(expand_call_inline): If warn_return_type, warn if non-void inline
! 	function falls through.
! 	* tree-cfg.c (execute_warn_function_return): Don't warn about
! 	control reaching end if TREE_NO_WARNING is set.  Set
! 	TREE_NO_WARNING.
! 	* gimple-low.c (block_may_fallthru): Don't assume that SWITCH_EXPR
! 	has been lowered.
! 	* gimplify.c (shortcut_cond_expr): Don't emit a jump over the else
! 	branch if we don't need one.
! 	* c-typeck.c: Include "tree-flow.h"
! 	(c_finish_bc_stmt): Don't add a goto if the current statement
! 	list doesn't fall through to the current point.
  
! 2005-01-21  Roger Sayle  <roger@eyesopen.com>
  
! 	PR rtl-optimization/576
! 	* real.c (real_arithmetic): Change return type from void to bool
! 	to return an indication that the result may be inexact.
! 	* real.h (real_arithmeric): Update prototype.
! 	* fold-const.c (const_binop):  Don't constant fold floating
! 	point expressions when the user specifies -frounding-math and
! 	the result may depend upon the run-time rounding mode.
! 	(fold_convert_const_real_from_real): Clean-up.
! 	(fold_initializer): Ignore flag_rounding_math for initializers.
! 	* simplify-rtx.c (simplify_binary_operation): Likewise, don't
! 	constant fold FP operations with flag_rounding_math if the
! 	result may depend upon the run-time rounding mode.
  
! 2005-01-21  Tom Tromey  <tromey@redhat.com>
  
! 	* c-cppbuiltin.c (define__GNUC__): Correct assertion.
  
! 2005-01-21  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* tree-cfg.c: Fix comment typos.
  
! 2005-01-21  J"orn Rennecke <joern.rennecke@st.com>
  
! 	* passes.c (rest_of_handle_flow2): Close / open the flow2 dump file
! 	around the call to rest_of_handle_branch_target_load_optimize.
  
! 2005-01-21  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	* config.gcc (sparc-*-netbsdelf*): Include dbxelf.h
! 	(sparc64-*-openbsd*): Likewise.
! 	(sparclite-*-elf*): Include tm-dwarf2.h.
! 	(sparc86x-*-elf*): Likewise.
! 	(sparc64-*-elf*): Likewise.
! 	* config/sparc/linux64.h (DWARF2_DEBUGGING_INFO): Delete.
! 	(DBX_DEBUGGING_INFO): Likewise.
! 	* config/sparc/liteelf.h (DWARF2_DEBUGGING_INFO): Likewise.
! 	(PREFERRED_DEBUGGING_TYPE): Likewise.
! 	* config/sparc/netbsd-elf.h (PREFERRED_DEBUGGING_TYPE): Likewise.
! 	* config/sparc/sp64-elf.h (DBX_DEBUGGING_INFO): Likewise.
! 	(PREFERRED_DEBUGGING_TYPE): Likewise.
! 	* config/sparc/sp86x-elf.h (DWARF2_DEBUGGING_INFO): Likewise.
! 	(PREFERRED_DEBUGGING_TYPE): Likewise.
! 	* config/sparc/sparc.h (DBX_DEBUGGING_INFO): Likewise.
  
! 2005-01-21  Hans-Peter Nilsson  <hp@bitrange.com>
  
! 	PR target/18701
! 	* combine.c (combine_simplify_rtx): Revert change of 2004-12-31.
  
! 2005-01-20  Paul Brook  <paul@codesourcery.com>
  
! 	* doc/rtl.texi: Document value extension requirements for CONST_INT.
  
! 2005-01-20  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* tree-cfg.c (tree_verify_flow_info): Check that a nonlocal
! 	label is first in a sequence of labels.
  
! 	* tree-cfg.c (tree_verify_flow_info): Fix a typo.
  
! 2005-01-20  Janis Johnson  <janis187@us.ibm.com>
! 	    Giovanni Bajo  <giovannibajo@gcc.gnu.org>
  
! 	* doc/sourcebuild.texi (Test Directives): New.
  
! 2005-01-20  Roger Sayle  <roger@eyesopen.com>
  
! 	* real.c (real_floor): Don't leave the result uninitialized when
! 	mode is VOIDMode, but return the unrounded intermediate value.
! 	(real_ceil): Likewise.
  
! 2005-01-20  Paul Brook  <paul@codesourcery.com>
  
! 	* config/arm/arm.md (insv): Use gen_int_mode.
  
! 2005-01-20  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	* config/sparc/freebsd.h (ASM_OUTPUT_INTERNAL_LABELREF): Delete.
! 	* config/sparc/linux.h (ASM_OUTPUT_INTERNAL_LABELREF): Likewise.
! 	* config/sparc/linux64.h (ASM_OUTPUT_INTERNAL_LABELREF): Likewise.
! 	* config/sparc/netbsd-elf.h (ASM_OUTPUT_INTERNAL_LABELREF): Likewise.
! 	* config/sparc/sol2.h (ASM_OUTPUT_INTERNAL_LABELREF): Likewise.
  
! 2005-01-20  Daniel Berlin  <dberlin@dberlin.org>
  
! 	Fix PR debug/19124
! 	* dwarf2out.c (concat_loc_descriptor): We don't know we can use
! 	fbreg, so we have to assume we can't.
! 	(loc_descriptor_from_tree_1): Ditto.
! 	(containing_function_has_frame_base): New function.
! 	(add_location_or_const_value_attribute): Use it.
! 	Also try to generate a frame_base from a single element location
  	list.
  
! 2005-01-20  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	PR tree-optimization/15349
! 	* timevar.def (TV_TREE_MERGE_PHI): New.
! 	* tree-cfg.c (tree_forwarder_block_p): Add a new argument
! 	PHI_WANTED.
! 	(remove_forwarder_block, cleanup_forwarder_blocks): Adjust the
! 	calls to tree_forwarder_block_p.
! 	(remove_forwarder_block_with_phi, merge_phi_nodes,
! 	gate_merge_phi, pass_merge_phi): New.
! 	* tree-optimize.c (init_tree_optimization_passes): Add
! 	pass_merge_phi.
! 	* tree-pass.h: Add an extern for pass_merge_phi;
  
! 2005-01-20  Richard Henderson  <rth@redhat.com>
  
! 	PR target/19418
! 	* config/i386/emmintrin.h (_mm_castpd_ps, _mm_castpd_si128): New.
! 	(_mm_castps_pd, _mm_castps_si128): New.
! 	(_mm_castsi128_ps, _mm_castsi128_pd): New.
  
! 2005-01-20  Richard Henderson  <rth@redhat.com>
  
! 	PR target/19530
! 	* config/i386/mmintrin.h (_mm_cvtsi32_si64): Use
! 	__builtin_ia32_vec_init_v2si.
! 	(_mm_cvtsi64_si32): Use __builtin_ia32_vec_ext_v2si.
! 	* config/i386/i386.c (IX86_BUILTIN_VEC_EXT_V2SI): New.
! 	(ix86_init_mmx_sse_builtins): Create it.
! 	(ix86_expand_builtin): Expand it.
! 	(ix86_expand_vector_set): Handle V2SFmode and V2SImode.
! 	* config/i386/mmx.md (vec_extractv2sf_0, vec_extractv2sf_1): New.
! 	(vec_extractv2si_0, vec_extractv2si_1): New.
  
! 2005-01-20  Richard Henderson  <rth@redhat.com>
  
! 	PR target/16533
! 	* config/i386/i386.c (ix86_expand_push): New.
! 	* config/i386/mmx.md (push<MMXMODE>1): New.
! 	* config/i386/sse.md (push<SSEMODE>1): New.
! 	* config/i386/i386-protos.h: Update.
  
! 2005-01-20  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* params.def, params.h, predict.c, tree-ssa-loop-im.c: Update
! 	copyright.
  
! 2005-01-20  Richard Henderson  <rth@redhat.com>
  
! 	* rtl.def (CONST_VECTOR): Use RTX_CONST_OBJ.
! 	* rtl.h (CONSTANT_P): Don't special case CONST_VECTOR.
  
! 2005-01-19  Richard Henderson  <rth@redhat.com>
  
! 	PR target/19350
! 	* config/i386/i386.c (ix86_expand_vector_move_misalign): Convert
! 	to V4SFmode in SSE1 fallback load path.
  
! 2005-01-19  Richard Henderson  <rth@redhat.com>
  
! 	* config/i386/i386.c (ix86_expand_vector_init_one_var): Fix typo
! 	in QImode expansion to ix86_expand_vector_set.
! 	(ix86_expand_vector_init_general): Fix typo in V8HImode recursive call.
  
! 2005-01-19  Richard Henderson  <rth@redhat.com>
  
! 	PR target/19511
! 	* config/i386/i386.c (ix86_preferred_reload_class): Return a proper
! 	subclass of the input class.
! 	(ix86_secondary_memory_needed): Always true for cross-MMX classes.
! 	Always true for cross-SSE1 classes.  Rationalize conditionals.
! 	* config/i386/i386.h (SSE_CLASS_P, MMX_CLASS_P): Use straight equality.
! 	* config/i386/i386.md (movsi_1): Add MMX/SSE zeros.  Fix alternatives
! 	for SSE1.  Don't check TARGET_INTER_UNIT_MOVES.
! 	(movdi_2): Add MMX/SSE zeros.
! 	(movdi_1_rex64): Likewise.  Don't check TARGET_INTER_UNIT_MOVES.
! 	(movsf_1): Don't check TARGET_INTER_UNIT_MOVES.
! 	(zero_extendsidi2_32, zero_extendsidi2_rex64): Likewise.
! 	(movsi_1_nointernunit, movdi_1_rex64_nointerunit): Remove.
! 	(movsf_1_nointerunit, zero_extendsidi2_32_1): Remove.
! 	(zero_extendsidi2_rex64_1): Remove.
! 	(MOV0 peephole): Check GENERAL_REG_P.
  
! 2005-01-19  Richard Henderson  <rth@redhat.com>
  
! 	PR target/19427
! 	* config/i386/i386.c (ix86_expand_vector_set): Fix third and fourth
! 	shufps elements.
! 	(ix86_expand_vector_extract): Likewise.
  
! 2005-01-19  Richard Henderson  <rth@redhat.com>
  
! 	PR middle-end/19304
! 	* expr.c (emit_move_change_mode): New argument force; use
! 	simplify_gen_subreg if true.
! 	(emit_move_via_alt_mode): Merge into ...
! 	(emit_move_via_integer): ... here.
! 	(emit_move_ccmode): Use emit_move_change_mode directly.
  
! 2005-01-19  Richard Henderson  <rth@redhat.com>
  
! 	PR target/19518
! 	* config/alpha/alpha.c (alpha_rtx_costs): Handle HIGH.
! 	(alpha_preferred_reload_class): Handle CONST_VECTOR.
! 	(alpha_emit_set_const_1): Add no_output parameter; don't emit
! 	rtl if true.
! 	(alpha_emit_set_const): Likewise.  Make static.
! 	(alpha_emit_set_long_const): Make static.
! 	(alpha_extract_integer): Split out from alpha_expand_mov.
! 	(alpha_split_const_mov): Likewise.
! 	(alpha_expand_mov): Use them.  Handle CONST_VECTOR.
! 	(alpha_legitimate_constant_p): New.
! 	* config/alpha/alpha-protos.h: Update.
! 	* config/alpha/alpha.h (REGISTER_MOVE_COST): Correct fp<->gp cost.
! 	(LEGITIMATE_CONSTANT_P): Re-implement with a function.
! 	* config/alpha/alpha.md (movsi): Add n alternative.
! 	(movsi_nt_vms, movdi_er_nofix, movdi_er_fix, movdi_fix): Likewise.
! 	(mov<VEC>_fix, mov<VEC>_nofix): Add i alternative.
! 	(splitters for all of the above): Use alpha_split_const_mov.
! 	* config/alpha/predicates.md (non_add_const_operand): New.
! 	(non_zero_const_operand): New.
! 	(input_operand): Use alpha_legitimate_constant_p after reload.
  
! 2005-01-19  Zdenek Dvorak  <dvorakz@suse.cz>
  
! 	PR tree-optimization/19038
! 	* tree-ssa-loop-ivopts.c (allow_ip_end_pos_p): New function.
! 	(add_candidate): Add ivs with increment in latch only if
! 	allow_ip_end_pos_p is true.
! 	(determine_iv_cost): Use empty_block_p.
  
! 2005-01-19  Daniel Berlin  <dberlin@dberlin.org>
  
! 	* cfganal.c (compute_dominance_frontiers_1): Replace with new algorithm
! 	(compute_dominance_frontiers): Ditto.
  
! 2005-01-19  Ralf Corsepius  <ralf.corsepius@rtems.org>
  
! 	PR target/19529
! 	* config/sh/t-rtems: New.
! 	* config.gcc (sh-*-rtems*): Reflect having added config/sh/t-rtems.
  
! 2005-01-19  Zdenek Dvorak  <dvorakz@suse.cz>
  
! 	* tree-ssa-ccp.c (maybe_fold_offset_to_component_ref): Always subtract
! 	the offset of the selected field.
  
! 2005-01-19  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* tree-cfg.c (remove_forwarder_block): Fix the check to
! 	prevent a nonlocal label from appearing in the middle of a
! 	basic block.
  
! 2005-01-19  Hans-Peter Nilsson  <hp@axis.com>
  
! 	PR rtl-optimization/19462
! 	* reorg.c (find_end_label): Create return insn only if
! 	current_function_epilogue_delay_list is empty.
  
! 2005-01-19  Paolo Bonzini  <bonzini@gnu.org>
  
! 	* doc/passes.texi: Remove paragraph mentioning new-ra.
  
! 2005-01-19  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR rtl-optimization/15139
! 	* combine.c: Include params.h.
! 	(count_rtxs): New function.
! 	(record_value_for_reg): If replace_rtx would replace at least
! 	2 occurrences of REG in VALUE and TEM is really large, replace REG with
! 	(clobber (const_int 0)) instead of TEM.
! 	* params.def (PARAM_MAX_LAST_VALUE_RTL): New.
! 	* params.h (MAX_LAST_VALUE_RTL): New.
! 	* Makefile.in (combine.o): Depend on $(PARAMS_H).
! 	* doc/invoke.texi (--param max-last-value-rtl=N): Document.
  
! 	PR c/17297
! 	* c-typeck.c (digest_init): Only call build_vector if all constructor
! 	elements are *_CST nodes.
! 	* gimplify.c (gimplify_init_constructor): Likewise.
  
! 	PR middle-end/19164
! 	* c-typeck.c (digest_init): Only call build_vector if inside_init
! 	is a CONSTRUCTOR.
  
! 2005-01-18  Tobias Schl"uter  <tobias.schlueter@physik.uni-muenchen.de>
  
! 	* toplev.c (init_asm_output): Remove dead #ifdef.
  
! 2005-01-18  Kaz Kojima  <kkojima@gcc.gnu.org>
  
! 	* config/sh/linux.h (TARGET_C99_FUNCTIONS): Define.
  
! 2005-01-18  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	* calls.c (expand_call): Check DECL_BUILT_IN_CLASS before
! 	accessing DECL_FUNCTION_CODE.
! 	* dojump.c (do_jump): Likewise.
! 	* gimplify.c (gimplify_call_expr): Likewise.
! 	* predict.c (expr_expected_value): Likewise.
! 	(strip_builtin_expect): Likewise.
! 	* tree-inline.c (estimate_num_insns_1): Likewise.
! 	* tree-ssa-loop-im.c (stmt_cost): Likewise
! 	* fold-const.c (fold): Test for BUILT_IN_NORMAL.
! 	(tree_expr_nonnegative_p): Likewise.
  
! 2005-01-18  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	* config/sparc/sparc.c (load_pic_register): Emit the appropriate
! 	variant of the load_pcrel_sym pattern.
! 	* config/sparc/sparc.md (P macro): Move to the top.
! 	(load_pcrel_sym): Macroize using P.
! 	(save_register_window): Likewise.
  
! 2005-01-18  Aldy Hernandez  <aldyh@redhat.com>
  
! 	* config/rs6000/rs6000.md ("sunordered"): Disable for e500.
! 	("sordered"): Same.
  
! 2005-01-18  Andrew Pinski  <pinskia@physics.uc.edu>
  
! 	PR C/19472
! 	* c-typeck.c (build_asm_expr): Strip nops off
! 	input memory operands.
  
! 2005-01-18  David Edelsohn  <edelsohn@gnu.org>
  
! 	* config/rs6000/aix43.h (CPLUSPLUS_CPP_SPEC): Delete
! 	_XOPEN_SOURCE, _XOPEN_SOURCE_EXTENDED, _LARGE_FILE_API.
! 	* config/rs6000/aix51.h (CPLUSPLUS_CPP_SPEC): Same.
! 	* config/rs6000/aix52.h (CPLUSPLUS_CPP_SPEC): Same.
  
! 2005-01-18  Joel Sherrill <joel.sherrill@oarcorp.com>
  
! 	PR target/19379
! 	* config/i386/i386.c (override_options): If the 80387 is disabled,
! 	then do not return FP values using FP registers.
  
! 2005-01-18  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* basic-block.h, c-common.c, c-cppbuiltin.c, c-lang.c,
! 	c-tree.h, cfgbuild.c, cgraph.c, cgraph.h, collect2.c,
! 	combine.c, config.gcc, coverage.h, cse.c, cselib.c,
! 	defaults.h, df.c, dwarf2asm.c, dwarf2out.c, explow.c, expr.c,
! 	flow.c, fold-const.c, gcse.c, ggc-page.c, gimple-low.c,
! 	gimplify.c, ifcvt.c, langhooks-def.h, lcm.c, optabs.h,
! 	output.h, postreload-gcse.c, postreload.c, recog.c,
! 	resource.c, rtl.def, rtlanal.c, sched-deps.c, sched-rgn.c,
! 	targhooks.h, toplev.c, tree-data-ref.c, tree-eh.c,
! 	tree-flow.h, tree-loop-linear.c, tree-mudflap.h, tree-nrv.c,
! 	tree-optimize.c, tree-outof-ssa.c, tree-pass.h,
! 	tree-scalar-evolution.c, tree-ssa-copy.c, tree-ssa-dce.c,
! 	tree-ssa-dse.c, tree-ssa-loop-ivopts.c, tree-ssa-operands.c,
! 	tree-ssa-pre.c, tree-ssa.c, tree-vectorizer.c, tree.def,
! 	unwind-dw2-fde-darwin.c, var-tracking.c: Update copyright.
  
! 	* config/darwin.c, config/darwin.h, config/freebsd-spec.h,
! 	config/alpha/alpha.c, config/arm/vfp.md,
! 	config/i386/emmintrin.h, config/i386/i386-modes.def,
! 	config/i386/i386-protos.h, config/i386/i386.h,
! 	config/i386/pmmintrin.h, config/i386/ppro.md,
! 	config/i386/predicates.md, config/i386/xmmintrin.h,
! 	config/i860/i860.c, config/ia64/ia64-modes.def,
! 	config/ia64/ia64-protos.h, config/ia64/ia64.h,
! 	config/ia64/ia64.md, config/ia64/itanium1.md,
! 	config/ia64/itanium2.md, config/ia64/predicates.md,
! 	config/iq2000/iq2000.h, config/mips/linux64.h,
! 	config/rs6000/aix41.h, config/rs6000/aix43.h,
! 	config/rs6000/aix52.h, config/rs6000/darwin-fallback.c,
! 	config/rs6000/rs6000.c, config/rs6000/rs6000.h,
! 	config/rs6000/spe.md, config/sh/sh.md, config/sparc/linux.h,
! 	config/sparc/linux64.h, config/sparc/litecoff.h,
! 	config/sparc/sp64-elf.h, config/sparc/sparc.c,
! 	config/sparc/sparc.h, config/sparc/sparc.md,
! 	config/sparc/sysv4-only.h: Update copyright.
  
! 2005-01-18  Richard Henderson  <rth@redhat.com>
  
! 	PR target/19496
! 	* config/i386/i386.c (ix86_expand_fp_movcc): Fail for LTGT and UNEQ.
  
! 2005-01-18  Marc Espie  <espie@openbsd.org>
! 	* config/i386/openbsdelf.h: Typo.
  
! 2005-01-18  Richard Henderson  <rth@redhat.com>
  
! 	* config/i386/i386.c (ix86_expand_fp_movcc): Remove TARGET_IEEE_FP
! 	special case for sse.
! 	* config/i386/predicates.md (sse_comparison_operator): Likewise.
  
! 2005-01-18  Dorit Naishlos  <dorit@il.ibm.com>
  
! 	* tree-inline.c (estimate_num_insns_1): Added cases for
! 	ALIGN_INDIRECT_REF, MISALIGNED_INDIRECT_REF, and REALIGN_LOAD_EXPR.
  
! 2005-01-18  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	PR rtl-optimization/19296
! 	* combine.c (simplify_comparison): Rewrite the condition under
! 	which a non-paradoxical SUBREG of a PLUS can be lifted when
! 	compared against a constant.
  
! 2005-01-18  Andi Kleen <ak@muc.de>
  
! 	* c-typeck.c: (convert_for_assignment): Check warn_pointer_sign.
! 	* c.opt (-Wpointer-sign): Add.
! 	* doc/invoke.texi: (-Wpointer-sign): Add.
  
! 2005-01-18  Uros Bizjak  <uros@kss-loka.si>
  
! 	* config/i386/i386.c (override_options): Revert 2004-11-24 change.
! 	* config/i386/i386.md (fmodsf3, dremsf3, *sinsf2, *cossf2, sincossf3,
! 	*tansf3_1, tansf2, atan2sf3_1, atan2sf3, atansf2, asinsf2, acossf2,
! 	logsf2, log10sf2, log2sf2, log1psf2, logbsf2, ilogbsf2, expsf2,
! 	exp10sf2, exp2sf2, expm1sf2, rintsf2, floorsf2, ceilsf2, btruncsf2,
! 	nearbyintsf2): Disable for TARGET_SSE_MATH.  Leave patterns enabled
! 	for TARGET_MIX_SSE_I387.
! 	(fmoddf3, dremdf3, *sindf2, *sinextendsfdf2, *cosdf2, *cosextendsfdf2,
! 	sincosdf3, *sincosextendsfdf3, *tandf3_1, tandf2, atan2df3_1,
! 	atan2df3, atandf2, asindf2, acosdf2, logdf2, log10df2, log2df2,
! 	log1pdf2, logbdf2, expdf2, exp10df2, exp2df2, expm1df2, rintdf2,
! 	floordf2, ceildf2, btruncdf2, nearbyintdf2): Disable for
! 	(TARGET_SSE2 && TARGET_SSE_MATH).  Leave patterns enabled for
! 	TARGET_MIX_SSE_I387.
! 	(atan2sf3, atan2df3, atan2xf3): Remove register constraints
! 	from expander.
  
! 2005-01-18  Uros Bizjak  <uros@kss-loka.si>
  
! 	PR target/19424
! 	* config/i386/mmx.md (*movv2sf_internal_rex64, *movv2sf_internal):
! 	Add movaps alternative for xmm reg->reg move.
  
! 2005-01-17  Jeff Law  <law@redhat.com>
  
! 	* tree-ssa-dom.c (tree_ssa_dominator_optimize): Clear SSA_NAME_VALUE
! 	at the end of the main DOM loop rather than just before DOM exits.
  
! 2005-01-17  Diego Novillo  <dnovillo@redhat.com>
  
! 	PR tree-optimization/19121
! 	* tree-ssa-alias.c (compute_flow_sensitive_aliasing): When
! 	adding aliases to a name tag, also add them to the pointer's
! 	type tag.
! 	* tree-ssa-copy.c (merge_alias_info): Do not merge flow
! 	sensitive alias info at all.  Only check that the two pointers
! 	have compatible pointed-to sets.
! 	* tree-ssa.c (verify_name_tags): Verify that the alias set of
! 	a pointer's type tag is a superset of the alias set of the
! 	pointer's name tag.
  
! 2005-01-17  James E Wilson  <wilson@specifixinc.com>
  
! 	PR target/19357
! 	* config/ia64/ia64.md (movxf): Handle general register source.  Adjust
! 	comment to document why.
  
! 2005-01-17  Richard Henderson  <rth@redhat.com>
  
! 	* config/i386/sse.md (smaxv4sf3_finite, sse_vmsmaxv4sf3_finite,
! 	sminv4sf3_finite, sse_vmsminv4sf3_finite, smaxv2df3_finite,
! 	sse2_vmsmaxv2df3_finite, sminv2df3_finite,
! 	sse2_vmsminv2df3_finite): New.
! 	(smaxv4sf3, sse_vmsmaxv4sf3, sminv4sf3, sse_vmsminv4sf3, smaxv2df3,
! 	sse2_vmsmaxv2df3, sminv2df3, sse2_vmsminv2df3): Remove commutative.
! 	Force op1 into register.
  
! 2005-01-17  Kelley Cook  <kcook@gcc.gnu.org>
  
! 	* Makefile.in (STAGEMOVESTUFF): Stage all the stamp files to prevent
! 	bubblestrap from always rebuilding build directory.
  
! 2005-01-17  Ulrich Weigand  <uweigand@de.ibm.com>
  
! 	* config/s390/s390.md ("*clc"): Remove incorrect '='.
! 	("*cmpmem_short"): Likewise.
  
! 2005-01-17  Steven Bosscher  <stevenb@suse.de>
  
! 	* basic-block.h: Document BB_* flags.
! 	* regrename.c (copyprop_hardreg_forward): Don't use BB_VISITED,
! 	use an sbitmap instead.
! 	* sched-rgn.c (compute_trg_info): Likewise.
  
! 2005-01-17  Richard Sandiford  <rsandifo@redhat.com>
  
! 	* config.gcc (mips64*-*-linux*): Set the default abi to n32.  Remove
! 	redundant target_cpu_default and extra_parts lines.  Use the default
! 	"from-abi" ISA.
! 	* config/mips/linux64.h (DRIVER_DEFAULT_ABI_SELF_SPEC): Delete.
! 	(SUBTARGET_EXTRA_SPECS): Delete.
! 	(DRIVER_SELF_SPECS): Remove architecture lines.  Set the ABI directly.
! 	(SUBTARGET_ASM_SPEC): Remove -mabi=n32 and -mabi=64 mappings.
! 	* config/mips/t-linux64 (MULTILIB_DIRNAMES): Use "32" for -mabi=32
! 	and "n32" for -mabi=n32.
  
! 2005-01-17  Ian Lance Taylor  <ian@airs.com>
  
! 	PR c/5675
! 	* c-typeck.c (build_c_cast): Revert patch of 2003-02-16: don't
! 	fold constant variables into initial values.
  
! 2005-01-17  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* tree-cfg.c (tree_can_merge_blocks_p): Reorder two checks.
  
! 	* tree-cfg.c (tree_forwarder_block_p): Speed up by walking
! 	through the statements backward.
  
! 2005-01-17  Ian Lance Taylor  <ian@airs.com>
  
! 	PR middle-end/13127:
! 	* tree-inline.c (expand_call_inline): Set TREE_NO_WARNING on
! 	a variable set to the return value of the inlined function.
  
! 2005-01-17  Mark Dettinger  <dettinge@de.ibm.com>
  
! 	* rtlanal.c (rtx_cost): Assign cost of 0 to a SUBREG
! 	when modes are tieable.
  
! 2005-01-17  Ranjit Mathew  <rmathew@hotmail.com>
  
! 	* gthr-posix.h (__gthread_active_p): Use pthread_cancel instead
! 	of pthread_create to find out if threads are enabled.
! 	* gthr-posix95.h (__gthread_active_p): Likewise.
  
! 2005-01-17  Paolo Bonzini  <bonzini@gnu.org>
  
! 	* common.opt (-fnew-ra): Remove.
! 	* ra*.*: Remove.
! 	* toplev.h (flag_new_regalloc): Remove.
! 	* Makefile.in (ra*.*): Don't mention.
! 	* passes.c (rest_of_handle_new_regalloc): Remove.
! 	(rest_of_handle_combine, rest_of_compilation): Always consider
! 	flag_new_regalloc as false.
! 	* doc/invoke.texi: Don't document -fnew-ra.
  
! 2005-01-17  Paolo Bonzini <bonzini@gnu.org>
  
! 	* bb-reorder.c (fix_edges_for_rarely_executed_code): Remove
! 	last parameter to reg_scan.
! 	* loop.c (loop_optimize): Likewise.
! 	* passes.c (rest_of_handle_tracer, rest_of_handle_if_conversion,
! 	rest_of_handle_web, rest_of_handle_cfg, rest_of_handle_jump_bypass,
! 	rest_of_handle_life, rest_of_handle_cse, rest_of_handle_cse2,
! 	rest_of_handle_gcse, rest_of_handle_loop_optimize,
! 	rest_of_handle_loop2, rest_of_handle_jump2): Likewise.
! 	* regclass.c (reg_scan): Likewise, for the declaration.
! 	* rtl.h (reg_scan): Likewise, for the prototype.
  
! 2005-01-17  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* tree-ssa-dom.c (tree_ssa_dominator_optimize): Don't call
! 	mark_dfs_back_edges.
  
! 2005-01-16  Daniel Berlin  <dberlin@dberlin.org>
  
! 	* tree-ssa-pre.c (add_to_sets): s1 may be NULL.
! 	(compute_avail): Uses don't go in tmp_gen.
  
! 2005-01-16  Steven Bosscher  <stevenb@suse.de>
  
! 	* ggc-page.c (ggc_alloc_stat): Use __builtin_ctzl instead of a
! 	loop to look for a free slot in a page entry.
  
! 2005-01-16  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
  
! 	PR target/16304
! 	* defaults.h (TARGET_DEFERRED_OUTPUT_DEFS): Provide default.
! 	* toplev.c (compile_file): Call process_pending_assemble_output_defs
! 	just before targetm.asm_out.file_end.
! 	* tree.h (process_pending_assemble_output_defs): Declare.
! 	* varasm.c (assemble_output_def, process_pending_assemble_output_defs):
! 	New functions.
! 	(assemble_alias): Defer generation of assembly code for defines when
! 	TARGET_DEFERRED_OUTPUT_DEFS is true.
! 	* config/rs6000/aix41.h (TARGET_DEFERRED_OUTPUT_DEFS): Define.
! 	* config/rs6000/aix43.h (TARGET_DEFERRED_OUTPUT_DEFS): Define.
! 	* doc/tm.texi (TARGET_DEFERRED_OUTPUT_DEFS): document.
  
! 2005-01-15  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
  
! 	PR target/19336
! 	* pa.c (pa_scalar_mode_supported_p): New function.
! 	(TARGET_SCALAR_MODE_SUPPORTED_P): Define.
! 	* pa.h (MIN_UNITS_PER_WORD): Add comment.
  
! 	* pa-protos.h (prefetch_operand): Delete.
! 	(prefetch_cc_operand, prefetch_nocc_operand): New declations.
! 	* pa.c (prefetch_operand): Delete.
! 	(prefetch_cc_operand, prefetch_nocc_operand): New functions.
! 	* pa.h (EXTRA_CONSTRAINT): Add `W' constraint.
! 	(PREDICATE_CODES): Delete prefetch_operand.  Add prefetch_cc_operand
! 	and prefetch_nocc_operand.
! 	* pa.md (prefetch): Rework to avoid reload problems handling short
! 	displacements when a cache control completer needs to be provided.
! 	(prefetch_32, prefetch_64): Delete.
! 	(prefetch_cc, prefetch_nocc): New patterns.
  
! 2005-01-15  David Edelsohn  <edelsohn@gnu.org>
  
! 	* config/rs6000/aix52.h (CPLUSPLUS_CPP_SPEC): Revert previous change.
  
! 2005-01-15  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
  
! 	PR ada/19388
! 	* pa.c (pa_asm_output_aligned_common): Warn if specified alignment
! 	exceeds maximum alignment for global common data.
! 	* pa64-hpux.h (MAX_OFILE_ALIGNMENT): Define to 32768.
! 	* som.h (MAX_OFILE_ALIGNMENT): Likewise.
  
! 2004-01-15  Roger Sayle  <roger@eyesopen.com>
  
! 	* tree-ssa-dom.c (extract_range_from_cond): Correct condition.
  
! 2004-01-15  Roger Sayle  <roger@eyesopen.com>
  
! 	* harg-reg-set.h (reg_class_names): Prototype global array.
! 	* regclass.c (reg_class_names): Declare here and initialize to
! 	REG_CLASS_NAMES.
! 	(dump_regclass): Remove local declaration of reg_class_names.
! 	(regclass): Likewise.
! 	* cfg.c (dump_flow_info): Likewise.
! 	* ra-debug.c (reg_class_names): Likewise.
! 	* regrename.c (reg_class_names): Likewise.
! 	* reload.c (reg_class_names): Likewise.
! 	* reload1.c (spill_failure): Likewise.
! 	* config/m68hc11/m68hc11.c (reg_class_names): Likewise.
  
! 2005-01-15  Ulrich Weigand  <uweigand@de.ibm.com>
  
! 	* config/s390/s390.md ("reload_outti"): Remove predicate for
! 	output operand.  Abort if operand is not a MEM.
! 	("reload_outdi", "reload_outdf"): Likewise.
  
! 2005-01-15  Marc Espie  <espie@openbsd.org>
  
! 	* config.gcc (*-*-openbsd*): Set HAS_LIBC_R for OpenBSD <= 3.2.
! 	(i[34567]86-*-openbsd*): Switch to ELF for OpenBSD >= 3.4.
! 	* config/openbsd.h:  Fix C++ includes for native configurations.
! 	Add proper OS_CPP_BUILTINS.  Fix libspec for recent OpenBSD.
! 	Add trampoline support.
! 	* config/i386/openbsdelf.h: New.
  
! 2005-01-15  Marc Espie  <espie@openbsd.org>
  
! 	* collect2.c (main): Explicitly parse -dynamic-linker option.
  
! 2005-01-15  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/19060
! 	* tree-ssa-dom.c (extract_range_from_cond) <case LT_EXPR, GT_EXPR>:
! 	Return 0 if op1 <= TYPE_MIN_VALUE () resp. op1 >= TYPE_MAX_VALUE ().
! 	(simplify_cond_and_lookup_avail_expr): Add assert for dummy == 0
! 	and handle extract_range_from_cond returning false.
! 	* fold-const.c (fold): Optimize comparisons with min/max even for
! 	width > HOST_BITS_PER_WIDE_INT.
  
! 2005-01-15  Ralf Corsepius  <ralf.corsepius@rtems.org>
  
! 	* config/mips/rtems.h (MIPS_DEFAULT_GVALUE): Set to 0.
! 	* config/mips/t-rtems (MULTILIBS_DIRNAMES,MULTILIB_OPTIONS):
! 	Remove little endian multilib variants.
! 	Add mips32 multilib variant.
  
! 2005-01-15  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* explow.c (copy_all_reg, stabilize): Remove.
! 	* expr.h: Remove the corresponding prototypes.
  
! 	* rtlanal.c (regs_set_between_p): Remove.
! 	* rtl.h: Remove the corresponding prototype.
  
! 2005-01-14  David Edelsohn  <edelsohn@gnu.org>
  
! 	* config/rs6000/rs6000.c (rs6k_nonimmediate_operand): Rename
! 	to rs6000_nonimmediate_operand.
! 	* config/rs6000/rs6000.h (PREDICATE_CODES): Rename
! 	rs6k_nonimmediate_operand to rs6000_nonimmediate_operand.
! 	* config/rs6000/rs6000.md (movsi_internal1): Rename predicate to
! 	rs6000_nonimmediate_operand.
! 	* config/rs6000/spe.md (movdf_e500_double): Rename predicate to
! 	rs6000_nonimmediate_operand.
  
! 2005-01-14  Andrew Pinski  <pinskia@physics.uc.edu>
  
! 	* tree-ssa-alias.c (pass_may_alias): Add TODO_verify_stmts.
  
! 2005-01-14  Aldy Hernandez  <aldyh@redhat.com>
  
! 	* config/rs6000/rs6000.h (CLASS_MAX_NREGS): DF goes in 1 register
! 	on e500v2.
! 	(CANNOT_CHANGE_MODE_CLASS): Restrict DI mode changes on e500v2.
! 	(PREDICATE_CODES): Add rs6k_nonimmediate_operand.
  
! 	* config/rs6000/rs6000.c (invalid_e500_subreg): New.
! 	(rs6k_nonimmediate_operand): New.
! 	(rs6000_legitimate_offset_address_p): Handle DI modes on e500v2
! 	correctly.
! 	(legitimate_lo_sum_address_p): Same.
! 	(rs6000_legitimize_address): Same.
! 	(rs6000_legitimize_reload_address): Same.
! 	(rs6000_legitimate_address): Same.
! 	(spe_build_register_parallel): Pass DF and DC modes in a DI
! 	register.
  
! 	* config/rs6000/rs6000.md ("*movsi_internal1"): Change predicate
! 	to rs6k_nonimmediate_operand.
  
! 	* config/rs6000/spe.md ("*frob_df_di"): New.
! 	("*frob_di_df"): New.
! 	("*frob_di_df_2"): New.
! 	("*mov_sidf_e500_subreg0"): New.
! 	("*mov_sidf_e500_subreg4"): New.
! 	("*movdf_e500_double"): Change predicate to
! 	rs6k_nonimmediate_operand.
  
! 2005-01-14  Aldy Hernandez  <aldyh@redhat.com>
  
! 	* postreload.c (move2add_note_store): Only call
! 	trunc_int_for_mode on scalar integers.
  
! 2005-01-14  Steven Bosscher  <stevenb@suse.de>
  
! 	* tree-ssa-dce.c (visited_control_parents): New sbitmap to
! 	replace BB_VISITED uses.
! 	(find_obviously_necessary_stmts): Don't clear BB_VISITED.
! 	(propagate_necessity): Check the bitmap instead of BB_VISITED.
! 	(tree_dce_done): Free visited_control_parents.
! 	(perform_tree_ssa_dce): Allocate and clear it.
! 	* tree-ssa-pre.c (compute_antic_aux): Make non-recursive.
! 	(compute_antic): Iterate from here using a DFS.  Use an sbitmap
! 	instead of BB_VISITED.
  
! 2005-01-14  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* c-tree.h, coverage.h, langhooks-def.h, optabs.h, output.h,
! 	rtl.h, targhooks.h, tree-flow.h, tree-mudflap.h, tree.h:
! 	Remove unused prototypes.
  
! 2005-01-14  Aldy Hernandez  <aldyh@redhat.com>
  
! 	* config/rs6000/rs6000.c (rs6000_stack_info): Fix caching of SPE
! 	64-bit register usage.
! 	(spe_func_has_64bit_regs_p): Add FIXME note.
  
! 2005-01-14  Aldy Hernandez  <aldyh@redhat.com>
  
! 	* config/rs6000/rs6000.c (rs6000_generate_compare): Replace
! 	flag_finite_math_only with flag_unsafe_math_optimizations.
  
! 2005-01-14  J. D. Johnston  <jjohnst@us.ibm.com>
  
! 	* config/s390/tpf-unwind.h (s390_fallback_frame_state): Correct
! 	end-of-stack check.
! 	(__tpf_eh_return): Copy TPF private stack area from the module
! 	boundary stack frame.  Add check for when module addresses are
! 	equal, but no stub address is found.
  
! 2005-01-14  Richard Earnshaw  <rearnsha@arm.com>
  
! 	PR target/7525
! 	* arm.h (struct machine_function): Add call_via field.
! 	(thumb_call_via_label): Declare.
! 	* arm.c (thumb_call_via_label): New variable.
! 	(thumb_call_reg_needed): New variable.
! 	(arm_output_function_epilogue): For Thumb code, output any per-function
! 	call-indirect trampolines.
! 	(thumb_call_via_reg): New function.
! 	(arm_file_end): New function.
! 	(TARGET_ASM_FILE_END): Call arm_file_end.
! 	(aof_file_end): Likewise.
! 	* arm-protos.h (thumb_call_via_reg): Declare.
! 	* arm.md (call_reg_thumb, call_value_reg_thumb): Call
! 	thumb_call_via_reg in normal case.
  
! 2005-01-14  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR middle-end/19084
! 	PR rtl-optimization/19348
! 	* recog.c (peephole2_optimize): Do global life update if some peephole
! 	decides it doesn't need at least one of its inputs and that change
! 	influences liveness at the start of the basic block.
  
! 	* basic-block.h (EXECUTE_IF_AND_COMPL_IN_REG_SET): Needs 2 REGSET
! 	arguments instead of 1.
  
! 2005-01-14  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	PR middle-end/18820
! 	* varasm.c (initializer_constant_valid_p) <ADDR_EXPR>: Return
! 	zero for nested functions needing a static chain or functions
! 	with a non-constant address.
  
! 2005-01-13  Roger Sayle  <roger@eyesopen.com>
  
! 	* simplify-rtx.c (simplify_binary_operation) <AND>: Optimize
! 	(and (sign_extend X) C) into (zero_extend (and X C)).
  
! 2005-01-13  David O'Brien  <obrien@FreeBSD.org>
  
! 	* config/freebsd-spec.h:  Make KSE pthread lib logic the default.
  
! 2005-01-13  Richard Henderson  <rth@redhat.com>
  
! 	PR target/19009
! 	PR target/19250
! 	PR target/19252
! 	* config/i386/i386.md (cmpdf, cmpsf, bunordered, bordered, buneq,
! 	bunge, bungt, bunle, bunlt, bltgt): Enable for TARGET_SSE_MATH,
! 	not just TARGET_SSE.
! 	(cmpfp_i_387): Rename from cmpfp_i.  Move after sse patterns.
! 	(cmpfp_i_mixed): Rename from cmpfp_i_sse; use for TARGET_MIX_SSE_I387.
! 	(cmpfp_i_sse): Rename from cmpfp_i_sse_only; use for TARGET_SSE_MATH.
! 	(cmpfp_iu_mixed, cmpfp_iu_sse, cmpfp_iu_387): Similarly.
! 	(fp_jcc_1_mixed, fp_jcc_1_sse, fp_jcc_1_387): Similarly.
! 	(fp_jcc_2_mixed, fp_jcc_2_sse, fp_jcc_2_387): Similarly.
! 	(fp_jcc_3_387, fp_jcc_4_387, fp_jcc_5_387, fp_jcc_6_387,
! 	fp_jcc_7_387, fp_jcc_8_387): Rename from fp_jcc_N.
! 	(movdicc_c_rex64): Rename with '*'.
! 	(movsfcc, movdfcc): Add checks for 387 and sse math to condition.
! 	(movsfcc_1_sse_min, movsfcc_1_sse_max, movsfcc_1_sse): New.
! 	(movsfcc_1_387): Rename from movsfcc_1.
! 	(movdfcc_1_sse_min, movdfcc_1_sse_max, movdfcc_1_sse): New.
! 	(movdfcc_1, movdfcc_1_rex64): Add check for 387.
! 	(sminsf3, smaxsf3, smindf3, smaxdf3): New.
! 	(minsf3, minsf, minsf_nonieee, minsf_sse, mindf3, mindf,
! 	mindf_nonieee, mindf_sse, maxsf3, maxsf, maxsf_nonieee, maxsf_sse,
! 	maxdf3, maxdf, maxdf_nonieee, maxdf_sse, sse_movsfcc, sse_movsfcc_eq,
! 	sse_movdfcc, sse_movdfcc_eq, sse_movsfcc_const0_1,
! 	sse_movsfcc_const0_2, sse_movsfcc_const0_3, sse_movsfcc_const0_4,
! 	sse_movdfcc_const0_1, sse_movdfcc_const0_2, sse_movdfcc_const0_3,
! 	sse_movdfcc_const0_4): Remove.
! 	* config/i386/i386.c (ix86_expand_fp_movcc): For TARGET_SSE_MATH,
! 	recognize min/max early.  Update for changed sse cmove patterns.
! 	(ix86_split_sse_movcc): New.
! 	* config/i386/i386-protos.h: Update.
  
! 2005-01-13  Steven Bosscher  <stevenb@suse.de>
  
! 	* tree-ssa-dse.c (fix_phi_uses): Use SSA operand iterators.
! 	(fix_stmt_v_may_defs): Likewise.
  
! 2005-01-13  Richard Henderson  <rth@redhat.com>
  
! 	* config/i386/i386.c (ix86_expand_fp_absneg_operator): Use elt_mode
! 	for converting the mask.
  
! 2005-01-13  David Edelsohn  <edelsohn@gnu.org>
  
! 	* config/rs6000/aix52.h (CPLUSPLUS_CPP_SPEC): Change _XOPEN_SOURCE
! 	definition to 600.
  
! 2005-01-13  Richard Henderson  <rth@redhat.com>
  
! 	* config/i386/i386.c (IX86_BUILTIN_MOVQ, IX86_BUILTIN_LOADD,
! 	IX86_BUILTIN_STORED, IX86_BUILTIN_MOVQ2DQ,
! 	IX86_BUILTIN_MOVDQ2Q): Remove.
! 	(IX86_BUILTIN_VEC_EXT_V4SI): New.
! 	(ix86_init_mmx_sse_builtins, ix86_expand_builtin): Update to match.
! 	(ix86_expand_vector_extract): For V4S[FI], extract element 0 after
! 	shuffling.
! 	* config/i386/sse.md (sse_concatv2sf): Accept zero operand 2.
! 	(sse2_pextrw): Fix immediate constraint.
! 	(sse2_loadq, sse2_loadq_rex64): Remove.
! 	* config/i386/emmintrin.h (_mm_cvtsi128_si32, _mm_cvtsi128_si64x):
! 	Use __builtin_ia32_vec_ext_<size>.
! 	(_mm_cvtsi32_si128, _mm_cvtsi64x_si128): Use _mm_set_epi<size>.
  
! 2005-01-13  Aldy Hernandez  <aldyh@redhat.com>
  
! 	* function.c (assign_parm_setup_block): Look inside original
! 	entry_parm when inspecting PARALLEL.
  
! 2005-01-13  Ralf Corsepius  <ralf.corsepius@rtems.org>
! 	    Joel Sherrill  <joel@oarcorp.com>
  
! 	PR target/19399
! 	* gthr-rtems.h (__gthread_recursive_mutex_t): New type.
! 	(__GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION): Define to
! 	rtems_gxx_recursive_mutex_init.
! 	(__gthread_recursive_mutex_lock): New function.
! 	(__gthread_recursive_mutex_trylock): Likewise.
! 	(__gthread_recursive_mutex_unlock): Likewise.
  
! 2005-01-13  Ralf Corsepius <ralf.corsepius@rtems.org>
  
! 	* config/i386/t-rtems-i386: Multilib on -mtune instead of -mcpu.
  
! 2005-01-13  Jan Beulich  <jbeulich@novell.com>
  
! 	* config/ia64/ia64.md (ashlti3, ashlti3_internal): New.
! 	(ashrti3_internal): Indicate output is early clobber. Generate result
! 	into output rather than first input. Use move for low word of output
! 	if shift count is exactly 64.
! 	(lshrti3_internal): Likewise.
  
! 2005-01-13  Hans-Peter Nilsson  <hp@bitrange.com>
  
! 	PR target/18329
! 	PR target/18330
! 	* reload1.c (delete_output_reload): Don't delete an output reload
! 	if the pseudo lives longer than a single basic block.  Adjust and
! 	improve wording of comment.
  
! 2005-01-12  Andrew Pinski  <pinskia@physics.uc.edu>
  
! 	PR target/19334
! 	* config/darwin.c (machopic_select_section): Use TYPE_SIZE_UNIT instead
! 	of TYPE_SIZE where we mean the number of bytes.
  
! 2005-01-12  Aldy Hernandez  <aldyh@redhat.com>
  
! 	* function.c (assign_parm_setup_block): Relax condition on
! 	multi-register optimization.
  
! 2005-01-12  Nick Clifton  <nickc@redhat.com>
  
! 	* config/sh/sh.md (udivsi3_sh2a, divsi3_sh2a): Give these patterns
! 	an "in_delay_slot" attribute of "no" to prevent them being used in
! 	delay slots.  This is forbidden because they might generate
! 	exceptions.
  
! 2005-01-12  Alan Modra  <amodra@bigpond.net.au>
  
! 	PR target/19389
! 	* config/rs6000/rs6000.md (movtf_internal): Replace r->o and m->r
! 	with r->Y and Y->r.
  
! 2005-01-12  Nick Clifton  <nickc@redhat.com>
  
! 	* config/iq2000/iq2000.h (ASM_SPEC): Undefine (to stop -Qy being
! 	passed on to GAS) but do not define, as GAS no longer supports or
! 	needs the -m2000 option.
  
! 2005-01-11  Roger Sayle  <roger@eyesopen.com>
  
! 	* builtins.c (fold_builtin_fabs): Convert argument to the appropriate
! 	type as args of unprototyped builtins aren't automatically promoted.
! 	(fold_builtin_abs): Likewise.
  
! 2005-01-11  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
  
! 	* Makefile.in: Set a `build-warn' variable.
  
! 2005-01-11  Zdenek Dvorak  <dvorakz@suse.cz>
  
! 	PR tree-optimization/17949
! 	* tree-ssa-loop-ivopts.c (may_be_unaligned_p): New function.
! 	(find_interesting_uses_address): Use it.
  
! 2005-01-11  Aldy Hernandez  <aldyh@redhat.com>
  
! 	* regrename.c (kill_value): Handle subreg's that won't simplify.
  
! 2005-01-11  Richard Henderson  <rth@redhat.com>
  
! 	PR target/13366
! 	* config/i386/i386.h (enum ix86_builtins): Move ...
! 	* config/i386/i386.c: ... here.
! 	(IX86_BUILTIN_MOVDDUP, IX86_BUILTIN_MMX_ZERO, IX86_BUILTIN_PEXTRW,
! 	IX86_BUILTIN_PINSRW, IX86_BUILTIN_LOADAPS, IX86_BUILTIN_LOADSS,
! 	IX86_BUILTIN_STORESS, IX86_BUILTIN_SSE_ZERO, IX86_BUILTIN_PEXTRW128,
! 	IX86_BUILTIN_PINSRW128, IX86_BUILTIN_LOADAPD, IX86_BUILTIN_LOADSD,
! 	IX86_BUILTIN_STOREAPD, IX86_BUILTIN_STORESD,  IX86_BUILTIN_STOREHPD,
! 	IX86_BUILTIN_STORELPD, IX86_BUILTIN_SETPD1, IX86_BUILTIN_SETPD,
! 	IX86_BUILTIN_CLRPD, IX86_BUILTIN_LOADPD1, IX86_BUILTIN_LOADRPD,
! 	IX86_BUILTIN_STOREPD1, IX86_BUILTIN_STORERPD, IX86_BUILTIN_LOADDQA,
! 	IX86_BUILTIN_STOREDQA, IX86_BUILTIN_CLRTI,
! 	IX86_BUILTIN_LOADDDUP): Remove.
! 	(IX86_BUILTIN_VEC_INIT_V2SI, IX86_BUILTIN_VEC_INIT_V4HI,
! 	IX86_BUILTIN_VEC_INIT_V8QI, IX86_BUILTIN_VEC_EXT_V2DF,
! 	IX86_BUILTIN_VEC_EXT_V2DI, IX86_BUILTIN_VEC_EXT_V4SF,
! 	IX86_BUILTIN_VEC_EXT_V8HI, IX86_BUILTIN_VEC_EXT_V4HI,
! 	IX86_BUILTIN_VEC_SET_V8HI, IX86_BUILTIN_VEC_SET_V4HI): New.
! 	(ix86_init_builtins): Make static.
! 	(ix86_init_mmx_sse_builtins): Update for changed builtins.
! 	(ix86_expand_binop_builtin): Only use ix86_fixup_binary_operands
! 	if all the modes match.  Otherwise, fake it.
! 	(get_element_number, ix86_expand_vec_init_builtin,
! 	ix86_expand_vec_ext_builtin, ix86_expand_vec_set_builtin): New.
! 	(ix86_expand_builtin): Make static.  Update for changed builtins.
! 	(ix86_expand_vector_move_misalign): Use sse2_loadlpd with zero
! 	operand instead of sse2_loadsd.  Cast sse1 fallback to V4SFmode.
! 	(ix86_expand_vector_init_duplicate): New.
! 	(ix86_expand_vector_init_low_nonzero): New.
! 	(ix86_expand_vector_init_one_var, ix86_expand_vector_init_general):
! 	Split out from ix86_expand_vector_init; handle integer modes.
! 	(ix86_expand_vector_init): Use them.
! 	(ix86_expand_vector_set, ix86_expand_vector_extract): New.
! 	* config/i386/i386-protos.h: Update.
! 	* config/i386/predicates.md (reg_or_0_operand): New.
! 	* config/i386/mmx.md (mov<MMXMODEI>_internal): Add 'r' variants.
! 	(movv2sf_internal): Likewise.  And a splitter to match them all.
! 	(vec_dupv2sf, mmx_concatv2sf, vec_setv2sf, vec_extractv2sf,
! 	vec_initv2sf, vec_dupv4hi, vec_dupv2si, mmx_concatv2si, vec_setv2si,
! 	vec_extractv2si, vec_initv2si, vec_setv4hi, vec_extractv4hi,
! 	vec_initv4hi, vec_setv8qi, vec_extractv8qi, vec_initv8qi): New.
! 	(mmx_pinsrw): Fix operand ordering.
! 	* config/i386/sse.md (movv4sf splitter): Use direct pattern,
! 	rather than sse_loadss expander.
! 	(movv2df splitter): Similarly.
! 	(sse_loadss, sse_loadlss): Remove.
! 	(vec_dupv4sf, sse_concatv2sf, sse_concatv4sf, vec_extractv4sf_0): New.
! 	(vec_setv4sf, vec_setv2df): Use ix86_expand_vector_set.
! 	(vec_extractv4sf, vec_extractv2df): Use ix86_expand_vector_extract.
! 	(sse3_movddup): Rename with '*'.
! 	(sse3_movddup splitter): Use gen_rtx_REG instead of gen_lowpart.
! 	(sse2_loadsd): Remove.
! 	(vec_dupv2df_sse3): Rename from sse3_loadddup.
! 	(vec_dupv2df, vec_concatv2df_sse3, vec_concatv2df): New.
! 	(sse2_pinsrw): Fix argument ordering.
! 	(sse2_loadld, sse2_loadq): Add sse1 alternatives.
! 	(sse2_stored): Remove 'r' destination.
! 	(vec_dupv4si, vec_dupv2di, sse2_concatv2si, sse1_concatv2si,
! 	vec_concatv4si_1, vec_concatv2di, vec_setv2di, vec_extractv2di,
! 	vec_initv2di, vec_setv4si, vec_extractv4si, vec_initv4si,
! 	vec_setv8hi, vec_extractv8hi, vec_initv8hi, vec_setv16qi,
! 	vec_extractv16qi, vec_initv16qi): New.
  
! 	* config/i386/emmintrin.h (__m128i, __m128d): Use typedef, not define.
! 	(_mm_set_sd, _mm_set1_pd, _mm_setzero_pd, _mm_set_epi64x,
! 	_mm_set_epi32, _mm_set_epi16, _mm_set_epi8, _mm_setzero_si128): Use
! 	constructor form.
! 	(_mm_load_pd, _mm_store_pd): Use plain dereference.
! 	(_mm_load_si128, _mm_store_si128): Likewise.
! 	(_mm_load1_pd): Use _mm_set1_pd.
! 	(_mm_load_sd): Use _mm_set_sd.
! 	(_mm_store_sd, _mm_storeh_pd): Use __builtin_ia32_vec_ext_v2df.
! 	(_mm_store1_pd, _mm_storer_pd): Use _mm_store_pd.
! 	(_mm_set_epi64): Use _mm_set_epi64x.
! 	(_mm_set1_epi64x, _mm_set1_epi64, _mm_set1_epi32, _mm_set_epi16,
! 	_mm_set1_epi8, _mm_setr_epi64, _mm_setr_epi32, _mm_setr_epi16,
! 	_mm_setr_epi8): Use _mm_set_foo form.
! 	(_mm_loadl_epi64, _mm_movpi64_epi64, _mm_move_epi64): Use _mm_set_epi64.
! 	(_mm_storel_epi64, _mm_movepi64_pi64): Use __builtin_ia32_vec_ext_v2di.
! 	(_mm_extract_epi16): Use __builtin_ia32_vec_ext_v8hi.
! 	(_mm_insert_epi16): Use __builtin_ia32_vec_set_v8hi.
! 	* config/i386/mmintrin.h (_mm_setzero_si64): Use plain cast.
! 	(_mm_set_pi32): Use __builtin_ia32_vec_init_v2si.
! 	(_mm_set_pi16): Use __builtin_ia32_vec_init_v4hi.
! 	(_mm_set_pi8): Use __builtin_ia32_vec_init_v8qi.
! 	(_mm_set1_pi16, _mm_set1_pi8): Use _mm_set_piN variant.
! 	* config/i386/pmmintrin.h (_mm_loaddup_pd): Use _mm_load1_pd.
! 	(_mm_movedup_pd): Use _mm_shuffle_pd.
! 	* config/i386/xmmintrin.h (_mm_setzero_ps, _mm_set_ss,
! 	_mm_set1_ps, _mm_set_ps, _mm_setr_ps): Use constructor form.
! 	(_mm_cvtpi16_ps, _mm_cvtpu16_ps, _mm_cvtpi8_ps, _mm_cvtpu8_ps,
! 	_mm_cvtps_pi8, _mm_cvtpi32x2_ps): Avoid __builtin_ia32_mmx_zero;
! 	Use _mm_setzero_ps.
! 	(_mm_load_ss, _mm_load1_ps): Use _mm_set* form.
! 	(_mm_load_ps, _mm_loadr_ps): Use raw dereference.
! 	(_mm_store_ss): Use __builtin_ia32_vec_ext_v4sf.
! 	(_mm_store_ps): Use raw dereference.
! 	(_mm_store1_ps): Use _mm_storeu_ps.
! 	(_mm_storer_ps): Use _mm_store_ps.
! 	(_mm_extract_pi16): Use __builtin_ia32_vec_ext_v4hi.
! 	(_mm_insert_pi16): Use __builtin_ia32_vec_set_v4hi.
  
! 2005-01-11  Stan Shebs  <shebs@apple.com>
  
! 	* config/rs6000/rs6000.c (machopic_output_stub): Issue
! 	ldu instead of lwzu if 64-bit -mdynamic-no-pic.
  
! 2005-01-11  Andrew Pinski  <pinskia@physics.uc.edu>
  
! 	PR target/18761
! 	* config/rs6000/rs6000.c (rs6000_special_round_type_align):
! 	Skip all DECLs except for FIELD_DECLs.
  
! 2005-01-11  Andreas Krebbel  <krebbel1@de.ibm.com>
  
! 	* config/s390/s390.c (override_options): Return error if
! 	-mbackchain, -mpacked-stack and -mhard-float are used together.
! 	(s390_va_start): Remove the backchain && packed-stack special case.
! 	(s390_gimplify_va_arg): Likewise.
! 	* doc/invoke.texi: Remove the ABI incompatibility note.
  
! 2005-01-11  Andreas Krebbel  <krebbel1@de.ibm.com>
  
! 	* config/s390/s390.c (struct s390_frame_layout): Remove
! 	save_backchain_p.
! 	(s390_frame_info, s390_emit_prologue): Replace occurrences of
! 	save_backchain_p with TARGET_BACKCHAIN.
  
! 2005-01-11  Alan Modra  <amodra@bigpond.net.au>
  
! 	PR target/18916
! 	* builtins.c (std_gimplify_va_arg_expr): Adjust alignment of *ap.
! 	* expr.h (struct locate_and_pad_arg_data): Add "boundary".
! 	* function.c (locate_and_pad_parm): Set new field.
! 	(assign_parm_find_stack_rtl): Use it instead of FUNCTION_ARG_BOUNDARY.
! 	Tweak where_pad test to include "none".  Always set mem align for
! 	stack_parm.
! 	(assign_parm_adjust_stack_rtl): Discard stack_parm if alignment
! 	not sufficient for type.
! 	(assign_parm_setup_block): If stack_parm is zero on entry, always
! 	make a new stack local.  Block move old stack parm if necessary
! 	to new aligned stack local.
! 	(assign_parm_setup_stack): Use a block move to handle
! 	potentially misaligned entry_parm.
! 	(assign_parms_unsplit_complex): Specify required alignment when
! 	creating stack local.
! 	* calls.c (compute_argument_addresses): Override alignment of stack
! 	arg calculated from its type with the alignment given by
! 	FUNCTION_ARG_BOUNDARY.
! 	(store_one_arg): Likewise.
  
! 2005-01-11  Jan Beulich  <jbeulich@novell.com>
  
! 	* config/ia64/ia64.md (zero_extendsidi2): Replace zxt4 by addp4.
! 	Change respective itanium_class attribute to ialu.
! 	(shladdp4_internal): New.
! 	* config/ia64/predicates.md (shladd_log2_operand): New.
  
! 2005-01-11  Richard Henderson  <rth@redhat.com>
  
! 	* expr.c (store_constructor): Use rtvec_alloc instead of
! 	alloca+gen_rtvec_v, and an incorrect number passed to alloca.
  
! 2005-01-11  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* config/alpha/alpha.c, config/i386/mmx.md: Fix comment typos.
  
! 2005-01-11  Alan Modra  <amodra@bigpond.net.au>
  
! 	* varasm.c (default_section_type_flags_1): Don't set SECTION_SMALL.
! 	* config/ia64/ia64.c (TARGET_SECTION_TYPE_FLAGS): Define.
! 	(TARGET_RWRELOC): Define.
! 	(ia64_rwreloc_section_type_flags): Delete.
! 	(ia64_section_type_flags): New function.
! 	* config/ia64/hpux.h (TARGET_SECTION_TYPE_FLAGS): Don't define.
! 	(TARGET_RWRELOC): Define.
  
! 2005-01-10  David Mosberger  <davidm@hpl.hp.com>
  
! 	PR target/18987
! 	* config/ia64/ia64.c (process_set): For alloc insn, only call
! 	process_epilogue is !frame_pointer_needed.
  
! 2005-01-10  Roger Sayle  <roger@eyesopen.com>
  
! 	PR c++/19355
! 	* c-common.c (c_common_truthvalue_conversion): TRUTH_NOT_EXPR is a
! 	unary operator and can't be treated as a binary/comparison operator.
  
! 2005-01-10  Richard Henderson  <rth@redhat.com>
  
! 	* config/i386/i386.c (ix86_function_value): Use type_natural_mode.
! 	(ix86_return_in_memory): Likewise.
! 	(function_arg_advance):  Likewise.  Mirror structure in function_arg
! 	for choosing register to advance.
  
! 2005-01-10  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* tree-vectorizer.c, tree.def: Fix comment typos.
  
! 2005-01-10  Mark Dettinger  <dettinge@de.ibm.com>
  
! 	* config/s390/s390.c (struct processor_costs): 4 new fields:
! 	ddbr, ddr, debr, der.
! 	(s390_rtx_costs): More precise handling of divide instructions.
  
! 2005-01-10  David Edelsohn  <edelsohn@gnu.org>
  
! 	* config/rs6000/t-aix43 (BOOT_LDFLAGS): Define.
  
! 2005-01-10  Jan Beulich  <jbeulich@novell.com>
  
! 	* config/ia64/ia64.c (ia64_in_small_data_p): Also handle the section
! 	names resulting from -ffunction-sections/-fdata-sections and linkonce
! 	ones.
! 	* varasm.c (default_section_type_flags_1): Also set SECTION_SMALL
! 	based on the section name. Rearrange the section name comparison logic
! 	slightly so that each section name is compared against at most once.
  
! 2005-01-10  Ben Elliston  <bje@au.ibm.com>
  
! 	* doc/invoke.texi (Code Gen Options): Add PowerPC to the list of
! 	targets for which -fPIC reduces limitations on the GOT size.
  
! 2005-01-09  Falk Hueffner  <falk@debian.org>
  
! 	* fold-const.c (fold): Also handle EXACT_DIV_EXPR when folding
! 	X/C1 cmpop C2.
  
! 2005-01-09  David Edelsohn  <edelsohn@gnu.org>
  
! 	PR target/18720
! 	* collect2.c (main): Set aixrtl_flag for -brtl option.
! 	(resolve_lib_name): Search for .so file extension before .a
! 	if aixrtl_flag set.
  
! 2005-01-09  Dorit Naishlos  <dorit@il.ibm.com>
  
! 	* tree-vectorizer.c (vect_enhance_data_refs_alignment): Add dump prints.
! 	(vect_analyze_data_refs_alignment): Add dump prints.
  
! 2005-01-09  Ira Rosen  <irar@il.ibm.com>
  
! 	* tree-vectorizer.c (vect_analyze_offset_expr): Use
! 	expr_invariant_in_loop_p.
! 	Initialize outputs first thing in the function.
! 	(vect_update_ivs_after_vectorizer): Call initial_condition_in_loop_num.
! 	(vect_is_simple_iv_evolution): Call initial_condition_in_loop_num.
! 	(vect_analyze_pointer_ref_access): Check that the initial condition of
! 	the access function is loop invariant.
  
! 2005-01-09  Richard Henderson  <rth@redhat.com>
  
! 	* config/i386/i386.c (bdesc_2arg): Update names for mmx_ prefixes.
! 	(ix86_expand_builtin): Likewise.  Frob MASKMOVQ wrt the input mem
! 	just like MASKMOVDQU.  Return plain zero for MMX_ZERO.
! 	* config/i386/i386.md (MMXMODEI, mov<MMXMODEI>,
! 	mov<MMXMODEI>_internal_rex64, mov<MMXMODEI>_internal, movv2sf,
! 	movv2sf_internal_rex64, movv2sf_internal, MMXMODE,
! 	movmisalign<MMXMODE>, mmx_pmovmskb, mmx_maskmovq, mmx_maskmovq_rex,
! 	sse_movntdi, addv8qi3, addv4hi3, addv2si3, mmx_adddi3, ssaddv8qi3,
! 	ssaddv4hi3, usaddv8qi3, usaddv4hi3, subv8qi3, subv4hi3, subv2si3,
! 	mmx_subdi3, sssubv8qi3, sssubv4hi3, ussubv8qi3, ussubv4hi3,
! 	mulv4hi3, smulv4hi3_highpart, umulv4hi3_highpart, mmx_pmaddwd,
! 	sse2_umulsidi3, mmx_iordi3, mmx_xordi3, mmx_anddi3, mmx_nanddi3,
! 	mmx_uavgv8qi3, mmx_uavgv4hi3, mmx_psadbw, mmx_pinsrw, mmx_pinsrw,
! 	mmx_pextrw, mmx_pshufw, eqv8qi3, eqv4hi3, eqv2si3, gtv8qi3, gtv4hi3,
! 	gtv2si3, umaxv8qi3, smaxv4hi3, uminv8qi3, sminv4hi3, ashrv4hi3,
! 	ashrv2si3, lshrv4hi3, lshrv2si3, mmx_lshrdi3, ashlv4hi3, ashlv2si3,
! 	mmx_ashldi3, mmx_packsswb, mmx_packssdw, mmx_packuswb, mmx_punpckhbw,
! 	mmx_punpckhwd, mmx_punpckhdq, mmx_punpcklbw, mmx_punpcklwd,
! 	mmx_punpckldq, emms, addv2sf3, subv2sf3, subrv2sf3, gtv2sf3, gev2sf3,
! 	eqv2sf3, pfmaxv2sf3, pfminv2sf3, mulv2sf3, femms, pf2id, pf2iw,
! 	pfacc, pfnacc, pfpnacc, pi2fw, floatv2si2, pfrcpv2sf2, pfrcpit1v2sf3,
! 	pfrcpit2v2sf3, pfrsqrtv2sf2, pfrsqit1v2sf3, pmulhrwv4hi3, pswapdv2si2,
! 	pswapdv2sf2): Move to mmx.md; rename as necessary with leading
! 	mmx_ prefix.
! 	(mmx_clrdi, pavgusb): Remove.
! 	(ldmxcsr, stmxcsr, sfence, sfence_insn): Move to sse.md; rename
! 	with leading sse_ prefix.
! 	* config/i386/sse.md: Receive them.
! 	* config/i386/mmx.md: New file.
! 	(MMXMODE12, MMXMODE24, mmxvecsize): New.
! 	(subrv2sf3): Turn into expander for normal subtraction.
! 	(mmx_addv2sf3, mmx_mulv2sf3, mmx_smaxv2sf3, mmx_sminv2sf3,
! 	mmx_eqv2sf3, mmx_mulv4hi3, mmx_smulv4hi3_highpart,
! 	mmx_umulv4hi3_highpart, mmx_pmaddwd, mmx_pmulhrwv4hi3, sse2_umulsidi3,
! 	mmx_umaxv8qi3, mmx_smaxv4hi3, mmx_uminv8qi3, mmx_sminv4hi3): Mark
! 	commutative; use ix86_binary_operator_ok.
! 	(mmx_add<MMXMODEI>3, mmx_ssadd<MMXMODE12>3, mmx_usadd<MMXMODE12>3,
! 	mmx_sub<MMXMODEI>3, mmx_sssub<MMXMODE12>3, mmx_ussub<MMXMODE12>3
! 	mmx_ashr<MMXMODE24>3, mmx_lshr<MMXMODE23>3, mmx_ashl<MMXMODE24>3
! 	mmx_eq<MMXMODEI>3, mmx_gt<MMXMODEI>3, mmx_and<MMXMODEI>3,
! 	mmx_nand<MMXMODEI>3, mmx_ior<MMXMODEI>3, mmx_xor<MMXMODEI>3):
! 	Macroize from existing patterns; use ix86_binary_operator_ok.
! 	(mmx_packsswb, mmx_packssdw, mmx_packuswb): Add memory alternative.
! 	(mmx_punpckhbw, mmx_punpcklbw, mmx_punpckhwd, mmx_punpcklwd,
! 	mmx_punpckhdq, mmx_punpckhdq, mmx_punpckldq): Likewise.  Model
! 	with vec_select+vec_concat.
! 	(mmx_pshufw, mmx_pshufw_1): Likewise.
! 	(mmx_uavgv8qi3): Merge pavgusb.  Model correcty.
! 	(mmx_uavgv4hi3): Model correctly.
! 	* config/i386/mmintrin.h (_mm_and_si64, _mm_andnot_si64, _mm_or_si64,
! 	_mm_xor_si64): Remove casts.
  
! 2005-01-09  Zdenek Dvorak  <dvorakz@suse.cz>
  
! 	PR tree-optimization/19224
! 	* tree-scalar-evolution.c (get_instantiated_value,
! 	set_instantiated_value): New functions.
! 	(instantiate_parameters_1): Cache the results.
! 	(instantiate_parameters, resolve_mixers): Initialize and free
! 	the cache.
  
! 2005-01-08  David Edelsohn  <edelsohn@gnu.org>
  
! 	* config/i386/i386.md (addhi_4): Correct reference in comment.
! 	(addqi_4): Same.
  
! 2005-01-08  Richard Henderson  <rth@redhat.com>
  
! 	* config/i386/emmintrin.h (_mm_cvtsi128_si32): Move earlier.
! 	(_mm_cvtsi128_si64x): Likewise.
! 	(_mm_srl_epi64, _mm_srl_epi32, _mm_srl_epi16, _mm_sra_epi32,
! 	_mm_sra_epi16, _mm_sll_epi64, _mm_sll_epi32, _mm_sll_epi16): Use
! 	the _mm_{srl,sll}i_foo counterpart, and _mm_cvtsi128_si32.
! 	* config/i386/i386-modes.def: Add V16HI, V32QI, V4DF, V8SF.
! 	* config/i386/i386-protos.h: Update.
! 	* config/i386/i386.c (print_operand): Add 'H'.
! 	(ix86_fixup_binary_operands): Split out from ...
! 	(ix86_expand_binary_operator): ... here.
! 	(ix86_fixup_binary_operands_no_copy): New.
! 	(ix86_expand_fp_absneg_operator): Handle vector mode results.
! 	(bdesc_2arg): Update names for sse{,2,3}_ prefixes.
! 	(ix86_init_mmx_sse_builtins): Remove *maskncmp* special cases.
! 	(safe_vector_operand): Use CONST0_RTX.
! 	(ix86_expand_binop_builtin): Use ix86_fixup_binary_operands.
! 	(ix86_expand_builtin): Merge CODE_FOR_sse2_maskmovdqu_rex64 and
! 	CODE_FOR_sse2_maskmovdqu.  Special case SSE version of MASKMOVDQU
! 	expansion.  Update names for sse{,2,3}_ prefixes.  Remove *maskncmp*
! 	special cases.
! 	* config/i386/i386.h (IX86_BUILTIN_CMPNGTSS): New.
! 	(IX86_BUILTIN_CMPNGESS): New.
! 	* config/i386/i386.md (UNSPEC_FIX_NOTRUNC): New.
! 	(attr type): Add sselog1.
! 	(attr unit, attr memory): Handle it.
! 	(movti, movti_internal, movti_rex64): Move near other integer moves.
! 	(movtf, movtf_internal): Move near other fp moves.
! 	(SSEMODE, SSEMODEI, vec_setv2df, vec_extractv2df, vec_initv2df,
! 	vec_setv4sf, vec_extractv4sf, vec_initv4sf, movv4sf, movv4sf_internal,
! 	movv2df, movv2df_internal, mov<SSEMODEI>, mov<SSEMODEI>_internal,
! 	movmisalign<SSEMODE>, sse_movups_1, sse_movmskps, sse_movntv4sf,
! 	sse_movhlps, sse_movlhps, sse_storehps, sse_loadhps, sse_storelps,
! 	sse_loadlps, sse_loadss, sse_loadss_1, sse_movss, sse_storess,
! 	sse_shufps, addv4sf3, vmaddv4sf3, subv4sf3, vmsubv4sf3, negv4sf2,
! 	mulv4sf3, vmmulv4sf3, divv4sf3, vmdivv4sf3, rcpv4sf2, vmrcpv4sf2,
! 	rsqrtv4sf2, vmrsqrtv4sf2, sqrtv4sf2, vmsqrtv4sf2, sse_andv4sf3,
! 	sse_nandv4sf3, sse_iorv4sf3, sse_xorv4sf3, sse2_andv2df3,
! 	sse2_nandv2df3, sse2_iorv2df3, sse2_xorv2df3, sse2_andv2di3,
! 	sse2_nandv2di3, sse2_iorv2di3, sse2_xorv2di3, maskcmpv4sf3,
! 	vmmaskcmpv4sf3, sse_comi, sse_ucomi, sse_unpckhps, sse_unpcklps,
! 	smaxv4sf3, vmsmaxv4sf3, sminv4sf3, vmsminv4sf3, cvtpi2ps, cvtps2pi,
! 	cvttps2pi, cvtsi2ss, cvtsi2ssq, cvtss2si, cvtss2siq, cvttss2si,
! 	cvttss2siq, addv2df3, vmaddv2df3, subv2df3, vmsubv2df3, mulv2df3,
! 	vmmulv2df3, divv2df3, vmdivv2df3, smaxv2df3, vmsmaxv2df3, sminv2df3,
! 	vmsminv2df3, sqrtv2df2, vmsqrtv2df2, maskcmpv2df3, vmmaskcmpv2df3,
! 	sse2_comi, sse2_ucomi, sse2_movmskpd, sse2_pmovmskb, sse2_maskmovdqu,
! 	sse2_maskmovdqu_rex64, sse2_movntv2df, sse2_movntv2di, sse2_movntsi,
! 	cvtdq2ps, cvtps2dq, cvttps2dq, cvtdq2pd, cvtpd2dq, cvttpd2dq,
! 	cvtpd2pi, cvttpd2pi, cvtpi2pd, cvtsd2si, cvtsd2siq, cvttsd2si,
! 	cvttsd2siq, cvtsi2sd, cvtsi2sdq, cvtsd2ss, cvtss2sd, cvtpd2ps,
! 	cvtps2pd, addv16qi3, addv8hi3, addv4si3, addv2di3, ssaddv16qi3,
! 	ssaddv8hi3, usaddv16qi3, usaddv8hi3, subv16qi3, subv8hi3, subv4si3,
! 	subv2di3, sssubv16qi3, sssubv8hi3, ussubv16qi3, ussubv8hi3, mulv8hi3,
! 	smulv8hi3_highpart, umulv8hi3_highpart, sse2_umulsidi3,
! 	sse2_umulv2siv2di3, sse2_pmaddwd, sse2_uavgv16qi3, sse2_uavgv8hi3,
! 	sse2_psadbw, sse2_pinsrw, sse2_pextrw, sse2_pshufd, sse2_pshuflw,
! 	sse2_pshufhw, eqv16qi3, eqv8hi3, eqv4si3, gtv16qi3, gtv8hi3,
! 	gtv4si3, umaxv16qi3, smaxv8hi3, uminv16qi3, sminv8hi3, ashrv8hi3,
! 	ashrv4si3, lshrv8hi3, lshrv4si3, lshrv2di3, ashlv8hi3, ashlv4si3,
! 	ashlv2di3, sse2_ashlti3, sse2_lshrti3, sse2_unpckhpd, sse2_unpcklpd,
! 	sse2_packsswb, sse2_packssdw, sse2_packuswb, sse2_punpckhbw,
! 	sse2_punpckhwd, sse2_punpckhdq, sse2_punpcklbw, sse2_punpcklwd,
! 	sse2_punpckldq, sse2_punpcklqdq, sse2_punpckhqdq, sse2_movupd,
! 	sse2_movdqu, sse2_movdq2q, sse2_movdq2q_rex64, sse2_movq2dq,
! 	sse2_movq2dq_rex64, sse2_loadd, sse2_stored, sse2_storehpd,
! 	sse2_loadhpd, sse2_storelpd, sse2_loadlpd, sse2_movsd, sse2_loadsd,
! 	sse2_loadsd_1, sse2_storesd, sse2_shufpd, sse2_clflush, sse2_mfence,
! 	mfence_insn, sse2_lfence, lfence_insn, mwait, monitor, addsubv4sf3,
! 	addsubv2df3, haddv4sf3, haddv2df3, hsubv4sf3, hsubv2df3, movshdup,
! 	movsldup, lddqu, loadddup, movddup): Move to sse.md.  Any with
! 	non-optabs meanings renamed with an "sse{,2,3}_" prefix at the
! 	same time.
! 	(SSEPUSH, push<SSEPUSH>): Remove.
! 	(MMXPUSH, push<MMXPUSH>): Remove.
! 	(sse_movaps, sse_movaps_1, sse_movups): Remove.
! 	(sse2_movapd, sse2_movdqa, sse2_movq): Remove.
! 	(sse2_andti3, sse2_nandti3, sse2_iorti3, sse2_xorti3): Remove.
! 	(sse_clrv4sf, sse_clrv2df, sse2_clrti): Remove.
! 	(maskncmpv4sf3, vmmaskncmpv4sf3): Remove.
! 	(maskncmpv2df3, vmmaskncmpv2df3): Remove.
! 	(ashrv8hi3_ti, ashrv4si3_ti, lshrv8hi3_ti, lshrv4si3_ti): Remove.
! 	(lshrv2di3_ti, ashlv8hi3_ti, ashlv4si3_ti, ashlv2di3_ti): Remove.
! 	* config/i386/athlon.md (athlon_sselog_load): Handle sselog1.
! 	(athlon_sselog_load_k8, athlon_sselog, athlon_sselog_k8): Likewise.
! 	* config/i386/ppro.md (ppro_sse_div_V4SF_load): Fix memory attr.
! 	(ppro_sse_log_V4SF_load): Similarly.  Handle sselog1.
! 	(ppro_sse_log_V4SF): Handle sselog1.
! 	* config/i386/predicates.md (const_0_to_1_operand): New.
! 	(const_0_to_255_mul_8_operand): New.
! 	(const_1_to_31_operand): Rename from const_int_1_31_operand.
! 	(const_2_to_3_operand, const_4_to_7_operand): New.
! 	* config/i386/sse.md: New file.
! 	(SSEMODE12, SSEMODE24, SSEMODE124, SSEMODE248, ssevecsize): New.
! 	(sse_movups): Rename from sse_movups_1.
! 	(sse_loadlss): Rename from sse_loadss_1.
! 	(andv4sf3, iorv4sf3, xorv4sf3, andv2df3): Remove the sse prefix
! 	from the name.
! 	(negv4sf2): Use ix86_expand_fp_absneg_operator.
! 	(absv4sf2, negv2df, absv2df): New.
! 	(addv4sf3): Add expander to call ix86_fixup_binary_operands_no_copy.
! 	(subv4sf3, mulv4sf3, divv4sf3, smaxv4sf3, sminv4sf3, andv4sf3,
! 	iorv4sf3, xorv4sf3, addv2df3, subv2df3, mulv2df3, divv2df3,
! 	smaxv2df3, sminv2df3, andv2df3, iorv2df3, xorv2df3, mulv8hi3,
! 	umaxv16qi3, smaxv8hi3, uminv16qi3, sminv8hi3): Likewise.
! 	(sse3_addsubv4sf3): Model correctly.
! 	sse3_haddv4sf3, sse3_hsubv4sf3, sse3_addsubv2df3, sse3_haddv2df3,
! 	sse3_hsubv2df3, sse2_ashlti3, sse2_lshrti3): Likewise.
! 	(sse_movhlps): Model with vec_select+vec_concat.
! 	(sse_movlhps, sse_unpckhps, sse_unpcklps, sse3_movshdup,
! 	sse3_movsldup, sse_shufps, sse_shufps_1, sse2_unpckhpd, sse3_movddup,
! 	sse2_unpcklpd, sse2_shufpd, sse2_shufpd_1, sse2_punpckhbw,
! 	sse2_punpcklbw, sse2_punpckhwd, sse2_punpcklwd, sse2_punpckhdq,
! 	sse2_punpckldq, sse2_punpckhqdq, sse2_punpcklqdq, sse2_pshufd,
! 	sse2_pshufd_1, sse2_pshuflw, sse2_pshuflw_1, sse2_pshufhw,
! 	sse2_pshufhw_1): Likewise.
! 	(neg<SSEMODEI>2, one_cmpl<SSEMODEI>2): New.
! 	(add<SSEMODEI>3, sse2_ssadd<SSEMODE12>3, sse2_usadd<SSEMODE12>3,
! 	sub<SSEMODEI>3, sse2_sssub<SSEMODE12>3, sse2_ussub<SSEMODE12>3,
! 	ashr<SSEMODE24>3, lshr<SSEMODE248>3, sse2_eq<SSEMODE124>3,
! 	sse2_gt<SSEMODDE124>3, and<SSEMODEI>3, sse_nand<SSEMODEI>3,
! 	ior<SSEMODEI>3, xor<SSEMODEI>3): Macroize from existing patterns.
! 	(addv4sf3, sse_vmaddv4sf3, mulv4sf3, sse_vmmulv4sf3, smaxv4sf3,
! 	sse_vmsmaxv4sf3, sminv4sf3, sse_vmsminv4sf3, addv2df3, sse2_vmaddv2df3,
! 	mulv2df3, sse2_vmmulv2df3, smaxv2df3, sse2_vmsmaxv2df3, sminv2df3,
! 	sse2_vmsminv2df3, umaxv16qi3, smaxv8hi3, uminv16qi3
! 	sminv8hi3): Mark commutative
! 	operands.  Use ix86_binary_operator_ok.
! 	(sse_unpckhps, sse_unpcklps, sse2_packsswb, sse2_packssdw,
! 	sse2_packuswb, sse2_punpckhbw, sse2_punpcklbw, sse2_punpckhwd,
! 	sse2_punpcklwd, sse2_punpckhdq, sse2_punpckldq, sse2_punpckhqdq,
! 	sse2_punpcklqdq): Allow operand2 in memory.
! 	(sse_movhlps, sse_movlhps, sse2_unpckhpd, sse2_unpcklpd
! 	sse2_movsd): Add memory alternatives.
! 	(sse_storelps): Turn expander into an insn; split after reload.
! 	(sse_storess, sse2_loadhpd, sse2_loadlpd): Add non-xmm inputs.
! 	(sse2_storehpd, sse2_storelpd): Add non-xmm outputs.
  
! 2005-01-08  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	* configure.ac (DWARF-2 debug_line): Use objdump.
! 	* configure: Regenerate.
  
! 2005-01-08  Jeff Law  <law@redhat.com>
! 	    Diego Novillo  <dnovillo@redhat.com>
  
! 	PR tree-optimization/18241
! 	* tree-nrv.c (tree_nrv): Ignore volatile return values.
! 	* tree-ssa-dse.c (dse_optimize_stmt): Do not optimize
! 	statements with volatile operands.
! 	* tree-ssa-operands.c (add_stmt_operand): Do add volatile
! 	operands after marking a statement with has_volatile_ops.
  
! 2005-01-08  Roger Sayle  <roger@eyesopen.com>
  
! 	* tree.c (int_fits_type_p): Always honor integer constant
! 	TYPE_MIN_VALUE and TYPE_MAX_VALUE if they exist.
  
! 2005-01-08  Roger Sayle  <roger@eyesopen.com>
  
! 	* ifcvt.c (find_if_case_1): Reinstate 2005-01-04 change, now that
! 	the latent bug in rtl_delete_block has been resolved.
  
! 2005-01-08  Richard Sandiford  <rsandifo@redhat.com>
  
! 	* config/mips/t-iris6 (MULTILIB_DIRNAMES): Use -mabi argument values.
! 	(MULTILIB_OSDIRNAMES): Use the standard lib, lib32 and lib64.
  
! 2005-01-08  Richard Sandiford  <rsandifo@redhat.com>
  
! 	* config/mips/t-slibgcc-irix (SHLIB_LINK): Install a copy of the
! 	library as @multilib_dir@/$(SHLIB_SONAME).
  
! 2005-01-07  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	* configure.ac (HAVE_AS_OFFSETABLE_LO10): Fix typo.
! 	* configure: Regenerate.
  
! 2005-01-07  Jakub Jelinek  <jakub@redhat.com>
  
! 	* c-common.c (handle_mode_attribute): For ENUMERAL_TYPE, also copy
! 	TYPE_MODE.
  
! 2005-01-07  David Edelsohn  <edelsohn@gnu.org>
  
! 	PR target/13674
! 	* config/rs6000/rs6000.c (rs6000_legitimize_reload_address):
! 	Convert non-word aligned offset address using ld/std into
! 	indirect address.
  
! 2005-01-07  Richard Henderson  <rth@redhat.com>
  
! 	* config/i386/i386.md (sse_loadhps splitter): Fix operand number typo.
  
! 2005-01-07  Richard SAndiford  <rsandifo@redhat.com>
  
! 	* tree.h (IS_EXPR_CODE_CLASS): Use a straight-forward range check.
  
! 2005-01-07  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/19283
! 	* fold-const.c (fold_widened_comparison): Return NULL if shorter_type
! 	is not shorter than the original type.
  
! 	PR rtl-optimization/19012
! 	* config/i386/i386.md (addqi_1_slp): Set memory attribute.
  
! 	PR rtl-optimization/18861
! 	* cfgbuild.c (BLOCK_USED_BY_TABLEJUMP): Define.
! 	(FULL_STATE): Define.
! 	(mark_tablejump_edge): New function.
! 	(purge_dead_tablejump_edges): New function.
! 	(find_bb_boundaries): Use it.
  
! 	PR tree-optimization/18828
! 	* builtins.c (expand_builtin_next_arg): Remove argument and all
! 	the argument checking.
! 	(expand_builtin): Adjust caller.
! 	(expand_builtin_va_start): Likewise.  Remove error for too many
! 	arguments.
! 	(fold_builtin_next_arg): Issue error for too many arguments.
! 	After checking arguments, replace them with magic arguments that
! 	prevent further checking of the args.
  
! 2005-01-06  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
  
! 	* pa64-hpux.h (STARTFILE_SPEC): Fix typo in spec.
  
! 2005-01-06  Roger Sayle  <roger@eyesopen.com>
  
! 	PR target/6077
! 	* gcc.c (input_suffix_matches): Tweak the semantics of %{.s:...}
! 	and %{.S:...} (and their negative variants) to test whether the
! 	input file is assembler or pre-processed-assembler independent of
! 	the actual filename extension.
  
! 2005-01-06  Roger Sayle  <roger@eyesopen.com>
  
! 	* simplify-rtx.c (simplify_subreg): Simplify truncations of shifts
! 	of sign or zero extended values.
  
! 2005-01-06  Geoffrey Keating  <geoffk@apple.com>
  
! 	* c-cppbuiltin.c (builtin_define_float_constants): Set __*_EPSILON__
! 	for IBM long double format correctly.
  
! 2005-01-06  Daniel Berlin <dberlin@dberlin.org>
  
! 	Fix PR tree-optimization/18792
  
! 	* tree-data-ref.c (build_classic_dist_vector): Change first_loop
! 	to first_loop_depth, and use loop depth instead of loop number.
! 	(build_classic_dir_vector): Ditto.
! 	(compute_data_dependences_for_loop): Use depth, not loop number.
! 	* tree-loop-linear.c (try_interchange_loops): Use loop depth, not loop
! 	number. Pass in loops, instead of loop numbers.
! 	(gather_interchange_stats): Ditto.
! 	(linear_transform_loops): Ditto.
  
! 2005-01-06  Richard Sandiford  <rsandifo@redhat.com>
  
! 	PR rtl-opt/13299
! 	* loop.c (get_monotonic_increment, biased_biv_fits_mode_p,
! 	biv_fits_mode_p, extension_within_bounds_p): New functions.
! 	(check_ext_dependent_givs): Use them.
  
! 2005-01-06  Roger Sayle  <roger@eyesopen.com>
  
! 	* cfgrtl.c (rtl_delete_block): A basic block may be followed by
! 	more than one barrier, in which case we should delete them all.
  
! 2005-01-06  Tobias Schlueter  <tobias.schlueter@physik.uni-muenchen.de>
  
! 	* gcc.c (process_command): Change year in 'gcc --version' to 2005.
  
! 2005-01-05  Daniel Berlin  <dberlin@dberlin.org>
  
! 	Fix PR middle-end/19286
! 	Fix PR debug/19267
! 	* dwarf2out.c (gen_subprogram_die): If we've already tried to
! 	output this subprogram, simply ignore this attempt to do it again.
! 	(add_abstract_origin_attribute): Don't abort trying to add the abstract
! 	origin attribute if it's not possible.
! 	(gen_block_die): Don't ignore subblocks of "unused" blocks.
! 	(decls_for_scope): Ditto.
! 	* gimple-low.c (mark_blocks_with_used_subblocks): Remove.
! 	(mark_used_blocks): Don't call mark_blocks_with_used_subblocks.
  
! 2005-01-05  Richard Henderson  <rth@redhat.com>
  
! 	PR target/11327
! 	* config/i386/i386.c (BUILTIN_DESC_SWAP_OPERANDS): New.
! 	(bdesc_2arg): Use it.
! 	(ix86_expand_binop_builtin): Force operands into registers
! 	when optimizing.
! 	(ix86_expand_unop_builtin, ix86_expand_unop1_builtin,
! 	ix86_expand_sse_compare, ix86_expand_sse_comi,
! 	ix86_expand_builtin): Likewise.
  
! 2005-01-05  Richard Henderson  <rth@redhat.com>
  
! 	* config/ia64/ia64.c (rtx_needs_barrier): Handle CONST_VECTOR
! 	and VEC_SELECT.
! 	* config/ia64/vect.md (mulv8qi3): Re-implement with mix_[rl].
! 	(mulv4hi3): Set itanium_class mmmul.
! 	(fpack_sfxf, fpack_xfsf, fpack_xfxf): Remove.
! 	(fpack): Rename from fpack_sfsf.
  
! 2005-01-05  Richard Henderson  <rth@redhat.com>
  
! 	PR rtl-opt/10692
! 	* reload1.c (do_input_reload): Restrict the optimization deleteing
! 	a previous output reload to RELOAD_FOR_INPUT.
  
! 2005-01-05  Steven Bosscher  <stevenb@suse.de>
  
! 	* combine.c (expand_compound_operation)  <ZERO_EXTRACT>: Add
! 	comment that we fall through after case.
! 	(mark_used_regs_combine): Don't expect a SIGN_EXTRACT in a SET_DEST.
! 	(distribute_links): Likewise.
! 	* cse.c (cse_insn): Likewise.
! 	* cselib.c (cselib_invalidate_mem): Likewise.
! 	* df.c: Update comments at the top of the file.
! 	(read_modify_subreg_p): Update comments here too.
! 	(df_def_record_1): Don't expect a SIGN_EXTRACT in a SET_DEST.
! 	* flow.c (mark_set_1): Likewise.
! 	(mark_used_regs): Likewise.
! 	* gcse.c (mems_conflict_for_gcse_p): Likewise.
! 	(canon_list_insert): Likewise.
! 	(mark_set): Likewise.
! 	(try_replace_reg): Likewise.
! 	(store_killed_in_insn): Likewise.
! 	* loop.c (count_one_set): Likewise.
! 	(basic_induction_var): Likewise.
! 	* postreload-gcse.c (find_mem_conflicts): Likewise.
! 	* postreload.c (reload_combine_note_store): Likewise.
! 	(move2add_note_store): Likewise.
! 	* reload.c (find_equiv_reg): Likewise.
! 	(mark_referenced_resources): Likewise.
! 	* rtlanal.c (set_noop_p): Likewise.
! 	(note_stores): Likewise.
! 	(note_uses): Likewise.
! 	* sched-deps.c (sched_analyze_1): Likewise.
! 	* sched-rgn.c (check_live_1): Likewise.
! 	(update_live_1): Likewise.
! 	* config/i860/i860.c: Likewise.
  
! 	* rtl.dec (SIGN_EXTRACT): Document that this cannot appear as
! 	an lvalue.
! 	(ZERO_EXTRACT): Mention that this one can be an lvalue.
  
! 	* doc/rtl.texi: Update documentation for bit-fields and SET.
  
! 2005-01-05  Roger Sayle  <roger@eyesopen.com>
  
! 	* ifcvt.c (find_if_case_1): Revert 2005-01-04 change.
  
! 2005-01-05  Jan Hubicka  <jh@suse.cz>
! 	    Richard Henderson  <rth@redhat.com>
  
! 	PR target/18910
! 	* config/i386/i386.c (ix86_expand_move): Handle tls symbols
! 	with an offset.
  
! 2005-01-05  Richard Henderson  <rth@redhat.com>
  
! 	PR target/12902
! 	* config/i386/i386.md (sse_movhps, sse_movlps): Remove.
! 	(sse_shufps): Change operand 3 to const_int_operand.
! 	(sse2_storelps): Fix typo in template.
! 	(sse_storehps, sse_loadhps, sse_storelps, sse_loadlps): New.
! 	* config/i386/i386.c (ix86_expand_vector_move_misalign): Use them.
! 	(ix86_expand_builtin): Likewise.
  
! 2005-01-05  Julian Brown  <julian@codesourcery.com>
  
! 	* config/arm/arm.c (arm_return_in_memory): Treat complex types
! 	as aggregates for AAPCS ABIs.
  
! 2005-01-05  Stan Shebs  <shebs@apple.com>
  
! 	* unwind-dw2-fde-darwin.c (examine_objects): Use 64-bit
! 	Mach-O getters if ppc64.
! 	* config/darwin.c (darwin_asm_output_dwarf_delta): Obey
! 	size argument.
! 	* config/darwin.h (ASM_PREFERRED_EH_DATA_FORMAT): Use
! 	signed four-byte field for global code case.
! 	(STARTFILE_SPEC): Avoid crt2.o for 64-bit compilation.
  
! 2005-01-05  Roger Sayle  <roger@eyesopen.com>
  
! 	PR middle-end/19100
! 	* c-common.c: Include real.h.
! 	(c_common_truthvalue_conversion): Avoid destructively modifying expr.
! 	Correctly handle TREE_CONSTANT_OVERFLOW for INTEGER_CST.
! 	Correctly handle TREE_CONSTANT_OVERFLOW and NaNs for REAL_CST.
! 	* Makefile.in (c-common.o): Update dependencies.
  
! 2005-01-05  Joseph S. Myers  <joseph@codesourcery.com>
  
! 	* c-parse.in (asm_string): Add trailing semicolon.
  
! 2005-01-05  Joseph S. Myers  <joseph@codesourcery.com>
  
! 	* c-parse.in (asm_string): New.  Don't allow wide strings in
! 	'asm'.
! 	(simple_asm_expr, asm_argument, asm_operand, asm_clobbers): Use
! 	asm_string instead of STRING.
  
! 2005-01-05  Joseph S. Myers  <joseph@codesourcery.com>
  
! 	* c-typeck.c (constructor_no_implicit): Remove.
! 	(set_designator, process_init_element): Don't check
! 	constructor_no_implicit.
  
! 2005-01-05  J"orn Rennecke <joern.rennecke@st.com>
! 	    Kaz Kojima  <kkojima@gcc.gnu.org>
  
! 	PR target/16482
! 	* lcm.c (create_pre_exit): New.
! 	(optimize_mode_switching): In MODE_ENTRY / MODE_EXIT case, set
! 	ENTRY_EXIT_EXTRA to 3.  Use create_pre_exit.
  
! 2004-01-05  Richard Earnshaw  <rearnsha@arm.com>
  
! 	* arm.h (TARGET_OPTIONS): Correctly record -mhard-float and
! 	-msoft-float in target_float_switch.
! 	* arm.c (arm_override_options): Fix processing of target_float_switch.
  
! 2004-01-05  Richard Earnshaw  <rearnsha@arm.com>
  
! 	* arm/vfp.md (arm_movsi_vfp): Hide VFP register classes from register
! 	preferencing.
  
! 2004-01-05  Uros Bizjak  <uros@kss-loka.si>
  
! 	* doc/invoke.texi (Intel 386 and AMD x86-64 Options):
! 	Replace i387 with 'i386 compiler' in -mfpmath=sse option.
  
! 2005-01-04  Roger Sayle  <roger@eyesopen.com>
  
! 	* ifcvt.c (find_if_case_1): Avoid creating an empty forwarder block,
! 	if deleting the then-block allows the test-block to fallthru to the
! 	else-block.
  
! 2005-01-04  Andrew Pinski  <pinskia@physics.uc.edu>
  
! 	PR c/19152
! 	* c-decl.c (diagnose_mismatched_decls): Accept "extern inline" declared
! 	after the full declaration if the are in two different TUs.
  
! 2005-01-04  Richard Henderson  <rth@redhat.com>
  
! 	PR tree-opt/19158
! 	* tree-sra.c (generate_one_element_init): Just
! 	call gimplify_and_add.
! 	(generate_element_init): Record the
! 	new referenced variables and mark them for renaming
! 	and split out to ...
! 	(generate_element_init_1): This.
! 	(scalarize_init): Don't call push_gimplify_context/
! 	pop_gimplify_context.
  
! 2005-01-04  Geoffrey Keating  <geoffk@apple.com>
  
! 	* toplev.c (get_src_pwd): Handle failure of getpwd().
  
! 2005-01-04  Roger Sayle  <roger@eyesopen.com>
  
! 	* fold-const.c (fold_single_bit_test): Delete unreachable handling
! 	of TRUTH_NOT_EXPR.
! 	(fold): Don't call fold_single_bit_test with a TRUTH_NOT_EXPR, as
! 	all the cases handled by it are inverted by invert_truthvalue.
  
! 2005-01-04  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	* config/sparc/sparc.md (save_register_windowdi): Add missing mode.
! 	(save_register_windowsi): Likewise.
  
! 2005-01-04  Richard Henderson  <rth@redhat.com>
  
! 	* tree-mudflap.c (mf_varname_tree): Fix thinko setting declname.
  
! 2005-01-04  Uros Bizjak  <uros@kss-loka.si>
  
! 	PR middle-end/17767
! 	* cse.c (fold_rtx) [RTX_COMPARE, RTX_COMM_COMPARE]: Don't attempt
! 	any simplifications of vector mode comparison operators.
! 	* simplify-rtx.c (simplify_relational_operation): Fix variable name.
  
! 2005-01-04  Paolo Bonzini  <bonzini@gnu.org>
! 	    Devang Patel  <dpatel@apple.com>
  
! 	PR tree-optimization/18308
! 	* tree-if-conv.c (add_to_dst_predicate_list): Gimplify
! 	the operands before creating a new expression.
! 	* dojump.c (do_jump): Make drop_through_label available
! 	for all cases.  Add expansion of COND_EXPR.
  
! 2005-01-04  Ira Rosen  <irar@il.ibm.com>
  
! 	* tree-vectorizer.c (vect_analyze_offset_expr): Test for
! 	INTEGER_CST instead of TREE_CONSTANT.
! 	(vect_gen_niters_for_prolog_loop): Test for INTEGER_CST
! 	instead of TREE_CONSTANT.
! 	(vect_analyze_pointer_ref_access): Test for INTEGER_CST
! 	instead of TREE_CONSTANT.
  
! 2005-01-04  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	* tree-eh.c (replace_goto_queue): Return early if the queue is empty.
  
! 2005-01-04  Uros Bizjak  <uros@kss-loka.si>
  
! 	PR target/19240
! 	* config/i386/i386.md (*fop_df_1_i387): Disable for TARGET_SSE_MATH.
! 	(*fop_df_1_i387): Disable for (TARGET_SSE2 && TARGET_SSE_MATH).
  
! 2005-01-03  Richard Henderson  <rth@redhat.com>
  
! 	* fold-const.c (force_fit_type): Cope with types larger than 2 HWI.
! 	(fold_convert_const_int_from_int, fold_convert_const_int_from_real,
! 	fold_convert_const_real_from_real): Split out from ...
! 	(fold_convert_const): ... here.
  
! 2005-01-03  Richard Henderson  <rth@redhat.com>
  
! 	PR target/19235
! 	* config/i386/i386.md (movdi_2): Separate SSE1 and SSE2 alternatives.
! 	(mov<MMXMODEI>_internal): Likewise.
! 	(movdf_nointeger): Prefer Y while not preferring, but allowing, x.
! 	Add V2SF case; use it for SSE1; don't use TI.
! 	(movdf_integer): Likewise.
! 	(mov<SSEMODEI>_internal, movti_internal): Force V4SF for SSE1.
  
! 2005-01-03  Ira Rosen  <irar@il.ibm.com>
  
! 	* tree-vectorizer.c (vect_strip_conversions): New function.
! 	(vect_analyze_offset_expr): Call vect_strip_conversions. Add
! 	check for binary class.
  
! 2005-01-03  Daniel Berlin  <dberlin@dberlin.org>
  
! 	Fix PR debug/17924
! 	Fix PR debug/19191
! 	* dwarf2out.c (block_ultimate_origin): Follow decl origin if origin
! 	is a decl.
! 	* gimple-low.c (mark_blocks_with_used_vars): New function.
! 	(mark_blocks_with_used_subblocks): Ditto.
! 	(mark_used_blocks): Ditto.
! 	(pass_mark_used_blocks): New pass.
! 	* tree-inline.c: Include debug.h.
! 	(expand_call_inline): Call outlining_inline_function here.
! 	* tree-optimize.c (init_tree_optimization_passes): Add
! 	pass_mark_used_blocks.
! 	* tree-pass.h (pass_mark_used_blocks): New.
! 	* Makefile.in (tree-inline.o): Add debug.h dependency.
  
! 2005-01-03  Geoffrey Keating  <geoffk@apple.com>
  
! 	* config/darwin.c (darwin_handle_weak_import_attribute): Permit
! 	VAR_DECLs to have weak_import attribute.
  
! 	* config/rs6000/darwin-fallback.c: Use 'ucontext_t' rather than
! 	'struct ucontext'.
  
! 2004-01-03  Steven Bosscher  <stevenb@suse.de>
  
! 	* passes.c (rest_of_compilation): Don't run regmove if only
! 	flag_expensive_optimizations, require flag_regmove instead.
  
! 2005-01-03  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	* config/sparc/litecoff.h (TARGET_OS_CPP_BUILTINS): Do not
! 	register "sparc".
! 	* config/sparc/sysv4-only.h (TARGET_OS_CPP_BUILTINS): Likewise.
! 	* config/sparc/rtemself.h (TARGET_SUB_OS_CPP_BUILTINS): Likewise.
! 	* config/sparc/sol2-64.h (TARGET_SUB_OS_CPP_BUILTINS): Delete.
! 	* config/sparc/sp64-elf.h (TARGET_SUB_OS_CPP_BUILTINS): Likewise.
  
! 2005-01-03  Richard Henderson  <rth@redhat.com>
  
! 	* config/ia64/ia64.c (TARGET_VECTOR_MODE_SUPPORTED_P): New.
! 	(ia64_const_ok_for_letter_p): New.
! 	(ia64_const_double_ok_for_letter_p): New.
! 	(ia64_extra_constraint): New.
! 	(ia64_expand_vecint_compare): New.
! 	(ia64_expand_vcondu_v2si): New.
! 	(ia64_expand_vecint_cmov): New.
! 	(ia64_expand_vecint_minmax): New.
! 	(ia64_print_operand): Add 'v'.
! 	(ia64_preferred_reload_class): New.
! 	(ia64_vector_mode_supported_p): New.
! 	* config/ia64/ia64.h (UNITS_PER_SIMD_WORD): New.
! 	(PREFERRED_RELOAD_CLASS): Move to function.
! 	(CONST_OK_FOR_LETTER_P): Move to function.
! 	(CONST_DOUBLE_OK_FOR_LETTER_P): Move to function.
! 	(CONSTRAINT_OK_FOR_Q, CONSTRAINT_OK_FOR_R): Remove.
! 	(CONSTRAINT_OK_FOR_S, CONSTRAINT_OK_FOR_T): Remove.
! 	(EXTRA_CONSTRAINT): Move to function.
! 	* config/ia64/ia64.md: Include vect.md.
! 	(itanium_class): Add mmalua.
! 	(type): Handle it.
! 	* config/ia64/itanium1.md (1_mmalua): New.  Add it to bypasses.
! 	(1b_mmalua): New.
! 	* config/ia64/itanium2.md (2_mmalua, 2b_mmalua): Similarly.
! 	* config/ia64/predicates.md (gr_reg_or_0_operand): Accept any
! 	CONST0_RTX.
! 	(const_int_2bit_operand): New.
! 	(fr_reg_or_0_operand): New.
! 	* config/ia64/ia64-modes.def: Add vector modes.
! 	* config/ia64/ia64-protos.h: Update.
! 	* config/ia64/vect.md: New file.
  
! 2005-01-03  Richard Henderson  <rth@redhat.com>
  
! 	* simplify-rtx.c (simplify_binary_operation): Handle VEC_CONCAT.
  
! 2005-01-03  Uros Bizjak  <uros@kss-loka.si>
  
! 	PR target/19236
! 	* config/i386/i386.c (log1psf2): Change mode of operands[0,1]
! 	to SFmode.
! 	(log1pdf2): Change mode of operands[0,1] to DFmode.
  
! 2005-01-03  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	* config/sparc/sparc.h (SPARC_RELAXED_ORDERING): Define to false.
! 	* config/sparc/linux.h (SPARC_RELAXED_ORDERING): Define to true.
! 	* config/sparc/linux64.h (SPARC_RELAXED_ORDERING): Likewise.
! 	* config/sparc/sparc.c (TARGET_RELAXED_ORDERING): Define to
! 	SPARC_RELAXED_ORDERING.
  
! 2005-01-03  Richard Henderson  <rth@redhat.com>
! 	    Uros Bizjak  <uros@kss-loka.si>
  
! 	PR target/14631
! 	* config/i386/i386.c (ix86_expand_builtin): [IX86_BUILTIN_PINSRW,
! 	IX86_BUILTIN_PINSRW128]: Fix wrong selector range in error message.
! 	* config/i386/i386.md (mmx_pinsrw, sse2_pinsrw): Fix selector
! 	handling.
! 	(*mmx_pinsrw, *sse2_pinsrw): New patterns.
! 	* config/i386/i386/predicates.md (const_pow2_1_to_8_operand,
! 	const_pow2_1_to_128_operand): New predicates.
  
! 2005-01-02  Greg McGary  <greg@mcgary.org>
  
! 	* tree-mudflap.c (mf_varname_tree): decl_printable_name handles
! 	anonymous decls.
! 	(mf_xform_derefs_1) [RESULT_DECL, STRING_CST]: Handle as innermost
! 	object.  [ptr_type]: Remove unused variable.
! 	Remember nearest addressable array-element or record-component
! 	when checking bitfield components.  Tolerate empty BIND_EXPR.
  
! 2005-01-01  Richard Henderson  <rth@redhat.com>
  
! 	* tree-vectorizer.c (vect_analyze_offset_expr): Strip conversions
! 	that don't narrow the value.  Fail for other conversions.
  
! 2005-01-01  Richard Henderson  <rth@redhat.com>
  
! 	PR c/19031
! 	* c-decl.c (pop_file_scope): Call maybe_apply_pending_pragma_weaks.
! 	* c-lang.c (finish_file): Don't do it here.
! 	* objc/objc-act.c (objc_finish_file): Likewise.
  
! 	* cgraph.c (decl_assembler_name_equal): New.
! 	(cgraph_node_for_asm, cgraph_varpool_node_for_asm): New.
! 	(cgraph_varpool_node): Actually link up cgraph_varpool_nodes.
! 	* cgraph.h (struct cgraph_varpool_node): Add next.
! 	(cgraph_node_for_asm, cgraph_varpool_node_for_asm): Declare.
! 	* varasm.c (assemble_alias): Mark the target as needed.
  
! 2005-01-01  Andrew Pinski  <pinskia@physics.uc.edu>
  
! 	PR middle-end/19221
! 	* function.c (get_arg_pointer_save_area): Use entry_of_function
! 	instead of get_insns.
  
! 2005-01-01  Roger Sayle  <roger@eyesopen.com>
! 	    Andrew Pinski  <pinskia@physics.uc.edu>
! 	    James E. Wilson  <wilson@specifixinc.com>
  
! 	PR rtl-optimization/12092
! 	* loop.c (emit_prefetch_instructions): Do nothing if PREFETCH_BLOCK
! 	is zero.
  
! 2005-01-01  Roger Sayle  <roger@eyesopen.com>
! 	    Olivier Hainque  <hainque@act-europe.fr>
  
! 	* tree.c (int_fits_type_p): A narrower type always fits in a
! 	wider one, except for negative values into unsigned types.
  
! 2005-01-01  Roger Sayle  <roger@eyesopen.com>
  
! 	* tree.c (int_fits_type_p): Compare the result of force_fit_type
! 	with the original constant rather than require TREE_OVERFLOW.
  
! 2005-01-01  Steven Bosscher  <stevenb@suse.de>
  
! 	PR middle-end/17544
! 	* c-decl.c (finish_function): If compiling C99, annotate the
! 	compiler generated return with the current file name and line 0.
! 	* tree-cfg.c (remove_useless_stmts_warn_notreached): Only warn if
! 	the source line is greater than 0.
! 	(remove_bb): Likewise.
  
! See ChangeLog.12 for earlier changes.
diff -Nrcpad gcc-3.4.3/gcc/ChangeLog.10 gcc-4.0.0/gcc/ChangeLog.10
*** gcc-3.4.3/gcc/ChangeLog.10	Sat Jan  3 19:58:37 2004
--- gcc-4.0.0/gcc/ChangeLog.10	Tue Mar  2 00:14:08 2004
*************** Sat Oct 11 12:24:23 CEST 2003  Jan Hubic
*** 8872,8878 ****
  	(m68k_initial_elimination_offset): New function.
  	(m68k_output_function_prologue): ColdFire-specific movem handling.
  	(m68k_output_function_epilogue): Likewise.
! 	* config/m68k/m68k.h (FIRST_PSEOUDO_REGISTER): Make room for argptr reg.
  	(ARG_POINTER_REGNUM): Add new definition.
  	(INITIAL_FRAME_POINTER_OFFSET): Remove macro.
  	(ELIMINABLE_REGS): Define new macro, like in ix86 back-end.
--- 8872,8878 ----
  	(m68k_initial_elimination_offset): New function.
  	(m68k_output_function_prologue): ColdFire-specific movem handling.
  	(m68k_output_function_epilogue): Likewise.
! 	* config/m68k/m68k.h (FIRST_PSEUDO_REGISTER): Make room for argptr reg.
  	(ARG_POINTER_REGNUM): Add new definition.
  	(INITIAL_FRAME_POINTER_OFFSET): Remove macro.
  	(ELIMINABLE_REGS): Define new macro, like in ix86 back-end.
diff -Nrcpad gcc-3.4.3/gcc/ChangeLog.11 gcc-4.0.0/gcc/ChangeLog.11
*** gcc-3.4.3/gcc/ChangeLog.11	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ChangeLog.11	Thu Jul  1 12:47:14 2004
***************
*** 0 ****
--- 1,21016 ----
+ 2004-06-30  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* expmed.c (expand_shift): Consider expanding LSHIFT_EXPR by a
+ 	constant as a sequence of additions depending upon the rtx_costs.
+ 	(synth_mult): Update the "observed" cost of a shift, based upon
+ 	the above optimization.
+ 
+ 2004-06-28  Geoffrey Keating  <geoffk@apple.com>
+ 	    Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	PR 15813
+ 	* dwarf2out.c (reg_save): Output DW_CFA_same_value when a
+ 	register is saved in itself.
+ 	(initial_return_save): If the return address is a register,
+ 	it's already there, don't bother to mention it in the CFI.
+ 	(struct queued_reg_save): Add field saved_reg.
+ 	(struct reg_saved_in_data): New.
+ 	(regs_saved_in_regs): New.
+ 	(num_regs_saved_in_regs): New.
+ 	(queue_reg_save): Add extra parameter to specify register saved
+ 	in register.  Remove duplicate entries from queue.  Add comment
+ 	for function.
+ 	(flush_queued_reg_saves): Handle registers saved in registers.
+ 	Update regs_saved_in_regs.  Add comment for function.
+ 	(clobbers_queued_reg_save): Add comment for function.  Allow
+ 	for regs_saved_in_regs.
+ 	(reg_saved_in): New.
+ 	(dwarf2out_frame_debug_expr): Handle saving registers in other
+ 	registers.
+ 	(dwarf2out_frame_debug): Reset regs_saved_in_regs.
+ 	* unwind-dw2.c (execute_cfa_program): Correct handling of
+ 	DW_CFA_same_value.  Add FIXME comment about incorrect implementation
+ 	of DW_CFA_restore_extended.
+ 	* config/rs6000/rs6000.c (rs6000_emit_prologue): Let
+ 	dwarf2out_frame_debug_expr see instructions that save registers
+ 	in other registers or save those other registers in memory.
+ 
+ 	* unwind-dw2.c (DWARF_FRAME_REGISTERS): Move to unwind-dw2.h.
+ 	(_Unwind_FrameState): Likewise.
+ 	* unwind-dw2.h: New.
+ 	* Makefile.in (LIB2ADDEHDEP): Add unwind-dw2.h.
+ 	* config/rs6000/darwin-fallback.c: New file.
+ 	* config/rs6000/darwin.h (MD_FALLBACK_FRAME_STATE_FOR): Define.
+ 	* config/rs6000/t-darwin (LIB2FUNCS_EXTRA): Add darwin-fallback.o.
+ 
+ 2004-07-01  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_mixed_function_arg): Rewrite.
+ 	(function_arg): Use rs6000_arg_size rather than CLASS_MAX_NREGS in
+ 	calculating gpr size for altivec.  Simplify and correct
+ 	rs6000_mixed_function_arg calls.  Call rs6000_mixed_function_arg
+ 	for ABI_V4 gpr case too.  Fix off-by-one error in long double
+ 	reg test.  Generate the correct PARALLEL to handle long double
+ 	for ABI_AIX 32-bit.  Use this for -m32 -mpowerpc64 fpr case too.
+ 	(function_arg_partial_nregs): Align before calculating regs left.
+ 	Don't return info on partial fprs when we need info on gprs.
+ 	Correct long double fpr off-by-one error.
+ 
+ 2004-06-30  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	* pa-protos.h (prefetch_operand): Add prototype.
+ 	* pa.c (prefetch_operand): New function.
+ 	* pa.h (prefetch_operand): Add to PREDICATE_CODES.
+ 	* pa.md (prefetch, prefetch_32, prefetch_64): New prefetch patterns.
+ 
+ 2004-06-30  Richard Henderson  <rth@redhat.com>
+ 
+ 	* function.h (struct function): Remove x_whole_function_mode_p.
+ 	* c-decl.c (store_parm_decls): Don't set it.
+ 	* tree-optimize.c (tree_rest_of_compilation): Likewise.
+ 	* passes.c (rest_of_compilation): Don't check it.
+ 	* stmt.c (expand_fixup): Likewise.
+ 	* function.c (fixup_var_refs_insn): Remove unused variable.
+ 
+ 2004-06-30  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree.h (immediate_size_expand): Delete.
+ 	* stor-layout.c (immediate_size_expand): Delete.
+ 	(variable_size): Don't look at it.
+ 	* c-decl.c (push_parm_decl): Don't frob immediate_size_expand.
+ 	(start_function): Likewise.
+ 	* cfgexpand.c (construct_exit_block): Likewise.
+ 	* function.c (init_function_start, expand_function_end): Likewise.
+ 	* tree-optimize.c (tree_rest_of_compilation): Likewise.
+ 
+ 2004-06-30  Richard Henderson  <rth@redhat.com>
+ 
+ 	* gimplify.c (gimplify_compound_lval): Take fallback argument
+ 	instead of want_lvalue.
+ 	(gimplify_call_expr): Take want_value argument instead of test
+ 	function.  Gimplify arguments to val only if reg_type; otherwise
+ 	allow lvalue forms.
+ 	(gimplify_expr): Update gimplify_compound_lval and gimplify_call_expr
+ 	calls.
+ 	* tree-gimple.c: Update GIMPLE grammer.  Use true/false not 1/0.
+ 	Tidy commentary globally.
+ 	(get_call_expr_in): Remove RETURN_EXPR handling.  Tidy.
+ 	* tree-gimple.h (is_gimple_call_addr): Mark extern.
+ 
+ 	* gimplify.c (gimplify_modify_expr_to_memcpy): Fix typo.
+ 
+ 2004-06-30  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-gimple.c (right_assocify_expr): Kill
+ 	(rationalize_compound_expr): Kill.
+ 	* tree-gimple.h: Likewise.
+ 	* tree-inline.c (expand_call_inline): Don't call it.
+ 
+ 	* function.h (struct function): Remove x_last_parm_insn,
+ 	inl_last_parm_insn.
+ 	(last_parm_insn): Remove.
+ 	* function.c (free_after_compilation): Don't clear them.
+ 	(fixup_var_refs_insn, assign_parms): Don't set them.
+ 
+ 	* function.c, rtl.h (get_first_nonparm_insn): Remove.
+ 
+ 2004-06-30  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-common.h (check_function_format): Remove first parameter.
+ 	* c-format.c (format_check_context): Remove status.
+ 	(check_format_info, check_format_info_main,
+ 	maybe_read_dollar_number, avoid_dollar_number,
+ 	finish_dollar_format_checking, check_format_types,
+ 	check_function_format): Remove first parameter.  Don't use
+ 	status_warning.
+ 	(check_format_arg): Don't use status_warning.
+ 	(status_warning): Remove.
+ 	* c-common.c (check_function_arguments): Update call to
+ 	check_function_format.
+ 
+ 2004-06-30  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* config/sparc/sparc-protos.h (output_cbranch): Constify return
+ 	value.
+ 	(output_v9branch): Likewise.
+ 	(sparc_v8plus_shift): Likewise.  Rename into output_v8plus_shift.
+ 	* config/sparc/sparc.c (output_cbranch): Constify return value.
+ 	Prettify output for delay slots.
+ 	(output_v9branch): Likewise.
+ 	(sparc_v8plus_shift): Constify return value.  Rename into
+ 	output_v8plus_shift.
+ 	* config/sparc/sparc.md (ashldi3_v8plus): Adjust call to
+ 	sparc_v8plus_shift.
+ 	(ashrdi3_v8plus): Likewise.
+ 	(lshrdi3_v8plus): Likewise.
+ 	(call_address_struct_value_sp32): Prettify output for delay slots.
+ 	(call_symbolic_struct_value_sp32): Likewise.
+ 	(call_address_untyped_struct_value_sp32): Likewise.
+ 	(call_symbolic_untyped_struct_value_sp32): Likewise.
+ 
+ 2004-06-30  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* common.opt (ftree-loop-optimize): New flag.
+ 	* tree-flow.h (kill_redundant_phi_nodes): Declare.
+ 	* tree-optimize.c (init_tree_optimization_passes): Add pass_loop.
+ 	* tree-pass.h (pass_loop_init, pass_loop_done): Declare.
+ 	* tree-ssa-loop.c (current_loops): New variable.
+ 	(tree_loop_optimizer_init, gate_loop, tree_ssa_loop_init,
+ 	tree_ssa_loop_done): New functions.
+ 	(pass_loop, pass_loop_init, pass_loop_done): New passes.
+ 	* tree-ssa.c (kill_redundant_phi_nodes): Export.
+ 	* doc/invoke.texi (-ftree-loop-optimize): Document.
+ 
+ 2004-06-30  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-ssa-loop-ch.c: New file.
+ 	* Makefile.in (tree-ssa-loop-ch.o): Add.
+ 	(tree-into-ssa.o): Add GGC_H dependency.
+ 	* tree-cfg.c (tree_duplicate_bb): Copy virtual arguments.
+ 	* tree-flow.h (rewrite_into_ssa): Declaration changed.
+ 	(rewrite_ssa_into_ssa, compute_global_livein, duplicate_ssa_name):
+ 	Declare.
+ 	* tree-into-ssa.c: Include ggc.h.
+ 	(struct def_blocks_d): Add phi_blocks field.
+ 	(struct mark_def_sites_global_data): Add names_to_rename field.
+ 	(struct ssa_name_info): New.
+ 	(compute_global_livein): Export.
+ 	(set_def_block, insert_phi_nodes, mark_def_sites, set_livein_block,
+ 	insert_phi_nodes_1, rewrite_finalize_block, insert_phi_nodes_for,
+ 	register_new_def, get_reaching_def, def_blocks_free,
+ 	get_def_blocks_for, rewrite_into_ssa): Modified to work with
+ 	rewrite_ssa_into_ssa.
+ 	(get_ssa_name_ann, get_phi_state, set_phi_state, get_current_def,
+ 	set_current_def, ssa_mark_def_sites_initialize_block,
+ 	ssa_mark_phi_uses, ssa_mark_def_sites, duplicate_ssa_name,
+ 	ssa_register_new_def, ssa_rewrite_initialize_block,
+ 	ssa_rewrite_phi_arguments, ssa_rewrite_finalize_block,
+ 	ssa_rewrite_stmt, rewrite_ssa_into_ssa, rewrite_all_into_ssa): New
+ 	functions.
+ 	(pass_build_ssa): Call rewrite_all_into_ssa.
+ 	* tree-optimize.c (execute_todo, execute_one_pass,
+ 	tree_rest_of_compilation): Allocate vars_to_rename only once.
+ 	* tree-ssa-dom.c (tree_ssa_dominator_optimize): Provide parameter
+ 	to rewrite_into_ssa.
+ 	* tree-ssa-loop.c (should_duplicate_loop_header_p,
+ 	mark_defs_for_rewrite, duplicate_blocks, do_while_loop_p,
+ 	copy_loop_headers, gate_ch, pass_ch): Moved to tree-ssa-loop-ch.c.
+ 	Use rewrite_ssa_into_ssa.
+ 	* tree-ssa-operands.c (copy_virtual_operands): New function.
+ 	* tree-ssa-operands.h (copy_virtual_operands): Declare.
+ 	* tree.h (struct tree_ssa_name): Add aux field.
+ 	(SSA_NAME_AUX): New macro to access it.
+ 
+ 2004-05-28 Aaron W. LaFramboise <aaronraolete36@aaronwl.com>
+ 
+ 	* prefix.c (lookup_key): Cast buffer to LPBYTE.
+ 
+ 2004-06-30  Per Bothner  <per@bothner.com>
+ 
+ 	Conditionally compile support for --enable-mapped_location.
+ 	* input.h:  #include line-map.h for source_location typedef.
+ 	(BUILTINS_LOCATION, UNKNOWN_LOCATION, expand_location,
+ 	LOCATION_FILE, LOCATION_LINE):  New macros and functions.
+ 	(expanded_location, source_locus):  New typedefs.
+ 	(push_srcloc):  Change parameter list if USE_MAPPED_LOCATION.
+ 	* rtl.def (NOTE, ASM_OPERANDS):  Modify specifcation, if
+ 	USE_MAPPED_LOCATION.
+ 	* rtl.h (NOTE_DELETED_LABEL_NAME):  New macro.
+ 	(NOTE_SOURCE_LOCATION, NOTE_EXPNDED_LOCATION, SET_INSN_DELETED):
+ 	New conditional macros.
+ 	(ASM_OPERANDS_SOURCE_FILE, ASM_OPERANDS_SOURCE_LINE):  Replace
+ 	by ASM_OPERANDS_SOURCE_LOCATION if USE_MAPPED_LOCATION.
+ 	* tree.h (EXPR_LOCATION, SET_EXPR_LOCATION, EXPR_HAS_LOCATION,
+ 	EXPR_LOCUS, SET_EXPR_LOCUS, EXPR_FILENAME, EXPR_LINENO,
+ 	DECL_IS_BUILTIN):  New macros, most depending on USE_MAPPED__LOCATION.
+ 	(tree_exp):  Change type of locus to use new source_locus typedef.
+ 	* tree.c (build1_stat):  Use SET_EXPR_LOCATION.
+ 	(annotate_with_locus, annotate_with_file_line):  Conditionalize.
+ 	(expand_location):  New function.
+ 	* toplev.c (unknown_location):  New static, when USE_MAPPED_LOCATION.
+ 	(push_srcloc, pop_loc):  Adjust parameter handling.
+ 	(process_options):  Don't set input_filename by itself.
+ 	(lang_dependent_init):  Save, set input_location to <built-in>.
+ 	(warn_deprecated_use):  Use expand_location.
+ 
+ 	* basic-block.h (struct edge_def):  Use new source_locus typedef.
+ 	* c-common.c (fname_decl):  Update save/clear/store of input_location.
+ 	(c_do_switch_warnings):  Update for USE_MAPPED_LOCATION case.
+ 	* c-decl.c:  Likewise.
+ 	* c-dump.c (dump_stmt):  Likewise.
+ 	* c-gimplify.c (c-gimplify.c):  Generalize using SET_EXPR_LOCATION.
+ 	* c-lex.c (cb_line_change):  If USE_MAPPED_LOCATION use token's	src_loc
+ 	to set input_location direction, rather than using linemap_lookup.
+ 	(fe_file_change, cb_def_pragma):  Again use source_location directly.
+ 	* c-opts.c (saved_lineno):  Remove static variable.
+ 	(c_common_post_options, c_common_init):  Don't bothner to save,
+ 	clear and restore input_Location - now handled by lang_dependent_init.
+ 	* function.c (init_function_start):  Use new DECL_IS_BUILTIN macro.
+ 	* xcoffout.c (xcoff_assign_fundamental_type_number):  Likewise.
+ 	* tree-mudflap.c (mf_file_function_line_tree):  Take a location_t
+ 	rather than a pointer to one.  Use expand_location.
+ 	(mf_varname_tree):  Use expand_location.
+ 	* tree-dump.c:  Use expand_location on DECL_SOURCE_LOCATION.
+ 	* coverage.c:  Likewise.
+ 	* print-tree.c:  Likewise.
+ 	* c-aux-info.c (gen_aux_info_record):  Likewise.
+ 	* c-parse.in:  Use SET_EXPR_LOCATION macro.
+ 	* gimple-low.c:  Likewise.
+ 	* tree-mudflap.c:  Likewise.
+ 	* gimplify.c:  Likewise.  Also use EXPR_LOCATION and EXPR_HAS_LOCATION.
+ 	* c-ppoutput.c:  Use new source_location typedef instead of fileline.
+ 	* c-semantics.c:  Use new macros.
+ 	* c-typeck.c:  Likewise.
+ 	* cfgexpand.c:  Handle USE_MAPPED_LOCATION case for function_end_locus.
+ 	* cfglayout.c (insn_locators_initialize):  Const cleanup.  New macros.
+ 	* cfgrtl.c (delete_insn):  Use new NOTE_DELETED_LABEL_NAME macro.
+ 	* print-rtl.c (print_rtx):  Likewise.
+ 	* emit-rtl.c:  Don't clear NOTE_SOURCE_FILE if USE_MAPPED_LOCATION.
+ 	* combine.c:  Use new SET_INSN_DELETED macro.
+ 	* flow.c:  Likewise.
+ 	* haifa-sched.c:  Likewise.
+ 	* ifcvt.c:  Likewise.
+ 	* recog.c:  Likewise.
+ 	* reload1.c:  Likewise.
+ 	* diagnostic.c:  Use expand_location macro.
+ 	* pretty-print.c (pp_base_format_text):  Likewise.
+ 	* profile.c:  Likewise.
+  	* dwarf2out.c:  Likewise.  Also use expand_location, DECL_IS_BUILTIN.
+  	* dwarf2out.c (dwarf2out_decl:  Use BUILTINS_LOCATION.
+ 	* emit-rtl.c (emit_line_note):  Simplify if USE_MAPPED_LOCATION.
+ 	(force_next_line_note, insn_emit):  Handle USE_MAPPED_LOCATION case.
+ 	* final.c (final):  Likewise.
+ 	* haifa-sched.c:  Likewise.
+ 	* integrate.c:  Likewise.
+ 	* jump.c:  Likewise.
+ 	* rtl-error.c:  Likewise.
+ 	* stmt.c (check_seenlabel):  Likewise.
+ 	* tree-pretty-print.c:  Likewise.
+ 	* gengtype-lex.l:  Temporary kludge to avoid duplicate typedef.
+ 	* gengtype.c:  Update for now typdefs in input.h.  More kludges.
+ 	* modulo-sched.c (sms_schedule):  Use NOTE_EXPANDED_LOCATION macro.
+ 	* ra-debug.c (ra_print_rtl):  Likewise.
+ 	* sched-rgn.c:  Likewise.
+ 	* sched-vis.c:  Likewise.
+ 	* rtl.h (gen_rtx_ASM_OPERANDS):  Redefine if USE_MAPPED_LOCATION.
+ 	* stmt.c (expand_asm_operands):  Adjust calls to gen_rtx_ASM_OPERANDS.
+ 	* tree-cfg.c:  Use new macros and typedefs.
+ 	* tree-flow-inline.h:  Likewise.
+ 
+ 2004-06-30  Richard Sandiford  <rsandifo@redhat.com>
+ 	    Eric Christopher  <echristo@redhat.com>
+ 
+ 	* config/mips/3000.md: Improve description.
+ 
+ 2004-06-30  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/cirrus.md (cirrus_arm_movdi, cirrus_movsf_hard_insn,
+ 	cirrus_movdf_hard_insn): Set pool ranges for coprocessor loads.
+ 
+ 2004-06-30  Sebastian Pop  <pop@cri.ensmp.fr>
+ 
+ 	* Makefile.in (OBJS-common): Add tree-chrec.o.
+ 	(tree-chrec.o): New rule.
+ 	(GTFILES): Add tree-chrec.h.
+ 	* gengtype.c (open_base_files): Add tree-chrec.h.
+ 	* tree-chrec.c: New file.
+ 	* tree-chrec.h: New file.
+ 	* tree.def (SCEV_KNOWN, SCEV_NOT_KNOWN, POLYNOMIAL_CHREC): New nodes.
+ 
+ 2004-06-30  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* combine.c: Include "output.h" to define dump_file.
+ 	(uid_insn_cost, last_insn_cost): New global variables.
+ 	(combine_insn_cost): New function to estimate cost of an insn.
+ 	(combine_validate_cost): New function to determine whether a
+ 	try_combine replacement sequence is cheaper than the original.
+ 	(combine_instructions): Allocate and populate uid_insn_cost
+ 	array at the start of the combine pass, and deallocate it after.
+ 	(try_combine): Check combine_validate_cost to determine whether
+ 	a "recombination" should be rejected as being more expensive.
+ 	* Makefile.in (combine.o): Add dependency upon output.h.
+ 
+ 2004-06-30  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_rtx_costs) <MINUS_EXPR>: Handle
+ 	subtractions identically to additions, always COSTS_N_INSNS (1).
+ 
+ 2004-06-30  J"orn Rennecke <joern.rennecke@superh.com>
+ 
+ 	* expmed.c (expand_smod_pow2): Fix sign of mask.
+ 
+ 2004-06-29  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-pre.c (phi_trans_add): Use is_gimple_min_invariant
+ 	to check for constants.
+ 	(set_remove): Likewise.
+ 	(value_replace_in_set): Likewise.
+ 	(find_leader): Likewise.
+ 	* tree-vn.c (set_value_handle): Likewise.
+ 	(vn_lookup): Likewise.
+ 	(vn_lookup_or_add): Likewise.
+ 
+ 2004-06-30  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	RTL prologue/epilogue for SPARC
+ 	* config/sparc/sparc-protos.h (sparc_emitting_epilogue): Delete.
+ 	(sparc_skip_caller_unimp): Likewise.
+ 	(load_pic_register): Likewise.
+ 	(leaf_return_peephole_ok): Likewise.
+ 	(compute_frame_size): Rename into sparc_compute_frame_size.
+ 	(sparc_expand_prologue): New prototype.
+ 	(sparc_expand_epilogue): Likewise.
+ 	(output_return): Likewise.
+ 	(eligible_for_epilogue_delay): Rename into eligible_for_return_delay.
+ 	* config/sparc/sparc.h (INITIAL_ELIMINATION_OFFSET): Adjust call to
+ 	compute_frame_size.  Move comment up.
+ 	(DELAY_SLOTS_FOR_EPILOGUE): Delete.
+ 	(ELIGIBLE_FOR_EPILOGUE_DELAY): Likewise.
+ 	(EPILOGUE_USES): Return true for %g1 if the function uses EH return.
+ 	* config/sparc/sparc.md (UNSPECV_SAVEW): New constant.
+ 	(type attribute): Add 'return' and 'savew'.
+ 	(eligible_for_return_delay): New attribute.
+ 	(return): New delay_slot.
+ 	(sibcall_epilogue): Call sparc_expand_epilogue.
+ 	(prologue): Likewise.  Move up.
+ 	(save_register_window): New expander.
+ 	(save_register_windowsi): New pattern.
+ 	(save_register_windowdi): Likewise.
+ 	(epilogue): New expander.
+ 	(return_internal): New pattern.
+ 	(Return peepholes): Delete.
+ 	* config/sparc/sparc.c (SIBCALL_SLOT_EMPTY_P): New macro.
+ 	(sparc_emitting_epilogue): Delete.
+ 	(sparc_skip_caller_unimp): Likewise.
+ 	(sparc_sr_alias_set): New global variable.
+ 	(frame_base_name): Delete.
+ 	(frame_base_reg): New global variable.
+ 	(sparc_override_options): Get new alias set for save/restore.
+ 	(leaf_return_peephole_ok): Delete.
+ 	(eligible_for_epilogue_delay): Rename into eligible_for_return_delay.
+ 	Factor out code into eligible_for_restore_insn_delay.
+ 	(eligible_for_restore_insn_delay): New function extraced from above.
+ 	Use IN_UNCOND_BRANCH_DELAY_TRUE instead of IN_BRANCH_DELAY_TRUE.
+ 	(eligible_for_sibcall_delay): Use SIBCALL_SLOT_EMPTY_P.
+ 	Factor out code into eligible_for_restore_insn_delay.
+ 	(load_pic_register): Make static.  Remove check.
+ 	(save_regs): Delete.
+ 	(restore_regs): Likewise.
+ 	(compute_frame_size): Rename into sparc_compute_frame_size.
+ 	Rename leaf_function into leaf_function_p.
+ 	(build_big_number): Delete.
+ 	(save_or_restore_regs): New function.
+ 	(emit_save_regs): Likewise.
+ 	(emit_restore_regs): Likewise.
+ 	(emit_stack_pointer_increment ): Likewise.
+ 	(emit_stack_pointer_decrement): Likewise.
+ 	(sparc_expand_prologue): Likewise.
+ 	(sparc_function_prologue): Rename into sparc_asm_function_prologue.
+ 	Remove all code to emit instructions.
+ 	(sparc_expand_epilogue): New function.
+ 	(sparc_function_epilogue): Rename into sparc_asm_function_epilogue.
+ 	Remove all code to emit instructions.
+ 	(output_restore): New function.
+ 	(output_return): Likewise.
+ 	(output_sibcall): Factor out code into output_restore.
+ 	(print_operand): Adjust for frame_base_reg.
+ 	* target.h (struct gcc_target): New field 'late_rtl_prologue_epilogue'.
+ 	* target-def.h (TARGET_LATE_RTL_PROLOGUE_EPILOGUE): New define.
+ 	(TARGET_INITIALIZER): Add it.
+ 	* passes.c (rest_of_compilation): Set the conditional predicate
+ 	'current_function_uses_only_leaf_regs' before sched2.  If target
+ 	has 'late_rtl_prologue_epilogue', emit RTL prologue/epilogue right
+ 	before sched2.
+ 	* reorg.c (return_insn_p): New predicate.
+ 	(find_end_label): Use it.
+ 	(relax_delay_slots): Do not thread an unconditional jump that points
+ 	to the end return label.
+ 	* doc/tm.texi (Registers) <Leaf Functions>: Clarify the validity
+ 	domain of 'current_function_uses_only_leaf_regs'.
+ 	(Stack and Calling) <Function Entry>: Document new target hook
+ 	TARGET_LATE_RTL_PROLOGUE_EPILOGUE.
+ 
+ 2004-06-30  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* simplify-rtx.c (simplify_binary_operation): Simplify
+ 	((A & N) + B) & M -> (A + B) & M if M is pow2 minus 1 constant and
+ 	N has at least all bits in M set as well.
+ 
+ 	PR tree-optimization/15310
+ 	* expr.c (expand_assignment): Optimize += or -= on a bit field in
+ 	most significant bits.
+ 
+ 2004-06-30  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* config/c4x/c4x.md: Fix comment.
+ 
+ 2004-06-30  Akos Kiss  <akiss@inf.u-szeged.hu>
+ 
+ 	* arm.md (cond_return_inverted): Add "length" attribute.
+ 
+ 2004-06-29  Per Bothner  <per@bothner.com>
+ 
+ 	* config/i386/winnt.c (i386_pe_encode_section_info):  Smash rtlname's
+ 	XSTR in place, so we don't lose SYMBOL_REF_DECL info.
+ 
+ 2004-06-29  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* config/ia64/hpux.h: Target does too support thread-local storage.
+ 
+ 2004-06-29  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* combine.c (distribute_notes): Don't look at global_regs for
+ 	pseudos.
+ 
+ 2004-06-29  Richard Henderson  <rth@redhat.com>
+ 
+ 	* gimplify.c (gimplify_modify_expr_rhs): Move immediately before
+ 	gimplify_modify_expr.
+ 	(gimplify_init_constructor): Likewise.  Gimplify the null
+ 	CONSTRUCTOR assignment.
+ 	(gimplify_modify_expr_to_memcpy): New.
+ 	(gimplify_modify_expr_to_memset): New.
+ 	(gimplify_modify_expr): Use them.
+ 
+ 2004-06-29  Roman Zippel <zippel@linux-m68k.org>
+ 
+ 	* web.c (union_defs): use all defs of an instruction to create a
+ 	union with a read/write use
+ 
+ 2004-06-29  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR middle-end/16216
+ 	* builtins.c (gimplify_va_arg_expr): Check for valist being
+ 	an error_mark_node.
+ 
+ 2004-06-29  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/16195
+ 	* config/rs6000/rs6000.c (rs6000_conditional_register_usage): Make
+ 	r30 fixed if TARGET_TOC && TARGET_MINIMAL_TOC.
+ 	(first_reg_to_save): Pretend call_used_regs[30] is 0 if
+ 	TARGET_TOC && TARGET_MINIMAL_TOC.
+ 	(rs6000_emit_prologue, rs6000_emit_epilogue): Likewise.
+ 
+ 2004-06-29  J"orn Rennecke <joern.rennecke@superh.com>
+ 
+ 	Fix gcc.dg/builtin-apply2.c failures:
+ 	* sh.h (TARGET_VARARGS_PRETEND_ARGS): Define.
+ 	* sh.c (extra_push): Delete.
+ 	(sh_expand_prologue): Don't do extra stack adjustment for
+ 	current_function_pretend_args_size if it comes from varargs setup.
+ 	Use TARGET_VARARGS_PRETEND_ARGS.  Don't set extra_push.
+ 	(sh_expand_epilogue): Don't use extra_push.
+ 	(sh_setup_incoming_varargs): Set pretend_arg_size when necessary.
+ 
+ 2004-06-29  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* expmed.c (expand_smod_pow2): Provide alternate implementations
+ 	that avoid conditional jumps, and choose between them based upon
+ 	the target's rtx_costs.
+ 
+ 2004-06-29  Andrew Pinski  <apinski@apple.com>
+ 
+ 	* tree-sra.c: Include expr.h for definition of MOVE_RATIO.
+ 	* Makefile.in (tree-sra.c): Update dependencies.
+ 
+ 2004-06-29  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-sra.c: Rewrite from scratch.  Handle nested aggregates.
+ 
+ 2004-06-29  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* vec.h (VEC_T_safe_push, VEC_T_safe_insert): Tweak for when
+ 	size_t is bigger than int.
+ 
+ 2004-06-29  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* target-def.h (TARGET_CXX_GET_COOKIE_SIZE,
+ 	TARGET_CXX_COOKIE_HAS_SIZE): Define.
+ 	(TARGET_CXX): Use them.
+ 	* target.h (struct gcc_target): Add cxx.get_cookie_size and
+ 	cxx.cookie_has_size.
+ 	* targhooks.c (default_cxx_get_cookie_size): New fucntion.
+ 	* targhooks.h (default_cxx_get_cookie_size): Add prototype.
+ 	* config/arm/arm.c (TARGET_CXX_GET_COOKIE_SIZE,
+ 	TARGET_CXX_COOKIE_HAS_SIZE): Define.
+ 	(arm_get_cookie_size, arm_cookie_has_size): New functions.
+ 	* Make-lang.in (cp/init.o): Add dependency on $(TARGET_H).
+ 	* doc/tm.texi: Document TARGET_CXX_GET_COOKIE_SIZE and
+ 	TARGET_CXX_COOKIE_HAS_SIZE.
+ 
+ 2004-06-29  J"orn Rennecke <joern.rennecke@superh.com>
+ 
+ 	* cfglayout.c (fixup_reorder_chain): Don't do anything for
+ 	e_fall->dest == EXIT_BLOCK_PTR.
+ 
+ 2004-06-28  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-cfg.c (verify_stmt): Add last_in_block parameter.  Verify
+ 	that eh stmts can throw.
+ 	(verify_stmts): Update verify_stmt call.
+ 	(tree_purge_dead_eh_edges, tree_purge_all_dead_eh_edges): New.
+ 	* tree-eh.c (remove_stmt_from_eh_region): New.
+ 	(lower_eh_constructs): Fix throw_stmt_table delete routine.
+ 	(tree_could_trap_p): Match may_trap_p.
+ 	(maybe_clean_eh_stmt): New.
+ 	* tree-flow.h: Update decls.
+ 	* tree-ssa-ccp.c (pass_ccp): Add TODO_verify_stmts.
+ 	(substitute_and_fold): Clean eh edges.
+ 	* tree-ssa-dce.c (mark_control_dependent_edges_necessary): Handle
+ 	empty basic blocks.
+ 	* tree-ssa-dom.c (need_eh_cleanup): New.
+ 	(tree_ssa_dominator_optimize): Allocate it.  Cleanup eh edges.
+ 	(optimize_stmt): Cleanup eh stmts; set need_eh_cleanup.
+ 
+ 2004-06-29  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* function.c (assign_parms): Don't abort with zero size stack
+ 	parm failing the PARM_BOUNDARY check.
+ 
+ 2004-06-28  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* common.opt (ftree-fre): New flag.
+ 	* flags.h (flag_tree_fre): Declare.
+ 	* opts.c (decode_options): Set.
+ 	* timevar.def (TV_TREE_FRE): Define.
+ 	* tree-flow-inline.h (may_propagate_copy): Re-arrange for
+ 	readability.  Handle destinations that are not SSA_NAMEs.
+ 	* tree-flow.h (struct ptr_info_def): Move from tree.h
+ 	(cprop_into_stmt, cprop_into_successor_phis): Remove.
+ 	(vn_compute, vn_lookup_or_add, vn_add, vn_lookup): Add
+ 	vuse_optype parameter.
+ 	* tree-pass.h (pass_fre): Declare.
+ 	* tree-ssa-copy.c (cprop_operand): Move to tree-ssa-dom.c
+ 	(cprop_into_stmt): Likewise.
+ 	(cprop_into_successor_phis): Likewise.
+ 	* tree-ssa-dom.c (eliminate_redundant_computations): Fix
+ 	argument ordering in call to may_propagate_copy.
+ 	* tree-ssa-pre.c (is_undefined_value): Assume hard registers
+ 	to be always defined.
+ 	(add_to_sets): New local function.
+ 	(create_value_expr_from): New local function.
+ 	(compute_avail): Call them.
+ 	(eliminate): Don't ignore statements with virtual operands.
+ 	(init_pre): New local function.
+ 	(fini_pre): New local function.
+ 	(execute_pre): Call them.
+ 	Add argument DO_FRE.  Don't do insertion if DO_FRE is true.
+ 	(do_pre): New function.
+ 	(do_fre): New function.
+ 	(gate_fre): New function.
+ 	(pass_fre): Declare.
+ 	* tree-ssa.c (init_tree_ssa): Don't call vn_init.
+ 	(delete_tree_ssa): Don't call vn_delete.
+ 	* tree-vn.c (val_expr_pair_d): Add documentation.
+ 	(vn_compute): Add VUSES argument to incorporate in computing
+ 	hash values.  Update all callers.
+ 	(expressions_equal_p): Call operand_equal_p with
+ 	OEP_PURE_SAME.
+ 	(vn_add): Add VUSES argument.  Update all callers.
+ 	(vn_lookup): Likewise.
+ 	(vn_lookup_or_add): Likewise.
+ 	* doc/invoke.texi: Document -ftree-fre and -fdump-tree-fre.
+ 
+ 2004-06-28  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* config/m32r/m32r.c (m32r_sched_odd_word_p, m32r_adjust_cost,
+ 	m32r_sched_init, m32r_sched_reorder, m32r_variable_issue): Remove.
+ 	(TARGET_SCHED_ADJUST_COST, TARGET_SCHED_VARIABLE_ISSUE,
+ 	TARGET_SCHED_INIT, TARGET_SCHED_REORDER): Don't define.
+ 	* config/m32r/m32r.md: Rewrite the pipeline description as a DFA.
+ 
+ 2004-06-28  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree.def (REALPART_EXPR, IMAGPART_EXPR): Change class to 'r'.
+ 	* fold-const.c (operand_equal_p <case 'r'>): Add REALPART_EXPR,
+ 	IMAGPART_EXPR.
+ 	* tree-dump.c (dequeue_and_dump): Handle REALPART_EXPR and
+ 	IMAGPART_EXPR explicitly.
+ 	* tree-inline.c (estimate_num_insns_1): Don't handle REALPART_EXPR
+ 	and IMAGPART_EXPR specially.
+ 	* tree.c (build1_stat): Copy TREE_THIS_VOLATILE into class 'r'.
+ 
+ 2004-06-28  J"orn Rennecke <joern.rennecke@superh.com>
+ 
+ 	* config.gcc (sh*-*elf*): Remove dead assignment of sh_multilibs.
+ 
+ 2004-06-28  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* builtins.def (execl, execlp, execle, execv, execvp, execve,
+ 	fork): Change to DEF_EXT_LIB_BUILTIN.
+ 
+ 2004-06-28  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* expmed.c (expand_smod_pow2): New function to expand signed
+ 	remainder by a constant power of 2, such as "x % 16".
+ 	(expand_divmod): Call new expand_smod_pow2 when appropriate.
+ 	Minor corrections to comments, e.g. wrapping long lines.
+ 
+ 2004-06-28  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* Makefile.in (vec.o): Fix dependencies.
+ 
+ 2004-06-28  Andreas Tobler <a.tobler@schweiz.ch>
+ 
+ 	* Makefile.in: Fix parallel make dependency problem on vec.o.
+ 
+ 2004-06-28  Dhananjay Deshpande  <dhananjayd@kpitcummins.com>
+ 
+ 	PR target/14041
+ 	* config/h8300/h8300.h (ASM_OUTPUT_ALIGNED_BSS): Define.
+ 
+ 2004-06-28  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* tree.h (tree_check_failed): Make varadic.
+ 	(tree_not_check_failed): New prototype.
+ 	(tree_check2_failed, tree_check3_failed,
+ 	tree_check4_failed, tree_check5_failed): Remove.
+ 	(TREE_CHECK, TREE_CHECK2, TREE_CHECK3, TREE_CHECK4,
+ 	TREE_CHECK5): Adjust.
+ 	(TREE_NOT_CHECK, TREE_NOT_CHECK2, TREE_NOT_CHECK3, TREE_NOT_CHECK4,
+ 	TREE_NOT_CHECK5): New.
+ 	(TREE_VEC_ELT_CHECK, PHI_NODE_ELT_CHECK, TREE_OPERAND_CHECK_CODE,
+ 	TREE_RTL_OPERAND_CHECK): Adjust.
+ 	* tree.c (tree_check_failed): Make varadic.
+ 	(tree_not_check_failed): New.
+ 	(tree_check2_failed, tree_check3_failed,
+ 	tree_check4_failed, tree_check5_failed): Remove.
+ 
+ 2004-06-28  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* combine.c (can_combine_p): Do not prevent building insns that use
+ 	and clobber the same fixed hard register.
+ 	(reg_dead_at_p): Likewise.
+ 
+ 2004-06-28  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* tree-sra.c (is_sra_candidate_ref): Remove second arg; all callers
+ 	changed.
+ 	(is_sra_candidate_complex_ref): New function.
+ 	(scalarize_modify_expr): Call it and check for LHS also.
+ 
+ 	* tree-pretty-print.c (dump_function_declaration): New.
+ 	(dump_generic_node, case FUNCTION_TYPE): Call it.
+ 	(dump_generic_node, case RECORD_TYPE): Don't output dup semicolon.
+ 	(dump_generic_node, case DECL_EXPR): New case.
+ 	(dump_generic_node, case PLACEHOLDER_EXPR): Handle.
+ 	(print_declaration): Handle type and function declarations.
+ 
+ 	* tree-nested.c (create_tmp_var_for): Allow ARRAY_TYPE.
+ 	(convert_nonlocal_reference, convert_local_reference): Properly
+ 	convert nest of handled component references.
+ 
+ 2004-06-28  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* vec.h, vec.c: New, type safe vector API.
+ 	* Makefile.in (OBJS-common): Add vec.o.
+ 	(vec.o): New target.
+ 	(gengtype-lex.o): Depend on vec.h.
+ 
+ 2004-06-28  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* fold-const.c (fold_cond_expr_with_comparison): Add ARG1
+ 	parameter.  Use it instead of ARG00 to produce the result.
+ 
+ 2004-06-28  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	* config/mn10300/mn10300-protos.h (legitimate_address_p): Declare.
+ 	* config/mn10300/mn10300.c (legitimate_address_p): New.  Test that
+ 	index is legitimate, compared with code moved from...
+ 	* config/mn10300/mn10300.h (GO_IF_LEGITIMATE_ADDRESS): here.
+ 	(REG_STRICT): Define, according to REG_OK_STRICT.
+ 	(REGNO_IN_RANGE_P, REGNO_DATA_P, REGNO_ADDRESS_P, REGNO_SP_P,
+ 	REGNO_EXTENDED_P, REGNO_AM33_P, REGNO_FP_P): Introduce strict
+ 	argument.
+ 	(REGNO_STRICT_OK_FOR_BASE_P, REGNO_STRICT_OK_FOR_BIT_BASE_P,
+ 	REGNO_STRICT_OK_FOR_INDEX_P): New.
+ 	(REGNO_OK_FOR_BASE_P, REG_OK_FOR_BASE_P, REGNO_OK_FOR_BIT_BASE_P,
+ 	REG_OK_FOR_BIT_BASE_P, REGNO_OK_FOR_INDEX_P, REG_OK_FOR_INDEX_P,
+ 	RTX_OK_FOR_BASE_P): Use them.
+ 
+ 2004-06-28  Ben Elliston  <bje@au.ibm.com>
+ 
+ 	* doc/cfg.texi (Basic Blocks): Define dominators.
+ 
+ 2004-06-27  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR c++/16205
+ 	* c-common.c (warn_for_collisions_1): Warn for only decls which
+ 	have a name.
+ 
+ 	PR c++/15145
+ 	* c.opt (Wsequence-point): Enable for C++ and ObjC++.
+ 
+ 	PR c/14963
+ 	* c-decl.c (start_decl): Check for null types.
+ 
+ 2004-06-27  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_legitimate_offset_address_p):
+ 	Accept TOC addresses.
+ 
+ 2004-06-27  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390-protos.h (s390_load_got): Update prototype.
+ 	* config/s390/s390.c (struct machine_function): Add member base_reg.
+ 	(s390_decompose_address): Accept UNSPEC_LTREF.  Simplify logic.
+ 	(s390_split_branches): Annotate late pool references.
+ 	(annotate_constant_pool_refs): New function.
+ 	(find_constant_pool_ref): Work on annotated pool references.
+ 	(replace_constant_pool_ref): Likewise.  Use explicit base.
+ 	(replace_ltrel_base): Use explicit base.
+ 	(s390_mainpool_start): Reflect main_pool pattern change.
+ 	(s390_mainpool_finish): Use base register from main_pool.
+ 	Update calls to replace_ltrel_base and replace_constant_pool_ref.
+ 	(s390_chunkify_start): Use base_reg from struct machine_function.
+ 	(s390_chunkify_finish): Remove base_reg argument.  Update calls
+ 	to replace_ltrel_base and replace_constant_pool_ref.
+ 	(s390_reorg): Don't decide upon base register.  Update calls.
+ 	(s390_load_got): Remove MAYBE_DEAD handling.  Do not emit insns
+ 	but return sequence instead.
+ 	(s390_emit_prologue): Decide upon base register to use.  Annotate
+ 	all literal pool references.  Adapt to main_pool pattern change.
+ 	Update s390_load_got call; move MAYBE_DEAD handling here.
+ 	(s390_emit_epilogue): Annotate late literal pool references.
+ 	Remove barrier before register restore instruction.
+ 	* config/s390/s390.md (UNSPEC_LTREF): New constant.
+ 	("builtin_setjmp_receiver"): Update s390_load_got call.
+ 	("main_pool"): Explicitly reference base register.
+ 
+ 2004-06-27  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* fold-const.c (fold) <BIT_IOR_EXPR>: Optimize ~X|X and X|~X as -1.
+ 	<BIT_XOR_EXPR>: Optimize ~X|X and X|~X as -1.
+ 	<BIT_AND_EXPR>: Optimize ~X&X and X&~X as 0.
+ 	<TRUTH_AND_EXPR, TRUTH_ANDIF_EXPR>: Optimize !X&&X and X&&!X as false.
+ 	<TRUTH_OR_EXPR, TRUTH_ORIF_EXPR>: Optimize !X||X and !X||X as true.
+ 	<TRUTH_XOR_EXPR>: Optimize !X^X and X^X! as true.  Now that
+ 	TRUTH_XOR_EXPR is a commutative tree code, don't test whether arg0
+ 	is a constant.
+ 
+ 2004-06-26  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* c-common.c (c_safe_from_p, c_walk_subtrees): Deleted.
+ 	* c-common.def (DECL_STMT): Remove.
+ 	* c-common.h (DECL_STMT_DECL): Deleted.
+ 	(COMPOUNT_LITERAL_EXPR_DECL): Use DECL_EXPR_DECL.
+ 	(c_safe_from_p, c_walk_subtrees): Deleted.
+ 	* c-decl.c, c-parse.in, c-pretty-print.c: DECL_STMT now DECL_EXPR.
+ 	* c-dump.c (c_dump_tree, case DECL_STMT): Deleted.
+ 	* c-gimplify.c (gimplify_decl_stmt): Deleted.
+ 	(gimplify_compound_literal_expr): Use DECL_EXPR_DECL
+ 	and gimplify_and_add.
+ 	(c_gimplify_expr, case DECL_EXPR): New case.
+ 	(c_gimplify_expr, case DECL_STMT): Deleted.
+ 	* c-lang.c (LANG_HOOKS_SAFE_FROM_P): Likewise.
+ 	(LANG_HOOKS_TREE_INLINING_WALK_SUBTREES): Likewise.
+ 	* expr.c (safe_from_p, case 's'): New case.
+ 	* gimplify.c (gimplify_decl_expr): New function.
+ 	(gimplify_expr, case DECL_EXPR): New case.
+ 	* tree-inline.c (walk_tree): Walk into all fields of a type and
+ 	decl only if they are in a DECL_EXPR.
+ 	(mark_local_for_remap_r): Minor code cleanup.
+ 	* tree-outof-ssa.c (discover_nonconstant_array_refs_r): Add else.
+ 	* tree.c (has_cleanups, case DECL_EXPR): New case.
+ 	* tree.def (DECL_EXPR): New code.
+ 	* tree.h (DECL_EXPR_DECL): New macro.
+ 
+ 	* objc/objc-lang.c (LANG_HOOKS_SAFE_FROM_P): Deleted.
+ 
+ 2004-06-26  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR 13334
+ 	* doc/install.texi: Document non-standard CFLAGS and bootstrap
+ 	failures and warnings.
+ 
+ 2004-06-26  Andrew Haley  <aph@redhat.com>
+ 
+ 	* emit-rtl.c (set_mem_attributes_minus_bitpos): Check
+ 	TREE_THIS_NOTRAP when setting MEM_NOTRAP_P.
+ 	* tree-eh.c (tree_could_trap_p): Check TREE_THIS_NOTRAP.
+ 	* tree.h (TREE_THIS_NOTRAP): New.
+ 
+ 2004-06-26  Kaz Kojima  <kkojima@gcc.gnu.org>
+ 
+ 	* genattrtab.c (write_test_expr): Put a unsigned cast before
+ 	the first operand for GEU, GTU, LEU and LTU.
+ 
+ 2004-06-26  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* c-typeck.c, cfgexpand.c, ddg.c, ddg.h, df.c, fold-const.c,
+ 	gcov.c, gimplify.c, modulo-sched.c, passes.c, tree-cfg.c,
+ 	tree-mudflap.c, tree-nrv.c, tree-outof-ssa.c, tree-ssa-dom.c,
+ 	tree-ssa-dse.c, tree-ssa-operands.c, tree-ssa-pre.c,
+ 	tree-tailcall.c: Fix comment typos.  Follow spelling
+ 	conventions.
+ 
+ 2004-06-25  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* config/mips/mips.md: Add back scheduling exclusion info.
+ 
+ 2004-06-25  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* ifcvt.c (seq_contains_jump): Delete function.
+ 	(end_ifcvt_sequence): Replace call to seq_contains_jump with an
+ 	inline test for a jump instruction in the existing "insn" loop.
+ 	(block_fallthru): Document function.
+ 
+ 2004-06-25  Philip Blundell  <philb@gnu.org>
+ 
+ 	PR wrong-code/15089
+ 	* loop.c (scan_loop): Do not move user-specified register
+ 	assignments.
+ 
+ 2004-06-25  DJ Delorie  <dj@redhat.com>
+ 
+ 	* c-common.h (warn_cast_qual, warn_missing_format_attribute,
+ 	warn_pointer_arith, warn_missing_prototypes, warn_parentheses,
+ 	warn_missing_braces, warn_sign_compare, warn_long_long,
+ 	warn_redundant_decls, warn_float_equal, warn_char_subscripts,
+ 	warn_conversion, warn_format_y2k, warn_format_extra_args,
+ 	warn_format_zero_length, warn_format_nonliteral,
+ 	warn_format_security, mesg_implicit_function_declaration,
+ 	warn_bad_function_cast, warn_traditional,
+ 	warn_declaration_after_statement, warn_strict_prototypes,
+ 	warn_missing_declarations, warn_nested_externs,
+ 	warn_sequence_point, warn_init_self, warn_div_by_zero,
+ 	warn_implicit_int, warn_nonnull, warn_old_style_definition,
+ 	warn_selector, warn_undeclared_selector, warn_protocol,
+ 	warn_abi, warn_invalid_offsetof, warn_ctor_dtor_privacy,
+ 	warn_overloaded_virtual, warn_nonvdtor, warn_reorder,
+ 	warn_synth, warn_pmf2ptr, warn_ecpp, warn_sign_promo,
+ 	warn_old_style_cast, warn_nontemplate_friend,
+ 	warn_deprecated): Remove explicit declarations.
+ 	* c-common.c: Likewise, remove explicit definitions.
+ 	* c-opts.c: Likewise, remove explicit assignments.
+ 	* c.opts: Likewise, add implicit declare/define/assign.
+ 
+ 2004-06-25  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* gimplify.c (lookup_tmp_var): Set TREE_READONLY in is_formal case.
+ 	(build_addr_expr_with_type): Deleted.
+ 	(build_addr_expr): Deleted; callers changed to build_fold_addr_expr.
+ 	(gimplify_compound_lval): Make two passes over reference nest.
+ 
+ 	* tree-nested.c (build_addr): Merge real/imagpart with
+ 	handled_component_p.
+ 	(convert_nonlocal_reference, convert_local_reference): Process extra
+ 	args to COMPONENT_REF and ARRAY_REF.
+ 	* tree-outof-ssa.c (discover_nonconstant_array_refs_r): Check for
+ 	lower bound and field offset being constant.
+ 
+ 2004-06-25  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	PR wrong-code/16129
+ 	* alias.c (get_alias_set): Adjust setting of
+ 	DECL_POINTER_ALIAS_SET for pointers to aggregates.
+ 
+ 2004-06-24  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* tree-inline.c (remap_type): Arrange to have just one pointer type
+ 	for each type, mode, and 'can alias' value.
+ 	(setup_one_parameter): Remap type when making VAR_DECL for PARM_DECL.
+ 	(estimate_num_insns_1): Minor code reformatting.
+ 	(inline_forbidden_p_1): Likewise; add; missing return statement.
+ 
+ 2004-06-25  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	PR middle-end/15825
+ 	* ifcvt.c (unshare_ifcvt_sequence): Rename to end_ifcvt_sequence.
+ 	Use get_isns and end_sequence instead of accepting a seq argument.
+ 	Scan the instruction sequence for unrecognizable or jump insns.
+ 	(noce_try_move, noce_try_store_flag, noce_try_store_flag_constants,
+ 	noce_try_addcc, noce_try_store_flag_mask, noce_try_cmove,
+ 	noce_try_cmove_arith, noce_try_minmax, noce_try_abs,
+ 	noce_try_sign_mask): Use end_ifcvt_sequence to factor common code.
+ 
+ 2004-06-24  Jeff Law  <law@redhat.com>
+ 
+ 	* gimplify.c (gimplify_compound_lval): Reset TREE_SIDE_EFFECTS
+ 	after gimplifying the innermost component.
+ 
+ 2004-06-25  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	PR target/16176
+ 	* config/mips/mips.c (mips_expand_unaligned_load): Use a temporary
+ 	register for the destination of the lwl or ldl.
+ 
+ 2004-06-25  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* tree-dfa.c (get_virtual_var): Merge real/imaginary parts with
+ 	handled_component_p handling.
+ 	* tree-gimple.c (get_base_address): Likewise and fix typo that
+ 	caused both recursion and looping.
+ 
+ 	* tree-cfg.c (verify_expr): Add macro CHECK_OK.
+ 	Properly test for nest of handled_components in LHS context.
+ 
+ 2004-06-25  Devang Patel  <dpatel@apple.com>
+ 
+ 	* doc/tree-ssa.texi: Document info about MODIFY_EXPR's type
+ 
+ 2004-06-25  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* target-def.h (TARGET_CXX_GUARD_TYPE, TARGET_CXX_GUARD_MASK_BIT,
+ 	TARGET_CXX): Define.
+ 	(TARGET_INITIALIZER): Use TARGET_CXX.
+ 	* target.h (struct gcc_target): Add struct cxx.
+ 	* targhooks.h (default_cxx_guard_type): Add prototype.
+ 	* targhooks.c (default_cxx_guard_type): New function.
+ 	* config/arm/arm.c (TARGET_CXX_GUARD_TYPE, TARGET_CXX_GUARD_MASK_BIT):
+ 	Define.
+ 	(arm_cxx_guard_type, arm_cxx_guard_mask_bit): New functions.
+ 	* doc/tm.texi: Document TARGET_CXX_GUARD_TYPE and
+ 	TARGET_CXX_GUARD_MASK_BIT.
+ 
+ 2004-06-25  Devang Patel  <dpatel@apple.com>
+ 
+ 	* config/rs6000/darwin.h (CC1_SPEC): Handle -gused and -gfull.
+ 	* config/i386/darwin.h (CC1_SPEC): Same.
+ 
+ 2004-06-25  Mark G. Adams  <mark.g.adams@sympatico.ca>
+ 
+ 	* dbxout.h: Add include guards
+ 
+ 2004-06-25  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/arm.h (TARGET_CPU_CPP_BUILTINS): Define __ARM_EABI__.
+ 
+ 2004-06-25  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* arm.c (arm_arch4t): New variable.
+ 	(arm_override_options): Initialize it.  If compiling for armv5 or
+ 	higher clear TARGET_INTERWORK.
+ 	(output_call): Abort if called for armv5.  Use BX if it's available.
+ 	(output_call_mem): Use BLX if available and ensure that all armv5
+ 	code is interworking safe.
+ 	(output_return_instruction): Always use BX in preference to MOV if
+ 	it's available.
+ 	(arm_output_epilogue): Likewise.
+ 	(arm_final_prescan_insn): Never conditionally call a subroutine
+ 	on armv5.
+ 	* arm.h (arm_arch4t): Declare.
+ 	* arm.md (call_reg_armv5, call_value_reg_armv5): New.
+ 	(call_reg_arm, call_value_reg_arm): Renamed from call_reg and
+ 	call_value_reg respectively.
+ 	(call_reg_thumb_v5, call_value_reg_thumb_v5): New.
+ 	(call_reg_thumb, call_value_reg_thumb): Renamed from call_indirect
+ 	and call_value_indirect respectively.
+ 
+ 2004-06-25  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.c (reg_or_const_float_1_operand): Reimplement
+ 	in terms of const_float_1_operand.
+ 
+ 2004-06-25  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	PR target/16144
+ 	* config/mips/mips.md (divsf, divdf): Don't FAIL if the first operand
+ 	is 1.0; force it into a register instead.
+ 
+ 2004-06-25  Bernardo Innocenti  <bernie@develer.com>
+ 
+ 	* config/m68k/m68k.h: Restore valid comment removed by mistake with
+ 	the recent m68k comments cleanup.
+ 
+ 2004-06-24  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* c-gimplify.c (gimplify_for_stmt): Use gimplify_and_add.
+ 	* gimplify.c (internal_get_tmp_var, gimplify_return_expr): Likewise.
+ 	(gimplify_loop_expr, gimplify_init_constructor): Likewise.
+ 	(gimplify_self_mod_expr, gimplify_cond_expr): Likewise.
+ 
+ 	PR/16131
+ 	* gimplify.c (voidify_wrapper_expr): Allow TARGET_EXPR.
+ 
+ 	* gimplify.c: Remove unneeded forward declarations.
+ 
+ 	* gimplify.c (append_to_compound_expr): Deleted.
+ 	* tree-gimple.h (append_to_compound_expr): Deleted.
+ 
+ 	* fold-const.c (fold_addr_expr_with_type): Look through all
+ 	valid LHS modifiers to find a base to mark addressable.
+ 
+ 	* tree.h (debug_find_tree): Add declaration.
+ 	* tree-inline.c (debug_find_tree): Remove extern declaration.
+ 
+ 2004-06-24  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* config/rs6000/rs6000.md: Apply change mistakenly
+ 	deleted with 2004-06-22 patch.
+ 
+ 2004-06-24  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-decl.c (c_in_iteration_stmt, c_in_case_stmt): Remove.
+ 	(c_break_label, c_cont_label): New.
+ 	(start_function): Update initializations.
+ 	(c_push_function_context): Update saves.
+ 	(c_pop_function_context): Update restores.
+ 	* c-parse.in: Update expected conflicts.
+ 	(stmt_count, compstmt_count): Remove.  Remove all updates.
+ 	(if_prefix, simple_if, do_stmt_start): Remove.
+ 	(lineno_labeled_stmt): Remove.
+ 	(lineno_labels): New.
+ 	(c99_block_lineno_labeled_stmt): Use it.
+ 	(lineno_stmt, lineno_label): Don't clear EXPR_LOCUS before calling
+ 	annotate_with_locus.
+ 	(select_or_iter_stmt): Replace by ...
+ 	(condition, if_statement_1, if_statement_2, if_statement,
+ 	start_break, start_continue, while_statement, do_statement,
+ 	for_cond_expr, for_incr_expr, for_statement, switch_statement): New.
+ 	(stmt): Split out ...
+ 	(stmt_nocomp): ... this.  Use c_finish_bc_stmt, c_finish_goto_label,
+ 	c_finish_goto_ptr.
+ 	* c-semantics.c (add_stmt): Don't add line numbers to labels.
+ 	* c-tree.h: Update prototypes.
+ 	(struct language_function): Remove x_in_iteration_stmt, x_in_case_stmt;
+ 	add x_break_label, x_cont_label, x_switch_stack.
+ 	(c_switch_stack): Declare.
+ 	* c-typeck.c (c_finish_goto_label, c_finish_goto_ptr): New.
+ 	(c_finish_return): Return the statement.
+ 	(c_switch_stack): Rename from switch_stack; export.
+ 	(if_elt, if_stack, if_stack_space, if_stack_pointer): Remove.
+ 	(c_begin_if_stmt, c_finish_if_cond, c_finish_then, c_begin_else,
+ 	c_finish_else): Remove.
+ 	(c_finish_if_stmt): Rewrite to perform the entire operation.
+ 	(c_begin_while_stmt, c_finish_while_stmt_cond, c_finish_while_stmt,
+ 	c_begin_for_stmt, c_finish_for_stmt_init, c_finish_for_stmt_cond,
+ 	c_finish_for_stmt_incr, c_finish_for_stmt): Remove.
+ 	(c_finish_loop): New.
+ 	(c_finish_bc_stmt): New.
+ 	(c_finish_expr_stmt): Return the statement.  Split out...
+ 	(c_process_expr_stmt): ... this.  Don't add locus to error marks.
+ 	* gimplify.c (gimplify_cond_expr): Accept NULL type statements.
+ 	* tree-gimple.c (is_gimple_stmt): Likewise.
+ 	* tree-pretty-print.c (dump_generic_node <COND_EXPR>): Likewise.
+ 	(print_struct_decl): Delete empty compound statement.
+ 	* objc/objc-act.c (objc_build_throw_stmt): Return the statement.
+ 	* objc/objc-act.h: Update decl.
+ 
+ 2004-06-24  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* tree-pretty-print.c (dump_generic_node, case TYPE_DECL):
+ 	Don't look at TYPE_METHODS unless RECORD_TYPE or UNION_TYPE.
+ 
+ 2004-06-24  Andrew Pinski  <apinski@apple.com>
+ 
+ 	* objc-act.c (build_objc_method_call): Save the lookup_object
+ 	so we do not call it twice.
+ 
+ 2004-06-24  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-ssa-dom.c (real_avail_expr_hash): New.
+ 	(tree_ssa_dominator_optimize): Use it in the htab.
+ 
+ 2004-06-24  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* tree-mudflap.c (mx_register_decls): Add third (type) argument
+ 	to synthesized __mf_unregister call.
+ 
+ 2004-06-24  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	PR middle-end/15239
+ 	* expmed.c (expand_mult): Remove artificial restriction on the
+ 	maximum cost of a synthetic multiplication sequence.
+ 
+ 2004-06-24  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* combine.c (distribute_notes): Don't delete sets to
+ 	global register variables.
+ 
+ 2004-06-24  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* config/i386/i386.md (ffsdi2, clzdi2): New expanders.
+ 	(ffs_rex64): New splitter.
+ 	(ffsdi_1, ctzdi2, bsr_rex64): New instructions.
+ 
+ 2004-06-24  Andrew Pinski  <apinski@apple.com>
+ 
+ 	* config/darwin7.h (MATH_LIBRARY): Remove.
+ 	(LIB_SPEC): Define.
+ 	* config/darwin.h (MATH_LIBRARY): Define always to empty.
+ 	(LIB_SPEC): Only define if not already defined.
+ 
+ 2004-06-24  Revital Eres  <eres@il.ibm.com>
+ 
+ 	* loop-iv.c (iv_analyze, simple_set_p): Support for identifying
+ 	shifts of induction variable.
+ 	(iv_shift): New function.
+ 
+ 2004-06-24  Richard Henderson  <rth@redhat.com>
+ 
+ 	* gimplify.c (gimplify_body): Watch for body vanishing.
+ 
+ 2004-06-24  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (record_dominating_conditions): New function.
+ 	(dom_opt_finalize_block, get_eq_expr_value): Use it.
+ 
+ 2004-06-24  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* calls.c (shift_returned_value): Fix handling of non-integer
+ 	TYPE_MODEs.
+ 
+ 2004-06-24  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* c-decl.c (finish_function): Do not check for DEFAULT_MAIN_RETURN.
+ 	* system.h (DEFAULT_MAIN_RETURN): Poison.
+ 	* doc/tm.texi (DEFAULT_MAIN_RETURN): Remove documentation.
+ 
+ 2004-06-24  Ben Elliston  <bje@au.ibm.com>
+ 
+ 	* doc/cfg.texi (Edges): Fix typo.
+ 
+ 2004-06-24  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/arm.c (arm_output_epilogue): Remove excess checks.
+ 
+ 2004-06-23  Andrew Pinski  <apinski@apple.com>
+ 
+ 	PR middle-end/15988
+ 	* fold-const.c (fold_convert): Types which are compatible
+ 	can be converted with only a NOP_EXPR.
+ 
+ 2004-06-24  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* calls.c (expand_call): Call INIT_CUMULATIVE_ARGS earlier, and
+ 	pass raw n_named_args to it.
+ 	* targhooks.c: Formatting.
+ 	(hook_bool_CUMULATIVE_ARGS_false): Correct comment.
+ 
+ 2004-06-23  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-gimplify.c (gimplify_decl_stmt): Push gimplify_one_sizepos inside
+ 	non-constant size check.  Gimplify the type too.  Tidy building
+ 	BUILT_IN_STACK_ALLOC call.
+ 
+ 2004-06-23  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* c-common.c (expand_unordered_cmp): Delete.
+ 	(expand_tree_builtin): Delete.
+ 	* c-common.h (expand_tree_builtin): Delete function prototype.
+ 	* c-typeck.c (build_function_call): Don't call expand_tree_builtin.
+ 
+ 2004-06-23  Richard Henderson  <rth@redhat.com>
+ 
+ 	* gimplify.c (gimplify_compound_lval): Don't set ARRAY_REF or
+ 	COMPONENT_REF variable fields unless they're non-constant.
+ 
+ 2004-06-23  Robert Millan  <robertmh@gnu.org>
+ 
+ 	* config.gcc: Merge kfreebsd*-gnu with linux* and add knetbsd*-gnu.
+ 	* config/i386/linux.h: Allow overriding of LINK_EMULATION,
+ 	  DYNAMIC_LINKER and register names in sc_ structure.
+ 	* config/kfreebsd-gnu.h: New. kfreebsd-gnu followup for linux.h.
+ 	* config/i386/kfreebsd-gnu.h: New. Ditto for i386-kfreebsd-gnu.
+ 	* config/knetbsd-gnu.h: New. Ditto for knetbsd-gnu.
+ 	* config/i386/knetbsd-gnu.h: New. Ditto for i386-knetbsd-gnu.
+ 
+ 	* config/kfreebsdgnu.h: Remove.
+ 	* config/t-kfreebsd-gnu: Likewise.
+ 	* config/i386/kfreebsdgnu.h: Likewise.
+ 
+ 2004-06-23  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* fold-const.c (make_range): Cleanup type checking through function.
+ 	Remove orig_type. Replace with checks to exp_type and arg0_type.
+ 	Clarify comment when converting from unsigned to signed.
+ 
+ 2004-06-23  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* config/mips/mips.c (mips_use_dfa_pipeline_interface): Add R3000.
+ 	* config/mips/mips.md: Remove R3000 scheduling description.
+ 	* config/mips/3000.md: New file.
+ 
+ 2004-06-23  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390-protos.h (s390_emit_compare): Add prototype.
+ 	(s390_emit_jump): Likewise.
+ 	* config/s390/s390.c (s390_emit_compare): New function.
+ 	(s390_emit_jump): Likewise.
+ 	* config/s390/s390.md ("beq", "bne", "bgt", "bgtu", "blt", "bltu",
+ 	"bge", "bgeu", "ble", "bleu", "bunordered", "bordered", "buneq",
+ 	"bungt", "bunlt", "bunge", "bunle", "bltgt"): Use s390_emit_compare
+ 	and s390_emit_jump.
+ 	("cjump"): Remove, replace by ...
+ 	("*cjump_64", "*cjump_31"): ... these insns.  Improve length default.
+ 	("icjump", "*icjump_64", "*icjump_31"): Likewise.
+ 	("trap"): Fix type attribute.
+ 	("conditional_trap"): Use s390_emit_compare.
+ 	("doloop_si"): Remove, replace by ...
+ 	("doloop_si64", "doloop_si31"): ... these new insn_and_split.
+ 	Merge existing splitter into insn_and_split.  Improve length default.
+ 	("doloop_di"): Merge with existing splitter into insn_and_split.
+ 	("doloop"): Adapt.
+ 	("jump"): Convert to expander.  Use s390_emit_jump.
+ 	("*jump_64", "*jump_31"): New insns.  Improve length default.
+ 
+ 2004-06-23  Wu Yongwei  <adah@sh163.net>
+ 
+ 	* gthr-win32.h (__GTHREAD_MUTEX_INIT_DEFAULT): Adjust.
+ 	(__gthr_i486_lock_cmp_xchg): New inline assembly function.
+ 	(__GTHR_W32_InterlockedCompareExchange): New macro to choose a
+ 	suitable function for interlocked compare-and-exchange.
+ 	(__gthread_mutex_trylock): Use
+ 	__GTHR_W32_InterlockedCompareExchange.
+ 	(__gthread_mutex_init_function, __gthread_mutex_lock,
+ 	__gthread_mutex_trylock, __gthread_mutex_unlock): Adjust the
+ 	initial counter value to work correctly under Windows 95.
+ 	* config/i386/gthr-win32.c: Adjust include order.
+ 	Define __GTHREAD_I486_INLINE_LOCK_PRIMITIVES before including
+ 	gthr-win32.h.
+ 	(__gthr_win32_mutex_init_function, __gthr_win32_mutex_lock,
+ 	__gthr_win32_mutex_trylock, __gthr_win32_mutex_unlock): Adjust
+ 	to match inline versions in gthr-win32.h.
+ 
+ 2004-06-23  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_use_dfa_pipeline_interface): Delete.
+ 	(TARGET_SCHED_USE_DFA_PIPELINE_INTERFACE): Redefine a hook_int_void_1.
+ 	(insvdi_rshift_rlwimi_p): New function.
+ 	* config/rs6000/rs6000.md (insvdi_internal2/3): New patterns.
+ 	(extendsfdf2): Convert to define_insn_and_split.
+ 	* config/rs6000/rs6000-protos.h (insvdi_rshift_rlwimi_p): Prototype.
+ 
+ 2004-06-23  Andrew Pinski  <apinski@apple.com>
+ 
+ 	* c-typeck.c (composite_type, <case ARRAY_TYPE>): Abort if we have
+ 	type qualifiers at all.
+ 	If both of the type domains are null and the new element type is
+ 	the same as one of the, return the one which the element type.
+ 	matches.
+ 	Do not call qualify_type on the new type.
+ 
+ 2004-06-23  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390.h (DEFAULT_MAIN_RETURN): Remove.
+ 
+ 2004-06-23  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* convert.c (strip_float_extension): Skip both NOP_EXPR and
+ 	CONVERT_EXPR floating point extensions.
+ 
+ 2004-06-23  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (tree-vn.o): New.
+ 	(tree-ssa-pre.o): Don't depend on RTL_H.
+ 	* tree-dfa.c (find_referenced_vars): Don't call init_tree_ssa.
+ 	* tree-flow.h (struct var_ann_d): Remove field expr_set.
+ 	(add_to_value, expressions_equal_p, get_value_handle, vn_compute,
+ 	vn_lookup_or_add, vn_add, vn_lookup, vn_init, vn_delete): Declare.
+ 	* tree-optimize.c (execute_init_datastructures): New local function.
+ 	(pass_init_datastructures): New local variable.
+ 	(init_tree_optimization_passes): Sequence pass_init_datastructures.
+ 	* tree-pretty-print.c (MASK_POINTER): Remove.
+ 	(dump_generic_node): Handle VALUE_HANDLE.
+ 	* tree-ssa-pre.c: Move all value numbering routines to tree-vn.c.
+ 	Update callers to use new function names.
+ 	Use VALUE_HANDLE_ID and VALUE_HANDLE_EXPR_SET instead of
+ 	variable annotations.
+ 	* tree-ssa.c (init_tree_ssa): Call vn_init.
+ 	(delete_tree_ssa): Call vn_delete.
+ 	* tree-vn.c: New file.
+ 	* tree.c (tree_size): Handle VALUE_HANDLE.
+ 	(tree_node_structure): Likewise.
+ 	(iterative_hash_expr): Likewise.
+ 	* tree.def (VALUE_HANDLE): New code.
+ 	* tree.h (struct tree_value_handle): New.
+ 	(VALUE_HANDLE_ID): Define.
+ 	(VALUE_HANDLE_EXPR_SET): Define.
+ 	(enum tree_node_structure_enum): Add TS_VALUE_HANDLE.
+ 	(union tree_node): Add struct tree_value_handle.
+ 
+ 2004-06-23  Andrew Pinski  <apinski@apple.com>
+ 
+ 	* c-typeck.c (composite_type):
+ 	<case POINTER_TYPE>: Build a qualified type of
+ 	the new type.
+ 	<case ARRAY_TYPE>: Likewise.
+ 	<case FUNCTION_TYPE>: Likewise.
+ 
+ 2004-06-23  Pat Haugen  <pthaugen@us.ibm.com>
+ 
+ 	PR optimization/15633
+ 	* value-prof.c (divmod_fixed_value_transform): Compute probability
+ 	of taking optimal path and pass along to gen_ routine.
+ 	(mod_pow2_value_transform): Same.
+ 	(mod_subtract_transform): Same.
+ 	(gen_divmod_fixed_value): Add new probability parameter.
+ 	Add probability to newly created jump.
+ 	(gen_mod_pow2): Same.
+ 	(gen_mod_subtract): Same.
+ 
+ 2004-06-23  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* PR target/15948
+ 	* arm.md (bicsi3_cbranch): Add alternative to handle tying operands
+ 	one and two.
+ 
+ 2004-06-23  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	PR target/15927
+ 	* arm.h (THUMB_SECONDARY_OUTPUT_RELOAD_CLASS): Don't need a secondary
+ 	reload if CLASS is BASE_REGS.
+ 
+ 2004-06-23  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* gengtype-yacc.y (option): Avoid use of non-constant struct
+ 	initializer.
+ 
+ 2004-06-23  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* doc/extend.texi (Function Attributes): Alphabetize.
+ 
+ 2004-06-23  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-gimplify.c (gimplify_decl_stmt): Update gimplify_type_sizes call.
+ 	Use gimplify_and_add.
+ 	* c-typeck.c (c_finish_if_stmt): Use NULL instead of empty stmt.
+ 	* gimplify.c (build_and_jump, gimplify_exit_expr,
+ 	gimplify_init_constructor, gimplify_save_expr, gimple_push_cleanup,
+ 	gimplify_stmt, gimplify_expr): Likewise.
+ 	(shortcut_cond_expr): Handle NULL arms of COND_EXPR.
+ 	(gimplify_statement_list): Remove NULL entries.
+ 	(gimplify_to_stmt_list): Handle NULL results.
+ 	(gimplify_type_sizes): Add list_p argument.
+ 	(gimplify_one_sizepos): Don't use internal pre/post queue.
+ 	* tree-gimple.h (gimplify_type_sizes): Update.
+ 
+ 2004-06-22  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* config/rs6000/rs6000.md (*insvsi_internal5/6): New patterns.
+ 
+ 2004-06-22  Pat Haugen  <pthaugen@us.ibm.com>
+ 
+ 	* cfghooks.c (make_forwarder_block): Decrement count on fallthru edge
+ 	when redirecting back edges.
+ 
+ 	* cfghooks.c (split_block): Call make_single_succ_edge so that edge
+ 	count/probability are set correctly.
+ 
+ 2004-06-22  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-typeck.c (emit_side_effect_warnings): Ignore error marks.
+ 	(c_finish_stmt_expr): Likewise.
+ 
+ 	* config/i386/i386.c (TARGET_STRUCT_VALUE_RTX): New.
+ 	(ix86_return_in_memory): Move SSE vector return warning ...
+ 	(ix86_struct_value_rtx): ... here.  New.
+ 
+ 2004-06-22  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree.def (VTABLE_REF): Remove.
+ 	(OBJ_TYPE_REF): New.
+ 	(TRY_CATCH_EXPR, TRY_FINALLY_EXPR): Set type 's'.
+ 	* expr.c (expand_expr_real_1): Replace VTABLE_REF with OBJ_TYPE_REF.
+ 	* fold-const.c (non_lvalue): Likewise.
+ 	* gimplify.c (gimplify_expr): Likewise.
+ 	(gimplify_call_expr): Use is_gimple_call_addr.
+ 	* langhooks-def.h (LANG_HOOKS_FOLD_OBJ_TYPE_REF): New.
+ 	* langhooks.h (fold_obj_type_ref): New.
+ 	* tree-gimple.c (is_gimple_call_addr): New.
+ 	* tree-gimple.h (is_gimple_call_addr): Declare.
+ 	* tree-inline.c (inlinable_function_p): Fix merge error.
+ 	(estimate_num_insns_1): Replace VTABLE_REF with OBJ_TYPE_REF.
+ 	* tree-pretty-print.c (dump_generic_node): Likewise.
+ 	(print_call_name): Handle OBJ_TYPE_REF.
+ 	* tree-ssa-ccp.c (fold_stmt): Fold OBJ_TYPE_REF.
+ 	* tree-ssa-operands.c (get_expr_operands): Handle OBJ_TYPE_REF.
+ 	* tree.h (OBJ_TYPE_REF_EXPR): New.
+ 	(OBJ_TYPE_REF_OBJECT, OBJ_TYPE_REF_TOKEN): New.
+ 	* doc/c-tree.texi (VTABLE_REF): Remove.
+ 	* objc/objc-act.c (build_objc_method_call): Build an OBJ_TYPE_REF.
+ 
+ 2004-06-22  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR middle-end/16026
+ 	* function.c (assign_parms): Don't abort for overaligned PARALLEL.
+ 
+ 2004-06-22  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* Makefile.in (distclean): Don't try to remove empty directories.
+ 
+ 2004-06-22  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	PR target/15869
+ 	* config/mips/mips.c (mips_avoid_hazards): Call split_all_insns_noflow.
+ 
+ 2004-06-22  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	* config/mn10300/mn10300.md (movdi, movdf): Use high/low for movu
+ 	operands.
+ 
+ 2004-06-22  Dale Johannesen  <dalej@apple.com>
+ 
+ 	* config/rs6000/rs6000.c (legitimate_offset_address_p): Make
+ 	global, rename rs6000_legitimate_offset_address_p.
+ 	(rs6000_legitimate_address_p): Adjust calls to it.
+ 	(lmw_operation): Ditto.
+ 	(stmw_operation): Ditto.
+ 	* config/rs6000/rs6000-protos.h: Declare it.
+ 	* config/rs6000/rs6000.md (*movdf_hardfloat32): Use it
+ 	instead of offsettable_memref_p.
+ 
+ 2004-06-22  Dale Johannesen  <dalej@apple.com>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_legitimate_address): Disallow
+ 	[reg+reg] mode for TFmode memory accesses.
+ 	(rs6000_eliminate_indexed_memrefs): New.
+ 	(rs6000_emit_move): Call preceding for TImode and TFmode.
+ 
+ 2004-06-22  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* tree-cfg.c (pass_warn_function_return): It needs
+ 	CFG, not SSA.
+ 
+ 2004-06-22  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* doc/invoke.texi (Machine Dependent Options): Alphabetize.
+ 	(Submodel Options): Likewise.
+ 
+ 2004-06-21  Andrew Pinski  <apinski@apple.com>
+ 
+ 	Radar #: 3701874
+ 	* c-decl.c (push_file_scope): Return early if we already
+ 	have a file scope.
+ 
+ 2004-06-21  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* c-opts.c (c_common_handle_option): Handle -fpch-preprocess.
+ 	* c-common.h (flag_pch_preprocess): Declare.
+ 	(c_common_pch_pragma): Likewise.
+ 	* c-common.c (flag_pch_preprocess): New.
+ 	* c-pch.c (c_common_read_pch): Support -fpreprocess-only.
+ 	(c_common_pch_pragma): New.
+ 	* c-ppoutput.c (cb_read_pch): New.
+ 	(init_pp_output): Support -fpch-preprocess.
+ 	* c-pragma.c (init_pragma): Support #pragma GNUC pch_preprocess.
+ 	* c.opt (fpch-preprocess): New.
+ 	* gcc.c (cpp_options): When save-temps, pass -fpch-preprocess.
+ 	* doc/cppopts.texi: Document -fpch-preprocess.
+ 	* doc/invoke.texi (Precompiled Headers): Mention that
+ 	-fpreprocessed is safe for PCH.  Mention that if an option is
+ 	listed as safe that doesn't mean it does what you expect.
+ 
+ 2004-06-22  Ben Elliston  <bje@au.ibm.com>
+ 
+ 	* tree-ssa.c (ssa_redirect_edge): Correct leading comment.
+ 
+ 2004-06-21  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* Makefile.in (gimplify.o): Add cgraph.h.
+ 	* alias.c (adjust_offset_for_component_ref): Use
+ 	component_ref_field_offset.
+ 	* c-decl.c (build_array_declarator): Add news args for ARRAY_REF.
+ 	* c-gimplify.c (gimplify_expr_stmt): Use alloc_stmt_list.
+ 	(gimplify_decl_stmt): Call gimplify_type_sizes for type.
+ 	For decl, call gimplify_one_sizepos and use statement list.
+ 	(gimplify_compound_literal_expr): New arg PRE_P.
+ 	Add statement to PRE_P list and return DECL.
+ 	(c_gimplify_expr, case COMPOUND_LITERAL_EXPR): Add arg to
+ 	gimplify_compound_literal_expr.
+ 	* c-tree.h (getdecls): Deleted.
+ 	* c-typeck.c (build_component_ref): Add operand for COMPONENT_REF.
+ 	(build_array_ref): Add two operands for ARRAY_REF.
+ 	(build_unary_op): Set TREE_INVARIANT and TREE_CONSTANT for
+ 	COMPOUND_LITERAL_EXPR.
+ 	* coverage.c (tree_coverage_counter_ref): Add new operands
+ 	for ARRAY_REF.
+ 	* emit-rtl.c (component_ref_for_mem_expr): Add new operand
+ 	for COMPONENT_REF.
+ 	(set_mem_attributes_minus_bitpos): Use array_ref_low_bound
+ 	and array_ref_element_size.
+ 	(widen_memory_access):Use component_ref_field_offset.
+ 	* explow.c (update_nonlocal_goto_save_area): Add two operands
+ 	for ARRAY_REF.
+ 	* expr.c (array_ref_element_size, array_ref_low_bound): New functions.
+ 	(component_ref_field_offset): Likewise.
+ 	(get_inner_reference): Use them.
+ 	(expand_expr_real_1, case ARRAY_REF): Use array_ref_low_bound.
+ 	* fold-const.c (fold, case EQ_EXPR): Properly handle DECL_SIZE.
+ 	(fold_read_from_constant_string): Use array_ref_low_bound.
+ 	Verify that result is a character type.
+ 	(build_fold_indirect_ref): Add two operands for ARRAY_REF.
+ 	* function.c (expand_function_start): Likewise.
+ 	* gimple-low.c (expand_var_p): Delete duplicated line.
+ 	* gimplify.c: Add static decls for local functions.
+ 	(cgraph.h): Now included.
+ 	(create_tmp_var): Remove check for ARRAY_TYPE.
+ 	(copy_if_shared_r): Look at bounds and sizes of types.
+ 	(build_and_jump): Return alloc_stmt_list instead of build_empty_stmt.
+ 	(gimplify_exit_expr, shortcut_cond_expr): Likewise.
+ 	(gimplify_save_expr, gimple_push_cleanup): Likewise.
+ 	(gimplify_init_constructor): Likewise.
+ 	WANT_VALUE now bool.
+ 	If empty list with no result wanted, return GS_UNHANDLED.
+ 	Add additional operands for ARRAY_REF and COMPONENT_REF.
+ 	(canonicalize_component_ref): Convert to &array[L].
+ 	(gimplify_array_ref_to_plus): Use array_ref_element_size and
+ 	array_ref_lower_bound.
+ 	(build_addr_expr_with_type, build_addr_expr): New functions.
+ 	(gimplify_compound_lval): WANT_LVALUE now bool.
+ 	Major rework to allow handle_component_p and initialize and
+ 	gimplify new operands for ARRAY_REF, ARRAY_RANGE_REF, and
+ 	COMPONENT_REF.
+ 	(gimplify_array_ref): Deleted.
+ 	(gimplify_self_mod_expr): WANT_VALUE now bool.
+ 	(gimplify_modify_expr): Gimplify to_p and from_p later.
+ 	Factor out code into gimplify_modify_expr_rhs and call twice.
+ 	Move variable-size code earlier and handle PLACEHOLDER_EXPR.
+ 	(gimplify_modify_expr_rhs, gimplify_variable_sized_compare): New fns.
+ 	(gimplify_addr_expr, case VIEW_CONVERT_EXPR): New case.
+ 	(gimplify_expr, case ARRAY_REF): Delete special case.
+ 	Instead handle like COMPONENT_REF; also do ARRAY_RANGE_REF,
+ 	IMAGPART, and REALPART the same way.
+ 	(gimplify_expr, case VIEW_CONVERT_EXPR): New case.
+ 	(gimplify_expr): Call gimplify_variable_sized_compare if applicable.
+ 	Call alloc_stmt_list instead of build_empty_stmt.
+ 	Deal with _REF that's volatile.
+ 	(gimplify_type_sizes, gimplify_one_sizepos): New functions.
+ 	(unshare_body, unvisit_body): New functions.
+ 	(gimplify_body): Call them.
+ 	* stmt.c (expand_stack_alloc): Don't expand TYPE_MAX_VALUE.
+ 	* stor-layout.c (get_pending_sizes): Don't change SAVE_EXPR_CONTEXT.
+ 	* tree-alias-common.c (get_alias_var): Also skip ARRAY_RANGE_REF.
+ 	* tree-cfg.c (tree_node_can_be_shared): Treat ARRAY_RANGE_REF
+ 	like ARRAY_REF.
+ 	(verify_expr, case ADDR_EXPR): Use handled_component_p.
+ 	* tree-dfa.c (get_virtual_var): Likewise.
+ 	* tree-dump.c (dequeue_and_dump, case COMPONENT_REF, ARRAY_REF):
+ 	New cases to dump new operands; likewise for ARRAY_RANGE_REF.
+ 	* tree-eh.c (tree_could_trap, case ARRAY_RANGE_REF): Like ARRAY_REF.
+ 	* tree-gimple.c (is_gimple_addr_expr_arg): Add ARRAY_RANGE_REF
+ 	and INDIRECT_REF.
+ 	(get_base_address): Use handled_component_p.
+ 	* tree-gimple.h (gimplify_type_sizes, gimplify_one_sizepos): New.
+ 	* tree-inline.c (walk_tree): Walk more things for types and decls.
+ 	* tree-mudflap.c (mf_build_check_statement_for): Add new operands
+ 	for ARRAY_REF and COMPONENT_REF.
+ 	(mx_xform_derefs_1): Clean up usage of decl sizes.
+ 	* tree-nested.c (build_addr): Use handled_component_p.
+ 	(walk_stmts, case CATCH_EXPR): Add missing "break".
+ 	(get_static_chain, get_frame_field): Add new operand for COMPONENT_REF.
+ 	(finalize_nesting_tree_1): Likewise.
+ 	(convert_nonlocal_reference, case ARRAY_RANGE_REF): Like ARRAY_REF
+ 	and process additional operands.
+ 	(convert_local_reference): Likewise.
+ 	* tree-outof-ssa.c (discover_nonconstant_array_refs_r): Treat
+ 	ARRAY_RANGE_REF similarly to ARRAY_REF.
+ 	* tree-pretty-print.c (dump_generic_node, case QUAL_UNION_TYPE): Handle
+ 	like RECORD_TYPE.
+ 	(dump_generic_node, case COMPONENT_REF): Print offset operand.
+ 	(dump_generic_node, case ARRAY_RANGE_REF): Treat like ARRAY_REF
+ 	and print lower bound and element size for both.
+ 	(op_prio, case ARRAY_RANGE_REF): Like ARRAY_REF.
+ 	* tree-sra.c (csc_build_component_ref): Add new operand.
+ 	(scalarize_call_expr): Use get_base_address.
+ 	* tree-ssa-ccp.c (widen_bitfield): Clean up size handling.
+ 	(maybe_fold_offset_to_array_ref): Rework to handle input having an
+ 	ARRAY_REF, refine handling of lower bound, and add new operands
+ 	for ARRAY_REF.
+ 	(maybe_fold_to_component_ref): Add new operand for COMPONENT_REF.
+ 	(maybe_fold_stmt_indirect): Only fold *&B to B if types match.
+ 	(maybe_fold_stmt_addition): Only handle constant lower bound.
+ 	* tree-ssa-operands.c (get_expr_operands): Minor rearrangements.
+ 	Treat ARRAY_REF and ARRAY_RANGE_REF the same; look at extra operands.
+ 	Look at new offset operand of COMPONENT_REF.
+ 	* tree-ssa.c (set_is_used): Use handled_component_p.
+ 	* tree.c (substitute_in_expr, case COMPONENT_REF): Add new operand.
+ 	(stabilize_reference, case COMPONENT_REF): Likewise.
+ 	(stabilize_reference, case ARRAY_RANGE_REF, ARRAY_REF): Similarly.
+ 	(recompute_tree_invariant_for_addr_expr): Completely rework to
+ 	be more precise.  Also set TREE_SIDE_EFFECTS.
+ 	(build1_stat, case ARRAY_EXPR): Don't handle TREE_SIDE_EFFECTS here.
+ 	(build2_stat, build3_stat, build4_stat): For references,
+ 	propagate TREE_THIS_VOLATILE.
+ 	(get_unwidened): Add new operand for COMPONENT_REF.
+ 	(get_narrower): Likewise; use host_integerp for DECL_SIZE.
+ 	* tree.def (COMPONENT_REF): Add new operand.
+ 	(ARRAY_REF, ARRAY_RANGE_REF): Add two new operands.
+ 	* tree.h (array_ref_element_size, array_ref_low_bound): New decls.
+ 	(component_ref_field_offset): Likewise.
+ 	* config/alpha/alpha.c (alpha_va_start): Add new op for COMPONENT_REF.
+ 	(alpha_gimplify_va_arg): Likewise.
+ 	* config/i386/i386.c (ix86_va_start, ix86_gimplify_va_arg): Likewise.
+ 	* config/i860/i860.c (i860_va_start, i860_va_arg): Likewise.
+ 	* config/iq2000/iq2000.c (iq2000_va_arg): Likewise.
+ 	* config/mips/mips.c (mips_va_start, mips_va_arg): Likewise.
+ 	* config/rs6000/rs6000.c (rs6000_va_start, rs6000_gimplify_va_arg):
+ 	Likewise.
+ 	* config/s390/s390.c (s390_va_start, s390_gimplify_va_arg): Likewise.
+ 	* config/sh/sh.c (sh_va_start, sh_va_arg): Likewise.
+ 	* config/stormy16/stormy16.c (xstormy1_expand_builin_va_start):
+ 	Likewise.
+ 	(xstormy16_expand_builtin_va_arg): Likewise.
+ 	* config/xtensa/xtensa.c (xtensa_va_start, xtensa_va_arg): Likewise.
+ 	* objc/objc-act.c (generate_static_references): Likewise.
+ 	(generate_strings, build_method_prototype_list_template): Likewise.
+ 	(generate_protocol_list): Likewise.
+ 
+ 2004-06-21  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	PR rtl-optimization/14782
+ 	* pa.c (emit_move_sequence): Use SFmode for 4-byte modes when doing
+ 	the address checks for secondary reloads for loads from and stores
+ 	to floating-point registers.
+ 	* pa.h (EXTRA_CONSTRAINT, case T): Use SFmode for 4-byte modes
+ 	in the address check.  Move work around for ELF32 targets to
+ 	GO_IF_LEGITIMATE_ADDRESS.
+ 	(GO_IF_LEGITIMATE_ADDRESS): Require constant offsets to be
+ 	correctly aligned for DImode loads and stores.  Don't allow long
+ 	SFmode displacements on ELF32.
+ 
+ 2004-06-21  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR rtl-opt/16114
+ 	* cse.c (merge_equiv_classes): Also rehash in response to
+ 	delete_reg_equiv changes.
+ 	(rehash_using_reg): Don't exclude REGs from rehashing.
+ 
+ 2004-06-21  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-common.def (RETURN_STMT): Remove.
+ 	* c-common.h (RETURN_STMT_EXPR): Remove.
+ 	(c_expand_return, build_return_stmt): Remove.
+ 	(c_common_stmt_codes): Remove RETURN_STMT.
+ 	* c-dump.c (dump_next_stmt): Remove.
+ 	(c_dump_tree): Remove RETURN_STMT.
+ 	* c-decl.c (finish_function): Use c_finish_return.
+ 	* c-parse.in (stmt): Likewise.
+ 	* c-gimplify.c (gimplify_return_stmt): Remove.
+ 	(c_gimplify_expr): Remove RETURN_STMT.
+ 	* c-pretty-print.c (pp_c_statement): Likewise.
+ 	* c-semantics.c (build_return_stmt): Remove.
+ 	* c-tree.h (c_finish_return): Declare.
+ 	* c-typeck.c (c_finish_return): Rename from c_expand_return.
+ 	Return void.  Build RETURN_EXPR directly.
+ 	* tree-dump.h (dump_next_stmt): Remove.
+ 
+ 2004-06-21  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* c-decl.c (start_function): Don't call make_decl_rtl.  Don't
+ 	look at TREE_ADDRESSABLE of symbol name.
+ 
+ 2004-06-21  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	PR target/15551
+ 	* config/i386/i386.md: Change UNSPEC_STACK_PROBE to UNSPECV_STACK_PROBE.
+ 	(allocate_stack_worker): Make unspec_volatile.
+ 	(allocate_stack_worker_rex64):  Likewise.
+ 	(allocate_stack_worker_postreload):  Likewise.
+ 	(allocate_stack_worker_rex64_postreload):  Likewise.
+ 
+ 2004-06-21  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	Fix PR optimization/15982
+ 	* tree-ssa-pre.c: Update a few comments and todos to
+ 	reflect constants change.
+ 	(get_value_handle): Constants now value number to themselves.
+ 	(lookup): Constants lookup to themselves.
+ 	(add_to_value): Adjust to always be on.
+ 	(set_contains_value): Adjust for constants change.
+ 	(find_leader): Ditto.
+ 	(phi_translate): 'r' nodes are never ANTIC right now.
+ 	(valid_in_set): Ditto.
+ 	(get_expr_set): New function.
+ 	(find_or_generate_expression): New function, broken out from
+ 	insert_aux.
+ 	(create_expression_by_pieces): Ditto, plus additional
+ 	machinery to handle complex values.
+ 	(compute_avail): Remove dead RETURN_EXPR handling.
+ 
+ 2004-06-21  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* config/i386/i386.c: Include insn-codes.h
+ 	* config/i386/i386.h (FLAGS_REG, FPSR_REG, DIRFLAG_REG): Don't
+ 	define here.
+ 	* config/i386/i386.md (BP_REG, SP_REG, FLAGS_REG, FPSR_REG,
+ 	DIRFLAG_REG): New define_constants.  Use them everywhere.
+ 
+ 2004-06-21  Kaz Kojima  <kkojima@gcc.gnu.org>
+ 
+ 	* config/sh/t-linux (MULTILIB_OPTIONS): Remove.
+ 
+ 2004-06-21  J"orn Rennecke <joern.rennecke@superh.com>
+ 
+ 	* sh.h (SUPPORT_SH1, SUPPORT_SH2E, SUPPORT_SH4): Conditionally define.
+ 	(SUPPORT_SH4_SINGLE): Likewise.
+ 	(TARGET_SWITCHES): Break out switches for cpu subtargets:
+ 	(TARGET_SWITCH_SH1, TARGET_SWITCH_SH2, TARGET_SWITCH_SH2E): Define.
+ 	(TARGET_SWITCH_SH3, TARGET_SWITCH_SH3E): Likewise.
+ 	(TARGET_SWITCH_SH4_SINGLE_ONLY, TARGET_SWITCH_SH4_SINGLE): Likewise.
+ 	(TARGET_SWITCH_SH4_NOFPU, TARGET_SWITCH_SH4): Likewise.
+ 	(TARGET_SWITCH_SH5_64MEDIA, TARGET_SWITCH_SH5_64MEDIA_NOFPU): Likewise.
+ 	(TARGET_SWITCHES_SH5_32MEDIA): Likewise.
+ 	(TARGET_SWITCHES_SH5_32MEDIA_NOFPU): Likewise.
+ 	(SELECT_SH5_64, SELECT_SH5_64_NOFPU): Rename to:
+ 	(SELECT_SH5_64MEDIA, SELECT_SH5_64MEDIA_NOFPU)
+ 	(SELECT_SH5_32, SELECT_SH5_32_NOFPU): Rename to:
+ 	(SELECT_SH5_32MEDIA, SELECT_SH5_32MEDIA_NOFPU).
+ 	(SH_MULTILIB_CPU_DEFAULT, MULTILIB_DEFAULTS): Define.
+ 	(ASM_ISA_SPEC_DEFAULT, ASM_ISA_DEFAULT_SPEC): Likewise.
+ 	* sh64.h (ASM_SPEC, LINK_DEFAULT_CPU_EMUL): Don't redefine.
+ 	(TARGET_DEFAULT): Likewise.
+ 	* config/sh/t-elf: Amend comment.
+ 	* config/sh/t-1e, config/sh/t-mlib-sh1: New files.
+ 	* config/sh/t-mlib-sh2, config/sh/t-mlib-sh2e: Likewise.
+ 	* config/sh/t-mlib-sh3, config/sh/t-mlib-sh3e: Likewise.
+ 	* config/sh/t-mlib-sh4, config/sh/t-mlib-sh4-nofpu: Likewise.
+ 	* config/sh/t-mlib-sh4-single: Likewise.
+ 	* config/sh/t-mlib-sh4-single-only: Likewise.
+ 	* config/sh/t-mlib-sh5-32media: Likewise.
+ 	* config/sh/t-mlib-sh5-32media-nofpu: Likewise.
+ 	* config/sh/t-mlib-sh5-64media: Likewise.
+ 	* config/sh/t-mlib-sh5-64media-nofpu: Likewise.
+ 	* config/sh/t-mlib-sh5-compact: Likewise.
+ 	* config/sh/t-mlib-sh5-compact-nofpu: Likewise.
+ 	* config/sh/t-sh: (MULTILIB_ENDIAN): Add mb.
+ 	(MULTILIB_CPUS): Define.
+ 	(MULTILIB_OPTIONS): Use MULTILIB_CPUS.
+ 	(MULTILIB_MATCHES): Use some shell code to calculate it.
+ 	(MULTILIB_EXCEPTIONS): Change to ml/m1.
+ 	* config/sh/elf.h (SUBTARGET_ASM_ISA_SPEC): Use ASM_ISA_DEFAULT_SPEC.
+ 	* config/sh/netbsd-elf.h: Update code which sets TARGET_VERSION_CPU.
+ 	(LINK_DEFAULT_CPU_EMUL): Don't redefine.
+ 	(NO_PROFILE_COUNTERS): Define to 1.
+ 	* config/sh/t-netbsd (MULTILIB_OPTIONS): Don't append to.
+ 	(MULTILIB_DIRNAMES, MULTILIB_MATCHES, MULTILIB_EXCEPTIONS): Don't zap.
+ 	* config/sh/t-netbsd-sh5-64 (MULTILIB_OPTIONS): Don't redefine.
+ 	(MULTILIB_MATCHES): Don't zap.
+ 	(MULTILIB_DIRNAMES): Use MULTILIB_RAW_DIRNAMES.
+ 	* config/sh/t-sh64 (MULTILIB_OPTIONS): Don't redefine.
+ 	(MULTILIB_MATCHES, MULTILIB_EXCEPTIONS): Don't zap.
+ 	(MULTILIB_RAW_DIRNAMES): Define.
+ 	(MULTILIB_DIRNAMES): Use it.
+ 	* config.gcc: Also set cpu_type / need_64bit_hwint for sh[be]*-*-*.
+ 	(sh*linux configurations): Merge into:
+ 	(sh*elf / sh*kaos configurations).  Support --with-endian, --with-cpu,
+ 	--with-multilib-list options.  Support sh-superh-elf configuration.
+ 	(sh*-netbsd*): Use SELECT_SH* macros.
+ 	(supported_defaults): sh[123456ble]-*-* | sh-*-* support "cpu".
+ 	Merge sh*-*-netbsd* configurations into sh-elf configurations.
+ 	* config/sh/t-netbsd-sh5, config/sh/t-be, config/sh/t-le: Delete.
+ 	* config/sh/t-monolib: Likewise.
+ 
+ 2004-06-21  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/arm.h (ARM_LEGITIMIZE_RELOAD_ADDRESS): Soft-float need
+ 	not imply FPA.
+ 
+ 2004-06-21  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* fold-const.c (operand_equal_p): Pass flags in recursive calls for
+ 	binary and relational operations.  Add support for TRUTH_ANDIF_EXPR,
+ 	TRUTH_ORIF_EXPR, TRUTH_AND_EXPR, TRUTH_OR_EXPR and TRUTH_XOR_EXPR.
+ 	* tree.c (commutative_tree_code): Also list UNORDERED_EXPR,
+ 	ORDERED_EXPR, UNEQ_EXPR, LTGT_EXPR, TRUTH_AND_EXPR, TRUTH_OR_EXPR
+ 	and TRUTH_XOR_EXPR.
+ 
+ 2004-06-21  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* rtlanal.c (may_trap_p): Mark LTGT as trapping.
+ 
+ 2004-06-21  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* tree-alias-common.h (struct tree_alias_ops): Change ip and
+ 	ip_partial to unsigned int.
+ 
+ 2004-06-21  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-common.c (verify_sequence_points): Export.
+ 	(c_expand_expr_stmt): Move to c-typeck.c.
+ 	* c-common.h (c_expand_expr_stmt): Remove.
+ 	(verify_sequence_points): Declare.
+ 	* c-mudflap.c (mflang_flush_calls): Use c_finish_expr_stmt.
+ 	* c-parse.in (for_init_stmt, stmt): Likewise.
+ 	* c-tree.h (c_finish_expr_stmt): Declare.
+ 	(c_tree_expr_nonnegative_p): Remove.
+ 	* c-typeck.c (c_tree_expr_nonnegative_p): Remove.
+ 	(build_conditional_expr, build_binary_op): Use tree_expr_nonnegative_p.
+ 	(emit_side_effect_warnings): New.
+ 	(c_finish_expr_stmt): Rename from c_expand_expr_stmt.  Use it.
+ 	(c_finish_stmt_expr): Work without EXPR_STMT.  Handle eh regions.
+ 	Use emit_side_effect_warnings.
+ 	(push_cleanup): Copy STATEMENT_LIST_STMT_EXPR.
+ 	* fold-const.c (tree_expr_nonnegative_p): Handle TARGET_EXPR.
+ 	* gimplify.c (gimplify_modify_expr): Don't discard TARGET_EXPR
+ 	with void initializer.
+ 	(gimplify_target_expr): Handle void BIND_EXPR initializer.
+ 	* tree-inline.c (estimate_num_insns_1): Fix type lookup for
+ 	INIT_EXPR and MODIFY_EXPR.
+ 	* objc/objc-act.c (build_module_descriptor): Use add_stmt
+ 	instead of c_expand_expr_stmt.
+ 
+ 2004-06-21  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* fold-const.c (fold_cond_expr_with_comparison):
+ 	New function, extracted from fold.
+ 	(fold): Extract code to fold A op B ? A : C, use
+ 	it to fold A op B ? C : A.  Really optimize
+ 	A & N ? N : 0 where N is a power of two.  Avoid
+ 	relying on canonicalization and recursion for
+ 	foldings of COND_EXPR to happen.
+ 
+ 2004-06-20  David Ayers  <d.ayers@inode.at>
+ 
+ 	* objc/objc-act.h (get_object_reference): Rename to
+ 	get_protocol_reference.
+ 	(super_type): Rename to objc_super_type.
+ 	(selector_type): Rename to objc_selector_type.
+ 	(id_type): Rename to objc_id_type.
+ 	(instance_type): Rename to objc_instance_type.
+ 	(protocol_type): Rename to objc_protocol_type.
+ 	(IS_ID): Update reference to id_type.
+ 	* objc/objc-act.c (get_object_reference): Rename to
+ 	get_protocol_reference; add documentation; update references to
+ 	id_type.
+ 	(lookup_method_in_protocol_list): Rename class_meth to
+ 	is_class; add documentation.
+ 	(finish_message_expr): Rename is_class to class_tree.
+ 	(synth_module_prologue, objc_is_object_ptr, objc_build_exc_ptr,
+ 	next_sjlj_build_try_catch_finally, objc_begin_catch_clause,
+ 	build_next_objc_exception_stuff, get_arg_type_list,
+ 	build_objc_method_call): Update references to id_type.
+ 	(synth_module_prologue, build_objc_symtab_template,
+ 	build_selector_reference_decl, build_selector,
+ 	build_selector_translation_table, build_typed_selector_reference,
+ 	get_arg_type_list, synth_self_and_ucmd_args, get_arg_type_list,
+ 	synth_self_and_ucmd_args): Update references to selector_type.
+ 	(build_private_template, build_ivar_reference):	Update references
+ 	to instance_type.
+ 	(synth_module_prologue, build_protocol_reference,
+ 	build_protocol_expr, start_protocol): Update references to
+ 	protocol_type.
+ 	(synth_module_prologue, get_arg_type_list, build_objc_method_call):
+ 	Update references to super_type.
+ 	* c-parse.in: (typespec_nonreserved_nonattr): Update
+ 	references to get_object_reference.
+ 	* objc/objc-tree.def: Add C mode identifier sequence.
+ 
+ 2004-06-20  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* loop-invariant.c: New file.
+ 	* Makefile.in (loop-invariant.o): New.
+ 	* cfgloop.h (global_cost_for_size, init_set_costs,
+ 	move_loop_invariants): Declare.
+ 	* cfgloopanal.c (seq_cost, init_set_costs, global_cost_for_size): New
+ 	functions.
+ 	(avail_regs, res_regs, small_cost, pres_cost, spill_cost): New
+ 	variables.
+ 	* common.opt (floop-optimize2, fmove-loop-invariants): New options.
+ 	* loop-init.c (loop_optimizer_init): Call init_set_costs.
+ 	* passes.c (rest_of_handle_loop2): Call move_loop_invariants.
+ 	(rest_of_compilation): Check flag_loop_optimize2.
+ 	* toplev.c (process_options): Handle flag_loop_optimize2.
+ 	* doc/invoke.texi (-floop-optimize2, -fmove-loop-invariants): Document.
+ 	* doc/passes.texi (loop-invariant.c): Document.
+ 
+ 2004-06-20  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-ssa-pre.c (compute_antic): Keep BB_VISITED flag zeroed.
+ 
+ 2004-06-20  Richard Henderson  <rth@redhat.com>
+ 
+ 	* stmt.c (warn_if_unused_value): Add locus argument.
+ 	* tree.h (warn_if_unused_value): Update decl.
+ 	* c-typeck.c (internal_build_compound_expr): Update call.
+ 	* c-gimplify.c (gimplify_expr_stmt): Likewise.
+ 
+ 2004-06-20  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR middle-end/16089
+ 	* builtins.c (entry_of_function): Move to ...
+ 	* cfgrtl.c (entry_of_function): Here and make non-static.
+ 	* integrate.c (emit_initial_value_sets): Use entry_of_function.
+ 	* rtl.h (entry_of_function): Prototype.
+ 
+ 2004-06-20  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* config/i386/i386.c (pentium4_cost): Increase "lea" cost from 1 to 3.
+ 	(ix86_rtx_costs) <ASHIFT, PLUS>: Consider ix86_cost->lea even when
+ 	TARGET_DECOMPOSE_LEA.
+ 
+ 2004-06-20  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-common.h (add_decl_stmt): Move to cp-tree.h.
+ 	* c-decl.c (finish_decl): Don't use add_decl_stmt.
+ 	* c-parse.in: Likewise.
+ 	* c-gimplify.c (gimplify_expr_stmt): Don't build CLEANUP_POINT_EXPR.
+ 	(gimplify_c_loop, gimplify_return_stmt, gimplify_decl_stmt): Likewise.
+ 	* c-semantics.c (add_decl_stmt): Move to cp/semantics.c.
+ 
+ 2004-06-20  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-common.def (IF_STMT, CLEANUP_STMT): Move to cp-tree.def.
+ 	* c-common.h (IF_COND, THEN_CLAUSE, ELSE_CLAUSE, CLEANUP_BODY,
+ 	CLEANUP_EXPR, CLEANUP_DECL): Move to cp-tree.h.
+ 	(c_common_stmt_codes): Remove IF_STMT, CLEANUP_STMT.
+ 	* c-dump.c (c_dump_tree): Move IF_STMT, CLEANUP_STMT to cp_dump_tree.
+ 	* c-pretty-print.c (pp_c_statement): Similarly.
+ 	* c-gimplify.c (gimplify_cleanup_stmt, gimplify_cleanup_stmts,
+ 	gimplify_if_stmt): Move to cp-gimplify.c.
+ 	(c_genericize, c_gimplify_expr): Don't call them.
+ 	* c-semantics.c (push_cleanup): Move to cp/semantics.c.
+ 	* c-typeck.c (push_cleanup): New.
+ 	(c_begin_if_stmt, c_finish_if_cond, c_finish_then, c_finish_else,
+ 	c_finish_if_stmt): Use COND_EXPR.
+ 	* tree.h (CLEANUP_EH_ONLY): Update documentation.
+ 
+ 2004-06-20  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* c-common.h (has_c_linkage): New interface.
+ 	* c-cppbuiltin.c: Include target.h.
+ 	(c_cpp_builtins): Define __PRAGMA_REDEFINE_EXTNAME and
+ 	__PRAGMA_EXTERN_PREFIX when appropriate.
+ 	* c-pragma.c: Include target.h.
+ 	Document clarified semantics of symbol-renaming #pragmas.
+ 	(handle_pragma_redefine_extname, handle_pragma_extern_prefix)
+ 	(maybe_apply_renaming_pragma): Rewrite according to clarified
+ 	semantics.  Always recognize, but do not necessarily execute.
+ 	(init_pragma): Unconditionally register symbol-renaming pragmas.
+ 	* system.h: Poison HANDLE_PRAGMA_REDEFINE_EXTNAME
+ 	and HANDLE_PRAGMA_EXTERN_PREFIX.
+ 	* target.h (struct gcc_target): Add handle_pragma_redefine_extname
+ 	and handle_pragma_extern_prefix flags.
+ 	* target-def.h: Add defaults for TARGET_HANDLE_PRAGMA_REDEFINE_EXTNAME
+ 	and TARGET_HANDLE_PRAGMA_EXTERN_PREFIX.
+ 	* Makefile.in (c-pragma.o, c-cppbuiltin.o): Update dependencies.
+ 	* config/sol2.h: Define TARGET_HANDLE_PRAGMA_REDEFINE_EXTNAME,
+ 	not HANDLE_PRAGMA_REDEFINE_EXTNAME.
+ 	(TARGET_OS_CPP_BUILTINS): No need to define __PRAGMA_REDEFINE_EXTNAME.
+ 	(TRANSFER_FROM_TRAMPOLINE): Prototype mprotect.
+ 	* config/alpha/osf.h: Define TARGET_HANDLE_PRAGMA_EXTERN_PREFIX,
+ 	not HANDLE_PRAGMA_EXTERN_PREFIX.
+ 	(TARGET_OS_CPP_BUILTINS): No need to define __PRAGMA_EXTERN_PREFIX.
+ 	* doc/extend.texi (Solaris Pragmas, Tru64 Pragmas): Combine
+ 	into one section "Symbol-Renaming Pragmas"; clarify; document
+ 	adjusted semantics.
+ 
+ 	* builtins.c (expand_builtin): Do not issue error for a builtin
+ 	with no special case code and no DECL_ASSEMBLER_NAME; just do the
+ 	library call.
+ 	* c-decl.c (builtin_function): Don't call make_decl_rtl.
+ 	* c-objc-common.c (has_c_linkage): Stub implementation.
+ 	* cgraphunit.c (cgraph_expand_function)
+ 	(cgraph_remove_unreachable_nodes): Don't clear DECL_ARGUMENTS.
+ 
+ 2004-06-19  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* builtins.c (fold_builtin_unordered_cmp): Take an EXP argument
+ 	instead of both an ARGLIST and a result TYPE.  Handle these C99
+ 	comparison functions as "polymorphic" builtins.  Also handle
+ 	lowering of BUILT_IN_ISUNORDERED to an UNORDERED_EXPR tree node.
+ 	(fold_builtin_1): Update calls to fold_builtin_unordered_cmp.
+ 	Move handling of BUILT_IN_ISUNORDERED from here to there.
+ 
+ 2004-06-19  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-common.c, c-common.h (lang_gimplify_stmt): Remove.
+ 	* c-gimplify.c: Remove unnecessary prototypes.
+ 	(c_gimplify_stmt): Merge into ...
+ 	(c_gimplify_expr): ... here.  Don't play with prep_stmt.
+ 	* c-semantics.c (prep_stmt): Remove.
+ 	* gimplify.c (annotate_one_with_locus): Break out from ...
+ 	(annotate_all_with_locus): ... here.
+ 	(gimplify_expr): Add locus to expressions even if pre/post queues
+ 	are not present.
+ 
+ 2004-06-19  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR target/15941
+ 	* function.c (assign_parms): If not padding upward or intentionally
+ 	forcing upward padding, take offset_rtx into account when determining
+ 	the alignment for stack_parm.
+ 
+ 2004-06-19  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR target/15550
+ 	* ifcvt.c (noce_try_move): Recognize all generated instructions.
+ 
+ 2004-06-19  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* function.c (free_after_compilation): Do not free computed_goto_common*.
+ 	* function.h (struct function): Kill computed_goto_common*.
+ 	* stmt.c (expand_computed_goto): Do not commonize the computed gotos.
+ 	* tree-cfg.c (disband_implicit_edges): Do not forward across the
+ 	commonized computed goto.
+ 
+ 2004-06-19  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	* doc/invoke.texi: Remove obsolete comment regarding PA 2.0 support
+ 	in binutils.
+ 
+ 2004-06-19  Andrew Pinski  <apinski@apple.com>
+ 
+ 	PR c++/15721
+ 	* toplev.c (wrapup_global_declarations): Do not check
+ 	TREE_SYMBOL_REFERENCED of the DECL_ASSEMBLER_NAME but check
+ 	cgraph_varpool_node's needed field.
+ 
+ 2004-06-19  Jan Hubicka  <jh@suse.cz>
+ 	    Steven Bosscher  <stevenb@suse.de>
+ 
+ 	CFG transparent RTL expansion:
+ 	* Makefile.in (cfgexpand.o): New object file.
+ 	(builtins.o): Add dependency on basic-block.h
+ 	* builtins.c: Include basic-block.h
+ 	(entry_of_function): New function.
+ 	(expand_builtin_apply_args, expand_builtin_saveargs): Use it.
+ 	* cfgexpand.c: New file.
+ 	* expr.c (execute_expand, pass_expand): Kill.
+ 	* pass.c (rest_of_compilation): Do not build CFG unless called from
+ 	coverage code.
+ 	* tree-cfg.c (delete_tree_cfg): Rename to..
+ 	(delete_tree_cfg_annotations): ... this one; Do not remove the CFG itself.
+ 	* tree-flow.h (delete_tree_cfg_annotations): Declare.
+ 	(dleete_tree_cfg): Kill.
+ 	* tree-optimize.c (execute_rebuild_bind, pass_rebuild_bind): Kill.
+ 	(execute_del_cfg): Rename to...
+ 	(execute_free_datastructures): This one...
+ 	(pass_del_cfg): Rename to...
+ 	(pass_free_datastructures): ... this one; Do not kill PROP_cfg.
+ 	(init_tree_optimization_passes): Make cfg build and profiling to happen
+ 	unconditionally.
+ 
+ 2004-06-19  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* tree-mudflap.c (mf_decl_cache_locals): Skip labels before
+ 	inserting the cache variables.
+ 
+ 	* tree-mudflap.c: Include headers to make basic_block available.
+ 	Move functions around such that related functions are near each
+ 	other.  Add prototypes for all static functions.  Add comments
+ 	briefly explaining what IR the mudflap1 and mudflap2 work on and
+ 	what they do.
+ 	(mudflap_function_decls): Rename to execute_mudflap_function_decls.
+ 	(mudflap_function_ops): Rename to execute_mudflap_function_ops.
+ 	(pass_mudflap_1, pass_mudflap_2): Update.
+ 	(mf_decl_cache_locals): Make it work on the CFG instead of the saved
+ 	function tree.
+ 	(mf_build_check_statement_for): Make it work on the CFG.
+ 	(mf_xform_derefs_1): Likewise.  Cleanup code style.
+ 	(mf_xform_derefs): Likewise.
+ 
+ 2004-06-19  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-cfg.c (label_to_block): Invent the label destination for
+ 	undefined labels.
+ 	(cleanup_dead_labels): Update table in the case label_to_block added
+ 	new label.
+ 
+ 2004-06-18  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR c++/16036
+ 	* gimple-low.c (lower_function_body): Generate return statement for
+ 	fall off the end of the function here ...
+ 	* tree-cfg.c (make_edges): ... instead of here.
+ 	* gimplify.c (gimplify_return_expr): Mark return temp TREE_NO_WARNING.
+ 
+ 2004-06-18  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-ssa.c (raise_value): Removed.
+ 	(get_eq_name, check_phi_redundancy): New functions.
+ 	(kill_redundant_phi_nodes): Use standard ssa minimalization algorithm.
+ 
+ 2004-06-18  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* fold-const.c (fold) <UNORDERED_EXPR, ORDERED_EXPR, UNLT_EXPR,
+ 	UNLE_EXPR, UNGT_EXPR, UNGE_EXPR, UNEQ_EXPR, LTGT_EXPR>: Add
+ 	constant folding for unordered comparison tree nodes.  If both
+ 	operands are real constants, call fold_relational_const.  If either
+ 	operand is a NaN, evaluate the other for side-effects and return a
+ 	constant.  Optimize (double)float1 CMP (double)float2 into the
+ 	equivalent float1 CMP float2.
+ 	(nondestructive_fold_binary_to_constant) <UNORDERED_EXPR,
+ 	ORDERED_EXPR, UNLT_EXPR, UNLE_EXPR, UNGT_EXPR, UNGE_EXPR, UNEQ_EXPR,
+ 	LTGT_EXPR>: Call fold_relational_const for constant operands.
+ 	(fold_relational_const): Add support for unordered comparison tree
+ 	nodes.  Don't constant fold "ordered" floating point comparisons
+ 	against NaN if when flag_trapping_math is set.
+ 
+ 2004-06-19  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* fold-const.c (build_range_check): If !in_p and recursive call
+ 	fails, exit immediately.  If high - low overflows and etype is
+ 	a signed type, retry with unsigned etype.
+ 	(merge_ranges): If !in0_p and !in1_p, handle even range2 adjacent
+ 	to range1 at TYPE_MAX_VALUE and TYPE_MIN_VALUE.
+ 
+ 2004-06-18  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-gimplify.c (gimplify_condition): Remove.
+ 	(gimplify_c_loop, gimplify_if_stmt, gimplify_switch_stmt): Don't
+ 	call it.
+ 
+ 2004-06-18  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-eh.c (decide_copy_try_finally): Fix scaling of copy and
+ 	switch estimates.
+ 
+ 2004-06-18  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* config/i386/darwin.h (HOT_TEXT_SECTION_NAME): Define.
+ 	(NORMAL_TEXT_SECTION_NAME): Define.
+ 	(UNLIKELY_EXECUTED_TEXT_SECTION_NAME): Define.
+ 	(SECTION_FORMAT_STRING): Define.
+ 
+ 2004-06-18  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* config/xtensa/xtensa.c
+ 	(TARGET_SCHED_USE_DFA_PIPELINE_INTERFACE): Define.
+ 	* xtensa.md: Replace the old pipeline description with a DFA model.
+ 
+ 2004-06-18  Steven Bosscher  <stevenb@suse.de>
+ 	    Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+ 
+ 	* config/s390/s390.md: Remove the generic pipeline description.
+ 	* config/s390/2064.md: Make all insn reservations apply to
+ 	the z900, g5 and g6.
+ 	* config/s390/s390.c (s390_use_dfa_pipeline_interface): Remove.
+ 	(TARGET_SCHED_USE_DFA_PIPELINE_INTERFACE):
+ 	Define to hook_int_void_1.
+ 	(s390_adjust_cost): Cleanup.  Don't check address dependency here.
+ 	(s390_first_cycle_multipass_dfa_lookahead): Always return 4.
+ 
+ 2004-06-18  Daniel Berlin  <dberlin@dberlin.org>
+ 			Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (create_var_ann): tree_ann -> tree_ann_t.
+ 	(create_stmt_ann): Ditto.
+ 	(create_tree_ann): New function.
+ 	(create_cst_ann): Remove.
+ 	(create_expr_ann): Ditto.
+ 
+ 	* tree-flow-inline.h (cst_ann): Remove.
+ 	(get_cst_ann): Ditto.
+ 	(get_expr_ann): Ditto.
+ 	(expr_ann): Ditto.
+ 	(get_tree_ann): New function.
+ 	(tree_ann): Ditto.
+ 	(ann_type): tree_ann -> tree_ann_t.
+ 	* tree-flow.h (tree_ann_type): CST_ANN, EXPR_ANN removed.
+ 	(struct cst_ann_d): Removed.
+ 	(struct expr_ann_d): Ditto.
+ 	(union tree_ann_d): Removed cst and expr.
+ 	(tree_ann): Renamed to tree_ann_t.
+ 	* tree-ssa-ccp.c (set_rhs): tree_ann -> tree_ann_t.
+ 	* tree-ssa-pre.c (get_value_handle): Rewrite for single common
+ 	annotation.
+ 	(set_value_handle): Ditto.
+ 	(phi_translate): Ditto.
+ 	* tree-tailcall.c (adjust_return_value): tree_ann -> tree_ann_t.
+ 
+ 2004-06-18  Kaz Kojima  <kkojima@gcc.gnu.org>
+ 
+ 	* config/sh/t-linux64: New file.
+ 	* config.gcc: Add it to tmake_file for sh64*-*-linux*.
+ 
+ 2004-06-18  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* emit-rtl.c (unshare_all_rtl_1): New name of unshare_all_rtl.
+ 	(unshare_all_rtl_again): Call unshare_all_rtl_1.
+ 	(unshare_all_rtl): New.
+ 	* function.c (instantiate_virtual_regs): Remove parameters.
+ 	* function.h (instantiate_virtual_regs): Add prototype.
+ 	* rtl.h (unshare_all_rtl): Add prototype.
+ 	* tree.h (instantiate_virtual_regs, unshare_all_rtl): Remove
+ 	prototype.
+ 	* passes.c: Remove assertions on the parameters to
+ 	rest_of_handle_* functions.  Remove the parameters to
+ 	the functions, replacing decl with current_function_decl
+ 	and insns with get_insns ().
+ 
+ 2004-06-17  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* fold-const.c (constant_boolean_node): Handle boolean_type_node
+ 	directly, return either boolean_true_node or boolean_false_node.
+ 
+ 2004-06-18  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* opts.sh: Delete.  Break out generated code to next four files.
+ 	* opt-gather.awk: New file.
+ 	* optc-gen.awk: New file.
+ 	* opth-gen.awk: New file.
+ 	* opt-functions.awk: New common file.
+ 	* Makefile.in: Update for above.
+ 	* configure.ac: Update comment.
+ 	* configure: Regenerate.
+ 
+ 2004-06-17  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-common.c (flag_objc_sjlj_exceptions): New.
+ 	* c-common.h (flag_objc_sjlj_exceptions): Declare.
+ 	* c-opts.c (c_common_handle_option): Set it.
+ 	(c_common_post_options): Handle interation of different
+ 	objective-c exception and runtime switches.
+ 	* c-decl.c (c_eh_initialized_p): New.
+ 	(finish_decl): Use it instead of local eh_initialized_p.
+ 	* c-parse.in (nested_function, notype_nested_function): Record
+ 	the result of compstmt.
+ 	(compstmt_or_error): Likewise.
+ 	(compstmt): Don't add_stmt the result.
+ 	(stmt): Don't return anything.  Rewrite objc try and sync rules.
+ 	(objc_try_stmt, objc_catch_list): Remove.
+ 	(objc_catch_block, objc_finally_block): Remove.
+ 	(objc_catch_prefix, objc_catch_clause, objc_opt_catch_list): New.
+ 	(objc_try_catch_clause, objc_finally_clause): New.
+ 	(objc_try_catch_stmt): Rewrite.
+ 	* c-tree.h (c_eh_initialized_p): Declare.
+ 	* c-opt (fobjc-sjlj-exceptions): New.
+ 	* except.c (output_function_exception_table): Don't call cgraph
+ 	on non-decls.
+ 	* objc/objc-act.c (UTAG_EXCDATA_VAR, UTAG_CAUGHTEXC_VAR,
+ 	UTAG_RETHROWEXC_VAR, UTAG_EVALONCE_VAR, struct val_stack,
+ 	catch_count_stack, exc_binding_stack, if_nesting_count,
+ 	blk_nesting_count, objc_enter_block, objc_exit_block,
+ 	objc_declare_variable, val_stack_push, val_stack_pop,
+ 	objc_build_try_enter_fragment, objc_build_extract_expr,
+ 	objc_build_try_exit_fragment, objc_build_extract_fragment,
+ 	objc_build_try_prologue, objc_build_try_epilogue,
+ 	objc_build_catch_stmt, objc_build_catch_epilogue,
+ 	objc_build_finally_prologue, objc_build_finally_epilogue,
+ 	objc_build_try_catch_finally_stmt, objc_build_synchronized_prologue,
+ 	objc_build_synchronized_epilogue): Remove.
+ 	(objc_create_temporary_var, struct objc_try_context, cur_try_context,
+ 	objc_eh_runtime_type, objc_init_exceptions, objc_build_exc_ptr,
+ 	next_sjlj_build_try_exit, next_sjlj_build_enter_and_setjmp,
+ 	next_sjlj_build_exc_extract, next_sjlj_build_catch_list,
+ 	next_sjlj_build_try_catch_finally, objc_begin_try_stmt,
+ 	objc_begin_catch_clause, objc_finish_catch_clause,
+ 	objc_build_finally_clause, objc_finish_try_stmt,
+ 	objc_build_synchronized): New.
+ 	(objc_is_object_id, objc_is_class_id): New.
+ 	(objc_comptypes): Use them.
+ 	(build_next_objc_exception_stuff): Break NeXT sjlj out from
+ 	build_objc_exception_stuff.
+ 	(synth_module_prologue): Update to match.
+ 	(objc_build_throw_stmt): Use cur_try_context to decide if
+ 	we're in a @catch.
+ 	* objc/objc-act.h: Update prototypes.
+ 	(OCTI_EXCEPTION_BLK_STACK, objc_exception_block_stack): Remove.
+ 
+ 2004-06-17  Andrew Pinski <apinski@apple.com>
+ 
+ 	* c-typeck.c (tagged_types_tu_compatible_p <case UNION_TYPE>):
+ 	Use TYPE_FIELDS instead of TYPE_VALUES.
+ 
+ 2004-06-17  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/16015
+ 	* gimplify.c (gimplify_target_expr): Handle void initializer.
+ 	* expr.c (expand_expr_real_1) [TARGET_EXPR]: Likewise.
+ 	* doc/c-tree.texi (Expression trees): Update TARGET_EXPR
+ 	and AGGR_INIT_EXPR.
+ 
+ 2004-06-17  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* fold-const.c (fold_relational_const): Use constant_boolean_node.
+ 
+ 2004-06-17  Jan Hubicka  <jh@suse.cz>
+ 
+ 	PR target/15433
+ 	* i386.md (SSE SF cmov 0 splitter): The conditional is VOIDmode; fix
+ 	operand numbering in the output template.
+ 	(SSE DF cmov 0 splitter): The conditional is VOIDmode.
+ 
+ 2004-06-17  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* except.c (can_throw_internal): Recognize RESX expresisons.
+ 
+ 2004-06-17  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* cfgbuild.c (make_edges): Do not use label_value_list.
+ 	(find_basic_blocks_1): Do not collect label_value_list.
+ 	(find_sub_basic_blocks): Update call of make_edges.
+ 
+ 2004-06-17  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-cfg.c (tree_make_forwarder_block):  Use SET_PHI_RESULT.
+ 	* tree-flow-inline.h (get_use_op_ptr):  Return a use_operand_p.
+ 	(get_use_from_ptr, get_def_from_ptr):  New.  Return operand pointers.
+ 	(get_def_op_ptr):  Return a def_operand_p instead of a 'tree *'.
+ 	(get_v_may_def_result_ptr):  Return a def_operand_p.
+ 	(get_v_may_def_op_ptr, get_vuse_op_ptr):   Return a use_operand_p.
+ 	(get_v_must_def_op_ptr):  Return a def_operand_p.
+ 	(get_phi_result_ptr):  New.  Return a pointer to the result of a PHI.
+ 	(get_phi_arg_def_ptr):  New.  Return a pointer to an argument of a PHI.
+ 	(phi_element_for_edge):  Remove.
+ 	* tree-flow.h (propagate_value, replace_exp):  Change prototype.
+ 	(propagate_tree_value):  Add new prototype.
+ 	(phi_element_for_edge):  Remove prototype.
+ 	* tree-into-ssa.c (mark_def_sites):  Use new operand types.
+ 	(prepare_operand_for_rename):  Split into two functions.
+ 	(prepare_use_operand_for_rename):  Prepare use operands.
+ 	(prepare_def_operand_for_rename):  Prepare def operands.
+ 	(rewrite_stmt):  Use new operand types.
+ 	(rewrite_operand):  Use new operand types, change parameter type.
+ 	* tree-outof-ssa.c (replace_variable):  Split into two functions.
+ 	(replace_use_variable):  Rewrite uses.
+ 	(replace_def_variable):  Rewrite defs.
+ 	(rewrite_trees, rewrite_vars_out_of_ssa):  Use new operand types.
+ 	* tree-phinodes.c (make_phi_node, resize_phi_node):  Use new types.
+ 	(add_phi_arg, remove_phi_arg_num):  Use new operand types.
+ 	* tree-ssa-ccp.c (substitute_and_fold):  Use new operand types.
+ 	(ccp_fold, replace_uses_in):  Use new operand types.
+ 	* tree-ssa-copy.c (replace_ssa_names):  Rename to replace_ssa_names_ann
+ 	and no longer set the value, change parameter type.
+ 	(replace_exp_1):  Use new operand types.
+ 	(propagate_value):  Change parameter type, use new operand types.
+ 	(propagate_tree_value):  Propagate_value without SSA operands.
+ 	(replace_exp, cprop_operand, cprop_into_stmt):  Use new operand types.
+ 	(cprop_into_successor_phis):  Use new operand types.
+ 	* tree-ssa-dom.c (thread_across_edge):  Use new operand types.
+ 	(eliminate_redundant_computations):  Use new operand types.
+ 	* tree-ssa-dse.c (fix_phi_uses):  Use new operand_types.
+ 	(fix_stmt_v_may_defs):  Use new operand_types.
+ 	* tree-ssa-live.c (create_ssa_var_map):  Use new operand_types.
+ 	(build_tree_conflict_graph):  Use new operand_types.
+ 	* tree-ssa-loop.c (duplicate_blocks):  Use PHI_ARG_DEF_FROM_EDGE.
+ 	* tree-ssa-operands.c (struct freelist_d):  Remove.
+ 	(check_optype_freelist, add_optype_freelist):  Remove.
+ 	(allocate_def_optype, allocate_use_optype, allocate_v_may_def_optype,
+ 	allocate_vuse_optype, allocate_v_must_def_optype):  Call ggc_alloc.
+ 	(free_uses, free_defs, free_vuses, free_v_may_defs, free_v_must_defs):
+ 	Call ggc_free instead of add_optype_freelist.
+ 	(init_ssa_operands, fini_ssa_operands):  Remove free list code.
+ 	(finalize_ssa_defs, finalize_ssa_uses):  Set new use/def operands.
+ 	* tree-ssa-operands.h (struct def_optype_d):  Change underlying type.
+ 	(struct use_optype_d):  Change underlying type.
+ 	(def_operand_p, use_operand_p):  New types for pointers to operands.
+ 	(USE_OP, DEF_OP, V_MAY_DEF_RESULT, V_MAY_DEF_OP, VUSE_OP,
+ 	V_MUST_DEF_OP):  Use new pointer type instead of dereferencing directly.
+ 	(USE_FROM_PTR, DEF_FROM_PTR):  New macros to "dereference" operand
+ 	pointer types.
+ 	(SET_USE, SET_DEF):  New macros to set operands from their pointer.
+ 	(SET_USE_OP, SET_DEF_OP, SET_V_MAY_DEF_RESULT, SET_V_MAY_DEF_OP,
+ 	SET_VUSE_OP, SET_V_MUST_DEF_OP): New SET routines for operands.
+ 	(PHI_RESULT_PTR, PHI_RESULT, SET_PHI_RESULT):  Macros to manage the
+ 	PHI result as an operand.
+ 	(PHI_ARG_DEF_PTR, PHI_ARG_DEF, SET_PHI_ARG_DEF, PHI_ARG_DEF_FROM_EDGE,
+ 	PHI_ARG_DEF_PTR_FROM_EDGE):  Macros to manage the PHI arguments.
+ 	* tree-ssa-pre.c (eliminate):  Call propagate_tree_value.
+ 	* tree-tailcall.c (independent_of_stmt_p, propagate_through_phis):  Use
+ 	PHI_ARG_DEF_FROM_EDGE.
+ 	* tree.h (PHI_RESULT):  Renamed to PHI_RESULT_TREE.
+ 	(PHI_ARG_DEF):  Renamed to PHI_ARG_DEF_TREE.
+ 
+ 2004-06-17  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	PR tree-optimization/15991
+ 	* tree-cfg.c (tree_block_label): Export.
+ 	* tree-flow-inline.h (bsi_after_labels): New function.
+ 	* tree-flow.h (bsi_after_labels, tree_block_label): Declare.
+ 	* tree-ssa.c (propagate_into_addr): New function.
+ 	(replace_immediate_uses): Handle propagation of pointer constants.
+ 	(raise_value): Do not restrict propagation of pointer constants.
+ 	* tree-ssanames.c (duplicate_ssa_name): New function.
+ 	* tree.h (duplicate_ssa_name): Declare.
+ 
+ 2004-06-17  David Ayers  <d.ayers@inode.at>
+ 
+ 	* c-parse.in: Unify Objective-C token names.
+ 
+ 2004-06-17  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	Bug 14610
+ 	* Makefile.in (min-insn-modes.o): Correct dependencies.
+ 	* real.c (encode_ieee_extended, decode_ieee_extended): Always
+ 	produce/consume 12-byte little-endian Intel format.
+ 	(encode_ieee_extended_128, decode_ieee_extended_128): Delete.
+ 	(encode_ieee_extended_motorola, decode_ieee_extended_motorola)
+ 	(encode_ieee_extended_intel_96, decode_ieee_extended_intel_96)
+ 	(encode_ieee_extended_intel_128, decode_ieee_extended_intel_128):
+ 	New functions which convert between 12-byte little-endian Intel
+ 	format and the desired format.
+ 	(ieee_extended_motorola_format, ieee_extended_intel_96_round_53_format)
+ 	(ieee_extended_intel_96_format, ieee_extended_intel_128_format):
+ 	Update.
+ 
+ 2004-06-17  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* expmed.c (expand_mult_const): In sanity check, compare only
+ 	the bits of val and val_so_far that are significant in the
+ 	result mode.
+ 
+ 2004-06-17  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c:  Update comments.
+ 	(val_expr_pair_eq): Factor code from here.
+ 	(expr_pred_trans_eq): and here.
+ 	(expressions_equal_p): To here.
+ 	(print_value_set): Print value for expression.
+ 	(phi_trans_lookup): Rename some variables.
+ 	(lookup): Ditto.
+ 	(value_exists_in_set_bitmap): Ditto.
+ 	(value_remove_from_set_bitmap): Ditto.
+ 	(value_insert_into_set_bitmap): Ditto.
+ 
+ 2004-06-17  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390-modes.def (CCL3mode): New machine mode.
+ 	* config/s390/s390.c (s390_match_ccmode_set): Support CCL3mode.
+ 	(s390_alc_comparison, s390_slb_comparison): Likewise.
+ 	(s390_branch_condition_mask): Likewise.
+ 	* config/s390/s390.md ("*subdi3_cc2", "*subdi3_cconly2"): New.
+ 	("*subsi3_cc2", "*subsi3_cconly2"): New.
+ 
+ 	* config/s390/s390.h (PREDICATE_CODE): Accept SIGN_EXTEND and
+ 	ZERO_EXTEND for s390_alc_comparison and s390_slb_comparison.
+ 	* config/s390/s390.c (s390_alc_comparison, s390_slb_comparison):
+ 	Handle SIGN_EXTEND and ZERO_EXTEND.
+ 
+ 	* config/s390/s390-protos.h (s390_expand_addcc): New prototype.
+ 	* config/s390/s390.c (s390_expand_addcc): New function.
+ 	* config/s390/s390.md ("adddicc", "addsicc"): New expanders.
+ 	("*sconddi", "*scondsi", "*sconddi_neg", "*scondsi_neg"): New insns.
+ 	("sltu", "sgtu", "sleu", "sgeu"): New expanders.
+ 
+ 2004-06-17  Ben Elliston  <bje@au.ibm.com>
+ 
+ 	* tree-alias-common.c: Add whitespace.
+ 	* tree-inline.c: Correct comment about this file's purpose.
+ 	* tree-optimize.c: Likewise.
+ 	* tree-tailcall.c: Likewise.
+ 
+ 	* tree-alias-ander.h: Add standard top-of-file comment.
+ 	* tree-alias-common.h: Likewise.
+ 	* tree-alias-type.h: Likewise.
+ 
+ 2004-06-16  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (compute_avail): Value number uses as well.
+ 	Strip useless type conversions.
+ 	Casts have to be treated slightly different than normal unaries.
+ 
+ 2004-06-16  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-common.def (COMPOUND_STMT): Remove.
+ 	* c-common.c (finish_fname_decls): Don't look through it.
+ 	* c-typeck.c (c_tree_expr_nonnegative_p): Likewise.
+ 	* c-common.h (COMPOUND_BODY): Remove.
+ 	(c_common_stmt_codes): Remove COMPOUND_STMT.
+ 	* c-dump.c (c_dump_tree): Likewise.
+ 	* c-gimplify.c (c_gimplify_stmt): Likewise.
+ 	* c-pretty-print.c (pp_c_statement): Likewise.
+ 	* tree.h (DECL_SAVED_TREE): Update commentary.
+ 	* doc/c-tree.texi (ASM_EXPR): Rename from ASM_STMT.
+ 	(CASE_LABEL_EXPR): Rename from CASE_LABEL.
+ 	(GOTO_EXPR): Rename from GOTO_STMT.
+ 	(GOTO_FAKE_P): Remove.
+ 	(COMPOUND_STMT): Remove.
+ 	(HANDLER): Update wrt COMPOUND_STMT.
+ 	(STMT_EXPR): Likewise.
+ 	(LABEL_EXPR): Rename from LABEL_STMT.
+ 	(SCOPE_STMT): Remove.
+ 	* objc/objc-act.c (objc_build_try_catch_finally_stmt): Don't look
+ 	through COMPOUND_STMT.
+ 
+ 2004-06-16  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-common.h (c_begin_if_stmt, c_begin_while_stmt,
+ 	c_finish_while_stmt_cond): Remove decls.
+ 	* c-parse.in (if_prefix): Don't save c_begin_if_stmt result.
+ 	* c-typeck.c (c_begin_if_stmt): Return void.
+ 	(c_begin_else): Tidy.  Save stmt_count.
+ 	* c-tree.h (c_begin_if_stmt): Update decl.
+ 
+ 	* objc/objc-act.c (objc_build_try_enter_fragment,
+ 	objc_build_extract_fragment, objc_build_try_epilogue,
+ 	objc_build_catch_stmt, objc_build_catch_epilogue,
+ 	objc_build_finally_prologue, objc_build_finally_epilogue): Update
+ 	for if builder function changes.
+ 
+ 2004-06-16  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390.c (struct machine_function):  New member
+ 	last_restore_gpr.
+ 	(s390_frame_info): Add BASE_USED and RETURN_ADDR_USED parameters.
+ 	Do not modify machine->save_return_addr_p or regs_ever_live.
+ 	Fill in machine->last_restore_gpr.
+ 	(s390_optimize_prolog): Use s390_frame_info to compute registers
+ 	to save/restore, remove duplicated code.
+ 	(s390_arg_frame_offset): Use s390_frame_info to compute frame
+ 	size, remove duplicated code.
+ 	(s390_emit_prologue): Adapt s390_frame_info call.  Update
+ 	machine->save_return_addr_p and regs_ever_live.
+ 	(s390_emit_epilogue): Use machine->last_restore_gpr instead of
+ 	machine->last_save_gpr.
+ 
+ 2004-06-16  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-parse.in (if_stmt_locus): Remove.
+ 	(if_prefix): Increment stmt_count; pass it to c_finish_if_cond.
+ 	(select_or_iter_stmt): Move empty if warnings to c-typeck.c.
+ 	* c-typeck.c (if_elt): Sort by expected size.  Rename locus to
+ 	empty_locus.  Add stmt_count, saw_else.
+ 	(c_begin_if_stmt): Push if_stack here.
+ 	(c_finish_if_cond): Rename from c_expand_end_cond.  Record stmt_count.
+ 	(c_finish_then, c_finish_else): Record empty_locus.
+ 	(c_begin_else): Rename from c_expand_start_else.  Record stmt_count.
+ 	(c_finish_if_stmt): Rename from c_expand_end_cond.  Warn for empty
+ 	if or else body.
+ 	* c-tree.h: Update prototypes.
+ 
+ 2004-06-16  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* tree.h (PHI_CHAIN): New.
+ 	* (tree-cfg.c, tree-dfa.c, tree-flow-inline.h, tree-into-ssa.c,
+ 	tree-outof-ssa.c, tree-phinodes.c, tree-pretty-print.c,
+ 	tree-ssa-alias.c, tree-ssa-ccp.c, tree-ssa-dom.c, tree-ssa-dse.c,
+ 	tree-ssa-live.c, tree-ssa-loop.c, tree-ssa-phiopt.c, tree-ssa-pre.c,
+ 	tree-ssa.c, tree-tailcall.c): Use PHI_CHAIN instead of TREE_CHAIN
+ 	when traversing a list of PHI_NODEs.
+ 
+ 2004-06-16  Bernardo Innocenti  <bernie@develer.com>
+ 
+ 	PR target/13292
+ 	* config/m68k/m68k.h (TARGET_SWITCHES): Don't remove MASK_68040_ONLY
+ 	on -msoft-float.
+ 	(TARGET_FLT_EVAL_METHOD): Don't advertise extended precision for
+ 	68040 and soft-float.
+ 	* config/m68k/m68k.md (truncdfsf2): Explicitly require TARGET_68881
+ 	in the TARGET_68040_ONLY case.
+ 
+ 2004-06-16 Peter Barada  <peter@the-baradas.com>
+ 
+ 	* config/m68k/m68k.md (movsi_cfv4): New pattern to allow mov3q.
+ 	(movsi_cf): Make named, don't match TARGET_CFV4.
+ 	(pushexthisi_const): Use mov3q if possible.
+ 	(extendhisi2, cvf4_extendhisi2): Split extendhisi2 pattern
+ 	to special case mvz.w for ColdFire V4.
+ 	(extendqisi2, cvf4_extendqisi2): Split extendhisi2 pattern
+ 	to special case mvz.b for ColdFire V4.
+ 	(udivmodhi4, divmodhi4): Use mvz to zero extend arg for
+ 	divide.
+ 	(iorsi3, xorsi3, andsi3): Use bitfield instructions if possible.
+ 	* config/m68k/m68k.c(valid_mov3q_const):  New function.
+ 	(const_method): SWAP is valid for ColdFire.
+ 	(MULL_COST, MULW_COST): Fix costs for ColdFire V3/V4.
+ 	* config/m68k/m68k-protos.h (valid_mov3q_const): Prototype here.
+ 
+ 2004-06-16  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-common.def (CASE_LABEL): Remove.
+ 	* c-common.c (c_add_case_label): Use CASE_LABEL, not CASE_LABEL_DECL.
+ 	(match_case_to_enum_1): Likewise.
+ 	* c-common.h (c_common_stmt_codes): Remove CASE_LABEL.
+ 	* c-dump.c (c_dump_tree): Likewise.
+ 	* c-gimplify.c (c_gimplify_stmt): Likewise.
+ 	* c-pretty-print.c (pp_c_statement): Likewise.
+ 	* c-semantics.c (build_case_label): Use CASE_LABEL_EXPR.
+ 	* tree.h (CASE_LOW): Update commentary.
+ 
+ 2004-06-16  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-common.def (ASM_STMT): Remove.
+ 	* c-common.h (c_common_stmt_codes): Remove ASM_STMT.
+ 	* c-dump.c (c_dump_tree): Likewise.
+ 	* c-gimplify.c (c_gimplify_stmt): Likewise.
+ 	* c-pretty-print.c (pp_c_statement): Likewise.
+ 	* c-typeck.c (build_asm_expr): Use ASM_EXPR.
+ 	* tree.h: Fix commentary.
+ 
+ 2004-06-16  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-common.def (GOTO_STMT, LABEL_STMT): Remove.
+ 	* c-common.c (c_add_case_label): Use LABEL_EXPR.
+ 	* c-common.h (GOTO_FAKE_P, LABEL_STMT_LABEL): Remove.
+ 	(c_common_stmt_codes): Remove GOTO_STMT, LABEL_STMT.
+ 	* c-dump.c (c_dump_tree): Likewise.
+ 	* c-gimplify.c (c_gimplify_stmt): Likewise.
+ 	* c-pretty-print.c (pp_c_statement): Likewise.
+ 	* c-parse.in (stmt): Use GOTO_EXPR.
+ 	(label): Use LABEL_EXPR.
+ 	* c-semantics.c (build_stmt): Set TREE_TYPE to void.
+ 	* tree-inline.c (copy_body_r): Don't build empty BLOCKs.
+ 
+ 2004-06-16  J"orn Rennecke <joern.rennecke@superh.com>
+ 
+ 	* cfgcleanup.c (try_simplify_condjump): Update test to make
+ 	sure we have a conditional branch around am unconditional branch.
+ 
+ 2004-06-16  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-cfg.c (pass_split_crit_edge): Give it a name and a dump file.
+ 
+ 2004-06-16  Dale Johannesen  <dalej@apple.com>
+ 
+ 	* loop.c (loop_givs_reduce): Avoid miscompilation of
+ 	loops entered at bottom.
+ 
+ 2004-06-16  J"orn Rennecke <joern.rennecke@superh.com>
+ 
+ 	* cfglayout.c (fixup_reorder_chain): Handle case where the
+ 	destination of E_FALL is EXIT_BLOCK_PTR.
+ 
+ 2004-06-16  Vladimir Makarov  <vmakarov@redhat.com>
+ 
+ 	PR target/15653
+ 	* config/ia64/ia64.c (ia64_dfa_new_cycle): Do not insert nops
+ 	after shifts before asm.
+ 
+ 2004-06-16  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	PR tree-optimization/15993
+ 	* tree-ssa-dom.c (thread_across_edge): Do not thread edge if its
+ 	destination is unchanged.
+ 
+ 2004-06-16  Andreas Jaeger  <aj@suse.de>
+ 
+ 	* doc/install.texi (Configuration): Update description for
+ 	--enable-version-specific-runtime-libs.
+ 
+ 2004-06-16  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* doc/install.texi: boehm-gc now uses automake 1.8.5.
+ 
+ 2004-06-16  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* toplev.h (rest_of_compilation): Adjust prototype.
+ 
+ 2004-06-16  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* coverage.c: Remove argument to rest_of_compilation.
+ 	* expr.c (execute_expand, set_save_expr_context, pass_expand): New.
+ 	* passes.c (rest_of_compilation): Remove argument.
+ 	(pass_rest_of_compilation): New.
+ 	(rest_of_handle_final, rest_of_handle_delay_slots,
+ 	rest_of_handle_stack_regs, rest_of_handle_variable_tracking
+ 	rest_of_handle_machine_reorg, rest_of_handle_regrename
+ 	rest_of_handle_sched, rest_of_handle_sched2, rest_of_handle_gcse2
+ 	rest_of_handle_regmove, rest_of_handle_tracer
+ 	rest_of_handle_if_conversion, rest_of_handle_if_after_combine
+ 	rest_of_handle_web, rest_of_handle_branch_prob
+ 	rest_of_handle_value_profile_transformations, rest_of_handle_cfg
+ 	rest_of_handle_addressof, rest_of_handle_jump_bypass
+ 	rest_of_handle_life, rest_of_handle_cse, rest_of_handle_cse2):
+ 	Check that the two arguments are actually superfluous.
+ 	* tree-optimize.c (register_dump_files): Add properties argument.
+ 	Track validity of passes.  Only initialize dump files for
+ 	tree-based passes.  Store the full set of provided passes in
+ 	the pass.
+ 	(init_tree_optimization_passes): Register pass_expand and
+ 	pass_rest_of_compilation.
+ 	(execute_one_pass): Do not track the presence of required properties
+ 	here.  Set in_gimple_form.  Do not update current_properties.
+ 	(current_properties): Remove.
+ 	(set_save_expr_context): Remove.
+ 	(tree_rest_of_compilation): Do not set in_gimple_form.  Do not
+ 	expand to RTL here, and do not call rest_of_compilation.  Push
+ 	GGC context even before gimplification.
+ 	* tree-pass.h (PROP_rtl, PROP_trees): New flags.
+ 	(pass_expand, pass_rest_of_compilation): Declare.
+ 
+ 2004-06-15  Jeff Law  <law@redhat.com>
+ 
+ 	* fold-const.c (swap_tree_comparison): No longer static.
+ 	(tree_swap_operands_p): Similarly.  Return true if both operands
+ 	are SSA_NAMEs and the first operand has a higher version number than
+ 	the second operand.
+ 	* tree.h (swap_tree_comparison): Prototype.
+ 	(tree_swap_operands_p): Prototype.
+ 	* tree-ssa-operands.c (get_expr_operands): For commutative
+ 	operators and relational comparisons, canonicalize the
+ 	order of the operands.
+ 
+ 2004-06-15  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-common.c (lang_gimplify_stmt): Remove next_p argument.
+ 	(if_elt, if_stack, if_stack_space, c_expand_start_cond, c_finish_then,
+ 	c_expand_end_cond, c_expand_start_else, c_finish_else, c_begin_if_stmt,
+ 	c_begin_while_stmt, c_finish_while_stmt_cond): Move to c-typeck.c.
+ 	(finish_fname_decls, fname_decl): Use statement_lists.
+ 	(c_expand_expr_stmt): Don't set last_expr_type.
+ 	(c_type_hash): Fix indentation.
+ 	(c_safe_from_p): Don't follow TREE_CHAIN.
+ 	(c_tree_chain_matters_p): Remove.
+ 	* c-common.def (SCOPE_STMT): Remove.
+ 	(CLEANUP_STMT): Redefine to contain its own body.
+ 	* c-common.h (struct stmt_tree_s): Remove x_last_stmt,
+ 	x_last_expr_type, x_last_expr_filename, x_scope_stmt_stack.
+ 	Add x_cur_stmt_list.
+ 	(last_tree, last_expr_type, last_expr_filename, RECHAIN_STMTS): Remove.
+ 	(cur_stmt_list): New.
+ 	(STATEMENT_LIST_STMT_EXPR): New.
+ 	(SCOPE_BEGIN_P, SCOPE_END_P, SCOPE_STMT_BLOCK, SCOPE_NULLIFIED_P,
+ 	SCOPE_NO_CLEANUPS_P, SCOPE_PARTIAL_P, NEW_FOR_SCOPE_P): Remove.
+ 	(CLEANUP_BODY): New.
+ 	(CLEANUP_DECL): Move to operand 2.
+ 	(c_common_stmt_codes): Remove SCOPE_STMT.
+ 	(COMPOUND_STMT_NO_SCOPE, COMPOUND_STMT_BODY_BLOCK): Remove.
+ 	* c-decl.c (c_scope_stmt_stack, current_scope_stmt_stack): Remove.
+ 	(c_push_function_context, c_pop_function_context): Don't save it.
+ 	(finish_decl): Set TREE_USED on the decl for a cleanup.
+ 	Use push_cleanup.
+ 	(store_parm_decls): Use statement lists.
+ 	(finish_function): Remove compstmt rule workaround.  Use statement
+ 	lists.  Call finish_fname_decls after finalizing the body.
+ 	(c_begin_compound_stmt): Move to c-typeck.c.
+ 	* c-dump.c (c_dump_tree): Remove SCOPE_STMT.
+ 	* c-gimplify.c (gimplify_cleanup_stmt, gimplify_cleanup_stmts): New.
+ 	(c_genericize): Invoke them.
+ 	(c_gimplify_stmt): Don't look through TREE_CHAIN.  Kill SCOPE_STMT.
+ 	(c_build_bind_expr): Export.
+ 	(gimplify_block, gimplify_cleanup): Remove.
+ 	(gimplify_condition): Use gimplify_stmt.
+ 	(gimplify_for_stmt): Remove FOR_INIT_STMT chaining hack.
+ 	(gimplify_if_stmt): Remove recursion hack.
+ 	(c_gimplify_expr): Remove STMT_EXPR handling.
+ 	(stmt_expr_last_stmt, gimplify_stmt_expr): Remove.
+ 	(is_last_stmt_of_scope): Remove.
+ 	* c-lang.c (LANG_HOOKS_TREE_INLINING_TREE_CHAIN_MATTERS_P): Remove.
+ 	* c-mudflap.c (mflang_flush_calls): Use c_begin_compound_stmt,
+ 	c_end_compound_stmt.
+ 	* c-objc-common.c (build_cdtor): Likewise.
+ 	* c-parse.in (primary): Use c_finish_stmt_expr.
+ 	(push_scope, pop_scope): Remove.
+ 	(c99_block_start, compstmt_start): Use c_begin_compound_stmt.
+ 	(c99_block_end, compstmt): Use c_end_compound_stmt.
+ 	(c99_block_lineno_labeled_stmt): Likewise.
+ 	(compstmt_primary_start): Use c_begin_stmt_expr.
+ 	(simple_if, select_or_iter_stmt): Update calls to stmt builders.
+ 	(do_stmt_start): Fill in body directly.
+ 	(lineno_stmt): Avoid setting lineno on constants.
+ 	* c-pretty-print.c (pp_c_statement): Handle STATEMENT_LIST.
+ 	Remove SCOPE_STMT.
+ 	* c-semantics.c (begin_stmt_tree): Remove.
+ 	(push_stmt_list, re_push_stmt_list, pop_stmt_list): New.
+ 	(add_stmt): Use statement lists.
+ 	(add_scope_stmt, finish_stmt_tree): Remove.
+ 	(push_cleanup): New.
+ 	* c-tree.h: Move some decls from c-common.h.
+ 	* c-typeck.c (c_tree_expr_nonnegative_p): Simplify for statement lists.
+ 	(do_case, c_finish_case): Likewise.
+ 	(c_finish_then): Take body for then as argument.
+ 	(c_finish_else): Similarly.
+ 	(c_begin_for_stmt, c_finish_for_stmt_init, c_finish_for_stmt_cond,
+ 	c_finish_for_stmt_incr, c_finish_for_stmt): New.
+ 	(c_begin_stmt_expr, c_finish_stmt_expr): New.
+ 	(c_begin_compound_stmt): Do scope management.
+ 	(c_end_compound_stmt): New.
+ 	* fold-const.c (tree_expr_nonnegative_p): Fix BIND_EXPR.
+ 	* gimplify.c (voidify_wrapper_expr): Accept temporary argument.
+ 	Look through exception handling constructs.
+ 	(gimplify_bind_expr): Accept temporary argument.
+ 	(gimplify_target_expr): Special case BIND_EXPR bodies.
+ 	(gimplify_expr): Handle fallback == fb_none like a statement.
+ 	* langhooks-def.h (LANG_HOOKS_TREE_INLINING_TREE_CHAIN_MATTERS_P): Kill.
+ 	* langhooks.c (lhd_tree_inlining_tree_chain_matters_p): Remove.
+ 	* langhooks.h (tree_chain_matters_p): Remove.
+ 	* stub-objc.c (objc_clear_super_receiver): New.
+ 	* tree-gimple.h (voidify_wrapper_expr): Update decl.
+ 	(append_to_statement_list, append_to_statement_list_force): Move
+ 	to tree-iterator.h.
+ 	* tree-inline.c (expand_call_inline): Update call.
+ 	(clone_body): Use statement lists.
+ 	(walk_tree): Don't check tree_chain_matters_p.
+ 	(copy_tree_r): Likewise.
+ 	* tree-iterator.c (alloc_stmt_list): Clear lang bits.
+ 	(tsi_link_before, tsi_link_after): Set TREE_SIDE_EFFECTS properly.
+ 	* tree-iterator.h (append_to_statement_list,
+ 	append_to_statement_list_force): Moved from tree-gimple.h.
+ 	* tree-pretty-print.c (dump_generic_node): Clean up TARGET_EXPR dump.
+ 	* objc/objc-act.c (build_module_descriptor): Use c_begin_compound_stmt.
+ 	(objc_enter_block): Likewise.
+ 	(objc_exit_block): Use c_end_compound_stmt.
+ 	(objc_build_try_enter_fragment): Add #error and comment for
+ 	rewriting for OBJCPLUS.
+ 	(objc_build_extract_fragment, objc_build_try_epilogue,
+ 	objc_build_catch_stmt, objc_build_finally_prologue,
+ 	objc_build_finally_epilogue): Update for C statement builders.
+ 	* objc/objc-lang.c (LANG_HOOKS_TREE_INLINING_TREE_CHAIN_MATTERS_P):
+ 	Remove.
+ 
+ 2004-06-15  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* df.c (df_reg_clobber_gen): Removed.
+ 	(df_bb_rd_local_compute, df_insn_refs_record, df_rd_local_compute):
+ 	Make more effective for hard regs.
+ 	* ra-build.c (livethrough_conflicts_bb): Check contains_call.
+ 
+ 2004-06-15  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	* c-pragma.h (c_lex_string_translate): Change type to int.
+ 	* c-parse.in: Change all assignments of c_lex_string_translate
+ 	to true and false to 1 and 0.
+ 	* c-lex.c (c_lex_string_translate): Likewise.
+ 	(lex_string): Convert string without translation in the -1
+ 	case.
+ 
+ 2004-06-15  Mark G. Adams  <mark.g.adams@sympatico.ca>
+ 
+ 	* convert.h: Add include guards
+ 
+ 2004-06-15  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-flow-inline.h: Document all functions.
+ 
+ 2004-06-15  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-flow-inline.h (stmt_ann): Remove use of is_essa_node.
+ 	* tree-dfa.c (create_stmt_ann): Ditto.
+ 	* tree-pretty-print.c (dump_generic_node): Remove E* node handling.
+ 	* tree-inline.c (estimate_num_insns_1): Ditto.
+ 	* tree.c (tree_size): Ditto.
+ 	(make_node_stat): Ditto.
+ 	(tree_node_structure): Ditto.
+ 	(ephi_node_elt_check_failed): Remove.
+ 	(is_essa_node): Ditto.
+ 	* tree.def (EPHI_NODE): Ditto.
+ 	(EEXIT_NODE): Ditto.
+ 	(EUSE_NODE): Ditto.
+ 	(EKILL_NODE): Ditto.
+ 	* tree.h (EREF_NODE_CHECK): Remove.
+ 	(EPHI_NODE_ELT_CHECK): Ditto.
+ 	(struct tree_eref_common): Ditto.
+ 	(struct tree_euse_node): Ditto.
+ 	(struct ephi_arg_d): Ditto.
+ 	(struct tree_ephi_node): Ditto.
+ 	(ephi_node_elt_check_failed): Remove prototype.
+ 	(is_essa_node): Ditto.
+ 	(enum tree_node_structure_enum): Remove TS_E*_NODE.
+ 	(union tree_node): Remove E*_NODE uses.
+ 
+ 2004-06-15  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* alias.c (record_set, record_base_value, canon_rtx, get_addr,
+ 	nonlocal_mentioned_p_1, init_alias_analysis): Use REG_P.
+ 	* bt-load.c (find_btr_reference, insn_sets_btr_p, note_btr_set):
+ 	Likewise.
+ 	* builtins.c (expand_builtin_setjmp, expand_builtin_apply,
+ 	expand_builtin_mathfn, expand_builtin_strlen, expand_builtin_memcmp,
+ 	expand_builtin_strcmp, expand_builtin_strncmp,
+ 	expand_builtin_frame_address): Likewise.
+ 	* caller-save.c (mark_set_regs, add_stored_regs, mark_referenced_regs,
+ 	insert_one_insn): Likewise.
+ 	* calls.c (prepare_call_address, precompute_register_parameters,
+ 	precompute_arguments, expand_call, emit_library_call_value_1): Likewise.
+ 	* cfganal.c (flow_active_insn_p): Likewise.
+ 	* combine.c (set_nonzero_bits_and_sign_copies, can_combine_p,
+ 	combinable_i3pat, try_combine, find_split_point, COMBINE_RTX_EQUAL_P,
+ 	subst, combine_simplify_rtx, simplify_if_then_else, simplify_set,
+ 	make_extraction, recog_for_combine, gen_lowpart_for_combine,
+ 	simplify_comparison, record_dead_and_set_regs_1,
+ 	record_dead_and_set_regs, record_promoted_value,
+ 	check_promoted_subreg, get_last_value_validate, get_last_value,
+ 	reg_dead_at_p_1, reg_bitfield_target_p, distribute_notes,
+ 	unmentioned_reg_p_1): Likewise.
+ 	* conflict.c (mark_reg): Likewise.
+ 	* cse.c (HASH, COST, COST_IN, approx_reg_cost_1, notreg_cost,
+ 	mention_regs, insert_regs, lookup, lookup_for_remove, insert,
+ 	merge_equiv_classes, flush_hash_table, invalidate,
+ 	remove_invalid_refs, remove_invalid_subreg_refs, rehash_using_reg,
+ 	invalidate_for_call, use_related_value, canon_hash, exp_equiv_p,
+ 	cse_rtx_varies_p, canon_reg, find_best_addr, fold_rtx, equiv_constant,
+ 	record_jump_cond, cse_insn, addr_affects_sp_p,
+ 	invalidate_from_clobbers, cse_process_notes, cse_around_loop,
+ 	cse_set_around_loop, count_reg_usage, set_live_p, cse_change_cc_mode,
+ 	cse_cc_succs, cse_condition_code_reg): Likewise.
+ 	* cselib.c (cselib_reg_set_mode, rtx_equal_for_cselib_p,
+ 	cselib_lookup, cselib_invalidate_regno, cselib_invalidate_rtx,
+ 	cselib_record_set, cselib_record_sets): Likewise.
+ 	* dbxout.c (dbxout_symbol_location, dbxout_parms, dbxout_reg_parms,
+ 	dbxout_block): Likewise.
+ 	* df.c (df_ref_record, df_def_record_1, df_uses_record): Likewise.
+ 	* dojump.c (do_jump): Likewise.
+ 	* dwarf2out.c (dwarf2out_frame_debug_expr, is_pseudo_reg,
+ 	is_based_loc, rtl_for_decl_location): Likewise.
+ 	* emit-rtl.c (set_reg_attrs_for_parm, set_decl_rtl,
+ 	set_decl_incoming_rtl, mark_user_reg): Likewise.
+ 	* explow.c (copy_all_regs, copy_all_regs, memory_address, force_reg,
+ 	copy_to_suggested_reg, allocate_dynamic_stack_space,
+ 	probe_stack_range, hard_function_value): Likewise.
+ 	* expmed.c (store_bit_field, store_fixed_bit_field,
+ 	store_split_bit_field, extract_bit_field, extract_fixed_bit_field,
+ 	extract_split_bit_field, expand_divmod, emit_store_flag_force):
+ 	Likewise.
+ 	* expr.c (convert_move, convert_modes,
+ 	block_move_libcall_safe_for_call_parm, emit_group_load, use_reg,
+ 	use_group_regs, emit_move_insn, emit_move_insn_1,
+ 	compress_float_constant, push_block, emit_single_push_insn,
+ 	emit_push_insn, get_subtarget, expand_assignment, store_expr,
+ 	store_constructor, store_field, force_operand, safe_from_p,
+ 	expand_expr_real_1, expand_increment, do_store_flag, do_tablejump):
+ 	Likewise.
+ 	* final.c (profile_function, final_scan_insn, alter_subreg,
+ 	get_mem_expr_from_op, output_asm_operand_names, output_operand,
+ 	only_leaf_regs_used, leaf_renumber_regs_insn): Likewise.
+ 	* flow.c (verify_wide_reg_1, mark_regs_live_at_end,
+ 	find_regno_partial, propagate_one_insn, init_propagate_block_info,
+ 	insn_dead_p, libcall_dead_p, mark_set_1, not_reg_cond,
+ 	attempt_auto_inc, find_auto_inc, mark_used_regs,
+ 	count_or_remove_death_notes_bb): Likewise.
+ 	* function.c (find_temp_slot_from_address, update_temp_slot_address,
+ 	preserve_temp_slots, put_var_into_stack, fixup_var_refs_insn,
+ 	fixup_var_refs_1, fixup_stack_1, optimize_bit_field, flush_addressof,
+ 	put_addressof_into_stack, purge_addressof_1, insns_for_mem_walk,
+ 	purge_single_hard_subreg_set, instantiate_decl,
+ 	instantiate_virtual_regs_1, aggregate_value_p, assign_parms,
+ 	promoted_input_arg, setjmp_vars_warning, setjmp_args_warning,
+ 	setjmp_protect, setjmp_protect_args, fix_lexical_addr,
+ 	expand_function_start, diddle_return_value, clobber_return_register,
+ 	expand_function_end, keep_stack_depressed, handle_epilogue_set,
+ 	update_epilogue_consts): Likewise.
+ 	* genemit.c (gen_exp, gen_insn): Likewise.
+ 	* genrecog.c (make_insn_sequence): Likewise.
+ 	* global.c (global_conflicts, expand_preferences, mark_reg_store,
+ 	mark_reg_conflicts, set_preference, reg_becomes_live,
+ 	build_insn_chain, mark_reg_change): Likewise.
+ 	* haifa_sched.c (CONST_BASED_ADDRESS_P, find_set_reg_weight):
+ 	Likewise.
+ 	* ifcvt.c (noce_try_abs, noce_get_condition, noce_process_if_block):
+ 	Likewise.
+ 	* integrate.c (copy_rtx_and_substitute, try_constants,
+ 	subst_constants, mark_stores, allocate_initial_values): Likewise.
+ 	* jump.c (reversed_comparison_code_parts, delete_prior_computation,
+ 	delete_computation, rtx_renumbered_equal_p, true_regnum,
+ 	reg_or_subregno): Likewise.
+ 	* lcm.c (reg_dies, reg_becomes_live): Likewise.
+ 	* local-alloc.c (validate_equiv_mem_from_store, validate_equiv_mem,
+ 	update_equiv_regs, no_equiv, block_alloc, combine_regs, reg_is_set,
+ 	wipe_dead_reg, no_conflict_p): Likewise.
+ 	* loop-iv.c (simple_reg_p, simple_set_p, kill_sets,
+ 	iv_get_reaching_def, iv_analyze_biv, altered_reg_used, mark_altered,
+ 	simple_rhs_p, simplify_using_assignment, implies_p): Likewise.
+ 	* loop.c (scan_loop, combine_movables, rtx_equal_for_loop_p,
+ 	move_movables, note_set_pseudo_multiple_uses, consec_sets_invariant_p,
+ 	find_single_use_in_loop, count_one_set, loop_bivs_init_find,
+ 	loop_givs_rescan, check_insn_for_bivs, check_insn_for_givs,
+ 	valid_initial_value_p, simplify_giv_expr, consec_sets_giv,
+ 	loop_regs_update, check_dbra_loop, maybe_eliminate_biv,
+ 	maybe_eliminate_biv_1, record_initial, update_reg_last_use,
+ 	canonicalize_condition, loop_regs_scan, load_mems, try_copy_prop,
+ 	try_swap_copy_prop): Likewise.
+ 	* optabs.c (expand_binop, expand_vector_binop, expand_vector_unop,
+ 	expand_abs, emit_no_conflict_block, emit_libcall_block, expand_float):
+ 	Likewise.
+ 	* postreload.c (reload_cse_simplify, reload_cse_simplify_set,
+ 	reload_cse_simplify_operands, reload_combine,
+ 	reload_combine_note_store, reload_combine_note_use,
+ 	reload_cse_move2add, move2add_note_store): Likewise.
+ 	* print-rtl.c (print_rtx): Likewise.
+ 	* ra-build.c (copy_insn_p, remember_move, init_one_web_common,
+ 	contains_pseudo, handle_asm_insn): Likewise.
+ 	* ra-debug.c (ra_print_rtx_object, dump_constraints,
+ 	dump_static_insn_cost): Likewise.
+ 	* ra-rewrite.c (slots_overlap_p, emit_colors,
+ 	remove_suspicious_death_notes): Likewise.
+ 	* recog.c (validate_replace_rtx_1, find_single_use_1, find_single_use,
+ 	register_operand, scratch_operand, nonmemory_operand,
+ 	constrain_operands): Likewise.
+ 	* reg-stack (check_asm_stack_operands, remove_regno_note,
+ 	emit_swap_insn, swap_rtx_condition, subst_stack_regs_pat,
+ 	subst_asm_stack_regs): Likewise.
+ 	* regclass.c (scan_one_insn, record_reg_classes, copy_cost,
+ 	record_address_regs, reg_scan_mark_refs): Likewise.
+ 	* regmove.c (discover_flags_reg, replacement_quality,
+ 	copy_src_to_dest, reg_is_remote_constant_p, regmove_optimize,
+ 	fixup_match_1): Likewise.
+ 	* regrename.c (note_sets, clear_dead_regs, build_def_use, kill_value,
+ 	kill_set_value, copyprop_hardreg_forward_1): Likewise.
+ 	* reload.c (MATCHES, push_secondary_reload, find_reusable_reload,
+ 	reload_inner_reg_of_subreg, can_reload_into, push_reload,
+ 	combine_reloads, find_dummy_reload, hard_reg_set_here_p,
+ 	operands_match_p, decompose, find_reloads, find_reloads_toplev,
+ 	find_reloads_address, subst_indexed_address, find_reloads_address_1,
+ 	find_reloads_subreg_address, find_replacement,
+ 	refers_to_regno_for_reload_p, reg_overlap_mentioned_for_reload_p,
+ 	refers_to_mem_for_reload_p, find_equiv_reg, regno_clobbered_p): Likewise.
+ 	* reload1.c (replace_pseudos_in, reload, calculate_needs_all_insns,
+ 	find_reg, delete_dead_insn, alter_reg, eliminate_regs,
+ 	elimination_effects, eliminate_regs_in_insn, scan_paradoxical_subregs,
+ 	forget_old_reloads_1, reload_reg_free_for_value_p, choose_reload_regs,
+ 	emit_input_reload_insns, emit_output_reload_insns, do_input_reload,
+ 	do_output_reload, emit_reload_insns, gen_reload,
+ 	delete_address_reloads_1, inc_for_reload): Likewise.
+ 	* reorg.c (update_reg_dead_notes, fix_reg_dead_note,
+ 	update_reg_unused_notes, fill_slots_from_thread): Likewise.
+ 	* resource.c (update_live_status, mark_referenced_resources,
+ 	mark_set_resources, mark_target_live_regs): Likewise.
+ 	* rtlanal.c (nonzero_address_p, get_jump_table_offset,
+ 	global_reg_mentioned_p_1, reg_mentioned_p, reg_referenced_p,
+ 	reg_set_p, set_noop_p, find_last_value, refers_to_regno_p,
+ 	note_stores, dead_or_set_p, dead_or_set_regno_p, find_regno_note,
+ 	find_reg_fusage, find_regno_fusage, replace_regs, regno_use_in,
+ 	parms_set, find_first_parameter_load, keep_with_call_p,
+ 	hoist_test_store, hoist_update_store, address_cost, nonzero_bits1,
+ 	num_sign_bit_copies1): Likewise.
+ 	* rtlhooks.c (gen_lowpart_general): Likewise.
+ 	* sched-deps.c (deps_may_trap_p, sched_analyze_1, sched_analyze_insn,
+ 	sched_analyze): Likewise.
+ 	* sched-rgn.c (check_live_1, update_live_1, sets_likely_spilled_1):
+ 	Likewise.
+ 	* sdbout.c (sdbout_symbol, sdbout_parms, sdbout_reg_parms): Likewise.
+ 	* simplify-rtx.c (simplify_replace_rtx, simplify_unary_operation,
+ 	simplify_binary_operation, simplify_const_relational_operation,
+ 	simplify_subreg): Likewise.
+ 	* stmt.c (decl_conflicts_with_clobbers_p, expand_asm_operands,
+ 	expand_end_stmt_expr, expand_return, expand_decl,
+ 	expand_anon_union_decl): Likewise.
+ 	* unroll.c (precondition_loop_p, calculate_giv_inc, copy_loop_body,
+ 	find_splittable_regs, find_splittable_givs, find_common_reg_term,
+ 	loop_iterations): Likewise.
+ 	* var-tracking.c (variable_union, variable_part_different_p,
+ 	variable_different_p, count_uses, add_uses, add_stores,
+ 	compute_bb_dataflow, set_variable_part, delete_variable_part,
+ 	emit_notes_in_bb, vt_get_decl_and_offset, vt_add_function_parameters):
+ 	Likewise.
+ 	* varasm.c (assemble_variable): Likewise.
+ 
+ 2004-06-15  Chris Demetriou  <cgd@broadcom.com>
+ 
+ 	* config/mips/linux.h (ASM_PREFERRED_EH_DATA_FORMAT): Remove
+ 	definition.
+ 	* config/mips/linux64.h (ASM_PREFERRED_EH_DATA_FORMAT): Remove
+ 	#undef and #if 0'd definition.
+ 
+ 2004-06-15  J"orn Rennecke <joern.rennecke@superh.com>
+ 
+ 	* combine.c (distribute_notes): Comment typo fix.
+ 
+ 2004-06-15  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* expmed.c (synth_mult): Mask bits of the multiplier to the
+ 	machine mode of the multiplication.  Don't consider shifts
+ 	by more than (or equal to) the width of the operation's mode.
+ 
+ 2004-06-15  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* doc/install.texi: Yet another update for autoconf
+ 	and automake versions.
+ 
+ 2004-06-15  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* function.h (struct function): Remove cannot_inline field.
+ 	(current_function_cannot_inline): Remove.
+ 	* passes.c (rest_of_compilation): Reset DECL_DEFER_OUTPUT.
+ 	Simplify conditionals to ignore warn_return_type.
+ 	* tree-optimize.c (tree_rest_of_compilation): Do not reset
+ 	DECL_DEFER_OUTPUT.
+ 	* objc/objc-act.c (build_module_descriptor, finish_method_def):
+ 	Do not set current_function_cannot_inline.
+ 
+ 2004-06-15  J"orn Rennecke <joern.rennecke@superh.com>
+ 
+ 	* cfglayout.c (fixup_reorder_chain): Handle case where the
+ 	destination of E_TAKEN is EXIT_BLOCK_PTR.
+ 
+ 2004-06-15  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-copy.c (cprop_into_successor_phis): Fix typo.
+ 
+ 2004-06-15  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* fold-const.c (operand_equal_p): Update comment.
+ 
+ 2004-06-15  Kazuhiro Inaoka  <inaoka.kazuhiro@renesas.com>
+ 
+ 	* config/m32r/m32r.h (RETURN_ADDR_RTX): Define.
+ 	(INCOMING_RETURN_ADDR_RTX): Define.
+ 	* config/m32r/m32r-protos.h (m32r_return_addr): Added.
+ 	* config/m32r/m32r.c (m32r_exppand_prologue): Changed for
+ 	__builtin_return_address(0).
+ 	(m32r_return_addr): Added for __builtin_return_address(0).
+ 	(m32r_reload_lr): Ditto.
+ 
+ 	* longlong.h: Fix macros for m32r add_ssaaaa and sub_ddmmss.
+ 
+ 2004-06-15  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* doc/install.texi (Prerequisites): Update libbanshee,
+ 	fastjar, libcpp, libjava/libltdl entries to
+ 	automake 1.8.5.
+ 
+ 2004-06-15  Eric Botcazou  <ebotcazou@act-europe.fr>
+ 	    Olivier Hainque  <hainque@act-europe.fr>
+ 
+ 	* function.c (fixup_var_refs): Also adjust the start of sequence
+ 	after fixing up the insns.
+ 
+ 2004-06-15  Giovanni Bajo  <giovannibajo@gcc.gnu.org>
+ 
+ 	* gccbug.in: Update optimization -> tree-optimization/rtl-optimization.
+ 
+ 2004-06-14  Benjamin Kosnik  <bkoz@redhat.com>
+ 
+ 	* doc/install.texi (Prerequisites): Update libstdc++ entry to
+ 	automake 1.8.5.
+ 
+ 2004-06-14  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* config/s390/s390.h (TARGET_SWITCHES): Change -mtpf (-mno-tpf)
+ 	to -mtpf-trace (-mno-tpf-trace).
+ 	* doc/invoke.texi (S/390 and zSeries Options): Add tpf option
+ 	documentation.
+ 
+ 2004-06-14  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* real.c: Fix bit count in head comment.
+ 
+ 2004-06-14  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa.c (kill_redundant_phi_nodes): More correctly handle
+ 	PHIs where the destination or an argument is marked with
+ 	SSA_NAME_OCCURS_IN_ABNORMAL_PHI.
+ 
+ 2004-06-14  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/15945
+ 	* simplify-rtx.c (simplify_binary_operation): Don't optimize out
+ 	Inf + -Inf, Inf - Inf, Inf / Inf and 0 * Inf if flag_trapping_math.
+ 
+ 2004-06-14  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* opts.sh (var_args): Fix regexp.
+ 
+ 2004-06-14  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/15178
+ 	* config/i386/sol2.h (ASM_OUTPUT_DEF_FROM_DECLS): Define.
+ 
+ 2004-06-14  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* dwarf2out.c (output_call_frame_info): Support dwarf3 cie entries.
+ 
+ 2004-06-14  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* Makefile.in (FLAGS_H): New.
+ 	(flags.h): Replace by FLAGS_H.
+ 	* c.opt: Document Var, VarExists, Init and Report attributes.
+ 	* common.opt: Fill the values of the attributes.
+ 	* diagnostic.c (flag_fatal_errors): Do not define.
+ 	* except.c (flag_non_call_exceptions): Do not define.
+ 	* flags.h: Include options.h.  Remove declarations conflicting with
+ 	the automatically defined ones.
+ 	* opts.c: Remove automatically defined variables.
+ 	(handle_option): Perform default initialization.
+ 	(common_handle_option): Do not handle options covered by the
+ 	default initialization.
+ 	* opts.h (struct cl_option): Add flag_var, has_set_value and set_value
+ 	fields.
+ 	(CL_REPORT): New.
+ 	* opts.sh: Generate variable declarations, handle CL_REPORT.
+ 	* toplev.c: Remove automatically defined variables.
+ 	(f_options): Removed.
+ 	(print_switch_values): Use cl_options instead of f_options.
+ 	* toplev.h (version_flag): Declaration removed.
+ 
+ 2004-06-14  Ian Lance Taylor  <ian@wasabisystems.com>
+ 
+ 	* config/sparc/sparc.h: Correct comment about availability of
+ 	little endian option.
+ 
+ 	* config.gcc: Remove sparc64-*-aout*.
+ 	* config/sparc/sparc.c (sparc_aout_select_rtx_section): Remove.
+ 	* config/sparc/sp64-aout.h: Remove.
+ 	* config/sparc/aout.h: Remove.
+ 
+ 2004-06-14  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390.c: Include "tree-gimple.h".
+ 	(s390_gimplify_va_arg): New function.
+ 	(TARGET_GIMPLIFY_VA_ARG_EXPR): Define.
+ 	(s390_va_arg): Remove.
+ 	* config/s390/s390-protos.h (s390_va_arg): Remove.
+ 	* config/s390/s390.h (EXPAND_BUILTIN_VA_ARG): Call abort ().
+ 
+ 2004-06-14  J"orn Rennecke <joern.rennecke@superh.com>
+ 
+ 	* basic-block.h (could_fall_through): Declare.
+ 	* cfganal.c (can_fallthru): Succeed if the target is EXIT_BLOCK_PTR.
+ 	Fail if the source already has a fallthrough edge to the exit
+ 	block pointer.
+ 	(could_fall_through): New function.
+ 	* cfgbuild.c (make_edges): Check if we already have a fallthrough
+ 	edge to the exit block pointer.
+ 	* cfglayout.c (fixup_fallthru_exit_predecessor): Check that it is
+ 	not called before reload has completed.
+ 	Handle special case of first block having a fall-through exit edge.
+ 	(cfg_layout_finalize): Don't call it before reload or if we have
+ 	rtl epilogues.
+ 	(fixup_reorder_chain): A fall through to the exit block does not
+ 	require the block to come last.  Add sanity checks.
+ 	* cfgrtl.c (rtl_split_edge): Add special handling of fall through
+ 	edges to the exit block.
+ 	* function.c (cfglayout.h): #include.
+ 	(thread_prologue_and_epilogue_insns): If we have neither return nor
+ 	epilogue, but a fall through to the exit block from mid-function,
+ 	force a non-fall-through exit.
+ 	* Makefile.in (function.o): Depend on CFGLAYOUT_H.
+ 
+ 2004-06-14  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* config/rs6000/rs6000.h (ASM_CPU_SPEC): Handle -mpowerpc64 and -mcpu
+ 	for power5 and rs64a.  Correct condition for default.  Correct power3,
+ 	620, 630, 7400, 7450, G4, 970 and G5 -mcpu entries.  Add -many.
+ 
+ 2004-06-13  Steven Bosscher <stevenb@suse.de>
+ 
+ 	* gcse.c (hash_scan_set, hash_scan_insn, mark_set, mark_oprs_set):
+ 	Revert previous change, don't use CALL_P.
+ 
+ 2004-06-13  Jason Merrill  <jason@redhat.com>
+ 
+ 	* tree.h: Move std_gimplify_va_arg_expr protoype here.
+ 	* tree-gimple.h: From here.
+ 
+ 2004-06-13  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	Fix PR tree-optimization/15979
+ 	Fix PR tree-optimization/15981
+ 	* tree-ssa-pre.c (insert_aux): Fix faulty logic so that we don't
+ 	try to insert values undefined along some path.
+ 
+ 2004-06-13  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (add_to_value): is_gimple_min_invariant things
+ 	are available everywhere too.
+ 
+ 2004-06-13  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* fold-const.c (fold_checksum_tree <case 't'>): Only
+ 	look at TREE_VALUES if the EXPR is an ENUMERAL_TYPE.
+ 	Only look at TYPE_MIN_VALUE and TYPE_MAX_VALUE if
+ 	EXPR is an INTEGERAL_TYPE or a scalar float type.
+ 
+ 2004-06-13  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-sra.c (tree_sra): Update documentation.
+ 
+ 2004-06-13  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-typeck.c (comptypes, tagged_types_tu_compatible_p,
+ 	function_types_compatible_p, type_lists_compatible_p): Remove
+ 	flags parameter.
+ 	* c-tree.h (comptypes): Likewise.
+ 	(COMPARE_STRICT): Remove.
+ 	* c-decl.c, c-lang.c, c-parse.in, c-typeck.c, objc/objc-act.c: All
+ 	callers changed.
+ 
+ 2004-06-13  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* c-decl.c (diagnose_mismatched_decls): Improve error message.
+ 	Remove unused code.
+ 	* c-typeck.c (comptypes): Add location in standard we're checking.
+ 
+ 2004-06-13  Kaz Kojima  <kkojima@gcc.gnu.org>
+ 
+ 	* config/sh/libgcc-std.ver: Add __unorddf2 and __unordsf2 with
+ 	version 3.3.4.
+ 
+ 2004-06-12  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* expmed.c (shift_cost, shiftadd_cost, shiftsub_cost): Additionally
+ 	index by machine mode.
+ 	(init_expmed): Initialize shift_cost, shiftadd_cost and shiftsub_cost
+ 	tables inside the loop over machine modes.
+ 	(synth_mult, expand_mult_highpart_optab, expand_mult_highpart,
+ 	expand_divmod): Index shift*_cost by the appropriate machine mode.
+ 
+ 2004-06-12  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* config/s390/s390.h: Rename TARGET_TPF to TARGET_TPF_PROFILING.
+ 	* config/s390/s390.md: Ditto.
+ 	* config/s390/s390.c: Ditto.
+ 	(s390_frame_info): Conditionalize frame and setup info on
+ 	TARGET_TPF_PROFILING.
+ 	(s390_arg_frame_offset): Ditto.
+ 
+ 2004-06-12  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* fold-const.c (omit_two_operands): New function.
+ 	* tree.h (omit_two_operands): Prototype here.
+ 	* builtins.c (fold_builtin_unordered_cmp): New function to lower
+ 	C99 unordered comparison builtins to the appropriate tree nodes.
+ 	(fold_builtin_1): Use fold_builtin_unordered_cmp to lower
+ 	BUILT_IN_ISGREATER, BUILT_IN_ISGREATEREQUAL, BUILT_IN_ISLESS,
+ 	BUILT_IN_ISLESSEQUAL and BUILT_IN_ISLESSGREATER.  Manually lower
+ 	BUILT_IN_ISUNORDERED comparisons to an UNORDERED_EXPR tree node.
+ 	(simplify_builtin_memcmp, simplify_builtin_strncmp,
+ 	simplify_builtin_strncat, simplify_builtin_strspn): Use the new
+ 	omit_two_operands function to build the required COMPOUND_EXPRs.
+ 
+ 2004-06-12  Steven Bosscher <stevenb@suse.de>,
+ 	    Andreas Jaeger  <aj@suse.de>
+ 
+ 	* gcse.c (record_set_info): Use predicates like REG_P.
+ 	(mems_conflict_for_gcse_p): Likewise.
+ 	(load_killed_in_block_p): Likewise.
+ 	(hash_expr_1): Likewise.
+ 	(insert_set_in_table): Likewise.
+ 	(gcse_constant_p): Likewise.
+ 	(hash_scan_set): Likewise.
+ 	(hash_scan_insn): Likewise.
+ 	(canon_list_insert): Likewise.
+ 	(record_last_mem_set_info): Likewise.
+ 	(record_last_set_info): Likewise.
+ 	(compute_hash_table_work): Likewise.
+ 	(mark_set): Likewise.
+ 	(mark_clobber): Likewise.
+ 	(mark_oprs_set): Likewise.
+ 	(compute_transp): Likewise.
+ 	(find_avail_set): Likewise.
+ 	(cprop_insn): Likewise.
+ 	(do_local_cprop): Likewise.
+ 	(cprop): Likewise.
+ 	(find_implicit_sets): Likewise.
+ 	(find_bypass_set): Likewise.
+ 	(bypass_conditional_jumps): Likewise.
+ 	(insert_insn_end_bb): Likewise.
+ 	(pre_insert_copy_insn): Likewise.
+ 	(compute_transpout): Likewise.
+ 	(next_ls_expr): Likewise.
+ 	(invalidate_any_buried_refs): Likewise.
+ 	(compute_ld_motion_mems): Likewise.
+ 	(reg_set_info): Likewise.
+ 	(reg_clear_last_set): Likewise.
+ 	(find_moveable_store): Likewise.
+ 	(compute_store_table): Likewise.
+ 	(find_loads): Likewise.
+ 	(store_killed_in_insn): Likewise.
+ 	(insert_insn_start_bb): Likewise.
+ 	(reg_set_between_after_reload_p): Likewise.
+ 	(reg_used_between_after_reload_p): Likewise.
+ 	(is_jump_table_basic_block): Likewise.
+ 	(gcse_after_reload): Likewise.
+ 	(hash_scan_set_after_reload): Likewise.
+ 	(compute_hash_table_after_reload): Likewise.
+ 
+ 2004-06-12  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* rtl.h (MEM_P, NONJUMP_INSN_P, CALL_INSN_P): New predicates.
+ 	(INSN_P): Don't look at the rtx code class, just explicitly
+ 	check for one of the tree RTX_INSN codes.
+ 
+ 2004-06-11  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* c-typeck.c (default_function_array_conversion): Use
+ 	build_pointer_type not TYPE_POINTER_TO.
+ 
+ 2004-06-11  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* configure.ac: Don't invoke ACX_HEADER_STDBOOL.
+ 	* configure, config.in: Regenerate.
+ 	* system.h: Unconditionally define bool as unsigned char,
+ 	BOOL_BITFIELD as unsigned int.
+ 	* domwalk.h: Use BOOL_BITFIELD.
+ 
+ 2004-06-12  Andreas Jaeger  <aj@suse.de>
+ 
+ 	* libgcc-std.ver: Add __unorddf2 and __unordsf2 with version 3.3.4.
+ 	* libgcc-darwin.ver: Likewise.
+ 
+ 2004-06-12  Peter Jakubek  <peter@laseranimation.com>
+ 
+ 	* reload.c (find_reloads): Force reload for pseudo registers on big
+ 	endian machines.
+ 
+ 2004-06-11  Steven Bosscher <stevenb@suse.de>
+ 
+ 	* tree-ssa-dce.c (mark_control_dependent_edges_necessary):
+ 	Don't try to mark anything control dependent on the entry or
+ 	exit blocks.
+ 
+ 2004-06-11  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	Fix Bug 15899
+ 	Fix Bug 15460
+ 	* tree.h (SSA_NAME_VALUE): New macro.
+ 	(struct tree_ssa_name): Add value_handle member.
+ 	* tree-ssa-pre.c: Replaced.
+ 	* tree-flow.h (tree_ann_type): Add CST_ANN, EXPR_ANN.
+ 	(struct cst_ann_d): New.
+ 	(struct expr_ann_d): New.
+ 	(union tree_ann_d): Add cst_ann, expr_ann.
+ 	* tree-dfa.c (create_cst_ann): New function.
+ 	(create_expr_ann): Ditto.
+ 	* tree-flow-inline.h (cst_ann): New function.
+ 	(expr_ann): Ditto.
+ 	(get_cst_ann): Ditto.
+ 	(get_expr_ann): Ditto..
+ 
+ 2004-06-11  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	* pa.c (pa_hpux_init_libfunc): Add support for unord_optab.
+ 	* pa/quadlib.c (enum qfcmp_magic): Define magic values for call to
+ 	_U_Qfcmp library function.
+ 	(_U_Qfltgt, _U_Qfunle, _U_Qfunlt, _U_Qfunge, _U_Qfungt, _U_Qfuneq,
+ 	_U_Qfunord, _U_Qford): Add more TFmode builtin compare functions.
+ 
+ 	* pa.c (legitimize_pic_address): Use UNSPEC_DLTIND14R to identify
+ 	unspec used for loading address from DLT.
+ 	* pa.md: Define constants for the uses of UNSPEC and UNSPEC_VOLATILE.
+ 	Change all users of UNSPEC and UNSPEC_VOLATILE to use new constants.
+ 	Don't use short code sequence when loading the address of a nonlocal
+ 	label.
+ 	(nonlocal_goto): New expander.
+ 	(indirect_goto): New jump pattern for nonlocal gotos.
+ 	(short_jump): Remove extra whitespace.
+ 	(builtin_longjmp): Clobber memory and hard frame pointer.  Restore
+ 	frame pointer via virtual_stack_vars_rtx when we have a nonlocal goto
+ 	pattern.
+ 
+ 2004-06-11  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* expmed.c (synth_mult): Add an additional MODE argument for the
+ 	machine mode of the multiplication.  Update recursive calls.  Use
+ 	mode instead of word_mode for determining operation costs.
+ 	(choose_mult_variant): Update calls to synth_mult with "mode".
+ 
+ 2004-06-11  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-ssa-operands.c (get_stmt_operands): Clear makes_aliased_loads
+ 	and makes_aliased_stores.
+ 
+ 2004-06-11  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* doc/install.text (--enable-shared): Fix typo.
+ 
+ 2004-06-11  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/alpha/alpha.c (alpha_gimplify_va_arg_1): Remove post_p
+ 	argument.  Use internal post for call to gimplify_expr.  Tidy
+ 	rounded type size computation.
+ 	(alpha_gimplify_va_arg): Use get_formal_tmp_var and
+ 	get_initialized_tmp_var.
+ 
+ 2004-06-11  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* doc/install.texi (--enable-shared): Update libobjc's shared library
+ 	status.  Remove reference to libf2c.
+ 
+ 2004-06-11  Jason Merrill  <jason@redhat.com>
+ 
+ 	* config/i386/i386.h (EXPAND_BUILTIN_VA_ARG): Just abort.
+ 	* config/i386/i386.c (ix86_va_arg): Remove.
+ 	* config/rs6000/rs6000.h (EXPAND_BUILTIN_VA_ARG): Just abort.
+ 	* config/rs6000/rs6000.c (rs6000_va_arg): Remove.
+ 	* config/alpha/alpha.h (EXPAND_BUILTIN_VA_ARG): Just abort.
+ 	* config/alpha/alpha.c (alpha_va_arg): Remove.
+ 	* config/sparc/sparc.h (EXPAND_BUILTIN_VA_ARG): Just abort.
+ 	* config/sparc/sparc.c (sparc_va_arg): Remove.
+ 
+ 	* tree-ssa-operands.c (get_stmt_operands): Use a V_MAY_DEF if the
+ 	assignment might throw.
+ 	* tree-eh.c (tree_could_throw_p): Support non-call exceptions in
+ 	expressions.
+ 
+ 2004-06-11  J"orn Rennecke <joern.rennecke@superh.com>
+ 
+ 	PR 15886:
+ 	* sh.h (ALLOCATE_INITIAL_VALUE): Use return_address_pointer_rtx.
+ 
+ 2004-06-11  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* doc/install.texi (Prerequisites): Update documentation of
+ 	required versions of autoconf and automake.  Remove mention of
+ 	libf2c.
+ 
+ 2004-06-11  Jason Merrill  <jason@redhat.com>
+ 
+ 	* config/sparc/sparc.c (sparc_gimplify_va_arg): New fn.
+ 	(TARGET_GIMPLIFY_VA_ARG_EXPR): Define.
+ 
+ 2004-06-11  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* typeclass.h: Add GPL plus exception license.  Add include
+ 	guard.
+ 
+ 2004-06-10  Jason Merrill  <jason@redhat.com>
+ 
+ 	* gimplify.c (gimplify_modify_expr): Don't force a temporary
+ 	of an aggregate_value_p type.
+ 
+ 2004-06-10  Jeff Law  <law@redhat.com>
+ 
+ 	* fold-const.c (fold_inf_compare): Avoid creating non-gimple
+ 	code when we are in gimple form.
+ 
+ 2004-06-10  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (tree-ssanames.o): Depend on TREE_FLOW_H.
+ 	* tree-flow.h (ssa_names, num_ssa_names, ssa_name): Declare.
+ 	(highest_ssa_version): Remove.
+ 	* tree-outof-ssa.c (new_temp_expr_table): Replace
+ 	highest_ssa_version with num_ssa_names.
+ 	(dump_replaceable_exprs): Likewise.
+ 	(rewrite_vars_out_of_ssa): Likewise.
+ 	* tree-ssa-ccp.c (initialize): Likewise
+ 	* tree-ssa-copyrename.c (rename_ssa_copies): Likewise.
+ 	* tree-ssa-dce.c (tree_dce_init): Likewise.
+ 	* tree-ssa-dom.c (tree_ssa_dominator_optimize): Likewise.
+ 	* tree-ssa-live.c (create_ssa_var_map): Likewise.
+ 	(dump_var_map): Likewise.
+ 	* tree-ssa.c (verify_ssa): Likewise.
+ 	(kill_redundant_phi_nodes): Likewise.
+ 	Do not build a local array of SSA_NAMEs.  Use the ssa_names table.
+ 	* tree-ssanames.c: Include tree-flow.h
+ 	(ssa_names): New varray.
+ 	(init_ssa_names): Initialize ssa_names.
+ 	Reserve the first slot of the ssa_names table.
+ 	(make_ssa_name): Push the newly created SSA_NAME into ssa_names.
+ 	Assign version numbers using num_ssa_names.
+ 
+ 2004-06-10  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* doc/sourcebuild.texi (Front End): Add details of more
+ 	installation documentation required.
+ 
+ 2004-06-10  Brian Booth  <bbooth@redhat.com>
+ 
+ 	* doc/tree-ssa.texi: Remove references to VDEF and add descriptions
+ 	of V_MAY_DEF and V_MUST_DEF.
+ 	* tree-dfa.c (dfa_stats_d): Add num_v_must_defs and rename
+ 	num_vdefs to num_v_may_defs.
+ 	(compute_immediate_uses_for_stmt): Rename occurences of vdef
+ 	to v_may_def.
+ 	(redirect_immediate_uses): Ditto.
+ 	(dump_dfa_stats): Ditto. Also added code to dump num_v_must_defs.
+ 	(collect_dfa_stats_r): Rename occurences of vdef to v_may_def.
+ 	Also add code to sum up the number of v_must_defs.
+ 	(vdefs_disappeared_p): Replace with...
+ 	(v_may_defs_disappeared_p): This.
+ 	(v_must_defs_disappeared_p): New function.
+ 	(mark_new_vars_to_rename): Rename occurences of vdef to v_may_def.
+ 	Also add code to mark new variables found in V_MUST_DEFs for
+ 	renameing.
+ 	* tree-flow.h (stmt_ann_d): Add v_must_def_ops and replace
+ 	vdef_ops to v_may_def_ops.
+ 	(get_vdef_ops): Replace with...
+ 	(get_v_may_def_ops): This.
+ 	* tree-flow-inline.h (get_vdef_ops): Replace with...
+ 	(get_v_may_def_ops): This.
+ 	(get_v_must_def_ops): New function.
+ 	(get_vdef_result_ptr): Replace with...
+ 	(get_v_may_def_result_ptr): This.
+ 	(get_vdef_op_ptr): Ditto with...
+ 	(get_v_may_def_op_ptr); This.
+ 	(get_v_must_def_op_ptr): New function.
+ 	* tree-into-ssa.c (mark_def_sites): Rename occurences of vdef
+ 	to v_may_def. Also add code to mark statements with
+ 	V_MUST_DEFs as definition sites.
+ 	(rewrite_stmt): Rename occurences of vdef to v_may_def. Also
+ 	add code to register new V_MUST_DEFs made by the statement.
+ 	* tree-outof-ssa.c (VIRTUAL_PARTITION): Update comments.
+ 	(check_replaceable): Rename occurences of vdef to v_may_def. Also
+ 	add check for V_MUST_DEFs.
+ 	(find_replaceable_in_bb): Ditto.
+ 	* tree-pretty-print.c (dump_vops): Rename occurences of vdef
+ 	to v_may_def. Also add code to dump V_MUST_DEFs.
+ 	* tree-sra.c (mark_all_vdefs): Replace with...
+ 	(mark_all_v_may_defs): This.
+ 	(mark_all_v_must_defs): New function.
+ 	(create_scalar_copies): Replace call to mark_all_vdefs with
+ 	calls to mark_all_v_may_defs and mark_all_v_must_defs.
+ 	(scalarize_structures): Rename occurences of vdef to v_may_def.
+ 	Also add a check for V_MUST_DEFs.
+ 	(scalarize_modify_expr): Rename occurences of vdef to v_may_def.
+ 	* tree-ssa-alias.c (global_var): Update comment.
+ 	(compute_may_aliases): Ditto.
+ 	(compute_points_to_and_addr_escape): Rename occurences of vdef
+ 	to v_may_def. Also add code to mark variables in V_MUST_DEF
+ 	operands as being written to.
+ 	(group_aliases): Update comment.
+ 	(maybe_create_global_var): Ditto.
+ 	* tree-ssa.c (verify_ssa): Rename occurences of vdef to v_may_def.
+ 	Also add a check for V_MUST_DEFs on GIMPLE registers.
+ 	(replace_immediate_uses): Rename occurences of vdef to v_may_def.
+ 	* tree-ssa-ccp.c (visit_stmt): Rename occurences of vdef
+ 	to v_may_def. Also add code to mark all V_MUST_DEF operands
+ 	VARYING.
+ 	(initialize): Ditto.
+ 	(set_rhs): Rename occurences of vdef to v_may_def. Also add
+ 	code to update SSA_NAMEs in V_MUST_DEFs.
+ 	* tree-ssa-copy.c (cprop_into_stmt): Rename occurences of vdef
+ 	to v_may_def.
+ 	* tree-ssa-dce.c (mark_stmt_if_obviously_necessary): Rename
+ 	occurences of vdef to v_may_def. Also add code to mark statements
+ 	with V_MUST_DEFs as necessary.
+ 	(propagate_necessity): Rename occurences of vdef to v_may_def.
+ 	* tree-ssa-dom.c (redirect_edges_and_update_ssa_graph): Rename
+ 	occurences of vdef to v_may_def. Also add code to mark operands
+ 	in V_MUST_DEFs for renaming.
+ 	(eliminate_redundant_computations): Rename occurences of vdef
+ 	to v_may_def.
+ 	(record_equivalences_from_stmt): Rename occurences of vdef
+ 	to v_may_def. Also add code to record VUSEs for V_MUST_DEFs.
+ 	(optimize_stmt): Remove unnesessary variable vdefs. Update
+ 	comment.
+ 	(register_definitions_for_stmt): Rename occurences of vdef
+ 	to v_may_def. Also add code to register definitions made with
+ 	V_MUST_DEFs.
+ 	* tree-ssa-dse.c (fix_stmt_vdefs): Replace with...
+ 	(fix_stmt_v_may_defs): This.
+ 	(fix_phi_uses): Rename occurences of vdef to v_may_def.
+ 	(dse_optimize_stmt): Ditto.
+ 	* tree-ssa-live.c (create_ssa_var_map): Rename occurences of vdef
+ 	to v_may_def. Also add code to mark V_MUST_DEF operands as being
+ 	used in virtual operators.
+ 	* tree-ssa-loop.c (mark_defs_for_rewrite): Rename occurences of
+ 	vdef to v_may_def. Also add code to mark V_MUST_DEF operands for
+ 	renaming.
+ 	* tree-ssa-operands.c (opf_kill_def): New flag for killing
+ 	definitions.
+ 	(build_vdefs): Renamed to...
+ 	(build_v_may_defs): This.
+ 	(build_v_must_defs): New variable.
+ 	(voperands_d): Add v_must_def_ops and replace vdef_ops with
+ 	v_may_def_ops.
+ 	(append_vdef): Replace with...
+ 	(append_v_may_def): This.
+ 	(append_v_must_def): New function.
+ 	(NUM_FREE): Increment for V_MUST_DEF
+ 	(optype_freelist): Increment its size for V_MUST_DEF
+ 	(allocate_vdef_optype): Replace with...
+ 	(allocate_v_may_def_optype): This.
+ 	(allocate_v_must_def_optype): New function.
+ 	(free_vdefs): Replace with...
+ 	(free_v_may_defs): This.
+ 	(free_v_must_defs): New function.
+ 	(remove_vdefs): Replace with...
+ 	(remove_v_may_defs): This.
+ 	(remove_v_must_defs): New function.
+ 	(init_ssa_operands): Rename occurences of vdef to v_may_def. Also
+ 	add code to initialize build_v_must_defs.
+ 	(finalize_ssa_vdefs): Replace with...
+ 	(finalize_ssa_v_may_defs): This.
+ 	(finalize_ssa_vuses): Rename occurences of vdef to v_may_def.
+ 	(finalize_ssa_v_must_defs): New function.
+ 	(finalize_ssa_stmt_operands): Replace call to finalize_ssa_vdefs
+ 	with calls to finalize_ssa_v_may_defs and finalize_ssa_v_must_defs.
+ 	(verify_start_operands): Rename occurences of vdef to v_may_def.
+ 	Also add check for build_v_must_defs.
+ 	(get_stmt_operands): Rename occurences of vdef to v_may_def.
+ 	Also add code to handle V_MUST_DEFs and to use opf_kill_def for
+ 	killing definitions.
+ 	(get_expr_operands): Update comment and use opf_kill_def for
+ 	killing definitions.
+ 	(add_stmt_operand): Replace code that appends VDEFs with code
+ 	that appends V_MUST_DEFs when opf_kill_def is set and V_MAY_DEFs
+ 	otherwise.
+ 	(add_call_clobber_ops): Update comments.
+ 	* tree-ssa-operands.h (vdef_optype_d): Replace with...
+ 	(v_may_def_optype_d): This.
+ 	(v_must_def_optype_d): New structure.
+ 	(VDEF_OPS): Replace with...
+ 	(V_MAY_DEF_OPS): This.
+ 	(STMT_VDEF_OPS): Same with...
+ 	(STMT_V_MAY_DEF_OPS): This.
+ 	(NUM_VDEFS): And...
+ 	(NUM_V_MAY_DEFS): This.
+ 	(VDEF_RESULT_PTR): As well as...
+ 	(V_MAY_DEF_RESULT_PTR): This.
+ 	(VDEF_RESULT): Same goes for...
+ 	(V_MAY_DEF_RESULT): This.
+ 	(VDEF_OP_PTR): And...
+ 	(V_MAY_DEF_OP_PTR): This.
+ 	(VDEF_OP): And...
+ 	(V_MAY_DEF_OP): This.
+ 	(V_MUST_DEF_OPS): New macro.
+ 	(STMT_V_MUST_DEF_OPS): Ditto.
+ 	(NUM_V_MUST_DEFS): Ditto.
+ 	(V_MUST_DEF_OP_PTR): Ditto.
+ 	(V_MUST_DEF_OP): Ditto.
+ 	(remove_vdefs): Replace signature with...
+ 	(remove_v_may_defs): This.
+ 	(remove_v_must_defs): New function signature.
+ 	* tree-ssa-pre.c (subst_phis): Replace call to remove_vdefs
+ 	with calls to remove_v_may_defs and remove_v_must_defs.
+ 	(process_left_occs_and_kills): Rename occurences of vdef to v_may_def.
+ 	Also add code that marks left occurences of operands in V_MUST_DEFs.
+ 	* tree-tailcall.c (find_tail_calls): Rename occurences of vdef
+ 	to v_may_def. Also add check for V_MUST_DEFs.
+ 	(eliminate_tail_call):Rename occurences of vdef to v_may_def.
+ 
+ 2004-06-10  Vladimir Makarov  <vmakarov@redhat.com>
+ 
+ 	PR target/15653
+ 	* haifa-sched.c (schedule_block): Finish cycle after issuing asm
+ 	insn.
+ 
+ 2004-06-10  Volker Reichelt  <reichelt@igpm.rwth-aachen.de>
+ 
+ 	PR web/15263
+ 	* doc/install.texi: Remove superfluous linebreak.
+ 
+ 2004-06-10  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* builtins.c (expand_builtin): Fall back to library function call for
+ 	conj, conjf, conjl, creal, crealf, creall, cimag, cimagf and cimagl.
+ 	(fold_builtin_1): Lower built-ins BUILT_IN_CONJ{,F,L} to CONJ_EXPR,
+ 	BUILT_IN_CREAL{,F,L} to REALPART_EXPR, and BUILT_IN_CIMAG{,F,L} to
+ 	IMAGPART_EXPR respectively.
+ 
+ 2004-06-10  J"orn Rennecke <joern.rennecke@superh.com>
+ 
+ 	* sh.c (dump_table): New argument start.  Changed caller.
+ 	(fixup_mova): New function.
+ 	(find_barrier): Use it.
+ 	(sh_reorg): Likewise.  Check for CODE_FOR_casesi_worker_2.
+ 	If the label a mova refers to is above the mova itself, change
+ 	the mova into a load.
+ 	* sh.md (*casesi_worker): Rename to:
+ 	(casesi_worker_1).
+ 	(casesi_worker_2): New insn.
+ 
+ 2004-06-10  Jason Merrill  <jason@redhat.com>
+ 
+ 	* target.h (struct gcc_target): Change gimplify_va_arg_expr
+ 	hook signature.
+ 	* tree-gimple.h: Adjust.
+ 	* config/alpha/alpha.c (alpha_gimplify_va_arg): Adjust.
+ 	* config/i386/i386.c (ix86_gimplify_va_arg): Adjust.
+ 	Use fold_convert.
+ 	* config/ia64/ia64.c (ia64_gimplify_va_arg): Adjust.
+ 	* config/rs6000/rs6000.c (rs6000_gimplify_va_arg): Adjust.
+ 	Use COMPLEX_EXPR for complex numbers.  Use fold_convert.
+ 	* builtins.c (std_gimplify_va_arg_expr): Adjust.  Use fold_convert.
+ 	(gimplify_va_arg_expr): Return GS_ERROR in error case.
+ 	Gimplify valist rather than calling stabilize_va_list.
+ 
+ 2004-06-10  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* Makefile.in (df.o): Remove fibheap dependency.
+ 	* df.h: Do not include sbitmap.h.
+ 	(struct ref): New field "data".
+ 	(DF_REF_DATA): New accessor macro.
+ 	(struct df): Field "dom" removed.
+ 	(df_analyze_subcfg): New function.
+ 	(transfer_function_sbitmap, transfer_function_bitmap): Replaced by ...
+ 	(transfer_function): ... new type.
+ 	(iterative_dataflow_sbitmap, iterative_dataflow_bitmap): Replaced by ...
+ 	(iterative_dataflow): ... new function.
+ 	(enum set_representation, struct dataflow): New.
+ 	* df.c: Do not include fibheap.h.
+ 
+ 	(df_reg_def_chain_clean, df_reg_use_chain_clean,
+ 	(df_bb_table_realloc, df_analyse_subcfg, free_reg_ref_chain,
+ 	prune_to_subcfg, df_bb_modify): New functions.
+ 	(df_bitmaps_alloc, df_reg_def_chain_create, df_reg_use_chain_create,
+ 	df_refs_update, df_reg_table_realloc, df_ref_create,
+ 	df_bb_reg_def_chain_create, df_bb_reg_use_chain_create,
+ 	df_bb_rd_local_compute, df_bb_ru_local_compute, df_bb_lr_local_compute,
+ 	df_analyse_1, df_insn_modify): Support analysing only a part of the cfg.
+ 
+ 	(dataflow_set_a_op_b, dataflow_set_copy): New functions.
+ 	(df_rd_transfer_function, df_ru_transfer_function,
+ 	df_lr_transfer_function): Type of bitmaps changed to void *.
+ 	(hybrid_search_bitmap, hybrid_search_sbitmap): Merge into ...
+ 	(hybrid_search): ... new function.
+ 	(iterative_dataflow_bitmap, iterative_dataflow_sbitmap): Merge into ...
+ 	(iterative_dataflow): ... new function. Avoid use of fibheaps for
+ 	a worklist.  Do not process basic blocks unnecessarily.
+ 
+ 2004-06-10  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* fold-const.c (fold_abs_const): Make extern.
+ 	* tree.h (fold_abs_const): Prototype here.
+ 	* builtins.c (fold_builtin_fabs): New function to transform
+ 	fabs, fabsf and fabsl builtins into ABS_EXPR tree nodes.
+ 	(fold_builtin_abs): New function to transform abs, labs, llabs
+ 	and imaxabs builtins into ABS_EXPR tree nodes.
+ 	(expand_builtin): Fall back to a function call for abs, labs,
+ 	llabs and imaxabs builtins that survive constant folding.
+ 	(fold_builtin_1): Call fold_builtin_fabs for FABS, FABSF and
+ 	FABSL, and fold_builtin_abs for ABS, LABS, LLABS and IMAXABS.
+ 
+ 2004-06-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* config/ia64/unwind-ia64.c (uw_frame_state_for): Don't assume a
+ 	leaf function without unwind info at RP 0.
+ 
+ 2004-06-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/14791
+ 	* tree.h (enum tree_index): Add TI_FILEPTR_TYPE.
+ 	(fileptr_type_node): Define.
+ 	* tree.c (build_common_tree_nodes_2): Initialize
+ 	fileptr_type_node to ptr_type_node.
+ 	* c-common.c (c_common_nodes_and_builtins): For C++, make
+ 	fileptr_type_node a distinct type copy.
+ 	* builtin-types.def (BT_FILEPTR, BT_FN_INT_CONST_STRING_FILEPTR,
+ 	BT_FN_INT_INT_FILEPTR, BT_FN_INT_FILEPTR_CONST_STRING_VALIST_ARG,
+ 	BT_FN_SIZE_CONST_PTR_SIZE_SIZE_FILEPTR,
+ 	BT_FN_INT_FILEPTR_CONST_STRING_VAR): Add.
+ 	(BT_FN_INT_CONST_STRING_PTR, BT_FN_INT_INT_PTR,
+ 	BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR, BT_FN_INT_PTR_CONST_STRING_VAR,
+ 	BT_FN_INT_PTR_CONST_STRING_VALIST_ARG): Remove.
+ 	* builtins.def (BUILT_IN_FPRINTF, BUILT_IN_FPRINTF_UNLOCKED,
+ 	BUILT_IN_FPUTC, BUILT_IN_FPUTC_UNLOCKED, BUILT_IN_FPUTS,
+ 	BUILT_IN_FPUTS_UNLOCKED, BUILT_IN_FSCANF, BUILT_IN_FWRITE,
+ 	BUILT_IN_FWRITE_UNLOCKED, BUILT_IN_VFPRINTF, BUILT_IN_VFSCANF): Use
+ 	the above *FILEPTR* types instead of *PTR*.
+ 
+ 2004-06-09  Daniel Berlin <dberlin@dberlin.org>
+ 
+ 	* tree-ssa.c (verify_ssa): Verify that vdefs/makes_aliased_stores
+ 	match.
+ 
+ 2004-06-09  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* fold-const.c (fold_not_const): New function.
+ 	(fold) <ABS_EXPR>: Don't bother testing wins.
+ 	(fold) <BIT_NOT_EXPR>: Call fold_not_const.
+ 	(nondestructive_fold_unary_to_constant) <BIT_NOT_EXPR>: Likewise.
+ 
+ 2004-06-09  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR middle-end/15228
+ 	* function.c (assign_parms): Always set_mem_align with the computed
+ 	FUNCTION_ARG_BOUNDARY.  Don't clear stack_parm if !STRICT_ALIGNMENT.
+ 
+ 2004-06-09  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR opt/15108
+ 	* tree-tailcall.c (find_tail_calls): Don't check early for
+ 	tail_recursion failure.
+ 
+ 2004-06-09  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	Move SSA_NAME annotations into tree_ssa_name.
+ 
+ 	* tree-dfa.c (create_ssa_name_ann): Remove.
+ 	* tree-flow-inline.h (ssa_name_ann, get_ssa_name_ann): Remove.
+ 	* tree-flow.h (enum tree_ann_type): Remove SSA_NAME_ANN.
+ 	(struct ssa_name_ann_d): Remove.
+ 	(union tree_ann_d): Update.
+ 	(ssa_name_ann_t): Remove.
+ 	* tree-ssa-alias.c: (get_ptr_info): New local function.
+ 	Replace references to ssa_name_ann_t with struct ptr_info_def.
+ 	* tree-ssa-operands.c (get_expr_operands): Likewise.
+ 	* tree.h (SSA_NAME_PTR_INFO): Define.
+ 	(struct ptr_info_def): Declare.
+ 	(struct tree_ssa_name): Add field 'ptr_info'.
+ 
+ 2004-06-09  Danny Smith  <dannysmith@users.sourceforge.net>
+ 
+ 	* config/i386/winnt.c (i386_pe_output_labelref): Correct
+ 	misplaced ')'.
+ 
+ 2004-06-09  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* config/i386/k6.md: Rewrite using the DFA model.
+ 	* config/i386/i386.c (ix86_adjust_cost): Don't increase the
+ 	cost of load-operation insns for the K6.
+ 	(ia32_use_dfa_pipeline_interface): Add TARGET_K6.
+ 	(ia32_multipass_dfa_lookahead): Likewise.
+ 
+ 2004-06-09  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/alpha/alpha.c (alpha_gimplify_va_arg_1,
+ 	alpha_gimplify_va_arg, TARGET_GIMPLIFY_VA_ARG_EXPR): New.
+ 
+ 2004-06-09  Richard Henderson  <rth@redhat.com>
+ 
+ 	* expmed.c (emit_store_flag): Cope with FLOAT_STORE_FLAG_VALUE.
+ 
+ 2004-06-09  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* Makefile.in (CPPLIB_H): Put files in order of inclusion.
+ 	(CPP_ID_DATA_H): New.
+ 	(gtype-desc.o): Update dependencies.
+ 	(GTFILES): Use CPP_ID_DATA_H.
+ 
+ 2004-06-09  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	Revert:
+ 	PR c++/15815
+ 	2004-06-07  Mark Mitchell  <mark@codesourcery.com>
+ 	* doc/extend.texi: Deprecate #pragma interface and #pragma
+ 	implementation.
+ 
+ 2004-06-09  David S. Miller  <davem@nuts.davemloft.net>
+ 
+ 	* config/sparc/sparc.h (MOVE_RATIO): New definition.
+ 
+ 2004-06-09  Richard Henderson  <rth@redhat.com>
+ 
+ 	* basic-block.h (struct edge_def): Add goto_locus.
+ 	* tree-cfg.c (make_goto_expr_edges): Set it.
+ 	(disband_implicit_edges): Use it.
+ 	* tree-pretty-print.c (dump_implicit_edges): Print it.
+ 
+ 2004-06-08  Anil Paranjpe <anilp1@kpitcummins.com>
+ 
+ 	* h8300.md (ldm_h8300s_4): Fix condition for expander.
+ 
+ 2004-06-08  Jason Merrill  <jason@redhat.com>
+ 
+ 	Gimplify VA_ARG_EXPR into simpler forms.
+ 	* target.h: Add gimplify_va_arg_expr hook.
+ 	* target-def.h: Add TARGET_GIMPLIFY_VA_ARG_EXPR.
+ 	* fold-const.c (build_fold_addr_expr)
+ 	(build_fold_addr_expr_with_type): Move from gimplify.c.
+ 	* tree.h: Declare them.
+ 	* gimplify.c (gimplify_and_add): New fn.
+ 	(build_addr_expr, build_addr_expr_with_type): Move to fold-const.c.
+ 	(gimplify_array_ref_to_plus, gimplify_modify_expr)
+ 	(gimplify_expr): Use build_fold_*.
+ 	(copy_if_shared_r): Only mark VA_ARG_EXPR volatile if we
+ 	don't know how to gimplify it.
+ 	* builtins.c (std_gimplify_va_arg_expr): New fn.
+ 	(dummy_object): New static fn.
+ 	(gimplify_va_arg_expr): New fn.
+ 	(stabilize_va_list): Use build_fold_*.
+ 	* tree-gimple.h: Declare new fns.
+ 	* config/i386/i386.c (TARGET_GIMPLIFY_VA_ARG_EXPR): Define.
+ 	(ix86_gimplify_va_arg): New fn.
+ 	* config/ia64/ia64.c (TARGET_GIMPLIFY_VA_ARG_EXPR): Define.
+ 	(ia64_gimplify_va_arg): New fn.
+ 	* config/rs6000/rs6000.c (rs6000_gimplify_va_arg): New fn.
+ 	(TARGET_GIMPLIFY_VA_ARG_EXPR): Define.
+ 	* alias.c (get_varargs_alias_set): Just return 0 for now.
+ 
+ 	* c-objc-common.c (c_tree_printer): Improve handling of %T.
+ 
+ 2004-06-09  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* tree-complex.c (expand_complex_comparison): Use fold_convert instead
+ 	of convert.
+ 	* tree-inline.c (setup_one_parameter): Likewise.
+ 	* tree-sra.c (csc_build_component_ref): Likewise.
+ 	* tree-ssa-ccp.c (ccp_fold): Likewise.
+ 	* tree-ssa-copy.c (cprop_operand): Likewise.
+ 	* tree-ssa-dom.c (simplify_rhs_and_lookup_avail_expr): Likewise.
+ 	* tree-tailcall.c (tree_optimize_tail_calls_1): Likewise.
+ 
+ 2004-06-09  J"orn Rennecke <joern.rennecke@superh.com>
+ 
+ 	PR rtl-optimization/15521:
+ 	* sched-int.h (in_post_call_group_p): Change type to enum.
+ 	* sched-deps.c (sched_analyze_insn):
+ 	(sched_analyze): When in_post_call_group_p is post_call_initial,
+ 	don't add a dependency, but still set SCHED_GROUP_P and CANT_MOVE,
+ 	and also reset in_post_call_group_p to post_call.
+ 	(sched_analyze): When the previous basic block ended in a CALL_INSN,
+ 	initialize in_post_call_group_p as post_call_initial.
+ 	(init_deps): initialize in_post_call_group_p to not_post_call.
+ 
+ 2004-06-09  Arnaud Charlet  <charlet@act-europe.fr>
+ 
+ 	PR ada/6637
+ 	* doc/install.texi: List ada, libada as options to --enable-shared
+ 
+ 2004-06-09  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* aclocal.m4 (gcc_AC_PROG_LN): Remove.
+ 	(gcc_AC_CHECK_DECLS): Use AH_TEMPLATE to generate
+ 	config.in entries.
+ 	* configure.ac: Call ACX_PROG_LN, falling back to $LN_S
+ 	if hard links are not available.
+ 	* configure: Regenerate.
+ 	* config.in: Regenerate.
+ 
+ 2004-06-08  Per Bothner  <per@bothner.com>
+ 
+ 	* configure.ac:  New --enable-mapped-location sets USE_MAPPED_LOCATION.
+ 
+ 2004-06-08  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* toplev.c (floor_log2_wide): Correct casts for 64-bit hosts.
+ 	Correct formatting.
+ 
+ 2004-06-08  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	PR target/15790
+ 	* config/i386/i386-coff.h (ASM_OUTPUT_ALIGN): Define.
+ 
+ 2004-06-08  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* fold-const.c (fold_convert): Treat OFFSET_TYPE like
+ 	POINTER_TYPE and INTEGER_TYPE.
+ 
+ 2004-06-08  Bernardo Innocenti  <bernie@develer.com>
+ 
+ 	* modulo-sched.c: Compile only when INSN_SCHEDULING is
+ 	defined.
+ 
+ 2004-06-08  Jeff Law  <law@redhat.com>
+ 
+ 	* doc/contrib.texi: Add entries for Stefan Olsson and
+ 	Ola Ronnerup.
+ 
+ 2004-06-08  DJ Delorie  <dj@redhat.com>
+ 
+ 	* toplev.c (floor_log2_wide): Replace loop with faster bit
+ 	operations.
+ 	(exact_log2_wide): Define in terms of the above.
+ 	* toplev.h (floor_log2): Use _builtin_clz family of builtins if
+ 	available.
+ 
+ 2004-06-08  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* config/rs6000/rs6000.c (print_operand, <case 'z'>):
+ 	Make sure that we are in INDIRECT mode when getting the
+ 	stub name.
+ 
+ 2004-06-08  Anil Paranjpe <anilp1@kpitcummins.com>
+ 
+ 	* h8300.md (extendqisi2_h8300): Add constraints.
+ 	(ldm_h8300s_4_normal): Fix typo.
+ 
+ 2004-06-08  Richard Henderson  <rth@redhat.com>
+ 
+ 	* gimple-low.c (struct lower_data): Replace the_return_label and
+ 	one_return_stmt with return_statements.
+ 	(lower_function_body): Process the entire list of return_statements.
+ 	(lower_return_expr): Check source value before unifying return_exprs.
+ 	* gimplify.c (gimplify_return_expr): Force the use of a temporary
+ 	for !aggregate_value_p.
+ 	* tree-gimple.c: Update RETURN_EXPR grammer.
+ 
+ 2004-06-08  Vladimir Makarov  <vmakarov@redhat.com>
+ 
+ 	PR target/15598
+ 	* config/ia64/ia64.c (bundling): Add missed TYPE_A.
+ 
+ 2004-06-08  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	PR rtl-optimization/15717
+ 	* config/i386/i386.c (legitimate_constant_p): Do not allow
+ 	x - symbol_ref.
+ 
+ 2004-06-08  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	* gimplify.c (copy_if_shared_r): Revert:
+ 	2004-05-21  Richard Henderson  <rth@redhat.com>
+ 	* gimplify.c [...] Don't mark VA_ARG_EXPRs volatile here.
+ 
+ 2004-06-07  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* expmed.c (add_cost, neg_cost, sdiv_pow2_cheap, smod_pow2_cheap):
+ 	Make arrays indexed by machine mode.  Rename negate_cost to neg_cost.
+ 	(init_expmed): Initialize these cost arrays as appropriate.
+ 	(store_bit_field, extract_bit_field): Correct whitespace.
+ 	(synth_mult, choose_mult_variant, expand_mult, expand_mult_highpart,
+ 	expand_mult_highpart_optab, expand_divmod): Update uses of add_cost,
+ 	neg_cost, sdiv_pow2_cheap, smod_pow2_cheap to index with mode,
+ 	word_mode or compute_mode as appropriate.
+ 
+ 2004-06-07  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR target/15783
+ 	* config/sparc/sparc.c (function_arg_union_value): Add 'mode'
+ 	parameter.  Enumerate the registers inside the PARALLEL.
+ 	(function_arg): Adjust call to function_arg_union_value.
+ 	(function_value): Likewise.
+ 
+ 	* config/sparc/sparc.c (sparc_function_epilogue): Properly format.
+ 
+ 2004-06-07  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* real.c (real_copysign): New function to implement libm's copysign.
+ 	* real.h (real_copysign): Prototype here.
+ 	* fold-const.c (tree_expr_nonnegative_p): The result of sqrt, sqrtf
+ 	and sqrtl can be negative, as sqrt(-0.0) = -0.0.  Correct whitespace.
+ 	* builtins.c (fold_builtin_isascii, fold_builtin_toascii,
+ 	fold_builtin_isdigit): Add function prototypes.
+ 	(fold_builtin_copysign): New function to fold copysign, copysignf
+ 	and copysignl.  Optimize copysign(x,x) as x.  Evaluate copysign of
+ 	constant arguments at compile-time using real_copysign.  Fold
+ 	copysign(X,Y) as fabs(X) if Y is always non-negative.
+ 	(fold_builtin_1): Correct minor whitespace/style issues.  Call
+ 	fold_builtin_copysign for BUILT_IN_COPYSIGN{,F,L}.
+ 
+ 2004-06-07  J"orn Rennecke <joern.rennecke@superh.com>
+ 
+ 	* tree.c (iterative_hash_expr): Use real_hash.
+ 
+ 2004-06-07  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	PR c/14765
+ 	* c-parse.in (compstmt_primary_start): Set last_expr_type to
+ 	NULL_TREE.
+ 
+ 2004-06-07  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	PR c++/15815
+ 	* doc/extend.texi: Deprecate #pragma interface and #pragma
+ 	implementation.
+ 
+ 2004-06-07  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	PR middle-end/15666
+ 	* c-decl.c (finish_decl): Use change_decl_assembler_name for the
+ 	builtin decl as well.
+ 
+ 2004-06-07  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	PR c/14649
+ 	* c-typeck.c (require_constant_value, require_constant_elements):
+ 	Move declarations to the top of the file.
+ 	(build_function_call): If we require a constant value, fold with
+ 	fold_initializer.  If the result is a constant, and the function
+ 	wasn't called using __builtin_foo, issue a pedantic warning.
+ 	(build_unary_op): If we require a constant value, fold tree with
+ 	fold_initializer.
+ 	(build_binary_op): Use require_constant_value to determine whether
+ 	to call fold or fold_initializer.
+ 
+ 2004-06-07  Richard Henderson  <rth@redhat.com>
+ 
+ 	* gimple-low.c (struct lower_data): Add the_return_label and
+ 	one_return_stmt.
+ 	(lower_function_body): Initialize and use them.
+ 	(lower_return_expr): New.
+ 	(lower_stmt): Call it.
+ 	* gimplify.c (gimplify_return_expr): Force the argument to be either
+ 	null or a result_decl.
+ 	* tree-gimple.c: Update gimple grammer to match.
+ 	* tree-ssa-copyrename.c (copy_rename_partition_coalesce): Deny
+ 	coalescing of result_decls.
+ 
+ 2004-06-07  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR rtl-opt/15193
+ 	* expmed.c (extract_bit_field): Fix vector_extract return.
+ 
+ 	* config/i386/i386.md (negv4sf2): New pattern.
+ 
+ 2004-06-07  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	PR c++/15337
+ 	* c-common.c (c_sizeof_or_alignof_type): Use more detailed error
+ 	message.
+ 
+ 2004-06-06  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* config.in: Regenerate.
+ 
+ 2004-06-06  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* tree-cfg.c (tree_verify_flow_info): Make sure that labels in
+ 	SWITCH_LABELS are always sorted.
+ 
+ 2004-06-06  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* hooks.c (hook_int_void_1): New generic hook.
+ 	* hooks.h (hook_int_void_1): Add prototype.
+ 	* config/c4x/c4x.c (TARGET_SCHED_USE_DFA_PIPELINE_INTERFACE):
+ 	Define to hook_int_void_1.
+ 	* config/c4x/c4x.md: Replace dummies for the old pipeline model
+ 	with dummies for the new one.
+ 
+ 2004-06-06  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* tree.h (lvalue_or_else): Delete function prototype.
+ 	* c-typeck.c (lvalue_or_else): Make static.  Add static prototype.
+ 
+ 2004-06-06  Stephane Carrez  <stcarrez@nerim.fr>
+ 
+ 	PR target/14542
+ 	* config/m68hc11/m68hc11.md (move peephole2): Emit a use note to avoid
+ 	a live change of a register after peephole replacement.
+ 
+ 2004-06-06  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	PR c/13519
+ 	* c-typeck.c (composite_type, common_pointer_type): New functions.
+ 	(common_type): Split parts into composite_type and
+ 	common_pointer_type.  Ensure that arithmetic operations return
+ 	unqualified types without attributes.  Don't make composite type
+ 	of signed enum and compatible integer be unsigned.
+ 	(build_conditional_expr, build_binary_op): Use
+ 	common_pointer_type.
+ 	* c-decl.c (merge_decls): Use composite_type.
+ 	* c-tree.h (composite_type): Declare.
+ 
+ 2004-06-06  Stephane Carrez  <stcarrez@nerim.fr>
+ 
+ 	PR target/14457
+ 	* config/m68hc11/m68hc11.c (splitable_operand): New predicate.
+ 	* config/m68hc11/m68hc11-protos.h (splitable_operand): Declare.
+ 	* config/m68hc11/m68hc11.h (PREDICATE_CODES): Register it.
+ 	(inhibit_libc): Must define.
+ 	* config/m68hc11/m68hc11.md ("movhi_const0"): Use splitable_operand.
+ 	("*andhi3_gen", "iorhi3", "*iorhi3_gen"): Likewise.
+ 	("xorhi3"): Likewise.
+ 
+ 2004-06-06  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* cgraphunit.c (cgraph_decide_inlining): Adjust dump lines in
+ 	always_inline pass.
+ 
+ 2004-06-05  David S. Miller  <davem@nuts.davemloft.net>
+ 
+ 	* config/sparc/linux.h (TARGET_C99_FUNCTIONS): Set.
+ 	* config/sparc/linux64.h (TARGET_C99_FUNCTIONS): Likewise.
+ 
+ 2004-06-05  Bernardo Innocenti  <bernie@develer.com>
+ 
+ 	* regclass.c (init_reg_sets): Check for missing registers in target
+ 	initializer macros FIXED_REGISTERS and CALL_USED_REGISTERS.
+ 
+ 2004-06-05  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* Makefile.in (MKDEPS_H): New shorthand.
+ 	(c-opts.o): Update dependencies.
+ 	* c-opts.c: Include mkdeps.h.
+ 	(handle_deferred_opts): Use cpp_get_deps and deps_add_target,
+ 	not cpp_add_dependency_target.
+ 
+ 2004-06-05  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* config/v850/v850.c (v850_use_dfa_pipeline_interface): New.
+ 	* config/v850/v850.md: Convert to DFA scheduler description.
+ 
+ 2004-06-05  Tobias Schlueter  <tobias.schlueter@physik.uni-muenchen.de>
+ 
+ 	PR fortran/15478
+ 	* doc/install.texi: Document GMP as prerequisite. Document
+ 	--with-gmp and --with-gmp-dir configure options.
+ 	* fortran/gfortran.texi: Remove section "Compiling and testing",
+ 	remove TOC reference to it.
+ 
+ 2004-06-05  Graham Stott  <graham.stott@btinternet.com>
+ 
+ 	* combine.c(simplify_shift_const): Check shift amount is a
+ 	CONST_INT.
+ 
+ 2004-06-05  Danny Smith  <dannysmith@users.sourceforge.net>
+ 
+ 	* toplev.c (init_asm_output): Add explicit 'b' to mode when
+ 	opening asm_out_file.
+ 	* c-pch.c (c_common_write_pch): Remove unnecessary fflush before
+ 	reading asm_out_file. Replace fflush after reading asm_out_file
+ 	with fseek.
+ 	* hosthooks-def.h (HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY): Define
+ 	default and add to HOST_HOOKS_INITIALIZER.
+ 	* hosthooks.h (gt_pch_alloc_granularity): Declare hook function.
+ 	* ggc-common.c (default_gt_pch_alloc_granularity): New function.
+ 	(gt_pch_save): Use host_hooks.gt_pch_alloc_granularity
+ 	to set mmi.offset padding.
+ 	 * config.gcc (i[34567]86-*-mingw32*): Set target_gtfiles to
+ 	$(srcdir)/config/i386/winnt.c.
+ 	(i[34567]86-*-pe | i[34567]86-*-cygwin*): Likewise.
+ 	(i[34567]86-*-uwin*): Likewise.
+ 	*i[34567]86-*-interix3*): Likewise.
+ 	* config.host (i[34567]86-*-mingw32*): Set out_host_hook_obj.
+ 	* config/i386/host-mingw32.c: New file.
+ 	* config/i386/x-mingw32: Add rule for host-mingw32.o.
+ 	* config/i386/winnt.c: (struct extern_list) Tag as GTY.
+ 	(extern_head): Likewise.
+ 	(struct export_list) Likewise.
+ 	(export_head): Likewise.
+ 	(i386_pe_record_external_function): Use ggc_alloc.
+ 	(i386_pe_record_exported_symbol): Likewise.
+ 	Include "gt-winnt.h" at end.
+ 	* doc/hostconfig.texi: Document
+ 	HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY.
+ 
+ 2004-06-04  Bernardo Innocenti  <bernie@develer.com>
+ 
+ 	* config/m68k/m68k.h: Remove comments copied over from tm.texi.
+ 	Rename 68000 and 68k to m68k for consistency in comments.  Remove
+ 	trailing whitespace before EOLs and before TABs.
+ 	(MAX_CODE_ALIGN): Remove unused macro.
+ 	(CALL_USED_REGISTERS): Reformat and add comments.
+ 
+ 2004-06-04  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* gcc.c (MFLIB_SPEC): Remove library references, to require users
+ 	to enumerate -lmudflap* and dependencies when linking.
+ 
+ 2004-06-04  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	PR target/15822
+ 	* dojump.c (do_jump): Fix uninitialized variable tcode1.
+ 
+ 2004-06-04  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* Makefile.in (insn-conditions.o): Back out removal of reload.h.
+ 	* genconditions.c (write_header): Back out removal of reload.h.
+ 
+ 2004-06-04  Jan Hubicka  <jh@suse.cz>
+ 
+ 	Re-apply hopefully fixed patch:
+ 	* i386.md (UNSPECV_EH_RETURN): Kill.
+ 	(eh_return): Use jump_insn.
+ 	(eh_return_si, eh_return_di): Change pattern to jump instruction.
+ 
+ 2004-06-04  Jeff Law  <law@redhat.com>
+ 
+ 	* cfgrtl.c (try_redirect_by_replacing_jump): Fix return value.
+ 
+ 2004-06-04  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* except.c (for_each_eh_region): New function.
+ 	* except.h (for_each_eh_region): Add a prototype for it.
+ 	* tree-cfg.c (update_eh_labels): New function, callback for
+ 	for_each_eh_region.
+ 	(label_for_bb): Make global static, unfortunately.
+ 	(cleanup_dead_labels): Also update label references for
+ 	exception regions.
+ 
+ 2004-06-03  Chris Demetriou  <cgd@broadcom.com>
+ 
+ 	* config/mips/mips.c (struct irix_section_align_entry): Fix
+ 	GTY marker.
+ 
+ 2004-06-03  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* toplev.c (check_global_declarations): Don't ask for
+ 	DECL_ASSEMBLER_NAME unless the function really is declared
+ 	static and not defined.
+ 
+ 2004-06-03  Matt Austern  <austern@apple.com>
+ 
+ 	PR c++/15428
+ 	* default.h (TARGET_WEAK_NOT_IN_ARCHIVE_TOC): New name
+ 	for TARGET_EXPLICIT_INSTANTIATIONS_ONE_ONLY, with reversed sense.
+ 	* config/darwin.h (TARGET_WEAK_NOT_IN_ARCHIVE_TOC): Likewise.
+ 	* doc/tm.texi (TARGET_WEAK_NOT_IN_ARCHIVE_TOC): Rewrite
+ 	documentation to reflect the new macro name and to clarify its
+ 	meaning.
+ 
+ 2004-06-03  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* rtl.def (VAR_LOCATION): Make RTX_EXTRA.
+ 
+ 2004-06-03  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* config/darwin.c (machopic_indirect_data_reference): Copy
+ 	the SYMBOL_REF_DECL from the original RTX for the new
+ 	non-lazy pointer RTX.
+ 
+ 2004-06-03  Mark G. Adams  <mark.g.adams@sympatico.ca>
+ 
+ 	* tree.h: Remove include of version.h
+ 	* c-cppbuiltin.c: Include version.h
+ 	* diagnostic.c: Include version.h
+ 	* dwarf2out.c: Include version.h
+ 	* toplev.c: Include version.h
+ 	* vmsdbgout.c: Include version.h
+ 	* Makefile.in: Remove dependency on version.h from TREE_H, and
+ 	add dependencies to required .o targets
+ 
+ 2004-06-03  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* Makefile.in (RA_H, RESOURCE_H, SCHED_INT_H, CFGLAYOUT_H,
+ 	CFGLOOP_H, DF_H, DDG_H, TREE_SSA_LIVE_H): New.
+ 	(TARGET_H): Add insn-modes.h.
+ 	(tree-ssa.o, tree-cfg.o, tree-ssa-loop.o, toplev.o, passes.o,
+ 	loop.o, loop-doloop.o, unroll.o, cfgloop.o, cfgloopanal.o,
+ 	loop-iv.o, cfgloopmanip.o, loop-init.o, loop-unswitch.o,
+ 	loop-unroll.o, ddg.o, modulo-sched.o, predict.o,
+ 	cfglayout.o, ifcvt.o): Replace cfgloop.h with CFGLOOP_H.
+ 	(toplev.o, passes.o, cfghooks.o, cfgloopmanip.o, loop-init.o,
+ 	loop-unswitch.o, loop-unroll.o, ddg.o, modulo-sched.o,
+ 	bb-reorder.o, tracer.o, cfglayout.o): Replace cfglayout.h with
+ 	CFGLAYOUT_H.
+ 	(ra.o, ra-build.o, ra-colorize.o, ra-debug.o, ra-rewrite.o):
+ 	Replace ra.h with RA_H.
+ 	(resource.o, regrename.o, insn-conditions.o, insn-emit.o,
+ 	insn-recog.o): Replace resource.h with RESOURCE_H.
+ 	(ddg.o, modulo-sched.o, haifa-sched.o, sched-deps.o, sched-rgn.o,
+ 	sched-ebb.o, sched-vis.o, out_object_file):  Replace sched-int.h
+ 	with SCHED_INT_H.
+ 	(web.o, lcm.o, df.o, ra.o, ra-build.o, ra-colorize.o, ra-debug.o,
+ 	ra-rewrite.o): Replace df.h with DF_H.
+ 	(ddg.o, modulo-sched.o): Replace ddf.h with DDG_H.
+ 	(tree-outof-ssa.o, tree-ssa-live.o, tree-ssa-copyrename.o):
+ 	Replace tree-ssa-live.h with TREE_SSA_LIVE_H.
+ 	(insn-conditions.o): Remove unused reload.h.
+ 	* cfglayout.h: Add include guard.  Include basic-block.h.
+ 	* cfgloop.h: Add include guard.  Include basic-block.h, rtl.h.
+ 	* ddg.h: Include sbitmap.h, basic-block.h, df.h.
+ 	* df.h: Add include guard.  Include bitmap.h, sbitmap.h,
+ 	basic-block.h.
+ 	* genconditions.c:  Remove reload.h.
+ 	* ra.h: Add include guard.  Include bitmap.h, sbitmap.h,
+ 	hard-reg-set.h, insn-modes.h.
+ 	* resource.h: Add include guard.  Include hard-reg-set.h.
+ 	* sched-int.h:  Add include guard.  Include insn-attr.h,
+ 	basic-block.h, rtl.h.
+ 	* target.h: Add include guard.  Include insn-modes.h.
+ 	* tree-ssa-live.h: Include partition.h.
+ 
+ 2004-06-03  Daniel Berlin  <dberlin@dberlin.org>
+ 		Kenneth Zadeck <zadeck@naturalbridge.com>
+ 
+ 	* tree-ssa-ccp.c (varying_ssa_edges): New worklist.
+ 	(add_var_to_ssa_edges_worklist): Add value argument.
+ 	Update callers.
+ 	Use new worklist.
+ 	(process_ssa_edge_worklist): New function.
+ 	(tree_ssa_ccp): Move worklist processing core to
+ 	process_ssa_edge_worklist, and just call that for the two worklists.
+ 
+ 2004-06-03  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* basic-block.c (tail_recursion_label_list): Don't declare.
+ 	(CLEANUP_PRE_SIBCALL): Remove.  Renumber the other CLEANUP_*
+ 	accordingly.
+ 	* cfgbuild.c (find_label_refs): Remove.
+ 	(find_basic_blocks_1): Don't handle CALL_PLACEHOLDER insns.
+ 	* cfgcleanup.c (tail_recursion_label_p): Remove.
+ 	(merge_blocks_move): Do not check for tail recursion.
+ 	(try_optimize_cfg): Likewise.
+ 	(cleanup_cfg): Never handle CLEANUP_PRE_SIBCALL.
+ 	* cfgrtl.c (tail_recursion_label_list): Remove.
+ 	* except.c (remove_unreachable_regions): Don't handle
+ 	CALL_PLACEHOLDER insns.
+ 	(convert_from_eh_region_ranges_1, can_throw_internal,
+ 	can_throw_external): Likewise.
+ 	* function.c (free_after_compilation): Don't clear
+ 	x_tail_recursion_label.
+ 	(fixup_var_refs_insns): Don't handle CALL_PLACEHOLDER insns.
+ 	(identify_blocks_1): Don't recurse for CALL_PLACEHOLDER insns.
+ 	(reorder_blocks_1): Likewise.
+ 	* function.h (struct function): Remove x_tail_recursion_label
+ 	member.  Don't define tail_recursion_label.
+ 	* jump.c (mark_all_labels): Don't handle CALL_PLACEHOLDER insns.
+ 	* print-rtl.c (print_rtx): Likewise.
+ 	* rtl.def (CALL_PLACEHOLDER): Remove.
+ 	* rtl.h (sibcall_use_t): Remove enum.
+ 	(optimize_sibling_and_tail_recursive_calls,
+ 	replace_call_placeholder): Remove function prototypes.
+ 	* stmt.c (tail_recursion_args): Remove.
+ 	(optimize_tail_recursion): Remove.
+ 	(expand_return): Don't check for possible tail recursion.
+ 	* tree.h (optimize_tail_recursion): Remove prototype.
+ 
+ 2004-06-02  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-cfg.c (tree_find_edge_insert_loc):  Allow inserting before
+ 	return_stmt.
+ 
+ 2004-06-02  Jason Merrill  <jason@redhat.com>
+ 
+ 	* Makefile.in (TAGS): Don't mess with c-parse.[ch].
+ 	Do include c-parse.in.
+ 
+ 2004-06-02  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* c-typeck.c (common_type): Don't lose type qualifiers
+ 	when creating new variants.
+ 
+ 2004-06-02  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR tree-optimization/14042
+ 	PR tree-optimization/14729
+ 	PR tree-optimization/14736
+ 	* tree-ssa.c (tree_ssa_useless_type_conversion_1):
+ 	Check the type which the pointer points to
+ 	instead of the pointer types.
+ 
+ 2004-06-02  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	PR tree-optimization/15738.
+ 	* builtins.c (fold_builtin_strchr): Transform
+ 	strrchr (s, '\0') to strchr (s, '\0').
+ 
+ 2004-06-02  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* i386.c (ix86_adjust_cost): Don't increase the cost for
+ 	load+operation for PROCESSOR_PENTIUMPRO, it is already
+ 	modelled in the DFA description
+ 
+ 2004-06-01  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* Makefile.in (EXPR_H): Add insn-config.h, function.h,
+ 	$(RTL_H), flags.h, $(TREE_H), $(MACHMODE_H), $(EXPR_H).
+ 	(ALIAS_H, EMIT_RTL_H): New.
+ 	(cselib.o): Replace EXPR_H with EMIT_RTL_H.
+ 	(cfgcleanup.o): Add EMIT_RTL_H.
+ 	(alias.o): Replace EXPR_H with EMIT_RTL_H and ALIAS_H.
+ 	* alias.c: Replace expr.h with emit-rtl.h and alias.h.
+ 	* attribs.c, c-lex.c, c-obj-common.c, c-semantics.c: Remove expr.h.
+ 	* cfgcleanup.c, cselib.c: Replace expr.h with emit-rtl.h.
+ 	* expr.h: Add include guard.  Include function.h, rtl.h, flags.h,
+ 	tree.h, machmode.h, insn-config.h, alias.h, emit-rtl.h.
+ 	(get_varargs_alias_set, get_frame_alias_set, record_base_value,
+ 	record_alias_subset, new_alias_set, can_address_p): Move to alias.h.
+ 	(set_mem_alias_set, set_mem_align, set_mem_expr, set_mem_offset,
+ 	set_mem_size): Move to emit-rtl.h.
+ 	* emit-rtl.h: New.
+ 	* alias.h: New.
+ 
+ 2004-06-01  Eric Botcazou  <ebotcazou@act-europe.fr>
+ 
+ 	* function.c (walk_fixup_memory_subreg): New parameter 'var'.
+ 	Call fixup_memory_subreg only if the MEM is equal to 'var'.
+ 	Adjust recursive calls to self.
+ 	(fixup_var_refs_insn): Pass 'var' to walk_fixup_memory_subreg.
+ 
+ 2004-06-01  Richard Henderson  <rth@redhat.com>
+ 	    Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* c-parse.in (OFFSETOF, offsetof_member_designator): New.
+ 	(primary): Handle offsetof.  Add error productions for faux functions.
+ 	Move component_ref objc checking to build_component_ref.
+ 	(reswords): Add offsetof.
+ 	(rid_to_yy): Add offsetof.
+ 	* c-tree.h (build_offsetof): Declare.
+ 	* c-common.h (objc_is_public): Declare.
+ 	* c-typeck.c (build_component_ref): Check objc_is_public.
+ 	(build_offsetof): New.
+ 	* stub-objc.c (objc_is_public): New.
+ 	* objc/objc-act.c, objc/objc-act.h (objc_is_public): Rename
+ 	from is_public.
+ 	* ginclude/stddef.h (offsetof): Use __builtin_offsetof.
+ 	* doc/extend.texi (Offsetof): Move from C++ section to C section
+ 	and rewrite for __builtin_offsetof.
+ 
+ 2004-06-01  Peter Barada  <peter@the-baradas.com>
+ 	    Peter Jakubek  <peter@laseranimation.com>
+ 
+ 	* config/m68k/m68k.c(m68k_output_mi_thunk):  For ColdFire, use %d0 as
+ 	a scratch to perform an add to memory.
+ 
+ 2004-06-01  Bernardo Innocenti  <bernie@develer.com>
+ 
+ 	PR target/14018
+ 	* config/m68k/m68k.c (m68k_align_loops_string, m68k_align_jumps_string,
+ 	m68k_align_funcs_string, m68k_align_loops, m68k_align_jumps,
+ 	m68k_align_funcs): Remove.
+ 	(override_options): Remove code to handle -malign-* options.
+ 	* config/m68k/m68k.h (TARGET_OPTIONS): Remove -malign-* options.
+ 	(FUNCTION_BOUNDARY, LOOP_ALIGN, LOOP_ALIGN_AFTER_BARRIER): Remove.
+ 	(m68k_align_loops_string, m68k_align_jumps_string,
+ 	m68k_align_funcs_string, m68k_align_loops, m68k_align_jumps,
+ 	m68k_align_funcs): Remove definitions.
+ 
+ 2004-06-01  Paul Eggert  <eggert@cs.ucla.edu>
+ 
+ 	PR target/15626
+ 	* doc/install.texi (sparc-sun-solaris2*): Document messages issued
+ 	by the Sun linker in conjunction with the Sun assembler.
+ 	(sparc-sun-solaris2.7): Update revision info for Sun patch 106950.
+ 
+ 2004-06-01  Jeff Law  <law@redhat.com>
+ 
+ 	* stmt.c (expand_decl): Be more selective about calling
+ 	mark_reg_pointer.
+ 
+ 2004-06-01  Nicola Pero  <nicola@brainstorm.co.uk>
+ 
+ 	PR objc/7993
+ 	* objc-act.c (is_private): Do not emit the 'instance variable %s
+ 	is declared private' error.
+ 	(is_public): Emit the error after calling is_private.
+ 	(lookup_objc_ivar): If the instance variable is private, return 0
+ 	- the instance variable is invisible here.
+ 
+ 2004-06-01  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* doc/invoke.texi (-static-libgcc): Explicitly mention
+ 	non-GNU linkers.
+ 
+ 2004-06-01  Bernardo Innocenti  <bernie@develer.com>
+ 
+ 	PR target/12968
+ 	* doc/invoke.texi: Document stack alignment side-effect of -mshort.
+ 
+ 2004-05-31  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	PR c/15749
+ 	* c-decl.c (grokdeclarator, finish_struct): Don't pedwarn for
+ 	misuses of structures with flexible array members if
+ 	in_system_header.
+ 
+ 2004-05-31  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR target/15693
+ 	* config/sparc/sparc.c (compare_operand): New predicate.
+ 	* config/sparc/sparc.h (PREDICATE_CODES): Add it.
+ 	* config/sparc/sparc.md (cmpsi expander): Use it.  If the first
+ 	operand is a ZERO_EXTRACT and the second operand is not zero,
+ 	force the former to a register.
+ 	(cmpdi expander): Likewise.
+ 
+ 2004-05-31  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* gengtype-lex.l: Catch stray GTY markers in the files gengtype
+ 	looks at.
+ 	* alias.c (alias_invariant_size): Make alias_invariant_size
+ 	static, fix GTY marker.
+ 
+ 2004-05-31  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	PR tree-optimization/15743.
+ 	* builtins.c (fold_builtin_1): Fold index() and rindex().
+ 
+ 2004-05-31  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	PR middle-end/15069
+ 	* fold-const.c (fold_single_bit_test): Only perform "(X & C) != 0"
+ 	into "X < 0" (where C is the signbit) if X's type is a full mode.
+ 
+ 2004-05-31  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	* pa.md: Disable the peephole2 patterns that generate indexed
+ 	floating-point stores when indexing is disabled.
+ 
+ 2004-05-31  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+ 
+ 	* c-pretty-print.c (pp_c_left_bracket): Make a function.
+ 	(pp_c_right_bracket): Likewise.
+ 	(pp_c_star): Likewise.
+ 	(pp_c_ampersand): Define.
+ 	* c-pretty-print.h (pp_c_left_bracket): Declare.
+ 	(pp_c_right_bracket): Likewise.
+ 	(pp_c_star): Likewise.
+ 	(pp_c_ampersand): Likewise.
+ 
+ 2004-05-31  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* config/sol2.h (__enable_execute_stack): ANSIfy function
+ 	definition.
+ 
+ 2004-05-31  Danny Smith  <dannysmith@users.sourceforge.net>
+ 
+ 	* c-incpath.c (add_path): Canonicalize paths to use '/' if
+ 	HAVE_DOS_BASED_FILESYSTEM.
+ 
+ 2004-05-31  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* tree-ssa-dom.c (record_equivalences_from_incoming_edge):
+ 	Only look at case labels if the immediate dominator is also
+ 	the only predecessor.  Don't look for more case labels if the
+ 	first seen is a case range.
+ 
+ 2004-05-31  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* builtins.c: Add a prototype for fold_builtin_strchr().
+ 
+ 2004-05-31  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	Revert this patch:
+ 	2004-05-27  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* combine.c (gen_binary): Remove.
+ 	(known_cond, simplify_shift_const
+ 	find_split_point, combine_simplify_rtx,
+ 	simplify_if_then_else, simplify_set,
+ 	simplify_logical, expand_field_assignment,
+ 	extract_left_shift, force_to_mode,
+ 	if_then_else_cond, apply_distributive_law,
+ 	simplify_and_const_int, simplify_shift_const,
+ 	gen_lowpart_for_combine, simplify_comparison,
+ 	reversed_comparison): Replace with
+ 	simplify_gen_binary, simplify_gen_relational or
+ 	distribute_and_simplify_rtx.
+ 	(distribute_and_simplify_rtx): New function.
+ 
+ 2004-05-30  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	* pa.c (emit_move_sequence): Fix loading of non 14-bit CONST operands
+ 	when generating PIC code.
+ 
+ 2004-05-30  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* c-decl.c (c_expand_body_1): Remove and fold back into ...
+ 	(c_expand_body): here.
+ 	(c_expand_decl): Move to ...
+ 	* c-common.c (c_expand_decl): Here and remove check for nested
+ 	functions.
+ 	* c-common.h (c_expand_decl): Add prototype.
+ 	* c-tree.h (c_expand_decl): Remove.
+ 
+ 2004-05-30  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* fold-const.c (combine_comparisons, optimize_bit_field_compare,
+ 	range_binop, fold_truthop, fold_binary_op_with_conditional_arg,
+ 	fold_mathfn_compare, fold_inf_compare, fold,
+ 	fold_relational_hi_lo, nondestructive_fold_binary_to_constant):
+ 	Use constant_boolean_node where appropriate.  Don't bother using
+ 	fold_convert on the second argument to omit_one_operand.
+ 
+ 2004-05-30  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* doc/c-tree.texi (Expressions): Document FLOOR_DIV_EXPR,
+ 	CEIL_DIV_EXPR, ROUND_DIV_EXPR, FLOOR_MOD_EXPR, CEIL_MOD_EXPR,
+ 	ROUND_MOD_EXPR, EXACT_DIV_EXPR.  Improve documentation of
+ 	TRUNC_DIV_EXPR, TRUNC_MOD_EXPR and comparison operations.
+ 	Add missing (but documented) tree nodes to the index.
+ 
+ 2004-05-30  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	PR tree-optimization/14819
+ 	* builtins.c (fold_builtin_strchr): New.
+ 	(fold_builtin_1): Handle BUILT_IN_STRCHR and BUILT_IN_STRRCHR
+ 	with fold_builtin_strchr().
+ 
+ 2004-05-30  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* bb-reorder.c, builtins.c, c-common.c, c-gimplify.c,
+ 	c-incpath.c, cgraphunit.c, ddg.c, defaults.h, dwarf2out.c,
+ 	expmed.c, flags.h, gcc.c, gensupport.c, gimplify.c, global.c,
+ 	passes.c, reg-stack.c, target.h, toplev.c, tree-alias-ander.c,
+ 	tree-alias-common.c, tree-cfg.c, tree-complex.c, tree-dfa.c,
+ 	tree-eh.c, tree-mudflap.c, tree-mudflap.h, tree-outof-ssa.c,
+ 	tree-phinodes.c, tree-pretty-print.c, tree-ssa-alias.c,
+ 	tree-ssa-ccp.c, tree-ssa-live.c, tree-ssa-live.h,
+ 	tree-ssa-pre.c, tree.h, value-prof.h, varasm.c: Fix comment
+ 	formatting.
+ 
+ 2004-05-30  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* gimplify.c (sort_case_labels): New.  Split out from...
+ 	(gimplify_switch_expr): ...here.  Use it.
+ 	* tree-eh.c (lower_try_finally_switch): Sort the labels of
+ 	the SWITCH_EXPR created here before leaving the function.
+ 	* tree.c (sort_case_labels): Add prototype.
+ 
+ 2004-05-30  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* fold-const.c (fold) [case TRUTH_NOT_EXPR]: Make sure the type is
+ 	of BOOLEAN_TYPE.
+ 
+ 2004-05-30  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* c-common.c, calls.c, cfgcleanup.c, cgraph.c, cgraphunit.c,
+ 	ddg.c, ddg.h, df.c, df.h, except.c, expr.c, flags.h,
+ 	fold-const.c, gcc.c, gimplify.c, haifa-sched.c,
+ 	modulo-sched.c, tree-inline.c, tree-into-ssa.c, tree-nested.c,
+ 	tree-nrv.c, tree-ssa-ccp.c, tree-ssa-dom.c, tree-ssa-live.c,
+ 	tree-ssa-loop.c, tree-ssa-pre.c, tree-tailcall.c, tree.h: Fix
+ 	comment typos.  Follow spelling conventions.
+ 
+ 2004-05-29  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* gengtype-yacc.y: Add NESTED_PTR token.
+ 	(option): Record `nested_ptr' option.
+ 	* gengtype-lex.l: Handle `nested_ptr' keyword.
+ 	* gengtype.c (walk_type): Process `nested_ptr' option.
+ 	* gengtype.h (struct nested_ptr_data): New.
+ 	* doc/gty.texi (GTY Options): Document `nested_ptr' option.
+ 	* stringpool.c (struct string_pool_data): Make 'entries' point to
+ 	ht_identifier instead of tree.
+ 	(gt_pch_save_stringpool): Don't adjust pointers.
+ 	(gt_pch_restore_stringpool): Call ht_load.
+ 
+ 2004-05-29  Jason Merrill  <jason@redhat.com>
+ 
+ 	* gimplify.c (gimplify_expr): Don't build a statement list
+ 	if no gimplification was necessary.
+ 
+ 2004-05-29  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* pretty-print.c (pp_base_format_text): Support %< instead of %`
+ 	and %> as well as %'.
+ 	* c-format.c: Use %< and %>.
+ 	(gcc_diag_char_table, gcc_cdiag_char_table,
+ 	gcc_cxxdiag_char_table): Update.
+ 
+ 2004-05-29  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-typeck.c (common_type): Correct comment.
+ 
+ 2004-05-29  Peter Barada  <peter@the-baradas.com>
+ 
+ 	* config/m68k/m68k.c (CONST_METHOD): Add MVZ, MVS.
+ 	* config/m68k/m68k.c (const_method): Likewise.
+ 	* config/m68k/m68k.c (const_int_cost): Likewise.
+ 	* config/m68k/m68k.c (const_int_cost): Likewise.
+ 	* config/m68k/m68k.c (output_move_const_into_data_reg): Likewise.
+ 
+ 2004-05-29  Peter Barada  <peter@the-baradas.com>
+ 
+ 	* config/m68k/m68k.h (EXTRA_CONSTRAINT): add 'U' for register offset
+ 	addressing.
+ 	* config/m68k/m68k.md: Add 'U,U' alternative to ColdFire variants of
+ 	movsi,movhi,movqi insn patterns.
+ 
+ 2004-05-28  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* c-semantics.c (emit_local_var): Remove code for DECL_INITIAL.
+ 
+ 	PR target/15720
+ 	* config/darwin.c (machopic_indirect_call_target): Copy
+ 	the SYMBOL_REF_DECL from the original RTX for the new
+ 	stub RTX.
+ 
+ 2004-05-28  DJ Delorie  <dj@redhat.com>
+ 
+ 	* stor-layout.c (place_field): Revert erroneous commit.
+ 
+ 2004-05-28  Ziemowit Laski  <zlaski@apple.com>
+ 
+ 	* config/rs6000/altivec.h (vec_ctf, vec_vcfsx, vec_vcfux, vec_cts,
+ 	vec_ctu, vec_dss, vec_dst, vec_dstst, vec_dststt, vec_dstt, vec_ld,
+ 	vec_ldl, vec_lvsl, vec_lvsr, vec_sld, vec_splat, vec_vspltw,
+ 	vec_vsplth, vec_vspltb, vec_splat_s8, vec_splat_s16, vec_splat_s32,
+ 	vec_splat_u8, vec_splat_u16, vec_splat_u32, vec_st, vec_stl,
+ 	vec_ste): Remove type checks for integral parameters and literals
+ 	from '..._args_eq' macros.
+ 
+ 2004-05-28  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* c-common.c (fname_as_string): Fix xcalloc to xmalloc.
+ 
+ 2004-05-28  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* testsuite/g++.dg/charset/function.cc: New.
+ 
+ 	* testsuite/gcc.dg/charset/function.c: New.
+ 
+ 	* c-decl.c (c_make_fname_decl): Free return value from
+ 	fname_as_string.
+ 
+ 	* cp/decl.c (cp_make_fname_decl): Free return value from
+ 	fname_as_string.
+ 
+ 	* c-common.c (fname_as_string): Translate if necessary.
+ 
+ 2004-05-28  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* stringpool.c: Add comments to PCH saving/restoring routines.
+ 
+ 2004-05-28  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* c-common.c (c_estimate_num_insns_1): Kill.
+ 	(c_estimate_num_insns): Kill.
+ 	* c-common.h (c_estimate_num_insns): Kill.
+ 
+ 	* gthr-posix.h: Check for _POSIX_PRIORITY_SCHEDULING
+ 	when checking for _POSIX_THREAD_PRIORITY_SCHEDULING.
+ 	Remove comment about not checking for
+ 	_POSIX_PRIORITY_SCHEDULING.
+ 	* gthr-posix.c: Likewise.
+ 
+ 2004-05-28  Paolo Bonzini  <bonzini@gnu.org>
+ 	    Roger Sayle  <roger@eyesopen.com>
+ 
+ 	PR rtl-optimization/15649
+ 	Add LTGT_EXPR and improve pretty-printing of unordered
+ 	comparisons.
+ 	* c-common.c (c_common_truthvalue_conversion):
+ 	Handle LTGT_EXPR.
+ 	* c-typeck.c (build_binary_op): Likewise.
+ 	* dojump.c (do_jump): Likewise.
+ 	* expr.c (expand_expr_real_1, do_store_flag): Likewise.
+ 	* predict.c (tree_predict_by_opcode): Likewise.
+ 	* real.c (real_compare): Likewise.
+ 	* tree-cfg.c (verify_expr): Likewise.
+ 	* tree-inline.c (estimate_num_insns_1): Likewise.
+ 	* tree-pretty-print.c (dump_generic_node): Likewise.
+ 	Handle ORDERED_EXPR, UNORDERED_EXPR.
+ 	(op_symbol): Print unordered comparisons differently
+ 	than ordered ones.
+ 	* tree.def (LTGT_EXPR): New '<' tree code.
+ 	* doc/c-tree.texi (Expressions): Document floating-point
+ 	comparison nodes.
+ 
+ 	Fold comparisons between floating point values.
+ 	* fold-const.c (enum comparison_code): New, from
+ 	#define'd constants.  Define compcodes for unordered
+ 	comparisons and for invalid transformations.
+ 	(invert_tree_comparison): Add "honor_nans" parameter.
+ 	(fold_truthop): Revamp to work on floating-point types too.
+ 	(comparison_to_compcode): Support unordered comparisons.
+ 	Use new enum comparison_code.
+ 	(compcode_to_comparison): Likewise.
+ 	(combine_compcodes): New function.
+ 	(invert_truthvalue): Let invert_tree_comparison decide
+ 	whether it is valid to fold the comparison.  Fold ORDERED
+ 	and UNORDERED even if flag_unsafe_math_optimizations is off,
+ 	and the remaining even if flag_unsafe_math_optimizations
+ 	is off but we are under -fno-trapping-math.
+ 	(fold_relational_const): Integer modes do not honor NaNs.
+ 
+ 2004-05-28  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/arm.c (arm_output_epilogue): Remove redundant code.
+ 
+ 2004-05-28  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/arm.c (thumb_force_lr_save): New function.
+ 	(arm_get_frame_offsets, thumb_unexpanded_epilogue,
+ 	thumb_output_function_prologue): Use it.
+ 	(thumb_expand_prologue): Set lr_save_eliminated.
+ 
+ 2004-05-28  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.md (extendsidi2): Tie the source and destination
+ 	of the register alternative.  Split it into nothing.
+ 
+ 2004-05-28  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* rtl.h (skip_consecutive_labels): Declare.
+ 	* emit-rtl.c (skip_consecutive_labels): New function.
+ 	* reorg.c (relax_delay_slots, dbr_schedule): Use it.
+ 	* jump.c (follow_jumps): Say what null return values mean.
+ 
+ 2004-05-28  Kaz Kojima  <kkojima@gcc.gnu.org>
+ 
+ 	PR target/13250
+ 	* config/sh/sh.md (rotlsi3): Use emit_move_insn.
+ 
+ 2004-05-27  Kaz Kojima  <kkojima@gcc.gnu.org>
+ 
+ 	* config/sh/t-linux (SHLIB_MAPFILES): Use sh specific
+ 	libgcc-std.ver.
+ 	* config/sh/libgcc-std.ver: New file.
+ 
+ 2004-05-27  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* except.c: Revert change of 2004-05-26.
+ 	* config/i386/i386.md: Revert change of 2004-05-27.
+ 
+ 2004-05-27  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* configure.ac: Remove --enable-tree-browser option.
+ 	Define TREEBROWSER when ac_tree_checking is defined.
+ 	* configure: Rebuilt.
+ 
+ 2004-05-27  Olivier Hainque  <hainque@act-europe.fr>
+ 
+ 	* expr.c (store_constructor): Restore sanity check on
+ 	the size of the type before clearing.
+ 
+ 2004-05-27  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* cfgbuild.c (control_flow_insn_p):  Notice noreturn call
+ 
+ 2004-05-27  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* combine.c (gen_binary): Remove.
+ 	(known_cond, simplify_shift_const
+ 	find_split_point, combine_simplify_rtx,
+ 	simplify_if_then_else, simplify_set,
+ 	simplify_logical, expand_field_assignment,
+ 	extract_left_shift, force_to_mode,
+ 	if_then_else_cond, apply_distributive_law,
+ 	simplify_and_const_int, simplify_shift_const,
+ 	gen_lowpart_for_combine, simplify_comparison,
+ 	reversed_comparison): Replace with
+ 	simplify_gen_binary, simplify_gen_relational or
+ 	distribute_and_simplify_rtx.
+ 	(distribute_and_simplify_rtx): New function.
+ 	* simplify-rtx.c (simplify_binary_operation):
+ 	Use nonzero_bits to simplify ANDs where we are
+ 	turning off bits already known to be off in OP0.
+ 
+ 2004-05-27  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	PR target/14478
+ 	* config/rs6000/rs6000.c (reg_or_neg_short_operand): Don't allow zero.
+ 
+ 2004-05-27  Josef Zlomek  <zlomekj@suse.cz>
+ 
+ 	PR middle-end/14084
+ 	* emit-rtl.c (gen_rtx_REG_offset): Adjust the offset according
+ 	to size of decl.
+ 
+ 2004-05-26  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	PR/14924
+ 	* config/rs6000/rs6000.c (spe_expand_stv_builtin): New.
+ 
+ 2004-05-26  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* tree.h: Fix comment typo.
+ 
+ 2004-05-27  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* gimplify.c (compare_case_labels): New function.
+ 	(gimplify_switch_expr): Sort case labels, and make sure the
+ 	last label in the label vector is the default case.
+ 	* tree-cfg.c (group_case_labels): New function.
+ 	(build_tree_cfg): Cleanup redundant labels and group case labels
+ 	before creating edges.
+ 	(cleanup_dead_labels): Handle GOTO_EXPRs.
+ 	(find_case_label_for_value): Use a binary search to find the
+ 	case label for the given value.
+ 	* tree-gimple.c: Mention that labels are sorted, and that the
+ 	last label must be the default.
+ 
+ 2004-05-27  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* cfgcleanup.c (try_optimize_cfg): Do not merge across jumptables.
+ 
+ 2004-05-27  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* i386.md (UNSPECV_EH_RETURN): Kill.
+ 	(eh_return): Use jump_insn.
+ 	(eh_return_si, eh_return_di): Change pattern to jump instruction.
+ 
+ 2004-05-26  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* cfgcleanup.c (try_forward_edges):  Do not check loop structure when
+ 	not loop optimizing.
+ 
+ 2004-05-26  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* except.c (can_throw_internal):  Notice RESX instructions.
+ 
+ 2004-05-26  Eric Botcazou  <ebotcazou@act-europe.fr>
+ 
+ 	* varasm.c (output_constant) <INTEGER_TYPE>: Pass the minimum
+ 	of the two sizes to assemble_integer.
+ 
+ 2004-05-25  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/arm.c (thumb_exit, thumb_unexpanded_epilogue): Remove
+ 	pointless #ifdef.
+ 
+ 2004-04-25  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* Makefile.in (top_builddir): Define to .
+ 
+ 2004-05-25  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	* configure.ac (gcc_cv_ld): Prefer in-tree ld over whatever the
+ 	top-level detects, except when in-tree ld is being cross-built.
+ 	(gcc_cv_as): Likewise for as.  Use AS_FOR_TARGET otherwise, and
+ 	then AS only if target is host.
+ 	* configure: Rebuilt.
+ 
+ 2004-05-25  Vladimir Makarov  <vmakarov@redhat.com>
+ 
+ 	* global.c (global_alloc): Call make_accurate_live_analysis.
+ 	(record_one_conflict): Remove dead code.
+ 	(mark_reg_clobber): Remove ATTRIBUTE_UNUSED for parameter data.
+ 	(bb_info): New structure.
+ 	(BB_INFO, BB_INFO_BY_INDEX): New macros.
+ 	(allocate_bb_info, free_bb_info, mark_reg_change,
+ 	calculate_local_reg_bb_info, set_up_bb_rts_numbers, rpost_cmp,
+ 	modify_bb_reg_pav, calculate_reg_pav,
+ 	make_accurate_live_analysis): New functions.
+ 
+ 2004-05-25  Devang Patel  <dpatel@apple.com>
+ 
+ 	* alias.c (init_alias_analysis): Use ggc_calloc instead of
+ 	xrealloc.
+ 	(end_alias_analysis): Use ggc_free instead fo free.
+ 
+ 2004-05-25  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR target/15546
+ 	* config/ia64/ia64.h (ASM_OUTPUT_FDESC): Mark the DECL
+ 	as needed to be outputted.
+ 
+ 2004-05-25  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* builtins.def (__builtin_expect):  Mark the function as const&nothrow.
+ 
+ 2004-05-25  Ayal Zaks  <zaks@il.ibm.com>
+ 	Mostafa Hagog  <mustafa@il.ibm.com>
+ 
+ 	* Makefile.in (modulo-sched.o, ddg.o): New.
+ 	* ddg.h, ddg.c, modulo-sched.c: New files.
+ 	* cfglayout.c (duplicate_insn_chain): Remove "static" and push
+ 	internals to "dupicate_insn".
+ 	(duplicate_insn): New function.
+ 	* cfglayout.h (duplicate_insn_chain, duplicate_insn): New
+ 	declarations.
+ 	* common.opt (fmodulo-sched): New flag.
+ 	* df.c (df_bb_regno_last_use_find, df_bb_regno_first_def_find):
+ 	Remove static and forward declaration.
+ 	(df_find_def, df_reg_used, df_bb_regno_last_def_find): New
+ 	functions.
+ 	* df.h (df_bb_regno_last_use_find, df_bb_regno_first_def_find,
+ 	df_bb_regno_last_def_find, df_find_def, df_reg_used): New
+ 	declarations.
+ 	* flags.h (flag_modulo_sched): New flag.
+ 	* opts.c (common_handle_option): Handle modulo-sched flag.
+ 	* params.def (max-sms-loop-number, sms-max-ii-factor,
+ 	sms-dfa-history, sms-loop-average-count-threshold): New
+ 	parameters.
+ 	* params.h (MAX_SMS_LOOP_NUMBER, SMS_MAX_II_FACTOR,
+ 	SMS_DFA_HISTORY, SMS_LOOP_AVERAGE_COUNT_THRESHOLD): New
+ 	parameters.
+ 	* passes.c ("sms", "sms-vcg"): New dumps.
+ 	(rest_of_handle_sched): Call sms_schedule.
+ 	* rtl.h (sms_schedule): New declaration.
+ 	* timevar.def (TV_SMS): New.
+ 	* toplev.c (flag_modulo_sched): Initialize.
+ 	(f_options): Handle -fmodulo-sched option.
+ 	* docs/invoke.texi: Document -fmodulo-sched & -dm options.
+ 	* docs/passes.texi: Document new SMS pass.
+ 
+ 2004-05-25  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* Makefile.in (OBJS): Add rtlhooks.o.
+ 	(rtlanal.o): Depend on function.h.
+ 	(cse.o): Depend on rtlhooks-def.h.
+ 	(combine.o): Depend on rtlhooks-def.h.
+ 	(rtlhooks.o): New rule.
+ 	* combine.c: Include rtlhooks-def.h.
+ 	(nonzero_bits, cached_nonzero_bits, nonzero_bits1,
+ 	num_sign_bit_copies, cached_num_sign_bit_copies,
+ 	num_sign_bit_copies1): Move most of the code to rtlanal.c.
+ 	(reg_nonzero_bits_for_combine,
+ 	reg_num_sign_bit_copies_for_combine): New functions holding
+ 	the remnants of the above.
+ 	(combine_rtl_hooks): New.
+ 	(combine_instructions): Set rtl_hooks instead of gen_lowpart.
+ 	* cse.c: Include rtlhooks-def.h.
+ 	(cse_rtl_hooks): New.
+ 	(cse_main): Set rtl_hooks instead of gen_lowpart.
+ 	* emit-rtl.c (gen_lowpart): Remove.
+ 	(gen_lowpart_general): Move to rtlhooks.c.
+ 	* rtl.h (nonzero_bits, num_sign_bit_copies,
+ 	struct rtl_hooks, rtl_hooks, general_rtl_hooks): New.
+ 	(gen_lowpart_general): Remove.
+ 	(gen_lowpart): Temporarily redefine as a macro.
+ 	* rtlanal.c: Include function.h.
+ 	(nonzero_bits, cached_nonzero_bits, nonzero_bits1,
+ 	num_sign_bit_copies, cached_num_sign_bit_copies,
+ 	num_sign_bit_copies1): New, from combine.c.
+ 	* rtlhooks.c: New file.
+ 	* rtlhooks-def.h: New file.
+ 
+ 2004-05-25  Svein E. Seldal  <Svein.Seldal@solidas.com>
+ 
+ 	* config/avr/avr.h (LONG_LONG_TYPE_SIZE): Changed long long type
+ 	to support 32-bit -mint8 mode.
+ 
+ 	* doc/invoke.texi (-mint8): Added documentation for the -mint8
+ 	option in the AVR architecture.
+ 
+ 2004-05-24  Mike Stump  <mrs@apple.com>
+ 
+ 	* doc/install.texi: Document that dejagnu 1.4.4 is required.
+ 
+ 2004-05-24  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* intl.h (open_quote, close_quote): New.
+ 	* intl.c (open_quote, close_quote): New.
+ 	(gcc_init_libintl): Set them.
+ 	* pretty-print.c: Include "intl.h".
+ 	(pp_base_format_text): Support 'q' format flag and %` and %'
+ 	formats.  Use ' instead of ` in comments.
+ 	* c-format.c (gcc_diag_flag_specs, gcc_cxxdiag_flag_specs,
+ 	gcc_diag_char_table, gcc_cdiag_char_table, gcc_cxxdiag_char_table,
+ 	foramt_types_orig): Describe these new formats.
+ 	(decode_format_attr, check_function_format,
+ 	check_format_info_main): Use these new formats.
+ 	(status_warning): Use ATTRIBUTE_GCC_DIAG.
+ 	* toplev.c (ATTRIBUTE_GCC_DIAG): Increase required GCC version to
+ 	check these formats to 3.5.
+ 
+ 2004-05-24  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+ 
+ 	* Makefile.in (CPPLIBS): Renamed to CPPLIB.
+ 	(BACKEND): Reflect this.
+ 	(LIBDEPS): Move CPPLIB before LIBIBERTY.
+ 	(LIBS): Likewise.
+ 
+ 2004-05-24  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	PR tree-optimization/14197
+ 	* builtins.c: Include "tree-gimple.h"
+ 	(readonly_data_expr): Use get_base_address.  Make sure to call
+ 	decl_readonly_section only on trees it can handle.
+ 	* tree-gimple.c (get_base_address): Accept STRING_CST and
+ 	CONSTRUCTOR expressions.
+ 	* Makefile.in: Update dependencies.
+ 
+ 2004-05-23  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	Move libcpp to the toplevel.
+ 	* Makefile.in: Remove references to libcpp files,
+ 	use CPPLIBS instead of libcpp.a.  Define SYMTAB_H
+ 	and change hashtable.h to that.
+ 	* aclocal.m4 (gcc_AC_HEADER_STDBOOL,
+ 	gcc_AC_HEADER_STRING, gcc_AC_C__BOOL): Remove.
+ 	* configure.ac (gcc_AC_C__BOOL, HAVE_UCHAR): Remove tests.
+ 	* configure: Regenerate.
+ 	* config.in: Regenerate.
+ 	* c-ppoutput.c: Include ../libcpp/internal.h instead of cpphash.h.
+ 	* cppcharset.c: Removed.
+ 	* cpperror.c: Removed.
+ 	* cppexp.c: Removed.
+ 	* cppfiles.c: Removed.
+ 	* cpphash.c: Removed.
+ 	* cpphash.h: Removed.
+ 	* cppinit.c: Removed.
+ 	* cpplex.c: Removed.
+ 	* cpplib.c: Removed.
+ 	* cpplib.h: Removed.
+ 	* cppmacro.c: Removed.
+ 	* cpppch.c: Removed.
+ 	* cpptrad.c: Removed.
+ 	* cppucnid.h: Removed.
+ 	* cppucnid.pl: Removed.
+ 	* cppucnid.tab: Removed.
+ 	* hashtable.c: Removed.
+ 	* hashtable.h: Removed.
+ 	* line-map.c: Removed.
+ 	* line-map.h: Removed.
+ 	* mkdeps.c: Removed.
+ 	* mkdeps.h: Removed.
+ 	* stringpool.h: Include symtab.h instead of hashtable.h.
+ 	* tree.h: Include symtab.h instead of hashtable.h.
+ 	* system.h (O_NONBLOCK, O_NOCTTY): Do not define.
+ 
+ 2004-05-23 Paolo Bonzini <bonzini@gnu.org>
+ 
+ 	* gcc.c (struct prefix_list): Add forward declaration.
+ 	(do_spec_path): New function, extracted from...
+ 	(do_spec_1) <'D'>: ... here.  Drop support for
+ 	SPACE_AFTER_L_OPTION.
+ 	(do_spec_1) <'I'>: Use do_spec_path.
+ 	(process_command): Do not store the 'include' suffix
+ 	in include_prefixes.
+ 	* system.h: Poison SPACE_AFTER_L_OPTION.
+ 
+ 2002-05-23  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* fold-const.c (non_lvalue): Explicitly list the tree codes that
+ 	need to be wrapped by NON_LVALUE_EXPR, instead of those that don't.
+ 
+ 2004-05-23  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* doc/gcc.texi, doc/gccint.texi, doc/include/gcc-common.texi:
+ 	Update based on printed manual.  Enable setting of offsets for
+ 	FSFPRINT and move it to gcc-common.texi.
+ 	* doc/gcc.texi: Update FSF printing details.
+ 	* doc/gccint.texi: Remove FSF printing details.
+ 
+ 2004-05-23  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* config/rs6000/t-rs6000: Remove the disabling -Werror.
+ 
+ 2004-05-22  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* builtins.c (expand_builtin_strstr, expand_builtin_strchr,
+ 	expand_builtin_strrchr, expand_builtin_strpbrk,
+ 	expand_builtin_mempcpy, expand_builtin_memcmp,
+ 	expand_builtin_strcmp, expand_builtin_strncmp,
+ 	expand_builtin_strcat, std_expand_builtin_va_start,
+ 	std_expand_builtin_va_arg, expand_builtin_va_copy,
+ 	expand_builtin_signbit, fold_builtin_cabs,
+ 	fold_builtin_logarithm, fold_builtin_mempcpy,
+ 	fold_builtin_signbit, fold_builtin_isascii,
+ 	fold_builtin_toascii, fold_builtin_isdigit,
+ 	fold_builtin_1, build_function_call_expr,
+ 	simplify_builtin_strchr, simplify_builtin_strrchr,
+ 	simplify_builtin_strpbrk, simplify_builtin_strncpy,
+ 	simplify_builtin_memcmp, simplify_builtin_strcmp,
+ 	simplify_builtin_strncmp, simplify_builtin_strncat,
+ 	simplify_builtin_strspn, simplify_builtin_strcspn,
+ 	simplify_builtin_fputs, simplify_builtin_sprintf): Replace calls
+ 	to build with calls to build2, build3 or omit_one_operand.
+ 
+ 2004-05-22  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.c (mips_file_start): Emit a .gcc_compiled_longXX
+ 	section when generating EABI code.
+ 
+ 2004-05-22  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR 15546
+ 	* config/i386/i386.c (output_pic_addr_const <case SYMBOL_REF>):
+ 	Call mark_decl_referenced on the SYMBOL_REF_DECL.
+ 
+ 2004-05-22  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* c-common.c (c_common_truthvalue_conversion): Handle
+ 	UNEQ_EXPR, UNLE_EXPR, UNGE_EXPR, UNLT_EXPR, UNGT_EXPR,
+ 	ORDERED_EXPR, and UNORDERED_EXPR as comparison operators,
+ 	i.e. set the type to truthvalue_type_node and return.
+ 
+ 2004-05-22  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* tree.h (struct tree_decl): Add possibly_inlined bit.
+ 	(DECL_POSSIBLY_INLINED): New accessor macro.
+ 	* cgraph.h: Remove declaration of cgraph_inline_hash.
+ 	* cgraph.c: Remove definition of cgraph_inline_hash.
+ 	(hash_node): Revert to hashing DECL_UID.
+ 	(eq_node): Take two pointers to cgraph_node structures.
+ 	Compare DECL_UIDs.
+ 	(cgraph_remove_node): Pass the node directly to htab_find_slot.
+ 	(cgraph_varpool_hash_node): Rename hash_varpool_node;
+ 	hash on DECL_UID.
+ 	(eq_cgraph_varpool_node): Rename eq_varpool_node; take two
+ 	pointers to cgraph_varpool_node structures; compare DECL_UIDs.
+ 	(cgraph_node): Allocate a temporary node on the stack, fill in
+ 	its DECL field, and pass that to htab_find_slot.
+ 	(cgraph_varpool_node): Likewise.
+ 	(cgraph_function_possibly_inlined_p): If global info is ready,
+ 	return the DECL_POSSIBLY_INLINED bit.
+ 	* cgraphunit.c (cgraph_mark_inline_edge): Set DECL_POSSIBLY_INLINED
+ 	instead of mucking with cgraph_inline_hash.
+ 
+ 2004-05-22  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* doc/contrib.texi: Add g77 contributors.
+ 
+ 2004-05-22  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* calls.c (initialize_argument_information): Forbid sibcalls if a
+ 	callee-copied argument is stored in the current function's frame.
+ 
+ 2004-05-22  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* fix-header.c (read_scan_file): Update for add_path change.
+ 
+ 2004-05-22  Ben Elliston  <bje@au.ibm.com>
+ 
+ 	* c.opt (Wmissing-include-dirs): New.
+ 	* c-opts.c (c_common_handle_option): Pass true for user_supplied_p
+ 	to add_path () for -I, but false for OPT_idirafter, OPT_iquote and
+ 	OPT_isystem. Handle case OPT_Wmissing_include_dirs.
+ 	* c-incpath.h (add_path): Add fourth (bool) argument.
+ 	* c-incpath.c (add_env_var_paths): Pass false to add_path ().
+ 	(add_standard_paths): Likewise.
+ 	(remove_duplicates) [REASON_NOENT]: Warn if -Wmissing-include-dirs
+ 	is used and the directory was user-supplied via -I.
+ 	(add_path): Set p->user_supplied_p.  Remove duplicated code by
+ 	using add_cpp_dir_path ().
+ 	* cpplib.h (struct cpp_options): Add warn_missing_include_dirs.
+ 	(struct cpp_dir): Add user_supplied_p.
+ 	* doc/invoke.texi (Warning Options): Document new option.
+ 
+ 2004-05-21  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* fold-const.c (fold_read_from_constant_string): Convert result to
+ 	requested type.
+ 
+ 2004-05-21  Richard Henderson  <rth@redhat.com>
+ 
+ 	* gimplify.c (mostly_copy_tree_r): Don't attempt to copy decls.
+ 	(copy_if_shared_r): Don't copy decls, types, constants, BINDs.
+ 	Don't mark VA_ARG_EXPRs volatile here.
+ 	(gimplify_modify_expr): Unshare TYPE_SIZE_UNIT.
+ 
+ 2004-05-21  Richard Henderson  <rth@redhat.com>
+ 
+ 	* Makefile.in (tree-dump.o): Depend on tree-iterator.h.
+ 	* tree-dump.c (dequeue_and_dump): Dump STATEMENT_LISTs.
+ 
+ 2004-05-21  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* fold-const.c (fold, fold_relational_hi_lo,
+ 	nondestructive_fold_binary_to_constant,
+ 	fold_read_from_constant_string): Use fold_convert instead of convert.
+ 	* builtins.c (simplify_builtin, simplify_builtin_strstr,
+ 	simplify_builtin_strchr, simplify_builtin_strrchr,
+ 	simplify_builtin_strpbrk): Use fold_convert instead of convert.
+ 
+ 2004-05-21  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-flow-inline.h (num_immediate_uses): Don't abort if DF
+ 	is NULL.
+ 
+ 2004-05-21  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* config/sparc/linux64.h (OPTION_DEFAULT_SPECS): If SPARC_BI_ARCH,
+ 	override sparc.h definition.
+ 
+ 2004-05-20  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* tree.c (array_type_nelts, save_expr, substitute_in_expr,
+ 	get_unwidened, get_narrower): Replace build with build2.
+ 	* fold-const.c (negate_expr, associate_trees, size_binop,
+ 	fold_convert, eval_subst, omit_one_operand, invert_truthvalue,
+ 	pedantic_omit_one_operand, distribute_bit_expr,
+ 	make_bit_field_ref, optimize_bit_field_compare,
+ 	decode_field_reference, range_binop, make_range,
+ 	build_range_check, fold_range_test, fold_truthop,
+ 	optimize_minmax_comparison, extract_muldiv_1,
+ 	fold_binary_op_with_conditional_arg, fold_mathfn_compare,
+ 	fold_inf_compare, fold_single_bit_test, fold,
+ 	fold_relational_hi_lo, nondestructive_fold_binary_to_constant):
+ 	Likewise replace build with either build2 or build3.
+ 
+ 2004-05-20  Ian Lance Taylor  <ian@wasabisystems.com>
+ 
+ 	* system.h: Poison NO_RECURSIVE_FUNCTION_CSE.
+ 	* calls.c (prepare_call_address): Don't test
+ 	NO_RECURSIVE_FUNCTION_CSE.
+ 	* config/arc/arc.h (NO_RECURSIVE_FUNCTION_CSE): Don't define.
+ 	* config/arm/arm.h (NO_RECURSIVE_FUNCTION_CSE): Likewise.
+ 	* config/avr/avr.h (NO_RECURSIVE_FUNCTION_CSE): Likewise.
+ 	* config/frv/frv.h (NO_RECURSIVE_FUNCTION_CSE): Likewise.
+ 	* config/i386/i386.h (NO_RECURSIVE_FUNCTION_CSE): Likewise.
+ 	* config/ip2k/ip2k.h (NO_RECURSIVE_FUNCTION_CSE): Likewise.
+ 	* config/iq2000/iq2000.h (NO_RECURSIVE_FUNCTION_CSE): Likewise.
+ 	* config/m32r/m32r.h (NO_RECURSIVE_FUNCTION_CSE): Likewise.
+ 	* config/m68k/m68k.h (NO_RECURSIVE_FUNCTION_CSE): Likewise.
+ 	* config/mcore/mcore.h (NO_RECURSIVE_FUNCTION_CSE): Likewise.
+ 	* config/mips/mips.h (NO_RECURSIVE_FUNCTION_CSE): Likewise.
+ 	* config/stormy16/stormy16.h (NO_RECURSIVE_FUNCTION_CSE):
+ 	Likewise.
+ 	* config/xtensa/xtensa.h (NO_RECURSIVE_FUNCTION_CSE): Likewise.
+ 	* config/sh/sh.h: Remove NO_RECURSIVE_FUNCTION_CSE comment.
+ 	* doc/tm.texi (Costs): Remove documentation for
+ 	NO_RECURSIVE_FUNCTION_CSE.
+ 
+ 2004-05-20  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* unwind-dw2-fde.c (get_cie_encoding): Handle dwarf3 CIE format.
+ 	* unwind-dw2.c (extract_cie_info): Ditto.
+ 	(_Unwind_FrameState): Change retaddr_column to word type.
+ 
+ 2004-05-20  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	PR middle-end/3074
+ 	* fold-const.c (strip_compound_expr): Delete function.
+ 	(count_cond): Delete function.
+ 	(fold_binary_op_with_conditional_arg): Only perform transformations
+ 	"a + (b?c:d) -> b ? a+c : a+d" and "(b?c:d) + a -> b ? c+a : d+a"
+ 	when a is constant.  This greatly simplifies this routine.
+ 
+ 	* tree.c (saved_expr_p): Delete function.
+ 	* tree.h (saved_expr_p): Delete function prototype.
+ 
+ 2004-05-20  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* common.opt (ftree-loop-optimize): Remove.
+ 
+ 2004-05-20  Daniel Jacobowitz  <dan@debian.org>
+ 
+ 	* Makefile.in (AR_FOR_TARGET, RANLIB_FOR_TARGET)
+ 	(NM_FOR_TARGET): Use := and $(shell).
+ 	(mainversion): Remove unused variable.
+ 
+ 2004-05-20  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	* reorg.c (delete_from_delay_slot): If we have a barrier after the
+ 	sequence containing the insn to be deleted, always reemit it.
+ 
+ 2004-05-20  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR 15454
+ 	* tree-nested.c (get_chain_decl): Create a PARM_DECL by hand.
+ 	* function.c (expand_function_start): Expand static_chain_decl by hand.
+ 	* gimplify.c (create_tmp_var_name): Export.
+ 	* tree-gimple.h (create_tmp_var_name): Declare.
+ 
+ 2004-05-20  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* rs6000.c (print_operand) <case 'z'>: Call
+ 	mark_decl_referenced before assemble_name.
+ 
+ 2004-05-20  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* cgraph.c (hash_node, eq_node, cgraph_node, cgraph_remove_node)
+ 	(cgraph_varpool_hash_node, eq_cgraph_varpool_node)
+ 	(cgraph_varpool_node): Hash on the pointer to the decl, not
+ 	the DECL_UID.  Fixes 64-bit bootstrap failure.
+ 
+ 2004-05-20  Richard Earnshaw <rearnsha@arm.com>
+ 
+ 	* arm.md (ite_ne_zeroextractsi, ite_ne_zeroextractsi_shifted): Ensure
+ 	we don't earlyclobber operands used in the second insn.
+ 
+ 2004-05-20  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* tree-mudflap.c: Formatting fixes.
+ 
+ 2004-05-20  J"orn Rennecke <joern.rennecke@superh.com>
+ 
+ 	* Makefile.in (GTFILES): Add $(srcdir)/reload.h.
+ 	* gengtype.c (open_base_files): Include reload.h in ifiles.
+ 	* reload.h (reg_equiv_memory_loc_varray): Declare.
+ 	* reload1.c (reg_equiv_memory_loc_varray): New variable.
+ 	(init_reload): Initialize it.
+ 	(reload): Instead of freeing reg_equiv_memory_loc, 'grow'
+ 	reg_equiv_memory_loc_varray to size 0.
+ 	* ra.c (reg_alloc): Allocate reg_equiv_memory_loc by
+ 	growing reg_equiv_memory_loc_varray to the desired size.
+ 	* passes.c (rest_of_handle_old_regalloc): Likewise.
+ 	* reload.c: Amend comment on calling init_reload.
+ 
+ 2004-05-20  Nick Clifton  <nickc@redhat.com>
+ 
+ 	* config/c4x/c4x.h (INITIALIZE_TRAMPOLINE): Replace 'tramp'
+ 	with 'TRAMP' in the body of the macro definition.
+ 
+ 2004-05-19  H.J. Lu  <hongjiu.lu@intel.com>
+ 
+ 	PR target/15383
+ 	* config/ia64/ia64.c (ia64_expand_compare): Don't check
+ 	TARGET_HPUX for TFmode compare. Abort if op0 is in TFmode and
+ 	cmptf_libfunc isn't set.
+ 	(ia64_init_libfuncs): Rename TFmode libfuncs using the HPUX
+ 	conventions.
+ 	(ia64_sysv4_init_libfuncs): New.
+ 
+ 	* config/ia64/sysv4.h (TARGET_INIT_LIBFUNCS): New. Defined as
+ 	ia64_sysv4_init_libfuncs.
+ 
+ 2004-05-20  Falk Hueffner  <falk@debian.org>
+ 
+ 	PR other/15526
+ 	* libgcc2.c (__mulvsi3): Fix overflow test.
+ 
+ 2004-05-19  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR c/14171
+ 	* reg-stack.c (nan): Rename to ...
+ 	(not_a_num): Here.
+ 	(reg_to_stack): Rename nan to not_a_num.
+ 	(subst_stack_regs_pat): Likewise.
+ 	(convert_regs_entry): Likewise.
+ 	(convert_regs_1): Likewise.
+ 
+ 	* tree-cfg.c (find_case_label_for_value): Replace call to
+ 	simple_cst_equal with tree_int_cst_equal.
+ 
+ 2004-05-19  Jeff Law <law@redhat.com>
+ 
+ 	* tree-into-ssa.c (prepare_operand_for_rename): New argument is_use.
+ 	If the operand is for a use, then strip away the SSA_NAME, do not
+ 	strip away the SSA_NAME for a set.  Never call release_ssa_name.
+ 	(mark_def_sites): Appropriately pass additional argument to
+ 	prepare_operand_for_rename.  If a VDEF_RESULT is not an SSA_NAME,
+ 	then set the VDEF_RESULT to the VDEF_OP.
+ 	(set_def_block): Strip away any SSA_NAME to get to the real
+ 	underlying variable.
+ 
+ 	* tree-ssa-phiopt.c (value_replacement): Handle the case where
+ 	the desired edge out of COND_BLOCK reaches OTHER_BLOCK rather than
+ 	BB directly.
+ 
+ 2004-05-19  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	PR c++/15463
+ 	* loop-iv.c (iv_number_of_iterations):  Use trunc_int_for_mode on
+ 	result of inverse.
+ 
+ 	PR rtl-optimization/15274
+ 	* loop-iv.c (determine_max_iter, shorten_into_mode,
+ 	iv_number_of_iterations): Handle constants correctly.
+ 	* rtl.h (get_mode_bounds): Declaration changed.
+ 	* stor-layout.c (get_mode_bounds): Return a constant suitable for
+ 	the target mode.
+ 
+ 	PR rtl-optimization/14692
+ 	* loop-unswitch.c (may_unswitch_on): Try folding the result.
+ 	(unswitch_single_loop): Work correctly when may_unswitch_on
+ 	returns a folded constant.
+ 
+ 	* loop-iv.c (implies_p): Handle A < B ==> A + 1 <= B.
+ 	* simplify-rtx.c (simplify_const_relational_operation): Optimize
+ 	comparisons with mode bounds.
+ 
+ 	* function.c (struct temp_slot): Add new field prev.
+ 	(free_after_compilation, init_temp_slots): Free new fields.
+ 	(cut_slot_from_list, insert_slot_to_list,
+ 	temp_slots_at_level, max_slot_level, move_slot_to_level,
+ 	make_slot_available): New functions.
+ 	(assign_stack_temp_for_type, combine_temp_slots,
+ 	find_temp_slot_from_address, preserve_temp_slots,
+ 	preserve_rtl_expr_result, free_temp_slots,
+ 	free_temps_for_rtl_expr, pop_temp_slots): Work with
+ 	the new structure of lists.
+ 	(mark_all_temps_used): Removed.
+ 	* function.h (struct function): Field x_temp_slots
+ 	replaced by x_used_temp_slots and x_avail_temp_slots.
+ 	(temp_slots): Replaced by ...
+ 	(used_temp_slots, avail_temp_slots): New.
+ 	* tree.h (mark_all_temps_used): Declaration removed.
+ 
+ 	* loop-iv.c (mark_single_set, get_biv_step_1, iv_analyze,
+ 	simplify_using_assignment): Take the expression out of
+ 	the expr_list wrapper.
+ 
+ 	* loop-iv.c (iv_number_of_iterations): Improve clasification of
+ 	infinite loops.
+ 
+ 2004-05-19  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* doc/tm.texi (TARGET_RTX_COSTS): Document that instruction
+ 	costs should be based on code size when optimizing for size.
+ 
+ 2004-05-19  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* fold-const.c: Remove non-printable character 160.
+ 
+ 2004-05-19  Nick Clifton  <nickc@redhat.com>
+ 
+ 	* doc/invoke.texi (ARM Options): Fix typo.
+ 	Remove descrption of -mshort-load-bytes and
+ 	-mno-short-load-bytes.
+ 
+ 	* config/ip2k/ip2k.c (ip2k_composite_xexp_not_uses_reg_p): Add
+ 	missing parenthesis.
+ 	* config/ip2k/ip2k.c (ip2k_unary_operator): Likewise.
+ 	* config/ip2k/ip2k.c (ip2k_binary_operator): Likewise.
+ 
+ 2004-05-19  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* expr.c (store_constructor): Build loop start and end by hand
+ 	instead of via loop functions from stmt.c.
+ 	(expand_expr_real_1): Abort if we see an EXIT_EXPR or a LOOP_EXPR.
+ 	Remove the code to expand them.
+ 
+ 	* stmt.c (loop_stack): Remove this and everything related.
+ 	(struct nesting, enum nesting_desc): Update.
+ 	(expand_fixup): Likewise.
+ 	(expand_loop_start, expand_start_loop_continue_elsewhere,
+ 	expand_start_null_loop, expand_loop_continue_here, expand_end_loop,
+ 	expand_end_null_loop, expand_continue_loop, expand_exit_loop,
+ 	expand_exit_loop_if_false, expand_exit_loop_top_cond,
+ 	expand_exit_something): Remove.
+ 	* tree.h: Remove prototypes.
+ 
+ 2004-05-18  Mike Stump  <mrs@apple.com>
+ 	    Devang Patel  <dpatel@apple.com>
+ 
+ 	* doc/tm.texi (TARGET_ASM_EMIT_UNWIND_LABEL): Add argument to indicate
+ 	if this label is for eh.
+ 	* config/darwin-protos.h (darwin_emit_unwind_label): Likewise.
+ 	* config/darwin.c (darwin_emit_unwind_label): Likewise.
+ 	* dwarf2out.c (output_call_frame_info): Likewise.
+ 	* output.h (default_emit_unwind_label): Likewise.
+ 	* target.h (unwind_label): Likewise.
+ 	* varasm.c (default_emit_unwind_label): Likewise.
+ 
+ 	* config/darwin.h (DWARF2_DEBUGGING_INFO, PREFERRED_DEBUGGING_TYPE,
+ 	DEBUG_FRAME_SECTION, DEBUG_INFO_SECTION, DEBUG_ABBREV_SECTION,
+ 	DEBUG_ARANGES_SECTION, DEBUG_MACINFO_SECTION, DEBUG_LINE_SECTION,
+ 	DEBUG_LOC_SECTION, DEBUG_PUBNAMES_SECTION, DEBUG_STR_SECTION,
+ 	DEBUG_RANGES_SECTION): Define.
+ 
+ 2004-05-18  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* cgraph.c (hash_node, eq_node, cgraph_node, cgraph_remove_node)
+ 	(cgraph_varpool_hash_node, eq_cgraph_varpool_node)
+ 	(cgraph_varpool_node):
+ 	Use DECL_UID for the key, not DECL_ASSEMBLER_NAME.
+ 	(cgraph_function_possibly_inlined_p): Use the decl itself for
+ 	the key, not DECL_ASSEMBLER_NAME.
+ 	(change_decl_assembler_name): No need to muck with the hash tables.
+ 	(cgraph_node_for_identifier, cgraph_varpool_node_for_identifier):
+ 	Delete.
+ 	* cgraphunit.c (cgraph_mark_inline_edge): Use the decl itself
+ 	for the key, not DECL_ASSEMBLER_NAME.
+ 	* cgraph.h: Remove prototypes of deleted functions.
+ 	* varasm.c (mark_referenced): Just set TREE_SYMBOL_REFERENCED.
+ 	(mark_decl_referenced): New function.
+ 	* tree.h: Prototype mark_decl_referenced.
+ 	* final.c (output_addr_const) <case SYMBOL_REF>: Call
+ 	mark_decl_referenced before assemble_name.
+ 	* c-decl.c (finish_decl): Use mark_decl_referenced.
+ 
+ 2004-05-18  Andrew Pinski  <pinskia@physics.uc.edu>
+ 	    Jeff Law <law@redhat.com>
+ 
+ 	* tree-ssa-phiopt.c (abs_replacement): New function.
+ 	(empty_block_p): New function extracted from...
+ 	(candidate_bb_for_phi_optimization): Break out empty block test.
+ 	(conditional_replacement): Use empty_block_p.
+ 	(value_replacement): Similarly.
+ 
+ 	* Makefile.in (tree-ssa-phiopt.o): Depends on flags.h.
+ 	* tree-ssa-phiopt.c: Include flags.h.
+ 	(conditional_replacement): Remove argument names from prototype.
+ 	Minor formatting and comment fixes.
+ 	(tree_ssa_phiopt): If conditional_replacement returns false, then
+ 	call value_replacement.
+ 	(value_replacement): New function.
+ 
+ 2004-05-18  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-phiopt.c (replace_phi_with_stmt): New function extracted
+ 	from conditional_replacement.
+ 	(candidate_bb_for_phi_optimization): Similarly.
+ 	(conditional_replacement): Use replace_phi_with_stmt and
+ 	candidate_bb_for_phi_optimization.
+ 
+ 	* tree-ssa-phiopt.c: Fix various formatting issues.
+ 
+ 2004-05-18  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* config/s390/s390.c (s390_expand_movstr, s390_expand_clrstr,
+ 	s390_expand_cmpmem): Do not use expand_start_loop and
+ 	expand_end_loop, instead build the loop manually.
+ 
+ 2004-05-18  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* config/rs6000/rs6000.md (ctrsi_internal3): Delete.
+ 	(ctrsi_internal4, ctrdi_internal3, ctrdi_internal4): Delete.
+ 
+ 2004-05-17  Jeff Law  <law@redhat.com>
+ 
+ 	* toplev.h (flag_delete_null_pointer_checks): Move from here to...
+ 	* flags.h (flag_delete_null_pointer_checks): Here.
+ 	* tree-flow.h (cprop_into_successor_phis): Add argument to prototype.
+ 	* tree-phinodes.c (resize_phi_node): Initialize PHI_ARG_NONZERO.
+ 	(add_phi_arg, remove_phi_arg_num): Similarly.
+ 	* tree-ssa-copy.c (cprop_into_successor_phis): Propagate nonzero
+ 	property into PHI nodes.
+ 	* tree-ssa-dom.c: Remove redundant inclusion of flags.h.
+ 	(record_equivalences_from_phis): If all PHI arguments are known to be
+ 	nonzero, then the result must be nonzero as well.
+ 	(cprop_into_phis): Pass nonzero_vars bitmap to cprop_into_successor_phis.
+ 	(record_equivalences_from_stmt): Check flag_delete_null_pointer_checks
+ 	appropriately.  Walk the USE-DEF chains and propagate nonzero property
+ 	as appropriate.
+ 	* tree.h (PHI_ARG_NONZERO): Define.
+ 	(phi_arg_d): Add nonzero flag.
+ 
+ 2004-05-17  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* f: Entire directory removed
+ 
+ 	* c-common.h (CTI_G77_INTEGER_TYPE, CTI_G77_UINTEGER_TYPE)
+ 	(CTI_G77_LONGINT_TYPE, CTI_G77_ULONGINT_TYPE)
+ 	(g77_integer_type_node, g77_uinteger_type_node)
+ 	(g77_longint_type_node, or g77_ulongint_type_node): Delete.
+ 	* c-common.c (c_common_nodes_and_builtins): Do not initialize
+ 	the above set of variables.
+ 
+ 	* config/i386/uwin.h: No need to define WIN32_UWIN_TARGET.
+ 	* doc/invoke.texi, doc/standards.texi: Remove cross-references
+ 	to g77 manual.
+ 
+ 2004-05-17  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	PR tree-optimization/15438
+ 	* tree-ssa-operands.c (get_expr_operands): Do not treat malloc
+ 	attributed functions as pure or const.
+ 
+ 2004-05-17  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* tree-mudflap.c (mx_register_decls): Tolerate decl trees resulting
+ 	from source code with errors.
+ 
+ 2004-05-17  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	Enable tree browser for all front ends.
+ 	* Makefile.in (cc1): Moved @TREEBROWSER@ from here...
+ 	(BACKEND): ...to here.
+ 
+ 2004-05-17  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* i386.c (construct_container): Do not produce BLKmode registers.
+ 	(classify_argument): Properly compute alignment of complex types.
+ 
+ 2004-05-17  H.J. Lu  <hongjiu.lu@intel.com>
+ 
+ 	PR target/15084
+ 	* config/i386/i386.md (*movsi_insv_1_rex64): Changed to DImode
+ 	and renamed to movdi_insv_1_rex64.
+ 	(insv): Support SImode for 32bit and DImode for 64bit.
+ 
+ 2004-05-17  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.h (MASK_DEBUG_G, TARGET_DEBUG_G_MODE): Delete.
+ 	(TARGET_SWITCHES): Remove debugg.
+ 	* config/mips/mips.md (adddi3, ashldi3, ashrdi3, lshrdi3): Only handle
+ 	TARGET_64BIT.
+ 	(subdi3): Replace the define_expand with a define_insn, the latter
+ 	renamed from subdi3_internal_3.
+ 	(negdi2): Likewise negdi2_internal_2.
+ 	(adddi3_internal_[12], subdi3_internal, ashldi3_internal{,2,3})
+ 	(ashrdi3_internal{,2,3}, lshrdi3_internal{,2,3}): Remove patterns
+ 	and associated define_splits.
+ 	(adddi3_internal): Renamed from adddi3_internal_3.
+ 	(ashldi3_internal): Likewise ashldi3_internal4.
+ 	(ashrdi3_internal): Likewise ashrdi3_internal4.
+ 	(lshrdi3_internal): Likewise lshrdi3_internal4.
+ 
+ 2004-05-17  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* optabs.c (expand_unop): Try implementing negation using subtraction
+ 	from zero.
+ 
+ 2004-05-16  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	* pa.md:  Fix typo from last change.  Remove DFmode move to and from
+ 	SAR register.
+ 
+ 2004-05-16  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	PR target/10982
+ 	* arm.md (ne_zeroextractsi): Convert to insn-and-split.
+ 	(ne_zeroextractsi_shifted): New pattern.
+ 	(ite_ne_zeroextractsi): New pattern.
+ 	(ite_ne_zeroextractsi_shifted): New pattern.
+ 
+ 2004-05-15  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* c-gimplify.c (c_genericize):
+ 	Replace calls via (*lang_hooks.foo) with lang_hooks.foo.
+ 	* c-parse.in <expr_no_commas>: Likewise.
+ 	<if_prefix>: Likewise.
+ 	<select_or_iter_stmt>: Likewise.
+ 	* expr.c (expand_var, expand_expr_real_1): Likewise.
+ 	* expr.h (expand_expr): Make it a static inline function.
+ 	Move prototype for expand_expr_real up before this.
+ 	* fold-const.c (fold_relational_hi_lo, fold_relational_const):
+ 	Likewise.
+ 	* gimplify.c (gimple_boolify, gimplify_addr_expr,
+ 	gimplify_asm_expr, gimplify_expr): Likewise.
+ 	* tree-cfg.c (dump_tree_cfg, dump_cfg_stats, tree_cfg2vcg,
+ 	dump_function_to_file): Likewise.
+ 	* tree-dfa.c (dump_immediate_uses, dump_dfa_stats): Likewise.
+ 	* tree-inline.c (remap_block, save_body, walk_tree): Likewise.
+ 	* tree-into-ssa.c (dump_tree_ssa): Likewise.
+ 	* tree-mudflap.c (mf_varname_tree, mf_file_function_line_tree):
+ 	Likewise.
+ 	* tree-optimize.c (execute_one_pass): Likewise.
+ 	* tree-pretty-print.c (dump_generic_bb_buff): Likewise.
+ 	* tree-ssa-alias.c (dump_alias_stats, dump_alias_info): Likewise.
+ 
+ 	* objc/objc-act.c (objc_build_try_enter_fragment,
+ 	objc_build_try_epilogue, objc_build_catch_stmt,
+ 	objc_build_finally_prologue): Replace calls via (*lang_hooks.foo)
+ 	with lang_hooks.foo ().
+ 
+ 2004-05-15  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* builtins.c (simplify_builtin_strcpy): Avoid use of chainon, so
+ 	that simplify_builtin doesn't destructively modify its argument.
+ 
+ 2004-05-15  Richard Earnshaw  <reanrsha@arm.com>
+ 
+ 	* arm/lib1funcs.asm (_lshrdi3, _ashrdi3, _ashldi3): Add ASM
+ 	implementations for ARM and Thumb.
+ 	* arm/t-arm-elf (LIB1ASMFUNCS): Use them.
+ 
+ 2004-05-15  Thomas Quinot  <quinot@act-europe.fr>
+ 
+ 	* prefix.c (update_path): Replace PREFIX with KEY only
+ 	when it matches a full directory name in PATH.
+ 
+ 2004-05-15  Richard Earnshaw  <reanrsha@arm.com>
+ 
+ 	* arm.h (TARGET_APCS_32): Delete.
+ 	(TARGET_MMU_TRAPS): Delete.
+ 	(TARGET_CPU_CPP_BUILTINS): Unconditionally define __APCS_32__.  Never
+ 	define __APCS_26__.
+ 	(CPP_SPEC): Remove checking of -mapcs-{26,32}.
+ 	(ARM_FLAG_APCS_32, ARM_FLAG_MMU_TRAPS): Delete.
+ 	(TARGET_SWITCHES): Remove alignment_traps and apcs-{26,32} switches.
+ 	(prog_mode_type): Delete.
+ 	(PROMOTE_MODE): Always promote unsigned for HImode.
+ 	(SECONDARY_INPUT_RELOAD_CLASS): Simplify.
+ 	(MASK_RETURN_ADDR): Simplify.
+ 	* arm.c (arm_prgmode): Delete.
+ 	(arm_override_options, arm_gen_rotated_half_load): Simplify.
+ 	(print_multi_reg, output_return_instruction): Simplify.
+ 	(arm_output_epilogue, arm_final_prescan_insn): Simplify.
+ 	(arm_return_addr): Simplify.
+ 	* arm.md (prog_mode): Delete.
+ 	(conds): Simplify.
+ 	(zero_extendhisi2, extendhisi2, movhi, movhi_bytes): Simplify.
+ 	(rotated_loadsi, movhi_insn_littleend, movhi_insn_bigend): Delete.
+ 	(loadhi_si_bigend, loadhi_preinc, loadhi_shiftpreinc): Delete.
+ 	(loadhi_shiftpredec): Delete.
+ 	(peephole for post-increment on HImode load): Delete.
+ 	* arm/crtn.asm: (FUNC_END): Simplify.
+ 	* arm/lib1funcs.asm: Remove APCS-26 return macros.
+ 	* arm/aof.h, arm/coff.h arm/elf.h arm/linux-elf.h arm/netbsd-elf.h
+ 	* arm/netbsd.h arm/pe.h arm/semi.h arm/semiaof.h arm/unknown-elf.h
+ 	* arm/vxworks.h arm/wince-pe.h: Tidy TARGET_DEFAULTS and
+ 	MULTILIB_DEFAULTS as required.
+ 	* arm/t-arm-elf arm/t-linux arm/t-pe arm/t-semi arm/t-wince-pe
+ 	* arm/t-xscale-coff arm/t-xscale-elf arm/uclinux-elf: Tidy MULTILIB
+ 	variables as required.
+ 	* doc/invoke.texi (ARM Options): Remove obsolete flags.
+ 
+ 2004-05-15  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_va_arg <ABI_V4>): Don't use
+ 	UNITS_PER_WORD to calculate gpr size.  Re-instate code to set reg
+ 	count to 8 to handle n_reg > 2.
+ 
+ 2004-05-15  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* doc/extend.texi: Update WG14 URL.
+ 
+ 2004-05-15  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* basic-block.h (life_analysis, delete_noop_moves):
+ 	Update prototypes.
+ 	* bt-load.c (branch_target_load_optimize): Don't take the
+ 	insns stream as an argument.  Update the life_analysis calls.
+ 	* combine.c (combine_instructions): Update delete_noop_moves
+ 	calls.
+ 	* flow.c (notice_stack_pointer_modification): Don't take the
+ 	insns stream as an argument.  Work on the flow graph.
+ 	(life_analysis): Likewise.
+ 	(delete_noop_moves): Likewise.
+ 	* passes.c (rest_of_handle_stack_regs): Update reg_to_stack call.
+ 	(rest_of_handle_life): Update life_analysis call.
+ 	(rest_of_compilation): Likewise, and also update
+ 	branch_target_load_optimize call.
+ 	* ra.c (reg_alloc): Update life_analysis call.
+ 	* reg-stack.c (reg_to_stack): Likewise.  Also, don't take
+ 	the insns stream as an argument.
+ 	* regrename.c (copyprop_hardreg_forward): Update delete_noop_moves
+ 	call.
+ 	* rtl.c (branch_target_load_optimize, reg_to_stack): Update
+ 	prototypes.
+ 	* value-profile.c (branch_prob): Update life_analysis call.
+ 	* web.c (web_main): Work on the CFG, not on the insns stream.
+ 
+ 	* config/ip2k/ip2k.c (ip2k_reorg): Update life_analysis calls.
+ 	* config/m68hc11/m68hc11.c (m68hc11_reorg): Likewise.
+ 	* config/sh/sh.c (sh_output_mi_thunk): Likewise.
+ 
+ 2004-05-15  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	PR c/15444
+ 	* c-format.c (avoid_dollar_number): New function.
+ 	(check_format_info_main): Call avoid_dollar_number when operand
+ 	numbers might occur but has_operand_number == 0.
+ 
+ 2004-05-14  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* arm.md (all peephole2 patterns): Use predicates that validate
+ 	register classes as appropriate.
+ 
+ 2004-05-14  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	PR opt/14472
+ 	* tree-tailcall.c (process_assignment): Use STRIP_NOPS to
+ 	ignore type conversions that do not inhibit tail calling.
+ 	(find_tail_calls): Likewise.
+ 
+ 2004-05-14  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (redirect_edges_and_update_ssa_graph): Don't even
+ 	bother marking bypassed virtuals for out-of-ssa.  Instead merge
+ 	bypassed virtuals into vars_to_rename just before into-ssa pass.
+ 
+ 	* tree-ssa-dom.c (simplify_rhs_and_lookup_avail_expr): Reorganize
+ 	so that it picks up more opportunities to eliminate ABS expressions
+ 	or turn them into negations.
+ 
+ 2004-05-14  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* passes.c (rest_of_handle_null_pointer): Remove.
+ 	(rest_of_handle_cse): Don't call rest_of_handle_null_pointer.
+ 	(rest_of_compilation): Likewise.
+ 	* rtl.h (delete_null_pointer_checks): Remove prototype.
+ 	* gcse.c (rd_kill, rd_gen, reaching_defs, rd_out, ae_in, ae_out):
+ 	Remove declarations.
+ 	(get_bitmap_width, alloc_rd_mem, free_rd_mem, handle_rd_kill_set,
+ 	compute_kill_rd, compute_rd, alloc_avail_expr_mem,
+ 	free_avail_expr_mem, compute_ae_gen, expr_killed_p, compute_ae_kill,
+ 	expr_reaches_here_p, computing_insn, def_reaches_here_p,
+ 	can_disregard_other_sets, handle_avail_expr, classic_gcse,
+ 	one_classic_gcse_pass, invalidate_nonnull_info,
+ 	delete_null_pointer_checks_1, delete_null_pointer_checks,
+ 	expr_reached_here_p_work): Remove.
+ 	(gcse_main): Do not perform classic GCSE when optimizing for size.
+ 	(alloc_pre_mem, free_pre_mem): Don't touch ae_in and ae_out, they
+ 	are never used.
+ 
+ 2004-05-14  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR optimization/14466
+ 	* tree-complex.c (make_temp): Remove.
+ 	(gimplify_val): Replace make_temp with make_rename_temp
+ 	and add NULL as the second argument.
+ 	(expand_complex_div_wide): Likewise.
+ 	* tree-dfa.c (make_rename_temp): New function.
+ 	* tree-flow.h (make_rename_temp): Declare.
+ 	* tree-sra.c (make_temp): Remove.
+ 	(lookup_scalar): Replace make_temp with make_rename_temp.
+ 	(create_scalar_copies): Likewise.
+ 	* tree-ssa-phiopt.c (conditional_replacement): When we
+ 	get non gimple create a temporary variable to hold the
+ 	casted expression.
+ 
+ 2004-05-14  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* stor-layout.c (update_alignment_for_field): Use
+ 	targetm.align_anon_bitfield.
+ 	* target-def.h (TARGET_ALIGN_ANON_BITFIELD): Define.
+ 	(TARGET_INITIALIZER): Use it.
+ 	* target.h (struct gcc_target): Add align_anon_bitfield.
+ 	* config/arm/arm.c (arm_align_anon_bitfield):  New function.
+ 	(TARGET_ALIGN_ANON_BITFIELD): Define.
+ 	* doc/tm.texi: Document TARGET_ALIGN_ANON_BITFIELD.
+ 
+ 2004-05-13  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* tree.def (documentation): Remove mention of class 'b'.
+ 	(BLOCK): Now in class 'x'.
+ 	* c-common.c (verify_tree): Remove case 'b'.
+ 	* c-typeck.c (same_translation_unit_p): Change 'b' to 'x'.
+ 	* calls.c (calls_function_1): Control cannot get past the switch
+ 	when exp is a BLOCK.
+ 	* print-tree.c (print_node): Move code for class 'b' to the class
+ 	'c'/'x' switch, as case BLOCK.
+ 	* tree.c (tree_size, make_node_stat, tree_node_structure): Likewise.
+ 	(unsafe_for_reeval, substitute_placeholder_in_expr)
+ 	(stabilize_reference_1): Remove case 'b'.
+ 	* tree-browser.c (browse_tree): Change all tests for TREE_CODE_CLASS
+ 	of something being 'b' to tests for TREE_CODE of something being
+ 	BLOCK.
+ 	* tree-ssa-operands.c (get_expr_operands): Likewise.
+ 
+ 2004-05-13  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-gimple.c: Rename from tree-simple.c.
+ 	* tree-gimple.h: Rename from tree-simple.h.
+ 	* c-gimplify.c: Rename from c-simplify.c
+ 	* Makefile.in, c-decl.c, gimple-low.c, gimplify.c,
+ 	langhooks.c, tree-alias-ander.c, tree-alias-common.c,
+ 	tree-complex.c, tree-dfa.c, tree-flow.h, tree-inline.c,
+ 	tree-into-ssa.c, tree-iterator.c, tree-mudflap.c,
+ 	tree-nested.c, tree-nomudflap.c, tree-outof-ssa.c, tree-sra.c,
+ 	tree-ssa-alias.c, tree-ssa-ccp.c, tree-ssa-copyrename.c,
+ 	tree-ssa-dce.c, tree-ssa-live.c, tree-ssa-pre.c, tree-ssa.c:
+ 	Update.
+ 
+ 2004-05-14  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	* doc/sourcebuild.texi: Mention libbanshee and libmudflap.
+ 
+ 2004-05-13  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* tree-ssa.c (delete_tree_ssa): XFREE
+ 	bitmaps allocated with BITMAP_XMALLOC.
+ 
+ 	* tree-ssa-pre.c (execute_pre): Free ephi_use_pool and
+ 	idfs_cache at the end of the function.
+ 
+ 	* tree-ssa-live.c (calculate_live_on_entry): Free saw_def
+ 	at the end of the function.
+ 
+ 	* tree-ssa-dce.c (perform_tree_ssa_dce): Free
+ 	el at the end of the function.
+ 
+ 	* tree-into-ssa.c (insert_phi_nodes_for): XFREE
+ 	bitmaps allocated with BITMAP_XMALLOC.
+ 
+ 	* loop-unswitch.c (unswitch_single_loop): Free bbs at
+ 	the end.
+ 
+ 	* final.c (shorten_branches): Free uid_shuid before
+ 	reallocating it.
+ 
+ 	* bb-reoder.c (connect_traces): Free cold_traces at the end.
+ 
+ 2004-05-13  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-live.c (calculate_live_on_entry): Ignore virtual
+ 	variables.  Simplify slightly by using USE_OP/DEF_OP instead
+ 	of USE_OP_PTR/DEF_OP_PTR and dereferencing the result.
+ 
+ 	* tree-into-ssa.c (compute_global_livein): Use EXECUTE_IF_SET_IN_BITMAP
+ 	rather than iterating through the blocks testing each bit in
+ 	livein to initialize the worklist.
+ 	(mark_def_sites): Remove useless checks of KILLS for virtual
+ 	operands.
+ 
+ 	* tree-ssa-forwprop.c (record_single_argument_cond_exprs): Accept
+ 	new parameters for the statement and variable worklist as well
+ 	as a bitmap of interesting SSA_NAMEs.  Walk over the statement
+ 	worklist recording interesting variables in the variable worklist
+ 	and bitmap.  Handle casts between integral and boolean types.
+ 	(substitute_single_use_vars): Accept new parameters for the statement
+ 	and variable worklist.  When a substitution is made add a new
+ 	entry to the statement worklist.  Handle casts between integral
+ 	and boolean types.
+ 	(tree_ssa_forward_propagate_single_use_vars): Rework to pass
+ 	worklists to children.  Iterate until the statement worklist
+ 	is empty.
+ 
+ 2004-05-13  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* tree-outof-ssa.c (rewrite_vars_out_of_ssa): Free map at
+ 	the end of the block.
+ 
+ 	* tree-into-ssa.c (def_blocks_free): XFREE bitmaps allocated
+ 	with BITMAP_XMALLOC.
+ 
+ 	* tree-ssa-alias.c (delete_alias_info): XFREE bitmaps allocated
+ 	with BITMAP_XMALLOC.
+ 
+ 	* tree-ssa-dom.c (tree_ssa_dominator_optimize):
+ 	Free nonzero_vars at the end of the function.
+ 
+ 	* convert.c (convert_to_integer): Make a CONVERT_EXPR when there is a
+ 	need to generate code instead of a NOP_EXPR.
+ 
+ 2004-05-13  Ian Lance Taylor  <ian@wasabisystems.com>
+ 
+ 	* gcc.c (default_compilers): Fill out initializers for new Fortran
+ 	entries.
+ 
+ 2004-05-13  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/arm.h (PCC_BITFIELD_TYPE_MATTERS): Define.
+ 
+ 2004-05-13  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/arm.c (arm_default_short_enums): New function.
+ 	(TARGET_DEFAULT_SHORT_ENUMS): Define.
+ 
+ 2004-05-13  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	Merge from tree-ssa-20020619-branch.
+ 
+ 	* Makefile.in (reload1.o-warn): Add.
+ 	(tree-alias-ander.o-warn): Add.
+ 	(GMPLIBS): Define.
+ 	(GMPINC): Define.
+ 	(BANSHEELIB): Define.
+ 	(BANSHEEINC): Define.
+ 	(TREE_DUMP_H): Define.
+ 	(TREE_SIMPLE_H): Define.
+ 	(TREE_FLOW_H): Define.
+ 	(LIBDEPS): Add BANSHEELIB.
+ 	(INCLUDES): Add BANSHEEINC and GMPINC.
+ 	(C_AND_OBJC_OBJS): Add c-simplify.o, tree-mudflap.o,
+ 	c-mudflap.o and c-pretty-print.o.
+ 	(C_OBJS): Remove c-pretty-print.o.
+ 	(OBJS-common): Remove sibcall.o.
+ 	Add tree-cfg.o, tree-dfa.o, tree-eh.o,
+ 	tree-ssa.o, tree-optimize.o, tree-simple.o,
+ 	tree-alias-type.o, gimplify.o, tree-pretty-print.o,
+ 	tree-into-ssa.o, tree-outof-ssa.o, tree-alias-common.o,
+ 	tree-ssa-ccp.o, @ANDER@, tree-ssa-dce.o, tree-ssa-copy.o,
+ 	tree-nrv.o, tree-ssa-copyrename.o, tree-ssa-pre.o,
+ 	tree-ssa-live.o, tree-ssa-operands.o, tree-ssa-alias.o,
+ 	tree-ssa-phiopt.o, tree-ssa-forwprop.o, tree-nested.o,
+ 	tree-ssa-dse.o, tree-ssa-dom.o, domwalk.o,
+ 	tree-tailcall.o, gimple-low.o, tree-iterator.o,
+ 	tree-phinodes.o, tree-ssanames.o, tree-sra.o,
+ 	tree-complex.o, tree-ssa-loop.o, rtl-profile.o and
+ 	tree-profile.o.
+ 	(OBJC-archive): Add tree-nomudflap.o.
+ 	(cc1): Add dependency on @TREEBROWSER@.
+ 	(c-decl.o): Add dependency on TREE_DUMP_H.
+ 	(c-dump.o): Likewise.
+ 	(c-common.o): Add dependency on tree-iterator.h
+ 	(c-pretty-print.o): Add dependency on DIAGNOSTIC_H.
+ 	(gtype-desc.o): Add dependency on TREE_FLOW_H.
+ 	(tree.o): Add dependency on tree-iterator.h,
+ 	BASIC_BLOCK_H and TREE_FLOW_H.
+ 	(tree-dump.o): Depend on TREE_DUMP_H instead of tree-dump.h.
+ 	(langhooks.o): Add dependency on TREE_SIMPLE_H.
+ 	(tree-alias-type.o, tree-alias-ander.o,
+ 	tree-alias-common.o, tree-ssa.o, tree-into-ssa.o,
+ 	tree-outof-ssa.o, tree-ssa-dse.o, tree-ssa-forwprop.o,
+ 	tree-ssa-phiopt.o, tree-nrv.o, tree-ssa-copy.o,
+ 	tree-ssa-dom.o, tree-ssanames.o, tree-phinodes.o,
+ 	domwalk.o, tree-ssa-live.o, tree-ssa-copyrename.o,
+ 	tree-ssa-pre.o, tree-cfg.o, tree-tailcall.o,
+ 	tree-nested.o, tree-iterator.o, tree-dfa.o,
+ 	tree-ssa-operands.o, tree-eh.o, tree-ssa-loop.o,
+ 	tree-ssa-alias.o, tree-optimize.o, c-simplify.o,
+ 	gimplify.o, gimple-low.o, tree-browser.o, tree-simple.o,
+ 	tree-mudflap.o, c-mudflap.o, tree-nomudflap.o,
+ 	tree-pretty-print.o, tree-ssa-dce.o, tree-ssa-ccp.o,
+ 	tree-sra.o, tree-complex.o, tree-profile.o,
+ 	rtl-profile.o): New rules.
+ 	(function.o): Add dependency on basic-block.h
+ 	(expr.o): Add dependency on tree-iterator.h.
+ 	(sibcall.o): Remove.
+ 	(profile.o): Depend on TREE_FLOW_H instead of TREE_H.
+ 	(cfg.o): Add dependency on TIMEVAR_H.
+ 	(cfghooks.o): Add dependency on TREE_FLOW_H.
+ 	(reg-stack.o): Add dependency on basic-block.h.
+ 	(GTFILES): Add hwint.h, tree-mudflaph.c, tree-flow.h,
+ 	c-objc-common.c, c-common.c, c-parse.in, tree-ssanames.c,
+ 	tree-eh.c, tree-phinodes.c, tree-cfg.c, tree-dfa.c,
+ 	tree-ssa-ccp.c, tree-iterator.c, gimplify.c,
+ 	tree-alias-type.h, tree-alias-common.h,
+ 	tree-alias-type.c, tree-alias-common.c,
+ 	tree-ssa-operands.h, tree-ssa-operands.c, tree-profile.c,
+ 	rtl-profile.c and tree-nested.c.
+ 	(gt-tree-alias-common.h, gt-tree-mudflap.h,
+ 	gt-tree-ssa-ccp.h, gt-tree-eh.h, gt-tree-ssanames.h,
+ 	gt-tree-iterator.h, gt-gimplify.h, gt-tree-phinodes.h,
+ 	gt-tree-cfg.h, gt-tree-nested.h): New rules.
+ 	(TEXI_GCCINT_FILES): Add cfg.texi and tree-ssa.texi.
+ 	* basic-block.h: Include predict.h
+ 	(struct edge_def): Add GTY marker.
+ 	Change field 'insns' to be a union of tree and rtx.
+ 	(EDGE_TRUE_VALUE): Define.
+ 	(EDGE_FALSE_VALUE): Define.
+ 	(EDGE_EXECUTABLE): Define.
+ 	(struct bb_ann_d): Forward declare.
+ 	(struct basic_block_def): Add GTY marker.
+ 	Remove fields head_tree and end_tree.
+ 	Add fields stmt_list, rbi and tree_annotations.
+ 	(struct reorder_block_def): Define.
+ 	(basic_block_info): Add GTY marker.
+ 	(ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR): Change to global
+ 	variables instead of macros.
+ 	(flow_call_edges_add): Remove declaration.
+ 	(make_eh_edge): Remove declaration.
+ 	(brief_dump_cfg, find_edge, tree_predicted_by_p,
+ 	rtl_predicted_by_p, tree_predict_edge, rtl_predict_edge,
+ 	predict_edge_def, rtl_make_eh_edge, find_basic_blocks,
+ 	cleanup_cfg, delete_unreachable_blocks, merge_seq_blocks,
+ 	alloc_rbi_pool, initialize_bb_rbi, free_rbi_pool): Declare.
+ 	(try_redirect_by_replacing_jump): Modfiy return type to
+ 	edge instead of bool.
+ 	* bb-reorder.c (copy_bb): Call duplicate_block
+ 	instead of cfg_layout_duplicate_bb.
+ 	(copy_bb_p): Call can_duplicate_block_p instead of
+ 	cfg_layout_can_duplicate_bb_p.
+ 	* bitmap.c (bitmap_first_set_bit): Abort if word
+ 	wasn't found.
+ 	(bitmap_last_set_bit): Likewise.
+ 	* builtin-types.def (DEF_FUNCTION_TYPE_2): Add
+ 	(DEF_FUNCTION_TYPE_3): Add.
+ 	* builtins.c (c_strlen): Make extern.
+ 	(builtin_save_expr): New.
+ 	(expand_builtin_nonlocal_goto): New.
+ 	(expand_builtin_constant_p): Remove.
+ 	(expand_builtin_mathfn): Call builtin_save_expr instead
+ 	of save_expr.
+ 	(expand_builtin_mathfn_2): Likewise.
+ 	(expand_builtin_strcmp): Likewise.
+ 	(expand_builtin_strncmp): Likewise.
+ 	(expand_builtin_strcat): Likewise.
+ 	(fold_builtin_cabs): Likewise.
+ 	(expand_builtin_alloca): Don't trigger if -fmudflap is
+ 	given.
+ 	(build_string_literal): Set TREE_INVARIANT on new node.
+ 	(expand_builtin_profile_fun): New.
+ 	(round_trampoline_addr): New.
+ 	(expand_builtin_init_trampoline): New.
+ 	(expand_builtin_adjust_trampoline): New.
+ 	(expand_builtin) <BUILT_IN_NEXT_ARG>: Call simplify_builtin_next_arg.
+ 	<BUILT_IN_CONSTANT_P>: Return const0_rtx;
+ 	<BUILT_IN_STACK_ALLOC, BUILT_IN_STACK_SAVE,
+ 	BUILT_IN_STACK_RESTORE, BUILT_IN_NONLOCAL_GOTO,
+ 	BUILT_IN_PROFILE_FUNC_ENTER, BUILT_IN_PROFILE_FUNC_EXIT,
+ 	BUILT_IN_INIT_TRAMPOLINE, BUILT_IN_ADJUST_TRAMPOLINE>:
+ 	Handle.
+ 	(fold_builtin_expect): New.
+ 	(fold_builtin_isascii): Don't return non-constant results
+ 	in GIMPLE form.
+ 	(fold_builtin_isdigit): Likewise.
+ 	(fold_builtin_1): New.
+ 	(fold_builtin): Call it.
+ 	(build_function_call_expr): Update call to build a new
+ 	CALL_EXPR.
+ 	(purge_builtin_constant_p): Remove.
+ 	(simplify_builtin, simplify_builtin_memcmp,
+ 	simplify_builtin_strcmp, simplify_builtin_strncmp,
+ 	simplify_builtin_strpbrk, simplify_builtin_strstr,
+ 	simplify_builtin_strchr, simplify_builtin_strrchr,
+ 	simplify_builtin_strcat, simplify_builtin_strncat,
+ 	simplify_builtin_strspn, simplify_builtin_strcspn,
+ 	simplify_builtin_next_arg, simplify_builtin_va_start,
+ 	simplify_builtin_sprintf): New.
+ 	* builtins.def (BUILT_IN_STACK_ALLOC,
+ 	BUILT_IN_STACK_SAVE, BUILT_IN_STACK_RESTORE,
+ 	BUILT_IN_INIT_TRAMPOLINE, BUILT_IN_ADJUST_TRAMPOLINE,
+ 	BUILT_IN_NONLOCAL_GOTO, BUILT_IN_PROFILE_FUNC_ENTER,
+ 	BUILT_IN_PROFILE_FUNC_EXIT): Define.
+ 	* c-common.c: Include tree-iterator.h and hashtab.h.
+ 	(lang_statement_code_p): Declare.
+ 	(lang_gimplify_stmt): Declare.
+ 	(fix_string_type): Set TREE_INVARIANT for value.
+ 	(pointer_int_sum): Rely on build to set TREE_CONSTANT.
+ 	(c_type_hash): New.
+ 	(c_common_get_alias_set): Handle multiple type nodes
+ 	referring to "the same" type, currently for C90 only.
+ 	(c_add_case_label): Use create_artificial_label.
+ 	(finish_label_address_expr): Don't set TREE_CONSTANT on
+ 	result.
+ 	(c_expand_expr): Don't handle STMT_EXPR.
+ 	(handle_alias_attribute): Marke aliased variables to be
+ 	TREE_STATIC.
+ 	(handle_nonnull_attribute): Initialize arg_num.
+ 	(check_function_nonnull): Likewise.
+ 	(c_walk_subtrees): New.
+ 	(c_estimate_num_insns_1): Don't handle
+ 	EXPR_WITH_FILE_LOCATION nor FILE_STMT.
+ 	(c_decl_uninit_1): Remove.
+ 	(c_decl_uninit): Remove.
+ 	(c_warn_unused_result): New.
+ 	* c-common.def (ASM_STMT): Change number of operands
+ 	to 4.
+ 	(FILE_STMT): Remove.
+ 	* c-common.h (lang_expand_stmt, lang_expand_decl_stmt):
+ 	Remove.
+ 	(lang_gimplify_stmt): Add.
+ 	(expand_stmt): Remove.
+ 	(ASM_CV_QUAL, ASM_STRING, ASM_OUTPUTS, ASM_INPUTS,
+ 	ASM_CLOBBERS, STMT_EXPR_WARN_UNUSED_RESULT,
+ 	ASM_VOLATILE_P, FILE_STMT_FILENAME_NODE,
+ 	FILE_STMT_FILENAME, STMT_LINENO, STMT_LINENO_FOR_FN_P,
+ 	ASM_INPUT_P, DECL_C_HARD_REGISTER): Remove.
+ 	(genrtl_do_pushlevel, genrtl_goto_stmt, genrtl_expr_stmt,
+ 	genrtl_expr_stmt_value, genrtl_decl_stmt, genrtl_if_stmt,
+ 	genrtl_while_stmt, genrtl_do_stmt, genrtl_return_stmt,
+ 	genrtl_for_stmt, genrtl_break_stmt, genrtl_continue_stmt,
+ 	genrtl_scope_stmt, genrtl_switch_stmt, genrtl_case_label,
+ 	genrtl_compound_stmt, genrtl_asm_stmt,
+ 	genrtl_cleanup_stmt, c_decl_uninit): Remove.
+ 	(c_do_switch_warnings, c_gimplify_expr, c_walk_subtrees,
+ 	c_tree_chain_matters_p, c_warn_unused_result,
+ 	c_genericize, c_gimplify_stmt, stmt_expr_last_stmt):
+ 	Declare.
+ 	* c-convert.c (convert): Make convert work when
+ 	converting to compatible types across translation unit.
+ 	* c-decl.c: Include langhooks.h, tree-mudflap.h,
+ 	tree-simple.h, diagnostic.h and tree-dump.h
+ 	(merge_decls): Initialize oldtype to NULL.
+ 	(finish_decl): Use DECL_HARD_REGISTER instead of
+ 	DECL_C_HARD_REGISTER.
+ 	(check_bitfield_type_and_width): Check for null
+ 	lang_type_specific when check the precision of an enum.
+ 	(grokdeclarator): Immediately layout an ARRAY_TYPE used
+ 	in a pointer-to-array declarator.
+ 	(finish_struct): Clear allocated struct lang_type.
+ 	(finish_enum): Set enum_min and enum_max.  Set
+ 	TYPE_MIN/MAX_VALUE to the limits of the compatible type,
+ 	not to the enumerators.
+ 	(set_decl_nonlocal): New.
+ 	(store_parm_decls): Use it via walk_tree.
+ 	(c_finalize): New.
+ 	(finish_function): When !targetm.have_ctors_dtors,
+ 	record static constructors and destructors here...
+ 	(c_expand_body_1): ... not here.
+ 	(c_expand_decl): Rename from c_expand_decl_stmt.
+ 	Handle all C-specific expansion semantics.
+ 	* c-dump.c (dump_stmt): Use EXPR_LOCUS instead of
+ 	STMT_LINENO.
+ 	* c-format.c (handle_format_arg_attribute): Initialize
+ 	format_num.
+ 	* c-lang.c: Include tree-inline.h
+ 	(LANG_HOOKS_EXPAND_DECL,
+ 	LANG_HOOKS_FUNCTION_MISSING_NORETURN_OK_P,
+ 	LANG_HOOKS_TREE_INLINING_WALK_SUBTREES,
+ 	LANG_HOOKS_TREE_INLINING_TREE_CHAIN_MATTERS_P,
+ 	LANG_HOOKS_GIMPLIFY_EXPR, LANG_HOOKS_TYPES_COMPATIBLE_P): Define.
+ 	(LANG_HOOKS_DECL_UNINIT, LANG_HOOKS_RTL_EXPAND_STMT,
+ 	LANG_HOOKS_TREE_INLINING_ESTIMATE_NUM_INSNS): Remove.
+ 	(c_types_compatible_p): New.
+ 	* c-mudflap.c: New file.
+ 	* c-objc-common.c: Include tree-mudflap.h
+ 	(start_cdtor, finish_cdtor): Collapse
+ 	together into
+ 	(build_cdtor): ...here.  Update to construct a complete tree
+ 	for the function.  No need to call push_scope, pop_scope, or
+ 	clear_last_expr, or set current_function_cannot_inline.
+ 	(c_missing_noreturn_ok_p): Change prototype to return
+ 	bool.
+ 	(c_objc_common_init): Don't set lang_missing_noreturn_ok_p.
+ 	* c-opts.c (c_common_handle_option): Move handling of -fdump- to
+ 	opts.c.
+ 	(c_common_post_options): Don't ever use rtl inlining.
+ 	* c-parse.in: Use EXPR_LOCUS instead of STMT_LINENO.
+ 	* c-pragma.c (handle_pragma_redefine_extname): Define
+ 	always.
+ 	(init_pragma): Activate #pragma redefine_extname for mudflap.
+ 	* c-pretty-print.c (pp_c_statement): Remove FILE_STMT.
+ 	(pp_c_initializer): Accept any type CONSTRUCTOR.
+ 	(pp_c_initializer_list): Fix code expectations for VECTOR_TYPE and
+ 	COMPLEX_TYPE.
+ 	(decl_name_str): New local function.
+ 	(pp_c_direct_declarator): Call it.
+ 	(pp_c_primary_expression): Call it.
+ 	(pp_c_id_expression): Call it.
+ 	(pp_c_statement): Call it.
+ 	(print_c_tree): Create new pp object.
+ 	* c-pretty-print.h (pp_c_tree_decl_identifier,
+ 	print_c_tree): Declare.
+ 	* c-semantics.c: Include langhooks.h
+ 	(lang_expand_stmt, lang_expand_decl_stmt,
+ 	find_reachable_label_1, find_reachable_label,
+ 	expand_unreachable_if_stmt, expand_unreachable_stmt,
+ 	genrtl_do_stmt_1): Remove.
+ 	(begin_stmt_tree): Don't check for changed filename.
+ 	Call annotate_with_locus.
+ 	(finish_stmt_tree): Don't set line for end of function.
+ 	(build_stmt): Don't check type nodes for
+ 	side effects.
+ 	(build_stmt): Set TREE_SIDE_EFFECTS.
+ 	Set EXPR_LOCUS instead of STMT_LINENO.
+ 	(lang_expand_stmt, lang_expand_decl_stmt,
+ 	expand_cond, genrtl_do_pushlevel, genrtl_goto_stmt, genrtl_expr_stmt,
+ 	genrtl_expr_stmt_value, genrtl_decl_stmt, genrtl_if_stmt,
+ 	genrtl_while_stmt, genrtl_do_stmt_1, genrtl_do_stmt,
+ 	genrtl_return_stmt, genrtl_for_stmt, genrtl_break_stmt,
+ 	genrtl_continue_stmt, genrtl_scope_stmt, genrtl_switch_stmt,
+ 	genrtl_case_label, genrtl_compound_stmt, genrtl_asm_stmt,
+ 	genrtl_cleanup_stmt, expand_stmt, find_reachable_label,
+ 	find_reachable_label_1, expand_unreachable_if_stmt,
+ 	expand_unreachable_stmt): Remove.
+ 	(prep_stmt): Use EXPR_LOCUS instead of STMT_LINENO.
+ 	* c-simplify.c: New file.
+ 	* c-tree.h (C_LANG_TREE_NODE_CHAIN_NEXT): Define.
+ 	(struct lang_type): Add fields enum_min and enum_max.
+ 	(c_expand_decl_stmt, c_missing_noreturn_ok_p): Remove.
+ 	(c_expand_decl, c_missing_noreturn_ok_p,
+ 	c_types_compatible_p): Declare.
+ 	* c-typeck.c (tagged_types_tu_compatible_p): Allow for
+ 	compiler-generated TYPE_DECLs without a DECL_ORIGINAL_TYPE.
+ 	(default_function_array_conversion): Rely on build to
+ 	set TREE_CONSTANT.
+ 	(parser_build_binary_op, pointer_diff): Likewise.
+ 	(build_unary_op, build_binary_op): Likewise.
+ 	(build_array_ref):
+ 	(build_external_ref): Set TREE_INVARIANT.
+ 	(build_c_cast, pop_init_level): Likewise.
+ 	(process_init_element): Use ASM_VOLATILE_P.
+ 	(build_asm_expr): Adapt to GENERIC/GIMPLE syntax.
+ 	(c_finish_case): Call c_do_switch_warnings.
+ 	* c.opt (fdump-): Remove.
+ 	* calls.c (try_to_integrate): Remove.
+ 	(prepare_call_address): Replace fndecl arg with a
+ 	precomputed static chain value.
+ 	(emit_call_1): New argument for full call expr.
+ 	(flags_from_decl_or_type): Call special_function_p.
+ 	(initialize_argument_information): Add argument
+ 	may_tailcall.
+ 	(purge_reg_equiv_notes): New.
+ 	(expand_call): Do not try to expand calls inline.
+ 	(fixup_tail_calls): New.
+ 	* cfg.c: Include timevar.h and ggc.h.
+ 	(bb_pool, edge_pool): Remove.
+ 	(ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR): Declare.
+ 	(entry_exit_blocks): Remove.
+ 	(rbi_pool): Declare.
+ 	(init_flow): Do not create pools.
+ 	Allocate entry/exit block.
+ 	(free_edge, alloc_block, expunge_block, unchecked_make_edge): Use GGC.
+ 	(alloc_rbi_pool, free_rbi_pool, initialize_bb_rbi): New.
+ 	(unlink_block): Clear b->prev_bb and b->next_bb.
+ 	(compact_blocks): Clear all slots of BASIC_BLOCK array.
+ 	(dump_flow_info): Work on trees too.
+ 	(dump_cfg_bb_info): New.
+ 	(brief_dump_cfg): New.
+ 	* cfganal.c (need_fake_edge_p, flow_call_edges_add): Remove.
+ 	(find_edge): New.
+ 	* cfgbuild.c (rtl_make_eh_edge): Rename from
+ 	make_eh_edge.  Update all users.
+ 	(find_basic_blocks): Don't call VARRAY_FREE on
+ 	basic_block_info.
+ 	* cfgcleanup.c (outgoing_edges_match): Initialize newpos1
+ 	and newpos2.
+ 	(delete_unreachable_blocks): Return changed status.
+ 	(merge_seq_blocks): New.
+ 	* cfghooks.c: Include tree-flow.h
+ 	(tree_register_cfg_hooks, ir_type): New.
+ 	(redirect_edge_and_branch): Change return type to edge.
+ 	(predict_edge, predicted_by_p, can_duplicate_block_p,
+ 	duplicate_block, block_ends_with_call_p,
+ 	block_ends_with_condjump_p, flow_call_edges_add): New.
+ 	* cfghooks.h (redirect_edge_and_branch): Change return
+ 	type to edge.
+ 	(predict_edge, predicted_by_p, can_duplicate_block_p,
+ 	duplicate_block, block_ends_with_call_p,
+ 	block_ends_with_condjump_p, flow_call_edges_add): Declare.
+ 	(redirect_edge_and_branch): Change return type to edge.
+ 	(struct cfg_hooks): Add fields block_ends_with_call_p,
+ 	block_ends_with_condjump_p, flow_call_edges_add,
+ 	predict_edge, predicted_by_p, can_duplicate_block_p and
+ 	duplicate_block.
+ 	(tree_cfg_hooks, ir_type, tree_register_cfg_hooks): Declare.
+ 	* cfglayout.c (cfg_layout_pool, cfg_layout_initialize_rbi): Removed.
+ 	(fixup_reorder_chain): Use initialize_bb_rbi.
+ 	(cfg_layout_can_duplicate_bb_p, cfg_layout_duplicate_bb): Hookized.
+ 	(cfg_layout_initialize): Use cfg.c rbi pool manipulation functions.
+ 	(can_copy_bbs_p, copy_bbs): Use cfghooks for bb duplication.
+ 	(insn_locators_initialize): Use new info about blocks.
+ 	* cfglayout.h (typedef struct reorder_block_def): Moved to
+ 	basic_block.h.
+ 	(cfg_layout_can_duplicate_bb_p, cfg_layout_duplicate_bb): Declaration
+ 	removed.
+ 	* cfgloop.c: Include tree.h and tree-flow.h.
+ 	* cfgloop.h (create_loop_notes): Declare.
+ 	* cfgloopmanip.c (create_loop_notes): New.
+ 	* cfgrtl.c (cfg_layout_create_basic_block): Use initialize_bb_rbi.
+ 	(rtl_cfg_hooks, cfg_layout_rtl_cfg_hook): Fill in can_duplicate_block_p
+ 	and duplicate_block fields.
+ 	(create_basic_block_structure): Don't look at
+ 	RTX_INTEGRATED_P.
+ 	(rtl_block_ends_with_call_p): New.
+ 	(rtl_block_ends_with_condjump_p): New.
+ 	(need_fake_edge_p): Moved from cfganal.c.
+ 	(rtl_flow_call_edges_add): Moved from cfganal.c (flow_call_edges_add).
+ 	(rtl_cfg_hooks): Add rtl_block_ends_with_call_p,
+ 	rtl_block_ends_with_condjump_p, rtl_flow_call_edges_add.
+ 	(cfg_layout_rtl_cfg_hooks): Ditto.
+ 	* cgraph.c (cgraph_mark_reachable_node): Don't force nested
+ 	functions to be reachable.
+ 	* cgraphunit.c (decide_is_function_needed):
+ 	* cgraphunit.c (decide_is_function_needed): Nested functions of extern
+ 	inline functions don't need to be output.
+ 	(cgraph_assemble_pending_functions): Don't do anything
+ 	special for nested functions.
+ 	(cgraph_mark_functions_to_output): Likewise.
+ 	(cgraph_finalize_function): Don't zap DECL_STRUCT_FUNCTION.
+ 	(cgraph_analyze_function): Use estimate_num_insns.
+ 	(cgraph_mark_functions_to_output): Likewise.
+ 	(cgraph_estimate_growth, cgraph_clone_inlined_nodes): Likewise.
+ 	(cgraph_expand_function): Allow functions to not be
+ 	emitted.
+ 	(cgraph_remove_unreachable_nodes):
+ 	(cgraph_recursive_inlining_p): Simplify.
+ 	(lookup_recursive_calls,
+ 	cgraph_decide_recursive_inlining): New.
+ 	(cgraph_decide_inlining_*): Update calls of
+ 	cgraph_mark_inline.
+ 	* combine.c (get_pos_from_mask): Always set *plen.
+ 	* common.opt (fdump-, fmudflap, fmudflapth, fmudflapir,
+ 	ftree-based-profiling, ftree-ccp, ftree-ch,
+ 	ftree-combine-temps, ftree-copyrename, ftree-dce,
+ 	ftree-dominator-opts, ftree-dse, ftree-loop-optimize,
+ 	ftree-points-to, ftree-pre, ftree-sra, ftree-ter,
+ 	ftree-lrs): Add.
+ 	* config.in (HAVE_LD_PIE, HAVE_BANSHEE, PREFIX_INCLUDE_DIR):
+ 	Undefine.
+ 	* configure.ac: Add --enable-tree-browser option.
+ 	Add --with-libbanshee option.
+ 	Add GMPLIBS and GMPINC.
+ 	* configure: Regenerate.
+ 	* coverage.c (tree_ctr_tables): New.
+ 	(coverage_counter_alloc): Use it.
+ 	(build_ctr_info_value): Ditto.
+ 	(coverage_counter_ref): Ditto.  Rename to rtl_coverage_counter_ref.
+ 	(tree_coverage_counter_ref): New.
+ 	* coverage.h (coverage_counter_ref): Remove declaration.
+ 	(rtl_coverage_counter_ref): Declare.
+ 	(tree_coverage_counter_ref): Declare.
+ 	* cppexp.c (append_digit): Rearrange unsignedp/overflow setting.
+ 	(eval_token, num_binary_op, num_part_mul, num_div_op): Likewise.
+ 	* cse.c (fold_rtx): Do not handle CONSTANT_P_RTX.
+ 	(struct cse_basic_block_data): Rename enum values to not
+ 	conflict with profile.h; update all uses.
+ 	* dbxout.c (dbxout_symbol_location): Don't mention integrate.c
+ 	in comments.
+ 	* defaults.h (TRAMPOLINE_ALIGNMENT): Move from function.c.
+ 	* diagnostic.h (debug_output_buffer, dump_generic_node,
+ 	print_generic_stmt, print_generic_stmt_indented,
+ 	print_generic_expr, print_generic_decl,
+ 	debug_generic_expr, debug_generic_stmt, debug_c_tree):
+ 	Declare.
+ 	* dominance.c: Cache immediate dominators.
+ 	* domwalk.c: New file.
+ 	* domwalk.h: New file.
+ 	* dwarf2out.c (is_fortran): Support DW_LANG_Fortran95.
+ 	(gen_subprogram_die): Generate a DIE for a named
+ 	return value.
+ 	(loc_descriptor_from_tree): Treat RESULT_DECL like VAR_DECL.
+ 	(add_location_or_const_value_attribute): Likewise.
+ 	(add_bound_info): Likewise.
+ 	(gen_decl_die): Likewise.
+ 	* emit-rtl.c (maybe_set_first_label_num): New.
+ 	(copy_most_rtx): Don't copy the integrated flag.
+ 	Copy the new return_val flag.
+ 	* et-forest.c (MAX_NODES): Define.
+ 	(record_path_before_1): Abort if len is greater than
+ 	MAX_NODES.
+ 	* except.c (gen_eh_region, gen_eh_region_cleanup, gen_eh_region_try,
+ 	gen_eh_region_catch, gen_eh_region_allowed,
+ 	gen_eh_region_must_not_throw, get_eh_region_number,
+ 	get_eh_region_may_contain_throw, get_eh_region_tree_label,
+ 	set_eh_region_tree_label, expand_resx_expr): New.
+ 	(expand_eh_region_start, expand_start_catch): Use them.
+ 	(expand_end_catch): Tidy.
+ 	(note_eh_region_may_contain_throw): Take region argument.
+ 	(note_current_region_may_contain_throw): New.
+ 	(get_exception_filter): Export.
+ 	(collect_eh_region_array): Export.
+ 	(remove_unreachable_regions): Check ERT_TRY based on reachability
+ 	of catches, not reachability of continue_label.  Never remove
+ 	ERT_MUST_NOT_THROW regions.
+ 	(collect_rtl_labels_from_trees): New.
+ 	(convert_from_eh_region_ranges): Use it.
+ 	(connect_post_landing_pads): Handle dying cleanups.
+ 	(struct reachable_info): Add callback data.
+ 	(add_reachable_handler): Invoke the callback.
+ 	(foreach_reachable_handler): New.
+ 	(reachable_handlers): Use it.
+ 	(arh_to_landing_pad, arh_to_label): New.
+ 	(can_throw_internal_1): Split out from can_throw_internal.
+ 	(can_throw_external_1): Similarly.
+ 	* except.h: Update.
+ 	* explow.c (emit_stack_save): Remove savearea mode check.
+ 	(update_nonlocal_goto_save_area): New.
+ 	(allocate_dynamic_stack_space): Use it.
+ 	(probe_stack_range): Never emit loop notes.
+ 	* expmed.c (extract_fixed_bit_field): Always propagate the
+ 	target for the shift if it is a REG.
+ 	* expr.c: Include tree-iterator.h
+ 	(is_zeros_p): Remove.
+ 	(categorize_ctor_elements_1, categorize_ctor_elements): New.
+ 	(count_type_elements): New.
+ 	(mostly_zeros_p): Use them.
+ 	(expr_wfl_stack): Remove.
+ 	(convert_move): Do nothing if to and from are the same.
+ 	(emit_block_move_via_loop): Don't emit LOOP notes.
+ 	(emit_move_insn): Don't handle CONSTANT_P_RTX.
+ 	(emit_move_insn_1): Don't generate inline warnings.
+ 	(expand_vars, expand_var): Split from ...
+ 	(expand_expr_1): ... here.
+ 	(expand_expr_real, expand_expr_real_1):  Use new macros
+ 	EXPR_LOCATION and EXPR_HAS_LOCATION.
+ 	* expr.h (simplify_builtin_fputs,
+ 	simplify_builtin_strcpy, simplify_builtin_strncpy,
+ 	expand_var, fixup_tail_calls,
+ 	update_nonlocal_goto_save_area): Declare.
+ 	(lookup_static_chain, expand_inline_function,
+ 	mark_seen_cases): Remove.
+ 	(prepare_call_address): Change type of 2nd argument to
+ 	rtx.
+ 	* final.c (profile_function): Update static chain test.
+ 	(final): Don't look at RTX_INTEGRATED_P.
+ 	* flags.h (flag_mudflap, flag_mudflap_threads,
+ 	flag_mudflap_ignore_reads, flag_tree_pre, flag_tree_ccp,
+ 	flag_tree_dce, flag_tree_combine_temps,
+ 	flag_tree_live_range_split, flag_tree_dom, flag_tree_ch,
+ 	flag_tree_dse, flag_tree_sra, flag_tree_copyrename,
+ 	flag_tree_points_to): Declare.
+ 	(enum pta_type): Declare.
+ 	* flow.c (lang_missing_noreturn_ok_p): Remove.
+ 	(check_function_return_warnings): Remove.
+ 	(update_life_info): Update comments.
+ 	(free_basic_block_vars): Don't call VARRAY_FREE for
+ 	basic_block_info.
+ 	(regno_uninitialized): Remove.
+ 	* fold-const.c (int_const_binop): Make extern.
+ 	(non_lvalue): Rely on build to set TREE_CONSTANT.
+ 	(operand_equal_p): Replace only_const argument with
+ 	flags.  Allow pure functions if OEP_PURE_SAME.
+ 	(fold): Use OEP_ONLY_CONST.
+ 	(invert_truthvalue) <NOP_EXPR> Break if argument is of
+ 	boolean type.
+ 	(fold_relational_hi_lo,
+ 	nondestructive_fold_binary_to_constant,
+ 	nondestructive_fold_unary_to_constant,
+ 	fold_read_from_constant_string): New.
+ 	* function.c (struct function): Remove calls_constant_p.
+ 	(current_function_calls_constant_p): Remove.
+ 	(inline_function_decl): Remove.
+ 	(put_var_into_stack): Don't use it.
+ 	(fix_lexical_addr): Likewise.
+ 	(inline_function_decl): Remove extern declaration.
+ 	(TRAMPOLINE_ALIGNMENT): Move to defaults.h.
+ 	(trampolines_created): Move to varasm.c.
+ 	(free_after_compilation): Update for removed fields.
+ 	(allocate_struct_function): Likewise.
+ 	(delete_handlers, lookup_static_chain): Remove.
+ 	(fix_lexical_addr): Don't consider non-local variable refs.
+ 	(trampoline_address): Remove.
+ 	(round_trampoline_addr): Move to builtins.c.
+ 	(adjust_trampoline_addr): Remove.
+ 	(expand_function_start): Update for changes to static chain
+ 	and nonlocal goto handling.
+ 	(initial_trampoline): Move to varasm.c.
+ 	(expand_function_end): Don't build trampolines or kill
+ 	unreferenced nonlocal goto labels.
+ 	(free_after_compilation): Don't set it.
+ 	(expand_function_end): Likewise.
+ 	(setjmp_vars_warning): Rename from
+ 	uninitialized_vars_warning, remove uninitialized vars warning.
+ 	(uninitialized_vars_warning): Remove old comment
+ 	and check for DECL_INITIAL, replace with a check of TREE_NO_WARNING
+ 	and do not call the langhook.
+ 	(expand_function_start, expand_function_end): Don't do
+ 	function instrumentation here.
+ 	(clear_block_marks): Rename from reorder_blocks_0, export.
+ 	(blocks_nreverse): Export.
+ 	(uninitialized_vars_warning): Use DECL_RTL_SET_P to test for presence
+ 	of rtl.
+ 	(reset_block_changes, record_block_change, finalize_block_changes,
+ 	check_block_change, free_block_changes): New functions.
+ 	(assign_parms): Setting of current_function_stdarg
+ 	moved ...
+ 	(allocate_struct_function): ... here.
+ 	* function.h (struct function): Remove x_nonlocal_labels,
+ 	x_nonlocal_goto_handler_slots, x_nonlocal_goto_stack_level,
+ 	x_context_display, x_trampoline_list, needs_context.
+ 	Add static_chain_decl, nonlocal_goto_save_area.
+ 	(struct function): Remove x_clobber_return_insn.
+ 	Add tail_call_emit field, last_label_uid,
+ 	unexpanded_var_list, dont_emit_block_notes,
+ 	ib_boundaries_block, function_end_locus and saved_tree/saved_args.
+ 	(clear_block_marks): Declare.
+ 	* gcc.c (MFWRAP_SPEC, MFLIB_SPEC): Add -fmudflapth support.
+ 	(mfwrap_spec, mflib_spec): Declare.
+ 	(cpp_unique_options, cc1_options): Ditto.
+ 	(default_compilers): Add .F and .f90.
+ 	(static_specs): Add mfwrap and mflib.
+ 	* gcse.c (want_to_gcse_p, gcse_constant_p): Don't handle
+ 	CONSTANT_RTX_P.
+ 	(reg_used_on_edge, reg_killed_on_edge, bypass_block):
+ 	Update to match insns field in struct edge_def.
+ 	* gdbinit.in (pgs, pge): Define.
+ 	* genattrtab.c (ATTR_PERMANENT_P): Use the return_val flag
+ 	instead of the integrated flag.
+ 	* gengtype-lex.l (IWOrD): Add HOST_WIDEST_INT
+ 	* gengtype-yacc.y (bitfieldlen): Add empty action.
+ 	(struct_fields): Accept unnamed bitfields.
+ 	(bitfieldlen): Split from ...
+ 	(bitfieldopt): ... here.
+ 	* gengtype.c (ifiles): Add tree-alias-type.h and
+ 	tree-flow.h.
+ 	* genrecog.c (validate_pattern): Do not handle
+ 	CONSTANT_P_RTX.
+ 	* gimple-low.c: New file.
+ 	* gimplify.c: New file.
+ 	* haifa-sched.c (priority): Do not handle CONSTANT_P_RTX.
+ 	(restore_line_notes): Do not set RTX_INTEGRATED_P.
+ 	* ifcvt.c (dead_or_predicable): Initialize local variable
+ 	'earliest'.
+ 	* input.h (expr_wfl_stack): Remove.
+ 	* integrate.c (INTEGRATE_THRESHOLD): Remove.
+ 	(setup_initial_hard_reg_value_integration): Likewise.
+ 	(initialize_for_inline): Likewise.
+ 	(note_modified_parmregs): Likewise.
+ 	(integrate_parm_decls): Likewise.
+ 	(process_reg_param): Likewise.
+ 	(save_parm_insns): Likewise.
+ 	(copy_insn_list): Likewise.
+ 	(copy_insn_notes): Likewise.
+ 	(compare_blocks): Likewise.
+ 	(find_block): Likewise.
+ 	(inlining): Likewise.
+ 	(function_cannot_inline_p): Likewise.
+ 	(parmdecl_map): Likewise.
+ 	(in_nonparam_insns): Likewise.
+ 	(save_for_inline): Likewise.
+ 	(FIXED_BASE_PLUS): Likewise.
+ 	(expand_inline_function): Likewise.
+ 	(copy_rtx_and_substitute): Don't look at map->integrating,
+ 	map->inline_target, and inlining, since we are never copying
+ 	for integrating.
+ 	Don't abort on RTX_INTEGRATED_P.
+ 	(old_fun): Remove.
+ 	(output_inline_function): Remove.
+ 	* integrate.h (struct inline_map): Remove fields integrating,
+ 	block_map, leaf_reg_map, inline_target, and local_return_label.
+ 	* jump.c (next_nonnote_insn_in_loop, duplicate_loop_exit_test,
+ 	copy_loop_headers, never_reached_warning): Removed.
+ 	(any_uncondjump_p): Reject nonlocal goto.
+ 	* langhooks-def.h (lhd_types_compatible_p,
+ 	lhd_expand_decl, lhd_gimplify_expr): Declare.
+ 	(LANG_HOOKS_EXPAND_DECL, LANG_HOOKS_TYPES_COMPATIBLE_P,
+ 	LANG_HOOKS_FUNCTION_MISSING_NORETURN_OK_P,
+ 	LANG_HOOKS_FUNCTION_LEAVE_NESTED,
+ 	LANG_HOOKS_FUNCTION_MISSING_NORETURN_OK_P,
+ 	LANG_HOOKS_GIMPLIFY_EXPR,
+ 	LANG_HOOKS_GIMPLE_BEFORE_INLINING,
+ 	LANG_HOOKS_EXPAND_DECL, LANG_HOOKS_TYPES_COMPATIBLE_P,
+ 	LANG_HOOKS_GIMPLIFY_EXPR,
+ 	LANG_HOOKS_GIMPLE_BEFORE_INLINING): Define.
+ 	(LANG_HOOKS_DECL_UNINIT, LANG_HOOKS_RTL_EXPAND_START,
+ 	LANG_HOOKS_RTL_EXPAND_STMT, LANG_HOOKS_RTL_EXPAND_END,
+ 	LANG_HOOKS_FUNCTION_LEAVE_NESTED,
+ 	LANG_HOOKS_RTL_EXPAND_INITIALIZER,
+ 	LANG_HOOKS_DECL_UNINIT,
+ 	LANG_HOOKS_RTL_EXPAND_INITIALIZER): Remove.
+ 	* langhooks.c: Include tree-simple.h.
+ 	(lhd_expand_decl): New.
+ 	(lhd_types_compatible_p): New.
+ 	(lhd_decl_uninit): Remove.
+ 	(lhd_gimplify_expr): New.
+ 	* langhooks.h (struct lang_hooks_for_rtl_expansion):
+ 	Remove.
+ 	(struct lang_hooks_for_functions): Add field
+ 	missing_noreturn_ok_p.
+ 	(struct lang_hooks): Add field expand_decl,
+ 	types_compatible_p, gimplify_expr and
+ 	gimple_before_inlining.
+ 	Remove fields decl_uninit and rtl_expand
+ 	* opts.c (decode_options): Set flag_tree_ccp,
+ 	flag_tree_dce, flag_tree_dom, flag_tree_dse,
+ 	flag_tree_pre, flag_tree_ter,
+ 	flag_tree_live_range_split, flag_tree_sra,
+ 	flag_tree_copyrename and flag_tree_ch at -O1 and higher.
+ 	(common_handle_option): Handle OPT_fdump_, OPT_fmudflap,
+ 	OPT_fmudflapth, OPT_fmudflapir,
+ 	OPT_ftree_based_profiling, OPT_ftree_ccp, OPT_ftree_dce,
+ 	OPT_ftree_combine_temps, OPT_ftree_ter, OPT_ftree_lrs,
+ 	OPT_ftree_dominator_opts, OPT_ftree_copyrename,
+ 	OPT_ftree_ch, OPT_ftree_dse, OPT_ftree_sra,
+ 	OPT_ftree_points_to_ and OPT_ftree_pre.
+ 	* output.h (regno_uninitialized, find_basic_blocks,
+ 	cleanup_cfg, delete_unreachable_blocks,
+ 	check_function_return_warnings): Remove.
+ 	* params.def (PARAM_MAX_INLINE_INSNS_RECURSIVE,
+ 	PARAM_MAX_INLINE_INSNS_RECURSIVE_AUTO,
+ 	PARAM_MAX_INLINE_RECURSIVE_DEPTH,
+ 	PARAM_MAX_INLINE_RECURSIVE_DEPTH_AUTO,
+ 	PARAM_GLOBAL_VAR_THRESHOLD, PARAM_MAX_ALIASED_VOPS):
+ 	* params.h (GLOBAL_VAR_THRESHOLD, MAX_ALIASED_VOPS):
+ 	Define.
+ 	* passes.c (rest_of_decl_compilation):
+ 	(rest_of_handle_sibling_calls): Remove.
+ 	(rest_of_handle_inlining): Remove.
+ 	(rest_of_handle_gcse): Do not run
+ 	purge_builtin_constant_p.
+ 	(rest_of_compilation): Update.
+ 	Do not call copy_loop_headers.
+ 	Do rtl-based profiling only when
+ 	!flag_tree_based_profiling.  Register rtl-based profiling
+ 	hooks.
+ 	* predict.c:  Include tree-flow.h, ggc.h, tree-dump.h
+ 	(predicted_by_p): Rename to ...
+ 	(rtl_predicted_by_p): .. this one; make global
+ 	(tree_predicted_by_p): New.
+ 	(dump_prediction): Add FILE argument.
+ 	(predict_edge): Rename to ...
+ 	(rtl_predict_edge): .. this one.
+ 	(tree_predict_edge): New.
+ 	(combine_predictions_for_insn): Update calls of predict_edge.
+ 	(predict_loops): Break out from ...
+ 	(estimate_probability): ... here; update comments; move updating
+ 	of unknown probabilities from ...
+ 	(estimate_bb_frequencies): ... here.
+ 	(combine_predictions_for_bb): New.
+ 	(tree_predict_by_opcode): New.
+ 	(tree_estimate_probability): New.
+ 	* predict.def (PRED_TREE_POINTER, PRED_TREE_OPCODE_POSITIVE,
+ 	PRED_TREE_OPCODE_NONEQUAL, PRED_TREE_FPOPCODE): New predictors.
+ 	* predict.h: Add include guard.
+ 	(predict_edge, predict_edge_def): Move prototypes to basic_block.h
+ 	* pretty-print.c (pp_write_text_to_stream): Make extern.
+ 	* pretty-print.h (pp_write_text_to_stream): Declare.
+ 	* print-rtl.c (print_rtx): Don't print the integrated flag.
+ 	Print the return_val flag.
+ 	* print-tree.c: Use TREE_FILENAME and TREE_LINENO instead
+ 	of DECL_SOURCE_FILE and DECL_SOURCE_LINE respectively.
+ 	Remove support for EXPR_WITH_FILE_LOCATION nodes.
+ 	(print_node): Print TREE_INVARIANT and TREE_VISITED.
+ 	* profile.c: Include cfghooks.h, tree-flow.h.
+ 	(profile_hooks): New.
+ 	(profile_dump_file): New.
+ 	(instrument_edges): Use hooks instead of RTL-specific code.
+ 	(instrument_values): Ditto.
+ 	(get_exec_counts): Ditto.
+ 	(compute_branch_probabilities): Ditto.
+ 	(compute_value_histograms): Ditto.
+ 	(branch_prob): Ditto.
+ 	(find_spanning_tree): Ditto.
+ 	(end_branch_prob): Ditto.
+ 	(gen_edge_profiler): Move to rtl-profile.c (rtl_gen_edge_profiler).
+ 	(gen_interval_profiler): Ditto (rtl_gen_interval_profiler).
+ 	(gen_pow2_profiler): Ditto (rtl_gen_pow2_profiler).
+ 	(gen_one_value_profiler): Ditto (rtl_gen_one_value_profiler).
+ 	(tree_register_profile_hooks): New.
+ 	(rtl_register_profile_hooks): New.
+ 	* ra-rewrite.c (rewrite_program): Clear variable info.
+ 	* recog.c (immediate_operand): Do not handle CONSTANT_P_RTX.
+ 	* regs.h: Add include guards.
+ 	* reload.c (decompose): Clear val using memset.
+ 	* rtl.def (CONSTANT_P_RTX): Remove.
+ 	* rtl.h (CONSTANT_P): Do not handle CONSTANT_P_RTX.
+ 	(copy_loop_headers): Remove.
+ 	(struct rtx_def): Replace the integrated flag with the
+ 	return_val flag.
+ 	(maybe_set_first_label_num): Declare.
+ 	(init_branch_prob): Move declaration to value-prof.h.
+ 	(end_branch_prob): Ditto.
+ 	(branch_prob): Ditto.
+ 	(never_reached_warning): Don't declare it.
+ 	* rtlanal.c (get_related_value): Initialize get_jump_table_offset
+ 	(hoist_insn_to_edge): Update to match field insns in
+ 	struct edge_def.
+ 	* sbitmap.c (sbitmap_realloc): New.
+ 	* sbitmap.h (sbitmap_realloc): Declare.
+ 	* sibcall.c: Remove file.
+ 	* simplify-rtx.c (simplify_rtx): Do not handle
+ 	CONSTANT_P_RTX.
+ 	* stmt.c (parse_output_constraint): Don't warn for read-write
+ 	memory operand.
+ 	(tail_recursion_args): Use types_compatible_p langhook.
+ 	(force_label_rtx): Don't look at inline_function_decl.
+ 	(label_rtx): Set LABEL_PRESERVE_P appropriately.
+ 	(expand_label): Handle DECL_NONLOCAL and FORCED_LABEL.
+ 	(declare_nonlocal_label): Remove.
+ 	(expand_goto): Don't handle nonlocal gotos.
+ 	(expand_nl_handler_label): Remove.
+ 	(expand_nl_goto_receivers): Remove.
+ 	(expand_end_bindings): Don't expand_nl_goto_receivers.  Use
+ 	update_nonlocal_goto_save_area.
+ 	(expand_expr_stmt_value): Check TREE_NO_WARNING.
+ 	(warn_if_unused_value): Likewise.
+ 	(expand_start_loop, expand_loop_continue_here,
+ 	expand_end_loop): Don't create loop notes.
+ 	(all_cases_count, BITARRAY_TEST, BITARRAY_SET,
+ 	mark_seen_cases, check_for_full_enumeration_handling): Remove.
+ 	(expand_end_case_type): Don't do warn_switch handling.
+ 	(pushcase, pushcase_range) Update add_case_node calls.
+ 	(add_case_node): Add dont_expand_label argument.
+ 	(same_case_target_p): Don't search rtl.
+ 	(expand_start_bindings_and_block, expand_end_bindings):
+ 	Don't emit block notes when dont_emit_block_notes.
+ 	(using_eh_for_cleanups_p): Export.
+ 	(expand_return): Allow any typed rhs.
+ 	(expand_stack_alloc): New.
+ 	(expand_stack_save, expand_stack_restore): New.
+ 	(containing_blocks_have_cleanups_or_stack_level): New
+ 	function.
+ 	(asm_op_is_mem_input): New fn.
+ 	(expand_asm_expr): New fn.
+ 	(warn_if_unused_value): Check operand 0 of SAVE_EXPR
+ 	nodes.
+ 	* stor-layout.c (layout_type): Just return if type is
+ 	error_mark_node.
+ 	(update_alignment_for_field): Export.
+ 	(variable_size): We don't care about global_bindings_p if
+ 	the frontend doesn't want a list of the expressions.
+ 	* system.h: Poison INTEGRATE_THRESHOLD.
+ 	* timevar.def (TV_TREE_GIMPLIFY, TV_TREE_EH, TV_TREE_CFG,
+ 	TV_TREE_CLEANUP_CFG, TV_TREE_PTA, TV_TREE_MAY_ALIAS,
+ 	TV_TREE_INSERT_PHI_NODES, TV_TREE_SSA_REWRITE_BLOCKS,
+ 	TV_TREE_SSA_OTHER, TV_TREE_OPS,
+ 	TV_TREE_SSA_DOMINATOR_OPTS, TV_TREE_SRA, TV_TREE_CCP,
+ 	TV_TREE_SPLIT_EDGES, TV_TREE_PRE, TV_TREE_PHIOPT,
+ 	TV_TREE_FORWPROP, TV_TREE_DCE, TV_TREE_CD_DCE,
+ 	TV_TREE_DSE, TV_TREE_LOOP, TV_TREE_CH,
+ 	TV_TREE_SSA_TO_NORMAL, TV_TREE_SSA_TO_NORMAL,
+ 	TV_TREE_NRV, TV_TREE_COPY_RENAME, TV_TREE_SSA_VERIFY,
+ 	TV_TREE_STMT_VERIFY, TV_DOM_FRONTIERS,
+ 	TV_CONTROL_DEPENDENCES): Define.
+ 	* toplev.c: Include tree-alias-common.h
+ 	(current_file_decl, flag_mudflap, flag_mudflap_threads,
+ 	flag_mudflap_ignore_reads, flag_tree_based_profiling,
+ 	flag_tree_gvn, flag_tree_points_to, flag_tree_ccp,
+ 	flag_tree_dce, flag_tree_ch, flag_tree_sra,
+ 	flag_tree_combine_temps, flag_tree_ter,
+ 	flag_tree_live_range_split, flag_tree_dom,
+ 	flag_tree_copyrename, flag_tree_dse): Declare.
+ 	(f_options): Add tree-based-profiling, tree-gvn,
+ 	tree-pre, tree-ccp, tree-dce,
+ 	tree-dominator-opts, tree-copyrename, tree-dse,
+ 	tree-combine-temps, tree-ter, tree-lrs and tree-ch.
+ 	(wrapup_global_declarations): Don't output nested inlined functions.
+ 	(general_init): Call init_tree_optimization_passes.
+ 	(process_options): Sorry for -ftree-based-profiling plus
+ 	-ftest-coverage or -fprofile-values.
+ 	* toplev.h (init_tree_optimization_passes,
+ 	flag_tree_based_profiling): Declare.
+ 	* tracer.c (tail_duplicate): Use cfghooks for bb duplication.
+ 	* tree-alias-ander.c: New file.
+ 	* tree-alias-ander.h: New file.
+ 	* tree-alias-common.c: New file.
+ 	* tree-alias-common.h: New file.
+ 	* tree-alias-type.c: New file.
+ 	* tree-alias-type.h: New file.
+ 	* tree-browser.c: New file.
+ 	* tree-browser.def: New file.
+ 	* tree-cfg.c: New file.
+ 	* tree-complex.c: New file.
+ 	* tree-dfa.c: New file.
+ 	* tree-dump.c (dump_enable_all): New.
+ 	(dequeue_and_dump): Do not handle EXPR_WITH_FILE_LOCATION.
+ 	(dump_node): Remove const from field suffix and swtch.
+ 	(dump_files): Add null entry, .generic, .nested, .vcg,
+ 	.xml and a match-all entry.
+ 	(extra_dump_files, extra_dump_files_in_use,
+ 	extra_dump_files_alloced): Declare
+ 	(dump_option_value_info): Add raw, details, stats,
+ 	blocks, vops, lineno, uid and all.
+ 	(dump_register): New.
+ 	(get_dump_file_info): New.
+ 	(dump_begin): Call it.
+ 	Do nothing for TDI_none.
+ 	(dump_begin): Include phase number in dump filename.
+ 	(dump_enable_all): New.
+ 	(dump_switch_p_1): Split out from dump_switch_p.
+ 	(dump_switch_p): Handle extra_dump_files.
+ 	Start our scan at TDI_none + 1.
+ 	If -fdump-tree-all was given, call dump_enable_all.
+ 	* tree-dump.h: Include splay-tree.h.
+ 	(dump_function, dump_function_to_file, dump_register):
+ 	Declare.
+ 	* tree-eh.c: New file.
+ 	* tree-flow-inline.h: New file.
+ 	* tree-flow.h: New file.
+ 	* tree-inline.c: Re-write to handle inlining on GIMPLE.
+ 	* tree-inline.h (walk_tree,
+ 	walk_tree_without_duplicates): Move to tree.h.
+ 	(estimate_num_insns): Declare.
+ 	* tree-into-ssa.c: New file.
+ 	* tree-iterator.c: New file.
+ 	* tree-iterator.h: New file.
+ 	* tree-mudflap.c: New file.
+ 	* tree-mudflap.h: New file.
+ 	* tree-nested.c: New file.
+ 	* tree-nomudflap.c: New file.
+ 	* tree-nrv.c: New file.
+ 	* tree-optimize.c (dump_flags, vars_to_rename,
+ 	in_gimple_form, all_passes, pass_gimple,
+ 	pass_rebuild_bind, pass_all_optimizations, pass_del_cfg): Declare.
+ 	(execute_gimple, execute_rebuild_bind,
+ 	gate_all_optimizations, execute_del_cfg,
+ 	register_one_dump_file, register_dump_files, dup_pass_1,
+ 	init_tree_optimization_passes, execute_todo,
+ 	execute_one_pass, execute_pass_list): New.
+ 	(clear_decl_rtl): Remove.
+ 	(tree_rest_of_compilation): Update to use tree
+ 	optimizers.
+ 	* tree-outof-ssa.c: New file.
+ 	* tree-pass.h: New file.
+ 	* tree-phinodes.c: New file.
+ 	* tree-pretty-print.c: New file.
+ 	* tree-profile.c: New file.
+ 	* tree-simple.c: New file.
+ 	* tree-simple.h: New file.
+ 	* tree-sra.c: New file.
+ 	* tree-ssa-alias.c: New file.
+ 	* tree-ssa-ccp.c: New file.
+ 	* tree-ssa-copy.c: New file.
+ 	* tree-ssa-copyrename.c: New file.
+ 	* tree-ssa-dce.c: New file.
+ 	* tree-ssa-dom.c: New file.
+ 	* tree-ssa-dse.c: New file.
+ 	* tree-ssa-forwprop.c: New file.
+ 	* tree-ssa-live.c: New file.
+ 	* tree-ssa-live.h: New file.
+ 	* tree-ssa-loop.c: New file.
+ 	* tree-ssa-operands.c: New file.
+ 	* tree-ssa-operands.h: New file.
+ 	* tree-ssa-phiopt.c: New file.
+ 	* tree-ssa-pre.c: New file.
+ 	* tree-ssa.c: New file.
+ 	* tree-ssanames.c: New file.
+ 	* tree-tailcall.c: New file.
+ 	* tree.c: Include tree-iterator.h, basic-block.h and
+ 	tree-flow.h.
+ 	(tree_node_kind): Add phi_nodes and ssa names.
+ 	(tree_size): Handle PHI_NODE, EPHI_NODE, SSA_NAME,
+ 	EUSE_NODE, EKILL_NODE, EEXIT_NODE and STATEMENT_LIST.
+ 	(make_node_stat): Handle PHI_NODE and SSA_NAME.
+ 	<'c'> Set TREE_INVARIANT.
+ 	(copy_node_stat): Abort if trying to copy a
+ 	STATEMENT_LIST.
+ 	Clear TREE_VISITED.
+ 	Clear annotation field.
+ 	(build_constructor): Copy TREE_INVARIANT from vals.
+ 	Don't clear TREE_CONSTANT.
+ 	(expr_first, expr_last, expr_length): Remove.
+ 	(staticp): Pass unknown component references to the language.
+ 	(save_expr): Check TREE_INVARIANT instead of TREE_CONSTANT.
+ 	(skip_simple_arithmetic): Likewise.
+ 	(stabilize_reference_1): Likewise.
+ 	(tree_node_structure): Handle PHI_NODE, EPHI_NODE,
+ 	EUSE_NODE, EKILL_NODE, EEXIT_NODE, SSA_NAME and
+ 	STATEMENT_LIST.
+ 	(lhd_unsave_expr_now): Remove.
+ 	(unsafe_for_reeval): Handle LABEL_EXPR and BIND_EXPR.
+ 	(recompute_tree_invarant_for_addr_expr): New.
+ 	(build1_stat): Clear EXPR_LOCUS and TREE_BLOCK.
+ 	Call recompute_tree_invarant_for_addr_expr.
+ 	Set TREE_INVARIANT accordingly.
+ 	(build2_stat): Don't handle CALL_EXPR.
+ 	(build3_stat): Don't call build2_stat for CALL_EXPRs.
+ 	(build_expr_wfl): Remove.
+ 	(annotate_with_file_line, annotate_with_locus): New.
+ 	(simple_cst_equal): Call simple_cst_list_equal to compare
+ 	CONSTRUCTOR_ELTS pointers.
+ 	(iterative_hash_expr): Don't hash types associated
+ 	with conversions.  Instead hash on the signedness of the
+ 	toplevel object and the operand of the conversion.
+ 	(dump_tree_statistics): Call ssanames_print_statistics
+ 	and phinodes_print_statistics.
+ 	(ephi_node_elt_check_failed, phi_node_elt_check_failed,
+ 	add_var_to_bind_expr, build_empty_stmt, is_essa_node,
+ 	needs_to_live_in_memory): New.
+ 	(initializer_zerop): Handle VECTOR_CST.  Don't check
+ 	AGGREGATE_TYPE_P for CONSTRUCTOR.
+ 	* tree.def (FILTER_EXPR, CASE_LABEL_EXPR, RESX_EXPR,
+ 	SSA_NAME, EUSE_NODE, EKILL_NODE, EPHI_NODE, EEXIT_NODE,
+ 	PHI_NODE, CATCH_EXPR, EH_FILTER_EXPR, STATEMENT_LIST): Define.
+ 	(GOTO_SUBROUTINE_EXPR): Change type to 's'.
+ 	(CALL_EXPR): Add another operand.
+ 	(EXPR_WITH_FILE_LOCATION): Remove.
+ 	(SWITCH_EXPR): Add another operand.
+ 	* tree.h: Update various comments.
+ 	(union tree_ann_d): Forward declare.
+ 	(struct tree_common): Add fields nowarning_flag,
+ 	invariant_flag and visited.
+ 	(EREF_NODE_CHECK, EPHI_NODE_ELT_CHECK,
+ 	PHI_NODE_ELT_CHECK, EREF_NODE_CHECK, PHI_NODE_ELT_CHECK,
+ 	EPHI_NODE_ELT_CHECK, TREE_BLOCK,
+ 	STRIP_USELESS_TYPE_CONVERSION, CALL_EXPR_TAILCALL,
+ 	TREE_NO_WARNING, FORCED_LABEL, TREE_INVARIANT,
+ 	IS_EMPTY_STMT, EXPR_LOCUS, SET_EXPR_LOCUS, EXPR_FILENAME,
+ 	EXPR_LINENO, EXPR_LOCATION, EXPR_HAS_LOCATION,
+ 	EXIT_EXPR_COND, SWITCH_COND, SWITCH_BODY, SWITCH_LABELS,
+ 	CASE_LOW, CASE_HIGH, CASE_LABEL, BIND_EXPR_VARS,
+ 	BIND_EXPR_BODY, BIND_EXPR_BLOCK, GOTO_DESTINATION,
+ 	ASM_STRING, ASM_OUTPUTS, ASM_INPUTS, ASM_CLOBBERS,
+ 	ASM_INPUT_P, ASM_VOLATILE_P, COND_EXPR_COND,
+ 	COND_EXPR_THEN, COND_EXPR_ELSE, LABEL_EXPR_LABEL,
+ 	CATCH_TYPES, CATCH_BODY, EH_FILTER_TYPES,
+ 	EH_FILTER_FAILURE, EH_FILTER_MUST_NOT_THROW,
+ 	SSA_NAME_VAR, SSA_NAME_DEF_STMT, SSA_NAME_VERSION,
+ 	SSA_NAME_OCCURS_IN_ABNORMAL_PHI, SSA_NAME_IN_FREE_LIST,
+ 	PHI_RESULT, PHI_REWRITTEN, PHI_NUM_ARGS,
+ 	PHI_ARG_CAPACITY, PHI_ARG_ELT, PHI_ARG_EDGE, PHI_ARG_DEF,
+ 	EREF_PROCESSED, EREF_ID, EREF_NAME, EREF_STMT,
+ 	EREF_RELOAD, EREF_SAVE, EREF_CLASS, EREF_INJURED,
+ 	EREF_TEMP, EUSE_DEF, EUSE_PHIOP, EUSE_INSERTED,
+ 	EUSE_LVAL, EPHI_NUM_ARGS, EPHI_ARG_CAPACITY,
+ 	EPHI_ARG_ELT, EPHI_ARG_EDGE, EPHI_ARG_PRED, EPHI_ARG_DEF,
+ 	EPHI_ARG_INJURED, EPHI_ARG_DELAYED_RENAME,
+ 	EPHI_ARG_HAS_REAL_USE, EPHI_ARG_STOPS,
+ 	EPHI_ARG_PROCESSED2, EPHI_IDENTITY, EPHI_IDENT_INJURED,
+ 	EPHI_REP_OCCUR_KNOWN, EPHI_IDENTICAL_TO, EPHI_DOWNSAFE,
+ 	EPHI_CANT_BE_AVAIL, EPHI_DEAD, EPHI_USES, EPHI_STOPS,
+ 	TREE_VISITED, SSA_VAR_P, DECL_NUM_STMTS,
+ 	DECL_HARD_REGISTER, DECL_PTA_ALIASVAR, LABEL_DECL_UID,
+ 	DECL_NEEDS_TO_LIVE_IN_MEMORY_INTERNAL,
+ 	STATEMENT_LIST_HEAD, STATEMENT_LIST_TAIL, TDF_RAW,
+ 	TDF_DETAILS, TDF_STATS, TDF_BLOCKS, TDF_VOPS, TDF_LINENO,
+ 	TDF_UID,): Define.
+ 	(TREE_NO_UNUSED_WARNING, EXPR_WFL_EMIT_LINE_NOTE,
+ 	EXPR_WFL_NODE, EXPR_WFL_FILENAME_NODE, EXPR_WFL_FILENAME,
+ 	EXPR_WFL_LINECOL, EXPR_WFL_LINENO, EXPR_WFL_COLNO,
+ 	EXPR_WFL_SET_LINECOL): Remove.
+ 	(phi_node_elt_check_failed, ephi_node_elt_check_failed,
+ 	make_phi_node, init_phinodes, fini_phinodes,
+ 	release_phi_node, phinodes_print_statistics,
+ 	init_ssanames, fini_ssanames, make_ssa_name,
+ 	release_ssa_name, ssanames_print_statistics,
+ 	annotate_with_file_line, build_empty_stmt,
+ 	annotate_with_locus, expr_only, categorize_ctor_elements,
+ 	count_type_elements, add_var_to_bind_expr, is_essa_node,
+ 	expand_stack_alloc, expand_stack_save,
+ 	expand_stack_restore, add_case_node, operand_equal_p,
+ 	nondestructive_fold_unary_to_constant,
+ 	nondestructive_fold_binary_to_constant,
+ 	fold_read_from_constant_string, int_const_binop,
+ 	strip_float_extensions, simplify_builtin, c_strlen,
+ 	recompute_tree_invarant_for_addr_expr,
+ 	needs_to_live_in_memory, make_vector,
+ 	setjmp_vars_warning, update_alignment_for_field,
+ 	expand_asm_expr, asm_op_is_mem_input,
+ 	containing_blocks_have_cleanups_or_stack_level,
+ 	create_artificial_label, gimplify_function_tree,
+ 	get_name, unshare_expr, walk_tree,
+ 	walk_tree_without_duplicates, in_gimple_form): Declare.
+ 	(struct tree_exp): Add fields locus and block.
+ 	(struct tree_ssa_name, struct edge_def, struct
+ 	tree_phi_node, struct tree_eref_common, struct
+ 	tree_euse_node, struct ephi_arg_d, struct tree_ephi_node,
+ 	union alias_var_def, struct tree_statement_list_node,
+ 	struct tree_statement_list, enum operand_equal_flag): Declare.
+ 	(enum tree_node_structure_enum): Add TS_SSA_NAME,
+ 	TS_PHI_NODE, TS_EPHI_NODE, TS_EUSE_NODE, TS_EREF_NODE,
+ 	TS_STATEMENT_LIST.
+ 	(union tree_node): Add fields ssa_name, phi, eref, ephi,
+ 	euse and stmt_list.
+ 	(function_cannot_inline_p, uninitialized_vars_warning,
+ 	save_for_inline, output_inline_function, all_cases_count,
+ 	check_for_full_enumeration_handling,
+ 	declare_nonlocal_label): Remove.
+ 	(enum tree_dump_index): Add TDI_none, TDI_tu,
+ 	TDI_generic, TDI_nested, TDI_vcg, TDI_xml.
+ 	* unroll.c (unroll_loop): Don't clear map->inline_target.
+ 	* unwind-sjlj.c (uw_install_context): Make a proper static inline
+ 	function.
+ 	* value-prof.c (value_prof_hooks): New.
+ 	(find_values_to_profile): Rename to rtl_find_values_to_profile.
+ 	Move rtl-specific bits in from branch_prob.
+ 	(value_profile_transformations): Rename to
+ 	rtl_value_profile_transformations.
+ 	(struct value_prof_hooks): New.
+ 	(rtl_value_prof_hooks): New.
+ 	(rtl_register_value_prof_hooks): New.
+ 	(tree_find_values_to_profile): New stub.
+ 	(tree_value_profile_transformations): New stub.
+ 	(tree_value_prof_hooks): New stub.
+ 	(tree_register_value_prof_hooks): New stub.
+ 	(find_values_to_profile): New.
+ 	(value_profile_transformations): New.
+ 	* value-prof.h: Add multiple inclusion guard.
+ 	(struct histogram_value): Change rtx fields to void *.
+ 	(rtl_register_value_prof_hooks): New declaration.
+ 	(tree_register_value_prof_hooks): New declaration.
+ 	(find_values_to_profile): New declaration.
+ 	(free_profiled_values): New declaration.
+ 	(value_profile_transformations): New declaration.
+ 	(struct profile_hooks): New declaration.
+ 	(init_branch_prob): Declaration moved from rtl.h.
+ 	(branch_prob): Declaration moved from rtl.h.
+ 	(end_branch_prob): Declaration mooved from rtl.h.
+ 	(tree_register_profile_hooks): New declaration.
+ 	(rtl_register_profile_hooks): New declaration.
+ 	(tree_profile_hooks): New declaration.
+ 	(rtl_profile_hooks): New declaration.
+ 	* varasm.c: Include tree-mudflap.h.
+ 	(TRAMPOLINE_ALIGNMENT): Remove.
+ 	(make_decl_rtl): Call mudflap_enqueue_decl.
+ 	(assemble_static_space):
+ 	(assemble_trampoline_template): Set and return
+ 	TRAMPOLINE_ALIGNMENT.
+ 	* varray.c (element): Add GENERIC_PTR_NOGC entry.
+ 	Add entry for 'tree *'.
+ 	Add entry for struct edge_def *.
+ 	(varray_copy): New.
+ 	* varray.h (enum varray_data_enum): Add
+ 	VARRAY_DATA_GENERIC_NOGC, VARRAY_DATA_EDGE and
+ 	VARRAY_DATA_TREE_PTR.
+ 	(union varray_data_tag): Corresponding changes.
+ 	(VARRAY_GENERIC_PTR_NOGC_INIT, VARRAY_EDGE_INIT,
+ 	VARRAY_TREE_PTR_INIT, VARRAY_GENERIC_PTR_NOGC,
+ 	VARRAY_EDGE, VARRAY_TREE_PTR,
+ 	VARRAY_PUSH_GENERIC_PTR_NOGC, VARRAY_PUSH_EDGE,
+ 	VARRAY_PUSH_TREE_PTR, VARRAY_TOP_GENERIC_PTR_NOGC,
+ 	VARRAY_TOP_EDGE, VARRAY_TOP_TREE_PTR): Define.
+ 
+ 	* config/*/*: Various updates for changed macros, tree
+ 	codes, etc.  Check ChangeLog.tree-ssa.
+ 
+ 	* doc/cfg.texi: New file.
+ 	* doc/tree-ssa.texi: New file.
+ 	* doc/c-tree.texi: Document new codes.
+ 	* doc/gccint.texi: Include new files.
+ 	* doc/install.texi: Document new features.
+ 	* doc/invoke.texi: Document new switches.
+ 	* doc/passes.texi: Document new passes.
+ 	* doc/rtl.texi: Update changed RTL codes.
+ 	* doc/sourcebuild.texi: Update build instructions.
+ 	* doc/standards.texi: Document Fortran changes.
+ 	* doc/tm.texi: Update.
+ 
+ 2004-05-12  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	Replace several arrays with a struct of arrays.
+ 	* combine.c (struct reg_stat): New.
+ 	(init_reg_last_arrays): Renamed to...
+ 	(init_reg_last): ...this.  Callers adjusted.
+ 	(reg_stat): New.
+ 	(combine_instructions): Allocate it and use it.
+ 	(reg_last_death, reg_last_set, reg_last_set_value,
+ 	reg_last_set_label, reg_last_set_table_tick,
+ 	reg_last_set_invalid, reg_nonzero_bits, reg_sign_bit_copies,
+ 	reg_last_set_mode, reg_last_set_nonzero_bits,
+ 	reg_last_set_sign_bit_copies): Replace throughout
+ 	with items of reg_stat.
+ 
+ 2004-05-11  Kaz Kojima  <kkojima@gcc.gnu.org>
+ 
+ 	PR optimization/15100
+ 	* combine.c (distribute_notes): Don't create a dangling
+ 	REG_LIBCALL/REG_RETVAL note.
+ 
+ 2004-05-11  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* config/rs6000/spe.md (spe_evneg): Rename to negv2si2.
+ 
+ 	* config/rs6000/rs6000.c (bdesc_1arg): Change spe_evneg to
+ 	negv2si2.
+ 
+ 2004-05-11  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* doc/md.texi (Standard Names): Fix typo in vec_init description.
+ 
+ 2004-05-11  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* doc/gty.texi (GTY Options): Clarify example.
+ 
+ 2004-05-11  Fariborz Jahanian  <fjahanian@apple.com>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_handle_altivec_attribute):
+ 	Add const qualifier to altivec vector type if one is needed.
+ 
+ 2004-05-11  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* flags.h (flag_short_enums): Update comment.
+ 	* opts.c (decode_options): Set flag_short_enums to 2.
+ 	* toplev.c (flag_short_enums): Update comment.
+ 	(process_options): Call default_short_enums target hook.
+ 
+ 2004-05-11  Andrew Pinski  <pinskia@gcc.gnu.org>
+ 
+ 	PR target/14063
+ 	* config/rs6000/altivec.md (altivec_dssall):
+ 	Change to unspec_volatile.
+ 	(altivec_dss): Likewise.
+ 
+ 2004-05-10  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* config/rs6000/altivec.md ("one_cmplv16qi2"): Change vnot to
+ 	vnor.
+ 	("one_cmplv8hi2"): Same.
+ 	("one_cmplv4si2"): Same.
+ 
+ 2004-05-10  Kaz Kojima  <kkojima@gcc.gnu.org>
+ 
+ 	PR target/15130
+ 	* config/sh/sh-protos.h (sh_expand_epilogue): Change prototype.
+ 	* config/sh/sh.c (output_stack_adjust): Take the sibcall epilogue
+ 	into account.  Compute the correct number of general registers
+ 	for the return value.  Generate a special push/pop sequence when
+ 	failing to get a temporary register for non SHmedia epilogue.
+ 	(sh_expand_epilogue): Add an argument to show whether it's for
+ 	sibcall or not.  Set the 3rd argument of output_stack_adjust to
+ 	-1 if needed.
+ 	(sh_need_epilogue): Call sh_expand_epilogue with 0.
+ 	* config/sh/sh.md (sibcall_epilogue): Call sh_expand_epilogue
+ 	with 1.
+ 	(epilogue): Call sh_expand_epilogue with 0.
+ 
+ 2004-05-10  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* gcse.c (eliminate_partially_redundant_loads): Instead of returning early,
+ 	goto a cleanup label.  After the cleanup, free the allocated memory.
+ 
+ 2004-05-10  Ziemowit Laski  <zlaski@apple.com>
+ 
+ 	* config/rs6000/altivec.h (vec_sld): Add overloads for
+ 	argument/return types of 'vector bool int', 'vector bool short'
+ 	and 'vector bool char'.
+ 
+ 2004-05-10  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* c-decl.c (store_parm_decls_newstyle): Correct test for a
+ 	nested function.
+ 
+ 2004-05-10  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* read-rtl.c (read_rtx): Allow 's' and 'T' strings to be omitted,
+ 	treating missing ones as "".
+ 	* config/mips/mips.md: Remove constraints from match_operands and
+ 	match_scratches if they appear in define_expands (except reload*),
+ 	define_peephole2s, define_splits or attribute specifications.
+ 	* config/mips/7000.md, config/mips/sb1.md: Remove match_operand
+ 	constraint strings.
+ 
+ 2004-05-10  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* config/rs6000/rs6000.c (function_arg_boundary): Always align
+ 	AltiVec vectors.
+ 	(function_arg_advance): Pass TARGET_32BIT -mabi=no-altivec AltiVec
+ 	vectors by refererence.  Align the same for TARGET_64BIT to a 16
+ 	byte boundary.  Remove useless code.  Add function comment.
+ 	(function_arg): Similarly.  Move gpr rs6000_mixed_function_arg
+ 	call to where it belongs.
+ 	(function_arg_partial_nregs): Return true for all TARGET_32BIT
+ 	-mabi=no-altivec AltiVec vectors.  Fix debug output.
+ 	(rs6000_va_arg): Adjust for AltiVec change.
+ 
+ 2004-05-10  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/arm.c (arm_promote_prototypes): Use TARGET_AAPCS_BASED.
+ 	* config/arm/arm.h (TARGET_AAPCS_BASED): Define.
+ 	(TARGET_DOUBLEWORD_ALIGN): Use it.
+ 	(WCHAR_TYPE): Define.
+ 	(WCHAR_SIZE_TYPE): Define.
+ 	(SIZE_TYPE): Define.
+ 
+ 2004-05-10  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* config/rs6000/rs6000.c (function_arg_boundary): Align for ABI_V4
+ 	when size is 8 bytes.
+ 	(function_arg_advance): Account for stack space used by AltiVec
+ 	args when -mabi=altivec.  Simplify alignment calculations.  For
+ 	ABI_V4, pass AltiVec vectors by reference when -mabi=no-altivec.
+ 	(function_arg): Similarly.
+ 	(function_arg_pass_by_reference): True for ABI_V4 AltiVec when
+ 	not AltiVec ABI.
+ 	(rs6000_va_arg): Correct fp arg test.  Adjust for AltiVec change.
+ 	Correct alignment, and align before testing reg count.  Remove
+ 	TREE_THIS_VOLATILE from reg.  Don't emit unused labels.
+ 	(rs6000_complex_function_value): Check TARGET_HARD_FLOAT and
+ 	TARGET_FPRS here..
+ 	(rs6000_function_value): .. not here before call.
+ 
+ 2004-05-09  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* config/rs6000/spe.md ("tstsflt_gpr"): Fix typo in unspec.
+ 
+ 2004-05-09  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	PR 15007
+ 	* c-decl.c (current_file_decl): Rename to all_translation_units,
+ 	adjust comment.
+ 	(pop_scope): If popping file_scope, construct a
+ 	TRANSLATION_UNIT_DECL and make it the context of all the
+ 	symbols in the scope.
+ 	(push_file_scope): Don't construct a TRANSLATION_UNIT_DECL here.
+ 	(pushdecl): Clarify comment.  Do not set DECL_CONTEXT of
+ 	anything to current_file_decl.
+ 	(pushdecl_top_level): Likewise.
+ 	(store_parm_decls_newstyle): Adjust check for nested function.
+ 	(c_write_global_declarations): Update for renamed variable.
+ 
+ 2004-05-09  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* config/rs6000/rs6000-protos.h
+ 	(rs6000_conditional_register_usage): Protoize.
+ 
+ 	* config/rs6000/rs6000.c (rs6000_conditional_register_usage): New.
+ 
+ 	* config/rs6000/rs6000.h (CONDITIONAL_REGISTER_USAGE): Call
+ 	function.
+ 
+ 2004-05-08  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* fold-const.c (fold_div_compare): New function to optimize X/C1 op C2
+ 	where op is a comparison operator and C1 and C2 are integer constants
+ 	into a range check.
+ 	(fold): Call fold_div_compare.
+ 
+ 2004-05-08  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* doc/install.texi (sparc-sun-solaris2*): Document bootstrap
+ 	problems with earlier versions of the GNU compiler.
+ 
+ 2004-05-07  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* config/rs6000/rs6000-protos.h (rs6000_hard_regno_mode_ok_p):
+ 	Declare.
+ 
+ 	* config/rs6000/rs6000.c (rs6000_hard_regno_mode_ok_p): New.
+ 	(rs6000_hard_regno_mode_ok): New.
+ 	(rs6000_init_hard_regno_mode_ok): New.
+ 	(rs6000_override_options): Call rs6000_init_hard_regno_mode_ok.
+ 
+ 	* config/rs6000/rs6000.h (HARD_REGNO_NREGS): Use precomputed
+ 	result.
+ 
+ 2004-05-07  Ziemowit Laski  <zlaski@apple.com>
+ 
+ 	* config/rs6000/altivec.h (vector, pixel, bool): Do not
+ 	define as macros #ifdef __APPLE_ALTIVEC__.
+ 
+ 2004-05-07  Fariborz Jahanian  <fjahanian@apple.com>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_mixed_function_arg):
+ 	Generate appropriate parallels for vector arguments
+ 	passed to vararg functions. (function_arg): make the call
+ 	to rs6000_mixed_function_arg for vector args as needed.
+ 
+ 2004-05-07  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.c (mips_va_arg): Fix calculation of osize for
+ 	EABI_FLOAT_VARARGS_P.
+ 
+ 2004-05-07  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.h (ISA_HAS_BRANCHLIKELY): Remove TARGET_MIPS5500.
+ 	* config/mips/mips.c (override_options): Disable branch likely
+ 	instructions if TUNE_MIPS5500.
+ 
+ 2004-05-07  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.c (override_options): Allow the hi and lo registers
+ 	to store any integral mode, not just MODE_INTs.
+ 
+ 2004-05-07  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/arm.c (arm_promote_prototypes): Use TARGET_AAPCS_BASED.
+ 	* config/arm/arm.h (TARGET_AAPCS_BASED): Define.
+ 	(TARGET_DOUBLEWORD_ALIGN): Use it.
+ 	(WCHAR_TYPE): Define.
+ 	(WCHAR_SIZE_TYPE): Define.
+ 	(SIZE_TYPE): Define.
+ 
+ 2004-05-07  Uros Bizjak  <uros@kss-loka.si>
+ 
+ 	* config/i386/i386.c (ix86_emit_fp_unordered_jump): Use
+ 	testb $4, %ah insn instead of sahf insn if !TARGET_USE_SAHF.
+ 
+ 2004-05-07  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* loop-doloop.c (doloop_valid_p): Make sure that body
+ 	gets freed.
+ 
+ 2004-05-07  Eric Botcazou  <ebotcazou@act-europe.fr>
+ 
+ 	* config/sparc/sparc-protos.h (sparc_skip_caller_unimp): New
+ 	declaration.
+ 	* config/sparc/sparc.c (SKIP_CALLERS_UNIMP_P): Delete.
+ 	(sparc_skip_caller_unimp): New global variable.
+ 	(sparc_function_epilogue): Set 'sparc_skip_caller_unimp'.
+ 	Use it instead of SKIP_CALLERS_UNIMP_P.
+ 	* config/sparc/sparc.md (call expander): Add sanity check.
+ 	(call_address_struct_value_sp32): Re-sync with expander.
+ 	(call_symbolic_struct_value_sp32): Likewise.
+ 	(return peepholes): Use 'sparc_skip_caller_unimp' instead
+ 	of custom predicate.
+ 
+ 2004-05-07  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR c++/14962
+ 	* c-pragma.c (handle_pragma_redefine_extname): Only change
+ 	the assembler name of FUNCTION_DECLs and VAR_DECLs.
+ 
+ 2004-05-07  Uros Bizjak  <uros@kss-loka.si>
+ 
+ 	* optabs.h (enum optab_index): Add new OTI_log1p.
+ 	(log1p_optab): Define corresponding macro.
+ 	* optabs.c (init_optabs): Initialize log1p_optab.
+ 	* genopinit.c (optabs): Implement log1p_optab using log1p?f2
+ 	patterns.
+ 	* builtins.c (expand_builtin_mathfn): Handle BUILT_IN_LOG1P{,F,L}
+ 	using log1p_optab.
+ 	(expand_builtin): Expand BUILT_IN_LOG1P{,F,L} using
+ 	expand_builtin_mathfn if flag_unsafe_math_optimizations is set.
+ 
+ 	* reg-stack.c (subst_stack_regs_pat): Handle UNSPEC_FYL2XP1.
+ 
+ 	* config/i386/i386.c (ix86_emit_i387_log1p): New function.
+ 	* config/i386/i386-protos.h (ix86_emit_i387_log1p):
+ 	Prototype here.
+ 	* config/i386/i386.md (UNSPEC_FYL2XP1): New unspec to represent
+ 	x87's fyl2xp1 instruction.
+ 	(*fyl2x_xf3): Rename insn definition to fyl2x_xf3.
+ 	(fyl2xp1_xf3): New pattern to implement fyl2xp1 x87 instruction.
+ 	(log1psf2, log1pdf2, log1pxf2): New expanders to implement log1pf,
+ 	log1p  and log1pl built-ins as inline x87 intrinsics.
+ 
+ 2004-05-07  Loren James Rittle  <ljrittle@acm.org>
+ 
+ 	* config/alpha/freebsd.h (SUBTARGET_EXTRA_SPECS): Proper redefinition.
+ 	* config/arm/freebsd.h: Likewise.
+ 	* config/ia64/freebsd.h: Likewise.
+ 	* config/sparc/freebsd.h: Likewise.
+ 
+ 2004-05-07  Hans-Peter Nilsson  <hp@axis.com>
+ 
+ 	PR optimization/15296
+ 	* reorg.c (fill_simple_delay_slots): Use next_real_insn when
+ 	getting last consecutive label at a branch.
+ 	(relax_delay_slots): Similar, near top of loop.
+ 
+ 2004-05-06  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	PR target/15202
+ 	* pa.md (movdi, movsi, movhi, movqi): Support move from shift amount
+ 	register to general register.
+ 
+ 2004-05-07  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* config/rs6000/rs6000.h (STACK_BOUNDARY): Use 128 bit for either
+ 	TARGET_ALTIVEC or TARGET_ALTIVEC_ABI.
+ 	* config/rs6000/sysv4.h (ABI_STACK_BOUNDARY): Likewise.
+ 	(STACK_BOUNDARY): Delete.
+ 
+ 2004-05-06  Stuart Hastings  <stuart@apple.com>
+ 
+ 	* gcc/doc/invoke.texi: Restore -fgcse-after-reload doc from 1.421,
+ 	mistakenly clobbered by 1.423.
+ 
+ 2004-05-06  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* doc/invoke.texi: Document -mvr4130-align.
+ 	* config/mips/mips.h (MASK_VR4130_ALIGN, TARGET_VR4130_ALIGN)
+ 	(TUNE_MIPS4120, TUNE_MIPS4130): New macros.
+ 	(TUNE_MACC_CHAINS): Include TUNE_MIPS4120 and TUNE_MIPS4130.
+ 	(TARGET_SWITCHES): Add -mvr4130-align and -mno-vr4130-align.
+ 	* config/mips/mips.md: Include sched-int.h.
+ 	(USEFUL_INSN_P, SEQ_BEGIN, SEQ_END, FOR_EACH_SUBINSN): New macros.
+ 	(mips_rtx_costs): Set integer multiplication costs for TUNE_MIPS4130.
+ 	(override_options): Enable -mvr4130-align at -O3 and above.
+ 	(mips_sim_insn): New variable.
+ 	(mips_sim): New structure.
+ 	(mips_sim_reset, mips_sim_init, mips_sim_next_cycle, mips_sim_wait_reg)
+ 	(mips_sim_wait_regs_2, mips_sim_wait_regs_1, mips_sim_wait_regs)
+ 	(mips_sim_wait_units, mips_sim_wait_insn, mips_sim_record_set)
+ 	(mips_sim_issue_insn, mips_sim_issue_nop, mips_sim_finish_insn)
+ 	(vr4130_avoid_branch_rt_conflict, vr4130_align_insns): New functions.
+ 	(mips_reorg): Call vr4130_align_insns.
+ 	(vr4130_last_insn): New variable.
+ 	(vr4130_true_reg_dependence_p_1, vr4130_true_reg_dependence_p)
+ 	(vr4130_swap_insns_p, vr4130_reorder): New functions.
+ 	(mips_sched_reorder, mips_variable_issue): Hook in vr4130 code.
+ 	(mips_issue_rate): Return 2 for PROCESSOR_R4130.
+ 	(mips_use_dfa_pipeline_interface): Return true for the same.
+ 	* config/mips/4130.md: New file.
+ 	* config/mips/mips.md: Include it.  Add a peephole2 to convert
+ 	"mult;mflo" into "mtlo;macc".
+ 	(*macc, *umul_acc_di, *smul_acc_di): Use $1 rather than $0 as the
+ 	target of maccs.
+ 	(*msac_using_macc): New pattern.
+ 
+ 2004-05-06  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/5500.md (ir_vr55_store): Set latency to 0.
+ 	(ir_vr55_hilo): Split into...
+ 	(ir_vr55_mfhilo, ir_vr55_mthilo): ...these new reservations.
+ 	(ir_vr55_imul_si, ir_vr55_imadd): Change latency to 5.
+ 	(ir_vr55_imul_di): Change latency to 9.  Reserve vr55_mac for 4 cycles.
+ 	Add various multiplication bypasses.
+ 	* config/mips/mips.c (mips_rtx_costs): Adjust VR5500 costs for integer
+ 	multiplication.
+ 
+ 2004-05-06  Uros Bizjak  <uros@kss-loka.si>
+ 
+ 	* config/i386/i386.md (*fscalexf4): Correct insn "mode"
+ 	attribute to "XF".
+ 
+ 2004-05-05  Uros Bizjak  <uros@kss-loka.si>
+ 
+ 	* optabs.h (enum optab_index): Add new OTI_fmod and OTI_drem.
+ 	(fmod_optab, drem_optab): Define corresponding macros.
+ 	* optabs.c (init_optabs): Initialize fmod_optab and drem_optab.
+ 	* genopinit.c (optabs): Implement fmod_optab and drem_optab
+ 	using fmod?f3 and drem?f3 patterns.
+ 	* builtins.c (expand_builtin_mathfn_2): Handle BUILT_IN_FMOD{,F,L}
+ 	using fmod_optab and BUILT_IN_DREM{,F,L} using drem_optab.
+ 	(expand_builtin): Expand BUILT_IN_FMOD{,F,L} and
+ 	BUILT_IN_DREM{,F,L} using expand_builtin_mathfn_2 if
+ 	flag_unsafe_math_optimizations is set.
+ 
+ 	* reg-stack.c (subst_stack_regs_pat): Handle UNSPEC_FPREM_F,
+ 	UNSPEC_FPREM_U, UNSPEC_FPREM1_F and UNSPEC_FPREM1_U.
+ 
+ 	* config/i386/i386.c (ix86_emit_fp_unordered_jump): New function.
+ 	* config/i386/i386-protos.h (ix86_emit_fp_unordered_jump):
+ 	Prototype here.
+ 	* config/i386/i386.md (UNSPEC_FPREM_F, UNSPEC_FPREM_U,
+ 	UNSPEC_FPREM1_F, UNSPEC_FPREM1_U): New unspecs to represent x87's
+ 	fprem and fprem1 instructions.
+ 	(*x86_fnstsw_1): Change input parameter to (reg:CCFP 18).
+ 	Rename insn definition to x86_fnstsw_1.
+ 	(fpremxf4, fprem1xf4): New patterns to implement fprem and fprem1
+ 	x87 instructions.
+ 	(fmodsf3, fmoddf3, fmodxf3): New expanders to implement fmodf, fmod
+ 	and fmodl built-ins as inline x87 intrinsics.
+ 	(dremsf3, dremdf3, dremxf3): New expanders to implement dremf, drem
+ 	and dreml built-ins as inline x87 intrinsics.
+ 
+ 2004-05-05  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* reload1.c (inherit_piecemeal_p): Mark parameters potentially unused.
+ 
+ 2004-05-05  Ian Lance Taylor  <ian@wasabisystems.com>
+ 
+ 	PR driver/9822
+ 	* doc/invoke.texi (Spec Files): Remove documentation of %c.
+ 
+ 2004-05-05  Chris Demetriou  <cgd@broadcom.com>
+ 
+ 	* config/mips/mips.md: Update the msub define_split for new mflo/mfhi
+ 	representation.
+ 
+ 2004-05-06  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/arm-protots.h (vfp_mem_operand): Rename ...
+ 	(arm_coproc_mem_operand): ... To this.
+ 	* config/arm/arm.c (arm_legitimate_address_p): Allow ldrd modes.
+ 	(arm_legitimate_index_p): Ditto.
+ 	(vfp_mem_operand): Rename ...
+ 	(arm_coproc_mem_operand): ... To this.  Handle writeback modes.
+ 	(vfp_secondary_reload_class): Use it.
+ 	(output_move_double): Use doubleword load/store instructions.
+ 	(arm_hard_regno_mode_ok): Only allow even reg pairs for ldrd.
+ 	* config/arm/arm.h (TARGET_LDRD): Define.
+ 	(EXTRA_CONSTRAINT_STR_ARM): Add 'Uy'.
+ 	* config/gcc/arm/arm.md (arm_movdi): Allow all valid memory operands.
+ 	New splitter for invalid doubleword loads.
+ 	* config/arm/iwmmxt.md (iwmmxt_arm_movdi): Use Uy constraint.
+ 	* config/arm/vfp.md (arm_movdi_vfp): Allow all valid memory operands.
+ 	* doc/md.texi: Document Uy constraint.
+ 
+ 2004-05-05  Jan Hubicka  <jh@suse.cz>
+ 
+ 	PR opt/14980
+ 	* cgraphunit.c (cgraph_remove_unreachable_nodes): Deal properly with
+ 	inline clones.
+ 
+ 2004-05-05  H.J. Lu  <hongjiu.lu@intel.com>
+ 
+ 	PR target/15290
+ 	* config/i386/i386.c (ix86_split_to_parts): Use real_to_target
+ 	instead of REAL_VALUE_TO_TARGET_LONG_DOUBLE.
+ 
+ 2004-05-05  Mike Stump  <mrs@apple.com>
+ 
+ 	* config/darwin-c.c (add_framework): Copy the directory name as it
+ 	can be freed later.  Also, ensure we always allocate enough room
+ 	for the cached framework information.
+ 	(find_subframework_header): Keep track of the directory where the
+ 	subframework header was found.
+ 	(framework_construct_pathname): Speed up by not trying to re-add a
+ 	framework.
+ 	* cppfiles.c (search_path_exhausted): Arrange for the missing
+ 	header callback to be able to set the directory where the header
+ 	was found.
+ 	(cpp_get_dir): Add.
+ 	* cpplib.h (missing_header_cb): Add a parameter.
+ 	(cpp_get_dir): Add.
+ 
+ 2004-05-03  Mike Stump  <mrs@apple.com>
+ 
+ 	* doc/invoke.texi (Directory Options): Document -iquote.
+ 	* doc/cpp.texi: Likewise.
+ 	* doc/cppopts.texi: Likewise.
+ 	* c-opts.c (c_common_missing_argument): Add -iquote processing.
+ 	(c_common_handle_option): Likewise.
+ 	* c.opt (iquote): Add.
+ 	* gcc.h (DEFAULT_WORD_SWITCH_TAKES_ARG): Add -iquote.
+ 	* c-incpath.c (merge_include_chains): Update comment to use -iquote.
+ 
+ 	* c-opts.c (case OPT_I): Deprecate -I- support.
+ 	* doc/invoke.texi: Likewise.
+ 	* doc/cpp.texi: Likewise.
+ 	* doc/cppopts.texi: Likewise.
+ 
+ 2004-05-05  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* basic-block.h (free_basic_block_vars): Update prototype.
+ 	* flow.c (free_basic_block_vars): Remove the keep_head_end_p
+ 	argument.
+ 	(life_analysis): Update call.
+ 	* ifcvt.c (if_convert): Likewise.
+ 	* sibcall.c (optimize_sibling_and_tail_recursive_call): Likewise.
+ 	* passes.c (rest_of_handle_final): Likewise.
+ 	(rest_of_compilation): Likewise.
+ 	* config/sh/sh.c (sh_output_mi_thunk): Likewise.
+ 
+ 	* emit-rtl.c (next_real_insn): Use INSN_P.
+ 	(prev_real_insn): Likewise.
+ 
+ 2004-05-05  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* config/mips/mips.md: Update the madd define_split for new mflo/mfhi
+ 	representation.
+ 
+ 2004-05-05  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* config/rs6000/rs6000.c (build_opaque_vector_type):
+ 	New function.
+ 	(rs6000_init_builtins): Use it.
+ 
+ 2004-05-04  Bernard Giroud  <bgiroud2@free.fr>
+ 
+ 	* gcc/gcc/vmsdbgout.c (vms_func_node, vms_func_ref): New.
+ 	(func_table): Change type from char ** to vms_func_ref.
+ 	(write_rtnbeg):  Update to reflect func_table change.  Use
+ 	fde->funcdef_number instead of rtnnum in output.
+ 	(write_rtnend, vmxdbgout_begin_function, vmsdbgout_init): Likewise.
+ 
+ 2004-05-04  Paolo Bonzini  <bonzini@gnu.org>
+ 	    Richard Henderson  <rth@redhat.com>
+ 
+ 	PR target/14899
+ 
+ 	* c-common.c (vector_types_convertible_p): New function.
+ 	* c-typeck.c (comptypes): Recurse on vector types.
+ 	(convert_for_assignment): Use vector_types_convertible_p.
+ 	(digest_init): Use vector_types_convertible_p to check
+ 	validness of constant vector initializers; otherwise treat
+ 	them as scalars.
+ 	* tree.c (make_or_reuse_type): New.
+ 	(build_common_tree_nodes): Use it.
+ 	* cp/call.c (standard_conversion): Likewise.
+ 	* cp/typeck.c (comptypes): Recurse on vector types.
+ 	(convert_for_assignment): Use vector_types_convertible_p.
+ 
+ 2004-05-04  Chris Demetriou  <cgd@broadcom.com>
+ 
+ 	* config/mips/mips.c (override_options): Default to no
+ 	generation of branch-likely operations when tuning for
+ 	CPUs where they tend to have a negative performance impact
+ 	(e.g., SB-1).
+ 
+ 2004-05-04  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* expr.c (store_constructor_field): Don't call store_constructor
+ 	if bitsize is not a multiple of a byte.
+ 
+ 2004-05-04  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* reload1.c (inherit_piecemeal_p): New function.
+ 	(emit_reload_insns): When reloading a group of hard registers, use
+ 	inherit_piecemeal_p to decide whether the values of individual hard
+ 	registers can be inherited.
+ 
+ 2004-05-04  H.J. Lu  <hongjiu.lu@intel.com>
+ 
+ 	* config/ia64/t-ia64 (LIB2ADDEH): Remove gthr-gnat.c.
+ 	* config/s390/t-tpf (LIB2ADDEHDEP): Likewise.
+ 	* config/t-linux (LIB2ADDEHDEP): Likewise.
+ 
+ 2004-05-04  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/crti.asm: Push an even number of registers.
+ 	* config/arm/crtn.asm: And restore them.  Load via sp.
+ 
+ 2004-05-04  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* ggc-zone.c (ggc_alloc_zone_1): Add MEM_STAT_DECL parameter.
+ 	Collect overhead information.
+ 	(ggc_alloc_stat): New name of ggc_alloc.  Add MEM_STAT_DECL
+ 	parameter and pass it through.
+ 	(ggc_alloc_typed_stat): New name of ggc_alloc_typed.  Add
+ 	MEM_STAT_DECL parameter and pass it through.
+ 	(ggc_alloc_zone_stat): New name of ggc_alloc_zone.  Add
+ 	MEM_STAT_DECL parameter and pass it through.
+ 
+ 2004-05-03  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* config/rs6000/rs6000-protos.h: Protoize rs6000_hard_regno_nregs.
+ 
+ 	* config/rs6000/rs6000.c (rs6000_hard_regno_nregs): New.
+ 
+ 	* config/rs6000/rs6000.h (HARD_REGNO_NREGS): Call
+ 	rs6000_hard_regno_nregs.
+ 
+ 2004-05-03  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* config/s390/s390.c (s390_emit_prologue): Call unspec tpf
+ 	prologue insn instead of setting up call.
+ 	(s390_emit_epilogue): Ditto.
+ 	* config/s390/s390.md (prologue_tpf, epilogue_tpf): New patterns.
+ 	(define_constants): Add numbers for above patterns.
+ 
+ 2004-05-03  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* config/s390/s390.h (CONDITIONAL_REGISTER_USAGE): Move body...
+ 	* config/s390/s390.c (s390_conditional_register_usage): ...here.
+ 	* config/s390/s390-protos.h: Prototype.
+ 
+ 2004-05-03  Joe Buck <jbuck@welsh-buck.org>
+ 
+ 	* cppfiles.c (pchf_adder): Eliminate use of |= in d->have_once_only
+ 	assignment.
+ 
+ 2004-05-03  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* config/mips/mips.md: Fix branch length attribute definition.
+ 
+ 2004-05-03  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* config.gcc: Remove --enable-altivec support.
+ 
+ 	* config/rs6000/altivec-defs.h: Remove.
+ 
+ 2004-05-03  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+ 
+ 	* fixinc/inclhack.def (svr4_profil): Don't apply on IRIX 5/6.
+ 	* fixinc/fixincl.x: Regenerate.
+ 
+ 2004-05-03  Uros Bizjak  <uros@kss-loka.si>
+ 
+ 	* config/i386/i386.md (*fyl2x_sfxf3, *fyl2x_dfxf3): Remove insn
+ 	definition.
+ 	(log?f2, log10?f2, log2?f2): Reimplement expanders with
+ 	float_truncate insn.
+ 	(*fxtractsf3, *fxtractdf3): Remove insn definition.
+ 	(logb?f2): Reimplement expanders with float_truncate insn.
+ 
+ 2004-05-03  Graham Stott  <graham.stott@btinternet.com>
+ 
+ 	PR 14718
+ 	* dwarf2out.c (dwarf2out_imported_module_or_decl): Use
+ 	force_type_die for CONST_DECL.
+ 
+ 2004-05-03  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 	    Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+ 
+ 	* config.gcc (sparc64-*-solaris2*, sparcv9-*-solaris2*): Add
+ 	tm-dwarf2.h to tm_file.
+ 	(sparc-*-solaris2*): Add tm-dwarf2.h to tm_file for Solaris 7+.
+ 	* config/sparc/sol2-bi.h (PREFERRED_DEBUGGING_TYPE): Delete.
+ 	(ASM_DEBUG_SPEC): Delete.
+ 
+ 2004-05-03  Uros Bizjak  <uros@kss-loka.si>
+ 
+ 	* optabs.h (enum optab_index): Add new OTI_expm1.
+ 	(expm1_optab): Define corresponding macro.
+ 	* optabs.c (init_optabs): Initialize expm1_optab.
+ 	* genopinit.c (optabs): Implement expm1_optab using expm1?f2
+ 	patterns.
+ 	* builtins.c (expand_builtin_mathfn): Handle BUILT_IN_EXPM1{,F,L}
+ 	using expm1_optab.
+ 	(expand_builtin): Expand BUILT_IN_EXPM1{,F,L} using
+ 	expand_builtin_mathfn if flag_unsafe_math_optimizations is set.
+ 
+ 	* config/i386/i386.md (expm1df2, expm1sf2, expm1xf2): New expanders
+ 	to implement expm1, expm1f and expm1l built-ins as inline x87
+ 	intrinsics.
+ 
+ 2004-05-02  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	2003-11-19  Richard Sandiford  <rsandifo@redhat.com>
+ 	* config/frv/frv.md (*return_true, *return_false): New patterns.
+ 
+ 2004-05-02  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* rtl.h (PHI_NODE_P): Remove.
+ 
+ 2004-05-02  Eric Botcazou  <ebotcazou@act-europe.fr>
+ 
+ 	PR middle-end/14988
+ 	* function.c (assign_stack_local_1): Use BITS_PER_UNIT alignment
+ 	when passed -2 as 'align'.
+ 	(put_var_into_stack): Use 'bool' as the type for the three local
+ 	predicates.  Adjust calls to put_reg_into_stack.
+ 	When passed a CONCAT, instruct put_reg_into_stack to use
+ 	a consecutive stack slot for the second part.
+ 	(put_reg_into_stack): Remove 'promoted_mode' parameter, add
+ 	'consecutive_p' parameter.  Turn the three predicates into 'bool'
+ 	parameters.  Retrieve the register mode from 'reg'.
+ 	When consecutive_p is true, instruct assign_stack_local_1 to use
+ 	BITS_PER_UNIT alignment.
+ 	(put_addressof_into_stack): Use 'bool' as the type for the two
+ 	local predicates. Adjust call to put_reg_into_stack.
+ 
+ 2004-05-02  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+ 
+ 	* fold-const.c (fold_convert_const, fold): Add missing
+ 	FIX_ROUND_EXPR case.
+ 
+ 2004-05-02  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	* configure.ac (FLEX, BISON): Only use tools from the build tree
+ 	if build equals host.
+ 	* configure: Rebuilt.
+ 
+ 	* config/frv/frv-protos.h (frv_expand_epilogue,
+ 	frv_expand_fdpic_call): Add bool argument.
+ 	* config/frv/frv.c (frv_function_ok_for_sibcall): New.
+ 	(TARGET_FUNCTION_OK_FOR_SIBCALL): Define to it.
+ 	(frv_expand_epilogue): Use new argument to decide whether to emit
+ 	return instruction or copy the return address to LR.
+ 	(frv_expand_fdpic_call): Inline PLT entry when emitting direct
+ 	sibcalls.
+ 	(sibcall_operand): New.
+ 	* config/frv/frv.h (PREDICATE_CODES): call_operand doesn't match
+ 	PLUS nor LABEL_REF.  Add sibcall_operand.
+ 	* config/frv/frv.md (call, call_value): Pass false to
+ 	frv_expand_fdpic_call.
+ 	(call_fdpicdi, call_value_fdpicdi): Insert %i0 in calll.
+ 	(sibcall, sibcall_internal, sibcall_fdpicdi, sibcall_value,
+ 	sibcall_value_internal, sibcall_value_fdpicdi): New.
+ 	(return_unsigned_true, return_unsigned_false): New.
+ 	(epilogue): Adjust call to frv_expand_epilogue.
+ 	(sibcall_epilogue): New.
+ 
+ 	* config/frv/frv.h (ASM_SPEC): Pass -mno-fdpic as -mnopic.
+ 	(CPP_SPEC, CPP_SIMPLE_SPEC): Undefine __FRV_ACC__ and __FRV_FPR__
+ 	before redefining them.
+ 
+ 2004-05-01  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+ 
+ 	* builtins.c (fold_fixed_mathfn): New function.
+ 	(fold_builtin_lround, fold_builtin): Use it.
+ 
+ 2004-05-01  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* config/sparc/linux64.h (TARGET_DEFAULT): Make 64-bit by default
+ 	also for TARGET_CPU_DEFAULT == TARGET_CPU_ultrasparc3.
+ 
+ 2004-05-01  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/cris/cris.h: Revert my "fix comment typos" patch.
+ 
+ 2004-05-01  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.h (TUNE_MACC_CHAINS): Fix comment.
+ 
+ 2004-05-01  Falk Hueffner  <falk@debian.org>
+ 
+ 	* config/alpha/alpha.md (builtin_insbl, builtin_inswl,
+ 	builtin_insll): Disallow 0 as first input operand.
+ 
+ 2004-05-01  Falk Hueffner  <falk@debian.org>
+ 
+ 	* config/alpha/alpha.c (alpha_rtx_costs): Fix shiftadd costs.
+ 
+ 2004-05-01  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	PR middle-end/15054
+ 	* expr.c (expand_expr_real): Do not call preserve_temp_slots
+ 	on a TARGET_EXPR temp.
+ 	* function.c (assign_stack_temp_for_type): Set 'keep' flag for
+ 	TARGET_EXPR temp slots.
+ 
+ 2004-05-01  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* simplify-rtx.c (simplify_ternary_operation): When
+ 	converting an IF_THEN_ELSE to a relational op, return
+ 	correct mode.
+ 
+ 2004-04-30  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+ 
+ 	* builtins.c (fold_builtin_round): Fix comment typo.
+ 	(fold_builtin_lround): New function.
+ 	(fold_builtin): Use it.
+ 
+ 2004-04-20  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR target/11608
+ 	* config/sh/elf.h (DBX_OUTPUT_MAIN_SOURCE_FILE_END): Update and make it
+ 	more like the one in config/dbxelf.h.
+ 
+ 2004-04-30  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* tree.h (SET_ARRAY_OR_VECTOR_CHECK): Rename to SET_OR_ARRAY_CHECK
+ 	and adjust definition accordingly.
+ 	(TYPE_DOMAIN): Allow only SET_TYPE and ARRAY_TYPE.
+ 	(TYPE_DEBUG_REPRESENTATION_TYPE): Allow only VECTOR_TYPE.
+ 	* expr.c (store_constructor): Do not access TYPE_DOMAIN of a
+ 	VECTOR_TYPE.
+ 
+ 2004-04-30  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/14587
+ 	* config/i386/winnt.c (associated_type): Look for attributes on
+ 	the TYPE_MAIN_VARIANT of *this.
+ 	* attribs.c (decl_attributes): If ATTR_FLAG_TYPE_IN_PLACE, also
+ 	apply the attributes to the variants.
+ 
+ 2004-04-30  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config.gcc: Simplify arm --with-{cpu,tune} test.
+ 	* config/arm/arm-cores.def: Document whitespace restrictions.
+ 
+ 2004-04-30  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+ 
+ 	PR other/1963
+ 	* config/alpha/osf.h (SWITCHES_NEED_SPACES): Define.
+ 
+ 2004-04-30  Brian Ford  <ford@vss.fsi.com>
+ 	    DJ Delorie  <dj@redhat.com>
+ 
+ 	* config/i386/cygming.h [HAVE_GAS_PE_SECREL32_RELOC]
+ 	(DWARF2_DEBUGGING_INFO): Define to enable.
+ 	(DBX_REGISTER_NUMBER): Define to use the svr4 register map for
+ 	DWARF2.
+ 	* configure.ac (Target-specific assembler checks)
+ 	<i[34567]86-*-[cygwin*|pe|mingw32*]>: New test for .secrel32
+ 	relocs.
+ 	* configure: Regenerate.
+ 	* config.in: Likewise.
+ 
+ 	* config/i386/cygming.h [HAVE_GAS_PE_SECREL32_RELOC]
+ 	(ASM_OUPUT_DWARF_OFFSET): Define.
+ 
+ 2004-04-29  Andreas Krebbel  <krebbel1@de.ibm.com>
+ 
+ 	* config/s390/s390-protos.h (s390_emit_epilogue): Parameter added.
+ 	(s390_emit_call): New function prototype added.
+ 	(s390_tls_get_offset): Function removed.
+ 	* config/s390/s390.c (s390_function_ok_for_sibcall,
+ 	s390_call_saved_register_used_p): New functions.
+ 	(TARGET_FUNCTION_OK_FOR_SIBCALL): Definition of target macro added.
+ 	(s390_tls_get_offset): Function merged into s390_emit_tls_call_insn.
+ 	(s390_emit_tls_call_insn): New function.
+ 	(legitimize_tls_address): Call s390_emit_tls_call_insn instead of
+ 	emit_call_insn.
+ 	(s390_emit_prologue): Use s390_emit_call instead of emit_call_insn.
+ 	(s390_emit_epilogue): Like s390_emit_prologue. Parameter for sibcalls
+ 	added.
+ 	* config/s390/s390.h (SIBCALL_REGNUM): New macro representing the
+ 	register number used to hold the target address for sibcalls.
+ 	* config/s390/s390.md ("sibcall", "sibcall_value", "sibcall_epilogue"):
+ 	New expanders.
+ 	("*sibcall_br", "*sibcall_brc", "*sibcall_brcl", "*sibcall_value_br",
+ 	"*sibcall_value_brc", "*sibcall_value_brcl"): New insns.
+ 	("call_exp", "call_value_exp", "call_value_tls", "call_value_tls_exp"):
+ 	Expanders removed.
+ 	("call", "call_value"): Call s390_emit_call to emit the call patterns.
+ 	("*bras", "*brasl", "*bras_r", "*brasl_r", "*bras_tls", "*brasl_tls",
+ 	"*basr", "*basr_r", "*basr_tls"): Added constraint: !SIBLING_CALL_P.
+ 	("epilogue"): Changed the call to s390_emit_epilogue to use the
+ 	new parameter.
+ 
+ 2004-04-30  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* bb-reorder.c, c-opts.c, cfglayout.c, cgraph.c, cgraphunit.c,
+ 	cppfiles.c, fold-const.c, ggc-zone.c, loop-doloop.c, optabs.c,
+ 	reg-stack.c, varasm.c, config/alpha/ev4.md,
+ 	config/alpha/ev5.md, config/alpha/ev6.md, config/arm/arm.c,
+ 	config/c4x/c4x.c, config/c4x/c4x.md, config/cris/cris.c,
+ 	config/cris/cris.h, config/fr30/fr30.h, config/frv/frv.c,
+ 	config/frv/frv.h, config/frv/frv.md, config/h8300/h8300.c,
+ 	config/i386/i386.c, config/i386/i386.md, config/i386/winnt.c,
+ 	config/ia64/itanium2.md, config/ip2k/ip2k.c,
+ 	config/mips/mips.c, config/mips/mips.h, config/mips/sr71k.md,
+ 	config/pa/pa.c, config/s390/s390.c, config/sh/sh.c: Fix
+ 	comment typos.
+ 
+ 2004-04-30  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config.gcc: Default ep9312 to hard-float.
+ 	* config/arm/arm-cores.def: Add ARCH field.
+ 	* config/arm/arm.c (FL_FOR_ARCH*): Define.
+ 	(arm_arch_cirrus): New variable.
+ 	(all_cores): Set and use arch.
+ 	(all_architectures): Ditto.
+ 	(arm_arch_name): New variable.
+ 	(arm_override_options): Set it. Use [SUB]TARGET_CPU_DEFAULT.
+ 	Set and use arm_arch_cirrus.
+ 	* config/arm/arm.h (TARGET_CPU_CPP_BUILTINS): Set arch defines.
+ 	(enum processor_type): Update ARM_CORE define.
+ 	(enum target_cpus): Add.  Replaces TARGET_CPU_* defines.
+ 	(CPP_SPEC): Remove %(cpp_cpu_arch).
+ 	(CPP_ARCH_DEFAULT_SPEC): Remove.
+ 	(CPP_CPU_ARCH_SPEC): Remove.
+ 	(EXTRA_SPECS): Don't use CPP_*ARCH*_SPEC.
+ 	(FPUTYPE_DEFAULT): Don't define here.
+ 
+ 2004-04-30  J"orn Rennecke <joern.rennecke@superh.com>
+ 
+ 	* flow.c (propagate_one_insn): Call mark_set_regs for stack pointer
+ 	updates too.
+ 
+ 2004-04-30  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* arm.c (arm_needs_doubleword_align): Use mode alignment.
+ 
+ 2004-04-30  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* config/altivec/altivec.h [__cplusplus] (vec_subsubs): Rename to
+ 	vec_sububs.
+ 	[__cplusplus] (vec_subsuhs): Rename to vec_subuhs, without
+ 	duplicates.
+ 
+ 2004-04-30  Uros Bizjak  <uros@kss-loka.si>
+ 
+ 	* config/i386/i386.md (atansf2, atandf2, atanxf2): Move near
+ 	atan2?f3 expanders.
+ 
+ 2004-04-29  Nick Clifton  <nickc@redhat.com>
+ 
+ 	Bug 14093
+ 	* config/sh/sh-protos.h (sh_promote_prototypes): Declare.
+ 	* config/sh/sh.c (sh_promote_prototypes): Remove declaration.
+ 	Delete static from definition.
+ 	* config/sh/sh.h (FUNCTION_VALUE): Add sh_promote_prototypes call.
+ 
+ 2004-04-30  Uros Bizjak  <uros@kss-loka.si>
+ 
+ 	* reg-stack.c (subst_stack_regs_pat): <UNSPEC_SIN, UNSPEC_COS,
+ 	UNSPEC_FRNDINT, UNSPEC_F2XM1>: abort() if src1 dies.
+ 	<UNSPEC_SINCOS_COS, UNSPEC_TAN_ONE, UNSPEC_XTRACT_FRACT>: Same.
+ 	<UNSPEC_SINCOS_SIN, UNSPEC_TAN_TAN, UNSPEC_XTRACT_EXP>: Same.
+ 
+ 2004-04-29  Richard Guenther  <richard.guenther@uni-tuebingen.de>
+ 
+ 	* commom.opt (Wfatal-errors): Add it.
+ 	* diagnostic.c (flag_fatal_errors): Define it.
+ 	(diagnostic_action_after_output): Check for flag_fatal_errors.
+ 	* flags.h (flag_fatal_errors): Declare it.
+ 	* opts.c (common_handle_option): Add OPT_Wfatal_errors.
+ 	* doc/invoke.texi (Warning Options): Document -Wfatal-errors.
+ 
+ 2004-04-30  Josef Zlomek  <zlomekj@suse.cz>
+ 
+ 	* gcse.c (remove_reachable_equiv_notes): Delete notes also in
+ 	blocks which have kill flag set.
+ 
+ 2004-04-29  Ben Elliston  <bje@au.ibm.com>
+ 
+ 	* configure.ac (--with-as): Abort if user-supplied assembler
+ 	cannot be executed.
+ 	(--with-ld): Likewise for the linker.
+ 	* configure: Regenerate.
+ 
+ 2004-04-29  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+ 
+ 	* convert.c (convert_to_integer): Ensure `long_integer_type_node'
+ 	isn't NULL before using it.
+ 
+ 2004-04-29  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	PR target/15189
+ 	* config/mips/mips.md (load_df_low): Use default length.
+ 	(load_df_high, store_df_high): Likewise.
+ 
+ 2004-04-29  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/mips/mips.md, config/mips/sb1.md,
+ 	config/rs6000/rs6000.c: Fix comment typos.
+ 
+ 2004-04-29  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* builtins.c, cgraph.c, cgraphunit.c, final.c, fold-const.c:
+ 	Fix comment typos.
+ 
+ 2004-04-29  Douglas B Rupp  <rupp@gnat.com>
+ 
+ 	* gcc.c (DELETE_IF_ORDINARY): New macro default definition.
+ 	(delete_if_ordinary): Use above macro.
+ 	* config/alpha/xm-vms.h (DELETE_IF_ORDINARY): New macro VMS definition.
+ 	Update copyright.
+ 	* doc/hostconfig.texi (DELETE_IF_ORDINARY): Document new macro.
+ 
+ 2004-04-29  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* c-decl.c (get_parm_info): Use the correct tag keywords when
+ 	warning about type declarations in prototypes.
+ 
+ 2004-04-29  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config.gcc: Pull list of cores from arm-cores.def.
+ 
+ 2004-04-29  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* combine.c (combine_simplify_rtx): Adjust call to use
+ 	simplify_relational_operation.  Do not use SELECT_CC_MODE
+ 	when a comparison already has a MODE_CC mode.
+ 
+ 2004-04-29  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	(simplify_set): simplify_relational_operation may now
+ 	return another relational expression.
+ 	* cse.c (fold_rtx): simplify_relational_operation now
+ 	takes of computing the comparison mode.
+ 	* dojump.c (compare_from_rtx): Use simplify_relational_operation,
+ 	remove dead code.
+ 	(do_compare_rtx_and_jump): Likewise.
+ 	* integrate.c (subst_constants): simplify_relational_operation
+ 	may now return another relational expression.
+ 	* simplify-rtx.c (simplify_gen_relational): Move most code to
+ 	the new simplify_relational_operation and
+ 	simplify_relational_operation_1 functions.
+ 	(simplify_relational_operation): Rewritten.
+ 	(simplify_relational_operation_1): New function.
+ 	(simplify_ternary_operation): simplify_relational_operation
+ 	may now return another relational expression.
+ 	(simplify_rtx): Remove unnecessary temp variable.
+ 
+ 2004-04-29  Uros Bizjak  <uros@kss-loka.si>
+ 
+ 	* reg-stack.c (swap_to_top): New function.
+ 	(subst_stack_regs_pat): UNSPEC_FPATAN, UNSPEC_FYL2X: Use
+ 	swap_to_top().
+ 	(subst_stack_regs_pat): UNSPEC_FSCALE: Remove.
+ 	(subst_stack_regs_pat): Handle UNSPEC_FSCALE_FRACT and
+ 	UNSPEC_FSCALE_EXP.
+ 
+ 	* config/i386/i386.md (UNSPEC_FSCALE): Remove.
+ 	(*fscale_sfxf3, *fscale_dfxf3, *fscale_xf3): Remove insn pattern.
+ 	(UNSPEC_FSCALE_FRACT, UNSPEC_FSCALE_EXP): New unspecs to represent
+ 	x87's fscale insn.
+ 	(*fscalexf4: Define new insn pattern to implement x87 fscale insn.
+ 	(exp?f2, exp10?f2, exp2?f2): Use *fscalexf4 and float_truncate
+ 	patterns.
+ 
+ 2004-04-28  Serge Belyshev  <1319@bot.ru>
+ 
+ 	PR 14944
+ 	* coverage.c (read_counts_file): Fix usage of warning () call.
+ 	* pretty-print.c (pp_base_format_text): Fix typo in the comment.
+ 
+ 2004-04-28  Ben Elliston  <bje@au.ibm.com>
+ 
+ 	* doc/invoke.texi (Objective-C Dialect Options): Don't prefix
+ 	options with "-" in the option index.
+ 	(SPARC Options): Likewise.
+ 	(M32R/D Options): Likewise.
+ 
+ 2004-04-28  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+ 
+ 	* convert.c (convert_to_integer): Convert (long)round -> lround,
+ 	etc.
+ 
+ 2004-04-28  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* config/rs6000/rs6000.c (registers_ok_for_quad_peep):
+ 	Return false if we do not have fp register.
+ 	(addrs_ok_for_quad_peep): Rename to ...
+ 	(mems_ok_for_quad_peep): this.
+ 	Add check for volatile memory.
+ 	* config/rs6000/rs6000-protos.h (addrs_ok_for_quad_peep):
+ 	Rename to ...
+ 	(mems_ok_for_quad_peep): this.
+ 	* config/rs6000/rs6000.md: Change peephole's for lfq/stq
+ 	to peephole2's.
+ 	(lfq_power2): New instruction.
+ 	(stfq_power2): Likewise.
+ 
+ 2004-04-28  Jan Hubicka  <jh@suse.cz>
+ 
+ 	PR c/15004
+ 	* function.c (do_warn_unused_parameter): Break out form ...
+ 	(expand_function_end): ... here; warn only when not using cgraphunit.
+ 	* function.h (do_warn_unused_parameter): Declare.
+ 	* cgraphunit.c: Include function.h.
+ 	(cgraph_finalize_function): Do unused parameter warning.
+ 	* Makefile.in (cgraphunit.o): Depend on function.h
+ 
+ 2004-04-28  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* Makefile.in ($(DESTDIR)$(infodir)/%.info): Don't condition
+ 	calling install-info on $(DESTDIR)$(infodir)/dir already being
+ 	present.
+ 
+ 2004-04-28  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* dwarf2out.c (mem_loc_descriptor): Handle shifts.
+ 
+ 2004-04-28  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* gcse.c (find_moveable_store): Do not accept store insns with
+ 	REG_EH_REGION note.
+ 
+ 2004-04-28  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* calls.c (precompute_arguments): Remove PROMOTE_FOR_CALL_ONLY.
+ 	* function.c (assign_temp): Ditto.
+ 	* system.h (PROMOTE_FOR_CALL_ONLY): Poison.
+ 
+ 2004-04-28  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/lib1funcs.asm: Recognize armv5tej and armv6.
+ 
+ 2004-04-28  Josef Zlomek  <zlomekj@suse.cz>
+ 
+ 	* var-tracking.c (variable_different_p): Add a parameter
+ 	compare_current_location, compare current location of variable parts
+ 	if it is true.
+ 	(dataflow_set_different_1): Pass compare_current_location == false.
+ 	(dataflow_set_different_2): Pass compare_current_location == false.
+ 	(emit_notes_for_differences_1): Pass compare_current_location == true.
+ 
+ 2004-04-28  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390.md ("casesi"): Mark jump table access as
+ 	non-trapping and unchanging.
+ 
+ 2004-04-27  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	PR debug/14829
+ 	* dwarf2out.c (reg_number): Rename to dbx_reg_number.  Adjust all
+ 	callers.
+ 	(multiple_reg_loc_descriptor, reg_loc_descriptor): Use gcc register
+ 	number for indexing hard_regno_nregs array.
+ 
+ 2004-04-27  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* config/darwin.h (STARTFILE_SPEC): Use %s to find crt2.o.
+ 	* config/darwin-crt2.c: Only have contents on __ppc__.
+ 
+ 2004-04-27  Bob Wilson  <bob.wilson@acm.org>
+ 
+ 	* config/xtensa/xtensa.c (call_insn_operand): Check
+ 	SYMBOL_REF_EXTERNAL_P in addition to SYMBOL_REF_LOCAL_P.
+ 	* config/xtensa/xtensa.h (LEGITIMATE_PIC_OPERAND): Likewise.
+ 	* config/xtensa/xtensa.md (call, call_value): Likewise.
+ 
+ 2004-04-27  Wu Yongwei  <adah@sh163.net>
+ 
+ 	* gthr-win32.h (__gthread_mutex_t): Change typedef to new structure.
+ 	(__GTHREAD_MUTEX_INIT_DEFAULT): Adjust.
+ 	(__gthread_mutex_init_function): Replace CreateMutex with
+ 	initialization of custom mutex using CreateSemaphore.
+ 	(__gthread_mutex_lock): Use InterlockedIncrement.
+ 	(__gthread_mutex_trylock): Use InterlockedCompareExchange.
+ 	(__gthread_mutex_unlock): Use InterlockedDecrement and
+ 	ReleaseSemaphore to unlock
+ 	* config/i386/gthr-win32.c (__gthread_mutex_init_function,
+ 	__gthread_mutex_lock, __gthread_mutex_trylock,
+ 	__gthread_mutex_unlock): Adjust to match inline versions in
+ 	gthr-win32.h.
+ 
+ 2004-04-27  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/arm.c (arm_promote_prototypes): New function.
+ 	(TARGET_PROMOTE_PROTOTYPES): Use it.
+ 
+ 2004-04-27  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/arm.c (arm_expand_epilogue): Count blocks of 4 regs.
+ 
+ 2004-04-26  Bernard Giroud  <bgiroud@free.fr>
+ 
+ 	* config/alpha.c (alpha_end_function): For OpenVMS gas,
+ 	correctly output .pdesc directive before .end.
+ 
+ 2004-04-26  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	Bug 14927
+ 	* config/ia64/ia64.md (movxf): New local op0.  Handle case where
+ 	operands[0] is a SUBREG.  Handle case where operands[1] is a GR reg.
+ 
+ 2004-04-26  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* config/ia64/hpux.h: Predefine __STDCPP__ when compiling C++.
+ 	* config/pa/pa-hpux10.h: Likewise.
+ 	* config/pa/pa-hpux11.h: Likewise.
+ 
+ 2004-04-26  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* doc/invoke.texi (Overall Options): Document default for -o
+ 	for PCH files.
+ 
+ 2004-04-26  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* builtins.c (expand_builtin_update_setjmp_buf): New function.
+ 	(expand_builtin, case BUILT_IN_UPDATE_SETJMP_BUF): New case.
+ 	* builtins.def (BUILT_IN_UPDATE_SETJMP_BUF): New code.
+ 
+ 2004-04-26  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/arm.c (arm_legitimate_index_p): Correct iwmmxt offsets.
+ 
+ 2004-04-26  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/arm.c (arm_legitimate_index_p): Correct maverick offsets.
+ 
+ 2004-04-25  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* fold-const.c (fold): Prefer fold_convert (negate_expr (...)) to
+ 	fold (build1 (NEGATE_EXPR, ...)).  Optimize X / -1 as -X and
+ 	X % -1 as 0.
+ 
+ 2004-04-26  Hans-Peter Nilsson  <hp@bitrange.com>
+ 
+ 	PR bootstrap/15141
+ 	* except.c (connect_post_landing_pads): Delete insns after the
+ 	barrier when generating a unwind_resume_libfunc call.
+ 
+ 2004-04-25  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	PR/c++ 15119
+ 	* tree.c (substitute_placeholder_in_expr, case 4): New case,
+ 	for TARGET_EXPR.
+ 
+ 2004-04-25  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* gcov-io.h (__gcov_fork, __gcov_execl, __gcov_execlp, __gcov_execle,
+ 	__gcov_execv, __gcov_execvp, __gcov_execve): Do not declare when
+ 	inhibit_libc is defined.
+ 
+ 2004-04-25  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips-protos.h (mips_linked_macc_p): Declare.
+ 	* config/mips/mips.h (TUNE_MACC_CHAINS): New macro.
+ 	* config/mips/mips.c (TARGET_SCHED_REORDER): Define.
+ 	(TARGET_SCHED_VARIABLE_ISSUE): Define.
+ 	(mips_adjust_cost): Move later in file, next to other sched hooks.
+ 	(mips_macc_chains_last_hilo): New variable.
+ 	(mips_linked_madd_p, mips_macc_chains_record, mips_macc_chains_reorder)
+ 	(mips_promote_ready, mips_sched_reorder, mips_variable_issue): New.
+ 	* config/mips/mips.md (may_clobber_hilo): New attribute.
+ 
+ 2004-04-24  Roger Sayle  <roger@eyesopen.com>
+ 	    Bruce Korb  <bkorb@gnu.org>
+ 
+ 	* fixinc/inclhack.def (aix_syswait_2): New fix.
+ 	* fixinc/fixincl.x: Regenerate.
+ 	* fixinc/tests/base/sys/wait.h: Update for new test.
+ 
+ 2004-04-24  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	PR target/14960
+ 	* config/rs6000/rs6000.c (rs6000_stack_info): Rename total_raw_size
+ 	to non_fixed_size, and leave out fixed_size from the sum.
+ 	(generate_set_vrsave): Correct clobbers.
+ 	(rs6000_emit_epilogue): Test TARGET_ALTIVEC with TARGET_ALTIVEC_SAVE.
+ 	(rs6000_function_value): Test TARGET_ALTIVEC and TARGET_ALTIVEC_ABI.
+ 	(rs6000_libcall_value): Likewise.
+ 	* config/rs6000/rs6000.h (FUNCTION_VALUE_REGNO_P): Likewise.
+ 	(FUNCTION_ARG_REGNO_P): Likewise.
+ 
+ 2004-04-24  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* expmed.c (expand_mult_highpart_adjust): Do not assume OP1
+ 	is a CONST_INT.
+ 	(expand_mult_highpart_optab): Call expand_mult_highpart_adjust
+ 	with NARROW_OP1 instead of OP1.
+ 
+ 2004-04-24  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/host-linux.c (TRY_EMPTY_VM_SPACE): Define for __s390__
+ 	and __s390x__ hosts.
+ 
+ 2004-03-23  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* Makefile.in (LIBGCOV): Add _gcov_fork, _gcov_execl, _gcov_execlp,
+ 	_gcov_execle, _gcov_execv, _gcov_execvp, _gcov_execve.
+ 	* builtin-types.def (BT_PID, BT_PTR_CONST_STRING, BT_FN_PID,
+ 	BT_FN_INT_CONST_STRING_PTR_CONST_STRING,
+ 	BT_FN_INT_CONST_STRING_PTR_CONST_STRING_PTR_CONST_STRING): New.
+ 	* builtins.c (expand_builtin_fork_or_exec): New.
+ 	(expand_builtin): Call it.
+ 	* builtins.def (BUILT_IN_EXECL, BUILT_IN_EXECLP,BUILT_IN_EXECLE,
+ 	BUILT_IN_EXECV, BUILT_IN_EXECVP, BUILT_IN_EXECVE, BUILT_IN_FORK): New.
+ 	* c-common.c (PID_TYPE): New macro.
+ 	(c_common_nodes_and_builtins): Initialize pid_type_node.
+ 	* calls.c (special_function_p): Do not handle fork and exec.
+ 	(expand_call): Do not handle ECF_FORK_OR_EXEC.
+ 	* gcov-io.h (__gcov_fork, __gcov_execl, __gcov_execlp, __gcov_execle,
+ 	__gcov_execv, __gcov_execvp, __gcov_execve): Declare.
+ 	* libgcov.c (__gcov_fork, __gcov_execl, __gcov_execlp, __gcov_execle,
+ 	__gcov_execv, __gcov_execvp, __gcov_execve): New.
+ 	* tree.h (enum tree_index): Add TI_PID_TYPE.
+ 	(pid_type_node): New macro.
+ 	(ECF_FORK_OR_EXEC): Removed.
+ 
+ 2004-04-23  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR optimization/13985
+ 	* cfgloopmanip.c (fix_loop_placements): New prototype.
+ 	Call fix_bb_placements on the preheader of loops that have
+ 	been reparented.
+ 	(remove_path): Adjust call to fix_loop_placements.
+ 
+ 2004-04-23  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* config/darwin7.h: New file.
+ 	* config.gcc (*-*-darwin*): Add darwin7.h if the
+ 	version is greater than 6.
+ 	* config/darwin.h (TARGET_C99_FUNCTIONS): Define.
+ 	(MATH_LIBRARY): Wrap in ifdefs.
+ 
+ 2004-04-23  Daniel Jacobowitz  <drow@mvista.com>
+ 
+ 	* config/arm/arm.c (arm_output_epilogue): Reverse the order of
+ 	loading iWMMXt registers with a frame pointer.  Use post-increment
+ 	without a frame pointer.
+ 	(arm_expand_prologue): Reverse the order of saving iWMMXt registers.
+ 
+ 2004-04-23  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* doc/invoke.texi (Optimize Options): Refer to "unit-at-a-time
+ 	mode" rather than "-funit-at-a-time" since -O2 enables it
+ 	without requiring -f* options.	Refer to -fprofile-generate and
+ 	-fprofile-use correctly.  Move -funit-at-a-time among options
+ 	enabled by -O.	Add information about unit-at-a-time caveats.
+ 
+ 2004-04-22  Per Bothner  <per@bothner.com>
+ 
+ 	* line-map.h (struct line_maps):  New field highest_line.
+ 	(linemap_position_for_column):  Make non-inline function.
+ 	(LINEMAP_POSITION_FOR_COLUMN):  New macro.
+ 	* line-map.c (linemap_init):  Clear highest_line field.
+ 	(linemap_add):  Set highest_line field.
+ 	(linemap_line_start):  Minor optimization - use highest_line field.
+ 	Reduce maximum column hint to 10000.  Update highest_line field.
+ 	(linemap_position_for_column):  Moved from line-map.h.  Optimize a bit.
+ 	* cpphash.h (struct cpp_reader):  Remove line field - instead use
+ 	line_table->highest_line.
+ 	(saved_line):  Remove unused field.
+ 	(CPP_INCREMENT_FILE):  Don't do linemap_lookup - just use newest map.
+ 	Use  line_table's highest_line field instead of cpp_reader's line.
+ 	* cpplib.c (start_directive):  Likewise use highest_line field.
+ 	(do_line, do_linemarker):  Likewise just use newest map.
+ 	(_cpp_do_file_change):  Don't need to set cpp_reader's line field.
+ 	* cpperror.c (cpp_error):  Likewise use highest_line field.
+ 	* cppfiles.c (open_file_failed:  Likewise.
+ 	(cpp_make_system_header):  Likewise use newest map and highest_line.
+ 	* cppinit.c (cpp_create_reader):  Don't initialize removed field.
+ 	* cpplex.c (_cpp_process_line_notes, _cpp_skip_block_comment,
+ 	skip_line_comment, skip_whitespace, _cpp_get_fresh_line,
+ 	_cpp_lex_direct):  Likewise use highest_line.
+ 	(_cpp_lex_direct):  Use new LINEMAP_POSITION_FOR_COLUMN macro.
+ 	* cppmacro.c (_cpp_builtin_macro_text):  Likewise use highest_line,
+ 	and use newest map.
+ 	* cpppch.c (cpp_read_state):  Don't save+restore cpp_reader's line.
+ 	* cpptrad.c (_cpp_overlay_buffer):  Don't save cpp_reader's line.
+ 	(copy_comment, _cpp_scan_out_logical_line):  Likewise use highest_line.
+ 
+ 2004-04-23  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	PR bootstrap/14992
+ 	* gcc.c (init_gcc_specs): Test USE_LD_AS_NEEDED, not HAVE_LD_AS_NEEDED.
+ 	* config/linux.h (USE_LD_AS_NEEDED): Define.
+ 	* gcc/config/alpha/linux.h (USE_LD_AS_NEEDED): Define.
+ 	* gcc/config/arm/linux-elf.h (USE_LD_AS_NEEDED): Define.
+ 	* gcc/config/rs6000/linux.h (USE_LD_AS_NEEDED): Define.
+ 	* gcc/config/rs6000/linux64.h (USE_LD_AS_NEEDED): Define.
+ 	* gcc/config/sh/linux.h (USE_LD_AS_NEEDED): Define.
+ 	* gcc/config/sparc/linux.h (USE_LD_AS_NEEDED): Define.
+ 	* gcc/config/sparc/linux64.h (USE_LD_AS_NEEDED): Define.
+ 
+ 2004-04-22  Per Bothner  <per@bothner.com>
+ 
+ 	* cppinit.c (cpp_read_main_file):  Return NULL rather than false.
+ 	Fixes PR preprocessor/15067.
+ 
+ 2004-04-23  Andreas Schwab  <schwab@suse.de>
+ 
+ 	* config/ia64/ia64intrin.h: Add intermediate cast to void * to
+ 	avoid aliasing warning.
+ 
+ 2004-04-22  Jan Hubicka  <jh@suse.cz>
+ 	    Mostafa Hagog <mustafa@il.ibm.com>
+ 
+       * cfgloopmanip.c (scale_bbs_frequencies): Use RDIV macro
+       * cfgloopanal.c (expected_loop_iterations): Change the return value
+ 
+ 2004-04-22  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* cselib.h (struct elt_loc_list): Remove canon_loc field.
+ 	* cselib.c (new_elt_loc_list): Remove canon_loc initialization.
+ 	(cselib_invalidate_mem): Remove all canon_loc and canon_x
+ 	traces.
+ 
+ 2004-04-22  Josef Zlomek  <zlomekj@suse.cz>
+ 
+ 	Revert
+ 	2004-04-20  Josef Zlomek  <zlomekj@suse.cz>
+ 
+ 		* var-tracking.c (variable_part_different_p): Variable parts
+ 		differ when the most recent locations differ.
+ 
+ 2004-04-22  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* doc/invoke.texi: Remove the MIPS -membedded-pic option.
+ 	* config/mips/mips-protos.h (embedded_pic_fnaddr_reg): Delete.
+ 	(embedded_pic_offset): Delete.
+ 	* config/mips/mips.h (MASK_EMBEDDED_PIC): Delete.  Shuffle other
+ 	MASK_* constants.
+ 	(TARGET_EMBEDDED_PIC): Delete.
+ 	(TARGET_SWITCHES): Remove -m{no-,}embedded-pic.
+ 	(ASM_SPEC): Remove -membedded-pic.
+ 	(ASM_OUTPUT_ADDR_DIFF_ELT): Remove embedded-pic handling.
+ 	(ASM_OUTPUT_CASE_LABEL): Likewise.
+ 	* config/mips/vxworks.h (ASM_SPEC): Remove -membedded-pic.
+ 	* config/mips/windiss.h (ASM_SPEC): Likewise.
+ 	* config/mips/mips.c (struct machine_function): Remove
+ 	embedded_pic_fnaddr_rtx.
+ 	(TARGET_ENCODE_SECTION_INFO): Remove override.
+ 	(embedded_pic_fnaddr_reg, embedded_pic_offset): Delete.
+ 	(override_options): Remove -membedded-pic handling.
+ 	(print_operand): Remove handling of '%S'.
+ 	(mips_select_section: Remove -membedded-pic handling.
+ 	(mips_encode_section_info): Delete.
+ 	(mips_output_conditional_branch): Remove mention of -membedded-pic.
+ 	* config/mips/mips.md (define_attr length, movsi, movdi, jump): Remove
+ 	-membedded-pic handling.
+ 	(casesi, casesi_internal, casesi_internal_di, get_fnaddr): Delete.
+ 
+ 2004-04-22  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* var-tracking.c (frame_base_decl): Remove useless GTY.
+ 
+ 2004-04-21  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_override_options): Error when
+ 	user wants altivec and e500 instructions.
+ 
+ 2004-04-21  H.J. Lu  <hongjiu.lu@intel.com>
+ 
+ 	PR target/14813
+ 	* config/ia64/crtend.asm: Move pointer to __do_global_ctors_aux
+ 	in .init_array section to ...
+ 	* config/ia64/crtbegin.asm: Here.
+ 
+ 	* config/ia64/crtend.asm: Mark __do_global_ctors_aux global
+ 	and hidden if HAVE_INITFINI_ARRAY is defined.
+ 
+ 2004-04-21  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	* config/mips/mips-protos.h (fp_register_operand, lo_operand): Declare.
+ 	* config/mips/mips.c (mips_multipass_dfa_lookahead): Declare.
+ 	(TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD): New.
+ 	(fp_register_operand, lo_operand): New.
+ 	(mips_rtx_costs): Add TUNE_SB1 support.
+ 	(mips_issue_rate): Add comment.  Add PROCESSOR_SB1 support.
+ 	(mips_use_dfa_pipeline_interface): Add PROCESSOR_SB1 support.
+ 	(mips_multipass_dfa_lookahead): New.
+ 	* config/mips/mips.h (MASK_FP_EXCEPTIONS, TARGET_FP_EXCEPTIONS,
+ 	TUNE_SB1): New.
+ 	(TARGET_SWITCHES): Add -mfp-exceptions support.
+ 	(TARGET_FP_EXCEPTIONS_DEFAULT): New.
+ 	(BRANCH_COST): Fix whitespace.
+ 	* config/mips/mips.md: Include sb1.md.
+ 	* config/mips/sb1.md: New file.
+ 	* doc/invoke.texi: Document -mfp-exceptions.
+ 
+ 	* Makefile.in (fixinc.sh): Don't set or export WARN_CFLAGS.  Fix
+ 	comment.
+ 	* fixinc/Makefile.in (FL_LIST): Don't mention WARN_CFLAGS.
+ 	(fixincl.o-warn): Delete.
+ 
+ 2004-04-21  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* config/rs6000/rs6000 (print_operand) ['z']:
+ 	Change ifdef of TARGET_MACHO to if TARGET_MACHO.
+ 
+ 2004-04-21 Daniel Jacobowitz  <drow@mvista.com>
+ 
+ 	* config.gcc: Support --with-arch=iwmmxt for ARM.
+ 
+ 2004-04-21  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* expmed.c (expand_mult_highpart_optab): Use narrower version of OP1
+ 	in two more places; remove unneeded force_reg
+ 
+ 2004-04-21  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* config/rs6000/rs6000.c (symbol_ref_operand): Remove hack
+ 	for TARGET_MACHO.
+ 	(print_operand): For TARGET_MACHO check to see if we need a stub
+ 	and output one if we need it.
+ 
+ 	PR debug/15033
+ 	* dwarf2out.c (rtl_for_decl_location): Check for NULL
+ 	rtl.
+ 
+ 2004-04-20  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	* config/ia64/ia64.md (call_value_nogp): Add constraints for op0.
+ 	(vall_value_gp): Likewise.
+ 
+ 2004-04-20  DJ Delorie  <dj@redhat.com>
+ 
+ 	* dwarf2out.c (rtl_for_decl_location): Adjust rtl for byte
+ 	variables stored in word registers, then in memory.
+ 
+ 2004-04-20  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* cp/parser.c (cp_parser_declaration): Move translate
+ 	up before tokens are lexed.
+ 
+ 2004-04-20  Uros Bizjak  <uros@kss-loka.si>
+ 
+ 	* optabs.h (enum optab_index): Add new OTI_asin and OTI_acos.
+ 	(asin_optab, acos_optab): Define corresponding macros.
+ 	* optabs.c (init_optabs): Initialize asin_optab and acos_optab.
+ 	* genopinit.c (optabs): Implement asin_optab and acos_optab
+ 	using asin?f2 and acos?f2 patterns.
+ 	* builtins.c (expand_builtin_mathfn): Handle BUILT_IN_ASIN{,F,L}
+ 	using asin_optab, and BUILT_IN_ACOS{,F,L} using acos_optab.
+ 	(expand_builtin): Expand BUILT_IN_ASIN{,F,L} and BUILT_IN_ACOS{,F,L}
+ 	using expand_builtin_mathfn if flag_unsafe_math_optimizations is set.
+ 
+ 	* config/i386/i386.md (asindf2, asinsf2, asinxf2, acosdf2,
+ 	acossf2, acosxf2): New expanders to implement asin, asinf, asinl,
+ 	acos, acosf and acosl built-ins as inline x87 intrinsics.
+ 
+ 2004-04-20  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/arm.c (arm_legitimate_address_p): Use rtx_equal_p.
+ 
+ 2004-04-20  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/arm.c (arm_expand_prologue): Fix size calculation.
+ 
+ 2004-04-20  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	Revert part of 2004-04-17 change that moved -frename-registers
+ 	to -O1.  -frename-registers is buggy.
+ 
+ 	* toplev.c (flag_rename_registers): Initialize to 0.
+ 	* doc/invoke.texi (Optimize options): Move -frename-registers
+ 	to "Not triggered by any -O level" section.  Adjust commentary
+ 	accordingly.
+ 
+ 2004-04-20  Anil Paranjpe <anilp1@kpitcummins.com>
+ 
+ 	* toplev.c (compile_file): Move targetm.asm_out.file_end call to end.
+ 
+ 2004-04-20  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.c (mips_legitimize_move): Generate special patterns
+ 	for mflo and mfhi instructions.
+ 	(mips_output_move): Remove mflo and mfhi handling.
+ 	* config/mips/mips.md (UNSPEC_MFHILO): New unspec.
+ 	(*mulsidi3_64bit): Update for new mfhi/mflo representation.
+ 	Likewise various define_peephole2s.
+ 	(*movdi_32bit, *movdi_64bit, *movsi_internal): Merge x<-J and x<-d
+ 	alternatives.
+ 	(*movdi_64bit, *movdi_64bit_mips16, *mov[shq]i_internal)
+ 	(*mov[shq]i_mips16): Remove mflo and mfhi alternatives.
+ 	(mfhilo_di, mfhilo_si): New patterns.
+ 
+ 2004-04-20  Josef Zlomek  <zlomekj@suse.cz>
+ 
+ 	* function.c (assign_parms): Force
+ 	MEM_EXPR (DECL_INCOMING_RTL (parm)) == parm.
+ 
+ 2004-04-20  Josef Zlomek  <zlomekj@suse.cz>
+ 
+ 	* var-tracking.c (variable_part_different_p): Variable parts differ
+ 	when the most recent locations differ.
+ 
+ 2004-04-19  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	* rtl.h (reg_set_last): Delete declaration.
+ 	* rtlanal.c (reg_set_last): Delete.
+ 
+ 2004-04-19  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* fold-const.c (fold_convert): Make function extern/public.
+ 	* tree.h (fold_convert): Prototype here.
+ 	* builtins.c (expand_builtin_strstr, expand_builtin_strchr,
+ 	expand_builtin_strrchr, expand_builtin_strpbrk,
+ 	expand_builtin_mempcpy, expand_builtin_bcopy,
+ 	expand_builtin_bzero, expand_builtin_memcmp,
+ 	expand_builtin_strcmp, expand_builtin_strncmp,
+ 	stabilize_va_list, expand_builtin_sprintf,
+ 	fold_trunc_transparent_mathfn, fold_builtin_logarithm,
+ 	fold_builtin_exponent, fold_builtin_mempcpy,
+ 	fold_builtin_strcpy, fold_builtin_strcmp, fold_builtin_strncmp,
+ 	fold_builtin_signbit, fold_builtin_isdigit, fold_builtin): Prefer
+ 	fold_convert to "convert" or "fold (build1 (NOP_EXPR, ...))".
+ 
+ 2004-04-19  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* config/rs6000/rs6000.md (UNSPEC_MV_CR_GT): New constant.
+ 	(move_from_CR_gt_bit): New.
+ 	(cceq_ior_compare): Name previously unnamed pattern.  Disable for
+ 	E500.
+ 	(cceq_rev_compare): Name previously unnamed pattern.  Allow for
+ 	E500.
+ 
+ 	* config/rs6000/spe.md (cmpsfeq_gpr): Rewrite as unspec.
+ 	(tstsfeq_gpr): Same.
+ 	(cmpsfgt_gpr): Same.
+ 	(tstsfgt_gpr): Same.
+ 	(cmpsflt_gpr): Same.
+ 	(tstsflt_gpr): Same.
+ 	(e500_cceq_ior_compare): New.
+ 	(e500_flip_gt_bit): New.
+ 
+ 	* config/rs6000/rs6000.c (ccr_bit): Remove E500 specific code.
+ 	(print_operand): Add 'c' and 'D'.
+ 	(rs6000_generate_compare): Rewrite to generate correct rtl.
+ 	(rs6000_emit_sCOND): Handle E500.
+ 	(output_cbranch): Adjust for changes in rs6000_generate_compare.
+ 	(output_e500_flip_gt_bit): New.
+ 
+ 	* config/rs6000/rs6000-protos.h (output_e500_flip_gt_bit):
+ 	Protoize.
+ 
+ 2004-04-19  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* config/mips/mips.h (DWARF2_ADDR_SIZE): New.
+ 
+ 2004-04-19  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* doc/install.texi (*-ibm-aix*): Add AIX 5.1 assembler and archiver
+ 	fix information.
+ 
+ 2004-04-19  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+ 
+ 	* doc/install.texi (Specific, mips-sgi-irix5): Fix IRIX 5.3 IDO
+ 	download URL.
+ 
+ 2004-04-19  Daniel Jacobowitz  <drow@mvista.com>
+ 
+ 	* stor-layout.c (layout_decl): Check DECL_PACKED before calling
+ 	ADJUST_FIELD_ALIGN.  Check maximum_field_alignment after.
+ 
+ 2004-04-19  Andrew PInski  <pinskia@physics.uc.edu>
+ 
+ 	* builtins.c (fold_builtin_cabs): Remove fndecl parameter.
+ 	(fold_builtin): Update caller to match.
+ 
+ 	PR bootstrap/15009
+ 	* bb-reorder.c (fix_up_fall_thru_edges): Init cond_jump.
+ 
+ 	PR bootstrap/14999
+ 	* builtins.c (fold_builtin_cabs): Mark fndecl as unused.
+ 
+ 2004-04-19  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* varasm.c (compare_constant, case VIEW_CONVERT_EXPR): Add case.
+ 
+ 	* expmed.c (expand_mult_highpart_adjust): Make OP1 valid for MODE.
+ 	(expand_mult_highpart_optab): Likewise.
+ 	(expand_mult_highpart): Make OP1 valid for WIDER_MODE, not MODE.
+ 
+ 2004-04-19  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/arm.md (fixuns_truncsfsi2, fixuns_truncdfsi2,
+ 	floatunssisf2, floatunssidf2): New patterns.
+ 
+ 2004-04-18  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	PR other/14918
+ 	* doc/invoke.texi (-fprofile-generate): Document requirement to
+ 	use -fprofile-generate when linking.
+ 
+ 	* doc/extend.texi (Strong Using): Warn users against using this
+ 	feature.
+ 
+ 2004-04-18  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips-protos.h (m16_usym8_4, m16_usym5_4): Delete.
+ 	* config/mips/mips.h (mips_entry, mips_string_length): Delete.
+ 	(CONSTANT_POOL_BEFORE_FUNCTION, ASM_OUTPUT_POOL_EPILOGUE): Undefine.
+ 	* config/mips/mips.c (struct mips16_constant): Renamed from struct
+ 	constant.  Propogate change throughout file.
+ 	(struct machine_function): Remove insns_len.
+ 	(mips_string_length, mips16_strings, string_constants): Delete.
+ 	(mips_classify_symbol): Return SYMBOL_CONSTANT_POOL for LABEL_REFs
+ 	when generating mips16 code.  Remove special mips16 treatment of
+ 	string constants.
+ 	(mips_symbolic_constant_p): Allow mips16 constant pool accesses
+ 	to have the form LABEL+CONSTANT.
+ 	(mips_symbolic_address_p): Fix comment.
+ 	(m16_usym8_4, m16_usym5_4): Delete.
+ 	(mips_output_function_epilogue): Remove mips16 string handling.
+ 	(mips_output_mi_thunk): Call mips16_lay_out_constants.
+ 	(mips_select_section, mips_encode_section_info): Remove mips16
+ 	string handling.
+ 	(struct mips16_constant_pool): New.
+ 	(add_constant): Take a mips16_constant_pool structure.  Keep pool
+ 	sorted into order of ascending mode size.  Keep track of the highest
+ 	possible start address, taking padding and the masking of the base PC
+ 	value into account.
+ 	(dump_constants_1): New function, split out from dump_constants.
+ 	Handle vector constants.  Use gen_consttable_{int,float} rather than
+ 	separate functions for each mode.
+ 	(dump_constants): Simplify.  Use GET_MODE_ALIGNMENT.  Use gen_align
+ 	rather than separate functions for each alignment.
+ 	(mips_find_symbol): Delete.
+ 	(mips16_insn_length): New function, split out from
+ 	mips16_lay_out_constants.
+ 	(mips16_rewrite_pool_refs): New function.
+ 	(mips16_lay_out_constants): Rework. Remove string handling.
+ 	Always create an inline constant pool.
+ 	* config/mips/mips.md (UNSPEC_CONSTTABLE_INT, UNSPEC_CONSTTABLE_FLOAT)
+ 	(UNSPEC_ALIGN): New constants.
+ 	(UNSPEC_CONSTTABLE_[QHSD]I, UNSPEC_CONSTTABLE_[SD]F): Delete.
+ 	(UNSPEC_ALIGN_[248]): Delete.
+ 	(consttable_int, consttable_float, align): New patterns.
+ 	(consttable_[qhsd]i, consttable_[sd]f, align_[248]): Delete.
+ 
+ 2004-04-17  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* config/rs6000/altivec.h (vec_any_numeric): Correct typo in
+ 	__unn_args_eq.
+ 
+ 2004-04-17  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	PR target/14715
+ 	* config/rs6000/rs6000.c (rs6000_stack_info): Make parm_size agree
+ 	with STARTING_FRAME_OFFSET.
+ 
+ 2004-04-17  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.h (PREDICATE_CODES): Add macc_msac_operand.
+ 	* config/mips/mips.c (macc_msac_operand): New function.
+ 	* config/mips/mips.md (*msac): Move after *macc.
+ 	(*msac2): New.  Generalize macc-related peepholes so that they apply
+ 	to msac too.
+ 
+ 2004-04-17  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* opts.c (decode_options): Do not enable flag_rename_registers
+ 	and flag_web at -O3.
+ 	* toplev.c (flag_rename_registers): Initialize
+ 	flag_rename_registers and flag_web to
+ 	AUTODETECT_FLAG_VAR_TRACKING.
+ 	(default_debug_hooks): New global.
+ 	(process_options): Initialize default_debug_hooks.  Warn if
+ 	-fvar-tracking specified but not supported by the current
+ 	debug format.  Do not run var tracking at -O0 or if not
+ 	supported by the current debug format, even if
+ 	-fvar-tracking was given.  If -fno-rename-registers
+ 	is not specified, always run register renaming if var
+ 	tracking is supported by the default debugging information
+ 	format for the target, and we are at -O1 or higher; similarly
+ 	for -fweb, but only at -O2 or higher.
+ 	* doc/invoke.texi (Optimize Options): Document this.
+ 
+ 2004-04-17  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* configure.ac (gcc_cv_ld_as_needed): Use AC_CACHE_CHECK.
+ 	* configure: Regenerate.
+ 
+ 2004-04-17  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* gcc.c (used_arg): Check whether an option has been removed.
+ 
+ 2004-04-17  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+ 
+ 	* config.gcc (i[34567]86-*-solaris2*): Default to DWARF-2
+ 	debugging on Solaris 7 and up.
+ 
+ 2004-04-16  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+ 
+ 	* doc/install.texi (Specific, mips-sgi-irix5): Reflect working
+ 	IRIX 5 port.
+ 	Remove -save-temps workaround, handled automatically.
+ 	Require GNU binutils 2.15 for debugging.
+ 	Remove SGI make warnings since GNU make is now required.
+ 	(Specific, mips-sgi-irix6): Some markup fixes.
+ 	Describe MIPSpro C problems and workarounds.
+ 	Mention working O32 ABI support.
+ 	Recommend GNU as 2.15 for O32 with debugging.
+ 	Remove description of fixed structure pass/return bug.
+ 
+ 2004-04-16  DJ Delorie  <dj@redhat.com>
+ 
+ 	* sdbout.c (sdbout_one_type): Use TYPE_VALUES for enums, not
+ 	TYPE_FIELDS.
+ 	(sdbout_finish): Don't free deferred_global_decls; it's GC'd.
+ 
+ 2004-04-16  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	* pa.md: Remove unnecessary declarations for asm_out_file.
+ 
+ 	* pa64-regs.h (DBX_REGISTER_NUMBER): Simplify and correct mapping of
+ 	SAR register.  Fix comment.
+ 	(ADDITIONAL_REGISTER_NAMES): Correct register number of SAR register
+ 	(%cr11).
+ 
+ 	* pa64-hpux.h (LIB_SPEC): Fix library specification used with GNU ld.
+ 
+ 2004-04-16  Nick Clifton  <nickc@redhat.com>
+ 
+ 	* config/arm/arm.c (arm_override_options): Revert previous patch.
+ 	* config/arm/t-xscale-elf: Disable iwmmxt multilibs until they can
+ 	be safely built.
+ 
+ 2004-04-16  Kazuhiro Inaoka <inaoka.kazuhiro@renesas.com>
+ 
+ 	* config/m32r/m32r.h (BIG_ENDIAN_BIT): Deleted to fix endian
+ 	bug.
+ 	(TARGET_LITTLE_ENDIAN, TARGET_BIG_ENDIAN,
+ 	TARGET_DEFAULT): Changed. Ditto.
+ 	(LITTLE_ENDIAN_BIT, TARGET_CPU_DEFAULT,
+ 	TARGET_ENDIAN_DEFAULT): Added. Ditto.
+ 	* config/m32r/little.h (TARGET_LITTLE_ENDIAN): Deleted.
+ 	(TARGET_ENDIAN_DEFAULT): Added.
+ 
+ 2004-04-15  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+ 
+ 	* builtins.def (BUILT_IN_ISDIGIT, BUILT_IN_ISXDIGIT): Mark with
+ 	ATTR_CONST_NOTHROW_LIST.
+ 
+ 2004-04-15  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+ 
+ 	PR/middle-end 14915
+ 	* builtins.c (expand_builtin_signbit): Test BYTES_BIG_ENDIAN, not
+ 	BITS_BIG_ENDIAN.
+ 
+ 2004-04-15  Pat Haugen  <pthaugen@us.ibm.com>
+ 
+ 	* ra-debug.c (ra_print_rtx): Add break's to case legs.
+ 
+ 2004-04-14  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	* Makefile.in (fixinc.sh): Set WARN_CFLAGS to empty string.
+ 
+ 2004-04-14  Nathanael Nerode  <neroden@gcc.gnu.org>
+ 
+ 	* libada-mk.in: New file.
+ 	* configure.ac: Create libada-mk from libada-mk.in.
+ 	* configure: Regenerate.
+ 
+ 2004-04-14  Uros Bizjak  <uros@kss-loka.si>
+ 
+ 	* optabs.h (enum optab_index): Add new OTI_logb and OTI_ilogb.
+ 	(logb_optab, ilogb_optab): Define corresponding macros.
+ 	* optabs.c (init_optabs): Initialize logb_optab and ilogb_optab.
+ 	* genopinit.c (optabs): Implement logb_optab and ilogb_optab
+ 	using logb?f2 and ilogb?i2 patterns.
+ 	* builtins.c (expand_builtin_mathfn): Handle BUILT_IN_LOGB{,F,L}
+ 	using logb_optab, and BUILT_IN_ILOGB{,F,L} using ilogb_optab.
+ 	(expand_builtin): Expand BUILT_IN_LOGB{,F,L} and BUILT_IN_ILOGB{,F,L}
+ 	using expand_builtin_mathfn if flag_unsafe_math_optimizations is set.
+ 
+ 	* reg-stack.c (subst_stack_regs_pat): Handle UNSPEC_XTRACT_FRACT
+ 	and UNSPEC_XTRACT_EXP.
+ 
+ 	* config/i386/i386.md (*fxtractdf3, *fxtractsf3, *fxtractxf3): New
+ 	patterns to implement fxtract x87 instruction.
+ 	(logbdf2, logbsf2, logbxf2, ilogbsi2): New expanders to implement
+ 	logb, logbf, logbl, ilogb, ilogbf and ilogbl built-ins as inline x87
+ 	intrinsics.
+ 	(UNSPEC_XTRACT_FRACT, UNSPEC_XTRACT_EXP): New unspecs to represent
+ 	x87's fxtract insn.
+ 
+ 2004-04-14  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* config/mips/t-elf: Enable multilibs by default.
+ 
+ 2004-04-14  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* bb-reorder.c (fix_crossing_conditional_branches): Adjust the
+ 	previous fix to check HAVE_return at runtime too.
+ 
+ 2004-04-14  Nick Clifton  <nickc@redhat.com>
+ 
+ 	* config/arm/arm.c (arm_override_options): If the user has not
+ 	specified an ABI, then default to AAPCS for the iWMMXt processor.
+ 	* config/arm/t-xscale-elf: Remove redundant multilib specifications.
+ 	* config/arm/t-xscale-coff: Likewise.
+ 
+ 2004-04-14  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+ 
+ 	* builtins.c (fold_builtin_isdigit): New.
+ 	(fold_builtin): Handle BUILT_IN_ISDIGIT.
+ 	* defaults.h: Add TARGET_DIGIT0 and sort.
+ 	* doc/tm.texi: Add TARGET_BS and TARGET_DIGIT0.
+ 
+ 2004-04-14  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+ 
+ 	* builtins.c (fold_builtin_cabs, fold_builtin): Use
+ 	`mathfn_built_in' to determine the new builtin.
+ 	* fold-const.c (fold): Likewise.
+ 
+ 2004-04-14  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* doc/invoke.texi: Rename MIPS's -mfix-vr4122-bugs to -mfix-vr4120.
+ 	* config/mips/mips.h (MASK_FIX_VR4120): Renamed from MASK_FIX_VR4122.
+ 	(TARGET_FIX_VR4120): Likewise TARGET_FIX_VR4122.
+ 	(TARGET_SWITCHES): Replace -mfix-vr4122-bugs with -mfix-vr4120.
+ 	(ASM_SPEC): Update accordingly.
+ 	* config/mips/mips.c: Update after above renaming.
+ 	* config/mips/mips.md, config/mips/t-vr, config/mips/vr.h: Likewise.
+ 	* config/mips/vr4120-div.S: Renamed from vr4122-div.S.
+ 
+ 2004-04-13  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	* c-opt.c (c_common_post_options): If this_input_filename is NULL,
+ 	increment errorcount and return false instead of true.
+ 
+ 2004-04-13  Uros Bizjak  <uros@kss-loka.si>:
+ 
+ 	* optabs.c (expand_twoval_unop): Reorder function arguments.
+ 	* builtins.c (expand_builtin_mathfn_3): Update calls to
+ 	expand_twoval_unop.
+ 
+ 	* reg-stack.c (subst_stack_regs_pat): Handle UNSPEC_TAN_ONE
+ 	and UNSPEC_TAN_TAN. Add missing comment.
+ 
+ 	* config/i386/i386.md (*tandf3_1, *tansf3_1, *tanxf3_1): New
+ 	patterns to implement fptan x87 instruction.
+ 	(tandf2, tansf2, tanxf2): New expanders to implement tan, tanf
+ 	and tanl built-ins as inline x87 intrinsics. Define corresponding
+ 	peephole2 optimizers for 'fptan; fstp %st(0); fld1' sequence.
+ 	(UNSPEC_TAN_ONE, UNSPEC_TAN_TAN): New unspecs to represent
+ 	x87's fptan insn.
+ 
+ 2004-03-13  Richard Henderson  <rth@redhat.com>
+ 
+ 	* bb-reorder.c (fix_crossing_unconditional_branches): Use Pmode
+ 	for LABEL_REFs.
+ 
+ 	* defaults.h (HOT_TEXT_SECTION_NAME): Add leading dot.
+ 	(UNLIKELY_EXECUTED_TEXT_SECTION_NAME): Likewise.
+ 	* doc/invoke.texi: Update to match.
+ 
+ 	* varasm.c (unlikely_text_section): Use assemble_align instead of
+ 	ASM_OUTPUT_ALIGN.  Use it in the correct place with an approximately
+ 	correct alignment argument.
+ 
+ 2004-04-13  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* reload1.c (emit_reload_insns): Set reg_has_output_reload to one
+ 	after setting reg_last_reload_reg for optional output reloads.
+ 
+ 2004-04-12  Fariborz Jahanian <fjahanian@apple.com>
+ 
+ 	* config/rs6000/altivec.h (vec_mergeh, vec_mergel):
+ 	Definition of these two macros are corrected by adding
+ 	matchine right paren.
+ 
+ 2004-04-12  Jonathan Larmour  <jifl@eCosCentric.com>
+ 
+ 	* fix-header.c: kill(), putenv() and tzset() are POSIX not ANSI.
+ 
+ 2004-04-12  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* config/i386/i386.c (output_387_reg_move): New function.
+ 	* config/i386/i386-protos.h (output_387_reg_move): Prototype here.
+ 	* config/i386/i386.md (*movsf_1, *movsf1_nointerunit,
+ 	*movdf_nointeger, *movdf_integer, *movxf_nointeger, *movxf_integer,
+ 	*extendsfdf2_1,  *extendsfxf2_1, *extenddfxf2_1, truncdfsf2_noop,
+ 	truncxfsf2_noop, truncxfdf2_noop): Call output_387_reg_move.
+ 
+ 2004-04-12  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* c-decl.c (finish_decl): Make a decl_stmt for a variable-sized
+ 	TYPE_DECL.
+ 	* c-semantics.c (genrtl_decl_stmt): Handle TYPE_DECL.
+ 	* stmt.c (expand_decl): Remove redundant expansion of TYPE_DOMAIN.
+ 	* stor-layout.c (variable_size): Don't check for MINUS_EXPR.
+ 	Use skip_simple_arithmetic to find SAVE_EXPR.
+ 	(force_type_save_exprs, force_type_save_exprs_1): New functions.
+ 	* tree-inline.c (remap_type, case POINTER_TYPE, case REFERENCE_TYPE):
+ 	Properly chain multiple pointers.
+ 	(copy_tree_r): Copy a TYPE_DECL.
+ 	* tree.c (variably_modified_type_p): Add some missing tests and
+ 	make some other minor changes.
+ 	* tree.h (force_type_save_exprs): New declaration.
+ 
+ 2004-04-12  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* simplify-rtx.c (simplify_binary_operation) <UDIV, DIV, UMOD, MOD>:
+ 	Remove fall throughs.  Convert 0/x and 0%x into x&0 when x has
+ 	side-effects.  Don't convert x/1.0 into x if we honor signaling NaNs.
+ 	Convert x/-1.0 into -x if we don't honor signaling NaNs.  Convert
+ 	x/-1 into -x.  Optimize x%1 into x&0 if x has side-effects.  Optimize
+ 	x%-1 into 0 (or x&0 if x has side-effects).
+ 
+ 2004-04-11  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* config/rs6000/rs6000.md: Document why a pattern is not
+ 	available.
+ 
+ 	* config/rs6000/rs6000.c (rs6000_emit_cmove): Disable comparisons
+ 	of floats on the E500.
+ 	(branch_positive_comparison_operator): Do not allow NE even on the
+ 	E500.
+ 
+ 2004-04-11  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_assemble_integer): Change
+ 	in_text_unlikely_section to in_unlikely_text_section.
+ 
+ 2004-04-11  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* fold-const.c (fold_binary_op_with_conditional_arg):  Tweak
+ 	calling convention to allow a NULL_TREE to be returned.  Factor
+ 	sanity checks from callers, return NULL_TREE when appropriate.
+ 	(fold): Handle COMPOUND_EXPR operands of binary expressions
+ 	before COND_EXPR operands.  Use reorder_operands_p(a,b) to check
+ 	whether a op (b,c) can be rewritten as (b, a op c).  Simplify
+ 	calls to fold_binary_op_with_conditional_arg.
+ 
+ 2004-04-11  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+ 
+ 	* config/mips/iris5.h (current_section_flags):  Add
+ 	in_unlikely_executed_text and default case.
+ 
+ 2004-04-11  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* bb-reorder.c (fix_crossing_conditional_branches): Fix bootstrap
+ 	failure on solaris. Place ifdef HAVE_return around gen_ret call.
+ 	* cfgrtl.c (force_nonfallthru_and_redirect): Remove ifdef
+ 	HAVE_return and place it around the place where it is needed.
+ 
+ 2004-04-11  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* varasm.c (text_section): Use TEXT_SECTION_ASM_OP and
+ 	ASM_OUTPUT_ALIGN instead of SECTION_FORMAT_STRING
+ 	and NORMAL_TEXT_SECTION_NAME.
+ 	(unlikely_text_section): Check targetm.have_named_sections
+ 	instead of TARGET_ASM_NAMED_SECTION and use TEXT_SECTION_ASM_OP
+ 	instead of SECTION_FORMAT_STRING.
+ 	* config/mips/iris5.h (current_section_name): Add
+ 	in_unlikely_executed_text case and move the abort into the switch.
+ 	* config/rs6000/sysv4.h (HOT_TEXT_SECTION_NAME): Remove.
+ 	(NORMAL_TEXT_SECTION_NAME): Remove.
+ 	(UNLIKELY_EXECUTED_TEXT_SECTION_NAME): Remove.
+ 	(SECTION_FORMAT_STRING): Remove.
+ 	* defaults.h (SECTION_FORMAT_STRING): Remove.
+ 	* tm.texi (NORMAL_TEXT_SECTION_NAME): Remove.
+ 	(SECTION_FORMAT_STRING): Remove.
+ 
+ 2004-04-10  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-typeck.c (common_type): Prefer long long to long when same
+ 	precision.
+ 
+ 2004-04-09  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	PR 14887
+ 	* config/ia64/hpux.h (MEMBER_TYPE_FORCES_BLK): Look only at
+ 	mode argument.
+ 	* config/ia64/ia64.c (ia64_hpux_file_end): Check
+ 	TREE_SYMBOL_REFERENCED on DECL_ASSEMBLER_NAME, not DECL_NAME.
+ 
+ 2004-04-09  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* simplify-rtx.c (mode_signbit_p): New function to check whether
+ 	an RTX is an immediate constant that represents the most significant
+ 	bit of a given machine mode.
+ 	(simplify_unary_operation) <NOT>: Optimize ~(X+C) as X ^ ~C, where
+ 	C is the sign bit.
+ 	(simplify_binary_operation) <PLUS>: Optimize (X^C1) + C2 as X^(C1^C2)
+ 	when C2 is the sign bit.
+ 	(simplify_binary_operation) <XOR>: Canonicalize X^C as X+C when C
+ 	is the sign bit.  Optimize (X+C1) ^ C2 as X^(C1^C2) when C1 is the
+ 	sign bit.
+ 
+ 2004-04-09  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+ 
+ 	* builtins.c (mathfn_built_in): Check TYPE_MAIN_VARIANT, not
+ 	TYPE_MODE.
+ 
+ 2004-04-09  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* c-common.c (handle_noreturn_attribute): Use TYPE_READONLY instead
+ 	of TREE_READONLY for types.
+ 
+ 2004-04-09  Caroline Tice  <ctice@apple.com>
+ 
+ 	* basic-block.h (struct edge_def):  Add new field, crossing_edge.
+ 	(struct basic_block_def):  Add new field, partition.
+ 	(UNPARTITIONED, HOT_PARTITION, COLD_PARTITION):  New constant macro
+ 	definitions.
+ 	(partition_hot_cold_basic_blocks): Add extern function
+ 	declaration.
+ 	* bb-reorder.c (function.h, obstack.h, expr.h, regs.h):  Add four new
+ 	include	statements.
+ 	(N_ROUNDS): Increase the maximum number of rounds by 1.
+ 	(branch_threshold): Add array value for new round.
+ 	(exec_threshold): Add array value for new round.
+ 	(push_to_next_round_p): New function.
+ 	(add_unlikely_executed_notes): New function.
+ 	(find_rarely_executed_basic_blocks_and_crossing_edges): New function.
+ 	(mark_bb_for_unlikely_executed_section): New function.
+ 	(add_labels_and_missing_jumps): New function.
+ 	(add_reg_crossing_jump_notes): New function.
+ 	(fix_up_fall_thru_edges): New function.
+ 	(find_jump_block): New function.
+ 	(fix_crossing_conditional_branches): New function.
+ 	(fix_crossing_unconditional_branches): New function.
+ 	(fix_edges_for_rarely_executed_code): New function.
+ 	(partition_hot_cold_basic_blocks): New function.
+ 	(find_traces):  Add an extra round for partitioning hot/cold
+ 	basic blocks.
+ 	(find_traces_1_round): Add a parameter.  Modify to push all cold blocks,
+ 	and only cold blocks, into the last (extra) round of collecting traces.
+ 	(better_edge_p): Add a parameter.  Modify to favor non-crossing edges
+ 	over crossing edges.
+ 	(bb_to_key):  Add code to correctly identify cold blocks when
+ 	doing partitioning.
+ 	(connect_traces): Modify to connect all the non-cold traces first, then
+ 	go back and connect up all the cold traces.
+ 	(reorder_basic_blocks):  Add call to add_unlikely_executed_notes.
+ 	* cfg.c (entry_exit_blocks): Add initialization for partition field in
+ 	entry and exit blocks.
+ 	* cfgbuild.c (make_edges): Update current_function_has_computed_jump
+ 	if we are doing hot/cold partitioning.
+ 	* cfgcleanup.c (cfglayout.h): Add new include statement.
+ 	(try_simplify_condjump): Modify to not attempt on blocks with jumps
+ 	that cross section boundaries.
+ 	(try_forward_edges): Likewise.
+ 	(merge_blocks_move_predecessor_nojumps): Likewise.
+ 	(merge_blocks_move_successor_nojumps): Likewise.
+ 	(merge_blocks_move): Likewise.
+ 	(try_crossjump_to_edge): Modify to not attempt after we have done
+ 	the block partitioning.
+ 	(try_crossjump_bb): Modify to not attempt on blocks with jumps that
+ 	cross section boundaries.
+ 	(try_optimize_cfg): Likewise.
+ 	* cfghooks.c (tidy_fallthru_edges): Modify to not remove indirect
+ 	jumps that cross section boundaries.
+ 	* cfglayout.c (flags.h): Add new include statement.
+ 	(update_unlikely_executed_notes):  New function.
+ 	(fixup_reorder_chain):  Add code so when a new jumping basic block is
+ 	added, it's UNLIKELY_EXECUTED_CODE and REG_CROSSING_JUMP notes are
+ 	updated appropriately.
+ 	(duplicate_insn_chain):  Add code to duplicate the new NOTE insn
+ 	introduced by this optimization.
+ 	* cfglayout.h (scan_ahead_for_unlikely_executed_note):  Add new
+ 	extern function declaration.
+ 	* cfgrtl.c (can_delete_note_p):  Add NOTE_INSN_UNLIKELY_EXECUTED_CODE to
+ 	list of notes that can be deleted.
+ 	(create_basic_block_structure):  Add initialization for partition field.
+ 	(rtl_can_merge_blocks):  Modify to test blocks for jumps that cross
+ 	section boundaries.
+ 	(try_redirect_by_replacing_jump):  Modify to not attempt on jumps that
+ 	cross section boundaries.
+ 	(commit_one_edge_insertion): Add code so newly created basic block
+ 	ends up in correct (hot or cold) section.  Modify to disallow
+ 	insertions before NOTE_INSN_UNLIKELY_EXECUTED_CODE notes.
+ 	(rtl_verify_flow_info_1):  Add code to verify that no fall_thru edge
+ 	crosses section boundaries.
+ 	(cfg_layout_can_merge_blocks_p): Modify to test blocks for jumps that
+ 	cross section boundaries.
+ 	(force_nonfallthru_and_redirect): Modify to make sure new basic block
+ 	ends up in correct section, with correct notes attached.
+ 	* common.opt (freorder-blocks-and-partition):  Add new flag for this
+ 	optimization.
+ 	* dbxout.c (dbx_function_end):  Add code to make sure scope labels at
+ 	the end of functions are written into the correct (hot or cold)
+ 	section.
+ 	(dbx_source_file): Add code so writing debug file information
+ 	doesn't incorrectly change sections.
+ 	* defaults.h (NORMAL_TEXT_SECTION_NAME): New constant macro, for use
+ 	in partitioning hot/cold basic blocks into separate sections.
+ 	(SECTION_FORMAT_STRING): New constant macro, for linux/i386 hot/cold
+ 	section partitioning.
+ 	(HAS_LONG_COND_BRANCH): New constant macro, indicating whether or not
+ 	conditional branches can span all of memory.
+ 	(HAS_LONG_UNCOND_BRANCH): New constant macro, indicationg whether or not
+ 	unconditional branches can span all of memory.
+ 	* final.c (scan_ahead_for_unlikely_executed_note):  New function.
+ 	(final_scan_insn):  Add code to check for NOTE instruction indicating
+ 	whether basic block belongs in hot or cold section, and to make sure
+ 	the current basic block is being written to the appropriate section.
+ 	Also added code to ensure that jump table basic blocks end up in the
+ 	correct section.
+ 	* flags.h (flag_reorder_blocks_and_partition):  New flag.
+ 	* ifcvt.c (find_if_case_1):  Modify to not attempt if conversion if
+ 	one of the branches has a jump that crosses between sections.
+ 	(find_if_case_2): Likewise.
+ 	(ifcvt): Modify to not attempt to mark loop exit edges after
+ 	hot/cold partitioning has occurred.
+ 	* opts.c (decode_options): Code to handle new flag,
+ 	flag_reorder_blocks_and_partition; also to turn it off if
+ 	flag_exceptions is on.
+ 	(common_handle_option): Code to handle new flag,
+ 	flag_reorder_blocks_and_partition.
+ 	* output.h (unlikely_text_section): New extern function declaration.
+ 	(in_unlikely_text_section): New extern function declaration.
+ 	* passes.c (rest_of_handle_stack_regs):  Add
+ 	flag_reorder_blocks_and_partition as an 'or' condition for calling
+ 	reorder_basic_blocks.
+ 	(rest_of_handle_reorder_blocks):  Add flag_reorder_blocks_and_partition
+ 	as an 'or' condition for calling reorder_basic_blocks.
+ 	(rest_of_compilation):  Add call to partition_hot_cold_basic_blocks.
+ 	* print-rtl.c (print_rtx): Add code for handling new note,
+ 	NOTE_INSN_UNLIKELY_EXECUTED_CODE
+ 	* rtl.c  (NOTE_INSN_UNLIKELY_EXECUTED_CODE): New note insn (see below).
+ 	(REG_CROSSING_JUMP): New kind of reg_note, to mark jumps that
+ 	cross between section boundaries.
+ 	* rtl.h (NOTE_INSN_UNLIKELY_EXECUTED_CODE):  New note instruction,
+ 	indicating the basic block containing it belongs in the cold section.
+ 	(REG_CROSSING_JUMP): New type of reg_note, to mark jumps that cross
+ 	between hot and cold sections.
+ 	* toplev.c (flag_reorder_blocks_and_partition):  Add code to
+ 	initialize this flag, and to tie it to the command-line option
+ 	freorder-blocks-and-partition.
+ 	* varasm.c (cfglayout.h):  Add new include statement.
+ 	(unlikely_section_label_printed):  New global variable, used for
+ 	determining when to output section name labels for cold sections.
+ 	(in_section):  Add in_unlikely_executed_text to enum data structure.
+ 	(text_section):  Modify code to use SECTION_FORMAT_STRING and
+ 	NORMAL_TEXT_SECTION_NAME macros.
+ 	(unlikely_text_section):  New function.
+ 	(in_unlikely_text_section):  New function.
+ 	(function_section):  Add code to make sure beginning of function is
+ 	written into correct section (hot or cold).
+ 	(assemble_start_function):  Add code to make sure stuff is written to
+ 	the correct section.
+ 	(assemble_zeros):  Add in_unlikely_text_section as an 'or' condition
+ 	to an if statement that was checking 'in_text_section'.
+ 	(assemble_variable):  Add 'in_unlikely_text_section' as an 'or'
+ 	condition to an if statement that was checking 'in_text_section'.
+ 	(default_section_type_flags_1):  Add check: if in cold section
+ 	flags = SECTION_CODE.
+ 	* config/darwin.c (darwin_asm_named_section):  Modify to use
+ 	SECTION_FORMAT_STRING if we are partitioning hot/cold blocks.
+ 	* config/i386/i386.h (HAS_LONG_COND_BRANCH): Defined this macro
+ 	specifically for the i386.
+ 	(HAS_LONG_UNCOND_BRANCH):  Defined this macro specifically for the i386.
+ 	* config/rs6000/darwin.h (UNLIKELY_EXECUTED_TEXT_SECTION_NAME): Change
+ 	text string to something more informative.
+ 	(NORMAL_TEXT_SECTION_NAME): Add new definition.
+ 	(SECTION_FORMAT_STRING):  Add new definition.
+ 	* config/rs6000/rs6000.c (rs6000_assemble_integer):  Add
+ 	'!in_unlikely_text_section' as an 'and' condition to an if statement
+ 	that was already checking '!in_text_section'.
+ 	* config/rs6000/sysv4.h (HOT_TEXT_SECTION_NAME,NORMAL_TEXT_SECTION_NAME,
+ 	UNLIKELY_EXECUTED_TEXT_SECTION_NAME,SECTION_FORMAT_STRING): Make
+ 	sure these are properly defined for linux on ppc.
+ 	* doc/invoke.texi  (freorder-blocks-and-partition): Add documentation
+ 	for this new flag.
+ 	* doc/rtl.texi (REG_CROSSING_JUMP):  Add documentation for new
+ 	reg_note.
+ 	* doc/tm.texi (NORMAL_TEXT_SECTION_NAME, SECTION_FORMAT_STRING,
+ 	HAS_LONG_COND_BRANCH, HAS_LONG_UNCOND_BRANCH): Add documentation for
+ 	these new macros.
+ 
+ 2004-04-08  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* function.c (gen_mem_addressof): When changing the RTX from a REG
+ 	to a MEM, clear MEM_VOLATILE_P which was formerly REG_USERVAR_P.
+ 
+ 2004-04-08  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	PR target/14888
+ 	* config/i386/i386.md (truncdfsf2_noop, truncxfsf2_noop,
+ 	truncxfdf2_noop): Provide dummy "fmov" implementations.
+ 
+ 2004-04-08  Ian Lance Taylor  <ian@wasabisystems.com>
+ 
+ 	* gcc.c (default_compilers): Add missing initializers.
+ 
+ 	* config/rs6000/host-darwin.c (darwin_rs6000_gt_pch_use_address):
+ 	Return 1 if file was successfully mapped.
+ 
+ 2004-04-08  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	PR pch/13419
+ 	PR pch/14137
+ 	Radar #: 3315288
+ 	* doc/invoke.texi (Precompiled Headers): Suggest -o
+ 	to put an output file in a particular place.  Be more detailed
+ 	about which options affect PCH validity and which options
+ 	might not work.
+ 	* c-pch.c (pch_matching): New.
+ 	(MATCH_SIZE): New.
+ 	(struct c_pch_validity): New field 'match'.
+ 	(pch_init): Handle pch_matching.
+ 	(c_common_valid_pch): Check pch_matching.
+ 
+ 	* explow.c: Fix typo defining default of PROMOTE_FUNCTION_MODE.
+ 
+ 2004-04-08  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* doc/invoke.texi (Precompiled Headers): Warn about known
+ 	problems.
+ 
+ 2004-04-08  Danny Smith  <dannysmith@users.sourceforge.net>
+ 
+ 	PR c++/14808
+ 	* defaults.h (TARGET_USE_LOCAL_THUNK_ALIAS_P): New macro. Default
+ 	to 1 if ASM_OUTPUT_DEF is defined.
+ 	* doc/tm.texi (TARGET_USE_LOCAL_THUNK_ALIAS_P): Document.
+ 	* config/i386/cygming.h (TARGET_USE_LOCAL_THUNK_ALIAS_P): Define.
+ 	Set to non-zero iff not a one_only decl.
+ 
+ 2004-04-08  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* arm.h (CLASS_LIKELY_SPILLED_P): Define.
+ 
+ 2004-04-08  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* explow.c (promote_mode): Use PROMOTE_FUNCTION_MODE instead of
+ 	PROMOTE_FOR_CALL_ONLY.
+ 	* config/arm/arm-protos.h (arm_function_value): Declare.
+ 	* config/arm/arm.h (TARGET_PROMOTE_FUNCTION_ARGS): Define.
+ 	(TARGET_PROMOTE_PROTOTYPES): Return false.
+ 	(arm_function_value): New function.
+ 	* config/arm/arm.h (PROMOTE_FUNCTION_MODE): Define.
+ 	(FUNCTION_VALUE): Call arm_function_value.
+ 	* config/cris/cris.h (PROMOTE_MODE): Rename ...
+ 	(PROMOTE_FUNCTION_MODE): ... to this.
+ 	(PROMOTE_FOR_CALL_ONLY): Remove.
+ 	* config/mmix/mmix.h: Likewise.
+ 	* config/s390/s390.h: Likewise.
+ 	* config/sparc/sparc.h: Likewise.
+ 	* config/sparc/sparc.c: Update comments about PROMOTE_MODE.
+ 	* doc/tm.texi (PROMOTE_FUNCTION_MODE): Document.
+ 	(TARGET_PROMOTE_FUNCTION_MODE, TARGET_PROMOTE_FUNCTION_RETURN): Update.
+ 	(PROMOTE_FOR_CALL_ONLY): Remove.
+ 
+ 2004-04-08  Joel Sherrill <joel@oarcorp.com>
+ 
+ 	PR ada/14538
+ 	* ada/5rosinte.adb: Remove fake mprotect() body.
+ 	* ada/5rosinte.ads: Add SA_SIGINFO.
+ 	* ada/5rtpopsp.adb: Rewrite to use new interface.
+ 	* ada/init.c: Reorder so the simple single OS conditional __rtems__
+ 	is tested before more complex ones which mix UNIX and embedded
+ 	systems in the conditional.
+ 
+ 2004-04-08  Joel Sherrill  <joel@oarcorp.com>
+ 
+ 	PR ada/14665
+ 	* ada/osint.adb (Find_Program_Name): Rework to properly handle
+ 	filenames which end in .exe or have versioning suffixes like VMS.
+ 
+ 2004-04-08  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR target/10129
+ 	* config/darwin.c (darwin_encode_section_info): When the decl has
+ 	a DECL_INITIAL, it is only defined also when it is not a common.
+ 
+ 2004-04-08  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+ 
+ 	* builtins.c (fold_builtin_isascii, fold_builtin_toascii): New.
+ 	(fold_builtin): Handle BUILT_IN_ISASCII and BUILT_IN_TOASCII.
+ 
+ 2004-04-07  H.J. Lu  <hongjiu.lu@intel.com>
+ 
+ 	* config/ia64/ia64.c (ia64_encode_section_info): Don't prod
+ 	global register variables.
+ 
+ 2004-04-07  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* fixinc/inclhack.def (rpc_xdr_lvalue_cast_a,
+ 	rpc_xdr_lvalue_cast_b): New fixes.
+ 	* fixinc/fixincl.x: Regenerate.
+ 	* fixinc/tests/base/rpc/xdr.h: Add new tests.
+ 
+ 2004-04-07  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* config/rs6000/rs6000.c (processor_target_table): Add MASK_MFCRF
+ 	to power4 and power5 entries.
+ 
+ 2004-04-06  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* c-common.h (pending_lang_change): Mark for PCH.
+ 
+ 2004-04-07  Caroline Tice  <ctice@apple.com>
+ 
+ 	* gcc.c (main): Move 'break' in main loops (on an error)
+ 	to wait until error processing has occurred.
+ 
+ 2004-04-06  Nathanael Nerode  <neroden@gcc.gnu.org>
+ 
+ 	* config.gcc: Stop changing enable_threads midstream.
+ 	Replace uses of enable_threads_flag with enable_threads.
+ 	* configure.ac: Replace uses of enable_threads_flag with
+ 	enable_threads.  Improve autoconf quotation in one place.
+ 	* configure: Regenerate.
+ 
+ 2004-04-06  Uros Bizjak  <uros@kss-loka.si>
+ 
+ 	* builtins.c: Implement support for sincos function.
+ 	(expand_builtin_mathfn): Remove BUILT_IN_SIN{,F,L} and
+ 	BUILT_IN_COS{,F,L}.
+ 	(expand_builtin_mathfn_3): New function.
+ 	(expand_builtin): Expand BUILT_IN_SIN{,F,L} and
+ 	BUILT_IN_COS{,F,L} using expand_builtin_mathfn_3 if
+ 	flag_unsafe_math_optimization is set.
+ 
+ 	* optabs.h (enum optab_index): Add new OTI_sincos.
+ 	(sincos_optab): Define corresponding macro.
+ 
+ 	* optabs.c (init_optabs): Initialize sincos_optab.
+ 	(expand_twoval_unop): New function.
+ 
+ 	* genopinit.c (optabs): Implement sincos_optab using sincos?f3
+ 	patterns.
+ 
+ 	* reg-stack.c (subst_stack_regs_pat): Handle UNSPEC_SINCOS_COS
+ 	and UNSPEC_SINCOS_SIN.
+ 
+ 	* config/i386/i386.md (sincosdf3, sincossf3, *sincosextendsfdf3,
+ 	sincosxf3): New patterns to implement sincos, sincosf and sincosl
+ 	built-ins as inline x87 intrinsics. Define splits for
+ 	sindf2, sinsf2, *sinextendsfdf2, sinxf2, cosdf2,
+ 	cossf2, *cosextendsfdf2 and cosxf2 patterns from corresponding
+ 	sincos patterns.
+ 	(sindf2, sinsf2, sinxf2): Rename to *sindf2, *sinsf2, *sinxf2.
+ 	(cosdf2, cossf2, cosxf2): Rename to *cosdf2, *cossf2, *cosxf2.
+ 
+ 	(UNSPEC_SINCOS_SIN, UNSPEC_SINCOS_COS): New unspecs to represent
+ 	x87's fsincos insn.
+ 
+ 2004-04-06  Devang Patel  <dpatel@apple.com>
+ 
+ 	PR 14467
+ 	* config/darwin.h (LINK_COMMAND_SPEC): Use c++filt instead of c++filt3.
+ 
+ 2004-04-06  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	* doc/install.texi: Update HP-UX 11 installation procedure.
+ 
+ 2004-04-06  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* doc/sourcebuild.texi: Remove obsolete contraint on testcases.
+ 
+ 2004-04-05  Kaz Kojima  <kkojima@gcc.gnu.org>
+ 
+ 	* config/sh/sh.c (prepare_move_operands): Use emit_call_insn
+ 	when the TLS address is generated by a function call.
+ 	* config/sh/sh.md (tls_global_dynamic): Use a call expression.
+ 	(tls_local_dynamic): Likewise.
+ 
+ 2004-04-05  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* tree.c (reconstruct_complex_type): Use TYPE_READONLY
+ 	and TYPE_VOLATILE.
+ 
+ 2004-04-05  Caroline Tice  <ctice@apple.com>
+ 
+ 	* gcc.c (combine_flag): New global variable, for new driver option.
+ 	(struct compiler): Add two new fields, to be used when
+ 	combining multiple input files in a single pass (IMA).
+ 	(default_compilers):  Add values for the new fields to all
+ 	compiler entries. Modify the "@c" compiler entry for doing IMA
+ 	properly with "-save-temps" and the "combine" flag.
+ 	(option_map):  Add new driver option, "--combine", to tell driver
+ 	to pass multiple input files to compiler at one time.
+ 	(have_o_argbuf_index): New global variable.
+ 	(store_arg): Modify to assign value to have_o_argbuf_index.
+ 	(struct infile):  Add three new fields, to help with IMA.
+ 	(display_help): Add help for new "combine" option.
+ 	(process_command): Remove local variable have_o; add code to check
+ 	for new "combine" option; remove assignment to combine_inputs.
+ 	(do_spec_1):  Modify to deal with IMA better.
+ 	(main): Make variable 'lang_n_infiles' local to entire function
+ 	rather than to a single block.  Use flag combine_flag to
+ 	determine whether to do IMA or not; Modify loop initializing
+ 	infiles to deal properly with linker files.
+ 	Add code for doing preprocessing in presence of
+ 	IMA with "-save-temps" flag.  Modify "main" loop to handle
+ 	multiple input files, in multiple languages, with or without
+ 	preprocessing,  gracefully.
+ 	* toplev.c (set_src_pwd): Modify to not complain if attempting to
+ 	re-set it to same directory it's previously been set to (avoid
+ 	irritating, meaningless warning messages when doing IMA with
+ 	save-temps).
+ 	* doc/invoke.texi: Add "-combine" to list of Overall Options;
+ 	remove documentation about IMA that is no longer accurate; Add
+ 	documentation explaining what "-combine" does.
+ 	* ada/lang-specs.h: Add initialization values for new fields in
+ 	"struct compiler".
+ 	* cp/lang-specs.h: Likewise.
+ 	* f/lang-specs.h: Likewise.
+ 	* java/lang-specs.h: Likewise.
+ 	* objc/lang-specs.h: Likewise.
+ 	* treelang/lang-specs.h: Likewise.
+ 
+ 2004-04-05  David Edelsohn
+ 
+ 	* config/rs6000/rs6000.c (VTABLE_NAME_P): Add _ZTI to special
+ 	symbol handling.
+ 
+ 2004-04-05  Jakub Jelinek  <jakub@redhat.com>
+ 	    John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	PR optimization/13424 (hppa), bootstrap/14462, c/14828
+ 	* pa.md: Use replace_equiv_address to retain the attributes of the
+ 	memory operands used in the split and peephole2 patterns for optimizing
+ 	the pre-reload movstrsi, movstrdi, clrstrsi and clrstrdi patterns.
+ 
+ 2004-04-05  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* c-decl.c (build_compound_literal): Use TYPE_READONLY.
+ 	* emit-rtl.c (set_mem_attributes_minus_bitpos): Likewise.
+ 	* objc/objc-act.c (adorn_decl, gen_declspecs): Likewise.
+ 	* c-typeck.c (decl_constant_value): Don't access DECL_INITIAL of a
+ 	PARM_DECL.
+ 	* calls.c (flags_from_decl_or_type): Use TYPE_READONLY and do so only
+ 	for a type.
+ 	* print-tree.c (print_node): Properly handle side-effects, readonly,
+ 	and constant flags.
+ 	* tree.c (build1_stat, build_expr_wfl): Only look at TREE_SIDE_EFFECTS
+ 	and TREE_CONSTANT if not a type.
+ 	* tree.h (IS_NON_TYPE_CODE_CLASS): New macro.
+ 	(IS_EXPR_CODE_CLASS): Write 'E', not 'e'.
+ 	(NON_TYPE_CHECK): New macro.
+ 	(TREE_SIDE_EFFECT, TREE_READONLY, TREE_CONSTANT: Add check.
+ 
+ 2004-04-05  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* config/sparc/sol2-bi.h (PREFERRED_DEBUGGING_TYPE): Set
+ 	to DWARF2_DEBUG unconditionally.
+ 	(ASM_DEBUG_SPEC): Set the default to --gdwarf2 unconditionally.
+ 
+ 2004-04-04  Ian Lance Taylor  <ian@wasabisystems.com>
+ 	    Nathanael Nerode  <neroden@gcc.gnu.org>
+ 
+ 	PR target/14548
+ 	* config.host: Set the shell variable host_can_use_collect2.
+ 	Set it to yes by default, and to no for alpha*-dec-*vms*,
+ 	i[34567]86-*-mingw32*, and powerpc-*-beos*.
+ 	* configure.ac: Set and substitute the shell variable collect2.
+ 	Give an error if use_collect2 is yes and host_can_use_collect2 is
+ 	no.
+ 	* Makefile.in (COLLECT2): Rename from USE_COLLECT2.  Change all
+ 	uses.  Initialize to @collect2@.
+ 	(STAGESTUFF): Remove $(USE_COLLECT2).
+ 	* config/alpha/x-vms (USE_COLLECT2): Don't set.
+ 	* config/i386/t-mingw32 (USE_COLLECT2): Likewise.
+ 	* config/rs6000/t-beos (USE_COLLECT2): Likewise.
+ 	* config/pa/t-pa64: Remove commented out USE_COLLECT2.
+ 	* configure: Regenerate.
+ 
+ 2004-04-04  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* simplify-rtx.c (simplify_binary_operation): Constant fold
+ 	DIV, MOD, UDIV and UMOD using div_and_round_double.
+ 
+ 2004-04-04  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	PR c++/14804
+ 	* varasm.c (initializer_constant_valid_p): Allow NOP_EXPRs to
+ 	RECORD_TYPEs.
+ 
+ 2004-04-04  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* doc/invoke.texi (-mabi=o64): Create link to O64 ABI
+ 	documentation.
+ 
+ 2004-04-04  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* cse.c (cse_insn): Correct usage of simplify_replace_rtx when
+ 	updating the REG_EQUAL note on an insn's libcall_insn.
+ 
+ 2004-04-04  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* df.h: Tidy up whitespace in the definitions of the DF_ flags.
+ 
+ 2004-04-03  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* fold-const.c (fold) <PLUS_EXPR>: Guard (-A)+B -> B-A transformation
+ 	with reorder_operands_p.
+ 
+ 2004-04-03  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* md.texi (vec_set, vec_extract, vec_init): Document.
+ 
+ 2004-04-02  Gabor Loki <loki@inf.u-szeged.hu>
+ 
+        * opts.c (decode_options): Do function inlining with very small
+        max-inline-insns-* parameters when optimizing for size.
+ 
+ 2004-04-02  Vladimir Makarov  <vmakarov@redhat.com>
+ 
+ 	* config/i386/i386.h (TARGET_NOCONA): New macro.
+ 	(TARGET_CPU_CPP_BUILTINS): Add code for Nocona.
+ 	(processor_type): Add PROCESSOR_NOCONA.
+ 
+ 	* config/i386/i386.md (cpu): Add nocona to the attribute values.
+ 
+ 	* config/i386/i386.c (nocona_cost): New variable.
+ 	(m_NOCONA): New macro.
+ 	(x86_push_memory, x86_movx, x86_cmove, x86_deep_branch,
+ 	x86_branch_hints, x86_use_sahf, x86_single_stringop,
+ 	x86_sub_esp_4, x86_sub_esp_8, x86_add_esp_4, x86_add_esp_8,
+ 	x86_integer_DFmode_moves, x86_partial_reg_dependency,
+ 	x86_memory_mismatch_stall, x86_accumulate_outgoing_args,
+ 	x86_decompose_lea, x86_arch_always_fancy_math_387,
+ 	x86_sse_partial_reg_dependency, x86_sse_load0_by_pxor,
+ 	x86_ext_80387_constants, x86_four_jump_limit):
+ 	(override_options): Add nocona_cost to processor_target_table.
+ 	Set up PROCESSOR_NOCONA for Nocona entry in processor_alias_table.
+ 	(incdec_operand): Prevent inc/dec generation for Nocona too.
+ 	(ix86_issue_rate): Add PROCESSOR_NOCONA.
+ 
+ 2004-04-01  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* rtlanal.c (find_reg_note): Manually
+ 	unswitch the loop.
+ 
+ 2004-04-01  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* genemit.c (gen_split): Change prototype of generated code.
+ 	* genrecog.c (write_action): Adjust prototype for and calls to
+ 	gen_split_*.
+ 	* gensupport.c (struct queue_elem): Add split field.
+ 	(queue_pattern): Return a value.  Clear the split field.
+ 	(process_rtx): Maintain an association between an insn and the
+ 	split generated from it for a define_insn_and_split.
+ 	(process_one_cond_exec): Generate a new split for a
+ 	define_insn_and_split.
+ 	* config/arm/arm-protos.h (arm_split_constant): Add insn
+ 	parameter.
+ 	(emit_constant_insn): New function.
+ 	(arm_gen_constant): Use it.
+ 	* config/arm/arm.md: Adjust calls to arm_split_constant.
+ 
+ 2004-04-02  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* cgraph.c: Add overall comment.
+ 	(cgraph_inline_hash): New global variable.
+ 	(cgraph_create_node): Break out from ...
+ 	(cgraph_node): ... here.
+ 	(cgraph_edge): New function.
+ 	(cgraph_create_edge): New CALL_EXPR argument; some sanity checking.
+ 	(cgraph_remove_edge): Accept edge, intead of source and destination.
+ 	(cgraph_redirect_edge_callee): New.
+ 	(cgraph_remove_node): Update all new datastructures.
+ 	(cgraph_record_call, cgraph_remove_call): Kill.
+ 	(dump_cgraph_node): Break out from ... ; dump new datastructures.
+ 	(dump_cgraph): ... here.
+ 	(cgraph_function_possibly_inlined_p): Use new hashtable.
+ 	(cgraph_clone_edge, cgraph_clone_node): New.
+ 	* cgraph.h: Include hashtab.h
+ 	(struct cgraph_global_info): Kill cloned_times, inline_once, will_be_output
+ 	fields, add inlined_to pointer.
+ 	(cgraph_node): Add pointer to next_clone.
+ 	(cgraph_remove_edge, cgraph_create_edge): Update prototype.
+ 	(cgraph_remove_call, cgraph_record_call): Kill.
+ 	(cgraph_inline_hash): Declare.
+ 	(dump_cgraph_node, cgraph_edge, cg4raph_clone_edge, cgraph_clone_node,
+ 	cgraph_redirect_edge_callee): Declare.
+ 	(cgraph_create_edges, cgraph_inline_p): Update prorotype.
+ 	(cgraph_preserve_function_body_p, verify_cgraph, verify_cgraph_node,
+ 	cgraph_mark_inline_edge, cgraph_clone_inlined_nodes): Declare.
+ 	* cgraphunit.c: Add overall comment.
+ 	(cgraph_optimize_function): Kill.
+ 	(cgraph_assemble_pending_functions): Do not assemble inline clones.
+ 	(cgraph_finalize_function): Update call of cgraph_remove_node
+ 	(record_call_1): Record call sites.
+ 	(cgraph_create_edges): Accept node instead of decl argument.
+ 	(error_found): New static variable.
+ 	(verify_cgraph_node_1, verify_cgraph_node, verify_cgraph): New functions.
+ 	(cgraph_analyze_function): Update for new datastructures.
+ 	(cgraph_finalize_compilation_unit): Plug memory leak.
+ 	(cgraph_optimize_function): Kill.
+ 	(cgraph_expand_function): Do not use cgraph_optimize_function.
+ 	(INLINED_TIMES, SET_INLINED_TIMES, cgraph_inlined_into,
+ 	cgraph_inlined_callees): Kill.
+ 	(cgraph_remove_unreachable_nodes): Verify cgraph; update handling of
+ 	clones.
+ 	(estimate_growth): Simplify.
+ 	(cgraph_clone_inlined_nodes): New function.
+ 	(cgraph_mark_inline_edge): Re-implement.
+ 	(cgraph_mark_inline): Likewise.
+ 	(cgraph_check_inline_limits): Simplify.
+ 	(cgraph_recursive_inlining_p): New.
+ 	(update_callee_keys): Break out from ...
+ 	(cgraph_decide_inlining_of_small_functions): ... here; simplify.
+ 	(cgraph_decide_inlining, cgraph_decide_inlining_incrementally):
+ 	Likewise.
+ 	(cgraph_expand_all_functions):  Remove inline clones from the ordered
+ 	list.
+ 	(cgraph_preserve_function_body_p): New predicate.
+ 	(cgraph_optimize): Verify cgraph.
+ 	* function.h (struct function): Add fields saved_tree/saved_args.
+ 	* timevar.def (TV_CGRAPH_VERIFY): Use verifier.
+ 	* toplev.c (rest_of_compilation): Do not free cfun.
+ 	* tree-inline.c: Include function.h
+ 	(struct inline_data): Add saving_p field; replace decl/current_decl by
+ 	node/current_node.
+ 	(insert_decl_map): New function.
+ 	(copy_body_r): Handle saving; update cgraph datastructure.
+ 	(copy_body): Handle recursive inlining.
+ 	(initialize_inlined_parameters): Likewise.
+ 	(expand_call_inline): Propagate node attributes; update cgraph.
+ 	(optimize_inline_calls): Verify that datastructure still match.
+ 	(save_body): New function.
+ 	* tree-inline.h (save_body): New.
+ 	* tree-optimize.c (tree_rest_of_compilation): preserve function body; do inlining.
+ 	* langhooks-def.c (LANG_HOOKS_UPDATE_DECL_AFTER_SAVING): New.
+ 	* langhooks.c (lang_hooks): Add update_decl_after_saving.
+ 
+ 2004-04-01  Serge Belyshev  <1319@bot.ru>
+ 
+ 	PR target/14702
+ 	* config/i386/i386.md: fix source operand constraints in
+ 	mmx_pshufw, sse2_pshufd, sse2_pshuflw, sse2_pshufhw
+ 
+ 2004-04-01  Waldek Hebisch  <hebisch@math.uni.wroc.pl>
+ 
+ 	* fold-const.c (folda): Preserve types of comparisons.
+ 
+ 2004-04-01  Richard Henderson  <rth@redhat.com>
+ 
+ 	* toplev.c (backend_init): Move init_optimization_passes call ...
+ 	(lang_dependent_init): ... here.
+ 
+ 2004-04-01  Alan Modra  <amodra@bigpond.net.au>
+ 	    Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* gcc.c (init_gcc_specs): If HAVE_LD_AS_NEEDED, link with
+ 	-lgcc --as-needed -lgcc_s --no-as-needed by default.
+ 	* configure.ac (HAVE_LD_AS_NEEDED): Check for ld --as-needed.
+ 	* configure: Rebuilt.
+ 	* config.in: Rebuilt.
+ 	* Makefile.in (stage1-start): Copy also libgcc_s*$(SHLIB_EXT).
+ 	(stage2-start, stage3-start, stage4-start): Likewise.
+ 	(stageprofile-start, stagefeedback-start): Likewise.
+ 
+ 2004-04-01  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* config/sparc/sparc.h (DITF_CONVERSION_LIBFUNCS): Define to 0.
+ 	* config/sparc/linux.h (DITF_CONVERSION_LIBFUNCS): Redefine to 1.
+ 	* config/sparc/linux64.h (DITF_CONVERSION_LIBFUNCS): Redefine to 1.
+ 	* config/sparc/sol2.h (DITF_CONVERSION_LIBFUNCS): Redefine to 1.
+ 	(SOLARIS_CONVERSION_LIBFUNCS): Rename to SUN_CONVERSION_LIBFUNCS.
+ 	* config/sparc/sparc.c (sparc_init_libfuncs): Initialize optabs
+ 	with _Q_qtoll, _Q_qtoull and _Q_lltoq if DITF_CONVERSION_LIBFUNCS.
+ 	* config.gcc (sparc-*-linux*): Revert 2004-03-23 change.
+ 	* config/sparc/t-linux64 (TARGET_LIBGCC2_CFLAGS): Likewise.
+ 	* config/sparc/t-linux: Removed.
+ 
+ 2004-04-01  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/14755
+ 	* fold-const.c (fold) <EQ_EXPR>: Properly compute newconst in
+ 	"bitfld++ == const" to "++bitfld == const + incr" transformations.
+ 
+ 2004-04-01  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* expr.c (get_inner_reference): Use DECL_UNSIGNED, not TREE_UNSIGNED.
+ 	* stor-layout.c (layout_decl): Likewise.
+ 	* tree.c (get_narrower): Likewise and also use BIT_FIELD_REF_UNSIGNED.
+ 	* fold-const.c (make_bit_field_ref): Use BIT_FIELD_REF_UNSIGNED.
+ 	* print-tree.c (print_node): Handle various used of unsigned_flag.
+ 	* tree.def (BIT_FIELD_REF): Update comment.
+ 	* tree.h (TREE_UNSIGNED): Deleted.
+ 	(DECL_UNSIGNED, BIT_FIELD_REF_UNSIGNED): New macros.
+ 
+ 2004-03-31  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* builtins.c, c-aux-info.c, c-common.c, c-cppbuiltin.c, c-decl.c:
+ 	Change most occurrences of TREE_UNSIGNED to TYPE_UNSIGNED.
+ 	* c-format.c, c-opts.c, c-pretty-print.c, c-typeck.c: Likewise.
+ 	* calls.c, convert.c, dbxout.c, dojump.c, dwarf2out.c: Likewise.
+ 	* expmed.c, expr.c, fold-const.c, function.c, integrate.c: Likewise.
+ 	* optabs.c, sdbout.c, stmt.c, stor-layout.c, tree-dump.c: Likewise.
+ 	* tree.c, config/iq2000/iq2000.c, config/m32r/m32r.c: Likewise.
+ 	* config/mips/mips.c, config/rs6000/rs6000.c: Likewise.
+ 	* config/s390/s390.c, config/sparc/sparc.c, objc/objc-act.c: Likewise.
+ 	* stor-layout.c (layout_type, case COMPLEX_TYPE): Test for
+ 	REAL_TYPE, not INTEGER_TYPE.
+ 	(layout_type, case VECTOR_TYPE): Simplify code.
+ 	* tree.c (build_vector_type_for_mode): Remove dup unsigned setting.
+ 	* tree.h: Update comments.
+ 	(STRIP_NOPS): Use TYPE_UNSIGNED.
+ 	(TYPE_UNSIGNED): New macro.
+ 	(TYPE_TRAP_SIGNED): Remove now redundant check.
+ 	(SAVE_EXPR_NOPLACEHOLDER): Don't use TREE_UNSIGNED.
+ 
+ 2004-03-31  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* function.c (put_var_into_stack): Properly set orig_reg for indirect.
+ 
+ 2004-03-31  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* config/rs6000/t-darwin (LIB2FUNCS_STATIC_EXTRA):
+ 	Add darwin-fpsave.asm, darwin-vecsave.asm,
+ 	and darwin-world.asm.
+ 	(TARGET_LIBGCC2_CFLAGS): Add -Wa,-force_cpusubtype_ALL
+ 	as the asm files contain altivec instructions.
+ 	* config/rs6000/darwin-fpsave.asm: New file.
+ 	* config/rs6000/darwin-vecsave.asm: New file.
+ 	* config/rs6000/darwin-world.asm: New file.
+ 
+ 2004-03-31  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* gengtype-yacc.y (option, stringseq): Add missing
+ 	terminating semicolon.
+ 
+ 2004-03-30  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* config/rs6000/rs6000.md (tls_gd_32, tls_gd_64,
+ 	tls_ld_32, tls_ld_64, tls_dtprel_32, tls_dtprel_64,
+ 	tls_dtprel_ha_32, tls_dtprel_ha_64,
+ 	tls_dtprel_lo_32, tls_dtprel_lo_64,
+ 	tls_got_dtprel_64, tls_tprel_32, tls_tprel_64,
+ 	tls_tprel_ha_32, tls_tprel_ha_64,
+ 	tls_tprel_lo_32, tls_tprel_lo_64,
+ 	tls_got_tprel_32, tls_got_tprel_64,
+ 	tls_tls_32, tls_tls_64): Replace register_operand with
+ 	gpc_reg_operand.
+ 
+ 2004-03-30  Mostafa Hagog  <mustafa@il.ibm.com>
+ 
+ 	* config/rs6000/rs6000.md (*ctrsi_internal1, *ctrsi_internal2,
+ 	*ctrdi_internal1, *ctrdi_internal2, *ctrsi_internal3,
+ 	*ctrsi_internal4, *ctrdi_internal3, *ctrdi_internal4,
+ 	*ctrsi_internal5, *ctrsi_internal6, *ctrdi_internal5,
+ 	*ctrdi_internal6): Replace register_operand with
+ 	nonimmediate_operand.
+ 
+ 2004-03-29  Fariborz Jahanian <fjahanian@apple.com>
+ 
+ 	* fold-const.c (fold): Reassociate multiply expression
+ 	with an adjacent non-multiply expression to use
+ 	architecture's multiply-add instruction.
+ 
+ 2004-03-30  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* gengtype.c (create_option): New function.
+ 	* gengtype.h: Prototype it.
+ 	* gengtype-yacc.y (stringseq): New rule.
+ 	(option): Use create_option.  Add new bare ID production.  Use
+ 	stringseq, not STRING directly.
+ 
+ 	* alias.c, bitmap.c, c-decl.c, cgraph.h, cpplib.h, cselib.h
+ 	* dwarf2out.c, emit-rtl.c, function.h, lists.c, tree.h
+ 	* varray.h, config/alpha/alpha.c:
+ 	Use new shorter form of GTY markers.
+ 
+ 	* doc/gty.texi: Rewrite.
+ 
+ 2004-03-30  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* config/darwin.c (machopic_function_base_name):
+ 	Remove current_name and getting the name of the
+ 	current function.
+ 
+ 2004-03-30  Nick Clifton  <nickc@redhat.com>
+ 
+ 	* config/arm/arm.md (thumb_jump): Reduce the backward branch
+ 	range, and increase the forward branch range, to allow for
+ 	the fact that the PC will be off by 4.
+ 
+ 2004-03-30  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* .cvsignore: Add GPATH, GRTAGS, GSYMS and GTAGS (GNU GLOBAL)
+ 
+ 2004-03-30  Hartmut Penner  <hpenner@de.ibm.com>
+ 
+ 	* config/rs6000/rs6000.c (output_vec_const_move):
+ 	Find all cases of EASY_VECTOR_15_ADD_SELF.
+ 	(easy_vector_constant_add_self): Accept
+ 	all vector constant loadable by vsplt* and vadd*.
+ 	(easy_vector_same): Use easy_vector_splat_const.
+ 	(easy_vector_const): Use easy_vector_splat_const.
+ 	(easy_vector_splat_const): New function.
+ 	(gen_easy_vector_constant_add_self): New function.
+ 
+ 	* config/rs6000/rs6000-protos.c (gen_easy_vector_constant_add_self):
+ 	New prototype.
+ 
+ 	* config/rs6000/altivec.md (movv4si splitter): Change to
+ 	emit move insn with halfed vector constant.
+ 	(*movv8hi splitter): Likewise.
+ 	(*movv16qi splitter): Likewise.
+ 
+ 2004-03-30  Hartmut Penner  <hpenner@de.ibm.com>
+ 
+ 	PR 11591
+ 	* config/rs6000/rs6000.c (rs6000_legitimate_address):
+ 	Allow any offset to argument pointer in no-strict case.
+ 
+ 2004-03-30  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* toplev.c (backend_init): Add missing call to inint_optimization_passes.
+ 	* passes.c (init_optimization_passes, finish_optimization_passes): Output cgraph
+ 	dump file in non-unit-at-a-time mode.
+ 
+ 2004-03-29  Hans-Peter Nilsson  <hp@axis.com>
+ 
+ 	* config/cris/cris.h: Correct #ifdef to test for
+ 	HAVE_AS_NO_MUL_BUG_ABORT_OPTION, not
+ 	HAVE_AS_MUL_BUG_ABORT_OPTION.
+ 
+ 2004-03-29  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* function.c (put_var_into_stack): If old RTL was ADDRESSOF, update
+ 	the address inside the old RTL.
+ 
+ 2004-03-28  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* c-decl.c: Verify that C_SIZEOF_STRUCT_LANG_IDENTIFIER is correct.
+ 	(struct c_binding, struct c_scope): Add chain_next
+ 	attributes to GTY markers.
+ 	(struct lang_identifier, struct lang_tree_node): Define
+ 	here...
+ 	* c-tree.h: ... not here.  No longer need to declare struct
+ 	c_binding either.  Do define C_SIZEOF_STRUCT_LANG_IDENTIFIER.
+ 	* c-lang.c, objc/objc-lang.c: Set LANG_HOOKS_IDENTIFIER_SIZE
+ 	to C_SIZEOF_STRUCT_LANG_IDENTIFIER.
+ 
+ 	PR 14734, 11944
+ 	* c-decl.c (get_parm_info): If error_mark_node is encountered
+ 	in the bindings chain, unbind and discard it; don't abort.
+ 
+ 2004-03-28  Olga Golovonevsky <olga@il.ibm.com>
+ 	    Dorit Naishlos <dorit@il.ibm.com>
+ 
+ 	* config/rs6000/altivec.md: (andvv16qi3, andv8hi3, one_cmplv16qi2,
+ 	one_cmplv8hi2, one_cmplv4si2, iorv16qi3, iorv8hi3,): New modelling.
+ 
+ 2004-03-28  Stephane Carrez  <stcarrez@nerim.fr>
+ 
+ 	* config/m68hc11/m68hc11-protos.h (m68hc11_page0_symbol_p): Declare.
+ 
+ 	* config/m68hc11/m68hc11.c (m68hc11_handle_page0_attribute): New.
+ 	(m68hc11_attribute_table): New attribute "page0" to mark a global
+ 	variable as being allocated from within page0 section.
+ 	(m68hc11_encode_label): New function.
+ 	(m68hc11_strip_name_encoding): New function.
+ 	(m68hc11_page0_symbol_p): New function.
+ 	(m68hc11_indirect_p): Accept global variables marked in page0.
+ 	(m68hc11_encode_section_info): Lookup "page0" attribute.
+ 
+ 	* config/m68hc11/m68hc11.h (EXTRA_CONSTRAINT): 'R' constraint also
+ 	represents access to page0 variables.
+ 
+ 	* config/m68hc11/m68hc11.md ("*logicalsi3_zexthi"): Use gen_rtx_REG.
+ 	("*logicalsi3_silshl16_zext"): Likewise.
+ 	("*ashldi3_const32"): Likewise.
+ 	(peephole2 ashift): Likewise.
+ 
+ 2004-03-28  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-tree.h (C_DECL_REGISTER): New.
+ 	* c-aux-info.c (gen_decl), c-decl.c (objc_mark_locals_volatile,
+ 	finish_decl, grokdeclarator, get_parm_info), c-typeck.c
+ 	(build_array_ref, c_mark_addressable): Set and use it.
+ 	* c-decl.c (grokdeclarator), c-typeck.c (c_mark_addressable):
+ 	Allow structures with volatile fields to be declared register.
+ 	Don't check TREE_ADDRESSABLE before warning about taking address
+ 	of register.
+ 	* c-decl.c (finish_decl): Don't allow structures with volatile
+ 	fields to be placed in named register.
+ 	* doc/trouble.texi: Remove reference to structures with volatile
+ 	fields in registers.
+ 
+ 2004-03-27  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* function.c (thread_prologue_and_epilogue): Move
+ 	NOTE_INSN_FUNCTION_END and NOTE_INSN_FUNCTION_BEG notes
+ 	before the epilogue.
+ 
+ 2004-03-27  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* expr.c (store_constructor): Use gen_int_mode to correctly
+ 	sign-extend CONST_INT value.
+ 
+ 2004-03-27  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+ 
+ 	* builtin-types.def (BT_WINT, BT_FN_INT_WINT, BT_FN_WINT_WINT): New.
+ 	* builtins.def (DEF_C94_BUILTIN): New.  Add wctype builtins.
+ 	* doc/extend.texi: Likewise.
+ 
+ 2004-03-26  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-typeck.c (comptypes): Replace calls to TYPE_DOMAIN
+ 	  with TYPE_ORIG_SIZE_TYPE.
+ 
+ 2004-03-25  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	PR 14219
+ 	* c-typeck.c (build_binary_op): Do not allow comparisons of
+ 	vectors.
+ 
+ 2004-03-26  James A. Morrison  <ja2morri@uwaterloo.ca>
+ 
+ 	* config.gcc: Remove sparc-tti-*.
+ 	* config/sparc/pbd.h: Delete.
+ 
+ 	* config/sparc/sol2.h: Remove note about Sun OS 4.x.
+ 	* config/sparc/aout.h: Likewise.
+ 
+ 	* config/sparc/sparc.h: Remove if 0'd code.
+ 	* config/sparc/sparc.md (call): Remove if 0'd code.
+ 	(call_value): Likewise.
+ 	(nonlocal_goto): Likewise.
+ 	(unimp_insn): Delete.
+ 
+ 2004-03-25  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* fold-const.c (tree_expr_nonnegative_p): Handle BIT_XOR_EXPR like
+ 	BIT_IOR_EXPR; A^B is nonnegative when A and B are nonnegative.
+ 
+ 2004-03-25  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR 11527
+ 	* c-typeck.c (pop_init_level): Emit pending init elements earlier
+ 	rather than later.
+ 
+ 2004-03-25  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+ 
+ 	* builtins.c (fold_builtin): Fix error in last change.
+ 
+ 2004-03-25  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.h: Formatting fix.
+ 
+ 2004-03-25  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+ 
+ 	* builtins.def: Add ctype builtins.
+ 	* doc/extend.texi: Likewise.
+ 
+ 2004-03-25  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+ 
+ 	* builtins.c (fold_builtin): Add new builtin optimizations for
+ 	sqrt and/or cbrt.
+ 	* fold-const.c (fold): Likewise.
+ 
+ 2004-03-25  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_always_hint): New variable.
+ 	(rs6000_sched_groups): New variable.
+ 	(processor_target_table): Add power5.
+ 	(rs6000_override_options): Set rs6000_sched_insert_nops,
+ 	rs6000_sched_costly_dep and rs6000_sched_restricted_insns_priority
+ 	from rs6000_sched_groups.
+ 	(output_cbranch): Use rs6000_always_hint.
+ 	(rs6000_variable_issue): Use rs6000_sched_groups.
+ 	(rs6000_adjust_cost): Add CPU_POWER5.
+ 	(is_microcoded_insn): Use rs6000_sched_groups.
+ 	(is_dispatch_slot_restricted): Use rs6000_sched_groups.
+ 	Return 2 for POWER5 cracked instructions.
+ 	(is_cracked_insn): Use rs6000_sched_groups.
+ 	(is_branch_slot_insn): Use rs6000_sched_groups.
+ 	(rs6000_issue_rate): Add CPU_POWER5.
+ 	(rs6000_sched_finish): Use rs6000_sched_groups.
+ 	(rs6000_rtx_costs): Add PROCESSOR_POWER5.
+ 	* config/rs6000/rs6000.h (processor_type): Add PROCESSOR_POWER5.
+ 	(DEFAULT_SCHED_COSTLY_DEP): Delete.
+ 	(DEFAULT_RESTRICTED_INSNS_PRIORITY): Delete.
+ 	(DEFAULT_SCHED_FINISH_NOP_INSERTION_SCHEME): Delete.
+ 	* config/rs6000/rs6000.md (define_attr "cpu"): Add power5.
+ 	* config/rs6000/power5.md: New file.
+ 	* doc/invoke.texi: Add power5 option.
+ 
+ 2004-03-25  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* cfgrtl.c, dbxout.c, tree.def, config/darwin.h,
+ 	config/arm/arm.c, objc/objc-act.c: Fix comment typos.
+ 	* doc/invoke.texi: Fix a typo.
+ 
+ 2004-03-25  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	PR optimization/9707.
+ 	* stmt.c (emit_case_nodes): Emit equality comparisons instead
+ 	of recursing if both children are single-valued cases with no
+ 	children.
+ 
+ 2004-03-25  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/arm.c (vfp_print_multi): Remove.
+ 	(arm_output_fldmx): New function.
+ 	(vfp_emit_fstmx): Return block size, not insn. Add ARM10 VFPr1 bugfix.
+ 	(arm_expand_prologue): Update to match.
+ 	(arm_get_vfp_saved_size): New Function.
+ 	(arm_get_frame_offsets): Use it.
+ 	(arm_output_epilogue): Use new functions.
+ 
+ 2004-03-24  Richard Henderson  <rth@redhat.com>
+ 
+ 	* alias.c (alias_invariant, alias_invariant_size): Mark GTY.
+ 	(reg_known_value, reg_known_value_size): Likewise; make static.
+ 	(reg_known_equiv_p): Make static.
+ 	(clear_reg_alias_info): Update for new indexing.
+ 	(get_reg_known_value, set_reg_known_value): New.
+ 	(get_reg_known_equiv_p, set_reg_known_equiv_p): New.
+ 	(canon_rtx): Use them.
+ 	(init_alias_analysis): Likewise.  Allocate reg_known_value with gc.
+ 	Don't play queer offsetting games with reg_known_value and
+ 	reg_known_equiv_p.
+ 	(end_alias_analysis): Free reg_known_value with gc.
+ 	* rtl.h (get_reg_known_value, get_reg_known_equiv_p): Declare.
+ 	* sched-deps.c (reg_known_equiv_p, reg_known_value): Remove.
+ 	(deps_may_trap_p, sched_analyze_1, sched_analyze_2): Use the new
+ 	functions instead.
+ 
+ 2004-03-24  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* dwarf2asm.c, loop.h, pretty-print.c, pretty-print.h,
+ 	config/i386/mmintrin.h: Update copyright.
+ 
+ 2004-03-24  Nathanael Nerode  <neroden@gcc.gnu.org>
+ 
+ 	* configure.ac: Add --enable-werror-always (for top level bootstrap
+ 	support).
+ 	* configure: Regenerate.
+ 
+ 2004-03-24  Ziemowit Laski  <zlaski@apple.com>
+ 
+ 	* objc/objc-act.c (objc_comptypes): Treat comparisons
+ 	between 'Class' and '<class> *' as explicitly invalid.
+ 
+ 2004-03-24  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* doc/invoke.texi (-frename-registers): Add enabled at -O3.
+ 	(-fprofile-values): Add enabled with profile-{generate,use}.
+ 	(-fvpt): Same.
+ 	(-ftracer): Add enabled with profile-use.
+ 	(-funit-at-a-time): Add enabled at -O2,-O3.
+ 	(-funroll-loops): Add enabled with profile-use.
+ 	(-funswitch-loops): Add enabled with profile-use.  Remove duplicates.
+ 	(max-gcse-passes): Mention default.
+ 	(max-cse-path-length): Mention default.
+ 
+ 2004-03-24  Nathanael Nerode  <neroden@gcc.gnu.org>
+ 
+ 	* Makefile.in (STRICT2_WARN): Reorder.
+ 	* configure.ac: Check for -Wold-style-definition, and use it
+ 	in strict1_warn if it's available.
+ 	* configure: Regnerate.
+ 
+ 2004-03-24  Paul Brook  <paul@nowt.org>
+ 
+ 	* config.gcc <arm>: Add --with-abi=
+ 	* config/arm/arm-protos.h (arm_get_frame_size, thumb_get_frame_size,
+ 	thumb_far_jump_used): Remove prototypes.
+ 	(arm_needs_doubleword_align): Add prototype.
+ 	(thumb_compute_initial_elimination_offset): Ditto.
+ 	* config/arm/arm.c (arm_get_frame_offsets): New function.
+ 	(use_return_insn, output_return_instruction, arm_output_epilogue,
+ 	arm_output_function_epilogue, arm_compute_initial_elimination_offset,
+ 	arm_expand_prologue, thumb_expand_epilogue): Use it.
+ 	(arm_abi, target_abi_name, all_arm_abis): New variables.
+ 	(arm_override_options): Set them.  Set structure padding for AAPCS.
+ 	(arm_return_in_memory): Update ABI check.
+ 	(arm_init_cumulative_args): Initialize can_split.
+ 	(arm_needs_doubleword_align): New function.
+ 	(arm_function_arg): Don't split args after pushing to stack. Handle
+ 	doubleword/even reg alignment.
+ 	(arm_va_arg): Handle all doubleword aligned args.
+ 	(add_minpoolforward ref, dump_minpool, push_minpool_fix): Align based
+ 	on ABI, not CPU.
+ 	(arm_compute_save_reg0_reg12_mask): Fix comment.
+ 	(thumb_get_frame_size, thumb_get_frame_size): Remove.
+ 	(thumb_jump_far_used_p): Remove superfluous argument.  Return save
+ 	value for alignment.
+ 	(thumb_unexpanded_epilogue, thumb_output_function_prologue): Change
+ 	to match.
+ 	(thumb_compute_initial_elimination_offset): New function.
+ 	(thumb_expand_prologue): Use arm_get_frame_offsets.  Remove
+ 	unneccessary rounding.
+ 	* config/arm/arm.h (target_abi_name): Declare.
+ 	(ARM_DOUBLEWORD_ALIGN, DOUBLEWORD_ALIGNMENT, TARGET_IWMMXT_ABI,
+ 	arm_abi_type, ARM_DEFAULT_ABI): Define.
+ 	(ARM_FLAG_ATPCS): Remove.
+ 	(TARGET_OPTIONS, OPTION_DEFAULT_SPECS): Add -mabi=.
+ 	(BIGGEST_ALIGNMENT, PREFERRED_STACK_BOUNDARY, STACK_BOUNDARY): Use it.
+ 	(ADJUST_FIELD_ALIGN, DATA_ALIGNMENT, LOCAL_ALIGNMENT,
+ 	TYPE_NEEDS_IWMMXT_ALIGNMENT): Remove.
+ 	(LIBCALL_VALUE, FUNCTION_VALUE_REGNO_P, FUNCTION_ARG_REGNO_P):
+ 	Contitionalize on ABI, not CPU.
+ 	(struct arm_stack_offsets): Define.
+ 	(struct machine_function): Add stack_offsets.  Remove frame_size.
+ 	(FUNCTION_ARG_PARTIAL_NREGS): Don't split if previous args have been
+ 	pushed.
+ 	(FUNCTION_ARG_ADVANCE, FUNCTION_ARG_BOUNDARY): Handle general
+ 	doubleword alignment.
+ 	(THUMB_INITIAL_ELIMINATION_OFFSET,
+ 	ARM_INITIAL_ELIMINATION_OFFSET): Remove.
+ 	(INITIAL_ELIMINATION_OFFSET): Call functions directly.
+ 	* config/arm/arm.md (align_8): Enable for all targets.
+ 	* config/arm/netbsd-elf.h (TARGET_DEFAULT): Remove TARGET_ATPCS.
+ 	(ARM_DEFAULT_ABI): Define.
+ 	* doc/invoke.texi <ARM>: Document -mabi=. Update documentation for
+ 	-mstructure-size-boundary.
+ 
+ 2004-03-24  Nathanael Nerode  <neroden@gcc.gnu.org>
+ 
+ 	* configure.ac: Check for -Wno-variadic-macros; don't use
+ 	-pedantic (in stage 1 or a simple 'make all') unless it's available,
+ 	and if it's available, use it.  Also, clean up check for
+ 	-Wno-long-long.
+ 	* configure: Regenerate.
+ 
+ 2004-03-24  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config.gcc (mips64vr-*-elf*, mips64vrel-*-elf*): Remove tm_defines.
+ 	* config/mips/vr.h (DEFAULT_VR_ARCH): New macro, defined to vr4130.
+ 	(MULTILIB_DEFAULTS): Use it.
+ 	(MIPS_CPU_STRING_DEFAULT): Remove.
+ 	(MIPS_ABI_DEFAULT, MIPS_MARCH_CONTROLS_SOFT_FLOAT): Define.
+ 	(DRIVER_SELF_SPECS): Make -mfix-vr4122-bugs imply -march=vr4120.  Make
+ 	EABI64 -mlong32 the default ABI.  Enforce the default architecture.
+ 	* config/mips/t-vr (MULTILIB_OPTIONS): Add mfix-vr4122-bugs,
+ 	march=vr4130, march=vr4300, march=vr5000 and march=vr5500.
+ 	(MULTILIB_MATCHES): Use -mfix-vr4122-bugs multilibs for -march=vr4120.
+ 	(MULTILIB_EXCEPTIONS): Change choice of multilibs.  Update comments
+ 	accordingly.
+ 
+ 2004-03-24  DJ Delorie  <dj@redhat.com>
+ 	    Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.h (MASK_FIX_VR4122, TARGET_FIX_VR4122): New macros.
+ 	(TARGET_SWITCHES): Add -mfix-vr4122-bugs and -mno-fix-vr4122-bugs.
+ 	(ASM_SPEC): Pass down -mfix-vr4122-bugs.
+ 	* config/mips/mips.c (mips_avoid_hazards): Don't emit whole functions
+ 	in .set noreorder and .set nomacro if TARGET_FIX_VR4122.
+ 	(mips_init_libfuncs): Use special functions for divsi3 and modsi3
+ 	if TARGET_FIX_VR4122.
+ 	* config/mips/mips.md (define_attr length): Account for nops inserted
+ 	after macc and dmult when using -mfix-vr4122-bugs.
+ 	(umuldi3_highpart, divmodsi4, divmoddi4): Disable if TARGET_FIX_VR4122.
+ 	* config/mips/t-vr (LIB2FUNCS_STATIC_EXTRA): Define instead of
+ 	LIB2FUNCS_EXTRA.  Add config/mips/vr4122-div.S.
+ 	* config/mips/vr4122-div.S: New file.
+ 	* doc/invoke.texi: Document -mfix-vr4122-bugs.
+ 
+ 2004-03-24  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.h (PROCESSOR_R4130): New processor_type.
+ 	(TARGET_MIPS4130): New macro.
+ 	(ISA_HAS_MACC): Return true if TARGET_MIPS4130 && !TARGET_MIPS16.
+ 	* config/mips/mips.c (mips_cpu_info_table): Add a vr4130 entry.
+ 	(override_options): Extend MIPS_MARCH_CONTROLS_SOFT_FLOAT to deal
+ 	with PROCESSOR_R4130.
+ 	* config/mips/mips.md (define_attr cpu): Add r4130.
+ 	* doc/invoke.texi: Document vr4130 as a supported MIPS architecture.
+ 
+ 2004-03-24  Maciej W. Rozycki  <macro@ds2.pg.gda.pl>
+ 	    Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* doc/invoke.texi: Apply missed hunk from 2004-03-03 change.
+ 
+ 2004-03-24  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	PR preprocessor/14438
+ 	* cpplib.c (do_pragma): Remove line_change call after pragma
+ 	handler.
+ 
+ 2004-03-23  Ian Lance Taylor  <ian@wasabisystems.com>
+ 
+ 	* doc/extend.texi (ARM Built-in Functions): Replace with correct
+ 	declarations.
+ 
+ 2004-03-23  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* reg-stack.c (get_true_reg): Handle FLOAT_TRUNCATE like FLOAT_EXTEND
+ 	if flag_unsafe_math_optimizations.
+ 	* config/i386/i386.md (truncdfsf2): If flag_unsafe_math_optimizations
+ 	and TARGET_80387 expand using truncdfsf2_noop pattern.
+ 	(truncxfsf2): Likewise using truncxfsf2_noop.
+ 	(truncxfdf2): Likewise using truncxfdf2_noop.
+ 	(truncdfsf2_noop, truncxfsf2_noop, truncxfdf2_noop): New patterns.
+ 
+ 2004-03-23  Ziemowit Laski  <zlaski@apple.com>
+ 
+ 	* hooks.c (hook_constcharptr_tree_null): New hook.
+ 	* hooks.h (hook_constcharptr_tree_null): New prototype.
+ 	* target-def.h (TARGET_MANGLE_FUNDAMENTAL_TYPE): New target hook.
+ 	* target.h (mangle_fundamental_type): New target hook.
+ 	* config/rs6000/rs6000.c (TARGET_MANGLE_FUNDAMENTAL_TYPE): Point
+ 	target hook at rs6000_mangle_fundamental_type.
+ 	(rs6000_mangle_fundamental_type): New function.
+ 	* doc/tm.texi (TARGET_MANGLE_FUNDAMENTAL_TYPE): Document.
+ 
+ 2004-03-23  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	PR 12267, 12391, 12560, 13129, 14114, 14133
+ 	* c-tree.h: Forward declare struct c_binding.  Declare
+ 	c_override_bindings_to_false.  Update prototypes.
+ 	(struct lang_identifier): Update comments.  Change fields to be
+ 	struct c_binding *.
+ 	(IDENTIFIER_SYMBOL_VALUE, IDENTIFIER_TAG_VALUE)
+ 	(IDENTIFIER_LABEL_VALUE, C_DECL_INVISIBLE)
+ 	(KEEP_NO, KEEP_YES, KEEP_MAYBE): Delete.
+ 	(C_DECL_IN_EXTERNAL_SCOPE, C_DECL_DECLARED_BUILTIN): New.
+ 	* c-common.h: Update prototypes.
+ 	* c-decl.c (struct c_scope): Update commentary.  Remove names,
+ 	names_last, parms, parms_last, tags, and shadowed fields.  Add
+ 	bindings and depth fields.
+ 	(scope_freelist): Move to more appropriate location.
+ 	(c_print_identifier): Update for changes to struct lang_identifier.
+ 	(objc_mark_locals_volatile): Update for new bindings structures.
+ 	(global_bindings_p): Honor c_override_global_bindings_to_false.
+ 	(pushlevel): Rename to push_scope; take no arguments; use the
+ 	scope_freelist; initialize scope->depth and check for overflow.
+ 	(poplevel): Rename to pop_scope; totally rewritten for new bindings
+ 	structures.
+ 	(diagnose_mismatched_decls): Use C_DECL_DECLARED_BUILTIN, not
+ 	C_DECL_INVISIBLE, for certain decisions.  Adjust some diagnostics.
+ 	Improve some commentary.  Adjust handling of forward parm decls.
+ 	(merge_decls): Set C_DECL_DECLARED_BUILTIN when appropriate.
+ 	Preserve C_DECL_IN_EXTERNAL_SCOPE.
+ 	(warn_if_shadowing): Correct indentation.  Improve diagnostics.
+ 	(pushdecl): Remove unnecessary assertion.  Short-circuit anonymous
+ 	decls.  Rewrite for new bindings structures.  Improve commentary.
+ 	Eliminate the copy_node call.
+ 	(implicit_decl_warning): Use the "diag" idiom (as seen in
+ 	locate_old_decl) to reduce code duplication; call locate_old_decl
+ 	if appropriate.  Relocate to remove need for forward declaration.
+ 	(implicitly_declare): Adjust for new bindings structures.  Kludge
+ 	around Objective-C not-really-builtin functions.
+ 	(undeclared_variable): Improve diagnostics.  If current_function_decl
+ 	is nonnull but current_function_scope is null, use current_scope.
+ 	Use bind.
+ 	(lookup_tag): Adjust for new bindings structures.  Kludge around
+ 	Objective-C's tag declarations that wind up in the external scope.
+ 	(lookup_name): Adjust for new bindings structures.  Kludge around
+ 	c-common.c's pseudo-typedefs that wind up in the external scope.
+ 	(lookup_name_current_level): Rename lookup_name_in_scope; take a
+ 	second argument indicating the scope to examine; rewrite for
+ 	new bindings structures.
+ 	(c_init_decl_processing): Adjust for renamed functions.  Do not
+ 	initialize current_file_decl, first_builtin_decl, last_builtin_decl.
+ 	First scope pushed is the external scope, not the global scope.
+ 	(builtin_function): Use bind, not pushdecl.  Adjust other bits
+ 	for new data structures.  Keep track of builtins that should be
+ 	made visible automatically.
+ 	(start_decl): Adjust diagnostics.  Remove unnecessary call to
+ 	expand_decl.
+ 	(grokparms): Return 0 if arg_types is error_mark_node.
+ 	(get_parm_info): Rename "void_at_end" argument to "ellipsis", with
+ 	reversed sense.  Rewrite for new bindings structures.  Do not
+ 	leave any decls in the scope, to prevent pop_scope from doing
+ 	contradictory things with them.
+ 	(finish_struct, finish_enum): Remove redundant diagnostics.
+ 	(build_enumerator): Don't cascade diagnostics for error_mark_node.
+ 	Mark location where -pedantic changes the meaning of the program.
+ 	(store_parm_decls_newstyle, store_parm_decls_oldstyle): Load the
+ 	parameter decls into the function's scope structure using bind.
+ 	Warn here about function definitions in the wrong style.
+ 	Adjust diagnostics.
+ 	(store_parm_decls): Correct the determination of whether a
+ 	function was defined with a prototype.
+ 	(c_write_global_declarations): Operate on all file decls and on
+ 	the external scope.  Split body of the loop to...
+ 	(c_write_global_declarations_1): ... this new function, to avoid
+ 	code duplication.
+ 	(truly_local_externals, first_builtin_decl, last_builtin_decl)
+ 	(make_scope, pop_scope, in_parm_level_p, set_block)
+ 	(any_external_decl, record_external_decl, bind_label, getdecls)
+ 	(link_hash_hash, link_hash_eq, merge_translation_unit_decls)
+ 	(c_reset_state): Delete.
+ 	(visible_builtins, c_override_global_bindings_to_false)
+ 	(c_binding, I_SYMBOL_BINDING, I_SYMBOL_DECL, I_TAG_BINDING)
+ 	(I_TAG_DECL, I_LABEL_BINDING, I_LABEL_DECL, file_scope)
+ 	(external_scope, binding_freelist, bind, free_binding_and_advance)
+ 	(push_file_scope, pop_file_scope): New.
+ 	(pushtag, pushdecl_top_level, lookup_label, declare_label)
+ 	(define_label, c_make_fname_decl, finish_decl)
+ 	(mark_forward_parm_decls, build_compound_literal)
+ 	(grokdeclarator, start_function, check_for_loop_decls)
+ 	(identifier_global_value, record_builtin_type): Minor adjustments
+ 	for new bindings structures.  Improve diagnostics and commentary.
+ 	* c-objc-common.c (start_cdtor, finish_cdtor): Adjust calls to
+ 	pushlevel/poplevel respectively.
+ 	(c_objc_common_finish_file): Don't call merge_translation_unit_decls.
+ 	* c-opts.c (c_common_parse_file): Remove spurious ATTRIBUTE_UNUSED.
+ 	Warn about YYDEBUG not being defined only if -dy.  Remove no-longer-
+ 	correct loop over multiple translation units; call fatal_error if
+ 	requested to compile more than one file at once.  (This disables
+ 	IMA temporarily - an up-front error being preferable to a crash.)
+ 	* c-parse.in (pushlevel, poplevel rules): Rename push_scope, pop_scope.
+ 	(all actions): Adjust calls to pushlevel/poplevel.
+ 	(parsing_iso_function_signature): Delete.
+ 	(extdef_1): Fold into extdef.
+ 	(old_style_parm_decls_1): Fold into old_style_parm_decls.  Don't
+ 	warn here about function definitions in the wrong style.
+ 	(after_tyle_declarator, parm_declarator_starttypename)
+ 	(parm_declarator_nostarttypename, notype_declarator): Remove
+ 	commented-out productions.
+ 	(parmlist_1, parmlist_2): Use make_node, not tree_cons, to create
+ 	an empty TREE_LIST node.  Adjust calls to get_parm_info.
+ 	(parmlist_2 : ELLIPSIS): Tag the arg-info block with error_mark_node
+ 	to suppress -Wold-style-definition after this error.
+ 	(c_parse_file): Don't clear the binding stack or call
+ 	finish_fname_decls here.  Correct comment.
+ 	* c-typeck.c (same_translation_unit_p): Export.
+ 	(common_type): Use c_override_global_bindings_to_false, not
+ 	pushlevel/poplevel/declare_parm_level.
+ 	* c-lang.c: Override LANG_HOOKS_CLEAR_BINDING_STACK,
+ 	LANG_HOOKS_PUSHLEVEL, LANG_HOOKS_POPLEVEL, LANG_HOOKS_SET_BLOCK,
+ 	and LANG_HOOKS_GETDECLS with do-nothing stubs.
+ 	* objc/objc-lang.c: Likewise.
+ 	* objc/objc-act.c: Adjust all calls to pushlevel, poplevel,
+ 	get_parm_info.
+ 	(OBJC_VOID_AT_END): Delete; replace all uses
+ 	with void_list_node.
+ 	(generate_forward_declaration_to_string_table): Delete.
+ 	* objc/objc-act.h (OCTI_STRG_DECL, UOBJC_STRINGS_decl): Delete.
+ 
+ 	* coverage.c (create_coverage): Don't pushdecl anything.
+ 	* langhooks.c (lhd_clear_binding_stack): Call
+ 	lang_hooks.decls.poplevel, not poplevel.
+ 	* tree.c (list_length): If ENABLE_TREE_CHECKING, abort on a
+ 	circular list rather than going into an infinite loop.
+ 
+ 2004-03-23  Olivier Hainque  <hainque@act-europe.fr>
+ 
+ 	* optabs.c (expand_binop): When synthesizing double word rotates
+ 	from single word shifts, use a new register target if the provided
+ 	target is not a REG already.
+ 
+ 2004-03-23  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* alias.c (get_alias_set): Add support for TYPE_REF_CAN_ALIAS_ALL.
+ 	* c-common.c (handle_mode_attribute): Add extra arg to
+ 	build_pointer_type_for_mode and build_reference_type_for_mode.
+ 	* c-typeck.c (build_c_cast): Only look at TREE_CONSTANT_OVERFLOW
+ 	for INTEGER_CST.
+ 	* tree.c (build_pointer_type_for_mode): Add arg CAN_ALIAS_ALL.
+ 	Chain pointers via TYPE_NEXT_PTR_TO.
+ 	(build_reference_type_for_mode): Similarly.
+ 	(build_type_no_quals): Add extra arg to build_pointer_type_for_mode
+ 	and build_reference_type_for_mode.
+ 	(tree_check4_failed): New function.
+ 	* tree.h (TREE_CHECK4, PTR_OR_REF_CHECK): New macros.
+ 	(TYPE_REF_CAN_ALIAS_ALL, TYPE_NEXT_PTR_TO, TYPE_NEXT_REF_TO): Likewise.
+ 	(TREE_NO_UNSUED_WARNING, TREE_VIA_VIRTUAL, TREE_CONSTANT_OVERFLOW):
+ 	Add check.
+ 
+ 2004-03-23  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* fold-const.c (tree_expr_nonnegative_p): A&B is nonnegative when
+ 	A is nonnegative or B is nonnegative.  Similarly A|B is nonnegative
+ 	when both A and B are nonnegative.
+ 	(tree_expr_nonzero_p): A|B is nonzero when A is nonzero or B is
+ 	nonzero.
+ 
+ 2004-03-23  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* fold-const.c (fold): Remove cases for INTEGER_CST, REAL_CST,
+ 	VECTOR_CST, STRING_CST, COMPLEX_CST, and CONSTRUCTOR.
+ 
+ 2004-03-23  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	PR optimization/14669
+ 	* fold-const.c (fold): Only unwiden integer comparisons for equality
+ 	and inequality operators, or when the signedness doesn't change.
+ 
+ 2004-03-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* config.gcc (sparc-*-linux*): Add sparc/t-linux to tmake_file.
+ 	* config/sparc/t-linux64 (TARGET_LIBGCC2_CFLAGS): Set.
+ 	* config/sparc/t-linux: New file.
+ 
+ 2004-03-23  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* gcse.c (can_assign_to_reg_p): New function, split out from...
+ 	(want_to_gcse_p): ...here.
+ 	(compute_ld_motion_mems): Use can_assign_to_reg_p to validate
+ 	the rhs of a store.
+ 
+ 2004-03-22  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-typeck.c (same_translation_unit_p): Fix pasto.
+ 
+ 2004-03-22  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* params.def (PARAM_MAX_SCHED_REGION_BLOCKS): New.
+ 	(PARAM_MAX_SCHED_REGION_INSNS): New.
+ 	* sched-rgn.c: Include params.h
+ 	(MAX_RGN_BLOCKS): Delete.
+ 	(MAX_RGN_INSNS): Delete.
+ 	(too_large): Return bool.  Convert to PARAM_VALUE.
+ 	* Makefile.in (sched-rgn.o): Depend on $(PARAMS_H).
+ 	* doc/invoke.texi (param): Document max-sched-region-blocks and
+ 	max-sched-region-insns.
+ 
+ 2004-03-22  Joel Brobecker  <brobecker@gnat.com>
+ 
+ 	* dwarf2out.c (is_subrange_type): Do not emit a subrange_type DIE
+ 	for base types.
+ 
+ 2004-03-22  Joel Brobecker  <brobecker@gnat.com>
+ 
+ 	* dwarf2out.c (is_subrange_type): Minor code rework. No behavior
+ 	change.
+ 
+ 2004-03-22  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/14069
+ 	* c-decl.c (finish_struct): Change type of incorrect flexible array
+ 	field into error_mark_node.
+ 
+ 2004-03-22  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR target/14580
+ 	* config/rs6000/rs6000.c (symbol_ref_operand): Reject symbols
+ 	who are not local for Darwin PIC.
+ 
+ 2004-03-22  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* regrename.c (regrename_optimize): Set regs_ever_live for all
+ 	registers introduced as replacement.
+ 
+ 2004-03-22  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR middle-end/14470
+ 	* expr.c (mark_queue): New function.
+ 	(emit_insns_enqueued_after_mark): New function replacing
+ 	emit_queue.  Clear the body of emitted queued insns.
+ 	(emit_queue): Call emit_insns_enqueued_after_mark.
+ 	(store_expr): Mark the increment queue on entry.  Emit
+ 	only the incrementations queued when expanding the source.
+ 
+ 2004-03-22  Nathanael Nerode  <neroden@gcc.gnu.org>
+ 
+ 	* configure.ac: Allow --disable-coverage-flags (for the future benefit
+ 	of top level bootstrap, and consistency).  Reindent.
+ 	* configure: Regenerate.
+ 
+ 2004-03-21  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* bt-load.c, builtins.c, cfghooks.c, cfgrtl.c, gcse.c,
+ 	ggc-page.c, integrate.c, var-tracking.c, web.c: Remove
+ 	unnecessary casts.
+ 
+ 2004-03-22  Danny Smith  <dannysmith@users.sourceforge.net>
+ 
+ 	PR target/14291
+ 	* gcov-io.h (gcov_truncate): Define ftruncate as _chsize for
+ 	__MINGW32__.
+ 
+ 2004-03-21  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390.md ("*doloop_si"): Change predicate for operand 2
+ 	to nonimmediate_operand.
+ 	("*doloop_di"): Likewise.
+ 
+ 2004-03-21  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	* real.h (struct real_value): Use the same type for all
+ 	bitfields.  Rename exp to uexp.
+ 	(REAL_EXP, SET_REAL_EXP): New accessor macros for uexp.
+ 	Adjust all uses of exp...
+ 	* builtins.c: ... here, ...
+ 	* emit-rtl.c: ... here, and ...
+ 	* real.c: ... and here.
+ 
+ 2004-03-21  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+ 
+ 	* pretty-print.c (pp_base_maybe_space): New function.
+ 	* pretty-print.h (pp_base_maybe_space): Declare.
+ 	(pp_maybe_space): New macro.
+ 
+ 2004-03-21  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390.md ("addti3", "subti3"): New insns and splitters.
+ 
+ 2004-03-21  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* expmed.c (choose_mult_variant): Pass MULT_COST as argument instead
+ 	of using register multiplication cost.
+ 	(expand_mult): Adapt choose_mult_variant call.
+ 	(expand_mult_highpart): Call choose_mult_variant with WIDER_MODE
+ 	of MODE; pass appropriate cost bound.  Adjust result when
+ 	performing signed multiplication by a negative constant.
+ 	Don't use intermediate modes larger than word_mode.
+ 
+ 2004-03-21  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* alias.c (get_alias_set): Remove handling of PLACEHOLDER_EXPR.
+ 	* emit-rtl.c (component_ref_for_mem_expr): Likewise.
+ 	(set_mem_attributes_minus_bitpos): Call SUBSTITUTE_PLACEHOLDER_IN_EXPR.
+ 	* explow.c (expr_size): Likewise.
+ 	* expr.h (placeholder_list, find_placeholder): Deleted.
+ 	* expr.c (store_constructor): Likewise.
+ 	(get_inner_reference): Likewise.  Also don't call find_placeholder.
+ 	(placeholder_list, find_placeholder): Deleted.
+ 	(is_aligning_offset): Don't handle WITH_RECORD_EXPR, PLACEHOLDER_EXPR.
+ 	(expand_expr_real, cases PLACEHOLDER_EXPR, WITH_RECORD_EXPR): Likewise.
+ 	(highest_pow2_factor, case WITH_RECORD_EXPR): Remove.
+ 	* dojump.c (do_jump, case WITH_RECORD_EXPR): Likewise.
+ 	* dwarf2out.c (loc_descriptor_from_tree, case WITH_RECORD_EXPR):
+ 	Likewise.
+ 	* fold-const.c (invert_truthvalue, case WITH_RECORD_EXPR): Likewise.
+ 	(extract_muldiv, case WITH_RECORD_EXPR): Likewise.
+ 	* tree.c (expr_align, case WITH_RECORD_EXPR): Likewise.
+ 	(contains_placeholder_p): Don't handle WITH_RECORD_EXPR.
+ 	Clean up by using first_rtl_op.
+ 	(substitute_in_expr): Use SUBSTITUTE_IN_EXPR for recursive call.
+ 	(substitute_placeholder_in_expr): New function.
+ 	* tree.def (WITH_RECORD_EXPR): Deleted.
+ 	* tree.h (SUBSTITUTE_IN_EXPR, SUBSTITUTE_PLACEHOLDER_IN_EXPR): New.
+ 	(substitute_placeholder_in_expr): New.
+ 
+ 2004-03-21  Andrew Pinski  <pinskia@gcc.gnu.org>
+ 
+ 	* dojump.c (prefer_and_bit_test): Fix which part of
+ 	the and_test is replaced.
+ 
+ 2004-03-21  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* frontends.texi: Add missing line.
+ 
+ 2004-03-21  Zack Weinberg  <zack@codesourcery.com>
+ 	    Chris Devers  <cdevers@pobox.com>
+ 	    Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* doc/frontends.texi: Rewrite.
+ 	* doc/gcc.texi: Update last modification date.
+ 
+ 2004-03-21  Josef Zlomek  <zlomekj@suse.cz>
+ 
+ 	* cfgrtl.c (cfg_layout_redirect_edge_and_branch): Print the debug
+ 	message before redirecting the edge.
+ 
+ 2004-03-20  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* emit-rtl.c (set_mem_attributes_minus_bitpos): Set MEM_POINTER
+ 	flag.
+ 	* explow.c (force_not_mem): Set REG_POINTER flag according to
+ 	MEM_POINTER one.
+ 	* rtl.h (MEM_POINTER): New macro.
+ 	(struct rtx_def): Use integrated for MEM_SCALAR_P and frame_related
+ 	for MEM_POINTER.
+ 
+ 2004-03-20  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	PR target/13889
+ 	* cse.c (fold_rtx): Avoid substituting constants into unary
+ 	conversion operations.
+ 
+ 2004-03-20  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* fold-const.c (fold): Replace "expr" with "t".
+ 
+ 2004-03-20  Ian Lance Taylor  <ian@wasabisystems.com>
+ 
+ 	PR c/12373
+ 	* c-typeck.c (tagged_types_tu_compatible_p): Don't use
+ 	DECL_ORIGINAL_TYPE if there isn't one.
+ 
+ 2004-03-20  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* fold-const.c (fold): Replace "final_type" with "type".
+ 	Remove variable "final_type".
+ 
+ 2004-03-20  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* fold-const.c (fold): Constify "type".
+ 	Replace "TREE_TYPE (t)" with "type".
+ 
+ 2004-03-20  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* bb-reorder.c, bt-load.c, c-decl.c, cfgcleanup.c, coverage.c,
+ 	dwarf2asm.c, ifcvt.c, stor-layout.c, varasm.c: Replace calls
+ 	via (*targetm.foo) () with targetm.foo ().
+ 
+ 2004-03-20  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	PR other/14630
+ 	* doc/install.texi: Add info directory category and entry.
+ 
+ 2004-03-20  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* fold-const.c (fold): Replace "t" with "tem" where it is used
+ 	as a temporary variable.  Remove "orig_t" and all of its uses.
+ 
+ 2004-03-20  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* fold-const.c (fold): Remove variable "invert".
+ 	Move the handling of relational expressions that can be folded
+ 	to a constant ...
+ 	(fold_relational_const): ... here.
+ 	(tree_expr_nonzero_p): New.
+ 
+ 2004-03-20  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	PR c/14635
+ 	* builtins.def (nan, nanf, nanl, nans, nansf, nansl): Change to
+ 	DEF_GCC_BUILTIN.
+ 
+ 2004-03-20  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* Makefile.in (dojump.o): Depend on $(GGC_H) and dojump.h.
+ 	(GTFILES): Add $(srcdir)/dojump.h.
+ 	(gt-dojump.h): New dependency.
+ 	* dojump.c (and_reg, and_test, shift_test): New static variables.
+ 	(prefer_and_bit_test): New function.
+ 	(do_jump): Use it to choose between (X & (1 << C)) and (X >> C) & 1.
+ 
+ 2004-03-20  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* c-common.c, cfgcleanup.c, cgraphunit.c, c-pretty-print.c,
+ 	expmed.c, ggc-common.c, jump.c, passes.c, recog.c, regmove.c,
+ 	reorg.c, tree.h: Fix comment typos.
+ 
+ 2004-03-19  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* alias.c, attribs.c, bt-load.c, builtins.c, c-common.c,
+ 	c-decl.c, c-objc-common.c, c-typeck.c, calls.c, cfglayout.c,
+ 	cse.c, dbxout.c, dwarf2out.c, except.c, final.c,
+ 	haifa-sched.c, integrate.c, passes.c, rtlanal.c, sched-rgn.c,
+ 	sched-vis.c, simplify-rtx.c, stor-layout.c, tree.c, varasm.c,
+ 	vmsdbgout.c: Replace calls via (*targetm.foo) () with
+ 	targetm.foo ().
+ 
+ 2004-03-19  Ziemowit Laski  <zlaski@apple.com>
+ 
+ 	* config/rs6000/altivec.h (vec_dst, vec_dstst, vec_dststt,
+ 	vec_dstt, vec_sld, vec_splat): Add prototypes, marked with
+ 	always_inline attribute.
+ 	* config/rs6000/rs6000.c (altivec_expand_dst_builtin):
+ 	Treat expansion as completed even if literal argument is
+ 	invalid (so that other expansions are not tried in vain).
+ 
+ 2004-03-19  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* loop-doloop.c (add_test): Replace GEN_INT (0) with
+ 	const0_rtx.
+ 
+ 2004-03-19  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* fold-const.c (fold) <ABS_EXPR>: Move the handling of constants
+ 	...
+ 	(fold_abs_const): ... here.
+ 
+ 2004-03-19  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* tree.h (TYPE_ARRAY_MAX_SIZE): Use type.maxval directly.
+ 
+ 2004-03-19  Denis Chertykov  <denisc@overta.ru>
+ 
+ 	PR target/11520
+ 	* config/avr/avr.md ("call_insn"): Handle explicit integer
+ 	specially.
+ 	(call_value_insn): Likewise.
+ 
+ 2004-03-19  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* tree.c (substitute_in_expr): Rewrite to simplify and be more generic.
+ 
+ 2004-03-19  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* fold-const.c (negate_expr): Move the handling of constants
+ 	...
+ 	(fold_negate_const): ... here.
+ 
+ 2004-03-19  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* langhooks-def.h (LANG_HOOKS_HASH_TYPES): New macro and hook.
+ 	* langhooks.h (struct lang_hooks_for_types): New field hash_types.
+ 	* tree.c (debug_no_type_hash): Deleted.
+ 	(type_hash_canon): Abort if passed a variant.
+ 	Check lang_hooks.types.hash_types.
+ 	(build_type_no_quals): Copy mode of POINTER_TYPE and REFERENCE_TYPE.
+ 	(build_array_type): Remove unnecessary allocation of pointer type.
+ 	(build_complex_type): Properly qualify resulting type.
+ 
+ 2004-03-19  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_init_builtins): Fix typo.
+ 
+ 2004-03-19  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* expmed.c (choose_mult_variant, expand_mult_const): New, split from...
+ 	(expand_mult): ...here.
+ 	(extract_high_half): New, split out from expand_mult_highpart.
+ 	(expand_highpart_optab): Likewise.  Don't clobber target prematurely.
+ 	(expand_highpart): Evaluate the cost of a shift/add sequence,
+ 	then see if any of the specialized optabs are cheaper.
+ 
+ 2004-03-18  Ian Lance Taylor  <ian@wasabisystems.com>
+ 
+ 	* mklibgcc.in: Remove obsolete MAYBE_USE_COLLECT2.
+ 
+ 2004-03-18  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+ 
+ 	* convert.c (convert_to_real): Add more math builtins.
+ 
+ 2004-03-18  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+ 
+ 	* convert.c (convert_to_real): Reformat using switch stmt.
+ 
+ 2004-03-18  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* c-common.c (pointer_int_sum): Do not complain about using
+ 	pointers to pointers-to-members.
+ 
+ 2004-03-18  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* system.h (MD_ASM_CLOBBERS): Move to "Old target macros that
+ 	have moved to the target hooks structure".
+ 
+ 2004-03-18  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	* config/mips/mips.md (type): Split move into arith and fmove.  Split
+ 	hilo into mthilo and mfhilo.  Add trap.  Delete icmp.  Fix all uses.
+ 	* config/mips/5400.md (ir_vr54_hilo, ir_vr54_arith, ir_vr54_fabs):
+ 	Likewise.
+ 	* config/mips/5500.md (ir_vr55_hilo, ir_vr55_arith, ir_vr55_fabs):
+ 	Likewise.
+ 	* config/mips/7000.md (rm7_int_other, rm7_mthilo, rm7_mfhilo,
+ 	rm7_fp_quick): Likewise.
+ 	* config/mips/9000.md (rm9k_int, rm9k_mfhilo, rm9k_mthilo,
+ 	rm9k_fquick): Likewise.
+ 	* config/mips/sr71k.md (ir_sr70_hilo, ir_sr70_arith, ir_sr70_fabs):
+ 	Likewise.
+ 	(ir_sr70_icmp): Delete.
+ 
+ 2004-03-18  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* tree.h (TREE_CHECK2, TREE_CHECK3, TREE_CHECK5): New macros.
+ 	(tree_check2_failed, tree_check3_failed, tree_check5_failed): New decl.
+ 	(FUNC_OR_METHOD_CHECK, SET_ARRAY_OR_VECTOR_CHECK): New macros.
+ 	(REC_OR_UNION_CHECK, NUMERICAL_TYPE_CHECK): Likewise.
+ 	(TYPE_VALUES, TYPE_DOMAIN, TYPE_FIELDS, TYPE_METHODS, TYPE_VFIELD):
+ 	Protect with proper check.
+ 	(TYPE_ARG_TYPES, TYPE_METHOD_BASETYPE, TYPE_OFFSET_BASETYPE): Likewise.
+ 	(TYPE_MIN_VALUE, TYPE_MAX_VALUE): Likewise.
+ 	* tree.c (type_hash_eq): Rewrite to access proper fields for each type.
+ 	(tree_check2_failed, tree_check3_failed, tree_check5_failed): New.
+ 	* c-typeck.c (build_array_ref): Use TYPE_DOMAIN, not TYPE_VALUES.
+ 	* dwarf2out.c (gen_enumeration_type_die): Use TYPE_VALUES,
+ 	not TYPE_FIELDS.
+ 	* stor-layout.c (set_sizetype): Use TYPE_ORIG_SIZE_TYPE.
+ 
+ 2004-03-18  Mostafa Hagog  <mustafa@il.ibm.com>
+ 
+ 	* gcse.c (eliminate_partially_redundant_loads): Reject change if
+ 	dest is set between beginning and current insn.
+ 
+ 2004-03-18  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* c-decl.c (grokdeclarator): Do not complain about redeclaring
+ 	visible "static" identifiers "extern" in a local scope.
+ 	* dwarf2out.c (loc_descriptor_from_tree): Handle pre- and
+ 	post-increments/decrements.
+ 
+ 2004-03-18  Bob Wilson  <bob.wilson@acm.org>
+ 
+ 	* config/xtensa/xtensa.c (current_function_arg_words): Delete.
+ 	(xtensa_builtin_saveregs): Use current_function_args_info.arg_words.
+ 	(xtensa_va_start): Remove assignment to current_function_arg_words.
+ 
+ 2004-03-18  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* alias.c (record_set): Detect the case where a register is assigned
+ 	a new value that has the same base term as the old one.
+ 
+ 2004-03-18  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* doloop.c: Removed.
+ 	* loop-doloop.c: New file.
+ 	* Makefile.in (doloop.o): Remove.
+ 	(loop-doloop.o): New.
+ 	* cfgloop.h (get_loop_level, doloop_optimize_loops): Declare.
+ 	* cfgloopanal.c (get_loop_level): New function.
+ 	* loop-iv.c (iv_number_of_iterations): Handle case when loop
+ 	is leaved immediatelly.
+ 	* loop.c (strength_reduce): Do not call doloop optimization.
+ 	* loop.h (LOOP_BCT): Removed.
+ 	* passes.c (rest_of_handle_loop_optimize): Do not use LOOP_BCT.
+ 	(rest_of_handle_loop2): Call doloop_optimize_loops.
+ 	(rest_of_compilation): Test for optimizations moved to
+ 	rest_of_handle_loop2.
+ 
+ 2004-03-17  Fariborz Jahanian <fjahanian@apple.com>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_stack_info): correct reg_size
+ 	for mixed mode.
+ 	(rs6000_emit_prologue): Ditto.
+ 	(rs6000_emit_epilogue): Ditto.
+ 	* config/rs6000/rs6000.h: Definition of DWARF_CIE_DATA_ALIGNMENT
+ 	macro for mixed mode.
+ 
+ 2004-03-18  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* predict.c (propagate_freq): Compute correctly frequency of
+ 	EXIT_BLOCK.
+ 
+ 2004-03-17  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* builtins.c (apply_args_size): Use reg_raw_mode.
+ 	(apply_result_size): Ditto.
+ 
+ 2004-03-17  Ralf Corsepius <corsepiu@faw.uni-ulm.de>
+ 
+ 	PR target/14620
+ 	* config/rtems.h: Add STD_LIB_SPEC and LIB_SPEC.
+ 
+ 2004-03-17  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* config/rs6000/t-linux64 (bispecs): Don't add -mlong-double-128 for
+ 	32-bit builds when defaulting to 32-bit.
+ 
+ 2004-03-17  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* cfgrtl.c (rtl_create_basic_block): Pre-allocate basic_block_info
+ 	array.
+ 
+ 2004-03-17  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	* config/mips/mips.md (zero_extendsidi2): Add length attribute.
+ 	(hazard_nop): Change type to nop.
+ 	(type): Split arith into arith, shift, slt, clz.  Delete darith.
+ 	Fix all uses.  Change arith to multi if more than one insn emitted.
+ 	* config/mips/5400.md (ir_vr54_arith): Likewise.
+ 	* config/mips/5500.md (ir_vr55_arith): Likewise.
+ 	* config/mips/7000.md (rm7_int_other): Likewise.
+ 	* config/mips/9000.md (rm9k_int): Likewise.
+ 	* config/mips/sr71k.md (ir_sr70_arith): Likewise.
+ 
+ 2004-03-17  Joel Brobecker  <brobecker@gnat.com>
+ 
+ 	* dwarf2out.c (subrange_type_die): Define new variable "subtype"
+ 	to hold the subtype tree instead of recomputing it several times.
+ 
+ 2004-03-17  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/mn10300/mn10300.c (notice_update_cc): Don't handle
+ 	CC_INVERT.
+ 	* config/mn10300/mn10300.md (cc): Remove "invert".
+ 
+ 2004-03-16  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+ 
+ 	* builtins.c (integer_valued_real_p): Add builtin rint.
+ 	(fold_builtin): Likewise.
+ 	* convert.c (convert_to_real): Likewise.
+ 
+ 	* convert.c (convert_to_real): Fix typos in `long double'
+ 	builtins.
+ 
+ 2004-03-16  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	PR c++/14481
+ 	* fold-const.c (fold): Set TREE_NO_UNUSED_WARNING on implicitly
+ 	generated COMPOUND_EXPRs.
+ 
+ 2004-03-16  Ralf Corsepius <corsepiu@faw.uni-ulm.de>
+ 
+ 	* config/h8300/t-rtems (h8300-*-rtems*): New.
+ 
+ 2004-03-16  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* doc/cppopts.texi(fwide-exec-charset): Fix typo.
+ 
+ 2004-03-16  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/i386/i386-protos.h: Add a prototype for
+ 	ix86_reverse_condition.
+ 	* config/i386/i386.c (ix86_reverse_condition): New.
+ 	* config/i386/i386.h (REVERSE_CONDITION): Use
+ 	ix86_reverse_condition.
+ 	* config/i386/i386.md: Use ix86_reverse_condition instead of
+ 	REVERSE_CONDITION.
+ 
+ 2004-03-16  J. Brobecker  <brobecker@gnat.com>
+ 
+ 	* dwarf2out.c (loc_descriptor_from_tree): Add handling for MIN_EXPR.
+ 
+ 2004-03-16  Nathanael Nerode  <neroden@gcc.gnu.org>
+ 
+ 	PR bootstrap/12974
+ 	* Makefile.in: Pass $(INCLUDES) down to libgcc.mk explicitly.
+ 
+ 2004-03-16  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* c-common.c (c_common_type_for_mode): Build vector types on
+ 	demand.
+ 	(handle_mode_attribute): Deprecate using the mode attribute
+ 	to create vector types.  Fix indentation.
+ 	(vector_type_node_list): Remove.
+ 	(handle_vector_size_attribute): Create vector types on demand.
+ 	Strip a NON_LVALUE_EXPR from the attribute if there is one.
+ 	* c-typeck.c (comptypes): Make vector types compatible if they
+ 	have the same underlying mode.
+ 	(convert_for_assignment): Use comptypes to convert between
+ 	vector types.
+ 	* tree.c (build_common_tree_nodes_2): Do not create vector types.
+ 	* config/arm/arm.c (arm_init_iwmmxt_builtins): Create necessary
+ 	vector types.
+ 	* tree.h: Remove vector types.
+ 	* config/i386/i386.c (i386_init_mmx_sse_builtins): Likewise.
+ 	* config/rs6000/rs6000.c (rs6000_init_builtins): Likewise.
+ 	(V16QI_type_node, V2SI_type_node, V2SF_type_node, V4HI_type_node,
+ 	V4SI_type_node, V4SF_type_node, V8HI_type_node): New globals.
+ 	* doc/extend.texi (Vector Types): Document how to use the
+ 	vector_size attribute to create vectors, rather than mode.
+ 
+ 	* config/arm/mmintrin.h: Use vector_size attribute, not mode.
+ 	* config/i386/emmintrin.h: Likewise.
+ 	* config/i386/mmintrin.h: Likewise.
+ 	* config/i386/xmmintrin.h: Likewise.
+ 	* config/sh/ushmedia.h: Likewise.
+ 
+ 2004-03-16  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/freebsd-spec.h, config/arc/arc-protos.h,
+ 	config/arm/aout.h, config/arm/elf.h, config/arm/freebsd.h,
+ 	config/arm/linux-gas.h, config/arm/semi.h,
+ 	config/cris/cris-protos.h, config/i386/xm-djgpp.h,
+ 	config/ia64/freebsd.h, config/mips/7000.md,
+ 	config/mips/9000.md, config/ns32k/ns32k-protos.h,
+ 	config/sparc/pbd.h: Update copyright.
+ 
+ 2004-03-16  Ralf Corsepius <corsepiu@faw.uni-ulm.de>
+ 
+ 	PR target/14577
+ 	* config.gcc: Switch sh-*-rtems* to ELF.  Add sh-*-rtemscoff.
+ 
+ 2004-03-16  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* combine.c (combine_simplify_rtx): Remove the "last"
+ 	parameter and its documentation.  Adjust recursive calls.
+ 	(simplify_logical): Always perform the only simplification
+ 	controlled by "last", if the simplified expression is
+ 	actually different.
+ 	(try_combine): Do not pass the "last" parameter to
+ 	combine_simplify_rtx.
+ 
+ 2004-03-16  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	PR target/14599
+ 	* config/mips/mips.md (UNSPEC_GP): New constant.
+ 	* config/mips/mips.c (CONST_GP_P): Expect the CONST to contain
+ 	an UNSPEC instead of (reg $gp).
+ 	(mips16_gp_pseudo_reg): Change accordingly.
+ 	(print_operand): Print $gp directly when handling CONST_GP_P.
+ 
+ 2004-03-16  Richard Zidlicky  <rz@linux-m68k.org>
+ 
+ 	* config.gcc, config/m68k/linux.h: Implement with-cpu for m68k-linux.
+ 	* longlong.h: Make code 68060 clean when compiling for m68060.
+ 
+ 2004-03-16  Richard Zidlicky  <rz@linux-m68k.org>
+ 
+ 	* config/m68k/m68k.md: Fix constraints for bitfield instructions.
+ 	* doc/md.texi: Clarify description of "i" constraint.
+ 
+ 2004-03-15  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	* config/mips/mips.md (type): Split load into load, fpload, fpidxload.
+ 	Split store into store, fpstore, fpidxstore.  Fix all uses.
+ 	* config/mips/5400.md (ir_vr54_load, ir_vr54_store, ir_vr54_fstore):
+ 	Likewise.
+ 	* config/mips/5500.md (ir_vr55_load, i5_vr55_store): Likewise.
+ 	* config/mips/7000.md (rm7_ld, rm7_st): Likewise.
+ 	* config/mips/9000.md (rm9k_load, rm9k_store): Likewise.
+ 	* config/mips/sr71k.md (ir_sr70_load, ir_sr70_store, ir_sr70_fload,
+ 	ir_sr70_fstore): Likewise.
+ 
+ 2004-03-15  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR middle-end/14535
+ 	* except.c (collect_one_action_chain): Record action for cleanup
+ 	outer of exception spec.
+ 
+ 2004-03-15  Ian Lance Taylor  <ian@wasabisystems.com>
+ 
+ 	* config/rs6000/host-darwin.c (darwin_rs6000_gt_pch_use_address):
+ 	Fix the check for abort and only do the mmap if we can.
+ 
+ 2004-03-15  Eric Botcazou  <ebotcazou@act-europe.fr>
+ 
+ 	* config/sparc/sparc.h: Rework comments about the code model
+ 	in 64-bit environment and the mode 'Pmode'.
+ 	* doc/invoke.texi (SPARC options): Rework description of the
+ 	different code models supported in 64-bit environment.
+ 
+ 2004-03-15  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* defaults.h (REVERSIBLE_CC_MODE): Define.
+ 	* jump.c (reversed_comparison_code_parts): Don't check if
+ 	REVERSIBLE_CC_MODE is defined.
+ 
+ 2004-03-15  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* c-incpath.c, c-incpath.h, c-pch.c, c.opt, cppexp.c,
+ 	et-forest.h, genattr.c, ggc-none.c, hosthooks-def.h,
+ 	hosthooks.h, params.h, ra-colorize.c, web.c,
+ 	config/darwin-c.c, config/alpha/freebsd.h, config/arm/pe.c,
+ 	config/avr/avr-protos.h, config/avr/avr.md,
+ 	config/fr30/fr30-protos.h, config/fr30/fr30.md,
+ 	config/h8300/fixunssfsi.c, config/i386/darwin.h,
+ 	config/i386/freebsd.h, config/i386/freebsd64.h,
+ 	config/ia64/hpux.h, config/ia64/unwind-ia64.c,
+ 	config/ip2k/libgcc.S, config/m32r/xm-m32r.h,
+ 	config/mmix/mmix-modes.def, config/ns32k/netbsd.h,
+ 	config/ns32k/ns32k.md, config/pa/pa64-hpux.h,
+ 	config/pa/pa64-regs.h, config/rs6000/aix41.h,
+ 	config/rs6000/aix43.h, config/rs6000/host-darwin.c,
+ 	config/sparc/aout.h, config/sparc/freebsd.h,
+ 	config/sparc/litecoff.h, config/vax/vax-protos.h,
+ 	doc/hostconfig.texi, doc/include/gcc-common.texi: Update
+ 	copyright.
+ 
+ 2004-03-15  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/arm.c (thumb_expand_prologue): Tie prologue insns to fp.
+ 
+ 2004-03-15  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+ 
+ 	* c-pretty-print.c (pp_c_semicolon): Fix formatting.
+ 	(pp_c_cv_qualifier): Document.
+ 	(pp_c_space_for_pointer_operator): Likewise.
+ 	(pp_c_integer_constant): Likewise.
+ 	(pp_c_identifier): Likewise.
+ 	(pp_c_init_declarator): Don't print function body.
+ 
+ 2004-03-14  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* doc/contrib.texi, doc/extend.texi, doc/gcov.texi,
+ 	doc/install.texi, doc/invoke.texi, doc/makefile.texi,
+ 	doc/sourcebuild.texi, doc/tm.texi, doc/trouble.texi: Capitalize
+ 	"gcc", "g++" and "g77" or mark up with appropriate markup.  Adjust
+ 	wording and grammar.
+ 
+ 2004-03-14  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* alias.c (get_alias_set): Replace calls via (*lang_hooks.foo) ()
+ 	with lang_hooks.foo ().
+ 	* builtins.c (expand_builtin_va_arg): Likewise.
+ 	* c-common.c (fname_as_string, c_common_truthvalue_conversion,
+ 	c_common_type_for_mode, c_common_nodes_and_builtins,
+ 	handle_mode_attribute, handle_vector_size_attribute): Likewise.
+ 	* c-convert.c (convert): Likewise.
+ 	* c-format.c (check_format_types): Likewise.
+ 	* c-objc-common.c (c_tree_printer): Likewise.
+ 	* c-typeck.c (build_unary_op, build_conditional_expr,
+ 	build_binary_op): Likewise.
+ 	* calls.c (try_to_integrate, expand_call,
+ 	emit_library_call_value_1): Likewise.
+ 	* cgraph.c (cgraph_node_name, cgraph_function_possibly_inlined_p):
+ 	Likewise.
+ 	* cgraphunit.c (record_call_1, cgraph_analyze_function,
+ 	cgraph_expand_function): Likewise.
+ 	* convert.c (convert_to_pointer, convert_to_integer): Likewise.
+ 	* coverage.c (build_fn_info_type, build_ctr_info_type,
+ 	build_gcov_info, create_coverage): Likewise.
+ 	* dbxout.c (dbxout_init): Likewise.
+ 	* diagnostic.c (diagnostic_report_current_function): Likewise.
+ 	* dojump.c (do_jump): Likewise.
+ 	* dwarf2out.c (dwarf2_name): Likewise.
+ 	* except.c (init_eh): Likewise.
+ 	* explow.c (expr_size, int_expr_size): Likewise.
+ 	* expmed.c (make_tree, const_mult_add_overflow_p, expand_mult_add):
+ 	Likewise.
+ 	* expr.c (store_expr, store_constructor, safe_from_p,
+ 	expand_expr_real, do_store_flag, try_casesi): Likewise.
+ 	* function.c (push_function_context_to, pop_function_context_from,
+ 	free_after_parsing, assign_stack_local_1, assign_stack_temp_for_type,
+ 	put_var_into_stack, allocate_struct_function, current_function_name):
+ 	Likewise.
+ 	* integrate.c (copy_decl_for_inlining, expand_inline_function):
+ 	Likewise.
+ 	* langhooks.c (lhd_clear_binding_stack, write_global_declarations,
+ 	lhd_print_error_function): Likewise.
+ 	* opts.c (handle_option, decode_options): Likewise.
+ 	* passes.c (open_dump_file): Likewise.
+ 	* print-tree.c (print_node): Likewise.
+ 	* stmt.c (expand_fixup, fixup_gotos, expand_asm_operands,
+ 	expand_decl_cleanup, emit_case_nodes): Likewise.
+ 	* stor-layout.c (variable_size): Likewise.
+ 	* toplev.c (announce_function, wrapup_global_declarations,
+ 	check_global_declarations, compile_file, default_tree_printer,
+ 	process_options, lang_dependent_init, finalize): Likewise.
+ 	* tree-dump.c (dequeue_and_dump): Likewise.
+ 	* tree-inline.c (remap_decl, remap_block, copy_body_r,
+ 	initialize_inlined_parameters, declare_return_variable,
+ 	inlinable_function_p, expand_call_inline, optimize_inline_calls,
+ 	walk_tree, copy_tree_r): Likewise.
+ 	* tree-optimize.c (tree_rest_of_compilation): Likewise.
+ 	* tree.c (decl_assembler_name, tree_size, size_in_bytes, staticp,
+ 	unsafe_for_reeval, get_unwidened, get_narrower, get_callee_fndecl,
+ 	variably_modified_type_p, dump_tree_statistics): Likewise.
+ 	* varasm.c (assemble_variable, compare_constant, copy_constant,
+ 	force_const_mem, compute_reloc_for_constant, output_constant,
+ 	output_addressed_constants, initializer_constant_valid_p): Likewise.
+ 
+ 2004-03-14  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* doc/install.texi: Make autoconf 2.13 the exception, not the rule.
+ 
+ 2004-03-14  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* doc/install.texi: Reflect autoconf and automake version for
+ 	libffi. Update autoconf version to 2.59.
+ 
+ 2004-03-13  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* fold-const.c (negate_expr, operand_equal_for_comparison_p,
+ 	optimize_bit_field_compare, decode_field_reference, all_ones_mask_p,
+ 	make_range, build_range_check, fold_range_test, unextend,
+ 	constant_boolean_node, fold_binary_op_with_conditional_arg,
+ 	fold_truthop, fold_mathfn_compare, fold_inf_compare,
+ 	fold_single_bit_test, fold): Replace calls via (*lang_hooks.foo) ()
+ 	with lang_hooks.foo ().
+ 
+ 2004-03-14  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* arm.h (EXTRA_CONSTRAINT_STR_ARM): Update comment.
+ 
+ 2004-03-13  Dara Hazeghi  <dhazeghi@yahoo.com>
+ 
+ 	* doc/install.texi: Note status of -fnew-ra.
+ 
+ 2004-03-13  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR middle-end/14470
+ 	* expr.c (store_expr): Call emit_queue before generating the move
+ 	from the temporary to the original target.  Protect the temporary
+ 	from emit_queue.
+ 
+ 2004-03-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/14533
+ 	* config/s390/s390.c (legitimize_pic_address): Don't abort on UNSPEC
+ 	other than UNSPEC_GOTOFF.
+ 
+ 2004-03-13  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* arm.c (arm_legitimate_address_p): New argument, OUTER.  Pass through
+ 	to arm_legitimate_index_p.  Update all callers with SET as default
+ 	value.
+ 	(arm_legitimate_index_p): New argument, OUTER.  Restrict the index
+ 	range if OUTER is a sign-extend operation on QImode.  Correctly
+ 	reject shift operations on sign-extended QImode addresses.
+ 	(bad_signed_byte_operand): Delete.
+ 	(arm_extendqisi_mem_op): New function.
+ 	* arm.h (EXTRA_CONSTRAINT_ARM): Delete.  Replace with...
+ 	(EXTRA_CONSTRAINT_STR_ARM): ... this.  Handle extended address
+ 	constraints.
+ 	(CONSTRAINT_LEN): New.
+ 	(EXTRA_CONSTRAINT): Delete.  Replace with...
+ 	(EXTRA_CONSTRAINT_STR): ... this.
+ 	(PREDICATE_CODES): Remove bad_signed_byte_operand.
+ 	* arm.md (extendqihi_insn): Use new constraint Uq.  Rework.  Length
+ 	is now always default.
+ 	(define_splits for bad sign-extend loads): Delete.
+ 	(arm_extendqisi, arm_extendqisi_v5): Likewise.
+ 	* arm/vfp.md (arm_movsi_vfp, arm_movdi_vfp, movsf_vfp, movdf_vfp):
+ 	Rework 'U' constraint to 'Uv'.
+ 	* arm-protos.h: Remove bad_signed_byte_operand.  Add
+ 	arm_extendqisi_mem_op.
+ 	* doc/md.texi (ARM constraints): Rename VFP constraint (now Uv).
+ 	Add Uq constraint.
+ 
+ 2004-03-13  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_va_arg): Replace SPLIT_COMPLEX_ARGS
+ 	with targetm version.
+ 
+ 	PR target/14567
+ 	* config/rs6000/rs6000.h (UNITS_PER_ARG, RS6000_ARG_SIZE): Delete.
+ 	(HARD_REGNO_MODE_OK): Disallow TFmode for fp31.
+ 	* config/rs6000/rs6000.c (rs6000_arg_size): New function.
+ 	Update all users of RS6000_ARG_SIZE.
+ 	(function_arg_advance): Count fregno using mode size.
+ 	(function_arg): Handle long double split over regs and memory.
+ 	(function_arg_partial_nregs): Likewise.
+ 	(rs6000_va_arg): Repackage complex args.
+ 
+ 2004-03-13  Dean Ferreyra <dferreyra@igc.org>
+ 
+ 	PR target/14047
+ 	* config/avr/avr.c (avr_progmem_p): Add "attributes" parameter.
+ 	(avr_insert_attributes): Pass "attributes" to avr_progmem_p.
+ 	* config/avr/avr-protos.h (avr_progmem_p): Change prototype.
+ 
+ 2004-03-12  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* config/rs6000/rs6000-protos.h (rs6000_output_dwarf_dtprel): Add
+ 	prototype.
+ 	* config/rs6000/rs6000.c (rs6000_output_dwarf_dtprel): New.
+ 	* config/rs6000/rs6000.h (ASM_OUTPUT_DWARF_DTPREL): Define.
+ 
+ 2004-03-12  Andrew Pinski  <apinski@apple.com>
+ 
+ 	* config/rs6000/host-darwin.c (darwin_rs6000_gt_pch_use_address):
+ 	Use ret instead of result. Use addr instead of base.
+ 
+ 2004-03-12  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* doc/install.texi (*-ibm-aix*): Document assembler and achiver
+ 	fixes required by libstdc++ and update installation instructions
+ 	for libstdc++.a.
+ 
+ 2004-03-12  Danny Smith  <dannysmith@users.sourceforge.net>
+ 
+ 	* config/i386/winnt.c (i386_pe_strip_name_encoding_full): Strip
+ 	leading '@' on fastcall symbols before stripping suffix.
+ 
+ 2004-03-12  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* combine.c (unmentioned_reg_p): New function to check whether an
+ 	expression is a "specialization" of another, i.e. that there are
+ 	no registers or memory references mentioned in the first that don't
+ 	appear in the second.
+ 	(unmentioned_reg_p_1): New helper subroutine of unmentioned_reg_p.
+ 	(combine_instructions): Also try combining instructions using the
+ 	REG_EQUAL note from a preceding log-linked instruction.
+ 
+ 2004-03-12  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* config/i386/i386.c (ix86_split_ashrdi): Optimize shift by 63.
+ 
+ 2004-03-12  Matt Austern  <austern@apple.com>
+ 
+ 	* target.h (struct gcc_target): New target hook, unwind_label.
+ 	* target-def.h (TARGET_ASM_EMIT_UNWIND_LABEL): New hook.
+ 	* output.h (default_emit_unwind_label): New function.
+ 	* default.h (TARGET_EXPLICIT_INSTANTIATIONS_ONE_ONLY): New macro.
+ 	(TARGET_USES_WEAK_UNWIND_INFO): New target macro.
+ 	(TARGET_SUPPORTS_HIDDEN): New target macro.
+ 	* dwarf2out.c (struct dw_fde_struct): Add field for function decl
+ 	that corresponds to this FDE.
+ 	(FRAME_BEGIN_LABEL): Allow target to override default label.
+ 	(output_call_frame_info): If FDEs are linknonce, then use extra
+ 	indirection for FDE encoding, output a label for each FDE, and
+ 	output an empty label for each function without an FDE.
+ 	(dwarf2out_begin_prologue): Set up decl field when creating an FDE.
+ 	* varasm.c (globalize_decl): Call ASM_MAKE_LABEL_LINKONCE for
+ 	decls with DECL_ONE_ONLY set, if that macro is defined.
+ 	(make_decl_one_only): Don't use DECL_COMMON if we're compiling
+ 	for a SUPPORTS_ONE_ONLY target.
+ 	* config/darwin-protos.h (darwin_unique_section): Declare.
+ 	(darwin_asm_named_section): Likewise.
+ 	(darwin_section_type_flags): Likewise.
+ 	(darwin_non_lazy_pcrel): Likewise.
+ 	(darwin_emit_unwind_label): Likewise.
+ 	(darwin_make_decl_one_only): Likewise.
+ 	* config/darwin.c (machopic_finish): Get rid of tweak that
+ 	eliminate stubs for symbols that are defined.
+ 	(darwin_encode_section_info): Don't treat weak functions as defined.
+ 	(darwin_make_decl_one_only): Define.
+ 	(darwin_asm_named_section): Likewise.
+ 	(darwin_section_type_flags): Likewise.
+ 	(darwin_unique_section): Likewise.
+ 	(darwin_emit_unwind_label): Likewise.
+ 	(darwin_non_lazy_pcrel): Likewise.
+ 	(darwin_asm_output_dwarf_delta): Difference between two labels is
+ 	local only if both labels are local.
+ 	* config/darwin.h (MAKE_DECL_ONE_ONLY): Define.
+ 	(ASM_MAKE_LABEL_LINKONCE): Likewise.
+ 	(TARGET_SUPPORTS_HIDDEN): Likewise.
+ 	(TARGET_USES_WEAK_UNWIND_INFO): Likewise.
+ 	(TARGET_EXPLICIT_INSTANTIATIONS_ONE_ONLY): Likewise.
+ 	(FRAME_BEGIN_LABEL): Likewise.
+ 	(ASM_DECLARE_OBJECT_NAME): Make references to weak symbols indirect.
+ 	(ASM_DECLARE_FUNCTION_NAME): Likewise.
+ 	(darwin_eh_frame_section): Give __eh_frame section the coalesced flag.
+ 	(TARGET_ASM_UNIQUE_SECTION): Define.
+ 	(EH_FRAME_SECTION_NAME): Define.
+ 	(EH_FRAME_SECTION_ATTR): Likewise.
+ 	(ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX): Likewise.
+ 	(TARGET_ASM_NAMED_SECTION): Likewise.
+ 	(TARGET_SECTION_TYPE_FLAGS): Likewise.
+ 	* doc/tm.texi: Document TARGET_USES_WEAK_UNWIND_INFO,
+ 	TARGET_EXPLICIT_INSTANTIATIONS_ONE_ONLY, TARGET_SUPPORTS_HIDDEN,
+ 	TARGET_ASM_EMIT_UNWIND_LABEL.
+ 
+ 2004-03-12  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+ 
+ 	* builtins.c (expand_builtin_mathfn): Add pow10* to the
+ 	existing exp10* case.
+ 	(expand_builtin): Likewise.
+ 
+ 2004-03-12  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* doc/tm.texi (registers) <Values in Registers>: Add
+ 	entry for REGMODE_NATURAL_SIZE.
+ 
+ 2004-03-12  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR target/14547
+ 	* target.h (struct gcc_target): Move calls substructure before
+ 	booleans.  Add split_complex_arg.
+ 	* function.c (assign_parms, split_complex_args): Use it.
+ 	* calls.c (expand_call): Likewise.
+ 	(split_complex_values): Likewise.  Check for splittable types
+ 	before allocating memory.
+ 	(split_complex_types): Likewise.
+ 	* system.h (SPLIT_COMPLEX_ARGS): Poison.
+ 	* expr.h (SPLIT_COMPLEX_ARGS): Remove.
+ 	* target-def.h (TARGET_SPLIT_COMPLEX_ARG): New.
+ 	* config/alpha/alpha.c (alpha_split_complex_arg): New.
+ 	(TARGET_SPLIT_COMPLEX_ARG): New.
+ 	* config/alpha/alpha.h (SPLIT_COMPLEX_ARGS): Remove.
+ 	* config/rs6000/rs6000.c (TARGET_SPLIT_COMPLEX_ARG): New.
+ 	(rs6000_override_options): Zap it for non-AIX.
+ 	(rs6000_function_value): Use targetm.calls.split_complex_arg.
+ 	* config/rs6000/rs6000.h (SPLIT_COMPLEX_ARGS): Remove.
+ 	* config/xtensa/xtensa.c (TARGET_SPLIT_COMPLEX_ARG): New.
+ 	* config/xtensa/xtensa.h (SPLIT_COMPLEX_ARGS): Remove.
+ 	* doc/tm.texi (TARGET_SPLIT_COMPLEX_ARG): Modify from old
+ 	SPLIT_COMPLEX_ARGS entry.
+ 
+ 2004-03-11  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/alpha/alpha.c (xfloating_ops, vax_cvt_ops): New.
+ 	(alpha_lookup_xfloating_lib_func): Use them, return rtx.
+ 	(alpha_emit_xfloating_arith): Update to match.
+ 	(alpha_emit_xfloating_compare): Likewise.
+ 	(alpha_emit_xfloating_cvt): Likewise.
+ 	(alpha_emit_xfloating_libcall): Take already built symbol,
+ 	mark call const.
+ 	* config/alpha/alpha.md (extendsftf2, extenddftf2): Take
+ 	op1 in a register.
+ 
+ 2004-03-11  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR target/14539
+ 	* config/alpha/alpha.h (STACK_BOUNDARY): Set to 128.
+ 
+ 	* simplify-rtx.c (simplify_relational_operation): Fix typo.
+ 
+ 2004-03-11  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR middle-end/14477
+ 	* except.c (remove_unreachable_regions): Look thru CALL_PLACEHOLDER.
+ 
+ 2004-03-11  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	PR target/14262
+ 	* calls.c (load_register_parameters): If BLOCK_REG_PADDING is not
+ 	defined, pass small BLKmode values in registers in the low-order part.
+ 
+ 2004-03-11  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* combine.c (if_then_else_cond): Check for NULL return value of
+ 	simplify_gen_subreg.
+ 
+ 2004-03-11  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	PR target/14496
+ 	* config/mips/mips.h (UNITS_PER_FPVALUE): Fix value for
+ 	TARGET_SINGLE_FLOAT.
+ 
+ 2004-03-11  Steve Ellcey  <sje@cup.hp.com>
+ 
+ 	* config/ia64/hpux.h (TARGET_INIT_LIBFUNCS): Add undef.
+ 	* config/ia64/ia64.h (TARGET_INIT_LIBFUNCS): Add define.
+ 	* config/ia64/ia64.c (ia64_init_libfuncs): New.
+ 	(ia64_hpux_init_libfuncs): Add call to ia64_init_libfuncs.
+ 
+ 2004-03-11  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* fold-const.c (negate_expr_p) <RSHIFT_EXPR>: We can optimize
+ 	-((int)X>>C) where C is an integer constant one bit less than the
+ 	size of X into (unsigned)X>>C.  Similarly for unsigned->signed.
+ 	(negate_expr) <RSHIFT_EXPR>: Implement the above transformations.
+ 
+ 	* simplify-rtx.c (simplify_unary_operation): Also implement the
+ 	above transformations at the RTL level.
+ 
+ 2004-03-11  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* real.c (encode_ibm_extended): Do round low word.
+ 
+ 2004-03-11  Ben Elliston  <bje@wasabisystems.com>
+ 
+ 	* config/arm/arm.md (is_xscale): Comment this attribute and move
+ 	it a bit further up in the file, closer to related attributes.
+ 
+ 2004-03-11  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* config/host-solaris.c (sol_gt_pch_use_address): Add
+ 	missing terminating marker to comment.
+ 
+ 2004-03-11  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.md: Use move_operand in splitters for 64-bit moves.
+ 	(movdi, movsi, movhi, movqi, movsf, movdf): Remove predicates.
+ 	(*movdi_32bit_mips16, *movsi_mips16, *movhi_mips16, *movqi_mips16)
+ 	(*movsf_mips16, *movdf_mips16):  Name unnamed patterns.  Use
+ 	move_operand as source predicate in all cases.
+ 	(*movdi_32bit): Renamed from movdi_internal.  Remove 'F' constraint.
+ 	Test reg_or_0_operand.  Use move_operand as source predicate.
+ 	(*movdi_64bit): Renamed from movdi_internal2.  Test reg_or_0_operand.
+ 	(*movdi_64bit_mips16): Renamed from movdi_internal2_mips16.
+ 	(*movsi_internal): Renamed from movsi_internal.  Test reg_or_0_operand.
+ 	(movhi, movqi, movsf, movdf): Use mips_legitimize_move.
+ 	(*movhi_internal): Renamed from movhi_internal.  Test reg_or_0_operand.
+ 	Use move_operand as source predicate.  Remove 'K' constraint.
+ 	(*movqi_internal): Likewise movqi_internal.
+ 	(*movsf_hardfloat): Renamed from movsf_internal1.  Test
+ 	reg_or_0_operand.  Use move_operand as source predicate.
+ 	(*movsf_softfloat): Likewise movsf_internal2.
+ 	(*movdf_hardfloat_64bit): Likewise movsf_internal1a.
+ 	(*movdf_hardfloat_32bit): Likewise movsf_internal1b.
+ 	(*movdf_softfloat): Likewise movdf_internal2.
+ 	* config/mips/mips.c (move_operand): Match arbitrary CONST_INTs
+ 	for DImode if !TARGET_64BIT.
+ 	(mips_legitimize_move): Simplify accordingly.
+ 
+ 2004-03-11  Josef Zlomek  <zlomekj@suse.cz>
+ 
+ 	PR/14362
+ 	* var-tracking.c (struct variable_def): Added field refcount.
+ 	(variable_htab_free): Decrease the refcount and delete variable
+ 	only if there are no more references.
+ 	(unshare_variable): New function.
+ 	(vars_copy_1): Increase refcount instead of copying the variable.
+ 	(variable_union): Share the variables where possible, unshare
+ 	the variables if needed.
+ 	(variable_different_p): Return false if var1 and var2 are
+ 	the same structure.
+ 	(variable_was_changed): Init the refcount of new variable.
+ 	(set_frame_base_location): Unshare variable if needed.
+ 	(set_variable_part): Init the refcount of new variable.
+ 	Unshare the variables if needed.
+ 	(delete_variable_part): Unshare the variables if needed.
+ 	(emit_notes_for_differences_1): Init the refcount of new variable.
+ 	(vt_add_function_parameters): Do not add function parameters to
+ 	IN set of ENTRY_BLOCK_PTR because it is unused anyway.
+ 	(vt_initialize): Do not add frame_base_decl to IN set of
+ 	ENTRY_BLOCK_PTR because it is unused anyway.
+ 
+ 2004-03-11  Josef Zlomek  <zlomekj@suse.cz>
+ 
+ 	* var-tracking.c (vars_copy_1): Cleanup and speedup chain operations.
+ 	(vars_copy): Likewise.
+ 	(variable_union): Likewise.
+ 	(set_variable_part): Likewise.
+ 	(delete_variable_part): Likewise.
+ 
+ 2004-03-11  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* c-typeck.c, combine.c, cse.c, dominance.c, et-forest.h,
+ 	ggc-page.c, var-tracking.c, config/fp-bit.c, config/c4x/c4x.c,
+ 	config/cris/cris.c, config/i386/ppro.md, config/i860/i860.c,
+ 	config/i860/i860.h, config/m32r/m32r.h, config/m32r/xm-m32r.h,
+ 	config/m68hc11/m68hc11.h, config/m68hc11/m68hc11.md,
+ 	config/mips/mips.c, config/mmix/mmix.c, config/ns32k/ns32k.h,
+ 	config/pa/pa.c, config/pa/pa32-regs.h, config/pa/pa64-regs.h,
+ 	config/pdp11/pdp11.h, config/rs6000/rs6000.c,
+ 	config/stormy16/stormy16.c: Fix comment typos and formatting.
+ 
+ 2004-03-11  Nathanael Nerode  <neroden@gcc.gnu.org>
+ 
+ 	* configure: Regenerate, since I forgot to while committing Paolo's
+ 	changes.
+ 
+ 2004-03-08  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	PR ada/14131
+ 	Move language detection to the top level.
+ 	* configure.ac: Remove code to detect languages,
+ 	it now lives exclusively in the top level.
+ 	* aclocal.m4 (gcc_AC_PROG_GNAT): Moved to the
+ 	top level, renamed to ACX_PROG_GNAT.
+ 
+ 2004-03-10  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-pch.c (c_common_no_more_pch): Update for gt_pch_use_address
+ 	extra arguments.
+ 	* config.host (*-*-solaris2*, *-*-linux*): Add out_host_hook_obj
+ 	and host_xmake_file fragments.
+ 	* ggc-common.c (gt_pch_save): Update for gt_pch_get_address change.
+ 	(gt_pch_restore): Similarly for gt_pch_use_address.
+ 	(default_gt_pch_get_address): New.
+ 	(mmap_gt_pch_get_address): Split out of gt_pch_save.
+ 	(default_gt_pch_use_address): Split out of gt_pch_restore.
+ 	(mmap_gt_pch_use_address): Likewise.
+ 	* hooks.c (hook_voidp_size_t_null): Remove.
+ 	(hook_bool_voidp_size_t_false): Remove.
+ 	* hooks.h: Likewise.
+ 	* hosthooks-def.h (HOST_HOOKS_GT_PCH_GET_ADDRESS): Use one of the
+ 	default_ or mmap_ definitions.
+ 	(HOST_HOOKS_GT_PCH_USE_ADDRESS): Likewise.
+ 	* hosthooks.h (struct host_hooks): Update gt_pch_get_address
+ 	and gt_pch_use_address.
+ 	* config/host-linux.c, config/host-solaris.c: New files.
+ 	* config/x-linux, config/x-solaris: New files.
+ 	* config/rs6000/host-darwin.c (darwin_rs6000_gt_pch_get_address):
+ 	Update for changed definition.
+ 	(darwin_rs6000_gt_pch_use_address): Likewise.
+ 	* doc/hostconfig.texi: Update docs.
+ 
+ 2004-03-10  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR c/14517
+ 	* c-decl.c (grokdeclarator): Don't warn for duplicate qualifiers
+ 	except for pedantic c90 mode.
+ 
+ 2004-03-10  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* configure.ac: Bump AC_PREREQ to 2.59.
+ 	* configure: Regenerate.
+ 
+ 2004-03-10  Uros Bizjak  <uros@kss-loka.si>
+ 
+ 	* optabs.h (enum optab_index): Add new OTI_exp10 and OTI_exp2.
+ 	(exp10_optab, exp2_optab): Define corresponding macros.
+ 	* optabs.c (init_optabs): Initialize exp10_optab and exp2_optab.
+ 	* genopinit.c (optabs): Implement exp10_optab and exp2_optab
+ 	using exp10?f2 and exp2?f2 patterns.
+ 	* builtins.c (expand_builtin_mathfn): Handle BUILT_IN_EXP10{,F,L}
+ 	using exp10_optab, and BUILT_IN_EXP2{,F,L} using exp2_optab.
+ 	(expand_builtin): Expand BUILT_IN_EXP10{,F,L} and BUILT_IN_EXP2{,F,L}
+ 	using expand_builtin_mathfn if flag_unsafe_math_optimizations is set.
+ 
+ 	* config/i386/i386.md (exp10sf2, exp10df2, exp10xf2, exp2sf2,
+ 	exp2df2, exp2xf2): New patterns to implement exp10, exp10f, exp10l,
+ 	exp2, exp2f and exp2l built-ins as inline x87 intrinsics.
+ 
+ 2004-03-10  Anthony Green  <green@redhat.com>
+ 
+ 	* doc/invoke.texi (ARM Options): Fix -mpfu typo.
+ 
+ 2004-03-10  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* config/rs6000/aix.h (TARGET_OS_CPP_BUILTINS): Rename to ...
+ 	(TARGET_OS_AIX_CPP_BUILTINS): this.  Conditionally define
+ 	__LONGDOUBLE128.
+ 	* config/rs6000/aix41.h (TARGET_OS_CPP_BUILTINS): Use
+ 	TARGET_OS_AIX_CPP_BUILTINS.
+ 	* config/rs6000/aix43.h (TARGET_OS_CPP_BUILTINS): Same.
+ 	* config/rs6000/aix51.h (TARGET_OS_CPP_BUILTINS): Same.
+ 	* config/rs6000/aix52.h (TARGET_OS_CPP_BUILTINS): Same.
+ 	* config/rs6000/rs6000-c.c (rs6000_cpu_cpp_builtins): Revert
+ 	previous change.
+ 
+ 2004-03-10  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+ 
+ 	* fold-const.c (tree_expr_nonnegative_p): Add more builtin cases.
+ 
+ 2004-03-10  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* config/rs6000/rs6000-c.c (rs6000_cpu_cpp_builtins): Define
+ 	__LONGDOUBLE128 on AIX.
+ 
+ 2004-03-10  Andrew Haley  <aph@redhat.com>
+ 
+ 	PR optimization/14381
+ 	* function.c (expand_function_end): Emit a blockage insn before
+ 	the epilogue when -fnon-call-exceptions is used.
+ 
+ 	* except.c (expand_start_all_catch): Make comment more accurate.
+ 
+ 2004-03-08  Joel Sherrill  <joel@oarcorp.com>
+ 
+ 	PR target/14480
+ 	* config/rs6000/t-rtems: Add missing file on branch.
+ 
+ 2004-03-10  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* dbxout.c (dbxout_symbol_location): Do not output references
+ 	to optimized-out constant pool symbols.
+ 
+ 2004-03-10  Andreas Schwab  <schwab@suse.de>
+ 
+ 	* config/ia64/ia64.md (divsi3, udivsi3): Remove unused variable
+ 	twon34_r.
+ 
+ 2004-03-09  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	* alias.c (alias_sets_might_conflict_p): New.
+ 	* c-typeck.c (build_c_cast): Call it if warn_strict_aliasing > 1.
+ 	* common.opt (Wstrict-aliasing=): New.
+ 	* flags.h (warn_strict_aliasing): Change type to int.
+ 	* opts.c (warn_strict_aliasing): Change type to int.
+ 	(common_handle_option): Handle OPT_Wstrict_aliasing_.
+ 	* tree.h (alias_sets_might_conflict_p): Declare it.
+ 	* doc/invoke.tex (-Wstrict-aliasing=2): Document it.
+ 
+ 2004-03-10  Roman Zippel  <zippel@linux-m68k.org>
+ 
+ 	PR bootstrap/12371
+ 	* config/m68k/m68k.h (FIXED_REGISTERS): Add arg pointer.
+ 	(CALL_USED_REGISTERS): Likewise.
+ 	(REG_CLASS_CONTENTS): Likewise.
+ 	(REG_ALLOC_ORDER): New.
+ 	(REGNO_REG_CLASS): Use regno_reg_class.
+ 	* config/m68k/m68k.c: Add regno_reg_class array.
+ 
+ 2004-03-09  Steve Ellcey  <sje@cup.hp.com>
+ 
+ 	* config/ia64/ia64.md (divsi3): Fix algorithm.
+ 	  (udivsi3): Ditto.
+ 	  (setf_exp_xf): Remove '*' from name.
+ 	* testsuite/gcc.dg/20040309-1.c: New test.
+ 
+ 2004-03-09  Ian Lance Taylor  <ian@wasabisystems.com>
+ 
+ 	* system.h (SUNOS4_SHARED_LIBRARIES): Poison.
+ 	* collect2.c: Remove SUNOS4_SHARED_LIBRARIES code.
+ 	* config/sparc/aout.h (TARGET_ASM_SELECT_SECTION): Don't define.
+ 	* config/sparc/sparc.c (sparc_aout_select_section): Remove.
+ 	(sparc_aout_select_rtx_section): Don't check
+ 	SUNOS4_SHARED_LIBRARIES.
+ 	* config/sparc/sparc.h (SUNOS4_SHARED_LIBRARIES): Don't define.
+ 
+ 2004-03-10  Hans-Peter Nilsson  <hp@axis.com>
+ 
+ 	PR other/14474
+ 	* doc/md.texi (Pattern Ordering, Dependent Patterns)
+ 	(Jump Patterns, Looping Patterns): Wrap in separate "@ifset
+ 	INTERNALS".
+ 
+ 2004-03-09  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* config/ia64/hpux.h (MULTILIB_DEFAULTS): Define.
+ 	(LIBGCC_SPEC): Update to match.
+ 
+ 2004-03-09  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* c-decl.c (last_function_parms, last_function_parm_tags)
+ 	(last_function_parm_others, current_function_parms)
+ 	(current_function_parm_tags, current_function_parm_others):
+ 	Delete.
+ 	(ARG_INFO_PARMS, ARG_INFO_TAGS, ARG_INFO_TYPES, ARG_INFO_OTHERS):
+ 	New macros.
+ 	(grokdeclarator): For function definitions, save the arg-info
+ 	block from the declarator in DECL_ARGUMENTS.
+ 	(grokparms): Do not write to last_function_parm*.  Use ARG_INFO_*
+ 	macros to operate on arg-info block.  Can assume ARG_INFO_PARMS
+ 	contains only PARM_DECLs.  Improve diagnostics.
+ 	(get_parm_info): Use ARG_INFO_* macros.  Improve comments and
+ 	diagnostics.  Disable some expensive checks if not ENABLE_CHECKING.
+ 	(store_parm_decls_newstyle): Take the function to operate on,
+ 	and an arg-info block, as arguments; don't get anything from
+ 	current_function_* globals.
+ 	(store_parm_decls_oldstyle): Likewise.
+ 	(store_parm_decls): Pass fndecl and its arg-info block down to
+ 	store_parm_decls_newstyle/oldstyle.  Send functions with empty
+ 	argument lists through store_parm_decls_newstyle to reduce
+ 	overhead.
+ 	(pushdecl): Comment on the problems with the call to copy_node.
+ 	Clear DECL_ARGUMENTS of the old node after copying it, if it
+ 	is an arg-info block instead of a chain of decls.
+ 	(start_function): Do not manipulate current_function_parm* or
+ 	last_function_parm*.
+ 
+ 2004-03-09  Roger Sayle  <roger@eyesopen.com>
+ 	    Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* ifcvt.c (noce_try_sign_mask): New function to transform
+ 	"x = (y < 0) ? z : 0" into the equivalent "x = (y >> C) & z".
+ 	(noce_process_if_block): Call noce_try_sign_mask.
+ 
+ 2004-03-09  Andrew Pinski  <apinski@apple.com>
+ 
+ 	* c-typeck.c (tagged_types_tu_compatible_p):
+ 	Fix typo.
+ 
+ 2004-03-09  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* simplify-rtx.c (simplify_const_relational_operation): New function
+ 	renamed from simplify_relational_operation.
+ 	(simplify_relational_operation): Change prototype to accept an
+ 	additional mode argument.  Call simplify_const_relational_operation.
+ 	(simplify_gen_relational): Update simplify_relational_operation call.
+ 	(simplify_ternary_operation): Update simplify_relational_operation
+ 	subroutine call to use simplify_const_relational_operation instead.
+ 
+ 	* rtl.h (simplify_const_relational_operation): Prototype here.
+ 	(simplify_relational_operation): Add addtional mode argument.
+ 
+ 	* combine.c (combine_simplify_rtx): Update calls to
+ 	simplify_relational_operation.
+ 	(simplify_set): Likewise.
+ 	(gen_binary): Likewise.
+ 	* cse.c (fold_rtx): Likewise.
+ 	* dojump.c (compare_from_rtx): Likewise.
+ 	(do_compare_rtx_and_jump): Likewise.
+ 	* integrate.c (subst_constants): Likewise.
+ 	* unroll.c (simplify_cmp_and_jump_insns): Likewise.
+ 
+ 2004-03-09  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/m32r/m32r.md: Remove all define_peephole's.
+ 
+ 2004-03-09  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* config/rs6000/rs6000.md: Remove trailing whitespace.
+ 
+ 2004-03-08  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* Makefile.in (site.exp): Add libiconv variable definition.
+ 
+ 2004-03-09  Hans-Peter Nilsson  <hp@axis.com>
+ 
+ 	* configure: Regenerate for config/accross.m4 correction.
+ 
+ 2004-03-08  Joel Sherrill  <joel@oarcorp.com>
+ 
+ 	PR target/14480
+ 	* config/rs6000/t-rtems: Add missing file on branch.
+ 
+ 2004-03-08  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	PR middle-end/14289
+ 	* c-typeck.c (c_mark_addressable): A register variable should
+ 	be considered global if its not automatic, i.e. TREE_PUBLIC,
+ 	TREE_STATIC or DECL_EXTERNAL.
+ 	* function.c (put_var_into_stack): Call abort when placing a
+ 	hard register into the stack, if x_parm_reg_stack_loc is NULL.
+ 
+ 2004-03-08  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390.md ("*extendqidi2_short_displ"): Add CC clobber.
+ 	("*extendqisi2_short_displ"): Likewise.
+ 
+ 2004-03-08  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/pdp11/pdp11.c (comparison_operator_index): Remove.
+ 	(comp_operator): Likewise.
+ 	* config/pdp11/pdp11-protos.h: Remove corresponding
+ 	prototypes.
+ 
+ 2004-03-08  Eric Botcazou  <ebotcazou@act-europe.fr>
+ 
+ 	* expr.c (highest_pow2_factor_for_type): Rename into
+ 	highest_pow2_factor_for_target.  Use DECL_ALIGN instead of
+ 	TYPE_ALIGN when the target is a COMPONENT_REF.
+ 	(expand_assignment): Ajust call to highest_pow2_factor_for_type.
+ 
+ 2004-03-08  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* config/rs6000/rs6000.c: Formatting fix.
+ 	(legitimate_offset_address_p): Correct offset range check.
+ 
+ 	* config/rs6000/rs6000.c (rs6000_override_options): Don't override
+ 	-msoft-float by -mcpu.  Consolidate similar code for MASK_MULTIPLE
+ 	and MASK_STRING.
+ 
+ 2004-03-07  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* config/rs6000/rs6000.md (ashrdi3): Do not call ashrdi3_no_power
+ 	for little endian.
+ 	("ashrdi3_no_power"): Disable for little endian.
+ 	(ashrdi3): Same.
+ 
+ 2004-03-07  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+ 
+ 	* fold-const.c (tree_expr_nonnegative_p): Reformat checks for
+ 	builtins.
+ 
+ 2004-03-08  Hans-Peter Nilsson  <hp@axis.com>
+ 
+ 	PR target/14471
+ 	* configure.ac (Target-specific assembler checks) <cris-*-*>: New
+ 	case, checking for -no-mul-bug-abort option.
+ 	* configure, config.in: Regenerate.
+ 	* doc/invoke.texi (CRIS Options): Document -mmul-bug-workaround
+ 	and -mno-mul-bug-workaround.
+ 	* config/cris/cris.md ("smulsi3_highpart", "umulsi3_highpart")
+ 	("mulsidi3", "umulsidi3"): Prefix output template with "%!".
+ 	("umulhisi3", "umulqihi3", "mulsi3", "mulqihi3", "mulhisi3"):
+ 	Ditto.  Make attribute "slottable" dependent on TARGET_MUL_BUG.
+ 	* config/cris/mulsi3.asm (__Mul) [__CRIS_arch_version >= 10]: Make
+ 	sure mulu.d is not last on cache-line.
+ 	* config/cris/cris.h (ASM_SPEC): Translate -mno-mul-bug-workaround
+ 	into -no-mul-bug-abort depending on HAVE_AS_MUL_BUG_ABORT_OPTION.
+ 	(TARGET_MASK_MUL_BUG, TARGET_MUL_BUG): New macros.
+ 	(TARGET_SWITCHES): New options -mmul-bug-workaround and
+ 	-mno-mul-bug-workaround.
+ 	(TARGET_DEFAULT): Include TARGET_MASK_MUL_BUG.
+ 	(PRINT_OPERAND_PUNCT_VALID_P): Include '!'.
+ 	* config/cris/cris.c (cris_operand_extend_operator): Clarify
+ 	relation to MULT in head comment.
+ 	(cris_op_str): Abort for MULT.
+ 	(cris_print_operand) <case '!'>: New case.
+ 
+ 2004-03-08  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	PR debug/11983
+ 	* dwarf2out.c (enum dw_val_class): Rename dw_val_class_float to
+ 	dw_val_class_vec.  Replace use throughout file.
+ 	(dw_float_const): Delete.
+ 	(dw_vec_const): New.
+ 	(dw_val_struct_union): Rename val_float to val_vec.  Replace use
+ 	throughout file.
+ 	(add_AT_vec): Rename from add_AT_float.  Add elt_size param.
+ 	(same_dw_val_p): Adjust vec comparison.  Use memcmp.
+ 	(size_of_die): Adjust dw_val_class_vec sizing.
+ 	(output_die): Output dw_val_class_vec.
+ 	(insert_int, extract_int, insert_float): New functions.
+ 	(add_const_value_attribute): Use insert_float for CONST_DOUBLE.
+ 	Handle CONST_VECTOR.
+ 	(add_location_or_const_value_attribute): Handle CONST_VECTOR.
+ 
+ 2004-03-07  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_parse_abi_options): SPE and
+ 	AltiVec abi cannot co-exist.
+ 
+ 	* config/rs6000/eabispe.h (SUBSUBTARGET_OVERRIDE_OPTIONS): Same.
+ 
+ 2004-03-07  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* except.c (emit_to_new_bb_before):  Break fallthru edges.
+ 
+ 2004-03-07  Stephane Carrez  <stcarrez@nerim.fr>
+ 
+ 	* config/m68hc11/m68hc11.md ("*lshrsi3_const"): Disable for 68HC12.
+ 	("*lshrsi3"): Also accept an immediate for 68HC12.
+ 	("*ashrsi3_const"): Likewise.
+ 	("*ashrsi3"): Likewise.
+ 	("*ashlsi3_const"): Likewise.
+ 	("*ashlsi3"): Likewise.
+ 	("cmphi_1_hc12"): Compare two hard register by pushing them and
+ 	comparing with a pop; don't use a split for that.
+ 	("cmphi split"): Disable compare split for 68HC12.
+ 
+ 	* config/m68hc11/m68hc11.c (m68hc11_notice_update_cc): Invalidate
+ 	the status operands if they have side effects.
+ 
+ 2004-03-07  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* defaults.h (LEGITIMIZE_ADDRESS): Provide a default
+ 	definition.
+ 	* config/arc/arc.h, config/fr30/fr30.h, config/frv/frv.h,
+ 	config/h8300/h8300.h, config/ia64/ia64.h,
+ 	config/mcore/mcore.h, config/mmix/mmix.h,
+ 	config/ns32k/ns32k.h, config/pdp11/pdp11.h,
+ 	config/stormy16/stormy16.h, config/v850/v850.h,
+ 	config/vax/vax.h (LEGITIMIZE_ADDRESS): Remove.
+ 	* doc/tm.texi (LEGITIMIZE_ADDRESS): Mention the default
+ 	definition.
+ 
+ 2004-03-07  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* fold-const.c (fold) <IOR_EXPR>: Fold x | x as x.
+ 	<XOR_EXPR>: Fold x ^ x as zero.
+ 	<AND_EXPR>: Fold x & x as x.
+ 
+ 2004-03-07  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* fold-const.c (fold) <EQ_EXPR>: Rewrite optimization to transform
+ 	"foo++ == const" into "++foo == const+incr".
+ 
+ 2004-03-07  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.c (mips_in_small_data_p): Return false if
+ 	TARGET_ABICALLS.
+ 
+ 2004-03-06  Stephane Carrez  <stcarrez@nerim.fr>
+ 
+ 	* config/m68hc11/m68hc11.c (m68hc11_gen_movhi): Use 2,-sp to push
+ 	the stack register.
+ 	(expand_prologue): Don't make an interrupt or a trap handler a far
+ 	symbol.
+ 	(m68hc11_initial_elimination_offset): Likewise.
+ 
+ 2004-03-06  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/alpha/alpha.c (alpha_in_small_data_p): False for functions.
+ 
+ 2004-03-06  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/ns32k/ns32k-protos.h: Add a prototype for
+ 	ns32k_notice_update_cc.
+ 	* config/ns32k/ns32k.c (ns32k_notice_update_cc): New.
+ 	* config/ns32k/ns32k.h (NOTICE_UPDATE_CC): Call
+ 	ns32k_notice_update_cc.
+ 
+ 2004-03-06  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390.md ("load_multiple", "*load_multiple_di",
+ 	"*load_multiple_si"): Allow only if reload_completed.
+ 	("store_multiple", "*store_multiple_di", "*store_multiple_si"):
+ 	Likewise.
+ 
+ 2004-03-06  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/vax/vax-protos.h: Add a prototype for
+ 	vax_notice_update_cc.
+ 	* config/vax/vax.c (vax_notice_update_cc): New.
+ 	* config/vax/vax.h (NOTICE_UPDATE_CC): Call
+ 	vax_notice_update_cc.
+ 
+ 2004-03-06  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* collect2.c (main): Only export initfunc and finifunc if
+ 	LD_INIT_SWITCH not defined.
+ 	(scan_prog_file): Only export constructors and destructors if
+ 	LD_INIT_SWITCH not defined.  Only export symbols not found in
+ 	shared objects.
+ 
+ 2004-03-06  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	* pa.md (icacheflush): Reorder operands to make match_scratch operand
+ 	last.
+ 	* pa.h (INITIALIZE_TRAMPOLINE): Remove unnecessary scratch argument
+ 	from calls to gen_icacheflush.
+ 
+ 2004-03-06  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/alpha/alpha.h (MASK_LONG_DOUBLE_128): New.
+ 	(TARGET_LONG_DOUBLE_128): New.
+ 	(TARGET_SWITCHES): Add long-double-{128,64}.
+ 	(TARGET_HAS_XFLOATING_LIBS): Default to TARGET_LONG_DOUBLE_128.
+ 	(LONG_DOUBLE_TYPE_SIZE): Honor TARGET_LONG_DOUBLE_128.
+ 	(LIBGCC2_LONG_DOUBLE_TYPE_SIZE): New.
+ 	(WIDEST_HARDWARE_FP_SIZE): New.
+ 	(TARGET_CPU_CPP_BUILTINS): Define __LONG_DOUBLE_128__.
+ 	* config/alpha/alpha.c (override_options): Clear MASK_LONG_DOUBLE_128
+ 	if TARGET_VAX_FLOAT.
+ 	* config/alpha/osf5.h (LONG_DOUBLE_TYPE_SIZE): Remove.
+ 	(TARGET_DEFAULT): Set MASK_LONG_DOUBLE_128.
+ 
+ 2004-03-06  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/alpha/alpha.c (alpha_swapped_comparison_operator): Fix
+ 	botched rtx class conversion.
+ 
+ 2004-03-06  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+ 
+ 	* tree.h (BUILTIN_EXP10_P, BUILTIN_EXPONENT_P, BUILTIN_SQRT_P,
+ 	BUILTIN_CBRT_P, BUILTIN_ROOT_P): New macros.
+ 
+ 	* builtins.c (fold_builtin_logarithm, fold_builtin): Use new
+ 	macros.
+ 	* fold-const.c (fold_mathfn_compare, fold): Likewise.
+ 
+ 2004-03-06  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR target/14343
+ 	* config/i386/i386.md (movv2di_internal): Conditionalize on
+ 	TARGET_SSE, not TARGET_SSE2.
+ 
+ 2004-03-05  Chris Demetriou  <cgd@broadcom.com>
+ 
+ 	* config.gcc (mips64orion-*-elf*, mips64orionel-*-elf*): Delete
+ 	duplicated line.
+ 
+ 2004-03-05  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+ 
+ 	* builtins.c: Consistently use logN not log* in comments.
+ 
+ 2004-03-05  Andreas Krebbel  <krebbel1@de.ibm.com>
+ 
+ 	* rtl.h (mem_expr_equal_p): Function prototype added.
+ 	* cfgcleanup.c (merge_memattrs): New function.
+ 	(flow_find_cross_jump): Call merge_memattrs for matching insns.
+ 	* emit-rtl.c (mem_expr_equal_p): New function.
+ 
+ 2004-03-05  Ziemowit Laski  <zlaski@apple.com>
+ 
+ 	* objc/objc-act.c (synth_module_prologue): Const-qualify
+ 	objc_selector type if using the GNU runtime; fix generated
+ 	signatures for objc_msg_lookup and objc_msg_lookup_super
+ 	to match what GNU ObjC headers provide; reformat and clean up.
+ 	(synth_self_and_ucmd_args): Use previously constructed (and
+ 	hence possibly const-qualified) objc_selector type.
+ 
+ 2004-03-05  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* doc/tm.texi (HARD_REGNO_RENAME_OK): Document.
+ 
+ 2004-03-05  Jason Merrill  <jason@redhat.com>
+ 
+ 	* tree.h (TYPE_HASH): Use TYPE_UID.
+ 	(TREE_HASH): New macro with old definition of TYPE_HASH.
+ 	* tree.c (build_type_attribute_variant): Use iterative_hash_object.
+ 	(build_array_type, build_function_type): Likewise.
+ 	(build_method_type_directly): Likewise.
+ 	(build_offset_type, build_complex_type): Likewise.
+ 	(type_hash_list, attribute_hash_list): Likewise. Now static.
+ 	* except.c: s/TYPE_HASH/TREE_HASH/.
+ 
+ 2004-03-05  Bob Wilson  <bob.wilson@acm.org>
+ 
+ 	* config/xtensa/xtensa.c (function_arg): Handle 16-byte aligned args.
+ 	(xtensa_va_start): Initialize __va_stk to ($arg_ptr - 32).  Adjust
+ 	__va_ndx by 2 words when referencing an argument on the stack.
+ 	(xtensa_va_arg): Handle 16-byte aligned args.  Adjust __va_ndx by 2
+ 	words when an arg on the stack is first seen.
+ 
+ 2004-03-05  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* arm.h (ARM_FLAG_VFP): Remove.
+ 	(ARM_FLAG_ATPCS, CIRRUS_FIX_INVALID_INSNS): Renumber.
+ 	* netbsd-elf.h (ARM_FLAG_VFP): Remove.
+ 
+ 2004-03-05  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* function.c (assign_parms): Include pretend alignment offset.
+ 
+ 2004-03-05  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* stor-layout.c (layout_type, case FUNCTION_TYPE): Make size
+ 	FUNCTION_BOUNDARY, not POINTER_SIZE * 2.
+ 
+ 2004-03-05  Ian Lance Taylor  <ian@wasabisystems.com>
+ 
+ 	* configure.ac: When passing --enable-languages to subdir
+ 	configure when host != build, make sure we don't pass an empty
+ 	value.
+ 	* configure: Regenerate.
+ 
+ 2004-03-05  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	PR 13577
+ 	* gcc.c (cc1_options): Robustify -auxbase-strip from multiple -o
+ 	options.
+ 
+ 2004-03-05  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* simplify-rtx.c (simplify_relational_operation): If
+ 	flag_wrapv is set, do not move terms between the two
+ 	side of a relational operator.
+ 
+ 2004-03-05  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* rtlanal.c: Include target.h and output.h
+ 	(rtx_cost, address_cost, default_address_cost): Move from...
+ 	* cse.c (rtx_cost, address_cost, default_address_cost):
+ 	... this file.
+ 	* rtl.h (rtx_cost, address_cost): Move under rtlanal.c.
+ 	* Makefile.in: Adjust dependencies.
+ 
+ 2004-03-05  Paolo Bonzini <bonzini@gnu.org>
+ 
+ 	* cse.c (cse_end_of_basic_block): Make static.
+ 	* local-alloc.c (function_invariant_p): Move to
+ 	reload1.c.
+ 	* loop.c (libcall_other_reg, record_excess_regs):
+ 	Make static.
+ 	* reload1.c (function_invariant_p): Moved here
+ 	from local-alloc.c, made static.
+ 	* rtl.h (cse_end_of_basic_block, function_invariant_p,
+ 	libcall_other_reg, record_excess_regs): Remove
+ 	declarations.
+ 
+ 2004-03-05  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/m32r/m32r.c (signed_comparison_operator): Add a
+ 	missing parenthesis.
+ 
+ 2004-03-04  Ian Lance Taylor  <ian@wasabisystems.com>
+ 
+ 	* ggc-common.c (gt_pch_restore): Don't unmap addr unless we are
+ 	going to call mmap again.  Read the file into the right place.
+ 	Give a fatal error if we have to relocate.
+ 
+ 2004-03-04  Bob Wilson  <bob.wilson@acm.org>
+ 
+ 	* config/xtensa/xtensa.c (xtensa_return_in_msb): New function.
+ 	(TARGET_RETURN_IN_MSB): Define to xtensa_return_in_msb.
+ 
+ 2004-03-05  Hans-Peter Nilsson  <hp@axis.com>
+ 
+ 	PR other/14354
+ 	* config/fp-bit.c (_fpdiv_parts): Do not round when pack_d would
+ 	round the same.  When rounding, clear bits that would cause a
+ 	second rounding in pack_d.
+ 	(_fpmul_parts): Ditto.  Remove #if 0:d code.
+ 
+ 2004-03-04  Ziemowit Laski  <zlaski@apple.com>
+ 
+ 	PR c++/14425, c++/14426
+ 	* config/rs6000/altivec.h (vec_splat_s8, vec_splat_s16,
+ 	vec_splat_s32, vec_splat_u8, vec_splat_u16, vec_splat_u32):
+ 	Change C++ definitions to accept a 'const int' argument;
+ 	the prototypes already do.
+ 	* config/rs6000/rs6000.c (rs6000_common_init_builtins):
+ 	Rename v4si_ftype_char, v8hi_ftype_char, v16qi_ftype_char,
+ 	v4sf_ftype_v4si_char, v4si_ftype_v4sf_char, v4si_ftype_v4si_char,
+ 	v8hi_ftype_v8hi_char, v16qi_ftype_v16qi_char,
+ 	v16qi_ftype_v16qi_v16qi_char, v8hi_ftype_v8hi_v8hi_char,
+ 	v4si_ftype_v4si_v4si_char and v4sf_ftype_v4sf_v4sf_char to
+ 	end in ..._int; change them to accept an int instead of a char
+ 	as the last parameter.
+ 
+ 2004-03-04  Phil Edwards  <phil@codesourcery.com>
+ 
+ 	* genmultilib:  Change '=' to '-' when translating option names
+ 	to directory names.
+ 
+ 2004-03-04  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* expr.c (expand_expr_real, case COMPONENT_REF): Get proper type of
+ 	stack slot for temp used for result of BLKmode but in integral mode.
+ 
+ 2004-03-04  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* reload.c (find_reloads): Reorganize if seqeunce to switch.
+ 
+ 	* cfgrtl.c (rtl_redirect_edge_and_branch):  Set the source BB as dirty.
+ 	(cfglayout_redirect_edge_and_branch):  Set the source BB as dirty.
+ 
+ 2004-03-04  Steve Ellcey  <sje@cup.hp.com>
+ 
+ 	* config/ia64/ia64.md (divdf3_internal_thr): Fix algorithm.
+ 	* testsuite/gcc.dg/20040303-1.c: New test.
+ 
+ 2004-03-04  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* ppro.md: Rewrite as a DFA pipeline description.
+ 	* i386.md: Remove all uses of the ppro_uops attribute.
+ 	* i386.c: (ix86_safe_ppro_uops, ix86_dump_ppro_packet,
+ 	ix86_reorder_insn, ix86_sched_reorder_ppro, ix86_sched_init,
+ 	ix86_sched_reorder, ix86_variable_issue,
+ 	struct ix86_sched_data, TARGET_SCHED_VARIABLE_ISSUE,
+ 	TARGET_SCHED_INIT, TARGET_SCHED_REORDER): Remove.
+ 	(ia32_use_dfa_pipeline_interface): Add TARGET_PENTIUMPRO.
+ 	(ia32_multipass_dfa_lookahead): Add TARGET_PENTIUMPRO.
+ 	* athlon.md (athlon_ssecmp_load): Fix comment
+ 
+ 2004-03-04  Stuart Hastings  <stuart@apple.com>
+ 
+ 	* gcc/doc/invoke.texi: Document -mlongcall for Darwin/PPC.
+ 
+ 2004-03-04  Stuart Hastings  <stuart@apple.com>
+ 
+ 	* gcc/config/i386/darwin.h: Darwin/x86 doesn't support CPUs before
+ 	686, tell Darwin assembler to allow prefetch insns, non-empty def
+ 	of SUBTARGET_OPTION_TRANSLATE_TABLE.
+ 
+ 2004-03-04  DJ Delorie  <dj@redhat.com>
+ 
+ 	PR optimization/14282
+ 	* sched-deps.c (sched_analyze_insn): Allow a stack adjustment
+ 	between a call and the assignment of its return value.
+ 
+ 2004-03-04  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300.c: Put a comment for every function.
+ 
+ 2004-03-04  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300.md: Add comments about peephole2's.
+ 
+ 2004-03-04  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* i386.h (TARGET_CPU_DEFAULT_nocona): Fix value.
+ 
+ 2004-03-04  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* cfgcleanup.c (thread_jump): Update call of cselib_init.
+ 	* cselib.c (cselib_record_memory): New static variable.
+ 	(cselib_lookup_mem, cselib_record_set, cselib_record_sets):
+ 	Give up on memories when asked for.
+ 	(cselib_init): Accept new argument.
+ 	* cselib.h (cselib_init): Update prototype.
+ 	* gcse.c (local_cprop_pass): Update call of cselib_init.
+ 	* loop.c (load_mems): Update call of cselib_init.
+ 	* postreload.c (reload_cse_regs_1): Update call of cselib_init.
+ 	* sched-deps.c (sched_analyze): Update call of cselib_init.
+ 
+ 2004-03-04  David Edelsohn  <edelsohn@gnu.org>
+ 	    GP <gp@qnx.com>
+ 
+ 	* config/rs6000/rs6000.c (output_function_profiler): Append @plt
+ 	when compiling PIC.
+ 
+ 2004-03-04  Josef Zlomek  <zlomekj@suse.cz>
+ 
+ 	PR/14362
+ 	* var-tracking.c (track_expr_p): Do not track variables which
+ 	should be ignored for debugging purposes.
+ 
+ 2004-03-04  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* real.c (encode_ibm_extended): Don't bother rounding low double.
+ 	* c-cppbuiltin.c (builtin_define_float_constants): Tweak MAX
+ 	when fmt->pnan < fmt->p.
+ 
+ 2004-03-04  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* config/mips/mips.h (FUNCTION_ARG_REGNO_P): Fix to check
+ 	only range of valid arg registers and fixed_regs.
+ 
+ 2004-03-04  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	PR target/14406
+ 	* config/rs6000/rs6000.md (abstf2, abstf2+1): Delete define_insn.
+ 	(abstf2, abstf2_internal): New define_expand.
+ 
+ 2004-03-04  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR optimization/14235
+ 	* expr.c (convert_move): Copy the source to a new pseudo
+ 	when converting from a sub-word source to a larger-than-word
+ 	register which conflicts with the source.
+ 
+ 2004-03-03  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	PR 13728
+ 	* c-decl.c (diagnose_mismatched_decls): Issue an error for two
+ 	parameters with the same name, unless one is a forward decl.
+ 	Do not issue a redundant-redeclaration warning for forward
+ 	decls of parameters.
+ 
+ 2004-03-04  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* doc/install.texi (*-ibm-aix*): Document use of Bash to speed up
+ 	configuration.
+ 
+ 2004-03-03  Ian Lance Taylor  <ian@wasabisystems.com>
+ 
+ 	* ggc-zone.c (ggc_pch_write_object): Don't align file pointer.
+ 
+ 2004-03-04  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* target-def.h (TARGET_OPTF): Delete.
+ 	* c-opts.c (TARGET_OPTF): Define.
+ 
+ 2004-03-04  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* cselib.c (cselib_finish): Fix another miss-application of my previous
+ 	patch.
+ 
+ 2004-03-03  Mike Stump  <mrs@apple.com>
+ 
+ 	Add framework support for darwin.
+ 
+ 	* c-incpath.c: Include target.h and machmode.h.
+ 	(add_path): Use a consistent style for cpp_dir.  Initialize
+ 	p->construct to 0.
+ 	(add_cpp_dir_path): New.
+ 	(register_include_chains): Add use of extra_includes callback.
+ 	(hook_void_int): Add.
+ 	(target_c_incpath): Add.
+ 	* c-incpath.h (add_cpp_dir_path): New.
+ 	(target_c_incpath_s): Add.
+ 	(target_c_incpath): Add.
+ 	(C_INCPATH_INIT): Add.
+ 	* c-opts.c (c_common_missing_argument,
+ 	c_common_handle_option): Add -F argument processing.
+ 	* c.opt: Add -F argument processing.
+ 	* gcc.c (trad_capable_cpp): Add -F argument processing.
+ 	* cppfiles.c (find_file_in_dir): Update to use construct
+ 	callback.
+ 	(search_path_exhausted, cpp_get_path, cpp_get_buffer,
+ 	cpp_get_prev): New.
+ 	(_cpp_find_file): Use search_path_exhausted.
+ 	(make_cpp_dir): Initialize construct to 0.
+ 	* cpplib.h (missing_header_cb
+ 	cpp_get_path, cpp_get_buffer, cpp_get_file, cpp_get_prev): New.
+ 	(cpp_callbacks): Add missing_header
+ 	(cpp_dir): Add construct.
+ 	* target-def.h: (TARGET_OPTF): New.
+ 	* hooks.c (hook_void_int, hook_void_charptr): Add.
+ 	* hooks.h (hook_void_int, hook_void_charptr): Add.
+ 	* Makefile.in (c-incpath.o) : Add $(TARGET_H) and
+ 	$(MACHMODE_H) dependencies.
+ 	* doc/invoke.texi (Darwin Options): Document -F.
+ 	* doc/tm.texi (TARGET_EXTRA_INCLUDES): Add.
+ 	(TARGET_OPTF): Add.
+ 	* fix-header.c (target_c_incpath): Add.
+ 
+ 	* config/darwin-c.c: Add c-incpath.h include.
+ 	(using_frameworks, find_subframework_file,
+ 	find_subframework_header, add_system_framework_path,
+ 	frameworks_in_use, num_frameworks, max_frameworks,
+ 	add_framework, find_framework, struct framework_header,
+ 	framework_header_dirs, framework_construct_pathname,
+ 	find_subframework_file, add_system_framework_path,
+ 	add_framework_path, framework_defaults,
+ 	darwin_register_frameworks, find_subframework_header): Add.
+ 	* config/darwin.h (TARGET_EXTRA_INCLUDES, TARGET_OPTF): New.
+ 	(TARGET_OPTION_TRANSLATE_TABLE): Add -framework support.
+ 	(CPP_SPEC): Add __APPLE_CC__ support.
+ 	* t-darwin (darwin-c.o): Add c-incpath.h dependency.
+ 
+ 2004-03-04  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* cselib.c (cselib_finish): Fix miss-application of my previous
+ 	patch.
+ 
+ 2004-03-03  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* hooks.c (hook_tree_tree_identity): New.
+ 	* hooks.h: Add a prototype for hook_tree_tree_identity.
+ 	* stmt.c (expand_asm_operands): Use targetm.md_asm_clobbers
+ 	instead of MD_ASM_CLOBBERS.
+ 	* system.h (MD_ASM_CLOBBERS): Poison.
+ 	* target-def.h (TARGET_MD_ASM_CLOBBERS): New.
+ 	(TARGET_INITIALIZER): Add TARGET_MD_ASM_CLOBBERS.
+ 	* target.h (gcc_target): Add md_asm_clobbers.
+ 	* config/i386/i386.c (TARGET_MD_ASM_CLOBBERS): New.
+ 	(ix86_md_asm_clobbers): New.
+ 	* config/i386/i386.h (MD_ASM_CLOBBERS): Remove.
+ 	* doc/tm.texi (MD_ASM_CLOBBERS): Change to
+ 	TARGET_MD_ASM_CLOBBERS.
+ 
+ 2004-03-03  Stuart Hastings  <stuart@apple.com>
+ 
+ 	* gcc/config.gcc: Arrange for Darwin/x86 to build libgcc_eh.a.
+ 
+ 2004-03-03  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* config/sparc/sparc.c (noov_compare64_op): Fix typo.
+ 
+ 	* config/sparc/sparc.h (ASM_FLOAT): Delete.
+ 	(ASM_DOUBLE): Likewise.
+ 	(ASM_LONGDOUBLE): Likewise.
+ 	* config/sparc/pbd.h (ASM_INT_OP): Delete.
+ 
+ 2004-03-03  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR opt/13862
+ 	* cselib.c (cselib_record_sets): Don't record multiple sets in
+ 	asm insns.
+ 
+ 2004-03-03  Mostafa Hagog  <mustafa@il.ibm.com>
+ 
+ 	* common.opt: Add description of the new -fgcse-after-reload flag.
+ 
+ 	* flags.h (flag_gcse_after_reload): Declaration of global variable.
+ 
+ 	* gcse.c (reg_used_on_edge ,reg_set_between_after_reload_p,
+ 	reg_used_between_after_reload_p, rtx get_avail_load_store_reg,
+ 	is_jump_table_basic_block, bb_has_well_behaved_predecessors,
+ 	get_bb_avail_insn, hash_scan_set_after_reload,
+ 	compute_hash_table_after_reload, eliminate_partially_redundant_loads,
+ 	gcse_after_reload, get_bb_avail_insn): New functions to implement
+ 	gcse-after-reload.
+ 	(gcse_after_reload_main): New function, the main entry point to
+ 	gcse-after-reload.
+ 
+ 	* rtl.h (gcse_after_reload_main): Declaration of the new function.
+ 
+ 	* opts.c (common_handle_option): Handle the -fgcse-after-reload flag.
+ 
+ 	* toplev.c (flag_gcse_after_reload): Initialization.
+ 
+ 	* passes.c (rest_of_handl_gcse2): Call gcse_after_reload_main.
+ 
+ 	* params.def (PARAM_GCSE_AFTER_RELOAD_PARTIAL_FRACTION,
+ 	PARAM_GCSE_AFTER_RELOAD_CRITICAL_FRACTION): New parameters for tuning
+ 	the gcse after reload optimization.
+ 
+ 	* params.h (GCSE_AFTER_RELOAD_PARTIAL_FRACTION,
+ 	GCSE_AFTER_RELOAD_CRITICAL_FRACTION): Two macros to access the tuning
+ 	parameters.
+ 
+ 	* doc/invoke.texi: Documentation for the new flag gcse-after-reload.
+ 
+ 2004-03-03  Nicolas Pitre <nico@cam.org>
+ 
+ 	* config/arm/ieee754-df.S (muldf3, divdf3): Fix denormalization of
+ 	small negative values.
+ 
+ 2004-03-03  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* cselib.c (hash_table):  Remove GTY marker.
+ 	(reg_values): Turn into array.
+ 	(used_regs): Likewise.
+ 	(n_used_regs): New static variable.
+ 	(reg_values_old): Kill.
+ 	(clear_table): Update uses of arrays.
+ 	(cselib_lookup): Likewise.
+ 	(cselib_record_set): Likewise.
+ 	(cselib_init): Likewise.
+ 	(cselib_finish): Likewise.
+ 	(cselib_udpate_varray_sizes): Kill.
+ 	* cselib.h (cselib_update_varray_sizes): Kill.
+ 
+ 2004-03-03  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* flow.c (ior_reg_cond, and_reg_cond): Remove stray ")".
+ 
+ 2004-03-03  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* ggc-common.c (ggc_alloc_cleared_stat, ggc_realloc_stat):
+ 	Rename from ...; make statistics transparent.
+ 	(ggc_alloc_cleared, ggc_realloc_stat): ... these.
+ 	(loc_descriptor): New structure.
+ 	(hash_descriptor, eq_descriptor, loc_descriptor, cmp_statistics,
+ 	add_statistics):
+ 	New static function.
+ 	(ggc_record_overhead, dump_statistics): New global function.
+ 	* ggc-none.c (ggc_alloc_types_stat, ggc_alloc_stat, ggc_alloc_zone_stat,
+ 	ggc_alloc_cleared_stat, ggc_realloc_stat, ggc_alloc_typed_stat): Rename
+ 	from ...; accept locations
+ 	(ggc_alloc_types, ggc_alloc, ggc_alloc_zone, ggc_alloc_cleared,
+ 	ggc_realloc, ggc_alloc_typed):  ... this one.
+ 	from ...; accept locations
+ 	* ggc-page.c (ggc_alloc_typed_stat, ggc_alloc_zone_stat,
+ 	ggc_alloc_stat): Rename from ... ; pass locations
+ 	* ggc-page.c (ggc_alloc_typed, ggc_alloc_zone, ggc_alloc):
+ 	... this one.
+ 	(ggc_alloc_stat): Record overehead.
+ 	* ggc.h (ggc_alloc_types, ggc_alloc, ggc_alloc_zone, ggc_alloc_cleared,
+ 	ggc_realloc, ggc_alloc_typed):  Turn to macros
+ 	(ggc_alloc_types_stat, ggc_alloc_stat, ggc_alloc_zone_stat,
+ 	ggc_alloc_cleared_stat, ggc_realloc_stat, ggc_alloc_typed_stat): Declare.
+ 	(dump_ggc_loc_satistics, ggc_record_overehead): Declare.
+ 	* langhooks.h (lhd_make_node): Declare.
+ 	(LANG_HOOKS_MAKE_TYPE): Default to new function,
+ 	* langhooks.c (lhd_make_node): New.
+ 	* rtl.c (rtx_alloc_stat, swallow_copy_rtx_stat): Rename from ... ; pass
+ 	locations.
+ 	(rtx_alloc, swallow_copy_rtx): ... this one.
+ 	* rtl.h (rtx_alloc, swallow_copy_rtx): Turn to macros.
+ 	* rtl.c (rtx_alloc_stat, swallow_copy_rtx_stat): Declare.
+ 	* toplpev.c (finalize): Dump stats.
+ 	* tree.c (make_node_stat, copy_node_stat, make_tree_vec_stat,
+ 	build_tree_list_stat, tree_cons_stat, build?_stat,  build_decl_stat):
+ 	Rename from ... ; pass locators.
+ 	(make_node, copy_node, make_tree_vec, build_tree_list, tree_cons,
+ 	build?,  build_decl): Declare.
+ 	* tree.h (make_node_stat, copy_node_stat, make_tree_vec_stat,
+ 	build_tree_list_stat, tree_cons_stat, build?_stat,  build_decl_stat):
+ 	Declare.
+ 	(make_node, copy_node, make_tree_vec, build_tree_list, tree_cons,
+ 	build?,  build_decl): New macros.
+ 	* Makefile.in (RTL_H, TREE_H): Add statistics.h dependency.
+ 	* statistics.h: New file.
+ 
+ 2004-03-03  Maciej W. Rozycki  <macro@ds2.pg.gda.pl>
+ 	    Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.h (MASK_FIX_SB1): Bump.
+ 	(MASK_FIX_R4400, TARGET_FIX_R4400): New macros.
+ 	(TARGET_SWITCHES): Add -mfix-r4400 and -mno-fix-r4400.
+ 	* config/mips/mips.c (mips_output_division): Fill the branch delay
+ 	slot with a nop if TARGET_FIX_R4000.  Extend R4000 workarounds to
+ 	TARGET_FIX_R4400.
+ 	(mips_output_division): Adjust accordingly.
+ 	(override_options): Make -march=r4400 imply -mfix-r4400 by default.
+ 	* doc/invoke.texi: Document -mfix-r4400 and new errata workarounds.
+ 
+ 2004-03-03  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* alias.c (rtx_equal_for_memref_p): Use predicates
+ 	to test rtx classes and new rtx class codes, possibly
+ 	splitting conditionals that tested against '<' and 'o'.
+ 	* caller-save.c (save_call_clobbered_regs): Likewise.
+ 	* combine.c (contains_muldiv, find_split_point, subst,
+ 	combine_simplify_rtx, simplify_if_then_else,
+ 	simplify_set, simplify_logical, expand_compound_operation,
+ 	make_compound_operation, if_then_else_cond, known_cond,
+ 	apply_distributive_law, cached_nonzero_bits,
+ 	cached_num_sign_bit_copies, simplify_shift_const,
+ 	gen_binary, simplify_comparison, update_table_tick,
+ 	record_value_for_reg, get_lsat_value_validate): Likewise.
+ 	* cse.c (mention_regs, find_best_addr, find_comparison_args,
+ 	fold_rtx, cse_insn, invalidate_memory, cse_basic_block):
+ 	Likewise.
+ 	* emit-rtl.c (copy_insn_1): Likewise.
+ 	* expr.c (force_operand): Likewise.
+ 	* final.c (final_scan_insn, get_mem_expr_from_op): Likewise.
+ 	* flow.c (notice_stack_pointer_modification_1,
+ 	invalidate_mems_from_autoinc, ior_reg_cond, not_reg_cond,
+ 	and_reg_cond, elim_reg_cond): Likewise.
+ 	* function.c (update_epilogue_consts): Likewise.
+ 	* genattrtab.c (attr_rtx_1): Likewise.
+ 	* genopinit.c (gen_insn): Likewise.
+ 	* integrate.c (subst_constants): Likewise.
+ 	* jump.c (reversed_comparison_code_parts,
+ 	reversed_comparison_code, delete_related_insns,
+ 	rtx_renumbered_equal_p): Likewise.
+ 	* local-alloc.c (block_alloc): Likewise.
+ 	* loop.c (rtx_equal_for_prefetch_p, maybe_eliminate_biv,
+ 	canonicalize_condition): Likewise.
+ 	* loop-iv.c (simplify_using_conditions, iv_number_of_iterations):
+ 	Likewise.
+ 	* optabs.c (add_equal_node, expand_binop): Likewise.
+ 	* predict.c (estimate_probability): Likewise.
+ 	* ra-debug.c (ra_print_rtx_2op, ra_print_rtx): Likewise.
+ 	* recog.c (validate_replace_rtx_1, comparison_operator,
+ 	offsettable_address_p, constrain_operands): Likewise.
+ 	* reg-stack.c (swap_rtx_condition_1, subst_stack_regs_pat):
+ 	Likewise.
+ 	* regclass.c (scan_one_insn): Likewise.
+ 	* regmove.c (stable_and_no_regs_but_for_p): Likewise.
+ 	* regrename.c (kill_autoinc_value): Likewise.
+ 	* reload.c (find_reusable_reload, find_reloads,
+ 	reg_overlap_mentioned_for_reload_p): Likewise.
+ 	* reload1.c (gen_reload, delete_address_reloads_1): Likewise.
+ 	* rtl.c (copy_rtx): Likewise.
+ 	* rtl.h (CONSTANT_P, INSN_P): Likewise.
+ 	* rtlanal.c (commutative_operand_precedence): Likewise.
+ 	* sched-deps.c (conditions_mutex_p): Likewise.
+ 	* sched-rgn.c (is_cfg_nonregular): Likewise.
+ 	* simplify-rtx.c (simplify_gen_binary,
+ 	simplify_gen_relational, simplify_replace_rtx,
+ 	simplify_unary_operation, simplify_binary_operation,
+ 	simplify_ternary_operation, simplify_rtx): Likewise.
+ 	* unroll.c (reg_dead_after_loop): Likewise.
+ 	* config/alpha/alpha.c (alpha_swapped_comparison_operator,
+ 	print_operand): Likewise.
+ 	* config/arc/arc.c (proper_comparison_operator): Likewise.
+ 	* config/arm/arm.c (arm_arm_address_cost, arm_select_cc_mode):
+ 	Likewise.
+ 	* config/avr/avr.c (_reg_unused_after): Likewise.
+ 	* config/frv/frv.c (frv_ifcvt_modify_tests,
+ 	frv_ifcvt_modify_insn, frv_pack_insn): Likewise.
+ 	* config/i386/i386.c (ix86_comparison_operator,
+ 	ix86_carry_flag_operator, fcmov_comparison_operator,
+ 	arith_or_logical_operator, print_operand,
+ 	ix86_expand_binary_operator, ix86_binary_operator_ok):
+ 	Likewise.
+ 	* config/i386/i386.md: Likewise.
+ 	* config/ia64/ia64.c (not_postinc_memory_operand,
+ 	ia64_print_operand, update_set_flags, errata_emit_nops):
+ 	Likewise.
+ 	* config/ia64/ia64.h (PREFERRED_RELOAD_CLASS,
+ 	CONSTRAINT_OK_FOR_S): Likewise.
+ 	* config/ip2k/ip2k.c (mdr_resequence_xy_yx,
+ 	mdr_try_move_dp_reload, ip2k_check_can_adjust_stack_ref,
+ 	ip2k_xexp_not_uses_reg_for_mem, ip2k_xexp_not_uses_reg_p,
+ 	ip2k_composite_xexp_not_uses_reg_p, ip2k_unary_operator):
+ 	Likewise.
+ 	* config/iq2000/iq2000.c (cmp_op, symbolic_expression_p,
+ 	eqne_comparison_operator, signed_comparison_operator):
+ 	Likewise.
+ 	* config/mips/mips.c (cmp_op, symbolic_expression_p):
+ 	Likewise.
+ 	* config/mmix/mmix (mmix_foldable_comparison_operator,
+ 	mmix_comparison_operator): Likewise.
+ 	* config/pa/pa.c (hppa_legitimize_address): Likewise.
+ 	* config/rs6000/rs6000.c (stmw_operation,
+ 	branch_comparison_operator, trap_comparison_operator,
+ 	ccr_bit): Likewise.
+ 	* config/rs6000/rs6000.h (SELECT_CC_MODE): Likewise.
+ 	* config/s390/s390.c (s390_alc_comparison,
+ 	s390_slb_comparison):L Likewise.
+ 	* config/sh/sh.c (gen_block_redirect, reg_unused_after):
+ 	Likewise.
+ 	* config/sparc/sparc.c (eq_or_neq, normal_comp_operator,
+ 	noov_compare_op, noov_compare64_op, v9_regcmp_op,
+ 	emit_hard_tfmode_operation, reg_unused_after)
+ 	* doc/md.texi, doc/rtl.texi: Likewise.
+ 
+ 	* ra-debug.c: Add 2004 to list of copyright years.
+ 	* unroll.c: Likewise.
+ 
+ 	* combine.c (simplify_logical): Remove dummy test,
+ 	(apply_distributive_law): Fix typo in comment.
+ 	GET_CODE (x) == AND so x is a commutative binary op.
+ 	* jump.c (delete_related_insns): simplify loop
+ 	condition, move testing of RTX codes inside the loop.
+ 	(rtx_renumbered_equal_p): do not use RTX_CODE.
+ 	* rtl.c (rtx_class): Declare as enum rtx_class.
+ 	* rtl.def (EQ, NE, UNEQ, LTGT, UNORDERED, ORDERED):
+ 	Move to RTX_COMM_COMPARE class.
+ 	(HIGH, SYMBOL_REF, LABEL_REF, CONST, CONST_INT, CONST_DOUBLE):
+ 	Move to RTX_CONST_OBJ class.
+ 	* rtl.h (enum rtx_class): New declaration,
+ 	(RTX_OBJ_MASK, RTX_OBJ_RESULT, RTX_COMPARE_MASK,
+ 	RTX_COMPARE_RESULT, RTX_ARITHMETIC_MASK, RTX_ARITHMETIC_RESULT,
+ 	RTX_BINARY_MASK, RTX_BINARY_RESULT, RTX_COMMUTATIVE_MASK,
+ 	RTX_COMMUTATIVE_RESULT, RTX_NON_COMMUTATIVE_RESULT,
+ 	RTX_EXPR_FIRST, RTX_EXPR_LAST, UNARY_P, BINARY_P,
+ 	ARITHMETIC_P, COMMUTATIVE_ARITHMETIC_P, COMPARISON_P,
+ 	SWAPPABLE_OPERANDS_P, NON_COMMUTATIVE_P, COMMUTATIVE_P,
+ 	OBJECT_P): New macros.
+ 	* config/sparc/sparc.c (noov_compare_op): Remove register
+ 	from parameter.
+ 
+ 2004-03-03  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* target.h: Remove texi jargons in comments.
+ 
+ 2004-03-02  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/lib1funcs.asm (___fixunssfsi): Change the
+ 	threshold to 0x4f.
+ 
+ 	Revert:
+ 	2004-02-27  Kazu Hirata  <kazu@cs.umass.edu>
+ 	* config/h8300/fixunssfsi.c (__fixunssfsi): Enable on H8/300
+ 	as well.
+ 	* config/h8300/lib1funcs.asm (___fixunssfsi): Remove.
+ 	* config/h8300/t-h8300 (LIB1ASMFUNCS): Remove _fixunssfsi_asm.
+ 
+ 2004-03-02  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* doc/md.texi (cbranchmode4): New.
+ 
+ 2004-03-02  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* config/mips/mips16.S: Change fixsfsi and fixdfsi to
+ 	fix_trunc.
+ 	* config/mips/mips.c (mips_init_libfuncs): Change accordingly.
+ 	* config/mips/t-elf (LIB1ASMFUNCS): Ditto.
+ 	* config/mips/t-isa3264 (LIB1ASMFUNCS): Ditto.
+ 	* config/mips/t-r3900 (LIB1ASMFUNCS): Ditto.
+ 
+ 2004-03-02  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR middle-end/11767
+ 	* coverage.c (coverage_counter_ref): Set MEM_NOTRAP_P.
+ 	* optabs.c (prepare_cmp_insn): Force trapping memories to registers
+ 	before the compare, if flag_non_call_exceptions.
+ 
+ 2004-03-02  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR middle-end/14327
+ 	* stmt.c (expand_computed_goto): Do do_pending_stack_adjust before
+ 	emitting the label, not after.
+ 
+ 2004-03-02  Stephane Carrez  <stcarrez@nerim.fr>
+ 
+ 	* config/m68hc11/m68hc11.c (m68hc11_addr_mode): New variable.
+ 	(m68hc11_mov_addr_mode): Likewise.
+ 	(m68hc11_override_options): Initialize them based on target.
+ 	(register_indirect_p): Allow a MEM for indirect addressing modes and
+ 	use flags to control what is allowed.
+ 	(m68hc11_small_indexed_indirect_p): Use m68hc11_mov_addr_mode for
+ 	supported addressing modes.
+ 	(m68hc11_register_indirect_p): Use m68hc11_addr_mode.
+ 	(go_if_legitimate_address_internal): Likewise.
+ 	(m68hc11_indirect_p): Likewise and check the mode.
+ 	(print_operand): Allow a (MEM (MEM)) and generate indirect addressing.
+ 
+ 2004-03-02  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* builtins.c (BUILTIN_SETJMP_FRAME_VALUE): Remove.
+ 	(expand_builtin_setjmp_setup): Use
+ 	targetm.builtin_setjmp_frame_value instead of
+ 	BUILTIN_SETJMP_FRAME_VALUE.
+ 	* system.h (BUILTIN_SETJMP_FRAME_VALUE): Poison.
+ 	* target-def.h (TARGET_BUILTIN_SETJMP_FRAME_VALUE): New.
+ 	(TARGET_INITIALIZER): Add TARGET_BUILTIN_SETJMP_FRAME_VALUE.
+ 	* target.h (gcc_target): Add builtin_setjmp_frame_value.
+ 	* targhooks.c (default_builtin_setjmp_frame_value): New.
+ 	* targhooks.h: Add a prototype for
+ 	default_builtin_setjmp_frame_value.
+ 	* doc/tm.texi (BUILTIN_SETJMP_FRAME_VALUE): Change to
+ 	TARGET_BUILTIN_SETJMP_FRAME_VALUE.
+ 
+ 2004-03-02  Stephane Carrez  <stcarrez@nerim.fr>
+ 
+ 	* config/m68hc11/m68hc11.md (move peephole2): New peepholes to optimize
+ 	sequences of moves.
+ 	(add peepholes): New peepholes to optimize sequences adding small
+ 	constants.
+ 	(bset peepholes): New peepholes to transform an OR in a bset form
+ 	(bclr peepholes): Likewise for bclr form.
+ 	(cmp peepholes): New peepholes to avoid register copies when comparing.
+ 
+ 2004-03-02  Stephane Carrez  <stcarrez@nerim.fr>
+ 
+ 	* config/m68hc11/m68hc11.md ("*pushdi_internal"): New insn and split
+ 	to separate push from moves.
+ 	("*pushdf_internal"): Likewise.
+ 	("*pushsf_internal"): Likewise.
+ 	("*pushsi_internal"): Likewise.
+ 	("movdi_internal"): Use define_insn_and_split; non push operand.
+ 	("movdf_internal"): Likewise.
+ 	("movsf_internal"): Likewise.
+ 	("movsi_internal"): Likewise.
+ 	("*movhi_68hc12", "*addhi3_68hc12"): Fix and tune constraints
+ 	("*addhi3", "*subhi3", "*andhi3_mem", "*iorhi3_mem"): Likewise.
+ 	("*ashlsi3_const1", "*lshrsi3_const1"): Likewise.
+ 
+ 2004-03-02  Stephane Carrez  <stcarrez@nerim.fr>
+ 
+ 	* config/m68hc11/m68hc11.md ("tstqi_z_used"): Use define_insn_and_split.
+ 	("cmphi_z_used", "cmpqi_z_used"): Likewise.
+ 	("movstrictsi", "movstricthi", "movstrictqi"): Likewise.
+ 	("anddi3", "andsi3", "iordi3", "iorsi3"): Likewise.
+ 	("xordi3", "xorsi3", "*logicalsi3_zexthi"): Likewise.
+ 	("*logicalsi3_zextqi", "*logicalhi3_zexthi_ashift8"): Likewise.
+ 	("logicalhi3_zexthi", "*logicalsi3_silshr16"): Likewise.
+ 	("*logicalsi3_silshl16", "*logicalsi3_silshl16_zext"): Likewise.
+ 	("*ashldi3_const32", "*ashldi3_const1", "addsi_silshr16"): Likewise.
+ 	("addsi_andshr16", "*ashlsi3_const16_zexthi"): Likewise.
+ 	("*lshrdi3_const32", "*lshrdi_const1"): Likewise.
+ 
+ 2004-03-02  Stephane Carrez  <stcarrez@nerim.fr>
+ 
+ 	* config/m68hc11/m68hc11.md (SOFT_TMP_REGNUM): Define.
+ 	(SOFT_XY_REGNUM): Define.
+ 	(cmp split): Use the above instead of hard coded numbers.
+ 	(8-bit op split): No need to check the mode; allow Q_REG.
+ 	(ashift split): Adjust the first operand if it uses the SP and we
+ 	are pushing the shifted value.
+ 	(plus shift split): Fix when a source is in register D+X.
+ 	("doloop_end"): Pass dummy arguments to gen_rtx_NE.
+ 
+ 2004-03-02  Stephane Carrez  <stcarrez@nerim.fr>
+ 
+ 	* config/m68hc11/m68hc11.c (m68hc11_check_z_replacement): Fix when
+ 	comparing with Z register.
+ 
+ 2004-03-02  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* cfgloop.h (struct loop_desc): Removed.
+ 	(struct loop): Fields simple, desc and has_desc removed.
+ 	(simple_loop_p, count_loop_iterations): Declaration removed.
+ 	* cfgloopanal.c (struct unmark_altered_insn_data): Removed.
+ 	(unmark_altered, blocks_invariant_registers, unmark_altered_insn
+ 	blocks_single_set_registers, invariant_rtx_wrto_regs_p_helper,
+ 	invariant_rtx_wrto_regs_p, test_for_iteration, constant_iterations,
+ 	simple_loop_exit_p, variable_initial_value, variable_initial_values,
+ 	simple_condition_p, simple_increment, count_strange_loop_iterations,
+ 	inverse, fits_in_mode_p, simple_loop_p, count_loop_iterations):
+ 	Removed.
+ 	* loop-iv.c (check_simple_exit, find_simple_exit): Update comments.
+ 
+ 2004-03-02  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* genattrtab.c: Don't handle MATCH_INSN.
+ 	* genrecog.c: Likewise.
+ 	* gensupport.c: Likewise.
+ 	* rtl.def (match_insn): Remove.
+ 	* doc/md.texi (match_insn, match_insn2): Remove.
+ 
+ 2004-03-02  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* doc/c-tree.texi (DECL_ASSEMBLER_NAME): Mention that using this
+ 	macro results in memory allocation.
+ 
+ 2004-03-02  David O'Brien  <obrien@FreeBSD.org>
+ 
+ 	* config/freebsd-spec.h (FBSD_DYNAMIC_LINKER): Add.
+ 	* config/alpha/freebsd.h (SUBTARGET_EXTRA_SPECS): Define
+ 	%(fbsd_dynamic_linker),
+ 	(LINK_SPEC): Use %(fbsd_dynamic_linker), and sync style with
+ 	config/i386/freebsd.h
+ 	* config/arm/freebsd.h: Ditto.
+ 	* config/i386/freebsd.h: Ditto.
+ 	* config/i386/freebsd64.h: Ditto.
+ 	* config/ia64/freebsd.h: Ditto.
+ 	* config/rs6000/sysv4.h: Ditto.
+ 	* config/sparc/freebsd.h: Ditto.
+ 
+ 2004-03-02  Loren James Rittle  <ljrittle@acm.org>
+ 
+ 	* gcc/doc/install.texi (*-*-freebsd*): Update target information.
+ 
+ 2004-03-02  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* rtl.def (define_combine): Remove.
+ 
+ 2004-03-02  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300.md: Tweak formatting.
+ 
+ 2004-03-02  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300.md (*cmphi_h8300): Rename to
+ 	*cmphi_h8300_znvc.
+ 	(*cmphi_h8300hs): Rename to *cmphi_h8300hs_znvc.
+ 
+ 2004-03-01  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	PR bootstrap/14356
+ 	* gcc.c (process_command): Remove const-qualification from argv.
+ 	(main): Likewise.
+ 
+ 2004-03-02  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300.md (pushqi1_h8300hs): Rename to
+ 	pushqi1_h8300hs_advanced.  Adjust its caller.
+ 	(pushhi1_h8300hs): Rename to pushhi1_h8300hs_advanced.
+ 	Adjust its caller.
+ 
+ 2004-03-02  Nicolas Roche  <roche@act-europe.fr>
+ 
+ 	* Makefile.in (install-libgcc, install-multilib): Pass
+ 	mkinstalldirs var to libgcc.mk.
+ 
+ 2004-03-01  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* system.h (DBX_OUTPUT_STANDARD_TYPES): Poison.
+ 	* doc/tm.texi (DBX_OUTPUT_STANDARD_TYPES): Remove.
+ 
+ 2004-03-01  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300.c (gtle_operator): Accept GT and LE.
+ 	* config/h8300/h8300.md: Split several peephole2's, each into
+ 	two.
+ 
+ 2004-03-02  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* dominance.c (recount_dominator): Handle postdominators.
+ 
+ 2004-03-01  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips-protos.h (enum mips_symbol_type): Move from mips.h.
+ 	(NUM_SYMBOL_TYPES): Likewise.
+ 	(SYMBOL_64_HIGH, SYMBOL_64_MID, SYMBOL_64_LOW): New symbol types.
+ 	(mips_unspec_address): Declare.
+ 	(mips_gotoff_page, mips_gotoff_global): Delete.
+ 	* config/mips/mips.h (PREDICATE_CODES): Add general_symbolic_operand.
+ 	* config/mips/mips.c (enum mips_symbol_type, NUM_SYMBOL_TYPES): Delete.
+ 	(mips_symbolic_constant_p, mips_symbolic_address_p)
+ 	(mips_symbol_insns): Handle new symbol types.
+ 	(general_symbolic_operand): New predicate.
+ 	(mips_unspec_address): Make extern.
+ 	(mips_gotoff_page, mips_gotoff_global): Delete.
+ 	(override_options): Allow -mabi=64 -mno-abicalls -mexplicit-relocs.
+ 	Handle new symbol types.
+ 	* config/mips/mips.md (*lea_high64, *lea64): New patterns.
+ 	(*xgot_hi[sd]i, *xgot_lo[sd]i, *got_disp[sd]i, *got_disp[sd]i): Call
+ 	mips_unspec_address directly.
+ 	* doc/invoke.texi: Remove the -mabi=64 -mno-abicalls exception from
+ 	the documentation of -mexplicit-relocs.
+ 
+ 2004-03-01  Jeff Law  <law@redhat.com>
+ 
+ 	* fold-const.c (fold): An equality comparison of a non-weak object
+ 	against zero has a known result.  Similarly an equality comparison
+ 	of the address of two non-weak, unaliased symbols has a known result.
+ 
+ 	* ggc-page.c (struct page_entry): New field PREV.
+ 	(ggc_alloc): Update PREV field appropriately.
+ 	(sweep_pages): Likewise.
+ 	(ggc_free): Likewise.  Use PREV field rather than loop to
+ 	improve ggc_free performance.
+ 
+ 2004-03-01  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.c (mips_output_division): Use the division
+ 	instruction to fill the delay slot of a zero check.
+ 	(mips_idiv_insns): Adjust accordingly.
+ 
+ 2004-03-01  Nathanael Nerode  <neroden@gcc.gnu.org>
+ 
+ 	* config.gcc: Create a default tmake_file for linux, and use
+ 	it in all but two linux clauses.  Comment those two.
+ 
+ 2004-03-01  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* combine.c (try_combine):  Do not refer to is_replaced.
+ 	(gen_lowpart_for_combine):  Perverse subregs now have a
+ 	more politically correct name.
+ 	* cse.c (cse_insn): Likewise.
+ 	* jump.c: Fix bogus reference to delete_insn.
+ 
+ 2004-02-29  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	PR debug/14328
+ 	* dwarf2out.c (gen_enumeration_type_die): Output all enumeration
+ 	constants as signed values.
+ 
+ 	PR middle-end/13448
+ 	* c-tree.h (readonly_warning): Rename to ...
+ 	(readonly_error): ... this.
+ 	* c-typeck.c (build_unary_op): Adjust accordingly.
+ 	(readonly_warning): Rename to ...
+ 	(readonly_error): ... this and issue errors, not warnings.
+ 	(build_modify_expr): Call readonly_error, not readonly_warning.
+ 	(c_expand_asm_operands): Likewise.
+ 	* tree-inline.c (optimize_inline_calls): Do not inline functions
+ 	after errors have occurred.
+ 
+ 2004-02-29  Nathanael Nerode  <neroden@gcc.gnu.org>
+ 
+ 	* configure.ac: Rearrange some threading code for clarity;
+ 	add section comment.
+ 	* configure: Regenerate.
+ 
+ 2004-02-29  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* passes.c, config/frv/frv.c, config/sh/sh.c: Fix comment
+ 	typos.
+ 	* doc/cppopts.texi: Fix a typo.
+ 
+ 2004-02-29  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/i386/i386.md: Fix formatting.
+ 
+ 2004-02-29  Nathanael Nerode  <neroden@gcc.gnu.org>
+ 
+ 	* configure.ac: Add some comments delineating sections of code.
+ 
+ 	* doc/install.texi: Note that libada uses autoconf 2.57 also.
+ 
+ 	* doc/install.texi: Fix idiot typo in previous commit.
+ 
+ 	* doc/install.texi: Update for conversion of intl to autoconf 2.57.
+ 
+ 2004-02-29  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300.md: Add comments about peephole2's.
+ 
+ 2004-02-29  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300.md: Tweak operand numbers of some
+ 	peephole2's.
+ 
+ 2004-02-29  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300.md: Tweak comments about peephole2's.
+ 
+ 2004-02-29  Waldek Hebisch  <hebisch@math.uni.wroc.pl>
+ 
+ 	PR middle-end/14203
+ 	* function.c (uninitialized_vars_warning): Use DECL_RTL_SET_P
+ 	instead of testing whether DECL_RTL is not NULL.
+ 
+ 2004-02-28  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/sh/sh.c: Fix formatting.
+ 
+ 2004-02-28  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/sh/sh.c: Convert to ISO-C.
+ 
+ 2004-02-28  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* c-typeck.c (tagged_types_tu_compatible_p): Fix pasto in
+ 	my previous patch.
+ 
+ 	* config/darwin.h (machopic_finish): Output stub even if the
+ 	symbol is already defined.
+ 
+ 2004-02-28  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	* pa64-hpux.h (LIB_SPEC): Fix linking under HP-UX 11.00 with -p and -pg.
+ 
+ 2004-02-28  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* genattr.c (main): Don't define
+ 	TRADITIONAL_PIPELINE_INTERFACE or DFA_PIPELINE_INTERFACE.
+ 	* system.h (TRADITIONAL_PIPELINE_INTERFACE): Poison.
+ 	(DFA_PIPELINE_INTERFACE): Likewise.
+ 	* doc/tm.texi (TRADITIONAL_PIPELINE_INTERFACE): Remove.
+ 	(DFA_PIPELINE_INTERFACE): Likewise.
+ 
+ 2004-02-28  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.md (tstsi, tstdi): Delete.
+ 
+ 2004-02-28  Maciej W. Rozycki  <macro@ds2.pg.gda.pl>
+ 
+ 	* config/mips/mips.c (override_options): Remove an obsolete
+ 	duplicate definition of the "e" constraint.
+ 	* config/mips/mips.h: Update a comment accordingly.
+ 
+ 2004-02-28  Maciej W. Rozycki  <macro@ds2.pg.gda.pl>
+ 
+ 	* config/mips/mips.md: Complete the unfinished R4000
+ 	multiply/shift errata workaround.  Improve documentation.
+ 	(hazard): Use TARGET_FIX_R4000 to decide whether an "imul" instruction
+ 	has a hilo hazard.
+ 	(mulsi3, mulsi3_internal, mulsi3_r4000): Use TARGET_FIX_R4000.
+ 	(muldi3, muldi3_internal): Likewise.
+ 	(muldi3_internal2): Remove, replacing with...
+ 	(muldi3_mult3, muldi3_r4000): ...these new patterns.
+ 	(mulsidi3): Take the errata into account.
+ 	(mulsidi3_32bit): Remove, replacing with...
+ 	(mulsidi3_32bit_internal, mulsidi3_32bit_r4000): ...these new patterns.
+ 	(mulsidi3_64bit, mulsidi3_64bit_parts): Disable if TARGET_FIX_R4000.
+ 	(umulsidi3): Take the errata into account.
+ 	(umulsidi3_32bit): Remove, replacing with..
+ 	(umulsidi3_32bit_internal, umulsidi3_32bit_r4000): ...these patterns.
+ 	(umulsi3_highpart, umulsi3_highpart_internal): Disable if
+ 	TARGET_FIX_R4000.
+ 	(smulsi3_highpart, smulsi3_highpart_internal): Likewise.
+ 	(smuldi3_highpart, umuldi3_highpart): Likewise.
+ 	* doc/invoke.texi: Document the errata workaround.
+ 
+ 2004-02-28  Maciej W. Rozycki  <macro@ds2.pg.gda.pl>
+ 
+ 	* config/mips/mips-protos.h (mips_idiv_insns): Declare.
+ 	* config/mips/mips.h (MASK_FIX_SB1): Bump.
+ 	(MASK_FIX_R4000, TARGET_FIX_R4000): New macros.
+ 	(TARGET_SWITCHES): Add -mfix-r4000 and -mno-fix-r4000.
+ 	* config/mips/mips.c (mips_idiv_insns): New function.
+ 	(override_options): Make -march=r4000 imply -mfix-r4000 by default.
+ 	(mips_output_division): Add a workaround for the R4000 divide/shift
+ 	errata.
+ 	* config/mips/mips.md (length): Use mips_idiv_insns() to calculate
+ 	the length of an "idiv" instruction.
+ 	* doc/invoke.texi: Document the new switches.
+ 
+ 2004-02-28  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* doc/tm.texi (IS_COSTLY_DEPENDENCE): Change to
+ 	TARGET_SCHED_IS_COSTLY_DEPENDENCE.
+ 
+ 2004-02-28  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	PR optimization/14229
+ 	* cfgrtl.c (rtl_tidy_fallthru_edge): Do not fail for !onlyjump jump.
+ 
+ 2004-02-28  Eric Botcazou  <ebotcazou@act-europe.fr>
+ 
+ 	* fold-const.c (fold): Strip NOPs that change the signedness
+ 	for RSHIFT too.  Expand comment.
+ 
+ 2004-02-27  Ian Lance Taylor  <ian@wasabisystems.com>
+ 
+ 	PR optimization/7871
+ 	* flow.c (mark_set_1): Don't add LOG_LINKS for global registers
+ 	from or to call insns.
+ 
+ 2004-02-27  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR optimization/7871
+ 	* flow.c (propagate_one_insn): Interpret calls as setting global
+ 	registers, not merely clobbering them.
+ 
+ 2004-02-27  Dale Johannesen  <dalej@apple.com>
+ 
+ 	* config/darwin.c (machopic_output_possible_stub_label):  Remove.
+ 	config/darwin-protos.h:  Ditto.
+ 	config/darwin.h:  Remove call to it.
+ 	* combine.c (distribute_notes): Do not place a REG_DEAD note
+ 	when value is both set and used.
+ 
+ 2004-02-27  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/fixunssfsi.c (__fixunssfsi): Enable on H8/300
+ 	as well.
+ 	* config/h8300/lib1funcs.asm (___fixunssfsi): Remove.
+ 	* config/h8300/t-h8300 (LIB1ASMFUNCS): Remove _fixunssfsi_asm.
+ 
+ 2004-02-27  Andrew Pinski  <apinski@apple.com>
+ 
+ 	* c-typeck.c (tagged_types_tu_compatible_p) <ENUMERAL_TYPE>:
+ 	Speedup common case of the type values being in the same order.
+ 
+ 2004-02-27  Steve Ellcey  <sje@cup.hp.com>
+ 
+ 	* config/ia64/ia64.h (no-inline-float-divide): New option.
+ 	* config/ia64/ia64.h (no-inline-int-divide): New option.
+ 	* config/ia64/ia64.h (no-inline-sqrt): New option.
+ 	(TARGET_DEFAULT): Add MASK_INLINE_FLOAT_DIV_THR to define.
+ 	* config/ia64/hpux.h (TARGET_DEFAULT): Ditto.
+ 	* config/ia64/ia64.c (ia64_override_options): Modify error
+ 	checking for inlined division/sqrt.
+ 
+ 2004-02-27  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* bb-reorder.c, cfgbuild.c, diagnostic.c, explow.c, profile.c,
+ 	ra-build.c, read-rtl.c, tracer.c, unwind-dw2-fde-glibc.c,
+ 	value-prof.c, config/darwin-protos.h, config/frv/frv-abi.h,
+ 	config/i386/pmmintrin.h, config/pa/pa-hpux.h: Update
+ 	copyright.
+ 
+ 2004-02-27  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* function.c (assign_parms): Don't count pretend args for alignment.
+ 
+ 2004-02-27  Richard Henderson  <rth@redhat.com>
+ 
+ 	* passes.c: New file.
+ 	* Makefile.in (OBJS-common): Add it.
+ 	* diagnostic.c (rtl_dump_and_exit): Move decl ...
+ 	* flags.h (rtl_dump_and_exit): ... here.
+ 	* output.h (size_directive_output, last_assemble_variable_decl):
+ 	Move from toplev.c.
+ 	* rtl.h (reg_alloc): Move from toplev.c.
+ 	* toplev.c (HAVE_conditional_execution, DUMPFILE_FORMAT,
+ 	struct dump_file_info, enum dump_file_index, dump_file_tbl,
+ 	open_dump_file, close_dump_file, rest_of_decl_compilation,
+ 	rest_of_type_compilation, rest_of_handle_final,
+ 	rest_of_handle_delay_slots, rest_of_handle_stack_regs,
+ 	rest_of_handle_variable_tracking, rest_of_handle_machine_reorg,
+ 	rest_of_handle_new_regalloc, rest_of_handle_old_regalloc,
+ 	rest_of_handle_regrename, rest_of_handle_reorder_blocks,
+ 	rest_of_handle_sched, rest_of_handle_sched2, rest_of_handle_regmove,
+ 	rest_of_handle_tracer, rest_of_handle_if_conversion,
+ 	rest_of_handle_if_after_combine, rest_of_handle_web,
+ 	rest_of_handle_branch_prob,
+ 	rest_of_handle_value_profile_transformations, rest_of_handle_cfg,
+ 	rest_of_handle_addressof, rest_of_handle_sibling_calls,
+ 	rest_of_handle_jump_bypass, rest_of_handle_inlining,
+ 	rest_of_handle_null_pointer, rest_of_handle_combine,
+ 	rest_of_handle_life, rest_of_handle_cse, rest_of_handle_cse2,
+ 	rest_of_handle_gcse, rest_of_handle_loop_optimize,
+ 	rest_of_handle_loop2, rest_of_compilation): Move to passes.c.
+ 	(decode_d_option): Use enable_rtl_dump_file.
+ 	(compile_file, finalize, do_compile): Move profile+combine+graph
+ 	cleanup to finish_optimization_passes.
+ 	* toplev.h (init_optimization_passes, finish_optimization_passes,
+ 	enable_rtl_dump_file): Declare.
+ 
+ 2004-02-27  Eric Botcazou  <ebotcazou@act-europe.fr>
+ 	    Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* fold-const.c (fold): Revert 2004-02-25 change.  Use the original
+ 	operands to build a tree with swapped operands.
+ 	* expr.c (expand_expr_real) <MAX_EXPR>: Consistently use the
+ 	'unsignedp' predicate to specify the signedness.
+ 
+ 2004-02-27  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* c-decl.c, c-ppoutput.c, combine.c, cppfiles.c, dwarf2out.c,
+ 	expr.c, fold-const.c, gcc.c, haifa-sched.c, loop-iv.c,
+ 	params.def, read-rtl.c, rtl.c, rtlanal.c, toplev.c: Fix
+ 	comment typos and formatting.  Follow spelling conventions.
+ 
+ 2004-02-26  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* config/rs6000/rs6000.md: Add fixuns_truncsfsi2 and
+ 	fix_truncsfsi2.
+ 
+ 	* config/rs6000/spe.md: Delete spe_efsctuiz.
+ 	Add spe_fixuns_truncsfsi2.
+ 	Add spe_fix_truncsfsi2.
+ 
+ 2004-02-26  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* c-lex.c (c_lex_string_translate): New variable.
+ 	(lex_string): Use to determine string translation.
+ 	* c-pragma.h: Prototype.
+ 	* c-parse.in (start_string_translation): New. Set above.
+ 	(stop_string_translation): Ditto.
+ 	(attribute, attribute_list, asm_def, asm_stmt,
+ 	asm_operand): Use above functions.
+ 	* cp/parser.c (cp_parser_declaration): Translate strings
+ 	unless token is RID_EXTERN. Set c_lex_string_translate
+ 	for recursive use.
+ 	(cp_parser_asm_definition): Only translate argument strings
+ 	to asms.
+ 	(cp_parser_asm_operand_list): Ditto.
+ 	(cp_parser_attribute_list): Do not translate attribute strings.
+ 
+ 2004-02-26  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* stmt.c (expand_start_case_dummy): Remove.
+ 	* tree.h: Remove the corresponding prototype.
+ 
+ 2004-02-26  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* builtins.c (apply_args_register_offset): Remove.
+ 	* tree.h: Remove the corresponding prototype.
+ 
+ 2004-02-26  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* stor-layout.c (is_pending_size): Remove.
+ 	* tree.h: Remove the corresponding prototype.
+ 
+ 2004-02-26  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* recog.c (validate_replace_src): Remove.
+ 	* recog.h: Remove the corresponding prototype.
+ 
+ 2004-02-26  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* calls.c: Don't reference FINAL_REG_PARM_STACK_SPACE or
+ 	MAYBE_REG_PARM_STACK_SPACE.
+ 	* function.c: Likewise.
+ 	* system.h (FINAL_REG_PARM_STACK_SPACE): Poison.
+ 	(MAYBE_REG_PARM_STACK_SPACE): Likewise.
+ 	* doc/tm.texi (FINAL_REG_PARM_STACK_SPACE): Remove.
+ 	(MAYBE_REG_PARM_STACK_SPACE): Likewise.
+ 
+ 2004-02-26  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* c-decl.c (c_expand_deferred_function): Remove.
+ 	* c-tree.h: Remove the corresponding prototype.
+ 
+ 2004-02-26  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* postreload.c (reload_cse_move2add): Generate just a PLUS
+ 	instead of an entire SET.
+ 
+ 2004-02-26  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* config.gcc: Add support for nocoma/prescott/pentium-m/pentium3m
+ 	/pentium4m.
+ 	* i386.c (override_options): Add support for new CPUs.
+ 	* i386.h (TARGET_CPU_DEFAULT_NAMES): New names.
+ 	(TARGET_CPU_DEFAULT_pentium_m, TARGET_CPU_DEFAULT_pentium4e): New
+ 	constants.
+ 	* invoke.texi: Extend documentation of -mtune/-march for new CPUs.
+ 
+ 2004-02-26  Bob Wilson  <bob.wilson@acm.org>
+ 
+ 	* config/xtensa/xtensa.h (TARGET_CPU_CPP_BUILTINS): Define __xtensa__.
+ 
+ 2004-02-26  Eric Botcazou  <ebotcazou@act-europe.fr>
+ 
+ 	* config/sparc/sparc-protos.h (sparc_emit_floatunsdi): Add 'mode'.
+ 	(sparc_emit_fixunsdi): New prototype.
+ 	* config/sparc/sparc.c (sparc_emit_floatunsdi): Use 'mode' argument.
+ 	(sparc_emit_fixunsdi): New function.
+ 	* config/sparc/sparc.md (floatunsdisf2): Use 'general_operand' for
+ 	operand 1.  Pass SFmode to sparc_emit_floatunsdi.
+ 	(floatunsdidf2): Use 'general_operand' for operand 1.  Pass DFmode
+ 	to sparc_emit_floatunsdi.
+ 	(fixuns_truncsfdi2): New expander.
+ 	(fixuns_truncdfdi2): Likewise.
+ 
+ 2004-02-26  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* gcse.c (delete_null_pointer_checks_1): Do not delete CC setter
+ 	unless HAVE_cc0.
+ 
+ 2004-02-25  Richard Henderson  <rth@redhat.com>
+ 
+ 	* explow.c (force_reg): Call mark_reg_pointer as appropriate.
+ 	* config/alpha/alpha.c (alpha_emit_conditional_branch): Don't
+ 	use (op0-op1) == 0 if op0 is a pointer.
+ 	* config/alpha/alpha.md (cmpdi): Use some_operand.
+ 	(three comparison combine splits): Remove.
+ 
+ 2004-02-25  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR c/12794
+ 	* c-common.c (handle_alias_attribute): Reject the attribute if
+ 	current_function_decl is set.
+ 
+ 2004-02-25  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* config.gcc: Add comment describing extra_gcc_objs.
+ 	i[34567]86-*-cygwin*): Replace host_extra_gcc_objs with extra_gcc_objs.
+ 	* configure.ac (extra_gcc_objs): New substitution variable.
+ 	(host_extra_gcc_objs): Don't substitute.
+ 	* configure: Regenerate.
+ 	* Makefile.in: Use extra_gcc_objs.
+ 
+ 2004-02-25  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* doc/contrib.texi: Add an entry for myself.
+ 
+ 2004-02-25  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* basic-block.h (make_eh_edge, break_superblocks): Declare.
+ 	* cfgbuild.c (make_eh_edge):  Make global.
+ 	* cfglayout.c (break_superblocks): Likewise; fix memory leak.
+ 	* except.c (build_post_landing_pads, connect_post_landing_pads,
+ 	dw2_build_landing_pads, sjlj_emit_function_enter,
+ 	sjlj_emit_function_exit, sjlj_emit_dispatch_table,
+ 	sjlj_build_landing_pads): Update CFG.
+ 	(emit_to_new_bb_before): New function.
+ 	(finish_eh_generation): Do not rebuild the CFG.
+ 
+ 2004-02-25  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	* config.gcc (hppa*-*-*, parisc*-*-*): Add MASK_BIG_SWITCH to all
+ 	target_cpu_default defines.
+ 	* pa-hpux.h (TARGET_DEFAULT): Add MASK_BIG_SWITCH to define.
+ 	* pa.h (TARGET_DEFAULT): Likewise.
+ 
+ 2004-02-25  Eric Botcazou  <ebotcazou@act-europe.fr>
+ 
+ 	* fold-const.c (fold): Treat MAX_EXPR and MIN_EXPR like
+ 	comparisons with regard to signedness.
+ 
+ 2004-02-25  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* arm.c (thumb_legitimize_address): New function.
+ 	* arm-protos.h: Prototype it.
+ 	* arm.h (THUMB_LEGITIMIZE_ADDRESS): Define.
+ 	(LEGITIMIZE_ADDRESS): Use it.
+ 
+ 2004-02-25  J"orn Rennecke <joern.rennecke@superh.com>
+ 
+ 	* reload1.c (reload): Only spill eliminable register with multiple
+ 	adjacent elimination alternatives if all alternatives fail.
+ 
+ 2004-02-25  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* arm.c (arm_legitimate_index_p): For QImode the range of an offset
+ 	is -4095...+4095 inclusive.
+ 
+ 2004-02-25  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* doc/install.texi (sparc-sun-solaris2* specific notes): Document
+ 	the bootstrap failure with Sun CC 5.4 and 5.5.
+ 
+ 2004-02-24  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* cse.c (cse_change_cc_mode_insns): Stop at any instruction
+ 	which modifies NEWREG.
+ 	(cse_condition_code_reg): Update the mode of CC_REG in
+ 	CC_SRC_INSN on our own.
+ 
+ 2004-02-24  Michael Matz  <matz@suse.de>
+ 
+ 	* config/i386/i386.c (ix86_comp_type_attributes): Check for
+ 	regparm attributes.
+ 
+ 2004-02-24  Richard Henderson  <rth@redhat.com>
+ 
+ 	* toplev.c (dump_file_tbl): Rename from dump_file.
+ 	* bb-reorder.c, bt-load.c, cfgcleanup.c, cfglayout.c, cfgloopanal.c,
+ 	cfgloopmanip.c, cfgrtl.c, config/arm/arm.c, config/frv/frv.c,
+ 	config/i386/i386.c, config/ia64/ia64.c, config/mips/mips.c,
+ 	config/sh/sh.c, cse.c, flow.c, ifcvt.c, loop-iv.c, loop-unroll.c,
+ 	loop-unswitch.c, output.h, predict.c, profile.c, ra-build.c,
+ 	ra-colorize.c, ra-debug.c, ra-rewrite.c, ra.c, regrename.c, reload1.c,
+ 	toplev.c, tracer.c, value-prof.c, var-tracking.c, web.c:
+ 	s/rtl_dump_file/dump_file/g.
+ 
+ 2004-02-24  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* config/rs6000/spe.md (spe_fix_truncsfsi2): Delete.
+ 	(spe_fixuns_truncsfsi2): Delete.
+ 
+ 	* config/rs6000/rs6000.md (fix_truncsfsi2): Delete.
+ 	(fixuns_truncsfsi2): Delete.
+ 
+ 2004-02-24  Josef Zlomek  <zlomekj@suse.cz>
+ 
+ 	PR/14240
+ 	* rtlanal.c (replace_label): Fix replacing labels in constant pool.
+ 
+ 2004-02-24  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* config/darwin.h (TARGET_HAS_F_SETLKW): Define.
+ 
+ 2004-02-24  Jason Merrill  <jason@redhat.com>
+ 
+ 	* tree.c (check_qualified_type): New fn.
+ 	(get_qualified_type): Use it.  If type already has the desired
+ 	quals, just return it.
+ 	* tree.h: Declare it.
+ 
+ 2004-02-24  Sanjiv Kumar Gupta  <sanjivg@noida.hcltech.com>
+ 
+ 	* target-def.h (TARGET_SCHED_INIT_GLOBAL,
+ 	TARGET_SCHED_FINISH_GLOBAL): New macros.
+ 
+ 	* target.h (md_init_global, md_finish_global): Function
+ 	declarations corresponding to new target macros.
+ 
+ 	* haifa-sched.c (sched_init, sched_finish): Allow target to
+ 	call the new schedular hooks.
+ 
+ 	* flow.c (recompute_reg_usage): Add PROP_DEATH_NOTES flag in
+ 	call to update_life_info.
+ 
+ 	* config/sh/sh.h (OVERRIDE_OPTIONS): Re-enable
+ 	flag_schedule_insns for SH4.
+ 
+ 	* config/sh/sh.c (sh_md_init_global, sh_md_finish_global,
+ 	find_set_regmode_weight, find_insn_regmode_weight,
+ 	find_regmode_weight), sh_md_init, sh_dfa_new_cycle,
+ 	sh_variable_issue, high_pressure, ready_reorder,
+ 	rank_for_reorder, swap_reorder, sh_reorder, sh_reorder2): New
+ 	functions used to throttle the insn movement in first
+ 	scheduling pass for SH.
+ 
+ 	* gcc/doc/tm.texi: Document TARGET_SCHED_INIT_GLOBAL and
+ 	TARGET_SCHED_FINISH_GLOBAL.
+ 
+ 2004-02-24  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	Implement FR-V FDPIC ABI support for frv-uclinux and frv-linux.
+ 	2004-02-05  Alexandre Oliva  <aoliva@redhat.com>
+ 	* config/frv/frv.c (frv_emit_movsi): Use GOT relocations for
+ 	symbols in sections named by the user.
+ 	2004-01-30  Alexandre Oliva  <aoliva@redhat.com>
+ 	* config/frv/linux.h (TARGET_OS_CPP_BUILTINS): New.
+ 	2004-01-27  Alexandre Oliva  <aoliva@redhat.com>
+ 	* config.gcc (frv-*-*linux*): Handle like *-*-linux*.
+ 	* config/frv/t-linux (EXTRA_MULTILIB_PARTS): Remove, obviated by
+ 	the above.
+ 	2004-01-20  Alexandre Oliva  <aoliva@redhat.com>
+ 	* config/frv/frv.md (symGOT2reg_hilo, symGOTOFF2reg_hilo): Add
+ 	one more pseudo to further improve code generation.
+ 	2004-01-19  Alexandre Oliva  <aoliva@redhat.com>
+ 	* config/frv/frv.md (movdi_ldd): Introduce explicit indirection
+ 	inside UNSPEC.
+ 	2004-01-16  Alexandre Oliva  <aoliva@redhat.com>
+ 	* config/frv/frv.c (frv_legitimate_address_p): Added
+ 	allow_double_reg_p argument.  Adjust all callers.  Use it to
+ 	decide whether to enable double-register indirect addressing.
+ 	(frv_funcdesc_alias_set): Remove.
+ 	(frv_expand_fdpic_call): Force non-SYMBOL_REF operand into
+ 	register.  Emit movdi_ldd.
+ 	(ldd_address_operand): New.
+ 	* config/frv/frv-protos.h (frv_legitimate_address_p): Adjust.
+ 	* config/frv/frv.h (GO_IF_LEGITIMATE_ADDRESS): Likewise.
+ 	(PREDICATE_CODES): Add ldd_address_operand.
+ 	* config/frv/frv.md (movdi_ldd): New.
+ 	(symGOT2reg_hilo, symGOTOFF2reg_hilo): Use separate pseudo for
+ 	intermediate computations if possible.
+ 	(symGOTOFF2reg_i): Fix harmless typo.
+ 	2003-12-18  Alexandre Oliva  <aoliva@redhat.com>
+ 	* unwind-dw2-fde-glibc.c (_Unwind_IteratePhdrCallback): Cast
+ 	relocated p_vaddr to vaddr type.
+ 	* config/frv/frv-protos.h (frv_expand_fdpic_call): Return void.
+ 	* config/frv/frv.c (frv_get_funcdesc_alias_set): New.
+ 	(frv_expand_fdpic_call): Propagate incoming MEM's expr to funcdesc
+ 	MEM, or use a funcdesc alias set.  Use regular move instead of
+ 	ldd.
+ 	(dbl_memory_one_insn_operand): Recognize function descriptors by
+ 	type or by alias set, and don't split them.
+ 	* config/frv/frv.md (call, call_value): Never use call_internal
+ 	for fdpic.
+ 	(call_internal, call_value_internal): Never match for FDPIC.
+ 	(call_fdpicdi, call_fdpicsi, call_value_fdpicdi,
+ 	call_value_fdpicsi): Require FDPIC.
+ 	(ldd): Removed.
+ 	2003-12-17  Alexandre Oliva  <aoliva@redhat.com>
+ 	* config/frv/frv.h (CRT_GET_RFIB_DATA): Define for __FRV_FDPIC__.
+ 	* unwind-dw2-fde-glibc.c: Don't include elf-fdpic.h any more.
+ 	(_Unwind_IteratePhdrCallback): Adjust type of load_base for FRV
+ 	FDPIC.  Compute data base address.
+ 	* config/frv/linux.h (SUBTARGET_DRIVER_SELF_SPECS): Enable -mfdpic
+ 	before the other self-specs are processed.
+ 	* config/frv/t-linux (CRTSTUFF_T_CFLAGS, TARGET_LIBGCC2_CFLAGS):
+ 	Build with -fPIC.
+ 	2003-12-15  Alexandre Oliva  <aoliva@redhat.com>
+ 	* unwind-dw2-fde-glibc.c: Don't include bits/elf-fdpic.h if
+ 	inhibit_libc is defined.
+ 	2003-12-12  Alexandre Oliva  <aoliva@redhat.com>
+ 	* unwind-dw2-fde-glibc.c: Include bits/elf-fdpic.h for
+ 	__FRV_FDPIC__.
+ 	(__RELOC_POINTER): Define.
+ 	(_Unwind_IteratePhdrCallback): Use it.
+ 	* config/frv/frv.h (Twrite): Define.
+ 	(TRANSFER_FROM_TRAMPOLINE): Use it.
+ 	* config/frv/linux.h (INVOKE__main): Undefine.
+ 	(Twrite): Override.
+ 	2003-12-05  Richard Sandiford  <rsandifo@redhat.com>
+ 	* doc/invoke.texi (-mlong-calls, -mlinked-fp): Document FRV options.
+ 	(-mlibrary-pic): Emphasize that this option generates EABI code.
+ 	(-mcpu): Add fr550.
+ 	(-mpack): Remove.
+ 	2003-11-30  Alexandre Oliva  <aoliva@redhat.com>
+ 	* config/frv/frv.c (int_2word_operand): Reject LABELs, SYMBOL_REFs
+ 	and CONSTs in FDPIC mode.
+ 	* gcc/config.gcc (with_cpu): Default to fr400 on frv-*-*linux*.
+ 	2003-11-29  Richard Sandiford  <rsandifo@redhat.com>
+ 	* config/frv/frv.c (move_source_operand): Don't accept symbolic
+ 	constants.
+ 	* config/frv/frv.md (*movhi_internal, *movsi_internal): Use an 'n'
+ 	rather than 'i' constraint for the 2-instruction alternative.
+ 	(*movsi_2word): New, incorporating existing int_2word_operand splitter.
+ 	2003-11-29  Richard Sandiford  <rsandifo@redhat.com>
+ 	* config/frv/frv.h (EXTRA_CONSTRAINT_FOR_Q): Renamed from
+ 	EXTRA_CONSTRAINT_FOR_Y.
+ 	(EXTRA_CONSTRAINT): Remove handling of 'Y'.
+ 	* config/frv/frv.md (*movsi_internal): Remove 'Q' constraint.
+ 	(addsi3): Change 'Y' constraint to 'Q'.
+ 	2003-11-27  Richard Sandiford  <rsandifo@redhat.com>
+ 	* reload.c (CONST_POOL_OK_P): New macro.
+ 	(find_reloads): Use it to decide whether a constant can be forced
+ 	into memory.
+ 	* config/frv/frv.h (LEGITIMATE_PIC_OPERAND_P): Return true if the
+ 	constant satisfies got12_operand.
+ 	(frv_cannot_force_const_mem): Always return true for TARGET_FDPIC.
+ 	(frv_legitimate_address_p): Check for valid unspec offsets using
+ 	got12_operand rather than frv_legitimate_fdpic_operand_p.
+ 	(frv_legitimate_fdpic_operand_p): Delete.
+ 	(frv_emit_movsi): Abort if we try to use the FDPIC register during
+ 	or after reload.
+ 	(frv_legitimate_constant_p): Return LEGITIMATE_PIC_OPERAND_P if
+ 	TARGET_FDPIC.
+ 	* config/frv/frv.md (*movdf_double): Add alternatives for CONST_DOUBLE.
+ 	2003-11-19  Richard Sandiford  <rsandifo@redhat.com>
+ 	* config/frv/frv-protos.h (fdpic_operand, fdpic_got12_operand)
+ 	(frv_fdpic_fptr_operand): Don't declare here.
+ 	* config/frv/frv.h (EXTRA_CONSTRAINT_FOR_Y): Call got12_operand
+ 	rather than fdpic_got12_operand.
+ 	(PREDICATE_CODES): Remove symbolic_operand entry.  Add entries for
+ 	got12_operand and const_unspec_operand.
+ 	* config/frv/frv.c (got12_operand): Renamed from fdpic_got12_operand.
+ 	(gpr_or_int12_operand, dbl_memory_one_insn_operand): Update calls.
+ 	(symbolic_operand): Remove.
+ 	(const_unspec_operand): New predicate.
+ 	* config/frv/frv.md (*movsi_got): Use got12_operand.
+ 	(*movsi_high_got, *movsi_lo_sum_got): Use const_unspec_operand.
+ 	2003-11-18  Richard Sandiford  <rsandifo@redhat.com>
+ 	* config/frv/frv-protos.h (frv_output_addr_const_extra): Remove.
+ 	* config/frv/frv.h (OUTPUT_ADDR_CONST_EXTRA): Remove definition.
+ 	* config/frv/frv.c (frv_unspec): New structure.
+ 	(frv_small_data_reloc_p, frv_const_unspec_p): New functions.
+ 	(frv_print_operand_memory_reference): Use frv_const_unspec_p to
+ 	validate CONST indices.  Use frv_output_const_unspec to print them.
+ 	(frv_print_operand): Update call to unspec_got_name.  Use
+ 	frv_output_const_unspec to print constant unspecs.
+ 	(frv_legitimate_fdpic_operand_p): Return true if frv_const_unspec_p.
+ 	Reject UNSPECs otherwise.
+ 	(unspec_got_name): Take the relocation number as argument, not an
+ 	rtx containing it.
+ 	(frv_output_addr_const_extra): Remove, replacing with...
+ 	(frv_output_const_unspec): ...this new function.
+ 	(frv_find_base_term): Use frv_const_unspec_p & frv_small_data_reloc_p.
+ 	(gpr_or_int12_operand): Use fdpic_got12_operand.
+ 	(dbl_memory_one_insn_operand): Likewise.
+ 	(fdpic_got12_operand): Use frv_const_unspec_p.
+ 	(frv_emit_movsi): Use frv_const_unspec_p to check for CONSTs that
+ 	are already legitimate.  Use frv_small_data_reloc_p when deciding
+ 	whether to use HIGH/LO_SUM for R_FRV_GOTOFF12 and R_FRV_GPREL12.
+ 	2003-11-18  Alexandre Oliva  <aoliva@redhat.com>
+ 	* config/frv/t-linux (SHLIB_MAPFILES): Override so as to export...
+ 	* config/frv/libgcc-frv.ver: ... frv-specific symbols.  New file.
+ 	* config/frv/frv-abi.h (CREATE_DOUBLE_SHIFT): Use branch to local
+ 	label, for real this time.
+ 	* config/frv/frv.c (frv_local_funcdesc_p): Update to new
+ 	representation of visibility.
+ 	(fdpic_got12_operand, symbolic_operand): Mark unused arguments as
+ 	such.
+ 	2003-11-17  Richard Sandiford  <rsandifo@redhat.com>
+ 	* config/frv/frv.h (MASK_LINKED_FP, TARGET_LINKED_FP): New macros.
+ 	(TARGET_SWITCHES): Add -mlinked-fp and -mno-linked-fp.
+ 	* config/frv/frv.c (frv_override_options): Set MASK_LINKED_FP unless
+ 	it was explicitly disabled.
+ 	(frv_stack_info): There is no need to save the link register in every
+ 	frame unless TARGET_LINKED_FP is true.
+ 	(frv_frame_pointer_required): If !TARGET_LINKED_FP, only require a
+ 	frame pointer if the stack pointer might change value.
+ 	(frv_return_addr_rtx): Check and process "count" argument.
+ 	2003-11-14  Richard Sandiford  <rsandifo@redhat.com>
+ 	* config/frv/frv-protos.h (frv_legitimize_address): Remove.
+ 	(frv_find_base_term): Declare.
+ 	* config/frv/frv.h (LEGITIMIZE_ADDRESS): Do nothing.
+ 	(FIND_BASE_TERM): Define.
+ 	(PREDICATE_CODES): Remove pic_register_operand, pic_symbolic_operand,
+ 	small_data_register_operand, small_data_symbolic_operand.  Add
+ 	symbolic_operand.
+ 	* config/frv/frv.c (const_small_data_p, plus_small_data_p): Delete.
+ 	(frv_print_operand_memory_reference, output_move_single): Remove
+ 	special handling for unlegitimized sdata addresses.
+ 	(frv_legitimate_address_p): Don't allow sums of SDA_BASE_REG
+ 	and symbolic addresses.
+ 	(frv_legitimize_address, frv_legitimize_fdpic_address): Delete.
+ 	(frv_find_base_term): New function.
+ 	(int_2word_operand): Check specifically for symbolic address constants.
+ 	(pic_register_operand, pic_symbolic_operand): Delete.
+ 	(small_data_register_operand, small_data_symbolic_operand): Delete.
+ 	(dbl_memory_one_insn_operand): Don't call plus_small_data_p.
+ 	Allow UNSPEC_GOT constants if !TARGET_FDPIC.
+ 	(move_source_operand): Only accept CONSTs if they're a two-insn
+ 	symbolic constant.
+ 	(fdpic_got12_operand): Don't require TARGET_FDPIC.
+ 	(frv_emit_movsi): Legitimize sdata and -mlibrary-pic addresses
+ 	using gen_symGOTOFF2reg*.
+ 	(frv_ifcvt_rewrite_mem): Remove (plus gr16 ...) special cases.
+ 	(frv_rtx_costs): Give all MEM addresses a cost of 0.  Give MEMs
+ 	themselves a cost of 3 insns.
+ 	* config/mips/mips.md (*movsi_got): Allow for !TARGET_FDPIC too.
+ 	Change predicate to symbolic_operand.
+ 	(*movsi_high_got, *movsi_lo_sum_got): Likewise.
+ 	(*movsi_lda_sdata): Delete.
+ 	(*movsi_pic, movsi_high_pic, movsi_lo_sum_pic): Delete.
+ 	2003-11-05  Alexandre Oliva  <aoliva@redhat.com>
+ 	* config.gcc: Add t-slibgcc-elf-ver and support --with-cpu for
+ 	frv-*-*linux*.
+ 	* config/frv/frv-abi.h (CREATE_DOUBLE_SHIFT): Use branch to local
+ 	label.
+ 	* config/frv/frv.h (DRIVER_SELF_SPECS): Add blank before
+ 	-multilib-library-pic.
+ 	(LINK_SPEC): Add -z text for -mfdpic.
+ 	* config/frv/frvbegin.c (__ROFIXUP_LIST__): Don't define on FDPIC.
+ 	* config/frv/frvend.c (__ROFIXUP_END__): Likewise.
+ 	* config/frv/linux.h (STARTFILE_SPEC, ENDFILE_SPEC, LINK_SPEC):
+ 	Override.
+ 	(OPTION_DEFAULT_SPECS, HAS_INIT_SECTION, INIT_SECTION_ASM_OP,
+ 	FINI_SECTION_ASM_OP, CRT_CALL_STATIC_FUNCTION): Define.
+ 	* config/frv/t-linux (EXTRA_MULTILIB_PARTS): Use
+ 	crtstuff-generated files.
+ 	2003-10-31  Alexandre Oliva  <aoliva@redhat.com>
+ 	* config.gcc: Add frv-*-*linux*.
+ 	* config/frv/linux.h, config/frv/t-linux: New.
+ 	2003-10-06  Alexandre Oliva  <aoliva@redhat.com>
+ 	* config/frv/frv.h (LINK_SPEC): Pass -melf32frvfd to the linker
+ 	when -mfdpic even if a linker script is explicitly listed.
+ 	2003-10-02  Alexandre Oliva  <aoliva@redhat.com>
+ 	* config/frv/frv.c (frv_override_options): Clear asm_out
+ 	unaligned_op for SImode on FDPIC.
+ 	(frv_emit_movsi): Use compute_reloc_for_constant to compute the
+ 	argument passed to decl_readonly_section.
+ 	(frv_assemble_integer): Revert 2003-09-30's change, but make the
+ 	whole block run with FDPIC even with -fno-PIC.
+ 	2003-10-02  Alexandre Oliva  <aoliva@redhat.com>
+ 	* config/frv/frv.c (frv_cannot_force_const_mem): Don't force
+ 	symbol or label plus offset to memory.
+ 	(frv_emit_movsi): Emit GPREL only if -mgprel-ro.  Emit 32-bit
+ 	GOTOFF and GPREL for LABEL_REF.
+ 	* config/frv/frv.h (DRIVER_SELF_SPECS): Add -mgprel-ro with
+ 	-mfdpic unless -mno-gprel-ro, -fpic or -fpie.
+ 	(MASK_GPREL_RO, TARGET_GPREL_RO): New.
+ 	(TARGET_SWITCHES): Added gprel-ro and no-gprel-ro.
+ 	* doc/invoke.texi: Document them.
+ 	2003-09-30  Alexandre Oliva  <aoliva@redhat.com>
+ 	* config/frv/frv-protos.h (frv_gen_GPsym2reg): Declare.
+ 	(frv_splittable_got_operand): Removed.
+ 	* config/frv/frv.c (frv_cannot_force_const_mem): Reject HIGH and
+ 	LO_SUM.  Add comments.
+ 	(frv_override_options): Moved enabling of FDPIC to
+ 	DRIVER_SELF_SPECS.  Don't enable MASK_DWORD.
+ 	(frv_local_funcdesc_p): Remove unnecessary heck for flag_pie.
+ 	(frv_legitimize_fdpic_address): Don't duplicate logic in
+ 	frv_emit_movsi.
+ 	(frv_gen_GPsym2reg): New.
+ 	(unspec_got_name): Added gprel.
+ 	(frv_expand_fdpic_call): Add support for inlining PLTs.
+ 	(fdpic_fptr_operand): Renamed from frv_fdpic_fptr_operand.
+ 	(gpr_or_int12_operand): Added GPREL12.
+ 	(pic_symbolic_operand): Match even if !flag_pic for FDPIC.
+ 	(small_data_symbolic_operand): Fail if FDPIC.
+ 	(fdpic_splittable_got_operand): Removed.
+ 	(fdpic_got12_operand): Added GPREL12.
+ 	(frv_emit_movsi): Reorganize to avoid duplication.  Emit GPREL
+ 	when appropriate.  Fix sdata GOTOFF.
+ 	(frv_legitimate_constant_p): Require legitimate PIC operand for
+ 	FDPIC with pic, but only a legitimate fdpic operand for non-pic.
+ 	(frv_assemble_integer): Move FDPIC funcdesc handling out of
+ 	flag_pic case.
+ 	(frv_asm_out_constructor, frv_asm_out_destructor): Abort if
+ 	frv_assemble_integer fails.
+ 	* config/frv/frv.h (DRIVER_SELF_SPECS): New.
+ 	(SUBTARGET_DRIVER_SELF_SPECS): New.
+ 	(ASM_SPEC): Don't pass -mno-fdpic.
+ 	(LINK_SPEC): Pass -melf32frvfd for FDPIC.
+ 	(MASK_INLINE_PLT, TARGET_INLINE_PLT): New.
+ 	(TARGET_SWITCHES): Add -minline-plt, -mno-inline-plt and
+ 	-multilib-library-pic.
+ 	(PREDICATE_CODES): Added fdpic_operand, fdpic_fptr_operand,
+ 	condexec_si_media_operator, condexec_sf_add_operator and
+ 	condexec_sf_conv_operator.  Removed condexec_sf_binary_operator
+ 	and condexec_sf_unary_operator.
+ 	* config/frv/frv.md (R_FRV_GPREL12, R_FRV_GPRELHI, R_FRV_GPRELLO):
+ 	New.
+ 	(movsi_got, movsi_high_got, movsi_lo_sum_got): Move before
+ 	movsi_internal.  Give them internal names.  movsi_got has type
+ 	int.
+ 	(fdpic got splitters): Remove.
+ 	(symGPREL2reg, symGPREL2reg_hilo): New.
+ 	* config/frv/t-frv (MULTILIB_MATCHES): Don't map -fpic and -fPIC
+ 	to -mlibrary-pic.  Map -multilib-library-pic to it.
+ 	* doc/invoke.texi: -mfdpic, -minline-plt, -multilib-library-pic:
+ 	Document.
+ 	2003-09-28  Alexandre Oliva  <aoliva@redhat.com>
+ 	* config/frv/frv.c (frv_function_symbol_referenced_p): Declare.
+ 	(TARGET_CANNOT_FORCE_CONST_MEM): Define to...
+ 	(frv_cannot_force_const_mem): New function.
+ 	(const_small_data_p, plus_small_data_p): Update comments on sdata
+ 	on FDPIC.
+ 	(frv_override_options): Set flag_pie for FDPIC too.
+ 	(frv_conditional_register_usage): Mark gr16 and gr17 as non-fixed,
+ 	call-saved registers on FDPIC.
+ 	(frv_stack_info): Don't preserve the PIC register on FDPIC, and
+ 	don't force LR to be preserved.
+ 	(frv_expand_prologue): Likewise.
+ 	(frv_asm_output_mi_thunk): Use 12-bit funcdesc gotoff for -fpic.
+ 	(frv_frame_pointer_required): Don't force it just because the
+ 	FDPIC register is used.
+ 	(frv_legitimate_address_p) <CONST>: Accept a legitimate FDPIC
+ 	operand only if !condexec_p.
+ 	(frv_legitimize_address): Return the FDPIC-legitimized address.
+ 	Don't match small data here on FDPIC.
+ 	(frv_legitimate_fdpic_operand_p): Don't accept unadorned function
+ 	symbols.  Use TRUE/FALSE instead of 1/0.
+ 	(frv_local_funcdesc_p): New.
+ 	(frv_legitimize_fdpic_address): Rewrite to use GOTOFF and 12-bit
+ 	immediates when possible.
+ 	(pic_symbolic_operand): Accept SYMBOL_REFs and CONSTs in FDPIC.
+ 	(dbl_memory_one_insn_operand): Accept addresses that add a REG and
+ 	an UNSPEC_GOT.
+ 	(frv_emit_movsi): Handle FDPIC before small data.  Use GOTOFF and
+ 	12-bit immediates when possible.
+ 	(frv_legitimate_constant_p): In FDPIC, reject SImode operands that
+ 	are not legitimate pic operands.
+ 	(frv_in_small_data_p): Re-enable for FDPIC.
+ 	* config/frv/frv.h (SDA_BASE_REG): Remove comment about FDPIC.
+ 	(FRV_GLOBAL_P): Removed.
+ 	* config/frv/frv.md: Add modes to CONSTs.
+ 	(movsi_got): New.
+ 	(movsi_lo_sum_got): Use separate matches instead of match_dup.
+ 	(movsi_high_pic, movsi_lo_sum_pic): Match on non-FDPIC only.
+ 	(fdpic splittable operations): Match on flag_pic != 1.
+ 	2003-09-22  Alexandre Oliva  <aoliva@redhat.com>
+ 	* config/frv/frv.c (frv_asm_out_constructor,
+ 	frv_asm_out_destructor): Pass to frv_assemble_integer the size in
+ 	bytes, not bits.
+ 	2003-09-19  Alexandre Oliva  <aoliva@redhat.com>
+ 	* config/frv/frv.c (frv_assemble_integer): Reject complex
+ 	expressions referencing function SYMBOL_REFs.
+ 	* config/frv/frv.c (frv_function_symbol_referenced_p): New.
+ 	(move_source_operand): Reject CONSTs that reference function
+ 	SYMBOL_REFs on FDPIC.
+ 	(frv_emit_movsi): If we get such a CONST, break it up.
+ 	* config/frv/frv.h (CPP_SPEC): Define __FRV_FDPIC__ for -mfdpic.
+ 	(TRANSFER_FROM_TRAMPOLINE): Use different definitions for FDPIC.
+ 	* config/frv/frv.c (frv_print_operand) <I>: Recognize PLUS without
+ 	MEM.
+ 	(frv_assemble_integer): Don't use funcdesc for LABEL_REFs.
+ 	(frv_trampoline_size): Increase for FDPIC.
+ 	* config/frv/frv.h (TRAMPOLINE_ALIGNMENT): Bump to 64 for FDPIC.
+ 	(TRANSFER_FROM_TRAMPOLINE): Handle FDPIC trampolines.
+ 	* config/frv/frv.c (frv_legitimize_fdpic_address, frv_emit_movsi):
+ 	Disable use of GOTOFF for now.
+ 	(const_small_data_p, plus_small_data_p, frv_in_small_data_p):
+ 	Disable use of small data in FDPIC for now.
+ 	(frv_asm_output_mi_thunk): Implement for FDPIC.
+ 	* config/frv/frv.h (SDA_BASE_REG): Set to -1 with FDPIC.
+ 	* config/frv/frv.c (frv_asm_out_constructor): Use
+ 	frv_assemble_integer for FDPIC pointers.
+ 	(frv_asm_out_destructor): Likewise.
+ 	* config/frv/frv.md (ldd): Fix order of operands.  Use
+ 	address_operand for input.
+ 	2003-09-18  DJ Delorie  <dj@redhat.com>
+ 	* config/frv/frv.c (frv_legitimate_fdpic_operand_p): Remove UNSPEC_PIC.
+ 	(unspec_got_name): Correct typo.
+ 	(frv_emit_movsi): Pre-expand splittable GOTs.
+ 	(frv_expand_fdpic_call): Rename gen_lddi to gen_ldd.
+ 	* config/frv/frv.md (lddi): Fix syntax error, rename to ldd.
+ 	(symGOT2reg_hilo, symGOTOFF2reg_hilo): New.
+ 	* config/frv/t-frv: Add -mfdpic multilibs.
+ 	* config/frv/frv.h (ASM_SPEC): Pass -mfdpic/-mno-fdpic.
+ 	(TARGET_SWITCHES): Add -mno-fdpic, fix documentation.
+ 	* config/frv/frv.c (frv_override_options): -mfdpic assumes
+ 	flag_pic, default to 32-bit pics, require DWORD ops.
+ 	(frv_override_options): Add W and Z constraints.
+ 	(frv_expand_prologue): No pic prologue for -mfdpic.
+ 	(frv_asm_output_mi_thunk): Support -mfdpic (soon).
+ 	(frv_print_operand_memory_reference): Handle GOT constants.
+ 	(frv_legitimate_address_p): Allow GOT constants.
+ 	(frv_legitimize_address): Handle GOT addresses too.
+ 	(frv_legitimate_fdpic_operand_p): New.
+ 	(frv_legitimize_fdpic_address): New.
+ 	(unspec_got_name): New.
+ 	(frv_output_addr_const_extra): New.
+ 	(frv_expand_fdpic_call): New.
+ 	(frv_fdpic_fptr_operand): New.
+ 	(gpr_or_int12_operand): Handle GOT operands.
+ 	(int_2word_operand): Handle GOT operands.
+ 	(fdpic_operand): New.
+ 	(fdpic_splittable_got_operand): New.
+ 	(fdpic_got12_operand): New.
+ 	(frv_emit_movsi): Handle GOT operands.
+ 	(frv_assemble_integer): -mfdpic doesn't use rofixups.
+ 	(frv_print_operand): Support 'g' code for GOT operands.
+ 	* config/frv/frv-protos.h: Add prototypes as needed.
+ 	* config/frv/frv.md (R_FRV_GOT12, R_FRV_GOTHI, R_FRV_GOTLO,
+ 	R_FRV_FUNCDESC, R_FRV_FUNCDESC_GOT12, R_FRV_FUNCDESC_GOTHI,
+ 	R_FRV_FUNCDESC_GOTLO, R_FRV_FUNCDESC_VALUE,
+ 	R_FRV_FUNCDESC_GOTOFF12, R_FRV_FUNCDESC_GOTOFFHI,
+ 	R_FRV_FUNCDESC_GOTOFFLO, R_FRV_GOTOFF12, R_FRV_GOTOFFHI,
+ 	R_FRV_GOTOFFLO): New.
+ 	(movsi_high_got, movsi_lo_sum_got): New.
+ 	(*movsi_pic): Don't use this splitter for -mfdpic.
+ 	(addsi3): Allow GOT references also.
+ 	(call, call_value): Handle -mfdpic separately.
+ 	(call_fdpicdi, call_fdpicsi, lddi, call_value_fdpicdi,
+ 	call_value_fdpicsi): New.
+ 	(symGOT2reg, symGOT2reg_i, got splitters, symGOTOFF2reg,
+ 	symGOTOFF2reg_i): New.
+ 	* config/frv/frv.h (MASK_FDPIC): New.
+ 	(TARGET_FDPIC): New.
+ 	(TARGET_SWITCHES): Add -mfdpic.
+ 	(FDPIC_FPTR_REGNO): New.
+ 	(FDPIC_REGNO): New.
+ 	(OUR_FDPIC_REG): New.
+ 	(enum reg_class): Add FDPIC_REGS, FDPIC_FPTR_REGS, and
+ 	FDPIC_CALL_REGS.
+ 	(REG_CLASS_NAMES): Likewise.
+ 	(REG_CLASS_CONTENTS): Likewise.
+ 	(EXTRA_CONSTRAINT_FOR_Y): New, for 12-bit GOTs.
+ 	(EXTRA_CONSTRAINT): Add it here.
+ 	(FRV_GLOBAL_P): New.
+ 	(OUTPUT_ADDR_CONST_EXTRA): New.
+ 
+ 2004-02-24  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/sparc/sparc.h: Remove commented-out definitions of
+ 	TARGET_EDOM and GEN_ERRNO_RTX.
+ 
+ 2004-02-24  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* df.c, df.h, ra-build.c, ra-rewrite.c, ra.c, web.c: Replace
+ 	df_analyse with df_analyze.
+ 
+ 2004-02-24  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* gcse.c (delete_null_pointer_checks_1): Set stop_insn to end, not
+ 	beginning of block.
+ 
+ 2004-02-23  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	* calls.c (precompute_arguments): Update comment.
+ 
+ 2004-02-23  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* et-forest.c: Replace et_occurences with et_occurrences.
+ 
+ 2004-02-23  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* cfgloop.h, loop-iv.c, loop-unswitch.c: Replace iv_analyse
+ 	with iv_analyze.
+ 
+ 2004-02-23  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* config/i386/i386.c: Rename pni to sse3.
+ 	* config/i386/i386.h: Likewise.
+ 	* config/i386/i386.md: Likewise.
+ 	* config/i386/pmmintrin.h: Likewise.
+ 	* doc/extend.texi: Likewise.
+ 	* doc/invoke.texi: Likewise.
+ 
+ 2004-02-23  Zack Weinberg  <zack@codesourcery.com>
+ 	    Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	Remove -fwritable-strings.
+ 	* c-common.c (fix_string_type): Don't check
+ 	flag_writable_strings.
+ 	(fix_string_type): Likewise.
+ 	* c-opts.c (set_std_c89): Don't initialize
+ 	flag_writable_strings.
+ 	(set_std_c99): Likewise.
+ 	* common.opt (fwritable-strings): Remove.
+ 	* flags.h: Remove the external declaration of
+ 	flag_writable_strings.
+ 	* opts.c (common_handle_option) <OPT_fwritable_strings>:
+ 	Remove.
+ 	* toplev.c (flag_writable_strings): Remove.
+ 	(f_options): Remove an entry for writable-strings.
+ 	* varasm.c (const_hash_1) <STRING_CST>: Don't check
+ 	flag_writable_strings.
+ 	(compare_constant) <STRING_CST>: Likewise.
+ 	(build_constant_desc): Likewise.
+ 	* config/darwin.c (machopic_select_section): Likewise.
+ 	* config/arm/arm.c (AOF_ASSEMBLER): Likewise.
+ 	* config/arm/pe.c (arm_pe_encode_section_info): Likewise.
+ 	* config/iq2000/iq2000.c (iq2000_select_section): Likewise.
+ 	* config/mips/mips.c (mips_select_section): Likewise.
+ 	(mips_encode_section_info): Likewise.
+ 	* config/pa/pa.c (pa_select_section): Likewise.
+ 	* config/pa/pa.h (TEXT_SPACE_P): Likewise.
+ 	* config/v850/v850.c (v850_select_section): Likewise.
+ 	* doc/invoke.texi (-fwritable-strings): Remove.
+ 	(-fno-const-strings): Don't mention -fwritable-strings.
+ 	* doc/trouble.texi: Don't mention -fwritable-strings.
+ 
+ 2004-02-23  Nathanael Nerode  <neroden@gcc.gnu.org>
+ 
+ 	* doc/install.texi: Update for switch of boehm-gc to autoconf 2.57.
+ 
+ 2004-02-23  Dale Johannesen  <dalej@apple.com>
+ 
+ 	* config/rs6000.md (movsf_hardfloat): Add POWER form of nop.
+ 	(movdf_hardfloat64):  Ditto.
+ 	(movdf_softfloat64):  Ditto.
+ 
+ 2004-02-23  Fariborz Jahanian <fjahanian@apple.com>
+ 	* config/rs6000/rs6000.c (function_arg): call to
+ 	rs6000_mixed_function_arg for DFmode moved to allow
+ 	normal DFmode incoming register assignment.
+ 
+ 2004-02-23  Dale Johannesen  <dalej@apple.com>
+ 
+ 	* config/rs6000.md (movsf_hardfloat): Accept CTR-to-CTR copy.
+ 	(movdf_hardfloat64):  Ditto.
+ 
+ 2004-02-23  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* convert.c, gcov-io.c, libgcov.c, sched-int.h, sibcall.c,
+ 	config/rs6000/linux.h, config/rs6000/rs6000-c.c: Update
+ 	copyright.
+ 
+ 2004-02-23  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR c/14156
+ 	* c-typeck.c (c_expand_return): Change check for VAR_DECL
+ 	to use DECL_P instead.
+ 
+ 	* config/rs6000/linux.h (OS_MISSING_POWERPC64): Define.
+ 	* config/rs6000/linux64.h (OS_MISSING_POWERPC64): Define.
+ 
+ 2004-02-23  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* Makefile.in (opts.o): Depend on target.h.
+ 	* opts.c (decode_options): Use targetm.default_short_enums
+ 	instead of DEFAULT_SHORT_ENUMS.
+ 	* system.h (DEFAULT_SHORT_ENUMS): Poison.
+ 	* target-def.h (TARGET_DEFAULT_SHORT_ENUMS): New.
+ 	(TARGET_INITIALIZER): Add TARGET_DEFAULT_SHORT_ENUMS.
+ 	* target.h (gcc_target): Add default_short_enums.
+ 	* config/cris/cris.h: Remove a comment about
+ 	DEFAULT_SHORT_ENUMS.
+ 	* config/ip2k/ip2k.h: Likewise.
+ 	* doc/tm.texi (DEFAULT_SHORT_ENUMS): Change to
+ 	TARGET_DEFAULT_SHORT_ENUMS.  Update the description.
+ 
+ 2004-02-23  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 	    Falk Hueffner  <falk@debian.org>
+ 
+ 	PR c/14188
+ 	* builtins.c (expand_builtin_va_arg): Emit an informative message
+ 	if a trap is generated.
+ 	* c-typeck.c (build_function_call): Likewise.
+ 
+ 2004-02-22  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* gcov-io.c (gcov_open) [GCOV_LOCKED]: Use open + fdopen instead of
+ 	fopen.
+ 	* libgcov.c: Include sys/stat.h.
+ 	* config/rs6000/linux.h (TARGET_HAS_F_SETLKW): Define.
+ 	* config/rs6000/linux64.h (TARGET_HAS_F_SETLKW): Define.
+ 	* config/sparc/linux.h (TARGET_HAS_F_SETLKW): Define.
+ 	* config/sparc/linux64.h (TARGET_HAS_F_SETLKW): Define.
+ 
+ 2004-02-22  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* reorg.c: Remove comments about dead ports.
+ 
+ 2004-02-22  Christopher Faylor  <cgf@redhat.com>
+ 
+ 	* config.gcc (i[34567]86-*-pe|i[34567]86-*-cygwin*): *Really* specify
+ 	extra host object file when targetting cygwin rather than generic
+ 	object files.
+ 
+ 2004-02-22  Josef Zlomek  <zlomekj@suse.cz>
+ 
+ 	Merge from tree-ssa:
+ 	2003-11-20  Richard Henderson  <rth@redhat.com>
+ 
+ 		* tree-inline.c (insert_decl_map): New.
+ 		(remap_decl, remap_type, remap_block, copy_body_r,
+ 		initialize_inlined_parameters, declare_return_variable,
+ 		remap_save_expr): Use it.
+ 
+ 	* function.c (copy_body_r): Add mapping from id->ret_label to
+ 	id->ret_label.  Revert test for ret_label.
+ 
+ 2004-02-22  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* genoutput.c (process_template): Strip trailing whitespace in @
+ 	templates and issue a warning if there was any.
+ 
+ 2004-02-21  Christopher Faylor  <cgf@redhat.com>
+ 
+ 	* config.gcc (i[34567]86-*-pe|i[34567]86-*-cygwin*): Specify extra host
+ 	object file when targetting cygwin.
+ 	* config/i386/t-cygwin (EXTRA_GCC_OBJS): Remove definition since it is
+ 	overridden by top-level Makefile.
+ 
+ 2004-02-21  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* config/i386/i386.c (standard_80387_constant_p): Also prefer
+ 	the x87's load constant instructions when optimizing for size.
+ 
+ 2004-02-21  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* combine.c (SHIFT_COUNT_TRUNCATED): Remove.
+ 	* defaults.h (SHIFT_COUNT_TRUNCATED): Provide the default.
+ 	* expmed.c: Assume SHIFT_COUNT_TRUNCATED is always defined.
+ 	* fold-const.c: Likewise.
+ 	* simplify-rtx.c: Likewise.
+ 
+ 2004-02-21  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* combine.c (can_combine_p): Don't ignore SETs marked with
+ 	REG_EH_REGION notes.
+ 	(try_combine): When attemting to fix unrecognized insns, don't
+ 	split a PARALLEL that contains the original i2.
+ 
+ 2004-02-21  Ziemowit Laski  <zlaski@apple.com>
+ 
+ 	* config/darwin.h (TARGET_OPTION_TRANSLATE_TABLE): Refer to
+ 	SUBTARGET_OPTION_TRANSLATE_TABLE for architecture-specific options.
+ 	* config/i386/darwin.h (SUBTARGET_OPTION_TRANSLATE_TABLE): Define it.
+ 	* config/rs6000/altivec.h: #error out if '-maltivec' not specified.
+ 	(vector, pixel, bool): #define to __vector, __pixel and __bool.
+ 	(__un_args_eq, __bin_args_eq, __tern_args_eq): Move to C-specific
+ 	portion of header.
+ 	(__altivec_link_error_invalid_argument): Remove prototype; will use
+ 	__builtin_altivec_compiletime_error("vec_*") instead.
+ 	(vec_*): Fix/complete set of available operation overloads given the
+ 	existence of distinct 'vector bool ...' and 'vector pixel' types; tighten
+ 	cv-correctness of pointer arguments; in C, always check for correct
+ 	argument types before macro expansion.
+ 	* config/rs6000/darwin.h (SUBTARGET_OPTION_TRANSLATE_TABLE): New macro
+ 	defining Darwin/PowerPC-specific '-f[no-]altivec' and
+ 	'-W[no-]altivec-long-deprecated' switches.
+ 	* config/rs6000/rs6000-c (rs6000_cpu_cpp_builtins): Pre-define
+ 	'__vector', '__pixel' and '__bool' macros using
+ 	'__attribute__((altivec(...)))' types.
+ 	* config/rs6000/rs6000.c (bool_char_type_node, bool_short_type_node,
+ 	bool_int_type_node, pixel_type_node, bool_V16QI_type_node,
+ 	bool_V8HI_type_node, bool_V4SI_type_node, pixel_V8HI_type_node):
+ 	New type nodes.
+ 	(rs6000_warn_altivec_long, rs6000_warn_altivec_long_switch): New, for
+ 	handling '-W[no-]altivec-long-deprecated'.
+ 	(rs6000_override_options): Handle '-W[no-]altivec-long-deprecated'.
+ 	(rs6000_expand_binop_builtin, rs6000_expand_ternop_builtin,
+ 	altivec_expand_dst_builtin): Remove casts from integer literals.
+ 	(altivec_expand_builtin): Likewise; handle expansion of new
+ 	'__builtin_altivec_compiletime_error' function.
+ 	(rs6000_init_builtins): Initialize 'vector bool ...' and 'vector pixel'
+ 	types, and make them distinct from other vector types; register
+ 	'__builtin_altivec_compiletime_error' function.
+ 	(print_operand): For 'P', print a full target register name instead of
+ 	merely its number.
+ 	(rs6000_attribute_table): Add "altivec" attribute.
+ 	(rs6000_handle_altivec_attribute): New function.
+ 	* config/rs6000/rs6000.h (TARGET_OPTIONS): Describe
+ 	'-m[no-]-warn-altivec-long' (which '-W[no-]altivec-long-deprecated'
+ 	maps to).
+ 	(rs6000_warn_altivec_long, rs6000_warn_altivec_long_switch): Forward
+ 	declare.
+ 	(ALTIVEC_BUILTIN_COMPILETIME_ERROR): New built-in enumeration.
+ 
+ 2004-02-20  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	* config/ia64/ia64.md (shift_mix4left+1): Delete reload_completed
+ 	check.
+ 	(shift_mix4left+2): Delete redundant pattern.
+ 
+ 2004-02-20  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* alias.c (OUTGOING_REGNO): Don't define the default.
+ 	* builtins.c (OUTGOING_REGNO): Likewise.
+ 	(INCOMING_REGNO): Likewise.
+ 	(apply_args_register_offset): Always use OUTGOING_REGNO.
+ 	* combine.c (OUTGOING_REGNO): Likewise.
+ 	* sibcall.c (OUTGOING_REGNO): Likewise.
+ 	* defaults.h (INCOMING_REGNO): Provide the default.
+ 	(OUTGOING_REGNO): Likewise.
+ 
+ 2004-02-21  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* params.def (max-peeled-insns, max-completely-peeled-insns,
+ 	max-once-peeled-insns): Set to 400.
+ 
+ 2004-02-20  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	PR c++/12007
+ 	* dbxout.c (dbxout_parms): Check that DECL_RTL and DECL_INCOMING_RTL
+ 	are set for parameters before outputing debugging information.
+ 
+ 2004-02-20  Falk Hueffner  <falk@debian.org>
+ 
+ 	PR target/14201
+ 	* config/alpha/alpha.md (*fix_truncsfsi_ieee): Fix typoed operand
+ 	numbers.
+ 
+ 2004-02-20  Per Bothner  <per@bothner.com>
+ 
+ 	* input.h:  Don't #include line-map.h.  It may cause link problems
+ 	with undefined linemap_line_start when line-map.h is included but
+ 	line-map.o is not linked, as currently happens with gengtype on
+ 	compilers that don't support inline.
+ 	* toplev.c:  So we do have to explicitly #include line-map.h here.
+ 
+ 2004-02-20  Richard Henderson  <rth@redhat.com>
+ 
+ 	* doc/invoke.texi: Add -Wvariadic-macros.
+ 
+ 2004-02-20  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* haifa-sched.c (sched_emit_insn): Remove.
+ 	* sched-int.h: Remove the corresponding prototype.
+ 
+ 2004-02-20  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	Revert:
+ 	2004-02-19  Kazu Hirata  <kazu@cs.umass.edu>
+ 	* opts.c (decode_options): Don't use DEFAULT_SHORT_ENUMS.
+ 	* system.h (DEFAULT_SHORT_ENUMS): Poison.
+ 	* config/cris/cris.h: Remove a comment about
+ 	DEFAULT_SHORT_ENUMS.
+ 	* config/ip2k/ip2k.h: Likewise.
+ 	* doc/tm.texi (DEFAULT_SHORT_ENUMS): Remove.
+ 
+ 2004-02-20  Mohan Embar  <gnustuff@thisiscool.com>
+ 	    Tom Tromey  <tromey@redhat.com>
+ 
+ 	* doc/install.texi: Moved --disable-libgcj and
+ 	--with-system-zlib documentation to new section for
+ 	Java-specific options.
+ 	Added explicit Cross-Compiler-Specific Options subheading.
+ 	Added section for Java-specific options.
+ 
+ 2004-02-20  Matt Kraai  <kraai@alumni.cmu.edu>
+ 
+ 	* doc/install.texi (Building the Ada compiler): Remove
+ 	example.
+ 
+ 2004-02-20  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	* toplev.c (dump_file_index, dump_file): Put ce3 before rnreg.
+ 
+ 2004-02-20  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* gcc.c (process_command): Allow translation of the copyright
+ 	symbol but not the rest of the copyright message.
+ 	* gcov.c (print_version): Likewise.  Allow translation of the
+ 	message about warranty.
+ 
+ 2004-02-20  Hans-Peter Nilsson  <hp@axis.com>
+ 
+ 	* config/cris/cris.md ("*andsi_movu"): Correct parentheses in
+ 	predicate.
+ 	("*andsi_clear"): Tweak constraints to not match postincrement.
+ 	Adjust the predicate to exclude a volatile memory reference.
+ 	("*andhi_clear"): Ditto.  Rename from "*andhi_clear_signed".
+ 	("*andhi_clear_unsigned"): Remove, non-matching pattern.
+ 
+ 2004-02-19  Matt Kraai  <kraai@alumni.cmu.edu>
+ 
+ 	* move-if-change: Remove.
+ 	* Makefile.in (s-mlib, c-parse.y, s-check, s-gencheck)
+ 	(s-specs, s-options, s-config, s-conditions, s-flags, s-codes)
+ 	(s-constants, s-emit, s-recog, s-opinit, s-extract, s-peep)
+ 	(s-attr, s-attrtab, s-output, s-genrtl, s-modes, s-preds)
+ 	(s-gtyp-gen, s-iov): Use the top level move-if-change.
+ 	* objc/Make-lang.in (objc/objc-parse.y): Likewise.
+ 
+ 2004-02-19  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	* config/i386/i386.md (doloop_end_internal): Use nonimmediate_operand
+ 	for operand2.  Add condition that requires register_operand operand2
+ 	before reload.
+ 
+ 2004-02-19  Richard Sandiford  <rsandifo@redhat.com>
+ 	    Maciej W. Rozycki  <macro@ds2.pg.gda.pl>
+ 
+ 	* config/mips/mips.c (mips_address_insns): Treat BLKmode specially.
+ 	* config/mips/mips.md: Expand comment above unaligned loads and stores.
+ 
+ 2004-02-19  Richard Henderson  <rth@redhat.com>
+ 
+ 	* Makefile.in (STRICT2_WARN): Add -Wno-variadic-macros.
+ 	* tree.c (build0, build1, build2, build3, build4): Split out from...
+ 	(build): ... here.  Call them.
+ 	* tree.h (build, _buildN1, _buildN2, _buildC1, _buildC2): New.
+ 
+ 	* convert.c (convert_to_integer): Remove extra build argument.
+ 	* tree-inline.c (expand_call_inline): Likewise.
+ 
+ 2004-02-19  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-opts.c (warn_variadic_macros): New.
+ 	(c_common_handle_option): Set it.
+ 	(sanitize_cpp_opts): Copy it to cpp_opts.
+ 	* c.opt (Wvariadic-macros): New.
+ 	* cpplib.h (struct cpp_options): Add warn_variadic_macros.
+ 	* cppinit.c (cpp_create_reader): Initialize it.
+ 	* cppmacro.c (parse_params): Check it.
+ 
+ 2004-02-19  David Daney <ddaney@avtrex.com>
+ 
+ 	PR preprocessor/14198
+ 	* config/mips/linux.h (TARGET_OS_CPP_BUILTINS): Add
+ 	builtin_assert ("machine=mips")
+ 
+ 2004-02-19  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* opts.c (decode_options): Don't use DEFAULT_SHORT_ENUMS.
+ 	* system.h (DEFAULT_SHORT_ENUMS): Poison.
+ 	* config/cris/cris.h: Remove a comment about
+ 	DEFAULT_SHORT_ENUMS.
+ 	* config/ip2k/ip2k.h: Likewise.
+ 	* doc/tm.texi (DEFAULT_SHORT_ENUMS): Remove.
+ 
+ 2004-02-19  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* config/ia64/ia64.c (ia64_function_arg): In big-endian mode,
+ 	when passing single SFmode quantities in general registers,
+ 	put them in the high half.
+ 
+ 2004-02-19  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* doc/md.texi (Standard Names): Document additional dependency on
+ 	fix pattern.
+ 
+ 	* optabs.c (ftruncify): Remove.
+ 	(expand_fix): Manually inline ftruncify above.
+ 	(can_fix_p): Add FIXME note.
+ 
+ 2004-02-19  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* config/rs6000/spe.md (spe_fixunssfsi2): Rename to
+ 	spe_fixuns_truncsfsi2.
+ 
+ 	* config/rs6000/rs6000.md (fixunssfsi2): Rename to
+ 	fixuns_truncsfsi2.
+ 
+ 2004-02-19  Steve Ellcey  <sje@cup.hp.com>
+ 
+ 	* config/ia64/ia64.h (HARD_REGNO_CALLER_SAVE_MODE): New macro.
+ 	* testsuite/gcc.dg/20040219-1.c: New test.
+ 
+ 2004-02-19  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390.md ("*subdf3_cc", "*subdf3_cconly", "*subsf3_cc",
+ 	"*subsf3_cconly"): Subtraction is not commutative.
+ 
+ 2004-02-19  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* sdbout.c (preinit_symbols, sdbout_initialized): New statics.
+ 	(sdbout_symbol): If called before sdbout_init, queue DECL for
+ 	later and return.
+ 	(sdbout_init): Set sdbout_initialized true, process decls
+ 	queued earlier by sdbout_symbol.
+ 	(sdbout_finish): Use size_t for index variable.
+ 
+ 2004-02-19  Jeff Law  <law@redhat.com>
+ 
+ 	* fold-const.c (invert_truthvalue): Do not call invert_tree_comparison
+ 	for unordered comparison codes.
+ 
+ 2004-02-19  Ian Lance Taylor  <ian@wasabisystems.com>
+ 
+ 	* reload1.c (reload): Correct comment.
+ 	(scan_paradoxical_subregs): Remove #if 0 and old comment.
+ 	* doc/extend.texi (Local Reg Vars): Remove obsolete comment that
+ 	register variables are not used by reload.
+ 
+ 2004-02-19  Hans-Peter Nilsson  <hp@axis.com>
+ 
+ 	PR target/14209
+ 	* config/cris/cris.md ("*andsi_movu", "*andhi_movu"): Tweak
+ 	constraints to not match postincrement.  Adjust the predicate to
+ 	exclude a volatile memory reference.
+ 
+ 2004-02-19  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/mcore/mcore.h (ASM_OUTPUT_EXTERNAL): Remove.
+ 
+ 2004-02-19  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* hooks.c (hook_void_tree_int): Remove.
+ 	(hook_void_constcharptr): Likewise.
+ 	(hook_int_void_0): Likewise.
+ 	* hooks.h: Remove the prototypes for the above three
+ 	functions.
+ 	* targhooks.c (hook_bool_machine_mode_true): Remove.
+ 	* targhooks.h: Remove the prototype for
+ 	hook_bool_machine_mode_true.
+ 
+ 2004-02-19  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* emit-rtl.c (subreg_realpart_p): Remove.
+ 	(reorder_insns_with_line_notes): Likewise.
+ 	(end_full_sequence): Likewise.
+ 	* rtl.h: Remove the prototype for the above functions.
+ 
+ 2004-02-19  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/arc/arc.h, config/arm/arm.h, config/frv/frv.h,
+ 	config/h8300/h8300.h, config/i386/i386.h, config/i860/i860.h,
+ 	config/iq2000/iq2000.h, config/m32r/m32r.h,
+ 	config/pdp11/pdp11.h, config/sparc/sparc.h,
+ 	config/xtensa/xtensa.h: Remove commented-out or useless
+ 	definitions of CASE_VECTOR_PC_RELATIVE.
+ 
+ 2004-02-19  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* loop.c (all_sets_invariant_p): Remove.
+ 
+ 2004-02-19  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR target/12916
+ 	* config/sparc/sparc.h (NPARM_REGS): Delete.
+ 	(BASE_RETURN_VALUE_REG): Likewise.
+ 	(BASE_OUTGOING_VALUE_REG): Likewise.
+ 	(BASE_PASSING_ARG_REG): Likewise.
+ 	(BASE_INCOMING_ARG_REG): Likewise.
+ 	* config/sparc/sparc.c (sparc_strict_argument_naming): Test
+ 	TARGET_ARCH64, not TARGET_V9.
+ 	(function_arg_slotno): Dispatch based on the mode class.
+ 	Handle vector modes like floating-point modes.
+ 	(function_arg_record_value_1): Handle vector types like
+ 	floating-point types.
+ 	(function_arg_record_value_2): Likewise.
+ 	Calculate regno after mode transformation.
+ 	(function_arg): Handle vector modes like floating-point modes.
+ 	(function_arg_partial_nregs): Replace NPARM_REGS by SPARC_INT_ARG_MAX.
+ 	If ARCH64, do not recheck alignment.
+ 	(function_arg_pass_by_reference): Reorder the conditions.
+ 	(sparc_return_in_memory): Move after function_arg_padding.
+ 	Implement calling conventions for vector modes.
+ 	(sparc_struct_value_rtx): Move after sparc_return_in_memory.
+ 	(function_value): Move scope of 'regbase'.
+ 	Implement calling conventions for vector modes.
+ 	(sparc_builtin_saveregs): Replace NPARM_REGS by SPARC_INT_ARG_MAX
+ 	and BASE_INCOMING_ARG_REG by SPARC_INCOMING_INT_ARG_FIRST.
+ 	(sparc_va_arg): Use function_arg_pass_by_reference to test whether
+ 	the argument is passed by reference.
+ 	(sparc_type_code): Handle vector types.
+ 
+ 2004-02-19  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* function.c (assign_parms): When building decl_rtl for
+ 	SPLIT_COMPLEX_ARGS, ensure inner modes of concat match outer.
+ 
+ 2004-02-19  Olivier Hainque  <hainque@act-europe.fr>
+ 
+ 	* expr.c (is_aligning_offset): Check if we are aligning the
+ 	expressions's address over BIGGEST_ALIGNMENT in bytes, not
+ 	in bits.
+ 
+ 2004-02-18  Matt Austern  <austern@apple.com>
+ 
+ 	* gcc.c (LIBGCC_SPEC): If REAL_LIBGCC_SPEC is defined, and
+ 	LIBGCC_SPEC isn't, set LIBGCC_SPEC to REAL_LIBGCC_SPEC.
+ 	(init_gcc_spec): Don't define or call if REAL_LIBGCC_SPEC is
+ 	defined.  Instead use REAL_LIBGCC_SPEC, unmodifed, as the libgcc
+ 	spec string.
+ 	* doc/tm.texi (REAL_LIBGCC_SPEC): Document.
+ 
+ 2004-02-18  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* dwarf2out.c (loclabel_num): Move outside #ifdef
+ 	DWARF2_DEBUGGING_INFO and mark with GTY(()).
+ 	* config/ia64/ia64.c (struct extern_func_list,extern_func_head):
+ 	Mark with GTY(()).
+ 	(ia64_hpux_add_extern_decl): Save the decl, not the name string.
+ 	Allocate memory with ggc_alloc.  No need to copy anything.
+ 	(ia64_hpux_file_end): Update to match.
+ 
+ 2004-02-18  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* config/i386/i386.c (override_options): Don't imply 3DNow! for -m64
+ 	by default.
+ 
+ 2004-02-18  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390.md ("divmodtidi3"): Use canonical RTL.
+ 	("divmodtisi3"): Likewise.
+ 	("udivmoddi4", "udivmodtidi3"): Likewise.
+ 	("divmodsi4", "divmoddisi3"): Likewise.
+ 	("udivmodsi4", "udivmoddisi3"): Likewise.
+ 	("udivsi3", "umodsi3"): Likewise.
+ 
+ 2004-02-18  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390.c (s390_mainpool_start): Delete the main pool
+ 	placeholder insn when chunkifying the pool.
+ 
+ 2004-02-18  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	* pa.h (PIC_OFFSET_TABLE_REGNUM): Define to INVALID_REGNUM when not
+ 	generating PIC code.
+ 
+ 2004-02-18  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300-protos.h: Add a prototype for
+ 	h8300_expand_branch.
+ 	* config/h8300/h8300.c (h8300_expand_branch): New.
+ 	* config/h8300/h8300.md (ble, bleu, bge, bgeu, blt, bltu, bgt,
+ 	bgtu, beq, bne): Call h8300_expand_branch().
+ 
+ 2004-02-18  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300-protos.h: Add prototypes for
+ 	h8300_hard_regno_nregs and h8300_hard_regno_mode_ok.
+ 	* config/h8300/h8300.c (h8300_hard_regno_nregs): New.
+ 	(h8300_hard_regno_mode_ok): Likewise.
+ 	* config/h8300/h8300.h (HARD_REGNO_NREGS): Call
+ 	h8300_hard_regno_nregs().
+ 	(HARD_REGNO_MODE_OK): Call h8300_hard_regno_mode_ok().
+ 
+ 2004-02-18  Per Bothner  <per@bothner.com>
+ 
+ 	* cpphash.h (struct cpp_buffer):  Restore return_at_eof field.  This
+ 	partly reverts my 2003-10-01 change, because we're back to logically
+ 	including <command line> inside the main line.
+ 	* cpplex.c (_cpp_get_fresh_line):  Check return_at_eof field.
+ 	* cppmacro.c (cpp_scan_nooutput):  Set return_at_eof of current buffer.
+ 	Fixes PR preprocessor/14103.
+ 
+ 	* cppfiles.c (_cpp_stack_include):  When appropriate decrement
+ 	line_table's highest_location, fixing LAST_SOURCE_LINE_LOCATION.
+ 	(cpp_push_include):  Don't need to increment pfile's line field.
+ 	* line-map.h (LAST_SOURCE_LINE_LOCATION):  Only decrement by 1.
+ 
+ 	* c-ppoutput.c (print struct):  New first_time field.
+ 	(init_pp_output):  Set print.first_time.
+ 	(pp_file_change):  Use print.first_time, rather than MAIN_FILE_P,
+ 	which is set also for (say) <command line>.  Clear print.first_time.
+ 
+ 	* cppfiles.c (struct _cpp_file):  Comment and type for pch field
+ 	does not match the code, so fix both.
+ 	(should_stack_file):  Inline include_pch_p function.
+ 	(include_pch_p):  Remove pointless function.
+ 
+ 	* cpphash.h (struct cpp_buffer):  Remove unused search_cached field.
+ 
+ 2004-02-18  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300.md (four define_peephole2's): Use
+ 	h8300_regs_ok_for_stm().
+ 
+ 2004-02-18  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300-protos.h: Update the prototype for
+ 	expand_a_rotate().
+ 	* config/h8300/h8300.c (expand_a_rotate): Remove the first
+ 	argument.
+ 	* config/h8300/h8300.md: Update all callers.
+ 
+ 2004-02-18  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* simplify-rtx.c (simplify_unary_operation): Deal with logicals on
+ 	floats.
+ 	(simplify_binary_operation): Deal with logicals on floats.
+ 
+ 	* i386.md (SSE fabs splitters): Emit new patterns.
+ 	(SSE cmov splitters): Likewise.
+ 	(sse_andv4sf3, sse_nandv4sf3, sse_iorv4sf3, sse_xorv4sf3
+ 	(sse_andv2df3, sse_nandv2df3, sse_iorv2df3, sse_xorv2df3): Do not use
+ 	subregs.
+ 	(sse_andsf3, sse_nandsf3, sse_xorsf3): Kill.
+ 	(sse_anddf3, sse_nanddf3, sse_xordf3): Kill.
+ 
+ 2004-02-18  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300.c (expand_a_rotate): Don't generate insns
+ 	by hand.
+ 	(output_a_rotate): Tweak a comment.
+ 	* config/h8300/h8300.md (*rotlqi3_1): Change to rotlqi3_1.
+ 	(*rotlhi3_1): Change to rotlhi3_1.
+ 	(*rotlsi3_1): Change to rotlsi3_1.
+ 
+ 2004-02-18  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	PR target/13866
+ 	* arm.c (load_multiple_operation): Don't insist that the source reg
+ 	of a post-increment component is the same as the destination.
+ 	(store_multiple_operation): Likewise.
+ 
+ 2004-02-18  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300.md: Move movsf patterns into one section
+ 	of the file.
+ 
+ 2004-02-18  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* cfgloop.h, cfgloopanal.c, cpplex.c, except.h, loop-init.c,
+ 	loop-unroll.c, scan-decls.c, scan.h, stor-layout.c,
+ 	xcoffout.c, xcoffout.h, config/arm/mmintrin.h,
+ 	config/mips/linux64.h, config/pa/pa-64.h,
+ 	config/rs6000/aix51.h, config/rs6000/aix52.h,
+ 	config/rs6000/spe.md, config/sparc/linux.h,
+ 	config/sparc/linux64.h: Update copyright.
+ 
+ 2004-02-18  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300.md: Move push patterns into one
+ 	section of the file.
+ 
+ 2004-02-18  Mark Mitchell <mark@codesourcery.com>
+ 
+ 	PR c++/11326
+ 	* config/ia64/ia64.c (ia64_struct_value_rtx): Cope with NULL
+ 	fntype.
+ 
+ 2004-02-18  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* rtlanal.c (rtx_varies_p): Return 0 for NULL_RTX
+ 
+ 2004-02-18  Paul Brook  <paul@codesourcery.com>
+ 
+ 	PR debug/12934
+ 	* dwarf2out.c (loc_descriptor_from_tree): Handle
+ 	EXPR_WITH_FILE_LOCATION.
+ 
+ 2004-02-18  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* config/i386/i386.md (zero_extendqidi2, zero_extendqidi2,
+ 	testdi_1_rex64, anddi_2, xordi_1_rex64, xordi_2_rex64): Remove
+ 	trailing whitespace from instructions.
+ 
+ 2004-02-17  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* configure.ac: When generating auto-build.h, pass
+ 	--enable-languages to the sub-configure.
+ 	Put quotes around ${program_transform_name} when generating
+ 	name of as, ld, nm, objdump.
+ 	* configure: Regenerate.
+ 
+ 2004-02-17  Matt Kraai  <kraai@alumni.cmu.edu>
+ 
+ 	* Makefile.in (s-check, s-config, s-conditions, s-flags)
+ 	(s-codes, s-constants, s-emit, s-recog, s-opinit, s-extract)
+ 	(s-peep, s-attr, s-attrtab, s-output, s-genrtl, s-modes)
+ 	(s-preds, s-iov): Do not depend on move-if-change.
+ 
+ 2004-02-17  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	* caller-save.c (insert_restore): Pass mem through copy_rtx.
+ 	(insert_save): Likewise.
+ 
+ 2004-02-17  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300.c (h8300_emit_stack_adjustment): Fix a
+ 	warning.
+ 
+ 2004-02-17  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300.md (*one_complsi2_h8300): Change to
+ 	*one_cmplsi2_h8300.
+ 	(*one_complsi2_h8300hs): Change to *one_cmplsi2_h8300hs.
+ 
+ 2004-02-17  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300-protos.h: Update the prototype of
+ 	fix_bit_operand().
+ 	* config/h8300/h8300.c (fix_bit_operand): Remove the second
+ 	argument "what".
+ 	* config/h8300/h8300.md: Update all callers.
+ 
+ 2004-02-17  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300.c (fix_bit_operand): Change the name of
+ 	the last argument to "code" from "type".
+ 
+ 2004-02-17  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300.c: Remove an extern declaration of
+ 	rtx_equal_function_value_matters.
+ 
+ 2004-02-17  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300.c (fix_bit_operand): Don't generate insns
+ 	by hand.
+ 	* config/h8300/h8300.md (*andqi3_1): Change to andqi3_1.
+ 	(*iorqi3_1): Change to iorqi3_1.
+ 	(*xorqi3_1): Change to xorqi3_1.
+ 
+ 2004-02-17  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* c-common.c, cfghooks.c, rtlanal.c, varasm.c: Fix comment
+ 	typos.
+ 
+ 2004-02-17  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* i386.c (x86_prologue_using_move, x86_epilogue_using_move): Disable for P4.
+ 
+ 2004-02-18  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	PR optimization/14119
+ 	* combine.c (try_combine): When attemting to fix unrecognized insns,
+ 	don't delete SETs marked with REG_EH_REGION notes.
+ 
+ 2004-02-17  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* combine.c (simplify_if_then_else): Do not replace
+ 	(if_then_else (ne reg 0) (0) (const_int)) by (reg) if the
+ 	modes differ.
+ 
+ 2004-02017  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* (c-decl.c, c-semantics.c, calls.c, cgraph.c, cgraphunit.c,
+ 	function.c, integrate.c, print-tree.c, toplev.c, tree-optimize.c,
+ 	tree.h): Replace DECL_SAVED_INSNS with DECL_STRUCT_FUNCTION.
+ 	* ada/utils.c: Likewise.
+ 	* cp/decl.c: Likewise.
+ 	* f/com.c: Likewise.
+ 	* java/class.c: Likewise.
+ 
+ 2004-02-17  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300.md: Fix comment typos.
+ 
+ 2004-02-17  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+ 
+ 	* config/mips/t-iris6gld: Renamed to ...
+ 	* config/mips/t-irix-gld: ... this.
+ 	* config.gcc (mips-sgi-irix6*): Reflect this
+ 	(mips-sgi-irix5*): Use it with GNU ld.
+ 
+ 	* config/mips/irix6-crti.asm, config/mips/irix6-crtn.asm: Renamed
+ 	to ...
+ 	* config/mips/irix-crti.asm, config/mips/irix-crtn.asm: ... this.
+ 	* config/mips/t-irix-gld: Reflect this.
+ 	* config/mips/iris6gld.h (STARTFILE_SPEC, ENDFILE_SPEC): Likewise.
+ 
+ 	* config/mips/iris5gld.h: New file.
+ 	* config.gcc (mips-sgi-irix5*): Use it with GNU ld.
+ 	Only use collect2 without gas.
+ 
+ 	* config/mips/iris6.h (IRIX6_STARTFILE_SPEC, IRIX6_ENDFILE_SPEC):
+ 	Renamed to IRIX_STARTFILE_SPEC, IRIX_ENDFILE_SPEC.
+ 	(STARTFILE_SPEC, ENDFILE_SPEC, SUBTARGET_EXTRA_SPECS): Reflect this.
+ 	* config/mips/iris6gld.h (STARTFILE_SPEC, ENDFILE_SPEC): Likewise.
+ 
+ 	* config/mips/iris6.h (SUBTARGET_EXTRA_SPECS): Moved ...
+ 	* config/mips/iris5.h: ... here.
+ 
+ 	* config/mips/iris5.h (STARTFILE_SPEC, ENDFILE_SPEC): Renamed to
+ 	IRIX_STARTFILE_SPEC, IRIX_ENDFILE_SPEC.
+ 	(STARTFILE_SPEC, ENDFILE_SPEC): Define.
+ 
+ 	* config/mips/iris5gas.h (STARTFILE_SPEC, ENDFILE_SPEC): Simplify
+ 	using irix_startfile_spec, irix_endfile_spec.
+ 
+ 2004-02-16  Gunther Nikl  <gni@gecko.de>
+ 
+ 	* config/m68k/m68k.c: Remove obsolete support for HPUX_ASM.
+ 
+ 2004-02-17  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300.c (h8300_expand_prologue): Don't generate
+ 	insns by hand.
+ 
+ 2004-02-17  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* cfghooks.c (split_edge): Speed up updating of dominators.
+ 
+ 2004-02-17  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	PR c++/11326
+ 	* c-common.c (flag_abi_version): Remove.
+ 	* c-common.h (flag_abi_version): Likewise.
+ 	* c-opts.c (c_common_handle_option): Remove OPT_fabi_version case.
+ 	* c.opt (fabi-version): Remove.
+ 	* calls.c (expand_call): Always pass a function type to
+ 	struct_value_rtx.  Use convert_memory_address.
+ 	* common.opt (fabi-version): Add it.
+ 	* flags.h (flag_abi_version): Likewise.
+ 	(abi_version_at_least): New macro.
+ 	* opts.c (common_handle_option): Add OPT_fabi_version.
+ 	* toplev.c (flag_abi_version): Define it.
+ 	* config/ia64/ia64.c (ia64_struct_retval_addr_is_first_parm_p):
+ 	New function.
+ 	(ia64_output_mi_thunk): Use it.
+ 	(ia64_struct_value_rtx): Likewise.
+ 
+ 2004-02-17  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300.c (h8300_emit_stack_adjustment):
+ 	Don't generate insns by hand.
+ 
+ 2004-02-17  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR c++/14178
+ 	* doc/invoke.texi (fabi-version): The default is 2 now.
+ 
+ 2004-02-17  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* loop-iv.c: New file.
+ 	* Makefile.in (loop-iv.o): New.
+ 	* basic_block.h (FOR_BB_INSNS, FOR_BB_INSNS_REVERSE): New macros.
+ 	* cfgloop.c (fill_sons_in_loop, get_loop_body_in_dom_order,
+ 	num_loop_branches): New functions.
+ 	* cfgloop.h (get_loop_body_in_dom_order, num_loop_branches,
+ 	iv_analysis_loop_init, iv_get_reaching_def, iv_analyse, get_iv_value,
+ 	find_simple_exit, iv_number_of_iterations, iv_analysis_done,
+ 	get_simple_loop_desc, free_simple_loop_desc): Declare.
+ 	(simple_loop_desc): New inline function.
+ 	(struct rtx_iv, struct niter_desc): New.
+ 	* cfgloopmanip.c (loopify): Specify semantics more precisely.
+ 	* expr.c (force_operand): Handle subregs of expressions created by
+ 	loop unroller.
+ 	* loop-init.c (loop_optimizer_init, loop_optimizer_finalize): Move
+ 	parts of the initialization to toplev.c
+ 	* loop-unroll.c (loop_exit_at_end_p): New.
+ 	(unroll_and_peel_loops): Call iv_analysis_done.
+ 	(decide_peel_once_rolling, decide_peel_completely,
+ 	decide_unroll_stupid, decide_unroll_constant_iterations,
+ 	decide_unroll_runtime_iterations, decide_peel_simple,
+ 	peel_loop_simple, unroll_loop_stupid, unroll_loop_constant_iterations,
+ 	unroll_loop_runtime_iterations): Use new simple loop analysis.
+ 	* loop-unswitch.c (compare_and_jump_seq): New.
+ 	(may_unswitch_on_p): Renamed to ...
+ 	(may_unswitch_on): Use new iv analysis.
+ 	(reversed_condition): Export.
+ 	(unswitch_single_loop, unswitch_loop): Use new iv analysis.
+ 	* predict.c (estimate_probability): Use new simple loop analysis.
+ 	* rtl.h (get_mode_bounds, reversed_condition,compare_and_jump_seq,
+ 	canon_condition, simplify_using_condition): Declare.
+ 	* stor-layout.c (get_mode_bounds): New.
+ 	* toplev.c (rest_of_handle_loop2): Some parts of
+ 	initialization/finalization moved here from loop-init.c.
+ 
+ 2004-02-17  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300.h (FIXED_REGISTERS): Add the soft frame
+ 	pointer.
+ 	(CALL_USED_REGISTERS): Likewise.
+ 	(REG_ALLOC_ORDER): Likewise.
+ 	(REG_CLASS) <GENERAL_REGS>: Likewise.
+ 
+ 2004-02-16  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* doc/md.texi (Insn Canonicalizations): Document left-chaining
+ 	in associative operators.
+ 	* rtlanal.c (commutative_operand_precedence): Create some new
+ 	variables.  Prefer a commutative operand on the left, then
+ 	binary expressions, then NEG and NOT.
+ 
+ 2004-02-16  Matthias Klose  <doko@debian.org>
+ 
+ 	* config/t-slibgcc-elf-ver: Define SHLIB_NAME and SHLIB_SONAME
+ 	in terms of SHLIB_SOVERSION.
+ 	* config/m68k/t-slibgcc-elf-ver: New file.
+ 	* config/pa/t-slibgcc-elf-ver: New file.
+ 	* config.gcc (m68k-linux, parisc-linux): Use them when not
+ 	sjlj exceptions are not configured.
+ 
+ 2004-02-16  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* config/sparc/sparc.c (get_pc_symbol_name): Mark with GTY(()).
+ 
+ 2004-02-16  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* sdbout.c (sdb_debug_hooks): Correct the type_decl entry.
+ 
+ 2004-02-16  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* doc/sourcebuild.texi: Mention backends.html.
+ 
+ 2004-02-16  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* c-decl.c, c-ppoutput.c, cpphash.h, cpplib.h, dbxout.c,
+ 	line-map.c, line-map.h, var-tracking.c: Fix comment
+ 	formatting.
+ 
+ 2004-02-16  Richard Henderson  <rth@redhat.com>
+ 
+ 	* cse.c (cse_insn): Don't lose REG_NON_LOCAL_GOTO note.
+ 
+ 	* fold-const.c (operand_equal_p): Fix VECTOR_CST comparison.
+ 
+ 2004-02-15  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300.md: Remove unnecessary parallels from
+ 	all define_insn and define_split patterns.
+ 
+ 2004-02-15  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300.md: Remove explicit (set_attr "cc"
+ 	"clobber").
+ 
+ 2004-02-15  Bernardo Innocenti  <bernie@develer.com>
+ 
+ 	* config/m68k/m68k.h (PRINT_OPERAND_PUNCT_VALID_P): Restore support for
+ 	'%#'.
+ 
+ 2004-02-15  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/ia64/ia64.c, config/mips/mips.c,
+ 	config/mmix/mmix-modes.def: Fix comment typos.
+ 
+ 2004-02-15  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* c-common.h (GET_DIRECTIVE_LINE): Remove unused macro.
+ 	(get_directive_line): Remove unused function prototype.
+ 
+ 2004-02-14  Josef Zlomek  <zlomekj@suse.cz>
+ 
+ 	* tree-inline.c (copy_body_r): Do not replace ret_label.
+ 
+ 2004-02-14  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* i386.c (x86_four_jump_limit): New variable.
+ 	(k8_avoid_jump_misspredicts): Rename to ...
+ 	(ix86_avoid_jump_misspredicts): .. this one.
+ 	(ix86_pad_returns): Break out from ...
+ 	(ix86_reorg): ... this one; do ix86_avoid_jump_misspredicts when asked
+ 	to.
+ 	* i386.h (TARGET_FOUR_JUMP_LIMIT): New macro.
+ 
+ 2004-02-14  Josef Zlomek  <zlomekj@suse.cz>
+ 
+ 	* emit-rtl.c (set_decl_incoming_rtl): Check whether the 0th element of
+ 	PARALLEL is NULL.
+ 
+ 2004-02-14  Per Bothner  <per@bothner.com>
+ 
+ 	* fix-header.c (line_table):  Move local variable in main to global.
+ 	* scan.h (line_table):  Use it.
+ 	* scan-decls.c (scan_decls):  Need to call linemap_lookup on token's
+ 	line (recently renamed to src_loc) before calling recognized_function.
+ 
+ 2004-02-14  Matt Kraai  <kraai@alumni.cmu.edu>
+ 
+ 	* Makefile.in: Fix comment typos.
+ 
+ 2004-02-14  Olivier Hainque  <hainque@act-europe.fr>
+ 
+ 	* loop.c (check_dbra_loop): Use gen_int_mode instead of GEN_INT
+ 	for start_value when it is directly moved into reg, and factorize
+ 	the retrieval of GET_MODE (reg).
+ 
+ 2004-02-14  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips-protos.h (mips_load_got_page): Delete.
+ 	(mips_load_got_global): Delete.
+ 	(mips_gotoff_page): Declare.
+ 	* config/mips/mips.md (UNSPEC_LOAD_GOT): New constant.
+ 	(*xgot_lo[sd]i, *got_disp[sd]i, *got_page[sd]i): Build an
+ 	UNSPEC_LOAD_GOT pattern rather than a MEM.
+ 	(*load_got[sd]i): New patterns.
+ 	* config/mips/mips.c (mips_got_alias_set, mips_load_got): Delete.
+ 	(mips_load_got_page, mips_load_got_global): Delete.
+ 	(mips_gotoff_page): New function.
+ 	(override_options): Don't initialize mips_got_alias_set.
+ 
+ 2004-02-14  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.h (MASK_DEBUG_[ABEFI], TARGET_DEBUG_[ABEFI]_MODE)
+ 	(TARGET_MIPS4100, TARGET_MIPS4300, TARGET_MIPS4KC, TARGET_MIPS5KC)
+ 	(TARGET_SB1, TUNE_SB1, TUNE_SR71K, BIGGEST_MAX_ARGS_IN_REGISTERS)
+ 	(GO_PRINTF, GO_PRINTF2, GO_DEBUG_RTX, DFMODE_NAN, SFMODE_NAN): Delete.
+ 	(TARGET_SWITCHES): Remove MASK_DEBUG_[ABEFI].
+ 	* config/mips/mips.c: Fix some overly-long lines.
+ 	(SINGLE_WORD_MODE_P, PIC_OFFSET_TABLE_MASK): Delete.
+ 	(init_cumulative_args): Remove TARGET_DEBUG_E_MODE handling.
+ 
+ 2004-02-13  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+ 
+ 	* configure.ac: Search for as, ld below libexec/gcc.
+ 	* configure: Regenerate.
+ 
+ 2004-02-14  Ben Elliston  <bje@wasabisystems.com>
+ 
+ 	* config/arm/mmintrin.h (_mm_setwcx): Reverse arguments in call to
+ 	__builtin_arm_setwcx ().
+ 	* config/arm/arm.c (arm_expand_builtin): Generate operands
+ 	correctly and reverse their order in call to gen_iwmmxt_tmcr ().
+ 
+ 2004-02-14  Ben Elliston  <bje@wasabisystems.com>
+ 
+ 	* config/arm/arm.c (bdesc_2arg): Correct builtin names "wmulsh"
+ 	and "wmuluh" to "wmulsm" and "wmulum", respectively.
+ 	* config/arm/arm.h (enum arm_builtins): Rename enumerators to
+ 	ARM_BUILTIN_WMULSM and ARM_BUILTIN_WMULUM.
+ 	* config/arm/mmintrin.h (_mm_mulhi_pi16): Update intrinsic call.
+ 	(_mm_mulhi_pu16): Likewise.
+ 
+ 2004-02-13  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* xcoffout.c (xcoff_assign_fundamental_type_number): Check
+ 	DECL_NAME != 0 before dereferencing.
+ 
+ 2004-02-13  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390-protos.h (s390_output_symbolic_const): Remove.
+ 	(s390_output_addr_const_extra): Declare.
+ 	(s390_output_pool_entry): Remove FILE * argument.
+ 	* config/s390/s390.c (s390_output_symbolic_const): Remove.
+ 	(s390_output_addr_const_extra): New function.
+ 	(print_operand_address): Call output_addr_const instead of
+ 	s390_output_symbolic_const.
+ 	(print_operand): Likewise.
+ 	(s390_output_pool_entry): Use assemble_integer for symbolic constants.
+ 	Remove FILE * argument.
+ 	* config/s390/s390.h (OUTPUT_ADDR_CONST_EXTRA): Define.
+ 	* config/s390/s390.md ("*pool_entry"): Adapt s390_output_pool_entry
+ 	call.
+ 
+ 2004-02-13  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* cfgloopanal.c (mark_irreducible_loops): Rewriten.
+ 	(struct edge, struct vertex, struct graph): New.
+ 	(dump_graph, new_graph, add_edge, dfs, check_irred, for_each_edge,
+ 	free_graph): New functions.
+ 
+ 2004-02-12  Chris Demetriou  <cgd@broadcom.com>
+ 
+ 	* config/mips/mips.md (casesi_internal, casesi_internal_di):
+ 	Use ".set macro" to avoid warnings about multi-instruction
+ 	macros, since they're intentional.
+ 
+ 2004-02-12  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* config/darwin.h: Add include guards.  Remove old, now incorrect,
+ 	comment about STANDARD_EXEC_PREFIX.
+ 
+ 	* Makefile.in (install-man): Use $(CPP_INSTALL_NAME) and
+ 	$(GCOV_INSTALL_NAME) to install manpages.  Remove generic rule
+ 	for installing .1 manpages.  Add rules for installing cpp
+ 	and gcov manpages under their installed names.
+ 
+ 2004-02-12  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	* configure.ac (gcc_cv_ld): Don't set to LD if target is not
+ 	host, but try LD_FOR_TARGET first.
+ 	* configure: Rebuilt.
+ 
+ 2004-02-12  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* dbxout.c: Move declaration of dbxout_type_decl outside
+ 	#ifdef DBX_DEBUGGING_INFO.
+ 	* c-parse.in: Don't give the asmdef production a type.
+ 
+ 2004-02-12  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* debug.h (struct gcc_debug_hooks): Add type_decl field.
+ 	(debug_nothing_tree_int): Prototype.
+ 	(dwarf_debug_hooks): Delete, unused.
+ 	* debug.c (do_nothing_debug_hooks): Update.
+ 	(debug_nothing_tree_int): New function.
+ 	* langhooks.h (struct lang_hooks_for_decls):
+ 	Remove builtin_type_decls field.
+ 	* langhooks-def.h (LANG_HOOKS_BUILTIN_TYPE_DECLS): Delete.
+ 	(LANG_HOOKS_DECLS): Update.
+ 	* toplev.c (rest_of_decl_compilation, rest_of_type_compilation):
+ 	Use debug_hooks->type_decl.
+ 	* dbxout.c (preinit_symbols): New static.
+ 	(dbx_debug_hooks, xcoff_debug_hooks): Update.
+ 	(dbxout_init): Don't call DBX_OUTPUT_STANDARD_TYPES or
+ 	lang_hooks.decls.builtin_type_decls.  Do scan preinit_symbols
+ 	for symbols to output.
+ 	(dbxout_type_decl): New function.
+ 	(dbxout_symbol): If called before dbxout_init has run, queue
+ 	the symbol for later.  Apply DBX_ASSIGN_FUNDAMENTAL_TYPE_NUMBER
+ 	to TYPE_DECLs before emitting them.
+ 	* xcoffout.c (assign_type_number): Delete.
+ 	(xcoff_type_numbers): New static table.
+ 	(xcoff_assign_fundamental_type_number): New function.
+ 	* xcoffout.h: Define DBX_ASSIGN_FUNDAMENTAL_TYPE_NUMBER, not
+ 	DBX_OUTPUT_STANDARD_TYPES.  Remove unnecessary #ifdefs.
+ 	* sdbout.c: Include varray.h.
+ 	(deferred_global_decls): New static.
+ 	(sdb_debug_hooks): Update.
+ 	(sdbout_global_decl): If we can't emit something right now,
+ 	remember it in deferred_global_decls.
+ 	(sdbout_finish): Just scan deferred_global_decls; don't call getdecls.
+ 	(sdbout_init): Initialize deferred_global_decls.
+ 	* Makefile.in: Update dependencies of sdbout.o.
+ 	* dwarf2out.c (dwarf2out_type_decl): New function.
+ 	(dwarf2_debug_hooks): Update.
+ 	* vmsdbgout.c (vmsdbg_debug_hooks): Update.
+ 	* c-decl.c (getdecls): Just return 0.
+ 	(check_for_loop_decls): Don't use getdecls.
+ 	(record_builtin_type): Call debug_hooks->type_decl on the TYPE_DECL.
+ 	* c-objc-common.c (c_objc_common_finish_file): Don't use getdecls.
+ 
+ 2004-02-12  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390.c (s390_sched_reorder2): Remove.
+ 	(TARGET_SCHED_REORDER2): Do not redefine.
+ 
+ 2004-02-12  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* c-parse.in (maybe_type_qual): Delete.
+ 	(maybe_volatile, simple_asm_expr, asmdef, asm_stmt)
+ 	(asm_argument): New grammar rules.
+ 	(extdef_1): Use asmdef.
+ 	(maybeasm): Move down with other asm rules; use simple_asm_expr.
+ 	(xexpr): Move up with other expression rules.
+ 	(stmt): Use asm_stmt.
+ 
+ 	* c-typeck.c (build_asm_expr): New function - body mostly
+ 	pulled from build_asm_stmt.
+ 	(build_asm_stmt): Just handle tacking on the volatile qualifier.
+ 	* c-tree.h (build_asm_expr, build_asm_stmt): Update prototypes.
+ 
+ 2004-02-12  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	PR bootstrap/13617
+ 	* config/mips/mips-protos.h (mips_output_aligned_decl_common): Declare.
+ 	(mips_declare_object): Make variadic.
+ 	* config/mips/mips.h (ASM_OUTPUT_ALIGNED_DECL_COMMON): Use
+ 	mips_output_aligned_decl_common.
+ 	* config/mips/mips.c (mips_output_aligned_decl_common): New function.
+ 	(mips_declare_object): Make variadic.
+ 
+ 2004-02-12  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* function.c (update_epilogue_consts): Teach about binary operations.
+ 
+ 	* emit-rtl.c (set_mem_attributes_minus_bitpos): Don't kill
+ 	previous MEM_VOLATILE in REF.
+ 	* function.c (fixup_var_refs): Save volatile_ok and set to 1.
+ 	* expr.c (emit_block_move_via_movstr): Save and restore volatile_ok.
+ 
+ 2004-02-12  Gunther Nikl  <gni@gecko.de>
+ 
+ 	* config.gcc: Restore support for m68k-openbsd.
+ 
+ 2004-02-12  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-optimize.c (tree_rest_of_compilation): Do not release
+ 	DECL_ARGUMENTS.
+ 
+ 2004-02-11  Matt Kraai  <kraai@alumni.cmu.edu>
+ 
+ 	* doc/install.texi: Fix the spelling of "explicitly".
+ 
+ 2004-02-11  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* cppcharset.c (_cpp_interpret_string_notranslate): Rename and
+ 	duplicate argument structure of cpp_interpret_string.
+ 	* cpphash.h: Move prototype...
+ 	* cpplib.h: Here.
+ 	* cpplib.c: Fix calls to match new function signature.
+ 
+ 2004-02-11  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	PR c/456
+ 	* cppexp.c (num_binary_op): Don't allow comma operators in #if
+ 	constant expressions at all outside C99 mode if pedantic.
+ 
+ 2004-02-11  Uros Bizjak  <uros@kss-loka.si>
+ 
+ 	* optabs.h (enum optab_index): Add new OTI_log10 and OTI_log2.
+ 	(log10_optab, log2_optab): Define corresponding macros.
+ 	* optabs.c (init_optabs): Initialize log10_optab and log2_optab.
+ 	* genopinit.c (optabs): Implement log10_optab and log2_optab
+ 	using log10?f2 and log2?f2 patterns.
+ 	* builtins.c (expand_builtin_mathfn): Handle BUILT_IN_LOG10{,F,L}
+ 	using log10_optab, and BUILT_IN_LOG2{,F,L} using log2_optab.
+ 	(expand_builtin): Expand BUILT_IN_LOG10{,F,L} and BUILT_IN_LOG2{,F,L}
+ 	using expand_builtin_mathfn if flag_unsafe_math_optimizations is set.
+ 
+ 	* config/i386/i386.md (log10sf2, log10df2, log10xf2, log2sf2,
+ 	log2df2, log2xf2): New patterns to implement log10, log10f, log10l,
+ 	log2, log2f and log2l built-ins as inline x87 intrinsics.
+ 
+ 2004-02-11  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR target/1532
+ 	* flow.c (insn_dead_p): A clobber of a dead hard register is a
+ 	dead insn after reload.
+ 
+ 2004-02-11  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* tree.h (frame_base_decl): Add GTY marker.
+ 	* var-tracking.c (frame_base_decl): Likewise.
+ 
+ 2004-02-11  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* dwarf2out.c (output_loc_list): Remove no longer necessary, and now
+ 	incorrect, hunk.
+ 	(add_location_or_const_value_attribute): Use text_section_label,
+ 	not TEXT_SECTION_NAME.
+ 
+ 2004-02-11  Per Bothner  <per@bothner.com>
+ 
+ 	Represent column numbers using line-map's source_location.
+ 	The "next available source_location" is now managed internally by
+ 	line-maps.c rather than by clients.
+ 	* line-map.h (struct line_map):  New field column_bits.
+ 	<from_line>:  Rename field to start_location.
+ 	(struct line_maps):  New fields highest_location and max_column_hint.
+ 	(linemap_check_files_exited):  New declaration.
+ 	(linemap_line_start):  New declaration.
+ 	(linemap_add):  Remove from_line parameter; use highest_location field.
+ 	(SOURCE_LINE, LAST_SOURCE_LINE):  Modify to use column_bits.
+ 	(SOURCE_COLUMN, LAST_SOURCE_LINE_LOCATION):  New macros.
+ 	(CURRENT_LINE_MAP):  Remove macro.
+ 	(linemap_position_for_column):  New inline function.
+ 	* line-map.c (linemap_init):  Clear new fields.
+ 	(linemap_check_files_exited):  New function, extracted from ...
+ 	(linemap_free):  Use linemap_check_files_exited.
+ 	(linemap_add):  Remove from_line parameter.  Various updates.
+ 	(linemap_line_start):  New function.
+ 	(linemap_lookeup):  Update for new field names.
+ 	* cpphash.h (struct cpp_reader) <map>:  Field removed.  Because
+ 	linemap_position_for_column may unpredictably change the current map,
+ 	it is cleaner and simpler for us to not cache it in cpp_reader.
+ 	(struct cpp_buffer):  New sysp field.
+ 	Changed warned_cplusplus_comments and from_stage3 to bitfields.
+ 	* cppinit.c (cpp_read_min_file):  pfile->map no longer exists.
+ 	* cpplib.c (do_line, do_linemarker, _cpp_do_file_change):  Get
+ 	current map using linemap_lookup.
+ 	(do_linemarker):  Also set buffer's sysp field.
+ 	(destringize_and_run):  No longer need to decrement current line.
+ 	* cppfiles.c (_cpp_stack_file):  Set sysp from and in buffer.
+ 	(search_path_head, open_file_failed):  Use buffer's sysp.
+ 	(cpp_make_system_header):  Get current map using linemap_lookup.
+ 	Also set buffer's sysp flag.
+ 	* cppmacro.c (_cpp_builtin_macro_text):  Likewise use linemap_lookup.
+ 	* cpphash.h (CPP_INCREMENT_LINE):  New macro.
+ 	(struct cpp_buffer):  Moved fields saved_cur, saved_rlimit to ...
+ 	(struct cpp_reader):  ... and adding saved_line_base field.
+ 	* cpptrad.c (_cpp_overlay_buffer, _cpp_remove_overlay):
+ 	Update accordingly.  Don't adjust line.
+ 	(_cpp_scan_out_logical_line):  Use CPP_INCREMENT_LINE.
+ 	* cpphash.c (CPP_IN_SYSTEM_HEADER):  Replaced macro by ...
+ 	(cpp_in_system_header):  ... new inline function, using buffer's sysp.
+ 	* cpperror.c (_cpp_begin_message):  Update to use cpp_in_system_header.
+ 	* cpplex.c (_cpp_lex_direct):  Likewise.
+ 	* cppmacro.c (_cpp_builtin_macro_text):  Likewise.
+ 	* cppmacro.c (_cpp_create_definition):  Use buffer's sysp field.
+ 	* cpplib.h (struct cpp_token):  Rename line field to src_loc.
+ 	Remove col field as it is now subsumed by src_loc.
+ 	* cpperror.c:  Update various field, parameter, and macro names.
+ 	(print_location):  If col==0, try SOURCE_COLUMN of line.
+ 	(cpp_error):  Use cur_token's src_loc field, rather than line+col.
+ 	* cpplib.c (do_diagnostic):  Token's src_loc fields replaces line+col.
+ 	* cpplex.c (_cpp_process_line_notes, _cpp_lex_direct,
+ 	_cpp_skip_block_comment):  Use CPP_INCREMENT_LINE.
+ 	(_cpp_temp_token):  Replace cpp_token's line+col fields by src_loc.
+ 	(_cpp_get_fresh_line):  Don't need to adjust line for missing newline.
+ 	(_cpp_lex_direct):  Use linemap_position_for_column.
+ 	* c-ppoutput.c (maybe_print_line, print_line):  Don't take map
+ 	parameter.  Instead get it from the line_table global.  Adjust callers.
+ 	(print):  Remove map field.  Replace line field to src_line.
+ 	(init_pp_output, account_for_newlines, maybe_print_line):  Adjust.
+ 	(cb_line_change):  Use SOURCE_COLUMN.  Minor optimizations.
+ 	(pp_file_change):  Use MAIN_FILE_P since we cannot checked print.map.
+ 	Use LAST_SOURCE_LINE_LOCATION to "catch up" after #include.
+ 	* cpptrad.c (copy_comment):  Rename variable.
+ 	* c-lex.c (map):  Remove static variable, for same reason we removed
+ 	cpp_reader's map field.
+ 	(cb_line_change, cb_def_pragma, cb_define, cb_undef):  Hence we need
+ 	to call linemap_lookup.
+ 	(cb_line_change):  Token's line field replaced by src_loc.
+ 	(fe_file_change):  Use MAINFILE_P and LAST_SOURCE_LINE macros.
+ 	Don't save new_map.
+ 
+ 	* cpphash.h, cpperror.c, cpplib.h:  Some renames of fileline to
+ 	source_location.
+ 
+ 2004-02-11  Hartmut Penner  <hpenner@de.ibm.com>
+ 
+ 	* config/rs6000/altivec.md (*movv4si_internal): At least one
+ 	operand must be register_operand.
+ 	(*movv8hi_internal1): Likewise.
+ 	(*movv16qi_internal1): Likewise.
+ 	(*movv4sf_internal1): Likewise.
+ 
+ 2004-02-10  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* config/rs6000/spe.md ("*movv2si_internal"): Check for register
+ 	operand.
+ 	(movv4hi_internal): Same.
+ 	(movv2sf_internal): Same.
+ 	(movv1di_internal): Same.
+ 
+ 2004-02-11  Thiemo Seufer  <seufer@csv.ica.uni-stuttgart.de>
+ 
+ 	* config/mips/mips.h (TARGET_OLDABI): Define. Use TARGET_NEWABI and
+ 	TARGET_OLDABI consistently.
+ 	* config/mips/mips.c (function_arg,mips_setup_incoming_varargs,
+ 	mips_va_arg,override_options,compute_frame_size,
+ 	mips_initial_elimination_offset,mips16_fp_args,build_mips16_call_stub
+ 	,mips_return_in_memory,mips_strict_argument_naming): Use TARGET_NEWABI
+ 	and TARGET_OLDABI consistently.
+ 	* config/mips/mips.md (exception_receiver): Likewise.
+ 	* config/mips/linux64.h: Likewise.
+ 
+ 2004-02-11  Hartmut Penner  <hpenner@de.ibm.com>
+ 
+ 	* gcc/config/rs6000/rs6000.c (rs6000_override_options)
+ 	Set AltiVec ABI and vrsave as default for ppc64 linux.
+ 	(init_cumulative_args): Post error, if try to return
+ 	value in AltiVec register without enable AltiVec.
+ 	(function_arg_advance): Ditto for passing arguments.
+ 
+ 2004-02-11  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* emit-rtl.c (mark_label_nuses): Check that a LABEL_REF refers to
+ 	a label before updating its usage count.
+ 
+ 2004-02-10  Matt Kraai  <kraai@alumni.cmu.edu>
+ 
+ 	* doc/install.texi: Remove extra cd.
+ 
+ 2004-02-10  Ziemowit Laski  <zlaski@apple.com>
+ 
+ 	* c-common.c (vector_size_helper): Remove; call
+ 	reconstruct_complex_type() instead.
+ 	* tree.c (reconstruct_complex_type): New function
+ 	(formerly vector_size_helper() in c-common.c).
+ 	(make_vector): Make externally visible.
+ 	* tree.h (reconstruct_complex_type, make_vector): Add prototypes.
+ 
+ 2004-02-10  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300-protos.h: Add a prototype for
+ 	h8300_regs_ok_for_stm.
+ 	* config/h8300/h8300.c (h8300_regs_ok_for_stm): New.
+ 	* config/h8300/h8300.md (stm_h8300s_2_advanced,
+ 	stm_h8300s_2_normal, stm_h8300s_2, stm_h8300s_3_advanced,
+ 	stm_h8300s_3_normal, stm_h8300s_3, stm_h8300s_4_advanced,
+ 	stm_h8300s_4_normal, stm_h8300s_4, ldm_h8300s_2_advanced,
+ 	ldm_h8300s_2_normal, ldm_h8300s_2, ldm_h8300s_3_advanced,
+ 	ldm_h8300s_3_normal, ldm_h8300s_3, ldm_h8300s_4_advanced,
+ 	ldm_h8300s_4_normal, ldm_h8300s_4): Use
+ 	h8300_regs_ok_for_stm().
+ 
+ 2004-02-10  Danny Smith  <dannysmith@users.sourceforge.net>
+ 
+ 	PR c/14088
+ 	* real.c (real_from_string): Look for 'X' as well as 'x' in
+ 	hexfloat strings.
+ 
+ 2004-02-10  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300.md: Remove an incorrect comment about
+ 	peephole2.  Add comments.
+ 
+ 2004-02-10  Josef Zlomek  <zlomekj@suse.cz>
+ 
+ 	PR/14058
+ 	* emit-rtl.c (set_decl_incoming_rtl): New.
+ 	* tree.h (set_decl_incoming_rtl): New.
+ 	* function.c (assign_parms): Use set_decl_incoming_rtl for setting
+ 	DECL_INCOMING_RTL.
+ 	* ada/misc.c (adjust_decl_rtl): Likewise.
+ 
+ 2004-02-10  Per Bothner  <per@bothner.com>
+ 
+ 	* c-opts.c (c_common_post_options):   Don't emit working directory
+ 	in cpp output if -P was specified.
+ 
+ 2004-02-10  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	PR c/14092
+ 	* fold-const.c (fold) <NEGATE_EXPR>: Convert result of
+ 	negate_expr back to the original type.
+ 
+ 2004-02-10  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* config/rs6000/linux64.h (MD_FALLBACK_FRAME_STATE_FOR): Don't
+ 	bump retaddr here.
+ 
+ 2004-02-10  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* rtl.h (schedule_insns, schedule_ebbs, fix_sched_param,
+ 	gen_lowpart_SUBREG): Move under the file in which they
+ 	are actually declared.
+ 
+ 2004-02-10  Arnaud Charlet  <charlet@act-europe.fr>
+ 
+ 	* doc/sourcebuild.texi: Add libada documentation.
+ 
+ 	* doc/install.texi: Update documentation on Ada build, now
+ 	that the GNAT lib and tools are built automatically.
+ 
+ 2004-02-10  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.h (TARGET_GPWORD): Return false for TARGET_NEWABI
+ 	&& TARGET_IRIX.
+ 
+ 2004-02-09  Ziemowit Laski  <zlaski@apple.com>
+ 
+ 	* objc/objc-act.c (get_super_receiver): Move '#ifdef OBJCPLUS'
+ 	boundaries outside build_component_ref() call (a macro in ObjC++).
+ 
+ 2004-02-09  Bob Wilson  <bob.wilson@acm.org>
+ 
+ 	* config/xtensa/xtensa-protos.h (xtensa_copy_incoming_a7): Update.
+ 	(init_cumulative_args): Likewise.
+ 	(a7_overlap_mentioned_p): Delete prototype.
+ 	* config/xtensa/xtensa.c (struct machine_function): Replace
+ 	incoming_a7_copied field with need_a7_copy and vararg_a7 flags.
+ 	Add set_frame_ptr_insn field.
+ 	(xtensa_emit_move_sequence): Update call to xtensa_copy_incoming_a7.
+ 	(xtensa_copy_incoming_a7): Rewrite to check need_a7_copy flag and check
+ 	if the operand is an argument in a7.  If so, copy a7 to a new pseudo
+ 	at the function entry and replace the operand with the pseudo.
+ 	(init_cumulative_args): Remove unused arguments.  Add new "incoming"
+ 	argument and record this flag in CUMULATIVE_ARGS.
+ 	(function_arg): Remove result_mode and special-case code to handle
+ 	arguments in a7.  Instead, set need_a7_copy flag when there is an
+ 	incoming argument in a7.
+ 	(xtensa_expand_prologue): Remove code to search for set_frame_ptr insn
+ 	and use the value recorded in cfun->machine->set_frame_ptr_insn.
+ 	(xtensa_builtin_saveregs): Check for negative gp_left value.  Set
+ 	need_a7_copy and vararg_a7 flags.  Use move_block_from_reg instead of
+ 	special-case code.
+ 	(a7_overlap_mentioned_p): Delete.
+ 	* config/xtensa/xtensa.h (CUMULATIVE_ARGS): Add "incoming" flag.
+ 	(INIT_CUMULATIVE_ARGS, INIT_CUMULATIVE_INCOMING_ARGS): Remove useless
+ 	arguments to init_cumulative_args and pass "incoming" flag instead.
+ 	(BLOCK_REG_PADDING): Delete.
+ 	* config/xtensa/xtensa.md (movdi, movsf, movdf): Remove unnecessary
+ 	checks for reload_in_progress and reload_completed.  Update calls to
+ 	xtensa_copy_incoming_a7.
+ 	(ashlsi3): Rename existing insn to ashlsi3_internal.  Add expander
+ 	to call xtensa_copy_incoming_a7.
+ 
+ 2004-02-09  DJ Delorie  <dj@redhat.com>
+ 
+ 	* config/i386/xm-djgpp.h (GCC_DRIVER_HOST_INITIALIZATION): No
+ 	longer modify standard_exec_prefix, standard_bindir_prefix, or
+ 	standard_startfile_prefix.
+ 
+ 2004-02-09  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	PR c++/11295
+ 	* c-common.c (c_expand_expr, case STMT_EXPR): Change expand_expr call
+ 	to expand_expr_real call, and pass in alt_rtl as last argument.
+ 
+ 	PR libstdc++/5625
+ 	* builtin-types.def (BT_WORD, BT_FN_WORD_PTR): New.
+ 	* builtins.c (expand_builtin): Handle BUILT_IN_EXTEND_POINTER.
+ 	* builtins.def (BUILT_IN_EXTEND_POINTER): New.
+ 	* except.c (expand_builtin_extend_pointer): New.
+ 	* except.h (expand_builtin_extend_pointer): Declare.
+ 
+ 2004-02-09  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_emit_move): Remove splitting slow
+ 	unaligned loads and stores.
+ 
+ 2004-02-09  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+ 
+ 	* config/mips/iris5.h (BSS_SECTION_ASM_OP): Define.
+ 	* config/mips/iris6.h (BSS_SECTION_ASM_OP): Undef.
+ 
+ 	* config/mips/iris6.h (TARGET_ASM_NAMED_SECTION): Moved ...
+ 	* config/mips/iris5.h: ... here.
+ 	* config/mips/iris5gas.h (TARGET_ASM_NAMED_SECTION): Remove.
+ 
+ 	* config/mips/iris6.h (EXTRA_SECTION_FUNCTIONS): Move ...
+ 	* config/mips/iris5.h: ... here.
+ 
+ 2004-02-09  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+ 
+ 	* configure.ac: Remove default executable files before AC_PROG_CC.
+ 	* configure: Regenerate.
+ 
+ 2004-02-09  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	PR target/13721
+ 	* config/h8300/h8300.c (byte_reg): Call abort() if asked to
+ 	print a operand other than a register.
+ 
+ 2004-02-09  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* fold-const.c (fold) <NOP_EXPR>: Use the original type conversion
+ 	tree code rather than call fold_convert, which doesn't specify a
+ 	default floating point to integer conversion.
+ 
+ 2004-02-08  Bernardo Innocenti  <bernie@develer.com>
+ 
+ 	* config/m68k/m68k.c, config/m68k/m68k.md (SGS, SGS_CMP_ORDER): Remove
+ 	code to support SGS assembler.  Reformat adjacent code where possible.
+ 	* config/m68k/m68k.c (switch_table_difference_label_flag): Remove
+ 	definition.
+ 	* config/m68k/m68k.h (PRINT_OPERAND_PUNCT_VALID_P): Remove support
+ 	for '%#'.
+ 	* config/m68k/linux.h, config/m68k/m68k.c,
+ 	* config/m68k/math-68881.h: Replace `%#' with `#' in inline asm
+ 	macros and asm_printf() format strings.
+ 	* config/m68k/m68kelf.h (ASM_OUTPUT_CASE_END): Remove macro definition.
+ 	* config/m68k/linux.h: Update copyright.
+ 	* config/m68k/linux.h, config/m68k/m68k.c: Remove traling whitespace.
+ 
+ 2004-02-08  Andreas Schwab  <schwab@suse.de>
+ 	    Bernardo Innocenti  <bernie@develer.com>
+ 
+ 	* config/m68k/m68k.h (REGISTER_NAMES): Prefix each name with
+ 	REGISTER_PREFIX.
+ 	* (M68K_FP_REG_NAME): New macro to specify an alternate name for the
+ 	frame pointer register, overridable by OS targets.
+ 	* (M68K_REGNAME): Macro to obtain register name for asm output,
+ 	eventually replacing %a6 with M68K_FP_REG_NAME.
+ 	* config/m68k/coff.h (REGISTER_NAMES): Don't redefine.
+ 	* config/m68k/linux.h (REGISTER_NAMES): Likewise.
+ 	* config/m68k/m68kelf.h (REGISTER_NAMES): Likewise.
+ 	* config/m68k/netbsd-elf.h (REGISTER_NAMES): Likewise.
+ 	* config/m68k/m68k.c: Use M68K_REGNAME(x) in place of reg_names[x].
+ 
+ 2004-02-08  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* target-def.h (TARGET_STRUCT_VALUE_RTX): Define as
+ 	hook_rtx_tree_int_null.
+ 	* targhooks.c (default_struct_value_rtx): Remove.
+ 	* targhooks.h: Remove the prototype for
+ 	default_struct_value_rtx.
+ 	* config/alpha/alpha.c, config/arc/arc.c, config/avr/avr.c,
+ 	config/fr30/fr30.c, config/h8300/h8300.c, config/i386/i386.c,
+ 	config/ip2k/ip2k.c, config/iq2000/iq2000.c,
+ 	config/m32r/m32r.c, config/mcore/mcore.c, config/mips/mips.c,
+ 	config/mn10300/mn10300.c, config/pdp11/pdp11.c,
+ 	config/rs6000/rs6000.c, config/s390/s390.c,
+ 	config/stormy16/stormy16.c, config/v850/v850.c,
+ 	config/xtensa/xtensa.c (TARGET_STRUCT_VALUE_RTX): Remove.
+ 	* doc/tm.texi (TARGET_STRUCT_VALUE_RTX): Document the default.
+ 
+ 2004-02-08  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* README.Portability: Change "ISO C89" to "ISO C90".
+ 	* c-parse.in (primary, initelt): Likewise.
+ 
+ 2004-02-08  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* real.c (encode_ibm_extended): Normalize the input value before
+ 	converting it to a double.  Handle the case where a normal value
+ 	rounds to infinity.
+ 
+ 2004-02-08  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* c-objc-common.c (c_cannot_inline_tree_fn): Fix a typo in a
+ 	warning.
+ 	* cse.c (preferrable): Change to preferable. Update all of its
+ 	callers.
+ 	* genautomata.c (ainsn): Change
+ 	first_ainsn_with_given_equialence_num to
+ 	first_ainsn_with_given_equivalence_num.  Update all of its
+ 	references.
+ 
+ 2004-02-08  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* schedule-ebb.c (schedule_ebbs): Do not allocate reg life data.
+ 
+ 2004-02-07  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* function.c (assign_parms): Fix formatting.
+ 
+ 2004-02-07  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* default.h (PROMOTE_PROTOTYPES): Remove.
+ 	* system.h (PROMOTE_FUNCTION_RETURN, PROMOTE_PROTOTYPES,
+ 	STRUCT_VALUE_REGNUM, SETUP_INCOMING_VARARGS,
+ 	EXPAND_BUILTIN_SAVEREGS): Poison.
+ 	* target-def.h (TARGET_PROMOTE_FUNCTION_RETURN): Define as
+ 	hook_bool_tree_false.
+ 	(TARGET_PROMOTE_PROTOTYPES): Likewise.
+ 	* target.h: Replace SETUP_INCOMING_VARARGS with
+ 	targetm.calls.setup_incoming_varargs().
+ 	* targhooks.c (default_promote_function_return): Remove.
+ 	(default_promote_prototypes): Likewise.
+ 	(default_struct_value_rtx): Always abort().
+ 	(default_expand_builtin_saveregs): Always print an error
+ 	message.
+ 	(default_setup_incoming_varargs): Do nothing.
+ 	(default_pretend_outgoing_varargs_named): Don't depend on
+ 	SETUP_INCOMING_VARARGS.
+ 	* targhooks.h: Remove the prototype for
+ 	default_promote_function_return and
+ 	default_promote_prototypes.
+ 
+ 2004-02-07  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* system.h (SHARED_SECTION_ASM_OP): Poison.
+ 	* varasm.c (data_section): Don't use SHARED_SECTION_ASM_OP.
+ 	* doc/tm.texi (SHARED_SECTION_ASM_OP): Remove.
+ 
+ 2004-02-07  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	Bug 13856
+ 	* c-decl.c (diagnose_mismatched_decls): Only give special
+ 	treatment when olddecl is DECL_BUILT_IN, if C_DECL_INVISIBLE
+ 	is also true.
+ 	(merge_decls): Don't clear DECL_BUILT_IN_CLASS and
+ 	DECL_FUNCTION_CODE when defining a built-in function.
+ 	Don't update DECL_ESTIMATED_INSNS.
+ 	* dwarf2out.c (dwarf2out_decl): Don't ignore built-in
+ 	FUNCTION_DECLs.
+ 	* tree.h: Delete DECL_ESTIMATED_INSNS.
+ 	* tree-inline.c (struct inline_data): Delete inlined_insns field.
+ 	(expand_call_inline, optimize_inline_calls): Don't update
+ 	DECL_ESTIMATED_INSNS nor inlined_insns.
+ 	* cgraphunit.c (cgraph_analyze_function): Don't update
+ 	DECL_ESTIMATED_INSNS.
+ 
+ 2004-02-07  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* c-common.c (shadow_warning): Delete.
+ 	* c-common.h (free_parser_stacks, shadow_warning, sw_kind): Delete.
+ 	* c-decl.c (warn_if_shadowing): Issue shadow warnings directly.
+ 	* c-opts.c (c_common_parse_file): Don't call free_parser_stacks.
+ 	* c-parse.in (free_parser_stacks): Delete.
+ 
+ 2004-02-07  Nathanael Nerode  <neroden@gcc.gnu.org>
+ 
+ 	* Makefile.in, config/t-slibgcc-darwin, config/t-slibgcc-elf-ver,
+ 	config/t-slibgcc-sld, config/mips/t-iris5-6, config/sh/t-linux:
+ 	Use the top level mkinstalldirs, not the one in the gcc subdir.
+ 	* mkinstalldirs: Remove (from the gcc subdir).
+ 
+ 2004-02-07  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	PR middle-end/13696
+ 	* fold-const.c (fold_convert): New function to provide type
+ 	conversion to the middle-end without using convert.
+ 	(negate_expr, associate_trees, size_diffop, omit_one_operand,
+ 	operand_equal_for_comparison_p, pedantic_omit_one_operand,
+ 	invert_truthvalue, optimize_bit_field_compare, range_binop,
+ 	decode_field_reference, make_range, build_range_check, unextend,
+ 	fold_truthop, extract_muldiv_1, fold_mathfn_compare,
+ 	fold_binary_op_with_conditional_arg, fold_inf_compare,
+ 	fold_single_bit_test, fold, multiple_of_p): Replace all calls to
+ 	convert with calls to fold_convert.
+ 
+ 2004-02-07  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* genrecog.c (find_operand): add extra argument stop.
+ 	(validate_pattern): Verify that mach_dup is duplicating operand
+ 	defined lexically earlier.
+ 
+ 2004-02-07  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config.gcc: Don't mention MAX_LONG_TYPE_SIZE.
+ 	* system.h (MAX_LONG_TYPE_SIZE, MAX_LONG_DOUBLE_TYPE_SIZE,
+ 	MAX_WCHAR_TYPE_SIZE, GCOV_TYPE_SIZE): Poison.
+ 	* config/avr/avr.h, config/h8300/h8300.h, config/i386/i386.h,
+ 	config/ia64/ia64.h, config/ip2k/ip2k.h,
+ 	config/iq2000/iq2000.h, config/mips/iris5.h,
+ 	config/mips/mips.h, config/pa/pa-64.h, config/pa/pa.h,
+ 	config/rs6000/aix51.h, config/rs6000/aix52.h,
+ 	config/rs6000/darwin.h, config/rs6000/rs6000.h,
+ 	config/s390/s390.h, config/sh/sh.h, config/sparc/freebsd.h,
+ 	config/sparc/linux.h, config/sparc/linux64.h,
+ 	config/sparc/netbsd-elf.h, config/sparc/sparc.h,
+ 	config/xtensa/xtensa.h: Remove the definitions of
+ 	MAX_LONG_TYPE_SIZE, MAX_LONG_DOUBLE_TYPE_SIZE, and/or
+ 	MAX_WCHAR_TYPE_SIZE.
+ 	* doc/tm.texi (MAX_LONG_TYPE_SIZE, MAX_LONG_DOUBLE_TYPE_SIZE,
+ 	MAX_WCHAR_TYPE_SIZE, GCOV_TYPE_SIZE): Remove.
+ 
+ 2004-02-07  Stephane Carrez  <stcarrez@nerim.fr>
+ 
+ 	PR bootstrap/13990
+ 	* config/m68hc11/m68hc11.md ("doloop_end"): Pass dummy arguments to
+ 	gen_rtx_NE.
+ 
+ 2004-02-07  Josef Zlomek  <zlomekj@suse.cz>
+ 
+ 	* var-tracking.c (vt_add_function_parameters): Surround checkings by
+ 	#ifdef ENABLE_CHECKING and #endif.
+ 
+ 2004-02-07  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* fold-const.c (negate_expr_p, negate_expr): Optimize -(A+B) into
+ 	either (-A)-B or (-B)-A, if A or B is easily negated respectively.
+ 	(fold) <MINUS_EXPR>: Optimize (A*C) - (B*C) -> (A-B)*C for both
+ 	integer types and floating point with unsafe_math_optimizations.
+ 	Add similar optimization for (A*C1) - (A*C2) -> A*(C1-C2).
+ 	Optimize A - B as A + (-B), if B is easily negated.
+ 
+ 2004-02-07  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* c-ppoutput.c, cfganal.c, diagnostic.h, print-rtl.c,
+ 	config/darwin.c, config/darwin.h, config/ia64/ia64-c.c,
+ 	config/m32r/linux.h, config/rs6000/ppc64-fp.c,
+ 	config/sparc/openbsd.h, doc/makefile.texi, doc/passes.texi:
+ 	Update copyright.
+ 
+ 2004-02-07  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* c-ppoutput.c, var-tracking.c: Fix comment typos.
+ 
+ 2004-02-06  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	* config/ia64/linux.h (MD_FALLBACK_FRAME_STATE_FOR): Only define for
+ 	glibc 2.3 or better.
+ 
+ 2004-02-06  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* doc/tm.texi (TARGET_FLOAT_LIB_COMPARE_RETURNS_BOOL): Change
+ 	to FLOAT_LIB_COMPARE_RETURNS_BOOL.
+ 
+ 2004-02-07  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* config/rs6000/t-linux64 (LIB2FUNCS_EXTRA): Add darwin-ldouble.c.
+ 	(SHLIB_MAPFILES): Add libgcc-ppc64.ver.
+ 	(SHLIB_MKMAP_OPTS): Delete.
+ 	(TARGET_LIBGCC2_CFLAGS): Add -specs.
+ 	(bispecs): Add rule.
+ 	* config/rs6000/libgcc-ppc64.ver: New file.
+ 	* config/rs6000/ppc64-fp.c (__fixtfdi, __floatditf): New functions.
+ 	(__floatdidf, __floatdisf): Optimize multiply.
+ 	(__fixunstfdi): New function.
+ 	* config/rs6000/rs6000.c (rs6000_complex_function_value): Allow for
+ 	real and imag parts larger than one register.
+ 	(function_arg): Correct type of reg used when fp arg split partially
+ 	to stack.
+ 	* config/rs6000/darwin-ldouble.c: Protect with #if !_SOFT_FLOAT
+ 	and __MACH__ or __powerpc64__.
+ 
+ 2004-02-06  Roger Sayle  <roger@eyesopen.com>
+ 	    Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* builtins.c (expand_builtin_signbit): Use extract_bit_field instead
+ 	of gen_highpart or gen_lowpart when the floating point format is
+ 	wider than the result mode.
+ 
+ 2004-02-06  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* dwarf2out.c (loclabel_num): Move into #ifdef
+ 	DWARF2_DEBUGGING_INFO.
+ 
+ 2004-02-06  Ziemowit Laski  <zlaski@apple.com>
+ 
+ 	* objc/objc-act.c (build_super_template) the 'class' field of
+ 	'struct _objc_super' shall be named 'super_class' #ifdef OBJCPLUS.
+ 	(get_super_receiver): Likewise.
+ 
+ 2004-02-06  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* reload1.c (check_eliminable_occurrences): Optimize the reset
+ 	of can_eliminate.
+ 	(eliminate_regs_in_insn): Likewise.
+ 
+ 2004-02-06  Daniel Berlin <dberlin@dberlin.org>
+ 	    Josef Zlomek  <zlomekj@suse.cz>
+ 
+ 	* dwarf2out.c (struct gcc_debug_hooks): Call dwarf2out_begin_function
+ 	at the beginning of function, call dwarf2out_var_location for
+ 	NOTE_INSN_VAR_LOCATION note.
+ 	(struct var_loc_node, struct var_loc_list_def, loclabel_num,
+ 	decl_loc_table): New.
+ 	(lookup_decl_loc): New function.
+ 	(add_var_loc_to_decl): New function.
+ 	(based_loc_descr): Added parameter can_use_fbreg, DW_OP_fbreg is used
+ 	only if can_use_fbreg.
+ 	(mem_loc_descriptor): Added parameter can_use_fbreg, pass it to other
+ 	functions.
+ 	(loc_descriptor): Likewise. Process VAR_LOCATION.
+ 	(concat_loc_descriptor): Call loc_descriptor with can_use_fbreg == true.
+ 	(loc_descriptor_from_tree): Call mem_loc_descriptor with
+ 	can_use_fbreg == true.
+ 	(add_location_or_const_value_attribute): Added parameter enum
+ 	dwarf_attribute attr, generate attribute ATTR.  Create the location list.
+ 	(add_bound_info): Call loc_descriptor with can_use_fbreg == true.
+ 	(gen_formal_parameter_die): Call add_location_or_const_value_attribute
+ 	with attr == DW_AT_location.
+ 	(gen_subprogram_die): Generate the location list for DW_AT_frame_base
+ 	if frame_base_decl is defined and has a location list.
+ 	(gen_variable_die): Call add_location_or_const_value_attribute with
+ 	attr == DW_AT_location.
+ 	(dwarf2out_var_location): New function.
+ 	(dwarf2out_begin_function): New function.
+ 	(dwarf2out_init): Create decl_loc_table.
+ 
+ 2004-02-06  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* loop.c (force_movables): Transitively increase the priorities of
+ 	all insns forces by an insn, not just the first one.
+ 
+ 2004-02-06  Josef Zlomek  <zlomekj@suse.cz>
+ 	    Daniel Berlin <dberlin@dberlin.org>
+ 
+ 	Josef Zlomek  <zlomekj@suse.cz>
+ 	* Makefile.in (var-tracking.o): New.
+ 	* common.opt (fvar-tracking): New.
+ 	* flags.h (flag_var_tracking): New.
+ 	* gengtype.c (adjust_field_rtx_def): NOTE_INSN_VAR_LOCATION was added.
+ 	* opts.c (common_handle_option): Add OPT_fvar_tracking.
+ 	* print-rtl.c (print_rtx): NOTE_INSN_VAR_LOCATION was added.
+ 	* rtl.c (note_insn_name): Likewise.
+ 	* rtl.def (VAR_LOCATION): New.
+ 	* rtl.h (NOTE_VAR_LOCATION): New.
+ 	(NOTE_VAR_LOCATION_DECL): New.
+ 	(NOTE_VAR_LOCATION_LOC): New.
+ 	(enum insn_note): NOTE_INSN_VAR_LOCATION was added.
+ 	(variable_tracking_main): New exported function.
+ 	* timevar.def (TV_VAR_TRACKING): New.
+ 	* toplev.c (enum dump_file_index): Added DFI_vartrack.
+ 	(dump_file): "vartrack" was added (-dV).
+ 	(flag_var_tracking): New.
+ 	(f_options): "var-tracking" was added.
+ 	(rest_of_handle_variable_tracking): New function.
+ 	(rest_of_compilation): Run variable tracking.
+ 	(process_options): If user has not specified flag_var_tracking set it
+ 	according to optimize, debug_info_level and debug_hooks.
+ 	* tree.h (frame_base_decl): New.
+ 	* var-tracking.c: New file.
+ 	* config/ia64/ia64.c (ia64_flag_var_tracking): New variable.
+ 	(ia64_override_options): Set flags to run variable tracking in machine
+ 	dependent reorg instead of toplev.c.
+ 	(ia64_reorg): Run variable tracking if wanted.
+ 	* doc/invoke.texi: Mention variable tracking in -dV,
+ 	add and -fvar-tracking.
+ 	* doc/passes.texi: Added variable tracking pass.
+ 
+ 	Daniel Berlin <dberlin@dberlin.org>
+ 	* debug.h (struct gcc_debug_hooks): Added var_location debug hook.
+ 	* dbxout.c (dbx_debug_hooks): Likewise.
+ 	(xcoff_debug): Likewise.
+ 	* debug.c (do_nothing_debug_hooks): Likewise.
+ 	* dwarf2out.c (dwarf2_debug_hooks): Likewise.
+ 	* dwarfout.c (dwarf_debug_hooks): Likewise.
+ 	* sdbout.c (sdb_debug_hooks): Likewise.
+ 	* vmsdbgout.c (vmsdbg_debug_hooks): Likewise.
+ 	* final.c (final_scan_insn): Call var_location debug hook for each
+ 	NOTE_INSN_VAR_LOCATION.
+ 
+ 2004-02-06  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* flow.c (update_life_info): Allocate reg_deaths when called from
+ 	scheudler.
+ 	(attempt_auto_inc):  Update life ranges accordingly.
+ 
+ 2004-02-06  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	PR debug/11816
+ 	* dwarf2out.c (gen_decl_die): Handle anonymous struct members.
+ 
+ 2004-02-06  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* cfganal.c (flow_call_edges_add): Never split a libcall block.
+ 
+ 2004-02-06  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* dwarf2out.c (output_loc_list): Don't use deltas if we have
+ 	a separate line info table in use.
+ 	Use the correct size for terminators.
+ 	(output_die): Use offset, not delta.
+ 
+ 2004-02-06  H.J. Lu  <hongjiu.lu@intel.com>
+ 
+ 	* doc/invoke.texi: Remove the pni option from -mfpmath=.
+ 
+ 2004-02-06  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* recog.c (split_all_insns): Do not update reg info.
+ 	* regrename.c (regrename_optimize): Likewise.
+ 	* toplev.c (rest_of_handle_reorder_blocks): Likewise.
+ 	* flow.c (struct propagate_block_info): Add insn_num field.
+ 	(reg_deaths): New array.
+ 	(life_analysis): Free reg_deaths info.
+ 	(allocate_reg_life_data): Allocate reg_deaths array.
+ 	(propagate_one_insn): Use new array.
+ 	(init_propagate_block): Initialize it.
+ 	(free_propagate_block_info): Finish compuation of
+ 	REG_LIVE_LENGTH
+ 	(attempt_auto_inc): Sanity check that REG_INFO is not
+ 	computed at same time.
+ 	(mark_used_regs): Update new array.
+ 
+ 	* reg-stack.c (subst_stack_regs): Unshare clobbers before
+ 	substitution.
+ 
+ 2004-02-06  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/s390/s390.md (*extendsiqi2_short_displ): Change to
+ 	*extendqisi2_short_displ.
+ 
+ 2004-02-06  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* doc/tm.texi (INIT_CUMULATIVE_ARGS): Update doco.
+ 	* calls.c (expand_call): Pass n_named_args to INIT_CUMULATIVE_ARGS.
+ 	(emit_library_call_value_1): Likewise pass nargs.
+ 	* expr.c (block_move_libcall_safe_for_call_parm): Pass 3 here.
+ 	* function.c (assign_parms): Pass -1 to INIT_CUMULATIVE_ARGS.
+ 	* config/rs6000/rs6000.c (init_cumulative_args): Use n_named_args
+ 	parameter instead of scanning TYPE_ARGS_TYPES to count args.
+ 	* config/rs6000/rs6000-protos.h (init_cumulative_args): Update
+ 	prototype.
+ 	* config/rs6000/rs6000.h (INIT_CUMULATIVE_ARGS): Pass extra arg.
+ 	(INIT_CUMULATIVE_INCOMING_ARGS): Set extra arg to 1000.
+ 	(INIT_CUMULATIVE_LIBCALL_ARGS): Set extra arg to 0.
+ 	* config/sh/sh.c (sh_output_mi_thunk): Pass 1 as n_named_args to
+ 	INIT_CUMULATIVE_ARGS.
+ 	* config/alpha/alpha.h (INIT_CUMULATIVE_ARGS): Update.
+ 	* config/alpha/unicosmk.h, config/alpha/vms.h, config/arc/arc.h,
+ 	config/arm/arm.h, config/avr/avr.h, config/c4x/c4x.h,
+ 	config/cris/cris.h, config/fr30/fr30.h, config/frv/frv.h,
+ 	config/h8300/h8300.h, config/i386/i386.h, config/i860/i860.h,
+ 	config/ia64/ia64.h, config/ip2k/ip2k.h, config/iq2000/iq2000.h,
+ 	config/iq2000/iq2000.c, config/m32r/m32r.h, config/m68hc11/m68hc11.h,
+ 	config/m68k/m68k.h, config/mcore/mcore.h, config/mips/mips.h,
+ 	config/mmix/mmix.h, config/mn10300/mn10300.h, config/ns32k/ns32k.h,
+ 	config/pa/pa.h, config/pdp11/pdp11.h, config/s390/s390.h,
+ 	config/sh/sh.h, config/sparc/sparc.h, config/stormy16/stormy16.h,
+ 	config/v850/v850.h, config/vax/vax.h, config/xtensa/xtensa.h: Likewise.
+ 
+ 2004-02-06  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* genemit.c (gen_exp) [CONST_INT]: Use const_int_rtx whenever
+ 	possible.
+ 
+ 2004-02-06  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* reload1.c (eliminate_regs_in_insn): If a set has a REG_EQUAL
+ 	note containing (plus (reg) (const_int)), where reg is an
+ 	eliminable reg, then perform the register elimination without
+ 	depending on eliminate_regs().
+ 
+ 2004-02-06  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/arc/arc.c (arc_return_in_memory): Check the return
+ 	value of int_size_in_bytes against -1.  Don't check
+ 	TREE_ADDRESSABLE.
+ 	* config/avr/avr.c (avr_return_in_memory): Check the return
+ 	value of int_size_in_bytes against -1.
+ 	* config/ip2k/ip2k.c (ip2k_return_in_memory): Likewise.
+ 	* config/m68hc11/m68hc11.c (m68hc11_return_in_memory):
+ 	Likewise.
+ 	* config/mcore/mcore.c (mcore_return_in_memory): Likewise.
+ 	* config/stormy16/stormy16.c (xstormy16_return_in_memory):
+ 	Likewise.
+ 
+ 2004-02-06  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/frv/frv-protos.h: Remove the prototype for
+ 	frv_setup_incoming_varargs.
+ 	* config/frv/frv.c (TARGET_SETUP_INCOMING_VARARGS): New.
+ 	(frv_setup_incoming_varargs): Make it static.
+ 	* config/frv/frv.h (SETUP_INCOMING_VARARGS): Remove.
+ 
+ 2004-02-06  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/fr30/fr30-protos.h: Remove the prototype for
+ 	fr30_setup_incoming_varargs.
+ 	Update the prototypes for fr30_num_arg_regs and
+ 	fr30_function_arg_partial_nregs.
+ 	* config/fr30/fr30.c (TARGET_STRUCT_VALUE_RTX): New.
+ 	(TARGET_SETUP_INCOMING_VARARGS): Likewise.
+ 	(fr30_setup_incoming_varargs): Make it static.
+ 	Add argument second_time.  Don't do anything when second_time
+ 	is nonzero.
+ 	(fr30_num_arg_regs): Change the type of the first argument to
+ 	enum machine_mode.
+ 	(fr30_function_arg_partial_nregs): Change the type of the
+ 	second argument to enum machine_mode.
+ 	* config/fr30/fr30.h (STRUCT_VALUE): Remove.
+ 	(SETUP_INCOMING_VARARGS): Remove.
+ 
+ 2004-02-06  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/arc/arc-protos.h: Remove the prototype for
+ 	arc_setup_incoming_varargs.
+ 	* config/arc/arc.c (TARGET_ASM_EXTERNAL_LIBCALL): New.
+ 	(TARGET_SETUP_INCOMING_VARARGS): Likewise.
+ 	(arc_setup_incoming_varargs): Make it static.
+ 	(arc_external_libcall): Likewise.
+ 	* config/arc/arc.h (SETUP_INCOMING_VARARGS): Remove.
+ 	Remove the commented-out definition of
+ 	ASM_OUTPUT_EXTERNAL_LIBCALL.
+ 
+ 2004-02-05  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
+ 
+ 	* config/sh/t-linux (SHLIB_INSTALL): Prepend $$(DESTDIR)
+ 	to $$(slibdir) in the installation commands.
+ 
+ 2004-02-05  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* reload.c (refers_to_regno_for_reload_p): Index hard_regno_nregs
+ 	with inner_regno, not regno.
+ 	* rtlanal.c (refers_to_regno_p): Same.
+ 
+ 2004-02-05  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config.gcc: Remove i370 support.
+ 
+ 2004-02-05  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* doc/install.texi:  Update automake and autoconf version
+ 	requirements.  Note where to find gcj automake version.
+ 
+ 2004-02-05  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* Makefile.in (generate-manpages): Move dependencies to ...
+ 	(man): here.
+ 	* doc/makefile.texi: Document new targets.
+ 	* doc/sourcebuild.texi (Make-lang.in): Document new langhooks.
+ 
+ 2004-02-05  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	PR/13485
+ 	Makefile.in (srcextra):  Add a level of indirection to ...
+ 	(gcc.srcextra): ... here.
+ 	(po-generated): Delete.
+ 	(po/$(PACKAGE).pot: Use srcextra instead of po-generated.  Depend on
+ 	options.c.
+ 	(start.encap): Remove superfluous lang.srcextra dependency.
+ 	objc/Make-lang.in (po-generated):  Delete.
+ 
+ 2004-02-05  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/ia64/ia64.c (REG_GP): Remove.
+ 
+ 2004-02-05  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+ 
+ 	* config/mips/iris5gas.h (PREFERRED_DEBUGGING_TYPE): Define.
+ 
+ 2004-02-05  Devang Patel  <dpatel@apple.com>
+ 
+ 	* dwarf2out.c (force_type_die): Look up input type itself
+ 	instead of root_type() of type.
+ 
+ 2004-02-05  Andreas Krebbel  <krebbel1@de.ibm.com>
+ 
+ 	* config/s390/s390.md ("*tmqidi_ext"): New insn.
+ 	("*extendqidi2_short_displ", "*extendsiqi2_short_displ"): Old
+ 	pre-reload splitters are transformed to post-reload
+ 	define_insn_and_split patterns.
+ 	("*tmqisi_ext"): Renamed old "*tmqi_ext".
+ 
+ 2004-02-05  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/cris/cris.h: Replace PROMOTE_PROTOTYPES with
+ 	TARGET_PROMOTE_PROTOTYPES.
+ 
+ 2004-02-05  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+ 
+ 	PR middle-end/13750
+ 	Revert:
+ 	2004-01-15  Geoffrey Keating  <geoffk@apple.com>
+ 	PR pch/13361
+ 	* c-typeck.c (constructor_asmspec): Delete.
+ 	(struct initializer_stack): Delete field 'asmspec'.
+ 	(start_init): Delete saving of asmspec.
+ 	(finish_init): Don't update constructor_asmspec.
+ 	* dwarf2out.c (rtl_for_decl_location): Duplicate string from tree.
+ 	* stmt.c (expand_asm): Duplicate strings from tree.
+ 	(expand_asm_operands): Likewise.
+ 	* tree.c (tree_size): Update computation of size of STRING_CST.
+ 	(make_node): Don't make STRING_CST nodes.
+ 	(build_string): Allocate string with tree node.
+ 	* tree.def (STRING_CST): Update comment.
+ 	* tree.h (TREE_STRING_POINTER): Adjust for change to STRING_CST.
+ 	(tree_string): Place contents of string in tree node.
+ 	* config/sh/sh.c (sh_handle_sp_switch_attribute): Duplicate string
+ 	from tree.
+ 
+ 2004-02-05  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* diagnostic.h (DEFINE_DIAGNOSTIC_KIND): Change parameter M to
+ 	msgid.
+ 
+ 2004-02-05  Dorit Naishlos  <dorit@il.ibm.com>
+ 
+ 	* config/rs6000/altivec.md (*movv4si_internal): At least one
+ 	operand must be altivec_register_operand.
+ 	(*movv8hi_internal1): Likewise.
+ 	(*movv16qi_internal1): Likewise.
+ 	(*movv4sf_internal1): Likewise.
+ 
+ 2004-02-05  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* configure.ac (gcc_cv_as_powerpc_mfcrf): Correct test for mfcr.
+ 	* configure: Regenerate.
+ 
+ 2004-02-05  Jonathan Wakely  <redi@gcc.gnu.org>
+ 
+ 	* doc/install.texi: Update description of --gxx-include-dir to
+ 	give correct default value.
+ 
+ 2004-02-05  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300.h (REG_OK_FOR_BASE_NONSTRICT_P): Replace
+ 	8 with MAC_REG.
+ 
+ 2004-02-05  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/pa/pa.c (emit_hpdiv_const): Replace gen_rtx with
+ 	gen_rtx_PARALLEL.
+ 
+ 2004-02-05  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* emit-rtl.c: Update the comment about the file.
+ 
+ 2004-02-05  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* sourcebuild.texi (Test Idioms): Update testcase naming
+ 	conventions.
+ 
+ 2004-02-04  Per Bothner  <per@bothner.com>
+ 
+ 	Partially revert/redo 2003-10-01 change; fix -fworking-directory.
+ 	* c-ppoutput.c (pp_dir_change):  New function.
+ 	* c-common.h (pp_dir_change):  New declaration.
+ 	* cpplib.h (struct cpp_options):  Remove working_directory field.
+ 	* cppinit.c (cpp_find_main_file, cpp_push_main_file):  Merge back to
+ 	(cpp_read_main_file):  as before 10-01.  Call _cpp_stack_file.
+ 	Don't handle -fworking_directory here, but in c_common_post_options.
+ 	(read_original_directory): Don't back up when done.
+ 	Don't clear no-longer used working_directory flag.
+ 	* cpplib.h:  Update declarations to match.
+ 	* c-lex.c (cb_dir_change):  Move to c-opts.c.
+ 	(init_c_lex):  Don't set dir_change callback here, since we want
+ 	to set it even if flag_preprocess_only.
+ 	* c-opts.c (cb_dir_change):  Function moved from c-lex.c.
+ 	(c_common_post_options):  Set dir_change callback.
+ 	Call pp_dir_change if approporiate.
+ 	(finish_options):  Don't call cpp_find_main_file here.	Hence remove
+ 	unneeded parameter and result. Do LC_RENAME for <built-in>.
+ 	(c_common_post_options):  Call cpp_read_main_file here instead.
+ 	(c_common_init):  Update accordingly.
+ 	(push_command_line_include):  Don't cpp_push_main_file.
+ 	Do LC_RENAME rather than LC_LEASE to get back to main file.
+ 	Compared to pre-10-01 version, inline cpp_rename_to_main_file.
+ 	(c_common_parse_file):  Call cpp_read_main_file for subsequent main
+ 	files, but call finish_options for all files.
+ 	* c-opts.c (sanitize_cpp_opts):  Don't set cpp_opts->working_directory.
+ 	* fix-header.c (read_scan_file):  Call cpp_read_main_file instead of
+ 	cpp_find_main_file + cpp_push_main_file.
+ 	* c-lex.c (fe_file_change):  Don't set main_input_filename here.
+ 	* opts.c (handle_options):  Only set main_input_filename first time.
+ 
+ 2004-02-05  Ian Lance Taylor  <ian@wasabisystems.com>
+ 
+ 	* config/arm/arm.h (REG_CLASS_NAMES): Add missing comma.
+ 
+ 2004-02-04  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* reload.c (find_equiv_reg): When checking for register overlap,
+ 	don't index hard_regno_nregs with a pseudo-reg.
+ 
+ 2004-02-04  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390.c (s390_trampoline_template): Remove gen_rtx().
+ 
+ 2004-02-04  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* reload.c (refers_to_regno_for_reload_p): Test regno, not inner_regno,
+ 	against FIRST_PSEUDO_REGISTER.
+ 
+ 2004-02-04  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+ 
+ 	* Makefile.in: Move target, host overrides after per-language
+ 	fragments.
+ 
+ 	* config/mips/t-iris5-as (FORCE_DEBUG_ADAFLAGS): Clear.
+ 	(GNATLIBCFLAGS): Remove -g.
+ 
+ 2004-02-04  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/alpha/alpha.c, config/arc/arc.c, config/avr/avr.c,
+ 	config/i386/i386.c, config/i386/i386.h, config/i386/i386.md,
+ 	config/ia64/ia64.c, config/ia64/unwind-ia64.c,
+ 	config/m32r/m32r.c, config/ns32k/ns32k.c, config/pa/pa.c,
+ 	config/pdp11/pdp11.c, config/rs6000/rs6000.c,
+ 	config/sparc/sparc.c, config/vax/vax.c: Revert the
+ 	replacements of "FALLTHRU" with "Fall through" done in the
+ 	previous patch.
+ 
+ 2004-02-04  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/darwin.c, config/darwin.h, config/freebsd-spec.h,
+ 	config/arm/arm.c, config/arm/arm.md,
+ 	config/cris/cris-protos.h, config/fr30/fr30.c,
+ 	config/fr30/fr30.h, config/h8300/h8300.c, config/i386/i386.h,
+ 	config/i860/i860.c, config/i860/i860.h, config/ia64/ia64-c.c,
+ 	config/ia64/ia64.c, config/ia64/ia64.h, config/ip2k/ip2k.h,
+ 	config/ip2k/ip2k.md, config/ip2k/libgcc.S,
+ 	config/m32r/linux.h, config/m32r/m32r.c, config/m32r/m32r.h,
+ 	config/m68k/m68k.c, config/m68k/netbsd-elf.h,
+ 	config/mips/mips.c, config/mmix/mmix.c, config/mmix/mmix.md,
+ 	config/ns32k/netbsd.h, config/ns32k/ns32k.c,
+ 	config/ns32k/ns32k.h, config/pdp11/pdp11.h,
+ 	config/rs6000/darwin-ldouble.c, config/s390/s390.h,
+ 	config/s390/s390.md, config/sparc/netbsd-elf.h,
+ 	config/sparc/openbsd.h, config/sparc/sparc.c,
+ 	config/xtensa/lib2funcs.S: Fix comment formatting.
+ 
+ 2004-02-04  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/alpha/alpha.c, config/arc/arc.c,
+ 	config/arm/arm-cores.def, config/arm/arm.c, config/arm/arm.h,
+ 	config/arm/arm1026ejs.md, config/arm/arm1136jfs.md,
+ 	config/arm/arm926ejs.md, config/arm/vfp.md, config/avr/avr.c,
+ 	config/c4x/c4x.c, config/cris/cris.c, config/frv/frv.md,
+ 	config/i386/i386.c, config/i386/i386.h, config/i386/i386.md,
+ 	config/ia64/ia64.c, config/ia64/unwind-ia64.c,
+ 	config/iq2000/iq2000.c, config/m32r/m32r.c,
+ 	config/mips/mips.c, config/mmix/mmix.c, config/mmix/mmix.h,
+ 	config/ns32k/ns32k.c, config/pa/pa.c, config/pdp11/pdp11.c,
+ 	config/rs6000/darwin-ldouble.c, config/rs6000/rs6000.c,
+ 	config/rs6000/rs6000.h, config/sparc/sparc.c,
+ 	config/vax/vax.c: Fix comment typos.  Follow spelling
+ 	conventions.
+ 
+ 2004-02-04  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* alloc-pool.h, c-convert.c, c-lang.c, c-tree.h,
+ 	caller-save.c, df.h, genconfig.c, global.c, lcm.c,
+ 	ra-rewrite.c, ra.c, regclass.c, regs.h, resource.c,
+ 	sched-rgn.c, config/arm/aof.h, config/arm/cirrus.md,
+ 	config/arm/fpa.md, config/arm/iwmmxt.md,
+ 	config/arm/netbsd-elf.h, config/arm/netbsd.h,
+ 	config/m68hc11/m68hc11.md, config/mips/iris5.h,
+ 	config/mn10300/mn10300.md, config/rs6000/altivec.md,
+ 	config/sparc/netbsd-elf.h: Update copyright.
+ 
+ 2004-02-04  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* config/sparc/sparc.c (function_arg_pass_by_reference): Return 1
+ 	for all modes whose size is greater than 8 bytes if ARCH32.
+ 	(sparc_va_arg): Handle all modes whose size is greater than 8 bytes
+ 	by reference if ARCH32.
+ 
+ 2004-02-04  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* cgraphunit.c (cgraph_postorder): Fix typo in comment.
+ 
+ 2004-02-04  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390.md ("*la_64" + peepholes, "reload_indi"): Move
+ 	to before adddi3 insn patterns.
+ 	("*la_31" + peepholes, "*la_31_and", "*la_31_and_cc", "force_la_31",
+ 	"reload_insi"): Move to before addsi3 insn patterns.
+ 
+ 2004-02-04  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* calls.c (initialize_argument_information): Add CALL_FROM_THUNK_P
+ 	parameter.  Use it instead of current_function_is_thunk.
+ 	* function.h (struct function): Update documentation for is_thunk.
+ 	* tree.h (CALL_FROM_THUNK_P): New macro.
+ 	* config/alpha/alpha.c (alpha_sa_mask): Do not check
+ 	no_new_pseudos when testing current_function_is_thunk.
+ 	* config/rs6000/rs6000.c (rs6000_ra_ever_killed): Likeiwse.
+ 
+ 2004-02-04  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* doc/tm.texi: Replace SETUP_INCOMING_VARARGS with
+ 	TARGET_SETUP_INCOMING_VARARGS.
+ 
+ 2004-02-04  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* emit-rtl.c (gen_rtx): Remove.
+ 	* genattrtab.c: Don't mention gen_rtx in a comment.
+ 	* rtl.h: Remove the prototype for gen_rtx.
+ 	* doc/md.texi: Replace gen_rtx with gen_rtx_REG.
+ 
+ 2004-02-04  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/arc/arc.h, config/fr30/fr30.h
+ 	(SETUP_INCOMING_VARARGS): Remove the target-independent
+ 	comments.
+ 	* doc/tm.texi: Don't mention deprecated target macros.
+ 
+ 2004-02-04  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/fr30/fr30.h (FUNCTION_VALUE): Remove the
+ 	target-independent comment.
+ 
+ 2004-02-04  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* doc/interface.texi, doc/tm.texi, doc/trouble.texi: Don't
+ 	mention deprecated target macros.
+ 
+ 2004-02-04  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config.gcc: Remove obsolete ports and configurations.
+ 	* config/linux-aout.h, config/netware.h,
+ 	config/t-linux-gnulibc1, config/d30v/abi,
+ 	config/d30v/d30v-protos.h, config/d30v/d30v.c,
+ 	config/d30v/d30v.h, config/d30v/d30v.md,
+ 	config/d30v/libgcc1.asm, config/d30v/t-d30v,
+ 	config/dsp16xx/dsp16xx-modes.def,
+ 	config/dsp16xx/dsp16xx-protos.h, config/dsp16xx/dsp16xx.c,
+ 	config/dsp16xx/dsp16xx.h, config/dsp16xx/dsp16xx.md,
+ 	config/i370/README, config/i370/i370-c.c,
+ 	config/i370/i370-protos.h, config/i370/i370.c,
+ 	config/i370/i370.h, config/i370/i370.md, config/i370/linux.h,
+ 	config/i370/mvs.h, config/i370/oe.h, config/i370/t-i370,
+ 	config/i386/freebsd-aout.h, config/i386/linux-aout.h,
+ 	config/i386/moss.h, config/i386/netware.h,
+ 	config/i386/svr3.ifile, config/i386/svr3dbx.h,
+ 	config/i386/svr3gas.h, config/i386/svr3z.ifile,
+ 	config/i386/t-udk, config/i386/udk.h, config/i386/vsta.h,
+ 	config/i960/i960-c.c, config/i960/i960-coff.h,
+ 	config/i960/i960-modes.def, config/i960/i960-protos.h,
+ 	config/i960/i960.c, config/i960/i960.h, config/i960/i960.md,
+ 	config/i960/rtems.h, config/i960/t-960bare,
+ 	config/m68k/hp310.h, config/m68k/hp320.h,
+ 	config/m68k/hp320base.h, config/m68k/m68kv4.h,
+ 	config/m68k/netbsd.h, config/m68k/sgs.h, config/m68k/t-hp320:
+ 	Remove.
+ 	* doc/extend.texi, doc/install.texi, doc/invoke.texi,
+ 	doc/md.texi: Remove mentions of obsolete ports.
+ 
+ 2004-02-04  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* alias.c (find_base_term, get_addr):  Do not dereference NULL
+ 	pointer when all VALUE's locations has been invalidated.
+ 	(rtx_equal_for_memref_p): Simplify checking of VALUEs.
+ 
+ 2004-02-03  Wolfgang Bangerth  <bangerth@dealii.org>
+ 
+ 	* doc/invoke.texi (x86 options): Fix spelling/wording.
+ 
+ 2004-02-03  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/iris5.h (ASM_OUTPUT_ASCII): Use mips_output_ascii to
+ 	put the original string in a comment.
+ 	* config/mips/mips-protos.h (mips_output_ascii): Add prefix argument.
+ 	* config/mips/mips.c (mips_output_ascii): Likewise.
+ 	* config/mips/mips.h (ASM_OUTPUT_ASCII): Adjust accordingly.
+ 
+ 2004-02-03  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* system.h (GIV_SORT_CRITERION): Poison.
+ 	* config/avr/avr.h (GIV_SORT_CRITERION): Remove.
+ 	* config/ip2k/ip2k.h (GIV_SORT_CRITERION): Likewise.
+ 
+ 2004-02-03  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	PR target/9348
+ 	* expr.c (expand_expr_real) <MULT_EXPR>:  When performing widening
+ 	multiplies with a multiplication of the wrong signedness, its the
+ 	signedness of the multiplication that we've performed that needs to
+ 	be passed to expand_mult_highpart_adjust.  Avoid emitting a nop-move
+ 	if expand_mult_highpart_adjust places the result in target.
+ 
+ 2004-02-03  Richard Henderson  <rth@redhat.com>
+ 
+ 	* varasm.c (const_desc_rtx_sym_eq): Compare symbol strings.
+ 
+ 2004-02-03  J"orn Rennecke <joern.rennecke@superh.com>
+ 
+ 	* config.gcc (sh[234]l): Use little endian fragments.
+ 
+ 2004-02-03  Paul Koning  <pkoning@equallogic.com>
+ 
+ 	* config/pdp11/pdp11-modes.def: Add RESET_FLOAT_FORMAT calls.
+ 	* config/pdp11/pdp11-protos.h (legitimate_const_double_p): Add.
+ 	* config/pdp11/pdp11.c (encode_pdp11_f, decode_pdp11_f,
+ 	encode_pdp11_d, decode_pdp11_d): New functions to handle PDP11
+ 	floating point format.
+ 	(pdp11_f_format, pdp11_d_format): New real_format descriptors for
+ 	the above functions.
+ 	(output_move_quad): Output float values in correct target format.
+ 	(legitimate_const_double_p): New function.
+ 	* config/pdp11/pdp11.h: Fix typos.
+ 	(FLOAT_WORDS_BIG_ENDIAN): Add definition.
+ 	(TARGET_FLOAT_FORMAT): Ditto.
+ 	(pdp11_f_format, pdp11_d_format): Add external declarations.
+ 	(MAX_REGS_PER_ADDRESS): Corrected.
+ 	(LEGITIMATE_CONSTANT_P): Use legitimate_const_double_p().
+ 	(PRINT_OPERAND): Output float literals in target format.
+ 
+ 2004-02-03  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	PR c++/13975
+ 	* tree.h (enum tree_index): Add TI_PUBLIC, TI_PROTECTED, and
+ 	TI_PRIVATE.
+ 	(access_public_node): Redefine.
+ 	(access_protected_node): Likewise.
+ 	(access_private_node): Likewise.
+ 	* tree.c (build_common_tree_nodes): Create access_public_node,
+ 	access_protected_node, and access_private_node.
+ 
+ 2004-02-03  Steve Ellcey  <sje@cup.hp.com>
+ 
+ 	* config/ia64/ia64.h (MASK_INLINE_INT_DIV_LAT): Change value.
+ 	(MASK_INLINE_INT_DIV_THR): Ditto.
+ 	(MASK_INLINE_SQRT_LAT): Ditto.
+ 	(MASK_INLINE_SQRT_THR): Ditto.
+ 	(MASK_DWARF2_ASM): Ditto.
+ 	(MASK_EARLY_STOP_BITS): Ditto.
+ 
+ 2004-02-02  Paul Brook  <paul@codesourcery.com>
+ 
+ 	Merge from csl-arm-branch.
+ 
+ 	2004-01-30  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* aof.h (REGISTER_NAMES): Add vfp reg names
+ 	(ADDITIONAL_REGISTER_NAMES): Ditto.
+ 	* aout.h (REGISTER_NAMES): Ditto.
+ 	(ADDITIONAL_REGISTER_NAMES): Ditto.
+ 	* arm-protos.h: Update/Add Prototypes.
+ 	* arm.c (init_fp_table): Rename from init_fpa_table. Update users.
+ 	Only allow 0.0 for VFP.
+ 	(fp_consts_inited): Rename from fpa_consts_inited.  Update users.
+ 	(values_fp): Rename from values_fpa.  Update Users.
+ 	(arm_const_double_rtx): Rename from const_double_rtx_ok_for_fpa.
+ 	Update users.  Only check valid constants for this hardware.
+ 	(arm_float_rhs_operand): Rename from fpa_rhs_operand.  Update Users.
+ 	Only allow consts for FPA.
+ 	(arm_float_add_operand): Rename from fpa_add_operand.  Update users.
+ 	Only allow consts for FPA.
+ 	(use_return_insn): Check for saved VFP regs.
+ 	(arm_legitimate_address_p): Handle VFP DFmode addressing.
+ 	(arm_legitimize_address): Ditto.
+ 	(arm_general_register_operand): New function.
+ 	(vfp_mem_operand): New function.
+ 	(vfp_compare_operand): New function.
+ 	(vfp_secondary_reload_class): New function.
+ 	(arm_float_compare_operand): New function.
+ 	(vfp_print_multi): New function.
+ 	(vfp_output_fstmx): New function.
+ 	(vfp_emit_fstm): New function.
+ 	(arm_output_epilogue): Output VPF reg restore code.
+ 	(arm_expand_prologue): Output VFP reg save code.
+ 	(arm_print_operand): Add 'P'.
+ 	(arm_hard_regno_mode_ok): Return modes for VFP regs.
+ 	(arm_regno_class): Return classes for VFP regs.
+ 	(arm_compute_initial_elimination_offset): Include space for VFP regs.
+ 	(arm_get_frame_size): Ditto.
+ 	* arm.h (FIXED_REGISTERS): Add VFP regs.
+ 	(CALL_USED_REGISTERS): Ditto.
+ 	(CONDITIONAL_REGISTER_USAGE): Enable VFP regs.
+ 	(FIRST_VFP_REGNUM): Define.
+ 	(LAST_VFP_REGNUM): Define.
+ 	(IS_VFP_REGNUM): Define.
+ 	(FIRST_PSEUDO_REGISTER): Include VFP regs.
+ 	(HARD_REGNO_NREGS): Handle VFP regs.
+ 	(REG_ALLOC_ORDER): Add VFP regs.
+ 	(enum reg_class): Add VFP_REGS.
+ 	(REG_CLASS_NAMES): Ditto.
+ 	(REG_CLASS_CONTENTS): Ditto.
+ 	(CANNOT_CHANGE_MODE_CLASS) Handle VFP Regs.
+ 	(REG_CLASS_FROM_LETTER): Add 'w'.
+ 	(EXTRA_CONSTRAINT_ARM): Add 'U'.
+ 	(EXTRA_MEMORY_CONSTRAINT): Define.
+ 	(SECONDARY_OUTPUT_RELOAD_CLASS): Handle VFP regs.
+ 	(SECONDARY_INPUT_RELOAD_CLASS): Ditto.
+ 	(REGISTER_MOVE_COST): Ditto.
+ 	(PREDICATE_CODES): Add arm_general_register_operand,
+ 	arm_float_compare_operand and vfp_compare_operand.
+ 	* arm.md (various): Rename as above.
+ 	(divsf3): Enable when TARGET_VFP.
+ 	(divdf3): Ditto.
+ 	(movdfcc): Ditto.
+ 	(sqrtsf2): Ditto.
+ 	(sqrtdf2): Ditto.
+ 	(arm_movdi): Disable when TARGET_VFP.
+ 	(arm_movsi_insn): Ditto.
+ 	(movsi): Only split with general regs.
+ 	(cmpsf): Use arm_float_compare_operand.
+ 	(push_fp_multi): Restrict to TARGET_FPA.
+ 	(vfp.md): Include.
+ 	* vfp.md: New file.
+ 	* fpa.md (various): Rename as above.
+ 	* doc/md.texi: Document ARM w and U constraints.
+ 
+ 	2004-01-15  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config.gcc: Add with_fpu.  Allow with-float=softfp.
+ 	* config/arm/arm.c (arm_override_options): Rename *-s to *s.
+ 	Break out of loop when we find a float-abi.  Fix typo.
+ 	* config/arm/arm.h (OPTION_DEFAULT_SPECS): Add "fpu".
+ 	Set -mfloat-abi=.
+ 	* doc/install.texi: Document --with-fpu.
+ 
+ 	2003-01-14  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config.gcc (with_arch): Add armv6.
+ 	* config/arm/arm.h: Rename TARGET_CPU_*_s to TARGET_CPU_*s.
+ 	* config/arm/arm.c (arm_overrride_options): Ditto.
+ 
+ 	2004-01-08  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* arm.c (FL_ARCH3M): Renamed from FL_FAST_MULT.
+ 	(FL_ARCH6): Renamed from FL_ARCH6J.
+ 	(arm_arch3m): Renamed from arm_fast_multiply.
+ 	(arm_arch6): Renamed from arm_arch6j.
+ 	* arm.h: Update all uses of above.
+ 	* arm-cores.def: Likewise.
+ 	* arm.md: Likewise.
+ 
+ 	* arm.h (CPP_CPU_ARCH_SPEC): Emit __ARM_ARCH_6J__ define for armV6j,
+ 	not arm6j.  Add entry for arch armv6.
+ 
+ 	2004-01-07  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* arm.c (arm_emit_extendsi): Delete.
+ 	* arm-protos.h (arm_emit_extendsi): Delete.
+ 	* arm.md (zero_extendhisi2): Also handle zero-extension of
+ 	non-subregs.
+ 	(zero_extendqisi2, extendhisi2, extendqisi2): Likewise.
+ 	(thumb_zero_extendhisi2): Only match if not v6.
+ 	(arm_zero_extendhisi2, thumb_zero_extendqisi2, arm_zero_extendqisi2)
+ 	(thumb_extendhisi2, arm_extendhisi2, arm_extendqisi)
+ 	(thumb_extendqisi2): Likewise.
+ 	(thumb_zero_extendhisi2_v6, arm_zero_extendhisi2_v6): New patterns.
+ 	(thumb_zero_extendqisi2_v6, arm_zero_extendqisi2_v6): New patterns.
+ 	(thumb_extendhisi2_insn_v6, arm_extendhisi2_v6): New patterns.
+ 	(thumb_extendqisi2_v6, arm_extendqisi_v6): New patterns.
+ 	(arm_zero_extendhisi2_reg, arm_zero_extendqisi2_reg): Delete.
+ 	(arm_extendhisi2_reg, arm_extendqisi2_reg): Delete.
+ 	(arm_zero_extendhisi2addsi): Remove subreg.  Add attributes.
+ 	(arm_zero_extendqisi2addsi, arm_extendhisi2addsi): Likewise.
+ 	(arm_extendqisi2addsi): Likewise.
+ 
+ 	2003-12-31  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	Revert this change:
+ 	* config/arm/arm.h (THUMB_LEGTITIMIZE_RELOAD_ADDRESS): Reload REG
+ 	+ REG addressing modes.
+ 
+ 	* config/arm/arm.h (THUMB_LEGTITIMIZE_RELOAD_ADDRESS): Reload REG
+ 	+ REG addressing modes.
+ 
+ 	2003-12-30  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* config/arm/arm.h (THUMB_LEGITIMATE_CONSTANT_P): Accept
+ 	CONSTANT_P_RTX.
+ 
+ 	2003-30-12  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* longlong.h: protect arm inlines with !defined (__thumb__)
+ 
+ 	2003-30-12  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/arm.h (TARGET_CPU_CPP_BUILTINS): Always define __arm__.
+ 
+ 	2003-12-30  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* builtins.c (expand_builtin_apply_args_1): Fix typo in previous
+ 	change.
+ 
+ 	2003-12-29  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* builtins.c (expand_builtin_apply_args_1): Add pretend args size
+ 	to the virtual incoming args pointer for downward stacks.
+ 
+ 	2003-12-29  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/arm-cores.def: Add cost function.
+ 	* config/arm/arm.c (arm_*_rtx_costs): New functions.
+ 	(arm_rtx_costs): Remove
+ 	(struct processors): Add rtx_costs field.
+ 	(all_cores, all_architectures): Ditto.
+ 	(arm_override_options): Set targetm.rtx_costs.
+ 	(thumb_rtx_costs): New function.
+ 	(arm_rtx_costs_1): Remove cases handled elsewhere.
+ 	* config/arm/arm.h (processor_type): Add COSTS parameter.
+ 
+ 	2003-12-29  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* config/arm/arm.md (generic_sched): arm926 has its own scheduler.
+ 	(arm926ejs.md): Include it.
+ 	* config/arm/arm926ejs.md: New pipeline description.
+ 
+ 	2003-12-24  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/arm.c (arm_arch6j): New variable.
+ 	(arm_override_options): Set it.
+ 	(arm_emit_extendsi): New function.
+ 	* config/arm/arm-protos.h (arm_emit_extendsi): Add prototype.
+ 	* config/arm/arm.h (arm_arch6j): Declare.
+ 	* config/arm/arm.md: Add sign/zero extend insns.
+ 
+ 	2003-12-23  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/arm.c (all_architectures): Add armv6.
+ 	* doc/invoke.texi: Document it.
+ 
+ 	2003-12-19  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/arm.md: Add load1 and load_byte "type" attrs.  Modify
+ 	insn patterns to match.
+ 	* config/arm/arm-generic.md: Ditto.
+ 	* config/arm/cirrus.md: Ditto.
+ 	* config/arm/fpa.md: Ditto.
+ 	* config/amm/iwmmxt.md: Ditto.
+ 	* config/arm/arm1026ejs.md: Ditto.
+ 	* config/arm/arm1135jfs.md: Ditto.  Add insn_reservation and bypasses
+ 	for 11_loadb.
+ 
+ 	2003-12-18  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* config/arm/arm-protos.h (arm_no_early_alu_shift_value_dep): Declare.
+ 	* config/arm/arm.c (arm_adjust_cost): Check shift cost for
+ 	TYPE_ALU_SHIFT and TYPE_ALU_SHIFT_REG.
+ 	(arm_no_early_store_addr_dep, arm_no_early_alu_shift_dep,
+ 	arm_no_early_mul_dep): Correctly deal with conditional execution,
+ 	parallels and single shift operations.
+ 	(arm_no_early_alu_shift_value_dep): Define.
+ 	* arm.md (attr type): Replace 'normal' with 'alu',
+ 	'alu_shift' and 'alu_shift_reg'.
+ 	(attr core_cycles): Adjust.
+ 	(*addsi3_carryin_shift, andsi_not_shiftsi_si, *arm_shiftsi3,
+ 	*shiftsi3_compare0, *notsi_shiftsi, *notsi_shiftsi_compare0,
+ 	*not_shiftsi_compare0_scratch, *cmpsi_shiftsi, *cmpsi_shiftsi_swp,
+ 	*cmpsi_neg_shiftsi, *arith_shiftsi, *arith_shiftsi_compare0,
+ 	*arith_shiftsi_compare0_scratch, *sub_shiftsi,
+ 	*sub_shiftsi_compare0, *sub_shiftsi_compare0_scratch,
+ 	*if_shift_move, *if_move_shift, *if_shift_shift): Set type
+ 	attribute appropriately.
+ 	* config/arm/arm1026ejs.md (alu_op): Adjust.
+ 	(alu_shift_op, alu_shift_reg_op): New.
+ 	* config/arm/arm1136.md: Add better bypasses for early
+ 	registers. Remove load[234] and store[234] bypasses.
+ 	(11_alu_op): Adjust.
+ 	(11_alu_shift_op, 11_alu_shift_reg_op): New.
+ 
+ 	2003-12-15  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* config/arm/arm-protos.h (arm_no_early_store_addr_dep,
+ 	arm_no_early_alu_shift_dep, arm_no_early_mul_dep): Declare.
+ 	* config/arm/arm.c (arm_no_early_store_addr_dep,
+ 	arm_no_early_alu_shift_dep, arm_no_early_mul_dep): Define.
+ 	* config/arm/arm1026ejs.md: Add load-store bypass.
+ 	* config/arm/arm1136jfs.md (11_alu_op): Take 2 cycles.
+ 	Add bypasses between instructions.
+ 
+ 	2003-12-10  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/arm.c (arm_fpu_model): New variable.
+ 	(arm_fload_abi): New variable.
+ 	(target_fpe_name): Rename from target_fp_name.
+ 	(target_fpu_name): New variable.
+ 	(arm_is_cirrus): Remove.
+ 	(fpu_desc): New struct.
+ 	(all_fpus): Define.
+ 	(pf_model_for_fpu): Define.
+ 	(all_loat_abis): Define.
+ 	(arm_override_options): Set fp arch flags based on -mfpu=
+ 	and -float-abi=.
+ 	(FIRST_FPA_REGNUM): Rename from FIRST_ARM_FP_REGNUM.
+ 	(LAST_FPA_REGNUM): Rename from LAST_ARM_FP_REGNUM.
+ 	(*): Use new TARGET_* flags.
+ 	* config/arm/arm.h (TARGET_ANY_HARD_FLOAT): Remove.
+ 	(TARGET_HARD_FLOAT): No longer implies TARGET_FPA.
+ 	(TARGET_SOFT_FLOAT): Ditto.
+ 	(TARGET_SOFT_FLOAT_ABI): New.
+ 	(TARGET_MAVERICK): Rename from TARGET_CIRRUS.  No longer implies
+ 	TARGET_HARD_FLOAT.
+ 	(TARGET_VFP): No longer implies TARGET_HARD_FLOAT.
+ 	(TARGET_OPTIONS): Add -mfpu=.
+ 	(FIRST_FPA_REGNUM): Rename from FIRST_ARM_FP_REGNUM.
+ 	(LAST_FPA_REGNUM): Rename from LAST_ARM_FP_REGNUM.
+ 	(arm_pf_model): Define.
+ 	(arm_float_abi_type): Define.
+ 	(fputype): Add FPUTYPE_VFP.  Change SOFT_FPA->NONE
+ 	* config/arm/arm.md: Use new TARGET_* flags.
+ 	* config/arm/cirrus.md: Ditto.
+ 	* config/arm/fpa.md: Ditto.
+ 	* config/arm/elf.h (ASM_SPEC): Pass -mfloat-abi= and -mfpu=.
+ 	* config/arm/semi.h (ASM_SPEC): Ditto.
+ 	* config/arm/netbsd-elf.h (SUBTARGET_ASM_FLOAT_SPEC): Specify vfp.
+ 	(FPUTYPE_DEFAULT): Set to VFP.
+ 	* doc/invoke.texi: Document -mfpu= and -mfloat-abi=.
+ 
+ 	2003-11-22  Phil Edwards  <phil@codesourcery.com>
+ 
+ 	PR target/12476
+ 	* config/arm/arm.c (arm_output_mi_thunk):  In Thumb mode, use
+ 	'bx' instead of 'b' to avoid branch range restrictions.  Output
+ 	the thunk immediately before the thunked-to function.
+ 	* config/arm/arm.h (ARM_DECLARE_FUNCTION_NAME):  Do not emit
+ 	.thumb_func if a thunk is being generated.  Emit .code 16 along
+ 	with .thumb_func if a thunk is not being generated.
+ 
+ 	2003-11-15  Nicolas Pitre <nico@cam.org>
+ 
+ 	* config/arm/arm.md (ashldi3, arm_ashldi3_1bit, ashrdi3,
+ 	arm_ashrdi3_1bit, lshrdi3, arm_lshrdi3_1bit): New patterns.
+ 	* config/arm/iwmmxt.md (ashrdi3_iwmmxt): Renamed from ashrdi3.
+ 	(lshrdi3_iwmmxt): Renamed from lshrdi3.
+ 	* config/arm/arm.c (IWMMXT_BUILTIN2): Renamed argument accordingly.
+ 
+ 	2003-11-12  Steve Woodford  <scw@wasabisystems.com>
+ 	    Ian Lance Taylor  <ian@wasabisystems.com>
+ 
+ 	* config/arm/lib1funcs.asm (ARM_DIV_BODY, ARM_MOD_BODY): Add new
+ 	code for __ARM_ARCH__ >= 5 && ! defined (__OPTIMIZE_SIZE__).
+ 
+ 	2003-11-05  Phil Edwards  <phil@codesourcery.com>
+ 
+ 	* config/arm/arm.md (insn):  Add new V6 instruction names.
+ 	(generic_sched):  New attr.
+ 	* config/arm/arm-generic.md:  Use generic_sched here.
+ 	* config/arm/arm1026ejs.md:  Do not model fetch/issue/decode
+ 	stages of pipeline.  Adjust latency counts accordingly.
+ 	* config/arm/arm1136jfs.md:  New file.
+ 
+ 	2003-10-28  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* config/arm/arm.h (processor_type): New enumeration type.
+ 	(CPP_ARCH_DEFAULT_SPEC): Set appropriately for ARM 926EJ-S,
+ 	ARM1026EJ-S, ARM1136J-S, and ARM1136JF-S processor cores.
+ 	(CPP_CPU_ARCH_SPEC): Likewise.
+ 	* config/arm/arm.c (arm_tune): New variable.
+ 	(all_cores): Use cores.def.
+ 	(all_architectures): Add representative processor.
+ 	(arm_override_options): Restructure way in which tuning
+ 	information is deduced.
+ 	* arm.md: Update "insn" and "type" attributes throughout.
+ 	(insn): New attribute.
+ 	(type): Compute "mult" from "insn" attribute.  Add load2,
+ 	load3, load4 alternatives.
+ 	(arm automaton): Move to arm-generic.md.
+ 	* config/arm/arm-cores.def: New file.
+ 	* config/arm/arm-generic.md: Likewise.
+ 	* config/arm/arm1026ejs.md: Likewise.
+ 
+ 2004-02-03  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* doc/invoke.texi (SPARC options): Remove -mflat and
+ 	all -mxxx (xxx:chip) options.
+ 	* config/sparc/aout.h (DBX_REGISTER_NUMBER): Delete.
+ 	* config/sparc/litecoff.h (DBX_REGISTER_NUMBER): Likewise.
+ 	* config/sparc/netbsd-elf.h (DBX_REGISTER_NUMBER): Likewise.
+ 	* config/sparc/sol2.h (DBX_REGISTER_NUMBER): Likewise.
+ 	* config/sparc/sparc-protos.h: Delete sparc_flat_* prototypes.
+ 	* config/sparc/sparc.c: Likewise.
+ 	(sparc_output_function_prologue): Remove TARGET_FLAT handling.
+ 	(sparc_nonflat_function_prologue): Rename into sparc_function_prologue.
+ 	(sparc_output_function_epilogue): Remove TARGET_FLAT handling.
+ 	(sparc_nonflat_function_epilogue): Rename into sparc_function_epilogue.
+ 	(struct sparc_frame_info, current_frame_info, zero_frame_info): Delete.
+ 	(sparc_flat_must_save_register_p): Likewise.
+ 	(sparc_flat_compute_frame_size): Likewise.
+ 	(sparc_flat_save_restore): Likewise.
+ 	(sparc_flat_function_prologue): Likewise.
+ 	(sparc_flat_function_epilogue): Likewise.
+ 	(sparc_flat_epilogue_delay_slots): Likewise.
+ 	(sparc_flat_eligible_for_epilogue_delay): Likewise.
+ 	(sparc_function_ok_for_sibcall): Remove TARGET_FLAT handling.
+ 	* config/sparc/sparc.h (MASK_FLAT, TARGET_FLAT): Delete.
+ 	(TARGET_SWITCHES): Remove -mflat and all -mxxx (xxx:chip) options.
+ 	(SPARC_INCOMING_INT_ARG_FIRST): Remove TARGET_FLAT handling.
+ 	(CONDITIONAL_REGISTER_USAGE): Likewise.
+ 	(FRAME_POINTER_REQUIRED): Likewise.
+ 	(INITIAL_ELIMINATION_OFFSET): Likewise.
+ 	(BASE_RETURN_VALUE_REG): Likewise.
+ 	(BASE_OUTGOING_VALUE_REG): Likewise.
+ 	(BASE_PASSING_ARG_REG): Likewise.
+ 	(BASE_INCOMING_ARG_REG): Likewise.
+ 	(INCOMING_REGNO): Likewise.
+ 	(OUTGOING_REGNO): Likewise.
+ 	(LOCAL_REGNO): Likewise.
+ 	(DELAY_SLOTS_FOR_EPILOGUE): Likewise.
+ 	(ELIGIBLE_FOR_EPILOGUE_DELAY): Likewise.
+ 	(EPILOGUE_USES): Likewise.
+ 	* config/sparc/sparc.md ("isa" attribute): Change "v6" into "v7".
+ 	("flat" attribute): Delete.
+ 	(do_builtin_setjmp_setup): Remove TARGET_FLAT and "flat" attribute
+ 	handling.
+ 	(call followed by jump define_peephole's): Delete.
+ 	(exception_receiver): Likewise.
+ 	(builtin_setjmp_receiver): Likewise.
+ 	* config/sparc/t-sparclite (MULTILIB_OPTIONS): Remove -mflat.
+ 
+ 2004-02-03  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	PR c/11658
+ 	PR c/13994
+ 	* Makefile.in (c-parse.o, c-convert.o, c-typeck.o): Depend
+ 	on langhooks.h.
+ 	* objc/Make-lang.in (objc-parse.o): Depend on langhooks.h.
+ 	* c-parse.in, c-convert.c, c-typeck.c, objc/objc-act.c:
+ 	Include langhooks.h.  Replace c_common_truthvalue_conversion
+ 	with the truthvalue_conversion language hook throughout.
+ 	(expr_no_commas): Call default_conversion before save_expr
+ 	for the first term of the production 'x ? : y'.
+ 	* c-common.c (c_common_truthvalue_conversion): Remove
+ 	obsolete block.  Invoke recursively the hook instead
+ 	of this function.
+ 	* c-convert.c (convert): handle ERROR_MARK_NODE.
+ 	* c-typeck.c (build_binary_op): handle ERROR_MARK_NODE
+ 	returned by the truthvalue_conversion language hook.
+ 	* c-lang.c (LANG_HOOKS_TRUTHVALUE_CONVERSION): Use
+ 	c_objc_common_truthvalue_conversion.
+ 	* c-objc-common.c (c_objc_common_truthvalue_conversion):
+ 	New function.
+ 	* c-tree.h (c_objc_common_truthvalue_conversion): Declare it.
+ 	* objc/objc-lang.c (LANG_HOOKS_TRUTHVALUE_CONVERSION): Use
+ 	c_objc_common_truthvalue_conversion.
+ 
+ 2004-02-03  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/c4x/c4x.h (FUNCTION_VALUE): Use gen_rtx_REG instead
+ 	of gen_rtx.
+ 	(LIBCALL_VALUE): Likewise.
+ 	* config/ip2k/ip2k.c (mdr_try_propagate_clr_sequence): Use
+ 	gen_rtx_CC0 instead of gen_rtx.
+ 	* config/m68hc11/m68hc11.c (m68hc11_emit_libcall): Use
+ 	gen_rtx_fmt_e and gen_rtx_fmt_ee instead of gen_rtx.
+ 	(m68hc11_expand_compare): Use gen_rtx_fmt_ee instead of
+ 	gen_rtx.
+ 	(m68hc11_emit_logical): Likewise.
+ 
+ 2004-02-03  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/alpha/alpha.c, config/arm/arm.c, config/c4x/c4x.c,
+ 	config/fr30/fr30.md, config/frv/frv.c, config/frv/frv.md,
+ 	config/h8300/h8300.c, config/ia64/ia64.c, config/ip2k/ip2k.md,
+ 	config/m32r/m32r.md, config/m68hc11/m68hc11.c,
+ 	config/mips/mips.md, config/mmix/mmix.c,
+ 	config/mn10300/mn10300.c, config/mn10300/mn10300.md,
+ 	config/ns32k/ns32k.c, config/pa/pa.md, config/pdp11/pdp11.c,
+ 	config/rs6000/altivec.md, config/s390/s390.c,
+ 	config/s390/s390.h, config/s390/s390.md, config/sh/sh.c,
+ 	config/sh/sh.h, config/sh/sh.md, config/stormy16/stormy16.c:
+ 	Use const0_rtx instead of GEN_INT (0).  Do the same for other
+ 	constants that are readily available.
+ 
+ 2004-02-03  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* doloop.c, optabs.c, regmove.c, sched-deps.c,
+ 	config/i386/i386.c, config/i386/i386.md: Use const0_rtx
+ 	instead of GEN_INT (0).  Do the same for other constants that
+ 	are readily available.
+ 
+ 2004-02-03  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* combine.c (simplify_set): Use gen_rtx_fmt_e instead of
+ 	gen_rtx.
+ 	* emit-rtl.c (init_emit_once): Use gen_rtx_PC and gen_rtx_CC0
+ 	instead of gen_rtx.
+ 	* reload1.c (init_elim_table): Use gen_rtx_fmt_e instead of
+ 	gen_rtx.
+ 	* config/ns32k/ns32k.md (udivmodhi4): Use gen_rtx_IOR and
+ 	gen_rtx_ASHIFT instead of gen_rtx.
+ 	(udivmodqi4): Likewise.
+ 
+ 2004-02-02  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR target/13789
+ 	* expr.c (store_expr): Use force_operand before emit_move_insn.
+ 
+ 2004-02-02  Jeff Law  <law@redhat.com>
+ 	    Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* tree.c (commutative_tree_code, associative_tree_code): New
+ 	functions.
+ 	(iterative_hash_expr): Use commutative_tree_code.
+ 	* tree.h (commutative_tree_code, associative_tree_code): Declare.
+ 	* fold-const.c (operand_equal_p): Use commutative_tree_code
+ 	rather than inlining the commutativity check.
+ 	(fold): Likewise.
+ 
+ 2004-02-02  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* system.h (FUNCTION_ARG_KEEP_AS_REFERENCE): Poison.
+ 	* config/frv/frv-protos.h: Remove the prototype for
+ 	frv_function_arg_keep_as_reference.
+ 	* config/frv/frv.c (frv_function_arg_keep_as_reference):
+ 	Remove.
+ 	* config/frv/frv.h (FUNCTION_ARG_KEEP_AS_REFERENCE): Likewise.
+ 	* config/stormy16/stormy16.h: Remove the commented-out
+ 	definition of FUNCTION_ARG_KEEP_AS_REFERENCE.
+ 
+ 2004-02-03  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	PR target/13914
+ 	* config/rs6000/linux64.h (MD_FALLBACK_FRAME_STATE_FOR): Use ap
+ 	for retaddr_column.
+ 
+ 2004-02-02  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* genemit.c (gen_exp): Generate gen_rtx_fmt_e* instead of
+ 	gen_rtx.
+ 
+ 2004-02-02  Eric Christopher  <echristo@redhat.com>
+ 	    Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* c-opts.c (c_common_handle_option): Add -finput-charset.
+ 	* c.opt: Ditto.
+ 	* cppcharset.c (one_iso88591_to_utf8): Remove.
+ 	(convert_iso88591_utf8): Ditto.
+ 	(conversion_tab): Remove 8859-1 converter.
+ 	(_cpp_input_to_utf8): Remove.
+ 	(_cpp_init_iconv_buffer): Ditto.
+ 	(_cpp_close_iconv_buffer): Ditto.
+ 	(_cpp_convert_input): New function.
+ 	(_cpp_default_encoding): Ditto.
+ 	* cpphash.h: Add/remove prototypes for above.
+ 	* cppfiles.c (read_file_guts): Use _cpp_convert_input.
+ 	* cppinit.c (cpp_create_reader): Use _cpp_default_encoding
+ 	for narrow execution and input character sets.
+ 	* cpplib.c (cpp_push_buffer): Delete uses of removed functions.
+ 	* doc/cppopts.texi: Document -finput-charset.
+ 
+ 2004-02-02  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* rtlanal.c (refers_to_regno_p): Test regno, not inner_regno,
+ 	against FIRST_PSEUDO_REGISTER.
+ 
+ 2004-02-02  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* doc/invoke.texi (SPARC options): Further improve.
+ 
+ 2004-02-02  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/arm/arm.md, config/c4x/c4x.md, config/cris/cris.md,
+ 	config/h8300/h8300.c, config/ip2k/ip2k.md,
+ 	config/iq2000/iq2000.c, config/mips/mips.c,
+ 	config/rs6000/rs6000.c, config/rs6000/rs6000.md,
+ 	config/sh/sh.c, config/sh/sh.md, config/stormy16/stormy16.c,
+ 	config/v850/v850.md: Fix indentation.
+ 
+ 2004-02-02  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* config/sparc/sparc.c (function_arg_slotno): Align TImode
+ 	arguments on a 16-byte boundary in the parameter array if ARCH64.
+ 	Split handling of TFmode.
+ 
+ 2004-02-02  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* rtlanal.c (reg_overlap_mentioned_p) [!ENABLE_CHECKING]:
+ 	Don't test CONSTANT_P (x).
+ 	(reg_overlap_mentioned_p): Merge check for STRICT_LOWPART,
+ 	ZERO_EXTRACT, SIGN_EXTRACT with the switch statement.
+ 	Fix misindentation.
+ 
+ 2004-02-02  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* doc/invoke.texi (SPARC options): Document that -mflat is deprecated.
+ 
+ 2004-02-02  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/arc/arc.md, config/arm/arm.c, config/arm/arm.md,
+ 	config/c4x/c4x.c, config/c4x/c4x.md, config/cris/cris.md,
+ 	config/frv/frv.c, config/h8300/h8300.c, config/ip2k/ip2k.md,
+ 	config/iq2000/iq2000.c, config/m32r/m32r.c,
+ 	config/mcore/mcore.c, config/mips/mips.c, config/mmix/mmix.md,
+ 	config/mn10300/mn10300.c, config/rs6000/rs6000.c,
+ 	config/rs6000/rs6000.md, config/sh/sh.c, config/sh/sh.md,
+ 	config/stormy16/stormy16.c, config/v850/v850.md,
+ 	config/xtensa/xtensa.c: Replace gen_rtx with gen_rtx_fmt_e*.
+ 
+ 2004-02-01  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/mcore/mcore.c (block_move_sequence): Replace
+ 	gen_rtx_CONST_INT with GEN_INT.
+ 
+ 2004-02-02  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* alias.c (record_set): Use hard_regno_nregs.
+ 	* bt-load.c (find_btr_reference, note_btr_set): Likewise.
+ 	* builtins.c (apply_args_size): Likewise.
+ 	* caller-save.c (setup_save_areas, save_call_clobbered_regs,
+ 	mark_set_regs, add_stored_regs, mark_referenced_regs,
+ 	insert_restore, insert_save, insert_one_insn): Likewise.
+ 	* cfgcleanup.c: Include regs.h
+ 	(mark_effect, mentions_nonequal_regs): Likewise.
+ 	* cfgrtl.c (mark_killed_regs): Likewise
+ 	* combine.c (update_table_tick, record_value_for_reg,
+ 	record_dead_and_set_regs, get_last_value_validate, use_crosses_set_p,
+ 	reg_dead_at_p_1, reg_dead_at_p, mark_used_regs_combine, move_deaths,
+ 	reg_bitfield_target_p, distribute_notes): Likewise.
+ 	* cse.c (mention_regs, insert, invalidate, invalidate_for_call,
+ 	exp_equiv_p, cse_insn): Likewise.
+ 	* cselib.c (cselib_lookup): Likewise.
+ 	(cselib_invalidate_regno, cselib_record_set): Likewise.
+ 	* df.c (df_ref_record): Likewise.
+ 	* dwarf2out.c (reg_loc_descriptor, multiple_reg_loc_descriptor):
+ 	Likewise.
+ 	* flow.c (mark_reg, insn_dead_p, mark_set_1, mark_used_reg,
+ 	count_or_remove_death_notes_bb): Likewise.
+ 	* function.c (aggregate_value_p, keep_stack_depressed): Likewise.
+ 	* gloval.c (global_alloc, find_reg, mark_reg_store, mark_reg_conflicts,
+ 	mark_reg_death, set_preference, reg_becomes_live, reg_dies): Likewise.
+ 	* integrate.c (mark_stores): Likewise.
+ 	* jump.c (delete_prior_computation): Likewise.
+ 	* lcm.c (reg_dies, reg_becomes_live): Likewise.
+ 	* local-alloc.c (combine_regs, find_free_reg, post_mark_life): Likewise.
+ 	* loop.c (LOOP_REGNO_NREGS): Likewise.
+ 	* postreload.c (reload_combine, reload_combine_note_store,
+ 	reload_combine_note_use, reload_cse_move2add, move2add_note_store): Likewise.
+ 	* ra-colorize.c (combine, color_usable_p, get_free_reg,
+ 	calculate_dont_begin, calculate_dont_begin, colorize_one_web,
+ 	try_recolor_web, insert_coalesced_conflicts, check_colors,
+ 	break_precolored_alias): Likewise.
+ 	* ra-debug.c: Include regs.h
+ 	(ra_print_rtx_object): Likewise.
+ 	* ra-rewrite (choose_spill_colors): Likewise.
+ 	(spill_same_color_p, update_spill_colors, spill_is_free): Likewise.
+ 	* ra.c (init_ra): Likewise.
+ 	* recog.c (reg_fits_class_p, peep2_reg_dead_p,
+ 	peep2_find_free_register): Likewise.
+ 	* reg-stack.c (subst_stack_regs_pat, convert_regs_exit): Likewise.
+ 	* regclass.c (hard_regno_nregs): New array.
+ 	(init_reg_modes_once): Initialize it.
+ 	(choose_hard_reg_mode): Use it.
+ 	(record_reg_classes): Likewise.
+ 	* regmove.c (mark_flags_life_zones): Likewise.
+ 	* regrename.c (note_sets, clear_dead_regs, regrename_optimize,
+ 	scan_rtx_reg, dump_def_use_chain, kill_value, set_value_regno,
+ 	copy_value, maybe_mode_change, find_oldest_value_reg,
+ 	copyprop_hardreg_forward_1):
+ 	* regs.h (hard_regno_nregs): Declare.
+ 	* realod.c (reload_inner_reg_of_subreg): Use it.
+ 	(push_reload, combine_reloads, find_dummy_reload,
+ 	hard_reg_set_here_p, operands_match_p, decompose, find_reloads,
+ 	refers_to_regno_for_reload_p, find_equiv_reg, regno_clobbered_p,
+ 	reload_adjust_reg_for_mode): Likewise.
+ 	* reload1.c (compute_use_by_pseudos, count_pseudo,
+ 	count_spilled_pseudo, find_reg, find_reload_regs, mark_home_live,
+ 	spill_hard_reg, forget_old_reloads_1, mark_reload_reg_in_use,
+ 	clear_reload_reg_in_use, reload_reg_free_for_value_p, free_for_value_p
+ 	allocate_reload_reg, choose_reload_regs, emit_reload_insns,
+ 	delete_output_reload): Likewise.
+ 	* resource.c (update_live_status, mark_referenced_resources,
+ 	mark_set_resources, mark_target_live_regs): Likewise.
+ 	* rtlanal.c:  Include regs.h
+ 	(refers_to_regno_p, reg_overlap_mentioned_p, dead_or_set_p,
+ 	dead_or_set_regno_p, find_regno_note, find_reg_fusage,
+ 	subreg_regno_offset, subreg_offset_representable_p,
+ 	hoist_test_store): Likewise.
+ 	* sched-deps.c (sched_analyze_1, sched_analyze_2): Likewise.
+ 	* sched-rgn.c (check_live_1, update_live_1): Likewise.
+ 	* stmt.c: Include regs.h
+ 	(decl_conflicts_with_clobbers_p): Likewise.
+ 	* varasm.c (make_decl_rtl): Likewise.
+ 	* Makefile.in (cfgcleanup.o, rtlanal.o, ra-debug.o): Add regs.h dependnecy.
+ 
+ 2004-02-01  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/arm/arm.c, config/arm/arm.h, config/arm/arm.md,
+ 	config/arm/linux-gas.h, config/arm/netbsd-elf.h,
+ 	config/arm/netbsd.h, config/arm/pe.c, config/avr/avr.c,
+ 	config/avr/avr.h, config/avr/avr.md, config/c4x/c4x.h,
+ 	config/cris/cris.h, config/fr30/fr30.h, config/frv/frv.c,
+ 	config/frv/frv.h, config/ip2k/ip2k.c, config/iq2000/iq2000.c,
+ 	config/iq2000/iq2000.h, config/m32r/m32r.c,
+ 	config/m68hc11/m68hc11.c, config/m68hc11/m68hc11.h,
+ 	config/m68hc11/m68hc11.md, config/m68k/m68k.md,
+ 	config/mcore/mcore.c, config/mcore/mcore.h,
+ 	config/mcore/mcore.md, config/mips/mips.c,
+ 	config/ns32k/ns32k.h, config/ns32k/ns32k.md,
+ 	config/rs6000/rs6000.c, config/s390/s390.c,
+ 	config/s390/s390.md, config/sparc/sparc.c, config/v850/v850.c,
+ 	config/xtensa/xtensa.h, config/xtensa/xtensa.md: Replace
+ 	"gen_rtx (FOO, " with "gen_rtx_FOO (".
+ 
+ 2004-02-01  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300.md (two peephole2's): New.
+ 
+ 2004-02-01  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* config/sparc/sol2-bi.h: Handle TARGET_CPU_ultrasparc3.
+ 	(CPP_CPU_SPEC): Handle -mcpu=ultrasparc3.
+ 	(ASM_CPU_SPEC): Likewise
+ 	* config/sparc/sol2.h: Handle TARGET_CPU_ultrasparc3.
+ 	(ASM_CPU_SPEC): Remove -mcpu=v8plus.  Handle -mcpu=ultrasparc3.
+ 
+ 2004-02-01  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* builtins.c (expand_builtin_pow): If flag_unsafe_math_optimizations
+ 	isn't set, don't call expand_builtin_mathfn_2 to use the pow optab.
+ 	(expand_builtin): Always call expand_builtin_pow.
+ 
+ 2004-02-01  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* builtins.def (BUILT_IN_SIGNBIT, BUILT_IN_SIGNBITF,
+ 	BUILT_IN_SIGNBITL): New GCC builtins.
+ 	* builtins.c (expand_builtin_signbit): New function to RTL expand
+ 	calls to signbit, signbitf and signbitl as inline intrinsics.
+ 	(expand_builtin): Call expand_builtin_signbit for BUILT_IN_SIGNBIT*.
+ 	(fold_builtin_signbit): New function to perform constant folding
+ 	of signbit, signbitf and signbitl.
+ 	(fold_builtin): Call fold_builtin_signbit for BUILT_IN_SIGNBIT*.
+ 
+ 	* doc/extend.texi: Document new signbit{,f,l} builtins.
+ 
+ 2004-02-01  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.md (adddi3_internal_2): Remove superfluous %s.
+ 
+ 2004-02-01  Chris Demetriou  <cgd@broadcom.com>
+ 
+ 	* config/mips/mips.h (PREDICATE_CODES): Remove entries for
+ 	"mips_const_double_ok" and "simple_memory_operand", which were
+ 	removed from the MIPS port with the mips-3_4-rewrite branch merge.
+ 	* config/mips/mips.c (mips16_lay_out_constants): Update comment
+ 	for removal of simple_memory_operand.
+ 
+ 2004-01-31  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/c4x/c4x.md: Use GEN_INT instead of
+ 	gen_rtx (CONST_INT, ...).
+ 
+ 2004-01-31  Richard Henderson  <rth@redhat.com>
+ 
+ 	* varasm.c (output_constant_pool): Don't zap the pool.
+ 
+ 2004-01-31  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* genrecog.c (decision_type): Add DT_const_int.
+ 	(write_cond) [DT_const_int]: Print a comparison against small
+ 	constant.
+ 	(write_node): Simplify comparisons against small constants
+ 	before printing tests.
+ 
+ 2004-01-31  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/m32r/m32r.c (m32r_load_pic_register): Use GEN_INT
+ 	instead of gen_rtx_CONST_INT.
+ 
+ 2004-01-31  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/xtensa/xtensa.h (DYNAMIC_CHAIN_ADDRESS): Use GEN_INT
+ 	instead of gen_rtx_CONST_INT.
+ 
+ 2004-01-31  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* target-def.h (TARGET_STRICT_ARGUMENT_NAMING): Define as
+ 	hook_bool_CUMULATIVE_ARGS_false.
+ 	* targhooks.c (default_strict_argument_naming): Rename to
+ 	hook_bool_CUMULATIVE_ARGS_false.
+ 	* targhooks.h: Update the prototype for
+ 	default_strict_argument_naming.
+ 
+ 2004-01-31  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/sh/sh.c: Replace "gen_rtx (FOO, " with "gen_rtx_FOO (".
+ 	* config/sh/sh.h: Likewise.
+ 	* config/sh/sh.md: Likewise.
+ 
+ 2004-01-31  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* doc/invoke.texi (SPARC options): Restructure and update.
+ 
+ 2004-01-31  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* system.h (PROMOTE_FUNCTION_ARGS, STRUCT_VALUE_INCOMING, and
+ 	STRICT_ARGUMENT_NAMING): Poison.
+ 	* target-def.h (TARGET_PROMOTE_FUNCTION_ARGS): Define as
+ 	hook_bool_tree_false.
+ 	* targhooks.c (default_promote_function_args): Remove.
+ 	(default_struct_value_rtx): Don't use STRUCT_VALUE_INCOMING.
+ 	Don't check incoming.
+ 	(default_strict_argument_naming): Don't use
+ 	STRICT_ARGUMENT_NAMING.
+ 	* targhooks.h: Remove the prototype for
+ 	default_promote_function_args.
+ 
+ 2004-01-31  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/i386/i386-protos.h: Remove the prototype for
+ 	ix86_setup_incoming_varargs.
+ 	* config/i386/i386.c (TARGET_SETUP_INCOMING_VARARGS): New.
+ 	(ix86_setup_incoming_varargs): Make it static.
+ 	* config/i386/i386.h (SETUP_INCOMING_VARARGS): Remove.
+ 
+ 2004-01-31  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* alloc-pool.c: Fix comment typos.
+ 	* builtin-types.def: Likewise.
+ 	* builtins.def: Likewise.
+ 	* c-pretty-print.c: Likewise.
+ 	* df.h: Likewise.
+ 	* reload1.c: Likewise.
+ 
+ 2004-01-31  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* doc/invoke.texi: Follow spelling conventions.
+ 	* doc/tm.texi: Likewise.
+ 
+ 2004-01-31  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* doc/install.texi: Fix typos.
+ 	* doc/invoke.texi: Likewise.
+ 
+ 2004-01-31  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390.c (s390_decompose_address): Do not treat virtual
+ 	registers as pointers.
+ 	* config/s390/s390.md ("*la_31" second peephole2): Fix incorrect mode.
+ 
+ 2004-01-31  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* combine.c (cse_main): Set gen_lowpart to gen_lowpart_for_combine
+ 	and restore it to gen_lowpart_general on exit.
+ 	(gen_lowpart_for_combine): Adjust all callers to go through
+ 	gen_lowpart.
+ 	* cse.c (cse_main): Set gen_lowpart to gen_lowpart_if_possible
+ 	and restore it to gen_lowpart_general on exit.
+ 	(gen_lowpart_if_possible): Adjust all callers to go through
+ 	gen_lowpart.
+ 	* emit-rtl.c (gen_lowpart_general): New name of gen_lowpart.
+ 	(gen_lowpart): Declare as pointer to function, initialized to
+ 	gen_lowpart_general.
+ 	* rtl.h (gen_lowpart): Declare as pointer to function.
+ 
+ 2004-01-31  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* bt-load.c: Replace "gen_rtx (FOO, " with "gen_rtx_FOO (".
+ 	* calls.c: Likewise.
+ 	* emit-rtl.c: Likewise.
+ 	* function.c: Likewise.
+ 	* reload1.c: Likewise.
+ 	* config/i386/cygming.h: Likewise.
+ 	* config/i386/i386.c: Likewise.
+ 	* config/i386/winnt.c: Likewise.
+ 
+ 2004-01-30  Dara Hazeghi  <dhazeghi@yahoo.com>
+ 
+ 	PR bootstrap/9249
+ 	* doc/install.texi: document --enable-__cxa_atexit option.
+ 	* configure.ac: Disable __cxa_atexit if not supported.
+ 	* configure: Regenerate.
+ 
+ 2004-01-30  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* ggc-zone.c (ggc_free): New function.
+ 
+ 2004-01-30  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	alloc-pool.c, c-lex.c, c-pragma.h, c-semantics.c, cfghooks.c,
+ 	cfghooks.h, cfglayout.c, cfgloopmanip.c, debug.c, debug.h,
+ 	flow.c, genextract.c, ggc-common.c, ggc-page.c, ggc.h,
+ 	ifcvt.c, jump.c, loop-unswitch.c, timevar.c, timevar.def,
+ 	tree-optimize.c, vmsdbgout.c, config/fp-bit.c,
+ 	config/alpha/alpha.c, config/alpha/alpha.h,
+ 	config/alpha/alpha.md, config/alpha/unicosmk.h,
+ 	config/alpha/vms.h, config/arm/linux-elf.h, config/avr/avr.c,
+ 	config/c4x/c4x-protos.h, config/c4x/c4x.md,
+ 	config/d30v/d30v.h, config/frv/frv.md, config/frv/frvbegin.c,
+ 	config/frv/frvend.c, config/i386/cygming.h,
+ 	config/i386/djgpp.h, config/i386/emmintrin.h,
+ 	config/i386/gthr-win32.c, config/i386/i386-interix.h,
+ 	config/i386/i386-protos.h, config/i386/openbsd.h,
+ 	config/i386/winnt.c, config/i386/xm-mingw32.h,
+ 	config/i386/xmmintrin.h, config/ia64/ia64.md,
+ 	config/iq2000/iq2000.md, config/m32r/m32r.md,
+ 	config/m68k/m68k.md, config/mcore/mcore-elf.h,
+ 	config/mcore/mcore.md, config/mips/elf.h, config/mips/elf64.h,
+ 	config/mips/iris5gas.h, config/mips/iris6.h,
+ 	config/mips/iris6gas.h, config/mips/linux.h,
+ 	config/mips/mips.md, config/mips/netbsd.h,
+ 	config/mips/openbsd.h, config/mips/windiss.h,
+ 	config/pa/fptr.c, config/rs6000/aix.h,
+ 	config/rs6000/altivec.h, config/rs6000/darwin.h,
+ 	config/rs6000/xcoff.h, config/s390/s390-protos.h,
+ 	config/s390/s390.c, config/s390/s390.h, config/s390/s390.md,
+ 	config/sh/netbsd-elf.h, config/sh/sh.h, config/sh/vxworks.h,
+ 	config/sparc/sol2.h: Update copyright.
+ 
+ 2004-01-30  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* Makefile.in (abs_docdir, abs_srcdir): Define.
+ 	(doc/%.dvi, doc/gccinstall.dvi): Use $(abs_docdir).
+ 
+ 2004-01-30  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* genconfig.c (main): Have CC0_P check its operand even on a
+ 	target without cc0.
+ 
+ 2004-01-30  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/alpha/alpha.c: Remove mentions of deprecates macros
+ 	in comments, remove some target-independent comments about target
+ 	macros, and/or add minimal function comments for target hook
+ 	implementations.
+ 	* config/avr/avr.c: Likewise.
+ 	* config/ia64/ia64.h: Likewise.
+ 	* config/ip2k/ip2k.c: Likewise.
+ 	* config/iq2000/iq2000.c: Likewise.
+ 	* config/m32r/m32r.h: Likewise.
+ 	* config/m68hc11/m68hc11.c: Likewise.
+ 	* config/mcore/mcore.c: Likewise.
+ 	* config/mmix/mmix.c: Likewise.
+ 	* config/mn10300/mn10300.c: Likewise.
+ 	* config/pa/pa.c: Likewise.
+ 	* config/pdp11/pdp11.c: Likewise.
+ 	* config/rs6000/rs6000.h: Likewise.
+ 	* config/sh/sh.c: Likewise.
+ 	* config/sh/sh.h: Likewise.
+ 	* config/sparc/sparc.c: Likewise.
+ 	* config/sparc/sparc.h: Likewise.
+ 	* config/stormy16/stormy16.c: Likewise.
+ 	* config/xtensa/xtensa.c: Likewise.
+ 
+ 2004-01-30  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	PR optimization/12147
+ 	* reload1.c (reload_reg_free_p): RELOAD_OTHER conflicts with
+ 	RELOAD_FOR_OPADDR_ADDR.
+ 	(reload_reg_reaches_end_p): RELOAD_FOR_OTHER_ADDRESS register
+ 	might be reused as RELOAD_FOR_OPADDR_ADDR register.
+ 
+ 2004-01-30  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* reload.c (get_secondary_mem): Fix updating of
+ 	secondary_memlocs_elim_used.
+ 
+ 2004-01-30  Richard Henderson  <rth@redhat.com>
+ 
+ 	* varasm.c (struct rtx_const, struct pool_constant): Remove.
+ 	(MAX_RTX_HASH_TABLE): Remove.
+ 	(const_rtx_hash_table, const_rtx_sym_hash_table): Remove.
+ 	(first_pool, last_pool, pool_offset): Remove.
+ 	(struct rtx_constant_pool): Split out from ...
+ 	(struct varasm_status): ... here.  Reference one via pointer.
+ 	(struct constant_descriptor_rtx): Merge struct pool_constant.
+ 	(SYMHASH): Remove.
+ 	(decode_rtx_const): Remove.
+ 	(const_hash_rtx, compare_constant_rtx): Remove.
+ 	(record_constant_rtx): Remove.
+ 	(const_desc_rtx_hash, const_desc_rtx_eq): New.
+ 	(const_desc_rtx_sym_hash, const_desc_rtx_sym_eq): New.
+ 	(const_rtx_hash_1, const_rtx_hash): New.
+ 	(init_varasm_status): Allocate a rtx_constant_pool, and its hashes.
+ 	(simplify_subtraction): Use simplify_rtx.
+ 	(force_const_mem): Rewrite to use new data structures.
+ 	(find_pool_constant): Likewise.
+ 	(get_pool_constant, get_pool_constant_mark,
+ 	get_pool_constant_for_function, get_pool_mode,
+ 	get_pool_mode_for_function, get_pool_offset, get_pool_size): Likewise.
+ 	(output_constant_pool_2): Split out from output_constant_pool.
+ 	(output_constant_pool_1): Likewise.  Use new pool datastructures.
+ 	(output_constant_pool): Zap entire pool datastructure.
+ 	(mark_constant): Use new pool datastructures.
+ 	(mark_constants): Use for_each_rtx.
+ 	(mark_constant_pool): Use new pool datastructures.
+ 
+ 2004-01-30  Fariborz Jahanian <fjahanian@apple.com>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_emit_move): Remove #if 0.
+ 	Copy operands[1] to pseudo for simplify_gen_subreg.
+ 
+ 2004-01-30  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* gcse.c (bypass_block): Fix a typo in the previous check-in
+ 	to the file.
+ 
+ 2004-01-30  Andrew Pinski <pinskia@physics.uc.edu>
+ 
+ 	* toplev.c: Include alloc-pool.h.
+ 	* Makefile.in (toplev.c): Update dependencies.
+ 
+ 2004-01-30  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* combine.c (simplify_shift_const, case XOR): Be careful when
+ 	commuting XOR with ASHIFTRT.
+ 
+ 2004-01-30  Kazu Hirata  <kazu@cs.umass.edu>
+ 	    Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* config/sparc/sparc-protos.h: Remove the prototype for
+ 	sparc_builtin_saveregs.
+ 	* config/sparc/sparc.c (TARGET_PROMOTE_FUNCTION_ARGS): New.
+ 	(TARGET_PROMOTE_FUNCTION_RETURN): Likewise.
+ 	(TARGET_PROMOTE_PROTOTYPES): Likewise.
+ 	(TARGET_STRUCT_VALUE_RTX): Likewise.
+ 	(TARGET_RETURN_IN_MEMORY): Likewise.
+ 	(TARGET_EXPAND_BUILTIN_SAVEREGS): Likewise.
+ 	(TARGET_STRICT_ARGUMENT_NAMING): Likewise.
+ 	(sparc_builtin_saveregs): Make it static.
+ 	(sparc_promote_prototypes): New.
+ 	(sparc_struct_value_rtx): Likewise.
+ 	(sparc_return_in_memory): Likewise.
+ 	* config/sparc/sparc.h: (PROMOTE_FUNCTION_ARGS): Remove.
+ 	(PROMOTE_FUNCTION_RETURN): Likewise.
+ 	(RETURN_IN_MEMORY): Likewise.
+ 	(STRUCT_VALUE): Likewise.
+ 	(STRUCT_VALUE_INCOMING): Likewise.
+ 	(EXPAND_BUILTIN_SAVEREGS): Likewise.
+ 	(STRICT_ARGUMENT_NAMING): Likewise.
+ 	(PROMOTE_PROTOTYPES): Likewise.
+ 
+ 	* config/sparc/sparc.h (PROMOTE_MODE): Use word_mode.
+ 
+ 2004-01-30  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR c/12818
+ 	* varasm.c (const_hash_1) <STRING_CST>: Use the
+ 	address to compute the hash value if flag_writable_strings.
+ 	(compare_constant) <STRING_CST>: Compare the addresses
+ 	if flag_writable_strings.
+ 	(build_constant_desc): Do not copy the expression for a
+ 	STRING_CST if flag_writable_strings.
+ 
+ 2004-01-30  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* alloc-pool.c: Include hashtab.h
+ 	(alloc_pool_descriptor): New structure
+ 	(alloc_pool_hash): New global variable.
+ 	(hash_descriptor, eq_descriptor, alloc_pool_descriptor): New.
+ 	(create_alloc_pool): Update statistics.
+ 	(free_alloc_pool): Likewise.
+ 	(pool_alloc): Likewise.
+ 	(output_info): New structure
+ 	(print_statistics, dump_alloc_pool_statistics): New function.
+ 	* alloc-pool.h (alloc_pool_def): Turn name to be constant.
+ 	(dump_alloc_pool_statistics): Declare.
+ 	* toplev.c (finalize):  Dump statistics.
+ 
+ 	* reload.c (secondary_memlocs_elim_used): New static variable.
+ 	(get_secondary_mem): Update it.
+ 	(find_reloads): Use it.
+ 
+ 2004-01-30  Steven Bosscher <s.bosscher@student.tudelft.nl>
+ 
+ 	* toplev.c: Fix broken checkin of 2003-12-30, again.
+ 
+ 2004-01-30  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* configure.ac (gcc_cv_as_dwarf2_debug_line): Enable test for
+ 	s390*-*-* targets by specifying a 'nop' insn.
+ 	* configure: Regenerate.
+ 
+ 2004-01-30  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR target/11475
+ 	* config/sparc/sparc.md (movhi_lo_sum): Tighten predicates.
+ 
+ 2004-01-29  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* emit-rtl.c (change_address): Use XEXP (memref, 0) instead
+ 	of addr when creating MEM copy.
+ 
+ 2004-01-29  Devang Patel  <dpatel@apple.com>
+ 
+ 	* dwarf2out.c (gen_field_die): Do not equate decl number to die.
+ 
+ 2004-01-28  Ian Lance Taylor  <ian@wasabisystems.com>
+ 
+ 	PR inline-asm/6162
+ 	* reload.c (find_reloads): Only support one pair of commutative
+ 	operands.
+ 
+ 2004-01-29  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	PR java/13824
+ 	* tree.c (unsafe_for_reeval): Handle EXIT_BLOCK_EXPR nodes specially
+ 	as their EXIT_BLOCK_LABELED_BLOCK operands can lead to unbounded
+ 	recursion.
+ 
+ 2004-01-29  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/frv/frv.c: Don't mention deprecated macros in
+ 	comments.  Remove some target-independent comments about
+ 	target macros.
+ 	* config/frv/frv.h: Likewise.
+ 
+ 2004-01-29  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* cfghooks.c (split_block): Set probability and count of the
+ 	new edge.
+ 
+ 2004-01-29  Josef Zlomek  <zlomekj@suse.cz>
+ 
+ 	* dwarf2out.c (struct die_struct): Added field decl_id.
+ 	(decl_die_table): Changed to hash table.
+ 	(decl_die_table_allocated): Deleted.
+ 	(decl_die_table_in_use): Deleted.
+ 	(DECL_DIE_TABLE_INCREMENT): Deleted.
+ 	(decl_die_table_hash): New function.
+ 	(decl_die_table_eq): New function.
+ 	(lookup_decl_die): Lookup in a hash table.
+ 	(equate_decl_number_to_die): Insert into a hash table.
+ 	(dwarf2out_init): Init hash table decl_die_table.
+ 
+ 2004-01-29  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR optimization/13424
+ 	* expr.c (store_constructor): Revert 2003-12-03 change.
+ 
+ 	* emit-rtl.c (change_address): Check also if MEM_ATTRS is set as
+ 	expected before returning early.  Avoid sharing RTL if they
+ 	need to be changed.
+ 
+ 	* config/i386/i386.c (ix86_expand_movstr): Rework rep_mov and strmov
+ 	handling so that memory attributes are preserved.  Don't call
+ 	ix86_set_move_mem_attrs.
+ 	(ix86_set_move_mem_attrs_1, ix86_set_move_mem_attrs): Removed.
+ 	(ix86_expand_clrstr): Rename src argument to
+ 	dst.  Rework rep_stos and strset handling so that memory attributes
+ 	are preserved.
+ 	(ix86_expand_strlen): Pass src argument to
+ 	ix86_expand_strlensi_unroll_1.  Rework strlenqi_1 handling so that
+ 	memory attributes are preserved.
+ 	(ix86_expand_strlensi_unroll_1): Add src argument.  Use
+ 	change_address instead of gen_rtx_MEM.
+ 	* config/i386/i386.md (strmov, strmov_singleop, rep_mov): New
+ 	expanders.
+ 	(strmovdi_rex64, strmovsi, strmovsi_rex64, strmovhi, strmovhi_rex64,
+ 	strmovqi, strmovqi_rex64): Remove.
+ 	(rep_mov*, strmov*): Prefix insn names with *.
+ 	(strset, strset_singleop, rep_stos): New expanders.
+ 	(strsetdi_rex64, strsetsi, strsetsi_rex64, strsethi, strsethi_rex64,
+ 	strsetqi, strsetqi_rex64): Remove.
+ 	(rep_stos*, strset*): Prefix insn names with *.
+ 	(rep_stosqi_rex64): Likewise.  Fix mode of dirflag reg from DImode
+ 	to SImode.
+ 	(cmpstrsi): Rework cmpstrqi_1 handling so that memory attributes
+ 	are preserved.
+ 	(cmpstrqi_nz_1, cmpstrqi_nz_rex_1, cmpstrqi_1, cmpstrqi_rex_1):
+ 	Prefix insn names with *.
+ 	(cmpstrqi_nz_1, cmpstrqi_1): New expanders.
+ 	(strlenqi_1, strlenqi_rex_1): Prefix insn names with *.
+ 	(strlenqi_1): New expander.
+ 	* config/i386/i386.h (ix86_set_move_mem_attrs): Remove prototype.
+ 
+ 2004-01-29  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* Makefile.in (cfghooks.o): Add TIMEVAR_H and toplev.h dependency.
+ 	* basic-block.h (tidy_fallthru_edge, tidy_fallthru_edges, dump_bb,
+ 	verify_flow_info): Declaration removed.
+ 	* cfg.c (verify_flow_info, dump_bb): Moved to cfghooks.c.
+ 	(debug_bb, debug_bb_n): Add argument to dump_bb call.
+ 	* cfgcleanup.c (try_simplify_condjump, try_crossjump_to_edge,
+ 	try_optimize_cfg, delete_unreachable_blocks): Use delete_basic_block
+ 	instead of delete_block.
+ 	* cfghooks.c: Include timevar.h and toplev.h.
+ 	(cfg_hooks): Define here.
+ 	(verify_flow_info, dump_bb): Moved from cfg.c.
+ 	(redirect_edge_and_branch, redirect_edge_and_branch_force,
+ 	split_block, split_block_after_labels, move_block_after,
+ 	delete_basic_block, split_edge, create_basic_block,
+ 	create_empty_bb, can_merge_blocks_p, merge_blocks,
+ 	make_forwarder_block, tidy_fallthru_edge, tidy_fallthru_edges):
+ 	New functions.
+ 	* cfghooks.h (struct cfg_hooks): Added fields name,
+ 	make_forwarder_block, tidy_fallthru_edge and
+ 	move_block_after. Changed type of verify_flow_info, dump_bb,
+ 	split_block fields. Renamed cfgh_split_edge and delete_block
+ 	fields.
+ 	(redirect_edge_and_branch, redirect_edge_and_branch_force,
+ 	split_block, delete_block, split_edge, create_basic_block,
+ 	can_merge_blocks_p, merge_blocks): Macros removed.
+ 	(cfg_hooks): Do not export.
+ 	(verify_flow_info, dump_bb, redirect_edge_and_branch,
+ 	redirect_edge_and_branch_force, split_block, split_block_after_labels,
+ 	move_block_after, delete_basic_block, split_edge, create_basic_block,
+ 	create_empty_bb, can_merge_blocks_p, merge_blocks,
+ 	make_forwarder_block, tidy_fallthru_edge, tidy_fallthru_edges):
+ 	Declare.
+ 	(cfg_layout_rtl_cfg_hooks): Declare.
+ 	* cfgloop.c (update_latch_info, mfb_keep_just, mfb_keep_nonlatch):
+ 	New functions.
+ 	(canonicalize_loop_headers): Use new semantics of make_forwarder_block.
+ 	(redirect_edge_with_latch_update): Removed.
+ 	(make_forwarder_block): Moved to cfghooks.c, semantics changed.
+ 	* cfgloopmanip.c (remove_bbs): Do not update dominators here.
+ 	* cfgrtl.c (cfg_layout_split_block, rtl_split_block, rtl_dump_bb,
+ 	rtl_delete_block, rtl_split_block, rtl_merge_blocks,
+ 	tidy_fallthru_edge, rtl_split_edge, cfg_layout_delete_block,
+ 	cfg_layout_merge_blocks, cfg_layout_split_edge): Partly moved to
+ 	cfghooks.c.
+ 	(rtl_create_basic_block): Coding style fix.
+ 	(rtl_tidy_fallthru_edge, rtl_move_block_after,
+ 	rtl_make_forwarder_block): New functions.
+ 	(update_cfg_after_block_merging): Removed.
+ 	(rtl_cfg_hooks, cfg_layout_rtl_cfg_hooks): Fill in new entries.
+ 	* flow.c (verify_wide_reg, verify_local_live_at_start): Add argument
+ 	to dump_bb.
+ 	* ifcvt.c (merge_if_block, find_cond_trap, find_if_case_1,
+ 	find_if_case_2): Don't update dominators.
+ 	* timevar.def (TV_CFG_VERIFY): New.
+ 	* loop-unswitch.c (unswitch_loop): Don't call add_to_dominance_info.
+ 	* cfglayout.c (copy_bbs): Don't call add_to_dominance_info.
+ 	* cfgloopmanip.c (split_loop_bb): Don't update dominators.
+ 	(remove_bbs): Don't call remove_bbs.
+ 	(create_preheader): Use make_forwarder_block.
+ 	(mfb_keep_just, mfb_update_loops): New static functions.
+ 
+ 2004-01-29  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/avr/avr.h: Remove target-independent comments about
+ 	target macros.
+ 
+ 2004-01-28  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* timevar.c (timevar_print): Mention when checking is enabled.
+ 
+ 2004-01-28  Giovanni Bajo  <giovannibajo@gcc.gnu.org>
+ 
+ 	* c-lex.c (c_lex): Rename to...
+ 	(c_lex_with_flags): Add new parameter to get CPP flags.
+ 	(c_lex): Thunk to c_lex_with_flags while keeping the old interface.
+ 	* c-pragma.h (c_lex_with_flags): Declare.
+ 
+ 2004-01-28  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/mcore/mcore.c (mcore_external_libcall): Add a
+ 	comment.
+ 	(mcore_return_in_memory): Likewise.
+ 
+ 2004-01-28  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/mcore/mcore-protos.h: Remove the prototype for
+ 	mcore_setup_incoming_varargs.
+ 	* config/mcore/mcore.c (TARGET_ASM_EXTERNAL_LIBCALL): New.
+ 	(TARGET_PROMOTE_FUNCTION_ARGS): Likewise.
+ 	(TARGET_PROMOTE_FUNCTION_RETURN): Likewise.
+ 	(TARGET_PROMOTE_PROTOTYPES): Likewise.
+ 	(TARGET_STRUCT_VALUE_RTX): Likewise.
+ 	(TARGET_RETURN_IN_MEMORY): Likewise.
+ 	(TARGET_SETUP_INCOMING_VARARGS): Likewise.
+ 	(mcore_setup_incoming_varargs): Make it static.  Receive the
+ 	first argument by reference.  Add argument second_time.
+ 	(mcore_external_libcall): New.
+ 	(mcore_return_in_memory): Likewise.
+ 	* config/mcore/mcore.h (PROMOTE_FUNCTION_ARGS): New.
+ 	(PROMOTE_FUNCTION_RETURN): Likewise.
+ 	(STRUCT_VALUE): Likewise.
+ 	(RETURN_IN_MEMORY): Likewise.
+ 	(SETUP_INCOMING_VARARGS): Likewise.
+ 	(PROMOTE_PROTOTYPES): Likewise.
+ 	(ASM_OUTPUT_EXTERNAL_LIBCALL): Likewise.
+ 
+ 2004-01-28  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/m32r/m32r-protos.h: Remove the prototype for
+ 	m32r_setup_incoming_varargs.
+ 	* config/m32r/m32r.c (TARGET_PROMOTE_PROTOTYPES): New.
+ 	(TARGET_STRUCT_VALUE_RTX): Likewise.
+ 	(TARGET_RETURN_IN_MEMORY): Likewise.
+ 	(TARGET_SETUP_INCOMING_VARARGS): Likewise.
+ 	(m32r_return_in_memory): New.
+ 	(m32r_setup_incoming_varargs): Make it static.
+ 	* config/m32r/m32r.h: Remove #undef of
+ 	ASM_OUTPUT_EXTERNAL_LIBCALL.  Remove the commented-out
+ 	definitions of PROMOTE_FUNCTION_ARGS and
+ 	PROMOTE_FUNCTION_RETURN.
+ 	(PROMOTE_PROTOTYPES): Remove.
+ 	(RETURN_IN_MEMORY): Likewise.
+ 	(STRUCT_VALUE): Likewise.
+ 
+ 2004-01-28  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/m68k/m68k.c (TARGET_PROMOTE_PROTOTYPES): New.
+ 	(TARGET_STRUCT_VALUE_RTX): Likewise.
+ 	(m68k_struct_value_rtx): Likewise.
+ 	* config/m68k/m68k.h (STRUCT_VALUE_REGNUM): Rename to
+ 	STRUCT_VALUE_REGNUM.
+ 	(PROMOTE_PROTOTYPES): Remove.
+ 	* config/m68k/m68kelf.h (STRUCT_VALUE_REGNUM): Rename to
+ 	STRUCT_VALUE_REGNUM.
+ 	* config/m68k/m68kv4.h (STRUCT_VALUE_REGNUM): Likewise.
+ 	* config/m68k/netbsd-elf.h (STRUCT_VALUE_REGNUM): Likewise.
+ 
+ 2004-01-28  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/stormy16/stormy16.c
+ 	(TARGET_BUILD_BUILTIN_VA_LIST_TYPE): Rename to
+ 	TARGET_BUILD_BUILTIN_VA_LIST.
+ 
+ 2004-01-28  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/v850/v850.c (TARGET_PROMOTE_PROTOTYPES): New.
+ 	(TARGET_STRUCT_VALUE_RTX): Likewise.
+ 	(TARGET_RETURN_IN_MEMORY): Likewise.
+ 	(TARGET_SETUP_INCOMING_VARARGS): Likewise.
+ 	(v850_return_in_memory): Likewise.
+ 	(v850_setup_incoming_varargs): Likewise.
+ 	* config/v850/v850.h (PROMOTE_PROTOTYPES): Remove.
+ 	(SETUP_INCOMING_VARARGS): Likewise.
+ 	(RETURN_IN_MEMORY): Likewise.
+ 	(STRUCT_VALUE): Likewise.
+ 
+ 2004-01-28  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/fr30/fr30.c (TARGET_PROMOTE_PROTOTYPES): New.
+ 	(fr30_setup_incoming_varargs): Don't use
+ 	STRICT_ARGUMENT_NAMING.
+ 	* config/fr30/fr30.h (PROMOTE_PROTOTYPES): Remove.
+ 	(STRICT_ARGUMENT_NAMING): Likewise.
+ 
+ 2004-01-28  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/frv/frv-protos.h: Remove the prototype for
+ 	frv_expand_builtin_saveregs.
+ 	* config/frv/frv.c (TARGET_STRUCT_VALUE_RTX): Likewise.
+ 	(TARGET_EXPAND_BUILTIN_SAVEREGS): Likewise.
+ 	(frv_stack_info): Use FRV_STRUCT_VALUE_REGNUM instead of
+ 	STRUCT_VALUE_REGNUM.
+ 	(frv_expand_builtin_saveregs): Make it static.
+ 	(frv_struct_value_rtx): New.
+ 	* config/frv/frv.h (EXPAND_BUILTIN_SAVEREGS): Remove.
+ 
+ 2004-01-29  Jan Hubicka  <jh@suse.cz>
+ 
+ 	PR c++/12850
+ 	* cgraph.c (cgraph_remove_node): Clear out saved/insns/arguments and
+ 	initial pointers.
+ 	* cgraphunit.c (cgraph_finalize_function): Clear out DECL_SAVED_INSNS
+ 	for functions that will be only inlined.
+ 	(cgraph_mark_function_to_output): Likewise.
+ 	(cgraph_expand_function): Sanity check that DECL_DEFER_OUTPUT is clear;
+ 	do not clear function body.
+ 	* tree-optimize.c (clear_decl_rtl): Use decl_function_context.
+ 	(tree_rest_of_compilation): Reorganize the logic releasing function
+ 	body to use callgraph datastructure.
+ 
+ 2004-01-28  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	* pa.md: Change predicate of a peephole2 pattern from reg_or_0_operand
+ 	to register_operand.
+ 
+ 2004-01-28  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* config/ia64/ia64.md (fetchadd_acq_si, fetchadd_acq_di)
+ 	(cmpxchg_acq_si, cmpxchg_acq_di): Exchange match_dup and
+ 	match_operand expressions so that all match_dups appear
+ 	lexically after their corresponding match_operands.
+ 
+ 2004-01-28  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300.c (WORD_REG_USED): Use
+ 	HARD_FRAME_POINTER_REGNUM instead of FRAME_POINTER_REGNUM.
+ 	(compute_saved_regs): Likewise.
+ 	(h8300_expand_prologue): Likewise.  Allocate locals after
+ 	saving registers.
+ 	(h8300_expand_epilogue): Use HARD_FRAME_POINTER_REGNUM instead
+ 	of FRAME_POINTER_REGNUM.  Deallocate locals before saving
+ 	registers.
+ 	(h8300_initial_elimination_offset): Adjust for the new frame
+ 	layout, which swaps flips the order of locals and saved
+ 	registers.
+ 	* config/h8300/h8300.h (FIRST_PSEUDO_REGISTER): Change to 12.
+ 	(HARD_FRAME_POINTER_REGNUM): New.
+ 	(ELIMINABLE_REGS): Add an elimination rule from
+ 	FRAME_POINTER_REGNUM to HARD_FRAME_POINTER_REGNUM.
+ 	(REGISTER_NAMES): Add fp.
+ 	* config/h8300/h8300.md (FP_REG): Change to 11.
+ 	(HFP_REG): New.
+ 
+ 2004-01-28  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* genrecog.c (write_node): Remove a useless local variable.
+ 
+ 2004-01-28  Ian Lance Taylor  <ian@wasabisystems.com>
+ 
+ 	* Makefile.in (options.c options.h): Use stamp file s-options to
+ 	avoid unnecessary rebuilds.
+ 	(options.o): New target listing dependencies.
+ 	(gtyp-gen.h): Use stamp file s-gtyp-gen.
+ 	(STAGESTUFF): Add s-gtyp-gen.
+ 
+ 2004-01-28  Richard Henderson  <rth@redhat.com>
+ 
+ 	* ggc.h (ggc_free): Declare.
+ 	* ggc-common.c (ggc_realloc): Use it.
+ 	* ggc-page.c: Remove lots of inline markers.
+ 	(globals): Add free_object_list.
+ 	(ggc_alloc): Tidy.
+ 	(ggc_free, validate_free_objects): New.
+ 	(poison_pages): Provide default.
+ 	(ggc_collect): Call validate_free_objects; emit markers to
+ 	the debug file.
+ 
+ 2004-01-28  Zack Weinberg  <zack@codesourcery.com>
+ 	    Jim Wilson  <wilson@specifixinc.com>
+ 
+ 	* config/ia64/ia64.c (ia64_split_tmode, ia64_split_tmode_move):
+ 	Rewrite to use POST_INC/POST_DEC/POST_MODIFY instead of a
+ 	scratch pointer.
+ 	(ia64_secondary_reload_class): Delete case GR_REGS.
+ 	* config/ia64/ia64.md (movti, *movti_internal, movtf, *movtf_internal):
+ 	Do not allocate a scratch register.
+ 	(reload_inti, reload_outti, reload_intf, reload_outtf): Delete.
+ 
+ 2004-01-28  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* gcse.c (bypass_block): Prevent edges to be unified when we are
+ 	about to emit compenstation code.
+ 
+ 2004-01-28  Nick Clifton  <nickc@redhat.com>
+ 
+ 	* config/arm/arm.c (arm_expand_builtin): Force second argument of
+ 	the setcwx insn into a register.
+ 
+ 2004-01-28  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/fp-bit.c (pack_d): When using paired doubles to implement
+ 	a long double, round the high part separately.
+ 	(unpack_d): Fix the case in which the high part is a power of two
+ 	and the low part is a nonzero value of the opposite sign.
+ 
+ 2004-01-28  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/c4x/c4x.c (TARGET_ASM_EXTERNAL_LIBCALL): New.
+ 	(TARGET_STRUCT_VALUE_RTX): Likewise.
+ 	(c4x_external_libcall): Likewise.
+ 	(c4x_struct_value_rtx): Likewise.
+ 	* config/c4x/c4x.h: Remove.
+ 	(STRUCT_VALUE_REGNUM): Likewise.
+ 	(ASM_OUTPUT_EXTERNAL_LIBCALL): Likewise.
+ 
+ 2004-01-28  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/i386/i386.c (TARGET_PROMOTE_PROTOTYPES): New.
+ 	(TARGET_STRUCT_VALUE_RTX): Likewise.
+ 	* config/i386/i386.h (STRUCT_VALUE_INCOMING): Remove.
+ 	(STRUCT_VALUE): Likewise.
+ 	(PROMOTE_PROTOTYPES): Likewise.
+ 
+ 2004-01-27  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* config/pa/pa.c (emit_move_sequence): Check that operand1 is a
+ 	CONST_INT before using INTVAL.
+ 
+ 2004-01-27  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390.h (TARGET_DEFAULT): Default to !TARGET_BACKCHAIN.
+ 	* config/s390/s390.c (s390_return_addr_rtx): Fail for all but current
+ 	frame if !TARGET_BACKCHAIN.
+ 	* config/s390/s390.md ("allocate_stack"): Use pattern only if
+ 	TARGET_BACKCHAIN.
+ 	* doc/invoke.texi (-mbackchain/-mno-backchain): Document new default.
+ 
+ 2004-01-27  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* ia64.c (ia64_function_arg): When placing HFAs in integer
+ 	registers, do not special case the mode used for complex
+ 	types.  Do not advance int_regs until the current register
+ 	is full.
+ 
+ 2004-01-27  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	PR target/7297
+ 	* except.c (init_eh): Use a 5-word __jbuf for __builtin_setjmp().
+ 
+ 2004-01-27  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_emit_move): #if 0 splitting
+ 	slow, unaligned loads and stores while debugging.  Fix formatting.
+ 
+ 2004-01-27  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* config/rs6000/rs6000.md (save_stack_nonlocal): Use Pmode instead
+ 	of computing wmode.
+ 	(restore_stack_nonlocal): Same.
+ 
+ 2004-01-27  Devang Patel <dpatel@apple.com>
+ 
+ 	* Makefile.in (dwarf2out.o): Depend on input.h
+ 	* dbxout.c (dbx_debug_hooks): Add new empty hook for
+ 	imported_module_or_decl.
+ 	(xcoff_debug_hooks): Same.
+ 	* sdbout.c (sdb_debug_hooks): Same.
+ 	* vmsdbgout.c (vmsdbg_debug_hooks): Same.
+ 	* debug.c (do_nothing_debug_hooks): Same.
+ 	(debug_nothing_tree_tree): New function.
+ 	* debug.h (gcc_debug_hooks): New hook, imported_module_or_decl.
+ 	* dwarf2out.c: Include input.h.
+ 	(dwarf2_debug_hooks): Add new hook for imported_module_or_decl.
+ 	(remove_child_TAG): New function.
+ 	(dwarf_tag_name): Handle DW_TAG_imported_module.
+ 	(gen_subprogram_die): Equate decl number to declaration die. Do not
+ 	remove all children dies while reusing declaration die for definition.
+ 	Instead, selectively remove only formal parameters.
+ 	(gen_variable_die): Equate variable decl to declaration die.
+ 	(gen_field_die): Equate field decl to line number.
+ 	(force_namespace_die): Replace it with ...
+ 	(force_decl_die): ... this.
+ 	(force_type_die): New function.
+ 	(setup_namespace_context): Replace use of force_namespace_die() with
+ 	force_decl_die().
+ 	(gen_namespace_die): Same.
+ 	(dwarf2out_imported_module_or_decl): New function.
+ 
+ 2004-01-27  Bob Wilson  <bob.wilson@acm.org>
+ 
+ 	* config/xtensa/xtensa.c (xtensa_copy_incoming_a7): Remove SUBREG
+ 	on CQImode and CHImode incoming arguments in register a7.
+ 	(function_arg): Wrap BLKmode argument in register a7 in a PARALLEL.
+ 	* config/xtensa/xtensa.h (BLOCK_REG_PADDING): Define.
+ 	* config/xtensa/xtensa.md (movdi, movdf): Only call force_reg or
+ 	xtensa_copy_incoming_a7 before reload.
+ 
+ 2004-01-27  J"orn Rennecke <joern.rennecke@superh.com>
+ 
+ 	* coverage.c (get_coverage_counts): Give a different message
+ 	if flag_guess_branch_prob is set.
+ 	* predict.c (counts_to_freqs): Return an int.
+ 	(estimate_bb_frequencies): If counts_to_freqs returns zero,
+ 	calculate estimates.
+ 
+ 2004-01-27  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/iq2000/iq2000-protos.h: Remove the prototype for
+ 	iq2000_setup_incoming_varargs.
+ 	* config/iq2000/iq2000.c (TARGET_PROMOTE_FUNCTION_ARGS): New.
+ 	(TARGET_PROMOTE_FUNCTION_RETURN): Likewise.
+ 	(TARGET_PROMOTE_PROTOTYPES): Likewise.
+ 	(TARGET_STRUCT_VALUE_RTX): Likewise.
+ 	(TARGET_RETURN_IN_MEMORY): Likewise.
+ 	(TARGET_SETUP_INCOMING_VARARGS): Likewise.
+ 	(TARGET_STRICT_ARGUMENT_NAMING): Likewise.
+ 	(iq2000_return_in_memory): Likewise.
+ 	(iq2000_setup_incoming_varargs): Make it static.  Receive the
+ 	first argument by reference.
+ 	* config/iq2000/iq2000.h (PROMOTE_FUNCTION_ARGS): Remove.
+ 	(PROMOTE_FUNCTION_RETURN): Likewise.
+ 	(PROMOTE_PROTOTYPES): Likewise.
+ 	(RETURN_IN_MEMORY): Likewise.
+ 	(STRUCT_VALUE): Likewise.
+ 	(SETUP_INCOMING_VARARGS): Likewise.
+ 	(STRICT_ARGUMENT_NAMING): Likewise.
+ 
+ 2004-01-24  James A. Morrison  <ja2morri@uwaterloo.ca>
+ 
+ 	* fixinc/fixinc.c (test_test): Initialize res.
+ 	(start_flexer): Initialize pz_cmd_save.
+ 
+ 2004-01-27  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* doc/rtl.texi (Arithmetic): Rewrite entries for PLUS,
+ 	SS_PLUS, US_PLUS, LO_SUM, MINUS, SS_MINUS, US_MINUS.
+ 
+ 2004-01-27  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	PR 7198
+ 	* config/ia64/ia64.md (*nmaddsf4, *nmadddf4, *nmadddf4_alts)
+ 	(*nmadddf4_trunc, *nmaddxf4, *nmaddxf4_truncsf, *nmaddxf4_truncdf)
+ 	(*nmaddxf4_alts, *nmaddxf4_truncdf_alts):
+ 	Rewrite pattern as (minus (op 3) (mult (op 1) (op 2))).
+ 	Possibly rename pattern for consistency.
+ 	Remove ??? comments suggesting that this be done.
+ 	(*nmaddsf4_alts, *nmadddf4_truncsf_alts, *nmaddxf4_truncsf_alts):
+ 	New patterns.
+ 	(divsi3_internal, divdi3_internal_lat, divdi3_internal_thr)
+ 	(divsf3_internal_lat, divsf3_internal_thr, sqrtsf2_internal_thr)
+ 	(divdf3_internal_lat, divdf3_internal_thr, sqrtdf2_internal_thr)
+ 	(divxf3_internal_lat, divxf3_internal_thr, sqrtxf2_internal_thr):
+ 	Update to match.
+ 
+ 2004-01-27  Ian Lance Taylor  <ian@wasabisystems.com>
+ 
+ 	* config/arm/arm.c (output_return_instruction): Only restore IP
+ 	into SP if frame_pointer_needed.
+ 
+ 2004-01-27  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* config/sparc/sparc.c (function_arg_pass_by_reference): Return 1
+ 	for SCmode and DCmode if ARCH32.
+ 	(sparc_va_arg): Handle SCmode and DCmode by reference if ARCH32.
+ 	* config/sparc/sparc.h (RETURN_IN_MEMORY): Return 0 for TCmode
+ 	if ARCH32.
+ 	(BASE_RETURN_VALUE_REG): Return 32 for all FP modes except TFmode
+ 	if ARCH32.
+ 	(BASE_OUTGOING_VALUE_REG): Likewise.
+ 
+ 2004-01-27  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR target/10904
+ 	PR target/13058
+ 	* config/sparc/sparc.h (CANNOT_CHANGE_MODE_CLASS): New.
+ 	Forbid mode changes from SImode for lower FP regs if ARCH64.
+ 
+ 2004-01-27  J"orn Rennecke <joern.rennecke@superh.com>
+ 
+ 	* Makefile.in (bt-load.o): Depend on except.h.
+ 	* bt-load.c (except.h): #include.
+ 	(compute_defs_uses_and_gen): If insn at end of BB can throw
+ 	within this function, consider registers used by it unavailable for
+ 	btr migration.
+ 	(move_btr_def): If insn at end of BB can throw, insert before rather
+ 	than after.
+ 
+ 	* flags.h (flag_btr_bb_exclusive): Declare.
+ 	* toplev.c (flag_btr_bb_exclusive): New variable.
+ 	(f_options): Add btr-bb-exclusive.
+ 	* bt-load.c (augment_live_range): Restore old behaviour if
+ 	flag_btr_bb_exclusive is set.
+ 	* common.opt: Add entry for -fbtr-bb-exclusive.
+ 	* opts.c (common_handle_options): Same.
+ 	* doc/invoke.texi: Document -fbtr-bb-exclusive.
+ 
+ 	* bt-load.c (btrs_live_at_end): New variable.
+ 	(compute_defs_uses_and_gen): Compute its pointed-to array.
+ 	(clear_btr_from_live_range, add_btr_to_live_range): Update it.
+ 	(augment_live_range): When augmenting with a new dominator,
+ 	use only its btrs_live_at_end set, but also add in the full set
+ 	of the old dominator.
+ 	(btr_def_live_range): Use btrs_live_at_end.
+ 	(move_btr_def): Set other_btr_uses_before_def, and move new set
+ 	to the end of the basic block, if appropriate.
+ 	(migrate_btr_defs): Allocate and free btrs_live_at_end.
+ 
+ 	* bt-load.c (basic_block_freq): Remove outdated comment.
+ 
+ 2004-01-27  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* config/rs6000/rs6000.h: Correct target_flags free bits comment.
+ 	(PREDICATE_CODES): Remove duplicate.
+ 	* config/rs6000/linux64.h (CPP_SYSV_SPEC): Don't define.
+ 	(SUBSUBTARGET_OVERRIDE_OPTIONS): Disallow 32 bit TARGET_PROFILE_KERNEL.
+ 	(MASK_PROFILE_KERNEL): Adjust define.
+ 
+ 2004-01-27  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* config/i386/i386.c (ix86_constant_alignment): Decrease alignment
+ 	of long string literals from 32 bytes to sizeof (void *) when !-Os
+ 	and to 1 with -Os.
+ 
+ 2004-01-26  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300.c (h8300_tiny_constant_address_p): Accept
+ 	constant addresses in the normal mode.
+ 
+ 2004-01-26  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+ 
+ 	* system.h (CHAR_BITFIELD): Delete.
+ 	(BOOL_BITFIELD): New.
+ 	* c-decl.c (c_scope): Use BOOL_BITFIELD.
+ 	* gengtype-lex.l: Recognize BOOL_BITFIELD instead of CHAR_BITFIELD.
+ 
+ 2004-01-26  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/arc/arc.c (TARGET_PROMOTE_FUNCTION_ARGS): New.
+ 	(TARGET_PROMOTE_FUNCTION_RETURN): Likewise.
+ 	(TARGET_PROMOTE_PROTOTYPES): Likewise.
+ 	(TARGET_STRUCT_VALUE_RTX): Likewise.
+ 	(TARGET_RETURN_IN_MEMORY): Likewise.
+ 	(arc_return_in_memory): Likewise.
+ 	* config/arc/arc.h (PROMOTE_FUNCTION_ARGS): Remove.
+ 	(PROMOTE_FUNCTION_RETURN): Likewise.
+ 	(RETURN_IN_MEMORY): Likewise.
+ 	(STRUCT_VALUE): Likewise.
+ 
+ 2004-01-26  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-parse.in (extension): Use itype.
+ 	(SAVE_EXT_FLAGS): Don't allocate a tree.
+ 	(RESTORE_EXT_FLAGS): Don't read a tree.
+ 
+ 2004-01-26  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* cselib.c (discard_useless_values):  Clear out value pointer pointing
+ 	to datastructure to be recycled.
+ 
+ 2004-01-25  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* genextract.c (main): Do not output the memset when not checking.
+ 
+ 2004-01-26  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300.c (h8300_tiny_constant_address_p): Use a
+ 	switch statement instead of a chain of if statements.
+ 
+ 2004-01-26  Jeff Law  <law@redhat.com>
+ 
+ 	* doc/contrib.texi: Minor cleanup for Paolo Carlini's entry.  Add
+ 	acute accents for Petur Runolfsson's entry.
+ 
+ 2004-01-26  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/pdp11/pdp11.c (TARGET_STRUCT_VALUE_RTX): New.
+ 	(TARGET_RETURN_IN_MEMORY): Likewise.
+ 	* config/pdp11/pdp11.h (STRUCT_VALUE): Remove.
+ 	(RETURN_IN_MEMORY): Likewise.
+ 
+ 2004-01-26  Fariborz Jahanian  <fjahanian@apple.com>
+ 
+ 	 * config/rs6000/rs6000.c (rs6000_emit_move): split slow
+ 	 unaligned load/store into smaller loads and stores.
+ 
+ 2004-01-26  Fariborz Jahanian  <fjahanian@apple.com>
+ 
+ 	* function.c (assign_parms): Do not assign
+ 	long long argument to memory in prologue if
+ 	is it loaded into register.
+ 
+ 2004-01-26  Fariborz Jahanian  <fjahanian@apple.com>
+ 
+ 	 PR middle-end/13779
+ 	 * expr.c (emit_group_load): split constant
+ 	 correctly into register components of PARALLEL insn.
+ 
+ 2004-01-26  Fariborz Jahanian  <fjahanian@apple.com>
+ 
+ 	* gcc/config/rs6000/rs6000.md (save_stack_nonlocal):
+ 	Use adjust_address_nv directly with appropriate mode.
+ 	(restore_stack_nonlocal): Ditto.
+ 
+ 2004-01-26  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/xtensa/xtensa-protos.h: Remove the prototype for
+ 	xtensa_builtin_saveregs.
+ 	* config/xtensa/xtensa.c (TARGET_PROMOTE_FUNCTION_ARGS): New.
+ 	(TARGET_PROMOTE_FUNCTION_RETURN): Likewise.
+ 	(TARGET_PROMOTE_PROTOTYPES): Likewise.
+ 	(TARGET_STRUCT_VALUE_RTX): Likewise.
+ 	(TARGET_RETURN_IN_MEMORY): Likewise.
+ 	(TARGET_EXPAND_BUILTIN_SAVEREGS): Likewise.
+ 	(xtensa_builtin_saveregs): Make it static.
+ 	(xtensa_return_in_memory): New.
+ 	* config/xtensa/xtensa.h (PROMOTE_FUNCTION_ARGS: Remove.
+ 	(PROMOTE_FUNCTION_RETURN): Likewise.
+ 	(PROMOTE_PROTOTYPES): Likewise.
+ 	(STRUCT_VALUE): Likewise.
+ 	(RETURN_IN_MEMORY): Likewise.
+ 	(EXPAND_BUILTIN_SAVEREGS): Likewise.
+ 
+ 2004-01-26  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/arm/arm.c (TARGET_SETUP_INCOMING_VARARGS): New.
+ 	(arm_setup_incoming_varargs): Likewise.
+ 	* config/arm/arm.h (SETUP_INCOMING_VARARGS): Remove.
+ 
+ 2004-01-26  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/cris/cris.c (TARGET_SETUP_INCOMING_VARARGS): New.
+ 	(cris_setup_incoming_varargs): Likewise.
+ 	* config/cris/cris.h (SETUP_INCOMING_VARARGS): Remove.
+ 
+ 2004-01-26  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/ns32k/ns32k.c (TARGET_STRUCT_VALUE_RTX): New.
+ 	(ns32k_struct_value_rtx): Likewise.
+ 	* config/ns32k/ns32k.h (STRUCT_VALUE_REGNUM): Rename to
+ 	NS32K_STRUCT_VALUE_REGNUM.
+ 
+ 2004-01-26  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/arm/arm.c (TARGET_PROMOTE_FUNCTION_ARGS): New.
+ 	(TARGET_PROMOTE_PROTOTYPES): Likewise.
+ 	(TARGET_STRUCT_VALUE_RTX): Likewise.
+ 	(arm_struct_value_rtx): Likewise.
+ 	* config/arm/arm.h (PROMOTE_FUNCTION_ARGS): Remove.
+ 	(STRUCT_VALUE): Likewise.
+ 	(STRUCT_VALUE_REGNUM): Likewise.
+ 	(PROMOTE_PROTOTYPES): Likewise.
+ 
+ 2004-01-26  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/ia64/ia64-protos.h: Remove the prototype for
+ 	ia64_setup_incoming_varargs and ia64_return_in_memory.
+ 	* config/ia64/ia64.c (TARGET_STRUCT_VALUE_RTX): New.
+ 	(TARGET_RETURN_IN_MEMORY): Likewise.
+ 	(TARGET_SETUP_INCOMING_VARARGS): Likewise.
+ 	(TARGET_STRICT_ARGUMENT_NAMING): Likewise.
+ 	(ia64_setup_incoming_varargs): Adjust the arguments to meet
+ 	the requirement of TARGET_SETUP_INCOMING_VARARGS.
+ 	(ia64_return_in_memory): Make it static.  Change the return
+ 	type to bool from int.  Add an argument.
+ 	(ia64_struct_value_rtx): New.
+ 	* config/ia64/ia64.h: Remove commented-out definitions of
+ 	PROMOTE_FUNCTION_ARGS, PROMOTE_FUNCTION_RETURN, and
+ 	PROMOTE_PROTOTYPES.
+ 	(RETURN_IN_MEMORY): Remove.
+ 	(STRUCT_VALUE_REGNUM): Likewise.
+ 	(STRICT_ARGUMENT_NAMING): Likewise.
+ 
+ 2004-01-26  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR target/13666
+ 	* config/sparc/sparc.c (function_arg_union_value): New function.
+ 	(function_arg): Use it to deal with unions.
+ 	(function_value): Likewise.  Define 'regbase' only for ARCH64.
+ 	Replace a conditional statement by a simpler one.
+ 
+ 2004-01-26  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.c (mips16_optimize_gp): Delete.
+ 	(mips_reorg): Don't call it.
+ 
+ 2004-01-26  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>
+ 
+ 	* config/c4x/c4x.md (addqi3_noclobber): Move up pecking order.
+ 	(floatunsqihf2): Remove operand 6.
+ 	(fixhfqi_set, fix_trunchfqi2, fixuns_trunchfqi2): Group with other
+ 	fix patterns.
+ 	(ldi_conditional, ldf_conditional): Validate operands.
+ 
+ 2004-01-26  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>
+ 
+ 	* config/c4x/c4x.h (BCT_CHECK_LOOP_ITERATIONS): Remove.
+ 	(HAVE_GAS_HIDDEN): Undefine as interim measure.
+ 
+ 2004-01-26  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>
+ 
+ 	* config/c4x/c4x.c (c4x_legitimate_address_p):  Invalidate direct
+ 	memory references if TARGET_EXPOSE_LDP nonzero.
+ 
+ 2004-01-26  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>
+ 
+ 	* config/c4x/c4x.c (legitimize_operands): Truncate invalid shift counts.
+ 
+ 2004-01-26  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>
+ 
+ 	* config/c4x/c4x.c (c4x_valid_operands): More aggressively reject
+ 	invalid operand combinations.
+ 
+ 2004-01-26  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>
+ 
+ 	* config/c4x/c4x.c (c4x_check_legit_addr): Rename to
+ 	c4x_legitimate_address_p.  Fix post_modify check.
+ 
+ 	* config/c4x/c4x-protos.h (c4x_check_legit_addr): Adjust.
+ 	* config/c4x/c4x.h (c4x_check_legit_addr): Adjust.
+ 
+ 2004-01-25  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/pa/pa-protos.h: Remove the prototype for
+ 	hppa_builtin_saveregs.  Add a prototype for
+ 	pa_return_in_memory.
+ 	* config/pa/pa.c (TARGET_PROMOTE_FUNCTION_RETURN): New.
+ 	(TARGET_PROMOTE_PROTOTYPES): Likewise.
+ 	(TARGET_STRUCT_VALUE_RTX): Likewise.
+ 	(TARGET_RETURN_IN_MEMORY): Likewise.
+ 	(TARGET_EXPAND_BUILTIN_SAVEREGS): Likewise.
+ 	(pa_struct_value_rtx): Likewise.
+ 	(pa_return_in_memory): Likewise.
+ 	* config/pa/pa.h (STRUCT_VALUE_REGNUM): Rename to
+ 	PA_STRUCT_VALUE_REGNUM.
+ 	(INIT_CUMULATIVE_ARGS): Use pa_return_in_memory.
+ 	(EXPAND_BUILTIN_SAVEREGS): Remove.
+ 	(PROMOTE_PROTOTYPES): Likewise.
+ 	(PROMOTE_FUNCTION_RETURN): Likewise.
+ 
+ 2004-01-25  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/vax/vax.c (TARGET_PROMOTE_PROTOTYPES): New.
+ 	(TARGET_STRUCT_VALUE_RTX): Likewise.
+ 	(vax_struct_value_rtx): Likewise.
+ 	* config/vax/vax.h (STRUCT_VALUE_REGNUM): Rename to
+ 	VAX_STRUCT_VALUE_REGNUM.
+ 	(PROMOTE_PROTOTYPES): Remove.
+ 
+ 2004-01-26  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>
+ 
+ 	* config/c4x/c4x.h (LEGITIMIZE_RELOAD_ADDRESS):  Handle symref.
+ 
+ 2004-01-25  Chris Demetriou  <cgd@broadcom.com>
+ 
+ 	* config/mips/mips.h (ISA_HAS_HILO_INTERLOCKS): MIPS32, MIPS32r2,
+ 	and MIPS64 have HI/LO interlocks.  Update comment.
+ 
+ 2004-01-25  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/stormy16/stormy16-protos.h: Remove the prototype for
+ 	xstormy16_setup_incoming_varargs.
+ 	* config/stormy16/stormy16.c
+ 	(xstormy16_setup_incoming_varargs): Remove.
+ 	(xstormy16_return_in_memory): New.
+ 	(TARGET_PROMOTE_FUNCTION_ARGS): Likewise.
+ 	(TARGET_PROMOTE_FUNCTION_RETURN): Likewise.
+ 	(TARGET_PROMOTE_PROTOTYPES): Likewise.
+ 	(TARGET_STRUCT_VALUE_RTX): Likewise.
+ 	(TARGET_RETURN_IN_MEMORY): Likewise.
+ 	* config/stormy16/stormy16.h (PROMOTE_FUNCTION_ARGS): Remove.
+ 	(PROMOTE_FUNCTION_RETURN): Likewise
+ 	(PROMOTE_PROTOTYPES): Likewise
+ 	(RETURN_IN_MEMORY): Likewise
+ 	(STRUCT_VALUE): Likewise
+ 	(SETUP_INCOMING_VARARGS): Likewise
+ 
+ 2004-01-25  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.c (mips_offset_within_object_p): New function.
+ 	(mips_symbolic_constant_p): Use it in the SYMBOL_SMALL_DATA and
+ 	SYMBOL_CONSTANT_POOL cases.  Also use it for SYMBOL_GENERAL if the
+ 	ABI has 64-bit pointers and the object file only allows 32-bit symbols.
+ 
+ 2004-01-25  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/sh/sh.h (PROMOTE_FUNCTION_ARGS): Remove.
+ 	(PROMOTE_FUNCTION_RETURN): Likewise.
+ 
+ 2004-01-25  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/mn10300/mn10300-protos.h: Remove the prototype for
+ 	mn10300_builtin_saveregs.
+ 	* config/mn10300/mn10300.c (TARGET_PROMOTE_PROTOTYPES): New.
+ 	(TARGET_STRUCT_VALUE_RTX): Likewise.
+ 	(TARGET_RETURN_IN_MEMORY): Likewise.
+ 	(TARGET_EXPAND_BUILTIN_SAVEREGS): Likewise.
+ 	(mn10300_return_in_memory): Likewise.
+ 	(mn10300_builtin_saveregs): Make it static.
+ 	* config/mn10300/mn10300.h (PROMOTE_PROTOTYPES): Remove.
+ 	(RETURN_IN_MEMORY): Likewise.
+ 	(STRUCT_VALUE): Likewise.
+ 	(EXPAND_BUILTIN_SAVEREGS): Likewise.
+ 
+ 2004-01-25  Eric Botcazou  <ebotcazou@act-europe.fr>
+ 
+ 	PR bootstrap/13853
+ 	* cfgcleanup.c (try_optimize_cfg): Explicitly test against 0.
+ 
+ 2004-01-25  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/lib1funcs.asm (divnorm, modnorm): Optimize by
+ 	using ccr.
+ 
+ 2004-01-25  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/i860/i860-protos.h: Remove the prototype for
+ 	i860_saveregs.
+ 	* config/i860/i860.c (i860_saveregs): Make it static.
+ 	(i860_struct_value_rtx): New.
+ 	(TARGET_STRUCT_VALUE_RTX): Likewise.
+ 	(TARGET_EXPAND_BUILTIN_SAVEREGS): Likewise.
+ 	* config/i860/i860.h (STRUCT_VALUE_REGNUM): Rename to
+ 	I860_STRUCT_VALUE_REGNUM.
+ 	(EXPAND_BUILTIN_SAVEREGS): Remove.
+ 
+ 2004-01-25  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/m68hc11/m68hc11.c (TARGET_STRUCT_VALUE_RTX): New.
+ 	(TARGET_RETURN_IN_MEMORY): Likewise.
+ 	(m68hc11_struct_value_rtx): Likewise.
+ 	(m68hc11_return_in_memory): Likewise.
+ 	* config/m68hc11/m68hc11.h: Remove a commented-out definition
+ 	of PROMOTE_PROTOTYPES.
+ 	(RETURN_IN_MEMORY): Remove.
+ 	(STRUCT_VALUE_REGNUM): Likewise.
+ 
+ 2004-01-25  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/mmix/mmix-protos.h: Remove the prototype for
+ 	mmix_setup_incoming_varargs.
+ 	* config/mmix/mmix.c (TARGET_PROMOTE_FUNCTION_ARGS): New.
+ 	(TARGET_STRUCT_VALUE_RTX): Likewise.
+ 	(TARGET_SETUP_INCOMING_VARARGS): Likewise.
+ 	(mmix_setup_incoming_varargs): Make it static.
+ 	(mmix_struct_value_rtx): New.
+ 	* config/mmix/mmix.h (PROMOTE_FUNCTION_ARGS): Remove.
+ 	Remove a commented-out definition of PROMOTE_FUNCTION_RETURN.
+ 	(STRUCT_VALUE_REGNUM): Remove.
+ 	(SETUP_INCOMING_VARARGS): Likewise.
+ 
+ 2004-01-25  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/mips/mips-protos.h: Remove the prototypes for
+ 	mips_setup_incoming_varargs and mips_return_in_memory.
+ 	* config/mips/mips.c (TARGET_PROMOTE_FUNCTION_ARGS): New.
+ 	(TARGET_PROMOTE_FUNCTION_RETURN): Likewise.
+ 	(TARGET_PROMOTE_PROTOTYPES): Likewise.
+ 	(TARGET_STRUCT_VALUE_RTX): Likewise.
+ 	(TARGET_RETURN_IN_MEMORY): Likewise.
+ 	(TARGET_SETUP_INCOMING_VARARGS): Likewise.
+ 	(TARGET_STRICT_ARGUMENT_NAMING): Likewise.
+ 	(mips_setup_incoming_varargs): Match the prototype for
+ 	TARGET_SETUP_INCOMING_VARARGS.
+ 	(mips_return_in_memory): Make it static.  Add argument fntype.
+ 	(mips_strict_argument_naming): New.
+ 	* config/mips/mips.h (PROMOTE_PROTOTYPES): Remove.
+ 	(PROMOTE_FUNCTION_ARGS): Likewise.
+ 	(PROMOTE_FUNCTION_RETURN): Likewise.
+ 	(STRUCT_VALUE): Likewise.
+ 	(RETURN_IN_MEMORY): Likewise.
+ 	(SETUP_INCOMING_VARARGS): Likewise.
+ 	(STRICT_ARGUMENT_NAMING): Likewise.
+ 
+ 2004-01-25  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/ip2k/ip2k.c (TARGET_STRUCT_VALUE_RTX): New.
+ 	(TARGET_RETURN_IN_MEMORY): Likewise.
+ 	(TARGET_SETUP_INCOMING_VARARGS): Likewise.
+ 	(ip2k_return_in_memory): Likewise.
+ 	(ip2k_setup_incoming_varargs): Likewise.
+ 	* config/ip2k/ip2k.h (RETURN_IN_MEMORY): Remove.
+ 	(STRUCT_VALUE): Likewise.
+ 	(STRUCT_VALUE_INCOMING): Likewise.
+ 	(SETUP_INCOMING_VARARGS): Likewise.
+ 
+ 2004-01-25  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/avr/avr.c (TARGET_STRUCT_VALUE_RTX): New.
+ 	(TARGET_RETURN_IN_MEMORY): Likewise.
+ 	(TARGET_STRICT_ARGUMENT_NAMING): Likewise.
+ 	(avr_return_in_memory): Remove.
+ 	* config/avr/avr.h (RETURN_IN_MEMORY): Remove.
+ 	(STRUCT_VALUE): Likewise.
+ 	(STRUCT_VALUE_INCOMING): Likewise.
+ 	(STRICT_ARGUMENT_NAMING): Likewise.
+ 
+ 2004-01-25  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* combine.c (recog_for_combine): Avoid allocating unnecesary RTX.
+ 
+ 2004-01-25  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips-protos.h (mips_reg_mode_ok_for_base_p): Delete.
+ 	(mips_regno_mode_ok_for_base_p): Declare.
+ 	* config/mips/mips.h (ARG_POINTER_REGNUM): Renumber to 77.
+ 	(FRAME_POINTER_REGNUM): Renumber to 78.
+ 	(FIRST_PSEUDO_REGISTER): Update comment accordingly.
+ 	(BASE_REG_P, GP_REG_OR_PSEUDO_STRICT_P): Delete.
+ 	(GP_REG_OR_PSEUDO_NONSTRICT_P): Delete.
+ 	(REGNO_MODE_OK_FOR_BASE_P): Use mips_regno_mode_ok_for_base_p.
+ 	(REG_MODE_OK_FOR_BASE_P): Likewise.
+ 	* config/mips/mips.c (mips_reg_names, mips_sw_reg_names): Change
+ 	entry for 77 to "$arg" and entry for 78 to "$frame".
+ 	(mips_regno_to_class): Map 77 and 78 to ALL_REGS.
+ 	(mips_reg_mode_ok_for_base_p): Remove.
+ 	(mips_regno_mode_ok_for_base_p): New function, derived from old
+ 	BASE_REG_P macro.  Don't enforce the mips16 stack pointer
+ 	restrictions unless we're being strict.
+ 	(mips_valid_base_register_p): Use mips_regno_mode_ok_for_base_p.
+ 
+ 2004-01-24  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* c-common.h: Fix comment typos.
+ 	* c-decl.c: Likewise.
+ 	* cgraphunit.c: Likewise.
+ 	* combine.c: Likewise.
+ 	* et-forest.c: Likewise.
+ 	* flow.c: Likewise.
+ 	* function.c: Likewise.
+ 	* ifcvt.c: Likewise.
+ 	* integrate.c: Likewise.
+ 	* jump.c: Likewise.
+ 	* postreload.c: Likewise.
+ 	* varray.c: Likewise.
+ 
+ 2004-01-24  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* doc/frontends.texi: Update copyright.
+ 	* doc/gcov.texi: Likewise.
+ 	* doc/gty.texi: Likewise.
+ 	* doc/sourcebuild.texi: Likewise.
+ 	* doc/standards.texi: Likewise.
+ 
+ 2004-01-24  Herman A.J. ten Brugge  <hermantenbrugge@home.nl>
+ 
+ 	PR target/12978
+ 	* c4x.md: (movstrqi*) Use match_scratch instead of match_dup.
+ 	Remove movstrqi_small because it conflicts with movstrqi_large.
+ 
+ 2004-01-24  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/cris/cris.c (TARGET_PROMOTE_FUNCTION_ARGS): New.
+ 	(TARGET_STRUCT_VALUE_RTX): Likewise.
+ 	(cris_struct_value_rtx): Likewise.
+ 	* config/cris/cris.h (PROMOTE_FUNCTION_ARGS): Remove.
+ 	(CRIS_STACKADJ_REG): Use CRIS_STRUCT_VALUE_REGNUM instead of
+ 	STRUCT_VALUE_REGNUM.
+ 	(STRUCT_VALUE_REGNUM): Rename to CRIS_STRUCT_VALUE_REGNUM.
+ 
+ 2004-01-24  Ian Lance Taylor  <ian@wasabisystems.com>
+ 
+ 	PR bootstrap/13848
+ 	* cse.c (cse_cc_succs): Change the mode of the source expression
+ 	as soon as decide we need a new mode.  Don't permit changing modes
+ 	if we found a match in a successor block.
+ 	(cse_condition_code_reg): Save original mode of source expression
+ 	so that we know whether we have to change the mode in other
+ 	insns.
+ 
+ 2004-01-24  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* emit-rtl.c (change_address, adjust_address_1, offset_address,
+ 	widen_memory_access):  Return early when there is nothing to change.
+ 
+ 2004-01-24  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* simplify-rtx.c (simplify_relational_operation): Don't
+ 	simplify address == constant into address + -constant == 0.
+ 
+ 2004-01-24  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* gcc.c (process_command): Don't internationalize the
+ 	Copyright message.
+ 	* mips-tfile.c (main): Likewise.
+ 
+ 2004-01-24  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* cse.c: (cse_cc_succs) Fix comparison warning.
+ 
+ 2004-01-24  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300.md: Remove extraneous USE in expanders.
+ 
+ 2004-01-24  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300-protos.h: Provide prototypes for
+ 	h8300_legitimate_constant_p and h8300_legitimate_address_p.
+ 	* config/h8300/h8300.c (h8300_legitimate_constant_p): New.
+ 	(h8300_rtx_ok_for_base_p): Likewise.
+ 	(h8300_legitimate_address_p): Likewise.
+ 	* config/h8300/h8300.h (LEGITIMATE_CONSTANT_P): Use
+ 	h8300_legitimate_constant_p.
+ 	(RTX_OK_FOR_BASE_P): Remove.
+ 	(GO_IF_LEGITIMATE_ADDRESS): Use h8300_legitimate_address_p.
+ 
+ 2004-01-24  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300.h (REG_OK_FOR_INDEX_NONSTRICT_P): New.
+ 	(REG_OK_FOR_BASE_NONSTRICT_P): Likewise.
+ 	(REG_OK_FOR_INDEX_STRICT_P): Likewise.
+ 	(REG_OK_FOR_BASE_STRICT_P): Likewise.
+ 	(REG_OK_FOR_INDEX_STRICT_P): Use REGNO_OK_FOR_INDEX_P.
+ 	(REG_OK_FOR_BASE_STRICT_P): Use REGNO_OK_FOR_BASE_P.
+ 	(REG_OK_FOR_INDEX_P): Use REG_OK_FOR_INDEX_STRICT_P.
+ 	(REG_OK_FOR_BASE_P): Use REG_OK_FOR_BASE_STRICT_P.
+ 
+ 2004-01-24  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* cselib.c (remove_useless_values):  Do not access discarded values.
+ 
+ 2004-01-24  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-typeck.c (build_conditional_expr): Do not allow non-lvalue
+ 	arrays.
+ 
+ 2004-01-23  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* recog.c: Fix a typo in copyright.
+ 
+ 2004-01-23  Andrew Pinski  <apinski@apple.com>
+ 
+ 	* config/rs6000/rs6000.md (call): Fix misappiled patch.
+ 	(call_value): Likewise.
+ 
+ 2004-01-23  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR opt/12941
+ 	* combine.c (SHIFT_COUNT_TRUNCATED): Provide default value.
+ 	(simplify_comparison): Don't simplify (eq (zero_extract c 1 r) 0)
+ 	if SHIFT_COUNT_TRUNCATED is set.
+ 
+ 2004-01-23  Bob Wilson  <bob.wilson@acm.org>
+ 
+ 	* config/xtensa/xtensa.c (xtensa_va_arg): Handle complex values as
+ 	separate real and imaginary parts.
+ 	* config/xtensa/xtensa.h (SPLIT_COMPLEX_ARGS): Define.
+ 
+ 2004-01-23  Hartmut Penner <hpenner@de.ibm.com>
+ 
+ 	PR target/13674
+ 	* config/rs6000/rs6000.md (movdf_hardfloat64): Do not disparage
+ 	loading into GPR.
+ 
+ 2004-01-23  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* emit-rtl.c (change_address_1):  Do not re-generate the RTX if nothing
+ 	change.
+ 
+ 	* alloc-pool.c (align_four): Kill.
+ 	(create_alloc_pool): Align size to eight.
+ 	(free_alloc_pool, free_pool): Invalidate deallocated data.
+ 
+ 2004-01-23  Ian Lance Taylor  <ian@wasabisystems.com>
+ 
+ 	PR gcc/1532
+ 	* cse.c (cse_change_cc_mode): New static function.
+ 	(cse_change_cc_mode_insns, cse_cc_succs): Likewise.
+ 	(cse_condition_code_reg): New function.
+ 	* rtl.h (cse_condition_code_reg): Declare.
+ 	* toplev.c (rest_of_handle_cse2): Call cse_condition_code_reg.
+ 	* target.h (struct gcc_target): Add fixed_condition_code_regs and
+ 	cc_modes_compatible.
+ 	* target-def.h (TARGET_FIXED_CONDITION_CODE_REGS): Define.
+ 	(TARGET_CC_MODES_COMPATIBLE): Define.
+ 	(TARGET_INITIALIZER): Add new initializers.
+ 	* targhooks.c (default_cc_modes_compatible): New function.
+ 	* targhooks.c (default_cc_modes_compatible): Declare.
+ 	* hooks.c (hook_bool_intp_intp_false): New function.
+ 	* hooks.h (hook_bool_intp_intp_false): Declare.
+ 	* config/i386/i386.c (TARGET_FIXED_CONDITION_CODE_REGS): Define.
+ 	(TARGET_CC_MODES_COMPATIBLE): Define.
+ 	(ix86_fixed_condition_code_regs): New static function.
+ 	(ix86_cc_modes_compatible): Likewise.
+ 	* doc/tm.texi (Condition Code): Document new hooks.
+ 
+ 2004-01-23  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+ 
+ 	* fixinc/inclhack.def (bad_lval): Renamed to ...
+ 	(alpha_bad_lval): ... this.
+ 	Removed file list.
+ 	Restrict to alpha*-dec-osf*.
+ 	* fixinc/fixincl.x: Regenerate.
+ 	* fixinc/tests/base/dirent.h: Remove, moving test ...
+ 	* fixinc/tests/base/testing.h: ... here, reflecting new name.
+ 
+ 2004-01-23  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	PR c/13814
+ 	* c-decl.c (diagnose_mismatched_decls): Also discard a
+ 	built-in if we encounter an old-style definition with the
+ 	same name.
+ 
+ 2004-01-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* config.gcc (powerpc*-*): Clear $with_cpu or $with_tune if it was
+ 	set to default{32,64}.
+ 
+ 2004-01-21  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* config/rs6000/linux64.h (MD_FALLBACK_FRAME_STATE_FOR)
+ 	[!__powerpc64__]: Corrected to handle kernels with changed ucontext.
+ 
+ 2004-01-23  Eric Botcazou  <ebotcazou@act-europe.fr>
+ 	    Olivier Hainque  <hainque@act-europe.fr>
+ 
+ 	* fold-const.c (fold_binary_op_with_conditional_arg): Only
+ 	build a COMPOUND_EXPR if 'arg' is really a SAVE_EXPR.
+ 
+ 2004-01-23  Daniel Jacobowitz  <drow@mvista.com>
+ 
+ 	* config/arm/arm.c (arm_legitimate_address_p): Don't check the mode
+ 	size for minipool references.
+ 
+ 2004-01-23  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* real.c (real_floor, real_ceil): Tweak to allow input and output
+ 	arguments to overlap.
+ 	(real_round): New function to implement round(3m) semantics.
+ 	* real.h (real_round): Prototype here.
+ 	* builtins.c (fold_builtin_round): New function to constant fold
+ 	round, roundf and roundl.
+ 	(fold_builtin): Call fold_builtin_round for BUILT_IN_ROUND{,F,L}.
+ 
+ 2004-01-23  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	PR optimization/13819
+ 	* config/sh/sh.c (sh_reorg): Compensate for sharing of CLOBBERs
+ 	introduced by 2004-01-20's Jan Hubicka's copy_insn change.
+ 	(sh_handle_sp_switch_attribute): Remove warning.
+ 
+ 2004-01-23  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* i386.c (ix86_emit_restore_regs_using_mov):  Deal with large offsets.
+ 
+ 2004-01-23  J"orn Rennecke <joern.rennecke@superh.com>
+ 
+ 	* doc/tm.texi: Insert some weasel words when LOAD_EXTEND_OP
+ 	may or may not return non-NIL.
+ 	* postreload.c (reload_cse_simplify_operands): In LOAD_EXTEND_OP code,
+ 	check CANNOT_CHANGE_MODE_CLASS
+ 
+ 2004-01-23  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* basic-block.h (PROP_POSTRELOAD): New macro.
+ 	(CLEANUP_LOG_LINKS): New.
+ 	* cfgcleanup.c (cleanup_cfg): Only PROP_LOG_LINKS when asked to.
+ 	* toplev.c (rest_of_handle_life):  Preserve LOG_LINKS trought cleanup_cfg.
+ 
+ 	* cselib.c (value_pool): New.
+ 	(new_cselib_val): Use pool.
+ 	(cselib_init): Initialize value_pool
+ 	(cselib_finish): Free pool.
+ 
+ 2004-01-23  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* config/sparc/sparc.c (scan_record_type): New function.
+ 	(function_arg_slotno): Use it to determine which kinds of
+ 	registers the record can be passed in.
+ 
+ 2004-01-22  James A. Mmorrison  <ja2morri@uwaterloo.ca>
+ 
+ 	* config/pa/fptr.c: Fix old-style definition.
+ 
+ 2004-01-22  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	PR optimization/13724
+ 	* cse.c (fold_rtx) <SUBREG>:  Fold a SUBREG to zero if it
+ 	represents the zero bits produced by a ZERO_EXTEND operation.
+ 
+ 2004-01-22  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	PR optimization/13821
+ 	* simplify-rtx.c (simplify_subreg): Use subreg_lowpart_offset to
+ 	correctly calculate the lowpart offset of the contracted subreg.
+ 
+ 2004-01-22  Ian Lance Taylor  <ian@wasabisystems.com>
+ 
+ 	* doc/invoke.texi (Optimize Options): Note that --param arguments
+ 	are subject to change without notice.
+ 
+ 2004-01-22  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+ 
+ 	* config.gcc (mips-sgi-irix6*o32): Removed.
+ 	* config/mips/iris6-o32-as.h: Likewise.
+ 	* config/mips/iris6-o32-gas.h: Likewise.
+ 	* config/mips/iris6-o32.h: Likewise.
+ 
+ 2004-01-22  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* cfgcleanup.c (first_pass): New static variable.
+ 	(try_forward_edges):  Add work limiting check for threading.
+ 	(try_crossjump_bb):  Add work limiting check for crossjumping.
+ 	(try_optimize_cfg):  Maintain first pass variable.
+ 
+ 2004-01-22  Bob Wilson  <bob.wilson@acm.org>
+ 
+ 	* config/xtensa/xtensa.c (function_arg): Generalize logic so that it
+ 	handles complex and vector modes.
+ 
+ 2004-01-22  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300.h (REG_OK_FOR_INDEX_P_STRICT): Remove.
+ 	(REG_OK_FOR_BASE_P_STRICT): Likewise.
+ 	(STRICT): Likewise.
+ 
+ 2004-01-22  Daniel Jacobowitz  <drow@mvista.com>
+ 
+ 	* c-semantics.c (genrtl_while_stmt, genrtl_do_stmt_1)
+ 	(genrtl_for_stmt): Remove emit_nop calls.
+ 
+ 2004-01-22  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	PR target/13713
+ 	PR target/13324
+ 	* pa.md (movstrsi_prereload, movstrsi_postreload, movstrdi_prereload,
+ 	movstrdi_postreload, clrstrsi_prereload, clrstrsi_postreload,
+ 	clrstrdi_prereload, clrstrdi_postreload): Fix constraints.
+ 
+ 2004-01-22  Daniel Jacobowitz  <drow@mvista.com>
+ 
+ 	* config/arm/arm.c: Include "debug.h".
+ 	(thumb_pushpop): Take two new arguments.  Add some commentary.
+ 	Output frame information when pushing.
+ 	(thumb_exit, thumb_unexpanded_epilogue): Update calls to
+ 	thumb_pushpop.
+ 	(thumb_output_function_prologue): Likewise.  Accumulate a CFA
+ 	offset, and pass it to thumb_pushpop.  Output CFI information.
+ 	(thumb_expand_prologue): Add some frame-related markers and notes.
+ 
+ 2004-01-22  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390.c (s390_frame_info): Allow large frame sizes
+ 	for TARGET_64BIT.
+ 	(s390_arg_frame_offset): Change return type to HOST_WIDE_INT.
+ 	* config/s390/s390-protos.h (s390_arg_frame_offset): Likewise.
+ 
+ 2004-01-22  Roger Sayle  <roger@eyesopen.com>
+ 	    Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* rtlanal.c (subreg_lsb_1): New function split out from subreg_lsb.
+ 	(subreg_lsb): Change to call new subreg_lsb_1 helper function.
+ 	* rtl.h (subreg_lsb_1): Prototype here.
+ 	* simplify-rtx.c (simplify_subreg): Optimize subregs of zero and
+ 	sign extensions.
+ 
+ 2004-01-22  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* doc/tm.texi (CASE_VECTOR_PC_RELATIVE): Mention that the
+ 	macro need not be defined if jump-tables should contain
+ 	relative addresses only when -fPIC or -fPIC is in effect.
+ 
+ 2004-01-22  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* alias.c (reg_base_value): Turn into varray.
+ 	(reg_base_value_size): Kill.
+ 	(old_reg_base_value): New deletable varray.
+ 	(alias_invariant_size): New variable.
+ 	(REG_BASE_VALUE): Update to use varray.
+ 	(find_base_value): Likewise.
+ 	(record_set): Likewise.
+ 	(record_base_value): Likewise.
+ 	(memrefs_conflict_p): Likewise.
+ 	(record_set): Likewise
+ 	(record_base_value): Likewise.
+ 	(memrefs_conflict_p): Use alias_invariant_size.
+ 	(init_alias_analysis): Use varray; set alias_invariant_size;
+ 	rescale other arrays to be sized by maxreg.
+ 	(end_alias_analysis): Save reg_base_value; clear alias_invariant_size.
+ 
+ 2004-01-22  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* config/sparc/sparc.c (function_arg_slotno): Use
+ 	FLOAT_TYPE_P to detect FP fields in structures.
+ 	(function_arg_record_value_1): Likewise.
+ 	(function_arg_record_value_2): Likewise.
+ 
+ 2004-01-22  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* function.c (allocate_struct_function): Do not initialize expr, emit
+ 	and varasm.
+ 	(prepare_function_start): Do it here.
+ 	* c-parse.in (maybe_type_qual): Do not produce line number notes.
+ 
+ 2004-01-22  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR target/13559
+ 	* config/sparc/sparc.c (function_arg_record_value_3): Revert
+ 	to 'word_mode' once the first slot has been filled.
+ 
+ 2004-01-22  Olivier Hainque  <hainque@act-europe.fr>
+ 
+ 	* config/sparc/sparc.c (function_arg_record_value_1): Fix
+ 	computation of the number of integer registers required.
+ 
+ 2004-01-21  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/i386/i386.md: Simplify certain comparisons of
+ 	const_int.
+ 
+ 2004-01-21  Andrew Pinski  <apinski@apple.com>
+ 
+ 	PR target/13785
+ 	* config/rs6000/rs6000.md (call_value): Force operand
+ 	1 not operand 0 into a register.
+ 
+ 2004-01-21  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* cpperror.c, cpptrad.c, longlong.h, params.def, rtl.def,
+ 	unwind-dw2-fde.h: Update copyright.
+ 
+ 2004-01-21  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	* pa-protos.h: Update copyright.
+ 	* pa.h: Likewise.
+ 	* pa.md: Likewise.
+ 
+ 2004-01-21  Caroline Tice  <ctice@apple.com>
+ 
+ 	PR target/12308
+ 	* config/i386/i386.md (fix_truncxfdi2): Add clause to clobber
+ 	flags register.
+ 	(fix_truncdfdi2): Likewise.
+ 	(fix_truncsfdi2): Likewise.
+ 	(*fix_truncdi_1): Likewise.
+ 	(fix_truncxfsi2): Likewise.
+ 	(fix_truncdfsi2): Likewise.
+ 	(fix_truncsfsi2): Likewise.
+ 	(*fix_truncsi_1): Likewise.
+ 	(fix_truncxfhi2): Likewise.
+ 	(fix_truncdfhi2): Likewise.
+ 	(fix_truncsfhi2): Likewise.
+ 	(*fix_trunchi_1): Likewise.
+ 
+ 2004-01-21  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* alias.c, basic-block.h, c-common.c, c-common.h,
+ 	c-cppbuiltin.c, c-opts.c, c-pragma.c, c-pretty-print.c,
+ 	calls.c, cfg.c, cfgcleanup.c, cfgrtl.c, cgraph.h, collect2.c,
+ 	combine.c, cppcharset.c, cpphash.h, cppinit.c, cpplib.c,
+ 	cpplib.h, cppmacro.c, crtstuff.c, cselib.c, cselib.h,
+ 	defaults.h, df.c, dominance.c, et-forest.c, expmed.c, expr.c,
+ 	expr.h, fix-header.c, function.h, gcc.c, gcse.c, genattrtab.c,
+ 	genautomata.c, genconditions.c, genemit.c, genflags.c,
+ 	gengtype.c, gengtype.h, genopinit.c, genrecog.c, gensupport.c,
+ 	ggc-zone.c, graph.c, haifa-sched.c, input.h, integrate.c,
+ 	langhooks-def.h, langhooks.c, langhooks.h, line-map.c,
+ 	line-map.h, local-alloc.c, optabs.c, optabs.h, postreload.c,
+ 	ra.h, recog.c, reg-stack.c, regmove.c, reload.c, reorg.c,
+ 	rtl.c, sched-deps.c, sched-ebb.c, sdbout.c, system.h,
+ 	target.h, targhooks.c, toplev.h, tree-inline.c, unwind-pe.h,
+ 	unwind.h, varray.c, varray.h: Update copyright.
+ 
+ 2004-01-21  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/coff.h: Update copyright.
+ 	* config/h8300/elf.h: Likewise.
+ 	* config/h8300/h8300-protos.h: Likewise.
+ 	* config/h8300/h8300.c: Likewise.
+ 	* config/h8300/h8300.h: Likewise.
+ 	* config/h8300/h8300.md: Likewise.
+ 
+ 2004-01-21  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	* fixinc/inclhack.def (hpux10_stdio_declarations, ultrix_const3,
+ 	ultrix_locale, ultrix_stdlib, ultrix_strings, ultrix_sys_time,
+ 	ultrix_unistd): New hacks.
+ 	* fixinc/tests/base/stdio.h (HPUX10_STDIO_DECLARATIONS_CHECK,
+ 	ULTRIX_CONST2_CHECK): Add checks.
+ 	* fixinc/tests/base/stdlib.h (ULTRIX_STDLIB_CHECK): Likewise.
+ 	* fixinc/tests/base/strings.h (ULTRIX_STRINGS2_CHECK): Likewise.
+ 	* fixinc/tests/base/unistd.h (ULTRIX_UNISTD_CHECK): Likewise.
+ 	* fixinc/tests/base/sys/time.h (ULTRIX_SYS_TIME_CHECK): Likewise.
+ 	* fixinc/tests/base/locale.h: New file.
+ 	* fixinc/fixincl.x: Rebuilt.
+ 
+ 2004-01-21  Andreas Jaeger  <aj@suse.de>
+ 	    Michael Matz  <matz@suse.de>
+ 
+ 	* doc/extend.texi (Extended Asm): Clarify memory clobber.
+ 
+ 2004-01-21  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* crtstuff.c (frame_dummy, __do_global_ctors_1): Call
+ 	_Jv_RegisterClasses through a function pointer.
+ 
+ 2004-01-21  Falk Hueffner  <falk@debian.org>
+ 
+ 	PR target/12898
+ 	* config/alpha/alpha.c (alpha_emit_set_const_1): If
+ 	no_new_pseudos, use gen_rtx_SET directly for SImode constants
+ 	which need multiple instructions to emit.
+ 
+ 2004-01-21  Inaoka Kazuhiro  <inaoka.kazuhiro@renesas.com>
+ 
+ 	* config/m32r/m32r.h (CPP_SPEC): Define.
+ 
+ 2004-01-21  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* c-decl.c (merge_decls): Kill different_binding_level and
+ 	different_tu arguments; simplify throughout.
+ 	(duplicate_decls): Likewise.
+ 	(pushdecl, merge_translation_unit_decls): Update calls to
+ 	duplicate_decls.
+ 
+ 2004-01-20  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+ 
+ 	* Makefile.in (pretty-print.o): Depend on $(CONFIG_H) and
+ 	$(SYSTEM_H).
+ 	(print-rtl1.o): Depend on $(SYSTEM_H).
+ 
+ 2004-01-20  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	PR bootstrap/12730
+ 	* configure.ac: Delete definition and subsitution of docdir.
+ 	Add info, man, srcman and srcinfo to target hooks. Create doc/
+ 	directory.
+ 	* configure: Regenerate.
+ 	* Makefile.in: Don't substitute docdir and delete all references
+ 	throughout.
+ 	(MAKEINFOFLAGS): Define.
+ 	(stmp-docobjdir): Delete.
+ 	(INFOFILES, MANFILES): Define.
+ 	(info): Call lang.info, srcinfo and lang.srcinfo.
+ 	(generated-manpages): Call lang.man, srcman and lang.srcman.
+ 	(srcinfo, srcman): New rules to copy back files to source directory.
+ 	(doc/%.info, doc/%.dvi, doc/%.1, doc/%.7): New implict rule.
+ 	(install-man): Revamp rule.
+ 	(clean): Update dvi directory.
+ 	(distclean): Delete TAGS from front end directorys.
+ 	(maintainer-clean): Delete all document files in source directory.
+ 
+ 	objc/Make-lang.in (objc.man, objc.info): Dummy entries.
+ 	(objc.srcman, objc.srcinfo): Likewise.
+ 
+ 2004-01-20  Bruce Korb  <bkorb@gnu.org>
+ 
+ 	* fixinc/inclhack.def(math_exception): bypass only for glibc.
+ 	(matherr_decl): rename & relocate as exception_structure.
+ 	This fix must precede the math_exception fix.
+ 
+ 2004-01-20  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* fold-const.c (fold_convert): Rename to fold_convert_const.
+ 	(fold_convert_const): Change arguments to take a tree_code,
+ 	a type and the operand/expression to be converted.  Return
+ 	NULL_TREE if no simplification is possible.  Add support for
+ 	FIX_CEIL_EXPR and FIX_FLOOR_EXPR in addition to FIX_TRUNC_EXPR.
+ 	(fold): Handle FIX_CEIL_EXPR and FIX_FLOOR_EXPR.
+ 	Adjust call to fold_convert to match new fold_convert_const.
+ 	Avoid modifying the tree passed to fold in-place.
+ 
+ 2004-01-21  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* config/rs6000/sysv4.h (DWARF2_FRAME_REG_OUT): Define.
+ 	* dwarf2out.c (output_cfi): Map regs using DWARF2_FRAME_REG_OUT.
+ 	* doc/tm.texi (DWARF_FRAME_REGNUM, DWARF2_FRAME_REG_OUT): Document.
+ 
+ 2004-01-20  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	* pa-protos.h (compute_frame_size): Use HOST_WIDE_INT for frame sizes.
+ 	* pa.c (store_reg, store_reg_modify, load_reg, set_reg_plus_d):
+ 	Likewise.  Handle frames larger than 0x7fffffff on 64-bit ports.
+ 	(emit_move_sequence): Check scratch_reg first in various if statements.
+ 	Extend source simplification to handle all 64-bit CONST_INTs.
+ 	(pa_output_function_prologue): Use HOST_WIDE_INT_PRINT_DEC for printing
+ 	frame size.
+ 	(hppa_expand_prologue, hppa_expand_epilogue): Use HOST_WIDE_INT for
+ 	frame offset calculations.
+ 	* pa.h (NEW_HP_ASSEMBLER): Add comment.
+ 	(MAX_LEGIT_64BIT_CONST_INT, MIN_LEGIT_64BIT_CONST_INT,
+ 	LEGITIMATE_64BIT_CONST_INT_P): Define.
+ 	(LEGITIMATE_CONSTANT_P): Use LEGITIMATE_64BIT_CONST_INT_P.  Treat
+ 	any CONST_INT as legitimate during and after reload.
+ 	(VAL_32_BITS_P, INT_32_BITS): Define.
+ 	(LEGITIMIZE_RELOAD_ADDRESS): Handle large frame offsets.
+ 
+ 2004-01-20  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* emit-rtl.c (verify_rtx_sharing, copy_insn_1,
+ 	emit_copy_of_insn_after, emit_copy_of_insn_after): Clobbers
+ 	containing hard regs are shared.
+ 	(gen_hard_reg_clobber): New function.
+ 	(hard_reg_clobbers): New array.
+ 	* genemit.c (gen_exp): Use gen_hard_reg_clobber.
+ 	(copy_rtx): Do not copy clobbers containing hard regs.
+ 	* rtl.h (gen_hard_reg_clobber): Declare.
+ 
+ 2004-01-20  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* varray.c:  Include hashtab.h
+ 	(varray_descriptor): New structure.
+ 	(hash_descriptor, eq_descriptor, varray_descriptor,
+ 	print_statistics): New static functions
+ 	(varray_init, varray_grow): Update statistics
+ 	(dump_varray_statistics): New function.
+ 	* varray.h (dump_varray_statistics): Declare.
+ 	* toplev.c (finalize): Call it.
+ 	* Makefile.in (varray.o): Add dependency.
+ 
+ 2004-01-20  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* cselib.c: Include alloc-pool.h
+ 	(empty_vals, empty_elt_lists, empty_elt_loc_lists): Kill.
+ 	(elt_loc_list_pool, elt_list_pool, cselib_val_pool): Declare.
+ 	(new_elt_list, new_elt_loc_list, unchain_one_elt_list,
+ 	unchain_one_elt_loc_list_pool, unchain_one_value,
+ 	new_cselib_val): Simplify using allocpool.
+ 	(cselib_init): Initialize allocpools.
+ 	(cselib_finish): Finish allocpools.
+ 	* Makefile.in (cselib.o): Depend on alloc-pool.h
+ 
+ 2004-01-20  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.c (mips_load_call_address): Make the call insn
+ 	use $gp if it could be calling a lazy binding stub.
+ 
+ 2004-01-20  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/s390/s390.c (TARGET_PROMOTE_FUNCTION_ARGS): Define.
+ 	(TARGET_PROMOTE_FUNCTION_RETURN): Likewise.
+ 	(TARGET_STRUCT_VALUE_RTX): Likewise.
+ 	* config/s390/s390.h (PROMOTE_FUNCTION_ARGS): Remove.
+ 	(PROMOTE_FUNCTION_RETURN): Remove.
+ 	(STRUCT_VALUE): Remove.
+ 
+ 2004-01-20  Denis Chertykov  <denisc@overta.ru>
+ 
+ 	PR bootstrap/13735
+ 	* config/avr/avr.h (BASE_REG_CLASS): Don't permit to use X
+ 	register as pointer after reload.
+ 
+ 2004-01-20  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	PR optimization/12440
+ 	* loop.c: Include ggc.h.
+ 	(loop_optimize): Run garbage collector between optimization of loops.
+ 	* Makefile.in (loop.o): Add GGC_H dependency.
+ 
+ 2004-01-20  Hartmut Penner  <hpenner@de.ibm.com>
+ 
+ 	* gcc/config/rs6000/rs6000.c (function_arg) Handle
+ 	vector register special in function without prototype.
+ 	(function_arg_advance): Vector parameters get always
+ 	GPRs allocated for the linux64 target.
+ 
+ 2004-01-20  Kazuhiro Inaoka  <inaoka.kazuhiro@renesas.com>
+ 
+ 	* config/m32r/m32r.h (TARGET_M32R2). Test for TARGET_M32R2_MASK
+ 	not TARGET_M32RX_MASK.
+ 
+ 2004-01-20  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR target/13557
+ 	* config/sparc/sparc.c (function_arg): Reorder the cases.
+ 
+ 2004-01-19  Per Bothner  <per@bothner.com>
+ 
+ 	Move cpp_reader's line_maps field to a shared global.
+ 	* cpphash.h (cpp_reader):  Rename line_maps field to line_table
+ 	and change the type to a pointer rather than a struct.
+ 	* cppinit.c (cpp_push_main_field):  Adjust accordingly.
+ 	* cpplib.c (do_include_common, _cpp_do_file_change, cpp_get_callbacks):
+ 	Likewise.
+ 	* cppfiles.c (validate_pch):  Likewise.
+ 	* cppmacro.c (_cpp_warn_if_unused_macro, _cpp_builtin_macro_text):
+ 	Likewise.
+ 	* cpperror.c (print_location):  Likewise.
+ 	* cpplib.h (cpp_create_reader):  New line_maps pointer parameter.
+ 	* cppinit.c (cpp_create_reader):  Handle new parameter.
+ 	(cpp_destroy):  Don't free line_maps - that's no longer our job.
+ 	* input.h (line_table):  New variable.
+ 	* toplev.c (line_table):  Declare variable.
+ 	(general_init):  Initialize line_table.
+ 	* c-opts.c (c_common_init_options):  Pass line_table to
+ 	cpp_create_reader.
+ 	* fix-header.c (read_scan_file):  New local variable line_table.
+ 	Initialize, and pass it to cpp_create_reader.
+ 	* Makefile.in (LIBS, LIBDEPS):  Add libcpp.a.
+ 	(C_AND_OBJC_OBJS, fix-header):  Remove redundant libcpp.a.
+ 
+ 2004-01-19  Per Bothner  <per@bothner.com>
+ 
+ 	Implement a cache for linemap_lookup.
+ 	* line-map.h (struct_line_maps):  Add cache field.
+ 	* line-map.c (linemap_init):  Zero cache field.
+ 	(linemap_add):  Set cache field to offset of newly allocated map.
+ 	(linemap_lookup):  Use and set cache field.
+ 
+ 2004-01-20  Kaz Kojima  <kkojima@gcc.gnu.org>
+ 
+ 	PR optimization/13567
+ 	* cse.c (cse_basic_block): Call cse_insn with a non-null
+ 	libcall_insn for the last SET insn of a no-confilict block.
+ 
+ 2004-01-20  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* Makefile.in (target_noncanonical, program_transform_name): Use
+ 	immediate define instead of deferred.
+ 	(GCC_INSTALL_NAME, GCC_TARGET_INSTALL_NAME, CPP_INSTALL_NAME,
+ 	PROTOIZE_INSTALL_NAME, UNPROTOIZE_INSTALL_NAME, GCOV_INSTALL_NAME,
+ 	GCCBUG_INSTALL_NAME): Define via a immediate $(shell) instead of
+ 	deferred backquote.
+ 
+ 2004-01-20  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-decl.c (c_init_decl_processing): Set pedantic_lvalues to
+ 	true unconditionally.
+ 	* c-typeck.c (unary_complex_lvalue, pedantic_lvalue_warning):
+ 	Remove.
+ 	(build_unary_op, build_modify_expr): Don't handle extended
+ 	lvalues.
+ 	(build_component_ref, build_conditional_expr): Call non_lvalue
+ 	instead of pedantic_non_lvalue.
+ 	(build_c_cast): Don't condition use of non_lvalue on pedantic.
+ 	* fold-const.c (fold): Don't check pedantic directly for
+ 	COMPOUND_EXPR.  Ensure that results for COMPOUND_EXPR are
+ 	passed to pedantic_non_lvalue.
+ 	* doc/extend.texi: Remove documentation of extended lvalues.
+ 
+ 2004-01-19  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	PR optimization/5263
+ 	* simplify-rtx.c (associative_constant_p): Delete.
+ 	(simplify_associative_operation): Rewrite to linearize terms, and
+ 	attempt to simplify new term against both left and right subterms.
+ 	(simplify_binary_operation): Call swap_commutative_operands_p on
+ 	op0 and op1, not trueop0 and trueop1.  Move the initialization of
+ 	trueop0 and trueop1 down to where first needed.
+ 	(simplify_relational_operation): Likewise.
+ 	* rtlanal.c (commutative_operand_precedence): Also order constant
+ 	operands using avoid_constant_pool_reference.
+ 
+ 2004-01-19  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/alpha/alpha.c (aligned_memory_operand): Check MEM_ALIGN,
+ 	don't check memory mode.
+ 	(unaligned_memory_operand): Likewise.
+ 	(reload_inqi, reload_inhi, reload_outqi, reload_outhi): Don't
+ 	abort for op0 not MEM.
+ 
+ 	* config/alpha/alpha.c (alpha_expand_mov_nobwx): If the destination
+ 	is not a reg, copy to a scratch first.
+ 	(aligned_loadqi, aligned_loadhi, unaligned_loadqi, unaligned_loadhi,
+ 	unaligned_loadqi_le, unaligned_loadqi_be, unaligned_loadhi_le,
+ 	unaligned_loadhi_be): Expect op0 in DImode; don't SUBREG.
+ 	(reload_inqi, reload_inhi): Fix mode of op0.
+ 	(reload_inqi_help, reload_inhi_help, reload_outqi_help,
+ 	reload_outhi_help): Likewise.  Use define_insn_and_split.
+ 
+ 	* config/alpha/alpha.md (call peepholes): Check for REG_NORETURN
+ 	as well as $29 dead.
+ 
+ 2004-01-19  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* config/sparc/sol2.h (ASM_DECLARE_OBJECT_NAME): New.  Emit
+ 	"tls_object" for thread-local objects.
+ 	* config/sparc/sparc.c (sparc_elf_asm_named_section): Emit
+ 	"#tls" for thread-local sections.
+ 	* configure.ac (thread-local checks): Specify --fatal-warnings in
+ 	every binutils-specific checks.  For sparc*-*-*, test whether the
+ 	OS is Solaris and the tools are native and act accordingly.
+ 	* configure: Rebuild.
+ 
+ 2004-01-19  Jeff Law  <law@redhat.com>
+ 
+ 	* contrib.texi: Update Paolo Carlini's entry.  New entries for
+ 	Jerry Quinn and Petur Runolfsson.
+ 
+ 2004-01-19  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* config/i386/i386.md (*movhi_1, *movqi_1): When optimizing for
+ 	size, don't use the larger zero-extending loads.
+ 
+ 2004-01-19  Richard Henderson  <rth@redhat.com>
+ 
+ 	* alpha.h (HARD_REGNO_MODE_OK): Disallow SImode in FP regs.
+ 	* alpha.md (UNSPEC_NT_LDA): Remove.
+ 	(UNSPEC_CVTLQ, cvtlq): New.
+ 	(extendsidi2_1): Rename from extendsidi2_nofix; remove f/f.
+ 	(extendsidi2_fix): Remove.
+ 	(extendsidi2 splitter): Use cvtlq.
+ 	(extendsidi2 fp peepholes): Remove.
+ 	(cvtql): Use SFmode instead of SImode.
+ 	(fix_trunc?fsi): Update to match.
+ 	(floatsisf2_ieee, floatsisf2, floatsidf2_ieee, floatsidf2): New.
+ 	(movsi): Rename from movsi_nofix, remove f alternatives.
+ 	(movsi_nt_vms): Similarly.
+ 	(movsi_fix, movsi_nt_vms_fix): Remove.
+ 	(nt_lda): Remove.
+ 	* alpha.c (alpha_expand_prologue): Use adddi3, not nt_lda.
+ 
+ 2004-01-19  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* cgraph.c (cgraph_remove_node): Fix removal from linked list.
+ 	* cgraphunit.c (cgraph_finalize_compilation_unit): Clear next_needed
+ 	list.
+ 	(cgraph_remove_unreachable_nodes): New function
+ 	(cgraph_decide_inlining_of_small_function): Fix pasto.
+ 	(cgraph_decide_inlining_incrementally): Fix pasto.
+ 	(cgrpah_decide_inlining): Likewise; remove unreachable nodes.
+ 
+ 2004-01-19  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* gengtype.c (header_file): Make it static.
+ 	(write_types_process_field, write_enum_defn): Minor whitespace fixes.
+ 	* gengtype.h (header_file): No longer extern.
+ 
+ 2004-01-18  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* defaults.h (CASE_VECTOR_PC_RELATIVE): Provide the default.
+ 	* expr.c (CASE_VECTOR_PC_RELATIVE): Remove.
+ 	* stmt.c (CASE_VECTOR_PC_RELATIVE): Likewise.
+ 
+ 2004-01-18  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* stmt.c (HAVE_casesi): Define it not already defined.
+ 	(HAVE_tablejump): Likewise.
+ 	(expand_end_case_type): Resort to the binary tree method if
+ 	neither casesi or tablejump is available.
+ 
+ 2004-01-18  Daniel Jacobowitz  <drow@mvista.com>
+ 
+ 	* final.c (final_scan_insn): Make non-static again.
+ 	* output.h (final_scan_insn): Re-add prototype.
+ 	* config/arc/arc.c (arc_output_function_epilogue): Add NULL
+ 	to final_scan_insn call.
+ 	* config/cris/cris.c (cris_target_asm_function_epilogue): Likewise.
+ 	* config/mips/mips.c (mips_output_conditional_branch): Likewise.
+ 	* config/pa/pa.c (output_lbranch, output_call): Likewise.
+ 	* config/sh/sh.c (print_slot): Likewise.
+ 	* config/sparc/sparc.c (sparc_nonflat_function_epilogue): Likewise.
+ 	(output_sibcall, sparc_flat_function_epilogue): Likewise.
+ 
+ 2004-01-18  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* basic-block.h (try_redirect_by_replacing_jump): Declare.
+ 	* cfgcleanup.c (try_optimize_cfg): Use it.
+ 	* cfgrtl.c (try_redirect_by_replacing_jump): Export.
+ 	(rtl_redirect_edge_and_branch, cfg_layout_redirect_edge_and_branch):
+ 	Kill hack.
+ 	(cfg_layout_merge_blocks): Use try_redirect_by_replacing_jump.
+ 
+ 	Revert:
+ 	2004-01-16  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 		* cfgrtl.c (try_redirect_by_replacing_jump): Optimize tablejumps
+ 		even after reload, just don't remove the actual jump tables.
+ 
+ 2004-01-18  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/rs6000/rs6000.h (STRICT_ARGUMENT_NAMING): Remove.
+ 
+ 2004-01-18  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* defaults.h (ASM_OUTPUT_ADDR_VEC_ELT): Fix the computation of
+ 	the size of a pointer in bytes.
+ 
+ 2004-01-18  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* builtins.c (expand_builtin_expect_jump): Fix thinko of reusing
+ 	live "next" variable, which could lead to an infinite loop.
+ 
+ 2004-01-18  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* config/rs6000/altivec.h: Wrap C++ functions in extern "C++"
+ 	block.
+ 
+ 	* config/rs6000/rs6000.c (rs6000_special_round_type_align):
+ 	Check for NULL in the chain and remove repeated code.
+ 
+ 2004-01-18  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* coverage.c (checksum_string): Rename to ...
+ 	(coverage_checksum_string): ... this one, Use crc32_string; recognize
+ 	names containing random number and zero the number out in order to get
+ 	match.
+ 
+ 2004-01-18  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.c (mips_got_alias_set): Mark for PCH.
+ 
+ 2004-01-18  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* doc/c-tree.texi, doc/cpp.texi, doc/extend.texi,
+ 	doc/frontends.texi, doc/gcov.texi, doc/gty.texi, doc/install.texi,
+ 	doc/invoke.texi, doc/libgcc.texi, doc/md.texi, doc/rtl.texi,
+ 	doc/sourcebuild.texi, doc/standards.texi, doc/tm.texi,
+ 	doc/trouble.texi: Remove trailing whitespace.
+ 
+ 2004-01-18  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	PR target/7618
+ 	* config/mips/mips.c: Include cfglayout.h.
+ 	(TARGET_ASM_OUTPUT_MI_THUNK, TARGET_ASM_CAN_OUTPUT_MI_THUNK): Define.
+ 	(mips_unspec_offset_high): Add temporary register argument.
+ 	(mips_load_call_address): New function, split out from...
+ 	(mips_expand_call): ...here.
+ 	(mips_output_cplocal): New function.
+ 	(mips_output_function_prologue, mips_output_function_epilogue): Use it.
+ 	(mips_emit_loadgp): New function, split out from...
+ 	(mips_expand_prologue): ...here.
+ 	(mips_output_mi_thunk): New function.
+ 
+ 2004-01-17  Bernardo Innocenti  <bernie@develer.com>
+ 
+ 	* longlong.h (mc68020, __mc68030__, mc68030, __mc68040__, mc68040,
+ 	mcpu32): Remove redundant checks for implied target predefines.
+ 
+ 2004-1-17  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_special_round_type_align):
+ 	Return type is unsigned int not int.
+ 	* config/rs6000/rs6000-protos.h (rs6000_special_round_type_align):
+ 	Likewise.
+ 
+ 2004-01-18  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* doc/contrib.texi, doc/cppenv.texi, doc/extend.texi,
+ 	doc/install.texi, doc/invoke.texi, doc/tm.texi: Consistently use
+ 	"GNU/Linux" and "Microsoft Windows" terminology.
+ 
+ 2004-01-18  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* doc/c-tree.texi, doc/compat.texi, doc/cpp.texi,
+ 	doc/cppopts.texi, doc/extend.texi, doc/install.texi,
+ 	doc/interface.texi, doc/invoke.texi, doc/libgcc.texi, doc/md.texi,
+ 	doc/objc.texi, doc/rtl.texi, doc/tm.texi, doc/trouble.texi: Use
+ 	@smallexample instead of @example.
+ 
+ 2004-01-17  Ziemowit Laski  <zlaski@apple.com>
+ 
+ 	* objc/objc-act.c (build_objc_method_call): Use target
+ 	hooks instead of macros to determine if ..._stret
+ 	dispatchers should be used (NeXT runtime only).
+ 
+ 2004-01-17  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* builtins.c (expand_builtin_expect_jump): Fix mistake in my
+ 	last patch.  Use XEXP (x, 0) to get a LABEL_REF's CODE_LABEL.
+ 
+ 2004-01-17  Daniel Jacobowitz  <drow@mvista.com>
+ 
+ 	* rtl.h (emit_insn_before_sameloc, emit_jump_insn_before_sameloc)
+ 	(emit_call_insn_before_sameloc, emit_insn_after_sameloc)
+ 	(emit_jump_insn_after_sameloc, emit_call_insn_after_sameloc): New
+ 	macros.
+ 	* reload1.c (emit_reload_insns): Use them.
+ 	* emit-rtl.c (emit_insn_before_sameloc, emit_insn_after_sameloc)
+ 	(emit_jump_insn_after_sameloc, emit_call_insn_after_sameloc): Check
+ 	for NULL PATTERN.
+ 
+ 2004-01-17  Daniel Jacobowitz  <drow@mvista.com>
+ 
+ 	* final.c (SEEN_BB, SEEN_NOTE, SEEN_EMITTED): Define.
+ 	(final_scan_insn): Update to take an additional SEEN argument.  Emit
+ 	a line note after the prologue.  Make static.
+ 	(line_note_exists): Remove.
+ 	(final): Don't initialize line_note_exists.  Update call to
+ 	final_scan_insn.
+ 	* output.h (final_scan_insn): Remove prologue.
+ 	* function.c (set_insn_locators): Update comment.
+ 	(thread_prologue_and_epilogue_insns): Add a comment.
+ 
+ 2004-01-17  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR target/10781
+ 	* config/rs6000/rs6000-protos.h (rs6000_special_round_type_align):
+ 	Prototype.
+ 	* config/rs6000/rs6000.c (rs6000_special_round_type_align):
+ 	New function.
+ 	* config/rs6000/linux64.h (ROUND_TYPE_ALIGN): Use it.
+ 	* config/rs6000/aix.h (ROUND_TYPE_ALIGN): Likewise.
+ 	* config/rs6000/darwin.h (ROUND_TYPE_ALIGN): Likewise.
+ 
+ 2004-01-17  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* toplev.c (rest_of_handle_reorder_blocks): Fix pasto in previous
+ 	commit.
+ 
+ 	* toplev.c (HAVE_conditional_execution): Provide default.
+ 	(rest_of_handle_reorder_blocks): For conditional_execution target
+ 	update liveness once after all transformations
+ 	(rest_of_compilation): Do crossjumping before ce3.
+ 
+ 2004-01-17  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* alias.c (new_alias_set): Mark last_alias_set for PCH.
+ 	(get_varargs_alias_set): Rename 'set' to 'varargs_set' and mark it
+ 	for PCH.
+ 	(get_frame_alias_set): Likewise, except rename it to 'frame_set'.
+ 	* config/rs6000/rs6000.c (rs6000_sr_alias_set): Mark for PCH.
+ 	(get_TOC_alias_set): Mark 'set' for PCH.
+ 
+ 2004-01-16  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* cfgrtl.c (try_redirect_by_replacing_jump): Optimize tablejumps
+ 	even after reload, just don't remove the actual jump tables.
+ 
+ 2004-01-17  J. Brobecker  <brobecker@gnat.com>
+ 
+ 	* dwarf2out.c (is_subrange_type): Renamed from is_ada_subrange_type().
+ 	Remove checks for is_ada() and TREE_UNSIGNED.
+ 	(subrange_type_die): Emit a byte_size attribute if the subrange
+ 	type size is different from the base type size.
+ 	(modified_type_die): Replace call to is_ada_subrange_type() by
+ 	call to is_subrange_type().
+ 
+ 2004-01-16  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* config/sh/sh.c: Include ggc.h.
+ 
+ 2004-01-16  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* Makefile.in (MD5_H): New.
+ 	(fold-const.o): Depend on md5.h.
+ 	(dwarf2out.o): Likewise.
+ 	(cppfiles.o): Likewise.
+ 	* cppfiles.c: Include md5.h.
+ 	(should_stack_file): Check against list read from PCH file.
+ 	(struct pchf_data): New.
+ 	(pchf): New variable.
+ 	(struct pchf_adder_info): New.
+ 	(pchf_adder): New.
+ 	(pchf_save_compare): New.
+ 	(_cpp_save_file_entries): New.
+ 	(_cpp_read_file_entries): New.
+ 	(struct pchf_compare_data): New.
+ 	(pchf_compare): New.
+ 	(check_file_against_entries): New.
+ 	* cpphash.h (_cpp_save_file_entries): Prototype.
+ 	(_cpp_read_file_entries): Prototype.
+ 	* cpppch.c (cpp_write_pch_state): Write the list of headers.
+ 	(cpp_read_state): Read the list of headers.
+ 
+ 2004-01-17  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* c-common.c (c_estimate_num_insns_1): Handle builtin_constant_p and
+ 	builtin_expect specially.
+ 	* params.def (PARAM_MAX_INLINE_INSNS_AUTO): Set to 100.
+ 	(PARAM_LARGE_FUNCTION_INSNS): Set to 3000.
+ 	* invoke.texi (max-inline-insns-single): Set to 100.
+ 	(large-function-insns): Set to 3000.
+ 
+ 2004-01-16  Eric Christopher  <echristo@redhat.com>
+ 	    Chandrakala Chavva <cchavva@redhat.com>
+ 
+ 	* cppcharset.c (one_iso88591_to_utf8): New function.
+ 	(convert_iso88591_utf8): Ditto. Use.
+ 	(conversion_tab): Use.
+ 	(_cpp_input_to_utf8): New function.
+ 	(_cpp_init_iconv_buffer): Ditto.
+ 	(_cpp_close_iconv_buffer): Ditto.
+ 	* cpphash.h: Prototype new functions.
+ 	(cpp_buffer): Add input_cset_desc.
+ 	* cppinit.c: Add input_charset default.
+ 	* cpplib.c (cpp_push_buffer): Support init and
+ 	close of iconv.
+ 	* cpplib.h (cpp_options): Add input_charset.
+ 
+ 2004-01-16  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* system.h (ASM_OUTPUT_SECTION_NAME): Poison.
+ 	* config/alpha/unicosmk.h: Remove a commented-out definition
+ 	of ASM_OUTPUT_SECTION_NAME.
+ 	* config/stormy16/stormy16.h: Likewise.
+ 
+ 2004-01-16  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+ 
+ 	* fixinc/inclhack.def (alpha___extern_prefix): Renamed to ...
+ 	(alpha___extern_prefix_sys_stat): ... this.
+ 	Apply to <sys/mount.h>, too.
+ 	Tweak to match more variations.
+ 	* fixinc/tests/base/sys/stat.h: Adapt for new hackname.
+ 
+ 	* fixinc/inclhack.def (alpha___extern_prefix,
+ 	alpha___extern_prefix_standards): New hacks to obey
+ 	__PRAGMA_EXTERN_PREFIX.
+ 	* fixinc/tests/base/testing.h [ALPHA___EXTERN_PREFIX_CHECK]: New
+ 	test.
+ 	* fixinc/tests/base/standards.h: Likewise.
+ 
+ 	* fixincl/inclhack.def (alpha_pthread): Tweak to match more
+ 	variations.
+ 	New testcase.
+ 	* fixinc/tests/base/pthread.h: Handle it.
+ 
+ 	* fixincl/inclhack.def (bad_lval): Sort file list.
+ 	Add many missing files up to Tru64 UNIX V5.1B.
+ 	* gcc/fixinc/tests/base/libgen.h: Renamed to ...
+ 	* gcc/fixinc/tests/base/dirent.h: ... this to match new file list
+ 	order.
+ 
+ 	* fixinc/fixincl.x: Regenerate.
+ 
+ 2004-01-16  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* version.c (version_string): Change to 3.5.0.
+ 	* doc/include/gcc-common.texi (version-GCC): Likewise.
+ 
+ 2004-01-16  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* i386.md (load_tp_di): Fix pasto.
+ 
+ 	PR opt/13608
+ 	* i386.c (ix86_compute_frame_layout): Fix for alloca on leaf function.
+ 
+ 	* c-pretty-print.c (pp_c_type_cast, pp_c_abstract_declarator,
+ 	pp_c_character_constant, pp_c_floating_constant,
+ 	pp_c_additive_expression, pp_c_shift_expression,
+ 	pp_c_equality_expression, pp_c_and_expression,
+ 	pp_c_exclusive_or_expression, pp_c_inclusive_or_expression,
+ 	pp_c_logical_and_expression): Remove inline modifier.
+ 	* dwarf2out.c (get_AT): Likewise.
+ 	* et-forest.c (et_splay): Likewise.
+ 	* ra.h (ra_alloc, ra_calloc): Likewise
+ 
+ 2004-01-16  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/frv/frv-protos.h: Fix comment formatting.
+ 	* config/frv/frv.c: Likewise.
+ 	* config/frv/frv.h: Likewise.
+ 	* config/frv/frv.md: Likewise.
+ 	* config/frv/frvbegin.c: Likewise.
+ 	* config/frv/frvend.c: Likewise.
+ 
+ 2004-01-16  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* system.h (LINKER_DOES_NOT_WORK_WITH_DWARF2): Poison.
+ 	* doc/tm.texi (PREFERRED_DEBUGGING_TYPE): Don't mention
+ 	LINKER_DOES_NOT_WORK_WITH_DWARF2.
+ 	(LINKER_DOES_NOT_WORK_WITH_DWARF2): Remove.
+ 
+ 2004-01-16  J"orn Rennecke <joern.rennecke@superh.com>
+ 
+ 	PR 11864
+ 	* postreload.c (reload_cse_simplify_operands): Don't remove
+ 	implicit extension from LOAD_EXTEND_OP.
+ 
+ 2004-01-16  Jan Hubicka  <jh@suse.cz>
+ 
+ 	PR opt/11350
+ 	* cfgcleanup.c (try_optimize_cfg): Suppress tablejump removal
+ 	after reload.
+ 	* cfgrtl.c (rtl_can_merge_blocks, cfglayout_can_merge_blocks,
+ 	rtl_try_redirect_by_replacing_branch): Likewise.
+ 
+ 2004-01-15  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	PR pch/13689
+ 	* alias.c (struct alias_set_entry): Mark for GC.
+ 	(alias_sets): Make static, mark for GC.
+ 	(record_alias_subset): Use GC to allocate alias structures.
+ 	* varray.c (element): Make generic varrays GCed.
+ 
+ 	PR pch/13361
+ 	* c-typeck.c (constructor_asmspec): Delete.
+ 	(struct initializer_stack): Delete field 'asmspec'.
+ 	(start_init): Delete saving of asmspec.
+ 	(finish_init): Don't update constructor_asmspec.
+ 	* dwarf2out.c (rtl_for_decl_location): Duplicate string from tree.
+ 	* stmt.c (expand_asm): Duplicate strings from tree.
+ 	(expand_asm_operands): Likewise.
+ 	* tree.c (tree_size): Update computation of size of STRING_CST.
+ 	(make_node): Don't make STRING_CST nodes.
+ 	(build_string): Allocate string with tree node.
+ 	* tree.def (STRING_CST): Update comment.
+ 	* tree.h (TREE_STRING_POINTER): Adjust for change to STRING_CST.
+ 	(tree_string): Place contents of string in tree node.
+ 	* config/sh/sh.c (sh_handle_sp_switch_attribute): Duplicate string
+ 	from tree.
+ 
+ 	* config/rs6000/rs6000.c (rs6000_va_arg): No need to special-case
+ 	altivec operands.
+ 
+ 2004-01-15  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* c-common.h: Fix comment formatting.
+ 	* c-cppbuiltin.c: Likewise.
+ 	* c-pragma.c: Likewise.
+ 	* calls.c: Likewise.
+ 	* collect2.c: Likewise.
+ 	* cppcharset.c: Likewise.
+ 	* cpptrad.c: Likewise.
+ 	* dbxout.c: Likewise.
+ 	* defaults.h: Likewise.
+ 	* dwarf2out.c: Likewise.
+ 	* fold-const.c: Likewise.
+ 	* genautomata.c: Likewise.
+ 	* genconditions.c: Likewise.
+ 	* genflags.c: Likewise.
+ 	* gengtype.c: Likewise.
+ 	* integrate.c: Likewise.
+ 	* loop.c: Likewise.
+ 	* predict.c: Likewise.
+ 	* sdbout.c: Likewise.
+ 
+ 2004-01-15  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* config/ia64/ia64.md (*movti_internal): C output template
+ 	extracted to ia64.c.
+ 	(*movti_internal_reg): Delete.
+ 	(reload_inti, reload_outti): Use the correct mode on operand 2
+ 	in the first place, don't fix it up in the output template.
+ 	(movtf, reload_ointf, reload_outtf): New expanders.
+ 	(*movtf_internal): New define_insn_and_split.
+ 	* config/ia64/ia64.c (ia64_split_timode): Rename to ia64_split_tmode;
+ 	make static; do not hand TFmode CONST_DOUBLEs to split_double.
+ 	(ia64_split_tmode_move): New function, body mostly pulled
+ 	from ia64.md:*movti_internal.
+ 	(ia64_function_arg_words): New function, extracted common
+ 	logic from ia64_function_arg et seq.
+ 	(ia64_function_arg_offset): Likewise.  Handle correctly the
+ 	case of a scalar quantity 16 bytes wide with only 8-byte alignment.
+ 	(ia64_function_arg, ia64_function_arg_partial_nregs)
+ 	(ia64_function_arg_advance): Use ia64_function_arg_words and
+ 	ia64_function_arg_offset.
+ 	(ia64_function_value): TCmode does not go in float regs.
+ 	(ia64_secondary_reload_class): Also handle TFmode.
+ 	* config/ia64/ia64-protos.h: Remove prototype for
+ 	ia64_split_timode; add prototype for ia64_split_tmode_move.
+ 
+ 2004-01-15  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* Makefile.in (MAINT): Make it an immediate assignment.
+ 
+ 2004-01-15  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/m32r/m32r.md: Remove useless calls to gen_lowpart.
+ 
+ 2004-01-15  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/coff.h: Replace Hitachi with Renesas.
+ 	* config/h8300/elf.h: Likewise.
+ 	* config/h8300/h8300-protos.h: Likewise.
+ 	* config/h8300/h8300.c: Likewise.
+ 	* config/h8300/h8300.h: Likewise.
+ 	* config/h8300/h8300.md: Likewise.
+ 	* config/h8300/lib1funcs.asm: Likewise.
+ 
+ 2004-01-15  Andrew Pinski  <apinski@apple.com>
+ 
+ 	* config/rs6000/rs6000.c (uses_TOC): Wrap #if TARGET_ELF
+ 	around it.
+ 
+ 2004-01-15  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300.c (h8300_return_in_memory): New.
+ 	(TARGET_STRUCT_VALUE_RTX): Likewise.
+ 	(TARGET_RETURN_IN_MEMORY): Likewise.
+ 	* config/h8300/h8300.h (STRUCT_VALUE): Remove.
+ 	(RETURN_IN_MEMORY): Likewise.
+ 
+ 2004-01-15  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	PR optimization/13375
+ 	* gcse.c (handle_avail_expr): Just return if the source is not a
+ 	single set.
+ 
+ 2004-01-15  Richard Earnshaw  <rearnsha@arm.com>
+ 	    Daniel Jacobowitz  <drow@mvista.com>
+ 
+ 	* arm/lib1funcs.asm (ARM_FUNC_START): Correct interworking case.
+ 	(EQUIV): Define.
+ 	(ARM_FUNC_ALIAS): New macro.
+ 	* arm/ieee754-df.S (gedf2, ledf2, nedf2, eqdf2): Use it.
+ 	* arm/ieee754-sf.S (gesf2, lesf2, nesf2, eqsf2): Use it.
+ 
+ 2004-01-15  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	PR optimization/12372
+ 	* calls.c (expand_call): Add call_fusage data for stack arguments in
+ 	constant calls.
+ 
+ 2004-01-15  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* config/rs6000/rs6000.c (uses_TOC): Correct comment.  Make static.
+ 	(rs6000_elf_declare_function_name): Formatting.
+ 	* config/rs6000/rs6000-protos.h (uses_TOC): Remove declaration.
+ 
+ 2004-01-15  Jan Hubicka  <jh@suse.cz>
+ 
+ 	PR bootstrap/13692
+ 	* sched-deps.c (sched_analyze_1, sched_analyze_2): Fix thinko in
+ 	previous patch.
+ 
+ 2004-01-15  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/alpha/alpha.h (REG_ALLOC_ORDER): Reorder fp regs after
+ 	integer regs of the same call-savedness.
+ 
+ 2004-01-15  Andreas Schwab  <schwab@suse.de>
+ 
+ 	PR bootstrap/13562
+ 	* config/m68k/m68k.c (output_move_const_into_data_reg): Clear cc
+ 	status for NOTB/NOTW/NEGW methods.
+ 
+ 2004-01-15  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* doc/invoke.texi: Update dump file names.  Fix a typo.
+ 
+ 2004-01-15  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* builtins.c (expand_builtin_va_end): Don't use
+ 	EXPAND_BUILTIN_VA_END.
+ 	* system.h (EXPAND_BUILTIN_VA_END): Poison.
+ 	* config/d30v/d30v.h: Remove a commented-out definition of
+ 	EXPAND_BUILTIN_VA_END.
+ 	* config/stormy16/stormy16.h: Likewise.
+ 
+ 2004-01-15  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* system.h (STRUCT_VALUE_INCOMING_REGNUM): Poison.
+ 	* targhooks.c (default_struct_value_rtx): Don't use
+ 	STRUCT_VALUE_INCOMING_REGNUM.
+ 
+ 2004-01-15  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	PR bootstrap/12744
+ 	* configure.in: Revamp enable-generated-files-in-srcdir rule to define
+ 	GENINSRC and not parsedir.  Define srcextra as a langhook.
+ 	* configure: Regenerate.
+ 	* Makefile.in: Suppress default .l.c rule.  Don't substitute
+ 	parsedir and delete all references throughout.  Conditionally define
+ 	rule for srcextra dependent on GENINSRC.
+ 	(stmp-docobjdir): Delete.
+ 	(c-parse.o, gengtype-lex.o, gengtype-yacc.o): Use implicit build rule.
+ 	(srcextra): Copy c-parse.y, c-parse.c, gengtype-lex.c, gengtype-yacc.c,
+ 	and gengtype-yacc.h back to source directory.
+ 	(maintainer-clean): Delete all parse files in source directory.
+ 	(distclean): Delete generated files.
+ 
+ 	* objc/Make-lang.in (objc-parse.o): Use implicit build rule.
+ 	(objc-parse.c, objc-parse.y): Don't use parsedir.
+ 	(objc.srcextra): Copy objc-parse.y and objc-parse.c back to source
+ 	directory if requested.
+ 	(po-generated): Don't use parsedir.
+ 	(objc.maintainer-clean): Delete above files from source directory.
+ 
+ 2004-01-14  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* doc/tm.texi (FUNCTION_VALUE): Fix a typo.
+ 
+ 2004-01-14  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* doc/tm.texi: Replace RETURN_IN_MEMORY with
+ 	TARGET_RETURN_IN_MEMORY.
+ 
+ 2004-01-15  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* builtins.c (std_expand_builtin_va_arg): Align operand when needed.
+ 	* i386.c (init_cumulative_args): Set warn_sse; fix handling of variadic
+ 	functions accepting SSE arguments
+ 	(function_arg): Warn only when asked to warn.
+ 	* i386.h (ix86_args): Add warn_sse/warn_mmx fiels.
+ 
+ 2004-01-14  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-parse.in (stmts_and_decls): Make label at end of compound
+ 	statement a hard error.
+ 
+ 2004-01-14  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* cgraph.c (create_edge): Use local.redefined_extern_inline.
+ 	* cgraph.h (cgraph_local_info): Sort fields by size; add
+ 	redefined_extern_inline
+ 	(cgraph_global_info): Sort fields by size.
+ 	(cgraph_node): Likewise.
+ 	* cgraphunit.c (cgraph_finalize_function): Se
+ 	local.redefined_extern_inline on redefinition.
+ 	(cgraph_analyze_function): Use it; fix formating.
+ 
+ 2004-01-14  Jan Hubicka  <jh@suse.cz>
+ 
+ 	PR c++/10776
+ 	* sched-deps.c (trye_dependency_cache, anti_dependency_cache,
+ 	outptu_dependency_cache, forward_dependency_cahe): Trun to vectors of
+ 	bitmaps
+ 	(cache_size): New variable
+ 	(add_dependence): Update use; canonize early memory locations
+ 	(sched_analyze_1): Likewise.
+ 	(sched_analyze_2): Likewise.
+ 	(init_dependency_caches): Initialize bitmaps.
+ 	(free_dependency_caches): Free bitmaps
+ 
+ 2004-01-14  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* calls.c: Replace STRICT_ARGUMENT_NAMING in comments with
+ 	targetm.calls.strict_argument_naming().
+ 	* target.h: Likewise.
+ 
+ 2004-01-14  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR debug/13231
+ 	* dwarf2out.c (dwarf2out_stack_adjust): Skip prologue and epilogue
+ 	instructions.
+ 
+ 2004-01-14  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR c++/12491
+ 	* except.c (struct eh_region): Add u.fixup.resolved.
+ 	(resolve_one_fixup_region): Split out from ...
+ 	(resolve_fixup_regions): ... here.
+ 
+ 2004-01-14  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/mn10300/mn10300.h (STRUCT_VALUE): Change to 0.
+ 
+ 2004-01-14  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/alpha/alpha.h (STRUCT_VALUE): Remove.
+ 	* config/alpha/vms.h (STRUCT_VALUE_REGNUM): Remove #undef.
+ 	(STRUCT_VALUE): Remove.
+ 
+ 2004-01-14  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* system.h: Poison PROMOTED_MODE
+ 	* integrate.c (expand_inline_function): Don't mention the
+ 	PROMOTED_MODE.
+ 	* loop.c (update_giv_derive): Same.
+ 	* tree.h (DECL_RTL): Same.
+ 
+ 2004-01-14  J"orn Rennecke <joern.rennecke@superh.com>
+ 
+ 	PR target/9365
+ 	* sh.c (gen_block_redirect): Add special handling of RETURN.
+ 	(gen_far_branch) Don't call gen_stuff_delay_slot if there is no
+ 	far branch target (i.e. it's a return).
+ 
+ 2004-01-14  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* regrename.c (find_oldest_value_reg): Fix a warning.
+ 
+ 2004-01-14  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	PR bootstrap/12527
+ 	* config.gcc (arm*-*-linux*): Don't include unknown-elf.h in tm_file.
+ 	Move linux-gas.h and linux-elf.h before aout.h.
+ 	* arm/arm.h (INITIALIZE_TRAMPOLINE): Only define if not already.
+ 	* arm/linux-elf.h (SUBTARGET_CPU_DEFAULT): Define.
+ 
+ 2004-01-14  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/m32r/m32r.md: Use GEN_INT instead of gen_rtx
+ 	(CONST_INT, VOIDmode, ...).
+ 
+ 2004-01-14  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* regrename.c (find_oldest_value_reg): If the replacement uses
+ 	multiple hard registers, check that all of them are in CLASS.
+ 
+ 2004-01-14  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* alias.c (get_alias_set):  Initialize alias set to 0 when subset is
+ 	impossible.
+ 
+ 2004-01-14  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* Makefile.in: Define MAINT from --enable-maintainer-mode.
+ 
+ 2004-01-14  Hartmut Penner  <hpenner@de.ibm.com>
+ 
+ 	* gcc/config/rs6000/rs6000.c (rs6000_stack_info)
+ 	Calculate always vrsave_mask if TARGET_ALTIVEC.
+ 	(rs6000_emit_prologue): Emit code for vrsave
+ 	only if TARGET_ALTIVEC_VRSAVE.
+ 	(rs6000_emit_epilogue): Likewise.
+ 
+ 2004-01-14  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* config/sparc/sparc.md (tie_add32): Fix pasto.
+ 	(tie_add64): Likewise.
+ 
+ 2004-01-14  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* config/i386/i386.md (*addqi_1_slp): Do not access operands[2].
+ 
+ 2004-01-13  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/iq2000/iq2000-protos.h: Fix comment formatting.
+ 	* config/iq2000/iq2000.c: Likewise.
+ 	* config/iq2000/iq2000.md: Likewise.
+ 
+ 2004-01-14  J. Brobecker  <brobecker@gnat.com>
+ 
+ 	* dwarf2out.c (is_ada_subrange_type): No longer check the TYPE_NAME.
+ 	(subrange_type_die): Add handle for nameless subrange types.
+ 
+ 2004-01-13  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300-protos.h: Replace do_movsi with
+ 	h8300_expand_movsi.
+ 	* config/h8300/h8300.c (do_movsi): Change to
+ 	h8300_expand_movsi.
+ 	* config/h8300/h8300.md (movsi): Replace do_movsi with
+ 	h8300_expand_movsi.
+ 	(movsf): Likewise.
+ 
+ 2004-01-13  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300.c (dosize): Change to
+ 	h8300_emit_stack_adjustment.  Update callers.
+ 
+ 2004-01-13  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/h8300/h8300.md (movstrictqi): Add an alternative with
+ 	the source being post_inc.  Tighten the predicate for the
+ 	destination to register_operand.
+ 	(movstricthi): Likewise.
+ 
+ 2004-01-13  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* system.h (SHARED_BSS_SECTION_ASM_OP): Poison.
+ 	* varasm.c (bss_section): Don't use SHARED_BSS_SECTION_ASM_OP.
+ 	* doc/tm.texi (SHARED_BSS_SECTION_ASM_OP): Remove.
+ 
+ 2004-01-14  Jan Hubicka  <jh@suse.cz>
+ 
+ 	Partial fix PR c++/12850
+ 	* cgraphunit.c (cgraph_finalize_function): Always ggc_collect when
+ 	at zero nest level.
+ 
+ 2004-01-13  Bernardo Innocenti  <bernie@develer.com>
+ 
+ 	* config/m68k/netbsd-elf.h (REGISTER_NAMES): Add missing "argptr"
+ 	pseudo-register.
+ 
+ 2004-01-13  Devang Patel <dpatel@apple.com
+ 
+ 	PR debug/7078
+ 	* dbxout.c (dbxout_symbol_name): Emit mangled names for
+ 	NAMESPACE_DECL memebers.
+ 
+ 2004-01-13  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR c++/12709
+ 	* c-common.c (finish_fname_decls): Use the chain only if the
+ 	tree is an expr_stmt.
+ 
+ 2004-01-13  Vladimir Makarov  <vmakarov@redhat.com>
+ 
+ 	* rtl.def: Add comment about new option in automata_option.
+ 
+ 	* genautomata.c (PROGRESS_OPTION): New macro.
+ 	(progress_flag): New global variable.
+ 	(gen_automata_option): Process `progress'.
+ 	(transform_insn_regexps, check_unit_distributions_to_automata,
+ 	make_automaton, NDFA_to_DFA, build_automaton, create_automata,
+ 	expand_automata, write_automata): Print about the progress only if
+ 	progress_flag.  Remove fflush.
+ 	(initiate_automaton_gen): Process command line flag `-progress'.
+ 
+ 	* doc/md.texi: Describe the new option.
+ 
+ 2004-01-13  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* cfg.c (dump_bb): Dump entry edges.
+ 
+ 2004-01-13  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* arm.c (thumb_legitimate_address_p): Only allow constant pool
+ 	references from SImode.
+ 	* arm.md (thumb_movhi_insn): Don't allow minipool references.
+ 
+ 2004-01-13  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* system.h (TEXT_SECTION): Poison.
+ 	* varasm.c (text_section): Don't use TEXT_SECTION.
+ 	* config/sh/sh.c (sh_file_start): Fix a comment typo.
+ 	* doc/tm.texi (TEXT_SECTION): Remove.
+ 
+ 2004-01-13  Ben Elliston  <bje@wasabisystems.com>
+ 
+ 	* doc/rtl.texi (Vector Operations): Remove defunct vec_const item.
+ 
+ 2004-01-12  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	* unwind-libunwind.c: Delete.
+ 
+ 2004-01-12  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	PR 13656
+ 	* c-decl.c (diagnose_mismatched_decls): Whenever newtype or
+ 	oldtype is set, set *newtypep or *oldtypep too.  Do not set
+ 	them at the very end.
+ 	(validate_proto_after_old_defn): Restructure for comprehensibility;
+ 	make error messages clearer.
+ 
+ 2004-01-12  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* varray.h (VARRAY_POP): Add checking variant, aborts on underflow.
+ 	(VARRAY_TOP): Use VARRAY_CHECK so the access is bounds-checked.
+ 	* varray.c: No need to prototype error.
+ 	(varray_check_failed): Wrap long string onto two lines.
+ 	(varray_underflow): New function.
+ 
+ 2004-01-13  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	PR c++/13376
+ 	* function.h (struct function): Kill `name' field.
+ 	(current_function_name): Make it an extern function.
+ 	* function.c (current_function_name): New function.
+ 	* graph.c: Update all uses of current_function_name.
+ 	* gcse.c: Likewise.
+ 	* config/alpha/alpha.c, config/avr/avr.c, config/c4x/c4x.c,
+ 	config/mips/mips.c, config/pdp11/pdp11.c: Likewise.
+ 	* config/ip2k/ip2k.c (function_prologue): Use MAIN_NAME_P
+ 	instead of a strcmp with "main".
+ 
+ 2004-01-13  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* c-decl.c (diagnose_mismatched_decls):  Fix warning calls.
+ 
+ 	* cgraphunit.c (cgraph_optimize_function):  Always do
+ 	optimize_inline_calls when there is always_inline callee.
+ 	(cgraph_decide_inlining): Fix formating.
+ 	* tree-inline.c (inlinable_function_p): Do sorry for alwaysinline
+ 	functions.
+ 	(expand_call_inline): Likewise.
+ 	* toplev.h (sorry): Fix prototype.
+ 
+ 2004-01-12  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* builtins.c (expand_builtin_expect_jump): Simplify logic. Handle
+ 	conditional jumps that drop through to unconditional jumps or the
+ 	end of the sequence.
+ 
+ 2004-01-13  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* alias.c (new_alias_set): Construct the alias_set varray.
+ 	(init_alias_once): Don't do it here.
+ 
+ 2004-01-12  Marc Espie <espie@openbsd.org>
+ 
+ 	* system.h: handle YYBYACC like YYBISON.
+ 
+ 2004-01-12  Jonathan Merriman <jonm@dualitymedia.com>
+ 
+ 	PR target/10847
+ 	* config.gcc: No longer includes conflicting header sparc/sol2.h when
+ 	building on sparc64-*-openbsd*.
+ 
+ 2004-01-12  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR debug/13539
+ 	* dbxout.c (dbxout_type): Protected inheritance is not
+ 	private but protected.
+ 
+ 2004-01-12  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.c (mips_symbolic_constant_p): Revert last patch.
+ 
+ 2004-01-12  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	PR optimization/12508.
+ 	* combine.c (try_combine): Remove a dead set in a parallel
+ 	even if its destination is a subreg.
+ 
+ 	Revert:
+ 	2003-06-03  Kazu Hirata  <kazu@cs.umass.edu>
+ 	* combine.c (simplify_set): Don't move a subreg in SET_SRC to
+ 	SET_DEST if WORD_REGISTER_OPERATIONS is not defined.
+ 
+ 2004-01-12  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* real.c: Update copyright date.
+ 	* emit-rtl.c: Likewise.
+ 	* rtl.h: Likewise.
+ 	* dwarf2out.c: Likewise.
+ 	* config/rs6000/darwin-ldouble.c: Likewise.
+ 	* config/rs6000/rs6000.md: Likewise.
+ 
+ 2004-01-12  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_init_libfuncs): Add AIX
+ 	TFmode to SImode libfuncs.
+ 
+ 2004-01-12  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	PR middle-end/11397
+ 	* varasm.c (assemble_alias): Remove weak aliases from weak_decls.
+ 
+ 2004-01-12  Jan Hubicka  <jh@suse.cz>
+ 
+ 	PR opt/12826
+ 	* loop.c (insert_loop_mem): Preffer VOLATILE memory references to be
+ 	stored.
+ 
+ 	PR opt/12863
+ 	* cfgcleanup.c (label_is_jump_target_p): Move to...
+ 	* rtlanal.c (label_is_jump_target_p): ... here.
+ 	* cfgrtl.c (cfg_layout_redirect_edge_and_branch):  Fix redirecting of fallthru
+ 	edges unified with branch edges.
+ 
+ 2004-01-12  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* simplify-rtx.c (simplify_immed_subreg): Correctly extract the
+ 	high word of an integral CONST_DOUBLE.
+ 
+ 2004-01-12  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* simplify-rtx.c (simplify_plus_minus): Always generate canonical form.
+ 
+ 2004-01-12  J"orn Rennecke <joern.rennecke@superh.com>
+ 
+ 	PR target/13585
+ 	* sh-protos.h (check_use_sfunc_addr): Declare.
+ 	* sh.c (extract_sfunc_addr, check_use_sfunc_addr): New functions.
+ 	* sh.md (use_sfunc_addr): Use check_use_sfunc_addr in insn predicate.
+ 
+ 2004-01-12  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* alias.c:  Invlude varray.h
+ 	(alias_sets): Turn into varray.
+ 	(get_alias_set_entry): Use VARRAY; mark inline.
+ 	(mems_in_disjoint_alias_sets_p): Mark inline.
+ 	(record_alias_subset): Use varray.
+ 	(init_alias_once): Initialize varray.
+ 	(new_alias_set): Grow array.
+ 	* varray.c: Make VARRAY_GENERIC_PTR non GTYized.
+ 
+ 2004-01-12  Jan Hubicka  <jh@suse.cz>
+ 
+ 	Partial fix for PR opt/10776 II
+ 	* cselib.c: Include params.h
+ 	(cselib_invalidate_mem):  Limit amount of nonconflicting memory
+ 	locations.
+ 	* params.def (PARAM_MAX_CSELIB_MEMORY_LOCATIONS): New.
+ 	* Makefile.in (cselib.o): Depend on params.h
+ 
+ 2004-01-12  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* combine.c (combine_simplify_rtx): Don't pass VOIDmode to
+ 	simplify_unary_operation if the operand has a known mode.
+ 
+ 2004-01-12  Hartmut Penner  <hpenner@de.ibm.com>
+ 
+ 	PR target/13534
+ 	* gcc/config/rs6000/rs6000.c (word_offset_memref_operand): New
+ 	predicate to handle 'ld' conform addresses.
+ 	* gcc/config/rs6000/rs6000.h (EXTRA_CONSTRAINT): New 'Y'
+ 	contraint.
+ 	(EXTRA_MEMORY_CONSTRAINT): Tell reload which constraint
+ 	are memory contraints.
+ 	* gcc/config/rs6000/rs6000-protos.h (word_offset_memref_operand):
+ 	New prototype.
+ 	* gcc/config/rs6000/rs6000.md (*movdf_hardfloat64):
+ 	Change 'o' to 'Y' constraint.
+ 	(*movdf_softfloat64): Ditto.
+ 
+ 2004-01-12  Bernardo Innocenti  <bernie@develer.com>
+ 
+ 	* gcc/config/m68k/m68k.md: Switch from the "*..." syntax to the
+ 	brace-enclosed syntax in all C output statements.
+ 
+ 2004-01-12  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	PR target/13401
+ 	* config/rs6000/rs6000.c (rs6000_output_function_epilogue):
+ 	Objective-C language type value is 14.
+ 
+ 2004-01-12  Markus F.X.J. Oberhumer  <markus@oberhumer.com>
+ 
+ 	PR c/12148
+ 	* config/m68k/fpgnulib.c: Fix `-mshort' bugs: Use `long' instead of
+ 	`int' in a number of places to make sure we always have a SImode
+ 	and not a HImode.  Add a 'L' suffix to a number of constants.
+ 
+ 2004-01-11  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	* pa.c: Don't include obstack.h.
+ 
+ 	* pa.md: Correct constraint in pattern for loading PIC label address.
+ 
+ 2004-01-11  Kaz Kojima  <kkojima@gcc.gnu.org>
+ 
+ 	* config/sh/linux.h (ASM_PREFERRED_EH_DATA_FORMAT): Undefine
+ 	 before defining.
+ 
+ 2004-01-11  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	PR fortran/9972
+ 	* toplev.c (rest_of_handle_inline): Also consider functions
+ 	for deferral if the language is GNU F77.
+ 
+ 2004-01-11  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* c-decl.c (diagnose_arglist_conflict): Add missing space to
+ 	diagnostic messages.
+ 
+ 2004-01-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/13392
+ 	* builtins.c (expand_builtin_expect_jump): Handle conditional jumps
+ 	to drop through label.  Don't fall back to SCC even when conditional
+ 	jump has not been found.
+ 
+ 2004-01-11  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* invoke.texi: Fix syntax error in previous patch.
+ 
+ 	Partial fix for PR opt/10776
+ 	* Makefile.in (reload.o): Include param.h
+ 	* params.def (PARAM_MAX_RELOAD_SEARCH_INSNS): New parameter.
+ 	* reload.c: Include params.h.
+ 	(find_equiv_reg): Work limiting check.
+ 	* invoke.texi: Document.
+ 
+ 2004-01-11  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.c (mips_symbolic_constant_p): Don't allow
+ 	out-of-bounds accesses to string constants.  Simplify mips16
+ 	case accordingly.
+ 
+ 2004-01-11  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	PR optimization/13469
+ 	* toplev.c (rest_of_compilation): Call purge_all_dead_edges after
+ 	reload_cse_regs (-fnon-call-exceptions only).
+ 
+ 2004-01-11  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/mcore/lib1.asm: Fix comment formatting.
+ 	* config/mcore/mcore-elf.h: Likewise.
+ 	* config/mcore/mcore.c: Likewise.
+ 	* config/mcore/mcore.h: Likewise.
+ 	* config/mcore/mcore.md: Likewise.
+ 
+ 2004-01-10  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* c-decl.c (duplicate_decls): Break apart into...
+ 	(diagnose_arglist_conflict, validate_proto_after_old_defn)
+ 	(locate_old_defn, diagnose_mismatched_decls, merge_decls):
+ 	... these new functions.  Restructure for comprehensibility.
+ 	Remove various archaic special cases.  Always report the
+ 	location of the previous declaration when a diagnostic is issued.
+ 	(redeclaration_error_message): Fold into diagnose_mismatched_decls.
+ 	(match_builtin_function_types): Delete unnecessary forward declaration.
+ 
+ 2004-01-10  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* genautomata.c (make_automaton, NDFA_to_DFA):
+ 	Print progress bars with '.' characters instead of '*'.
+ 	(build_automaton): Change notes to match.
+ 
+ 2004-01-10  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/m32r/m32r.md: Use define_constants for unspec and
+ 	unspec_volatile.
+ 
+ 2004-01-10  Jan Hubicka  <jh@suse.cz>
+ 
+ 	PR opt/11635
+ 	* expr.c (expand_expr_real):  More curefully expand union casts.
+ 
+ 2004-01-10  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/m32r/m32r.md (flush_icache): Use 1 for
+ 	unspec_volatile.
+ 
+ 2004-01-10  David Edelsohn  <edelsohn@gnu.org>
+ 	    James E Wilson  <wilson@specifixinc.com>
+ 
+ 	PR debug/12860
+ 	* dbxout.c (dbxout_symbol): Remove initialization of
+ 	current_sym_code, current_sym_value, and current_sym_addr.
+ 	(dbxout_symbol_location): Same.
+ 	(dbxout_prepare_symbol): Zero current_sym_code,
+ 	current_sym_value, and current_sym_addr.
+ 
+ 2004-01-10  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* tree.c (get_unwidened): Reorder conditions so that the null pointer
+ 	check is done first.
+ 
+ 2004-01-09  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* toplev.c (rest_of_handle_cfg): Add reg_scan pass
+ 	if we're running mark_constant_function.
+ 
+ 2004-01-09  Jeff Bailey  <jbailey@nisa.net>
+ 
+ 	PR target/12561
+ 	* config/t-gnu: Rename SYSTEM_HEADER_DIR to NATIVE_SYSTEM_HEADER_DIR.
+ 
+ 2004-01-09  Andrew Pinski <pinskia@physics.uc.edu>
+ 
+ 	PR debug/11231
+ 	* dbxout.c (dbxout_type_fields): Return if any item is
+ 	error_mark_node or the type is error_mark_node.
+ 
+ 2004-01-09  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* config/rs6000/darwin-ldouble.c: Add big comment explaining
+ 	exactly what is expected as a 'long double'.
+ 	(_xlqadd): When a value to be returned is representable as a
+ 	'double', just return it directly, do not construct it using a union.
+ 	Also, correct final fixup.
+ 	(_xlqmul): Likewise.
+ 	(_xlqdiv): Likewise.
+ 	* real.c (encode_ibm_extended): Make consistent with darwin-ldouble.c.
+ 
+ 	* config/rs6000/rs6000.md (fix_trunctfdi2): Delete.
+ 
+ 2004-01-09  Richard Henderson  <rth@redhat.com>
+ 
+ 	* recog.c (constrain_operands): Validate mem operands.
+ 
+ 2004-01-09   James E Wilson  <wilson@specifixinc.com>
+ 
+ 	* gcc.c (init_spec): Remove -lunwind from shared case.
+ 	* conifg/ia64/t-hpux (SHLIB_LINK): Add -lunwind.
+ 
+ 2004-01-09  Steve Ellcey  <sje@cup.hp.com>
+ 
+ 	* configure.ac: (gcc_cv_ld_hidden) Set to true for ia64*-*-hpux*.
+ 	* configure: Regenerate
+ 
+ 2004-01-09  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	PR c/11234
+ 	* c-typeck.c (build_c_cast): If pedantic, warn for conversions
+ 	between function and object pointers.
+ 	(digest_init): When comparing a pointer to function type to the
+ 	target type, only apply TREE_TYPE once to the pointer to function
+ 	type.
+ 	* except.c (for_each_eh_label_1): Treat data as a pointer to a
+ 	function pointer rather than casting it to a function pointer.
+ 	(for_each_eh_label): Update caller.
+ 	* recog.h (struct insn_data): Use a struct or union for output.
+ 	* genoutput.c (output_insn_data): Update.
+ 	* final.c (get_insn_template): Update.
+ 
+ 2004-01-09  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* expr.h (expand_expr): Make it a macro, not a function.
+ 	(expand_expr_real): New function.
+ 	* expr.c (store_expr): Adjust logic for deciding whether or not to
+ 	copy the value returned by expand_expr.
+ 	(expand_expr): Rename to ...
+ 	(expand_expr_real): ... this.  Add alt_rtl parameter.  Adjust
+ 	calls to language hooks.
+ 	* c-common.h (c_expand_expr): Adjust prototype.
+ 	* c-common.c (c_expand_expr): Add alt_rtl parameter.
+ 	* langhooks-def.h (lhd_expand_expr): Change prototype.
+ 	* langhooks.c (lhd_expand_expr): Add all_rtl parameter.
+ 	* langhooks.h (lang_hooks): Change type of expand_expr.
+ 	* stmt.c (stmt_status): Add x_last_expr_alt_rtl.
+ 	(last_expr_alt_rtl): Likewise.
+ 	(expand_expr_stmt_value): Set last_expr_alt_rtl.
+ 	(clear_last_expr): Clear it.
+ 	(expand_end_stmt_expr): Set RTL_EXPR_ATL_RTL.
+ 	(expand_end_bindings): Save and restor last_expr_alt_rtl.
+ 	* tree.def (RTL_EXPR): Give it an additional operand.
+ 	* tree.h (RTL_EXPR_ALT_RTL): New macro.
+ 
+ 2004-01-09  Kazuhiro Inaoka  <inaoka.kazuhiro@renesas.com>
+ 
+ 	* config/m32r/m32r.h (TARGET_CPU_CPP_BUILTINS): Add __m32r__.
+ 	* config/m32r/m32r.c (call26_operand): Allow in PIC mode.
+ 
+ 2004-01-09  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	PR target/13380.
+ 	* config/m32r/m32r.md: Replace (reg:SI 17) with (reg:CC 17)
+ 	or (ne:SI (reg:CC 17) (const_int 0)).
+ 	Be specific about modes wherever possible.
+ 
+ 2004-01-09  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/m32r/m32r.c (m32r_expand_block_move): Call
+ 	gen_movestrsi_internal with two more arguments.
+ 	(m32r_output_block_move): Adjust operand numbers.
+ 	Properly update the source and destination pointers.
+ 	* config/m32r/m32r.md (movstrsi_internal): Use 'r' instead of
+ 	'r+'.  Change the set detinations to match_operand.
+ 
+ 2004-01-09  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* final.c (FIRST_INSN_ADDRESS): Remove.
+ 	(shorten_branches): Don't use FIRST_INSN_ADDRESS.
+ 	* system.h (FIRST_INSN_ADDRESS): Poison.
+ 	* config/avr/avr.h: Remove a comment about FIRST_INSN_ADDRESS.
+ 	* config/m32r/m32r-protos.h: Remove the prototype for
+ 	m32r_first_insn_address.
+ 	* config/m32r/m32r.c (m32r_first_insn_address): Remove.
+ 	* config/m32r/m32r.h (FIRST_INSN_ADDRESS): Likewise.
+ 	* doc/md.texi (FIRST_INSN_ADDRESS): Likewise.
+ 
+ 2004-01-09  J. Brobecker  <brobecker@gnat.com>
+ 
+ 	* dwarf2out.c (gen_enumeration_type_die): Return the DIE that
+ 	we just created.
+ 	(is_ada_subrange_type): DIEs for enumeration subtypes should be
+ 	emitted as subrange types too.
+ 	(subrange_type_die): Add handling of enumeration subtypes.
+ 
+ 2004-01-08  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR opt/12441
+ 	Revert: Sat Mar 30 14:08:55 CET 2002  Jan Hubicka  <jh@suse.cz>
+ 	* i386.c (aligned_operand): Be prepared for SUBREGed registers.
+ 	(ix86_decompose_address): Use REG_P instead of GET_CODE (...) == REG.
+ 	(ix86_address_cost): Be prepared for SUBREGed registers.
+ 	(legitimate_address_p): Accept SUBREGed registers.
+ 
+ 2004-01-08  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* Makefile.in: Rename configure.in to configure.ac
+ 	* doc/sourcebuild.texi: Likewise.
+ 	* configure: Regenerate.
+ 	* config.in: Regenerate.
+ 
+ 2004-01-08  Stuart Hastings  <stuart@apple.com>
+ 
+ 	* config/i386/i386.md: Typos in MMX/SSE immediate shifts.
+ 
+ 2004-01-08  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* cgraphunit.c (cgraph_decide_inlining):  Fix typo.
+ 
+ 2004-01-08  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* config/rs6000/rs6000.md (cmptf_internal1): Correct branch offset.
+ 	(UNSPEC_FIX_TRUNC_TF): New constant.
+ 	(movtf_internal): Make splitter active only when insn is active.
+ 	(extenddftf2): Rewrite to properly load zero into low part.
+ 	(extenddftf2_internal): New.
+ 	(extendsftf2): Rewrite.
+ 	(truncdftf2): Correct length.
+ 	(floatditf2): Delete.
+ 	(fix_trunc_helper): New.
+ 	(fix_trunctfdi2): Use fix_trunc_helper.
+ 	(fix_trunctfsi2): Likewise.fix_trunc
+ 	(fix_trunctfsi2_internal): New.
+ 
+ 	* config/rs6000/rs6000.c (legitimate_lo_sum_address_p): lo_sum
+ 	addresses are legitimate on Darwin even when flag_pic.
+ 	(rs6000_legitimize_reload_address) [TARGET_MACHO]: Don't create
+ 	non-offsettable addresses for loads of TFmode constants.
+ 
+ 2004-01-08  Kazuhiro Inaoka  <inaoka.kazuhiro@renesas.com>
+ 
+ 	* config/m32r/m32r.h (ASM_OUTPUT_ALIGNED_BSS): Actually emit
+ 	variables in the appropriate bss section.
+ 
+ 2004-01-09  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* config/rs6000/linux64.h (SUBSUBTARGET_OVERRIDE_OPTIONS): Ensure
+ 	target_flags has MASK_POWERPC64 when -m64.
+ 	* config/rs6000/rs6000.c (processor_target_table): Add MASK_POWERPC64
+ 	to 620, 630, power3, power4 and rs64a entries.
+ 	* config/rs6000/rs6000.h (MASK_64BIT): Expand comment.
+ 
+ 2004-01-08  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* simplify-rtx.c (simplify_immed_subreg): Fix construction of
+ 	floating-point constants.
+ 
+ 2004-01-08  J. Brobecker  <brobecker@gnat.com>
+ 
+ 	* dwarf2out.c (subrange_type_die): Add context_die parameter.
+ 	Create the subrange_type DIE using the given context DIE.
+ 	(modified_type_die): Update call to subrange_type_die.
+ 
+ 2004-01-08  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* dwarf2.h, unwind-dw2-fde.h, unwind-pe.h, unwind.h:
+ 	Add multiple-include guard.
+ 
+ 2004-01-08  Hartmut Penner  <hpenner@de.ibm.com>
+ 
+ 	* gcc/config/rs6000/rs6000.c (easy_vector_constant): Accept
+ 	all vector constant loadable by vsplt*.
+ 	(output_vec_const_move): Likewise.
+ 
+ 2004-01-07  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	PR c/6024
+ 	* c-typeck.c (comptypes): Only treat enumerated types in the same
+ 	translation unit as compatible with each other when they are the
+ 	same type.
+ 	* doc/extend.texi: Update.
+ 
+ 2004-01-07  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	PR c/12165
+ 	* c-decl.c (grokdeclarator): Take type qualifiers of typedefed
+ 	array type from the array element type.
+ 
+ 2004-01-07  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_dbx_register_number): New function.
+ 	* config/rs6000/rs6000-protos.h (rs6000_dbx_register_number): Declare.
+ 	* config/rs6000/rs6000.h (DWARF_FRAME_REGNUM): Define.
+ 	(DWARF_REG_TO_UNWIND_COLUMN): Correct column adjustment and comment.
+ 	* config/rs6000/sysv4.h (DBX_REGISTER_NUMBER): Define.
+ 
+ 2004-01-06  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* config/mips/mips.h (MDEBUG_ASM_SPEC): Change for dwarf2 default.
+ 	(DWARF2_DEBUGGING_INFO): Define.
+ 	(PREFERRED_DEBUGGING_TYPE): Set to dwarf2.
+ 	* config/mips/openbsd.h (PREFERRED_DEBUGGING_TYPE): Remove.
+ 	* config/mips/iris6.h (SUBTARGET_ASM_DEBUGGING_SPEC): Only pass -g0
+ 	for irix as.
+ 	(SUBTARGET_ASM_OPTIMIZING_SPEC): Only pass O0 for irix as.
+ 	* config/mips/iris6gas.h (MDEBUG_ASM_SPEC): Remove.
+ 	* config/mips/iris5gas.h: Ditto.
+ 	(DBX_DEBUGGING_INFO): Remove.
+ 	(DWARF2_DEBUGGING_INFO): Ditto.
+ 	(MIPS_DEBUGGING_INFO): Ditto.
+ 	(PREFERRED_DEBUGGING_TYPE): Ditto.
+ 	* config/mips/elf.h (DWARF2_DEBUGGING_INFO): Remove.
+ 	(PREFERRED_DEBUGGING_TYPE): Ditto.
+ 	(SUBTARGET_ASM_DEBUGGING_SPEC): Ditto.
+ 	* config/mips/elf64.h: Ditto.
+ 
+ 2004-01-06  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* Makefile.in (STAGEPROFILE_FLAGS_TO_PASS): Use -fprofile-generate.
+ 	(STAGEFEEDBACK_FLAGS_TO_PASS): Use -fprofile-use.
+ 
+ 2004-01-06  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* config/rs6000/t-darwin (LIB2FUNCS_EXTRA): Compile darwin-ldouble.c.
+ 	(TARGET_LIBGCC2_CFLAGS): Use -mlong-double-128.
+ 	* config/rs6000/darwin-ldouble.c: New.
+ 
+ 	* emit-rtl.c (gen_lowpart_common): Use simplify_gen_subreg
+ 	for constants.
+ 	(constant_subword): Delete.
+ 	* rtl.h (constant_subword): Delete prototype.
+ 	(immed_double_const): Is not in varasm.c.
+ 	* simplify-rtx.c (simplify_immed_subreg): New.
+ 	(simplify_subreg): Use simplify_immed_subreg.
+ 
+ 	* config/rs6000/rs6000.md (floatsitf2): Use expand_float rather
+ 	than trying to generate RTL directly.
+ 	(fix_trunctfsi2): Use expand_fix rather than trying to generate
+ 	RTL directly.
+ 
+ 	* dwarf2out.c (add_const_value_attribute): Remove incorrect comment.
+ 
+ 2004-01-06  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* config/rs6000/xcoff.h (EXTRA_SECTION_FUNCTIONS): Split each
+ 	function into a separate macro.
+ 	(read_only_data_section): Add void argument.
+ 	(private_data_section): Same.
+ 	(read_only_private_data_section): Same.
+ 	(toc_section): Same.
+ 
+ 2004-01-06  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* invoke.texi:  Remove typo in last change.
+ 
+ 	PR target/10301
+ 	* config.gcc: Accept opteron and athlon-64 as variants
+ 	of k8.
+ 	* i386.c (override_options): Likewise.
+ 	* invoke.texi (i386 -mtune): Expand documentation.
+ 
+ 2004-01-06  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* alias.c: Fix comment typos.
+ 	* builtins.c: Likewise.
+ 	* cfg.c: Likewise.
+ 	* df.c: Likewise.
+ 	* dominance.c: Likewise.
+ 	* dwarf2out.c: Likewise.
+ 	* emit-rtl.c: Likewise.
+ 	* expr.c: Likewise.
+ 	* final.c: Likewise.
+ 	* fold-const.c: Likewise.
+ 	* gcse.c: Likewise.
+ 	* genattrtab.c: Likewise.
+ 	* genrecog.c: Likewise.
+ 	* gensupport.c: Likewise.
+ 	* ggc-zone.c: Likewise.
+ 	* integrate.c: Likewise.
+ 	* local-alloc.c: Likewise.
+ 	* loop.c: Likewise.
+ 	* recog.c: Likewise.
+ 	* regmove.c: Likewise.
+ 	* reg-stack.c: Likewise.
+ 	* reorg.c: Likewise.
+ 	* rtlanal.c: Likewise.
+ 	* rtl.h: Likewise.
+ 	* sched-ebb.c: Likewise.
+ 	* simplify-rtx.c: Likewise.
+ 	* toplev.c: Likewise.
+ 	* varasm.c: Likewise.
+ 
+ 2004-01-06  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* doc/install.texi: Fix typos.
+ 	* doc/invoke.texi: Likewise.
+ 	* doc/md.texi: Likewise.
+ 
+ 2004-01-06  Kazuhiro Inaoka  <inaoka.kazuhiro@renesas.com>
+ 
+ 	* config/m32r/m32r.h (TRAMPOLINE_LINE_SIZE): Changed
+ 
+ 2004-01-06  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* i386.c (init_cumulative_args):  Add handling of MMX_REGPARM.
+ 	(function_arg_advance):  Do not pass aggregates in SSE; deal handling
+ 	of MMX_REGPARM.
+ 	(function_arg): Add new warnings about ABI changes;  fix SSE_REGPARM;
+ 	add MMX_REGPARM.
+ 	* i386.h (ix86_args): Add mmx_words/mmx_regs/mmx_regno fields.
+ 	(SSE_REGPARM_MAX): Default to 3 on i386 -msse ABI.
+ 	(MMX_REGPARM_MAX): Similarly for -mmmx.
+ 
+ 2004-01-05  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/sh/linux.h: Fix comment formatting.
+ 	* config/sh/netbsd-elf.h: Likewise.
+ 	* config/sh/sh.c: Likewise.
+ 	* config/sh/sh.h: Likewise.
+ 	* config/sh/vxworks.h: Likewise.
+ 
+ 2004-01-05  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* system.h (ASM_OUTPUT_MAIN_SOURCE_FILENAME): Poison.
+ 	* toplev.c (output_file_directive): Don't use
+ 	ASM_OUTPUT_MAIN_SOURCE_FILENAME.
+ 
+ 2004-01-05  Steven Bosscher <s.bosscher@student.tudelft.nl>
+ 
+ 	* toplev.c: Fix broken checkin of 2003-12-30.
+ 
+ 2004-01-05  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* ggc-zone.c: Remove everything in #ifdef USING_MALLOC_PAGE_GROUPS
+ 	(USING_MMAP): We don't support non-mmap.
+ 	(struct alloc_chunk): Steal 1 bit from typecode, use it to mark
+ 	large objects.
+ 	(struct page_entry): Remove bytes_free.
+ 	(struct page_table_chain): Remove.
+ 	(struct globals): Remove page_table member.
+ 	(loookup_page_table_entry): Function deleted.
+ 	(set_page_table_entry): Ditto.
+ 	(ggc_allocated_p): No longer need page table lookups.
+ 	(ggc_marked_p): Ditto.
+ 	(alloc_small_page): Don't care about bytes_free anymore.
+ 	(alloc_large_page): Round up size.
+ 	(ggc_alloc_zone_1): Mark large objects as such, and calculate
+ 	their size the new way.
+ 	Remove page table lookups and setting.
+ 	(ggc_get_size): Calculate large object size the new way.
+ 	(sweep_pages): Redo to account for fact that we no longer have
+ 	bytes_free.
+ 	(ggc_collect): No longer need to reincrement bytes_free.
+ 	(ggc_pch_alloc_object): Handle new large objects properly.
+ 	(ggc_pch_read): Put PCH stuff into it's own uncollected zone.
+ 
+ 2004-01-05  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* doc/invoke.texi: Remove a page break.
+ 
+ 2004-01-05  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/avr/avr.c (avr_output_function_prologue): Remove an
+ 	extra pair of curly braces.
+ 
+ 2004-01-05  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/mn10300/mn10300.c: Fix comment formatting.
+ 	* config/mn10300/mn10300.h: Likewise.
+ 
+ 2004-01-05  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* tree.h: Update documentation on nothrow_flag.
+ 	* print-tree.c (print_node): Print TREE_NOTHROW as "align-ok" for
+ 	types.
+ 
+ 2004-01-05  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* doc/invoke.texi: Remove traces of dead ports.
+ 
+ 2004-01-05  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* doc/invoke.texi: Add documentation for the MIPS -mexplicit-relocs
+ 	option.
+ 
+ 2004-01-05  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	PR target/12945
+ 	* coverage.c (coverage_counter_alloc): Set SYMBOL_FLAG_LOCAL for
+ 	counter labels.
+ 	* config/mips/mips.c (INTERNAL_SYMBOL_P): Delete.
+ 	(mips_classify_symbol): Always treat SYMBOL_REF_FLAG as indicating
+ 	string constants if TARGET_MIPS16.  Use SYMBOL_REF_DECL to check
+ 	the binding of decl symbols, otherwise check SYMBOL_REF_LOCAL_P.
+ 	(mips_symbol_insns): Don't trust the local/global classification.
+ 	(m16_usym8_4, m16_usym5_4): Same mips16 change as mips_classify_symbol.
+ 	(override_options): Make -mabicalls -fno-unit-at-a-time imply
+ 	-mno-explicit-relocs.
+ 	(mips_encode_section_info): Don't use SYMBOL_REF_FLAG to distinguish
+ 	between local and global symbols.
+ 
+ 2004-01-05  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips-protos.h (mips_dangerous_for_la25_p): Declare.
+ 	(mips_preferred_reload_class): Declare.
+ 	* config/mips/mips.h (DANGEROUS_FOR_LA25_P): Replace with function.
+ 	(EXTRA_CONSTRAINT): Update accordingly.
+ 	(PREFERRED_RELOAD_CLASS): Use mips_preferred_reload_class.
+ 	* config/mips/mips.c (mips_dangerous_for_la25_p): New function.
+ 	(mips_preferred_reload_class): New function.  Prefer LEA_REGS if
+ 	mips_dangerous_for_la25_p.
+ 	(mips_secondary_reload_class): Use LEA_REGS rather than GR_REGS
+ 	if mips_dangerous_for_la25_p.
+ 
+ 2004-01-05  Bernardo Innocenti  <bernie@develer.com>
+ 
+ 	* config/m68k/m68k.c (output_andsi3): Fix signed/unsigned comparison
+ 	warning.
+ 
+ 2004-01-04  Nathanael Nerode  <neroden@gcc.gnu.org>
+ 
+ 	* configure.ac: Use AC_PROG_CPP_WERROR.
+ 	* configure: Regenerate.
+ 
+ 2004-01-04  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* .cvsignore: Add autom4te.cache.
+ 
+ 2004-01-04  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* doc/invoke.texi: Revamp documentation of MIPS options.  Remove
+ 	-mabi=meabi, -mabi-fake-default, -mmips-as, -mgas, -mmips-tfile,
+ 	-m4650, -mfix7000 and -(m)no-crt0.  Put endianness options first,
+ 	then architecture options, then ABI options.  General rewording.
+ 
+ 2004-01-04  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	PR c/3414
+ 	* doc/extend.texi: Clarify definition of malloc attribute.
+ 
+ 2004-01-04  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* Makefile.in (cgraph.o, cgraphunit.o): Add intl.h dependency.
+ 	* cgraph.c (create_edge, dump_cgraph): Update to use inline_failed
+ 	* cgraph.h (cgraph_edge): Replace inline_call by inline_failed
+ 	(cgraph_inline_p): Add extra argument reason.
+ 	* cgraphunit.c: Minor formating fixes.
+ 	cgraph_first_inlined_callee): New functions.
+ 	(record_call_1): Record builtins too.
+ 	(cgraph_analyze_function): Update inline_failed messages.
+ 	(cgraph_mark_functions_to_output, cgraph_expand_function, cgraph_inlined_into,
+ 	cgraph_inlined_callees, cgraph_estimate_growth): Update to use inline_failed.
+ 	(cgraph_check_inline_limits): Likewise; Add argument reason.
+ 	(cgraph_set_inline_failed): New static function.
+ 	(cgraph_decide_inlining_of_small_function, cgraph_decide_inlining): Set
+ 	reasons.
+ 	(cgraph_inline_p): Add new argument reason.
+ 	* tree-inline.c (expand_call_inline):  Update warning.
+ 
+ 2004-01-03  Nathanael Nerode  <neroden@gcc.gnu.org>
+ 
+ 	* configure.ac: Replace AC_INIT, AC_OUTPUT, AC_CANONICAL_SYSTEM
+ 	with modern equivalents.
+ 	* configure: Regenerate.
+ 
+ 	* configure.ac: Replace gcc_AC_CHECK_TYPE with AC_CHECK_TYPE.
+ 	* aclocal.m4 (gcc_AC_CHECK_TYPE): Remove.
+ 	* configure: Regenerate.
+ 
+ 	* doc/install.texi: Note that 'gcc' is now a 2.57 directory.
+ 
+ 	* configure.in: Rename to configure.ac.
+ 	* configure.ac: Renamed from configure.in; make minimum necessary
+ 	changes for autoconf 2.5x.
+ 	* aclocal.m4: Make minimum necessary changes for autoconf 2.5x.
+ 	* configure: Regenerate with autoconf 2.57.
+ 
+ 2004-01-03  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/mips/linux.h: Fix comment formatting.
+ 	* config/mips/mips.c: Likewise.
+ 	* config/mips/mips.h: Likewise.
+ 	* config/mips/mips.md: Likewise.
+ 	* config/mips/netbsd.h: Likewise.
+ 	* config/mips/windiss.h: Likewise.
+ 
+ 2004-01-02  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/i386/i386.md (fp constant pool splitter): Reorg suppression
+ 	for sse and 387; add suppression for mmx.
+ 
+ 2004-01-02  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* loop.c (loop_optimize): Free all loops_info's mems.
+ 
+ 	* c-typeck.c (finish_init): Free spelling_base before
+ 	setting it again.
+ 
+ 	* cfgloop.c (flow_loops_find): Always free the sbitmap
+ 	headers.
+ 
+ 	* predict.c (estimate_probability): Free bbs after being
+ 	done with it.
+ 
+ 2004-01-02  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/mn10300/mn10300.h (PREDICATE_CODES): Add
+ 	const_8bit_operand and call_address_operand.
+ 
+ 2004-01-02  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* cgraphunit.c (cgraph_optimize_function):  Call optimize_inline_calls
+ 	when there is nothing to inline but warnings are requested.
+ 	(cgraph_decide_inlining):  Fix memory leak.
+ 
+ 2004-01-02  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* expr.c (store_constructor):  Fix pasto in previous patch.
+ 
+ 2004-01-02  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/i386/cygming.h: Fix comment formatting.
+ 	* config/i386/djgpp.h: Likewise.
+ 	* config/i386/gthr-win32.c: Likewise.
+ 	* config/i386/i386-interix.h: Likewise.
+ 	* config/i386/i386.c: Likewise.
+ 	* config/i386/i386.h: Likewise.
+ 	* config/i386/openbsd.h: Likewise.
+ 	* config/i386/winnt.c: Likewise.
+ 	* config/i386/xm-mingw32.h: Likewise.
+ 
+ 2004-01-02  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* doc/gcc.texi, doc/invoke.texi, doc/install.texi: Update
+ 	copyright and last modification dates.
+ 
+ 2004-01-02  Andreas Jaeger  <aj@suse.de>, Gerald Pfeifer  <gp@suse.de>
+ 
+ 	* doc/install.texi (Specific): Mention x86_64.
+ 
+ 2004-01-01  Hans-Peter Nilsson  <hp@bitrange.com>
+ 
+ 	* builtins.c (expand_builtin_apply_args_1) [STACK_GROWS_DOWNWARD]:
+ 	Call force_operand on plus_constant result.
+ 
+ 2004-01-01  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* expmed.c (store_bit_field, extract_bit_field): Use new named patterns
+ 	* expr.c (store_constructor): Use vec_init pattern.
+ 	* genopinit.c (optabs): Initailize vec_set/vec_extract/vec_init.
+ 	* optabs.h (optab_index): ADD OTI_vec_set/OTI_vec_extract/OTI_vec_init
+ 	(vec_set_optab, vec_extract_optab, vec_init_optab): New.
+ 	* i386.md (vec_setv2df, vec_extractv2df, vec_setv4sf, vec_extractv4sf):
+ 	New patterns.
+ 	(sse2_unpc?pd): Fix pattern.
+ 	(sse2_movlpd): Kill.
+ 	(sse2_movsd): Deal with movlpd too.
+ 	* i386.c (ix86_expand_builtin): Use sse2_movsd instead of sse2_movlpd.
+ 	(ix86_expand_vector_init): New.
+ 	* emmintrin.h (__mm_set_pd, __mm_set_ps): Use vector extensions.
+ 	* md.texi (vec_set, vec_extract): Document
+ 
+ 2003-12-31  Jan Hubicka  <jh@suse.cz>
+ 
+ 	PR opt/13473
+ 	* recog.c (validate_replace_rtx_1):  Take care for RTL sharing inside
+ 	ASM input operands
+ 
+ 	PR opt/12617
+ 	* toplev.c (dump_file_index): Reorder ce3 and bbro.
+ 	(dump_file): Likewise.
+ 	(rest_of_compilation): Likewise.
+ 
+ 	PR debug/13367
+ 	* cgraph.c (cgraph_function_possibly_inlined):  Even with
+ 	flag_really_no_inline we inline always_inline functions.
+ 	* cgraphunit.c (cgraph_analyze_function): Clear inlinable flag
+ 	for non-always_inline functions when there is flag_really_no_inline.
+ 	(cgraph_decide_inlining): Limit work done when not inlining.
+ 	(cgraph_decide_inlining_incrementally): Likewise.
+ 	(cgraph_optimize_function): Check whether something got inlined.
+ 	* c-objc-common.c (c_disregard_inline_limits): Do not always inline
+ 	extern inline functions when not inlining.
+ 
+ 	* opts.c (decode_options):  Disable crossjumping at -O1
+ 	* invoke.texi (-O1): Document change.
+ 
+ See ChangeLog.10 for earlier changes.
diff -Nrcpad gcc-3.4.3/gcc/ChangeLog.12 gcc-4.0.0/gcc/ChangeLog.12
*** gcc-3.4.3/gcc/ChangeLog.12	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ChangeLog.12	Tue Jan 18 13:42:43 2005
***************
*** 0 ****
--- 1,26890 ----
+ 2004-12-31  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR tree-opt/19042
+ 	* tree-sra.c (decide_block_copy): Force use_block_copy false
+ 	for complex values.
+ 
+ 2004-12-31  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR middle-end/17799
+ 	* function.c (use_register_for_decl): Check DECL_IGNORED_P instead
+ 	of DECL_ARTIFICIAL.
+ 	(assign_parms_augmented_arg_list): Set DECL_IGNORED_P.
+ 	* c-decl.c (build_compound_literal): Likewise.
+ 	* dwarf2asm.c (dw2_force_const_mem): Likewise.
+ 	* gimplify.c (create_artificial_label): Likewise.
+ 	* tree-inline.c (expand_call_inline): Likewise.
+ 	* var-tracking.c (vt_initialize): Likewise.
+ 	* tree-outof-ssa.c (create_temp): Copy DECL_IGNORED_P.
+ 
+ 2004-12-31  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR target/19211
+ 	* config/darwin.c (machopic_legitimize_pic_address): If the orig
+ 	is subregister return orig.
+ 
+ 2004-12-31  Zdenek Dvorak  <dvorakz@suse.cz>
+ 
+ 	* tree-scalar-evolution.c (instantiate_parameters_1): Copy the
+ 	expression only if needed.
+ 
+ 2004-12-31  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	* pa-hpux.h (HANDLE_SYSV_PRAGMA, HANDLE_PRAGMA_PACK_PUSH_POP): Define.
+ 
+ 2004-12-31  Hans-Peter Nilsson  <hp@bitrange.com>
+ 
+ 	PR target/18701
+ 	* combine.c (combine_simplify_rtx): Do not allow paradoxical
+ 	subregs of MEM.
+ 
+ 	PR target/18701
+ 	* combine.c (gen_lowpart_for_combine): When stripping SUBREG of
+ 	MEM, adjust imode and isize.
+ 
+ 2004-12-30  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/ia64/ia64.c (hfa_element_mode): Return false for 
+ 	zero-sized top-level aggregates.
+ 
+ 2004-12-30  Jan Hubicka  <jh@suse.cz>
+ 
+ 	PR target/18019
+ 	* i386.md (movqi_1): Fix -Os instruction choice.
+ 
+ 2004-12-30  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* global.c (regclass_intersect): Remove.
+ 	(mark_reg_use_for_earlyclobber): Use reg_classes_intersect_p instead.
+ 
+ 2004-12-30  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/ia64/ia64.c (ia64_function_value): Use PARALLEL for 
+ 	aggregates with XF/XCmode.
+ 
+ 2004-12-29  Richard Henderson  <rth@redhat.com>
+ 
+ 	* target.h (targetm.calls.arg_partial_bytes): New.
+ 	* target-def.h (TARGET_ARG_PARTIAL_BYTES): New.
+ 	* calls.c (store_unaligned_arguments_into_pseudos): Update for
+ 	partial in bytes.
+ 	(load_register_parameters): Likewise.
+ 	(store_one_arg): Likewise.
+ 	(initialize_argument_information): Use targetm.calls.arg_partial_bytes.
+ 	(emit_library_call_value_1): Likewise.
+ 	* expr.c (block_move_libcall_safe_for_call_parm): Likewise.
+ 	(emit_push_insn): Update for partial in bytes.
+ 	* expr.h (FUNCTION_ARG_PARTIAL_NREGS): Remove.
+ 	* function.c (assign_parm_find_entry_rtl): Use
+ 	targetm.calls.arg_partial_bytes.  Update for result in bytes.
+ 	(locate_and_pad_parm): Update for partial in bytes.
+ 	* system.h (FUNCTION_ARG_PARTIAL_NREGS): Poison.
+ 	* targhooks.c (hook_int_CUMULATIVE_ARGS_mode_tree_bool_0): New.
+ 	* targhooks.h (hook_int_CUMULATIVE_ARGS_mode_tree_bool_0): Declare.
+ 	* doc/tm.texi (TARGET_ARG_PARTIAL_BYTES): Rename and update from
+ 	FUNCTION_ARG_PARTIAL_NREGS.
+ 
+ 	* config/arc/arc.h, config/c4x/c4x.h, config/i386/i386.h,
+ 	config/i860/i860.h, config/m68hc11/m68hc11.h, config/m68k/m68k.h,
+ 	config/pdp11/pdp11.h, config/s390/s390.h, config/stormy16/stormy16.h, 
+ 	config/xtensa/xtensa.h (FUNCTION_ARG_PARTIAL_NREGS): Remove.
+ 
+ 	* config/alpha/alpha.c (alpha_arg_partial_bytes): New.
+ 	(TARGET_ARG_PARTIAL_BYTES): New.
+ 	* config/alpha/alpha.h, config/alpha/unicosmk.h,
+ 	config/alpha/vms.h (FUNCTION_ARG_PARTIAL_NREGS): Remove.
+ 
+ 	* config/arm/arm.h (FUNCTION_ARG_PARTIAL_NREGS): Move ...
+ 	* config/arm/arm.c (arm_arg_partial_bytes): ... here.
+ 	(TARGET_ARG_PARTIAL_BYTES): New.
+ 
+ 	* config/cris/cris.h (FUNCTION_ARG_PARTIAL_NREGS): Move ...
+ 	* config/cris/cris.c (cris_arg_partial_bytes): ... here.
+ 	(TARGET_ARG_PARTIAL_BYTES): New.
+ 
+ 	* config/fr30/fr30.h (FUNCTION_ARG_PARTIAL_NREGS): Remove.
+ 	* config/fr30/fr30.c (fr30_arg_partial_bytes): Rename from
+ 	fr30_function_arg_partial_nregs.  Adjust to return bytes.
+ 	(TARGET_ARG_PARTIAL_BYTES): New.
+ 	* config/fr30/fr30-protos.h: Update.
+ 
+ 	* config/frv/frv.h (FUNCTION_ARG_PARTIAL_NREGS): Remove.
+ 	* config/frv/frv.c (frv_arg_partial_bytes): Rename from 
+ 	frv_function_arg_partial_nregs.  Adjust to return bytes.
+ 	(TARGET_ARG_PARTIAL_BYTES): New.
+ 	* config/frv/frv-protos.h: Update.
+ 
+ 	* config/ia64/ia64.h (FUNCTION_ARG_PARTIAL_NREGS): Remove.
+ 	* config/ia64/ia64.c (ia64_arg_partial_bytes): Rename from
+ 	ia64_function_arg_partial_nregs.  Adjust to return bytes.
+ 	(TARGET_ARG_PARTIAL_BYTES): New.
+ 	* config/ia64/ia64-protos.h: Update.
+ 
+ 	* config/iq2000/iq2000.h (FUNCTION_ARG_PARTIAL_NREGS): Remove.
+ 	* config/iq2000/iq2000.c (iq2000_arg_partial_bytes): Rename from
+ 	function_arg_partial_nregs.  Adjust to return bytes.
+ 	(TARGET_ARG_PARTIAL_BYTES): New.
+ 	* config/iq2000/iq2000-protos.h: Update.
+ 
+ 	* config/m32r/m32r.h (FUNCTION_ARG_PARTIAL_NREGS): Remove.
+ 	* config/m32r/m32r.c (m32r_arg_partial_bytes): Rename from
+ 	function_arg_partial_nregs.  Adjust to return bytes.
+ 	(TARGET_ARG_PARTIAL_BYTES): New.
+ 	* config/m32r/m32r-protos.h: Update.
+ 
+ 	* config/mcore/mcore.h (FUNCTION_ARG_PARTIAL_NREGS): Remove.
+ 	* config/mcore/mcore.c (mcore_arg_partial_bytes): Rename from
+ 	mcore_function_arg_partial_nregs.  Adjust to return bytes.
+ 	(TARGET_ARG_PARTIAL_BYTES): New.
+ 	* config/mcore/mcore-protos.h: Update.
+ 
+ 	* config/mips/mips.h (FUNCTION_ARG_PARTIAL_NREGS): Remove.
+ 	* config/mips/mips.c (mips_arg_partial_bytes): Rename from
+ 	function_arg_partial_nregs.  Adjust to return bytes.
+ 	(TARGET_ARG_PARTIAL_BYTES): New.
+ 	* config/mips/mips-protos.h: Update.
+ 
+ 	* config/mn10300/mn10300.h (FUNCTION_ARG_PARTIAL_NREGS): Remove.
+ 	* config/mn10300/mn10300.c (mn10300_arg_partial_bytes): Rename from	
+ 	function_arg_partial_nregs.  Adjust to return bytes.
+ 	(TARGET_ARG_PARTIAL_BYTES): New.
+ 	* config/mn10300/mn10300-protos.h: Update.
+ 
+ 	* config/ns32k/ns32k.h (FUNCTION_ARG_PARTIAL_NREGS): Move ...
+ 	* config/ns32k/ns32k.c (ns32k_arg_partial_bytes): ... here.
+ 	(TARGET_ARG_PARTIAL_BYTES): New.
+ 
+ 	* config/pa/pa.h (FUNCTION_ARG_PARTIAL_NREGS): Remove.
+ 	* config/pa/pa.c (pa_arg_partial_bytes): Rename from 
+ 	function_arg_partial_nregs.  Handle 32-bit.  Adjust to return bytes.
+ 	(TARGET_ARG_PARTIAL_BYTES): New.
+ 	* config/pa/pa-protos.h: Update.
+ 
+ 	* config/rs6000/rs6000.h (FUNCTION_ARG_PARTIAL_NREGS): Remove.
+ 	* config/rs6000/rs6000.c (rs6000_arg_partial_bytes): Rename from 
+ 	function_arg_partial_nregs.  Adjust to return bytes.
+ 	(TARGET_ARG_PARTIAL_BYTES): New.
+ 	* config/rs6000/rs6000-protos.h: Update.
+ 
+ 	* config/sh/sh.h (FUNCTION_ARG_PARTIAL_NREGS): Move ...
+ 	* config/sh/sh.c (sh_arg_partial_bytes): ... here.
+ 	(TARGET_ARG_PARTIAL_BYTES): New.
+ 
+ 	* config/sparc/sparc.h (FUNCTION_ARG_PARTIAL_NREGS): Remove.
+ 	* config/sparc/sparc.c (sparc_arg_partial_bytes): Rename from
+ 	function_arg_partial_nregs.  Adjust to return bytes.
+ 	(TARGET_ARG_PARTIAL_BYTES): New.
+ 	* config/sparc/sparc-protos.h: Update.
+ 
+ 	* config/v850/v850.h (FUNCTION_ARG_PARTIAL_NREGS): Remove.
+ 	* config/v850/v850.c (v850_arg_partial_bytes): Rename from
+ 	function_arg_partial_nregs.  Adjust to return bytes.
+ 	(TARGET_ARG_PARTIAL_BYTES): New.
+ 	* config/v850/v850-protos.h: Update.
+ 
+ 2004-12-30  Hans-Peter Nilsson  <hp@bitrange.com>
+ 
+ 	* config/mmix/mmix.h (ASM_OUTPUT_INTERNAL_LABEL): Define.
+ 	* config/mmix/mmix.c (mmix_asm_output_internal_label): New
+ 	function.
+ 	* config/mmix/mmix-protos.h (mmix_asm_output_internal_label):
+ 	Prototype.
+ 
+ 2003-12-29  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/sparc/sparc.c (TARGET_RELAXED_ORDERING): True.
+ 
+ 2004-12-29  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-outof-ssa.c (insert_backedge_copies): New function.
+ 	(rewrite_out_of_ssa): Use it.
+ 
+ 2004-12-29  Ira Rosen  <irar@il.ibm.com>
+ 
+ 	PR tree-optimization/18179
+ 	* tree-vectorizer.c (vect_get_base_and_offset): Call get_inner_reference
+ 	and vect_analyze_offset_expr.
+ 	(vect_create_addr_base_for_vector_ref): Build address_base by combining 
+ 	base and initial_offset fields of vect_stmt_info.
+ 	(vect_update_inits_of_dr): Update offset of data-ref instead of its
+ 	access-fn. Remove argument.
+ 	(vect_update_inits_of_drs): Call vect_update_inits_of_dr with new
+ 	arguments.
+ 	(vect_compute_data_ref_alignment): Check misalignment info in 
+ 	vect_stmt_info. Remove argument.
+ 	(vect_compute_data_refs_alignment): Call vect_compute_data_ref_alignment
+ 	with correct argument.
+ 	(vect_analyze_data_ref_access): Check access info in vect_stmt_info.
+ 	(vect_analyze_pointer_ref_access): Update step and initial_offset fields
+ 	of vect_stmt_info.
+ 	(vect_get_memtag_and_dr): Call vect_get_base_and_offset and set the 
+ 	fields of stmt_vec_info.
+ 	(vect_analyze_data_refs): Find vectype and pass it to 
+ 	vect_get_memtag_and_dr.
+ 	(vect_get_first_index): Remove.
+ 	(vect_compute_array_base_alignment): Remove.
+ 	(vect_compute_array_ref_alignment): Remove
+ 	(vect_create_data_ref_ptr): Use TYPE_SIZE_UNIT instead GET_MODE_SIZE.
+ 	(vect_gen_niters_for_prolog_loop): Use TREE_CONSTANT instead 
+ 	host_integerp.
+ 	(vectorizable_load): Use size arithmetics.
+ 
+ 2004-12-29  Ira Rosen  <irar@il.ibm.com>
+ 
+ 	PR tree-optimization/18179
+ 	* tree-vectorizer.c (vect_get_base_and_offset): Rename (previous name
+ 	vect_get_base_and_bit_offset).
+ 	(vect_get_memtag_and_dr): Rename (previous name vect_get_symbl_and_dr).
+ 
+ 2004-12-29  Ira Rosen  <irar@il.ibm.com>
+ 
+ 	PR tree-optimization/18179
+ 	* tree-vectorizer.h (struct _stmt_vec_info): Add new fields:
+ 	initial_offset, step, misalignment and base_aligned_p and macros
+ 	to access them.
+ 	* tree-vectorizer.c (vect_analyze_offset_expr): New function.
+ 	(new_stmt_vec_info): Initialize the new fields of stmt_vec_info.
+ 
+ 	(vect_create_data_ref_ptr): Fix printings.
+ 
+ 2004-12-29  Ira Rosen  <irar@il.ibm.com>
+ 
+ 	PR tree-optimization/18179
+ 	* tree-vectorizer.c (vect_get_symbl_and_dr): Reorganize. Add memtag 
+ 	retrieval.
+ 	(vect_analyze_data_refs): Remove memtag retrieval.
+ 
+ 2004-12-28  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR inline-asm/15740
+ 	* gimplify.c (gimplify_asm_expr): Move resolve asm names ...
+ 	* c-typeck.c (build_asm_expr): ... here.  Validate input
+ 	constraints.  Mark memory inputs addressable.
+ 
+ 2004-12-28  Hans-Peter Nilsson  <hp@bitrange.com>
+ 
+ 	PR target/18321
+ 	* config/mmix/mmix.c (mmix_expand_epilogue): Change type of
+ 	variable offset to HOST_WIDE_INT.  Remove obsolete comment.  Fix
+ 	spacing.
+ 
+ 2004-12-28  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* fold-const.c (fold_build_cleanup_point_expr): For a RETURN_EXPR,
+ 	we only need a cleanup point expression when the expression on the
+ 	left hand side of the MODIFIY_EXPR inside the return has side
+ 	effects.
+ 
+ 2004-12-28  Dorit Naishlos  <dorit@il.ibm.com>
+ 
+ 	* tree-vectorizer.c (vect_mark_relevant) First argument changed from
+ 	varray_type to varray_type*.
+ 	(vect_mark_stmts_to_be_vectorized): Pass &worklist instead of worklist
+ 	when calling vect_mark_relevant.
+ 
+ 2004-12-28  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_legitimize_reload_address): Don't
+ 	generate non-offsettable DImode lo_sum addresses.
+ 
+ 2004-12-28  Zdenek Dvorak  <dvorakz@suse.cz>
+ 
+ 	PR rtl-optimization/19103
+ 	* loop-iv.c (iv_number_of_iterations): Fix typo.
+ 
+ 2004-12-28  Andreas Jaeger  <aj@suse.de>
+ 
+ 	* genrecog.c (compute_predicate_codes): Avoid warning.
+ 
+ 2004-12-27 John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	* vax.c (vax_address_cost, vax_rtx_cost): Correct casts.
+ 	(vax_rtx_cost): Handle small offsets for both PLUS and MINUS.
+ 
+ 2004-12-27  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (thread_across_edge): Remove broken code to
+ 	avoid threading into a loop.
+ 
+ 2004-12-27  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR target/17406
+ 	* config/i386/i386.c (ix86_expand_prologue): Add REG_FRAME_RELATED_EXPR
+ 	note for allocate_stack_worker insn.
+ 
+ 2004-12-27  Jason Merrill  <jason@redhat.com>
+ 
+ 	* doc/tm.texi (TARGET_RELAXED_ORDERING): Document.
+ 	* target.h (struct gcc_target): Add relaxed_ordering field.
+ 	* target-def.h (TARGET_RELAXED_ORDERING): Define default.
+ 	(TARGET_INITIALIZER): Add it.
+ 	* config/alpha/alpha.c (TARGET_RELAXED_ORDERING): Define.
+ 	* config/ia64/ia64.c (TARGET_RELAXED_ORDERING): Define.
+ 	* config/rs6000/rs6000.c (TARGET_RELAXED_ORDERING): Define.
+ 	* config/sparc/sparc.c (TARGET_RELAXED_ORDERING): Define.
+ 
+ 2004-12-27  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	PR driver/16118
+ 	* doc/invoke.texi: Document the interaction between -save-temps
+ 	and -x.
+ 
+ 2004-12-27  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_eliminate_indexed_memrefs):
+ 	Do not break apart constant pool addresses.
+ 	(rs6000_emit_move): Only force source into REG if target is MEM.
+ 
+ 2004-12-27  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	PR c++/19148
+ 	* gimplify.c (gimplify_cond_expr): Add post_p parameter.
+ 	(gimplify_modify_expr_rhs): Adjust call to gimplify_cond_expr.
+ 	(gimplify_expr): Likewise.
+ 
+ 2004-12-27  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/i386/i386.h (UNITS_PER_SIMD_WORD): Don't use MMX/3DNOW.
+ 
+ 2004-12-26  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/i386/i386.c (ix86_gimplify_va_arg): Also pass the result
+ 	of type_natural_mode to examine_argument.
+ 
+ 	* config/i386/i386.md (mov<MMXMODEI>_internal_rex64): New.
+ 	(movv2sf_internal_rex64): New.
+ 	(mov<MMXMODEI>_internal): Use no register preferences at all.
+ 	(movv2sf_internal): Likewise.
+ 
+ 2004-12-26  Richard Henderson  <rth@redhat.com>
+ 
+ 	* simplify-rtx.c (simplify_relational_operation_1): Don't simplify
+ 	plus/minus across EQ for floating-point.
+ 
+ 2004-12-26  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	PR target/17643
+ 	* pa.c (pa_function_ok_for_sibcall): Sibcalls are not ok when
+ 	generating code for the portable runtime.
+ 
+ 2004-12-25  Richard Henderson  <rth@redhat.com>
+ 
+ 	* expr.c (clear_storage): Validate CONST0_RTX extant.  Special case
+ 	complex modes.
+ 
+ 2004-12-25  Zdenek Dvorak  <dvorakz@suse.cz>
+ 
+ 	PR rtl-optimization/19078
+ 	* tree-ssa-loop-ivopts.c (determine_use_iv_cost_generic,
+ 	determine_use_iv_cost_outer): Fix computing of cost for the original
+ 	bivs.
+ 	(dump_use): Handle case related_cands == NULL.
+ 
+ 2004-12-25  Marek Michalkiewicz  <marekm@amelek.gda.pl>
+ 
+ 	PR target/19059
+ 	* config/avr/avr.c (avr_mcu_types): Move attiny{13,2313} from avr4
+ 	to avr2.
+ 	* config/avr/avr.h (LINK_SPEC): Ditto.
+ 	* config/avr/t-avr (MULTILIB_MATCHES): Ditto.
+ 
+ 2004-12-25  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	PR target/19137
+ 	* config/rs6000/rs6000.md (movti_power, movti_string): Relax
+ 	operand[1] predicate to input_operand, and add r<-n alternative.
+ 	Move TImode const_double_operand splitter to where it belongs.
+ 
+ 2004-12-25  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	PR target/19147
+ 	* config/rs6000/rs6000.md (andsi3_internal7, andsi3_internal8): Delete.
+ 
+ 2004-12-24  Uros Bizjak  <uros@kss-loka.si>
+ 
+ 	* config/i386/i386.md (*fix_trunc{d,s,h}i_1):
+ 	Rename to *fix_trunc{d,s,h}i_i387.
+ 	(fix_trunc{d,s}fdi2): Reorder tests.
+ 
+ 2004-12-24  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	Fix PR debug/14638
+ 
+ 	* tree.h (DECL_DEBUG_ALIAS_OF): New macro.
+ 	* var-tracking.c (track_expr_p): Don't disqualify tracking of variables
+ 	that are aliases of variables we want to track, unless the
+ 	original variable is also ignored for debugging purposes.
+ 	(VARIABLE_HASH_VAL): Use DECL_UID, so that this is deterministic.
+ 	* tree-outof-ssa.c (create_temp): Note who we are a debug alias of.
+ 	* dwarf2out.c (dwarf2out_var_location): Add us to the location of
+ 	the decl we are an alias of.
+ 
+ 2004-12-24  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	PR target/19142
+ 	* config/rs6000/rs6000.c (legitimate_lo_sum_address_p): Allow
+ 	DFmode for 32-bit again.
+ 
+ 2004-12-23  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* reload.c (regno_clobbered_p): Add a gcc_assert that regno
+ 	refers to a hard register.
+ 
+ 2004-12-23  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* gimplify.c (gimplify_modify_expr_rhs): Use types_compatible_p.
+ 
+ 2004-12-23  DJ Delorie  <dj@redhat.com>
+ 
+ 	* genrecog.c (did_you_mean_codes): New.
+ 	(compute_predicate_codes): Fail unmatched codes.
+ 
+ 2004-12-23  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* config/mips/mips.h (TARGET_CPU_CPP_BUILTINS): Add
+ 	assert for machine=mips for !TARGET_IRIX.
+ 	* config/mips/linux.h: Remove machine=mips assert.
+ 	* config/mips/netbsd.h: Ditto.
+ 	* config/mips/openbsd.h: Ditto.
+ 
+ 2004-12-23  Dale Johannesen  <dalej@apple.com>
+ 
+ 	* tree.c (iterative_hash_expr):  Canonicalize builtins.
+ 
+ 2004-12-23  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	PR target/16819
+ 	* calls.c (load_register_parameters): Don't call use_regs when
+ 	nregs is zero.
+ 
+ 2004-12-23  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR middle-end/17746
+ 	* expr.c (get_inner_reference): Add 'keep_aligning' parameter.
+ 	Break on aligning VIEW_CONVERT_EXPR nodes on STRICT_ALIGNMENT
+ 	platforms only if keep_aligning is true.
+ 	(expand_assignment): Adjust call to get_inner_reference.
+ 	(expand_expr_addr_expr_1): Likewise.
+ 	(expand_expr_real_1): Likewise.
+ 	* dojump.c (do_jump): Likewise.
+ 	* dwarf2out.c (loc_descriptor_from_tree_1): Likewise.
+ 	* fold-const.c (optimize_bit_field_compare): Likewise.
+ 	(decode_field_reference): Likewise.
+ 	(split_address_to_core_and_offset): Likewise.
+ 	* tree-ssa-loop-ivopts.c (split_address_cost): Likewise.
+ 	* tree.h (get_inner_reference): Adjust prototype.
+ 
+ 2004-12-23  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/i386/i386.c (override_options): Revert last change
+ 	wrt fancy 387 math.
+ 
+ 2004-12-23  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/alpha/alpha.md (one_cmpl<mode>2, and<mode>3, andnot<mode>3,
+ 	ior<mode>3, iornot<mode>3, xor<mode>3, xornot<mode>3): New macroized
+ 	vector operate patterns.
+ 
+ 2004-12-23  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/i386/i386.c (ix86_expand_vector_move): Tidy.
+ 	(ix86_expand_vector_move_misalign): New.
+ 	(ix86_misaligned_mem_ok): Remove.
+ 	(TARGET_VECTORIZE_MISALIGNED_MEM_OK): Remove.
+ 	* config/i386/i386-protos.h: Update.
+ 	* config/i386/i386.md (SSEMODEI): Rename from SSEINT16.
+ 	(MMXMODEI): Rename from MMXINT8.
+ 	(SSEMODE, MMXMODE, movmisalign<mode>): New.
+ 
+ 2004-12-23  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	PR c++/16405
+ 	* gimplify.c (gimplify_modify_expr_rhs): Handle
+ 	INDIRECT_REF/ADDR_EXPR combinations.
+ 
+ 2004-12-22  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/alpha/alpha.c (alpha_expand_mov): Split out ...
+ 	(alpha_expand_movmisalign): ... misaligned vector support.
+ 	(TARGET_VECTORIZE_MISALIGNED_MEM_OK): Remove.
+ 	* config/alpha/alpha-protos.h: Update.
+ 	* config/alpha/alpha.md (VEC): New macro.
+ 	(movv8qi, movv4hi, movv2si): Compress with VEC.
+ 	(movv8qi_fix, movv4hi_fix, movv2si_fix): Likewise.
+ 	(movv8qi_nofix, movv4hi_nofix, movv2si_nofix): Likewise.
+ 	(movmisalign<mode>): New.
+ 
+ 2004-12-22  Richard Henderson  <rth@redhat.com>
+ 
+ 	* optabs.h (OTI_movmisalign, movmisalign_optab): New.
+ 	* optabs.c (init_optabs): Create it.
+ 	* genopinit.c (optabs): Initialize it.
+ 	* expr.c (expand_expr_real_1) <MISALIGNED_INDIRECT_REF>: Use it.
+ 	* tree-vectorizer.c (vect_supportable_dr_alignment): Likewise.
+ 	* target-def.h (TARGET_VECTORIZE_MISALIGNED_MEM_OK): Remove.
+ 	* target.h (vectorize.misaligned_mem_ok): Remove.
+ 	* targhooks.c (default_vect_misaligned_mem_ok): Remove.
+ 	* doc/md.texi (movmisalign): New.
+ 	* doc/tm.texi (TARGET_VECTORIZE_MISALIGNED_MEM_OK): Remove.
+ 
+ 2004-12-22  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/i386/emmintrin.h (_mm_loadh_pd): Don't cast pointer arg
+ 	to __v2si.
+ 	(_mm_storeh_pd, _mm_loadl_pd, _mm_storel_pd): Likewise.
+ 	* config/i386/i386.c (ix86_init_mmx_sse_builtins): Use double* or
+ 	const double* for __builtin_ia32_loadhpd, __builtin_ia32_loadlpd,
+ 	__builtin_ia32_storehpd, __builtin_ia32_storelpd.
+ 	(ix86_expand_builtin): Update to match.
+ 	(ix86_expand_vector_init): Use sse2_loadlpd.
+ 	* config/i386/i386.md (vec_setv2df): Use sse2_loadlpd, sse2_loadhpd.
+ 	(vec_extractv2df): Use sse2_storelpd, sse2_storehpd.
+ 	(sse2_storehpd, sse2_loadhpd, sse2_storelpd, sse2_loadlpd): New.
+ 	(sse2_movhpd): Remove.
+ 
+ 2004-12-23  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	PR target/18751
+ 	* config/rs6000/rs6000.c (legitimate_lo_sum_address_p): Return
+ 	false for anything larger than 32 bits in 32-bit code.
+ 
+ 2004-12-22  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/i386/i386.md (btsq, btrq, btcq): Fix modes.
+ 	(bt peepholes): Likewise.
+ 
+ 	* varasm.c (force_const_mem): Call set_mem_align.
+ 
+ 2004-12-22  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/i386/predicates.md (sse_comparison_operator): Fix
+ 	typo in ieee test.
+ 	(arith_or_logical_operator): Downcase codes.
+ 
+ 2004-12-23  Kaz Kojima  <kkojima@gcc.gnu.org>
+ 
+ 	PR target/18511
+ 	* reload1.c (emit_output_reload_insns): Check if OLD is a hard
+ 	register before calling regno_clobbered_p.
+ 	* reload.c: Update comment for regno_clobbered_p.
+ 
+ 2004-12-22  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/i386/i386.c (override_options): Respect user disable of
+ 	fancy 387 math, sse, mmx.
+ 	(construct_container): Generate error if we need an sse regster
+ 	and sse has been disabled.
+ 	* config/i386/i386.h (TARGET_SWITCHES): Disabling sse also disables
+ 	later sse generations.  Disabling mmx also disables 3dnow.
+ 
+ 2004-12-22  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-inline.c (struct inline_data): Remove inlined_fns.
+ 	(expand_call_inline): Remove dead code setting
+ 	inlined_fns.
+ 	(optimize_inline_calls): Remove dead code setting DECL_INLINED_FNS.
+ 	* tree.h (struct tree_decl): Remove inlined_fns.
+ 
+ 2004-12-22  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* tree-browser.c: Remove obsolete #ifdef HOST_EBCDIC code.
+ 
+ 2004-12-23  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	PR target/18896
+ 	* function.c (split_complex_args): Set DECL_ARTIFICIAL, DECL_IGNORED_P
+ 	for real and imaginary parts if the parm is addressable.
+ 	(assign_parms_unsplit_complex): If parm addressable, save real
+ 	and imaginary parts to a stack temp.  Pass assign_parm_data_all.
+ 	(assign_parms): Adjust assign_parms_unsplit_complex call.
+ 
+ 2004-12-22  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree.h (DECL_PTA_ALIASVAR): Dead.
+ 	(struct tree_decl): Remove alias_var field.
+ 
+ 2004-12-22  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* system.h (IN_RANGE): Restore HOST_WIDE_INT cast.
+ 	* tree.h (IS_EXPR_CODE_CLASS): Do not use IN_RANGE.
+ 
+ 2004-12-22  Richard Henderson  <rth@redhat.com>
+ 	    Uros Bizjak  <uros@kss-loka.si>
+ 
+ 	* config/i386/i386.md (truncdfsf2): Don't create stack temp when
+ 	using sse math only.  Use truncdfsf2_with_temp.
+ 	(truncdfsf2_with_temp): New.
+ 	(truncdfsf_fast_i387): Rename from truncdfsf2_noop.  Add memory
+ 	output alternative.
+ 	(truncdfsf_mixed): Rename from truncdfsf2_1_sse.  Compress duplicate
+ 	alternatives.
+ 	(truncdfsf_fast_sse): Rename from truncdfsf2_2.  Remove f alternative.
+ 	(truncdfsf2_3, truncdfsf2_sse_only): Remove.
+ 	(truncdfsf_i387): Rename from truncdfsf2_1.  Compress duplicates.
+ 	(truncdfsf_fast_mixed): New.
+ 	(truncdfsf splitters): Remove all except the 387 load/store split.
+ 	(truncxfsf2_1, truncxfdf2_1): Unify enable constraint with
+ 	respect to TARGET_SSE2, TARGET_80387, TARGET_SSE_MATH and
+ 	TARGET_MIX_SSE_I387.
+ 	(*truncxf{s,d}f2_1): Rename to *truncxf{s,d}f2_mixed.
+ 	(truncxf{s,d}f2_noop) Rename to truncxf{d,s}f2_i387_noop.
+ 	(*truncxf{s,d}f2_i387): New patterns.
+ 	(*truncxf{s,d}f2_2): Rename to *truncxf{s,d}f2_i387_1.
+ 	(truncxf{s,d}f2, fmod{s,d}f3, drem{s,d}f3, log1p{s,d}f2,
+ 	rint{s,d}f2, floor{s,d}f2, ceil{s,d}f2, btrunc{s,d}f2,
+ 	nearbyint{s,d}f2): Use renamed patterns.
+ 
+ 2004-12-22  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* tree.h (TYPE_SIZES_GIMPLIFIED): New.
+ 	* function.c (gimplify_parm_type): Don't gimplify type if already done.
+ 	* gimplify.c (gimplify_decl_expr): Likewise.
+ 	(gimplify_type_sizes): Set TYPE_SIZES_GIMPLIFIED.  Examine nested
+ 	array types.
+ 
+ 2004-12-22  Richard Henderson  <rth@redhat.com>
+ 
+ 	* gimplify.c (eval_save_expr): Remove.
+ 	(gimplify_one_sizepos): Unshare expr before gimplifying.
+ 	* stor-layout.c (variable_size): Revert 2004-12-19 change.
+ 	(layout_decl): Revert 2004-12-18 change.
+ 	(layout_type): Revert 2004-12-21 change.
+ 
+ 2004-12-22  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* tree-sra.c (type_can_be_decomposed_p): Reject variable sized types.
+ 
+ 2004-12-22  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* Makefile.in (install-common): Remove special-case code for when
+ 	SPECS is defined.
+ 
+ 2004-12-22  Jan Beulich  <jbeulich@novell.com>
+ 
+ 	* config.gcc: Add dbxelf.h to NetWare's tm_file.
+ 	* config/i386/netware-crt0.c: Prototype __init_environment and
+ 	__deinit_environment prior to their definition.
+ 	(__init_environment): Correct invokation of constructor function.
+ 	* config/i386/netware.h (TARGET_OS_CPP_BUILTINS): Use
+ 	builtin_define_std rather than builtin_define on IAPX386.
+ 	* config/i386/nwld.h: Disable stabs debugging info with the linker
+ 	this file supports.
+ 	* config/i386/t-nwld (SHLIB_LINK): Do not use a temporary file for
+ 	the output. Add -posix to the options as that is the more compatible
+ 	mode.
+ 	* gthr-nks.h: Formatting.
+ 	(__gthread_mutex_init_function): Kill the dubious use of
+ 	NX_MUTEX_RECURSIVE as it is now clear that the traditional mutexes
+ 	were not meant to be recursive.
+ 	(__gthread_recursive_mutex_t, __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION,
+ 	__gthread_recursive_mutex_init_function,
+ 	__gthread_recursive_mutex_lock, __gthread_recursive_mutex_trylock,
+ 	__gthread_recursive_mutex_unlock): New.
+ 
+ 2004-12-22  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	* config/mips/t-linux64: Remove code that messed with $(SPECS).
+ 	(MULTILIB_OPTIONS, MULTILIB_DIRNAMES, MULTILIB_OSDIRNAMES): Move
+ 	n32 to the front.
+ 	(MULTILIB_EXTRA_OPTS, CRTSTUFF_T_CFLAGS, CRTSTUFF_T_CFLAGS_S):
+ 	Removed.
+ 	* config/mips/linux64.h (DRIVER_SELF_SPECS): Don't handle
+ 	-mabi-fake-default.
+ 	(SUBTARGET_TARGET_SWITCHES): Likewise.
+ 
+ 2004-12-21  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR c++/18984
+ 	* pointer-set.c (pointer_set_contains): Add back.
+ 	* pointer-set.h (pointer_set_contains): Add back.
+ 
+ 2004-12-21  Richard Henderson  <rth@redhat.com>
+ 
+ 	* gimplify.c (eval_save_expr): New.
+ 	(gimplify_one_sizepos): Use it.
+ 	* stor-layout.c (layout_type): Unshare TYPE_MIN/MAX_VALUE.
+ 
+ 2004-12-21  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* system.c (IN_RANGE): Use plain unsigned, not unsigned
+ 	HOST_WIDE_INT.
+ 	* tree.def (VOID_TYPE, INTEGER_TYPE, REAL_TYPE, COMPLEX_TYPE,
+ 	VECTOR_TYPE, OFFSET_TYPE, ENUMERAL_TYPE, BOOLEAN_TYPE, CHAR_TYPE,
+ 	POINTER_TYPE, REFERENCE_TYPE, METHOD_TYPE, FUNCTION_TYPE,
+ 	FILE_TYPE, ARRAY_TYPE, RECORD_TYPE, UNION_TYPE,
+ 	QUAL_UNION_TYPE): Reorder for better code efficiency.
+ 	(CONST_DECL, TYPE_DECL, VAR_DECL, FIELD_DECL, PARM_DECL): Likewise.
+ 	(INDIRECT_REF, ALIGN_INDIRECT_REF, MISALIGNED_INDIRECT_REF): Likewise.
+ 	* tree.h (INDIRECT_REF_P): Reorder checks for better optimization.
+ 	(IS_EXPR_CODE_CLASS): Use IN_RANGE.
+ 	(INTEGRAL_TYPE_P, FLOAT_TYPE_P): Reorder checks for better
+ 	optimization.
+ 
+ 2004-12-21  David O'Brien  <obrien@FreeBSD.org>
+ 
+ 	* config/freebsd-spec.h:  Use KSE pthread lib for -pthread.
+ 
+ 2004-12-21  James A. Morrison  <phython@gcc.gnu.org>
+ 
+ 	PR c/18963
+ 	* c-decl.c (pushdecl): Remove block trying to merge static function
+ 	declarations at block scope to file scope declarations.
+ 
+ 2004-12-21  James A. Morrison  <phython@gcc.gnu.org>
+ 
+ 	PR c/18596
+ 	* c-parse.in (initdcl): Don't process a declaration if start_decl fails.
+ 	(notype_initdcl):  Don't process a declaration if start_decl fails.
+ 	* c-decl.c (start_decl): Fail if grokdeclarator fails.
+ 	(grokdeclarator): Fail if a function definition has an invalid storage
+ 	class.
+ 	* c-typeck.c (start_init): Treat error_mark_node the same as 0.
+ 
+ 2004-12-21  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/i386/i386.c (x86_sse_split_regs): Rename from
+ 	x86_sse_partial_regs.
+ 	* config/i386/i386.h (x86_sse_split_regs): Likewise.
+ 	(TARGET_SSE_SPLIT_REGS): Rename from TARGET_SSE_PARTIAL_REGS.
+ 	* config/i386/i386.md (*): Update to match.  Remove two
+ 	floatsisf splitters that use it.
+ 
+ 	* config/i386/i386.h (x86_sse_partial_regs_for_cvtsd2ss): Remove.
+ 
+ 	* config/i386/i386.c (x86_sse_partial_regs_for_cvtsd2ss): Remove.
+ 	* config/i386/i386.h (TARGET_SSE_PARTIAL_REGS_FOR_CVTSD2SS): Remove.
+ 	* config/i386/i386.md (truncdfsf2_1_sse): Don't test it.
+ 	(truncdfsf2_2, truncdfsf2_sse_only): Likewise.
+ 	(truncdfsf2_1_sse_nooverlap, truncdfsf2_2_nooverlap): Remove.
+ 	(truncdfsf2_sse_only_nooverlap): Remove.
+ 
+ 	* config/i386/i386.h (TARGET_SSE_TYPELESS_LOAD0): Remove.
+ 
+ 2004-12-21  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* expr.c (emit_group_load_1): Return the source if the move
+ 	is a regular move between complex values.
+ 
+ 2004-12-20  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	PR middle-end/18683
+ 	* config/rs6000/rs6000.c (current_file_function_operand): Only check
+ 	current_function_decl's DECL_RTL if it has already been set.
+ 
+ 2004-12-20  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	PR middle-end/18683
+ 	* function.c (pop_function_context_from): Don't reset reg_renumber.
+ 
+ 2004-12-20  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR middle-end/18776
+ 	* expr.c (write_complex_part): Use a subreg if the original object
+ 	is a hard reg that spans an even number of regs or a MEM.
+ 	(read_complex_part): Likewise.
+ 
+ 2004-12-20  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* Makefile.in (install-common): Do not install the specs file
+ 	unless SPECS is defined.
+ 
+ 2004-12-20  Zdenek Dvorak  <dvorakz@suse.cz>
+ 
+ 	PR rtl-optimization/18942
+ 	* simplify-rtx.c (simplify_relational_operation_1): Simplify
+ 	x + cst1 == cst2 to x == cst2 - cst1.  Made static.
+ 
+ 2004-12-20  Matt Austern  <austern@apple.com>
+ 
+ 	PR c++/19044
+ 	* c-common.c (set_builtin_user_assembler_name): New.
+ 	* c-common.h (set_builtin_user_assembler_name): Declare.
+ 	* c-decl.c (finish_decl): Use set_builtin_user_assembler_name
+ 
+ 2004-12-20  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	PR tree-optimization/19080
+ 
+ 	Merge from tree-cleanup-branch
+ 
+ 	* tree-flow-inline.h (clear_call_clobbered): New function.
+ 	* tree-ssa-alias.c (init_alias_info): Call it.
+ 
+ 2004-12-20  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/i386/i386.md (sse2_movsd): Remove ix86_binary_operator_ok
+ 	check.
+ 
+ 2004-12-20  Steven Bosscher  <stevenb@suse.de>
+ 	    Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR middle-end/18191
+ 	PR middle-end/18965
+ 	PR middle-end/18999
+ 	* expr.c (categorize_ctor_elements_1): Count the total number
+ 	of elements in the constructor.
+ 	(categorize_ctor_elements): Return it in a new argument.
+ 	* tree.h (categorize_ctor_elements): Adjust prototype.
+ 	* gimplify.c (gimplify_init_ctor_eval_range): New.
+ 	(gimplify_init_ctor_eval): Gimplify RANGE_EXPR.
+ 	(gimplify_init_constructor): Block clear the object if the
+ 	constructor has fewer elements than the object type.  Only try
+ 	to add assignments to individual elements when we have to.
+ 
+ 2004-12-20  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/i386/i386.c (ix86_init_mmx_sse_builtins): Use
+ 	long_long_integer_type_node in building V2DI_type_node.
+ 
+ 	* config/i386/emmintrin.h: Use __vector_size__ instead of vector_size.
+ 	* config/i386/mmintrin.h, config/i386/xmmintrin.h: Likewise.
+ 
+ 2004-12-20  Ben Elliston  <bje@au.ibm.com>
+ 
+ 	* doc/md.texi (Expander Definitions): Use @emph instead of @strong
+ 	around Note: text to workaround a limitation of the Info format.
+ 	* doc/cpp.texi (Invocation): Likewise.
+ 	* doc/cppopts.texi: Likewise.
+ 
+ 2004-12-19  Dale Johannesen  <dalej@apple.com>
+ 
+ 	* tree-ssa-loop-ivopts.c (contains_abnormal_ssa_name_p):  Don't
+ 	reference operand 1 of ADDR_EXPRs.
+ 
+ 2004-12-19  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* defaults.h (ASM_OUTPUT_INTERNAL_LABEL): New macro.
+ 	* output.h (assemble_name_raw): Declare it.
+ 	* system.h (ASM_OUTPUT_INTERNAL_LABEL): Do not poison it.
+ 	* varasm.c (assemble_name_raw): New function.
+ 	(assemble_name): Use it.
+ 	(default_internal_label): Likewise.
+ 	* config/darwin.c (darwin_asm_output_dwarf_delta): Likewise.
+ 	* doc/tm.texi (ASM_OUTPUT_INTERNAL_LABEL): Document.
+ 
+ 2004-12-19  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR 18067
+ 	* stor-layout.c (variable_size): Force creation of a SAVE_EXPR.
+ 
+ 2003-12-19  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* config/i386/i386.c (ix86_split_to_parts): Use an array with
+ 	four elements for decoding a CONST_DOUBLE on 64 bits targets.
+ 
+ 2004-12-19  Bernardo Innocenti  <bernie@develer.com>
+ 
+ 	* config/m68k/m68kemb.h (TARGET_OS_CPP_BUILTINS): Remove redundant
+ 	definition of mc68000, already present in TARGET_CPU_CPP_BUILTINS.
+ 
+ 2004-12-18  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* lambda-code.c (can_convert_to_perfect_nest): Make checking
+ 	match up with what perfect_nestify can actually handle.
+ 	(perfect_nestify): Don't return false in the phi node loop.
+ 
+ 2004-12-18  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/i386/i386.md (SSEINT16): New.
+ 	(movv16qi, movv8hi, movv4si, movv2di): Compress via macros.
+ 	(movv16qi_internal, movv8hi_internal, movv4si_internal,
+ 	movv2di_internal): Compress via macros.  Add SSE zero alternative.
+ 	Fix pure SSE alternatives to use 'x' instead of 'Y'.
+ 	(MMXINT8): New.
+ 	(movv8qi, movv4hi, movv2si, movv8qi_internal, movv4hi_internal,
+ 	movv2si_internal): Compress via macros.
+ 	(SSEPUSH, MMXPUSH): New.
+ 	(pushv18qi, pushv8hi, pushv4si, pushv2di, pushti, pushv4sf, pushv2df,
+ 	pushv8qi, pushv4hi, pushv2si, pushv2sf): Compress via macros.
+ 
+ 2004-12-18  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR middle-end/16417
+ 	* c-decl.c (store_parm_decls): Clarify get_pending_sizes insertion
+ 	comment.
+ 	* c-objc-common.c (c_cannot_inline_tree_fn): Remove pending sizes
+ 	checks.
+ 	* c-tree.h (struct lang_decl): Remove pending_sizes.
+ 	* function.c: Include tree-gimple.h
+ 	(assign_parm_setup_reg): Remove callee-copies code.
+ 	(gimplify_parm_type, gimplify_parameters): New functions.
+ 	(expand_pending_sizes): Remove.
+ 	(expand_function_start): Don't call it.
+ 	* gimplify.c (gimplify_expr): Examine DECL_VALUE_EXPR for PARM_DECL.
+ 	(gimplify_body): Add do_parms argument.  Use gimplify_parameters.
+ 	(gimplify_function_tree): Setup cfun.  Update gimplify_body call.
+ 	* tree-gimple.h (gimplify_body): Update decl.
+ 	* tree-inline.c (initialize_inlined_parameters): Update gimplify_body
+ 	call.
+ 	* tree.h (gimplify_parameters): Declare.
+ 	* Makefile.in (function.o): Depend on TREE_GIMPLE_H.
+ 
+ 2004-12-18  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-decl.c (finish_struct): Add DECL_EXPR for variable sized
+ 	structures seen inside functions.
+ 
+ 2004-12-18  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-decl.c (grokdeclarator): Save variable array size before
+ 	subtracting 1, rather than after.
+ 
+ 2004-12-18  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR middle-end/15486
+ 	* varasm.c (asm_emit_uninitialised): Return early if
+ 	a custom section is requested.
+ 	(assemble_variable): Revert 2002-03-15 patch.
+ 
+ 2004-12-18  Richard Henderson  <rth@redhat.com>
+ 
+ 	* stor-layout.c (layout_decl): Use unshare_expr, not unsave_expr.
+ 
+ 2004-12-18  Zdenek Dvorak  <dvorakz@suse.cz>
+ 
+ 	PR tree-optimization/18800
+ 	* params.def (PARAM_IV_ALWAYS_PRUNE_CAND_SET_BOUND): New parameter.
+ 	* tree-ssa-loop-ivopts.c (struct iv_ca): Add n_cands field.
+ 	(ALWAYS_PRUNE_CAND_SET_BOUND): New macro.
+ 	(iv_ca_set_no_cp, iv_ca_set_cp, iv_ca_new): Update n_cands field.
+ 	(iv_ca_delta_join, iv_ca_delta_reverse, iv_ca_n_cands, iv_ca_prune):
+ 	New functions.
+ 	(iv_ca_extend): Return number of candidates in the set.
+ 	(try_add_cand_for): Add argument to iv_ca_extend calls.
+ 	(try_improve_iv_set): Use iv_ca_prune.
+ 	* doc/invoke.texi (iv-always-prune-cand-set-bound): Document.
+ 
+ 2004-12-18  Zdenek Dvorak  <dvorakz@suse.cz>
+ 
+ 	PR rtl-optimization/19001
+ 	* loop-iv.c (iv_number_of_iterations): Record assumptions for loops
+ 	with power of two step to 'infinite' field.
+ 
+ 2004-12-18  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* Makefile.in (stor-layout.o): Depend upon gt-stor-layout.h.
+ 	(tree-ssa-propagate.o): Depend upon gt-tree-ssa-propagate.h.
+ 	(tree-ssa-operands.o): Depend upon gt-tree-ssa-operands.h.
+ 	(tree-mudflap.o): Depend upon gt-tree-mudflap.h.
+ 	(expr.o): Depend upon gt-expr.h.
+ 	(regclass.o): Depend upon gt-regclass.h.
+ 	(bitmap.o): Depend upon gt-bitmap.h.
+ 	(lists.o): Depend upon gt-lists.h.
+ 
+ 	(cfgexpand.o): Don't depend upon gt-tree-cfg.h.
+ 
+ 	(GTFILES): Remove fold-const.c.
+ 	(gt-stmt.h, gt-fold-const.h, gt-input.h, gt-tree-ssa-ccp.h):
+ 	Remove rules.
+ 
+ 2004-12-18  Richard Henderson  <rth@redhat.com>
+ 
+ 	* stor-layout.c (layout_decl): Unshare size expressions copied
+ 	from the type.
+ 
+ 	* fold-const.c (multiple_of_p): Handle BIT_AND_EXPR when
+ 	BOTTOM is a power of two.
+ 
+ 2004-12-18  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-nested.c (save_tmp_var): New.
+ 	(struct walk_stmt_info): Add is_lhs.
+ 	(walk_stmts) <MODIFY_EXPR>: Be more accurate with setting of
+ 	val_only; set is_lhs.
+ 	(convert_nonlocal_reference): Use save_tmp_var when is_lhs;
+ 	clear is_lhs when appropriate.
+ 	(convert_local_reference): Likewise.
+ 
+ 2004-12-18  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* arm/ieee754-sf.S (floatdisf): Fix label definition in FPA
+ 	compatibility code.
+ 
+ 2004-12-18  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* ifcvt.c (total_bb_rtx_cost): Rename function to cheap_bb_rtx_cost_p.
+ 	Take a max_cost argument to avoid scanning large blocks, by returning
+ 	a Boolean instead of a total.  Include the cost of a "fstp %st(0)"
+ 	instruction required to pop dead values off of a register stack.
+ 
+ 2004-12-18  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	PR middle-end/18548
+ 	* expr.c (expand_expr_real_1) <MAX_EXPR>: Ensure that target, op0
+ 	and op1 are all registers (or constants) before expanding the RTL
+ 	comparison sequence [to avoid reg_overlap_mentioned (target, op1)].
+ 
+ 2004-12-18  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR rtl-optimization/16968
+ 	* loop.c (scan_loop): Stop scanning the loop for movable
+ 	insns as soon as an optimization barrier is encountered.
+ 
+ 2004-12-17  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	PR 18897
+ 	* toplev.c (compile_file): Call process_pending_assemble_externals
+ 	just before targetm.asm_out.file_end.
+ 
+ 2004-12-17  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	tree-optimization/18501
+ 	* tree-optimize.c (init_tree_optimization_passes): Run
+ 	pass_late_warn_uninitialized before the last DCE run.
+ 
+ 2004-12-17  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/i386/i386.c (x86_64_reg_class_name): Re-indent.
+ 	(classify_argument, examine_argument, construct_container,
+ 	merge_classes): Remove prototypes.
+ 	(type_natural_mode): Split out from ...
+ 	(function_arg): ... here.
+ 	(gen_reg_or_parallel): Remove alt_mode argument.  Update callers.
+ 	Use orig_mode unless it's BLKmode.
+ 	(construct_container): Add orig_mode argument.  Update callers.
+ 	Use gen_reg_or_parallel for SSE registers.
+ 	(ix86_function_value): Use type_natural_mode.
+ 	(ix86_gimplify_va_arg): Likewise.
+ 	(ix86_hard_regno_mode_ok): Always accept all SSE, MMX, 3DNOW modes in
+ 	SSE registers; always accept all MMX, 3DNOW modes in MMX registers.
+ 	* config/i386/i386.h (VALID_SSE2_REG_MODE): Don't include
+ 	VALID_MMX_REG_MODE.
+ 	* config/i386/i386.md (attribute mode): Add V1DF.
+ 	(movsi_1): Use 'x' instead of 'Y' constraints.
+ 	(movsi_1_nointernunit, movdi_2, movdi_1_rex64): Likewise.
+ 	(movdi_1_rex64_nointerunit): Likewise.
+ 	(movdf_nointeger, movdf_integer): Likewise.  Handle SSE1.
+ 	(movsf_1, movsf_1_nointerunit): Line up constraint alternatives.
+ 	(swapsf): Use fp_register_operand, don't disable for TARGET_SSE.
+ 	(swapdf): Likewise.
+ 	(swapxf): Enable only for TARGET_80387.
+ 	(movv2sf, movv2sf_internal, pushv2sf): Enable for MMX.
+ 	(movtf): Remove double-check for TARGET_64BIT.
+ 	(movv2df_internal): Enable for SSE1.
+ 	(movv8hi_internal, movv16qi_internal): Likewise.
+ 	(movv2df, movv8hi, movv16qi): Likewise.
+ 	(pushv2di, pushv8hi, pushv16qi, pushv4si): Likewise.
+ 	(pushdi2_rex64, movv4sf_internal, movv4si_internal, movv2di_internal,
+ 	movv8qi_internal, movv4hi_internal, movv2sf_internal,
+ 	movv2df_internal, movv8hi_internal, movv16qi_internal,
+ 	movti_internal): Add leading '*' to name.
+ 
+ 2004-12-17  Dale Johannesen  <dalej@apple.com>
+ 
+ 	* c-decl.c (diagnose_mismatched_decls):  Accept mismatched
+ 	function types: void with previous implicit int.
+ 
+ 2004-12-17  Andreas Krebbel  <krebbel1@de.ibm.com>
+ 
+ 	* config/s390/s390.c (s390_gimplify_va_arg): Set alias set to
+ 	s390_sr_alias_set.
+ 
+ 2004-12-17  Jan Beulich  <jbeulich@novell.com>
+ 
+ 	PR target/17603
+ 	* config/i386/i386.c (enum x86_64_reg_class): Define
+ 	X86_64_COMPLEX_X87_CLASS.
+ 	(x86_64_reg_class_names): Add name for X86_64_COMPLEX_X87_CLASS.
+ 	(merge_classes): Handle X86_64_COMPLEX_X87_CLASS.
+ 	(classify_argument): XCmode is X86_64_COMPLEX_X87_CLASS.
+ 	(examine_argument): X86_64_COMPLEX_X87_CLASS requires two
+ 	registers when dealing with a return value.
+ 	(construct_container): Handle X86_64_COMPLEX_X87_CLASS.
+ 	Eliminate impossible case of two X87/X87UP pairs (this now is
+ 	being expressed by a single COMPLEX_X87).
+ 	(x86_libcall_value): XCmode gets returned in st0/st1.
+ 
+ 2004-12-17  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* tree.c (type_contains_placeholder_1): Always return false
+ 	for VECTOR_TYPE if its TREE_TYPE does not contain a placeholder.
+ 
+ 2004-12-17  Uros Bizjak  <uros@kss-loka.si>
+ 
+ 	* config/i386/i386.md (extendsfdf2, *extendsfdf2_1,
+ 	*extendsfdf2_1_sse_only): Unify enable constraint with
+ 	respect to TARGET_SSE2, TARGET_80387, TARGET_SSE_MATH
+ 	and TARGET_MIX_SSE_I387.
+ 	(*extendsfdf2_i387): New insn pattern.
+ 	(*extendsfdf2_1): Rename to *extendsfdf2_mixed. Fix
+ 	register constraint for operand 0.
+ 	(*extendsfdf2_1_sse_only): Rename to *extendsfdf2_sse.
+ 	(*extend{s,d}fxf2_1): Rename to *extend{s,d}fxf2_i387.
+ 
+ 2004-12-16  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR target/19041
+ 	* config/darwin.c (machopic_symbol_defined_p): Return false
+ 	if the binds local and is a common symbol.
+ 
+ 2004-12-16  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/i386/i386.md (extv, extzv, insv): Revalidate the
+ 	operand with ext_register_operand.
+ 
+ 2004-12-16  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* global.c: Fix a comment typo.
+ 
+ 2004-12-16  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 	    Roger Sayle  <roger@eyesopen.com>
+ 
+ 	PR tree-optimization/18707
+ 	* cfgloopmanip.c (create_preheader): Move the preheader
+ 	only if the latch was falling through to the header.
+ 
+ 2004-12-16  Danny Smith  <dannysmith@users.sourceforge.net>
+ 
+ 	PR target/18997
+ 	* config/i386/cygwin.h (GTHREAD_USE_WEAK): Define to 0.
+ 
+ 2004-12-16  Richard Henderson  <rth@redhat.com>
+ 	    Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* simplify-rtx.c (simplify_replace_rtx): Do not blindly replace
+ 	hard registers.
+ 
+ 2004-12-16  H.J. Lu  <hongjiu.lu@intel.com>
+ 
+ 	PR other/18508
+ 	* config/alpha/t-osf4 (SHLIB_LINK): Use `.backup' as the suffix
+ 	to back up the existing shared library.
+ 	* config/arm/t-netbsd (SHLIB_LINK): Likewise.
+ 	* config/mips/t-slibgcc-irix (SHLIB_LINK): Likewise.
+ 	* config/pa/t-hpux-shlib (SHLIB_LINK): Likewise.
+ 	* config/sh/t-linux (SHLIB_LINK): Likewise.
+ 	* config/t-libunwind-elf (SHLIBUNWIND_LINK): Likewise.
+ 	* config/t-slibgcc-darwin (SHLIB_LINK): Likewise.
+ 	* config/t-slibgcc-elf-ver (SHLIB_LINK): Likewise.
+ 	* config/t-slibgcc-sld (SHLIB_LINK): Likewise.
+ 
+ 	* config/i386/t-nwld (SHLIB_LINK): Don't use the temporary
+ 	file.
+ 
+ 2004-12-16  Richard Henderson  <rth@redhat.com>
+ 
+ 	* Makefile.in (MD_DEPS, s-mddeps): New.
+ 	(s-config, s-conditions, s-flags, s-codes, s-constants, s-emit,
+ 	s-recog, s-opinit, s-extract, s-peep, s-attr, s-attrtab, s-output,
+ 	s-preds): Depend on MD_DEPS instead of md_file.
+ 	(genobjnames): Add genmddeps.o
+ 	(build/genmddeps, build/genmddeps.o): New.
+ 	(mostlyclean): Remove mddeps.mk.
+ 	* genmddeps.c: New file.
+ 	* gensupport.c (include_callback): New.
+ 	(process_include): Call it.
+ 	* gensupport.h (include_callback): Declare.
+ 
+ 2004-12-16  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* local-alloc.c (block_alloc): Replace IN_RANGE with simple
+ 	comparison.
+ 
+ 	* doc/c-tree.texi (CONSTRUCTOR): Mention RANGE_EXPRs.
+ 
+ 2004-12-16  Mark Dettinger  <dettinge@de.ibm.com>
+ 
+ 	* config/s390/s390.c (struct processor_costs): Two new fields:
+ 	madbr, maebr.
+ 	(s390_rtx_costs): Added handling of multipy and add in SFmode.
+ 	More precise values for cost of multiply and add.
+ 
+ 2004-12-15  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR target/19028
+ 	* config/i386/i386.md (sse compare splitter): Test for SF and DFmode
+ 	explicitly instead of using VALID_SSE_REG_MODE.
+ 
+ 2004-12-15  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR target/19005
+ 	* config/i386/i386.md (swaphi_1): Swap with swaphi_2, allow with
+ 	optimize_size.
+ 	(swapqi_1): Rename from swapqi.  Enable only for no partial reg
+ 	stall and optimize_size.
+ 	(swapqi_2): New.
+ 	(swaphi_1, swaphi_2, swapqi_1): Add athlon_decode.
+ 	(swapsi, swaphi_1, swaphi_2, swapqi_1, swapdi): Remove modrm override.
+ 
+ 2004-12-16  Uros Bizjak  <uros@kss-loka.si>
+ 
+ 	* config/i386/i386.md (*floathisf2_i387, *floathidf2_i387):
+ 	Also enable for TARGET_MIX_SSE_I387.
+ 
+ 2004-12-16  Uros Bizjak  <uros@kss-loka.si>
+ 
+ 	* config/i386/i386.md (sqrt{s,d}f2_1, sqrt{s,d}f2_1_sse_only,
+ 	sqrt{s,d}f2_i387): Unify enable constraint with respect to
+ 	TARGET_SSE, TARGET_SSE2, TARGET_USE_FANCY_MATH_387,
+ 	TARGET_SSE_MATH and TARGET_MIX_SSE_I387.
+ 	(sqrt{s,d}f2_1): Rename to *sqrt{s,d}f2_mixed.
+ 	(sqrt{s,d}f2_1_sse_only): Rename to *sqrt{s,d}f2_sse.
+ 	(sqrt{s,d}f2_i387): Rename to *sqrt{s,d}f2_i387.
+ 	(*sqrtextendsfdf2): Also enable for TARGET_MIX_SSE_I387.
+ 	(*sqrtextend?f?f2): Rename to *sqrtextendsfdf2_i387.
+ 
+ 2004-12-16  Uros Bizjak  <uros@kss-loka.si>
+ 
+ 	* config/i386/i386.md (*fop_?f_comm_{,sse,nosse},
+ 	*fop_?f_1_{,sse,nosse}, *fop_{d,x}f_{2,3,4,5,6}): Unify enable
+ 	constraint with respect to TARGET_80387, TARGET_SSE, TARGET_SSE2,
+ 	TARGET_SSE_MATH and TARGET_MIX_SSE_I387.
+ 	(*fop_?f_{comm,1}): Rename to *fop_?f_{comm,1}_mixed.
+ 	(*fop_?f_{comm,1}_nosse): Rename to *fop_?f_{comm,1}_i387.
+ 	(*fop_{d,x}f_{2,3,4,5,6}): Rename to *fop_{d,x}f_{2,3,4,5,6}_i387.
+ 
+ 2004-12-15  H.J. Lu  <hongjiu.lu@intel.com>
+ 
+ 	PR target/18153
+ 	* configure.ac: Define HAVE_LD_STATIC_DYNAMIC if linker supports
+ 	-Bstatic/-Bdynamic option.
+ 	* config.in: Regenerated.
+ 	* configure: Likewise.
+ 
+ 	* gcc.c (init_spec): Pass -Bstatic/-Bdynamic to ld for static
+ 	-lunwind if possible.
+ 
+ 2004-12-15  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* cfgloop.c (flow_loops_dump): Don't print out levels.
+ 	(flow_loops_find): Don't set loop->levels.
+ 	(flow_loops_level_compute): Make void.
+ 	* cfgloop.h (struct loops): Remove levels member.
+ 	Add comment about loops in parray possibly being NULL.
+ 
+ 2004-12-15  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	* reload.c (SMALL_REGISTER_CLASS_P): New.
+ 	(push_secondary_reload, find_reusable_reload, find_reloads): Use
+ 	it instead of testing only the class size.
+ 
+ 2004-12-15  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR c++/17972
+ 	* tree-inline.c (expand_call_inline): Set TREE_SIDE_EFFECTS
+ 	on the STMT_EXPR wrapping up the inlined body.
+ 
+ 2004-12-15  Vladimir Makarov  <vmakarov@redhat.com>
+ 	    Steven Bosscher  <stevenb@suse.de>
+ 	PR middle end/17340
+ 
+ 	* global.c: Update comments in a few places.
+ 	(check_earlyclobber): Return true if there are early clobber
+ 	classes.
+ 	(calculate_local_reg_bb_info): Do not try to mark earlyclobber
+ 	regs if there are none.
+ 	(bb_info, allocate_bb_info, free_bb_info, modify_reg_pav,
+ 	make_accurate_live_analysis): Rename pavin, pavout to live_pavin,
+ 	live_pavout.
+ 	(modify_bb_reg_pav): Remove.
+ 	(calculate_reg_pav): Use code from modify_bb_reg_pav.
+ 	(temp_bitmap): New variable.
+ 	(calculate_reg_pav): Allocate/deallocate temp_bitmap.
+ 
+ 2004-12-15  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR target/19010
+ 	* config/i386/i386.c (ix86_must_pass_in_stack): Don't return true
+ 	for TImode vectors.
+ 	(gen_reg_or_parallel): New.
+ 	(function_arg): Use it.
+ 	(ix86_hard_regno_mode_ok): Test SSE1 and SSE2 separately,
+ 	MMX and 3DNOW separately.
+ 	(ix86_rtx_costs): Simplify FLOAT_EXTEND case.
+ 	(ix86_vector_mode_supported_p): Test SSE1 and SSE2 separately.
+ 	* config/i386/i386.h (VALID_SSE2_REG_MODE): Move SSE2 cases from ...
+ 	(VALID_SSE_REG_MODE): ... here.
+ 
+ 2004-12-15  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* xcoffout.c (xcoffout_declare_function): Change strncpy to memcpy.
+ 
+ 2004-12-15  Ian Lance Taylor  <ian@wasabisystems.com>
+ 
+ 	* config/arm/arm.c (arm_xscale_rtx_costs): Increase cost of
+ 	COMPARE of MULT.
+ 	* config/arm/arm.md (mulsi3_compare0): Don't check
+ 	arm_arch_xscale.
+ 	(mulsi_compare0_scratch, mulsi3_addsi_compare0): Likewise.
+ 	(mulsi3addsi_compare0_scratch): Likewise.
+ 
+ 2004-12-15  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR other/18665
+ 	* libgcc-std.ver (GCC_3.4.4): Inherit from GCC_3.4.2.
+ 	Export __absvti2, __addvti3, __mulvti3, __negvti2 and __subvti3.
+ 	* libgcc2.c (__addvsi3): Rename to __addvSI3.
+ 	New version if COMPAT_SIMODE_TRAPPING_ARITHMETIC.
+ 	(__addvdi3): Rename to __addvDI3.
+ 	(__subvsi3): Rename to __subvSI3.  Use word type for the result.
+ 	New version if COMPAT_SIMODE_TRAPPING_ARITHMETIC.
+ 	(__subvdi3): Rename to __subvDI3.
+ 	(_mulvsi3): Rename to _mulvSI3.
+ 	New version if COMPAT_SIMODE_TRAPPING_ARITHMETIC.
+ 	(_mulvdi3): Rename to _mulvDI3.
+ 	(__negvsi2): Rename to __negvSI2.
+ 	New version if COMPAT_SIMODE_TRAPPING_ARITHMETIC.
+ 	(__negvdi2): Rename to __negvDI2.
+ 	(__absvsi2): Rename to __absvSI2.
+ 	New version if COMPAT_SIMODE_TRAPPING_ARITHMETIC.
+ 	(__absvdi2): Rename to __absvDI2.
+ 	* libgcc2.h (64-bit targets): Define COMPAT_SIMODE_TRAPPING_ARITHMETIC.
+ 	(__absvSI2, __addvSI3, __subvSI3, __mulvSI3, __negvSI2, __absvDI2,
+ 	__addvDI3, __subvDI3, __mulvDI3, __negvDI2): Define to the appropriate
+ 	symbol and declare.
+ 	(__absvsi2, __addvsi3, __subvsi3, __mulvsi3, __negvsi2): Declare if
+ 	COMPAT_SIMODE_TRAPPING_ARITHMETIC.
+ 
+ 2004-12-15  Kazuhiro Inaoka <inaoka.kazuhiro@reneasas.com>
+ 
+ 	* config/m32r/m32r.h (PREFERRED_DEBUGGING_TYPE):
+ 	Use DWARF2_DEBUG.
+ 
+ 	* config/m32r.c (m32r_legitimize_pic_address): Changed
+ 	to support GOTOFF relocation.
+ 	* config/m32r.md (UNSPEC_GOTOFF): New.
+ 	(gotoff_load_addr): New.
+ 
+ 2004-12-15  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.c (mips_arg_info): Use FUNCTION_ARG_BOUNDARY to
+ 	decide whether an argument is double-word aligned.
+ 
+ 2004-12-15  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/i386/i386.md: Fix missing modes on cmove splitters.
+ 
+ 2004-12-15 Jan Beulich  <jbeulich@novell.com>
+ 
+ 	* mklibgcc.in (libgcc2_c_dep): Add dependency on libgcc2.h.
+ 
+ 2004-12-15  Uros Bizjak  <uros@kss-loka.si>
+ 
+ 	* config/i386/i386.md (floathisf2, *floathisf2_1, floatsisf2,
+ 	*floatsisf2_i387, *floatsisf2_sse, floatdisf2,
+ 	*floatdisf2_i387_only, *floatdisf2_i387, *floatdisf2_sse,
+ 	floathidf2, *floathidf2_1, *floatsidf2_i387, *floatsidf2_sse,
+ 	floatdidf2, *floatdidf2_i387_only, *floatdidf2_i387,
+ 	*floatdidf2_sse, floatunssisf2, floatunsdisf2, floatunsdidf2):
+ 	Unify enable constraint with respect to TARGET_80387, TARGET_SSE,
+ 	TARGET_SSE2, TARGET_64BIT, TARGET_SSE_MATH and TARGET_MIX_SSE_I387.
+ 	(*float?i?f_i387): Rename to *float?i?f2_mixed.
+ 	(*float?i?f2_1): Rename to *float?i?f2_i387.
+ 	(*float?i?f2_i387_only): Rename to *float?i?f2_i387.
+ 	(float?ixf2): Penalize integer register operand.
+ 
+ 2004-12-14  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	PR c++/17242
+ 	* configure.ac: Add GAS check for HP-UX .nsubspa comdat.
+ 	* configure, config.in: Rebuilt.
+ 	* config/pa/pa-hpux10.h (SUPPORTS_ONE_ONLY, MAKE_DECL_ONE_ONLY): Delete
+ 	defines.
+ 	* config/pa/pa.c (pa_select_section): Allow uninitialized variables in
+ 	one-only (comdat) subspaces.
+ 	* config/pa/som.h (SUPPORTS_SOM_COMDAT): New define.
+ 	(SUPPORTS_ONE_ONLY): True if SUPPORTS_WEAK or SUPPORTS_SOM_COMDAT are
+ 	true.
+ 	(MAKE_DECL_ONE_ONLY): Place uninitialized variables in common.
+ 
+ 2004-12-14  Ian Lance Taylor  <ian@wasabisystems.com>
+ 
+ 	* combine.c (combine_validate_cost): Consider cost of
+ 	undobuf.other_insn rather than always allowing the recombination
+ 	if it is set.
+ 
+ 2004-12-14  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	* pa-host.c (MAP_FAILED): Define if not defined.
+ 	(pa_gt_pch_use_address): Handle short reads.
+ 
+ 2004-12-14  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR target/17990
+ 	* config/i386/i386.c (x86_use_bt): New.
+ 	(ix86_expand_unary_operator): Use MEM_P.
+ 	(ix86_expand_fp_absneg_operator): New.
+ 	* config/i386/i386.h (x86_use_bt): Declare.
+ 	(TARGET_USE_BT): New.
+ 	* config/i386/i386-protos.h: Update.
+ 	* config/i386/i386.md (negsf2): Use ix86_expand_fp_absneg_operator.
+ 	(negdf2, negxf2, abssf2, absdf2, absxf2): Likewise.
+ 	(negsf2_memory, negsf2_ifs, negsf2_if, negdf2_memory, negdf2_ifs,
+ 	negdf2_ifs_rex64, negdf2_if, negdf2_if_rex64, negxf2_if,
+ 	abssf2_memory, abssf2_ifs, abssf2_if, absdf2_memory, absdf2_ifs,
+ 	absdf2_ifs_rex64, absdf2_if, absxf2_if): Remove.
+ 	(absnegsf2_mixed, absnegsf2_sse, absnegsf2_i387, absnegdf2_mixed,
+ 	absnegdf2_sse, absnegdf2_i387, absnegxf2_i387): New.  Merge all
+ 	neg and abs splitters.  Handle DFmode in general regs in 64-bit mode.
+ 	(negextendsfdf2, absextendsfdf2): Disable for non-mixed sse math.
+ 	(btsq, btrq, btcq): New.  Add peepholes as well.
+ 	(movv4sf_internal splitter): Postpone til after reload.
+ 	(movv2di_internal splitter): Likewise.
+ 	* config/i386/predicates.md (const_0_to_63_operand): New.
+ 	(absneg_operator): New.
+ 
+ 2004-12-14  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	* pa.h (REGNO_OK_FOR_INDEX_P, REGNO_OK_FOR_BASE_P, REGNO_OK_FOR_FP_P):
+ 	Check register number and that reg_renumber is nonzero before using it.
+ 
+ 2004-12-14  Steve Ellcey  <sje@cup.hp.com>
+ 
+ 	* doc/invoke.texi (IA-64 options): Add existing options that
+ 	weren't already listed.
+ 
+ 2004-12-14  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-outof-ssa.c (coalesce_abnormal_edges): Pass the correct target
+ 	partition to conflict_graph_merge_regs.
+ 
+ 2004-12-14  Uttam Pawar  <uttamp@us.ibm.com>
+ 	    Janis Johnson  <janis187@us.ibm.com>
+ 
+ 	* rs6000.c (rs6000_handle_altivec_attribute_tree): Report errors
+ 	for vector types with invalid component types.
+ 
+ 2004-12-14  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/18951
+ 	* builtins.c (expand_builtin_mathfn, expand_builtin_mathfn_2,
+ 	expand_builtin_mathfn_3): Avoid using arguments passed to
+ 	save_expr after that call.
+ 
+ 	* fold-const.c (fold_single_bit_test): If flag_syntax_only, pretend
+ 	LOAD_EXTEND_OP is not defined.
+ 	(fold): Likewise.  If flag_syntax_only, don't depend on BITS_PER_WORD.
+ 
+ 2004-12-14  Tobias Schlueter  <tobias.schlueter@physik.uni-muenchen.de>
+ 
+ 	* tree.def, doc/c-tree.texi: Correctly document restrictions on the
+ 	shift width.
+ 
+ 2004-12-14  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* expr.h (expand_modifier): Define EXPAND_STACK_PARM as 1.
+ 
+ 2004-12-14  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	PR target/18973
+ 	arm-cores.def (arm926ej-s, arm1026ej-s, arm1136j-s, arm1136-jfs)
+ 	(arm1176jz-s, arm1176jzf-s, mpcorenovfp, mpcore): Add load-scheduling
+ 	property to flags.
+ 
+ 2004-12-14  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-gimple.c (get_base_address): Update documentation.
+ 
+ 2004-12-13  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR middle-end/17930
+ 	* passes.c (rest_of_clean_state): Fix computation of
+ 	preferred_incoming_stack_boundary.
+ 
+ 2004-12-13  Wolfgang Bangerth <bangerth@dealii.org>
+ 
+ 	* reload.h: Remove struct needs and its only use.
+ 
+ 2004-12-13  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	PR rtl-optimization/18928
+ 	* simplify_rtx.c (plus_minus_operand_p): New function to encode
+ 	the test for suitable operands for calls to simplify_plus_minus.
+ 	Only allow (CONST (PLUS x y)) if both x and y are CONSTANT_P.
+ 	(simplify_binary_operation): Use plus_minus_operand_p.
+ 
+ 2004-12-13  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	PR tree-opt/16951
+ 	* tree-inline.c (setup_one_parameter): Don't directly map a
+ 	parameter to the address of another variable of the same
+ 	function.
+ 
+ 2004-13-12  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* basic-block.h (PROP_POSTRELOAD): Do not include PROP_AUTOINC, we
+ 	can never create autoinc insns after reload.
+ 
+ 2004-12-13  Jeff Law  <law@redhat.com>
+ 	    Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	PR tree-optimization/18694
+ 	* tree-ssa-dom.c (thread_across_edge): Do not thread jumps if a
+ 	PHI argument is set from a PHI_RESULT in the same block and the
+ 	PHI argument is not the same as the PHI result.
+ 
+ 2004-12-13  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* xcoffout.c (xcoffout_declare_function): Always strip storage
+ 	class encoding.
+ 
+ 2004-12-13  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR target/18964
+ 	* config/darwin.c (darwin_assemble_visibility): Fix minor diagnostic
+ 	problem, adding a space at the end of the string before concatenation.
+ 
+ 2004-12-13  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* c-common.c (fname_as_string): Free namep if we are returning
+ 	cstr.text.
+ 
+ 	* tree-ssa-dom.c (record_edge_info): Fix memory leak.
+ 
+ 2004-12-13  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* tree-cfg.c (remove_useless_stmts_cond): Call fold on COND_EXPR_COND.
+ 
+ 2004-12-13  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-ssa-dom.c (record_equivalences_from_phis): Speed up by
+ 	doing a pointer comparison.
+ 
+ 	* tree-ssa-dom.c (record_equivalences_from_phis): Add a
+ 	comment.
+ 
+ 	* defaults.h, stmt.c, tree-cfg.c, tree-ssa-dce.c: Fix comment
+ 	typos.
+ 
+ 2004-12-13  Kazuhiro Inaoka <inaoka.kazuhiro@renesas.com>
+ 
+ 	* config/m32r/t-linux (SHLIB_MAPFILES): Add libgcc-glibc.ver to
+ 	the list rather than replacing the existing value.
+ 
+ 2004-12-13  Richard Henderson  <rth@redhat.com>
+ 
+ 	* cfg.c (dump_flow_info): Don't dump pseudo info after reload.
+ 
+ 2004-12-13  Richard Henderson  <rth@redhat.com>
+ 
+ 	* Makefile.in (insn-preds.o): Depend on REGS_H.
+ 	* genpreds.c (write_insn_preds_c): Include regs.h.
+ 	* config/i386/predicates.md (index_register_operand): Use
+ 	REG_OK_FOR_INDEX_STRICT_P and REG_OK_FOR_INDEX_NONSTRICT_P.
+ 
+ 	* config/i386/i386.h (REG_CLASS_FROM_LETTER): Add 'l'.
+ 	* config/i386/i386.md (lea_general_1, lea_general_1_zext,
+ 	lea_general_2, lea_general_2_zext, lea_general_3, lea_general_3_zext,
+ 	adddi_1_rex64, addsi_1, addsi_1_zext, addhi_1_lea, addqi_1_lea,
+ 	ashldi3_1_rex64, ashlsi3_1, ashlsi3_1_zext, ashlhi3_1_lea,
+ 	ashlqi3_1_lea): Use 'l' for index register operand.
+ 	(ashldi3_1_rex64 splitter): Use index_register_operand.
+ 	(ashlsi3_1 splitter): Be more careful with modes.
+ 
+ 2004-12-13  Danny Smith  <dannysmith@users.sourceforge.net>
+ 
+ 	PR target/18459
+ 	* defaults.h (TARGET_USE_JCR_SECTION): New macro.
+ 	* doc/tm.texi (TARGET_USE_JCR_SECTION): Document it.
+ 	* config/i386/cygming.h (TARGET_USE_JCR_SECTION): Override
+ 	default.
+ 
+ 2004-12-13 Uros Bizjak <uros@kss-loka.si>
+ 
+ 	PR target/14941
+ 	PR target/18503
+ 	* config/i386/i386.md (sse_movss, sse2_movsd, sse2_movhpd):
+ 	Fix wrong vec_merge selector bitmask.
+ 
+ 2004-12-12  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR rtl-opt/17186
+ 	* reg-stack.c (move_nan_for_stack_reg): New.
+ 	(subst_stack_regs_pat): Use it.
+ 	(move_for_stack_reg): Handle source register not live with a nan.
+ 
+ 2004-12-12  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/i386/i386.c (ix86_gimplify_va_arg): Fix type mismatch
+ 	errors across operations.
+ 
+ 2004-12-12  Di-an Jan  <dianj@freeshell.org>
+ 
+ 	* doc/passes.texi (Pass Manager): Correct list of source files.
+ 
+ 2004-12-12  Richard Henderson  <rth@redhat.com>
+ 
+ 	* expr.c (emit_move_change_mode): New.
+ 	(emit_move_via_alt_mode): Use it.
+ 
+ 2004-12-12  Nathanael Nerode  <neroden@gcc.gnu.org>
+ 	    John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	PR middle-end/17564
+ 	* dojump.c (do_compare_and_jump): Only canonicalize function pointers
+ 	in a comparison if both sides are function pointers.
+ 
+ 2004-12-12  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR target/18932
+ 	* config/i386/i386.md (all splits and peepholes): Use flags_reg_operand
+ 	and compare_operator to propagate the input CC mode to the output.
+ 	* config/i386/predicates.md (compare_operator): New.
+ 
+ 2004-12-12  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR tree-opt/18040
+ 	* expr.c (get_inner_reference): Remove NON_LVALUE_EXPR, NOP_EXPR,
+ 	CONVERT_EXPR cases.
+ 	(handled_component_p): Likewise.
+ 
+ 2004-12-12  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* reg-stack.c (convert_regs_2): Free stack.
+ 
+ 	* tree-ssa-dom.c (thread_across_edge, dom_opt_finalize_block): Fix
+ 	comment typos.
+ 
+ 2004-12-12  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-loop-ch.c (copy_loop_headers): Loop can be null.
+ 	* tree-ssa-loop-im.c (determine_lsm): tree_root may not have a real
+ 	inner loop.
+ 
+ 2004-12-12  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-gimple.c (get_base_address): Update documentation.
+ 
+ 2004-12-12  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* lcm.c (optimize_mode_switching): Free ptr even when mode_set
+ 	is NULL_RTX.
+ 
+ 2004-12-12  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* reg-stack.c (change_stack): Avoid placing the new top-of-stack in
+ 	its correct location during popping if we need to permute the stack
+ 	afterwards.  Attempt to preserve the original stack ordering.
+ 
+ 2004-12-12  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* lcm.c (optimize_mode_switching): Free insert and delete in
+ 	the "for" loop.
+ 
+ 2004-12-11  David Edelsohn  <edelsohn@gnu.org>
+ 	    Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	PR target/18641
+ 	* config/rs6000/darwin.h (PREFERRED_RELOAD_CLASS): Reload all
+ 	constants into all register classes intersecting with FLOAT_REGS
+ 	via memory.
+ 	* config/rs6000/rs6000.h (PREFERRED_RELOAD_CLASS): Same.
+ 	* config/rs6000/rs6000.md (movdi_internal32): Ignore FPRs when
+ 	choosing register preferences.
+ 	(movdi_internal64): Same.
+ 
+ 2004-12-11  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-into-ssa.c (rewrite_ssa_into_ssa): Free SSA_NAME_AUX
+ 	before we release an SSA_NAME.
+ 
+ 2004-12-11  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	PR middle-end/18921
+ 	* fold-const.c (fold_unwidened_comparison): Use omit_one_operand
+ 	instead of constant_boolean_node as arg0 may have side-effects.
+ 
+ 2004-12-10  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	* pa-host.c (pa_gt_pch_use_address): Use lseek and read to copy PCH
+ 	file to anonymous private map.
+ 
+ 2004-12-10  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	PR target/18002
+ 	PR middle-end/18424
+ 	* dojump.c (do_jump): When attempting to reverse the effects of
+ 	fold_single_bit_test, we need to STRIP_NOPS and narrowing type
+ 	conversions, and handle BIT_XOR_EXPR that's used to invert the
+ 	sense of the single bit test.
+ 
+ 2004-12-10  Devang Patel  <dpatel@apple.com>
+ 
+ 	PR 18732
+ 	* gcc.c (main): Do not break out of loop when error is reported while
+ 	processing one source file.
+ 
+ 2004-12-10  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-into-ssa.c (REWRITE_THIS_STMT): Define.
+ 	(mark_def_sites): Clear REWRITE_THIS_STMT for statements that
+ 	don't need any operands rewritten.
+ 	(rewrite_stmt): Ignore statements that don't need to be
+ 	rewritten.
+ 	(rewrite_operand): Validate that an existing SSA_NAME is
+ 	identical to the current reaching definition of the operand.
+ 
+ 2004-12-10  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (mark_call_clobbered_vars_to_rename): New function.
+ 	* tree-vectorizer.c (vectorizable_load): Call it.
+ 	* tree-flow.h (mark_call_clobbered_vars_to_rename): Declare.
+ 	* tree-sra.c (mark_all_v_defs): Also mark VUSEs for renaming.
+ 
+ 2004-12-10  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* regmove.c (combine_stack_adjustments_for_block): Free
+ 	memlist if it hasn't been freed.
+ 
+ 2004-12-10  Ziemowit Laski  <zlaski@apple.com>
+ 
+ 	* c-typeck.c (lookup_field): Check if a TYPE_LANG_SPECIFIC
+ 	pointer field is set before dereferencing it.
+ 
+ 2004-12-10  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR middle-end/18903
+ 	* tree-cfg.c (remove_bb): Put the moved label at the beginning
+ 	of the basic block.
+ 
+ 2004-12-10  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-data-ref.c (free_data_refs): Free each data_reference
+ 	object.
+ 
+ 	* tree-ssa-dom.c (thread_across_edge): Speed up by avoiding a
+ 	call to is_gimple_min_invariant if we know the result.
+ 
+ 2004-12-10  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-alias.c (setup_pointers_and_addressables): Remove
+ 	redundant test of v_ann->mem_tag_kind.
+ 
+ 	* tree-ssa-operands.c (get_indirect_ref_operands): Remove
+ 	redundant conditional clearing opf_kill_def.
+ 
+ 2004-12-10  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/frv/frv-modes.def: Fix comment typos.
+ 	(CC_NZ): Define new mode.
+ 	* config/frv/frv-protos.h (frv_select_cc_mode): Declare.
+ 	(condexec_intop_cmp_operator): Delete.
+ 	* config/frv/frv.c (comparison_string): New function.
+ 	(frv_print_operand): Use it to handle 'c' and 'C'.
+ 	(relational_operator): Redefine in terms of integer_relational_operator
+ 	and float_relational_operator.
+ 	(signed_relational_operator, unsigned_relational_operator): Delete.
+ 	(integer_relational_operator): New predicate, combining the above.
+ 	Check the mode of the first operand but leave frv.md to check the rest.
+ 	(float_relational_operator): Just check the mode of the first operand
+ 	and leave frv.md to check the rest.
+ 	(intop_compare_operator): Assume the result is compared with zero
+ 	in mode CC_NZmode.  Allow PLUS and MINUS.  Leave frv.md to check
+ 	the operand predicates.
+ 	(condexec_intop_cmp_operator): Delete.
+ 	(frv_ifcvt_modify_tests, frv_ifcvt_modify_multiple_tests)
+ 	(frv_hard_regno_mode_ok): Handle CC_NZmode.
+ 	(frv_select_cc_mode): New function.
+ 	* config/frv/frv.h (SELECT_CC_MODE): Use frv_select_cc_mode.
+ 	(REVERSIBLE_CC_MODE): Include CC_NZmode.
+ 	(PREDICATE_CODES): Replace entries for signed_relational_operand and
+ 	unsigned_relational_operator with one for integer_relational_operator.
+ 	Delete entry for condexec_intop_cmp_operator.
+ 	* config/frv/frv.md (movcc_nz, *internal_movcc_nz, reload_incc_nz)
+ 	(reload_outcc_nz, *cmpsi_cc_nz, *cond_exec_cmpsi_cc_nz): New patterns.
+ 	(*combo_intop_compare2, *combo_intop_compare4): Delete.
+ 	(*combo_intop_compare1): Change mode to CC_NZ.
+ 	(*combo_intop_compare2): Likewise.  Renamed from *combo_intop_compare3.
+ 	(branch_{un,}signed_true, branch_{un,}signed_false)
+ 	(*scc_{un,}signed, *scc_neg1_{un,}signed, *ck_{un,}signed)
+ 	(*movqicc_internal1_{un,}signed, *movqicc_internal2_{un,}signed)
+ 	(*movhicc_internal1_{un,}signed, *movhicc_internal2_{un,}signed)
+ 	(*movsicc_internal1_{un,}signed, *movsicc_internal2_{un,}signed)
+ 	(*movsfcc_has_fprs_{un,}signed, *movsfcc_no_fprs_{un,}signed)
+ 	(*return_{unsigned_,}true, *return_{unsigned_,}false): Merge these
+ 	pattern pairs.  Use integer_relational_operator.  Remove mode from
+ 	icc_operand.
+ 
+ 2004-12-10  Mark Dettinger  <dettinge@de.ibm.com>
+ 
+ 	* config/s390/s390.c (struct processor_costs): New fields ml,
+ 	sqdbr, sqebr.
+ 	(s390_rtx_costs): Added the missing handling of multiply & add,
+ 	square root, and umulsidi.
+ 
+ 2004-12-10  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* expmed.c (synth_mult): Initialize new_limit.latency before
+ 	making a recursive call.
+ 
+ 2004-12-10  Nick Clifton  <nickc@redhat.com>
+ 
+ 	* config/mn10300/mn10300.c (legitimate_address_p): Reject address
+ 	whose index is itself the sum of two other parts.
+ 
+ 2004-12-10  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* config/t-slibgcc-sld (SHLIB_LINK): Correct symlink.
+ 
+ 2004-12-10  Uros Bizjak  <uros@kss-loka.si>
+ 
+ 	* config/i386/i386.md (*cmpfp_sf): Change type attribute to "multi".
+ 
+ 2004-12-09  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR c/18282
+ 	* attribs.c (decl_attributes): Use relayout_decl.
+ 	* c-common.c (handle_mode_attribute): Copy all relevant type
+ 	parameters from the new underlying integral type.
+ 
+ 2004-12-09  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-common.c (shorten_compare): Don't special-case min/maxval
+ 	for C enumerations.
+ 
+ 2004-12-09  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* simplify-rtx.c (simplify_subreg): In the CONCAT case, check whether
+ 	the request subreg is entirely contained in the requested component.
+ 	(simplify_gen_subreg): Return null for CONCATs that are rejected
+ 	by simplify_subreg.
+ 	* expmed.c (store_bit_field): Create a temporary when changing the
+ 	value to an integer mode.
+ 
+ 2004-12-09  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* real.c (ibm_extended): Correct comment.
+ 
+ 2004-12-09  Stan Shebs  <shebs@apple.com>
+ 
+ 	* config/rs6000/darwin-asm.h: New file, 32/64-bit assembly macros
+ 	formerly in darwin-tramp.asm.
+ 	* config/rs6000/darwin-tramp.asm: Include darwin-asm.h.
+ 	* config/rs6000/darwin-fpsave.asm: Use 32/64-bit macros.
+ 	* config/rs6000/t-darwin: Add dependencies.
+ 
+ 2004-12-09  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR target/17025
+ 	* config/i386/i386.md (testqi_1_maybe_si, andqi_2_maybe_si): New.
+ 	(test_qi_1, andqi_2): Do not promote to simode.
+ 
+ 2004-12-09  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR tree-opt/18904
+ 	* tree-chrec.c (chrec_convert): Use fold_convert
+ 	instead of convert.
+ 
+ 2004-12-09  Matt Rice  <ratmice@yahoo.com>
+ 
+ 	PR preprocessor/18102
+ 	* c-incpath.c (remove_duplicates): Check for construct
+ 	equality.
+ 
+ 2004-12-09  Dorit Naishlos  <dorit@il.ibm.com>
+ 
+ 	* genopinit.c (vec_realign_store_optab): Initialization removed.
+ 	* optabs.c (optab_for_tree_code): REALIGN_STORE_EXPR case removed.
+ 	* optabs.h (optab_index): OTI_vec_realign_store Removed.
+ 	(vec_realign_store_optab): Removed.
+ 	* target-def.h (TARGET_VECTORIZE_BUILTIN_MASK_FOR_STORE): Removed.
+ 	* target.h (builtin_mask_for_store): Removed.
+ 	* tree.def (REALIGN_STORE_EXPR): Removed.
+ 	* config/rs6000/rs6000.c (rs6000_builtin_mask_for_store): Removed.
+ 	(altivec_builtin_mask_for_store): Removed.
+ 	(altivec_init_builtins): Removed initialization of
+ 	altivec_builtin_mask_for_store.
+ 
+ 	* doc/tm.texi (TARGET_VECTORIZE_MISALIGNED_MEM_OK): New.
+ 	(TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD): New.
+ 
+ 2004-12-09  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* doc/c-tree.texi (CONSTRUCTOR): Mention RANGE_EXPRs.
+ 
+ 	* tree.def (SET_TYPE): Remove.
+ 	(CONSTRUCTOR): Update description.
+ 	* builtins.c (type_to_class) Remove SET_TYPE case.
+ 	* dbxout.c (dbxout_type): Likewise.
+ 	* dwarf2out.c (is_base_type): Likewise.
+ 	(gen_set_type_die): Remove.
+ 	(gen_type_die): Remove SET_TYPE case.
+ 	* expr.c (count_type_elements): Likewise.
+ 	(mostly_zeroes_p): Likewise.
+ 	(store_constructor): Likewise.
+ 	* print_tree.c (print_node): Likewise.
+ 	* stor-layout.c (layout_type): Likewise.
+ 	* tree-browser.c (browse_tree): Likewise.
+ 	* tree-inline.c (remap_type): Likewise.
+ 	* tree-pretty-print.c (dump_generic_node): Likewise.
+ 	* tree.c (type_contains_plaeholder_1, type_hash_eq,
+ 	variably_modified_type_p, initializer_zerop): Likewise.
+ 	* tree.h (SET_OR_ARRAY_CHECK): Remove.
+ 	(AGGREGATE_TYPE_P): Remove SET_TYPE check.
+ 	(TYPE_DOMAIN): Use ARRAY_TYPE_CHECK.
+ 	* typeclass.h (enum type_class): Remove set_type_class.
+ 	* varasm.c (const_hash_1): Remove SET_TYPE case.
+ 	(compare_constant, copy_constant, output_constant): Likewise.
+ 	* config/i386/i386.c (classify_argument): Likewise.
+ 	* config/ia64/ia64.c (hfa_element_mode): Likewise.
+ 	* config/sparc/sparc.c (sparc_type_code): Likewise.
+ 
+ 	PR c++/16681
+ 	* tree-inline.c (estimate_num_insns_1): Add RANGE_EXPR case.
+ 
+ 2004-12-08  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/i386/i386.md: Use FLAGS_REG everywhere.
+ 
+ 2004-12-08  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* config/mips/mips.c (mips_scalar_mode_supported_p): Rewrite
+ 	to avoid call to default function.
+ 
+ 2004-12-08  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	PR 17982
+ 	* varasm.c (pending_assemble_externals): New static.
+ 	(assemble_external_real): Meat of assemble_external split out
+ 	to this new function.
+ 	(process_pending_assemble_externals): New function.
+ 	(assemble_external): Use gcc_assert.  If flag_unit_at_a_time
+ 	is true and the basic test passes, merely cons the decl onto
+ 	the pending list to be handled later.
+ 	* tree.h: Declare process_pending_assemble_externals.
+ 	* cgraphunit.c (cgraph_optimize): Call it.
+ 
+ 	* config/h8300/h8300.h: Do not define ASM_OUTPUT_EXTERNAL.
+ 
+ 2004-12-08  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* cfgloopmanip.c (create_preheader): Speed up by "unrolling"
+ 	and simplifying FOR_EACH_EDGE.
+ 
+ 2004-12-08  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/frv/frv.c (frv_sort_insn_group): Always initialize
+ 	packet_group->nop.
+ 
+ 2004-12-08  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	PR c++/18672
+ 	* gimplify.c (canonicalize_addr_expr): Cope with array of
+ 	incomplete type.
+ 	(gimplify_conversion): Remove redundant checks.
+ 
+ 	* doc/trouble.texi (Non-bugs): Clarify empty loop removal.
+ 
+ 2004-12-08  Uros Bizjak  <uros@kss-loka.si>
+ 
+ 	* config/i386/i386.c (output_387_binary_op,
+ 	ix86_prepare_fp_compare_args): Fix is_sse condition.
+ 
+ 2004-12-07  Uros Bizjak  <uros@kss-loka.si>
+ 
+ 	* config/i386/i386-protos.h (ix86_split_fp_branch): New rtx
+ 	argument.
+ 
+ 	* config/i386/i386.c (output_fp_compare): Fix is_sse condition.
+ 	Use EFLAGS_P only when fcomi insn should be used. Fix handling
+ 	of eflags_p variable. Change alt table accordingly. For non-fcomi
+ 	compare insn always use trailing fnstsw insn. Fix intmode
+ 	calculation for ficom insn.
+ 	(ix86_split_fp_branch): Add "rtx pushed" as new parameter. Call
+ 	ix86_free_from_memory when "pushed" is specified.
+ 	(ix86_expand_branch): Change call to ix86_split_fp_branch.
+ 
+ 	* config/i386/i386.md (*cmpfp_0_sf, *cmpfp_0_df, *cmpfp_0_xf):
+ 	Change eflags_p parameter in call to output_fp_compare.
+ 	(*cmpfp_2_sf, *cmpfp_2_df, *cmpfp_2_xf): Remove.
+ 	(*cmpfp_2_sf_1, *cmpfp_2_df_1, *cmpfp_2_xf_1): Rename to
+ 	*cmpfp_2_sf, *cmpfp_2_df, *cmpfp_2_xf.	Change eflags_p
+ 	parameter in call to output_fp_compare.
+ 	(*cmpfp_2_u): Remove.
+ 	(*cmpfp_2_u_1): Rename to *cmpfp_2_u. Change eflags_p parameter
+ 	in call to output_fp_compare.
+ 	(*ficom_1): Remove insn definition and corresponding define_split.
+ 	(*cmpfp_si): New insn definition.
+ 	(*fp_jcc_8): New insn definition. Add new splitters for
+ 	"memory_operand" and "register_operand".
+ 	(define_split): Add new parameter in call to ix86_split_fp_branch.
+ 
+ 	config/i386/predicates.md (float_operator): New predicate.
+ 
+ 2004-12-08  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* c-common.c (verify_tree): Don't check code length if we know
+ 	we are handling tcc_unary.
+ 	* print_tree.c (print_node): Remove code to handle RTL
+ 	appearing as a part of a tree node.
+ 	* tree-gimple.c (recalculate_side_effects): Rename fro as len.
+ 	* tree.c (build1_stat): Don't check TREE_CODE_LENGTH.
+ 	(PROCESS_ARG): Don't refer to fro.
+ 	(build2_stat, build3_stat, build4_stat): Don't compute fro.
+ 
+ 2004-12-07  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	PR middle-end/18293
+ 	* expmed.c (EXACT_POWER_OF_2_OR_ZERO_P): Move definition earlier.
+ 	(expand_mult): Special case powers of two to avoid synth_mult.
+ 	* loop.c (product_cheap_p): Handle case where expand_mult does
+ 	require/generate any instructions (i.e. multiplication by zero).
+ 
+ 2004-12-07  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-pretty-print.c (dump_array_domain): Split out from
+ 	dump_generic_node; fix off-by-one error on zero-based array bounds.
+ 	(dump_generic_node): Use it.
+ 	(print_declaration): Likewise.
+ 
+ 2004-12-08  Richard Guenther <richard.guenther@uni-tuebingen.de>
+ 
+ 	* doc/invoke.texi: Adjust default values for
+ 	large-function-growth and inline-unit-growth to match
+ 	params.def.  Clarify used algorithm.
+ 
+ 2004-12-07  David Mosberger  <davidm@hpl.hp.com>
+ 
+ 	PR target/18443
+ 	* config/ia64/ia64.c (ia64_assemble_integer): Add support for
+ 	emitting unaligned pointer-sized integers.
+ 
+ 2004-12-07  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	PR c/18867
+ 	* c-typeck.c (c_start_case): Set orig_type to error_mark_node
+ 	when the type of the controlling expression is not a valid type.
+ 
+ 2004-12-07  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	PR tree-optimization/17340
+ 	* tree-ssa-pre.c (compute_antic): Fix comment.
+ 	(compute_avail): Do not recurse, instead do a DFS using a stack
+ 	and a loop.
+ 	(execute_pre): Adjust.
+ 
+ 2004-12-07  Ziemowit Laski  <zlaski@apple.com>
+ 
+ 	* c-tree.h (struct lang_type): Rename 'objc_protocols' field
+ 	to 'objc_info'.
+ 
+ 2004-12-07  Eric Christopher  <echristo@redhat.com>
+ 
+ 	PR target/16317
+ 	* config/netbsd.h (NO_IMPLICIT_EXTERN_C): Define.
+ 
+ 2004-12-07  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* config/mips/mips-protos.h (mips_valid_pointer_mode): Move
+ 	prototype...
+ 	* config/mips/mips.c: ... here. Make static.
+ 
+ 2004-12-07  Eric Christopher  <echristo@redhat.com>
+ 
+ 	PR target/18442
+ 	* config/mips/mips.c (mips_vector_mode_supported_p): New function.
+ 	(TARGET_SCALAR_MODE_SUPPORTED_P): Define to above.
+ 
+ 2004-12-07  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* c-common.c, expr.c, fold-const.c, print-tree.c,
+ 	tree-gimple.c, tree-inline.c, tree-pretty-print.c,
+ 	tree-ssa-loop-im.c, tree-ssa-loop-ivopts.c: Replace uses of
+ 	first_rtl_op with TREE_CODE_LENGTH.
+ 	* tree.c (first_rtl_op): Remove.
+ 	Replace uses of first_rtl_op with TREE_CODE_LENGTH.
+ 	* tree.h: Remove the prototype for first_rtl_op.
+ 
+ 2004-12-07  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* config/rs6000/t-aix43, config/rs6000/t-aix52 (SHLIB_LINK):
+ 	Revert 2004-12-01 change.
+ 
+ 2004-12-06  Ziemowit Laski  <zlaski@apple.com>
+ 
+ 	* c-tree.h (struct lang_type): Add 'objc_protocols' field.
+ 
+ 2004-12-06  DJ Delorie  <dj@redhat.com>
+ 
+ 	* reload.c (find_valid_class): Fix logic to test inner mode as well.
+ 	(push_reload): Pass inner mode.
+ 
+ 2004-12-06  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* doc/tm.texi (TARGET_VALID_POINTER_MODE): Document.
+ 
+ 2004-12-06  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* config/rs6000/sysv4.h: Define RELOCATABLE_NEEDS_FIXUP to 1.
+ 
+ 2004-12-06  Zdenek Dvorak  <dvorakz@suse.cz>
+ 	    Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	PR tree-optimization/18601
+ 	* tree-cfg.c (thread_jumps, thread_jumps_from_bb): Removed.
+ 	(tree_forwarder_block_p): Do not consider blocks that are its own
+ 	successors forwarders.
+ 	(cleanup_forwarder_blocks, remove_forwarder_block): New functions.
+ 	(cleanup_tree_cfg): Use cleanup_forwarder_blocks instead of
+ 	thread_jumps.
+ 	* tree-flow.h (bb_ann_d): Remove forwardable.
+ 
+ 2004-12-06  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* expr.c (expand_expr_real_1): Remove an "if" whose condition
+ 	is always false.
+ 
+ 2004-12-06  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* c-gimplify.c (gimplify_c_loop): Improve initial implementations
+ 	for loops whose conditions are known at compile-time.
+ 	* gimplify.c (append_to_statement_list_1): Remove side_effects
+ 	parameter, this function should never be called if its false.
+ 	(append_to_statement_list): Only call append_to_statement_list_1
+ 	if t is non-NULL tree with side-effects.
+ 	(append_to_statement_list_force):  Likewise, if t is not NULL.
+ 
+ 2004-12-06  J"orn Rennecke <joern.rennecke@st.com>
+ 
+ 	* bt-load.c (btr_def_s): New member own_end;
+ 	(add_btr_to_live_range): Add second parameter.  Changed caller.
+ 	(clear_btr_from_live_range): Clear btrs_live_at_end bit
+ 	for the register its definition basic block if own_end is set.
+ 	(augment_live_range): Also take btrs_live_at_end into account.
+ 	(combine_btr_defs): Don't bother with
+ 	other_def->other_btr_uses_after_use if it pertains to a different
+ 	register.
+ 	(move_btr_def): Set def->other_btr_uses_before_def after
+ 	calling combine_btr_defs."
+ 
+ 	* bt-load.c (augment_live_range): New argument full_range.
+ 	Changed all callers.
+ 
+ 	* bt-load.c (move_tr_def): Set other_tr_uses_before_def
+ 	taking new btr assignment into account.
+ 
+ 2004-12-05  Daniel Berlin <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-alias.c (create_global_var): Use void_type_node,
+ 	not size_type_node.
+ 
+ 2004-12-05  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* expr.c (expand_expr_real_1): Abort on COND_EXPR of
+ 	VOID_TYPE.
+ 
+ 2004-12-05  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR target/18841
+ 	* config/alpha/alpha.md (UNSPECV_SETJMPR_ER): New.
+ 	(builtin_setjmp_receiver_er_sl_1): Use it.
+ 	(builtin_setjmp_receiver_er_1): Likewise.
+ 	(builtin_setjmp_receiver_er, exception_receiver_er): Remove.
+ 	(builtin_setjmp_receiver): Don't split for explicit relocs until
+ 	after reload.
+ 	(exception_receiver): Likewise.
+ 
+ 2004-12-05  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* mklibgcc.in (vis_hide): Add the prototype for the test.
+ 
+ 2004-12-05  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* c-typeck.c (c_finish_loop): Improve initial implementations
+ 	for loops whose conditions are known at compile-time.
+ 
+ 2004-12-05  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* builtins.c: Fix comment typos.
+ 
+ 2004-12-04  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	PR middle-end/18730
+ 	* emit-rtl.c (get_first_nonnote_insn, get_last_nonnote_insn): When
+ 	the first/last insn is a sequence, return the first/last insn of the
+ 	sequence.
+ 
+ 	PR bootstrap/18804
+ 	* mklibgcc.in (vis_hide): Use implementation instead of declaration
+ 	for test function.
+ 
+ 2004-12-04  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/alpha/alpha.c (alpha_expand_unaligned_load): Don't forget to
+ 	use ofs in BWX two byte special case.
+ 	(alpha_expand_unaligned_store): Likewise.
+ 
+ 2004-12-04  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* gcse.c (gcse_main): Add a comment.
+ 
+ 2004-12-04  Andrew  Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR middle-end/17909
+ 	* builtins.c (fold_builtin_next_arg): Export and return true
+ 	when there is a warning or an error.
+ 	(expand_builtin_va_start): When fold_builtin_next_arg returns true,
+ 	return const0_rtx.
+ 	(expand_builtin): Likewise.
+ 	* gimplify.c (gimplify_call_expr): Error out if there is not
+ 	enough arguments to va_start. Call fold_builtin_next_arg also
+ 	on the second argument.
+ 	* tree.h (fold_builtin_next_arg): Prototype.
+ 
+ 2004-12-04  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* mklibgcc.in: Build shared libgcc and shared libunwind in gcc/.
+ 	Don't subst shlib_dir for SHLIB_LINK, SHLIBUNWIND_LINK,
+ 	SHLIB_INSTALL, and SHLIBUNWIND_INSTALL.
+ 	* config/i386/t-nwld (SHLIB_NAME): Use shlib_base_name in place of
+ 	shlib_dir and shlib_so_name.
+ 	* config/mips/t-slibgcc-irix (SHLIB_NAME): Likewise.
+ 	* config/t-libunwind-elf (SHLIB_NAME): Likewise.
+ 	* config/t-slibgcc-darwin (SHLIB_NAME): Likewise.
+ 	* config/t-slibgcc-elf-ver (SHLIB_NAME): Likewise.
+ 	* config/t-slibgcc-sld (SHLIB_NAME): Likewise.
+ 	(SHLIB_LINK): Don't use shlib_dir when creating symlink.
+ 
+ 2004-12-03  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* doc/tm.texi (TARGET_DELEGITIMIZE_ADDRESS): Document target hook.
+ 
+ 2004-12-03  Richard Henderson  <rth@redhat.com>
+ 
+ 	* alias.c (component_uses_parent_alias_set): Rename from
+ 	can_address_p.  Return bool.  Reverse the sense of the result.
+ 	Reinstate the check for alias set zero.
+ 	(get_alias_set): Update to match.
+ 	* alias.h (component_uses_parent_alias_set): Likewise.
+ 	* emit-rtl.c (set_mem_attributes_minus_bitpos): Likewise.
+ 	* expr.c (expand_assignment): Likewise.
+ 	* expr.h: Remove commented out prototypes that were moved to alias.h.
+ 
+ 2004-12-03  Richard Henderson  <rth@redhat.com>
+ 
+ 	* doc/tm.texi (TARGET_BUILD_BUILTIN_VA_LIST): New.
+ 	(TARGET_CANNOT_FORCE_CONST_MEM): New.
+ 
+ 2004-12-04  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	PR middle end/18718
+ 	* sched-rgn.c (schedule_region): Don't assume REG_SAVE_NOTEs are
+ 	in pairs.
+ 	* sched-ebb.c (schedule_ebb): Likewise.
+ 
+ 2004-12-03  Andreas Schwab  <schwab@suse.de>
+ 
+ 	* Makefile.in (HOSTHOOKS_DEF_H): Define.
+ 	(ggc-common.o): Depend on $(HOSTHOOKS_DEF_H).
+ 	(host-default.o): Likewise.
+ 
+ 2004-12-03  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* config/stormy16/stormy16.md (pushqi, popqi, pushhi,
+ 	pophi): Add number of arguments to name so that the
+ 	pattern is recognized as a named pattern.
+ 
+ 2004-12-03  Janis Johnson  <janis187@us.ibm.com>
+ 
+ 	* doc/extend.texi (AltiVec Builtins): Fix info about signedness.
+ 
+ 2004-12-03  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_override_options): Protect
+ 	darwin_one_byte_bool with #if.
+ 
+ 2004-12-03  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* doc/tm.texi (Misc): Document TARGET_FOLD_BUILTIN.
+ 
+ 2004-12-03  H.J. Lu  <hongjiu.lu@intel.com>
+ 
+ 	* mklibgcc.in: Put back the default set of EXTRA_MULTILIB_PART.
+ 
+ 2004-12-03  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* configure.ac: Move TL_AC_GCC_VERSION into initialization section.
+ 	Set libstdcxx_incdir directly.
+ 	* configure: Regenerate.
+ 
+ 2004-12-03  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-ssa-dom.c (record_equivalences_from_phis): Remove an
+ 	"if" whose condition is always true.
+ 
+ 	* cfgrtl.c (rtl_verify_flow_info_1): Use JUMP_P instead of
+ 	INSN_P.
+ 
+ 2004-12-02  Stan Shebs  <shebs@apple.com>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_override_options): Make 64-bit
+ 	Darwin default to one-byte bools.
+ 
+ 2004-12-02  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR 18774
+ 	* simplify-rtx.c (simplify_immed_subreg): Fail complex modes.
+ 
+ 2004-12-03  Ben Elliston  <bje@au.ibm.com>
+ 
+ 	* doc/cfg.texi (Edges): Update. Document the edge_iterator data
+ 	type and its methods.
+ 
+ 2004-12-02  Richard Henderson  <rth@redhat.com>
+ 
+ 	* expr.c (write_complex_part): Use simplify_gen_subreg when the
+ 	submode is at least as large as a word.
+ 	(read_complex_part): Likewise.
+ 
+ 2004-12-02  H.J. Lu  <hongjiu.lu@intel.com>
+ 
+ 	PR bootstrap/18532
+ 	* mklibgcc.in: Build one set of EXTRA_MULTILIB_PARTS for
+ 	multilib at a time. Don't build the default set. Don't add
+ 	EXTRA_MULTILIB_PARTS to shared libunwind nor libgcc. Remove
+ 	filter for shared libunwind and libgcc.
+ 
+ 2004-12-02  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	PR target/18759
+ 	* config/i386/i386.c (override_options): If -fomit-frame-pointer has
+ 	already been specified, ignore the -momit-leaf-frame-pointer option.
+ 
+ 2004-12-02  H.J. Lu  <hongjiu.lu@intel.com>
+ 
+ 	* varasm.c (make_decl_rtl): Add the missing `;'.
+ 
+ 2004-12-02  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* tree.c (is_attribute_p): Split out to ..
+ 	(is_attribute_with_length_p): Here.  Use IDENTIFIER_LENGTH instead
+ 	of strlen and compare the string lengths before calling strcmp.
+ 	(lookup_attribute): Call is_attribute_with_length_p instead of
+ 	is_attribute_p.
+ 
+ 2004-12-02  Devang Patel  <dpatel@apple.com>
+ 
+ 	* config/darwin.h (TARGET_OPTION_TRANSLATE_TABLE): Add -gfull and -gused.
+ 	* config/rs6000/darwin.h (CC1_SPEC): Do not handle -gfull and -gused.
+ 	* config/i386/darwin.h (CC1_SPEC): Same.
+ 
+ 2004-12-02  Richard Henderson  <rth@redhat.com>
+ 
+ 	* optabs.c (lowpart_subreg_maybe_copy): New.
+ 	(expand_unop, expand_abs_nojump): Use it.
+ 
+ 2004-12-02  J"orn Rennecke <joern.rennecke@st.com>
+ 
+ 	* sh.md (extv, extzv): Add pattern predicate.
+ 
+ 2004-12-02  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-cfg.c (phi_alternatives_equal): Check that PHI_ARG_DEF
+ 	is not null.
+ 
+ 	* tree-cfg.c (phi_alternatives_equal): Check that PHI_ARG_DEF
+ 	is not null.
+ 
+ 	* tree-cfg.c (thread_jumps): Reduce the size of WORKLIST.
+ 
+ 2004-12-02  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-eh.c: Revert yesterday's change.
+ 
+ 2004-12-02  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* varasm.c (decode_reg_name): Revert change to check for zero
+ 	length strings.
+ 	(make_decl_rtl): Make sure that we call decode_reg_name only
+ 	when needed.
+ 
+ 2004-12-02  Dorit Naishlos  <dorit@il.ibm.com>
+ 
+ 	PR tree-opt/18716
+ 	* tree-vectorizer.c (slpeel_make_loop_iterate_ntimes): Properly set
+ 	then and else labels.
+ 
+ 2004-12-02  Andreas Schwab  <schwab@suse.de>
+ 
+ 	* Makefile.in (WERROR_FLAGS): Renamed from WERROR.
+ 	(STRICT2_WARN): Use $(WERROR_FLAGS) instead of $(WERROR).
+ 	(STAGE2_FLAGS_TO_PASS): Likewise.
+ 
+ 	* config/i386/x-mingw32: Set WERROR_FLAGS instead of WERROR.
+ 
+ 2004-12-02  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* configure.ac: Use TL_AC_GCC_VERSION to set gcc_version.  Remove
+ 	now-redundant AC_SUBSTs.
+ 	* aclocal.m4: Include ../config/gcc-version.m4.
+ 	* configure: Regenerate.
+ 
+ 2004-12-02  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_assemble_integer): Put back the
+ 	#ifdef RELOCATABLE_NEEDS_FIXUP.
+ 
+ 2004-12-01  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	PR target/9908
+ 	* config/i386/i386.md (*call_value_1, *sibcall_value_1): Correct
+ 	Intel assembler syntax by using %A1 instead of %*%1.
+ 
+ 2004-12-01  Richard Henderson  <rth@redhat.com>
+ 
+ 	* expr.c (expand_assignment): Handle CONCAT both as a final
+ 	destination and as a middle point.
+ 
+ 2004-12-01  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-eh.c (save_eptr, save_filt): Now file scoped statics.
+ 	(honor_protect_cleanup_actions): Only create save_eptr and
+ 	save_filt if they do not already exist.
+ 	(lower_eh_constructs): Wipe all knowledge of save_eptr and
+ 	save_filt before returning.
+ 
+ 2004-12-02  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-phinodes.c (remove_phi_arg_num): Fix a comment.
+ 
+ 2004-12-02  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	PR target/16952
+ 	* config/rs6000/rs6000.c (rs6000_assemble_integer): Replace
+ 	#ifdef RELOCATABLE_NEEDS_FIXUP with if.
+ 	* config/rs6000/linux.h (RELOCATABLE_NEEDS_FIXUP): Define in terms
+ 	of target_flags_explicit.
+ 	* config/rs6000/linux64.h (RELOCATABLE_NEEDS_FIXUP): Ditto for biarch
+ 	case.  Define as 0 for non-biarch.
+ 
+ 2004-12-01  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* config/rs6000/t-aix43, config/rs6000/t-aix52 (SHLIB_LINK):
+ 	Change temporary file tag from a prefix to an infix.
+ 
+ 2004-12-02  Andreas Schwab  <schwab@suse.de>
+ 
+ 	* gcc.c (struct option_map): Add entry for "--pass-exit-codes".
+ 
+ 2004-12-01  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR tree-opt/18763
+ 	PR tree-opt/18746
+ 	* tree-ssa-alias.c (init_alias_info): Get statement operands for all
+ 	the statements if aliases_computed_p is true.
+ 
+ 2004-12-01  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* Makefile.in (WERROR): New variable.
+ 	(STRICT2_WARN): Use it.
+ 	(STAGE2_FLAGS_TO_PASS): Likewise.
+ 	* config/i386/x-mingw32 (WERROR): Add -Wno-format.
+ 
+ 2004-12-01  Richard Henderson  <rth@redhat.com>
+ 
+ 	* expr.c (get_inner_reference): Fix thinko in REAL/IMAGPART_EXPR
+ 	offsetting.
+ 
+ 2004-12-01  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	PR tree-optimization/18291
+ 	* tree-ssa-copy.c (merge_alias_info): Fix merging of
+ 	flow-sensitive alias information.  If the new pointer has no
+ 	name tag, copy it from the original pointer.  Otherwise, make
+ 	sure that the pointed-to sets have a common intersection.
+ 
+ 2004-12-01  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR rtl-opt/15289
+ 	* emit-rtl.c (gen_complex_constant_part): Remove.
+ 	(gen_realpart, gen_imagpart): Remove.
+ 	* rtl.h (gen_realpart, gen_imagpart): Remove.
+ 	* expmed.c (extract_bit_field): Remove CONCAT hack catering to
+ 	gen_realpart/gen_imagpart.
+ 	* expr.c (write_complex_part, read_complex_part): New.
+ 	(emit_move_via_alt_mode, emit_move_via_integer, emit_move_resolve_push,
+ 	emit_move_complex_push, emit_move_complex, emit_move_ccmode,
+ 	emit_move_multi_word): Split out from ...
+ 	(emit_move_insn_1): ... here.
+ 	(expand_expr_real_1) <COMPLEX_EXPR>: Use write_complex_part.
+ 	<REALPART_EXPR, IMAGPART_EXPR>: Use read_complex_part.
+ 	* function.c (assign_parm_setup_reg): Hard-code transformations
+ 	instead of using gen_realpart/gen_imagpart.
+ 
+ 	* expr.c (optimize_bitfield_assignment_op): Split out from ...
+ 	(expand_assignment): ... here.  Use handled_component_p to gate
+ 	get_inner_reference code.  Simplify MEM handling.  Special case
+ 	CONCAT destinations.
+ 
+ 	* expmed.c (store_bit_field): Use simplify_gen_subreg instead
+ 	of gen_rtx_SUBREG directly.
+ 
+ 2004-12-01  David Edelsohn  <edelsohn@gnu.org>
+ 	    Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	PR target/17107
+ 	* config/rs6000/rs6000.md (sge): Enable for non-TARGET_POWER.
+ 	(sgt): Same.
+ 	(sle): Same.
+ 	(slt): Same.
+ 
+ 2004-12-01  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	PR middle-end/18667
+ 	* params.c (set_param_value): Add range check.
+ 	* params.def: Add min and max values. Reformat long strings.
+ 	* params.h (struct param_info): Add min and max fields.
+ 	(enum compiler_param): Adjust DEFPARAM.
+ 	* toplev.c (lang_independent_params): Likewise.
+ 
+ 2004-12-01  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	PR target/12817
+ 	* config/rs6000/rs6000.c (rs6000_emit_prologue): Use r0 for vrsave.
+ 
+ 2004-12-01  Joseph S. Myers  <joseph@codesourcery.com>
+ 
+ 	* doc/standards.texi: Update for C99 TC2.
+ 
+ 2004-11-30  Jeff Law  <law@redhat.com>
+ 
+ 	* sbitmap.c (sbitmap_any_common_bits): New function.
+ 	* sbitmap.h (sbitmap_any_common_bits): Prototype.
+ 	* modulo-sched.c (sms_schedule_by_order): Use sbitmap_any_common_bits
+ 	No longer allocate/free "psp", "pss" sbitmaps.
+ 	* tree-ssa-alias.c (compute_flow_insensitive_aliasing): Similarly for
+ 	the "res" sbitmap.
+ 	(group_aliases): Similarly.
+ 
+ 2004-11-30  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* tree-vectorizer.c (vect_analyze_data_refs): Reformat and avoid
+ 	uninitialized variable.
+ 
+ 2004-11-30  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* fold-const.c (fold_widened_comparison): Make sure that we're
+ 	passing an INTEGER_TYPE to int_fits_type_p.
+ 	(fold): Clean up comment.
+ 
+ 2004-11-30  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* mklibgcc.in: Correct calculation of libgcc_s_soname and
+ 	libunwind_soname.  Use $out, not $outS, in commands for
+ 	no-shared-library case.  Move EXTRA_MULTILIB_PARTS rules above
+ 	library build rules, make $libunwind_so and $libgcc_s_so
+ 	depend on them in the normal fashion, and filter those objects
+ 	out of @shlib_objs@.
+ 
+ 2004-11-30  Janis Johnson  <janis187@us.ibm.com>
+ 
+ 	* config/rs6000/altivec.h (vec_step_help): Support const vector types.
+ 
+ 2004-11-30  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR tree-opt/18298
+ 	* tree-optimize.c (init_tree_optimization_passes): Add a may_alias
+ 	pass right after fold builtins.
+ 
+ 2004-11-30  Andreas Krebbel  <krebbel1@de.ibm.com>
+ 
+ 	* config/s390/s390-modes.def: Added cc modes documentation.
+ 	* config/s390/s390.c: (s390_tm_ccmode, s390_select_ccmode,
+ 	s390_expand_addcc): Added cc mode comments.
+ 	* config/s390/s390.md: Removed old cc mode documentation.
+ 
+ 2004-11-30  Mark Dettinger  <dettinge@de.ibm.com>
+ 
+ 	* config/s390/s390.c (struct processor_costs): New data type.
+ 	(s390_cost, z900_cost, z990_cost): New global variables.
+ 	(override_options): Initialize s390_cost.
+ 	(s390_rtx_costs): Reimplement.
+ 
+ 2004-11-29  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	Fix PR tree-optimization/18673
+ 
+ 	* tree-ssa-pre.c: Remove splay-tree.h include.
+ 	(bitmap_value_replace_in_set): Fix to add if it does not exist.
+ 	(find_or_generate_expression): Remove now-wrong condition.
+ 	(create_expression_by_pieces): Fix condition and comment reason
+ 	for it.
+ 	(insert_aux): Fix condition and comment reasons for it.
+ 	Factor insertion code from here.
+ 	(insert_into_preds_of_block): To here.  Fix conditions in factored
+ 	function and comment reasons for them.
+ 
+ 2004-11-30  Ira Rosen  <irar@il.ibm.com>
+ 
+ 	PR tree-opt/18607
+ 	* tree-vectorizer.c (vect_analyze_data_refs): Use temporary
+ 	variable for data_reference when looking for memtag.
+ 
+ 2004-11-30  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* c-opts.c (check_deps_environment_vars): If spec != NULL, set
+ 	deps_seen.
+ 
+ 2004-11-30  Dorit Naishlos  <dorit@il.ibm.com>
+ 
+ 	* tree-vectorizer.c (vect_gen_niters_for_prolog_loop): Use
+ 	tree_low_cst instead of TREE_INT_CST_LOW.
+ 
+ 2004-11-30  Dorit Naishlos  <dorit@il.ibm.com>
+ 
+ 	PR target/18173
+ 	* tree-vectorizer.c (vect_can_force_dr_alignment_p): Return false for
+ 	decls that are assembled before vectorization takes place.
+ 	(vect_compute_data_ref_alignment): Set DECL_USER_ALIGN to 1.
+ 
+ 2004-11-30  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* passes.c (rest_of_handle_old_regalloc): Delete unreachable blocks
+ 	if local_alloc modified jumps.
+ 
+ 2004-11-30  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* varasm.c (default_encode_section_info): Don't set SYMBOL_FLAG_SMALL
+ 	on TLS symbols.
+ 	* config/rs6000/rs6000.c (rs6000_elf_in_small_data_p): Remove TLS
+ 	check.
+ 
+ 2004-11-30  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* gthr-gnat.c, gthr-gnat.h, gthr.h, libgcc2.h, unwind-dw2-fde.h
+ 	* unwind.h: Surround all visibility pragmas with #ifndef HIDE_EXPORTS.
+ 
+ 	* mklibgcc.in: Drastic restructure for comprehensibility.
+ 	Remove the old hidden-directive hack.
+ 	Eliminate support for .txt files in LIB2ADD etc (never used).
+ 	Eliminate support for assembly source files in LIB2ADDEH* and
+ 	LIBUNWIND (also never used).
+ 	Build up dependency lists for libraries incrementally.
+ 	If we have SHLIB_LINK, compile each file twice, once for the
+ 	static and once for the shared library; also probe for
+ 	-fvisibility=hidden in the generated libgcc.mk.  If found,
+ 	pass that and -DHIDE_EXPORTS to the compilation of every C
+ 	source file going into the static library.  If found, generate
+ 	hidden-directive lists for every assembly source file going
+ 	into the static library, but incorporate them with -include
+ 	instead of ld -r.
+ 	Write comments into generated libgcc.mk to facilitate debugging.
+ 	* Makefile.in: Pass ASM_HIDDEN_OP to mklibgcc.
+ 	* config/t-slibgcc-darwin: Define ASM_HIDDEN_OP.
+ 
+ 	* config/darwin.h (REAL_LIBGCC_SPEC): Put -lgcc back in
+ 	-Zdynamiclib case.
+ 
+ 2004-11-29  Richard Henderson  <rth@redhat.com>
+ 
+ 	* expr.c (get_inner_reference): Handle REAL/IMAGPART_EXPR.
+ 	(handled_component_p): Likewise.
+ 	* alias.c (can_address_p): Reformat and simplify.  Handle
+ 	REAL/IMAGPART_EXPR.  Do not disable addressability based on
+ 	alias set zero.
+ 	* fold-const.c (build_fold_addr_expr_with_type): Remove duplicate
+ 	check for REAL/IMAGPART_EXPR.
+ 	* gimplify.c (gimplify_compound_lval): Likewise.
+ 	* tree-cfg.c (verify_expr): Likewise.
+ 	* tree-gimple.c (is_gimple_addressable, get_base_address): Likewise.
+ 	* tree-nested.c (build_addr, convert_nonlocal_reference): Likewise.
+ 	(convert_local_reference): Likewise.
+ 	* tree-ssa-loop-ivopts.c (prepare_decl_rtl): Likewise.
+ 
+ 2004-11-30  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* expr.c (emit_group_load_1): Don't die on const_int orig_src.
+ 
+ 2004-11-29  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	PR pch/14940
+ 	* config/pa/pa-host.c, config/pa/x-hpux, config/pa/x-linux: New files.
+ 	* config.host (hppa*-*-hpux*, hppa*-*-linux): Define out_host_hook_obj
+ 	and host_xmake_file using new host configuration files.
+ 
+ 2004-11-29  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* reg-stack.c (change_stack): Improve algorithm used to pop regs
+ 	off the stack to maximize ffreep usage and reduce fxch count.
+ 
+ 2004-11-30  James A. Morrison  <phython@gcc.gnu.org>
+ 
+ 	PR middle-end/18596
+ 	* c-decl.c (grokdeclarator): Reset DECL_INTIAL to error_mark_node
+ 	on errors.
+ 
+ 2004-11-30  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* expr.c (expand_expr_real_1, case NOP_EXPR): Properly handle
+ 	REDUCE_BIT_FIELD by applying it to result, not input, of conversion.
+ 
+ 2004-11-30  Ben Elliston  <bje@au.ibm.com>
+ 
+ 	* Makefile.in (REGS_H): Depend on $(BASIC_BLOCK_H).
+ 
+ 2004-11-29  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR c/18479
+ 	* c-common.c (handle_visibility_attribute): When the type decl
+ 	is really a identifier node, warn about being ignored and return.
+ 
+ 2004-11-29  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-cfg.c (tree_node_can_be_shared): Fix typo'd error_mark_node.
+ 
+ 2004-11-29  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* cfgcleanup.c (outgoing_edges_match, try_crossjump_to_edge):
+ 	Remove CASE_DROPS_THROUGH checks, it is never defined.
+ 	* cfglyout.c (fixup_reorder_chain): Likewise.
+ 	* cfgrtl.c (rtl_verify_flow_info): Likewise.
+ 	* stmt.c (expand_case): Likewise.
+ 	* cfgbuild.c (make_edges): Likewise.  Also remove force_fallthru,
+ 	it is now always 0.
+ 	* system.h (CASE_DROPS_THROUGH): Poison.
+ 	* doc/md.texi (casesi): Remove documentation of CASE_DROPS_THROUGH.
+ 	* doc/tm.texi (casesi): Remove documentation of CASE_DROPS_THROUGH.
+ 
+ 	* config/v850/v850.h: Remove commented out CASE_DROPS_THROUGH.
+ 
+ 2004-11-29  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR middle-end/18725
+ 	* tree-cfg.c (tree_node_can_be_shared): Error_mark_node can be
+ 	shared always.
+ 
+ 2004-11-29  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	PR tree-optimization/18712
+ 	* tree-into-ssa.c (insert_phi_nodes_for): Pass argument
+ 	WORK_STACK by reference.
+ 	Call VEC_safe_push instead of VEC_quick_push.
+ 	Update all users.
+ 
+ 2004-11-29  Daniel Jacobowitz  <dan@codesourcery.com>
+ 
+ 	PR c/7544
+ 	* Makefile.in (c-lang.o): Update dependencies.
+ 	* c-lang.c: Include "c-pragma.h".
+ 	(finish_file): Call maybe_apply_pending_pragma_weaks.
+ 	* c-pragma.c (maybe_apply_pending_pragma_weaks): New function.
+ 	* c-pragma.h (maybe_apply_pending_pragma_weaks): New prototype.
+ 
+ 2004-11-29  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR target/17224
+ 	* config/ia64/predicates.md (sdata_symbolic_operand): Deny offsets
+ 	outside the referenced object.
+ 
+ 2004-11-29  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-if-conv.c (replace_phi_with_cond_modify_expr): Use
+ 	EDGE_PRED instead of PHI_ARG_EDGE.
+ 	* tree-ssa-live.c: Likewise.
+ 	* tree-ssa-loop-manip.c: Likewise.
+ 	* tree-ssa.c: Likewise.
+ 
+ 	* cfgrtl.c (cfg_layout_redirect_edge_and_branch): Speed up by
+ 	simplifying edge manipulation.
+ 
+ 	* cfgrtl.c (rtl_tidy_fallthru_edge): Speed up by using
+ 	EDGE_COUNT.
+ 
+ 	* tree-cfg.c (tree_redirect_edge_and_branch): Call find_edge
+ 	only when needed.
+ 
+ 	* cfg.c (flow_obstack): Remove.
+ 	(flow_firstobj): Likewise.
+ 	(init_flow): Remove all uses of flow_obstack.
+ 
+ 2004-11-29  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* varasm.c (default_elf_select_section_1): Only pass DECL_P decl
+ 	to named_section.
+ 
+ 2004-11-29  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* opts.c (decode_options): Do not set max-inline-insns-rtl.
+ 	(common_handle_option): Likewise.
+ 	* params.def (PARAM_MAX_INLINE_INSNS_RTL): Remove.
+ 	* params.h (MAX_INLINE_INSNS_RTL): Remove.
+ 	* doc/invoke.texi (max-inline-insns-rtl): Remove.
+ 
+ 2004-11-29  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	PR target/9571
+ 	* varasm.c (default_elf_select_section_1): Pass decl to named_section.
+ 
+ 2004-11-28  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR middle-end/18164
+ 	* gimplify.c (gimplify_asm_expr): If the length of an output operand
+ 	is zero, do not process it, just let it go through.
+ 
+ 2004-11-28  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 	    Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	PR/18662, also backported from tree-cleanup-branch.
+ 	* tree-ssa-ccp.c (substitute_and_fold): If replaced anything,
+ 	always call maybe_clean_eh_stmt and modify_stmt.
+ 
+ 2004-11-28  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	PR/18664
+ 	* tree-ssa-operands.c (build_ssa_operands, case MODIFY_EXPR):
+ 	Ignore a VIEW_CONVERT_EXPR on LHS when deciding if must or may def.
+ 	* tree-ssa-ccp.c (visit_assignment): If LHS is a VIEW_CONVERT_EXPR,
+ 	add an inverse VIEW_CONVERT_EXPR to const_val.
+ 
+ 	PR/18657
+ 	* tree-nested.c (check_for_nested_with_variably_modified): New.
+ 	(create_nesting_tree): Call it.
+ 
+ 	* tree-ssa-alias.c (compute_points_to_and_addr_escapes): Remove
+ 	special code for assigning to non-pointer.
+ 	(is_escape_site): If RHS is a conversion between pointer and integer
+ 	types,	this is an escape site.
+ 
+ 	* gcse.c (insert_store): Error if try to insert store on abnormal edge.
+ 	(store_motion): Don't move store if any edge we'd want to move it
+ 	to is abnormal.
+ 
+ 	* expr.c (expand_expr_real_1, case ARRAY_REF): Properly fold with
+ 	non-zero lower bound.
+ 
+ 	* expr.c (categorize_ctor_elements_1, case STRING_CST): New case.
+ 
+ 2004-11-28  Matt Kraai  <kraai@alumni.cmu.edu>
+ 
+ 	PR diagnostic/17594
+ 	* opts.c (find_opt): Require that the input match a switch exactly
+ 	or that the switch take a joined option to be interpreted as a
+ 	match for another language.
+ 
+ 2004-11-28  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* timevar.def (TV_TREE_REDPHI): New timevar.
+ 	* tree-ssa.c (pass_redundant_phi): Use TV_TREE_REDPHI for the tv id.
+ 
+ 2004-11-28  Nathanael Nerode  <neroden@gcc.gnu.org>
+ 
+ 	PR preprocessor/17651
+ 	* c-opts.c (sanitize_cpp_opts): Make flag_no_output imply
+ 	flag_no_line_commands.
+ 	* c-ppoutput.c (pp_file_change): Remove now-redundant check of
+ 	flag_no_output.
+ 
+ 2004-11-28  Theodore A. Roth  <troth@openavr.org>
+ 
+ 	* config/avr/avr.c (avr_handle_fndecl_attribute): Generate a
+ 	warning if the function name does not begin with "__vector" and the
+ 	function has either the 'signal' or 'interrupt' attribute.
+ 
+ 2004-11-28  Theodore A. Roth  <troth@openavr.org>
+ 
+ 	* config/avr/avr.c (avr_mcu_types): Add entries for atmega48,
+ 	atmega88, atmega168, attiny13, attiny2313, at90can128, atmega165,
+ 	atmega325, atmega3250, atmega645 and atmega6450.
+ 	* config/avr/avr.h (LINK_SPEC): Ditto.
+ 	(LIB_SPEC): Ditto.
+ 	(LIBGCC_SPEC): Ditto.
+ 	(CRT_BINUTILS_SPECS): Ditto.
+ 	* config/avr/t-avr (MULTILIB_MATCHES): Ditto.
+ 
+ 2004-11-28  Nathanael Nerode  <neroden@gcc.gnu.org>
+ 
+ 	PR preprocessor/17610
+ 	* testsuite/gcc.dg/cpp/empty-include.c: New testcase.
+ 
+ 2004-11-28  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-alias.c (count_calls_and_maybe_create_global_var): New.
+ 	(pass_maybe_create_global_var): New.
+ 	* tree-pass.h (pass_maybe_create_global_var): Declare.
+ 	* tree-optimize.c (init_tree_optimization_passes): Link in
+ 	pass_maybe_create_global_var.
+ 
+ 2004-11-28  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* tree-inline.c (inline_forbidden_p_1, case RECORD_TYPE): Add comment.
+ 
+ 2004-11-28  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	PR rtl-optimization/18420
+ 	* simplify-rtx.c (simplify_gen_subreg): Revert 2004-10-28 change.
+ 
+ 2004-11-28  Steven Bosscher  <stevenb@suse.de>
+ 	    John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	* config/vax/vax.h (CASE_DROPS_THROUGH): Don't define.
+ 	* config/vax/vax.md (casesi): Emit a test-and-branch to make sure
+ 	that the case is in range, to make sure the casesi insn is always
+ 	in range and never falls through.
+ 	(casesi1): Add comment to explain why casesi never falls through.
+ 	Remove the unnamed special case casesi pattern.
+ 
+ 2004-11-28  Hans-Peter Nilsson  <hp@bitrange.com>
+ 
+ 	PR target/18331
+ 	* config/mmix/mmix.md ("*movdicc_real_reversible"): Rename from
+ 	"*movdicc_real".  Only match reversible comparisons.
+ 	("*movdicc_real_nonreversible"): New pattern, split from
+ 	"*movdicc_real".  Match only nonreversible comparisons.  Exclude
+ 	reversed alternatives.
+ 	("*movdfcc_real_reversible", "*movdfcc_real_nonreversible"):
+ 	Similar.
+ 
+ 2004-11-27  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/ia64/ia64.md: Move all define_predicate's ...
+ 	* config/ia64/predicates.md: ... here.  New file.
+ 
+ 2004-11-27  Per Bothner  <per@bothner.com>
+ 
+ 	PR bootstrap/18142
+ 	Re-applied following, with two modifications: add a URL for the
+ 	fixed cctools; only exit if $build = $target.
+ 
+ 	2004-10-18  Kelley Cook  <kcook@gcc.gnu.org>
+ 	* configure.ac (powerpc-*-darwin*): Require assembler to support
+ 	.machine directive.
+ 	* configure: Regenerate.
+ 
+ 2004-11-28  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	PR target/16800
+ 	* config/rs6000/rs6000.c (rs6000_rtx_costs): Improve accuracy of
+ 	EQ, GTU, and LTU costs.  Add costs for GT, LT, and UNORDERED.
+ 	Distinguish between SImode and DImode CONST_INT.
+ 
+ 2004-11-28  Andreas Fischer <a_fisch@gmx.de>
+ 	    Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	PR target/16343
+ 	* config/rs6000/rs6000.c (rs6000_elf_in_small_data_p): Disallow
+ 	functions, strings and thread-local vars.
+ 
+ 2004-11-28  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* config/rs6000/rs6000.h (WORLD_SAVE_P): Define.
+ 	* config/rs6000/darwin.h (WORLD_SAVE_P): Define.
+ 	* config/rs6000/rs6000.c (compute_save_world_info): Use WORLD_SAVE_P
+ 	to allow non-darwin ABIs to optimize away code.
+ 	(rs6000_emit_prologue, rs6000_emit_epilogue): Likewise.
+ 
+ 2004-11-27  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree.c (operand_equal_for_phi_arg_p): New.
+ 	* tree.h: Add a prototype for operand_equal_for_phi_arg_p.
+ 	* tree-cfg.c, tree-ssa-dom.c, tree-ssa-phiopt.c, tree-ssa.c:
+ 	Replace operand_equal_p with operand_for_phi_arg_p
+ 	appropriately.
+ 
+ 	* bb-reorder.c (find_traces_1_round): Speed up by using
+ 	EDGE_COUNT instead of FOR_EACH_EDGE.
+ 
+ 	* fold-const.c, config/i386/linux64.h: Fix comment typos.
+ 
+ 2004-11-27  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	PR pch/14940
+ 	* config/host-linux.c (TRY_EMPTY_VM_SPACE): Revert 2004-11-22 change.
+ 
+ 2004-11-27  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/i386/linux.h: Fix a comment typo.
+ 	* doc/extend.texi: Fix a typo.
+ 
+ 2004-11-27  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-cfg.c (cleanup_tree_cfg): Also return true if blocks
+ 	are merged.
+ 
+ 2004-11-27  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* config/i386/linux64.h (REG_NAME): Define.
+ 
+ 2004-11-27  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* fold-const.c (extract_muldiv_1) <case ABS_EXPR>: If ctype is
+ 	unsigned and type signed, build ABS_EXPR with signed_type (ctype)
+ 	and only afterwards convert to ctype.
+ 
+ 2004-11-27  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips-protos.h (function_arg_boundary): Declare.
+ 	* config/mips/mips.h (PARM_BOUNDARY): Simplify definition.
+ 	(STACK_BOUNDARY, MIPS_STACK_ALIGN): Likewise.
+ 	(FUNCTION_ARG_BOUNDARY): Use new function_arg_boundary function.
+ 	* config/mips/mips.c (function_arg_boundary): New function.
+ 	Impose a maximum alignment of STACK_BOUNDARY.
+ 
+ 2004-11-27  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR rtl-optimization/17825
+ 	* combine.c (subst): Ignore STRICT_LOW_PART no matter if REG_P (new)
+ 	or not.
+ 
+ 2004-11-27  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	PR target/12769
+ 	* config/rs6000/rs6000.c (init_cumulative_args): Set call_cookie
+ 	from rs6000_default_long_calls for libcalls.
+ 
+ 2004-11-26  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* expmed.c (extract_bit_field): When extracting from non-integer mode,
+ 	force a SUBREG into a register because we may be taking a further
+ 	SUBREG of it.
+ 
+ 2004-11-27  Di-an Jan  <dianj@freeshell.org>
+ 
+ 	* doc/contrib.texi (Tim Josling): Remove nesting quotation marks.
+ 
+ 2004-11-26  Robert Millan  <robertmh@gnu.org>
+ 
+ 	Changes for k*bsd-gnu support.
+ 	* config/i386/linux.h: Define REG_NAME to allow overriding of
+ 	register names in sc structure.
+ 	* config/i386/linux-unwind.h: Refer to sc->REG_NAME(reg) instead
+ 	of sc->reg.
+ 	* config.gcc: Detect x86_64-k*bsd-gnu systems.
+ 
+ 2004-11-26  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa.c (verify_flow_sensitive_alias_info): Don't
+ 	retrieve annotations or pointer info before it's necessary.
+ 	Reorder tests for early continue of the loop.  Manually CSE
+ 	SSA_NAME_VAR.
+ 
+ 2004-11-26  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* target.h (struct gcc_target): New field 'dwarf_handle_frame_unspec'.
+ 	* target_def.h (TARGET_DWARF_HANDLE_FRAME_UNSPEC): Define to 0.
+ 	(TARGET_INITIALIZER): Add TARGET_DWARF_HANDLE_FRAME_UNSPEC.
+ 	* dwarf2out.c (dwarf2out_frame_debug_expr): Allow REG->REG move
+ 	to a fixed reg if the source is the Return Address register.
+ 	Implement new Rule 15.
+ 	* doc/tm.texi (Frame Layout): Document TARGET_DWARF_HANDLE_FRAME_UNSPEC.
+ 	* config/sparc/sparc.c (TARGET_DWARF_HANDLE_FRAME_UNSPEC): Define to
+ 	sparc_dwarf_handle_frame_unspec.
+ 	(gen_save_register_window): New function.
+ 	(emit_stack_pointer_increment): Rename into gen_stack_pointer_inc.
+ 	(emit_stack_pointer_decrement): Rename into gen_stack_pointer_dec.
+ 	(expand_prologue): Adjust calls to emit_stack_pointer_{in,de}crement.
+ 	Set RTX_FRAME_RELATED_P on the appropriate insns and members of insns.
+ 	(sparc_asm_function_prologue): Do not emit call frame debugging info.
+ 	(emit_and_preserve): Adjust calls to emit_stack_pointer_{in,de}crement.
+ 	(sparc_expand_epilogue): Likewise.
+ 	(sparc_dwarf_handle_frame_unspec): New function.
+ 	* config/sparc/sparc.md (save_register_window): Remove.
+ 	(save_register_windowdi): Rewrite modelled on the callframe debug info.
+ 	(save_register_windowsi): Likewise.
+ 
+ 2004-11-26  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	* config/frv/frv-protos.h: Guard ifcvt functions declarations with
+ 	BB_HEAD, not BLOCK_HEAD.
+ 
+ 2004-11-26  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	* config/frv/frv.c (frv_ifcvt_modify_insn): Don't leave alone
+ 	scratch insns that set a register live at the join point.
+ 
+ 2004-11-26  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* cse.c, tree-ssa-operands.c: Fix comment typos.
+ 
+ 	* tree-cfg.c (tree_split_edge): Speed up by using find_edge.
+ 
+ 2004-11-26  James A. Morrison  <phython@gcc.gnu.org>
+ 
+ 	PR target/18510
+ 	* doc/extend.texi (SPARC VIS Built-in Functions): New section.
+ 
+ 2004-11-26  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* cfgrtl.c (try_redirect_by_replacing_jump): Speed up the
+ 	check that tests if all edges go to the same destination.
+ 
+ 	* bitmap.c (bitmap_find_bit): Speed up by traversing from
+ 	head->first if that seems profitable.
+ 
+ 2004-11-25  Jeff Law  <law@redhat.com>
+ 
+ 	* timevar.def (TV_TREE_LOOP_INIT, TV_TREE_LOOP_FINI): New timevars.
+ 	* tree-ssa-loop.c (pass_loop_init): Use TV_TREE_LOOP_INIT.
+ 	(pass_loop_done): Use TV_TREE_LOOP_FINI.
+ 
+ 2004-11-26  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	PR rtl-optimization/16356
+ 	* config/rs6000/rs6000.md (floatdisf2_internal2): Rewrite with
+ 	separate output register and one less jump.  Enable for powerpc64.
+ 	(floatdisf2): Adjust for above.
+ 
+ 2004-11-25  Bob Wilson  <bob.wilson@acm.org>
+ 
+ 	* config/xtensa/xtensa.h (STARTFILE_SPEC): Add crt0.
+ 	(GCC_DRIVER_HOST_INITIALIZATION): Define.
+ 
+ 2004-11-25  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR middle-end/17957
+ 	* tree-complex.c (vector_inner_type): New variable moved from
+ 	build_word_mode_vector_type.
+ 	(vector_last_type): Likewise.
+ 	(vector_last_nunits): Likewise.
+ 	(build_word_mode_vector_type): Use the new variables.
+ 	* Makefile.in (tree-complex.o): Add gt-tree-complex.h $(GGC_H).
+ 	(GTFILES): Add tree-complex.c.
+ 	(gt-tree-complex.h): New rule, add it to the rest of the gt-* rules.
+ 
+ 2004-11-25  Bob Wilson  <bob.wilson@acm.org>
+ 
+ 	* config/xtensa/xtensa.h (TARGET_CPU_CPP_BUILTINS): Define
+ 	__XTENSA_WINDOWED_ABI__.
+ 
+ 2004-11-25  Richard Henderson  <rth@redhat.com>
+ 
+ 	* dwarf2out.c (dwarf2out_stack_adjust): Add after_p argument.  Save
+ 	args_size adjustments for calls even with cfa as stack pointer.
+ 	Search calls for stack adjustments after the insn is issued.
+ 	(dwarf2out_frame_debug): Add after_p argument; pass it on.
+ 	* dwarf2out.h (dwarf2out_frame_debug): Update to match.
+ 	* final.c (final_start_function, final_scan_insn): Likewise.
+ 
+ 2004-11-25  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR c++/6764
+ 	* reload1.c (set_initial_eh_label_offset): New.
+ 	(set_initial_label_offsets): Use it.
+ 
+ 2004-11-25  Kaz Kojima  <kkojima@gcc.gnu.org>
+ 
+ 	* config/sh/sh.c (sh_output_mi_thunk): Initialize bitmap obstacks
+ 	before calling life_analysis and release them after.
+ 
+ 2004-11-25  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-ssa-forwprop.c (substitute_single_use_vars): Remove
+ 	duplicate code.
+ 
+ 2004-11-25  Andrew Pinski <pinskia@physics.uc.edu>
+ 
+ 	* bitmap.h (BITMAP_XMALLOC): Use BITMAP_ALLOC and not
+ 	BITMAP_OBSTACK_ALLOC.
+ 	(BITMAP_XFREE): Use BITMAP_FREE and not BITMAP_OBSTACK_FREE.
+ 
+ 2004-11-25  Andrew Pinski <pinskia@physics.uc.edu>
+ 
+ 	parts of PR rtl-opt/18463, rtl-opt/17647
+ 	* cse.c (canon_for_address): New function.
+ 	(find_best_addr): Call canon_for_address before getting the
+ 	address's cost when checking if we should take that address.
+ 
+ 2004-11-25  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-phinodes.c (add_phi_arg): Take "tree" instead of
+ 	"tree *" as the first argument.
+ 	* tree-flow.h: Update the prototype of add_phi_arg.
+ 	* lambda-code.c, tree-cfg.c, tree-into-ssa.c,
+ 	tree-ssa-loop-ivopts.c, tree-ssa-loop-manip.c, tree-ssa-pre.c,
+ 	tree-ssa-threadupdate.c, tree-ssa.c, tree-tailcall.c,
+ 	tree-vectorizer.c: Update all call sites of add_phi_arg.
+ 
+ 2004-11-25  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* bitmap.c (bitmap_malloc_alloc, bitmap_malloc_free): Remove.
+ 	* bitmap.h (bitmap_malloc_alloc, bitmap_malloc_free): Remove.
+ 	(BITMAP_XMALLOC): Forward to BITMAP_OBSTACK_ALLOC.
+ 	(BITMAP_XFREE): Forward to BITMAP_OBSTACK_FREE.
+ 
+ 2004-11-25  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/18587
+ 	* tree-flow-inline.h (mark_call_clobbered, mark_non_addressable): Flag
+ 	call clobbered caches as invalid.
+ 	* tree-ssa-operands.c (ssa_call_clobbered_cache_valid): New.  Flag
+ 	indicating whether the call clobbered operand cache is valid.
+ 	(ssa_ro_call_cache_valid): New.  Flag indicating whether the
+ 	pure/const call operand cache is valid.
+ 	(clobbered_v_may_defs, clobbered_vuses, ro_call_vuses): New.  Cached
+ 	list of operands for cached call virtual operands.
+ 	(clobbered_aliased_loads, clobbered_aliased_stores,
+ 	ro_call_aliased_load): New.  flags caching whether alias bits are
+ 	to be set in call stmt's.
+ 	(fini_ssa_operands): Remove call operand caches if present.
+ 	(get_expr_operands, get_asm_expr_operands,
+ 	get_indirect_ref_operands): Pass stmt annotation to add_stmt_operand.
+ 	(get_call_expr_operands): Add call clobbered variables first.
+ 	(add_stmt_operand): Take stmt annotation rather than stmt as a param.
+ 	(add_call_clobber_ops, add_call_read_ops): Use the call operand cache
+ 	if it is valid, otherise fill the cache.
+ 	* tree-ssa-operands.h (ssa_clobbered_cache_valid): Declare extern.
+ 	* tree-flow.h (struct var_ann_d): Add in_vuse_list and
+ 	in_v_may_def_list bits.
+ 	* tree-ssa-operands.c (cleanup_v_may_defs): New.  Clear the
+ 	in_list bits for the v_may_def elements and empty the operand
+ 	build array
+ 	(finalize_ssa_vuses): Use cleanup_v_may_defs and remove redundant
+ 	VUSES by checking the in_v_may_def_list bit.
+ 	(append_v_may_def, append_vuse): Use the in_list bit rather than
+ 	scanning the array for duplicates.
+ 
+ 2004-11-25  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390.c (s390_short_displacement): UNSPEC_GOTNTPOFF
+ 	displacements are not short.
+ 
+ 2004-11-25  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390.c (legitimize_pic_address): Use s390_load_address
+ 	to load addresses.
+ 
+ 2004-11-25  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	PR c++/18001
+ 	* c-common.h (lvalue_use): Move here from c-ctypeck.c.
+ 	(lvalue_or_else): Declare.
+ 	* c-common.c (lvalue_or_else): Move here from c-typeck.c.
+ 	* c-typeck.c (lvalue_use): Remove.
+ 	(lvalue_or_else): Remove.
+ 
+ 	PR c++/18556
+ 	* toplev.c (check_global_declarations): Set DECL_IGNORED_P on
+ 	unemitted variables with static storage duration.
+ 
+ 2004-11-25  Gerald Pfeifer  <gerald@pfeifer.com>
+ 
+ 	* tree-cfg.c (tree_verify_flow_info): Do not terminate error()
+ 	message with \n.
+ 
+ 2004-11-25  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* config/rs6000/altivec.md (VIshort): New mode macro.
+ 	(altivec_vaddubs, altivec_vadduhs, altivec_vadduws): Replace
+ 	with ...
+ 	(altivec_vaddu<VI_char>s): ... this.
+ 	(altivec_vaddsbs, altivec_vaddshs, altivec_vaddsws): Replace
+ 	with ...
+ 	(altivec_vadds<VI_char>s): ... this.
+ 	(altivec_vsububs, altivec_vsubuhs, altivec_vsubuws): Replace
+ 	with ...
+ 	(altivec_vsubu<VI_char>s): ... this.
+ 	(altivec_vsubsbs, altivec_vsubshs, altivec_vsubsws): Replace
+ 	with ...
+ 	(altivec_vsubs<VI_char>s): ... this.
+ 	(altivec_vavgub, altivec_vavguh, altivec_vavguw): Replace
+ 	with ...
+ 	(altivec_vavgu<VI_char>): ... this.
+ 	(altivec_vavgsb, altivec_vavgsh, altivec_vavgsw): Replace
+ 	with ...
+ 	(altivec_vavgs<VI_char>): ... this.
+ 	(altivec_vmsumubm, altivec_vmsumuhm): Replace with ...
+ 	(altivec_vmsumu<VI_char>m): ... this.
+ 	(altivec_vmsummbm, altivec_vmsummhm): Replace
+ 	with ...
+ 	(altivec_vmsumm<VI_char>m): ... this.
+ 	(altivec_vandc): Remove.
+ 	(*andc<mode>3): Renamed to ...
+ 	(andc<mode>3): ... here. Swap operand 1 and 2 numbering.
+ 	(altivec_vrlb, altivec_vrlh, altivec_vrlw): Replace
+ 	with ...
+ 	(altivec_vrl<VI_char>): ... this.
+ 	(altivec_vslb, altivec_vslh, altivec_vslw): Replace
+ 	with ...
+ 	(altivec_vsl<VI_char>): ... this.
+ 	(altivec_vsrb, altivec_vsrh, altivec_vsrw): Replace
+ 	with ...
+ 	(altivec_vsr<VI_char>): ... this.
+ 	(altivec_vsrab, altivec_vsrah, altivec_vsraw): Replace
+ 	with ...
+ 	(altivec_vsra<VI_char>): ... this.
+ 	(altivec_vsum4sbs, altivec_vsum4shs): Replace with ...
+ 	(altivec_vsum4s<VI_char>s): ... this.
+ 	(altivec_vperm_4si, altivec_vperm_8hi, altivec_vperm_16qi): Replace
+ 	with ...
+ 	(altivec_vperm_<mode>): ... this.
+ 	(altivec_vsel_4sf): Rename to ...
+ 	(altivec_vsel_v4sf): ... here.
+ 	(altivec_vsel_4si, altivec_vsel_8hi, altivec_vsel_16qi): Replace
+ 	with ...
+ 	(altivec_vsel_<mode>): ... this.
+ 	(altivec_vsldoi_4si, altivec_vsldoi_8hi,
+ 	altivec_vsldoi_16qi): Rename to ...
+ 	(altivec_vsldoi_v4si, altivec_vsldoi_v8hi,
+ 	altivec_vsldoi_v16qi): ... here.
+ 	(altivec_vsldoi_4sf): Rename to ...
+ 	(altivec_vsldoi_v4sf): ... here.
+ 	(altivec_predicate_v4si, altivec_predicate_v8hi,
+ 	altivec_predicate_v16qi): Replace with ...
+ 	(altivec_predicate_<mode>): ... this.
+ 	(altivec_lvebx, altivec_lvehx, altivec_lvewx): Replace
+ 	with ...
+ 	(altivec_lve<VI_char>x): ... this.
+ 	(altivec_stvebx, altivec_stvehx, altivec_stvewx): Replace
+ 	with ...
+ 	(altivec_stve<VI_char>x): ... this.
+ 	(absv16qi2, absv8hi2, absv4si2): Replace
+ 	with ...
+ 	(abs<mode>2): ... this.
+ 	(altivec_abss_v16qi, altivec_abss_v8hi, altivec_abss_v4si): Replace
+ 	with ...
+ 	(altivec_abss_<mode>): ... this.
+ 	(vec_realign_load_v16qi, vec_realign_load_v8hi,
+ 	vec_realign_load_v4si): Replace with ...
+ 	(vec_realign_load_<mode>): ... this.
+ 	* config/rs6000/rs6000.c (bdesc_3arg, bdesc_2arg): Update tweaked
+ 	insn names.
+ 	(rs6000_expand_ternop_builtin): Likewise.
+ 
+ 2004-11-25  Andrew Haley  <aph@redhat.com>
+ 
+ 	* gcc.c (process_command): Don't supply -v to linker.
+ 
+ 2004-11-25  Joseph S. Myers  <joseph@codesourcery.com>
+ 
+ 	* config/rs6000/darwin.h (SUBTARGET_OVERRIDE_OPTIONS): Use %qs
+ 	instead of `%s' in diagnostic.
+ 
+ 2004-11-25  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* basic-block.h (OBSTACK_ALLOC_REG_SET): Adjust.
+ 	(FREE_REG_SET): Adjust.
+ 	* bitmap.c (bitmap_obstack_free): Cope with NULL bitmap.
+ 	* bitmap.h (BITMAP_OBSTACK_ALLOC): Rename to ...
+ 	(BITMAP_ALLOC): ... here.
+ 	(BITMAP_OBSTACK_FREE): Rename to ...
+ 	(BITMAP_FREE): Don't check for NULL bitmap here.
+ 	* tree-ssa-pre.c (value_insert_into_set_bitmap,
+ 	bitmap_set_new): Use new names.
+ 
+ 	* bt-load.c (migrate_btr_defs): Remove unneeded NULL check.
+ 	* df.c (df_free): Likewise.
+ 	* ra-build.c (ra_build_free, ra_build_free_all): Likewise.
+ 	* tree-ssa-loop-ivopts.c (set_use_iv_cost): Likewise.
+ 
+ 	* basic-block.h (OBSTACK_ALLOC_REG_SET): Rename to ...
+ 	(ALLOC_REG_SET): ... here.
+ 	(FREE_REG_SET): Adjust.
+ 	(XMALLOC_REG_SET, XFREE_REG_SET): Remove.
+ 	* bb-reorder.c (fix_crossing_conditional_branches): Adjust.
+ 	* cfglayout.c (cfg_layout_duplicate_bb): Adjust.
+ 	* cfgrtl.c (rtl_split_block, rtl_split_edge,
+ 	safe_insert_insn_on_edge, cfg_layout_split_edge): Adjust.
+ 	* flow.c (update_life_info, calculate_global_regs_live,
+ 	allocate_bb_life_data, init_propagate_block_info): Adjust.
+ 	* global.c (build_insn_chain): Adjust.
+ 	* ifcvt.c (dead_or_predicable): Adjust.
+ 	* loop-iv.c (simplify_using_initial_values): Adjust.
+ 	* recog.c (peephole2_optimize): Adjust.
+ 	* sched-deps.c (init_deps_global): Adjust.
+ 
+ 2004-11-25  Ralf Corsepius <ralf.corsepius@rtems.org>
+ 
+ 	* config.gcc (avr-*-rtems*): Fix typo.
+ 
+ 2004-11-25  J"orn Rennecke <joern.rennecke@st.com>
+ 
+ 	* sh.c (sh_output_mi_thunk): Do not call regset_release_memory.
+ 
+ 2004-11-24  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-alias.c (compute_flow_insensitive_aliasing): Reduce
+ 	the number of queries to random elements in the ai->written_vars
+ 	bitmap.
+ 
+ 2004-11-24  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* config/i386/i386.c (override_options): Disable x87 fancy math
+ 	intrinsics if -mfpmath= doesn't include 387 (default on x86_64).
+ 
+ 2004-11-24  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* configure.ac: Tweak test for HAVE_DECL_LDGETNAME to avoid a
+ 	system header conflict on AIX 5.2.
+ 	* configure: Regenerate.
+ 
+ 2004-11-24  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-outof-ssa.c (coalesce_abnormal_edges): Use e->dest_idx
+ 	instead of calling phi_arg_from_edge.
+ 
+ 	* tree-phinodes.c (remove_phi_args): Replace phi_arg_from_edge
+ 	with e->dest_idx.
+ 
+ 2004-11-24  Ben Elliston  <bje@au.ibm.com>
+ 
+ 	* config/i386/i386.h (ASM_OUTPUT_DWARF_ADDR_CONST): Remove.
+ 	* config/i386/i386.c (i386_dwarf_output_addr_const): Likewise.
+ 	* config/i386/i386-protos.h (i386_dwarf_output_addr_const):
+ 	Likewise.
+ 
+ 2004-11-24  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* tree-sra.c (sra_walk_modify_expr): Handle RHS first, then LHS.
+ 
+ 	* tree-inline.c (copy_body_r): Explicitly copy a constant if the
+ 	type will be remapped.
+ 
+ 2004-11-24  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* c-opts.c (c_common_post_options): Don't clear
+ 	flag_inline_functions.
+ 	* dojump.c (clear_pending_stack_adjust): Remove check on
+ 	flag_inline_functions, it's always true.
+ 	* config/alpha/alpha.md (movdi_er_maybe_g): Remove splitter
+ 	that can never trigger.
+ 	* config/c4x/c4x.h (TARGET_CPU_CPP_BUILTINS): Don't look at
+ 	flag_inline_trees, now that flag_inline_functions is never
+ 	cleared.
+ 	* config/pdp11/pdp11.h (OPTIMIZATION_OPTIONS): Don't set
+ 	flag_inline_functions at optimization levels greater than
+ 	or equal to 3.  This is already done by default.
+ 
+ 2004-11-24  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-outof-ssa.c (eliminate_build): Use g->e->dest_idx
+ 	instead to find the PHI argument.  Do not take I as an
+ 	argument.
+ 	(eliminate_phi): Adjust the call to eliminate_build.  Do not
+ 	take I as an argument.
+ 	(rewrite_trees): Adjust the call to eliminate_phi.
+ 
+ 2004-11-24  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* optabs.h (force_expand_binop): Declare.
+ 	* optabs.c (force_expand_binop): Export.
+ 	* stmt.c (shift_return_value): Delete.
+ 	(expand_return): Don't call it.
+ 	* expr.h (shift_return_value): Declare.
+ 	* calls.c (shift_returned_value): Delete in favor of...
+ 	(shift_return_value): ...this new function.  Leave the caller to check
+ 	for non-BLKmode values passed in the msb of a register.  Take said mode
+ 	and a shift direction as argument.  Operate on the hard function value,
+ 	not a pseudo.
+ 	(expand_call): Adjust accordingly.
+ 	* function.c (expand_function_start): If a non-BLKmode return value
+ 	is padded at the last significant end of the return register, use the
+ 	return value's natural mode for the DECL_RESULT, not the mode of the
+ 	padded register.
+ 	(expand_function_end): Shift the same sort of return values left by
+ 	the appropriate amount.
+ 
+ 2004-11-24  Matt Austern  <austern@apple.com>
+ 
+ 	* recog.c (recog_memoized_1): Remove.
+ 	* recog.h (recog_memoized_1): Remove declaration.
+ 	(recog_memoized): Change from macro to inline function.
+ 
+ 2004-11-24  Devang Patel  <dpatel@apple.com>
+ 
+ 	PR/18555
+ 	* gcc.h (DEFAULT_WORD_SWITCH_TAKES_ARG): Add isysroot.
+ 	* config/darwin-c.c (darwin_register_frameworks): Use sysroot.
+ 
+ 2004-11-24  Devang Patel  <dpatel@apple.com>
+ 
+ 	* gcc.c (process_command): Supply -v to linker.
+ 
+ 2004-11-24  David Edelsohn  <edelsohn@gnu.org>
+ 	    Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_return_in_memory): Allow Altivec
+ 	vector modes without ALTIVEC_ABI.  Use GCC vector instead of
+ 	synthetic vector.
+ 	(rs6000_pass_by_reference): Split conditional into pieces.  Use
+ 	GCC vector instead of synthetic vector.
+ 
+ 2004-11-24  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree.c (recompute_tree_invarant_for_addr_expr): The address of a
+ 	thread-local variable is invariant.
+ 
+ 2004-11-24  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* tree-pretty-print.c (dump_generic_node, case POINTER_TYPE):
+ 	Handle TYPE_REF_CAN_ALIAS_ALL.
+ 	(print_declaration): Print array dimensions like dump_generic_node.
+ 
+ 	* fold-const.c (operand_equal_p): Remove kludge allowing ARG0 and
+ 	ARG1 to be null; instead define OP_SAME and OP_SAME_NULL and use them.
+ 
+ 2004-11-24  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* bitmap.c (INLINE): Do not define.
+ 	(bitmap_elem_to_freelist, bitmap_element_free,
+ 	bitmap_element_allocate, bitmap_clear, bitmap_element_zerop,
+ 	bitmap_element_link, bitmap_find_bit): Use inline keyword/macro.
+ 
+ 2004-11-24  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-ssa-dom.c (cprop_into_successor_phis): Remove code to
+ 	find the index of a PHI argument.  Use e->dest_idx instead.
+ 	Replace hint with index.
+ 
+ 	* tree-ssa-dom.c (cprop_into_successor_phis): Replace index
+ 	with indx.
+ 
+ 2004-11-24  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-alias.c (merge_pointed_to_info): Fix comment
+ 	regarding PT_MALLOC.
+ 
+ 2004-11-24  Joseph Myers  <joseph@codesourcery.com>
+ 
+ 	* config/i386/i386.c (optimization_options): Use
+ 	SUBTARGET_OPTIMIZATION_OPTIONS.
+ 	* config/i386/sol2-10.h (SUBTARGET_OPTIMIZATION_OPTIONS): Define.
+ 	(TARGET_SUBTARGET_DEFAULT): Don't include
+ 	MASK_OMIT_LEAF_FRAME_POINTER.
+ 
+ 2004-11-24  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* config/i386/sol2.h (X86_FILE_START_VERSION_DIRECTIVE):
+ 	Define to false.
+ 
+ 2004-11-24  Joseph Myers  <joseph@codesourcery.com>
+ 
+ 	* config/i386/t-sol2-10 (MULTILIB_DIRNAMES, MULTILIB_OSDIRNAMES):
+ 	Use amd64 instead of 64.
+ 
+ 2004-11-24  Mark Mitchell  <mark@codesourcery.com>
+ 	    Joseph Myers  <joseph@codesourcery.com>
+ 
+ 	* crtstuff.c (IN_LIBGCC2): Define it.
+ 	(EH_FRAME_SECTION_CONST): Check EH_TABLES_CAN_BE_READ_ONLY
+ 	instead of HAVE_LD_RO_RW_SECTION_MIXING.
+ 	* defaults.h (EH_TABLES_CAN_BE_READ_ONLY): New macro.
+ 	* dwarf2out.c (named_section_eh_frame_section): Check
+ 	EH_TABLES_CAN_BE_READ_ONLY.
+ 	* except.c (default_exception_section): Likewise.
+ 	* config/i386/sol2.h (EH_TABLES_CAN_BE_READ_ONLY): Define.
+ 	* doc/tm.texi (EH_TABLES_CAN_BE_READ_ONLY): Document.
+ 
+ 2004-11-24  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-ssa-pre.c (phi_translate): Use find_edge to find the
+ 	index of a PHI argument.
+ 
+ 	* tree-ssa-loop-manip.c (lv_adjust_loop_header_phi): Use
+ 	find_edge to find the index of a PHI argument.
+ 
+ 2004-11-24  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* expr.c (expand_expr_real_1): Remove cases for EXIT_BLOCK_EXPR
+ 	and LABELED_BLOCK_EXPR.
+ 	* gimplify.c (gimplify_labeled_block_expr): Remove.
+ 	(gimplify_exit_block_expr): Remove.
+ 	(gimplify_expr): Don't call them.
+ 	* tree-inline.c (copy_body_r): Don't handle EXIT_BLOCK_EXPR
+ 	and LABELED_BLOCK_EXPR.
+ 	(estimate_num_insns_1): Likewise.
+ 	(walk_tree): Likewise.
+ 	* tree-pretty-print.c (dump_generic_node): Don't handle
+ 	EXIT_BLOCK_EXPR and LABELED_BLOCK_EXPR.
+ 	* tree.def (EXIT_BLOCK_EXPR): Moved to java-tree.def.
+ 	(LABELED_BLOCK_EXPR): Likewise.
+ 	* tree.h (LABELED_BLOCK_LABEL): Moved to java-tree.h.
+ 	(LABELED_BLOCK_BODY): Likewise.
+ 	(EXIT_BLOCK_LABELED_BLOCK): Likewise.
+ 	(EXIT_BLOCK_RETURN): Removed.
+ 
+ 2004-11-24  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* cfgrtl.c (rtl_delete_block): Fix comment.
+ 	* emit-rtl.c (remove_unnecessary_notes): Die if we see BLOCK_BEG
+ 	or BLOCK_END insn notes.
+ 	* jump.c (squeeze_notes): Likewise.
+ 	* haifa-sched.c (reemit_notes): Don't "re-emit" EH_REGION_BEG and
+ 	EH_REGION_END notes, we never have them to begin with.
+ 	* sched-deps.c (sched_analyze_insn): When updating loop notes,
+ 	verify that we have indeed only recorded loop notes.
+ 	(sched_analyze): Die if we see EH_REGION_BEG or EH_REGION_END notes.
+ 	Only record loop notes.
+ 
+ 	* cfgexpand.c (tree_expand_cfg): Fix comment.
+ 
+ 	* passes.c (rest_of_compilation): Don't do a second call to
+ 	convert_from_eh_region_ranges from here, it's already called
+ 	from cfgexpand.c.
+ 	* except.c (resolve_fixup_regions): Remove.
+ 	(remove_fixup_regions): Remove.
+ 	(convert_from_eh_region_ranges_1): Remove.
+ 	(convert_from_eh_region_ranges): Remove the case where EH is
+ 	not already lowered at the tree level.  We always lower there.
+ 
+ 2004-11-24  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	PR c++/16882
+ 	* tree.c (make_vector_type): Move qualifiers to the vector type,
+ 	use the inner type's main variant and build a main variant for
+ 	the vector type if necessary.
+ 	(type_hash_eq): Check a vector type's TYPE_VECTOR_SUBPARTS.
+ 
+ 2004-11-24  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* target.h (late_rtl_prologue_epilogue): Remove.
+ 	* target-def.h (TARGET_LATE_RTL_PROLOGUE_EPILOGUE): Remove.
+ 	* system.h: Poison TARGET_LATE_RTL_PROLOGUE_EPILOGUE.
+ 	* passes.c (rest_of_handle_prologue_epilogue): Remove and move
+ 	remaining bits to...
+ 	(rest_of_handle_flow2): ...here.
+ 	(rest_of_compilation): Remove call to rest_of_handle_prologue_epilogue.
+ 	* doc/tm.texi (TARGET_LATE_RTL_PROLOGUE_EPILOGUE): Remove.
+ 
+ 2004-11-23  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* hwint.h (HOST_LONG_LONG_FORMAT): New macro.  Use it throughout.
+ 	* config/i386/xm-mingw32.h (HOST_LONG_LONG_FORMAT): Define.
+ 	* doc/hostconfig.texi (HOST_LONG_LONG_FORMAT): Document.
+ 
+ 2004-11-24  Daniel Jacobowitz  <dan@codesourcery.com>
+ 
+ 	* config/i386/i386.c (override_options): Move
+ 	SUBTARGET_OVERRIDE_OPTIONS before defaulting
+ 	flag_omit_frame_pointer.
+ 
+ 2004-11-23  Richard Henderson  <rth@redhat.com>
+ 
+ 	* rtl.h (validate_subreg): Declare.
+ 	* emit-rtl.c (validate_subreg): New.
+ 	(gen_rtx_SUBREG): Use it.
+ 	* simplify-rtx.c (simplify_subreg): Likewise.
+ 	(simplify_gen_subreg): Likewise.  Remove duplicate asserts.
+ 	* expr.c (emit_move_insn_1): Tidy complex move code.  Use memory
+ 	fallback whenever gen_realpart/gen_imagpart would not be able to
+ 	create SUBREGs.
+ 
+ 2004-11-23  Richard Henderson  <rth@redhat.com>
+ 
+ 	* expmed.c (extract_bit_field): Use simplify_gen_subreg instead of
+ 	hard-coding avoiding calls to gen_rtx_SUBREG.  Split complex return
+ 	modes to CONCAT.
+ 
+ 2004-11-23  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	PR tree-optimization/18618
+ 	* tree-into-ssa.c (DEF_VEC_MALLOC_P(basic_block)): Declare.
+ 	(insert_phi_nodes_for): Change third argument to VEC(basic_block).
+ 	* tree-ssa-dom.c (avail_exprs_stack): Change type to VEC(tree_on_heap).
+ 	Update all users.
+ 	(stmts_to_rescan): Likewise.
+ 	(const_and_copies_stack): Likewise.
+ 	(nonzero_vars_stack): Likewise.
+ 	(vrp_variables_stack): Likewise.
+ 
+ 2004-11-23  Richard Henderson  <rth@redhat.com>
+ 
+ 	* cse.c (record_jump_cond_subreg): New.
+ 	(record_jump_cond): Use it instead of gen_lowpart.
+ 
+ 2004-11-23  Daniel Jacobowitz  <dan@codesourcery.com>
+ 	    Joseph Myers  <joseph@codesourcery.com>
+ 
+ 	* config/sol2-c.c (solaris_register_pragmas): Use
+ 	c_register_pragma_with_expansion.
+ 	* config/sol2.h (HANDLE_PRAGMA_PACK_WITH_EXPANSION): Define.
+ 	* c-pragma.c (c_register_pragma): Update call to
+ 	cpp_register_pragma.
+ 	(c_register_pragma_with_expansion): New function.
+ 	(init_pragma): Honor HANDLE_PRAGMA_PACK_WITH_EXPANSION.
+ 	* c-pragma.h (c_register_pragma_with_expansion): New prototype.
+ 	* doc/extend.texi (Solaris Pragmas): Mention macro expansion for
+ 	#pragma align.
+ 	* doc/tm.texi (c_register_pragma_with_expansion,
+ 	HANDLE_PRAGMA_PACK_WITH_EXPANSION): Document.
+ 
+ 2004-11-23  Richard Henderson  <rth@redhat.com>
+ 
+ 	* combine.c (gen_lowpart_for_combine): Factor out mode of x as well
+ 	as mode sizes into local temporaries.  Unify failure path.
+ 
+ 2004-11-23  Richard Henderson  <rth@redhat.com>
+ 
+ 	* emit-rtl.c, rtl.h (subreg_hard_regno): Remove.
+ 	* caller-save.c (mark_set_regs): Use subreg_regno instead.
+ 	* final.c (alter_subreg): Likewise.
+ 	* local-alloc.c (reg_is_born): Likewise.
+ 
+ 2004-11-23  Richard Henderson  <rth@redhat.com>
+ 
+ 	* simplify-rtx.c (simplify_subreg): Use subreg_regno_offset directly
+ 	instead of using a SUBREG temporary.
+ 
+ 2004-11-23  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-cfg.c (tree_forwarder_block_p): Speed up by reordering
+ 	two checks.
+ 
+ 2004-11-23  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* function.h (struct function): Remove calls_longjmp.
+ 	(current_function_calls_longjmp): Delete.
+ 	* tree.h (ECF_LONGJMP): Delete.
+ 	(ECF_SIBCALL, ECF_PURE, ECF_SP_DEPRESSED, ECF_ALWAYS_RETURN)
+ 	(ECF_LIBCALL_BLOCK): Everybody slide down one.
+ 	(ECF_CONST, ECF_NORETURN, ECF_SIBCALL): Clarify comments.
+ 	* builtins.c (expand_builtin_longjmp): Don't set
+ 	current_function_calls_longjmp.
+ 	* calls.c (special_function_p): Mark longjmp and siglongjmp
+ 	with ECF_NORETURN, not ECF_LONGJMP.
+ 	(emit_call_1, expand_call, emit_library_call_value_1):
+ 	Don't check for ECF_LONGJMP.
+ 	* tree-cfg.c (make_exit_edges, is_ctrl_altering_stmt)
+ 	(need_fake_edge_p): Likewise.
+ 
+ 	* config/avr/avr.h, config/ip2k/ip2k.h: Don't define NON_SAVING_SETJMP.
+ 	* system.h: Poison NON_SAVING_SETJMP.
+ 	* function.c (use_register_for_decl)
+ 	* gcse.c (compute_hash_table_work, compute_store_table)
+ 	* postreload-gcse.c (record_opr_changes)
+ 	* reload.c (find_equiv_reg)
+ 	* reload1.c (reload)
+ 	* config/i386/i386.c (ix86_can_use_return_insn_p):
+ 	Remove code conditional on NON_SAVING_SETJMP.
+ 	* doc/tm.texi: Delete documentation of NON_SAVING_SETJMP.
+ 
+ 	* config/i386/sysv3.h: Delete file.
+ 	* config/i386/i386.c (ix86_svr3_asm_out_constructor): Delete.
+ 
+ 2004-11-23  Dorit Naishlos  <dorit@il.ibm.com>
+ 
+ 	* tree-vectorizer.c (vect_analyze_operations): Don't vectorize if
+ 	the vectorization factor is greater than the iteration count.
+ 	(vect_gen_niters_for_prolog_loop): No need to calculate min if the
+ 	iteration count is known.
+ 
+ 	(vect_build_symbol_bound): Removed. Its functionality moved to
+ 	vect_generate_tmps_on_preheader.
+ 	(vect_generate_tmps_on_preheader): Moved content of
+ 	vect_build_symbol_bound here instead of calling it.  Changed some
+ 	variables names.
+ 
+ 	(vect_build_loop_niters): We don't expect a new_bb to be generated -
+ 	use gcc_assert.
+ 	(vect_gen_niters_for_prolog_loop): Likewise.
+ 	(vect_gen_niters_for_prolog_loo): Likewise.
+ 
+ 	(slpeel_make_loop_iterate_ntimes): Use buildN instead of build.
+ 	(slpeel_add_loop_guard): Likewise.
+ 	(slpeel_tree_peel_loop_to_edge): Likewise.
+ 	(vect_do_peeling_for_alignment): Likewise.
+ 
+ 	(vect_get_first_index): Missing space.
+ 
+ 2004-11-23  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390.md ("*iordi3"): Mark commutative.
+ 	("*iorsi3_zarch", "*iorsi3_esa"): Likewise.
+ 
+ 2004-11-23  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-phinode.c (resize_phi_node): Abort when LEN is strictly
+ 	greater than PHI_ARG_CAPACITY.
+ 	(reserve_phi_args_for_new_edge): Initialize the new PHI
+ 	argument to NULL_TREE.  Increment PHI_NUM_ARGS.
+ 	(add_phi_arg): Add a PHI argument to the slot given by
+ 	E->dest_idx.
+ 	(remove_phi_arg_num): Do not write to PHI_ARG_EDGE.
+ 	* tree-flow-inline (phi_arg_from_edge): Return E->dest_idx.
+ 	* tree-ssa.c (ssa_redirect_edge): Check for a missing PHI
+ 	argument by looking at PHI_ARG_DEF.
+ 	(verify_phi_args): Check for a missing PHI argument.  Remove
+ 	the check for duplicate PHI arguments.
+ 	* tree.h (PHI_ARG_EDGE): Redefine in terms of EDGE_PRED.
+ 	(phi_arg_d): Remove e.
+ 
+ 	* tree-cfg.c (tree_try_redirect_by_replacing_jump): Speed up
+ 	by restricting to the case with two outgoing edges.
+ 
+ 2004-11-23  Andreas Krebbel  <krebbel1@de.ibm.com>
+ 
+ 	* config/s390/s390.c (s390_backchain_string): Removed.
+ 	(s390_return_addr_rtx, s390_back_chain_rtx, s390_frame_info)
+ 	(s390_emit_prologue, s390_va_start, s390_gimplify_va_arg):
+ 	Changed users of TARGET_BACKCHAIN, TARGET_NO_BACKCHAIN and
+ 	TARGET_KERNEL_BACKCHAIN to reflect the new options.
+ 	* config/s390/s390.h (MASK_BACKCHAIN, MASK_PACKED_STACK): New macros.
+ 	(TARGET_KERNEL_BACKCHAIN): Removed.
+ 	(TARGET_BACKCHAIN): Former triple state option change to a target flag.
+ 	(TARGET_PACKED_STACK): New macro.
+ 	(TARGET_SWITCHES): New switches added.
+ 	(TARGET_OPTIONS): "backchain", "no-backchain" and "kernel-backchain"
+ 	removed.
+ 	(DYNAMIC_CHAIN_ADDRESS): Use TARGET_PACKED_STACK.
+ 	* config/s390/s390.md ("allocate_stack", "restore_stack_block")
+ 	("save_stack_nonlocal", "restore_stack_nonlocal"): Modified to reflect
+ 	the change in target switch semantics.
+ 	* config/s390/tpf.h (TARGET_DEFAULT_BACKCHAIN): Removed.
+ 	(TARGET_DEFAULT): MASK_BACKCHAIN added.
+ 	* doc/invoke.texi: Added documentation for the new/changed options.
+ 
+ 2004-11-23  Uros Bizjak  <uros@kss-loka.si>
+ 
+ 	PR rtl-optimization/18614
+ 	* simplify-rtx.c (simplify_binary_operation): Do not
+ 	simplify inner elements of constant arguments of
+ 	VEC_CONCAT insn.
+ 
+ 2004-11-23  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* gthr-solaris.h (__gthread_recursive_mutex_init_function): Use
+ 	0 instead of NULL.
+ 
+ 2004-11-23  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-phinode.c (make_phi_node): Use a new variable,
+ 	capacity, to receive the return value of ideal_phi_node_len.
+ 
+ 2004-11-23  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* gthr-solaris.h (__gthread_recursive_mutex_t): New type.
+ 	(__GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION): Define to
+ 	__gthread_recursive_mutex_init_function.
+ 	(__gthread_key_create): Properly cast -1.
+ 	(__gthread_recursive_mutex_init_function): New function.
+ 	(__gthread_recursive_mutex_lock): Rewrite.
+ 	(__gthread_recursive_mutex_trylock): Likewise.
+ 	(__gthread_recursive_mutex_unlock): Likewise.
+ 
+ 2004-11-23  Ralf Corsepius <ralf.corsepius@rtems.org>
+ 
+ 	* config/c4x/t-rtems: New.
+ 	* config.gcc: Reflect having added c4x/t-rtems.
+ 
+ 2004-11-23  Dorit Naishlos <dorit@il.ibm.com>
+ 
+ 	PR tree-opt/18403
+ 	PR tree-opt/18505
+ 	* tree-vectorizer.c (vect_create_data_ref_ptr): Use
+ 	lang_hooks.types.type_for_size instead of integer_type_node for the
+ 	type of ptr_update.
+ 
+ 2004-11-23  Ralf Corsepius <ralf.corsepius@rtems.org>
+ 
+ 	* config.gcc (h8300-*-rtems*): Use h8300/t-rtems.
+ 
+ 2004-11-23  Ralf Corsepius <ralf.corsepius@rtems.org>
+ 
+ 	* config/arm/t-rtems: New.
+ 	* config.gcc: Reflect having added arm/t-rtems.
+ 
+ 2004-11-23  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-cfg.c (tree_execute_on_growing_pred): New.
+ 	(tree_cfg_hooks): Add tree_execute_on_growing_pred.
+ 	* tree-flow.h: Add a prototype for
+ 	reserve_phi_args_for_new_edge.
+ 	* tree-phinodes.c (reserve_phi_args_for_new_edge): New.
+ 	(add_phi_arg): Don't resize a PHI array.
+ 
+ 2004-11-23  Ralf Corsepius <ralf.corsepius@rtems.org>
+ 
+ 	* config.gcc: Add avr-*-rtems*.
+ 	* config/avr/t-rtems: New.
+ 	* config/avr/rtems.h: New.
+ 
+ 2004-11-22  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* df.c (dataflow_set_a_op_b): Remove reslt parameter, since it's
+ 	always the same as op1.  Use bitmap_ior_into and bitmap_and_into.
+ 	Add comment to function.
+ 
+ 2004-11-22  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	PR pch/14940
+ 	* config/host-linux.c (TRY_EMPTY_VM_SPACE): Define for __hppa__.
+ 
+ 	PR rtl-optimization/14838
+ 	* emit-rtl.c (get_first_nonnote_insn): Don't assume first insn is a
+ 	note.
+ 	(get_last_nonnote_insn): Don't assume last insn is a note.
+ 
+ 2004-11-22  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* fold-const.c (nondestructive_fold_binary_to_constant): Rename
+ 	to fold_binary_to_constant.
+ 	(nondestructive_fold_unary_to_constant): Likewise, rename to
+ 	fold_unary_to_constant.
+ 	(fold_relational_hi_lo): Update call to fold_binary_to_constant.
+ 	* tree.h (nondestructive_fold_binary_to_constant): Update prototype.
+ 	(nondestructive_fold_unary_to_constant): Likewise.
+ 	* tree-ssa-ccp.c (ccp_fold): Update calls to fold_unary_to_constant
+ 	and fold_binary_to_constant.
+ 	* tree-ssa-loop-niter.c (EXEC_BINARY, EXEC_UNARY): Delete macros.
+ 	(inverse, number_of_iterations_cond): Replace uses of EXEC_BINARY
+ 	and EXEC_UNARY with calls to fold_*nary_to_constant.
+ 	* tree-ssa-loop-ivopts.c (EXEC_BINARY, EXEC_UNARY): Delete macros.
+ 	(idx_find_step): Replace uses of EXEC_BINARY with calls to
+ 	fold_binary_to_constant.
+ 
+ 2004-11-22  Nick Clifton  <nickc@redhat.com>
+ 
+ 	* sbitmap.c (sbitmap_union_of_preds): Remove redundant
+ 	initialisation of 'e'.
+ 
+ 2004-11-22  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* config/i386/i386.h (TARGET_USE_FANCY_MATH_387): New macro.
+ 	* config/i386/i386.c (override_options):  Set MASK_NO_FANCY_MATH_387
+ 	automatically for targets without TARGET_80387.
+ 	* config/i386/i386.md (sqrtsf2, sqrtsf2_1, sqrtsf2_i387, sqrtdf2,
+ 	sqrtdf2_1, sqrtdf2_i387, *sqrtextendsfdf2, sqrtxf2,
+ 	*sqrtextenddfxf2, *sqrtextendsfxf2, fpremxf4, fmodsf3, fmoddf3,
+ 	fmodxf3, fprem1xf4, dremsf3, dremdf3, dremxf3, *sindf2, *sinsf2,
+ 	*sinextendsfdf2, *sinxf2, *cosdf2, *cossf2, *cosextendsfdf2,
+ 	*cosxf2, sincosdf3, sincossf3, *sincosextendsfdf3, sincosxf3,
+ 	*tandf3_1, tandf2, *tansf3_1, tansf2, *tanxf3_1, tanxf2,
+ 	atan2df3_1, atan2df3, atandf2, atan2sf3_1, atan2sf3, atansf2,
+ 	atan2xf3_1, atan2xf3, atanxf2, asindf2, asinsf2, asinxf2,
+ 	acosdf2, acossf2, acosxf2, fyl2x_xf3, logsf2, logdf2, logxf2,
+ 	log10sf2, log10df2, log10xf2, log2sf2, log2df2, log2xf2,
+ 	fyl2xp1_xf3, log1psf2, log1pdf2, log1pxf2, *fxtractxf3, logbsf2,
+ 	logbdf2, logbxf2, ilogbsi2, *f2xm1xf2, *fscalexf4, expsf2,
+ 	expdf2, expxf2, exp10sf2, exp10df2, exp10xf2, exp2sf2, exp2df2,
+ 	exp2xf2, expm1df2, expm1sf2, expm1xf2, frndintxf2, rintdf2,
+ 	rintsf2, rintxf2, frndintxf2_floor, floordf2, floorsf2,
+ 	floorxf2, frndintxf2_ceil, ceildf2, ceilsf2, ceilxf2,
+ 	frndintxf2_trunc, btruncdf2, btruncsf2, btruncxf2,
+ 	frndintxf2_mask_pm, nearbyintdf2, nearbyintsf2, nearbyintxf2):
+ 	Simplify conditionals using TARGET_USE_FANCY_MATH_387.
+ 
+ 2004-11-22  Dale Johannesen  <dalej@apple.com>
+ 
+ 	* config/darwin.h (JUMP_TABLES_IN_TEXT_SECTION):  Conditionalize
+ 	properly and comment.
+ 
+ 2004-11-22  James A. Morrison  <phython@gcc.gnu.org
+ 
+ 	* config/sparc/sparc.c: Include insn-codes.h and langhooks.h.
+ 	(sparc_init_builtins): New function.
+ 	(sparc_init_vis_builtins): Create builtin functions for VIS
+ 	instructions.
+ 	(sparc_expand_builtin): Expand builtin functions for VIS instructions.
+ 	(TARGET_INIT_BUILTINS): Define to sparc_init_builtins.
+ 	(TARGET_EXPAND_BUILTIN): Define to sparc_expand_builtin.
+ 	(def_builtin): New macro for creating builtin functions.
+ 	* config/sparc/sparc.md (P): New mode macro for pointer types.
+ 	(UNSPEC_FPACK16, UNSPEC_FPACK32, UNSPEC_FPACKFIX, UNSPEC_FEXPAND,
+ 	UNSPEC_FPMERGE, UNSPEC_MUL16AL, UNSPEC_MUL8UL, UNSPEC_MULDUL,
+ 	UNSPEC_ALIGNDATA, UNSPEC_ALIGNADDR, UNSPEC_PDIST): New constants.
+ 	(fpack16_vis, fpackfix_vis, fpack32_vis, fexpand_vis, fpmerge_vis,
+ 	fmul8x16_vis, fmul8x16au_vis, fmul8x16al_vis, fmul8sux16_vis,
+ 	fmul8ulx16_vis, fmuld8sux16_vis, fmuld8ulx16_vis, pdist_vis,
+ 	faligndata<V64:mode>_vis, alignaddr<P:mode>_vis): New patterns.
+ 
+ 2004-11-22  Devang Patel  <dpatel@apple.com>
+ 
+ 	* tree-if-conv.c (clean_predicate_lists): Clean all basic blocks.
+ 
+ 2004-11-22  Devang Patel  <dpatel@apple.com>
+ 
+ 	* tree-if-conv.c (if_convertable_phi_p): Rename to ...
+ 	(if_convertible_phi_p): ... new name.
+ 	(if_convertable_modify_expr_p): Rename to ...
+ 	(if_convertible_modify_expr_p): ... new name.
+ 	(if_convertable_stmt_p): Rename to ...
+ 	(if_convertible_stmt_p): ... new name.
+ 	(if_convertable_bb_p): Rename to ...
+ 	(if_convertible_bb_p): ... new name.
+ 	(if_convertable_loop_p): Rename to ...
+ 	(if_convertible_loop_p): ... new name.
+ 
+ 2004-11-22  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR target/18444
+ 	* configure.ac (threading): Accept 'posix95'.
+ 	* configure: Regenerate.
+ 	* config.gcc (i[34567]86-*-solaris2*): On Solaris up to 2.6,
+ 	include sol26.h and default to posix95 threads if have_pthread_h.
+ 	(sparc-*-solaris2*): Likewise.
+ 	* gthr.h: Include gthr-posix95.h if _PTHREADS95 is defined.
+ 	* gthr-posix95.h: New file.
+ 	* config/sol26.h: New file.
+ 	* doc/install.texi (--enable-threads): Document 'posix95'.
+ 
+ 2004-11-23  Ben Elliston  <bje@au.ibm.com>
+ 
+ 	* pointer-set.h (pointer_set_contains): Remove.
+ 	* pointer-set.c (pointer_set_contains): Likewise.
+ 
+ 2004-11-22  Dale Johannesen  <dalej@apple.com>
+ 
+ 	* calls.c (expand_call): Do not call preserve_temp_slots.
+ 
+ 2004-11-22  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-flow.h: Remove the prototype for remove_phi_arg.
+ 	Add a prototype for remove_phi_args.
+ 	* tree-phinodes.c (remove_phi_arg): Remove.
+ 	(remove_phi_args): New.
+ 	* tree-ssa.c (ssa_remove_edge): Call remove_phi_args instead
+ 	of remove_phi_arg.
+ 
+ 	* cfg.c (unchecked_make_edge): Call execute_on_growing_pred
+ 	after making an edge.
+ 	(remove_edge): Call execute_on_shrinking_pred before removing
+ 	an edge.
+ 	(redirect_edge_succ): Call execute_on_growing_pred and
+ 	execute_on_shrinking_pred.
+ 	* cfghooks.c (execute_on_growing_pred): New.
+ 	(execute_on_shrinking_pred): Likewise.
+ 	* cfghooks.h (cfg_hooks): Add execute_on_growing_pred and
+ 	execute_on_shrinking_pred.
+ 	Add prototypes for execute_on_growing_pred and
+ 	execute_on_shrinking_pred.
+ 	* cfgrtl.c (rtl_cfg_hooks): Add NULL hooks to
+ 	execute_on_growing_pred and execute_on_shrinking_pred.
+ 	(cfg_layout_rtl_cfg_hook): Likewise.
+ 	* tree-cfg.c (tree_cfg_hooks): Likewise.
+ 
+ 	* tree-cfg.c (tree_execute_on_shrinking_pred): New.
+ 	(tree_cfg_hooks): Use it.
+ 	* tree-ssa.c (ssa_remove_edge): Don't call remove_phi_args.
+ 	(ssa_redirect_edge): Don't call remove_phi_arg_num.
+ 
+ 	* tree-phinodes.c (remove_phi_arg_num): Make it static.
+ 	* tree-flow.h: Remove the corresponding prototype.
+ 
+ 	* tree-ssa.c (ssa_remove_edge): Remove.
+ 	* tree-flow.h: Remove the corresponding prototype.
+ 	* tree-cfg.c: Replace ssa_remove_edge with remove_edge.
+ 	* basic-block.h: Likewise.
+ 	* tree-if-conv.c: Likewise.
+ 	* tree-ssa-threadupdate.c: Likewise.
+ 
+ 2004-11-23  Ben Elliston  <bje@au.ibm.com>
+ 
+ 	* doc/cfg.texi (Maintaining the CFG): Use @ftable instead of
+ 	@table to list the BSI methods.  Use individual @findex directives
+ 	instead of one with a comma-separated list of index entries.
+ 
+ 2004-11-22  Zdenek Dvorak  <dvorakz@suse.cz>
+ 
+ 	PR tree-optimization/18529
+ 	* fold-const.c (fold_to_nonsharp_ineq_using_bound): New function.
+ 	(simple_operand_p): Use STRIP_NOPS.  Consider SSA names simple.
+ 	(fold): Call fold_to_nonsharp_ineq_using_bound.
+ 	* tree-ssa-loop-niter.c (simplify_replace_tree): New function.
+ 	(number_of_iterations_cond): Fold the expressions before futher
+ 	processing.
+ 	(tree_simplify_using_condition): Handle case when cond or expr is
+ 	an EQ_EXPR specially.
+ 
+ 2004-11-22 Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa.c (verify_ssa): SSA_OP_ALL_USES should be
+ 	SSA_OP_ALL_USES | SSA_OP_ALL_KILLS for verification purposes.
+ 
+ 2004-11-22  David Edelsohn  <edelsohn@gnu.org>
+ 	    Fariborz Jahanian  <fjahanian@apple.com>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_return_in_memory): Test
+ 	TARGET_ALTIVEC_ABI.
+ 	(function_arg_boundary): Align 8 to 16 byte vectors like SPE.
+ 	Align 16 byte and larger vectors like Altivec.
+ 	(function_arg_advance): Pass any 16 byte vector like Altivec vector.
+ 	(function_arg): Same.
+ 	(rs6000_pass_by_references): Test TARGET_ALTIVEC_ABI.
+ 
+ 2004-11-22  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR tree-opt/18572
+ 	* tree-sra.c (scalarize_init): Unshare the rhs before gimplifying
+ 	it.
+ 
+ 2004-11-22  Richard Henderson  <rth@redhat.com>
+ 
+ 	* function.c (assign_parm_setup_block): Revert 11-13 change to
+ 	forcably re-mode a (possibly BLKmode) hard register.
+ 
+ 2004-11-22  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* config/sparc/sparc.c (mem_min_alignment): Check MEM_ALIGN.
+ 
+ 2004-11-22  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* config/rs6000/power4.md: Remove delay between dispatch and issue
+ 	associated with dispatch group slots 3 and 4.
+ 	* config/rs6000/power5.md: Same.
+ 
+ 2004-11-21  Jeff Law  <law@redhat.com>
+ 
+ 	* cfg.c (cached_make_edge): Use find_edge rather than an inlined
+ 	variant.
+ 	* cfgbuild.c (make_edges): Likewise.
+ 	* cfghooks.c (can_duplicate_block_p): Likewise.
+ 	* cfgloop.c (loop_latch_edge): Likewise.
+ 	* cfgloopmanip.c (force_single_succ_latches): Likewise.
+ 	* cfgrtl.c (rtl_flow_call_edges_add): Likewise.
+ 	* predict.c (predict_loops, propagate_freq): Likewise.
+ 	* tracer.c (tail_duplicate): Likewise.
+ 	* tree-cfg.c (disband_implicit_edges): Likewise.
+ 	(tree_forwarder_block_p, tree_flow_call_edges_add): Likewise.
+ 
+ 2004-11-22  Nick Clifton  <nickc@redhat.com>
+ 
+ 	* sbitmap.c (sbitmap_union_of_preds): Remove redundant
+ 	initialisation of 'e'.
+ 
+ 2004-11-22  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	PR rtl-optimization/18599
+ 	* regrename.c (copyprop_hardreg_forward): Speed up by putting
+ 	BB_VISITED flags on basic blocks as we process them.
+ 
+ 2004-11-22  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	PR target/18531
+ 	* config/rs6000/altivec.md (VI_char): New mode attribute.
+ 	(addv16qi3, addv8hi3, addv4ai3): Replace with ...
+ 	(add<mode>3): ... this.
+ 	(subv16qi3, subv8hi3, subv4ai3): Replace with ...
+ 	(sub<mode>3): ... this.
+ 	(smaxv16qi3, smaxv8hi3, smaxv4ai3): Replace with ...
+ 	(smax<mode>3): ... this.
+ 	(sminv16qi3, sminv8hi3, sminv4ai3): Replace with ...
+ 	(smin<mode>3): ... this.
+ 	(umaxv16qi3, umaxv8hi3, umaxv4ai3): Replace with ...
+ 	(umax<mode>3): ... this.
+ 	(uminv16qi3, uminv8hi3, uminv4ai3): Replace with ...
+ 	(umin<mode>3): ... this.
+ 	(andv16qi3, andv8hi3, andv4ai3): Replace with ...
+ 	(and<mode>3): ... this.
+ 	(iorv16qi3, iorv8hi3, iorv4ai3): Replace with ...
+ 	(ior<mode>3): ... this.
+ 	(xorv16qi3, xorv8hi3, xorv4ai3): Replace with ...
+ 	(xor<mode>3): ... this.
+ 	(andv16qi3, andv8hi3, andv4ai3): Replace with ...
+ 	(and<mode>3): ... this.
+ 	(iorv16qi3, iorv8hi3, iorv4ai3): Replace with ...
+ 	(ior<mode>3): ... this.
+ 	(altivec_vnor): Replace with ...
+ 	(altivec_nor<mode>): ... this.
+ 	(one_cmplv16qi2, one_cmplv8hi2, one_complv4ai2): Replace with ...
+ 	(one_cmpl<mode>2): ... this.
+ 	(altivec_vandc): New expander.
+ 	(*andc<mode>3): New insn.
+ 	* config/rs6000/rs6000.c (bdesc_2arg): Adjust for new insn names.
+ 
+ 2004-11-22  Dorit Naishlos  <dorit@il.ibm.com>
+ 
+ 	PR tree-opt/18536
+ 	* tree-vectorizer.c (make_loop_iterate_ntimes): Use type of niters when
+ 	creating iv instead of integer_type.
+ 	(vect_build_loop_niters): Remove redundant code.
+ 	(vect_transform_loop_bound): Removed (duplicates functionality of
+ 	make_loop_iterate_ntimes.
+ 	(vect_gen_niters_for_prolog_loop): Add documentation. Call
+ 	lang_hooks.types.type_for_size to create a type of the required size.
+ 	Use that type instead of integer_type. Remove redundant code.
+ 	(vect_update_niters_after_peeling): Use type of niters instead of
+ 	integer_type.
+ 	(vect_transform_loop): Unify handling of known and unknown loop bound
+ 	cases. Call make_loop_iterate_ntimes instead of
+ 	vect_transform_loop_bound.
+ 
+ 2004-11-22  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR target/18217
+ 	* config/rs6000/t-darwin (LIB2FUNCS_EXTRA): Move darwin-fallback.c to
+ 	(LIB2ADDEH): Here.
+ 
+ 2004-11-22  Dorit Naishlos  <dorit@il.ibm.com>
+ 
+ 	PR tree-opt/18544
+ 	* tree-vectorizer.c (vect_analyze_data_refs): Fail if memtag not found.
+ 
+ 2004-11-22 Kazuhiro Inaoka <inaoka.kazuhiro@renesas.com>
+ 
+ 	* config.gcc: Use t-slibgcc-elf to build libgcc_s.so on
+ 	m32r*linux.
+ 	* config/m32r/t-linux (SHLIB_MAPFILES): Override to use
+ 	m32r/libgcc-glibc.ver.
+ 	* config/m32r/libgcc-glibc.ver: Add New file.
+ 
+ 2004-11-22  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* bitmap.h (struct bitmap_obstack): New obstack type.
+ 	(struct bitmap_head_def): Replace using_obstack with obstack
+ 	pointer.
+ 	(bitmap_default_obstack): New.
+ 	(bitmap_initialize): Make inline, does not do allocation.
+ 	(bitmap_release_memory): Remove.
+ 	(bitmap_obstack_initialize, bitmap_obstack_release): Declare.
+ 	(bitmap_obstack_alloc, bitmap_malloc_alloc, bitmap_gc_alloc,
+ 	bitmap_obstack_free, bitmap_malloc_free): Declare.
+ 	(BITMAP_OBSTACK_ALLOC, BITMAP_GGC_ALLOC, BITMAP_XMALLOC): Adjust.
+ 	(BITMAP_FREE): Replace with ...
+ 	(BITMAP_OBSTACK_FREE): ... this.
+ 	(BITMAP_XFREE): Adjust.
+ 	(BITMAP_INIT_ONCE): Remove.
+ 	* bitmap.c (bitmap_obstack, bitmap_obstack_init, bitmap_free: Remove.
+ 	(bitmap_default_obstack): New.
+ 	(bitmap_elem_to_freelist): Adjust.
+ 	(bitmap_element_allocate): Adjust. Break initialization into ...
+ 	(bitmap_obstack_initialize): ... here.
+ 	(bitmap_release_memory): Replace with ...
+ 	(bitmap_obstack_release): ... this.
+ 	(bitmap_obstack_alloc, bitmap_malloc_alloc, bitmap_gc_alloc,
+ 	bitmap_obstack_free, bitmap_malloc_free): New.
+ 	(bitmap_ior_and_compl, bitmap_ior_and_compl_into): Use
+ 	bitmap_initialize.
+ 	(bitmap_initialize): Move to bitmap.h.
+ 	* gengtype.c (open_base_files): Add obstack.h to ifiles.
+ 	* Makefile.in (BASIC_BLOCK_H, REGS_H): Add obstack.h.
+ 	* basic-block.h (INIT_REG_SET): Allocate from reg_obstack.
+ 	(INITIALIZE_REG_SET): Remove.
+ 	(FREE_REG_SET): Use BITMAP_OBSTACK_FREE.
+ 	(INIT_ONCE_REG_SET, MAX_REGNO_REG_SET): Remove.
+ 	(flow_obstack): Do not declare.
+ 	(reg_obstack): Declare.
+ 	* regs.h: Include obstack.h.
+ 	* tree-optimize.c (tree_rest_of_compilation): Initialize and
+ 	release bitmap obstack here.
+ 	* bb-reorder.c: #include regs, not basic-block.
+ 	(fix_crossing_conditional_branches): Allocate regsets from
+ 	reg_obstack.
+ 	* bt-load.c: Do not inlude bitmap.h, sbitmap.h, basic-block.h or
+ 	obstack.h.
+ 	* caller-save.c: Include regs.h earlier.
+ 	* cfg.c: Do not include basic-block.h or obstack.h.
+ 	(reg_obstack): Define.
+ 	* cfganal.c: Include obstack.h
+ 	* cfgcleanyp.c: Do not include basic-block.h. Include regs.h
+ 	earlier.
+ 	* cfglayout.c: Do not include obstack.h.
+ 	(flow_obstack): Remove declaration.
+ 	(cfg_layout_duplicate_bb): Use reg_obstack.
+ 	* cfgloop.c, cfgloopanal.c, cfgloopmanip.c: Include obstack.h.
+ 	* cfgrtl.c (rtl_split_block): Use reg_obstack.
+ 	(force_nonfallthru_and_redirect, rtl_split_edge): Likewise.
+ 	(safe_insert_insn_on_edge): Use OBSTACK_ALLOC_REG_SET, adjust.
+ 	(cfg_layout_split_edge): Use reg_obstack.
+ 	* cse.c: Include regs.h earlier.
+ 	* ddg.c: Do not include basic-block.h.
+ 	* dominance.c: Inlude obstack.h.
+ 	* flow.c (update_life_info): Use OBSTACK_ALLOC_REG_SET, adjust.
+ 	(calculate_global_regs_live): Likewise.
+ 	(allocate_bb_life_data): Use reg_obstack.
+ 	(init_propagate_block_info): Use OBSTACK_ALLOC_REGSET.
+ 	* global.c: Do not include basic-block.h.
+ 	(build_insn_chain): Use OBSTACK_ALLOC_REG_SET, adjust.
+ 	* graph.c: Include obstack.h.
+ 	* haifa-sched.c: Do not include basic-block.h.
+ 	* ifcvt.c: Use OBSTACK_ALLOC_REG_SET, adjust.
+ 	* local-alloc.c: Do not include basic-block.h.
+ 	* loop-init.c, loop-invariant.c: Include obstack.h.
+ 	* loop-iv.c: Likewise.
+ 	(simplify_using_initial_values): Use OBSTACK_ALLOC_REG_SET,
+ 	adjust.
+ 	* loop-unroll.c, loop-unswitch.c: Inlude obstack.h.
+ 	* modulo-sched.c: Do not include basic-block.h.
+ 	* passes.c (rest_of_handle_final): Do not call
+ 	regset_release_memory.
+ 	* ra-debug.c: Include regs.h earlier. Do not include
+ 	basic-block.h.
+ 	* recog.c (peephole2_optimize): Use OBSTACK_ALLOC_REG_SET, adjust.
+ 	* regclass.c (init_reg_sets): Do not call INIT_ONCE_REG_SET.
+ 	(allocate_reg_info): Do not call MAX_REGNO_REG_SET.
+ 	(regset_release_memory): Remove.
+ 	* resource.c: Do not include basic-block.h.
+ 	* rtlanal.c: Do not include basic-block.h.
+ 	* sbitmap.c: Include obstack.h.
+ 	* sched-deps.c: Do not include basic-block.h.
+ 	(reg_pending_sets_head, reg_pending_clobbers_head,
+ 	reg_pending_uses_head): Remove.
+ 	(init_deps_global): Use OBSTACK_ALLOC_REG_SET.
+ 	* sched-ebb.c: Do not include basic-block.h.
+ 	* sched-rgn.c: Likewise.
+ 	* tree-if-conv.c (get_loop_body_in_if_conv_order): Use
+ 	BITMAP_XFREE.
+ 	* tree-outof-ssa.c (perform_edge_inserts): Use BITMAP_XFREE.
+ 	* tree-sra.c (decide_instantiations): Adjust bitmap
+ 	initialization.
+ 	* tree-ssa-dce.c: Include obstack.h.
+ 	* tree-ssa-pre.c (grand_bitmap_obstack): Make a bitmap_obstack.
+ 	(value_insert_into_set_bitmap): Remove useless bitmap_clear.
+ 	(bitmap_set_new): Likewise.
+ 	(init_pre): Initialize bitmap obstack.
+ 	(fini_pre): Release bitmap obstack.
+ 	* tree-ssanames.c (ssa_names_to_rewrite): Make static.
+ 	(marked_for_rewrite_p): ssa_names_to_rewrite is never NULL.
+ 	(mark_for_rewrite, unmark_for_rewrite): Likewise.
+ 	(marked_ssa_names): Likewise.
+ 	(init_ssanames): Use BITMAP_XMALLOC.
+ 	(fini_ssanames): Use BITMAP_XFREE.
+ 	* web.c: Include obstack.h
+ 
+ 2004-11-22  Nick Clifton  <nickc@redhat.com>
+ 
+ 	* sbitmap.c (sbitmap_union_of_preds): Set 'e' to the next edge
+ 	predecessor in the first for-loop.
+ 
+ 2004-11-21  Stan Shebs  <shebs@apple.com>
+ 
+ 	* config/rs6000/rs6000.c: (rs6000_darwin64_function_arg): Add
+ 	UNION_TYPE case.
+ 	(function_arg): Move darwin test up, sniff mode first for
+ 	efficiency, test for union type.
+ 
+ 2004-11-21  Dale Johannesen  <dalej@apple.com>
+ 
+ 	* config/darwin.h (JUMP_TABLES_IN_TEXT_SECTION):  Define.
+ 
+ 2004-11-21  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa.c (verify_use): Fix comment.
+ 	(verify_phi_args): Check that the number of incoming edges matches
+ 	the number of PHI arguments.  Check that each PHI argument is
+ 	either an SSA_NAME or an invariant.  Coalesce tests for PHIs for
+ 	dead or duplicated edges.  Clear e->aux earlier and avoid separate
+ 	loop to clear e->aux and test for missed edges.
+ 	(verify_ssa): Remove first walk over statements.  Move checking
+ 	of PHI args into verify_phi_args.  Move checking of statements
+ 	with aliased stores and V_MAY_DEFS into the remaining loop over
+ 	the statements.  Register defs by walking through the formal
+ 	SSA_NAME table.
+ 
+ 2004-11-21  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	PR middle-end/18520
+ 	* dojump.c (compare_from_rtx): Clarify mode argument in function
+ 	description.  Correct order of mode/cmp_mode arguments in call to
+ 	simplify_relational_operation.  Check "tem" for COMPARISON_P.
+ 
+ 2004-11-21  Paolo Bonzini  <bonzini@gnu.org>
+ 	    David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	PR target/17836
+ 	* config/rs6000/rs6000.c (rs6000_return_in_memory): Return
+ 	synthetic vectors in memory.
+ 	(function_arg_boundary): Align large synthetic vectors.
+ 	(rs6000_pass_by_reference): Pass synthetic vectors in memory.
+ 
+ 2004-11-21  Jeff Law  <law@redhat.com>
+ 
+ 	* cfg.c (update_bb_profile_for_threading): Do not rescale the
+ 	successor probabilities if they are not going to change.  Pull
+ 	division out of loop if we do need to rescale successor probabilities.
+ 
+ 	* tree-ssa-threadupdate.c (redirection_data_hash): Use the
+ 	index of the destination block for the hash value rather than
+ 	hashing a pointer.
+ 
+ 2004-11-20  Joseph S. Myers  <joseph@codesourcery.com>
+ 
+ 	* c-typeck.c (build_array_ref): Don't check for index == 0.  Make
+ 	checks for neither argument being an array or pointer (swapping
+ 	the arguments if necessary), the array argument being a pointer to
+ 	or array of functions and for -Wchar-subscripts warnings upfront.
+ 
+ 2004-11-20  Jeff Law  <law@redhat.com>
+ 
+ 	* regrename.c (copyprop_hardreg_forward): Only search for a
+ 	previously processed block if the current block only has one
+ 	predecessor.
+ 
+ 2004-11-20  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-ssa-threadupdate.c, tree-vectorizer.c: Fix comment
+ 	typos.
+ 	* config/arm/arm.c: Follow spelling conventions.
+ 
+ 2004-11-20  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* arm.c (arm_override_options): Use arm_ld_sched rather than testing
+ 	a bit in tune_flags.
+ 	(const_double_needs_minipool): Likewise.  Split most of the code out
+ 	into ...
+ 	(arm_const_double_inline_cost): ... new function here.
+ 	* arm-protos.h (arm_const_double_inline_cost): Add prototype.
+ 	* arm.h (EXTRA_CONSTRAINT_STR_ARM): Add D[abc] constraints for double-
+ 	word constants of length 2, 3 and 4 insns respectively.
+ 	(CONSTRAINT_LEN): The 'D' prefix is a 2-letter constraint.
+ 	* arm.md (arm_movdi, movdf_soft_insn): Add alternatives for D[abc]
+ 	constraints.  Set insn lenghts accordingly.
+ 
+ 2004-11-19  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-threadupdate.c: Replace REDIRECTION_DATA varray with
+ 	a hash table.  Extensive modifications throughout to support
+ 	that change.
+ 	(struct el): New.
+ 	(struct local_info): New.
+ 	(struct redirection_data): Add new INCOMING_EDGES and DO_NOT_DUPLICATE
+ 	fields.
+ 	(redirection_data): Now a hashtable.
+ 	(redirection_data_hash, redirection_data_eq): New.
+ 	(lookup_redirection_data, create_duplicates): New.
+ 	(create_edge_and_update_destionation_phis): New.
+ 	(fixup_template_block, redirect_edges): New.
+ 	(thread_block): Use hash table traversals instead of loops over
+ 	varray entries or incoming edge vectors.
+ 
+ 2004-11-19  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* basic-block.h (edge_def): Add dest_idx.
+ 	* cfg.c (unchecked_make_edge): Initialize dest_idx.
+ 	(remove_edge): Simplify the disconnection of an edge from its
+ 	destination.
+ 	(redirect_edge_succ): Likewise.
+ 	* cfghooks.c (verify_flow_info): Check the consistency of
+ 	dest_idx for each edge.
+ 
+ 2004-11-19  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* simplify-rtx.c (simplify_ternary_operation): Use
+ 	gen_int_mode.
+ 
+ 2004-11-19  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-cfg.c (reinstall_phi_args): New.
+ 	(tree_split_edge): Use it after redirecting an edge.  Don't
+ 	modify PHI_ARG_EDGE.
+ 
+ 2004-11-19  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* tree-vectorizer.c (slpeel_verify_cfg_after_peeling): Define only
+ 	if checking is enabled.
+ 
+ 2004-11-19  Joseph S. Myers  <joseph@codesourcery.com>
+ 
+ 	* c-decl.c (push_scope): Remove "\n" from end of diagnostic for
+ 	too many nested scopes.
+ 
+ 2004-11-19  Dorit Naishlos  <dorit@il.ibm.com>
+ 
+ 	PR tree-opt/18181
+ 	* tree-vectorizer.c (slpeel_tree_peel_loop_to_edge): Peeling scheme
+ 	changed to suppoer uses-after-loop and to void creating flow paths
+ 	that shouldn't exist.
+ 	(slpeel_update_phi_nodes_for_guard): Takes additional two arguments.
+ 	Modified to fit the new peeling scheme. Avoid quadratic behavior.
+ 	(slpeel_add_loop_guard): Takes additional argument.
+ 	(slpeel_verify_cfg_after_peeling): New function.
+ 	(vect_update_ivs_after_vectorizer): Takes additional argument. Updated
+ 	documentation. Use 'exit-bb' instead of creating 'new-bb'.
+ 	(rename_variables_in_bb): Don't update phis for BBs out of loop, to fit
+ 	the new peeling scheme.
+ 	(copy_phi_nodes): Function removed. Its functionality moved to
+ 	update_phis_for_duplicate_loop.
+ 	(slpeel_update_phis_for_duplicate_loop): Functionality of copy_phi_nodes
+ 	moved here. Added documentation. Modified to fit the new peeling scheme.
+ 	(slpeel_make_loop_iterate_ntimes): Setting loop->single_exit not not
+ 	needed - done in slpeel_tree_peel_loop_to_edge.
+ 	(slpeel_tree_duplicate_loop_to_edge_cfg): Debug printouts compacted.
+ 	(vect_do_peeling_for_loop_bound): Add documentation. Call
+ 	slpeel_verify_cfg_after_peeling. Call vect_update_ivs_after_vectorizer
+ 	with additional argument.
+ 	(vect_do_peeling_for_alignment): Call slpeel_verify_cfg_after_peeling.
+ 
+ 	(vect_finish_stmt_generation): Avoid 80 column oveflow.
+ 
+ 2004-11-19  Dorit Naishlos  <dorit@il.ibm.com>
+ 
+ 	* tree-vectorizer.c (slpeel_make_loop_iterate_ntimes): Last two
+ 	arguments removed.
+ 	(slpeel_tree_peel_loop_to_edge): Call slpeel_make_loop_iterate_ntimes
+ 	without last two arguments. Update single_exit of loops.
+ 	(vect_update_niters_after_peeling): Removed. Its functionality was
+ 	moved to vect_do_peeling_for_alignment.
+ 	(vect_do_peeling_for_loop_bound): New name for function previously
+ 	called vect_transform_for_unknown_loop_bound.
+ 	(vect_transform_loop_bound): Call slpeel_make_loop_iterate_ntimes
+ 	instead of code that duplicates the same functionality.
+ 	(vect_do_peeling_for_alignment): Functionality of
+ 	vect_update_niters_after_peeling moved here.
+ 	(vect_transform_loop): Unify call to vect_do_peeling_for_loop_bound -
+ 	previously named vect_transform_for_unknown_loop_bound - for both known
+ 	and unknown loop bound cases.
+ 
+ 2004-11-19  Dorit Naishlos  <dorit@il.ibm.com>
+ 
+ 	* tree-vectorizer.c (slpeel_can_duplicate_loop_p): New name for function
+ 	previously called verify_loop_for_duplication. All conditions compacted
+ 	into one compound condition. Removed debug dumps.
+ 	(vect_analyze_loop_with_symbolic_num_of_iters): Removed. Some of the
+ 	functionality moved to vect_can_advance_ivs_p, and some to
+ 	vect_analyze_loop_form.
+ 	(vect_can_advance_ivs_p): New function. Contains functionality that was
+ 	taken out of vect_analyze_loop_with_symbolic_num_of_iters.
+ 	(slpeel_tree_peel_loop_to_edge): Call slpeel_can_duplicate_loop_p.
+ 	(vect_analyze_operations): Call vect_can_advance_ivs_p and
+ 	slpeel_can_duplicate_loop_p.
+ 	(vect_get_loop_niters): Added documentation.
+ 	(vect_analyze_loop_form): Check the loop entry always - not only in case
+ 	of unknown loop bound. Create preheader and exit bb if necessary. Apply
+ 	a check that used to take place in
+ 	vect_analyze_loop_with_symbolic_num_of_iters.
+ 	(vectorize_loops): Call verify_loop_closed_ssa under ENABLE_CHECKING.
+ 	Remove redundant call to rewrite_into_loop_closed_ssa.
+ 	(vect_compute_data_refs_alignment): Removed obsolete comment.
+ 
+ 2004-11-19  Dorit Naishlos  <dorit@il.ibm.com>
+ 
+ 	* tree-vectorizer.c (slpeel_tree_peel_loop_to_edge): New name for
+ 	function previously called tree_duplicate_loop_to_edge.
+ 	(slpeel_tree_duplicate_loop_to_edge_cfg): New name for function
+ 	previously called tree_duplicate_loop_to_edge_cfg.
+ 	(slpeel_update_phis_for_duplicate_loop): Prefix 'slpeel' added to
+ 	function name.
+ 	(slpeel_update_phi_nodes_for_guard): Likewise.
+ 	(slpeel_make_loop_iterate_ntimes): Likewise.
+ 	(slpeel_add_loop_guard): Likewise.
+ 	(allocate_new_names, free_new_names): Function declaration moved to top
+ 	of file.
+ 	(rename_use_op, rename_def_op): Likewise.
+ 	(rename_variables_in_bb, rename_variables_in_loop): Likewise.
+ 	(vect_generate_tmps_on_preheader): Function declaration moved.
+ 	(vect_transform_for_unknown_loop_bound): Added missing function
+ 	declaration.
+ 
+ 2004-11-19  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR tree-opt/18507
+ 	* tree-flow.h (tree_on_heap): Typedef because there is already a VEC(tree).
+ 	Define a VEC(tree_on_heap) for head.
+ 	(register_new_def): Change second argument to be a VEC(tree_on_heap).
+ 	* tree-ssa-dom.c (block_defs_stack): Change to be a VEC(tree_on_heap).
+ 	(tree_ssa_dominator_optimize): Initialize block_defs_stack with
+ 	the VEC(tree_on_heap) function.  Also free it before returning.
+ 	(dom_opt_initialize_block): Use VEC_safe_push instead of VARRAY_PUSH_TREE
+ 	for block_defs_stack.
+ 	(restore_currdefs_to_original_value): Use VEC_length instead of
+ 	VARRAY_ACTIVE_SIZE. VEC_pop instead of VARRAY_TOP_TREE/VARRAY_POP.
+ 	(dom_opt_finalize_block): Use VEC_safe_push instead of VARRAY_PUSH_TREE
+ 	for block_defs_stack.
+ 	* tree-into-ssa.c (block_defs_stack): Change to be a VEC(tree_on_heap).
+ 	(rewrite_initialize_block): Use VEC_safe_push instead of VARRAY_PUSH_TREE
+ 	for block_defs_stack.
+ 	(ssa_register_new_def): Likewise.
+ 	(ssa_rewrite_initialize_block): Likewise.
+ 	(rewrite_finalize_block): Use VEC_length instead of
+ 	VARRAY_ACTIVE_SIZE. VEC_pop instead of VARRAY_TOP_TREE/VARRAY_POP.
+ 	(ssa_rewrite_finalize_block): Likewise.
+ 	(register_new_def): Change second argument to be a VEC(tree_on_heap).
+ 	Use VEC_safe_push instead of VARRAY_PUSH_TREE.
+ 	(rewrite_blocks): Initialize block_defs_stack with
+ 	the VEC(tree_on_heap) function.  Also free it before returning.
+ 	(rewrite_ssa_into_ssa): Likewise.
+ 
+ 2004-11-19  Fariborz Jahanian <fjahanian@apple.com>
+ 
+ 	* config/darwin.c (machopic_data_defined_p): return 1 for
+ 	MACHOPIC_DEFINED_FUNCTION.
+ 
+ 2004-11-19  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa.c (verify_ssa): Remove redundant checking of PHI
+ 	arguments.
+ 
+ 2004-11-19  Paul Brook  <paul@codesourcery.com>
+ 
+ 	PR target/17735
+ 	* varasm.c (default_assemble_integer): Allow pointer-sized values.
+ 	Expand comment.
+ 
+ 2004-11-19  Nick Clifton  <nickc@redhat.com>
+ 
+ 	* config/stormy16/stormy16.c (combine_bnp): Add code to handle
+ 	zero_extension and lshiftrt insns.
+ 	Replace uses of XEXP(...) with either SET_DEST() or SET_SRC()
+ 	where appropriate.
+ 	* config/stormy16.stormy16.md (bclrx3, bsetx3): New patterns
+ 	to handle bp and bn insn patterns with a zero_extend rtx
+ 	inside them.
+ 
+ 2004-11-19  Ian Lance Taylor  <ian@wasabisystems.com>
+ 
+ 	* config/arm/arm.md (generic_sched): Make const.
+ 
+ 2004-11-19  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* emit-rtl.c (classify_insn): Make it static.
+ 	* rtl.h: Remove the corresponding prototype.
+ 
+ 	* integrate.c (has_func_hard_reg_initial_val,
+ 	get_func_hard_reg_initial_val): Make them static.
+ 	* integrate.h: Remove the corresponding prototypes.
+ 
+ 2004-11-19  Ben Elliston  <bje@au.ibm.com>
+ 
+ 	* dwarf2asm.h (dw2_asm_output_pcel): Stub out with #if 0.
+ 	(dw2_asm_output_delta_sleb128): Likewise.
+ 	* dwarf2asm.c (dw2_asm_output_pcrel): Likewise.
+ 	(dw2_asm_output_delta_sleb128): Likewise.
+ 
+ 2004-11-19  Adam Nemet  <anemet@lnxw.com>
+ 
+ 	* tree-ssa-alias.c: Fix comment.
+ 
+ 2004-11-19  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-outof-ssa.c: Fix a comment typo.
+ 
+ 2004-11-19  Ben Elliston  <bje@au.ibm.com>
+ 
+ 	* predict.h (predict_insn): Remove extern declaration.
+ 	* predict.c (predict_insn): Make static.
+ 
+ 2004-11-19  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* config/rs6000/rs6000.c (function_arg): Don't return BLKmode regs.
+ 
+ 2004-11-18  Nicolas Pitre <nico@cam.org>
+ 
+ 	* config/arm/arm.c (const_double_needs_minipool): New function to
+ 	determine if a CONST_DOUBLE should be pushed to the minipool.
+ 	(note_invalid_constants): Use it.
+ 
+ 2004-11-18  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/arm.c (target_float_switch): New variable..
+ 	(arm_override_options): Use TARGET_DEFAULT_FLOAT_ABI and
+ 	target_float_switch.
+ 	* config/arm/arm.h (target_float_switch): Declare.
+ 	(ARM_FLAG_SOFT_FLOAT): Remove.
+ 	(TARGET_SWITCHES): Remove hard-float and soft-float.
+ 	(TARGET_OPTIONS): Add hard-float and soft-float.
+ 	(TARGET_DEFAULT_FLOAT_ABI): Define.
+ 	* config/arm/coff.h (TARGET_DEFAULT_FLOAT_ABI): Define
+ 	(TARGET_DEFAULT): Don't use ARM_FLAG_SOFT_FLOAT.
+ 	* config/arm/elf.h: Don't use ARM_FLAG_SOFT_FLOAT.
+ 	* config/arm/netbsd-elf.h: Ditto.
+ 	* config/arm/netbsd.h: Ditto.
+ 	* config/arm/pe.h: Ditto.
+ 	* config/arm/unknown-elf.h: Ditto.
+ 	* config/arm/wince-pe.h: Ditto.
+ 	* config/arm/linux-elf.h (TARGET_DEFAULT_FLOAT_ABI): Define.
+ 	* config/arm/semi.h (TARGET_DEFAULT_FLOAT_ABI): Define.
+ 	* config/arm/semiaof.h (TARGET_DEFAULT_FLOAT_ABI): Define.
+ 
+ 2004-11-18  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* config/rs6000/altivec.md (VI, VF, V): New mode macros.
+ 	(altivec_lvx_4si, altivec_lvx_8hi, altivec_lvx_16qi,
+ 	altivec_lvx_4sf): Rename and replace with ...
+ 	(altivec_lvx_<mode>): ... mode macro version.
+ 	(altivec_stvx_4si, altivec_stvx_8hi, altivec_stvx_16qi,
+ 	altivec_stvx_4sf): Rename and replace with ...
+ 	(altivec_stvx_<mode>): ... mode macro version.
+ 	(movv4si, movv8hi, movv16qi, movv4sf}): Replace with ...
+ 	(mov<mode>): ... mode macro version.
+ 	(*movv4si_internal, *movv8hi_internal1, *movv16qi_internal1,
+ 	*movv4sf_internal1): Replace with ...
+ 	(*mov<mode>_internal): ... mode macro version.
+ 	(get_vrsave_internal, *set_vrsave_internal, *save_world,
+ 	*restore_world): Unquote output statements.
+ 	* config/rs6000/rs6000.c (altivec_expand_ld_builtin,
+ 	altivec_expand_st_builtin): Adjust insn names.
+ 
+ 2004-11-18  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_complex_function_value): Revert
+ 	previous change.
+ 	(rs6000_override_options): Likewise.
+ 	(spe_build_register_parallel): Handle complex doubles on e500v2.
+ 	(rs6000_spe_function_arg): Likewise.
+ 	(function_arg): Likewise.
+ 	(rs6000_function_value): Likewise.
+ 	(rs6000_libcall_value): Likewise.
+ 
+ 2004-11-18  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* ifcvt.c (find_if_block): Move the check for the number of edges
+ 	above the loops checking for complex edges.
+ 	Remove the counting of edges as we use EDGE_COUNT now.
+ 
+ 2004-11-18  Kazuhiro Inaoka <inaoka.kazuhiro@renesas.comn>
+ 
+ 	* config/m32r/linux.h (TARGET_ASM_FILE_END): Set
+ 	TARGET_ASM_FILE_END to file_end_indicate_exec_stack.3
+ 
+ 2004-11-18  Andreas Schwab  <schwab@suse.de>
+ 
+ 	* config/i386/i386.md (define_peephole2): Revert last change.
+ 
+ 2004-11-18  Kazuhiro Inaoka <inaoka.kazuhiro@renesas.comn>
+ 
+ 	* config/m32r/linux.h (TARGET_ASM_FILE_END): Set
+ 	TARGET_ASM_FILE_END to file_end_indicate_exec_stack.
+ 
+ 2004-11-18  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-propagate.c (ssa_prop_init): Use FOR_ALL_BB instead
+ 	of FOR_EACH_BB.
+ 
+ 2004-11-18  Jon Grimm <jgrimm2@us.ibm.com>
+ 
+ 	* Makefile.in (macro_list): Depend on s-macro_list.
+ 	(s-macro_list): New target.
+ 
+ 2004-11-18  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	PR target/17107
+ 	* fold-const.c (RANGE_TEST_NON_SHORT_CIRCUIT): Rename to ...
+ 	(LOGICAL_OP_NON_SHORT_CIRCUIT): ... here.
+ 	(fold_range_test): Adjust.
+ 	(fold_truthop): Use it.
+ 	* config/rs6000/rs6000.h (RANGE_TEST_NON_SHORT_CIRCUIT): Rename to ...
+ 	(LOGICAL_OP_NON_SHORT_CIRCUIT): ... here.
+ 
+ 2004-11-18  Uros Bizjak  <uros@kss-loka.si>
+ 
+ 	* configure/i386/i386.md (*fix_trunch_1): Add "&& 1" to
+ 	insn split constraint.
+ 	(define_peephole2): Remove unneeded "&& 1" from peephole2
+ 	constraints.
+ 
+ 2004-11-18  Ben Elliston  <bje@au.ibm.com>
+ 
+ 	* doc/cfg.texi (Maintaining the CFG): Remove duplicated @item
+ 	element for bsi_prev; use @findex instead.
+ 
+ 2004-11-18  Ben Elliston  <bje@au.ibm.com>
+ 
+ 	* opts.h (add_input_filename): Remove extern declaration.
+ 	* opts.c (add_input_filename): Make static.
+ 
+ 2004-11-17  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* config/i386/i386.c (i386_solaris_elf_named_section): Mark with
+ 	ATTRIBUTE_UNUSED.
+ 
+ 2004-11-17  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* defaults.h, config/darwin.h: Don't define TARGET_SUPPORTS_HIDDEN.
+ 	* system.h: Poison it.
+ 	* doc/tm.texi: Delete its documentation.
+ 
+ 2004-11-18  Daniel Jacobowitz  <dan@codesourcery.com>
+ 	    Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* config/i386/sol2-10.h, config/i386/t-sol2-10: New files.
+ 	* config/i386/i386.c (i386_solaris_elf_named_section): New
+ 	function.
+ 	* config.gcc (i[34567]86-*-solaris2*): Handle Solaris 2.10.
+ 	* config/i386/sol2.h (ASM_PREFERRED_EH_DATA_FORMAT): Handle
+ 	64-bit.
+ 	(ASM_QUAD): Don't undefine for biarch targets.
+ 	* config/i386/t-sol2: Introduce multilib support.
+ 
+ 2004-11-18  Ben Elliston  <bje@au.ibm.com>
+ 
+ 	* cgraphunit.c: Replace "it's" with "its" and fix a typo.
+ 
+ 2004-11-18  Ben Elliston  <bje@au.ibm.com>
+ 
+ 	* cgraph.h: Replace "it's" with "its" throughout.
+ 
+ 2004-11-18  Ben Elliston  <bje@au.ibm.com>
+ 
+ 	* doc/rtl.texi (Flags): Grammar fix.
+ 
+ 2004-11-17  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* expmed.c (alg_code): Add alg_unknown.
+ 	(alg_hash_entry): New.
+ 	(NUM_ALG_HASH_ENTRIES): Likewise.
+ 	(alg_hash): Likewise.
+ 	(synth_mult): Cache the result into alg_hash.
+ 
+ 2004-11-17  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* config/rs6000/t-darwin: Augment SHLIB_MAPFILES with
+ 	config/rs6000/libgcc-ppc64.ver.
+ 
+ 2004-11-17  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* cfgrtl.c (rtl_verify_flow_info): Don't use INSN_P when
+ 	checking if an unconditional return is followed by a barrier.
+ 
+ 	* jump.c (condjump_p): Remove unreachable code.
+ 
+ 	* basic-block.h, c-common.h, df.h, expr.h, output.h, rtl.h,
+ 	tree-chrec.h, tree-flow.h, tree-scalar-evolution.h,
+ 	tree-ssa-live.h, tree.h: Remove unused prototypes.
+ 
+ 2004-11-17  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-cfg.c (edge_to_cases): Renamed from edge_to_case_leader.
+ 	(edge_to_cases_elt): Renamed from edge_to_case_leader.
+ 	(edge_to_cases_hash): Renamed from edge_to_case_leader_hash.
+ 	(edge_to_cases_eq): Renamed from edge_to_case_leader_eq.
+ 	(edge_to_cases_cleanup, recording_case_labels_p): New functions.
+ 	(get_cases_for_edge): New function.
+ 	(start_recording_case_labels, end_recording_case_labels): Similarly.
+ 	(record_switch_edge): Don't muck with the CASE_LABEL.  Instead
+ 	chain equivalent CASE_LABEL_EXPRs together.
+ 	(get_case_leader_for_edge, get_case_leader_for_edge_hash): Kill.
+ 	(make_switch_expr_edges): Do not record edge/cases here.
+ 	(cleanup_tree_cfg): Record cases around the call to thread_jumps.
+ 	(split_critical_edges): Record cases around the edge splitting code.
+ 	(cleanup_dead_labels): Use CASE_LABEL again.
+ 	(tree_redirect_edge_and_branch): If we have a mapping from edge
+ 	to cases, use it to handle redirections.  Else do it the slow way.
+ 	* tree.h (CASE_LEADER_OR_LABEL): Kill.
+ 	(CASE_LABEL): Revert to just looking at the tree's second operand.
+ 	* tree.c (get_case_label): Kill.
+ 
+ 2004-11-17  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	PR tree-optimization/18307
+ 	* tree-ssa-alias.c (merge_pointed_to_info): ICE if 'dest' and
+ 	'orig' are the same node.
+ 	(collect_points_to_info_r): Do not call merge_pointed_to_info
+ 	when the PHI argument is identical to the LHS.
+ 
+ 2004-11-17  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* tree-ssa-propagate.c (cfg_blocks_add): Assert we're not trying
+ 	to insert the exit or entry block.
+ 	(ssa_prop_init): Use add_control_edge to seed the algorithm.
+ 
+ 2004-11-16  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* mkmap-flat.awk, mkmap-symver.awk: If the last version
+ 	assigned to a symbol was '%exclude', do not emit it anywhere.
+ 	If leading_underscore is true, prefix all symbols from the
+ 	version scripts with a leading underscore before comparing
+ 	them with nm output or emitting them.  Remove support for dot
+ 	symbols.
+ 	* config/t-slibgcc-darwin (SHLIB_LINK): Use mkmap-flat.awk.
+ 	(SHLIB_MAPFILES): Use libgcc-std.ver.
+ 	(SHLIB_MKMAP_OPTS): Enable leading-underscore mode.
+ 	(SHLIB_LINK): Add -Wl,-exported_symbols_list,$(SHLIB_MAP).
+ 	* config/sh/t-linux: Use the normal libgcc-std.ver, plus
+ 	libgcc-excl.ver and libgcc-glibc.ver.
+ 
+ 	* config/sh/libgcc-excl.ver: New file.
+ 	* config/sh/libgcc-std.ver, libgcc-darwin.ver: Delete.
+ 
+ 2004-11-16  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* lambda-code.c (lambda_loopnest_to_gcc_loopnest): Swap
+ 	the test when the edge has the opposite meaning, not when
+ 	the first argument is invariant.
+ 
+ 2004-11-16  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_override_options): Split e500v2
+ 	doubles.
+ 	(rs6000_complex_function_value): Handle e500 v2 variant.
+ 
+ 2004-11-16  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	Fix PR tree-optimization/18519
+ 
+ 	* tree-optimize (execute_todo): Add case for TODO_cleanup_cfg.
+ 	* tree-pass.h: Add TODO_cleanup_cfg.
+ 	* tree-ssa-ccp.c (pass_ccp): Use TODO_cleanup_cfg.
+ 	(ccp_finalize): Remove call to cleanup_cfg.
+ 	* tree-ssa-dce.c (pass_dce): Use TODO_cleanup_cfg and TODO_dump_func.
+ 	(pass_cd_dce): Ditto.
+ 	(perform_tree_ssa_dce): Remove call to cleanup_cfg,
+ 	dump_function_to_file.
+ 	* tree-ssa-loop-ch.c (copy_loop_headers): Remove call
+ 	to cleanup_cfg.
+ 	(pass_ch): Add TODO_cleanup_cfg.
+ 	* tree-ssa-loop.c (tree_ssa_loop_done): Remove call to
+ 	cleanup_cfg.
+ 	(pass_loop_done): Add TODO_cleanup_cfg.
+ 	* tree-ssa-phiopt.c (pass_phiopt): Ditto.
+ 	(tree_ssa_phiopt): Remove call to cleanup_cfg.
+ 
+ 2004-11-16  Devang Patel  <dpatel@apple.com>
+ 
+ 	* optabs.c (vector_compare_rtx): Fix COMPARISON_CLASS_P use.
+ 
+ 2004-11-16  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* expmed.c, ra-colorize.c: Fix comment typos.
+ 
+ 	* doc/tm.texi: Fix typos.
+ 
+ 2004-11-16  Daniel Jacobowitz  <dan@codesourcery.com>
+ 	    Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	PR target/6123
+ 	* config/sol2.h (TARGET_OS_CPP_BUILTINS): Define __PIC__ and
+ 	__pic__ if PIC.
+ 
+ 2004-11-16  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* regmove.c (regmove_optimize): Use lowpart_subreg instead of
+ 	gen_rtx_SUBREG with incorrect offset to compute SRC_SUBREG.
+ 
+ 2004-11-16  Devang Patel  <dpatel@apple.com>
+ 
+ 	* tree-if-conv.c (clean_predicate_lists): Update gcc_assert check.
+ 
+ 2004-11-16  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* config/mips/mips.c: Use rtl _P predicates.
+ 	* config/mips/mips.h: Ditto.
+ 	* config/mips/mips.md: Ditto.
+ 
+ 2004-11-16  Fariborz Jahanian <fjahanian@apple.com>
+ 
+ 	* config/rs6000/altivec.md (altivec_vandc): Canonicalize
+ 	the pattern.
+ 
+ 2004-11-16  Andreas Krebbel  <krebbel1@de.ibm.com>
+ 
+ 	* config/s390/s390.c (s390_cc_modes_compatible): New function.
+ 	(TARGET_CC_MODES_COMPATIBLE): Target macro defined.
+ 
+ 2004-11-16  Kaz Kojima  <kkojima@gcc.gnu.org>
+ 
+ 	PR target/18447
+ 	* config/sh/sh.c (prepare_move_operands): Emit blockage insns
+ 	before and after the insns for getting GOT address in non-PIC
+ 	TLS_MODEL_INITIAL_EXEC tls sequence when the first scheduling
+ 	is enabled.
+ 
+ 2004-11-16  Andreas Krebbel  <krebbel1@de.ibm.com>
+ 
+ 	* gcc/cse.c (struct change_cc_mode_args): New structure.
+ 	(cse_change_cc_mode_insn): New function.
+ 	(cse_change_cc_mode): Use validate_change to perfom changes.
+ 	(cse_change_cc_mode_insns, cse_condition_code_reg):
+ 	Call cse_change_cc_mode_insn.
+ 
+ 2004-11-16  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* stack.h: Remove.
+ 
+ 2004-11-16  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* config/i386/i386.c (x86_schedule): Fix typo, m_K6 intead of m_K8.
+ 
+ 2004-11-15  Dale Johannesen  <dalej@apple.com>
+ 
+ 	* tree-flow.h (add_referenced_temp_var):  Remove name from prototype.
+ 
+ 2004-11-15  Dale Johannesen  <dalej@apple.com>
+ 
+ 	* profile.c (compute_branch_probabilities):  Prevent
+ 	crash with EH in RTL-based profiling.
+ 
+ 2004-11-16  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-cfg.c (verify_expr): Replace TREE_OPERAND with
+ 	COND_EXPR_COND.
+ 	* tree-if-conv.c (tree_if_convert_cond_expr): Likewise.
+ 	* tree-ssa-dom.c (thread_across_edge): Likewise.
+ 	* tree-vectorizer.c (vect_transform_loop_bound): Replace
+ 	TREE_OPERAND with COND_EXPR_COND, COND_EXPR_THEN, or
+ 	COND_EXPR_ELSE.
+ 
+ 	* tree-cfg.c (bsi_commit_edge_inserts): Remove an argument.
+ 	(tree_flow_call_edges_add): Update the call to
+ 	bsi_commit_edge_inserts.
+ 	* lambda-code.c (lambda_loopnest_to_gcc_loopnest): Likewise.
+ 	* profile.c (branch_prob): Likewise.
+ 	* tree-mudflap.c (mf_decl_cache_locals): Likewise.
+ 	* tree-sra.c (scalarize_function): Likewise.
+ 	* tree-ssa-loop-im.c (loop_commit_inserts): Likewise.
+ 	* tree-ssa-pre.c (fini_pre): Likewise.
+ 	* tree-flow.h: Update the prototype for
+ 	bsi_commit_edge_inserts.
+ 
+ 2004-11-15  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* sched-deps.c (set_sched_group_p): Delete.
+ 	(delete_all_dependencies): New function.
+ 	(fixup_sched_groups): Use. New function.
+ 	(sched_analyze_insn): Use.
+ 
+ 2004-11-15  Joseph S. Myers  <joseph@codesourcery.com>
+ 
+ 	* c-common.c (binary_op_error): Don't allow LROTATE_EXPR,
+ 	RROTATE_EXPR or unknown code.
+ 	* c-typeck.c (build_binary_op): Don't allow RROTATE_EXPR,
+ 	LROTATE_EXPR, MAX_EXPR, MIN_EXPR, UNORDERED_EXPR, ORDERED_EXPR,
+ 	UNLT_EXPR, UNLE_EXPR, UNGT_EXPR, UNGE_EXPR, UNEQ_EXPR, LTGT_EXPR
+ 	or unknown code.
+ 
+ 2004-11-15  Joseph S. Myers  <joseph@codesourcery.com>
+ 
+ 	PR c/18498
+ 	* c-decl.c (grokdeclarator): Call check_bitfield_type_and_width
+ 	after processing the declarator.
+ 
+ 2004-11-15  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* config/rs6000/altivec.md ("altivec_vsplth"): Rewrite with
+ 	vec_duplicate.
+ 	(altivec_vspltb): Same.
+ 	(altivec_vspltw): Same.
+ 	(altivec_vspltisb): Same.
+ 	(altivec_vspltish): Same.
+ 	(altivec_vspltisw): Same.
+ 	(altivec_vspltisw_v4sf): Same.
+ 	(define_constants): Remove UNSPEC_VSPLTISB, UNSPEC_VSPLTISW,
+ 	UNSPEC_VSPLTISH.
+ 	Move "End of vector xor's" comment to the right place.
+ 
+ 2004-11-15  Steve Ellcey  <sje@cup.hp.com>
+ 
+ 	* config/ia64/ia64.md (*movtf_internal):  Use destination_operand
+ 	instead of nonimmediate_operand.
+ 
+ 2004-11-15  Mark Mitchell <mark@codesourcery.com>
+ 
+ 	* config/i386/sol2.h (ASM_OUTPUT_CALL): Use print_operand.
+ 	* config/sparc/sol2.h (ASM_OUTPUT_CALL): Likewise.
+ 	* config/sol2.c (solaris_output_init_fini): Update calls to
+ 	ASM_OUTPUT_CALL.  Include "rtl.h".
+ 
+ 2004-11-15  Mark Mitchell <mark@codesourcery.com>
+ 
+ 	* config/sol2-c.c (cmn_err_char_table): Add "p".
+ 
+ 2004-11-15  Mark Mitchell <mark@codesourcery.com>
+ 
+ 	* config/sparc/sol2.h (SUPPORTS_INIT_PRIORITY): Remove.
+ 	* config/sol2.h (SUPPORTS_INIT_PRIORITY): Define here.
+ 
+ 2004-11-15  Mark Mitchell <mark@codesourcery.com>
+ 
+ 	* config/t-slibgcc-sld (SHLIB_LINK): Make symlinks entirely
+ 	within the multilib directory.
+ 
+ 2004-11-15  Nick Clifton  <nickc@redhat.com>
+ 
+ 	* config/stormy16/stormy16.h (TARGET_CPU_CPP_BUILTINS): Add
+ 	builtin assert of cpu=xstormy16.
+ 
+ 2004-11-15  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* tree-ssa-pre.c (bitmap_print_value_set): Fix uninitialized
+ 	variable.
+ 
+ 2004-11-14  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR 18480
+ 	* calls.c (struct arg_data): Add parallel_value.
+ 	(precompute_register_parameters): Set it.
+ 	(load_register_parameters): Use it.
+ 	(store_one_arg): Also set it here.
+ 
+ 2004-11-14  Zdenek Dvorak  <dvorakz@suse.cz>
+ 
+ 	PR tree-optimization/18431
+ 	* fold-const.c (associate_trees): Do not produce x + 0.
+ 	(fold_widened_comparison, fold_sign_changed_comparison): New functions.
+ 	(fold): Use them.
+ 	* tree-ssa-loop-niter.c (upper_bound_in_type, lower_bound_in_type):
+ 	Moved ...
+ 	* tree.c (upper_bound_in_type, lower_bound_in_type): Here.
+ 	* tree.h (upper_bound_in_type, lower_bound_in_type): Declare.
+ 
+ 2004-11-14  Eric Botcazou <ebotcazou@libertysurf.fr>
+ 
+ 	* doc/rtl.texi (SUBREG): Adjust BYTENUM value in example.
+ 
+ 2004-11-14  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* cfgrtl.c, global.c, tree-ssa-copy.c, tree-ssa-loop-ivopts.c,
+ 	value-prof.c: Fix comment typos.
+ 
+ 2004-11-14  Stan Shebs  <shebs@apple.com>
+ 
+ 	Basic ABI changes for passing structs by value in 64-bit Darwin.
+ 	* config/rs6000/rs6000.c (rs6000_darwin64_abi): New flag.
+ 	(rs6000_override_options): Set it for 64-bit Darwin.
+ 	(rs6000_parse_abi_options): Add testing options to change it.
+ 	(rs6000_return_in_memory): Test whether the type is one
+ 	that can be passed in registers.
+ 	(darwin64_function_arg_advance): New.
+ 	(function_arg_advance): Call it, plus add recursion depth
+ 	argument and test when counting off arguments.
+ 	(rs6000_darwin64_function_arg): New.
+ 	(function_arg): Call it.
+ 	(setup_incoming_varargs): Add argument to function_arg_advance.
+ 	(rs6000_darwin64_function_value): New.
+ 	(rs6000_function_value): Call it.
+ 	* config/rs6000/rs6000.h (FUNCTION_ARG_ADVANCE): Pass depth arg.
+ 	* config/rs6000/rs6000-protos.h: Update decl of
+ 	function_arg_advance.
+ 
+ 2004-11-14  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR c/17279
+ 	* c-common.c (c_common_nodes_and_builtins): Ask the back-end if we
+ 	support TImode before adding __int128_t and __uint128_t types.
+ 
+ 2004-11-14  Dorit Naishlos  <dorit@il.ibm.com>
+ 
+ 	PR tree-opt/18400
+ 	* tree-vectorizer.c (make_loop_iterate_ntimes): Set loop->nb_iterations.
+ 	(vect_transform_loop_bound): Set loop->nb_iterations.
+ 
+ 2004-11-14  Dorit Naishlos  <dorit@il.ibm.com>
+ 	    Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR tree-opt/18425
+ 	* tree-vectorize.c (vect_build_loop_niters): Do not insert
+ 	NULL into the instruction stream. Initialize new_bb to NULL.
+ 	(vect_update_ivs_after_vectorizer): Likewise.
+ 	(vect_gen_niters_for_prolog_loop): Likewise.
+ 
+ 2004-11-14  Zdenek Dvorak  <dvorakz@suse.cz>
+ 
+ 	PR tree-optimization/18431
+ 	* tree-flow.h (stmt_references_memory_p): Declare.
+ 	* tree-ssa-loop-im.c (stmt_cost): Use stmt_references_memory_p.
+ 	* tree-ssa.c (stmt_references_memory_p): New function.
+ 
+ 2004-11-14  Andreas Schwab  <schwab@suse.de>
+ 
+ 	* Makefile.in (lambda-code.o, tree-loop-linear.o): Depend on
+ 	$(EXPR_H).
+ 
+ 2004-11-14  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* c-common.c (walk_stmt_tree): Remove.
+ 	* c-common.h: Remove the corresponding prototype.
+ 
+ 	* emit-rtl.c (push_to_full_sequence): Remove.
+ 	* rtl.h: Remove the corresponding prototype.
+ 
+ 	* cselib.c, expr.c: Fix comment typos.
+ 
+ 2004-11-13  Richard Henderson  <rth@redhat.com>
+ 
+ 	* calls.c (precompute_register_parameters): Force all PARALLELs
+ 	into pseudo registers.
+ 	(load_register_parameters): Copy PARALLELs into hard registers.
+ 	* function.c (assign_parm_setup_block): Copy PARALLELS into
+ 	pseudo registers.  Do emit_group_store in conversion_insns.
+ 	* expr.c (emit_group_load_1): Rename from emit_group_load, take
+ 	tmps as an argument.  Move final copy loop ...
+ 	(emit_group_load): ... here.  New function.
+ 	(emit_group_load_into_temps, emit_group_move_into_temps): New.
+ 	* expr.h: Declare them.
+ 
+ 2004-11-14  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-cfg.c, tree-if-conv.c, tree-ssa-loop-ivopts.c,
+ 	tree-ssa-loop-manip.c, tree-vectorizer.c: Replace TREE_CHAIN
+ 	with PHI_CHAIN where appropriate.
+ 
+ 2004-11-13  Dale Johannesen  <dalej@apple.com>
+ 
+ 	* tree-flow.h (bsi_commit_one_edge_insert): Remove name from prototype.
+ 	(tree_block_label): Ditto.
+ 	(flush_pending_stmts): Ditto.
+ 	(insert_edge_copies): Ditto.
+ 	(expr_invariant_in_loop_p): Ditto.
+ 	(TDF_USE_OPS): Parenthesize definition.
+ 	(TDF_USE_VOPS): Ditto.
+ 
+ 2004-11-13  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* config/rs6000/aix51.h (ASM_CPU_SPEC): Add 970 and G5.
+ 	* config/rs6000/aix52.h (ASM_CPU_SPEC): Same.
+ 	(atoll): Declare.
+ 	* config/rs6000/t-aix52 (BOOT_LDFLAGS): Define.
+ 
+ 2004-11-14  Joseph Myers  <joseph@codesourcery.com>
+ 
+ 	* config/i386/i386.c (override_options): Move loop to set default
+ 	tuning to correct place.
+ 
+ 2004-11-13  Zak Kipling  <zak@transversal.com>
+ 
+ 	PR target/18300
+ 	* config/i386/i386.c (classify_argument): Fix infinite loop when
+ 	passing object with 3 or more base classes by value.
+ 
+ 2004-11-13  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* doc/md.texi (constraints) <% modifier>: Mention that it is
+ 	useless when the two alternatives are strictly identical.
+ 
+ 2004-11-13  Richard Henderson  <rth@redhat.com>
+ 
+ 	* expmed.c (extract_split_bit_field): Temporarily disable call to
+ 	extract_force_align_mem_bit_field.
+ 
+ 2004-11-13  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* bitmap.c, bitmap.h, expmed.c, tree-cfg.c: Fix comment
+ 	formatting.
+ 
+ 	* c-cppbuiltin.c, cgraph.c, domwalk.h, except.c, gimplify.c,
+ 	lambda-code.c, postreload.c, predict.c, tree-sra.c,
+ 	tree-ssa-loop-manip.c, tree.c: Fix comment typos.
+ 
+ 2004-11-13  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* doc/install.texi (automake): Correctly document that everything now
+ 	will use automake 1.9.3.
+ 
+ 2004-11-13  Hans-Peter Nilsson  <hp@bitrange.com>
+ 
+ 	PR target/18347
+ 	* config/mmix/mmix.c (mmix_function_outgoing_value): Handle
+ 	TImode.  Sorry for other non-complex larger-than-64-bit modes.
+ 	* config/mmix/mmix.h (MIN_UNITS_PER_WORD): Do not define.
+ 
+ 2004-11-13  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* doc/install.texi (automake): Document that everything now uses 1.9.
+ 
+ 2004-11-13  Bernd Schmidt  <bernd.schmidt@analog.com>
+ 
+ 	* cse.c (cse_insn): Stores in a libcall sequence can invalidate
+ 	previous loads.
+ 
+ 2004-11-13  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree.h: Fix comment typos.
+ 
+ 2004-11-13  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* cse.c (CHEAP_REGNO): Redefine using REGNO_PTR_FRAME_P and
+ 	HARD_REGISTER_NUM_P.
+ 
+ 	* cselib.c (new_cselib_val): Make comment correct and more detailed.
+ 	* flow.c (mark_set_1): Likewise.
+ 
+ 	* except.c (duplicate_eh_region_1, duplicate_eh_region_2,
+ 	duplicate_eh_regions): Remove.
+ 	* except.h (duplicate_eh_regions): Remove prototype.
+ 	* integrate.c (get_label_from_map, copy_rtx_and_substitute,
+ 	global_const_equiv_varray): Remove.
+ 	* integrate.h (get_label_from_map, copy_rtx_and_substitute,
+ 	global_const_equiv_varray, set_label_in_map): Remove prototypes,
+ 	extern declaration, and #define.
+ 	(MAYBE_EXTEND_CONST_EQUIV_VARRAY, SET_CONST_EQUIV_DATA): Remove.
+ 	(struct inline_remap): Remove.
+ 	* varray.c (struct element): Remove entry for const_equiv_data.
+ 	* varray.h (struct const_equiv_data): Remove.
+ 	(enum varray_data_enum) <VARRAY_DATA_CONST_EQUIV>: Remove.
+ 	(union varray_data_tag) <const_equiv>: Remove.
+ 	(VARRAY_CONST_EQUIV_INIT, VARRAY_CONST_EQUIV,
+ 	VARRAY_PUSH_CONST_EQUIV, VARRAY_TOP_CONST_EQUIV): Remove.
+ 
+ 	* regstack.c (record_label_references): Remove unused function.
+ 
+ 	* rtl.def (VALUE): Update comment.
+ 	(LABEL_REF): Remove unused operand 2.
+ 	* rtl.h (struct rtx_def): Update for removed accessor macros.
+ 	(XCADVFLAGS, INSN_DEAD_CODE_P, LINE_NUMBER, CONTAINING_INSN,
+ 	REG_LOOP_TEST_P): Remove.
+ 	(ADDR_DIFF_VEC_FLAGS, CSELIB_VAL_PTR, LABEL_NEXTREF): Add comments.
+ 	* web.c (entry_register): Don't copy REG_LOOP_TEST_P.
+ 	* doc/rtl.texi (INSN_DEAD_CODE_P, REG_LOOP_TEST_P): Remove.
+ 
+ 2004-11-13  James A. Morrison  <phython@gcc.gnu.org>
+ 	    Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR target/18230
+ 	* config/sparc/sparc.c (sparc_rtx_costs): Handle the NAND vector
+ 	patterns.
+ 	* config/sparc/sparc.md (V64I): New macro for 64-bit modes.
+ 	(V32I): New macro for 32-bit modes.
+ 	(anddi3, anddi_sp32, anddi_sp64, and_not_di_sp32, and_not_di_sp64,
+ 	iordi3, iordi3_sp32, iordi_sp64, or_not_di_sp32, or_not_di_sp64,
+ 	xordi3, xordi3_sp32, xordi3_sp64, {AND, IOR, XOR} DI splitter,
+ 	xor_not_di_sp32, xordi_not_di_sp64, one_cmpldi2, one_cmpldi_sp32,
+ 	one_cmpldi_sp64): Use V64I instead of DI.
+ 	(andsi3, andsi_sp32, andsi_sp64, and_not_si, iorsi3, or_not_si,
+ 	xorsi3, xor_not_si, one_cmplsi2): Use V32I instead of SI.
+ 	(addv2si3, addv4hi3, addv2hi3): Remove % modifier.
+ 	(nandv64i_vis, nandv32i_vis): New patterns.
+ 
+ 2004-11-12  Mike Stump  <mrs@apple.com>
+ 
+ 	* Makefile.in: Add html support.
+ 	* java/Make-lang.in: Likewise.
+ 	* fortran/Make-lang.in: Likewise.
+ 	* treelang/Make-lang.in: Likewise.
+ 	* doc/install.texi: Likewise.
+ 	* doc/makefile.texi: Likewise.
+ 	* doc/sourcebuild.texi: Likewise.
+ 
+ 2004-11-13  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-ssa-loop-manip.c: Fix a comment typo.
+ 
+ 2004-11-12  Mike Stump  <mrs@apple.com>
+ 
+ 	* doc/cppinternals.texi (Index): Fix html generation with makeinfo by
+ 	renaming this node to Concept Index.
+ 	* doc/gccint.texi (Index): Likewise.  Also minor formatting tweaks
+ 	to more closely match gcc.texi.
+ 
+ 2004-11-12  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-cfg.c (hashtab.h): Include.
+ 	(struct edge_to_case_leader_elt): New structure.
+ 	(edge_to_case_leader): New.
+ 	(edge_to_case_leader_hash): New hashtable hasing function.
+ 	(edge_to_case_leader_eq): New hashtable equality function.
+ 	(record_switch_edge): New function.
+ 	(get_case_leader_for_edge, get_case_leader_for_edge): New functions.
+ 	(make_switch_expr_edges): Build the edge-to-case-leader
+ 	hash table.  Tear down the hash table when we're done.
+ 	(cleanup_dead_labels): Use CASE_LEADER_OR_LABEL instead of
+ 	CASE_LABEL.
+ 	(tree_node_can_be_shared): Allow sharing of CASE_LABEL_EXPR nodes.
+ 	(tree_redirect_edge_and_branch, case SWITCH_EXPR): Update
+ 	to use new concept of case leaders to reduce overhead of
+ 	redirecting outgoing edges from switch statements.
+ 	* tree.c (get_case_label): New function.
+ 	* tree.h (CASE_LABEL): Define in terms of get_case_label.
+ 	(CASE_LEADER_OR_LABEL): Define.
+ 
+ 2004-11-12  Ziemowit Laski  <zlaski@apple.com>
+ 
+ 	* varasm.c (output_addressed_constants): For CONST_DECLs,
+ 	output the initializer if present.
+ 
+ 2004-11-12  Ziemowit Laski  <zlaski@apple.com>
+ 
+ 	* config/rs6000/darwin.h: Fix confusing typo in comment.
+ 
+ 2004-11-12  Devang Patel  <dpatel@apple.com>
+ 
+ 	* optabs.c (vector_compare_rtx): Use COMPARISON_CLASS_P.
+ 
+ 2004-11-12  Devang Patel  <dpatel@apple.com>
+ 
+ 	* tree-if-conv.c (clean_predicate_lists): Use loop header
+ 	and latch directly.
+ 
+ 2004-11-12  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR 17778
+ 	* config/i386/i386.h (TARGET_96_ROUND_53_LONG_DOUBLE): New.
+ 	* config/i386/freebsd.h (SUBTARGET_OVERRIDE_OPTIONS): Remove.
+ 	(TARGET_96_ROUND_53_LONG_DOUBLE): New.
+ 	* config/i386/i386-modes.def (XF): Use it.
+ 
+ 2004-11-11  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* Makefile.in (macro_list): Use move-if-change to avoid spurious
+ 	rebuilds.
+ 
+ 2004-11-12  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	PR c++/18416
+ 	* passes.c (rest_of_decl_compilation): Do not look at DECL_RTL
+ 	when deciding whether to pass a variable to
+ 	cgraph_varpool_finalize_decl or assemble_variable.
+ 	* toplev.c (check_global_declarations): Do not clear DECL_RTL.
+ 
+ 2004-11-12  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-vectorizer.c: Fix a comment typo.
+ 
+ 2004-11-12  Bernd Schmidt  <bernd.schmidt@analog.com>
+ 
+ 	* genconfig.c (walk_insn_part): Look at match_dups inside a label_ref.
+ 
+ 2004-11-12  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-scalar-evolution.c (analyzable_condition): Remove
+ 	superfluous TREE_THIS_VOLATILE checks on SSA_NAMEs.
+ 
+ 2004-11-12  Ralf Corsepius  <ralf.corsepius@rtems.org>
+ 
+ 	* config/rs6000/t-rtems (MULTILIB_NEW_EXCEPTIONS_ONLY):
+ 	Remove m505/roe multilib variant.
+ 
+ 2004-11-12  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* expr.c (emit_group_load) <CONCAT>: Use extract_bit_field
+ 	to load from the stack.
+ 
+ 2004-11-12  Richard Henderson  <rth@redhat.com>
+ 
+ 	* toplev.c (floor_log2): Rename from floor_log2_wide, use CLZ_HWI.
+ 	(exact_log2): Rename from exact_log2_wide, use CTZ_HWI.
+ 	* toplev.h (FL2T__): Remove.
+ 	(CLZ_HWI): Rename from FL2T_CLZ__.
+ 	(CTZ_HWI): New.
+ 	(floor_log2): Simplify.
+ 	(exact_log2): New.
+ 
+ 2004-11-12  Sebastian Pop  <pop@cri.ensmp.fr>
+ 
+ 	* tree-data-ref.c (analyze_subscript_affine_affine): Correctly
+ 	compute the first overlapping iterations.
+ 
+ 2004-11-12  Sebastian Pop  <pop@cri.ensmp.fr>
+ 
+ 	PR middle-end/18005
+ 	* tree-data-ref.c (estimate_niter_from_size_of_data): Ensure
+ 	that arguments of EXACT_DIV_EXPR are INTEGER_CST.
+ 
+ 2004-11-12  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	PR tree-optimization/18419
+ 	* tree-ssa.c (walk_use_def_chains_1): Make the visited map a
+ 	pointer set instead of a bitmap.
+ 	(walk_use_def_chains): Create, pass and clean up that pointer_set.
+ 
+ 	* tree-ssa-alias.c (struct alias_info): Make the ssa_names_visited
+ 	field an sbitmap.
+ 	(init_alias_info): Allocate and zero it here.
+ 	(delete_alias_info): Delete it here.
+ 	(collect_points_to_info_for): Use it.
+ 
+ 2004-11-11  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* alias.c (record_alias_subset, addr_side_effect_eval):
+ 	Make them static.
+ 	* alias.h: Remove the prototype for record_alias_subset.
+ 	* expr.h: Remove the commented-out prototype for
+ 	record_alias_subset.
+ 	* rtl.h: Remove the prototype for addr_side_effect_eval.
+ 
+ 	* cfglayout.c (choose_inner_scope): Make it static.
+ 	* rtl.h: Remove the corresponding prototype.
+ 
+ 	* cfgloopmanip.c (update_single_exits_after_duplication,
+ 	unloop): Make them static.
+ 	* cfgloop.h: Remove the corresponding prototypes.
+ 
+ 	* c-typeck.c (c_size_in_bytes, record_maybe_used_decl):
+ 	Make them static.
+ 	* c-tree.h: Remove the corresponding prototypes.
+ 
+ 	* explow.c (round_push): Make it static.
+ 	* expr.h: Remove the corresponding prototype.
+ 
+ 	* varasm.c (get_named_section_flags, decl_tls_model): Make
+ 	them static.
+ 	* output.h: Remove the prototype for get_named_section_flags.
+ 	* tree.h: Remove the prototype for decl_tls_model.
+ 
+ 2004-11-11  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* function.c (expand_function_end): Remove an "if" statement
+ 	that always triggers.
+ 	* stmt.c (expand_null_return_1): Likewise.
+ 
+ 2004-11-11  James E. Wilson  <wilson@specifixinc.com>
+ 
+ 	* config/ia64/ia64.h (HARD_REGNO_NREGS): Handle XCmode.
+ 	(HARD_REGNO_MODE_OK, MODES_TIEABLE_P, SECONDARY_MEMORY_NEEDED,
+ 	CLASS_MAX_NREGS): Likewise.
+ 
+ 2004-11-11  Zdenek Dvorak  <dvorakz@suse.cz>
+ 
+ 	PR tree-optimization/17742
+ 	* tree-scalar-evolution.c (follow_ssa_edge_in_rhs): Handle
+ 	MINUS_EXPR correctly.
+ 
+ 2004-11-11  Sebastian Pop  <pop@cri.ensmp.fr>
+ 
+ 	* tree-scalar-evolution.c (follow_ssa_edge_in_condition_phi):
+ 	Give up as soon as the evolution is known not computable.
+ 
+ 2004-11-11  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	PR target/16457
+ 	* config/rs6000/rs6000.c (mask64_2_operand): Stub to call
+ 	mask64_1or2_operand.
+ 	(mask64_1or2_operand): Broken out of mask64_2_operand, add flag
+ 	to spot rlwinm opportunities.
+ 	(and64_2_operand): Use mask_1or2_operand.
+ 	* config/rs6000/rs6000.md (anddi3): Use rlwinm when possible.
+ 
+ 2004-11-11  Dorit Naishlos  <dorit@il.ibm.com>
+ 
+ 	* tree-vectorizer.c (update_phi_nodes_for_guard): Call reverse_phis.
+ 	(vect_update_ivs_after_vectorizer): Update function documentation.
+ 	Avoid quadratic behavior and direct write to PHI_ARG_DEF.
+ 
+ 2004-11-11  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/arm/arm.c: Fix a comment typo.
+ 
+ 2004-11-11  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* bitmap.h (nBITMAP_WORD_BITS): Remove.
+ 	(BITMAP_WORD_BITS): Force unsigned by use of 1u.
+ 	(BITMAP_ELEMENT_WORDS, BITMAP_ELEMENT_ALL_BITS): Remove
+ 	unnecessary casts.
+ 	(bitmap_first_set_bit): Return unsigned, use ctzl.
+ 	(bitmap_last_set_bit): Remove.
+ 	* bitmap.c (bitmap_element_zerop, bitmap_copy): Make iterator
+ 	unsigned.
+ 	(bitmap_first_set_bit): Return unsigned, require non-empty bitmap,
+ 	remove special case code for two word elements.
+ 	(bitmap_last_set_bit): Remove.
+ 	* ra-build.c (livethrough_conflicts_bb): Replace unnecessary use of
+ 	bitmap_first_set_bit with bitmap_empty_p.
+ 	* tree-outof-ssa.c (analyze_edges_for_bb): Likewise.
+ 	* tree-ssa-pre.c (bitmap_print_value): Use simple flag rather than
+ 	bitmap_last_bit_set.
+ 
+ 2004-11-11  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	PR target/16796
+ 	* config/rs6000/rs6000.md: Add DF & SF reg move peepholes.
+ 
+ 	PR target/16458
+ 	* config/rs6000/rs6000.c (rs6000_generate_compare): Generate an
+ 	unsigned equality compare when we know the operands are unsigned.
+ 
+ 2004-11-10  Peter S. Mazinger  <ps.m@gmx.net>
+ 
+ 	* config/mips/linux.h (LINUX_TARGET_OS_CPP_BUILTINS): Define
+ 	__PIC__ and __pic__ only if TARGET_ABICALLS.
+ 	(SUBTARGET_CPP_SPECS): Don't define or undefine __PIC__ and __pic__.
+ 	(SUBTARGET_ASM_SPECS): Don't pass -non_shared to assembler; pass
+ 	-KPIC only if not -mno-abicalls.
+ 
+ 	* config/alpha/linux.h, config/arm/linux-elf.h, config/pa/pa-linux.h
+ 	* config/sparc/linux.h, config/sparc/linux64.h
+ 	(TARGET_OS_CPP_BUILTINS): Define __PIC__ and __pic__ if flag_pic.
+ 
+ 	* config/arm/linux-gas.h (CPP_SPEC): Don't define __PIC__ or __pic__.
+ 	* config/pa/pa/linux.h (CPP_SPEC): Likewise.
+ 	* config/sparc/linux.h (CPP_SUBTARGET_SPEC): Likewise.
+ 	* config/sparc/linux64.h (CPP_SUBTARGET_SPEC): Likewise.
+ 
+ 2004-11-11  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/arm.c (arm_compute_save_reg0_reg12_mask): Save PIC
+ 	register if current_function_uses_pic_offset_table is set.
+ 
+ 2004-11-10  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* config/rs6000/rs6000.md (define_attr "type"): Add two and three.
+ 	Change multi-instruction sequences to new attribute.
+ 	* config/rs6000/{40x.md,440.md,603.md,6xx.md,
+ 	7450.md,7xx.md,8540.md,mpc.md,power4.md,power5.md,
+ 	rios1.md,rios2.md,rs64.md}: Add descriptions for two and three.
+ 
+ 2004-11-10  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-data-ref.c (build_classic_dist_vector): If either loop
+ 	is outside of the nest we asked about, the dependence can't
+ 	matter.
+ 	(build_classic_dir_vector): Ditto.
+ 
+ 2004-11-10  Zdenek Dvorak  <dvorakz@suse.cz>
+ 
+ 	* tree-ssa-loop-ivopts.c (get_address_cost): Add address elements in
+ 	right order.
+ 	(force_var_cost): Determine cost of addition and multiplication more
+ 	precisely.
+ 	(get_computation_cost_at): Add cost for computing address elements to
+ 	the final cost.
+ 
+ 	* fold-const.c (fold): Attempt to use ptr_difference_const whenever
+ 	one of the arguments of MINUS_EXPR is an address.
+ 	(split_address_to_core_and_offset): New function.
+ 	(ptr_difference_const): Handle case when one of the operands is a
+ 	pointer.
+ 	* tree-ssa-loop-ivopts.c (determine_base_object): Fold &*addr.
+ 	(ptr_difference_cost): Pass addresses instead of objects to
+ 	ptr_difference_const.
+ 
+ 2004-11-10  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* tree.c (tree_check_failed): Emit general error if the list of
+ 	node types is empty.
+ 
+ 2004-11-10  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* config/sparc/sparc.c (function_arg_union_value): New 'slotno'
+ 	argument.  When the union is passed in the 6th slot, build a
+ 	PARALLEL with only one element.
+ 	(function_arg): Adjust call to function_arg_union_value.
+ 	(function_value): Likewise.
+ 
+ 2004-11-10  Fariborz Jahanian <fjahanian@apple.com>
+ 
+ 	PR tree-optimization/17892
+ 	* tree-ssa-dom.c (unsafe_associative_fp_binop): Add test for
+ 	MINUS_EXPR operator.
+ 
+ 2004-11-10  James A. Morrison  <phython@gcc.gnu.org>
+ 
+ 	PR target/18230
+ 	config/sparc/sparc.md (addsi3, subsi3): Set "fptype" attribute.
+ 	(addv2si, addv4hi, addv2hi, subv2si, subv4hi, subv2hi): New patterns.
+ 
+ 2004-11-10  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* basic-block.h (XMALLOC_REG_SET, XFREE_REG_SET): New.
+ 	(struct basic_block_def): Remove local_set and cond_local_set
+ 	fields.  Update comment for global_live_at_start.
+ 	* flow.c (calculate_global_regs_live): Allocate local_sets and
+ 	cond_local_sets here as arrays of bitmaps previously stored in
+ 	bb->local_set and bb->cond_local_set.  Use xmalloc instead of
+ 	obstack allocated bitmaps.
+ 
+ 2004-11-09  H.J. Lu  <hongjiu.lu@intel.com>
+ 
+ 	PR target/18380
+ 	* config/ia64/unwind-ia64.h (_Unwind_FindTableEntry): Mark it
+ 	hidden.
+ 
+ 	* unwind-dw2.c (_Unwind_FindTableEntry): Removed.
+ 
+ 2004-11-09  Jeff Law  <law@redhat.com>
+ 
+ 	* cfganal.c (flow_dfs_compute_reverse_execute): Accept new
+ 	argument holding last unvisited block.  Start search for
+ 	unvisited blocks at LAST_UNVISITED rather than EXIT_BLOCK.
+ 	(connect_infinite_loops_to_exit): Supply last unvisited block
+ 	to flow_dfs_compute_reverse_execute.
+ 
+ 2004-10-22  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* config/rs6000/rs6000.md (fix_truncdfsi2): Handle e500
+ 	doubles.
+ 	(floatunssidf2): Same.
+ 	(floatsidf2): Same.
+ 	("extendsfdf2"): New expander.
+ 	(*extendsfdf2_fpr): Rename.
+ 	(*truncdfsf2_fpr): Same.
+ 	(*negdf2_fpr): Same.
+ 	(*absdf2_fpr): Same.
+ 	(*nabsdf2_fpr): Same.
+ 	(*adddf3_fpr): Same.
+ 	(*subdf3_fpr): Same.
+ 	(*muldf3_fpr): Same.
+ 	(*divdf3_fpr): Same.
+ 
+ 	* config/rs6000/spe.md ("spe_extendsfdf2"): Remove FIXME comment.
+ 	("spe_fix_truncdfsi2"): Same.
+ 	(spe_floatunssidf2): Same.
+ 	(spe_floatsidf2): Same.
+ 
+ 2004-11-09  Joseph S. Myers  <joseph@codesourcery.com>
+ 
+ 	PR c/18322
+ 	* c-common.c (fname_decl): Don't use line number of decl in
+ 	diagnostic.
+ 
+ 2004-11-09  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390-protos.h (s390_pool_operand): Remove.
+ 	* config/s390/s390.c (s390_pool_operand): Likewise.
+ 	(s390_extra_constraint_str): Handle 'B' constraints.
+ 	* config/s390/s390.h (CONSTRAINT_LEN): Handle 'B' constraints.
+ 	* config/s390/s390.md: Document 'B' constraints.
+ 	("*cmpdi_cct", "*cmpsi_cct"): Use 'B' constraint instead of
+ 	s390_pool_operand to prevent insns with two literal pool
+ 	references.  Make pattern commutative.
+ 	("*cmpdi_ccu", "*cmpsi_ccu", "*cmphi_ccu", "*cmpqi_ccu"): Use
+ 	'B' constraint instead of s390_pool_operand.
+ 
+ 2004-11-09  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-cfg.c (create_bb): Remove unnecessary memset.
+ 
+ 2004-11-09  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-ssa-threadupdate.c (copy_phis_to_block): Remove.
+ 	(thread_block): Call flush_pending_stmt instead of
+ 	copy_phis_to_block.
+ 
+ 2004-11-09  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* loop-iv.c (iv_number_of_iterations): Make it static.
+ 	* cfgloop.h: Remove the corresponding prototype.
+ 
+ 2004-11-09  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* function.c (combine_temp_slots, assign_parms,
+ 	expand_pending_sizes): Make them static.
+ 	* tree.h: Remove the corresponding prototypes.
+ 
+ 2004-11-09  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* emit-rtl.c (copy_most_rtx): Remove.
+ 	* rtl.h: Remove the corresponding prototype.
+ 
+ 2004-11-09  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* cfgloop.c (flow_loops_update): Remove.
+ 	* cfgloop.h: Remove the corresponding prototype.
+ 
+ 2004-11-09  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* conflict.c (mark_reg, conflict_graph_compute): Remove.
+ 	* basic-block.h: Remove the prototype for
+ 	conflict_graph_compute.
+ 
+ 2004-11-09  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-if-conv.c (add_to_dst_predicate_list): Change the
+ 	second argument to basic_block.
+ 	(tree_if_convert_cond_expr): Update call sites.
+ 
+ 2004-11-09  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* fold-const.c (pedantic_non_lvalue): Make it static.
+ 	* tree.h: Remove the corresponding prototype.
+ 
+ 2004-11-09  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* optabs.c (prepare_operand): Make it static.
+ 	* optabs.h: Remove the corresponding prototype.
+ 
+ 2004-11-09  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* reload1.c (reloads_conflict, gen_reload): Make them static.
+ 	* reload.h: Remove the corresponding prototypes.
+ 
+ 2004-11-09  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* reload.c (refers_to_mem_for_reload_p,
+ 	refers_to_regno_for_reload_p): Make them static.
+ 	* reload.h: Remove the corresponding prototypes.
+ 
+ 2004-11-09  James A. Morrison  <phython@gcc.gnu.org>
+ 	    Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR target/18230
+ 	* doc/md.texi (SPARC constraints): Document 'Y' constraint.
+ 	* config/sparc/sparc-modes.def: Add vector modes of 4 and 8 bytes.
+ 	* config/sparc/sparc.c (sparc_vector_mode_supported_p): New function.
+ 	(TARGET_VECTOR_MODE_SUPPORTED_P): Set to sparc_vector_mode_supported_p.
+ 	(fp_zero_operand): Accept MODE_VECTOR_INT modes.
+ 	(input_operand): Accept CONST_VECTOR with MODE_VECTOR_INT modes.
+ 	(sparc_cannot_force_const_mem): Return false for CONST_VECTOR.
+ 	(sparc_init_modes): Set sparc_mode_class to SF_MODE or DF_MODE for
+ 	MODE_VECTOR_INT modes.
+ 	(sparc_extra_constraint_check): Add new constraint 'Y'.
+ 	* config/sparc/sparc.h: Define UNITS_PER_SIMD_WORD to 8 for TARGET_VIS.
+ 	* config/sparc/sparc.md (V32): New mode macro for 32-bit modes.
+ 	(V64): New mode macro for 64-bit modes.
+ 	(movsf): Use V32 for mode instead of SF.
+ 	(movsf_insn_vis): Use V32 for mode instead of SF.  Add 'Y' constraint
+ 	alongside 'G' constraint.
+ 	(movdf): Use V64 for mode instead of DF.
+ 	(movdf_insn_v9only_vis, modf_insn_sp64_vis): Use V64 for mode instead
+ 	of DF.  Add 'Y' constraint alongside 'G' constraint.
+ 	(multi-isn and misaligned mems DFmode splitters): Use V64 for mode
+ 	instead of DF.
+ 
+ 2004-11-09  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390.c (s390_select_ccmode): Return CCAPmode for
+ 	integer NEG and ABS.
+ 	* config/s390/s390.md ("*negdi2_64"): Fix op_type attribute.
+ 	("*negdi2_31"): Reimplement using a splitter.
+ 	("*negdi2_cc", "*negdi2_cconly"): New insns.
+ 	("*negdi2_sign", "*negdi2_sign_cc"): Likewise.
+ 	("*negsi2_cc", "*negsi2_cconly"): Likewise.
+ 	("*negdf2_cc", "*negdf2_cconly"): Likewise.
+ 	("*negsf2_cc", "*negsf2_cconly"): Likewise.
+ 	("*absdi2_cc", "*absdi2_cconly"): New insns.
+ 	("*absdi2_sign", "*absdi2_sign_cc"): Likewise.
+ 	("*abssi2_cc", "*abssi2_cconly"): Likewise.
+ 	("*absdf2_cc", "*absdf2_cconly"): Likewise.
+ 	("*abssf2_cc", "*abssf2_cconly"): Likewise.
+ 	("*negabsdi2_cc", "*negabsdi2_cconly"): New insns.
+ 	("*negabsdi2_sign", "*negabsdi2_sign_cc"): Likewise.
+ 	("*negabssi2_cc", "*negabssi2_cconly"): Likewise.
+ 	("*negabsdf2_cc", "*negabsdf2_cconly"): Likewise.
+ 	("*negabssf2_cc", "*negabssf2_cconly"): Likewise.
+ 
+ 2004-11-09  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390.c (s390_canonicalize_comparison): Reverse condition
+ 	when eliminating an UNSPEC_CMPINT.
+ 	(s390_secondary_input_reload_class): Fix test for CC register reload.
+ 	(s390_secondary_output_reload_class): Likewise.
+ 	(s390_expand_cmpmem): Swap operands.  Use gen_cmpint.
+ 	* config/s390/s390.md ("*cmpint_si", "*cmpint_di"): Remove.
+ 	("cmpint", "*cmpint_cc", "*cmpint_sign", "*cmpint_sign_cc"): New
+ 	insn patterns with splitters.
+ 
+ 2004-11-09  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_rtx_costs): Add EQ, GTU, and LTU.
+ 	* config/rs6000/rs6000.md (sCC): Split GTU and LTU patterns.
+ 
+ 2004-11-09  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-phinodes.c (phi_reverse): New.
+ 	* tree-cfg.c (tree_make_forwarder_block, tree_duplicate_bb):
+ 	Use it.
+ 	* tree-flow.h: Add a prototype for phi_reverse.
+ 
+ 2004-11-09  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-ssa-loop-ivopts.c: Fix a comment typo.
+ 
+ 2004-11-09  James A. Morrison  <phython@gcc.gnu.org>
+ 
+ 	PR pch/14940
+ 	* config/host-linux.c (TRY_EMPTY_VM_SPACE): Add __sparc__
+ 	definitions.
+ 
+ 2004-11-09  Joseph S. Myers  <joseph@codesourcery.com>
+ 
+ 	* builtins.c, c-common.c, c-decl.c, c-format.c: Say "argument"
+ 	instead of "arg" in diagnostics.
+ 
+ 2004-11-09  Joseph S. Myers  <joseph@codesourcery.com>
+ 
+ 	* builtins.c, c-common.c, c-decl.c, c-format.c, c-format.h,
+ 	c-parse.in, c-pch.c, c-pragma.c, collect2.c, final.c, gcc.c,
+ 	gcov.c, opts.c, pretty-print.h, protoize.c, reg-stack.c, rtl.c,
+ 	tlink.c, config/alpha/alpha.c, config/arc/arc.c, config/arm/arm.c,
+ 	config/avr/avr.c, config/c4x/c4x.c, config/darwin.c,
+ 	config/frv/frv.c, config/h8300/h8300.c, config/i386/i386.c,
+ 	config/i386/winnt.c, config/ia64/ia64.c, config/ip2k/ip2k.c,
+ 	config/iq2000/iq2000.c, config/m32r/m32r.c,
+ 	config/m68hc11/m68hc11.c, config/m68k/m68k.c, config/m68k/m68k.h,
+ 	config/mcore/mcore.c, config/mips/mips.c, config/mmix/mmix.c,
+ 	config/ns32k/ns32k.c, config/rs6000/host-darwin.c,
+ 	config/rs6000/rs6000.c, config/s390/s390.c, config/sh/sh.c,
+ 	config/sh/symbian.c, config/stormy16/stormy16.c,
+ 	config/v850/v850.c: Avoid "`" as left quote, using "'" or %q, %<
+ 	and %> as appropriate.  Use %' as apostrophe in diagnostics where
+ 	applicable.  Use %< and %> in place of '' quotes where applicable.
+ 	Use %qs in place of %<%s%>.  Consistently quote __builtin function
+ 	names.
+ 
+ 2004-11-09  Hans-Peter Nilsson  <hp@bitrange.com>
+ 
+ 	* gdbinit.in (pbb, pbm): New macros.
+ 
+ 2004-11-08 Jeff Law  <law@redhat.com>
+ 
+ 	* cfg.c (redirect_edge_succ_nodup): Use find_edge rather than
+ 	implementing it inline.
+ 
+ 	* cfganal.c (find_edge): Search pred->succs or succ->preds,
+ 	whichever is shorter.
+ 
+ 2004-11-08  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* passes.c (rest_of_handle_jump): Remove dead code.
+ 
+ 2004-11-08  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-cfg.c (thread_jumps): Speed up by keeping a pointer to
+ 	the last used element in the worklist.
+ 
+ 2004-11-08  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-inline.c (remap_save_expr): Make it static.
+ 	* tree-inline.h: Remove the corresponding prototype.
+ 
+ 2004-11-08  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-ssa-loop-niter.c (upper_bound_in_type,
+ 	lower_bound_in_type): Make them static.
+ 	* tree.h: Remove the corresponding prototypes.
+ 
+ 2004-11-08  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-ssa-live.c (tpa_init, pop_best_coalesce): Make them
+ 	static.
+ 	* tree-ssa-live.h: Remove the corresponding prototypes.
+ 
+ 2004-11-08  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-if-conv.c (tree_if_conversion): Make it static.
+ 	* tree-flow.h: Remove the corresponding prototype.
+ 
+ 2004-11-08  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-ssa-operands.c (build_ssa_operands): Make it static.
+ 	* tree-flow.h: Remove the corresponding prototype.
+ 
+ 2004-11-08  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR tree-opt/18299
+ 	* tree-inline.c (copy_body_r): Change "t = t" to empty
+ 	statement instead of "t".
+ 
+ 2004-11-08  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* modulo-sched.c (create_partial_schedule,
+ 	free_partial_schedule, reset_partial_schedule,
+ 	ps_add_node_check_conflicts, rotate_partial_schedule): Make
+ 	them static.
+ 
+ 2004-11-08  Richard Henderson  <rth@redhat.com>
+ 
+ 	* expmed.c (extract_force_align_mem_bit_field): Correct handling at
+ 	the end of a page.
+ 
+ 2004-11-08  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* sched-deps.c (add_insn_mem_dependence): Make it static.
+ 	* sched-int.h: Remove the corresponding prototypes.
+ 
+ 2004-11-08  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* flow.c (allocate_bb_life_data): Make it static.
+ 	* basic-block.h: Remove the corresponding prototype.
+ 
+ 2004-11-08  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* calls.c (split_complex_values, split_complex_types): Make
+ 	them static.
+ 	* expr.h: Remove the corresponding prototypes.
+ 
+ 2004-11-08  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* arm.c (arm_handle_notshared_attribute): Wrap declaration and use
+ 	with #if TARGET_DLLIMPORT_DECL_ATTRIBUTES.
+ 
+ 2004-11-08  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-if-conv.c (tree_if_convert_cond_expr): Remove two "if"
+ 	statements that always trigger.
+ 
+ 2004-11-08  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-cfg.c, tree-if-conv.c, tree-into-ssa.c,
+ 	tree-scalar-evolution.c, tree-ssa-loop-im.c,
+ 	tree-ssa-loop-ivopts.c, tree-ssa-loop-manip.c, tree-ssa.c,
+ 	tree-vectorizer.c: Replace TREE_CHAIN with PHI_CHAIN where
+ 	appropriate.
+ 
+ 2004-11-08  Ben Elliston  <bje@au.ibm.com>
+ 
+ 	* cgraph.h (cgraph_calls_p): Remove.
+ 	* cgraph.c (cgraph_calls_p): Likewise.
+ 
+ 	* varray.h (varray_copy): Remove.
+ 	* varray.c (varray_copy): Likewise.
+ 
+ 2004-11-07  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR target/18269
+ 	* config/darwin.c (machopic_indirect_data_reference):
+ 	Call gen_macho_high and gen_macho_low instead of
+ 	checking the mode and calling gen_macho_high_di directly.
+ 	* config/rs6000/rs6000.c (rs6000_emit_move): Likewise.
+ 	* config/rs6000/rs6000.md: Move most of TARGET_MACHO expand/insns
+ 	to darwin.md.
+ 	(movdf_low, movsf_low, movsf_low_st, movsi_low, macho_correct_pic,
+ 	load_macho_picbase, macho_low, macho_high): Removed.
+ 	(builtin_setjmp_receiver): Call gen_macho_high and
+ 	gen_macho_low instead of checking the mode and calling
+ 	gen_macho_high_di directly.
+ 	* config/rs6000/darwin.md (load_macho_picbase_di): Use the MD constant.
+ 	(movdf_low_si, movsf_low_si, movsf_low_st_si, movsi_low_st):
+ 	Moved from rs6000.md.
+ 	(macho_high): New expander.
+ 	(macho_high_si): Renamed version of macho_high from rs6000.md.
+ 	(macho_low): New expander.
+ 	(macho_low_si): Renamed version of macho_low from rs6000.md.
+ 	(load_macho_picbase): New expander.
+ 	(load_macho_picbase_si): Renamed version of load_macho_picbase
+ 	from rs6000.md.
+ 	(macho_correct_pic): New expander.
+ 	(macho_correct_pic_si): Renamed version of macho_correct_pic
+ 	from rs6000.md.
+ 
+ 2004-11-07  Joseph S. Myers  <joseph@codesourcery.com>
+ 
+ 	* c-decl.c (finish_struct): Use complete sentences for diagnostic
+ 	for structures or unions with no members or named members.
+ 
+ 2004-11-07  Joseph S. Myers  <joseph@codesourcery.com>
+ 
+ 	* c-typeck.c (build_unary_op): Replace unreachable diagnostic for
+ 	taking address of bit-field by assertion.
+ 
+ 2004-11-06  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390.md (attribute "op_type"): Default to "NN".
+ 	(attribute "atype"): Default to "agen".
+ 	(attribute "length"): Default to 6.
+ 	(define_asm_attibutes): Remove.
+ 	("movti", "*movdi_64", "*movdi_31", "*movsi_zarch", "*movsi_esa",
+ 	"*movhi", "*movqi", "*movdf_64", "*movdf_31", "movsf",
+ 	"*clc", "*mvc", "*nc", "*oc", "*xc", "*xc_zero"):
+ 	Do not set type attribute to "cs" where already default.
+ 	("*cmpint_si", "*cmpint_di", "fix_truncdfsi2_ibm", "floatsidf2_ibm",
+ 	"*negdi2_31"):
+ 	Do not set type attribute to "other" where already default.
+ 	("movti", "*movdi_64", "*movdi_31", "*movdf_31",
+ 	"*strlendi", "*strlensi",
+ 	"*movmem_long_64", "*movmem_long_31",
+ 	"*clrmem_long_64", "*clrmem_long_31",
+ 	"*cmpmem_long_64", "*cmpmem_long_31",
+ 	"*cmpint_si", "*cmpint_di",
+ 	"addti3", "*adddi3_31z", "*adddi3_31",
+ 	"subti3", "*subdi3_31z", "*subdi3_31", "*negdi2_31",
+ 	"*sconddi", "*scondsi", "*sconddi_neg", "*scondsi_neg",
+ 	"fix_truncdfsi2_ibm", "floatsidf2_ibm", "extendsfdf2_ibm",
+ 	"*pool_entry", "pool_align", "pool_section_start",
+ 	"pool_section_end", "main_pool", "reload_base_31", "pool"):
+ 	Do not set op_type attribute to "NN" where already default.
+ 	("*extractqi", "*extracthi", "*zero_extendhisi2_31",
+ 	"*zero_extendqisi2_31", "*zero_extendqihi2_31",
+ 	"fix_truncdfsi2_ibm", "floatsidf2_ibm"):
+ 	Do not set atype attribute to "agen" where already default.
+ 	("*movmem_short", "*clrmem_short", "*cmpmem_short"): Don't set op_type.
+ 
+ 2004-11-06  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/t-iris6 (tp-bit.c): Fix target filename.
+ 
+ 2004-11-06  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	PR target/16830
+ 	* config/mips/mips.h (TARGET_CPU_CPP_BUILTINS): Don't define the
+ 	R3000 and R4000 macros on IRIX.
+ 
+ 2004-11-06  Andreas Schwab  <schwab@suse.de>
+ 
+ 	PR target/16286
+ 	* config/rs6000/altivec.h: Replace bool by __bool and pixel by
+ 	__pixel.
+ 
+ 2004-11-06  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-ssa-copyrename.c (rename_ssa_copies): Make it static.
+ 
+ 2004-11-06  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/2064.md ("z_int", "z_agen"): Ensure the condition
+ 	matches no insns already matched by other reservations.
+ 	* config/s390/2084.md ("x_int", "x_agen"): Ensure the condition
+ 	matches no insns already matched by other reservations.
+ 	("x_ss"): Remove, replace by ...
+ 	("x_cs"): ... this new reservation.  Check type instead of op_type.
+ 	Update bypasses to use x_cs instead of x_ss.
+ 	("x_nn"): Remove, replace by ...
+ 	("x_other"): ... this new reservation.  Check type instead of op_type.
+ 	Add x_other and x_branch to bypasses.
+ 	("x_vs"): New reservation.
+ 	* config/s390/s390.md (attribute "type"): Default according to op_type.
+ 	("*execute"): Set type to "cs".
+ 
+ 2004-11-06  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* fold-const.c (non_lvalue): Don't construct NON_LVALUE_EXPR
+ 	if we are in GIMPLE.
+ 
+ 2004-11-06  Hans-Peter Nilsson  <hp@bitrange.com>
+ 
+ 	PR rtl-optimization/17933
+ 	* rtlanal.c (dead_or_set_regno_p): Break out common code to...
+ 	(covers_regno_p): New function.  Handle SETs of PARALLEL,
+ 	and defer the rest to...
+ 	(covers_regno_no_parallel_p): New function.
+ 
+ 2004-11-06  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* config/sparc/sparc.c (function_arg_record_value_1): Skip
+ 	fields with zero length.
+ 	(function_arg_record_value_2): Likewise.
+ 	(function_arg_record_value_3): Use smallest_mode_for_size
+ 	instead of mode_for_size.
+ 	(function_arg_union_value): Return naked register for unions
+ 	with zero length.
+ 
+ 2004-11-06  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* config/sparc/sparc.c (scan_record_type): Handle vector types.
+ 	(function_arg_slotno): Handle vector types specially.
+ 	(function_arg_record_value_1): Split fields with vector type and
+ 	BLKmode into their subparts.
+ 	(function_arg_record_value_2): Likewise.  Be prepared to handle
+ 	more than 2 registers per field.
+ 	(function_arg_union_value): Increment regno inside the loop.
+ 	(function_arg_vector_value): New function.
+ 	(function_arg): Use it to split fields with vector type and
+ 	BLKmode into their subparts and build a PARALLEL.  Treat
+ 	other vector types like floats.
+ 	(function_value): Likewise.
+ 	(sparc_pass_by_reference): Handle vector types.
+ 	(sparc_return_in_memory): Likewise.
+ 
+ 2004-11-06  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-cfg.c (find_taken_edge_cond_expr): Remove an "if"
+ 	statement that never triggers.
+ 
+ 2004-11-06  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/2064.md ("z_o2", "z_o3"): Remove.
+ 	* config/s390/2084.md ("x_o2", "x_o3"): Remove.
+ 	("x_fdivd"): Use also for fsqrtd type.
+ 	("x_fdivs"): Use also for fsqrts type.
+ 	* config/s390/s390.md (attribute "type"): Remove "o2" and "o3" types.
+ 	("fix_truncdfsi2_ieee"): Set type to "ftoi".
+ 	("fix_truncdfsi2_ibm"): Set type to "other".
+ 	("floatdidf2", "floatdisf2"): Do not clobber CC.
+ 	("floatsidf2", "floatsidf2_ieee"): Likewise.
+ 	("floatsisf2", "floatsisf2_ieee"): Likewise.
+ 	("truncdfsf2", "truncdfsf2_ieee"): Only allow "register_operand".
+ 	("truncdfsf2_ibm"): Only allow "nonimmediate_operand".  Use LER
+ 	instead of LRER.
+ 	("extendsfdf2_ibm"): Do not set atype.  Set type to "floads".
+ 	("sqrtdf2"): Set type to "fsqrtd".
+ 	("sqrtsf2"): Set type to "fsqrts".
+ 
+ 2004-11-06  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-phinodes.c (remove_all_phi_nodes_for): Speed up using a
+ 	pointer to the last PHI node in the new PHI chain.
+ 
+ 2004-11-06  Kaz Kojima  <kkojima@gcc.gnu.org>
+ 
+ 	* config/sh/sh.c (prepare_move_operands): Emit a use of r12
+ 	for non-PIC TLS_MODEL_INITIAL_EXEC case.
+ 
+ 2004-11-06  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* expmed.c: Fix a comment typo.
+ 
+ 2004-11-06  Aaron W. LaFramboise  <aaronavay62@aaronwl.com>
+ 
+ 	PR target/18106
+ 	* config/i386/cygming.h
+ 	[HAVE_GAS_WEAK] (ASM_WEAKEN_LABEL): Macro defined.
+ 
+ 2004-11-06  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/sh/sh4a.md: Fix copyright.
+ 
+ 2004-11-06  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/rs6000/darwin.md, config/sh/sh4a.md: Replace GNU CC
+ 	with GCC.
+ 
+ 2004-11-05  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* config/rs6000/rs6000.md (scc patterns): Replace subfc with subf
+ 	when carry not used.  Suggested by Torbjorn Granlund.
+ 
+ 	* config/rs6000/rs6000.c (rs6000_emit_move): Don't force_reg
+ 	operand[1] unnecessarily.  Suggested by Eric Christopher.
+ 	(rs6000_adjust_cost): Increase latency of store to wider load.
+ 	(rs6000_rtx_costs): mulli only allows 16-bit constants.
+ 
+ 2004-11-05  Stan Shebs  <shebs@apple.com>
+ 
+ 	* config/rs6000/rs6000.c (machopic_output_stub): Output
+ 	ldu instead of lwzu for 64-bit stubs.
+ 
+ 2004-11-05  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/alpha/alpha.c (alpha_expand_unaligned_load): Special case
+ 	size 2 with BWX.
+ 	(alpha_expand_unaligned_store): Likewise.
+ 
+ 2004-11-05  Richard Henderson  <rth@redhat.com>
+ 
+ 	* expmed.c (extract_force_align_mem_bit_field): New.
+ 	(extract_split_bit_field): Call it.
+ 
+ 2004-11-05  Richard Henderson  <rth@redhat.com>
+ 
+ 	* ia64.md (UNSPEC_SHRP): New.
+ 	(dshift_count_operand): New.
+ 	(ashrti3, ashrti3_internal, lshrti3, lshrti3_internal, shrp): New.
+ 	* ia64.c (rtx_needs_barrier): Handle UNSPEC_SHRP.
+ 
+ 2004-11-05  Joseph S. Myers  <joseph@codesourcery.com>
+ 
+ 	* c-typeck.c (output_init_element): Return early if value is
+ 	error_mark_node.
+ 
+ 2004-11-05  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	* invoke.texi (-fno-guess-branch-probability): Rewrite.
+ 
+ 	* config/ia64/ia64.c (rtx_needs_barrier, case UNSPEC_GR_SPILL): Change
+ 	1 to UNSPEC_GR_SPILL.
+ 
+ 2004-11-05  Andreas Krebbel  <krebbel1@de.ibm.com>
+ 
+ 	* config/s390/s390.c (s390_fixed_condition_code_regs): New function.
+ 	(TARGET_FIXED_CONDITION_CODE_REGS): Macro defined.
+ 
+ 2004-11-05  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* bitmap.h (enum bitmap_bits): Remove.
+ 	(bitmap_operation): Remove.
+ 	(bitmap_and, bitmap_and_into, bitmap_and_compl,
+ 	bitmap_and_compl_into, bitmap_ior, bitmap_ior_into, bitmap_xor,
+ 	bitmap_xor_into): Prototype.
+ 	* bitmap.c (bitmap_elt_insert_after, bitmap_elt_clear_from): New.
+ 	(bitmap_operation): Remove.
+ 	(bitmap_and, bitmap_and_into, bitmap_and_compl,
+ 	bitmap_and_compl_into, bitmap_ior, bitmap_ior_into, bitmap_xor,
+ 	bitmap_xor_into): New.
+ 	(bitmap_ior_and_compl, bitmap_ior_and_compl_into): Adjust.
+ 
+ 	PR tree-optimization/18307
+ 	* tree-ssa-alias.c (merge_pointed_to_info): Protected against DEST
+ 	and ORIG being the same node.
+ 
+ 2004-11-04  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* Makefile.in (distclean): Don't delete nonexistent fixinc/ directory.
+ 	(install-mkheaders): Install the version built for the
+ 	host, not for the build machine.
+ 	* configure.ac: Always run fixincludes.
+ 	(all_outputs): Remove mkheaders.
+ 	* configure: Regenerate.
+ 	* fixinc.in: Move to fixincludes/.
+ 	* mkfixinc.sh: Likewise.
+ 	* mkheaders.in: Likewise.
+ 	* README-fixinc: Likewise.
+ 
+ 2004-11-05  Ramana Radhakrishnan  <ramana.radhakrishnan@codito.com>
+ 
+ 	PR target/18263
+ 	* config/arc/lib1funcs.asm (___umulsidi3): Change use of cmp to the
+ 	equivalent on the A4.
+ 
+ 2004-11-05  Joseph S. Myers  <joseph@codesourcery.com>
+ 
+ 	* doc/c-tree.texi, doc/cfg.texi, doc/contrib.texi, doc/cpp.texi,
+ 	doc/cppopts.texi, doc/extend.texi, doc/fragments.texi,
+ 	doc/frontends.texi, doc/gcov.texi, doc/hostconfig.texi,
+ 	doc/implement-c.texi, doc/install.texi, doc/invoke.texi,
+ 	doc/libgcc.texi, doc/md.texi, doc/passes.texi,
+ 	doc/portability.texi, doc/rtl.texi, doc/sourcebuild.texi,
+ 	doc/standards.texi, doc/tm.texi, doc/tree-ssa.texi,
+ 	doc/trouble.texi: Correct end-of-sentence markup and markup of
+ 	"etc.", "e.g." and "i.e.".  Use @code in various places where
+ 	appropriate.
+ 
+ 2004-11-05  Joseph S. Myers  <joseph@codesourcery.com>
+ 
+ 	* doc/c-tree.texi, doc/cfg.texi, doc/extend.texi, doc/gty.texi,
+ 	doc/install.texi, doc/invoke.texi, doc/md.texi, doc/passes.texi,
+ 	doc/rtl.texi, doc/tm.texi, doc/tree-ssa.texi: Remove trailing
+ 	whitespace.
+ 
+ 2004-11-04  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* config/arm/arm.c (arm_handle_notshared_attribute): New function.
+ 	* doc/extend.texi: Document "notshared" attribute.
+ 
+ 2004-11-04  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-phinodes.c (make_phi_node): Make it static.
+ 	* tree.h: Remove the prototypes for make_phi_node.
+ 
+ 2004-11-04  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* stmt.c (expand_asm, expand_asm_operands): Make them static.
+ 	* tree.h: Remove the prototypes for expand_asm and
+ 	expand_asm_operands.
+ 
+ 2004-11-04  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* passes.c (rest_of_compilation): Make it static.
+ 	* toplev.h: Remove the prototype for rest_of_compilation.
+ 
+ 2004-11-04  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* jump.c (cleanup_barriers): Use delete_insn instead of
+ 	delete_barrier.
+ 	(delete_barrier): Remove.
+ 	* rtl.h: Remove the corresponding prototype.
+ 
+ 2004-11-04  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* expr.c (mostly_zero_p): Make it static.
+ 	* tree.h: Remove the prototype for mostly_zeros_p.
+ 
+ 2004-11-04  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* cfgrtl.c (force_nonfallthru_and_redirect): Make it static.
+ 
+ 2004-11-04  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* builtins.c (expand_builtin_return_addr,
+ 	expand_builtin_longjmp, expand_builtin_trap): Make them static.
+ 	* expr.h: Remove the prototypes for expand_builtin_longjmp and
+ 	expand_builtin_trap.
+ 	* tree.h: Remove the prototype for expand_builtin_return_addr.
+ 
+ 2004-11-04  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-cfg.c (find_taken_edge): Reject VAL begin NULL.
+ 	* tree-ssa-ccp.c (visit_cond_stmt): Don't call find_taken_edge
+ 	with VAL being NULL.
+ 
+ 2004-11-04  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* cfghooks.c (delete_basic_block): Remove code to truncate
+ 	edge vectors.
+ 
+ 2004-11-04  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* flow.c (init_propagate_block_info): Change the type of i to
+ 	unsigned.
+ 
+ 2004-11-04  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	PR tree-optimization/18184
+ 	* c-typeck.c (comptypes): Do not treat pointers of different
+ 	modes or alias-all flags as equivalent.
+ 	* tree-ssa.c (tree_ssa_useless_type_conversion_1): Likewise.
+ 
+ 2004-11-04  Joseph S. Myers  <joseph@codesourcery.com>
+ 
+ 	* doc/gty.texi, doc/makefile.texi, doc/sourcebuild.texi: Don't
+ 	reference specific C parser files in examples.
+ 
+ 2004-11-04  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	PR target/15342
+ 	* regrename.c (scan_rtx): Treat the destinations of SETs and CLOBBERs
+ 	as OP_INOUT if the instruction is predicated.
+ 
+ 2004-11-04  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* bitmap.h: Fix a comment typo.  Follow spelling conventions.
+ 	* tree-vectorizer.c: Fix a comment typo.
+ 
+ 2004-11-04  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* sdbout.c (SDB_GENERATE_FAKE): Remove.
+ 	(gen_fake_label): Don't use SDB_GENERATE_FAKE.
+ 	* system.h: Poison SDB_GENERATE_FAKE.
+ 	* doc/tm.texi (SDB_GENERATE_FAKE): Remove.
+ 
+ 2004-11-04  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390.md ("*addsi3_sign"): Use canonical RTL.
+ 
+ 2004-11-04  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR other/18277
+ 	* gthr-posix.h (__gthread_recursive_mutex_init_function): Revert
+ 	2004-10-29 patch
+ 
+ 2004-11-04  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* predict.c (propagate_freq): Make bitno unsigned. Move
+ 	npredecessors update out of loop.
+ 
+ 	* bitmap.h (bitmap_iterator): Remove word_bit and bit
+ 	fields. Rename others.
+ 	(bmp_iter_common_next_1, bmp_iter_single_next_1,
+ 	bmp_iter_single_init, bmp_iter_end_p, bmp_iter_single_next,
+ 	bmp_iter_and_not_next_1, bmp_iter_and_not_init,
+ 	bmp_iter_and_not_next, bmp_iter_and_next_1, bmp_iter_and_init,
+ 	bmp_iter_and_next): Remove.
+ 	(bmp_iter_set_init, bmp_iter_and_init, bmp_iter_and_compl_init,
+ 	bmp_iter_next, bmp_iter_set, bmp_iter_and, bmp_iter_and_compl):
+ 	New.
+ 	(EXECUTE_IF_SET_IN_BITMAP, EXECUTE_IF_AND_IN_BITMAP,
+ 	EXECUTE_IF_AND_COMPL_IN_BITMAP): Adjust.
+ 
+ 	* bitmap.h (bitmap_a_or_b, bitmap_a_and_b): Remove.
+ 	* df.c (dataflow_set_a_op_b): Use bitmap_and, bitmap_ior,
+ 	bitmap_and_into, bitmap_ior_into as appropriate.
+ 	* except.c (remove_eh_handler):	Likewise.
+ 	* global.c (modify_bb_reg_pav, make_accurate_live_analysis): Likewise.
+ 	* tree-dfa.c (mark_new_vars_to_rename): Likewise.
+ 	* tree-ssa-alias.c (merge_pointed_to_info): Likewise.
+ 	* tree-ssa-live.h (live_merge_and_clear): Likewise.
+ 	* tree-ssa-loop-ivopts.c (find_best_candidate, try_add_cand_for):
+ 	Likewise.
+ 
+ 	* bitmap.c (bitmap_print): Make bitno unsigned.
+ 	* bt-load.c (clear_btr_from_live_range,
+ 	btr_def_live_range): Likewise.
+ 	* caller-save.c (save_call_clobbered_regs): Likewise.
+ 	* cfganal.c (compute_dominance_frontiers_1): Likewise.
+ 	* cfgcleanup.c (thread_jump): Likewise.
+ 	* cfgrtl.c (safe_insert_insn_on_edge): Likewise.
+ 	* conflict.c (conflict_graph_compute): Likewise.
+ 	* ddg.c (add_deps_for_use): Likewise.
+ 	* df.c (df_refs_update): Likewise.
+ 	* except.c (remove_eh_handler): Likewise.
+ 	* flow.c (verify_local_live_at_start, update_life_info,
+ 	initialize_uninitialized_subregs, propagate_one_insn,
+ 	free_propagate_block_info, propagate_block, find_use_as_address,
+ 	reg_set_to_hard_reg_set): Likewise.
+ 	* gcse.c (clear_modify_mem_tables): Likewise.
+ 	* global.c (global_conflicts, build_insn_chain): Likewise.
+ 	* ifcvt.c (dead_or_predicable): Likewise.
+ 	* local-alloc.c (update_equiv_regs): Likewise.
+ 	* loop.c (load_mems): Likewise.
+ 	* ra-build.c (livethrough_conflicts_bb, conflicts_between_webs):
+ 	Likewise.
+ 	* ra-rewrite.c (reloads_to_loads, rewrite_program2, actual_spill):
+ 	Likewise.
+ 	* reload1.c (order_regs_for_reload, finish_spills): Likewise.
+ 	* sched-deps.c (sched_analyze_insn, free_deps): Likewise.
+ 	* sched-rgn.c (propagate_deps
+ 	* tree-cfg.c (tree_purge_all_dead_eh_edges): Likewise.
+ 	* tree-dfa.c (dump_dfa_stats
+ 	tree-into-ssa.c (compute_global_livein, insert_phi_nodes,
+ 	insert_phi_nodes_for, debug_def_blocks_r, invalidate_name_tags):
+ 	Likewise.
+ 	* tree-outof-ssa.c (coalesce_ssa_name, coalesce_vars,
+ 	free_temp_expr_table, find_replaceable_exprs): Likewise.
+ 	* tree-sra.c (scan_function, scalarize_parms): Likewise.
+ 	* tree-ssa-alias.c (init_alias_info,
+ 	compute_points_to_and_addr_escape,
+ 	compute_flow_sensitive_aliasing, maybe_create_global_var): Likewise.
+ 	* tree-ssa-dce.c (mark_control_dependent_edges_necessary): Likewise.
+ 	* tree-ssa-live.c (new_tree_live_info, live_worklist,
+ 	calculate_live_on_entry, calculate_live_on_exit, compare_pairs,
+ 	sort_coalesce_list, build_tree_conflict_graph, dump_live_info
+ 	tree-ssa-loop-manip.c (add_exit_phis_var): Likewise.
+ 	tree-ssa-operands.c (get_asm_expr_operands, add_call_clobber_ops,
+ 	add_call_read_ops): Likewise.
+ 	* tree-ssa-pre.c (bitmap_print_value_set, insert_aux): Likewise.
+ 	* tree-ssa-live.h (num_var_partitions): Return unsigned.
+ 
+ 2004-11-03  Dorit Naishlos  <dorit@il.ibm.com>
+ 
+ 	PR tree-optimization/18009
+ 	* tree-vectorizer.h (enum dr_alignment_support): New type.
+ 	(MAX_NUMBER_OF_UNALIGNED_DATA_REFS): Removed.
+ 	(LOOP_UNALIGNED_DR): replaced with LOOP_VINFO_UNALIGNED_DR and holds a
+ 	single data_reference (instead of a varray of references).
+ 	* tree-vectorizer.c (new_loop_vec_info): Likewise.
+ 	(vect_gen_niters_for_prolog_loop): Likewise.
+ 	(vect_update_inits_of_drs): Likewise.
+ 
+ 	(vect_update_inits_of_drs): Setting of DR_MISALIGNMENT moved to
+ 	vect_enhance_data_refs_alignment.
+ 	(vect_do_peeling_for_alignment): Likewise.
+ 	(vect_enhance_data_refs_alignment): Decide if and by how much to peel;
+ 	this functionality used to be in vect_analyze_data_refs_alignment.
+ 	Also update DR_MISALIGNMENT due to peeling; this functionality used to
+ 	be in vect_update_inits_of_drs and vect_do_peeling_for_alignment).
+ 	(vect_analyze_data_refs_alignment): Decision on whether and by how much
+ 	to peel moved to vect_enhance_data_refs_alignment. Call
+ 	vect_supportable_dr_alignment.
+ 
+ 	(vect_compute_data_ref_alignment): Set STMT_VINFO_VECTYPE.
+ 	(vect_compute_data_refs_alignment): Return bool. Consider return value
+ 	of vect_compute_data_ref_alignment and return true/false accordingly.
+ 	(vect_enhance_data_refs_alignment): Consider return value of
+ 	vect_compute_data_refs_alignment and return true/false accordingly.
+ 
+ 	(vect_supportable_dr_alignment): New function.
+ 	(vectorizable_store): Call vect_supportable_dr_alignment.
+ 	(vectorizable_load): Call vect_supportable_dr_alignment. Alignment
+ 	support checks moved from here to vect_supportable_dr_alignment.
+ 
+ 	(vect_transform_loop): Avoid 80 columns overflow.
+ 
+ 2004-11-03  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* timevar.c (timevar_enable): Change from
+ 	static.
+ 	(timevar_push): Rename to ...
+ 	(timevar_push_1): this and remove the
+ 	enabled check.
+ 	(timevar_pop): Rename to ...
+ 	(timevar_pop_1): this and remove the
+ 	enabled check.
+ 	* timevar.h (POP_TIMEVAR_AND_RETURN): Use do/while loops.
+ 	(timevar_pop): New macro.
+ 	(timevar_push): New macro.
+ 	(timevar_enable): Declare.
+ 
+ 2004-11-03  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* config/darwin.h (REAL_LIBGCC_SPEC): Define to use shared
+ 	libgcc for shared libraries.
+ 
+ 2004-11-03  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390-protos.h (s390_split_access_reg): Add prototype.
+ 	* config/s390/s390.c (s390_split_access_reg): New function.
+ 	(regclass_map): Add access registers.
+ 	(get_thread_pointer): Use access register instead of UNSPEC_TP.
+ 	* config/s390/s390.h (FIRST_PSEUDO_REGISTER): Set to 38.
+ 	(ACCESS_REGNO_P, ACCESS_REG_P): New macros.
+ 	(TP_REGNUM): New define.
+ 	(FIXED_REGISTERS, CALL_USED_REGISTERS, CALL_REALLY_USED_REGISTERS,
+ 	REG_ALLOC_ORDER): Add access registers.
+ 	(HARD_REGNO_NREGS, HARD_REGNO_MODE_OK, CLASS_MAX_NREGS,
+ 	CANNOT_CHANGE_MODE_CLASS): Support access registers.
+ 	(enum reg_class): Add ACCESS_REGS.
+ 	(REG_CLASS_NAMES, REG_CLASS_CONTENTS): Likewise.
+ 	(REG_CLASS_FROM_LETTER): Add 't' constraint.
+ 	(REGISTER_NAMES): Add access registers.
+ 	* config/s390/s390.md (UNSPEC_TP): Remove.
+ 	("*movdi_64"): Add access register alternatives.  Provide splitters
+ 	to split DImode access register <-> GPR moves into SImode moves.
+ 	("*movsi_zarch", "*movsi_esa"): Add access register alternatives.
+ 	("movstrictsi"): Likewise.
+ 	("get_tp_64", "get_tp_31"): Reimplement using access registers.
+ 	("set_tp_64", "set_tp_31"): Likewise.
+ 	("*set_tp"): New insn.
+ 
+ 2004-11-03  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-phinodes.c (resize_phi_node): Copy only a portion of
+ 	the PHI node currently in use.
+ 
+ 2004-11-03  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR tree-opt/18231
+ 	* tree.c (staticp) <case FUNCTION_DECL>: Nested functions are static
+ 	also.
+ 
+ 2004-11-03  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/18270
+ 	* tree-outof-ssa.c (analyze_edges_for_bb): If a block has incoming
+ 	abnormal edges, commit all pending stmts on incoming edges.
+ 
+ 2004-11-03  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* tree-ssa-loop-ivopts.c (get_address_cost): Offset zero does not
+ 	cause extra costs.  Generate canonical RTL.
+ 
+ 2004-11-02  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* lambda-code.c (lambda_compute_auxillary_space): Update comments.
+ 	(lambda_compute_target_space). Ditto.
+ 	* lambda.h (lambda_trans_matrix): Ditto.
+ 	(lambda_linear_expression): Ditto.
+ 	(lambda_body_vector): Ditto.
+ 	(lambda_loopnest): Ditto.
+ 	* tree-loop-linear.c (gather_interchange_stats): Combine tests,
+ 	update comments, and remove pointless addition of 0.
+ 	(linear_transform_loops): Update comments.
+ 
+ 2004-11-03  Sebastian Pop  <pop@cri.ensmp.fr>
+ 
+ 	* tree.c (tree_fold_gcd): Use FLOOR_MOD_EXPR instead of
+ 	CEIL_MOD_EXPR.
+ 
+ 2004-11-03 Jeff Law  <law@redhat.com>
+ 
+ 	* predict.c (struct block_info_def): Kill "tovisit" field.
+ 	(propagate_freq): Accept new "tovisit" parameter.  Change
+ 	read/write access methods for "tovisit" to check the "tovisit"
+ 	bitmap instead of a bit in block_info_def.
+ 	(estimate_loops_at_level): Allocate "tovisit" bitmap.  Pass
+ 	it to propagate_freq.
+ 
+ 	* stmt.c (expand_case): Speed up code to detect duplicate case
+ 	label targets and count unique case label targets.
+ 
+ 2004-11-03  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* cppdefault.c, cppdefault.h, timevar.h: Update copyright.
+ 
+ 2004-11-03  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* bitmap.h, dbxout.c, tree-mudflap.c: Fix comment formatting.
+ 
+ 2004-11-03  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-cfg.c (find_taken_edge): Abort if we are given a
+ 	statement that is neither COND_EXPR nor SWITCH_EXPR.
+ 
+ 2004-11-02  Zdenek Dvorak  <dvorakz@suse.cz>
+ 
+ 	* fold-const.c (fold): Reassociate also (x - mult) + mult and
+ 	(mult - x) + mult.  Cast operands of expression after applying
+ 	distributive law to the correct types.  Apply distributive law
+ 	to a * c - b * c for all non-float types.
+ 
+ 2004-11-02  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* configure.ac: Don't clear STMP_FIXINC or STMP_FIXPROTO just
+ 	because we don't want to run them now; instead, set them to
+ 	stmp-install-fixproto or stmp-install-fixinc.
+ 	* Makefile.in (stmp-install-fixproto): New.
+ 	(stmp-install-fixinc): New.
+ 	* configure: Regenerate.
+ 
+ 2004-11-02  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* flow.c (init_propagate_block_info): Use bitmap_empty_p on result
+ 	of bitmap_xor.
+ 
+ 2004-11-02  Ziemowit Laski  <zlaski@apple.com>
+ 
+ 	* c-lang.c (LANG_HOOKS_TYPES_COMPATIBLE_P): Remove.
+ 	(c_types_compatible_p): Move function definition...
+ 	* c-objc-common.c (c_types_compatible_p): ...here.
+ 	* c-objc-common.h (LANG_HOOKS_TYPES_COMPATIBLE_P): Moved here from
+ 	c-lang.c.
+ 
+ 2004-11-02  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* cfgloop.h (struct loop): Update comment.
+ 	* cse.c (cse_main): Remove obsolete comment.
+ 
+ 	* expr.h (gen_cond_trap): Move prototype under functions provided
+ 	by optabs.c.
+ 	(canonicalize_condition, get_condition): Move to...
+ 	* rtl.h (canonicalize_condition, get_condition): ...here.
+ 	(branch_target_load_optimize): Add comment that this function is
+ 	in bt-load.c.
+ 	* loop.c (canonicalize_condition, get_condition): Move to...
+ 	* rtlanal.c (canonicalize_condition, get_condition): ...here.
+ 	* sched-deps.c (get_condition): Rename to sched_get_condition.
+ 	(add_dependence): Update this caller.
+ 
+ 2004-11-02  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR tree-opt/16808
+ 	* tree-ssa.c (replace_immediate_uses): If we call fold_stmt, make sure
+ 	that the vops get marked for renaming.
+ 
+ 2004-11-02  Andreas Krebbel  <krebbel1@de.ibm.com>
+ 
+ 	* config/s390/s390.md ("movcc"): Set type attribute.
+ 
+ 2004-11-02  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-phinodes.c (add_phi_arg): Add an assertion that the
+ 	edge already exists.
+ 
+ 2004-11-02  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-phinodes.c (remove_phi_arg_num): Do not zero the
+ 	element that's being removed.
+ 
+ 2004-11-02  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-ssa-threadupdate.c (copy_phis_to_block): Install PHI
+ 	arguments using PENDING_STMT.
+ 	(thread_block): Call copy_phis_to_block after redirecting an
+ 	edge.
+ 
+ 2004-11-02  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* bitmap.h (bitmap_and, bitmap_and_into, bitmap_and_compl,
+ 	bitmap_and_compl_into, bitmap_ior, bitmap_iot_into,
+ 	bitmap_ior_compl, bitmap_xor, bitmap_xor_into): Produce void.
+ 	(bitmap_ior_and_compl_into): Produce bool.
+ 	(bitmap_union_of_diff): Rename to ...
+ 	(bitmap_ior_and_compl): ... here. Produce bool.
+ 	* bitmap.c (bitmap_ior_and_compl_into): Return bool. Use
+ 	bitmap_operation directly.
+ 	(bitmap_union_of_diff): Rename to ...
+ 	(bitmap_ior_and_compl): ... here. Return bool, use
+ 	bitmap_operation directly.
+ 	* df.c (df_rd_transfer_function): Use bitmap_ior_and_compl.
+ 	(df_ru_transfer_function, df_lr_transfer_function): Likewise.
+ 	* global.c (modify_bb_reg_pav): Likewise.
+ 
+ 	* bitmap.h (bitmap_equal_p): Return bool.
+ 	(bitmap_intersect_p, bitmap_intersect_compl_p): Declare.
+ 	* bitmap.c (bitmap_equal_p): Return bool. Compare directly.
+ 	(bitmap_intersect_p, bitmap_intersect_compl_p): New.
+ 	* flow.c (calculate_global_regs_live): Use bitmap_intersect_p and
+ 	bitmap_intersect_compl_p.
+ 	* ifcvt (dead_or_predicable): Likewise.
+ 
+ 2004-11-02  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	PR rtl-optimization/17104
+ 	* config/rs6000/rs6000.c (rs6000_emit_move): Don't wrap small
+ 	loads in zero_extend.
+ 
+ 2004-11-02  Danny Smith  <dannysmith@users.sourceforge.net>
+ 
+ 	PR debug/18242
+ 	* toplev.c (debug_type_names): Remove "dwarf-1".
+ 
+ 2004-11-02  Ben Elliston  <bje@au.ibm.com>
+ 
+ 	* timevar.h (timevar_get): Remove.
+ 	* timevar.c (timevar_get): Remove unused function.
+ 
+ 2004-11-02  Joseph S. Myers  <joseph@codesourcery.com>
+ 
+ 	* doc/include/texinfo.tex: Update from Texinfo CVS.
+ 
+ 2004-11-02  Ben Elliston  <bje@au.ibm.com>
+ 
+ 	* cppdefault.h (cpp_SYSROOT): Remove.
+ 	* cppdefault.c (cpp_SYSROOT): Likewise.
+ 
+ 2004-11-01  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/16447
+ 	* tree-cfg.c (bsi_commit_one_edge_insert): Rename from
+ 	bsi_commit_edge_inserts_1, and make funtion external.  Return new block.
+ 	(bsi_commit_edge_inserts): Use renamed bsi_commit_one_edge_insert.
+ 	* tree-optimize.c (pass_cleanup_cfg_post_optimizing): Enable listing.
+ 	* tree-flow.h (bsi_commit_one_edge_insert): Extern decl.
+ 	* tree-outof-ssa.c (rewrite_trees): Don't commit edges here.
+ 	(same_stmt_list_p): New.  Return TRUE if edge is to be forwarded.
+ 	(identical_copies_p): New.  Return true is two copies are the same.
+ 	(identical_stmt_lists_p): New.  Return true if stmt lists are the same.
+ 	(analyze_edges_for_bb): New.  Determine how best to insert edge stmts
+ 	for a basic block.
+ 	(perform_edge_inserts): New.  Determine what to do with all stmts that
+ 	have been inserted on edges.
+ 	(remove_ssa_form):  Analyze and commit edges from here.
+ 
+ 2004-11-01  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR bootstrap/18232
+ 	* bitmap.h (bmp_iter_end_p): Take a const pointer instead of a struct.
+ 	(EXECUTE_IF_SET_IN_BITMAP): Update call to bmp_iter_end_p.
+ 	(EXECUTE_IF_AND_COMPL_IN_BITMAP): Likewise.
+ 	(EXECUTE_IF_AND_IN_BITMAP): Likewise.
+ 
+ 2004-11-01  Joseph S. Myers  <joseph@codesourcery.com>
+ 
+ 	PR c/18239
+ 	* c-decl.c (get_parm_info): Allow FUNCTION_DECLs to appear amongst
+ 	parameter declarations.
+ 
+ 2004-11-01  Andreas Krebbel  <krebbel1@de.ibm.com>
+ 
+ 	* config/s390/s390.c (regclass_map): Put reg 33 (cc) to CC_REGS group.
+ 	(s390_secondary_input_reload_class)
+ 	(s390_secondary_output_reload_class): Use GENERAL_REGS to reload a cc
+ 	register.
+ 	(s390_expand_cmpmem): Enable cmpmem implementation.
+ 	* config/s390/s390.h (reg_class, REG_CLASS_NAMES, REG_CLASS_CONTENTS):
+ 	Added three new classes: CC_REGS, ADDR_CC_REGS, GENERAL_CC_REGS.
+ 	(REG_CLASS_FROM_LETTER): New constraint 'c' added.
+ 	* config/s390/s390.md ("movcc"): New insn pattern.
+ 	* doc/md.texi: Document 'c' constraint for s390.
+ 
+ 2004-11-01  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	PR c++/18064
+ 	* doc/extend.texi (Deprecated Features): Deprecate G++ covariant
+ 	extension.
+ 
+ 2004-10-16  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	Fix PR tree-optimization/17672
+ 	Fix PR tree-optimization/18168
+ 
+ 	* lambda-code.c (lambda_lattice_compute_base): Fix reversed
+ 	assert test.
+ 	(gcc_tree_to_linear_expression): Add extra to existing constant.
+ 	(depth_of_nest): Factor out function used in various places.
+ 	(gcc_loop_to_lambda_loop): Clean up code a little bit. No
+ 	functional changes.
+ 	(find_induction_var_from_exit_cond): Stop guessing, and just
+ 	get the right answer :).
+ 	(gcc_loopnest_to_lambda_loopnest): Remove useless pre-allocation.
+ 	Print out message about result of attempt to create perfect nest.
+ 	(lbv_to_gcc_expression): Add type argument, use it to do math
+ 	and induction variable creation.
+ 	(lle_to_gcc_expression): Ditto.
+ 	(lambda_loopnest_to_gcc_loopnest): Create new iv with same type as
+ 	oldiv. Pass type argument to lle_to_gcc_expression and
+ 	lbv_to_gcc_expression.
+ 	Reset number of iterations after transformation.
+ 	(perfect_nestify): Remove useless pre-allocation, and cleanup
+ 	a small amount.
+ 
+ 	* tree-data-ref.c (build_classic_dist_vector): Return false for
+ 	dependences completely outside of the loop nest we asked about.
+ 	(build_classic_dir_vector): Ditto.
+ 	(compute_data_dependences_for_loop): Only add dependence relations
+ 	inside the loop we asked about.
+ 
+ 	* tree-loop-linear.c (linear_transform_loops): Use DDR_SIZE_VECT.
+ 	Compute immediate uses.
+ 
+ 	* tree-optimize.c: Move linear_transform_loops to before ivcanon.
+ 
+ 2004-11-01  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-cfg.c (thread_jumps): Fix a comment typo.
+ 
+ 2004-11-01  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-cfg.c (thread_jumps): Fix a comment typo.
+ 
+ 2004-10-31  Nicolas Pitre <nico@cam.org>
+ 
+ 	* config/arm/ieee754-sf.S (floatdisf): Fix regression with
+ 	values smaller than 2^32.
+ 
+ 2004-10-31 Jeff Law  <law@redhat.com>
+ 
+ 	* cfgloop.h (struct loop): Remove unused "nodes" field.
+ 	* timevar.def (TV_TREE_LOOP_BOUNDS): New.
+ 	* tree-data-ref.c (find_data_references_in_loop): Use get_loop_body
+ 	instead of calling flow_bb_inside_loop_p for every basic block
+ 	in the function.
+ 	* tree-ssa-loop.c (pass_record_bounds): Use TV_TREE_LOOP_BOUNDS.
+ 
+ 2004-10-31  Graham Stott <graham.stott@btinternet.com>
+ 
+ 	* config/pa/pa.md: (prefetch_64, prefetch_32): Fix typo.  Use
+ 	INT_5_BITS instead of VAL_5_BITS_P.
+ 
+ 2004-10-31  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	PR middle-end/14521
+ 	* tree-inline.c (inline_forbidden_p_1): Use %qF instead of '%F'
+ 	for consistent quoting in diagnostic messages.
+ 	(expand_call_inline): Likewise.
+ 	* tree-optimize.c (tree_rest_of_compilation): Likewise.
+ 	* tree-ssa.c (warn_uninitialized_var): Likewise.
+ 	(warn_uninitialized_phi): Likewise.
+ 
+ 2004-10-31  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.c (mips_cannot_change_mode_class): Use a stricter
+ 	mode check.
+ 
+ 2004-10-31  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* c-common.c: Fix a comment typo.
+ 
+ 2004-10-31  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR middle-end/17526
+ 	* tree-gimple.c (is_gimple_mem_rhs): Also require a val for
+ 	aggregate types that are not BLKmode.
+ 
+ 2004-10-30  Ziemowit Laski  <zlaski@apple.com>
+ 
+ 	* c-common.h (objc_lookup_ivar): Add second parameter to
+ 	prototype.
+ 	* c-typeck.c (build_external_ref): After looking up symbol,
+ 	pass it to objc_lookup_ivar() to decide whether it or the
+ 	ivar should be used, rather than deciding the issue locally.
+ 	* stub-objc.c (objc_lookup_ivar): Add an OTHER parameter,
+ 	which is simply returned in the non-ObjC case.
+ 
+ 2004-10-30  Danny Smith  <dannysmith@users.sourceforge.net>
+ 
+ 	* sdbout.c (sdbout_symbol): Do not output type .def statements
+ 	for builtin types.
+ 
+ 2004-10-30  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+ 
+ 	* c-common.c (catenate_strings): New.
+ 	(c_parse_error): Use it.  Don't over-escape.
+ 
+ 2004-10-30  Kaz Kojima  <kkojima@gcc.gnu.org>
+ 
+ 	* config/sh/sh.c (calc_live_regs): Declare reg as unsigned and
+ 	modify the for loop expressions for it.  Remove unnecessary casts.
+ 	(sh_expand_prologue): Declare reg as unsigned.
+ 	(sh_gimplify_va_arg_expr): Initinalize lab_over.
+ 	(sh_handle_sp_switch_attribute): Add const qualifier appropriately.
+ 
+ 2004-10-30  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* doc/invoke.texi (Darwin Options): Improve description of
+ 	how the subtype is chosen.
+ 
+ 2004-10-30  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	PR middle-end/18096
+ 	* config/rs6000/rs6000.c (rs6000_emit_allocate_stack): Check that
+ 	the stack adjustment, "size", is valid for Pmode.  If the stack
+ 	frame is too large, generate a trap insn and issue a warning.
+ 
+ 2004-10-30  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-ssa-dom.c: Fix comment typos.
+ 
+ 2004-10-30  Kaz Kojima  <kkojima@gcc.gnu.org>
+ 
+ 	* config/sh/sh.c (prepare_move_operands): Use operands[0]
+ 	for the output rtl if no_new_pseudos is set.  Remove redundant
+ 	line.
+ 
+ 2004-10-30  Joseph S. Myers  <joseph@codesourcery.com>
+ 
+ 	PR c/16666
+ 	* c-decl.c (start_function): Don't check for DECL_BUILT_IN when
+ 	determining whether to copy parameter types from a previous
+ 	prototype declaration.
+ 
+ 2004-10-29  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	PR rtl-optimization/17581
+ 	* cselib.c (cselib_process_insn): The last instruction of a libcall
+ 	block, with the REG_RETVAL note, should be considered in the libcall.
+ 	* gcse.c (do_local_cprop): Allow constants to be propagated outside
+ 	of libcall blocks.
+ 	(adjust_libcall_notes): Use simplify_replace_rtx instead of
+ 	replace_rtx to avoid creating invalid RTL in REG_RETVAL notes.
+ 
+ 2004-10-30  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-phinodes.c (create_phi_node): Don't zero PHI_REWRITTEN.
+ 
+ 2004-10-29 Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (struct edge_info): New structure holding
+ 	edge equivalences and edge redirection information.
+ 	(get_eq_expr_value, record_dominating_conditions): Kill.
+ 	(propagate_to_outgoing_edges): Renamed from cprop_into_phis.
+ 	Call record_edge_info.
+ 	(allocate_edge_info, free_edge_info): New.
+ 	(tree_ssa_dominator_optimize): Use propagate_to_outgoing_edges
+ 	rather than cprop_into_phis.  Free all edge infos before threading
+ 	jumps.
+ 	(thread_across_edge): Allocate new edge info structures as needed
+ 	and store the redirection target into the edge info structure
+ 	instead of the edge's AUX field.
+ 	(dom_opt_initialize_block): Mark unused argument with ATTRIBUTE_UNUSED.
+ 	(record_equivalence_from_incoming_edge): Lose unnecessary argument.
+ 	Revamp code which finds and records equivalences associated with
+ 	edges to use saved data in the edge_info structure.
+ 	(record_equivalencs_from_phis): Similarly.
+ 	(dom_opt_finalize_block): Revamp code which finds and records
+ 	equivalences associated with edges to use saved data in the
+ 	edge_info structure.
+ 	(build_and_record_new_cond): New function.
+ 	(record_conditions): Use build_and_record_new_cond to record
+ 	dominating conditions.
+ 	(record_edge_info): New function.
+ 	(record_range): Tighten test for conditions which create
+ 	useful range records.
+ 
+ 2004-10-29  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* config/i386/darwin.h (ASM_SPEC): Simplify.
+ 	(SUBTARGET_EXTRA_SPECS): Add darwin_subarch spec.
+ 	* config/rs6000/darwin.h (DARWIN_SUBARCH_SPEC): New.
+ 	(SUBTARGET_EXTRA_SPECS): Add darwin_subarch spec.
+ 	* config/darwin.h (LINK_COMMAND_SPEC): Don't pass -arch here.
+ 	(LINK_SPEC): Do pass -arch here.  Handle -force_cpusubtype_ALL
+ 	in all cases.  Pass the right -arch or -arch_only based on -mcpu.
+ 	(ASM_SPEC): Handle -force_cpusubtype_ALL.
+ 	* doc/invoke.texi (Darwin Options): Improve documentation for
+ 	Darwin linker (and libtool) switches.
+ 
+ 	* config/rs6000/darwin-fallback.c: Include <mach/thread_status.h>.
+ 
+ 2004-10-29  Stan Shebs  <shebs@apple.com>
+ 
+ 	* config/rs6000/darwin-tramp.asm: Make more 64-bit-friendly.
+ 
+ 2004-10-29  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-phinodes.c (allocate_phi_node): New.
+ 	(make_phi_node, resize_phi_node): Use it.
+ 
+ 2004-10-29  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* config/rs6000/sysv4.h (TARGET_POWER): Define as 0.
+ 	* config/rs6000/darwin.h (TARGET_POWER): Define as 0.
+ 
+ 2004-10-29  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-phinodes.c (make_phi_node, resize_phi_node): Don't zero
+ 	the whole PHI node.
+ 	* tree.h (tree_phi_node): Tell the garbage collector to chase
+ 	num_args arguments.
+ 
+ 2004-10-29  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* opts.c (decode_options): Lower the crossjump threshold for -Os.
+ 
+ 2004-10-29  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree.h (struct tree_ssa_name): Remove field 'equiv'.
+ 
+ 2004-10-28  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* bitmap.h (bitmap_empty_p): New.
+ 	(bitmap_and, bitmap_and_into, bitmap_and_compl,
+ 	bitmap_and_compl_into, bitmap_ior, bitmap_ior_into,
+ 	bitmap_ior_compl, bitmap_xor, bitmap_xor_into): New bitmap
+ 	operation macros.
+ 	(bitmap_ior_and_compl): Rename to ...
+ 	(bitmap_ior_and_compl_into): ... here.
+ 	* bitmap.c (bitmap_equal_p): Use bitmap_xor.
+ 	(bitmap_ior_and_compl): Rename to ...
+ 	(bitmap_ior_and_compl_into): ... here. Adjust. Return changed
+ 	flag.
+ 	(bitmap_union_of_diff): Use renamed bitmap functions.
+ 	* basic-block.h (AND_REG_SET, AND_COMPL_REG_SET, IOR_REG_SET,
+ 	XOR_REG_SET, IOR_AND_COMPL_REG_SET): Likewise.
+ 	* cfgrtl.c (safe_insert_insn_on_edge): Likewise.
+ 	* df.c (df_bb_rd_local_compute)
+ 	* flow.c (calculate_global_regs_live,
+ 	init_propagate_block_info): Likewise.
+ 	* ifcvt.c (find_if_case_1, find_if_case_2,
+ 	dead_or_predicable): Likewise.
+ 	* ra-build.c (union_web_part_roots, livethrough_conflicts_bb,
+ 	reset_conflicts, conflicts_between_webs): Likewise.
+ 	* ra-rewrite.c (reloads_to_loads, rewrite_program2,
+ 	detect_web_parts_to_rebuild): Likewise.
+ 	* sched-ebb.c (compute_jump_reg_dependencies): Likewise.
+ 	* tree-int-ssa.c (insert_phi_nodes_for, rewrite_into_ssa): Likewise.
+ 	* tree-sra.c (decide_instantiations): Likewise.
+ 	* tree-ssa-alias.c (create_name_tags,
+ 	merge_pointed_to_info): Likewise.
+ 	* tree-ssa-dom.c (tree_ssa_dominator_optimize): Likewise.
+ 	* tree-ssa-loop-im.c (move_computations): Likewise.
+ 	* tree-ssa-operands.c (get_call_expr_operands): Likewise.
+ 	* tree-ssa-pre.c (fini_pre): Likewise.
+ 	* tree-ssa.c (verify_flow_sensitive_alias_info): Likewise.
+ 	* tree-ssanames.c (any_marked_for_rewrite_p): Likewise.
+ 	* tree-vectorizer.c (vectorize_loops): Likewise.
+ 
+ 2004-10-29  Nick Clifton  <nickc@redhat.com>
+ 
+ 	config/mn10300/mn10300.h (CONDITIONAL_REGISTER_USAGE): When
+ 	adding the PIC register to the fixed_regs array, also add it
+ 	to the call_used_regs array.
+ 
+ 2004-10-29  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* gthr-posix.h (__gthread_recursive_mutex_init_function): Guard
+ 	with #ifdef PTHREAD_MUTEX_RECURSIVE/#endif pairs.
+ 
+ 2004-10-28  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-into-ssa.c (rewrite_virtual_phi_arguments): New function.
+ 	(rewrite_blocks): Modify argument, and use it to decide which
+ 	function to call.
+ 	(rewrite_def_def_chains): Call rewrite_blocks with true here.
+ 	(rewrite_into_ssa): and call it with false here.
+ 
+ 2004-10-29  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-phinodes.c (add_phi_arg): Turn an "if" that always
+ 	triggers into gcc_assert.
+ 
+ 2004-10-28  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	PR tree-optimization/16728
+ 	* tree-flow.h (get_ptr_info): Declare.
+ 	* tree-ssa-alias.c (get_ptr_info): Make extern.
+ 	* tree-ssa-copy.c (merge_alias_info): Merge flow-sensitive
+ 	alias information.
+ 
+ 2004-10-28  Stan Shebs  <shebs@apple.com>
+ 
+ 	* config/rs6000/darwin.h (SUBTARGET_EXTRA_SPECS): Handle -m64.
+ 	* config/rs6000/rs6000.c (rs6000_darwin_file_start): Add ppc64
+ 	case.
+ 
+ 2004-10-28  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* tree-mudflap.c (mudflap_init): Mark cache-lookup decls to
+ 	prevent their later unnecessary registration.
+ 	(mf_build_check_statement_for): Remove "addr" argument, and
+ 	related "__mf_value" generated code.  Update callers.
+ 	(mf_decl_eligible_p): New function, factored from mx_register_decls.
+ 	(mx_register_decls): Call it.
+ 	(mf_xform_derefs_1): Rewrite COMPONENT_REF and ARRAY_REF cases
+ 	to restore support for complex nested expressions.
+ 	(mudflap_enqueue_decl): Simplify.  Move registration call emission
+ 	out ...
+ 	(mudflap_finish_file): ... to here.
+ 	(mudflap_enqueue_constant): Remove dump code.
+ 
+ 2004-10-28  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	PR 18199
+ 	* dbxout.c (dbxout_begin_complex_stabs_noforcetext): New function.
+ 	(DBX_FINISH_STABS): Add (unused by default) SYM parameter.
+ 	(dbxout_finish_complex_stabs): Update to match.
+ 	(dbxout_symbol_location): Call emit_pending_bincls_if_required
+ 	and FORCE_TEXT before DBX_STATIC_BLOCK_START.  Use
+ 	dbxout_begin_complex_stabs_noforcetext.
+ 	* xcoffout.h (DBX_FINISH_STABS): Restore special case for
+ 	N_GSYM, using new SYM parameter.  Correct logic for special
+ 	cases for N_FUN.
+ 
+ 	* varasm.c (function_section): If DECL is NULL_TREE, don't try
+ 	to do anything else.  Do not call get_insns if cfun or
+ 	cfun->emit are NULL.
+ 
+ 2004-10-28  Adam Nemet  <anemet@lnxw.com>
+ 
+ 	PR middle-end/18160
+ 	* c-typeck.c (c_mark_addressable): Issue error if address of a
+ 	register variable is taken.  Use "%qD" to print DECL_NAME.
+ 
+ 2004-10-28  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* opts.c (decode_options): Don't run PRE at -Os.
+ 
+ 2004-10-28  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/alpha/alpha.md (movqicc_internal): Allow exactly one
+ 	zero in the conditional.
+ 	(movhicc_internal, movsicc_internal, movdicc_internal): Likewise.
+ 
+ 2004-10-28  Richard Henderson  <rth@redhat.com>
+ 
+ 	* cse.c (memory_extend_rtx): Remove.
+ 	(cse_main): Don't set it.
+ 	(cse_insn): Use a local buffer instead.
+ 
+ 2004-10-28  Andreas Krebbel  <krebbel1@de.ibm.com>
+ 
+ 	* profile.c (branch_prob): Call to init_edge_profiler added.
+ 	* rtl-profile.c (rtl_init_edge_profiler): New function.
+ 	(rtl_gen_edge_profiler): Replaced call to insert_insn_on_edge with
+ 	call to safe_insert_insn_on_edge.
+ 	(rtl_profile_hooks): rtl_init_edge_profiler added.
+ 	* tree-profile.c (tree_init_edge_profiler): New function.
+ 	(tree_profile_hooks): tree_init_edge_profiler added.
+ 	* value-prof.h (profile_hooks) init_edge_profiler prototype added.
+ 
+ 2004-10-28  Nick Clifton  <nickc@redhat.com>
+ 
+ 	* config/iq2000/iq2000.c (iq2000_expand_epilogue): Use
+ 	emit_jump_insn() to generate the return instruction.
+ 
+ 2004-10-28  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-phinodes.c: Remove trailing whitespace.
+ 
+ 2004-10-28  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-ssa-loop-ivopts.c: Fix a comment typo.
+ 	* doc/invoke.texi: Fix a typo.
+ 
+ 2004-10-28  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* Makefile.in (OBJS-common): Remove duplicates.
+ 
+ 2004-10-28  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* lambda-code.c (nestify_update_pending_stmts): Remove.
+ 	(perfect_nestify): Use flush_pending_stmts instead of
+ 	nestify_update_pending_stmts.
+ 	* tree-cfg.c (tree_make_forwarder_block): Use
+ 	flush_pending_stmts.
+ 	* tree-flow.h: Add a prototype for flush_pending_stmts.
+ 	* tree-ssa-loop-manip.c (tree_duplicate_loop_to_header_edge):
+ 	Use flush_pending_stmts.
+ 	(lv_update_pending_stmts): Remove.
+ 	(tree_ssa_loop_version): Use flush_pending_stmts instead of
+ 	lv_update_pending_stmts.
+ 	* tree-ssa.c (flush_pending_stmts): New.
+ 
+ 2004-10-28  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	PR target/15286
+ 	* final.c (alter_subreg): Compute correct offset to use with
+ 	paradoxical SUBREGs of memory operands.
+ 	* recog.c (general_operand): Allow paradoxical SUBREGs of
+ 	memory operands after reload.
+ 	* simplify-rtx.c (simplify_gen_subreg): Fail if simplify_subreg
+ 	has failed when passed a hard register.
+ 
+ 2004-10-28  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* function.c (assign_parm_setup_block): Handle parallels correctly.
+ 
+ 2004-10-28  Kaz Kojima  <kkojima@gcc.gnu.org>
+ 
+ 	* final.c (shorten_branches): Initialize flags structure.
+ 
+ 2004-10-28  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* tree.c (int_cst_node, int_cst_hash_table): New variables.
+ 	(init_ttree): Initialize them.
+ 	(int_cst_hash_hash, int_cst_hash_eq): New hashing functions.
+ 	(build_int_cst_wide): Use hash table for oversized integers.
+ 
+ 2004-10-28  Nick Clifton  <nickc@redhat.com>
+ 
+ 	* config/m32r/m32r.h (DBX_OUTPUT_SOURCE_LINE): Define
+ 	begin_label.
+ 
+ 2004-10-27  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR middle-end/18163
+ 	* expr.c (emit_group_load): Don't go force temporary for memory
+ 	or concat source.
+ 	(emit_group_store): Similarly.
+ 
+ 2004-10-27  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR other/18186
+ 	* common.opt (--param): Fix spelling of parameter.
+ 
+ 2004-10-27  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR tree-opt/17529
+ 	* tree-cfg.c (remove_useless_stmts_1) <case SWITCH_EXPR>:
+ 	Don't fold statement.
+ 	<case ASM_EXPR>: Fold the statement.
+ 
+ 2004-10-28  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-ssa-dce.c (mark_stmt_if_obviously_necessary)
+ 	<COND_EXPR>: Use EDGE_COUNT instead of GOTO_DESTINATION.
+ 
+ 2004-10-28  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* doc/contrib.texi, doc/cpp.texi, doc/cppopts.texi,
+ 	doc/extend.texi, doc/gcov.texi, doc/install.texi, doc/invoke.texi,
+ 	doc/libgcc.texi, doc/md.texi, doc/passes.texi,
+ 	doc/sourcebuild.texi, doc/tm.texi: Improve Texinfo formatting.
+ 
+ 2004-10-28  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* doc/c-tree.texi, doc/cpp.texi, doc/implement-c.texi,
+ 	doc/invoke.texi, doc/md.texi, doc/passes.texi, doc/tm.texi: Put
+ 	punctuation outside quotes.
+ 
+ 2004-10-27  David Mosberger  <davidm@hpl.hp.com>
+ 	    James E Wilson  <wilson@specifixinc.com>
+ 
+ 	PR target/13158
+ 	* config/ia64/ia64.c (ia64_expand_epilogue): Set RTX_FRAME_RELATED_P on
+ 	sibcall alloc instruction.
+ 	(process_set): Handle sibcall alloc instruction.
+ 
+ 2004-10-27  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_attribute_table): Add
+ 	SUBTARGET_ATTRIBUTE_TABLE.
+ 	* config/darwin.h (ASM_WEAKEN_DECL): Handle weak_import.
+ 	(SUBTARGET_ATTRIBUTE_TABLE): Define.
+ 	* config/darwin.c (darwin_handle_weak_import_attribute): New.
+ 	(HAVE_DEAD_STRIP): Delete.
+ 	(no_dead_strip): Don't test HAVE_DEAD_STRIP.
+ 	* config/darwin-protos.h (darwin_handle_weak_import_attribute):
+ 	Prototype.
+ 
+ 	* doc/tm.texi (USE_SELECT_SECTION_FOR_FUNCTIONS): Document.
+ 
+ 	* config/darwin.h (GTHREAD_USE_WEAK): Define.
+ 
+ 2004-10-28  Ben Elliston  <bje@au.ibm.com>
+ 
+ 	* params.def (PARAM_SRA_MAX_STRUCTURE_SIZE): New.
+ 	(PARAM_SRA_FIELD_STRUCTURE_RATIO): Likewise.
+ 	* params.h (SRA_MAX_STRUCTURE_SIZE): New.
+ 	(SRA_FIELD_STRUCTURE_RATIO): Likewise.
+ 	* tree-sra.c: Include "params.h".
+ 	(decide_block_copy): Use new parameters.
+ 	* doc/invoke.texi (Optimize Options): Document new SRA pass
+ 	parameters sra-max-structure-size and sra-field-structure-ratio.
+ 
+ 2004-10-27  Nicolas Pitre <nico@cam.org>
+ 
+ 	* config/arm/ieee754-df.S (floatdidf): Fix regression with big values.
+ 
+ 2004-10-27  Zdenek Dvorak  <dvorakz@suse.cz>
+ 
+ 	PR tree-optimization/18048
+ 	* fold-const.c (try_move_mult_to_index): New function.
+ 	(fold): Use try_move_mult_to_index.
+ 	* tree-ssa-loop-ivopts.c (try_add_cand_for): Prefer common candidates.
+ 	* tree-ssa-loop-niter.c (number_of_iterations_cond): Produce
+ 	an all-ones unsigned constant without extra bits.
+ 	* tree.c (build_low_bits_mask): New function.
+ 	* tree.h (build_low_bits_mask): Declare.
+ 
+ 2004-10-27  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	PR target/17956
+ 	* config/rs6000/rs6000.md (maxsf3): Add !flag_trapping_math to
+ 	final condition.
+ 	(minsf3): Same.
+ 	(maxdf3): Same.
+ 	(mindf3): Same.
+ 
+ 2004-10-27  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-cfg.c (thread_jumps): Speed up by reordering the two
+ 	conditions for entering basic blocks into worklist.
+ 
+ 2004-10-27  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-cfg.c (thread_jumps): Speed up by pretending to have
+ 	ENTRY_BLOCK_PTR in worklist.
+ 
+ 2004-10-27  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-ssa-dce.c (mark_stmt_if_obviously_necessary)
+ 	<GOTO_EXPR>: Don't let an explicit GOTO_EXPR slip through.
+ 
+ 2004-10-27  Daniel Berlin <dberlin@dberlin.org>
+ 
+ 	Fix PR tree-optimization/17133
+ 
+ 	* tree-cfg.c (rewrite_to_new_ssa_names_bb): Also rewrite must
+ 	def kill operand.
+ 
+ 	* tree-flow-inline.h: V_MUST_DEF_OP became V_MUST_DEF_RESULT.
+ 	(get_v_must_def_result_ptr): Modify for new structure of
+ 	v_must_defs array.
+ 	(get_v_must_def_kill_ptr): New.
+ 	(op_iter_next_use): Add support for the kill that occurs in V_MUST_DEFs.
+ 	(op_iter_next_tree): Ditto. Also V_MAY_DEF_OP became V_MAY_DEF_RESULT.
+ 	(op_iter_next_def): V_MAY_DEF_OP became V_MAY_DEF_RESULT.
+ 	(op_iter_init): Initialize new mustu members.
+ 	(op_iter_next_mustdef): New function.
+ 	(op_iter_init_mustdef): Ditto.
+ 
+ 	* tree-flow.h (rewrite_def_def_chains): New function.
+ 
+ 	* tree-into-ssa.c (mark_def_sites): Handle mustdefkill operands.
+ 	(ssa_mark_def_sites): Ditto.
+ 	(rewrite_stmt): Ditto.
+ 	(ssa_rewrite_stmt): Ditto.
+ 	(rewrite_blocks): Factor out from rewrite_into_ssa.
+ 	(mark_def_block_sites): Ditto.
+ 	(rewrite_def_def_chains): New function, just rewrites def-def
+ 	chains without phi node insertion.
+ 
+ 	* tree-pass.h (TODO_fix_def_def_chains): New todo flag.
+ 
+ 	* tree-optimize.c (execute_todo): Handle TODO_fix_def_def_chains.
+ 
+ 	* tree-pretty-print.c (dump_vops): Print out MUST_DEF's so that
+ 	they include the rhs now.
+ 
+ 	* tree-ssa-ccp.c (visit_assignment): V_MUST_DEF_OP became
+ 	V_MUST_DEF_RESULT.
+ 
+ 	* tree-ssa-dce.c (mark_operand_necessary): Add phionly argument.
+ 	Update callers.
+ 	(mark_really_necessary_kill_operand_phis): New function.
+ 	(perform_tree_ssa_dce): Call it.
+ 	(pass_dce): Add TODO_fix_def_def_chains.
+ 	(pass_cd_dce): Ditto.
+ 
+ 	* tree-ssa-loop-im.c (determine_max_movement): Look at kills as
+ 	well.
+ 	(rewrite_mem_refs): Ditto.
+ 
+ 	* tree-ssa-loop-manip.c (find_uses_to_rename_stmt): Look at kills
+ 	as well.
+ 
+ 	* tree-ssa-operands.c (allocate_v_may_def_optype):
+ 	v_may_def_operand_type_t became v_def_use_operand_type_t.
+ 	(allocate_v_must_def_optype) Ditto.
+ 	(finalize_ssa_v_must_defs): Update for new operand type, as well
+ 	as setting the use portion as well.
+ 	(copy_virtual_operands): Copy the kill operand as well.
+ 	(create_ssa_artficial_load_stmt): V_MUST_DEF_OP became
+ 	V_MUST_DEF_RESULT.
+ 
+ 	* tree-ssa-operands.h (v_may_def_operand_type): Renamed to
+ 	v_def_use_operand_type.
+ 	(v_must_def_optype_d): Use v_def_use_operand_type.
+ 	(V_MUST_DEF_OP_*): Renamed to V_MUST_DEF_RESULT_*
+ 	(V_MUST_DEF_KILL_*): New macros.
+ 	(struct ssa_operand_iterator_d): Add num_v_mustu and v_mustu_i
+ 	members.
+ 	Rename existing must_i and num_v_must members to mustd_i and
+ 	num_v_mustd.
+ 	(SSA_OP_VMUSTDEFKILL): New flag.
+ 	(SSA_OP_VIRTUAL_KILLS): New flag.
+ 	(SSA_OP_ALL_OPERANDS): Add in SSA_OP_ALL_KILLS.
+ 	(SSA_OP_ALL_KILLS): New flag.
+ 	(FOR_EACH_SSA_MUSTDEF_OPERAND): New macro.
+ 
+ 	* tree-ssa.c (verify_ssa): Verify virtual kills as well.
+ 
+ 	* tree-vectorizer.c (vect_create_data_ref_ptr): V_MUST_DEF_OP
+ 	became V_MUST_DEF_RESULT.
+ 	(rename_variables_in_bb): Rename kill pointer as well.
+ 
+ 	* tree-dfa.c (compute_immediate_uses_for_stmt): Add kills into the
+ 	immediate uses.
+ 
+ 2004-10-27  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* dbxout.c (dbxout_source_line): Move declaration of begin_label to
+ 	the block that needs it.
+ 
+ 2004-10-27  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* dbxout.c (dbxout_finish_complex_stabs): Mark 'line' variable
+ 	ATTRIBUTE_UNUSED.
+ 
+ 2004-10-27  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* c-lex.c (cb_def_pragma): Clean up code for making location
+ 	palatable to diagnostic.c.
+ 
+ 2004-10-27  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	PR tree-optimization/17757
+ 	* tree-phinodes.c (remove_phi_arg_num): Don't remove PHIs
+ 	without any PHI arguments left.  Make sure the argument that
+ 	we're supposed to remove exists at all.
+ 
+ 2004-10-27  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* configure.ac: Don't test for [build] __cxa_atexit when building a
+ 	cross compiler.
+ 	* configure: Regenerate.
+ 
+ 2004-10-27  Paul Brook  <paul@codeosurcery.com>
+ 
+ 	* configure.ac: Use build_exeext not host_exeext when lookin for
+ 	target tools.
+ 	* configure: Regenerate.
+ 
+ 2004-10-27  Andreas Krebbel  <krebbel1@de.ibm.com>
+ 
+ 	* config/s390/s390.md ("*subdf3_cc"): Replaced plus by minus.
+ 
+ 2004-10-27  Andreas Krebbel  <krebbel1@de.ibm.com>
+ 	    patch originally created by Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	PR middle-end/14684
+ 	* opts.c (OPT_fprofile_generate): Default to -funroll-loops
+ 	to match -fprofile-use.
+ 
+ 2004-10-27  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/rs6000/rs6000.c: Fix a comment typo.
+ 
+ 2004-10-27  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* config/m32r/m32r.h (DBX_OUTPUT_SOURCE_LINE): Increment line
+ 	counter.
+ 
+ 2004-10-27  Andreas Schwab  <schwab@suse.de>
+ 
+ 	* varasm.c (default_stabs_asm_out_destructor): Mark symbol as
+ 	unused.
+ 	(default_stabs_asm_out_constructor): Likewise.
+ 
+ 2004-10-26  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* builtins.c (fold_builtin_unordered_cmp): Always bring both
+ 	operands to the same type.
+ 
+ 2004-10-26  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	PR target/18010
+ 	* emit-rtl.c (emit_copy_of_insn_after): Copy RTX_FRAME_RELATED_P.
+ 
+ 2004-10-26  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* dbxout.c: Include obstack.h.
+ 	(ASM_STABS_OP): Take XCOFF_DEBUGGING_INFO into account in
+ 	default definition.
+ 	(ASM_STABD_OP, NO_DBX_MAIN_SOURCE_DIRECTORY, DBX_CONTIN_CHAR):
+ 	Default-define here.
+ 	(DBX_CONTIN_LENGTH): Move definition with others.
+ 	(DBX_FINISH_STABS): New target macro.
+ 	(current_sym_code, current_sym_value, current_sym_addr)
+ 	(current_sym_nchars, CHARS, dbxout_continue)
+ 	(print_int_cst_octal, print_octal, print_wide_int)
+ 	(dbxout_prepare_symbol, dbxout_finish_symbol): Delete.
+ 	(stabstr_ob, stabstr_last_contin_point): New variables.
+ 	(NUMBER_FMT_LOOP): New improper macro.
+ 	(dbxout_int, dbxout_stab_value_zero, dbxout_stab_value_label)
+ 	(dbxout_stab_value_label_diff, dbxout_stab_value_internal_label)
+ 	(dbxout_stab_value_internal_label_diff, dbxout_stabd)
+ 	(dbxout_begin_stabn, dbxout_begin_stabn_sline)
+ 	(dbxout_begin_simple_stabs, dbxout_begin_simple_stabs_desc)
+ 	(dbxout_begin_complex_stabs, dbxout_finish_complex_stabs)
+ 	(stabstr_C, stabstr_S, stabstr_I, stabstr_D, stabstr_U, stabstr_O)
+ 	(stabstr_continue, DECL_ACCESSIBILITY_CHAR)
+ 	New functions and/or proper function-like macros.
+ 	(CONTIN): Use stabstr_continue, unconditionally.
+ 	(get_lang_number): Define unconditionally, with ATTRIBUTE_UNUSED.
+ 	(dbxout_init): Initialize stabstr_ob.  Check
+ 	NO_DBX_MAIN_SOURCE_DIRECTORY.  Only write out the Ltext label
+ 	if it was used.  Use the new interfaces.
+ 	(dbxout_source_file): Remove file argument; always write to
+ 	asm_out_file.  Use the new interfaces.
+ 	(dbxout_type_method_1): Remove second argument which is always
+ 	DECL_ASSEMBLER_NAME of the first argument.  Use the new interfaces.
+ 	(dbxout_type_methods): Remove write-only variables.  Use the
+ 	new interfaces.
+ 	(dbxout_parms): Refactor to remove code duplicated in each of
+ 	several successive if-else-if blocks.  Use the new interfaces.
+ 	(dbxout_function_end, emit_bincl_stab, dbxout_end_source_file)
+ 	(dbxout_source_line, dbxout_finish, dbxout_type_index)
+ 	(dbxout_type_fields, dbxout_range_type, dbxout_type, dbxout_type_name)
+ 	(dbxout_class_name_qualifiers, dbxout_symbol, dbxout_symbol_location)
+ 	(dbxout_symbol_name, dbxout_reg_parms, dbxout_args)
+ 	(dbx_output_lbrac, dbx_output_rbrac, dbxout_block):
+ 	Use the new interfaces.
+ 	* Makefile.in (dbxout.o): Update dependencies.
+ 
+ 	* defaults.h: Don't define ASM_STABD_OP.
+ 	* output.h: Prototype new dbxout_* interfaces.
+ 	* system.h: Poison DBX_OUTPUT_GCC_MARKER and DBX_FINISH_SYMBOL.
+ 	* varasm.c: Don't define ASM_STABS_OP.
+ 	(default_stabs_asm_out_constructor, default_stabs_asm_out_destructor):
+ 	Use the new dbxout.c interfaces.  Call sorry if neither
+ 	DBX_DEBUGGING_INFO nor XCOFF_DEBUGGING_INFO is defined.
+ 
+ 	* xcoffout.h: Don't define ASM_STABS_OP.
+ 	(DBX_FINISH_SYMBOL): Rewrite and rename DBX_FINISH_STABS.
+ 	(DBX_OUTPUT_MAIN_SOURCE_DIRECTORY, DBX_OUTPUT_GCC_MARKER): Delete.
+ 	(NO_DBX_MAIN_SOURCE_DIRECTORY, NO_DBX_GCC_MARKER): Define.
+ 	(DBX_OUTPUT_MAIN_SOURCE_FILE_END): Change bare block to
+ 	do { ... } while (0) idiom.
+ 
+ 	* config/alpha/alpha.c (num_source_filenames): Export.
+ 	* config/alpha/alpha.h (num_source_filenames): Declare.
+ 	(DBX_OUTPUT_SOURCE_LINE): Use new interfaces.
+ 	(SDB_OUTPUT_SOURCE_LINE): Add missing newline.
+ 	* config/m32r/m32r.h (DBX_OUTPUT_SOURCE_LINE): Use new interfaces.
+ 	Always use .debugsym.  Update commentary.
+ 	* config/mips/mips.h (DBX_OUTPUT_SOURCE_LINE): Use new interfaces.
+ 	(SDB_OUTPUT_SOURCE_LINE): Add missing newline.
+ 	* config/rs6000/linux64.h (DBX_OUTPUT_SOURCE_LINE, DBX_OUTPUT_BRAC):
+ 	Use new interfaces.
+ 	* config/rs6000/rs6000.c: If TARGET_MACHO, include gstab.h.
+ 	(macho_branch_islands): Use new interfaces.
+ 
+ 	* doc/tm.texi: Update.
+ 
+ 2004-10-26  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* expr.c (emit_group_store): Do not treat floats as BLKmode.
+ 	(emit_group_load): Same.
+ 
+ 2004-10-26  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-parse.in (datadef): Use pedwarn rather than error and warning
+ 	for diagnostic in case of no declaration specifiers.
+ 
+ 2004-10-26  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	PR bootstrap/15747
+ 	* doc/install.texi (mips-sgi-irix5): Document that /bin/sh has been
+ 	reported to hang during bootstrap and that CONFIG_SHELL=/bin/ksh
+ 	can be used to work around this.
+ 
+ 2004-10-26  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* config/rs6000/rs6000.h (MEMBER_TYPE_FORCES_BLK): Adjust for e500
+ 	doubles.
+ 
+ 2004-10-26  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* stmt.c (expand_case): Update a comment.
+ 
+ 2004-10-26  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* stmt.c (expand_case): Put an assertion that index_expr is
+ 	never INTEGER_CST.  Don't special case for constant
+ 	index_expr.
+ 
+ 2004-10-26  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR 18162
+ 	* c-parse.in (designator): Finish with a semi-colon.
+ 
+ 2004-10-26  Fariborz Jahanian <fjahanian@apple.com>
+ 
+ 	* config/rs6000/rs6000.md (andsi3_internal8): Set CR when splitting
+ 	into rotlsi3.
+ 
+ 2004-10-26  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* stmt.c (expand_case): Remove code to handle SWITCH_EXPR with
+ 	a default case only.
+ 
+ 2004-10-26  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_hard_regno_nregs): Adjust for
+ 	e500 doubles.
+ 	(spe_build_register_parallel): New.
+ 	(rs6000_spe_function_arg): Handle e500 doubles.
+ 	(function_arg): Same.
+ 	(spe_func_has_64bit_regs_p): Same.
+ 	(rs6000_function_value): Same.
+ 	(rs6000_libcall_value): Same.
+ 	(legitimate_lo_sum_address_p): Return false for e500 doubles.
+ 
+ 	* config/rs6000/rs6000.h (LOCAL_ALIGNMENT): Adjust for e500
+ 	doubles.
+ 	(DATA_ALIGNMENT): Same.
+ 	(CANNOT_CHANGE_MODE_CLASS): Same.
+ 
+ 2004-10-26  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* expr.c (emit_group_load): Handle floats.
+ 	(emit_group_store): Same.
+ 
+ 2004-10-26  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* c-lex.c (get_nonpadding_token): Remove.
+ 	(c_lex_with_flags): Push timevar and eat padding here.  Improve
+ 	stray token diagnostic.
+ 	(lex_string): Replace logic with switch statement, eat padding
+ 	token here.
+ 
+ 2004-10-26  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	PR 18149
+ 	* config/i386/darwin.h (ASM_SPEC): Undef it before defining.
+ 
+ 2004-10-25  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* config/darwin.h (LINK_SPEC): Default weak_reference_mismatches
+ 	to 'non-weak'.
+ 	(MAKE_DECL_ONE_ONLY): Set DECL_WEAK.
+ 	(ASM_MAKE_LABEL_LINKONCE): Delete.
+ 	(ASM_WEAKEN_DECL): New.
+ 	(ASM_DECLARE_OBJECT_NAME): Look at DECL_WEAK not DECL_ONE_ONLY.
+ 	(ASM_DECLARE_FUNCTION_NAME): Likewise.
+ 	(TEXT_SECTION_ASM_OP): Add a tab.
+ 	(DATA_SECTION_ASM_OP): Likewise.
+ 	(SECTION_FUNCTION): Add a tab.  Use fputs.  Don't call
+ 	data_section on every section change.
+ 	(EXTRA_SECTIONS): Add a bunch of new extra sections.
+ 	(EXTRA_SECTION_FUNCTIONS): Likewise.
+ 	(USE_SELECT_SECTION_FOR_FUNCTIONS): Define.
+ 	(JCR_SECTION_NAME): Define.
+ 	(TARGET_SECTION_TYPE_FLAGS): Don't define.
+ 	* config/darwin.c (darwin_encode_section_info): A symbol is defined
+ 	in this file if it is not weak.
+ 	(textcoal_section): Delete.
+ 	(datacoal_section): Delete.
+ 	(darwin_make_decl_one_only): Delete.
+ 	(machopic_select_section): Handle functions.
+ 	(darwin_asm_named_section): Add a tab.
+ 	(darwin_section_type_flags): Delete.
+ 	(darwin_unique_section): Delete contents.
+ 	(darwin_emit_unwind_label): Add a tab.  Make decls weak if
+ 	DECL_WEAK is set.
+ 	* config/darwin-protos.h (darwin_section_type_flags): Delete.
+ 	(darwin_make_decl_one_only): Delete.
+ 	(text_coal_section): New.
+ 	(text_unlikely_section): New.
+ 	(text_unlikely_coal_section): New.
+ 	(const_coal_section): New.
+ 	(data_coal_section): New.
+ 	(const_data_coal_section): New.
+ 	* varasm.c (function_section): Honour
+ 	USE_SELECT_SECTION_FOR_FUNCTIONS.
+ 	* dwarf2out.c (output_call_frame_info): Look at DECL_WEAK when
+ 	TARGET_USES_WEAK_UNWIND_INFO is in effect.
+ 	* dbxout.c (dbxout_source_file): Don't change sections while
+ 	a function is being output.
+ 
+ 2004-10-25  David Ayers  <d.ayers@inode.at>
+ 
+ 	* c-common.h: Remove RID_ID.
+ 	* c-parse.in: Remove OBJECTNAME and references to RID_ID.
+ 	(typespec_reserved_attr): Add rule for TYPENAME
+ 	non_empty_protocolrefs.
+ 	(yylexname): Remove special handling of RID_ID.
+ 
+ 2004-10-25  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	* doc/invoke.texi (-fcrossjumping): Not enabled at -O.
+ 
+ 2004-10-25  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	PR c/16667
+ 	* c-parse.in (array_designator): New.
+ 	(designator): Use it.
+ 	(initelt): Only permit array_designator without '=', not ".foo".
+ 
+ 2004-10-25  Kenneth Zadeck <zadeck@naturalbridge.com>
+ 	* gcc/Makefile.in: removed ggc for cgraphunit.
+ 	* gcc/cgraph.c.dump_cgraph_node: removed static var analysis.
+ 	* gcc/cgraph.h: removed static var analysis data structures and calls.
+ 	* gcc/cgraphunit.c:
+ 	cgraph_mark_local_and_external_functions:changed name to
+ 		cgraph_mark_local_functions
+ 	(print_order,convert_UIDs_in_bitmap,new_static_vars_info,
+ 	cgraph_reset_static_var_maps,get_global_static_vars_info,
+ 	get_global_statics_not_read,get_global_statics_not_written,searchc,
+ 	cgraph_reduced_inorder,has_proper_scope_for_analysis,check_rhs_var,
+ 	check_lhs_var,get_asm_expr_operands,process_call_for_static_vars,
+ 	scan_for_static_refs,cgraph_characterize_statics_local,
+ 	clear_static_vars_maps,cgraph_propagate_bits,cgraph_characterize_statics):
+ 	removed.
+ 	(cgraph_optimize,init_cgraph): removed calls to static vars analysis
+ 	* gcc/tree-dfa.c find_referenced_vars: removed call to static vars
+ 	analysis
+ 	* gcc/tree-flow.h static_vars_info: removed
+ 	* gcc/tree-ssa-operands.c (add_call_clobber_ops,add_call_read_ops):
+ 	removed calls to static vars analysis.
+ 	get_call_expr_operands: removed callee variable.
+ 
+ 2004-10-25  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* cfg.c (unchecked_make_edge, redirect_edge_succ,
+ 	redirect_edge_pred): Use VEC_safe_push instead of
+ 	VEC_safe_insert.
+ 	* cfgrtl.c (force_nonfallthru_and_redirect): Likewise.
+ 
+ 2004-10-25  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* cfgloopmanip.c (loopify): Take two more arguments true_edge
+ 	and false_edge.
+ 	* cfgloop.h: Adjust the corresponding prototype.
+ 	* loop-unswitch.c (unswitch_loop): Adjust a call to loopify.
+ 	* tree-ssa-loop-manip.c (tree_ssa_loop_version): Likewise.
+ 
+ 2004-10-25  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* dwarf2out.c (rtl_for_decl_location): Avoid segfault if
+ 	DECL_INCOMING_RTL is NULL.
+ 
+ 2004-10-25  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* timevar.def (TV_FIND_REFERENCED_VARS): New.
+ 	* tree-dfa.c (pass_referenced_var): Use it.
+ 
+ 2004-10-25  Roger Sayle  <roger@eyesopen.com>
+ 	    John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	* cse.c: Change encoding of quantity numbers to avoid undefined
+ 	pointer arithmetic on qty_table.
+ 	(REGNO_QTY_VALID_P): A quantity is now valid if it isn't negative.
+ 	(get_cse_reg_info): Initialize reg_qty to a unique negative value.
+ 	(new_basic_block): Assign "real" quantity numbers from zero.
+ 	(delete_reg_equiv): Do nothing if quantity is invalid.  Reset the
+ 	REG_QTY to its unique negative value.
+ 	(merge_equiv_classes): Calculate need_rehash if quantity is valid.
+ 	(cse_main): Don't include max_reg when determining max_qty.
+ 	(cse_basic_block): Avoid subtracting a large offset from qty_table,
+ 	which causes undefined C99 behaviour.  Only allocate needed memory.
+ 
+ 2004-10-25  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* stmt.c (expand_case): Remove an obsolete comment.
+ 
+ 2004-10-25  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR middle-end/17407
+ 	* c-decl.c (grokdeclarator) <case cdk_array>: Remove the call
+ 	layout_type as it is already done by build_array_type.
+ 	* tree.c (build_array_type): Layout the type even
+ 
+ 2004-10-25  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	* config/frv/linux.h (TARGET_C99_FUNCTIONS): Define to 0.
+ 
+ 2004-10-25  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	* config/frv/frv.md (movdi, movdf): Handle wide-constant splits
+ 	with wider-than-32-bit HOST_WIDE_INTs.
+ 
+ 2004-10-25  David Billinghurst <David.Billinghurst@riotinto.com>
+ 
+ 	* config/mips/mips.c(mips_output_filename): Remove unused
+ 	array ltext_label_name
+ 
+ 2004-10-24  Geoffrey Keating  <geoffk@geoffk.org>
+ 
+ 	* config/rs6000/darwin.h (BLOCK_REG_PADDING): Define.
+ 
+ 2004-10-25  Ben Elliston  <bje@au.ibm.com>
+ 
+ 	* cfgcleanup.c (outgoing_edges_match): Fix typo in dump output.
+ 
+ 2004-10-23  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* predict.c (predict_loops): Call scev_finalize instead of
+ 	scev_reset.
+ 
+ 2004-10-24  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/dbxcoff.h, config/dbxelf.h, config/libgloss.h,
+ 	config/openbsd.h, config/mips/r3900.h, config/pdp11/pdp11.md,
+ 	config/sh/ushmedia.h, config/sparc/elf.h,
+ 	config/sparc/sp64-elf.h: Update copyright.
+ 
+ 2004-10-24  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* stmt.c (expand_case): Handle the default label outside of
+ 	the for loop.  Remove code to handle a missing default label.
+ 
+ 2004-10-23  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* dbxout.c (dbxout_function_decl): Don't use
+ 	DBX_OUTPUT_FUNCTION_END.
+ 	* system.h: Poison DBX_OUTPUT_FUNCTION_END.
+ 	* doc/tm.texi (DBX_OUTPUT_FUNCTION_END): Remove.
+ 
+ 2004-10-23  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR middle-end/17967
+ 	* tree-cfg.c (remove_usless_stmts_cond):  Don't Fold statement.
+ 
+ 2004-10-23  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-dom.c (record_equality): Use loop depth to determine
+ 	which way to record the equality as well.
+ 	(loop_depth_of_name): New function.
+ 
+ 2004-10-23  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR middle-end/17793
+ 	* gimplify.c (gimplify_addr_expr) <VIEW_CONVERT_EXPR>: Look
+ 	through the operand if it is a useless type conversion.
+ 
+ 2004-10-23  Ben Elliston  <bje@au.ibm.com>
+ 
+ 	* cfg.c (remove_edge): Use VEC_unordered_remove.
+ 	(redirect_edge_succ): Likewise.
+ 	(redirect_edge_pred): Likewise.
+ 	* cfgrtl.c (force_nonfallthru_and_redirect): Likewise.
+ 
+ 2004-10-22  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* sbitmap.h (EXECUTE_IF_SET_IN_SBITMAP): Don't access PTR
+ 	beyond its end.
+ 
+ 2004-10-22  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* config/rs6000/rs6000.c (setup_incoming_varargs): Align DFmode
+ 	saves.
+ 
+ 2004-10-22  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* config/rs6000/spe.md (spe_extendsfdf2): New.
+ 	(movdf_e500_double): New.
+ 	(spe_truncdfsf2): New.
+ 	(spe_absdf2): New.
+ 	(spe_nabsdf2): New.
+ 	(spe_negdf2): New.
+ 	(sub_adddf3): New.
+ 	(spe_subdf3): New.
+ 	(spe_muldf3): New.
+ 	(spe_floatsidf2): New.
+ 	(spe_floatunssidf2): New.
+ 	(fix_truncdfsi2): New.
+ 	(spe_fixuns_truncdfsi2): New.
+ 
+ 	* config/rs6000/rs6000.md (truncdfsf2): Change to expander.
+ 	(fpr_truncdfsf2): New.
+ 	(negdf2): Change to expander.
+ 	(fpr_negdf2): New.
+ 	(fpr_nabsdf2): Name pattern.
+ 	(adddf3): Change to expander.
+ 	(fpr_adddf3): Nem.
+ 	(subdf3): Change to expander.
+ 	(fpr_subdf3): New.
+ 	(muldf3): Change to expander.
+ 	(fpr_muldf3): New.
+ 	(divdf3): Change to expander.
+ 	(fpr_divdf3): New.
+ 	(movdf_softfloat32): Change !TARGET_FPRS to TARGET_E500_SINGLE.
+ 	(cmpdf): Allow for TARGET_E500_DOUBLE.
+ 
+ 2004-10-22  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* c-semantics.c (re_push_stmt_list): Remove.
+ 	* c-common.h: Remove the corresponding prototype.
+ 
+ 2004-10-22  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* stmt.c (asm_op_is_mem_input): Remove.
+ 	* tree.h: Remove the corresponding prototype.
+ 
+ 2004-10-22  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-gimple.c (is_gimple_constructor_elt): Remove.
+ 	* tree-gimple.h: Remove the corresponding prototype.
+ 
+ 2004-10-22  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* varasm.c (get_pool_mode_for_function, get_pool_offset):
+ 	Remove.
+ 	* rtl.h: Remove the corresponding prototypes.
+ 
+ 2004-10-22  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-cfg.c (thread_jumps_from_bb): Speed up by extracting
+ 	edge information when we commit ourselves to threading a
+ 	particular jump.
+ 
+ 2004-10-22  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-cfg.c (thread_jumps): Speed up by putting basic blocks
+ 	into worklist instead of their indexes.
+ 
+ 2004-10-22  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* alias.c, basic-block.h, cgraphunit.c, combine.c, domwalk.h,
+ 	final.c, gengtype.c, genpreds.c, ggc-page.c, insn-notes.def,
+ 	lambda-code.c, loop-unroll.c, modulo-sched.c, pointer-set.c,
+ 	pretty-print.c, ra-colorize.c, sbitmap.c, tree-complex.c,
+ 	tree-data-ref.c, tree-dfa.c, tree-inline.c, tree-into-ssa.c,
+ 	tree-scalar-evolution.c, tree-ssa-dom.c,
+ 	tree-ssa-loop-manip.c, tree-ssa-loop-niter.c,
+ 	tree-ssa-phiopt.c, tree-ssa-pre.c, tree-ssa-threadupdate.c,
+ 	tree-vectorizer.c, vec.h: Fix comment formatting.
+ 
+ 2004-10-22  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* dwarf.h, gthr-dce.h, gthr-single.h, gthr-solaris.h, gthr.h,
+ 	libfuncs.h, libgcc2.h, stab.def, tsystem.h: Update copyright.
+ 
+ 2004-10-22  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/ptx4.h, config/mcore/mcore-pe.h,
+ 	config/rs6000/eabi.h, config/vax/elf.h: Update copyright.
+ 
+ 2004-10-22  Peter Barada <peter@the-baradas.com>
+ 
+ 	* config/m68k/m68k.h (HARD_REGNO_RENAME_OK): New macro.
+ 	* config/m68k/m68k.c (m68k_hard regno_rename_ok): Disallow
+ 	renaming of non-live registers in interrupt functions.
+ 	* config/m68k/m68k-protos.h (m68k_hard_regno_rename_ok): Add prototype.
+ 
+ 2004-10-22  Zdenek Dvorak  <dvorakz@suse.cz>
+ 
+ 	* tree-ssa-loop-niter.c (inverse): Count in HOST_WIDE_INT if possible.
+ 	Use integer for loop counter.
+ 	(num_ending_zeros): New function.
+ 	(number_of_iterations_cond): Use num_ending_zeros.
+ 
+ 2004-10-21  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* config.gcc: Add support for --enable-e500_double.
+ 
+ 	* config/rs6000/e500-double.h: New file.
+ 
+ 	* config/rs6000/rs6000.h: Define TARGET_E500_SINGLE and
+ 	TARGET_E500_DOUBLE.
+ 
+ 	* config/rs6000/eabi.h: Define TARGET_E500_SINGLE and
+ 	TARGET_E500_DOUBLE.
+ 
+ 	* config/rs6000/linuxspe.h: Same.
+ 
+ 	* doc/invoke.texi (Option Summary): Document new options for
+ 	mfloat-gprs.
+ 	(RS/6000 and PowerPC Options): Same.
+ 
+ 	* config/rs6000/rs6000.c (rs6000_parse_float_gprs_option): New
+ 	function.
+ 	(rs6000_override_options): Use it.  Use
+ 	SUB3TARGET_OVERRIDE_OPTIONS.
+ 	Add 8548 to processor_target_table.
+ 	(rs6000_legitimate_address): Handle e500 doubles.
+ 	(rs6000_legitimize_address): Same.
+ 	(rs6000_legitimize_reload_address): Same.
+ 	(rs6000_hard_regno_nregs): Same.
+ 	(spe_func_has_64bit_regs_p): Same.
+ 	(emit_frame_save): Same.
+ 	(gen_frame_mem_offset): Same.
+ 	(rs6000_dwarf_register_span): Same.
+ 	(rs6000_generate_compare): Same.
+ 	(easy_fp_constant): Same.
+ 	(legitimate_offset_address_p): Same.
+ 
+ 	* config/rs6000/spe.md: (cmdfeq_gpr): New.
+ 	(tstdfeq_gpr): New.
+ 	(cmpdfgt_gpr): New.
+ 	(tstdfgt_gpr): New.
+ 	(tstdfgt_gpr): New.
+ 	(cmpdflt_gpr): New.
+ 	(tstdflt_gpr): New.
+ 	Add new constants.
+ 
+ 2004-10-21  Giovanni Bajo  <giovannibajo@gcc.gnu.org>
+ 
+ 	* config/arc/lib1funcs.asm (___umulsidi3): Fix typo.
+ 
+ 2004-10-21  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* dbxout.c: Remove unnecessary #undefs.
+ 	(GDB_INV_REF_REGPARM_STABS_LETTER, DBX_MEMPARM_STABS_LETTER)
+ 	(FILE_NAME_JOINER, STABS_GCC_MARKER): Remove; fold sole
+ 	definition into use sites.
+ 	(cwd): Make local to dbxout_init.
+ 	(dbxout_init): Restructure cwd-using logic for clarity.  Use
+ 	IS_DIR_SEPARATOR.
+ 	* xcoffout.h (DBX_OUTPUT_GCC_MARKER): Definition of
+ 	STABS_GCC_MARKER folded in here.
+ 	* system.h: Poison now-unused macros.
+ 	* doc/tm.texi: Remove documentation of now-unused macros.
+ 
+ 2004-10-21  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR c/17538
+ 	* c-opts.c (push_command_line_include): Use the current file
+ 	name instead of the main one.
+ 
+ 2004-10-21  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR objc/17923
+ 	* tree.c (staticp): A CONST_DECL has static storage if either
+ 	TREE_STATIC or DECL_EXTERNAL is set.
+ 	* c-decl.c (pushdecl_top_level): Accept CONST_DECLs which can
+ 	have null names.
+ 
+ 2004-10-21  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* expr.c (store_expr): Remove dont_store_target.
+ 
+ 2004-10-21  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-cfg.c (thread_jumps): Speed up by using a worklist.
+ 
+ 2004-10-21  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-cfg.c (thread_jumps): Move a part of it to ...
+ 	(thread_jumps_from_bb): ... here.
+ 
+ 2004-10-21  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* dbxout.c (DBX_FINISH_SYMBOL): Add asm_out_file argument.
+ 	* xcoffout.h (DBX_FINISH_SYMBOL): Change asmfile to (ASMFILE).
+ 
+ 2004-10-21  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* expr.c (store_expr): Clean up by renaming want_value to
+ 	call_param_p.
+ 
+ 2004-10-21  Kaz Kojima  <kkojima@gcc.gnu.org>
+ 
+ 	* config/sh/linux-unwind.h (sh_fallback_frame_state): Don't
+ 	fixup pc here.
+ 
+ 2004-10-21  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	PR 18004.
+ 	* expmed.c (store_bit_field): Pass original 'value' before
+ 	recursing.
+ 
+ 2004-10-21  Nicolas Pitre <nico@cam.org>
+ 
+ 	* config/arm/ieee754-sf.S: Large speed improvements. Fix NAN handling.
+ 	* config/arm/ieee754-df.S: Ditto.
+ 
+ 2004-10-20  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* dbxout.c (asmfile): Delete.  All uses changed to asm_out_file.
+ 	(DBX_BLOCKS_FUNCTION_RELATIVE, DBX_LINES_FUNCTION_RELATIVE):
+ 	Default to 0.
+ 	(dbxout_source_line): Use DBX_OUTPUT_SOURCE_LINE when defined.
+ 	When it is not, but DBX_LINES_FUNCTION_RELATIVE is true, emit
+ 	an internal label and an N_SLINE .stabn whose value is the
+ 	difference between that label and the function entry label.
+ 	(dbxout_finish): If DBX_OUTPUT_MAIN_SOURCE_FILE_END is not defined,
+ 	but DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END is, emit a
+ 	label and an N_SO stab with an empty string referring to it.
+ 	(dbx_output_lbrac, dbx_output_rbrac): Use if statement instead
+ 	of #ifdef directive to test DBX_BLOCKS_FUNCTION_RELATIVE.
+ 	(dbxout_type_methods, dbxout_symbol): Remove #if 0 block.
+ 	(dbxout_prepare_symbol): Remove #ifdef WINNING_GDB block, this
+ 	macro is never defined.
+ 	* sdbout.c (sdbout_source_line_counter): Delete.
+ 	(PUT_SDB_SRC_FILE): Delete.  Uses replaced with sole definition.
+ 	(sdbout_source_line): Use SDB_OUTPUT_SOURCE_LINE, which takes
+ 	only two arguments.
+ 	* xcoffout.c (ASM_OUTPUT_SOURCE_LINE): Rename ASM_OUTPUT_LINE.
+ 
+ 	* config/dbxcoff.h, config/dbxelf.h: Remove unncessary #undefs.
+ 	* config/c4x/c4x.h, config/pa/pa.h: Remove unnecessary macro
+ 	definitions (identical to default).
+ 	* config/darwin.h, config/dbxcoff.h, config/dbxelf.h, config/ptx4.h
+ 	* config/h8300/coff.h, config/pa/som.h, config/sh/elf.h:
+ 	Define DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END, not
+ 	DBX_OUTPUT_MAIN_SOURCE_FILE_END.
+ 	* config/dbxcoff.h, config/dbxelf.h, config/ptx4.h
+ 	* config/mcore/mcore-pe.h, config/pa/som.h, config/sh/elf.h:
+ 	Define DBX_LINES_FUNCTION_RELATIVE, not ASM_OUTPUT_SOURCE_LINE.
+ 	* config/alpha/alpha-protos.h: Don't prototype alpha_output_lineno.
+ 	* config/alpha/alpha.c: Move declaration of num_source_filenames up.
+ 	(alpha_start_function): Use SDB_OUTPUT_SOURCE_LINE.
+ 	(sym_lineno): Delete.
+ 	(alpha_output_filename): Do not emit N_SOL stabs here.  Remove
+ 	now-unused variable.
+ 	(alpha_output_lineno): Delete.
+ 	* config/mips/mips-protos.h: Don't prototype mips_output_lineno.
+ 	* config/mips/mips.c (mips_output_filename): Don't use
+ 	ASM_OUTPUT_FILENAME. Don't emit N_SOL stabs here.
+ 	(mips_output_lineno): Delete.
+ 	(mips_output_function_prologue: Use SDB_OUTPUT_SOURCE_LINE.
+ 	* config/alpha/alpha.h: Define DBX_OUTPUT_SOURCE_LINE and
+ 	SDB_OUTPUT_SOURCE_LINE, not ASM_OUTPUT_SOURCE_LINE.
+ 	* config/mips/mips.h: Likewise.  Don't define ASM_OUTPUT_FILENAME.
+ 	* config/mips/sdb.h: Use SDB_OUTPUT_SOURCE_LINE.
+ 	* config/avr/avr.h: Don't define ASM_OUTPUT_SOURCE_LINE.
+ 	* config/mmix/mmix.h: Likewise.
+ 	* config/mmix/mmix.c (mmix_asm_output_source_line): Delete.
+ 	* config/mmix/mmix-protos.h: Don't prototype it.
+ 	* config/alpha/unicosmk.h: Also #undef PREFERRED_DEBUGGING_TYPE;
+ 	no need to #undef ASM_OUTPUT_SOURCE_LINE.
+ 	* config/arm/aout.h: Remove RISCiX-specific definition of
+ 	DBX_OUTPUT_MAIN_SOURCE_FILENAME.
+ 	* config/m32r/m32r.h: Define DBX_OUTPUT_SOURCE_LINE, not
+ 	ASM_OUTPUT_SOURCE_LINE.
+ 	* config/rs6000/linux64.h (ASM_OUTPUT_SOURCE_LINE): Rename to
+ 	DBX_OUTPUT_SOURCE_LINE.  Don't use current_function_func_begin_label.
+ 	* config/vax/elf.h: No need to define DBX_OUTPUT_FUNCTION_END.
+ 
+ 	* doc/tm.texi: Update.
+ 
+ 2004-10-20  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-sra.c (instantiate_element): Copy DECL_IGNORED_P also.
+ 
+ 2004-10-20  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* configure.ac: Revert my previous patch.
+ 	* configure: Regenerate.
+ 
+ 2004-10-20  Ben Elliston  <bje@au.ibm.com>
+ 
+ 	* config/rs6000/rs6000.c
+ 	(rs6000_va_start): Use build_va_arg_indirect_ref.
+ 	(rs6000_gimplify_va_arg): Likewise.
+ 
+ 2004-10-20  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	PR java/15575
+ 	* configure.ac: Declare AM_LANGINFO_CODESET.
+ 	* aclocal.m4: Define AM_LANGINFO_CODESET.
+ 	* configure, config.in: Rebuilt.
+ 
+ 2004-10-20  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* expr.c (store_expr): Remove code that is run when
+ 	want_value & 1 is nonzero.
+ 
+ 2004-10-20  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* gthr-posix.h (__gthread_active_p): Use __extension__ around cast
+ 	from function pointer to void *.
+ 
+ 2004-10-20  Kaz Kojima  <kkojima@gcc.gnu.org>
+ 
+ 	PR target/18032
+ 	* config/sh/sh.c (sh_expand_epilogue): Emit a blockage insn before
+ 	the frame pointer adjustment when exception handling is enabled.
+ 
+ 2004-10-20  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* stor-layout.c: Fix a comment typo.
+ 
+ 2004-10-20  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* expr.c (store_field): Remove two arguments value_mode and
+ 	unsignedp.
+ 	(expand_assignment, store_constructor_field,
+ 	expand_expr_real_1): Adjust calls to store_field.
+ 
+ 2004-10-18  Ramana Radhakrishnan  <ramana.radhakrishnan@codito.com>
+ 
+ 	* config/arc/lib1funcs.asm (___umulsidi3): Correct usage of flags.
+ 
+ 	PR target/17317
+ 	* config/arc/arc.h (REGNO_OK_FOR_BASE_P,REGNO_OK_FOR_INDEX_P,
+ 	REG_OK_FOR_BASE, REG_OK_FOR_INDEX): Consider blink(r31) as a valid
+ 	base and index register for loads.
+ 
+ 	* config/arc/t-arc: Fix multilib handling.
+ 
+ 2004-10-20  Hans-Peter Nilsson  <hp@bitrange.com>
+ 
+ 	* cfgrtl.c (rtl_verify_flow_info_1): When checking insns in a bb,
+ 	don't inspect BLOCK_FOR_INSN for barriers.
+ 	* emit-rtl.c (emit_barrier_before): Revert last change.
+ 	(emit_barrier_after, emit_barrier): Ditto.
+ 
+ 	* doc/extend.texi (Extended Asm): Warn and provide example
+ 	solution for using a call-clobbered asm register.
+ 	(Local Reg Vars): Similar.  Cross-reference example.
+ 
+ 2004-10-19  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* tree-cfg.c (group_case_labels): Look at the second to last
+ 	case statement for combing with the default case.
+ 
+ 2004-10-19  Richard Hendeson  <rth@redhat.com>
+ 
+ 	PR 17962
+ 	* stor-layout.c (layout_type): Set TYPE_ALIGN for vectors.
+ 
+ 2004-10-19  Richard Hendeson  <rth@redhat.com>
+ 
+ 	* builtins.c (expand_builtin_memmove): If fold_builtin_memmove
+ 	succeeds, only expand the result.
+ 
+ 2004-10-19  Richard Hendeson  <rth@redhat.com>
+ 
+ 	PR middle-end/17885
+ 	* tree.c (recompute_tree_invarant_for_addr_expr): Always poll address
+ 	of INDIRECT_REF.
+ 
+ 2004-10-19  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-cfg.c (thread_jumps): Use a do-while loop instead of a
+ 	loop with goto.
+ 
+ 2004-10-19  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* expr.c (expand_assignment): Remove the last argument.
+ 	Change the return type to void.
+ 	* expr.h: Update the prototype of expand_assignment.
+ 	* function.c (assign_parm_setup_reg): Update a call to
+ 	expand_assignment.
+ 	* stmt.c (expand_asm_expr): Likewise.
+ 
+ 2004-10-19  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* expr.c (expand_expr_real_1) <MODIFY_EXPR>: Remove
+ 	unnecessary assignments to temp.  Return const0_rtx.
+ 
+ 2004-10-19  Kaz Kojima  <kkojima@gcc.gnu.org>
+ 
+ 	* config/sh/sh.c (sh5_schedule_saves): Fix typo.
+ 
+ 2004-10-18  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* configure.ac (powerpc-*-darwin*): Require assembler to support
+ 	.machine directive.
+ 	* configure: Regenerate.
+ 
+ 2004-10-18  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* reload1.c (ior_hard_reg_set): Remove.
+ 	(finish_spills): Use IOR_HARD_REG_SET instead of
+ 	ior_hard_reg_set.
+ 
+ 2004-10-18  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* sbitmap.h (EXECUTE_IF_SET_IN_SBITMAP): Speed up by shifting
+ 	the currently visited word to right.
+ 
+ 2004-10-18  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR middle-end/18045
+ 	* expmed.c (expand_smod_pow2): Handle modes whose size
+ 	is greater than that of HOST_WIDE_INT.
+ 
+ 2004-10-18  Ziemowit Laski  <zlaski@apple.com>
+ 
+ 	* c-parse.in (reservedwords): Add OBJC_TYPE_QUAL as alternative.
+ 
+ 2004-10-18  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 	    Roger Sayle  <roger@eyesopen.com>
+ 
+ 	PR middle-end/17813
+ 	* dojump.c (discard_pending_stack_adjust): New function.
+ 	(clear_pending_stack_adjust): Call it.
+ 	* expr.h (discard_pending_stack_adjust): Declare it.
+ 	* explow.c (emit_stack_save): Emit pending stack adjustments
+ 	before saving the stack pointer.
+ 	(emit_stack_restore): Discard pending stack adjustments before
+ 	restoring the stack pointer.
+ 
+ 2004-10-18  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-common.c (handle_mode_attribute): Allow scalar->vector
+ 	type changes yet.
+ 
+ 2004-10-18  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* expr.c (expand_expr_real_1) [MODIFY_EXPR]: Don't request a
+ 	value to expand_assignment.
+ 
+ 2004-10-18  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-cfg.c (cleanup_tree_cfg): Don't iterate on
+ 	thread_jumps.
+ 	(thread_jumps): Iterate until no new forwarder block arises.
+ 
+ 2004-10-18  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-cfg.c (tree_forwarder_block_p): Don't set forwardable.
+ 	(thread_jumps): Use forwardable as cache of
+ 	tree_forwarder_block_p throughout the function.
+ 
+ 2004-10-18  Andreas Krebbel  <krebbel1@de.ibm.com>
+ 
+ 	* cfg.c (dump_flow_info): Remove redundant dump of reg life info.
+ 
+ 2004-10-18  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR middle-end/15014
+ 	PR middle-end/16973
+ 	* tree-cfg.c (remove_bb): If we have a label expression in the
+ 	basic block and the label we have taken the address, move the
+ 	label expression to the basic block which is previous in the
+ 	linked list.
+ 	(tree_verify_flow_info): Fix printing out the label name of the
+ 	problematic label expression.
+ 
+ 2004-10-18  Pat Haugen  <pthaugen@us.ibm.com>
+ 
+ 	PR rtl-optimization/18002
+ 	* simplify-rtx.c (mode_signbit_p): Externalize function...
+ 	* rtl.h (mode_signbit_p): ... to here.
+ 	* combine.c (simplify_shift_const): Recognize PLUS signbit as
+ 	canonical form of XOR signbit and move to outer op.
+ 
+ 2004-10-18  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-cfg.c (bsi_for_stmt): Rename from stmt_for_bsi.
+ 	Update all callers.
+ 	* tree-ssa.c (replace_immediate_uses): Call bsi_for_stmt.
+ 	Don't call fold_stmt more than once, use bsi_replace.
+ 
+ 2004-10-18  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	PR tree-optimization/17656
+ 	* tree-ssa.c (replace_immediate_uses): When replacing a
+ 	constant, if the call to fold_stmt produced a different
+ 	statement, get an appropriate statement pointer by scanning
+ 	STMT's basic block.
+ 
+ 2004-10-18  Richard Henderson  <rth@redhat.com>
+ 
+ 	* pointer-set.c (hash1): Don't use libm functions in fallback case.
+ 
+ 2004-10-18  H.J. Lu  <hongjiu.lu@intel.com>
+ 
+ 	PR bootstrap/17684
+ 	* Makefile.in (clean): Remove libgcc_s$(SHLIB_EXT).1.stage?.
+ 	(stage1-start): Remove and copy libunwind.a and
+ 	libunwind*$(SHLIB_EXT) instead of libunwind*.
+ 	(stage2-start): Likewise.
+ 	(stage3-start): Likewise.
+ 	(stage4-start): Likewise.
+ 	(stageprofile-start): Likewise.
+ 	(stagefeedback-start): Likewise.
+ 
+ 	* config/alpha/t-osf4 (SHLIB_LINK): Use a temporary file for
+ 	the shared library to be created and don't remove the existing
+ 	shared library.
+ 	* config/arm/t-netbsd (SHLIB_LINK): Likewise.
+ 	* config/i386/t-nwld (SHLIB_LINK): Likewise.
+ 	* config/mips/t-slibgcc-irix (SHLIB_LINK): Likewise.
+ 	* config/pa/t-hpux-shlib (SHLIB_LINK): Likewise.
+ 	* config/sh/t-linux (SHLIB_LINK): Likewise.
+ 	* config/t-libunwind-elf (SHLIBUNWIND_LINK): Likewise.
+ 	* config/t-slibgcc-darwin (SHLIB_LINK): Likewise.
+ 	* config/t-slibgcc-elf-ver (SHLIB_LINK): Likewise.
+ 	* config/t-slibgcc-sld (SHLIB_LINK): Likewise.
+ 
+ 	* mklibgcc.in (libgcc-stage-start): Also move "*${objext}s"
+ 	files.
+ 
+ 2004-10-18  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* basic-block.h (reg_set_iterator): New.
+ 	(EXECUTE_IF_SET_IN_REG_SET): Make it iterator style.
+ 	(EXECUTE_IF_AND_COMPL_IN_REG_SET): Likewise.
+ 	(EXECUTE_IF_AND_IN_REG_SET): Likewise.
+ 	* caller-save.c (save_call_clobbered_regs): Adjust to the new
+ 	style.
+ 	* cfgcleanup.c (thread_jump): Likewise.
+ 	* cfgrtl.c (safe_insert_insn_on_edge): Likewise.
+ 	* conflict.c (conflict_graph_compute): Likewise.
+ 	* flow.c (verify_local_live_at_start, update_life_info,
+ 	initialize_uninitialized_subregs, propagate_one_insn,
+ 	init_propagate_block_info, free_propagate_block_info,
+ 	propagate_block, dump_regset): Likewise.
+ 	* global.c (global_conflicts): Likewise.
+ 	* graph.c (start_bb): Likewise.
+ 	* local-alloc.c (update_equiv_regs): Likewise.
+ 	* loop.c (load_mems): Likewise.
+ 	* reload1.c (compute_use_by_pseudos, order_regs_for_reload,
+ 	find_reg, finish_spills): Likewise.
+ 	* resource.c (mark_target_live_regs): Likewise.
+ 	* sched-deps.c (sched_analyze_insn): Likewise.
+ 	* sched-rgn.c (sched-rgn.c): Likewise.
+ 	* config/frv/frv.c (frv_ifcvt_modify_tests): Likewise.
+ 
+ 2004-10-18  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* config/i386/i386.md (addqi_1_slp): Test for incdec_operand
+ 	operand 1 instead of 2
+ 
+ 2004-10-18  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* loop-unroll.c: Fix comment typos.
+ 
+ 2004-10-18  Revital Eres  <eres@il.ibm.com>
+ 
+ 	* Makefile.in (loop-unroll.o): Add VARRAY_H dependency.
+ 	* loop-unroll.c: Include varray.h.
+ 	(struct var_to_expand, struct opt_info): Rename split_ivs_info to
+ 	opt_info and expand it to support variable expansion.
+ 	(analyze_insns_in_loop): Rename analyze_ivs_to_split and
+ 	expand it to support variable expansion.
+ 	(pt_info_start_duplication): Rename si_info_start_duplication.
+ 	(apply_opt_in_copies): Rename split_ivs_in_copies and add support
+ 	to the variable expansion optimization.
+ 	(free_opt_info): Rename free_si_info.
+ 	(analyze_insn_to_expand_var, referenced_in_one_insn_in_loop_p,
+ 	expand_var_during_unrolling, insert_var_expansion_initialization,
+ 	combine_var_copies_in_loop_exit, release_var_copies,
+ 	get_expansion): New functions.
+ 	(peel_loop_completely, unroll_loop_constant_iterations,
+ 	unroll_loop_runtime_iterations, peel_loop_simple,
+ 	unroll_loop_stupid): Change uses of struct si_info
+ 	to struct opt_info
+ 	and add uses of fvariable-expansion-in-unroller flag.
+ 	* params.def: Add parameter to restrict the number of expansions.
+ 	* params.h: (MAX_VARIABLE_EXPANSIONS): New define to restrict
+ 	the number of expansions.
+ 	* common.opt: (fvariable-expansion-in-unroller): New flag.
+ 	* doc/invoke.texi: (fvariable-expansion-in-unroller): Document.
+ 
+ 2004-10-18  Danny Smith  <dannysmith@users.sourceforge.net>
+ 
+ 	* config/i386/cygming.h (TARGET_OS_CPP_BUILTINS): Define
+ 	__GXX_MERGED_TYPEINFO_NAMES to 0.
+ 
+ 2004-10-17  Hans-Peter Nilsson  <hp@bitrange.com>
+ 
+ 	* cfgrtl.c (rtl_verify_flow_info_1): When checking insns in a bb,
+ 	handle barriers in a bb by checking that it points to a NULL bb.
+ 	* emit-rtl.c (emit_barrier_before): Set BLOCK_FOR_INSN to NULL.
+ 	(emit_barrier_after, emit_barrier): Ditto.
+ 
+ 2004-10-18  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* doc/extend.texi (Attribute Syntax): Clarify details of
+ 	attributes on parameters.
+ 
+ 2004-10-17  Zdenek Dvorak  <dvorakz@suse.cz>
+ 
+ 	* tree-ssa-loop-ivopts.c (tree_ssa_iv_optimize): Move checking out of
+ 	loop.
+ 
+ 2004-10-17  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	Revert:
+ 	2004-10-17  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* c-typeck.c (default_function_array_conversion): Always create
+ 	&a[0] for array types.
+ 	(build_unary_op): Do not fold &a[x] into a + x.
+ 
+ 2004-10-17  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR middle-end/17925
+ 	* cfgexpand.c (expand_gimple_cond_expr): Emit line notes for next basic
+ 	block if there is a goto with a locus.
+ 
+ 2004-10-17  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/elfos.h, config/gofast.h, config/interix.h,
+ 	config/netbsd.h, config/svr3.h, config/vxworks.h,
+ 	config/alpha/alpha-modes.def, config/alpha/alpha-protos.h,
+ 	config/alpha/ev4.md, config/alpha/ev5.md, config/alpha/ev6.md,
+ 	config/alpha/netbsd.h, config/arm/arm-modes.def,
+ 	config/arm/unknown-elf.h, config/c4x/c4x-modes.def,
+ 	config/cris/aout.h, config/frv/frv-modes.def,
+ 	config/i386/beos-elf.h, config/i386/gas.h,
+ 	config/i386/i386-coff.h, config/i386/i386-modes.def,
+ 	config/i386/linux.h, config/i386/linux64.h,
+ 	config/i386/mingw32.h, config/i386/netbsd-elf.h,
+ 	config/i386/netbsd64.h, config/i386/sco5.h,
+ 	config/i386/sol2.h, config/i386/uwin.h, config/i860/i860.md,
+ 	config/ia64/ia64-modes.def, config/ia64/itanium1.md,
+ 	config/ia64/itanium2.md, config/m68k/m68k-modes.def,
+ 	config/mips/mips-modes.def, config/mips/sdb.h,
+ 	config/mips/vr.h, config/mips/vxworks.h,
+ 	config/pa/pa-hpux10.h, config/pa/pa-hpux11.h,
+ 	config/pa/pa32-linux.h, config/rs6000/40x.md,
+ 	config/rs6000/7450.md, config/rs6000/8540.md,
+ 	config/rs6000/linuxspe.h, config/rs6000/power4.md,
+ 	config/rs6000/rs6000-modes.def, config/rs6000/rtems.h,
+ 	config/rs6000/spe.h, config/s390/2064.md, config/s390/linux.h,
+ 	config/s390/s390-modes.def, config/sh/elf.h,
+ 	config/sh/sh-modes.def, config/sh/sh64.h,
+ 	config/sparc/ultra1_2.md, config/sparc/ultra3.md,
+ 	config/stormy16/stormy16.md, config/v850/v850-protos.h,
+ 	config/vax/vax.md: Update copyright.
+ 
+ 2004-10-17  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* expr.c (expand_expr_real_1): Remove an obsolete comment.
+ 
+ 2004-10-17  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* c-typeck.c (default_function_array_conversion): Always create
+ 	&a[0] for array types.
+ 	(build_unary_op): Do not fold &a[x] into a + x.
+ 
+ 2004-10-17  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* pointer-set.c (hash1): Use integer part of 2^64 / phi
+ 	instead 2^32 / phi if long is 64-bit.
+ 
+ 2004-10-17  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-common.h (enum rid): Remove RID_PTRBASE, RID_PTREXTENT and
+ 	RID_PTRVALUE.
+ 	* c-parse.in (PTR_VALUE, PTR_BASE, PTR_EXTENT): Remove %token
+ 	declarations.
+ 	(reswords): Remove __ptrbase, __ptrbase__, __ptrextent,
+ 	__ptrextent__, __ptrvalue and __ptrvalue__.
+ 	(rid_to_yy): Remove RID_PTRBASE, RID_PTREXTENT and RID_PTRVALUE
+ 	entries.
+ 
+ 2004-10-16  Dale Johannesen  <dalej@apple.com>
+ 
+ 	* c-common.c (c_common_get_alias_set):  Use GGC for type_hash_table.
+ 
+ 2004-10-16  Zdenek Dvorak  <dvorakz@suse.cz>
+ 
+ 	PR tree-optimization/17766
+ 	* basic-block.h (enum dom_state): DOM_CONS_OK removed.
+ 	(dom_info_available_p): Declare.
+ 	* cfghooks.c (split_block, make_forwarder_block): Use
+ 	dom_info_available_p.
+ 	* dominance.c (compute_dom_fast_query, calculate_dominance_info,
+ 	free_dominance_info, verify_dominators): Ditto.
+ 	(dom_info_available_p): New function.
+ 	* tree-cfg.c (cleanup_control_expr_graph): Free dominance information.
+ 	(thread_jumps): Use dom_info_available_p.
+ 	* tree-complex.c (expand_complex_div_wide): Ditto.
+ 	* tree-mudflap.c (mf_build_check_statement_for): Ditto.
+ 
+ 2004-10-16  Zdenek Dvorak  <dvorakz@suse.cz>
+ 
+ 	* tree-ssa-loop-ivopts.c (struct ivopts_data): New field important_candidates.
+ 	(find_best_candidate): Take also important candidates into account.
+ 	(find_optimal_iv_set): Initialize important_candidates bitmap.
+ 
+ 2004-10-16  Zdenek Dvorak  <dvorakz@suse.cz>
+ 
+ 	PR tree-optimization/17560
+ 	* predict.c (tree_estimate_probability): Mark irreducible
+ 	loops.
+ 
+ 2004-10-16  Zdenek Dvorak  <dvorakz@suse.cz>
+ 
+ 	PR rtl-optimization/17723
+ 	* cfgcleanup.c (merge_memattrs): Handle case when
+ 	MEM_SIZE == NULL_RTX.
+ 
+ 2004-10-15  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* toplev.c (dump_file_name): Change type to be const.
+ 
+ 2004-10-15  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-typeck.c (build_compound_expr, build_c_cast): Don't try to use
+ 	non_lvalue to stop something being a null pointer constant.
+ 
+ 2004-10-15  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* config/rs6000/rs6000.h (FUNCTION_ARG_REGNO_P): FPRs are only
+ 	available for TARGET_FPRS.
+ 	(FUNCTION_VALUE_REGNO_P): Same.
+ 
+ 2004-10-15  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* doc/invoke.texi (RS/6000 and PowerPC Options): Document
+ 	-maltivec in same style as other ISA options.
+ 
+ 2004-10-15  Jon Grimm <jgrimm2@us.ibm.com>
+ 
+ 	* config/host-linux.c (TRY_EMPTY_VM_SPACE): Add __powerpc__
+ 	definition.
+ 
+ 2004-10-15  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* bitmap.c, bitmap.h, builtin-attrs.def, cfglayout.h,
+ 	collect2.h, conflict.c, coretypes.h, coverage.h, errors.h,
+ 	gcc.h, gcov-dump.c, gen-protos.c, gencheck.c, gencodes.c,
+ 	genconstants.c, gengenrtl.c, genmodes.c, genpeep.c,
+ 	gensupport.h, graph.h, gthr-gnat.c, gthr-gnat.h, gthr-posix.c,
+ 	gthr-posix.h, hard-reg-set.h, hwint.h, integrate.h, libgcc2.c,
+ 	lists.c, machmode.def, mips-tdump.c, opts.h, params.c,
+ 	predict.def, predict.h, protoize.c, reload.h, resource.h,
+ 	rtl-error.c, sbitmap.c, sbitmap.h, sreal.c, tlink.c,
+ 	tree-dump.h, tree-inline.h, unwind-dw2-fde.c, unwind-dw2.c,
+ 	unwind-sjlj.c, value-prof.h: Update copyright.
+ 
+ 2004-10-15  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* pointer-set.c, tree-vectorizer.c: Fix comment typos.
+ 
+ 2004-10-15  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-optimize.c (execute_one_pass): Stop timer right after
+ 	executing the pass.
+ 
+ 2004-10-14  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	Revert:
+ 	2004-10-14  Andrew Pinski  <pinskia@physics.uc.edu>
+ 	PR middle-end/17967
+ 	Revert:
+ 		* tree-cfg.c (remove_usless_stmts_cond):  Fold statement.
+ 		(remove_useless_stmts_1):  Fold trees we know how to fold.
+ 
+ 2004-10-14  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* configure.ac: Add .machine power4 directive when testing for
+ 	mfcr field.
+ 	* configure: Regenerate.
+ 
+ 2004-10-14  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* config/darwin.h (JUMP_TABLES_IN_TEXT_SECTION): Don't define.
+ 
+ 2004-10-14  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* tree-vectorizer.c (vect_transform_loop): Declare vectorization_factor
+ 	always.
+ 
+ 2004-10-14  Daniel Jacobowitz  <dan@codesourcery.com>
+ 
+ 	* config/rs6000/rs6000.h (REG_CLASS_FROM_LETTER): Return NO_REGS
+ 	for 'f' if !TARGET_FPRS.
+ 
+ 2004-10-14  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR debug/14492
+ 	* dwarf2out.c (loc_descriptor_from_tree_1): Handle FIX_*_EXPR.
+ 
+ 2004-10-14  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR c/17023
+ 	* c-decl.c (store_parm_decls_oldstyle): Care for parameter type
+ 	as error_mark_node.
+ 	* c-parse.in (compstmt_primary_start): Check cur_stmt_list non-null
+ 	instaed of current_function_decl non-null.
+ 
+ 2004-10-14  Matt Austern  <austern@apple.com>
+ 
+ 	* pointer-set.c: New file, special-purpose hash table.
+ 	* pointer-set.h: New file.
+ 	* tree.h (struct pointer_set_t): Declare as opaque type.
+ 	(tree_walk): Last argument is pointer_set_t* now.
+ 	* tree-inline.c (WALK_SUBTREE): Convert from htab to pset.
+ 	(walk_type_fields):
+ 	(walk_tree): Convert from htab_t to pointer_set_t for keeping
+ 	track of which nodes have already been visited.
+ 	(walk_tree_without_duplicates): Convert from htab_t to pointer_set_t.
+ 	* cgraphunit.c (cgraph_create_edges): Likewise.
+ 	(cgraph_characterize_statics_local): Likewise.
+ 	* tree-dfa.c (collect_dfa_stats): Likewise.
+ 	* langhooks-def.h (lhd_tree_inlining_walk_subtrees): Last arg is
+ 	pointer_set_t* now.
+ 	* langhooks.c (lhd_tree_inlining_walk_subtrees): Likewise.
+ 	* langhooks.h (struct lang_hooks_for_tree_inlining): Last arg type
+ 	of walk_subtrees is pointer_set_t* now.
+ 	* Makefile.in (OBJS-common): add pointer-set.o
+ 	(tree-inline.o): Depends on pointer-set.h
+ 	(tree-dfa.o): Likewise
+ 	(cgraphunit.o): Likewise
+ 
+ 2004-10-14  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* config/rs6000/darwin.h (ASM_SPEC): Delete.
+ 	(TARGET_ASM_FILE_START): Define.
+ 	* config/darwin.h (ASM_SPEC): Define.
+ 	* config/rs6000/t-darwin (TARGET_LIBGCC2_CFLAGS): Don't supply
+ 	-mlong-double-128, it's the default.  Update comment about reason
+ 	for force_cpusubtype_ALL.
+ 	* config/rs6000/darwin-vecsave.asm: Supply .machine.
+ 	* config/rs6000/darwin-world.asm: Likewise.
+ 	* config/rs6000/rs6000.c (rs6000_darwin_file_start): New.
+ 	(symbolic_operand): Delete #if 0ed code.
+ 
+ 2004-10-14  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* stmt.c (add_case_node): Make sure that we have integer
+ 	constant before calling tree_int_cst_compare.
+ 
+ 2004-10-14  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR middle-end/17967
+ 	Revert:
+ 		* tree-cfg.c (remove_usless_stmts_cond):  Fold statement.
+ 		(remove_useless_stmts_1):  Fold trees we know how to fold.
+ 
+ 2004-10-14  Joseph S. Myers  <joseph@codesourcery.com>
+ 
+ 	* config/rs6000/eabispe.h (SUBSUBTARGET_OVERRIDE_OPTIONS),
+ 	config/rs6000/linuxspe.h (SUBSUBTARGET_OVERRIDE_OPTIONS): Disallow
+ 	-m64.
+ 
+ 2004-10-14  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* reload.c (find_reloads): When reloading a PLUS with constant
+ 	operand, make sure the constant is pushed to the constant pool
+ 	if required.
+ 	* config/s390/s390.c (s390_secondary_input_reload_class): Remove
+ 	reload bug workaround.
+ 	(s390_expand_plus_operand): Likewise.
+ 
+ 2004-10-14  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* opts.c (common_handle_option): Do not enable
+ 	flag_speculative_prefetching for -fprofile-generate/use.
+ 
+ 2004-10-14  Devang Patel  <dpatel@apple.com>
+ 
+ 	PR 17635
+ 	* tree-if-conv.c (process_phi_nodes): Process latch block.
+ 	(combine_blocks): Process latch block and update loop structure.
+ 
+ 2004-10-14  Olga Golovanevsky  <olga@il.ibm.com>
+ 
+ 	* tree-vectorizer.c (vect_generate_tmps_on_preheader):
+ 	(vect_update_ivs_after_vectorizer):
+ 	(vect_transform_for_unknown_loop_bound):
+ 	(tree_duplicate_loop_to_edge):
+ 	(allocate_new_names):
+ 	(rename_use_op):
+ 	(rename_def_op):
+ 	(rename_variables_in_bb):
+ 	(free_new_names):
+ 	(rename_variables_in_loop):
+ 	(copy_phi_nodes):
+ 	(update_phis_for_duplicate_loop):
+ 	(update_phi_nodes_for_guard):
+ 	(make_loop_iterate_ntimes):
+ 	(tree_duplicate_loop_to_edge_cfg):
+ 	(add_loop_guard):
+ 	(vect_analyze_loop_with_symbolic_num_of_iters):
+ 	(verify_loop_for_duplication):
+ 	(vect_gen_niters_for_prolog_loop):
+ 	(vect_update_niters_after_peeling):
+ 	(vect_update_inits_of_dr):
+ 	(vect_update_inits_of_drs):
+ 	(vect_build_loop_niters):
+ 	(vect_do_peeling_for_alignment): New functions.
+ 	(vect_transform_loop): Add unknown and known but indivisible loop
+ 	bound support; add peeling for unalignment support.
+ 	(vect_analyze_loop_form): Support symbolic number of iterations.
+ 	(vect_transform_loop_bound): New input parameter.
+ 	(vect_get_loop_niters): Change input parameter type.
+ 	(new_loop_vec_info): LOOP_VINFO_NITERS is tree now.
+ 	(vectorizable_store): Allow unaligned access.
+ 	(vectorize_loops): Add rewrite_into_loop_closed_ssa.
+ 	(vect_analyze_data_refs_alignment): Allowed one unaligned
+ 	store.
+ 	* tree-vectorizer.h (LOOP_VINFO_NITERS_KNOWN_P): Redefined
+ 	to use tree.
+ 	(LOOP_VINFO_INT_NITERS): New macro.
+ 	(MAX_NUMBER_OF_UNALIGNED_DATA_REFS): New define.
+ 	(do_peeling_for_alignment):
+ 	(unaligned_drs): New members of _loop_vec_info.
+ 	(LOOP_DO_PEELING_FOR_ALIGNMENT): New macro.
+ 
+ 2004-10-14  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	* tree.h (TREE_STRING_POINTER): Wrap in "const char *".
+ 	(struct tree_string): Remove "const" qualifier for "str".
+ 
+ 2004-10-14  Ira Rosen  <irar@il.ibm.com>
+ 
+ 	* tree-vectorizer.c (vect_analyze_data_refs): Call
+ 	vect_get_base_and_bit_offset to get memory tag for array ref.
+ 	(vect_create_addr_base_for_vector_ref): Remove redundant checks.
+ 
+ 2004-10-14  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* configure.ac: Use $LN_S for creating symlinks (not $LN).
+ 	* configure: Regenerate.
+ 
+ 2004-10-14  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+ 
+ 	* doc/install.texi (*-*-solaris2*): Update with info about kernel
+ 	patches to solve spurious testsuite failures.
+ 
+ 2004-10-14  Dorit Naishlos  <dorit@il.bim.com>
+ 
+ 	* tree-vectorizer.c (get_vectype_for_scalar_type): Added debug prinouts.
+ 	Added check that vectype is VECTOR_MODE_P, instead of check for BLKmode.
+ 	(vect_analyze_operations): Make sure the vectorization factor > 1. Add
+ 	gcc_assert under ENABLE_CHECKING.
+ 	(vectorizable_operation): Remove check for VECTOR_MODE_P (moved to
+ 	get_vectype_for_scalar_type).
+ 
+ 	(vect_get_vec_def_for_operand): Remove redundant variables.
+ 	(vect_transform_loop): Likewise.
+ 
+ 2004-10-14  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/arm/arm.h (CONDITIONAL_REGISTER_USAGE): Make r11 fixed and
+ 	global for -mcaller-super-interworking.
+ 	(CALLER_INTERWORKING_SLOT_SIZE): New macro.
+ 	* config/arm/arm.c (thumb_compute_save_reg_mask): Save r11 if
+ 	CALLER_INTERWORKING_SLOT_SIZE is nonzero and the function does
+ 	not need a frame pointer.
+ 	(arm_get_frame_offsets): Add CALLER_INTERWORKING_SLOT_SIZE bytes to
+ 	the soft frame pointer offset.
+ 	(thumb_expand_prologue): Set up r11 for -mcaller-super-interworking.
+ 	* config/arm/arm.md (*call_reg_thumb, *call_value_reg_thumb): Use
+ 	_interwork_{r7,r11}_call_via_rN if some arguments are passed on
+ 	the stack.  Use frame_pointer_needed to choose between them.
+ 	* config/arm/lib1funcs.asm (_arm_return_{r7,r11}): New functions.
+ 	(interwork_with_frame): New macro.
+ 	(interwork): Add _interwork_{r7,r11}_call_via_rN().
+ 
+ 2004-10-14  Ben Elliston  <bje@au.ibm.com>
+ 
+ 	PR other/17900
+ 	* diagnostic.c (trim_filename): Fix logic bug in walking backwards
+ 	up the filename looking for a previous directory separator.
+ 
+ 2004-10-14  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-tree.h (enum c_typespec_kind, struct c_typespec,
+ 	parser_xref_tag): New.
+ 	(struct c_declspecs): Add tag_defined_p.  Adjust definition of
+ 	typedef_p.
+ 	(declspecs_add_type): Adjust prototypes.
+ 	* c-parse.in (%union): Add tstype.
+ 	(typespec_nonattr, typespec_attr, typespec_reserved_nonattr,
+ 	typespec_reserved_attr, typespec_nonreserved_nonattr,
+ 	structsp_attr, structsp_nonattr): Change to tstype.  Update
+ 	actions.
+ 	* c-decl.c (build_null_declspecs): Initialize tag_defined_p.
+ 	(declspecs_add_type): Update to take struct c_typespec argument.
+ 	Set tag_defined_p and typedef_p as appropriate.
+ 	(xref_tag): Rename to parser_xref_tag and replace by wrapper.
+ 	Update to return struct c_typespec.
+ 	(shadow_tag_warned): Don't let empty declarations with qualifiers
+ 	or storage class specifiers redeclare a tag if a previous
+ 	declaration is visible.
+ 
+ 2004-10-13  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR debug/15860
+ 	* dwarf2out.c (rtl_for_decl_location): Apply big-endian correction
+ 	for DECL_INCOMING_RTL.
+ 
+ 2004-10-14  Hans-Peter Nilsson  <hp@axis.com>
+ 
+ 	PR target/17984
+ 	* config/cris/cris.md (asrandb, asrandw, lsrandb, lsrandw): Apply
+ 	trunc_int_for_mode for constants used in shortened mode.
+ 
+ 2004-10-13  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR c/17384
+ 	* c-common.c (handle_mode_attribute): Disallow mode changes that
+ 	alter the CODE of the top-level type.
+ 
+ 	* crtstuff.c (__FRAME_END__): Remove mode attribute.  Find 32-bit
+ 	integer from internal limits macros.
+ 	* config/i386/mm3dnow.h (__v2sf): Fix base type.
+ 
+ 2004-10-13  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR debug/13841
+ 	* function.c (instantiate_decl): Recurse for CONCAT.
+ 
+ 2004-10-13  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* config/rs6000/rs6000.md (andsi3): Add attribute "compare" for
+ 	andi./andis.
+ 	(anddi3): Same.
+ 	(extzvdi_internal1): Add attribute "compare".
+ 	(extzvdi_internal2): Same.
+ 
+ 2004-10-12  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* doc/md.texi (Insn Canonicalizations): Removed extraneous quote.
+ 
+ 2004-10-13  Dale Johannesen  <dalej@apple.com>
+ 
+ 	* doc/extend.texi (Extended Asm):  Rewrite asm volatile description.
+ 
+ 2004-10-13  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* toplev.c (compile_file): Call mudflap_finish_file from here ...
+ 	* c-decl.c (c_write_global_declarations): ... instead of here ...
+ 	* cp/decl.c (cp_finish_file): ... and here.
+ 	* tree-mudflap.c (mudflap_enqueue_decl): Reword a warning message.
+ 
+ 2004-10-13  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* tree-ssa-dom.c (record_range): Free the element if we are not
+ 	going to use it.
+ 
+ 2004-10-13  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR java/15578:
+ 	* gcc.c (option_map): Added --extdirs and --encoding.
+ 
+ 2004-10-13  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR target/14454
+ 	* config/sparc/sparc.c (TARGET_ASM_CAN_OUTPUT_MI_THUNK): Set to
+ 	sparc_can_output_mi_thunk.
+ 	(sparc_output_mi_thunk): Simplify handling of delta offset.  Add
+ 	handling of vcall offset.
+ 	(sparc_can_output_mi_thunk): New predicate.
+ 	* doc/tm.texi (TARGET_ASM_OUTPUT_MI_THUNK): Document VCALL_OFFSET.
+ 	(TARGET_ASM_OUTPUT_MI_VCALL_THUNK): Delete.
+ 	(TARGET_ASM_CAN_OUTPUT_MI_THUNK): New target hook.
+ 
+ 	* config/sparc/sparc.c (emit_and_preserve): Preserve stack alignment.
+ 
+ 	* config/sparc/sparc.md (movdi): Remove redundant test.
+ 
+ 2004-10-13  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* tree-dump.c (dump_options): Remove TDF_TREE, TDF_RTL,
+ 	TDF_IPA from -fdump-tree-*-all.
+ 
+ 2004-10-13  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/arm-protos.h (arm_load_pic_register): Update prototype.
+ 	* config/arm/arm.c (thumb_find_work_register): Update comments.
+ 	(arm_load_pic_register): Add argument for scratch register.
+ 	(arm_expand_prologue, thumb_expand_prologue): Pass extra argument.
+ 	* config/arm/arm.md (builtin_setjmp_receiver): Ditto.
+ 
+ 2004-10-13  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-data-ref.c: Fix comment typos.
+ 
+ 2004-10-13  Jakub Jelinek  <jakub@redhat.com>
+ 	    Zdenek Dvorak  <dvorakz@suse.cz>
+ 
+ 	PR tree-optimization/17724
+ 	* tree-cfg.c (tree_purge_dead_eh_edges): Free dominance info.
+ 
+ 2004-10-13  Dorit Naishlos  <dorit@il.ibm.com>
+ 
+ 	* rs6000.c (altivec_builtin_mask_for_load): Made static GTY(()).
+ 	(altivec_builtin_mask_for_store): Likewise.
+ 	(altivec_init_builtins): Use lang_hooks.builtin_function to
+ 	create the decls for builtin_altivec_mask_for_load/store.
+ 
+ 2004-10-13  Nick Clifton  <nickc@redhat.com>
+ 
+ 	* config/c4x/c4x.c: Remove inclusion of loop.h.
+ 
+ 2004-10-12  Ben Elliston  <bje@au.ibm.com>
+ 
+ 	* basic-block.h (edge_iterator): Keep the address of VEC(edge) *.
+ 	(ei_container): New; renamed.
+ 	(ei_start, ei_last): New macros.
+ 	(ei_start_1, ei_last_1): Renamed from ei_start.
+ 	(ei_last_1, ei_end_p): Use ei_container() where applicable.
+ 	(ei_one_before_end_p, ei_next, ei_edge): Likewise.
+ 	* gcse.c (remove_reachable_equiv_notes): Use ei_container().
+ 
+ 2004-10-11  Sebastian Pop  <pop@cri.ensmp.fr>
+ 
+ 	* Makefile.in (tree-ssa-loop-niter.o): Depends on tree-data-ref.h.
+ 	* cfgloop.c (initialize_loops_parallel_p): New.
+ 	(flow_loops_find): Initialize the parallel_p field to true for all
+ 	the loops.
+ 	* tree-ssa-loop-niter.c: Include "tree-data-ref.h".
+ 	(estimate_numbers_of_iterations_loop): Infers the loop bounds from
+ 	the size of the data accessed in the loop.
+ 	(struct nb_iter_bound): Moved...
+ 	* cfgloop.h (struct nb_iter_bound): ... here.
+ 	(estimated_nb_iterations, parallel_p): New fields in struct loop.
+ 	(record_estimate): Declare extern here.
+ 	* tree-chrec.c: Fix comments.
+ 	(nb_vars_in_chrec): New function.
+ 	* tree-chrec.h (nb_vars_in_chrec): Declared here.
+ 	* tree-data-ref.c: Don't include lambda.h, that is already included
+ 	in tree-data-ref.h.
+ 	(tree_fold_divides_p): Don't check for integer_onep.
+ 	(tree_fold_bezout): Removed.
+ 	(gcd): New static duplicated function.
+ 	(int_divides_p, dump_subscript): New.
+ 	(dump_data_dependence_relation): Use dump_subscript.
+ 	(dump_dist_dir_vectors, dump_ddrs, compute_estimated_nb_iterations,
+ 	estimate_niter_from_size_of_data): New.
+ 	(analyze_array_indexes, analyze_array): Call
+ 	estimate_niter_from_size_of_data during	the detection of array
+ 	references.  Pass in a pointer to the statement that contains the
+ 	array reference.
+ 	(all_chrecs_equal_p): New.
+ 	(compute_distance_vector): Renamed compute_subscript_distance.
+ 	Deal with multivariate conflict functions.
+ 	(initialize_data_dependence_relation): Initialize DDR_AFFINE_P,
+ 	DDR_SIZE_VECT, DDR_DIST_VECT, and DDR_DIR_VECT.
+ 	(non_affine_dependence_relation): New.
+ 	(analyze_ziv_subscript, analyze_siv_subscript_cst_affine,
+ 	analyze_siv_subscript, analyze_miv_subscript,
+ 	analyze_overlapping_iterations, subscript_dependence_tester):
+ 	Initialize and return last_conflicts function.
+ 	(initialize_matrix_A, FLOOR, compute_overlap_steps_for_affine_univar,
+ 	compute_overlap_steps_for_affine_1_2): New.
+ 	(analyze_siv_subscript_affine_cst): Removed.
+ 	(analyze_subscript_affine_affine): Disprove dependences based on the
+ 	iteration domains.  Solve the univariate dependence case as before,
+ 	but use lambda_matrix_right_hermite instead of tree_fold_bezout.
+ 	Implement the multivariate case of 2 versus 1 variables.
+ 	(build_classic_dist_vector, build_classic_dir_vector): Implement some
+ 	unhandled cases.
+ 	(find_data_references_in_loop): Compute and initialize
+ 	loop->estimated_nb_iterations and loop->parallel_p.
+ 	(analyze_all_data_dependences): Modify the debug dump order.
+ 	* tree-data-ref.h (SUB_LAST_CONFLICT_IN_A, SUB_LAST_CONFLICT_IN_B,
+ 	subscript->last_conflict_in_a, subscript->last_conflict_in_b): Removed.
+ 	(SUB_LAST_CONFLICT, subscript->last_conflict,
+ 	data_dependence_relation->affine_p, data_dependence_relation->size_vect,
+ 	DDR_AFFINE_P, DDR_SIZE_VECT): New.
+ 	(find_data_references_in_loop, initialize_data_dependence_relation,
+ 	dump_subscript, dump_ddrs, dump_dist_dir_vectors): Declared here.
+ 
+ 2004-10-12  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* configure: Regenerate.
+ 
+ 2004-10-12  Fariborz Jahanian <fjahanian@apple.com>
+ 
+ 	PR 17892
+ 	* tree-ssa-dom.c (unsafe_associative_fp_binop): New function.
+ 	(simplify_rhs_and_lookup_avail_expr): Disallow associativity
+ 	and constant folding of floating point MULT_EXPR/PLUS_EXPR
+ 	expressions.
+ 
+ 2004-10-12  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390.c (s390_va_start): Use build_va_arg_indirect_ref.
+ 	(s390_gimplify_va_arg): Likewise.
+ 
+ 2004-10-12  Daniel Jacobowitz  <dan@debian.org>
+ 
+ 	* defaults.h (REGNO_MODE_OK_FOR_BASE_P, REG_MODE_OK_FOR_BASE_P)
+ 	(MODE_BASE_REG_REG_CLASS, REGNO_MODE_OK_FOR_REG_BASE_P)
+ 	(REG_MODE_OK_FOR_REG_BASE_P): Provide default definitions.
+ 	* regclass.c (record_address_regs): Remove ifdef.  Use
+ 	REG_MODE_OK_FOR_REG_BASE_P and MODE_BASE_REG_REG_CLASS.
+ 	* regrename.c (REG_MODE_OK_FOR_BASE_P): Remove unnecessary
+ 	definition.
+ 	(scan_rtx_address, replace_oldest_value_addr): Use
+ 	REG_MODE_OK_FOR_REG_BASE_P and MODE_BASE_REG_REG_CLASS.
+ 	* reload.c (REGNO_MODE_OK_FOR_BASE_P, REG_MODE_OK_FOR_BASE_P): Remove
+ 	unnecessary definitions.
+ 	(find_reloads_address_1): Support REG_MODE_OK_FOR_REG_BASE_P
+ 	and MODE_BASE_REG_REG_CLASS.
+ 	* config/arm/arm.h (MODE_BASE_REG_CLASS): Don't check reload_completed.
+ 	(MODE_BASE_REG_REG_CLASS): Define.
+ 	(REGNO_MODE_OK_FOR_REG_BASE_P): Define.
+ 	(REG_MODE_OK_FOR_REG_BASE_P): Define.
+ 	* doc/tm.texi (Register Classes): Document MODE_BASE_REG_REG_CLASS,
+ 	REG_MODE_OK_FOR_REG_BASE_P, and REGNO_MODE_OK_FOR_REG_BASE_P.
+ 
+ 2004-10-12  Daniel Berlin <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-alias.c (verify_name_tags): New function.
+ 	(verify_flow_sensitive_alias_info): Remove code that used to check name tags.
+ 	(verify_alias_info): Call verify_name_tags.
+ 
+ 2004-10-12  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	PR rtl-optimization/17931
+ 	* config/i386/i386.c (ix86_rtx_costs): Handle COMPARE with
+ 	ZERO_EXTRACT in it.
+ 
+ 2004-10-12  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* arm.c (arm_print_operand): Use output_operand_lossage where possible
+ 	rather than aborting.
+ 
+ 2004-10-12  Paul Brook  <paul@coudesourcery.com>
+ 
+ 	* config.gcc: Add armv6{k,z,zk}
+ 	* config/arm/arm-cores.def: Add arm1176 and mpcore.
+ 	* config/arm/tune.md: Regenerate.
+ 	* config/arm/arm.c (FL_FOR_ARCH6K, FL_FOR_ARCH6Z, FL_FOR_ARCH6ZK):
+ 	Define.
+ 	(all_architectures): Add armv6k, armv6z, armv6zk.
+ 	* config/arm/lib1funcs.asm: Recognise new arm arcitectures.
+ 	* doc/invoke.texi: Document new arch and cpu values.
+ 
+ 2004-10-12  Paul Brook  <paul@coodesourcery.com>
+ 
+ 	* config/arm/bpabi.h (SUBTARGET_EXTRA_ASM_SPEC): Change meabi=3 to
+ 	meabi=4.
+ 
+ 2004-10-12  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/arm.md (addsi3_cbranch_scratch): Correct constraints.
+ 	Handle negative constants.
+ 
+ 2004-10-12  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	PR c/17301
+ 	* c-typeck.c (convert_arguments): Return error_mark_node if there
+ 	are too few arguments.
+ 	(build_function_call): Handle error_mark_node return from
+ 	convert_arguments.
+ 
+ 2004-10-06  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* configure.ac (symbolic_link): Replace with $LN_S.
+ 	(Assembler/Linker): Hard link from gas and binutils trees.
+ 	* aclocal.m4 (gcc_AC_PROG_LN_S): Try "cp -p" before cp.
+ 	* configure: Regenerate.
+ 
+ 2004-10-12  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* configure.ac: Don't look for host assembler when building a canadian
+ 	cross.
+ 	* configure: Regenerate.
+ 
+ 2004-10-11  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	PR other/17361
+ 	* c-opts.c (permit_fortran_options): Delete/obsolete global variable.
+ 	(c_common_init_options): Remove #ifdef CL_F77 code.  Scan command
+ 	line options for "-lang-asm" and if found allow any of the C-family
+ 	front-end options.
+ 	(c_common_handle_option): Remove last use of permit_fortran_options.
+ 
+ 2004-10-11  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390.c (print_operand): Support 'S' format flag.
+ 	* config/s390/s390.md ("*tmqi_mem"): Use 'S' format flag.
+ 	("*tstsi", "*tstsi_cconly", "*tstsi_cconly2"): Likewise.
+ 	("*tsthiCCT", "*tsthiCCT_cconly", "*tsthi", "*tsthi_cconly"): Likewise.
+ 	("*tstqiCCT", "*tstqiCCT_cconly", "*tstqi", "*tstqi_cconly"): Likewise.
+ 	("*cmphi_ccu", "*cmpqi_ccu", "*clc"): Likewise
+ 	("movti", "*movdi_31", "*movqi", "*movdf_31", "*mvc"): Likewise.
+ 	("*movstricthi"): Likewise.
+ 	("*load_multiple_di", "*load_multiple_si"): Likewise.
+ 	("*store_multiple_di", "*store_multiple_si"): Likewise.
+ 	("*sethiqisi", "*sethihisi"): Likewise.
+ 	("*sethiqidi_64", "*sethiqidi_31"): Likewise.
+ 	("*andqi3_zarch", "*andqi3_esa", "*nc"): Likewise.
+ 	("*iorqi3_zarch", "*iorqi3_esa", "*oc"): Likewise.
+ 	("*xorqi3", "*xc", "*xc_zero"): Likewise.
+ 	("get_tp_64", "get_tp_31", "set_tp_64", "set_tp_31"): Likewise.
+ 
+ 	("*tmhi_full"): Fix incorrect op_type attribute.
+ 
+ 	("*adddi3_alc_cc", "*adddi3_alc"): Remove double backslash.
+ 	("*subdi3_slb_cc", "*subdi3_slb"): Likewise.
+ 	("*addsi3_alc_cc", "*addsi3_alc"): Likewise.
+ 	("*subsi3_slb_cc", "*subsi3_slb"): Likewise.
+ 
+ 2004-10-11  Andrew Pinski  <pinskia@physics.uc.edu
+ 
+ 	PR middle-end/16266
+ 	* function.c (temp_slots_at_level): Fix typo which creates too
+ 	many temp stack slots levels.
+ 
+ 2004-10-11  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390.c (s390_trampoline_template): Generate shorter
+ 	trampoline code.
+ 	(s390_trampoline_instantiate): Adapt.
+ 	* config/s390/s390.h (TRAMPOLINE_SIZE): Adapt to new code.
+ 
+ 2004-10-11  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	PR middle-end/17657
+ 	* stmt.c (add_case_node): Add additional type argument.  Declare
+ 	as static to match prototype.  Convert the upper and lower bounds
+ 	to the specified index type.  Optimize away case ranges/values
+ 	that are outside the index type's bounds.  Truncate case ranges
+ 	that span the index type's bounds.
+ 	(expand_case): Avoid unnessary computation and memory allocation
+ 	when index type is error_mark_node.  Pass index_type as required
+ 	by change to add_case_node API.  No need to convert case range
+ 	bounds to index_type, this is now done by add_case_node.
+ 
+ 2004-10-11  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390-protos.h (s390_offset_p): Add prototype.
+ 	* config/s390/s390.c (s390_offset_p): New function.
+ 	* config/s390/s390.md ("*cmpdi_cct", "*cmpsi_cct", "*cmpdi_ccu",
+ 	"*cmpsi_ccu", "*cmphi_ccu", "*cmpqi_ccu"): Use splitter to
+ 	transform Q->Q alternatives to *clc pattern.
+ 	("*clc"): Move.
+ 	("movti", "*movdi_64", "*movdi_31", "*movsi_zarch", "*movsi_esa",
+ 	"*movhi", "*movqi", "*movdf_64", "*movdf_31", "movsf"): Use splitter
+ 	to transform Q->Q alternatives to *mvc pattern.
+ 	("*mvc"): Move.  Add peephole to merge adjacent MVCs.
+ 	("*anddi3", "*andsi3_zarch", "*andsi3_esa", "*andhi3_zarch",
+ 	"*andhi3_esa", "*andqi3_zarch", "*andqi3_esa"): Use splitter to
+ 	transform Q->Q alternatives to *nc pattern.
+ 	("*nc"): New insn.  New peephole to merge adjacent NCs.
+ 	("*iordi3", "*iorsi3_zarch", "*iorsi3_esa", "*iorhi3_zarch",
+ 	"*iorhi3_esa", "*iorqi3_zarch", "*iorqi3_esa"): Use splitter to
+ 	transform Q->Q alternatives to *oc pattern.
+ 	("*oc"): New insn.  New peephole to merge adjacent OCs.
+ 	("*xordi3", "*xorsi3", "*xorhi3", "*xorqi3"): Use splitter to
+ 	transform Q->Q alternatives to *xc pattern.
+ 	("*xc"): New insn.  New peephole to merge adjacent XCs.
+ 	("*xc_zero"): Move.  Add peephole to merge adjacent XCs.
+ 
+ 2004-10-11  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* gimplify.c (gimple_push_condition): Make sure that we don't
+ 	have any saved condition cleanup if we were at the top level.
+ 
+ 2004-10-11  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/frv/frv.md (*adddi3_internal): Change name to...
+ 	(adddi3): ...replacing the exisiting define_expand.  Combine
+ 	alternatives.  Fix the range of the constant constraints ('J' instead
+ 	of 'NOP').  Remove bogus operands[2] check.  Use simplify_gen_subreg
+ 	to extract the lower and upper halves of the DImode operands.
+ 	Always use addi3_lower and adddi3_upper, not the subdi3 forms.
+ 	(adddi3_lower): Fix the range of the constant constraints and
+ 	remove the bogus operands[2] check.
+ 	(adddi3_upper): Use gpr_or_int10_operand as the predicate for
+ 	operand 2.  Use addxi to handle constant operands.
+ 	(subdi3_lower, subdi3_upper): Don't handle constant operands.
+ 
+ 2004-10-11  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* gengtype-lex.l: Add commented } & ) characters to unconfuse
+ 	editor's paren matching. Allow #define inside a struct.
+ 
+ 2004-10-10  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR middle-end/17703
+ 	part of PR c++/17657
+ 	* fold-const.c (fold_build_cleanup_point_expr): New function.
+ 	* tree.h (fold_build_cleanup_point_expr): Prototype.
+ 
+ 2004-10-10  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* dwarf2out.c: Move attribute to subprogram declaration
+ 	instead of subroutine type.
+ 
+ 2004-10-10  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* basic-block.h: Remove the prototypes for can_hoist_insn_p,
+ 	hoist_insn_after, and hoist_insn_to_edge.
+ 	* rtl.h: Remove the prototypes for reg_referenced_between_p,
+ 	no_jumps_between_p, and insn_dependent_p.
+ 	* rtlanal.c (no_jumps_between_p, reg_referenced_between_p,
+ 	insn_dependent_p, insn_dependent_p_1, hoist_test_store,
+ 	can_hoist_insn_p, hoist_update_store, hoist_insn_after,
+ 	hoist_insn_to_edge): Remove.
+ 
+ 2004-10-10  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	PR c/17881
+ 	* c-decl.c (grokparms): Don't warn for parameters of incomplete
+ 	type in declarations that are not definitions except for the case
+ 	of parameters of void type.
+ 
+ 2004-10-10  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-cfg.c: Fix comment typos.
+ 
+ 2004-10-10  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	PR c/17301
+ 	* builtins.c (expand_builtin_va_start): Check for too few
+ 	arguments to va_start.
+ 
+ 2004-10-10  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	PR c/17189
+ 	* c-decl.c (grokfield): Make diagnostic for bad cases of unnamed
+ 	fields a pedwarn.  Pedwarn here for unnamed structs/unions if
+ 	pedantic.
+ 	* c-parse.in (component_decl): Don't pedwarn here for unnamed
+ 	fields.
+ 
+ 2004-10-09  Zdenek Dvorak  <dvorakz@suse.cz>
+ 
+ 	PR tree-optimization/17906
+ 	* tree-tailcall.c (tree_optimize_tail_calls_1): Do not attempt to
+ 	copy non-gimple reg arguments.
+ 
+ 2004-10-09  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	PR rtl-optimization/17853
+ 	* simplify-rtx.c (simplify_relational_operation): Correct comment.
+ 	Reorganize handling of comparison operations with floating point
+ 	results (always return 0.0 even without FLOAT_STORE_FLAG_VALUE).
+ 	Likewise, introduce support for comparison operations with vector
+ 	result types, introducing a new VECTOR_STORE_FLAG_VALUE target macro.
+ 
+ 	* doc/rtl.texi: Document new VECTOR_STORE_FLAG_VALUE target macro.
+ 	* doc/tm.texi: Likewise.
+ 
+ 2004-10-09  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* regs.h (struct reg_info_def): Remove the last_node_uid and
+ 	changes_mode fields.
+ 	(REGNO_LAST_NOTE_UID): Don't define.
+ 	* regclass.c (reg_scan_mark_refs): Don't set REGNO_LAST_NOTE_UID.
+ 	* regmove.c (copy_src_to_dest): Likewise.
+ 
+ 2004-10-09  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	PR middle-end/17894
+ 	* fold-const.c (fold_div_compare): When optimizing X/C1 op C2, the
+ 	relational comparison operator op needs to be swapped/reversed when
+ 	C1 is negative.  i.e. X/-10 < 1 becomes X >= -9, not X < -9.
+ 
+ 2004-10-08  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR tree-opt/17902
+ 	* tree-ssa-phiopt.c (conditional_replacement): Use bsi_after_labels
+ 	instead of bsi_start.
+ 	(value_replacement): Likewise.
+ 	(abs_replacement): Likewise
+ 
+ 2004-10-09  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* cfgexpand.c (maybe_dump_rtl_for_tree_stmt): New function.
+ 	(expand_gimple_cond_expr, expand_gimple_tailcall,
+ 	expand_gimple_basic_block): Use it to dump RTL for each stmt.
+ 	(tree_expand_cfg): Announce full RTL function dump.
+ 	* tree-optimize.c (execute_one_pass): Use normal RTL printing,
+ 	not the graph version.
+ 	* tree-pretty-print.c (dump_generic_node): Allow empty statements
+ 	in the arms of a COND_EXPR for lowered nodes.
+ 
+ 2004-10-08  Joseph S. Myers  <joseph@codesourcery.com>
+ 
+ 	* config/rs6000/spe.h (atosfix16, atosfix32, atosfix64, atoufix16,
+ 	atoufix32, atoufix64, strtosfix16, strtosfix32, strtosfix64,
+ 	strtoufix16, strtoufix32, strtoufix64): Declare.
+ 
+ 2004-10-08  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-lex.c (interpret_float): Give a pedwarn rather than a warning
+ 	for an out-of-range floating point constant.
+ 	* builtins.c (fold_builtin_inf): Give a pedwarn rather than a
+ 	warning if the target format does not support infinities.
+ 
+ 2004-10-08  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* emit-rtl.c (last_label_num, base_label_num): Remove.
+ 	(max_label_num): Always return label_num.
+ 	(set_new_last_label_num, restore_emit_status): Remove.
+ 	(init_emit): Don't initialize last_label_num.
+ 	* function.c (pop_function_context_from): Don't call
+ 	restore_emit_status.
+ 	* function.h: Remove the prototype for restore_emit_status.
+ 	* rtl.h: Remove the prototype for set_new_last_label_num.
+ 
+ 2004-10-08  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* stmt.c (expand_decl_init): Remove.
+ 	* tree.h: Remove the corresponding prototype.
+ 
+ 2004-10-08  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* integrate.c (try_constants, subst_constants, mark_stores):
+ 	Remove.
+ 	* integrate.h: Remove the prototype for try_constants.
+ 
+ 2004-10-08  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-typeck.c (enum impl_conv): Add ic_argpass_nonproto.
+ 	(convert_for_assignment): Handle ic_argpass_nonproto.  Add
+ 	comments about its relevance to errors.
+ 	(c_convert_parm_for_inlining): Use ic_argpass_nonproto.
+ 
+ 2004-10-08  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR c/16999
+ 	* c-ppoutput.c (cb_ident): Don't quote string as it is already
+ 	quoted.
+ 
+ 2004-10-08  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-pre.c (init_pre): Use size of ARRAY_REF to allocate
+ 	reference_node_pool.
+ 
+ 2004-10-08  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-cfg.c: Fix a comment typo.
+ 
+ 2004-10-08  Andreas Krebbel  <krebbel1@de.ibm.com>
+ 
+ 	* config/s390/s390.c (s390_register_info): Don't save fprs for
+ 	-msoft-float.
+ 	(s390_conditional_register_usage): Make fprs 'fixed' for -msoft-float.
+ 
+ 2004-10-08  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390.h (TARGET_DEFAULT_BACKCHAIN): New define.
+ 	(TARGET_DEFAULT): Use symbolic values.
+ 	* config/s390/tpf.h (TARGET_DEFAULT_BACKCHAIN): Redefine.
+ 	(TARGET_DEFAULT): Use symbolic values.
+ 	* config/s390/s390.c (s390_backchain_string): Initialize to
+ 	TARGET_DEFAULT_BACKCHAIN.
+ 
+ 2004-10-08  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+ 
+ 	* builtins.c (expand_builtin_mempcpy): Move tree handling code to
+ 	fold_builtin_mempcpy.  Accept a type parameter.  Delete duplicate
+ 	code.
+ 	(expand_builtin_strcat): Accept a type parameter.
+ 	(fold_builtin_mempcpy): Accept a type and endp parameter.
+ 
+ 	* builtins.c (expand_builtin_strncpy): Delete duplicate code.
+ 	Accept an `exp' instead of an `arglist'.
+ 
+ 2004-10-08  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* tree-tailcall.c (tree_optimize_tail_calls_1): Use fold_convert,
+ 	reverting my 2004-09-07 patch to use build_int_cst.
+ 
+ 2004-10-08  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR target/17245
+ 	* config/sparc/sparc.c (input_operand): Remove redundant code
+ 	for handling LO_SUM.
+ 	(legitimate_address_p) <REG+REG>: Do not recheck TARGET_V9.
+ 	<LO_SUM>: If LO_SUM is offsettable, accept it for TFmode on V9.
+ 	Otherwise only accept it for TFmode if quad move insns are available.
+ 
+ 2004-10-08  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-cfg.c (tree_forwarder_block_p): Reorder checks so that
+ 	common cases will be caught earlier than others.
+ 
+ 2004-10-08  Michael Matz  <matz@suse.de>
+ 
+ 	* loop-doloop.c (doloop_optimize): Extend count.
+ 
+ 2004-10-08  Kaz Kojima  <kkojima@gcc.gnu.org>
+ 
+ 	* config/sh/sh.md (prefetch_media, prefetch_i4): New insns.
+ 	(prefetch): Convert to expander.
+ 
+ 2004-10-08  Kaz Kojima  <kkojima@gcc.gnu.org>
+ 
+ 	* config/sh/sh.md (tls_global_dynamic): Use MEM pattern for the
+ 	first argument of CALL.
+ 	(tls_local_dynamic): Likewise.
+ 
+ 2004-10-08  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-typeck.c (enum impl_conv): New.
+ 	(convert_for_assignment): Use it.  Take tree for function called
+ 	instead of its name.  Handle ObjC selectors for diagnostics at
+ 	start of function.  Select diagnostic text within the function
+ 	using full sentences for diagnsotics.  Use %qE to name functions
+ 	in diagnostics.
+ 	(convert_arguments, build_modify_expr,
+ 	c_convert_parm_for_inlining, digest_init, c_finish_return): Update
+ 	callers to convert_for_assignment.
+ 	(warn_for_assignment): Remove.
+ 
+ 2004-10-08  Nick Clifton  <nickc@redhat.com>
+ 
+ 	* config/sh/symbian.c (symbian_possibly_export_base_class):
+ 	Replace use of deleted TYPE_USES_VIRTUAL_BASECLASSES macro with
+ 	TYPE_CONTAINS_VPTR_P.
+ 
+ 2004-10-08  Kazuhiro Inaoka  <inaoka.kazuhiro@renesas.com>
+ 
+ 	* config/m32r/m32r.h (CONDITIONAL_REGISTER_USAGE): Don't exclude
+ 	fixed registers form all_used_regs. Update call_really_used_regs.
+ 	(CALL_REALLY_USED_REGISTERS): Define.
+ 	* config/m32r/m32r.c (MUST_SAVE_REGISTER): Replace call_used_regs
+ 	with call_really_used_regs.
+ 
+ 2004-10-08  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* config/rs6000/sysv4.h (STARTFILE_LINUX_SPEC): Choose gcrt1.o
+ 	for -profile as well as -p and -pg.
+ 
+ 2004-10-07  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* libgcc2.c (__moddi3): Cast &w to UDWtype*.
+ 
+ 2004-10-07  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-cfg.c (tree_block_forwards_to): Remove.
+ 	* tree-flow.h: Remove the corresponding prototype.
+ 
+ 2004-10-07  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-flow-inline.h (phi_nodes): Remove an unnecessary check
+ 	for ENTRY_BLOCK_PTR and EXIT_BLOCK_PTR.
+ 
+ 2004-10-07  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	Radar 3813796
+ 	* config/rs6000/rs6000.c (rs6000_generate_compare): When
+ 	flag_trapping_math is in effect, don't generate subtract
+ 	instructions.
+ 
+ 2004-10-07  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390-protos.h (s390_narrow_logical_operator): Add.
+ 	* config/s390/s390.c (s390_narrow_logical_operator): New function.
+ 	(s390_extra_constraint_str): Add 'A' constraints.
+ 	(s390_const_ok_for_constraint_p): Add 'Nx' constraints.
+ 	* config/s390/s390.h (EXTRA_MEMORY_CONSTRAINT): Add 'A' constraint.
+ 	(CONSTRAINT_LEN): Likewise.
+ 	* config/s390/s390.md ("*anddi3"): Add NI alternative and splitter.
+ 	("*andsi3_zarch", "*andsi3_esa"): Likewise.
+ 	("*andhi3_zarch", "*andhi3_esa"): Likewise.
+ 	("*iordi3"): Add OI alternative and splitter.
+ 	("*iorsi3_zarch", "*iorsi3_esa"): Likewise.
+ 	("*iorhi3_zarch", "*iorhi3_esa"): Likewise.
+ 	("*xordi3"): Add XI alternative and splitter.
+ 	("*xorsi3", "*xorhi3"): Likewise.
+ 
+ 2004-10-07  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.c (mips_function_rodata_section): New function.
+ 	(TARGET_ASM_FUNCTION_RODATA_SECTION): Use it.
+ 
+ 2004-10-07  Devang Patel  <dpatel@apple.com>
+ 
+ 	* rs6000/altivec.md (UNSPEC_VCMPBFP, UNSPEC_VCMPEQUB, UNSPEC_VCMPEQUH,
+ 	UNSPEC_VCMPEQUW, UNSPEC_VCMPGEFP, UNSPEC_VCMPGTUB, UNSPEC_VCMPGTSB,
+ 	UNSPEC_VCMPGTUH, UNSPEC_VCMPGTSH, UNSPEC_VCMPGTUW, UNSPEC_VCMPGTSW,
+ 	UNSPEC_VCMPGTFP, UNSPEC_VSEL4SI, UNSPEC_VSEL4SF, UNSPEC_VSEL8HI,
+ 	UNSPEC_VSEL16QI, UNSPEC_VCOND_V4SI, UNSPEC_VCOND_V4SF, UNSPEC_VCOND_V8HI,
+ 	UNSPEC_VCOND_V16QI, UNSPEC_VCONDU_V4SI, UNSPEC_VCONDU_V8HI,
+ 	UNSPEC_VCONDU_V16QI): New constant defines.
+ 	(vcondv4si, vcondv4sf, vcondv8hi, vcondv16qi, vconduv4si, vconduv8hi,
+ 	vconduv16qi): New patterns.
+ 	* rs6000/rs6000-protos.h (rs6000_emit_vector_cond_expr): New function.
+ 	* rs6000/rs6000.c (rs6000_emit_vector_cond_expr): New function.
+ 	(get_vec_cmp_insn): Same.
+ 	(get_vsel_insn): Same.
+ 	(rs6000_emit_vector_compare): Same.
+ 	(rs6000_emit_vector_select): Same.
+ 	(INSN_NOT_AVAILABLE): New.
+ 
+ 2004-10-07  Zdenek Dvorak  <dvorakz@suse.cz>
+ 
+ 	PR tree-optimization/17749
+ 	* tree-tailcall.c (find_tail_calls): Check that parameter is
+ 	a gimple_reg.
+ 
+ 2004-10-07  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/ia64/ia64.c: Fix a comment typo.
+ 
+ 2004-10-07  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* doc/install.texi (*-*-solaris2*): Fix marker for URL.
+ 
+ 2004-10-07  Giovanni Bajo  <giovannibajo@gcc.gnu.org>
+ 
+ 	PR c++/17115
+ 	* tree-inline.c (expand_call_inline): Do not warn for functions
+ 	marked with attribute noinline.
+ 
+ 2004-10-07  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR target/17862
+ 	* config/sparc/sparc.c (sparc_output_mi_thunk): Set
+ 	current_function_uses_only_leaf_regs as well as sparc_leaf_function_p.
+ 
+ 	* config/sparc/sparc.c (sparc_gimplify_va_arg): Pass 'false' instead
+ 	of 0 as 4th argument to pass_by_reference.
+ 	Call build_va_arg_indirect_ref instead of build_fold_indirect_ref.
+ 
+ 2004-10-06  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* config/sh/sh.c (sh_dwarf_calling_convention): Fix renesas dwarf
+ 	attribute.
+ 
+ 2004-10-07  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	PR target/17770
+ 	* config/mips/mips.md (mov_<load>l): Remove hazard=none attribute.
+ 
+ 2004-10-07  Zdenek Dvorak  <dvorakz@suse.cz>
+ 
+ 	PR rtl-optimization/17791
+ 	* loop-doloop.c (doloop_modify): Take number of iterations as
+ 	argument.
+ 	(doloop_optimize): Extend or shorten the number of iterations
+ 	when changing mode of counter register.
+ 	* loop-iv.c (lowpart_subreg): Export.
+ 	* rtl.h (lowpart_subreg): Declare.
+ 
+ 2004-10-07  Zdenek Dvorak  <dvorakz@suse.cz>
+ 
+ 	PR tree-optimization/17806
+ 	* cfghooks.c (split_edge): Update IRREDUCIBLE_LOOP flags.
+ 	* cfgloopmanip.c (loop_split_edge_with): Updating of IRREDUCIBLE_LOOP
+ 	flags moved to split_edge.
+ 
+ 2004-10-07  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR middle-end/17835
+ 	* expmed.c (expand_sdiv_pow2): Force a stack adjustment
+ 	before tentatively building the conditional move sequence.
+ 
+ 2004-10-07  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	PR target/16815
+ 	* function.c (assign_parm_setup_block_p): Tighten BLOCK_REG_PADDING
+ 	check.
+ 	* config/pa/pa.h (BLOCK_REG_PADDING): Define in terms of
+ 	function_arg_padding.
+ 
+ 2004-10-07  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	PR bootstrap/17857
+ 	* Makefile.in (stmp-fixproto): Pass FIX_HEADER=build/... to fixproto.
+ 
+ 2004-10-07  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* hooks.c (hook_int_void_1, hook_void_int): Remove.
+ 	* hooks.h: Remove the corresponding prototypes.
+ 
+ 2004-10-06  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR middle-end/17849
+ 	* tree-nested.c (walk_stmt_info): Add changed field.
+ 	(convert_nonlocal_reference): Set changed to when we
+ 	change a decl to unnested decl.
+ 	<case ADDR_EXPR>: Instead of checking if the immediate part
+ 	of the ADDR_EXPR changed, check the field changed.
+ 	Use recompute_tree_invarant_for_addr_expr instead of unsetting
+ 	TREE_INVARIANT.
+ 	(convert_local_reference):  Set changed to when we
+ 	change a decl to unnested decl.
+ 	<case ADDR_EXPR>: Instead of checking if the immediate part
+ 	of the ADDR_EXPR changed, check the field changed.
+ 	Also call recompute_tree_invarant_for_addr_expr on the ADDR_EXPR.
+ 
+ 2004-10-06  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* defaults.h (DWARF2_GENERATE_TEXT_SECTION_LABEL): Remove.
+ 	* dwarf2out.c (dwarf2out_init): Remove references to
+ 	DWARF2_GENERATE_TEXT_SECTION_LABEL.
+ 	* system.h: Poison DWARF2_GENERATE_TEXT_SECTION_LABEL.
+ 	* doc/tm.texi (DWARF2_GENERATE_TEXT_SECTION_LABEL): Remove.
+ 
+ 2004-10-06  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-typeck.c (convert_arguments): Take expression for called
+ 	function rather than its name.  Handle ObjC selectors directly
+ 	rather than relying on warn_for_assignment to do so.  Call warning
+ 	directly rather than warn_for_assignment.  Use %qE in diagnostics.
+ 	Say "argument" rather than "arg" in diagnostics.
+ 	(build_function_call): Update call to convert_arguments.
+ 
+ 2004-10-06  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR debug/17787
+ 	* dbxout.c (dbxout_symbol): Really handle RECORD, UNION, and
+ 	ENUMs specially instead of just saying we do.
+ 
+ 2004-10-06  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* dwarf2.h: Sync with include/elf/dwarf2.h
+ 
+ 2004-10-06  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-pretty-print.c (dump_generic_node): Fix printing of BINFO
+ 	and TREE_VEC nodes.
+ 
+ 2004-10-06  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* lambda-code.c (lambda_loopnest_to_gcc_loopnest): Convert
+ 	to use FOR_EACH_SSA_USE_OPERAND iterator, and propagate_value.
+ 
+ 2004-10-06  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* lambda-code.c (compute_nest_using_fourier_motzkin): New
+ 	function.
+ 	(lambda_compute_auxillary_space): Split from here.
+ 
+ 2004-10-06  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-loop-ivopts.c (expr_invariant_in_loop): Make non-static.
+ 	* tree-flow.h: Add prototype.
+ 	* lambda-code.c (invariant_in_loop_and_outer_loops): Use
+ 	expr_invariant_in_loop.
+ 
+ 2004-10-06  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-cfg.c (thread_jumps): Remove a duplicate check for
+ 	EXIT_BLOCK_PTR.
+ 
+ 2004-10-06  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390-protos.h (s_imm_operand): Remove.
+ 	(s390_pool_operand): Add prototype.
+ 	* config/s390/s390.c (general_s_operand): Remove.
+ 	(s_imm_operand): Remove.
+ 	(s_operand): Merge contents of general_s_operand.
+ 	(s390_pool_operand): New function.
+ 	* config/s390/s390.h (PREDICATE_CODES): Remove s_imm_operand.
+ 	* config/s390/s390.md ("*cmpdi_cct", "*cmpsi_cct"): New insns.
+ 	("*cmpdi_ccu"): Merge Q->Q alternative.
+ 	("*cmpsi_ccu", "*cmphi_ccu"): Likewise.
+ 	("*cmpqi_ccu"): Merge Q->Q, n->Q, n->S alternatives.
+ 	("*cli"): Remove.
+ 	("*cmpdi_ccu_mem", "*cmpsi_ccu_mem"): Likewise.
+ 	("*cmphi_ccu_mem", "*cmpqi_ccu_mem"): Likewise.
+ 	("*movstricthi"): Use memory_operand instead of s_imm_operand.
+ 
+ 2004-10-06  Steve Ellcey  <sje@cup.hp.com>
+ 
+ 	* config/ia64/ia64.h (FUNCTION_ARG_BOUNDARY): Change macro to
+ 	call ia64_function_arg_boundary.
+ 	* config/ia64/ia64-protos.h (ia64_function_arg_boundary): New.
+ 	* config/ia64/ia64.c (ia64_function_arg_boundary): New.
+ 	(ia64_function_arg_advance): Do not put 128 bit floats into
+ 	FP registers.
+ 
+ 2004-10-06  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+ 
+ 	* builtins.c (expand_builtin_strcpy): Delete duplicate code.
+ 	Accept an expression instead of an arglist.
+ 	(expand_builtin_stpcpy): Accept an expression instead of an
+ 	arglist.
+ 
+ 2004-10-06  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR target/16007
+ 	* doc/install.texi (*-*-solaris2*): Mention potential problem
+ 	with Sun assembler + GNU linker and C++ programs.
+ 	Document status of binutils 2.15 release.
+ 
+ 2004-10-06  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* cse.c (cse_main): Kill push/pop context.
+ 
+ 2004-10-05  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* pretty-print.c: Include tree.h.
+ 	(pp_base_prepare_to_format): New function, logic from
+ 	text_specifies_location.
+ 	(pp_base_format_text): Use gcc_assert.
+ 	* pretty-print.h (pp_prepare_to_format): New macro.
+ 	(pp_base_prepare_to_format): Prototype.
+ 	* diagnostic.c (text_specifies_location): Delete.
+ 	(bug_report_request): Delete.
+ 	(diagnostic_set_info): Don't call text_specifies_location.
+ 	(diagnostic_action_after_output): Put text from
+ 	bug_report_request inline here.  Use gcc_unreachable.
+ 	(diagnostic_report_current_function): Fix comment.
+ 	(diagnostic_report_diagnostic): Clarify logic for error recursion.
+ 	Call pp_prepare_to_format before diagnostic_starter.
+ 	(trim_filename): Use IS_DIR_SEPARATOR.
+ 	(fatal_error, internal_error): Use gcc_unreachable.
+ 	(error_recursion): Call diagnostic_action_after_output to
+ 	issue the bug_report_request message and exit.
+ 	* Makefile.in (diagnostic.o, pretty-print.o): Update dependencies.
+ 
+ 	* c-parse.in: Add list of diagnostic messages to insulate
+ 	translation template from version of yacc/bison used to
+ 	compile the grammar.
+ 
+ 2004-10-06  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	PR 16406
+ 	* doc/tm.texi (USE_LD_AS_NEEDED, LINK_EH_SPEC): Document.
+ 
+ 2004-10-05  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* basic-block.h: Remove the prototype for
+ 	flow_preorder_transversal_compute.
+ 	* cfganal.c (dfst_node): Remove.
+ 	(flow_preorder_transversal_compute): Likewise.
+ 	* rtl.h: Remove the prototype for get_jump_table_offset.
+ 	* rtlanal.c (get_jump_table_offset): Remove.
+ 
+ 2004-10-05  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR 17756
+ 	* tree-ssa-operands.c (get_expr_operands): Handle CONST_DECL.
+ 
+ 2004-10-05  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	PR bootstrap/17817
+ 	* Makefile.in: Stage the build directory too.
+ 
+ 2004-10-05  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* config/frv/frv.h (LEGITIMIZE_ADDRESS): New.
+ 
+ 	* config/frv/frv-protos.h (frv_legitimize_address): Protoize.
+ 	(frv_emit_move): Same.
+ 
+ 	* config/frv/frv.c (frv_emit_move): New.
+ 	(frv_legitimize_address): New.
+ 
+ 	* config/frv/frv.md ("movsi"): Call frv_emit_move.
+ 	("movqi"): Same.
+ 	("movhi"): Same.
+ 	("movdi"): Same.
+ 	("movsf"): Same.
+ 	("movdf"): Same.
+ 
+ 2004-10-05  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-decl.c (declspecs_add_type): Don't pedwarn for _Complex in
+ 	system headers.
+ 
+ 2004-10-05  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-decl.c (pushdecl): When an extern declaration at block scope
+ 	refers to a visible entity with internal linkage, use the old DECL
+ 	rather than the new one.
+ 
+ 2004-10-05  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-cfg.c (cleanup_tree_cfg): Remove extra parentheses in
+ 	comments.
+ 
+ 2004-10-05  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-cfg.c (thread_jumps): Remove a duplicate check for
+ 	an infinite loop.
+ 
+ 2004-10-05  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-cfg.c (thread_jumps): Iterate with FOR_EACH_BB instead
+ 	of FOR_BB_BETWEEN.  Remove a useless check for unreachable
+ 	blocks.
+ 
+ 2004-10-05  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-cfg.c (cleanup_tree_cfg): Don't call
+ 	delete_unreachable_blosk() after thread_jumps().
+ 	(thread_jumps): Always remove basic blocks as they become
+ 	unreachable.
+ 
+ 2004-10-05  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-cfg.c (cleanup_tree_cfg): Remove variable
+ 	something_changed.  Simplify the while loop.
+ 
+ 2004-10-05  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+ 
+ 	* builtins.c (expand_builtin_memmove): Delete duplicate code
+ 	and accept a tree type for the result.
+ 	(expand_builtin_bcopy): Accept a tree type for the result.
+ 	(fold_builtin_memmove): Accept an arglist and tree type for
+ 	the result.
+ 
+ 2004-10-05  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390.c (s390_dump_pool): Remove return value.
+ 	Use gen_pool_align, gen_pool_section_start/end instead of
+ 	gen_pool_start/end_31/64.
+ 	* config/s390/s390.md (UNSPECV_POOL_START, UNSPECV_POOL_END): Remove.
+ 	(UNSPECV_POOL_SECTION, UNSPECV_POOL_ALIGN): New constants.
+ 	("pool_start_31", "pool_end_31"): Remove.
+ 	("pool_start_64", "pool_end_64"): Likewise.
+ 	("pool_align", "pool_section_start", "pool_section_end": New insns.
+ 
+ 	* config/s390/s390.c (s390_cannot_copy_insn_p): New function.
+ 	(TARGET_CANNOT_COPY_INSN_P): Define.
+ 	(s390_cannot_force_const_mem): Handle UNSPEC_INSN.
+ 	(struct constant_pool): New member 'execute'.
+ 	(s390_add_execute, s390_find_execute): New functions.
+ 	(s390_execute_label, s390_execute_target): Likewise.
+ 	(s390_dump_pool): Output in-pool execute target templates.
+ 	(s390_dump_execute): New function.
+ 	(s390_alloc_pool, s390_free_pool): Handle execute templates.
+ 	(s390_mainpool_start, s390_mainpool_finish): Likewise.
+ 	(s390_chunkify_start, s390_chunkify_finish): Likewise.
+ 	* config/s390/s390.md (UNSPEC_INSN, UNSPEC_EXECUTE): New constants.
+ 	("*execute"): New insn pattern.
+ 	("movmem_short", "*movmem_short"): Use splitters to generate
+ 	explicit execute pattern, remove embedded execute.
+ 	("clrmem_short", "*clrmem_short"): Likewise.
+ 	("cmpmem_short", "*cmpmem_short"): Likewise.
+ 
+ 2004-10-05  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa.c (verify_ssa): Verify phi arguments only
+ 	contain renamed names.
+ 
+ 2004-10-05  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* config/rs6000/linux.h: Formatting, whitespace.
+ 	* config/rs6000/linux64.h: Likewise.
+ 	* config/rs6000/rs6000-protos.h: Likewise.
+ 	* config/rs6000/rs6000.c: Likewise.
+ 	(easy_vector_splat_const): Add fall thru comments.
+ 	(output_vec_const_move): Likewise.
+ 
+ 2004-10-05  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* Makefile.in: Update -Wno-error exceptions for move to build dir.
+ 
+ 2004-10-05  Chao-Ying Fu  <fu@mips.com>
+ 	    Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* doc/invoke.texi (-mpaired-single): Link to the new description of the
+ 	built-in functions.  Document dependencies.
+ 	(-mips3d): Add link here too.
+ 	* doc/extend.texi (MIPS Paired-Single Support): New section.
+ 
+ 2004-10-04  Chao-ying Fu  <fu@mips.com>
+ 
+ 	* config/mips/mips.h (UNITS_PER_SIMD_WORD): Define.
+ 
+ 2004-10-04  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-dom.c (tree_ssa_dominator_optimize):
+ 	Initialize OPT_STATS to 0.
+ 
+ 2004-10-04  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-data-ref.c: Fix comment typos.
+ 
+ 2004-10-04  Sebastian Pop  <pop@cri.ensmp.fr>
+ 
+ 	* tree-data-ref.c (array_base_name_differ_p): Fix comments.  When
+ 	the predicate cannot be computed, don't initialize the result to
+ 	false.
+ 
+ 2004-10-01  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* dwarf2.h (dwarf_calling_convention): Add GNU prefix to
+ 	locally defined enum.
+ 	* dwarf2out.c (add_calling_convention_attribute): Don't
+ 	emit DW_CC_normal.
+ 
+ 2004-10-03  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR c/17178, PR c/17820
+ 	* c-decl.c (pop_scope): Do not warn about unused static
+ 	variables as they warned in the middle-end.
+ 
+ 2004-10-03  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+ 
+ 	* builtins.c (expand_builtin_memcpy): Delete duplicate code
+ 	and make the first parameter the expression not the arglist.
+ 
+ 2004-10-03  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* expr.c (expand_expr_addr_expr): Only accept Pmode or ptr_mode
+ 	as valid modes to expand address expressions.
+ 
+ 2004-10-03  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-aux-info.c, c-common.c, c-common.h, c-cppbuiltin.c, c-decl.c,
+ 	c-format.c, c-incpath.c, c-lex.c, c-objc-common.c, c-opts.c,
+ 	c-parse.in, c-pch.c, c-ppoutput.c, c-pragma.c, c-typeck.c: Follow
+ 	code formatting conventions.
+ 
+ 2004-10-03  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.md (<u>mulsidi3_32bit_r4000): Fix unsigned case.
+ 
+ 2004-10-03  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	PR tree-optimization/16632
+ 	* fold-const.c (fold) [EQ_EXPR]: When seeing if D & ~C != 0 to
+ 	fold (A & C) == D into 0, fold ~C.  Similarly, for the case
+ 	where | is used instead of &.
+ 
+ 2004-10-03  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* ginclude/stddef.h: Fix a comment typo.
+ 
+ 2004-10-03  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR target/17443
+ 	* config.gcc (i?86-*-solaris2*): Restore correct logic
+ 	for --enable-threads option.
+ 	(sparc64-*-solaris2*): Likewise.
+ 	(sparc-*-solaris2*): Likewise.
+ 
+ 2004-10-03  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* config/rs6000/linux.h (TARGET_C99_FUNCTIONS): Define.
+ 	(OS_MISSING_POWERPC64): Move, and comment.
+ 	* config/rs6000/linux64.h (TARGET_C99_FUNCTIONS): Define.
+ 	(OS_MISSING_POWERPC64): Move, and comment.
+ 
+ 2004-10-02  Ian Lance Taylor  <ian@wasabisystems.com>
+ 
+ 	* arm.c (output_call_mem): Add missing \t.
+ 
+ 2004-10-02  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+ 
+ 	* builtins.c (expand_builtin_memcmp, expand_builtin_strcmp,
+ 	expand_builtin_strncmp): Delete duplicate code.
+ 
+ 2004-10-02  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* tree-mudflap.c (mf_build_check_statement_for): Reorganize to
+ 	take check-base and -limit arguments.
+ 	(mf_xform_derefs_1): Reorganize slightly to pass proper base/limit
+ 	check ranges for ARRAY_REF and COMPONENT_REF.
+ 	(execute_mudflap_fnction_ops, ..._decls): Limit unnecessary
+ 	instrumentation.
+ 
+ 2004-10-02  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-objc-common.c (c_tree_printer): Correct description of %E.
+ 	Don't fall through after printing an expression.
+ 
+ 2004-10-02  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-cfg.c, config/s390/tpf-unwind.h: Fix comment typos.
+ 
+ 2004-10-02  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-cfg.c (cleanup_tree_cfg): Speed up by calling
+ 	delete_unrechable_blocks() only when necessary.
+ 
+ 2004-10-02  P.J. Darcy  <darcypj@us.ibm.com>
+ 
+ 	* gthr-tpf.h (__gthread_recursive_mutex_t): New type.
+ 	(__GTHREAD_RECURSIVE_MUTEX_INIT): Define.
+ 	(__gthread_recursive_mutex_lock, __gthread_recursive_mutex_trylock,
+ 	__gthread_recursive_mutex_unlock): New functions.
+ 
+ 2004-10-02  P.J. Darcy  <darcypj@us.ibm.com>
+ 
+ 	* config/s390/t-tpf (LIB2ADDEH): Remove tpf-eh.c.
+ 	* config/s390/tpf-eh.c: Remove file.
+ 	* config/s390/tpf-unwind.h: New file.
+ 	* config/s390/tpf.h (MD_FALLBACK_FRAME_STATE_FOR): Remove.
+ 	(MD_UNWIND_SUPPORT): Define.
+ 
+ 2004-10-02  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-typeck.c (warn_for_assignment): Don't permit argnum == 0.
+ 
+ 2004-10-01  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390-protos.h (s390_comparison): Add prototype.
+ 	* config/s390/s390.c (s390_comparison): New function.
+ 	(s390_branch_condition_mask): Return -1 for invalid comparisons.
+ 	(s390_branch_condition_mnemonic): Assert valid comparison.
+ 	* config/s390/s390.h (PREDICATE_CODES): Add s390_comparison.
+ 	* config/s390/s390.md ("*cjump_64", "*cjump_31", "*cjump_long",
+ 	"*icjump_64", "*icjump_31", "*icjump_long", "*trap"): Use
+ 	s390_comparison instead of comparison_operator.
+ 
+ 	* config/s390/s390.md (UNSPEC_CMPINT): New constant.
+ 	("cmpmemdi"): Remove.
+ 	("cmpmem_short", "*cmpmem_short"): Use CCUmode instead of CCSmode.
+ 	("cmpmem_long", "*cmpmem_long_64", "*cmpmem_long_31"): Likewise.
+ 	("cmpint_si"): Rename to ...
+ 	("*cmpint_si"): ... this.  Use UNSPEC_CMPINT.
+ 	("cmpint_di", "*cmpint_di"): Likewise.
+ 	* config/s390/s390.c (s390_canonicalize_comparison): Remove
+ 	redundant UNSPEC_CMPINT conversions.
+ 	(s390_expand_cmpmem): Adapt to cmpint pattern changes.
+ 
+ 2004-10-01  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* collect2.c (COLLECT_PARSE_FLAG): Remove.
+ 	(main): Remove a reference to COLLECT_PARSE_FLAG
+ 	* system.h: Poison COLLECT_PARSE_FLAG.
+ 	* doc/tm.texi (COLLECT_PARSE_FLAG): Remove.
+ 
+ 2004-10-01  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/crti.asm: Give _init and _fini function type.
+ 
+ 2004-10-01  Zdenek Dvorak  <dvorakz@suse.cz>
+ 
+ 	* common.opt (ftree-loop-ivcanon): Enable by default.
+ 	* tree-ssa-loop-ivcanon.c (try_unroll_loop_completely):
+ 	Enable complete loop unrolling.
+ 	(canonicalize_induction_variables, tree_unroll_loops_completely):
+ 	Reset scev info.
+ 
+ 2004-10-01  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/arm.c (thumb_compute_saved_rag_mask): Or with bitmask,
+ 	not register number.
+ 	(thumb_find_work_register): Search full register range.
+ 
+ 2004-10-01  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR tree-opt/17343
+ 	* tree-cfg.c (group_case_labels): Get the label and not
+ 	the case expr for the default case.
+ 	When the label we looking at is the default, decrement the
+ 	new_size.
+ 
+ 2004-10-01  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* c-decl.c (c_expand_body): Update call tree_rest_of_compilation.
+ 	* cgraphunit.c (cgraph_build_static_cdtor): Likewise.
+ 	* toplev.h (tree_rest_of_compilation): Update prototype.
+ 	* tree-optimize.c (tree_rest_of_compilation):  Kill nested_p argument.
+ 
+ 2004-10-01  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-cfg.c (cleanup_tree_cfg): Pull a call to
+ 	cleanup_control_flow() out of the while loop.
+ 
+ 2004-10-01  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* tree-vectorizer.c (vectorizable_operation): Fail unless
+ 	the mode for the vector type is indeed a vector mode.
+ 
+ 2004-10-01  Zdenek Dvorak  <dvorakz@suse.cz>
+ 
+ 	* tree-chrec.c (chrec_fold_plus_poly_poly, chrec_fold_plus_1,
+ 	chrec_fold_multiply): Use fold_convert or build_int_cst_type instead
+ 	of convert.
+ 	* tree-scalar-evolution.c (compute_overall_effect_of_inner_loop,
+ 	add_to_evolution, set_nb_iterations_in_loop, follow_ssa_edge_in_rhs,
+ 	follow_ssa_edge_in_rhs): Ditto.
+ 	* tree-ssa-loop-ivopts.c (struct iv): Add base_object field.
+ 	(dump_iv): Dump base_object.
+ 	(dump_use, dump_cand): Use dump_iv.
+ 	(determine_base_object): New function.
+ 	(alloc_iv): Initialize base_object field.
+ 	(record_use): Clear the ssa_name field of iv.
+ 	(get_computation_cost_at): Do not use difference of addresses of
+ 	two different objects.
+ 	(may_eliminate_iv): Do not require the loop to have just single exit.
+ 	* tree-ssa-loop-niter.c (zero_p): Do not check for overflows.
+ 	(nonzero_p): New function.
+ 	(inverse, number_of_iterations_cond, simplify_using_outer_evolutions,
+ 	tree_simplify_using_condition, simplify_using_initial_conditions,
+ 	loop_niter_by_eval, find_loop_niter_by_eval,
+ 	estimate_numbers_of_iterations_loop, compare_trees,
+ 	upper_bound_in_type, lower_bound_in_type,
+ 	can_count_iv_in_wider_type_bound): Use buildN instead of build.  Use
+ 	fold_convert or build_int_cst_type instead of convert.  Use (non)zero_p
+ 	instead of integer_(non)zerop.
+ 
+ 2004-10-01  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Revert
+ 	2004-09-29  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* tree.h (enum tree_index): Add TI_VA_LIST_GPR_COUNTER_FIELD
+ 	and TI_VA_LIST_FPR_COUNTER_FIELD.
+ 	(va_list_gpr_counter_field, va_list_fpr_counter_field): Define.
+ 	* tree-pass.h (pass_stdarg): Add.
+ 	* tree-optimize.c (init_tree_optimization_passes): Add pass_stdarg.
+ 	* tree-stdarg.c: New file.
+ 	* Makefile.in (OBJS-common): Add tree-stdarg.o.
+ 	(tree-stdarg.o): Add dependencies.
+ 	* function.h (struct function): Add va_list_gpr_size and
+ 	va_list_fpr_size fields.
+ 	* function.c (allocate_struct_function): Initialize them.
+ 
+ 	* config/i386/i386.c (ix86_build_builtin_va_list): Initialize
+ 	va_list_{g,f}pr_counter_field.
+ 	(ix86_setup_incoming_varargs): Don't do anything if reg_save
+ 	area will not be used.  Only save registers that tree-stdarg.c
+ 	detected they need saving.
+ 	(ix86_va_start): Don't set up fields that won't be used.
+ 
+ 	* config/rs6000/rs6000.c (rs6000_build_builtin_va_list): Initialize
+ 	va_list_{g,f}pr_counter_field.
+ 	(setup_incoming_varargs): Don't do anything if reg_save
+ 	area will not be used.  Only save registers that tree-stdarg.c
+ 	detected they need saving.
+ 	(rs6000_va_start): Don't set up fields that won't be used.
+ 
+ 2004-09-30  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* dwarf2.h (dwarf_calling_convention): Add enum for renesas
+ 	sh abi.
+ 	* dwarf2out.c (add_calling_convention_attribute): New function.
+ 	(gen_subroutine_type_die): Use.
+ 	* target-def.h (TARGET_DWARF_CALLING_CONVENTION): New hook.
+ 	* target.h (gcc_target): Add dwarf_calling_convention.
+ 	* hooks.c (hook_int_tree_0): New function.
+ 	* hooks.h: Prototype.
+ 	* config/sh/sh.c: Include dwarf2.h.
+ 	(sh_dwarf_calling_convention): New function.
+ 	(TARGET_DWARF_CALLING_CONVENTION): Use.
+ 	* doc/tm.texi (TARGET_DWARF_CALLING_CONVENTION): Document.
+ 
+ 2004-09-30  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+ 
+ 	* builtins.c (expand_builtin_strstr, expand_builtin_strchr,
+ 	expand_builtin_strrchr, expand_builtin_strpbrk,
+ 	expand_builtin_strncat, expand_builtin_strspn,
+ 	expand_builtin_strcspn, expand_builtin_fputs): Eliminate duplicate
+ 	code.
+ 
+ 2004-09-30  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390-protos.h (s390_expand_logical_operator): Add
+ 	prototype.
+ 	(s390_logical_operator_ok_p): Likewise.
+ 	* config/s390/s390.c (s390_expand_logical_operator): New function.
+ 	(s390_logical_operator_ok_p): Likewise.
+ 	* config/s390/s390.md ("anddi3"): New expander.
+ 	("*anddi3"): Rename from old anddi3 pattern, add Q->Q alternative.
+ 	("*anddi3_ss", "*anddi3_ss_inv"): Remove.
+ 	("andsi3"): Use s390_expand_logical_operator.
+ 	("*andsi3_esa", "*andsi3_zarch"): Add Q->Q alternative.
+ 	("*andsi3_ss", "*andsi3_ss_inv"): Remove.
+ 	("andhi3"): New expander.
+ 	("*andhi3_zarch", "*andhi3_esa"): New patterns.
+ 	("andhi3", "*andhi3_ni", "*andhi3_ss", "*andhi3_ss_inv"): Remove.
+ 	("andqi3"): New expander.
+ 	("*andqi3_zarch", "*andqi3_esa"): New patterns.
+ 	("andqi3", "*andqi3_ni", "*andqi3_ss", "*andqi3_ss_inv"): Remove.
+ 	("iordi3"): New expander.
+ 	("*iordi3"): Rename from old iordi3 pattern, add Q->Q alternative.
+ 	("*iordi3_ss", "*iordi3_ss_inv"): Remove.
+ 	("iorsi3"): Use s390_expand_logical_operator.
+ 	("*iorsi3_esa", "*iorsi3_zarch"): Add Q->Q alternative.
+ 	("*iorsi3_ss", "*iorsi3_ss_inv"): Remove.
+ 	("iorhi3"): New expiorer.
+ 	("*iorhi3_zarch", "*iorhi3_esa"): New patterns.
+ 	("iorhi3", "*iorhi3_ni", "*iorhi3_ss", "*iorhi3_ss_inv"): Remove.
+ 	("iorqi3"): New expiorer.
+ 	("*iorqi3_zarch", "*iorqi3_esa"): New patterns.
+ 	("iorqi3", "*iorqi3_ni", "*iorqi3_ss", "*iorqi3_ss_inv"): Remove.
+ 	("xordi3"): New expander.
+ 	("*xordi3"): Rename from old xordi3 pattern, add Q->Q alternative.
+ 	("*xordi3_ss", "*xordi3_ss_inv"): Remove.
+ 	("xorsi3"): New expander.
+ 	("*xorsi3"): Rename from old xorsi3 pattern, add Q->Q alternative.
+ 	("*xorsi3_ss", "*xorsi3_ss_inv"): Remove.
+ 	("xorhi3"): New expander.
+ 	("*xorqi3"): Rename from old xorhi3 pattern, add Q->Q alternative.
+ 	("*xorhi3_ss", "*xorhi3_ss_inv"): Remove.
+ 	("xorqi3"): New expander.
+ 	("*xorqi3"): Rename from old xorqi3 pattern, add Q->Q alternative.
+ 	("*xorqi3_ss", "*xorqi3_ss_inv"): Remove.
+ 
+ 2004-09-30  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* combine.c (force_to_mode) <NE_EXPR>: Only convert the expression
+ 	(AND (NE FOO 0) CONST) into (AND FOO CONST) if FOO has the same
+ 	machine mode as the result.
+ 
+ 2004-09-30  Ben Elliston  <bje@au.ibm.com>
+ 
+ 	PR bootstrap/17761
+ 	* lcm.c (optimize_mode_switching): Update to use EDGE_SUCC and
+ 	FOR_EACH_EDGE macros.
+ 
+ 2004-09-30  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-tree.h (readonly_error): Remove.
+ 	* c-typeck (enum lvalue_use): New.
+ 	(lvalue_or_else, readonly_error): Use it.  All callers changed.
+ 	(readonly_error): Make static.
+ 
+ 2004-09-30  Jan Hubicka  <jh@suse.cz>
+ 
+ 	PR debug/13974
+ 	* cfgrtl.c (try_redirect_by_replacing_jump,
+ 	force_nonfallthru_and_redirect, commit_one_edge_insertion,
+ 	cfg_layout_merge_blocks):  Do not attach any line number information
+ 	to newly inserted instructions.
+ 	* emit-rtl.c (emit_insn*_before, emit_insn*_after): Rename to
+ 	emit_insn_*_noloc.
+ 	(emit_*insn_before, emit_insn*_after): New.
+ 	(emit_*insn_before_setloc, emit_*insn_after_setloc): Do not overwrite
+ 	existing locators.
+ 	* rtl.h (emit_*insn_before_noloc, emit_*insn_after_noloc): Declare.
+ 	(emit_*insn_before_sameloc, emit_*insn_after_sameloc): Kill.
+ 
+ 2004-09-30  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390-protos.h (s390_arg_frame_offset): Remove.
+ 	(s390_return_address_offset): Remove.
+ 	(s390_can_eliminate): Add prototype.
+ 	(s390_initial_elimination_offset): Add prototype.
+ 	* config/s390/s390.h (CAN_ELIMINATE): Call s390_can_eliminate.
+ 	(INITIAL_ELIMINATION_OFFSET): Call s390_initial_elimination_offset.
+ 	* config/s390/s390.c (s390_arg_frame_offset): Remove.
+ 	(s390_return_address_offset): Remove.
+ 	(s390_can_eliminate, s390_initial_elimination_offset): New functions.
+ 	(struct machine_function): New member split_branches_pending_p.
+ 	(s390_mainpool_start): Allow nonexistant pool insn for empty pool.
+ 	(s390_mainpool_finish): Likewise.  Clear base_reg if pool empty.
+ 	(s390_optimize_prologue): Remove base_used argument.  Call
+ 	s390_update_frame_layout instead of s390_register_info.  Handle
+ 	prologue/epilogue insns that touch only RETURN_REGNUM.
+ 	(s390_reorg): Remove base_used.  Clear split_branches_pending_p.
+ 	(s390_register_info): Remove base_used and return_addr_used
+ 	arguments, compute special register usage inline.  Return live
+ 	register data to caller.
+ 	(s390_frame_info): Remove arguments, do not call s390_register_info.
+ 	(s390_init_frame_layout): New function.
+ 	(s390_update_frame_layout): Likewise.
+ 	(s390_emit_prologue): Call s390_update_frame_layout; some code
+ 	move to there.  Do not emit pool placeholder insn if unnecessary.
+ 
+ 2004-09-30  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390.c (legitimate_reload_constant_p): Remove
+ 	floating point constant workaround.
+ 	(s390_secondary_input_reload_class): Handle PLUS reloads
+ 	with too-large constant.
+ 	(s390_expand_plus_operand): Likewise.
+ 	* config/s390/s390.md ("movdi"): Do not call force_const_mem.
+ 	("movsi"): Likewise.  Also, remove workaround for non-general
+ 	operands.
+ 	("movdf"): Do not call force_const_mem.
+ 	("movsf"): Likewise.  Merge expander with *movsf insn.
+ 	("*movsf"): Remove, merge with movsf expander.
+ 
+ 2004-09-30  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/symbian.h (STARTFILE_SPEC): Remove crt*.o.
+ 	(ENDFILE_SPEC): Define.
+ 	* config/arm/t-symbian.h (EXTRA_MULTILIB_PARTS): Set.
+ 
+ 2004-09-30  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/alpha/qrnnd.asm: Mark for noexecstack.
+ 
+ 2004-09-30  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* protoize.c, tree-cfg.c: Fix comment typos.
+ 
+ 2004-09-30  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	PR c/17730
+ 	* c-typeck.c (lvalue_or_else): Pass msgid directly to error.
+ 
+ 2004-09-30  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-alias.c (collect_points_to_info_r): Move analysis of
+ 	expressions...
+ 	(add_pointed_to_expr): ... here.
+ 	Call add_pointed_to_expr for variables with DECL_INITIAL set.
+ 	* tree-dfa.c (add_referenced_var): Scan DECL_INITIAL of any
+ 	pointer variable, if set.
+ 
+ 2004-09-30  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/sh/sh.c: Follow spelling conventions.
+ 
+ 2004-09-29  Richard Henderson  <rth@redhat.com>
+ 
+ 	* unwind-dw2.c (_Unwind_GetGR): Honor DWARF_ZERO_REG.
+ 	* doc/tm.texi (DWARF_ZERO_REG): New.
+ 
+ 	* config/alpha/alpha.c (alpha_sa_mask, alpha_expand_prologue,
+ 	alpha_expand_epilogue): Revert 2003-09-30 change to store zero.
+ 	* config/alpha/alpha.h (DWARF_ZERO_REG): New.
+ 
+ 2004-09-29  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* builtins.c (expand_builtin_strlen): Do not call emit_move_insn
+ 	with a PLUS as source operand.
+ 	(expand_movstr): Likewise.
+ 	(expand_builtin_stpcpy): Likewise.
+ 
+ 2004-09-29  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR 17739
+ 	* tree-gimple.c (is_gimple_reg): Reject hard registers.
+ 	(is_gimple_asm_val): New.
+ 	* tree-gimple.h (is_gimple_asm_val): Declare.
+ 	* gimplify.c (gimplify_asm_expr): Use it.
+ 	* tree-pretty-print.c (print_declaration): Dump hard regs.
+ 	* tree-outof-ssa.c (check_replaceable): Don't check for hard regs.
+ 	* tree-ssa-copyrename.c (copy_rename_partition_coalesce): Likewise.
+ 	* tree-ssa-pre.c (is_undefined_value): Likewise.
+ 	* tree-ssa-copy.c (may_propagate_copy): Likewise.
+ 	(may_propagate_copy_into_asm): Protect DECL_HARD_REGISTER.
+ 	* tree-ssa.c (warn_uninit): Likewise.
+ 	* tree.h (DECL_HARD_REGISTER): Check for VAR_DECL.
+ 
+ 2004-09-29  Fariborz Jahanian <fjahanian@apple.com>
+ 
+ 	* c-decl.c (merge_decls): Use comptype when comparing
+ 	types to decide on DECL_SIZE save of olddecl.
+ 
+ 2004-09-29  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree.h (INDIRECT_REF_P): New macro.
+ 	* alias.c (get_alias_set): Use it
+ 	(nonoverlapping_memrefs_p): Ditto.
+ 	* emit-rtl.c (mem_expr_equal_p): Ditto.
+ 	(set_mem_attributes_minus_bitpos): Ditto.
+ 	(is_gimple_addressable): Ditto.
+ 	(get_base_address): Ditto.
+ 	* tree-ssa-alias.c (find_ptr_derefernece): Ditto.
+ 	* tree-ssa-dce.c (mark_stmt_if_obviously_necessary): Ditto.
+ 	* tree-ssa-dom.c (record_equivalences_from_stmt): Ditto.
+ 	* tree-ssa-loop-im.c (is_call_clobbered_ref): Ditto.
+ 	* tree-ssa-loop-ivopts.c (find_interesting_uses_address): Ditto.
+ 	(add_address_candidates): Ditto.
+ 	(rewrite_address_base): Ditto.
+ 
+ 2004-09-30  Ben Elliston  <bje@au.ibm.com>
+ 
+ 	* tree-flow.h (struct bb_ann_d): Remove num_preds member.
+ 	* tree-into-ssa.c (rewrite_into_ssa): Don't set it.
+ 	(rewrite_ssa_into_ssa): Likewise.
+ 	* tree-phinodes.c (create_phi_node): Access the number of
+ 	predecessor edges using EDGE_COUNT() and not num_preds.
+ 
+ 2004-09-29  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	PR c/7425
+ 	* c-decl.c (merge_decls): Merge TREE_DEPRECATED.
+ 
+ 2004-09-29  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* fold-const.c (tree_swap_operands_p): Remove duplicated code.
+ 
+ 2004-09-29  Hans-Peter Nilsson  <hp@axis.com>
+ 
+ 	* config/cris/cris.md (moverside, movemside): With MEM, make sure
+ 	the address is (plus reg mem).
+ 
+ 2004-09-29  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* config/rs6000/linux64.h (PROCESSOR_DEFAULT): Define.
+ 
+ 2004-09-29  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* tree.c (make_node_stat): Fix uninitialized warning.  Replace
+ 	cascaded if ... else if with a switch.
+ 
+ 2004-09-29  Aaron W. LaFramboise  <aaronavay62@aaronwl.com>
+ 
+ 	* read-rtl.c (apply_macro_to_string): Replace index with strchr.
+ 
+ 2004-09-29  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* tree.h (enum tree_index): Add TI_VA_LIST_GPR_COUNTER_FIELD
+ 	and TI_VA_LIST_FPR_COUNTER_FIELD.
+ 	(va_list_gpr_counter_field, va_list_fpr_counter_field): Define.
+ 	* tree-pass.h (pass_stdarg): Add.
+ 	* tree-optimize.c (init_tree_optimization_passes): Add pass_stdarg.
+ 	* tree-stdarg.c: New file.
+ 	* Makefile.in (OBJS-common): Add tree-stdarg.o.
+ 	(tree-stdarg.o): Add dependencies.
+ 	* function.h (struct function): Add va_list_gpr_size and
+ 	va_list_fpr_size fields.
+ 	* function.c (allocate_struct_function): Initialize them.
+ 
+ 	* config/i386/i386.c (ix86_build_builtin_va_list): Initialize
+ 	va_list_{g,f}pr_counter_field.
+ 	(ix86_setup_incoming_varargs): Don't do anything if reg_save
+ 	area will not be used.  Only save registers that tree-stdarg.c
+ 	detected they need saving.
+ 	(ix86_va_start): Don't set up fields that won't be used.
+ 
+ 	* config/rs6000/rs6000.c (rs6000_build_builtin_va_list): Initialize
+ 	va_list_{g,f}pr_counter_field.
+ 	(setup_incoming_varargs): Don't do anything if reg_save
+ 	area will not be used.  Only save registers that tree-stdarg.c
+ 	detected they need saving.
+ 	(rs6000_va_start): Don't set up fields that won't be used.
+ 
+ 2004-09-29  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* builtins.def (BUILT_IN_FPUTC, BUILT_IN_FPUTC_UNLOCKED,
+ 	BUILT_IN_FPUTS, BUILT_IN_FPUTS_UNLOCKED, BUILT_IN_FWRITE,
+ 	BUILT_IN_FWRITE_UNLOCKED, BUILT_IN_PUTCHAR, BUILT_IN_PUTCHAR_UNLOCKED,
+ 	BUILT_IN_PUTS, BUILT_IN_PUTS_UNLOCKED): Remove nothrow attribute.
+ 	* builtin-attrs.def (ATTR_NONNULL_1, ATTR_NONNULL_2, ATTR_NONNULL_1_2,
+ 	ATTR_NONNULL_1_4): New.
+ 
+ 2004-09-29  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/17697
+ 	* tree-ssa-ccp.c (execute_fold_all_builtins): Update eh and cleanup
+ 	cfg if needed.
+ 
+ 2004-09-28  Per Bothner  <per@bothner.com>
+ 
+ 	* profile.c (branch_prob): Pass correct value to output_location,
+ 	even when USE_MAPPED_LOCATION.  Fixes bug from 09-11.
+ 
+ 2004-09-28  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR 15089
+ 	* tree-ssa-copy.c (may_propagate_copy_into_asm): New.
+ 	* tree-flow.h (may_propagate_copy_into_asm): Declare.
+ 	* tree-ssa-ccp.c (replace_uses_in): Use it.
+ 	* tree-ssa-dom.c (cprop_operand): Likewise.
+ 
+ 2004-09-28 Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-threadupdate.c (create_block_for_threading):  Request
+ 	that no outgoing edges be left in the duplicate block.  Do no
+ 	update information on outgoing edges or PHI nodes in target
+ 	blocks here.
+ 	(remove_ctrl_stmt_and_useless_edges): Renamed from
+ 	remove_last_stmt_and_useless_edges.  Handle case where the
+ 	block is empty or has no control statements.  Do not update edge
+ 	flags here.
+ 	(thread_block): Create a template block rather than copying the
+ 	original block every time.  Create outgoing edges from the
+ 	duplicate blocks and update PHIs at the target of the outgoing
+ 	edges here.  Fix edge flags for the original block if necessary.
+ 	* cfghooks (duplicate_block): No longer assert that the original
+ 	block has incoming edges.
+ 
+ 2004-09-29  Hans-Peter Nilsson  <hp@bitrange.com>
+ 
+ 	* doc/extend.texi (Extended Asm): Add blurb about using Explicit
+ 	Reg Vars to enforce register allocation with general constraints.
+ 	(Explicit Reg Vars): Clarify relation to asm statements.
+ 	(Local Reg Vars): Similar.
+ 
+ 2004-09-28  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* sched-rgn.c (haifa_edge, edge_table, NEXT_IN, NEXT_OUT, FROM_BLOCK,
+ 	TO_BLOCK, nr_edges, in_edges, out_edges, IN_EDGES, OUT_EDGES,
+ 	build_control_flow, new_edge): Remove.
+ 	(schedule_insns): Remove edge_table/in_edges/out_edges cleanup.
+ 	(bitlst, bitlst_table_last, bitlst_table): Remove.
+ 	(bblst): Store basic_block pointer instead of block index.
+ 	(bblst_table): Likewise.
+ 	(edgelst): Store edge pointer instead of edge index.
+ 	(edgelst_table, edgelst_last): New variables.
+ 	(extract_bitlst): Rename to ...
+ 	(extract_edgelst): ... this.  Return edge pointers, not indices.
+ 	(split_edges): Update call.
+ 	(rgn_edges): Store edge pointers instead of indices.
+ 	(edge_to_bit): Remove.
+ 	(EDGE_TO_BIT): Store per-region edge index in edge->aux.
+ 	(SET_EDGE_TO_BIT): New macro.
+ 	(is_cfg_nonregular): Check for simple cases of unreachable blocks.
+ 	(find_rgns): Remove edge_list parameter.  Traverse standard CFG
+ 	data structures instead of haifa_edge et al.  Use edge pointers
+ 	instead of edge indices everywhere.
+ 	(compute_dom_prob_ps): Use standard CFG data structures.  Account
+ 	for exit edges.
+ 	(compute_trg_info): Likewise.
+ 	(propagate_deps): Likewise.
+ 	(debug_candidate): Account for bblst data structure change.
+ 	(check_live_1, update_live_1, is_pfree): Likewise.
+ 	(IS_REACHABLE): Use standard CFG data structures.
+ 	(init_ready_list): Update bblst_table/edgelst_table allocation.
+ 	(schedule_region): Update alloc/cleanup code to data structure
+ 	changes.  Use edge->aux to store per-region edge index.
+ 	(init_regions): No longer call build_control_flow.  Do not
+ 	create edge list any more.
+ 
+ 2004-09-28  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* cse.c (cse_insn): Avoid creating direct non-local jumps.
+ 	* combine.c (can_combine_p): Likewise.
+ 	* local-alloc. (update_equiv_regs): Likewise.
+ 
+ 2004-09-28  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR 17531
+ 	* expr.c (expand_expr_addr_expr_1): Only assemble_external for decls.
+ 	Don't check VOIDmode here.  Force PLUS operands to common type.
+ 	(expand_expr_addr_expr): Do VOIDmode check earlier.  Force use of
+ 	Pmode if given a non pointer type.
+ 
+ 2004-09-28  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	PR 17531
+ 	* optabs.c (expand_binop): Force constants to the correct mode.
+ 
+ 2004-09-28  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390.c (s390_adjust_cost): Remove.
+ 	(TARGET_SCHED_ADJUST_COST): Do not redefine.
+ 	(s390_adjust_priority): Handle TYPE_STM like TYPE_STORE.
+ 	* config/s390/s390.md ("main_pool"): Use "larl" type
+ 	attribute if TARGET_CPU_ZARCH.
+ 
+ 2004-09-28  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* config/ia64/ia64.c (ia64_expand_prologue): Declare ei
+ 	variable.
+ 
+ 2004-09-28  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-loop.c (pass_record_bounds): Do not assign a
+ 	name to the pass.
+ 
+ 2004-09-28  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* common.opt (flag_gcse_sm): Disable by default.
+ 	(flag_gcse_las): Likewise.
+ 	(flag_web): Likewise.  Create from this file.
+ 	* flags.h: Remove flag_web declaration.
+ 	* toplev.c (flag_web): Likewise.
+ 	(process_options): Never set flag_web.
+ 
+ 2004-09-28  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* Makefile.in (tree-ssa-propagate.o): Depend on vec.h.
+ 	* tree-ssa-propagate.c: Include vec.h.
+ 	(interesting_ssa_edges, varying_ssa_edges): Make these VECs
+ 	instead of varrays.
+ 	(cfg_blocks_add): Assert the block is not already in the worklist.
+ 	Update uses of interesting_ssa_edges and varying_ssa_edges.
+ 	(process_ssa_edge_worklist, ssa_prop_init, ssa_prop_fini,
+ 	ssa_propagate): Likewise.
+ 
+ 2004-09-28  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	PR c/16409
+ 	* c-decl.c (start_decl): Check for initializing incomplete array
+ 	of VLAs.
+ 	(build_compound_literal): Check for TYPE being error_mark_node.
+ 	* c-parse.in (primary): Check for VLA compound literals.
+ 
+ 2004-09-28  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-live.c (calculate_live_on_entry): Fix warnings
+ 	with --disable-checking.
+ 
+ 2004-09-28  Devang Patel  <dpatel@apple.com>
+ 
+ 	* tree-pretty-print.c (dump_generic_node): Print vector types.
+ 
+ 2004-09-28  Nick Clifton  <nickc@redhat.com>
+ 
+ 	* config/sh/sh.h (INIT_CUMULATIVE_ARGS): Replace with an
+ 	invocation of the function sh_init_cumulative_args.
+ 	(INIT_CUMULATIVE_LIBCALL_ARGS): Likewise.
+ 	(INIT_CUMULATIVE_INCOMING_ARGS): Delete.
+ 	* config/sh/sh-protos.h: Prototype sh_init_cumulative_args.
+ 	* config/sh/sh.c (sh_init_cumulative_args): New function based
+ 	on the contents of the old INIT_CUMULATIVE_ARGS macro but with a
+ 	heuristic added to determine the setting of force_mem when a
+ 	library function is being called.
+ 
+ 2004-09-28  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-loop-im.c (single_reachable_address) <PHI_NODE>:
+ 	Skip constant arguments.
+ 
+ 2004-09-28  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-alias.c (create_name_tags): If PTR points to a
+ 	volatile type, mark the tag volatile.
+ 	(get_tmt_for): If TAG_TYPE is a volatile type, mark the tag
+ 	volatile.
+ 
+ 2004-09-28  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* tree.def (vec_cond_expr): Fix. Change 'e'
+ 	to tcc_expression.
+ 
+ 2004-09-28  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* basic-block.h: Fix a comment typo.
+ 
+ 2004-09-28  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* optabs.c, optabs.h: Fix comment typos.
+ 
+ 2004-09-28  Eric Botcazou  <ebotcazou@act-europe.fr>
+ 
+ 	* config/sparc/sparc.md (call_address_struct_value_sp32):
+ 	Properly mask the immediate field of the 'unimp' instruction.
+ 	(call_symbolic_struct_value_sp32): Likewise.
+ 
+ 2004-09-28  Ben Elliston  <bje@au.ibm.com>
+ 	    Steven Bosscher  <stevenb@suse.de>
+ 	    Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	Merge from edge-vector-branch:
+ 	* basic-block.h: Include vec.h, errors.h. Instantiate a VEC(edge).
+ 	(struct edge_def): Remove pred_next, succ_next members.
+ 	(struct basic_block_def): Remove pred, succ members.  Add preds
+ 	and succs members of type VEC(edge).
+ 	(FALLTHRU_EDGE): Redefine using EDGE_SUCC.
+ 	(BRANCH_EDGE): Likewise.
+ 	(EDGE_CRITICAL_P): Redefine using EDGE_COUNT.
+ 	(EDGE_COUNT, EDGE_I, EDGE_PRED, EDGE_SUCC): New.
+ 	(edge_iterator): New.
+ 	(ei_start, ei_last, ei_end_p, ei_one_before_end_p): New.
+ 	(ei_next, ei_prev, ei_edge, ei_safe_edge): Likewise.
+ 	(FOR_EACH_EDGE): New.
+ 	* bb-reorder.c (find_traces): Use FOR_EACH_EDGE and EDGE_* macros
+ 	where applicable.
+ 	(rotate_loop): Likewise.
+ 	(find_traces_1_route): Likewise.
+ 	(bb_to_key): Likewise.
+ 	(connect_traces): Likewise.
+ 	(copy_bb_p): Likewise.
+ 	(find_rarely_executed_basic_blocks_and_crossing_edges): Likewise.
+ 	(add_labels_and_missing_jumps): Likewise.
+ 	(fix_up_fall_thru_edges): Likewise.
+ 	(find_jump_block): Likewise.
+ 	(fix_crossing_conditional_branches): Likewise.
+ 	(fix_crossing_unconditional_branches): Likewise.
+ 	(add_reg_crossing_jump_notes): Likewise.
+ 	* bt-load.c (augment_live_range): Likewise.
+ 	* cfg.c (clear_edges): Likewise.
+ 	(unchecked_make_edge): Likewise.
+ 	(cached_make_edge): Likewise.
+ 	(make_single_succ_edge): Likewise.
+ 	(remove_edge): Likewise.
+ 	(redirect_edge_succ_nodup): Likewise.
+ 	(check_bb_profile): Likewise.
+ 	(dump_flow_info): Likewise.
+ 	(alloc_aux_for_edges): Likewise.
+ 	(clear_aux_for_edges): Likewise.
+ 	(dump_cfg_bb_info): Likewise.
+ 	* cfganal.c (forwarder_block_p): Likewise.
+ 	(can_fallthru): Likewise.
+ 	(could_fall_through): Likewise.
+ 	(mark_dfs_back_edges): Likewise.
+ 	(set_edge_can_fallthru_flag): Likewise.
+ 	(find_unreachable_blocks): Likewise.
+ 	(create_edge_list): Likewise.
+ 	(verify_edge_list): Likewise.
+ 	(add_noreturn_fake_exit_edges): Likewise.
+ 	(connect_infinite_loops_to_exit): Likewise.
+ 	(flow_reverse_top_sort_order_compute): Likewise.
+ 	(flow_depth_first_order_compute): Likewise.
+ 	(flow_preorder_transversal_compute): Likewise.
+ 	(flow_dfs_compute_reverse_execute): Likewise.
+ 	(dfs_enumerate_from): Likewise.
+ 	(compute_dominance_frontiers_1): Likewise.
+ 	* cfgbuild.c (make_edges): Likewise.
+ 	(compute_outgoing_frequencies): Likewise.
+ 	(find_many_sub_basic_blocks): Likewise.
+ 	(find_sub_basic_blocks): Likewise.
+ 	* cfgcleanup.c (try_simplify_condjump): Likewise.
+ 	(thread_jump): Likewise.
+ 	(try_forward_edges): Likewise.
+ 	(merge_blocks_move): Likewise.
+ 	(outgoing_edges_match): Likewise.
+ 	(try_crossjump_to_edge): Likewise.
+ 	(try_crossjump_bb): Likewise.
+ 	(try_optimize_cfg): Likewise.
+ 	(merge_seq_blocks): Likewise.
+ 	* cfgexpand.c (expand_gimple_tailcall): Likewise.
+ 	(expand_gimple_basic_block): Likewise.
+ 	(construct_init_block): Likewise.
+ 	(construct_exit_block): Likewise.
+ 	* cfghooks.c (verify_flow_info): Likewise.
+ 	(dump_bb): Likewise.
+ 	(delete_basic_block): Likewise.
+ 	(split_edge): Likewise.
+ 	(merge_blocks): Likewise.
+ 	(make_forwarder_block): Likewise.
+ 	(tidy_fallthru_edges): Likewise.
+ 	(can_duplicate_block_p): Likewise.
+ 	(duplicate_block): Likewise.
+ 	* cfglayout.c (fixup_reorder_chain): Likewise.
+ 	(fixup_fallthru_exit_predecessor): Likewise.
+ 	(can_copy_bbs_p): Likewise.
+ 	(copy_bbs): Likewise.
+ 	* cfgloop.c (flow_loops_cfg_dump): Likewise.
+ 	(flow_loop_entry_edges_find): Likewise.
+ 	(flow_loop_exit_edges_find): Likewise.
+ 	(flow_loop_nodes_find): Likewise.
+ 	(mark_single_exit_loops): Likewise.
+ 	(flow_loop_pre_header_scan): Likewise.
+ 	(flow_loop_pre_header_find): Likewise.
+ 	(update_latch_info): Likewise.
+ 	(canonicalize_loop_headers): Likewise.
+ 	(flow_loops_find): Likewise.
+ 	(get_loop_body_in_bfs_order): Likewise.
+ 	(get_loop_exit_edges): Likewise.
+ 	(num_loop_branches): Likewise.
+ 	(verify_loop_structure): Likewise.
+ 	(loop_latch_edge): Likewise.
+ 	(loop_preheader_edge): Likewise.
+ 	* cfgloopanal.c (mark_irreducible_loops): Likewise.
+ 	(expected_loop_iterations): Likewise.
+ 	* cfgloopmanip.c (remove_bbs): Likewise.
+ 	(fix_bb_placement): Likewise.
+ 	(fix_irreducible_loops): Likewise.
+ 	(remove_path): Likewise.
+ 	(scale_bbs_frequencies): Likewise.
+ 	(loopify): Likewise.
+ 	(unloop): Likewise.
+ 	(fix_loop_placement): Likewise.
+ 	(loop_delete_branch_edge): Likewise.
+ 	(duplicate_loop_to_header_edge): Likewise.
+ 	(mfb_keep_just): Likewise.
+ 	(create_preheader): Likewise.
+ 	(force_single_succ_latches): Likewise.
+ 	(loop_split_edge_with): Likewise.
+ 	(create_loop_notes): Likewise.
+ 	* cfgrtl.c (rtl_split_block): Likewise.
+ 	(rtl_merge_blocks): Likewise.
+ 	(rtl_can_merge_blocks): Likewise.
+ 	(try_redirect_by_replacing_jump): Likewise.
+ 	(force_nonfallthru_and_redirect): Likewise.
+ 	(rtl_tidy_fallthru_edge): Likewise.
+ 	(commit_one_edge_insertion): Likewise.
+ 	(commit_edge_insertions): Likewise.
+ 	(commit_edge_insertions_watch_calls): Likewise.
+ 	(rtl_verify_flow_info_1): Likewise.
+ 	(rtl_verify_flow_info): Likewise.
+ 	(purge_dead_edges): Likewise.
+ 	(cfg_layout_redirect_edge_and_branch): Likewise.
+ 	(cfg_layout_can_merge_blocks_p): Likewise.
+ 	(rtl_flow_call_edges_add): Likewise.
+ 	* cse.c (cse_cc_succs): Likewise.
+ 	* df.c (hybrid_search): Likewise.
+ 	* dominance.c (calc_dfs_tree_nonrec): Likewise.
+ 	(calc_dfs_tree): Likewise.
+ 	(calc_idoms): Likewise.
+ 	(recount_dominator): Likewise.
+ 	* domwalk.c (walk_dominator_tree): Likewise.
+ 	* except.c (emit_to_new_bb_before): Likewise.
+ 	(connect_post_landing_pads): Likewise.
+ 	(sjlj_emit_function_enter): Likewise.
+ 	(sjlj_emit_function_exit): Likewise.
+ 	(finish_eh_generation): Likewise.
+ 	* final.c (compute_alignments): Likewise.
+ 	* flow.c (calculate_global_regs_live): Likewise.
+ 	(initialize_uninitialized_subregs): Likewise.
+ 	(init_propagate_block_info): Likewise.
+ 	* function.c (thread_prologue_and_epilogue_insns): Likewise.
+ 	* gcse.c (find_implicit_sets): Likewise.
+ 	(bypass_block): Likewise.
+ 	(bypass_conditional_jumps): Likewise.
+ 	(compute_pre_data): Likewise.
+ 	(insert_insn_end_bb): Likewise.
+ 	(insert_store): Likewise.
+ 	(remove_reachable_equiv_notes): Likewise.
+ 	* global.c (global_conflicts): Likewise.
+ 	(calculate_reg_pav): Likewise.
+ 	* graph.c (print_rtl_graph_with_bb): Likewise.
+ 	* ifcvt.c (mark_loop_exit_edges): Likewise.
+ 	(merge_if_block): Likewise.
+ 	(find_if_header): Likewise.
+ 	(block_jumps_and_fallthru_p): Likewise.
+ 	(find_if_block): Likewise.
+ 	(find_cond_trap): Likewise.
+ 	(block_has_only_trap): Likewise.
+ 	(find_if_case1): Likewise.
+ 	(find_if_case_2): Likewise.
+ 	* lambda-code.c (lambda_loopnest_to_gcc_loopnest): Likewise.
+ 	(perfect_nestify): Likewise.
+ 	* lcm.c (compute_antinout_edge): Likewise.
+ 	(compute_laterin): Likewise.
+ 	(compute_available): Likewise.
+ 	(compute_nearerout): Likewise.
+ 	* loop-doloop.c (doloop_modify): Likewise.
+ 	* loop-init.c (loop_optimizer_init): Likewise.
+ 	* loop-invariant.c (find_exits): Likewise.
+ 	* loop-iv.c (simplify_using_initial_values): Likewise.
+ 	(check_simple_exit): Likewise.
+ 	(find_simple_exit): Likewise.
+ 	* loop-unroll.c (peel_loop_completely): Likewise.
+ 	(unroll_loop_constant_iterations): Likewise.
+ 	(unroll_loop_runtime_iterations): Likewise.
+ 	* loop-unswitch.c (may_unswitch_on): Likewise.
+ 	(unswitch_loop): Likewise.
+ 	* modulo-sched.c (generate_prolog_epilog): Likewise.
+ 	(sms_schedule): Likewise.
+ 	* postreload-gcse.c (eliminate_partially_redundant_load):
+ 	Likewise.
+ 	* predict.c (can_predict_insn_p): Likewise.
+ 	(set_even_probabilities): Likewise.
+ 	(combine_predictions_for_bb): Likewise.
+ 	(predict_loops): Likewise.
+ 	(estimate_probability): Likewise.
+ 	(tree_predict_by_opcode): Likewise.
+ 	(tree_estimate_probability): Likewise.
+ 	(last_basic_block_p): Likewise.
+ 	(propagate_freq): Likewise.
+ 	(estimate_loops_at_level): Likewise.
+ 	(estimate_bb_frequencies): Likewise.
+ 	* profile.c (instrument_edges): Likewise.
+ 	(get_exec_counts): Likewise.
+ 	(compute_branch_probabilities): Likewise.
+ 	(branch_prob): Likewise.
+ 	* ra-build.c (live_in): Likewise.
+ 	* ra-rewrite.c (rewrite_program2): Likewise.
+ 	* ra.c (reg_alloc): Likewise.
+ 	* reg-stack.c (reg_to_stack): Likewise.
+ 	(convert_regs_entry): Likewise.
+ 	(compensate_edge): Likewise.
+ 	(convert_regs_1): Likewise,
+ 	(convert_regs_2): Likewise.
+ 	(convert_regs): Likewise.
+ 	* regrename.c (copyprop_hardreg_forward): Likewise.
+ 	* reload1.c (fixup_abnormal_edges): Likewise.
+ 	* sbitmap.c (sbitmap_intersection_of_succs): Likewise.
+ 	(sbitmap_insersection_of_preds): Likewise.
+ 	(sbitmap_union_of_succs): Likewise.
+ 	(sbitmap_union_of_preds): Likewise.
+ 	* sched-ebb.c (compute_jump_reg_dependencies): Likewise.
+ 	(fix_basic_block_boundaries): Likewise.
+ 	(sched_ebbs): Likewise.
+ 	* sched-rgn.c (build_control_flow): Likewise.
+ 	(find_rgns): Likewise.
+ 	* tracer.c (find_best_successor): Likewise.
+ 	(find_best_predecessor): Likewise.
+ 	(tail_duplicate): Likewise.
+ 	* tree-cfg.c (make_edges): Likewise.
+ 	(make_ctrl_stmt_edges): Likewise.
+ 	(make_goto_expr_edges): Likewise.
+ 	(tree_can_merge_blocks_p): Likewise.
+ 	(tree_merge_blocks): Likewise.
+ 	(cfg_remove_useless_stmts_bb): Likewise.
+ 	(remove_phi_nodes_and_edges_for_unreachable_block): Likewise.
+ 	(tree_block_forwards_to): Likewise.
+ 	(cleanup_control_expr_graph): Likewise.
+ 	(find_taken_edge): Likewise.
+ 	(dump_cfg_stats): Likewise.
+ 	(tree_cfg2vcg): Likewise.
+ 	(disband_implicit_edges): Likewise.
+ 	(tree_find_edge_insert_loc): Likewise.
+ 	(bsi_commit_edge_inserts): Likewise.
+ 	(tree_split_edge): Likewise.
+ 	(tree_verify_flow_info): Likewise.
+ 	(tree_make_forwarder_block): Likewise.
+ 	(tree_forwarder_block_p): Likewise.
+ 	(thread_jumps): Likewise.
+ 	(tree_try_redirect_by_replacing_jump): Likewise.
+ 	(tree_split_block): Likewise.
+ 	(add_phi_args_after_copy_bb): Likewise.
+ 	(rewrite_to_new_ssa_names_bb): Likewise.
+ 	(dump_function_to_file): Likewise.
+ 	(print_pred_bbs): Likewise.
+ 	(print_loop): Likewise.
+ 	(tree_flow_call_edges_add): Likewise.
+ 	(split_critical_edges): Likewise.
+ 	(execute_warn_function_return): Likewise.
+ 	(extract_true_false_edges_from_block): Likewise.
+ 	* tree-if-conv.c (tree_if_conversion): Likewise.
+ 	(if_convertable_bb_p): Likewise.
+ 	(find_phi_replacement_condition): Likewise.
+ 	(combine_blocks): Likewise.
+ 	* tree-into-ssa.c (compute_global_livein): Likewise.
+ 	(ssa_mark_phi_uses): Likewise.
+ 	(ssa_rewrite_initialize_block): Likewise.
+ 	(rewrite_add_phi_arguments): Likewise.
+ 	(ssa_rewrite_phi_arguments): Likewise.
+ 	(insert_phi_nodes_for): Likewise.
+ 	(rewrite_into_ssa): Likewise.
+ 	(rewrite_ssa_into_ssa): Likewise.
+ 	* tree-mudflap.c (mf_build_check_statement_for): Likewise.
+ 	* tree-outof-ssa.c (coalesce_abnormal_edges): Likewise.
+ 	(rewrite_trees): Likewise.
+ 	* tree-pretty-print.c (dump_bb_header): Likewise.
+ 	(dump_implicit_edges): Likewise.
+ 	* tree-sra.c (insert_edge_copies): Likewise.
+ 	(find_obviously_necessary_stmts): Likewise.
+ 	(remove_data_stmt): Likewise.
+ 	* tree-ssa-dom.c (thread_across_edge): Likewise.
+ 	(dom_opt_finalize_block): Likewise.
+ 	(single_incoming_edge_ignoring_loop_edges): Likewise.
+ 	(record_equivalences_from_incoming_edges): Likewise.
+ 	(cprop_into_successor_phis): Likewise.
+ 	* tree-ssa-live.c (live_worklist): Likewise.
+ 	(calculate_live_on_entry): Likewise.
+ 	(calculate_live_on_exit): Likewise.
+ 	* tree-ssa-loop-ch.c (should_duplicate_loop_header_p): Likewise.
+ 	(copy_loop_headers): Likewise.
+ 	* tree-ssa-loop-im.c (loop_commit_inserts): Likewise.
+ 	(fill_always_executed_in): Likewise.
+ 	* tree-ssa-loop-ivcanon.c (create_canonical_iv): Likewise.
+ 	* tree-ssa-loop-ivopts.c (find_interesting_uses): Likewise.
+ 	(compute_phi_arg_on_exit): Likewise.
+ 	* tree-ssa-loop-manip.c (add_exit_phis_edge): Likewise.
+ 	(get_loops_exit): Likewise.
+ 	(split_loop_exit_edge): Likewise.
+ 	(ip_normal_pos): Likewise.
+ 	* tree-ssa-loop-niter.c (simplify_using_initial_conditions):
+ 	Likewise.
+ 	* tree-ssa-phiopt.c (candidate_bb_for_phi_optimization): Likewise.
+ 	(replace_phi_with_stmt): Likewise.
+ 	(value_replacement): Likewise.
+ 	* tree-ssa-pre.c (compute_antic_aux): Likewise.
+ 	(insert_aux): Likewise.
+ 	(init_pre): Likewise.
+ 	* tree-ssa-propagate.c (simulate_stmt): Likewise.
+ 	(simulate_block): Likewise.
+ 	(ssa_prop_init): Likewise.
+ 	* tree-ssa-threadupdate.c (thread_block): Likewise.
+ 	(create_block_for_threading): Likewise.
+ 	(remove_last_stmt_and_useless_edges): Likewise.
+ 	* tree-ssa.c (verify_phi_args): Likewise.
+ 	(verify_ssa): Likewise.
+ 	* tree_tailcall.c (independent_of_stmt_p): Likewise.
+ 	(find_tail_calls): Likewise.
+ 	(eliminate_tail_call): Likewise.
+ 	(tree_optimize_tail_calls_1): Likewise.
+ 	* tree-vectorizer.c (vect_transform_loop): Likewise.
+ 	* var-tracking.c (prologue_stack_adjust): Likewise.
+ 	(vt_stack_adjustments): Likewise.
+ 	(vt_find_locations): Likewise.
+ 	* config/frv/frv.c (frv_ifcvt_modify_tests): Likewise.
+ 	* config/i386/i386.c (ix86_pad_returns): Likewise.
+ 	* config/ia64/ia64.c (ia64_expand_prologue): Likewise.
+ 	* config/rs6000/rs6000.c (rs6000_emit_prologue): Likewise.
+ 
+ 2004-09-28  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR target/16532
+ 	* config/sparc/sparc.c (struct machine_function): New field
+ 	'leaf_function_p' and 'prologue_data_valid_p'.
+ 	(sparc_leaf_function_p, sparc_prologue_data_valid_p): New macro
+ 	to conveniently access the above fields.
+ 	(TARGET_LATE_RTL_PROLOGUE_EPILOGUE): Delete.
+ 	(eligible_for_return_delay): Use 'sparc_leaf_function_p' instead
+ 	of the generic flavor 'current_function_uses_only_leaf_regs'.
+ 	(eligible_for_sibcall_delay): Likewise.
+ 	(sparc_expand_prologue): Compute 'sparc_leaf_function_p' and set
+ 	'sparc_prologue_data_valid_p'.  Use 'sparc_leaf_function_p'.
+ 	(sparc_asm_function_prologue): Add sanity check for the assumption
+ 	made in 'sparc_expand_prologue'.  Use 'sparc_leaf_function_p'.
+ 	(sparc_can_use_return_insn_p): New function.
+ 	(sparc_expand_epilogue): Use 'sparc_leaf_function_p'.
+ 	(output_restore): Likewise.
+ 	(output_sibcall): Likewise.
+ 	(sparc_output_mi_thunk): Likewise.
+ 	* config/sparc/sparc-protos.h (sparc_can_use_return_insn_p): Declare.
+ 	* config/sparc/sparc.md (return): New expander.
+ 
+ 	* config/sparc/sparc.h (INITIAL_ELIMINATION_OFFSET): Minor tweak.
+ 
+ 2004-09-27  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	PR c++/17642
+ 	* stor-layout.c (layout_decl): Use fold_convert, not convert.
+ 	(bit_from_pos): Likewise.
+ 	(byte_from_pos): Likewise.
+ 	(pos_from_bit): Likewise.
+ 	(normalize_offset): Likewise.
+ 	(place_field): Likewise.
+ 	(finalize_type_size): Likewise.
+ 	(layout_type): Likewise.
+ 	* tree.c (build_index_type): Likewise.
+ 
+ 2004-09-27  Devang Patel  <dpatel@apple.com>
+ 
+ 	* expr.c (expand_expr_real_1): Handle VEC_COND_EXPR.
+ 	* genopinit.c (optabs): New entry for vcond_gen_code and
+ 	vcondu_gen_code.
+ 	* optabs.c (vcond_gen_code, vcondu_gen_code): New optabs.
+ 	(get_rtx_code): New function.
+ 	(vector_compare_rtx): New function.
+ 	(init_optabs): Initialize vcond_gen_code and vcondu_gen_code.
+ 	(expand_vec_cond_expr_p): New function.
+ 	(expand_vec_cond_expr): New function.
+ 	(get_vcond_icode): New function.
+ 	* optabs.h (expand_vec_cond_expr, expand_vec_cond_expr_p): New externs.
+ 	(vcond_gen_code, vcondu_gen_code): Same.
+ 
+ 2004-09-27  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* Makefile.in (STAGESTUFF): Split into ...
+ 	(STAGECOPYSTUFF, STAGEMOVESTUFF): ... these.
+ 	(mostlyclean): Update.
+ 	(stage1-start, stage2-start, stage3-start, stage4-start,
+ 	stageprofile-start, stagefeedback-start): Copy the STAGECOPYSTUFF.
+ 	Move the STAGEMOVESTUFF.
+ 
+ 2004-09-27  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* system.h (getpagesize): Return 'int' instead of 'long'.
+ 
+ 2004-09-27  Michael Matz <matz@suse.de>
+ 
+ 	PR bootstrap/17698
+ 	PR bootstrap/17702
+ 	* bitmap.h (bmp_iter_single_init, bmp_iter_and_not_init,
+ 	bmp_iter_and_init): Shift by bit_in_word.
+ 
+ 2004-09-27  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* aclocal.m4: Quote m4_includes. Include ../config/gcc-lib-path.m4.
+ 	* configure.ac: Don't sinclude it here.
+ 	* configure: Regenerate.
+ 
+ 2004-09-27  Dorit Naishlos  <dorit@il.ibm.com>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_legitimate_address, print_operand):
+ 	Handle AND pattern
+ 
+ 2004-09-27  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	PR c/13804
+ 	* c-typeck.c (build_component_ref): Name type involved in
+ 	diagnostic for structure or union without a member of the given
+ 	name.
+ 
+ 2004-09-27  DJ Delorie  <dj@redhat.com>
+ 
+ 	* config/stormy16/stormy16.c (xstormy16_asm_output_aligned_common):
+ 	.comm alignment is bytes, not bits.
+ 
+ 2004-09-27  Devang Patel  <dpatel@apple.com>
+ 
+ 	* tree-pretty-print.c (dump_generic_node): Print VEC_COND_EXPR.
+ 	(print_call_name): Do not print VEC_COND_EXPR.
+ 
+ 2004-09-27  Devang Patel  <dpatel@apple.com>
+ 
+ 	* tree-pretty-print.c (dump_generic_node): Print VEC_COND_EXPR.
+ 
+ 2004-09-27  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* i386.c (athlon_cost, k8_cost): Set BRANCH_COST to 5.
+ 
+ 2004-09-27  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* bitmap.h: Fix a comment typo.
+ 
+ 2004-09-27  Aaron W. LaFramboise <aaronraolete36@aaronwl.com>
+ 
+ 	* libgcc2.c (getpagesize): Change type of return value to int.
+ 
+ 2004-09-26  Matt Austern  <austern@apple.com>
+ 
+ 	* ggc-page.c (GGC_QUIRE_SIZE): Bump up from 16 to 256 if we're
+ 	using mmap.
+ 
+ 2004-09-26  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* bitmap.h (EXECUTE_IF_SET_IN_BITMAP, EXECUTE_IF_AND_COMPL_IN_BITMAP,
+ 	EXECUTE_IF_AND_IN_BITMAP): Changed to iterator style.
+ 	(bitmap_iterator): New type.
+ 	(bmp_iter_common_next_1, bmp_iter_single_next_1, bmp_iter_single_init,
+ 	bmp_iter_end_p, bmp_iter_single_next, bmp_iter_and_not_next_1,
+ 	bmp_iter_and_not_init, bmp_iter_and_not_next, bmp_iter_and_next_1,
+ 	bmp_iter_and_init, bmp_iter_and_next): New functions.
+ 	* basic-block.h (EXECUTE_IF_SET_IN_REG_SET,
+ 	EXECUTE_IF_AND_COMPL_IN_REG_SET, EXECUTE_IF_AND_IN_REG_SET): Changed to
+ 	use iterator-style EXECUTE_IF_IN_BITMAP macros.
+ 	* bitmap.c (bitmap_print): Ditto.
+ 	* bt-load.c (clear_btr_from_live_range, add_btr_to_live_range,
+ 	btr_def_live_range): Ditto.
+ 	* cfganal.c (compute_dominance_frontiers_1) Ditto.
+ 	* cgraphunit.c (convert_UIDs_in_bitmap, cgraph_characterize_statics):
+ 	Ditto.
+ 	* ddg.c (build_inter_loop_deps): Ditto.
+ 	* df.c (FOR_EACH_BB_IN_BITMAP, df_bb_reg_info_compute, df_refs_update):
+ 	Ditto.
+ 	* except.c (remove_eh_handler): Ditto.
+ 	* flow.c (reg_set_to_hard_reg_set): Ditto.
+ 	* gcse.c (clear_modify_mem_tables): Ditto.
+ 	* global.c (build_insn_chain): Ditto.
+ 	* ifcvt.c (dead_or_predicable): Ditto.
+ 	* loop-invariant.c (get_inv_cost, set_move_mark, move_invariant_reg):
+ 	Ditto.
+ 	* ra-build.c (livethrough_conflicts_bb, conflicts_between_webs): Ditto.
+ 	* ra-rewrite.c (reloads_to_loads, rewrite_program2,
+ 	detect_web_parts_to_rebuild, delete_useless_defs, actual_spill): Ditto.
+ 	* tree-cfg.c (allocate_ssa_names, tree_duplicate_sese_region,
+ 	tree_purge_all_dead_eh_edges): Ditto.
+ 	* tree-into-ssa.c (compute_global_livein, insert_phi_nodes,
+ 	insert_phi_nodes_for, debug_def_blocks_r, invalidate_name_tags,
+ 	rewrite_ssa_into_ssa): Ditto.
+ 	* tree-outof-ssa.c (find_replaceable_exprs): Ditto.
+ 	* tree-sra.c (scan_function, decide_instantiations, scalarize_parms):
+ 	Ditto.
+ 	* tree-ssa-alias.c (init_alias_info, compute_points_to_and_addr_escape,
+ 	compute_flow_sensitive_aliasing, maybe_create_global_var,
+ 	dump_points_to_info_for): Ditto.
+ 	* tree-ssa-dce.c (EXECUTE_IF_CONTROL_DEPENDENT): Ditto.
+ 	* tree-ssa-dse.c (dse_finalize_block): Ditto.
+ 	* tree-ssa-live.c (live_worklist, calculate_live_on_entry,
+ 	calculate_live_on_exit, build_tree_conflict_graph, dump_live_info):
+ 	Ditto.
+ 	* tree-ssa-loop-ivopts.c (find_induction_variables,
+ 	find_interesting_uses, add_old_ivs_candidates, alloc_use_cost_map,
+ 	determine_use_iv_costs, determine_set_costs, find_best_candidate,
+ 	set_cost_up_to, create_new_ivs, remove_unused_ivs, free_loop_data):
+ 	Ditto.
+ 	* tree-ssa-loop-manip.c (add_exit_phis_var, add_exit_phis): Ditto.
+ 	* tree-ssa-operands.c (get_asm_expr_operands, add_call_clobber_ops,
+ 	add_call_read_ops): Ditto.
+ 	* tree-ssa-pre.c (bitmap_print_value_set, insert_aux): Ditto.
+ 
+ 2004-09-26  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	* pa.c (print_operand): Use non-trapping completers for UNLE, UNLT,
+ 	UNGE, UNGT, UNEQ, UNORDERED and ORDERED comparisons.
+ 
+ 2004-09-26  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* builtins.c (expand_builtin_memcmp): Adjust MEM_SIZE to
+ 	reflect size of memory regions being compared.
+ 
+ 2004-09-26  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* builtins.c (get_memory_rtx): Set mem attributes for non-ADDR_EXPR
+ 	expressions.  Always clear MEM_SIZE and alias set.
+ 
+ 2004-09-26  Roger Sayle  <roger@eyesopen.com>
+ 	    Giovanni Bajo  <giovannibajo@gcc.gnu.org>
+ 
+ 	PR middle-end/17112
+ 	* stor-layout.c (compute_record_mode): For records with a single
+ 	field, only use the field's mode if its size matches what we'd
+ 	have choosen for the record ourselves.  This forces the use of
+ 	BLKmode for packed records that don't completely fill a mode.
+ 
+ 2004-09-26  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	PR middle-end/17151
+ 	* combine.c (force_to_mode): Remove dubious early return test that
+ 	inhibits further optimization.
+ 
+ 2004-09-26  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* profile.c: Fix a comment typo.
+ 
+ 2004-09-26  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	PR bootstrap/17591
+ 	* tree-ssa-loop-im.c (for_each_index): Call callback for component_refs
+ 	with varying offset.
+ 	* tree-ssa-loop-ivopts.c (abnormal_ssa_name_p): New function.
+ 	(idx_contains_abnormal_ssa_name_p): Scan step and lower bound for
+ 	ARRAY_REFS.
+ 	(expr_invariant_in_loop_p): New function.
+ 	(idx_find_step): Handle step and lower bound for ARRAY_REFs.  Handle
+ 	component_ref_field_offset for COMPONENT_REFs.  Do not allow
+ 	ALIGN_INDIRECT_REFs and MISALIGNED_INDIRECT_REFs.
+ 	(add_address_candidates): Do not handle ALIGN_INDIRECT_REFs and
+ 	MISALIGNED_INDIRECT_REFs.
+ 	(idx_remove_ssa_names): Handle step and lower bound for ARRAY_REFs.
+ 	(rewrite_address_base): Do not handle ALIGN_INDIRECT_REFs and
+ 	MISALIGNED_INDIRECT_REFs.
+ 
+ 2004-09-26  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	PR c/11459
+ 	* gcc.c (cpp_options, cc1_options): Preserve relative order of
+ 	-std and -ansi options.
+ 
+ 2004-09-26  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* dwarf2out.c (dwarf2out_finish): Set parent to comp_unit_die
+ 	for nested functions whose proper parent has not been output.
+ 
+ 	* profile.c (compute_branch_probabilities): Use REG_BR_PROB notes
+ 	when re-constructing profile previously invalidated by loop.
+ 
+ 2004-09-25  Dale Johannesen  <dalej@apple.com>
+ 
+ 	* tree-gimple.c:  Move GIMPLE definition...
+ 	* doc/tree-ssa.texi:  here.
+ 
+ 2004-09-25  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-vectorizer.c: Fix a comment typo.
+ 
+ 2004-09-25  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* c-typeck.c, defaults.h, dwarf.h, dwarf2out.c, fold-const.c,
+ 	gthr-dce.h, gthr-posix.h, gthr-solaris.h, gthr-win32.h,
+ 	lambda-code.c, lambda-mat.c, libgcc2.c, stmt.c,
+ 	tree-ssa-pre.c, tree-vn.c, tree.h: Fix comment formatting.
+ 
+ 2004-09-25  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-ssa-loop-unswitch.c: Fix a comment typo.
+ 
+ 2004-09-25  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* doc/passes.texi: Fix a typo.
+ 
+ 2004-09-25  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-optimize.c (init_tree_optimization_passes): Add
+ 	pass_record_bounds.
+ 	* tree-pass.h (pass_record_bounds): Declare.
+ 	* tree-ssa-loop.c (tree_ssa_loop_bounds, pass_record_bounds):
+ 	New pass.
+ 
+ 2004-09-25  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	PR tree-optimization/17474
+ 	* tree-ssa-ccp.c (maybe_fold_offset_to_component_ref): Determine
+ 	offset of the field correctly when DECL_FIELD_BIT_OFFSET != 0.
+ 
+ 2004-09-25  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* predict.c (counts_to_freqs): Make global.
+ 	* predict.h (counts_to_freqa): Declare.
+ 	* profile.c (compute_branch_probabilities): Compute frequencies
+ 	* tree-profile.c (do_tree_profiling): Refine conditional on when
+ 	tree profiling pass is needed.
+ 
+ 	* passes.c (rest_of_handle_cfg): Disable const/pure function
+ 	detection when doing tree based profiling.
+ 
+ 	* tree-inline.c (expand_call_inline): Fix incorrectly reversed
+ 	conditional.
+ 
+ 2004-09-25  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.h (struct mips_args): Clarify comments.
+ 	* config/mips/mips.c (struct mips_arg_info): Likewise.
+ 	(mips_arg_info): Don't allow fpr_p to affect the register or
+ 	stack alignment.  Remove o64 silliness.
+ 	(function_arg): Deal with the o32 float,float case specially.
+ 
+ 2004-09-25  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.md (loadx, storex): Define for V2SF.
+ 
+ 2004-09-25  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390-protos.h (s390_back_chain_rtx): Add prototype.
+ 	* config/s390/s390.c (s390_back_chain_rtx): New function.
+ 	* config/s390/s390.md ("allocate_stack"): Use s390_back_chain_rtx.
+ 	Call anti_adjust_stack.
+ 	("restore_stack_block"): Use s390_back_chain_rtx.  Enable pattern
+ 	only if compiling with back chain.
+ 	("save_stack_nonlocal", "restore_stack_nonlocal"): Save/restore
+ 	back chain only if back chain enabled.  Use s390_back_chain_rtx.
+ 
+ 2004-09-25  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* doc/trouble.texi: Remove obsolete information.  Update
+ 	information on how to regenerate fixincluded headers.
+ 
+ 2004-09-25  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	PR c/12951
+ 	* doc/invoke.texi: Document that
+ 	-Wno-error-implicit-function-declaration is not accepted.
+ 
+ 2004-09-24  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/alpha/alpha.h (UNITS_PER_SIMD_WORD): New.
+ 	* config/alpha/alpha.c (alpha_vector_mode_supported_p): Don't depend
+ 	on TARGET_MAX.
+ 	(alpha_expand_mov): Allow unaligned vectors.
+ 	(alpha_expand_unaligned_store): Use CONST0_RTX.
+ 	(TARGET_VECTORIZE_MISALIGNED_MEM_OK): New.
+ 
+ 2004-09-24 Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (dom_opt_finalize_block): Fix violation of strict
+ 	aliasing rules.
+ 	(simplify_cond_and_lookup_avail_expr): Likewise.
+ 
+ 2004-09-24  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	PR c/12802
+ 	* doc/extend.texi (Unnamed Fields): Remove "." from end of long
+ 	title.  Document interaction with -fms-extensions.
+ 	* doc/invoke.texi (-fms-extensions): Refer to Unnamed Fields
+ 	section.
+ 
+ 2004-09-24  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	PR c/12713
+ 	* doc/extend.texi: Document interaction of attribute noreturn and
+ 	longjmp.
+ 
+ 2004-09-24  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR rtl-opt/17503
+ 	* regclass.c (subregs_of_mode): Turn into an htab.  Make static.
+ 	(som_hash, som_eq): New.
+ 	(init_subregs_of_mode, record_subregs_of_mode): New.
+ 	(cannot_change_mode_set_regs): Rewrite for htab implementation.
+ 	(invalid_mode_change_p): Likewise.
+ 	* combine.c (gen_lowpart_for_combine): Use record_subregs_of_mode.
+ 	* flow.c (mark_used_regs): Likewise.
+ 	(life_analysis): Use init_subregs_of_mode.
+ 	* regs.h (subregs_of_mode): Remove.
+ 	* rtl.h (init_subregs_of_mode, record_subregs_of_mode): Declare.
+ 
+ 2004-09-24  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* tree-ssa-phiopt.c (conditional_replacement): Use the correct
+ 	type with the copy of the conditional.
+ 
+ 2004-09-24  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR tree-opt/16954
+ 	* tree-ssa-copyrename.c (copy_rename_partition_coalesce):
+ 	Prevent renaming if the aliasing sets of the type which the
+ 	pointer points to are different.
+ 
+ 2004-09-24  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	PR c/17188
+ 	* c-decl.c (diagnose_mismatched_decls): Check for duplicate
+ 	declarations of enumerators.
+ 	(start_struct): Check TYPE_SIZE rather than TYPE_FIELDS to check
+ 	for redefinition.  Check for nested redefinition.
+ 	(finish_struct): Don't check for nested redefinition.
+ 	(start_enum): Check for nested redefinition.
+ 
+ 2004-09-24  Devang Patel  <dpatel@apple.com>
+ 
+ 	* tree-if-conv.c (tree_if_convert_cond_expr0: Create temp. variable
+ 	only when necesssary.
+ 	(combine_blocks): Combine loop header and exit block.
+ 
+ 2004-09-24  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* hooks.c (hook_tree_tree_bool_null): New.
+ 	* hooks.h (hook_tree_tree_bool_null): Declare it.
+ 	* target-def.c (TARGET_FOLD_BUILTIN): Point to it.
+ 	* targhooks.c (default_fold_builtin): Remove.
+ 	* targhooks.h (default_fold_builtin): Remove.
+ 
+ 2004-09-24  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	PR rtl-optimization/17625
+ 	* loop-doloop.c (doloop_modify): Unshare rtl before emitting it.
+ 
+ 2004-09-24  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR tree-opt/17624
+ 	* tree-ssa-forwprop.c (record_single_argument_cond_exprs):
+ 	Reject if any of the operands occur in an abnormal PHI.
+ 
+ 2004-09-24  Andreas Schwab  <schwab@suse.de>
+ 
+ 	* tree-ssa-dom.c (record_range): Fix violation of strict aliasing
+ 	rules.
+ 
+ 2004-09-24  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* config.gcc (sparc64-*-solaris2*): Include sparc/sol2-gas.h
+ 	if the GNU assembler is used.
+ 	(sparc-*-solaris2*): Likewise.
+ 	* dbxout.c (NO_DBX_BNSYM_ENSYM): Default to zero.
+ 	(dbxout_function_end): Protect N_ENSYM with it.
+ 	(dbxout_begin_prologue): Protect N_BNSYM with it.
+ 	* doc/tm.texi (NO_DBX_BNSYM_ENSYM): Document it.
+ 	* config/sparc/sol2.h (NO_DBX_BNSYM_ENSYM): Define to 1.
+ 	* config/sparc/sol2-gas.h: New file.
+ 
+ 2004-09-23  H.J. Lu  <hongjiu.lu@intel.com>
+ 
+ 	PR bootstrap/17369
+ 	* Makefile.in (@set_gcc_lib_path@): Added.
+ 
+ 	* configure.ac: Include ../config/gcc-lib-path.m4. Use
+ 	TL_AC_GNU_MAKE_GCC_LIB_PATH.
+ 	* configure: Regenerated.
+ 
+ 2004-09-24  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	PR c/6980
+ 	* c-typeck.c (build_c_cast): Improve wording of
+ 	-Wbad-function-cast diagnostic.
+ 
+ 2004-09-23  Hans-Peter Nilsson  <hp@axis.com>
+ 
+ 	PR target/17626
+ 	* config/cris/cris.md (moverside, movemside): Rename variable
+ 	"reg" to "otherop".  To generate canonical RTX, check that otherop
+ 	isn't constant instead of checking that operand 1 is a register.
+ 
+ 2004-09-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* tree-ssa-propagate.c (set_rhs): Fail if EXPR is COMPOUND_EXPR.
+ 
+ 2004-09-23  Diego Novillo  <dnovillo@redhat.com>
+ 	    Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* tree-flow.h (find_new_referenced_vars): Add prototype.
+ 	* tree-sra.c (find_new_referenced_vars_1, find_new_referenced_vars):
+ 	Move to...
+ 	* tree-dfa.c (find_new_referenced_vars_1, find_new_referenced_vars):
+ 	... here.
+ 	(mark_new_vars_to_rename): Walk through all operands.
+ 	* tree-ssa-ccp.c (convert_to_gimple_builtin): New function.
+ 	(execute_fold_all_builtins): Use it.
+ 	(pass_fold_builtins): Add TODO_rename_vars to todo_flags_finish.
+ 
+ 2004-09-23  P.J. Darcy  <darcypj@us.ibm.com>
+ 
+ 	* gthr-tpf.h: New file.
+ 	* config.gcc (s390x-ibm-tpf*): Add thread_file='tpf'.
+ 	* gthr.h: Use gthr-tpf.h on TPF OS.
+ 
+ 2004-09-23 Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-ccp.c (get_default_value): Use SSA_NAME_VALUE rather
+ 	than SSA_NAME_EQUIV and SET_SSA_NAME_EQUIV.
+ 	(substitute_and_fold):  Likewise.
+ 	* tree-ssa-dom.c (tree_ssa_dominator_optimize): Remove everything
+ 	except invariants from SSA_NAME_VALUE.
+ 	(thread_across_edge): Use SSA_NAME_VALUE rather than SSA_NAME_EQUIV
+ 	and SET_SSA_NAME_EQUIV.
+ 	(restore_vars_to_original_value, record_const_or_copy): Likewise.
+ 	(record_equivalences_from_phis, record_const_or_copy_1): Likewise.
+ 	(record_equality, cprop_into_successor_phis): Likewise.
+ 	(record_equivalences_from_stmt, cprop_operand): Likewise.
+ 	(lookup_avail_expr): Likewise.
+ 	* tree-ssa-pre.c (fini_pre): Remove everything except invariants
+ 	from SSA_NAME_VALUE.
+ 	* tree.h (SSA_NAME_EQUIV, SET_SSA_NAME_EQUIV): Kill.
+ 	(struct tree_ssa_name):  Kill EQUIV field.  Remove GGC skip
+ 	annotation from the VALUE_HANDLE field.
+ 
+ 2004-09-21 Fariborz Jahanian <fjahanian@apple.com>
+ 
+ 	PR c++/13989
+ 	PR c++/9844
+ 	* tree.c (reconstruct_complex_type): Remove extra "this".
+ 	* config/rs6000/rs6000.c (rs6000_handle_altivec_attribute):
+ 	Add V4SFmode to case statement.
+ 
+ 2004-09-23  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	PR c/16833
+ 	* doc/extend.texi, doc/invoke.texi: Document interaction of
+ 	-fno-builtin with format checks.  Note that built-in functions
+ 	have effects beyond generating code that avoids calls to those
+ 	functions.
+ 
+ 2004-09-23  Frank Ch. Eigler <fche@redhat.com>
+ 
+ 	PR tree-optimization/17533
+ 	* dominance.c (verify_dominators): Tolerate even more incorrect
+ 	dominance data during error message printing.
+ 	* tree-mudflap.c (mf_build_check_statement_for): Build basic blocks
+ 	and edges more correctly.
+ 
+ 2004-09-23  Dorit Naishlos <dorit@il.ibm.com>
+ 
+ 	* tree.def (ALIGN_INDIRECT_REF, MISALIGNED_INDIRECT_REF):
+ 	New tree-codes.
+ 	* tree.h (REF_ORIGINAL): Consider ALIGN_INDIRECT_REF and
+ 	MISALIGNED_INDIRECT_REF.
+ 	* alias.c (get_alias_set, nonoverlapping_memrefs_p): Likewise.
+ 	* emit-rtl.c (mem_expr_equal_p, set_mem_attributes_minus_bitpos):
+ 	Likewise.
+ 	* expr.c (safe_from_p, expand_expr_real_1, rewrite_address_base)
+ 	(find_interesting_uses_address): Likewise.
+ 	* fold-const.c (non_lvalue, operand_equal_p): Likewise.
+ 	(build_fold_addr_expr_with_type): Likewise.
+ 	* gimplify.c (gimplify_addr_expr, gimplify_expr): Likewise.
+ 	* print-rtl.c (print_mem_expr): Likewise.
+ 	* tree-dump.c (dequeue_and_dump): Likewise.
+ 	* tree-eh.c (tree_could_trap_p): Likewise.
+ 	* tree-gimple.c (is_gimple_addressable, get_base_address): Likewise.
+ 	* tree-pretty-print.c (op_prio, op_symbol, dump_generic_node): Likewise.
+ 	* tree-ssa-alias.c (find_ptr_dereference, ptr_is_dereferenced_by):
+ 	Likewise.
+ 	* tree-ssa-dce.c (mark_stmt_if_obviously_necessary): Likewise.
+ 	* tree-ssa-dom.c (record_equivalences_from_stmt): Likewise.
+ 	* tree-ssa-loop-im.c (for_each_index, is_call_clobbered_ref): Likewise.
+ 	* tree-ssa-loop-ivopts.c (find_interesting_uses_address): Likewise.
+ 	(add_address_candidates, rewrite_address_base): Likewise.
+ 	* tree-ssa-operands.c (get_expr_operands, get_indirect_ref_operands):
+ 	Likewise.
+ 	* tree.c (staticp, build1_stat): Likewise.
+ 
+ 	* tree.def (REALIGN_LOAD_EXPR, REALIGN_STORE_EXPR): New tree-codes.
+ 	* tree-pretty-print.c (dump_generic_node): Consider REALIGN_LOAD_EXPR.
+ 	* tree-ssa-operands.c (get_expr_operands): Likewise.
+ 	* expr.c (expand_expr_real_1): Likewise.
+ 
+ 	* optabs.h (vec_realign_store_optab, vec_realign_load_optab): New
+ 	optabs.
+ 	(OTI_vec_realign_store, OTI_vec_realign_load): New optab_index values
+ 	for the new optabs.
+ 	(expand_ternary_op): New function.
+ 	* genopinit.c (optabs): Handle the new optabs.
+ 	* optabs.c (optab_for_tree_code): Add cases for the new tree-codes.
+ 	(init_optabs): Initialize vec_realign_load_optab.
+ 	(expand_ternary_op): New functions.
+ 
+ 	* target-def.h (TARGET_VECTORIZE): New member for struct gcc_target.
+ 	(TARGET_VECTORIZE_MISALIGNED_MEM_OK): New member for targetm.vectorize.
+ 	(TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD): Likewise.
+ 	(TARGET_VECTORIZE_BUILTIN_MASK_FOR_STORE): Likewise.
+ 	* target.h (struct vectorize): New member for struct gcc_target.
+ 	(misaligned_mem_ok): New member for targetm.vectorize.
+ 	(builtin_mask_for_load): Likewise.
+ 	(builtin_mask_for_store): Likewise.
+ 	* targethooks.c (default_vect_misaligned_mem_ok): New function.
+ 	* targethooks.h (default_vect_misaligned_mem_ok): New function.
+ 
+ 	* config/rs6000/altivec.md (build_vector_mask_for_load): New
+ 	define_expand.
+ 	(vec_realign_load_v4si, vec_realign_load_v4sf, vec_realign_load_v8hi)
+ 	(vec_realign_load_v16qi): New define_insn.
+ 	* config/rs6000/rs6000.h (ALTIVEC_BUILTIN_MASK_FOR_LOAD):
+ 	(ALTIVEC_BUILTIN_MASK_FOR_STORE): New target builtins.
+ 	* config/rs6000/rs6000.c (altivec_builtin_mask_for_load):
+ 	(altivec_builtin_mask_for_store): New variables.
+ 	(rs6000_builtin_mask_for_load): New function. Implements
+ 	TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD.
+ 	(rs6000_builtin_mask_for_store): New function. Implements
+ 	TARGET_VECTORIZE_BUILTIN_MASK_FOR_STORE.
+ 	(rs6000_expand_builtin): Expand the target builtins
+ 	builtin_mask_for_load and builtin_mask_for_store.
+ 	(altivec_init_builtins): Initialize the new target builtins.
+ 	* config/i386/i386.c (ix86_misaligned_mem_ok): New function.
+ 	Implements the target hook TARGET_VECTORIZE_MISALIGNED_MEM_OK.
+ 
+ 	* tree-vectorizer.c (vect_create_data_ref): Renamed to
+ 	vect_create_data_ref_ptr. Returns a pointer instead of an array-ref.
+ 	(vect_create_addr_base_for_vector_ref): Additional argument (offset).
+ 	(vectorizable_store): Call vect_create_data_ref_ptr with additional
+ 	arguments, and create an indirect_ref with its return value data_ref.
+ 	Check aligned_access_p.
+ 	(vectorizable_load): Handle misaligned loads, using software-pipelined
+ 	scheme with REALIGN_LOAD_EXPR and ALIGN_INDIRECT_REF if
+ 	vec_realign_load_optab is supported, or using a scheme without
+ 	software-pipelining with MISALIGNED_INDIRECT_REF if the target hook
+ 	misaligned_mem_ok is supported.
+ 
+ 	(vect_finish_stmt_generation): Typo.
+ 	(vect_enhance_data_refs_alignment): Rename loop_vinfo to loop_info.
+ 	(vect_analyze_data_refs_alignment): Don't fail vectorization in the
+ 	presence of misaligned loads.
+ 	(vect_analyze_data_ref_access): Add check for constant init.
+ 	(vect_get_symbl_and_dr): Remove duplicate line.
+ 	* tree-vectorizer.h (DR_MISALIGNMENT): Add comment.
+ 
+ 2004-09-23  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* builtins.c: Fix a comment typo.
+ 
+ 2004-09-23  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* profile.c (branch_prob): Do not verify flow info in the middle of the
+ 	pass.
+ 
+ 2004-09-23  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* cfgloop.h (update_single_exits_after_duplication): Declare.
+ 	(loopify, split_loop_bb): Declaration changed.
+ 	* cfgloopmanip.c (split_loop_bb): Take void * as an argument instead
+ 	of rtx.
+ 	(loopify): Added redirect_all_edges argument.
+ 	(update_single_exits_after_duplication): Export.
+ 	* loop-unswitch.c (unswitch_loop): Changed due to loopify change.
+ 	* tree-flow.h (tree_duplicate_loop_to_header_edge,
+ 	tree_ssa_loop_version): Declare.
+ 	* tree-ssa-loop-manip.c (copy_phi_node_args, rename_variables,
+ 	set_phi_def_stmts, tree_duplicate_loop_to_header_edge,
+ 	lv_adjust_loop_header_phi, lv_adjust_loop_entry_edge,
+ 	lv_update_pending_stmts, tree_ssa_loop_version): New functions.
+ 
+ 	* tree-ssa-loop-unswitch.c: New file.
+ 	* Makefile.in (tree-ssa-loop-unswitch.o): Add.
+ 	* timevar.def (TV_TREE_LOOP_UNSWITCH): New timevar.
+ 	* tree-flow.h (tree_ssa_unswitch_loops): Declare.
+ 	* tree-optimize.c (init_tree_optimization_passes): Add pass_unswitch.
+ 	* tree-pass.h (pass_unswitch): Declare.
+ 	* tree-ssa-loop.c (tree_ssa_loop_unswitch,
+ 	gate_tree_ssa_loop_unswitch, pass_unswitch): New pass.
+ 	* doc/passes.texi: Documen tree level loop unswitching.
+ 
+ 2004-09-23  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* cfgexpand.c, config/s390/tpf-eh.c: Fix comment typos.
+ 
+ 2004-09-22  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* builtins.c (simplify_builtin_va_start): Remove.
+ 	(simplify_builtin): Ditto.
+ 	(fold_builtin_strchr): Ditto.
+ 	(simplify_builtin_*): Rename remainders to fold_builtin_*.
+ 	(expand_builtin): Fix up for above changes.
+ 	(fold_builtin_1): Add new folders. Change for above.
+ 	(expand_builtin_va_start): Call fold_builtin_next_arg.
+ 	* gimplify.c (gimplify_call_expr): Fix calls to simplify_builtin.
+ 	* tree.h: Remove prototype for simplify_builtin.
+ 
+ 2004-09-23  Jan Hubicka  <jh@suse.cz>
+ 
+ 	PR debug/17389
+ 	* dwarf2out.c (dwarf2out_finish): Deal with nested functions
+ 	of fully inlined functions.
+ 	* tree-inline.c (inline_forbidden_p_1): Nested functions can be
+ 	inlined.
+ 
+ 	* cfgexpand.c (add_reg_br_prob_note): New function.
+ 	(expand_gimple_cond_expr): Use it.
+ 	(tree_expand_cfg): No longer kill the profile.
+ 	* cfgrt.c (rtl_verify_flow_info_1): Check profile consistency
+ 	only if it is present.
+ 	* passes.c (rest_of_handle_loop_optimize): Kill the profile.
+ 	* predict.c (combine_predictions_for_insn): Set the probabilities
+ 	based on REG_BR_PROB note if present.
+ 	* predict.c (branch_prob): Profile is read only with
+ 	flag_branch_probabilities.
+ 
+ 2004-09-22  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* aclocal.m4: Add in gettext's m4 includes.
+ 	(AC_ICONV, AC_LCMESSAGES, GCC_PATH_PROG): Remove.
+ 	* configure.ac: Add in check for iconv.h
+ 	* configure: Regenerate.
+ 
+ 2004-09-22  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* aclocal.m4: Update for rename of gettext-sister.m4.
+ 
+ 2004-09-22  Daniel Berlin <dberlin@dberlin.org>
+ 
+ 	Fix PR tree-optimization/17587
+ 	* tree-ssa-pre.c (fini_pre): Commit edge inserts here.
+ 	(insert_aux): Instead of here.
+ 
+ 2004-09-22  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	PR tree-optimization/16721
+ 	* tree-dfa.c (dump_variable): Show TREE_THIS_VOLATILE.
+ 	* tree-ssa-alias.c (create_memory_tag): Move setting of
+ 	TREE_THIS_VOLATILE ...
+ 	(get_tmt_for): ... here.
+ 
+ 2004-09-22  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* config/sparc/sparc.md (cmove splitter): Fix formatting.
+ 	(conditional_trap expander): Reject inappropriate CCmodes.
+ 	(conditional trap insn): Use V9 syntax if possible.
+ 
+ 2004-09-22  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	PR c/16566
+ 	* c-typeck.c (build_component_ref): Don't special-case
+ 	COMPOUND_EXPR.
+ 
+ 2004-09-22  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* dominance.c (verify_dominators): Don't SEGV if recount_dominator
+ 	returns NULL.
+ 
+ 2004-09-22  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* doc/c-tree.texi (TRUTH_NOT_EXPR, TRUTH_ANDIF_EXPR,
+ 	TRUTH_ORIF_EXPR, TRUTH_AND_EXPR, TRUTH_OR_EXPR,
+ 	TRUTH_XOR_EXPR): Mention the restriction on types.
+ 
+ 2004-09-22  Matt Austern  <austern@apple.com>
+ 
+ 	* config/darwin.c (darwin_make_decl_one_only):
+ 	Allow coalesced symbol to appear in static archive's table of contents
+ 
+ 2004-09-22  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	PR tree-optimization/17512
+ 	* convert.c (convert_to_integer): Don't handle TRUTH_*_EXPR as
+ 	special cases.
+ 
+ 2004-09-22  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* dbxout.c (get_lang_number): Do not define if
+ 	DBX_OUTPUT_MAIN_SOURCE_DIRECTORY is defined.
+ 
+ 2004-09-22  Ralf Corsepius  <corsepiu@faw.uni-ulm.de>
+ 
+ 	PR target/15583
+ 	* config/rs6000/rtems.h (TARGET_OS_CPP_BUILTINS): Add
+ 	builtin_define ("__USE_INIT_FINI__").
+ 
+ 2004-09-22  P.J. Darcy  <darcypj@us.ibm.com>
+ 
+ 	* config/s390/s390-protos.h (s390_emit_tpf_eh_return): Add prototype.
+ 	* config/s390/s390.c (s390_emit_tpf_eh_return): New function.
+ 	* config/s390/s390.h (TARGET_TPF): New macro.
+ 	* config/s390/s390.md ("eh_return"): New expander.
+ 	* config/s390/t-tpf (LIB2ADDEH): Use unwind-dw2-fde.c rather than
+ 	unwind-dw2-fde-glibc.c.  Add config/s390/tpf-eh.c.
+ 	(LIB2ADDEHDEP): Remove unwind-dw2-fde.c.
+ 	* config/s390/tpf.h (TARGET_TPF): Define to 1.
+ 	(STACK_POINTER_OFFSET): Increase to 448.
+ 	(TARGET_DEFAULT): Set -mtpf-trace on as default.
+ 	(TPF_LOC_DIFF_OFFSET): New macro.
+ 	(ASM_PREFERRED_EH_DATA_FORMAT): Redefine to always use absolute
+ 	encoding.
+ 	(__isPATrange): Add prototype.
+ 	(MD_FALLBACK_FRAME_STATE_FOR): Define.
+ 	* config/s390/tpf-eh.c: New file.
+ 
+ 2004-09-22  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* fold-const.c (fold): Avoid non INTEGER_TYPEs when widening
+ 	operands in an integer comparison.
+ 	* tree-cfg.c (find_taken_edge): Call fold() to determine
+ 	whether the predicate is known.
+ 
+ 2004-09-22  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* aclocal.m4: Import AM_PROG_CC_C_O and AM_AUX_DIR_EXPAND.
+ 	* configure.ac: Call AM_PROG_CC_C_O instead of AC_PROG_CC_C_O.
+ 	Create build and doc directories along with the language directories.
+ 	Don't create doc directory separately.
+ 	* configure: Regenerate.
+ 	* Makefile.in: Create all object and executables files built
+ 	with the build compiler in a build/ directory.
+ 	(genobjnames): Add missing build objects.
+ 	(STAGESTUFF): Don't stage the gen* programs.
+ 	(ggc-none.o): Define dependencies for the target compiler.
+ 	(build-print-rtl.o): Rename to build/print-rtl.o.
+ 	(build-errors.o): Rename to build/errors.o.
+ 	(build-varray.o): Rename to build/varray.o.
+ 	(maintainerclean): Delete the contents of the build directory.
+ 	($(genobjs): %.o): Explicitly use -o.
+ 	(build/insn-conditions.o): Delete specfic rule to use generic rule.
+ 	(build/gengtype-lex.o): Likewise.
+ 	(build/gengtype-yacc.o): Likewise.
+ 	(build/gcov-iov.o): Likewise.
+ 
+ 2004-09-22  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* vec.h (VEC_space): Return true if there _is_ space.
+ 	(VEC_reserve): Adjust.
+ 
+ 2004-09-22  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.c (mips_function_value): For o32, o64, n32 and n64,
+ 	use FPRs for scalar, complex and vector types only.
+ 
+ 2004-09-21 Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (opt_stats): Move so that it lives just after
+ 	the opt_stats_d structure.
+ 	(vrp_data): Change from a varray into a hash table.
+ 	(vrp_hash_elt): New structure for elements in the vrp hash table.
+ 	(vrp_hash, vrp_eq):New functions for hashing and testing equality
+ 	in the vrp hash table.
+ 	(tree_ssa_dominator_optimize): Initialize VRP_DATA.  Reorganize
+ 	initialization slightly to make it easier to read.  No longer need
+ 	to grow/clear the varray.  Instead empty and delete the hash table.
+ 	(dom_opt_finalize_block): Update due to change of VRP_DATA from
+ 	a varray to a hash table.
+ 	(simplify_cond_and_loop_avail_expr, record_range): Similarly.
+ 
+ 	* tree-ssa-ccp.c (get_default_value): If we have a constant
+ 	value recorded for an SSA_NAME, then use that constant as
+ 	the initial lattice value.
+ 	(substitute_and_fold): Transfer equivalences discovered into
+ 	SSA_NAME_EQUIV.
+ 
+ 	* tree.h (SSA_NAME_EQUIV): Add comments.
+ 	(SET_SSA_NAME_EQUIV): Similarly.
+ 
+ 2004-09-21  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* config/rs6000/linux64.h (PROCESSOR_DEFAULT64): Default to POWER4.
+ 
+ 	* config/rs6000/rs6000.c (rs6000_adjust_cost): dep_insn is used.
+ 
+ 2004-09-21  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* c-decl.c (implicityl_declare): Call maybe_apply_renaming_pragma.
+ 	(finish_decl): Likewise.
+ 
+ 2004-09-21  Devang Patel  <dpatel@apple.com>
+ 
+ 	* tree.def (VEC_COND_EXPR): New tree node.
+ 	* tree-ssa-operands.c (get_expr_operands): Handle VEC_COND_EXPR.
+ 
+ 2004-09-21  Stan Shebs  <shebs@apple.com>
+ 
+ 	* config/rs6000/darwin-tramp.asm: Add __ppc64__ case.
+ 	* config/rs6000/darwin-world.asm: Likewise.
+ 
+ 2004-09-21  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa.c (verify_def): Use print_generic_stmt,
+ 	not debug_generic_stmt.
+ 	(verify_use): Ditto.
+ 	(verify_phi_args): Ditto.
+ 	(verify_ssa): Ditto.
+ 
+ 2004-09-21  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* varasm.c (default_assemble_integer): Return false for values wider
+ 	than the target word size.  Works around GAS bug.
+ 
+ 2004-09-21  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* reg-notes.def (REG_DEP_TRUE): New entry, place first so it
+ 	gets value 0.
+ 	* print-rtl.c (print_rtx): Print the name of a REG_NOTE even
+ 	if it has value 0.
+ 
+ 2004-09-21  Daniel Berlin <dberlin@dberlin.org>
+ 
+ 	* c-typeck.c (build_function_call): Give name of object
+ 	we are attempting to call in error message.
+ 	* c-objc-common.c (c_tree_printer): Call pp_expression,
+ 	not return false, for 'E' case.
+ 
+ 2004-09-21  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	PR rtl-optimization/17482
+ 	* postreload-gcse.c (reg_avail_info, oprs_unchanged_p,
+ 	load_killed_in_block_p): Clarify comments.
+ 	(record_last_reg_set_info): Make static inline.
+ 	(mark_call, mark_set, mark_clobber, mark_oprs_set): Remove.
+ 	(record_opr_changes): New function to replace the above.
+ 	(compute_hash_table): Clarify comments.  Use record_opr_changes.
+ 	(reg_set_between_after_reload_p): Clean up.
+ 	(reg_used_between_after_reload_p): Likewise.
+ 	(eliminate_partially_redundant_load): Clarify comments.
+ 
+ 2004-09-21  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR rtl-optimization/17266
+ 	* regmove.c (optimize_reg_copy_3): Make a new SUBREG for each insn.
+ 
+ 2004-09-21  Uros Bizjak  <uros@kss-loka.si>
+ 
+ 	PR rtl-optimization/14851
+ 	* rtlanal.c (commutative_operand_precedence): Calculate
+ 	precedence of stripped constant.
+ 
+ 2004-09-20 Jeff Law  <law@redhat.com>
+ 	   Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-ssanames.c (make_ssa_name): No longer need to clear, then
+ 	initialize key elements here.
+ 	(release_ssa_name): Zero the released SSA_NAME here.
+ 	* tree.h (SSA_NAME_EQUIV, SET_SSA_NAME_EQUIV): New macros.
+ 	(struct tree_ssa_name): Add new "equiv" field.
+ 	* tree-ssa-dom.c (const_and_copies): Kill the global varray.
+ 	(tree_ssa_dominator_optimize): No longer allocate, resize or
+ 	clear CONST_AND_COPIES.
+ 	(get_value_for, set_value_for): Kill.
+ 	(thread_across_edge): Get/set the equivalency using
+ 	SSA_NAME_EQUIV and SET_SSA_NAME_EQUIV.
+ 	(restore_vars_to_original_value): Likewise.
+ 	(record_equivalences_from_phis): Likewise.
+ 	(record_dominating_conditions): Likewise.
+ 	(record_const_or_copy, record_equality): Likewise.
+ 	(lookup_avail_expr): Likewise.
+ 	(record_equivalences_from_stmt, cprop_operand): Likewise.
+ 	(cprop_into_successor_phis): No longer need to pass around
+ 	CONST_AND_COPIES.  Callers updated. Get equivalences via
+ 	SSA_NAME_EQUIV.
+ 	(cprop_into_phis): Likewise.
+ 
+ 2004-09-20  Matt Austern <austern@apple.com>
+ 	    Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* c-common.c (fix_string_type): Build the unqualified array
+ 	type unconditionally, then use c_build_qualified_type to get
+ 	the proper const-qualified variant, and set its
+ 	TYPE_MAIN_VARIANT to refer to the unqualified type.
+ 	* c-lex.c (c_lex_return_raw_string): New global.
+ 	(c_lex_with_flags): Honor it.
+ 	* c-pragma.h: Declare it.
+ 
+ 2004-09-20  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* Makefile.in: Fix flags.h dependencies to be $(FLAGS_H).
+ 
+ 2004-09-21  Jan Hubicka  <jh@suse.cz>
+ 
+ 	PR middle-end/17126
+ 	* tree-optimize.c (update_inlined_to_pointers): Fix the recursion.
+ 	(tree_rest_of_compilation): Cleanup.
+ 
+ 2004-09-20  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390.c (s390_select_rtx_section): Remove.
+ 	(TARGET_ASM_SELECT_RTX_SECTION): Do not redefine.
+ 
+ 2004-09-20  Kaz Kojima  <kkojima@gcc.gnu.org>
+ 
+ 	* config/sh/sh.c (sh_expand_prologue): Add a REG_FRAME_RELATED_EXPR
+ 	note to pretend a direct save from the original register when an
+ 	intermediate register is used for the save.
+ 
+ 2004-09-20  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+ 
+ 	* tsystem.h (alloca): Provide a default definition.
+ 
+ 	Revert:
+ 	2001-08-31  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+ 	    * unwind-dw2.c: Call __builtin_alloca, not alloca.
+ 
+ 2004-09-20  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR tree-opt/17558
+ 	* tree-ssa-copy.c (may_propagate_copy): Only allow if the
+ 	aliasing sets are the same rather than just conflicting.
+ 
+ 2004-09-20  Jan Hubicka  <jh@suse.cz>
+ 
+ 	PR middle-end/16460
+ 
+ 	* cgraph.c (cgraph_unnest_node): New function.
+ 	(c_finalize): Rename to ....
+ 	(c_warn_unused_result_recursivly): ... this one; do only the warning
+ 	(finish_function): Finalize the toplevel function; do not lower nested tree.
+ 	* cgraph.h (cgraph_unnest_node): Declare.
+ 	* cgraphunit.c (decide_is_function_needed): Do not use cgraph
+ 	nestedness datastructure.
+ 	* cse.c (cse_insn): Do not cprop nonlocal LABEL_REFs.
+ 	* reload1.c (set_label_offsets): Fix call of set_label_offsets.
+ 	* tree-nested.c (finlize_nesting_tree_1):  Use un-nesting code.
+ 
+ 2004-09-20  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/alpha/alpha.c (some_small_symbolic_operand_int): Rename
+ 	from some_small_symbolic_operand_1; export.
+ 	(some_small_symbolic_operand): Remove.
+ 	* config/alpha/alpha.md (some_small_symbolic_operand splitter): Remove
+ 	extra C check.
+ 	* config/alpha/predicates.md (some_small_symbolic_operand): New.
+ 
+ 2004-09-20  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* predict.c (return_prediction): New function.
+ 	(apply_return_prediction): Likewise.
+ 	(tree_bb_level_predictions): Likewise.
+ 	(tree_estimate_probability): Add noreturn exit edges; call
+ 	bb_level_predictions; fix logic of return heuristics.
+ 	(predict_paths_leading_to):  Rescuesce from old CVS version of
+ 	process_note_prediction function.
+ 	* predict.def (PRED_TREE_EARLY_RETURN): New predictor.
+ 
+ 2004-09-20  Andreas Krebbel  <krebbel1@de.ibm.com>
+ 
+ 	* config/s390/s390.c (s390_frame_info): Added alignment statement for
+ 	floating point register area on stack.
+ 
+ 2004-09-20  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* predict.c (expr_expected_value): Use *_CLASS_P macros.
+ 
+ 2004-09-20  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (compute_antic_aux): Use malloc'd worklist, to avoid
+ 	generating useless garbage.
+ 
+ 2004-09-20  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* builtins.c (fold_builtin): Call the new omonymous
+ 	target hook for machine-dependent built-ins.
+ 	* target-def.h (TARGET_FOLD_BUILTIN): New.
+ 	* target.h (struct gcc_target): Add the fold_builtin hook.
+ 	* targhooks.c (default_fold_builtin): New.
+ 	* targhooks.h (default_fold_builtin): Declare it.
+ 
+ 2004-09-20  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* cfg.c, tree-ssa-threadupdate.c, tree-vectorizer.c: Fix
+ 	comment typos.
+ 
+ 2004-09-20  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	PR target/17565
+ 	* config/mips/mips.md (define_asm_attributes): Set can_delay to no.
+ 
+ 2004-09-20  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* predict.c (estimate_probability): Remove unnecesary code.
+ 
+ 2004-09-19  Ira Rosen  <irar@il.ibm.com>
+ 
+ 	* tree-vectorizer.h (stmt_vec_info): Add vect_dr_base field.
+ 	(STMT_VINFO_VECT_DR_BASE): Declare.
+ 	(VECT_SMODULO): Declare.
+ 	* tree-vectorizer.c (vect_compute_array_ref_alignment): New function.
+ 	(vect_compute_array_base_alignment): New function.
+ 	(vect_analyze_data_ref_access): Check array indices. Remove one
+ 	dimensional arrays restriction.
+ 	(vect_get_ptr_offset): New function.
+ 	(vect_get_symbl_and_dr): New function.
+ 	(vect_get_base_and_bit_offset): Support additional data refs. Renamed
+ 	(former name vect_get_base_decl_and_bit_offset).
+ 	(vect_create_index_for_array_ref): Removed.
+ 	(vect_create_index_for_vector_ref): New function.
+ 	(vect_create_addr_base_for_vector_ref): New function.
+ 	(vect_create_data_ref): Handle additional data refs. Call
+ 	vect_create_index_for_vector_ref and vect_create_addr_base_for_vector_ref.
+ 	(vect_compute_data_ref_alignment): Support the changes. Call
+ 	vect_get_base_and_bit_offset.
+ 	(vect_analyze_data_refs): Call vect_get_symbl_and_dr. Support additional
+ 	data refs. Store vect_dr_base.
+ 	(vect_analyze_data_ref_accesses): Support nonconstant init.
+ 	(new_stmt_vec_info): Initialize vect_dr_base field.
+ 	(vect_is_simple_iv_evolution): Call initial_condition_in_loop_num.
+ 	(get_vectype_for_scalar_type): Check for BLKmode.
+ 	* tree-chrec.h (initial_condition_in_loop_num): Declare.
+ 	* tree-chrec.c (initial_condition_in_loop_num): New function.
+ 	(chrec_component_in_loop_num): New function.
+ 	(evolution_part_in_loop_num): Call chrec_component_in_loop_num.
+ 	* tree-data-ref.c (analyze_array_indexes): Change parameter (access_fns)
+ 	to be pointer to varray_type.
+ 
+ 2004-09-19  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* basic-block.h (update_bb_profile_after_threading): Declare.
+ 	* cfg.c (update_bb_profile_after_threading): Break out from ...
+ 	* cfgcleanup.c (try_forward_edges): ... here; use it.
+ 	* tree-ssa-dom.c (thread_across_edge): Use it.
+ 	* tree-ssa-threadupdate.c (create_block_for_threading): Zero out
+ 	profile of the new BB.
+ 
+ 2004-09-19  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (insert_into_set): Don't put
+ 	is_gimple_min_invariant values into the set.
+ 
+ 2004-09-19  Andreas Jaeger  <aj@suse.de>
+ 
+ 	* tree-ssa-dom.c (restore_nonzero_vars_to_original_value): Fix
+ 	prototype.
+ 
+ 2004-09-18  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/cris/cris.h: Preserve the original spelling in a
+ 	quote.
+ 
+ 2004-09-18 Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (nonzero_vars_stack, vrp_variables_stack): New
+ 	global varrays to replace the block local varrays.
+ 	(struct dom_walk_block_data): Remove, no longer used.
+ 	(get_eq_expr_value): No longer need to pass around pointers to local
+ 	varrays.  Callers updated.  Unused markers added to unused parameters.
+ 	(record_range, record_equivalences_from_stmt): Likewise.
+ 	(record_equivalences_from_incoming_edge): Likewise.
+ 	(record_var_is_nonzero): Likewise.  Update now that we have a
+ 	single global varray of SSA_NAMEs that need restoring.
+ 	(dom_opt_initialize_block_local_data): Kill, no longer used.
+ 	(tree_ssa_dominator_optimize): Initialize new global varrays.
+ 	Update callbacks in dominator walker structure.
+ 	(dom_opt_initialize_block): Add markers to NONZERO_VAR_STACK and
+ 	VRP_VARIABLES_STACK.
+ 	(restore_nonzero_vars_to_original_value): Update now that we have
+ 	a single global varray of SSA_NAMEs that need restoring.
+ 	(dom_opt_finalize_block): Similarly for VRP_VARIABLES_STACK.
+ 	Remove unused variables.
+ 	(optimize_stmt): Remove unused variable.
+ 
+ 2004-09-18  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-cfg.c (thread_jumps):  Fix updating of the profile.
+ 
+ 	* tree-optimize.c (tree_rest_of_compilation): Kill forgotten
+ 	verify_cgraph call.
+ 
+ 2004-09-18  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* alias.c, crtstuff.c, dbxout.c, domwalk.c, domwalk.h, gcc.c,
+ 	gcse.c, global.c, lambda-code.c, loop.c, mips-tdump.c,
+ 	optabs.h, predict.c, reg-stack.c, regclass.c, sched-rgn.c,
+ 	tree-optimize.c, tree-ssa-dom.c, tree-ssa-forwprop.c,
+ 	tree-ssa-operands.c, tree-ssa-phiopt.c,
+ 	tree-ssa-threadupdate.c: Fix comment typos.
+ 
+ 2004-09-18  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/darwin-c.c, config/arc/arc.c, config/arc/arc.md,
+ 	config/arm/README-interworking, config/arm/arm-cores.def,
+ 	config/arm/arm.c, config/arm/arm.h, config/arm/pe.c,
+ 	config/arm/vfp.md, config/c4x/c4x.c, config/c4x/c4x.h,
+ 	config/cris/cris.c, config/cris/cris.h, config/fr30/fr30.c,
+ 	config/fr30/fr30.h, config/fr30/fr30.md, config/frv/frv.c,
+ 	config/frv/frv.md, config/i386/winnt.c,
+ 	config/ia64/unwind-ia64.c, config/iq2000/iq2000.c,
+ 	config/iq2000/iq2000.h, config/m68hc11/m68hc11.c,
+ 	config/m68hc11/m68hc11.md, config/m68k/m68k.c,
+ 	config/mcore/mcore.c, config/mips/mips.h,
+ 	config/mn10300/mn10300.md, config/pa/pa.c,
+ 	config/pa/pa64-regs.h, config/pdp11/pdp11.c,
+ 	config/rs6000/rs6000.c, config/sh/symbian.c,
+ 	config/sparc/sparc.h: Fix comment typos.  Follow spelling
+ 	conventions.
+ 
+ 2004-09-18  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	PR c/17424
+ 	* c-typeck.c (c_expr_sizeof_expr): Check for error_mark_node.
+ 
+ 2004-09-18  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-alias.c (setup_pointers_and_addressables): Don't
+ 	remove TREE_ADDRESSABLE from RESULT_DECL.
+ 
+ 2004-09-18  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-alias.c (dump_alias_info): Ignore NULL SSA_NAMEs.
+ 
+ 2004-09-18  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-into-ssa.c (rewrite_ssa_into_ssa):  Expect ssa_name to return
+ 	NULL.
+ 	* tree-ssa-alias.c (init_alias_info): Likewise.
+ 	* tree-ssa.c (verify_flow_sensitive_alias_info): Likewise.
+ 	(verify_ssa): Likewise.
+ 	* tree-ssanames.c (make_ssa_name): Clear out ssa_names arrays.
+ 
+ 2004-09-18  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* i386.c (legitimize_pic_address): Fix splitting of PLUS with
+ 	huge offset.
+ 
+ 2004-09-18  Kaz Kojima  <kkojima@gcc.gnu.org>
+ 
+ 	* config/sh/linux.h (ASM_PREFERRED_EH_DATA_FORMAT): Remove.
+ 	* config/sh/sh.h (ASM_PREFERRED_EH_DATA_FORMAT): Use
+ 	DW_EH_PE_sdata* for data.
+ 	(ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX): Likewise.
+ 
+ 2004-09-17  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* tree-inline.c (copy_tree_r): Don't duplicate constants, they're
+ 	shared anyway.
+ 
+ 	PR pch/13361
+ 	* c-typeck.c (constructor_asmspec): Delete.
+ 	(struct initializer_stack): Delete field 'asmspec'.
+ 	(start_init): Delete saving of asmspec.
+ 	(finish_init): Don't update constructor_asmspec.
+ 	* dwarf2out.c (rtl_for_decl_location): Duplicate string from tree.
+ 	* stmt.c (expand_asm): Duplicate strings from tree.
+ 	(expand_asm_operands): Likewise.
+ 	* tree.c (tree_size): Update computation of size of STRING_CST.
+ 	(make_node): Don't make STRING_CST nodes.
+ 	(build_string): Allocate string with tree node.
+ 	(tree_code_size): Clean up assertions, don't allow requests
+ 	for "the size of a STRING_CST".
+ 	* tree.def (STRING_CST): Update comment.
+ 	* tree.h (TREE_STRING_POINTER): Adjust for change to STRING_CST.
+ 	(tree_string): Place contents of string in tree node.
+ 	* config/sh/sh.c (sh_handle_sp_switch_attribute): Duplicate string
+ 	from tree.
+ 
+ 2004-09-17  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* Makefile.in (c-parse.o): Depend on $(C_PRAGMA_H).
+ 	* objc/Make-lang.in (objc/objc-parse.o): Likewise.
+ 
+ 2004-09-17  Jones Desougi  <jones@ingate.com>
+ 
+ 	* configure.ac: Replace AC_COMPILE_CHECK_SIZEOF with AC_CHECK_SIZEOF.
+ 	* configure, config.in: Regenerate.
+ 
+ 2004-09-17  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* tree.c, tree.h (tree_class_strings): Make array const.
+ 	Reindent per coding convention.  Move asterisk to proper place
+ 	per coding convention.
+ 
+ 2004-09-18  Andreas Schwab  <schwab@suse.de>
+ 
+ 	* Makefile.in (gimple-low.o): Depend on $(EXPR_H).
+ 	(tree-vectorizer.o): Likewise.
+ 	(targhooks.o): Likewise.
+ 
+ 2004-09-17  Jeffrey D. Oldham  <oldham@codesourcery.com>
+ 	    Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* alias.c (find_base_decl): Remove unreachable case '3' block.
+ 	* expr.c (safe_from_p): Abort if passed a type.
+ 	* tree-gimple.c (recalculate_side_effects): Abort if passed
+ 	anything other than an expression.
+ 	* tree-ssa-pre.c (phi_translate): Return expr immediately if
+ 	is_gimple_min_invariant is true for it.  Reorder cases for clarity.
+ 	Abort on un-handled tree classes.
+ 	(valid_in_set): Likewise.
+ 	* tree.c (tree_code_class_strings): New static data.
+ 
+ 	* tree.h (enum tree_code_class): New.
+ 	(tree_code_class_strings): Declare.
+ 	(TREE_CODE_CLASS_STRING, EXCEPTIONAL_CLASS_P, CONSTANT_CLASS_P)
+ 	(REFERENCE_CLASS_P, COMPARISON_CLASS_P, UNARY_CLASS_P, BINARY_CLASS_P)
+ 	(STATEMENT_CLASS_P, EXPRESSION_CLASS_P, IS_TYPE_OR_DECL_P): New macros.
+ 	(TYPE_P, DECL_P, IS_NON_TYPE_CODE_CLASS, IS_EXPR_CODE_CLASS)
+ 	(checking macros, EXPR_LOCATION, SET_EXPR_LOCATION, EXPR_LOCUS): Update.
+ 
+ 	* tree.def, c-common.def, objc/objc-tree.def: Use
+ 	tree_code_class enumeration constants instead of code letters.
+ 
+ 	* alias.c, builtins.c, c-common.c, c-format.c, c-lang.c, c-pragma.c
+ 	* c-typeck.c, cgraphunit.c, convert.c, dbxout.c, dwarf2out.c
+ 	* emit-rtl.c expr.c, fold-const.c, gimplify.c, lambda-code.c
+ 	* langhooks.c, langhooks.h, predict.c, print-tree.c, reload1.c, stmt.c
+ 	* tree-browser.c, tree-cfg.c, tree-chrec.c, tree-complex.c, tree-dfa.c
+ 	* tree-dump.c, tree-eh.c, tree-gimple.c, tree-inline.c, tree-nested.c
+ 	* tree-outof-ssa.c, tree-pretty-print.c, tree-sra.c, tree-ssa-ccp.c
+ 	* tree-ssa-dce.c, tree-ssa-dom.c, tree-ssa-forwprop.c, tree-ssa-live.c
+ 	* tree-ssa-loop-im.c, tree-ssa-loop-ivopts.c, tree-ssa-operands.c
+ 	* tree-ssa-phiopt.c, tree-ssa-pre.c, tree-ssa-propagate.c
+ 	* tree-ssa.c, tree-ssanames.c, tree-tailcall.c, tree.c, varasm.c
+ 	* config/sol2-c.c, config/arm/arm.c, config/i386/winnt.c
+ 	* config/pa/pa.c, config/pa/pa.h, config/sh/sh.c, objc/objc-lang.c
+ 	Update to match.
+ 
+ 	* LANGUAGES: Add note about change.
+ 
+ 2004-09-17  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	PR tree-optimization/17319
+ 	* tree-ssa-alias.c (compute_points_to_and_addr_escape): Also
+ 	examine pointers on the LHS of an assignment.
+ 	(collect_points_to_info_r): Handle RETURN_EXPR.
+ 
+ 2004-09-17 Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (const_and_copies_stack): New.
+ 	(dom_walk_block_data): Remove const_and_copies field.
+ 	(record_const_or_copy): No longer need to pass in varray_type *.
+ 	Use CONST_AND_COPIES_STACK rather than passed in block local stack.
+ 	Callers updated.
+ 	(record_equality): Similarly.
+ 	(restore_vars_to_original_value): Similarly.  Revamp to use new
+ 	single global stack rather than per-block stacks.
+ 	(tree_ssa_dominator_optimize): Initialize the CONST_AND_COPIES_STACK.
+ 	(thread_across_edge): Remove now unused parameters.
+ 	(dom_opt_initialize_block_local_data): No longer test the block
+ 	local CONST_AND_COPIES.
+ 	(dom_opt_initialize_block): Push a marker on CONST_AND_COPIES_STACK.
+ 
+ 2004-09-17  Jan Hubicka  <jh@suse.cz>
+ 
+ 	PR tree-optimization/17509
+ 	* tree-optimize.c (update_inlined_to_pointers): New function.
+ 	(tree_rest_of_compilation): Use it.
+ 
+ 2004-09-17  Devang Patel  <dpatel@apple.com>
+ 
+ 	* dbxout.c (get_lang_number): New.
+ 	(dbxout_init): Include lang number in N_SO  stab.
+ 	* dbxout.h (N_SO_AS, N_SO_C, N_SO_ANSI_C, N_SO_CC, N_SO_FORTRAN,
+ 	N_SO_PASCAL, N_SO_FORTRAN90, N_SO_OBJC, N_SO_OBJCPLUS): New #define.
+ 
+ 2004-09-17  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	PR tree-optimization/17273
+ 	* tree-ssa.c (replace_immediate_uses): Call fold_stmt if the
+ 	replacement is a constant.
+ 
+ 2004-09-17  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-tree.h (enum c_typespec_keyword): New.
+ 	(struct c_declspecs): Adjust description of "type".  Remove
+ 	specbits, explicit_int_p and explicit_char_p.  Rename
+ 	typedef_signed_p to explicit_signed_p.  Add default_int_p, long_p,
+ 	short_p, signed_p, unsigned_p and complex_p.
+ 	(finish_declspecs): New.
+ 	* c-parse.in (datadef, datadecl, setspecs, decl, component_decl,
+ 	typename): Call finish_declspecs.
+ 	* c-decl.c (finish_declspecs): New.
+ 	(declspecs_add_type): Check for combinations which cannot occur in
+ 	valid specifier lists.  Update comments.
+ 	(shadow_tag_warned): Remove checks done in finish_declspecs.
+ 	Don't report useless type name if type defaulted to int.
+ 	(grokdeclarator): Remove checks and actions done in
+ 	finish_declspecs.  Don't allow for type being NULL.  Update for
+ 	datastructures changes.  Initialize decl_attr.
+ 	(build_null_declspecs, quals_from_declspecs): Update for
+ 	datastructures changes.
+ 
+ 2004-09-17  Sylvain Pion  <Sylvain.Pion@sophia.inria.fr>
+ 
+ 	* doc/extend.texi: Fix duplicated word.
+ 
+ 2004-09-17  Toon Moene  <toon@moene.indiv.nluug.nl>
+ 
+ 	* doc/invoke.texi: Remove stray explanation on
+ 	-freduce-all-givs and -fmove-all-movables.
+ 
+ 2004-09-17  James Morrison  <phython@gcc.gnu.org>
+ 
+ 	* doc/cfg.texi: Use @smallexample.
+ 	* doc/md.texi: Likewise.
+ 	* doc/tree-ssa.texi: Likewise.
+ 	* doc/extend.texi: Likewise.  Use @r{} in comments.
+ 	* doc/trouble.texi: Use @r{} in comments.
+ 
+ 2004-09-17  Hans-Peter Nilsson  <hp@bitrange.com>
+ 
+ 	* configure.ac (gcc_cv_gld_version): Handle whitespace before
+ 	"VERSION=".
+ 	* aclocal.m4 (_gcc_COMPUTE_GAS_VERSION): Ditto.
+ 	* configure: Regenerate.
+ 
+ 2004-09-17  J"orn Rennecke <joern.rennecke@superh.com>
+ 
+ 	* sh.c (sh_gimplify_va_arg_expr): Don't call pass_by_reference.
+ 	(sh_pass_by_reference): Work around std_gimplify_va_arg_expr bug.
+ 	* t-sh (MULTILIB_CPUS): s/ML_m/ML_sh/g .
+ 	* t-sh64 (MULTILIB_CPU_DIRS): Likewise.  Match dashes and trailing
+ 	slashes in substitutions.
+ 	(MULTILIB_DIRNAMES): Remove defunct removal of /media32.
+ 
+ 2004-09-17  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* basic-block.h, c-decl.c, c-parse.in, cgraphunit.c, ddg.c,
+ 	gimplify.c, lambda-code.c, optabs.c, predict.c,
+ 	tree-scalar-evolution.c, tree-sra.c, tree-ssa-loop-ch.c,
+ 	tree-ssa.c, vec.h: Fix comment typos.  Follow spelling
+ 	conventions.
+ 
+ 2004-09-17  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* doc/compat.texi, doc/cpp.texi, doc/cppopts.texi,
+ 	doc/extend.texi, doc/install.texi, doc/invoke.texi,
+ 	doc/sourcebuild.texi, doc/tm.texi, doc/tree-ssa.texi,
+ 	doc/trouble.texi: Use @option around options.
+ 
+ 2004-09-17  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* Makefile.in (gen-protos.o): Depend on errors.h.
+ 
+ 2004-09-17  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	PR tree-optimization/17513
+ 	* cfgexpand.c (construct_init_block): Clear EDGE_EXECUTABLE
+ 	for successors of the entry block.
+ 
+ 2004-09-17  Uros Bizjak  <uros@kss-loka.si>
+ 
+ 	PR rtl-optimization/15187
+ 	* ifcvt.c (noce_try_cmove_arith): Exit early if total
+ 	insn_rtx_cost of both branches > BRANCH_COST
+ 
+ 2004-09-16  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	PR tree-optimization/17528
+ 	* tree-ssa-alias.c (compute_flow_insensitive_aliasing): Do not
+ 	erase the may-alias set for a tag when merging it with
+ 	another.
+ 
+ 2004-09-16  Kaz Kojima  <kkojima@gcc.gnu.org>
+ 
+ 	* config/sh/sh.md (call): Extend 32-bit addresses to DImode
+ 	for 32-bit TARGET_SHMEDIA.
+ 	(call_value): Likewise.
+ 
+ 2004-09-16  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-operands.c (add_call_clobber_ops): Make read-only
+ 	test apply only to TREE_STATIC and DECL_EXTERNAL.
+ 
+ 2004-09-16  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* Makefile.in (tree-cfg.o): Add CFGLAYOUT_H dependency.
+ 	* basic-block.h (get_dominated_by_region): Declare.
+ 	* dominance.c (get_dominated_by_region): New function.
+ 	* tree-cfg.c: Include cfglayout.h.
+ 	(tree_duplicate_bb): Duplicate also phi nodes.
+ 	(struct ssa_name_map_entry): New type.
+ 	(add_phi_args_after_copy_bb, add_phi_args_after_copy,
+ 	ssa_name_map_entry_hash, ssa_name_map_entry_eq,
+ 	allocate_ssa_names, rewrite_to_new_ssa_names_def,
+ 	rewrite_to_new_ssa_names_use, rewrite_to_new_ssa_names_bb,
+ 	rewrite_to_new_ssa_names, tree_duplicate_sese_region): New functions.
+ 	* tree-flow.h (tree_duplicate_sese_region, add_phi_args_after_copy_bb,
+ 	add_phi_args_after_copy, rewrite_to_new_ssa_names_bb,
+ 	rewrite_to_new_ssa_names, allocate_ssa_names,
+ 	rewrite_into_loop_closed_ssa, verify_loop_closed_ssa): Declare.
+ 	* tree-ssa-loop-ch.c (duplicate_blocks): Removed.
+ 	(copy_loop_headers): Use tree_duplicate_sese_region.
+ 
+ 2004-09-16  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* profile.c (branch_prob): Restore support for USE_MAPPED_LOCATION.
+ 
+ 2004-09-16 Jeff Law  <law@redhat.com>
+ 
+ 	* tree-into-ssa.c (block_defs_stack): New toplevel varray.
+ 	(rewrite_block_data): Remove, no longer used.
+ 	(rewrite_initialize_block_local_data): Remove, no longer used.
+ 	(rewrite_initialize_block): Mark parameters as unused as needed.
+ 	Change references to the block local block_defs to be block_defs_stack.
+ 	Push a marker onto the block_defs_stack.
+ 	(ssa_rewrite_initialize_block): Similarly.
+ 	(rewrite_stmt, ssa_rewrite_stmt): Similarly.
+ 	(ssa_register_new_def): No longer needs varray argument.  Use
+ 	block_defs_stack instead.  No longer handle possibly null block_defs
+ 	varray.  Reverse order of items we push on the stack to make it
+ 	easier to identify our marker.
+ 	(register_new_def): No longer handle possibly null block_defs
+ 	varray.
+ 	(rewrite_finalize_block): Revamp to look for markers in the global
+ 	block_defs_stack varray rather than wiping a block local varray.
+ 	Mark arguments as unused as needed.
+ 	(ssa_rewrite_finalize_block): Similarly.
+ 	(rewrite_into_ssa): Update initialization of dom walker structure
+ 	to reflect that we don't need block local data anymore.  Initialize
+ 	the block_defs_stack varray.
+ 	(rewrite_ssa_into_ssa): Similarly.
+ 	* tree-ssa-dom.c (block_defs_stack): New toplevel varray.
+ 	(struct dom_walk_data): Kill block_defs field.
+ 	(tree_ssa_dominator_optimize): Initialize block_defs_stack.
+ 	(thread_across_edge): Use the global block_defs_stack instead of
+ 	the old block_defs varray.
+ 	(dom_opt_initialize_block_local_data): Update now that we don't have
+ 	block_defs field to check anymore.
+ 	(dom_opt_initialize_block): Push a marker onto block_defs_stack.
+ 	(restore_currdefs_to_original_value): Use the new block_defs_stack
+ 	instead of a block local varray.
+ 	(dom_opt_finalize_block): Similarly.
+ 	(record_equivalencs_from_phis): Similarly.
+ 	(optimize_stmt, register_definitions_for_stmt): Similarly.
+ 
+ 2004-09-16  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/17517
+ 	* tree-ssa-copyrename.c (copy_rename_partition_coalesce): Don't
+ 	coalesce same-root variables without checking for abnormal PHI usage.
+ 
+ 2004-09-16  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* cfgloop.h (duplicate_loop):  Add prototype.
+ 	* cfgloopmanip.c (duplicate_loop): Make non-static.
+ 	* lambda-code.c (perfect_nestify): Factor out test whether
+ 	we can handle this loop into separate function.
+ 	Call it.
+ 	(can_convert_to_perfect_nest): New function.
+ 	(replace_uses_of_x_with_y): Add modify_stmt call.
+ 	* tree-loop-linear.c (linear_transform_loops): Call
+ 	rewrite_into_loop_closed_ssa and free_df.
+ 
+ 2004-09-16  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* lambda-code.c (invariant_in_loop): is_gimple_min_invariant is
+ 	loop invariant as well.
+ 	(perfect_nestify): new function.
+ 	(gcc_loop_to_lambda_loop): New parameters to track lower bounds,
+ 	upper bounds, and steps.
+ 	Set outerinductionvar properly.
+ 	(gcc_loopnest_to_lambda_loopnest): Add loops and need_perfect
+ 	parameters.
+ 	Return NULL if we need a perfect loop and can't make one.
+ 	(lambda_loopnest_to_gcc_loopnest): Correct algorithm.
+ 	(not_interesting_stmt): New function.
+ 	(phi_loop_edge_uses_def): Ditto.
+ 	(stmt_uses_phi_result): Ditto.
+ 	(stmt_is_bumper_for_loop): Ditto.
+ 	(perfect_nest_p): Ditto.
+ 	(nestify_update_pending_stmts): Ditto.
+ 	(replace_uses_of_x_with_y): Ditto.
+ 	(stmt_uses_op): Ditto.
+ 	(perfect_nestify): Ditto.
+ 	* lambda-mat.c (lambda_matrix_id_p): New function.
+ 	* lambda-trans.c (lambda_trans_matrix_id_p): Ditto.
+ 	* lambda.h: Update prototypes.
+ 	* tree-loop-linear (linear_transform_loop): Use new
+ 	perfect_nest_p. Detect and ignore identity transform.
+ 	* tree-ssa-loop.c (pass_linear_transform): Use TODO_write_loop_closed.
+ 
+ 2004-09-16  Sebastian Pop  <pop@cri.ensmp.fr>
+ 
+ 	* tree-loop-linear.c (gather_interchange_stats): Add more comments.
+ 	Gather also strides of accessed data.  Pass in the data references
+ 	array.
+ 	(try_interchange_loops): Add a new heuristic for handling the temporal
+ 	locality.  Pass in the data references array.
+ 	(linear_transform_loops): Pass the data references array to
+ 	try_interchange_loops.
+ 
+ 2004-09-16  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* doc/invoke.texi: Fix typos.  Follow spelling conventions.
+ 
+ 2004-09-16  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* doc/c-tree.texi (Classes): Remove index entries for
+ 	TREE_VIA_{PUBLIC,PROTECTED,PRIVATE}.
+ 
+ 2004-09-16  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* fold-const.c (fold): Fold difference of addresses.
+ 	(ptr_difference_const): Moved from tree-ssa-loop-ivopts, based on
+ 	get_inner_reference.
+ 	* tree-ssa-loop-ivopts.c (peel_address): Removed.
+ 	(ptr_difference_const): Moved to fold-const.c.
+ 	(split_address_cost): Use get_inner_reference instead of peel_address.
+ 	(ptr_difference_cost): Change type of diff to HOST_WIDE_INT.
+ 	* tree.h (ptr_difference_const): Export.
+ 
+ 	* tree-ssa-loop-ivopts.c (dump_iv, dump_use, dump_cand): Add induction
+ 	variable type to the dump.  Fix indentation.
+ 	(idx_find_step): Handle nonconstant array_ref_element_size and
+ 	array_ref_low_bound.
+ 	(idx_record_use): Handle array_ref_element_size and
+ 	array_ref_low_bound.
+ 	(find_interesting_uses_stmt): Handle memory = nontrivial_expression
+ 	statements correctly.
+ 	(get_computation_at, iv_value): Do not unshare expressions here.
+ 	(rewrite_use_outer): Unshare the expression before it is emitted
+ 	to code.
+ 	* tree-ssa-loop-niter.c (unsigned_type_for, signed_type_for):
+ 	Moved to tree.c.
+ 	* tree.c (unsigned_type_for, signed_type_for): Moved from
+ 	tree-ssa-loop-niter.c.  Use langhooks.
+ 	* tree.h (signed_type_for): Export.
+ 
+ 2004-09-16  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_xcoff_asm_named_section): Update
+ 	prototype.
+ 
+ 2004-09-15  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR target/11572
+ 	* c-incpath.h (target_c_incpath_s): Add extra_pre_includes.
+ 	Add two parameters to extra_includes.
+ 	(C_INCPATH_INIT): Remove.
+ 	* c-incpath.c (register_include_chains): Call extra_pre_includes
+ 	before adding the standard include directory.
+ 	Update call to extra_includes.
+ 	(!defined TARGET_EXTRA_INCLUDES): Update
+ 	hook_void_charptr_charptr_int and add !define
+ 	TARGET_EXTRA_PRE_INCLUDES.
+ 	(!define TARGET_EXTRA_INCLUDES): Define as
+ 	hook_void_charptr_charptr_int.
+ 	(!define TARGET_EXTRA_PRE_INCLUDES): Likewise.
+ 	(target_c_incpath): Always declare.
+ 	* fixinclude.c (defined TARGET_EXTRA_INCLUDES): Declare a
+ 	empty function.
+ 	(define TARGET_EXTRA_PRE_INCLUDES): Likewise.
+ 	* config/darwin.h: (darwin_register_frameworks): Update for
+ 	the two new parameters.
+ 	(darwin_register_objc_includes): Add prototype.
+ 	(TARGET_EXTRA_PRE_INCLUDES): Define.
+ 	* config/darwin-c.c (darwin_register_objc_includes): New function.
+ 	(darwin_register_frameworks): Update for the two new parameters.
+ 	(target_c_incpath): Remove.
+ 	* config/t-darwin (darwin-c.o): Add $(PREPROCESSOR_DEFINES) to
+ 	the compile line.
+ 	* doc/tm.texi (TARGET_EXTRA_INCLUDES): Document the two new
+ 	parameters.
+ 	(TARGET_EXTRA_PRE_INCLUDES): Document.
+ 
+ 	* gcc.c (spec_function): Add replace-outfile.
+ 	(replace_outfile_spec_function): New function.
+ 	* config/darwin.h (LINK_SPEC): Add replace
+ 	-lobjc with -lobjc-gnu if -fgnu-runtime is
+ 	supplied.
+ 	* invoke.texi (replace-outfile): Document.
+ 
+ 2004-09-13  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* predict.c (expr_expected_value, strip_builtin_expect): New function.
+ 	(tree_predict_by_opcode): Use it.
+ 	(tree_estimate_probability): Add, for now disabled,
+ 	strip_builtin_expect call.
+ 
+ 2004-09-15  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	PR target/17455
+ 	* config/ia64/ia64.c (ia64_function_ok_for_sibcall): Return false
+ 	if current_function_decl is a sibcall.
+ 
+ 2004-09-15  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* varasm.c (default_function_rdodata_section): Make sure to pass
+ 	along a decl for a link-once section.
+ 
+ 2004-09-15  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-ssa-operands.c (add_call_clobber_ops): Fix unused variable
+ 	warning with code disable.  Fix formatting.
+ 
+ 2004-09-15  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* Makefile.in (tree-ssa-dom.o): Depend on tree-ssa-propagate.h.
+ 	* tree-ssa-dom.c (cprop_into_stmt): Recompute TREE_INVARIANT
+ 	after propagating into an ADDR_EXPR.
+ 
+ 2004-09-15  Andrew Pinski  <apinski@apple.com>
+ 
+ 	PR rtl-opt/17427
+ 	* gcse.c (process_insert_insn): insn_invalid_p has side effects.
+ 	Move it out of gcc_assert.
+ 
+ 2004-09-15  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* attribs.c, builtins.c, c-format.c, c-pch.c, coverage.c,
+ 	except.c, fold-const.c, function.c, langhooks.c, params.c,
+ 	reload.c, reload1.c, stmt.c, stor-layout.c, toplev.c, tree-cfg.c,
+ 	tree-dump.c, tree-mudflap.c, tree.c, varasm.c: Use %<, %> and %q
+ 	for quoting in diagnostics going through pretty-print.c.  Use ''
+ 	for quoting in other diagnostic text.
+ 	* langhooks.c: Include intl.h.  Mark text locating diagnostics for
+ 	translation.
+ 	* Makefile.in (langhooks.o): Update dependencies.
+ 	* pretty-print.h (pp_printf): Mark as accepting GCC diagnostic
+ 	formats.
+ 
+ 2004-09-15  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* configure.ac: Check for COMDAT support.  Robustify check for
+ 	SHF_MERGE support.
+ 	* configure: Regenerated.
+ 	* config.in: Likewise.
+ 	* langhooks-def.h (lhd_comdat_group): New function.
+ 	(LANG_HOOKS_COMDAT_GROUP): New macro.
+ 	(LANG_HOOKS_DECLS): Use it.
+ 	* langhooks.c (lhd_comdat_group): Define.
+ 	* langhooks.h (lang_hooks_for_decls): Add comdat_group.
+ 	* output.h (named_section_flags): Make it a macro.
+ 	(named_section_real): New function.
+ 	(default_no_named_section): Add decl parameter.
+ 	(default_elf_asm_named_section): Likewise.
+ 	(default_coff_asm_named_section): Likewise.
+ 	(default_pe_asm_named_section): Likewise.
+ 	* target.h (gcc_target): Adjust type of named_section.
+ 	* varasm.c (named_section_flags): Rename to named_section_real.
+ 	Add decl parameter.
+ 	(default_no_named_section): Add decl parameter.
+ 	(default_elf_asm_named_section): Use COMDAT, if available.  Deal
+ 	with the case that ASM_COMMENT_START is "@".
+ 	(default_coff_asm_named_section): Add decl parameter.
+ 	(default_pe_asm_named_section): Likewise.
+ 	* config/alpha/alpha.c (vms_asm_named_section): Add decl
+ 	parameter.
+ 	(unicosmk_asm_named_section): Likewise.
+ 	* config/arm/arm.c (arm_elf_asm_named_section): Remove.
+ 	* config/arm/elf.h (TARGET_ASM_NAMED_SECTION): Likewise.
+ 	* config/c4x/c4x.c (c4x_asm_named_section): Add decl parameter.
+ 	* config/cris/cris-protos.h (cris_target_asm_named_section):
+ 	Likewise.
+ 	* config/cris/cris.c (cris_target_asm_named_section):
+ 	Likewise.
+ 	* config/darwin/darwin-protos.h (darwin_asm_named_section):
+ 	Likewise.
+ 	* config/darwin/darwin.c (darwin_asm_named_section): Likewise.
+ 	* config/h8300/h8300.c (h8300_asm_named_section): Likewise.
+ 	* config/i386/i386-protos.h (i386_pe_asm_named_section):
+ 	Likewise.
+ 	* config/i386/winnt.c (i386_pe_asm_named_section): Likewise.
+ 	* config/m68k/m68k.c (m68k_coff_asm_named_section): Likewise.
+ 	* config/mcore/mcore.c (mcore_asm_named_section): Likewise.
+ 	* config/rs6000/rs6000.c (rs6000_xcoff_asm_named_section):
+ 	Likewise.
+ 	* config/sparc/sparc.c (sparce_elf_asm_named_section): Likewise.
+ 	* cp/cp-lang.h (LANG_HOOKS_COMDAT_GROUP): Define.
+ 	* cp/cp-tree.h (cxx_comdat_group): Declare.
+ 	* cp/decl.c (cxx_comdat_group): New function.
+ 
+ 2004-09-15  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-ssa.c (verify_flow_sensitive_alias_info): Do not walk dead nodes.
+ 	* tree-tailcall.c (eliminate_tail_call): Release SSA name.
+ 
+ 	* tree-cfg.c (remove_bb): Release SSA defs.
+ 
+ 2004-09-15  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* doc/tm.texi: Follow spelling conventions.
+ 
+ 2004-09-15  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-ssa-dom.c: Fix comment typos.
+ 
+ 2004-09-15  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* config/rs6000/linux-unwind.h (struct gcc_pt_regs): Extend to
+ 	include ccr.
+ 	(ppc_fallback_frame_state): Save location of CR.
+ 
+ 2004-09-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* expr.c (string_constant): Handle also read-only variables
+ 	initialized to string literals.
+ 
+ 	* builtins.c (expand_builtin_memmove): Optimize memmove (x, y, 1)
+ 	into memcpy (x, y, 1) if memcpy can be expanded inline.
+ 
+ 2004-09-15  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	PR tree-optimization/17468
+ 	* tree-ssa.c (verify_use, verify_phi_args, verify_ssa):  Verify that
+ 	definition inside a block precede uses.
+ 	* tree-tailcall.c (adjust_return_value): Emit statements in the
+ 	correct order.
+ 
+ 2004-09-15  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.h (POINTERS_EXTEND_UNSIGNED): Delete.
+ 
+ 2004-09-15  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* doc/install.texi (sparc-sun-solaris2*): Properly format warning.
+ 
+ 2004-09-14 Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (avail_exprs_stack): New global varray.
+ 	(struct dom_walk_block_data): Remove avail_exprs member.
+ 	(tree_ssa_dominator_optimize): Initialize avail_exprs_stack.
+ 	(lookup_avail_expr): No longer need to pass in address of
+ 	the block local available exprs stack.  All callers changed.
+ 	(simplify_cond_and_lookup_avail_expr): Similarly.
+ 	(simplify_switch_and_lookup_avail_expr): Similarly.
+ 	(get_eq_expr_value, record_cond): Likewise.
+ 	(record_dominating_conditions): Likewise.
+ 	(update_rhs_and_lookup_avail_expr): Likewise.
+ 	(record_equivalences_from_stmt): Likewise.
+ 	(dom_opt_initialize_block_local_data): No longer test state of
+ 	block local avail_exprs.
+ 	(dom_opt_initialize_block): Mark unwind point in the global
+ 	avail_expr stack.
+ 	(remove_expressions_from_table): Update to unwind to the
+ 	most recent unwind marker in the global avail_expr stack.
+ 	All callers changed.
+ 	(dom_opt_finalize_block): Mark unwind point in the global
+ 	avail_expr stack as needed.
+ 	(record_cond): Push elements into the global avail_exprs stack.
+ 
+ 	* tree-dfa.c (free_df_for_stmt): No longer static.
+ 	(free_df): Update comments.
+ 	* tree-flow.h (free_df_for_stmt): Prototype.
+ 	* tree-ssa-dse.c (dse_optimize_stmt): Call free_df_for_stmt.  Also
+ 	call release_defs.
+ 
+ 2004-09-14  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	PR tree-optimization/17252
+ 	* tree-ssa-alias.c (may_alias_p): Don't assume that a
+ 	pointer may not point to itself when using relaxed
+ 	aliasing rules.
+ 
+ 2004-09-14  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR middle-end/17397
+ 	* gimplify.c (gimplify_addr_expr): Don't inadvertently change types
+ 	while folding <ADDR_EXPR <INDIRECT_REF X>>.
+ 
+ 2004-09-14  Andrew Pinski  <apinski@apple.com>
+ 
+ 	* tree-ssa-copy.c (may_propagate_copy): Don't check the aliasing
+ 	sets of the pointers but the aliasing sets of what they point to.
+ 
+ 2004-09-14  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	PR rtl-optimization/9771
+ 	* regclass.c (CALL_REALLY_USED_REGNO_P): New macro to eliminate
+ 	conditional compilation in init_reg_sets_1.
+ 	(init_reg_sets_1): Let global_regs[i] take priority over the frame
+ 	(but not stack) pointer exceptions to regs_invalidated_by_call.
+ 	(globalize_reg): Globalizing a fixed register may need to update
+ 	regs_invalidated_by_call.
+ 
+ 2004-09-14  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	PR tree-optimization/15262
+ 	* tree-dfa.c (dump_variable): Also print the type of the
+ 	variable.
+ 	* tree-ssa-alias.c (compute_flow_insensitive_aliasing): If two
+ 	memory tags are of conflicting alias sets but have no aliased
+ 	symbols in common, add one tag to the alias set of the other.
+ 	(setup_pointers_and_addressables): Remove hack to deal with
+ 	programs with no aliased symbols.
+ 	(may_alias_p): Don't special case aggregate types.
+ 
+ 2004-09-14  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	PR c/15498
+ 	* doc/invoke.texi (Environment Variables): Correct example locale.
+ 
+ 2004-09-14  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* cfg.c (expunge_block): Revert previous change adding ggc_free call.
+ 
+ 2004-09-14  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* config.gcc: Do not build a shared libgcc for arm-none-eabi.
+ 
+ 2004-09-14  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-tree.h (struct c_declspecs): Add const_p, volatile_p and
+ 	restrict_p.
+ 	(struct c_declarator): Change u.array.quals and pointer_quals to
+ 	int.  Add u.array.attrs.
+ 	(quals_from_declspecs): New.
+ 	* c-decl.c (quals_from_declspecs): New.
+ 	(shadow_tag_warned): Give more specific message for useless type
+ 	qualifiers.
+ 	(build_array_declarator, set_array_declarator_inner,
+ 	grokdeclarator, make_pointer_declarator, build_null_declspecs,
+ 	declspecs_add_qual): Update for changed structures.
+ 
+ 2004-09-14  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (stmts_to_rescan): Move from a block-local
+ 	to a global varray.
+ 	(tree_ssa_dominator_optimize): Allocate stmts_to_rescan.
+ 	(dom_opt_initialize_block_local_data): No longer test state
+ 	of stmts_to_rescan.
+ 	(dom_opt_finalize_block): Update due to change in scope of
+ 	stmts_to_rescan.
+ 	(optimize_stmt): Similarly.
+ 
+ 2004-09-14  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* cgraph.h, cgraphunit.c, fold-const.c, lambda-mat.c,
+ 	lambda.h, profile.c, tree-optimize.c, tree-sra.c, vec.h: Fix
+ 	comment typos.  Follow spelling conventions.
+ 
+ 2004-09-14  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/darwin-c.c, config/alpha/alpha.c, config/i386/i386.c,
+ 	config/i386/predicates.md, config/sparc/sparc.c: Follow
+ 	spelling conventions.
+ 
+ 2004-09-14  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 	    Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* Makefile.in (loop-unroll.o): Add HASHTAB_H and RECOG_H dependency.
+ 	* basic-block.h (struct reorder_block_def): Add copy_number field.
+ 	* cfgloop.h (biv_p): Declare.
+ 	* cfgloopmanip.c (duplicate_loop_to_header_edge): Set copy_number.
+ 	* common.opt (fsplit-ivs-in-unroller): New flag.
+ 	* loop-iv.c (biv_p): New function.
+ 	* loop-unroll.c: Include hashtab.h and recog.h.
+ 	(struct iv_to_split, struct split_ivs_info): New types.
+ 	(analyze_ivs_to_split, si_info_start_duplication, split_ivs_in_copies,
+ 	free_si_info, si_info_hash, si_info_eq, analyze_iv_to_split_insn,
+ 	determine_split_iv_delta, get_ivts_expr, allocate_basic_variable,
+ 	insert_base_initialization, split_iv): New functions.
+ 	(peel_loop_completely, unroll_loop_constant_iterations,
+ 	unroll_loop_runtime_iterations, peel_loop_simple, unroll_loop_stupid):
+ 	Use them.
+ 	* doc/invoke.texi (-fsplit-ivs-in-unroller): Document.
+ 
+ 2004-09-14  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-cfg.c (thread_jumps): Update dominators correctly in
+ 	case destination of threaded edge dominates its source.
+ 
+ 2004-09-14  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* unroll.c: Removed.
+ 	* loop.h: Removed.
+ 	* Makefile.in (LOOP_H, unroll.o): Removed.
+ 	(toplev.o, passes.o, stmt.o, integrate.o, loop.o): Remove LOOP_H
+ 	dependency.
+ 	* alias.c (init_alias_analysis): Remove flag_old_unroll_loops
+ 	reference.
+ 	* cfgloop.h (LOOP_PREFETCH, loop_optimize): Moved from loop.h.
+ 	* common.opt (fold-unroll-loops, fold-unroll-all-loops): Removed.
+ 	* loop.c: Do not include loop.h.
+ 	(LOOP_INFO, LOOP_MOVABLES, LOOP_REGS, LOOP_IVS, INSN_LUID,
+ 	REGNO_FIRST_LUID, REGNO_LAST_LUID, enum g_types, struct induction,
+ 	struct iv_class, enum iv_mode, struct iv, REG_IV_TYPE, REG_IV_INFO,
+ 	REG_IV_CLASS, struct loop_ivs, struct loop_mem_info, struct loop_reg,
+ 	struct loop_regs, struct loop_movables, struct loop_info): Moved
+ 	from loop.h.
+ 	(back_branch_in_range_p, fold_rtx_mult_add, biv_total_increment,
+ 	reg_dead_after_loop, final_biv_value, loop_find_equiv_value,
+ 	find_common_reg_term, loop_iterations, final_giv_value): Moved
+ 	from unroll.c.
+ 	(uid_luid, uid_loop, max_uid_for_loop, max_reg_before_loop,
+ 	loop_dump_stream, for_each_insn_in_loop, express_from,
+ 	extend_value_for_giv, loop_iv_add_mult_emit_before,
+ 	loop_iv_add_mult_sink, loop_iv_add_mult_hoist,
+ 	loop_insn_first_p, get_condition_for_loop,
+ 	loop_insn_emit_before, loop_insn_hoist,
+ 	loop_insn_sink): Made static.
+ 	(loop_invariant_p): Made static.  Removed flag_old_unroll_loops
+ 	reference.
+ 	(strength_reduce): Do not call unroller.
+ 	(record_giv): Do not initialize unrolled field.
+ 	(prescan_loop): Do not set loop_info->preconditioned.
+ 	* passes.c: Do not include loop.h.
+ 	(rest_of_handle_loop_optimize): Do not call unroller.
+ 	* predict.c: Do not include loop.h.
+ 	* rtl.h (NOTE_PRECONDITIONED): Removed.
+ 	* stmt.c: Do not include loop.h.
+ 	* toplev.c: Do not include loop.h.
+ 	(process_options): Do not handle flag_old_unroll_loops.
+ 
+ 	* doc/invoke.texi (fold-unroll-loops, fold-unroll-all-loops):
+ 	Documentation removed.
+ 	* doc/passes.texi (unroll.c, loop.h): Documentation removed.
+ 
+ 2004-09-14  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* Makefile.in (STAGE1_CHECKING): New variable.
+ 	(stage1_build): Use it.
+ 	* tree-ssa.c (verify_ssa): Preserve state of dominance
+ 	information.
+ 
+ 2004-09-14  Uros Bizjak  <uros@kss-loka.si>
+ 
+ 	* config/i386/i386.c (output_fp_compare): Add generation
+ 	of ftst instruction.
+ 	* config/i386/i386.md (*cmpfp_0_sf, cmpfp_0_df, cmpfp_0_xf):
+ 	Use output_fp_compare () function.
+ 	(cmpfp_i, *cmpfp_i_sse, *cmpfp_i_sse_only): Fix insn constraint.
+ 	(fix_truncdi_memory): Remove operands[5] copy.
+ 
+ 2004-09-14  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/m32r/m32r.md, config/m68k/m68kelf.h,
+ 	config/mcore/mcore.md, config/rs6000/linux64.h,
+ 	config/rs6000/rs6000.c, config/sparc/sparc.c: Fix comment
+ 	typos.
+ 
+ 2004-09-13  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	* Makefile.in (GEN_PROTOS_OBJS): Add $(BUILD_ERRORS).
+ 	* gen-protos.c: Include errors.h.
+ 	(progname): Delete.
+ 
+ 2004-09-14  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* Makefile.in (predict.o): Depend on tree-scalar-evolution.h
+ 	* predict.c: Include tree-scalar-evolution.h and cfgloop.h
+ 	(predict_loops): Use number_of_iterations_exit to predict
+ 	number of iterations on trees.
+ 
+ 2004-09-13  Dale Johannesen  <dalej@apple.com>
+ 
+ 	PR 17408
+ 	PR 17409
+ 	* c-decl.c (start_decl): Repair TREE_STATIC for initialized
+ 	objects declared extern.
+ 
+ 2004-09-14  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/arm.c (arm_expand_prologue): Make args_to_push a
+ 	HOST_WIDE_INT.
+ 
+ 2004-09-13  Daniel Jacobowitz  <dan@debian.org>
+ 
+ 	* fold-const.c (fold_checksum_tree): Ignore TYPE_CACHED_VALUES.
+ 	Only use TYPE_BINFO for aggregates.
+ 
+ 2004-09-13  Daniel Jacobowitz  <dan@debian.org>
+ 
+ 	* expmed.c (synth_mult): Initialize latency.  Check cost before
+ 	checking ops count.
+ 
+ 2004-09-13  Kenneth Zadeck  <Kenneth.Zadeck@NaturalBridge.com>
+ 
+ 	* tree-ssa-operands.c (get_call_expr_operands): Added parm to
+ 	add_call_clobber_ops and add_call_read_ops.
+ 	(add_call_clobber_ops, add_call_read_ops): Added code to reduce
+ 	the number of vdefs and vuses inserted based on analysis of global
+ 	variables across calls.  * tree-dfa.c (find_referenced_vars):
+ 	Needed to reset static var maps before each function is compiled.
+ 	* cgraphunit.c:
+ 	(static_vars_to_consider_by_tree,static_vars_to_consider_by_uid,
+ 	static_vars_info,functions_to_static_vars_info,module_statics_escape,
+ 	all_module_statics,searchc_env,dfs_info): New fields to support
+ 	analysis of static global variables.
+ 	(print_order, convert_UIDs_in_bitmap, new_static_vars_info,
+ 	cgraph_reset_static_var_maps, get_global_static_vars_info,
+ 	get_global_statics_not_read, get_global_statics_not_written,
+ 	searchc, cgraph_reduced_inorder, has_proper_scope_for_analysis,
+ 	check_rhs_var, check_lhs_var, get_asm_expr_operands,
+ 	process_call_for_static_vars, scan_for_static_refs,
+ 	cgraph_characterize_statics_local, cgraph_get_static_name_by_uid,
+ 	clear_static_vars_maps, cgraph_propagate_bits,
+ 	cgraph_characterize_statics): New. Functions to support analysis
+ 	of static global variables.
+ 	(cgraph_mark_local_and_external_functions): Renamed from:
+ 	(cgraph_mark_local_functions)
+ 	(cgraph_expand_all_functions): Remove call to
+ 	cgraph_mark_local_and_external_functions.
+ 	(cgraph_optimize): Added driver to analyze static variables whose
+ 	scope is within the compilation unit.  * cgraph.h (struct
+ 	cgraph_local_info, GTY): Added statics_read, statics_written,
+ 	local, calls_read_all, calls_write_all, for_functions_valid.
+ 	(struct cgraph_node): Added next_cycle.  * cgraph.c
+ 	(dump_cgraph_node): Added print routines for new fields.  *
+ 	makefile.in: macroized cgraph.h, added cgraphunit.c to the ggc
+ 	list.
+ 
+ 2004-09-13  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-decl.c (grokdeclarator): Correct comments about where storage
+ 	class specifiers are rejected by grammar and add corresponding
+ 	asserts.  Diagnose typedefs and parameters declared inline.
+ 	Change warning for inline main to a pedwarn.  Only diagnose inline
+ 	main if hosted.
+ 	(declspecs_add_scspec): Allow duplicate "inline".
+ 
+ 2004-09-13  Steve Ellcey  <sje@cup.hp.com>
+ 
+ 	* config/ia64/ia64.c (ia64_scalar_mode_supported_p): New.
+ 	(TARGET_SCALAR_MODE_SUPPORTED_P): New.
+ 
+ 2004-09-13  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR 17436
+ 	* tree.h (TYPE_CONTAINS_PLACEHOLDER_INTERNAL): New.
+ 	(tree_type): Replace spare with contains_placeholder_bits.
+ 	(type_contains_placeholder_1): Rename from type_contains_placeholder_p,
+ 	make static.  Remove seen_types list.
+ 	(type_contains_placeholder_p): New.
+ 
+ 2004-09-13  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	* config/mips/mips.c (CODE_FOR_mips_sqrt_ps): New.
+ 	(sb1_bdesc, bdesc_map, bdesc_arrays): New.
+ 	(mips_expand_builtin): Add SB-1 support.  Use bdesc_map and
+ 	bdesc_arrays instead of mips_bdesc.
+ 	(mips_init_builtins): Likewise.
+ 	* config/mips/mips.h (TARGET_SB1): New.
+ 	(HAVE_SQRT_P): Delete.
+ 	* config/mips/mips.md (divide_condition): Support V2SF.
+ 	(sqrt_condition, recip_condition): New.
+ 	(div<mode>3): Use ANYF instead of SCALARF.
+ 	(*div<mode>3): Use ANYF instead of SCALARF.  Use UNITMODE instead of
+ 	MODE.
+ 	(*recip<mode>3, *rsqrt<mode>a, *rsqrt<mode>b): Use recip_condition
+ 	instead of ISA_HAS_FP4.  Use ANYF instead of SCALARF.  Use UNITMODE
+ 	instead of MODE.
+ 	(sqrt<mode>2): Use sqrt_condition instead of HAVE_SQRT_P.  Use ANYF
+ 	instead of SCALARF.  Use UNITMODE instead of MODE.
+ 
+ 2004-09-13  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* config.in: Regenerate after removal of libbanshee.
+ 
+ 2004-09-13  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/17400
+ 	* tree-ssa-copyrename.c (copy_rename_partition_coalesce): Don't
+ 	coalesce partitions when one occurs in an abnormal PHI.
+ 
+ 2004-09-13  Andrew Pinski  <apinski@apple.com>
+ 
+ 	* config/rs6000/darwin.h (ASM_OUTPUT_COMMON): Change variable size's
+ 	name to _new_size.
+ 
+ 2004-09-13  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR inline-asm/6806
+ 	* cselib.c (cselib_invalidate_rtx): Export.  Remove unused args.
+ 	(cselib_invalidate_rtx_note_stores): New.
+ 	(cselib_record_sets, cselib_process_insn): Update to match.
+ 	* cselib.h (cselib_invalidate_rtx): Declare.
+ 	* postreload.c (reload_cse_simplify): Invalidate asm clobbers.
+ 
+ 2004-09-13  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR tree-opt/10528
+ 	* tree-inline.c (copy_body_r): Recompute bits for ADDR_EXPR,
+ 	after copying its argument.
+ 
+ 2004-09-13  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-common.c, c-decl.c, c-lex.c, c-objc-common.c, c-opts.c,
+ 	c-parse.in, c-pragma.c, c-typeck.c: Use %q, %< and %> for quoting
+ 	in diagnostics.  Use %' for English apostrophes.
+ 	* c-tree.h (ATTRIBUTE_GCC_CDIAG): Define.
+ 	(pedwarn_c90, pedwarn_c99): Use it.
+ 	* c-decl.c (lookup_label): Quote label name in diagnostic.
+ 	* c-parse.in (yyprint): Use ' instead of ` for left quote.
+ 	* c-typeck.c (warn_for_assignment): Likewise.
+ 
+ 2004-09-13  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* i386.c (x86_schedule): New global variable.
+ 	(override_options): Disable scheduling when not supported.
+ 	* i386.h (x86_schedule): Declare.
+ 	(TARGET_SCHEDULE): New macro.
+ 
+ 2004-09-12  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR c++/16254
+ 	* fold-const.c (fold) <case CLEANUP_POINT_EXPR>: Remove.
+ 	* tree.c, tree.h (has_cleanups): Remove.
+ 
+ 2004-09-12  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-ssa-loop-manip.c (split_loop_exit_edge): Handle non-ssaname
+ 	arguments of the phi nodes correctly.
+ 
+ 2004-09-12  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* ggc-common.c (cmp_statistics): Fix sorting.
+ 
+ 2004-09-12  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	PR target/16795
+ 	* expmed.c (expand_divmod): If cheap power of 2 divide is
+ 	available, use it for negative constant as well.
+ 
+ 2004-09-12  Andrew Pinski  <apinski@apple.com>
+ 
+ 	* darwin.h (ASM_OUTPUT_COMMON): Make sure we do not have a
+ 	size of 0.
+ 
+ 	* tree-chrec.c (initialize_scalar_evolutions_analyzer): Remove.
+ 
+ 2004-09-12  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/i386/i386.c (ix86_split_ashldi): Special case op1 as one
+ 	or minus one.
+ 	(ix86_split_ashrdi, ix86_split_lshrdi): Clean up conditions for
+ 	post-reload, and scratch NULL.
+ 	* config/i386/i386.md (testqi_1): Use FLAGS_REG name.
+ 	(x86_shift_adj_2): Use ix86_expand_clear.
+ 	(ashldi3): Remove CMOVE expansion difference.
+ 	(ashldi3_1): Remove.
+ 	(*ashldi3_1): Rename from *ashldi3_2.  Use reg_or_pm1_operand and
+ 	add constraints for immediates.  New peephole for split-with-temp.
+ 	Run splitter after peep2 pass.
+ 	(ashrdi3, ashrdi3_1, ashrdi3_2): Similarly.
+ 	(lshrdi3, lshrdi3_1, lshrdi3_2): Similarly.
+ 	(setcc_2): Rename with *.
+ 	* config/i386/predicates.md (reg_or_pm1_operand): New.
+ 	(ashldi_input_operand): New.
+ 
+ 2004-09-12  Richard Henderson  <rth@redhat.com
+ 
+ 	* print-rtl.c (print_decl_name): New.
+ 	(print_mem_expr): Use it.
+ 
+ 2004-09-12  Richard Henderson  <rth@redhat.com
+ 
+ 	PR 17186, part deux
+ 	* except.c (sjlj_emit_function_exit): Fix logic locating
+ 	sjlj_exit_after in final block.
+ 
+ 2004-09-12  Toon Moene  <toon@moene.indiv.nluug.nl>
+ 
+ 	* common.opt: Remove flags -fmove-all-movables and
+ 	-freduce-all-givs.
+ 	* loop-invariant.c (find_invariants_to_move):
+ 	Remove all uses of flag_move_all_movables.
+ 	* loop.c (move_movables): Remove all uses of
+ 	flag_move_all_movables.
+ 	(strength_reduce): Remove all uses of
+ 	flag_reduce_all_givs.
+ 	* doc/invoke.texi: Remove documentation of flags
+ 	-fremove-all-movables and -freduce-all-givs.
+ 
+ 2004-09-11  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	PR middle-end/17411
+ 	* tree-sra.c (generate_element_zero): Revert recent build_int_cst
+ 	change. elt->type may be a floating point type, so use fold_convert.
+ 
+ 2004-09-11  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* config/darwin.c (machopic_validate_stub_or_non_lazy_ptr): Mark
+ 	the thing referenced as used, not the stub itself.
+ 
+ 2004-09-11  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-tree.h (enum c_storage_class): New.
+ 	(struct c_declspecs): Add storage_class, inline_p and thread_p.
+ 	* c-decl.c (shadow_tag_warned): Give errors for "inline" in empty
+ 	declarations and "auto" or "register" in file scope empty
+ 	declarations.  Give more specific warnings for other cases of
+ 	storage class specifiers in empty declarations.
+ 	(grokdeclarator): Update for new structures.  Don't check for
+ 	multiple storage classes.  Diagnose file-scope "register" if
+ 	pedantic.
+ 	(build_null_declspecs): Update.
+ 	(declspecs_add_scspec): Update.  Diagnose multiple storage class
+ 	specifiers and invalid uses of "__thread".
+ 
+ 2004-09-11  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* tree.c (tree_code_size): New function, bulk of code from tree_size.
+ 	(tree_size, make_node): Use it.
+ 	* tree-ssa-pre.c (init_pre): Use it.
+ 	* tree.h: Prototype it.
+ 
+ 2004-09-11  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-cfg.c (set_bb_for_stmt): Use PHI_BB.
+ 	* tree-dfa.c (compute_immediate_uses, add_immediate_use,
+ 	redirect_immediate_use): Use PHI_DF.
+ 	* tree-flow-inline.h (stmt_ann): Abort on phi nodes.
+ 	(bb_for_stmt): Use PHI_BB.
+ 	(get_immediate_uses): Use PHI_DF.
+ 	* tree-ssa-dse.c (max_stmt_uid): New variable.
+ 	(get_stmt_uid): New function.
+ 	(dse_optimize_stmt, dse_record_phis, tree_ssa_dse): Do not use phi
+ 	node annotations.
+ 	* tree-ssa-loop-im.c (LIM_DATA): Do not use phi statement annotations.
+ 	(max_uid): Renamed to max_stmt_uid.
+ 	(get_stmt_uid): New function.
+ 	(maybe_queue_var, single_reachable_address, determine_lsm): Do not use
+ 	phi node annotations.
+ 	* tree-ssa.c (replace_immediate_uses): Do not use phi node annotations.
+ 	* tree.h (PHI_BB, PHI_DF): New accessor functions.
+ 	(struct tree_phi_node): Add bb and df fields.
+ 
+ 2004-09-11  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR middle-end/17416
+ 	* cfgexpand.c (expand_used_vars_for_block): Fix off-by-one bug
+ 	in conflict loop.
+ 
+ 2004-09-11  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* i386.h (MODE_NEEDED): Calls need UNINITIALIZED mode; add comment.
+ 	(EMIT_MODE_SET): UNINITIALIZED mode needs no set.
+ 	* i386.md (i387_cw): Add 'uninitialized' mode.
+ 
+ 	* profile.c (BB_TO_GCOV_INDEX): move more to the front.
+ 	(output_location): Break out from ....
+ 	(branch_prob): ... here; handle gcov output on trees.
+ 	* toplev.c (process_options): No longer be sorry about coverage for
+ 	trees.
+ 
+ 2004-09-11  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	PR c++/17412
+ 	* fold-const.c (fold): Do not try to fold the operand of a
+ 	CLEANUP_POINT_EXPR if that operand does itself not have any
+ 	operands.
+ 
+ 	PR middle-end/17417
+ 	* langhooks.c (lhd_decl_printable_name): Make sure that this
+ 	function is called with is a decl node that has an identifier.
+ 	* tree-pretty-print.c (dump_function_name): New function to
+ 	wrap PRINT_FUNCTION_NAME and dump_decl_name.
+ 	(print_call_name): Use it.
+ 
+ 2004-09-11  Mohan Embar  <gnustuff@thisiscool.com>
+ 
+ 	* ggc-none.c: Include "bconfig.h" if -DGENERATOR_FILE,
+ 	"config.h" if not.
+ 
+ 2004-09-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* tree-ssa-alias.c (collect_points_to_info_r): Handle
+ 	pointing to PTR + OFFSET as PTR, not as pointing to PTR or pointing
+ 	to OFFSET.
+ 
+ 2004-09-11  Richard Henderson  <rth@redhat.com>
+ 
+ 	* expr.c (expand_expr_addr_expr_1) Rename from expand_expr_addr_expr.
+ 	(expand_expr_addr_expr): New function.  Take ADDR_EXPR instead of the
+ 	operand of the ADDR_EXPR.
+ 	(expand_expr_real_1): Update to match.
+ 
+ 2004-09-11  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	PR target/17277
+ 	* config/rs6000/aix.h (MD_FROB_UPDATE_CONTEXT): Use __64BIT__ to
+ 	choose 64-bit version.
+ 
+ 2004-09-11  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR c/17396
+ 	* c-typeck.c (build_unary_op): Add legacy offsetof hack.
+ 
+ 2004-09-11  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* doc/cfg.texi, doc/hostconfig.texi, doc/install.texi,
+ 	doc/invoke.texi, doc/md.texi, doc/tm.texi, doc/tree-ssa.texi:
+ 	Insert @: after i.e. or e.g.
+ 
+ 2004-09-10  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* tree-pretty-print.c (dump_decl_name): Print unnamed decls as
+ 	D.xxx rather than <Dxxx>.
+ 
+ 2004-09-10  Adam Nemet  <anemet@lnxw.com>
+ 
+ 	* configure.ac (AC_MSG_CHECKING(what linker to use)):
+ 	in_tree_ld_is_elf should be true for LynxOS.
+ 	* configure: Regenerate.
+ 
+ 2004-09-10  Adam Nemet  <anemet@lnxw.com>
+ 
+ 	* Makefile.in (all.cross): Add srcextra.
+ 
+ 2004-09-10  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	PR middle-end/17024
+ 	* fold-const.c (fold_cond_expr_with_comparison): Handle unordered
+ 	floating point comparison operators.  Change aborts to gcc_asserts.
+ 
+ 2004-09-10  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* final.c (output_asm_insn): Correct problem with -fverbose-asm.
+ 
+ 2004-09-10  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	* Makefile.in (LIBGCC_DEPS): Delete duplicate stmp-int-hdrs reference.
+ 	(stmp-fixproto): Change stmp-int-headers to stmp-int-hdrs in comment.
+ 
+ 	* convert.c (convert_to_vector): Replace recursive call with
+ 	error_mark_node.
+ 
+ 	* emit-rtl.c (gen_const_vector): Renamed from gen_const_vector_0.
+ 	Add integer argument named constant.  Use const_tiny_rtx instead of
+ 	CONST0_RTX.
+ 	(gen_rtx_CONST_VECTOR): Rewrite to handle checks for both CONST0_RTX
+ 	and CONST1_RTX.
+ 	(init_emit_once): Fix users of gen_const_vector.  Set CONST1_RTX for
+ 	vector types.
+ 	* expr.c (const_vector_from_tree): Call gen_rtx_CONST_VECTOR instead
+ 	of gen_rtx_raw_CONST_VECTOR.
+ 
+ 2004-09-10  Eric Christopher  <echristo@redhat.com>
+ 
+ 	PR c/16046
+ 	* c-parse.in (attribute): Add NULL_TREE for error case
+ 	for error recovery.
+ 
+ 2004-09-10  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* c-common.h (struct c_fileinfo): Comment moved here from cp-tree.h.
+ 	(extract_interface_info): Delete prototype.
+ 	* c-decl.c (extract_interface_info): Delete stub.
+ 	* c-lex.c (get_fileinfo): Initialize file_info_tree here, if
+ 	it's not already been done ...
+ 	(init_c_lex): ... not here.
+ 	(fe_file_change): Don't call extract_interface_info.
+ 
+ 2004-09-11  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-tree.h (struct c_declspecs): Remove typedef_decl.  Add
+ 	typedef_p and typedef_signed_p.
+ 	* c-decl.c (shadow_tag_warned): Check typedef_p, not typedef_decl.
+ 	(grokdeclarator): Don't use typedef_decl for warn_deprecated_use.
+ 	Check typedef_p and typedef_signed_p, not typedef_decl.
+ 	(grokfield): Check typedef_p, not typedef_decl.
+ 	(build_null_declspecs): Initialize typedef_p and typedef_signed_p,
+ 	not typedef_decl.
+ 	(declspecs_add_type): Set typedef_p and typedef_signed_p, not
+ 	typedef_decl.
+ 
+ 2004-09-10  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* doc/tm.texi, doc/tree-ssa.texi: Fix typos.
+ 
+ 2004-09-10  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* gimplify.c (create_tmp_var_raw): Don't name otherwise-nameless
+ 	temporary variables.
+ 
+ 	* dbxout.c (dbxout_block): Update for
+ 	current_function_func_begin_label a string.
+ 	* dwarf2out.c (dwarf2out_begin_prologue): Likewise.
+ 	* except.c (dw2_output_call_site_table): Likewise.
+ 	* toplev.c (current_function_func_begin_label): Likewise.
+ 	* tree.h (current_function_func_begin_label): Likewise.
+ 	* config/rs6000/linux64.h (DBX_OUTPUT_BRAC): Likewise.
+ 
+ 	* final.c (output_asm_insn): Use strtoul instead of atoi, save a
+ 	loop.
+ 
+ 	* config/darwin.c: Include target.h.
+ 	(struct machopic_indirection): Make ptr_name a string.
+ 	(machopic_indirection_hash): Update for ptr_name a string.
+ 	(machopic_indirection_eq): Likewise.
+ 	(machopic_indirection_name): Likewise.
+ 	(machopic_output_indirection): Likewise.
+ 	(machopic_validate_stub_or_non_lazy_ptr): Update for ptr_name a
+ 	string.  Don't expect stub names to be in the identifier hash table.
+ 	Do call strip_name_encoding before looking up entry in ID hash table.
+ 	* config/t-darwin (darwin.o): Add target.h to dependencies.
+ 
+ 	* gcc/config/rs6000/rs6000.c (print_operand): Use fputs instead
+ 	of fprintf for register names.
+ 
+ 	* output.h (unlikely_section_label): Delete declaration.
+ 	(unlikely_text_section_name): Likewise.
+ 	* varasm.c (unlikely_section_label_printed): Make static.
+ 	(unlikely_section_label): Likewise.
+ 	(unlikely_text_section_name): Likewise.
+ 	(assemble_start_function): Use reconcat.
+ 
+ 	* rtl.def (REG): Add comment to describe third field.
+ 
+ 2004-09-10  Andrew Pinski  <apinski@apple.com>
+ 
+ 	* config/darwin.c (machopic_mcount_stub_name): Call
+ 	machopic_indirection_name instead of making the string
+ 	ourselves.
+ 
+ 2004-09-10  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	Revert
+ 
+ 	2004-09-08  Jie Zhang  <zhangjie@magima.com.cn>
+ 
+ 	    * tree-ssa-alias.c (compute_flow_insensitive_aliasing): If type
+ 	    memory tag is call clobbered, so are its aliases.
+ 	    (group_aliases): When two memory tags being grouped, if one is
+ 	    call clobbered, so are the other and its aliases.
+ 	    (add_may_alias): Remove call-clobbering stuff.
+ 	    (replace_may_alias): Likewise.
+ 	    (merge_pointed_to_info): Merge pt_global_mem
+ 
+ 2004-09-10  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* bb-reorder.c, c-common.c, c-incpath.c, c-typeck.c,
+ 	genrecog.c, lambda-code.c, mips-tdump.c, mips-tfile.c,
+ 	passes.c, tree-data-ref.c, tree-data-ref.h, tree-mudflap.c,
+ 	tree-scalar-evolution.c, tree-ssa-copyrename.c,
+ 	tree-ssa-live.c, tree-ssa-live.h: Fix comment typos.
+ 
+ 2004-09-10  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/frv/frv.md (UNSPEC_MASACCS, UNSPEC_MDASACCS): New constants.
+ 	(maddaccs, msubaccs, *maddacc): Turn operand 0 into a single ACC/ACCG
+ 	pair.  Remove match_dup from inputs.  Remove masaccs handling.
+ 	(mdaddaccs, mdsubaccs, *mdaddacc): Likewise a dual ACC/ACCG pair.
+ 	(masaccs, mdasaccs): Turn into define_insns.
+ 
+ 2004-09-10  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* tree-tailcall.c (process_assignment): Only do accumulator transforms
+ 	for floating-point types if flag_unsafe_math_optimizations.
+ 
+ 2004-09-10  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* config/darwin.c, config/alpha/alpha.h, config/arm/arm.c,
+ 	config/arm/arm.h, config/arm/arm.md, config/arm/bpabi.h,
+ 	config/arm/predicates.md, config/frv/frv.c, config/frv/frv.md,
+ 	config/h8300/h8300.md, config/i386/gmm_malloc.h,
+ 	config/ia64/ia64.md, config/ip2k/libgcc.S,
+ 	config/mips/mips-ps-3d.md, config/mips/mips.c,
+ 	config/rs6000/rs6000.c, config/s390/s390.c,
+ 	config/sh/symbian.c: Fix comment typos.
+ 
+ 2004-09-10  Andreas Krebbel  <krebbel1@de.ibm.com>
+ 
+ 	* config/s390/s390.c (s390_emit_prologue): Added missing
+ 	"{}" brackets.
+ 
+ 2004-09-10  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* doc/extend.texi, doc/invoke.texi, doc/passes.texi: Fix
+ 	typos.  Follow spelling conventions.
+ 
+ 2004-09-10  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* toplev.c (warn_deprecated_use): Correct logic for saying "type"
+ 	in diagnostic.  Don't dereference NULL TYPE_NAME.
+ 
+ 2004-09-10  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* c-common.c, c-pch.c, defaults.h, lambda-code.c, passes.c,
+ 	tree-data-ref.c, tree-flow.h, tree-ssa-operands.c,
+ 	tree-ssa-threadupdate.c, tree-vectorizer.c, tree-vectorizer.h,
+ 	value-prof.c: Fix comment typos.  Follow spelling conventions.
+ 
+ 2004-09-10  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-ssa-dce.c (remove_dead_stmt): Update profile.
+ 	* tree-split_edge.c (tree_split_edge): Likewise.
+ 	(thread_jumps): Likewise.
+ 
+ 2004-09-10  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* cgraphunit.c, predict.c, tree-ssa-loop-ivopts.c: Fix comment
+ 	typos.
+ 
+ 2004-09-10  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* cgraph.h (cgraph_dump_file): Do not declare.
+ 	* cgraphunit.c (cgraph_dump_file): Declare as static.
+ 	(init_cgraph): New.
+ 	* toplev.c (cgraph_dump_file): Do not declare.
+ 	(compile_file): Call init_cgraph.
+ 	* tree-dump.c (dump_files): Add IPA dump file, remove
+ 	XML dump of call graph.
+ 	(get_dump_file_name): Support IPA dump file naming scheme.
+ 	* tree.h (enum tree_dump_index): Add IPA dump file, remove
+ 	XML dump of call graph.
+ 	* doc/invoke.texi (Debugging Options): Document the new options.
+ 
+ 2004-09-10  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* doc/extend.texi: Document the FR-V built-in functions.
+ 
+ 2004-09-09  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	* doc/sourcebuild.texi: Delete libbanshee reference.
+ 
+ 2004-09-10  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* Makefile.in (s-gtype): Add $(build_exeext) to gengtype command.
+ 
+ 2004-09-09  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	* c-typeck.c (convert_for_assignment): Check that rhs has VECTOR_TYPE
+ 	before calling vector_types_convertible_p.
+ 	(digest_init): Check that inside_init has VECTOR_TYPE before calling
+ 	vector_types_convertible_p.  Don't give another error if
+ 	convert_for_assignment returns error_mark_node.
+ 
+ 2004-09-09  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	PR middle-end/17055
+ 	* fold-const.c (build_zero_vector): New function to construct a
+ 	vector (either floating point or integer) of zeros.
+ 	(fold_convert): Internally, enable conversions of integer zero
+ 	to arbitrary vector types, using the new build_zero_vector.
+ 
+ 2004-09-09  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* config/i386/i386.c (ix86_expand_ashlsi3_const): New function to
+ 	expand a left shift by an immediate constant as either an ashl or
+ 	a sequence of additions.
+ 	(ix86_split_ashldi): Use new ix86_expand_ashlsi3_const function
+ 	instead of calling gen_ashlsi3 with a constant directly.
+ 
+ 2004-09-09  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* config/i386/i386.c (ix86_split_long_move): When optimizing for
+ 	size, and the low and high parts of a DImode constant are equal,
+ 	copy one register to another instead of loading the same immediate
+ 	value twice.
+ 
+ 2004-09-09  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR middle-end/17367
+ 	* function.c (assign_parm_setup_block): Only put PARALLELs into
+ 	a register if use_register_for_decl.
+ 
+ 2004-09-09  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* ra-colorize.c (reset_lists): Move variable declaration inside
+ 	ENABLE_CHECKING to avoid unused variable warnings when
+ 	not --enable-checking.
+ 	(check_colors): Ditto.
+ 
+ 2004-09-09  Mike Stump  <mrs@apple.com>
+ 
+ 	* version.c (version_string): Bump to 4.0.0.
+ 	* doc/include/gcc-common.texi (version-GCC): Likewise.
+ 
+ 2004-09-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* doc/extend.texi (nothrow attribute): The attribute is not
+ 	implemented in 3.2 and earlier.
+ 
+ 2004-09-09  Steve Ellcey  <sje@cup.hp.com>
+ 
+ 	* genrecog.c (compute_predicate_codes): Use op0_codes
+ 	instead of codes.
+ 
+ 2004-09-09  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* ra-colorize.c (hardregset_to_string): Adapt to HARD_REG_SET
+ 	implementation changes.
+ 
+ 2004-09-09  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* combine.c (try_combine): When swapping i2 and i3, newi2pat may be
+ 	a PARALLEL instead of a SET due to added clobbers.
+ 
+ 2004-09-09  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* reload.c (find_reloads_address): Pass correct operand to
+ 	maybe_memory_address_p.
+ 
+ 2004-09-09  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* Makefile.in: Remove libbanshee, tree-alias-*.
+ 	Remove tree-alias-common.h dependencies.
+ 	* common.opt: Remove -ftree-points-to.
+ 	* configure.ac: Remove libbanshee.
+ 	* flags.h: Remove pta_type, flag_tree_points_to.
+ 	* gengtype.c (open_base_files): Remove tree-alias-type.h.
+ 	* opts.c (OPT_ftree_points_to): Remove.
+ 	* toplev.c: Remove tree-alias-common.h, flag_tree_points_to.
+ 	* tree-dfa.c: Remove tree-alias-common.h
+ 	* tree-into-ssa.c: Ditto.
+ 	* tree-outof-ssa.c: Ditto.
+ 	* tree-ssa-copyrename.c: Ditto.
+ 	* tree-ssa-live.c: Ditto.
+ 	* tree-optimize.c: Ditto.
+ 	* tree-ssa.c: Ditto.
+ 	Remove pass_build_pta, pass_del_pta.
+ 	* tree-pass.h: Ditto.
+ 	* tree-ssa-alias.c: Remove tree-alias-common.h.
+ 	(struct alias_stats_d):	Remove pta_queries, pta_resolved.
+ 	(pass_may_alias): Remove PROP_pta requirement.
+ 	(may_alias_p): Remove pta_queries, pta_resolved, use of andersens.
+ 	(get_tmt_for): Ditto.
+ 	(dump_alias_stats): Ditto.
+ 	* doc/passes.texi: Remove blurb about points-to analysis.
+ 	* fortran/Make-lang.in: Remove tree-alias-*.o.
+ 
+ 2004-09-09  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* genattrtab.c (write_insn_cases): New function, split out from
+ 	write_attr_case.  Correctly handle define_peepholes when printing
+ 	the instruction name.
+ 	(write_attr_case, write_const_num_delay_slots): Use write_insn_cases.
+ 
+ 2004-09-09  Hans-Peter Nilsson  <hp@axis.com>
+ 
+ 	PR target/17377
+ 	* config/cris/cris-protos.h (cris_return_address_on_stack): Declare.
+ 	* config/cris/cris.c (cris_return_address_on_stack): New function.
+ 	* config/cris/cris.md ("return"): For location of return address,
+ 	also check cris_return_address_on_stack.
+ 
+ 2004-09-09  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-outof-ssa.c (coalesce_abnormal_edges): Fix typo in
+ 	calling phi_ssa_name_p.
+ 
+ 2004-09-09  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR c/17322
+ 	* c-typeck.c (valid_compound_expr_initializer): Use only
+ 	initializer_constant_valid_p, and not TREE_CONSTANT.
+ 	(digest_init): Likewise.
+ 	(output_init_element): Likewise.
+ 
+ 2004-09-09  Giovanni Bajo  <giovannibajo@gcc.gnu.org>
+ 
+ 	* ra-build.c (copy_insn_p, remember_move, defuse_overlap_p_1,
+ 	live_out_1, prune_hardregs_for_mode, init_one_web_common,
+ 	reinit_one_web, add_subweb, add_subweb_2, init_web_parts,
+ 	record_conflict, compare_and_free_webs, init_webs_defs_uses,
+ 	parts_to_webs_1, parts_to_webs, reset_conflicts,
+ 	check_conflict_numbers, remember_web_was_spilled, handle_asm_insn,
+ 	ra_build_free): Use gcc_assert and gcc_unreachable instead of abort.
+ 	* ra-colorize.c (push_list, put_web, reset_lists, put_web_at_end,
+ 	put_move, remove_move, combine, select_spill, colorize_one_web,
+ 	try_recolor_web, insert_coalesced_conflicts, check_colors,
+ 	break_precolored_alias, restore_conflicts_from_coalesce,
+ 	sort_and_combine_web_pairs, check_uncoalesced_moves): Likewise.
+ 	* ra-rewrite.c (spill_coalescing, slots_overlap_p, emit_loads,
+ 	reloads_to_loads, rewrite_program2, emit_colors): Likewise.
+ 	* ra.c (first_hard_reg, create_insn_info, find_subweb, init_ra,
+ 	check_df): Likewise.
+ 	* real.c (do_add, do_multiply, do_divide, do_compare, do_fix_trunc,
+ 	real_arithmetic, real_compare, real_exponent, real_ldexp,
+ 	real_identical, real_to_integer, real_to_integer2, real_to_decimal,
+ 	real_to_hexadecimal, real_from_integer, ten_to_ptwo, ten_to_mptwo,
+ 	real_digit, real_nan, real_maxval, round_for_format, real_convert,
+ 	real_to_target, real_from_target, real_hash, encode_ieee_single,
+ 	encode_ieee_double, encode_ieee_extended, encode_ieee_quad,
+ 	encode_vax_f, encode_vax_d, encode_vax_g, encode_i370_single,
+ 	encode_i370_double, encode_c4x_single, encode_c4x_extended): Likewise.
+ 	* recog.c (validate_change, validate_replace_rtx_1, asm_operand_ok,
+ 	extract_insn, peep2_next_insn, peep2_reg_dead_p,
+ 	peep2_find_free_register, peephole2_optimize, store_data_bypass_p,
+ 	if_test_bypass_p): Likewise.
+ 	* reg-stack.c (record_label_references, get_asm_operand_n_inputs,
+ 	stack_result, remove_regno_note, get_hard_regnum, emit_pop_insn,
+ 	emit_swap_insn, swap_to_top, move_for_stack_reg,
+ 	subst_stack_regs_pat, subst_asm_stack_regs, change_stack,
+ 	compensate_edge, convert_regs_1): Likewise.
+ 	* regclass.c (init_reg_sets, init_reg_sets_1,
+ 	memory_move_secondary_cost): Likewise.
+ 	* regrename.c (note_sets, clear_dead_regs, scan_rtx_reg, scan_rtx):
+ 	Likewise.
+ 	* reload.c (push_secondary_reload, find_valid_class, push_reload,
+ 	operands_match_p, decompose, immune_p, find_reloads,
+ 	find_reloads_toplev, find_reloads_address_1, subst_reloads,
+ 	copy_replacements, refers_to_regno_for_reload_p,
+ 	reg_overlap_mentioned_for_reload_p): Likewise.
+ 	* reload1.c (compute_use_by_pseudos, replace_pseudos_in, reload,
+ 	count_pseudo, find_reg, eliminate_regs, eliminate_regs_in_insn,
+ 	verify_initial_elim_offsets, finish_spills, clear_reload_reg_in_use,
+ 	reload_reg_free_p, reload_reg_reaches_end_p, reloads_conflict,
+ 	choose_reload_regs, merge_assigned_reloads, emit_input_reload_insns,
+ 	do_output_reload, fixup_abnormal_edges): Likewise.
+ 	* reorg.c (stop_search_p, emit_delay_sequence, get_jump_flags,
+ 	fill_slots_from_thread, relax_delay_slots): Likewise.
+ 	* resource.c (mark_referenced_resources, mark_set_resources):
+ 	Likewise.
+ 	* rtl.c (copy_rtx, rtx_equal_p): Likewise.
+ 	* rtlanal.c (insn_dependent_p, reg_overlap_mentioned_p,
+ 	dead_or_set_p, find_reg_fusage, remove_note, replace_rtx,
+ 	subreg_lsb_1, subreg_regno_offset, subreg_offset_representable_p,
+ 	find_first_parameter_load, can_hoist_insn_p, hoist_update_store,
+ 	hoist_insn_after, hoist_insn_to_edge, nonzero_bits1): Likewise.
+ 	* rtlhooks.c (gen_lowpart_general): Likewise.
+ 	* sbitmap.c (sbitmap_difference): Likewise.
+ 	* sched-deps.c (add_dependence, sched_analyze_1, sched_analyze_2,
+ 	sched_analyze, add_forward_dependence): Likewise.
+ 	* sched-ebb.c (fix_basic_block_boundaries, schedule_ebb): Likewise.
+ 	* sched-rgn.c (debug_regions, compute_trg_info, schedule_region,
+ 	schedule_insns): Likewise.
+ 	* sched-vis.c (print_pattern): Likewise.
+ 	* sdbout.c (sdbout_symbol, sdbout_toplevel_data): Likewise.
+ 	* simplify-rtx.c (simplify_unary_operation, simplify_binary_operation,
+ 	simplify_const_relational_operation, simplify_ternary_operation,
+ 	simplify_immed_subreg, simplify_subreg, simplify_gen_subreg):
+ 	Likewise.
+ 	* sreal.c (copy, sreal_sub, sreal_div): Likewise.
+ 	* stmt.c (force_label_rtx, expand_goto, expand_asm_operands,
+ 	resolve_operand_name_1, expand_return, expand_decl,
+ 	expand_anon_union_decl, emit_case_bit_tests, expand_case): Likewise.
+ 	* stor-layout.c (put_pending_size, smallest_mode_for_size,
+ 	int_mode_for_mode, layout_decl, finish_builtin_struct, layout_type,
+ 	set_sizetype, get_mode_bounds): Likewise.
+ 
+ 2004-09-09  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* defaults.h (MULTIPLE_SYMBOL_SPACES): Provide default.
+ 	* config/arm/pecoff.h, config/i386/beos-elf.h
+ 	* config/i386/cygming.h, config/i386/i386-interix.h:
+ 	Define MULTIPLE_SYMBOL_SPACES to 1, not nothing.  Remove
+ 	comment cloned from manual.
+ 	* doc/tm.texi: Update description of MULTIPLE_SYMBOL_SPACES.
+ 
+ 2004-09-09  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* builtins.c (build_va_arg_indirect_ref): New function.
+ 	(std_gimplify_va_arg_expr): Call it instead of mudflap check and
+ 	build_fold_indirect_ref.
+ 	* config/i386/i386.c (ix86_gimplify_va_arg): Ditto.
+ 	* config/ia64/ia64.c (ia64_gimplify_va_arg): Ditto.
+ 	* tree.h: Declare new function.
+ 
+ 2004-09-09  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* cgraphunit.c (cgraph_mark_functions_to_output): Renable node
+ 	dumping for development builds.
+ 	* emit-rtl.c (verify_rtx_sharing): Give verbose failure for
+ 	development builds only.
+ 	* genattrtab.c (write_eligible_delay): Fix typo in previous
+ 	commit.
+ 	* tree.c (iterative_hash_expr): Replace gcc_unreachable with
+ 	gcc_assert.
+ 
+ 2004-09-09  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* gcse.c (INSN_CUID, insert_set_in_table, find_avail_set,
+ 	cprop_insn, do_local_cprop, local_cprop_pass, find_bypass_set,
+ 	process_insert_insn, insert_insn_end_bb, pre_insert_copy_insn,
+ 	hoist_code, extract_mentioned_regs_helper, compute_store_table,
+ 	insert_store): Use gcc_assert and gcc_unreachable.
+ 	* ggc-common.c (ggc_splay_alloc, ggc_splay_dont_free,
+ 	gt_pch_note_object, gt_pch_note_reorder, relocate_ptrs,
+ 	ggc_record_overhead): Likewise.
+ 	* ggc-page.c (alloc_page, free_page, ggc_set_mark, ggc_marked_p,
+ 	init_ggc, ggc_push_context, ggc_recalculate_in_use_p,
+ 	ggc_pop_context, clear_marks, validate_free_objects,
+ 	ggc_pch_read): Likewise.
+ 	* ggc-zone.c (ggc_allocated_p, free_chunk, ggc_set_mark,
+ 	ggc_marked_p, ggc_get_size, init_ggc, destroy_ggc_zone,
+ 	ggc_push_context, check_cookies, ggc_collect,
+ 	ggc_print_statistics): Likewise.
+ 	* gimple-low.c (lower_function_body, lower_stmt,
+ 	lower_bind_expr): Likewise.
+ 	* gimplify.c (gimple_tree_eq, push_gimplify_context,
+ 	pop_gimplify_context, gimple_pop_condition, create_tmp_var,
+ 	declare_tmp_vars, gimple_add_tmp_var, annotate_all_with_locus,
+ 	mostly_copy_tree_r, gimplify_return_expr, gimplify_switch_expr,
+ 	gimplify_case_label_expr, gimplify_exit_block_expr,
+ 	canonicalize_component_ref, gimplify_compound_lval,
+ 	gimplify_self_mod_expr, gimplify_call_expr,
+ 	gimplify_init_ctor_eval, gimplify_init_constructor,
+ 	gimplify_modify_expr, gimplify_save_expr, gimplify_target_expr,
+ 	gimplify_expr, check_pointer_types_r,
+ 	force_gimple_operand): Likewise.
+ 	* global.c (global_alloc, build_insn_chain): Likewise.
+ 	* graph.c (clean_graph_dump_file,
+ 	finish_graph_dump_file): Likewise.
+ 	gcov-io.c (gcov_open): Use GCOV_CHECK.
+ 
+ 2004-09-09  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/frv/frv.c (acc_operand, accg_operand): Use REGNO.
+ 
+ 2004-09-09  Jan Hubicka  <jh@suse.cz>
+ 
+ 	middle-end/17128
+ 	* tree-inline.c (expand_call_inline): Make overactive sanity check
+ 	happy.
+ 
+ 2004-09-09  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-ssa-loop-ivopts.c (peel_address): Fix abort on
+ 	VIEW_CONVERT_EXPR.
+ 
+ 2004-09-09  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* Makefile.in (gengtype): Use $(BUILD_ERRORS).
+ 	(gengtype.o): Depend on errors.h.
+ 	* genattrtab.c (strcmp_check): Use gcc_assert and gcc_unreachable.
+ 	(attr_rtx_1, attr_printf, attr_copy_rtx, evaluate_eq_attr,
+ 	attr_alt_subset_p, attr_alt_subset_of_compl_p,
+ 	attr_alt_intersection, attr_alt_union, optimize_attrs, gen_insn,
+ 	write_test_expr, write_attr_value, write_eligible_delay,
+ 	make_internal_attr, make_numeric_value): Likewise.
+ 	* genautomata.c (regexp_name, get_str_vect,
+ 	gen_presence_absence_set, automaton_decl_hash,
+ 	automaton_decl_eq_p, insn_decl_hash, insn_decl_eq_p, decl_hash,
+ 	decl_eq_p, process_regexp, loop_in_regexp, check_loops_in_regexps,
+ 	process_regexp_cycles, reserv_sets_cmp, set_unit_reserv,
+ 	test_unit_reserv, it_is_empty_reserv_sets,
+ 	reserv_sets_are_intersected, reserv_sets_shift, reserv_sets_or,
+ 	reserv_sets_and, output_cycle_reservs, get_free_state,
+ 	intersected_state_reservs_p, states_union, remove_arc,
+ 	copy_insn_regexp, transform_1, transform_2, transform_3,
+ 	regexp_transform_func, store_alt_unit_usage,
+ 	check_regexp_units_distribution, process_seq_for_forming_states,
+ 	process_alts_for_forming_states, make_automaton,
+ 	form_arcs_marked_by_insn, create_composed_state,
+ 	set_out_arc_insns_equiv_num, partition_equiv_class,
+ 	process_insn_equiv_class, set_insn_equiv_classes,
+ 	units_to_automata_heuristic_distr, form_regexp,
+ 	longest_path_length, output_dfa_max_issue_rate, add_vect,
+ 	out_state_arcs_num, add_vect_el, output_trans_table,
+ 	output_state_alts_table, output_dead_lock_vect,
+ 	output_max_insn_queue_index_def,
+ 	output_min_insn_conflict_delay_func,
+ 	output_internal_insn_latency_func, output_print_reservation_func,
+ 	output_cpu_unit_reservation_p, output_state_arcs,
+ 	make_insn_alts_attr, make_internal_dfa_insn_code_attr,
+ 	make_default_insn_latency_attr,
+ 	form_important_insn_automata_lists): Likewise.
+ 	* genemit.c (gen_exp, output_add_clobbers,
+ 	output_added_clobbers_hard_reg_p): Likewise.
+ 	* genextract.c (print_path, main): Likewise.
+ 	* genflags.c (gen_macro): Likewise.
+ 	* gengenrtl.c: Include errors.h
+ 	(type_from_format, accessor_from_format): Likewise.
+ 	* gengtype.c (get_file_basename, output_mangled_typename,
+ 	walk_type, write_types_process_field,
+ 	write_types_local_process_field): Likewise.
+ 	* genmodes.c (complete_mode): Likewise.
+ 	* genopinit.c (gen_insn): Likewise.
+ 	* genoutput.c (output_insn_data, check_constraint_len,
+ 	constraint_len): Likewise.
+ 	* genpreds.c (add_mode_tests):Likewise.
+ 	* gen-protos.c (add_hash): Likewise.
+ 	* genrecog.c (find_operand, find_matching_operand,
+ 	validate_pattern, add_to_sequence, maybe_both_true,
+ 	nodes_identical_1, merge_trees, write_switch, write_cond,
+ 	write_action, is_unconditional, make_insn_sequence,
+ 	debug_decision_2): Likewise.
+ 	* gensupport.c (is_predicable, collect_insn_data,
+ 	alter_predicate_for_insn, maybe_eval_c_test): Likewise.
+ 
+ 2004-09-09  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* basic-block.h (guess_outgoing_edge_probabilities): Declare.
+ 	* cfgbuild.c (compute_outgoing_frequencies): When probability is
+ 	missing, guess it.
+ 	(find_many_sub_basic_blocks): Do update profile only when it is
+ 	present.
+ 	* predict.c (set_even_probabilities): Break out from ...
+ 	(combine_predictions_for_insn): ... here; deal with
+ 	!can_predict_insn_p insns.
+ 	(combine_predictions_for_bb): Use set_even_probabilities.
+ 	(bb_estimate_probability_locally): Break out from ....
+ 	(estimate_probability): ... here.
+ 	(guess_outgoing_edge_probabilities): New entry point.
+ 
+ 2004-09-09  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* gcc.c (add_sysrooted_prefix, execute, do_self_spec, do_spec_1,
+ 	handle_braces, process_brace_body, main, used_arg,
+ 	set_multilib_dir, print_multilib_info): Use fatal, not abort.
+ 
+ 	* tree-nested.c (create_tmp_var_for): Correct missinverted assert.
+ 
+ 	* tree-outof-ssa.c (free_temp_expr_table): Add missed assert.
+ 	* tree-ssa-ccp.c (set_lattice_value): Correct missapplied de
+ 	Morgan's theorem in last checkin.
+ 
+ 2004-09-09  Giovanni Bajo  <giovannibajo@gcc.gnu.org>
+ 	    Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* targhooks.c (default_unwind_emit, default_scalar_mode_supported_p):
+ 	Use gcc_assert, gcc_unreachable & internal_error instead of abort.
+ 	* timevar.c (timevar_push, timevar_pop, timevar_start,
+ 	timevar_stop): Likewise.
+ 	* toplev.c (default_pch_valid_p): Likewise.
+ 	* tracer.c (tail_duplicate): Likewise.
+ 	* tree-alias-common.c (get_alias_var_decl,
+ 	get_values_from_constructor, create_alias_var, delete_alias_vars,
+ 	empty_points_to_set, same_points_to_set, ptr_may_alias_var):
+ 	Likewise.
+ 	* tree.c (tree_size, make_node_stat, copy_node_stat,
+ 	build_int_cst_wide, integer_all_onesp, list_length, chainon,
+ 	tree_node_structure, type_contains_placeholder_p, substitute_in_expr,
+ 	substitute_placeholder_in_expr, tabilize_reference_1, build0_stat,
+ 	build1_stat, build2_stat, build3_stat, build4_stat, is_attribute_p,
+ 	lookup_attribute, type_hash_canon, host_integerp, iterative_hash_expr,
+ 	build_method_type_directly, decl_type_context, get_callee_fndecl,
+ 	get_set_constructor_bits, build_vector_type_for_mode, int_cst_value,
+ 	tree_fold_gcd): Likewise.
+ 	* tree-cfg.c (create_bb, make_ctrl_stmt_edges, make_exit_edges,
+ 	make_cond_expr_edges, group_case_labels, tree_merge_blocks,
+ 	cleanup_control_expr_graph, find_taken_edge,
+ 	find_taken_edge_switch_expr, phi_alternatives_equal,
+ 	is_ctrl_altering_stmt, disband_implicit_edges, set_bb_for_stmt,
+ 	stmt_for_bsi, tree_find_edge_insert_loc, bsi_insert_on_edge_immediate,
+ 	tree_split_edge, tree_verify_flow_info, thread_jumps,
+ 	tree_redirect_edge_and_branch, tree_flow_call_edges_add): Likewise.
+ 	* tree-chrec.c (chrec_fold_poly_cst, chrec_fold_plus_poly_poly,
+ 	chrec_fold_multiply_poly_poly): Likewise.
+ 	* tree-complex.c (extract_component, expand_complex_division,
+ 	expand_complex_comparison, expand_complex_operations_1,
+ 	build_replicated_const, expand_vector_operations_1): Likewise.
+ 	* tree-data-ref.c (tree_fold_bezout, build_classic_dist_vector,
+ 	build_classic_dir_vector): Likewise.
+ 	* tree-dfa.c (compute_immediate_uses_for_phi,
+ 	compute_immediate_uses_for_stmt, create_var_ann, create_stmt_ann,
+ 	create_tree_ann, collect_dfa_stats, get_virtual_var): Likewise.
+ 	* tree-dump.c (dequeue_and_dump): Likewise.
+ 	* tree-eh.c (record_stmt_eh_region, add_stmt_to_eh_region,
+ 	record_in_finally_tree, replace_goto_queue_1,
+ 	maybe_record_in_goto_queue, verify_norecord_switch_expr,
+ 	do_return_redirection): Likewise.
+ 	* tree-if-conv.c (tree_if_convert_stmt, tree_if_convert_cond_expr,
+ 	add_to_dst_predicate_list, find_phi_replacement_condition,
+ 	replace_phi_with_cond_modify_expr, get_loop_body_in_if_conv_order):
+ 	Likewise.
+ 	* tree-inline.c (remap_decl, remap_type, remap_decls, copy_body_r,
+ 	initialize_inlined_parameters, declare_return_variable,
+ 	estimate_num_insns_1, expand_call_inline, expand_calls_inline,
+ 	optimize_inline_calls, copy_tree_r): Likewise.
+ 	* tree-into-ssa.c (rewrite_initialize_block_local_data, rewrite_stmt,
+ 	ssa_rewrite_stmt, rewrite_into_ssa): Likewise.
+ 	* tree-iterator.c (alloc_stmt_list, tsi_link_before, tsi_link_after,
+ 	tsi_split_statement_list_after, tsi_split_statement_list_before):
+ 	Likewise.
+ 	* tree-mudflap.c (mf_varname_tree): Likewise.
+ 	* tree-nested.c (create_tmp_var_for, lookup_field_for_decl,
+ 	lookup_tramp_for_decl, convert_all_function_calls): Likewise.
+ 	* tree-optimize.c (tree_rest_of_compilation): Likewise.
+ 	* tree-outof-ssa.c (create_temp, eliminate_build, eliminate_phi,
+ 	coalesce_abnormal_edges, coalesce_ssa_name, eliminate_virtual_phis,
+ 	free_temp_expr_table, add_dependance, finish_expr, rewrite_trees):
+ 	Likewise.
+ 	* tree-phinodes.c (resize_phi_node, add_phi_arg,
+ 	remove_all_phi_nodes_for): Likewise.
+ 	* tree-pretty-print.c (op_prio, print_call_name): Likewise.
+ 	* tree-profile.c (tree_gen_interval_profiler, tree_gen_pow2_profiler,
+ 	tree_gen_one_value_profiler, tree_gen_const_delta_profiler): Likewise.
+ 	* tree-sra.c (type_can_instantiate_all_elements, sra_hash_tree,
+ 	sra_elt_eq, sra_walk_expr, instantiate_missing_elements,
+ 	generate_one_element_ref, generate_element_copy,
+ 	generate_element_zero, scalarize_copy, scalarize_init,
+ 	scalarize_ldst): Likewise.
+ 	* tree-ssa-alias.c (delete_alias_info, group_aliases, may_alias_p,
+ 	add_may_alias, add_pointed_to_expr, add_pointed_to_var,
+ 	collect_points_to_info_r, get_tmt_for, get_ptr_info): Likewise.
+ 	* tree-ssa.c (walk_use_def_chains, check_phi_redundancy): Likewise.
+ 	* tree-ssa-ccp.c (dump_lattice_value, get_default_value, get_value,
+ 	set_lattice_value, likely_value, ccp_visit_phi_node, visit_assignment,
+ 	widen_bitfield, ccp_fold_builtin): Likewise.
+ 	* tree-ssa-copy.c (may_propagate_copy, merge_alias_info,
+ 	replace_exp_1, propagate_tree_value): Likewise.
+ 	* tree-ssa-copyrename.c (copy_rename_partition_coalesce): Likewise.
+ 	* tree-ssa-dce.c (set_control_dependence_map_bit,
+ 	find_control_dependence, find_pdom, mark_operand_necessary,
+ 	mark_stmt_if_obviously_necessary,
+ 	mark_control_dependent_edges_necessary, remove_dead_stmt): Likewise.
+ 	* tree-ssa-dom.c (dom_opt_initialize_block_local_data,
+ 	simplify_switch_and_lookup_avail_expr, cprop_into_successor_phis,
+ 	eliminate_redundant_computations, avail_expr_eq): Likewise.
+ 	* tree-ssa-dse.c (fix_stmt_v_may_defs): Likewise.
+ 	* tree-ssa-loop-ch.c (should_duplicate_loop_header_p,
+ 	duplicate_blocks): Likewise.
+ 	* tree-ssa-loop-im.c (for_each_index, set_level,
+ 	is_call_clobbered_ref): Likewise.
+ 	* tree-ssa-loop-ivopts.c (dump_use, divide, stmt_after_ip_normal_pos,
+ 	stmt_after_increment, set_iv, contains_abnormal_ssa_name_p,
+ 	find_interesting_uses_outer_or_nonlin, add_derived_ivs_candidates,
+ 	peel_address, ptr_difference_cost, may_replace_final_value,
+ 	determine_use_iv_cost, rewrite_use_nonlinear_expr, rewrite_use_outer,
+ 	rewrite_use, rewrite_uses): Likewise.
+ 	* tree-ssa-loop-manip.c (rewrite_into_loop_closed_ssa,
+ 	check_loop_closed_ssa_use): Likewise.
+ 	* tree-ssanames.c (make_ssa_name): Likewise.
+ 	* tree-ssa-operands.c (finalize_ssa_defs, finalize_ssa_uses,
+ 	finalize_ssa_v_must_defs, finalize_ssa_stmt_operands,
+ 	get_stmt_operands, get_expr_operands, get_asm_expr_operands,
+ 	get_indirect_ref_operands, add_stmt_operand): Likewise.
+ 	* tree-ssa-pre.c (value_exists_in_set_bitmap,
+ 	value_remove_from_set_bitmap, bitmap_insert_into_set, insert_into_set,
+ 	phi_translate, valid_in_set, compute_antic,
+ 	find_or_generate_expression, create_expression_by_pieces, insert_aux,
+ 	create_value_expr_from, eliminate): Likewise.
+ 	* tree-ssa-propagate.c (cfg_blocks_get): Likewise.
+ 	* tree-ssa-threadupdate.c (remove_last_stmt_and_useless_edges):
+ 	Likewise.
+ 	* tree-tailcall.c (independent_of_stmt_p, adjust_return_value,
+ 	eliminate_tail_call): Likewise.
+ 	* tree-vectorizer.c (vect_create_index_for_array_ref,
+ 	vect_align_data_ref, vect_create_data_ref,
+ 	vect_create_destination_var, vect_get_vec_def_for_operand,
+ 	vect_finish_stmt_generation, vect_transform_stmt,
+ 	vect_transform_loop_bound, vect_transform_loop,
+ 	vect_analyze_operations): Likewise.
+ 	* tree-vn.c (vn_compute, set_value_handle, get_value_handle):
+ 	Likewise.
+ 	* tree-flow-inline.h (var_ann, get_var_ann, get_def_from_ptr,
+ 	get_use_op_ptr, immediate_use, phi_ssa_name_p, bsi_start,
+ 	bsi_after_labels, bsi_last): Likewise.
+ 	* tree-ssa-live.c (var_union, change_partition_var,
+ 	create_ssa_var_map, calculate_live_on_entry, root_var_init,
+ 	type_var_init, add_coalesce, sort_coalesce_list, pop_best_coalesce):
+ 	Likewise.
+ 	* tree-ssa-live.h (partition_is_global, live_entry_blocks,
+ 	tpa_find_tree): Likewise.
+ 	(register_ssa_partition_check): Declare.
+ 	(register_ssa_partition): use it.
+ 	* tree-ssa-live.c: Include errors.h.
+ 	(register_ssa_partition_check): New.
+ 	* tree-ssa-operands.c: Include errors.h.
+ 	* Makefile.in (tree-ssa-operands.o): Depend on errors.h.
+ 
+ 2004-09-09  Richard Sandiford  <rsandifo@redhat.com>
+ 	    Catherine Moore  <clm@redhat.com>
+ 
+ 	* config/frv/frv-protos.h (FRV_CPU_FR550, FRV_CPU_FR450)
+ 	(FRV_CPU_FR405): New processor enums.
+ 	(frv_issue_rate, frv_acc_group): Declare.
+ 	* config/frv/frv.h (CPP_SPEC, CPP_FRV_SPEC, CPP_FR500_SPEC): Delete.
+ 	(CPP_FR400_SPEC, CPP_SIMPLE_SPEC): Delete.
+ 	(MASK_DEFAULT_FR550, MASK_DEFAULT_FR450): New macros.
+ 	(SUBTARGET_EXTRA_SPECS, EXTRA_SPECS, CPP_CPU_DEFAULT_SPEC): Delete.
+ 	(TARGET_CPU_CPP_BUILTINS): Define the macros that were previously
+ 	handled by CPP_SPEC.
+ 	(MASK_LONG_CALLS, TARGET_LONG_CALLS): New macros.
+ 	(MASK_ALIGN_LABELS, TARGET_ALIGN_LABELS): New macros.
+ 	(ACC_MASK): New macro.
+ 	(TARGET_MEDIA_REV2): Include FRV_CPU_{FR405,FR450,FR550}.
+ 	(TARGET_MEDIA_FR450): New macro.
+ 	(TARGET_FR500_FR550_BUILTINS, TARGET_FR405_BUILTINS): New macros.
+ 	(TARGET_SWITCHES): Add -m{no-,}align-labels and -m{no-,}long-calls.
+ 	(LABEL_ALIGN_AFTER_BARRIER): Define.
+ 	(ACC_LAST, ACCG_LAST): Add four new accumulator registers.
+ 	(IACC_FIRST, IACC_LAST): New pair of SPRs.
+ 	(ACCG_FIRST, AP_FIRST, SPR_FIRST, SPR_LAST): Adjust accordingly.
+ 	(FIXED_REGISTERS, CALL_USED_REGISTERS, REG_ALLOC_ORDER)
+ 	(REGISTER_NAMES): Add entries for new registers.
+ 	(REG_CLASS_CONTENTS): Update for new register ranges.
+ 	(EXTRA_CONSTRAINT_FOR_S): Redefine in terms of call_operand.
+ 	(ISSUE_RATE, CLEAR_VLIW_START, SET_VLIW_START): Delete.
+ 	(PACKING_FLAG_USED_P): Delete.
+ 	(FRV_BUILTIN_MQLCLRHS, FRV_BUILTIN_MQLMTHS, FRV_BUILTIN_MQSLLHI)
+ 	(FRV_BUILTIN_MQSRAHI, FRV_BUILTIN_SMUL, FRV_BUILTIN_UMUL)
+ 	(FRV_BUILTIN_PREFETCH0, FRV_BUILTIN_PREFETCH, FRV_BUILTIN_SMASS)
+ 	(FRV_BUILTIN_SMSSS, FRV_BUILTIN_SMU, FRV_BUILTIN_SCUTSS)
+ 	(FRV_BUILTIN_ADDSS, FRV_BUILTIN_SUBSS, FRV_BUILTIN_SLASS)
+ 	(FRV_BUILTIN_IACCread{l,ll}, FRV_BUILTIN_IACCset{ll,l})
+ 	(FRV_BUILTIN_SCAN): New members of frv_builtin_enum.
+ 	(FRV_BUILTIN_FIRST_NONMEDIA): New macro.
+ 	(CPU_UNITS_QUERY): Define to 1.
+ 	* config/frv/frv.c: Include gt-frv.h
+ 	(NUM_NOP_PATTERNS, NTH_UNIT, UNIT_NUMBER, PACKING_FLAG_P): New macros.
+ 	(SET_PACKING_FLAG, CLEAR_PACKING_FLAG, FOR_EACH_REGNO): New macros.
+ 	(frv_insn_group): New enumeration.
+ 	(frv_unit_names, frv_unit_groups, frv_unit_codes): New variables.
+ 	(frv_type_to_unit, frv_nops, frv_num_nops): New variables.
+ 	(REGSTATE_DEAD, REGSTATE_LIVE, REGSTATE_UNUSED, REGSTATE_MASK)
+ 	(REGSTATE_CONDJUMP): Delete.  Shuffle other numbers to cover the
+ 	gap left by REGSTATE_LIVE.
+ 	(regstate_t): New typedef.
+ 	(TARGET_MACHINE_DEPENDENT_REORG): Define.
+ 	(frv_default_flags_for_cpu): Handle FRV_CPU_{FR550,FR450,FR405}.
+ 	(frv_override_options): Check for -mcpu={fr550,fr450,fr405}.
+ 	Initialize frv_unit_codes[] and frv_type_to_unit[].
+ 	(frv_conditional_register_usage): Remove redundant fixing of
+ 	accumulator registers.
+ 	(frv_insn_packing_flag): Update specification.
+ 	(frv_function_prologue): Don't set frv_insn_packing_flag here.
+ 	Zero out frv_nops[].
+ 	(frv_expand_epilogue): Remove comments about the no-longer-present
+ 	SIBCALL_P argument.
+ 	(frv_asm_output_mi_thunk): Check frv_issue_rate() rather than
+ 	PACKING_FLAG_USED_P() when deciding whether to pack instructions.
+ 	(frv_asm_output_opcode, frv_final_prescan_insn): Simplify in light
+ 	of the new meaning of frv_insn_packing_flag.  Emit an mnop.p if
+ 	packing is disabled and if INSN can only issue to M1.
+ 	(call_operand): Check TARGET_LONG_CALLS.
+ 	(acc_operand, even_acc_operand, quad_acc_operand)
+ 	(accg_operand): Simplify.  Don't accept pseudo registers.
+ 	(output_move_single): Handle SPR<-zero moves.
+ 	(frv_issue_rate): Make non-static.  Handle FRV_CPU_{FR550,FR450,FR405}.
+ 	(frv_registers_update, frv_registers_used_p): Delete.
+ 	(frv_registers_set_p): Delete.
+ 	(frv_acc_group_1, frv_acc_group, frv_insn_unit): New functions.
+ 	(frv_issues_to_branch_unit_p): New function.
+ 	(frv_packet): New structure.
+ 	(frv_cond_flags, frv_regstate_conflict_p): New functions.
+ 	(frv_registers_conflict_p_1, frv_registers_conflict_p): New functions.
+ 	(frv_registers_update_1, frv_registers_update): New functions.
+ 	(frv_start_packet, frv_start_packet_block, frv_finish_packet)
+ 	(frv_pack_insn_p, frv_add_insn_to_packet, frv_insert_nop_in_packet)
+ 	(frv_for_each_packet, frv_sort_insn_group_1, frv_compare_insns)
+ 	(frv_sort_insn_group, frv_reorder_packet): New functions.
+ 	(frv_pack_insns): Use frv_reorder_packet.
+ 	(frv_packet_address): New variable.
+ 	(frv_fill_unused_units, frv_align_label, frv_reorg_packet)
+ 	(frv_register_nop, frv_reorg): New functions.
+ 	(bdesc_1arg): Add __SCUTSS.
+ 	(bdesc_2arg): Add __MQLCLRHS, __MQLMTHS, __SMUL, __UMUL, __ADDSS,
+ 	__SUBSS, __SLASS and __SCAN.
+ 	(bdesc_2argimm): Add __MQSLLHI and __MQSRAHI.
+ 	(bdesc_int_void2arg, bdesc_prefetches): New arrays.
+ 	(frv_init_builtins): Register the above builtins.
+ 	(frv_int_to_acc): Use ACC_MASK to check for valid accumulator
+ 	registers.  Turn the referenced accumulators into global registers.
+ 	(frv_read_iacc_argument): New function.
+ 	(frv_expand_int_void2arg, frv_expand_prefetches): New functions.
+ 	(frv_split_iacc_move): New function.
+ 	(frv_expand_builtin): Handle the new builtins.
+ 	* config/frv/frv.md: Replace old schedulers with new order-independent
+ 	ones.  Add schedulers for the FR405, FR450 and FR550.  Describe new
+ 	packing algorithm.
+ 	(cpu): Add fr550, fr450 and fr405.
+ 	(type): Add macc, scan, cut, fnop, fscmp, fdcmp, mnop, mqlimh and
+ 	mqshift.  Replace fmas with fsmadd and fmad with fdmadd.  Delete m7.
+ 	(*muladd[sd]f4, *mulsub[sd]f4): Fix types.
+ 	(*cmp[sd]f_cc_fp): Use new f[sd]cmp types.
+ 	(fnop, mnop): New patterns.
+ 	(UNSPEC_MQLCLRHS, UNSPEC_MQLMTHS, UNSPEC_MQSLLHI, UNSPEC_MQSRAHI):
+ 	New constants.
+ 	(mexpdhw, *cond_exec_mexpdhw): Fix destination operands.
+ 	(mclracca8): Use ACC_MASK to determine the upper set of accumulator
+ 	registers.
+ 	(mqlclrhs, mqlmths, mqsllhi, mqsrahi): New patterns.
+ 	(UNSPEC_SMUL, UNSPEC_UMUL, UNSPEC_SMU, UNSPEC_ADDSS, UNSPEC_SUBSS)
+ 	(UNSPEC_SLASS, UNSPEC_SCAN, UNSPEC_INTSS, UNSPEC_SCUTSS)
+ 	(UNSPEC_PREFETCH0, UNSPEC_PREFETCH, UNSPEC_IACCreadll)
+ 	(UNSPEC_IACCreadl, UNSPEC_IACCsetll, UNSPEC_IACCsetl, UNSPEC_SMASS)
+ 	(UNSPEC_SMSSS, UNSPEC_IMUL, IACC0_REG): New constants.
+ 	(smul, umul, smass, smsss, smu, addss, subss, slass, scan, scutss)
+ 	(frv_prefetch0, frv_prefetch): New patterns.
+ 	* config/frv/t-frv (MULTILIB_OPTIONS): Remove -mcpu=frv and
+ 	-mcpu=simple.  Add -mcpu=fr550.
+ 	(MULTILIB_DIRNAMES): Update accordingly.
+ 	(MULTILIB_MATCHES): Use the fr400 multilibs for -mcpu=fr405 and
+ 	-mcpu=fr450.
+ 	* doc/invoke.texi: Document the new -mcpu={fr550,fr450,fr405},
+ 	-mlong-calls and -malign-labels options for FR-V.
+ 
+ 2004-09-09  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	PR c/8420
+ 	* c-tree.h (struct c_declspecs): New.
+ 	(struct c_declarator, struct c_type_name, struct c_parm): Update
+ 	element types.
+ 	(build_array_declarator, grokfield, shadow_tag, shadow_tag_warned,
+ 	start_function, start_decl, build_c_parm,
+ 	make_pointer_declarator): Update prototypes.
+ 	(build_null_declspecs, declspecs_add_qual, declspecs_add_type,
+ 	declspecs_add_scspec, declspecs_add_attrs): New.
+ 	(split_specs_attrs): Remove.
+ 	* c-parse.in (%union): Add dsptype.
+ 	(declspecs_nosc_nots_nosa_noea, declspecs_nosc_nots_nosa_ea,
+ 	declspecs_nosc_nots_sa_noea, declspecs_nosc_nots_sa_ea,
+ 	declspecs_nosc_ts_nosa_noea, declspecs_nosc_ts_nosa_ea,
+ 	declspecs_nosc_ts_sa_noea, declspecs_nosc_ts_sa_ea,
+ 	declspecs_sc_nots_nosa_noea, declspecs_sc_nots_nosa_ea,
+ 	declspecs_sc_nots_sa_noea, declspecs_sc_nots_sa_ea,
+ 	declspecs_sc_ts_nosa_noea, declspecs_sc_ts_nosa_ea,
+ 	declspecs_sc_ts_sa_noea, declspecs_sc_ts_sa_ea, declspecs_ts,
+ 	declspecs_nots, declspecs_ts_nosa, declspecs_nots_nosa,
+ 	declspecs_nosc_ts, declspecs_nosc_nots, declspecs_nosc, declspecs,
+ 	maybe_type_quals_attrs): Change to dsptype.
+ 	(struct c_declspec_stack): New.
+ 	(current_declspecs, declspec_stack): Change type.
+ 	(PUSH_DECLSPEC_STACK, POP_DECLSPEC_STACK): Update to new
+ 	structures.
+ 	(extdefs): Likewise.
+ 	(setspecs): Likewise.
+ 	(fndef): Use current_declspecs for empty declspecs list.
+ 	(declspecs_nosc_nots_nosa_noea, declspecs_nosc_nots_nosa_ea,
+ 	declspecs_nosc_nots_sa_noea, declspecs_nosc_nots_sa_ea,
+ 	declspecs_nosc_ts_nosa_noea, declspecs_nosc_ts_nosa_ea,
+ 	declspecs_nosc_ts_sa_noea, declspecs_nosc_ts_sa_ea,
+ 	declspecs_sc_nots_nosa_noea, declspecs_sc_nots_nosa_ea,
+ 	declspecs_sc_nots_sa_noea, declspecs_sc_nots_sa_ea,
+ 	declspecs_sc_ts_nosa_noea, declspecs_sc_ts_nosa_ea,
+ 	declspecs_sc_ts_sa_noea, declspecs_sc_ts_sa_ea): Update to new
+ 	structures and helper functions.  Update comments.
+ 	(typespec_nonattr): Correct comment.
+ 	(maybe_type_quals_attrs, typename): Update to new structures.
+ 	* c-decl.c (grokdeclarator, build_array_declarator, grokfield,
+ 	shadow_tag, shadow_tag_warned, start_function, start_decl,
+ 	build_c_parm, make_pointer_declarator,
+ 	set_array_declarator_inner, groktypename): Update to new
+ 	structures.
+ 	(build_null_declspecs, declspecs_add_qual, declspecs_add_type,
+ 	declspecs_add_scspec, declspecs_add_attrs): New.
+ 	(split_specs_attrs): Remove.
+ 	(shadow_tag_warned): Make warning for useless type names a
+ 	pedwarn.  Give hard error for long, short, signed, unsigned or
+ 	_Complex used with struct, union or enum in empty declaration.
+ 	Make found_tag a bool.
+ 	(grokdeclarator): Remove checks now done at parse time.
+ 
+ 2004-09-09  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-tree.h (enum c_declarator_kind, struct c_arg_info, struct
+ 	c_declarator, struct c_type_name, struct c_parm): New.
+ 	(build_array_declarator, set_array_declarator_inner,
+ 	get_parm_info, grokfield, groktypename, grokparm, push_parm_decl,
+ 	start_function, start_decl, build_c_parm, build_attrs_declarator,
+ 	build_function_declarator, make_pointer_declarator, c_cast_expr,
+ 	store_parm_decls_newstyle, c_expr_sizeof_type): Update prototypes.
+ 	(build_id_declarator): New.
+ 	* c-typeck.c (c_cast_expr, c_expr_sizeof_type): Update to new
+ 	structures.
+ 	* c-decl.c (ARG_INFO_PARMS, ARG_INFO_TAGS, ARG_INFO_TYPES,
+ 	ARG_INFO_OTHERS): Remove.
+ 	(build_id_declarator): New.
+ 	(build_array_declarator, set_array_declarator_inner, groktypename,
+ 	start_decl, grokparm, push_parm_decl, grokparms, get_parm_info,
+ 	grokfield, start_function, store_parm_decls_newstyle,
+ 	store_parm_decls_oldstyle, store_parm_decls,
+ 	build_c_parm, build_attrs_declarator, build_function_declarator,
+ 	make_pointer_declarator, grokdeclarator): Update to new
+ 	structures.
+ 	* c-parse.in (%union): Add arginfotype, dtrtype, typenametype and
+ 	parmtype.
+ 	(declarator, notype_declarator, after_type_declarator,
+ 	parm_declarator, parm_declarator_starttypename,
+ 	parm_declarator_nostarttypename, array_declarator, typename,
+ 	absdcl, absdcl1, absdcl1_ea, absdcl1_noea, direct_absdcl1,
+ 	absdcl_maybe_attribute, parm, firstparm, parms, parmlist,
+ 	parmlist_1, parmlist_2, parmlist_or_identifiers,
+ 	parmlist_or_identifiers_1): Use these types.
+ 	(primary, after_type_declarator, parm_declarator_starttypename,
+ 	notype_declarator, component_decl, component_declarator,
+ 	component_notype_declarator, typename, absdcl,
+ 	absdcl_maybe_attribute, absdcl1_ea, direct_absdcl1, parmlist_1,
+ 	parmlist_2, parmlist_or_identifiers_1): Update to new structures.
+ 
+ 2004-09-09  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-tree.h (C_DECL_USED, parser_obstack, in_alignof, in_sizeof,
+ 	in_typeof, record_maybe_used_decl, pop_maybe_used,
+ 	c_expr_sizeof_expr, c_expr_sizeof_type): New.
+ 	* c-decl.c (parser_obstack): New.
+ 	(c_init_decl_processing): Initialize parser_obstack.
+ 	(c_write_global_declarations_1): Check for used but undefined
+ 	static functions.
+ 	* c-parse.in (%union): Add otype.
+ 	(save_obstack_position): New.
+ 	(extdefs): Use it.
+ 	(unary_expr): Update in_sizeof and in_alignof.  Use
+ 	c_expr_sizeof_expr and c_expr_sizeof_type.
+ 	(sizeof): Update in_sizeof.
+ 	(alignof): Update in_alignof.
+ 	(typeof): Update in_typeof.
+ 	(typespec_nonreserved_nonattr): Call pop_maybe_used.
+ 	* c-typeck.c (in_alignof, in_sizeof, in_typeof, struct
+ 	maybe_used_decl, maybe_used_decls, record_maybe_used_decl,
+ 	pop_maybe_used, c_expr_sizeof_expr, c_expr_sizeof_type): New.
+ 	(build_external_ref): Set C_DECL_USED or call
+ 	record_maybe_used_decl if appropriate.
+ 	* toplev.c (check_global_declarations): Check TREE_NO_WARNING.
+ 
+ 2004-09-08  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* builtins.c: Fix prototype for fold_builtin_atan.
+ 
+ 2004-09-08  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* builtins.c (fold_builtin_strlen, fold_builtin_sqrt, fold_builtin_cbrt,
+ 	fold_builtin_pow, fold_builtin_sin, fold_builtin_cos, fold_builtin_tan,
+ 	fold_builtin_atan): New functions. Migrate function bodies...
+ 	(fold_builtin_1): ... from here.
+ 
+ 2004-09-09  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_stack_info): Correct alignment of
+ 	save_size.
+ 
+ 2004-09-08  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* config/rs6000/power4.md (power4-lmul): du4 feeds iu1.
+ 	* config/rs6000/power5.md (power5-lmul): Same.
+ 
+ 2004-09-08  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR rtl-opt/17186
+ 	* function.c (expand_function_end): Have fall-off-the-end
+ 	return path jump around return register setup.
+ 
+ 2004-09-08  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* config/sparc/sparc.c (sparc_indent_opcode): New variable.
+ 	(output_return): Do not test for the presence of the 'unimp' insn.
+ 	Use 'current_function_uses_only_leaf_regs' and 'final_sequence'
+ 	as predicates instead of custom ones.  Return raw strings when
+ 	possible.
+ 	(output_sibcall): Likewise.  Concatenate strings.
+ 	(output_ubranch): Remove kludge for TurboSPARC.
+ 	(output_cbranch): Remove 'noop' parameter.  Do not output 'nop'.
+ 	(output_v9branch): Likewise.
+ 	(print_operand): Use 'final_sequence' instead of 'dbr_sequence_length'.
+ 	<#>: Set sparc_indent_opcode if the delay slot is filled.
+ 	<(>: Likewise.
+ 	<)>: New operand to emit the displacement from the saved PC on return.
+ 	<@>: Remove.
+ 	* config/sparc/sparc.h (sparc_indent_opcode): Declare it.
+ 	(ASM_OUTPUT_OPCODE): New macro.
+ 	(PRINT_OPERAND_PUNCT_VALID_P): Remove '^' and add ')'.
+ 	* config/sparc/sparc.md (normal_branch, inverted_branch,
+ 	normal_fp_branch, inverted_fp_branch, normal_fpe_branch,
+ 	inverted_fpe_branch): Adjust call to output_cbranch.
+ 	(normal_int_branch_sp64, inverted_int_branch_sp64): Adjust
+ 	call to output_v9branch.
+ 	* config/sparc/sparc-protos.h (output_cbranch): Adjust.
+ 	(output_v9branch): Likewise.
+ 
+ 2004-09-08  Devang Patel  <dpatel@apple.com>
+ 
+ 	* config/darwin.h  (TARGET_OPTION_TRANSLATE_TABLE): Add -segaddr,
+ 	-segs_read_only_addr and -segs_read_write_addr.
+ 	(WORD_SWITCH_TAKES_ARG): Same.
+ 	(LINK_SPEC): Same.
+ 	* doc/invoke.texi: Document -segaddr, -segs_read_only_addr and
+ 	-segs_read_write_addr.
+ 
+ 2004-09-08  Richard Henderson  <rth@redhat.com>
+ 
+ 	* function.c (reference_callee_copied): New.
+ 	(assign_parm_setup_reg): Use it.
+ 	* calls.c (initialize_argument_information): Likewise.
+ 	(emit_library_call_value_1): Likewise.
+ 	* function.h (reference_callee_copied): Declare.
+ 
+ 	* target.h (struct gcc_target): Add callee_copies.
+ 	* target-def.h (TARGET_CALLEE_COPIES): New.
+ 	(TARGET_PASS_BY_REFERENCE): Update default.
+ 	* expr.h (FUNCTION_ARG_CALLEE_COPIES): Remove.
+ 	* targhooks.c (hook_callee_copies_named): New.
+ 	(hook_bool_CUMULATIVE_ARGS_mode_tree_bool_false): Rename from
+ 	hook_pass_by_reference_false.
+ 	(hook_bool_CUMULATIVE_ARGS_mode_tree_bool_true): New.
+ 	* targhooks.h: Update decls.
+ 	* config/arc/arc.c (TARGET_CALLEE_COPIES): New.
+ 	* config/arc/arc.h (FUNCTION_ARG_CALLEE_COPIES): Remove.
+ 	* config/frv/frv-protos.h (frv_function_arg_callee_copies): Remove.
+ 	* config/frv/frv.c (frv_function_arg_callee_copies): Remove.
+ 	* config/frv/frv.h (FUNCTION_ARG_CALLEE_COPIES): Remove.
+ 	* config/iq2000/iq2000.c (TARGET_CALLEE_COPIES): New.
+ 	* config/iq2000/iq2000.h (FUNCTION_ARG_CALLEE_COPIES): Remove.
+ 	* config/m68hc11/m68hc11.c (TARGET_CALLEE_COPIES): New.
+ 	* config/m68hc11/m68hc11.h (FUNCTION_ARG_CALLEE_COPIES): Remove.
+ 	* config/mips/mips.c (TARGET_CALLEE_COPIES): New.
+ 	(mips_callee_copies): New.
+ 	* config/mips/mips.h (FUNCTION_ARG_CALLEE_COPIES): Remove.
+ 	* config/mmix/mmix.c (TARGET_CALLEE_COPIES): New.
+ 	* config/mmix/mmix.h (FUNCTION_ARG_CALLEE_COPIES): Remove.
+ 	* config/mn10300/mn10300.c (TARGET_CALLEE_COPIES): New.
+ 	* config/mn10300/mn10300.h (FUNCTION_ARG_CALLEE_COPIES): Remove.
+ 	* config/pa/pa.c (TARGET_CALLEE_COPIES): New.
+ 	* config/pa/pa.h (FUNCTION_ARG_CALLEE_COPIES): Remove.
+ 	* config/sh/sh.c (sh_callee_copies): New.
+ 	(TARGET_CALLEE_COPIES): New.
+ 	* config/sh/sh.h (FUNCTION_ARG_CALLEE_COPIES): Remove.
+ 	* config/v850/v850.c (TARGET_CALLEE_COPIES): New.
+ 	* config/v850/v850.h (FUNCTION_ARG_CALLEE_COPIES): Remove.
+ 	* doc/tm.texi (TARGET_CALLEE_COPIES): Replace documentation
+ 	for FUNCTION_ARG_CALLEE_COPIES.
+ 	* doc/rtl.texi (CALL_INSN_FUNCTION_USAGE): Update.
+ 
+ 2004-09-08  Devang Patel  <dpatel@apple.com>
+ 
+ 	* tree-if-conv.c (find_phi_replacement_condition): Return true
+ 	edge block.
+ 	(replace_phi_with_cond_modify_expr): Select conditional expr args
+ 	based on true edge basic block.
+ 
+ 2004-09-08  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-ssa-operands.c (add_stmt_operand): Use V_MUST_DEF even for
+ 	variables being alias set.
+ 
+ 2004-09-08  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* final.c (shorten_branches, final, get_insn_template,
+ 	output_alternate_entry_point, final_scan_insn, alter_subreg,
+ 	alter_cond, output_operand, asm_fprintf, final_forward_branch_p,
+ 	leaf_renumber_regs_insn): Use gcc_assert and gcc_unreachable.
+ 	* fix-header.c (lookup_std_proto): Likewise.
+ 	* flow.c (first_insn_after_basic_block_note, verify_wide_reg,
+ 	verify_local_live_at_start, update_life_info, mark_reg,
+ 	calculate_global_regs_live, allocate_reg_life_data,
+ 	init_propagate_block_info, mark_set_regs, flush_reg_cond_reg_1,
+ 	ior_reg_cond, not_reg_cond, and_reg_cond, elim_reg_cond,
+ 	attempt_auto_inc, mark_used_reg, mark_used_regs): Likewise.
+ 	* fold-const.c (force_fit_type, div_and_round_double,
+ 	may_negate_without_overflow_p, int_const_binop, const_binop,
+ 	size_binop, size_diffop, fold_convert_const, fold_convert,
+ 	invert_tree_comparison, swap_tree_comparison,
+ 	comparison_to_compcode, compcode_to_comparison, invert_truthvalue,
+ 	range_binop, make_range, fold_cond_expr_with_comparison,
+ 	fold_div_compare, fold, fold_checksum_tree, fold_negate_const,
+ 	fold_abs_const, fold_not_const, fold_relational_const, round_up,
+ 	round_down): Likewise.
+ 	* function.c (find_function_data, assign_stack_temp_for_type,
+ 	instantiate_virtual_regs_lossage, aggregate_value_p,
+ 	assign_parm_find_entry_rtl, assign_parm_setup_block,
+ 	expand_function_start, expand_function_end, keep_stack_depressed,
+ 	handle_epilogue_set, thread_prologue_and_epilogue_insns): Likewise.
+ 
+ 2004-09-08  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* Makefile.in (tree-loop-linear.o): Added.
+ 	(OBJS-common): Add tree-loop-linear.o
+ 	* common.opt: New flag, ftree-loop-linear.
+ 	* timevar.def: New timevar, TV_TREE_LOOP_LINEAR.
+ 	* tree-flow.h: Add prototype for linear_transform_loops.
+ 	* tree-optimize.c: Add linear transform after vectorization.
+ 	* tree-pass.h: Add struct pass_linear_transform.
+ 	* tree-ssa-loop.c: Add pass_linear_transform.
+ 	* tree-loop-linear.c: New file.
+ 	* lambda-code.c: gcc_assertify.
+ 	(gcc_loop_to_lambda_loop): Handle all exit tests.
+ 	Handle case where we have (invariant >= induction var).
+ 	(find_induction_var_from_exit_cond): Ditto.
+ 
+ 2004-09-08  Jie Zhang  <zhangjie@magima.com.cn>
+ 
+ 	* tree-ssa-alias.c (compute_flow_insensitive_aliasing): If type
+ 	memory tag is call clobbered, so are its aliases.
+ 	(group_aliases): When two memory tags being grouped, if one is
+ 	call clobbered, so are the other and its aliases.
+ 	(add_may_alias): Remove call-clobbering stuff.
+ 	(replace_may_alias): Likewise.
+ 	(merge_pointed_to_info): Merge pt_global_mem
+ 
+ 2004-09-08  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* cgraph.c (cgraph_remove_node): Free DECL_INITIAL field of node.
+ 	* cgraphunit.c (verify_cgraph): Don't verify on syntax errors.
+ 	(cgraph_expand_function): Remove stale cgraph edges of currently
+ 	compiled function; fix non-unit-at-a-time code copying function
+ 	node for later reuse.
+ 
+ 2004-09-08  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* vec.c (vec_p_reserve, vec_o_reserve): Rename to ...
+ 	(vec_gc_p_reserve, vec_gc_o_reserve): ... here. Clone to
+ 	(vec_heap_p_reserve, vec_heap_o_reserve): ... here, adjust.
+ 	(vec_gc_free, vec_heap_free): New.
+ 	* vec.h (DEF_VEC_GC_P, DEF_VEC_MALLOC_P): New.
+ 	(DEF_VEC_P): Add allocator argument. Adjust.
+ 	(DEF_VEC_GC_O, DEF_VEC_MALLOC_O): New.
+ 	(DEF_VEC_O): Add allocator argument. Adjust.
+ 	(VEC(free)): New.
+ 
+ 	* tree.h (tree): Define a GC'd vector.
+ 	* lamba-code.c (lambda_loop): Likewise.
+ 	* value-prof.h (histogram_value): Likewise.
+ 
+ 2004-09-08  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* emit-rtl.c (immed_double_const): Use gcc_assert and gcc_unreachable.
+ 	(gen_rtx_SUBREG, gen_reg_rtx, mark_user_reg, subreg_hard_regno,
+ 	gen_lowpart_common, gen_highpart, gen_highpart_mode,
+ 	subreg_highpart_offset, operand_subword, operand_subword_force,
+ 	mem_expr_equal_p, set_mem_attributes_minus_bitpos,
+ 	set_mem_alias_set, change_address_1, verify_rtx_sharing,
+ 	copy_most_rtx, set_first_insn, set_last_insn, prev_cc0_setter,
+ 	try_split, add_insn_after, add_insn_before, remove_insn,
+ 	remove_unnecessary_notes, emit_insn_before, emit_jump_insn_before,
+ 	emit_call_insn_before, emit_insn_after, emit_jump_insn_after,
+ 	emit_call_insn_after, emit_insn, emit_jump_insn, emit_call_insn,
+ 	set_unique_reg_note, emit, push_to_full_sequence, copy_insn_1,
+ 	gen_const_vector_0, emit_copy_of_insn_after): Likewise.
+ 	* et-forest.c (set_prev, set_next, et_check_occ_sanity,
+ 	record_path_before_1, check_path_after_1, check_path_after): Likewise.
+ 	* except.c (gen_eh_region, resolve_one_fixup_region,
+ 	remove_unreachable_regions, convert_from_eh_region_ranges_1,
+ 	add_ehl_entry, duplicate_eh_region_1, build_post_landing_pads,
+ 	connect_post_landing_pads, sjlj_emit_function_exit,
+ 	remove_exception_handler_label, remove_eh_handler,
+ 	reachable_next_level, collect_one_action_chain,
+ 	output_function_exception_table): Likewise.
+ 	* explow.c (trunc_int_for_mode, copy_to_mode_reg,
+ 	optimize_save_area_alloca, allocate_dynamic_stack_space,
+ 	probe_stack_range, hard_function_value): Likewise.
+ 	* expmed.c (mode_for_extraction, store_bit_field,
+ 	store_fixed_bit_field, extract_bit_field, expand_shift,
+ 	expand_mult_const, expand_mult, choose_multiplier,
+ 	expand_mult_highpart, expand_divmod, emit_store_flag,
+ 	do_cmp_and_jump): Likewise.
+ 	* expr.c (convert_move, convert_modes, move_by_pieces,
+ 	move_by_pieces_ninsns, move_by_pieces_1, emit_block_move,
+ 	move_block_from_reg, gen_group_rtx, emit_group_load,
+ 	emit_group_move, emit_group_store, use_reg, use_regs,
+ 	can_store_by_pieces, store_by_pieces, store_by_pieces_1,
+ 	emit_move_insn, emit_move_insn_1, emit_push_insn,
+ 	expand_assignment, store_expr, count_type_elements,
+ 	store_constructor, store_field, safe_from_p, expand_var,
+ 	expand_expr_addr_expr, expand_expr_real_1, do_store_flag): Likewise.
+ 
+ 2004-09-08  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* dbxout.c (dbxout_type, dbxout_type_name, dbxout_symbol): Use
+ 	gcc_assert and gcc_unreachable.
+ 	* ddg.c (create_ddg_dependence, add_deps_for_def,
+ 	add_deps_for_use, create_ddg, add_edge_to_ddg): Likewise.
+ 	* df.c (df_ref_unlink, df_ref_record, df_uses_record,
+ 	df_reg_def_chain_create, df_reg_use_chain_create, df_analyze,
+ 	df_insn_delete, df_refs_reg_replace, df_ref_reg_replace,
+ 	df_insns_modify, df_pattern_emit_before, df_bb_reg_live_start_p,
+ 	df_bb_reg_live_end_p, df_bb_regs_lives_compare,
+ 	df_bb_single_def_use_insn_find, dataflow_set_a_op_b,
+ 	dataflow_set_copy, hybrid_search, diagnostic.c,
+ 	diagnostic_build_prefix, diagnostic_count_diagnostic): Likewise.
+ 	* dojump.c (do_jump): Likewise.
+ 	* dominance.c (calc_dfs_tree_nonrec, calc_dfs_tree,
+ 	compute_dom_fast_query, calculate_dominance_info,
+ 	free_dominance_info, get_immediate_dominator,
+ 	set_immediate_dominator, get_dominated_by,
+ 	redirect_immediate_dominators, nearest_common_dominator,
+ 	dominated_by_p, verify_dominators, recount_dominator,
+ 	iterate_fix_dominators, add_to_dominance_info,
+ 	delete_from_dominance_info): Likewise.
+ 	* dwarf2asm.c (size_of_encoded_value, eh_data_format_name,
+ 	dw2_asm_output_delta_uleb128, dw2_asm_output_delta_sleb128,
+ 	dw2_force_const_mem, dw2_asm_output_encoded_addr_rtx): Likewise.
+ 	* dwarf2out.c (expand_builtin_init_dwarf_reg_sizes, reg_save,
+ 	initial_return_save, stack_adjust_offset, dwarf2out_stack_adjust,
+ 	flush_queued_reg_saves, dwarf2out_frame_debug_expr,
+ 	dwarf2out_frame_debug, dw_cfi_oprnd1_desc, output_cfi,
+ 	output_call_frame_info, output_loc_operands, build_cfa_loc,
+ 	decl_ultimate_origin, AT_flag, AT_int, AT_unsigned, AT_string,
+ 	AT_string_form, add_AT_specification, AT_ref, set_AT_ref_external,
+ 	AT_loc, AT_loc_list, AT_addr, AT_lbl, add_child_die,
+ 	splice_child_die, attr_checksum, same_dw_val_p,
+ 	break_out_includes, build_abbrev_table, size_of_die, mark_dies,
+ 	unmark_dies, value_format, output_loc_list, output_die,
+ 	output_pubnames, output_aranges, base_type_die, is_base_type,
+ 	modified_type_die, dbx_reg_number, multiple_reg_loc_descriptor,
+ 	mem_loc_descriptor, loc_descriptor, loc_descriptor_from_tree_1,
+ 	field_byte_offset, add_data_member_location_attribute,
+ 	add_const_value_attribute, rtl_for_decl_location,
+ 	add_location_or_const_value_attribute, add_byte_size_attribute,
+ 	add_bit_offset_attribute, add_bit_size_attribute,
+ 	add_abstract_origin_attribute, pop_decl_scope, scope_die_for,
+ 	decl_start_label, gen_formal_parameter_die,
+ 	gen_type_die_for_member, gen_subprogram_die, gen_label_die,
+ 	gen_typedef_die, gen_type_die, gen_tagged_type_instantiation_die,
+ 	force_decl_die, force_type_die, gen_decl_die,
+ 	dwarf2out_imported_module_or_decl, prune_unused_types_prune,
+ 	dwarf2out_finish): Likewise.
+ 
+ 2004-09-08  Andreas Tobler  <toa@pop.agri.ch>
+ 
+ 	* Makefile.in (builtins.o): Depend on tree-mudflap.h.
+ 	* builtins.c: Include tree-mudflap.h.
+ 
+ 2004-09-08  Uros Bizjak  <uros@kss-loka.si>
+ 
+ 	* config/i386/i386.c (ix86_prepare_fp_compare_args): Do not
+ 	force operand 0.0 into register in XFmode. Also do not force
+ 	operand 0.0 into register if !TARGET_CMOVE.
+ 	* config/i386/i386.md (*cmpfp_0): Delete. Remove comment.
+ 	(*cmpfp_0_sf, cmpfp_0_df, cmpfp_0_xf): New patterns to
+ 	implement ftst x87 instruction.
+ 	(*fp_jcc_7): New insn pattern. Change corresponding split
+ 	pattern to handle "general_operand" instead of
+ 	"nonimmediate_operand".
+ 
+ 2004-09-08  Ben Elliston  <bje@au.ibm.com>
+ 
+ 	* doc/rtl.texi (Insns): Document NOTE_INSN_FUNCTION_BEG.
+ 
+ 2004-09-07  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* builtins.c (std_gimplify_va_arg_expr): Mark INDIRECT_REF nodes
+ 	generated from standard va_arg expansion.
+ 	* tree-mudflap.c (mx_xform_derefs_1): Omit instrumentation from
+ 	marked nodes.
+ 	(mf_varname_tree, mf_file_function_line_tree): Add some support
+ 	for column numbers if compiled with USE_MAPPED_LOCATION.
+ 
+ 2004-09-07  Ziemowit Laski  <zlaski@apple.com>
+ 
+ 	* c-decl.c (groktypename_in_parm_context): Remove function.
+ 	* c-tree.h (groktypename_in_parm_context): Remove prototype.
+ 
+ 2004-09-07  Ziemowit Laski  <zlaski@apple.com>
+ 
+ 	* Makefile.in (c-parse.o): Depend on $(C_COMMON_H).
+ 	* c-parse.in: Include c-common.h instead of objc-act.h.
+ 	(ivar_decl_list, ivar_decls, ivar_decl, ivars, ivar_declarator,
+ 	myparms, myparm): Remove %type declarations.
+ 	(methodtype, optparms, OBJC_TYPE_QUAL, objc_quals, objc_qual,
+ 	objc_typename, objc_try_catch_stmt, optellipsis): Add %type
+ 	declarations.
+ 	(objc_inherit_code, objc_public_flag): Remove.
+ 	(typespec_nonreserved_nonattr): Call
+ 	objc_get_protocol_qualified_type() instead of get_static_reference()
+ 	and get_protocol_reference().
+ 	(stmt_nocomp): Call grokparm() on @catch parameter.
+ 	(objcdef): Move semantic action to objc_finish_implementation().
+ 	(classdef): Move semantic action to objc_start_class_interface(),
+ 	objc_continue_interface(), objc_finish_interface(),
+ 	objc_start_class_implementation(), objc_continue_implementation(),
+ 	objc_start_category_interface() and
+ 	objc_start_category_implementation().
+ 	(protocoldef): Move semantic actions to objc_start_protocol() and
+ 	objc_finish_interface().
+ 	(ivar_decl_list): Remove nonterminal.
+ 	(visibility_spec): Move semantic actions to objc_set_visibility().
+ 	(ivar_decls): Remove assignment to $$.
+ 	(ivar_decl): Rephrase in terms of component_decl; call
+ 	objc_add_instance_variable().
+ 	(ivars, ivar_declarator): Remove nonterminals.
+ 	(opt_semi): New nonterminal.
+ 	(methodtype): Remove semantic actions.
+ 	(methoddef): Move semantic actions to objc_set_method_type(),
+ 	objc_start_method_definition() and objc_finish_method_definition().
+ 	(methodproto): Move semantic actions to objc_set_method_type() and
+ 	objc_add_method_declaration().
+ 	(methoddecl): Use objc_typename instead of typename; move semantic
+ 	actions to objc_build_method_signature().
+ 	(optarglist, myxdecls, mydecl, myparms, myparm): Remove nonterminals.
+ 	(optparmlist): Express in terms of optparms and optellipsis.
+ 	(optparms, optellipsis, objc_qual, objc_quals, objc_typename): New
+ 	nonterminals.
+ 	(keyworddecl): Use objc_typename instead of typename.
+ 	(rid_to_yy): Mark RID_IN, RID_OUT, RID_INOUT, RID_BYCOPY, RID_BYREF
+ 	and RID_ONEWAY as returning OBJC_TYPE_QUAL to yyparse().
+ 
+ 2004-09-08  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* doc/tm.texi (MD_UNWIND_SUPPORT): Document.
+ 	(MD_FALLBACK_FRAME_STATE_FOR): Update.
+ 	* unwind-dw2.c (MD_UNWIND_SUPPORT): #include if defined.
+ 	(uw_frame_state_for): Adjust MD_FALLBACK_FRAME_STATE_FOR invocation.
+ 	(MD_FROB_UPDATE_CONTEXT): Remove default.
+ 	(uw_update_context_1): Instead #ifdef invocation.
+ 	* config/ia64/unwind-ia64.c (MD_UNWIND_SUPPORT): #include if defined.
+ 	(uw_frame_state_for): Adjust MD_FALLBACK_FRAME_STATE_FOR invocation.
+ 	* config/alpha/gnu.h (MD_FALLBACK_FRAME_STATE_FOR): Don't undef.
+ 	(MD_UNWIND_SUPPORT): Undefine this instead.
+ 	* config/i386/gnu.h: Likewise.
+ 	* config/alpha/linux-unwind.h: New file, macro converted to
+ 	function, extracted from..
+ 	* config/alpha/linux.h (MD_FALLBACK_FRAME_STATE_FOR): ..this.
+ 	(MD_UNWIND_SUPPORT): Define.
+ 	* config/alpha/vms-unwind.h, config/alpha/vms.h: Likewise.
+ 	* config/i386/linux-unwind.h, config/i386/linux.h,
+ 	config/i386/linux64.h: Likewise.
+ 	* config/ia64/linux-unwind.h, config/ia64/linux.h: Likewise.
+ 	MD_HANDLE_UNWABI too.
+ 	* config/mips/linux-unwind.h, config/mips/linux.h: Likewise.
+ 	* config/pa/linux-unwind.h, config/pa/pa32-linux.h: Likewise.
+ 	* config/rs6000/darwin-unwind.h, config/rs6000/darwin.h: Likewise.
+ 	* config/s390/linux-unwind.h, config/s390/linux.h: Likewise.
+ 	* config/sparc/linux-unwind.h, config/sparc/linux.h,
+ 	config/sparc/linux64.h: Likewise.
+ 	* config/sh/linux-unwind.h, config/sh/linux.h: Likewise, but merge
+ 	SH_FALLBACK_FRAME_FLOAT_STATE into sh_fallback_frame_state.
+ 	* config/rs6000/linux-unwind.h, config/rs6000/linux.h,
+ 	config/rs6000/linux64.h: Likewise.  Split out get_sigcontext
+ 	function.  Use ARG_POINTER_REGNUM for 32-bit temp reg too.
+ 
+ 2004-09-07  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* cse.c (fold_rtx):  Avoid building of
+ 	(CONST (MINUS (CONST_INT) (SYMBOL_REF)))
+ 
+ 	* tree-ssa-pre.c (grand_bitmap_obstack): New.
+ 	(value_insert_into_set_bitmap, bitmap_set_new): Use the obstack.
+ 	(init_pre): Initialize obstack.
+ 	(fini_pre): Free obstack.
+ 
+ 2004-09-07  David Daney  <ddaney@avtrex.com>
+ 
+ 	* config.gcc: Added support for --with-divide=[breaks|traps] for
+ 	mips targets.
+ 	* config/mips/mips.h (MASK_DIVIDE_BREAKS): New target_flags bit.
+ 	(TARGET_DIVIDE_TRAPS): New macro.
+ 	(TARGET_SWITCHES): Added -mdivide-traps and -mdivide-breaks.
+ 	(OPTION_DEFAULT_SPECS): Added --with-divide= support.
+ 	* config/mips/mips.c (mips_idiv_insns): Generate proper count on
+ 	GENERATE_DIVIDE_TRAPS.
+ 	(mips_output_division): Emit conditional trap if
+ 	GENERATE_DIVIDE_TRAPS is set.
+ 	* doc/install.texi: Document --with-divide.
+ 	* doc/invoke.texi: Document -mdivide-traps and -mdivide-breaks.
+ 
+ 2004-09-07  Caroline Tice  <ctice@apple.com>
+ 
+ 	* cfgrtl.c (rtl_verify_flow_info_1):  Add new edge flag,
+ 	EDGE_CROSSING, to flags test case.
+ 
+ 2004-09-07  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-ssa-loop-ivopts.c (contains_abnormal_ssa_name_p): Deal with '<'
+ 	class too.
+ 
+ 2004-09-07  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* cfganal.c (flow_depth_first_order_compute, dfs_enumerate_from,
+ 	cfgbuild.c, inside_basic_block_p, control_flow_insn_p,
+ 	make_label_edge, make_edges, find_basic_blocks_1): Use gcc_assert
+ 	or gcc_unreachable.
+ 	* cfg.c (clear_edges, initialize_bb_rbi, compact_blocks,
+ 	remove_edge, alloc_aux_for_blocks, free_aux_for_blocks,
+ 	alloc_aux_for_edges, free_aux_for_edges): Likewise.
+ 	* cfgcleanup.c (try_forward_edges,
+ 	merge_blocks_move_predecessor_nojumps,
+ 	merge_blocks_move_successor_nojumps): Likewise.
+ 	* cfgexpand.c (expand_gimple_cond_expr,
+ 	expand_gimple_tailcall): Likewise.
+ 	* cfghooks.c (duplicate_block): Likewise.
+ 	* cfglayout.c (record_effective_endpoints,
+ 	insn_locators_initialize, change_scope, fixup_reorder_chain,
+ 	verify_insn_chain, fixup_fallthru_exit_predecessor,
+ 	duplicate_insn_chain, cfg_layout_finalize): Likewise.
+ 	* cfgloopanal.c (check_irred): Likewise.
+ 	* cfgloop.c (superloop_at_depth, flow_loops_free,
+ 	flow_loop_entry_edges_find, flow_loops_find,
+ 	flow_loop_outside_edge_p, get_loop_body,
+ 	get_loop_body_in_dom_order, get_loop_body_in_bfs_order,
+ 	get_loop_exit_edges, num_loop_branches, cancel_loop,
+ 	verify_loop_structure): Likewise.
+ 	cfgloopmanip.c (find_path, remove_path, loop_delete_branch_edge,
+ 	duplicate_loop_to_header_edge, create_preheader,
+ 	create_loop_notes): Likewise.
+ 	* cfgrtl.c (delete_insn, try_redirect_by_replacing_jump,
+ 	edirect_branch_edge, force_nonfallthru_and_redirect,
+ 	rtl_split_edge, insert_insn_on_edge, commit_one_edge_insertion,
+ 	commit_edge_insertions, commit_edge_insertions_watch_calls,
+ 	purge_dead_edges, cfg_layout_redirect_edge_and_branch,
+ 	cfg_layout_redirect_edge_and_branch_force,
+ 	cfg_layout_merge_blocks, rtl_flow_call_edges_add): Likewise.
+ 	* cgraph.c (cgraph_node, cgraph_create_edge, cgraph_remove_edge,
+ 	cgraph_redirect_edge_callee, cgraph_global_info, cgraph_rtl_info,
+ 	cgraph_varpool_node): Likewise.
+ 	* cgraphunit.c (cgraph_finalize_function,
+ 	cgraph_finalize_compilation_unit, cgraph_mark_functions_to_output,
+ 	cgraph_expand_function, cgraph_remove_unreachable_nodes,
+ 	cgraph_clone_inlined_nodes, cgraph_mark_inline_edge,
+ 	cgraph_mark_inline, cgraph_expand_all_functions,
+ 	cgraph_build_static_cdtor): Likewise.
+ 	* combine.c  (do_SUBST, try_combine, subst, combine_simplify_rtx,
+ 	simplify_logical, distribute_notes, insn_cuid): Likewise.
+ 	* conflict.c (conflict_graph_add, print_conflict): Likewise.
+ 	* coverage.c (rtl_coverage_counter_ref, tree_coverage_counter_ref,
+ 	coverage_checksum_string): Likewise.
+ 	* cse.c (make_new_qty, make_regs_eqv, insert, invalidate,
+ 	hash_rtx, exp_equiv_p, cse_basic_block, count_reg_usage,
+ 	cse_cc_succs, cse_condition_code_reg): Likewise.
+ 	* cselib.c (entry_and_rtx_equal_p, remove_useless_values,
+ 	rtx_equal_for_cselib_p, wrap_constant, cselib_hash_rtx,
+ 	new_cselib_val, cselib_subst_to_values, cselib_invalidate_regno,
+ 	cselib_record_set): Likewise.
+ 
+ 2004-09-07  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-ssa-loop-ivopts.c (iv_value): Avoid invalid sharing on niter.
+ 
+ 2004-09-07  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* builtins.c (fold_builtin_strchr): Use build_int_cst, not
+ 	fold_convert.
+ 	(fold_builtin_strpbrk): Likewise.
+ 	* expr.c (array_ref_low_bound): Likewise.
+ 	* tree-scalar-evolution.c (chrec_is_positive, add_to_evolution_1,
+ 	interpret_rhs_modify_expr, number_of_iterations_in_loop): Likewise.
+ 	* tree-sra.c (generate_element_zero): Likewise.
+ 	* tree-ssa-dom.c (simplify_rhs_and_lookup_avail_expr): Likewise.
+ 	* tree-ssa-loop-ivopts.c (determine_biv_step, idx_find_step,
+ 	add_old_iv_candidates, add_iv_candidates): Likewise.
+ 	* tree-tailcall.c (tree_optimize_tail_calls_1): Likewise.
+ 
+ 2004-09-07  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* c-aux-info.c (gen_type): Use gcc_assert or gcc_unreachable.
+ 	* c-common.c (c_type_hash, c_common_nodes_and_builtins,
+ 	c_expand_expr, boolean_increment, nonnull_check_p,
+ 	check_function_arguments_recurse, fold_offsetof_1): Likewise.
+ 	* c-cppbuiltin.c (define__GNUC__, builtin_define_stdint_macros,
+ 	builtin_define_type_max): Likewise.
+ 	* c-decl.c (bind, pop_scope, merge_decls, pushdecl_top_level,
+ 	implicit_decl_warning, builtin_function, build_compound_literal,
+ 	complete_array_type, grokdeclarator, get_parm_info,
+ 	start_function, store_parm_decls_oldstyle,
+ 	c_write_global_declarations): Likewise.
+ 	* c-format.c (get_constant, decode_format_attr,
+ 	maybe_read_dollar_number, get_flag_spec, check_format_arg,
+ 	check_format_types, format_type_warning,
+ 	find_char_info_specifier_index, init_dynamic_asm_fprintf_info,
+ 	init_dynamic_diag_info, handle_format_attribute): Likewise.
+ 	* c-gimplify.c (push_context, pop_context, finish_bc_block):
+ 	* c-lex.c (c_lex_with_flags, lex_string): Likewise.
+ 	* c-objc-common.c (c_tree_printer): Likewise.
+ 	* c-pch.c (pch_init): Likewise.
+ 	* c-pragma.c (maybe_apply_pragma_weak): Likewise.
+ 	* c-pretty-print.c (pp_c_tree_decl_identifier): Likewise.
+ 	* c-typeck.c (c_incomplete_type_error, composite_type,
+ 	common_pointer_type, common_type, same_translation_unit_p,
+ 	tagged_types_tu_compatible_p, finish_init, pop_init_level,
+ 	set_designator, set_nonincremental_init_from_string,
+ 	process_init_element, c_finish_if_stmt): Likewise.
+ 	* caller-save.c (init_caller_save, save_call_clobbered_regs,
+ 	insert_restore, insert_save, insert_one_insn): Likewise.
+ 	* calls.c (emit_call_1, compute_argument_block_size,
+ 	precompute_arguments, expand_call, emit_library_call_value_1,
+ 	store_one_arg): Likewise.
+ 
+ 2004-09-07  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* configure.ac (enable-checking): Add release option. Reorganize
+ 	to avoid repetition.
+ 	* configure: Rebuilt.
+ 	* doc/install.texi (enable-checking): Amend documentation.
+ 
+ 2004-09-06  H.J. Lu  <hongjiu.lu@intel.com>
+ 
+ 	PR bootstrap/17313
+ 	* Makefile.in (specs.ready): Depend on cc1$(exeext).
+ 
+ 2004-09-06  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	* config/mips/mips.md (movsf_hardfloat, movdf_hardfloat_64bit,
+ 	movdf_hardfloat_32bit): Split fG into two alternatives.
+ 	(movv2sf_hardfloat_64bit): Split fYG into two alternatives.
+ 
+ 	* emit-rtl.c (try_split): Check INSN_P before may_trap_p call.
+ 
+ 2004-09-06  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* final.c (output_in_slot): Delete.
+ 	(final_scan_insn): Revert 2004-09-03 change.
+ 	(output_asm_insn): Likewise.
+ 	* config/sparc/sparc.c (output_return): Likewise.
+ 	(output_sibcall): Likewise.
+ 
+ 2004-09-06  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* loop.c (loop_dump_aux): Do not print RTL when not available.
+ 	* tree-ssa-loop-ivopts.c (add_standard_iv_candidates): Do not use
+ 	frontend specific type nodes.
+ 	(produce_memory_decl_rtl): Break out from ...
+ 	(prepare_decl_rtl): ... here.  Handle ADDR_EXPR correctly.
+ 	(get_computation_at): Avoid random tree sharing.
+ 	(tree_ssa_iv_optimize): Verify tree sharing; dump loops.
+ 
+ 2004-09-06  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* Makefile.in (rtl.o, bitmap.o): Correct dependencies, remove
+ 	unnecessary commands.
+ 
+ 2004-09-06  Mohan Embar  <gnustuff@thisiscool.com>
+ 
+ 	* Makefile.in (rtl.o): Remove -DGENERATOR_FILE.
+ 	(bitmap.o): Likewise.
+ 
+ 2004-09-06  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	Unify the management of RTL and tree-level dump files.
+ 
+ 	* cfgexpand.c (tree_expand_cfg): Fix incorrect comment.
+ 	Don't print function name to the dump file, the pass manager
+ 	would do this for us. Add code from the top of
+ 	rest_of_compilation, up to the initial RTL dump.
+ 	* passes.c (rest_of_handle_jump): Call fixup_tail_calls and
+ 	close the DFI_sibling dump file.
+ 	(rest_of_compilation): Don't do that here.  Remove code up to the
+ 	initial RTL dump.
+ 	(init_optimization_passes): Remove.
+ 	(pass_rest_of_compilation): Change pass name to NULL.
+ 	* toplev.c (lang_dependent_init): Do not use an empty dump file prefix.
+ 	Do not call init_optimization_passes.
+ 	* toplev.h (init_optimization_passes): Remove.
+ 
+ 	* graph.c (print_rtl_graph_with_bb, clean_graph_dump_file,
+ 	finish_graph_dump_file): Remove SUFFIX parameter.
+ 	* graph.h (print_rtl_graph_with_bb, clean_graph_dump_file,
+ 	finish_graph_dump_file): Likewise.
+ 
+ 	* tree-pass.h (struct tree_opt_pass): Add `letter' field.
+ 	* cfgexpand.c (pass_expand): Adjust.
+ 	* gimple-low.c (pass_lower_cf, pass_remove_useless_vars): Adjust.
+ 	* passes.c (pass_rest_of_compilation): Adjust.
+ 	* predict.c (pass_profile): Adjust.
+ 	* tree-alias-common.c (pass_build_pta, pass_del_pta): Adjust.
+ 	* tree-cfg.c (pass_build_cfg, pass_remove_useless_stmts,
+ 	pass_split_crit_edges, pass_warn_function_return): Adjust.
+ 	* tree-complex.c (pass_lower_vector_ssa, pass_pre_expand): Adjust.
+ 	* tree-dfa.c (pass_referenced_vars): Adjust.
+ 	* tree-eh.c (pass_lower_eh): Adjust.
+ 	* tree-if-conv.c (pass_build_ssa): Adjust.
+ 	* tree-into-ssa.c (pass_build_ssa): Adjust.
+ 	* tree-mudflap.c (pass_mudflap_1, pass_mudflap_2): Adjust.
+ 	* tree-nomudflap.c (pass_mudflap_1, pass_mudflap_2): Adjust.
+ 	* tree-nrv.c (pass_nrv): Adjust.
+ 	* tree-optimize.c (pass_gimple, pass_all_optimizations,
+ 	pass_cleanup_cfg_post_optimizing, pass_free_datastructures,
+ 	pass_init_datastructures): Adjust.
+ 	* tree-outof-ssa.c (pass_del_ssa): Adjust.
+ 	* tree-profile.c (pass_tree_profile): Adjust.
+ 	* tree-sra.c (pass_sra): Adjust.
+ 	* tree-ssa-alias.c (pass_may_alias): Adjust.
+ 	* tree-ssa-ccp.c (pass_ccp, pass_fold_builtins): Adjust.
+ 	* tree-ssa-copyrename.c (pass_rename_ssa_copies): Adjust.
+ 	* tree-ssa-dce.c (pass_dce, pass_cd_dce): Adjust.
+ 	* tree-ssa-dom.c (pass_dominator): Adjust.
+ 	* tree-ssa-dse.c (pass_dse): Adjust.
+ 	* tree-ssa-forwprop.c (pass_forwprop): Adjust.
+ 	* tree-ssa-if-conv.c (pass_if_conversion): Adjust.
+ 	* tree-ssa-loop-ch.c (pass_ch): Adjust.
+ 	* tree-ssa-loop.c (pass_loop, pass_loop_init, pass_lim,
+ 	pass_loop_done, pass_complete_unroll, pass_iv_canon,
+ 	pass_iv_optimize, pass_vectorize): Adjust.
+ 	* tree-ssa-phiopt.c (pass_phiopt): Adjust.
+ 	* tree-ssa-pre.c (pass_pre, pass_fre): Adjust.
+ 	* tree-ssa.c (pass_redundant_phi, pass_early_warn_uninitialized,
+ 	pass_late_warn_uninnitialized): Adjust.
+ 	* tree-tailcall.c (pass_tail_recursion, pass_tail_calls): Adjust.
+ 
+ 	* Makefile.in (tree-dump.o): Add new dependencies.
+ 	* cgraph.c (cgraph_remove_node): TDF_all -> TDF_tree_all.
+ 	* cgraphunit.c (cgraph_preserve_function_body_p, cgraph_optimize):
+ 	Likewise.
+ 	* toplev.c (dump_file_name): New.
+ 	* tree-dump.c (dump_enable_all): Add LETTER parameter.
+ 	(struct dump_file_info): Add NUM and LETTER fields.
+ 	(dump_files): Adjust and add RTL dump files.
+ 	(dump_register): Add NUM and LETTER fields.
+ 	(get_dump_file_name, dump_initialized_p, enable_rtl_dump_file): New.
+ 	(dump_begin): Use get_dump_file_name.
+ 	(dump_switch_p_1): Adjust call to dump_enable_all.
+ 	* tree-dump.h (dump_register): Adjust prototype.
+ 	* tree-optimize.c (register_one_dump_file): Take dump file index.
+ 	Support flags for RTL dumps.
+ 	(register_dump_files): Fill in NUM field of struct dump_file_info.
+ 	Track properties both when the gate is executed and when it is not.
+ 	(execute_todo): Dump RTL.  Add PROPERTIES parameter.
+ 	(execute_one_pass): Pass properties to execute_todo.  Handle VCG
+ 	dumps of RTL.
+ 	* tree-pass.h (dump_file_name): New.
+ 	* tree.h (TDF_TREE, TDF_RTL, get_dump_file_name, dump_initialized_p):
+ 	New.
+ 
+ 	* Makefile.in (passes.o): Add new dependencies.
+ 	* passes.c (struct dump_file_info, enum dump_file_index,
+ 	dump_file_tbl, init_optimization_passes): Remove.
+ 	(open_dump_file, close_dump_file): Use tree-dumping infrastructure.
+ 	(rest_of_handle_new_regalloc, rest_of_handle_old_regalloc): Use
+ 	dump_enabled_p.
+ 	(finish_optimization_passes): Update finish_graph_dump_file loop.
+ 	(enable_rtl_dump_file): Remove.
+ 	* tree-dump.c (dump_files): Adjust and add RTL dump files.
+ 	(enable_rtl_dump_file): Add here.
+ 	* tree.h (enum tree_dump_index): Add RTL dump file indices.
+ 	* doc/invoke.texi (Debugging options): Document new RTL debugging
+ 	options.  Update.
+ 
+ 2004-09-05  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* c-common.c, c-decl.c, combine.c, defaults.h, fold-const.c,
+ 	gimplify.c, gthr-nks.h, hooks.c, lambda-code.c, lambda-mat.c,
+ 	stor-layout.c, target.h, tree-cfg.c, tree-chrec.c,
+ 	tree-if-conv.c, tree-inline.c, tree-into-ssa.c,
+ 	tree-mudflap.c, tree-optimize.c, tree-scalar-evolution.c,
+ 	tree-ssa-alias.c, tree-ssa-ccp.c, tree-ssa-dce.c,
+ 	tree-ssa-pre.c, tree-vectorizer.c, tree-vectorizer.h, tree.h,
+ 	vec.h: Fix comment formatting.
+ 
+ 2004-09-05  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* c-common.c, cfgexpand.c, cgraphunit.c, defaults.h,
+ 	et-forest.c, expr.c, gimplify.c, global.c, gthr-lynx.h,
+ 	hard-reg-set.h, modulo-sched.c, optabs.c, postreload-gcse.c,
+ 	tree-data-ref.c, tree-flow.h, tree-if-conv.c, tree-inline.c,
+ 	tree-sra.c, tree-ssa-loop-im.c, tree-ssa-loop-ivopts.c,
+ 	tree-ssa-loop-niter.c, tree-ssa-operands.c,
+ 	tree-ssa-operands.h, tree-ssa-propagate.c,
+ 	tree-ssa-propagate.h, tree-ssa-threadupdate.c, value-prof.c,
+ 	vec.c, vec.h: Fix comment typos.  Follow spelling conventions.
+ 
+ 2004-09-05  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-if-conv.c (gate_tree_if_conversion): Enable only if the
+ 	vectorizer is enabled.
+ 
+ 2004-09-05  Andreas Jaeger  <aj@suse.de>
+ 
+ 	* tree-if-conv.c: Spell check comments and clean up whitespace.
+ 
+ 2004-09-05  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-ssa-loop-ivopts.c: New file.
+ 	* Makefile.in (tree-ssa-loop-ivopts.c): Add.
+ 	* cfgloop.h (target_avail_regs, target_res_regs, target_small_cost,
+ 	target_pres_cost, target_spill_cost): Declare.
+ 	* cfgloopanal.c (avail_regs, res_regs, small_cost, pres_cost,
+ 	spill_cost): Renamed to ...
+ 	(target_avail_regs, target_res_regs, target_small_cost,
+ 	target_pres_cost, target_spill_cost): ... and exported.
+ 	(init_set_costs, global_cost_for_size): Work with renamed variables.
+ 	* common.opt (flag_ivopts): New flag.
+ 	* expr.c (expand_expr_real_1): Handle SSA_NAME case.  Handle
+ 	REF_ORIGINAL.
+ 	* gimplify.c (struct gimplify_ctx): Add into_ssa field.
+ 	(internal_get_tmp_var, gimplify_modify_expr, gimplify_expr): Support
+ 	generating SSA form.
+ 	(force_gimple_operand): New function.
+ 	* timevar.def (TV_TREE_LOOP_IVOPTS): New timevar.
+ 	* tree-cfg.c (stmt_bsi): New function.
+ 	* params.def (PARAM_IV_CONSIDER_ALL_CANDIDATES_BOUND,
+ 	PARAM_IV_MAX_CONSIDERED_USES): New.
+ 	* tree-flow.h (stmt_bsi, tree_ssa_iv_optimize, split_loop_exit_edge,
+ 	bsi_insert_on_edge_immediate_loop. standard_iv_increment_position,
+ 	ip_end_pos, ip_normal_pos, force_gimple_operand): Declare.
+ 	* tree-gimple.c (is_gimple_formal_tmp_var): Accept ssa names.
+ 	* tree-nested.c (build_addr): Export.
+ 	* tree-optimize.c (init_tree_optimization_passes): Add
+ 	pass_iv_optimize.
+ 	* tree-pass.h (pass_iv_optimize): Declare.
+ 	* tree-ssa-loop-im.c (for_each_index): Handle REALPART_EXPR and
+ 	IMAGPART_EXPR.
+ 	* tree-ssa-loop-manip.c (create_iv): Force the base to be acceptable
+ 	as a phi node argument.
+ 	(split_loop_exit_edge, bsi_insert_on_edge_immediate_loop,
+ 	ip_end_pos, ip_normal_pos, standard_iv_increment_position): New
+ 	functions.
+ 	* tree-ssa-loop-niter.c (zero_p, unsigned_type_for): Export.
+ 	* tree-ssa-loop.c (tree_ssa_loop_ivopts, gate_tree_ssa_loop_ivopts,
+ 	pass_iv_optimize): New pass.
+ 	* tree-ssa-operands.c (get_indirect_ref_operands): Handle REF_ORIGINAL.
+ 	* tree-ssanames.c (release_ssa_name): Allow calling with var = NULL.
+ 	* tree.c (build_int_cst_type, cst_and_fits_in_hwi): New functions.
+ 	* tree.h (REF_ORIGINAL): New macro.
+ 	(build_int_cst_type, unsigned_type_for, zero_p,
+ 	cst_and_fits_in_hwi, build_addr): Declare.
+ 	* doc/invoke.texi (-fivopts): Document.
+ 	(PARAM_IV_CONSIDER_ALL_CANDIDATES_BOUND,
+ 	PARAM_IV_MAX_CONSIDERED_USES): Document.
+ 	* doc/passes.texi: Document induction variable optimizations pass.
+ 
+ 2004-09-04  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+ 
+ 	* builtin-attrs.def (ATTR_NOTHROW_SENTINEL_1): New.
+ 	* builtins.def (BUILT_IN_EXECLE): Set ATTR_NOTHROW_SENTINEL_1.
+ 	* c-common.c (c_common_attribute_table): Accept parameters to
+ 	sentinel attribute.
+ 	(check_function_sentinel, handle_sentinel_attribute): Likewise.
+ 	* doc/extend.texi: Update accordingly.
+ 
+ 2004-09-04  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+ 
+ 	* builtin-attrs.def (ATTR_SENTINEL, ATTR_SENTINEL_NOTHROW_LIST):
+ 	New.
+ 	* builtins.def (BUILT_IN_EXECL, BUILT_IN_EXECLP): Add `sentinel'
+ 	attribute.
+ 	* c-common.c (handle_sentinel_attribute, check_function_sentinel):
+ 	New functions.
+ 	(c_common_attribute_table): Add `sentinel' attribute.
+ 	(check_function_arguments): Handle `sentinel' attribute.
+ 	* doc/extend.texi: Document `sentinel' attribute.
+ 
+ 2004-09-04  H.J. Lu  <hongjiu.lu@intel.com>
+ 
+ 	* configure: Regenerated.
+ 
+ 2004-09-04  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* gimplify.c (internal_get_tmp_var): Remove unused var CLASS.
+ 
+ 	* tree.c (save_expr): No longer TREE_READONLY.
+ 
+ 2004-09-04  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* passes.c (rest_of_clean_state):  Fix merge conflict made during
+ 	commiting the patch.
+ 
+ 2004-09-04  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* passes.c (rest_of_clean_state):  Decompose the instruction stream.
+ 
+ 2004-09-04  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* doc/md.texi (shift patterns): New anchor.  Add reference to
+ 	TARGET_SHIFT_TRUNCATION_MASK.
+ 	* doc/tm.texi (TARGET_SHIFT_TRUNCATION_MASK): Document.
+ 	* target.h (shift_truncation_mask): New target hook.
+ 	* targhook.h (default_shift_truncation_mask): Declare.
+ 	* targhook.c (default_shift_truncation_mask): Define.
+ 	* target-def.h (TARGET_SHIFT_TRUNCATION_MASK): Define.
+ 	(TARGET_INITIALIZER): Include it.
+ 	* simplify-rtx.c (simplify_binary_operation): Combine ASHIFT, ASHIFTRT
+ 	and LSHIFTRT cases.  Truncate arg1 if SHIFT_COUNT_TRUNCATED, otherwise
+ 	reject all out-of-range values.  Fix sign-extension code for modes
+ 	whose width is smaller than HOST_BITS_PER_WIDE_INT.
+ 	* optabs.c (simplify_expand_binop, force_expand_binop): New functions.
+ 	(expand_superword_shift, expand_subword_shift): Likewise.
+ 	(expand_doubleword_shift_condmove, expand_doubleword_shift): Likewise.
+ 	(expand_binop): Use them to implement double-word shifts.
+ 	* config/arm/arm.c (arm_shift_truncation_mask): New function.
+ 	(TARGET_SHIFT_TRUNCATION_MASK): Define.
+ 
+ 2004-09-04  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree.c (iterate_hash_expr): Optimize, avoid use of iterative_hash_object.
+ 	(mix): New macro copied from hashtab.c
+ 	(iterative_hash_hashval_t, iterative_hash_pointer,
+ 	iterative_hash_host_wide_int): New functions based on hashtab.c
+ 	implementation.
+ 
+ 2004-09-04  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.md (mask): New mode attribute.
+ 	(zero_extendsidi2): Add memory alternative.
+ 	(*zero_extendsidi2_mem): Delete.
+ 	(zero_extend[qh]i[sd]i2): Redefine using :GPR and :SHORT.  Use
+ 	memory_operand in the TARGET_MIPS16 check.
+ 	(*zero_extend[qh]i[sd]i2{,_mips16}): Name previously unnamed patterns.
+ 	Redefine using :GPR and :SHORT.
+ 	(zero_extendqihi2): Use memory_operand in the TARGET_MIPS16 check.
+ 
+ 2004-09-04  Uros Bizjak  <uros@kss-loka.si>
+ 
+ 	* builtins.c (expand_builtin_mathfn): Handle BUILT_IN_RINT{,F,L}
+ 	using rint_optab.
+ 	(expand_builtin): Expand BUILT_IN_RINT{,F,L} using
+ 	expand_builtin_mathfn.
+ 	* genopinit.c (optabs): Rename trunc_optab to btrunc_optab. Use
+ 	btrunc?f patterns for btrunc_optab. Implement rint_optab using
+ 	rint?f patterns.
+ 	* optabs.c (init_optabs): Initialize rint_optab.
+ 	* optabs.h (enum optab_index): Rename OTI_trunc to OTI_btrunc.
+ 	Add new OTI_rint.
+ 	(btrunc_optab): Rename macro from trunc_optab.
+ 	(rint_optab): Define corresponding macro.
+ 
+ 	* reg-stack.c (subst_stack_regs_pat): Handle UNSPEC_FRNDINT_FLOOR,
+ 	UNSPEC_FRNDINT_CEIL, UNSPEC_FRNDINT_TRUNC, UNSPEC_FRNDINT_MASK_PM.
+ 
+ 	* config/i386/i386-protos.h (emit_i387_cw_initialization):
+ 	Change prototype. Add new int parameter.
+ 	* config/i386/i386.c (emit_i387_cw_initialization):
+ 	Handle new rounding modes.
+ 
+ 	* config/i386/i386.h (enum fp_cw_mode): Delete.
+ 	(MODE_NEEDED): Handle new rounding modes.
+ 	(EMIT_MODE_SET): Change condition to handle new rounding modes.
+ 
+ 	* config/i386/i386.md (UNSPEC_FRNDINT_FLOOR, UNSPEC_FRNDINT_CEIL,
+ 	UNSPEC_FRNDINT_TRUNC, UNSPEC_FRNDINT_MASK_PM): New unspecs to
+ 	represent different rounding modes of frndint insn.
+ 	(type): Add frndint type.
+ 	(i387, length, memory): Handle this type.
+ 	(i387_cw): New attribute definition.
+ 	(*fix_truncdi_1, fix_truncdi_nomemory, fix_truncdi_memory,
+ 	*fix_truncsi_1, fix_truncsi_nomemory, fix_truncsi_memory,
+ 	*fix_trunchi_1, fix_trunchi_nomemory, fix_trunchi_memory):
+ 	Add "i387_cw" attribute defined to "trunc".
+ 	(x86_fnstcw_1): Remove comment.
+ 	(*frndintxf2): Rename insn definition to frndintxf2. Move
+ 	insn definition near rint?f2 expanders.
+ 	(rintdf2, rintsf2, rintxf2): New expanders to implement rint,
+ 	rintf and rintl built-ins as inline x87 intrinsics.
+ 	(frndintxf2_floor): New pattern to implement floor rounding
+ 	mode with frndint x87 instruction.
+ 	(floordf2, floorsf2, floorxf2): New expanders to implement floor,
+ 	floorf and floorl built-ins as inline x87 intrinsics.
+ 	(frndintxf2_ceil): New pattern to implement ceil rounding
+ 	mode with frndint x87 instruction.
+ 	(ceildf2, ceilsf2, ceilxf2): New expanders to implement ceil,
+ 	ceilf and ceill built-ins as inline x87 intrinsics.
+ 	(frndintxf2_trunc): New pattern to implement trunc rounding
+ 	mode with frndint x87 instruction.
+ 	(btruncdf2, btruncsf2, btruncxf2): New expanders to implement trunc,
+ 	truncf and truncl built-ins as inline x87 intrinsics.
+ 	(frndintxf2_mask_pm): New pattern to implement rounding
+ 	mode with exceptions with frndint x87 instruction.
+ 	(nearbyintdf2, nearbyintsf2, nearbyintxf2): New expanders to
+ 	implement nearbyint, nearbyintf and nearbyintl built-ins as
+ 	inline x87 intrinsics.
+ 
+ 2004-09-04  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.md (SHORT): New mode macro.
+ 	(size): New mode attribute.
+ 	(extend[qh]i[sd]i2): Redefine using :GPR and :SHORT.
+ 	(*extend[qh]i[sd]i2): New define_insn_and_split, combining previous
+ 	*extend[qh]i[sd]i2 and *extend[qh]i[sd]i2_mem patterns.  Use only if
+ 	!ISA_HAS_SEB_SEH.
+ 	(*extend[qh]i[sd]i2_se[bh]): New pattern, combining previous
+ 	*extend[qh]isi2_hw patterns and extending them to di.
+ 	(extendqihi2): Implement as define_insn_and_split that produces
+ 	extendqisi2 after reload.
+ 
+ 2004-09-03  Devang Patel  <dpatel@apple.com>
+ 
+ 	* Makefile.in (OBJS-common): Add tree-if-conv.o
+ 	(tree-if-conv.o): New rule.
+ 	* cfgloop.c (flow_loop_exit_edges_find): Set EDGE_LOOP_EXIT flag.
+ 	(get_loop_body_in_bfs_order): New.
+ 	* cfgloop.h (get_loop_body_in_bfs_order): New.
+ 	* tree-flow.h (enum move_pos): Move here from ..
+ 	* tree-ssa-loop-im.c (enum move_pos): here.
+ 	(movement_possibility): Make externally visible.
+ 	* tree-optimize.c (init_tree_optimization_passes): New entry for
+ 	if conversion pass.
+ 	* tree-pass.h (pass_if_conversion): New.
+ 	* tree-ssa-operands.c (get_expr_operands): Handle COND_EXPR.
+ 	* tree-if-conv.c: New file.
+ 	* doc/passes.texi: Document tree if-conversion pass.
+ 	* doc/tree-ssa.texi: Same.
+ 
+ 2004-09-03  H.J. Lu  <hongjiu.lu@intel.com>
+ 
+ 	PR target/14925:
+ 	Makefile.in (LIB2ADDEHSTATIC): New.
+ 	(LIB2ADDEHSHARED): New.
+ 	(LIBUNWIND): New.
+ 	(LIBUNWINDDEP): New.
+ 	(SHLIBUNWIND_LINK): New.
+ 	(SHLIBUNWIND_INSTALL): New.
+ 	(libgcc.mk): Pass LIB2ADDEHSTATIC, LIB2ADDEHSHARED, LIBUNWIND,
+ 	LIBUNWINDDEP, SHLIBUNWIND_LINK and SHLIBUNWIND_INSTALL.
+ 	(clean): Remove libunwind*
+ 	(stage1-start): Remove and copy stage1/libunwind*.
+ 	(stage2-start): Remove and copy stage2/libunwind*.
+ 	(stage3-start): Remove and copy stage3/libunwind*.
+ 	(stage4-start): Remove and copy stage4/libunwind*.
+ 	(stageprofile-start): Remove and copy stageprofile/libunwind*.
+ 	(stagefeedback-start): Remove and copy stagefeedback/libunwind*.
+ 
+ 	* config.gcc (ia64*-*-linux*): Always add t-libunwind to
+ 	tmake_file. Add t-libunwind-elf and ia64/t-glibc-libunwind to
+ 	tmake_file if --with-system-libunwind isn't used.
+ 
+ 	* config/ia64/t-glibc-libunwind: New file.
+ 	* config/t-libunwind-elf: Likewise.
+ 	* unwind-compat.c: Likewise.
+ 	* unwind-compat.h: Likewise.
+ 	* unwind-dw2-fde-compat.c: Likewise.
+ 
+ 	* config/ia64/t-glibc (LIB2ADDEH): Updated.
+ 	* config/ia64/t-hpux (T_CFLAGS): Add -DUSE_LIBUNWIND_EXCEPTIONS.
+ 
+ 	* config/ia64/unwind-ia64.c: Include "unwind-compat.h". Define
+ 	aliases if needed.
+ 	* unwind-dw2-fde-glibc.c: Likewise.
+ 	* unwind-dw2.c: Likewise.
+ 
+ 	* config/t-libunwind (LIB2ADDEH): Updated.
+ 	(LIB2ADDEHSTATIC): New.
+ 	(T_CFLAGS): Add -DUSE_LIBUNWIND_EXCEPTIONS.
+ 	(TARGET_LIBGCC2_CFLAGS): Set to -DUSE_GAS_SYMVER.
+ 
+ 	* configure.ac: Change --enable-libunwind-exceptions to
+ 	--with-system-libunwind. Don't define USE_LIBUNWIND_EXCEPTIONS.
+ 	* configure: Regenerated.
+ 	* config.in: Updated.
+ 
+ 	* doc/install.texi (ia64-*-linux): Require libunwind 0.98 or
+ 	above and mention --with-system-libunwind.
+ 	(ia64-*-hpux*): Mention --enable-libunwind-exceptions is
+ 	removed in gcc 3.4.3 and later.
+ 
+ 	* gcc.c (init_spec): Add -lunwind to -lgcc_s if
+ 	USE_LIBUNWIND_EXCEPTIONS is defined.
+ 
+ 	* mklibgcc.in: Support libunwind.
+ 
+ 2004-09-03  H.J. Lu  <hongjiu.lu@intel.com>
+ 
+ 	* config/i386/i386.c (x86_branch_hints): Remove m_PENT4 and
+ 	m_NOCONA.
+ 
+ 2004-09-03  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR middle-end/9997
+ 	* cfgexpand.c (LOCAL_ALIGNMENT): Provide default.
+ 	(STACK_ALIGNMENT_NEEDED, FRAME_GROWS_DOWNWARD): Likewise.
+ 	(struct stack_var, EOC, stack_vars, stack_vars_alloc, stack_vars_num,
+ 	stack_vars_sorted, stack_vars_conflict, stack_vars_conflict_alloc,
+ 	frame_phase, get_decl_align_unit, add_stack_var, triangular_index,
+ 	resize_stack_vars_conflict, add_stack_var_conflict,
+ 	stack_var_conflict_p, add_alias_set_conflicts, stack_var_size_cmp,
+ 	union_stack_vars, partition_stack_vars, dump_stack_var_partition,
+ 	expand_one_stack_var_at, expand_stack_vars, expand_one_stack_var,
+ 	expand_one_static_var, expand_one_hard_reg_var,
+ 	expand_one_register_var, expand_one_error_var, defer_stack_allocation,
+ 	expand_one_var, expand_used_vars_for_block, clear_tree_used): New.
+ 	(expand_used_vars): Rewrite.
+ 	* Makefile.in (cfgexpand.o): Update dependencies.
+ 
+ 2004-09-04  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* cfg.c (free_edge): Use ggc_free.
+ 	(expunge_block): Use ggc_free.
+ 	* passes.c (rest_of_clean_state): Free after compilation.
+ 	* tree-ssa.c (delete_tree_ssa): Free annotations; call release_defs
+ 	* tree-ssanames.c (release_defs): Ignore non-SSA_NAME arguments.
+ 
+ 2004-09-03  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	* tree-ssa-alias.c (may_be_aliased): Move TREE_STATIC check after
+ 	DECL_EXTERNAL check.
+ 
+ 2004-09-03  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* final.c (output_in_slot): New global variable.
+ 	(final_scan_insn): Add new state '2' to the 'nopeepholes' parameter.
+ 	Pass 2 as 'nopeepholes' to self for insns in a SEQUENCE.  Set
+ 	'output_in_slot' before invoking output_asm_insn.
+ 	(output_asm_insn): Add a space after the tab if 'output_in_slot'
+ 	is set.
+ 	* config/sparc/sparc.c (output_return): Pass 2 as 'nopeepholes' to
+ 	final_scan_insn.
+ 	(output_sibcall): Likewise.
+ 
+ 2004-09-03  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-ssa-operands.c (fini_ssa_operands): ggc_free unused arrays.
+ 	* tree-ssanames (init_ssanames): Likewise.
+ 
+ 2004-09-03  Ziemowit Laski  <zlaski@apple.com>
+ 
+ 	* stub-objc.c (objc_is_id, objc_declare_alias, objc_declare_class,
+ 	objc_declare_protocols, objc_start_protocol,
+ 	objc_start_class_interface, objc_start_category_interface,
+ 	objc_continue_interface, objc_finish_interface,
+ 	objc_add_instance_variable, objc_set_visibility, objc_set_method_type,
+ 	objc_start_class_implementation, objc_start_category_implementation,
+ 	objc_continue_implementation, objc_finish_implementation,
+ 	objc_add_method_declaration, objc_start_method_definition,
+ 	objc_finish_method_definition, objc_build_keyword_decl,
+ 	objc_build_method_signature, objc_build_encode_expr,
+ 	objc_build_protocol_expr, objc_build_selector_expr,
+ 	objc_build_message_expr, objc_build_string_object,
+ 	objc_get_class_reference, objc_get_protocol_qualified_type,
+ 	objc_static_init_needed_p, objc_generate_static_init_call): New stubs.
+ 
+ 2004-09-03  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	* config/mips/mips.h (TARGET_CPU_CPP_BUILTINS): Add __mips3d.
+ 
+ 	* config/mips/generic.md (generic_frecip_fsqrt_step): New.
+ 	* config/mips/mips-ps-3d.md (mips_rsqrt1_<fmt>): Use frsqrt1 type.
+ 	(mips_rsqrt2_<fmt>): Use frsqrt2 type.
+ 	(mips_recip1_<fmt>): Use frdiv1 type.
+ 	(mips_recip2_<fmt>): Use frdiv2 type.
+ 	* config/mips/mips.md (type): Add frdiv1, frdiv2, frsqrt1, frsqrt2.
+ 	* config/mips/sb1.md (ir_sb1_fpu_2pipes, ir_sb1_fpu_1pipe): Add frdiv1
+ 	and frsqrt1.
+ 	(ir_sb1_fpu_step2_2pipes, ir_sb1_fpu_step2_1pipe): New.
+ 
+ 2004-09-03  Daniel Jacobowitz  <dan@debian.org>
+ 
+ 	* reload.c (find_reloads): Swap operand_loc pointers for
+ 	find_dummy_reload if we have swapped two operands.
+ 
+ 2004-09-03  Hans-Peter Nilsson  <hp@axis.com>
+ 
+ 	* config/cris/cris.h (ASM_OUTPUT_CASE_END): Use prev_nonnote_insn
+ 	to get the tablejump-insn before the jump-table label.
+ 
+ 2004-09-03  Ziemowit Laski  <zlaski@apple.com>
+ 
+ 	* c-common.h (objc_is_id, objc_declare_alias, objc_declare_class,
+ 	objc_declare_protocols, objc_build_message_expr,
+ 	objc_finish_message_expr, objc_build_selector_expr,
+ 	objc_build_protocol_expr, objc_build_encode_expr,
+ 	objc_build_string_object, objc_get_protocol_qualified_type,
+ 	objc_get_class_reference, objc_get_class_ivars,
+ 	objc_start_class_interface, objc_start_category_interface,
+ 	objc_start_protocol, objc_continue_interface, objc_finish_interface,
+ 	objc_start_class_implementation, objc_start_category_implementation,
+ 	objc_continue_implementation, objc_finish_implementation,
+ 	objc_set_visibility, objc_set_method_type, objc_build_method_signature,
+ 	objc_add_method_declaration, objc_start_method_definition,
+ 	objc_finish_method_definition, objc_add_instance_variable,
+ 	objc_build_keyword_decl, objc_build_throw_stmt, objc_begin_try_stmt,
+ 	objc_finish_try_stmt, objc_begin_catch_clause,
+ 	objc_finish_catch_clause, objc_build_finally_clause,
+ 	objc_build_synchronized, objc_static_init_needed_p,
+ 	objc_generate_static_init_call): New prototypes.
+ 
+ 2004-09-03  Steve Ellcey  <sje@cup.hp.com>
+ 
+ 	* config/ia64/ia64.c (ia64_function_arg): Use PARALLEL even if there
+ 	is only one reg.
+ 	(ia64_function_value): Ditto.
+ 
+ 2004-09-03  Jan Beulich  <jbeulich@novell.com>
+ 
+ 	* config.gcc: Resurrect NetWare as a target. Handle special case of
+ 	Novell linker to be used (specified through --with-ld=) and threading
+ 	model of either Posix (default) or NKS.
+ 	* config/i386/i386.c (ix86_return_pops_args): Conditionalize popping
+ 	of incoming hidden argument on KEEP_AGGREGATE_RETURN_POINTER.
+ 	* config/i386/i386.h (KEEP_AGGREGATE_RETURN_POINTER): New.
+ 	* config/i386/netware.c, config/i386/netware.h: New.
+ 	* config/i386/nwld.c, config/i386/nwld.h: New.
+ 	* config/i386/netware-crt0.c: New.
+ 	* config/i386/netware-libgcc.c: New.
+ 	* config/i386/netware-libgcc.def: New.
+ 	* config/i386/netware-libgcc.exp: New.
+ 	* config/i386/t-netware, config/i386/t-nwld: New.
+ 	* gthr-nks.h: New.
+ 	* doc/install.texi: Document NKS threading model.
+ 
+ 2004-09-03  Jan Beulich  <jbeulich@novell.com>
+ 
+ 	PR c/7054
+ 	* defaults.h (TARGET_DEFAULT_PACK_STRUCT): Provide default.
+ 	* tree.h (initial_max_fld_align): Declare
+ 	* stor-layout.c (initial_max_fld_align): Define and initialize.
+ 	(maximum_field_alignment): Initialize to the same value.
+ 	* common.opt: Add -fpack-struct= variant of switch.
+ 	* opts.c: Handle -fpack-struct= variant of switch.
+ 	* c-pragma.c: Change #pragma pack() handling so that it becomes
+ 	compatible to other compilers: accept individual 'push' argument,
+ 	make final pop restore (command line) default, correct interaction
+ 	of push/pop and sole specification of a new alignment (so that the
+ 	sequence #pragma pack(push) - #pragma pack(<n>) becomes identical
+ 	to #pragma pack(push, <n>).
+ 	* doc/extend.texi: New node "Structure-Packing Pragmas" under
+ 	"Pragmas", describing #pragma pack.
+ 	* doc/invoke.texi: Document -fpack-struct=<n> variant of switch.
+ 	* doc/tm.texi: Adjust description for HANDLE_PRAGMA_PACK_PUSH_POP.
+ 	Document new TARGET_DEFAULT_PACK_STRUCT.
+ 
+ 2004-09-03  Devang Patel  <dpatel@apple.com>
+ 
+ 	* dwarf2out.c (gen_field_die). Equate decl number to die.
+ 
+ 2004-09-03  Vladimir Makarov  <vmakarov@redhat.com>
+ 
+ 	PR target/15832
+ 	* global.c (modify_reg_pav): New function.
+ 	(make_accurate_live_analysis): Call the new function.  Move pavin
+ 	modification by earlyclobber set into the new function.
+ 
+ 2004-09-03  Andreas Schwab  <schwab@suse.de>
+ 
+ 	* config/m68k/m68k.c (output_andsi3): Use -1 instead of
+ 	(HOST_WIDE_INT)0xffffffff since CONST_INT value are always sign
+ 	extended.
+ 
+ 2004-09-02  Jan Beulich  <jbeulich@novell.com>
+ 
+ 	* Makefile.in (LIB2ADDEHDEP): Add unwind.h and unwind-pe.h.
+ 	* mklibgcc.in (libgcc_dep): New, covering general dependencies, but
+ 	not unwind code specific ones.
+ 	(libgcc2_c_dep): Replace general dependencies with use of libgcc_dep.
+ 	Remove unwind code specific dependencies.
+ 	(libgcov_c_dep): Replace general dependencies with use of libgcc_dep.
+ 	Remove gbl-ctors.h.
+ 	Add libgcc_dep to output generated for LIB2ADD, LIB2ADDEH, and
+ 	LIB2ADD_ST. Add LIB2ADDEHDEP to output generated for LIB2ADDEH.
+ 	* tsystem.h: Declare memcpy and memset when inhibit_libc.
+ 
+ 2004-09-02  Roman Zippel  <zippel@linux-m68k.org>
+ 
+ 	* combine.c (try_combine): Delay modifying of insns which cannot
+ 	be easily undone.
+ 
+ 2004-09-02  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* gcc/common.opt: Rename ivcanon to tree-loop-ivcanon, tree-lim to
+ 	tree-loop-im.
+ 	* gcc/tree-ssa-loop.c: Ditto
+ 	* gcc/tree-ssa-loop-ivcanon.c: Ditto
+ 	* gcc/doc/invoke.texi: Ditto.
+ 
+ 2004-09-02  Ziemowit Laski  <zlaski@apple.com>
+ 
+ 	* c-decl.c (store_parm_decls_newstyle): Make static.
+ 	(store_parm_decls_from): New function.
+ 	* c-tree.h (store_parm_decls_newstyle): Remove prototype.
+ 	(store_parm_decls_from): New prototype.
+ 
+ 2004-09-02  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* config/rs6000/rs6000.c (expand_block_move): Use SImode and
+ 	HImode with STRICT_ALIGNMENT.
+ 
+ 2004-09-02  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* config/arm/bpabi.h (TARGET_BPABI_CPP_BUILTINS): Define.
+ 	(TARGET_OS_CPP_BUILTINS): Likewise.
+ 	* config/arm/symbian.h (TARGET_OS_CPP_BUILTINS): Include
+ 	TARGET_BPABI_CPP_BUILTINS.
+ 
+ 2004-09-02  Roman Zippel  <zippel@linux-m68k.org>
+ 
+ 	* combine.c (distribute_notes): Don't add REG_LABEL to jump insn.
+ 
+ 2004-09-02  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* builtins.c (expand_builtin_cabs): Delete.
+ 	(expand_builtin): If unable to fold the values do a normal
+ 	library call for builtin_cab*.
+ 	(fold_builtin_cabs): Depend on optimize and optimize_size.
+ 	* optabs.c (expand_cmplxdiv_straight): Delete.
+ 	(expand_cmplxdiv_wide): Ditto.
+ 	(expand_vector_binop): Ditto.
+ 	(expand_vector_unop): Ditto.
+ 	(expand_complex_abs): Delete.
+ 	(expand_binop): Remove calls to above functions.
+ 	Remove open coding of complex arithmetic.
+ 	(expand_unop): Ditto.
+ 	* optabs.h: Remove prototypes.
+ 
+ 2004-09-02  Ziemowit Laski  <zlaski@apple.com>
+ 
+ 	* c-decl.c (store_parm_decls_newstyle): Make externally visible.
+ 	* c-tree.h (store_parm_decls_newstyle): New prototype.
+ 
+ 2004-09-02  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* config/rs6000/rs6000.c (expand_block_clear): Use vector
+ 	instructions if available.
+ 	(expand_block_move): Likewise.
+ 
+ 2004-09-03  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* rtl.def (RANGE_INFO, RANGE_REG, RANGE_VAR, RANGE_LIVE): Kill.
+ 
+ 2004-09-02  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* config/arm/symbian.h (LIB_SPEC): Define to empty.
+ 	* config/arm/t-symbian (SHLIB_LC): Likewise.
+ 
+ 2004-09-02  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/bpabi.c (__aeabi_ul2d, __aeabi_ul2f): Remove.
+ 
+ 2004-09-02  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.c (mips_classify_symbol, mips_fetch_insns):
+ 	(mips_restore_gp, mips_set_return_address, mips_expand_prologue)
+ 	(mips16_fp_args, mips_avoid_hazard): Replace abort with gcc_assert.
+ 	(build_mips16_call_stub): Likewise.  Remove daft CALL_INSN checks.
+ 	(mips_issue_rate): Remove unreachable abort.
+ 	(mips_symbolic_constant_p, mips_symbolic_address_p, mips_symbol_insns)
+ 	(mips_output_move, mips_relational_operand_ok_p, mips_arg_info)
+ 	(mips_block_move_straight, print_operand_address, mips_file_start)
+ 	(mips_initial_elimination_offset, mips16_fp_args, dump_constants_1)
+ 	(mips_output_conditional_branch, mips_expand_builtin_direct)
+ 	(mips_expand_builtin_compare): Replace abort with gcc_unreachable.
+ 	* config/mips/mips.md (rotr<mode>3, consttable_float): Replace abort
+ 	with gcc_assert.
+ 
+ 2004-09-02  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.md (*lea_high64): Change split condition to
+ 	flow2_completed.  Add a peephole2 to generate a more parallel version.
+ 
+ 2004-09-02  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* gimplify.c (gimplify_compound_lval): Move "stack" varray out of
+ 	GGC.
+ 
+ 	* ggc-page.c: include tree-flow.h.
+ 	(extra_order_size_table): Add stmt_ann_d.
+ 	(STAT_LABEL): Rename from ....
+ 	(LABEL): ... this one.
+ 	* Makefile.in (ggc-page.o): Add dependency.
+ 
+ 	* ggc-common.c (ggc_force_collect): New global variable.
+ 	(loc_description): Add fields "freed", "collected"
+ 	(ptr_hash): New static hash
+ 	(ptr_hash_entry): New structure.
+ 	(hash_ptr,eq_ptr,ggc_prune_ptr): New static functions.
+ 	(ggc_record_overhead): Take ptr argument, record it
+ 	(ggc_prune_overhead_list, ggc_free_overhead): New functions.
+ 	(cmp_statistics): Imrove sorting.
+ 	(dump_ggc_loc_statistics): Output newly collected statistics
+ 	* ggc-page.c (ggc_alloc): Update call of ggc_record_overhead
+ 	(ggc_free): Call ggc_free_overhead.
+ 	(ggc_collect): Force collection when asked to be forced.
+ 	(ggc_collect): Call ggc_prune_overhead_list.
+ 	* ggc.h (ggc_force_collect): Declare
+ 	(ggc_record_overhead): Update prototype.
+ 	(ggc_free_overhead, ggc_prune_overhead_list): Declare.
+ 
+ 2004-09-02  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	* common.opt (ftrapping-math): Default to on.
+ 
+ 2004-09-02  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* arm/predicates.md (arm_reload_memory_operand): Allow MEM.
+ 
+ 2004-09-02  Denis Chertykov  <denisc@overta.ru>
+ 
+ 	PR target/16884
+ 	* config/avr/avr.md ("movmemhi"): Substitute match_dup to
+ 	match_scratch.
+ 	(*movmemqi_insn): Likewise.
+ 	(*movmemhi): Likewise.
+ 	(clrmemhi): Likewise.
+ 	(*clrmemqi): Likewise.
+ 	(*clrmemhi): Likewise.
+ 
+ 2004-09-02  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config.gcc (arm*-*-eabi* | arm*-*-symbianelf*): Set
+ 	default_use_cxa_atexit=yes.
+ 
+ 2004-09-02  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* config/rs6000/linux64.h: Don't include signal.h or sys/ucontext.h.
+ 	(struct kernel_old_ucontext): Delete.
+ 	(struct gcc_pt_regs, gcc_sigcontext, gcc_ucontext): New.
+ 	(MD_FALLBACK_FRAME_STATE_FOR): Use gcc_* structs.  Only define
+ 	when IN_LIGGCC2.
+ 
+ 2004-09-02  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* toplev.c (process_options): Fix typo.
+ 
+ 2004-09-01  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR middle-end/17258
+ 	* calls.c (initialize_argument_information): Tighten pass-through
+ 	conditions for pass-by-reference.  Remove dead TARGET_EXPR code.
+ 	Use build_fold_addr_expr.
+ 	(emit_library_call_value_1): Use build_fold_addr_expr.  Remove code
+ 	that assumes ADDR_EXPR allocates stack space.
+ 	* fold-const.c (build_fold_addr_expr_with_type): Look through
+ 	WITH_SIZE_EXPR.
+ 
+ 2004-09-01  Dan Nicolaescu  <dann@ics.uci.edu>
+ 
+ 	* gengenrtl.c (gendef): Use rtx_alloc, don't do PUT_CODE.
+ 	* ggc.h (ggc_alloc_rtx): Delete.
+ 
+ 2004-09-01  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* expmed.c (enum alg_code): Remove long unused enumeration values.
+ 	(struct mult_cost): New structure to hold the "score" of a synthetic
+ 	multiply sequence, including both a rtx_cost and a latency field.
+ 	(MULT_COST_LESS): New macro to compare mult_cost to a constant.
+ 	(CHEAPER_MULT_COST): New macro to compare two mult_costs.
+ 	(struct algorithm): Change type of cost field to be mult_cost.
+ 	(synth_mult): Change type of cost_limit argument to be a
+ 	pointer to a mult_cost.  Update all cost comparisons to use the
+ 	new mult_cost infrastructure.  For alg_add_factor and
+ 	alg_sub_factor operations, latency is lower than the rtx_cost.
+ 	(choose_mult_variant):  Update calls to synth_mult.  Perform
+ 	cost comparisons using the new mult_cost infrastructure.
+ 	(expand_mult_highpart): Use alg.cost.cost instead of alg.cost
+ 	to optain the total rtx_cost of a synth_mult "algorithm".
+ 
+ 2004-09-01  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* config/rs6000/power4.md: Increase store latency to 12.
+ 	* config/rs6000/power5.md: Same.
+ 
+ 2004-09-01  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	PR target/14064
+ 	* config/avr/avr.c (avr_unique_section): Delete prototype and
+ 	definition.
+ 	(TARGET_ASM_UNIQUE_SECTION): Delete.
+ 
+ 2004-09-01  Ziemowit Laski  <zlaski@apple.com>
+ 
+ 	* c-parse.in (primary): Call objc_build_message_expr(),
+ 	objc_build_selector_expr(), objc_build_protocol_expr(),
+ 	objc_build_encode_expr() and objc_build_string_object() instead of
+ 	build_message_expr(), build_selector_expr(), build_protocol_expr(),
+ 	build_encode_expr() and build_objc_string_object(), respectively.
+ 	(component_decl_list2): Call objc_get_class_ivars() instead of
+ 	get_class_ivars_from_name().
+ 	(keyworddecl): Call objc_build_keyword_decl() instead of
+ 	build_keyword_decl().
+ 	(receiver): Call objc_get_class_reference() instead of
+ 	get_class_reference().
+ 	(reswords): Add blank line before @@ifobjc section, for clarity.
+ 
+ 2002-09-01  Fariborz Jahanian <fjahanian@apple.com>
+ 
+ 	* config/rs6000/darwin.h (ROUND_TYPE_ALIGN): Restrict alignment
+ 	to Altivec vetors.
+ 
+ 2004-09-01  Wu Yongwei  <adah@sh163.net>
+ 	    Danny Smith  <dannysmith@users.sourceforge.net>
+ 
+ 	* gthr-win32.h (__gthread_recursive_mutex_t): Use 'unsigned long',
+ 	not Windows 'DWORD'.
+ 	(__GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION): Correct typo.
+ 	(__GTHREAD_RECURSIVE_MUTEX_INIT_DEFAULT): Likewise.
+ 	(__gthr_win32_recursive_mutex_init_function): Add prototype for
+ 	__GTHREAD_HIDE_WIN32API case..
+ 	(__gthr_win32_recursive_mutex_lock): Likewise.
+ 	(__gthr_win32_recursive_mutex_trylock): Likewise.
+ 	(__gthr_win32_recursive_mutex_unlock): Likewise.
+ 	(__gthread_recursive_mutex_init_function); Add definition for
+ 	__GTHREAD_HIDE_WIN32API case.
+ 	(__gthread_recursive_mutex_lock): Correct call to InterlockedDecrement.
+ 	* config/i386/grthr-win32.c (__gthread_recursive_mutex_lock): Correct
+ 	call to InterlockedDecrement.
+ 
+ 2004-09-01  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* tree-tailcall.c (find_tail_calls): Also fail is statement has
+ 	volatile operands.
+ 
+ 	* tree-ssa.c (propagate_into_addr): Properly test for LHR.
+ 
+ 	* doc/c-tree.texi: Document new operands for ARRAY_REF and
+ 	COMPONENT_REF.
+ 
+ 2004-09-01  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* Makefile.in (rtl-profile.o, value-prof.o): Add GCC_H dependency.
+ 	* common.opt (fspeculative-prefetching): New.
+ 	* flags.h (flag_speculative_prefetching_set): Declare.
+ 	* gcov-io.c (gcov_write_counter, gcov_read_counter): Allow negative
+ 	values.
+ 	* opts.c (flag_sepculative_prefetching_set): New variable.
+ 	(common_handle_option): Handle -fspeculative-prefetching.
+ 	* passes.c (rest_of_compilation): Ditto.
+ 	* profile.c (instrument_values, compute_value_histograms, branch_prob):
+ 	Use vectors instead of arrays.
+ 	* toplev.c (process_options): Handle -fspeculative-prefetching.
+ 	* rtl-profile.c: Include ggc.h.
+ 	(rtl_gen_interval_profiler, rtl_gen_pow2_profiler,
+ 	rtl_gen_one_value_profiler_no_edge_manipulation,
+ 	rtl_gen_one_value_profiler, rtl_gen_const_delta_profiler): Type of
+ 	argument changed.
+ 	* tree-profile.c (tree_gen_interval_profiler, tree_gen_pow2_profiler,
+ 	tree_gen_one_value_profiler, tree_gen_const_delta_profiler): Type of
+ 	argument changed.
+ 	* value-prof.c: Include ggc.h.
+ 	(NOPREFETCH_RANGE_MIN, NOPREFETCH_RANGE_MAX): New
+ 	macros.
+ 	(insn_prefetch_values_to_profile, find_mem_reference_1,
+ 	find_mem_reference_2, find_mem_reference, gen_speculative_prefetch,
+ 	speculative_prefetching_transform): New.
+ 	(value_profile_transformations): Call speculative_prefetching_transform.
+ 	(insn_values_to_profile): Call insn_prefetch_values_to_profile.
+ 	(insn_divmod_values_to_profile, rtl_find_values_to_profile,
+ 	tree_find_values_to_profile, find_values to profile): Use vectors
+ 	instead of arrays.
+ 	(free_profiled_values): Removed.
+ 	* value-prof.h (struct histogram_value): Renamed to
+ 	struct histogram_value_t.
+ 	(histogram_value, histogram_values): New types.
+ 	(find_values_to_profile): Declaration changed.
+ 	(free_profiled_values): Removed.
+ 	(struct profile_hooks): Type of argument of the hooks changed to
+ 	histogram_value.
+ 	* doc/invoke.texi (-fspeculative-prefetching): Document.
+ 
+ 2004-09-01  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	PR rtl-optimization/16408
+ 	* gcse.c (replace_store_insn): Fix LIBCALL/RETVAL notes.
+ 
+ 2004-09-01  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/ns32k/ns32k.h (TRANSFER_FROM_TRAMPOLINE): Remove.
+ 	(TRAMPOLINE_TEMPLATE): Merge code from __trampoline inline.
+ 
+ 2004-09-01  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* libgcc-std.ver (GCC_3.4.2): Export also __trampoline_setup.
+ 
+ 2004-09-01  Mike Stump  <mrs@apple.com>
+ 
+ 	* config/darwin.c (machopic_symbol_defined_p): In addition to
+ 	being SYMBOL_REF_LOCAL_P, a symbol must also be
+ 	! SYMBOL_REF_EXTERNAL_P, as only those are _always_ locally
+ 	defined in this output file, or translation unit in the case
+ 	of IMA not being used.
+ 	(machopic_output_indirection): SYMBOL_REF_LOCAL_P symbols
+ 	never need .indirect_symbol when indirecting.
+ 
+ 2004-09-01  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* Makefile.in (bb-reorder.o): Add several dependencies.
+ 
+ 2004-09-01  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* fold-const.c (operand_equal_p): Require equal sign also for
+ 	FIX_{CEIL,TRUNC,FLOOR,ROUND}_EXPR.
+ 
+ 2004-09-01  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* config.gcc (--with-cpu on ARM): Preserve the canonical cpu name
+ 	for use in configargs.h.  Put the cname in a separate variable.  Use
+ 	that to set target_cpu_default2.
+ 
+ 2004-09-01  J"orn Rennecke <joern.rennecke@superh.com>
+ 	    Nick Clifton  <nickc@redhat.com>
+ 
+ 	* config/sh/sh.md ("length"): Increase branch length when
+ 	SH1 pic code to 18: 12 bytes of instructions, 4 byte for the
+ 	constant, 2 byte for aligning the constant.
+ 
+ 2004-09-01  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* arm/arm-cores.def (ARM_CORE): Add new field for the real name of the
+ 	CPU.
+ 	(arm7tdmi-s): New CPU name.
+ 	* arm/arm.c (ARM_CORE): Update for new format.
+ 	* arm/arm.h (ARM_CORE): Likewise.
+ 	* arm/gentune.sh: Update for extra field.
+ 	* config.gcc: Likewise.
+ 	* arm/arm-tune.md: Regenerate.
+ 	* doc/invoke.texi: Document the real processor names for ARM cpus.
+ 
+ 2004-09-01  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* arm/ieee754-df.S (aeabi_ul2d, aeabi_l2d, floatundidf)
+ 	(floatdidf): New functions.
+ 	* arm/ieee754-sf.S (aeabi_ul2f, aeabi_l2f, floatundisf)
+ 	(floatdisf): New functions.
+ 	* t-arm-elf: Use them.
+ 
+ 2004-09-01  Ziemowit Laski  <zlaski@apple.com>
+ 
+ 	* c-common.h (lookup_interface): Remove prototype.
+ 	(is_class_name): Rename to objc_is_class_name.
+ 	(lookup_objc_ivar): Rename to objc_lookup_ivar.
+ 	(get_current_scope): Rename to objc_get_current_scope.
+ 	* c-decl.c (get_current_scope): Rename to objc_get_current_scope.
+ 	* c-parse.in (parmlist_or_identifiers_1): Get rid of unused variable.
+ 	(yylexname): Call objc_is_class_name() instead of is_class_name().
+ 	* c-typeck.c (build_external_ref): Call objc_lookup_ivar()
+ 	instead of lookup_objc_ivar().
+ 	* stub-objc.c (lookup_interface): Remove stub.
+ 	(is_class_name): Rename to objc_is_class_name.
+ 	(lookup_objc_ivar): Rename to objc_lookup_ivar.
+ 
+ 2004-08-31  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* config.gcc (arm*-*-symbianelf*): Do not include t-bpabi.
+ 	* config/arm/lib1funcs.asm: Do not include supplemental .S files
+ 	when compiling for Symbian.
+ 	* config/arm/symbian.h (RENAME_LIBRARY): New macro.
+ 	(TARGET_OS_CPP_BUILTINS): Likewise.
+ 	* config/arm/t-symbian (LIB1ASMFUNCS): Define.
+ 
+ 2004-08-31  Stan Shebs  <shebs@apple.com>
+ 
+ 	* toplev.c (process_options): Ensure debug_hooks is initialized.
+ 
+ 2004-08-31  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* target-def.h (TARGET_CXX): Add TARGET_CXX_EXPORT_CLASS_DATA.
+ 	* target.h (cxx): Add export_class_data.
+ 	* config/arm/arm.c (arm_cxx_export_class_data): New function.
+ 	(TARGET_CXX_EXPORT_CLASS_DATA): Use it.
+ 	* doc/tm.texi (TARGET_CXX_EXPORT_CLASS_DATA): Document it.
+ 
+ 2004-08-31  Kaz Kojima  <kkojima@gcc.gnu.org>
+ 
+ 	* config/sh/sh.c (output_branch): Check the insn length possibly
+ 	in the delayed slot.
+ 
+ 2004-08-31  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* tree-pretty-print.c (dump_generic_node, case CONVERT_EXPR): Add
+ 	blank after ')'.
+ 	(op_symbol, case *_{DIV,MOD}_EXPR): Say what rounding is being used.
+ 
+ 	* c-common.c (c_alignof_expr): Use DECL_ALIGN_UNIT and TYPE_ALIGN_UNIT.
+ 	(c_sizeof_of_alignof_type): Likewise.
+ 	* expr.c (array_ref_element_size): Likewise.
+ 	(highest_pow2_factor_for_target): Likewise.
+ 	* gimplify.c (canonicalize_addr_expr): Likewise.
+ 	(gimplify_compound_lval): Likewise.
+ 	* stor-layout.c (finalize_record_size, finalize_type_size): Likewise.
+ 	* tree-ssa-ccp.c (maybe_fold_offset_to_array_ref): Likewise.
+ 	* varasm.c (assemble_variable): Likewise.
+ 	(output_constant_def_contents): Alignments are unsigned.
+ 
+ 2004-08-31  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 	    Jeff Law  <law@redhat.com>
+ 
+ 	* tree-cfg.c (cfg_remove_useless_stmts_bb): Also invalidate if VAL
+ 	gets modified.
+ 
+ 2004-08-31  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* hooks.c (hook_bool_void_true): New function.
+ 	* hooks.h (hook_bool_void_true): Declare.
+ 	* target-def.h (TARGET_CXX): Add
+ 	TARGET_CXX_KEY_METHOD_MAY_BE_INLINE.
+ 	* target.h (struct cxx): Add key_method_may_be_inline.
+ 	* config/arm/arm.c (arm_cxx_key_method_may_be_inline): New
+ 	function.
+ 	(TARGET_CXX_KEY_METHOD_MAY_BE_INLINE): New macro.
+ 	* config/arm/bpabi.h: Use __THUMB_INTERWORK__ instead of
+ 	__THUMB_INTERWORK.
+ 
+ 2004-08-31  Denis Chertykov  <denisc@overta.ru>
+ 
+ 	PR target/15417
+ 	* config/avr/avr.c (avr_hard_regno_mode_ok): Enable usage of
+ 	frame pointer register only in Pmode while reload in progress.
+ 
+ 2004-08-31  Stephane Carrez  <stcarrez@nerim.fr>
+ 
+ 	PR target/15334
+ 	* config/m68hc11/m68hc11.c (m68hc11_override_options): Disable -fweb
+ 	because it breaks the 32-bit shift patterns that rely on a match_dup.
+ 
+ 2004-08-31  Matt Austern  <austern@apple.com>
+ 
+ 	* config/darwin.c (darwin_make_decl_one_only): Allocate section
+ 	names once per compilation, instead of once per symbol.
+ 
+ 2004-08-31  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* Makefile.in (build_subdir): New substitution.
+ 	(fixinc.sh): Simplify heavily since fixincludes is already built.
+ 	(stmp-fixinc): Depend on specs.ready.
+ 	(install-mkheaders): Use new location of fixincludes.
+ 	(clean): Do not descend into fixinc.
+ 	(FORBUILD): Replace with ../$(build_subdir).
+ 	* configure.ac (build_subdir): Substitute.
+ 	(FORBUILD): Do not set.
+ 	(all_outputs): Remove fixinc/Makefile.
+ 	(default commands): Do not create links in fixinc.
+ 	* mkfixinc.sh: New, from fixinc/mkfixinc.sh without
+ 	the fixincludes configuration steps and substituting
+ 	@FIXINCL@ in fixinc.in.
+ 	* fixinc.in: New, from fixinc/fixincl.sh.
+ 
+ 	* fixinc/*: Removed.
+ 
+ 2004-08-31  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* attribs.c (strip_attrs): Remove.
+ 	(split_specs_attrs): Move ...
+ 	* c-decl.c: ... to here.
+ 	* tree.h (split_specs_attrs, strip_attrs): Remove.
+ 	* c-tree.h (split_specs_attrs): Declare.
+ 
+ 2004-08-31  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* read-rtl.c: Disable RTL checking.
+ 	(apply_macro_to_rtx): Use XTMPL to access 'T' fields.
+ 
+ 2004-08-31  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.md (fcond): New code macro and attribute.
+ 	(sunordered_[sd]f, suneq_[sd]f, sunlt_[sd]f, sunle_[sd]f)
+ 	(seq_[sd]f, slt_[sd]f, sle_[sd]f): Redefine using :SCALARF and fcond.
+ 	(sgt_[sd]f, sge_[sd]f): Redefine using :SCALARF.
+ 
+ 2004-08-30  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	Revert:
+ 	2004-08-29  Mark Mitchell  <mark@codesourcery.com>
+ 	PR rtl-optimization/16590
+ 	* gcse.c (pre_delete): Do not create invalid REG_EQUAL notes.
+ 
+ 2004-08-30  Andrew Pinski  <apinski@apple.com>
+ 
+ 	* hard-reg-set.h:
+ 	s/HOST_BITS_PER_WIDES_FAST_INT/HOST_BITS_PER_WIDEST_FAST_INT.
+ 	* ChangeLog: Fix previous ChangeLog entry.
+ 
+ 	PR rtl-opt/13987
+ 	* config.host (use_long_long_for_widest_fast_int): New, default is
+ 	off.
+ 	(ia64-*-hpux*): Enable use_long_long_for_widest_fast_int.
+ 	* configure.ac: If use_long_long_for_widest_fast_int, then
+ 	define USE_LONG_LONG_FOR_WIDEST_FAST_INT.
+ 	* configure: Regenerate.
+ 	* config.in: Regenerate.
+ 	* hwint.h (HOST_WIDEST_FAST_INT, HOST_BITS_PER_WIDEST_FAST_INT):
+ 	New: widest integer type supported efficiently in hardware for the
+ 	host.
+ 	* sbitmap.h (SBITMAP_ELT_BITS): Define based on
+ 	HOST_BITS_PER_WIDEST_FAST_INT.
+ 	(SBITMAP_ELT_TYPE): Define based on HOST_WIDEST_FAST_INT.
+ 	* hard-reg-set.h (HARD_REG_ELT_TYPE): Define based on
+ 	HOST_WIDEST_FAST_INT
+ 	instead of HOST_WIDE_INT.
+ 	(HARD_REG_SET_LONGS): Likewise.
+ 	(UHOST_BITS_PER_WIDE_INT): Likewise.
+ 	Change the checks for the fast cases to be based on
+ 	HOST_BITS_PER_WIDEST_FAST_INT instead of HOST_BITS_PER_WIDE_INT.
+ 
+ 2004-08-30  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* cfgcleanup.c (merge_memattrs): Look at the value of MEM_SIZE,
+ 	not the pointers.
+ 
+ 2004-08-30  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	PR 12738
+ 	PR 17205
+ 	Radar 3460526
+ 	Radar 3775729
+ 	* c-decl.c (grokdeclarator): Produce error for 'static' on local
+ 	function declaration.
+ 
+ 2004-08-30  Richard Henderson  <rth@redhat.com>
+ 
+ 	* expr.c (array_ref_element_size): Force aligned_size back to
+ 	sizetype.
+ 	(component_ref_field_offset): Similarly for aligned_offset.
+ 	* tree.c (recompute_tree_invarant_for_addr_expr): Mark raw
+ 	low-bound, element-size, field-offset fields rather than
+ 	computed values.
+ 
+ 2004-08-30  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-parse.in (parmlist_or_identifiers_1): Remove unreachable and
+ 	redundant code.
+ 
+ 2004-08-30  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-tree.h (struct language_function): Add arg_info element.
+ 	* c-decl.c (current_function_arg_info): New.
+ 	(grokdeclarator, store_parm_decls): Use it instead of
+ 	DECL_ARGUMENTS.
+ 	(c_push_function_context, c_pop_function_context): Save and
+ 	restore it.
+ 
+ 2004-08-30  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-typeck.c (build_unary_op): Don't expand ADDR_EXPR of a
+ 	COMPONENT_REF to pointer arithmetic.
+ 	* varasm.c (initializer_constant_valid_p): Allow "&(*c).f", for
+ 	constant "c" as a valid constant initializer.  Allow narrowing of
+ 	differences against the same base object, for any base object.
+ 
+ 2004-08-30  Richard Henderson  <rth@redhat.com>
+ 
+ 	* expr.c (expand_expr_addr_expr): New.
+ 	(expand_expr_real_1) <case ADDR_EXPR>: Use it.
+ 
+ 2004-08-30  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.c (MIPS_FP_CONDITIONS): New macro.
+ 	(mips_fp_condition): New enum.
+ 	(mips_fp_conditions): New array.
+ 	(print_fcc_operand): Delete.
+ 	(print_operand): Remove %V, %v and %Q.  Redefine %Z so that it prints
+ 	the operand and comma if and only if ISA_HAS_8CC.  Add %Y.
+ 	(builtin_description): Add "cond" field.
+ 	(DIRECT_BUILTIN): Initialize it.
+ 	(CMP_{SCALAR,PS,4S}_BUILTINS, MOVTF_BUILTINS): Split INSN parameter
+ 	into INSN and CODE.  Initialize the "cond" field.
+ 	(CMP_BUILTINS): Update accordingly.
+ 	(mips_bdesc): Use MIPS_FP_CONDITIONS to invoke CMP_BUILTINS.
+ 	(mips_expand_builtin_movtf, mips_expand_builtin_compare): Take the
+ 	mips_fp_condition as argument.  Make it the final operand of the
+ 	comparison instruction.
+ 	(mips_expand_builtin): Update accordingly.
+ 	* config/mips/mips.md (UNSPEC_C_*, UNSPEC_CABS_*): Delete.
+ 	(UNSPEC_C, UNSPEC_CABS): New constants.  Shuffle others to fill
+ 	the gaps.
+ 	* config/mips/mips-ps-3d.md (mips_cond_move_tf_ps, bc1any[24][ft]):
+ 	Don't use the 'Q' operand prefix; just print the operand normally.
+ 	(mips_cabs_*, mips_c_*): Delete, replacing with...
+ 	(mips_c_cond_{ps,4s}, mips_cabs_cond_{s,d,ps,4s}): ...these new
+ 	patterns.  Split the 4s versions into 2 ps patterns after reload.
+ 
+ 2004-08-30  Richard Henderson  <rth@redhat.com>
+ 
+ 	* fold-const.c (tree_expr_nonzero_p): Use get_base_address before
+ 	assuming an ADDR_EXPR is non-null.
+ 
+ 2004-08-30  Jason Merrill  <jason@redhat.com>
+ 
+ 	* gthr-posix.h, gthr-dce.h: Add #pragma weaks.
+ 
+ 2004-08-30  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* alias.c (mems_in_disjoint_alias_sets_p, record_alias_subset,
+ 	record_set, rtx_equal_for_memref_p, init_alias_analysis): Use
+ 	gcc_assert and gcc_unreachable instead of abort.
+ 	* alloc-pool.c (abort, fancy_abort): Remove.
+ 	(create_alloc_pool, free_alloc_pool, pool_alloc, pool_free): Use
+ 	gcc_assert or gcc_unreachable.
+ 	* attribs.c (init_attributes, decl_attributes): Likewise.
+ 	* bb-reorder.c (FREE, find_traces_1_round, copy_bb,
+ 	mark_bb_for_unlikely_executed_section,
+ 	add_labels_and_missing_jumps, fix_crossing_conditional_branches,
+ 	fix_crossing_unconditional_branches):  Likewise.
+ 	* bitmap.c (bitmap_first_set_bit, bitmap_last_set_bit,
+ 	bitmap_operation):  Likewise.
+ 	* bt-load.c (insn_sets_btr_p, augment_live_range,
+ 	move_btr_def):  Likewise.
+ 	* builtins.c (c_readstr, expand_builtin_longjmp, apply_args_size,
+ 	apply_result_size, expand_builtin_apply, expand_builtin_mathfn,
+ 	expand_builtin_mathfn_2, expand_builtin_mathfn_3,
+ 	builtin_memcpy_read_str, expand_movstr, expand_builtin_stpcpy,
+ 	expand_builtin_memcmp, expand_builtin_args_info,
+ 	std_gimplify_va_arg_expr, expand_builtin_unop,
+ 	expand_builtin_fputs, expand_builtin_profile_func,
+ 	expand_builtin_fork_or_exec, fold_builtin_bitop,
+ 	fold_builtin_classify, fold_builtin_fputs): Likewise.
+ 
+ 2004-08-30  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* gcov-io.c (GCOV_CHECK): Use gcc_assert when available.
+ 	* gcov.c (abort): Remove undef.
+ 
+ 	* tree.h (BINFO_PRIMARY_BASE_OF): Remove.
+ 	(struct tree_binfo): Remove primary field.
+ 
+ 2004-08-30  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* fixinc/Makefile.in (machname.h): Remove.
+ 	(fixincl.x): Do not pass $@ to genfixes.
+ 	* fixinc/genfixes: Remove code to produce machname.h.
+ 	* fixinc/fixincl.sh: Move it here instead.
+ 	* fixinc/fixlib.c: Do not conditionalize on MN_NAME_PAT's presence,
+ 	instead check if pz_mn_name_pat is NULL.  Make mn_get_regexps
+ 	return a bool indicating whether pz_mn_name_pat is NULL.
+ 	* fixinc/fixlib.h: Do not conditionalize on MN_NAME_PAT's presence.
+ 	Declare extern C variables for the ENV_TABLE.
+ 	* fixinc/fixfixes.c: Do not conditionalize on MN_NAME_PAT's presence,
+ 	instead use the result of mn_get_regexps.
+ 	* fixinc/fixtests.c: Likewise.
+ 
+ 2004-08-30  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* configure.ac: Do not run fixincludes after stage1 during
+ 	toplevel bootstrap.
+ 	* configure: Regenerate.
+ 
+ 2004-08-30  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* sched-deps.c (get_condition): Partially revert previous, by never
+ 	trying to extract the condition from a condjump.
+ 
+ 2004-08-30  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* c-common.c (c_sizeof_or_alignof_type): Use gcc_assert.
+ 	(handle_visibility_attribute, c_determine_visibility): Likewise.
+ 	* c-common.h (my_friendly_assert): Remove.
+ 
+ 2004-08-30  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.md (UNSPEC_{RSQRT,RECIP}[12]_{S,D,PS}): Delete.
+ 	(UNSPEC_{RSQRT,RECIP}[12]): New constants.
+ 	(UNSPEC_MOVE_TF_PS): Renumber to avoid gaps.
+ 	* config/mips/mips-ps-3d.md (*movcc_v2sf_[sd]i): Use :GPR.
+ 	(mips_{rsqrt,recip}[12]_{s,d,ps}): Use :ANYF.
+ 
+ 2004-08-30  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-pretty-print.c (dump_generic_node): Handle VALUE_HANDLE
+ 	in COMPONENT_REF nodes.
+ 
+ 2004-08-29  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+ 
+ 	PR c++/15378
+ 	* c-opts.c (c_common_handle_option): <case OPT_Werror> set
+ 	global_dc->warning_as_error_requested.
+ 	* diagnostic.c (diagnostic_initialize): Tidy.
+ 	* diagnostic.h (diagnostic_context::x_data): Remove
+ 	(diagnostic_context::issue_warnings_are_errors_message): Rename
+ 	from warnings_are_errors_message.
+ 	(diagnostic_context::warning_as_error_requested): New.
+ 
+ 2004-08-30  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* sched-deps.c (get_condition): Fix breakage in previous patch.
+ 
+ 2004-08-30  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* doc/install.texi: Fix broken mpfr link.
+ 
+ 2004-08-29  David O'Brien  <obrien@FreeBSD.org>
+ 
+ 	* config/rs6000/sysv4.h (LINK_OS_FREEBSD_SPEC): Sync '-p' handling with
+ 	other FreeBSD platforms.
+ 
+ 2004-08-29  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* arm.h (REVERSE_CONDITION): Define.
+ 	(REVERSIBLE_CC_MODE): All comparisons are now reversible.
+ 
+ 2004-08-29  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* flow.c (REVERSE_CONDEXEC_PREDICATES_P): Use the whole comparison, not
+ 	just the codes, call reversed_comparison_code ().
+ 	(ior_reg_cond): Update arguments to REVERSE_CONDEXEC_PREDICATES_P.
+ 	(not_reg_cond): Use reversed_comparison_code.
+ 	(and_reg_cond): Likewise.
+ 	* ifcvt.c (cond_exec_process_if_block): Likewise.
+ 	* doc/tm.texi (REVERSE_CONDEXEC_PREDICATES_P): Update documentation.
+ 
+ 2004-08-29  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* sched-deps.c (get_condition): Rewrite using jump support functions.
+ 	Use reversed_comparison_code.
+ 	(conditions_mutex_p): Use reversed_comparison_code.
+ 
+ 2004-08-29  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.c (override_options): Disable hot/cold partitioning
+ 	for MIPS16.
+ 
+ 2004-08-29  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.h (mips_builtins, mips_cmp_choice): Delete.
+ 	(mips_function_type): Move to mips.c.
+ 	* config/mips/mips.c (mips_builtin_type): New enum.
+ 	(builtin_description): Replace code and ftype with builtin_type
+ 	and function_type.
+ 	(DIRECT_BUILTIN, CMP_SCALAR_BUILTINS, CMP_PS_BUILTINS, CMP_4S_BUILTINS)
+ 	(MOVTF_BUILTINS, CMP_BUILTINS): New macros.
+ 	(CODE_FOR_mips_abs_ps): Define.
+ 	(mips_bdesc): Use new macros.
+ 	(mips_expand_builtin): Use builtin_type.  Update calls to subroutines.
+ 	(mips_init_builtins): Use the mips_bdesc[] index as the function code.
+ 	(mips_expand_builtin_direct): New function.
+ 	(mips_expand_builtin_movtf): Renamed from mips_expand_ps_cond_move_
+ 	builtin.  Replace boolean parameter with builtin_type.
+ 	(mips_expand_compare_builtin, mips_expand_scalar_compare_builtin)
+ 	(mips_expand_4s_compare_builtin): Delete, replacing with...
+ 	(mips_expand_builtin_compare): ...this new function.
+ 
+ 2004-08-29  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	PR rtl-optimization/16590
+ 	* gcse.c (pre_delete): Do not create invalid REG_EQUAL notes.
+ 
+ 2004-08-29  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-ccp.c (ccp_visit_stmt): Remove #if 0 guards.
+ 	* tree-ssa-propagate.c: Fix documentation.
+ 
+ 2004-08-29  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.md (*mov[sd]f_on_*): Redefine using :SCALARF.
+ 	(mov[sd]fcc): Likewise.
+ 
+ 2004-08-29  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.md (cmp[sd]f): Redefine using :SCALARF.
+ 
+ 2004-08-29  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.md (divide_condition): New mode attribute.
+ 	(div[sd]f3, *div[sd]f3): Use it.  Redefine using :SCALARF.
+ 	(sqrt[sd]f3): Redefine using SCALARF.
+ 	(*recip[sd]f3, *rsqrt<mode>[ab]): Likewise.  Name formerly unnamed
+ 	patterns.
+ 
+ 2004-08-29  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.md (ANYF, SCALARF): New mode macros.
+ 	(loadx, storex, fmt, UNITMODE): New mode attributes.
+ 	(add{sf,df,v2sf}3, sub{sf,df,v2sf}3): Redefine using :ANYF.
+ 	(mul[sd]f3): Redefine using :SCALARF.
+ 	(*mul[sd]f3): Renamed from mul[sd]f3_internal.  Use :SCALARF.
+ 	(*mul[sd]3_r4300): Likewise mul[sd]f3_r4300.
+ 	(*m{add,sub}{sf,df,v2sf}3): Name formerly unnamed patterns.  Use :ANYF.
+ 	Check TARGET_FUSED_MADD for V2SF too.
+ 	(*nm{add,sub}{sf,df,v2sf}3{,_fastmath}): Likewise, except v2sf patterns
+ 	were already named.
+ 	(abs{sf,df,v2sf}3, neg{sf,df,v2sf}3): Redefine using :ANYF.
+ 	(*[sl][wd]xc1_[sd]i): Redefine using :ANYF.
+ 
+ 2004-08-29  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.c (mips_init_builtins): Simplify.  Only create
+ 	V2SF_type_node if it will be needed.
+ 
+ 2004-08-29  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.h (MIPS_CMP_MOVT, MIPS_CMP_MOVF): Delete.
+ 	* config/mips/mips.c (mips_prepare_builtin_arg): New function.
+ 	(mips_prepare_builtin_target): New function.
+ 	(mips_expand_builtin): Use them.  Update calls to subroutines.
+ 	(mips_expand_ps_cond_move_builtin): Use the new functions.  Replace
+ 	cmp_choice with a boolean argument to select between movt and movf.
+ 	Take the comparison's icode as an argument, not the function's fcode.
+ 	(mips_expand_compare_builtin): New function.  Rename existing function
+ 	to mips_expand_scalar_compare_builtin.
+ 	(mips_expand_scalar_compare_builtin, mips_expand_4s_compare_builtin)
+ 	(mips_expand_ps_compare_builtin): Use the new functions.  Take the
+ 	comparison's icode as an argument, not the builtin's fcode.
+ 
+ 2004-08-29  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.c (print_operand): Remove '%Y' and '%y'.
+ 	(mips_expand_4s_compare_builtin): Redefine CCV4 to be 0 if all
+ 	registers are false and -1 if all registers are true.
+ 	(mips_expand_ps_compare_builtin): Likewise CCV2.  Use subregs for
+ 	MIPS_CMP_UPPER and MIPS_CMP_LOWER.
+ 	* config/mips/mips.md (mips_cond_move_tf_ps): Use %Q rather than %y.
+ 	(bc1any4t, bc1any4f): Adjust for new CCV4 interpretation.
+ 	(bc1any2t, bc1any2f): Likewise CCV2.
+ 	(bc1upper2t, bc1lower2t, bc1upper2f, bc1lower2f): Delete.
+ 
+ 2004-08-29  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.md (UNSPEC_MOVE_TF_PS): New.
+ 	* config/mips/mips-ps-3d.md (mips_cond_move_tf_ps): Express as an
+ 	UNSPEC rather than an IF_THEN_ELSE.
+ 	* config/mips/mips.c (mips_expand_ps_cond_move_builtin): Emit
+ 	mips_cond_move_tf_ps by name.
+ 
+ 2004-08-29  Chao-ying Fu  <fu@mips.com>
+ 	    James E Wilson  <wilson@specifixinc.com>
+ 
+ 	* config/mips/mips-modes.def (V2SF, CCV2, CCV4): New modes. Give CCV2
+ 	8 byte size and alignment.  Give CCV4 16 byte size and alignment.
+ 	* config/mips/mips-ps-3d.md: New file.
+ 	* config/mips/mips.c (TARGET_VECTOR_MODE_SUPPORTED_P,
+ 	TARGET_INIT_BUILTINS, TARGET_EXPAND_BUILTIN): Define.
+ 	(mips_const_insns): Handle CONST_VECTOR the same as CONST_DOUBLE.
+ 	(mips_output_move): Emit "mov.ps" for V2SFmode.
+ 	(mips_arg_info): Add checks for VECTOR_FLOAT_TYPE_P and
+ 	MODE_VECTOR_FLOAT.
+ 	(override_options): Check if TARGET_MIPS3D and there was an explicit
+ 	!TARGET_PAIRED_SINGLE_FLOAT.  Set MASK_PAIRED_SINGLE, if TARGET_MIPS3D.
+ 	Check if TARGET_FLOAT64 and TARGET_HARD_FLOAT are both true, when
+ 	TARGET_PAIRED_SINGLE_FLOAT is true.  Check if the ISA supports
+ 	TARGET_PAIRED_SINGLE_FLOAT.  Allow MODE_VECTOR_FLOAT in fp registers,
+ 	and allow CCV2 and CCV4 to occupy two and four CC registers.
+ 	(print_fcc_operand): New function.
+ 	(print_operand): Add %Y, %y, %V, %v, %Q for CCV2, CCV4, CC.  Modify
+ 	%Z to call print_fcc_operand.
+ 	(mips_function_value): Handle MODE_VECTOR_FLOAT.
+ 	(mips_class_max_nregs): Check for ST_REGS, and handle CCmodes.
+ 	(mips_vector_mode_supported_p): New function.
+ 	(mips_hard_regno_nregs): Check for ST_REG_P, and handle CCmodes.
+ 	(builtin_description): New struct.
+ 	(mips_bdesc): New array of struct builtin_description.
+ 	(mips_expand_builtin, mips_init_builtins,
+ 	mips_expand_ps_cond_move_builtin, mips_expand_4s_compare_builtin,
+ 	mips_expand_compare_builtin, mips_expand_ps_compare_builtin): New
+ 	functions.
+ 	* config/mips/mips.h (MASK_PAIRED_SINGLE, MASK_MIPS3D): New defines.
+ 	(TARGET_PAIRED_SINGLE_FLOAT, TARGET_MIPS3D): New defines.
+ 	(TARGET_CPU_CPP_BUILTINS): Add __mips_paired_single_float.
+ 	(TARGET_SWITCHES): Added "-mpaired-single", "-mno-paired-single",
+ 	"-mips3d", and "-mno-mips3d".
+ 	(ASM_SPEC): Map -mips3d to -mips3d in gas.
+ 	(EXTRA_CONSTRAINT_Y): New macro.
+ 	(EXTRA_CONSTRAINT_STR): Renamed from EXTRA_CONSTRAINT.  Add new
+ 	multi-letter constraint 'Y'.
+ 	(CONSTRAINT_LEN): New macro.
+ 	(enum mips_builtins): New for MIPS builtin functions.
+ 	(enum mips_function_type): New for the types of MIPS builtin functions.
+ 	(enum mips_cmp_choice): New for the MIPS comparison builtin functions.
+ 	* config/mips/mips.md: New constants for paired single and MIPS-3D
+ 	instructions.  Include the new mips-ps-3d.md file.
+ 	(addv2sf3, subv2sf3, mulv2sf3, absv2sf2, negv2sf2, movv2sf,
+ 	movv2sf_hardfloat_64bit): New named patterns.
+ 	(madd.ps, msub.ps, nmaddv2sf, nmaddv2sf_fastmath, nmsubv2sf,
+ 	nmsubv2sf_fastmath, ldxc1_v2sf_si, ldxc1_v2sf_di, sdxc1_v2sf_si,
+ 	sdxc1_v2sf_di): New unnamed patterns.
+ 	* config/mips/predicates.md (const_0_operand, const_1_operand): Add
+ 	const_vector support.
+ 	(const_0_or_1_operand): New predicate.
+ 	* doc/invoke.texi (MIPS Options): Add -mpaired-single and -mips3d.
+ 
+ 2004-08-29  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (OBJS-common): Add tree-ssa-propagate.o
+ 	(tree-ssa-propagate.o): New rule.
+ 	(GTFILES): Add tree-ssa-propagate.c.
+ 	* tree-flow.h (struct stmt_ann_d): Remove field
+ 	in_ccp_worklist.
+ 	* tree-ssa-propagate.c: New file.
+ 	* tree-ssa-propagate.h: New file.
+ 	* tree-ssa-ccp.c: Re-write to use the routines from
+ 	tree-ssa-propagate.c.
+ 
+ 2004-08-28  Andrew Pinski  <apinski@apple.com>
+ 
+ 	* tree-ssa-loop.c: Remove extra include of basic-block.h.
+ 
+ 2004-08-28  Ziemowit Laski  <zlaski@apple.com>
+ 
+ 	* c-common.h: Update comments about ObjC/ObjC++ entry points.
+ 	(objc_is_reserved_word): New prototype.
+ 	(get_current_scope, objc_mark_locals_volatile): Move prototypes to
+ 	separate section; these are call-backs.
+ 	* c-lex.c (c_lex_with_flags): Call objc_is_reserved_word() to detect
+ 	ObjC/ObjC++ "@" keywords.
+ 	* c-tree.h (get_current_scope, objc_mark_locals_volatile): Remove
+ 	prototypes; they already live in c-common.h.
+ 	* stub-objc.c: Update copyright notice.
+ 	(objc_is_reserved_word): New stub.
+ 
+ 2004-08-28  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* system.h (gcc_assert): Remove __builtin_expect.  Evaluate EXPR
+ 	even when not checking.
+ 
+ 2004-08-27  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/13684
+ 	* gimplify.c (gimplify_cleanup_point_expr): Handle CLEANUP_EH_ONLY.
+ 	(gimple_push_cleanup): Add eh_only parm.
+ 	(gimplify_target_expr): Pass it.
+ 	* c.opt (-fno-threadsafe-statics): New option.
+ 	* c-opts.c (c_common_handle_option): Handle it.
+ 	* c-common.h (flag_threadsafe_statics): Declare it.
+ 	* c-common.c (flag_threadsafe_statics): Record it.
+ 	* doc/invoke.texi: Document it.
+ 	* tsystem.h (_GNU_SOURCE): Define.
+ 	* gthr-posix.h (__gthread_recursive_mutex_t): New typedef.
+ 	(__GTHREAD_RECURSIVE_MUTEX_INIT): New macro.
+ 	(__GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION): New macro.
+ 	(__gthread_recursive_mutex_init_function): New fn.
+ 	(__gthread_recursive_mutex_lock): New fn.
+ 	(__gthread_recursive_mutex_trylock): New fn.
+ 	(__gthread_recursive_mutex_unlock): New fn.
+ 	* gthr-solaris.h, gthr-single.h, gthr-dce.h: Likewise.
+ 	* gthr-win32.h, gthr-vxworks.h: Likewise.
+ 	* gthr.h: Document.
+ 
+ 2004-08-27  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_override_options): Increase
+ 	maximum skip to 15.  Set function alignment, jump alignment, and
+ 	loop alignment to 16 for processors that form dispatch groups.
+ 	(rs6000_rtx_costs): outer_code is used.
+ 
+ 2004-08-27  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* stor-layout.c (sizetype_set): Remove.
+ 	(set_sizetype): Don't test or set it.
+ 
+ 	* tree.h (size_int_type): Remove.
+ 	* fold-const.c: Do not #include gt-fold-const.h.
+ 	(size_htab_hash, size_htab_eq): Remove.
+ 	(size_int_kind): Use build_int_cst.
+ 	(new_const, size_htab): Remove.
+ 	(size_int_type): Remove.
+ 	(round_up): Use build_int_cst.
+ 	(round_down): Likewise. Remove spurious constant build.
+ 
+ 2004-08-27  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* configure.ac: Add ENABLE_ASSERT_CHECKING control.
+ 	Add is_release variable, use it for --enable-werror and
+ 	--enable-checking defaults.
+ 	* system.h (gcc_assert, gcc_unreachable): New.
+ 	* doc/install.texi (--enable-checking): Update.
+ 	* configure, config.in: Rebuilt.
+ 
+ 2004-08-26  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* rtl.h (read_rtx): Change prototype.
+ 	* read-rtl.c (read_rtx): Provide the caller with both an rtx and a
+ 	line number.  Return true on success.
+ 	* gensupport.c (process_include, init_md_reader_args_cb): Adjust
+ 	callers accordingly.
+ 
+ 2004-08-26  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-typeck.c (build_offsetof): Remove.
+ 	* c-tree.h (build_offsetof): Remove.
+ 	* c-common.c (fold_offsetof_1, fold_offsetof): New.
+ 	* c-common.h (fold_offsetof): Declare.
+ 	* c-parse.in (offsetof_base): New.
+ 	(offsetof_member_designator): Use it.  Build references, not just
+ 	a tree list.
+ 	(primary): Use fold_offsetof, not build_offsetof.
+ 
+ 2004-08-26  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree.c (staticp): Return the static object.
+ 	* tree.h (staticp): Update decl.
+ 	* langhooks.h (struct lang_hooks): Change staticp return type to tree.
+ 	* langhooks.c (lhd_staticp): Return NULL_TREE.
+ 	* langhooks-def.h (lhd_staticp): Update decl.
+ 	* c-common.c (c_staticp): Return the static object.
+ 	* c-common.h (c_staticp): Update decl.
+ 
+ 2004-08-26  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/alpha/alpha.h (HARD_REGNO_MODE_OK): Allow complex float
+ 	modes.
+ 
+ 2004-08-26  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	PR c/13801
+ 	* c-decl.c (struct c_binding): Add type and inner_comp fields.
+ 	(bind): Set type and inner_comp fields.
+ 	(pop_scope): Restore type of decl to the correct type from an
+ 	outer scope.  Give error when popping file scope for incomplete
+ 	arrays completed incompatibly with default initialization in an
+ 	inner scope.
+ 	(diagnose_mismatched_decls): Handle externs with initializers at
+ 	block scope.
+ 	(pushdecl): Set type of external declaration at block scope based
+ 	only on the visible declarations.  Save type when changing the
+ 	type of a declaration.  Merge an external declaration at block
+ 	scope with a visible static declaration at file scope.
+ 	(implicitly_declare): Give recycled old declaration the new type
+ 	except for incompatible declarations of built-in functions, saving
+ 	the old type.
+ 
+ 2004-08-26  Ziemowit Laski  <zlaski@apple.com>
+ 
+ 	* c-parse.in (OBJC_TYPE_QUAL): New %token for ObjC use.
+ 
+ 2004-08-26  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-alias-common.c (gate_pta): New function.
+ 	(pass_build_pta): Use it.
+ 	(pass_del_pta): Use it.
+ 	(delete_alias_vars): Don't check flag_tree_points_to.
+ 
+ 2004-08-26  Fariborz Jahanian  <fjahanian@apple.com>
+ 
+ 	* config/rs6000/rs6000.h (HARD_REGNO_CALL_PART_CLOBBERED): Added
+ 	TFmode as additional register mode cloberred by call.
+ 
+ 2004-08-26  Fariborz Jahanian  <fjahanian@apple.com>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_libcall_value): Generate
+ 	parallel pattern for library call returning DImode in
+ 	mixed mode.
+ 
+ 2004-08-26  Fariborz Jahanian  <fjahanian@apple.com>
+ 
+ 	* config/rs6000/rs6000.c (function_arg): Generate parallel
+ 	pattern for more split args.
+ 
+ 2004-08-26  Fariborz Jahanian  <fjahanian@apple.com>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_split_multireg_move): Call
+ 	either gen_movdi_di_update or gen_movdi_si_update depending on
+ 	target mode.
+ 	* config/rs6000/rs6000.md (movdi_update): Changed to movdi_<mode>_update,
+ 	to generate two versions.
+ 
+ 2004-08-26  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* Makefile.in (lambda-code.o): New.
+ 	(lambda-trans.o): Ditto.
+ 	(TREE_DATA_REF_H): Ditto.
+ 	(LAMBDA_H): Ditto.
+ 	(lambda-mat.o): Use LAMBDA_H.
+ 	(tree-data-ref.o): Ditto.
+ 	* lambda-code.c: New file.  Lambda code generation algorithm.
+ 	* lambda-trans.c: Ditto. Lambda transformation matrix support.
+ 	* lambda.h: Add lambda loop structures.
+ 	Add lambda loopnest structures.
+ 	Add lambda body vector structure.
+ 	Add lambda linear expression structures.
+ 	Add prototypes for functions in new files.
+ 	* lambda-mat.c: Include tree.h
+ 
+ 2004-08-26  Daniel Berlin <dberlin@dberlin.org>
+ 	    Sebastian Pop  <pop@cri.ensmp.fr>
+ 
+ 	* tree-data-ref.h: Include lambda.h
+ 	(free_dependence_relation): Declared here.
+ 	(free_dependence_relations): Ditto.
+ 	(free_data_refs): Ditto.
+ 	* tree-data-ref.c (free_dependence_relation): New function.
+ 	(free_dependence_relations): Ditto.
+ 	(free_data_refs): Ditot.
+ 	(analyze_all_data_dependences): Free datarefs and dependence_relations.
+ 	(build_classic_dist_vector): Store in the dependence_relations the
+ 	information. Each arc in the dependence_relations graph is labelled
+ 	with the distance and direction vectors.
+ 	(build_classic_dir_vector): Ditto.
+ 	(compute_rw_wr_ww_dependences): Renamed again compute_all_dependences.
+ 	Now computes again the whole dependence graph including read-read
+ 	relations.
+ 	(compute_data_dependences_for_loop): Now dependence_relations contains
+ 	all the data, and thus it doesn't need to initialize the classic_dir
+ 	and classic_dist vectors.
+ 	(analyze_all_data_dependences): Adjusted for using the new interface of
+ 	compute_data_dependences_for_loop.  Remove the statistics dump.
+ 
+ 2004-08-26  Bob Wilson  <bob.wilson@acm.org>
+ 
+ 	* config/xtensa/xtensa.c (xtensa_ld_opcodes, xtensa_st_opcodes): Delete.
+ 	(xtensa_expand_block_move): Update comment.
+ 	(override_options): Remove initialization of xtensa_{ld,st}_opcodes.
+ 
+ 2004-08026  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	PR target/13506
+ 	* toplev.c (crash_signal): If we crashed while emitting
+ 	a user asm, then die more gracefully.
+ 
+ 2004-08-26  Kazuhiro Inaoka  <inaoka.kazuhiro@renesas.com>
+ 
+ 	PR target/17119.
+ 	* config/m32r.c (gen_compare): Use reg_or_int16_operand when
+ 	checking for a valid constant, regardless of sign.
+ 
+ 2004-08-25  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR target/16974
+ 	* config/alpha/alpha.md (adddi_fp_hack): Don't rely on splitting
+ 	if the constant satisfies add_operand.
+ 
+ 2004-08-25  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR debug/10695
+ 	* config/alpha/alpha.c (emit_frame_store_1, emit_frame_store): New.
+ 	(alpha_expand_prologue): Handle >32-bit frames.  Generate proper
+ 	unwind info for >16-bit frames.
+ 
+ 2004-08-25  Richard B. Kreckel  <richard.kreckel@framatome-anp.com>
+ 
+ 	PR target/17171
+ 	* config/i386/gas.h (ASM_COMMENT_START): Define to "#".
+ 
+ 2004-08-25  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/alpha/alpha.c (alpha_cannot_force_const_mem): New.
+ 	(TARGET_CANNOT_FORCE_CONST_MEM): New.
+ 
+ 2004-08-25  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* doc/tree-ssa.texi: Document new operand iterator.
+ 
+ 2004-08-26  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	PR target/16480
+ 	* config/rs6000/rs6000.c (rs6000_split_multireg_move): Don't abort
+ 	on "(mem (symbol_ref ..))" rtl.  Look at LO_SUM base regs as well
+ 	as PLUS base regs.
+ 
+ 2005-08-28  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/symbian.h (SUBTARGET_ASM_FLOAT_SPEC): Default to
+ 	-mfpu=vfp -march=armv5t
+ 	* config/arm/t-symbian: Change multilib to mfloat-abi=softfp.
+ 
+ 2004-08-25  Richard Henderson  <rth@redhat.com>
+ 
+ 	* target-def.h (TARGET_SCALAR_MODE_SUPPORTED_P): New.
+ 	* target.h (struct gcc_target): Add scalar_mode_supported_p.
+ 	* targhooks.c (default_scalar_mode_supported_p): New.
+ 	* targhooks.h (default_scalar_mode_supported_p): Declare.
+ 	* doc/tm.texi (TARGET_SCALAR_MODE_SUPPORTED_P): Document.
+ 
+ 	* c-common.c (handle_mode_attribute): Query scalar_mode_supported_p
+ 	before attempting to create types.  Tidy.
+ 	* expr.c (vector_mode_valid_p): Use scalar_mode_supported_p.
+ 
+ 	* config/alpha/alpha.c (alpha_scalar_mode_supported_p): New.
+ 	(TARGET_SCALAR_MODE_SUPPORTED_P): New.
+ 
+ 2004-08-25  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/i386/freebsd.h (SUBTARGET_OVERRIDE_OPTIONS): Don't
+ 	set REAL_MODE_FORMAT for TFmode.
+ 
+ 2004-08-25  Ziemowit Laski  <zlaski@apple.com>
+ 
+ 	* c-decl.c (grokparm): New function.
+ 	* c-tree.h (grokparm): New prototype.
+ 
+ 2004-08-25  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-ssa-operands.h (struct ssa_operand_iterator_d): New.  SSA operand
+ 	iterator controlling structure.
+ 	(SSA_OP_USE, SSA_OP_DEF, SSA_OP_VUSE, SSA_OP_VMAYUSE, SSA_OP_VMAYDEF,
+ 	SSA_OP_VMUSTDEF, SSA_OP_VIRTUAL_USES, SSA_OP_VIRTUAL_DEFS,
+ 	SSA_OP_ALL_USES, SSA_OP_ALL_DEFS, SSA_OP_ALL_OPERANDS): New.  Operand
+ 	iterator flags.
+ 	(FOR_EACH_SSA_TREE_OPERAND): New.  Iterate over operands as trees.
+ 	(FOR_EACH_SSA_USE_OPERAND): New.  Iterate over operands as uses.
+ 	(FOR_EACH_SSA_DEF_OPERAND): New.  Iterate over operands as defs.
+ 	(FOR_EACH_SSA_MAYDEF_OPERAND): New.  Iterate over V_MAY_DEFs.
+ 	* tree-ssa-operands.c (NULL_DEF_OPERAND_P, NULL_USE_OPERAND_P): New.
+ 	Empty operand pointers.
+ 	* tree-flow-inline.h (op_iter_done): New.  Return true if finished.
+ 	(op_iter_next_use): New.  Return next use_operand_p.
+ 	(op_iter_next_def): New.  Return next def_operand_p.
+ 	(op_iter_next_tree): New.  Return next operands as a tree.
+ 	(op_iter_init): New.  Initialize an iterator structure.
+ 	(op_iter_init_use): New.  Initialize structure and get the first use.
+ 	(op_iter_init_def): New.  Initialize structure and get the first def.
+ 	(op_iter_init_tree): New.  Initialize structure and get the first tree.
+ 	(op_iter_next_maydef): New.  Return next V_MAY_DEF operands.
+ 	(op_iter_init_maydef): New.  Initialize structure and get the first
+ 	V_MAY_DEF operands.
+ 	* tree-cfg.c (tree_duplicate_bb): Use new operand iterator.
+ 	* tree-dfa.c (compute_immediate_uses_for_stmt,
+ 	redirect_immediate_uses): Use new operand iterator.
+ 	(v_may_defs_disappeared_p, v_must_defs_disappeared_p): Delete.
+ 	(mark_new_vars_to_rename): Use new operand iterator.  Count virtual
+ 	operands instead of using *_disappeared_p routines.
+ 	* tree-into-ssa.c (mark_def_sites, ssa_mark_def_sites, rewrite_stmt,
+ 	ssa_rewrite_stmt): Use new operand iterator.
+ 	* tree-outof-ssa.c (check_replaceable, find_replaceable_in_bb,
+ 	rewrite_trees): Use new operand iterator.
+ 	* tree-pretty-print.c (dump_vops): Use new operand iterator.
+ 	* tree-sra.c (mark_all_v_defs): Use new operand iterator.
+ 	* tree-ssa-alias.c (compute_points_to_and_addr_escape,
+ 	dump_points_to_info): Use new operand iterator.
+ 	* tree-ssa-ccp.c (cp_lattice_meet, visit_stmt, initialize,
+ 	replace_uses_in, replace_vuse_in, likely_value, set_rhs): Use new
+ 	operand iterator.
+ 	* tree-ssa-dce.c (mark_stmt_if_obviously_necessary,
+ 	propagate_necessity): Use new operand iterator.
+ 	* tree-ssa-dom.c (cprop_into_stmt, optimize_stmt): Use operand iterator.
+ 	(register_definitions_for_stmt): Use new operand iterator.  Take stmt as
+ 	a parameter instead of a stmt_ann_t.
+ 	* tree-ssa-live.c (create_ssa_var_map, calculate_live_on_entry,
+ 	build_tree_conflict_graph): Use new operand iterator.
+ 	* tree-ssa-loop-im.c (determine_max_movement, single_reachable_address,
+ 	rewrite_mem_refs): Use new operand iterator.
+ 	* tree-ssa-loop-manip.c (find_uses_to_rename_stmt,
+ 	check_loop_closed_ssa_use): Use new operand iterator.
+ 	* tree-ssa.c (verify_ssa, replace_immediate_uses): Use operand iterator.
+ 	* tree-ssanames.c (release_defs): Use new operand iterator.
+ 	* tree-vectorizer.c (vect_create_data_ref): Use new operand iterator.
+ 
+ 2004-08-25  Adam Nemet  <anemet@lnxw.com>
+ 
+ 	* tlink.c (initial_cwd): New variable.
+ 	(tlink_init): Initialize it.
+ 	(recompile_files): Use tlink_execute() instead of system().  Don't
+ 	duplicate verbose output of collect_execute.  Restore initial_cwd.
+ 	Update comment before the function.
+ 
+ 2004-08-25  Ziemowit Laski  <zlaski@apple.com>
+ 
+ 	* c-typeck.c (build_c_cast): In ObjC, always preserve (and silently
+ 	accept) a cast from one Objective-C pointer type to another.
+ 
+ 2004-08-25  Paolo Carlini  <pcarlini@suse.de>
+ 
+ 	* doc/install.texi: Document that libstdc++-v3 requires
+ 	now automake 1.9.1.
+ 
+ 2004-08-25  Caroline Tice  <ctice@apple.com>
+ 
+ 	* bb-reorder.c (partition_hot_cold_basic_blocks):  Add more details
+ 	to comments at start of function.
+ 	* cfgbuild.c (make_edges):  Add more details to hot/cold partitioning
+ 	comment.
+ 	* cfgcleanup.c (try_simplify_condjump, try_forward_edges,
+ 	merge_blocks_move_predecessor_nojumps,
+ 	merge_blocks_move_successor_nojumps, merge_blocks_move,
+ 	try_crossjump_to_edge, try_crossjump_bb): Likewise.
+ 	* cfglayout.c (fixup_reorder_chain): Likewise.
+ 	* cfgrtl.c (rtl_can_merge_blocks, try_redirect_by_replacing_jump,
+ 	cfg_layout_can_merge_blocks_p):  Likewise.
+ 	* ifcvt.c (find_if_case_1, find_if_case_2): Likewise.
+ 	* passes.c (rest_of_compilation): Update comments for calling
+ 	optimization that partitions hot/cold basic blocks.
+ 	* doc/invoke.texi:  Update documentation of
+ 	freorder-blocks-and-partition flag.
+ 
+ 2004-08-25  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.md (reg): Renamed mode attribute from ccreg.
+ 	(*mov*_on_*): Adjust accordingly.  Add an explicit MOVECC: prefix.
+ 
+ 2004-08-25  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.md (any_shift): New code macro.
+ 	(optab, insn): New code attributes.
+ 	({ashl,ashr,lshr}[sd]i3): Redefine using :GPR and any_shift.
+ 	Use the standard rather than internal patterns for the MIPS16
+ 	double-shift optimization.
+ 	(*{ashl,ashr,lshr}[sd]i3): New names for the non-mips16 shift patterns.
+ 	Redefine using :GPR and any_shift.
+ 	(*{ashl,ashr,lshr}si3_extend): Generalize ashlsi3_internal1_extend
+ 	to cover all three shifts.
+ 	(*{ashl,ashr,lshr}si3_mips16): New names for the mips16 SImode shifts.
+ 	Redefine using any_shift.  Use :GPR and any_shift to combine splitters.
+ 	(*{ashl,ashr,lshr}di3_mips16): New names for the mips16 DImode shifts.
+ 
+ 2004-08-24  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* gimplify.c (lookup_tmp_var): Separate temporaries when not
+ 	optimizing.
+ 
+ 2004-08-25  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	PR libstdc++/17005 (fix for HP-UX 11.11)
+ 	* config.gcc (hppa*-*-*): Move MASK_BIG_SWITCH to target_cpu_default2.
+ 	(hppa*-*-hpux*): Consolidate hppa1.0-*-* code.  Rework handling of
+ 	tm_file including pa-hpux1010.h or pa-hpux1111.h when appropriate.
+ 	* config/pa/pa-hpux1010.h, config/pa/pa-hpux1111.h: New files.
+ 	* config/pa/pa-hpux.h (TARGET_HPUX): Define.
+ 	(LINK_SPEC): Handle march=1.0 option.
+ 	* config/pa/pa-hpux10.h (TARGET_OS_CPP_BUILTINS): Predefine _XOPEN_UNIX
+ 	and _XOPEN_SOURCE_EXTENDED for UNIX 95.
+ 	(SUBTARGET_OPTIONS): New define.
+ 	(LINK_SPEC): Handle march=1.0 option.
+ 	(STARTFILE_SPEC): New define.
+ 	* config/pa/pa-hpux11.h (TARGET_OS_CPP_BUILTINS): Predefine _XOPEN_UNIX
+ 	and _XOPEN_SOURCE_EXTENDED for UNIX 95.  Additionally, predefine
+ 	_INCLUDE__STDC_A1_SOURCE and _INCLUDE_XOPEN_SOURCE_500 for UNIX 98.
+ 	(SUBTARGET_OPTIONS): New define.
+ 	(LINK_SPEC): Handle march=1.0 option.
+ 	(STARTFILE_SPEC): New define.
+ 	* config/pa/pa.c (override_options): Add code to process -munix= option.
+ 	* config/pa/pa.h (pa_unix_string, flag_pa_unix): Declare.
+ 	(TARGET_HPUX, TARGET_HPUX_10_10, TARGET_HPUX_11_11): Provide default
+ 	defines.
+ 	(TARGET_OPTIONS): Add SUBTARGET_OPTIONS to option list.
+ 	(SUBTARGET_OPTIONS): Provide default define.
+ 	* config/pa/pa64-hpux.h (STANDARD_STARTFILE_PREFIX_1,
+ 	STANDARD_STARTFILE_PREFIX_2): New defines.
+ 	(STARTFILE_SPEC): Provide unix95.o or unix98.o startfiles as necessary.
+ 	(ENDFILE_SPEC): Use %O.
+ 	* doc/install.texi (hppa*-*-hpux*): Reword paragraph on -g and gas.
+ 	Mention issue caused by changing namespace and runtime to UNIX 95/98.
+ 	* doc/invoke.texi (HPPA options): Move misplaced text to FRV options.
+ 	Document -munix=std option.
+ 
+ 2004-08-25  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* cse.c (cse_around_loop, cse_check_loop_start,
+ 	cse_set_around_loop): Remove.
+ 	(cse_basic_block): Remove the around_loop argument.
+ 	(cse_end_of_basic_block): Remove the after_loop argument.
+ 	(cse_main): Likewise.
+ 	* rtl.h (cse_main): Update prototype.
+ 	* passes.c (rest_of_handle_cse, rest_of_handle_cse2,
+ 	rest_of_handle_gcse): Update cse_main calls.
+ 
+ 2004-08-25  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* tree.h  (build_int_cst): New, sign extended constant.
+ 	(build_int_cstu): New, zero extended constant.
+ 	(build_int_cst_wide): Renamed from build_int_cst.
+ 	* tree.c (build_int_cst, build_int_cstu): New.
+ 	(build_int_cst_wide): Renamed from build_int_cst.
+ 	(make_vector_type, build_common_tree_nodes,
+ 	build_common_tree_nodes_2): Adjust build_int_cst calls.
+ 	* builtins.c (expand_builtin_prefetch, expand_builtin_strstr,
+ 	expand_builtin_strpbrk, expand_builtin_fputs,
+ 	build_string_literal, expand_builtin_printf,
+ 	expand_builtin_sprintf, fold_builtin_classify_type,
+ 	fold_builtin_lround, fold_builtin_bitop, fold_builtin_isascii,
+ 	fold_builtin_toascii, fold_builtin_isdigit,
+ 	simplify_builtin_strstr, simplify_builtin_strpbrk,
+ 	fold_builtin_fputs, simplify_builtin_sprintf): Likewise.
+ 	* c-common.c (start_fname_decls, fix_string_type, shorten_compare,
+ 	DEF_ATTR_INT): Likewise.
+ 	* c-decl.c (complete_array_type, check_bitfield_type_and_width):
+ 	Likewise.
+ 	* c-lex.c (interpret_integer, lex_charconst): Likewise.
+ 	* c-parse.in (primary) <TYPES_COMPATIBLE_P> Likewise.
+ 	* c-pretty-print.c (pp_c_integer_constant): Likewise.
+ 	* c-typeck.c (really_start_incremental_init, push_init_level,
+ 	set_nonincremental_init_from_string): Likewise.
+ 	* calls.c (load_register_parameters): Likewise.
+ 	convert.c (convert_to_pointer): Likewise.
+ 	coverage.c (coverage_counter_alloc, tree_coverage_counter_ref,
+ 	build_fn_info_type, build_fn_info_value, build_ctr_info_value,
+ 	build_gcov_info): Likewise.
+ 	* except.c (init_eh, assign_filter_values): Likewise.
+ 	* expmed.c (store_fixed_bit_field, extract_bit_field,
+ 	extract_fixed_bit_field, extract_split_bit_field, expand_shift,
+ 	expand_mult_const, expand_mult_highpart_adjust, extract_high_half,
+ 	expand_sdiv_pow2, expand_divmod, make_tree): Likewise.
+ 	* expr.c (convert_move, emit_group_load, emit_group_store,
+ 	expand_assignment, store_constructor, store_field,
+ 	expand_expr_real_1, reduce_to_bit_field_precision): Likewise.
+ 	fold-const.c (force_fit_type, int_const_binop, fold_convert_const,
+ 	invert_truthvalue, optimize_bit_field_compare,
+ 	decode_field_reference, all_ones_mask_p, constant_boolean_node,
+ 	fold_div_compare, fold, fold_read_from_constant_string,
+ 	fold_negate_const, fold_abs_const, fold_not_const, round_up,
+ 	round_down): Likewise.
+ 	* function.c (assign_parm_setup_block): Likewise.
+ 	* stmt.c (shift_return_value, expand_case, estimate_case_costs):
+ 	Likewise.
+ 	* stor-layout.c (layout_type, initialize_sizetypes,
+ 	set_min_and_max_values_for_integral_type): Likewise.
+ 	* tree-chrec.c (chrec_fold_multiply_poly_poly,
+ 	reset_evolution_in_loop): Likewise.
+ 	* tree-chrec.h (build_polynomial_chrec): Likewise.
+ 	* tree-complex.c (build_replicated_const): Likewise.
+ 	* tree-eh.c (honor_protect_cleanup_actions,
+ 	lower_try_finally_onedest, lower_try_finally_copy,
+ 	lower_try_finally_switch): Likewise.
+ 	* tree-mudflap.c (mf_build_string, mx_register_decls,
+ 	mudflap_register_call, mudflap_enqueue_constant): Likewise.
+ 	* tree-nested.c (get_trampoline_type, get_nl_goto_field): Likewise.
+ 	* tree-pretty-print.c (dump_generic_node): Likewise.
+ 	* tree-ssa-ccp.c (widen_bitfield, maybe_fold_offset_to_array_ref):
+ 	Likewise.
+ 	* tree-ssa-dom.c (simplify_rhs_and_lookup_avail_expr): Likewise.
+ 	* tree-ssa-loop-niter.c (number_of_iterations_cond,
+ 	loop_niter_by_eval, upper_bound_in_type, lower_bound_in_type):
+ 	Likewise.
+ 	* tree-ssa-loop-ivcanon.c (create_canonical_iv,
+ 	canonicalize_loop_induction_variables): Likewise.
+ 	* tree-vectorizer.c (vect_create_index_for_array_ref,
+ 	vect_transform_loop_bound, vect_compute_data_ref_alignment):
+ 	Likewise.
+ 
+ 	* config/alpha/alpha.c (alpha_initialize_trampoline, alpha_va_start,
+ 	alpha_gimplify_va_arg_1): Likewise.
+ 	* config/arm/arm.c (arm_get_cookie_size): Likewise.
+ 	* config/c4x/c4x.c (c4x_gimplify_va_arg_expr): Likewise.
+ 	* config/i386/i386.c (ix86_va_start, ix86_gimplify_va_arg): Likewise.
+ 	* config/ia64/ia64.c (ia64_gimplify_va_arg): Likewise.
+ 	* config/mips/mips.c (mips_build_builtin_va_list, mips_va_start,
+ 	mips_gimplify_va_arg_expr): Likewise.
+ 	* config/pa/pa.c (hppa_gimplify_va_arg_expr): Likewise.
+ 	* config/rs6000/rs6000.c (rs6000_va_start, rs6000_gimplify_va_arg,
+ 	add_compiler_branch_island): Likewise.
+ 	* config/s390/s390.c (s390_va_start): Likewise.
+ 	* config/sh/sh.c (sh_va_start): Likewise.
+ 	* config/stormy16/stormy16.c (xstormy16_expand_builtin_va_start):
+ 	Likewise.
+ 	* config/xtensa/xtensa.c (xtensa_va_start,
+ 	xtensa_gimplify_va_arg_expr): Likewise.
+ 
+ 	* objc/objc-act.c (build_objc_string_object,
+ 	build_objc_symtab_template, init_def_list, init_objc_symtab,
+ 	init_module_descriptor, generate_static_references,
+ 	build_selector_translation_table, get_proto_encoding,
+ 	build_typed_selector_reference, build_selector_reference,
+ 	build_next_objc_exception_stuff,
+ 	build_method_prototype_list_template, generate_descriptor_table,
+ 	generate_protocols, build_protocol_initializer,
+ 	build_ivar_list_template, build_method_list_template,
+ 	build_ivar_list_initializer, generate_ivars_list,
+ 	generate_dispatch_table, generate_protocol_list,
+ 	build_category_initializer, build_shared_structure_initializer,
+ 	generate_shared_structures, handle_impent,
+ 	generate_objc_image_info): Likewise.
+ 
+ 2004-04-25  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* cfglayout.c (duplicate_insn_chain): Remove references to
+ 	NOTE_INSN_LOOP_VTOP and NOTE_INSN_LOOP_CONT.
+ 	* cfgloop.h (struct loop): Remove fields vtop, cont and cont_dominator.
+ 	* cfgrtl.c (rtl_delete_block): Remove handling of NOTE_INSN_LOOP_CONT.
+ 	* final.c (final_scan_insn): Remove references to NOTE_INSN_LOOP_VTOP
+ 	and NOTE_INSN_LOOP_CONT.
+ 	* insn-notes.def (NOTE_INSN_LOOP_VTOP, NOTE_INSN_LOOP_CONT): Remove.
+ 	* jump.c (squeeze_notes): Remove references to NOTE_INSN_LOOP_VTOP
+ 	and NOTE_INSN_LOOP_CONT.
+ 	* loop.c (scan_loops, find_and_verify_loops, for_each_insn_in_loop,
+ 	check_dbra_loop, loop_dump_aux): Remove references to removed notes
+ 	and fields.
+ 	* reorg.c (mostly_true_jump): Do not rely on NOTE_INSN_LOOP_VTOPs.
+ 	* unroll.c (unroll_loop, copy_loop_body, loop_iterations): Remove
+ 	references to removed notes and fields.
+ 	(subtract_reg_term, ujump_to_loop_cont): Remove.
+ 
+ 2004-08-25  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* doc/install.texi: Document that libcpp does not require
+ 	Automake any longer.  Document that Automake 1.9.1 should
+ 	work everywhere.
+ 
+ 2004-08-25  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* flags.h (enum debug_info_type): Remove DWARF_DEBUG.
+ 	* defaults.h (PREFERRED_DEBUGGING_TYPE): Remove check for
+ 	DWARF_DEBUGGING_INFO from choice-of-definition chain;
+ 	restructure using C89 features (#elif, #error).
+ 	* c-lex.c, final.c, opts.c, config/cris/cris.c, config/frv/frv.c
+ 	* config/sh/sh.h: Remove references to DWARF_DEBUG.
+ 	* doc/invoke.texi: Remove references to DWARF version 1;
+ 	clarify why -gdwarf-2<n> doesn't work.
+ 
+ 2004-08-25  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* basic-block.h (BB_SET_PARTITION): Clear old value first.
+ 	* cfg.c (clear_bb_flags): Don't clear partition setting.
+ 	* ifcvt.c (find_if_case_1): Remove ??? comment.
+ 
+ 2004-08-25  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	PR target/17052
+ 	* config/rs6000/rs6000.h (machine_function): Remove sysv_varargs_p.
+ 	* config/rs6000/sysv4.h (RS6000_VARARGS_AREA): Use
+ 	current_function_stdarg in place of sysv_varargs_p.
+ 	* config/rs6000/rs6000.c (setup_incoming_varargs): Don't set
+ 	sysv_varargs_p.
+ 
+ 2004-08-24  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR target/16298
+ 	* config/i386/i386.c (legitimate_constant_p): Rework to not accept
+ 	random codes within CONST.
+ 
+ 2004-08-24  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	* Makefile.in (STAGEFEEDBACK_FLAGS_TO_PASS): Remove
+ 	-freorder-blocks-and-partition.
+ 
+ 2004-08-24  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	PR middle-end/17044
+ 	* tree-ssa-threadupdate.c (redirection_data): Make static.
+ 	(thread_block): Use ggc_alloc_cleared to allocate struct
+ 	redirection_data.  Don't free elements in redirection_data.
+ 
+ 2004-08-24  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/predicates.md (small_data_pattern): Match prefetches.
+ 
+ 2004-08-24  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	PR tree-optimization/17016
+ 	* tree-ssa-loop-niter.c (number_of_iterations_cond,
+ 	number_of_iterations_exit): Use POINTER_TYPE_P instead
+ 	of testing for POINTER_TYPE.
+ 
+ 2004-08-24  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-ssa-loop-ivcanon.c: New file.
+ 	* tree-ssa-loop-manip.c (create_iv): New function.
+ 	* Makefile.in (tree-ssa-loop-ivcanon.o): Add.
+ 	(tree-ssa-loop.o, tree-ssa-loop-manip.o): Add SCEV_H dependency.
+ 	* cfgloop.c (mark_single_exit_loops): New function.
+ 	(verify_loop_structure): Verify single-exit loops.
+ 	* cfgloop.h (struct loop): Add single_exit field.
+ 	(LOOPS_HAVE_MARKED_SINGLE_EXITS): New constant.
+ 	(mark_single_exit_loops): Declare.
+ 	(tree_num_loop_insns): Declare.
+ 	* cfgloopmanip.c (update_single_exits_after_duplication): New function.
+ 	(duplicate_loop_to_header_edge): Use it.
+ 	* common.opt (fivcanon): New flag.
+ 	* timevar.def (TV_TREE_LOOP_IVCANON, TV_COMPLETE_UNROLL): New timevars.
+ 	* tree-cfg.c (tree_find_edge_insert_loc): Return newly created block.
+ 	(bsi_commit_edge_inserts_1): Pass null to tree_find_edge_insert_loc.
+ 	(bsi_insert_on_edge_immediate): New function.
+ 	* tree-flow.h (bsi_insert_on_edge_immediate,
+ 	canonicalize_induction_variables, tree_unroll_loops_completely,
+ 	create_iv): Declare.
+ 	* tree-optimize.c (init_tree_optimization_passes): Add
+ 	pass_iv_canon and pass_complete_unroll.
+ 	* tree-pass.h (pass_iv_canon, pass_complete_unroll): Declare.
+ 	* tree-scalar-evolution.c (get_loop_exit_condition,
+ 	get_exit_conditions_rec, number_of_iterations_in_loop,
+ 	scev_initialize): Use single_exit information.
+ 	* tree-ssa-loop-niter.c (number_of_iterations_cond): Record
+ 	missing assumptions.
+ 	(loop_niter_by_eval):  Return number of iterations as unsigned
+ 	int.
+ 	* tree-ssa-loop.c (tree_ssa_loop_init): Mark single exit loops.
+ 	(tree_ssa_loop_ivcanon, gate_tree_ssa_loop_ivcanon, pass_iv_canon,
+ 	tree_complete_unroll, gate_tree_complete_unroll, pass_complete_unroll):
+ 	New passes.
+ 	(tree_ssa_loop_done): Call free_numbers_of_iterations_estimates.
+ 	* tree-ssanames.c (make_ssa_name): Allow creating ssa name before
+ 	the defining statement is ready.
+ 	* tree-vectorizer.c (vect_create_iv_simple): Removed.
+ 	(vect_create_index_for_array_ref, vect_transform_loop_bound):
+ 	Use create_iv.
+ 	(vect_transform_loop_bound): Use single_exit information.
+ 	(vect_analyze_loop_form): Cleanup bogus tests.
+ 	(vectorize_loops): Do not call flow_loop_scan.
+ 	* tree.h (may_negate_without_overflow_p): Declare.
+ 	* fold-const.c (may_negate_without_overflow_p): Split out from ...
+ 	(negate_expr_p): ... this function.
+ 	(tree_expr_nonzero_p): Handle overflowed constants correctly.
+ 	* doc/invoke.texi (-fivcanon): Document.
+ 	* doc/passes.texi: Document canonical induction variable creation.
+ 
+ 2004-08-24  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.h (ISA_HAS_INT_CONDMOVE): Delete.
+ 	* config/mips/mips.c (print_operand): Fold %B/%b handling into %T/%t,
+ 	using the mode of the operand to decide between them.
+ 	* config/mips/mips.md (MOVECC): New mode macro.
+ 	(ccreg): New mode attribute.
+ 	(*mov{si,di,sf,df}_on_{cc,si,di}): Name formerly unnamed patterns.
+ 	Redefine using :GPR and :MOVECC.  Use %T and %t for the condition.
+ 	(mov[sd]icc): Redefine using :GPR.
+ 
+ 2004-08-24  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips-protos.h (mips_emit_prefetch): Delete.
+ 	(mips_prefetch_cookie): New function.
+ 	* config/mips/mips.c (print_operand_address): Fix handling of
+ 	ADDRESS_CONST_INT.
+ 	(mips_emit_prefetch): Delete.
+ 	(mips_prefetch_cookie): New function.
+ 	* config/mips/mips.md (prefetch): Turn into a define_insn.  Use a
+ 	mode of QImode for the address_operand.  Use mips_prefetch_cookie
+ 	to calculate the first "pref" operand.
+ 	(prefetch_[sd]i, prefetch_[sd]i_address): Delete.
+ 	(prefetch_indexed_[sd]i): Redefine using :P.  Use mips_prefetch_cookie.
+ 
+ 2004-08-24  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* arm.md: Include predicates.md.
+ 	* predicates.md: New file.
+ 	* arm.c (s_register_operand, arm_hard_register_operand)
+ 	(arm_general_register_operand, f_register_operand, reg_or_int_operand)
+ 	(arm_immediate_operand, arm_neg_immediate_operand)
+ 	(arm_not_immediate_operand, arm_rhs_operand, arm_rhsm_operand)
+ 	(arm_add_operand, arm_addimm_operand, arm_not_operand)
+ 	(offsettable_memory_operand, alignable_memory_operand)
+ 	(arm_reload_memory_operand, arm_float_rhs_operand)
+ 	(arm_float_add_operand, vfp_compare_operand, arm_float_compare_operand)
+ 	(index_operand, shiftable_operator, logical_binary_operator)
+ 	(shift_operator, equality_operator, arm_comparison_operator)
+ 	(minmax_operator, cc_register, dominant_cc_register)
+ 	(arm_extendqisi_mem_op, power_of_two_operand, nonimmediate_di_operand)
+ 	(di_operand, nonimmediate_soft_df_operand, soft_df_operand)
+ 	(const_shift_operand, load_multiple_operation)
+ 	(store_multiple_operation, multi_register_push, thumb_cmp_operand)
+ 	(thumb_cmpneg_operand, thumb_cbrch_target_operand)
+ 	(cirrus_register_operand, cirrus_fp_register)
+ 	(cirrus_shift_const): Delete, replaced with equivalents in
+ 	predicates.md.
+ 	(shift_op): Handle ROTATE.
+ 	* arm-protos.h: Delete declarations for above.
+ 	* arm.h (PREDICATE_CODES, SPECIAL_MODE_PREDICATES): Delete.
+ 	* t-arm (MD_INCLUDES): Add predicates.md.
+ 	(s-preds): Depends on MD_INCLUDES.
+ 
+ 2004-08-24  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.c (mips_gen_conditional_trap): Fix mode.
+ 	* config/mips/mips.md (*conditional_trap[sd]i): Name previously unnamed
+ 	patterns.  Redefine using :GPR.  Give the match_operator a mode.
+ 	Use '%2' rather than '%z2' for operand 2.
+ 
+ 2004-08-24  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.md (load_call[sd]i): Redefine using :P.  Add mode
+ 	attribute.
+ 
+ 2004-08-24  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.md (indirect_jump): Use force_reg.  Adjust names
+ 	of internal patterns.
+ 	(indirect_jump[sd]i): Renamed from indirect_jump_internal[12].
+ 	Redefine using :P.
+ 	(tablejump): Use expand_binop to calculate address.  Adjust names
+ 	of internal patterns.
+ 	(tablejump[sd]i): Renamed from tablejump_internal[12].
+ 	Redefine using :P.
+ 	(tablejump_mips16[12]): Delete.
+ 
+ 2004-08-24  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.md (*seq_[sd]i, *seq_[sd]i_mips16, *sne_[sd]i)
+ 	(*sgt_[sd]i, *sgt_[sd]i_mips16, *sge_[sd]i, *slt_[sd]i)
+ 	(*slt_[sd]i_mips16, *sle_[sd]i, *sle_[sd]i_mips16, *sgtu_[sd]i)
+ 	(*sgtu_[sd]i_mips16, *sge_[sd]i, *sltu_[sd]i, *sltu_[sd]i_mips16)
+ 	(*sleu_[sd]i, *sleu_[sd]i_mips16): Redefine using :GPR.
+ 
+ 2004-08-24  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.md (cmpsi, cmpdi): Redefine using :GPR.
+ 	(*branch_zero[sd]i): Renamed from branch_zero{,_di}.  Redefine
+ 	using :GPR.
+ 	(*branch_zero[sd]i_inverted): Likewise branch_zero{,_di}_inverted.
+ 	(*branch_equality[sd]i): Likewise branch_equality{,_di}.
+ 	(*branch_equality[sd]i_inverted): Likewise
+ 	branch_equality{,_di}_inverted.
+ 	(*branch_equality[sd]i_mips16): Name formerly unnamed patterns.
+ 	Redefine using :GPR.
+ 
+ 2004-08-24  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* rtl.def: Reorganize, placing all codes used only in machine
+ 	descriptions at the end.
+ 
+ 	* rtl.def: Wrap MD-only codes in #ifdef GENERATOR_FILE.
+ 	* gengtype.c: Don't include rtl.h.  Define enum rtx_code and
+ 	rtx_name, rtx_format arrays by direct reference to rtl.def,
+ 	first undefining GENERATOR_FILE.  Define enum insn_note and
+ 	note_insn_name array by direct reference to insn-notes.def.
+ 	(adjust_field_rtx_def): Remove local definition of rtx_name.
+ 	Use symbolic names for insn notes.
+ 	* Makefile.in (gengtype.o): Update dependencies.
+ 
+ 2004-08-24  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* basic-block.h (struct basic_block_def): Reorder fields to
+ 	eliminate interior padding.  Remove 'partition' field.
+ 	(BB_DISABLE_SCHEDULE, BB_HOT_PARTITION, BB_COLD_PARTITION)
+ 	(BB_UNPARTITIONED, BB_PARTITION, BB_SET_PARTITION)
+ 	(BB_COPY_PARTITION): New macros.
+ 	* bb-reorder.c, cfgcleanup.c, cfglayout.c, cfgrtl.c, ifcvt.c
+ 	Replace all references to the 'partition' field of a basic
+ 	block with new macros.
+ 
+ 	* insn-notes.def: Delete NOTE_INSN_DISABLE_SCHED_OF_BLOCK.
+ 	* final.c (final_scan_insn): Don't handle it.
+ 	* modulo-sched.c: Set BB_DISABLE_SCHEDULE flag on g->bb
+ 	instead of emitting a NOTE_INSN_DISABLE_SCHED_OF_BLOCK note.
+ 	* sched-rgn.c (sched_is_disabled_for_current_region_p):
+ 	Look for a BB_DISABLE_SCHEDULE flag on the block instead of a note.
+ 
+ 2004-08-24  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* c-decl.c (c_init_decl_processing): Adjust
+ 	build_common_tree_nodes call.
+ 	* expmed.c (const_mult_add_overflow_p): Use
+ 	build_distinct_type_copy.
+ 	* stor-layout.c (early_type_list): Remove.
+ 	(layout_type): Don't append to early_type_list.
+ 	(initialize_sizetypes): Add signed_p argument.
+ 	(set_sizetype): Overwrite the stub type nodes directly.
+ 	* tree.c (copy_node_stat): Clear a type's value cache here ...
+ 	(build_distinct_type): ... not here.
+ 	(build_common_tree_nodes): Add signed_sizetype argument. Adjust.
+ 	* tree.h (initialize_sizetypes): Add signed_p argument.
+ 	(build_common_tree_nodes): Likewise.
+ 
+ 	* objc/objc-act.c (get_static_reference): Use
+ 	build_variant_type_copy.
+ 	(get_protocol_reference): Likewise.
+ 	* objc/objc-act.h (TREE_STATIC_TEMPLATE): Use TREE_PRIVATE.
+ 
+ 2004-08-24  Richard Henderson  <rth@redhat.com>
+ 	    Andrew Pinski  <apinski@apple.com>
+ 
+ 	* gimplify.c (gimplify_array_ref_to_plus): Delete.
+ 	(gimplify_addr_expr): Do not call gimplify_array_ref_to_plus
+ 	for ARRAY_REF.
+ 
+ 	* config/rs6000/rs6000.c (altivec_expand_builtin): Go passed
+ 	ARRAY_REF also to get to the STRING_CST.
+ 
+ 2004-08-24  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/arm.c (arm_override_options): Update error message.
+ 	* config/arm/arm.h (TARGET_HARD_FLOAT): Rename to
+ 	TARGET_HARD_FLOAT_ABI.
+ 	(TARGET_SOFT_FLOAT_ABI): Rename to TARGET_HARD_FLOAT.
+ 	(LIBCALL_VALUE, FUNCTION_VALUE_REGNO_P): Use TARGET_HARD_FLOAT_ABI.
+ 
+ 2004-08-24  Kazuhiro Inaoka  <inaoka.kazuhiro@renesas.com>
+ 
+ 	PR target/17093
+ 	* config/m32r.md (movsi_sda): Add SI mode specification to
+ 	UNSPEC.
+ 
+ 2004-08-24  Nick Clifton  <nickc@redhat.com>
+ 
+ 	* config/m32r/m32r.h (PREDICATE_CODES): Remove duplicate definition
+ 	of seth_add3_operand.
+ 
+ 2004-08-24  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* Makefile.in (PROTO_OBJS): Add errors.o.
+ 	* protoize.c (fancy_abort): Remove.
+ 	* mips-tfile.c (fancy_abort): Add parameters.
+ 
+ 2004-08-24  Jonathan Wakely  <redi@gcc.gnu.org>
+ 
+ 	* doc/trouble.texi (C++ misunderstandings): Fix example code.
+ 
+ 2004-08-24  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* Makefile.in (HOOKS_H): Add dependency on MACHMODE_H.
+ 	(host-default.o): Add dependency on HOOKS_H.
+ 	* config/x-linux: Likewise.
+ 	* config/x-solaris: Likewise.
+ 	* config/i386/x-mingw32: Likewise.
+ 	* config/rs6000/x-darwin: Likewise.
+ 
+ 2004-08-23  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	* reg-notes.def (REG_NOTE): In comment, change DEF_INSN_NOTE to
+ 	DEF_REG_NOTE.
+ 
+ 2004-08-23  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	PR c/14492
+ 	* dwarf2out.c (loc_descriptor_from_tree): Robustify.
+ 
+ 2004-08-23  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* cfg.c (check_bb_profile): Fix typos.
+ 	* function.c (assign_parm_is_stack_parm): Likewise.
+ 	* tree-nested.c: Likewise.
+ 
+ 2004-08-23  Daniel Jacobowitz  <dan@debian.org>
+ 
+ 	* ggc-zone.c (struc alloc_chunk): Rearrange flag bits and SIZE.
+ 	Remove TYPECODE.
+ 	(ggc_alloc_zone_1): Mark TYPE as unused.  Don't save it in the chunk.
+ 
+ 2004-08-23  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* defaults.h (VECTOR_MODE_SUPPORTED_P): Remove macro.
+ 	* system.h (VECTOR_MODE_SUPPORTED_P): Poison.
+ 	* target-def.h (TARGET_VECTOR_MODE_SUPPORTED_P): Define.
+ 	* target.h: Ditto.
+ 	* hooks.h: Include machmode.h.
+ 	(hook_bool_mode_false): Declare.
+ 	* hooks.c (hook_bool_mode_false): Define.
+ 	* expr.c (vector_mode_valid_p): Use targetm.vector_mode_supported_p.
+ 	* stor-layout.c (layout_type): Ditto.
+ 	* config/alpha/alpha.c (alpha_vector_mode_supported_p): New function.
+ 	Define to target macro.
+ 	* config/alpha/alpha.h (VECTOR_MODE_SUPPORTED_P): Delete.
+ 	* config/arm/arm.c: Ditto. Use.
+ 	* config/arm/arm.h: Ditto.
+ 	* config/arm/arm-protos.h: Ditto.
+ 	* config/i386/i386.c: Ditto.
+ 	* config/i386/i386.h: Ditto.
+ 	* config/rs6000/rs6000.c: Ditto.
+ 	* config/rs6000/rs6000.h: Ditto.
+ 	* config/sh/sh.c: Ditto.
+ 	* config/sh/sh.h: Ditto.
+ 	* config/sh/sh-protos.h: Ditto.
+ 	* config/sh/sh.md: Use.
+ 	* doc/tm.texi: Move documentation for VECTOR_MODE_SUPPORTED_P
+ 	to TARGET_VECTOR_MODE_SUPPORTED_P.
+ 
+ 2004-08-23  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* Makefile.in (BUILD_ERRORS): Set to build-errors.
+ 	(errors.o): New target for host.
+ 	(build-errors.o): New target for build.
+ 	(genobjs): Replace errors.o with build-errors.
+ 	(gengenrtl$(buildexeext)): Add $(BUILD_ERRORS).
+ 	(GCOV_OBJS, GCOV_DUMP_OBJS): Add errors.o.
+ 	(fix-headers$(build_exeext)): Add $(BUILD_ERRORS).
+ 	(fix-header.o): Add errors.h
+ 	* collect2.c (fancy_abort): Add parameters.
+ 	* collect2.h (fancy_abort): Don't declare.
+ 	* errors.h (fancy_abort): Don't declare.
+ 	* errors.c: Include either bconfig.h or config.h.
+ 	(fancy_abort): Trim filename.
+ 	* fix-header.c (v_fatal, fatal): Remove.
+ 	(progname): Remove definition.
+ 	(main): Set progname here.
+ 	* gcc.c (fancy_abort): Add parameters.
+ 	* gcc.h (fancy_abort): Remove declaration.
+ 	* gcov.c (fancy_abort): Remove.
+ 	* rtl.h (fancy_abort): Don't declare.
+ 	(abort): Don't define.
+ 	* tree.h (fancy_abort): Don't declare.
+ 	(abort): Don't define.
+ 	* system.h (fancy_abort): Declare.
+ 	(abort): Define to fancy_abort.
+ 	* fixinc/Makefile.in (ALLOBJ): Add ../build-errors.o
+ 
+ 	* tree.h (enum size_type_kind): Remove USIZETYPE, UBITSIZETYPE.
+ 	(usize_type, ubitsizetype): Remove.
+ 	* stor-layout.c (set_sizetype): Don't initialize usizetype,
+ 	ubitsizetype.
+ 	* fold-const.c (size_diffop): TYPE can never be ubitsizetype.
+ 
+ 	* tree.h (build_distinct_type_copy): New.
+ 	(build_type_copy): ... here.  Rename to ...
+ 	(build_variant_type_copy): ... here.
+ 	* tree.c (build_qualified_type): Rename build_type_copy call.
+ 	(build_distinct_type_copy): New, broken out of ...
+ 	(build_type_copy): ... here.  Rename to ...
+ 	(build_variant_type_copy): ... here.  Use
+ 	build_distinct_type_copy.
+ 	(build_common_tree_nodes_2): Rename build_type_copy call.
+ 	* c-common.c (c_common_nodes_and_builtins): Rename build_type_copy
+ 	call.
+ 	(handle_packed_attribute, handle_unused_attribute,
+ 	handle_transparanet_union_attribute, handle_aligned_attribute,
+ 	handle_deprecated_attribute): Likewise.
+ 	* c-decl.c (clone_underlying_type, store_parm_decls_oldstyle):
+ 	Likewise.
+ 	* config/arm/arm.c (arm_handle_isr_attribyte): Likewise.
+ 	* config/rs6000/rs6000.c (rs6000_init_builtins): Use
+ 	build_distinct_type_copy.
+ 
+ 2004-08-23  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.md (mfhilo_[sd]i): Redefine using :GPR.  Add mode
+ 	attribute.
+ 
+ 2004-08-23  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.md (length): Don't use mips_fetch_insns for indexed
+ 	loads and stores.
+ 	(*lwxc1_<mode>, *ldxc1_<mode>, *swxc1_<mode>, *sdxc1_<mode>): Name
+ 	formerly unnamed patterns.  Redefine using :P for the address.  Remove
+ 	explicit length attributes.
+ 
+ 2004-08-23  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-ssa-loop-im.c (fem_single_reachable_address, for_each_memref):
+ 	New functions.
+ 	(single_reachable_address): Use them.
+ 	(schedule_sm): Add dump.
+ 	(is_call_clobbered_ref): New function.
+ 	(determine_lsm_reg): Check whether the reference is call clobbered.
+ 	Only work for gimple_reg_type values.
+ 
+ 2004-08-23  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.md (*mov<mode>_ra): Name previously unnamed MIPS16
+ 	$31 store insns.  Redefine using :GPR.
+ 
+ 2004-08-23  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.md (P): New mode macro.
+ 	(*xgot_hi[sd]i, *xgot_lo[sd]i, *got_disp[sd]i, *got_page[sd]i)
+ 	(*load_got[sd]i, *low[sd]i, *low[sd]i_mips16): Redefine using :P.
+ 	Add mode attributes.
+ 
+ 2004-08-23  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.md (UNSPEC_[LS][WD][LR]): Delete in favor of...
+ 	(UNSPEC_{LOAD,STORE}_{LEFT,RIGHT}): ...these new constants.  Shuffle
+ 	later constants to cover the gap.
+ 	(load, store): New mode attributes.
+ 	(mov_l[wd]l, mov_l[wd]r, mov_s[wd]l, mov_s[wd]r): Redefine using :GPR.
+ 	Use new unspec constants.
+ 
+ 2004-08-23  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.md (one_cmpl[sd]i2): Redefine using :GPR.
+ 	(and[sd]3, ior[sd]i3, xor[sd]i3): Likewise.  Change 32-bit patterns
+ 	to use register_operand rather than uns_arith_operand as the predicate
+ 	for operand 1.  Remove redundant MIPS16 force_reg() for operand 1.
+ 	(*and[sd]i3, *ior[sd]i3, *xor[sd]i3): Name formerly unnamed patterns.
+ 	Redefine using :GPR.  Make same predicate change here.  Extend the
+ 	commutativity of operands 1 and 2 from the SImode version to the
+ 	DImode one.
+ 	(*and[sd]i3_mips16, *ior[sd]i3_mips16, *xor[sd]i3_mips16): Likewise,
+ 	but with no predicate changes.
+ 	(*nor[sd]i3): Redefine using :GPR.
+ 
+ 2004-08-23  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-ssa-operands.c (get_call_expr_operands): Add VUSE operands for
+ 	noreturn functions.
+ 
+ 2004-08-23  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.h (ISA_HAS_DCLZ_DCLO): Delete.
+ 	* config/mips/mips.md (abs[sd]i2): Redefine using :GPR.  Only use
+ 	branch-likely insns for absdi2 if GENERATE_BRANCHLIKELY.  Use "%."
+ 	rather than "%z2" (with a fake const0_rtx for operand 2).
+ 	(ffs[sd]i2): Redefine using :GPR.
+ 	(clz[sd]i2): Likewise.  Use ISA_HAS_CLO_CLZ for the 64-bit case.
+ 
+ 2004-08-23  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.md ({,u}divmod[sd]i4): Redefine using :GPR.
+ 
+ 2004-08-23  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.md (any_extend): New code macro.
+ 	(u, su): New code attributes.
+ 	({,u}mulsidi3, {,u}mulsidi3_32bit_internal, {,u}mulsidi3_32bit_r4000)
+ 	({u,s}mulsi3_highpart, {u,s}mulsi3_highpart_internal)
+ 	({u,s}mulsi3_highpart_mulhi_internal, {s,u}muldi3_highpart)
+ 	(*{s,u}mul_acc_di): Redefine using any_extend.
+ 	(*{,u}muls_di, *{s,u}msac_di): Likewise.  Change names of patterns
+ 	to reflect real insn names.
+ 	(*mulsidi3_64bit, *mulsidi3_64bit_parts): Replace use of match_operator
+ 	with an any_extend template.
+ 	({u,s}mulsi3_highpart_neg_mulhi_internal): Redefine using any_extend.
+ 	Add '*' to name.
+ 
+ 2004-08-23  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.h (GENERATE_MULT3_SI): Check TARGET_MAD.
+ 	* config/mips/mips.md (mul[sd]i3, mul[sd]i3_internal)
+ 	(mul[sd]i3_r4000): Redefine using :GPR.
+ 	(mulsi3_mult3): Don't check TARGET_MAD separately.
+ 	(muldi3_mult3): Moved after mulsi_mult3.
+ 
+ 2004-08-23  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config.gcc (mips-*-*): Remove definitions of MASK_GAS and
+ 	OBJECT_FORMAT_ELF.  Set MASK_SPLIT_ADDR by default if using GNU ld.
+ 	* config/mips/mips.h (MASK_GAS): Delete.  Shuffle later masks down.
+ 	(TARGET_GAS, TARGET_MIPS_AS): Delete.
+ 	(TARGET_GPWORD): Define to true for n32 on IRIX.
+ 	(TARGET_SWITCHES): Remove -mmips-as.  Turn -mgas into a no-op.
+ 	(MIPS_AS_ASM_SPEC, SUBTARGET_MIPS_AS_ASM_SPEC): Delete.
+ 	(GAS_ASM_SPEC): Delete, folding into ASM_SPEC.
+ 	(ASM_ABI_DEFAULT_SPEC, TARGET_ASM_SPEC): Delete.
+ 	(MDEBUG_ASM_SPEC): Delete, folding into...
+ 	(SUBTARGET_ASM_DEBUGGING_SPEC): ...here.
+ 	(ASM_SPEC): Inline old GAS_ASM_SPEC.  Use GNU names for ABI switches.
+ 	(EXTRA_SPECS): Remove mips_as_asm_spec, gas_asm_spec, target_asm_spec,
+ 	subtarget_mips_as_asm_spec, mdebug_asm_spec.  Use MULTILIB_ABI_DEFAULT
+ 	to define asm_abi_default_spec.
+ 	(ASM_STABS_OP, ASM_STABN_OP, ASM_STABD_OP): Delete.
+ 	(TARGET_ASM_SELECT_SECTION): Delete.
+ 	* config/mips/mips.c (MIPS_MAX_FIRST_STACK_STEP): Define to 0x7ff0
+ 	for non-mips16 code, removing previous workaround for SGI assemblers.
+ 	(TARGET_ASM_INTEGER, mips_assemble_integer): Delete.
+ 	(TARGET_ASM_ALIGNED_DI_OP): Define this instead.
+ 	(override_options): Remove !TARGET_GAS and !have_named_sections code.
+ 	(print_operand): Fold TARGET_GAS conditionals into asm strings.
+ 	(mips_output_filename): Remove !TARGET_GAS code.  Replace use of
+ 	ASM_STABS_OP and ASM_STABN_OP.
+ 	(mips_file_start): Remove TARGET_MIPS_AS/TARGET_GAS checks.
+ 	(mips_output_aligned_decl_common): Remove mention of SGI o32 assembler.
+ 	(mips_output_function_prologue): Remove !TARGET_GAS code.
+ 	(mips_select_rtx_section): Remove !have_named_sections code.
+ 	(mips_select_section): Delete.
+ 	* config/mips/mips.md (trap): Remove !TARGET_GAS check.
+ 	* config/mips/linux.h (TARGET_DEFAULT): Remove use of MASK_GAS.
+ 	* config/mips/sdb.h (PUT_SDB_DEF, PUT_SDB_PLAIN_DEF): Delete.
+ 	(PUT_SDB_BLOCK_START, PUT_SDB_BLOCK_END): Fold TARGET_GAS conditional.
+ 	* config/mips/vxworks.h (ASM_SPEC): As for mips.h.
+ 	* config/mips/windiss.h (ASM_SPEC): Likewise.
+ 
+ 2004-08-23  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* read-rtl.c (map_value, mapping, macro_group): New structures.
+ 	(BELLWETHER_CODE): New macro.
+ 	(modes, codes, bellwether_codes): New variables.
+ 	(find_mode, uses_mode_macro_p, apply_mode_macro, find_code)
+ 	(uses_code_macro_p, apply_code_macro, apply_macro_to_string)
+ 	(apply_macro_to_rtx, uses_macro_p, add_condition_to_string)
+ 	(add_condition_to_rtx, apply_macro_traverse, add_mapping)
+ 	(add_map_value, initialize_macros): New functions.
+ 	(def_hash, def_hash_eq_p): Generalize to anything that points to,
+ 	or starts with, a char * field.
+ 	(find_macro, read_mapping, check_code_macro): New functions.
+ 	(read_rtx_1): New, split out from read_rtx.  Handle the new
+ 	define_{mode,code}_{macro,attr} constructs.  Use find_macro
+ 	to parse the name of a code or mode.  Use BELLWETHER_CODE to
+ 	extract the format and to choose a suitable code for rtx_alloc.
+ 	Modify recursive invocations to use read_rtx_1.
+ 	(read_rtx): Call initialize_macros.  Apply code and mode macros
+ 	to the rtx returned by read_rtx_1.  Cache everything after the
+ 	first macro expansion for subsequent read_rtx calls.
+ 	* doc/md.texi: Document new .md constructs.
+ 	* config/mips/mips.md (GPR): New mode macro.
+ 	(d, si8_di5): New mode attributes.
+ 	(any_cond): New code macro.
+ 	(add[sd]i3): Redefine using :GPR.
+ 	(*add[sd]i3): Likewise, renaming from add[sd]i3_internal.
+ 	(*add[sd]i3_sp[12], *add<mode>3_mips16): Redefine using :GPR, naming
+ 	previously unnamed MIPS16 patterns.
+ 	(*addsi3_extended): Renamed from addsi3_internal_2.  Fix overly long
+ 	lines.  Don't match (plus (const_int 0) ...).
+ 	(*addsi3_extended_mips16): Name previously unnamed MIPS16 pattern.
+ 	Use a define_split to generate the addition.
+ 	(sub[sd]i3): Redefine using :GPR.  Turn subsi3 into a define_insn.
+ 	(subsi3_internal): Delete.
+ 	(*subsi3_extended): Renamed from subsi3_internal_2.
+ 	(bunordered, bordered, bunlt, bunge, buneq, bltgt, bunle, bungt)
+ 	(beq, bne, bgt, bge, blt, ble, bgtu, bgeu, bltu, bleu): Redefine
+ 	using an any_cond template.
+ 
+ 2004-08-23  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* read-rtl.c (read_rtx): Tidy use of format_ptr.
+ 
+ 2004-08-23  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* read-rtl.c (string_obstack): New file-scope variable.
+ 	(read_string, read_quoted_string, read_braced_string)
+ 	(read_escape): Remove obstack parameter and use string_obstack instead.
+ 	(read_rtx): Remove function-local rtl_obstack and initialize
+ 	string_obstack instead.  Update call to read_string.
+ 
+ 2004-08-22  Andrew Pinski  <apinski@apple.com>
+ 
+ 	PR c/15262
+ 	* c-typeck.c (build_unary_op): Use &a.b if the foldded lowered
+ 	expression is not constant.
+ 	(c_finish_return): Do not go through INDIRECT_REF when looking
+ 	for the inner expression of an ADDR_EXPR for warning about.
+ 
+ 2004-08-22  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR 17075
+ 	* cfgexpand.c (expand_gimple_tailcall): Detect when we can both
+ 	create new blocks and fall through.
+ 	(expand_gimple_basic_block): Update to match.
+ 
+ 2004-08-22  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* reload.c (find_reloads_address): Make return value tri-state.
+ 	Return -1 if LEGITIMIZE_RELOAD_ADDRESS succeeded.
+ 	(find_reloads): Assume that reloaded addresses match 'o' or
+ 	EXTRA_MEMORY_CONSTRAINT constraints only if find_reloads_address
+ 	returned 1 (not -1).  Omit optional reloads for address operands
+ 	only if find_reloads_address returned 1 (not -1).
+ 
+ 	* config/s390/s390.c (legitimize_reload_address): New function.
+ 	* config/s390/s390-protos.h (legitimize_reload_address): Declare.
+ 	* config/s390/s390.h (LEGITIMIZE_RELOAD_ADDRESS): Define.  Call
+ 	legitimize_reload_address.
+ 
+ 2004-08-22  Richard Hendersion  <rth@redhat.com>
+ 
+ 	* tree.h (SAVE_EXPR_RESOLVED_P): New.
+ 	* gimplify.c (gimplify_save_expr): Use it.
+ 	* expr.c (expand_expr_real_1): Likewise.  Also set DECL_IGNORED_P
+ 	on the temporary variable.
+ 
+ 2004-08-22  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* fold-const.c (rtl_expr_nonnegative_p): Delete.
+ 	* tree.h (rtl_expr_nonnegative_p): Remove.
+ 
+ 2004-08-22  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* config/i386/ppro.md (ppro_complex_insn): Add missing check
+ 	for cpu==pentiumpro.
+ 
+ 	* combine.c (struct reg_stat): Fix comment typo.
+ 
+ 2004-08-22  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-tree.h (c_sizeof_nowarn): Remove.
+ 
+ 2004-08-21  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-decl.c (set_array_declarator_type): Rename to
+ 	set_array_declarator_inner.
+ 	(build_c_parm, build_attrs_declarator, build_function_declarator):
+ 	New functions.
+ 	(make_pointer_declarator): Call build_attrs_declarator.
+ 	* c-tree.h (set_array_declarator_type): Rename to
+ 	set_array_declarator_inner.
+ 	(build_c_parm, build_attrs_declarator, build_function_declarator):
+ 	New prototypes.
+ 	* c-parse.in (after_type_declarator,
+ 	parm_declarator_starttypename, parm_declarator_nostarttypename,
+ 	notype_declarator, absdcl_maybe_attribute, direct_absdcl1, parm,
+ 	firstparm): Use these functions
+ 
+ 2004-08-21  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-decl.c (build_array_declarator, set_array_declarator_type,
+ 	start_decl, grokdeclarator, grokparms): Change boolean parameters
+ 	to type bool.
+ 	* c-tree.h (build_array_declarator, set_array_declarator_type,
+ 	start_decl): Update prototypes.
+ 	* c-decl.c, c-parse.in: All callers changed.
+ 
+ 2004-08-21  Mike Stump  <mrs@apple.com>
+ 
+ 	* config/rs6000/darwin.h (SUBTARGET_OPTIONS): Move from here, to...
+ 	(darwin_fix_and_continue): Likewise.
+ 	(darwin_fix_and_continue_switch): Likewise.
+ 	* config/darwin.h (SUBTARGET_OPTIONS): ...here, to fix -mone-byte-bool.
+ 	(darwin_fix_and_continue): Likewise.
+ 	(darwin_fix_and_continue_switch): Likewise.
+ 
+ 2004-08-21  Danny Smith  <dannysmith@users.sourceforge.net>
+ 
+ 	PR  c++/16030
+ 	* config/i386/winnt/c (gen_stdcall_suffix, gen_fastcall_suffix):
+ 	Remove, merging into ...
+ 	(gen_stdcall_or_fastcall_suffix): New function, returning tree
+ 	rather than const char*, and accepting additional parameter.
+ 	Don't add suffix to '*'-prefixed symbols or variadic functions.
+ 	(i386_pe_encode_section_info): Adjust for call to new function.
+ 	Call change_decl_assembler_name.
+ 
+ 2004-08-20  Mike Stump  <mrs@apple.com>
+ 
+ 	* config/darwin.c (machopic_indirect_data_reference): Mark
+ 	stubs as defined.
+ 	* config/386/386.c (darwin_local_data_pic): Add.
+ 	(legitimate_constant_p): Reorder so that PLUS handling runs
+ 	before darwin_local_data_pic to match the ordering in
+ 	legitimate_pic_address_disp_p and so that MINUS runs after
+ 	darwin_local_data_pic as otherwise the darwin_local_data_pic
+ 	logic can be skipped, which would be very bad.
+ 	(legitimate_pic_address_disp_p): Move from from here to
+ 	darwin_local_data_pic so it can be reused.
+ 
+ 2004-08-21  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* config/rs6000/linux64.h (DOT_SYMBOLS): Define.
+ 	(CRT_CALL_STATIC_FUNCTION): Define !DOT_SYMBOLS version.
+ 	(ASM_DECLARE_FUNCTION_SIZE): Modify for !DOT_SYMBOLS.
+ 	(ASM_OUTPUT_SOURCE_LINE, DBX_OUTPUT_BRAC, DBX_OUTPUT_NFUN): Likewise.
+ 	(RS6000_ABI_NAME): Define as "linux".
+ 	(SUBSUBTARGET_OVERRIDE_OPTIONS): Set dot_symbols.
+ 	* config/rs6000/sysv4.h (SUBTARGET_OVERRIDE_OPTIONS): Select
+ 	ABI_AIX when rs6000_abi_name is "linux" and TARGET_64BIT.
+ 	* config/rs6000/rs6000-protos.h (rs6000_output_function_entry): Decl.
+ 	* config/rs6000/rs6000.c (dot_symbols): New global var.
+ 	(rs6000_output_function_entry): New function, modified for
+ 	!DOT_SYMBOLS..
+ 	(print_operand <case 'z'>): ..extracted from here.
+ 	(rs6000_assemble_visibility): Modify for !DOT_SYMBOLS.
+ 	(rs6000_output_function_epilogue): Likewise.
+ 	(rs6000_elf_declare_function_name): Likewise.
+ 	* config/rs6000/rs6000.h (DOT_SYMBOLS): Define.
+ 	(ASM_WEAKEN_DECL, ASM_OUTPUT_DEF_FROM_DECLS): Modify for !DOT_SYMBOLS.
+ 	* configure.ac (HAVE_LD_NO_DOT_SYMS): Add new AC_DEFINE.
+ 	* configure: Regenerate.
+ 	* config.in: Regenerate.
+ 
+ 2004-08-20  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* reload.c (find_reloads_address): Fix thinko in previous change.
+ 
+ 	* reload.c (find_reloads_address): Reload the sum of a LO_SUM and
+ 	a CONST_INT.
+ 
+ 2004-08-20  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR rtl-optimization/17099
+ 	* combine.c (force_to_mode): Check if inner_mask has any bits set
+ 	outside of GET_MODE (x) instead of op_mode.
+ 
+ 2004-08-20  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* config.gcc (arm*-*-symbianelf*): Add t-symbian Makefile
+ 	fragment.
+ 	* config/arm/bpabi.h (RENAME_LIBRARY_SET): Fix typo.
+ 	(SUBTARGET_EXTRA_ASM_SPEC): Pass -meabi=3 to the assembler.
+ 	* config/arm/symbian.h (SUBTARGET_CPU_DEFAULT): Assume ARMV5
+ 	architecture.
+ 	(SUBTARGET_ASM_FLOAT_SPEC): Default to -mfpu=vfp for hard-float
+ 	configurations.
+ 	* config/arm/t-symbian: New file.
+ 
+ 2004-08-20  Andrew Pinski  <apinski@apple.com>
+ 
+ 	* regrename.c (kill_value_regno): ANSIfy.
+ 
+ 2004-08-20  Dale Johannesen  <dalej@apple.com>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_rtx_costs): Improve DIV/MOD.
+ 
+ 2004-08-20  Daniel Jacobowitz  <dan@debian.org>
+ 
+ 	* regrename.c (kill_value_one_regno): Renamed from kill_value_regno.
+ 	(kill_value_regno): New function, derived from kill_value.
+ 	(kill_value): Update.
+ 	(copyprop_hardreg_forward_1): Update call to kill_value_regno.
+ 
+ 2004-08-20  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	Fix PR tree-optimization/17111
+ 	* tree-ssa-pre.c (create_value_expr_from): Don't change the types
+ 	of non-value_handles.
+ 	(bitmap_set_contains): All constants are in every set.
+ 
+ 2004-08-20  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* fold-const.c (round_up, round_down): Use build_int_cst.
+ 	Optimize common case.
+ 
+ 2004-08-20  Zack Weinberg  <zack@codesourcery.com>
+ 	    John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	* config/pa/pa-protos.h (readonly_data, one_only_readonly_data_section,
+ 	one_only_data_section): Rename to som_readonly_data_section,
+ 	som_one_only_readonly_data_section and som_one_only_data_section.
+ 	* config/pa/pa.c (ONE_ONLY_TEXT_SECTION_ASM_OP,
+ 	NEW_TEXT_SECTION_ASM_OP, DEFAULT_TEXT_SECTION_ASM_OP): Delete
+ 	conditional defines.
+ 	(som_text_section_asm_op): Replace ONE_ONLY_TEXT_SECTION_ASM_OP,
+ 	NEW_TEXT_SECTION_ASM_OP and DEFAULT_TEXT_SECTION_ASM_OP with actual
+ 	string values.
+ 	(pa_select_section): Use renamed section functions.
+ 	* config/pa/pa.h (EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS,
+ 	SOM_READONLY_DATA_SECTION_FUNCTION,
+ 	SOM_ONE_ONLY_READONLY_DATA_SECTION_FUNCTION,
+ 	SOM_ONE_ONLY_DATA_SECTION_FUNCTION, FORGET_SECTION_FUNCTION):
+ 	Define here ...
+ 	* config/pa/som.h: ... not here.
+ 	(DEFAULT_TEXT_SECTION_ASM_OP, NEW_TEXT_SECTION_ASM_OP,
+ 	ONE_ONLY_TEXT_SECTION_ASM_OP, READONLY_DATA_ASM_OP,
+ 	ONE_ONLY_READONLY_DATA_SECTION_ASM_OP,
+ 	ONE_ONLY_DATA_SECTION_ASM_OP): Delete.
+ 	(READONLY_DATA_SECTION): Use som_readonly_data_section.
+ 
+ 2004-08-20  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* fold-const.c (int_const_binop): Don't generate non-overflowing
+ 	size-types specially.
+ 	(fold_convert_const): Likewise.
+ 
+ 	* stor-layout.c (initialize_sizetypes): Set SIZETYPE earlier,
+ 	clear cache on copied sizetype.
+ 
+ 2004-08-20  Ben Elliston  <bje@au.ibm.com>
+ 
+ 	* configure.ac: Don't escape apostrophe in --enable-coverage help.
+ 	* configure: Regenerate.
+ 
+ 2004-08-20  Danny Smith  <dannysmith@users.sourceforge.net>
+ 
+ 	PR 5620
+ 	* gcc.c (struct stat input_stat): Don't define if
+ 	HOST_LACKS_INODE_NUMBERS
+ 	(do_spec_1): If HOST_LACKS_INODE_NUMBERS, use lrealpath rather
+ 	than stat to determine if temp file is same as input file.
+ 	* doc/hostconfig.texi: Document HOST_LACKS_INODE_NUMBERS.
+ 	* config/i386/xm-mingw32.h: Define HOST_LACKS_INODE_NUMBERS
+ 
+ 2004-08-20  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* configure.ac (mips*-*-*): Print an error if not using GAS.
+ 	* configure: Regenerated.
+ 	* doc/install.texi: Remove irix5 bullet from --with-gnu-as.  Remove
+ 	comments about buggy MIPSpro assemblers.
+ 	* config.gcc (mips-sgi-irix[56]*): Combine stanzas.  Include elfos.h
+ 	before mips.h and iris.h after it.  Use t-iris and t-slibgcc-irix.
+ 	Use iris5.h only for IRIX 5 configs.  Use iris6.h and t-iris6 for
+ 	IRIX 6 configs.  Define IRIX_USING_GNU_LD if using GNU ld.
+ 	* config/mips/iris5.h (TARGET_IRIX, SWITCHES_NEED_SPACES)
+ 	(DEFAULT_SIGNED_CHAR, WORD_SWITCH_TAKES_ARG, SUBTARGET_CC1_SPEC)
+ 	(NO_IMPLICIT_EXTERN_C, MIPS_DEFAULT_GVALUE)
+ 	(TARGET_ASM_EXTERNAL_LIBCALL): Move to iris.h.
+ 	(WCHAR_TYPE, WCHAR_TYPE_SIZE, TARGET_OS_CPP_BUILTINS): Delete in favor
+ 	of more general IRIX 6 definitions.
+ 	(OBJECT_FORMAT_ELF, ASM_OUTPUT_ASCII, ASM_WEAKEN_LABEL)
+ 	(HANDLE_SYSV_PRAGMA): Delete in favor of elfos.h definitions.
+ 	(TARGET_IRIX5, ABICALLS_ASM_OP, BSS_SECTION_ASM_OP, HAS_INIT_SECTION)
+ 	(LD_INIT_SWITCH, LD_FINI_SWITCH, SUBTARGET_ASM_OPTIMIZING_SPEC)
+ 	(ASM_FINAL_SPEC, DBX_DEBUGGING_INFO, MIPS_DEBUGGING_INFO)
+ 	(PREFERRED_DEBUGGING_TYPE, DWARF2_UNWIND_INFO, SET_FILE_NUMBER)
+ 	(LABEL_AFTER_LOC, DOLLARS_IN_IDENTIFIERS, NO_DOLLAR_IN_LABEL)
+ 	(TARGET_ASM_NAMED_SECTION, EXTRA_SECTION_FUNCTIONS)
+ 	(ASM_DECLARE_FUNCTION_SIZE, ASM_OUTPUT_WEAK_ALIAS)
+ 	(SUBTARGET_EXTRA_SPECS): Delete definitions or undefs.
+ 	(LINK_SPEC): Move most of definition to iris.h.
+ 	(SUBTARGET_LINK_SPEC): New macro.
+ 	(IRIX_STARTFILE_SPEC): Fold into...
+ 	(STARTFILE_SPEC): ...here.
+ 	(IRIX_ENDFILE_SPEC): Fold into...
+ 	(ENDFILE_SPEC): ...here.
+ 	* config/mips/iris6.h (TARGET_IRIX5): Remove override.
+ 	(WCHAR_TYPE, WCHAR_TYPE_SIZE, WINT_TYPE, WINT_TYPE_SIZE)
+ 	(DWARF_OFFSET_SIZE, DWARF_INITIAL_LENGTH_SIZE, SET_ASM_OP)
+ 	(LINK_ELIMINATE_DUPLICATE_LDIRECTORIES, ASM_DECLARE_OBJECT_NAME)
+ 	(ASM_FINISH_DECLARE_OBJECT, LOCAL_LABEL_PREFIX): Move to iris.h.
+ 	(TARGET_OS_CPP_BUILTINS): Likewise.  Guard IRIX6-specific bits.
+ 	(DWARF2_UNWIND_INFO, DWARF2_GENERATE_TEXT_SECTION_LABEL)
+ 	(SUBTARGET_CPP_SPEC, DWARF2_DEBUGGING_INFO, MIPS_DEBUGGING_INFO)
+ 	(PREFERRED_DEBUGGING_TYPE, DWARF2_FRAME_INFO, MD_EXEC_PREFIX)
+ 	(ASM_DECLARE_FUNCTION_NAME, ASM_DECLARE_FUNCTION_SIZE)
+ 	(FUNCTION_NAME_ALREADY_DECLARED, SUPPORTS_INIT_PRIORITY)
+ 	(POPSECTION_ASM_OP, SUBTARGET_ASM_SPEC, SUBTARGET_MIPS_AS_ASM_SPEC)
+ 	(SUBTARGET_ASM_DEBUGGING_SPEC, SUBTARGET_ASM_OPTIMIZING_SPEC)
+ 	(BSS_SECTION_ASM_OP*, READONLY_DATA_SECTION_ASM_OP*)
+ 	(EH_FRAME_SECTION_NAME, MUST_USE_SJLJ_EXCEPTIONS, CTORS_SECTION_ASM_OP)
+ 	(DTORS_SECTION_ASM_OP, TARGET_ASM_NAMED_SECTION, EH_FRAME_SECTION_NAME)
+ 	(ASM_OUTPUT_ALIGN, ASM_OUTPUT_FILENAME, ASM_OUTPUT_ALIGNED_LOCAL)
+ 	(ASM_OUTPUT_ALIGNED_BSS): Remove definitions or undefs.
+ 	(TARGET_IRIX6): Define to 1.
+ 	(DRIVER_SELF_SPECS): Define.
+ 	(DWARF2_FRAME_INFO): Define to 1 rather than !TARGET_SGI_O32_AS.
+ 	(SUBTARGET_CC1_SPEC): Remove in favor of DRIVER_SELF_SPECS.
+ 	(SUBTARGET_LINK_SPEC): New macro.
+ 	(IRIX_STARTFILE_SPEC): Fold into...
+ 	(STARTFILE_SPEC): ...here.  Remove !mabi=* case.
+ 	(SUBTARGET_{,DONT_}WARN_UNUSED_SPEC): New macros.
+ 	(LIB_SPEC, LIBGCC_SPEC): Use them.
+ 	(LIB_SPEC): Remove !mabi=* case.
+ 	(IRIX_ENDFILE_SPEC): Fold into...
+ 	(ENDFILE_SPEC): ...here.  Remove !mabi=* case.
+ 	* config/mips/mips-protos.h (irix_output_external_libcall): Delete.
+ 	* config/mips/mips.h (TARGET_IRIX5, TARGET_SGI_O32_AS): Delete.
+ 	(TARGET_IRIX6): New macro.
+ 	(ASM_ABI_DEFAULT_SPEC): Remove !ELF definition.
+ 	(MD_EXEC_PREFIX, MD_STARTFILE_PREFIX, SET_FILE_NUMBER)
+ 	(LABEL_AFTER_LOC): Delete.
+ 	* config/mips/mips.c (TARGET_ASM_FILE_START, TARGET_ASM_FILE_END)
+ 	(TARGET_SECTION_TYPE_FLAGS): Remove TARGET_IRIX versions.
+ 	(mips_build_builtin_va_list): Check TARGET_IRIX6.
+ 	(override_options): Remove TARGET_SGI_O32_AS-related code.
+ 	(irix_output_external_libcall): Make static.
+ 	(mips_output_filename): Avoid use of SET_FILE_NUMBER and
+ 	LABEL_AFTER_LOC.
+ 	(mips_file_start): Tidy guard for ABI sections.  Remove use of
+ 	ABICALLS_ASM_OP; use .abicalls instead.
+ 	(mips_output_aligned_decl_common, mips_declare_object_name)
+ 	(mips_finish_declare_object): Remove use of TARGET_SGI_O32_AS.
+ 	(mips_output_function_prologue): Set TREE_ASM_WRITTEN if emitting
+ 	.globl foo .text directives.
+ 	(irix_asm_named_section_1, irix_asm_named_section)
+ 	(irix_section_align_entry, irix_section_align_htab)
+ 	(irix_orig_asm_out_file, irix_section_align_entry_eq)
+ 	(irix_section_align_entry_hash, irix_asm_output_align)
+ 	(irix_file_start, irix_section_align_1, copy_file_data)
+ 	(irix_file_end, irix_section_type_flags): Delete.
+ 	* config/mips/irix-crti.asm (__gcc_init): Move to .gcc_init section.
+ 	Use standard section syntax.  Remove protective "jr $31".
+ 	(__gcc_fini): Likewise .gcc_fini.
+ 	* config/mips/irix-crtn.asm: Adjust sections accordingly.
+ 	* config/mips/sdb.h (PUT_SDB_SIZE, PUT_SDB_TYPE): Moved from
+ 	iris5gas.h.
+ 	* config/mips/t-iris (irix-crti.o, irix-crtn.o): New rules, moved
+ 	from t-irix-gld.
+ 	(EXTRA_MULTILIB_PARTS): Define.
+ 	* config/mips/t-iris6: Remove bogus comment.
+ 	(EXTRA_MULTILIB_PARTS, CRTSTUFF_T_CFLAGS): Delete.
+ 	* config/mips/iris5gas.h, config/mips/iris5gld.h,
+ 	config/mips/iris6gas.h, config/mips/iris6gld.h,
+ 	config/mips/t-iris5-as, config/mips/t-iris5-gas
+ 	config/mips/t-irix-gld: Delete.
+ 	* config/mips/iris.h: New file.
+ 	* config/mips/t-slibgcc-irix: Renamed from t-iris5-6.
+ 
+ 2004-08-20  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* postreload.c (reload_cse_move2add): Allow any condjump, but check
+ 	that the implicit set isn't clobbered in the jump insn.
+ 
+ 2004-08-19  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* defaults.h (TARGET_LIBGCC_LIBFUNCS): Remove.
+ 	* optabs.c (init_optabs): Don't check it.
+ 	* config/arm/bpabi.h (TARGET_LIBGCC_LIBFUNCS): Do not define.
+ 	* doc/tm.texi (TARGET_LIBGCC_FUNCS): Remove.
+ 
+ 2004-08-18  Andreas Krebbel  <krebbel1@de.ibm.com>
+ 
+ 	* config/s390/s390.md (s390_warn_framesize_string)
+ 	(s390_warn_dynamic_string, s390_stack_size_string)
+ 	(s390_stack_guard_string): New global string variables.
+ 	(s390_warn_framesize, s390_warn_dynamicstack_p, s390_stack_size)
+ 	(s390_stack_guard): New global variables.
+ 	(override_options): Added checks for the new options.
+ 	(s390_emit_prologue): Emit stack check and trap code and perform
+ 	compile time stack size checking.
+ 
+ 	* config/s390/s390.h (TARGET_OPTIONS): Added new options
+ 	"warn-framesize", "warn-dynamicstack", "stack-size" and
+ 	"stack-guard".
+ 
+ 	* doc/invoke.texi: Added documentation for the new options.
+ 
+ 2004-08-19  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* unwind-dw2-fde.c (get_cie_encoding): Cast argument to strlen
+ 	to eliminate warning.
+ 	(linear_search_fdes): Declare p as unsigned.
+ 	(binary_search_mixed_encoding_fdes): Likewise.
+ 	* unwind-dw2.c (get_cie_encoding): Cast argument to strlen
+ 	to eliminate warning.
+ 	* config/s390/linux.h (MD_FALLBACK_FRAME_STATE_FOR): Add missing
+ 	type cast.
+ 
+ 2004-08-19  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390-protos.h (preferred_la_operand_p): Adapt prototype.
+ 	* config/s390/s390.c (preferred_la_operand_p): Accept two operands
+ 	instead of one.  Check for strictly legitimate address.
+ 	* config/s390/s390.md ("*la_31"/"*la_64" peepholes): Adapt call
+ 	to preferred_la_operand_p, do not call gen_rtx_PLUS in predicate.
+ 
+ 2004-08-19  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* langhooks-def.h (LANG_HOOKS_UNSAVE_EXPR_NOW): Remove.
+ 	* langhooks.h (unsave_expr_now): Ditto.
+ 	* tree.h (unsave_expr_1): Remove prototype.
+ 	(lhd_unsave_expr_now): Rename to unsave_expr_now.
+ 	* tree-inline.c (unsave_expr_1): Move here
+ 	from tree.c. Make static.
+ 	(unsave_expr_now): Rename from lhd_unsave_expr_now.
+ 	* tree-sra.c: Fix up for rename.
+ 	* tree-ssa-copy.c: Ditto.
+ 	* tree-eh.c: Ditto.
+ 	* tree.c (unsave_expr_1): Move to tree-inline.c.
+ 
+ 2004-08-19  Caroline Tice  <ctice@apple.com>
+ 
+ 	* config/i386/cygming.h (switch_to_section):  Fix typo (change
+ 	in_unlikely_text_section to in_unlikely_executed_text).
+ 
+ 2004-08-19  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* vec.h (VEC_lower_bound): New macro.
+ 
+ 2004-08-19  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	PR target/16446
+ 	* config/mips/mips.c (struct mips_arg_info): Delete num_bytes.
+ 	(mips_arg_info): Update accordingly.  Remove common treatment of fpr_p;
+ 	treat each ABI separately.  Deal with n32/n64 complex float arguments.
+ 	(function_arg): Add associated complex handling here.
+ 
+ 2004-08-19  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/arm/arm.c (arm_gen_load_multiple): Use
+ 	adjust_automodify_address.  Take base memory and offset instead
+ 	of unchanging/struct/scalar bits.
+ 	(arm_gen_store_multiple): Likewise.
+ 	(arm_gen_movmemqi): Use adjust_automodify_address.
+ 	* config/arm/arm-protos.h: Update decls.
+ 	* config/arm/arm.md (load_multiple): Update arm_gen_load_multiple call.
+ 	(store_multiple): Similarly.
+ 
+ 2004-08-19  J"orn Rennecke <joern.rennecke@superh.com>
+ 
+ 	* regclass.c (globalize_reg): Update call_really_used_regs.
+ 
+ 2004-08-19  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* doc/invoke.texi (integer-share-limit): Document.
+ 
+ 	* tree.h (TYPE_CACHED_VALUES_P): New.
+ 	(TYPE_CACHED_VALUES): New.
+ 	(TYPE_ORIG_SIZE_TYPE): Adjust.
+ 	* tree.def (INTEGER_CST): Update documentation.
+ 	* tree.c: Inlcude params.h.
+ 	(build_int_cst): Cache small values.
+ 	(build_type_copy): Do not copy the value cache.
+ 	* c-common.c (c_common_nodes_and_builtins): Add comment, remove
+ 	unneeded zeroing.
+ 	* c-typeck.c (build_c_cast): Add comment about OVERFLOW setting.
+ 	* expmed.c (const_mult_add_overflow_p): Clear type copy's value
+ 	cache.
+ 	* fold-const.c (force_fit_type): Copy value when setting
+ 	overflows.
+ 	(int_const_binop): Likewise.
+ 	* stor-layout.c: Include params.h
+ 	(set_sizetype): Create values cache.
+ 	(fixup_unsigned_type): Set UNSIGNED_P before caching any values.
+ 	* params.def (PARAM_INTEGER_SHARE_LIMIT): New.
+ 	* params.h (INTEGER_SHARE_LIMIT): New.
+ 	* Makefile.in (tree.o, stor-layout.o): Depend on PARAMS_H.
+ 
+ 2004-08-19  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* gimplify.c (gimplify_minimax_expr): Remove.
+ 	(gimplify_expr) <MIN_EXPR, MAX_EXPR>: Remove special handling.
+ 
+ 2004-08-19  Dorit Naishlos  <dorit@il.ibm.com>
+ 
+ 	* tree-vectorizer.c (vect_can_force_dr_alignment_p): Replace
+ 	STACK_BOUDARY with PREFERRED_STACK_BOUNDARY.
+ 
+ 2004-08-19  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* bpabi.h (FPUTYPE_DEFAULT): Set it to FPUTYPE_VFP.
+ 
+ 2004-08-18  Andrew Pinski  <apinski@apple.com>
+ 
+ 	* varasm.c (ecode_reg_name): Do nothing if the asmspec is empty.
+ 
+ 2004-08-18  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* config/arm/bpabi.c (__aeabi_ul2d): Give it default visibility.
+ 	(__aeabi_ul2f): Likewise.
+ 
+ 2004-08-18  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/xtensa/xtensa.c (xtensa_expand_block_move): Expand block
+ 	move to rtl completely.
+ 	(struct meminsnbuf, xtensa_emit_block_move): Remove.
+ 	(xtensa_find_mode_for_size): Remove.
+ 	* config/xtensa/xtensa-protos.h (xtensa_emit_block_move): Remove.
+ 	* config/xtensa/xtensa.md (movmemsi_internal): Remove.
+ 
+ 2004-08-18  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/mcore/mcore.c (mode_from_align): Remove DImode.
+ 	(block_move_sequence): Rewrite to use adjust_address.
+ 	(mcore_expand_block_move): Cleanup logic.  Accept only operands.
+ 	Return boolean indicating success/failure.
+ 	* config/mcore/mcore-protos.h (mcore_expand_block_move): Update decl.
+ 	* config/mcore/mcore.md (movmemsi): Update to match.
+ 
+ 2004-08-18  Mike Stump  <mrs@apple.com>
+ 
+ 	* doc/invoke.texi (-mfix-and-continue): Add support for
+ 	fast turn around debugging.
+ 	(-ffix-and-continue): Likewise.
+ 	(-mindirect-data): Likewise.
+ 	(-findirect-data): Likewise.
+ 	* config/darwin.c (TARGET_FIX_AND_CONTINUE): Likewise.
+ 	(indirect_data): Likewise.
+ 	(machopic_data_defined_p): Likewise.
+ 	(machopic_output_indirection): Likewise.
+ 	(darwin_encode_section_info): Likewise.
+ 	(darwin_fix_and_continue): Likewise.
+ 	(darwin_fix_and_continue_switch): Likewise.
+ 	* config/darwin.h (MACHO_SYMBOL_STATIC): Likewise.
+ 	* config/rs6000/darwin.h (SUBTARGET_OVERRIDE_OPTIONS): Likewise.
+ 	(SUBTARGET_OPTION_TRANSLATE_TABLE): Likewise.
+ 	(SUBTARGET_OPTIONS): Likewise.
+ 	(darwin_fix_and_continue): Likewise.
+ 	(darwin_fix_and_continue_switch): Likewise.
+ 	(TARGET_FIX_AND_CONTINUE): Likewise.
+ 	* config/rs6000.c (rs6000_emit_prologue): Likewise.
+ 
+ 2004-08-19  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* basic-block.h (struct edge_def): Remove crossing_edge.
+ 	(EDGE_CROSSING): New define.
+ 	(EDGE_ALL_FLAGS): Update.
+ 	* bb-reorder.c (find_traces_1_round, better_edge_p,
+ 	find_rarely_executed_basic_blocks_and_cr, fix_up_fall_thru_edges,
+ 	find_jump_block, fix_crossing_conditional_branches,
+ 	fix_crossing_unconditional_branches, add_reg_crossing_jump_notes):
+ 	Replace all occurences of crossing_edge with an edge flag check
+ 	or set/reset.
+ 	* cfgcleanup.c (try_simplify_condjump, try_forward_edges,
+ 	try_crossjump_bb): Likewise.
+ 	* cfglayout.c (fixup_reorder_chain): Likewise.
+ 	* cfgrtl.c (force_nonfallthru_and_redirect,
+ 	commit_one_edge_insertion): Likewise.
+ 
+ 	* Makefile.in (cfganal.o): Depend on TIMEVAR_H.
+ 	* tree-flow.h (compute_dominance_frontiers): Move prototype...
+ 	* basic-block.h:  ...here.
+ 	* tree-cfg.c (compute_dominance_frontiers_1,
+ 	compute_dominance_frontiers): Move from here...
+ 	* cfganal.c: ...to here.  Include timevar.h.
+ 
+ 2004-08-18  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	* config/mips/mips.h (ASM_SPEC): In comment, change -meabi= to -mabi=.
+ 	* config/mips/sb1.md (ir_sb1_divsf_1pipe): Renamed from ...1pipes.
+ 
+ 	* config/mips/mips.md (type): Add frdiv.
+ 	(divsf3+1, divsf3+2): Change type to frdiv.
+ 	* config/mips/sb1.md (ir_sb1_recipsf_2pipes, ir_sb1_recipsf_1pipe,
+ 	ir_sb1_recipdf_2pipes, ir_sb1_recipdf_1pipe): New.
+ 
+ 	* config/mips/3000.md (r3k_fdiv_single, r3k_fdiv_double): Add frdiv.
+ 	* config/mips/4300.md (r4300_fdiv_single, r4300_fdiv_double): Likewise.
+ 	* config/mips/4600.md (r4600_fdiv_single, f4600_fdiv_double): Likewise.
+ 	* config/mips/5000.md (r5k_fdiv_single): Likewise.
+ 	* config/mips/5400.md (ir_vr54_fdiv_sf, ir_vr54_fdiv_df): Likewise.
+ 	* config/mips/5500.md (ir_vr55_fdiv_sf, ir_vr55_fdiv_df): Likewise.
+ 	* config/mips/6000.md (r6k_fdiv_single, r6k_fdiv_double): Likewise.
+ 	* config/mips/7000.md (rm7_fp_divsqrt_df, rm7_fp_divsqrt_sf): Likewise.
+ 	* config/mips/9000.md (rm8k_fdivs, rm9k_fdivd): Likewise.
+ 	* config/mips/generic.md (generic_fdiv_single, generic_fdiv_double):
+ 	Likewise.
+ 	* config/mips/sr71k.md (ir_sr70_fdiv_sf, ir_sr70_fdiv_df): Likewise.
+ 
+ 2004-08-18  Robert Bowdidge <bowdidge@apple.com>
+ 
+ 	* config/rs6000/x-darwin: Remove XCFLAGS -mdynamic-no-pic to
+ 	get regression tester working again.
+ 
+ 2004-08-18  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* insn-notes.def, reg-notes.def: New files.
+ 	* rtl.h: Use them to define enum insn_note and enum reg_note.
+ 	* rtl.c: Use them to define note_insn_name and reg_note_name.
+ 	* Makefile.in (RTL_BASE_H): Update.
+ 
+ 	* modulo-sched.c, sched-rgn.c, final.c: NOTE_DISABLE_SCHED_OF_BLOCK
+ 	renamed to NOTE_INSN_DISABLE_SCHED_OF_BLOCK.
+ 
+ 2004-08-18  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* arm.c (arm_size_rtx_costs): New function.
+ 	(arm_override_options): Use it if optimizing for space.
+ 
+ 2004-08-18  Richard Henderson  <rth@redhat.com>
+ 
+ 	* emit-rtl.c (gen_const_mem): New.
+ 	* rtl.h (gen_const_mem): Declare.
+ 	* expr.c (do_tablejump): Use it.
+ 	* varasm.c (force_const_mem): Likewise.
+ 	* config/darwin.c (machopic_indirect_data_reference): Likewise.
+ 	(machopic_legitimize_pic_address): Likewise.
+ 	* config/arm/arm.c (legitimize_pic_address): Likewise.
+ 	* config/i386/i386.c (legitimize_pic_address): Likewise.
+ 	(legitimize_tls_address): Likewise.
+ 	* config/ia64/ia64.c (ia64_expand_tls_address): Likewise.
+ 	* config/ia64/ia64.md (load_fptr): Likewise.
+ 	* config/m32r/m32r.c (m32r_legitimize_pic_address): Likewise.
+ 	* config/pa/pa.c (legitimize_pic_address): Likewise.
+ 	* config/rs6000/rs6000.c (rs6000_legitimize_tls_address): Likewise.
+ 	(rs6000_emit_move): Likewise.
+ 	* config/s390/s390.c (legitimize_pic_address): Likewise.
+ 	(legitimize_tls_address): Likewise.
+ 	* config/s390/s390.md (casesi): Likewise.
+ 	* config/sh/sh.c (sh_reorg): Likewise.
+ 	* config/sparc/sparc.c (legitimize_pic_address): Likewise.
+ 	* config/v850/v850.md (casesi): Likewise.
+ 
+ 	* config/darwin.c (machopic_indirect_call_target): Set MEM_NOTRAP_P.
+ 	* config/sh/sh.c (prepare_move_operands): Remove incorrect
+ 	use of MEM_READONLY_P.
+ 
+ 2004-08-18  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* Makefile.in (OBJS-common): Add postreload-gcse.c.
+ 	Add new postreload-gcse.o.
+ 	* cse.c (SAFE_HASH): Define as wrapper around safe_hash.
+ 	(lookup_as_function, insert, rehash_using_reg, use_related_value,
+ 	equiv_constant): Use SAFE_HASH instead of safe_hash.
+ 	(exp_equiv_p): Export.  Add for_gcse argument when comparing
+ 	for GCSE.
+ 	(lookup, lookup_for_remove, merge_equiv_classes, find_best_addr,
+ 	find_comparison_args, fold_rtx, cse_insn): Update callers.
+ 	(hash_rtx): New function derived from old canon_hash and bits
+ 	from gcse.c hash_expr_1.
+ 	(canon_hash_string): Rename to hash_rtx_string.
+ 	(canon_hash, safe_hash): Make static inline.  Call hash_rtx.
+ 	* cselib.c (hash_rtx): Rename to cselib_hash_rtx.
+ 	(cselib_lookup): Update this caller.
+ 	* gcse.c (modify_mem_list_set, canon_modify_mem_list_set):
+ 	Make static.
+ 	(hash_expr): Call hash_rtx.
+ 	(ldst_entry): Likewise.
+ 	(expr_equiv_p): Call exp_equiv_p.
+ 	(struct unoccr, hash_expr_1, hash_string_1, lookup_expr,
+ 	reg_used_on_edge, reg_set_between_after_reload_p,
+ 	reg_used_between_after_reload_p, get_avail_load_store_reg,
+ 	is_jump_table_basic_block, bb_has_well_behaved_predecessors,
+ 	get_bb_avail_insn, hash_scan_set_after_reload,
+ 	compute_hash_table_after_reload,
+ 	eliminate_partially_redundant_loads, gcse_after_reload,
+ 	get_bb_avail_insn, gcse_after_reload_main): Remove.
+ 	* postreload-gcse.c: New file, reincarnating most of the above.
+ 	* rtl.h (exp_equiv_p, hash_rtx): New prototypes.
+ 	(gcse_after_reload_main): Update prototype.
+ 	* timevar.def (TV_GCSE_AFTER_RELOAD): New timevar.
+ 	* passes.c (rest_of_handle_gcse2): Use it.
+ 
+ 2004-08-18  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-loop.c (pass_loop_init): Add TODO_dump_func.
+ 	(pass_loop_done): Likewise.
+ 
+ 2004-08-18  Andrew Pinski  <apinski@apple.com>
+ 
+ 	* config/rs6000/darwin.md: Delete the altivec patterns which are
+ 	handled differently now.
+ 	(load_macho_picbase_di): Make sure that is only happens for TARGET_64BIT
+ 	(macho_correct_pic_di): Likewise.
+ 	(call_indirect_nonlocal_darwin64): Likewise.
+ 	Delete the save world/saveFP/saveVec patterns.
+ 
+ 	Revert the reversion of: 2004-08-16  Stan Shebs  <shebs@apple.com>
+ 	* config/darwin.c (macho_indirect_data_reference): Add DImode case.
+ 	* config/rs6000/rs6000.md: Include darwin.md.
+ 	(builtin_setjmp_receiver): Add DImode case.
+ 	* config/rs6000/rs6000.c (rs6000_emit_move): Add DImode case to
+ 	Darwin bits.
+ 
+ 2004-08-18  Matt Austern  <austern@apple.com>
+ 
+ 	Dead code stripping
+ 	* darwin.h (EH_FRAME_SECTION_ATTR): Mark so it doesn't get stripped.
+ 	* darwin.c (darwin_file_end): Mark file as potentially strippable.
+ 
+ 2004-08-18  Richard Henderson  <rth@redhat.com>
+ 
+ 	* alias.c (readonly_fields_p): Remove.
+ 	(objects_must_conflict_p): Don't call it.
+ 	* tree.h (readonly_fields_p): Remove.
+ 	* langhooks.h (struct lang_hooks): Remove honor_readonly.
+ 	* langhooks-def.h (LANG_HOOKS_HONOR_READONLY): Remove.
+ 
+ 2004-08-18  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (add_referenced_var): Only global variables are
+ 	call-clobbered.
+ 	* tree-flow.h (struct ptr_info_def): Add field pt_global_mem.
+ 	* tree-ssa-alias.c (compute_points_to_and_addr_escape): Mark
+ 	all pointers dereferenced if the statement dereferences them.
+ 	(create_name_tags): Do not create memory tags for pointers
+ 	that have PT_ANYTHING set.
+ 	Also check if PT_VARS is not empty before creating a name tag.
+ 	(compute_flow_sensitive_aliasing): Don't mark call-clobbered
+ 	variables that share the same alias set with a pointer that
+ 	may point anywhere.
+ 	(add_may_alias): Add FIXME comment to remove clobbering
+ 	aliased variables and tags.
+ 	(replace_may_alias): Likewise.
+ 	(set_pt_anything): Do not clear PT_VARS nor IS_DEREFERENCED.
+ 	(merge_pointed_to_info): If the original variable has not
+ 	points-to information, call set_pt_anything.
+ 	(add_pointed_to_var): Do not prevent adding a pointed-to
+ 	variable if the pointers is PT_ANYTHING.
+ 	If the variable is a global, set PT_GLOBAL_MEM.
+ 	(collect_points_to_info_r): Don't assume that PLUS_EXPRs of
+ 	pointer type only come in PTR+OFFSET flavours.
+ 	Always call merge_pointed_to_info on PHI arguments that are
+ 	SSA_NAMEs.
+ 	(get_nmt_for): Mark call-clobbered tags whose pointer points
+ 	to global memory.
+ 	* tree-ssa-operands.c (opf_kill_def, opf_no_vops): Switch
+ 	values.
+ 	(get_indirect_ref_operands): Always clear OPF_KILL_DEF from
+ 	FLAGS.
+ 	(add_stmt_operand): Abort if the caller tried to add a killing
+ 	definition for a memory tag.
+ 	* tree-ssa.c (verify_flow_sensitive_alias_info): Remove
+ 	unnecessary checks.
+ 
+ 2004-08-18  J"orn Rennecke <joern.rennecke@superh.com>
+ 
+ 	* sh.h (CONDITIONAL_REGISTER_USAGE): Don't exclude fixed registers
+ 	from call_used_regs.  Update call_really_used_regs.
+ 	(CALL_REALLY_USED_REGISTERS): Define.
+ 	* sh.c (output_stack_adjust, shmedia_target_regs_stack_space):
+ 	Replace call_used_regs with call_really_used_regs.
+ 	(calc_live_regs, sh_media_register_for_return): Likewise.
+ 	(sh5_schedule_saves, sh_expand_prologue, reg_unused_after): Likewise.
+ 	* sh.md (return_media): Likewise.
+ 
+ 2004-08-18  Andrew Pinski  <apinski@apple.com>
+ 
+ 	* config/darwin.c (machopic_legitimize_pic_address): Only set
+ 	MEM_READONLY_P in the non TARGET_TOC case.
+ 
+ 2004-08-18  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* rtl.def (NIL): Delete.
+ 	* read-rtl.c (read_rtx): Handle (nil) like (define_constants).
+ 	Tighten the syntax a little.
+ 
+ 	* cfgloop.h, combine.c, cse.c, loop-iv.c, postreload.c, reload.c
+ 	* config/alpha/alpha.c, config/alpha/alpha.h, config/arc/arc.h
+ 	* config/arm/arm.h, config/frv/frv.h, config/i386/i386.c
+ 	* config/i386/predicates.md, config/m32r/m32r.h
+ 	* config/m68hc11/m68hc11.c, config/mcore/mcore.h, config/mips/mips.c
+ 	* config/mmix/mmix.c, config/pa/pa.h, config/sh/sh.h
+ 	* config/sparc/sparc.h, doc/tm.texi:
+ 	Replace all occurrences of NIL with UNKNOWN.
+ 
+ 2004-08-18  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* dojump.c (do_jump <unordered_bcc>): Do not recursively call
+ 	self with a TRUTH_ORIF_EXPR; generate the appropriate jump
+ 	sequence inline.  Move drop_through_label code into this
+ 	block, being the only place it is used.  Adjust comments.
+ 
+ 2004-08-18  Fariborz Jahanian <fjahanian@apple.com>
+ 
+ 	* config/rs6000/altivec.md: Add new patterns for calls to
+ 	save_world/rest_world functions.
+ 
+ 	* config/rs6000/rs6000-protos.h: (save_world_operation,
+ 	restore_world_operation) new declarations.
+ 
+ 	* config/rs6000/rs6000.c: (struct rs6000_stack) new world_save_p
+ 	field added.
+ 	(rs6000_stack_info): Set world_save_p field.
+ 	(save_world_operation): New function.
+ 	(restore_world_operation): New function.
+ 	(compute_save_world_info): New function.
+ 	(rs6000_stack_info): Call compute_save_world_info.
+ 	(rs6000_emit_prologue): Check for world_save_p and generate
+ 	pattern to call save_world for saving all non-volatile and
+ 	special registers.
+ 	(rs6000_emit_epilogue): Check for world_save_p and generate
+ 	pattern to call rest_world to restore saved registers.
+ 
+ 	config/rs6000/rs6000.h: macros FIRST_SAVED_ALTIVEC_REGNO,
+ 	FIRST_SAVED_FP_REGNO, FIRST_SAVED_GP_REGNO defined.
+ 	(rs6000_reg_names): New entries added for save_world_operation and
+ 	restore_world_operation.
+ 
+ 2004-08-18  Caroline Tice  <ctice@apple.com>
+ 
+ 	* Makefile.in (STAGEFEEDBACK_FLAGS_TO_PASS) Add
+ 	"-freorder-blocks-and-partition" to the flags used in second
+ 	stage of profiledbootstrap.
+ 	* bb-reorder.c (push_to_next_round_p): Add new variable,
+ 	next_round_is_last; set and use variable to make sure, when
+ 	partitioning, that the last trace construction round consists
+ 	of all (and only) cold basic blocks.
+ 	(rotate_loop): Don't copy blocks that end in a section
+ 	crossing jump.
+ 	(copy_bb): Correctly initialize "partition" of duplicated bb.
+ 	(add_unlikely_executed_notes): Add a comment.
+ 	(find_rarely_executed_basic_blocks_and_crossing_edges): Modify
+ 	to make sure, if function contains hot blocks, that the
+ 	successors of ENTRY_BLOCK_PTR are hot; also, only look for
+ 	crossing edges if the architecture supports named sections.
+ 	(mark_bb_for_unlikely_executed_section): Modify to always
+ 	insert the NOTE_INSN_UNLIKELY_EXECUTED_CODE immediately after
+ 	the basic block note insn.
+ 	(fix_crossing_unconditional_branches): Remove extra space.
+ 	(fix_edges_for_rarely_executed_code): Modify to only do
+ 	partitioning work if the architecture supports named sections.
+ 	(reorder_basic_blocks): Modify to only add
+ 	NOTE_INSN_UNLIKELY_EXECUTED_CODE notes if the architecture
+ 	supports named sections.
+ 	* c-common.c (handle_section_attribute): Initialize new global
+ 	variable, user_defined_section_attribute, to true if user has
+ 	specified one.
+ 	* cfgcleanup.c (try_forward_edges): Modify to not attempt to
+ 	forward edges that cross section boundaries.
+ 	* cfglayout.c (fixup_reorder_chain): Modify to only fix up
+ 	partitioning information if the architecture supports named
+ 	sections.
+ 	* cfgrtl.c (target.h): Add statement to include this.
+ 	(rtl_split_block): Make sure newly created bb gets correct
+ 	partition.
+ 	(try_redirect_by_replacing_jump): Make sure redirection isn't
+ 	attempting to cross section boundaries.
+ 	(force_nonfallthru_and_redirect): Only do partition fix up if
+ 	architecture supports named sections.
+ 	(rtl_split_edge): Make sure newly created bb ends up in
+ 	correct partition.
+ 	(commit_one_edge_insertion): Remove code that incorrectly
+ 	updated basic block partition; Make sure partition fix up only
+ 	happens if architecture supports named sections and it's not
+ 	already done.
+ 	(rtl_verify_flow_info_1): Fix if-condition on test/error
+ 	condition that fallthru edges are not allowed to cross section
+ 	boundaries.
+ 	* defaults.h (NORMAL_TEXT_SECTION_NAME): Remove this.
+ 	* final.c (final_scan_insn): Remove redundant test from if-statement;
+ 	change calls to text_section into calls to function_section; add code
+ 	to only to partitioning fix up if architecture supports named
+ 	sections.
+ 	* ifcvt.c (find_if_case_1): Make sure newly created bb has correct
+ 	partition.
+ 	(if_convert): Add targetm.have_named_sections to test.
+ 	* output.h (unlikely_section_label): Extern declaration for new global
+ 	variable.
+ 	(unlikely_text_section_name): Likewise.
+ 	* opts.c (decode_options): If both partitioning and DWARF debugging
+ 	are turned on, issue a warning that this doesn't work, and change
+ 	partitiong to basic block reordering (without hot/cold partitions).
+ 	* passes.c (rest_of_handle_final): Re-set new global variable,
+ 	user_defined_section_attribute, to false.
+ 	(rest_of_compilation): Change options for calling partitioning
+ 	function: Don't call if the user defined the section attribute, and
+ 	don't call if DECL_ONE_ONLY is true for the current function.
+ 	* predict.c (choose_function_section): Return immediately if we
+ 	are doing hot/cold partitioning (i.e. let the basic block partitioning
+ 	determine where the function belongs).
+ 	* reg-stack.c (emit_swap_insn): Add condition to step over
+ 	NOTE_INSN_UNLIKELY_EXECUTED_CODE notes.
+ 	* toplev.c (user_defined_section_attribute): New global variable.
+ 	* toplev.h (user_defined_section_attribute): Extern declaration
+ 	for new global variable.
+ 	* varasm.c (unlikely_section_label): New global variable.
+ 	(unlikely_text_section_name): New global variable.
+ 	(unlikely_text_section): Add code to initialize
+ 	unlikely_text_section_name if necessary; modify to use
+ 	unlikely_text_section_name and unlikely_section_label; also to use
+ 	named_section properly.
+ 	(in_unlikely_text_section):  Modify to work correctly with
+ 	named_section and to use unlikely_text_section_name.
+ 	(named_section):  Add code to work properly with cold section.
+ 	(function_section): Clean up if-statement.
+ 	* config/darwin.c (darwin_asm_named_section): Return to original
+ 	code, removing use of SECTION_FORMAT_STRING.
+ 	* config/arm/pe.h (switch_to_section):  Add case for
+ 	in_unlikely_executed_text to switch statement.
+ 	* config/i386/cygming.h (switch_to_section): Likewise.
+ 	* config/i386/darwin.h (NORMAL_TEXT_SECTION_NAME): Remove.
+ 	(SECTION_FORMAT_STRING): Likewise.
+ 	* config/mcore/mcore.h (switch_to_section): Likewise.
+ 	* config/rs6000/darwin.h (NORMAL_TEXT_SECTION_NAME): Remove.
+ 	(SECTION_FORMAT_STRING): Remove.
+ 
+ 2004-08-18  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* config/i386/i386.h (FIXED_REGISTERS): Update encoding to be
+ 	-ffixed-reg safe, by preserving the meanings of zero and one.
+ 	(CALL_USED_REGISTERS): Likewise.
+ 	(CONDITIONAL_REGISTER_USAGE): Update to process new encodings.
+ 
+ 2004-08-18  Kaz Kojima  <kkojima@gcc.gnu.org>
+ 
+ 	* config/sh/sh.c (split_branches): Check the result of
+ 	next_active_insn.
+ 	(sh_output_mi_thunk): Call init_flow if basic_block_info is null.
+ 	Call rtl_register_cfg_hooks.
+ 
+ 2004-08-18  Richard Henderson  <rth@redhat.com>
+ 
+ 	* rtl.h (MEM_READONLY_P): Replace RTX_UNCHANGING_P.
+ 	* alias.c (true_dependence): Update to match new semantics.
+ 	(canon_true_dependence, write_dependence_p): Likewise.
+ 	(anti_dependence, output_dependence): Update write_dependence_p args.
+ 	(unchanging_anti_dependence): Remove.
+ 	* calls.c (purge_mem_unchanging_flag): Remove.
+ 	(fixup_tail_calls): Don't call it.
+ 	(expand_call): Don't add unchanging memory to function usage.
+ 	* expr.c (emit_block_move_via_libcall): Likewise.
+ 	(clear_storage_via_libcall): Don't clobber RTX_UNCHANGING_P mems.
+ 	(get_subtarget): Don't use RTX_UNCHANGING_P.
+ 	(expand_assignment, store_constructor, expand_expr_real_1): Likewise.
+ 	(do_tablejump): Set MEM_READONLY_P, not RTX_UNCHANGING_P.
+ 	* combine.c (get_last_value_validate): Use MEM_READONLY_P.
+ 	* cse.c (insert): Don't use RTX_UNCHANGING_P.
+ 	(cse_insn, canon_hash): Use MEM_READONLY_P.
+ 	* emit-rtl.c (set_mem_attributes_minus_bitpos): Use MEM_READONLY_P
+ 	instead of RTX_UNCHANGING_P.
+ 	* explow.c (maybe_set_unchanging): Remove.
+ 	* expr.h (maybe_set_unchanging): Remove.
+ 	* flow.c (insn_dead_p, mark_used_regs): Use anti_dependence.
+ 	* function.c (assign_stack_temp_for_type): Don't use RTX_UNCHANGING_P.
+ 	(assign_parm_setup_reg, expand_function_start): Likewise.
+ 	* integrate.c (copy_rtx_and_substitute): Likewise.
+ 	* ra-rewrite.c (emit_colors): Likewise.
+ 	* regmove.c (copy_src_to_dest, regmove_optimize): Likewise.
+ 	(fixup_match_1): Likewise.
+ 	* reload1.c (reload, alter_reg): Likewise.
+ 	* local-alloc.c (validate_equiv_mem): Check MEM_READONLY_P,
+ 	not RTX_UNCHANGING_P.
+ 	(equiv_init_varies_p): Likewise.
+ 	* loop-invariant.c (check_maybe_invariant): Likewise.
+ 	* resource.c (mark_referenced_resources, mark_set_resources): Likewise.
+ 	* loop.c (note_addr_stored): Likewise.
+ 	(prescan_loop): Likewise. Don't check function usage for clobbered
+ 	unchanging memory.
+ 	* rtlanal.c (rtx_unstable_p): Check MEM_READONLY_P,
+ 	not RTX_UNCHANGING_P.
+ 	(rtx_varies_p, modified_between_p, modified_in_p): Likewise.
+ 	* varasm.c (force_const_mem): Likewise.
+ 	* stmt.c (expand_decl): Don't set RTX_UNCHANGING_P.
+ 	* web.c (entry_register): Likewise.
+ 	* tree-gimple.h (get_base_address): Move decl ...
+ 	* tree.h: ... here.
+ 	* doc/rtl.texi (MEM_READONLY_P): Replace RTX_UNCHANGING_P.
+ 
+ 	* config/alpha/alpha.c (alpha_set_memflags_1): Rewrite to be
+ 	called via for_each_rtx.  Copy MEM_SCALAR_P, MEM_NOTRAP_P too.
+ 	(alpha_set_memflags): Update to match.
+ 
+ 	* config/darwin.c (machopic_indirect_data_reference): Set
+ 	MEM_READONLY_P instead of RTX_UNCHANGING_P.
+ 	(machopic_indirect_call_target): Likewise.
+ 	(machopic_legitimize_pic_address): Likewise.
+ 	* config/arm/arm.c (legitimize_pic_address, arm_gen_load_multiple,
+ 	arm_gen_store_multiple, arm_gen_movmemqi): Likewise.
+ 	* config/arm/arm.md (load_multiple, store_multiple): Likewise.
+ 	* config/frv/frv.md (symGOT2reg): Likewise.
+ 	* config/i386/i386.c (legitimize_pic_address,
+ 	legitimize_tls_address, ix86_split_to_parts): Likewise.
+ 	* config/ia64/ia64.c (ia64_expand_tls_address): Likewise.
+ 	* config/ia64/ia64.md (load_fptr): Likewise.
+ 	* config/m32r/m32r.c (m32r_legitimize_pic_address): Likewise.
+ 	* config/m68k/m68k.c (legitimize_pic_address): Likewise.
+ 	* config/mcore/mcore.c (block_move_sequence): Likewise.
+ 	* config/mn10300/mn10300.md (symGOT2reg): Likewise.
+ 	* config/pa/pa.c (legitimize_pic_address): Likewise.
+ 	* config/rs6000/rs6000.c (rs6000_legitimize_tls_address): Likewise.
+ 	(rs6000_emit_move): Likewise.
+ 	* config/s390/s390.c (legitimize_pic_address): Likewise.
+ 	(legitimize_tls_address): Likewise.
+ 	* config/s390/s390.md (casesi): Likewise.
+ 	* config/sh/sh.c (prepare_move_operands, sh_reorg): Likewise.
+ 	* config/sh/sh.md (symGOT2reg): Likewise.
+ 	* config/sparc/sparc.c (legitimize_pic_address): Likewise.
+ 	* config/v850/v850.md (casesi): Likewise.
+ 
+ 	* config/ia64/ia64.c (gen_thread_pointer): Don't set RTX_UNCHANGING_P.
+ 	* config/iq2000/iq2000.c (save_restore_insns): Likewise.
+ 	* config/mips/mips.c (mips_restore_gp): Likewise.
+ 	(mips_save_restore_reg, mips16_gp_pseudo_reg): Likewise.
+ 	* config/sh/sh.c (sh_reorg): Likewise.
+ 
+ 2004-08-18  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree.h (struct tree_decl): Add gimple_formal_temp.
+ 	(DECL_GIMPLE_FORMAL_TEMP_P): New.
+ 	* gimplify.c (pop_gimplify_context): Clear it.
+ 	(lookup_tmp_var): Set it, if is_formal.
+ 	(gimplify_init_constructor): Use rhs_predicate_for for COMPLEX.
+ 	Use is_gimple_val for VECTOR.  Simplify return value.
+ 	(gimplify_save_expr): Use and set DECL_GIMPLE_FORMAL_TEMP_P.
+ 	(gimplify_expr): Likewise.
+ 	* tree-gimple.c (is_gimple_formal_tmp_rhs): Rename from
+ 	is_gimple_tmp_rhs for clarity.  Update all callers.
+ 	(is_gimple_reg_rhs): Simplify logic.
+ 	(is_gimple_formal_tmp_var): Rename from is_gimple_tmp_var for
+ 	clarity; use DECL_GIMPLE_FORMAL_TEMP_P.
+ 	(is_gimple_formal_tmp_reg): Similarly.
+ 	* tree-gimple.h: Update decls.
+ 	* tree-ssa-copyrename.c (copy_rename_partition_coalesce): Use
+ 	DECL_IGNORED_P, not DECL_ARTIFICIAL.  Tidy formatting.
+ 	* tree-ssa-live.c (var_union, type_var_init): Likewise.
+ 
+ 2004-08-18  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* c4x.c (legitimize_operands): Remove calls to
+ 	preserve_subexpressions_p.
+ 
+ 2004-08-18  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* varasm.c (MAX_OFILE_ALIGNMENT): Move ...
+ 	* defaults.h (MAX_OFILE_ALIGNMENT): ... here.
+ 
+ 2004-08-18  Ziemowit Laski  <zlaski@apple.com>
+ 
+ 	* gcc.c (default_compilers): Add info about ".mm", ".M" and ".mii"
+ 	Objective-C++ extensions.
+ 	* gengtype.c (get_file_basename): Match entire subdirectory name
+ 	('cp', 'objc', 'objcp') rather than just its suffix.
+ 	(get_base_file_bitmap): Allow for files to belong to more than one
+ 	language.
+ 	(get_output_file_with_visibility): Treat objc/objc-act.h as a header
+ 	used by more than one front-end.
+ 
+ 2004-08-18  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* arm.md (addsi3, subsi3, andsi3, iorsi3, movsi, movhi): Rework to
+ 	avoid use of preserve_subexpressions_p.
+ 
+ 2004-08-17  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR 17051
+ 	* tree-sra.c (scalarize_use): Mark all v_defs for !is_output too.
+ 
+ 2004-08-17  DJ Delorie  <dj@redhat.com>
+ 
+ 	* doc/extend.texi: Document new xstormy16 attribute.
+ 
+ 	* config/stormy16/stormy16.c (xstormy16_splittable_below100_operand): New.
+ 	(xstormy16_splittable_below100_or_register): New.
+ 	(combine_bnp): New.
+ 	(xstormy16_reorg): New.
+ 	(TARGET_MACHINE_DEPENDENT_REORG): Define.
+ 
+ 	* config/stormy16/stormy16.md (movqi_internal): Make name public.
+ 	(movhi_internal): Likewise.
+ 	(cbhranchhi): Likewise.
+ 	(cbhranchhi_neg): Likewise.
+ 	(andhi3): Only allow splittable below100 operands.
+ 	(iorhi3): Likewise.
+ 	(peephole2): New and/zero_extend->and peephole.
+ 	(peephole2): New load/ior/save->set1 peephole.
+ 	(peephole2): New load/and/save->clr1 peephole.
+ 	(bclrx, bclrx2, bclr7, bclr15): New.
+ 	(bsetx, bsetx2, bset7, bset15): New.
+ 
+ 	* config/stormy16/stormy16.c (xstormy16_print_operand): Be more
+ 	liberal about acceptable 'B' masks.
+ 
+ 	* config/stormy16/stormy16-protos.h
+ 	(xstormy16_asm_output_aligned_common, xstormy16_below100_symbol,
+ 	xstormy16_below100_operand, xstormy16_below100_or_register,
+ 	xstormy16_onebit_set_operand, xstormy16_onebit_clr_operand): New.
+ 	(PREDICATE_CODES): Add new predicates.
+ 
+ 	* config/stormy16/stormy16.c
+ 	(xstormy16_asm_output_aligned_common, xstormy16_below100_symbol,
+ 	xstormy16_below100_operand, xstormy16_below100_or_register,
+ 	xstormy16_onebit_set_operand, xstormy16_onebit_clr_operand): New.
+ 	(xstormy16_expand_iorqi3, xstormy16_expand_andqi3): New.
+ 	(xstormy16_legitimate_address_p): Allow below100 symbols.
+ 	(xstormy16_extra_constraint_p): Add 'W' for below100 operands.
+ 	(xstormy16_expand_move): Leave below100 operands as-is.
+ 	(xstormy16_encode_section_info): Encode below100 symbols.
+ 	(xstormy16_strip_name_encoding): New.
+ 	(xstormy16_print_operand): Print 'b' as shift mask.
+ 	(xstormy16_attribute_table): Add below100 attributes.
+ 	(xstormy16_handle_below100_attribute): New.
+ 
+ 	* config/stormy16/stormy16.h (EXTRA_SECTIONS): add in_bss100.
+ 	(XSTORMY16_SECTION_FUNCTION): New.
+ 	(EXTRA_SECTION_FUNCTIONS): Define using the above.
+ 	(ASM_OUTPUT_ALIGNED_DECL_COMMON, ASM_OUTPUT_ALIGNED_DECL_LOCAL): New.
+ 	(ASM_OUTPUT_SYMBOL_REF): Handle encoded symbols.
+ 	(ASM_OUTPUT_LABELREF): Define.
+ 
+ 	* config/stormy16/stormy16.md (movqi_internal): Add below100 support.
+ 	(movhi_internal): Add below100 support.
+ 	(andhi3): Add below100 support.
+ 	(iorhi3): Add below100 support.
+ 	(iorqi3, iorqi3_internal, andqi3, andqi3_internal): New.
+ 
+ 2004-08-17  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	* config/mips/mips.c (gen_conditional_move): Use GET_MODE (op0) instead
+ 	of VOIDmode for comparison code mode.
+ 	* config/mips/mips.md: For conditional move patterns, use mode of
+ 	first compare operand for comparison mode, instead of VOIDmode.
+ 
+ 	* config/mips/mips.md: Add canonical nmadd and nmsub patterns for both
+ 	normal and -ffast-math code.
+ 
+ 2004-08-17  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	PR c++/15871
+ 	* doc/invoke.texi (-fkeep-inline-functions): Update documentation.
+ 
+ 2004-08-17  Robert Bowdidge  <bowdidge@apple.com>
+ 
+ 	* config/rs6000/x-darwin: Add -mdynamic-no-pic to gcc build flags.
+ 
+ 2004-08-17  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* config/rs6000/darwin.md (*call_nonlocal_darwin64): Add #else clause
+ 	for non Darwin targets.
+ 	(*call_value_nonlocal_darwin64): Likewise.
+ 
+ 2004-08-17  Fariborz Jahanian <fjahanian@apple.com>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_function_value): Check for
+ 	altivec mode for altivec return register.
+ 
+ 2004-08-17  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	Revert 2004-08-16  Stan Shebs  <shebs@apple.com>
+ 	* config/darwin.c (macho_indirect_data_reference): Add DImode case.
+ 	* config/rs6000/rs6000.md: Include darwin.md.
+ 	(builtin_setjmp_receiver): Add DImode case.
+ 	* config/rs6000/rs6000.c (rs6000_emit_move): Add DImode case to
+ 	Darwin bits.
+ 
+ 2004-08-17  Dorit Naishlos  <dorit@il.ibm.com>
+ 
+ 	* tree-vectorizer.c: New File: loop vectorization on SSAed GIMPLE
+ 	trees.
+ 	* tree-vectorizer.h: New File: Same.
+ 	* Makefile.in (tree-vectorizer.c, tree-vectorizer.h): Add new files.
+ 	* common.opt (ftree-vectorize): New flag to enable vectorization.
+ 	* timevar.def (TV_TREE_VECTORIZATION): New dump file for
+ 	vectorization pass.
+ 	* tree-data-ref.h (init_data_ref): Additional argument.
+ 	(array_base_name_differ_p): Moved to tree-data-ref.c.
+ 	* tree-data-ref.c (array_base_name_differ_p): Revised.
+ 	(initialize_data_dependence_relation): Call array_base_name_differ_p
+ 	with an extra argument.
+ 	(analyze_all_data_dependences): Same.
+ 	(init_data_ref): Additional argument is_read to set DR_IS_READ.
+ 	* tree-ssa-phiopt.c (empty_block_p): Expose for usage out of this
+ 	file.
+ 	* tree-flow.h (vectorize_loops, empty_block_p): Add declaration.
+ 	* tree-optimize.c (pass_vectorize): Schedule the vectorization pass.
+ 	* tree-pass.h (tree_opt_pass pass_vectorize): Declare the new
+ 	vectorization pass.
+ 	* tree-ssa-loop.c (tree_ssa_loop_init): Call scev_initialize.
+ 	(tree_ssa_loop_done): Call scev_finalize.
+ 	(tree_vectorize): Define the new vectorization pass.
+ 	* defaults.h (UNITS_PER_SIMD_WORD): Allow targets to specify the
+ 	size of the vector they support (until support for multiple vector
+ 	sizes is added to the vectorizer).
+ 	* config/i386/i386.h (UNITS_PER_SIMD_WORD): Define.
+ 	* config/rs6000/rs6000.h (UNITS_PER_SIMD_WORD): Define.
+ 	* invoke.texi (fdump-tree-vect, ftree-vectorize): Add
+ 	documentation.
+ 
+ 2004-08-17  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* objc/objc-act.c (build_protocol_initializer): Fix build_int_cst
+ 	usage.
+ 	(generate_protocol_list, handle_impent): Likewise.
+ 
+ 2004-08-17  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* regclass.c (init_reg_sets_1): Add ENABLE_CHECKING sanity tests to
+ 	ensure that call_used_regs is a superset of both fixed_regs and
+ 	call_really_used_regs.
+ 
+ 2004-08-17  Daniel Bornstein  <danfuzz@milk.com>
+ 
+ 	PR target/17019
+ 	* arm.md (addsi3_cbranch_scratch): Correct case labels.
+ 
+ 2004-08-17  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	PR middle-end/17036
+ 	* fold-const.c (fold): Check for integer operand when
+ 	folding (A >> N) & 1 ? (1 << N) : 0.  Fix from Andrew
+ 	Pinski  <pinskia@physics.uc.edu>.
+ 
+ 2004-08-17  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* configure.ac: Trust toplevel's notion of BISON/FLEX/MAKEINFO.
+ 	No need to check if in a cross configuration.
+ 	* configure: Regenerate.
+ 
+ 	* calls.c (precompute_register_parameters):
+ 	Inline preserve_subexpressions_p ().
+ 	* expmed.c (expand_mult_const, emit_store_flag): Likewise.
+ 	* optabs.c (expand_binop, expand_twoval_binop, prepare_cmp_insn):
+ 	Likewise.
+ 	* expr.c (get_subtarget): Likewise.
+ 	* rtl.h (preserve_subexpressions_p): Remove.
+ 	* stmt.c (preserve_subexpressions_p): Remove.
+ 
+ 	* dojump.c (do_jump) <COND_EXPR, EQ_EXPR, NE_EXPR,
+ 	TRUTH_ANDIF_EXPR, TRUTH_ORIF_EXPR, COMPOUND_EXPR>:
+ 	Abort on gimplified cases.
+ 
+ 2004-08-16  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	* tree.h (VECTOR_FLOAT_TYPE_P): New.
+ 	(FLOAT_TYPE_P): Use it.
+ 	* c-typeck.c (build_binary_op): After convert calls, check for
+ 	check for ERROR_MARK operands.
+ 
+ 2004-08-16  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* Makefile.in (BUILD_PREFIX, BUILD_PREFIX_1): Delete.
+ 	(BUILD_RTL, BUILD_PRINT, BUILD_ERRORS, BUILD_VARRAY): Update.
+ 	(genobjs): Add build-rtl.o, build-print-rtl.o, build-varray.o.
+ 	(genobjs static pattern rule): Remove %.c dependency.
+ 	($(BUILD_PREFIX_1)rtl.o, print-rtl.o, $(BUILD_PREFIX_1)varray.o):
+ 	Rename rules; delete commands; fix dependencies.
+ 	(mostlyclean): Do not delete temporary source copies.
+ 	* configure.ac: Delete all references to BUILD_PREFIX and
+ 	BUILD_PREFIX_1.
+ 	* configure: Regenerate.
+ 
+ 	* print-rtl.c: Include bconfig.h #ifdef GENERATOR_FILE.
+ 	Do not include tree.h, real.h, flags.h, hard-reg-set.h, or
+ 	basic-block.h #ifdef GENERATOR_FILE.  Surround some more code
+ 	with #ifndef GENERATOR_FILE so that nothing from those headers
+ 	is used.
+ 
+ 	* rtl.c, varray.c: Include bconfig.h #ifdef GENERATOR_FILE.
+ 
+ 2004-08-16  Adam Nemet  <anemet@lnxw.com>
+ 
+ 	* Makefile.in (LIBS): Move $(LIBIBERTY) after $(BANSHEELIB).
+ 
+ 2004-08-16  Andrew Pinski  <apinski@apple.com>
+ 
+ 	* target-def.h (TARGET_EH_RETURN_FILTER_MODE): Remove
+ 	extraneous semicolon.
+ 
+ 2004-08-16  Devang Patel  <dpatel@apple.com>
+ 
+ 	* c-common.c (handle_used_attribute): Set DECL_PRESERVE_P.
+ 	* print-tree.c (print_node): Print DECL_PRESERVE_P.
+ 	* target-def.h (TARGET_ASM_MARK_DECL_PRESERVED): New #define.
+ 	(TARGET_ASM_OUT): New member, TARGET_ASM_MARK_DECL_PRESERVED
+ 	* target.h (struct gcc_target): New member, mark_decl_preserved.
+ 	* hooks.c (hook_void_charptr): Rename to ...
+ 	(hook_void_constcharptr): ... new name.
+ 	* hooks.h (hook_void_charptr): Rename to ..
+ 	(hook_void_constcharptr): ... new name.
+ 	* tree.h (DECL_PRESERVE_P): New #define.
+ 	(struct tree_decl): New member, preserve_flag.
+ 	* varasm.c (assemble_start_function): Mark decl preserved.
+ 	(assemble_variable): Same.
+ 	* darwin.c (darwin_mark_decl_preserved): New function.
+ 	* darwin.h (TARGET_ASM_MARK_DECL_preserved): New #define.
+ 	* darwin-protos.h (darwin_mark_decl_preserved): New decl.
+ 	* doc/tm.texi (TARGET_ASM_MARK_DECL_PRESERVED): Document.
+ 
+ 2004-08-16  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-decl.c (grokdeclarator): Allow for function definition where
+ 	innermost declarator has attributes.
+ 
+ 2004-08-16  Fariborz Jahanian <fjahanian@apple.com>
+ 
+ 	* except.c (get_exception_filter, build_post_landing_pads,
+ 	dw2_build_landing_pads): Use target-specific mode for 'filter'.
+ 	* target-def.h (TARGET_EH_RETURN_FILTER_MODE): macro defined and used.
+ 	* target.h (eh_return_filter_mode): New field added.
+ 	* targhooks.c (default_eh_return_filter_mode): Defined.
+ 	* targhooks.h (default_eh_return_filter_mode): Declared.
+ 	* config/rs6000/rs6000.c (rs6000_eh_return_filter_mode): Defined.
+ 
+ 2004-08-16  Nathanael Nerode  <neroden@gcc.gnu.org>
+ 
+ 	* configure.ac: Replace _GCC_TOPLEV_NONCANONICAL_TARGET with
+ 	ACX_NONCANONICAL_TARGET; remove now-unneeded AC_SUBST.
+ 	* configure: Regenerate.
+ 
+ 2004-08-16  Stan Shebs  <shebs@apple.com>
+ 
+ 	Basic support for 64-bit Darwin.
+ 	* config/darwin.c (macho_indirect_data_reference): Add DImode case.
+ 	(machopic_legitimize_pic_address): Similarly, plus use Pmode
+ 	instead of SImode.
+ 	* config/rs6000/darwin.h (PTRDIFF_TYPE): Be "long int" if 64-bit.
+ 	(TARGET_OS_CPP_BUILTINS): Add 64-bit preprocessor macro.
+ 	(SUBTARGET_SWITCHES): Add -m32 and -m64 flags.
+ 	(SUBTARGET_OVERRIDE_OPTIONS): Require 64-bit processor if -m64.
+ 	(PROCESSOR_DEFAULT64): Define.
+ 	* config/rs6000/darwin.md: New file, patterns specific to 64-bit
+ 	Darwin.
+ 	* config/rs6000/rs6000.md: Include darwin.md.
+ 	(builtin_setjmp_receiver): Add DImode case.
+ 	* config/rs6000/rs6000.c (TARGET_ASM_UNALIGNED_DI_OP): Define for
+ 	Darwin.
+ 	(TARGET_ASM_ALIGNED_DI_OP): Ditto.
+ 	(rs6000_emit_move): Add DImode case to Darwin bits.
+ 	(machopic_output_stub): Use .quad if 64-bit.
+ 	* invoke.texi: Document -m32 and -m64.
+ 
+ 2004-08-16  Janis Johnson  <janis187@us.ibm.com>
+ 
+ 	* doc/extend.texi (AltiVec builtins): Document additional differences
+ 	from the Motorola AltiVec PIM.
+ 
+ 2004-08-16  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* c-typeck.c (build_c_cast): Only copy overflow from expr nodes.
+ 	* tree.h (IS_NON_TYPE_CODE_CLASS): Simplify.
+ 	(struct tree_common): Update public_flag documentation.
+ 
+ 2004-08-16  Nathanael Nerode  <neroden@gcc.gnu.org>
+ 
+ 	* tree-ssa-copyrename.c (copy_rename_partition_coalesce):
+ 	Check for artificial variables, not is_gimple_tmp_var.
+ 	* tree-ssa-live.c (var_union): Likewise.
+ 
+ 2004-08-16  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* calls.c (load_register_parameters): Remove spurious FIXME token.
+ 
+ 2004-08-15  Ziemowit Laski  <zlaski@apple.com>
+ 
+ 	* Makefile.in (C_PRETTY_PRINT_H): Add c-pretty-print.h.
+ 	(c-lang.o): Depend on c-objc-common.h.
+ 	(c-objc-common.o): Depend on $(C_PRETTY_PRINT_H) and
+ 	c-objc-common.h; remove duplicate $(C_TREE_H) dependency.
+ 	* c-lang.c: Include c-objc-common.h.
+ 	(LANG_HOOKS_FINISH, LANG_HOOKS_INIT_OPTIONS,
+ 	LANG_HOOKS_INITIALIZE_DIAGNOSTICS, LANG_HOOKS_HANDLE_OPTION,
+ 	LANG_HOOKS_MISSING_ARGUMENT, LANG_HOOKS_POST_OPTIONS,
+ 	LANG_HOOKS_GET_ALIAS_SET, LANG_HOOKS_SAFE_FROM_P,
+ 	LANG_HOOKS_EXPAND_EXPR, LANG_HOOKS_MARK_ADDRESSABLE,
+ 	LANG_HOOKS_PARSE_FILE, LANG_HOOKS_TRUTHVALUE_CONVERSION,
+ 	LANG_HOOKS_FINISH_INCOMPLETE_DECL, LANG_HOOKS_UNSAFE_FOR_REEVAL,
+ 	LANG_HOOKS_STATICP, LANG_HOOKS_SET_DECL_ASSEMBLER_NAME,
+ 	LANG_HOOKS_NO_BODY_BLOCKS, LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL,
+ 	LANG_HOOKS_PRINT_IDENTIFIER, LANG_HOOKS_FUNCTION_ENTER_NESTED,
+ 	LANG_HOOKS_FUNCTION_LEAVE_NESTED, LANG_HOOKS_DUP_LANG_SPECIFIC_DECL,
+ 	LANG_HOOKS_DECL_UNINIT, LANG_HOOKS_RTL_EXPAND_STMT,
+ 	LANG_HOOKS_COMMON_ATTRIBUTE_TABLE, LANG_HOOKS_FORMAT_ATTRIBUTE_TABLE,
+ 	LANG_HOOKS_TREE_INLINING_CANNOT_INLINE_TREE_FN,
+ 	LANG_HOOKS_TREE_INLINING_DISREGARD_INLINE_LIMITS,
+ 	LANG_HOOKS_TREE_INLINING_ANON_AGGR_TYPE_P,
+ 	LANG_HOOKS_TREE_INLINING_CONVERT_PARM_FOR_INLINING,
+ 	LANG_HOOKS_TREE_INLINING_ESTIMATE_NUM_INSNS,
+ 	LANG_HOOKS_TREE_DUMP_DUMP_TREE_FN,
+ 	LANG_HOOKS_CALLGRAPH_EXPAND_FUNCTION, LANG_HOOKS_TYPE_FOR_MODE,
+ 	LANG_HOOKS_TYPE_FOR_SIZE, LANG_HOOKS_SIGNED_TYPE,
+ 	LANG_HOOKS_UNSIGNED_TYPE, LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE,
+ 	LANG_HOOKS_INCOMPLETE_TYPE_ERROR, LANG_HOOKS_TYPE_PROMOTES_TO,
+ 	LANG_HOOKS_REGISTER_BUILTIN_TYPE, LANG_HOOKS_WRITE_GLOBALS):
+ 	Move to c-objc-common.h.
+ 	* c-objc-common.c: Include c-objc-common.h.
+ 	* c-objc-common.h: New file.
+ 
+ 2004-08-15  Andreas Tobler  <a.tobler@schweiz.ch>
+ 	    Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR target/14931
+ 	* config/rs6000/darwin-tramp.asm (L_abort$stub): Change to new stub
+ 	style.
+ 
+ 2004-08-15  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* tree.h (build_int_cst): New.
+ 	(build_int_2): Remove.
+ 	* tree.c (build_int_2): Remove.
+ 	(build_int_cst): New.
+ 	(make_vector_type, build_common_tree_nodes,
+ 	build_common_tree_nodes_2): Use build_int_cst.
+ 	* builtins.c (expand_builtin_prefetch, expand_builtin_strstr,
+ 	expand_builtin_strpbrk, expand_builtin_fputs,
+ 	build_string_literal, expand_builtin_printf,
+ 	expand_builtin_sprintf, fold_builtin_lround, fold_builtin_bitop,
+ 	fold_builtin_bitop, fold_builtin_isascii, fold_builtin_toascii,
+ 	fold_builtin_isdigit, simplify_builtin_strstr,
+ 	simplify_builtin_strpbrk, fold_builtin_fputs,
+ 	simplify_builtin_sprintf): Use build_int_cst.
+ 	* c-common.c (start_fname_decls, fix_string_type,
+ 	c_common_nodes_and_builtins, c_init_attributes,
+ 	shorten_compare): Likewise.
+ 	* c-decl.c (complete_array_type,
+ 	check_bitfield_type_and_width): Likewise.
+ 	* c-lex.c (interpret_integer, lex_charconst): Likewise.
+ 	* c-parse.in (primary): <TYPES_COMPATIBLE_P> Likewise.
+ 	* c-pretty-print.c (pp_c_integer_constant): Likewise.
+ 	* c-typeck.c (really_start_incremental_init, push_init_level,
+ 	set_nonincremental_init_from_string): Likewise.
+ 	* calls.c (load_register_parameters): Likewise.
+ 	* convert.c (convert_to_pointer): Likewise.
+ 	* coverage.c (coverage_counter_alloc, tree_coverage_counter_ref,
+ 	build_fn_info_type, build_ctr_info_value, build_gcov_info):
+ 	Likewise.
+ 	* except.c (init_eh, assign_filter_values, assign_filter_values):
+ 	Likewise.
+ 	* expmed.c (store_fixed_bit_field, extract_bit_field,
+ 	extract_fixed_bit_field, extract_split_bit_field, expand_shift,
+ 	expand_mult_const, expand_mult_highpart_adjust, extract_high_half,
+ 	expand_sdiv_pow2, expand_divmod, make_tree): Likewise.
+ 	* expr.c (convert_move, emit_group_load, emit_group_store,
+ 	expand_assignment, store_constructor, store_field,
+ 	expand_expr_real_1, reduce_to_bit_field_precision): Likewise.
+ 	* fold-const.c (force_fit_type, int_const_binop, fold_convert_const,
+ 	invert_truthvalue, optimize_bit_field_compare,
+ 	decode_field_reference, all_ones_mask_p, constant_boolean_node,
+ 	fold_div_compare, fold, fold_read_from_constant_string,
+ 	fold_negate_const, fold_abs_const, fold_not_const): Likewise.
+ 	* function.c (assign_parm_setup_block): Likewise.
+ 	* stmt.c (shift_return_value, expand_end_case_type,
+ 	estimate_case_costs): Likewise.
+ 	* stor-layout.c (layout_type, initialize_sizetypes,
+ 	set_min_and_max_values_for_integral_type): Likewise.
+ 	* tree-chrec.c (chrec_fold_multiply_poly_poly,
+ 	reset_evolution_in_loop): Likewise.
+ 	* tree-chrec.h (build_polynomial_chrec): Likewise.
+ 	* tree-complex.c (build_replicated_const): Likewise.
+ 	* tree-eh.c (honor_protect_cleanup_actions,
+ 	lower_try_finally_onedest, lower_try_finally_copy,
+ 	lower_try_finally_switch): Likewise.
+ 	* tree-mudflap.c (mf_build_string, mx_register_decls,
+ 	mudflap_register_call, mudflap_enqueue_constant): Likewise.
+ 	* tree-nested.c (get_trampoline_type, get_nl_goto_field): Likewise.
+ 	* tree-pretty-print.c (dump_generic_node): Likewise.
+ 	* tree-ssa-ccp.c (widen_bitfield, maybe_fold_offset_to_array_ref):
+ 	Likewise.
+ 	* tree-ssa-dom.c (simplify_rhs_and_lookup_avail_expr): Likewise.
+ 	* tree-ssa-loop-niter.c (number_of_iterations_cond,
+ 	loop_niter_by_eval, upper_bound_in_type, lower_bound_in_type):
+ 	Likewise.
+ 
+ 	* config/alpha/alpha.c (alpha_initialize_trampoline,
+ 	alpha_va_start, alpha_gimplify_va_arg_1): Use build_int_cst.
+ 	* config/arm/arm.c (arm_get_cookie_size): Likewise.
+ 	* config/c4x/c4x.c (c4x_gimplify_va_arg_expr): Likewise.
+ 	* config/i386/i386.c (ix86_va_start, ix86_gimplify_va_arg): Likewise.
+ 	* config/i860/i860.c (i860_va_start): Likewise.
+ 	* config/ia64/ia64.c (ia64_gimplify_va_arg): Likewise.
+ 	* config/mips/mips.c (mips_build_builtin_va_list, mips_va_start,
+ 	mips_gimplify_va_arg_expr): Likewise.
+ 	* config/pa/pa.c (hppa_gimplify_va_arg_expr): Likewise.
+ 	* config/rs6000/rs6000.c (rs6000_va_start, rs6000_gimplify_va_arg,
+ 	add_compiler_branch_island): Likewise.
+ 	* config/s390/s390.c (s390_va_start): Likewise.
+ 	* config/sh/sh.c (sh_va_start): Likewise.
+ 	* config/stormy16/stormy16.c (xstormy16_expand_builtin_va_start):
+ 	Likewise.
+ 	* config/xtensa/xtensa.c (xtensa_va_start,
+ 	xtensa_gimplify_va_arg_expr): Likewise.
+ 
+ 	* objc/objc-act.c (build_objc_string_object,
+ 	build_objc_symtab_template, init_def_list, init_objc_symtab,
+ 	init_module_descriptor, generate_static_references,
+ 	build_selector_translation_table, get_proto_encoding,
+ 	build_typed_selector_reference, build_selector_reference,
+ 	build_next_objc_exception_stuff,
+ 	build_method_prototype_list_template, generate_descriptor_table,
+ 	generate_protocols, build_protocol_initializer,
+ 	build_ivar_list_template, build_method_list_template,
+ 	build_ivar_list_initializer, generate_ivars_list,
+ 	generate_dispatch_table, generate_protocol_list,
+ 	build_category_initializer, build_shared_structure_initializer,
+ 	generate_shared_structures, handle_impent,
+ 	generate_objc_image_info): Use build_int_cst.
+ 
+ 2004-08-15  Ben Elliston  <bje@au.ibm.com>
+ 
+ 	* vec.h: Comment improvements.
+ 
+ 2004-08-14  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* c-common.c (shorten_compare, pointer_int_sum,
+ 	c_common_truthvalue_conversion, boolean_increment): Replace calls
+ 	to build with calls to buildN.
+ 	* c-decl.c (complete_array_type, grokdeclarator): Likewise.
+ 	* c-gimplify.c (c_build_bind_expr, gimplify_c_loop,
+ 	gimplify_switch_stmt): Likewise.
+ 	* c-typeck.c (default_function_array_conversion,
+ 	build_component_ref, build_array_ref, build_function_call,
+ 	pointer_diff, build_unary_op, build_conditional_expr,
+ 	build_compound_expr, build_modify_expr, c_finish_goto_label,
+ 	c_finish_goto_ptr, c_finish_return, c_finish_loop,
+ 	c_finish_bc_stmt, c_finish_stmt_expr, c_end_compound_stmt,
+ 	build_binary_op): Likewise.
+ 
+ 2004-08-15  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* rtl.c (note_insn_name): Add NOTE_DISABLE_SCHED_OF_BLOCK.
+ 
+ 2004-08-14  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	* fixinc/inclhack.def (stdio_va_list): Also fix com_err.h, cps.h,
+ 	curses.h, krb5.h, lc_core.h, pfmt.h, wchar.h and curses_colr/curses.h.
+ 	* fixinc/fixincl.x: Rebuilt.
+ 
+ 2004-08-14  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips-protos.h (mips_symbolic_constant_p)
+ 	(mips_atomic_symbolic_constant_p, mips_stack_address_p)
+ 	(mips_small_data_pattern_p): Declare.
+ 	* config/mips/mips.h (CONST_GP_P): Moved from mips.c.
+ 	(PREDICATE_CODES, SPECIAL_MODE_PREDICATES): Delete.
+ 	* config/mips/mips.c (mips_symbolic_constant_p): Make global.
+ 	(mips_atomic_symbolic_constant_p, mips_stack_address_p): New functions.
+ 	(uns_arith_operand, const_arith_operand, arith_operand, sle_operand)
+ 	(sleu_operand, small_int, reg_or_0_operand, const_float_1_operand)
+ 	(reg_or_const_float_1_operand, hilo_operand, extend_operator)
+ 	(macc_msac_operand, equality_op, cmp_op, trap_cmp_op)
+ 	(pc_or_label_operand, call_insn_operand, move_operand)
+ 	(consttable_operand, symbolic_operand, general_symbolic_operand)
+ 	(global_got_operand, local_got_operand, stack_operand)
+ 	(fp_register_operand, lo_operand, fcc_register_operand): Delete.
+ 	(mips_small_data_pattern_1): Renamed from small_data_pattern_1.
+ 	(mips_small_data_pattern_p): Replace previous small_data_pattern
+ 	predicate.  Turn into a bool () (rtx) function.
+ 	* config/mips/predicates.md: New file.
+ 	* config/mips/mips.md: Include it.  Use the target-independent
+ 	comparison_operator instead of cmp_op.  Rename trap_cmp_op to
+ 	trap_comparison_operator and equality_op to equality_operator.
+ 	Replace uses of small_int with the equivalent const_arith_operand.
+ 	Rename reg_or_const_float_1_operand to reg_or_1_operand.  Rename
+ 	const_float_1_operand to const_1_operand.  Rename fcc_register_operand
+ 	to fcc_reload_operand.
+ 	* config/mips/sb1.md: Rename fp_register_operand to fpr_operand.
+ 
+ 2004-08-14  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	PR libstdc++/17005 partial fix.
+ 	* pa-hpux11.h (TARGET_OS_CPP_BUILTINS): Define _INCLUDE__STDC_A1_SOURCE
+ 	except when generating ANSI/C89 code.
+ 
+ 2004-08-14  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* c-common.c (shorten_compare): Use force_fit_type directly.
+ 
+ 2004-08-14  Gerald Pfeifer  <gerald@pfeifer.com>
+ 	    Dimitri Papadopoulos-Orfanos  <papadopo@shfj.cea.fr>
+ 	    Dave Korn  <dk@artimi.com>
+ 
+ 	* doc/install.texi (Building): Avoid duplicate reference to GNU
+ 	make requirement.
+ 	(*-*-solaris2*): Do not recommend GNU make any longer.  Simplify.
+ 
+ 2004-08-14  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/alpha/alpha.h (PROMOTE_MODE): Don't promote vector types.
+ 	* config/alpha/alpha.c (function_value): Use PROMOTE_MODE.
+ 
+ 2004-08-13  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/i386/i386.md (call_1, sibcall_1, call_1_rex64): Use Pmode
+ 	for constant_call_address_operand.
+ 	(call_value_pop_1, call_value_1): Likewise.
+ 	(sibcall_value_1, call_value_1_rex64): Likewise.
+ 
+ 2004-08-13  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	* config/mips/sb1.md (ir_sb1_divdf_2pipes, ir_sb1_divdf_1pipe):
+ 	Correct mode from SFmode to DFmode.
+ 
+ 2004-08-13  Ziemowit Laski  <zlaski@apple.com>
+ 
+ 	* config/darwin.h (EXTRA_SECTION_FUNCTIONS): Mark the __sel_fixup,
+ 	__cstring_object and __image_info sections with the no_dead_strip
+ 	attribute.
+ 
+ 2004-08-13  Roger Sayle  <roger@eyesopen.com>
+ 	    David Billinghurst  <David.Billinghurst@riotinto.com>
+ 
+ 	PR libgfortran/15930
+ 	* fixinc/inclhack.def (irix___generic1, irix___generic2): New.
+ 	* fixinc/fixincl.x: Regenerate.
+ 	* fixinc/tests/base/internal/math_core.h: New file.
+ 
+ 2004-08-13  Richard Henderson  <rth@redhat.com>
+ 
+ 	* dbxout.c (NO_DBX_FUNCTION_END): Default to zero.
+ 	(dbxout_function_end): Remove ifdefs for it.
+ 	(dbxout_begin_prologue): Protect N_BNSYM with it, and gdb extensions.
+ 
+ 2004-08-13  Richard Henderson  <rth@redhat.com>
+ 
+ 	* Makefile.in (insn-preds.o): Depend on TREE_H.
+ 	* genpreds.c (write_insn_preds_c): Include tree.h.
+ 	* config/alpha/alpha.c (reg_or_0_operand, reg_or_6bit_operand,
+ 	reg_or_8bit_operand, cint8_operand, add_operand, sext_add_operand,
+ 	const48_operand, and_operand, or_operand, mode_width_operand,
+ 	mode_mask_operand, mul8_operand, const0_operand,
+ 	hard_fp_register_operand, hard_int_register_operand,
+ 	reg_or_cint_operand, some_operand, some_ni_operand, input_operand,
+ 	samegp_function_operand, direct_call_operand, small_symbolic_operand,
+ 	global_symbolic_operand, call_operand, symbolic_operand,
+ 	dtp16_symbolic_operand, dtp32_symbolic_operand,
+ 	gotdtp_symbolic_operand, tp16_symbolic_operand, tp32_symbolic_operand,
+ 	gottp_symbolic_operand, alpha_comparison_operator,
+ 	alpha_zero_comparison_operator, alpha_swapped_comparison_operator,
+ 	signed_comparison_operator, alpha_fp_comparison_operator,
+ 	divmod_operator, fix_operator, aligned_memory_operand,
+ 	unaligned_memory_operand, reg_or_unaligned_mem_operand,
+ 	any_memory_operand, reg_not_elim_operand, normal_memory_operand,
+ 	reg_no_subreg_operand, addition_operation): Move to predicates.md.
+ 	(reg_or_const_int_operand): Remove.  Replace all users with
+ 	reg_or_cint_operand.
+ 	(tls_symbolic_operand_1): Export.  Don't check mode or for CONST.
+ 	(resolve_reload_operand): Split out of aligned_memory_operand.
+ 	* config/alpha/alpha-protos.h: Update for exports.
+ 	* config/alpha/alpha.h (PREDICATE_CODES): Remove.
+ 	* config/alpha/alpha.md: Include predicates.md.
+ 	* config/alpha/predicates.md: New file.
+ 
+ 2004-08-13  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* genattrtab.c (insn_ent): Replace insn_code, insn_index and lineno
+ 	fields with a pointer to the instruction definition.
+ 	(get_attr_value, fill_attr, make_length_attrs, remove_insn_ent)
+ 	(insert_insn_ent, simplify_test_exp, optimize_attrs, write_attr_get)
+ 	(write_attr_case, write_const_num_delay_slots): Update accordingly.
+ 	(write_attr_case, write_const_num_delay_slots): Write the name of
+ 	an insn next to its case statement.
+ 	* genoutput.c (data): Add a filename field.
+ 	(gen_insn, gen_peephole, gen_expand, gen_split): Set it.
+ 	(output_insn_data): Print the location of each insn definition.
+ 	* genrecog.c (write_action): Print the name of an insn above
+ 	the statement that returns its code.
+ 
+ 2004-08-12  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* config/darwin-c.c (find_subframework_file): Fix spelling of cannot.
+ 	* config/libgloss.h: Likewise.
+ 	* config/arm/arm.c (arm_gen_load_multiple): Likewise.
+ 	* c4x/c4x-modes.def: Likewise.
+ 	* config/c4x/c4x.c (c4x_hard_regno_rename_ok): Likewise.
+ 	(c4x_rptb_nop_p): Likewise.
+ 	(c4x_rptb_valid_p): Likewise.
+ 	(c4x_rptb_insert): Likewise.
+ 	(c4x_address_conflict): Likewise.
+ 	* config/c4x/c4x.md: Likewise.
+ 	* config/frv/frv.md: Likewise.
+ 	* config/i386/athlon.md: Likewise.
+ 	* config/i386/i386.md: Likewise.
+ 	* config/i386/predicates.md: Likewise.
+ 	* config/ia64/ia64.c: Likewise.
+ 	* config/ia64/itanium1.md: Likewise.
+ 	* config/ia64/itanium2.md: Likewise.
+ 	* config/iq2000/iq2000.md: Likewise.
+ 	* config/mcore/mcore.c: Likewise.
+ 	* config/mips/mips.c: Likewise.
+ 	* config/mips/r3900.h: Likewise.
+ 	* config/mips/sb1.md: Likewise.
+ 	* config/pa/milli64.S: Likewise.
+ 	* config/pa/pa.c: Likewise.
+ 	* config/pa/pa.h: Likewise.
+ 	* config/rs6000/8540.md: Likewise.
+ 
+ 2004-08-13  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* Makefile.in (BOOT_CFLAGS): Remove accidental addition of -dU.
+ 
+ 2004-08-13  J"orn Rennecke <joern.rennecke@superh.com>
+ 
+ 	* sh.md (cbranch define_delay) Use cond_delay_slot for
+ 	non-anulled condition too.
+ 
+ 2004-08-12  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* config/rs6000/rs6000.c (any_parallel_operand): New predicate.
+ 	* config/rs6000/rs6000.h (PREDICATE_CODES): Add
+ 	any_parallel_operand, lmw_operation, stmw_operation,
+ 	mfcr_operation, mtcrf_operation.  Remove PARALLEL from any_operand.
+ 	* config/rs6000/rs6000.md (save_fpregs_{si,di}): Use
+ 	any_parallel_operand.
+ 	(return_and_restore_fpregs_{si,di}): Same.
+ 
+ 2004-08-12  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* genrecog.c (add_to_sequence): When processing a MATCH_PARALLEL,
+ 	if pred->singleton != PARALLEL, issue a warning and pretend it was.
+ 	Also issue a warning for any predicate we don't know about.
+ 
+ 2004-08-12  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/i386/i386.c (internal_label_prefix): Export.
+ 	(internal_label_prefix_len, struct ix86_address,
+ 	ix86_decompose_address, maybe_get_pool_constant,
+ 	ix86_fp_compare_code_to_integer, ix86_fp_comparison_codes,
+ 	memory_address_length): Export.
+ 	(any_fp_register_operand, fp_register_operand,
+ 	register_and_not_any_fp_reg_operand, register_and_not_fp_reg_operand,
+ 	x86_64_general_operand, x86_64_szext_general_operand,
+ 	x86_64_nonmemory_operand, x86_64_movabs_operand,
+ 	x86_64_szext_nonmemory_operand, x86_64_immediate_operand,
+ 	x86_64_zext_immediate_operand, const_int_1_31_operand,
+ 	symbolic_operand, pic_symbolic_operand, local_symbolic_operand,
+ 	tls_symbolic_operand, global_dynamic_symbolic_operand,
+ 	local_dynamic_symbolic_operand, initial_exec_symbolic_operand,
+ 	local_exec_symbolic_operand, call_insn_operand, sibcall_insn_operand,
+ 	constant_call_address_operand, const0_operand, const1_operand,
+ 	const248_operand, const_0_to_3_operand, const_0_to_7_operand,
+ 	const_0_to_15_operand, const_0_to_255_operand, incdec_operand,
+ 	shiftdi_operand, reg_no_sp_operand, mmx_reg_operand,
+ 	general_no_elim_operand, nonmemory_no_elim_operand,
+ 	index_register_operand, q_regs_operand, flags_reg_operand,
+ 	non_q_regs_operand, zero_extended_scalar_load_operand,
+ 	vector_move_operand, no_seg_address_operand, sse_comparison_operator,
+ 	ix86_comparison_operator, ix86_carry_flag_operator,
+ 	fcmov_comparison_operator, promotable_binary_operator,
+ 	cmp_fp_expander_operand, ext_register_operand, binary_fp_operator,
+ 	mult_operator, div_operator, arith_or_logical_operator,
+ 	memory_displacement_operand, cmpsi_operand, long_memory_operand,
+ 	aligned_operand): Move to predicates.md as define_predicates.
+ 	(tls_symbolic_operand_1): Remove.
+ 	(x86_64_sign_extended_value): Merge into x86_64_immediate_operand.
+ 	(x86_64_zero_extended_value): Merge into x86_64_zext_immediate_operand.
+ 	(legitimize_address): Merge tls_symbolic_operand contents.
+ 	(ix86_expand_move): Likewise.
+ 	* config/i386/i386-protos.h: Update for exports.
+ 	* config/i386/i386.h (EXTRA_CONSTRAINT): Update for renames.
+ 	(PREDICATE_CODES, SPECIAL_MODE_PREDICATES): Remove.
+ 	* config/i386/i386.md: Include predicates.md.
+ 	* config/i386/predicates.md: New file.
+ 
+ 2004-08-13  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	PR c++/16924
+ 	* config/i386/winnt.c (i386_pe_mark_dllexport): Set
+ 	SYMBOL_REF_DECL.
+ 	(i386_pe_mark_dllimport): Likewise.
+ 	(i386_pe_encode_section_info): Likewise, when overriding
+ 	dllimport attribute.
+ 
+ 2004-08-12  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* configure.ac: When testing for flex, nm, ar, and bison, check
+ 	that they will actually be built.
+ 	* configure: Regenerate.
+ 
+ 2004-08-12  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390.h (MAX_FIXED_MODE_SIZE): Define.
+ 	(MOVE_MAX_PIECES): Define.
+ 
+ 2004-08-12  Devang patel  <dpatel@apple.com>
+ 
+ 	* dbxout.c (dbxout_begin_prologue): New function.
+ 	(dbx_debug_hooks): Use new begin prologue hook.
+ 	(dbxout_function_end): Emit N_ENSYM.
+ 	* stab.def (N_BNSYM, N_ENSYM): Define and document these two new stabs.
+ 
+ 2004-08-12  Janis Johnson  <janis187@us.ibm.com>
+ 
+ 	* config/rs6000/altivec.h (vec_dst): Fix C++ functions whose first
+ 	argument is float*.
+ 
+ 	* config/rs6000/rs6000.c (altivec_init_builtins): Fix argument type
+ 	for vec_dss.
+ 
+ 	* doc/extend.texi (AltiVec builtins): Fix description for recent
+ 	changes.  Update operation list to match current support.
+ 
+ 2004-08-12  Andreas Krebbel  <krebbel1@de.ibm.com>
+ 
+ 	* config/s390/s390.c (struct s390_frame_layout): New struct as element
+ 	of struct machine_function.
+ 	(cfun->machine->frame_size): Moved into cfun->machine->frame_layout and
+ 	changed all uses.
+ 	(cfun->machine->save_fprs_p): Replaced by cfun_save_high_fprs and
+ 	changed all uses.
+ 	(cfun_frame_layout, cfun_save_high_fprs_p, cfun_gprs_save_area_size)
+ 	(cfun_set_fpr_bit, cfun_fpr_bit_p): New macros.
+ 	(s390_frame_area, s390_register_info): New functions.
+ 	(s390_optimize_prolog): Renamed to s390_optimize_prologue.  Added check
+ 	for base register.
+ 	(s390_return_addr_rtx, s390_return_address_offset)
+ 	(s390_va_start, s390_gimplify_va_arg)
+ 	(s390_emit_prologue, s390_emit_epilogue): Adjusted for new stack
+ 	layouts.
+ 	(s390_frame_info): Functionality partly moved to s390_register_info.
+ 	Made adaptions for new stack layout.
+ 	(save_gprs, restore_gprs): Changed meaning of second parameter and
+ 	adapted all callers.
+ 
+ 	* config/s390/s390.h (s390_backchain_string): New global variable.
+ 	(MASK_BACKCHAIN): Removed definition.
+ 	(TARGET_BACKCHAIN): Changed check.
+ 	(TARGET_KERNEL_BACKCHAIN): New macro.
+ 	(TARGET_SWITCHES): Removed entries of "backchain" and "no-backchain".
+ 	(TARGET_OPTIONS): Added "backchain", "no-backchain" and
+ 	"kernel-backchain".
+ 	(DYNAMIC_CHAIN_ADDRESS): Adjusted for new stack layouts.
+ 
+ 	* config/s390/s390.md ("allocate_stack"): Added TARGET_KERNEL_BACKCHAIN
+ 	as condition.  Adjusted for new stack layout.
+ 
+ 	* doc/invoke.texi: Added documentation for new option
+ 	"-mkernel-backchain" and adjusted documentation of "-mbackchain" and
+ 	"-mno-backchain".
+ 
+ 2004-08-12  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/lib1funcs.asm (ARM_FUNC_ALIAS): Also alias _L__name.
+ 	(aeabi_uidivmod, aeabi_idivmod): Provide thumb implementation.
+ 
+ 2004-08-12  David Daney  <ddaney@avtrex.com>
+ 
+ 	* java/gcj.texi:  Add subsection on signal usage.
+ 
+ 2004-08-12  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* expr.c (move_by_pieces): Set alignment for move to minimum of
+ 	MOVE_MAX_PIECES mode alignment and the largest non-slow mode
+ 	alignment, but not less than the original alignment.
+ 	(move_by_pieces_ninsns): Same.
+ 	(can_store_by_pieces): Similar for store with STORE_MAX_PIECES.
+ 	(store_by_pieces_1): Same.
+ 
+ 2004-08-12  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	PR tree-optimization/16867
+ 	* tree.c (is_global_var): New function.
+ 	(needs_to_live_in_memory): Check for TREE_ADDRESSABLE.
+ 	Call is_global_var.
+ 	* tree.h (DECL_NEEDS_TO_LIVE_IN_MEMORY_INTERNAL): Remove.
+ 	Update all users.
+ 	(is_global_var): Declare.
+ 	* tree-dfa.c (dump_variable): Display global and addressable
+ 	attributes.
+ 	(add_referenced_var): Clarify documentation when marking
+ 	variables call-clobbered.
+ 	* tree-flow-inline.h (is_call_clobbered): Call is_global_var
+ 	instead of needs_to_live_in_memory.
+ 	(mark_call_clobbered): If the variable is a tag, mark it
+ 	DECL_EXTERNAL.
+ 	* tree-gimple.c (is_gimple_reg): Don't check for
+ 	TREE_ADDRESSABLE.
+ 	(is_gimple_non_addressable): Likewise.
+ 	* tree-ssa-alias.c (get_nmt_for): Always check whether the tag
+ 	needs to be marked call-clobbered.
+ 	(setup_pointers_and_addressables): Call is_global_var instead
+ 	of needs_to_live_in_memory.
+ 	* tree-ssa-dce.c (need_to_preserve_store): Remove.
+ 	Update all users with is_global_var.
+ 	(mark_stmt_if_obviously_necessary): Fix processing of aliased
+ 	stores.  Don't check the virtual definitions.  Rather, check
+ 	whether the store is going into global memory.
+ 	(find_obviously_necessary_stmts): Get the symbol from the PHI
+ 	result.
+ 	* tree-ssa-operands.c (get_call_expr_operands): Do not add
+ 	clobbering may-defs if the call does not have side effects.
+ 
+ 2004-08-12  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/16276
+ 	* output.h (default_function_rodata_section,
+ 	default_no_function_rodata_section): New prototypes.
+ 	* target.h (struct gcc_target): Add asm_out.function_rodata_section.
+ 	* target-def.h (TARGET_ASM_FUNCTION_RODATA_SECTION): Define.
+ 	(TARGET_ASM_OUT): Add it.
+ 	* varasm.c (default_function_rodata_section,
+ 	default_no_function_rodata_section): New functions.
+ 	* final.c (final_scan_insn): Call
+ 	targetm.asm_out.function_rodata_section instead of
+ 	readonly_data_section.
+ 	* config/darwin.h (TARGET_ASM_FUNCTION_RODATA_SECTION): Define.
+ 	* config/mcore/mcore.c (TARGET_ASM_FUNCTION_RODATA_SECTION): Likewise.
+ 	* config/ip2k/ip2k.c (TARGET_ASM_FUNCTION_RODATA_SECTION): Likewise.
+ 	* config/rs6000/xcoff.h (TARGET_ASM_FUNCTION_RODATA_SECTION):
+ 	Likewise.
+ 	* config/alpha/alpha.c (TARGET_ASM_FUNCTION_RODATA_SECTION): Likewise.
+ 	* config/i386/cygming.h (TARGET_ASM_FUNCTION_RODATA_SECTION):
+ 	Likewise.
+ 	* config/i386/i386-interix.h (TARGET_ASM_FUNCTION_RODATA_SECTION):
+ 	Likewise.
+ 	* config/arm/pe.h (TARGET_ASM_FUNCTION_RODATA_SECTION): Likewise.
+ 	* config/avr/avr.c (TARGET_ASM_FUNCTION_RODATA_SECTION): Likewise.
+ 	* doc/tm.texi (TARGET_ASM_FUNCTION_RODATA_SECTION): Document.
+ 
+ 2004-08-12  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* dwarf2out.h (dwarf2out_frame_finish): Conditionalize outputting eh
+ 	frame info.
+ 	* doc/tm.texi: Document interaction between TARGET_UNWIND_INFO and
+ 	DWARF2_UNWIND_INFO.
+ 
+ 2004-08-12  Ben Elliston  <bje@au.ibm.com>
+ 
+ 	PR target/16286
+ 	* config/rs6000/altivec.h: Change vector to __vector throughout.
+ 	(Except for the `vector' macro itself).
+ 
+ 2004-08-12  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* genpreds.c: Add capability to generate predicate bodies as
+ 	well as function prototypes.  Write function prototypes for
+ 	the generic predicates too.
+ 	(process_define_predicate, write_tm_preds_h, write_insn_preds_c)
+ 	(write_predicate_subfunction, mark_mode_tests, add_mode_tests)
+ 	(write_match_code, write_predicate_expr, write_one_predicate_function)
+ 	(parse_option): New functions.
+ 	(output_predicate_decls): Delete.
+ 	(main): Read the machine description, process DEFINE_PREDICATE or
+ 	DEFINE_SPECIAL_PREDICATE patterns, write tm-preds.h or insn-preds.c
+ 	as appropriate.
+ 
+ 	* genrecog.c (struct decision_test): Replace index with
+ 	struct pred_data pointer.
+ 	(next_index): Remove, unused.
+ 	(pred_table, preds, special_mode_pred_table): Delete.
+ 	(compute_predicate_codes, process_define_predicate): New functions.
+ 	(validate_pattern, add_to_sequence, write_switch): Update for
+ 	new data structures.
+ 	(main): Handle DEFINE_PREDICATE and DEFINE_SPECIAL_PREDICATE.
+ 	Check both error_count and have_error.
+ 
+ 	* gensupport.c (in_fname, first_predicate): New globals.
+ 	(define_pred_queue, define_pred_tail): New RTL-pattern queue.
+ 	(predicate_table, last_predicate, old_pred_table)
+ 	(old_special_pred_table): New statics.
+ 	(hash_struct_pred_data, eq_struct_pred_data, lookup_predicate)
+ 	(add_predicate, init_predicate_table): New functions.
+ 	(process_rtx): Handle DEFINE_PREDICATE and DEFINE_SPECIAL_PREDICATE.
+ 	(init_md_reader_args_cb): Use the global in_fname.  No need to zero
+ 	it or max_include_len.  Call init_predicate_table.
+ 	(read_rtx): Run the predicate queue after the attribute queue
+ 	but before all the others.
+ 	* gensupport.h (in_fname, struct pred_data, first_predicate)
+ 	(lookup_predicate, add_predicate, FOR_ALL_PREDICATES): Declare.
+ 	* rtl.def (MATCH_CODE, MATCH_TEST, DEFINE_PREDICATE)
+ 	(DEFINE_SPECIAL_PREDICATE): New RTL codes.
+ 	* dummy-conditions.c: Don't include bconfig.h, system.h,
+ 	coretypes.h, tm.h, or system.h.  Do include stddef.h.
+ 	Duplicate declaration of struct c_test from gensupport.h.
+ 
+ 	* Makefile.in (OBJS-common): Add insn-preds.o.
+ 	(STAGESTUFF, .PRECIOUS): Add insn-preds.c.
+ 	(insn-preds.c, insn-preds.o): New rules.
+ 	(s-preds): Also generate insn-preds.c.
+ 	(dummy-conditions.o, genpreds$(build_exeext), genpreds.o):
+ 	Update dependencies.
+ 	(print-rtl.o, print-rtl1.o): Correct dependencies.
+ 
+ 	* recog.h: Delete prototypes of predicate functions.
+ 
+ 	* doc/md.texi (Predicates): New section with complete
+ 	documentation of operand/operator predicates.  Remove some
+ 	incomplete documentation of predicates from other places.
+ 	* doc/tm.texi (Misc): Move SPECIAL_MODE_PREDICATES next to
+ 	PREDICATE_CODES; indicate that both are deprecated in favor
+ 	of define_predicate/define_special_predicate.
+ 
+ 	* config/ia64/ia64.c: All predicate function definitions moved
+ 	to ia64.md, except
+ 	(small_addr_symbolic_operand, tls_symbolic_operand): Delete.
+ 	(ia64_expand_load_address, ia64_expand_move):
+ 	Check SYMBOL_REF_TLS_MODEL directly, don't use tls_symbolic_operand.
+ 
+ 	* config/ia64/ia64.md: All predicates now defined here.
+ 	(symbolic_operand): Is now a special predicate.
+ 
+ 	* config/ia64/ia64.h: Declare ia64_section_threshold.
+ 	(PREDICATE_CODES): Delete.
+ 
+ 2004-08-12  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-common.h (STATEMENT_LIST_HAS_LABEL): New.
+ 	* c-semantics.c (add_stmt): Set it.
+ 	* c-decl.c (finish_decl): Use it to create a new BIND_EXPR
+ 	before instantiating a variable sized type.
+ 
+ 2004-08-12  Richard Henderson  <rth@redhat.com>
+ 
+ 	* stor-layout.c (round_up, round_down): Move ...
+ 	* fold-const.c (round_up, round_down): ... here.  Use
+ 	multiple_of_p to avoid any arithmetic at all.
+ 
+ 2004-08-12  Richard Henderson  <rth@redhat.com>
+ 
+ 	* gimplify.c (struct gimplify_init_ctor_preeval_data): New.
+ 	(gimplify_init_ctor_preeval_1): New.
+ 	(gimplify_init_ctor_preeval): New.
+ 	(gimplify_init_ctor_eval): New.
+ 	(gimplify_init_constructor): Use them.  Always gimplify the LHS
+ 	object first.
+ 
+ 2004-08-12  Ziemowit Laski  <zlaski@apple.com>
+ 
+ 	(This patch is part of merge of objc-improvements-branch
+ 	into mainline.)
+ 
+ 	* doc/frontends.texi: Mention Objective-C++ in addition to
+ 	Objective-C.
+ 	* doc/install.texi: Add 'obj-c++' to list of configurable
+ 	languages.
+ 	* doc/invoke.texi: Rename Objective-C option headings to
+ 	indicate they also apply to Objective-C++.  List file
+ 	extensions for Objective-C++ sources.  Mention that
+ 	ObjC and ObjC++ compilations may also use C and C++ options,
+ 	respectively.  Point users to doc/standards.texi for
+ 	further info on ObjC and ObjC++.
+ 	* doc/sourcebuild.texi: Mention the objcp/ directory and
+ 	the Objective-C++ sources it contains.
+ 	* doc/standards.texi: Update link to Apple ObjC site;
+ 	add link to gcc readings.html WWW doc.
+ 
+ 2004-08-12  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* config/rs6000/rs6000.c (function_arg_padding): Revert 2004-07-28
+ 	and 2004-07-14 changes.
+ 
+ 2004-08-12  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* doc/invoke.texi: Fix typo.
+ 
+ 2004-08-11 Devang Patel  <dpatel@apple.com>
+ 
+ 	* config/darwin.h (TARGET_OPTION_TRANSLATE_TABLE): Add -dead_strip
+ 	and -no_dead_strip_inits_and_terms.
+ 	(LINK_SPEC): Same.
+ 	* doc/invoke.texi (Darwin Options): Document -dead_strip and
+ 	-no_dead_strip_inits_and_terms.
+ 
+ 2004-08-11  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/arm-protos.h (arm_finalize_pic) Rename ...
+ 	(arm_load_pic_register): ... to this.
+ 	* config/arm/arm.c (arm_finalize_pic): Rename ...
+ 	(arm_load_pic_register): ... to this.  Always output insns at the
+ 	current location.  Load via low reg in thumb mode.
+ 	(arm_expand_prologue): Call arm_load_pic_register.
+ 	(thumb_expand_prologue): Ditto.
+ 	* config/arm/arm.h (FINALIZE_PIC): Remove.
+ 	* config/arm/arm.md (builtin_setjmp_receiver): Call
+ 	arm_load_pic_register.
+ 
+ 2004-08-11  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* arm.c (thumb_force_lr_save): Add prototype.
+ 	(thumb_compute_save_reg_mask): New function.
+ 	(thumb_find_work_register): New function.
+ 	(arm_get_frame_offsets): Use thumb_compute_save_reg_mask.
+ 	(thumb_unexpanded_epilogue): Ditto.  Remove redundant code.
+ 	Don't clobber r3 when removing pretend args.
+ 	(thumb_expand_prologue): Use thumb_compute_save_reg_mask.
+ 	(thumb_output_function_prologue): Use new functions.
+ 	(thumb_set_return_address): Use thumb_compute_save_reg_mask.
+ 	* arm.h (THUMB_REG_PUSHED_P): Remove.
+ 
+ 2004-08-11  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	PR rtl-optimization/16490
+ 	* cfgrtl.c (cfg_layout_split_edge): Set global_live_at_start and
+ 	global_live_at_end for new basic block if already set for other blocks.
+ 
+ 2004-08-11 David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* config/rs6000/rs6000.h (MAX_FIXED_MODE_SIZE): Define.
+ 
+ 	* config/rs6000/rs6000.md (mfcr rlwinm patterns): Set length to 8.
+ 	(mfcr rlwinm rlwinm patterns): Set length to 12.
+ 
+ 2004-08-11  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-flow-inline.h (get_def_ops, get_use_ops, get_v_may_def_ops,
+ 	get_vuse_ops,get_v_must_def_ops): Add operand structure reference.
+ 	(get_v_may_def_result_ptr, get_v_may_def_op_ptr): New access struct.
+ 	(start_ssa_stmt_operands): Delete.
+ 	* tree-flow.h (struct stmt_ann_d): Replace operand vectors with new
+ 	struct stmt_operands_d.
+ 	(build_ssa_operands): New extern entry point.
+ 	* tree-ssa-dom.c (record_equivalences_from_stmt): Remove operand
+ 	building code, replace with create_ssa_artficial_load_stmt().
+ 	* tree-ssa-operands.c (struct voperands_d): Delete.
+ 	(allocate_v_may_def_optype): Allocate v_may_def_operand_type_t vector.
+ 	(allocate_v_must_def_optype): Use sizeof (tree), not sizeof (tree *).
+ 	(free_uses, free_defs, free_vuses, free_v_may_defs,
+ 	free_v_must_defs): Remove dealloc parameter.
+ 	(remove_vuses, remove_v_may_def, remove_v_must_defs): Delete.
+ 	(finalize_ssa_defs, finalize_ssa_uses, finalize_ssa_v_may_defs,
+ 	finalize_ssa_vuses, finalize_ssa_v_must_defs): Perform all operand
+ 	vector comparisons, ssa_name reuse, and allocations here.
+ 	(verify_start_operands): Delete.
+ 	(finalize_ssa_stmt_operands): Set new operands by calling finalize
+ 	routines.
+ 	(start_ssa_stmt_operands): Move from tree-flow-inline.h.
+ 	(append_def, append_usei): Simplify to simple accumulation.
+ 	(append_v_may_def, append_vuse, append_v_must_def): Simplify to avoiding
+ 	duplicates and simple accumulation.
+ 	(free_ssa_operands): Free vectors in a stmt_operand structure.
+ 	(build_ssa_operands): New. Create a new stmt_operand structure from
+ 	a stmt and an old set of stmt_operands.
+ 	(get_stmt_operands): Simplify and call build_ssa_operands.
+ 	(get_expr_operands, get_asm_expr_operands, get_indirect_ref_operands,
+ 	get_call_expr_operands, add_stmt_operand, add_call_clobber_ops,
+ 	add_call_read_ops): Don't pass prev_vops around anymore.
+ 	(note_addressable): Return if no stmt annotation.
+ 	(copy_virtual_operands): Access v_may_def operands through a struct.
+ 	(create_ssa_artficial_load_stmt): New.  Create a load stmt for DOM's
+ 	hash tables without treating the stmt as a real stmt.
+ 	* tree-ssa-operands.h (struct v_may_def_operand_type): New.  Access
+ 	v_may_def def and use through a struct instead of 2 array elements.
+ 	(struct v_may_def_optype_d): Use v_may_def_operand_type.
+ 	(struct stmt_operands_d): New.  Struct for storing all operand vectors.
+ 
+ 2004-08-11  Nick Clifton  <nickc@redhat.com>
+ 
+ 	* config/arm/arm.c (arm_is_longcall_p): Update comment describing
+ 	this funciton's behaviour.  Return true when the current function
+ 	has a section attribute and -mlong-calls is in effect.
+ 	* config/arm/arm.h (ARM_DECLARE_FUNCTION_SIZE): Do not set the
+ 	short-call marker when -mlong-calls is in effect and the function
+ 	has a section attribute.
+ 
+ 2004-08-10  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* stmt.c (expand_return): If asked to return the RESULT_DECL,
+ 	just call expand_value_return on result_rtl.
+ 
+ 2004-08-10  Richard Henderson  <rth@redhat.com>
+ 
+ 	* builtins.def (BUILT_IN_STACK_ALLOC): Remove.
+ 	* builtins.c (expand_builtin) <BUILT_IN_STACK_ALLOC>: Remove.
+ 	* dwarf2out.c (loc_descriptor): Handle PARALLEL here ...
+ 	(add_location_or_const_value_attribute): ... not here.  Use
+ 	loc_descriptor_from_tree if possible.
+ 	(loc_descriptor_from_tree_1): Rename from loc_descriptor_from_tree.
+ 	Simplify address handling.  Handle DECL_VALUE_EXPR.  Handle register
+ 	values specially.
+ 	(loc_descriptor_from_tree): New.  Update callers.
+ 	* expr.c (expand_var): Ignore DECL_VALUE_EXPR variables.
+ 	* gimplify.c (gimplify_decl_expr): Lower variable sized types to
+ 	pointer plus dereference.  Set DECL_VALUE_EXPR.  Set save_stack.
+ 	(gimplify_call_expr): Do not recognize BUILT_IN_STACK_ALLOC
+ 	and BUILT_IN_STACK_RESTORE.
+ 	(gimplify_expr): Lower DECL_VALUE_EXPR decls.
+ 	* stmt.c (expand_stack_alloc): Remove.
+ 	* tree-mudflap.c (mx_register_decls): Don't look for
+ 	BUILT_IN_STACK_ALLOC.
+ 	* tree-nested.c (convert_local_reference): Likewise.
+ 	* tree.h (DECL_VALUE_EXPR): New.
+ 
+ 2004-08-10  Richard Henderson  <rth@redhat.com>
+ 
+ 	* stor-layout.c (round_up): Check for 0/1 before dividing.
+ 	(round_down): Likewise.
+ 
+ 	* tree-tailcall.c (suitable_for_tail_opt_p): Also check DECL_EXTERNAL.
+ 
+ 2004-08-09  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* config.gcc (arm*-*-eabi*): New target.
+ 	* defaults.h (TARGET_LIBGCC_FUNCS): New macro.
+ 	(TARGET_LIB_INT_CMP_BIASED): Likewise.
+ 	* expmed.c (expand_divmod): Try a two-valued divmod function as a
+ 	last resort.
+ 	* gthr.h: Remove bogus tokens at end of #pragma.
+ 	* optabs.c (expand_twoval_binop_libfunc): New function.
+ 	(prepare_cmp_insn): Handle the !TARGET_LIB_INT_CMP_BIASED case.
+ 	(prepare_float_lib_cmp): Try reversing the condition.
+ 	(debug_optab_libfuncs): New function.
+ 	* optabs.h (expand_twoval_binop_libfunc): Declare.
+ 	* config/arm/arm.c (arm_init_libfuncs): New function.
+ 	(arm_compute_initial_eliminatino_offset): Return HOST_WIDE_INT.
+ 	(TARGET_INIT_LIBFUNCS): Define it.
+ 	* config/arm/arm.h (TARGET_BPABI): New macro.
+ 	* config/arm/arm-protos.h
+ 	(arm_compute_initial_elimination_offset): Return HOST_WIDE_INT.
+ 	* config/arm/bpabi.S: New file.
+ 	* config/arm/bpabi.c: Likewise.
+ 	* config/arm/bpabi.h: Likewise.
+ 	* config/arm/ieee754-df.S (__aeabi_dneg): New function or alias.
+ 	(__aeabi_drsub): Likewise.
+ 	(__aeabi_dsub): Likewise.
+ 	(__aeabi_dadd): Likewise.
+ 	(__aeabi_ui2d): Likewise.
+ 	(__aeabi_i2d): Likewise.
+ 	(__aeabi_f2d): Likewise.
+ 	(__aeabi_dmul): Likewise.
+ 	(__aeabi_ddiv): Likewise.
+ 	(__aeabi_cdrcmple): Likewise.
+ 	(__aeabi_cdcmpeq): Likewise.
+ 	(__aeabi_cdcmple): Likewise.
+ 	(__aeabi_dcmpeq): Likewise.
+ 	(__aeabi_dcmplt): Likewise.
+ 	(__aeabi_dcmple): Likewise.
+ 	(__aeabi_dcmpge): Likewise.
+ 	(__aeabi_dcmpgt): Likewise.
+ 	(__aeabi_dcmpun): Likewise.
+ 	(__aeabi_d2iz): Likewise.
+ 	(__aeabi_d2uiz): Likewise.
+ 	(__aeabi_d2f): Likewise.
+ 	* config/arm/ieee754-sf.S (__aeabi_fneg): New function or alias.
+ 	(__aeabi_frsub): Likewise.
+ 	(__aeabi_fsub): Likewise.
+ 	(__aeabi_fadd): Likewise.
+ 	(__aeabi_ui2f): Likewise.
+ 	(__aeabi_i2f): Likewise.
+ 	(__aeabi_fmul): Likewise.
+ 	(__aeabi_fdiv): Likewise.
+ 	(__aeabi_cfrcmple): Likewise.
+ 	(__aeabi_cfcmpeq): Likewise.
+ 	(__aeabi_cfcmple): Likewise.
+ 	(__aeabi_fcmpeq): Likewise.
+ 	(__aeabi_fcmplt): Likewise.
+ 	(__aeabi_fcmple): Likewise.
+ 	(__aeabi_fcmpge): Likewise.
+ 	(__aeabi_fcmpgt): Likewise.
+ 	(__aeabi_fcmpun): Likewise.
+ 	(__aeabi_f2iz): Likewise.
+ 	(__aeabi_f2uiz): Likewise.
+ 	* config/arm/lib1funcs.asm (ARM_CALL): New macro.
+ 	(__aeabi_uidivmod): New function or alias.
+ 	(__aeabi_idivmod): Likewise.
+ 	(__aeabi_idiv0): Likewise.
+ 	(__aeabi_ldiv0): Likewise.
+ 	(__aeabi_llsr): Likewise.
+ 	(__aeabi_lasr): Likewise.
+ 	(__aeabi_llsl): Likewise.
+ 	(bpabi.S): Include it.
+ 	* config/arm/libgcc-bpabi.ver: New file.
+ 	* config/arm/symbian.h (ARM_DEFAULT_ABI): Remove.
+ 	(LINK_SPEC): Remove.
+ 	* config/arm/t-arm-elf (LIB1ASMFUNCS): Add __aeabi_lcmp and
+ 	__aeabi_ulcmp.
+ 	* config/arm/t-bpabi: New file.
+ 	* doc/tm.texi (TARGET_LIBGCC_FUNCS): New entry.
+ 	(TARGET_LIB_INT_CMP_BIASED): Likewise.
+ 
+ 2004-08-10  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* config/rs6000/rs6000-protos.h (expand_block_clear): Declare.
+ 	* config/rs6000/rs6000.md (clrmemsi): New pattern.
+ 	* config/rs6000/rs6000.c (expand_block_clear): New function.
+ 	(expand_block_move): Convert alignment to bits.  Use SImode and
+ 	HImode for unaligned addresses if not STRICT_ALIGNMENT.
+ 
+ 2004-08-10  Caroline Tice  <ctice@apple.com>
+ 
+ 	* varasm.c (unlikely_section_label): New global variable.
+ 	(unlikely_text_section_name): New global variable.
+ 	(text_section):  Remove alignment statement.
+ 	(unlikely_text_section): Remove alignment statement; use
+ 	unlikely_section_label rather than hard-coded string.
+ 	(assemble_start_function): Initialize unlikely_section_label and
+ 	unlikely_text_section_name;  make sure cold section is properly
+ 	aligned at start of function; output unlikely_section_label if
+ 	appropriate.
+ 
+ 2004-08-10  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390-protos.h (s390_canonicalize_comparison): Declare.
+ 	* config/s390/s390.c (s390_canonicalize_comparison): New function.
+ 	* config/s390/s390.h (CANONICALIZE_COMPARISON): Define.
+ 	* config/s390/s390.md ("*tmdi_ext", "*tmsi_ext", "*tmqisi_ext",
+ 	"*tmqidi_ext", "*tmdi_mem", "*tmsi_mem", "*tmhi_mem"): Remove.
+ 	("*tmqi_mem"): Remove SUBREG from pattern.
+ 	("*anddi3_cconly"): Prevent accidentally matching TM pattern.
+ 	("*andsi3_cconly"): Likewise.
+ 
+ 2004-08-10  H.J. Lu  <hongjiu.lu@intel.com>
+ 
+ 	PR target/16909
+ 	* config/i386/i386.md (*strsetdi_rex_1): Use DI instead of SI.
+ 
+ 2004-08-10  Janis Johnson  <janis187@us.ibm.com>
+ 
+ 	* doc/sourcebuild.texi (compat testing): Document available test
+ 	framework commands.  Use the preferred spelling of DejaGnu.
+ 
+ 2004-08-10  Daniel Berlin <dberlin@dberlin.org>
+ 
+ 	* lambda.h: Add matrix type, and prototypes for remainder of
+ 	matrix and vector functions.
+ 	(lambda_vector_mult_const): New function.
+ 	(lambda_vector_negate): Ditto.
+ 	(lambda_vector_add): Ditto.
+ 	(lambda_vector_add_mc): Ditto.
+ 	(lambda_vector_copy): Ditto.
+ 	(lambda_vector_zerop): Ditto.
+ 	(lambda_vector_equal): Ditto.
+ 	(lambda_vector_min_nz): Ditto.
+ 	(lambda_vector_first_nz): Ditto.
+ 	(lambda_vector_matrix_mult): Ditto.
+ 	* lambda-mat.c: New file.
+ 	* Makefile.in (lambda-mat.o): New.
+ 
+ 2004-08-10  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-cfg.c (bsi_insert_before, bsi_insert_after): Call modify_stmt
+ 	after linking stmt into the program.
+ 	(bsi_remove): Don't call modify_stmt.
+ 	* tree-complex.c (update_complex_assignment,
+ 	expand_complex_comparison): Call modify_stmt after changing the stmt.
+ 	* tree-outof-ssa.c (rewrite_trees): Call modify_stmt only if not
+ 	removing the stmt.
+ 	* tree-ssa-ccp.c (substitute_and_fold): Call modify_stmt after changing
+ 	the stmt, and only if needed.
+ 	* tree-ssa-dom.c (thread_across_edge): Pass no annotation for a dummy
+ 	expression.
+ 	(simplify_rhs_and_lookup_avail_expr): Don't take an annotation param.
+ 	(simplify_cond_and_lookup_avail_expr): Use modify_stmt.
+ 	(simplify_switch_and_lookup_avail_expr): Don't take an annotation param.
+ 	(eliminate_redundant_computations): Don't pass an annotation. Call
+ 	modify_stmt rather than setting the annotation directly.
+ 	(record_equivalences_from_stmt): Remove unused local 'j'.
+ 	(cprop_operand): Take a stmt rather than an annotation as a parameter.
+ 	Call modify_stmt.
+ 	(cprop_into_stmt): Pass stmt rather than annotation.
+ 	(update_rhs_and_lookup_avail_expr): Call modify_stmt.
+ 	* tree-ssa-loop-im.c (schedule_sm): Call get_stmt_ann rather than
+ 	modify_stmt.
+ 	* tree-ssa.c (propagate_into_addr): Dont call modify_stmt.
+ 
+ 2004-08-10  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR middle-end/16948
+ 	* function.c (expand_function_start): Handle DECL_BY_REFERENCE on
+ 	the RESULT_DECL.
+ 
+ 2004-08-10  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* tree-vn.c (val_expr_pair_expr_eq): Compare vuses, to match the
+ 	hash function.
+ 
+ 2004-08-10  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* config/mips/mips.md: New reciprocal square root patterns that
+ 	match sqrt(1.0/x) in addition to the existing 1.0/sqrt(x) insns.
+ 
+ 2004-08-10  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/arm-protos.h (arm_set_return_address,
+ 	thumb_set_return_address): Add prototypes.
+ 	* config/arm/arm.h (ARM_FT_EXCEPTION_HANDLER): Remove.
+ 	* config/arm/arm.c (arm_compute_func_type,
+ 	use_return_insn, arm_compute_save_reg0_reg12_mask,
+ 	arm_compute_save_reg_mask, arm_output_function_prologue,
+ 	arm_output_epilogue): Replace ARM_FT_EXCEPTION_HANDLER with
+ 	current_function_calls_eh_return.
+ 	(thumb_exit, thumb_pushpop, thumb_unexpanded_epilogue): Replace
+ 	old eh code.
+ 	(arm_set_return_address, thumb_set_return_address): New functions.
+ 	* config/arm/arm.h (MUST_USE_SJLJ_EXCEPTIONS, DWARF2_UNWIND_INFO,
+ 	ARM_EH_STACKADJ_REGNUM, EH_RETURN_STACKADJ_RTX): Define.
+ 	* config/arm/arm.md (VUNSPEC_EH_RETURN): Add.
+ 	(epilogue): Use the stackadj register.
+ 	(eh_return, arm_eh_return, thumb_eh_return): New pattern.
+ 
+ 2004-08-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/3144
+ 	* expr.c (move_by_pieces_ninsns): Add max_size argument.
+ 	(MOVE_BY_PIECES_P): Pass MOVE_MAX_PIECES + 1 to it.
+ 	(CLEAR_BY_PIECES_P): Pass STORE_MAX_PIECES + 1 to it.
+ 	(STORE_BY_PIECES_P): Define similarly to CLEAR_BY_PIECES_P,
+ 	but using MOVE_RATIO.
+ 	(move_by_pieces): Pass max_size to move_by_pieces_ninsns.
+ 	(can_store_by_pieces): Change max_size type to unsigned int.
+ 	(store_by_pieces_1): Likewise.  Pass max_size to
+ 	move_by_pieces_ninsns.
+ 	* config/s390/s390.h (STORE_BY_PIECES_P): Define.
+ 	* config/sh/sh.c (MOVE_BY_PIECES_P): Pass MOVE_MAX_PIECES + 1
+ 	to move_by_pieces_ninsns.
+ 	(STORE_BY_PIECES_P): Define.
+ 	* config/ns32k/ns32k.h (STORE_BY_PIECES_P): Pass STORE_MAX_PIECES + 1
+ 	to move_by_pieces_ninsns.
+ 	* doc/tm.texi (STORE_BY_PIECES_P): Document changed default.
+ 
+ 	* config/i386/i386.h (CLEAR_RATIO): Define.
+ 
+ 2004-08-09  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* expr.c (expand_expr_real_1): Add back code that was not dead.
+ 
+ 2004-08-09  Andrew Pinski  <apinski@apple.com>
+ 
+ 	* c-common.c (c_common_get_alias_set): Set the aliasing set of the type
+ 	which is found to be compatible before returning the aliasing set.
+ 
+ 2004-08-09  Daniel Jacobowitz  <dan@debian.org>
+ 
+ 	* ggc-zone.c (struct alloc_zone): Add statistics counters.
+ 	(always_collect): New flag.
+ 	(ggc_alloc_zone_1): Update statistics support.  Don't include
+ 	overhead in allocated counter.
+ 	(sweep_pages): Update allocated counter for large pages.  Don'y
+ 	include overhead.
+ 	(ggc_collect_1): Always collect.
+ 	(ggc_collect): Honor always_collect flag.  Sum all zones to decide
+ 	whether to collect.
+ 	(SCALE, LABEL): New macros.
+ 	(ggc_print_statistics): Add statistics support.
+ 
+ 2004-08-09  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* expmed.c (sdiv_pow2_cheap, smod_pow2_cheap): Change type to bool.
+ 	(init_expmed): Fix potential overrun problem with "all.reg".
+ 	(expand_sdiv2_pow2): Add an alternate implementation for signed
+ 	division, if the target provides a suitable conditional move insn.
+ 
+ 2004-08-09  Paul Brook  <paul@codesourcery.com>
+ 	Richard Henderson  <rth@redhat.com>
+ 
+ 	* unwind-dw2.c (uw_install_context_1): Update target saved stack
+ 	pointer.
+ 
+ 2004-08-09  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* ggc-common.c (ggc_rlimit_bound): Don't check RSS limit.
+ 	Check DATA limit only if there's no AS limit.  Ignore insanely
+ 	low DATA limits.
+ 	(ggc_min_heapsize_heuristic): Don't divide AS or RSS limits by 8,
+ 	but take care that the AS limit isn't overrun.
+ 	* doc/invoke.texi: Update documentation of min-heapsize parameter.
+ 
+ 2004-08-09  Jeff Law  <law@redhat.com>
+ 
+ 	* Makefile.in (OBJC-common): Add tree-ssa-threadupdate.c
+ 	(tree-ssa-threadupdate.o): Add dependencies.
+ 	* tree-ssa-threadupdate.c: New file.
+ 	* tree-flow.h (incoming_edge_threaded): New flag in block annotation.
+ 	(rewrite_vars_out_of_ssa): Remove prototype.
+ 	(cleanup_tree_cfg): Returns a bool.
+ 	* tree.h (thread_through_all_blocks): Prototype.
+ 	* tree-outof-ssa.c  (SSANORM_*): Move into here.
+ 	(remove_ssa_form): Now static.
+ 	(rewrite_vars_out_of_ssa): Kill.
+ 	* tree-ssa-live.c (register_ssa_partitions_for_vars): Kill.
+ 	* tree-ssa-live.h (SSANORM_*): Moved into tree-outof-ssa.c.
+ 	(remove_ssa_form, register_partitions_for_vars): Kill declarations.
+ 	* tree-cfg.c (cleanup_tree_cfg): Return a value indicating if
+ 	anything was changed.
+ 	* tree-phinodes.c (add_phi_arg): Get the block for the PHI
+ 	from the PHI's annotation rather than the edge associated with
+ 	the new argument.
+ 	* tree-ssa-dom.c (redirection_edges): Kill.
+ 	(redirect_edges_and_update_ssa_graph): Kill.
+ 	(tree_ssa_dominator_optimize): Do not reset forwardable flag
+ 	for blocks anymore.  Do not initialize redirection_edges.
+ 	Call thread_through_all_blocks.  Simplify code for cleanup
+ 	of the CFG and iterating.  No longer call cleanup_tree_cfg
+ 	outside the iteration loop.
+ 	(thread_across_edge): No longer mess with forwardable blocks.
+ 
+ 2004-08-09  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* explow.c (memory_address): Use memory_address_p.
+ 	* recog.c (general_operand): Likewise.
+ 	* regrename.c: No need to define REG_OK_STRICT.
+ 
+ 2004-08-09  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* timevar.def (TV_CPROP1, TV_CPROP2, TV_PRE, TV_HOIST, TV_LSM):
+ 	New timers.
+ 	* gcse.c: Include timevar.h.
+ 	(const_prop_count, copy_prop_count): Rename to global_const_prop_count
+ 	and global_copy_prop_count.
+ 	(local_const_prop_count, local_copy_prop_count): New static globals.
+ 	(gcse_main): Set the right timevar for each pass.
+ 	(cprop_jump): Increment global_const_prop_count when a constant is
+ 	propagated.  Add "GLOBAL" to dump output.
+ 	(cprop_insn): Increment global_const_prop_count when a constant is
+ 	propagated, or global_copy_prop_count when a copy is propagated.
+ 	(do_local_cprop): Likewise for local_const_prop_count and
+ 	local_copy_prop_count.
+ 	(one_cprop_pass): Initialize const/cprop counters to zero.
+ 	Print out results of local and global const/cprop separately.
+ 	(bypass_block): Break over-length line.
+ 	* Makefile.in (gcse.o): Add TIMEVAR_H dependency.  Fix dependencies
+ 	for bb-reorder.o and tracer.o.
+ 
+ 2004-08-09  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* Makefile.in (GTFILES): Remove stmt.c
+ 	(stmt.o): Do not depend on gt-stmt.h.
+ 	* emit-rtl.c (emit_line_note): Do not call
+ 	set_file_and_line_for_stmt.
+ 	* expr.c (expand_expr_real_1) <SWITCH_EXPR>: Let expand_case
+ 	do everything.
+ 	* function.c (free_after_parsing): Do not free STMT field.
+ 	(allocate_struct_function): Do not call init_stmt_for_function.
+ 	(assign_stack_temp_for_type): Do not accept values of keep
+ 	other than 0 or 1.
+ 	(init_temp_slots): Do not initialize removed variables.
+ 	* function.h (struct function): Remove STMT, X_TARGET_TEMP_SLOT_LEVEL
+ 	and X_VAR_TEMP_SLOT_LEVEL fields.
+ 	* rtl.h (set_file_and_line_for_stmt): Remove.
+ 	* stmt.c (struct nesting, ALLOC_NESTING, POPSTACK,
+ 	struct stmt_status, cond_stack, case_stack, nesting_stack,
+ 	nesting_depth, emit_locus, set_file_and_line_for_stmt,
+ 	same_case_target_p, init_stmt_for_function, emit_nop,
+ 	expand_start_cond, expand_start_elseif, expand_start_else,
+ 	expand_elseif, expand_end_cond): Remove.
+ 	(preserve_subexpressions_p): Remove references to CFUN->STMT.
+ 	(expand_start_case, expand_end_case_type): Remove, merge into...
+ 	(expand_case): ... this one, including other bits from
+ 	expand_expr_real_1.  Inline same_case_target_p.  Turn members
+ 	of CASE_STACK into local variables.
+ 	(emit_case_bit_tests): Inline same_case_target_p.
+ 	(add_case_node): Add HEAD argument, return new head of the list,
+ 	do not handle default label here.
+ 	* tree.h (expand_start_cond, expand_end_cond, expand_start_else,
+ 	expand_start_elseif, current_nesting_level, expand_start_case,
+ 	expand_end_case_type, expand_end_case, add_case_node,
+ 	init_stmt_for_function, expand_elseif): Remove prototypes.
+ 	(expand_case): Add prototype.
+ 
+ 2004-08-09  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* expr.c (expand_expr_real_1): Use optab_for_tree_code.
+ 
+ 2004-08-09  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* expr.c (var_rtx): Remove.
+ 	(expand_expr_real_1) <LOOP_EXPR, EXIT_EXPR,
+ 	LABELED_BLOCK_EXPR, EXIT_BLOCK_EXPR, TRUTH_ANDIF_EXPR,
+ 	TRUTH_ORIF_EXPR, COMPOUND_EXPR, CONJ_EXPR, INIT_EXPR>:
+ 	Abort.
+ 	(expand_expr_real_1) <COND_EXPR>: Remove most special cases.
+ 	* optabs.c (emit_clr_insn, emit_0_to_1_insn): Remove.
+ 	* optabs.h (emit_clr_insn, emit_0_to_1_insn): Remove.
+ 
+ 2004-08-08  Mostafa Hagog  <mustafa@il.ibm.com>
+ 	Ayal Zaks <zaks@il.ibm.com>
+ 
+ 	* common.opt (freschedule-modulo-scheduled-loops): New flag.
+ 	* final.c (final_scan_insn): Handle NOTE_DISABLE_SCHED_OF_BLOCK.
+ 	* modulo-sched.c (sms_schedule): Emit a note to disable scheduling
+ 	when -freschedule-modulo-scheduled-loops flag is not specified.
+ 	(sms_schedule_by_order, ps_insn_advance_column, add_node_to_ps,
+ 	add_node_to_ps, ps_has_conflicts, ps_add_node_check_conflicts):
+ 	More accurate placing of insn in row of partial schedule.
+ 	(ps_insn_find_column): New function.
+ 	* rtl.h (NOTE_DISABLE_SCHED_OF_BLOCK): New note.
+ 	* sched-rgn.c (sched_is_disabled_for_current_region_p): New.
+ 	(schedule_region): Use sched_is_disabled_for_current_region_p.
+ 	* docs/invoke.texi: Document -freschedule-modulo-scheduled-loops.
+ 
+ 2004-08-07  H.J. Lu  <hongjiu.lu@intel.com>
+ 
+ 	* config/i386/i386.c (ix86_expand_clrmem): Revert the last
+ 	change.
+ 
+ 2004-08-07  H.J. Lu  <hongjiu.lu@intel.com>
+ 
+ 	* config/i386/i386.c (ix86_expand_clrmem): Properly call
+ 	gen_strset for 64bit target.
+ 
+ 2004-08-07  Olivier Hainque  <hainque@act-europe.fr>
+ 
+ 	* config/vxworks.h (HANDLE_SYSV_PRAGMA): Remove definition.
+ 
+ 2004-08-07  Jason Merrill  <jason@redhat.com>
+ 
+ 	Make return in memory explicit.
+ 	* function.c (aggregate_value_p): Check DECL_BY_REFERENCE.
+ 	(assign_parm_find_data_types): Remove code for old front end
+ 	invisible reference handling.
+ 	(assign_parms): Handle DECL_BY_REFERENCE on the RESULT_DECL.
+ 	(expand_function_end): Likewise.
+ 	* gimplify.c (gimplify_return_expr): Handle a dereferenced
+ 	RESULT_DECL.
+ 	* tree-inline.c (copy_body_r): Don't bother looking for &* anymore.
+ 	(declare_return_variable): Handle DECL_BY_REFERENCE.
+ 	* cp/cp-gimplify.c (is_invisiref_parm): Also handle RESULT_DECL.
+ 	(cp_genericize_r): Use convert_from_reference.
+ 	Don't dereference a RESULT_DECL directly inside a RETURN_EXPR.
+ 	(cp_genericize): Handle the RESULT_DECL.  Unset TREE_ADDRESSABLE.
+ 
+ 	* c-common.c (c_warn_unused_result): Check TREE_USED before
+ 	warning about a CALL_EXPR with an unused value.
+ 
+ 2004-08-06  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* config/arm/symbian.h (CC1_SPEC): Avoid passing duplicate options
+ 	to the compiler.  Use -fshort-wchar by default.
+ 
+ 2004-08-06  Pat Haugen  <pthaugen@us.ibm.com>
+ 
+ 	* params.def (PARAM_MIN_CROSSJUMP_INSNS): New.
+ 	* cfgcleanup.c (try_crossjump_to_edge): Add minimum insn match
+ 	threshhold.
+ 	* doc/invoke.texi (param): Document min-crossjump-insns.
+ 
+ 2004-08-06  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	PR c/13282
+ 	* c.opt (Wmissing-field-initializers): New option.
+ 	* c-opts.c (c_common_post_options): Make -Wextra turn it on by default.
+ 	* c-typeck.c (pop_init_level): Guard the missing field warning with
+ 	warn_missing_field_initializers rather than extra_warnings.
+ 	* doc/invoke.texi (-Wmissing-field-initializers): Document, moving
+ 	some of the explanation from...
+ 	(-Wextra): ...here.  Say that the missing field warning can be
+ 	seperately controlled by -Wmissing-field-initializers.
+ 
+ 2004-08-06  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* expr.c (expand_expr_real_1) <ENTRY_VALUE_EXPR>: Remove.
+ 	* tree-inline.c (estimate_num_insns_1) <ENTRY_VALUE_EXPR>: Remove.
+ 	* tree-pretty-print.c (dump_generic_node) <ENTRY_VALUE_EXPR>: Remove.
+ 	* tree.def (ENTRY_VALUE_EXPR): Remove.
+ 
+ 2004-08-06  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* config/i386/i386.c (ix86_expand_clrmem): Move gen_cld down to
+ 	the places where it is actually needed.  Don't use repz; stosb
+ 	for -Os with sufficiently small constant sizes.
+ 	For sufficiently small repz; stos{l,q} repeat counts use a sequence
+ 	of stos{l,q} instructions instead.
+ 
+ 2004-08-06  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	PR tree-optimization/16807
+ 	* loop-iv.c (dump_iv_info): Dump invariants correctly.
+ 	(iv_subreg, iv_extend): Express value of invariant purely in
+ 	base field.
+ 
+ 2004-08-06  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* config/arm/symbian.h (CC1_SPEC): Add -fno-short-enums.
+ 	(CC1PLUS_SPEC): Define it to be the same as CC1_SPEC.
+ 
+ 2004-08-06  Roman Zippel  <zippel@linux-m68k.org>
+ 
+ 	* config/m68k/m68k.c (post_inc_operand,pre_dec_operand): New.
+ 	* config/m68k/m68k.h (PREDICATE_CODES): add post_inc_operand,
+ 	pre_dec_operand.
+ 	* config/m68k/m68k.md (zero_extend*2): delay the splitting of the
+ 	pattern until reload is finished to allow better code generation
+ 	and split them completely into separate instrunctions.
+ 	(*andsi3_split): New pattern.
+ 
+ 2004-08-05  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* tree.c (handle_dll_attribute): Move here from i383/winnt.c.
+ 	Replace use of DECL_INLINE with DECL_DECLARED_INLINE_P.  Set
+ 	DECL_VISIBLITY.  Test TARGET_DLLIMPORT_DECL_ATTRIBUTES with #if.
+ 	* tree.h (handle_dll_attribute): Declare.  Test
+ 	TARGET_DLLIMPORT_DECL_ATTRIBUTES with #if.
+ 	* c-common.h (c_determine_visibility): Declare.
+ 	* c-common.c (c_determine_visibility): New function.
+ 	* c-decl.c (finish_decl): Use it.
+ 	(finish_function): Likewise.
+ 	* defaults.h (TARGET_DLLIMPORT_DECL_ATTRIBUTES): Define it to
+ 	zero, by default.  Use #if, not	#ifdef, to test it.
+ 	* config/arm/arm.c (arm_attribute_table): Use
+ 	handle_dll_attribute.  Test TARGET_DLLIMPORT_DECL_ATTRIBUTES with
+ 	#if.
+ 	* config/arm/pe.h (TARGET_DLLIMPORT_DECL_ATTRIBUTES): Define to 1.
+ 	* config/i386/cygming.h (TARGET_DLLIMPORT_DECL_ATTRIBUTES): Define
+ 	to 1.
+ 	* config/i386/i386-protos.h (ix86_handle_dll_attribute): Remove.
+ 	* config/i386/i386.c (ix86_attribute_table): Use
+ 	handle_dll_attribute for dllimport/dllexport.  Test
+ 	TARGET_DLLIMPORT_DECL_ATTRIBUTES with #if.
+ 	* config/i386/winnt.c (ix86_handle_dll_attribute): Remove.
+ 	* config/mcore/mcore.h (TARGET_DLLIMPORT_DECL_ATTRIBUTES): Define
+ 	it to 1.
+ 	* config/mcore/mcore.c (TARGET_DLLIMPORT_DECL_ATTRIBUTES): Test it
+ 	with #if.
+ 	* config/sh/symbian-pre.h (TARGET_DLLIMPORT_DECL_ATTRIBUTES): Define
+ 	it to 1.
+ 	* doc/extend.texi (dllexport): Clarify and correct documentation.
+ 	(dllimport): Likewise.
+ 	* doc/tm.texi (TARGET_DLLIMPORT_DECL_ATTRIBUTES): Mention
+ 	handle_dll_attribute.
+ 
+ 2004-08-05  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-ssa-loop-manip.c: New file.
+ 	* Makefile.in (tree-ssa-loop-manip.o): Add.
+ 	* tree-flow.h (rewrite_into_loop_closed_ssa, verify_loop_closed_ssa):
+ 	Declare.
+ 	* tree-ssa-loop.c (tree_loop_optimizer_init): Create loop closed ssa
+ 	form.
+ 	(tree_ssa_loop_done): Verify loop closed ssa form.
+ 	* tree-ssa-loop-im.c (move_computations): Update loop closed ssa form.
+ 
+ 2004-08-05  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	* pa.c (pa_asm_output_aligned_bss, pa_asm_output_aligned_common,
+ 	pa_asm_output_aligned_local): New functions.
+ 	* pa-protos.h: Add prototypes for pa_asm_output_aligned_bss,
+ 	pa_asm_output_aligned_common and pa_asm_output_aligned_local.
+ 	* pa-pro-end.h (ASM_OUTPUT_ALIGNED_COMMON): Use
+ 	pa_asm_output_aligned_common.
+ 	(ASM_OUTPUT_ALIGNED_LOCAL): Use pa_asm_output_aligned_local.
+ 	* pa.h (ASM_OUTPUT_ALIGNED_BSS): New macro.
+ 	(ASM_OUTPUT_ALIGNED_COMMON): Use pa_asm_output_aligned_common.
+ 	(ASM_OUTPUT_ALIGNED_LOCAL): Use pa_asm_output_aligned_local.
+ 	* pa64-hpux.h (MAX_OFILE_ALIGNMENT): New macro.
+ 	(ASM_OUTPUT_ALIGNED_COMMON): Use pa_asm_output_aligned_common.
+ 	(ASM_OUTPUT_ALIGNED_LOCAL): Use pa_asm_output_aligned_local.
+ 	* som.h (MAX_OFILE_ALIGNMENT): Provide maximum alignment of global
+ 	common data.
+ 
+ 2004-08-05  Andrew Pinski  <apinski@apple.com>
+ 
+ 	* objc/objc-act.c (build_objc_string_object): Mark the address
+ 	expression as constant.
+ 
+ 2004-08-05  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_rtx_costs): Fix mask_operand
+ 	and mask64_operand thinkos.  Handle ZERO_EXTRACT.  Handle
+ 	SIGN_EXTEND / ZERO_EXTEND of MEM.  Handle rlwinm patterns.
+ 
+ 2004-08-05  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* config/linux.h, config/i386/linux.h, config/sparc/linux.h:
+ 	Remove definitions conditioned on USE_GNULIBC_1 or conditioned
+ 	out, and associated obsolete comments.
+ 
+ 2004-08-05  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* tree.h (force_fit_type): Return a tree, take three flags.
+ 	* fold-const.c (force_fit_type): Set TREE_OVERFLOW and
+ 	TREE_CONSTANT_OVERFLOW here.
+ 	(int_const_binop, const_binop): Adjust.
+ 	(size_int_type): Do sign extension here.
+ 	(fold_convert_const, optimize_bit_field_compare,
+ 	decode_field_reference, all_ones_mask_p, fold_div_compare, fold,
+ 	fold_negate_const, fold_abs_const, fold_not_const): Adjust.
+ 	* tree.c (size_in_bytes, int_fits_type_p): Adjust.
+ 
+ 2004-08-05  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	PR tree-optimization/16864
+ 	* tree-tailcall.c (eliminate_tail_call): Do not create phi nodes
+ 	for ssa names without default_def.
+ 
+ 2004-08-05  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/i386/i386.c (ix86_expand_prologue): If the function uses a
+ 	frame pointer, restore eax with an ebp-relative address.
+ 
+ 2004-08-04  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	PR 14516
+ 	* c-common.c (c_expand_decl): Don't special-case static VAR_DECLs.
+ 	* c-common.h (make_rtl_for_local_static): Delete.
+ 	* c-decl.c (shadow_tag_warned): Clean up comment.
+ 	(finish_decl): Clean up spacing.  Use set_user_assembler_name when
+ 	appropriate.  Don't pass asmspec to rest_of_decl_compilation.
+ 	* c-semantics.c (make_rtl_for_local_static): Delete.
+ 	* expr.c (init_block_move_fn): Use set_user_assembler_name.
+ 	(init_block_clear_fn): Likewise.
+ 	* passes.c (rest_of_decl_compilation): Remove asmspec parameter,
+ 	expect it to be in DECL_ASSEMBLER_NAME.  Update callers in many files.
+ 	* toplev.h (rest_of_decl_compilation): Remove asmspec parameter.
+ 	* tree.h (make_decl_rtl): Remove second parameter.
+ 	(set_user_assembler_name): New.
+ 	* varasm.c (set_user_assembler_name): New.
+ 	(make_decl_rtl): Remove second parameter.  Update callers in many
+ 	files.
+ 
+ 2004-08-05  Adam Nemet  <anemet@lnxw.com>
+ 
+ 	* config.gcc (case i[34567]86-*-lynxos*): Update to LynxOS 4.0.
+ 	(case rs6000-*-lynxos*): Rename it to powerpc-*-lynxos*.  Update
+ 	to LynxOS 4.0.
+ 	* gthr-lynx.h: New file.
+ 	* config/lynx-ng.h: Remove file.
+ 	* config/lynx.h: Update to LynxOS 4.0.
+ 	* config/t-lynx: New file.
+ 	* config/i386/lynx-ng.h: Remove file.
+ 	* config/i386/lynx.h: Update to LynxOS 4.0.
+ 	* config/rs6000/lynxbase.h: Remove file.
+ 	* config/rs6000/lynx.h: Update to LynxOS 4.0.
+ 	* config/rs6000/t-lynx: New file.
+ 	* doc/install.texi (Options specification): Remove reference to
+ 	LynxOS from systems where --with-gnu-as makes a difference.
+ 
+ 2004-08-05  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-common.c (c_stddef_cpp_builtins): Define __INTMAX_TYPE__ and
+ 	__UINTMAX_TYPE__.
+ 	* c-cppbuiltin.c (builtin_define_stdint_macros): New.  Define
+ 	__INTMAX_MAX__.
+ 	(c_cpp_builtins): Call it.
+ 	* doc/cpp.texi: Update.
+ 
+ 2004-08-04  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_rtx_costs): LABEL_REFs are zero
+ 	cost.
+ 
+ 2004-08-04  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* basic-block.h (profile_staus): New global variable.
+ 	* cfg.c (profile_status): Declare.
+ 	(check_bb_profile): Break out from ....; use profile_status
+ 	(dump_flow_info): ... here.
+ 	* cfgbuild.c (find_basic_blocks): Set profile_status.
+ 	* cfgexpand.c (tree_expand_cfg): Likewise.
+ 	* predict.c (estimate_probability): Likewise.
+ 	* profile.c (branch_prob): Likewise.
+ 	* tree-cfg.c (build_tree_cfg): Likewise.
+ 	(dump_function_to_file): Use check_bb_profile.
+ 	* tree-pretty-print (dump_bb_header): Likewise.
+ 	* tree-profile.c (do_tree_profiling): Cleanup.
+ 
+ 2004-08-04  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* Makefile.in (RTL_BASE_H, RTL_H): Correct.
+ 	(BUILD_RTL): Remove $(BUILD_PREFIX) from ggc-none.o.
+ 	(genobjs): Add errors.o, ggc-none.o, and min-insn-modes.o.
+ 	(read-rtl.o, gensupport.o, genconfig.o, genflags.o, gencodes.o)
+ 	(genconstants.o, genemit.o, genopinit.o, genrecog.o, genextract.o)
+ 	(genpeep.o, genattr.o, genattrtab.o, genautomata.o, genoutput.o)
+ 	(genconditions.o): Depend on $(RTL_BASE_H) not $(RTL_H).
+ 	(ggc-none.o, errors.o): Move rule to generators section;
+ 	correct dependencies.
+ 	(min-insn-modes.o): Move rule to generators section; remove
+ 	unnecessary explicit command; correct dependencies.
+ 	(print-rtl.o, print-rtl1.o): Correct dependencies.
+ 	($(BUILD_PREFIX_1)errors.o. $(BUILD_PREFIX_1)ggc-none.o): Delete rule.
+ 	(mostlyclean): Update.
+ 
+ 	* errors.c: Include bconfig.h not config.h.  Correct comment.
+ 	* gengtype.c, genpreds.c: Don't define NO_GENRTL_H.
+ 	* ggc-none.c: Include bconfig.h; not config.h or tm.h.
+ 	* print-rtl.c: Don't include tm_p.h.
+ 
+ 	* rtl.h: Move forward-decl of struct function down where it's
+ 	needed.  Include genrtl.h #ifndef GENERATOR_FILE, not
+ 	#ifndef NO_GENRTL_H.  Remove unnecessary #ifdef BUFSIZ statements.
+ 
+ 2004-08-04  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 	    Jeff Law  <law@redhat.com>
+ 
+ 	* tree-cfg.c (tree_duplicate_bb): Mark duplicated definitions.
+ 	* tree-flow.h (rewrite_ssa_into_ssa): Declaration changed.
+ 	* tree-into-ssa.c (rewrite_ssa_into_ssa): Use new interface to
+ 	manipulate the duplicated ssa names.
+ 	* tree-ssanames.c (ssa_names_to_rewrite): New variable.
+ 	(marked_for_rewrite_p, any_marked_for_rewrite_p, mark_for_rewrite,
+ 	unmark_all_for_rewrite, marked_ssa_names, release_ssa_name_force):
+ 	New functions.
+ 	(release_ssa_name): Do not release ssa names that may have multiple
+ 	definitions.
+ 	* tree.h (release_ssa_name_force, mark_for_rewrite,
+ 	unmark_all_for_rewrite, marked_for_rewrite_p, any_marked_for_rewrite_p,
+ 	marked_ssa_names): Declare.
+ 	* tree-ssa-loop-ch.c (mark_defs_for_rewrite): Remove.
+ 	(duplicate_blocks): Remove call to mark_defs_for_rewrite.
+ 	Update call to rewrite_ssa_into_ssa.
+ 
+ 2004-08-04  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* defaults.h (TARGET_DECLSPEC): New macro.
+ 	* c-cppbuiltin.c (c_cpp_builtins): Handle TARGET_DECLSPEC.
+ 	* config/arm/pe.h (SUBTARGET_CPP_SPEC): Remove __declspec support.
+ 	* config/arm/symbian.h (TARGET_DLLIMPORT_DECL_ATTRIBUTES): Define.
+ 	* config/i386/beof-elf.h (TARGET_OS_CPP_BUILTINS): Remove
+ 	__declspec support.
+ 	(TARGET_DECLSPEC): Define.
+ 	* config/i386/cygming.h (TARGET_OS_CPP_BUILTINS): Remove
+ 	__declspec support.
+ 	* config/i386/i386-interix.h (TARGET_OS_CPP_BUILTINS): Remove
+ 	__declspec support.
+ 	(TARGET_DECLSPEC): Define.
+ 	* config/mcore/mcore.h (TARGET_CPU_CPP_BUILTINS): Remove
+ 	__declspec support.
+ 	* config/sh/symbian-pre.h (SUBTARGET_CPP_SPEC): Remove __declspec
+ 	support.
+ 	* doc/tm.texi (TARGET_DECLSPEC): Document.
+ 
+ 	* doc/extend.texi: Fix typo in comment.
+ 
+ 2004-08-04  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* target-def.h (TARGET_CXX_CDTOR_RETURNS_THIS): Define.
+ 	(TARGET_CXX): Use it.
+ 	* target.h (struct gcc_target): Add cdtor_returns_this.
+ 	* config/arm/arm.c (arm_cxx_cdtor_returns_this): New function.
+ 	(TARGET_CXX_CDTOR_RETURNS_THIS): Define.
+ 	* doc/tm.texi: Document TARGET_CXX_CDTOR_RETURNS_THIS.
+ 
+ 2004-08-03  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* c-lex.c (narrowest_unsigned_type, narrowest_signed_type): Take
+ 	low/high pair. Do range checking directly.
+ 	(interpret_integer): Adjust.
+ 
+ 2004-08-04  Nick Clifton  <nickc@redhat.com>
+ 
+ 	* config/sh/sh.h (TARGET_SWITCHES): Add no-renesas to select the
+ 	GCC ABI.
+ 	* doc/invoke.texi: Document this new switch and also the -mrenesas
+ 	switch.
+ 
+ 2004-08-04  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* cfglayout.c (insn_locators_initialize): Update the current
+ 	location before initializing a location.
+ 
+ 2004-08-03  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* dbxout.c (dbxout_function_decl): Always call dbxout_function_end.
+ 	(dbxout_function_end): Return after emitting the "Lscope" symbol
+ 	under the same conditions that this function formerly wasn't called.
+ 	Add explanatory comments.
+ 
+ 	PR 14860
+ 	* c-decl.c (record_builtin_type): Call debug_hooks->type_decl
+ 	on the new decl.
+ 
+ 	PR 13956
+ 	* dbxout.c (dbx_output_lbrac, dbx_output_rbrac): New
+ 	functions, broken out of dbxout_block.
+ 	(dbxout_block): The block at depth 0 should get LBRAC/RBRAC
+ 	stabs too, if it contains symbols.  Use the begin_label and
+ 	the Lscope label (emitted by dbxout_function_end) for the
+ 	range of this block.
+ 
+ 2004-08-03  Nathanael Nerode  <neroden@gcc.gnu.org>
+ 
+ 	* doc/install.texi: Update autoconf version requirements.
+ 
+ 2004-08-03  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* defaults.h (LEGITIMATE_PIC_OPERAND_P): Provide default definition.
+ 	* recog.c (general_operand, immediate_operand, nonmemory_operand)
+ 	(asm_operand_ok): Remove #ifdefs on LEGITIMATE_PICOPERAND_P.
+ 	* regclass.c (record_reg_classes): Likewise.
+ 	* reload.c (find_reloads): Likewise.
+ 	* reload1.c (reload): Likewise.
+ 
+ 2004-08-03  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* gensupport.c (init_md_reader_args_cb): Renamed from
+ 	init_md_reader_args.  Add third option, callback function for
+ 	parsing program-specific options.  Add diagnosis of incorrect
+ 	number of input files.
+ 	(init_md_reader): Fold into init_md_reader_args_cb.
+ 	(init_md_reader_args): Now a thin wrapper around
+ 	init_md_reader_args_cb.
+ 	* gensupport.h: Update prototypes.
+ 
+ 	* genattr.c, genattrtab.c, gencodes.c, genconfig.c, genemit.c
+ 	* genextract.c, genflags.c, genopinit.c, genoutput.c, genpeep.c
+ 	* genrecog.c: No need to diagnose lack of an input file;
+ 	init_md_reader_args will handle it.
+ 	* genconditions.c: Likewise, and use init_md_reader_args.
+ 	* genconstants.c: Likewise, and no need to call read_md_rtx.
+ 
+ 2004-08-03  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-decl.c (implicitly_declare): Diagnose incompatible implicit
+ 	declarations.
+ 
+ 2004-08-03  Mike Stump  <mrs@apple.com>
+ 
+ 	* config/darwin-c.c: Don't search in "/Local/Library/Frameworks"
+ 	for frameworks.
+ 	* doc/invoke.texi (Darwin Options): Update to reflect above.
+ 
+ 2004-08-03  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	PR middle-end/16790
+ 	* fold-const.c (extract_muldiv_1) <NOP_EXPR>: Disallow local
+ 	truncations, not just global truncations.
+ 
+ 2004-08-03  Andrew Pinski  <apinski@apple.com>
+ 
+ 	PR bootstrap/16865
+ 	* loop-iv.c (simplify_using_assignment): Initialize lhs.
+ 
+ 2004-08-03  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* gcc/doc/install.texi: Document MPFR requirement.
+ 
+ 2004-08-03  Maciej W. Rozycki  <macro@linux-mips.org>
+ 
+ 	* aclocal.m4 (gcc_AC_FUNC_MMAP_BLACKLIST): Check for <sys/mman.h>
+ 	and mmap() explicitly instead of relying on preset autoconf cache
+ 	variables.
+ 	* configure: Regenerate.
+ 
+ 2004-08-03  H.J. Lu  <hongjiu.lu@intel.com>
+ 
+ 	PR target/16570
+ 	* config.gcc (i[34567]86-*-* | x86_64-*-*): Add i386/t-gmm_malloc
+ 	to tmake_file.
+ 	(i[34567]86-*-linux*aout* | i[34567]86-*-linux*libc1): Likewise.
+ 	(i[34567]86-*-linux* | x86_64-*-linux*): Add i386/t-pmm_malloc
+ 	to tmake_file.
+ 
+ 	* config/i386/t-gmm_malloc: New file.
+ 	* config/i386/t-pmm_malloc: Likewise.
+ 
+ 	* config/i386/xmmintrin.h: Include <mm_malloc.h>.
+ 
+ 2004-08-03  H.J. Lu  <hongjiu.lu@intel.com>
+ 	    Tanguy Fautr�  <tfautre@pandora.be>
+ 
+ 	* config/i386/pmm_malloc.h: New file.
+ 
+ 2004-08-03  Danny Smith  <dannysmith@users.sourceforge.net>
+ 
+ 	* config/i386/gmm_malloc.h: New file.
+ 
+ 2004-08-03  Dale Johannesen  <dalej@apple.com>
+ 
+ 	* config/rs6000/rs6000.c (machopic_output_stub):  Align Darwin stubs.
+ 	* c-common.c: Include opts.h.
+ 	(c_common_get_alias_set): Fix check for a single input file.
+ 	* toplev.c: Remove current_file_decl.
+ 	* tree.h: Ditto.
+ 
+ 2004-08-03  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* config.gcc (arm*-*-symbianelf*): New target.
+ 	* config/arm/symbian.h: New file.
+ 
+ 	* gthr-gnat.c: Add visibility #pragmas.
+ 	* gthr-gnat.h : Likewise.
+ 	* gthr.h: Likewise.
+ 	* libgcc2.c (__ffsSI2): Move prototype to libgcc2.h.
+ 	(__ffsDI2): Likewise.
+ 	(__clzSI2): Likewise.
+ 	(__ctzSI2): Likewise.
+ 	(__ctzDI2): Likewise.
+ 	(__popcountSI2): Likewise.
+ 	(__popcountDI2): Likewise.
+ 	(__paritySI2): Likewise.
+ 	(__parityDI2): Likewise.
+ 	* libgcc2.h: Add visibility #pragmas.
+ 	(__clzDI2): Add prototype.
+ 	(__clzSI2): Likewise.
+ 	(__ctzSI2): Likewise.
+ 	(__ffsDI2): Likewise.
+ 	(__ffsSI2): Likewise.
+ 	(__ctzDI2): Likewise.
+ 	(__popcountSI2): Likewise.
+ 	(__popcountDI2): Likewise.
+ 	(__paritySI2): Likewise.
+ 	(__parityDI2): Likewise.
+ 	* unwind-dw2-fde.h: Add visibility #pragmas.
+ 	* unwind.h: Likewise.
+ 
+ 2004-08-03  David Edelsohn  <edelsohn@gnu.org>
+ 	    Dale Johannesen  <dalej@apple.com>
+ 	    Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_rtx_costs): Calculate cost of
+ 	constants more accurately.  Adjust costs for FMA instructions.
+ 	Add cases for most logical and float operations.  Recurse into
+ 	most operands.
+ 
+ 2004-08-03  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* config.gcc (strongarm-*, xscale-*): Add t-arm to tmake_files.
+ 
+ 2004-08-03  Pat Haugen  <pthaugen@us.ibm.com>
+ 
+ 	* ra-build.c (conflicts_between_webs): For webs that cross a call add
+ 	conflicts to regs_invalidated_by_call.
+ 
+ 2004-08-03  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/arm.c (emit_sfm): Only emit a single frame adjustment.
+ 
+ 2004-08-03  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* coverage.c (tree_coverage_counter_ref): Fix computation of the new
+ 	ARRAY_REF argument.
+ 
+ 2004-08-03  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* arm-cores.def: Sort by architecture.  Add arm946es, arm966es,
+ 	arm968es, arm10e, arm1020e, arm1022e.
+ 	* invoke.texi: Update list of ARM cores.
+ 	* arm-tune.md: Regenerate.
+ 
+ 2004-08-03  Richard Earnshaw <rearnsha@arm.com>
+ 
+ 	* arm/gentune.sh: New file.
+ 	* arm/t-arm: New file.
+ 	* arm/arm-tune.md: New file (autogenerated).
+ 	* config.gcc (arm*-*-*): Add t-arm to tmake_file for all variants.
+ 	* arm.md (attribute tune): Delete.  Include arm-tune.md.
+ 
+ 2004-08-03  Paolo Bonzini <bonzini@gnu.org>
+ 
+ 	* gcc.c (add_prefix, add_sysrooted_prefix): Remove
+ 	penultimate parameter.  All callers adjusted.
+ 	(struct prefix_list): Remove used_flag_ptr.
+ 	(find_a_file): Do not set *pl->used_flag_ptr.
+ 	(warn_B, warn_std_ptr): Remove.
+ 
+ 2004-08-03  Yossi Markovich <yossim@il.ibm.com>
+ 	    Mostafa Hagog <mustafa@il.ibm.com>
+ 
+ 	* config/rs6000/altivec.md (altivec_vnmsubfp): Fix wrong pattern.
+ 
+ 2004-08-02  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* dwarf2out.c (output_call_frame_info): Don't change data format
+ 	due to TARGET_USES_WEAK_UNWIND_INFO.  Always refer to the local
+ 	label.  Use 'true' not '1'.
+ 	* doc/install.texi (powerpc-*-darwin*): Mention cctools version
+ 	required.
+ 
+ 2004-08-02  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+ 
+ 	* gdbinit.in: Reflect previous changes to rtunion_def.
+ 
+ 2004-08-02  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* fold-const.c (fold) <TRUNC_MOD_EXPR>: The transformation "X % -Y"
+ 	-> "X % Y" is only valid for TRUNC_MOD_EXPR.
+ 
+ 2004-08-02  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+ 
+ 	* vec.h (DEF_VEC_P): Add proper cast to uses of vec_o_reserve and
+ 	vec_p_reserve.
+ 	* langhooks.h (lang_hooks::builtin_function): Rename parameter
+ 	from "class" to "bt_class".
+ 
+ 2004-08-02  Paul Brook  <paul@codesourcery.com>
+ 
+ 	PR rtl-optimization/15068
+ 	* flow.c (init_propagate_block_info): Check condition is reversible.
+ 
+ 2004-08-02  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+ 
+ 	* gengtype.h (options::info): Change type to const char *.
+ 	(enum gc_used_enum): Move out of struct type scope.
+ 	* gengtype.c (create_option): Convert initializer for option::info to
+ 	appropiate type.
+ 	(adjust_field_type, walk_type, write_func_for_structure,
+ 	write_root, write_roots): Remove pointless cast.
+ 
+ 2004-08-02  J"orn Rennecke <joern.rennecke@superh.com>
+ 
+ 	* genopinit.c (gen_insn): Check for MODE_COMPLEX_FLOAT patterns for $F.
+ 
+ 2004-08-02  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+ 
+ 	* rtl.h (union rtunion_def): Have all members  start with the
+ 	prefix "rt_".
+ 	(XINT, XSTR, XEXP, XVEC, XMODE, XBITMAP, XTREE, XBBDEF, XTMPL,
+ 	X0INT, X0UINT, X0STR, X0EXP, X0VEC, X0MODE, X0BITMAP, X0TREE,
+ 	X0MEMATTR, X0BBDEF, X0REGATTR, XCINT, XCUINT, XCSTR, XCEXP,
+ 	XCVEC, XCMODE, XCBITMAP, XCTREE, XCBBDEF, XC2EXP): Adjust members
+ 	access.
+ 	* gengtype.c (adjust_field_rtx_def): Likewise.
+ 	* rtlanal.c (loc_mentioned_in_p): Likewise.
+ 
+ 2004-08-02  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config.gcc (mips*-*-elf*, mips*-*-rtems*): Add elfos.h to tm_file.
+ 	Replace uses of mips/elf64.h with mips/elf.h
+ 	* config/mips/elf.h (MAX_OFILE_ALIGNMENT, TARGET_ASM_NAMED_SECTION)
+ 	(TYPE_OPERAND_FMT, TYPE_ASM_OP, SIZE_ASM_OP, BSS_SECTION_ASM_OP)
+ 	(ASM_OUTPUT_ALIGNED_BSS, ASM_WEAKEN_LABEL, ASM_OUTPUT_WEAK_ALIAS)
+ 	(MAKE_DECL_ONE_ONLY, INIT_SECTION_ASM_OP, FINI_SECTION_ASM_OP)
+ 	(HANDLE_SYSV_PRAGMA): Delete.
+ 	(ASM_OUTPUT_DEF): Fix formatting.
+ 	* config/mips/elf64.h: Delete.
+ 
+ 2004-08-01  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* config/ia64/ia64.c (got_symbolic_operand): Do require a
+ 	symbol+offset operand to have its offset be zero mod 0x3fff
+ 	when GOT entries are in use.  Clarify logic in SYMBOL_REF
+ 	case.  Clarify comments.
+ 	(ia64_expand_load_address): Split a symbol+offset load when
+ 	the offset is nonzero mod 0x3fff, not 0x1fff.
+ 
+ 2004-08-01  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_split_multireg_move): Just abort
+ 	if trying to *store* to a non-offsettable address.
+ 	* config/rs6000/rs6000.md (movtf_internal): Don't move GPRs to
+ 	a nonoffsettable address.
+ 	(movdi_internal32): Don't move GPRs to a nonoffsettable address.
+ 	Clean up.
+ 	(movti_string): Don't move GPRs to a nonoffsettable address.
+ 	(movti_ppc64): Don't move GPRs to a nonoffsettable address.  Clean up.
+ 
+ 2004-08-02  Ben Elliston  <bje@au.ibm.com>
+ 
+ 	PR target/16155
+ 	* config/rs6000/altivec.h: Replace typeof with __typeof__.
+ 
+ 2004-08-01  Richard Henderson  <rth@redhat.com>
+ 
+ 	* expr.c (expand_expr_real_1) <normal_inner_ref>: Fix crash with
+ 	variable sized types.
+ 
+ 2004-08-01  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* doc/invoke.texi: In the MIPS options section, remove the passage
+ 	saying that -mexplicit-relocs is usually disabled for -mabicalls
+ 	-fno-unit-at-a-time.
+ 	* config/mips/mips.c (override_options): Remove the code that enforced
+ 	this rule.
+ 
+ 2004-08-01  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.md (cprestore): Provide two alternatives, one for
+ 	an in-range offset and one for an out-of-range offset.  Wrap the latter
+ 	in .set macro/.set nomacro if it's inside a .set nomacro block.
+ 
+ 2004-08-01  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips-protos.h (mips_gp_save_slot): Remove.
+ 	(mips_restore_gp): Declare.
+ 	* config/mips/mips.c (mips_add_offset): Add a scratch register
+ 	argument.  Reimplement in rtl only, reusing MIPS16 logic from
+ 	mips_output_mi_thunk.
+ 	(mips_legitimize_address, mips_legitimize_const_move): Adjust calls
+ 	to mips_add_offset.
+ 	(mips_gp_save_slot): Delete.
+ 	(mips_restore_gp): New function.
+ 	(mips_set_return_address, mips_output_mi_thunk): Use mips_add_offset.
+ 	* config/mips/mips.md (exception_receiver): Turn into a
+ 	define_insn_and_split.  Use mips_restore_gp to do the split.
+ 	(call_internal, call_value_internal, call_value_multiple_internal): Use
+ 	mips_restore_gp to restore $gp.
+ 
+ 2004-07-31  Andrew Pinski  <apinski@apple.com>
+ 
+ 	PR other/16842
+ 	* mkheaders.in (libsubdir): s/gcc-lib/gcc/.
+ 
+ 2004-07-31  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-decl.c (diagnose_mismatched_decls): Give error for external
+ 	redeclaration of identifier declared with no linkage, not just
+ 	warning with -Wtraditional.  Do not check DECL_CONTEXT to give
+ 	error for redeclaration with no linkage.
+ 
+ 2004-07-30  Geoffrey Keating  <geoffk@apple.com>
+ 	    Fariborz Jahanian <fjahanian@apple.com>
+ 
+ 	* config/rs6000/rs6000.c (legitimate_lo_sum_address_p): Permit
+ 	non-offsettable addresses even for DImode.
+ 	(rs6000_split_multireg_move): Cope with non-offsettable addresses
+ 	being moved into multiple GPRs.
+ 
+ 	* config/rs6000/rs6000.c (RS6000_DEFAULT_LONG_DOUBLE_SIZE): Default
+ 	to 64.
+ 	(rs6000_override_options): Use RS6000_DEFAULT_LONG_DOUBLE_SIZE.
+ 	* config/rs6000/darwin.h (RS6000_DEFAULT_LONG_DOUBLE_SIZE): Define
+ 	to 128.
+ 	* config/rs6000/darwin-ldouble.c (isless): New macro.
+ 	(inf): New macro.
+ 	(nonfinite): New macro.
+ 	(FPKINF): Delete.
+ 	(_xlqadd): Completely rewrite.
+ 	(_xlqmul): Correct overflow handling.
+ 	(_xlqdiv): Correct overflow handling.
+ 	* config/rs6000/darwin-ldouble-format: New file.
+ 
+ 2004-07-30  Roger Sayle  <roger@eyesopen.com>
+ 	    Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/i386/i386.md: New peephole2's to convert imul by 3, 5 or
+ 	9 into the equivalent lea instruction.
+ 
+ 2004-07-30  Richard Henderson  <rth@redhat.com>
+ 
+ 	* gimplify.c (gimplify_expr) <case CONST_DECL>: Don't replace
+ 	with DECL_INITIAL if fb_lvalue.
+ 	* tree-gimple.c (is_gimple_id): Add CONST_DECL.
+ 	* tree-pretty-print.c (dump_decl_name): Dump unnamed CONST_DECL
+ 	with <Cxxx>.
+ 	* tree-ssa-ccp.c (maybe_fold_stmt_indirect): Fold CONST_DECL.
+ 
+ 2004-07-30  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-alias.c (compute_points_to_and_addr_escape): If a
+ 	pointer escapes through a function call, assume that the
+ 	callee will dereference it.
+ 	(add_pointed_to_var): Assume that VALUE is always an
+ 	ADDR_EXPR.
+ 	(collect_points_to_info_r): Only call add_pointed_to_var if
+ 	the value is an ADDR_EXPR.
+ 
+ 2004-07-30  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-alias.c (create_alias_map_for): Do not get the
+ 	alias set of the inner type of ARRAY_TYPEs.
+ 
+ 2004-07-29  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-ccp.c (visit_assignment): Move code to prevent
+ 	setting a non-register to UNDEFINED right before the call to
+ 	set_lattice_value.
+ 
+ 2004-07-29  Kaz Kojima  <kkojima@gcc.gnu.org>
+ 
+ 	* config/sh/lib1funcs.asm: Make aliases movstr* for movmem*.
+ 
+ 2004-07-29  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa.c (verify_flow_sensitive_alias_info): When
+ 	comparing points-to sets of different pointers, make sure the
+ 	second pointer is actually referenced in the code.
+ 
+ 2004-07-29  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* config/ia64/ia64.c (setjmp_operand): Delete, unused.
+ 	(got_symbolic_operand): Remove unreachable code.
+ 	* config/ia64/ia64.h (PREDICATE_CODES): Remove entry for
+ 	setjmp_operand; add entry for tls_symbolic_operand.
+ 	* config/ia64/ia64-protos.h: Remove all prototypes of
+ 	predicate functions.
+ 
+ 2004-07-29  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* c-common.h (lang_post_pch_load): New variable.
+ 	* c-pch.c (lang_post_pch_load): Define it.
+ 	(c_common_read_pch): Use it.
+ 	* cgraphunit.c (record_call_1): Give the front end a chance to
+ 	record additional needed entities when a variable is marked as
+ 	needed.
+ 	* tlink.c (recompile_files): Robustify.
+ 	(scan_linker_output): If a symbol is assigned to a file,
+ 	but after recompilation is not present there, issue an error
+ 	message.
+ 
+ 2004-07-29  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-ssa-loop-im.c (force_move_till_expr, force_move_till):
+ 	Take orig_loop argument and pass it to set_level.
+ 	(schedule_sm): Pass the correct orig_loop to force_move_till.
+ 
+ 2004-07-29  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* cfgloop.c (update_latch_info): Update dominator of the new block.
+ 	(canonicalize_loop_headers, flow_loops_find): Do not free dominance
+ 	info.
+ 	* dominance.c (verify_dominators): Check that the dominance tree is
+ 	connected.
+ 	(recount_dominator): Ignore unreachable blocks.
+ 	(iterate_fix_dominators): Cleanup old dominance information before
+ 	recomputing it.
+ 
+ 2004-07-29  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-operands.c (get_expr_operands): Revert changes
+ 	to ADDR_EXPR processing introduced by:
+ 	    2004-06-21  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 	    * tree-ssa-operands.c (get_expr_operands): Minor rearrangements.
+ 
+ 2004-07-29  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* doc/implement-c.texi: Add C90 subclause references.  Point to
+ 	preprocessor documentation instead of duplicating it.  Add points
+ 	only present in C90.  Fill in documentation for all points.
+ 
+ 2004-07-29  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	* pa.c (output_movb): Correct typo.
+ 
+ 2004-07-29  Pat Haugen  <pthaugen@us.ibm.com>
+ 
+ 	* ra.h (single_reg_in_regclass): Declare.
+ 	* ra.c (single_reg_in_regclass): Define.
+ 	(first_hard_reg): New.
+ 	(init_ra): Initialize single_reg_in_regclass.
+ 	* ra-colorize.c (ok_class): New.
+ 	(coalesce, aggressive_coalesce, extended_coalesce_2): Use it.
+ 
+ 2004-07-29  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* gcov-io.h: Allow zero tag as EOF indicator.
+ 	(gcov_is_eof): Remove.
+ 	(gcov_truncate): Remove.
+ 	* gcov-io.c (gcov_seek): Always SEEK_SET.
+ 	* libgcov.c (gcov_exit): Don't use gcov_truncate.  Write explicit
+ 	EOF tag.
+ 	* coverage.c (read_counts_file): Don't use gcov_is_eof.
+ 	* gcov-dump.c (dump_file): Likewise.
+ 	* gcov.c (read_graph_file, read_count_file): Likewise.
+ 
+ 	* c-decl.c (complete_array_type): Don't gratuitously copy
+ 	maxindex.  Check it always has a type.
+ 
+ 2004-07-29  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* rtl.c (currently_expanding_to_rtl): New.
+ 	* rtl.h (currently_expanding_to_rtl): Export it.
+ 	* cfgexpand.c (tree_cfg_expand): Set/clear it at entry/exit.
+ 
+ 	* config/alpha/alpha.c (alpha_expand_mov): Remove old RTL
+ 	inliner hack.
+ 	* config/sh/sh.c: Replace rtx_equal_function_value_matters
+ 	with currently_expanding_to_rtl.
+ 	* config/sh/sh.md: Likewise.
+ 	* config/ia64/ia64.c (got_symbolic_operand): Likewise.
+ 
+ 2004-07-29  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	Introduce sh2a support.
+ 	2004-07-29  Alexandre Oliva  <aoliva@redhat.com>
+ 	* config.gcc: Build multilibs for sh2a and sh2a-single by
+ 	default.
+ 	* config/sh/sh.h (SUPPORT_SH2A, SUPPORT_SH2A_SINGLE): Define by
+ 	default.  Split their tests out of the corresponding SH4
+ 	multilibs.
+ 	* config/sh/t-sh (MULTILIB_MATCHES): Don't ever use SH4 or SH4a
+ 	multilibs for SH2a.
+ 	2004-07-28  Alexandre Oliva  <aoliva@redhat.com>
+ 	* config.gcc: Handle sh2a multilibs and cpu selection.
+ 	* config/sh/sh.h: Likewise.  Handle sh2a command line flags.
+ 	* config/sh/t-mlib-sh2a: New.
+ 	* config/sh/t-mlib-sh2a-nofpu: New.
+ 	* config/sh/t-mlib-sh2a-single: New.
+ 	* config/sh/t-mlib-sh2a-single-only: New.
+ 	2004-07-09  Nick Clifton  <nickc@redhat.com>
+ 	Issue 43400
+ 	* config/sh/sh.h (DRIVER_SELF_SPECS): Issue an error message if
+ 	-ml and -m2a are used together.
+ 	2004-03-23  DJ Delorie  <dj@redhat.com>
+ 	* config/sh/sh.c (sh_builtin_saveregs): Use the double code only
+ 	when we have a double-sized FPU.
+ 	2004-02-24  Corinna Vinschen <vinschen@redhat.com>
+ 	* config/sh/lib1funcs.asm (set_fpscr): Don't build if __SH2A_NOFPU__
+ 	is set.
+ 	* config/sh/elf.h (SUBTARGET_ASM_ISA_SPEC): Add cases for -msh2a-nofpu,
+ 	-msh2a-single and -msh2a-single-only
+ 	2004-02-24  Corinna Vinschen <vinschen@redhat.com>
+ 	* config/sh/crt1.asm: Don't generate FPU instructions if __SH2A_NOFPU__
+ 	is set.
+ 	2004-02-20  DJ Delorie  <dj@delorie.com>
+ 	* config/sh/sh.md (movsf_i, movsf_ie, movsf, ble, bge): Disable for sh2a-nofpu.
+ 	2004-02-20  Fred Fish <fnf@redhat.com>,
+ 	Corinna Vinschen <vinschen@redhat.com>
+ 	* config/sh/t-sh (MULTILIB_OPTIONS): Add 2a-nofpu.
+ 	(MULTILIB_EXCEPTIONS): Don't build littel-endian on sh2a.
+ 	2004-02-18  DJ Delorie  <dj@redhat.com>
+ 	* config/sh/sh.c (broken_move): Add support for movi20.
+ 	* config/sh/sh.h: Likewise.
+ 	(SHIFT_COUNT_TRUNCATED): Set for sh2a.
+ 	* config/sh/sh.md (udivsi3_sh2a): New.
+ 	(udivsi3): Call it.
+ 	(divsi3_sh2a): New.
+ 	(divsi3): Call it.
+ 	(mul_r): New.
+ 	(ashlsi3_sh2a): New.
+ 	(ashrsi3_sh2a): New.
+ 	(lshrsi3_sh2a): New.
+ 	(movsi_i): Disable for sh2a.
+ 	(movsi_ie): Add movi20.
+ 	(movsf_i, movsf_ie, movsf, ble, untyped_call): Explicitly enable
+ 	sh2a, for -m2a-nofpu mode.
+ 	2004-02-13  DJ Delorie  <dj@redhat.com>
+ 	* config/sh/lib1funcs.asm: Handle double vs single better.
+ 	* config/sh/sh.h: Likewise.
+ 	2004-02-09  DJ Delorie  <dj@redhat.com>
+ 	* config/sh/crt1.asm: Add support for sh2a.
+ 	* config/sh/elf.h: Likewise.
+ 	* config/sh/lib1funcs.asm: Likewise.
+ 	* config/sh/sh.c: Likewise.
+ 	* config/sh/sh.md: Likewise.
+ 	* config/sh/sh.h: Likewise.
+ 	* config/sh/t-sh: Likewise.
+ 
+ 2004-07-28  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	* config/frv/frv.md (movqi_internal, movhi_internal,
+ 	movsi_internal): Add backup alternatives for memory inputs.
+ 
+ 2004-07-28  Matt Austern  <austern@apple.com>
+ 
+ 	* config/darwin.c (darwin_one_byte_bool): New global variable.
+ 	* config/darwin.h (darwin_one_byte_bool): Declare.
+ 	(SUBTARGET_OPTIONS): Define macro.  (for -mone-byte-bool flag.)
+ 	* config/rs6000/darwin.h (BOOL_TYPE_SIZE): Conditionalize on
+ 	value of darwin_one_byte_bool.
+ 	* doc/invoke.texi: Document -mone-byte-bool flag.
+ 
+ 2004-07-28  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* c-common.c (c_common_unsafe_for_reeval): Delete.
+ 	* c-lang.c (LANG_HOOKS_UNSAFE_FOR_REEVAL): Delete use.
+ 	* c-pretty-print.c (pp_c_expression): Delete UNSAVE_EXPR case.
+ 	* calls.c (fix_unsafe_tree): Delete.
+ 	(expand_call): Delete code which used above.
+ 	* dojump.c (do_jump): Delete UNSAVE_EXPR case.
+ 	* expr.c (expand_expr_real_1): Ditto.
+ 	* fold-const.c (non_lvalue): Ditto.
+ 	* langhooks-def.h (LANG_HOOKS_UNSAFE_FOR_REEVAL): Delete.
+ 	(lhd_unsafe_for_reeval): Ditto.
+ 	* langhooks.c (lhd_unsafe_for_reeval): Ditto.
+ 	* langhooks.h (unsafe_for_reeval): Ditto.
+ 	(unsave_expr_now): Adjust comment.
+ 	* tree-inline.c (copy_body_r): Delete UNSAVE_EXPR bits.
+ 	(estimate_num_insns_1): Ditto.
+ 	* tree-pretty-print.c (dump_generic_node): Ditto.
+ 	* tree.c (expr_align): Ditto.
+ 	(unsave_expr): Delete.
+ 	(unsafe_for_reeval): Ditto.
+ 	* tree.h (unsafe_for_reeval, unsave_expr): Ditto.
+ 	* tree.def (UNSAVE_EXPR): Delete.
+ 	* objc/objc-lang.c (LANG_HOOKS_UNSAFE_FOR_REEVAL): Delete.
+ 
+ 2004-07-28  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* tree.h (enum tls_model): Move ...
+ 	* coretypes.h: ... here.
+ 
+ 2004-07-28  Richard Sandiford <rsandifo@redhat.com>
+ 
+ 	* config/frv/frv.h (EPILOGUE_USES): New.  Use LR.
+ 
+ 2004-07-28  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* cse.c (validate_canon_reg): New function, split out from...
+ 	(canon_reg): ...here.  Use validate_canon_reg for both 'e' and 'E'.
+ 
+ 2004-07-28  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-alias.c (maybe_create_global_var): Don't just
+ 	return if .GLOBAL_VAR has been created.
+ 
+ 2004-07-28  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa.c (verify_flow_insensitive_alias_info): Process
+ 	every variable that may have aliases, not just tags.
+ 
+ 2004-07-28  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* config/rs6000/rs6000.md ("move_from_CR_gt_bit"): Rename to
+ 	move_from_CR_eq_bit.
+ 	Rename UNSPEC_MV_CR_GT to UNSPEC_MV_CR_EQ.
+ 
+ 
+ 	* config/rs6000/spe.md ("e500_flip_gt_bit"): Rename to
+ 	e500_flip_eq_bit.
+ 
+ 	* config/rs6000/rs6000-protos.h: Rename output_e500_flip_gt_bit to
+ 	output_e500_flip_eq_bit.
+ 
+ 	* config/rs6000/rs6000.c (output_e500_flip_gt_bit): Rename to
+ 	output_e500_flip_eq_bit.
+ 	(rs6000_emit_sCOND): Rename call to output_e500_flip_gt_bit to
+ 	output_e500_flip_eq_bit.
+ 	Rename gen_move_from_CR_gt_bit to gen_move_from_CR_eq_bit.
+ 	(print_operand): case D.  Get to EQ bit.
+ 
+ 2004-07-28  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* gcov.c (function_summary): Add missing \n.
+ 
+ 2004-07-28  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	Introduce sh4a support.
+ 	* config.gcc: Handle sh4a multilibs and cpu selection.
+ 	* config/sh/sh.h: Likewise.  Handle sh4a command line flags.
+ 	* config/sh/t-mlib-sh4a: New.
+ 	* config/sh/t-mlib-sh4al: New.
+ 	* config/sh/t-mlib-sh4a-nofpu: New.
+ 	* config/sh/t-mlib-sh4a-single: New.
+ 	* config/sh/t-mlib-sh4a-single-only: New.
+ 	2004-02-20  DJ Delorie  <dj@redhat.com>
+ 	* config/sh/sh.md ("movua"): Change constraint from "m" to "Sua".
+ 	* config/sh/sh.h (EXTRA_CONSTRAINT_S): Add "Sua" support.
+ 	2003-08-22  Eric Christopher  <echristo@redhat.com>
+ 	* config/sh/sh4a.md: Update for chip errata.
+ 	2003-08-07  Eric Christopher  <echristo@redhat.com>
+ 	* config/sh/sh4a.md: New file. sh4a processor description.
+ 	2003-07-08  Alexandre Oliva  <aoliva@redhat.com>
+ 	* config/sh/sh.h (TARGET_SWITCHES): Added 4al.  Adjust description
+ 	of -m4a-nofpu.
+ 	(SH_ASM_SPEC): Pass -dsp for -m4al, not -m4a-nofpu.
+ 	* config/sh/t-sh (MULTILIB_MATCHES): Map -m4al to -m4a-nofpu.
+ 	* doc/invoke.texi (SH Options): Document -m4al.
+ 	2003-07-03  Alexandre Oliva  <aoliva@redhat.com>
+ 	* config/sh/sh.c (expand_block_move): Remove commented-out code
+ 	checked in by mistake.
+ 	(sh_cannot_change_mode_class): Enable SUBREGs to be used to select
+ 	single elements from SFmode vectors.
+ 	* config/sh/sh.md (fsca): Use VEC_CONCAT to initialize the output
+ 	register.
+ 	(sinsf2, cossf2, sindf2, cosdf2): Don't emit CLOBBER.
+ 	2003-07-01  Alexandre Oliva  <aoliva@redhat.com>
+ 	* config/sh/sh.h (sh_fsca_sf2int, sh_fsca_df2int,
+ 	sh_fsca_int2sf): Remove variable declarations.
+ 	* config/sh/sh.c (sh_fsca_sf2int, sh_fsca_df2int,
+ 	sh_fsca_int2sf): New functions.
+ 	(sh_fsca_sf2int_rtx, sh_fsca_df2int_rtx,
+ 	sh_fsca_int2sf_rtx): New static variables.
+ 	* config/sh/sh-protos.h (sh_fsca_sf2int, sh_fsca_df2int,
+ 	sh_fsca_int2sf): Declare.
+ 	* config/sh/sh.md: Adjust.
+ 	* doc/invoke.texi (SH Options): Document new options.
+ 	* config/sh/lib1funcs.asm (ic_invalidate): Remove SH4a forward
+ 	compatibility from SH4 code.
+ 	2003-06-27  Alexandre Oliva  <aoliva@redhat.com>
+ 	* config/sh/sh.c (expand_block_move): Don't emit POST_INC too
+ 	early.
+ 	(memory_movsrc_operand): Renamed to...
+ 	(unaligned_load_operand): ... this.  Simplified.
+ 	* config/sh/sh.h (PREDICATE_CODES): Adjust.
+ 	* config/sh/sh.md (movua, extv, extzv): Likewise.  Change movua's
+ 	input operand to SImode, and adjust the others.  Introduce
+ 	post-increment by peephole.
+ 	* config/sh/sh.c (expand_block_move): Give the target address the
+ 	same mode as the temp reg.
+ 	* config/sh/sh.c (expand_block_move): Use a temp reg for unaligned
+ 	copying.
+ 	2003-06-26  Alexandre Oliva  <aoliva@redhat.com>
+ 	Introduce support for SH4a.
+ 	* config/sh/lib1funcs.asm (ic_invalidate): Use icbi if
+ 	__SH4A__.  Emit 4 4kb blocks and touch all of them otherwise.
+ 	* config/sh/sh.c (sh_fsca_sf2int, sh_fsca_df2int,
+ 	sh_fsca_int2sf): New.
+ 	(sh_init_builtins): Initialize them.
+ 	(print_operand): Support `d'.
+ 	(expand_block_move): Use movua if src is misaligned.
+ 	(memory_movsrc_operand): New.
+ 	* config/sh/sh.h (TARGET_CPU_CPP_BUILTINS): Define __SH4A__
+ 	and one of the SH4 macros.
+ 	(SH4A_BIT, TARGET_SH4A_ARCH, TARGET_SH4A_FP,
+ 	SELECT_SH4A_NOFPU, SELECT_SH4A_SINGLE_ONLY, SELECT_SH4A,
+ 	SELECT_SH4A_SINGLE): New.
+ 	(TARGET_NONE): Add SH4A_BIT.
+ 	(TARGET_SWITCHES): Add 4a-single-only, 4a-single, 4a-nofpu and 4a.
+ 	(SH_ASM_SPEC): Pass -dsp if -m4a-nofpu.
+ 	(sh_fsca_sf2int, sh_fsca_df2int, sh_fsca_int2sf): Declare.
+ 	(OVERRIDE_OPTIONS): Set cpu to CPU_SH4A when appropriate.
+ 	(enum processor_type): Added PROCESSOR_SH4A.
+ 	(PREDICATE_CODES): Add memory_movsrc_operand.
+ 	* config/sh/sh.md: Removed unused variables.
+ 	(attr cpu): Add sh4a.
+ 	(attr type): Add movua, fsrra and fsca.
+ 	(prefetch): New, for SH4.
+ 	(ic_invalidate_line, ic_invalidate_line_sh4a): Use icbi.
+ 	(toggle_sz): Set type to fp.
+ 	(toggle_pr, rsqrtsf2, fsca, sinsf2, cossf2, sindf2, cosdf2): New.
+ 	(movua, extv, extzv): New.
+ 	* config/sh/t-sh: Add multilibs for 4a, 4a-nofpu, 4a-single
+ 	and 4a-single-only.
+ 
+ 2004-07-28  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-optimize.c (init_tree_optimization_passes): Schedule
+ 	pass_may_alias right after the program is renamed into SSA.
+ 	* tree-pass.h (PROP_alias): Define.
+ 	* tree-outof-ssa.c (pass_del_ssa): Require PROP_alias.
+ 	* tree-sra.c (pass_sra): Likewise.
+ 	* tree-ssa-ccp.c (pass_ccp): Likewise.
+ 	* tree-ssa-copyrename.c (pass_rename_ssa_ccp): Likewise.
+ 	* tree-ssa-dce.c (pass_dce): Likewise.
+ 	* tree-ssa-dom.c (pass_dominator): Likewise.
+ 	* tree-ssa-dse.c (pass_dse): Likewise.
+ 	* tree-ssa-forwprop.c (pass_forwprop): Likewise.
+ 	* tree-ssa-loop-ch.c (pass_ch): Likewise.
+ 	* tree-ssa-phiopt.c (pass_phiopt): Likewise.
+ 	* tree-ssa-pre.c (pass_pre): Likewise.
+ 	* tree-tailcall.c (pass_tail_recursion): Likewise.
+ 	* tree-ssa.c (pass_redundant_phi): Likewise.
+ 	* tree-ssa-alias.c (aliases_computed_p): Remove.
+ 	Update all users.
+ 	(init_alias_info): Do not mark all type tags for renaming
+ 	unconditionally.
+ 	Clear may_aliases from every symbol.
+ 	(setup_pointers_and_addressables): If a pointer has not been
+ 	dereferenced and it had a type tag, clear it and mark the old
+ 	tag for renaming.
+ 
+ 2004-07-28  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	PR tree-optimization/16705
+ 	* tree-ssa-alias.c (create_global_var): Set DECL_EXTERNAL on
+ 	.GLOBAL_VAR.
+ 
+ 2004-07-27  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* expr.c (expand_expr_real_1, case PARM_DECL): Remove obsolete error
+ 	check.
+ 
+ 	* gimplify.c (maybe_with_size_expr): If already have WITH_SIZE_EXPR,
+ 	don't make another one.
+ 
+ 	PR optimization/15077
+ 	* function.h (struct function): Add field saved_static_chain_decl.
+ 	Fix comment for static_chain_decl.
+ 	* tree-inline.c (save_body): Add new arg and handle static_chain_decl.
+ 	* tree-inline.h (save_body): Add new arg.
+ 	* tree-optimize.c (tree_rest_of_compilation): Handle saving
+ 	static_chain_decl.
+ 
+ 2004-07-27  Richard Henderson  <rth@redhat.com>
+ 
+ 	* gimplify.c (is_gimple_addr_expr_arg_or_indirect): Remove.
+ 	(gimplify_modify_expr, gimplify_addr_expr, gimplify_expr): Use
+ 	is_gimple_addressable.
+ 	* tree-gimple.c (is_gimple_addressable): Rename from
+ 	is_gimple_addr_expr_arg; accept INDIRECT_REF.
+ 	(is_gimple_lvalue): Don't test INDIRECT_REF directly.
+ 	* tree-gimple.h, tree-sra.c, tree-ssa-loop-im.c: Update for
+ 	rename to is_gimple_addressable.
+ 
+ 2004-07-28  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* config/rs6000/rs6000.c (function_arg_padding): Pad SFmode upwards.
+ 
+ 2004-07-27  Richard Henderson  <rth@redhat.com>
+ 
+ 	* function.c (assign_stack_local_1): Widen alignment to HOST_WIDE_INT
+ 	before rounding.
+ 
+ 2004-07-27  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* libgcc2.c: Change all conditionals testing
+ 	LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 96 to == 80.
+ 	* libgcc2.h: Likewise.
+ 	* config/i386/i386.c (ix86_init_mmx_sse_builtins): Set
+ 	TYPE_PRECISION of float80_type to 80.
+ 	* config/ia64/ia64.c (ia64_init_builtins): Set TYPE_PRECISION
+ 	of fpreg_type and float80_type to 80.
+ 	* config/i386/i386.h, config/ia64/ia64.h, config/m68k/m68k.h
+ 	* config/m68k/netbsd-elf.h:
+ 	Change LONG_DOUBLE_TYPE_SIZE and possibly LIBGCC2_LONG_DOUBLE_TYPE_SIZE
+ 	to evaluate to 80 whenever they would formerly have evaluated to 96.
+ 	* config/i386/sco5.h: Remove unnecessary redefinition of
+ 	LONG_DOUBLE_TYPE_SIZE.
+ 	* doc/rtl.texi: Clarify uses of XFmode and TFmode.
+ 	* config/i386/i386-modes.def: Use FRACTIONAL_FLOAT_MODE for
+ 	XFmode, with a bitsize of 80.  Update commentary.
+ 	* config/ia64/ia64-modes.def: Likewise.
+ 	* config/m68k/m68k-modes.def: Likewise.
+ 
+ 2004-07-27  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* cfgexpand.c (tree_expand_cfg): Fix comment.
+ 
+ 	* calls.c (expand_call): Ignore rtx_equal_function_value_matters.
+ 	* function.c (purge_single_hard_subreg_set, purge_hard_subreg_sets):
+ 	Remove.
+ 	(prepare_function_start): Don't set rtx_equal_function_value_matters.
+ 	* integrate.c (copy_rtx_and_substitute): Don't test for it.
+ 	* passes.c (rest_of_compilation): Don't call purge_hard_subreg_sets.
+ 	Don't set rtx_equal_function_value_matters.  Don't register RTL hooks
+ 	here again.  Update leading comment.
+ 	* rtl.c (rtx_equal_function_value_matters): Remove.
+ 	(rtx_equal_p): Don't test for it.
+ 	* simplify-rtx.c (simplify_binary_operation, simplify_subreg):
+ 	Likewise.
+ 
+ 	* rtl.h (enum insn_note): Remove NOTE_INSN_LOOP_END_TOP_COND.
+ 	* rtl.c (note_insn_name): Likewise.
+ 	* emit-rtl.c (remove_unnecessary_notes): Don't handle it.
+ 	* final.c (final_scan_insn): Likewise.
+ 
+ 	* except.c (finish_eh_generation): Don't call cfg_cleanup from here.
+ 	* passes.c (rest_of_handle_eh): Do it here.
+ 
+ 	* stmt.c (struct nesting): Remove struct nesting block member.
+ 	(struct stmt_status): Remove x_block_start_count field.
+ 	(current_block_start_count): Remove.
+ 
+ 2004-07-27  Brian Booth  <bbooth@redhat.com>
+ 
+ 	* tree-optimize.c (register_one_dump_file): Update condition that uses
+ 	static_pass_number.
+ 	(dup_pass_1): Replace with...
+ 	(next_pass_1): This.
+ 	(NEXT_PASS): Call next_pass_1.
+ 	(DUP_PASS): Remove.
+ 	(init_tree_optimization_passes): Remove uses of DUP_PASS.
+ 	(execute_one_pass): Update condition that uses
+ 	static_pass_number.
+ 	* tree-pass.h (tree_opt_pass): Declare static_pass_number as a signed
+ 	integer.
+ 
+ 2004-07-27  Nick Clifton  <nickc@redhat.com>
+ 
+ 	* config/m32r/m32r.c: Include integrate.h in order to get the
+ 	prototype for get_hard_reg_initial_val().
+ 
+ 	* config/m32r/m32r.md (m32rpipeline): Remove unused value "m32r"
+ 	and tidy up indentation.
+ 	(final_presence_set): Use absence_set instead, so that if there is
+ 	nothing in the "o" pipe the "s" pipe can be scheduled.
+ 
+ 2004-07-27  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-alias.c (create_name_tags): Ignore pointers that
+ 	don't have PT_VARS nor PT_MALLOC set.
+ 	Clear name tag from pointers that have not been dereferenced.
+ 	(set_pt_anything, set_pt_malloc): Forward declare.
+ 	* tree-ssa-copy.c (may_propagate_copy): Compare alias sets,
+ 	not type compatibility when determining if a pointer can be
+ 	copy propagated.
+ 
+ 2004-07-27  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* expr.h (canonicalize_condition, get_condition): Add an int argument.
+ 	* gcse.c (fis_get_condition): Reimplement using get_condition, leaving
+ 	it to check whether the condition is still valid at the jump insn.
+ 	* ifcvt.c (noce_get_condition): Likewise.
+ 	(noce_get_alt_condition): Update call to canonicalize_condition.
+ 	* loop-iv.c (simplify_using_initial_values): Update call to
+ 	get_condition.  Remove FIXME.
+ 	(check_simple_exit): Update call to get_condition.
+ 	* loop-unswitch.c (may_unswitch_on): Likewise.
+ 	* loop.c (check_dbra_loop): Likewise.
+ 	(canonicalize_condition, get_condition): Add an argument to say whether
+ 	the condition must still be valid at INSN.
+ 	(get_condition_for_loop): Update call to get_condition.  Require that
+ 	the condition be valid at INSN.
+ 	* predict.c (estimate_probability): Update call to get_condition.
+ 	Remove unused earliest parameter.
+ 	(expected_value_to_br_prob): Update call to canonicalize_condition.
+ 
+ 2004-07-26  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* tree-dfa.c (add_referenced_var): Register initializers of global
+ 	variables.
+ 
+ 2004-07-26  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* config/i386/i386.c (function_arg): Always treat 8-
+ 	and 16-byte wide vectors the same, even if MMX/SSE
+ 	are disabled.
+ 	(contains_128bit_aligned_vector_p): Add comment.
+ 
+ 2004-07-26  J"orn Rennecke <joern.rennecke@superh.com>
+ 
+ 	* ra.h (enum node_type): Rename to:
+ 	(enum ra_node_type).
+ 	* ra-colorize.c: Likewise.
+ 
+ 2004-07-26  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* cfgcleanup.c (try_simplify_condjump): Call update_forwarder_flag
+ 	after simplifying the jump.
+ 
+ 2004-06-26  Richard Henderson  <rth@redhat.com>
+ 
+ 	* calls.c (combine_pending_stack_adjustment_and_call): Make
+ 	preferred_unit_stack_boundary argument unsigned.  Make
+ 	unadjusted_alignment unsigned.
+ 	(expand_call): Make preferred_stack_boundary and
+ 	preferred_unit_stack_boundary variables unsigned.
+ 	* function.c (assign_stack_local_1): Make alignment unsigned.
+ 	* function.h (struct function): Make stack_alignment_needed,
+ 	preferred_stack_boundary unsigned.
+ 	* config/i386/i386.c (ix86_preferred_stack_boundary): Make unsigned.
+ 	(ix86_compute_frame_layout): Make stack_alignment_needed,
+ 	preferred_alignment variables unsigned.
+ 	* config/i386/i386.h (ix86_preferred_stack_boundary): Make unsigned.
+ 
+ 2004-07-26  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* tree.h: Fix typo in comment.
+ 
+ 2004-07-26  Daniel Jacobowitz  <dan@debian.org>
+ 
+ 	PR bootstrap/12804
+ 	* ggc-zone.c (struct alloc_chunk): Remove attribute packed.
+ 	(MAX_FREE_BIN_SIZE): Increase on 64-bit targets.
+ 	(ggc_free): Remove incorrect freeing.
+ 	(sweep_pages): Advance PP for large pages.  Fix indentation.
+ 
+ 2004-07-26  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	PR rtl-optimization/16643
+ 	* cfglayout.h (cfg_layout_initialize): Add a flags parameter.
+ 	* cfglayout.c (cfg_layout_initialize): Pass it to cleanup_cfg.
+ 	* basic-block.h (reorder_basic_blocks): Add a flags parameter.
+ 	* cfglayout.c (reorder_basic_blocks): Pass it to cfg_layout_initialize.
+ 	(partition_hot_cold_basic_blocks): Pass 0 to cfg_layout_initialize.
+ 	* function.c (thread_prologue_and_epilogue_insns): Likewise.
+ 	* rtl.h (tracer): Add a flags parameter.
+ 	* tracer.c (tracer): Pass it to cfg_layout_initialise.
+ 	* passes.c (rest_of_handle_stack_regs): Pass 0 to reorder_basic_blocks.
+ 	(rest_of_handle_reorder_blocks): Update calls to tracer and
+ 	reorder_basic_blocks, passing CLEANUP_UPDATE_LIFE if appropriate.
+ 	(rest_of_handle_tracer): Pass 0 to tracer.
+ 	(rest_of_handle_loop2): Pass 0 to cfg_layout_initialize.
+ 
+ 2004-07-25  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	PR target/16239
+ 	* config/rs6000/rs6000.md (movdi_internal64): Further disparage
+ 	f->f.
+ 
+ 2004-07-24  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* tree.h (BINFO_BASE_ACCESSES): Accesses are a VEC(tree).
+ 	(BINFO_BASE_ACCESS): Adjust.
+ 	(BINFO_BASE_ACCESS_APPEND): New.
+ 	(struct tree_binfo): Make base_accesses a VEC(tree) pointer.
+ 	* dbxout.c (dbxout_type): Adjust binfo access accessing.
+ 	* dwarf2out.c (gen_member_die): Likewise.
+ 	* tree-dump.c (deque_and_dump): Likewise.
+ 
+ 2004-07-26  Falk Hueffner  <falk@debian.org>
+ 
+ 	* config/alpha/alpha.c (alpha_rtx_cost_data): Tweak int_div
+ 	costs.
+ 
+ 2004-07-25  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* config/i386/i386.c (output_fp_compare): Use ffreep to pop top
+ 	value off of the stack if TARGET_USE_FFREEP.
+ 
+ 2004-07-26  Bernardo Innocenti  <bernie@develer.com>
+ 
+ 	* gengtype.c (oprintf): Replace xrealloc () with XRESIZEVEC ().
+ 	* gengtype-yacc.y: Likewise.  Replace free() with XDELETE ().
+ 	* c-typeck.c (PUSH_SPELLING): Remove redundant NULL-pointer
+ 	check on invocation of XRESIZEVEC ().
+ 
+ 2004-07-26  Bernardo Innocenti  <bernie@develer.com>
+ 
+ 	* c-common.c (disable_builtin_function): Rename variable n to
+ 	new_disabled_builtin.
+ 	* c-decl.c (duplicate_decls): Rename parameter decl to new_decl.
+ 	Rename local variable old to old_decl.
+ 	* gensupport.c (shift_output_template): Rename parameter old to src.
+ 	* simplify-rtx.c (simplify_replace_rtx): Rename parameter oldx to
+ 	old_rtx and newx to new_rtx.
+ 
+ 2004-07-26  Bernardo Innocenti  <bernie@develer.com>
+ 
+ 	* Makefile.in (C_PRAGMA_H): New variable to track dependencies
+ 	of c-pragma.h.
+ 	* c-pragma.h (c_lex, c_lex_with_flags): Change returntype to
+ 	enum cpp_ttype.
+ 	* c-lex.c: Likewise.
+ 
+ 2004-07-25  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* fold-const.c (constant_boolean_node): Make extern.
+ 	(make_range): Wrap long lines.
+ 	(fold_cond_expr_with_comparison): Remove unnecessary call to
+ 	pedantic_non_lvalue.  Add missing calls to fold_convert.
+ 	(fold_truthop): Add missing calls to fold_convert.
+ 	(fold): Likewise.
+ 	* tree.h (constant_boolean_node): Add prototype here.
+ 	* builtins.c (expand_builtin_strncmp): Add missing calls to
+ 	fold_convert.
+ 	* tree-ssa-dom.c (record_equivalences_from_incoming_edge):
+ 	Call fold_convert and constant_boolean_node to correct types.
+ 	* tree-ssa-forwprop.c (substitute_single_use_vars): Add
+ 	missing call to fold_convert to correct types.
+ 
+ 2004-07-26  Niall Douglas  <s_fsfeurope2@nedprod.com>
+ 	    Brian Ryner  <bryner@brianryner.com>
+ 
+ 	PR c++/9283
+ 	PR c++/15000
+ 	* c-common.c (c_common_attribute_table): Allow
+ 	handle_visibility_attribute to be called for types.
+ 	(handle_visibility_attribute) When given a type, set the visibility
+ 	bits on the TYPE_NAME.  When given a decl, don't set no_add_attrs
+ 	so that we can check later whether the attribute was present. Added
+ 	warning if attribute applied to non class type.
+ 	* c-decl.c (diagnose_mismatched_decls): Updated rules for merging
+ 	decls and checking that they are consistent.
+ 	* common.opt: Added -fvisibility.
+ 	* c.opt, c-opts.c: Added -fvisibility-inlines-hidden.
+ 	* c-pragma.h, c-pragma.c: Added handle_pragma_visibility().
+ 	* flags.h, tree.h: Added assorted support defines for overall patch
+ 	* opts.c: Added parsing support for -fvisibility.
+ 	* tree.c (build_decl): Set visibility for all decls to be whatever
+ 	is in force at that time.
+ 	* varasm.c (default_binds_local_p_1): Reworked logic determining
+ 	when to make a symbol locally bound.
+ 	* doc/invoke.texi: Added documentation for -fvisibility and
+ 	-fvisibility-inlines-hidden.
+ 
+ 2004-07-25  Bernardo Innocenti  <bernie@develer.com>
+ 
+ 	* basic-block.h (reorder_block_def): Rename to reorder_block_def_p.
+ 	* c-common.c: Add missing casts from void * to other types.
+ 	* c-decl.c: Likewise.
+ 	* c-format.c: Likewise.
+ 	* c-lex.c: Likewise.
+ 	* c-pragma.c: Likewise.
+ 	* c-typeck.c: Likewise.
+ 	* defaults.h: Likewise.
+ 	* genconstants.c: Likewise.
+ 	* gengtype-lex.l: Likewise.
+ 	* genmodes.c: Likewise.
+ 	* read-rtl.c: Likewise.
+ 	* rtl.c: Likewise.
+ 
+ 2004-07-25  Bernardo Innocenti  <bernie@develer.com>
+ 
+ 	* bitmap.c: Use type-safe memory allocation macros from libiberty.
+ 	* c-common.c: Likewise.
+ 	* c-decl.c: Likewise.
+ 	* c-lang.c: Likewise.
+ 	* c-lex.c: Likewise.
+ 	* c-opts.c: Likewise.
+ 	* c-parse.in: Likewise.
+ 	* c-typeck.c: Likewise.
+ 	* genconditions.c: Likewise.
+ 	* gengtype-lex.l: Likewise.
+ 	* gengtype-yacc.y: Likewise.
+ 	* gengtype.c: Likewise.
+ 	* genmodes.c: Likewise.
+ 	* gensupport.c: Likewise.
+ 	* read-rtl.c: Likewise.
+ 	* read-rtl.c (read_constants): Use INSERT instead of TRUE in call to
+ 	htab_find_slot().
+ 
+ 2004-07-25  Bernardo Innocenti  <bernie@develer.com>
+ 
+ 	* c-decl.c (groktypename, groktypename_in_param_context): Rename
+ 	variable typename to type_name.
+ 	* c-lex.c (interpret_float): Likewise.
+ 
+ 2004-07-25  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* convert.c (convert_to_real, convert_to_integer,
+ 	convert_to_complex): Replace calls to build with calls to buildN.
+ 	* coverage.c (tree_coverage_counter_ref): Likewise.
+ 	* dojump.c (do_jump): Likewise.
+ 	* dwarf2out.c (loc_descriptor_from_tree): Likewise.
+ 	* emit-rtl.c (component_ref_for_mem_expr,
+ 	set_mem_attributes_minus_bitpos): Likewise.
+ 	* explow.c (update_nonlocal_goto_save_area): Likewise.
+ 	* expmed.c (expand_shift, make_tree, const_mult_add_overflow_p,
+ 	expand_mult_add): Likewise.
+ 	* expr.c (emit_block_move_via_libcall, clear_storage_via_libcall,
+ 	store_constructor, get_inner_reference, expand_expr_real_1,
+ 	try_casesi, try_tablejump): Likewise.
+ 	* function.c (expand_function_start): Likewise.
+ 	* stmt.c (emit_case_bit_tests, expand_end_case_type,
+ 	node_has_low_bound, node_has_high_bound, emit_case_nodes): Likewise.
+ 	* stor-layout.c (place_union_field, layout_type): Likewise.
+ 	* tree.c (substitute_in_expr, tree_fold_gcd): Likewise.
+ 	* varasm.c (copy_constant): Likewise.
+ 
+ 2004-07-25  Bernardo Innocenti  <bernie@develer.com>
+ 
+ 	* c-common.c: Rename all identifiers named `new'.
+ 	* c-decl.c: Likewise.
+ 	* gensupport.c: Likewise.
+ 	* simplify-rtx.c: Likewise.
+ 	* c-common.c (disable_builtin_function): Replace a call to xmalloc()
+ 	with XNEW().
+ 	* gensupport.c (alter_output_for_insn): Replace two calls to xmalloc()
+ 	with XNEWVEC().
+ 
+ 2004-07-25  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	PR c/15360
+ 	* c-decl.c (start_decl): Do not set DECL_EXTERNAL for initialized
+ 	declarations until after calling pushdecl.
+ 	(grokdeclarator): Set DECL_EXTERNAL for variables based on use of
+ 	"extern" and not on whether the declaration is initialized.
+ 
+ 2004-07-25  Daniel Jacobowitz  <dan@debian.org>
+ 
+ 	* config.gcc (i[34567]86-*-solaris2*, sparc64-*-solaris2*)
+ 	(sparc-*-solaris2*): Include sol2.o and sol2-protos.h.
+ 	* config/sol2-c.c: Include "tm.h", "tm_p.h", "toplev.h",
+ 	"cpplib.h", "c-pragma.h", "c-common.h".
+ 	(solaris_pragma_align, solaris_pragma_init, solaris_pragma_fini)
+ 	(solaris_register_pragmas): New functions.
+ 	* config/sol2-protos.h: New file.
+ 	* config/sol2.c: New file.
+ 	* config/sol2.h (SOLARIS_ATTRIBUTE_TABLE, ASM_DECLARE_FUNCTION_SIZE)
+ 	(REGISTER_TARGET_PRAGMAS): New macros.
+ 	(solaris_pending_aligns, solaris_pending_inits)
+ 	(solaris_pending_finis): New variables.
+ 	* config/t-sol2 (sol2-c.o): Update dependencies.
+ 	(sol2.o): New rule.
+ 	* config/i386/i386.c (TARGET_INSERT_ATTRIBUTES): Define in terms of
+ 	SUBTARGET_INSERT_ATTRIBUTES.
+ 	(ix86_attribute_table): Include SUBTARGET_ATTRIBUTE_TABLE.
+ 	* config/i386/sol2.h (SUBTARGET_INSERT_ATTRIBUTES)
+ 	(SUBTARGET_ATTRIBUTE_TABLE, ASM_OUTPUT_CALL): Define.
+ 	* config/sparc/elf.h (ASM_DECLARE_FUNCTION_SIZE): Redefine.
+ 	* config/sparc/sp64-elf.h (ASM_DECLARE_FUNCTION_SIZE): Redefine.
+ 	* config/sparc/sol2.h (SUBTARGET_INSERT_ATTRIBUTES)
+ 	(SUBTARGET_ATTRIBUTE_TABLE, ASM_OUTPUT_CALL): Define.
+ 	* config/sparc/sparc.c (sparc_attribute_table): New.
+ 	(TARGET_INSERT_ATTRIBUTES): Define in terms of
+ 	SUBTARGET_INSERT_ATTRIBUTES.
+ 	(TARGET_ATTRIBUTE_TABLE): Define if SUBTARGET_ATTRIBUTE_TABLE
+ 	is defined.
+ 	* doc/extend.texi (Solaris Pragmas): New section.
+ 
+ 2004-07-25  Bernardo Innocenti  <bernie@develer.com>
+ 
+ 	* c-common.c: Rename all identifiers named `class' to `cl'.
+ 	* c-common.h: Likewise.
+ 	* c-parse.in: Likewise.
+ 	* c-typeck.c: Likewise.
+ 	* genmodes.c: Likewise.
+ 	* real.c: Likewise.
+ 	* real.h: Likewise.
+ 	* recog.c: Likewise.
+ 	* recog.h: Likewise.
+ 	* regrename.c: Likewise.
+ 	* tree.h: Likewise.
+ 	* c-common.c (builtin_function_2): Change type of 5th parameter from
+ 	int to enum built_in_function. Change type of 8th parameter from int
+ 	to bool.
+ 	* c-decl (builtin_function): Replace call to ggc_alloc_cleared ()
+ 	with GGC_CNEW().
+ 	* c-typeck.c (convert_arguments): Change type of formal_prec from
+ 	int to unsigned int.
+ 	* genmodes.c (blank_mode): Make a few negative constants unsigned.
+ 	(complete_all_modes, calc_wider_mode, emit_insn_modes_h,
+ 	emit_mode_name, emit_mode_class, emit_mode_precision, emit_mode_size,
+ 	emit_mode_nunits, emit_mode_wider, emit_mode_mask, emit_mode_inner,
+ 	emit_mode_base_align, emit_class_narrowest_mode): Pass an integer
+ 	iterator to for_all_modes () instead of an enum because enums can't
+ 	be incremented in C++.
+ 
+ 
+ 2004-07-25  Daniel Jacobowitz  <dan@debian.org>
+ 
+ 	* regmove.c (optimize_reg_copy_1): Don't try to replace call-used
+ 	hard registers.
+ 
+ 2004-07-25  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* tree-ssa-operands.c (get_stmt_operands, get_expr_operands):
+ 	Handle ARRAY_RANGE_REF like ARRAY_REF.
+ 
+ 2004-07-25  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-typeck.c (digest_init): Don't allow arrays of signed or
+ 	unsigned variants of wchar_t to be initialized by wide string
+ 	constants.  Do allow arrays of enumerated types compatible with
+ 	wchar_t to be initialized by wide string constants.  Refine tests
+ 	distinguishing wide and narrow strings and arrays.  Give specific
+ 	error for arrays of other integer types initialized by string
+ 	constants.
+ 	(output_init_element, process_init_element): Check for
+ 	INTEGRAL_TYPE_P rather than just for INTEGER_TYPE when
+ 	initializing with string constants.
+ 
+ 2004-07-25  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-decl.c (start_function): Set DECL_ARTIFICIAL and DECL_IGNORED_P
+ 	on the RESULT_DECL.
+ 	* cgraphunit.c (cgraph_build_static_cdtor): Likewise.
+ 	* integrate.c (copy_decl_for_inlining): Copy DECL_ARTIFICIAL and
+ 	DECL_IGNORED_P to new decl.
+ 
+ 2004-07-24  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* config/ia64/ia64.c (general_xfmode_operand)
+ 	(destination_xfmode_operand): Delete.
+ 	* config/ia64/ia64.h (PREDICATE_CODES): Remove them.
+ 	* config/ia64/ia64.md (*movxf_internal): Use general_operand
+ 	and destination_operand.
+ 
+ 2004-07-24  Alexander Kabaev  <kan@freebsd.org>
+ 
+ 	* config/ia64/ia64.h (SUBTARGET_EXTRA_SPECS): Default to nothing.
+ 	(EXTRA_SPECS): Use SUBTARGET_EXTRA_SPECS.
+ 
+ 2004-07-24  Alexander Kabaev  <kan@freebsd.org>
+ 	    Zack Weinberg  <zack@codesourcery.com
+ 
+ 	PR 16684
+ 	* c-decl.c (diagnose_mismatched_decls): Don't issue a
+ 	redundant-declaration warning the first time a builtin is
+ 	declared explicitly.
+ 
+ 2004-07-25  Bernardo Innocenti  <bernie@develer.com>
+ 
+ 	* tree.h (staticp): Change return type to bool.
+ 
+ 2004-07-25  Bernardo Innocenti  <bernie@develer.com>
+ 
+ 	* c-common.c (c_staticp): Last episode of the staticp saga.
+ 
+ 2004-07-25  Bernardo Innocenti  <bernie@develer.com>
+ 
+ 	* c-common.h (c_staticp): Change return type from int to bool.
+ 	* tree.c (staticp): Likewise.
+ 	* langhooks.h (staticp): Likewise.
+ 
+ 2004-07-25  Bernardo Innocenti  <bernie@develer.com>
+ 
+ 	* langhooks-def.h (lhd_staticp): Change return type from int to
+ 	bool in prototype to match definition.
+ 
+ 2004-07-25  Bernardo Innocenti  <bernie@develer.com>
+ 
+ 	* system.h (bool, true, false): Don't redefine as preprocessor macros
+ 	in C++.
+ 
+ 2004-07-24  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* expmed.c (init_expmed): A signed modulus by a power of two is
+ 	considered cheap if its less than or equal to four instructions.
+ 
+ 2004-07-25  Bernardo Innocenti  <bernie@develer.com>
+ 
+ 	* ggc.h (GGC_NEW, GGC_CNEW, GGC_NEWVEC, GGC_CNEWVEC, GGC_NEWVAR,
+ 	GGC_CNEWVAR): New macros.
+ 
+ 2004-07-25  Bernardo Innocenti  <bernie@develer.com>
+ 
+ 	* c-common.c: Convert ATTRIBUTE_UNUSED to ARG_UNUSED in parameter
+ 	lists.
+ 	* c-decl.c: Likewise.
+ 	* c-format.c: Likewise.
+ 	* c-lex.c: Likewise.
+ 	* c-opts.c: Likewise.
+ 	* c-pragma.c: Likewise.
+ 	* c-typeck.c: Likewise.
+ 	* gencheck.c: Likewise.
+ 	* genconditions.c: Likewise.
+ 	* genconfig.c: Likewise.
+ 	* genflags.c: Likewise.
+ 	* gengtype.c: Likewise.
+ 	* gensupport.c: Likewise.
+ 	* ggc-none.c: Likewise.
+ 	* langhooks.c: Likewise.
+ 	* statistics.h: Likewise.
+ 	* stub-objc.c: Likewise.
+ 	* java/decl.c: Likewise.
+ 
+ 2004-07-24  Roman Zippel  <zippel@linux-m68k.org>
+ 
+ 	* config/m68k/m68k.c (output_scc_di): Fix coding style.
+ 	(symbolic_operand): Fix prototype.
+ 	* config/m68k/m68k.h (PREDICATE_CODES): Add symbolic_operand.
+ 	* config/m68k/m68k.md: Add constants for registers a0 and sp and
+ 	use them, change from the "{...}" syntax to the simpler {...}
+ 	syntax.
+ 	(*cfv4_extendqisi2): Fix destination predicate.
+ 	* config/m68k/m68k-protos.h: Remove various declarations also
+ 	generated via PREDICATE_CODES.
+ 
+ 2004-07-23  Mike Stump  <mrs@apple.com>
+ 
+ 	* c-typeck.c (convert_for_assignment): Tightened up pointer
+ 	converstions that differ in signedness.
+ 
+ 2004-07-23  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* genmodes.c (make_vector_modes): Mark with ATTRIBUTE_UNUSED.
+ 
+ 2004-07-23  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* tree.def (VIEW_CONVERT_EXPR): Change to class 'r'.
+ 	* tree-ssa-operands.c (get_expr_operands, case VIEW_CONVERT_EXPR): New.
+ 
+ 	* gimplify.c (gimplify_compound_lval): Check for no handled
+ 	operations, rather than checking for explicit list of nodes.
+ 	(is_gimple_addr_expr_arg_or_indirect): New function.
+ 	(gimplify_addr_expr): Call it and handle INDIRECT_REF; remove
+ 	redundant setting of TREE_INVARIANT.
+ 	(gimplify_expr, case VIEW_CONVERT_EXPR): Call gimplify_compound_lval.
+ 	* tree-gimple.c (is_gimple_addr_expr_arg): Call handled_component_p.
+ 
+ 2004-07-23  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	PR tree-optimization/16688
+ 	PR tree-optimization/16689
+ 	* tree-ssa-alias.c (setup_pointers_and_addressables): Remove
+ 	unnecessary initialization of 'tag'.
+ 	(get_tmt_for): Check that the new type tag has the same alias
+ 	set as the pointed-to type.
+ 	(group_aliases): Only regular variables need to be removed
+ 	from the alias set of a name tag.
+ 	* tree-ssa-copy.c (may_propagate_copy): Do not allow copy
+ 	propagation if the two types are not compatible.
+ 	(merge_alias_info): Rename from replace_ssa_names_ann.
+ 	Add more checking.
+ 	(replace_exp_1): If both arguments are SSA_NAMEs, check that
+ 	the propagation can be done.
+ 	Only call merge_alias_info on pointers.
+ 	(propagate_value): Likewise.
+ 	* tree-ssa-copyrename.c: Include langhooks.h.
+ 	(copy_rename_partition_coalesce): Call replace_ssa_name_symbol
+ 	to do the merging.
+ 	Do not coalesce variables with incompatible types.
+ 	(rename_ssa_copies): Call replace_ssa_name_symbol.
+ 	* tree-ssa.c (verify_ssa_name): Verify that the SSA_NAME has
+ 	the same type as the underlying _DECL.
+ 	* tree-ssanames.c (replace_ssa_name_symbol): New function.
+ 	* tree.h (replace_ssa_name_symbol): Declare.
+ 
+ 2004-07-23  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR c++/16277
+ 	* gimplify.c (gimplify_cond_expr): Gimplify TARGET to a min_lval;
+ 	unshare it properly.
+ 	(gimplify_modify_expr_rhs): Push assignment from a conditional into
+ 	the conditional for all non-register types.
+ 
+ 2004-07-23  Richard Henderson  <rth@redhat.com>
+ 
+ 	* expr.c (expand_expr_real_1): Don't handle non-local variables.
+ 	* expr.h (fix_lexical_addr): Remove.
+ 	* function.c (NEED_SEPARATE_AP): Remove.
+ 	(fix_lexical_addr): Remove.
+ 	* tree-alias-common.c (get_alias_var_decl): Check TREE_STATIC,
+ 	not null decl_function_context.
+ 	(create_alias_vars): Likewise.
+ 	* tree-cfg.c (make_ctrl_stmt_edges): Don't check for non-local labels.
+ 	(simple_goto_p): Likewise.
+ 	* tree-dfa.c (add_referenced_var): Don't check for non-local variables.
+ 	* tree-ssa-ccp.c (get_default_value): Likewise.
+ 	* tree-tailcall.c (suitable_for_tail_opt_p): Likewise.
+ 	* tree.c (needs_to_live_in_memory): Likewise.
+ 	* tree-flow-inline.h (may_be_aliased): Move...
+ 	* tree-ssa-alias.c (may_be_aliased): ... here.  Enhance check for
+ 	when TREE_STATIC variables may be addressable.
+ 
+ 2004-07-24  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* Makefile.in (site.exp): Add HOSTCC and HOSTCFLAGS to site.exp.
+ 
+ 2004-07-23  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* print-rtl.c (print_rtx <case 'b'>): Don't attempt to print
+ 	bitmap contents if GENERATOR_FILE is defined.
+ 	* Makefile.in (BUILD_RTL): Remove $(BUILD_PREFIX)bitmap.o.
+ 	($(BUILD_PREFIX_1)bitmap.o): Delete rule.
+ 
+ 2004-07-23  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-decl.c (start_function): Form composite type of function types
+ 	rather than copying type from previous prototype declaration.
+ 
+ 2004-07-23  Janis Johnson  <janis187@us.ibm.com>
+ 
+ 	* config/rs6000/altivec.h (vec_lvewx, vec_lvehx, vec_lvwbx): Remove
+ 	the const qualifier for the second argument in the C++ functions.
+ 
+ 	* config/rs6000/altivec.h (vec_stvewx, vec_stvehx, vec_stvebx): Use
+ 	specific pointer types.
+ 
+ 	* config/rs6000/altivec.h (vec_vadduwm): (vec_vadduwm, vec_vadduhm,
+ 	vec_vaddubm, vec_vsubuwm, vec_vsubuhm, vec_vsububm): Fix types used
+ 	for vector bool and/or vector pixel, add C++ and C missing support.
+ 	(vec_vaddsws, vec_vaddshs, vec_vaddsbs, vec_vmaxsw, vec_vmaxsh,
+ 	vec_vmaxsb, vec_vmrghw, vec_vmrghh, vec_vmrghb, vec_vmrglw, vec_vmrglh,
+ 	vec_vmrglb, vec_vminsw, vec_vminsh, vec_vminsb, vec_vpkuwum,
+ 	vec_vpkuhum, vec_vspltw, vec_vsplth, vec_vspltb, vec_vsubsws,
+ 	vec_vsubshs, vec_vsubsbs, vec_vupklsh, vec_vupkhsh, vec_vupklsb): Add
+ 	missing C++ and C support for vector bool and/or vector pixel.
+ 	(vec_vadduws, vec_vadduhs, vec_vaddubs, vec_vcmpeqfp, vec_vcmpequw,
+ 	vec_vcmpequh, vec_vcmpequb, vec_vcmpgtfp, vec_vcmpgtsw, vec_vcmpgtuw,
+ 	vec_vcmpgtsh, vec_vcmpgtuh, vec_vcmpgtsb, vec_vcmpgtub, vec_vmaxuw,
+ 	vec_vmaxuh, vec_vmaxub, vec_vminuw, vec_vminuh, vec_vminub,
+ 	vec_vsubuws, vec_vsubuhs, vec_vsububs, vec_vupkhpx, vec_vupklpx): Fix
+ 	C++ and C types used for vector bool and/or vector pixel.
+ 	(vec_st, vec_stl): Add C++ support for vector pixel.
+ 	(vec_unpackh, vec_unpackl, vec_any_ge): Fix C++ support for vector bool.
+ 	(vec_all_ne): Add C++ support for vector pixel.
+ 
+ 	* config/rs6000/altivec.h (vec_vcmpgtsh): Fix C++ function name.
+ 	(vec_vmulesb): Add missing C++ function.
+ 	(vec_perm): Fix type of third argument in C++ function.
+ 	(vec_vsum4shs): Fix C++ function name.
+ 	(vec_any_ge): Remove C++ functions for unsupported arg combinations.
+ 	(vec_vcmpgtsw, vec_vcmpgtuw, vec_minsb, vec_vmsummbm): Fix the
+ 	argument passed to the error handler in C macro.
+ 	(vec_nmsub): Remove extra parens around argument names in C macro.
+ 	(vec_packpx): Add missing parens in C macro.
+ 
+ 2004-07-22  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* machmode.def: Remove vector modes.
+ 	* config/alpha/alpha-modes.def: Add supported vector modes.
+ 	* config/arm/arm-modes.def: Likewise.
+ 	* config/frv/frv-modes.def: Likewise.
+ 	* config/i386/i386-modes.def: Likewise.
+ 	* config/rs6000/rs6000-modes.def: Likewise.
+ 	* config/sh/sh-modes.def: Likewise.
+ 
+ 2004-07-23  Matthias Klose  <doko@debian.org>
+ 
+ 	* intl.c (gcc_init_libintl): Use PACKAGE for the text domain.
+ 	* configure.ac: Add AC_DEFINE_UNQUOTED for PACKAGE.
+ 	* config.h: Regenerate.
+ 	* configure: Likewise.
+ 
+ 2004-07-22  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* dwarf2out.c (output_call_frame_info): Set SYMBOL_FLAG_LOCAL on
+ 	generated SYMBOL_REFs for labels.
+ 	* config/darwin-protos.h (machopic_validate_stub_or_non_lazy_ptr):
+ 	Change prototype.
+ 	(machopic_stub_name): Remove.
+ 	(machopic_indirection_name): New function.
+ 	(machopic_mcount_stub_name): Likewise.
+ 	(machopic_classify_name): Remove.
+ 	(machopic_function_base_sym): New function.
+ 	(machpoic_classify_symbol): Likewise.
+ 	(machopic_classify_ident): Remove.
+ 	(machopic_define_ident): Likewise.
+ 	(machopic_define_name): Likewise.
+ 	(machopic_name_defined_p): Likewise.
+ 	(machopic_ident_defined_p): Likewise.
+ 	(darwin_strip_name_encoding): Likewise.
+ 	(machopic_define_symbol): New function.
+ 	* config/darwin.c (hashtab.h): Include.
+ 	(machopic_defined_list): Remove.
+ 	(machopic_classify_ident): Likewise.
+ 	(machopic_classify_name): Likewise.
+ 	(machopic_ident_defined_p): Likewise.
+ 	(machopic_define_ident): Likewise.
+ 	(machopic_define_name): Likewise.
+ 	(machopic_symbol_defined_p): New function.
+ 	(machopic_classify_symbol): Likewise.
+ 	(machopic_data_defined_p): Use machopic_classify_symbol.
+ 	(machopic_define_symbol): New function.
+ 	(machopic_function_base_sym): New function.
+ 	(machopic_non_lazy_pointers): Remove.
+ 	(machopic_non_lazy_ptr_name): Likewise.
+ 	(machopic_stubs): Likewise.
+ 	(machopic_stub_name): Likewise.
+ 	(NON_LAZY_POINTER_SUFFIX): New macro.
+ 	(STUB_SUFFIX): Likewise.
+ 	(machopic_indirection): New structure.
+ 	(machopic_indirections): New variable.
+ 	(machopic_indirection_hash): New function.
+ 	(machopic_indirection_eq): Likewise.
+ 	(machopic_indirection_name): Likewise.
+ 	(machopic_mcount_stub_name): New function.
+ 	(machopic_validate_stub_or_non_lazy_pointer): Reimplement to use
+ 	hash table.
+ 	(machopic_indirect_data_reference): Rework to use new functions.
+ 	(machopic_indirect_call_target): Likewise.
+ 	(machopic_legitimize_pic_address): Likewise.
+ 	(machopic_output_indirection): New function.
+ 	(machopic_finish): Use it.
+ 	(machopic_operand_p): Rework to use new functions.
+ 	(darwin_encode_seciton_info): Use SYMBOL_REF_FLAGS.
+ 	(darwin_strip_name_encoding): Remove.
+ 	(update_non_lazy_ptrs): Remove.
+ 	(update_stubs): Likewise.
+ 	(darwin_non_lazy_pcrel): Use new functions.
+ 	* config/darwin.h (ASM_DECLARE_OBJECT_NAME): Likewise.
+ 	(ASM_OUTPUT_LABELREF): Likewise.
+ 	(ASM_OUTPUT_ALIGNED_DECL_LOCAL): Likewise.
+ 	(MACHO_SYMBOL_FLAG_VARIABLE): New macro.
+ 	(MACHO_SYMBOL_FLAG_DEFINED): Likewise.
+ 	(TARGET_STRIP_NAME_ENCODING): Do not use
+ 	darwin_strip_name_encoding.
+ 	(GEN_LAZY_PTR_NAME_FOR_SYMBOL): Do not use
+ 	darwin_strip_name_encoding.
+ 	* config/i386/darwin.h (FUNCTION_PROFILER): Use
+ 	machopic_mcount_stub_name.
+ 	* config/i386/i386.c (x86_output_mi_thunk): Use
+ 	machopic_indirection_name, not machopic_stub_name.
+ 	* config/rs6000/rs6000.c (rs6000_legitimize_reload_address): Use
+ 	machopic_function_base_sym.
+ 	(print_operand): Use machopic_classify_symbol.
+ 	(rs6000_emit_prologue): Use machopic_function_base_sym.
+ 	(output_profile_hook): Do not use machopic_stub_name.
+ 	(macho_branch_isalnds): Do not use darwin_strip_name_encoding.
+ 
+ 2004-07-22  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	PR c/7284
+ 	* fold-const.c (extract_muldiv_1): Do not treat signed left shift
+ 	as multiplication.
+ 
+ 2004-07-22  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* doc/implement-c.texi: New file.
+ 	* doc/extend.texi (C Implementation): Move to there.
+ 	* doc/gcc.texi: Include implement-c.texi.
+ 	* Makefile.in (TEXI_GCC_FILES): Add implement-c.texi.
+ 
+ 2004-07-22  Jason Merrill  <jason@redhat.com>
+ 
+ 	* integrate.c (copy_decl_for_inlining): Remove invisible reference
+ 	handling.
+ 	* tree-inline.c (setup_one_parameter): Likewise.
+ 
+ 2004-07-22  Brian Booth  <bbooth@redhat.com>
+ 
+ 	* tree-ssa-ccp.c (latticevalue): Add UNKNOWN_VAL.
+ 	(substitute_and_fold): Propigate into VUSE operands when possible.
+ 	(visit_phi_node): Handle UNKNOWN_VAL latticevalue.
+ 	(cp_lattice_meet): Handle merging of latticevalues when
+ 	UNKNOWN_VAL is present.
+ 	(visit_stmt): Visit assignments with V_MUST_DEFs.
+ 	(visit_assignment): Gather ccp information for V_MUST_DEF operands.
+ 	(ccp_fold): Deal with RHS' that are constant and virtual.
+ 	(evaluate_stmt): Handle UNKNOWN_VAL likely values.
+ 	(dump_lattice_value): Dump UNKNOWN_VAL latticevalues.
+ 	(initialize): Mark statements with V_MUST_DEFs as VARYING only if the
+ 	V_MUST_DEF operand is VARYING. Fix comment and include VOPS when
+ 	computing immediate uses.
+ 	(set_lattice_value): Disallow a UNKNOWN_VAL->UNDEFINED state
+ 	transition.
+ 	(replace_vuse_in): New function.
+ 	(likely_value): Add check of vuse operands.
+ 	(get_default_value): Set the default value of virtually defined
+ 	variables to UKNOWN_VAL instead of VARYING.
+ 
+ 2004-07-22  Richard Henderson  <rth@redhat.com>
+ 
+ 	* expr.c (emit_push_insn): Don't use set_mem_attributes.
+ 
+ 2004-07-22  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-ssa-live.c (create_ssa_var_map): Avoid defined-but-not-used
+ 	variables due to conditional compilation.
+ 
+ 2004-07-22  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-into-ssa.c (set_livein_block): Fix typo in comment.
+ 	(rewrite_ssa_into_ssa): Start iterating over SSA names at 1.
+ 	Release SSA names that have been re-renamed.
+ 	* tree-phinodes.c (make_phi_node): Set same TREE_TYPE as the
+ 	variable.
+ 	* tree-ssa-alias.c (init_alias_info): If aliases have been
+ 	computed before, clear existing alias information.
+ 	(create_name_tags): Do no fixup PT_ANYTHING pointers.
+ 	If the new name tag for a pointer is different than the one it
+ 	had before, mark the old tag for renaming.
+ 	(replace_may_alias): New function.
+ 	(group_aliases): Call it.
+ 	(setup_pointers_and_addressables): Always call get_tmt_for.
+ 	(maybe_create_global_var): Don't create .GLOBAL_VAR more than
+ 	once.
+ 	(set_pt_anything): New local function.
+ 	(set_pt_malloc): New local function.
+ 	(merge_pointed_to_info): Don't merge pointed-to variables from
+ 	the original pointer if the destination is pointing to an
+ 	unknown location.
+ 	(add_pointed_to_expr): Call set_pt_anything and set_pt_malloc.
+ 	(add_pointed_to_var): Do not add a variable to the points-to
+ 	set if the pointer is already pointing to anywhere.
+ 	(collect_points_to_info_r): If the defining statement is a PHI
+ 	node, only merge pointed-to information if the argument has
+ 	already been visited.
+ 	(get_tmt_for): Only create a new tag if the pointer didn't
+ 	have one already.
+ 	(dump_alias_info): Emit more information.
+ 	(dump_points_to_info_for): Likewise.
+ 	* tree-ssa-dom.c (redirect_edges_and_update_ssa_graph): Don't
+ 	try to get the annotation of an SSA_NAME.
+ 	* tree-ssa-operands.c (add_stmt_operand): Only check for empty
+ 	alias sets when checking is enabled.
+ 	* tree-ssa-pre.c (need_eh_cleanup): New local variable.
+ 	(eliminate): Mark basic blocks that will need
+ 	EH information cleaned up.
+ 	(init_pre): Split ENTRY_BLOCK->0 if block 0 has more than one
+ 	predecessor.
+ 	Initialize need_eh_cleanup.
+ 	(fini_pre): Call tree_purge_all_dead_eh_edges and
+ 	cleanup_tree_cfg if needed.
+ 	Free need_eh_cleanup.
+ 	* tree-ssa.c (verify_ssa_name): New function.
+ 	(verify_def): Call it.
+ 	Re-arrange to avoid printing too many error messages.
+ 	(verify_use): Likewise.
+ 	(verify_phi_args): Likewise.
+ 	(verify_flow_insensitive_alias_info): New function.
+ 	(verify_flow_sensitive_alias_info): New function.
+ 	(verify_alias_info): New function.
+ 	(verify_ssa): Call verify_alias_info.
+ 	Clear TREE_VISITED on all the SSA_NAMEs before scanning the
+ 	program.
+ 	Re-arrange to avoid printing too many error messages.
+ 	* tree-ssanames.c (make_ssa_name): Clear
+ 	SSA_NAME_IN_FREE_LIST.
+ 	(release_ssa_name): Never release a default definition.
+ 	(release_defs): New function.
+ 	* tree.h: Declare it.
+ 	* tree-ssa-dce.c (remove_dead_stmt): Call it.
+ 
+ 2004-07-22  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa.c (walk_use_def_chains_1): Add new argument IS_DFS.
+ 	If true, do a depth-first search.  Do a breadht-first search,
+ 	otherwise.
+ 	(walk_use_def_chains): Add new argument IS_DFS.
+ 	Update all users.
+ 	* tree-flow.h (walk_use_def_chains): Update prototype.
+ 
+ 2004-07-22  Hans-Peter Nilsson  <hp@axis.com>
+ 
+ 	* config/cris/cris.md: Tweak formatting.
+ 	(asrandb, asrandw, lsrandb, lsrandw, moversideqi, movemsideqi)
+ 	(mover2side, moverside, movemside, movei, op3, andu): Replace
+ 	live define_peephole:s with define_peephole2 near-equivalents.
+ 	Delete the rest.
+ 	("*mov_sidesisf_biap"): Rename from "*mov_sidesi_biap".  Match all
+ 	word-size modes.
+ 	("*mov_sidesisf", "*mov_sidesisf_biap_mem", "*mov_sidesisf_mem"):
+ 	Similar for "*mov_sidesi", "*mov_sidesi_biap_mem" and
+ 	"*mov_sidesi_mem" respectively.
+ 
+ 2004-07-22  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* tree-cfg.c (gimplify_val): Move from tree-complex.c.
+ 	(gimplify_build1): Move from tree-complex.c do_unop.
+ 	(gimplify_build2): Move from tree-complex.c do_binop.
+ 	(gimplify_build3): New.
+ 	* tree-complex.c (gimplify_val, do_unop, do_binop): Remove.
+ 	Adjust throughout to call the functions above.
+ 	* tree-flow.h: Declare the functions above.
+ 	* tree-nested.c (gimplify_val): Rename to...
+ 	(tsi_gimplify_val): ... this.
+ 
+ 	* Makefile.in (tree_complex.o): Update dependencies.
+ 	(stor-layout.o): Depend on regs.h.
+ 	* c-common.c (handle_vector_size_attribute): Update for
+ 	vector types without corresponding vector modes.
+ 	* expr.c (expand_expr): Treat VECTOR_CST's like CONSTRUCTORS if
+ 	a corresponding vector mode is not available.
+ 	* print-tree.c (print_node): Print nunits for vector types
+ 	* regclass.c (have_regs_of_mode): New.
+ 	(init_reg_sets_1): Initialize it and use it instead
+ 	of allocatable_regs_of_mode.
+ 	* regs.h (have_regs_of_mode): Declare it.
+ 	* stor-layout.c (layout_type): Pick a mode for vector types.
+ 	* tree-complex.c (build_word_mode_vector_type, tree_vec_extract,
+ 	build_replicated_const, do_unop, do_binop, do_plus_minus,
+ 	do_negate, expand_vector_piecewise, expand_vector_parallel,
+ 	expand_vector_addition, expand_vector_operations_1,
+ 	expand_vector_operations, tree_lower_operations,
+ 	pass_lower_vector_ssa, pass_pre_expand): New.
+ 	(expand_complex_operations, pass_lower_complex): Remove.
+ 	* tree-optimize.c (init_tree_optimization_passes): Adjust
+ 	pass ordering for changes in tree-complex.c.
+ 	* tree-pass.h: Declare new passes.
+ 	* tree.c (finish_vector_type): Remove.
+ 	(make_vector_type): New.
+ 	(build_vector_type_for_mode, build_vector_type): Rewritten.
+ 	* tree.def (VECTOR_TYPE): Document where the number of
+ 	subparts is stored.
+ 	* tree.h (TYPE_VECTOR_SUBPARTS): Use TYPE_PRECISION field.
+ 	(make_vector): Remove declaration.
+ 
+ 2004-07-21  Richard Henderson  <rth@redhat.com>
+ 
+ 	* gimple-low.c (expand_var_p): Don't look at TREE_ADDRESSABLE,
+ 	TREE_THIS_VOLATILE, may_aliases, or optimization level.
+ 	(remove_useless_vars): Dump debugging info.
+ 	(expand_used_vars): Move ...
+ 	* cfgexpand.c (expand_used_vars): ... here.  Make static.
+ 	* tree-flow-inline.h (set_is_used): New.
+ 	(set_default_def): Use get_var_ann.
+ 	* tree-flow.h: Update decls.
+ 	* tree-ssa-live.c (mark_all_vars_used_1, mark_all_vars_used): New.
+ 	(create_ssa_var_map): Use it.
+ 	* tree-ssa.c (set_is_used): Remove.
+ 
+ 2004-07-22  Ben Elliston  <bje@au.ibm.com>
+ 
+ 	* gdbinit.in: Set a breakpoint on internal_error.
+ 
+ 2004-07-21  Richard Henderson  <rth@redhat.com>
+ 
+ 	* cfgexpand.c (expand_gimple_tailcall): Fix case where we need
+ 	to create a new basic block.
+ 
+ 2004-07-22  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	PR c/15052
+ 	* c-decl.c (grokdeclarator): Only pedwarn for qualified void
+ 	return type on function definitions.  Move other warnings for
+ 	qualified return type to -Wreturn-type.  Do not condition any such
+ 	warnings on -pedantic.  Update comments.
+ 	(start_function): Only copy function type from previous prototype
+ 	declaration if return types are compatible.
+ 	* c-typeck.c (function_types_compatible_p): Don't condition
+ 	warning for incompatibility of volatile qualifiers on the return
+ 	type on -pedantic.  Update comment.
+ 	* doc/invoke.texi (-Wreturn-type, -Wextra): Update.
+ 
+ 2004-07-22  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-typeck.c (set_init_index): Require designator to be of integer
+ 	type.
+ 
+ 2004-07-22  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	PR c/11250
+ 	* c-parse.in (init): Change to exprtype.
+ 	(primary): Set original_code for STRING to STRING_CST.
+ 	Call maybe_warn_string_init for compound literals.
+ 	(initdcl, notype_initdcl): Call maybe_warn_string_init.
+ 	(initval): Update.
+ 	* c-tree.h (maybe_warn_string_init): New.
+ 	(pop_init_level, process_init_element): Use struct c_expr.
+ 	(struct c_expr): Update comment.
+ 	* c-typeck.c (maybe_warn_string_init): New function.
+ 	(digest_init): Call it.  Additional parameter strict_string.  All
+ 	callers changed.
+ 	(output_init_element): Likewise.
+ 	(struct constructor_stack): Use struct c_expr for
+ 	replacement_value.
+ 	(really_start_incremental_init, push_init_level): Update.
+ 	(pop_init_level): Update.  Return struct c_expr.
+ 	(process_init_level): Update.  Take struct c_expr argument.
+ 
+ 2004-07-21  David S. Miller  <davem@nuts.davemloft.net>
+ 
+ 	* config/sparc/sparc.c (sparc_rtx_costs): Fix typo in previous
+ 	commit.
+ 
+ 2004-07-21  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* builtins.c (expand_builtin_setjmp_receiver): Fix comment for code
+ 	removal.
+ 	* c-decl.c (pop_scope): Ditto.
+ 	* calls.c (expand_call): Remove call to current_nesting_level,
+ 	update comment accordingly. Remove calls to expand_start_target_temps
+ 	and expand_end_target_temps.
+ 	* cfgexpand.c (construct_init_block): Remove call to
+ 	expand_start_bindings_and_block.
+ 	(construct_exit_block): Remove call to expand_end_bindings.
+ 	* expr.c (safe_from_p): Remove BIND_EXPR handling.
+ 	(expand_expr_real_1): Ditto. Fix formatting.
+ 	(expand_vars): Delete.
+ 	* stmt.c (POPSTACK): Remove block_stack.
+ 	(stmt_status): Remove x_block_stack.
+ 	(block_stack): Delete.
+ 	(expand_start_bindings_and_block): Ditto.
+ 	(expand_start_target_temps): Ditto.
+ 	(expand_end_target_temps): Ditto.
+ 	(current_nesting_level): Ditto.
+ 	(warn_about_unused_variables): Ditto.
+ 	(expand_end_bindings): Ditto.
+ 	* tree.h: Remove declarations for above.
+ 
+ 2004-07-21  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* rtl.h (insn_note): Remove NOTE_INSN_PREDICTION.
+ 	* rtl.c (note_insn_name): Likewise.
+ 	* print-rtl.c (print_rtx): Don't print it.
+ 	* cfgrtl.h (can_delete_note_p): Don't handle it.
+ 	(rtl_delete_block): Likewise.
+ 	* passes.c (rest_of_handle_guess_branch_prob): Remove.
+ 	(rest_of_compilation): Don't call it.
+ 	* predict.c (process_note_predictions, process_note_prediction,
+ 	note_prediction_to_br_prob): Remove.
+ 	* basic-block.c (note_prediction_to_br_prob): Remove prototype.
+ 	* stmt.c (return_prediction): Remove.
+ 	(expand_value_return): Don't call it.  Don't add prediction
+ 	notes for return statements.
+ 
+ 2004-07-21  Josef Zlomek  <zlomekj@suse.cz>
+ 
+ 	* var-tracking.c (vt_find_locations): Set the in_pending bitmap at
+ 	once.
+ 
+ 2004-07-21  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* c-common.c (vector_types_convertible_p): Use vector types'
+ 	TYPE_SIZE and TREE_TYPE instead of their mode.
+ 	* convert.c (convert_to_integer): Likewise.
+ 	(convert_to_vector): Likewise.
+ 	* fold-const.c (fold_convert): Likewise.
+ 	* varasm.c (output_constant): Likewise.
+ 	* expr.c (store_constructor): Split ARRAY_TYPE and VECTOR_TYPE.
+ 	Allow a VECTOR_TYPE initializer to be made of several vectors.
+ 	For ARRAY_TYPEs and VECTOR_TYPES, simplify a bit the handling
+ 	of cleared and need_to_clear, and use fold_convert.
+ 	* c-typeck.c (build_binary_op): Do not use RDIV_EXPR for
+ 	integer vectors.
+ 
+ 2004-07-20  Richard Henderson  <rth@redhat.com>
+ 
+ 	* cfgexpand.c (expand_gimple_cond_expr, expand_gimple_tailcall): Split,
+ 	(expand_gimple_basic_block): out from here.  Renamed from expand_block.
+ 
+ 2004-07-20  David S. Miller  <davem@nuts.davemloft.net>
+ 
+ 	* config/sparc/sparc.c (sparc_rtx_costs case MULT): Emit
+ 	enormous cost if not TARGET_HARD_MUL.
+ 
+ 2004-07-20  Andrew Pinski  <apinski@apple.com>
+ 
+ 	PR target/16557
+ 	* config/i386/darwin.h (CC1_SPEC): Move the -g SPECs from ...
+ 	(ASM_SPEC): here.
+ 
+ 2004-07-21  Paul brook  <paul@codesourcery.com>
+ 
+ 	* config/arm/arm.c (thumb_expand_prologue): Remove bogus GEN_INT.
+ 
+ 2004-07-20  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* fold-const.c (operand_equal_p): Temporarily support NULL args.
+ 	(operand_equal_p, case ARRAY_REF): Compare args 2 and 3.
+ 	(operand_equal_p, case COMPONENT_REF): Likewise, for arg 2.
+ 
+ 2004-07-20  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* rtl.h (plus_constant): Delete.
+ 	(plus_constant_wide): Rename to plus_constant.
+ 	(plus_constant_for_output_wide): Delete vestigial prototype.
+ 	(GEN_INT): Remove unnecessary cast.
+ 	* tree.h (build_int_2, size_int_type): Delete.
+ 	(build_int_2_wide): Rename to build_int_2.
+ 	(size_int_wide): Rename to size_int_kind.
+ 	(size_int_type_wide): Rename to size_int_type.
+ 	(size_int, ssize_int, bitsize_int, sbitsize_int): Use size_int_kind.
+ 	Remove unnecessary cast.
+ 	* tree.c (build_int_2_wide): Rename build_int_2; update comment.
+ 	* explow.c (plus_constant_wide): Rename plus_constant; update comment.
+ 	* fold-const.c (size_int_wide): Rename size_int_kind. Use size_int_type.
+ 	(size_int_type_wide): Rename size_int_type.
+ 	(int_const_binop): Use size_int_type.
+ 	* c-lex.c (interpret_integer): Use build_int_2.
+ 	* final.c (split_double): Remove unnecessary casts.
+ 	* tree-ssa-ccp.c (maybe_fold_offset_to_array_ref): Use build_int_2.
+ 
+ 2004-07-20  Richard Henderson  <rth@redhat.com>
+ 
+ 	* gimplify.c (is_gimple_tmp_var): Move to tree-gimple.c.
+ 	(gimplify_compound_lval): Use is_gimple_tmp_reg.
+ 	* tree-gimple.c (is_gimple_tmp_var): Move from gimplify.c.
+ 	(is_gimple_tmp_reg): New.
+ 	* tree-gimple.h (is_gimple_tmp_reg): Declare.
+ 
+ 2004-07-20  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-pretty-print.c (dump_generic_node): Dump
+ 	CALL_EXPR_HAS_RETURN_SLOT_ADDR.
+ 
+ 2004-07-20  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* tree-mudflap.c (mf_set_options_fndecl): New tree.
+ 	(mudflap_init): Set it.
+ 	(mudflap_register_call): Remove __mf_init call.
+ 	(mudflap_finish_file): Emit call to __mf_init here.  Emit a call to
+ 	to pass "-ignore-reads" option to libmudflap if needed.
+ 
+ 2004-07-20  John David Anglin  <dava.anglin@nrc-cnrc.gc.ca>
+ 
+ 	PR c++/14607
+ 	* config/pa/pa-hpux10.h (SUPPORTS_ONE_ONLY): Define.
+ 	(MAKE_DECL_ONE_ONLY): Undefine.
+ 	* pa-protos.h (som_text_section_asm_op, one_only_readonly_data_section,
+ 	readonly_data, one_only_data_section, forget_section): New prototypes.
+ 	* pa.c (pa_init_machine_status, som_text_section_asm_op): New
+ 	functions.
+ 	(pa_select_section): Add one-only (COMDAT) support.
+ 	* pa.h (struct machine_function): Define.
+ 	* som.h (ASM_OUTPUT_FUNCTION_PREFIX): Delete.
+ 	(TEXT_SECTION_ASM_OP): Call som_text_section_asm_op.
+ 	(DEFAULT_TEXT_SECTION_ASM_OP, NEW_TEXT_SECTION_ASM_OP,
+ 	ONE_ONLY_TEXT_SECTION_ASM_OP, ONE_ONLY_READONLY_DATA_SECTION_ASM_OP,
+ 	ONE_ONLY_DATA_SECTION_ASM_OP): New defines.
+ 	(EXTRA_SECTIONS): Add in_one_only_readonly_data and in_one_only_data.
+ 	(EXTRA_SECTION_FUNCTIONS): Rework to use individual function macros.
+ 	(READONLY_DATA_FUNCTION, ONE_ONLY_READONLY_DATA_SECTION_FUNCTION,
+ 	ONE_ONLY_DATA_SECTION_FUNCTION, FORGET_SECTION_FUNCTION): New defines
+ 	for EXTRA_SECTION_FUNCTIONS.
+ 	* doc/install.texi: Update binutils requirements.
+ 
+ 2004-07-20  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* vec.h (VEC_T_length, VEC_T_index, VEC_T_iterate, VEC_T_truncate,
+ 	VEC_T_replace, VEC_T_quick_insert, VEC_T_safe_insert,
+ 	VEC_T_ordered_remove, VEC_T_unordered_remove): Use unsigned, not
+ 	size_t.
+ 	(struct VEC): Use unsigned for num and alloc.
+ 	* vec.c (struct vec_prefix): Likewise.
+ 	(vec_o_reserve): Adjust.
+ 
+ 	* dbxout.c (dbxout_type): Fix printf format.
+ 
+ 	* tree.h (binfo_member): Remove.
+ 	* tree.c (binfo_member): Remove.
+ 
+ 2004-07-20  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* tree.h: Include vec.h
+ 	(DEF_VEC_P(tree)): New type.
+ 	(BINFO_BASE_BINFOS, BINFO_N_BASE_BINFOS, BINFO_BASE_BINFO): Adjust.
+ 	(BINFO_BASE_APPEND, BINFO_BASE_ITERATE): New.
+ 	(BINFO_LANG_SLOT): Remove.
+ 	(BINFO_SUBVTT_INDEX, BINFO_VPTR_INDEX, BINFO_PRIMARY_BASE_OF): New.
+ 	(struct tree_binfo): Turn base_binfos into a trailing
+ 	VEC(tree). Add vtt_subvtt, vtt_vptr, primary fields.
+ 	(binfo_lang_slots): Remove.
+ 	* tree.c (binfo_lang_slots): Remove.
+ 	(make_tree_binfo_stat): Take a base binfo count, not a
+ 	lang slot count.  Adjust.
+ 	* Makefile.in (TREE_H): Add vec.h
+ 	* alias.c (record_component_aliases): Adjust BINFO access.
+ 	* dbxout.c (dbxout_type): Likewise.
+ 	* dwarf2out.c (gen_member_die): Likewise.
+ 	* sdbout.c (sdbout_one_type): Likewise.
+ 	* tree-dump.c (deque_and_dump): Likewise.
+ 	* config/i386/i386.c (classify_argument,
+ 	contains_128bit_aligned_vector_p): Likewise.
+ 	* config/sh/symbian.c (symbian_export_vtable_and_rtti_p): Likewise.
+ 	* doc/c-tree.texi (Classes): Update BINFO documentation.
+ 
+ 2004-07-20  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* c-common.h (check_case_value): Remove prototype.
+ 	(c_add_case_label): Adjust prototype.
+ 	* c-common.c (check_case_value): Make static.
+ 	(check_case_bounds): New function.
+ 	(c_add_case_label): Use it.  Take new argument orig_type.
+ 	* c-typeck.c (struct c_switch): New orig_type field.
+ 	(c_start_case): Set it.
+ 	(do_case): Pass it to c_add_case_label.
+ 	* expr.c (expand_expr_real_1): Don't warn for out-of-bounds
+ 	cases from here.  Add the labels in reverse order.
+ 	* stmt.c (struct case_node): Adjust comment.  Remove balance field.
+ 	(add_case_node): Return nothing, don't check for duplicate cases.
+ 	Insert new case nodes in a list, not in an AVL tree.
+ 	(expand_end_case_type): Don't turn a case tree into a case list.
+ 	(case_tree2list): Remove.
+ 	* tree.h (add_case_node): Adjust prototype.
+ 
+ 2004-07-19  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* genattr.c (struct range, struct function_unit,
+ 	write_units, extend_range, init_range): Remove them.
+ 	(main): Remove code dealing with DEFINE_FUNCTION_UNIT.
+ 	Output "#define INSN_SCHEDULING" here.
+ 	* genattrtab.c (struct range, struct function_unit_op,
+ 	struct function_unit, struct dimension, enum operator,
+ 	operate_exp, expand_units, simplify_knowing,
+ 	encode_units_mask, simplify_by_exploding,
+ 	find_and_mark_used_attributes, unmark_used_attributes,
+ 	add_values_to_cover, increment_current_value,
+ 	test_for_current_value, simplify_with_current_value,
+ 	simplify_with_current_value_aux, gen_unit,
+ 	write_unit_name, write_function_unit_info,
+ 	write_complex_function, write_toplevel_expr,
+ 	find_single_value, extend_range): Remove.
+ 	(write_attr_get): Do not handle common_av->value
+ 	being an FFS.
+ 	(struct attr_desc): Remove func_units_p and blockage_p.
+ 	(write_attr_valueq): Do not handle them.
+ 	(find_attr): Do not clear them.
+ 	(make_internal_attr): Do not initialize them.
+ 	(main): Remove code dealing with DEFINE_FUNCTION_UNIT.
+ 	* sched-vis.c (init_target_units, insn_print_units,
+ 	init_block_visualization, print_block_visualization,
+ 	visualize_scheduled_insns, visualize_no_unit,
+ 	visualize_stall_cycles, visualize_alloc,
+ 	visualize_free, target_units, get_visual_tbl_length,
+ 	MAX_VISUAL_LINES, INSN_LEN, n_visual_lines,
+ 	visual_tbl_line_length, visual_tbl, n_vis_no_unit,
+ 	MAX_VISUAL_NO_UNIT, vis_no_unit): Remove.
+ 	* haifa-sched.c (blockage_range, clear_units,
+ 	schedule_unit, actual_hazard, potential_hazard,
+ 	insn_unit, unit_last_insn, unit_tick,
+ 	actual_hazard_this_instance, potential_hazard,
+ 	schedule_unit, max_insn_queue_index_value): Remove.
+ 	(MAX_INSN_QUEUE_INDEX): Removed, renamed throughout to
+ 	max_insn_queue_index.
+ 	* rtl.def (DEFINE_FUNCTION_UNIT): Remove.
+ 	* doc/md.texi (Processor pipeline description): Remove
+ 	references to old pipeline descriptions.
+ 	(Automaton pipeline description): Merge with the above.
+ 	(Old pipeline description, Comparison of the two descriptions):
+ 	Remove.
+ 
+ 	* bt-load.c (migrate_btr_def): Remove references to
+ 	use_pipeline_interface.
+ 	* haifa-sched.c (insn_cost, schedule_insn,
+ 	schedule_block, advance_one_cycle, sched_init,
+ 	queue_to_ready, sched_finish): Likewise.
+ 	* modulo-sched.c (sms_schedule, advance_one_cycle,
+ 	ps_has_conflicts): Likewise.
+ 	* sched-rgn.c (init_ready): Likewise.
+ 	(debug_dependencies): Likewise, and remove an "if (1)".
+ 	* target.h (use_dfa_pipeline_interface): Remove.
+ 	* config/alpha/alpha.c (TARGET_USE_DFA_PIPELINE_INTERFACE): Remove.
+ 	* config/arc/arc.c (TARGET_USE_DFA_PIPELINE_INTERFACE): Remove.
+ 	* config/arm/arm.c (TARGET_USE_DFA_PIPELINE_INTERFACE): Remove.
+ 	* config/c4x/c4x.c (TARGET_USE_DFA_PIPELINE_INTERFACE): Remove.
+ 	* config/frv/frv.c (TARGET_USE_DFA_PIPELINE_INTERFACE): Remove.
+ 	* config/i386/i386.c (TARGET_USE_DFA_PIPELINE_INTERFACE): Remove.
+ 	* config/ia64/ia64.c (TARGET_USE_DFA_PIPELINE_INTERFACE): Remove.
+ 	* config/iq2000/iq2000.c (TARGET_USE_DFA_PIPELINE_INTERFACE): Remove.
+ 	* config/m32r/m32r.c (TARGET_USE_DFA_PIPELINE_INTERFACE): Remove.
+ 	* config/mcore/mcore.c (TARGET_USE_DFA_PIPELINE_INTERFACE): Remove.
+ 	* config/mips/mips.c (TARGET_USE_DFA_PIPELINE_INTERFACE): Remove.
+ 	* config/pa/pa.c (TARGET_USE_DFA_PIPELINE_INTERFACE): Remove.
+ 	* config/rs6000/rs6000.c (TARGET_USE_DFA_PIPELINE_INTERFACE): Remove.
+ 	* config/s390/s390.c (TARGET_USE_DFA_PIPELINE_INTERFACE): Remove.
+ 	* config/sh/sh.c (TARGET_USE_DFA_PIPELINE_INTERFACE): Remove.
+ 	* config/sparc/sparc.c (TARGET_USE_DFA_PIPELINE_INTERFACE): Remove.
+ 	* config/v850/v850.c (TARGET_USE_DFA_PIPELINE_INTERFACE): Remove.
+ 	* config/xtensa/xtensa.c (TARGET_USE_DFA_PIPELINE_INTERFACE): Remove.
+ 	* doc/tm.texi (TARGET_USE_DFA_PIPELINE_INTERFACE): Remove.
+ 
+ 2004-07-19  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* rtlanal.c (reg_set_p): Add check for regs_invalidated_by_call.
+ 
+ 2004-07-19  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (single_incoming_edge_ignoring_loop_edges): New.
+ 	(get_eq_expr_value): Use it.  Simplify slightly.
+ 
+ 2004-07-19  Maciej W. Rozycki  <macro@linux-mips.org>
+ 
+ 	* config/mips/mips.md (mulsidi3_32bit_r4000): Fix the clobber list.
+ 	(umulsidi3_32bit_r4000): Likewise.
+ 
+ 2004-07-19  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* vec.h: Propagate location information properly.
+ 	(VEC_T_iterate): Add result pointer parameter.
+ 	(VEC_T_space): New.
+ 	(VEC_T_reserve): Use it.
+ 
+ 2004-07-19  Daniel Jacobowitz  <dan@debian.org>
+ 
+ 	* Makefile.in (c-format.o): Depend on c-format.h.
+ 	* c-format.h: New file.
+ 	(struct format_char_info): Add CHAIN member.
+ 	* c-format.c: Move some types and constants to c-format.h.
+ 	(format_type_error): Set to -1.
+ 	(struct function_format_info): Use an int for format_type.
+ 	(decode_format_type): Return an int.  Return format_type_error
+ 	on error.
+ 	(print_char_table, asm_fprintf_char_table, gcc_diag_char_table)
+ 	(gcc_diag_char_table, gcc_cdiag_char_table, gcc_cxxdiag_char_table)
+ 	(scan_char_table, time_char_table, monetary_char_table): Initialize
+ 	CHAIN to NULL.
+ 	(n_format_types): New variable.
+ 	(check_format_info_main): Handle CHAIN in format_char_info.
+ 	(handle_format_attribute): Handle TARGET_FORMAT_TYPES and
+ 	TARGET_N_FORMAT_TYPES.
+ 	* config.gcc (i[34567]86-*-solaris2*, sparc64-*-solaris2*)
+ 	(sparc-*-solaris2*): Include config/t-sol2 and config/sol2-c.c.
+ 	* config/sol2-c.c: New file.
+ 	* config/t-sol2: New file.
+ 	* config/sol2.h (TARGET_N_FORMAT_TYPES, TARGET_FORMAT_TYPES): Define.
+ 	* config/sparc/elf.h, config/sparc/sp64-elf.h: Undefine
+ 	TARGET_N_FORMAT_TYPES and TARGET_FORMAT_TYPES.
+ 
+ 	* doc/extend.texi (Target Format Checks): New section.
+ 	(Function Attributes): Mention it.
+ 	* doc/invoke.texi: Mention target format checks.
+ 	* doc/sourcebuild.texi: Mention target format checks.
+ 	* dc/tm.texi (Misc): Document TARGET_N_FORMAT_TYPES and
+ 	TARGET_FORMAT_TYPES.
+ 
+ 2004-07-19  Andreas Krebbel  <krebbel1@de.ibm.com>
+ 
+ 	* config/s390/s390-protos.h (s390_return_address_offset): Prototype
+ 	added.
+ 	* config/s390/s390.c (regclass_map initializer): Register 35 added to
+ 	ADDR_REGS.
+ 	(load_multiple_operation, store_multiple_operation): Removed
+ 	pointless sanity check.
+ 	(s390_decompose_address): Added check for return_address_pointer_rtx.
+ 	(s390_return_addr_rtx): Use return_address_pointer_rtx for count == 0.
+ 	(s390_return_address_offset): New function.
+ 	* config/s390/s390.h (FIRST_PSEUDO_REGISTER): Increased to 36.
+ 	(FRAME_REGNO_P): Added check for register 35.
+ 	(FIXED_REGISTERS, CALL_USED_REGISTERS, CALL_REALLY_USED_REGISTERS,
+ 	REG_ALLOC_ORDER): Appended entry for register 35.
+ 	(REG_CLASS_CONTENTS): Adjusted class masks for register 35.
+ 	(EH_RETURN_HANDLER_RTX): Use return_address_pointer_rtx.
+ 	(RETURN_ADDRESS_POINTER_REGNUM): New macro.
+ 	(ELIMINABLE_REGS, INITIAL_ELIMINATION_OFFSET): Return address pointer
+ 	is eliminable using stack pointer or hard frame pointer.
+ 	(REGISTER_NAMES): Added name for register 35.
+ 	* config/s390/s390.md ("load_multiple", "store_multiple"): Removed
+ 	pointless sanity check.
+ 
+ 2004-07-19  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* fold-const.c (tree_expr_nonzero_p): Add function prototype.
+ 	(fold) <EQ_EXPR>: Move tree_expr_nonzero_p optimization from
+ 	fold_relational_const to here, i.e. "(x | 5) == 0" -> false.
+ 	(fold) (UNEQ_EXPR>: Add optimizations for unordered comparisons
+ 	of the form "x op x" where op is UNLE, UNGE, UNEQ or LTGT.
+ 	(fold_relational_const): Tidy up handling of floating point
+ 	comparisons by calling real_compare.  Remove tree_expr_nonzero_p
+ 	transformation; fold_relational_const assumes constant operands.
+ 
+ 2004-07-19  Gabriel Dos Reis  <gdr@integrable-solution.net>
+ 
+ 	* doc/sourcebuild.texi: Add libcpp, now that CPP has its own
+ 	directory.
+ 
+ 2004-07-19  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-tree.h (struct c_expr): Define.
+ 	(C_SET_EXP_ORIGINAL_CODE): Remove.
+ 	(parser_build_binary_op, build_compound_expr): Update prototypes.
+ 	* c-parse.in (%union): Add exprtype.
+ 	(FUNC_NAME): Mark as ttype.
+ 	(expr, expr_no_commas, cast_expr, unary_expr, primary): Change to
+ 	exprtype.
+ 	(expr): Update.  Define directly in terms of expr_no_commas
+ 	instead of using nonnull_exprlist.
+ 	(nonnull_exprlist, unary_expr, cast_expr, expr_no_commas, primary,
+ 	offsetof_member_designator, typespec_nonreserved_nonattr, init,
+ 	initval, designator, component_declarator,
+ 	component_notype_declarator, enumerator, array_declarator,
+ 	condition, exexpr, switch_statement, stmt_nocomp, stmt,
+ 	nonnull_asm_operands, ivar_declarator, receiver): Update.  Don't
+ 	set C_EXP_ORIGINAL_CODE.  Use TREE_NO_WARNING for assignments
+ 	where appropriate.
+ 	* c-common.h (C_EXP_ORIGINAL_CODE): Remove.
+ 	* c-common.c (c_common_truthvalue_conversion): Don't check
+ 	C_EXP_ORIGINAL_CODE.
+ 	* c-typeck.c (parser_build_binary_op): Use c_expr structures.
+ 	Don't use C_EXP_ORIGINAL_CODE.
+ 	(default_conversion, default_function_array_conversion): Don't use
+ 	C_EXP_ORIGINAL_CODE.  Preserve TREE_NO_WARNING.
+ 	(internal_build_compound_expr): Merge into build_compound_expr.
+ 	(build_compound_expr): Take two operands instead of a TREE_LIST.
+ 	* objc/objc-act.c (get_super_receiver): Update calls to
+ 	build_compound_expr.
+ 
+ 2004-07-18  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* config/sh/sh.c (sh_use_dfa_interface): Remove.
+ 	(TARGET_SCHED_USE_DFA_PIPELINE_INTERFACE): Set to
+ 	hook_int_void_1.
+ 	* config/sh/sh.md: Extract pipeline descriptions
+ 	into separate files.
+ 	* config/sh/sh1.md: New file, extracted from sh.md.
+ 	* config/sh/sh4.md: New file, extracted from sh.md.
+ 	* config/sh/shmedia.md: New file, extracted from sh.md
+ 	and rewritten using new-style pipeline description.
+ 
+ 2004-07-18  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* config/pa/pa.md: Delete the two remaining define_peephole
+ 	patterns.
+ 
+ 2004-07-18  Steven Bosscher  <stevenb@suse.de>
+ 	    Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-common.c (c_common_truthvalue_conversion): Don't warn if
+ 	TREE_NO_WARNING is set.
+ 
+ 2004-07-18  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* builtins.c (simplify_builtin_memcmp, simplify_builtin_strcmp,
+ 	simplify_builtin_strncmp): Delete.
+ 	(fold_builtin_memcmp, fold_builtin_strcmp, fold_builtin_strncmp):
+ 	Change argument to accept an arglist instead of an "exp".  Assume
+ 	that the return type is always integer_type_node.  Copy missing
+ 	transformations from their now obsolete simplify_builtin_*
+ 	equivalents.
+ 	(fold_builtin_1): Pass arglist instead of exp to fold_builtin_memcmp,
+ 	fold_builtin_strcmp and fold_builtin_strncmp.
+ 	(simplify_builtin): Call fold_builtin_memcmp, fold_builtin_strcmp
+ 	and fold_builtin_strncmp instead of simplify_builtin_memcmp,
+ 	simplify_builtin_strcmp and simplify_builtin_strncmp respectively.
+ 
+ 2004-07-18  Daniel Jacobowitz  <dan@debian.org>
+ 
+ 	* Makefile.in (tree-alias-common.o): Update dependencies.
+ 
+ 2004-07-17  Sebastian Pop  <pop@cri.ensmp.fr>
+ 
+ 	* cfgloop.c (flow_loop_nested_p): Fix comment.
+ 
+ 2004-07-17  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/16115
+ 	* stor-layout.c (relayout_decl): New fn.
+ 	* tree.h: Declare it.
+ 	(DECL_BY_REFERENCE): New macro.
+ 
+ 2004-07-17  Eric Botcazou  <ebotcazou@act-europe.fr>
+ 
+ 	* libgcc2.c (__enable_execute_stack): New symbol.
+ 	* libgcc-std.ver (GCC_3.4.2): New version.  Inherit from GCC_3.4
+ 	and declare __enable_execute_stack.
+ 	* mklibgcc.in (lib2funcs): Add _enable_execute_stack.
+ 	* config/netbsd.h (NETBSD_ENABLE_EXECUTE_STACK): ANSIfy.
+ 	* config/sol2.h (TRANSFER_FROM_TRAMPOLINE): Rename into
+ 	ENABLE_EXECUTE_STACK.
+ 	* config/alpha/alpha.c (alpha_initialize_trampoline): Conditionalize
+ 	on ENABLE_EXECUTE_STACK instead of TRANSFER_FROM_TRAMPOLINE.
+ 	* config/alpha/netbsd.h (TRANSFER_FROM_TRAMPOLINE): Rename into
+ 	ENABLE_EXECUTE_STACK.
+ 	* config/alpha/osf.h (TRANSFER_FROM_TRAMPOLINE): Likewise.
+ 	* config/i386/i386.c (x86_initialize_trampoline): Conditionalize
+ 	on ENABLE_EXECUTE_STACK instead of TRANSFER_FROM_TRAMPOLINE.
+ 	* config/i386/netbsd-elf.h (TRANSFER_FROM_TRAMPOLINE): Rename into
+ 	ENABLE_EXECUTE_STACK.
+ 	* config/i386/netbsd.h (TRANSFER_FROM_TRAMPOLINE): Likewise.
+ 	* config/i386/netbsd64.h (TRANSFER_FROM_TRAMPOLINE): Likewise.
+ 	* config/sparc/freebsd.h (TRANSFER_FROM_TRAMPOLINE): Likewise.
+ 	* config/sparc/netbsd-elf.h (TRANSFER_FROM_TRAMPOLINE): Likewise.
+ 	* config/sparc/sparc.c (sparc_initialize_trampoline): Conditionalize
+ 	on ENABLE_EXECUTE_STACK instead of TRANSFER_FROM_TRAMPOLINE.
+ 	(sparc64_initialize_trampoline): Likewise.
+ 	* doc/tm.texi (trampolines): Add ENABLE_EXECUTE_STACK macro.
+ 
+ 2004-07-17  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* langhooks.h (builtin_function): New langhook.
+ 	* langhooks-def.h (LANG_HOOKS_BUILTIN_FUNCTION): New.
+ 	(LANG_HOOKS_INITIALIZER): Update.
+ 	* tree.h (builtin_function): Remove.
+ 	* doc/tm.texi: Update.
+ 	* c-tree.h (builtin_function): Declare.
+ 	* c-common.c, config/alpha/alpha.c, config/arm/arm.c,
+ 	config/c4x/c4x.c, config/frv/frv.c, config/i386/i386.c,
+ 	config/ia64/ia64.c, config/iq2000/iq2000.c,
+ 	config/rs6000/rs6000.c, config/s390/s390.c, config/sh/sh.c,
+ 	config/stormy16/stormy16.c: All callers of builtin_function
+ 	changed.
+ 
+ 2004-07-17  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR target/16556
+ 	* config/i386/darwin.h (UNLIKELY_EXECUTED_TEXT_SECTION_NAME):
+ 	Remove white space after the backslash.
+ 
+ 2004-07-17  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR rtl-optimization/16294
+ 	* resource.c (return_insn_p): New predicate.
+ 	(mark_target_live_regs): Use it.  Special-case return insns.
+ 	(init_resource_info): Use it.  Don't scan the epilogue past
+ 	a return.
+ 
+ 2004-07-17  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* loop-init.c (loop_optimizer_init, loop_optimizer_finalize): Do not
+ 	destroy dominance information.
+ 	* passes.c (rest_of_handle_loop2):  Free dominance information.
+ 	* tree-cfg.c (cleanup_tree_cfg): Remove unreachable blocks before
+ 	jump threading.
+ 	(thread_jumps): Update dominance information and remove unreachable
+ 	blocks.
+ 	* tree-ssa-phiopt.c (replace_phi_with_stmt):  Update dominance
+ 	information and remove the unreachable block.
+ 
+ 2004-07-17  Graham Stott  <graham.stott@btinternet.com>
+ 
+ 	* emit-rtl.c (reorder_insns): Don't set BB for a BARRIER insn.
+ 
+ 2004-07-17  Toon Moene  <toon@moene.indiv.nluug.nl>
+ 
+ 	* doc/sourcebuild.texi: Remove libf2c entry.
+ 
+ 2004-07-17  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* config/i386/i386.md (movv16qi_internal): Fix typo.
+ 
+ 2004-07-17  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* final.c (final_scan_insn): Fix broken commit from previous
+ 	patch.
+ 
+ 2004-07-17  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-typeck.c (parser_build_binary_op): Condition warnings for
+ 	X<=Y<=Z on -Wparentheses instead of -Wextra.
+ 	* doc/invoke.texi: Update.  Document that most of -Wparentheses is
+ 	supported for C only.
+ 
+ 2004-07-17  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* cfgcleanup.c (try_simplify_condjump): Don't remove line
+ 	notes to avoid unreachable code warnings.
+ 	* toplev.c (backend_init): Don't emit line notes for
+ 	unreachable code warnings.
+ 
+ 	* combine.c (distribute_notes): Don't distribute a
+ 	REG_VTABLE_REF note.
+ 	* final.c (final_scan_insn): Don't handle it.
+ 	* rtl.c (reg_note_name): Remove it.
+ 	* rtl.h (enum reg_node): Dito.
+ 
+ 	* emit-rtl.c (force_line_numbers, restore_line_number_status):
+ 	Remove.
+ 	* rtl.h (force_line_numbers, restore_line_number_status):
+ 	Remove prototypes.
+ 
+ 	* stmt.c (using_eh_for_cleanups_p, using_eh_for_cleanups): Move...
+ 	* tree-eh.c (using_eh_for_cleanups_p): ...here.  Make static.
+ 	(using_eh_for_cleanups): Also moved here.
+ 
+ 	* expr.c (expand_expr_real_1) <CASE_LABEL_EXPR>: Die if we see one.
+ 	<SWITCH_EXPR>: Die if we have a non-NULL SWITCH_BODY.  Update calls
+ 	to expand_start_case and add_case_node.
+ 	* stmt.c (struct nesting): Cleanup unused fields condition_code,
+ 	last_unconditional_cleanup, nominal_type, printname, and
+ 	line_number_status.
+ 	(struct fixup_goto): Remove.
+ 	(struct stmt_status): Remove x_goto_fixup_chain field.
+ 	(goto_fixup_chain): Remove.
+ 	(strip_default_case_nodes, group_case_nodes, emit_jump_if_reachable,
+ 	pushcase, pushcase_range): Remove.
+ 	(expand_start_bindings_and_block): Don't set unused fields in
+ 	the nesting stack.
+ 	(expand_start_case, add_case_node): Cleanup unused formal arguments.
+ 	(expand_end_case_type): Don't simplify the case-list.  Use emit_jump
+ 	instead of emit_jump_if_reachable.
+ 	(emit_case_nodes): Likewise.
+ 	* tree-cfg.c (group_case_labels, cleanup_dead_labels): No longer
+ 	static.
+ 	(update_eh_label): Work around left-over exception handing regions.
+ 	* tree-flow.h (group_case_labels, cleanup_dead_labels): Add protos.
+ 	* tree-optimize.c (execute_cleanup_cfg_post_optimizing): New function.
+ 	(pass_cleanup_cfg_post_optimizing): New pass.
+ 	(init_tree_optimization_passes): Run the new pass after all
+ 	optimizations.
+ 	* tree.h (pushcase, pushcase_range): Remove prototypes.
+ 	(expand_start_case, add_case_node): Update prototypes.
+ 
+ 2004-07-16  Krister Walfridsson  <cato@df.lth.se>
+ 
+ 	* tree-inline.c (estimate_num_insns_1): Correct increase of count.
+ 
+ 2004-07-16  Richard Henderson  <rth@redhat.com>
+ 
+ 	* builtins.c (std_expand_builtin_va_arg): Remove.
+ 	(expand_builtin_va_arg): Remove.
+ 	* expr.h: Don't declare them.
+ 	* gimplify.c (mark_decls_volatile_r): Remove.
+ 	(copy_if_shared_r): Don't call it.
+ 	* target-def.h: Don't test EXPAND_BUILTIN_VA_ARG.
+ 	* expr.c (expand_expr_real_1): Don't handle VA_ARG_EXPR.
+ 	* gimple-low.c (lower_stmt): Likewise.
+ 	* tree-cfg.c (cfg_remove_useless_stmts_bb): Likewise.
+ 	* tree-gimple.c (is_gimple_tmp_rhs, is_gimple_stmt): Likewise.
+ 	* tree-ssa-operands.c (get_expr_operands): Likewise.
+ 	* doc/tm.texi (TARGET_GIMPLIFY_VA_ARG_EXPR): Don't mention
+ 	EXPAND_BUILTIN_VA_ARG.
+ 	* system.h (EXPAND_BUILTIN_VA_ARG): Poison.
+ 	* config/alpha/alpha.h, config/alpha/unicosmk.h, config/i386/i386.h,
+ 	config/ia64/ia64.h, config/rs6000/rs6000.h, config/s390/s390.h,
+ 	config/sparc/sparc.h (EXPAND_BUILTIN_VA_ARG): Remove.
+ 
+ 2004-07-16  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (insert_aux): Break out if we hit
+ 	a critical edge.
+ 
+ 2004-07-16  Richard Henderson  <rth@redhat.com>
+ 
+ 	* basic-block.h (remove_fake_exit_edges): Declare.
+ 	* cfganal.c (remove_fake_predecessors): Rename from
+ 	remove_fake_successors; iterate over predecessors.
+ 	(remove_fake_exit_edges): New.
+ 	* cfgcleanup.c (try_optimize_cfg): Use it.
+ 	* gcse.c (one_pre_gcse_pass, store_motion): Likewise.
+ 	* predict.c (estimate_probability): Likewise.
+ 	(tree_estimate_probability, note_prediction_to_br_prob): Likewise.
+ 	* tree-cfg.c (make_edges): Likewise.
+ 	* tree-ssa-pre.c (fini_pre): Likewise.
+ 	* profile.c (instrument_edges): Don't remove_fake_edges.
+ 	(branch_prob): Do it earlier here.
+ 
+ 2004-07-16  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-ssa-operands.c (get_expr_operands): Fix 2004-07-15
+ 	switchification wrt CONSTRUCTOR.  Document the reason.
+ 
+ 2004-07-16  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* tree-mudflap.c (mf_file_function_line_tree): Correct typo
+ 	that prevented descriptive __mf_check source location strings.
+ 
+ 2004-07-16  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-def (WITH_SIZE_EXPR): New.
+ 	* explow.c (expr_size, int_expr_size): Handle WITH_SIZE_EXPR.
+ 	* expr.c (expand_expr_real_1): Likewise.
+ 	* gimplify.c (maybe_with_size_expr): New.
+ 	(gimplify_arg, gimplify_modify_expr): Use it.
+ 	(gimplify_modify_expr_to_memcpy): Take size parameter.
+ 	(gimplify_modify_expr_to_memset): Likewise.
+ 	(gimplify_expr): Handle WITH_SIZE_EXPR.
+ 	* tree-alias-common.c (find_func_aliases): Likewise.
+ 	* tree-eh.c (tree_could_trap_p): Likewise.
+ 	(tree_could_throw_p): Likewise.
+ 	* tree-gimple.c (is_gimple_lvalue): Likewise.
+ 	(get_call_expr_in): Likewise.
+ 	* tree-inline.c (estimate_num_insns_1): Likewise.
+ 	(expand_calls_inline): Likewise.
+ 	* tree-nested.c (convert_call_expr): Likewise.
+ 	* tree-pretty-print.c (dump_generic_node): Likewise.
+ 	* tree-sra.c (sra_walk_expr): Likewise.
+ 	* tree-ssa-alias.c (add_pointed_to_expr): Likewise.
+ 	* tree-ssa-ccp.c (get_rhs, set_rhs): Likewise.
+ 	* tree-ssa-operands.c (get_expr_operands): Likewise.
+ 	* tree-tailcall.c (find_tail_calls): Likewise.
+ 
+ 	* calls.c (expand_call): Reset old_stack_allocated after
+ 	calling emit_stack_restore.
+ 
+ 2004-07-16  Richard Henderson  <rth@redhat.com>
+ 
+ 	* langhooks-def.h (LANG_HOOKS_TREE_INLINING_COPY_RES_DECL_FOR_INLINING,
+ 	lhd_tree_inlining_copy_res_decl_for_inlining): Remove.
+ 	* langhooks.c (lhd_tree_inlining_copy_res_decl_for_inlining): Remove.
+ 	* langhooks.h (struct lang_hooks_for_tree_inlining): Remove
+ 	copy_res_decl_for_inlining.
+ 
+ 	* tree-inline.c (declare_return_variable): New modify_dest argument.
+ 	Use it as the return value, when possible or manditory.  Handle
+ 	TREE_ADDRESSABLE types.
+ 	(expand_call_inline): Extract MODIFY_EXPR lhs for call.  Simplify
+ 	replacement of CALL_EXPR.
+ 
+ 2004-07-16  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-flow.h (struct var_ann_d): Remove has_hidden_use.
+ 	* gimple-low.c (expand_var_p): Don't check it.
+ 	* tree-ssa-alias.c (setup_pointers_and_addressables): Likewise.
+ 	* tree-ssa-copyrename.c (rename_ssa_copies): Likewise.
+ 	* tree-ssa-operands.c (add_stmt_operand): Likewise.
+ 	* tree-dfa.c (find_hidden_use_vars, find_hidden_use_vars_r): Kill.
+ 	(find_referenced_vars): Don't call them.
+ 	* tree-flow-inline.h (has_hidden_use, set_has_hidden_use): Kill.
+ 
+ 2004-07-16  Richard Henderson  <rth@redhat.com>
+ 
+ 	* function.c (pass_by_reference): True for all variable sized types.
+ 
+ 2004-07-16  Sebastian Pop  <pop@cri.ensmp.fr>
+ 
+ 	* Makefile.in (tree-pretty-print.o): Depend on tree-chrec.h.
+ 	* tree-pretty-print.c: Include tree-chrec.h.
+ 	(dump_generic_node): Pretty print SCEV_KNOWN, SCEV_NOT_KNOWN
+ 	and POLYNOMIAL_CHREC nodes.
+ 
+ 2004-07-16  Steve Ellcey  <sje@cup.hp.com>
+ 
+ 	* builtins.c (expand_builtin_stpcpy): Do not create temporary
+ 	reg with VOIDmode.
+ 
+ 2004-07-16  Segher Boessenkool  <segher@kernel.crashing.org>
+ 
+ 	* config/rs6000/eabi.asm (__eabi_convert): Fix typo (cmpi vs. cmpwi).
+ 
+ 2004-07-16  Andreas Krebbel  <krebbel1@de.ibm.com>
+ 
+ 	* config/s390/s390.md: Changed every occurence of BASE_REGISTER
+ 	to BASE_REGNUM.
+ 	* config/s390/s390.c: Likewise.
+ 	* config/s390/s390.h: Likewise.
+ 
+ 2004-07-16  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.md (addsi3, adddi3): Remove special handling
+ 	of $sp adds.  Remove REGNO checks from mips16 patterns.
+ 
+ 2004-07-16  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.md: Delete outdated comment.
+ 
+ 2004-07-16  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.c (get_float_compare_codes): Delete.
+ 	(mips_emit_compare): New function, mostly extracted from
+ 	get_float_compare_codes and gen_conditional_branch.
+ 	(gen_conditional_branch, gen_conditional_move): Use it.
+ 
+ 2004-07-16  Segher Boessenkool  <segher@kernel.crashing.org>
+ 
+ 	* genautomata.c (add_vect): Speedup by using integers as
+ 	bit-vectors for walking through the comb_vect and finding
+ 	a match.
+ 
+ 2004-07-16  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.c (mips_zero_if_equal): Only use XORs if the second
+ 	operand is an uns_arith_operand; use subtraction otherwise.
+ 	* config/mips/mips.md (cmpsi, cmpdi): Allow any nonmemory_operand,
+ 	not just arith_operands.
+ 
+ 2004-07-16  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips-protos.h (gen_int_relational): Delete.
+ 	(mips_emit_scc): Declare.
+ 	* config/mips/mips.c (internal_test): Delete.
+ 	(sle_operand, sleu_operand): New functions.
+ 	(map_test_to_internal_test, gen_int_relational): Delete.
+ 	(mips_emit_binary, mips_relational_operand_ok_p)
+ 	(mips_emit_int_relational, mips_zero_if_equal)
+ 	(mips_emit_scc): New functions.
+ 	(gen_conditional_branch): Rework to use mips_emit_int_relational.
+ 	* config/mips/mips.h (PREDICATE_CODES): Add sle_operand and
+ 	sleu_operand.
+ 	* config/mips/mips.md (seq, sne, sgt, sge, slt, sle, sgtu, sgeu)
+ 	(sltu, sleu): Use mips_emit_scc.
+ 	(*sge_[sd]i, *sgeu_[sd]i): New patterns.
+ 	(*sle_[sd]i, *sle_[sd]i_mips16): Use sle_operand.
+ 	(*sleu_[sd]i, *sleu_[sd]i_mips16): Use sleu_operand.
+ 
+ 2004-07-16  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.md (*sgt_di_mips16): Fix destination constraint.
+ 
+ 2004-07-16  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.md (*seq_[sd]i): Renamed from seq_[sd]i_zero.
+ 	(*sne_[sd]i): Likewise sne_[sd]i_zero.
+ 	(*sgt_[sd]i): ...and sgt_[sd]i.
+ 	(*slt_[sd]i): ...and slt_[sd]i.
+ 	(*sgtu_[sd]i): ...and sgtu_[sd]i.
+ 	(*sltu_[sd]i): ...and sltu_[sd]i.
+ 	(*sleu_[sd]i): ...and sleu_[sd]i_const.
+ 	Name previously unnamed mips16 patterns.  Formatting fixes.
+ 
+ 2004-07-16  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.c (cmp_operands): Renamed from branch_cmp.
+ 	(branch_type): Delete.
+ 	(gen_conditional_branch, gen_conditional_move)
+ 	(mips_gen_conditional_trap): Update after name change.  Get the
+ 	comparison mode from cmp_operands[0].
+ 	* config/mips/mips.h (cmp_type, branch_type): Delete.
+ 	(cmp_operands): Renamed from branch_cmp.
+ 	* config/mips/mips.md (cmpsi, cmpdi, cmpsf, cmpdf): Update after
+ 	name change.  Don't set branch_type.
+ 	(seq, sne, sgt, sge, slt, sle, sgtu, sgeu, sltu, sleu): Check the
+ 	mode class of cmp_operands[0] rather than branch_type.  Update after
+ 	name change.
+ 
+ 2004-07-16  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.c (mips_rtx_costs): In mips16 code, set the cost
+ 	of 0...255 to 0 when inside a SET.
+ 
+ 2004-07-16  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.md: Remove mips16 define_peepholes.
+ 
+ 2004-07-16  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (init_pre): Connect infinite loops to exit.
+ 	(fini_pre): Remove fake edges.
+ 
+ 2004-07-15  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-ssa-operands.c (get_expr_operands): Use a switch.  Split out...
+ 	(get_indirect_ref_operands, get_call_expr_operands): ... these.
+ 
+ 2004-07-15  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* vec.h (VEC_address): New function.
+ 
+ 2004-07-14  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR middle-end/15885
+ 	* gimplify.c (gimplify_arg): New fn, split out from...
+ 	(gimplify_call_expr): Here.  Special-case BUILT_IN_VA_START.
+ 
+ 2004-07-15  Roman Zippel  <zippel@linux-m68k.org>
+ 
+ 	* config/m68k/m68k.c (output_move_qimode): Abort on an attempt to
+ 	generate code which is generated by pushqi1 now
+ 	* config/m68k/m68k.h (MOVE_BY_PIECES_P): Remove.
+ 
+ 2004-07-15  Roman Zippel  <zippel@linux-m68k.org>
+ 
+ 	* combine.c (simplify_set): match the mode of the constant 0 with
+ 	the tested operand to match the compare behaviour and the
+ 	simplify_relational_operation() expectation.
+ 
+ 2004-07-15  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* config/rs6000/rs6000.md ("bunordered"): Disable for e500.
+ 	("bordered"): Same.
+ 
+ 2004-07-15  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* config/rs6000/rs6000.md ("*cceq_ior_compare"): Allow
+ 	unconditionally.
+ 	* config/rs6000/spe.md ("e500_cceq_ior_compare"): Remove.
+ 
+ 2004-07-15  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.c (mips_adjust_insn_length): Fix handling of
+ 	calls in mips16 code.
+ 
+ 2004-07-15  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.md: In the mips16 li/neg splitter, use SImode for
+ 	the destination of the li as well as for the neg.
+ 
+ 2004-07-15  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	g++/15861
+ 	* cgraphunit.c (cgraph_build_static_cdtor): Add priority argument.
+ 	* cgraph.h: Update declaration.
+ 	* c-decl.c (build_cdtor): Update call with default priority.
+ 	* coverage.c (create_coverage): Ditto.
+ 	* tree-mudflap.c (mf_init_fndecl): New tree.
+ 	(mudflap_init): Set it.
+ 	(mudflap_register_call): Arrange to call __mf_init before the first
+ 	__mf_register call.
+ 	(mudflap_finish_file): Mark the mudflap static initializer as extra
+ 	high priority, to beat all C++ static constructors.
+ 
+ 2004-07-15  Jeff Law  <law@redhat.com>
+ 
+ 	* loop.c (check_insn_for_givs): Restore check for code labels that was
+ 	accidentally deleted by a recent checkin.
+ 
+ 2004-07-15  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* vec.h (VEC_T_truncate): Allow truncation of an empty vector.
+ 	(VEC_T_quick_insert, VEC_T_ordered_remove): Fix sizeof(T) thinko.
+ 
+ 2004-07-14  Richard Henderson  <rth@redhat.com>
+ 
+ 	* print-tree.c (print_node): Fix casts last change.
+ 
+ 2004-07-15  Paul Brook	<paul@codesourcery.com>
+ 
+ 	* dwarf2out.c (dwarf2out_begin_prologue): Rename IA64_UNWIND_INFO
+ 	to TARGET_UNWIND_INFO.
+ 	* except.c (output_function_exception_table): Ditto.
+ 	* except.h: Ditto.
+ 	* opts.c (decode_options): Ditto.
+ 	* passes.c (rest_of_handle_final): Ditto.
+ 	* final.c (final_start_function): Ditto.
+ 	(final_scan_insn, final_scan_insn): Replace IA64_UNWIND_EMIT with
+ 	target hook.
+ 	* targhooks.h (default_unwind_emit): Declare.
+ 	* targhooks.c (default_unwind_emit): New function.
+ 	* target-def.h: Define and use TARGET_UNWIND_EMIT.
+ 	* target.h (struct gcc_target): Add unwind_emit.
+ 	* config/ia64/ia64.c (TARGET_UNWIND_EMIT): Define.
+ 	* config/ia64/ia64.h: Rename IA64_UNWIND_INFO to TARGET_UNWIND_INFO.
+ 	Remove IA64_UNWIND_EMIT.
+ 	* doc/tm.texi: Document TARGET_UNWIND_EMIT and TARGET_UNWIND_INFO.
+ 
+ 2004-07-14  Richard Henderson  <rth@redhat.com>
+ 
+ 	* print-tree.c (print_node): Handle SSA_NAME.
+ 
+ 2004-07-14  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	PR target/16325
+ 	* config/mips/mips.h (STARTING_FRAME_OFFSET): When flag_profile_value
+ 	and ! TARGET_64BIT, include REG_PARM_STACK_SPACE.
+ 
+ 2004-07-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* expr.c (expand_assignment): Reenable bitfield += optimizations.
+ 	Use alias set 0 for memory, do proper mode calculations and adjust
+ 	address for memories.
+ 
+ 2004-07-14  Per Bothner	 <per@bothner.com>
+ 
+ 	* input.h:  If USE_MAPPED_LOCATION, define separate expanded_location
+ 	structure with extra column field.
+ 	* tree.c (expand_location):  Also fill in column field.
+ 	* gengtype-lex.l:  Ignore expanded_location typedef, sinze gengtype
+ 	gets confused by the two conditionally-compiled definitions.
+ 
+ 2004-07-14  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* calls.c (expand_call): Fix typo in comment.
+ 
+ 2004-07-14  Steve Ellcey  <sje@cup.hp.com>
+ 
+ 	* config/ia64/ia64.c (ia64_expand_compare): Allow ORDERED
+ 	comparision of TFmode.
+ 
+ 2004-07-14  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/alpha/alpha.c (alpha_gimplify_va_arg_1): Move indirect ...
+ 	(alpha_gimplify_va_arg): ... handling here.  Use pass_by_reference.
+ 	* config/c4x/c4x.c (c4x_gimplify_va_arg_expr): Use pass_by_reference.
+ 	* config/i386/i386.c (ix86_gimplify_va_arg): Likewise.
+ 	* config/i860/i860.c (i860_gimplify_va_arg_expr): Likewise.
+ 	* config/ia64/ia64.c (ia64_gimplify_va_arg): Likewise.
+ 	* config/rs6000/rs6000.c (rs6000_gimplify_va_arg): Likewise.
+ 	* config/sh/sh.c (sh_gimplify_va_arg_expr): Likewise.
+ 	* config/xtensa/xtensa.c (xtensa_gimplify_va_arg_expr): Likewise.
+ 
+ 2004-07-14  Mike Stump	<mrs@apple.com>
+ 
+ 	* config/darwin.h (WINT_TYPE): Define to be int to match
+ 	system header files.
+ 
+ 2004-07-14  Bob Wilson  <bob.wilson@acm.org>
+ 
+ 	* config/xtensa/xtensa.c (function_arg_advance): Check for args
+ 	that must be passed in the stack.
+ 	(xtensa_gimplify_va_arg_expr): Skip special-case padding for small
+ 	arguments if the size is not a constant.
+ 
+ 2004-07-14  Per Bothner  <per@bothner.com>
+ 
+ 	* c-typeck.c (emit_side_effect_warnings):  Use EXPR_HAS_LOCATION
+ 	instead of EXPR_LOCUS in a boolean context, which is always true
+ 	if --enable-mapped-location.
+ 	* stmt.c (warn_if_unused_value):  Likewise.  Also use EXPR_LOCATION.
+ 
+ 2004-07-14  Richard Henderson  <rth@redhat.com>
+ 
+ 	* dominance.c (struct dom_info): Add fake_exit_edge.
+ 	(init_dom_info): Allocate it.
+ 	(free_dom_info): Free it.
+ 	(calc_dfs_tree): Set it.  Handle noreturn and infinite loops
+ 	in two passes.
+ 	(calc_idoms): Honor fake_exit_edge.
+ 
+ 2004-07-13  Jason Merrill  <jason@redhat.com>
+ 
+ 	* tree-gimple.c (is_gimple_reg_rhs, is_gimple_mem_rhs): New fns.
+ 	(rhs_test_for): New fn.
+ 	(is_gimple_tmp_rhs): Rename from is_gimple_rhs.
+ 	* tree-gimple.h: Declare them.
+ 	* gimplify.c (gimplify_modify_expr): Use the new fns.
+ 
+ 2004-07-14  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/arm/arm-protos.h (arm_va_arg): Remove.
+ 	* config/arm/arm.c (arm_va_arg): Remove.
+ 	(arm_init_expanders): Fix alignment of arg_pointer_rtx.
+ 	* config/arm/arm.h (EXPAND_BUILTIN_VA_ARG): Remove.
+ 
+ 2004-07-14  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	* pa.c (fix_range): New function to mark a range(s) of registers as
+ 	fixed registers.
+ 	(override_options): Call fix_range if the -mfixed-range option string
+ 	is not empty.
+ 	* pa.h (TARGET_OPTIONS): Add -mfixed-range option.
+ 	* doc/invoke.texi (-mfixed-range): Document new option.
+ 
+ 2004-07-14  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* config/rs6000/rs6000.c (function_arg_padding): Do not pad SFmode
+ 	for TARGET_64BIT.
+ 	(rs6000_gimplify_va_arg): Use size_int instead of build_int_2.
+ 
+ 2004-07-14  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* expmed.c (expand_sdiv_pow2): New function to expand signed division
+ 	by a positive power of two, split out from expand_divmod.  Provide
+ 	an alternate implementation when shifts are expensive.  Lower the
+ 	threshold for using a branchless implementation to BRANCH_COST >= 2.
+ 	(expand_divmod): Call expand_sdiv_pow2 for suitable divisions.
+ 
+ 2004-07-14  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* tree-dfa.c (make_rename_temp): *Really* work just
+ 	like create_tmp_var if called while outside SSA form.
+ 
+ 2004-07-14  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390.md ("udivsi3"): Ensure trap is generated
+ 	for division by zero.
+ 	("umodsi3"): Likewise.
+ 
+ 2004-07-14  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.c (mips_output_move): When generating mips16 code,
+ 	force loads of negative constants to be split.
+ 	* config/mips/mips.md (*movhi_mips16, *movqi_mips16): Likewise.
+ 	Generalize SImode li/neg splitter to cope with other modes.
+ 
+ 2004-07-14  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* expmed.c: Remove more references to QUEUED in the comments.
+ 	* expr.c: Likewise.
+ 
+ 2004-07-14  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	Revert:
+ 	2004-07-13  Richard Henderson  <rth@redhat.com>
+ 	* config/mips/mips.c (mips_pass_by_reference): Handle mode sizes
+ 	correctly.
+ 
+ 2004-07-14  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* tree-dfa.c (make_rename_temp): Work just like
+ 	create_tmp_var if called while outside SSA form.
+ 
+ 2004-07-14  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* expr.c (enqueue_insn, finish_expr_for_function,
+ 	protect_from_queue, queued_subexp_p, mark_queue,
+ 	emit_insns_enqueued_after_mark, emit_queue,
+ 	expand_increment): Remove.
+ 	(store_constructor): Expand increment as an assignment.
+ 	(expand_expr_real_1 <case PREINCREMENT_EXPR,
+ 	case PREDECREMENT_EXPR, case POSTINCREMENT_EXPR,
+ 	case POSTDECREMENT_EXPR>): Abort.
+ 	* expr.h (QUEUED_VAR, QUEUED_INSN, QUEUED_COPY,
+ 	QUEUED_BODY, QUEUED_NEXT, finish_expr_for_function,
+ 	protect_from_queue, emit_queue, queued_subexp_p): Remove.
+ 	* function.h (pending_chain, x_pending_chain): Remove.
+ 	* rtl.def (QUEUED): Remove.
+ 
+ 	* emit-rtl.c (copy_insn_1, copy_most_rtx,
+ 	set_used_flags, verify_rtx_sharing): Remove references to QUEUED.
+ 	* genattrtab.c (attr_copy_rtx, clear_struct_flag,
+ 	encode_units_mask): Likewise.
+ 	* local-alloc.c (equiv_init_varies_p): Likewise.
+ 	* rtl.c (copy_rtx): Likewise.
+ 	* rtlanal.c (rtx_unstable_p, rtx_varies_p): Likewise.
+ 	* simplify-rtx.c (simplify_gen_subreg): Likewise.
+ 	* config/mn10300/mn10300.c (legitimate_pic_operand_p): Likewise.
+ 
+ 	* builtins.c (expand_builtin, expand_builtin_apply,
+ 	expand_builtin_mathfn, expand_builtin_mathfn_2,
+ 	expand_builtin_mathfn_3, expand_builtin_setjmp_setup):
+ 	Remove calls to emit_queue and protect_from_queue.
+ 	* calls.c (expand_call, precompute_arguments,
+ 	precompute_register_parameters, rtx_for_function_call,
+ 	store_one_arg): Likewise.
+ 	* dojump.c (do_compare_and_jump, do_jump): Likewise.
+ 	* explow.c (memory_address): Likewise.
+ 	* expmed.c (clear_by_pieces_1, clear_storage,
+ 	clear_storage_via_libcall, emit_group_load,
+ 	emit_group_store, emit_store_flag,
+ 	expand_expr_real_1, store_by_pieces,
+ 	store_constructor, store_expr, try_casesi,
+ 	try_tablejump): Likewise.
+ 	* function.c (expand_pending_sizes): Likewise.
+ 	* optabs.c (emit_cmp_and_jump_insns,
+ 	emit_conditional_add, emit_conditional_move,
+ 	expand_fix, expand_float, prepare_cmp_insn): Likewise.
+ 	* stmt.c (emit_case_bit_tests,
+ 	expand_asm_expr, expand_computed_goto,
+ 	expand_decl_init, expand_end_case_type,
+ 	expand_end_stmt_expr, expand_expr_stmt_value,
+ 	expand_return, expand_start_case,
+ 	optimize_tail_recursion): Likewise.
+ 	* config/c4x/c4x.c (c4x_expand_builtin): Likewise.
+ 	* config/s390/s390.c (s390_expand_cmpmem): Likewise.
+ 
+ 2004-07-14  Ben Elliston  <bje@au.ibm.com>
+ 
+ 	* vec.h: Comment fix.
+ 
+ 2004-07-13  Richard Henderson  <rth@redhat.com>
+ 
+ 	* target.h (struct gcc_target): Add calls.pass_by_reference.
+ 	* target-def.h (TARGET_PASS_BY_REFERENCE): New.
+ 	* function.c (pass_by_reference): Use the hook.
+ 	* system.h (FUNCTION_ARG_PASS_BY_REFERENCE): Poison.
+ 	* targhooks.c, targhooks.h (hook_pass_by_reference_false): New.
+ 	(hook_pass_by_reference_must_pass_in_stack): New.
+ 	* config/alpha/alpha.c (function_arg): Don't query pass-by-ref.
+ 	(alpha_pass_by_reference): New.
+ 	(TARGET_PASS_BY_REFERENCE): New.
+ 	* config/alpha/alpha.h (FUNCTION_ARG_PASS_BY_REFERENCE): Remove.
+ 	* config/arc/arc.c (arc_pass_by_reference): New.
+ 	(TARGET_PASS_BY_REFERENCE): New.
+ 	* config/arc/arc.h (FUNCTION_ARG_PASS_BY_REFERENCE): Remove.
+ 	(FUNCTION_ARG_CALLEE_COPIES): True.
+ 	* config/arm/arm-protos.h (arm_function_arg_pass_by_reference): Remove.
+ 	* config/arm/arm.c (TARGET_PASS_BY_REFERENCE): New.
+ 	(arm_pass_by_reference): Rename from arm_function_arg_pass_by_reference.
+ 	* config/arm/arm.h (FUNCTION_ARG_PASS_BY_REFERENCE): Remove.
+ 	* config/c4x/c4x.h (FUNCTION_ARG_PASS_BY_REFERENCE): Remove.
+ 	* config/cris/cris.c (cris_pass_by_reference): New.
+ 	(TARGET_PASS_BY_REFERENCE): New.
+ 	* config/cris/cris.h (FUNCTION_ARG): Don't query pass-by-ref.
+ 	(FUNCTION_INCOMING_ARG, FUNCTION_ARG_ADVANCE): Likewise.
+ 	(FUNCTION_ARG_PASS_BY_REFERENCE): Remove.
+ 	* config/fr30/fr30.c (TARGET_PASS_BY_REFERENCE): New.
+ 	* config/fr30/fr30.h (FUNCTION_ARG_PASS_BY_REFERENCE): Remove.
+ 	* config/frv/frv-protos.h (frv_function_arg_pass_by_reference): Kill.
+ 	* config/frv/frv.c (TARGET_PASS_BY_REFERENCE): New.
+ 	(frv_function_arg_pass_by_reference): Remove.
+ 	* config/frv/frv.h (FUNCTION_ARG_PASS_BY_REFERENCE): Remove.
+ 	* config/i386/i386-protos.h (function_arg_pass_by_reference): Remove.
+ 	* config/i386/i386.c (TARGET_PASS_BY_REFERENCE): New.
+ 	(ix86_pass_by_reference): Rename from function_arg_pass_by_reference.
+ 	* config/i386/i386.h (FUNCTION_ARG_PASS_BY_REFERENCE): Remove.
+ 	* config/ia64/ia64-protos.h (ia64_function_arg_pass_by_reference): Kill.
+ 	* config/ia64/ia64.c (TARGET_PASS_BY_REFERENCE): New.
+ 	(ia64_pass_by_reference): Rename from
+ 	ia64_function_arg_pass_by_reference.
+ 	* config/ia64/ia64.h (FUNCTION_ARG_PASS_BY_REFERENCE): Remove.
+ 	* config/ip2k/ip2k.h (FUNCTION_ARG_PASS_BY_REFERENCE): Remove.
+ 	* config/iq2000/iq2000-protos.h (function_arg_pass_by_reference): Kill.
+ 	* config/iq2000/iq2000.c (TARGET_PASS_BY_REFERENCE): New.
+ 	(iq2000_pass_by_reference): Rename from function_arg_pass_by_reference.
+ 	* config/iq2000/iq2000.h (FUNCTION_ARG_PASS_BY_REFERENCE): Remove.
+ 	(FUNCTION_ARG_CALLEE_COPIES): Don't reference pass-by-ref.
+ 	* config/m32r/m32r-protos.h (m32r_pass_by_reference): Remove.
+ 	* config/m32r/m32r.c (TARGET_PASS_BY_REFERENCE): New.
+ 	(m32r_pass_by_reference): Adjust prototype.  Make static.
+ 	Handle mode sizes correctly.
+ 	* config/m32r/m32r.h (FUNCTION_ARG_PASS_BY_REFERENCE): Remove.
+ 	* config/m68hc11/m68hc11-protos.h, config/m68hc11/m68hc11.c
+ 	(m68hc11_function_arg_pass_by_reference): Remove.
+ 	* config/m68hc11/m68hc11.h (FUNCTION_ARG_PASS_BY_REFERENCE): Remove.
+ 	(FUNCTION_ARG_CALLEE_COPIES): Don't reference pass-by-ref.
+ 	* config/mcore/mcore.c (TARGET_PASS_BY_REFERENCE): New.
+ 	* config/mcore/mcore.h (FUNCTION_ARG_PASS_BY_REFERENCE): Remove.
+ 	* config/mips/mips-protos.h (function_arg_pass_by_reference): Remove.
+ 	* config/mips/mips.c (TARGET_PASS_BY_REFERENCE): New.
+ 	(mips_va_arg): Use pass_by_reference.
+ 	(mips_pass_by_reference): Rename from function_arg_pass_by_reference.
+ 	Handle mode sizes correctly.
+ 	* config/mips/mips.h (FUNCTION_ARG_PASS_BY_REFERENCE): Remove.
+ 	(FUNCTION_ARG_CALLEE_COPIES): Don't reference pass-by-ref.
+ 	* config/mmix/mmix-protos.h (mmix_function_arg_pass_by_reference): Kill.
+ 	* config/mmix/mmix.c (TARGET_PASS_BY_REFERENCE): New.
+ 	(mmix_pass_by_reference): Rename from
+ 	mmix_function_arg_pass_by_reference.
+ 	* config/mmix/mmix.h (FUNCTION_ARG_PASS_BY_REFERENCE): Remove.
+ 	(FUNCTION_ARG_CALLEE_COPIES): True.
+ 	* config/mn10300/mn10300.c (TARGET_PASS_BY_REFERENCE): New.
+ 	(mn10300_pass_by_reference): New.
+ 	* config/mn10300/mn10300.h (FUNCTION_ARG_PASS_BY_REFERENCE): Remove.
+ 	(FUNCTION_ARG_CALLEE_COPIES): True.
+ 	* config/pa/pa.c (pa_pass_by_reference): New.
+ 	(TARGET_PASS_BY_REFERENCE): New.
+ 	* config/pa/pa.h (FUNCTION_ARG_PASS_BY_REFERENCE): Remove.
+ 	(FUNCTION_ARG_CALLEE_COPIES): True.
+ 	* config/rs6000/rs6000-protos.h (function_arg_pass_by_reference): Kill.
+ 	* config/rs6000/rs6000.c (TARGET_PASS_BY_REFERENCE): New.
+ 	(rs6000_pass_by_reference): Rename from function_arg_pass_by_reference.
+ 	* config/rs6000/rs6000.h (FUNCTION_ARG_PASS_BY_REFERENCE): Remove.
+ 	* config/s390/s390-protos.h (s390_function_arg_pass_by_reference): Kill.
+ 	* config/s390/s390.c (TARGET_PASS_BY_REFERENCE): New.
+ 	(s390_pass_by_reference): Rename from
+ 	s390_function_arg_pass_by_reference.
+ 	(s390_function_arg_advance): Don't query pass-by-ref.
+ 	(s390_function_arg): Likewise.
+ 	(s390_gimplify_va_arg): Use pass_by_reference.
+ 	(s390_call_saved_register_used): Likewise.
+ 	* config/s390/s390.h (FUNCTION_ARG_PASS_BY_REFERENCE): Remove.
+ 	* config/sh/sh.c (TARGET_PASS_BY_REFERENCE): New.
+ 	(shcompact_byref, sh_pass_by_reference): New.
+ 	* config/sh/sh.h (FUNCTION_ARG_PASS_BY_REFERENCE): Remove.
+ 	(SHCOMPACT_BYREF): Remove.
+ 	* config/sparc/sparc-protos.h (function_arg_pass_by_reference): Kill.
+ 	* config/sparc/sparc.c (TARGET_PASS_BY_REFERENCE): New.
+ 	(sparc_pass_by_reference): Rename from function_arg_pass_by_reference.
+ 	(sparc_gimplify_va_arg): Use pass_by_reference.
+ 	* config/sparc/sparc.h (FUNCTION_ARG_PASS_BY_REFERENCE): Remove.
+ 	* config/stormy16/stormy16.h (FUNCTION_ARG_PASS_BY_REFERENCE): Remove.
+ 	* config/v850/v850.c (TARGET_PASS_BY_REFERENCE): New.
+ 	(v850_pass_by_reference): New.
+ 	* config/v850/v850.h (FUNCTION_ARG_PASS_BY_REFERENCE): Remove.
+ 	(FUNCTION_ARG_CALLEE_COPIES): True.
+ 	* doc/tm.texi (TARGET_PASS_BY_REFERENCE): Update from
+ 	FUNCTION_ARG_PASS_BY_REFERENCE docs.
+ 
+ 2004-07-14  Richard Henderson  <rth@redhat.com>
+ 	    Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips-protos.h (mips_va_arg): Delete.
+ 	* config/mips/mips.h (EXPAND_BUILTIN_VA_ARG): Delete.
+ 	* config/mips/mips.c: Include tree-gimple.h.
+ 	(TARGET_GIMPLIFY_VA_ARG_EXPR): Define.
+ 	(mips_arg_info): Remove special handling of must_pass_in_stck args.
+ 	(mips_gimplify_va_arg_expr): Rewritten from mips_va_arg.
+ 	(function_arg_pass_by_reference): Return true if must_pass_in_stack.
+ 
+ 2004-07-13  Bob Wilson  <bob.wilson@acm.org>
+ 
+ 	* config/xtensa/xtensa.c (xtensa_gimplify_va_arg_expr): Swap
+ 	arguments for COND_EXPR in big-endian adjustment code.
+ 
+ 2004-07-13  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	* pa-64.h (ARG_POINTER_REGNUM, STATIC_CHAIN_REGNUM): Delete.
+ 	* pa.h (ARG_POINTER_REGNUM, STATIC_CHAIN_REGNUM): Modify for hppa64.
+ 	* pa32-regs.h (REG_ALLOC_ORDER): Reorder caller-saved registers.
+ 	* pa64-regs.h (REG_ALLOC_ORDER): Likewise.
+ 
+ 2004-07-13  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	PR tree-optimization/16443
+ 	* tree-ssa-alias.c: Add more description for
+ 	CALL_CLOBBERED_VARS and ADDRESSABLE_VARS.
+ 	* tree-ssa-operands.c (get_asm_expr_operands): Re-order the
+ 	clobbering of call-clobbered and addressable variables.  If
+ 	there are any before aliases have been computed, add them.
+ 
+ 2004-07-13  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-optimize.c (execute_todo): Flush DUMP_FILE before
+ 	verification.
+ 
+ 2004-07-13  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390.c (s390_gimplify_va_arg): Use size_int instead
+ 	of build_int_2.  Convert both operands of PLUS_EXPR and MULT_EXPR
+ 	to the same type.
+ 
+ 2004-07-13  Per Bothner  <per@bothner.com>
+ 
+ 	* collect2.c (main):  Handle --no-demangle and --demangle flags.
+ 
+ 2004-07-13  Sebastian Pop  <pop@cri.ensmp.fr>
+ 
+ 	* Makefile.in (OBJS-common): Add tree-data-ref.o.
+ 	(tree-scalar-evolution.o): Add missing dependences on tree-pass.h flags.h.
+ 	(tree-data-ref.o): New rule.
+ 	* lambda.h: New file.
+ 	* tree-data-ref.c: New file.
+ 	* tree-data-ref.h: New file.
+ 	* tree.c (int_cst_value, tree_fold_gcd): New functions.
+ 	* tree.h (int_cst_value, tree_fold_gcd): Declared here.
+ 
+ 2004-07-13  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR target/13926
+ 	* config/sparc/sparc-protos.h (output_ubranch): New prototype.
+ 	* config/sparc/sparc.c (output_ubranch): New function.
+ 	* config/sparc/sparc.md (jump pattern): Use it.
+ 
+ 2004-07-13  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR target/16494
+ 	* config/sparc/sparc.c (output_cbranch): Properly guard
+ 	the code handling far branches with TARGET_V9.
+ 	* config/sparc/sparc.md (length attribute): Document the
+ 	side-effect of having a length greater or equal to 3.
+ 
+ 2004-07-13  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 	    Lloyd Parkes  <lloyd@must-have-coffee.gen.nz>
+ 
+ 	PR target/15186
+ 	* config/sparc/sol2-bi.h (LINK_ARCH64_SPEC_BASE): Pass
+ 	/usr/ucblib/sparcv9 as -R path when -compat-bsd is specified.
+ 
+ 2004-07-13  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 	    Martin Sebor  <sebor@roguewave.com>
+ 
+ 	PR target/12602
+ 	* doc/invoke.texi (SPARC options): Document -threads
+ 	and -pthreads on Solaris.
+ 
+ 2004-07-13  Richard Henderson  <rth@redhat.com>
+ 
+ 	* builtins.c (std_gimplify_va_arg_expr): Handle types passed
+ 	by reference.
+ 	(ind_gimplify_va_arg_expr): Remove.
+ 	* tree.h (ind_gimplify_va_arg_expr): Remove.
+ 	* config/pa/pa.c (hppa_gimplify_va_arg_expr): Don't use it.
+ 	* config/mmix/mmix.c (mmix_function_arg_pass_by_reference): Allow
+ 	argsp to be null.
+ 
+ 	* config/arc/arc.c (arc_gimplify_va_arg_expr): Remove.
+ 	(TARGET_GIMPLIFY_VA_ARG_EXPR): Remove.
+ 	* config/cris/cris.c, config/fr30/fr30.c, config/frv/frv.c,
+ 	config/iq2000/iq2000.c, config/m32r/m32r.c, config/mmix/mmix.c,
+ 	config/mn10300/mn10300.c, config/v850/v850.c: Similarly.
+ 
+ 2004-07-13  Richard Henderson  <rth@redhat.com>
+ 
+ 	* function.c (pass_by_reference): New.
+ 	(assign_parm_find_data_types): Use it.
+ 	* calls.c (initialize_argument_information): Likewise.
+ 	(emit_library_call_value_1): Likewise.
+ 	* expr.h (FUNCTION_ARG_PASS_BY_REFERENCE): Remove.
+ 	* function.h (pass_by_reference): Declare.
+ 
+ 2004-07-13  Richard Henderson  <rth@redhat.com>
+ 
+ 	* target-def.h (TARGET_MUST_PASS_IN_STACK): New.
+ 	* target.h (struct gcc_target): Add calls.must_pass_in_stack.
+ 	* expr.h (MUST_PASS_IN_STACK): Remove.
+ 	* system.h (MUST_PASS_IN_STACK): Poison.
+ 	* tree.h (must_pass_in_stack_var_size): Declare.
+ 	(must_pass_in_stack_var_size_or_pad): Declare.
+ 	* calls.c (must_pass_in_stack_var_size): New.
+ 	(must_pass_in_stack_var_size_or_pad): Rename from
+ 	default_must_pass_in_stack.
+ 	* config/alpha/alpha.c (unicosmk_must_pass_in_stack): New.
+ 	(TARGET_MUST_PASS_IN_STACK): New.
+ 	* config/alpha/unicosmk.h (MUST_PASS_IN_STACK): Remove.
+ 	* config/fr30/fr30.c (fr30_must_pass_in_stack): New.
+ 	(TARGET_MUST_PASS_IN_STACK): New.
+ 	* config/fr30/fr30.h (MUST_PASS_IN_STACK): Remove.
+ 	* config/frv/frv.c (frv_must_pass_in_stack): New.
+ 	(TARGET_MUST_PASS_IN_STACK): New.
+ 	* config/frv/frv.h (MUST_PASS_IN_STACK): Remove.
+ 	* config/i386/i386-protos.h (ix86_must_pass_in_stack): Remove.
+ 	* config/i386/i386.c (TARGET_MUST_PASS_IN_STACK): New.
+ 	(ix86_must_pass_in_stack): Make static.
+ 	* config/i386/i386.h (MUST_PASS_IN_STACK): Remove.
+ 	* config/ia64/ia64.c (TARGET_MUST_PASS_IN_STACK): New.
+ 	* config/ia64/ia64.h (MUST_PASS_IN_STACK): Remove.
+ 	* config/m32r/m32r.c (TARGET_MUST_PASS_IN_STACK): New.
+ 	* config/m32r/m32r.h (MUST_PASS_IN_STACK): Remove.
+ 	* config/mcore/mcore-protos.h (mcore_must_pass_on_stack): Remove.
+ 	* config/mcore/mcore.c (TARGET_MUST_PASS_IN_STACK): New.
+ 	(mcore_must_pass_on_stack): Remove.
+ 	* config/mcore/mcore.h (MUST_PASS_IN_STACK): Remove.
+ 	* config/mips/mips.c (TARGET_MUST_PASS_IN_STACK): New.
+ 	* config/mips/mips.h (MUST_PASS_IN_STACK): Remove.
+ 	* config/pa/pa.c (TARGET_MUST_PASS_IN_STACK): New.
+ 	* config/pa/pa.h (MUST_PASS_IN_STACK): Remove.
+ 	* config/rs6000/aix.h (MUST_PASS_IN_STACK): Remove.
+ 	* config/rs6000/linux64.h (MUST_PASS_IN_STACK): Remove.
+ 	* config/rs6000/rs6000.c (rs6000_must_pass_in_stack): New.
+ 	(TARGET_MUST_PASS_IN_STACK): New.
+ 	* config/sh/sh.c (TARGET_MUST_PASS_IN_STACK): New.
+ 	* config/sh/sh.h (MUST_PASS_IN_STACK): Remove.
+ 	* config/sparc/sparc.c (TARGET_MUST_PASS_IN_STACK): New.
+ 	* config/sparc/sparc.h (MUST_PASS_IN_STACK): Remove.
+ 	* config/xtensa/xtensa.c (TARGET_MUST_PASS_IN_STACK): New.
+ 	* config/xtensa/xtensa.h (MUST_PASS_IN_STACK): Remove.
+ 	* doc/tm.texi (TARGET_MUST_PASS_IN_STACK): Update from
+ 	MUST_PASS_IN_STACK.
+ 
+ 	* calls.c, function.c, config/alpha/alpha.c, config/alpha/alpha.h,
+ 	config/alpha/unicosmk.h, config/alpha/vms.h, config/c4x/c4x.c,
+ 	config/cris/cris.h, config/fr30/fr30.c, config/fr30/fr30.h,
+ 	config/frv/frv.c, config/i386/i386.c, config/iq2000/iq2000.c,
+ 	config/mcore/mcore.c, config/mcore/mcore.h, config/mips/mips.c,
+ 	config/mmix/mmix.c, config/mmix/mmix.h, config/rs6000/rs6000.c,
+ 	config/sh/sh.c, config/sh/sh.h, config/stormy16/stormy16.c,
+ 	config/xtensa/xtensa.c: Use target hook.
+ 
+ 2004-07-13  Anthony Heading  <aheading@jpmorgan.com>
+ 
+ 	* configure.ac (gcc_cv_as_offsetable_lo10): Fix a typo.
+ 	* configure: Rebuilt.
+ 
+ 2004-07-13  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* doc/invoke.texi: Remove documentation for MIPS -mrnames option.
+ 	* config/mips/mips.h (mips_reg_names): Don't declare.
+ 	(MASK_NAME_REGS): Delete.  Shuffle other MASK_* values down.
+ 	(TARGET_NAME_REGS): Delete.
+ 	(TARGET_SWITCHES): Remove -mrnames.
+ 	(REGISTER_NAMES): Initialise with the old contents of mips_reg_names[].
+ 	(ADDITIONAL_REGISTER_NAMES): Remove entries for names mentioned
+ 	in REGISTER_NAMES.
+ 	* config/mips/mips.c (mips_reg_names, mips_sw_reg_names): Delete.
+ 	(override_options): Remove handling of TARGET_NAME_REGS.
+ 
+ 2004-07-13  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.h (TARGET_*): Boolify.
+ 
+ 2004-07-12  Nick Clifton  <nickc@redhat.com>
+ 
+ 	* config.gcc: Add sh-*-symbianelf target.
+ 	* config/sh/sh.c: Add new target macros:
+ 	TARGET_ENCODE_SECTION_INFO, TARGET_STRIP_NAME_ENCODING,
+ 	TARGET_CXX_IMPORT_EXPORT_CLASS.
+ 	(sh_file_start): Create a definition of the .directive section.
+ 	(sh_attribute): Add dllimport and dllexport attributes.
+ 	* config/sh/symbian-pre.h: New file.
+ 	* config/sh/symbian-post.h: New file.
+ 	* config/sh/symbian.c: New file. Contains Symbian specific
+ 	functions.
+ 	* config/sh/sh-protos.h: Add prototypes for new functions
+ 	provided by symbian.c.
+ 	* config/sh/t-symbian: New file.
+ 	* doc/extend.texi: Document support for dllimport and dllexport
+ 	attributes by the sh-symbianelf target.
+ 
+ 2004-07-12  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	* Makefile.in (AR): Use @AR@ not ar.
+ 	(NM): New.
+ 	(AR_FOR_TARGET): Use $(AR) not ar for native.
+ 	(NM_FOR_TARGET): Use $(NM) not nm for native.
+ 	* configure.ac: Add AC_CHECK_PROG calls for NM and AR.
+ 	* configure: Regenerate.
+ 
+ 2004-07-12  David S. Miller  <davem@nuts.davemloft.net>
+ 
+ 	* config/sparc/sparc.md (ashlsi3): Eliminate const 1
+ 	special case.
+ 	(ashldi3_sp64): Likewise.
+ 
+ 2004-07-12  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	PR target/16477
+ 	* pa.c (function_arg): Update comment.
+ 	* pa.h (BLOCK_REG_PADDING): Define.
+ 
+ 2004-07-12  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	PR tree-optimization/16461
+ 	* tree-tailcall.c (independent_of_stmt_p): Handle non-SSA name
+ 	arguments of phi nodes.
+ 
+ 2004-07-12  Devang Patel  <dpatel@apple.com>
+ 
+ 	* doc/invoke.texi (Darwin Options): Document -gused and -gfull.
+ 
+ 2004-07-12  Steve Ellcey  <sje@cup.hp.com>
+ 
+ 	* function.c (expand_function_start): Ensure r_save is in Pmode.
+ 	* calls.c (prepare_call_address): Ensure static_chain_value is
+ 	in Pmode.
+ 	* builtins.c (expand_builtin_nonlocal_goto): Ensure r_label and
+ 	r_save_area are in Pmode.
+ 	* config/ia64/ia64.c (ia64_initialize_trampoline): Ensure addr,
+ 	fnaddr, and static_chain are in Pmode.
+ 
+ 2004-07-12  Vladimir Makarov  <vmakarov@redhat.com>
+ 
+ 	PR target/16445
+ 	* config/ia64/ia64.c (bundling): Don't count ignored insns.
+ 
+ 2004-07-12  Richard Henderson  <rth@redhat.com>
+ 
+ 	* target.h (struct gcc_target): Move gimplify_va_arg_expr
+ 	next to build_builtin_va_list.
+ 	* target-def.h (TARGET_GIMPLIFY_VA_ARG_EXPR): Update to match.
+ 	* builtins.c (gimplify_va_arg_expr): Likewise.
+ 	* gimplify.c (copy_if_shared_r): Likewise.
+ 
+ 2004-07-12  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	* passes.c (rest_of_decl_compilation): Don't defer call of
+ 	assemble_variable if its DECL_RTL is already set.
+ 
+ 2004-07-12  Sebastian Pop  <pop@cri.ensmp.fr>
+ 
+ 	* cfgloop.h (struct loop): Add nb_iterations field.
+ 	(current_loops): Declare.
+ 	* tree-chrec.c (chrec_not_analyzed_yet,
+ 	chrec_dont_know, chrec_known, count_ev_in_wider_type,
+ 	chrec_contains_symbols_defined_in_loop): Remove the temporary
+ 	hooks.
+ 	* tree-flow-inline.h (loop_containing_stmt): New function.
+ 	* tree-scalar-evolution.c: Add implementation.
+ 	* tree-scalar-evolution.h: Add declarations.
+ 
+ 2004-07-12 Vladimir Makarov <vmakarov@redhat.com>
+ 
+ 	PR rtl-optimization/15921
+ 	* Makefile.in (global.o): Add recog.h.
+ 
+ 	* global.c (recog.h): Add the include-clause.
+ 	(bb_info): New member earlyclobber.
+ 	(allocate_bb_info, free_bb_info): Initialize/finish the new
+ 	member.
+ 	(earlyclobber_regclass, earlyclobber_regclass_length): The new
+ 	global variables.
+ 	(check_earlyclobber, regclass_intersect,
+ 	mark_reg_use_for_earlyclobber, mark_reg_use_for_earlyclobber_1):
+ 	New functions.
+ 	(calculate_local_reg_bb_info): Calculate value of earlyclobber.
+ 	(make_accurate_live_analysis): Modify pavin.
+ 
+ 2004-07-12  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-cfg.c (find_taken_edge): Statically compute the truth
+ 	value of a predicate comparing an SSA_NAME to itself.
+ 
+ 2004-07-12  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_rtx_costs): Indicate that the
+ 	rs6000 doesn't have shift-and-add or shift-and-sub instructions
+ 	by returning the cost of a multiplication plus an addition.
+ 
+ 2004-07-12  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	PR tree-optimization/14107
+ 	* gimplify.c (gimplify_return_expr): Accept a
+ 	RETURN_EXPR with an error argument.
+ 	* tree-optimize.c (init_tree_optimization_passes):
+ 	Run pass_warn_function_return at -O0.
+ 
+ 2004-07-12  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* doc/invoke.texi: Correct -fasynchronous-unwind-tables option
+ 	index entry.
+ 
+ 2004-07-12  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.c (mips_use_dfa_pipeline_interface): Delete.
+ 	(TARGET_SCHED_USE_DFA_PIPELINE_INTERFACE): Define to hook_int_void_1.
+ 	* config/mips/3000.md: Add copyright notice.  Remove automota and
+ 	function units; use generic ones instead.  Only define reservations
+ 	for things that are different from generic.md.  Extend each clause
+ 	to include r3900.
+ 	* config/mips/{4000,4100,4300,4600,5000,6000,generic}.md: New files.
+ 	* config/mips/mips.md: Include them. Remove define_function_units.
+ 	(alu, imuldiv): New automata and units.
+ 
+ 2004-07-12  Ben Elliston  <bje@au.ibm.com>
+ 
+ 	* doc/invoke.texi (Optimize Options): Document -frename-registers
+ 	not being enabled by default at -O3.
+ 
+ 2004-07-11  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* fold-const.c (fold) <PLUS_EXPR>: Canonicalize X + -C as X - C for
+ 	floating point additions, to keep real immediate constant positive.
+ 	<MINUS_EXPR>:  For floating point subtractions, only transform X - -C
+ 	into X + C, and leave positive real constants as X - C.
+ 
+ 2004-07-11  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	* pa.c (hppa_gimplify_va_arg_expr): Remove comment.
+ 
+ 2004-07-11  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	PR tree-optimization/15654
+ 	* tree-tailcall.c (eliminate_tail_call): Remove unreachable code.
+ 
+ 2004-07-11  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* builtins.c (fold_builtin_fputs): Don't bother converting the
+ 	return type to integer_type_node, as we've already checked that
+ 	the result will be ignored.
+ 
+ 	* tree-eh.c (tree_could_trap_p): Add support for -ftrapv such
+ 	that signed addition, subtraction, multiplication, division,
+ 	remainder, negation and absolute value may potentially trap.
+ 
+ 	* fold-const.c (fold_ignored_result): New function to strip
+ 	non-side-effecting tree nodes from an expression whose result
+ 	is ignored.
+ 	(fold_convert): Call fold_ignored_result when casting a value
+ 	to VOID_TYPE.
+ 	(omit_one_operand):  Call fold_ignored_result on the "omitted"
+ 	operand when building a COMPOUND_EXPR.
+ 	(pedantic_omit_one_operand): Likewise.
+ 	* tree.h (fold_ignored_result): Prototype here.
+ 	* tree-ssa-ccp.c (ccp_fold_builtin): Call fold_ignored_result
+ 	when we're going to ignore the result.
+ 
+ 2004-07-11  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR tree-opt/16383
+ 	* tree-ssa-ccp.c (fold_stmt_r): Split out...
+ 	* tree.c (fields_compatible_p, find_compatible_field): ... new.
+ 	* tree.h (fields_compatible_p, find_compatible_field): Declare.
+ 	* tree-sra.c (sra_hash_tree): Hash fields by offset.
+ 	(sra_elt_eq): Use fields_compatible_p.
+ 	(generate_one_element_ref): Use find_compatible_field.
+ 
+ 2004-07-11  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR tree-opt/16422
+ 	* tree-sra.c (generate_one_element_init): New.
+ 	(generate_element_init): Use it.
+ 	(scalarize_init): Push/pop gimplify context around it.
+ 	(find_new_referenced_vars_1, find_new_referenced_vars): New.
+ 	* gimplify.c (gimplify_expr): Allow SSA_NAME.
+ 
+ 2004-07-11  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* rtlanal.c (insn_rtx_cost): New function, moved and renamed from
+ 	combine.c's combine_insn_cost.
+ 	* rtl.h (insn_rtx_cost): Prototype here.
+ 	* combine.c (combine_insn_cost): Delete function.
+ 	(combine_validate_cost): Update callers of combine_insn_cost to
+ 	call insn_rtx_cost instead.
+ 	(combine_instructions): Likewise.  Use NONJUMP_INSN_P to avoid
+ 	requesting the rtx_cost of call and/or jump instructions.
+ 
+ 	* ifcvt.c (total_bb_rtx_cost): Use insn_rtx_cost instead of calling
+ 	rtx_cost directly.  Don't request/use the cost of call or jump
+ 	instructions.  Return -1 if the cost of any instruction can't be
+ 	determined (or the BB contains a function call).
+ 	(find_if_case_1): Abort transformation if total_bb_rtx_cost returns
+ 	-1 (i.e. can't determine the cost of any instruction or the basic
+ 	block contains a subroutine call).
+ 	(find_if_case_2): Likewise.
+ 
+ 2004-07-11  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* rs6000.c (struct processor_costs): Change semantics of fields to
+ 	include the COST_N_INSNS scaling, and update all initializers.
+ 	(rs6000_rtx_costs): Don't use COSTS_N_INSNS on rs6000_cost fields.
+ 	Use COSTS_N_INSNS(1) for NOT, SIGN_EXTEND, ZERO_EXTEND and COMPARE.
+ 	Use rs6000_cost->fp for both FLOAT_TRUNCATE and UNSPEC_FRSP.  When
+ 	optimizing for size, use COSTS_N_INSNS(1) for CALL and IF_THEN_ELSE.
+ 
+ 2004-07-11  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* LANGUAGES: Remove obsolete information.
+ 
+ 2004-07-11  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/linux.h (MD_FALLBACK_FRAME_STATE_FOR): For SIGSEGV and
+ 	SIGBUS signal frames, the PSW address points *to* the faulting
+ 	instruction, not after it.
+ 
+ 2004-07-11  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390.c (legitimize_tls_address): Handle constant offsets
+ 	added to TLS symbol addresses.
+ 
+ 2004-07-11  Richard Henderson  <rth@redhat.com>
+ 
+ 	* expmed.c (init_expmed): Use stack-local structures for
+ 	temporary rtl.  Don't recognize shifts.
+ 
+ 2004-07-11  Richard Henderson  <rth@redhat.com>
+ 
+ 	* expr.c (store_expr): Don't fiddle subreg promotion for types
+ 	with precision smaller than the mode.
+ 
+ 2004-07-11  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* tree.h (all_types_permanent): Remove.
+ 
+ 2004-07-11  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* langhooks.h (estimate_num_insns, pushlevel, poplevel, set_block,
+ 	maybe_build_cleanup, update_decl_after_saving): Remove hooks.
+ 	* langhooks.c (lhd_clear_binding_stack): Remove.
+ 	* langhooks-def.h (lhd_clear_binding_stack,
+ 	LANG_HOOKS_MAYBE_BUILD_CLEANUP,
+ 	LANG_HOOKS_UPDATE_DECL_AFTER_SAVING,
+ 	LANG_HOOKS_TREE_INLINING_ESTIMATE_NUM_INSNS, LANG_HOOKS_PUSHLEVEL,
+ 	LANG_HOOKS_POPLEVEL, LANG_HOOKS_SET_BLOCK): Remove.
+ 	(LANG_HOOKS_CLEAR_BINDING_STACK): Define to lhd_do_nothing.
+ 	* system.h (LANG_HOOKS_TREE_INLINING_ESTIMATE_NUM_INSNS,
+ 	LANG_HOOKS_PUSHLEVEL, LANG_HOOKS_SET_BLOCK,
+ 	LANG_HOOKS_MAYBE_BUILD_CLEANUP,
+ 	LANG_HOOKS_UPDATE_DECL_AFTER_SAVING, LANG_HOOKS_POPLEVEL): Poison.
+ 	* tree.h (poplevel): Don't declare.
+ 	* c-lang.c (LANG_HOOKS_CLEAR_BINDING_STACK, LANG_HOOKS_PUSHLEVEL,
+ 	LANG_HOOKS_POPLEVEL, LANG_HOOKS_SET_BLOCK): Remove.
+ 	* objc/objc-lang.c (LANG_HOOKS_CLEAR_BINDING_STACK,
+ 	LANG_HOOKS_PUSHLEVEL, LANG_HOOKS_POPLEVEL, LANG_HOOKS_SET_BLOCK):
+ 	Remove.
+ 
+ 2004-07-11  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	PR tree-optimization/16437
+ 	* c-common.c (shorten_compare): Don't mark result of conversion to
+ 	narrower signed type as overflowing.
+ 	* fold-const.c (decode_field_reference): Determine whether
+ 	signedness comes from outer type using precision rather than size.
+ 
+ 2004-07-11  Phil Edwards  <phil@codesourcery.com>
+ 
+ 	* configure.ac:  Alphabetize --enable-checking list, add
+ 	missing valgrind entry.
+ 	* configure:  Regenerate.
+ 
+ 2004-07-11  Phil Edwards  <phil@codesourcery.com>
+ 
+ 	* doc/install.texi (Testing):  Fix syntax in "make check" example.
+ 
+ 2004-07-10  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	* config/gofast.h (gofast_maybe_init_libfuncs): Use SImode for litodp.
+ 
+ 2004-07-10  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	PR rtl-optimization/16001
+ 	* loop-iv.c (iv_number_of_iterations): Prevent copy propagation in
+ 	niter_expr.
+ 
+ 2004-07-10  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* config/darwin.h (LINK_COMMAND_SPEC): Don't call c++filt.
+ 
+ 2004-07-10  Steve Kargl  <sgk@troutmask.apl.washington.edu>
+ 	    James Morrison  <phython@gcc.gnu.org>
+ 
+ 	* doc/contrib.texi (Contributors): Add gfortran contributors and
+ 	fix a couple of typos.
+ 
+ 2004-07-10  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	PR rtl-optimization/15387
+ 	* calls.c (check_sibcall_argument_overlap_1): Handle pointers
+ 	to incoming args space correctly.
+ 
+ 2004-07-10  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	* pa.c (output_indirect_call): Only use %r2 as the link register in
+ 	indirect calls with the long PA 2.0 pc-relative branch.
+ 
+ 2004-07-10  Daniel Jacobowitz  <dan@debian.org>
+ 
+ 	* config/i386/i386.c (override_options): Pick a 64-bit CPU
+ 	for the default tuning if TARGET_64BIT.
+ 
+ 2004-07-10  Richard Henderson  <rth@redhat.com>
+ 
+ 	* builtins.c (std_gimplify_va_arg_expr): Widen align/boundary
+ 	to HOST_WIDE_INT.  Fold pad-args-down arithmetic.
+ 
+ 2004-07-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* expr.h (store_bit_field, extract_bit_field): Remove last argument.
+ 	* expmed.c (store_bit_field, extract_bit_field): Remove last
+ 	argument.
+ 	* builtins.c (expand_builtin_signbit): Adjust callers.
+ 	* optabs.c (expand_vector_binop, expand_vector_unop): Likewise.
+ 	* calls.c (store_unaligned_arguments_into_pseudos): Likewise.
+ 	* ifcvt.c (noce_emit_move_insn): Likewise.
+ 	* stmt.c (expand_return): Likewise.
+ 	* expr.c (emit_group_load, emit_group_store, copy_blkmode_from_reg,
+ 	store_field, expand_expr_real_1): Likewise.
+ 
+ 2004-07-10  Richard Henderson  <rth@redhat.com>
+ 
+ 	* builtins.c (std_gimplify_va_arg_expr): Fix borked BIT_AND_EXPR.
+ 
+ 2004-07-09  Mike Stump  <mrs@apple.com>
+ 
+ 	* config/darwin.c (no_dead_strip): Add.
+ 	(HAVE_DEAD_STRIP): Add.
+ 	(darwin_emit_unwind_label): Ensure that we don't dead code strip
+ 	the .eh label.
+ 
+ 2004-07-09  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-ssa-loop-im.c: New file.
+ 	* Makefile.in (tree-ssa-loop-im.o): Add.
+ 	* cfgloop.c (superloop_at_depth): New function.
+ 	* cfgloop.h (superloop_at_depth): Declare.
+ 	* common.opt (ftree-lim): New flag.
+ 	* expr.c (array_ref_up_bound): New function.
+ 	* params.def (PARAM_LIM_EXPENSIVE): New parameter.
+ 	* timevar.def (TV_LIM): New timevar.
+ 	* tree-dfa.c (compute_immediate_uses): Respect TDFA_USE flags when
+ 	computing immediate uses of a phi node.
+ 	* tree-flow.h (struct tree_ann_common_d): Add aux field.
+ 	(loop_commit_inserts, for_each_index, tree_ssa_lim): Declare.
+ 	* tree-optimize.c (init_tree_optimization_passes): Add pass_lim.
+ 	* tree-pass.h (pass_lim): Declare.
+ 	* tree-ssa-loop.c (tree_ssa_loop_im, gate_tree_ssa_loop_im): New
+ 	functions.
+ 	(pass_lim): New pass structure.
+ 	* tree-eh.c (tree_could_trap_p): Handle ARRAY_REFs correctly.
+ 	* tree.c (in_array_bounds_p): New function.
+ 	* tree.h (TREE_THIS_NOTRAP): Define also for ARRAY_REFs.
+ 	(in_array_bounds_p, array_ref_up_bound): Declare.
+ 	* doc/invoke.texi (-ftree-lim, --param lim-expensive): Document.
+ 	* doc/passes.texi (tree-ssa-loop-im.c): Document.
+ 
+ 2004-07-09  Richard Henderson  <rth@redhat.com>
+ 
+ 	* builtins.c (expand_builtin_stpcpy): Don't modify len.
+ 
+ 	* tree-ssa-ccp.c (ccp_fold_builtin): Strip conversion exprs
+ 	with prejudice.
+ 
+ 2004-07-10  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* flags.h: Delete redundant prototypes that are being generated
+ 	in options.h from common.opt.
+ 	* common.opt: Add in the expository comments formerly in flags.h.
+ 
+ 2004-07-09  Jan Beulich  <jbeulich@novell.com>
+ 
+ 	* config/i386/i386.c (init_cumulative_args): Set mmx/sse registers
+ 	available for use only when TARGET_MMX/_SSE is set, and check for
+ 	variable argument function if any register count is non-zero.
+ 	(function_arg): Correctly suppress repeated warnings for passing SSE
+ 	vectors are arguments without SSE enabled.
+ 	(ix86_function_arg_boundary): Without SSE enabled, the use of what
+ 	would be SSE register modes does no longer influence the alignment.
+ 
+ 2004-07-09  Richard Henderson  <rth@redhat.com>
+ 
+ 	* builtins.c (std_gimplify_va_arg_expr): Deny ARGS_GROW_DOWNWARD.
+ 	Always align upward to arg boundary.  Use size_in_bytes/round_up.
+ 	Maintain type-correctness of constants.
+ 	* stor-layout.c (round_up, round_down): Special-case powers of 2.
+ 
+ 2004-07-09  David S. Miller  <davem@nuts.davemloft.net>
+ 
+ 	* config/sparc/sparc.c (*_costs): Scale instruction costs
+ 	by COSTS_N_INSNS.
+ 	(sparc_rtx_costs): Adjust as appropriate.
+ 
+ 2004-07-09  Jan Beulich  <jbeulich@novell.com>
+ 
+ 	* config/i386/mm3dnow.h: New.
+ 	* config.gcc: Add mm3dnow.h to extra_headers for i?86 and x86-64.
+ 
+ 2004-07-09  Richard Henderson  <rth@redhat.com>
+ 
+ 	* simplify-rtx.c (simplify_const_relational_operation): Only
+ 	look at bounds of scalar integers.
+ 
+ 2004-07-09  Jan Beulich  <jbeulich@novell.com>
+ 
+ 	* config/i386/i386.md (sse2_clflush): Use correct operand for clflush.
+ 
+ 2004-07-09  Andrew Pinski  <apinski@apple.com>
+ 
+ 	* objc/objc-act.c (build_module_descriptor): Mark UOBJC_MODULES_decl as
+ 	always referenced.
+ 	(synth_forward_declarations): Likewise for UOBJC_CLASS_decl and
+ 	UOBJC_METACLASS_decl.
+ 
+ 2004-07-09  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	PR target/16364
+ 	* config/ia64/ia64.c (ia64_function_arg): For a single element HFA,
+ 	do return a parallel if hfa_mode == XFmode and mode == TImode.
+ 
+ 2004-07-09  Jan Beulich  <jbeulich@novell.com>
+ 
+ 	* c-typeck.c (build_unary_op): include VECTOR_TYPE in set of codes
+ 	permissible for unary plus.
+ 
+ 2004-07-09  Jan Beulich  <jbeulich@novell.com>
+ 
+ 	* builtin-types.def (BT_UINT): Rename from BT_UNSIGNED.
+ 	(BT_FN_UINT): Rename from BT_FN_UNSIGNED.
+ 	(BT_FN_PTR_UINT): Rename from BT_FN_PTR_UNSIGNED.
+ 	(BT_ULONG, BT_ULONGLONG, BT_UINTMAX, BT_FN_INT_UINT, BT_FN_INT_ULONG,
+ 	BT_FN_INT_ULONGLONG, BT_FN_INT_INTMAX, BT_FN_INT_UINTMAX): New.
+ 	* builtins.def (BUILTIN_CLZxxx, BUILTIN_CTXxxx, BUILTIN_PARITYxxx,
+ 	BUILTIN_POPCOUNTxxx): Arguments are unsigned.
+ 	(BUILTIN_xxxIMAX): New.
+ 	* builtins.c (expand_builtin): Handle BUILT_IN_FFSIMAX,
+ 	BUILT_IN_CLZIMAX, BUILT_IN_CTZIMAX, BUILT_IN_POPCOUNIMAX, and
+ 	BUILT_IN_PARITYIMAX.
+ 
+ 2004-07-09  David S. Miller  <davem@nuts.davemloft.net>
+ 
+ 	* config/sparc/sparc.h (processor_costs): Define.
+ 	(sparc_costs): Declare.
+ 	* config/sparc/sparc.c (cypress_costs, supersparc_costs,
+ 	hypersparc_costs, sparclet_costs, ultrasparc_costs,
+ 	ultrasparc3_costs): New.
+ 	(sparc_override_options): Set sparc_costs as appropriate.
+ 	(sparc_rtx_costs): Use sparc_costs instead of messy
+ 	conditionals.
+ 
+ 2004-07-09  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* doc/md.texi (Processor pipeline description): Mention that
+ 	the old pipeline description is deprecated.
+ 
+ 	* config/rs6000/7450.md (automaton ppc7450): Split up, move
+ 	mciu_7450 function unit to...
+ 	(automaton ppc7450mciu): ...new automaton.
+ 
+ 	* haifa-sched.c (insert_schedule_bubbles_p): Remove.
+ 	(schedule_block): Don't consider inserting bubbles.
+ 	(sched_init): Don't initialize DFA bubbles.
+ 	* target-def.h (TARGET_SCHED_INIT_DFA_BUBBLES,
+ 	TARGET_SCHED_DFA_BUBBLE): Remove.
+ 	* target.h (init_dfa_bubbles, dfa_bubble): Remove hooks.
+ 	* doc/tm.texi (TARGET_SCHED_INIT_DFA_BUBBLES,
+ 	TARGET_SCHED_DFA_BUBBLE): Remove documentation.
+ 
+ 	* stmt.c (conditional_context): Remove prototype.
+ 	* tree.h (conditional_context): Remove.
+ 	* tree-cfg.c (pre_insert_on_edge): Remove.
+ 
+ 	* c-common.h (c_expand_asm_operands): Remove prototype.
+ 	* c-typeck.c (c_expand_asm_operands): Remove.
+ 
+ 2004-07-09  Jan Beulich  <jbeulich@novell.com>
+ 
+ 	* config/i386/i386.c (classify_argument): Treat V1xx modes the same as
+ 	their base modes. CTImode, TCmode, and XCmode must be passed in memory.
+ 	TFmode (__float128) must be is an SSE/SSEUP pair. V2SImode, V4HImode,
+ 	and V8QI are class SSE. All sufficiently small remaining vector modes
+ 	must be passed in one or two integer registers.
+ 	(ix86_libcall_value): TFmode must be returned in xmm0, XCmode must be
+ 	returned in memory.
+ 	(bdesc_2arg, ix86_init_mmx_sse_builtins): __builtin_ia32_pmuludq and
+ 	__builtin_ia32_pmuludq128 have non-uniform argument and return types
+ 	and must thus be handled explicitly.
+ 	* config/i386/i386.md (*movdi_1_rex64): Add cases for moving between
+ 	MMX and XMM regs.
+ 	(movv8qi_internal, movv4hi_internal, movv2si_internal,
+ 	movv2sf_internal): Permit moving between MMX and XMM registers (since
+ 	MMX areguments and return values are passed in XMM registers).
+ 	(sse2_umulsidi3): Correct type and mode.
+ 
+ 2004-07-09  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-cfg.c (dump_cfg_stats): Fix 64-bit format mismatch errors.
+ 
+ 2004-07-09  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* config/rs6000/40x.md: Split into two automatons.
+ 
+ 2004-07-09  Zack Weinberg  <zack@codesourcery.com>
+ 	    Andrew Pinski  <apinski@apple.com>
+ 
+ 	* c-opts.c (c_common_post_options): Force unit-at-a-time mode
+ 	on when we have more than one input file.
+ 	(c_common_parse_file): Restore loop over all input files.
+ 	Clarify diagnostic for -dy when YYDEBUG wasn't defined.
+ 
+ 	* c-decl.c (set_type_context): New function.
+ 	(pop_scope): Use it to set context of types.  When we
+ 	encounter a TYPE_DECL, set the context of the attached type too.
+ 	(pop_file_scope): Don't call cpp_undef_all here.
+ 	(diagnose_mismatched_decls): Do not complain about a second
+ 	definition of an 'extern inline' function if it's not in the
+ 	same translation unit.  Do not complain about inline
+ 	declaration after use if the use was in a different
+ 	translation unit.
+ 	(merge_decls): Don't clobber olddecl's DECL_CONTEXT.
+ 	(pushdecl): Do not put DECL_EXTERNAL, !TREE_PUBLIC decls in
+ 	the external scope.
+ 	(pushdecl_top_level): Likewise.
+ 	(grokdeclarator): Clarify what is going on with setting
+ 	DECL_EXTERNAL on function types, a little.
+ 	(c_write_global_declarations): Don't do anything if
+ 	-fsyntax-only or errors have been encountered.
+ 
+ 2004-07-09  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* vec.c, vec.h (vec_assert_fail): Use unsigned int for LINE argument.
+ 
+ 2004-07-09  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	PR target/16459
+ 	* pa.c (output_indirect_call): Use %r2 as the link register when
+ 	calling $$dyncall with a pc-relative branch.
+ 
+ 2004-07-08  Gerald Pfeifer  <gerald@pfeifer.com>
+ 
+ 	* doc/install.texi (Binaries): Mention OpenPKG.
+ 
+ 2004-07-09  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	Fix PR tree-optimization/15555
+ 	* tree-dfa.c (dump_variable): If the variable is a pointer
+ 	SSA_NAME, also dump its points-to information.
+ 	* tree-flow.h (struct ptr_info_def): Add field
+ 	is_dereferenced.
+ 	(dump_points_to_info_for): Declare.
+ 	(debug_points_to_info_for): Declare.
+ 	* tree-optimize.c (init_tree_optimization_passes): Add a
+ 	second alias analysis pass after DOM2.
+ 	Move pass_del_pta to a later spot.
+ 	* tree-ssa-alias.c (compute_points_to_and_addr_escape): Do not
+ 	create a name tags when we find a dereferenced pointer.  Just
+ 	mark the pointer dereferenced.
+ 	(collect_points_to_info_for): Move code to clear points-to
+ 	information to create_name_tags.
+ 	(create_name_tags): New function.
+ 	(compute_flow_sensitive_aliasing): Call it.
+ 	(setup_pointers_and_addressables): Mark type tags for renaming
+ 	here instead of ...
+ 	(create_memory_tag): ... here.
+ 	(merge_pointed_to_info): Do not merge PT_MALLOC attributes.
+ 	(dump_points_to_info_for): Declare extern.
+ 	(debug_points_to_info_for): New function.
+ 
+ 2004-07-09  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* config/arc/arc.md: Switch to DFA-based scheduler description.
+ 	* config/arc/arc.c: Switch to DFA-based scheduler description.
+ 
+ 2004-07-09  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* arm/unknown-elf.h (TARGET_DEFAULT): Don't require an APCS frame
+ 	pointer.
+ 
+ 2004-07-09  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/xtensa/xtensa-protos.h (xtensa_va_arg): Remove.
+ 	* config/xtensa/xtensa.c (TARGET_GIMPLIFY_VA_ARG_EXPR): New.
+ 	(xtensa_gimplify_va_arg_expr): Rewrite from xtensa_va_arg.
+ 	* config/xtensa/xtensa.h (EXPAND_BUILTIN_VA_ARG): Remove.
+ 
+ 	* config/v850/v850-protos.h (v850_va_arg): Remove.
+ 	* config/v850/v850.c (TARGET_GIMPLIFY_VA_ARG_EXPR): New.
+ 	(v850_gimplify_va_arg_expr): Rewrite from v850_va_arg.
+ 	* config/v850/v850.h (EXPAND_BUILTIN_VA_ARG): Remove.
+ 	(FUNCTION_ARG_PASS_BY_REFERENCE): Handle variable size types.
+ 	(FUNCTION_ARG_CALLEE_COPIES): Use FUNCTION_ARG_PASS_BY_REFERENCE.
+ 
+ 2004-07-09  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	PR target/12133
+ 	* arm.c (arm_legitimate_index_p) Allow DFmode for soft-float
+ 	and DImode to use +/-4k offset.
+ 
+ 2004-07-09  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/stormy16/stormy16-protos.h (xstormy16_expand_builtin_va_arg):
+ 	Remove.
+ 	* config/stormy16/stormy16.c (TARGET_GIMPLIFY_VA_ARG_EXPR): New.
+ 	(xstormy16_gimplify_va_arg_expr): Rewrite from
+ 	xstormy16_expand_builtin_va_arg.
+ 	* config/stormy16/stormy16.h (EXPAND_BUILTIN_VA_ARG): Remove.
+ 
+ 	* config/sparc/sparc-protos.h (sparc_va_arg): Remove.
+ 	* config/sparc/sparc.c (sparc_gimplify_va_arg): Mark static.
+ 
+ 	* config/sh/sh-protos.h (sh_va_arg): Remove.
+ 	* config/sh/sh.c (TARGET_GIMPLIFY_VA_ARG_EXPR): New.
+ 	(sh_gimplify_va_arg_expr): Rewrite from sh_va_arg.
+ 	* config/sh/sh.h (EXPAND_BUILTIN_VA_ARG): Remove.
+ 
+ 	* config/pa/pa-protos.h (hppa_va_arg): Remove.
+ 	* config/pa/pa.c (TARGET_GIMPLIFY_VA_ARG_EXPR): New.
+ 	(hppa_gimplify_va_arg_expr): Rewrite from hppa_va_arg.
+ 	* config/pa/pa.h (EXPAND_BUILTIN_VA_ARG): Remove.
+ 
+ 	* config/mn10300/mn10300-protos.h (mn10300_va_arg): Remove.
+ 	* config/mn10300/mn10300.c (TARGET_GIMPLIFY_VA_ARG_EXPR): New.
+ 	(mn10300_gimplify_va_arg_expr): Rewrite from mn10300_va_arg.
+ 	* config/mn10300/mn10300.h (EXPAND_BUILTIN_VA_ARG): Remove.
+ 
+ 2004-07-09  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* config/sparc/sparc.md (return): Rewrite length formula.
+ 	* config/sparc/sparc.c (output_return): Pass 1 as 5th
+ 	argument to final_scan_insn when in a delay slot.
+ 	(output_sibcall): Likewise.
+ 
+ 2004-07-09  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* arm.c (arm_cpp_interwork): New variable.
+ 	(arm_override_options): Set it if TARGET_INTERWORK was on the command
+ 	line.
+ 	* arm.h (arm_cpp_interwork): Declare it.
+ 	(TARGET_CPU_CPP_BUILTINS): Use it to control definition of
+ 	__THUMB_INTERWORK__ in the preprocessor.
+ 
+ 2004-07-09  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* vec.h (VEC_T_alloc): Fix MEM_STAT_DECL pasto.
+ 
+ 2004-07-09  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR target/16416
+ 	* config/sparc/sol2-bi.h (OPTION_DEFAULT_SPECS): New macro.
+ 	Override default settings to account for -m32 and -m64.
+ 
+ 2004-07-08  Randolph Chung  <tausq@debian.org>
+ 
+ 	* pa32-linux.h (MD_FALLBACK_FRAME_STATE_FOR): Define.
+ 
+ 2004-07-09  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	* builtins.c (fold_builtin_strncpy): Make sure len is a constant
+ 	before comparing it as such.
+ 
+ 2004-07-08  Richard Henderson  <rth@redhat.com>
+ 
+ 	* builtins.c (std_gimplify_va_arg_expr): Hoist valist into a
+ 	temporary.  Use bit arithmetic to align.
+ 
+ 2004-07-08  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* alias.c (nonlocal_mentioned_p, nonlocal_referenced_p,
+ 	nonlocal_set_p, init_alias_analysis): Use, LABEL_P, JUMP_P, CALL_P,
+ 	NONJUMP_INSN_P, INSN_P, NOTE_P, BARRIER_P.
+ 	* bb-reorder.c (mark_bb_for_unlikely_executed_section,
+ 	add_labels_and_missing_jumps, find_jump_block,
+ 	fix_crossing_unconditional_branches, add_reg_crossing_jump_notes):
+ 	Likewise.
+ 	* bt-load.c (btr_referenced_p, compute_defs_uses_and_gen,
+ 	link_btr_uses, move_btr_def): Likewise.
+ 	* builtins.c (expand_builtin_longjmp, expand_builtin_nonlocal_goto,
+ 	expand_builtin_expect_jump): Likewise.
+ 	* caller-save.c (save_call_clobbered_regs, insert_one_insn): Likewise.
+ 	* calls.c (expand_call, emit_library_call_value_1): Likewise.
+ 	* cfganal.c (forwarder_block_p): Likewise.
+ 	* cfgbuild.c (inside_basic_block_p, count_basic_blocks,
+ 	make_label_edge, rtl_make_eh_edge, make_edges, find_basic_blocks_1,
+ 	find_bb_boundaries): Likewise.
+ 	* cfgcleanup.c (try_simplify_condjump, try_forward_edges,
+ 	merge_blocks_move_predecessor_nojumps,
+ 	merge_blocks_move_successor_nojumps, insns_match_p,
+ 	flow_find_cross_jump, outgoing_edges_match, try_crossjump_to_edge,
+ 	try_optimize_cfg): Likewise.
+ 	* cfgexpand.c (expand_block, construct_exit_block): Likewise.
+ 	* cfglayout.c (skip_insns_after_block, label_for_bb,
+ 	record_effective_endpoints, insn_locators_initialize,
+ 	fixup_reorder_chain, update_unlikely_executed_notes): Likewise.
+ 	* cfgmainloop.c (create_loop_notes): Likewise.
+ 	* cfgrtl.c (delete_insn, delete_insn_chain,
+ 	create_basic_block_structure, rtl_delete_block, free_bb_for_insn,
+ 	update_bb_for_insn, rtl_merge_blocks, rtl_can_merge_blocks,
+ 	block_label, try_redirect_by_replacing_jump, last_loop_beg_note,
+ 	redirect_branch_edge, force_nonfallthru_and_redirect,
+ 	rtl_tidy_fallthru_edge, back_edge_of_syntactic_loop_p,
+ 	rtl_split_edge, commit_one_edge_insertion, print_rtl_with_bb,
+ 	update_br_prob_note, rtl_verify_flow_info_1, rtl_verify_flow_info,
+ 	purge_dead_edges, cfg_layout_redirect_edge_and_branch,
+ 	cfg_layout_delete_block, cfg_layout_can_merge_blocks_p,
+ 	cfg_layout_merge_blocks, rtl_block_ends_with_call_p,
+ 	need_fake_edge_p, rtl_flow_call_edges_add): Likewise.
+ 	* combine.c (combine_instructions, can_combine_p, try_combine,
+ 	find_split_point, record_dead_and_set_regs, reg_dead_at_p,
+ 	distribute_notes, distribute_links, insn_cuid): Likewise.
+ 	* cse.c (fold_rtx, cse_insn, cse_around_loop,
+ 	invalidate_skipped_block, cse_set_around_loop,
+ 	cse_end_of_basic_block, cse_main, cse_basic_block,
+ 	cse_condition_code_reg): Likewise.
+ 	* cselib.c (cselib_process_insn): Likewise.
+ 	* ddg.c (create_ddg): Likewise.
+ 	* df.c (df_insn_refs_record, df_bb_rd_local_compute, df_insns_modify):
+ 	Likewise.
+ 	* dwarf2out.c (dwarf2out_stack_adjust, dwarf2out_frame_debug,
+ 	gen_label_die, dwarf2out_var_location): Likewise.
+ 	* emit-rtl.c (get_first_nonnote_insn, get_last_nonnote_insn,
+ 	next_insn, previous_insn, next_nonnote_insn, prev_nonnote_insn,
+ 	last_call_insn, active_insn_p, next_label, prev_label,
+ 	link_cc0_insns, next_cc0_user, try_split, add_insn_after,
+ 	add_insn_before, remove_insn, add_function_usage_to,
+ 	reorder_insns, find_line_note, remove_unnecessary_notes,
+ 	emit_insn_after_1, classify_insn): Likewise.
+ 	* except.c (convert_from_eh_region_ranges_1, emit_to_new_bb_before,
+ 	connect_post_landing_pads, sjlj_mark_call_sites,
+ 	sjlj_emit_function_enter, sjlj_emit_function_exit, reachable_handlers,
+ 	can_throw_internal, can_throw_external, set_nothrow_function_flags,
+ 	convert_to_eh_region_ranges): Likewise.
+ 	* explow.c (optimize_save_area_alloca): Likewise.
+ 	* expr.c (expand_expr_real): Likewise.
+ 	* final.c (insn_current_reference_address, compute_alignments,
+ 	shorten_branches, final, scan_ahead_for_unlikely_executed_note,
+ 	final_scan_insn, output_asm_label, leaf_function_p): Likewise.
+ 	* flow.c (first_insn_after_basic_block_note, delete_dead_jumptables,
+ 	propagate_block_delete_insn, propagate_one_insn,
+ 	init_propagate_block_info, propagate_block, libcall_dead_p,
+ 	mark_set_1, attempt_auto_inc, find_auto_inc, try_pre_increment):
+ 	Likewise.
+ 	* function.c (instantiate_virtual_regs,	reorder_blocks_1,
+ 	expand_function_start, expand_function_end, contains,
+ 	thread_prologue_and_epilogue_insns,
+ 	reposition_prologue_and_epilogue_notes): Likewise.
+ 	* gcse.c (constprop_register, bypass_conditional_jumps,
+ 	insert_insn_end_bb, gcse_after_reload): Likewise.
+ 	* genemit.c (gen_expand, gen_split): Likewise.
+ 	* genpeep.c (gen_peephole, main): Likewise.
+ 	* global.c (build_insn_chain): Likewise.
+ 	* graph.c (node_data, print_rtl_graph_with_bb): Likewise.
+ 	* haifa-sched.c (unlink_other_notes, unlink_line_notes,
+ 	get_block_head_tail, no_real_insns_p, rm_line_notes, save_line_notes,
+ 	restore_line_notes, rm_redundant_line_notes, rm_other_notes,
+ 	ok_for_early_queue_removal, set_priorities, sched_init): Likewise.
+ 	* ifcvt.c (count_bb_insns, first_active_insn, last_active_insn,
+ 	cond_exec_process_insns, end_ifcvt_sequence, noce_process_if_block,
+ 	merge_if_block, block_jumps_and_fallthru_p, find_if_block,
+ 	dead_or_predicable): Likewise.
+ 	* integrate.c (try_constants): Likewise.
+ 	* jump.c (rebuild_jump_labels, cleanup_barriers,
+ 	purge_line_number_notes, init_label_info, mark_all_labels,
+ 	squeeze_notes, get_label_before, get_label_after,
+ 	reversed_comparison_code_parts, simplejump_p, pc_set,
+ 	returnjump_p, onlyjump_p, follow_jumps, mark_jump_label,
+ 	delete_barrier, delete_prior_computation, delete_computation,
+ 	delete_related_insns, delete_for_peephole, redirect_jump):
+ 	Likewise.
+ 	* lcm.c (optimize_mode_switching): Likewise.
+ 	* local-alloc.c (validate_equiv_mem, update_equiv_regs, block_alloc):
+ 	Likewise.
+ 	* loop-doloop.c (doloop_valid_p, doloop_optimize): Likewise.
+ 	* loop-invariant.c (find_exits, find_invariants_bb): Likewise.
+ 	* loop-iv.c (simplify_using_assignment): Likewise.
+ 	* loop.c (compute_luids, loop_optimize, scan_loop, libcall_other_reg,
+ 	libcall_benefit, skip_consec_insns, move_movables, prescan_loop,
+ 	find_and_verify_loops, labels_in_range_p, for_each_insn_in_loop,
+ 	loop_bivs_init_find, strength_reduce, check_insn_for_bivs,
+ 	check_insn_for_givs, check_final_value, update_giv_derive,
+ 	basic_induction_var, product_cheap_p, check_dbra_loop,
+ 	loop_insn_first_p, last_use_this_basic_block,
+ 	canonicalize_condition, get_condition, loop_regs_scan, load_mems,
+ 	try_copy_prop, LOOP_BLOCK_NUM, loop_dump_aux): Likewise.
+ 	* modulo-sched.c (doloop_register_get, find_line_note, sms_schedule,
+ 	sms_schedule_by_order): Likewise.
+ 	* optabs.c (emit_no_conflict_block, emit_libcall_block): Likewise.
+ 	* postreload.c (reload_cse_simplify_operands, reload_combine,
+ 	reload_cse_move2add): Likewise.
+ 	* predict.c (can_predict_insn_p, estimate_probability,
+ 	expected_value_to_br_prob, process_note_predictions): Likewise.
+ 	* print-rtl.c (print_rtx, print_rtl, print_rtl_single): Likewise.
+ 	* profile.c (branch_prob): Likewise.
+ 	* ra-build.c (live_out_1, livethrough_conflicts_bb,
+ 	detect_webs_set_in_cond_jump): Likewise.
+ 	* ra-debug.c (ra_print_rtx_object, ra_debug_insns,
+ 	ra_print_rtl_with_bb): Likewise.
+ 	* ra-rewrite.c (insert_stores, rewrite_program2): Likewise.
+ 	* recog.c (next_insn_tests_no_inequality, find_single_use,
+ 	split_all_insns, peephole2_optimize, if_test_bypass_p): Likewise.
+ 	* reg-stack.c (next_flags_user, record_label_references,
+ 	emit_swap_insn, swap_rtx_condition, subst_stack_regs,
+ 	compensate_edge, convert_regs_1): Likewise.
+ 	* regclass.c (scan_one_insn): Likewise.
+ 	* regmove.c (optimize_reg_copy_1, optimize_reg_copy_2, fixup_match_2,
+ 	regmove_optimize, fixup_match_1, single_set_for_csa,
+ 	combine_stack_adjustments_for_block): Likewise.
+ 	* regrename.c (build_def_use, copyprop_hardreg_forward_1): Likewise.
+ 	* reload.c (find_reloads, find_reloads_address_1, subst_reloads,
+ 	find_equiv_reg): Likewise.
+ 	* reload1.c (reload, calculate_needs_all_insns, set_label_offsets,
+ 	reload_as_needed, emit_input_reload_insns, do_output_reload,
+ 	delete_output_reload, delete_address_reloads_1, fixup_abnormal_edges):
+ 	Likewise.
+ 	* reorg.c (find_end_label, emit_delay_sequence,
+ 	delete_from_delay_slot, delete_scheduled_jump, optimize_skip,
+ 	get_jump_flags, rare_destination, mostly_true_jump,
+ 	try_merge_delay_insns, redundant_insn, own_thread_p,
+ 	fill_simple_delay_slots, fill_slots_from_thread,
+ 	fill_eager_delay_slots, relax_delay_slots, make_return_insns,
+ 	dbr_schedule): Likewise.
+ 	* resource.c (find_basic_block, next_insn_no_annul,
+ 	find_dead_or_set_registers, mark_target_live_regs): Likewise.
+ 	* rtl.h (RTX_PREV): Likewise.
+ 	* rtlanal.c (global_reg_mentioned_p, no_labels_between_p,
+ 	no_jumps_between_p, reg_used_between_p, reg_referenced_between_p,
+ 	reg_set_p, find_last_value, dead_or_set_regno_p, find_reg_fusage,
+ 	find_regno_fusage, pure_call_p, replace_label, rtx_referenced_p_1,
+ 	tablejump_p, computed_jump_p, insns_safe_to_move_p,
+ 	find_first_parameter_load, can_hoist_insn_p): Likewise.
+ 	* sched-deps.c (get_condition, add_dependence, sched_analyze_2,
+ 	sched_analyze_insn, sched_analyze, add_forward_dependence): Likewise.
+ 	* sched-ebb.c (fix_basic_block_boundaries, add_deps_for_risky_insns,
+ 	schedule_ebbs): Likewise.
+ 	* sched-rgn.c (is_cfg_nonregular, find_conditional_protection,
+ 	is_conditionally_protected, can_schedule_ready_p,
+ 	add_branch_dependences, debug_dependencies): Likewise.
+ 	* stmt.c (emit_nop, expand_start_case, emit_jump_if_reachable):
+ 	Likewise.
+ 	* unroll.c (unroll_loop, copy_loop_body, back_branch_in_range_p,
+ 	reg_dead_after_loop, loop_find_equiv_value, loop_iterations,
+ 	set_dominates_use, ujump_to_loop_cont): Likewise.
+ 	* var-tracking.c (prologue_stack_adjust, vt_initialize): Likewise.
+ 	* varasm.c (output_constant_pool_1): Likewise.
+ 
+ 2004-07-08  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-scalar-evolution.c: New file.
+ 	* tree-scalar-evolution.h: New file.
+ 	* tree-ssa-loop-niter.c: New file.
+ 	* Makefile.in (SCEV_H): New.
+ 	(tree-scalar-evolution.o, tree-ssa-loop-niter.o): Add new files.
+ 	* cfgloop.h (struct loop): Add bounds field.
+ 	* tree-flow.h (struct tree_niter_desc): New type.
+ 	(number_of_iterations_cond, number_of_iterations_exit,
+ 	loop_niter_by_eval, find_loop_niter_by_eval,
+ 	estimate_numbers_of_iterations, can_count_iv_in_wider_type,
+ 	free_numbers_of_iterations_estimates): Declare.
+ 	* tree.h (lower_bound_in_type, upper_bound_in_type): Declare.
+ 	* params.def (PARAM_MAX_ITERATIONS_TO_TRACK): New parameter.
+ 	* doc/invoke.texi (max-iterations-to-track): Document.
+ 
+ 2004-07-08  Kaz Kojima  <kkojima@gcc.gnu.org>
+ 
+ 	* config/sh/sh.c (sh_va_arg): Initinalize lab_over.
+ 	* config/sh/sh.h (CONST_OK_FOR_J16): Use parentheses.
+ 	(MODE_AFTER): Add cast appropriately.
+ 	* config/sh/sh.md (movdi splitter): Likewise.
+ 	(casesi_worker_2): Add const qualifier appropriately.
+ 	(eh_return): Remove unused variable.
+ 	(insv): Initialize v;
+ 
+ 2004-07-08  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/mmix/mmix-protos.h (mmix_expand_builtin_va_arg): Remove.
+ 	* config/mmix/mmix.c (TARGET_GIMPLIFY_VA_ARG_EXPR): New.
+ 	(mmix_gimplify_va_arg_expr): Rewrite from mmix_expand_builtin_va_arg.
+ 	* config/mmix/mmix.h (EXPAND_BUILTIN_VA_ARG): Remove.
+ 	(FRAME_POINTER_REQUIRED): Use current_function_has_nonlocal_label.
+ 
+ 	* config/m32r/m32r-protos.h (m32r_va_arg): Remove.
+ 	* config/m32r/m32r.c (TARGET_GIMPLIFY_VA_ARG_EXPR): New.
+ 	(m32r_gimplify_va_arg_expr): Rewrite from m32r_va_arg.
+ 	* config/m32r/m32r.h (EXPAND_BUILTIN_VA_ARG): Remove.
+ 
+ 	* config/iq2000/iq2000-protos.h (iq2000_va_arg): Remove.
+ 	* config/iq2000/iq2000.c (TARGET_GIMPLIFY_VA_ARG_EXPR): New.
+ 	(iq2000_gimplify_va_arg_expr): Rewrite from iq2000_va_arg.
+ 	* config/iq2000/iq2000.h (EXPAND_BUILTIN_VA_ARG): Remove.
+ 
+ 	* config/frv/frv-protos.h (frv_expand_builtin_va_arg): Remove.
+ 	* config/frv/frv.c (TARGET_GIMPLIFY_VA_ARG_EXPR): New.
+ 	(frv_gimplify_va_arg_expr): Rewrite from frv_expand_builtin_va_arg.
+ 	* config/frv/frv.h (EXPAND_BUILTIN_VA_ARG): Remove.
+ 
+ 	* config/i860/i860-protos.h (i860_va_arg): Remove.
+ 	* config/i860/i860.c (TARGET_GIMPLIFY_VA_ARG_EXPR): New.
+ 	(i860_gimplify_va_arg_expr): Rewrite from i860_va_arg.
+ 	* config/i860/i860.h (EXPAND_BUILTIN_VA_ARG): Remove.
+ 
+ 2004-05-31  Aaron W. LaFramboise <aaronraolete36@aaronwl.com>
+ 
+ 	* system.h: Prototype getpagesize if missing.
+ 	* configure.ac: Add getpagesize to gcc_AC_CHECK_DECLS.
+ 	* configure: Regenerate.
+ 	* config.in: Regenerate.
+ 
+ 2004-07-08  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/fr30/fr30-protos.h (fr30_va_arg): Remove.
+ 	* config/fr30/fr30.c (TARGET_GIMPLIFY_VA_ARG_EXPR): New.
+ 	(fr30_gimplify_va_arg_expr): New.
+ 	(fr30_pass_by_reference, fr30_pass_by_value, fr30_va_arg): Remove.
+ 	* config/fr30/fr30.h (EXPAND_BUILTIN_VA_ARG): Remove.
+ 
+ 2004-07-08  Vladimir Makarov  <vmakarov@redhat.com>
+ 
+ 	PR target/16414
+ 	* config/ia64/ia64.c (ia64_dfa_new_cycle): Fix typo in comparison
+ 	of asm_noperands result.
+ 
+ 2004-07-08  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/cris/cris-protos.h (cris_expand_builtin_va_arg): Remove.
+ 	* config/cris/cris.c (TARGET_GIMPLIFY_VA_ARG_EXPR): New.
+ 	(cris_gimplify_va_arg_expr): Rewrite from cris_expand_builtin_va_arg.
+ 	* config/cris/cris.h (EXPAND_BUILTIN_VA_ARG): Remove.
+ 
+ 2004-07-08  Richard Henderson  <rth@redhat.com>
+ 
+ 	* builtins.c (ind_gimplify_va_arg_expr): New.
+ 	* tree.h (ind_gimplify_va_arg_expr): Declare.
+ 	* config/arc/arc.c (arc_gimplify_va_arg_expr): Use it.
+ 
+ 2004-07-08  Jan Beulich  <jbeulich@novell.com>
+ 
+ 	* expmed.c (extract_bit_field): Correct condition to use vec_extract
+ 	patterns also on vector elements other than the first one.
+ 	* config/i386/i386.md (vec_extractv2df, vec_extractv4sf): Add missing
+ 	break statements.
+ 
+ 2004-07-08  Geoffrey Keating  <geoffk@apple.com>
+ 
+ 	* config/rs6000/darwin-ldouble.c: Correct reference
+ 	to the Linnainmaa paper.
+ 
+ 2004-07-08  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/arc/arc-protos.h (arc_va_arg): Remove.
+ 	* config/arc/arc.c (TARGET_GIMPLIFY_VA_ARG_EXPR): New.
+ 	(arc_gimplify_va_arg_expr): Rewrite from arc_va_arg.
+ 	* config/arc/arc.h (EXPAND_BUILTIN_VA_ARG): Remove.
+ 
+ 	* config/c4x/c4x-protos.h (c4x_va_arg): Remove.
+ 	* config/c4x/c4x.c (TARGET_GIMPLIFY_VA_ARG_EXPR): New.
+ 	(c4x_gimplify_va_arg_expr): Rewrite from c4x_va_arg.
+ 	* config/c4x/c4x.h (EXPAND_BUILTIN_VA_ARG): Remove.
+ 
+ 2004-07-08  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	* pa.md (prefetch_32, prefetch_64): Simplify constraint checks.
+ 
+ 2004-07-08  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* c-decl.c (static_ctors, static_dtors): Make static.
+ 	(pop_file_scope): Call c_common_write_pch and
+ 	cgraph_finalize_compilation_unit here.
+ 	(build_cdtor): Moved here from c-objc-common.c; simplify.
+ 	(c_write_global_declarations_1): Clarify comment.
+ 	(c_write_global_declarations): Close the external scope before
+ 	doing anything else.  Call build_cdtor, cgraph_optimize, and
+ 	mudflap_finish_file here.
+ 	* c-lang.c (finish_file): Don't call c_objc_common_finish_file.
+ 	Clarify comment.
+ 	* c-objc-common.c: No need to include cgraph.h.
+ 	(build_cdtor): Moved to c-decl.c.
+ 	(c_objc_common_finish_file): Delete.
+ 	* c-tree.h: Update to match.
+ 	* objc/objc-act.c (finish_file): Don't call c_objc_common_finish_file.
+ 	(generate_static_references): Set TREE_USED before calling finish_decl.
+ 	Eliminate unnecessary dummy declaration.  Call rest_of_decl_compilation
+ 	on the static_instances_decl.
+ 
+ 2004-07-08  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* c-decl.c (pop_scope): Do not set DECL_CONTEXT on file-scope
+ 	decls when there is only one input translation unit.
+ 	* langhooks.c (lhd_set_decl_assembler_name): Partially revert
+ 	change of 2004-07-05; do not treat declarations with
+ 	DECL_CONTEXT a TRANSLATION_UNIT_DECL specially.
+ 	* opts.c (cur_in_fname): Delete.
+ 	* opts.h: Likewise.
+ 	* tree.c: Revert changes of 2004-07-05; no special treatment
+ 	for TRANSLATION_UNIT_DECLs.
+ 	* Makefile.in (tree.o): Update dependencies.
+ 
+ 2004-07-08  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* builtins.c (fold_builtin_strcpy): Merge functionality from
+ 	simplify_builtin_strcpy.  Add additional len argument.  No longer
+ 	static.  Remove function prototype.
+ 	(fold_builtin_strncpy): Likewise integrate functionality from
+ 	simplify_builtin_strncpy.  Add additional slen argument.  No
+ 	longer static.  Remove function prototype.
+ 	(simplify_builtin_strcy, simplify_builtin_strncpy): Delete.
+ 	(simplify_builtin_fputs): Rename to fold_builtin_fputs.  Change
+ 	types of "ignore" and "unlocked" parameters to bool.
+ 	(fold_builtin_1):  Add additional ignore argument.  Call renamed
+ 	fold_builtin_fputs to simplify GCC "fputs" and "fputs_unlocked"
+ 	builtins.  Update arguments to fold_builtin_strncpy and
+ 	fold_builtin_strcpy.  Add function prototype.
+ 	(fold_builtin): Add additional Boolean ignore argument to pass
+ 	to fold_builtin_1.
+ 	(simplify_builtin): Call fold_builtin_fputs, fold_builtin_strcpy
+ 	and fold_builtin_strncpy instead of simplify_builtin_fputs,
+ 	simplify_builtin_strcpy and simplify_builtin_strncpy respectively.
+ 
+ 	* expr.h (simplify_builtin_fputs, simplify_builtin_strcpy,
+ 	simplify_builtin_strncpy): Delete function prototypes.
+ 	* tree.h (fold_builtin_fputs, fold_builtin_strcpy,
+ 	fold_builtin_strncpy): Add function prototypes here.
+ 	(fold_builtin): Update function prototype with new "bool ignore".
+ 
+ 	* tree-ssa-ccp.c (ccp_fold): Update call to fold_builtin.
+ 	(ccp_fold_builtin):  Update call to fold_builtin.  Call
+ 	fold_builtin_fputs, fold_builtin_strcpy and fold_builtin_strncpy
+ 	instead of simplify_builtin_fputs, simplify_builtin_strcpy and
+ 	simplify_builtin_strncpy respectively.
+ 	* fold-const.c (fold): Update call to fold_builtin.
+ 
+ 2004-07-08  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	* builtins.c (expand_builtin_stpcpy): Un-simplify decay of stpcpy
+ 	to strcpy.
+ 
+ 	* expr.h (FUNCTION_ARG_PARTIAL_NREGS): Default to 0.
+ 	(FUNCTION_ARG_PASS_BY_REFERENCE): Likewise.
+ 	(FUNCTION_ARG_CALLEE_COPIES): Likewise.
+ 	* calls.c: Remove ifdefs of macros above.
+ 	* functions.c: Likewise.
+ 	* expr.c: Likewise.
+ 
+ 2004-07-08  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* config/sparc/sparc.md (UNSPECV_GOTO_V9): Delete.
+ 	(arch attribute): Delete.
+ 	(current_function_calls_alloca attribute): Rename into calls_alloca.
+ 	(calls_eh_return): New attribute.
+ 	(leaf_function): Likewise.
+ 	(length attribute): Fix formula for sibcalls.
+ 	(return insn): Correctly compute the 'length' attribute.
+ 	(do_builtin_setjmp_setup): Adjust use of current_function_calls_alloca.
+ 
+ 2004-07-08  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-cfg.c (make_exit_edges): Use get_call_expr_in.
+ 	(remove_useless_stmts_1, is_ctrl_altering_stmt): Likewise.
+ 	(tree_block_ends_with_call_p, need_fake_edge_p): Likewise.
+ 	* tree-eh.c (lower_eh_constructs_1): Likewise.
+ 	* tree-sra.c (sra_walk_modify_expr): Likewise.
+ 	* tree-ssa-dce.c (mark_stmt_if_obviously_necessary): Likewise.
+ 	(eliminate_unnecessary_stmts): Likewise.
+ 	* tree-ssa-dse.c (dse_optimize_stmt): Likewise.
+ 	* tree-tailcall.c (optimize_tail_call): Likewise.
+ 	* tree-ssa-ccp.c (get_rhs, set_rhs): Reorg to use switch.
+ 
+ 2004-07-08  Paolo Bonzini  <bonzini@gnu.org>
+ 	    Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* config/i386/i386.c (override_options): Enable
+ 	SSE prefetches with -mtune, as long as we are
+ 	compiling for i686 or higher.  All i686 processors
+ 	accept SSE prefetches as NOPS, some i586's don't.
+ 
+ 2004-07-08  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR target/10567
+ 	* config/sparc/sparc.md (update_return): Honor flag_delayed_branch.
+ 
+ 2004-07-08  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-operands.c (get_asm_expr_operands): Fix thinkos in
+ 	the handling of clobbering ASM_EXPRs.
+ 
+ 2004-07-08  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR target/16430
+ 	* config/sparc/sparc.c (function_value): In 64-bit mode,
+ 	return the aggregates larger than 16 bytes like unions.
+ 
+ 2004-07-08  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR target/16199
+ 	* config/sparc/sparc.c (sparc_emit_set_symbolic_const64): When
+ 	'temp' is zero, generate new pseudos as needed and emit the
+ 	sequence of insns in single-assignment form.  Resync comments
+ 	with code.
+ 	(sparc_emit_set_const64): Pass zero as 'temp' argument to above
+ 	function before reload.
+ 
+ 2004-07-08  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* vec.c (vec_assert_fail): Remove duplicate 'function'.
+ 
+ 	* vec.c (vec_p_reserve, vec_o_reserve): Allocation is signed.
+ 
+ 	* vec.h (VEC_alloc, VEC_embedded_size, VEC_embedded_init):
+ 	Allocation is signed.
+ 	(VEC_reserve): Return flag, allocation is signed.
+ 
+ 2004-07-08  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-ssa-ccp.c (fold_stmt): Get type directly from
+ 	OBJ_TYPE_REF_OBJECT.
+ 
+ 2004-07-08  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 	    Neil Booth  <neil@daikokuya.co.uk>
+ 
+ 	PR c/2511
+ 	PR c/3325
+ 	* c-decl.c (finish_struct): Ensure bit-fields are given the
+ 	correct type.
+ 	* c-common.c (c_common_signed_or_unsigned_type): For C, require
+ 	the precision to match as well as the mode.
+ 	* expr.c (reduce_to_bit_field_precision): New function.
+ 	(expand_expr_real_1): Reduce expressions of bit-field type to
+ 	proper precision.
+ 	* langhooks.h (reduce_bit_field_operations): New hook.
+ 	* langhooks-def.h (LANG_HOOKS_REDUCE_BIT_FIELD_OPERATIONS):
+ 	Define.
+ 	* c-lang.c, objc/objc-lang.c
+ 	(LANG_HOOKS_REDUCE_BIT_FIELD_OPERATIONS): Define.
+ 	* objc/objc-act.c (check_ivars): Convert types to bit-field types
+ 	before checking.
+ 	* tree.c (build_nonstandard_integer_type): New function.
+ 	* tree.h (build_nonstandard_integer_type): New prototype.
+ 	* tree-ssa.c (tree_ssa_useless_type_conversion_1): Don't treat
+ 	conversions between integer and boolean types as useless.
+ 
+ 2004-07-08  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* c-common.c (c_common_nodes_and_builtins): Do not
+ 	create __builtin_ptrdiff_t and __builtin_size_t.
+ 
+ 2004-07-08  Andrew Pinski  <apinski@apple.com>
+ 
+ 	* Makefile.in (libbackend.o): Add -combine to the gcc
+ 	command line.
+ 
+ 2004-07-08  Nick Clifton  <nickc@redhat.com>
+ 
+ 	* config/stormy16/t-stormy16 (TARGET_LIBGCC2_CFLAGS): Define.
+ 	Set to -Os.
+ 
+ 2004-07-08  Richard Henderson  <rth@redhat.com>
+ 
+ 	* except.c (expand_eh_region_start, expand_eh_region_end,
+ 	expand_eh_handler, expand_eh_region_end_cleanup,
+ 	expand_start_all_catch, expand_start_catch, expand_end_catch,
+ 	expand_end_all_catch, expand_eh_region_end_allowed,
+ 	expand_eh_region_end_must_not_throw, expand_eh_region_end_throw,
+ 	expand_eh_region_end_fixup): Remove.
+ 	* stmt.c (struct nesting): Remove stack_level, innermost_stack_block,
+ 	cleanups, outer_cleanups, label_chain, exception_region.
+ 	(struct goto_fixup): Remove stack_level, cleanup_list_list.
+ 	(struct label_chain): Remove.
+ 	(struct stmt_status): Remove x_stack_block_stack.
+ 	(stack_block_stack, expand_goto_internal, expand_fixup, expand_fixups,
+ 	fixup_gotos, save_stack_pointer, expand_decl_cleanup,
+ 	expand_decl_cleanup_eh, expand_cleanups, start_cleanup_deferral,
+ 	end_cleanup_deferral, last_cleanup_this_contour,
+ 	containing_blocks_have_cleanups_or_stack_level,
+ 	any_pending_cleanups): Remove.
+ 	(expand_null_return_1): Take no arguments.
+ 	(expand_label, expand_naked_return, expand_return,
+ 	expand_start_bindings_and_block, expand_end_bindings, expand_decl,
+ 	expand_anon_union_decl, expand_start_case, pushcase, pushcase_range,
+ 	expand_end_case_type): Don't use any of them.
+ 	* calls.c (expand_call): Likewise.
+ 	* dojump.c (do_jump): Likewise.
+ 	* function.c (expand_function_end): Likewise.
+ 	* expr.c (store_expr, expand_expr_real_1): Likewise.
+ 	(safe_from_p): Don't handle WITH_CLEANUP_EXPR, CLEANUP_POINT_EXPR.
+ 	(expand_expr_real_1): Don't handle WITH_CLEANUP_EXPR,
+ 	CLEANUP_POINT_EXPR, TARGET_EXPR, TRY_CATCH_EXPR, CATCH_EXPR,
+ 	EH_FILTER_EXPR, TRY_FINALLY_EXPR, GOTO_SUBROUTINE_EXPR.
+ 	* fold-const.c (fold_checksum_tree): Use first_rtl_op.
+ 	* gengtype.c (adjust_field_tree_exp): Remove rtl op handling.
+ 	* gimplify.c (gimplify_cleanup_point_expr): Renumber operands
+ 	for WITH_CLEANUP_EXPR.
+ 	(gimple_push_cleanup): Likewise.
+ 	* integrate.c (copy_decl_for_inlining): Don't DECL_TOO_LATE.
+ 	* print-tree.c (print_node): Likewise.
+ 	* tree-pretty-print.c (dump_generic_node): Remove GOTO_SUBROUTINE_EXPR.
+ 	* tree.c (first_rtl_op): Always just TREE_CODE_LENGTH.
+ 	(has_cleanups): Remove GOTO_SUBROUTINE_EXPR.
+ 	* tree.def (WITH_CLEANUP_EXPR): Remove op1 and op2.
+ 	(GOTO_SUBROUTINE_EXPR): Remove.
+ 	* tree.h (WITH_CLEANUP_EXPR_RTL): Remove.
+ 	(DECL_TOO_LATE): Remove.
+ 	* except.h, tree.h: Update decls.
+ 
+ 2004-07-08  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* explow.c (optimize_save_area_alloca): Do not accept parameters.
+ 	* passes.c (rest_of_handle_final): Handle symout.
+ 	(rest_of_handle_new_regalloc, rest_of_handle_old_regalloc):
+ 	Push timevar here.
+ 	(rest_of_handle_sched): Break out SMS.  Remove ifs for
+ 	flag_schedule_insns and flag_modulo_sched.
+ 	(rest_of_handle_addressof, rest_of_handle_cse2): Garbage
+ 	collect at the end.
+ 	(rest_of_handle_gcse2): Put under timevar TV_RELOAD_CSE_REGS.
+ 	(rest_of_handle_partition_blocks, rest_of_handle_sms,
+ 	rest_of_handle_if_after_reload, rest_of_handle_peephole2,
+ 	rest_of_handle_mode_switching, rest_of_handle_jump,
+ 	rest_of_handle_guess_branch_prob, rest_of_handle_eh,
+ 	rest_of_handle_jump2, rest_of_handle_postreload,
+ 	rest_of_handle_flow2, rest_of_clean_state,
+ 	rest_of_handle_shorten_branches,
+ 	rest_of_handle_prologue_epilogue,
+ 	rest_of_handle_branch_target_load_optimize): New.
+ 	(rest_of_compilation): Call the above.  Remove ggc_collect
+ 	calls moved to rest_of_handle_*.
+ 	* rtl.h (optimize_save_area_alloca): Do not accept parameters.
+ 
+ 	* dwarf2out.c (dwarf2out_begin_prologue): Use TREE_NOTHROW.
+ 	* except.c (set_nothrow_function_flags): Set TREE_NOTHROW.
+ 	* except.h (set_nothrow_function_flags): Update comment.
+ 	* function.c (current_function_nothrow): Remove.
+ 	* output.h (current_function_nothrow): Remove.
+ 	* passes.c (rest_of_compilation): Do not set TREE_NOTHROW.
+ 	* config/arm/arm.c (arm_compute_func_type): Use TREE_NOTHROW.
+ 
+ 2004-07-08  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR bootstrap/16326
+ 	* reorg.c: Revert 2004-06-30 change.
+ 	(find_end_label): If HAVE_epilogue and !HAVE_return,
+ 	return 0 instead of creating a label at the end of the insn chain.
+ 	(optimize_skip): Account for the failure mode of find_end_label.
+ 	(fill_simple_delay_slots): Likewise.
+ 	(fill_slots_from_thread): Likewise.
+ 	(relax_delay_slots): Likewise.
+ 
+ 2004-07-08  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-flow.h (addressable_vars): Declare.
+ 	* tree-ssa-alias.c (addressable_vars): Define.
+ 	(setup_pointers_and_addressables): Add addressable variables
+ 	to addressable_vars.
+ 	* tree-ssa-operands.c (get_stmt_operands): Move
+ 	handling of ASM_EXPRs ...
+ 	(get_asm_expr_operands): ... here.
+ 	When the ASM_EXPR clobbers memory, also clobber addressable
+ 	variables.
+ 	* tree-ssa.c (init_tree_ssa): Initialize addressable_vars.
+ 	(delete_tree_ssa): Reset addressable_vars.
+ 
+ 2004-07-07  Jan Beulich  <jbeulich@novell.com>
+ 	    Richard Henderson  <rth@redhat.com>
+ 
+ 	* varasm.c (assemble_variable): Use assemble_zeros for
+ 	zero-initialized variables.
+ 	(categorize_decl_for_section): Honor flag_zero_initialized_in_bss
+ 	for SECCAT_BSS and SECCAT_TBSS.
+ 
+ 2004-07-07  Jan Beulich  <jbeulich@novell.com>
+ 
+ 	* varasm.c (asm_output_bss): Don't declare unless BSS_SECTION_ASM_OP.
+ 
+ 	* expmed.c (emit_store_flag): Also special-case double-word
+ 	(in-)equality comparison against -1.
+ 
+ 	* config/i386/i386.c (ix86_gimplify_va_arg): Don't need temporary for
+ 	passing arguments the containers for which are registers.
+ 
+ 	* calls.c (emit_library_call_value_1): Use mode of function parameter
+ 	rather than that of argument since constants have none.
+ 
+ 2004-07-08  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	Introduce H8SX support.
+ 	* expr.c (expand_strcpy): Renamed and moved to...
+ 	* builtins.c (expand_movstr): ... here.  Tweak.
+ 	(expand_builtin_strcpy): Adjust.  Use movstr if len can't be
+ 	computed or has side effects.
+ 	(expand_builtin_stpcpy): Likewise.  Use strcpy if return value is
+ 	unused, or if mempcpy fails.  Adjust the return value in the
+ 	latter case.  Use movstr if everything else fails.
+ 	* doc/md.texi (movstr): Document.
+ 	(movmemM, clrmemM): Fix explanation of memory block operands.
+ 	* config/h8300/h8300.md (stpcpy): Renamed to...
+ 	(movstr): ... this.  Adjust.
+ 	2004-07-07  Alexandre Oliva  <aoliva@redhat.com>
+ 	* config/h8300/h8300.md: Rename movstr*, except for movstrict*, to
+ 	movmem* and clrstr* to clrmem*.
+ 	2004-06-27  Alexandre Oliva  <aoliva@redhat.com>
+ 	* config/h8300/h8300.c (h8300_reg_class_from_letter): Map 'D' to
+ 	GENERAL_REGS, always.
+ 	(h8300_swap_into_er6, h8300_swap_into_er6): Handle the case of
+ 	getting the stack pointer as addr.
+ 	* config/h8300/h8300.h (PREDICATE_CODES): Remove constant rtxes
+ 	from general_operand_dst.
+ 	* config/h8300/h8300.md (movmd_internal_normal): New, normal-mode
+ 	variant of...
+ 	(movmd_internal): ... this.  Add modes to operands.  Disparage `D'
+ 	instead of requiring it to match only before reload.
+ 	(stpcpy_internal_normal): New, normal-mode variant of...
+ 	(stpcpy_internal): ... this.  Add modes to operands.  Disparage
+ 	`D' instead of requiring it to match only before reload.
+ 	* config/h8300/h8300-protos.h (h8300_legitimate_address_p): Add
+ 	mode argument.
+ 	* config/h8300/h8300.h (GO_IF_LEGITIMATE_ADDRESS): Pass it to...
+ 	* config/h8300/h8300.c (h8300_legitimate_address_p): Pass it to
+ 	h8300_get_index.
+ 	* config/h8300/h8300.md (attr type): Add call.
+ 	(attr can_delay): If type is call, set it no.
+ 	(call, call_value): Set type to call.
+ 	2004-06-21  Alexandre Oliva  <aoliva@redhat.com>
+ 	* config/h8300/h8300.md (logicalhi3_sn, logicalsi3_sn): New.
+ 	2004-06-16  Alexandre Oliva  <aoliva@redhat.com>
+ 	* tree.c (get_narrower): Don't narrow integral types into
+ 	non-integral types.
+ 	* config/h8300/h8300.c (h8300_expand_epilogue): Initialize
+ 	frame_size *before* the first use.
+ 	* config/h8300/h8300.md (movstrictqi): Reintroduce post-increment
+ 	on input.
+ 	(peephole2): Don't widen instructions that push SP.  Move
+ 	decrement of SP to the end of all stm-generating peepholes.
+ 	2003-07-24  Richard Sandiford  <rsandifo@redhat.com>
+ 	* config/h8300/h8300.md (insv): Prefer to use AND to clear a bitfield
+ 	and OR to set it to all ones.
+ 	2003-07-24  Richard Sandiford  <rsandifo@redhat.com>
+ 	* config/h8300/h8300.md (can_delay): Default to "no" for bit branches.
+ 	(call, call_value): Set can_delay to "no".
+ 	2003-07-22  Richard Sandiford  <rsandifo@redhat.com>
+ 	* config/h8300/h8300.md (extzv): Make subreg check more robust.
+ 	2003-07-21  Richard Sandiford  <rsandifo@redhat.com>
+ 	* config/h8300/h8300.md (*brabit): Remove.
+ 	* config/h8300/h8300.md (*brabc, *brabs): Remove mode from
+ 	zero_extract.  Use bit_memory_operand as the predicate for
+ 	operand 1 and 'WU' as the constraint.  Check the difference
+ 	between the base length and the final one when deciding which
+ 	type of branch to use.
+ 	2003-07-21  Richard Sandiford  <rsandifo@redhat.com>
+ 	* config/h8300/h8300.md (extzv): Remove mode from operands 0 and 1.
+ 	Use convert_move to extend the result for TARGET_H8300SX.  Check
+ 	for QImode memory references.  Optimize the case where the
+ 	destination is a paradoxical subreg.
+ 	2003-07-21  Richard Sandiford  <rsandifo@redhat.com>
+ 	* config/h8300/h8300.md (*movsf_h8sx): Add an r <- G alternative.
+ 	* config/h8300/h8300.md (andqi): Remove bclr from h8sx version.
+ 	2003-07-21  Richard Sandiford  <rsandifo@redhat.com>
+ 	* config/h8300/h8300.md: Include mova.md
+ 	(length_table): Add mova and mova_zero.
+ 	* config/h8300/h8300.c (print_operand): Handle '%o'.  Print a length
+ 	after all constant addresses for '%R', '%X', '%T' and '%S'.
+ 	(h8300_mova_length): New function.
+ 	(h8300_insn_length_from_table): Use it to handle mova and mova_zero.
+ 	* config/h8300/t-h8300 (mova.md): Generate from genmova.sh.  Add to
+ 	dependencies for s-config, etc.
+ 	* config/h8300/gemova.sh: New file.
+ 	* config/h8300/mova.md: Generated.
+ 	2003-07-20  Alexandre Oliva  <aoliva@redhat.com>
+ 	* config/h8300/h8300.c (h8300_bitfield_length): New.
+ 	(nibble_operand): Adjust.
+ 	(h8300_binary_length): Handle conditional binary op.
+ 	(h8300_insn_length_from_table): Handle bitfield and bitbranch.
+ 	* config/h8300/h8300.h: Change constraints W# and Y# to P#>X and
+ 	P#<X, respectively.  The original P is now IP4>X.  Introduced P#>0
+ 	and P#<0, unused so far.  W and Y are now prefixes to multi-letter
+ 	constraints.  WU is introduced as a variant of U that requires a
+ 	mem, and is therefore considered an EXTRA_MEMORY_CONSTRAINT.
+ 	* config/h8300/h8300.md (attr type): Added bitbranch.
+ 	(attr length_table): Added bitfield and bitbranch.
+ 	(attr length): Compute bitbranch length.
+ 	(andqi): Separate pattern for H8300SX.  Use bfld for loading the
+ 	least-significant bit of a byte.
+ 	(brabit, brabc, brabs): New.
+ 	(insv, extzv): Emit bfst and bfld on H8300SX.
+ 	(bfld, bfst, seq, sne): New.
+ 	(bstzhireg, cmpstz, bstz, bistz): New.
+ 	(cmpcondbset, condbset, cmpcondbclr, condbclr): New.
+ 	(cmpcondbsetreg, condbsetreg, cmpcondbclrreg, condbclrreg): New.
+ 	2003-07-11  Richard Sandiford  <rsandifo@redhat.com>
+ 	* config/h8300/h8300.c (h8sx_binary_memory_operator): New function.
+ 	(h8sx_unary_memory_operator): New function.
+ 	* config/h8300/h8300.h (EXTRA_MEMORY_CONSTRAINT): Disable.
+ 	(PREDICATE_CODES): Add h8sx_{unary,binary}_memory_operator.
+ 	* config/h8300/h8300.md: Add peepholes to combine reloads and
+ 	arithmetic insns.
+ 	2003-07-10  Richard Sandiford  <rsandifo@redhat.com>
+ 	* config/h8300/h830.md (cmpqi): Use 'i' rather than 'n' in constraints.
+ 	(*cmphi_h8300hs, *addqi3, *addhi3_h8sx, subhi3): Likewise.
+ 	(and?i, ior?i, xor?i): Likewise.
+ 	2003-07-10  Richard Sandiford  <rsandifo@redhat.com>
+ 	* config/h8300/h8300.c: Move enums and prototypes to head of file.
+ 	Various whitespace fixes.
+ 	(h8300_constant_length): New function, split out from...
+ 	(h8300_displacement_size): ...here.  Rename h8300_displacement_length.
+ 	(h8300_classify_operand): Use IN_RANGE.
+ 	(h8300_classify_operand): Use h8300_constant_length.
+ 	(h8300_short_move_mem_p): Tighten size check.
+ 	(h8sx_mergeable_memrefs_p): Tighten equality check.
+ 	2003-06-30  Richard Sandiford  <rsandifo@redhat.com>
+ 	* config/h8300/h8300.h (TARGET_CPU_CPP_BUILTINS): Define __H8300SX__
+ 	for -msx.
+ 	* config/h8300/crti.asm: Use .h8300sx or .h8300sxn for -msx code.
+ 	* config/h8300/crtn.asm: Likewise.
+ 	* config/h8300/lib1funcs.asm: Likewise.  Use 32-bit pointers
+ 	if __H8300SX__ is defined.
+ 	2003-06-27  Richard Sandiford  <rsandifo@redhat.com>
+ 	* config/h8300/h8300-protos.h (h8300_get_index): Add mode parameter.
+ 	* config/h8300/h8300.h (GO_IF_LEGITIMATE_ADDRESS): Update accordingly.
+ 	(GO_IF_MODE_DEPENDENT_ADDRESS): Treat POST_DEC, PRE_INC and indexed
+ 	addresses as mode-dependent.
+ 	* config/h8300/h8300.c (print_operand_address): Update call to
+ 	h8300_get_index.
+ 	(h8300_get_index): Take a mode argument.  Rework to fix an
+ 	earlier misunderstanding.
+ 	2003-06-26  Richard Sandiford  <rsandifo@redhat.com>
+ 	* config/h8300/h8300.c (zero_extendqisi2): Force the source operand
+ 	into a register if TARGET_H8300SX.
+ 	(*zero_extendqisi2_h8300hs, *extendqisi2_h8300): Disable for
+ 	TARGET_H8300SX.  Also disable related define_splits.
+ 	(*zero_extendqisi2_h8sx, *extendqisi2_h8sx): New patterns.
+ 	2003-06-23  Richard Sandiford  <rsandifo@redhat.com>
+ 	* config/h8300/h8300.c (h8300_rtx_costs): Add h8sx handling.
+ 	2003-06-20  Richard Sandiford  <rsandifo@redhat.com>
+ 	* config/h8300/h8300.h (OK_FOR_Z): New macro.
+ 	(EXTRA_CONSTRAINT_STR): Check it.
+ 	* config/h8300/h8300.c (h8300_classify_operand): Accept null
+ 	class arguments.
+ 	(h8300_insn_length_from_table): Handle LENGTH_TABLE_MOV_IMM4.
+ 	* config/h8300/h8300.md (length_table): Add mov_imm4.
+ 	(movqi, movhi): Add Z <- W4 alternatives to h8sx patterns.
+ 	2003-06-20  Richard Sandiford  <rsandifo@redhat.com>
+ 	* genattrtab.c (write_eligible_delay): Allow candidate_insn to
+ 	be a label.
+ 	* config/h8300/h8300.h (DELAY_SLOT_LENGTH): New macro.
+ 	* config/h8300/h8300.c (h8300_reorg): New function.
+ 	(TARGET_MACHINE_DEPENDENT_REORG): Define.
+ 	* config/h8300/h8300.md (length): Subtract the length of the
+ 	delay slot from (pc) when checking the range of forward branches.
+ 	(delay_slot, can_delay): New attributes.
+ 	(define_delay): Add bra/s handling.
+ 	(movmd_internal, return_h8sx, *return_1): Set can_delay to no.
+ 	(jump): Add delayed-branch handling.
+ 	2003-06-17  Richard Sandiford  <rsandifo@redhat.com>
+ 	* expr.c (expand_strcpy): New function.
+ 	* builtins.c (expand_builtin_strcpy): Fall back on expand_strcpy.
+ 	(expand_builtin_stpcpy): Likewise.
+ 	* config/h8300/h8300-protos.h (h8sx_split_movmd): Remove.
+ 	(h8300_swap_into_er6, h8300_swap_out_of_er6): Declare.
+ 	* config/h8300/h8300.c (h8300_reg_class_from_letter): Tweak 'd'
+ 	handling to improve register allocation for -fno-omit-frame-pointer.
+ 	(h8sx_split_movmd): Delete, moving er6 handling into...
+ 	(h8300_swap_into_er6, h8300_swap_out_of_er6): ...these new functions.
+ 	* config/h8300/h8300.md (UNSPEC_STPCPY): New unspec constant.
+ 	(movmd): Add calls to copy_rtx.
+ 	(movmd_internal): In the second alternative, allow the initial and
+ 	final destination registers to be different .  Update the splitter
+ 	accordingly.  Call h8300_swap_into_er6 and h8300_swap_out_of_er6
+ 	instead of h8sx_split_movmd.
+ 	(stpcpy, movsd): New expanders.
+ 	(movsd_internal): New define_insn.
+ 	2003-06-13  Richard Sandiford  <rsandifo@redhat.com>
+ 	* config/h8300/h8300-protos.h (h8300_reg_class_from_letter): Declare.
+ 	(h8sx_emit_movmd, h8sx_split_movmd): Declare.
+ 	* config/h8300/h8300.h (reg_class): Add COUNTER_REGS, SOURCE_REGS
+ 	and DESTINATION_REGS.
+ 	(REG_CLASS_NAMES, REG_CLASS_CONTENTS): Update accordingly.
+ 	(REGNO_REG_CLASS): Map er4, er5 and er6 to the new classes.
+ 	(REG_CLASS_FROM_LETTER): Use h8300_reg_class_from_letter.
+ 	(h8300_move_ratio): Declare.
+ 	(MOVE_RATIO): Use it.
+ 	* config/h8300/h8300.c (h8300_move_ratio): New variable.
+ 	(h8300_init_once): Initialize it.
+ 	(h8300_reg_class_from_letter): New function.
+ 	(print_operand): Add an 'm' prefix for printing ".b", ".w" or ".l".
+ 	(h8sx_emit_movmd, h8sx_split_movmd): New functions.
+ 	* config/h8300/h8300.md (UNSPEC_MOVMD): New unspec constant.
+ 	(COUNTER_REG, SOURCE_REG, DESTINATION_REG): New register constants.
+ 	(movstrsi, movmd): New expanders.
+ 	(movmd_internal): New insn.
+ 	2003-06-06  Richard Sandiford  <rsandifo@redhat.com>
+ 	* config/h8300/h8300.h (EXTRA_MEMORY_CONSTRAINT): Define.
+ 	2003-06-04  Richard Sandiford  <rsandifo@redhat.com>
+ 	* config/h8300/elf.h (LINK_SPEC): Use -m h8300sxnelf for -msx -mn.
+ 	* config/h8300/h8300.c (asm_file_start): Use .h8300sxn likewise.
+ 	2003-06-03  Richard Sandiford  <rsandifo@redhat.com>
+ 	* config/h8300/h8300.c (nibble_operand): Fix warning.
+ 	* config/h8300/h8300.md (movstricthi): Set adjust_length to no.
+ 	(movsi_h8sx): Likewise here and the normal h8sx movhi pattern.
+ 	(movsf_h8300h): Disable for TARGET_H8300SX.
+ 	2003-06-03  Richard Sandiford  <rsandifo@redhat.com>
+ 	* config/h8300/h8300.h (PREDICATE_CODES): Add h8300_ldm_parallel,
+ 	h8300_stm_parallel and h8300_return_parallel.
+ 	* config/h8300/h8300.c (h8300_push_pop, h8300_stack_offset_p,
+ 	h8300_ldm_stm_regno, h8300_ldm_stm_parallel, h8300_ldm_parallel,
+ 	h8300_stm_parallel, h8300_return_parallel): New functions.
+ 	(h8300_expand_prologue): Don't enforce ldm/stm register alignment
+ 	if TARGET_H8300SX.  Use h8300_push_pop.
+ 	(h8300_expand_epilogue): Likewise.  Try to merge the return insn
+ 	and final pop when generating h8sx code.  Always emit some form
+ 	of return insn.
+ 	* config/h8300/h8300.md: Don't enforce register alignment in
+ 	stm peepholes if TARGET_H8300SX.
+ 	(ldm_h8300s, stm_h8300s, return_h8sx): New patterns.
+ 	(ldm_h8300s_[234], stm_h8300_[234]): Disable.
+ 	(epilogue): Expect h8300_expand_epilogue to emit a return insn.
+ 	2003-06-03  Richard Sandiford  <rsandifo@redhat.com>
+ 	* config/h8300/t-h8300 (MULTILIB_OPTIONS): Add a -msx multilib.
+ 	(MULTILIB_DIRNAMES): Add a directory for it.
+ 	(MULTILIB_MATCHES): Delete.
+ 	2003-05-28  Richard Sandiford  <rsandifo@redhat.com>
+ 	* final.c (walk_alter_subreg): Handle addresses with subregs
+ 	inside a ZERO_EXTEND or AND.
+ 	* config/h8300/h8300-protos.h (h8300_get_index): Declare.
+ 	* config/h8300/h8300.h (INDEX_REG_CLASS): Set to GENERAL_REGS
+ 	if TARGET_H8300SX.
+ 	(GO_IF_LEGITIMATE_ADDRESS): Use h8300_get_index.
+ 	* config/h8300/h8300.c (print_operand_address): Handle @(dd,RnL.b),
+ 	@(dd,Rn.w) and @(dd,ERn.L).
+ 	(h8300_displacement_size): Take the whole address as argument.
+ 	(h8300_classify_operand, h8300_short_move_mem_p): Adjust accordingly.
+ 	2003-05-28  Richard Sandiford  <rsandifo@redhat.com>
+ 	* config/mips/mips-protos.h (h8300_operands_match_p): Declare.
+ 	(h8sx_mergeable_memrefs_p): Declare.
+ 	* config/h8300/h8300.h (HAVE_POST_DECREMENT): Define to TARGET_H8300SX.
+ 	(HAVE_PRE_INCREMENT): Likewise.
+ 	(GO_IF_LEGITIMATE_ADDRESS): Accept pre/post increment/decrement
+ 	addresses for TARGET_H8300SX,
+ 	* config/h8300/h8300.c (print_operand_address): Deal with PRE_INC
+ 	and POST_DEC.
+ 	(movb_length_table, movl_length_table): New tables.
+ 	(movw_length_table): Define to movb_length_table.
+ 	(h8300_displacement_size): New, split out from...
+ 	(h8300_classify_address): ...here.  Handle pre/post inc/dec.
+ 	(h8300_short_immediate_length): Allow H8OP_MEM_COMPLEX operands.
+ 	(h8300_insn_length_from_table): Add cases for movb, movw and movl.
+ 	(h8sx_mergeable_memrefs_p, h8300_operands_match_p): New functions.
+ 	(output_plussi): Use add.l #xx:3,Rn and sub.l #xx:3,Rn for h8sx.
+ 	(compute_plussi_length, compute_plussi_cc): Update accordingly.
+ 	(h8sx_unary_shift_operator): Get the mode from the operator.
+ 	(binary_shift_operator): Likewise.
+ 	* config/h8300/h8300.md: If a peephole2 applies gen_lowpart to
+ 	a memory reference, check whether the reference is offsettable.
+ 	(length_table): Add movb, movw and movl.
+ 	(movqi): Add new h8sx pattern.  Don't force one operand to be a
+ 	register when generating h8sx code.
+ 	(movhi, movsi, movsf): Likewise.
+ 	(movstrictqi): Use the length_table attribute.
+ 	(movstricthi): Likewise.  Add h8sx alternative for mov.w #xx:3,Rn.
+ 	(addqi3): Split into a define_expand and define_insn.  Don't accept
+ 	memory operands in the expander.  Use h8300_operands_match_p to
+ 	check for matching operands in the define_insn.
+ 	(subqi3, negqi2, one_cmplqi2): Likewise.
+ 	(add[hs]i3): Don't accept memory operands in the expander.  Likewise
+ 	in any patterns that are unused in h8sx code.  In the h8sx patterns,
+ 	use h8300_operands_match_p to check whether operands match.
+ 	(sub[hs]i3, and[hi]3, ior[hs]i3, xor[hs]i3, neg[hsi]3,
+ 	one_cmpl[hs]i3): Likewise.
+ 	(andqi3, iorqi3, xorqi3): Likewise.  Don't call fix_bit_operand
+ 	in the expander.
+ 	2003-05-23  Richard Sandiford  <rsandifo@redhat.com>
+ 	* config/h8300/h8300-protos.h (expand_a_shift): Return a bool.
+ 	(h8300_insn_length_from_table): Add a second parameter.
+ 	(output_h8sx_shift): Declare.
+ 	* config/h8300/h8300.h (OK_FOR_W, OK_FOR_Y): New macros.
+ 	(EXTRA_CONSTRAINT): Replace with...
+ 	(EXTRA_CONSTRAINT_STR): ...this.  Use OK_FOR_W and OK_FOR_Y.
+ 	(CONSTRAINT_LEN): Define, returning 2 for 'W' and 'Y'.
+ 	(PREDICATE_CODES): Add entries for h8sx_unary_shift_operator
+ 	and h8sx_binary_shift_operator.
+ 	* config/h8300/h8300.c (two_insn_adds_subs_operand): Return false
+ 	for TARGET_H8300SX.
+ 	(bit_operand): Replace use of EXTRA_CONSTRAINT with OK_FOR_U.
+ 	(bit_memory_operand, fix_bit_operand): Likewise.
+ 	(h8300_length_table_for_insn): Remove.
+ 	(h8300_classify_operand): Fix check for 16-bit operands in 32-bit
+ 	instructions.
+ 	(h8300_short_immediate_length, h8300_binary_length): New functions.
+ 	(h8300_insn_length_from_table): Add an opcodes parameter.  Rework.
+ 	(output_plussi): Use sub to add negative constants.
+ 	(compute_plussi_length): Adjust accordingly.
+ 	(h8sx_single_shift_type): New enum.
+ 	(h8sx_single_shift, h8sx_unary_shift_operator,
+ 	h8sx_binary_shift_operator, output_h8sx_shift): New functions.
+ 	(expand_a_shift, expand_a_rotate): Emit nothing if the shift is a
+ 	single h8sx instruction.  Return false in this case.
+ 	* config/h8300/h8300.md (length_table): Add short_immediate.
+ 	(length): Pass the operand array to h8300_insn_length_from_table.
+ 	(adjust_length): Assume "no" for insns with a length_table attribute.
+ 	(*cmphi_h8300hs, cmpsi): Add alternatives for #xx:3.
+ 	(*addhi3_h8300hs): Don't use for h8sx.
+ 	(*addhi3_h8sx): New pattern, with alternatives for add.w #xx:3
+ 	and sub.w #xx:3.
+ 	(ashl[qhs]i3, lshr[qhs]i3, ashr[qhs]i3, rotl[qhs]i3): Change operand
+ 	1's predicate to nonimmediate_operand.  Only skip default expansion
+ 	if expand_a_shift or expand_a_rotate returns true.  Add new patterns
+ 	for single h8sx shift instructions.
+ 	2003-05-22  Alexandre Oliva  <aoliva@redhat.com>
+ 	* config/h8300/h8300.c (nibble_operand): Split out of...
+ 	(reg_or_nibble_operand): ... this.
+ 	* config/h8300/h8300.h (PREDICATE_CODES): Added nibble_operand.
+ 	* config/h8300/h8300.md: (mulqihi3, mulhisi3, umulqihi3,
+ 	umulhisi3): Introduce expand, and introduce separate insns for
+ 	sign- or zero-extended REG and already-extended CONST_INT.
+ 	2003-05-20  Richard Sandiford  <rsandifo@redhat.com>
+ 	* config/h8300/h8300.c (h8300_unary_length): Fix miscounting.
+ 	* config/h8300/h8300.md (subqi3): Generalize for h8sx.
+ 	(subhi3): Likewise.  Don't accept immediates for operand 1.
+ 	Remove the early clobber from second alternative of the h8300s pattern.
+ 	(subsi3): Generalize for h8sx.  Force operand 2 into a register
+ 	on plain h8300 targets.
+ 	(subsi3_h8300): Use h8300_dst_operand for consistency with expander.
+ 	(subsi3_h8300h): Generalize for h8sx.
+ 	(one_cmplqi2, one_cmplhi2, one_cmplsi2): Likewise.
+ 	2003-05-19  Alexandre Oliva  <aoliva@redhat.com>
+ 	* config/h8300/h8300.c (reg_or_nibble_operand): New.
+ 	* config/h8300/h8300.h (PREDICATE_CODES): Adjust.
+ 	(TARGET_H8300SXMUL): New.
+ 	(CONST_OK_FOR_P): New.
+ 	(CONST_OK_FOR_LETTER_P): Adjust.
+ 	* config/h8300/h8300.md (mulqihi3, mulhisi3, umulqihi3,
+ 	umulhisi3): Accept 4-bit immediate on H8SX.
+ 	(mulhi3, mulsi3, smulsi3_highpart, umulsi3_highpart): New.
+ 	(udivsi3, divhi3, udivsi3, divsi3): New.
+ 	2003-05-19  Richard Sandiford  <rsandifo@redhat.com>
+ 	* config/h8300/h8300-protos.h (h8300_insn_length_from_table): Declare.
+ 	* config/h8300/h8300.h (OK_FOR_Q): New macro.
+ 	(EXTRA_CONSTRAINT): Use it to check the 'Q' constraint.
+ 	(PREDICATE_CODES): Add h8300_src_operand and h8300_dst_operand.
+ 	Add ADDRESSOF to the bit_operand entry.
+ 	* config/h8300/h8300.c (h8300_dst_operand): New predicate.
+ 	(h8300_src_operand): Likewise.
+ 	(bit_operand): Check nonimmediate_operand rather than general_operand.
+ 	Accept any nonimmediate_operand in h8sx code.
+ 	(h8300_and_costs): Initialize operands[1].
+ 	(h8300_rtx_costs) <AND>: Return false if the operands aren't valid.
+ 	(h8300_operand_class): New enum.
+ 	(h8300_length_table): New typedef.
+ 	(addb_length_table, addw_length_table, addl_length_table,
+ 	logicl_length_table): New tables.
+ 	(logicb_length_table, logicw_length_table): New macros.
+ 	(h8300_classify_operand, h8300_length_from_table,
+ 	h8300_length_table_for_insn, h8300_unary_length,
+ 	h8300_insn_length_from_table): New functions.
+ 	(output_plussi): Only use adds and subs for register destinations.
+ 	Disable redundant clause.
+ 	(compute_plussi_cc): Likewise.
+ 	(compute_plussi_length): Likewise.  Use h8300_length_from_table
+ 	to work out the length of an insn.
+ 	(output_logical_op): Only use narrower immediate instructions
+ 	if the destination is a register.
+ 	(compute_logical_op_cc): Likewise.
+ 	(compute_logical_op_length): Likewise.  Use h8300_length_from_table.
+ 	(h8300_adjust_insn_length): Tighten check for reg<->mem moves.
+ 	* config/h8300/h8300.md (length_table): New attribute.
+ 	(length): When an instruction has a length_table attribute, use
+ 	h8300_insn_length_from_table to calculate its default length.
+ 	(cmpqi): Use h8300_dst_operand for the first operand and
+ 	h8300_src_operand for the second.
+ 	(cmphi, *cmphi_h8300hs, cmpsi, negqi2, neghi2, neghi2_h8300h, negsi2,
+ 	negsi2_h8300h, addqi3, addhi3, *addhi3_h8300, *addhi3_h8300hs, addsi3,
+ 	addsi_h8300, addsi_h8300h, andhi3, andsi3, iorhi3,
+ 	iorsi3, xorhi3, xorsi3): Likewise.
+ 	(andqi3): Use h8300_src_operand for operand 2.  Adjust the condition
+ 	so that it allows any combination of operands for TARGET_H8300SX.
+ 	(iorqi3, xorqi3): Likewise.
+ 	(cmpqi): Use the length_table attribute.
+ 	(*cmphi_h8300hs, cmpsi, addqi, *addhi3_h8300hs, andqi3, iorqi3,
+ 	xorqi3, negqi2, neghi2_h8300h, negsi2_h8300h): Likewise.
+ 	(cmpqi): Add 'Q' constraint.
+ 	(*cmphi_h8300hs, cmpsi, addqi, *addhi3_h8300hs, addsi_h8300h, andqi3,
+ 	iorqi3, xorqi3, negqi2, neghi2_h8300h, negsi2_h8300h): Likewise.
+ 	2003-05-14  Richard Sandiford  <rsandifo@redhat.com>
+ 	* config/h8300/h8300.h (MASK_H8300SX): New macro.
+ 	(TARGET_H8300S): True for both -ms and -msx.
+ 	(TARGET_H8300SX): New macro.
+ 	(TARGET_SWITCHES): Add entries for -msx and -mno-sx.
+ 	* config/h8300/h8300.c (asm_file_start): Write .h8300sx for -msx.
+ 	* config/h8300/elf.h (LINK_SPEC): Use -m h8300sxelf for -msx.
+ 	* config/h8300/t-h8300 (MULTILIB_MATCHES): Use -ms multilibs for -msx.
+ 	[Temporary change.]
+ 	2003-02-28  Alexandre Oliva  <aoliva@redhat.com>
+ 	* config/h8300/h8300.h (SIZE_TYPE, PTRDIFF_TYPE): Use short with
+ 	16-bit pointers and 32-bit ints.
+ 	* config/h8300/h8300.h (LEGITIMATE_CONSTANT_P): Accept
+ 	CONST_DOUBLE with mode no wider than SImode.
+ 	* config/h8300/h8300.md (extendqisi2_h8300): Add constraints for
+ 	output operand.
+ 	2003-02-27  Alexandre Oliva  <aoliva@redhat.com>
+ 	* config/h8300/h8300.c (general_operand_src): Match CONSTANT_P_RTX
+ 	or SUBREG thereof.
+ 	* config/h8300/h8300.h (PREDICATE_CODES): Adjust.
+ 	2003-02-22  Alexandre Oliva  <aoliva@redhat.com>
+ 	* config/h8300/h8300.c (dosize): Truncate sign * size to Pmode.
+ 
+ 2004-05-28  Aaron W. LaFramboise <aaronraolete36@aaronwl.com>
+ 
+ 	* config.gcc (i[34567]86-*-mingw32*): Enable threads by default.
+ 
+ 2004-07-07  Per Bothner  <per@bothner.com>
+ 
+ 	* flow.c (attempt_auto_inc):  Remove now-redundant PUT_CODE.
+ 
+ 2004-07-07  Mike Stump  <mrs@apple.com>
+ 
+ 	* darwin.h (ASM_OUTPUT_LABELREF): Fix -fno-leading-underscore.
+ 	* darwin.c (machopic_non_lazy_ptr_name, machopic_stub_name)
+ 	(machopic_finish): Likewise.
+ 
+ 2004-07-07  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-ssa-dom.c (simplify_switch_and_lookup_avail_expr): Look
+ 	through any value-preserving cast.
+ 
+ 2004-07-07  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	* function.c (assign_parm_find_data_types): Call
+ 	FUNCTION_ARG_PASS_BY_REFERENCE only if it's defined.
+ 
+ 2004-07-07  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* tree-cfg.c (group_case_labels): Remove case labels that have
+ 	the same target as the default case.
+ 
+ 2004-07-07  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* tree-inline.c (optimize_inline_calls): Set DECL_INLINED_FNS
+ 	regardless of DECL_LANG_SPECIFIC being present or not.
+ 	* tree.h (DECL_NUM_STMTS): Purge.
+ 
+ 2004-07-07  Andrew Pinski  <apinski@apple.com>
+ 
+ 	* configure: Regenerate with the right autoconf.
+ 
+ 2004-07-07  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* ifcvt.c (total_bb_rtx_cost): New function.
+ 	(find_if_case_1): Compare rtx_cost of basic block to cost of
+ 	BRANCH_COST insns.
+ 	(find_if_case_2): Same.
+ 
+ 2004-07-07  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	PR target/10567
+ 	* config/sparc/sparc.c (load_pic_register): Honor flag_delayed_branch.
+ 	(output_return): Likewise.
+ 	(output_sibcall): Abort if !flag_delayed_branch.
+ 	(sparc_function_ok_for_sibcall): Return 0 if !flag_delayed_branch.
+ 	(emit_and_preserve): New function.
+ 	(sparc_output_mi_thunk): Use it.  Honor flag_delayed_branch.  Emit an
+ 	indirect jump to the thunked-to function if !flag_delayed_branch.
+ 	* config/sparc/sparc.md (delayed_branch): New attribute.
+ 	(load_pcrel_sym): Honor flag_delayed_branch.  Use above
+ 	attribute to compute the length of the insn.
+ 	(goto_handler_and_restore): Likewise.
+ 
+ 2004-07-07  Andrew Pinski  <apinski@apple.com>
+ 
+ 	PR tree-optimization/15777
+ 	* fold-const.c (fold_single_bit_test): Fold the x^1 expression.
+ 
+ 	* expr.c (expand_expr_real_1): Fix formating.
+ 	BUFFER_REF and IN_EXPR are dead.
+ 	* fold-const.c (non_lvalue): BUFFER_REF is dead.
+ 	* tree-inline.c (estimate_num_insns_1): Likewise.
+ 	* tree-pretty-print.c (dump_generic_node): BUFFER_REF,
+ 	IN_EXPR, SET_LE_EXPR, and CARD_EXPR are dead.
+ 	* tree.def (BUFFER_REF, IN_EXPR, SET_LE_EXPR, CARD_EXPR): Kill.
+ 
+ 2004-07-07  H.J. Lu  <hongjiu.lu@intel.com>
+ 
+ 	* collect2.c (dump_file): Don't call cplus_demangle if
+ 	HAVE_LD_DEMANGLE is defined.
+ 	(main): Pass "--demangle" to ld if no_demangle is not 0 and
+ 	HAVE_LD_DEMANGLE is defined. Don't set current_demangling_style
+ 	if HAVE_LD_DEMANGLE is defined.
+ 
+ 	* configure.ac (--with-demangler-in-ld): Added
+ 	(HAVE_LD_DEMANGLE): Define if ld supports --demangle when
+ 	--with-demangler-in-ld is used.
+ 	* config.in: Regenerated.
+ 	* configure: Likewise.
+ 
+ 2004-07-07  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* config/rs6000/rs6000.c (struct processor_costs): Add new fields
+ 	for simple floating point operations "fp", double precision
+ 	multiplication "dmul", and single and double precision division
+ 	"sdiv" and "ddiv".  Update all CPU variant tables as appropriate.
+ 	(ppc630_cost): New table split from ppc620_cost, to distinguish
+ 	differences in floating point latencies.
+ 	(rs6000_override_options): Use ppc630_cost for PROCESSOR_PPC630.
+ 	(rs6000_rtx_costs): Add support for single and double precision
+ 	floating point addition, subtraction, multiplication, division,
+ 	fused-multiply-add, fused-multiply-sub, negation, absolute value
+ 	and negative absolute value.  Tweak MEM case to use prefered idiom.
+ 
+ 2004-07-07  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-flow-inline.h (may_propagate_copy): Move...
+ 	* tree-ssa-copy.c (may_propagate_copy): ... here.  Fail if we
+ 	attempt to copy between types requiring conversion.
+ 	* tree-flow.h (may_propagate_copy): Update decl.
+ 	* tree-ssa-dom.c (cprop_operand): Tidy redundant tests.
+ 
+ 2004-07-07  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* config/i386/i386.c (override_options): Don't set x86_prefetch_sse
+ 	from -mtune= option.
+ 
+ 2004-07-07  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	* builtins.c: Rename movstr*, except for movstrict*, to
+ 	movmem* and clrstr* to clrmem*.
+ 	* expr.c: Likewise.
+ 	* expr.h: Likewise.
+ 	* genopinit.c: Likewise.
+ 	* integrate.c: Likewise.
+ 	* local-alloc.c: Likewise.
+ 	* optabs.c: Likewise.
+ 	* optabs.h: Likewise.
+ 	* config/alpha/alpha.h: Likewise.
+ 	* config/alpha/alpha.md: Likewise.
+ 	* config/arm/arm-protos.h: Likewise.
+ 	* config/arm/arm.c: Likewise.
+ 	* config/arm/arm.md: Likewise.
+ 	* config/avr/avr.md: Likewise.
+ 	* config/c4x/c4x.c: Likewise.
+ 	* config/c4x/c4x.md: Likewise.
+ 	* config/frv/frv.md: Likewise.
+ 	* config/i386/i386-protos.h: Likewise.
+ 	* config/i386/i386.c: Likewise.
+ 	* config/i386/i386.h: Likewise.
+ 	* config/i386/i386.md: Likewise.
+ 	* config/i860/i860.c: Likewise.
+ 	* config/i860/i860.md: Likewise.
+ 	* config/ip2k/ip2k.md: Likewise.
+ 	* config/ip2k/libgcc.S: Likewise.
+ 	* config/ip2k/t-ip2k: Likewise.
+ 	* config/m32r/m32r.c: Likewise.
+ 	* config/m32r/m32r.md: Likewise.
+ 	* config/mcore/mcore.md: Likewise.
+ 	* config/mips/mips.c: Likewise.
+ 	* config/mips/mips.md: Likewise.
+ 	* config/ns32k/ns32k.c: Likewise.
+ 	* config/ns32k/ns32k.h: Likewise.
+ 	* config/ns32k/ns32k.md: Likewise.
+ 	* config/pa/pa.c: Likewise.
+ 	* config/pa/pa.md: Likewise.
+ 	* config/pdp11/pdp11.h: Likewise.
+ 	* config/pdp11/pdp11.md: Likewise.
+ 	* config/rs6000/rs6000.c: Likewise.
+ 	* config/rs6000/rs6000.md: Likewise.
+ 	* config/s390/s390-protos.h: Likewise.
+ 	* config/s390/s390.c: Likewise.
+ 	* config/s390/s390.md: Likewise.
+ 	* config/sh/lib1funcs.asm: Likewise.
+ 	* config/sh/sh.c: Likewise.
+ 	* config/sh/sh.md: Likewise.
+ 	* config/sh/t-sh: Likewise.
+ 	* config/sparc/sparc.h: Likewise.
+ 	* config/vax/vax.md: Likewise.
+ 	* config/xtensa/xtensa.c: Likewise.
+ 	* config/xtensa/xtensa.md: Likewise.
+ 	* doc/invoke.texi: Likewise.
+ 	* doc/md.texi: Likewise.
+ 	* doc/rtl.texi: Likewise.
+ 
+ 2004-07-07  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	PR target/16407
+ 	* config/mips/mips-protos.h (mips_declare_common_object): Declare.
+ 	* config/mips/mips.c (mips_declare_common_object): New function,
+ 	mostly split out from...
+ 	(mips_output_aligned_decl_common): ...here.
+ 	* config/mips/mips.h (ASM_OUTPUT_LOCAL): Remove in favor of...
+ 	(ASM_OUTPUT_ALIGNED_LOCAL): ...this new definition.
+ 	* config/mips/iris6.h (ASM_OUTPUT_ALIGNED_LOCAL): Undefine this
+ 	rather than ASM_OUTPUT_LOCAL.  Call mips_declare_common_object.
+ 
+ 2004-07-07  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	PR c/16392
+ 	* function.c (assign_parms): Fix typo from previous change.
+ 
+ 2004-07-07  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/15815
+ 	* doc/extend.texi (C++ Interface): Correct information and
+ 	discourage use.
+ 
+ 2004-07-07  Vladimir Makarov  <vmakarov@redhat.com>
+ 
+ 	PR target/16130
+ 	PR target/16142
+ 	PR target/16143
+ 	* config/ia64/ia64.c (ia64_dfa_new_cycle): Reset DFA state for asm
+ 	insn.
+ 
+ 2004-07-06  Kazuhiro Inaoka  <inaoka.kazuhiro@renesas.com>
+ 
+ 	PR target/1679.
+ 	* config/m32r/m32r.c (m32r_function_symbol): New function:
+ 	Generate a symbol name RTX with the correct m32r specific flags
+ 	set.
+ 	(block_move_call): Use new function to generate correct symbol.
+ 	* config/m32r/m32r-protos.h: Add prototype for new funcion.
+ 	* config/m32r/m32r.h (INITIALIZE_TRAMPOLINE): Use the new
+ 	function.
+ 
+ 2004-07-07  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* tree.h (TYPE_BINFO_OFFSET, TYPE_BINFO_VTABLE,
+ 	TYPE_BINFO_VIRTUALS, TYPE_BINFO_BASETYPES,
+ 	TYPE_BINFO_BASETYPE): Remove.
+ 	(BINFO_BASETYPES, BINFO_N_BASETYPES, BINFO_BASETYPE): Rename
+ 	to ...
+ 	(BINFO_BASE_BINFOS, BINFO_N_BASE_BINFOS, BINFO_BASE_BINFO): ...
+ 	here.
+ 	(BINFO_BASEACCESSES, BINFO_BASEACCESS): Rename to ...
+ 	(BINFO_BASE_ACCESSES, BINFO_BASE_ACCESS): ... here.
+ 	(BINFO_INHERITANCE_CHAIN): Redocument as it is actually used.
+ 	(struct tree_binfo): Rename base_types to base_binfos.
+ 	* alias.c (record_component_aliases): Adjust BINFO macros.
+ 	* dbxout.c (dbxout_type): Likewise.
+ 	* dwarf2out.c (gen_member_die): Likewise.
+ 	* sdbout.c (sdbout_one_type): Likewise.
+ 	* tree-dump.c (deque_and_dump): Likewise.
+ 	* config/i386/i386.c (classify_argument,
+ 	contains_128bit_aligned_vector_p): Likewise.
+ 
+ 2004-07-07  Nick Clifton  <nickc@redhat.com>
+ 
+ 	* config/fr30/fr30.c (fr30_setup_incoming_varargs): Change
+ 	arguments to match TARGET_SETUP_INCOMING_VARARGS prototype.
+ 
+ 2004-07-07  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* vec.h: Fix the example use.
+ 
+ 2004-07-06  Richard Henderson  <rth@redhat.com>
+ 
+ 	* langhooks-def.h (LANG_HOOKS_GIMPLE_BEFORE_INLINING): Remove.
+ 	* langhooks.h (struct lang_hooks): Remove gimple_before_inlining.
+ 	* tree-inline.c (copy_body_r, setup_one_parameter,
+ 	initialize_inlined_parameters, expand_call_inline,
+ 	declare_inline_vars): Don't check it.
+ 	(expand_calls_inline): Remove old version, rename new version
+ 	from gimple_expand_calls_inline.
+ 	* tree-optimize.c (execute_gimple): Remove.
+ 	(pass_gimple): Don't run anything.
+ 
+ 2004-07-06  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* doc/sourcebuild.texi: Use semicolons instead of commas in
+ 	section title.
+ 
+ 2004-07-06  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-sra.c (struct sra_walk_fns): Revert 2004-07-05 change.
+ 	(sra_walk_modify_expr, scan_init): Likewise.
+ 	(generate_element_zero): Check visited before scanning children.
+ 	(generate_element_init): Set visited on error.
+ 	(scalarize_init): Handle generate_element_init failure similar
+ 	to use_block_copy.
+ 
+ 2004-07-06  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* toplev.h (NO_FRONT_END_DIAG, ATTRIBUTE_GCC_FE_DIAG): Define.
+ 	(warning, error, pedwarn, sorry): Use ATTRIBUTE_GCC_FE_DIAG.
+ 
+ 2004-07-06  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/i386/i386.c (legitimize_pic_address): Make static.
+ 	(legitimize_address): Handle CONST with TLS operand.
+ 	(ix86_expand_move): Don't call legitimize_pic_address directly.
+ 	* config/i386/i386-protos.h (legitimize_pic_address): Remove.
+ 
+ 2004-07-06  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* ifcvt.c (struct noce_if_info): Add a Boolean b_unconditional field.
+ 	(noce_try_sign_mask): Tweak rtx_cost check if t is evaluated anyway.
+ 	(noce_process_if_block): Initialize if_info.b_unconditional if insn_b
+ 	is currently executed unconditionally, i.e. not in "else_bb".
+ 
+ 2004-07-06  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* config/alpha/alpha.c (alpha_use_dfa_pipeline_interface): Remove.
+ 	(TARGET_SCHED_USE_DFA_PIPELINE_INTERFACE): Define to hook_int_void_1.
+ 	* config/arm/arm.c (arm_use_dfa_pipeline_interface): Remove.
+ 	(TARGET_SCHED_USE_DFA_PIPELINE_INTERFACE): Define to hook_int_void_1.
+ 	* config/frv/frv.c (frv_use_dfa_pipeline_interface): Remove.
+ 	(TARGET_SCHED_USE_DFA_PIPELINE_INTERFACE): Define to hook_int_void_1.
+ 	* config/i386/i386.c (ia32_use_dfa_pipeline_interface): Remove.
+ 	(TARGET_SCHED_USE_DFA_PIPELINE_INTERFACE): Define to hook_int_void_1.
+ 	* config/ia64/ia64.c (ia64_use_dfa_pipeline_interface): Remove.
+ 	(TARGET_SCHED_USE_DFA_PIPELINE_INTERFACE): Define to hook_int_void_1.
+ 	* config/pa/pa.c (hhpa_use_dfa_pipeline_interface): Remove.
+ 	(TARGET_SCHED_USE_DFA_PIPELINE_INTERFACE): Define to hook_int_void_1.
+ 	* config/sparc/sparc.c (sparc_use_dfa_pipeline_interface): Remove.
+ 	(TARGET_SCHED_USE_DFA_PIPELINE_INTERFACE): Define to hook_int_void_1.
+ 	* config/v850/v850.c (v850_use_dfa_pipeline_interface): Remove.
+ 	(TARGET_SCHED_USE_DFA_PIPELINE_INTERFACE): Define to hook_int_void_1.
+ 
+ 2004-07-06  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* dojump.c (do_jump): REFERENCE_EXPR is dead.
+ 	* expr.c (expand_expr_real_1): Ditto.
+ 	* tree-inline.c (estimate_num_insns_1): Ditto.
+ 	* tree-pretty-print.c (dump_generic_node): Ditto.
+ 	(op_symbol): Ditto.
+ 	* tree.def: Ditto.
+ 
+ 2004-07-06  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (reference_node_pool): New pool.
+ 	(find_or_generate_expression): Class 'r' is okay too.
+ 	(create_value_expr_from): Ditto.
+ 	(add_to_sets): LHS should not include vuses.
+ 	(eliminate): Ditto.
+ 	(compute_avail): Reverse ordering of tests.
+ 	Valuize INDIRECT_REF as well.
+ 
+ 2004-07-06  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	PR rtl-optimization/16380
+ 	* loop.c (check_dbra_loop): Sink comparison instructions if they
+ 	do something other than set cc0.
+ 
+ 2004-07-06  James E Wilson  <wilson@specifixinc.com>
+ 
+ 	* doc/interface.texi (longjmp and automatic variables): Delete
+ 	paragraph recommending taking the address of a variable.
+ 
+ 2004-07-06  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* vec.h (VEC_embedded_alloc): Remove.
+ 	(VEC_embedded_size, VEC_embedded_init): New.
+ 	(VEC_alloc, VEC_reserve, VEC_safe_push, VEC_safe_insert): Add
+ 	MEM_STAT_INFO.
+ 	(VEC_truncate): New.
+ 	(vec_p_reserve, vec_o_reserve): Add MEM_STAT_DECL.
+ 	(vec_embedded_alloc): Remove.
+ 	* vec.c (vec_p_reserve, vec_o_reserve): Add MEM_STAT_DECL, adjust.
+ 	(vec_embedded_alloc): Remove.
+ 
+ 2004-07-06  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* Makefile.in (langhooks.o): Do not depend on gt-langhooks.h.
+ 	(gt-langhooks.h): Remove.
+ 
+ 2004-07-06  George Helffrich <george@gly.bris.ac.uk>
+ 
+ 	* xcoffout.h (DBX_FINISH_SYMBOL): Fix typo.
+ 
+ 2004-07-06  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* config/sparc/sparc.c (get_pc_symbol): Rename into
+ 	add_pc_to_pic_symbol.
+ 	(get_pc_symbol_name): Rename into add_pc_to_pic_symbol_name.
+ 	(load_pic_register): Account for previous changes.
+ 	Use reg_names.  Don't create the label twice.
+ 	* config/sparc/sparc.md (UNSPEC_GET_PC): Rename into
+ 	UNSPEC_LOAD_PCREL_SYM.
+ 	(get_pc): Rename into load_pcrel_sym.  Add predicate to
+ 	operands.  Remove condition.
+ 
+ 2004-07-06  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* dbxout.c (dbxout_type): Don't test whether the binfo slot of
+ 	RECORD, UNION & QUAL_UNION is actually a binfo.
+ 
+ 	* tree.h (TREE_VIA_VIRTUAL): Rename to ...
+ 	(BINFO_VIRTUAL_P): ... here. Require TREE_BINFO only.
+ 	(BINFO_MARKED, BINFO_FLAG_[16]): New binfo flags.
+ 	* dbxout.c (dbxout_type): Use BINFO_VIRTUAL_P.
+ 	* dwarf2out.c (add_data_member_location_attribute): Likewise.
+ 	(gen_inheritance_die): Likewise.
+ 	* tree-dump.c (deque_and_dump): Likewise.
+ 	* doc/c-tree.texi (Binfos): Add under reconstruction note.
+ 
+ 2004-07-06  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* config/mcore/mcore.c (TARGET_SCHED_USE_DFA_PIPELINE_INTERFACE):
+ 	Define.
+ 	* config/mcore/mcore.md: Model memory latency with a simple DFA
+ 	pipeline description instead of a define_function_unit.
+ 
+ 2004-07-05  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* langhooks-def.h (LANG_HOOKS_TREE_INLINING_VAR_MOD_TYPE_P): Extra arg.
+ 	* langhooks.h (var_mod_type_p): Likewise.
+ 	* c-decl.c (finish_decl): Add extra arg to variably_modified_type_p.
+ 	* expr.c (count_type_elements): Properly handle return from
+ 	array_type_nelts and properly test for overflow.
+ 	* gimplify.c (gimplify_init_constructor): Properly handle return
+ 	from array_type_nelts.
+ 	(gimplify_addr_expr): Remove redundant clear of TREE_SIDE_EFFECTS.
+ 	* integrate.c (copy_decl_for_inlining): Correct comments.
+ 	* tree-inline.c (remap_decl): Update comments, remove dead code,
+ 	and copy DECL_FIELD_OFFSET and DECL_QUALIFIER, if they exist.
+ 	(remap_type): Only remap if variably modified by vars in function
+ 	being inlined.
+ 	(copy_body_r): Use compatible_type langhooks to see when can fold.
+ 	(setup_one_parameter): Don't remap type.
+ 	(inline_forbidden_p_1): Add arg to variably_modified_type_p.
+ 	* tree.c (recompute_tree_invarant_for_addr_expr): Properly
+ 	compute TREE_INVARIANT for decl case.
+ 	(find_var_from_fn): New function.
+ 	(variably_modified_type_p): Add arg and call new function.
+ 	* tree.h (variably_modified_type_p): Add extra arg.
+ 
+ 2004-07-05  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* config/sparc/sparc.md (nonlocal_goto): Remove disabled code.
+ 	(goto_handler_and_restore_v9): Delete disabled insn.
+ 	(goto_handler_and_restore_v9_sp64): Likewise.
+ 
+ 2004-07-05  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* calls.c (load_register_parameters): Call expand_shift instead
+ 	of expand_binop with ashl_optab (or other shift optab) directly.
+ 	* expr.c (emit_group_load, emit_group_store): Likewise.
+ 	* function.c (assign_parm_setup_block): Likewise.
+ 	* stmt.c (shift_return_value): Likewise.
+ 
+ 2004-07-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* expr.c (expand_assignment): Disable the bitfield += optimizations.
+ 
+ 2004-07-05  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* doc/sourcebuild.texi: Revert previous patch.
+ 
+ 2004-07-05  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* c-decl.c, config/m32r/m32r.c, expr.c, optabs.c: Don't check
+ 	TARGET_MEM_FUNCTIONS.
+ 	* system.h: Poison TARGET_MEM_FUNCTIONS.
+ 	* libfuncs.h (LTI_bcopy, LTI_bcmp, LTI_bzero, bcopy_libfunc,
+ 	bcmp_libfunc, bzero_libfunc): Remove.
+ 	* optabs.c (init_obtabs): Don't set bcopy_libfunc, bcmp_libfunc or
+ 	bzero_libfunc.
+ 	* doc/tm.texi (TARGET_MEM_FUNCTIONS): Remove.
+ 	* doc/standards.texi: Don't mention calling BSD string functions.
+ 	* doc/invoke.texi: Likewise.  Mention that memmove may be called.
+ 	* config/vax/t-memfuncs: New.
+ 	* config/memcmp.c, config/memcpy.c, config/memmove.c,
+ 	config/memset.c: New.
+ 	* config/pdp11/t-pdp11 (LIB2FUNCS_EXTRA): Use these files.
+ 	* config.gcc (vax-*-bsd*, vax-*-sysv*, vax-*-ultrix*): Use
+ 	vax/t-memfuncs.
+ 	* config/alpha/alpha.h, config/arc/arc.h, config/arm/arm.h,
+ 	config/avr/avr.h, config/c4x/c4x.h, config/cris/aout.h,
+ 	config/elfos.h, config/gnu.h, config/h8300/h8300.h,
+ 	config/i386/gas.h, config/ia64/ia64.h, config/interix.h,
+ 	config/ip2k/ip2k.h, config/lynx-ng.h, config/m32r/m32r.h,
+ 	config/mcore/mcore.h, config/mips/mips.h, config/mmix/mmix.h,
+ 	config/netbsd.h, config/openbsd.h, config/pa/pa.h,
+ 	config/rs6000/rs6000.h, config/rtems.h, config/s390/s390.h,
+ 	config/sh/sh.h, config/sparc/sparc.h, config/stormy16/stormy16.h,
+ 	config/svr3.h: Don't define TARGET_MEM_FUNCTIONS.
+ 
+ 2004-07-05  Richard Henderson  <rth@redhat.com>
+ 
+ 	* function.c (assign_parm_setup_reg): Properly rename variables in
+ 	FUNCTION_ARG_CALLEE_COPIES section.
+ 
+ 2004-07-05  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* tree-mudflap.c: Include cgraph.h.
+ 	(mf_init_extern_trees): Rename to mudflap_init.  Export.
+ 	Rewrite to create synthetic declarations instead of looking
+ 	up declarations from mf-runtime.h.
+ 	(mf_make_builtin, mf_make_cache_struct_type): New functions.
+ 	(mf_cache_shift_decl, mf_cache_mask_decl, mf_unregister_fndecl):
+ 	Correct commentary.
+ 	(execute_mudflap_function_decls, mudflap_register_call):
+ 	Don't call mf_init_extern_trees.
+ 	(mudflap_finish_file): Use cgraph_build_static_cdtor.
+ 
+ 	* tree-mudflap.h: Update prototypes.
+ 	* c-mudflap.c: Delete file.
+ 	* c-common.c: Include tree-mudflap.h.
+ 	(c_common_nodes_and_builtins): Call mudflap_init if appropriate.
+ 	* Makefile.in: Remove all references to c-mudflap.o.
+ 	Update dependencies.
+ 
+ 2004-07-05  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	* pa.md (prefetch, prefetch_32, prefetch_64): Only allow short
+ 	displacements with the spatial-locality cache-control completer.
+ 
+ 2004-07-05  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* langhooks.c: Don't include gt-langhooks.h.
+ 	(var_labelno): Delete.
+ 	(lhd_set_decl_assembler_name): Do not append a distinguishing
+ 	number to file-scope internal-linkage declarations for the first
+ 	input file, even if they have DECL_CONTEXT set.  Use DECL_UID of
+ 	the declaration itself (if at block scope), or its containing
+ 	TRANSLATION_UNIT_DECL (if at file scope) for the distinguishing
+ 	number.
+ 
+ 	* opts.c (cur_in_fname): New global.
+ 	* opts.h: Declare it.
+ 	* tree.c: Include opts.h.
+ 	(make_node_stat): If creating a TRANSLATION_UNIT_DECL, give it
+ 	DECL_UID equal to cur_in_fname.
+ 	(copy_node_stat): Do not change DECL_UID when copying a
+ 	TRANSLATION_UNIT_DECL.
+ 	(build_common_tree_nodes): Adjust next_decl_uid to reserve the
+ 	range 0 .. num_in_fnames-1 for TRANSLATION_UNIT_DECLs.
+ 
+ 	* c-decl.c (c_static_assembler_name): Delete.
+ 	* c-tree.h (c_static_assembler_name): Delete prototype.
+ 	* c-lang.c, objc/objc-lang.c: Don't override
+ 	LANG_HOOKS_SET_DECL_ASSEMBLER_NAME.
+ 
+ 	* Makefile.in (tree.o): Update dependencies.
+ 	(GTFILES): Remove langhooks.c.
+ 
+ 2004-07-05  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* fold-const.c (fold) <TRUNC_MOD_EXPR>: Optimize unsigned modulus
+ 	by a power of two into a bit-wise AND, i.e. "X % C" as "X & (C-1)".
+ 	Normalize "X % C" as "X % -C" for signed modulus and negative C.
+ 	Optimize "X % -Y" as "X % Y" for signed modulus.
+ 	<EQ_EXPR>: Recursively call "fold" when transforming "(X % Y) == 0"
+ 	into "((unsigned) X % Y) == 0".
+ 
+ 2004-07-05  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* sourcebuild.texi (Config Fragments): Use @comma{} in
+ 	cross-reference to section title.
+ 
+ 2004-07-05  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* tree.h (DECL_SEEN_IN_BIND_EXPR_P): New macro.
+ 	* gimplify.c (gimple_add_tmp_var, gimplify_bind_expr): Use it.
+ 	(gimplify_target_expr, gimplify_expr): Likewise.
+ 	(copy_if_shared_r): No longer need special case for BIND_EXPR.
+ 	(unshare_body, unvisit_body): Only look at nested if BODY_P is
+ 	whole function.
+ 	(gimplify_compound_lval): See if we can strip any useless conversion.
+ 	(gimplify_modify_expr, gimplify_modify_expr_to_memcpy): Take size
+ 	from RHS, not LHS.
+ 	(gimplify_modify_expr_to_memset): Likewise.
+ 	(gimplify_expr, case CONSTRUCTOR): Handle use as statement.
+ 	* tree-inline.c (setup_one_parameter): Use DECL_SEEN_IN_BIND_EXPR_P.
+ 	(declare_inline_vars): Likewise.
+ 	(walk_type_fields): New function.
+ 	(walk_tree): Use it.
+ 	* tree-nested.c (create_tmp_var_for): Show seen in BIND_EXPR.
+ 
+ 	* tree-sra.c (struct sra_walk_fns): Init function now returns bool.
+ 	(sra_walk_modify_expr): Allow init function to fail.
+ 	(scan_init): Now returns bool.
+ 	(generate_element_init): If can't understand INIT, return false.
+ 	(scalarize_init): Return false if generate_element_init does.
+ 
+ 	* tree-pretty-print.c (dump_generic_node, case ARRAY_TYPE): Properly
+ 	print bounds.
+ 
+ 	* expr.c (expand_expr_real_1, case SWITCH_EXPR): Don't check against
+ 	bounds if bounds aren't constant.
+ 
+ 	* tree-cfg.c (verify_expr): Use CHECK_OP in binary case.
+ 
+ 	* function.c, langhooks-def.h, langhooks.h: Move max_size hook
+ 	to type hooks; remove bogus PARAMS.
+ 
+ 2004-07-05  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* c-tree.h (TYPE_ACTUAL_ARG_TYPES): Use TYPE_LANG_SLOT_1.
+ 	* dwarf2out.c (add_data_member_location_attribute): Check for
+ 	TREE_BINFO.
+ 	* tree.c (tree_node_kinds): Add "binfos".
+ 	(binfo_lang_slots): New.
+ 	(make_node_stat): Add TREE_BINFO.
+ 	(make_tree_binfo_stat): New.
+ 	(tree_node_structure): Add TREE_BINFO.
+ 	* tree.def (TREE_BINFO): New.
+ 	* tree.h (REC_OR_UNION_CHECK): Rename to ...
+ 	(RECORD_OR_UNION_CHECK): ... here.
+ 	(NOT_RECORD_OR_UNION_CHECK): New.
+ 	(TRE_VIA_VIRTUAL): Allow TREE_LIST or TREE_BINFO.
+ 	(TYPE_FIELDS, TYPE_METHODS, TYPE_VFIELD): Adjust for
+ 	RECORD_OR_UNION_CHECK.
+ 	(TYPE_BINFO): Use RECORD_OR_UNION_CHECK.
+ 	(TYPE_LANG_SLOT_1): New.
+ 	(BINFO_TYPE, BINFO_OFFSET, BINFO_VTABLE, BINFO_VIRTUALS,
+ 	BINFO_BASETYPES, TYPE_BINFO_BASETYPES, BINFO_VPTR_FIELD,
+ 	BINFO_BASEACCESSES, BINFO_INHERITANCE_CHAIN): Adjust.
+ 	(BINFO_ELTS): Remove.
+ 	(BINFO_LANG_SLOT): New.
+ 	(struct tree_binfo): New.
+ 	(binfo_lang_slots): Declare.
+ 	(enum tree_node_structure_enum): Add TS_BINFO.
+ 	(union tree_node): Add binfo.
+ 	(make_tree_binfo_stat): Declare.
+ 	(make_tree_binfo): New.
+ 	(enum tree_node_kind): Add binfo_kind.
+ 
+ 	* objc/objc-act.c (start_class, objc_declare_protocols,
+ 	start_protocols): Use TYPE_LANG_SLOT_1.
+ 	* objc/objc-act.h (CLASS_BINFO_ELTS, PROTOCOL_BINFO_ELTS): Rename
+ 	to ...
+ 	(CLASS_LANG_SLOT_ELTS, PROTOCOL_LANG_SLOT_ELTS): ... here.
+ 	(CLASS_IVARS, CLASS_RAW_IVARS, CLASS_STATIC_TEMPLATE,
+ 	CLASS_CATEGORY_LIST, CLASS_PROTOCOL_LIST, CLASS_OWN_IVARS,
+ 	PROTOCOL_LIST, PROTOCOL_FORWARD_DECL): Use TYPE_LANG_SLOT_1.
+ 
+ 2004-07-05  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* rtl.h (struct rtx_def): Remove the integrated flag.
+ 	Use the return_val flag for MEM_SCALAR_P.
+ 	Reshuffle and update flags in CLEAR_RTX_FLAGS.
+ 
+ 2004-07-05  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	PR target/16357
+ 	* config/mips/mips.c (mips_block_move_straight): Pass BLKmode memrefs
+ 	to mips_expand_unaligned_load, mips_expand_unaligned_store, and
+ 	move_by_pieces.
+ 
+ 2004-07-05  Josef Zlomek  <zlomekj@suse.cz>
+ 
+ 	* var-tracking.c: Fix some comments.
+ 	(frame_stack_adjust): New.
+ 	(vt_stack_adjustments): Init stack_adjust of entry block to
+ 	minus stack adjustment of function prologue.
+ 	(adjust_stack_reference): Do not adjust if adjustment == 0.
+ 	(compute_bb_dataflow): Use plus_constant instead of gen_rtx_PLUS.
+ 	(emit_notes_in_bb): Likewise.
+ 	(vt_add_function_parameters): Do not adjust locations of
+ 	function arguments.
+ 	(vt_initialize): Compute the stack adjustment of function
+ 	prologue and offset the initial "location" of frame_base_decl
+ 	from the stack pointer after prologue.
+ 
+ 2004-07-04  Richard Henderson  <rth@redhat.com>
+ 
+ 	* function.c (struct assign_parm_data_all): New.
+ 	(struct assign_parm_data_one): New.
+ 	(assign_parms_initialize_all, assign_parms_augmented_arg_list,
+ 	assign_parm_find_data_types, assign_parms_setup_varargs,
+ 	assign_parm_find_entry_rtl, assign_parm_is_stack_parm,
+ 	assign_parm_find_stack_rtl, assign_parm_adjust_entry_rtl,
+ 	assign_parm_adjust_stack_rtl, assign_parm_setup_block_p,
+ 	assign_parm_setup_block, assign_parm_setup_reg,
+ 	assign_parm_setup_stack, assign_parms_unsplit_complex): Split from ...
+ 	(assign_parms): ... here.
+ 
+ 2004-07-04  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (bb_value_sets): phi_gen, tmp_gen, new_sets
+ 	now are bitmap_set_t's.
+ 	(bitmap_insert_into_set): No point in inserting the value if
+ 	it's invariant.
+ 	(bitmap_set_contains): New function.
+ 	(bitmap_set_replace_value): Add comment on why we do it
+ 	this way.
+ 	(set_contains): Removed.
+ 	(bitmap_set_subtract_from_value_set): New name of
+ 	set_subtract now that it's arguments are two different
+ 	types of sets.
+ 	Update callers.
+ 	(bitmap_find_leader): Change algorithm used.
+ 	(find_or_generate_expression): Update use of functions for new
+ 	bitmap sets.
+ 	(create_expression_by_pieces): Ditto.
+ 	(insert_aux): Ditto.
+ 	(insert): Ditto.
+ 	(add_to_sets): Ditto.
+ 	(init_pre): Ditto.
+ 	(execute_pre): Ditto.
+ 	(compute_avail): Ditto.
+ 	Also ignore virtual phis.
+ 
+ 2004-07-04  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* combine.c (simplify_comparison): Fix comment typo.
+ 
+ 2004-07-04  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* config/sparc/sparc.c (SIBCALL_SLOT_EMPTY_P): Rename
+ 	into LEAF_SIBCALL_SLOT_RESERVED_P after negation.
+ 	(eligible_for_sibcall_delay): Adjust use of SIBCALL_SLOT_EMPTY_P.
+ 	(output_restore): Change parameter from 'insn' to 'pat'.
+ 	(output_return): Adjust call to output_restore.
+ 	(output_sibcall): Adjust use of SIBCALL_SLOT_EMPTY_P.
+ 	Adjust call to output_restore.
+ 
+ 2004-07-04  Neil Booth  <neil@duron.akihabara.co.uk>
+ 
+ 	* config/netbsd.h (NETBSD_OS_CPP_BUILTINS_COMMON): Define __unix__
+ 	and assert system is bsd.
+ 
+ 2004-07-04  Richard Sandiford  <rsandifo@redhat.com>
+ 
+ 	* config/mips/mips.h (MASK_DEBUG_C, TARGET_DEBUG_C_MODE): Delete.
+ 	(TARGET_SWITCHES): Remove -mdebugc.
+ 	* config/mips/mips.md (seq, sne, sgt, sge, slt, sle, sgtu, sgeu)
+ 	(sltu, sleu): Remove TARGET_DEBUG_C_MODE handling.
+ 	(seq_[sd]i, sne_[sd]i, sge_[sd]i, sle_[sd]i_reg, sgeu_[sd]i)
+ 	(sle_[sd]i_reg): Delete.
+ 
+ 2004-07-04  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* config/iq2000/iq2000.c (TARGET_SCHED_USE_DFA_PIPELINE_INTERFACE):
+ 	Define.
+ 	* config/iq2000/iq2000.md: Translate old pipeline description to an
+ 	equivalent new one.
+ 
+ 2004-07-04  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* tree-ssa-ccp.c (set_rhs): Change function to return a bool.
+ 	Ensure the replacement rhs is valid gimple before performing
+ 	the substitution.  Return false if these sanity checks fail.
+ 	(fold_stmt): Only set changed to true, if set_rhs returns true.
+ 	(execute_fold_all_builtins): Only call modify_stmt if set_rhs
+ 	succeeds.
+ 
+ 2004-07-04  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR c/16348
+ 	* c-typeck.c (c_finish_loop): Don't clear cond for cond_is_first loops.
+ 
+ 2004-07-04  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* configure.ac (ranlib_flags): New variable.
+ 	* Makefile.in (RANLIB_FLAGS): New variable.
+ 	(libbackend.a): Use it.
+ 	* configure: Regenerated.
+ 
+ 2004-07-04  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* ifcvt.c (noce_try_sign_mask): Call emit_store_flag to generate
+ 	a "sign mask" instead of using ashr_optab directly.
+ 
+ 2004-07-04  Neil Booth  <neil@duron.akihabara.co.uk>
+ 
+ 	* doc/cpp.texi: Don't document what we do for ill-formed expressions.
+ 	* doc/cppopts.texi: Clarify processing of command-line defines.
+ 
+ 2004-07-04  Gerald Pfeifer  <gerald@pfeifer.com>
+ 
+ 	* doc/contrib.texi (Contributors): Adjust link for GNU Classpath.
+ 
+ 2004-07-04  Richard Henderson  <rth@redhat.com>
+ 
+ 	* rtl.def (ADDRESSOF): Remove.
+ 	* alias.c (rtx_equal_for_memref_p): Don't handle addressof.
+ 	(find_base_term, memrefs_conflict_p): Likewise.
+ 	* cse.c (fixed_base_plus_p, find_best_addr: Likewise.
+ 	(fold_rtx, cse_insn, set_live_p): Likewise.
+ 	* dwarf2out.c (mem_loc_descriptor): Likewise.
+ 	(add_location_or_const_value_attribute): Likewise.
+ 	* emit-rtl.c (copy_insn_1): Likewise.
+ 	* explow.c (memory_address): Likewise.
+ 	* expmed.c (store_split_bit_field): Likewise.
+ 	* expr.c (expand_expr_real_1): Likewise.
+ 	* function.c (instantiate_decl
+ 	(instantiate_virtual_regs_1, fix_lexical_addr): Likewise.
+ 	* genrecog.c (preds, validate_pattern): Likewise.
+ 	* integrate.c (copy_rtx_and_substitute): Likewise.
+ 	* recog.c (general_operand, register_operand): Likewise.
+ 	(memory_address_p): Likwise.
+ 	* reload1.c (eliminate_regs, elimination_effects): Likewise.
+ 	* rtl.c (copy_rtx): Likewise.
+ 	* rtlanal.c (rtx_unstable_p, rtx_varies_p): Likewise.
+ 	(rtx_addr_can_trap_p, nonzero_address_p, address_cost): Likewise.
+ 	* rtlhooks.c (gen_lowpart_general): Likewise.
+ 	* stmt.c (expand_asm_operands): Likewise.
+ 	* web.c (entry_register, replace_ref, web_main): Likewise.
+ 	* config/alpha/alpha.c (input_operand, alpha_legitimate_address_p,
+ 	alpha_expand_block_move, alpha_expand_block_clear): Likewise.
+ 	* config/arm/arm.c (thumb_rtx_costs): Likewise.
+ 	* config/c4x/c4x.c (c4x_valid_operands): Likewise.
+ 	* config/frv/frv.c (move_destination_operand, move_source_operand,
+ 	condexec_dest_operand, condexec_source_operand,
+ 	condexec_memory_operand): Likewise.
+ 	* config/h8300/h8300.h (PREDICATE_CODES): Likewise.
+ 	* config/ia64/ia64.c (general_xfmode_operand): Likewise.
+ 	(destination_xfmode_operand): Likewise.
+ 	* config/mips/mips.h (PREDICATE_CODES): Likewise.
+ 	* config/mn10300/mn10300.c (mn10300_address_cost_1): Likewise.
+ 	* config/s390/s390.c (general_s_operand): Likewise.
+ 	* config/s390/s390.md (mov*): Likewise.
+ 	* config/sparc/sparc.h (PREDICATE_CODES): Likewise.
+ 
+ 	* c-typeck.c (c_mark_addressable): Don't put_var_into_stack.
+ 	* expr.c (expand_expr_real_1): Likewise.
+ 	* stmt.c (expand_decl): Likewise.
+ 	* config/c4x/c4x.c (c4x_expand_builtin): Likewise.
+ 
+ 	* function.c (struct fixup_replacement, struct insns_for_mem_entry,
+ 	postponed_insns, put_var_into_stack, put_reg_into_stack,
+ 	schedule_fixup_var_refs, fixup_var_refs, find_fixup_replacement,
+ 	fixup_var_refs_insns, fixup_var_refs_insns_with_hash,
+ 	fixup_var_refs_insn, fixup_var_refs_1, fixup_memory_subreg,
+ 	walk_fixup_memory_subreg, fixup_stack_1, optimize_bit_field,
+ 	gen_mem_addressof, flush_addressof, put_addressof_into_stack,
+ 	purge_bitfield_addressof_replacements, purge_addressof_replacements,
+ 	purge_addressof_1, insns_for_mem_hash, insns_for_mem_comp,
+ 	struct insns_for_mem_walk_info, insns_for_mem_walk,
+ 	compute_insns_for_mem, is_addressof, purge_addressof, setjmp_protect,
+ 	setjmp_protect_args): Remove.
+ 	(push_function_context_to): Don't handle var_refs_queue.
+ 	(pop_function_context_from, free_after_compilation): Likewise.
+ 	(instantiate_virtual_regs): Don't handle parm_reg_stack_loc.
+ 	(assign_parms, allocate_struct_function): Likewise.
+ 	(use_register_for_decl): New.
+ 	(expand_function_end): Don't setjmp_protect.
+ 	* function.h (struct emit_status): Update commentary.
+ 	(struct function): Remove x_max_parm_reg, x_parm_reg_stack_loc.
+ 	(max_parm_reg, parm_reg_stack_loc): Remove.
+ 	* passes.c (DFI_addressof): Remove.
+ 	(dump_file_info): Remove addressof.
+ 	(rest_of_handle_addressof): Remove.
+ 	(rest_of_compilation): Don't call it.
+ 	* rtl.h (ADDRESSOF_REGNO, ADDRESSOF_DECL): Remove.
+ 	* stmt.c (expand_decl): Use use_register_for_decl.
+ 	* tree.h: Update decls.
+ 	* web.c (mark_addressof): Remove.
+ 	* doc/invoke.texi (-dF): Remove.
+ 
+ 2004-07-03  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/ia64/ia64.c (spill_xfmode_operand): Use assign_stack_temp
+ 	instead of gen_mem_addressof.
+ 	* config/ia64/ia64.md (movxf): Use assign_stack_temp to handle
+ 	TImode output register.
+ 
+ 2004-07-03  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR tree-optimization/16341
+ 	* tree-sra.c (sra_walk_function): Increment to next stmt before
+ 	processing the current stmt.
+ 	(sra_insert_after): Always use BSI_SAME_STMT.
+ 
+ 2004-07-03  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-ssa-dom.c (simplify_rhs_and_lookup_avail_expr): Don't fold
+ 	fp plus with minus.
+ 
+ 2004-07-03  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* tree.c (type_hash_eq): Allow TYPE_MIN_VALUE which compares equal
+ 	with tree_int_cst_equal.
+ 
+ 2004-07-03  Andreas Schwab  <schwab@suse.de>
+ 
+ 	* config/ia64/ia64.md: Define new attribute "empty".
+ 	(prologue_use, nop_x, insn_group_barrier): Set it.
+ 
+ 	* config/ia64/ia64.c (ia64_reorg): When looking for trailing call
+ 	skip over "empty" insns.
+ 
+ 2004-07-03  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* tree-inline.c (initialize_inlined_parameters): Pass proper function
+ 	context to gimplify_body.
+ 	(walk_tree): Don't walk into types twice.
+ 	(walk_tree, case POINTER_TYPE): Deal with mutually recursive pointers.
+ 
+ 	* tree-sra.c (generate_element_init): Remove any useless conversions.
+ 
+ 	* gimplify.c (gimplify_conversion): Remove stripping useless
+ 	conversions from here.
+ 	(gimplify_expr): Put it here, in place of call to STRIP_MAIN_TYPE_NOPS.
+ 	(gimplify_modify_expr_to_memcpy, gimplify_variable_sized_compare):
+ 	Unshare before substituting PLACEHOLDER_EXPR.
+ 	(gimplify_modify_expr_to_memset): Likewise.
+ 	Pass address of TO to memset, not TO itself.
+ 	(gimplify_init_constructor): Make copy of OBJECT so we have it each
+ 	time we make an expression (to match a PLACEHOLDER_EXPR).
+ 
+ 	* tree-ssa.c (tree_ssa_useless_type_conversion): Also look at
+ 	VIEW_CONVERT_EXPR and NON_LVALUE_EXPR.
+ 	* tree-ssa-ccp.c (fold_stmt): Call just STRIP_USELESS_TYPE_CONVERSION.
+ 	* tree-ssa-dom.c (local_fold): Likewise.
+ 
+ 	* langhooks-def.h (LANG_HOOKS_TYPE_MAX_SIZE): New langhook.
+ 	* langhooks.h (strct lang_hooks): New field type_max_size.
+ 	* function.c (assign_temp): Call it.
+ 
+ 2004-07-03  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* config/sh/sh.c (sh_use_dfa_interface): Add TARGET_SH1.
+ 	* config/sh/sh.md: Convert the SH1 pipeline description to
+ 	a DFA model.
+ 
+ 2004-07-02  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* c-decl.c (struct c_binding): Remove contour field; add
+ 	depth, invisible, nested fields.
+ 	(B_IN_SCOPE, B_IN_CURRENT_SCOPE, B_IN_FILE_SCOPE)
+ 	(B_IN_EXTERNAL_SCOPE): New convenience macros.
+ 	(bind): Add invisible and nested arguments. Initialize
+ 	new fields of struct c_binding; adjust loop scanning for
+ 	insertion point.
+ 	(free_binding_and_advance): Clear structure with memset.
+ 	(pop_scope): Adjust to match.  Set DECL_CONTEXT on everything
+ 	in file scope, even if it's in external scope too.
+ 	(pushdecl): Adjust to match.  Create invisible file-scope
+ 	declarations for block-scope forward declarations of static functions.
+ 	(pushtag, warn_if_shadowing, pushdecl_top_level, implicitly_declare)
+ 	(undeclared_variable, lookup_label, declare_label, define_label)
+ 	(lookup_tag, lookup_name, lookup_name_in_scope, builtin_function)
+ 	(c_make_fname_decl, store_parm_decls_newstyle, identifier_global_value)
+ 	(store_parm_decls_oldstyle): Adjust to match.
+ 	(diagnose_mismatched_decls): Correct handling of linkage clashes.
+ 	(merge_decls): No need to copy C_DECL_IN_EXTERNAL_SCOPE.
+ 
+ 	* c-tree.h (C_DECL_IN_EXTERNAL_SCOPE): Delete.
+ 	(C_DECL_DECLARED_BUILTIN, C_DECL_REGISTER): Slide down one.
+ 
+ 2004-07-02  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-decl.c (grokdeclarator): Don't frob current_function_decl
+ 	around variable_size.
+ 	(set_decl_nonlocal): Remove.
+ 	(store_parm_decls): Add stmts for pending sizes.
+ 	* calls.c (calls_function, calls_function_1): Remove.
+ 	(precompute_arguments): Don't call it.
+ 	* cfgexpand.c (set_save_expr_context): Remove.
+ 	(tree_expand_cfg): Don't call it.
+ 	* dwarf2out.c (add_bound_info): Don't handle SAVE_EXPR.
+ 	(dwarf2out_finish): Likewise.
+ 	* expr.c (emit_block_move): Adjust addresses to BLKmode.
+ 	(store_constructor): Don't pre-evaluate SAVE_EXPR.
+ 	(safe_from_p): Don't queue SAVE_EXPRs.
+ 	(expand_expr_real_1 <case SAVE_EXPR>): Rewrite to expect,
+ 	or build plain VAR_DECLs.
+ 	* fold-const.c (twoval_comparison_p): Don't look at SAVE_EXPR_RTL.
+ 	(fold): Likewise.
+ 	(fold_checksum_tree): Don't special-case SAVE_EXPR.
+ 	* function.c (free_after_compilation): Don't clear x_save_expr_regs.
+ 	(put_var_into_stack): Don't handle SAVE_EXPR.
+ 	(gen_mem_addressof): Likewise.
+ 	* function.h (struct function): Remove x_save_expr_regs.
+ 	(save_expr_regs): Remove.
+ 	* gengtype.c (adjust_field_tree_exp): Don't special-case SAVE_EXPR.
+ 	* print-tree.c (print_node): Don't dump SAVE_EXPR_NOPLACEHOLDER.
+ 	* stor-layout.c (variable_size): Don't set it.
+ 	(force_type_save_exprs, force_type_save_exprs_1): Remove.
+ 	* tree-inline.c (remap_save_expr): Remove fn argument.  Update
+ 	all callers.  Don't set SAVE_EXPR_CONTEXT.
+ 	* tree-inline.h (remap_save_expr): Update decl.
+ 	* tree.c (save_expr): Update build size.
+ 	(first_rtl_op): Don't handle SAVE_EXPR.
+ 	(unsave_expr_1, contains_placeholder_p): Likewise.
+ 	(decl_function_context): Likewise.
+ 	* tree.def (SAVE_EXPR): Remove args 1 and 2.
+ 	* tree.h (SAVE_EXPR_CONTEXT, SAVE_EXPR_RTL): Remove.
+ 	(SAVE_EXPR_NOPLACEHOLDER, SAVE_EXPR_PERSISTENT_P): Remove.
+ 
+ 2004-07-03  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* doc/bugreport.texi, doc/configterms.texi, doc/contrib.texi,
+ 	doc/contribute.texi, doc/cpp.texi, doc/cppinternals.texi,
+ 	doc/extend.texi, doc/install.texi, doc/invoke.texi, doc/md.texi,
+ 	doc/portability.texi, doc/tree-ssa.texi, doc/trouble.texi: Avoid
+ 	some first-person references and patronizing comments.  Based on
+ 	printed manual.
+ 	* doc/invoke.texi: Don't reference fortran@gnu.org.
+ 	* doc/trouble.texi (Warning when a non-void function value is
+ 	ignored): Rewrite.  From Russ Allbery and Chris Devers.
+ 
+ 2004-07-02  Daniel Berlin  <dberlin@dberlin.org)
+ 
+ 	* tree-ssa-pre.c (bitmap_set_t): New.
+ 	(bb_value_sets): avail_out is now a bitmap_set_t.
+ 	(bitmap_find_leader): New function.
+ 	(bitmap_value_insert_into_set): Ditto.
+ 	(bitmap_set_copy): Ditto.
+ 	(bitmap_value_replace_in_set): Ditto.
+ 	(bitmap_set_contains_value): Ditto.
+ 	(bitmap_set_new): Ditto.
+ 	(bitmap_set_pool): New pool.
+ 	(find_or_generate_expression): Use bitmap_ functions on AVAIL sets.
+ 	(insert_aux): Ditto.
+ 	(add_to_sets): Ditto.
+ 	(compute_avail): Ditto
+ 	(eliminate): Ditto.
+ 	(init_pre): Ditto.
+ 	(fini_pre): Ditto.
+ 	(execute_pre): Ditto.
+ 
+ 2004-07-02  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* config/rs6000/rs6000.c (struct processor_costs): New structure
+ 	used to hold instruction latencies/sizes for processor types.
+ 	(rs6000_cost): New global variable pointing to current CPU's costs.
+ 	(rs6000_override_options): Initialize rs6000_cost to point to the
+ 	appropriate cost table based upon rs6000_cpu and optimize_size.
+ 	(rs6000_rtx_costs): Use rs6000_cost to avoid hardcoding processor
+ 	timings inline.
+ 
+ 2004-07-02  Richard Henderson  <rth@redhat.com>
+ 
+ 	* expmed.c (make_tree): Don't use SET_DECL_RTL.
+ 
+ 2004-07-02  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* tree-flow.h (bb_ann_d): Remove ephi_nodes field.
+ 
+ 2004-07-01  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/alpha/alpha.c (struct machine_function): Add gp_save_rtx.
+ 	(alpha_gp_save_rtx): Use assign_stack_local instead of
+ 	gen_mem_addressof.
+ 
+ 2004-07-01  Richard Henderson  <rth@redhat.com>
+ 
+ 	* config/alpha/alpha.c (struct alpha_rtx_cost_data): Add int_div.
+ 	(alpha_rtx_cost_data): Update to match.
+ 	(alpha_rtx_cost_size): New.
+ 	(alpha_rtx_costs): Honor optimize_size.
+ 
+ 2004-07-01  Richard Henderson  <rth@redhat.com>
+ 
+ 	* gimple-low.c (lower_function_body): Don't reset_block_changes here.
+ 	* cfgexpand.c (tree_expand_cfg): Do it here.
+ 	* config/alpha/alpha.c (alpha_output_mi_thunk_osf): And here.
+ 	* config/ia64/ia64.c (ia64_output_mi_thunk): And here.
+ 	* config/mips/mips.c (mips_output_mi_thunk): And here.
+ 	* config/rs6000/rs6000.c (rs6000_output_mi_thunk): And here.
+ 	* config/sh/sh.c (sh_output_mi_thunk): And here.
+ 	* config/sparc/sparc.c (sparc_output_mi_thunk): And here.
+ 
+ 2004-07-01  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree.def (RTL_EXPR): Remove.
+ 	* c-typeck.c (lvalue_p): Don't handle it.
+ 	* expr.c (safe_from_p): Likewise.
+ 	(expand_expr_real_1): Likewise.
+ 	* fold-const.c (non_lvalue, operand_equal_p, fold): Likewise.
+ 	(fold_checksum_tree, tree_expr_nonnegative_p): Likewise.
+ 	* gengtype.c (adjust_field_tree_exp): Likewise.
+ 	* stmt.c (warn_if_unused_value): Likewise.
+ 	* tree-gimple.c (recalculate_side_effects): Likewise.
+ 	* tree-pretty-print.c (dump_generic_node): Likewise.
+ 	* tree.c (make_node_stat, first_rtl_op, unsave_expr_1): Likewise.
+ 	(unsafe_for_reeval, stabilize_reference, build1_stat): Likewise.
+ 	* tree.h (RTL_EXPR_SEQUENCE, RTL_EXPR_RTL, RTL_EXPR_ALT_RTL): Remove.
+ 
+ 	* stmt.c (struct stmt_status): Remove x_last_expr_type,
+ 	x_last_expr_value, x_last_expr_alt_rtl, x_expr_stmts_for_value.
+ 	(last_expr_type, last_expr_value, last_expr_alt_rtl): Remove.
+ 	(expand_expr_stmt): Merge with expand_expr_stmt_value.  Remove
+ 	all the bits that tracked last_expr.
+ 	(expand_end_bindings): Don't track last_expr.
+ 	(expand_start_stmt_expr, expand_end_stmt_expr): Remove.
+ 	(clear_last_expr): Remove.
+ 	(expand_asm): Don't call it.
+ 	(expand_asm_operands, expand_end_cond): Likewise.
+ 	(expand_naked_return, expand_null_return_1): Likewise.
+ 	* c-typeck.c (c_begin_compound_stmt): Likewise.
+ 	* cfgexpand.c (expand_block): Use expand_expr_stmt.
+ 	* expr.c (expand_expr_real_1): Likewise.
+ 	* tree.h: Update prototypes.
+ 
+ 	* function.h (struct sequence_stack): Remove sequence_rtl_expr.
+ 	(struct emit_status): Remove sequence_rtl_expr.
+ 	(struct function): Remove x_rtl_expr_chain.
+ 	(seq_rtl_expr, rtl_expr_chain): Remove.
+ 	* function.c (struct temp_slot): Remove rtl_expr.
+ 	(assign_stack_temp_for_type): Don't set it.
+ 	(free_temp_slots, pop_temp_slots): Don't check it.
+ 	(free_after_compilation): Don't clear x_rtl_expr_chain.
+ 	(fixup_var_refs): Don't search it.
+ 	(preserve_rtl_expr_result, free_temps_for_rtl_expr): Remove.
+ 	* emit-rtl.c (start_sequence): Don't use sequence_rtl_expr
+ 	or seq_rtl_expr.
+ 	(push_topmost_sequence): Likewise.
+ 	(end_sequence, init_emit): Likewise.
+ 	(start_sequence_for_rtl_expr): Remove.
+ 	* expmed.c (make_tree): Build a VAR_DECL instead of an RTL_EXPR.
+ 	* rtl.h (preserve_rtl_expr_result): Remove.
+ 
+ 2004-07-02  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* ifcvt.c, modulo-sched.c, tree-alias-common.c, tree-sra.c,
+ 	tree-ssa-copy.c, tree-ssa-dom.c, tree-ssa-pre.c: Fix comment
+ 	typos.
+ 
+ 2004-07-02  Aaron W. LaFramboise <aaronraolete36@aaronwl.com>
+ 
+ 	* gcc.c (STANDARD_STARTFILE_PREFIX_1): Define.
+ 	(STANDARD_STARTFILE_PREFIX_2): Define.
+ 	(standard_startfile_prefix_1): Initialize to
+ 	STANDARD_STARTFILE_PREFIX_1.
+ 	(standard_startfile_prefix_2): Initialize to
+ 	STANDARD_STARTFILE_PREFIX_2.
+ 	* config/i386/mingw32.h (MD_STARTFILE_PREFIX): Remove.
+ 	(STANDARD_STARTFILE_PREFIX_1): Define.
+ 	(STANDARD_STARTFILE_PREFIX_2): Define.
+ 	* doc/tm.texi (STANDARD_STARTFILE_PREFIX_1): Document.
+ 	(STANDARD_STARTFILE_PREFIX_2): Document.
+ 
+ 2004-07-01  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-sra.c (sra_walk_expr): Don't maybe_lookup_element_for_expr
+ 	in order to disable scalarization.  Instead set a flag and wait
+ 	for a candidate decl.
+ 
+ 2004-07-01  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* doc/cppinternals.texi, doc/install.texi, doc/invoke.texi,
+ 	doc/md.texi, doc/sourcebuild.texi, doc/tm.texi, doc/trouble.texi:
+ 	Use terminology "testsuite" and "enumerated".
+ 
+ 2004-07-01  Richard Henderson  <rth@redhat.com>
+ 
+ 	* dwarf2out.c (reg_save): Use INVALID_REGNUM.
+ 	(dwarf2out_reg_save, dwarf2out_return_save): Likewise.
+ 	(initial_return_save): Likewise.
+ 	(flush_queued_reg_saves): Remap register numbers.
+ 	(dwarf2out_return_reg): Likewise.
+ 
+ 2004-07-01  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* gimplify.c (gimplify_one_sizepos): Don't do anything if any VAR_DECL.
+ 
+ 	* tree-pretty-print.c (dump_generic_node, case ARRAY_REF): Use
+ 	access functions for lower bound and element size and only output
+ 	if lower bound nonzero or element size not same as that of type.
+ 	(dump_generic_node, case COMPONENT_REF): Use access func. for offset.
+ 
+ 2004-07-01  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* c-pretty-print.c (pp_c_postfix_expression): Fix pasto.
+ 
+ 2004-07-01  Per Bothner  <per@bothner.com>
+ 
+ 	* final.c (final):  Fix typo reported by Aaron W. LaFramboise.
+ 
+ 2004-07-01  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* expr.c (expand_assignment): Optimize bitfld += cst for 1 bit
+ 	bitfields as well.  STRIP_NOPS from src operand and PLUS_EXPR's
+ 	first operand.  Don't optimize if the bitfield is volatile.
+ 
+ 2004-07-01  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* c-pretty-print.c (pp_c_postfix_expression): Handle
+ 	floating-point comparison operators.
+ 	(pp_c_expression): Pass floating-point comparison
+ 	operators to pp_c_postfix_expression.
+ 
+ 2004-07-01  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* simplify-rtx.c (simplify_binary_operation) <PLUS, MINUS>: Use
+ 	rtx_cost instead of "had_mult" to determine whether the transformed
+ 	expression is cheaper than the original.
+ 
+ 2004-07-01  Jerry Quinn  <jlquinn@optonline.net>
+ 
+ 	* alias.c (get_alias_set, canon_rtx, get_addr,
+ 	nonoverlapping_memrefs_p, nonlocal_referenced_p_1, memory_modified_1):
+ 	Use MEM_P.
+ 	* builtins.c (expand_builtin_prefetch, expand_builtin_profile_func,
+ 	expand_builtin): Likewise.
+ 	* calls.c (expand_call, emit_library_call_value_1, store_one_arg):
+ 	Likewise.
+ 	* combine.c (can_combine_p, combinable_i3pat, try_combine,
+ 	find_split_point, combine_simplify_rtx, simplify_set, make_extraction,
+ 	rtx_equal_for_field_assignment_p, gen_lowpart_for_combine,
+ 	record_dead_and_set_regs_1, get_last_value_validate,
+ 	mark_used_regs_combine, move_deaths, unmentioned_reg_p_1): Likewise.
+ 	* cse.c (check_dependence, canon_hash, equiv_constant,
+ 	gen_lowpart_if_possible, cse_insn, invalidate_from_clobbers,
+ 	cse_around_loop, cse_check_loop_start, cse_set_around_loop,
+ 	count_reg_usage): Likewise.
+ 	* cselib.c (rtx_equal_for_cselib_p, add_mem_for_addr, cselib_lookup,
+ 	cselib_invalidate_mem, cselib_invalidate_rtx, cselib_record_set,
+ 	cselib_record_sets): Likewise.
+ 	* dbxout.c (PARM_PASSED_IN_MEMORY, dbxout_symbol,
+ 	dbxout_symbol_location, dbxout_parms, dbxout_reg_parms): Likewise.
+ 	* ddg.c (mark_mem_use, mark_mem_store, rtx_mem_access_p): Likewise.
+ 	* df.c (df_uses_record): Likewise.
+ 	* dojump (do_jump): Likewise.
+ 	* dwarf2out.c (stack_adjust_offset, mem_loc_descriptor,
+ 	loc_descriptor_from_tree, rtl_for_decl_location, add_bound_info,
+ 	decl_start_label): Likewise.
+ 	* emit-rtl.c (gen_complex_constant_part, gen_highpart,
+ 	operand_subword, change_address_1, make_safe_from): Likewise.
+ 	* explow.c (break_out_memory_refs, copy_all_regs, validize_mem,
+ 	stabilize, force_not_mem): Likewise.
+ 	* expmed.c (store_bit_field, store_split_bit_field, extract_bit_field,
+ 	expand_mult_const, expand_divmod, emit_store_flag): Likewise.
+ 	* expr.c (convert_move, convert_modes, emit_block_move,
+ 	emit_group_load, emit_group_store, clear_storage, emit_move_insn,
+ 	emit_move_insn_1, expand_assignment, store_expr,
+ 	store_constructor_field, store_constructor, store_field,
+ 	force_operand, safe_from_p, expand_expr_real_1, expand_increment):
+ 	Likewise.
+ 	* final.c (cleanup_subreg_operands, alter_subreg,
+ 	get_mem_expr_from_op): Likewise.
+ 	* flow.c (notice_stack_pointer_modification_1,
+ 	init_propagate_block_info, insn_dead_p, mark_set_1, mark_used_regs):
+ 	Likewise.
+ 	* function.c (mark_temp_addr_taken, preserve_temp_slots,
+ 	preserve_rtl_expr_result, put_var_into_stack, fixup_var_refs_1,
+ 	optimize_bit_field, flush_addressof, purge_addressof_1,
+ 	instantiate_decl, instantiate_virtual_regs_1, assign_parms,
+ 	setjmp_protect, setjmp_protect_args, fix_lexical_addr,
+ 	keep_stack_depressed): Likewise.
+ 	* ifcvt.c (noce_try_cmove_arith, noce_try_abs, noce_operand_ok,
+ 	noce_process_if_block, find_memory): Likewise.
+ 	* integrate.c (subst_constants, allocate_initial_values): Likewise.
+ 	* local-alloc.c (validate_equiv_mem_from_store, memref_referenced_p,
+ 	update_equiv_regs): Likewise.
+ 	* loop.c (scan_loop, prescan_loop, note_addr_stored, check_store,
+ 	maybe_eliminate_biv_1, find_mem_in_note_1): Likewise.
+ 	* optabs.c (expand_abs, emit_unop_insn): Likewise.
+ 	* passes.c (rest_of_handle_final): Likewise.
+ 	* postreload.c (reload_cse_simplify_set, reload_cse_simplify_operands,
+ 	move2add_note_store): Likewise.
+ 	* ra-build.c (detect_remat_webs): Likewise.
+ 	* ra-debug.c (dump_static_insn_cost): Likewise.
+ 	* ra-rewrite.c (slots_overlap_p, insert_stores): Likewise.
+ 	* recog.c (validate_change, apply_change_group, cancel_changes,
+ 	validate_replace_rtx_1, general_operand, register_operand,
+ 	nonmemory_operand, push_operand, pop_operand, memory_operand,
+ 	indirect_operand, asm_operand_ok, offsettable_memref_p,
+ 	offsettable_nonstrict_memref_p, constrain_operands,
+ 	store_data_bypass_p): Likewise.
+ 	* reg-stack.c (subst_stack_regs_pat): Likewise.
+ 	* regclass.c (record_operand_costs, scan_one_insn, record_reg_classes,
+ 	copy_cost, reg_scan_mark_refs): Likewise.
+ 	* regmove.c (optimize_reg_copy_3, stack_memref_p,
+ 	combine_stack_adjustments_for_block): Likewise.
+ 	* regrename.c (copyprop_hardreg_forward_1): Likewise.
+ 	* reload.c (can_reload_into, push_reload, decompose, immune_p,
+ 	find_reloads, find_reloads_address, find_reloads_address_1,
+ 	reg_overlap_mentioned_for_reload_p, refers_to_mem_for_reload_p,
+ 	find_equiv_reg): Likewise.
+ 	* reload1.c (reload, eliminate_regs, eliminate_regs_in_insn,
+ 	reload_as_needed, choose_reload_regs, emit_input_reload_insns,
+ 	do_input_reload, emit_reload_insns, gen_reload, delete_output_reload,
+ 	delete_address_reloads): Likewise.
+ 	* resource.c (mark_referenced_resources): Likewise.
+ 	* rtlanal.c (get_jump_table_offset, count_occurrences,
+ 	reg_referenced_p, reg_set_p, set_of_1, set_noop_p,
+ 	reg_overlap_mentioned_p, note_uses, replace_regs, nonzero_bits1,
+ 	num_sign_bit_copies1): Likewise.
+ 	* rtlhooks.c (gen_lowpart_general): Likewise.
+ 	* sched-deps.c (sched_analyze_1, sched_analyze_2): Likewise.
+ 	* sdbout.c (PARM_PASSED_IN_MEMORY, sdbout_symbol,
+ 	sdbout_toplevel_data, sdbout_parms, sdbout_reg_parms,
+ 	sdbout_global_decl): Likewise.
+ 	* simplify-rtx.c (simplify_subreg): Likewise.
+ 	* stmt.c (expand_asm_operands, expand_expr_stmt_value, expand_decl,
+ 	expand_anon_union_decl, expand_end_case_type): Likewise.
+ 	* unroll.c (calculate_giv_inc): Likewise.
+ 	* var-tracking.c (stack_adjust_offset_pre_post,
+ 	bb_stack_adjust_offset, track_expr_p, count_uses, add_uses,
+ 	add_stores, compute_bb_dataflow, vt_get_decl_and_offset,
+ 	vt_add_function_parameters): Likewise.
+ 	* varasm.c (make_var_volatile, notice_global_symbol,
+ 	assemble_external, decode_addr_const, mark_weak,
+ 	default_encode_section_info): Likewise.
+ 
+ 2004-07-01  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* stmt.c (check_seenlabel): Remove.
+ 	(pushcase, pushcase_range, expand_end_case_type): Don't call it.
+ 
+ 2004-07-01  Richard Henderson  <rth@redhat.com>
+ 
+ 	* function.h (struct function): Remove x_function_call_count.
+ 	(function_call_count): Remove.
+ 	* calls.c (expand_call): Don't set it.
+ 	* integrate.c (copy_rtx_and_substitute): Likewise.
+ 
+ 	* function.h (struct function): Remove x_cleanup_label.
+ 	(cleanup_label): Remove.
+ 	* stmt.c (expand_value_return): Don't use it.
+ 	* function.c (free_after_compilation): Don't set it.
+ 	(expand_function_start): Likewise.  Remove parms_have_cleanups arg.
+ 	* cfgexpand.c (tree_expand_cfg): Update call.
+ 	* tree.h (expand_function_start): Update decl.
+ 
+ 2004-07-01  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	PR c/1027
+ 	* c-lang.c (c_initialize_diagnostics): Move from here ...
+ 	* c-objc-common.c: ... to here.  Include "c-pretty-print.h".
+ 	(c_tree_printer): Use pretty-printer to format %T.
+ 	* c-pretty-print.c (pp_c_specifier_qualifier_list): Include space
+ 	before '*' if not C++.
+ 	(pp_c_direct_abstract_declarator): Don't try to print array upper
+ 	bound for flexible array members.
+ 	* c-tree.h: Include "diagnostic.h".
+ 	(c_initialize_diagnostics): Declare.
+ 	* objc/objc-lang.c (LANG_HOOKS_INITIALIZE_DIAGNOSTICS): Define.
+ 	* c-format.c (format_type_warning): New function.  Improve
+ 	diagnostics for incorrect format argument types.
+ 	(check_format_types): Use it.  Add two parameters.  Use the
+ 	TYPE_MAIN_VARIANT of wanted_type.
+ 	(check_format_info_main): Pass new parameters to
+ 	check_format_types.
+ 	(struct format_wanted_type): Update comment.
+ 
+ 2004-07-01  Nick Clifton  <nickc@redhat.com>
+ 
+ 	* target.h (struct gcc_target): Add new field to struct cxx:
+ 	import_export_class.
+ 	* target-def.h (TARGET_CXX): Initialise the new field.
+ 	(TARGET_CXX_IMPORT_EXPORT_CLASS): Provide a default value for
+ 	the new field.
+ 	* doc/tm.texi: Document the new target hook.
+ 
+ 2004-07-01  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* builtins.c (fold_builtin_classify): Fix typo.
+ 
+ 2004-07-01  Richard Henderson  <rth@redhat.com>
+ 
+ 	* function.c (identify_blocks, identify_blocks_1): Remove.
+ 	* function.h (identify_blocks): Remove.
+ 	* rtl.h (NOTE_INSN_BLOCK_BEG): Update comment.
+ 
+ 2004-07-01  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* builtins.c (fold_builtin_classify): New.
+ 	(fold_builtin_unordered_cmp): Fix commentary.
+ 	(fold_builtin): Use it.
+ 	* builtins.def: Define builtins for isnan,
+ 	isnanf, isnanl, finite, finitef, finitel,
+ 	isinf, isinff, isinfl.
+ 
+ 2004-07-01  Richard Henderson  <rth@redhat.com>
+ 
+ 	* function.h (struct function): Remove dont_emit_block_notes.
+ 	* gimple-low.c (lower_function_body): Don't set it.
+ 	* cfgexpand.c (expand_block): Don't check it.
+ 	* cfglayout.c (insn_locators_initialize): Likewise.
+ 	* expr.c (expand_expr_real, expand_expr_real_1): Likewise.
+ 	* passes.c (rest_of_compilation): Likewise.
+ 	* stmt.c (expand_start_bindings_and_block): Likewise.
+ 	(expand_end_bindings): Likewise.
+ 
+ 2004-07-01  Richard Henderson  <rth@redhat.com>
+ 
+ 	* cgraph.h (cgraph_build_static_cdtor): Declare.
+ 	* cgraphunit.c (cgraph_build_static_cdtor): New.
+ 	* c-objc-common.c (build_cdtor): Use it.
+ 	* coverage.c (create_coverage): Likewise.
+ 	* libfuncs.h (LTI_gcov_init, gcov_init_libfunc): Remove.
+ 	* optabs.c (init_optabs): Don't set gcov_init_libfunc.
+ 
+ See ChangeLog.11 for earlier changes.
diff -Nrcpad gcc-3.4.3/gcc/ChangeLog.5 gcc-4.0.0/gcc/ChangeLog.5
*** gcc-3.4.3/gcc/ChangeLog.5	Thu Dec 19 05:18:03 2002
--- gcc-4.0.0/gcc/ChangeLog.5	Thu Feb 24 21:47:13 2005
*************** Fri May 18 15:39:16 CEST 2001  Jan Hubic
*** 3405,3412 ****
  	what a basic block is, and what the various fields are used for.
  	* flow.c (calculate_globlal_regs_live): Add documentation about
  	how the algorithm works, and how we know that it will terminate.
! 	Check that the the inductive assumption that guarantees
! 	termination actually holds.
  	(mark_used_regs): Treat conditionally set registers as used.
  	(debug_regset): Add comment.
  	* rtl.texi (cond_exec): Add documentation.
--- 3405,3412 ----
  	what a basic block is, and what the various fields are used for.
  	* flow.c (calculate_globlal_regs_live): Add documentation about
  	how the algorithm works, and how we know that it will terminate.
! 	Check that the inductive assumption that guarantees termination
! 	actually holds.
  	(mark_used_regs): Treat conditionally set registers as used.
  	(debug_regset): Add comment.
  	* rtl.texi (cond_exec): Add documentation.
diff -Nrcpad gcc-3.4.3/gcc/ChangeLog.7 gcc-4.0.0/gcc/ChangeLog.7
*** gcc-3.4.3/gcc/ChangeLog.7	Fri Nov 21 06:52:22 2003
--- gcc-4.0.0/gcc/ChangeLog.7	Thu Feb 24 21:47:14 2005
*************** Tue Jun 11 21:53:37 CEST 2002  Jan Hubic
*** 1717,1723 ****
  	last insn created by the splitter.
  
  	* caller-save.c (init_caller_save): Move creation of SAVEINSN
! 	and RESTINSN into into the scope of the sequence.
  
  	* mips.c (mips_expand_prologue): Use emit_jump_insn for trivial
  	RETURN insns.
--- 1717,1723 ----
  	last insn created by the splitter.
  
  	* caller-save.c (init_caller_save): Move creation of SAVEINSN
! 	and RESTINSN into the scope of the sequence.
  
  	* mips.c (mips_expand_prologue): Use emit_jump_insn for trivial
  	RETURN insns.
diff -Nrcpad gcc-3.4.3/gcc/ChangeLog.tree-ssa gcc-4.0.0/gcc/ChangeLog.tree-ssa
*** gcc-3.4.3/gcc/ChangeLog.tree-ssa	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ChangeLog.tree-ssa	Thu Feb 24 21:47:15 2005
***************
*** 0 ****
--- 1,19338 ----
+ 2004-05-11  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-cfg.c (delete_tree_cfg): Update call to
+ 	free_basic_block_vars.
+ 
+ 2004-05-10  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-live.h: Fix typo in #include guard.
+ 
+ 2004-05-08  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	* tree-eh.c (lower_catch): Lower catch body in context of
+ 	catch_region.
+ 
+ 2004-05-07  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-eh.c (tree_could_trap_p): Use get_base_address on references.
+ 	
+ 2004-05-07  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* doc/invoke.texi: Remove documentation for -ftree-copyprop.
+ 	Update documentation for -ftree-pre.
+ 
+ 2004-05-06  Richard Henderson  <rth@redhat.com>
+ 
+ 	* stmt.c (parse_output_constraint): Don't warn for read-write
+         memory operand.
+ 	* gimplify.c (gimplify_asm_expr): Force in-out memory operands
+ 	to minimal lvalues, then expand to non-matching constraints.
+ 
+ 2004-05-06  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* c-decl.c (finish_function): When !targetm.have_ctors_dtors,
+ 	record static constructors and destructors here...
+ 	(c_expand_body_1): ... not here.
+ 	* c-objc-common.c (start_cdtor, finish_cdtor): Collapse
+ 	together into
+ 	(build_cdtor): ...here.  Update to construct a complete tree
+ 	for the function.  No need to call push_scope, pop_scope, or
+ 	clear_last_expr, or set current_function_cannot_inline.
+ 	(c_objc_common_finish_file): Just call build_cdtor for static
+ 	ctors/dtors, then clear the variables.  Do this before calling
+ 	cgraph_finalize_compilation_unit and cgraph_optimize.
+ 
+ 2004-05-06  Richard Henderson  <rth@redhat.com>
+ 
+ 	* fold-const.c (fold): Don't build COND_EXPR from comparisons for
+ 	boolean and integer result types.  Handle X ^ X for TRUTH_XOR_EXPR.
+ 
+ 2004-05-05  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-nested.c (create_tmp_var_for): Disallow variable sized types.
+ 	(convert_nonlocal_reference): Set val_only false for the base of a
+ 	component or array reference.
+ 	(convert_local_reference): Likewise.
+ 
+ 2004-05-05  Richard Henderson  <rth@redhat.com>
+ 
+ 	* gimplify.c (create_tmp_var): Disallow variable sized objects.
+ 	(gimplify_modify_expr): Don't memcpy for VA_ARG_EXPR.
+ 
+ 2004-05-05  Richard Henderson  <rth@redhat.com>
+ 
+ 	* fold-const.c (operand_equal_p): Replace only_const argument with
+ 	flags.  Allow pure functions if OEP_PURE_SAME.
+ 	(fold, nondestructive_fold_binary_to_constant): Use OEP_ONLY_CONST.
+ 	* tree-cfg.c (phi_alternatives_equal): Fix operand_equal_p flag type.
+ 	* tree-ssa-dom.c (avail_expr_eq): Use OEP_PURE_SAME.
+ 	* tree.h (enum operand_equal_flag): New.
+ 	(operand_equal_p): Update argument list.
+ 
+ 2004-05-05  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-ssa-operands.c (get_call_flags): Remove.
+ 	(get_expr_operands): Use call_expr_flags.
+ 	* tree-alias-common.c (call_may_clobber): Likewise.
+ 	(call_may_return): Likewise.
+ 
+ 2004-04-05  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR c/15062
+ 	* c-typeck.c (build_asm_expr): Mark the output operands
+ 	to an asm addressable, if necessary.
+ 
+ 2004-05-05  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* Makefile.in (GTFILES): Remove duplicate basic-block.h.
+ 
+ 2004-05-04  Richard Henderson  <rth@redhat.com>
+ 
+ 	* gimplify.c (build_addr_expr_with_type): Set TREE_ADDRESSABLE.
+ 	(gimplify_modify_expr): Turn variable-width assignment into memcpy.
+ 	* tree-nested.c (convert_local_reference): Set val_only after default.
+ 
+ 2004-05-04  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-cfg.c (tree_cfg2vcg): Rename from tree_cfg2dot.  Update all
+ 	users.
+ 	Emit flowgraph using VCG syntax.
+ 	* tree-dump.c (dump_files): Rename -fdump-tree-dot to
+ 	-fdump-tree-vcg.
+ 	* tree.h (enum tree_dump_index): Rename TDI_dot to TDI_vcg.
+ 	* doc/invoke.texi: Update documentation to describe
+ 	-fdump-tree-vcg.
+ 
+ 2004-05-03  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* objc/objc-act.c (build_objc_string_object):
+ 	Add the fields to the purpose of the list for
+ 	the constructor.
+ 
+ 2004-05-03  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-simplify.c (gimplify_if_stmt): Loop for else-if.
+ 
+ 2004-05-03  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR optimization/15245
+ 	* tree-ssa-phiopt.c (conditional_replacement): Use fold_convert
+ 	instead of convert.
+ 
+ 2004-05-03  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* gimplify.c (gimplify_compound_lval): Gimplify non-constant
+ 	array indices into a temporary variable.
+ 
+ 2004-04-30  Richard Henderson  <rth@redhat.com>
+ 
+ 	* builtins.c (validate_arglist): Don't reject side effects.
+ 	(simplify_builtin_strcpy): Do reject side effects in length.
+ 
+ 2004-04-30  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-outof-ssa.c (eliminate_build): Move code which verifies
+ 	that all of a PHI's arguments do not have a partition if the
+ 	result does not have a partition from here to...
+ 	(rewrite_trees): Here.
+ 
+ 2004-04-24  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-cfg.c (factored_computed_goto_label,
+ 	factored_computed_goto): Removed.
+ 	(disband_implicit_edges): Unfactor computed gotos without
+ 	using them.
+ 
+ 2004-04-23  Per Bothner  <per@bothner.com>
+ 
+ 	* expr.c (expr_wfl_stack):  Remove unused global.
+ 
+ 	Pre-patches for future source_location / location_t merge.
+ 	* tree.h (EXPR_LOCATION, EXPR_HAS_LOCATION):  New macros.
+ 	* expr.c (expand_expr_real, expand_expr_real_1):  Use new macros.
+ 	* gimple-low.c (lower_stmt):  Likewise.
+ 	* gimplify.c (annotate_all_with_locus):  Likewise.
+ 	* print-tree.c (print_node):  Likewise.
+ 	* tree-inline.c (expand_call_inline):  Likewise.
+ 	* tree-pretty-print.c (tree-pretty-print.c):  Likewise.
+ 	* tree-sra.c (scalarize_structure_assignment, emit_scalar_copies,
+ 	scalarize_call_expr):  Likewise.
+ 	* tree-ssa-pre.c (code_motion):  Likewise.
+ 	
+ 2004-04-23  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* c-simplify.c (gimplify_decl_stmt) [TYPE_DECL]:
+ 	Do not check the type.
+ 
+ 2004-04-22  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-into-ssa.c (rewrite_initialize_block_local_data): Mark all
+ 	arguments as potentially unused.  Do not bother to VARRAY_CLEAR
+ 	the block_defs.  Instead abort if we are presented with a block
+ 	which has a nonempty block_defs.  Wrap entire thing inside
+ 	#ifdef ENABLE_CHECKING.
+ 	* tree-ssa-dom.c (dom_opt_initialize_block_local_data): Similarly
+ 
+ 	* tree-ssa-dom.c (redirect_edges_and_update_ssa_graph): Do not mark
+ 	arguments to bypassed PHIs as needing to be rewritten.
+ 
+ 2004-04-21  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR middle-end/14978
+ 	* tree-nested.c (convert_nonlocal_reference): Set val_only when
+ 	processing any otherwise unhandled expression.
+ 
+ 2004-04-21  Jeff Law  <law@redhat.com>
+ 
+  	* tree-ssa-copy.c (cprop_operand): Break out of cprop_into_stmt.
+ 	(cprop_into_stmt): Use cprop_operand.  Rearrange slightly to avoid
+ 	switch statement inside a loop.
+ 
+ 	* tree-flow.h (var_ann_d): Add "current_def" field.
+ 	(register_new_def): Lose last argument (currdefs table).
+ 	* tree-into-ssa.c (currdefs): Remove.
+ 	(rewrite_into_ssa): Initialize current_def field on each variable's
+ 	annotation.  Remove initialization/clearing of currdefs.
+ 	(set_value_for, get_value_for): Kill.
+ 	(rewrite_initialize_block): Update call to register_new_def.
+ 	(rewrite_stmt): Similarly.
+ 	(rewrite_finalize_block): Get/set a _DECL node's current
+ 	definition from its annotation.
+ 	(get_reaching_def): Similarly.
+ 	(register_new_def): Similarly.  Lose last argument.
+ 	* tree-ssa-dom.c (currdefs): Remove.
+ 	(get_value_for, set_value_for): Simplify.
+ 	(tree_ssa_dominator_optimize): Initialize current_def on each
+ 	variable's annotation.  Remove initialization/clearing of currdefs.
+ 	(thread_across_edge): Lose unnecessary argument to register_new_def.
+ 	(record_equivalences_from_phis): Likewise.
+ 	(register_definitions_for_stmt): Likewise.
+ 	(restore_currdefs_to_original_value): Get/set a _DECL node's current
+ 	definition from its annotation.  Lose unnecessary "table" argument.
+ 	(dom_opt_finalize_block): Corresponding changes.
+ 
+ 	* tree-dfa.c (free_df_for_stmt): Release memory back to the GC
+ 	system immediately.
+ 
+ 2004-04-21  Ben Elliston  <bje@au.ibm.com>
+ 
+ 	PR middle-end/14730
+ 	* expr.c (expand_expr_real_1) <SWITCH_EXPR>: Discard out of bounds
+ 	case label values and ranges.  Saturate case range values that
+ 	exceed the minimum or maximum permitted value for the controlling
+ 	expression type to TYPE_MIN_VALUE or TYPE_MAX_VALUE.
+ 
+ 2004-04-20  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-into-ssa.c (register_new_def): Avoid pushing useless
+ 	information onto the block local definition stack.
+ 
+ 	* tree-into-ssa.c (register_new_def): If there is no current
+ 	reaching definition for SSA_NAME_VAR (DEF), then just push
+ 	SSA_NAME_VAR (DEF) onto the stack.
+ 	(rewrite_finalize_block): If we pop a _DECL node from the stack,
+ 	then the _DECL node has no current reaching definition.
+ 	* tree-ssa-dom.c (restore_currdefs_to_original_value): Similarly.
+ 
+ 2004-04-19  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c: Reinstate all changes from 2004-04-12.
+ 	(lookup_avail_expr): Do not access a hash table object after
+ 	it has been freed.
+ 
+ 2004-04-19  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* doc/passes.texi: Add blurb about PRE.
+ 
+ 2004-04-19  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* tree-ssa-phiopt.c (conditional_replacement):
+ 	Catch some more non-gimple.
+ 
+ 2004-04-19  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* predict.c (combine_predictions_for_bb): Fix pasto.
+ 
+ 2004-04-18  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-inline.c (estimate_num_insn_1): Deal properly with
+ 	builtin_constant_p and builtin_expect.
+ 
+ 2004-04-17  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* doc/invoke.texi (tree-ter, tree-lrs): Document options.
+ 
+ 2004-04-17  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* Makefile.in: Set GMPLIBS and GMPINC.
+ 	* configure.ac: Add GMPLIBS and GMPINC.
+ 	* configure: Regenerate.
+ 
+ 2004-04-16  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* common.opt (ftree-lrs): New common option.
+ 	* flags.h (flag_tree_live_range_split): New flag.
+ 	* opts.c (decode_options): Turn on LRS by default.
+ 	(common_handle_option): Set LRS flag to specified value.
+ 	* toplev.c (flag_tree_live_range_split): Initialize.
+ 	(lang_independent_options f_): Add tree-lrs.
+ 	* tree-outof-ssa.c (rewrite_out_of_ssa): Use LRS flag.
+ 	* tree-ssa-copyrename.c (copy_rename_partition_coalesce): Don't coalesce
+ 	variables if one is a hardware register.  Coalesce inlined user vars.
+ 	(rename_ssa_copies): Scan blocks first, then PHI nodes.
+ 
+ 2004-04-15  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* builtins.c (fold_builtin_isascii): Do not return non-gimple
+ 	code when we are in gimple form.
+ 	(fold_builtin_isdigit): Do not return non-gimple
+ 	code when we are in gimple form.
+ 
+ 	* c-simplify.c (gimplify_decl_stmt): Handle TYPE_DECL.
+ 
+ 2004-04-14  Paul Brook  <paul@codesourcery.com>
+ 
+ 	* Makefile.in (GMPLIBS, GMPINC): Don't set.
+ 	* configure.ac: Remove checks for GMP.
+ 	* configure: Regenerate.
+ 
+ 2004-04-13  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* fold-const.c, tree-ssa-ccp.c, tree-ssa-dom.c,
+ 	tree-ssa.c, tree.c: Replace all uses of TREE_UNSIGNED with
+ 	TYPE_UNSIGNED or DECL_UNSIGNED.
+ 
+ 	* c-semantics.c (build_stmt): Don't check type nodes for
+ 	side effects.
+ 
+ 2004-04-13  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c: Revert all changes from 2004-04-12.
+ 
+ 2004-04-12  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (struct expr_hash_elt): Add new field for hash value.
+ 	(initialize_hash_element): New LHS argument.  Callers changed.
+ 	Initialize the hash value field.
+ 	(remove_local_expressions_from_table): Use htab_remove_elt_with_hash.
+ 	(update_rhs_and_lookup_avail_expr): Similary.
+ 	(lookup_avail_expr): Use htab_find_slot_with_hash.  Simplify slightly
+ 	and pass LHS to initialize_hash_element.
+ 	(record_cond): Also use htab_find_slot_with_hash.  Initialize the
+ 	hash table entry with initialize_hash_element.
+ 	(avail_expr_eq): Use the saved hash value rather than calling into
+ 	the hash functions again.
+ 
+ 	* tree-ssa-dom.c (tree_ssa_dominator_optimize): Slightly rearrange
+ 	code to clear tables before each iteration to be clearer.
+ 
+ 	* tree-ssa-dom.c (redirect_edges_and_update_ssa_graph): Use
+ 	DEF_OPS and VDEF_OPS instead of STMT_DEF_OPS and STMT_VDEF_OPS.
+ 
+ 2004-04-12  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* flags.h (flag_tree_loop): Remove.  Update all users.
+ 	* opts.c (common_handle_option) <OPT_ftree_loop_optimize>: Remove.
+ 	* toplev.c (f_options): Remove -ftree-loop-optimize.
+ 	* tree-optimize.c (init_tree_optimization_passes): Don't
+ 	schedule pass_loop.
+ 	* tree-ssa-loop.c (tree_ssa_loop_opt): Remove.
+ 	(gate_loop): Remove.
+ 	* doc/invoke.texi: Remove documentation for -ftree-loop-optimize.
+ 
+ 2004-04-12  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-lang.c (LANG_HOOKS_RTL_EXPAND_STMT): Remove.
+ 	* c-semantics.c (expand_stmt_toplev): Remove.
+ 	* langhooks-def.h (LANG_HOOKS_RTL_EXPAND_INITIALIZER): Remove.
+ 	(LANG_HOOKS_RTL_EXPAND_START): Remove.
+ 	(LANG_HOOKS_RTL_EXPAND_STMT): Remove.
+ 	(LANG_HOOKS_RTL_EXPAND_END): Remove.
+ 	* langhooks.h (struct lang_hooks_for_rtl_expansion): Remove.
+ 	(struct lang_hooks): Update.
+ 	* tree-optimize.c (tree_rest_of_compilation): Don't call
+ 	lang_hooks.rtl_expand.start nor lang_hooks.rtl_expand.end.
+ 	Call expand_expr_stmt_value instead of
+ 	lang_hooks.rtl_expand.stmt.
+ 	* objc/objc-lang.c (LANG_HOOKS_RTL_EXPAND_STMT): Remove.
+ 
+ 
+ 2004-04-12  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-common.c (c_do_switch_warnings): Use EXPR_LOCUS instead
+ 	of STMT_LINENO.
+ 	(c_walk_subtrees): Likewise.
+ 	(c_estimate_num_insns_1): Remove FILE_STMT.
+ 	* c-common.def (FILE_STMT): Remove.
+ 	* c-common.h (FILE_STMT_FILENAME_NODE): Remove.
+ 	(FILE_STMT_FILENAME, STMT_LINENO, STMT_LINENO_FOR_FN_P): Remove.
+ 	(c_common_stmt_codes): Remove FILE_STMT.
+ 	* c-dump.c (dump_stmt): Use EXPR_LOCUS instead of STMT_LINENO.
+ 	* c-parse.in (lineno_stmt, lineno_label): Likewise.
+ 	* c-pretty-print.c (pp_c_statement): Remove FILE_STMT.
+ 	* c-semantics.c (add_stmt): Don't emit FILE_STMT.  Do set
+ 	EXPR_LOCUS if not yet set.
+ 	(finish_stmt_tree): Don't set line for end of function.
+ 	(build_stmt): Set EXPR_LOCUS instead of STMT_LINENO.
+ 	(prep_stmt): Use EXPR_LOCUS instead of STMT_LINENO.
+ 	* c-simplify.c (c_gimplify_stmt): Remove FILE_STMT.
+ 	(gimplify_block): Save and restore entire locus.
+ 	(stmt_expr_last_stmt): Use EXPR_LOCUS instead of STMT_LINENO.
+ 	* doc/c-tree.texi (FILE_STMT, FILE_STMT_FILENAME, STMT_LINENO): Remove.
+ 
+ 2004-04-12  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (true_exprs, false_exprs): Kill.
+ 	(struct expr_hash_elt): New structure for the expression hash table.
+ 	(struct dom_walk_block_data): Kill block local true_exprs and
+ 	false_exprs.
+ 	(get_eq_expr_value): One less local varray argument.  Fix prototype.
+ 	Use record_cond rather than record_cond_is_{true,false}.
+ 	(true_false_expr_hash, true_false_expr_eq): Kill.
+ 	(record_cond_is_true, record_cond_is_false): Collapse into ...
+ 	(record_cond): New function.
+ 	(tree_ssa_dominator_optimize): Kill references to true_exprs and
+ 	false_exprs.  Use "free" as the free function for the avail_exprs
+ 	hash table.
+ 	(dom_opt_initialize_block_local_data): No longer initialize
+ 	block local true/false expressions.
+ 	(initialize_hash_element): New function.
+ 	(remove_local_expressions_from_table): Use initialize_hash_element.
+ 	(update_rhs_and_lookup_avail_expr): Similarly.
+ 	(dom_opt_finalize_block): Record true/false expressions into the
+ 	main avail_expr hash table.  Unwind main hash table appropriately.
+ 	Use record_cond rather than record_cond_is_{true,false}.
+ 	(record_equivalences_from_incoming_edge): Pass block local avail_exprs
+ 	varray instead of block local true/false varrays to get_eq_expr_value.
+ 	(dump_dominator_optimization_stats): Update to reflect that the
+ 	true/false expression hash tables are gone.
+ 	(lookup_avail_expr): Simplify slightly now that we only have one
+ 	expression hash table.
+ 	(avail_expr_hash, avail_expr_eq): Generalize slightly to handle new
+ 	hash table entry structure and having true/false expression information
+ 	in the available expression hash table.
+ 
+ 2004-04-09  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa_dom.c (register_definitions_for_stmt): Accept a statement
+ 	annotation rather than the statement itself.  Callers changed.
+ 	Use [V]DEF_OPS rather than STMT_[V]DEF_OPS.
+ 	* tree-ssa-operands.c (get_stmt_operands): Slightly reorganize to
+ 	avoid unnecessary calls to stmt_ann.
+ 	* tree-ssa-pre.c (expr_phi_insertion): Get the statement's annotation
+ 	and use [V]USE_OPS rather than STMT_[V]USE_OPS.
+ 	(same_e_version_phi_result): Similarly
+ 	(process_left_occs_and_kills): Similarly for [V]DEF_OPS and
+ 	STMT_[V]DEF_OPS.
+ 	* tree-ssa.c (replace_immediate_uses): Similarly.
+ 	(verify_ssa): Similarly.  Also verify that VDEF_OPs uses are dominated
+ 	by their sets.
+ 
+ 	* tree-into-ssa.c (insert_phi_nodes_for): Use passed in worklist
+ 	varray instead of allocated one for every variable we rewrite into
+ 	SSA form.
+ 	(insert_phi_nodes_1): Pass worklist varray from caller to
+ 	insert_phi_nodes_for.
+ 	(insert_phi_nodes): Allocate a worklist for insert_phi_nodes_for
+ 	and pass it to insert_phi_nodes_1.
+ 
+ 2004-04-08  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (nonzero_vars): Turn it into a bitmap.
+ 	(tree_ssa_dominator_optimize): Update initialization, clearing and
+ 	freeing of nonzero_vars.
+ 	(restore_nonzero_vars_to_original_value): New function.
+ 	(dom_opt_finalize_block): Use it.
+ 	(record_var_is_nonzero): Only record the variable into the block
+ 	local nonzero vars array if it did not already have a nonzero property.
+ 	(lookup_avail_expr): Lookup the nonzero property of an SSA_NAME with
+ 	a bitmap test.
+ 
+ 	* fold-const.c (fold): Remove attempt to share code which
+ 	simplifies tests against the highest/lowest value of a
+ 	range between the main folder and the nondestructive folder.
+ 
+ 2004-04-08  Brian Booth  <bbooth@redhat.com>
+ 	    Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-into-ssa.c (invalidate_name_tags): New function.
+ 	Mark aliases of invalidated name tags for renaming.
+ 	(rewrite_into_ssa): Call invalidate_name_tags.
+ 
+ 2004-04-07  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* gimplify.c (gimplify_call_expr): Remove argument POST_P.
+ 	Update all callers.
+ 	Don't use POST_P when gimplifying the call expression.
+ 
+ 2004-04-07  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* doc/tree-ssa.texi: Add documentation for the dominator
+ 	walker.
+ 
+ 2004-04-07  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-outof-ssa.c: Update comments and reformat for legibility.
+ 	* tree-ssa-copyrename.c: Update comments and reformat for legibility.
+ 	* tree-ssa-live.c: Update comments and reformat for legibility.
+ 	* tree-ssa-live.h: Update comments and reformat for legibility.
+ 
+ 2004-04-07  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* gimplify.c (gimplify_call_expr): Don't use POST_P when
+ 	gimplifying CALL_EXPR arguments.
+ 
+ 2004-04-06  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c: Update comments and reformat for legibility.
+ 	(find_vars_r): Remove special casing of MODIFY_EXPR and
+ 	simplify logic.
+ 	(compute_reached_uses, compute_reaching_defs, remove_decl,
+ 	find_decl_location): Remove.
+ 	(discover_nonconstat_array_refs_r,
+ 	discover_nonconstant_array_refs): Move ...
+ 	* tree-outof-ssa.c: ... here.
+ 
+ 2004-04-05  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-simple.c (is_gimple_min_invariant): Disallow &a+i.
+ 	* tree-ssa-ccp.c (maybe_fold_stmt_addition): Rename from
+ 	maybe_fold_stmt_plus.  Handle MINUS_EXPR.
+ 	(fold_stmt_r): Pass MINUS_EXPR to it.
+ 
+ 2004-04-05  Ben Elliston  <bje@au.ibm.com>
+ 
+ 	* Makefile.in (OBJS-common): Remove tree-browser.o.
+ 	(cc1): Depend on @TREEBROWSER@ and include in list of objects.
+ 	* configure.ac: Add --enable-tree-browser option.
+ 	* configure: Rebuild.
+ 
+ 2004-04-05  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* tree-ssa-ccp.c (fold_stmt_r): Fix whitespace formatting.
+ 	(set_rhs): Likewise.
+ 
+ 2004-04-03  Paolo Bonzini  <bonzini@gnu.org>
+ 	    Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-alias-common.c (find_func_aliases): Support
+ 	assigning to BIT_FIELD_REFs.
+ 	* tree-cfg.c (verify_expr): Don't allow assign to
+ 	a register with BIT_FIELD_REF.
+ 	* tree-dfa.c (get_virtual_var): Add consistency check on
+ 	the shape of expected VARs.
+ 	(discover_nonconstant_array_refs_r): Go through BIT_FIELD_REFs.
+ 	* tree-simple.c: Document that BIT_FIELD_REFs are valid lvalues.
+ 	* tree-ssa.c (set_is_used): Go through BIT_FIELD_REFs.
+ 	* tree-ssa-operands.c (get_expr_operands): Mark VA_ARG_EXPR
+ 	nodes as making volatile references.
+ 
+ 2004-04-02  Fariborz Jahanian <fjahanian@apple.com>
+ 
+ 	* c-convert.c (convert): Make convert work when converting
+ 	to compatible types across translation unit.
+ 
+ 2004-04-02  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* Makefile.in (stage2_build): Remove support for
+ 	rebuilding libbanshee.
+ 	* configure.ac: Remove support for rebuilding
+ 	libbanshee.
+ 	* config.gcc (powerpc-*-darwin*): Do not rebuild
+ 	libbanshee.
+ 
+ 2004-04-01  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-ssa-forwprop.c: Add a comment about forward propagation
+ 	of TRUTH_NOT_EXPR.
+ 
+ 2004-04-01  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-optimize.c (tree_rest_of_compilation): Fix typo in
+ 	setting of in_gimple_form.
+ 
+ 2004-04-01  Jeff Law  <law@redhat.com>
+ 
+ 	* fold-const.c (fold_relational_hi_lo): Do not return non-gimple
+ 	code when we are in gimple form.
+ 	* tree-optimize.c (tree_rest_of_compilation): Note when we are in
+ 	gimple form.
+ 	* tree-ssa-ccp.c (ccp_fold): Tighten tests on return value from
+ 	nondestructive_fold_{unary,binary}_to_constant.
+ 	* tree.h (in_gimple_form): Declare.
+ 
+ 	* tree-ssa.c (ssa_remove_edge): Correct looping structure.
+ 	(ssa_redirect_edge): Similarly
+ 
+ 2004-03-30  Brian Booth  <bbooth@redhat.com>
+ 
+ 	* tree-pretty-print.c (dump_vops): Add flags argument and
+ 	propagate it to dump_generic_node calls.
+ 	(dump_generic_node): Update dump_vops call.
+ 
+ 2004-03-29  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* configure.ac: Emit confirmation messages for libbanshee.
+ 	* configure: Regenerate.
+ 
+ 2004-03-29  Jan Hubicka  <jh@suse.cz>
+ 
+ 	PR 14756
+ 	* cgraphunit.c (cgraph_decide_inlining): Rewrite handling of
+ 	always_inline functions.
+ 
+ 2004-03-28  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-inline.c (expand_call_inline):  Remove fixme introduced by
+ 	nested function patch.
+ 
+ 2004-03-26  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-operands.c (get_stmt_operands): Remove always-true
+ 	predicate.
+ 
+ 	* tree-ssa-alias.c (maybe_create_global_var): Create
+ 	.GLOBAL_VAR if there are no call-clobbered variables.
+ 	* tree-ssa-operands.c (get_stmt_operands): Add call-clobbering
+ 	VDEFs for asm ("":::"memory") if there are call-clobbered
+ 	variables or if .GLOBAL_VAR has been created.
+ 
+ 
+ 2004-03-26  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* passes.c (rest_of_compilation): Re-enable .01.rtl
+ 	dumps.
+ 
+ 2004-03-25  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-pretty-print.c (dump_generic_node) <WITH_RECORD_EXPR>: Remove.
+ 	* tree-inline.c (estimate_num_insns_1) <WITH_RECORD_EXPR>: Remove.
+ 	* fold-const.c (fold_relational_hi_lo): Change type of argument
+ 	'type_p' to const tree and rename it to 'type'.  Update
+ 	all callers.
+ 
+ 2004-03-25  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (C_AND_OBJC_OBJS): Remove c-call-graph.o
+ 	(c-call-graph.o): Remove.
+ 	* c-call-graph.c: Remove.
+ 	* c-tree.h (print_call_graph): Remove.
+ 	(debug_call_graph): Remove.
+ 	* tree-cfg.c: Update/add comments everywhere.
+ 	(pre_insert_on_edge): Rename from bsi_insert_on_edge_immediate.
+ 	* tree-flow.h (build_tree_cfg): Make static.
+ 	(tree_cfg2dot): Likewise.
+ 	(verify_stmt): Likewise.
+ 	* tree-ssa-pre.c (insert_one_operand): Call pre_insert_on_edge.
+ 
+ 2004-03-25  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-alias.c (struct alias_info): Change type of field
+ 	'num_references' to varray_type.  Update all users.
+ 
+ 2004-03-24  Jeff Law  <law@redhat.com>
+ 
+ 	* c-mudflap (mflang_flush_calls): Use push_scope/pop_scope instead
+ 	of pushlevel and poplevel.
+ 
+ 2004-03-23  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR middle-end/14694
+ 	* c-common.c (handle_alias_attribute): Mark aliased variables
+ 	to be TREE_STATIC.
+ 
+ 2004-03-23  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-into-ssa.c (register_new_def): Lose unnecessary VAR argument,
+ 	instead derive VAR from DEF argument.
+ 	(rewrite_initialize_block, rewrite_stmt, rewrite_operand): Corresponding
+ 	changes.
+ 	* tree-ssa-dom.c (register_definitions_for_stmt): Corresponding changes.
+ 	(record_equivalences_from_phis): Likewise.
+ 	(restore_currdefs_to_original_value): New, extracted from ...
+ 	(dom_opt_finalize_block): Use restore_currdefs_to_original_value.
+ 	Restore currdefs after threading across a true edge.
+ 	(thread_across_edge): Register new defintions when we walk through
+ 	a PHI node or real statement.
+ 	* tree-flow.h (register_new_def): Updated.
+ 
+ 2004-03-23  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-ssa-dce.c (find_obviously_necessary_stmts,
+ 	perform_tree_ssa_dce): Do not remove loops.
+ 
+ 2004-03-19  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	PR optimization/14643
+ 	* tree-ssa-alias.c (group_aliases_into): Don't add a variable
+ 	to its own may-alias set.
+ 	(create_alias_map_for): New.
+ 	(setup_pointers_and_addressables): Call it.
+ 	Fix allocation of AI->ADDRESSABLE_VARS and AI->POINTERS.
+ 	If there are no addressable variables and more than one
+ 	dereferenced pointers, add type tags to the ADDRESSABLE_VARS
+ 	array.
+ 	(get_tmt_for): Add comment about using alias set equality when
+ 	checking for existing tags.
+ 
+ 2004-03-19  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* fold-const.c (fold_relational_const): Remove dead code.
+ 
+ 2004-03-19  Dale Johannesen  <dalej@apple.com>
+ 
+ 	* tree-ssa-dse.c (dse_optimize_stmt):  Redirect uses feeding into
+ 	a deleted store correctly.
+ 
+ 2004-03-19  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (simplify_rhs_and_lookup_avail_expr): Fix typo.
+ 	Eliminate unnecessary test of VAL.
+ 
+ 	* tree-dfa.c (find_hidden_use_vars): Also look inside the
+ 	PENDING_SIZES list for hidden uses.
+ 	* tree-optimize.c (tree_rest_of_compilation): Expand used variables
+ 	before setting up parameters.
+ 	* tree-ssa-copyrename.c (rename_ssa_copies): Do nothing for copies
+ 	where the LHS has a hidden use.
+ 
+ 2004-03-18  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (TREE_FLOW_H): Reformat.
+ 	(OBJS-common): Add tree-into-ssa.o and tree-outof-ssa.o.
+ 	(tree-ssa.o): Remove dependency on domwalk.h and tree-ssa-live.h
+ 	(tree-into-ssa.o): New.
+ 	(tree-outof-ssa.o): New.
+ 	(GTFILES): Remove tree-ssa.c.
+ 	(gt-tree-ssa.h): Remove.
+ 	* tree-into-ssa.c: New file.
+ 	Move all the functions used to rename into SSA from tree-ssa.c.
+ 	Update/add comments.
+ 	Remove unused variables and structures.
+ 	Don't use GGC for memory allocation.
+ 	* tree-outof-ssa.c: New file.
+ 	Move all the functions used to rename out of SSA from
+ 	tree-ssa.c.
+ 	Update/add comments.
+ 	* tree-ssa-alias.c (compute_points_to_and_addr_escape): Add
+ 	bibliographic reference.
+ 
+ 2004-03-18  Jeff Law  <law@redhat.com>
+ 
+ 	* Makefile.in (tree-tailcall.o): Depend on langhooks.h.
+ 	* tree-tailcall.c: Include langhooks.h.
+ 	(find_tail_calls): Use types_compatible_p langhook instead of
+ 	equality test of TYPE_MAIN_VARIANT.
+ 
+ 	* tree-nested.c (get_chain_decl): Mark the chain decl with
+ 	TREE_NO_WARNING.
+ 
+ 2004-03-18  Devang Patel  <dpatel@apple.com>
+ 
+ 	* tree-ssa-live.c (new_tree_live_info): Set num_blocks to
+ 	last_basic_block instead of n_basic_blocks.
+ 	(calculate_live_on_entry): Use last_basic_block instead of
+ 	n_basic_blocks.
+ 	(calculate_live_on_exit): Same.
+ 
+ 2004-03-17  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-tailcall.c (find_tail_calls): Tighten test for tail recursion.
+ 
+ 2004-03-17  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	PR optimization/14511
+ 	* tree-ssa-alias.c (compute_flow_insensitive_aliasing): Do not
+ 	ignore read-only variables.
+ 	(may_alias_p): Fix pointer-to-var calculation when 'var' is an
+ 	array.
+ 
+ 2004-03-17  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-ssa.c (rewrite_into_ssa, compute_global_livein): Fix.
+ 
+ 2004-03-17  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* builtins.c (expand_builtin_constant_p,
+ 	purge_builtin_constant_p): Remove.
+ 	(expand_builtin): Expand __builtin_constant_p to zero.
+ 	* function.c (struct function): Remove calls_constant_p.
+ 	(current_function_calls_constant_p): Remove.
+ 	* passes.c (rest_of_handle_gcse): Do not run
+ 	purge_builtin_constant_p.
+ 	* rtl.def (CONSTANT_P_RTX): Die die die.
+ 
+ 	* cse.c (fold_rtx): Do not handle CONSTANT_P_RTX.
+ 	* expr.c (emit_move_insn): Likewise.
+ 	* gcse.c (want_to_gcse_p, gcse_constant_p): Likewise.
+ 	* genrecog.c (validate_pattern): Likewise.
+ 	* recog.c (immediate_operand): Likewise.
+ 	* rtl.h (CONSTANT_P): Likewise.
+ 	* simplify-rtx.c (simplify_rtx): Likewise.
+ 	* config/alpha/alpha.c (input_operand): Likewise.
+ 	* config/arm/arm.c (THUMB_LEGITIMATE_CONSTANT_P): Likewise.
+ 	* config/c4x/c4x.c (const_operand): Likewise.
+ 	* config/cris/cris.c (cris_gotless_symbol,
+ 	cris_got_symbol): Likewise.
+ 	* config/frv/frv.h (LEGITIMATE_PIC_OPERAND_P): Likewise.
+ 	* config/ia64/ia64.c (gr_reg_or_5bit_operand,
+ 	gr_reg_or_6bit_operand, gr_reg_or_8bit_operand,
+ 	gr_reg_or_8bit_adjusted_operand,
+ 	gr_reg_or_8bit_and_adjusted_operand,
+ 	gr_reg_or_14bit_operand, gr_reg_or_22bit_operand,
+ 	shift_count_operand, shift_32bit_count_operand): Likewise.
+ 	* config/m32r/m32r.c (move_src_operand): Likewise.
+ 	* config/mips/mips.c (mips_const_insns): Likewise.
+ 	* config/mmix/mmix.c (mmix_constant_address_p): Likewise.
+ 	* config/pa/pa.c (move_src_operand): Likewise.
+ 	* config/rs6000/rs6000.c (input_operand): Likewise.
+ 	* config/sparc/sparc.c (input_operand): Likewise.
+ 	* config/v850/v850.c (movsi_source_operand): Likewise.
+ 	* config/xtensa/xtensa.c (move_operand,
+ 	xtensa_emit_move_sequence): Likewise.
+ 	* config/ia64/ia64.h (PREDICATE_CODES): Do not mention CONSTANT_P_RTX.
+ 	* config/pa/pa.h (PREDICATE_CODES): Likewise.
+ 
+ 2004-03-16  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dump.c (struct dump_option_value_info): Add TDF_UID.
+ 	* tree.h (TDF_UID): Define.
+ 	* doc/invoke.texi: Document -ftree-dump-...-uid.
+ 	* tree-pretty-print.c (debug_generic_expr): Add TDF_UID.
+ 	(debug_generic_stmt): Likewise.
+ 	(dump_decl_name): New function.
+ 	(dump_generic_node): Call it.
+ 	(print_declaration): Add new argument 'flags'.  Update all users.
+ 	(print_struct_decl): Likewise.
+ 	* tree-alias-ander.c, tree-cfg.c, tree-dfa.c, tree-mudflap.c,
+ 	tree-nrv.c, tree-sra.c, tree-ssa-alias.c, tree-ssa-ccp.c,
+ 	tree-ssa-copy.c, tree-ssa-dom.c, tree-ssa-dse.c,
+ 	tree-ssa-forwprop.c, tree-ssa-operands.c, tree-ssa-pre.c,
+ 	tree-ssa.c, tree-tail-call.c: Call print_generic_* with
+ 	'dump_flags'.
+ 
+ 2004-03-16  Dale Johannesen  <dalej@apple.com>
+ 
+ 	* Makefile.in (tree-ssa-phiopt.o): add langhooks.h dependency.
+ 	(tree-nrv.o): Ditto.
+ 	(tree-ssa-copy.o): Ditto.
+ 	(tree-ssa-dom.o): Ditto.
+ 	(tree-ssa-ccp.o): Ditto.
+ 	* c-common.c: Add #include hashtab.h.
+ 	(c_type_hash): New.
+ 	(c_common_get_alias_set): Handle multiple type nodes referring
+ 	to "the same" type, currently for C90 only.
+ 	* c-decl.c (current_file_decl): Move to toplev.c.
+ 	* c-lang.c (LANG_HOOKS_TYPES_COMPATIBLE_P): Define to
+ 	c_types_compatible_p.
+ 	(c_types_compatible_p): New.
+ 	* c-tree.h (c_types_compatible_p): New declaration.
+ 	* c-typeck.c (tagged_types_tu_compatible_p): Allow for
+ 	compiler-generated TYPE_DECLs without a DECL_ORIGINAL_TYPE.
+ 	* gimplify.c (canonicalize_addr_expr): Use types_compatible_p langhook.
+ 	(cpt_same_type): Ditto.
+ 	* langhooks-def.h (lhd_types_compatible_p): New declaration.
+ 	LANG_HOOKS_TYPES_COMPATIBLE_P: New.
+ 	* langhooks.c (lhd_types_compatible_p): New.
+ 	* langhooks.h (struct lang_hooks): Add types_compatible_p.
+ 	* stmt.c (tail_recursion_args): Use types_compatible_p langhook.
+ 	* toplev.c (current_file_decl): New, moved from c-decl.c.
+ 	* tree-nrv.c: Include langhooks.h.
+ 	(tree_nrv): Use types_compatible_p langhook.
+ 	* tree-ssa-ccp.c: Include langhooks.h.
+ 	(maybe_fold_offset_to_array_ref): Use types_compatible_p langhook.
+ 	(maybe_fold_offset_to_component_ref): Ditto (2 places).
+ 	(fold_stmt_r): Make sure rhs of COMPONENT_REF is in lhs type.
+ 	* tree-ssa-copy.c: Include langhooks.h.
+ 	(cprop_into_stmt): Use types_compatible_p langhook.
+ 	* tree-ssa-dom.c: Include langhooks.h.
+ 	(avail_expr_p): Use types_compatible_p langhook.
+ 	* tree-ssa-phiopt.c: Include langhooks.h.
+ 	(conditional_replacement): Use types_compatible_p langhook.
+ 	* tree-ssa.c (tree_ssa_useless_type_conversion_1): Use
+ 	types_compatible_p langhook.
+ 	* tree.h (current_file_decl): New declaration.
+ 
+ 2004-03-16  Dale Johannesen  <dalej@apple.com>
+ 
+ 	PR optimization/14498
+ 	* gimplify.c (copy_if_shared_r): Mark VA_ARGS_EXPRs as volatile.
+ 	(mark_decls_volatile_r): Moved higher in file (unchanged).
+ 
+ 2004-03-16  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	PR optimization/14562
+ 	* tree-ssa-pre.c (generate_expr_as_of_bb): Don't use names_match_p.
+ 	(generate_vops_as_of_bb): Ditto.
+ 
+ 2004-03-12  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	PR optimization/14553
+ 	* tree-ssa.c (replace_immediate_uses): Call propagate_value to
+ 	update operands.
+ 
+ 2004-03-12  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-alias-common.c (create_alias_vars): Add #if
+ 	HAVE_BANSHEE around test for PTA_ANDERSEN.
+ 
+ 2004-03-11  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (struct walk_state): Remove fields 'is_store' and
+ 	'is_indirect_ref'.  Update all users.
+ 	* tree-flow.h (struct var_ann_d): Remove fields 'is_stored',
+ 	'is_dereferenced_store' and 'is_dereferenced_load'.  Update
+ 	all users.
+ 	* tree-simple.c (get_base_address): Handle BIT_FIELD_REF.
+ 	* tree-ssa-alias.c (struct alias_info): Add fields
+ 	'written_vars', 'dereferenced_ptrs_store' and
+ 	'dereferenced_ptrs_load'.
+ 	(init_alias_info): Initialize them.
+ 	(delete_alias_info): Free them.
+ 	(find_ptr_dereference): New.
+ 	(ptr_is_dereferenced_by): Call it.
+ 	Add new argument 'is_store'.  Set to true if the
+ 	expression is an indirect store operation.
+ 	(compute_points_to_and_addr_escape): If the statement
+ 	makes a store, load or write operation, update the
+ 	corresponding bitmap.
+ 	(compute_flow_insensitive_aliasing): Test the
+ 	'written_vars' bitmap to determine if alias sets should
+ 	be computed.
+ 	(setup_pointers_and_addressables): Always assume that
+ 	volatile pointers and hidden pointers have been used in a
+ 	memory store operation.
+ 	* tree-ssa-operands.c (add_stmt_operand): Do add an
+ 	operand for may-aliased variables before computing
+ 	aliases.
+ 
+ 2004-03-11  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-optimize.c (init_tree_optimization_passes): Move
+ 	pass_tail_recursion and pass_ch after pass_may_alias.
+ 	* tree-ssa-loop.c (mark_defs_for_rewrite): Mark type tags
+ 	for rewriting.
+ 	* tree-ssa.c (mark_def_sites): Process the operand of a
+ 	VDEF before the result.
+ 
+ 2004-03-11  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR 14204
+ 	* tree-ssa.c (warn_uninit): Don't warn for hard register variables.
+ 
+ 2004-03-10  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-simple.c (get_base_var, get_base_decl): Remove.
+ 	* tree-simple.h: Likewise.
+ 	* tree-dfa.c (discover_nonconstant_array_refs_r): Use get_base_address.
+ 	* tree-ssa-alias.c (ptr_is_dereferenced_by): Likewise.
+ 	(add_pointed_to_var, is_escape_site): Likewise.
+ 	* tree-ssa-ccp.c (get_default_value): Expect only SSA_NAME and DECLs.
+ 	* tree-ssa-operands.c (add_stmt_operand): Likewise.
+ 	(note_addressable): Use get_base_address.
+ 	* tree-ssa-dce.c (need_to_preserve_store): Expect only SSA_NAME.
+ 	* tree-ssa.c (set_is_used): Inline get_base_decl.
+ 
+ 2004-03-10  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-nested.c (convert_nonlocal_reference): Clear TREE_INVARIANT
+ 	on modified ADDR_EXPRs.
+ 
+ 2004-03-10  Andrew Pinski  <apinski@apple.com
+ 
+ 	PR c/14475
+ 	* c-decl.c (check_bitfield_type_and_width): Check for null
+ 	lang_type_specific when check the precision of an enum.
+ 
+ 2004-03-09  Andrew Pinski  <apinski@apple.com>
+ 
+ 	* Makefile.in (tree-ssa-forwprop.o): Fix the dependences.
+ 
+ 2004-03-09  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-flow-inline.h (may_propagate_copy): Do not allow propagation of
+ 	a constant for a virtual operand.
+ 
+ 2004-03-08  Richard Henderson <rth@redhat.com>
+ 
+ 	* calls.c (initialize_argument_information): Add
+ 	parameter may_tail_call.  Set to false for invisible
+ 	pass-by-reference arguments that require stack
+ 	allocation.
+ 	Update all users.
+ 
+ 2004-03-07  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c: (get_eq_expr_value): Fix typo when comparing a
+ 	boolean against a constant.
+ 	* tree-ssa-forwprop.c (record_single_argument_cond_exprs): Do not
+ 	record the same SSA_NAME more than once.  Only record the SSA_NAME
+ 	tested, not the COND_EXPR.
+ 	(substitute_single_use_vars): Substitute booleans which are
+ 	set from a TRUTH_NOT_EXPR even if they have more than one use site.
+ 
+ 2004-03-05  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dce.c (remove_dead_stmt): Clear PENDING_STMT after
+ 	redirect_edge_and_branch call.
+ 
+ 	* tree-ssa-forwprop.c (record_single_argument_cond_exprs): Also
+ 	record COND_EXPRs with single use vars defined by SSA_NAME + CONST
+ 	expressions.
+ 	(substitute_single_use_vars): Corresponding changes to rewrite
+ 	COND_EXPRs using single use vars defined by SSA_NAME + CONST
+ 	expressions.
+ 
+ 2004-03-05  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* config/s390/s390.c (s390_expand_movstr): Do not use
+ 	expand_exit_loop_top_cond, manually copy loop header.
+ 	(s390_expand_clrstr): Likewise.
+ 	(s390_expand_cmpmem): Likewise.
+ 
+ 2004-03-04  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-alias.c (compute_flow_sensitive_aliasing): If
+ 	a name tag has been marked call-clobbered, also mark the
+ 	corresponding type tag.
+ 
+ 2004-03-04  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-ssa-loop-live.c (coalesce_tpa_members): Update the root
+ 	variable of the partition.
+ 
+ 2004-03-04  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dce.c (remove_dead_stmt): Redirect an existing edge
+ 	rather than deleting the old ones and creating a new one when
+ 	removing a dead conditional.
+ 
+ 	* fold-const.c (fold): When rebuilding the expression after a
+ 	call to fold_relational_hi_lo, make sure to convert the type of
+ 	the second argument to the type of the first.
+ 
+ 2004-03-04  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* cgraphunit.c (cgraph_optimize): Do not do memory release
+ 	check if there have been errors.
+ 
+ 2004-03-03  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-phiopt.c (conditional_replacement): Clear EDGE_TRUE_VALUE
+ 	and EDGE_FALSE_VALUE on the remaining edge after eliminating a PHI.
+ 
+ 2004-03-03  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-ssa-copyrename.c (gate_copyrename): Really check it in.
+ 	* tree-ssa.c (create_temp): Use DECL_ARTIFICIAL from original decl.
+ 
+ 2004-03-02  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-tailcall.c (struct tailcall): Remove return_block and return_bsi
+ 	fields, add m and a fields.
+ 	(m_acc, a_acc): New.
+ 	(find_tail_calls): Find tail calls on whose results simple operations
+ 	are performed.
+ 	(independent_on_stmt_p, process_assignment,
+ 	propagate_through_phis, adjust_accumulator_values,
+ 	adjust_return_value): New.
+ 	(eliminate_tail_call): Update the accumulators if needed.
+ 	(optimize_tail_call): Do not create phis.
+ 	(tree_optimize_tail_calls): Create phis and accumulators as needed.
+ 	Adjust return values.
+ 
+ 2004-03-02  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-operands.c (get_expr_operands): Mark CALL_EXPRs
+ 	with has_volatile_ops if aliases haven't been computed yet.
+ 	(add_stmt_operand): Use 'true' instead of '1'.
+ 
+ 2004-03-02  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	PR optimization/14266
+ 	* tree-ssa-alias.c (create_global_var): Mark GLOBAL_VAR for
+ 	renaming.
+ 
+ 2004-03-01  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree.c (associative_tree_code): Remove MINUS_EXPR, LSHIFT_EXPR,
+ 	RSHIFT_EXPR.
+ 	* tree-ssa-dom.c (simplify_rhs_and_lookup_avail_expr): Use
+ 	is_gimple_min_invariant and is_gimple_var.  Handle minus_expr
+ 	specially.
+ 
+ 2004-03-01  Richard Henderson  <rth@redhat.com>
+ 
+ 	* cfgbuild.c (rtl_make_eh_edge): Rename from make_eh_edge.
+ 	* basic-block.h, except.c: Update decl and uses.
+ 
+ 2004-03-01  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* doc/passes.texi: Add information about mudflap.
+ 
+ 2004-03-01  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR middle-end/13066
+ 	* fold-const (fold): Call fold_convert when building
+ 	a TRUTH_*_EXPR tree.
+ 
+ 2004-03-01  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* common.opt : Add tree-copyrename option. Remove duplicate tree-sra.
+ 	* flags.h (flag_tree_copyrename): Declare.
+ 	* opts.c (decode_options): Turn copyrename on by default at -O.
+ 	(common_handle_option): Handle -ftree-copyrename.
+ 	* toplev.c (flag_tree_copyrename): Declare.
+ 	* tree-ssa-copyrename.c (gate_copyrename): New.  Check flag.
+ 	(pass_rename_ssa_copies): Initialize with gated routine.
+ 	(lang_independent_options f_): Add tree-copyrename.
+ 	* doc/invoke.texi: Add -fdump-tree-copyrename and  -ftree-copyrename.
+ 	* doc/passes.texi: Add blurb for copy renaming.
+ 
+ 2004-03-01  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (true_false_expr_hash): Update comments slightly.
+ 	(true_false_expr_eq): Update comments slightly.  Avoid using
+ 	operand_equal_p, instead check the code and operands directly.
+ 
+ 2004-03-01  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* Makefile.in (tree-ssa-copyrename.o): New object.
+ 	* timevar.def (TV_TREE_COPY_RENAME): New time variable.
+ 	* tree-optimize.c (init_tree_optimization_passes): Add copy rename
+ 	pass.
+ 	* tree-pass.h (pass_rename_ssa_copies): New pass structure.
+ 	* tree-sra.c (lookup_scalar): Copy DECL_ARITIFICIAL flag from base.
+ 	* tree-ssa-copyrename.c : New file.
+ 	(copy_rename_partition_coalesce): Coalesce partitions for renaming.
+ 	(rename_ssa_copies): Find renamable copies.
+ 	(pass_rename_ssa_copies): Initialize.
+ 	* tree-ssa-live.c (register_ssa_partition): Move to tree-ssa-live.h.
+ 	* tree-ssa-live.h (register_ssa_partition): Moved from tree-ssa-live.c.
+ 
+ 2004-02-29  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* doloop.c (doloop_optimize): Increment n_iterations if loop->top
+ 	present.
+ 
+ 2004-02-29  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* gimple-low.c (pass_remove_useless_vars): Add TODO_dump_func.
+ 
+ 2004-02-27  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR middle-end/14310
+ 	* explow.c (emit_stack_save): Remove savearea mode check.
+ 
+ 2004-02-27  Richard Henderson  <rth@redhat.com>
+ 
+ 	* builtins.c (simplify_builtin_strcmp): Don't export.  Remove
+ 	length parameters.  Remove conversion to memcmp.
+ 	(simplify_builtin_strncmp): Likewise.
+ 	* expr.h: Don't declare them.
+ 	* tree-ssa-ccp.c (ccp_fold_builtin): Don't call them.
+ 
+ 2004-02-27  Dale Johannesen  <dalej@apple.com>
+ 
+ 	* tree-cfg.c (cleanup_control_expr_graph): Prevent edge
+ 	probability from overflowing due to roundoff errors.
+ 
+ 2004-02-27  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-cfg.c (verify_expr): Do not walk down into types.
+ 	Expand checking to verify that unary/binary operators have
+ 	gimple operands.
+ 	* tree-ssa-ccp.c (ccp_fold_builtin, case BUILT_IN_STRLEN): Do not
+ 	create non-gimple code.  Similarly for BUILTIN_IN_STRCPY and
+ 	BUILT_IN_STRNCPY.
+ 	* tree-ssa-phiopt.c (conditional_replacement): Do not create
+ 	non-gimple code.
+ 	* tree-ssa-dom.c (simplify_rhs_and_lookup_avail_expr): Likewise.
+ 
+ 	* tree-simple.c (is_gimple_min_invariant): Subtraction of a
+ 	constant from a constant pointer is a gimple invariant as well.
+ 	* tree-ssa-operands.c (get_expr_operands): Handle subtraction
+ 	of a constant from a constant pointer too.
+ 
+ 	* fold-const.c (fold): Tighten test for optimizing an equality
+ 	comparison of the address of two variables.
+ 
+ 	* tree-inline.c (setup_one_parameter): Improve test for when we
+ 	need to gimplify the initialization statements.
+ 
+ 2004-02-27  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	PR optimization/14312
+ 	* tree-pretty-print.c (dump_generic_node): Mark tail calls.
+ 	* tree-ssa-alias.c (compute_may_aliases): Restore call to
+ 	dump_referenced_vars.
+ 	(compute_points_to_and_addr_escape): If the address of a
+ 	variable V is stored into a non-pointer variable, mark V as
+ 	call-clobbered.
+ 	* tree-tailcall.c (suitable_for_tail_opt_p): Check for
+ 	call-clobbered instead of TREE_ADDRESSABLE.
+ 	Ignore memory tags.
+ 	(optimize_tail_call): Add newline to dump output.
+ 
+ 2004-02-27  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	PR optimization/13347
+ 	* tree-sra.c (scalarize_structure_assignment): Use STRIP_NOPS
+ 	instead of STRIP_USELESS_TYPE_CONVERSION to remove type casts
+ 	from RHS of the assignment.
+ 
+ 	* tree-ssa.c (tree_ssa_useless_type_conversion_1): Reformat
+ 	and rephrase comments.
+ 	* tree.h (STRIP_USELESS_TYPE_CONVERSION): Reformat comment.
+ 
+ 2004-02-26  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-cfg.c (tree_redirect_edge_and_branch_1): Allow to redirect
+ 	RETURN_EXPR branches.
+ 
+ 2004-02-26  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-nrv.c (tree_nrv): Only perform NRV optimization when the
+ 	return value lives in memory.
+ 
+ 	* tree-ssa-dom.c (simplify_rhs_and_lookup_avail_expr): If an
+ 	operand is unsigned, then we can eliminate more ABS expressions
+ 	and turned div/mod expression into shift/and expressions.
+ 
+ 	* fold-const.c (fold): An equality comparison of the address of
+ 	two non-weak variables has known compile-time result.
+ 
+ 2004-02-26  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* tree-ssa-phiopt.c (conditional_replacement):
+ 	s/tree_dump_flags/dump_flags/.
+ 
+ 	* tree-ssa-phiopt.c (tree_ssa_phiopt): Split into ...
+ 	(conditional_replacement): Here.
+ 
+ 2004-02-26  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-ssa.c (find_replaceable_in_bb): Don't repalce expressions in
+ 	volatile statements.
+ 
+ 2004-02-25  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR opt/14288
+ 	* gimplify.c (gimple_push_cleanup): Add VAR argument.  Set
+ 	TREE_NO_WARNING if in a conditional context.
+ 	(gimplify_target_expr): Pass new argument.
+ 	* tree-sra.c (lookup_scalar): Copy TREE_NO_WARNING to replacement.
+ 
+ 2004-02-24  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* doc/invoke.texi: Replace -fdump-tree-all-ssa with
+ 	-fdump-tree-all.
+ 
+ 2004-02-24  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	PR target/14285
+ 	* config/arm/arm.c (arm_compute_func_type): Replace
+ 	"current_function_needs_context" with "cfun->static_chain_decl
+ 	!= NULL".
+ 	(arm_compute_initial_elimination_offset): Likewise.
+ 	* config/h8300/h8300.c (h8300_emit_stack_adjustment):
+ 	Likewise.
+ 	* config/sh/sh.c (output_stack_adjust): Likewise.
+ 	(sh5_schedule_saves): Likewise.
+ 	* config/xtensa/xtensa.c (compute_frame_size): Likewise.
+ 
+ 2004-02-24  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-simplify.c (c_genericize): s/dump_flags/local_dump_flags/.
+ 	* predict.c, tree-alias-ander.c, tree-cfg.c, tree-nrv.c,
+ 	tree-optimize.c, tree-pass.h, tree-sra.c, tree-ssa-alias.c,
+ 	tree-ssa-ccp.c, tree-ssa-copy.c, tree-ssa-dce.c, tree-ssa-dom.c,
+ 	tree-ssa-dse.c, tree-ssa-forwprop.c, tree-ssa-loop.c,
+ 	tree-ssa-phiopt.c, tree-ssa-pre.c, tree-ssa.c, tree-tailcall.c:
+ 	s/tree_dump_flags/dump_flags/.
+ 
+ 2004-02-24  Richard Henderson  <rth@redhat.com>
+ 
+ 	* predict.c, tree-alias-ander.c, tree-cfg.c, tree-mudflap.c,
+ 	tree-nrv.c, tree-optimize.c, tree-pass.h, tree-profile.c, tree-sra.c,
+ 	tree-ssa-alias.c, tree-ssa-ccp.c, tree-ssa-copy.c, tree-ssa-dce.c,
+ 	tree-ssa-dom.c, tree-ssa-dse.c, tree-ssa-forwprop.c, tree-ssa-loop.c,
+ 	tree-ssa-operands.c, tree-ssa-phiopt.c, tree-ssa-pre.c, tree-ssa.c,
+ 	tree-tailcall.c: s/tree_dump_file/dump_file/g.
+ 
+ 2004-02-24  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* doc/tree-ssa.texi: Fix formatting mark ups.
+ 
+ 2004-02-24  Jeff Law  <law@redhat.com>
+ 
+ 	* gimple-low.c (remove_useless_vars): Now static.
+ 	(pass_remove_useless_vars): New.
+ 	* tree-flow.h (remove_useless_vars): Remove prototype.
+ 	* tree-nrv.c (struct nrv_data): Remove visited hashtable.
+ 	(finalize_nrv_r): Do not descend into types. No need to update
+ 	the visited hashtable.
+ 	(tree_nrv): No need to allocate/free the visited hashtable.
+ 	Clear the used flag on the variable's annotation.
+ 	* tree-optimize.c (init_tree_optimizatio_passes): Link in
+ 	pass_remove_useless_vars.
+ 	* tree-pass.h (pass_remove_useless_vars): Declare.
+ 	* tree-ssa.c (rewrite_out_of_ssa): Do not remove useless vars here.
+ 
+ 	* Makefile.in (OBJS-common): Add tree-nrv.o.
+ 	(tree-nrv.o): Add dependencies.
+ 	* timevar.def (TV_TREE_NRV): New timevar.
+ 	* tree-nrv.c: New file implementing NRV on generic trees.
+ 	* tree-optimize.c (init_tree_optimization_passes): Link in
+ 	tree_nrv optimization pass.
+ 	* tree-pass.h (tree_nrv): Declare.
+ 	* doc/invoke.texi: Add -fdump-tree-nrv documentation.
+ 
+ 2004-02-24  Sebastian Pop  <sebastian.pop@cri.ensmp.fr>
+ 
+ 	* tree-flow.h (walk_use_def_chains_fn): Return a boolean.
+ 	True for stopping the use-def walk, false otherwise.
+ 	* tree-ssa-alias.c (collect_points_to_info_r): Same.
+ 	Always return false, and never stopping the def-use walk as before.
+ 	* tree-ssa.c (walk_use_def_chains_1): Stop when the result of the
+ 	callback function is true.
+ 	* doc/tree-ssa.texi: Document the behavior of the callback
+ 	function for walk_use_def_chains.
+ 
+ 2004-02-24  Richard Henderson  <rth@redhat.com>
+ 
+ 	* doc/passes.texi: Rewrite.
+ 
+ 2004-02-23  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (TEXI_GCCINT_FILES): Add cfg.texi and tree-ssa.texi
+ 	* tree-ssa-alias.c (compute_may_aliases): Update documentation.
+ 	* doc/gccint.texi: Add node for Tree SSA documentation.
+ 	Include tree-ssa.texi.
+ 	* doc/tree-ssa.texi: New file.
+ 
+ 2004-02-23  Dale Johannesen <dalej@apple.com>
+ 
+ 	* config/rs6000/rs6000.md:  Roll in changes from mainline:
+ 	(movdf_softfloat64):  Add POWER form of nop.
+ 	(movsf_hardfloat): Ditto, and accept CTR-to-CTR copy.
+ 	(movdf_hardfloat64):  Ditto.
+ 
+ 2004-02-23  Jeff Law  <law@redhat.com>
+ 
+ 	* ggc-page.c (struct page_entry): New field PREV.
+ 	(ggc_alloc): Update PREV field appropriately.
+ 	(sweep_pages): Likewise.
+ 	(ggc_free): Likewise.  Use PREV field rather than loop to
+ 	improve ggc_free performance.
+ 
+ 	* Makefile.in (OBJC-common): Add tree-ssa-copy.o.
+ 	(tree-ssa-copy.o): Add dependencies.
+ 	* tree-flow.h (propagate_value, replace_exp): Prototype.
+ 	(cprop_into_stmt, cprop_into_successor_phis): Likewise.
+ 	* tree-ssa-copy.c: New file, most functions copied from tree-ssa-dom.c
+ 	(cprop_into_stmt): Handle pointer & reference types better.
+ 	* tree-ssa-dom.c (opt_stats_d): Kill uninteresting stats.
+ 	(dump_dominator_optimization_stats): Corresponding changes.
+ 	(cprop_into_stmt): Moved into tree-ssa-copy.c.
+ 	(propagate_value): Likewise.
+ 	(cprop_into_phis): Simplify using code fromi tree-ssa-copy.c.
+ 	(optimize_stmt): Pass additional argument to cprop_into_stmt.
+ 	* tree-ssa-pre.c (generate_expr_as_of_bb): Use replace_exp.
+ 	(generate_vops_as_of_bb): Similarly.
+ 
+ 2004-02-21  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* cgraphunit.c (decide_is_function_needed): Nested functions of extern
+ 	inline functions don't need to be output.
+ 	(expand_function): Re-enable sanity check.
+ 
+ 2004-02-21  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-ssa-loop.c (do_while_loop_p): New function.
+ 	(copy_loop_headers): Do not peel do-while loops.
+ 
+ 2004-02-21  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-cfg.c (cleanup_control_expr_graph): Update profile.
+ 
+ 	* tree-cfg.c (disband_implicit_edges): Set fallthru edges correctly.
+ 
+ 	* cfg.c (dump_flow_info): Work on trees too.
+ 
+ 	* tree-pretty-print.c (dump_generic_bb_stuff):  Do not touch bb
+ 	annotations when not allocated.
+ 
+ 2004-02-21  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (cprop_into_stmt): Look at the type's main variant
+ 	to determine if the two operands of a copy have equivalent types.
+ 
+ 2004-02-20  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-flow-inline.h (may_propagate_copy): Do not perform ABNORMAL_PHI
+ 	and DECL_HARD_REGISTER tests on virtual operands.
+ 	* tree-flow.h (propagate_copy): Kill prototype.
+ 	(propagate_value): New prototype.
+ 	* tree-ssa-dom.c (propagate_copy): Now static.
+ 	(propagate_value): No longer static.
+ 
+ 2004-02-20  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR middle-end/14218
+ 	* c-simplify.c (mark_labels_r): Move to ...
+ 	* gimplify.c (force_labels_r): ... here, and rename.
+ 	(gimplify_init_constructor): Invoke it.
+ 	* tree-simple.h (force_labels_r): Declare.
+ 
+ 2004-02-20  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR opt/14194
+ 	* tree-ssa-ccp.c (substitute_and_fold): Also mark new vars
+ 	if fold_stmt was successful.
+ 
+ 2004-02-20  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* doc/invoke.texi: Add documentation for parameters
+ 	global-var-threshold and max-aliased-vops.
+ 	* params.def (PARAM_GLOBAL_VAR_THRESHOLD): Reformat help message.
+ 	(PARAM_MAX_ALIASED_VOPS): Rename from PARAM_MAX_ALIAS_SET_SIZE.
+ 	* params.h (MAX_ALIASED_VOPS): Rename from MAX_ALIAS_SET_SIZE.
+ 	Update all users.
+ 	* tree-ssa-alias.c (struct alias_map_d): Document fields.
+ 	Add fields total_alias_vops, grouped_p and may_aliases.
+ 	(struct alias_info): Change fields addressable_vars and
+ 	pointers to malloc'd arrays.  Update all users.
+ 	Add fields num_references and total_alias_vops.
+ 	(compute_may_aliases): Add more comments.
+ 	(init_alias_info): Initialize new fields in struct alias_info.
+ 	(delete_alias_info): Corresponding changes.
+ 	(compute_points_to_and_addr_escape): Count references to
+ 	potentially aliased variables and pointer dereferences.
+ 	(compute_flow_insensitive_aliasing): Remove old grouping
+ 	heuristic.
+ 	Count the number of virtual operands induced by all the alias
+ 	sets created and call group_aliases if the number exceeds the
+ 	threshold set by --param max-aliased-vops.
+ 	(total_alias_vops_cmp): New.
+ 	(group_aliases_into): New.
+ 	(group_aliases): New.
+ 	* tree-ssa-operands.c (get_expr_operands): Change dump file
+ 	message when no flow-sensitive alias information is available.
+ 	(add_stmt_operand): Reformat comment.
+ 	* tree-ssa.c (init_tree_ssa): Don't call bitmap_clear.
+ 
+ 	* tree-simple.c (get_base_decl): Fix typo in comment.
+ 
+ 	* tree-pretty-print.c (print_call_name): Handle matrices of
+ 	function pointers.
+ 
+ 2004-02-20  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* Makefile.in (tree-ssa-loop.o): Add tree-inline.h dependency.
+ 	* basic-block.h (struct reorder_block_def): Moved from cfglayout.h.
+ 	(alloc_rbi_pool, initialize_bb_rbi, free_rbi_pool): New.
+ 	* bb-reorder.c (copy_bb): Use cfghooks for bb duplication.
+ 	* cfg.c (rbi_pool): New variable.
+ 	(alloc_rbi_pool, free_rbi_pool, initialize_bb_rbi): New functions.
+ 	* cfghooks.c (can_duplicate_block_p, duplicate_block): New functions.
+ 	* cfghooks.h (struct cfg_hooks): Add can_duplicate_block_p and
+ 	duplicate_block hooks.
+ 	(can_duplicate_block_p, duplicate_block): Declare.
+ 	* cfglayout.c (cfg_layout_pool, cfg_layout_initialize_rbi): Removed.
+ 	(fixup_reorder_chain): Use initialize_bb_rbi.
+ 	(cfg_layout_can_duplicate_bb_p, cfg_layout_duplicate_bb): Hookized.
+ 	(cfg_layout_initialize): Use cfg.c rbi pool manipulation functions.
+ 	(can_copy_bbs_p, copy_bbs): Use cfghooks for bb duplication.
+ 	* cfglayout.h (typedef struct reorder_block_def): Moved to
+ 	basic_block.h.
+ 	(cfg_layout_can_duplicate_bb_p, cfg_layout_duplicate_bb): Declaration
+ 	removed.
+ 	* cfgrtl.c (cfg_layout_create_basic_block): Use initialize_bb_rbi.
+ 	(rtl_cfg_hooks, cfg_layout_rtl_cfg_hook): Fill in can_duplicate_block_p
+ 	and duplicate_block fields.
+ 	* common.opt (ftree-ch): Add.
+ 	* flags.h (flag_tree_ch): Declare.
+ 	* jump.c (next_nonnote_insn_in_loop, duplicate_loop_exit_test,
+ 	copy_loop_headers): Removed.
+ 	* loop-unswitch.c (unswitch_loop): Use cfghooks for bb duplication.
+ 	* opts.c (decode_options): Enable flag_tree_ch at -O1.
+ 	(common_handle_option): Handle -ftree_ch.
+ 	* rtl.h (copy_loop_headers): Declaration removed.
+ 	* timevar.def (TV_TREE_CH): New.
+ 	* toplev.c (flag_tree_ch): New.
+ 	(rest_of_compilation): Do not call copy_loop_headers.
+ 	* tracer.c (tail_duplicate): Use cfghooks for bb duplication.
+ 	* tree-cfg.c (build_tree_cfg): Call alloc_rbi_pool.
+ 	(create_bb): Call initialize_bb_rbi.
+ 	(delete_tree_cfg): Call free_rbi_pool.
+ 	(tree_duplicate_bb): Hookize.
+ 	(tree_can_duplicate_bb_p): New.
+ 	(tree_cfg_hooks): Fill in can_duplicate_block_p and duplicate_block
+ 	fields.
+ 	* tree-flow.h (tree_duplicate_bb): Declaration removed.
+ 	* tree-optimize.c (init_tree_optimization_passes): Add pass_ch.
+ 	* tree-pass.h (pass_ch): Declare.
+ 	* tree-ssa-loop.c: Include tree-inline.h.
+ 	(call_expr_p, should_duplicate_loop_header_p, mark_defs_for_rewrite,
+ 	duplicate_blocks, copy_loop_headers, gate_ch): New functions.
+ 	(pass_ch): New.
+ 	* doc/invoke.texi (-fdump-tree-ch, -ftree-ch): Document.
+ 
+ 2004-02-19  David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	* config/rs6000/aix.h (MFWRAP_SPEC): Define.
+ 	(MFLIB_SPEC): Define.
+ 
+ 2004-02-19  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-phiopt.c (tree_ssa_phiopt): TRUTH_NOT_EXPR is valid
+ 	gimple code.
+ 
+ 2004-02-19  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* tree-cfg.c (cleanup_dead_labels): New function to remove
+ 	redundant labels.
+ 
+ 	Remove the RTL inliner.
+ 	* calls.c (try_to_integrate): Remove.
+ 	(expand_call): Do not try to expand calls inline.
+ 	* dbxout.c (dbxout_symbol_location): Don't mention integrate.c
+ 	in comments.
+ 	* expmed.c (extract_fixed_bit_field): Always propagate the
+ 	target for the shift if it is a REG.
+ 	* expr.c (emit_move_insn_1): Don't generate inline warnings.
+ 	(expand_expr_real_1): Don't look at inline_function_decl.
+ 	Don't output inlined functions here.
+ 	* expr.h (expand_inline_function): Remove prototype.
+ 	* emit-rtl.c (copy_most_rtx): Don't copy the integrated flag.
+ 	Copy the new return_val flag.
+ 	* final.c (final): Don't look at RTX_INTEGRATED_P.
+ 	* cfgrtl.c (create_basic_block_structure): Likewise.
+ 	* haifa-sched.c (priority): Likewise.
+ 	(restore_line_notes): Likewise.
+ 	* function.c (inline_function_decl): Remove.
+ 	(put_var_into_stack): Don't use it.
+ 	(fix_lexical_addr): Likewise.
+ 	* function.c (inline_function_decl): Remove extern declaration.
+ 	* genattrtab.c (ATTR_PERMANENT_P): Use the return_val flag
+ 	instead of the integrated flag.
+ 	* integrate.c (INTEGRATE_THRESHOLD): Remove.
+ 	(setup_initial_hard_reg_value_integration): Likewise.
+ 	(initialize_for_inline): Likewise.
+ 	(note_modified_parmregs): Likewise.
+ 	(integrate_parm_decls): Likewise.
+ 	(process_reg_param): Likewise.
+ 	(save_parm_insns): Likewise.
+ 	(copy_insn_list): Likewise.
+ 	(copy_insn_notes): Likewise.
+ 	(compare_blocks): Likewise.
+ 	(find_block): Likewise.
+ 	(inlining): Likewise.
+ 	(function_cannot_inline_p): Likewise.
+ 	(parmdecl_map): Likewise.
+ 	(in_nonparam_insns): Likewise.
+ 	(save_for_inline): Likewise.
+ 	(FIXED_BASE_PLUS): Likewise.
+ 	(expand_inline_function): Likewise.
+ 	(copy_rtx_and_substitute): Don't look at map->integrating,
+ 	map->inline_target, and inlining, since we are never copying
+ 	for integrating.
+ 	Don't abort on RTX_INTEGRATED_P.
+ 	(old_fun): Remove.
+ 	(output_inline_function): Remove.
+ 	* integrate.h (struct inline_map): Remove fields integrating,
+ 	block_map, leaf_reg_map, inline_target, and local_return_label.
+ 	* print-rtl.c (print_rtx): Don't print the integrated flag.
+ 	Print the return_val flag.
+ 	* rtl.h (struct rtx_def): Replace the integrated flag with the
+ 	return_val flag.
+ 	(RTX_INTEGRATED_P): Remove.
+ 	(notice_rtl_inlining_of_deferred_constant): Remove prototype.
+ 	* stmt.c (force_label_rtx): Don't look at inline_function_decl.
+ 	* toplev.c (rest_of_handle_inlining): Remove.
+ 	(rest_of_compilation): Don't call it, and never jump to exit.
+ 	Call convert_from_eh_region_ranges.
+ 	(wrapup_global_declarations): Don't output nested inlined functions.
+ 	* tree.h (function_cannot_inline_p): Remove prototype.
+ 	(save_for_inline): Ditto.
+ 	(output_inline_function): Ditto.
+ 	* unroll.c (unroll_loop): Don't clear map->inline_target.
+ 	* varasm.c (notice_rtl_inlining_of_deferred_constant): Remove.
+ 
+ 	* system.h: Poison INTEGRATE_THRESHOLD.
+ 	* config/avr/avr.h: Remove define.
+ 	* config/ip2k/ip2k.h: Likewise.
+ 
+ 	* unwind-sjlj.c (uw_install_context): Make a proper static inline
+ 	function.
+ 
+ 	* doc/rtl.texi: Remove references to the integrated flag.
+ 	* doc/tm.texi: Remove documentation of INTEGRATE_THRESHOLD.
+ 
+ 2004-02-17  Andrew Macleod  <amacleod@redhat.com>
+ 
+ 	* tree-ssa-live.c (coalesce_tpa_members): Don't coalesce partitions
+ 	which are not in the same TPA group.
+ 	* tree-ssa.c (rewrite_out_of_ssa): Coalesce via list first.
+ 
+ 2004-02-17  Brian Booth  <bbooth@redhat.com>
+ 
+ 	* tree-ssa-ccp.c (substitute_and_fold): Update stmt after
+ 	calling fold_stmt.
+ 
+ 2004-02-16  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* config/rs6000/rs6000.c (output_function_profiler): Check
+ 	cfun->static_chain_decl instead of current_function_needs_context.
+ 
+ 2004-02-16  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa.dse.c (dse_optimize_stmt): Dump info when we delete
+ 	stores.
+ 
+ 	* tree-ssa-dse.c: Update comments.
+ 
+ 	* Makefile.in (OBJS-common): Add tree-ssa-dse.o
+ 	(tree-ssa-dse.o): Add dependencies.
+ 	* common.opt (ftree-dse): New option.
+ 	* flags.h (flag_tree_dse): New.
+ 	(flag_tree_dom): Fix comments.
+ 	* opts.c (decode_options): Turn on flag_tree_dse.
+ 	(common_handle_option): Handle  OPT_ftree_dse.
+ 	* timevar.def (TV_TREE_PHIOPT): Update text.
+ 	(TV_TREE_DSE): New timevar.
+ 	* toplev.c (flag_tree_dse): New.
+ 	(flag_tree_dom): Fix comments.
+ 	(lang_independent_options): Add -ftree-dse.
+ 	* tree-dfa.c (redirect_immediate_use): New function.
+ 	(redirect_immediate_uses): New function.
+ 	* tree-flow.h (stmt_ann_d): Add UID field.
+ 	(redirect_immediate_uses): Declare.
+ 	* tree-optimize.c (init_tree_optimization_passes): Link in DSE pass.
+ 	* tree-pass.h (pass_dse): Declare.
+ 	* tree-ssa-dse.c: New file implementing DSE.
+ 	* doc/invoke.texi: Document new option.
+ 
+ 2004-02-16  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-nested.c: New file.
+ 	* Makefile.in (OBJS-common, GTFILES, tree-nested.o): Add it.
+ 	* builtin-types.def (BT_FN_VOID_PTR_PTR, BT_FN_VOID_PTR_PTR_PTR): New.
+ 	* builtins.c (expand_builtin_nonlocal_goto): New.
+ 	(expand_builtin_apply): Fix prepare_call_address args.
+ 	(round_trampoline_addr): Move from function.c.
+ 	(expand_builtin_init_trampoline): New.
+ 	(expand_builtin_adjust_trampoline): New.
+ 	(expand_builtin): Invoke them.
+ 	(build_function_call_expr): Add CALL_EXPR chain operand.
+ 	* builtins.def (BUILT_IN_INIT_TRAMPOLINE,
+ 	BUILT_IN_ADJUST_TRAMPOLINE, BUILT_IN_NONLOCAL_GOTO): New.
+ 	* c-decl.c (finish_function): Call lower_nested_functions.
+ 	(c_expand_decl): Don't declare_nonlocal_label.
+ 	* calls.c (prepare_call_address): Replace fndecl arg with a
+ 	precomputed static chain value.
+ 	(expand_call): Precompute the static chain value.  Use
+ 	update_nonlocal_goto_save_area.
+ 	* cgraph.c (cgraph_mark_reachable_node): Don't force nested
+ 	functions to be reachable.
+ 	(cgraph_clone_node): Don't abort cloning functions containing
+ 	nested functions.
+ 	* cgraphunit.c (cgraph_assemble_pending_functions): Don't do
+ 	anything special for nested functions.
+ 	(cgraph_mark_functions_to_output): Likewise.
+ 	(cgraph_estimate_growth, cgraph_clone_inlined_nodes): Likewise.
+ 	(cgraph_optimize): Likewise.
+ 	(cgraph_finalize_function): Don't zap DECL_SAVED_INSNS.
+ 	(cgraph_expand_function): Allow functions to not be emitted.
+ 	* defaults.h (TRAMPOLINE_ALIGNMENT): Move from function.c.
+ 	* dwarf2out.c (gen_subprogram_die): Generate DW_AT_static_link.
+ 	* emit-rtl.c (maybe_set_first_label_num): New.
+ 	* explow.c (update_nonlocal_goto_save_area): New.
+ 	(allocate_dynamic_stack_space): Use it.
+ 	* expr.c (expand_expr_real_1) <LABEL_DECL>: Don't force_label_rtx.
+ 	<COND_EXPR>: Ignore the possibility of non-local labels.
+ 	<ADDR_EXPR>: Don't do trampoline_address.
+ 	* expr.h (lookup_static_chain): Remove.
+ 	(prepare_call_address): Update 2nd arg.
+ 	(update_nonlocal_goto_save_area): Declare.
+ 	* final.c (profile_function): Update static chain test.
+ 	* function.c (TRAMPOLINE_ALIGNMENT): Move to defaults.h.
+ 	(trampolines_created): Move to varasm.c.
+ 	(free_after_compilation): Update for removed fields.
+ 	(allocate_struct_function): Likewise.
+ 	(delete_handlers, lookup_static_chain): Remove.
+ 	(fix_lexical_addr): Don't consider non-local variable refs.
+ 	(trampoline_address): Remove.
+ 	(round_trampoline_addr): Move to builtins.c.
+ 	(adjust_trampoline_addr): Remove.
+ 	(expand_function_start): Update for changes to static chain
+ 	and nonlocal goto handling.
+ 	(initial_trampoline): Move to varasm.c.
+ 	(expand_function_end): Don't build trampolines or kill
+ 	unreferenced nonlocal goto labels.
+ 	* function.h (struct function): Remove x_nonlocal_labels,
+ 	x_nonlocal_goto_handler_slots, x_nonlocal_goto_stack_level,
+ 	x_context_display, x_trampoline_list, needs_context.
+ 	Add static_chain_decl, nonlocal_goto_save_area.
+ 	* gimple-low.c (record_vars): Don't record functions.
+ 	* gimplify.c (declare_tmp_vars): Export.
+ 	(create_artificial_label): Set type.
+ 	(gimplify_expr): Don't consider nonlocal gotos.
+ 	* integrate.c (expand_inline_function): Kill lookup_static_chain ref.
+ 	* jump.c (any_uncondjump_p): Reject nonlocal goto.
+ 	* rtl.h (maybe_set_first_label_num): Declare.
+ 	* stmt.c (label_rtx): Set LABEL_PRESERVE_P appropriately.
+ 	(expand_label): Handle DECL_NONLOCAL and FORCED_LABEL.
+ 	(declare_nonlocal_label): Remove.
+ 	(expand_goto): Don't handle nonlocal gotos.
+ 	(expand_nl_handler_label): Remove.
+ 	(expand_nl_goto_receivers): Remove.
+ 	(expand_end_bindings): Don't expand_nl_goto_receivers.  Use
+ 	update_nonlocal_goto_save_area.
+ 	* tree-cfg.c (make_edges): Handle abnormal edges out of block
+ 	falling through to EXIT.
+ 	(make_ctrl_stmt_edges): Don't check GOTO_EXPR for nonlocal goto.
+ 	Handle computed goto with no destinations.
+ 	(tree_can_merge_blocks_p): Don't merge blocks with nonlocal labels.
+ 	(remove_useless_stmts_label, stmt_starts_bb_p): Likewise.
+ 	(tree_forwarder_block_p): Likewise.
+ 	(nonlocal_goto_p): Remove.
+ 	(tree_verify_flow_info): Update to match.
+ 	* tree-dump.c (dump_files): Add tree-nested.
+ 	* tree-flow.h (nonlocal_goto_p): Remove.
+ 	* tree-inline.c (setup_one_parameter): Split out from ...
+ 	(initialize_inlined_parameters): ... here.  Handle static chain.
+ 	(inline_forbidden_p_1): Update nonlocal goto check.
+ 	(expand_call_inline): Disable mysterious cgraph abort.
+ 	* tree-optimize.c (tree_rest_of_compilation): Save DECL_SAVED_INSNS.
+ 	* tree-pretty-print.c (dump_generic_node): Print static chain
+ 	and nonlocal label.
+ 	* tree-simple.h (declare_tmp_vars): Declare.
+ 	(lower_nested_functions): Declare.
+ 	* tree-ssa-dom.c (propagate_value): Avoid sharing problems.
+ 	* tree-ssa-operands.c (get_expr_operands): Walk static chain
+ 	field of call_expr.
+ 	* tree.def (CALL_EXPR): Add static chain operand.
+ 	* tree.h (NONLOCAL_LABEL): Remove.
+ 	(TDI_nested): New.
+ 	* varasm.c (TRAMPOLINE_ALIGNMENT): Remove.
+ 	(initial_trampoline): Move from function.c.
+ 	(assemble_trampoline_template): Set and return it.
+ 	(trampolines_created): Move from function.c.
+ 
+ 2004-02-16  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* tree-flow.h (cleanup_control_expr_graph): Don't declare here.
+ 	* tree-cfg.c (cleanup_control_expr_graph): Make static.
+ 	(find_edge_taken_cond_expr): Return an edge if the true and false
+ 	edges of a branch lead to the same basic block.
+ 
+ 2004-02-13  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-phinodes.c (resize_phi_node): Do not use ggc_realloc to
+ 	allocate a new PHI node.
+ 
+ 2004-02-12  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-flow.h (kill_redundant_phi_nodes): Remove declaration.
+ 	* tree-optimize.c (init_tree_optimization_passes): Add
+ 	pass_redundant_phi after DOM and CCP.
+ 	(execute_todo): Do not call kill_redundant_phi_nodes.
+ 	* tree-pass.h (TODO_redundant_phi): Remove.
+ 	Update all users.
+ 	Adjust values for all the other TODO_* entries.
+ 	(pass_redundant_phi): Declare.
+ 	* tree-ssa.c (replace_immediate_uses): Call mark_new_vars_to_rename
+ 	if a pointer was replaced.
+ 	(kill_redundant_phi_nodes): Make static.
+ 	(pass_redundant_phi): Define.
+ 
+ 2004-02-12  Dale Johannesen  <dalej@apple.com>
+ 
+ 	* Makefile.in (OBJS-common): Add rtl-profile.o, tree-profile.o.
+ 	(profile.o): Add tree-flow.h dependency.
+ 	(rtl-profile.o): New rule.
+ 	(tree-profile.o): New rule.
+ 	(GTFILES): Add tree-profile.c, rtl-profile.c.
+ 	* basic-block.h (flow_call_edges_add): Remove.
+ 	* cfganal.c (need_fake_edge_p): Move to cfgrtl.c.
+ 	(flow_call_edges_add): Move to cfgrtl.c.
+ 	* cfghooks.c: (block_ends_with_call_p): New.
+ 	(block_ends_with_condjump_p): New.
+ 	(flow_call_edges_add): New.
+ 	* cfghooks.h: (struct cfg_hooks): add block_ends_with_call_p,
+ 	block_ends_with_condjump_p, flow_call_edges_add.
+ 	(block_ends_with_call_p): New declaration.
+ 	(block_ends_with_condjump_p): New declaration.
+ 	(flow_call_edges_add): New declaration.
+ 	* cfgrtl.c (rtl_block_ends_with_call_p): New.
+ 	(rtl_block_ends_with_condjump_p): New.
+ 	(need_fake_edge_p): Moved from cfganal.c.
+ 	(rtl_flow_call_edges_add): Moved from cfganal.c (flow_call_edges_add).
+ 	(rtl_cfg_hooks): Add rtl_block_ends_with_call_p,
+ 	rtl_block_ends_with_condjump_p, rtl_flow_call_edges_add.
+ 	(cfg_layout_rtl_cfg_hooks): Ditto.
+ 	* common.opt (ftree-based-profiling): New.
+ 	* coverage.c (tree_ctr_tables): New.
+ 	(coverage_counter_alloc): Use it.
+ 	(build_ctr_info_value): Ditto.
+ 	(coverage_counter_ref): Ditto.  Rename to rtl_coverage_counter_ref.
+ 	(tree_coverage_counter_ref): New.
+ 	* coverage.h (coverage_counter_ref): Remove declaration.
+ 	(rtl_coverage_counter_ref): New declaration.
+ 	(tree_coverage_counter_ref): New declaration.
+ 	* opts.c (OPT_ftree_based_profiling): New.
+ 	* profile.c: Include cfghooks.h, tree-flow.h.
+ 	(profile_hooks): New.
+ 	(profile_dump_file): New.
+ 	(instrument_edges): Use hooks instead of RTL-specific code.
+ 	(instrument_values): Ditto.
+ 	(get_exec_counts): Ditto.
+ 	(compute_branch_probabilities): Ditto.
+ 	(compute_value_histograms): Ditto.
+ 	(branch_prob): Ditto.
+ 	(find_spanning_tree): Ditto.
+ 	(end_branch_prob): Ditto.
+ 	(gen_edge_profiler): Move to rtl-profile.c (rtl_gen_edge_profiler).
+ 	(gen_interval_profiler): Ditto (rtl_gen_interval_profiler).
+ 	(gen_pow2_profiler): Ditto (rtl_gen_pow2_profiler).
+ 	(gen_one_value_profiler): Ditto (rtl_gen_one_value_profiler).
+ 	(tree_register_profile_hooks): New.
+ 	(rtl_register_profile_hooks): New.
+ 	* rtl-profile.c: New file.
+ 	* rtl.h (init_branch_prob): Move declaration to value-prof.h.
+ 	(end_branch_prob): Ditto.
+ 	(branch_prob): Ditto.
+ 	* toplev.c (flag_tree_based_profiling): New.
+ 	(f_options): Add -ftree-based-profiling.
+ 	(compile_file): Register rtl-based CFG and profiling hooks.
+ 	(rest_of_compilation): Do rtl-based profiling only when
+ 	!flag_tree_based_profiling.  Register rtl-based profiling hooks.
+ 	(process_options): Sorry for -ftree-based-profiling plus
+ 	-ftest-coverage or -fprofile-values.
+ 	* toplev.h (flag_tree_based_profiling): New.
+ 	* tree-cfg.c (tree_block_ends_with_call_p): New.
+ 	(tree_block_ends_with_condjump_p): New.
+ 	(need_fake_edge_p): New.
+ 	(tree_flow_call_edges_add): New (largely from flow_call_edges_add
+ 	in cfganal.c).
+ 	(tree_cfg_hooks): Add tree_block_ends_with_call_p,
+ 	tree_block_ends_with_condjump_p, tree_flow_call_edges_add.
+ 	* tree-optimize.c (init_tree_optimization_passes):
+ 	Add pass_tree_profile.
+ 	* tree-pass.h: Ditto.
+ 	* tree-profile.c: New file.
+ 	* value-prof.c (value_prof_hooks): New.
+ 	(find_values_to_profile): Rename to rtl_find_values_to_profile.
+ 	Move rtl-specific bits in from branch_prob.
+ 	(value_profile_transformations): Rename to
+ 	rtl_value_profile_transformations.
+ 	(struct value_prof_hooks): New.
+ 	(rtl_value_prof_hooks): New.
+ 	(rtl_register_value_prof_hooks): New.
+ 	(tree_find_values_to_profile): New stub.
+ 	(tree_value_profile_transformations): New stub.
+ 	(tree_value_prof_hooks): New stub.
+ 	(tree_register_value_prof_hooks): New stub.
+ 	(find_values_to_profile): New.
+ 	(value_profile_transformations): New.
+ 	* value-prof.h: Add multiple inclusion guard.
+ 	(struct histogram_value): Change rtx fields to void *.
+ 	(rtl_register_value_prof_hooks): New declaration.
+ 	(tree_register_value_prof_hooks): New declaration.
+ 	(find_values_to_profile): New declaration.
+ 	(free_profiled_values): New declaration.
+ 	(value_profile_transformations): New declaration.
+ 	(struct profile_hooks): New declaration.
+ 	(init_branch_prob): Declaration moved from rtl.h.
+ 	(branch_prob): Declaration moved from rtl.h.
+ 	(end_branch_prob): Declaration mooved from rtl.h.
+ 	(tree_register_profile_hooks): New declaration.
+ 	(rtl_register_profile_hooks): New declaration.
+ 	(tree_profile_hooks): New declaration.
+ 	(rtl_profile_hooks): New declaration.
+ 	* doc/invoke.texi: Document -ftree-based-profiling.
+ 
+ 2004-02-12  Jeff Law  <law@redhat.com>
+ 
+ 	* domwalk.c (walk_dominator_tree): Move statement walking from
+ 	clients into here.  Walk statements in forward or backward order
+ 	as requested by the client.  Walk either the dominator tree or
+ 	the post-dominator tree as requested by the client.
+ 	* domwalk.h (dom_walk_data): Add two fields to control direction of
+ 	statement walk and dominator vs post-dominator tree walk.  Add
+ 	BSI argument to the per-statement callbacks.
+ 	* tree-ssa-dom.c (optimize_stmt): Update prototype so that it can
+ 	be directly used as a callback for the dominator tree walker.
+ 	Update stmts_to_rescan here.
+ 	(tree_ssa_dominator_optimize): Initialize new fields in the dominator
+ 	walker structure.  Use optimize_stmt instead of dom_opt_walk_stmts
+ 	for statement callback.
+ 	(dom_opt_walk_stmts): Kill.  No longer used.
+ 	* tree-ssa.c (mark_def_sites): Update prototype so that it can be
+ 	called as the per-statement callback.  No longer walk statements here.
+ 	(mark_def_sites_initialize_block): New.
+ 	(rewrite_stmt): Update prototype so that it can be called as the
+ 	per-statement callback.
+ 	(rewrite_walk_stmts): Kill.  No longer used.
+ 	(rewrite_into_ssa): Initialize new fields in the dominator walker
+ 	structure.  Use rewrite_stmt instead of rewrite_walk_stmts.  Add
+ 	mark_def_sites_initialize_block callback.
+ 
+ 2004-02-12  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* doc/cfg.texi: New file.
+ 	* doc/ggcint.texi: Include it.  Add a new chapter.
+ 
+ 2004-02-11  Jeff Law  <law@redhat.com>
+ 
+ 	* Makefile.in (OBJS-common): Add tree-ssa-forwprop.o
+ 	(tree-ssa-forwprop.o): Add dependencies.
+ 	* timevar.def (TV_TREE_FORWPROP): New timevar.
+ 	* tree-optimize.c (init_tree_optimization_passes): Link in
+ 	the forward propagation pass.
+ 	* tree-pass.h (pass_forwprop): Declare.
+ 	* tree-ssa-forwprop.c: New file with forward propagation pass.
+ 	* doc/invoke.texi: Document dump for forward propagation pass.
+ 
+ 2004-02-11  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-ssa.c (rewrite_out_of_ssa): Don't use coalesce list until new
+ 	bug resolved.
+ 
+ 2004-02-11  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-ssa-live.c (compare_pairs): New.  Coalesce list cost function.
+ 	(sort_coalesce_list): Use qsort() to sort list by cost.
+ 	(coalesce_tpa_members): Use correct partition representatives.  Add more
+ 	debug information.  Allow coalesce by list, root_var, or both.
+ 	(tpa_dump): Show partition index.
+ 	* tree-ssa-live.h (SSANORM_COALESCE_PARTITIONS): New flag.
+ 	(SSANORM_USE_COALESCE_LIST): New flag.
+ 	* tree-ssa.c (create_temp): Don't mark as used when created.
+ 	(coalesce_ssa_name): Create coalesce list if requested.  Add more
+ 	debug output.
+ 	(assign_vars): Add additional debug info.
+ 	(remove_ssa_form): Perform TER after assign_vars().
+ 	(rewrite_vars_out_of_ssa): Pass coalesce partitions flag to
+ 	remove_ssa_form.
+ 	(rewrite_out_of_ssa): Add coalesce list flag to remove_ssa_form call.
+ 
+ 2004-02-10  Jeff Law  <law@redhat.com>
+ 
+ 	* Makefile.in (OBJS-common): Add tree-ssa-phiopt.o
+ 	(tree-ssa-phiopt.o): Add dependencies.
+ 	* timevar.def (TV_TREE_PHIOPT): New timevar.
+ 	* tree-cfg.c (extract_true_false_edges_from_block): Moved here from
+ 	tree-ssa-dom.c.
+ 	(tree_verify_flow_info): Use extract_true_false_edges_from_block.
+ 	* tree-flow.h (extract_true_false_edges_from_block): Declare.
+ 	* tree-ssa-dom.c (extract_true_false_edges_from_block): Moved into
+ 	tree-cfg.c.
+ 	(get_eq_expr_value): Improve type check.
+ 	* tree-optimize.c (init_tree_optimization_passes): Link in
+ 	phiopt pass.
+ 	* tree-pass.h (pass_phiopt): Declare.
+ 	* tree-ssa-phiopt.c: New file with PHI node optimization pass.
+ 	* doc/invoke.texi: Document dump for PHI node optimization.
+ 
+ 2004-02-10  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-sra.c (lookup_scalar): Handle unnamed fields.
+ 
+ 2004-02-10  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (OBJS-common): Add tree-ssa-alias.o.
+ 	(tree-ssa-alias.o): New rule.
+ 	(tree-ssa-operands.o): Add dependency on $(TIMEVAR_H) and tree-pass.h
+ 	(gt-tree-dfa.h): Remove.
+ 	* timevar.def (TV_TREE_OPS): Rename from unused entry TV_TREE_DFA.
+ 	* tree-ssa-alias.c: New file.
+ 	* tree-dfa.c (struct alias_stats_d, alias_stats, dump_alias_stats,
+ 	may_alias_p, add_may_alias, global_var, aliases_computed_p,
+ 	compute_may_aliases): Move to tree-ssa-alias.c.
+ 	(struct walk_state): Remove fields 'is_asm_expr' and 'num_calls'.
+ 	Update all users.
+ 	(compute_alias_sets, create_memory_tags, may_access_global_mem_p,
+ 	get_memory_tag_for, promote_call_clobbered_vars,
+ 	find_addressable_vars): Remove.
+ 	(call_clobbered_vars): Move to tree-ssa-alias.c and convert to
+ 	bitmap.
+ 	(find_referenced_vars): Move logic to create .GLOBAL_VAR to
+ 	tree-ssa-alias.c.
+ 	(create_ssa_name_ann): New.
+ 	(dump_variable): Rearrange.
+ 	(dump_dfa_stats): Do not show the number of call clobbered
+ 	variables.
+ 	(find_vars_r): Do not try to determine if an assignment my access
+ 	global memory.
+ 	(add_referenced_var): Remove hacks to establish global memory
+ 	dependencies.
+ 	If the variable needs to live in memory mark it call-clobbered.
+ 	* tree-flow-inline.h (ssa_name_ann): New.
+ 	(get_ssa_name_ann): New.
+ 	(set_may_alias_global_mem): Remove.
+ 	(may_alias_global_mem_p): Remove.
+ 	(set_may_point_to_global_mem): Remove.
+ 	(may_point_to_global_mem_p): Remove.
+ 	(is_call_clobbered): New
+ 	(mark_call_clobbered): New
+ 	(mark_non_addressable): New
+ 	* tree-flow.h (enum tree_ann_type): Add SSA_NAME_ANN.
+ 	(enum mem_tag_kind): Declare.
+ 	(struct var_ann_d): Remove fields 'is_call_clobbered',
+ 	'may_alias_global_mem' and 'may_point_to_global_mem'.
+ 	Replace bitfield 'mem_tag' with enum bitfield 'mem_tag_kind'.
+ 	Rename field 'mem_tag' to 'type_mem_tag'.
+ 	(struct stmt_ann_d): Change type of field 'addresses_taken' to a
+ 	bitmap.  Update all users.
+ 	(struct ssa_name_ann_d): Declare.
+ 	(union tree_ann_d): Add field 'ssa_name'.
+ 	(ssa_name_ann_t): New type.
+ 	(struct bb_ann_d): Add field 'has_escape_site'.
+ 	(num_call_clobbered_vars): Remove.
+ 	(call_clobbered_var): Remove.
+ 	(call_clobbered_vars): Change to bitmap.
+ 	(dump_points_to_info): Declare.
+ 	(debug_points_to_info): Declare.
+ 	(walk_use_def_chains_fn): New type.
+ 	(walk_use_def_chains): Declare.
+ 	(is_call_clobbered): Declare.
+ 	(mark_call_clobbered): Declare.
+ 	* tree-simple.c (needs_to_live_in_memory): Move to tree.c.
+ 	(is_gimple_non_addressable): Update comment.
+ 	(is_gimple_call_clobbered): Remove.
+ 	(get_call_expr_in): New.
+ 	(get_base_var): Rename from get_base_symbol.  Update all callers.
+ 	Don't strip SSA_NAME wrappers.
+ 	(get_base_decl): New.
+ 	(get_base_address): New.
+ 	* tree-simple.h (is_gimple_call_clobbered): Remove.
+ 	(needs_to_live_in_memory): Remove.
+ 	(get_base_decl): Declare.
+ 	(get_base_var): Declare.
+ 	(get_base_address): Declare.
+ 	* tree-ssa-dce.c (need_to_preserve_store): Reduce to calling
+ 	needs_to_live_in_memory.
+ 	* tree-ssa-operands.c: Include tree-pass.h and timevar.h
+ 	(get_stmt_operands): Push/pop TV_TREE_OPS time var.
+ 	Call mark_call_clobbered for asms that store to memory.
+ 	(get_expr_operands): When adding operands for INDIRECT_REF
+ 	expressions, use flow-sensitive aliasing, if available.
+ 	Assume that malloc-like function calls won't clobber.
+ 	(add_call_clobber_ops):
+ 	(add_call_read_ops):
+ 	* tree-ssa.c (rewrite_into_ssa): If any variable in vars_to_rename
+ 	is a pointer, invalidate all name memory tags.
+ 	(create_temp): Call is_call_clobbered and mark_call_clobbered.
+ 	(walk_use_def_chains_1): New.
+ 	(walk_use_def_chains): New.
+ 
+ 	* tree.c (needs_to_live_in_memory): New.
+ 	* tree.h (DECL_NEEDS_TO_LIVE_IN_MEMORY_INTERNAL): Define.
+ 	(struct tree_decl): Add bitfield 'needs_to_live_in_memory'.
+ 	Update unused bits comment.
+ 	(needs_to_live_in_memory): Declare.
+ 
+ 	* tree-simple.h (get_call_expr_in): Declare.
+ 	* tree-sra.c (scalarize_stmt): Call get_call_expr_in when handling
+ 	function calls.
+ 	* tree-ssa-ccp.c (likely_value): Likewise.
+ 
+ 	* params.def (PARAM_MAX_CLOBBERED_VARS_GLOBAL_VAR): Remove.
+ 	(PARAM_MAX_CALLS_GLOBAL_VAR): Remove.
+ 	(PARAM_GLOBAL_VAR_THRESHOLD): Define.
+ 	(PARAM_MAX_ALIAS_SET_SIZE): Define.
+ 	Update all users.
+ 	* params.h (MAX_CALLS_FOR_GLOBAL_VAR): Remove.
+ 	(MAX_CLOBBERED_VARS_FOR_GLOBAL_VAR): Remove.
+ 	(GLOBAL_VAR_THRESHOLD): Define.
+ 	(MAX_ALIAS_SET_SIZE): Define.
+ 
+ 2004-02-09  Richard Henderson  <rth@redhat.com>
+ 
+ 	* langhooks.h (lang_hooks_for_functions): Add missing_noreturn_ok_p.
+ 	* langhooks-def.h, c-lang.c, objc/objc-lang.c
+ 	(LANG_HOOKS_FUNCTION_MISSING_NORETURN_OK_P): New.
+ 	* c-objc-common.c (c_missing_noreturn_ok_p): Return bool.
+ 	(c_objc_common_init): Don't set lang_missing_noreturn_ok_p.
+ 	* c-tree.h (c_missing_noreturn_ok_p): Update decl.
+ 	* flow.c (lang_missing_noreturn_ok_p): Remove.
+ 
+ 	* flow.c (check_function_return_warnings): Move to tree-cfg.c.
+ 	* toplev.c (rest_of_compilation): Don't call it.
+ 	* tree-cfg.c (execute_warn_function_return): Move from flow.c,
+ 	rename, update for tree vs rtl.
+ 	(pass_warn_function_return): New.
+ 	* tree-pass.h (pass_warn_function_return): Declare it.
+ 	* tree-optimize.c (init_tree_optimization_passes): Run it.
+ 
+ 	* function.h (struct function): Remove x_clobber_return_insn.
+ 	* function.c (free_after_compilation): Don't set it.
+ 	(expand_function_end): Likewise.
+ 
+ 2004-02-09  Richard Henderson  <rth@redhat.com>
+ 
+ 	Revert:
+ 	2004-02-06  Richard Henderson  <rth@redhat.com>
+ 	* tree-ssa-dom.c (record_equivalences_from_phis): Use
+ 	record_const_or_copy.
+ 	(record_equivalences_from_stmt): Likewise.  Replace
+ 	block_avail_exprs_p and block_nonzero_vars_p args with bd.
+ 
+ 2004-02-09  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (get_eq_expr_value): Improve handling of boolean
+ 	conditions.
+ 
+ 	* domwalk.c (walk_dominator_tree): Completely lose PARENT argument.
+ 	Callers updated.  No longer pass PARENT to callbacks.
+ 	* domwalk.h (struct dom_walk_data): Corresponding changes.
+ 	* tree-ssa-dom.c: Likewise.
+ 	* tree-ssa.c: Likewise.
+ 
+ 	* domwalk.c (walk_dominator_tree): Change last argument to be the
+ 	parent block in the dominator tree rather than the last statement
+ 	in the parent block in the dominator tree.  Similarly in all the
+ 	callbacks.
+ 	* domwalk.h (struct dom_walk_data): Update callback prototypes.
+ 	* tree-ssa-dom.c: Corresponding changes.
+ 	* tree-ssa.c: Likewise.
+ 
+ 	* tree-ssa-dom.c (redirect_edges_and_update_ssa_graph): Break out
+ 	of tree_ssa_dominator_optimize.  If the out-of-ssa pass creates
+ 	new variables, then invalidate some requested jump threads.
+ 
+ 2004-02-08  Richard Henderson  <rth@redhat.com>
+ 
+ 	* flow.c (regno_uninitialized): Remove.
+ 	* output.h (regno_uninitialized): Remove.
+ 	* function.c (setjmp_vars_warning): Rename from
+ 	uninitialized_vars_warning, remove uninitialized vars warning.
+ 	* toplev.c (rest_of_handle_life): Update to match.
+ 	* tree.h (setjmp_vars_warning): Likewise.
+ 
+ 	* tree-sra.c (lookup_scalar): Set DECL_NAME to something descriptive.
+ 
+ 	* tree-ssa.c (warn_uninit): New.
+ 	(warn_uninitialized_var, warn_uninitialized_phi): New.
+ 	(execute_early_warn_uninitialized): New.
+ 	(execute_late_warn_uninitialized): New.
+ 	(gate_warn_uninitialized): New.
+ 	(pass_early_warn_uninitialized): New.
+ 	(pass_late_warn_uninitialized): New.
+ 	* tree-pass.h (pass_early_warn_uninitialized): New.
+ 	(pass_late_warn_uninitialized): New.
+ 	* tree-optimize.c (init_tree_optimization_passes): Add them.
+ 
+ 2004-02-08  Richard Henderson  <rth@redhat.com>
+ 
+ 	* cppexp.c (append_digit): Rearrange unsignedp/overflow setting.
+ 	(eval_token, num_binary_op, num_part_mul, num_div_op): Likewise.
+ 	* ra-rewrite.c (rewrite_program2): Zero info.
+ 	* reload.c (decompose): Zero val.
+ 	* tree-ssa-ccp.c (visit_phi_node): Zero phi_val.const_val.
+ 
+ 2004-02-07  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-inline.c (save_body): Clone the parm decl correctly.
+ 
+ 	* cgraph.c: Add introductionary comment.
+ 	(cgraph_remove_node): Release DECL_SAVED_INSNS too.
+ 	* cgraphunit.c: Likewise.
+ 	(cgraph_finalize_function): Release DECL_SAVED_INSNS of external function.
+ 	(decl_expand_function): Release DECL_SAVED_INSNS/body/tree.
+ 	(cgraph_remove_unreachable_nodes): Likewise; guard cgraph verification.
+ 
+ 2004-02-06  Richard Henderson  <rth@redhat.com>
+ 
+ 	* common.opt (fdisable-tree-ssa): Remove.
+ 	* flags.h (flag_disable_tree_ssa): Remove.
+ 	* toplev.c (flag_disable_tree_ssa): Remove.
+ 	(f_options): Don't set it.
+ 	* opts.c (common_handle_option): Likewise.
+ 	* doc/invoke.texi (fdisable-tree-ssa): Remove.
+ 
+ 2004-02-06  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-ssa-dom.c (record_equivalences_from_phis): Use
+ 	record_const_or_copy.
+ 	(record_equivalences_from_stmt): Likewise.  Replace
+ 	block_avail_exprs_p and block_nonzero_vars_p args with bd.
+ 
+ 2004-02-06  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR middle-end/13127
+ 	* tree-inline.c (declare_return_variable): Set the no warning bit
+ 	on the variable created for the return value.
+ 
+ 2004-02-06  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-pretty-print.c (dump_generic_node): Render NON_LVALUE_EXPR.
+ 
+ 	* tree-ssa-dom.c (local_fold): New.
+ 	(thread_across_edge, simplify_rhs_and_lookup_avail_expr,
+ 	find_equivalent_equality_comparison): Use it.
+ 
+ 2004-02-06  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR c/13863
+ 	* c-common.c (c_decl_uninit_1): Remove.
+ 	(c_decl_uninit): Remove.
+ 	* c-common.h (c_decl_uninit): Remove prototype.
+ 	* c-lang.c (LANG_HOOKS_DECL_UNINIT): Delete.
+ 	* objc/objc-lang.c (LANG_HOOKS_DECL_UNINIT): Delete.
+ 	* c-simplify.c (gimplify_decl_stmt): Set TREE_NO_WARNING
+ 	on the decl where the initial is itself.
+ 	* function.c (uninitialized_vars_warning): Remove old comment
+ 	and check for DECL_INITIAL, replace with a check of TREE_NO_WARNING
+ 	and do not call the langhook.
+ 	* langhooks-def.h (LANG_HOOKS_DECL_UNINIT): Remove.
+ 	(LANG_HOOKS_INITIALIZER): Remove usage of LANG_HOOKS_DECL_UNINIT.
+ 	* langhooks.c (lhd_decl_uninit): Remove.
+ 	* langhooks.h (lhd_decl_uninit): Remove prototype.
+ 
+ 2004-02-05  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-ssa-dom.c (record_const_or_copy_1): New.
+ 	(record_const_or_copy): New.
+ 	(thread_across_edge): Use it.
+ 	(dom_opt_finalize_block): Likewise.  Tidy.
+ 	(record_equality): Split out from ...
+ 	(record_equivalences_from_incoming_edge): ... here.
+ 
+ 2004-02-05  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-ssa-dom.c (simplify_rhs_and_lookup_avail_expr): Allow
+ 	mixing PLUS and MINUS when folding operations.
+ 
+ 2004-02-05  Andrew Macleod  <amacleod@redhat.com>
+ 
+ 	* tree-pretty-print.c (dump_bb_header):  Allow TDF_SLIM printing.
+ 	(dump_bb_end):  Allow TDF_SLIM printing.
+ 	(dump_generic_bb_buff):  Add flags parameter to dump_bb_end.
+ 
+ 2004-02-05  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* alias.c (find_base_term, get_addr):  Do not dereference NULL
+ 	pointer when all VALUE's locations has been invalidated.
+ 	(rtx_equal_for_memref_p): Simplify checking of VALUEs.
+ 
+ 2004-02-04  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-alias-ander.c (andersen_init): Reorder/Redo code so that we
+ 	actually free the memory in intraprocedural mode.
+ 	(andersen_cleanup): Ditto.
+ 
+ 2004-02-04  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-ssa-ccp.c (get_value, visit_phi_node,
+ 	visit_assignment, dump_lattice_value): Tidy.
+ 	(evaluate_stmt): Don't do debug dump here.
+ 	(def_to_undefined): Merge into set_lattice_value.
+ 	(def_to_varying): Likewise, but retain as a wrapper.
+ 	(set_lattice_value): Tidy.  Emit correct debug info.
+ 	(replace_uses_in): Remove strlen hacks.
+ 	(execute_fold_all_builtins): Fix DECL_BUILT_IN comparison.
+ 	Force folding of BUILT_IN_CONSTANT_P.
+ 
+ 2004-02-04  Richard Henderson  <rth@redhat.com>
+ 
+ 	* builtins.c (fold_builtin_expect): New.
+ 	(fold_builtin_1): Call it.
+ 
+ 2004-02-04  Jeff Law  <law@redhat.com>
+ 
+ 	* jump.c (duplicate_loop_exit_test): Allow copying of the loop
+ 	exit test even if we do not find the LOOP_END note.
+ 
+ 	* domwalk.c: Update comments.
+ 
+ 2004-02-04  Brian Booth  <bbooth@redhat.com>
+ 
+ 	PR opt/13755
+ 	* tree-dfa.c (compute_alias_sets): set rename flag for variables
+ 	aliased by GLOBAL_VAR.
+ 
+ 2004-02-04  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-ssa-dom.c (simplify_switch_and_lookup_avail_expr): New.
+ 	(eliminate_redundant_computations): Call it.
+ 
+ 2004-02-03  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR opt/13869
+ 	* tree-cfg.c (cfg_remove_useless_stmts_bb): Correct handling of
+ 	boolean variables in COND_EXPR_COND.
+ 
+ 2004-02-03  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR middle-end/13325
+ 	* builtins.c (fold_builtin_1): Rename from fold_builtin.
+ 	(fold_builtin): New.
+ 	* c-simplify.c (gimplify_expr_stmt): Check TREE_NO_WARNING.
+ 	* stmt.c (expand_expr_stmt_value): Likewise.
+ 	* tree.h (struct tree_common): Add nowarning_flag.
+ 	(TREE_NO_WARNING): New.
+ 	(TREE_NO_UNUSED_WARNING): Remove.
+ 	* c-typeck.c (build_unary_op): Use TREE_NO_WARNING instead.
+ 	* stmt.c (warn_if_unused_value): Likewise.
+ 
+ 2004-02-03  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* tree-ssa-dce.c: Partial rewrite.  The old DCE is now called
+ 	`conservative'.  The more aggressive algorithm uses control
+ 	dependence and is called `aggressive' or cd-dce.
+ 	* timevar.def (TV_TREE_DCE): Rename.
+ 	(TV_TREE_CD_DCE, TV_CONTROL_DEPENDENCES): New timevars.
+ 	* tree-pass.h: Declare extern pass_cd_dce.
+ 	* tree-optimize.c (init_tree_optimization_passes): Replace
+ 	the final DCE pass with a CD-DCE pass.
+ 
+ 2004-02-01  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* cgraphunit.c (cgraph_mark_inline_edge): Fix insertion to
+ 	cgraph_inline_hash.
+ 
+ 2004-01-30  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* common.opt: Add support for -fmudflapth, -fmudflapir.
+ 	* invoke.texi: Document them.
+ 	* opts.c: Ditto.
+ 	* flags.h: Add new flags flag_mudflap_threads, _ignore_reads.
+ 	* toplev.c: Initialize new flags.  Remove redundant code from
+ 	lang_independent_options[].
+ 	* tree-mudflap.c (*): Support new flag_mudflap_threads encoding.
+ 	(mf_xform_derefs_1): Support flag_mudflap_ignore_reads option.
+ 	* c-mudflap.c (mflang_flush_calls): Mark static ctor TREE_USED.
+ 
+ 2004-01-30  Ian Lance Taylor  <ian@wasabisystems.com>
+ 
+ 	* gengtype-yacc.y (bitfieldlen): Add empty action.
+ 
+ 2004-01-30  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* configure.ac: Move configuration for libbanshee and
+ 	libgmp from configure.in.
+ 
+ 2004-01-30  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR opt/13524
+ 	* gengtype-yacc.y (struct_fields): Accept unnamed bitfields.
+ 	(bitfieldlen): Split from ...
+ 	(bitfieldopt): ... here.
+ 	* gimplify.c (mark_not_gimple): Remove.
+ 	(gimplify_call_expr): Don't ignore BUILT_IN_MD.
+ 	* tree-dfa.c (struct walk_state): Remove is_not_gimple.
+ 	(find_referenced_vars): Don't look for TREE_NOT_GIMPLE.
+ 	(find_vars_r, add_referenced_var): Likewise.
+ 	* tree-ssa-operands.c (get_stmt_operands, get_expr_operands): Likewise.
+ 	* tree-simple.h (mark_not_gimple): Remove.
+ 	* tree.h (struct tree_common): Remove not_gimple_flag.
+ 	(TREE_NOT_GIMPLE): Remove.
+ 
+ 2004-01-29  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/13865
+ 	* c-simplify.c (gimplify_for_stmt): Reorganize to fix cleanups.
+ 
+ 2004-01-29  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR c++/13543
+ 	* tree-inline.c (initialize_inlined_parameters): Register the
+ 	substitute reference also.
+ 
+ 2004-01-29  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-inline.c (gimple_expand_calls_inline): Look inside
+ 	RETURN_EXPR.
+ 
+ 	* tree-pretty-print.c (dump_generic_node): If TDF_DETAILS, dump
+ 	both name and uid.
+ 
+ 2004-01-29  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* cfg.c (unlink_block): Reset prev_bb and next_bb.
+ 
+ 2004-01-29  Jeff Law <law@redhat.com>
+ 	    Andrew MacLeod <amacleod@redhat.com>
+ 
+ 	* tree-ssa-live.h (tpa_next_partition): Correctly handle compressed
+ 	elements.
+ 	* tree-ssa.c (coalesce_ssa_name): New argument, flags.  Callers
+ 	updated.  Test SSANORM_COMBINE_TEMPS in flags rather than
+ 	flag_tree_combine_temps.
+ 	(coalesce_vars): Either operand of a copy might not have a
+ 	partition when rewriting a subset of the variables out of SSA form.
+ 	(rewrite_vars_out_of_ssa): Honor -ftree-combine-temps by passing
+ 	in SSANORM_COMBINE_TEMPS in flags argument to remove_sas_form..
+ 
+ 2004-01-29  Dale Johannesen  <dalej@apple.com>
+ 
+ 	* Makefile.in (OBJS-common):  Move tree-nomudflap.o...
+ 	(OBJS-archive): ...to here, and remove duplicate tree-optimize.o.
+ 
+ 2004-01-28  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR middle-end/13898
+ 	* gimplify.c (gimplify_init_constructor): Invoke
+ 	lhd_set_decl_assembler_name on the now-static variable.
+ 
+ 2004-01-28  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR opt/13798
+ 	* expr.c (is_zeros_p): Remove.  Change all callers to use
+ 	initializer_zerop.
+ 	(categorize_ctor_elements_1, categorize_ctor_elements): New.
+ 	(count_type_elements): New.
+ 	(mostly_zeros_p): Use them.
+ 	* gimplify.c (tmp_var_id_num): Split out from create_tmp_var_raw.
+ 	(create_tmp_var_name): Likewise.
+ 	(gimplify_init_constructor): Drop constructors to readonly memory
+ 	as indicated by categorize_ctor_elements and can_move_by_pieces.
+ 	* tree.c (initializer_zerop): Handle VECTOR_CST.  Don't check
+ 	AGGREGATE_TYPE_P for CONSTRUCTOR.
+ 	* tree.h (categorize_ctor_elements): Declare.
+ 	(count_type_elements): Declare.
+ 	* Makefile.in (gimplify.o): Update dependencies.
+ 	(GTFILES): Add gimplify.c.
+ 
+ 2004-01-27  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* tree-mudflap.c (mx_register_decls): Support VLAs.
+ 	(mf_xform_derefs_1): Disable checking shortcut for VLAs.
+ 	* c-simplify.c (gimplify_decl_stmt): Add mudflap xref comment.
+ 	* gimplify.c (gimplify_bind_expr): Ditto.
+ 
+ 2004-01-27  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c:  Add more comments describing SSAPRE and
+ 	the various functions.
+ 	(generate_expr_as_of_bb): Use PRED, a basic block argument, instead of
+ 	j, the index of that bb.
+ 	(generate_vops_as_of_bb): Ditto.
+ 	(insert_occ_in_preorder_dt_order): Rename to
+ 	create_and_insert_occ_in_preorder_dt_order.
+ 
+ 2004-01-27  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (rename_1): Add some more comments.
+ 
+ 2004-01-25  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR c/13748
+ 	* c-decl.c (finish_function): Do not pass
+ 	the function on to optimizers if there was an error.
+ 
+ 2004-01-23  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR opt/12941
+ 	* combine.c (SHIFT_COUNT_TRUNCATED): Provide default value.
+ 	(simplify_comparison): Don't simplify (eq (zero_extract c 1 r) 0)
+ 	if SHIFT_COUNT_TRUNCATED is set.
+ 
+ 2004-01-21  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR c/11267
+ 	* c-decl.c (c_finalize): New.
+ 	(finish_function): Use it.  Genericize and finalize only non-nested
+ 	functions.  Register nested functions with cgraph.
+ 	* c-simplify.c: Include cgraph.h.
+ 	(c_genericize): Genericize nested functions.
+ 	* gimplify.c (gimplify_expr): Use DECL_SAVED_INSNS to access
+ 	the struct function for the context.
+ 	* Makefile.in (c-simplify.o): Update dependencies.
+ 
+ 2004-01-21  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	PR opt/13767
+ 	* tree-cfg.c (simple_goto_p): Remove NONLOCAL_LABEL check.
+ 
+ 2004-01-21  Dale Johannesen  <dalej@apple.com>
+ 
+ 	* tree-dfa.c: Fix comment.
+ 
+ 2004-01-21  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR opt/13681
+ 	* tree-ssa-operands.c (get_expr_operands): Handle (&x + c).
+ 
+ 	* tree-ssa-ccp.c (maybe_fold_offset_to_component_ref): Handle
+ 	flexible array members and lookalikes.
+ 
+ 2004-01-21  Dale Johannesen  <dalej@apple.com>
+ 
+ 	* tree-ssa-dom.c (cprop_into_stmt):  Add convert call
+ 	to prevent type mismatches.
+ 
+ 2004-01-21  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (load_modified_phi_result): PARM_DECL is okay
+ 	to not have a defbb.
+ 	(rename_1): Add a comment.
+ 
+ 2004-01-21  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (find_equivalent_equality_comparison): Treat
+ 	CONVERT_EXPRs just like NOP_EXPRs.
+ 	(record_equivalences_from_stmt): Similarly.
+ 	(thread_across_edge): Fix formatting goof.
+ 
+ 	* tree-ssa-dom.c (thread_across_edge): Remove bogus restriction
+ 	which prevents threading around to the top of a loop.
+ 
+ 	* tree-ssa-dom.c (thread_across_edge): Handle SWITCH_EXPRs in the
+ 	target block in addition to COND_EXPRs.
+ 
+ 	* tree-ssa-dom.c (thread_across_edge): Create equivalences for
+ 	PHIs before looking at the statements in the destination
+ 	block.
+ 
+ 2004-01-20  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* fold-const.c (fold_convert): Rename to fold_convert_const.
+ 	(fold_convert_const): Change arguments to take a tree_code,
+ 	a type and the operand/expression to be converted.  Return
+ 	NULL_TREE if no simplification is possible.  Add support for
+ 	FIX_CEIL_EXPR and FIX_FLOOR_EXPR in addition to FIX_TRUNC_EXPR.
+ 	(fold): Handle FIX_CEIL_EXPR and FIX_FLOOR_EXPR.
+ 	Adjust call to fold_convert to match new fold_convert_const.
+ 	Avoid modifying the tree passed to fold in-place.
+ 	(nondestructive_fold_unary_to_constant): Likewise, simplify
+ 	call to fold_convert to match new fold_convert_const.
+ 
+ 2004-01-20  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-alias-ander.c (andersen_op_assign): Update
+ 	prototype. Make this handle &x in the operands using
+ 	the addrargs parameter.
+ 	(andersen_init): Turn off ip_partial until variables
+ 	aliasing variables in other functions is resolved.
+ 	(andersen_add_var): Use newly renamed alias_var_new_with_aterm.
+ 	Fix comment.
+ 	(andersen_add_var_same): Ditto.
+ 	(andersen_function_call): Use ip_partial, not flag_unit_at_a_time.
+ 	* tree-alias-common.c (get_values_from_constructor): Add bitmap
+ 	and int * arguments. Used to mark operands that we are taking
+ 	address of.
+ 	(get_alias_var_decl): We should never see FIELD_DECL's right now.
+ 	(intra_function_call): Reverse ordering for slightly faster
+ 	projection merging.
+ 	(find_op_of_decl): New function.
+ 	(find_func_aliases): Use it.
+ 	Comment x = foo.y case.
+ 	Move get_alias_var_decl of arguments so we only call it if
+ 	necessary.
+ 	Handle address of arguments in operations.
+ 	(create_fun_alias_var): tvar->var.
+ 	Set context of fakeargs.
+ 	Set context of fakedecls.
+ 	Set DECL_PTA_ALIASVAR of RETURN_DECL's.
+ 	(create_fun_alias_var_ptf): tvar->var.
+ 	Set context of fakedecls.
+ 	(create_alias_vars): Only create alias vars for globals
+ 	with DECL_INITIAL's.
+ 	* tree-alias-common.h (struct tree_alias_ops):
+ 	Update op_assign arguments.
+ 	(may_alias): Fix comment.
+ 	(same_points_to_set): Ditto.
+ 	(empty_points_to_set): Ditto.
+ 	* tree-alias-type.h: Rename alias_tvar_new_with_aterm
+ 	-> alias_var_new_with_aterm.
+ 	* tree-alias-type.c: Ditto.
+ 
+ 2004-01-20  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-sra.c (get_scalar_for_field): Validate field.
+ 	(create_scalar_copies): Iterate over rhs fields too.
+ 
+ 2004-01-19  Dale Johannesen  <dalej@apple.com>
+ 
+ 	* params.def:  Add PARAM_MAX_CALLS_GLOBAL_VAR and
+ 	PARAM_MAX_CLOBBERED_VARS_GLOBAL_VAR.
+ 	params.h:  Ditto.
+ 	tree-dfa.c:  Use them.
+ 	doc/invoke.texi:  Document them.
+ 
+ 2004-01-19  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa.c (insert_phi_nodes_for): Always use fully pruned
+ 	SSA form.
+ 
+ 	* tree-flow.h: Update copyright dates.
+ 	(register_new_def): Declare.
+ 	* tree-ssa-dom.c: Update copyright dates.
+ 	Add tracking of current definition of each program variable just
+ 	like we do when rewriting into SSA form.
+ 	(get_value_for, set_value_for): Handle either an SSA_NAME or
+ 	regular variable.
+ 	(tree_ssa_dominator_optimize): Initialize and update CURRDEFS.
+ 	If we thread through a block with real statements, the destination
+ 	of those statements must be rewritten too.
+ 	(thread_across_edge): Skip nop statements at the start of a
+ 	block.
+ 	(dom_opt_initialize_block_local_data): Clear block_defs
+ 	appropriately.
+ 	(record_equivalences_from_phis): Accept walk_data structure.
+ 	Call register_new_def appropriately.
+ 	(optimize_stmt): Call register_new_defs_for_stmt.
+ 	(dom_opt_finalize_block): Restore CURRDEFS appropriately.
+ 	(register_new_definitions_for_stmt): New.
+ 	* tree-ssa.c: Update copyright dates.
+ 	(register_new_def): No longer static.  Accept additional argument
+ 	for the table to hold the new definition.  Callers updated.
+ 
+ 	* gimplify.c: Update copyright dates.
+ 	* tree-cfg.c: Likewise.
+ 	* tree.h: Likewise.
+ 
+ 	* tree-iterator.c, tree-iterator.c: Use GCC rather than GNU CC.
+ 	* tree-ssa-pre.c, tree-ssa-live.h: Likewise.
+ 
+ 2004-01-19  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* timevar.def (TV_TREE_SPLIT_EDGES): New timevar.
+ 	* tree-ssa-pre.c (split_critical_edges): Move from here
+ 	(pass_pre): Add PROP_no_crit_edges as required.
+ 	* tree-cfg.c (split_critical_edges): to here.
+ 	(pass_split_crit_edges): New pass.
+ 	* tree-optimize.c (tree_optimization_passes): Add NEXT_PASS
+ 	(split_crit_edges).
+ 	* tree-pass.h: Add PROP_no_crit_edges.
+ 	(pass_split_crit_edges): Declared.
+ 
+ 2004-01-19  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* tree-mudflap.c (mf_build_check_statement_for): Tolerate
+ 	incoming locus NULL pointer.
+ 
+ 2004-01-18  Richard Henderson  <rth@redhat.com>
+ 
+ 	* builtins.c (simplify_builtin_strcpy): Export.  Take strlen argument.
+ 	(simplify_builtin_strncpy, simplify_builtin_strcmp): Similarly.
+ 	(simplify_builtin_strncmp): Similarly.
+ 	(simplify_builtin): Update to match.
+ 	* expr.h (simplify_builtin_strcmp, simplify_builtin_strncmp,
+ 	simplify_builtin_strcpy, simplify_builtin_strncpy): Declare.
+ 	* tree-pass.h (pass_fold_builtins): New.
+ 	* tree-optimize.c (init_tree_optimization_passes): Add it.
+ 	* tree-ssa-ccp.c (ccp_fold_builtin): Handle BUILT_IN_STRCPY,
+ 	BUILT_IN_STRNCPY, BUILT_IN_STRCMP, BUILT_IN_STRNCMP.
+ 	(get_strlen): Don't cast to size_t.
+ 	(execute_fold_all_builtins, pass_fold_builtins): New.
+ 
+ 2004-01-19  Jan Hubicka  <jh@suse.cz>
+ 
+ 	PR opt/13729
+ 	* cgraphunit.c (cgraph_finalize_compilation_unit): Fix memory leak.
+ 	(cgraph_remove_unreachable_nodes):  Do not mix analyzed and
+ 	DECL_SAVED_TREE flags.
+ 
+ 2004-01-18  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-sra.c (REALPART_INDEX, IMAGPART_INDEX): Remove.
+ 	(sra_candidates, needs_copy_in): Use a bitmap.  Update all users.
+ 	(struct sra_elt, sra_elt_hash, sra_elt_eq): New.
+ 	(sra_map_size): Remove.
+ 	(sra_map): Use a htab_t.
+ 	(lookup_scalar): Update to match.
+ 	(get_scalar_for_field, get_scalar_for_complex_part): Likewise.
+ 	(scalarize_structure_assignment): Use annotate_all_with_locus.
+ 	(csc_build_component_ref): Remove index argument.
+ 	(csc_build_complex_part): Take tree_code, not index.
+ 	(create_scalar_copies): Don't collect indicies.
+ 	(emit_scalar_copies): New.
+ 	(scalarize_modify_expr, scalarize_tree_list): Use it.
+ 	(scalarize_return_expr): Likewise.
+ 	(scalarize_structures): Simplify needs_copy_in iteration.
+ 	(scalarize_call_expr): Use annotate_all_with_locus.
+ 	(dump_sra_map_trav): Split from ...
+ 	(dump_sra_map): ... here.  Update for hash table.
+ 	(tree_sra): Update for new datastructures.
+ 
+ 2004-01-18  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-cfg.c (dump_function_to_file): Move ";; Function" header ...
+ 	* tree-optimize.c (execute_one_pass): ... here.
+ 
+ 2004-01-17  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-alias-common.c: s@_typevar@_var@g, s@_TVAR@_VAR@g,
+ 	s@_TYPEVAR@_VAR@g
+ 	* tree-alias-common.h: Ditto
+ 	* tree.h: Ditto
+ 	* tree-alias-ander.c: Ditto
+ 	* tree-alias-type.c: Ditto
+ 	* tree-alias-type.h: Ditto
+ 
+ 2004-01-17  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-complex.c (gimplify_val): Copy TREE_BLOCK.
+ 
+ 	* tree-complex.c (gimplify_val): New.
+ 	(extract_component, do_binop, do_unop): Use it.
+ 
+ 2004-01-17  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-complex.c (expand_complex_operations_1): Fix RETURN_EXPR
+ 	thinko in last change.
+ 
+ 2004-01-18  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* cfghooks.c (split_block): Don't redirect edges.
+ 	* cfgrtl.c (rtl_split_block): Do it here.
+ 	* tree-cfg.c (tree_split_block): Ditto.
+ 
+ 2004-01-17  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-cfg.c (verify_expr): Tidy.  Check COND_EXPR for boolean
+ 	condition.
+ 
+ 2004-01-17  Jan Hubicka  <jh@suse.cz>
+ 
+ 	PR optimization/11761
+ 	* Makefile.in: Remove tree-simple.c from GTYized files.
+ 	* tree-dfa.c (find_addressable_vars): Parse nontrivial ADDR_EXPRs.
+ 	(discover_nonconstant_array_refs_r): New static function.
+ 	(discover_nonconstant_array_refs): New global function.
+ 	* tree-flow.h (discover_nonconstant_array_refs): Declare.
+ 	* tree-simple.c (types_checked, types_in_memory): Kill.
+ 	(struct_needs_to_live_in_memory): Kill.
+ 	(needs_to_live_in_memory): aggregates are safe.
+ 	* tree-ssa.c (rewrite_out_of_ssa): Call the new function.
+ 
+ 2004-01-17  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR opt/13718
+ 	* tree-complex.c (expand_complex_comparison): Handle COND_EXPR.
+ 	(expand_complex_operations_1): Likewise.
+ 
+ 2004-01-17  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-sra.c (scalarize_tree_list): Take bitmap argument to
+ 	avoid emitting duplicates.  Update all callers.
+ 
+ 2004-01-17  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR opt/13718
+ 	* tree-complex.c (expand_complex_comparison): New.
+ 	(expand_complex_operations_1): Handle EQ_EXPR and NE_EXPR.
+ 
+ 2004-01-16  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-alias-common.c (get_alias_var): Handle BIT_FIELD_REF.
+ 	(find_func_aliases): Ditto.
+   	Update for fact that basic component_refs are no longer
+ 	is_gimple_variable.
+ 	(create_fun_alias_var): Set DECL_CONTEXT on our faked declarations.
+ 	(pass_del_pta): PTA dumps info on delete, so it needs a name.
+ 
+ 2004-01-16  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* tree-optimize.c (init_tree_optimization_passes): Run DCE
+ 	before the first dominator optimization pass.
+ 
+ 2004-01-15  Brian Booth <bbooth@redhat.com>
+ 	    Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-sra.c (REALPART_INDEX, IMAGPART_INDEX): New.
+ 	(sra_map_size): New.
+ 	(make_temp): New.
+ 	(mark_all_vdefs): New.
+ 	(is_sra_candidate_decl): New.
+ 	(is_sra_candidate_ref): New.
+ 	(lookup_scalar): Use sra_map_size, make_temp.
+ 	(get_scalar_for_field): Rename from get_scalar_for.
+ 	(get_scalar_for_complex_part): New.
+ 	(can_be_scalarized_p): Handle COMPLEX_TYPE.
+ 	(scalarize_component_ref): Handle REAL/IMAGPART_EXPR.
+ 	(scalarize_structure_assignment): Tidy.
+ 	(find_candidates_for_sra): Handle COMPLEX_TYPE, return bool.
+ 	(csc_assign, csc_build_component_ref): Split out from ...
+ 	(create_scalar_copies): ... here.  Handle COMPLEX_TYPE.
+ 	(csc_build_complex_part): New.
+ 	(scalarize_modify_expr): Use is_sra_candidate_foo.
+ 	(scalarize_tree_list): Likewise.
+ 	(scalarize_return_expr): Likewise.
+ 	(dump_sra_map): Split out from ...
+ 	(tree_sra): ... here.  Tidy.
+ 
+ 2004-01-15  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* tree-mudflap.c (mf_xform_derefs): Accept void return statements.
+ 
+ 2004-01-15  Andrew MacLeod  <amacleod@redhat.com>
+ 	    Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (remove_local_expressions_from_table): New function
+ 	extracted from dom_opt_finalize_block.
+ 	(restore_vars_to_originalvalue): Likewise.
+ 	(extract_true_false_edges_from_block): Likewise.
+ 	(thread_across_edge): Handle if (cond) too.
+ 	(dom_opt_finalize_block): Use new functions.  Handle if (cond).
+ 
+ 	* tree-ssa-dom.c (thread_across_edge): Accept dom_walk argument.
+ 	Record temporary equivalences created by PHIs and temporarily
+ 	const/copy propagate into conditionals.
+ 	(dom_opt_finalize_block): Thread across an edge to a dominated block
+ 	if the dominated block has PHIs.  Remove temporary equivalenecs
+ 	created by PHIs in thread_across_edge.  Update code to restore the
+ 	various hash tables to use the actual varray rather than a local
+ 	copy of the varray.
+ 	(simplify_rhs_and_lookup_avail_expr): Set the condition's code
+ 	before settings its operands.
+ 
+ 	* tree-ssa.c (create_temp): Use add_referenced_var rather than
+ 	an incomplete inline of its behavior.  Also make sure to
+ 	set is_dereferenced_{load,store}, is_call_clobbered and is_stored.
+ 
+ 	* tree-ssa-live.c (build_tree_conflict_graph): Correctly handle
+ 	case where the result of a PHI is unused.
+ 
+ 2004-01-15  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* cfghooks.c (predicted_by_p): Add missing return.
+ 
+ 2004-01-15  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-ssa-dom.c (optimize_stmt): Dump new statement if
+ 	folding succeeded.
+ 
+ 2004-01-15  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-cfg.c: Fix comment typos.
+ 	* tree-eh.c: Likewise.
+ 	* tree-inline.c: Likewise.
+ 	* tree-optimize.c: Likewise.
+ 	* tree-ssa.c: Likewise.
+ 	* tree-ssa-dom.c: Likewise.
+ 	* tree-ssa-operands.c: Likewise.
+ 	* tree-ssa-pre.c: Likewise.
+ 	* tree-tailcall.c: Likewise.
+ 
+ 2004-01-14  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* basic-block.h: Include predict.h
+ 	(tree_predicted_by_p, rtl_predicted_by_p,  rtl_predict_edge,
+ 	predict_edge_def): Declare.
+ 	* cfghooks.h (cfg_hooks): add predict_edge and predicted_by_p
+ 	(predict_edge, predicted_by_p): Declare.
+ 	* cfghooks.c (predict_edge, predicted_by_p): Declare.
+ 	* cfgrtl (rtl_cfg_hooks, cfg_layout_rtl_cfg_hook): Add new hooks.
+ 	* cse.c (struct cse_basic_block_data): Rename enum values to not
+ 	conflict with profile.h; update all uses.
+ 	* predict.c:  Include tree-flow.h, ggc.h, tree-dump.h
+ 	(predicted_by_p): Rename to ...
+ 	(rtl_predicted_by_p): .. this one; make global
+ 	(tree_predicted_by_p): New.
+ 	(dump_prediction): Add FILE argument.
+ 	(predict_edge): Rename to ...
+ 	(rtl_predict_edge): .. this one.
+ 	(tree_predict_edge): New.
+ 	(combine_predictions_for_insn): Update calls of predict_edge.
+ 	(predict_loops): Break out from ...
+ 	(estimate_probability): ... here; update comments; move updating
+ 	of unknown probabilities from ...
+ 	(estimate_bb_frequencies): ... here.
+ 	(combine_predictions_for_bb): New.
+ 	(tree_predict_by_opcode): New.
+ 	(tree_estimate_probability): New.
+ 	* predict.def (PRED_TREE_POINTER, PRED_TREE_OPCODE_POSITIVE,
+ 	PRED_TREE_OPCODE_NONEQUAL, PRED_TREE_FPOPCODE): New predictors.
+ 	* predict.h: Add include guard.
+ 	(predict_edge, predict_edge_def): Move prototypes to basic_block.h
+ 	* tree-cfg.c (tree_cfg_hooks): Add prediction hooks.
+ 	* tree-dump.c (dump_files): Add profile.
+ 	* tree-flow.h (struct edge_prediction): New structure.
+ 	(struct bb_ann_d): Add field predictions.
+ 	(tree_estimate_probability): Declare.
+ 	* tree-optimize.c (optimize_function_tree): Call tree_estimate_probability.
+ 	* tree.h (tree_dump_index): Add TDI_profile.
+ 	* tree-pass.h (pass_profile): Declare.
+ 
+ 2004-01-14  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* basic-block.h (find_basic_blocks, cleanup_cfg,
+ 	delete_unreachable_blocks, merge_seq_blocks): Declare.
+ 	* cfgcleanup.c (merge_seq_blocks): New.
+ 	* output.h (find_basic_blocks, cleanup_cfg, delete_unreachable_blocks):
+ 	Declarations moved to basic-block.h.
+ 	* tree-cfg.c (tree_merge_blocks, tree_can_merge_blocks_p): New.
+ 	(cleanup_tree_cfg): Call merge_seq_blocks.
+ 	(tree_cfg_hooks): Add tree_can_merge_blocks_p and tree_merge_blocks.
+ 
+ 2004-01-14  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-cfg.c (tree_make_forwarder_block): Fix.
+ 
+ 2004-01-14  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-complex.c: New file.
+ 	* Makefile.in (OBJS-common): Add it.
+ 	* tree-pass.h (pass_lower_complex): New.
+ 	* tree-optimize.c (init_tree_optimization_passes): Add it.
+ 
+ 2004-01-14  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* Makefile.in (tree-ssa-loop.o): Add cfgloop.h dependency.
+ 	(cfghooks.o): Add TIMEVAR_H and toplev.h dependency.
+ 	* basic-block.h (struct edge_def): Use ir_type instead testing of
+ 	cfg_hooks directly.
+ 	(tidy_fallthru_edge, tidy_fallthru_edges, dump_bb, verify_flow_info):
+ 	Declaration removed.
+ 	* cfg.c (verify_flow_info, dump_bb): Moved to cfghooks.c.
+ 	* cfgcleanup.c (try_simplify_condjump): Changed due to change of
+ 	tidy_fallthru_edge.
+ 	* cfghooks.c: Include timevar.h and toplev.h.
+ 	(cfg_hooks): Made static.
+ 	(tree_register_cfg_hooks, ir_type): New.
+ 	(verify_flow_info, dump_bb): Moved from cfg.c.
+ 	(redirect_edge_and_branch, redirect_edge_and_branch_force,
+ 	split_block, split_block_after_labels, move_block_after,
+ 	delete_basic_block, split_edge, create_basic_block,
+ 	create_empty_bb, can_merge_blocks_p, merge_blocks,
+ 	make_forwarder_block, tidy_fallthru_edge, tidy_fallthru_edges): New.
+ 	* cfghooks.h (struct cfg_hooks): Modified.
+ 	(redirect_edge_and_branch, redirect_edge_and_branch_force, split_block,
+ 	delete_basic_block, split_edge, create_basic_block, can_merge_blocks_p,
+ 	merge_blocks, make_forwarder_block): Changed into functions.
+ 	(loop_optimizer_init, loop_optimizer_finalize): Removed.
+ 	(HEADER_BLOCK, LATCH_EDGE): Moved into cfgloop.c.
+ 	(tidy_fallthru_edge, tidy_fallthru_edges, create_empty_bb,
+ 	verify_flow_info, dump_bb, ir_type): Declare.
+ 	(cfg_layout_rtl_cfg_hooks): Declare.
+ 	* cfglayout.c (copy_bbs): Don't call add_to_dominance_info.
+ 	* cfgloop.c (HEADER_BLOCK, LATCH_EDGE): Moved from cfghooks.h.
+ 	(update_latch_info, mfb_keep_just, mfb_keep_nonlatch): New functions.
+ 	(canonicalize_loop_headers): Use new semantics of make_forwarder_block.
+ 	* cfgloop.h (rtl_loop_optimizer_init, rtl_loop_optimizer_finalize):
+ 	Removed.
+ 	(loop_optimizer_init, loop_optimizer_finalize): Declare.
+ 	* cfgloopmanip.c (split_loop_bb): Don't update dominators.
+ 	(remove_bbs): Don't call remove_bbs.
+ 	(create_preheader): Use make_forwarder_block.
+ 	(mfb_keep_just, mfb_update_loops): New static functions.
+ 	* cfgrtl.c (cfg_layout_split_block, rtl_split_block,
+ 	rtl_make_forwarder_block, rtl_create_basic_block,
+ 	rtl_delete_block, rtl_split_block, rtl_merge_blocks,
+ 	tidy_fallthru_edge, rtl_split_edge, cfg_layout_merge_blocks,
+ 	cfg_layout_split_edge): Parts not specific to rtl moved to cfghooks.c
+ 	(tidy_fallthru_edges): Moved to cfghooks.c.
+ 	(rtl_move_block_after): New.
+ 	(redirect_edge_with_latch_update, update_cfg_after_block_merging):
+ 	Removed.
+ 	(rtl_cfg_hooks, cfg_layout_rtl_cfg_hooks): Modified.
+ 	* ifcvt.c (merge_if_block, find_cond_trap, find_if_case_1,
+ 	find_if_case_2): Don't update dominators.
+ 	* loop-init.c (rtl_loop_optimizer_init, rtl_loop_optimizer_finalize):
+ 	Replaced by rtl_loop_optimizer_init and rtl_loop_optimizer_finalize.
+ 	* loop-unswitch.c (unswitch_loop): Don't call add_to_dominance_info.
+ 	* toplev.c (rest_of_handle_loop2): Enter cfglayout mode here.
+ 	* tree-cfg.c (create_bb): Modified to suit create_basic_block hook.
+ 	(tree_redirect_edge_and_branch_1): Merged into
+ 	tree_redirect_edge_and_branch.
+ 	(create_blocks_annotations): Removed.
+ 	(tree_loop_optimizer_init, tree_loop_optimizer_finalize): Removed.
+ 	(tree_make_forwarder_block, remove_bb, tree_split_edge,
+ 	tree_redirect_edge_and_branch, tree_split_block,
+ 	tree_move_block_after): Partially moved to cfghooks.c.
+ 	(tree_duplicate_bb): New.
+ 	(PENDING_STMT): Moved to tree-flow.h.
+ 	(tree_register_cfg_hooks): Moved to cfghooks.c.
+ 	(build_tree_cfg): Don't call create_blocks_annotations.
+ 	(factor_computed_gotos, make_blocks): Use create_empty_bb.
+ 	(cleanup_tree_cfg): Use delete_unreachable_blocks.
+ 	(remove_unreachable_blocks, insert_bb_before): Removed.
+ 	(remove_phi_nodes_and_edges_for_unreachable_block): Modified.
+ 	(tree_find_edge_insert_loc, thread_jumps): Use cfg hooks.
+ 	(bsi_commit_edge_inserts): Update_annotations argument removed.
+ 	(tree_cfg_hooks): Modified.
+ 	* tree-flow.h (PENDING_STMT): Moved from tree-cfg.c.
+ 	(insert_bb_before, remove_unreachable_blocks,
+ 	remove_phi_nodes_and_edges_for_unreachable_block, tree_split_edge):
+ 	Declaration removed.
+ 	(bsi_commit_edge_inserts): Declaration changed.
+ 	(tree_duplicate_bb): Declare.
+ 	* tree-sra.c (scalarize_structures): Changed due to
+ 	bsi_commit_edge_inserts change.
+ 	* tree-ssa-dom.c (tree_ssa_dominator_optimize): Use
+ 	delete_unreachable_blocks.
+ 	* tree-ssa-loop.c: Include cfgloop.h.
+ 	* tree-ssa-pre.c (split_critical_edges, tree_perform_ssapre): Use cfg
+ 	hooks.
+ 	* tree-ssa.c (rewrite_trees, rewrite_vars_out_of_ssa): Changed due to
+ 	bsi_commit_edge_inserts change.
+ 	(ssa_redirect_edge): Record the phi arguments on the redirected edge.
+ 	* tree-tailcall.c (eliminate_tail_call): Clean stored phi arguments.
+ 
+ 2004-01-13  Richard Henderson  <rth@redhat.com>
+ 
+ 	* gimplify.c (gimplify_lhs_complex_part_expr): Remove.
+ 	(gimplify_modify_expr): Don't call it.
+ 
+ 	* tree-alias-common.c (HAVE_BANSHEE): Make sure it's defined.
+ 	(pass_build_pta): Set name.
+ 
+ 2004-01-13  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-tailcall.c (eliminate_tail_call): Add phi nodes for the call
+ 	vdefs.
+ 	(find_tail_calls): Ignore returns with virtual operands.
+ 
+ 2004-01-12  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-pass.h: New file.
+ 	* gimple-low.c: Include tree-pass.h.
+ 	(lower_function_body): Make static, take no arguments.  Set
+ 	dont_emit_block_notes and call reset_block_changes here.
+ 	(pass_lower_cf): New.
+ 	* toplev.c (general_init): Call init_tree_optimization_passes.
+ 	* toplev.h (init_tree_optimization_passes): Declare.
+ 	* tree-alias-ander.c: Include tree-pass.h.
+ 	(tree_dump_file, tree_dump_flags): Remove.
+ 	(andersen_init): Don't dump_begin.
+ 	(andersen_cleanup): Don't dump_end.
+ 	* tree-alias-common.c: Include tree-pass.h, timevar.h.
+ 	(currptadecl): Remove.
+ 	(create_alias_vars): Make static, take no args.  Tidy ifdefs.
+ 	(delete_alias_vars): Likewise.  Protect vs PTA_ANDERSEN.
+ 	(pass_build_pta, pass_del_pta): New.
+ 	* tree-alias-common.h (create_alias_vars): Delete decl.
+ 	(delete_alias_vars): Likewise.
+ 	* tree-cfg.c: Include tree-pass.h.
+ 	(tree_dump_file, tree_dump_flags): Remove.
+ 	(build_tree_cfg): Don't timevar, do init_flow.  Ensure one bb.
+ 	Don't dump the function here.
+ 	(execute_build_cfg, pass_build_cfg): New.
+ 	(remove_useless_stmts): Make static, take no arguments.
+ 	(pass_remove_useless_stmts): New.
+ 	(remove_bb): Don't open the dump file.
+ 	* tree-dfa.c: Include tree-pass.h.
+ 	(tree_dump_file, tree_dump_flags): Remove.
+ 	(find_referenced_vars): Make static, take no args.  Do init_tree_ssa.
+ 	(compute_may_aliases): Similarly.  Don't timevar or open dump file.
+ 	Don't delete_alias_vars here.
+ 	(pass_referenced_vars, pass_may_alias): New.
+ 	* tree-dump.c (dump_files): Remove optimization dumps.
+ 	(extra_dump_files, extra_dump_files_in_use): New.
+ 	(extra_dump_files_alloced): New.
+ 	(dump_register): New.
+ 	(get_dump_file_info): New.
+ 	(dump_begin, dump_enabled_p, dump_flag_name): Use it.
+ 	(dump_enable_all): Handle extra_dump_files.
+ 	(dump_switch_p_1): Split out from dump_switch_p.
+ 	(dump_switch_p): Handle extra_dump_files.
+ 	* tree-dump.h (dump_register): Declare.
+ 	* tree-eh.c: Include tree-pass.h
+ 	(lower_eh_constructs): Make static, take no args.  Don't timevar,
+ 	don't dump function.
+ 	(pass_lower_eh): New.
+ 	* tree-flow.h (remove_useless_stmts, find_referenced_vars,
+ 	compute_may_aliases, lower_function_body, rewrite_out_of_ssa,
+ 	tree_ssa_ccp, tree_ssa_dominator_optimize, tree_ssa_dce,
+ 	tree_ssa_loop_opt, lower_eh_constructs, tree_sra): Remove.
+ 	(rewrite_into_ssa): Update decl.
+ 	* tree-mudflap.c: Include tree-pass.h.
+ 	(mudflap_function_decls): Make static, take no args, don't process
+ 	functions with mf_marked_p.
+ 	(mudflap_function_ops): Likewise.
+ 	(gate_mudflap, pass_mudflap_1, pass_mudflap_2): New.
+ 	(mudflap_enqueue_decl): Don't open dump file.
+ 	(mudflap_enqueue_constant): Likewise.
+ 	* tree-nomudflap.c: Include tree-pass.h.
+ 	(mudflap_c_function_decls, mudflap_c_function_ops): Remove.
+ 	(pass_mudflap_1, pass_mudflap_2): New.
+ 	* tree-optimize.c: Include tree-pass.h.
+ 	(optimize_function_tree): Remove.
+ 	(tree_dump_file, tree_dump_flags, vars_to_rename): New.
+ 	(all_passes): New.
+ 	(execute_gimple, pass_gimple): New.
+ 	(execute_rebuild_bind, pass_rebuild_bind): New.
+ 	(gate_all_optimizations, pass_all_optimizations): New.
+ 	(execute_del_cfg, pass_del_cfg): New.
+ 	(register_one_dump_file, register_dump_files): New.
+ 	(dup_pass_1, init_tree_optimization_passes): New.
+ 	(current_properties, last_verified): New.
+ 	(execute_todo, execute_one_pass, execute_pass_list): New.
+ 	(tree_rest_of_compilation): Remove -O0 passes.
+ 	* tree-sra.c: Include tree-pass.h, flags.h.
+ 	(tree_dump_file, tree_dump_flags, vars_to_rename): Remove.
+ 	(tree_sra): Make static, take no args.  Don't timevar or dump file.
+ 	(gate_sra, pass_sra): New.
+ 	* tree-ssa-ccp.c: Include tree-pass.h, flags.h.
+ 	(tree_dump_file, tree_dump_flags): New.
+ 	(tree_ssa_ccp): Make static, take no args.  Don't timevar or dump file.
+ 	(gate_ccp, pass_ccp): New.
+ 	(substitute_and_fold): Take no args.
+ 	* tree-ssa-dce.c: Include tree-pass.h, flags.h.
+ 	(tree_dump_file, tree_dump_flags): New.
+ 	(tree_ssa_dce): Make static, take no args.  Don't open dump file.
+ 	(gate_dce, pass_dce): New.
+ 	* tree-ssa-dom.c: Include tree-pass.h, flags.h.
+ 	(tree_dump_file, tree_dump_flags, vars_to_rename): Remove.
+ 	(tree_ssa_dominator_optimize): Make static, take no args, don't
+ 	timevar, don't dump file.
+ 	(gate_dominator, pass_dominator): New.
+ 	* tree-ssa-loop.c: Include tree-pass.h, flags.h.
+ 	(tree_dump_file, tree_dump_flags): Remove.
+ 	(tree_ssa_loop_opt): Make static, take no args, don't open dump file.
+ 	(gate_loop, pass_loop): New.
+ 	* tree-ssa-pre.c: Include tree-pass.h, flags.h.
+ 	(tree_dump_file, tree_dump_flags): Remove.
+ 	(execute_pre): Rename from tree_perform_ssapre, make static,
+ 	take no args, don't timevar, don't open dump file, don't allocate
+ 	vars_to_rename.
+ 	(gate_pre, pass_pre): New.
+ 	* tree-ssa.c: Include tree-pass.h.
+ 	(tree_dump_file, tree_dump_flags, vars_to_rename): Remove.
+ 	(rewrite_into_ssa): Take no arguments, don't open dump file.
+ 	(rewrite_out_of_ssa): Make static, take no args, don't timevar,
+ 	don't open dump file.  Disable TER if mudflap.
+ 	(pass_build_ssa, pass_del_ssa): New.
+ 	* tree-tailcall.c: Include tree-pass.h, flags.h.
+ 	(tree_dump_file, tree_dump_flags): Remove.
+ 	(tree_optimize_tail_calls_1): Rename from tree_optimize_tail_calls.
+ 	Make static, take only opt_tailcalls, don't dump file.
+ 	(execute_tail_recursion, gate_tail_calls, execute_tail_calls): New.
+ 	(pass_tail_recursion, pass_tail_calls): New.
+ 	* tree.h (enum tree_dump_index): Remove optimization dumps.
+ 	* Makefile.in (tree-alias-ander.o, tree-alias-common.o, tree-ssa.o,
+ 	tree-ssa-dom.o, tree-ssa-pre.o, tree-cfg.o, tree-tailcall.o,
+ 	tree-dfa.o, tree-eh.o, tree-ssa-loop.o, tree-optimize.o, gimple-low.o,
+ 	tree-mudflap.o, tree-ssa-dce.o, tree-ssa-ccp.o, tree-sra.o: Update
+ 	dependencies.
+ 
+ 2004-01-12  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* tree-mudflap.c (mf_xform_derefs): Restore instrumentation of
+ 	RETURN_EXPRs.
+ 
+ 2004-01-11  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-cfg.c (remove_usless_stmts_cond):  Fold statement.
+ 	(remove_useless_stmts_1):  Fold trees we know how to fold.
+ 
+ 2004-01-09  Richard Henderson  <rth@redhat.com>
+ 
+ 	* gimplify.c (gimplify_constructor): Merge into ...
+ 	(gimplify_init_constructor): ... here.  Handle COMPLEX_TYPE and
+ 	VECTOR_TYPE.
+ 	(gimplify_lhs_complex_part_expr): New.
+ 	(gimplify_modify_expr): Call it.
+ 	* tree-simple.c (is_gimple_rhs): Accept COMPLEX_EXPR.
+ 	* c-pretty-print.c (pp_c_initializer): Accept any type CONSTRUCTOR.
+ 	(pp_c_initializer_list): Fix code expectations for VECTOR_TYPE and
+ 	COMPLEX_TYPE.
+ 
+ 2004-01-09  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	PR optimization/13599
+ 	* tree-cfg.c (remove_useless_stmts_cond): Clear last-goto
+ 	before returning.
+ 
+ 2004-01-09  Richard Henderson  <rth@redhat.com>
+ 
+ 	* gimplify.c (gimplify_asm_expr): Fix ordering of ASM_INPUTS.
+ 
+ 2004-01-09  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* cgraph.h (cgraph_clone_inlined_nodes): Declare.
+ 	* cgraphunit.c (cgrpah_clone_inlined_nodes): Make global.
+ 	(cgraph_mark_inline_edge): Sanity check that size is positive.
+ 	(cgraph_decide_inlining): Fix typo.
+ 	* tree-optimize.c (tree_rest_of_compilation): Fix node duplication
+ 	code.
+ 
+ 2004-01-09  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-inline.c (estimate_num_insns_1): Fix.
+ 
+ 2004-01-09  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-alias-ander.c, tree-cfg.c, tree-dfa.c, tree-mudflap.c,
+ 	tree-sra.c, tree-ssa-ccp.c, tree-ssa-dce.c, tree-ssa-dom.c,
+ 	tree-ssa-loop.c, tree-ssa-pre.c, tree-ssa.c, tree-tailcall.c: Rename
+ 	dump_file and dump_flags to tree_dump_file/flags.
+ 
+ 2004-01-08  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* tree-mudflap.c (mf_build_string): Properly mf_mark string.
+ 	(mf_varname_tree): Remove redundant marking.
+ 	* tree-optimize.c (tree_rest_of_compilation): Skip mudflap processing
+ 	of mf_marked functions.
+ 	* c-mudflap.c (mflang_flush_calls): mf_mark synthetic function.
+ 
+ 2004-01-07  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (OBJS-common): Remove tree-must-alias.o
+ 	(tree-must-alias.o): Remove.
+ 	* common.opt (ftree-must-alias): Remove.
+ 	* flags.h (flag_tree_must_alias): Remove.  Update all users.
+ 	* timevar.def (TV_TREE_MUST_ALIAS): Remove.
+ 	* toplev.c (f_options): Remove entry for -ftree-must-alias.
+ 	* tree-alias-common.c (local_alias_vars): Add GTY marker.
+ 	(local_alias_varnums): Likewise.
+ 	* tree-dfa.c (aliases_computed_p): Declare.
+ 	(dump_variable): Show variable UID and dereferenced bits.
+ 	(compute_may_aliases): Add arguments 'vars_to_rename' and 'phase'.
+ 	Do not call create_alias_vars.
+ 	Call promote_call_clobbered_vars
+ 	Do debugging dumps.
+ 	Set 'aliases_computed_p' to true before returning.
+ 	(create_memory_tags): Call may_be_aliased.
+ 	Mark new memory tags for renaming.
+ 	(compute_alias_sets): Don't do debugging dumps.
+ 	(find_variable_in): Move from tree-must-alias.c
+ 	(remove_element_from): Likewise.
+ 	(find_addressable_vars): Likewise
+ 	(promote_call_clobbered_vars): New.
+ 	(get_memory_tag_for): Mark the tag volatile if the pointed-to type
+ 	is volatile.
+ 	* tree-dump.c (dump_files): Remove entry for tree-mustalias.
+ 	Add entries for tree-ssa7, tree-dom3 and tree-dce3.
+ 	* tree-flow-inline.h (may_be_aliased): New.
+ 	* tree-flow.h (may_be_aliased): Declare.
+ 	(aliases_computed_p): Declare.
+ 	(tree_compute_must_alias): Remove.
+ 	* tree-must-alias.c: Remove.
+ 	* tree-optimize.c: Include tree-alias-common.h.
+ 	(optimize_function_tree): Call create_alias_vars before going into
+ 	SSA form.
+ 	Do not compute aliases until after the first DOM and DCE passes.
+ 	Run DOM and DCE once more after computing may-aliases.
+ 	* tree-ssa-dom.c (propagate_copy): Merge the dereferenced bit flags
+ 	when copy propagating pointers.
+ 	* tree-ssa-operands.c (get_stmt_operands): Assume that the
+ 	statement has no volatile operands.
+ 	(get_expr_operands): When processing an INDIRECT_REF expressions,
+ 	mark the statement as having volatile operands if aliases have not
+ 	been computed.
+ 	(add_stmt_operand): If the variable may be aliased and aliasing has
+ 	not been computed yet, mark the statement as having volatile
+ 	operands.
+ 	* tree-ssa.c (init_tree_ssa): Set aliases_computed_p to false.
+ 	(delete_tree_ssa): Likewise.
+ 	* tree.h (tree_dump_index): Remove TDI_mustalias.
+ 	Add TDI_dom_3, TDI_ssa_7 and TDI_dce_3.
+ 	* doc/invoke.texi: Remove must-alias documentation.
+ 
+ 2004-01-07  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dce.c (find_useful_stmts): Do not consider PHIs for
+ 	virtual operands inherently necessary.
+ 
+ 2004-01-07  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-dfa.c (free_df_for_stmt, free_df): New functions.
+ 	(compute_immediate_uses_for_stmt): Record uses in VDEFs.
+ 	* tree-flow.h (free_df, kill_redundant_phi_nodes): Declare.
+ 	* tree-optimize.c (optimize_function_tree): Call
+ 	kill_redundant_phi_nodes.
+ 	* tree-ssa-ccp.c (finalize): Call free_df.
+ 	* tree-ssa.c (replace_immediate_uses, raise_value,
+ 	kill_redundant_phi_nodes): New functions.
+ 
+ 2004-01-06  Jeff Law  <law@redhat.com>
+ 
+ 	* tree.h (FUNCTION_RECEIVES_NONLOCAL_GOTO): Kill.
+ 	* tree-cfg.c (make_exit_edges, is_ctrl_altering_stmt):  Use
+ 	current_function_has_nonlocal_label instead of
+ 	FUNCTION_RECEIVES_NONLOCAL_GOTO.
+ 	* gimplify.c (gimplify_expr): Set has_nonlocal_label in the
+ 	appropriate function's struct function rather than setting
+ 	a bit in the FUNCTION_DECL.
+ 
+ 2004-01-06  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* expr.c (string_constant): Recognize array_ref.
+ 
+ 2004-01-06  Richard Henderson  <rth@redhat.com>
+ 
+ 	* builtins.c (builtin_save_expr): New.
+ 	(expand_builtin_mathfn, expand_builtin_mathfn_2,
+ 	expand_builtin_strcmp, expand_builtin_strncmp,
+ 	expand_builtin_strcat, fold_builtin_cabs): Use it.
+ 
+ 2004-01-06  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* fold-const.c (fold): Do not rebuild comparison when nothing
+ 	changed.
+ 
+ 2004-01-05  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-ssa-ccp.c (ccp_fold_builtin): Return early for builtins
+ 	taking no arugment.
+ 
+ 2004-01-05  Steven Bosscher  <steven@gcc.gnu.org>
+ 
+ 	* tree-ssa-dce.c: Clean up whitespace.
+ 
+ 	* tree-cfg.c (tree_verify_flow_info): Fix complaint about
+ 	missing or wrong labels in the targets of a conditional branch.
+ 
+ 2004-01-05  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-ssa-dom.c (record_equivalences_from_incoming_edge): Check
+ 	for signed zeros before recording value.
+ 	* Makefile.in (tree-ssa-dom.o): Depend on real.h.
+ 
+ 2004-01-05  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (cprop_into_stmt): Remove hack which prevented
+ 	copy propagation into statements with virtual operands, but no
+ 	real operands.
+ 
+ 	* tree-ssa-dom.c (tree_ssa_dominator_optimize): Correctly handle
+ 	the case where an edge we wish to redirect is split by the out of SSA
+ 	code.
+ 
+ 2004-01-05  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-tree.h (struct lang_type): Add enum_min, enum_max.
+ 	* c-decl.c (finish_enum): Set them.  Set TYPE_MIN/MAX_VALUE to
+ 	the limits of the compatible type, not to the enumerators.
+ 	(check_bitfield_type_and_width): Use them.
+ 	(finish_struct): Clear allocated struct lang_type.
+ 	* gimplify.c (gimplify_switch_expr): Remove special handling of
+ 	outer cast in a switch.
+ 	* tree-ssa-dom.c (record_equivalences_from_incoming_edge): Likewise.
+ 
+ 2004-01-05  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (added_phis): Removed.
+ 	Remove gt-tree-ssa-pre.h.
+ 	(process_left_occs_and_kills): ASM_EXPR's block load pre.
+ 
+ 	* Makefile.in (GTFILES): Don't process tree-ssa-pre.c.
+ 	gt-tree-ssa-pre.h isn't a gtfile anymore.
+ 
+ 2004-01-05  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* config.gcc (powerpc-*-darwin*): Make libbanshee rebuild
+ 	on PPC darwin.
+ 
+ 2004-01-05  Richard Henderson  <rth@redhat.com>
+ 
+ 	* gimplify.c (gimplify_expr): Move check for error_mark inside
+ 	the main loop.
+ 
+ 2004-01-04  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* Makefile.in (cgraph.o, cgraphunit.o): Add intl.h dependency.
+ 	* cgraph.c (create_edge, dump_cgraph): Update to use inline_failed
+ 	* cgraph.h (cgraph_edge): Replace inline_call by inline_failed
+ 	(cgraph_inline_p): Add extra argument reason.
+ 	* cgraphunit.c: Minor formating fixes.
+ 	cgraph_first_inlined_callee): New functions.
+ 	(record_call_1): Record builtins too.
+ 	(cgraph_analyze_function): Update inline_failed messages.
+ 	(cgraph_mark_functions_to_output, cgraph_expand_function, cgraph_inlined_into,
+ 	cgraph_inlined_callees, cgraph_estimate_growth): Update to use inline_failed.
+ 	(cgraph_check_inline_limits): Likewise; Add argument reason.
+ 	(cgraph_set_inline_failed): New static function.
+ 	(cgraph_decide_inlining_of_small_function, cgraph_decide_inlining): Set
+ 	reasons.
+ 	(cgraph_inline_p): Add new argument reason.
+ 	* tree-inline.c (expand_call_inline):  Update warning.
+ 
+ 2004-01-04  Andreas Jaeger  <aj@suse.de>
+ 
+ 	* common.opt: Re-order some options in ASCII collating orders.
+ 
+ 2004-01-03  Richard Henderson  <rth@redhat.com>
+ 
+ 	* toplev.c (rest_of_compilation): Fixup merge error wrt
+ 	check_function_return_warnings.
+ 
+ 	* tree.h (FUNCTION_RECEIVES_NONLOCAL_GOTO): Use unsigned_flag.
+ 
+ 2004-01-02  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* c-decl.c (duplicate_decls):  Output DIE of extern inline function
+ 	only when it can be inlined.
+ 	* c-objc-common.c (c_disregard_inline_limits):  When not inlining
+ 	extern inline functions do not disregard.
+ 	* cgraphunit.c (cgraph_analyze_function): When not inlining do not set
+ 	inline.
+ 	(cgraph_decide_inlining): Limit work done when not inlining.
+ 	(cgrpah_decide_inlining_incrementally): Likewise.
+ 	* tree-optimize.c (tree_rest_of_compilation): Do not call
+ 	optimize_inline_calls
+ 	when there is nothing to inline.
+ 
+ 2004-01-01  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-common.c (c_expand_expr): Don't handle STMT_EXPR.
+ 	* c-objc-common.c (c_objc_common_finish_file): Use expand_expr.
+ 	* c-semantics.c (lang_expand_stmt, lang_expand_decl_stmt,
+ 	expand_cond, genrtl_do_pushlevel, genrtl_goto_stmt, genrtl_expr_stmt,
+ 	genrtl_expr_stmt_value, genrtl_decl_stmt, genrtl_if_stmt,
+ 	genrtl_while_stmt, genrtl_do_stmt_1, genrtl_do_stmt,
+ 	genrtl_return_stmt, genrtl_for_stmt, genrtl_break_stmt,
+ 	genrtl_continue_stmt, genrtl_scope_stmt, genrtl_switch_stmt,
+ 	genrtl_case_label, genrtl_compound_stmt, genrtl_asm_stmt,
+ 	genrtl_cleanup_stmt, expand_stmt, find_reachable_label,
+ 	find_reachable_label_1, expand_unreachable_if_stmt,
+ 	expand_unreachable_stmt): Remove.
+ 	* c-common.h: Update.
+ 
+ 2003-12-31  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-mudflap.c (mflang_register_call): Remove.
+ 	(mflang_flush_calls): Use start_function/finish_function.
+ 	* tree-mudflap.c (mf_init_extern_trees): Tidy.
+ 	(mf_decl_cache_locals): Fix chaining for empty body.
+ 	(deferred_static_decl_labels): Remove.
+ 	(deferred_static_decls_init): Remove.
+ 	(mudflap_register_call): New.
+ 	(mudflap_enqueue_decl): Use it.  Remove label argument.
+ 	(mudflap_enqueue_constant): Likewise.
+ 	(mudflap_finish_file): Update to match.
+ 	* tree-mudflap.h (mudflap_enqueue_decl): Remove label argument.
+ 	(mudflap_enqueue_constant): Likewise.
+ 	(mflang_register_call): Remove.
+ 	* tree-nomudflap.c (mudflap_enqueue_decl): Remove label argument.
+ 	(mudflap_enqueue_constant): Likewise.
+ 	* tree-optimize.c (tree_ssa_finish): Don't create NULL bodies.
+ 	* varasm.c (make_decl_rtl): Update mudflap_enqueue_decl call.
+ 	(output_constant_def_contents): Similarly for mudflap_enqueue_constant.
+ 
+ 2003-12-26  Sebastian Pop  <s.pop@laposte.net>
+ 
+ 	* tree-cfg.c (print_loop, print_pred_bbs, print_succ_bbs,
+ 	debug_loop_ir, print_loop_ir): New.
+ 	* tree-flow.h (debug_loop_ir, print_loop_ir): Declare.
+ 
+ 2003-12-23  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-cfg.c (tree_find_edge_insert_loc): Do not use the target
+ 	block as an insertion location if the target block has PHI nodes.
+ 
+ 2003-12-23  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* cgraphunit.c (cgraph_mark_inline): Accept argument edge; return
+ 	next edge not redirected.
+ 	(cgraph_recursive_inlining_p): Simplify.
+ 	(cgraph_decide_inlining*): Update calls of cgraph_mark_inline.
+ 
+ 2003-12-22  Toon Moene  <toon@moene.indiv.nluug.nl>
+ 
+ 	* tree-alias-common.c (find_func_aliases): Do not call
+ 	intra_function_call for languages assuring no aliasing between
+ 	arguments (by themselves) and global memory.
+ 
+ 2003-12-21  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-ssa-ccp.c (fold_stmt): Return when there is no RHS
+ 	(get_rhs): Return for RETURN_EXPR with no operand.
+ 
+ 2003-12-21  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-cfg.c (tree_make_forwarder_block): Use split_block.
+ 	(tree_split_block): New.
+ 	(tree_cfg_hooks): Add tree_split_block.
+ 	(tree_loop_optimizer_init):  Enable force_single_succ_latches.
+ 	* cfgloopmanip.c (loop_split_edge_with): Don't update dominators.
+ 	* cfgrtl.c (rtl_split_edge, cfg_layout_split_edge): Update dominators.
+ 
+ 2003-12-19  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-dfa.c (alias_stats_d): New structure.
+ 	(alias_stats): New variable.
+ 	(create_memory_tags): Zero out alias_stats.
+ 	(dump_alias_stats): New function.
+ 	(compute_alias_sets): Call it if TDF_STATS is set.
+ 	(may_alias_p): Collect the various statistics.
+ 
+ 2003-12-19  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* gimple-low.c (expand_var_p): Always expand volatiles.
+ 	* tree-dfa.c (find_referenced_vars): Move up in the file.
+ 	(create_memory_tags): New local function.
+ 	(compute_may_aliases): Call it.
+ 	(add_referenced_var): Move code to create memory tags and create
+ 	aliasing arrays to create_memory_tags.
+ 	(get_memory_tag_for): Don't mark memory tags volatile.  Mark them
+ 	addressable.
+ 	* tree-flow.h (var_ann_d): Add bitfields is_dereferenced_store and
+ 	is_dereferenced_load.
+ 	(add_call_clobbered_var): Remove.
+ 	* tree-ssa-operands.c (check_optype_freelist): Mark arguments
+ 	unused.
+ 	(add_optype_freelist): Likewise.
+ 	(add_stmt_operand): Don't add operands for volatile variables.
+ 
+ 2003-12-19  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* dominance.c: Fix comment typos.
+ 	* et-forest.c: Likewise.
+ 	* et-forest.h: Likewise.
+ 	* tree-cfg.c: Likewise.
+ 	* tree-eh.c: Likewise.
+ 	* tree-mudflap.c: Likewise.
+ 	* tree-optimize.c: Likewise.
+ 	* tree-pretty-print.c: Likewise.
+ 	* tree-ssa-ccp.c: Likewise.
+ 	* tree-ssa-dom.c: Likewise.
+ 	* tree-ssa.c: Likewise.
+ 	* tree-tailcall.c: Likewise.
+ 	* tree.def: Likewise.
+ 	* tree.h: Likewise.
+ 
+ 2003-12-18  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/12453
+ 	* c-simplify.c (stmt_expr_last_stmt): Split out from...
+ 	(gimplify_stmt_expr): Here.
+ 	* c-common.h: Declare it.
+ 
+ 2003-12-18  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* et-forest.h (et_forest_create, et_forest_delete,
+ 	et_forest_add_node, et_forest_add_edge, et_forest_remove_node,
+ 	et_forest_remove_edge, et_forest_parent,
+ 	et_forest_common_ancestor, et_forest_node_value,
+ 	et_forest_enumerate_sons): Declarations removed.
+ 	(struct et_node): New.
+ 	(et_new_tree, et_free_tree, et_set_father, et_split, et_nca,
+ 	et_below): Declare.
+ 	* et-forest.c (struct et_forest_occurrence, struct et_forest,
+ 	struct et_forest_node): Removed.
+ 	(et_forest_create, et_forest_delete,
+ 	et_forest_add_node, et_forest_add_edge, et_forest_remove_node,
+ 	et_forest_remove_edge, et_forest_parent,
+ 	et_forest_common_ancestor, et_forest_node_value,
+ 	et_forest_enumerate_sons, splay, remove_all_occurrences,
+ 	find_leftmost_node, find_rightmost_node, calculate_value): Removed.
+ 	(struct et_occ): New.
+ 	(et_nodes, et_occurences): New.
+ 	(set_depth, set_depth_add, set_prev, set_next, et_recomp_min,
+ 	et_check_occ_sanity, et_check_sanity, et_check_tree_sanity,
+ 	record_path_before_1, record_path_before, check_path_after_1,
+ 	check_path_after, et_splay, et_new_occ, et_new_tree,
+ 	et_free_tree, et_set_father, et_split, et_nca, et_below): New.
+ 	* basic-block.h (struct basic_block_def): New field dom.
+ 	(struct dominance_info): Type removed.
+ 	(calculate_dominance_info, free_dominance_info,
+ 	nearest_common_dominator, set_immediate_dominator,
+ 	get_immediate_dominator, dominated_by_p, get_dominated_by,
+ 	add_to_dominance_info, delete_from_dominance_info,
+ 	recount_dominator, redirect_immediate_dominators,
+ 	iterate_fix_dominators, verify_dominators): Declarations
+ 	changed.
+ 	(enum dom_state): New.
+ 	(dom_computed): New variable.
+ 	(first_dom_son, next_dom_son): Declare.
+ 	* dominance.c (struct dominance_info): Removed.
+ 	(BB_NODE, SET_BB_NODE): Removed.
+ 	(calculate_dominance_info, free_dominance_info,
+ 	nearest_common_dominator, set_immediate_dominator,
+ 	get_immediate_dominator, dominated_by_p, get_dominated_by,
+ 	add_to_dominance_info, delete_from_dominance_info,
+ 	recount_dominator, redirect_immediate_dominators,
+ 	iterate_fix_dominators, verify_dominators,
+ 	debug_dominance_info): Work over new datastructure.  Access
+ 	dominance datastructures through CFG.
+ 	(assign_dfs_numbers, compute_dom_fast_query, first_dom_son,
+ 	next_dom_son): New.
+ 	* tree-cfg.c (pdom_info): Variable removed.
+ 	(create_bb): Add the block to the dominance information.
+ 	(cleanup_tree_cfg): Let updating of the dominance on the
+ 	individual passes.
+ 	(remove_bb): Don't handle pdom.
+ 	(cleanup_control_expr_graph, tree_make_forwarder_block,
+ 	thread_jumps): Invalidate the dominators.
+ 	(tree_split_edge): Update the dominators.
+ 	(compute_dominance_frontiers_1, compute_dominance_frontiers,
+ 	tree_verify_flow_info, tree_loop_optimizer_init): Use the new
+ 	interface to dominators.
+ 	* domwalk.c (walk_dominator_tree): Do not use dom_children.
+ 	* tree-flow-inline.h (add_dom_child, remove_dom_child,
+ 	clear_dom_children, dom_children): Removed.
+ 	* tree-flow.h (struct bb_ann_d): Dom_children field removed.
+ 	(add_dom_child, dom_children, build_dominator_tree): Declaration
+ 	removed.
+ 	(compute_dominance_frontiers): Declaration changed.
+ 	* tree-optimize.c (optimize_function_tree): Free dominance
+ 	information in the end.
+ 	* tree-ssa-dom.c (tree_ssa_dominator_optimize,
+ 	dom_opt_finalize_block): Do not use dom_children.
+ 	* tree-ssa-pre.c (fast_a_dominates_b, build_dfs_id_array_1,
+ 	build_dfs_id_array): Removed.
+ 	(pre_idom, dfs_id, dfs_id_last): Variables removed.
+ 	(build_dfn_array): Do not use dom_children.
+ 	(eref_compare, load_modified_phi_result, rename_1, reaching_def,
+ 	finalize_1, collect_expressions, tree_perform_ssapre): Use the
+ 	new interface to the dominance information.
+ 	* tree-ssa.c (struct mark_def_sites_global_data): Idom field
+ 	removed.
+ 	(set_livein_block, verify_use, verify_phi_args,
+ 	rewrite_into_ssa, mark_def_sites, verify_ssa): Use the new
+ 	interface to the dominance information.
+ 	(build_dominator_tree): Removed.
+ 	* tree-tailcall.c (tree_optimize_tail_calls): Invalidate
+ 	dominance information.
+ 	* bt-load.c (dom): Variable removed.
+ 	(augment_live_range, combine_btr_defs, migrate_btr_def,
+ 	migrate_btr_defs, branch_target_load_optimize): Updated for the
+ 	new interface for dominance information.
+ 	* cfglayout.c (copy_bbs): Removed loops argument. Updated for
+ 	the new interface for dominance information.
+ 	* cfglayout.h (copy_bbs): Declaration changed.
+ 	* cfgloop.c (flow_loop_pre_header_find, flow_loops_cfg_dump,
+ 	flow_loop_scan, canonicalize_loop_headers, flow_loops_find): Updated
+ 	for the new interface for dominance information.
+ 	(flow_loop_scan): Loops argument removed.
+ 	(flow_loops_free): Don't release dominators.
+ 	* cfgloop.h (struct cfg): Dom field removed.
+ 	(flow_loop_scan, loop_split_edge_with, simple_loop_p,
+ 	just_once_each_iteration_p, split_loop_bb): Declaration changed.
+ 	* cfgloopanal.c (simple_loop_exit_p, simple_increment,
+ 	just_once_each_iteration_p, simple_loop_p): Remove loops argument.
+ 	Updated for the new interface for dominance information.
+ 	* cfgloopmanip.c (remove_bbs, find_path, create_preheader,
+ 	split_loop_bb, loopify, duplicate_loop_to_header_edge,
+ 	force_single_succ_latches, loop_split_edge_with): Ditto.
+ 	(create_loop_notes): Free the dominators.
+ 	* gcse.c (dominators): Variable removed.
+ 	(free_code_hoist_mem, compute_code_hoist_data, hoist_code):
+ 	Updated for the new interface for dominance information.
+ 	* ifcvt.c (post_dominators): Variable removed.
+ 	(mark_loop_exit_edges, merge_if_block, find_if_header,
+ 	find_cond_trap, find_if_case_1, find_if_case_2, if_convert):
+ 	Updated for the new interface for dominance information.
+ 	* loop-init.c (rtl_loop_optimizer_init,
+ 	rtl_loop_optimizer_finalize): Ditto.
+ 	* loop-unroll.c (decide_peel_simple, decide_peel_once_rolling,
+ 	decide_peel_completely, decide_unroll_stupid,
+ 	decide_unroll_constant_iterations,
+ 	decide_unroll_runtime_iterations): Loops argument removed.
+ 	Updated for the new interface for dominance information.
+ 	(unroll_and_peel_loops, peel_loops_completely,
+ 	unroll_loop_runtime_iterations): Updated for the new interface for
+ 	dominance information.
+ 	* loop-unswitch.c (may_unswitch_on_p, unswitch_loops,
+ 	unswitch_single_loop, unswitch_loop): Updated for the new
+ 	interface for dominance information.
+ 	* predict.c (process_note_predictions, process_note_prediction,
+ 	estimate_probability, note_prediction_to_br_prob): Ditto.
+ 	* sched-rgn.c (find_rgns, init_regions): Ditto.
+ 	* toplev.c (rest_of_handle_branch_prob): Free the dominators.
+ 
+ 2003-12-18  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (edges_to_redirect, redirection_targets): Merged
+ 	into a single varray "redirection_edges".
+ 	(tree_ssa_dominator_optimize): Twiddle initialization, finalization
+ 	and accessors to redirection information based on combining varrays.
+ 	Get the threading destination from the saved edge rather than from a
+ 	saved block.  Mark variables appearing in PHIs at the jump thread
+ 	destination to be taken out of SSA form.
+ 	(thread_across_edge): Save the edge into the destination block
+ 	rather than the destination block itself.  Twiddle based on
+ 	combining varrays of jump threading information.
+ 	* tree-flow.h (tree_block_forwards_to): Returns an edge rather than
+ 	a block.
+ 	* tree-cfg.c (tree_block_forwards_to): Return the edge leading to
+ 	the target block rather than the target block itself.
+ 
+ 2003-12-18  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-dfa.c (get_memory_tag_for): Don't put things with different
+ 	points-to sets in the same memory tag.
+ 
+ 2003-12-18  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* c-common.c (handle_nonnull_attribute, check_function_nonnull):
+ 	Initialize arg_num.
+ 	* c-format.c (handle_format_attribute): Initialize format_num.
+ 	* rtlanal.c (get_related_value): Initialize get_jump_table_offset
+ 
+ 2003-12-18  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* stmt.c (expand_start_loop, expand_loop_continue_here,
+ 	expand_end_loop): Don't create loop notes.
+ 
+ 2003-12-18  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 	    Jeff Law  <law@redhat.com>
+ 
+ 	* tree-cfg.c (tree_node_shared_p): Explicitly allow sharing of
+ 	CST nodes.
+ 	* tree-simple.c (is_gimple_rhs): Allow CST nodes.
+ 	(is_gimple_min_invariant): Reject constants with TREE_OVERFLOW set.
+ 	* tree-ssa-ccp (visit_assignment): Test is_gimple_min_invariant
+ 	after munging bitfields.
+ 	* tree-ssa-dom.c (record_equivalences_from_stmt): Similarly.
+ 
+ 2003-12-17  Jan Hubicka  <jh@suse.cz>
+ 
+ 	Based on patch by Dale Johannesen
+ 	* expr.c (MOVE_RATIO, CLEAR_RATIO): Move to ...
+ 	* expr.h (MOVE_RATIO, CLEAR_RATIO): ... here
+ 
+ 2003-12-17  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* Makefile.in (sibcall.o): Kill.
+ 	(tree-tailcall.o): Add except.h dependency
+ 	* sibcall.c: Kill.
+ 	(purge_reg_equiv_notes, purge_mem_unchanging_flag): Move to ...
+ 	* calls.c (purge_reg_equiv_notes, purge_mem_unchanging_flag) ... here.
+ 	(expand_call): Do not produce placeholders; do not deal with tail
+ 	recursion; set tail_call_emit.
+ 	(fixup_tail_calls): New.
+ 	* expr.h (fixup_tail_calls): Declare.
+ 	* toplev.c (rest_of_handle_sibling_calls): Kill.
+ 	(rest_of_compialtion): Do not use rest_of_handle_sibling_calls;
+ 	call fixup_tail_calls.
+ 	* tree-dump.c (dump_files): Add tail2
+ 	* tree-flow.h (tree_optimize_tail_calls): Update prototype.
+ 	* tree-optimize.c (optimize_function_tree): Do tail optimization twice.
+ 	* tree-tailcall.c: Inlucde except.h
+ 	(suitable_for_tail_call_opt_p): New.
+ 	(optimize_tail_call): Add opt_tailcalls argument; optimize tailcalls.
+ 	(tree_optimize_tail_calls): Add opt_tailcalls/pass arguments.
+ 	* tree.h (CALL_EXPR_TAILCALL): New.
+ 	(tree_dump_index): Add tail2
+ 	* function.h (struct function): Add tail_call_emit field.
+ 
+ 2003-12-17  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-inline.c (estimate_num_insns_1):  Check that all nodes are
+ 	known; add missing nodes; fix MODIFY_EXPR
+ 
+ 2003-12-16  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR middle-end/12920
+ 	* stor-layout.c (layout_type): Just return if type is
+ 	error_mark_node.
+ 	* c-decl.c (grokdeclarator): Immediately layout an
+ 	ARRAY_TYPE used in a pointer-to-array declarator.
+ 
+ 2003-12-16  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (may_alias_p): If VAR and PTR are pointers with the
+ 	same alias set, return false.
+ 	(get_memory_tag_for): Group based on alias set classes, not on
+ 	conflicting alias sets.
+ 	* tree-must-alias.c (promote_var): Don't bring aliases over when
+ 	all the may-aliases of a non-promotable variable are promoted.
+ 
+ 2003-12-16  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-flow-inline.h (free_vuse, free_vdefs): Moved to
+ 	tree-ssa-operands.c
+ 	(get_def_ops, get_use_ops, get_vdef_ops, get_vuse_ops): Use the new
+ 	more direct structure pointer.
+ 	(get_use_op_ptr, get_def_op_ptr): Cast is no longer necessary.
+ 	* tree-flow.h (struct stmt_ann_d): Replace operands and voperands
+ 	pointers with pointers directly to the operand types.
+ 	* tree-ssa-dom.c (cprop_into_stmt): Use new stmt based interface to
+ 	free virtual operands.  Check virtual bases of both VUSE and VDEF.
+ 	* tree-ssa-operands.c (struct voperands_d): Declare here, used only
+ 	for previous_vops during stmt operand construction.
+ 	(struct vecmanage_d, vecmanage_add_segmen, vecmanage_add_special,
+ 	vecmanage_init, vecmanage_tree_ptr_init, vecmanage_fini, check_free,
+ 	vecmanage_new_vector, vecmanage_new_tree_ptr_vector,
+ 	vecmanage_free_vector): Remove.
+ 	(allocate_ssa_op_vec, free_ssa_op_vec, allocate_ssa_virtual_op_vec,
+ 	allocate_operands_t, allocate_voperands_t): Remove.
+ 	(finalize_new_ssa_operands, inalize_new_ssa_virtual_operand): Remove.
+ 	(struct freelist_d): New. List of free operand structures.
+ 	(check_optype_freelist): New. Choose memory from freelist, if available.
+ 	(add_optype_freelist): New. Add structure to freelist, if appropriate.
+ 	(allocate_def_optype): New. Allocate a def operand list from GC.
+ 	(allocate_use_optype): New. Allocate a useoperand list from GC.
+ 	(allocate_vdef_optype): New. Allocate a vdef operand list from GC.
+ 	(allocate_vuse_optype): New. Allocate a vuse operand list from GC.
+ 	(free_uses, free_defs, free_vuses, free_vdefs): Use GC and the freelist.
+ 	(remove_vuses, remove_vdefs): New.  External interface to remove virtual
+ 	operands.
+ 	(init_ssa_operands, fini_ssa_operands): Ensure the free list is empty.
+ 	(finalize_ssa_defs, finalize_ssa_use, finalize_ssa_vdefs,
+ 	finalize_ssa_vuses): Use new direct pointers from the stmt annotation.
+ 	(append_vdef, append_vuse): No need to hack prev_vops pointer now.
+ 	(get_stmt_operands): use new freeing interface, keep previous vops in
+ 	their own local structure for now, passing its address around.
+ 	* tree-ssa-operands.h (struct def_optype_d, struct use_optype_d,
+ 	struct vdef_optype_d, struct vuse_optype_d): Implement as a single
+ 	dynamically allocated structure.
+ 	(struct operands_d, struct operands_d): Remove.
+ 	* tree-ssa-pre.c (subst_phis): Remove virtual operands using new funcs.
+ 
+ 2003-12-16  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-cfg.c (verify_addr_expr): Rename to ....
+ 	(verify_expr):  ... this one; check that no SSA names are on
+ 	freelist.
+ 	(verify_stmt, verify_stmts): Update calls of verify_addr_expr.
+ 
+ 	Revert until initializers are made language independent:
+ 	* cgraphunit.c (record_call_1): Do not call analyze_expr hook
+ 	* langhooks-def.h (LANG_HOOKS_CALLGRAPH_ANALYZE_EXPR): Kill.
+ 	(LANG_HOOKS_CALLGRAPH_INITIALIZER): Update.
+ 	* longhooks.h (lang_hooks_for_callgraph): Kill analyze_expr.
+ 
+ 2003-12-16  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-pretty-print.c (dump_bb_header): Show block number when
+ 	there is no label.
+ 	(pp_cfg_jump): Show labels in addition to block numbers.
+ 	(dump_generic_bb_buff): Always call dump_bb_header.
+ 
+ 2003-12-16  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* cgraphunit.c (cgraph_remove_unreachable_nodes): Fix typo;
+ 	improve comments; cleanup linked list mantenance.
+ 
+ 2003-12-15  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-sra.c (can_be_scalarized_p): Reject volatile variables.
+ 
+ 	* sibcall.c (skip_copy_to_return_value): Initialize 'hardret' and
+ 	'softret'.
+ 
+ 2003-12-16  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* cgraph.c (cgraph_remove_node): Ignore DECL_EXTERNAL clones.
+ 	* cgraphunit.c (verify_cgraph_node): Do not insist on unemmited extern
+ 	inline functions to be valid.
+ 	(cgraph_finalize_compilation_unit):  Fix ordering.
+ 	(cgraph_mark_functions_to_output): Do not insist on DECL_EXTERNAL
+ 	nodes to be reclaimed.
+ 	(cgraph_remove_unreachable_nodes): New function.
+ 	(cgraph_decide_inlining): use it.
+ 
+ 2003-12-15  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* Makefile.in (TREE_FLOW_H): Add dependence on tree-ssa-operands.h
+ 	(OBJS-common): Add tree-ssa-operands.o
+ 	(tree-ssa-operands.o): Add dependencies.
+ 	(GTFILES): Add tree-ssa-operands.[ch].
+ 	* tree-dfa.c (get_stmt_operands, get_expr_operands, add_stmt_operand,
+ 	note_addressable, add_def, add_use, add_vde, add_vuse,
+ 	add_call_clobber_ops, add_call_read_ops): Moved to tree-ssa-operands.c.
+ 	(compute_immediate_uses_for_stmt): Use new optypes interface.
+ 	(cleanup_operand_arrays): Delete.
+ 	(collect_dfa_stats_r): Use new optypes interface.
+ 	(get_call_flags): Moved to tree-ssa-operands.c.
+ 	(vdefs_disappeared_p, mark_new_vars_to_rename): Use optypes interface.
+ 	* tree-flow-inline.h (def_ops, use_ops, vdef_ops, vuse_ops): Use new
+ 	optypes.
+ 	(free_vuses): New. Clear and release vuses.
+ 	(free_vdefs): New. Clear and release vdefs.
+ 	(get_use_ops_ptr): New. Get address of a use op.
+ 	(get_def_ops_ptr): New. Get address of a use op.
+ 	(get_vdef_result_ptr): New. Get address of a use op.
+ 	(get_vdef_op_ptr): New. Get address of a use op.
+ 	(get_vuse_op_ptr): New. Get address of a use op.
+ 	(start_ssa_stmt_operands): New. Entry point to start processing stmt
+ 	operands.
+ 	* tree-flow.h (struct operands_d, struct voperands_d): Move to
+ 	tree-ssa-operands.h
+ 	(struct stmt_ann_d): Add GTY markers to operands.
+ 	* tree-pretty-print.c (dump_vops): Use optypes interface.
+ 	* tree-sra.c (create_scalar_copies): Use optypes interface.
+ 	(scalarize_structures, scalarize_modify_exp): Use optypes interface.
+ 	* tree-ssa-ccp.c (visit_stmt, ccp_fold, initialize, replace_uses_in,
+ 	likely_value, set_rhs): Use optypes interface.
+ 	* tree-ssa-dce.c (find_useful_stmts, stmt_useful_p, process_worklist):
+ 	Use optypes interface.
+ 	* tree-ssa-dom.c (thread_across_edge, thread_jumps_walk_stmts): Use
+ 	optypes interface.
+ 	(cprop_into_stmt): Rewrite using new interface.
+ 	(eliminate_redundant_computations, record_equivalences_from_stmt,
+ 	optimize_stmt, avail_expr_hash, avail_expr_eq): Use optypes interface.
+ 	* tree-ssa-live.c (create_ssa_var_map, calculate_live_on_entry,
+ 	build_tree_conflict_graph,register_ssa_partitions_for_vars): Use
+ 	optypes interface.
+ 	* tree-ssa-pre.c (names_match_p, maybe_find_rhs_use_for_var,
+ 	expr_phi_insertion, same_e_version_real_occ_real_occ, opnum_of_phi,
+ 	generate_expr_as_of_bb, generate_vops_as_of_bb, subst_phis,
+ 	load_modified_real_occ_real_occ, same_e_version_phi_result, can_insert,
+ 	get_default_def, reaching_def, process_left_occs_and_kills,
+ 	collect_expressions): Use optypes interface.
+ 	* tree-ssa.c (mark_def_sites, check_replaceable, find_replaceable_in_bb,
+ 	dump_replaceable_exprs, rewrite_trees, verify_ssa, rewrite_stmt): Use
+ 	optypes interface.
+ 	(init_tree_ssa): Initialize new operand data structures.
+ 	(delete_tree_ssa): Free new operand structures.
+ 	* tree.h (VDEF_RESULT, VDEF_OP, NUM_VDEFS): Move to tree-ssa-operands.h.
+ 
+ 	* tree-ssa-operands.h: New file.
+ 	(struct def_optype_d): New. Structure for stmt defs.
+ 	(struct use_optype_d): New. Structure for stmt uses.
+ 	(struct vdef_optype_d): New. Structure for stmt vdefs.
+ 	(struct vuse_optype_d): New. Structure for stmt vuses.
+ 	(USE_OPS, STMT_USE_OPS, NUM_USES, USE_OP_PTR, USE_OP): Macros to
+ 	access stmt uses.
+ 	(DEF_OPS, STMT_DEF_OPS, NUM_DEFS, DEF_OP_PTR, DEF_OP): Macros to
+ 	access stmt defs.
+ 	(VDEF_OPS, STMT_VDEF_OPS, NUM_VDEFS, VDEF_RESULT_PTR, VDEF_RESULT,
+ 	VDEF_OP_PTR, VDEF_OP): Macros to access stmt vdefs.
+ 	(VUSE_OPS, STMT_VUSE_OPS, NUM_VUSES, VUSE_OP_PTR, VUSE_OP): Macros to
+ 	access stmt vuses.
+ 	(struct operands_d, struct voperands_d): moved from tree-dfa.c.
+ 	* tree-ssa-operands.c: New file.
+ 	(build_defs, build_uses, build_vdefs, build_vuses): New static varrays.
+ 	(struct vecmanage_d): New. Struct to manage non-GC vectors.
+ 	(vecmanage_add_segment): New. Add a new segment to a vector manager.
+ 	(vecmanage_add_special): New. Add a large vector to the special list.
+ 	(vecmanage_init): Initialize a vector manager.
+ 	(vecmanage_tree_ptr_init): New. Initialize a vector manager for tree *.
+ 	(vecmanage_fini): New. Release vector manager memory.
+ 	(check_free): New. Look for free memory in the vector maanger.
+ 	(vecmanage_new_vector): New. Allocate a vector.
+ 	(vecmanage_new_tree_ptr_vector): New. Allocate a vector of 'tree *'.
+ 	(vecmanage_free_vector): New. Free a vector.
+ 	(free_ssa_op_vec): New. Free an ssa operand's memory.
+ 	(allocate_ssa_op_vec): New. Allocate a vector for use/defs.
+ 	(allocate_ssa_virtual_op_vec): New. Allocate a vector for vuse/vdefs.
+ 	(allocate_operands_t): New. Allocate an operand structure.
+ 	(allocate_voperands_t): New. Allocate a virtual operand structure.
+ 	(free_uses): New. Clear and release uses.
+ 	(free_defs): New. Clear and release defs.
+ 	(init_ssa_operands): New. Initialize ssa operand management.
+ 	(fini_ssa_operands): New. Cleanup ssa operand management.
+ 	(finalize_new_ssa_operands): New. Commit current operands.
+ 	(finalize_new_ssa_virtual_operands): New. Commit current virtual ops.
+ 	(finalize_ssa_defs): New. Commit and verify stmt definitions.
+ 	(finalize_ssa_uses): New. Commit and verify stmt uses.
+ 	(finalize_ssa_vdefs): New. Commit and verify stmt virtual definitions.
+ 	(finalize_ssa_vuses): New. Commit and verify stmt virtual uses.
+ 	(finalize_ssa_stmt_operands): New. Commit all stmt operands.
+ 	(verify_start_operands): New. Verify build mechanism is ready for a new
+ 	stmt.
+ 	(append_def): Renamed from add_def, and moved from tree-dfa.c.
+ 	(append_use): Renamed from add_def, and moved from tree-dfa.c.
+ 	(append_vdef): Renamed from add_def, and moved from tree-dfa.c.
+ 	(append_vuse): Renamed from add_def, and moved from tree-dfa.c.
+ 	(add_vuse): New. Entry point to add a vuse to a stmt.
+ 	(get_call_flags): Moved from tree-dfa.c
+ 	(get_stmt_operands, get_expr_operands, add_stmt_operand): Moved from
+ 	tree-dfa.c, and use new optype interface.
+ 	(note_addressabe, add_call_clobber_ops, add_call_read_ops): Moved from
+ 	tree-dfa.c
+ 
+ 2003-12-15  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-optimize.c (optimize_function_tree): Call BITMAP_XFREE.
+ 
+ 2003-12-15  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	PR optimization/12747
+ 
+ 	* tree-cfg.c (verify_addr_expr): Simplify predicates.
+ 	* tree-must-alias.c (addresses_needed): Declare as file local.
+ 	(can_be_promoted): New.
+ 	(tree_compute_must_alias): Call it.
+ 	Remove promoted variables from call_clobbered_vars.
+ 	(find_addressable_vars): Update comment.
+ 	Remove argument.  Update callers.
+ 	(promote_var): Always clear TREE_ADDRESSABLE.
+ 	Don't remove promoted variables from call_clobbered_vars.
+ 	If the promoted variable is in the may-alias set of a
+ 	non-promotable variable, copy its alias set into the alias set of
+ 	the non-promotable variable.
+ 	(find_variable_in): Update comment.
+ 	* tree-sra.c (can_be_scalarized_p): Reject structures with
+ 	__complex__ fields in them.
+ 
+ 2003-12-15  Diego Novillo  <dnovillo@redhat.com>
+ 	    Jason Merrill <jason@redhat.com>
+ 
+ 	PR optimization/12747
+ 
+ 	* Makefile.in (tree-simple.o): Add dependency on bitmap.h and
+ 	$(GGC_H).
+ 	(GTFILES): Add tree-simple.c.
+ 	* tree-simple.c: Include ggc.h and bitmap.h.
+ 	(is_gimple_non_addressable_1): Remove.  Update all callers.
+ 	(types_checked): New local variable.
+ 	(types_in_memory): New local variable.
+ 	(struct_needs_to_live_in_memory): New.
+ 	(needs_to_live_in_memory): New.
+ 	(is_gimple_reg): Call it.
+ 	(is_gimple_non_addressable): Call it.
+ 	(is_gimple_call_clobbered): Call it.
+ 	* tree-simple.h (needs_to_live_in_memory): Declare.
+ 
+ 2003-12-14  Andreas Jaeger  <aj@suse.de>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_output_function_epilogue): Handle
+ 	GNU F95.
+ 
+ 2003-12-14  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* cgraphunit.c (cgraph_expand_function):  Release function body when no
+ 	longer needed.
+ 	(lookup_recursive_calls): New function.
+ 	(cgraph_decide_recursive_inlining): Likewise.
+ 	(cgraph_decide_inlining_of_small_functions): Do recursive inlining.
+ 	* tree-inline.c: Include function.h
+ 	(copy_body): Choose saved body for recursive inlining.
+ 	(initialize_inlined_parameters): Likewise.
+ 	(expand_call_inline): Do not verify nodes when recursivly inlining,
+ 	insert ret_label into decl map.
+ 	* params.def (PARAM_MAX_INLINE_INSNS_RECURSIVE,
+ 	PARAM_MAX_INLINE_INSNS_RECURSIVE_AUTO,
+ 	PARAM_MAX_INLINE_RECURSIVE_DEPTH,
+ 	PARAM_MAX_INLINE_RECURSIVE_DEPTH_AUTO): New argument.
+ 	* invoke.texi (max-inline-insns-recursive, max-inline-recursive-depth):
+ 	Document.
+ 	* Makefile.in (tree-inline.o): Include function.h.
+ 
+ 2003-12-14  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* cgraphunit.c (record_call_1): Do not call analyze_expr hook
+ 	* langhooks-def.h (LANG_HOOKS_CALLGRAPH_ANALYZE_EXPR): Kill.
+ 	(LANG_HOOKS_CALLGRAPH_INITIALIZER): Update.
+ 	* longhooks.h (lang_hooks_for_callgraph): Kill analyze_expr.
+ 
+ 2003-12-13  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* timevar.def (TV_TREE_STMT_VERIFY, TV_CFG_VERIFY, TV_CGRAPH_VERIFY):
+ 	New timers.
+ 	* tree-cfg.c (verify_stmts):  Push/pop timevar.
+ 	* cfg.c: Include timevar.h
+ 	(verify_flow_info): Push/pop timevar.
+ 	* Makefile.in (cfg.o): Add dependnecy on TIMEVARS
+ 
+ 	* cgraph.c (cgraph_create_edge): Sanity check for duplicates;
+ 	initialize aux.
+ 	(cgraph_remove_node): Decrease cgraph_n_nodes; do not clear
+ 	DECL_SAVED_TREE when dumping.
+ 	(cgraph_dump_node): Break out from ...; print more information.
+ 	(cgraph_dump): ... here.
+ 	* cgraph.h (cgraph_node): Add aux field.
+ 	(dump_cgraph_node, verify_cgraph, verify_cgraph_node): Declare.
+ 	(cgraph_mark_inline_edge): Declare
+ 	* cgraphunit.c (error_found): New static variable.
+ 	(verify_cgraph_node_1): New static function.
+ 	(verify_cgraph_node, verify_cgraph): New global function.
+ 	(cgraph_expand_function): More sanity checks.
+ 	(cgraph_clone_inline_nodes): Destructivly clone DECL_EXTERNAL nodes.
+ 	(cgraph_mark_inline_edge): Make global.
+ 	(cgraph_decide_inlining): Remove extern inline functions never inlined.
+ 	(cgraph_decide_inlining_incrementally): Verify that function body is
+ 	still present.
+ 	(expand_all_functions): Verify that all nodes are reachable.
+ 	(cgraph_optimize): Verify cgraph and memory management.
+ 	* tree-inline.c (copy_body_r): All edges must be present.
+ 	(expand_call_inline): Sanity check newly created edges and nodes
+ 	being inlined.
+ 	(optimize_inline_calls): Sanity check that we've inlined everything.
+ 	* tree-optimize.c (tree_rest_of_compilation): Clone functions inlined
+ 	into cloned node.
+ 
+ 2003-12-13  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-flow.h (tree_ssa_useless_type_conversion_1): Declare.
+ 	* tree-flow.c (tree_ssa_useless_type_conversion_1): Break out from
+ 	from...; allow complex types whose subtypes match.
+ 	(tree_ssa_useless_type_conversion): ... here.
+ 
+ 2003-12-12  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (optimize_stmt): Don't call cleanup_control_expr
+ 	here.  Instead just note that we need to cleanup the cfg (which
+ 	will DTRT).
+ 
+ 	* timevar.def (TV_TREE_SSA_THREAD_JUMPS): Kill.
+ 	* tree-dump.c (dump_files): Kill .thread dump.
+ 	* tree.h (TDI_thread_jumps): Kill.
+ 	* tree-flow.h (tree_ssa_dominator_thread_jumps): Kill prototype.
+ 	* tree-optimize.c (optimize_function_tree): Kill call to
+ 	tree_ssa_dominator_thread_jumps.
+ 	* tree-ssa-dom.c (thread_through_phis): Kill.  We no longer need
+ 	to restrict threading through PHIs.
+ 	(tree_ssa_dominator_thread_jumps): Kill.
+ 	(tree_ssa_domiantor_optimize_1): Fold back into
+ 	tree_ssa_dominator_optimize.
+ 	(tree_ssa_dominator_optimize): Mark back edges in the flow graph.
+ 	Kill code which conditionalized the walk_tree callbacks based
+ 	on thread_through_phis.  When threading jumps, reorganize code
+ 	so that we can take the affected variables out of SSA form.
+ 	Mark new variables created by out-of-ssa code as needing to be
+ 	rewritten.
+ 	(thread_across_edge): Always allow threading through phis.
+ 	(thread_jumps_walk_stmts): Kill.
+ 
+ 	* tree-ssa.c (create_temp): When we create a new temporary, make
+ 	sure to put it into referenced_vars, give it an ID number and
+ 	a suitable mem_tag.
+ 	(eliminate_build): If we encounter a PHI argument which is an
+ 	SSA_VAR we are not rewriting out of SSA form, then just treat
+ 	it like a constant.
+ 	(rewrite_vars_out_of_ssa): New function.
+ 	* tree-flow.h (rewrite_vars_out_of_ssa): Prototype.
+ 	* tree-ssa-live.c (register_ssa_partitions_for_vars): New function.
+ 	* tree-ssa-live.h (register_ssa_partitions_for_vars): Prototype.
+ 
+ 2003-12-12  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-inline.c (remap_decl): Avoid invalid sharing.
+ 	* cp-tree.h (optimize_function): Kill.
+ 	* optimize.c (optimize_function): Kill.
+ 	* semantics.c (expand_body): Do not call optimize_function.
+ 
+ 2003-12-12  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* cgraphunit.c (cgraph_optimize):  Do not decide inlining when not
+ 	inlining
+ 
+ 2003-12-11  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-inline.c (initialize_inlined_parameters): Disable
+ 	constant propagation for non-gimple-min-invariant when
+ 	preserving gimple form.
+ 
+ 2003-12-11  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-ccp.c (widen_bitfield): Clear out unwanted high bits
+ 	even if the field's type is unsigned.
+ 	* tree-ssa-dom.c (record_equivalences_from_stmt): When creating
+ 	equivalences from stores, be more careful about non-constant
+ 	stores to bitfields.
+ 
+ 2003-12-11  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* opts.c (decode_options): Do not enable the tree loop optimizer by
+ 	default.
+ 	* tree-ssa-loop.c (tree_ssa_loop_opt): Remove ENABLE_CHECKING
+ 	guards.
+ 
+ 2003-12-10  Richard Henderson  <rth@redhat.com>
+ 
+ 	* builtins.c (expand_builtin_profile_func): New.
+ 	(expand_builtin): Use it.
+ 	* builtins.def (BUILT_IN_PROFILE_FUNC_ENTER): New.
+ 	(BUILT_IN_PROFILE_FUNC_EXIT): New.
+ 	* function.c (expand_function_start, expand_function_end): Don't
+ 	do function instrumentation here.
+ 	* gimplify.c (gimplify_function_tree): Do it here.
+ 
+ 	* c-opts.c (c_common_post_options): Don't ever use rtl inlining.
+ 
+ 2003-12-10  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* ifcvt.c (dead_or_predicable): Initialize local variable
+ 	'earliest'.
+ 	* tree-cfg.c (verify_stmt): Fix typo.
+ 	* tree-ssa-dom.c (propagate_value): New local function.
+ 	(cprop_into_stmt): Call it.
+ 	(cprop_into_phis): Call it.
+ 	(eliminate_redundant_computations): Call it.
+ 
+ 2003-12-10  Dale Johannesen  <dalej@apple.com>
+ 
+ 	* tree-dfa.c (compute_alias_sets):  Don't try to make
+ 	GLOBAL_VAR alias itself.
+ 
+ 2003-12-08  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* tree-must-alias.c (tree_compute_must_alias): Use
+ 	num_call_clobbered_vars and call_clobbered_var() instead of
+ 	poking in the call_clobbered_vars varray directly.
+ 
+ 2003-12-11  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* cgraph.c (cgraph_function_possibly_inlined_p): Fix syntax error on
+ 	gcc-2.95.
+ 
+ 2003-12-10  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	Revert
+ 
+ 	2003-12-07  Richard Henderson  <rth@redhat.com>
+ 
+ 		* c-common.c (c_address_looks_like_offsetof): New.
+ 		* c-common.h (c_address_looks_like_offsetof): Declare.
+ 		* c-typeck.c (build_unary_op) <ADDR_EXPR>: Use it.  Don't lower
+ 		address references not destined for offsetof.
+ 		(c_expand_return): Only look inside ARRAY_REF and COMPONENT_REF
+ 		when looking for returning address of local variable.
+ 		* expr.c (expand_expr_1): Don't dereference size
+ 		of unbounded arrays.
+ 		* gimplify.c (gimplify_addr_expr): Only fold
+ 		address of variable size array elements.
+ 		* tree-simple.c (is_gimple_min_invariant): Also check
+ 		is_gimple_variable before disallowing offset address for type.
+ 		* tree-ssa-ccp.c (maybe_fold_offset_to_aggregate_ref): New.
+ 		(maybe_fold_offset_to_component_ref): Use it.
+ 		(maybe_fold_stmt_indirect, maybe_fold_stmt_plus): Likewise.
+ 		(maybe_fold_offset_to_array_ref): Likewise.
+ 		Don't fail for division remainder non-zero.
+ 		* varasm.c (initializer_constant_valid_p) <ADDR_EXPR>: Use
+ 		handled_component_p and look inside references.
+ 		<MINUS_EXPR>: Always look past widening casts.
+ 
+ 2003-12-09  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* cgraph.c (cgraph_inline_hash): New global variable.
+ 	(cgraph_create_node): Break out of ....
+ 	(cgraph_node): ... this one.
+ 	(cgraph_redirect_edge_callee):  New function.
+ 	(cgraph_remove_node): Aggressively elliminate dead nodes;
+ 	remove node out of clone list.
+ 	(dump_cgraph): Dump inlined_to field; dump uid numbers.
+ 	(cgraph_clone_edge): Return edge created.
+ 	(cgraph_clone_node): New.
+ 	(cgraph_function_possibly_inlined_p): Re-implement using hashtable.
+ 	* cgraph.h: Include hashtab.h
+ 	(struct cgraph_global_info): Kill inline_once, will be output and
+ 	cloned_times fields.  Add inlined_to field.
+ 	(cgraph_node): Add next_clone.
+ 	(cgraph_inline_hash): Declare.
+ 	(cgraph_clone_edge): Update prototype.
+ 	(cgraph_clone_node, cgraph_redirect_callee): Declare.
+ 	* cgraphunit.c (cgraph_optimize_function): Kill.
+ 	(cgraph_assemble_function): Kill next_needed to avoid GGC corruption.
+ 	(cgraph_analyze_function): Do not intialize cloned_times and
+ 	will_be_output.
+ 	(cgraph_finalize_compilation_unit):  Clear next_needed.
+ 	(cgraph_optimize_function): Kill.
+ 	(cgraph_expand_function): Do not use cgraph_optimize_function.
+ 	(cgraph_estimate_growth, cgraph_mark_inline,
+ 	cgraph_check_inline_limits, cgraph_recursive_inlining_p,
+ 	cgraph_preserve_function_body_p): Update for explicit clones.
+ 	(INLINED_TIMES, SET_INLINED_TIMES, cgraph_inlined_into,
+ 	cgraph_inlined_callees, struct cgraph_inline_context,
+ 	cgraph_create_inline_context, cgraph_free_inline_context,
+ 	cgraph_inline_context_set_caller, cgraph_inline_context_clear_caller,
+ 	cgraph_inline_context_set_callee, cgraph_inline_context_clear_callee,
+ 	update_callee_keys): Kill.
+ 	(cgraph_clone_inlined_nodes, cgraph_mark_inline_edge): New.
+ 	(cgraph_decide_inlining_of_small_functions, (cgraph_decide_inlining,
+ 	cgraph_decide_inlining_incrementally): Simplify.
+ 	* tree-inline.c (typedef struct_inline_data): New field saving_p.
+ 	(copy_body_r): Update all clones.
+ 	(expand_call_inline): Remove inlined cgraph node.
+ 	(save_body): Inicialize id.node and id.saving_p.
+ 	* tree-optimize.c (tree_rest_of_compilation): Maintain clone up-to-date
+ 	in no-unit-at-a-time mode.
+ 
+ 2003-12-08  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* tree-optimize.c (optimize_function_tree): Move verify_ssa calls
+ 	into conditionals.
+ 
+ 2003-12-08  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-alias-ander.c (andersen_same_points_to_set): Fix memory leak.
+ 
+ 2003-12-08  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-live.c (register_ssa_partition): Kill legacy code which
+ 	recursively called register_ssa_partition on PHI arguments when
+ 	SSA_VAR was defined by a PHI_NODE.
+ 
+ 2003-12-08  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-dump.c (dump_files): Fix ordering of tail call pass.
+ 	* tree.h (tree_dump_index): Likewise.
+ 
+ 2003-12-08  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* Makefile.in (tree-cfg.o): Add gt-tree-cfg.h dependency.
+ 	(GTFILES): Add tree-cfg.c.
+ 	* tree-cfg.c: Include gt-tree-cfg.h.
+ 	(factored_computed_goto_label, factored_computed_goto):
+ 	Mark gc roots.
+ 
+ 2003-12-08  Steven Bosscher  <stevenb@suse.de>
+ 	    Jan Hubicka  <jh@suse.de>
+ 
+ 	* gengtype-lex.l (IWOrD): Add HOST_WIDEST_INT
+ 	* Makefile.in (function.o, reg-stack.o): Add missing dependency on
+ 	basic-block.h.
+ 	(GTFILES): Add basic-block.h and hwint.h.
+ 	* basic-block.h (struct edge_def): Add GTY markers, make garbage
+ 	collectable.  Make `insns' field GC safe depending on the setting
+ 	of cfg_hooks.
+ 	(struct basic_block_def): Add GTY markers, make garbage collectable.
+ 	(tree_bb_root, tree_phi_root): Kill extern decls.
+ 	(ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR): Change from macro to variable
+ 	(entry_exit_blocks): Kill.
+ 	* cfg.c: Include ggc.h
+ 	(bb_pool, edge_pool, entry_exit_blocks): Kill.
+ 	(ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR): Define.
+ 	(init_flow): Do not create ppols; allocate entry/exit block.
+ 	(free_edge, alloc_block, expunge_block, unchecked_make_edge): Use GGC.
+ 	(compact_blocks): Don't update tree_bb_root and tree_phi_root.
+ 	* cfgrtl.c (rtl_merge_blocks): Clear head pointer.
+ 	* regs.h: Protect against multiple inclusion.
+ 	* tree-cfg.c (obstack_tree_ann_obstack, first_block_tree_and_obj,
+ 	tree_bb_root): Kill.
+ 	(build_tree_cfg, create_bb, remove_bb, delete_tree_cfg): Don't
+ 	touch tree_bb_root and tree_phi_root.
+ 	(create_block_annotations): Do not initialize obstack.
+ 	(free_block_annotations): Do not free obstack.
+ 	(create_block_annotation): Use GGC.
+ 	* tree-dfa.c (tree_phi_root): Kill.
+ 	* tree-flow.h (bb_ann, bb_ann_d): Declare.  Add `phi_nodes' field.
+ 	* tree-phinodes.c (create_phi_node, add_phi_arg, remove_phi_node,
+ 	remove_all_phi_nodes_for): Use `phi_nodes' field in the bb
+ 	annotation instead of tree_phi_root.
+ 	* tree-flow-inline.h (phi_nodes, set_phi_nodes): Likewise.
+ 	(add_dom_child, clear_dom_children): Use GGC.
+ 	* tree-ssa-pre.c (code_motion): Use `phi_nodes' field in the bb
+ 	annotation instead of tree_phi_root.
+ 	* varray.h (union varray_data): Make basic_block_def and edge_def
+ 	varrays garbage collectable.
+ 
+ 2003-12-07  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-common.c (c_address_looks_like_offsetof): New.
+ 	* c-common.h (c_address_looks_like_offsetof): Declare.
+ 	* c-typeck.c (build_unary_op) <ADDR_EXPR>: Use it.  Don't lower
+ 	address references not destined for offsetof.
+ 	(c_expand_return): Only look inside ARRAY_REF and COMPONENT_REF
+ 	when looking for returning address of local variable.
+ 	* expr.c (expand_expr_1): Don't dereference size of unbounded arrays.
+ 	* gimplify.c (gimplify_addr_expr): Only fold address of variable size
+ 	array elements.
+ 	* tree-simple.c (is_gimple_min_invariant): Also check
+ 	is_gimple_variable before disallowing offset address for type.
+ 	* tree-ssa-ccp.c (maybe_fold_offset_to_aggregate_ref): New.
+ 	(maybe_fold_offset_to_component_ref): Use it.
+ 	(maybe_fold_stmt_indirect, maybe_fold_stmt_plus): Likewise.
+ 	(maybe_fold_offset_to_array_ref): Likewise.  Don't fail for division
+ 	remainder non-zero.
+ 	* varasm.c (initializer_constant_valid_p) <ADDR_EXPR>: Use
+ 	handled_component_p and look inside references.
+ 	<MINUS_EXPR>: Always look past widening casts.
+ 
+ 2003-12-07  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-cfg.c (compute_dominance_frontiers): Don't assume that
+ 	the first block has index 0.
+ 
+ 2003-12-07  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* cgraph.c (create_edge): Rename to ...
+ 	(cgraph_create_edge): ... this one; accept call_expr as operand.
+ 	(cgraph_edge): New function
+ 	(cgraph_remove_edge): Use edge as argument
+ 	(cgraph_record_call, cgraph_remove_call): Kill.
+ 	(clone_cgraphedge): New function.
+ 	* cgraph.h (cgraph_edge): Add call_expr argument; add chain_next.
+ 	(cgraph_record_call, cgraph_remove_call): Kill prototype.
+ 	(cgraph_remove_call, cgraph_inline_p): Update prototype.
+ 	(cgraph_clone_edge): Declare.
+ 	* cgraphunit.c (cgraph_finalize_function): Update use of
+ 	cgraph_remove_edge
+ 	(record_call_1): Use cgraph_create_edge; record builtins too.
+ 	(cgraph_create_edges): Accept node instead of decl.
+ 	(cgraph_analyze_function): Update use cgraph_create_edges.
+ 	(cgraph_inline_p): Accept edge.
+ 	* tree-inline.c (inline_data): Replace decl and current_decl
+ 	by node and current_node.
+ 	(copy_body_r): Clone edges.
+ 	(expand_call_inline): Do not create inlined edges.
+ 	(optimize_inline_call): Set id->current_node, id->node.
+ 	* tree-optimize.c (tree_rest_of_compilation): Update cgraph edges after
+ 	compiling.
+ 
+ 2003-12-07  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-loop.c (dump_file, dump_flags): Only declare with
+ 	checking enabled.
+ 	(tree_ssa_loop_opt): Mark arguments with ATTRIBUTE_UNUSED.
+ 
+ 2003-12-07  Richard Henderson  <rth@redhat.com>
+ 
+ 	* function.h (struct function): Add last_label_uid.
+ 	* tree-cfg.c (set_bb_for_stmt): Use it.
+ 	(delete_tree_cfg): Clear label_to_block_map.
+ 
+ 	* gimple-low.c (lower_stmt_body): Export.
+ 	(lower_stmt): Allow data to be null.
+ 	* gimplify.c (declare_tmp_vars): Make static.
+ 	(push_gimplify_context): Export.
+ 	(pop_gimplify_context): Export.  Put the temps somewhere.
+ 	(gimplify_body): Don't declare_tmp_vars here.
+ 	* tree-flow.h, tree-simple.h: Update for new decls.
+ 
+ 	* tree-mudflap.c (mf_build_string): New.
+ 	(mudflap_c_function_decls): Push and pop gimplify context, don't
+ 	gimplify here.  Dump pass 1.
+ 	(mudflap_c_function_ops): Similarly.
+ 	(mf_decl_cache_locals): Gimplify eveything as we go along.
+ 	(mf_build_check_statement_for): Likewise.
+ 	(mf_mostly_copy_tree_r): Remove.
+ 	(mf_varname_tree): Use mf_build_string.
+ 	(mf_file_function_line_tree): Rewrite.
+ 	(mf_offset_expr_of_array_ref): Remove.
+ 	(mx_xfn_indirect_ref): Remove.
+ 	(mf_xform_derefs_1): New.
+ 	(mf_xform_derefs): Rewrite to expect gimple.
+ 	(mx_register_decls): Use build_function_call_expr.
+ 	(mudflap_enqueue_constant): Use mf_build_string.
+ 	* tree-optimize.c (tree_rest_of_compilation): Reorder mudflap bits.
+ 	* tree-dump.c (dump_files): Split mudflap to parts 1 and 2.
+ 	* tree.h (enum tree_dump_index): Likewise.
+ 
+ 2003-12-06  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-ssa-loop.c: New.
+ 	* Makefile.in (tree-ssa-loop.o): New.
+ 	* common.opt (ftree-loop-optimize): Add.
+ 	* flags.h (flag_tree_loop): Declare.
+ 	* opts.c (decode_options): Enable flag_tree_loop at -O1.
+ 	(common_handle_option): Handle OPT_ftree_loop_optimize.
+ 	* timevar.def (TV_TREE_LOOP): New.
+ 	* toplev.c (flag_tree_loop): New.
+ 	(f_options): Add -ftree-loop-optimize.
+ 	* tree-cfg.c (build_tree_cfg): Remove disabled loop optimizer
+ 	initialization.
+ 	(tree_make_forwarder_block): Update phi nodes.
+ 	(tree_loop_optimizer_init): Don't call force_single_succ_latches.
+ 	(tree_try_redirect_by_replacing_jump): Comment fix.
+ 	* tree-dump.c (dump_files): Add .loop dump.
+ 	* tree-flow.h (tree_ssa_loop_opt, set_phi_nodes): Declare.
+ 	* tree-optimize.c (optimize_function_tree): Call tree_ssa_loop_opt.
+ 	* tree.h (enum tree_dump_index): Add TDI_loop.
+ 	* tree-flow-inline.h (set_phi_nodes): New.
+ 	* doc/invoke.texi (-fdump-tree-loop, -ftree-loop-optimize): Document.
+ 
+ 2003-12-05  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-dfa.c (mark_new_vars_to_rename): Change VARS_TO_RENAME to be
+ 	a "bitmap" instead of an "sbitmap".  Callers updated.
+ 	* tree-must-alias.c (promote_var): Likewise.
+ 	(tree_compute_must_alias): Likewise.
+ 	* tree-phinodes.c (remove_all_phi_nodes_for): Likewise.
+ 	* tree-ssa-dom.c (tree_ssa_dominator_thread_jumps): Likewise.
+ 	(tree_ssa_dominator_optimize): Likewise.
+ 	(tree_ssa_dominator_optimize_1): Likewise.
+ 	* tree-ssa-pre.c (pre_expression): Likewise.
+ 	(tree_perform_ssapre): Likewise.
+ 	* tree-ssa.c (rewrite_into_ssa): Likewise.
+ 	(insert_phi_nodes): If VARS_TO_RENAME is zero, then examine
+ 	each node to determine if we need to insert a PHI.
+ 	(prepare_operand_for_rename): If VARS_TO_RENAME is zero, then
+ 	assume the operand needs renaming.
+ 	* tree-ssa-ccp.c (substitute_and_fold): Change VARS_TO_RENAME to
+ 	be a "bitmap" instead of an "sbitmap".  Callers updated.
+ 	(tree_ssa_ccp): Likewise.  Also make sure timevar_pop encloses
+ 	entire function.
+ 	(scalarize_modify_expr): Likewise.
+ 	* tree-sra.c (create_scalar_copies): Change VARS_TO_RENAME to
+ 	be a "bitmap" instead of an "sbitmap".  Callers updated.
+ 	(tree_sra): Likewise.
+ 	* tree-optimize.c (optimize_function_tree): Make VARS_TO_RENAME
+ 	be a "bitmap" instead of an "sbitmap".
+ 	* tree-flow.h: Update various prototypes.
+ 
+ 2003-12-05  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-cfg.c (remove_useless_stmts_goto, remove_useless_stmts): Move
+ 	handling of factored_computed_goto ...
+ 	(disband_implicit_edges): ... here.
+ 
+ 2003-12-05  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-eh.c (tree_could_trap_p): Fix warning.
+ 	* expr.c (expand_expr): Fix warning on uninitialized last.
+ 
+ 2003-12-04  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa.c (rewrite_trees): Do not unconditionally overwrite
+ 	variables set by statements.  Let replace_variable do any
+ 	required rewriting.
+ 
+ 2003-12-04  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-parse.in (primary): Use annotate_with_locus instead of
+ 	STMT_LINENO for STMT_EXPR.
+ 	* c-simplify.c (gimplify_stmt_expr): Likewise.
+ 
+ 2003-12-04  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-dump.c (dump_files): Reorder tailcall and mustalias
+ 	* tree.h (tree_dump_index): Likewise.
+ 	* tree-optimize.c (optimize_function_tree): Do tail call after mustalias.
+ 
+ 2003-12-04  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (opf_none, opf_is_def, opf_no_vops): Change to #define.
+ 
+ 2003-12-04  Canqun Yang  <canqun@nudt.edu.cn>
+ 
+ 	* stor-layout.c (update_alignment_for_field): Export.
+ 	* tree.h (update_alignment_for_field): Declare.
+ 
+ 2003-12-03  Andrew Haley  <aph@redhat.com>
+ 
+ 	* tree-eh.c (tree_could_trap_p): Add division instructions.
+ 	* expr.c (expand_expr): Check the EH region of an expression and
+ 	mark all the insns that result from its expansion with the
+ 	appropriate REG_EH_REGION.
+ 
+ 2003-12-03  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-cfg.c (verify_addr_expr, verify_stmt, tree_node_shared_p,
+ 	verify_stmts):  New functions.
+ 	(verify_flow_info): Remove PHI checking code.
+ 	* tree-flow.h (verify_stmt, verify_stmts): Declare.
+ 	* tree-inline.h (walk_tree, walk_tree_without_duplicates): Move
+ 	prototypes ...
+ 	* tree.h (walk_tree, walk_tree_without_duplicates): ... here.
+ 
+ 2003-12-03  Jan Hubicka  <jh@suse.cz>
+ 	    Diego Novillo <dnovillo@redhat.com>
+ 
+ 	* tree-ssa.c (verify_def, verify_use, verify_phi_args): New static
+ 	functions.
+ 	(verify_ssa): New global function.
+ 	* tree-flow.h (verify_ssa): Declare.
+ 	* tree-optimize.c (optimize_function_tree): Call it.
+ 
+ 2003-12-03  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* timevar.def (TV_TREE_SSA_VERIFY): New timer.
+ 	* tree-sra.c (create_scalar_copies): Always mark the previous
+ 	variables on the LHS for renaming.
+ 	Do not emit unnecessary assignments from VA_ARG_EXPRs.
+ 	(scalarize_modify_expr): Similarly, when scalarizing the LHS of a
+ 	COMPONENT_REF assignment.
+ 	* tree-must-alias.c (tree_compute_must_alias): Do not promote
+ 	variables with hidden uses.
+ 	* tree-ssa-ccp.c (set_rhs): When replacing the whole statement, reset
+ 	SSA_NAME_DEF_STMT for all the SSA_NAMEs in vdef and def
+ 	operands.
+ 
+ 2003-12-03  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 	    Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (opf_no_vops): New.
+ 	(add_stmt_operand): Don't create virtual operands when opf_no_vops
+ 	is passed in flags.
+ 	(get_expr_operands): Set opf_no_vops flag before diving into the
+ 	operand of an ADDR_EXPR node.
+ 
+ 2003-12-03  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-simple.c (is_gimple_min_invariant): Disallow offset of
+ 	address of a scalar.
+ 
+ 	* c-parse.in (primary): Set STMT_LINENO on STMT_EXPR.
+ 	* c-simplify.c (gimplify_stmt_expr): Be prepared for last_stmt
+ 	to be null.
+ 
+ 2003-12-03  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	Fix PR 13177
+ 	* tree-ssa-pre.c (code_motion): Do phi nodes last, and rearrange
+ 	how we decide what temporary to choose so that we get it right.
+ 
+ 2003-12-03  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-dfa.c (get_expr_operands): Don't record VUSEs for invariant
+ 	adresses.
+ 
+ 2003-12-03  Brian Booth  <bbooth@redhat.com>
+ 
+ 	* tree-pretty-print.c (dump_phi_nodes): Removed superfluous ampersand.
+ 
+ 2003-12-03  Jeff Law  <law@redhat.com>
+ 
+ 	* ggc-page.c: Resync with mainline sources.  Remove tree-ssa
+ 	specific hack which disabled special GC pagesizes for 2 operand
+ 	tree expressions.
+ 
+ 	* tree-ssa.c (mark_def_sites): Call prepare_operand_for_rename
+ 	on the VDEF_RESULT as well, providing a dummy uid argument.
+ 
+ 	* tree-phinodes.c: Include rtl.h for ceil_log2.
+ 	(ideal_phi_node_len): New function.
+ 	(resize_phi_node): Make static.
+ 	(make_phi_node): Use ideal_phi_node_len.
+ 	(add_phi_arg): Likewise.
+ 	* tree.h (resize_phi_node): Remove prototype.
+ 	* Makefile.in (tree-phinodes.o): Depend on $(RTL_H).
+ 
+ 2003-12-03  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-cfg.c: (make_edges): Eliminate fallthru to exit.
+ 	(make_ctrl_stmt_edges): Nonlocal goto handling moved to
+ 	make_goto_expr_edges.
+ 	(make_goto_expr_edges): Remove simple gotos.
+ 	(cfg_remove_useless_stmts_bb): Goto removal cancelled.
+ 	(cleanup_cond_expr_graph, cleanup_switch_expr_graph):
+ 	Replaced by ...
+ 	(cleanup_control_expr_graph): New.
+ 	(cleanup_control_flow): Use it.
+ 	(disband_implicit_edges): New.
+ 	(tree_find_edge_insert_loc): Never insert before a control statement.
+ 	(tree_split_edge, thread_jumps, tree_try_redirect_by_replacing_jump,
+ 	tree_redirect_edge_and_branch): Work over no-gotos form.
+ 	(tree_verify_flow_info): Check no-gotos form invariants.
+ 	* tree-pretty-print.c (pp_cfg_jump, dump_implicit_edges): New.
+ 	(dump_generic_bb_buff): Call dump_implicit_edges.
+ 	* tree-flow.h (cleanup_cond_expr_graph, cleanup_switch_expr_graph):
+ 	Declaration removed.
+ 	(cleanup_control_expr_graph, delete_tree_ssa, disband_implicit_edges):
+ 	Declare.
+ 	* tree-optimize.c (tree_ssa_finish): New.
+ 	(optimize_function_tree): Call it.
+ 	* tree-ssa-dom.c (thread_jumps_walk_stmts, optimize_stmt): Use
+ 	cleanup_control_expr_graph.
+ 	* tree-ssa.c (delete_tree_ssa): Export, work even if there are no
+ 	referenced_vars.
+ 	(rewrite_out_of_ssa): Don't call it.
+ 
+ 2003-12-03  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-ssa.dom.c (tree_ssa_domionator_thread_jumps): Mark back edges.
+ 	(thread_across_edge): Do not thread across loop headers.
+ 
+ 	* Makefile.in (tree-optimize.o): Depend on cgraph.h
+ 	* cgraph.h (cgraph_preserve_function_body_p): Declare.
+ 	* cgraphunit.c (cgraph_preserve_function_body_p): New function.
+ 	* tree-optimize.c: Include cgraph.h
+ 	(clear_decl_rtl): Kill.
+ 	(tree_rest_of_compilation): Use cgraph_preserve_function_body_p;
+ 	do not clear DECL_RTL; do final ggc in the pushed context for nested
+ 	functions;
+ 
+ 2003-12-02  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (optimize_stmt): Accept and pass down dominator
+ 	walker structure instead of individual varrays.  Callers updated.
+ 	(eliminate_redundant_computations): Likewise.
+ 	(simplify_rhs_and_lookup_avail_expr): Likewise.  Cache and update
+ 	a dummy COND_EXPR when querying the hash tables when transforming
+ 	DIV/MOD into RSHIFT/BIT_AND or ABS_EXPR into NEG_EXPR.
+ 	(dom_opt_walk_stmts): Don't reload the block data pointer each
+ 	iteration of the loop.  Load it once outside the loop.
+ 
+ 	* tree-dfa.c (cleanup_operand_arrays): Avoid creating a new
+ 	varray for the vuse operands.
+ 
+ 	* tree-ssa-dom.c (extract_range_from_cond): Use int_const_binop to
+ 	avoid creating useless tree nodes.
+ 
+ 	* tree-phinodes.c (add_phi_arg): If we receive a new node from
+ 	resize_phi_node, then release the old node and update the PHI
+ 	chain.
+ 
+ 2003-12-02  Brian Booth  <bbooth@redhat.com>
+ 
+ 	* tree-pretty-print.c (dump_phi_nodes): Added code to always show phi
+ 	nodes of regular gimple scalars.
+ 	(dump_generic_bb_buff): Removed condition upon which to show phi nodes.
+ 
+ 2003-12-02  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-optimize.c (optimize_function_tree): Invoke ggc_collect in
+ 	between optimization passes.
+ 
+ 2003-12-02  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-sra.c (can_be_scalarized_p): Print details about why something
+ 	could not be scalarized to the dump file.
+ 
+ 2003-12-01  Jeff Law  <law@redhat.com>
+ 
+ 	* Makefile.in (OBJS-common): Add tree-phinodes.o.
+ 	(tree-phinodes.o): Add dependencies.
+ 	(GTFILES): Add tree-phinodes.c.
+ 	* tree-phinodes.c: New file.
+ 	* tree-dfa.c (create_phi_node): Moved to tree-phinodes.o.
+ 	(add_phi_arg, remove_phi_arg, remove_phi_arg_num): Similarly.
+ 	(remove_phi_node, remove_all_phi_nodes_for): Similarly.
+ 	* tree-ssa.c (init_tree_ssa): Initialize PHI node management.
+ 	(delete_tree_ssa): Finalize PHI node management.
+ 	* tree.c (dump_tree_statistics): Dump PHI node stats.
+ 	(make_phi_node, resize_phi_node): Moved to tree-phinodes.o.
+ 	* tree.h (init_phinodes): Prototype.
+ 	(fini_phinodes, release_phi_node): Likewise.
+ 	(phinodes_print_statistics): Likewise.
+ 
+ 2003-12-01  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-dfa.c (get_expr_operands): Don't handle PLUS_EXPR inside
+ 	INDIRECT_REF.
+ 	* tree-ssa-ccp.c (maybe_fold_offset_to_array_ref): Use int_const_binop.
+ 	(maybe_fold_offset_to_component_ref): Likewise.
+ 	(maybe_fold_stmt_indirect): Likewise.
+ 	(maybe_fold_stmt_plus): Expand ARRAY_REF when seen with addend.
+ 	* fold-const.c (int_const_binop): Export.
+ 	* tree.h (int_const_binop): Declare.
+ 
+ 2003-12-01  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* basic-block.h (tree_phi_root): New variable.
+ 	* cfg.c: Include tree-flow.h.
+ 	(compact_blocks): Compact tree_phi_root
+ 	* tree-cfg.c (build_tree_cfg): Initialize tree_phi_root.
+ 	(create_bb, remove_bb, delete_tree_cfg): Update tree_phi_root.
+ 	* tree-dfa.c (tree_phi_root): Declare.
+ 	(create_phi_node, add_phi_arg, remove_phi_node,
+ 	remove_all_phi_nodes_for):  Always use accessor functions for
+ 	getting, varray for setting phis.
+ 	* tree-ssa-pre.c (code_motion): Likewsie.
+ 	* tree-flow-inline.h (phi_nodes): Use varray.
+ 	* tree-flow.h (bb_ann_d): Remove phi_nodes.
+ 
+ 	* tree-ssanames.c (free_ssanames): Do not use deleteable GTY flag.
+ 
+ 2003-11-30  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-optimize.c (tree_rest_of_compilation): Move ggc_collect call to
+ 	the end of function; keep clearing of DECL_SAVED_TREE to the cgraph
+ 	code.
+ 
+ 2003-11-30  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* cgraphunit.c (cgraph_inline_context): New structure.
+ 	(cgrpah_mark_inline, cgraph_check_inline_limits): Use context
+ 	instead of passing all arguments by hand.
+ 	(cgraph_create_inline_context, cgraph_free_inline_context,
+ 	cgraph_inline_context_set_caller, cgraph_inline_context_clear_caller,
+ 	cgraph_inline_context_set_callee, cgrpah_inline_context_clear_callee,
+ 	cgraph_recursive_inlining_p): New static function.
+ 	(cgraph_decide_inline*):  Reorganize to use context.
+ 
+ 2003-11-30  Paul Brook  <paul@nowt.org>
+ 
+ 	* Makefile.in (GTFILES): Remove stray '\'.
+ 
+ 2003-11-30  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* c-config-lang.in: Move tree-alias-* from here
+ 	* Makefile.in (GTFILES): To here.
+ 	* tree-alias-ander.c: Include bitmap.h
+ 	(andersen_function_call): Updated to take address of variables
+ 	in an ADDR_EXPR in a CALL_EXPR.
+ 	* tree-alias-common.h (struct tree_alias_ops): Update arguments to
+ 	function_call.
+ 	* tree-alias-type.h (struct alias_typevar_common): Add varnum.
+ 	* tree-alias-common.c: Include bitmap.h, and function.h.
+ 	s/global_var/pta_global_var/g.
+ 	(addrargs): New static variable.
+ 	(pta_global_var): Ditto.
+ 	(find_func_decls): Remove.
+ 	(find_func_aliases): Take one argument, update all callers.
+ 	Handle (cast) [addr-expr] [var].
+ 	Handle COMPONENT_REF of an  INDIRECT_REF.
+ 	Pass info about ADDR_EXPR arguments to function_call function.
+ 	(deal_with_call_aliasing): New function.
+ 	(call_may_return): New function.
+ 	(get_alias_var_decl): Call find_func_aliases on the DECL_INITIAL
+ 	of a global var.
+ 	Use ALIAS_TVAR_VARNUM, instead of VARRAY_ACTIVE_SIZE (alias_vars) - 1.
+ 	(get_alias_var): Handle REALPART_EXPR and IMAGPART_EXPR.
+ 	Return NULL in default case.
+ 	(intra_function_call): Remove wrong code.
+ 	(create_fun_alias_var): Use simple_assign, not addr_assign.
+ 	Set up ALIAS_TVAR_VARNUM when creating an alias var.
+ 	(create_fun_alis_var_ptf): Ditto on ALIAS_TVAR_VARNUM.
+ 	(create_alias_var): Ditto.
+ 	(create_alias_vars):  Build pta_global_var here.
+ 	Walk unexpanded_var_list.
+ 	Walk the statements in basic blocks.
+ 	(delete_alias_vars): Correct ip_partial case.
+ 	Free addrargs.
+ 	(init_alias_vars): Create addrargs.
+ 
+ 2003-11-29  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* Makefile.in (tree-ssanames.o): Depend on gt-tree-ssanames.h.
+ 	(tree-eh.o): Depend on gt-tree-eh.h.
+ 	(gr-tree-ssanames.h, gt-tree-eh.h): New targets.
+ 	(GTFILES): Add tree-ssanames.c, tree-eh.c
+ 	* tree-eh.c: Include ggc.h and gt-tree-eh.h
+ 	(lower_eh_constructs): Allecate throw_stmt_table in ggc.
+ 	* tree-ssanames.c: Include ggc.h and gt-tree-ssanames.h
+ 
+ 	* function.h (struct function): Add saved_tree/saved_args.
+ 	* toplev.c (rest_of_compilation): Move code to  clear cfun and
+ 	DECL_SAVED_INSNS and call to ggc_collect to ...
+ 	* tree-optimize.c (tree_rest_of_compilation): ... this function. Use
+ 	cfun to save/restore function body.
+ 
+ 2003-11-28  Richard Henderson  <rth@redhat.com>
+ 
+ 	* gimplify.c (create_tmp_var_raw): Split out from create_tmp_var.
+ 	(create_tmp_var): Use it.
+ 	(create_tmp_alias_var): Remove.
+ 	* tree-alias-common.c, tree-dfa.c: Use create_tmp_var_raw instead.
+ 	* tree-simple.h: Update decls.
+ 
+ 2003-11-28  Richard Henderson  <rth@redhat.com>
+ 
+ 	* gimple-low.c (lower_function_body): Call lower_bind_expr
+ 	to handle the outermost BIND_EXPR.
+ 
+ 2003-11-28  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-ssa.c (remove_annotations_r): Kill.
+ 	(delete_tree_ssa): Remove annotations using statement walk;
+ 	kill argument fndecl.
+ 	(rewrite_out_of_ssa): Update call.
+ 
+ 2003-11-27  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-ssa-live.c (register_ssa_partition): Abort if a virtual SSA
+ 	version is registered.
+ 	(create_ssa_var_map): Always process PHI nodes.
+ 	* tree-ssa.c (Eliminate_virtual_phis): Rename from
+ 	eliminate_extraneous_phis, and look specifically for virtuals.
+ 	(rewrite_out_of_ssa): Eliminate virtual PHI nodes before building
+ 	partitions.
+ 
+ 2003-11-27  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-ssa-ccp.c (get_strlen): Mark the visited variables.
+ 	(ccp_fold_builtin): Changed due to changed calling convention of
+ 	get_strlen.
+ 
+ 2003-11-26  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	Revert
+ 
+ 	2003-11-25  Jeff law  <law@redhat.com>
+ 
+ 	    * Makefile.in (OBJS-common): Add tree-phinodes.o.
+ 	    (tree-phinodes.o): Add dependencies.
+ 	    * tree-phinodes.c: New file.
+ 	    * tree-dfa.c (create_phi_node): Moved to tree-phinodes.o.
+ 	    (add_phi_arg, remove_phi_arg, remove_phi_arg_num): Similarly.
+ 	    (remove_phi_node, remove_all_phi_nodes_for): Similarly.
+ 	    * tree-ssa.c (init_tree_ssa): Initialize PHI node management.
+ 	    (delete_tree_ssa): Finalize PHI node management.
+ 	    * tree.c (dump_tree_statistics): Dump PHI node stats.
+ 	    (make_phi_node, resize_phi_node): Moved to tree-phinodes.o.
+ 	    * tree.h (init_phinodes): Prototype.
+ 	    (fini_phinodes, release_phi_node): Likewise.
+ 	    (phinodes_print_statistics): Likewise.
+ 
+ 2003-11-25  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-mustalias.c (promote_var): Do not clear
+ 	may_point_to_global_mem.
+ 
+ 2003-11-25  Jeff law  <law@redhat.com>
+ 
+ 	* domwalk.c (walk_dominator_tree): Indicate to the block local
+ 	data initializer if the block local data is new or recycled.
+ 	* domwalk.h (struct dom_walk_data): Corresponding changes.
+ 	* tree-ssa-dom.c (dom_opt_initialize_block_local_data): Accept and use
+ 	"recycled" argument.  For recycled structures, only clear varrays
+ 	that have been initialized.  For new blocks, do not initialize
+ 	varrays here.
+ 	(dom_opt_finalize_block): When threading across edges, if the
+ 	true/false varrays have not been initialized, then the limit is zero.
+ 	Only clear block local varrays that have been initialized.
+ 	(record_equivalences_from_incoming_edge): If necessary, initialize
+ 	block local const_and_copies.
+ 	(dom_opt_walk_stmts): If necessary, initialize block local
+ 	stmts_to_rescan.
+ 	(record_var_is_nonzero): If necessary, initialize block local
+ 	nonzero_vars.
+ 	(record_cond_is_true): If necessary, initialize block local
+ 	true_exprs.
+ 	(record_cond_is_false): If necessary, initialize block local
+ 	false_exprs.
+ 	(lookup_avail_expr): If necessary, initialize block local
+ 	avail_exprs.
+ 	(record_range): If necessary, initialize block local vrp_varaibles.
+ 	* tree-ssa.c
+ 	* tree-ssa.c (rewrite_initialize_block_local_data): Accept and use
+ 	"recycled" argument.  For recycled structures, only clear varrays
+ 	that have been initialized.  For new blocks, do not initialize
+ 	varrays here.
+ 	(rewrite_finalize_block): Only clear block local varrays that have
+ 	been initialized.
+ 	(register_new_def): If necessary, initialize block local defs.
+ 
+ 	* tree-ssa-dom.c (get_eq_expr_value): Return a struct rather than
+ 	a tree node.
+ 	(record_equivalences_from_incoming_edge): Corresponding changes.
+ 	(find_equivalent_equality_comparison): Use tree_int_cst_XXX rather
+ 	then building and folding nodes.
+ 	(simplify_cond_and_lookup_avail_expr): Likewise.
+ 
+ 	* Makefile.in (OBJS-common): Add tree-phinodes.o.
+ 	(tree-phinodes.o): Add dependencies.
+ 	* tree-phinodes.c: New file.
+ 	* tree-dfa.c (create_phi_node): Moved to tree-phinodes.o.
+ 	(add_phi_arg, remove_phi_arg, remove_phi_arg_num): Similarly.
+ 	(remove_phi_node, remove_all_phi_nodes_for): Similarly.
+ 	* tree-ssa.c (init_tree_ssa): Initialize PHI node management.
+ 	(delete_tree_ssa): Finalize PHI node management.
+ 	* tree.c (dump_tree_statistics): Dump PHI node stats.
+ 	(make_phi_node, resize_phi_node): Moved to tree-phinodes.o.
+ 	* tree.h (init_phinodes): Prototype.
+ 	(fini_phinodes, release_phi_node): Likewise.
+ 	(phinodes_print_statistics): Likewise.
+ 
+ 2003-11-25  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-inline.c (save_body): New body
+ 	* tree-inline.h (save_body): Declare.
+ 	* tree-optimize.c (tree_rest_of_compilation): Save function tree
+ 	properly.
+ 
+ 2003-11-24  Richard Henderson  <rth@redhat.com>
+ 
+ 	* gimplify.c (canonicalize_addr_expr): New.
+ 	(gimplify_conversion): Use it.  Canonicalize after nop cast removal.
+ 	* tree-simple.c (is_gimple_min_invariant): Remove STRING_CST cast
+ 	special case.
+ 
+ 2003-11-24  Jeff Law  <law@redhat.com>
+ 
+ 	* flow.c (count_or_remove_death_notes_bb): New.  Extracted from
+ 	count_or_remove_death_notes.
+ 	(count_or_remove_death_notes): Use EXECUTE_IF_SET_IN_SBITMAP.
+ 
+ 2003-11-24  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR 13174, PR 13143
+ 	* gimplify.c (cpt_same_type): Allow different ARRAY_TYPEs with
+ 	the same base type.
+ 
+ 2003-11-24  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	Fix PR/13163
+ 	* tree-ssa-pre.c (append_eref_to_block): Delete.
+ 	(insert_euse_in_preorder_dt_order_1): Ditto.
+ 	(insert_one_operand): Take an extra argument, because
+ 	avdefs may need to be changed.
+ 	(clear_all_eref_arrays): Use FOR_ALL_BB.
+ 	(insert_occ_in_preorder_dt_order): Stop appending to bb eref arrays.
+ 	Use FOR_ALL_BB.
+ 	(insert_euse_in_preorder_dt_order): Rewrite to just build a new varray
+ 	with only the EPHI's and EUSE's, and then sort it.
+ 	(pre_expression): Don't use bb based erefs array when printing
+ 	expressions.
+ 	(split_critical_edges): Just use FOR_ALL_BB.
+ 	(tree_perform_ssapre): Pre-split entry block successor edge if the
+ 	successor block has multiple preds.
+ 
+ 	* tree-flow.h (struct bb_ann_d): Remove erefs varray.
+ 
+ 2003-11-24  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-cfg.c (cleanup_tree_cfg): FOR_EACH_BB -> FOR_ALL_BB when
+ 	clearing dom children, because the entry block has dom_children
+ 	too.
+ 	* tree-ssa.c (build_dominator_tree): Ditto.
+ 
+ 2003-11-24  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-cfg.c (compute_dominance_frontiers_1,
+ 	compute_dominance_frontiers): Move from ssa.c.
+ 	* tree-flow.h (compute_dominance_frontiers): Declare.
+ 	* Makefile.in (tree-ssa.o, tree-ssa-live.o, tree-ssa-pre.o,
+ 	tree-optimize.o): Don't depend on ssa.h.
+ 	* tree-ssa.c: Don't include ssa.h.
+ 	* tree-ssa-live.c: Likewise.
+ 	* tree-ssa-pre.c: Likewise.
+ 	* tree-optimize.c: Likewise.
+ 
+ 2003-11-24  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* fold-const.c (fold):  Do not return early when
+ 	optimizing COMPONENT_REF and constant.
+ 
+ 2003-11-24  Richard Henderson  <rth@redhat.com>
+ 
+ 	* objc/objc-act.c (build_protocol_expr): Use convert instead of
+ 	smashing TREE_TYPE.
+ 
+ 2003-11-23  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-ssa-live.h (SSANORM_PERFORM_TER, SSANORM_COMBINE_TEMPS,
+ 	SSANORM_REMOVE_ALL_PHIS): New flag macros.
+ 	* tree-ssa.c (replace_variable): Return true if var was rewritten.
+ 	(eliminate_extraneous_phis): Dump var map to file if checking triggers
+ 	an abort.
+ 	(rewrite_trees): Set modified_stmt if stmt was changed.
+ 	(remove_ssa_form): Move more of rewrite_out_of_ssa to make it serve
+ 	all the same functions based on new flags in tree-ssa-live.h.
+ 	(rewrite_out_of_ssa): Call remove_ssa_form.
+ 
+ 2003-11-23  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-cfg.c (tree_verify_flow_info): Check that ENTRY/EXIT block
+ 	has no instructions associated with it.
+ 
+ 2003-11-22  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-names.c (release_ssa_name): Use SSA_NAME_IN_FREE_LIST
+ 	instead of checking SSA_NAME_DEF_STMT being null.
+ 	* tree.h (SSA_NAME_DEF_STMT): Use chain field rather than the
+ 	def_stmt field.
+ 	(SSA_NAME_OCCURS_IN_ABNORMAL_PHI): Use existing flag from tree_common.
+ 	(SSA_NAME_IN_FREE_LIST): Define.
+ 	(struct tree_ssa_name): Kill DEF_STMT and OCCURS_IN_ABNORMAL_PHI fields.
+ 
+ 2003-11-22  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-pretty-print.c (dump_generic_node): Remove superfluous ';'.
+ 
+ 2003-11-22  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (simple-break-elim.o): Remove.
+ 	(simple-goto-elim.o): Remove.
+ 	(tree-dchain.o): Remove.
+ 	* simple-break-elim.c: Remove.
+ 	* simple-goto-elim.c: Remove.
+ 	* tree-dchain.c: Remove.
+ 	* tree-dchain.h: Remove.
+ 
+ 2003-11-22  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (build_dfs_id_array_1): > should be >=
+ 	(build_dfn_array): Ditto.
+ 
+ 2003-11-21  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (tree-dfa.o): Add dependency on $(TREE_DUMP_H)
+ 	* tree-dfa.c: Include tree-dump.h
+ 	(compute_alias_sets): Call dump_function_to_file.
+ 	(may_access_global_mem_p): Check if the base address of _REF nodes
+ 	may point to global memory.
+ 
+ 	* cfgcleanup.c (try_crossjump_to_edge): Initialize newpos1 and
+ 	newpos2.
+ 
+ 2003-11-21  Jeff Law  <law@redhat.com>
+ 
+ 	Revert:
+ 
+ 	2003-11-21  Jan Hubicka  <jh@suse.cz>
+ 
+ 		* tree-dfa.c (get_expr_operands): Fix handling of CALL_EXPR.
+ 		* tree-must-alias.c (tree_compute_must_alias): promote pointers.
+ 		(find_addressable_vars):  Deal with complex constant
+ 		expressions; do not clear may_point_to_global_mem.
+ 
+ 2003-11-21  Jeff Law  <law@redhat.com>
+ 
+ 	* Makefile.in (domwalk.o): Depend on $(GGC_H).
+ 	* domwalk.c: Include ggc.h.
+ 	(walk_dominator_tree): Manage allocation/deallocation and
+ 	pushing/popping of the toplevel block data pointer here.
+ 	Use callback to initialize the block local data.
+ 	(init_walk_dominator_tree): New function.
+ 	(fini_walk_dominator_tree): Likewise.
+ 	* domwalk.h (struct dom_walk_data): Add callback to initialize
+ 	block local data.  Add field for sizeof block local data.
+ 	Add "private" field free_block_data.
+ 	(init_dominator_tree, fini_dominator_tree): Prototype.
+ 	* tree-ssa-dom.c (dom_opt_initialize_local_data): New function.
+ 	(tree_ssa_dominator_optimize_1): Initialize new fields in the
+ 	dominator walker structure.  Initialize and finalize the dominator
+ 	walker.  Slightly reorder code to make it more readable..
+ 	(dom_opt_initialize_block): No longer deal with allocation and
+ 	initialization of block local data.
+ 	(dom_opt_finalize_block): Similarly for deallocation of block
+ 	local data.
+ 	* tree-ssa.c (rewrite_block_data): New structure.
+ 	(rewrite_initialize_block_local_data): New function.
+ 	(rewrite_initialize_block): No longer deal with allocation and
+ 	initialization of block local data.
+ 	(rewrite_into_ssa): Initialize new fields in the dominator walker
+ 	structure.  Initialize and finalize the dominator walker.
+ 	(rewrite_initialize_block): No longer deal with allocation and
+ 	initialization of block local data.
+ 	(rewrite_optimize_stmts): Deal with changes in the dominator
+ 	walker structure.
+ 	(rewrite_finalize_block): No longer with deallocation of block
+ 	local data.
+ 
+ 	* tree-dfa.c (add_vdef, cleanup_voperand_arrays): Use NUM_VDEFS.
+ 	(mark_new_vars_to_rename, collect_dfa_status_r): Likewise.
+ 	* tree-pretty-print.c (dump_vops): Likewise.
+ 	* tree-sra.c (create_scalar_copies): Likewise.
+ 	* tree-ssa-dce.c (stmt_useful_p, process_worklist): Likewise.
+ 	* tree-ssa-live.c (create_ssa_var_map): Likewise.
+ 	(calculate_live_on_entry): Likewise.
+ 	* tree-ssa-pre.c (process_left_occs_and_kills): Likewise.
+ 	* tree-ssa.c (mark_def_sites, rewrite_stmt): Likewise.
+ 	* tree.h (NUM_VDEFS): Define.
+ 	* tree-ssa-ccp.c (visit_stmt): Use NUM_VDEFS.  Fix thinko in last
+ 	change.
+ 	(initialize): Use NUM_VDEFS.
+ 
+ 	* tree-dfa.c (add_vdef): Revamp to handle new method for
+ 	recording vdefs.
+ 	(cleanup_operand_arrays): Similarly.
+ 	* tree-sra.c (create_scalar_copies): Similarly.
+ 	* tree-ssa-ccp.c (visit_stmt, initialize): Similarly.
+ 	* tree-ssa-dce.c (stmt_useful_p, process_worklist): Similarly.
+ 	* tree-ssa-dom.c (cprop_into_stmt): Similarly.
+ 	(record_equivalences_from_stmt): Similarly.
+ 	* tree-ssa-live.c (create_ssa_var_map): Similarly.
+ 	(calculate_live_on_entry): Similarly.
+ 	* tree-ssa.c (mark_def_sites, rewrite_stmt): Similarly.
+ 	* tree-ssa-pre.c (process_left_occr_and_kills): Similarly.
+ 	* tree-inline.c (estimate_num_insns_1): Kill VDEF_EXPR.
+ 	* tree-pretty-print.c (dump_generic_node) Kill VDEF_EXPR.
+ 	(dump_vops): Dump VDEFs here.
+ 	* tree.c (build_vdef_expr): Kill.
+ 	* tree.h (build_vdef_expr): Kill prototype.
+ 	(VDEF_RESULT, VDEF_OP): Revamp to handle new method for recording
+ 	vdefs.
+ 	* tree.def (VDEF_EXPR): Kill.
+ 
+ 	* tree-cfg.c (cfg_remove_useless_stmts): Set both VAR and VAL to
+ 	NULL anytime one of them is determined to be invalid.
+ 
+ 2003-11-21  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-ssa-live.c (compact_var_map): Fix typo.  Clear correct field.
+ 	(calculate_live_on_entry): Remove unneeded stmt.
+ 	* tree-ssa-live.h (version_to_var): New.  Return variable associated
+ 	with a specific SSA version.
+ 	* tree-ssa.c (eliminate_build): Add check that ignored results don't
+ 	have important arguments.  Allow ignored results.
+ 	(coalesce_abnormal_edges): Allow non-relevant results to be ignored.
+ 	(eliminate_extraneous_phis): Allow non-relevant results.  Check that
+ 	no important arguments are being missed.
+ 	(coalesce_vars): Non-partition variables are allowed now, just ignored.
+ 	(rewrite_trees): New.  Split out from rewrite_out_of_ssa.  Perform tree
+ 	rewriting step.
+ 	(remove_ssa_form): New.  Allow rewriting of just specified variables.
+ 	(rewrite_out_of_ssa): Use rewrite_trees and reorganize slightly to
+ 	accommodate typechecking in eliminate_extraneous_phis.
+ 
+ 2003-11-21  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-dfa.c (get_expr_operands): Fix handling of CALL_EXPR.
+ 	* tree-must-alias.c (tree_compute_must_alias): promote pointers.
+ 	(find_addressable_vars):  Deal with complex constant expressions;
+ 	do not clear may_point_to_global_mem.
+ 
+ 2003-11-21  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* parser.c (cp_parser_postfix_expression): Initialize 's' to
+ 	NULL_TREE.
+ 
+ 2003-11-20  Richard Henderson  <rth@redhat.com>
+ 
+ 	* Makefile.in (bitmap.o-warn, caller-save.o-warn, combine.o-warn,
+ 	cgraphunit.o-warn, c-semantics.o-warn, emit-rtl.o-warn, expr.o-warn,
+ 	fold-const.o-warn, genattrtab.o-warn, regmove.o-warn, tree.o-warn,
+ 	varasm.o-warn, f/expr.o-warn, profile.o-warn): Remove.
+ 	* bitmap.c (bitmap_first_set_bit): Abort if no non-zero word found.
+ 	(bitmap_last_set_bit): Likewise.
+ 	* combine.c (get_pos_from_mask): Always set *plen.
+ 
+ 2003-11-20  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-dfa.c (get_expr_operands): Remove handling of PLUS_EXPR
+ 	inside INDIRECT_REF.
+ 
+ 2003-11-20  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-nomudflap.c (nogo): Fix prototype.
+ 
+ 2003-11-20  Richard Henderson  <rth@redhat.com>
+ 
+ 	* except.c (output_function_exception_table): Strip nops.
+ 	* gimplify.c (gimplify_addr_expr): Kill missing cast workaround.
+ 	(cpt_same_type, check_pointer_types_r): New.
+ 	(gimplify_body): Call it.
+ 	* tree-inline.c (insert_decl_map): New.
+ 	(remap_decl, remap_type, remap_block, copy_body_r,
+ 	initialize_inlined_parameters, declare_return_variable,
+ 	remap_save_expr, mark_local_for_remap_r): Use it.
+ 
+ 2003-11-20  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	libstdc++/11696
+ 	* c-pragma.c (handle_pragma_redefine_extname): Define always.
+ 	(init_pragma): Activate #pragma redefine_extname for mudflap.
+ 
+ 	* tree-inline.c (copy_tree_r): Propagate mf_marked-ness.
+ 	* tree-mudflap.c (mudflap_c_function): Break into new
+ 	_decls and _ops functions.
+ 	(mudflap_c_function_decls): Avoid unnecessary tree copying.
+ 	(mudflap_c_function_ops): Ditto.  Gimplify explicitly only for
+ 	tree dumping.
+ 	* tree-nomudflap.c: Add new stub functions.  Simplify error
+ 	message emission throughout.
+ 	* tree-mudflap.h: Corresponding changes.
+ 	* tree-optimize.c (tree_rest_of_compilation): Call the _decl
+ 	instrumentation before gimplification and ssa optimizations;
+ 	call the _ops instrumentation after ssa optimizations.
+ 
+ 2003-11-20  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	Initial fix for PR optimization/12747
+ 
+ 	* Makefile.in (OBJS): Add tree-sra.o
+ 	* common.opt (ftree-sra): Add.
+ 	* flags.h (flag_tree_sra): Declare.
+ 	* gimplify.c (gimplify_addr_expr): Set TREE_INVARIANT
+ 	when producing and address expression for a DECL node.
+ 	* opts.c (decode_options): Enable SRA at -O1.
+ 	(common_handle_option): Handle -ftree-sra.
+ 	* timevar.def (TV_TREE_SRA): New timer.
+ 	* toplev.c (flag_tree_sra): Define.
+ 	* tree-cfg.c (stmt_ends_bb_p): Declare extern.
+ 	(bsi_replace): Add boolean argument to specify whether to
+ 	preserve EH region information.  Update all callers.
+ 	(bsi_commit_edge_inserts): Also check the edge from ENTRY_BLOCK_PTR
+ 	to basic block 0.
+ 	Move loop body ...
+ 	(bsi_commit_edge_inserts_1): ... here.
+ 	* tree-dump.c: Add dump for SRA pass.
+ 	* tree.h (enum tree_dump_index): Modify accordingly.
+ 	(STRIP_USELESS_TYPE_CONVERSION): Define.  Update all callers to
+ 	tree_ssa_useless_type_conversion.
+ 	* tree-eh.c (add_stmt_to_eh_region): New function.
+ 	* tree-flow.h (stmt_ends_bb_p): Declare.
+ 	(add_stmt_to_eh_region): Declare.
+ 	(tree_sra): Declare.
+ 	(enum bsi_iterator_update): Mirror entries in
+ 	enum tsi_iterator_update.
+ 	* tree-optimize.c (optimize_function_tree): Call SRA pass
+ 	after must-alias.
+ 	* tree-sra.c: New file.
+ 	* doc/invoke.texi: Document -ftree-sra and -fdump-tree-sra.
+ 
+ 2003-11-20  Andrew Macleod  <amacleod@redhat.com>
+ 
+ 	* tree-ssa.c (check_replaceable): Return false if the LHS is a
+ 	DECL_HARD_REGISTER.
+ 
+ 2003-11-20  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-ccp.c (set_rhs): Replace with an empty statement when
+ 	the replacement has no side effects.
+ 
+ 2003-11-20  Jeff Law  <law@redhat.com>
+ 
+ 	* Makefile.in (OBJS-common): Kill tree-ssa-copyprop.o.
+ 	(tree-ssa-copyprop.o): Kill dependencies clause.
+ 	* common.opt (tree-copyprop): Kill option.
+ 	* flags.h (flag_tree_copyprop): Kill.
+ 	* opts.c (decode_options): Don't set flag_tree_copyprop.
+ 	(common_handle_option): Kill handling of -ftree-copyprop.
+ 	* timevar.def (TV_TREE_COPYPROP): Kill.
+ 	* toplev.c (flag_tree_copyprop): Kill.
+ 	(lang_independent_options): Kill -ftree-copyprop.
+ 	* tree-dump.c (dump_files): Kill .copyprop dump.
+ 	* tree-flow.h (tree_ssa_copyprop): Kill prototype.
+ 	(propagate_copy): Move prototype.
+ 	* tree-optimize.c (optimize_function_tree): Kill -ftree-copyprop stuff.
+ 	* tree.h (tree_dump_index): Kill TDI_copyprop.
+ 	* tree-ssa-copyprop.c: Kill.
+ 	* tree-ssa-dom.c (propagate_copy): Moved here from tree-ssa-copyprop.c.
+ 
+ 	* tree-ssanames.c (free_ssanames): No longer a varray.
+ 	(init_ssanames, make_ssa_name, release_ssa_name): Corresponding changes.
+ 
+ 2003-11-20  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* tree-ssanames.c (ssanames_print_statistics): Use ISO function
+ 	declaration.  Print unsigned ints, not usinged longs.
+ 
+ 2003-11-18  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (rename_1): This should be static.
+ 	(append_eref_to_block): Don't gc allocate.
+ 	(clear_all_eref_arrays): Free the array rather than
+ 	clear them.
+ 	(rename_1): Ditto on both counts.
+ 	(free_expr_info): Free the arrays.
+ 	(collect_expressions): Don't gc allocate the arrays.
+ 
+ 2003-11-18  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (insert_one_operand): Handle self-referential
+ 	ephi's properly.
+ 
+ 2003-11-19  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (true_exprs, false_exprs): New hash tables.
+ 	(nonzero_vars): New varray.
+ 	(dom_walk_block_data): Add true_exprs, false_exprs and nonzero_vars.
+ 	(get_value_for, set_value_for): Accept additional argument indicating
+ 	which table to use.  Callers updated.
+ 	(tree_ssa_dominator_optimize_1): Initialize and wipe our new hash
+ 	tables and varray appropriately.
+ 	(dom_opt_initialize_block): Initialize new block local varrays for
+ 	true expressions, false expressions and nonzero vars.  Update call
+ 	to record_equivalences_from_incoming_edge.
+ 	(dom_opt_finalize_block): Put equivalences from taken edges
+ 	into the true_exprs and false_exprs hash tables.  Restore global
+ 	state for true_exprs, false_exprs and nonzero_vars  too.
+ 	(record_equivalences_from_incoming_edge): Accept dom_walk structure
+ 	instead of a gazillion varrays.  Pass down block local
+ 	true_exprs, false_exprs and nonzero_vars varrays to various children.
+ 	(optimize_stmt):  Accept block local nonzero_vars argument.  Pass
+ 	new varrays down to record_equivalences_from_stmt.
+ 	(thread_jumps_walk_stmt): Pass new varrays down to
+ 	record_equivalences_from_stmt.
+ 	(dom_opt_walk_stmt): Pass new varrays down to optimize_stmt.
+ 	(dump_dominator_optimizer_statistics): Dump new hash tables.
+ 	(record_cond_is_true, record_cond_is_false): Record info into
+ 	the true/false hash tables/varrays instead of the main expression
+ 	varrays.  Don't create useless tree nodes.
+ 	(record_var_is_nonzero): New function.
+ 	(record_equivalences_from_stmt): Don't generate useless tree nodes.
+ 	(lookup_avail_expr): Consult nonzero_vars and the true/false
+ 	expression tables as well.
+ 	(get_eq_expr_value): Record local true/false expressions in the
+ 	local true/false varrays rather than the main local expression
+ 	varray.
+ 	(true_false_expr_hash, true_false_expr_eq): New functions.
+ 
+ 	* Makefile.in (OBJS-sommon): Add tree-ssanames.o.
+ 	(tree-ssanames.o): Add dependencies.
+ 	* tree-dfa.c (remove_phi_node): Release SSA_NAME expression when
+ 	we remove the PHI node.
+ 	(remove_all_phi_nodes_for): Similarly.
+ 	* tree-ssa.c (prepare_operand_for_rename): Similarly when we
+ 	strip away an SSA_NAME expression from an operand.
+ 	(init_tree_ssa): Call the SSA_NAME initializer.
+ 	(delete_tree_ssa): Call the SSA_NAME finalizer.
+ 	* tree-ssa-dom.c (tree_ssa_dominator_optimize_1): Clear the
+ 	const_and_copies and vrp_data virtual arrays.
+ 	* tree-ssanames.c: New file for management of SSA_NAME expressions.
+ 	* tree.h: Prototypes for functions exported by tree-ssanames.c.
+ 	* tree-flow.h, tree-ssa-ccp.c, tree-ssa-dce.c: Use highest_ssa_version
+ 	rather than next_ssa_version.
+ 	* tree-ssa-dom.c, tree-ssa-live.c, tree-ssa.c: Similarly.
+ 	* tree.c (dump_tree_statistics): Call into tree-ssaname statistics
+ 	dumper too.
+ 	(make_ssa_name): Kill.  Now in tree-ssanames.c
+ 
+ 2003-11-18  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree.c (recompute_tree_invarant_for_addr_expr): Split out from ...
+ 	(build1): ... here.
+ 	* tree.h: Declare it.
+ 	* gimplify.c (gimplify_addr_expr): Use it.
+ 	* tree-ssa-ccp.c (maybe_fold_offset_to_array_ref): Split out
+ 	from fold_indirect_refs_r.
+ 	(maybe_fold_stmt_indirect): Likewise.
+ 	(maybe_fold_offset_to_component_ref): New.
+ 	(maybe_fold_stmt_plus): New.
+ 	(fold_stmt_r): Rename from fold_indirect_refs_r.
+ 	(fold_stmt): Strip more useless type conversions.
+ 
+ 2003-11-18  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-cfg.c (dump_function_to_file): Mind when cfun is null.
+ 
+ 2003-11-18  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	Revert
+ 
+ 	2003-11-18  Jan Hubicka  <jh@suse.cz>
+ 
+ 		* tree-cfg.c (cfg_remove_useless_stmts_bb): Avoid crash.
+ 		* tree-dfa.c (get_expr_operands): Fix handling of CALL_EXPR.
+ 
+ 	2003-11-18  Jan Hubicka  <jh@suse.cz>
+ 
+ 		* Makefile.in (sibcall.o): Kill.
+ 		(tree-tailcall.o): Add except.h dependency
+ 		* sibcall.c: Kill.
+ 		(purge_reg_equiv_notes, purge_mem_unchanging_flag): Move to ...
+ 		* calls.c (purge_reg_equiv_notes,
+ 		purge_mem_unchanging_flag) ... here.
+ 		(expand_call): Do not produce placeholders; do
+ 		not deal with tail recursion; update
+ 		equivalencies after sibcall production.
+ 		* toplev.c (rest_of_handle_sibling_calls): Kill.
+ 		(rest_of_compialtion): Do not use rest_of_handle_sibling_calls.
+ 		* tree-dump.c (dump_files): Add tail2
+ 		* tree-flow.h (tree_optimize_tail_calls): Update prototype.
+ 		* tree-optimize.c (optimize_function_tree): Do
+ 		tail optimization twice.
+ 		* tree-tailcall.c: Inlucde except.h
+ 		(suitable_for_tail_call_opt_p): New.
+ 		(optimize_tail_call): Add opt_tailcalls argument;
+ 		optimize tailcalls.
+ 		(tree_optimize_tail_calls): Add opt_tailcalls/pass arguments.
+ 		* tree.h (CALL_EXPR_TAILCALL): New.
+ 		(tree_dump_index): Add tail2
+ 
+ 2003-11-18  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-cfg.c (cfg_remove_useless_stmts_bb): Avoid crash.
+ 	* tree-dfa.c (get_expr_operands): Fix handling of CALL_EXPR.
+ 
+ 2003-11-18  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-optimize.c (optimize_function_tree): Disable tail
+ 	call optimizations.
+ 
+ 2003-11-18  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* Makefile.in (sibcall.o): Kill.
+ 	(tree-tailcall.o): Add except.h dependency
+ 	* sibcall.c: Kill.
+ 	(purge_reg_equiv_notes, purge_mem_unchanging_flag): Move to ...
+ 	* calls.c (purge_reg_equiv_notes, purge_mem_unchanging_flag) ... here.
+ 	(expand_call): Do not produce placeholders; do not deal with tail
+ 	recursion; update equivalencies after sibcall production.
+ 	* toplev.c (rest_of_handle_sibling_calls): Kill.
+ 	(rest_of_compialtion): Do not use rest_of_handle_sibling_calls.
+ 	* tree-dump.c (dump_files): Add tail2
+ 	* tree-flow.h (tree_optimize_tail_calls): Update prototype.
+ 	* tree-optimize.c (optimize_function_tree): Do tail optimization twice.
+ 	* tree-tailcall.c: Inlucde except.h
+ 	(suitable_for_tail_call_opt_p): New.
+ 	(optimize_tail_call): Add opt_tailcalls argument; optimize tailcalls.
+ 	(tree_optimize_tail_calls): Add opt_tailcalls/pass arguments.
+ 	* tree.h (CALL_EXPR_TAILCALL): New.
+ 	(tree_dump_index): Add tail2
+ 
+ 2003-11-18  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (thread_across_edge): Lose block_avail_exprs argument.
+ 	Callers updated.  Pass NULL for block_avail_exprs in call to
+ 	lookup_avail_expr.  Record both the condition and the inverted
+ 	condition when threading across an edge.
+ 
+ 2003-11-18  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-ssa.c (tree_ssa_useless_type_conversion): Use TYPE_MAIN_VARIANT
+ 	when compariing pointer types too.
+ 
+ 2003-11-18  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-dump.c (dump_files): Reorder tail calls.
+ 	* tree-optimize.c (optimize_function_tree): Likewise
+ 	* tree-tailcall.c (optimize_tail_call, eliminate_tail_call): Remove
+ 	variable tmpvars; update SSA.
+ 	(suitable_for_tail_opt_p): Do not give up because of static variables.
+ 	(find_tail_calls):  Track return values in SSA graph.
+ 	* tree.c (make-phi_node): Do not create new SSA name when operand
+ 	already is.
+ 	* tree.h (enum tree_dump_index): Reorder tail call.
+ 
+ 2003-11-17  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* gimplify.c (gimplify_call_expr): Change gimple_test_f argument to
+ 	return bool type.
+ 	(mark_decls_volatile_r): New local function.
+ 	(gimplify_expr): Make gimple_test_f return bool type.
+ 	Call mark_decls_volatile_r when gimplifying VA_ARG_EXPR.
+ 	* tree-dfa.c (struct walk_state): Remove field is_va_arg_expr.
+ 	Update all callers.
+ 	(opf_force_vop): Remove.  Update all users.
+ 	(add_stmt_operand): Re-structure to add real operands only for
+ 	GIMPLE register variables.
+ 	(find_vars_r): Don't handle VA_ARG_EXPR nodes.
+ 	(add_referenced_var): Also assign a UID to variables with hidden
+ 	uses.
+ 	Call is_gimple_call_clobbered to determine if a variable is call
+ 	clobbered.
+ 	(get_memory_tag_for): Mark memory tags volatile and static.
+ 	* tree-flow.h (struct var_ann_d): Remove field is_in_va_arg_expr.
+ 	Update all users.
+ 	* tree-simple.c (is_gimple_*): Change return type to bool.  Update
+ 	all users.
+ 	(is_gimple_reg_type): Return true only for non aggregate types.
+ 	(is_gimple_non_addressable_1): New local function.
+ 	(is_gimple_reg): Call it.
+ 	(is_gimple_non_addressable): New function.
+ 	(is_gimple_call_clobbered): New function.
+ 	* tree-simple.h (is_gimple_*): Change return type to bool.
+ 
+ 2003-11-17  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/11266
+ 	* gimplify.c (gimple_add_tmp_var): Also make sure
+ 	seen_in_bind_expr isn't set.
+ 	(mostly_copy_tree_r): Don't copy a TARGET_EXPR.
+ 	(gimplify_target_expr): Only expand a TARGET_EXPR the first time
+ 	we see it.
+ 
+ 2003-11-17  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-pretty-print.c (dump_generic_node): Use %u not %x for
+ 	printing DECL_UID.
+ 
+ 2003-11-16  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-common.c (c_add_case_label): Use create_artificial_label.
+ 	* tree-simple.h (create_artificial_label): Move decl ...
+ 	* tree.h: ... here.
+ 
+ 2003-11-16  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR c++/12770
+ 	* gimple-low.c (lower_stmt_body): Take a tree, not a tree*.
+ 	(lower_stmt): Handle EH nodes.
+ 	(lower_bind_expr): Remove fixme.
+ 	(block_may_fallthru): Move from tree-eh.c.  Handle COND_EXPR,
+ 	BIND_EXPR, and TRY_FINALLY_EXPR.
+ 	(lower_cond_expr): Use it.
+ 	* tree-eh.c (collect_finally_tree): Ignore COND_EXPR and BIND_EXPR.
+ 	(replace_goto_queue_cond_clause): New.
+ 	(replace_goto_queue_1): Use it.  Split out statement_list handling.
+ 	(replace_goto_queue_stmt_list): New.
+ 	(-block_may_fallthru): Move to gimple-low.c.
+ 	(lower_eh_constructs_1): Ignore BIND_EXPR.
+ 	* tree-flow.h (block_may_fallthru): Declare.
+ 
+ 	* tree-dump.c (dump_files): Exchange .eh and .lower passes.
+ 	* tree-optimize.c (tree_rest_of_compilation): Likewise.
+ 	* tree.h (enum tree_dump_index): Likewise.
+ 
+ 2003-11-16  Jason Merrill  <jason@redhat.com>
+ 
+ 	* gimplify.c (mostly_copy_tree_r): Don't walk into a BLOCK.
+ 
+ 	* tree-inline.c (walk_tree): Don't walk into the BIND_EXPR_VARS
+ 	of a BIND_EXPR.
+ 	* c-common.c (c_walk_subtrees): Don't walk into the decl of a
+ 	DECL_STMT.
+ 
+ 	PR optimization/11269
+ 	* dwarf2out.c (gen_subprogram_die): Generate a DIE for a named
+ 	return value.
+ 	(loc_descriptor_from_tree): Treat RESULT_DECL like VAR_DECL.
+ 	(add_location_or_const_value_attribute): Likewise.
+ 	(add_bound_info): Likewise.
+ 	(gen_decl_die): Likewise.
+ 
+ 2003-11-16  Jason Merrill  <jason@redhat.com>
+ 
+ 	* c-pretty-print.c (debug_c_tree): Restore removed fn.
+ 	* diagnostic.h: Declare it.
+ 
+ 	* tree-pretty-print.c (dump_generic_node): Use DECL_UID when
+ 	dumping anonymous decls.
+ 
+ 2003-11-16  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-cfg.c (last_and_only_stmt): New.
+ 	* tree-flow.h (last_and_only_stmt): Declare.
+ 	* tree-ssa-dom.c (thread_across_edge): Use it.
+ 
+ 	* tree-cfg.c (tree_block_forwards_to): Don't check for empty stmts.
+ 	(tree_forwarder_block_p): Likewise.
+ 	* tree-dfa.c (get_stmt_operands): Likewise.
+ 	* tree-ssa-ccp.c (set_rhs): Likewise.
+ 	* tree-ssa-dom.c (optimize_stmt): Likewise.
+ 	* tree-ssa.c (rewrite_stmt): Likewise.
+ 
+ 2003-11-16  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree.h (LABEL_DECL_UID): Rename from LABEL_DECL_INDEX.
+ 	* tree-flow.h (bsi_remove): Declare.
+ 	* tree-flow-inline.h (bsi_remove): Move ...
+ 	* tree-cfg.c (set_bb_for_stmt): Don't re-set LABEL_DECL_UID.
+ 	Verify that a label isn't already in a block before adding it.
+ 	(bsi_remove): Move from tree-flow-inline.h, clear bb.
+ 	* tree-pretty-print.c (dump_generic_node): Use LABEL_DECL_UID if set.
+ 
+ 2003-11-15  Richard Henderson  <rth@redhat.com>
+ 
+ 	* function.c (clear_block_marks): Rename from reorder_blocks_0, export.
+ 	* function.h (clear_block_marks): Declare.
+ 	* gimple-low.c (lower_function_body): Use it.
+ 	(lower_bind_expr): Ensure we don't link blocks into the tree twice.
+ 	* gimplify.c (gimplify_body): Keep old bind_expr at top level if
+ 	possible.
+ 
+ 2003-11-14  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-ssa-pre.c (split_critical_edges): Reimplement.  Call
+ 	tree_split_edge directly.
+ 
+ 2003-11-14  Jason Merrill  <jason@redhat.com>
+ 
+ 	* tree-eh.c (do_return_redirection): Assign directly to the
+ 	RESULT_DECL of a function which returns in memory.
+ 
+ 2003-11-14  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (pre_stats): Add ephis_current member.
+ 	(create_ephi_node): Use xmalloc, not ggc_alloc_tree.
+ 	(clear_all_eref_arrays): Free the ephis here.
+ 	(expr_phi_insertion): Don't append the ephis to the erefs array.
+ 	(insert_occ_in_preorder_dt_order): Move building/freeing of dfn
+ 	array so that it only occurs once per function..
+ 	(rename_1): Ditto on the dfs_id array.
+ 	(ephi_use_pool): New alloc pool.
+ 	(add_ephi_use): Pool allocate these things, rather than
+ 	ggc_alloc'ing them.
+ 	(insert_euse_in_preorder_dt_order_1): Use ephi_at_block to put the
+ 	ephi in the list.
+ 	(pre_expression): Don't PRE when we only have 1 occurrence.
+ 	(expr_lexically_eq): Make inline.
+ 	(names_match_p): Move closer to first use.
+ 	(tree_perform_ssapre): Alloc and free the ephi_use_pool.
+ 	Make stat printing per-expression.
+ 	Add checking that we freed all ephis.
+ 
+ 2003-11-14  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* common.opt (ftree-ter): Document new option.
+ 	* flags.h (flag_tree_ter): Add new flag.
+ 	* fold-const.c (invert_truthvalue): Don't ignore cast to BOOLEAN_TYPE.
+ 	* opts.c (decode_options): Option -ftree-ter defaults to on.
+ 	(common_handle_option): Add processing for flag_tree_ter.
+ 	* toplev.c (flag_tree_ter): Initialize to 0.
+ 	(lang_independent_options f_): Add -ftree-ter flag.
+ 	* tree-ssa-live.c (init_var_map): Initialize ref_count to 0.
+ 	(delete_var_map): Free ref count if allocated.
+ 	(register_ssa_partition): Add "is_use" parameter for reference counting.
+ 	(create_ssa_var_map): Add flag and code for calculating ref counts.
+ 	* tree-ssa-live.h (struct _var_map): Add ref_count field.
+ 	(SSA_VAR_MAP_REF_COUNT): Define flag.
+ 	(version_ref_count): Function to retreive ref_count.
+ 	* tree-ssa.c (replace_variable): If an expression vector is passed in,
+ 	use replacement expression instead of mapped variable when available.
+ 	(struct value_expr_d): New structure for value lists.
+ 	(struct temp_expr_table_d): Structure used to build an expression
+ 	replacement table.
+ 	(new_temp_expr_table): New. Create a new TER (Temporary Expression
+ 	Replacement) table.
+ 	(free_temp_expr_table): New. Free a TER table.
+ 	(new_value_expr): New. Allocate a value list element.
+ 	(free_value_expr): New. Free a value list element.
+ 	(find_value_in_list): New. Find a value in a list.
+ 	(add_value_to_list): New. Add a value to a list if not already present.
+ 	(remove_value_from_list): New. Remove a value from a list.
+ 	(add_dependance): New. Add a dependency to an expression.
+ 	(check_replaceable): New. Check if a stmt is a candidate for TER. Add
+ 	to active list and create dependancies if so.
+ 	(finish_expr): New. Remove an expression from TER consideration.
+ 	(mark_replaceable): New. Finish a TER expression as a valid replacement.
+ 	(kill_expr): New. Finish dependent TER expressions as not replaceable.
+ 	(kill_virtual_exprs): New. Finish any TER expressions dependent on a
+ 	virtual operand as not replaceable.
+ 	(find_replaceable_in_bb): New. Process a basic block for TER expression.
+ 	(find_replaceable_exprs): New. Entry point for TER expression finder.
+ 	(dump_replaceable_exprs): New. output list of replaceable expressions.
+ 	(rewrite_out_of_ssa): Build TER table if requested, and use it.
+ 
+ 2003-11-14  Andreas Jaeger  <aj@suse.de>
+ 
+ 	* c-semantics.c (find_reachable_label): Use C90 function
+ 	declaration.
+ 
+ 2003-11-14  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR middle-end/12526
+ 	* tree-cfg.c (call_expr_flags): Move to calls.c.
+ 	* tree-flow.h: Move prototype to tree.h.
+ 
+ 	PR c++/13033
+ 	* c-simplify.c (gimplify_c_loop): Wrap the increment in a
+ 	CLEANUP_POINT_EXPR.
+ 
+ 	* tree-dfa.c (get_stmt_operands) <ASM_EXPR>: A memory clobber
+ 	clobbers all call-clobbered variables.   Clobber clobber.
+ 
+ 	* gimplify.c (canonicalize_component_ref): Remove redundant call
+ 	to recalculate_side_effects.
+ 
+ 2003-11-14  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR c++/12751
+ 	* tree-eh.c (struct leh_tf_state): Add outer.
+ 	(lower_try_finally, lower_cleanup): Set it.
+ 	(lower_try_finally_fallthru_label): New.
+ 	(honor_protect_cleanup_actions): Use it.
+ 	(lower_try_finally_copy, lower_try_finally_switch): Likewise.
+ 
+ 	* tree-eh.c (collect_finally_tree): Complete manual tailrecurse
+ 	transformation.
+ 
+ 2003-11-14  Richard Henderson  <rth@redhat.com>
+ 
+ 	* gimplify.c (voidify_wrapper_expr): Don't clobber TREE_TYPE of
+ 	statements in a STATEMENT_LIST.  Be prepared for an empty list.
+ 
+ 2003-11-14  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* jump.c (never_reached_warning): Remove function.
+ 	* rtl.h (never_reached_warning): Don't declare it.
+ 	* cfgrtl.c (never_reached_warning): Don't call it.
+ 	* cse.c (never_reached_warning): Ditto.
+ 
+ 2003-11-13  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-cfg.c (bsi_replace): Restore accidentally removed code.
+ 
+ 	* tree-cfg.c (cfg_remove_useless_stmts_bb): Also detect useless
+ 	var->var copies created by the out-of-ssa translation.
+ 
+ 2003-11-13  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	PR middle-end/11514
+ 	* tree-inline.c (walk_tree): Handle PLACEHOLDER_EXPR.
+ 
+ 2003-11-13  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-cfg.c (cfg_remove_useless_stmts_bb): Initialize stmt.
+ 
+ 2003-11-13  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* calls.c (special_function_p): Do not check for ECF_MALLOC.
+ 	(flags_from_decl_or_type):  Use special_function_p.
+ 	(expand_call): Remove call to special_function_p.
+ 	* tree-cfg.c (notice_special_calls, clear_special_calls): New functions.
+ 	(remove_useless_stmts): Use clear_special_calls.
+ 	(remove_useless_stmts_1): Use notice_special_calls.
+ 	* tree-flow.h (notice_special_calls, clear_special_calls): New functions.
+ 	* tree-ssa-dce.c (remove_dead_stmts): Use clear_special_calls and
+ 	notice_special_calls..
+ 
+ 	* gimplify.c (gimplify_expr): Check labels.
+ 
+ 	* tree-cfg.c (tree_verify_flow_info): Check labels.
+ 
+ 	* tree-cfg.c (make_exit_edges): Do not create edges for const
+ 	functions.
+ 	(update_call_expr_flags): Fix.
+ 
+ 2003-11-12  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	(declare_inlined_vars): New local function.
+ 	(initialize_inlined_parameters): Call it.
+ 	(expand_call_inline): Call it.
+ 
+ 2003-11-13  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	PR optimization/12640
+ 	* tree-ssa-ccp.c (get_strlen): Don't follow the UD chain
+ 	of a PHI argument if the DEF stmt for the argument is
+ 	the PHI itself.
+ 
+ 2003-11-12  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 	    Jeff Law  <law@redhat.com>
+ 
+ 	* tree-cfg.c (cfg_remove_useless_stmts): New function.
+ 	(cfg_remove_useless_stmts_bb): Likewise.
+ 	* tree-flow.h (cfg_remove_useless_stmts): Prototype.
+ 	* tree-ssa.c (rewrite_out_of_ssa): Use cfg_remove_useless_stmts
+ 	instead of remove_useless_stmts.
+ 
+ 2003-11-12  Richard Henderson  <rth@redhat.com>
+ 
+ 	* Makefile.in (OBJS-common): Add tree-iterator.o.
+ 	(expr.o): Depend on tree-iterator.h.
+ 	(GTFILES): Add tree-iterator.c.
+ 	* basic-block.h (struct basic_block_def): Replace head_tree_p
+ 	and end_tree_p with stmt_list.
+ 	(tree_bb_root): New.
+ 	(create_bb): Don't declare.
+ 	* c-common.c (c_warn_unused_result): Handle STATEMENT_LIST.
+ 	* c-simplify.c (c_gimplify_stmt): Don't rationalize_compound_expr.
+ 	* cfg.c (entry_exit_blocks): Adjust for member changes.
+ 	(compact_blocks): Manage tree_bb_root.
+ 	* expr.c (expand_expr_1): Handle STATEMENT_LIST.
+ 	* gimple-low.c: Update for tree_stmt_iterator changes.
+ 	(lower_cond_expr): Use expr_only.  Notice empty conditionals.
+ 	* gimplify.c (append_to_statement_list_1): Create and
+ 	manage statement_list nodes.
+ 	(foreach_stmt): Remove.
+ 	(wfl_locus): Remove.
+ 	(annotate_all_with_locus_1): Merge into...
+ 	(annotate_all_with_locus): ... here.  Iterate over the
+ 	statement list directly.
+ 	(voidify_wrapper_expr): Handle STATEMENT_LIST.
+ 	(gimplify_return_expr): Likewise.
+ 	(gimplify_loop_expr): Likewise.
+ 	(shortcut_cond_r, shortcut_cond_expr): Likewise.
+ 	(gimplify_cleanup_point_expr): Likewise.
+ 	(gimple_build_eh_filter): Create statement list bodies.
+ 	(gimplify_bind_expr): Likewise.
+ 	(gimplify_switch_expr): Likewise.
+ 	(gimplify_cond_expr): Likewise.
+ 	(gimplify_compound_expr): Handle void expressions as well.
+ 	(gimplify_statement_list): New.
+ 	(gimple_push_cleanup): Gimplify the WITH_CLEANUP_EXPR operand.
+ 	(gimplify_stmt): Ensure non-null result.
+ 	(gimplify_to_stmt_list): New.
+ 	(gimplify_expr): Use gimplify_compound_expr, gimplify_statement_list,
+ 	gimplify_to_stmt_list as appropriate.
+ 	(gimplify_body): Fix creation of outer BIND_EXPR.
+ 	* tree-cfg.c (tree_bb_root): New.
+ 	(build_tree_cfg): Initialize it.  Update for make_blocks changes.
+ 	(factor_computed_gotos): Use create_bb directly.
+ 	(make_blocks): Rewrite to use statement lists.
+ 	(append_stmt_to_bb, prepend_stmt_to_bb): Remove.
+ 	(create_bb): Make static.  Add stmt_list argument.  Don't allow
+ 	null after argument.  Set tree_bb_root.
+ 	(make_edges): ENTRY block successor is FALLTHRU.
+ 	(remove_useless_stmts_warn_notreached): Handle STATEMENT_LIST.
+ 	(struct rus_data): Add last_goto.
+ 	(remove_useless_stmts_cond): Clear it.  Zap empty conditionals.
+ 	Use expr_only for simple statment elimination.
+ 	(remove_useless_stmts_tf): Clear last_goto.  Use TREE_SIDE_EFFECTS
+ 	instead of IS_EMPTY_STMT.  Use append_to_statement_list instead of
+ 	munging to COMPOUND_EXPR.
+ 	(remove_useless_stmts_tc): Clear last_goto.  Use TREE_SIDE_EFFECTS.
+ 	(remove_useless_stmts_goto): Set last_goto.
+ 	(remove_useless_stmts_label): New.  Kill goto-next-label.
+ 	(remove_useless_stmts_1): Reorg to handle STATEMENT_LIST.
+ 	(remove_bb): Simplify block removal.
+ 	(remove_bsi_from_block): Kill.
+ 	(tree_block_forwards_to): Tidy bsi loops.  Do not create
+ 	block label here.
+ 	(tree_cfg2dot): Update for bb->stmt_list.
+ 	(delete_tree_cfg): Clear tree_bb_root.
+ 	(set_bb_for_stmt): Handle STATEMENT_LISTs.
+ 	(bsi_insert_before, bsi_insert_after): Re-implement on TSIs.
+ 	(bsi_move_after, bsi_move_before, bsi_move_to_bb_end): Likewise.
+ 	(bsi_replace): Likewise.
+ 	(tree_find_edge_insert_loc): New, split from ...
+ 	(bsi_insert_on_edge_immediate): ... here.
+ 	(bsi_commit_edge_inserts): Use it.  Add all stmts at once.
+ 	(bsi_insert_on_edge): Use statement lists.
+ 	(tree_split_edge): Position new block correctly.  Deal with
+ 	fallthrough to EXIT.
+ 	(tree_verify_flow_info): Do not check block order vs statement chain.
+ 	(tree_make_forwarder_block): Update create_bb call, fix edge flags.
+ 	(thread_jumps): Call tree_redirect_edge_and_branch directly.
+ 	(tree_block_label): Don't return a NONLOCAL_LABEL.
+ 	(tree_redirect_edge_and_branch_1): Rename from s/_1//.  Take an
+ 	argument to use ssa_redirect_edge or redirect_edge_succ.  Use
+ 	tree_split_edge instead of bsi_insert_on_edge_immediate.
+ 	(tree_redirect_edge_and_branch): New.
+ 	(remove_stmt, first_exec_stmt, bsi_init, bsi_next_in_bb): Kill.
+ 	(bsi_start, bsi_last, bsi_prev, bsi_from_tsi): Kill.
+ 	(bsi_update_from_tsi, bsi_link_after): Kill.
+ 	* tree-eh.c (collect_finally_tree): Handle STATEMENT_LIST.
+ 	(replace_goto_queue_1): Likewise.
+ 	(replace_goto_queue): Don't use walk_tree.
+ 	(do_return_redirection): Create statement lists.
+ 	(do_goto_redirection): Likewise.
+ 	(block_may_fallthru_last): Fold into...
+ 	(block_may_fallthru): ... here.
+ 	(frob_into_branch_around): Use append_to_statement_list.
+ 	(honor_protect_cleanup_actions): Likewise.
+ 	(lower_try_finally_nofallthru): Likewise.
+ 	(lower_try_finally_onedest): Likewise.
+ 	(lower_try_finally_copy): Likewise.
+ 	(lower_try_finally_switch): Likewise.
+ 	(lower_try_finally): Likewise.
+ 	(lower_catch): Likewise.
+ 	(lower_eh_filter): Likewise.
+ 	(lower_eh_constructs_1): Handle STATEMENT_LIST.
+ 	* tree-flow-inline.h (BSI_NUM_ELEMENTS, bsi_list_p): Remove.
+ 	(new_bsi_list, empty_bsi_stack, FOR_EACH_BSI_IN_REVERSE): Remove.
+ 	(FOR_EACH_STMT_IN_REVERSE): Remove.
+ 	(bsi_start, bsi_last, bsi_end_p): Re-implement based on TSIs.
+ 	(bsi_next, bsi_prev, bsi_stmt, bsi_stmt_ptr, bsi_remove): Likewise.
+ 	* tree-flow.h (block_stmt_iterator): Likewise.
+ 	* tree-inline.c (copy_statement_list): New.
+ 	(copy_body_r): Use it, and append_to_statement_list.
+ 	(initialize_inlined_parameters): Use append_to_statement_list.
+ 	(expand_call_inline): Likewise.
+ 	(gimple_expand_calls_inline): New.
+ 	(expand_calls_inline): Use it.
+ 	(walk_tree, unsave_r): Handle STATEMENT_LIST.
+ 	(add_stmt_to_compound): Remove.
+ 	* tree-iterator.c: New file.
+ 	* tree-iterator.h: Re-implement based on STATEMENT_LIST.
+ 	* tree-mudflap.c (mf_decl_cache_locals): Don't
+ 	rationalize_compound_expr.
+ 	* tree-optimize.c (optimize_function_tree): Make static.
+ 	Rechain statements from blocks before deleting the cfg.
+ 	* tree-pretty-print.c (dump_generic_node): Handle STATEMENT_LIST,
+ 	update for change in tree_stmt_iterator wrt COMPOUND_EXPR.
+ 	(dump_generic_node): Dump lowered COND_EXPR on a single line.
+ 	* tree-simple.c (is_gimple_stmt): Handle STATEMENT_LIST.
+ 	* tree-simple.h (foreach_stmt_fn, foreach_stmt): Remove.
+ 	(gimplify_to_stmt_list): Declare.
+ 	(alloc_stmt_list, free_stmt_list): Declare.
+ 	* tree-ssa-dce.c (should_remove_dead_stmt): Rename from
+ 	remove_dead_stmt; return bool if statement should be removed.
+ 	(remove_dead_stmts): Update to match.
+ 	* tree-ssa-live.c (build_tree_conflict_graph): Don't use
+ 	FOR_EACH_STMT_IN_REVERSE.
+ 	* tree-ssa-pre.c (reaching_def): Tidy BSI usage.
+ 	(insert_one_operand, collect_expressions): Likewise.
+ 	* tree.c (tree_size): Handle STATEMENT_LIST.
+ 	(copy_node): Abort on STATEMENT_LIST.
+ 	(expr_first, expr_last): Move to tree-iterator.c.
+ 	(expr_length): Remove.
+ 	(tree_node_structure): Handle STATEMENT_LIST.
+ 	(tsi_link_before, tsi_link_after, tsi_delink): Move to tree-iterator.c.
+ 	(tsi_link_chain_before, tsi_link_chain_after): Merge into non-chain.
+ 	(tsi_new_stmt_list, tsi_stmt_list_head, body_is_empty): Kill.
+ 	* tree.def (STATEMENT_LIST): New.
+ 	* tree.h (STATEMENT_LIST_HEAD, STATEMENT_LIST_TAIL): New.
+ 	(struct tree_statement_list_node): New.
+ 	(struct tree_statement_list): New.
+ 	(enum tree_node_structure_enum): Add TS_STATEMENT_LIST.
+ 	(union tree_node): Add stmt_list.
+ 	(expr_length): Remove.
+ 	(expr_only): New.
+ 	(add_to_compound_expr, body_is_empty): Remove.
+ 	(optimize_function_tree): Remove.
+ 
+ 2003-11-12  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-flow.h (remove_useless_vars): Declare.
+ 	(expand_var_p): Declaration removed.
+ 	* tree-ssa.c (rewrite_out_of_ssa): Call remove_useless_vars.
+ 	* tree-cfg.c (dump_function_to_file): Update dumping of variables.
+ 	* gimple-low.c (expand_var_p): Made static.
+ 	(remove_useless_vars): New.
+ 	(expand_used_vars): Expand all variables in the
+ 	cfun->unexpanded_var_list.
+ 
+ 2003-11-11  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-common.c (c_gimplify_stmt): Fix botched removal of
+ 	rationalize_compound_expr calls.
+ 
+ 	* c-semantics.c (build_stmt): Set TREE_SIDE_EFFECTS.
+ 	* c-simplify.c (c_gimplify_stmt): Return a gimplify_status;
+ 	mind the status from subroutines to avoid re-gimplification.
+ 	(c_build_bind_expr): Do not call gimplify_stmt.
+ 	(gimplify_c_loop): Don't create a loop_expr; fully gimplify.
+ 	(gimplify_block, gimplify_cleanup, gimplify_expr_stmt,
+ 	gimplify_for_stmt, gimplify_while_stmt, gimplify_do_stmt,
+ 	gimplify_if_stmt, gimplify_switch_stmt, gimplify_return_stmt,
+ 	gimplify_decl_stmt, gimplify_compound_literal_expr,
+ 	gimplify_stmt_expr): Return a gimplify_status.  In most cases,
+ 	don't do local gimplification of sub-structures.
+ 	(gimplify_decl_stmt): Use append_to_compound_expr when we care
+ 	about the result value.
+ 	(gimplify_stmt_expr): Use append_to_statement_list_force and
+ 	re-gimplify so that voidify_wrapper_expr can work.
+ 	(finish_bc_block): Don't append to a non-list.
+ 	(c_gimplify_expr): Pass back the gimplify_status of subroutines.
+ 	* c-common.h (c_gimplify_stmt): Update decl.
+ 	* gimplify.c (append_to_statement_list_1): Make sure list_p is
+ 	never null after call.
+ 	(append_to_compound_expr): New.
+ 	* tree-simple.h (append_to_compound_expr): Declare.
+ 
+ 2003-11-11  Richard Henderson  <rth@redhat.com>
+ 
+ 	* gimplify.c (gimplify_addr_expr): Clear, not copy, TREE_SIDE_EFFECTS.
+ 
+ 2003-11-11  Richard Henderson  <rth@redhat.com>
+ 
+ 	PR c/13014
+ 	* c-simplify.c (gimplify_if_stmt): Remove short circuit.
+ 	* tree-cfg.c (struct rus_data): Add has_label.
+ 	(remove_useless_stmts_warn_notreached): New.
+ 	(remove_useless_stmts_cond): Warn for deleted conditionals.
+ 	(remove_useless_stmts_tc): Warn for deleted catches.
+ 	(remove_useless_stmts_1): Set has_label.
+ 
+ 2003-11-11  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* gimplify.c (gimplify_call_expr):  Unset side effects for
+ 	pure functions too.
+ 	* tree-cfg.c (update-call_expr_flags): New function.
+ 	(remove_useless_stmts_and_vars_1): Use it.
+ 	(is_ctrl_altering_stmt):  Pure/const calls never alter the CFG.
+ 	* tree-ssa-dce.c (stmt_useful_p): Check side effects flag
+ 	on call exprs.
+ 
+ 2003-11-11  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-cfg.c (has_label_p): New function.
+ 	(tree_verify_flow_info): New checks.
+ 	* tree-optimize.c (optimize_function_tree): Call verify_flow_info
+ 	before de-SSA.
+ 
+ 2003-11-11  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-cfg.c (struct rus_data): Rename from rusv_data.
+ 	Remove remove_unused_vars.
+ 	(remove_useless_stmts*): Rename from remove_useless_stmts_and_vars*.
+ 	(remove_useless_stmts_bind): Do not remove dead variables.
+ 	(remove_useless_stmts): Kill remove_unused_vars argument.
+ 	* tree-flow.h (remove_useless_stmts): Update.
+ 	* tree-optimize.c (tree_rest_of_compilation): Update call.
+ 	* tree-ssa.c (rewrite_out_of_ssa): Likewise.
+ 
+ 2003-11-11  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 	    Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* basic-block.h (brief_dump_cfg): Declare.
+ 	* cfg.c (dump_cfg_bb_info, brief_dump_cfg): New.
+ 	* diagnostic.h (dump_generic_node): Declaration changed.
+ 	(print_generic_stmt_indented): Declare.
+ 	* gimple-low.c (expand_var_p): New.
+ 	(expand_used_vars): Use it.
+ 	* tree-cfg.c (struct cfg_stats_d): Remove num_failed_bind_expr_merges
+ 	field.
+ 	(remove_bb): Only dump whole block with TDF_DETAILS.
+ 	(tree_dump_bb): Use dump_generic_bb.
+ 	(dump_tree_cfg): Use brief_dump_cfg and dump_function_to_file.
+ 	(dump_cfg_function_to_file): Merged into dump_function_to_file,
+ 	removed.
+ 	(dump_cfg_stats): Do not dump cfg_stats.num_failed_bind_expr_merges.
+ 	(dump_function_to_file): Moved from tree-dump.c, merged with
+ 	dump_cfg_function_to_file.
+ 	* tree-dump.c (dump_function_to_file): Removed.
+ 	* tree-flow.h (dump_cfg_function_to_file): Declaration removed.
+ 	(dump_generic_bb, expand_var_p): Declare.
+ 	* tree-must-alias.c (tree_compute_must_alias): Replace
+ 	dump_cfg_function_to_file by dump_function_to_file.
+ 	* tree-ssa-ccp.c (tree_ssa_ccp): Ditto.
+ 	* tree-ssa-copyprop.c (tree_ssa_copyprop): Ditto.
+ 	* tree-ssa-dce.c (tree_ssa_dce): Ditto.
+ 	* tree-ssa-dom.c (tree_ssa_dominator_optimize_1): Ditto.
+ 	* tree-ssa-pre.c (tree_perform_ssapre): Ditto.
+ 	* tree-ssa.c (rewrite_into_ssa, rewrite_out_of_ssa): Ditto.
+ 	* tree-tailcall.c (tree_optimize_tail_calls): Ditto.
+ 	* tree-pretty-print.c (print_declaration, print_generic_decl): Don't
+ 	use flags argument, change spacing.
+ 	(dump_block_info): Removed.
+ 	(dump_generic_bb_buff, dump_generic_bb, print_generic_stmt_indented,
+ 	dump_bb_header, dump_bb_end, dump_phi_nodes): New functions.
+ 	(dump_vops): Change spacing, don't dump phi nodes.
+ 	(do_niy, print_generic_stmt, print_generic_expr, print_declaration,
+ 	print_struct_decl, print_call_name): Add argument to
+ 	the dump_generic_node calls.
+ 	(last_bb): Removed.
+ 	(dump_generic_node): Print semicolons at end of statements correctly.
+ 	Don't print bb related stuff.
+ 	(maybe_init_pretty_print): Don't initialize last_bb.
+ 	* tree-ssa.c (rewrite_out_of_ssa): Do not allow virtual operands to
+ 	be shown in the .optimized dump.
+ 
+ 2003-11-11  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	PR optimization/12936
+ 	* tree-ssa-pre.c (expr_phi_insertion): Remove unused code that was
+ 	causing ICE's for VA_ARG_EXPR.
+ 
+ 2003-11-10  Richard Henderson  <rth@redhat.com>
+ 
+ 	* gimple-low.c (lower_function_body): Lower bind_expr in place.
+ 	(lower_stmt): Only incr for stmts we're skipping.
+ 	(lower_cond_expr): Detect empty if.
+ 
+ 2003-11-10  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* toplev.c (rest_of_decl_compilation): Use the location of the
+ 	declaration for error messages.
+ 
+ 2003-11-10  Richard Henderson  <rth@redhat.com>
+ 
+ 	* gimplify.c (add_stmt_to_compound, add_tree): Remove.
+ 	(append_to_statement_list_1, append_to_statement_list): New.
+ 	(append_to_statement_list_force): New.
+ 	(gimplify_loop_expr): Take pre_p.
+ 	(gimplify_expr): Provide it.
+ 	* tree-simple.h: Update.
+ 
+ 	* c-simplify.c: Replace add_tree with append_to_statement_list.
+ 	* gimplify.c, tree-mudflap.c: Likewise.
+ 
+ 2003-11-10  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-common.c (c_warn_unused_result): Restructure to use iterator
+ 	on COMPOUND_EXPR only.
+ 
+ 2003-11-09  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-cfg.c (tree_verify_flow_info): Fix checking of order of basic
+ 	blocks over code.
+ 
+ 2003-11-09  Richard Henderson  <rth@redhat.com>
+ 
+ 	* basic-block.h (struct edge_def): Turn insns into a union.
+ 	* cfgrtl.c (insert_insn_on_edge): Update to match.
+ 	(commit_one_edge_insertion, commit_edge_insertions): Likewise.
+ 	(commit_edge_insertions_watch_calls): Likewise.
+ 	* gcse.c (reg_killed_on_edge, bypass_block): Likewise.
+ 	* profile.c (instrument_edges): Likewise.
+ 	* rtlanal.c (hoist_insn_to_edge): Likewise.
+ 	* tree-cfg.c (PENDING_STMT): Likewise.
+ 	(SET_PENDING_STMT): Remove.
+ 	(bsi_commit_edge_inserts): Update to match.
+ 
+ 2003-11-08  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* fold.c (nondestructive_fold_binary_to_constant): Fix typo.
+ 	* fold-const.c (fold_relational_const): Check for side effects.
+ 
+ 2003-11-07  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* basic-block.h (create_bb): Declaration changed.
+ 	* tree-cfg.c (create_bb): Enable creating a block on specified place.
+ 	(make_blocks, tree_split_edge, tree_make_forwarder_block): Use it.
+ 	(tree_verify_flow_info): Check bbs are in the correct order.
+ 
+ 	* tree-cfg.c (find_unreachable_blocks): Remove now incorrect comments.
+ 
+ 	* tree-ssa.c (rewrite_out_of_ssa): Don't remove annotations from
+ 	statements before the final dump.
+ 
+ 2003-11-07  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-tailcall.c (struct tailcall): New.
+ 	(bb_optimize_tail_calls, find_tail_call_p): Removed.
+ 	(eliminate_tail_call): Get the tailcall from the struct tailcall.
+ 	(optimize_tail_call, find_tail_calls): New.
+ 	(tree_optimize_tail_calls): Use them.
+ 
+ 2003-11-07  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* gimple-low.c (simple_goto_p): Move to...
+ 	* tree-cfg.c: (simple_goto_p): ... here;
+ 	(nonlocal_goto_p): New.
+ 	(is_computed_goto): Rename to ...
+ 	(computed_goto_p): ... this; make global.
+ 	(factor_computed_gotos, make_blocks):  Update calls.
+ 	(make_ctrl_stmt_edges): Add edge for nonlocal labels; use new functions.
+ 	* tree-flow.h (is_coputed_goto): Kill.
+ 	(nonlocal_goto_p, simple_goto_p, computed_goto_p): Declare.
+ 	* tree-ssa-ccp (visit_stmt): Update.
+ 
+ 2003-11-07  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* fold-const.c (tree_expr_nonzero_p): Fix typo.
+ 
+ 	* fold-const.c (tree_expr_nonzero_p): New function.
+ 	(fold_relational_const): Use it.
+ 	(nondestructive_fold_binary_to_constant): Allow casts in address
+ 	expressions.
+ 
+ 2003-11-06  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-cfg.c (tree_block_label):  Cleanup.
+ 
+ 2003-11-06  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (fast_a_dominates_b): New function.
+ 	(build_dfs_id_array_1): Ditto.
+ 	(build_dfs_id_array): Ditto.
+ 	(load_modified_phi_result): Use fast_a_dominates_b.
+ 	(rename_1): Ditto.
+ 	Also use build_dfs_id_array, and remove some duplicate ephi_at_block
+ 	calls.
+ 	(insert_occ_in_preorder_dt_order): Remove some duplicate ephi_at_block
+ 	calls.
+ 	(pre_expression): Ditto.
+ 	Also free dfs_id arrays here.
+ 	(collect_expressions): Remove duplicate bsi_stmt calls.
+ 
+ 2003-11-06  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (count_stmts_in_bb): Removed.
+ 	(set_var_phis): Only call bb_for_stmt once.
+ 	(insert_one_operand): Remove endtree, endtreep, a lot of special handling
+ 	no longer needed.  Remove insert_done.
+ 	(collect_expressions): Enable INDIRECT_REF and SSA_NAME handling.
+ 
+ 2003-11-06  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* tree-cfg.c (STRIP_CONTAINERS): Remove.
+ 
+ 2003-11-06  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-cfg.c (cleanup_cond_expr_graph):  Clean edge flags.
+ 
+ 2003-11-06  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-dump.c (dump_options): Remove TDF_LINENO from all setting.
+ 
+ 2003-11-06  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* builtins.c (expand_builtin_strstr, expand_builtin_strchr,
+ 	expand_builtin_strrchr, expand_builtin_strpbrk,
+ 	simplify_builtin_strstr, simplify_builtin_strrchr,
+ 	simplify_builtin_strpbrk): Add missing casts.
+ 
+ 2003-11-05  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* diagnostic.h (print_generic_decl): Declare.
+ 	* tree-cfg.c (dump_cfg_function_to_file): Dump variables in
+ 	unexpanded_var_list.
+ 	* tree-pretty-print.c (print_generic_decl): New function.
+ 
+ 2003-11-05  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* Makefile.in (gimplify.o): Add function.h dependency.
+ 	* c-call-graph.c (construct_call_graph): Modify build_tree_cfg call.
+ 	* gimple-low.c (record_vars): Export.
+ 	(lower_function_body): Remove the topmost BIND_EXPR.
+ 	* gimplify.c: Include function.h.
+ 	(gimple_add_tmp_var): Record temporaries in the
+ 	cfun->unexpanded_vars_list if available.
+ 	* tree-cfg.c (build_tree_cfg): Work without the topmost BIND_EXPR.
+ 	(dump_cfg_function_to_file): New.
+ 	(dump_tree_cfg): Use dump_cfg_function_to_file.
+ 	* tree-dump.c (dump_function_to_file): Work without the topmost
+ 	BIND_EXPR.
+ 	* tree-flow.h (build_tree_cfg): Declaration changed.
+ 	(dump_cfg_function_to_file, record_vars): Declare.
+ 	* tree-optimize.c (optimize_function_tree, tree_rest_of_compilation):
+ 	Work without the topmost BIND_EXPR.
+ 	* tree-must-alias.c (tree_compute_must_alias): Use
+ 	dump_cfg_function_to_file.
+ 	* tree-ssa-ccp.c (tree_ssa_ccp): Ditto.
+ 	* tree-ssa-copyprop.c (tree_ssa_copyprop): Ditto.
+ 	* tree-ssa-dce.c (tree_ssa_dce): Ditto.
+ 	* tree-ssa-dom.c (tree_ssa_dominator_optimize_1): Ditto.
+ 	* tree-ssa-pre.c (tree_perform_ssapre): Ditto.
+ 	* tree-ssa.c (rewrite_into_ssa, rewrite_out_of_ssa): Ditto.
+ 	* tree-tailcall.c (tree_optimize_tail_calls): Ditto.
+ 	* tree.h (optimize_function_tree): Declaration changed.
+ 
+ 2003-11-03  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (handle_bb_creation): Removed.
+ 	(redo_dominators): Removed.
+ 	(insert_one_operand): Remove code to handle bb creation, since all
+ 	critical edges are now pre-split.
+ 	(finalize_2): Remove redo_dominators related code.
+ 	(pre_expression): Return 1 if we exited early because nothing happened.
+ 	(split_critical_edges): Do fake variable assignments instead, because
+ 	it works. return true if we actually split an edge.
+ 	(tree_perform_ssapre): Remove redo_dominators code.
+ 
+ 2003-11-03  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* function.h (struct function): New field unexpanded_var_list.
+ 	* gimple-low.c (unexpanded_var_list): Removed.
+ 	(record_vars, expand_used_vars): Use cfun->unexpanded_var_list.
+ 	* tree-flow.h (unexpanded_var_list): Declaration removed.
+ 
+ 	* gimplify.c (should_carry_locus_p): New.
+ 	(annotate_all_with_locus_1): Use it.  Do not annotate empty
+ 	statements.
+ 
+ 2003-11-03  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-cfg.c (tree_try_redirect_by_replacing_jump): Do not use
+ 	succesor_block.
+ 
+ 2003-11-03  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-pretty-print.c (dump_block_info): Add flags parameter.
+ 	Only show line number when asked to.
+ 	(dump_generic_node): Pass flags to dump_block_info.
+ 
+ 2003-11-03  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* cfghooks.h (redirect_edge_and_branch hook): Make it return edge.
+ 	* cfgrtl.c (cfg_layout_redirect_edge_and_branch,
+ 	rtl_redirect_edge_and_branch, try_redirect_by_replacing_jump):
+ 	Update to new interface.
+ 	* tree-cfg.c (tree_cfg_hooks): Move to end of file; set
+ 	redirect_edge_and_branch and redirect_edge_and_branch_force.
+ 	(thread_jumps): Use redirect_edge_and_branch.
+ 	(tree_block_label): new; break out of thread_edge.
+ 	(tree_try_redirect_by_replacing_jump): New.
+ 	(thread_edge): Rename to tree_redirect_edge_and_branch; deal sanely
+ 	with unusual edges; preserve profile.
+ 	(tree_redirect_edge_and_branch_force): New.
+ 	* tree-flow.h (ssa_redirect_edge): Declare.
+ 	* tree-ssa.dom.c (tree_ssa_dominator_optimize): Use redirect_edge_and_branch.
+ 	* tree-ssa.c (ssa_redirect_edge): New.
+ 
+ 2003-11-03  Jeff Law  <law@redhat.com>
+ 
+ 	* domwalk.h (struct dom_walk_data): New field "global_data".
+ 	* tree-ssa-dom.c (tree_ssa_dominator_optimize_1): Initialize new
+ 	"global_data" field.
+ 	* tree-flow.h (enum need_phi_state): New enumeration.
+ 	(var_ann_d): Add bitfield for need_phi_state.
+ 	* tree-ssa.c (mark_def_sites_global_data): New structure to hold
+ 	global data for mark_def_sites dominator walk.
+ 	(mark_def_sites): Revamp to be called via the dominator walker.
+ 	(set_def_block): Update need_phi_state for the variable as needed.
+ 	(set_livein_block): Similarly.
+ 	(rewrite_into_ssa): Use dominator walker to call mark_def_sites.
+ 	Delay freeing dominance info.  Kill "globals" bitmap.
+ 	(insert_phi_nodes): No longer need "globals" bitmap.  Use
+ 	need_phi_state in variable's annotation to determine if a PHI
+ 	may be needed.
+ 
+ 	* tree-ssa-dom.c (dom_opt_finalize_block): Try to thread across the
+ 	edges leaving COND_EXPR nodes which are leafs in the dominator
+ 	tree.
+ 	(record_equivalences_from_incoming_edge): Do not set EQ_EXPR_VALUE
+ 	unless the block's single predecessor contains parent_block_last_stmt.
+ 
+ 2003-11-03  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-dump.c (dump_options): Add TDF_LINENO.
+ 	* tree-pretty-print.c (dump_generic_node): Print line number for
+ 	statements if asked to.
+ 	* tree.h (TDF_LINENO): New.
+ 	* doc/invoke.texi (lineno): Document.
+ 
+ 2003-11-03  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* expr.c (expand_vars, expand_var): Split of ...
+ 	(expand_expr_1): ... here.
+ 	* expr.h (expand_var): Declare.
+ 	* gimple-low.c (lower_function_body, lower_stmt, lower_bind_expr):
+ 	Eliminate BIND_EXPRs.
+ 	(expand_used_vars): New.
+ 	* tree-alias-common.c (create_alias_vars): Walk variables in blocks.
+ 	* tree-cfg.c (make_bind_expr_blocks): Removed.
+ 	(make_blocks, build_tree_cfg, factor_computed_gotos): Don't handle
+ 	BIND_EXPRs.
+ 	(assign_vars_to_scope, successor_block, NEXT_BLOCK_LINK): Removed.
+ 	(make_edges, make_exit_edges): Don't use successor_block.
+ 	(remove_useless_stmts_and_vars_goto): Don't expect NEXT_BLOCK_LINK
+ 	to be set.
+ 	(bsi_init, bsi_next_in_bb, bsi_from_tsi): Don't handle BIND_EXPRs.
+ 	(replace_stmt): Don't create BIND_EXPRs.
+ 	* tree-flow.h (struct var_ann_d): Removed field scope.
+ 	(struct stmt_ann_d): Removed fields scope and scope_level.
+ 	(propagate_copy): Declaration changed.
+ 	(fixup_var_scope): Removed.
+ 	* tree-must-alias.c (tree_compute_must_alias): Consider DECL_NONLOCAL
+ 	vars call clobbered.
+ 	* tree-optimize.c (tree_rest_of_compilation): Call expand_used_vars.
+ 	* tree-ssa-copyprop.c (move_var_to_scope, fixup_var_scope): Removed.
+ 	(copyprop_stmt): Call to propagate_copy changed.
+ 	(propagate_copy): Don't update scope.
+ 	* tree-ssa-dom.c (cprop_into_stmt): Call to propagate_copy changed.
+ 	(eliminate_redundant_computations): Don't call fixup_var_scope.
+ 	* tree-ssa.c (insert_copy_on_edge): Don't update scope.
+ 
+ 2003-11-02  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-inline.c (walk_tree): Tail recursion optimized for
+ 	COMPOUND_EXPRs.
+ 	* tree-eh.c (collect_finally_tree): Ditto.
+ 
+ 2003-11-02  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-optimize.c (optimize_function_tree): Removed duplicate call of
+ 	lower_function_body.  Moved call of reset_block_changes ...
+ 	(tree_rest_of_compilation) ... here.  Reset the scope to top before
+ 	expanding function end.
+ 
+ 2003-11-01  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* basic-block.h (BB_CONTROL_STRUCTURE): Removed.
+ 	* tree-cfg.c (struct cfg_stats_d): Field num_merged_cases removed.
+ 	(make_blocks, make_bind_expr_blocks, append_stmt_to_bb, bsi_link_after,
+ 	build_tree_cfg, factor_computed_gotos, prepend_stmt_to_bb,
+ 	remove_stmt, replace_stmt): Don't set parent.
+ 	(set_parent_stmt, add_stmt_to_bb, find_contained_blocks,
+ 	blocks_unreachable_p, remove_blocks, remove_unreachable_block,
+ 	move_outgoing_edges, merge_tree_blocks, remap_stmts): Removed.
+ 	(REMOVE_ALL_STMTS, REMOVE_NO_STMTS, REMOVE_NON_CONTROL_STRUCTS,
+ 	REMOVE_CONTROL_STRUCTS): Removed.
+ 	(remove_bb): Code to handle control structures removed.
+ 	(tree_block_forwards_to): Don't stop due to CASE_LABEL_EXPRs.
+ 	(tree_dump_bb): Don't print parent.  Print only BIND_EXPRs in slim
+ 	form.
+ 	(dump_tree_cfg): Don't count merged case labels.
+ 	(is_ctrl_structure): Removed.
+ 	(stmt_starts_bb_p): Don't handle CASE_LABEL_EXPRs.
+ 	(tree_verify_flow_info): Don't check BB_CONTROL_STRUCTURE.
+ 	* tree-flow-inline.h (parent_block, parent_stmt): Removed.
+ 	* tree-flow.h (struct stmt_ann_d): Remove parent_stmt field.
+ 	(parent_stmt, parent_block, is_ctrl_structure): Declarations removed.
+ 	* tree-pretty-print.c (dump_generic_node): Don't handle lowered
+ 	COND_EXPRs specially.
+ 	* tree-ssa-ccp.c (visit_stmt): Don't check is_ctrl_structure.
+ 
+ 2003-10-31  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (record_equivalences_from_stmt): Restore lost code
+ 	to create equivalences from BIT_IOR_EXPR.
+ 
+ 	* tree-ssa-dom.c (thread_jumps_walk_stmts): Go ahead and optimize
+ 	a COND_EXPR with a compile-time constant condition.
+ 
+ 2003-10-31  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-optimize.c (optimize_function_tree): Fix comment
+ 	describing SSA pass after DOM2.
+ 
+ 2003-10-31  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	Fix PR optimization/12825
+ 	* tree-optimize.c (optimize_function_tree): Run SSA renamer after
+ 	second DOM pass.
+ 
+ 2003-10-30  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-common.c (match_case_to_enum_1, match_case_to_enum): New.
+ 	(c_do_switch_warnings): New.
+ 	* c-common.h (c_do_switch_warnings): Declare.
+ 	* c-typeck.c (c_finish_case): Call it.
+ 	* stmt.c (all_cases_count, BITARRAY_TEST, BITARRAY_SET,
+ 	mark_seen_cases, check_for_full_enumeration_handling): Remove.
+ 	(expand_end_case_type): Don't do warn_switch handling.
+ 	* expr.h, tree.h: Remove dead decls.
+ 
+ 	* c-simplify.c (gimplify_switch_stmt): Force switch body non-null.
+ 
+ 2003-10-30  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-cfg.c (thread_jumps): Allow SWITCH_EXPR.
+ 	(thread_edge): Handle it.  Tidy surrounding code.
+ 
+ 2003-10-30  Richard Henderson  <rth@redhat.com>
+ 
+ 	* domwalk.c (walk_dominator_tree): Pass any final is_ctrl_stmt
+ 	down the recursive walk.
+ 
+ 2003-10-30  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (thread_across_edge): Renamed from
+ 	thread_through_successor.  Revamp to thread the destination of an edge
+ 	rather than the successors of a block.
+ 	(dom_opt_finalize_block): Corresponding changes.  Do not bother calling
+ 	thread_across_edge unless we are at a leaf in the dominator tree.
+ 
+ 	* tree-cfg.c (thread_jumps): Now returns a bool.  Move some tests into
+ 	tree_forwarder_block_p.  Improve comments.
+ 	(cleanup_control_flow): Now returns a bool indicating if anything was
+ 	changed.
+ 	(thread_unconditional_jumps): Kill.
+ 	(cleanup_tree_cfg): Repeat cascading cleanups until nothing changes.
+ 	(tree_forwarder_block_p): Check forwardable bit in the block's
+ 	annotation to avoid useless work.  Mark blocks as not forwardable as
+ 	appropriate.  Verify destination is not the exit block here.  Do not
+ 	consider successors of the entry block as forwarders.  Ignore empty
+ 	statements when walking through the block's statements.  Verify target
+ 	block is not the start of a case label and that we can safely insert
+ 	a label at the target block.
+ 
+ 2003-10-29  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-common.c (c_warn_unused_result): Remove lowered containers.
+ 	* c-semantics.c (genrtl_case_label): Update add_case_node call.
+ 	* c-simplify.c (gimplify_switch_stmt): Build SWITCH_EXPR and
+ 	gimplify it simultaneously with the body.
+ 	* expr.c (expand_expr_1): Handle SWITCH_BODY clear and
+ 	SWITCH_LABELS set.  Update add_case_node calls.
+ 	* gimple-low.c (lower_stmt): Don't do anything for SWITCH_EXPR.
+ 	(lower_switch_expr, lower_case_label_expr): Remove.
+ 	* gimplify.c (gimplify_switch_expr): Zap SWITCH_BODY after
+ 	gimplification.  Force default entry for SWITCH_LABELS.
+ 	(gimplify_case_label_expr): Rename from gimple_add_case_label.
+ 	Assert switch in scope; lower to LABEL_EXPR.
+ 	* stmt.c (pushcase, pushcase_range) Update add_case_node calls.
+ 	(add_case_node): Add dont_expand_label argument.
+ 	(same_case_target_p): Don't search rtl.
+ 	* tree-cfg.c (enum find_location_action): Remove.
+ 	(make_switch_expr_blocks): Remove.
+ 	(make_blocks): Update.
+ 	(make_case_label_edges): Remove.
+ 	(make_edges): Update.
+ 	(find_contained_blocks): Remove lowered containers.
+ 	(make_switch_expr_edges): New.
+ 	(make_ctrl_stmt_edges): Call it.
+ 	(make_cond_expr_edges): Use label_to_block.
+ 	(remove_useless_stmts_and_vars_1): Don't go into SWITCH_BODY.
+ 	(remove_unreachable_block): Remove SWITCH_EXPR special case.
+ 	(cleanup_cond_expr_graph): Tidy.
+ 	(cleanup_switch_expr_graph): Rewrite.
+ 	(disconnect_unreachable_case_labels): Remove.
+ 	(find_taken_edge_cond_expr): Use integer_zerop/integer_nonzerop.
+ 	(find_taken_edge_switch_expr): Rewrite.
+ 	(value_matches_some_label): Remove.
+ 	(find_case_label_for_value): New.
+ 	(is_ctrl_structure): Remove lowered containers.
+ 	(is_ctrl_stmt): Add SWITCH_EXPR.
+ 	(switch_parent): Remove.
+ 	(handle_switch_fallthru): Remove.
+ 	(handle_switch_split): Remove.
+ 	(find_insert_location): Merge into ...
+ 	(bsi_insert_on_edge_immediate): ... here.  Simplify.
+ 	(tree_split_edge): Don't set EDGE_FALLTHRU.
+ 	* tree-eh.c (collect_finally_tree): Remove lowered containers.
+ 	(replace_goto_queue_1, block_may_fallthru_last): Likewise.
+ 	(lower_eh_constructs_1): Likewise.
+ 	(verify_norecord_switch_expr): New.
+ 	(lower_try_finally_switch): Generate lowered switches.
+ 	* tree-inline.c (expand_calls_inline): Don't search null SWITCH_BODY.
+ 	* tree-pretty-print.c (dump_generic_node): Do something sensible
+ 	with lowered switch_expr.
+ 	* tree-ssa-dom.c (record_equivalences_from_incoming_edge): Update
+ 	for lowered switch_expr.
+ 	* tree.def (SWITCH_EXPR): Update docs.
+ 	* tree.h (add_case_node): Update decl.
+ 
+ 2003-10-29  Daniel Berlin <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (n_phi_preds): New variable.
+ 	(generate_vops_as_of_bb): New function
+ 	(generate_expr_as_of_bb): Remove unused first argument. Update all
+ 	callers.
+ 	(subst_phis): Add boundary check for the phi_pred_cache array.
+ 	(same_e_version_phi_result): Once modified, no point in continuing
+ 	the loop.
+ 	(finalize_2): ESSA Minimization can crash if we ended up with new
+ 	BB's
+ 
+ 2003-10-29  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-eh.c (do_return_redirection): Don't move copy to RESULT_DECL
+ 	outside the RETURN_EXPR.  Introduce a new temporary as needed.
+ 
+ 2003-10-26  Richard Henderson  <rth@redhat.com>
+ 
+ 	* gimplify.c (keep_function_tree_in_gimple_form): Remove.
+ 	(gimplify_function_tree): Return void.  Remove hack for
+ 	language not supporting gimple.
+ 	* tree.h: Update decls.
+ 	* langhooks-def.h (LANG_HOOKS_GIMPLE_BEFORE_INLINING): New.
+ 	* langhooks.h (struct lang_hooks): Add gimple_before_inlining.
+ 	* tree-inline.c (copy_body_r): Check that instead of
+ 	keep_function_tree_in_gimple_form.
+ 	(initialize_inlined_parameters): Likewise.
+ 	(expand_call_inline, expand_calls_inline): Likewise.
+ 
+ 	* explow.c (probe_stack_range): Never emit loop notes.
+ 	* expr.c (emit_block_move_via_loop): Likewise.
+ 	* toplev.c (rest_of_compilation): Always synthesize loop notes.
+ 
+ 2003-10-26  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* Makefile.in (gimple-low.o): Add function.h dependency.
+ 	* gimple-low.c (struct lower_data): New field block.
+ 	(lower_function_body, lower_stmt, lower_bind_expr): Record
+ 	the block at statements.
+ 	* cfglayout.c (insn_locators_initialize): Use new info about
+ 	blocks.
+ 	* expr.c (expand_expr): Record block changes.
+ 	* function.c (blocks_nreverse): Export.
+ 	(uninitialized_vars_warning): Use DECL_RTL_SET_P to test for presence
+ 	of rtl.
+ 	(reset_block_changes, record_block_change, finalize_block_changes,
+ 	check_block_change, free_block_changes): New functions.
+ 	* function.h (struct function): New bitfield dont_emit_block_notes.
+ 	New field ib_boundaries_block.
+ 	(blocks_nreverse, reset_block_changes, record_block_change,
+ 	finalize_block_changes, check_block_change, free_block_changes):
+ 	Declare.
+ 	* sibcall.c (optimize_sibling_and_tail_recursive_call): Don't call
+ 	reorder_blocks when dont_emit_block_notes.
+ 	* stmt.c (expand_start_bindings_and_block, expand_end_bindings):
+ 	Don't emit block notes when dont_emit_block_notes.
+ 	* toplev.c (rest_of_compilation): Don't call reorder_blocks when
+ 	dont_emit_block_notes.
+ 	* tree.c (build1): Initialize TREE_BLOCK field.
+ 	* tree-flow.h (lower_function_body): Declare.
+ 	* tree-optimize.c: Include function.h.
+ 	(optimize_function_tree): Call lower_function_body.
+ 	* tree.h (struct tree_exp): Add block field.
+ 	(TREE_BLOCK): New macro.
+ 
+ 2003-10-26  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree.h (tree_dump_index): Add TDI_lower.
+ 	* tree-dump.c (dump_files): Add .lower entry.
+ 	* tree-optimize.c (optimize_function_tree): Move lower_function_body,
+ 	(tree_rest_of_compilation): here.  Tidy .useless dump.
+ 
+ 2003-10-25  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* c-common.c (c_estimate_num_insns_1): Kill.
+ 	(c_estimate_num_insns): Kill.
+ 	* c-common.h (c_estimate_num_insns): Kill.
+ 	* c-lang.c (LANG_HOOKS_TREE_INLINING_ESTIMATE_NUM_INSNS): Kill.
+ 	* cp-lang.c (LANG_HOOKS_TREE_INLINING_ESTIMATE_NUM_INSNS): Kill.
+ 	* objc-lang.c (LANG_HOOKS_TREE_INLINING_ESTIMATE_NUM_INSNS): Kill.
+ 	* java/lang.c (LANG_HOOKS_TREE_INLINING_ESTIMATE_NUM_INSNS): Kill.
+ 	(java_estimate_num_insns_1, java_estimate_num_insns): Kill.
+ 	* cgraphunit (cgraph_analyze_function): Use estimate_num_insns.
+ 	* tree-eh.c (decide_copy_try_finally): Likewise.
+ 	* tree-inline.c (limits_allow_inilining, optimize_inline_calls): Likewise.
+ 	(estimate_num_insns_1, estimate_num_insns): New functions.
+ 	* langhooks-def.h (LANG_HOOKS_TREE_INLINING_ESTIMATE_NUM_INSNS): Kill.
+ 	* langhooks.h (estimate_num_inssn): Kill.
+ 	* tree-inline.h (estimate_num_insns): Declare.
+ 
+ 2003-10-25  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* gimple-low.c: New.
+ 	* Makefile.in (gimple-low.o): Add.
+ 	* domwalk.c (walk_dominator_tree): Consider COND_EXPR a control
+ 	structure.
+ 	* tree-cfg.c (make_cond_expr_blocks, linearize_control_structures,
+ 	linearize_cond_expr): Removed.
+ 	(thread_jumps, tree_forwarder_block_p): New.
+ 	(merge_tree_blocks): Unused now.
+ 	(phi_alternatives_equal): Modified for use in jump threading.
+ 	(enum find_location_action): Remove EDGE_INSERT_LOCATION_NEW_ELSE.
+ 	(make_blocks): Don't call make_cond_expr_blocks.
+ 	(set_parent_stmt): Ensure we don't set COND_EXPR as a parent
+ 	statement.
+ 	(find_contained_blocks): Remove COND_EXPR alternative.
+ 	(make_cond_expr_edges): Handle lowered gotos.
+ 	(cleanup_tree_cfg): Don't call linearize_control_structures,
+ 	call thread_jumps and verify_flow_info and rerun cleanup_control_flow.
+ 	(remove_unreachable_block): Remove handling of structured COND_EXPRs.
+ 	(remove_bb): Fix warning for removed goto exprs.
+ 	(cleanup_control_flow, cleanup_cond_expr_graph,
+ 	cleanup_switch_expr_graph, find_taken_edge_cond_expr,
+ 	bsi_insert_before, find_insert_location, bsi_insert_on_edge_immediate):
+ 	Handle lowered COND_EXPRs.
+ 	(is_ctrl_structure): Remove COND_EXPR.
+ 	(is_ctrl_stmt): Add COND_EXPR.
+ 	(tree_verify_flow_info): Check validity of COND_EXPRs.
+ 	(thread_edge): Moved from tree-ssa-dom.c.
+ 	* tree-flow.h (cleanup_cond_expr_graph, cleanup_switch_expr_graph):
+ 	Declaration changed.
+ 	(thread_edge, lower_function_body): Declare.
+ 	* tree-optimize.c (optimize_function_tree): Call lower_function_body.
+ 	* tree-pretty-print.c (dump_generic_node): Dump lowered cond_exprs in
+ 	full.
+ 	* tree-ssa-copyprop.c (fixup_var_scope): Handle non-SSA_NAMEs.
+ 	* tree-ssa-dce.c (stmt_useful_p, process_worklist): Cleaned up when
+ 	COND_EXPRs are lowered.
+ 	* tree-ssa-dom.c (thread_edge): Moved to tree-cfg.c.
+ 	(tree_ssa_dominator_optimize_1): Dumps and setting of vars_to_rename
+ 	moved from thread_edge.
+ 	(optimize_stmt): Pass block iterator to cleanup_cond_expr_graph and
+ 	cleanup_switch_expr_graph.
+ 	* tree-ssa.c (insert_copy_on_edge): Fixup scope for emitted variables.
+ 
+ 	* dominance.c (BB_NODE): Use VARRAY_GENERIC_PTR_NOGC.
+ 	(calculate_dominance_info): Use VARRAY_GENERIC_PTR_NOGC_INIT.
+ 	* varray.c (element): Add GENERIC_PTR_NOGC entry.
+ 	* varray.h (enum varray_data_enum): Add VARRAY_DATA_GENERIC_NOGC.
+ 	(union varray_data_tag): Add generic_nogc.
+ 	(VARRAY_GENERIC_PTR_NOGC_INIT,  VARRAY_GENERIC_PTR_NOGC,
+ 	VARRAY_PUSH_GENERIC_PTR_NOGC, VARRAY_TOP_GENERIC_PTR_NOGC): New.
+ 
+ 2003-10-25  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* cppcharset.c (one_utf8_to_utf32): Initialize 's' to silence warning.
+ 
+ 2003-10-25  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* fold-const.c (nondestructive_fold_binary_to_constant): Realize that
+ 	(plus (address) (const_int)) is a constant.
+ 
+ 2003-10-25  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* opts.c (decode_options): Uncomment unit-at-a-time setting
+ 	* params.def: Syncrhonize with manline.
+ 	* tree-inline.c (initialize_inlined_parameters):  Set variable as
+ 	gimplified.
+ 
+ 2003-10-24  Steven Bosscher  <steven@gcc.gnu.org>
+ 
+ 	* gimplify.c (create_artificial_label): New function.
+ 	(build_and_jump): Use it.
+ 	* c-simplify.c (c_gimplify_stmt): Likewise.
+ 	(gimplify_condition): Likewise.
+ 	* tree-cfg.c (factor_computed_gotos, tree_block_forwards_to,
+ 	handle_switch_fallthru, handle_switch_split): Likewise.
+ 	* tree-ssa-dom.c (thread_edge): Likewise.
+ 	* tree-ssa-pre.c (split_critical_edges): Likewise.
+ 	* tree-tailcall.c (eliminate_tail_call): Likewise.
+ 	* tree-eh.c (frob_into_branch_around,
+ 	honor_protect_cleanup_actions, lower_try_finally_nofallthru,
+ 	lower_try_finally_onedest, lower_try_finally_copy,
+ 	lower_try_finally_switch, lower_catch, lower_eh_filter,
+ 	lower_cleanup): Likewise.
+ 	(make_label): Remove.
+ 	* tree-simple.h (create_artificial_label): Add prototype.
+ 	* tree-inline.c (expand_call_inline): Make return label for
+ 	inlined function artificial.
+ 
+ 2003-10-23  Jeff Law  <law@redhat.com>
+ 
+ 	* timevar.def (TV_TREE_SSA_THREAD_JUMPS): New timevar.
+ 	* tree-dump.c (dump_files): Add dump file for jump threading.
+ 	* tree.h (TDI_thread_jumps): New enum member.
+ 	* tree-cfg.c (tree_block_forwards_to): No longer static.
+ 	* tree-flow.h (tree_block_forwards_to): Prototype.
+ 	(tree_ssa_dominator_thread_jumps): Likewise.
+ 	* tree-optimize.c (optimize_function_tree): Call jump threader.
+ 	* tree-ssa-dom.c (tree_ssa_dominator_optimize_1): New function.
+ 	Common code for redundancy elimination and jump threading on
+ 	the dominator tree.  Slightly different callback initialization
+ 	for redundancy elimination and jump threading.  Initialize
+ 	block forwardable attribute.
+ 	(tree_ssa_dominator_optimize): Call tree_ssa_dominator_optimize_1.
+ 	(tree_ssa_dominator_thread_jumps): New function.
+ 	(thread_edge): Mark results of PHI nodes as needing rewriting if
+ 	we have threaded through a block with PHI nodes.
+ 	(thread_through_successor): If thread_through_phis is nonzero,
+ 	then allow jump threading through blocks with PHI nodes.  If the
+ 	target block is a forwarder block, then forward the jump.
+ 	(thread_jumps_walk_stmts): Statement walker for dominator thread
+ 	jumping.
+ 
+ 	* tree-ssa-dom.c (record_equivalence_from_incoming_edge): Fix
+ 	comment typo.
+ 
+ 2003-10-23  Richard Henderson  <rth@redhat.com>
+ 
+ 	* gimplify.c (gimplify_*): Return gimplify_status.
+ 	(gimple_add_tmp_var): Set seen_in_bind_expr.
+ 	(gimplify_bind_expr): Likewise.  Kill if 0 code.
+ 	(gimplify_return_expr): Cope with error marks.
+ 	(gimple_push_cleanup): Do nothing if errors seen.
+ 	(gimplify_expr): Cope with error marks.  Use gimplify_status to
+ 	decide when to exit the main loop.  Zap statements with errors.
+ 	(gimplify_body): Return void.
+ 	(keep_function_tree_in_gimple_form): Don't exit on errors.
+ 	(gimplify_function_tree): Return bool.  Don't exit on errors.
+ 	* langhooks.c (lhd_gimplify_expr): Return GS_UNHANDLED.
+ 	* langhooks.h (struct lang_hooks): Update docs for gimplify_expr.
+ 	* tree-optimize.c (optimize_function_tree): Don't exit on errors.
+ 	Move delete_tree_cfg call outside optimization clause.
+ 	(tree_rest_of_compilation): Don't exit on errors.
+ 	* tree-simple.h (enum gimplify_status): New.
+ 	(gimplify_expr, gimplify_stmt, gimplify_body): Update.
+ 	* tree-ssa.c (rewrite_out_of_ssa): Move delete_tree_cfg call to
+ 	optimize_function_tree.
+ 	* tree.h (struct tree_decl): Add seen_in_bind_expr.
+ 	(gimplify_function_tree): Update.
+ 	* c-common.c (c_add_case_label): Unify three error exit paths.
+ 	Create a normal label, not a case label to suppress unreachable
+ 	code warning.
+ 	* c-simplify.c (c_build_bind_expr): Don't create an empty bind
+ 	body.  Pass entire bind_expr to gimplify_stmt.
+ 	(gimplify_block): Don't abort on mismatches if errors seen.
+ 	(gimplify_expr_stmt): Cope with error marks.
+ 	(gimplify_decl_stmt): Likewise.
+ 	(c_gimplify_expr): Return gimplify_status.
+ 
+ 2003-10-22  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-pretty-print.c (dump_generic_node): Kill off ELEFT_NODE.
+ 	Print out status of new EUSE_LVAL flag.
+ 
+ 	* tree-ssa-pre.c: #include alloc-pool.h
+ 	(append_eref_to_block): Inline.
+ 	(names_match_p): Ditto.
+ 	(pre_expression): Take sbitmap of variables to rename so we can
+ 	mark our new variable if necessary.
+ 	(insert_occ_in_preorder): Completely redo to be an O(n log n)
+ 	algorithm worst case, instead O(n^2) all the time.
+ 	(build_dfn_array): New function.
+ 	(eref_compare): Ditto.
+ 	(preorder_count): Remove no-longer used variable.
+ 	(pre_stats): Add new stats about memory use.
+ 	(struct expr_info): add loadpre_cand member.
+ 	(euse_node_pool): New alloc-pool
+ 	(eref_node_pool): Ditto
+ 	(create_expr_ref): Use them.
+ 	(expr_phi_insertion): Insert on PHI's of VUSES for loadpre cands.
+ 	Not all expressions have uses (left occurrences don't).
+ 	(load_modified_real_occ_real_occ): Return false, not abort.
+ 	(process_delayed_rename): Remove useless fibheap, do proper LVAL
+ 	handling.
+ 	(insert_euse_in_preorder_dt_order_1): No more ELEFT_NODE's.
+ 	(finalize_1): Ditto.
+ 	(set_save): Ditto.
+ 	(really_available_def): New function.
+ 	(finalize_2): Use really_available_def, not EUSE_SAVE, during EPHI
+ 	minimization.
+ 	(names_match_p): Handle INDIRECT_REF properly.
+ 	(call_modifies_slot): Removed.
+ 	(add_call_to_ei): Removed.
+ 	(process_left_occs_and_kills): Fix.
+ 	(pre_expression): Zero out counts.
+ 	(collect_expressions): Split out from tree_perform_ssapre. Do this
+ 	in domtree order.
+ 	(tree_perform_ssapre): Create and free alloc-pools.
+ 	Rename new variables that need to be renamed.
+ 
+ 	* tree.c (tree_size): Remove ELEFT_NODE.
+ 	(tree_node_size): Ditto.
+ 	(is_essa_node): Ditto.
+ 
+ 	* tree.def (ELEFT_NODE): Gone.
+ 
+ 	* tree.h (EREF_NODE_CHECK): No more ELEFT_NODE.
+ 	(struct tree_eref_common): Add ID flag.
+ 	(struct tree_euse_node): Add lval flag.
+ 	(EREF_ID): New macro.
+ 	(EUSE_LVAL): New macro.
+ 
+ 2003-10-22  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-flow-inline.h (add_dom_child): XMALLOC, not GGC_ALLOC,
+ 	the bitmap.
+ 	(clear_dom_children): XFREE the bitmap.
+ 
+ 2003-10-22  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-ssa-live.c (new_tree_live_info, (delete_tree_live_info,
+ 	live_worklist, set_if_valid, add_livein_if_notdef,
+ 	calculate_live_on_entry, calculate_live_on_exit,
+ 	add_conflicts_if_valid, dump_live_info): Use bitmap instead of sbitmap.
+ 	(build_tree_conflict_graph): Use bitmap, Change mechanism for
+ 	adding conflicts between live-on-entry partitions.
+ 	* tree-ssa-live.h (struct tree_live_info_d): Switch to bitmaps.
+ 	(partition_is_global, live_entry_blocks, live_on_exit,
+ 	live_merge_and_clear, make_live_on_entry): Switch to bitmaps.
+ 	* tree-ssa.c (struct _elim_graph): Remove bitmaps, use varrays.
+ 	(new_elim_graph, clear_elim_graph, delete_elim_graph): Switch from
+ 	old bitmap implementation.
+ 	(elim_graph_size): New. Number of elements in elimination graph.
+ 	(elim_graph_add_node): New. Add an element to the elim-graph.
+ 	(elim_graph_add_edge): New. Add an edge to the elim-graph.
+ 	(elim_graph_remove_succ_edge): New. Remove an edge for which a node
+ 	has a successor.
+ 	(FOR_EACH_ELIM_GRAPH_SUCC): Find all successor nodes.
+ 	(FOR_EACH_ELIM_GRAPH_PRED): Find all predeccesor nodes.
+ 	(eliminate_name, eliminate_build, elim_forward,
+ 	elim_unvisited_predecessor, elim_backward, elim_create, eliminate_phi):
+ 	Use new elim-graph routines.
+ 	(rewrite_out_of_ssa): Enable single-definition compaction when not
+ 	combining temporaries.
+ 
+ 2003-10-21  Richard Henderson  <rth@redhat.com>
+ 
+ 	* gimplify.c: Sort functions into use order, and all gimplification
+ 	functions to the end.
+ 
+ 2003-10-22  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-cfg.c (thread_unconditional_jumps): New function.
+ 	(tree_block_forwards_to): Likewise.
+ 	(cleanup_tree_cfg): Call thread_unconditional_jumps.
+ 	* tree-flow.h (bb_ann_t): Add forwardable status bit.
+ 
+ 	* tree-dump.c (dump_files): Add entry for TDI_none.
+ 	(dump_begin): Do nothing for TDI_none.
+ 	(dump_enable_all, dump_switch_p): Start our scan at TDI_none + 1.
+ 	* tree.h (tree_dump_index): Add.
+ 	* tree-ssa-dom.c (tree_ssa_dominator_optimize): If we have altered the
+ 	CFG and we have variables to [re]rename, go ahead and rename them before
+ 	starting the next iteration of the dominator optimizer.
+ 
+ 2003-10-21  Jason Merrill  <jason@redhat.com>
+ 
+ 	* gimplify.c (gimplify_modify_expr): Require a regvar on either
+ 	the lhs or rhs if we're dealing with a renameable type.
+ 	(canonicalize_component_ref): New fn.
+ 	(gimplify_compound_lval): Use it.
+ 	(gimplify_conversion): Use it.
+ 	(gimplify_expr): Lose redundant STRIP_MAIN_TYPE_NOPS.
+ 	Discard conversions in void context.
+ 
+ 2003-10-21  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (pre_expression): Free and allocate the
+ 	ephi_pindex_htab and phi_pred_cache in this function only.
+ 	(phi_pred_cache): New array to store cached phi preds, to avoid
+ 	recomputation and unnecessary copying.
+ 	(subst_phis): Use it.
+ 	(added_phis): array of added phis that is marked for GC.
+ 
+ 	* Makefile.in: Add tree-ssa-pre.c to the gtype files, and
+ 	gt-tree-ssa-pre.h to the list of generated files.
+ 
+ 2003-10-21  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR optimization/12661
+ 	* tree-dfa.c (get_expr_operands): Handle TRUTH_NOT_EXPR.
+ 	* tree-simple.c (is_gimple_rhs): Allow TRUTH_NOT_EXPR.
+ 	* gimplify.c (gimplify_expr) <TRUTH_NOT_EXPR>: Don't rewrite to an
+ 	EQ_EXPR.
+ 
+ 2003-10-21  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* haifa-sched.c (choose_ready): Initialize index.
+ 	* tree-tailcall.c (bb_optimize_tail_calls): Initialize has_return.
+ 	* f/lex.c (ffelex_cfelex_): Initialize d.
+ 
+ 2003-10-20  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	Fix PR optimization/12688
+ 	* tree-dfa.c (get_stmt_operands): Don't return early when dealing
+ 	with an empty statement.
+ 	* tree-ssa-ccp.c (set_rhs): If the expression has no side effects,
+ 	replace the statement with an empty statement.
+ 
+ 2003-10-20  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-ssa-dce.c (processed): Change to an sbitmap.
+ 	(mark_necessary): Test bits in 'processed'.
+ 	(tree_ssa_dce): Initialize/free processed as an sbitmap.
+ 
+ 2003-10-20  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-cfg.c (bsi_prev): Also copy the context from the previous
+ 	iterator.
+ 
+ 2003-10-18  Richard Henderson  <rth@redhat.com>
+ 
+ 	* builtins.c (simplify_builtin): Handle BUILT_IN_CONSTANT_P.
+ 
+ 2003-10-18  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-tailcall.c: New.
+ 	* Makefile.in (tree-tailcall.o): Add.
+ 	* function.c (assign_parms): Setting of current_function_stdarg
+ 	moved ...
+ 	(allocate_struct_function): ... here.
+ 	* tree-dump.c (dump_files): Add .tail dump.
+ 	* tree-flow.h (tree_optimize_tail_calls): Declare.
+ 	* tree-optimize.c (optimize_function_tree): Call
+ 	tree_optimize_tail_calls.
+ 	* tree.h (enum tree_dump_index): Add TDI_tail.
+ 
+ 2003-10-18  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-ssa-copyprop.c (move_var_to_scope):  Do not clear abstract
+ 	origin for static variables.
+ 
+ 2003-10-18  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* integrate.c (copy_decl_for_inlinig): Fix copying of copies.
+ 
+ 2003-10-18  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* cgraphunit.c (cgraph_analyze_function):  Fix call of estimate_num_insns.
+ 
+ 2003-10-17  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* ChangeLog.tree-ssa: Fix typos.
+ 	* tree-alias-common.c: Fix comment typos.
+ 	* tree-cfg.c: Likewise.
+ 	* tree-dfa.c: Likewise.
+ 	* tree-eh.c: Likewise.
+ 	* tree-flow.h: Likewise.
+ 	* tree-iterator.h: Likewise.
+ 	* tree-mudflap.c: Likewise.
+ 	* tree-ssa-ccp.c: Likewise.
+ 	* tree-ssa-dce.c: Likewise.
+ 	* tree-ssa-dom.c: Likewise.
+ 	* tree-ssa-live.c: Likewise.
+ 	* tree-ssa-live.h: Likewise.
+ 	* tree-ssa-pre.c: Likewise.
+ 	* tree-ssa.c: Likewise.
+ 
+ 2003-10-17  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-ssa-dce.c (processed): New Global vector.
+ 	(mark_necessary): Check if SSA_NAME has already been processed first.
+ 	(find_useful_stmts, process_worklist): Change call to mark_necessary().
+ 	(tree_ssa_dce): Initialize and free processed vector.
+ 	* tree-cfg.c (handle_switch_fallthru): A new basic block can result
+ 	from splitting edges of nested switch stmts.
+ 	(handle_switch_split): If a new block is created, restart the loop for
+ 	inserting GOTO's to handle the new block.
+ 
+ 2003-10-17  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* tree-cfg.c (remove_useless_stmts_and_vars_bind): Fix handling of
+ 	static variables.
+ 
+ 2003-10-16  Richard Henderson  <rth@redhat.com>
+ 
+ 	* common.opt (fdisable-gimple): Remove.
+ 	* flags.h (flag_disable_gimple): Remove.
+ 	* toplev.c (flag_disable_gimple): Remove.
+ 	(process_options): Don't check it.
+ 	(lang_independent_options): Don't set it.
+ 	* opts.c (common_handle_option): Likewise.
+ 	* gimplify.c (keep_function_tree_in_gimple_form): Don't check it.
+ 	* c-semantics.c (expand_stmt_toplev): Likewise.
+ 	* tree-optimize.c (tree_rest_of_compilation): Likewise.
+ 	* doc/invoke.texi: Don't document it.
+ 
+ 2003-10-16  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* fold-const.c: Merge from mainline.
+ 	* tree.c (associate_tree_code, commutative_tree_code): Use a
+ 	switch statement instead of a sequence of comparisons.
+ 
+ 2003-10-16  Richard Henderson  <rth@redhat.com>
+ 
+ 	* gimplify.c (maybe_protect_cleanup): Remove.
+ 	* tree-simple.h (maybe_protect_cleanup): Remove.
+ 	* c-simplify.c (gimplify_cleanup): Don't call it.
+ 
+ 2003-10-16  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-cfg.c (found_computed_goto): New global for computed goto
+ 	factoring/unfactoring.
+ 	(factored_computed_goto_label, factored_computed_goto): Likewise.
+ 	(factor_computed_gotos): New function.
+ 	(build_tree_cfg): Use it.
+ 	(make_blocks): Record whether or not we find a computed goto.
+ 	(remove_useless_stmts_and_vars): Un-factor computed gotos.
+ 	(remove_useless_stmts_and_vars): Reset factored_computed_goto_label
+ 	and factored_computed_goto.
+ 
+ 	* tree-ssa-dom.c (get_value_for, set_value_for): Move to the start
+ 	of the file.  Delete pointless sanity checking.
+ 
+ 	* tree-ssa.c (currdefs): Now a varray instead of a hash table.
+ 	(get_value_for, set_value_for): Corresponding changes.  Move to
+ 	the start of the file and delete pointless sanity checking.
+ 	(rewrite_into_ssa, dump_tree_ssa_stats): Corresponding changes.
+ 	(var_value_hash, var_value_eq): Kill.
+ 
+ 	* tree-ssa.c (rewrite_add_phi_arguments): Once we encounter a
+ 	rewritten PHI break the inner loop.
+ 
+ 	* tree-ssa.c (insert_phi_nodes_for): Use EXECUTE_IF_AND_COMPL_IN_BITMAP.
+ 
+ 	* tree-dfa.c (create_phi_node):  Clear PHI_REWRITTEN on all new PHIs
+ 	(remove_all_phi_nodes_for): Set PHI_REWRITTEN on any PHIs which are
+ 	not removed.
+ 	* tree-ssa.c (rewrite_add_phi_arguments): Check the PHI node itself
+ 	to see if it has already been rewritten.
+ 	* tree.h (PHI_REWRITTEN): New accessor macro.
+ 	(struct phi_node): New field rewritten.
+ 
+ 	* tree-flow.h (struct bb_ann_d): New field num_preds.
+ 	* tree-dfa.c (create_phi_node): Get the number of predecessors from
+ 	the block's annotation.
+ 	* tree-ssa.c (rewrite_into_ssa): Compute number of preds for each
+ 	block and store it into the block's annotation.
+ 	(insert_phi_nodes_for): Get the number of preds for each block
+ 	from the block's annotation.
+ 
+ 	* tree-ssa.c: Remove parallel lifetime analysis code from April 2003.
+ 	(def_blocks_d): Remove PHI_INSERTION_POINTS field.
+ 	(compute_global_livein): Accept livein/def bitmaps to use for
+ 	life analyis rather than a varray of variables.  Callers updated.
+ 	Rewritten to compute life information for one variable at a
+ 	time instead of several variables at once.
+ 	(insert_phis_for_deferred_variables): Remove.
+ 	(insert_phi_nodes_for): Lose varray argument.  Callers updated.
+ 	No longer mess with deferring PHI insertions for variables.
+ 	(insert_phi_nodes): No longer need to deal with deferred variables.
+ 	Kill everything related to them.
+ 
+ 2003-10-15  Jeff Law  <law@redhat.com>
+ 
+ 	* domwalk.c, domwalk.h: New files.
+ 	* Makefile.in (OBJS-common): Add domwalk.c.
+ 	(tree-ssa-dom.o): Add dependency on $(BASIC_BLOCK_H) and domwalk.h.
+ 	(tree-ssa.o): Add dependency on domwalk.h.
+ 	(domwalk.o): Add dependencies.
+ 	* tree-ssa-dom.c: Include domwalk.h.
+ 	(cfg_altered, vars_to_rename): Now globals.
+ 	(dom_walk_block_data): New structure for block data used by dominator
+ 	walker.
+ 	(optimize_block, record_equivalences_from_block_entry): Kill.
+ 	(optimize_stmt): Lose "cfg_altered" argument.  Update callers.
+ 	Initialize may_have_exposed_new_symbols.
+ 	(get_value_for, set_value_for): Lose "table" argument.  Update
+ 	callers.  Use const_and_copies table directly.
+ 	(lookup_avail_expr): Lose "const_and_copies" argument.  Callers
+ 	updated.
+ 	(get_eq_expr_value): Similarly.  Also accept a pointer to the
+ 	vrp_variables. Callers updated.
+ 	(update_rhs_and_lookup_avail_expr): Similarly.
+ 	(record_cond_is_true, record_cond_is_false): Similarly.
+ 	(simplify_rhs_and_lookup_avail_expr): Similarly.
+ 	(simplify_cond_and_lookup_avail_expr): Similarly.
+ 	(record_equivalences_from_phis): Similarly.
+ 	(record_equivalences_from_incoming_edge): Similarly.  Also accept
+ 	a pointer to the block const_and_copies table and vrp_variables.
+ 	Callers updated.
+ 	(eliminate_redundant_computations): Similarly
+ 	(record_equivalences_from_stmt, thread_through_successor): Similarly.
+ 	(dom_opt_initialize_block): New function.  Perform block local
+ 	initialization for the dominator optimizer.
+ 	(dom_opt_finalize_block): Renamed from finalize_block.  Get
+ 	block local varrays from walk_data.  Pop entry off block local
+ 	data stack when complete.
+ 	(dom_opt_walk_stmts): New function.
+ 	(cprop_into_phis): Get block local varrays from walk_data.
+ 	(record_range): Get vrp varray by reference than by value.
+ 	(tree_ssa_dominator_optimize): Store incoming "vars" variable into
+ 	global "vars_to_rename".  Initialize walk_data.  Use
+ 	walk_dominator_tree.
+ 	(cprop_into_stmt): Initialize may_have_exposed_new_symbols.
+ 	* tree-ssa.c: Include domwalk.h
+ 	(rewrite_finalize_block, rewrite_initialize_block): New functions
+ 	extracted from rewrite_block.
+ 	(rewrite_walk_stmts, rewrite_add_phi_arguments): Similarly.
+ 	(rewrite_block): Kill.
+ 	(rewrite_into_ssa): Initialize walk_data.  Use walk_dominator_tree.
+ 
+ 2003-10-14  Richard Henderson  <rth@redhat.com>
+ 
+ 	* gimplify.c (gimplify_expr): Return bool.  Bail gracefully if
+ 	fb_mayfail is set.
+ 	(gimplify_asm_expr): Take pointer-to-expr.  Allow gimplify_expr
+ 	to fail for lvalues, and issue appropriate error messages.  Zap
+ 	the entire asm statement on failure.
+ 	* tree-simple.h (enum fallback_t): Add fb_mayfail.
+ 
+ 2003-10-14  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-tree.h (C_LANG_TREE_NODE_CHAIN_NEXT): New.
+ 	(union lang_tree_node): Use it for chain_next annotation.
+ 
+ 2003-10-14  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-common.c: Include tree-iterator.h.
+ 	(c_expand_expr): Kill warn_unused_result checks.
+ 	(c_warn_unused_result): New.
+ 	* c-common.h (STMT_EXPR_WARN_UNUSED_RESULT): Remove.
+ 	(c_warn_unused_result): Declare.
+ 	* c-decl.c (finish_function): Always gimplify.  Call
+ 	c_warn_unused_result.
+ 	* calls.c (expand_call): Kill warn_unused_result checks.
+ 	* Makefile.in (c-common.o): Update.
+ 
+ 2003-10-15  Steven Bosscher  <steven@gcc.gnu.org>
+ 
+ 	* cfghooks.c (dump_bb): Take extra `int indent' argument.
+ 	* cfg.c (dump_bb): Take extra argument to match cfg hook.
+ 	Write out all information about bb that is shared between the tree
+ 	and rtl representations.
+ 	* basic-block.c (dump_bb): Adjust prototype.
+ 	* cfgrtl.c (rtl_dump_bb): Update prototype to match cfg hook.
+ 	Use indent.
+ 	* flow.c (verify_wide_reg, verify_local_live_at_start):
+ 	Fixup dump_bb calls.
+ 	* tree-cfg.c (dump_tree_bb): Rename to tree_dump_bb.  Remove unused
+ 	 `prefix' argument.  Put in tree_cfg_hooks as cfg hook for dump_bb.
+ 	(remove_bb, debug_tree_bb, dump_tree_cfg): Call dump_bb.
+ 	* tree-ssa (dump_tree_ssa): Likewise.
+ 	* tree-flow.h (dump_tree_bb): Replace with new tree_dump_bb
+ 	prototype.
+ 	* tree-pretty-print (dump_block_info): Match case of BLOCK, SUCC,
+ 	PRED with dump_bb.
+ 
+ 2003-10-14  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-alias-ander.c (throwaway_global): Delete.
+ 	(andersen_same_ponts_to_set): We handle all globals individually
+ 	now.
+ 	* tree-alias-common.c:  Remove doxygen markers.
+ 	(get_alias_var_decl): Always create an alias var for globals now.
+ 	Assign the global alias vars to GLOBAL_VAR, too.
+ 	(intra_function_call): Fix logic, do a bit of pre-filtering to
+ 	avoid useless global aliasing.
+ 	(get_values_from_constructor): It's the same for field based and
+ 	not field based.
+ 	(create_alias_vars): Remove special global var handling.
+ 	(same_points_to_set): Ditto.
+ 	(ptr_may_alias_var): Ditto.
+ 
+ 2003-10-14  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (cprop_into_phis): Avoid doing useless work if the
+ 	edge we care about is abnormal.
+ 	* tree-ssa-copyprop (cprop_phi): Avoid doing useless work if the
+ 	destination of the PHI node occurs in an abnormal PHI.
+ 
+ 	* tree-ssa-dom.c (record_equivalences_from_stmt): Renamed from
+ 	record_equivalances.  Caller updated.
+ 	(record_equivalences_from_phis): New function extracted from
+ 	optimize_block.
+ 	(record_equivalences_from_incoming_edge): Likewise.
+ 	(record_equivalances_from_block_entry): Likewise.
+ 	(cprop_into_phis): Likewise.
+ 	(optimize_stmt): Lots of code moved into new functions.  Call
+ 	record_equivlances_from_block_entry.
+ 
+ 	* tree-ssa-dom.c (optimize_block): Simplify interface slightly.
+ 	Use finalize_block.  Extract edge_flags from our block's
+ 	incoming edge as necessary.  Simplify recursive call.
+ 	(thread_through_successor): Extracted from optimize_block.
+ 	(finalize_block): Similarly.
+ 
+ 	* tree-ssa-dom.c (eliminate_redundant_computations): New function
+ 	extracted from optimize_stmt.
+ 	(record_equivalences): Similarly.
+ 	(optimize_stmt): Use eliminate_redundant_computations and
+ 	record_equivalences.  If fold_stmt changes stmt, then make sure
+ 	to get a new annotation as well.
+ 
+ 	* tree-cfg.c (cleanup_control_flow): Pass last statement down to
+ 	cleanup_cond_expr_graph and cleanup_switch_expr_graph.
+ 	(cleanup_cond_expr_graph): Accept statement from caller and
+ 	use it.  Return nonzero if the predicate was constant.  No longer
+ 	static.
+ 	(cleanup_switch_expr_graph): Similarly.
+ 	(disconnect_unreachable_case_labels): Similarly, except that it
+ 	is still static.
+ 	* tree-flow.h (cleanup_cond_expr_graph): Prototype.
+ 	(cleanup_switch_expr_graph): Similarly.
+ 	* tree-ssa-dom.c (optimize_stmt): Also optimize the condition
+ 	in a SWITCH_EXPR.  Use COND_EXPR_COND and SWITCH_COND to get
+ 	conditions instead of relying upon known operand positions.
+ 	Use cleanup_cond_expr_graph and cleanup_switch_expr_graph rather
+ 	than open coding equivalents.
+ 	(lookup_avail_expr): Handle SWITCH_EXPRs.  Use COND_EXPR_COND and
+ 	SWITCH_COND to get conditions instead of relying upon known
+ 	operand positions.
+ 	(avail_expr_hash, avail_expr_eq): Similarly.
+ 
+ 2003-10-14  Richard Henderson  <rth@redhat.com>
+ 
+ 	* gimplify.c (gimplify_body): Save and restore input_location;
+ 	initialize input_location to DECL_SOURCE_LOCATION.
+ 	(gimplify_expr): Always save and restore input_location.
+ 
+ 2003-10-14  Richard Henderson  <rth@redhat.com>
+ 
+ 	* expr.c (expand_expr): Break out EXPR_LOCUS code from ...
+ 	(expand_expr_1): ... here, renamed from expand_expr.
+ 
+ 2003-10-13  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-simplify.c (c_gimplify_stmt): Upreate on location_t and not
+ 	fine and line individually.
+ 	(gimplify_c_loop, gimplify_switch_stmt): Likewise.
+ 	* gimplify.c (wfl_locus): Merge wfl_filename+wfl_lineno.
+ 	(annotate_all_with_locus_1): Rename from annotate_stmt_with_file_line.
+ 	(annotate_all_with_locus): Replace annotate_all_with_file_line;
+ 	update all callers.
+ 	* tree-simple.h: Update.
+ 	* tree.c, tree.h (annotate_with_locus): New.
+ 
+ 2003-10-13  Steven Bosscher  <steven@gcc.gnu.org>
+ 
+ 	* tree-flow-inline.h (def_ops): Take a stmt_ann_t as argument
+ 	instead of a tree.
+ 	(use_ops): Likewise.
+ 	(vdef_ops): Likewise.
+ 	(vuse_ops): Likewise.
+ 	* tree-flow.h: Update prototypes.
+ 	* tree-cfg.c (remove_stmt): Load the statement annotation.
+ 	Adjust *_ops calls.
+ 	* tree-dfa.c (compute_immediate_uses_for_stmt,
+ 	mark_new_vars_to_rename): Likewise.
+ 	* tree-pretty-print.c (dump_vops): Likewise.
+ 	* tree-ssa-ccp.c (tree_ssa_ccp): Likewise.  Also remove now
+ 	superfluous stmt_ann() calls.
+ 	(visit_stmt, cpp_fold, add_var_to_ssa_edges_worklist,
+ 	initialize, replace_uses_in, likely_value): Likewise.
+ 	* tree-ssa-copyprop.c (copyprop_stmt): Likewise.
+ 	* tree-ssa-dce.c (stmt_useful_p, process_worklist): Likewise.
+ 	* tree-ssa-dom.c (cprop_into_stmt, optimize_stmt,
+ 	avail_expr_hash, avail_expr_eq):
+ 	Likewise.
+ 	* tree-ssa-live.c (create_ssa_var_map, calculate_live_on_entry,
+ 	build_tree_conflict_graph): Likewise.
+ 	* tree-ssa-pre.c (maybe_find_rhs_use_for_var,
+ 	expr_phi_insertion, same_e_version_real_occ_real_occ,
+ 	generate_expr_as_of_bb, bool load_modified_real_occ_real_occ,
+ 	bool same_e_version_phi_result, get_default_def,reaching_def,
+ 	tree_perform_ssapre): Likewise.
+ 	* tree-ssa.c (mark_def_sites, rewrite_out_of_ssa, rewrite_stmt):
+ 	Likewise.
+ 
+ 2003-10-12  Richard Henderson  <rth@redhat.com>
+ 
+ 	* gimplify.c (gimplify_array_ref_to_plus): Be prepared for
+ 	null TYPE_DOMAIN or TYPE_MIN_VALUE for the array.
+ 	* tree-ssa-ccp.c (fold_indirect_refs_r): Likewise.
+ 
+ 2003-10-12  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree.h (struct tree_common): Rename unused_1 to invariant_flag.
+ 	(TREE_INVARIANT): New.
+ 	* builtins.c (build_string_literal): Set TREE_INVARIANT.
+ 	* c-common.c (fix_string_type): Likewise.
+ 	* c-typeck.c (build_external_ref): Likewise.
+ 	(build_c_cast, pop_init_level): Likewise.
+ 	* fold-const.c (fold_convert, fold): Likewise.
+ 	* tree.c (make_node, build_constructor): Likewise.
+ 	(build, build1): Likewise.
+ 	(staticp): Pass unknown component references to the language.
+ 	(save_expr): Check TREE_INVARIANT instead of TREE_CONSTANT.
+ 	(skip_simple_arithmetic): Likewise.
+ 	(stabilize_reference_1): Likewise.
+ 	* print-tree.c (print_node): Print TREE_INVARIANT.
+ 
+ 	* c-common.c (pointer_int_sum): Rely on build to set TREE_CONSTANT.
+ 	(finish_label_address_expr): Likewise.
+ 	* c-typeck.c (default_function_array_conversion): Likewise.
+ 	(parser_build_binary_op, pointer_diff): Likewise.
+ 	(build_unary_op, build_binary_op): Likewise.
+ 	* fold-const.c (non_lvalue): Likewise.
+ 
+ 	* tree-pretty-print.c (dump_generic_node): Handle VIEW_CONVERT_EXPR.
+ 
+ 2003-10-12  Richard Henderson  <rth@redhat.com>
+ 	    Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* gimplify.c (gimplify_array_ref_to_plus): Subtract the array
+ 	domain minimum index.
+ 	(gimplify_addr_expr): Expand ARRAY_REFs.  Cope with Fortran
+ 	missing cast wierdnesses.
+ 	* tree-dfa.c (get_expr_operands): Handle (&v + c); abort on
+ 	other address invariants that should have been folded.
+ 	(vdefs_disappeared_p): New.
+ 	(mark_new_vars_to_rename): Use it.  Move from ...
+ 	* tree-ssa-dom.c: ... here.
+ 	* tree-flow-inline.h (is_unchanging_value): Remove; use
+ 	is_gimple_min_invariant everywhere instead.
+ 	(phi_ssa_name_p): New.
+ 	* tree-must-alias.c (find_addressable_vars): Process PHIs.
+ 	* tree-simple.c (is_gimple_min_invariant): Rename from
+ 	is_gimple_const; allow non-static variable addresses; update callers.
+ 	(is_gimple_val): Remove ADDR_EXPR checks.
+ 	* tree-simple.h: Update.
+ 	* tree-ssa-ccp.c (replace_uses_in): Add replaced_address argument.
+ 	(substitute_and_fold): Use that to mark_new_vars_to_rename.
+ 	(fold_indirect_refs_r): New.
+ 	(fold_stmt): Use it.
+ 	* tree-ssa-copyprop.c (copyprop_stmt): Call fold_stmt.
+ 	* tree-ssa-dce.c (NECESSARY): Use asm_written_flag.
+ 	(mark_necessary): Reject DECLs.
+ 	* tree-ssa-live.c (register_ssa_partition): Use phi_ssa_name_p.
+ 	* tree-ssa-pre.c (generate_expr_as_of_bb): Call fold_stmt if we
+ 	replaced with constants.
+ 	* tree-ssa.c (insert_copy_on_edge): Unwrap ADDR_EXPRs to set_is_used.
+ 	(eliminate_build, coalesce_abnormal_edges, coalesce_vars): Use
+ 	phi_ssa_name_p.
+ 
+ 2003-10-09  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	java/12211
+ 	* gimplify.c (gimplify_save_expr): Tolerate void-typed saved
+ 	expressions.
+ 
+ 2003-10-09  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (add_call_clobber_ops): If a variable is read-only,
+ 	add a VUSE operand instead of VDEF.
+ 
+ 2003-10-08  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR optimization/12525
+ 	* tree-dfa.c (note_addressable): New fn, split out from...
+ 	(add_stmt_operands): Here.
+ 	(get_stmt_operands) <ASM_EXPR>: Call it for mem ops.
+ 	* gimplify.c (gimplify_asm_expr): Call parse_input_constraint
+ 	directly.  It's only a mem op if allows_mem is set.
+ 
+ 2003-10-08  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	PR/12187
+ 	* tree-dfa.c (add_stmt_operand): Test against current_function_decl
+ 	when checking for global variables.
+ 	(may_access_global_mem_p): Likewise.
+ 	(add_referenced_var): Likewise.
+ 	Consider DECL_NONLOCAL variables call clobbered and used.
+ 	(find_hidden_use_vars): Do not test for DECL_NONLOCAL variables.
+ 	* tree-optimize.c (tree_rest_of_compilation): Test against
+ 	current_function_decl when checking for global variables.
+ 	* tree-ssa-ccp.c (get_default_value): Likewise.
+ 	* tree-ssa-dce.c (need_to_preserve_store): Likewise.
+ 
+ 2003-10-07  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR optimization/12525
+ 	* gimplify.c (gimplify_asm_expr): If the constraint doesn't allow
+ 	a register, call mark_addressable.  Split an in/out operand that
+ 	does allow a register into separate input and output operands.
+ 
+ 2003-10-06  Richard Henderson  <rth@redhat.com>
+ 
+ 	* fold-const.c (fold): Fold (T1)((T2)X op Y) into (T1)X op Y,
+ 	for suitable values of T1 & T2.
+ 
+ 2003-10-06  Andrew Macleod  <amacleod@redhat.com>
+ 
+ 	* tree-dfa.c (compute_immediate_uses): Add optional callback.
+ 	(compute_immediate_uses_for_phi): Remove unused parameter. Add optional
+ 	callback to determine if usage info should be calculated for variable.
+ 	(compute_immediate_uses_for_stmt): Add optional callback to determine
+ 	if usage info should be calculated for variable.
+ 	* tree-flow.h (compute_immediate_uses): Update prototype.
+ 	* tree-ssa-ccp.c (need_imm_uses_for): New. Callback function passed to
+ 	compute_immediate_uses.
+ 	(initialize): Calculate defaults initially, then build reduced
+ 	immediate use information.
+ 	(get_default_value): Non empty stmt's which are not a PHI_NODE or
+ 	a MODIFY_EXPR default to VARYING.
+ 
+ 2003-10-06  Andrew Macleod  <amacleod@redhat.com>
+ 
+ 	* tree-cfg.c (tree_split_edge): Mark edge as FALLTHRU when splitting.
+ 
+ 2003-10-03  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-ssa.c (rewrite_block): Test vars_to_rename instead of
+ 	PHI_ARG_CAPACITY.
+ 	* tree-dfa.c (remove_phi_arg_num): Don't update
+ 	PHI_ARG_CAPACITY.
+ 
+ 2003-10-01  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-decl.c (set_decl_nonlocal): New.
+ 	(store_parm_decls): Use it via walk_tree.
+ 
+ 2003-10-01  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (cprop_into_stmt): New function extracted from
+ 	optimize_stmt.
+ 	(optimize_stmt): Use cprop_into_stmt.
+ 
+ 2003-09-30  Richard Henderson  <rth@redhat.com>
+ 
+ 	* function.h (struct function): Add function_end_locus.
+ 	* c-decl.c (finish_function): Set it.
+ 	* tree-optimize.c (tree_rest_of_compilation): Set input_location
+ 	to function_end_locus before expand_function_end.
+ 
+ 	* tree-optimize.c (optimize_function_tree): Move calls to
+ 	remove_useless_stmts_and_vars and lower_eh_constructs ...
+ 	(tree_rest_of_compilation): ... here.
+ 
+ 	* c-simplify.c (gimplify_expr_stmt): Don't warn for any statement
+ 	with void result type.
+ 
+ 2003-09-30  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (simplify_cond_and_lookup_avail_expr): Fix thinko
+ 	in test for swapping ranges.
+ 
+ 	* tree-ssa-dom.c (record_range): New function.
+ 	(extract_range_from_cond): Likewise.
+ 	(tree_ssa_dominator_optimize): Initialize the vrp_data varray.
+ 	(optimize_block): Initialize the vrp_variables varray.  Wipe
+ 	appropriate entries from the VRP varrays when done processing a block.
+ 	(get_eq_expr_value): Accept new argument "bb".  Call record_range
+ 	appropriately.  Refactor code to avoid useless work.
+ 	(simplify_cond_and_lookup_avail_expr): Use value range records to
+ 	simplify conditions.
+ 	(simplify_rhs_and_lookup_avail_expr): When simplifying ABS_EXPR,
+ 	DIV_EXPR and MOD_EXPR, use simplify_cond_and_lookup_avail_expr
+ 	to determine the range of the given variable.
+ 
+ 	* tree-ssa-dom.c (find_equivalent_equality_comparison): Do not
+ 	look through a typecast which narrows a value.
+ 
+ 2003-09-30  Paul Brook  <paul@nowt.org>
+ 
+ 	* Makefile.in: Add rules for check-gfortran.
+ 
+ 2003-09-29  Richard Henderson  <rth@redhat.com>
+ 
+ 	* gimplify.c (gimplify_cond_expr): Fix both arms dead return value.
+ 
+ 2003-09-29  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (simplify_cond_and_lookup_avail_expr): New function.
+ 	(find_equivalent_equality_comparison): Likewise.
+ 	(optimize_block): Remove code to build a == c equivalence after
+ 	seeing a == b and b == c.  Remove code to walk backwards
+ 	though typecasts to record equivalences and move relevant parts
+ 	into find_equivalent_equality_comparison.
+ 	(optimize_stmt): Call simplify_cond_and_lookup_avail_expr.
+ 
+ 2003-09-28  Richard Henderson  <rth@redhat.com>
+ 
+ 	* gimplify.c (gimplify_call_expr): Annotate all call_exprs.
+ 	* tree-inline.c (expand_call_inline): Set input_location based
+ 	on EXPR_LOCUS; save and restore input_location around that.
+ 	(walk_tree): Do not set input_location.
+ 
+ 2003-09-27  Graham Stott  <graham.stott@btinternet.com>
+ 
+ 	* expr.c (expand_expr)[CATCH_EXPR]: Fix bogus return value.
+ 
+ 2003-09-26  Andrew MacLeod  <amacloeod@redhat.com>
+ 
+ 	* tree-ssa-dom.c (struct var_value_d): Remove.
+ 	(const_and_copies): Change to a varray_type.
+ 	(tree_ssa_dominator_optimize): Initialize const_and_copies as a varray.
+ 	(optimize_block): Simply set the value in const_and_copies.
+ 	(dump_dominator_optimization_stats): No hash stats for const_and_copies.
+ 	(record_cond_is_true, record_cond_is_false,
+ 	simplify_rhs_and_lookup_avail_expr, update_rhs_and_lookup_avail_expr):
+ 	Parameter const_and_copies is now a varray_type.
+ 	(var_value_hash, var_value_eq): Remove.
+ 	(get_value_for, set_value_for): Access varray elements.
+ 	(get_eq_expr_value): Parameter const_and_copies is now a varray_type.
+ 
+ 	* tree-cfg.c (handle_switch_split): Update container of previous stmt.
+ 
+ 2003-09-25  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (split_critical_edges): New function, temporarily
+ 	disabled until some edge splitting/insertion problems are fixed.
+ 	(opnum_of_ephi): Take an edge argument, constify. Use hash table lookup.
+ 	Update all callers.
+ 	(ephi_pindex_eq): New function.
+ 	(ephi_pindex_hash): New function.
+ 	(ephi_pindex_htab): New variable.
+ 	(add_ephi_pred): Update hash table.
+ 	(expr_phi_insertion): Don't free the bitmap returned by compute_idfs
+ 	anymore.
+ 	(idfs_cache): New variable.
+ 	(compute_idfs): Rewrite to use cache as much as possible, and not
+ 	recompute when we can avoid it.
+ 
+ 2003-09-25  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-alias-ander.c:  Fixup comment spacing.
+ 	(andersen_op_assign):  Handle >2 operands case.
+ 
+ 2003-09-24  Steven Bosscher  <steven@gcc.gnu.org>
+ 
+ 	* tree-dfa.c (compute_immediate_uses_for): Split up in two
+ 	separate functions, one for PHIs and one for normal statements.
+ 	(compute_immediate_uses_for_phi): New.
+ 	(compute_immediate_uses_for_stmt): New.
+ 
+ 2003-09-25  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (optimize_block): When EQ_EXPR_VALUE has the
+ 	form DEST = SRC where both DEST and SRC are SSA_NAMEs also
+ 	record SRC = DEST into the const and copies table.
+ 
+ 	* tree-ssa-dom.c (optimize_block): Change tests which checked
+ 	for SSA_VAR_P to only allow SSA_NAMEs.
+ 	(get_value_for, set_value_for): Likewise.
+ 	(lookup_avail_expr, get_eq_expr_value): Likewise.
+ 
+ 2003-09-25  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-ssa-dce.c (pdom_info, needed_stmts): Remove.
+ 	(NECESSARY): Define.
+ 	(necessary_p): Check bit instead of hash table lookup.
+ 	(clear_necessary): New. Clear necessary bit.
+ 	(mark_necessary): Use bit instead of hash table. No control lookup.
+ 	(mark_tree_necessary): Remove.
+ 	(find_useful_stmts): Clear necessary bit before checking it.
+ 	(stmt_useful_p): Remove GOTO_EXPR case. Check arms of COND_EXPR for
+ 	GOTO. All other control flow stmts are necessary.
+ 	(process_worklist): Dont look for control parents.
+ 	(remove_dead_stmts): No dominattor info is necessary.
+ 	(remove_dead_stmt): Don't need BB any more. Remove COND_EXPR by changing
+ 	the condition to 'if (0)'. Abort on other control flow.
+ 	(tree_ssa_dce): No longer need the hash table.
+ 	(remove_conditional): Remove.
+ 
+ 2003-09-25  Andreas Schwab  <schwab@suse.de>
+ 
+ 	* tree-flow.h: Declare next_ssa_version.
+ 	* tree-ssa-ccp.c: Remove conflicting declaration.
+ 	* tree-ssa-live.c: Likewise.
+ 	* tree.c (make_ssa_name): Likewise.
+ 
+ 2003-09-24  Jason Merrill  <jason@redhat.com>
+ 
+ 	* tree.h (DECL_SOURCE_LOCATION): Resurrect.
+ 	(DECL_SOURCE_FILE, DECL_SOURCE_LINE): Likewise.
+ 	(EXPR_LOCUS): Renamed from TREE_LOCUS.  Null for non-exprs.
+ 	(SET_EXPR_LOCUS): New macro.
+ 	(EXPR_FILENAME): Renamed from TREE_FILENAME.
+ 	(EXPR_LINENO): Renamed from TREE_LINENO.
+ 	(struct tree_common): Remove locus field.
+ 	(struct tree_decl): Re-add locus field.
+ 	(struct tree_expr): Add locus field.
+ 	* c-aux-info.c, c-decl.c, coverage.c, c-parse.in, dbxout.c,
+ 	diagnostic.c, dwarf2out.c, expr.c, function.c, gimplify.c,
+ 	integrate.c, print-tree.c, stmt.c, tree.c, tree-cfg.c,
+ 	tree-dump.c, tree-flow-inline.h, config/alpha/alpha.c,
+ 	config/mips/mips.c: Adjust.
+ 
+ 2003-09-24  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-ssa-ccp.c (enum latticevalue): Add UNINITIALIZED.
+ 	(const_values, struct value_map_d): Remove hash table structures.
+ 	(value_vector): New array of values.
+ 	(get_value): Use value_vector instead of hash table. Mark inline.
+ 	(visit_phi_node): Ignore arguments if the PHI result is already VARYING.
+ 	(initialize): Initialize value vector instead of hash table.
+ 	(finalize): Free value vector instead of hash table.
+ 	(add_var_to_ssa_edges_worklist): Don't add to worklist if
+ 	DONT_SIMULATE_AGAIN flag is set.
+ 	(value_map_hash, value_map_eq): Delete.
+ 
+ 2003-09-24  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (optimize_block): Create infrastructure for
+ 	tracking const_and_copies equivalences which disappear when
+ 	we leave the current block.  Use it for equivalences created
+ 	by EQ_EXPR_VALUE.  Follow use-def chains for EQ_EXPR_VALUE
+ 	equivalences and see if certain NOP_EXPRs can be ignored
+ 	to create a block-local equivalence for const_and_copies.
+ 	(optimize_stmt): Do not get confused by a cast of the return
+ 	value from alloca or the address of a non-weak decl.
+ 
+ 	* fold-const.c (fold_read_from_constant_string): New function.
+ 	* tree.h (fold_read_from_constant_string): Prototype.
+ 	* expr.c (expand_expr, case INDIRECT_REF):  Use it.
+ 	(expand_expr, case ARRAY_REF): Likewise.  Put checking code
+ 	inside an ENABLE_CHECKING.
+ 	* tree-ssa-ccp.c (fold_stmt): Use fold_read_from_constant_string.
+ 	* tree-ssa-dom.c (simplify_rhs_and_lookup_avail_expr): Likewise.
+ 
+ 2003-09-23  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (optimize_block): Ignore "useless" type
+ 	conversions in SWITCH_COND when creating equivalenecs at
+ 	case labels.
+ 
+ 2003-09-22  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (optimize_stmt): Addresses of non-weak symbols
+ 	as well as dynamically allocated stack space are always nonzero.
+ 
+ 	* tree-cfg.c (handle_switch_split): Properly mark the fallthru
+ 	edge from SRC to DEST with EDGE_FALLTHRU.
+ 
+ 2003-09-22  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-flow.h (struct bb_ann_d): Add erefs array.
+ 	* tree-ssa-pre.c (handle_bb_creation): Remove ei parameter.
+ 	Update caller.
+ 	(struct expr_info): Remove erefs array.
+ 	(append_eref_to_block): New function.
+ 	(clear_all_eref_arrays): Ditto.
+ 	(expr_phi_insertion): Use append_eref_to_block.
+ 	(insert_occ_in_preorder_dt_order_1): Ditto.
+ 	(subst_phis): Only copy expression, not the containing EUSE/EPHI.
+ 	Update all callers to reflect this.
+ 	(compute_will_be_avail): Update for per-block eref array.
+ 	(handle_bb_creation): Ditto.
+ 	(pre_expression): Ditto.
+ 	(tree_perform_ssapre): Clear eref arrays when done with expression.
+ 
+ 2003-09-22  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-cfg.c (dump_tree_bb): Remove superlfuous newlines.
+ 
+ 2003-09-21  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (compute_alias_sets): Use TDI_alias instead of
+ 	TDI_ssa.
+ 	* tree-dump.c (dump_files): Add enties for TDI_alias, TDI_ssa1,
+ 	TDI_dom1, TDI_ssa2, TDI_dce1, TDI_ssa3, TDI_dom2, TDI_ssa4,
+ 	TDI_ssa5 and TDI_dce2.
+ 	Remove entries for TDI_ssa, TDI_dom and TDI_dce.
+ 	* tree.h (enum tree_dump_index): Similarly.
+ 	(TDF_ALIAS): Remove.
+ 	(TDF_VOPS): Change value.
+ 	* doc/invoke.texi (-fdump-tree-alias): Document.
+ 	* tree-flow.h (tree_warn_uninitialized): Remove unused variable.
+ 	(rewrite_into_ssa): Add enum tree_dump_index argument.  Update all
+ 	callers.
+ 	(rewrite_out_of_ssa): Likewise.
+ 	(tree_perform_ssa_pre): Likewise.
+ 	(tree_ssa_dominator_optimize): Likewise.
+ 	(tree_ssa_dce): Likewise.
+ 	(tree_ssa_copyprop): Likewise.
+ 	(tree_ssa_ccp): Likewise.
+ 	Add sbitmap argument.
+ 	(tree_compute_must_alias): Likewise.
+ 	(mark_new_vars_to_rename): Declare.
+ 	* tree-must-alias.c (tree_compute_must_alias): Do not call
+ 	rewrite_into_ssa.
+ 	Remove local vars_to_rename.  Use new argument instead.
+ 	* tree-optimize.c (optimize_function_tree): Re-write optimization
+ 	ordering to support passes that need the SSA form updated.
+ 	Call tree_ssa_dominator_optimize.
+ 	Re-arrange optimization ordering.
+ 	* tree-ssa-ccp.c (substitute_and_fold): Take new argument
+ 	vars_to_rename.
+ 	Call mark_new_vars_to_rename.
+ 	(visit_phi_node): Move variable 'val' into the right scope.
+ 	(initialize): Move call dump_begin ...
+ 	(tree_ssa_ccp): ... here.
+ 	* tree-ssa-dom.c (mark_new_vars_to_rename): Declare extern.
+ 	Make sure that variables in virtual operands aren't marked
+ 	unnecessarily.
+ 	* tree-ssa.c (rewrite_into_ssa): Do not call
+ 	tree_ssa_dominator_optimize.
+ 
+ 2003-09-21  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-dce.c (dom_info): Remove unused variable.
+ 	* tree-ssa-dom.c (tree_ssa_dominator_optimize): If the CFG has been
+ 	altered, call cleanup_tree_cfg.
+ 	Call cleanup_tree_cfg before returning.
+ 	* tree-ssa-pre.c (tree_perform_ssapre): Call get_stmt_operands
+ 	before processing the statement.
+ 	* tree-ssa-dom.c (thread_edge): Remove attribute EDGE_FALLTHRU from
+ 	edge.
+ 
+ 2003-09-21  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (simplify_rhs_and_lookup_avail_expr): Break out of
+ 	optimize_stmt.  Follow the def-use chains back for certain expressions
+ 	to see if we can simplify the RHS of the current expression based
+ 	on earlier expressions.
+ 
+ 	* tree-ssa-dom.c (optimize_block): Rework code to propagate values
+ 	into PHI nodes to be more efficient.
+ 
+ 2003-09-20  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-flow.h (struct dataflow_d): Remove reaching fields, add 2 element
+ 	vector of trees.
+ 	* tree-flow-inline.h (immediate_uses): Rename to get_immediate_uses,
+ 	return a dataflow object.
+ 	(reaching_defs): Remove until needed.
+ 	(num_immediate_uses): New. Return number of immediate uses.
+ 	(immediate_use): New. Return a specified immediate use.
+ 	* tree-dfa.c (add_immediate_use): Use new fields.
+ 	(dump_immediate_uses_for): Use new interface.
+ 	(create_phi_node): Chain to start of list.
+ 	* tree-ssa-ccp.c (add_var_to_ssa_edges_worklist): Use new interface.
+ 	* tree-ssa.c (compute_global_livein): Loop interchange.
+ 
+ 2003-09-18  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (optimize_stmt): Allow optimizing the RHS of a
+ 	MODIFY_EXPR even if we can't record any equivalences created by
+ 	the MODIFY_EXPR.  Move code to simplify ABS_EXPR, TRUNC_DIV_EXPR
+ 	and TRUNC_MOD_EXPR to an earlier position.
+ 
+ 2003-09-19  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-ssa-ccp.c (cfg_edges): Rename to cfg_blocks.
+ 	(cfg_blocks_num, cfg_blocks_head, cfg_blocks_tail): New. Queue markers.
+ 	(bb_in_list): New. Vector indicating if a BB is in the cfg_blocks list.
+ 	(tree_ssa_ccp): Use new routines.
+ 	(add_control_edge): Add to cfg_blocks list.
+ 	(initialize): Initialize new variables.
+ 	(finalize): Free allocations.
+ 	(cfg_blocks_empty): New. Is cfg_blocks queue list.
+ 	(cfg_blocks_add): New. Add a basic block to cfg_blocks list.
+ 	(cfg_blocks_pop): New. Get a basic_block from the list.
+ 
+ 2003-09-18  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-cfg.c (struct rusv_data): Add may_throw, may_branch.
+ 	(remove_useless_stmts_and_vars_1): Set them.
+ 	(remove_useless_stmts_and_vars_goto): Likewise.
+ 	(remove_useless_stmts_and_vars_tf): Transform to compound_expr
+ 	if only fallthrough.
+ 	(remove_useless_stmts_and_vars_tc): Kill region if nothrow.
+ 	Detect catch regions that don't propagate exceptions.
+ 	(remove_useless_stmts_and_vars): Zero entire data struct.
+ 
+ 2003-09-18  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-eh.c (lower_try_finally_dup_block): New.
+ 	(honor_protect_cleanup_actions, lower_try_finally_copy): Use it.
+ 
+ 2003-09-18  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-cfg (remove_useless_stmts_and_vars_cond,
+ 	remove_useless_stmts_and_vars_tf,
+ 	remove_useless_stmts_and_vars_tc,
+ 	remove_useless_stmts_and_vars_bind,
+ 	remove_useless_stmts_and_vars_goto): Break out of ...
+ 	(remove_useless_stmts_and_vars_1): ... here.  Rename to _1;
+ 	take and use struct rusv_data.
+ 	(remove_useless_stmts_and_vars): New.  Loop until no change.
+ 	* tree-flow.h (remove_useless_stmts_and_vars): Update decl.
+ 	* tree-ssa.c (rewrite_out_of_ssa): Don't loop here.
+ 
+ 2003-09-18  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-pretty-print.c (dump_generic_node): Don't double indent asms.
+ 
+ 2003-09-18  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-eh.c: Include langhooks.h, remove errors.h.
+ 	(decide_copy_try_finally): Use estimate_num_insns to choose
+ 	between copy and switch implementations.
+ 
+ 	* c-common.c (c_estimate_num_insns): Take an expr, not a decl.
+ 	* tree-inline.c (limits_allow_inlining): Pass it the body of the decl.
+ 
+ 2003-09-18  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (lookup_avail_expr): New argument which indicates
+ 	if the expression should be entered into the hash table.  All
+ 	callers updated.
+ 	(update_rhs_and_lookup_avail_expr): New function factored out
+ 	of optimize_stmt.
+ 
+ 	* tree.h (commutative_tree_code, associative_tree_code): Declare
+ 	* tree.c (commutative_tree_code, associative_tree_code): New
+ 	functions.
+ 	(iterative_hash_expr): Use commutative_tree_code.
+ 	* fold-const.c (operand_equal_p): Use commutative_tree_code
+ 	rather than inlining the communitivy check.
+ 	(fold, nondestructive_fold_binary_to_constant): Similarly.
+ 
+ 2003-09-18  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (tree-eh.o): Add dependency on errors.h
+ 	* tree-eh.c: Include errors.h
+ 
+ 2003-09-17  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-cfg.c (remove_useless_stmts_and_vars): Revert last change.
+ 	* tree-flow.h, tree-ssa.c: Likewise.
+ 
+ 2003-09-17  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-eh.c (decide_copy_try_finally): Remove forgotten debug code.
+ 
+ 2003-09-17  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (pick_ssa_name): New function.
+ 	(code_motion): Use it.
+ 
+ 2003-09-17  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-eh.c: New file.
+ 	* Makefile.in (OBJS-common): Add it.
+ 	(tree-eh.o): New.
+ 	* calls.c (emit_call_1): New argument for full call expr.
+ 	Check with lookup_stmt_eh_region to set REG_EH_REGION.
+ 	(expand_call): Likewise for tail-calls.
+ 	* except.c (struct eh_region): Add tree_label.
+ 	(gen_eh_region, gen_eh_region_cleanup, gen_eh_region_try,
+ 	gen_eh_region_catch, gen_eh_region_allowed,
+ 	gen_eh_region_must_not_throw, get_eh_region_number,
+ 	get_eh_region_may_contain_throw, get_eh_region_tree_label,
+ 	set_eh_region_tree_label, expand_resx_expr): New.
+ 	(expand_eh_region_start, expand_start_catch): Use them.
+ 	(expand_end_catch): Tidy.
+ 	(note_eh_region_may_contain_throw): Take region argument.
+ 	(note_current_region_may_contain_throw): New.
+ 	(get_exception_filter): Export.
+ 	(collect_eh_region_array): Export.
+ 	(remove_unreachable_regions): Check ERT_TRY based on reachability
+ 	of catches, not reachability of continue_label.  Never remove
+ 	ERT_MUST_NOT_THROW regions.
+ 	(collect_rtl_labels_from_trees): New.
+ 	(convert_from_eh_region_ranges): Use it.
+ 	(connect_post_landing_pads): Handle dying cleanups.
+ 	(struct reachable_info): Add callback data.
+ 	(add_reachable_handler): Invoke the callback.
+ 	(foreach_reachable_handler): New.
+ 	(reachable_handlers): Use it.
+ 	(arh_to_landing_pad, arh_to_label): New.
+ 	(can_throw_internal_1): Split out from can_throw_internal.
+ 	(can_throw_external_1): Similarly.
+ 	* except.h: Update.
+ 	* expr.c (expand_expr): Handle RESX_EXPR, FILTER_EXPR.
+ 	* gimplify.c (gimplify_modify_expr): Use tree_could_trap_p.
+ 	* stmt.c (using_eh_for_cleanups_p): Export.
+ 	(expand_return): Allow any typed rhs.
+ 	* timevar.def (TV_TREE_EH): New.
+ 	* tree-cfg.c (eh_stack): Kill.
+ 	(build_tree_cfg): Don't set it.  Kill code to handle EH.
+ 	(could_trap_p): Move to tree-eh.c as tree_could_trap_p.
+ 	(get_eh_region_type, make_try_expr_blocks, make_catch_expr_blocks,
+ 	make_eh_filter_expr_blocks, try_finallys): Kill.
+ 	(make_edges): Kill code to handle EH.
+ 	(make_ctrl_stmt_edges): Kill TRY_FINALLY_EXPR, CATCH_EXPR,
+ 	EH_FILTER_EXPR.  Handle RESX_EXPR.
+ 	(make_call_expr_edges): Kill.
+ 	(make_exit_edges): Use make_eh_edges.
+ 	(label_to_block): New.
+ 	(make_goto_expr_edges): Use it.
+ 	(is_ctrl_stmt): Add RESX_EXPR.
+ 	(is_ctrl_altering_stmt): Restructure.  Use tree_can_throw_internal.
+ 	(last_exec_block, compute_reachable_eh): Kill.
+ 	* tree-dfa.c (get_stmt_operands): Add RESX_EXPR.
+ 	(get_expr_operands): Add FILTER_EXPR.
+ 	* tree-dump.c (dump_files): Add tree-eh.
+ 	* tree-flow.h (struct stmt_ann_d): Kill reachable_exception_handlers.
+ 	(label_to_block, lower_eh_constructs, make_eh_edges,
+ 	tree_could_trap_p, tree_could_throw_p, tree_can_throw_internal,
+ 	tree_can_throw_external): Declare.
+ 	* tree-optimize.c (optimize_function_tree): Call lower_eh_constructs.
+ 	(tree_rest_of_compilation): Save tree for inlining.
+ 	* tree-pretty-print.c (dump_generic_node): Handle FILTER_EXPR,
+ 	RESX_EXPR.
+ 	* tree-simple.c (is_gimple_stmt): Add RESX_EXPR.
+ 	(is_gimple_val): Add FILTER_EXPR.
+ 	* tree-ssa-dce.c (stmt_useful_p): Restructure.  Add lhs of
+ 	EXC_PTR_EXPR or FILTER_EXPR.
+ 	* tree.def (FILTER_EXPR, RESX_EXPR): New.
+ 	* tree.h (enum tree_dump_index): Add TDI_eh.
+ 
+ 2003-09-17  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree.c (tsi_link_before): Remove unnecessary parens.
+ 	(tsi_link_chain_before, tsi_delink): Likewise.
+ 	(tsi_link_after): Accept the case if the iterator points
+ 	to a NULL node; treat it as an empty list.
+ 	(tsi_link_chain_after): Likewise.  Update iterator properly
+ 	for TSI_CHAIN_END.
+ 
+ 2003-09-17  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-inline.c (debug_find_tree_1, debug_find_tree): New.
+ 
+ 2003-09-17  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-cfg.c (struct rusv_data): New.
+ 	(remove_useless_stmts_and_vars_1): Rename from
+ 	remove_useless_stmts_and_vars.  Use rusv_data.  Handle goto-next
+ 	via remembering the last goto seen, and zapping it when appropriate.
+ 	(remove_useless_stmts_and_vars): New.  Loop until done.
+ 	* tree-flow.h (remove_useless_stmts_and_vars): Update decl.
+ 	* tree-optimize.c (optimize_function_tree): Don't cache fnbody.
+ 	Dump data after remove_useless_stmts_and_vars.
+ 	* tree-ssa.c (rewrite_out_of_ssa): Kill loop around
+ 	remove_useless_stmts_and_vars.
+ 	* tree-dump.c (dump_files): Add .useless.
+ 	* tree.h (enum tree_dump_index): Add TDI_useless.
+ 
+ 2003-09-17  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* pretty-print.c (pp_write_text_to_stream): Export.
+ 	* pretty-print.h (pp_write_text_to_stream): Declare.
+ 	* tree-pretty-print.c (print_generic_stmt): Flush to file.
+ 	(dump_generic_node): Call pp_write_text_to_stream.
+ 	(maybe_init_pretty_print): Take file argument; associate the
+ 	stream with the buffer.
+ 
+ 2003-09-17  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-ccp.c (ccp_fold): If the return value has the wrong
+ 	type, try to convert it to the proper type rather than failing.
+ 
+ 	* tree-ssa-dom.c (optimize_stmt): Note that the statement is
+ 	modified, even if we just change the virtual operands.  If
+ 	the statement was modified by const/copy propagation, then
+ 	set may_have_exposed_new_symbols.
+ 
+ 2003-09-17  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (find_vars_r): Do not consider 'void *' pointers as
+ 	dereferenced when scanning function call arguments.
+ 	* tree-flow-inline.h (may_propagate_copy): Block propagation of
+ 	pointers when they have different memory tags.
+ 	* tree-ssa-copyprop.c (propagate_copy): When copy propagating
+ 	pointers, abort if the two pointers don't have identical memory
+ 	tags.
+ 
+ 2003-09-16  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-ccp.c (visit_stmt): Do not set DONT_SIMULATE_AGAIN
+ 	just because a statement as virtual definitions.
+ 	(likely_value): A CALL_EXPR is assumed to return a VARYING
+ 	result, regardless of its operands.
+ 
+ 2003-09-15  Jason Merrill  <jason@redhat.com>
+ 
+ 	* tree-simple.c (is_gimple_val): Allow addresses of all decls.
+ 	(is_gimple_const): Allow addresses of all non-weak statics.
+ 	* tree-ssa-ccp.c (fold_stmt): Return bool.
+ 	* tree-flow.h: Adjust prototype.
+ 	* tree-ssa-dom.c (optimize_stmt): If folding changed stuff, we
+ 	need to recalculate the vops.
+ 
+ 2003-09-13  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	Fix PR optimization/12268
+ 	* tree-dfa.c (add_referenced_var): Call-clobbered pointers may
+ 	point to global memory.
+ 
+ 2003-09-13  Jason Merrill  <jason@redhat.com>
+ 
+ 	* c-common.c (c_apply_type_quals_to_decl): Unset TREE_READONLY for
+ 	types with constructors.
+ 	Remove superfluous references to TREE_TYPE (decl).
+ 
+ 2003-09-13  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* opts.c (decode_options): Enable must-alias optimization by default.
+ 	* tree-dfa.c (get_expr_operands): Always call add_stmt_operand when
+ 	dealing with ADDR_EXPR nodes.
+ 	(add_stmt_operand): If the variable has an alias set
+ 	of size zero, abort.
+ 	Call get_base_symbol() to retrieve the variable from an ADDR_EXPR
+ 	node.
+ 	(compute_alias_sets): Deep copy the aliases array when triggering
+ 	the alias grouping heuristic.
+ 	Don't group aliases if -ftree-must-alias is given.
+ 	* tree-must-alias.c (tree_compute_must_alias): Call
+ 	dump_referenced_vars when doing detailed dumps.
+ 	Rename promoted_vars to vars_to_rename.  Update all users.
+ 	(find_addressable_vars): Always mark statements modified.
+ 	(promote_var): Also mark aliases of promoted variable to be
+ 	renamed.
+ 	Call find_variable_in and remove_element_from to update varrays for
+ 	call-clobbered variables and alias sets.
+ 	(find_variable_in): New local function.
+ 	(remove_element_from): New local function.
+ 	* varray.c (varray_copy): New function.
+ 	* varray.h (varray_copy): Declare.
+ 
+ 2003-09-13  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-flow-inline.h (is_optimizable_addr_expr): Remove.  Update
+ 	all users.
+ 	* tree-ssa-dom.c (optimize_stmt): Do not propagate SSA names from
+ 	redundant expressions across abnormal edges.
+ 
+ 2003-09-13  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-cfg.c (remove_unreachable_blocks): Clean up.
+ 	(debug_tree_bb_n): New.
+ 	(is_ctrl_structure): Remove LOOP_EXPR.
+ 	* tree-flow.h (debug_tree_bb_n): Declare.
+ 
+ 2003-09-12  Andrew Macleod  <amacleod@redhat.com>
+ 
+ 	* tree-ssa-live.c (calculate_live_on_entry): Use default_def to add
+ 	addition checks to live on entry calculations.
+ 	* tree-ssa.c (print_exprs_edge): New debug output function.
+ 	(coalesce_abnormal_edges): Add basic block information to output.
+ 	(coalesce_ssa_name): Use default_def instead of trying to compute live
+ 	on entry variables.
+ 
+ 2003-09-12  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-optimize.c (tree_rest_of_compilation): Set TREE_ASM_WRITTEN
+ 	for functions that have errors.
+ 
+ 2003-09-12  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-pre.c (graph_dump_file, graph_dump_flags): Remove
+ 	unused variables.
+ 
+ 2003-09-11  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (reset_down_safe): Make test less conservative.
+ 	(cba_search_start_from): Start from abnormal edge arguments, too.
+ 	(cba_search_continue_from_to): Ditto here.
+ 
+ 2003-09-11  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c: s/#if ENABLE_CHECKING/#ifdef ENABLE_CHECKING/g.
+ 	Add more comments to DFS searching functions.
+ 	(cba_search_reach_from_to): Remove empty function.
+ 	(code_motion): Remove #if 0'd code.
+ 	(pre_expression): Ditto.
+ 	* tree.h (tree_dump_index): Remove TDI_predot.
+ 	* tree-dump.c (dump_files): Ditto.
+ 
+ 2003-09-11  Jason Merrill  <jason@redhat.com>
+ 
+ 	Make EDGE_FALLTHRU meaningful for tree-cfg.
+ 	* tree-cfg.c (make_edges): Set EDGE_FALLTHRU on fallthrough edge.
+ 	(make_exit_edges): Likewise.
+ 	(make_ctrl_stmt_edges): Don't set EDGE_FALLTHRU on edges into a
+ 	control structure.
+ 	(handle_switch_fallthru): Clear EDGE_FALLTHRU after inserting a goto.
+ 	(find_insert_location): Only insert after a CALL_EXPR or MODIFY_EXPR.
+ 	(bsi_insert_on_edge_immediate): Count outgoing abnormal edges.
+ 	Insert before all control stmts.
+ 	(bsi_link_after): Handle a block with nops after the last stmt.
+ 
+ 	Rename some things to clarify difference between "control structures"
+ 	(i.e. COND_EXPR) and "control statements" (also GOTO_EXPR).
+ 	* basic-block.h (BB_CONTROL_STRUCTURE): Rename from BB_CONTROL_EXPR.
+ 	* tree-cfg.c (REMOVE_NON_CONTROL_STRUCTS): Rename from
+ 	REMOVE_NON_CONTROL_STMTS.
+ 	(REMOVE_CONTROL_STRUCTS): Rename from REMOVE_CONTROL_STMTS.
+ 	(make_ctrl_stmt_edges): Move GOTO_EXPR/RETURN_EXPR handling here...
+ 	(make_exit_edges): ...from here.
+ 	(is_ctrl_altering_stmt): Don't accept GOTO_EXPR/RETURN_EXPR.
+ 	(is_ctrl_structure): Renamed from old is_ctrl_stmt.
+ 	(is_ctrl_stmt): New fn.
+ 	(bsi_move_to_bb_end): Use it.
+ 	(stmt_starts_bb_p): Use is_ctrl_stmt and is_ctrl_altering_stmt.
+ 	* tree-flow.h: Add prototype.
+ 	* tree-ssa-ccp.c, tree-ssa-dom.c: Update for name changes.
+ 
+ 2003-09-10  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (ephi_has_bottom): Remove dead function.
+ 	(ephi_has_unsafe_arg): New function.
+ 	(compute_down_safety): Use it.
+ 	(reset_down_safe): Continue search on abnormal edges, too.
+ 
+ 2003-09-10  Jason Merrill  <jason@redhat.com>
+ 
+ 	* gimplify.c (gimplify_asm_expr): Add post_p parm.
+ 	(get_initialized_tmp_var): Add post_p parm.
+ 	(internal_get_tmp_var): Likewise.
+ 	(gimplify_expr, get_formal_tmp_var): Pass it.
+ 	* c-simplify.c (gimplify_decl_stmt): Pass it.
+ 	* tree-simple.h: Adjust prototype.
+ 
+ 	* tree-cfg.c (make_call_expr_edges): Break out from...
+ 	(make_exit_edges): ...here.  Check TREE_NOTHROW.
+ 	(is_ctrl_altering_stmt): Check TREE_NOTHROW.
+ 
+ 2003-09-10  Paul Brook  <paul@nowt.org>
+ 
+ 	* gimplify.c (gimplify_compound_lval): Treat REALPART_EXPR and
+ 	IMAGPART_EXPR the same as COMPONENT_REF.
+ 	* tree-simple.c (is_gimple_addr_expr_arg): Ditto.
+ 	(is_gimple_lvalue): Remove REALPART_EXPR and IMAGPART_EXPR.
+ 
+ 2003-09-10  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-pretty-print.c (decl_name_str): New local function.
+ 	(pp_c_direct_declarator): Call it.
+ 	(pp_c_primary_expression): Call it.
+ 	(pp_c_id_expression): Call it.
+ 	(pp_c_statement): Call it.
+ 
+ 2003-09-10  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-pretty-print.c (dump_generic_node): Change string used to
+ 	display _DECL nodes with no DECL_NAME.
+ 
+ 2003-09-10  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (add_referenced_var): Handle cases when argument
+ 	walk_state is NULL.
+ 	(add_referenced_tmp_var): New function.
+ 	* tree-flow.h (add_referenced_tmp_var): Declare it.
+ 	* tree-ssa-pre.c (pre_expression): Call it.
+ 	* tree-ssa-live.c (create_ssa_var_map): Add checking for variables
+ 	being in real and virtual operands.
+ 
+ 2003-09-01  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 	    Jeff Law  <law@redhat.com>
+ 
+ 	* tree-flow.h (remove_unreachable_blocks): Declare.
+ 	* tree-cfg.c (remove_unreachable_blocks): Export. Return true
+ 	if blocks were removed.
+ 	* tree-ssa-dom.c (optimize_block, optimize_stmt): Record whether
+ 	the cfg has changed.  Schedule jump threading.  If a block
+ 	has more than one pred, then do not record equivalences created
+ 	by a controlling COND_EXPR.
+ 	(edges_to_redirect, redirection_targets): New variables.
+ 	(thread_edge): Split out of optimize_block.
+ 	(tree_ssa_dominator_optimize); Remove unreachable blocks and
+ 	recompute dominator tree when the cfg changes.
+ 
+ 2003-09-07  Steven Bosscher  <steven@gcc.gnu.org>
+ 
+ 	* c-tree.h: Don't declare c_genericize, it's already
+ 	declared in c-common.h.
+ 
+ 2003-09-07  Steven Bosscher  <steven@gcc.gnu.org>
+ 
+ 	Fix PR optimization/12198
+ 	* tree-cfg.c (value_matches_some_label): Handle integer
+ 	case ranges.
+ 
+ 2003-09-06  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-iterator.h (tsi_iterator_update): Added TSI_CHAIN_START,
+ 	TSI_CHAIN_END, TSI_CONTINUE_LINKING and comments.
+ 	(tsi_link_chain_before, tsi_link_chain_after): Declare.
+ 	* tree.c (tsi_link_chain_before, tsi_link_chain_after): New.
+ 	(tsi_link_before, tsi_link_after): Handle new TSI_...
+ 	positions.
+ 
+ 2003-09-06  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* varray.c (element): Add entry for 'tree *'.
+ 	* varray.h (enum varray_data_enum): Add VARRAY_DATA_TREE_PTR.
+ 	(union varray_data_tag): Add entry for 'tree *'.
+ 	(VARRAY_TREE_PTR_INIT): Define.
+ 	(VARRAY_TREE_PTR): Define.
+ 	(VARRAY_PUSH_TREE_PTR): Define.
+ 	(VARRAY_TOP_TREE_PTR): Define.
+ 	* tree-cfg.c: Replace uses of VARRAY_GENERIC_PTR with
+ 	VARRAY_TREE_PTR when accessing operand arrays.
+ 	* tree-ssa-ccp.c: Likewise.
+ 	* tree-ssa-copyprop.c: Likewise.
+ 	* tree-ssa-dce.c: Likewise.
+ 	* tree-ssa-dom.c: Likewise.
+ 	* tree-ssa-live.c: Likewise.
+ 	* tree-ssa-pre.c: Likewise.
+ 	* tree-dfa.c: Likewise.
+ 	* tree-ssa.c: Likewise.
+ 	* tree-flow.h (struct operands_d): Remove 'skip' GC markers from
+ 	all fields.
+ 	(struct dataflow_d): Likewise.
+ 
+ 2003-09-05  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (find_referenced_vars): Re-enable .GLOBAL_VAR
+ 	optimization.
+ 
+ 2003-09-05  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree.h (tree_eref_common): Make stmt a tree, not a tree *.
+ 	* tree-ssa-pre.c: Transform all tree *'s to tree.
+ 
+ 2003-09-05  Paul Brook  <paul@nowt.org>
+ 
+ 	* tree.h (enum tree_index): Delete TI_SIGNED_SIZE_TYPE here.
+ 	(signed_size_type_node): No longer a member of global_trees.
+ 	* c-common.h (enum c_tree_index): New member CTI_SIGNED_SIZE_TYPE.
+ 	(signed_size_type_node): Moved, now a member of c_global_trees.
+ 
+ 2003-09-05  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (find_referenced_vars): Temporarily disable
+ 	.GLOBAL_VAR optimization.
+ 
+ 2003-09-04  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-alias-common.c:  Add overview.
+ 	* tree-alias-ander.c: Add overview and more specific comments on what
+ 	each function does.
+ 
+ 2003-09-04  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-optimize.c (tree_rest_of_compilation): Return if errorcount
+ 	or sorrycount are non-zero.
+ 
+ 2003-09-04  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-cfg.c (cleanup_tree_cfg): Traverse basic blocks
+ 	with FOR_EACH_BB.
+ 	(remove_useless_stmts_and_vars): Likewise.
+ 	* tree-ssa-dom.c (tree_ssa_dominator_optimize): Likewise.
+ 	* tree-ssa.c (rewrite_into_ssa): Likewise.
+ 	* tree-dfa.c (remove_all_phi_nodes_for): Make sure that the new
+ 	list of PHI nodes is NULL-terminated.
+ 	Add sanity checks to make sure all the PHI nodes for variables to
+ 	rename are gone.
+ 
+ 2003-09-04  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (struct walk_state): Add field 'num_calls'.
+ 	(add_call_clobber_ops): New local function.
+ 	(add_call_read_ops): New local function.
+ 	(get_expr_operands): Call them.
+ 	(add_stmt_operand): Call-clobbered variables are always added to
+ 	virtual operands.
+ 	(find_referenced_vars): If the number of call-clobbered variables
+ 	and number of call sites is larger than a certain threshold, group
+ 	all call-clobbered variables under .GLOBAL_VAR.
+ 	(find_vars_r): Count the number of call sites.
+ 	Don't add .GLOBAL_VAR to the list of referenced variables.
+ 	(add_referenced_var): If the addressable variable is an array,
+ 	register alias set of the type of the elements, not the type of the
+ 	array.
+ 	* tree-ssa-dom.c (mark_new_vars_to_rename): Rename from
+ 	find_new_vars_to_rename.  Update all users.
+ 	Before scanning the statement for new operands, mark the existing
+ 	virtual operands to be renamed again.
+ 	(optimize_stmt): Also check for newly exposed variables when doing
+ 	redundancy elimination.
+ 	* tree-ssa.c (rewrite_into_ssa): Don't abort when rename_count is
+ 	greater than 2.  Simply stop trying at 3.
+ 	(prepare_operand_for_rename): New function.
+ 	(mark_def_sites): Call it.
+ 	(rewrite_stmt): Don't check if the operand is an SSA_NAME before
+ 	calling rewrite_operand.
+ 	(rewrite_operand): Don't abort if the operand was already an
+ 	SSA_NAME.  Ignore it.
+ 
+ 2003-09-03  Richard Henderson  <rth@redhat.com>
+ 
+ 	* tree-optimize.c (set_save_expr_context, clear_decl_rtl,
+ 	tree_rest_of_compilation): Merge from mainline new file.
+ 	* Makefile.in (tree-optimize.o): Update.
+ 	* c-semantics.c (expand_stmt_toplev): New.
+ 	* c-common.h (expand_stmt_toplev): Declare.
+ 	* c-lang.c, objc/objc-lang.c (LANG_HOOKS_RTL_EXPAND_STMT): Use it.
+ 
+ 2003-09-03  Richard Henderson  <rth@redhat.com>
+ 
+ 	* gimplify.c (gimplify_switch_expr): Leave the outermost cast
+ 	as part of the switch condition.
+ 
+ 2003-09-02  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (tree.o): Add dependency on $(BASIC_BLOCK_H) and
+ 	$(TREE_FLOW_H)
+ 	* tree.c: Include basic-block.h and tree-flow.h
+ 	(tsi_link_after): Adjust basic block tree pointers when inserting a
+ 	new COMPOUND_EXPR.
+ 
+ 2003-09-02  Richard Henderson  <rth@redhat.com>
+ 
+ 	* c-decl.c (finish_function): Fix misapplied patch.  Don't
+ 	free_after_parsing or free_after_compilation.  For real this time.
+ 
+ 2003-09-01  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (finalize_1):  Remove unnecessary call to
+ 	insert_euse_in_preorder_dt_order.
+ 	(code_motion): Ditto.
+ 	(pre_expression): Ditto.
+ 
+ 2003-09-01  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 	    Jeff Law  <law@redhat.com>
+ 
+ 	* basic-block.h (BB_LOOP_CONTROL_EXPR): Remove.
+ 	* c-simplify.c (gimplify_c_loop): Create loops in a better shape.
+ 	* cfgloop.h (create_loop_notes): Declare.
+ 	* cfgloopmanip.c (create_loop_notes): New.
+ 	* explow.c (probe_stack_range): Don't produce loop notes when we
+ 	recreate them.
+ 	* expr.c (emit_block_move_via_loop): Ditto.
+ 	* gimplify.c (build_and_jump): Export.
+ 	(gimplify_loop_expr): Don't produce LOOP_EXPRs.
+ 	* toplev.c (rest_of_compilation): Recreate loop notes if needed.
+ 	* tree-cfg.c (make_loop_expr_edges, make_loop_expr_blocks): Removed.
+ 	(find_contained_blocks, make_ctrl_stmt_edges,
+ 	remove_useless_stmts_and_vars, stmt_ends_bb_p, bsi_insert_before,
+ 	find_insert_location, bsi_insert_on_edge_immediate,
+ 	merge_tree_blocks): Remove handling of LOOP_EXPRs.
+ 	(remove_stmt): Remove handling of BB_LOOP_CONTROL_EXPR.
+ 	(find_taken_edge): Remove comment on LOOP_EXPRs.
+ 	(dump_tree_bb): Don't dump loop-related information.
+ 	(is_loop_stmt, is_latch_block_for): Removed.
+ 	(find_insert_location): Handle TRY_CATCH and TRY_FINALLY.
+ 	* tree-flow.h (is_loop_stmt, loop_body, set_loop_body,
+ 	is_latch_block_for): Removed.
+ 	* tree-dfa.c (get_stmt_operands): Don't handle LOOP_EXPRs.
+ 	* tree-simple.c (is_gimple_stmt): Remove handling of LOOP_EXPRs.
+ 	* tree-simple.h: Remove LOOP_EXPRs from gimple grammar comment.
+ 	(build_and_jump): Declare.
+ 	* tree-ssa.c (remove_annotations_r): Don't handle LOOP_EXPRs.
+ 
+ 2003-08-29  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* opts.c (decode_options): Turn on SSAPRE by default.
+ 
+ 2003-08-29  Jason Merrill  <jason@redhat.com>
+ 
+ 	* builtins.c (simplify_builtin): Make sure that the replacement
+ 	has the same type as the original expression.
+ 	(simplify_builtin_strpbrk): Fix type of COMPOUND_EXPR.
+ 	(simplify_builtin_strncpy, simplify_builtin_memcmp): Likewise.
+ 	(simplify_builtin_strncmp, simplify_builtin_strncat): Likewise.
+ 	(simplify_builtin_strspn, simplify_builtin_strcspn): Likewise.
+ 	(simplify_builtin_fputs, simplify_builtin_sprintf): Likewise.
+ 
+ 2003-08-28  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* builtins.c (expand_builtin): Expand BUILT_IN_STACK_SAVE and
+ 	BUILT_IN_STACK_RESTORE.
+ 	* builtins.def (BUILT_IN_STACK_SAVE, BUILT_IN_STACK_RESTORE): New.
+ 	* gimplify.c (build_stack_save_restore): New functions.
+ 	(struct gimplify_ctx): New field save_stack.
+ 	(gimplify_bind_expr, gimplify_call_expr): Arrange save of stack on
+ 	BIND_EXPR entry and restore on exits.
+ 	* stmt.c (expand_stack_alloc): Saving of stack removed.
+ 	(expand_stack_save, expand_stack_restore): New.
+ 	* tree.h (expand_stack_save, expand_stack_restore): Declare.
+ 
+ 2003-08-28  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (add_vdef): Check for duplicate voperands first.
+ 	Handle SSA_NAME in voperands.
+ 	(add_vuse): Likewise.
+ 
+ 2003-08-27  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-flow.h (var_ann_d): Convert is_in_va_arg_expr into a
+ 	bitfield.
+ 
+ 2003-08-27  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c: Update comments to reflect reality.
+ 	(insert_one_operand): Remove #if'0d code.
+ 
+ 2003-08-27  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* gcov.c (typedef struct arc_info): New field cs_count.
+ 	(accumulate_line_counts): Find cycles correctly.
+ 
+ 2003-08-27  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (compute_du_info): Move #if ENABLE_CHECKING up one
+ 	line.
+ 
+ 2003-08-27  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree.h (struct ephi_arg_d): New structure.
+ 	(struct eref_common): Remove non-used members, move some members
+ 	elsewhere.
+ 	(struct ephi_node): Ditto.
+ 
+ 	* tree-optimize.c (optimize_function_tree): Move PRE before DCE.
+ 
+ 	* tree.c (tree_size): use sizeof (struct ephi_arg_d) for ephi's.
+ 
+ 	* tree-pretty-print.c (dump_generic_node): Re-teach to pretty
+ 	print euses/ephis/etc given new structures, members, and
+ 	relationships.
+ 
+ 	* tree-ssa-pre.c (fixup_domchildren): Removed.
+ 	(a_dom_b): Ditto.
+ 	(calculate_preorder): Ditto.
+ 	(defs_match_p): Ditto.
+ 	(defs_y_dom_x): Ditto.
+ 	(compute_can_be_avail): Ditto.
+ 	(reset_can_be_avail): Ditto.
+ 	(reset_later): Ditto.
+ 	(compute_later): Ditto.
+ 	(repair_*): Ditto.
+ 	(set_replacement): Ditto.
+ 	(remove_ephi): Ditto.
+ 	(set_expruse_def): Ditto.
+ 	(occ_compare): Ditto.
+ 	(defs_hash_expr): Ditto.
+ 	(compute_dt_preorder): Ditto
+ 	(search_dt_preorder): Ditto.
+ 	(ephi_operand_for_pred): Ditto.
+ 	(injured_ephi_operand): Ditto.
+ 	(compute_stops): New function.
+ 	(occ_identical_to): Ditto.
+ 	(require_phi): Ditto.
+ 	(do_ephi_df_search_1): Ditto.
+ 	(do_ephi_df_search): Ditto.
+ 	(any_operand_injured): Ditto.
+ 	(compute_du_info): Ditto.
+ 	(add_ephi_use): Ditto.
+ 	(insert_one_operand): Ditto.
+ 	(add_ephi_pred): Ditto.
+ 	(created_phi_preds): New bitmap.
+ 	(dfn) Removed static variable.
+ 	(idom_of_ephi): Ditto.
+ 	(avdefs): Move into expr_info).
+ 	(struct ephi_use_entry): New structure for EPHI uses.
+ 	(struct ephi_df_search): New structure for depth first searchs.
+ 	(cant_be_avail_search): Implementation of structure for
+ 	cant_be_avail search.
+ 	(stops_search): Ditto for stops.
+ 	(replacing_search): Ditto for replacing_search.
+ 	(do_proper_save): Arguments changed, callers updated.
+ 	(create_ephi_node): Use sizeof (struct ephi_arg_d).
+ 	(ephi_has_bottom): Rewrite for updated ephi-pred handling.
+ 	(ephi_will_be_avail): Rewrite in terms of CANT_BE_AVAIL and STOPS.
+ 	(expr_phi_insertion): Remove dead code.
+ 	Update for new flags.
+ 	(insert_occ_in_preorder_dt_order_1): Only insert one ephi-pred per
+ 	block.
+ 	Fix exit occurence handling.
+ 	(rename_1): Remove occs stuff.
+ 	Update for new ephi-pred handling.
+ 	(reset_down_safe): Update for new ephi-pred handling.
+ 	(compute_down_safe): Ditto.
+ 	(can_insert): Ditto.
+ 	(insert_one_operand): Split out from finalize_1.
+ 	(finalize_1): Update for new ephi-pred handling.
+ 	Only insert non-pointless, will-be-avail phis, rather than *all*
+ 	ephis.
+ 	(get_temp): New function. Hand us the right temporary for a given
+ 	EPHI/EUSE.
+ 	(code_motion): Use EREF_TEMP again, now that we can do it
+ 	properly.
+ 
+ 2003-08-26  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* builtins.c (expand_builtin): Handle STACK_ALLOC.
+ 	* builtins.def (BUILT_IN_STACK_ALLOC): New.
+ 	* c-simplify.c (gimplify_decl_stmt, c_gimplify_stmt,
+ 	gimplify_compound_literal_expr): Arrange explicit stack allocation.
+ 	* expr.c (expand_expr): Handle deferred variables.
+ 	* stmt.c (expand_stack_alloc): New.
+ 	* tree-simple.c (is_gimple_val): Prevent ADDR_EXPRs of vla's from
+ 	being reduced.
+ 	* tree.h (expand_stack_alloc): Declare.
+ 
+ 2003-08-26  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-ssa.c (build_dominator_tree): Use FOR_EACH_BB.
+ 
+ 2003-08-26  Jason Merrill  <jason@redhat.com>
+ 
+ 	* tree-simple.c (is_gimple_val): Also disallow memory vars.
+ 
+ 2003-08-25  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* integrate.c (copy_decl_for_inlining): Reset DECL_TOO_LATE.
+ 
+ 2003-08-25  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-ssa-dom.c (optimize_block): Handle empty source block.
+ 
+ 	* tree-ssa-dom.c (optimize_block):  Handle case when dominance
+ 	tree children have also other sucessors.  Add dump to jump
+ 	threading.
+ 
+ 2003-08-25  Jason Merrill  <jason@redhat.com>
+ 
+ 	* c-simplify.c (mark_labels_r): New fn.
+ 	(gimplify_decl_stmt): Use it to mark labels in static initializers.
+ 	* tree-simple.c (is_gimple_initializer): Remove.
+ 	(is_gimple_reg_type): New fn.
+ 	(is_gimple_reg): Use it.  Handle SSA_NAMEs properly.
+ 	* tree-simple.h: Adjust.
+ 	* gimplify.c (gimplify_expr) <CONSTRUCTOR>: Do nothing here.
+ 
+ 	* gimplify.c (create_tmp_var): Set DECL_IGNORED_P.
+ 
+ 	* tree-inline.c (initialize_inlined_parameters): Improve error
+ 	recovery.
+ 
+ 	* gimplify.c (gimplify_boolean_expr): Just replace with a COND_EXPR.
+ 
+ 2003-08-25  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (get_expr_operands): Don't create shared operands when
+ 	folding *&VAR expressions.
+ 
+ 2003-08-24  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-flow.h (struct var_ann_d): Add field default_def.
+ 	(widen_bitfield): Declare.
+ 	(set_default_def): Declare.
+ 	(default_def): Declare.
+ 	* tree-flow-inline.h (set_default_def): New inline function.
+ 	(default_def): New inline function.
+ 	* tree-dfa.c (dump_variable): Display default_def, if set.
+ 	* tree-simple.c (is_gimple_reg): Check for DECL_P before checking
+ 	for DECL_EXTERNAL.
+ 	* tree-ssa-dom.c (add_expr_propagated_p): Remove.  Update all
+ 	users.
+ 	(find_new_vars_to_rename): New local function.
+ 	(tree_ssa_dominator_optimize): Add new argument vars_to_rename.
+ 	Change return type to void.  Update all users.
+ 	(optimize_block): Add new argument vars_to_rename.  Update all
+ 	users.
+ 	If the call to optimize_stmt returns true, add the statement to the
+ 	list of statements to re-scan for operands.
+ 	After optimizing the block and its dominator children, call
+ 	find_new_vars_to_rename for every statement that may have had new
+ 	symbols exposed.
+ 	(optimize_stmt): Change return type to bool.  Return true if the
+ 	statement may have had new symbols exposed by optimization.
+ 	Add a sanity check for the value returned by lookup_avail_expr.
+ 	Create equivalences for more memory stores, not just the ones done
+ 	via INDIRECT_REF expressions.
+ 	Call widen_bitfield when optimizing stores to bitfields.
+ 	(lookup_avail_expr): Reformat comment.
+ 	* tree-ssa.c (rewrite_into_ssa): Remove local variable
+ 	addr_expr_propagated_p.
+ 	Clear out vars_to_rename before running dominator optimizations.
+ 	(check_for_new_variables): Remove.
+ 	(rewrite_stmt): Always register new definitions and virtual
+ 	definitions.
+ 	(register_new_def): Update comment.
+ 	(get_reaching_def): Update the default_def field for the variable
+ 	if it didn't have a reaching definition.
+ 	* tree-ssa-ccp.c (widen_bitfield): Declare it extern.
+ 
+ 2003-08-23  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-cfg.c (bsi_next_in_bb): Work correctly when the block ends
+ 	with start of BIND_EXPR.
+ 
+ 2003-08-23  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-alias-ander.c (andersen_op_assign): Fix to join the operands,
+ 	the assign to the lhs.
+ 
+ 2003-08-23  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-alias-common.c (get_alias_var): Remove REFERENCE_EXPR.
+ 	(find_func_aliases): Fix some not quite right predicates, add ARRAY_REF
+ 	handling.
+ 
+ 2003-08-22  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-dfa.c (compute_alias_sets): A memory tag used for stores can
+ 	not conflict with objects marked TREE_READONLY.
+ 
+ 	* tree-ssa-ccp.c (fold_stmt): Optimize reads from constant strings.
+ 
+ 2003-08-22  Jason Merrill  <jason@redhat.com>
+ 
+ 	* tree-simple.c: Total overhaul to only check forms and remove
+ 	unnecessary predicates.
+ 	(is_gimple_const): Accept function addresses here.
+ 	Don't accept LABEL_DECL or RESULT_DECL.
+ 	(is_gimple_val): Accept EXC_PTR_EXPR here.
+ 	(is_gimple_lvalue): Rename from is_gimple_modify_expr_lhs.
+ 	Accept BIT_FIELD_REF, REALPART_EXPR and IMAGPART_EXPR here.
+ 	(is_gimple_addr_expr_arg): Replace with former is_gimple_varname.
+ 	(is_gimple_constructor_elt): Just check for CONSTRUCTOR.
+ 	(is_gimple_initializer): Just hand off to is_gimple_rhs.
+ 	(is_gimple_rhs): Recognize most expressions here.
+ 	(is_gimple_variable): New fn.
+ 	(is_gimple_id): Use it.  Now static.
+ 	(is_gimple_reg): New fn.
+ 	(is_gimple_cast): Replace with former is_gimple_cast_op.
+ 	(is_gimple_constructor, is_gimple_expr): Remove.
+ 	(is_gimple_modify_expr, is_gimple_relop): Remove.
+ 	(is_gimple_binary_expr, is_gimple_unary_expr): Remove.
+ 	(is_gimple_call_expr, is_gimple_arglist): Remove.
+ 	(is_gimple_compound_lval, is_gimple_arrayref): Remove.
+ 	(is_gimple_compref, is_gimple_exprseq): Remove.
+ 	(is_gimplifiable_builtin): Remove.
+ 	* tree-simple.h: Adjust.
+ 	* gimplify.c (gimplify_conversion): Break out from gimplify_expr.
+ 	(gimplify_expr): Use is_gimple_reg predicate to force a temp.
+ 	<COMPONENT_REF>: Use gimplify_compound_lval.
+ 	<REALPART_EXPR, IMAGPART_EXPR>: Likewise.
+ 	<INDIRECT_REF>: Use is_gimple_reg predicate.
+ 	<MIN_EXPR, MAX_EXPR>: Use new gimplify_minimax_expr.
+ 	<TREE_LIST>: Reject.
+ 	(gimplify_tree_list, gimplify_component_ref): Remove.
+ 	(gimplify_compound_lval): Include REALPART_EXPR and IMAGPART_EXPR.
+ 	(gimplify_component_ref): Remove.
+ 	(gimplify_call_expr): Handle non-gimplifiable builtins and walking
+ 	the argument list here.
+ 	(gimplify_tree_list): Remove.
+ 	(gimplify_addr_expr): Use fb_either.
+ 	* tree-simple.h: Adjust.
+ 	* tree-alias-common.c (find_func_aliases): Update use of predicates.
+ 
+ 2003-08-21  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* tree-ssa.c (tree_ssa_useless_type_conversion): Check also the
+ 	precision of the type to make sure they are really useless type
+ 	conversions.
+ 
+ 2003-08-21  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dump.c (dequeue_and_dump): Handle 'r' and 's' code classes.
+ 
+ 2003-08-21  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* c-pretty-print.c (print_c_tree): Create new pp object.
+ 
+ 2003-08-21  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-ssa-dom.c (tree_ssa_dominator_optimize): Don't free hash tables
+ 	before statistics are made from them.
+ 	* tree-ssa.c (rewrite_into_ssa): Ditto.
+ 
+ 2003-08-21  Jason Merrill  <jason@redhat.com>
+ 
+ 	* tree-inline.c (copy_body_r): Don't convert when stripping &*.
+ 	Fix thinko in stripping *&.
+ 
+ 2003-08-21  Diego Novillo  <dnovillo@redhat.com>
+ 	    Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-cfg.c (stmt_starts_bb_p): Nonlocal and computed GOTO targets
+ 	always start a new block.
+ 
+ 2003-08-20  Jason Merrill  <jason@redhat.com>
+ 
+ 	* tree-pretty-print.c (dump_generic_node): Just print "<retval>"
+ 	for the RESULT_DECL.
+ 
+ 	* c-simplify.c (make_type_writable, mostly_copy_tree_r): Remove.
+ 	(deep_copy_list, deep_copy_node): Remove.
+ 
+ 	* expr.c (expand_expr): Don't check for 'r' or 's' if we're
+ 	checking IS_EXPR_CODE_CLASS.
+ 	* tree-dfa.c (may_access_global_mem_p): Likewise.
+ 	* tree-browser.c (browse_tree): Likewise.
+ 	* tree-ssa-pre.c (defs_hash_expr): Likewise.
+ 	* gimplify.c (gimplify_expr): Likewise.
+ 	(internal_get_tmp_var): Only copy TREE_LOCUS from an expr.
+ 	(mostly_copy_tree_r): Ignore decls here.
+ 
+ 2003-08-20  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-pretty-print.c: Discard.  Replace with same file from
+ 	mainline.  Update all users.
+ 	(print_c_tree): New function.
+ 	* c-pretty-print.h (print_c_tree): Declare.
+ 	* tree-pretty-print.c: Update to use new pp_* primitives.
+ 	* c-simplify.c: Include c-pretty-print.h.
+ 	* Makefile.in (c-simplify.o): Add dependency on $(C_PRETTY_PRINT_H).
+ 
+ 2003-08-20  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* c-common.h (enum c_tree_index): Delete CTI_SIGNED_SIZE_TYPE.
+ 	(signed_size_type_node): No longer a member of c_global_trees.
+ 	* tree.h (enum tree_index): New member TI_SIGNED_SIZE_TYPE here.
+ 	(signed_size_type_node): Moved, now a member of global_trees.
+ 
+ 2003-08-20  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-ssa-dom.c (optimize_block): Thread jump into empty
+ 	block correctly.
+ 
+ 	* tree-cfg.c (linearize_cond_expr): Don't merge blocks if the
+ 	later has other predecessors.
+ 
+ 2003-08-19  Jason Merrill  <jason@redhat.com>
+ 
+ 	* c-typeck.c (build_array_ref): Also build ARRAY_REFs from
+ 	INDIRECT_REFs of ARRAY_TYPE.
+ 
+ 	* tree-ssa.c (tree_ssa_useless_type_conversion): Also strip
+ 	conversions between pointer and reference types.
+ 
+ 	* tree-dfa.c (get_stmt_operands): Just mark non-GIMPLE statements
+ 	as unmodified.
+ 	(find_referenced_vars): So we don't need to mark them here.
+ 
+ 	* tree-inline.c (inline_data): Add retvar field.
+ 	(declare_return_variable): Set it.
+ 	(remap_decls): Use it.
+ 	(expand_call_inline): Tweak.
+ 
+ 2003-08-19  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* cfg.c (dump_edge_info): Add name for EDGE_LOOP_EXIT flag.
+ 
+ 2003-08-19  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-flow.h (struct var_ann_d): New field scope.
+ 	(struct stmt_ann_d): New field scope.
+ 	(propagate_copy): Declaration changed.
+ 	(fixup_var_scope): Declare.
+ 	* tree-cfg.c (make_blocks, make_cond_expr_blocks,
+ 	make_catch_expr_blocks, make_eh_filter_expr_blocks,
+ 	make_try_expr_blocks, make_loop_expr_blocks, make_switch_expr_blocks,
+ 	make_bind_expr_blocks, build_tree_cfg): Assign variables and statements
+ 	to scopes.
+ 	(assign_vars_to_scope): New.
+ 	* tree-ssa-copyprop.c (move_var_to_scope): New.
+ 	(copyprop_stmt): Pass scope of statement to propagate_copy.
+ 	(propagate_copy): Assign variable to the right bind_expr.
+ 	(fixup_var_scope): New.
+ 	* tree-ssa-dom.c (optimize_stmt): Pass scope of statement to
+ 	propagate_copy.
+ 
+ 2003-08-19  Daniel Berlin <dberlin@dberlin.org>
+ 
+ 	* tree-cfg (bsi_move_after): New function.
+ 	(bsi_move_before): New function.
+ 	(bsi_move_to_bb_end): New function.
+ 	* tree-flow.h: Prototype new functions.
+ 
+ 2003-08-18  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-alias-ander.c: Remove doxygen markers.
+ 	(eq_to_var): remove.
+ 	(simple_cmp): Add.
+ 	(throwaway_global): Add.
+ 	(andersen_same_points_to_set): Handle ignoring global var aliasing the
+ 	right way here.
+ 	(andersen_may_alias): Use list_member to avoid stupid hack.
+ 	* tree-alias-common.c: Remove hacks for disabling global var aliasing.
+ 
+ 2003-08-17  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree.c (resize_phi_node): Initialize new entries.
+ 
+ 2003-08-17  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-pretty-print.c (last_bb): Actually record the basic block,
+ 	not just its index.
+ 	(maybe_init_pretty_print): Corresponding changes.
+ 	(dump_generic_node, dump_vops): Test the actual block pointers, not
+ 	their indices.
+ 
+ 	* tree-ssa-dom.c (optimize_block): Use equivalences from the
+ 	dominator tree walk to thread through conditional jumps at leafs in
+ 	the dominator tree.
+ 
+ 	* tree-cfg.c (blocks_unreachable_p, remove_blocks): Use a bitmap
+ 	rather than a varray.
+ 	(REMOVE_ALL_STMTS, REMOVE_NO_STMTS): New defines for remove_bb.
+ 	(REMOVE_NON_CONTROL_STMTS, REMOVE_CONTROL_STMTS): Likewise.
+ 	(remove_unreachable_block): Use find_contained_blocks rather
+ 	than find_subblocks.  If we have a COND_EXPR or SWITCH_EXPR which
+ 	is unreachable, but which has reachable children clear out the
+ 	condition and request all non-control statements be removed
+ 	from the block.
+ 	(remove_bb): Allow better control over what (if any) statements
+ 	are removed.  All callers updated.
+ 	(find_subblocks): Remove.
+ 	(find_contained_blocks): Handle statements with no associated
+ 	basic block.
+ 
+ 2003-08-15  Andrew Pinski <pinskia@physics.uc.edu>
+ 
+ 	* objc/objc-lang.c (LANG_HOOKS_GIMPLIFY_EXPR): Define
+ 	as the c gimplifier.
+ 
+ 2003-08-15  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-cfg.c (cleanup_tree_cfg): Wipe out the dominator tree
+ 	if the number of basic blocks changes as a result of cfg cleanups.
+ 	* tree-flow.h (build_dominator_tree): Prototype.
+ 	* tree-ssa-dom.c (tree_ssa_dominator_optimize): Build the dominator
+ 	tree if it is not already available.
+ 	* tree-ssa.c (build_dominator_tree): New function.
+ 	(rewrite_into_ssa): Use it.
+ 
+ 	* gimplify.c (gimplify_expr, cases NOP_EXPR, CONVERT_EXPR): If a
+ 	COMPONENT_REF is wrapped with a NOP_EXPR, then force the type of
+ 	the COMPONENT_REF to match the accessed field.  Strip away
+ 	unnecessary type conversions and handle the case where all type
+ 	conversions were removed.
+ 	(case ARRAY_REF, COMPONENT_REF): Indicate to gimplify_array_ref
+ 	and gimplify_component_ref if we want an lvalue or not.
+ 	(gimplify_array_ref, gimplify_component_ref): Pass new argument
+ 	WANT_LVALUE through to gimplify_compound_lval.
+ 	(gimplify_compound_lval): If we do not want an lvalue and the
+ 	toplevel COMPONENT_REF's type does not match its field's type,
+ 	then wrap the COMPONENT_REF in a NOP_EXPR and force the
+ 	COMPONENT_REF's type to match its field's type.
+ 	(gimplify_modify_expr): If the RHS is a CALL_EXPR and the LHS
+ 	is not a gimple temporary, then force the RHS through a gimple
+ 	temporary, even if the call can not throw.
+ 	(create_tmp_var): Make sure not to lose the type's attributes
+ 	for the new variable.
+ 	* tree-ssa.c (tree_ssa_useless_type_conversion): New function.
+ 	* tree-flow.h (tree_ssa_useless_type_conversion): Prototype.
+ 	* tree-ssa-dom.c (optimize_stmt): Use tree_ssa_useless_type_conversion.
+ 
+ 	* tree-cfg.c (remove_useless_stmts_and_vars): Catch more
+ 	useless statements created during the out-of-ssa pass.
+ 
+ 2003-08-14  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (optimize_block): Record equivalences created by
+ 	SWITCH_EXPRs.
+ 
+ 	* tree-ssa-dom.c (optimize_stmt): Allow optimizing the RHS of
+ 	a RETURN_EXPR which contains an optimizable MODIFY_EXPR.
+ 	(lookup_avail_expr): Corresponding changes.
+ 	(avail_expr_hash, avail_expr_eq): Likewise.
+ 
+ 	* tree-ssa-dom.c (optimize_stmt): Fix typo which prevented
+ 	stores with more than one VDEF from creating useful equivalences.
+ 
+ 	* tree-dfa.c (get_expr_operands): Do not special case *0;
+ 
+ 	* fold-const.c (fold, case INDIRECT_REF): Revert last change.
+ 
+ 2003-08-14  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-cfg.c (bsi_insert_on_edge_immediate): Only update the
+ 	container for the head tree of the next block if the new statement
+ 	needs to be linked to it.
+ 
+ 2003-08-13  Jeff Law  <law@redhat.com>
+ 
+ 	* fold-const.c (fold, case INDIRECT_REF): Optimize reads from
+ 	constant strings.
+ 
+ 	* tree-cfg.c (remove_useless_stmts_and_vars): For a COND_EXPR
+ 	where the condition is a variable and the ELSE clause merely
+ 	sets that variable to zero, remove the ELSE clause.
+ 
+ 	* tree-ssa-dom.c (optimize_stmt): Do not check the type of the
+ 	value returned by lookup_avail_expr.
+ 
+ 2003-08-13  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-cfg.c (remove_stmt):  Add new argument saying whether to remove
+ 	annotations and invalidate defs.  Update all callers
+ 	(remove_bsi_from_block): Moved from bsi_remove, argument added.
+ 	(bsi_remove): Made into wrapper for remove_bsi_from_block.
+ 
+ 2003-08-13  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* tree-ssa-dom.c (optimize_stmt): Call get_stmt_operands.
+ 
+ 2003-08-12  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (optimize_stmt): Record equivalences created
+ 	by memory stores.
+ 
+ 2003-08-12  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-cfg.c (find_insert_location): Handle other control
+ 	statements that may be at the end of the block.
+ 
+ 2003-08-12  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* Makefile.in (tree-pretty-print.o): Add tree-iterator.h dependency.
+ 	* tree-pretty-print.c: Include tree-iterator.h.
+ 	(dump_generic_node): Avoid recursing into COMPOUND_EXPRs.
+ 
+ 2003-08-12  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (optimize_stmt): Optimize ABS_EXPR when we know
+ 	the sign of the source operand.
+ 
+ 	* tree-ssa-dom.c (optimize_stmt): Rewrite TRUNC_DIV_EXPR and
+ 	TRUNC_MOD_EXPR even if the LHS is not an SSA variable.  Do not
+ 	enter the new expression in the hash tables if !may_optimize_p.
+ 	Also try GE_EXPR to see if this transformation is safe.
+ 
+ 	* tree-ssa-dom.c (optimize_stmt): Fix typo in last change which
+ 	prevented recording equivalences created by IOR_EXPR.
+ 
+ 	* tree-ssa-dom.c (optimize_stmt): Record that the destination of
+ 	a MODIFY_EXPR nonzero if the RHS contains an IOR with a nonzero
+ 	constant.  Turn DIV/MOD by a power of 2 into SHIFT/AND if we know
+ 	dividend is positive.
+ 
+ 2003-08-11  Jeff Law  <law@redhat.com>
+ 
+ 	* fold-const.c (fold, cases NE_EXPR and EQ_EXPR): Fold equality
+ 	comparisons of non-weak symbol addresses against zero.
+ 
+ 	* tree-ssa-ccp.c (fold_stmt): Strip unnecessary NOP_EXPRs from
+ 	the folded result.
+ 
+ 	* gimplify.c (gimplify_expr, case INDIRECT_REF): Copy the base
+ 	object into a temporary if it's in static memory or is addressable.
+ 
+ 2003-08-11  Steven Bosscher  <steven@gcc.gnu.org>
+ 
+ 	* tree-alias-common.h (struct tree_alias_ops): Add a semicolon, fix
+ 	bootstrap.
+ 
+ 2003-08-10  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-dfa.c (compute_may_aliases): Move points-to initialization from
+ 	here.
+ 	(find_referenced_vars): To here.
+ 	(get_memory_tag_for): Use new same_points_to_set function.
+ 
+ 	* tree-alias-common.h (struct tree_alias_ops): Remove doxygen markers.
+ 	Add same_points_to_set function to struct.
+ 	(same_points_to_set): New function.
+ 
+ 	* tree-alias-common.c (we_created_global_var): A bit of magic to ignore
+ 	global var aliasing when we didn't create global var.  This will go
+ 	away soon
+ 	(same_points_to_set): New function.
+ 
+ 	* tree-alias-andersen.c (struct andersen_alias_ops): Add
+ 	andersen_same_points_to_set.
+ 	(andersen_same_points_to_set): New function. Return true if the two
+ 	variables have the same points-to set.
+ 
+ 	* opts.c (common_handle_option): Add "none" as a points-to option.
+ 
+ 2003-08-10  Paul Brook  <paul@nowt.org>
+ 
+ 	* doc/install.texi: Mention --enable-languages=f95.
+ 
+ 2003-08-09  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-pretty-print.c (dump_vops): check bb->tree_annotations, not
+ 	bb->aux.
+ 
+ 2003-08-08  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-cfg.c (bsi_insert_on_edge_immediate): If there's only
+ 	one statement in the block, and it's an empty statement, replace it.
+ 
+ 2003-08-08  Jason Merrill  <jason@redhat.com>
+ 
+ 	* c-decl.c (c_expand_body_1): Restore support for
+ 	!keep_function_tree_in_gimple_form.
+ 	(finish_function, c_expand_deferred_function): Do TDI_inlined dump.
+ 
+ 	* gimplify.c (voidify_wrapper_expr): Set TREE_SIDE_EFFECTS on the
+ 	wrapper if we insert a MODIFY_EXPR.
+ 
+ 2003-08-07  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (GTFILES): Add tree-ssa.c, tree-dfa.c and
+ 	tree-ssa-ccp.c.
+ 	(gt-tree-ssa.h, gt-tree-dfa.h, gt-tree-ssa-ccp.h): Depend on
+ 	s-gtype.
+ 	* tree-dfa.c (struct clobber_data_d): Remove.  Update all users.
+ 	(struct alias_map_d): Mark for garbage collection.
+ 	(struct walk_state): Add fields 'is_not_gimple' and
+ 	'is_va_arg_expr'.
+ 	(clobber_vars_r): Remove.  Update all users.
+ 	(get_stmt_operands): Abort if attempting to get operands from a
+ 	non-GIMPLE statement.
+ 	(get_expr_operands): Likewise.
+ 	Do not force a virtual operand when scanning VA_ARG_EXPR.
+ 	(add_stmt_operand): If the variable has hidden uses, mark the
+ 	statement as having volatile operands and return.
+ 	If the variable occurs inside a VA_ARG_EXPR, add it as a virtual
+ 	operand.
+ 	(add_immediate_use): Call VARRAY_TREE_INIT instead of
+ 	VARRAY_GENERIC_PTR_INIT.
+ 	(dump_variable): Check is_in_va_arg_expr flag.
+ 	(compute_may_aliases): Move code to find variables ...
+ 	(find_referenced_vars): ... here.
+ 	(find_vars_r): Abort if we find a non-GIMPLE expression
+ 	unexpectedly.
+ 	Mark variables found inside a VA_ARG_EXPR.
+ 	Do not scan arguments for non-GIMPLE CALL_EXPRs.
+ 	Remove local variable saved_is_store.
+ 	Reformat some code for readability.
+ 	(add_referenced_var): If the variable is already marked as having
+ 	hidden uses, ignore it.
+ 	If the variable is found inside a non-GIMPLE expression, mark it.
+ 	If the variable is found inside a VA_ARG_EXPR, mark it.
+ 
+ 	* tree-flow.h (struct var_ann_d): Add field is_in_va_arg_expr.
+ 	(find_referenced_vars): Declare.
+ 	* tree-optimize.c (optimize_function_tree): Call
+ 	find_referenced_vars before computing may aliases.
+ 
+ 	* tree-ssa-dce.c (need_to_preserve_store): Do not check if the
+ 	variable has hidden uses.
+ 	* tree-ssa-live.c (type_var_init): Likewise.
+ 
+ 	* tree-ssa-ccp.c (ssa_edges): Mark for garbage collection.
+ 	(tree_ssa_ccp): Use VARRAY_.*_EDGE calls to manipulate the varray
+ 	of CFG edges.
+ 	(add_control_edge): Likewise.
+ 	(initialize): Likewise.
+ 	* tree-ssa.c (struct def_blocks_d): Mark for garbage collection.
+ 	(struct var_value_d): Likewise.
+ 	(def_blocks_free): Remove.  Update all users.
+ 	(rewrite_into_ssa): Do not specify free function when creating
+ 	def_blocks and currdefs.
+ 	Call sbitmap_free instead of free.
+ 	(mark_def_sites): Call sbitmap_free instead of free.
+ 	(set_def_block): Use GC allocation.
+ 	(set_livein_block): Likewise.
+ 	(insert_phi_nodes): Adjust name of varray def_maps when creating it.
+ 	(insert_phis_for_deferred_variables): Remove call to BITMAP_XFREE.
+ 	(insert_phi_nodes_for): Use GC allocation for phi_insertion_points.
+ 	(init_tree_ssa): Remove typecast in call to memset.
+ 	(set_value_for): Use GC allocation.
+ 	(get_def_blocks_for): Remove typecast in call to htab_find.
+ 	* varray.c (element): Add entry for struct edge_def *.
+ 	* varray.h (enum varray_data_enum): Add VARRAY_DATA_EDGE.
+ 	(union varray_data_tag): Add field of type struct edge_def *.
+ 	(VARRAY_EDGE_INIT): Define.
+ 	(VARRAY_EDGE): Define.
+ 	(VARRAY_PUSH_EDGE): Define.
+ 	(VARRAY_TOP_EDGE): Define.
+ 
+ 2003-08-06  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-cfg.c (handle_switch_fallthru): Do not abort when the last
+ 	statement of the case block needs to be the last statement of the
+ 	block.
+ 	(find_insert_location): Fix typo.
+ 
+ 2003-08-06  Steven Bosscher  <steven@gcc.gnu.org>
+ 
+ 	* tree-dfa.c (remove_phi_arg):  When the PHI no longer has
+ 	arguments, don't remove it here, but do so...
+ 	(remove_phi_arg_num): ...from here.
+ 
+ 2003-08-05  Jason Merrill  <jason@redhat.com>
+ 
+ 	* gimplify.c (gimplify_cond_expr): Gimplify shortcut expansion in
+ 	a conditional context.
+ 
+ 	* tree-cfg.c (make_catch_expr_blocks): Don't change next_block_link.
+ 	(make_eh_filter_expr_blocks): Likewise.
+ 
+ 	* tree-dfa.c (add_referenced_var): Static locals are call
+ 	clobbered.
+ 
+ 2003-08-05  Steven Bosscher  <steven@gcc.gnu.org>
+ 
+ 	* tree-dfa.c (add_phi_arg): Allow PHI capacity to grow.
+ 	* tree-flow.h  (add_phi_arg): Adjust prototype.
+ 	* tree-ssa-pre.c (code_motion): Adjust call.
+ 	* tree-ssa.c (rewrite_block): Likewise.
+ 	* tree.c (resize_phi_node): New function.
+ 	* tree.h (resize_phi_node): Add prototype.
+ 
+ 2003-08-05  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (optimize_block): Be more aggressive about
+ 	creating equivalences from PHI nodes.
+ 
+ 	* tree-ssa-dom.c (optimize_stmt): Strip away certain NOP_EXPRs
+ 	before determining if we have an equivalence to enter into
+ 	the const_and_copies table.
+ 
+ 	* tree-ssa-dce.c (remove_dead_stmts): Iterate backwards through the
+ 	basic blocks removing dead statements.  Within each block iterate
+ 	backwards through the statements removing those which are dead.
+ 
+ 	* tree-ssa-optimize.c (optimize_function_tree): Call
+ 	remove_useless_stmts_and_vars before building the flow graph.
+ 	* tree-cfg.c (remove_useless_stmts_and_vars): Rename argument from
+ 	first_iteration to remove_unused_vars.
+ 
+ 	* tree-cfg.c (remove_unreachable_blocks): Remove blocks in reverse
+ 	order.
+ 	(remove_bb): Remove unwanted call to bsi_next.
+ 	(bsi_remove): Refine code which removes useless COMPOUND_EXPRs to allow
+ 	removal if one of the arms is not associated with a basic block.
+ 	(remove_stmt): Improve check for testing when a basic block head/end
+ 	pointer needs to be updated when removing a COMPOUND_EXPR.
+ 
+ 	* tree-cfg.c (phi_alternatives_equal): New function.
+ 	(linearize_cond_expr): Allow linearization if the PHI nodes at the
+ 	target have equivalent arguments for the incoming edges from the THEN
+ 	and ELSE clauses.
+ 
+ 	* tree-ssa-dce.c (mark_tree_necessary): Empty statements may be
+ 	necessary.
+ 	(process_worklist): Handle any incoming abnormal edges the first
+ 	time a statement in each block becomes executable.
+ 
+ 	* tree-ssa-ccp.c (substitute_and_fold): Substitute known
+ 	constants into PHI nodes.
+ 
+ 2003-08-04  Sebastian Pop  <s.pop@laposte.net>
+ 
+ 	* basic-block.h: Declare bb_ann_d.
+ 	(basic_block_def): Add a field tree_annotations.
+ 	* cfg.c (entry_exit_blocks): Initialize tree_annotations to NULL.
+ 	* cfghooks.c: Remove the definition of cfg_level.
+ 	(rtl_register_cfg_hooks): Remove the initiallization of cfg_level.
+ 	* cfghooks.h (cfg_hooks): Add cfgh_loop_optimizer_init, and
+ 	cfgh_loop_optimizer_finalize.
+ 	(loop_optimizer_init, loop_optimizer_finalize): New macros.
+ 	(cfg_level): Remove.
+ 	* cfgloop.h (loop_optimizer_init, loop_optimizer_finalize): Rename
+ 	to rtl_loop_optimizer_init and rtl_loop_optimizer_finalize.
+ 	* cfgrtl.c (rtl_loop_optimizer_init, rtl_loop_optimizer_finalize):
+ 	Declare, and register them in rtl_cfg_hooks and cfg_layout_rtl_cfg_hook.
+ 	* loop-init.c (loop_optimizer_init, loop_optimizer_finalize): Rename
+ 	to rtl_loop_optimizer_init and rtl_loop_optimizer_finalize.  Remove
+ 	the checks to cfg_level.
+ 	* tree-cfg.c (block_tree_ann_obstack, first_block_tree_ann_obj): New.
+ 	(create_blocks_annotations, create_block_annotation,
+ 	free_blocks_annotations, clear_blocks_annotations): New functions.
+ 	(tree_loop_optimizer_init, tree_loop_optimizer_finalize): New
+ 	functions.  Register them in tree_cfg_hooks.
+ 	(build_tree_cfg, dump_tree_bb, delete_tree_cfg, tree_split_edge): Use
+ 	create_blocks_annotations instead of alloc_aux_for_blocks,
+ 	create_block_annotation instead of alloc_aux_for_block,
+ 	.tree_annotations instead of .aux,
+ 	free_blocks_annotations instead of free_aux_for_blocks.
+ 	(tree_register_cfg_hooks): Remove initialization of cfg_level.
+ 	* tree-flow-inline.h (bb_ann): Use .tree_annotations.
+ 	* tree-flow.h: Update comment.
+ 
+ 2003-08-04  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+ 
+ 	* Makefile.in (c-pretty-print.o): Add TREE_H and C_TREE_H dependencies.
+ 
+ 2003-08-01  Paul Brook  <paul@nowt.org>
+ 
+ 	* Makefile.in (GMPINC): Set and use.
+ 	(GMPLIBS): Set it.
+ 	* configure.in: Add test and switches for the GMP library.
+ 	(all_need_gmp): Set from config-lang.in.
+ 	* sourcebuild.texi: Document need_gmp.
+ 	* configure: regen
+ 
+ 2003-08-01  Steven Bosscher  <steven@gcc.gnu.org>
+ 
+ 	* tree-inline.c (expand_calls_inline): Fix comments.
+ 
+ 2003-07-31  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (tree-ssa-ccp.o): Depend on $(EXPR_H).
+ 	* builtins.c (c_strlen): Remove static declaration.
+ 	(simplify_builtin_fputs): Remove static declaration.
+ 	(simplify_builtin_sprintf): New local function.
+ 	(expand_builtin_sprintf): Remove by surrounding with #if 0.
+ 	(expand_builtin): Add BUILT_IN_SPRINTF to the list of built-ins
+ 	handed over to simplify_builtin.
+ 	(validate_arglist): Do not allow arguments with TREE_SIDE_EFFECTS.
+ 	(simplify_builtin_fputs): Add new argument KNOWN_LEN.  If it's set,
+ 	use it instead of trying to compute the length of the string.
+ 	Update all callers.
+ 	* expr.h (simplify_builtin_fputs): Declare.
+ 	* tree-flow.h (fold_stmt): Change argument type to tree *.  Update
+ 	all users.
+ 	* tree-ssa-ccp.c: Include expr.h.
+ 	(replace_uses_in): If the statement makes a call to some selected
+ 	built-ins, mark it for folding.
+ 	(get_strlen): New local function.
+ 	(ccp_fold_builtin): New local function.
+ 	(fold_stmt): Call it.
+ 	(set_rhs): Fix if-else-if chaining.  Handle cases where the whole
+ 	statement needs to be replaced.
+ 	* tree.h (c_strlen): Declare.
+ 
+ 2003-07-31  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	Fix PR optimization/11373
+ 	* tree-ssa-dce.c (stmt_useful_p): Get statement operands before
+ 	checking for volatile operands.
+ 	* tree-dfa.c (get_expr_operands): If a constant is dereferenced as a
+ 	pointer, mark the statement as having volatile operands.
+ 	(may_access_global_mem_p): If a non-NULL constant is used as a
+ 	pointer, consider it as pointing to global memory.
+ 	* tree-ssa-dom.c (optimize_stmt): Set addr_expr_propagated_p when
+ 	propagating pointers that are integer constants.
+ 
+ 2003-07-31  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-dfa.c (add_stmt_operand): Don't treat complex types as scalars.
+ 	* tree-ssa-live.c (var_union):  Change comment.
+ 	(coalesce_tpa_members): Don't proceed if var_union fails.
+ 	* tree-ssa.c (insert_copy_on_edge): Change comment.
+ 	(coalesce_abnormal_edges): Handle var_union failing.
+ 	(coalesce_vars): Skip constant PHI arguments.
+ 
+ 2003-07-30  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-cfg.c (bsi_remove): Don't remove a COMPOUND_EXPR with empty
+ 	arms if the arms are in different basic blocks.
+ 
+ 	* tree-ssa-dom.c (record_cond_is_false): New function.
+ 	(record_cond_is_true): Similarly.
+ 	(get_eq_expr_value): Use record_cond_expr_is_{true,false}.
+ 	(optimize_stmt): Fix minor formatting issue.  If we encounter an
+ 	INDIRECT_REF, record that the dereferenced pointer can not be
+ 	null.
+ 
+ 2003-07-30  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-dump.c (dump_option_value_in): "all" is now everything but
+ 	TDF_RAW and TDF_SLIM.
+ 
+ 2003-07-30  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-simple.c (is_gimple_const): Accept CONST + CONST expressions
+ 	as GIMPLE constants.
+ 
+ 2003-07-30  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c: #include real.h
+ 	(defs_match_p): Change arguments to something normal now that we use
+ 	the new renaming algorithm. Update all callers.
+ 	Use defs_hash_expr.
+ 	(defs_y_dom_x): Ditto.
+ 	(defs_hash_expr): New. Based on iterative_hash_expr.
+ 	(generate_exr_as_of_bb): If there aren't any uses, return.
+ 	(subst_phis): Call modify_stmt on the actually modified statement. :)
+ 	(get_default_def): Only walk SSA_NAME arguments in PHI's.
+ 
+ 2003-07-30  Jason Merrill  <jason@redhat.com>
+ 
+ 	Don't modify code that is already GIMPLE.
+ 	* gimplify.c (gimplify_expr): Don't return early if the predicate
+ 	matches.
+ 	Use a variable temp if the caller wants an lvalue.
+ 	Don't call gimplify_constructor if we're on the rhs of a MODIFY_EXPR.
+ 	(add_tree, add_stmt_to_compound): Do add an empty stmt if we
+ 	previously had nothing at all.
+ 	(gimplify_return_expr): Don't mess with iterators if it was already
+ 	gimple.
+ 	(gimplify_cond_expr): Remove a COND_EXPR with two empty arms.
+ 	(gimplify_call_expr): Try to simplify a builtin again after
+ 	gimplifying the args.
+ 	(internal_get_tmp_var): Gimplify the new MODIFY_EXPR.
+ 	(gimplify_expr, gimple_push_cleanup): Use boolean_false_node.
+ 	(gimplify_init_constructor): New fn, broken out from...
+ 	(gimplify_modify_expr): ...here.  Be smarter about zero-initialization.
+ 	* tree-simple.c (is_gimple_rhs): Accept any CONSTRUCTOR.
+ 	* tree-simple.h: Adjust add_tree prototype.
+ 
+ 2003-07-29  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-alias-common.c (create_alias_vars):  If we created global_var,
+ 	delete it when we are done.
+ 	(ptr_may_alias_var): Handle case that global_var is now NULL_TREE.
+ 
+ 2003-07-29  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (optimize_stmt): Propagate copies into VUSEs and
+ 	the RHS of VDEFs.
+ 
+ 2003-07-29  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-ssa.c (insert_copy_on_edge): Only set used bit on DECL nodes.
+ 
+ 2003-07-29  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* common.opt (ftree-combine-temps): Add new option.
+ 	* flags.h (flag_tree_combine_temps): New flag.
+ 	* opts.c (decode_options): Initialize flag_tree_combine_temps.
+ 	(common_handle_option): Handle new flag.
+ 	* toplev.c (flag_tree_combine_temps): Declare.
+ 	(lang_independent_options f): Add tree-combine-temp.
+ 	* tree-ssa-live.c (var_union): When combining 2 root variables, choose
+ 	the user variable over a temporary as the new variable.
+ 	(compact_var_map): Use renamed root_var routines.
+ 	(calculate_live_on_exit): Reformatting.
+ 	(tpa_init): Initialize a tpa object.
+ 	(tpa_remove_partition): Remove a partition from a tpa list.
+ 	(tpa_delete): Delete a tpa object.
+ 	(tpa_compact): Hide single elemenet lists.
+ 	(root_var_init): Split common part into tpa_init and rename.
+ 	(remove_root_var_partition, delete_root_va, dump_root_var): Delete.
+ 	(type_var_init): New. Initialize a type_var object.
+ 	(create_coalesce_list): New. Create a coalesce_list object.
+ 	(delete_coalesce_list): New. Free a coalesce list's memory.
+ 	(find_partition_pair): New. Find a coalesce pair in a coalesce list.
+ 	(add_coalesce): New. Add a coalesce between 2 partitions.
+ 	(sort_coalesce_list): New. Sort coalesce pairs by importance.
+ 	(pop_best_coalesce): New. Get best remaining pair to coalesce.
+ 	(add_conflicts_if_valid): Move from tree-ssa.c.
+ 	(build_tree_conflict_graph): Move from coalesce_ssa_name in tree-ssa.c.
+ 	Genericize to use tpa_p instead of root_var object. Don't add
+ 	interferences between copies. Update coalesce list.
+ 	(coalesce_tpa_members): Move from coalesce_ssa_name in tree-ssa.c. Use
+ 	tpa_p instead of root_var. Use coalesce list if provided.
+ 	(dump_coalesce_list): New. Show debug info for a coalesce list.
+ 	(tpa_dump): Rename from dump_root_var and genericize to use tpa_p.
+ 	* tree-ssa-live.h (root_var_p): Rename structure type to tpa_p
+ 	(tpa_num_trees, tpa_tree, tpa_first_partition, tpa_next_partition,
+ 	tpa_find_tree): New. Generic versions of existing root_var routines.
+ 	(tpa_decompact): New. Include single version lists.
+ 	(root_var_p): Declare as type tpa_p.
+ 	(root_var_num, root_var, root_var_first_partition,
+ 	root_var_next_partition, root_var_dump, root_var_delete,
+ 	root_var_remove_partition, root_var_find , root_var_compac,
+ 	root_var_decompac): Rename and call generic versions.
+ 	(type_var_p): New. Use tpa_p structure for a type based association.
+ 	(type_var_num, type_var, type_var_first_partition,
+ 	type_var_next_partition, type_var_dump, type_var_delete,
+ 	type_var_remove_partition, type_var_find, type_var_compact,
+ 	type_var_decompact): New. Call generic versions of the routine.
+ 	(struct partition_pair_d): New. Represent a desired coalesce.
+ 	(struct coalesce_list_d): New. Organize lists of desired coalesces.
+ 	(NO_BEST_COALESCE): Define value.
+ 	* tree-ssa.c (set_if_valid): Remove.
+ 	(insert_copy_on_edge): Set variable as used when inserting a copy.
+ 	(add_conflicts_if_valid): Remove. Move to tree-ssa-live.c.
+ 	(print_exprs): New. Routine for commonly used output format.
+ 	(coalesce_abnormal_edges): New. Split from coalece_ssa_name. Force
+ 	partition coalesces across abnormal edges.
+ 	(coalesce_ssa_name): Split out build_tree_conflict_graph,
+ 	coalesce_abnormal_edges, and coalesce_tpa_members. Return live
+ 	range info if required. Use renamed root_var routines.
+ 	(assign_vars): Use renamed root_var routines.
+ 	(replace_variable): Mark as inline.
+ 	(coalesce_vars): Coalesce variable memory storage.
+ 	(rewrite_out_of_ssa): Don't compact varmap anymore. Free live range
+ 	info if required. Call coalesce_vars if combining temps.
+ 
+ 2003-07-29  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-cfg.c (handle_switch_fallthru): Use bsi_link_after if stmt is
+ 	in a basic block.
+ 
+ 2003-07-28  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* opts.c (decode_options): Disable must-alias optimization.
+ 
+ 2003-07-28  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-ssa.c (struct _elim_graph): Add varray for constant copies.
+ 	(new_elim_graph): Initialize constant copy array..
+ 	(eliminate_build): Push constant copies onto stack instead of emitting.
+ 	(eliminate_phi): Emit any pending constant copies.
+ 
+ 2003-07-28  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (optimize_block): If a PHI has a single argument
+ 	that is a constant, then that creates a useful equivalence.
+ 	Propagate constant values into PHI nodes.
+ 
+ 	* tree-flow-inline.h (may_propagate_copy): Allow RHS to be a
+ 	constant.
+ 
+ 	* tree-dfa.c (compute_immediate_uses_for): Do not assume that
+ 	PHI arguments are SSA_NAMEs.
+ 	* tree-ssa-dce.c (process_worklist): Likewise.
+ 	* tree-ssa-copyprop.c (copyprop_phi): Likewise.  Use may_propagate_copy.
+ 	* tree-ssa-ccp.c (visit_phi_node): Do not assume that PHI arguments
+ 	are SSA_NAMEs.  Create a suitable value if a PHI argument is a
+ 	constant.
+ 
+ 	* tree-cfg.c (move_outgoing_edges): Correctly handle case where
+ 	an edge already exists from BB1 to BB2's successor.
+ 
+ 2003-07-27  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree.h (EREF_TEMP): Rename to EPHI_TEMP.
+ 	(tree_eref_common): Move temp to tree_ephi_node.
+ 	* tree-ssa-pre.c: Remove #if 0'd code.
+ 	Use EPHI_TEMP rather than EREF_TEMP, remove EREF_TEMP on EUSE nodes.
+     (finalize_1): Handle empty blocks properly.
+ 
+ 2003-07-27  Andreas Jaeger  <aj@suse.de>
+ 
+ 	* tree.c: Convert remaining K&R prototypes to ISO C90.
+ 	* tree-dump.c: Likewise.
+ 	* tree-inline.c: Likewise.
+ 	* stmt.c (expand_asm_expr): Likewise.
+ 
+ 	* diagnostic.h: Remove PARAMS.
+ 
+ 2003-07-26  Paul Brook  <paul@nowt.org>
+ 
+ 	* Makefile.in: Rename check-g95 to check-gfortran.
+ 	* gcc.c (default_compilers): Add entries for .f90 and .f95.
+ 	* doc/frontends.texi: Document new F95 front end.
+ 	* doc/install.texi: Ditto.
+ 	* doc/invoke.texi: Ditto.
+ 	* doc/sourcebuild.texi: Ditto.
+ 	* fortran: New front end.
+ 
+ 2003-07-25  Jeff law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (optimize_block): Use may_propagate_copy.
+ 
+ 2003-07-25  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* opts.c (decode_options): Re-enable must-alias optimizations.
+ 
+ 2003-07-25  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* configure.in:  Update BANSHEEREBUILD for PWD change.
+ 	* configure: regen
+ 
+ 2003-07-25  Andreas Jaeger  <aj@suse.de>
+ 
+ 	* c-call-graph.c: Convert to ISO C90.
+ 	* c-common.c: Likewise.
+ 	* c-mudflap.c: Likewise.
+ 	* c-pretty-print.c: Likewise.
+ 	* cfganal.c (find_edge): Likewise.
+ 	* dependence.c: Likewise.
+ 	* diagnostic.c (debug_output_buffer): Likewise.
+ 	* except.c (expand_eh_handler): Likewise.
+ 	* fold-const.c: Likewise.
+ 	* langhooks.c: Likewise.
+ 	* tree-cfg.c (last_exec_block): Likewise.
+ 	* tree-ssa-pre.c: Likewise.
+ 	* builtins.c: Likewise.
+ 
+ 	* tree.h: Remove remaining PARAMS.
+ 	* c-common.h: Likewise.
+ 	* c-pretty-print.h: Likewise
+ 	* c-tree.h: Likewise.
+ 	* except.h: Likewise.
+ 	* langhooks-def.h: Likewise.
+ 	* langhooks.h: Likewise.
+ 
+ 2003-07-24  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (cleanup_operand_arrays): New local function.  Remove
+ 	superfluous VUSE operands.
+ 	(get_stmt_operands): Call it.
+ 
+ 2003-07-24  Jason Merrill  <jason@redhat.com>
+ 
+ 	* gimplify.c (gimple_boolify): New fn.
+ 	(gimplify_expr) <TRUTH_NOT_EXPR>: Boolify arg.
+ 	(gimplify_cond_expr): Boolify condition.
+ 	(gimplify_boolean_expr): Boolify args.
+ 	(gimple_push_cleanup): Make flag boolean.
+ 
+ 	* tree-simple.c (is_gimple_relop): TRUTH_{AND,OR,XOR}_EXPR
+ 	are not comparisons.
+ 	(is_gimple_binary_expr): They are binary ops.
+ 
+ 	* tree-mudflap.c (mf_build_check_statement_for): Use TRUTH_OR_EXPR
+ 	rather than BIT_IOR_EXPR.
+ 
+ 2003-07-23  Jason Merrill  <jason@redhat.com>
+ 	    Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-common.h (DECL_C_HARD_REGISTER): Replace ...
+ 	* tree.h (DECL_HARD_REGISTER): ... with this.  Update all users.
+ 
+ 2003-07-23  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-flow-inline.h (may_propagate_copy): New function.
+ 	* tree-flow.h (may_propagate_copy): Declare.
+ 	* tree-ssa-copyprop.c (copyprop_stmt): Call it.
+ 	(get_original): Likewise.
+ 	* tree-ssa-dom.c (optimize_stmt): Likewise.
+ 
+ 2003-07-23  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* gcc.c (MFWRAP_SPEC): Also wrap pthread_join and pthread_exit.
+ 
+ 2003-07-23  Steven Bosscher  <steven@gcc.gnu.org>
+ 
+ 	* tree-flow-inline.h (remove_dom_child): New function.
+ 	(clear_dom_children): New function.
+ 	* tree-cfg.c (bsi_insert_on_edge_immediate): Do not clear
+ 	the annotation for the new bb, it is already memset to zero
+ 	in alloc_aux_for_block().
+ 	(move_outgoing_edges): Use dom_children() instead of looking
+ 	at the dom_children field in the basic block annotation.
+ 	* tree-ssa.c (rewrite_into_ssa): Use clear_dom_children().
+ 
+ 	* tree-cfg.c (dump_tree_cfg): Dump to `file', not `dump_file'.
+ 
+ 2003-07-23  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree.h (DECL_ESTIMATED_INSNS): Move from c-common.h.
+ 
+ 2003-07-23  Steven Bosscher  <steven@gcc.gnu.org>
+ 
+ 	* tree-ssa-dom.c (tree_ssa_dominator_optimize): Make
+ 	found_unreachable a bool.  Create/delete hash tables for
+ 	copies and available exprs outside the main loop.  Use
+ 	htab_clean to wipe them after each iteration.
+ 
+ 2003-07-22  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* opts.c (decode_options): Add temporary test for environment
+ 	variable TREE_SSA_DO_PRE.
+ 	Do not disable dominator optimizations when PRE is enabled.
+ 
+ 2003-07-22  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (finalize_1): Change to not use bsi_last.
+ 
+ 2003-07-22  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-cfg.c (remove_stmt): Revert 07-15 change. Turns out the bug is in
+ 	the reverse iterator.
+ 
+ 2003-07-22  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-ccp.c (visit_phi_node): Assume default value of CONSTANT
+ 	if the PHI value was already constant.
+ 
+ 2003-07-22  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* c-pretty-print.c (print_call_name): Handle COND_EXPR correctly.
+ 	* tree-pretty-print.c (print_call_name): Handle COND_EXPR correctly and
+ 	handle SSA_NAME.
+ 	* tree-dfa.c (add_phi_arg, remove_phi_arg_num): Remove references to
+ 	SSA_NAME_HAS_REAL_REFS.
+ 	* tree-ssa-ccp.c (visit_phi_node): Remove SSA_NAME_HAS_REAL_REFS.
+ 	* tree-ssa-copyprop.c (copyprop_phi): Remove SSA_NAME_HAS_REAL_REFS.
+ 	* tree-ssa-live.c (register_ssa_partition): Register the PHI and it's
+ 	arguments if this variable is defined by a PHI.
+ 	(create_ssa_var_map): Only register real uses and defs, and virtual
+ 	operands of ASM_EXPR's. Remove SSA_NAME_HAS_REAL_REFS. Don't set
+ 	used flag on variables here.
+ 	(calculate_live_on_entry): Ignore constants in PHI arguments.
+ 	(calculate_live_on_exit): Ignore constants in PHI arguments.
+ 	(dump_live_info): New. Dump live range information.
+ 	* tree-ssa-live.h (dump_live_info): New prototype and flags.
+ 	* tree-ssa-pre.c (create_expr_ref, finalize_1, repair_use_injury,
+ 	code_motion): Remove SSA_NAME_HAS_REAL_REFS.
+ 	* tree-ssa.c (rewrite_operand, register_new_def): Remove real_ref
+ 	parameter and SSA_NAME_HAS_REAL_REFS.
+ 	(rewrite_block): Remove real_ref parameter from register_new_def call.
+ 	(eliminate_build): Remove SSA_NAME_HAS_REAL_REFS. Insert copy if PHI
+ 	argument is a constant. Handle irregular PHI argument ordering.
+ 	(elim_create): Remove dead code to count PHI nodes.
+ 	(assign_vars): Set used flag on variables when assigned.
+ 	(replace_variable): Eliminate dead code.
+ 	(coalesce_ssa_name): Remove SSA_NAME_HAS_REAL_REFS. Print error for
+ 	constant argument across an abnormal edge.
+ 	(eliminate_extraneous_phis): New. Remove PHI nodes which are not in
+ 	the partition.
+ 	(rewrite_out_of_ssa): Call eliminate_extraneous_phis.
+ 	(rewrite_stmt): Remove real_ref parameter from rewrite_operand and
+ 	register_new_def.
+ 	* tree.h (SSA_NAME_HAS_REAL_REFS): Remove.
+ 	(struct tree_ssa_name): Remove 'has_real_refs' field.
+ 
+ 2003-07-22  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (factor_through_injuries): Take new argument specifying
+ 	whether use was injured or not (needed for SR).   Update all callers.
+ 	(maybe_find_rhs_use_for_var): Take new argument specifying which
+ 	operand to start search with.   Update all callers.
+ 	(phi_opnd_from_res): #if 0 out.
+ 	(rename_2): Ditto.
+ 	(rename_1): Ditto.
+ 	(defs_match_p): Take new arguments specifying which defs were injured.
+ 	Update all callers.
+ 	(defs_y_dom_x): Ditto.
+ 	(generate_expr_as_of_bb): Fix small memory overwrite.
+ 	(process_delayed_rename): Propagate injured flag around.
+ 	(new_rename_1): Ditto.
+ 	(finalize_1): Get correct variable names for newly created statement if
+ 	necessary due to PHI.
+ 	(repair_use_injury): Note the repair in the stats. Insert repair
+ 	in right place.
+ 	(repair_euse_injury): Fix handling of PHI_NODE.
+ 	(code_motion): Fix algorithm so it can handle using reaching_def all the
+ 	time (needed for SR).
+ 	Use reaching_def rather than EREF_TEMP.
+ 
+ 2003-07-21  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (get_stmt_operands): Remove FIXME note
+ 	regarding virtual operands for ASM_EXPRs.
+ 
+ 2003-07-21  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (add_def): Renamed from set_def.  Update all users.
+ 	(get_stmt_operands): Don't force ASM_EXPR operands to be virtual.
+ 	(add_stmt_operand): Allow non-assignments to create new defs.
+ 	* tree-dump.c (dump_function): Move header dump...
+ 	(dump_function_to_file): ... here.
+ 	* tree-flow-inline.h (def_ops): Renamed from def_op.  Return a
+ 	varray with all the definitions made by the statement.
+ 	Update all users.
+ 	* tree-flow.h (struct operands_d): Rename field 'def_op' to
+ 	'def_ops'.  Convert it into a varray.
+ 	* tree-must-alias.c (tree_compute_must_alias): Call
+ 	dump_function_to_file instead of dump_function.
+ 	* tree-ssa-ccp.c (tree_ssa_ccp): Likewise.
+ 	(visit_stmt): Only visit statements that make new definitions using
+ 	MODIFY_EXPR.
+ 	Definitions coming from other statements are considered VARYING.
+ 	* tree-ssa-copyprop.c (tree_ssa_copyprop): Call
+ 	dump_function_to_file instead of dump_function.
+ 	* tree-ssa-dce.c (tree_ssa_dce): Likewise.
+ 	* tree-ssa-dom.c (tree_ssa_dominator_optimize): Likewise.
+ 	(optimize_stmt): Don't abort if a statement makes more than one
+ 	definition.
+ 	Check for MODIFY_EXPR statements directly, instead of relying on
+ 	the presence of a single definition.
+ 	* tree-ssa-pre.c (tree_perform_ssapre): Call dump_function_to_file
+ 	instead of dump_function.
+ 	* tree-ssa.c (rewrite_into_ssa): Likewise.
+ 	Dump the function before dominator optimizations if TDF_DETAILS is
+ 	set.
+ 	(rewrite_stmt): Don't abort if the statement makes more than one
+ 	definition.
+ 
+ 2003-07-21  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (tree_ssa_dominator_optimize): If we made any
+ 	blocks unreachable, repeat the dominator optimizations.
+ 	(optimize_block): Enter PHIs with a single source argument into
+ 	the const_and_copies table.  When propagating into a PHI node,
+ 	break the loop over the PHI arguments when a propagation is performed.
+ 	If the PHI agument is not an SSA_VAR, then no propagation is possible.
+ 	(optimize_stmt): If an operand is not an SSA_VAR, then no propagation
+ 	is possible/needed.
+ 
+ 2003-07-21  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (tree-ssa-dom.o): Add dependency on $(TREE_DUMP_H).
+ 	* fold-const.c (fold): Remove unusued local variable 'invert'.
+ 	* tree-dump.c (dump_files): Add entry for -fdump-tree-dom.
+ 	* tree-flow.h (tree_ssa_dominator_optimize): Change declaration to
+ 	accept a function decl.
+ 	* tree-ssa-dom.c: Include timevar.h and tree-dump.h.
+ 	(tree_ssa_dominator_optimize): Change to receive the function decl
+ 	for the function to optimize.  Update callers.
+ 	Use own dump file instead of dumping on the .ssa dump file.
+ 	Dump function at the end.
+ 	Push and pop TV_TREE_SSA_DOMINATOR_OPTS.
+ 	* tree-ssa.c (rewrite_into_ssa): Restore check for number of times
+ 	that the rename loop has been executed.  Abort if the loop executes
+ 	more than twice.
+ 	* tree.h (enum tree_dump_index): Add TDI_dom.
+ 	* doc/invoke.texi: Document -fdump-tree-dom.
+ 
+ 2003-07-21  Steven Bosscher  <steven@gcc.gnu.org>
+ 	    Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (install-po): Check if $CATALOGS is empty to avoid
+ 	buggy shells.
+ 	* basic-block.h (rtl_verify_flow_info): Remove.
+ 	(tree_verify_flow_info): Remove.
+ 	(verify_flow_info): Declare.
+ 	* builtins.c: Rearrange to simplify merges.  Add #if 0 around
+ 	expand_ functions that are not used in the branch and move new code
+ 	to the end of the file.
+ 	* c-opts.c (c_common_handle_option): Move handling of -fdump- to
+ 	opts.c.
+ 	* cfgloopmanip.c (loop_split_edge_with_NULL): Remove.  Update all
+ 	users.
+ 	* common.opt: Add all the tree-ssa switches.
+ 	* opts.c: Handle them.
+ 	* flags.h (flag_tree_cp): Remove unused variable.
+ 	(enum pta_type): Move from tree-must-alias.h
+ 	(flag_tree_points_to): Likewise.
+ 	* toplev.c (flag_tree_cp): Remove unused variable.
+ 	* tree-cfg.c: Move cfg_hooks structures and functions for
+ 	trees from cfghooks.c.
+ 	* tree-mudflap.c (mudflap_enqueue_decl): Don't use %D to
+ 	avoid warning about format specifiers.
+ 
+ 2003-07-21  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* gimplify.c (gimplify_function_tree): Move gimplification of the
+ 	function body ...
+ 	(gimplify_body): ... here.
+ 	* tree-simple.h (gimplify_body): Declare.
+ 	* tree-inline.c (initialize_inlined_parameters): If the
+ 	emitted assignment is not in GIMPLE form, gimplify the
+ 	body of assignments emitted.
+ 
+ 2003-07-17  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-dfa.c (remove_phi_arg): Update PHI_ARG_CAPACITY.
+ 
+ 	* tree-ssa.c (mark_def_sites): Do not build the dominator tree here.
+ 	(rewrite_into_ssa): Do not depend on mark_def_sites to build the
+ 	dominator tree.   Move computation of dominance frontiers out
+ 	of main loop (even though it was only done once).  Free immediate
+ 	dominator information as soon as we're done with it.
+ 
+ 	* tree-flow.h (remove_phi_nodes_and_edges_for_unreachable_block):
+ 	Prototype.
+ 	* tree-cfg.c (remove_phi_nodes_and_edges_for_unreachable_block): New
+ 	function extracted from remove_bb.
+ 	(remove_bb): Call remove_phi_nodes_and_edges_for_unreachable_block.
+ 
+ 	* tree-ssa-dom.c (optimize_block): Propagate values into PHI nodes.
+ 	Do not optimize a block which has become unreachable.
+ 	If a COND_EXPR has a compile-time constant condition, then remove
+ 	outgoing from the COND_EXPR which can not execute.
+ 
+ 2003-07-16  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* tree-mudflap.c (mx_xfn_indirect_ref): Correct source locations
+ 	for tracked expressions by ignoring incidental decl source loci.
+ 
+ 2003-07-16  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-cfg.c (remove_bb): Remove statements in reverse order.
+ 	Simplify code to issue warnings for unreachable code.
+ 
+ 	* tree-ssa-dom.c (get_eq_expr_value): Also enter expressions
+ 	into the available expression hash table.  Callers changed to
+ 	pass in the block_avail_exprs varray and const_and_copies hash
+ 	table.
+ 	(optimize_stmt): Allow optimization of the condition in
+ 	a COND_EXPR statement.
+ 	(lookup_avail_expr): For COND_EXPRs, just see if their condition
+ 	has been recorded into the hash table, do not enter them into
+ 	the hash table.  Only do a lookup of the result in the
+ 	const_and_copies table if it is an SSA_VAR.
+ 	(avail_expr_hash): Handle COND_EXPRs, specifically we only care
+ 	about their condition and virtual operands.
+ 	(avail_expr_eq): Likewise.  If one statement has virtual operands
+ 	and the other does not, then the expressions are not equal.
+ 
+ 	* tree-ssa.c (rewrite_into_ssa): If we have done dominator
+ 	optimizations, then call cleanup_tree_cfg after rewriting is
+ 	complete.
+ 	* tree-ssa-dom.c (optimize_block): Get eq_expr_value for the
+ 	current block rather than having it passed in by the caller.
+ 	Propagate eq_expr_value into the false arm of a COND_EXPR.
+ 	(get_eq_expr_value): Return equivalences for the false
+ 	arm of a COND_EXPR if requested.
+ 
+ 2003-07-16  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* c-decl.c (store_parm_decls): Also strip NON_LVALUE_EXPRs and
+ 	CONVERT_EXPRs when setting DECL_NONLOCAL.
+ 
+ 2003-07-15  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-cfg.c (remove_stmt): Update bb->end_tree_p properly when
+ 	stmt_p is the end of the bb.
+ 
+ 2003-07-15  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-dom.c (optimize_stmt): Consider two types equivalent if
+ 	their TYPE_MAIN_VARIANT is equivalent.
+ 	(avail_expr_eq): Likewise.
+ 
+ 	* Makefile.in (OBJS): Add tree-ssa-dom.o
+ 	(tree-ssa-dom.o): Add dependencies.
+ 	(ssa.o, cfghooks.o): Use $(TREE_FLOW_H), not tree-flow.h.
+ 	* timevar.def: Add new timevar for dominator optimizer.  Reorder
+ 	slightly.
+ 	* tree-dfa.c (add_stmt_operand): Do not consider references to
+ 	static storage as volatile operands.
+ 	(add_referenced_var): Static storage items reference global memory.
+ 	* tree-ssa.c: Simplify by moving everything specific to the
+ 	dominator optimizer into tree-ssa-dom.c.  Call into the dominator
+ 	optimizer after rewriting all the basic blocks.
+ 	* tree-ssa-dom.c: New file.  Mostly extracted from tree-ssa.c
+ 	* tree-flow.h (tree_ssa_dominator_optimize): Prototype.
+ 	(dump_dominator_optimization_stats): Likewise.
+ 	(debug_dominator_optimization_stats): Likewise.
+ 
+ 2003-07-15  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (add_stmt_operand): Move volatile handling...
+ 	(find_vars_r): ... here.
+ 	Mark when the walker is inside an ASM_EXPR.
+ 	(struct walk_state): Add field 'is_asm_expr'.
+ 	Change flag fields to bitfields.
+ 	(add_referenced_var): If the variable is a pointer being stored by
+ 	an ASM_EXPR, mark it as a global memory pointer.
+ 	* tree-flow-inline.h (is_optimizable_addr_expr): New function.
+ 	* tree-flow.h (is_optimizable_addr_expr): Declare it.
+ 	* tree-ssa.c (rewrite_and_optimize_stmt): Use it.
+ 	(lookup_avail_expr): Likewise.
+ 	(get_eq_expr_value): Likewise.
+ 	(avail_expr_eq): Return 'true' when comparing a statement against
+ 	itself.
+ 	* tree-ssa-dce.c (need_to_preserve_store): Move volatile checking...
+ 	(stmt_useful_p): ...here.
+ 
+ 2003-07-15  Andreas Jaeger  <aj@suse.de>
+ 
+ 	* c-simplify.c: Convert prototypes to ISO C90.
+ 	* gimplify.c: Likewise.
+ 	* simple-break-elim.c: Likewise.
+ 	* simple-goto-elim.c: Likewise.
+ 
+ 	* tree-alias-ander.c: Convert prototypes to ISO C90.
+ 	* tree-alias-common.c: Likewise.
+ 	* tree-alias-type.c: Likewise.
+ 	* tree-browser.c: Likewise.
+ 	* tree-dchain.c: Likewise.
+ 	* tree-mudflap.c: Likewise.
+ 	* tree-nomudflap.c: Likewise.
+ 	* tree-optimize.c: Likewise.
+ 	* tree-pretty-print.c: Likewise.
+ 	* tree-simple.c: Likewise.
+ 
+ 	* tree-alias-common.h: Convert prototypes to ISO C90, remove extra
+ 	whitespace.
+ 	* tree-alias-type.h: Convert prototypes to ISO C90.
+ 	* tree-dchain.h: Likewise.
+ 	* tree-flow-inline.h: Likewise.
+ 	* tree-flow.h: Likewise.
+ 	* tree-iterator.h: Likewise.
+ 	* tree-mudflap.h: Likewise.
+ 	* tree-simple.h: Likewise.
+ 
+ 2003-07-14  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (tree_perform_ssapre): Fix dom_children after DCE
+ 	breaks them.
+ 
+ 2003-07-14  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (add_vdef): Initialize variable 'vdef'.
+ 	(add_vuse): Initialize variable 'vuse'.
+ 
+ 2003-07-14  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	Must alias analysis.  Allow the SSA rename pass to be done on a set
+ 	of variables.
+ 
+ 	* Makefile.in (OBJS): Add tree-must-alias.o.
+ 	* flags.h (flag_tree_must_alias): Declare.
+ 	* timevar.def (TV_TREE_MUST_ALIAS): Define.
+ 	* toplev.c (flag_tree_must_alias): Declare.
+ 	(f_options): Add entry for -ftree-must-alias.
+ 	(parse_options_and_default_flags): Enable must-alias analysis at -O1.
+ 
+ 	* tree-cfg.c (remove_useless_stmts_and_vars): Do not remove
+ 	addressable variables.
+ 
+ 	* tree-dfa.c (dump_file, dump_flags): New local variables to
+ 	replace tree_ssa_dump_file and tree_ssa_dump_flags.  Update every
+ 	user.
+ 	(get_stmt_operands): Clear the array of virtual operands before
+ 	scanning the statement.
+ 	(get_expr_operands): Do not add an operand for ADDR_EXPR if the
+ 	expression takes the address of a VAR_DECL or a PARM_DECL.  Instead
+ 	add the variable to the list of variables whose address has been
+ 	taken by the statement.
+ 	Allow INDIRECT_REF expressions of the form *&VAR.  Convert them
+ 	into an operand for VAR.
+ 	When processing function calls, add a VUSE for .GLOBAL_VAR if the
+ 	function is pure but not const.
+ 	(add_stmt_operand): If the operand is an ADDR_EXPR, add the
+ 	variable to the list of variables whose address has been taken by
+ 	the statement.
+ 	(add_vdef): If the statement had virtual definitions, try to find
+ 	an existing VDEF for the variable, to preserve SSA information.  If
+ 	none is found, create a new one.
+ 	(add_vuse): Likewise.
+ 	(remove_all_phi_nodes_for): New function.
+ 	(get_call_flags): New function to replace call_may_clobber.  Update
+ 	all callers.
+ 
+ 	* tree-dump.c (dump_files): Add entry for -fdump-tree-mustalias.
+ 	* tree-flow-inline.h (addresses_taken): New function.
+ 	(is_unchanging_value): New function.
+ 
+ 	* tree-flow.h (addresses_taken): Declare.
+ 	(remove_all_phi_nodes): Declare.
+ 	(init_tree_ssa): Declare.
+ 	(propagate_copy): Declare.
+ 	(is_unchanging_value): Declare.
+ 	(tree_compute_must_alias): Declare.
+ 
+ 	* tree-inline.c (copy_body_r): Fold instances of *&VAR.
+ 
+ 	* tree-must-alias.c: New file.
+ 
+ 	* tree-optimize.c (optimize_function_tree): Call init_tree_ssa and
+ 	compute_may_aliases before calling rewrite_into_ssa.
+ 	After the SSA pass, run dead code elimination and compute
+ 	must-aliases.
+ 
+ 	* tree-simple.c (is_gimple_call_expr): Add comment that
+ 	is_gimple_* predicates should not have side effects.
+ 
+ 	* tree-ssa-ccp.c: Replace calls to really_constant_p with
+ 	is_unchanging_value everywhere.
+ 	(fold_stmt): Don't fold if the RHS is already a constant.
+ 
+ 	* tree-ssa-copyprop.c (copyprop_stmt): Remove unnecessary
+ 	variable 'vuse'.
+ 	Call propagate_copy to replace the operand with its new value.
+ 	(copyprop_phi): Remove unnecessary variable 'vuse'.
+ 	(get_original): Remove unused parameter 'vuse_p'.
+ 	(propagate_copy): New function.
+ 
+ 	* tree-ssa-dce.c (need_to_preserve_store): Update comments.
+ 
+ 	* tree-ssa.c (dump_file, dump_flags): New local variables to
+ 	replace globals tree_ssa_dump_file and tree_ssa_dump_flags.  Update
+ 	all users.
+ 	(addr_expr_propagated_p): New local variable.
+ 	(vars_to_rename): New local variable.
+ 	(check_for_new_variables): New local function.
+ 	(rewrite_into_ssa): Add new argument VARS which is a bitmap
+ 	representing all the variables that should be renamed into SSA.  If
+ 	VARS is NULL, all the variables in the program are renamed.
+ 	Don't call init_tree_ssa nor compute_may_aliases.
+ 	Initialize all the local hash tables and bitmaps.
+ 	Add support for repeating the SSA rename process more than once.
+ 	If the dominator optimizations produced new symbols, repeat the
+ 	process.
+ 	(mark_def_sites): Ignore operands that are in SSA form already.
+ 	(insert_phi_nodes): Only add PHI nodes for variables in the
+ 	VARS_TO_RENAME bitmap.
+ 	(rewrite_block): Ignore PHI nodes that have been renamed already.
+ 	(rewrite_and_optimize_stmt): Ignore operands that are already in
+ 	SSA form.
+ 	When propagating ADDR_EXPR set addr_expr_propagated_p to 'true'.
+ 	Call propagate_copy when doing copy propagation.
+ 	Call is_unchanging_value to decide if the RHS of an assignment is a
+ 	constant.
+ 	(rewrite_stmt): Ignore operands that are already in SSA form.
+ 	(init_tree_ssa): Make external.
+ 	Move initialization of local hash tables and bitmaps to
+ 	rewrite_into_ssa.
+ 	(remove_annotations_r): Don't special case MODIFY_EXPR nodes.
+ 	(lookup_avail_expr): Call is_unchanging_value.
+ 	(get_eq_expr_value): Likewise.
+ 
+ 	* tree.h (enum tree_dump_index): Add TDI_must_alias.
+ 
+ 	* cp/optimize.c (optimize_function): Don't call the tree optimizers
+ 	  if -fdisable-tree-ssa is given.
+ 
+ 	* doc/invoke.texi: Add documentation for -ftree-must-alias.
+ 
+ 2003-07-07  Jeff Law  <law@redhat.com>
+ 
+ 	* fold-const.c (nondestructive_fold_unary_to_constant: For BIT_NOT_EXPR
+ 	make sure OP0 is a suitable constant before trying to fold it.
+ 
+ 	* tree-cfg.c (handle_switch_fallthru): Set DECL_CONTEXT for
+ 	newly created labels.
+ 
+ 	* tree-cfg.c (move_outgoing_edges): New function.
+ 	(merge_tree_blocks): Use it.
+ 	(remove_bb): Remove the block from the pdom_info structures
+ 	as well if they exist.
+ 	(linearize_cond_expr): Move important edges from the then and
+ 	else arms to BB as appropriately
+ 
+ 	* tree-cfg.c (remove_stmt): When removing a COMPOUND_EXPR, make
+ 	sure that any basic block pointers to the arms of the COMPOUND_EXPR
+ 	are updated.
+ 
+ 	* tree-cfg.c (make_goto_expr_edges): Computed gotos create
+ 	abnormal edges.
+ 
+ 2003-07-05  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (defs_match_p): Check for copies of the same version.
+ 
+ 2003-07-03  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* tree-nomudflap.c (mf_marked_p, mf_mark): New dummy functions.
+ 
+ 2003-07-03  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa.c (lookup_avail_expr): Accept new argument containing the
+ 	const_and_copies table.  All callers changed.  If we find the
+ 	given expression in the availe expression hash table, then lookup
+ 	the LHS of the hash table's entry in the const_and_copies_table.
+ 	Do record type casts into the available expression table.
+ 
+ 	* tree-nomudflap.c (mf_marked_p): Mark arguments as being unused.
+ 	(mf_mark): Likewise.
+ 
+ 	* c-decl.c (store_parm_decls): Strip away NOP_EXPRs when looking
+ 	for hidden use variables.
+ 
+ 2003-07-02  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* varasm.c (build_constant_desc): Propagate mudflap marked-ness
+ 	across constant copying.
+ 
+ 2003-07-02  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (tree_perform_ssapre): Don't optimize things with
+ 	volatile ops or making aliased loads right now.
+ 	(create_expr_ref): Mark the phi result of the new phi as having
+ 	real refs.
+ 	(finalize_1): Mark the new temp as having real refs.
+ 	(repair_use_injury): Ditto.
+ 	(code_motion): Ditto.
+ 
+ 2003-07-01  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree.h (struct tree_eref_common): Add injured flag.
+ 	Add EREF_INJURED macro.
+ 
+ 2003-07-01  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-flow-inline.h (stmt_ann): We have stmt_ann on E*_NODE's as well,
+ 	so use is_essa_node as well.
+ 	* tree-dfa.c (create_stmt_ann): Ditto.
+ 	* tree.h (is_essa_node): Declare.
+ 	* tree.c (is_essa_node): Define.
+ 
+ 2003-07-01  Jason Merrill  <jason@redhat.com>
+ 
+ 	* tree-cfg.c (prepend_stmt_to_bb): New fn.
+ 	(bsi_insert_after): Add to the beginning of an empty block.
+ 
+ 2003-07-01  Jeff Law  <law@redhat.com>
+ 
+ 	* expr.c (expand_expr, case COND_EXPR): Correctly (?) handle
+ 	cases where a containing block has a stack level.  Handle
+ 	cases where one arm is a GOTO_EXPR and the other arm has
+ 	side effects.
+ 
+ 	* stmt.c (containing_blocks_have_cleanups_or_stack_level): New
+ 	function.
+ 	(any_pending_cleanups): Further simplification.
+ 	* tree.h (containing_blocks_have_cleanups_or_stack_level): Prototype.
+ 
+ 2003-06-30  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-flow.h (struct tree_ann_common_d): Remove 'stmt' field.
+ 	Update all users.
+ 	(struct var_ann_d): Remove field 'has_real_refs'.  Update all callers
+ 	with calls to SSA_NAME_HAS_REAL_REFS.
+ 	Remove field 'occurs_in_abnormal_phi'.  Update all callers with
+ 	calls to SSA_NAME_OCCURS_IN_ABNORMAL_PHI.
+ 	* tree-flow-inline.h (var_ann): Only accept _DECL nodes.
+ 	(stmt_ann): Only accept GIMPLE statements.
+ 	(tree_stmt): Remove.  Update all users.
+ 
+ 	* tree-cfg.c (linearize_cond_expr): Handle cases where BB doesn't
+ 	have a postdominator.
+ 	(find_contained_blocks): Do not look inside COND_EXPR_COND nor
+ 	SWITCH_COND expressions.
+ 
+ 	* tree-dfa.c (get_stmt_operands): Force virtual operands on
+ 	ASM_EXPRs.
+ 	(get_expr_operands): Handle SSA names when adding operands for
+ 	memory tags.
+ 	(add_stmt_operand): Handle SSA names.
+ 	Move checks for volatile operands earlier in the code.
+ 	(add_vdef): Re-format for readability.
+ 	(create_var_ann): Only allow _DECL nodes.
+ 	(create_stmt_ann): Only allow GIMPLE statements.
+ 	(dump_variable): Handle SSA names.
+ 	(dump_may_aliases_for): Likewise.
+ 	(may_access_global_mem_p): Handle SSA names.
+ 	(remove_phi_arg): If the argument removed was the last one with
+ 	real references, update the LHS of the PHI node.
+ 	(add_phi_arg): If the argument added has real references, propagate
+ 	the attribute into the LHS of the PHI node.
+ 
+ 	* tree-pretty-print.c (dump_generic_node): Only retrieve basic
+ 	block information from GIMPLE statements.
+ 	Always output the THEN and ELSE clauses of COND_EXPR nodes.
+ 
+ 	* tree-simple.c (is_gimple_stmt): Accept PHI_NODEs.
+ 	(is_gimple_id): Accept SSA_NAMEs.
+ 
+ 	* tree-ssa-copyprop.c (copyprop_phi): If an argument is used as a
+ 	real operand, propagate the attribute into the LHS of the PHI.
+ 
+ 	* tree-ssa-live.c (create_ssa_var_map): Don't set 'used' flag on
+ 	both the operand and the result of VDEFs.
+ 	Only register PHI results and arguments that have been used as real
+ 	operands.
+ 	(calculate_live_on_entry): Fix formatting in debugging message.
+ 
+ 	* tree-ssa.c (register_new_def): Add new argument
+ 	'is_real_operand'.  If it's set, set SSA_NAME_HAS_REAL_REFS for the
+ 	new name.  Update all callers.
+ 	(rewrite_operand): Add new argument 'is_real_operand'.  If it's
+ 	set, set SSA_NAME_HAS_REAL_REFS to the operand.
+ 	(eliminate_build): Ignore PHI arguments and PHI results that have
+ 	not been used in real operands.
+ 	(rewrite_vdefs): Remove.  Update all users.
+ 	(set_is_used): Don't handle SSA names.
+ 	(coalesce_ssa_name): Ignore PHI arguments that have not had real
+ 	references in the program.
+ 
+ 	* tree.c (make_ssa_name): Update documentation.
+ 	* tree.h (IS_EMPTY_STMT): Call integer_zerop instead of comparing
+ 	against size_zero_node.
+ 	(SSA_NAME_HAS_REAL_REFS): Define.
+ 	(SSA_NAME_OCCURS_IN_ABNORMAL_PHI): Define.
+ 	(struct tree_ssa_name): Add bitfields 'has_real_refs' and
+ 	'occurs_in_abnormal_phi'.
+ 
+ 2003-06-30  Jeff Law  <law@redhat.com>
+ 
+ 	* c-simplify.c (gimplify_c_loop): Don't return a LOOP_EXPR for
+ 	a do ... while (0) loop.
+ 
+ 	* expr.c (expand_expr, case COND_EXPR): Be smarter about expanding
+ 	a COND_EXPR with only one useful arm, which happens to be a GOTO_EXPR.
+ 
+ 	* tree-cfg.c (remove_useless_stmts_and_vars): Don't remove user
+ 	variables unless we're at -O2 or higher.
+ 
+ 2003-06-30  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (expr_phi_insertion): Stop optimizing the expression
+ 	if we have > some very large number of ephi operands, as it will
+ 	take an ungodly amount of memory and time.
+ 	(pre_expression): Push/pop gc context so we can do gc collection
+ 	in between expressions.
+ 	Throw away expression info right after done optimizing it.
+ 
+ 2003-06-30  Jason Merrill  <jason@redhat.com>
+ 
+ 	* gimplify.c (gimplify_call_expr): Check PUSH_ARGS_REVERSED.
+ 
+ 	* gimplify.c (gimplify_modify_expr): Also force a call with a
+ 	possible nonlocal goto into a temporary.
+ 	(gimplify_return_expr): Don't duplicate the MODIFY_EXPR.
+ 	* tree-iterator.h (tsi_one_before_end_p): New fn.
+ 
+ 2003-06-29  Jeff Sturm   <jsturm@one-point.com>
+ 
+ 	* fold-const.c (fold): Don't save_expr unless TREE_SIDE_EFFECTS.
+ 
+ 2003-06-26  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-simplify.c (gimplify_stmt_expr): Handle statement-expressions
+ 	that don't end in a non-void expression.  Emit a warning in that
+ 	case.
+ 
+ 2003-06-26  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (fixup_domchildren): Rename from
+ 	compute_domchildren, change to not use our own array.
+ 	(domchildren): Remove variable.
+ 	(insert_occ_in_preorder_dt_order_1): Use dom_children now.
+ 	(insert_euse_in_preorder_dt_order_1): Ditto.
+ 	(search_dt_preorder): Ditto.
+ 	(handle_bb_creation): Fix to work properly.
+ 	(tree_perform_ssapre): Remove remnants of domchildren.
+ 	Redo dominator info if we have to due to a new block.
+ 
+ 2003-06-26  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-cfg.c (handle_switch_split): Use a tree iterator to find the
+ 	real split point rather than a block iterator.
+ 
+ 2003-06-26  Jason Merrill  <jason@redhat.com>
+ 
+ 	* tree-simple.c (is_gimple_stmt): Complete.
+ 
+ 2003-06-24  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-cfg.c (remove_useless_stmts_and_vars): On the first
+ 	iteration, remove unused variables from BIND_EXPRs.
+ 	* tree-flow.h (var_ann_d): Add new field USED.
+ 	(set_is_used): Prototype.
+ 	(remove_useless_stmts_and_vars): Update prototype.
+ 	* tree-ssa-live.c (create_ssa_var_map): Note which variables
+ 	are used so that we can delete those which are not used.
+ 	* tree-ssa.c (create_temp): Mark the new temporary as being used.
+ 	(rewrite_out_of_ssa): Note if the call to remove_useless_stmts_and_vars
+ 	is the first iteration or not.
+ 	(set_is_used): New function.
+ 
+ 	* c-decl.c (store_parm_decls): Variables and parameters on the
+ 	pending_sizes chain have nonlocal uses.
+ 
+ 2003-06-25  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c: Convert to ISO C.
+ 	(handle_bb_creation): New function.
+ 	(ephi_will_be_avail): Remove dead code.
+ 	(finalize_1): Use handle_bb_creation, start to fix edge insertion
+ 	related fun.
+ 	(maybe_find_rhs_use_for_var): Stop using tree_stmt.
+ 	(code_motion): Always get the temporary from the right place.
+ 
+ 2003-06-24  Jason Merrill  <jason@redhat.com>
+ 
+ 	* gimplify.c (gimplify_self_mod_expr): Add want_value parm.
+ 	For postfix ops, make sure it returns an rvalue.
+ 	(gimplify_expr): Copy a volatile reference into a temp.
+ 	(create_tmp_var): Require a complete type.
+ 	(create_tmp_alias_var): Use TYPE_VOLATILE on types.
+ 	* tree-simple.c (is_gimple_stmt): Flesh out a bit.
+ 	(is_gimple_val): Don't allow volatiles.
+ 
+ 	* c-simplify.c (gimplify_expr_stmt): Don't insert a null pointer.
+ 
+ 	* gimplify.c (gimplify_return_expr): Search through the gimple
+ 	form for the interesting MODIFY_EXPR.
+ 	(gimplify_modify_expr): Don't suppress posteffects if want_value.
+ 
+ 2003-06-24  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (struct dfa_stats_d): Remove obsolete fields
+ 	num_tree_refs and size_tree_refs.  Update all users.
+ 	(dump_dfa_stats): Also dump information about VUSE and VDEF
+ 	operands.
+ 	* tree-ssa.c (rewrite_vdefs): Dump information about VDEF operators
+ 	promoted to real copies if -fdump-tree-optimized-details is given.
+ 
+ 2003-06-23  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa.c (avail_expr_eq): Verify types are the same before
+ 	handing expressions to operand_equal_p.
+ 
+ 	* tree-cfg.c (make_edges): Remove fake edges before building
+ 	extra edges for TRY_FINALLY_EXPRs.  Delete unnecessary edges
+ 	leaving the TRY block in a TRY_FINALLY_EXPR.
+ 	(find_contained_blocks): Don't consider statements in the CATCH
+ 	clause of a TRY_CATCH_EXPR when noting the last statement in
+ 	the block.
+ 	* tree-dfa.c (remove_phi_arg): If we removed the last PHI argument,
+ 	then remove the entire PHI node.
+ 	* tree-ssa-dce.c (stmt_useful_p): Consider the other EH related
+ 	nodes useful as well (TRY_FINALLY_EXPR, TRY_CATCH_EXPR, and
+ 	EH_FILTER_EXPR).
+ 
+ 	* tree-cfg.c (remove_useless_stmts_and_vars): If the body of a
+ 	TRY_CATCH_EXPR is empty, then the entire TRY_CATCH_EXPR can
+ 	be safely removed.
+ 
+ 	* tree-cfg.c (find_contained_blocks): Renamed from
+ 	find_contained_blocks_and_edge_targets.  Remove targets
+ 	bitmap argument and no longer record targets of edges.
+ 	All callers changed.
+ 	(make_edges): No longer need TRY_TARGETS bitmap.  Kill it.
+ 	Simplify code which creates additional edges out of the TRY
+ 	block and the FINALLY block in a TRY_FINALLY_EXPR.
+ 
+ 2003-06-23  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-alias-common.c (ptr_may_alias_var): Don't handle memory
+ 	tags.
+ 	* tree-dfa.c (struct alias_set_d): Remove.  Update all users.
+ 	(alias_sets): Remove.  Update all users.
+ 	(struct walk_state): Remove field aliased_objects_found.
+ 	(struct alias_map_d): New.
+ 	(addressable_vars): New local variable.
+ 	(pointers): New local variable.
+ 	(add_stmt_operand): Do not force aliased variables to be in virtual
+ 	operands.
+ 	(register_alias_set): Remove.  Update all users.
+ 	(find_alias_for): Remove.  Update all users.
+ 	(get_memory_tag_for): New local function.
+ 	(num_referenced_vars): Remove.
+ 	(num_aliased_objects): Remove.  Update all users.
+ 	(aliased_objects): Remove.  Update all users.
+ 	(aliased_objects_alias_set): Remove.  Update all users.
+ 	(num_call_clobbered_vars): Remove.  Update all users.
+ 	(dump_variable): Move code to dump aliases ...
+ 	(dump_may_aliases_for): ... here.
+ 	(debug_may_aliases_for): New function.
+ 	(compute_may_aliases): Initialize 'addressable_vars' and 'pointers'
+ 	arrays.
+ 	(compute_alias_sets): Re-implement matching pointers with
+ 	addressable variables.  Limit the size of may-alias sets.
+ 	(may_alias_p): Re-implement to compare pointers against variables,
+ 	instead of memory tags.
+ 	(dump_alias_info): Re-implement to display pointers and addresable
+ 	variables arrays.
+ 	(add_referenced_var): Collect addressable variables and pointers.
+ 	Share memory tags among pointers that may alias each other.
+ 	* tree-flow.h (num_referenced_vars): Change to macro.
+ 	(referenced_var): Likewise.
+ 	(num_call_clobbered_vars): Likewise.
+ 	(call_clobbered_var): Likewise.
+ 	(dump_may_aliases_for): Declare.
+ 	(debug_may_aliases_for): Declare.
+ 	* tree-ssa.c (rewrite_vdefs): New local function.
+ 	(rewrite_out_of_ssa): Call it.
+ 
+ 2003-06-23  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-cfg.c (make_edges): Walk TRY_FINALLYs inner to outer and
+ 	simplify creation of special edges related to the TRY_FINALLY_EXPR.
+ 
+ 	* tree-cfg.c (remove_useless_stmts_and_vars): More aggressively
+ 	remove TRY_CATCH_EXPRs and TRY_FINALLY_EXPRs.
+ 
+ 	* tree-cfg.c (make_edges): Remove fake edges.
+ 	(make_exit_edges): Mark edges from nonreturning functions to the
+ 	exit block as being fake edges.
+ 
+ 	* gimplify.c (gimplify_modify_expr): Don't create a new MODIFY_EXPR,
+ 	reuse the existing one.
+ 
+ 2003-06-23  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-cfg.c (find_insert_location): Default case should insert after
+ 	the last stmt in the block.
+ 
+ 2003-06-22  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	* Makefile.in (old-tree-inline.o): Remove rule.
+ 	* old-tree-inline.c: Remove.
+ 
+ 2003-06-19  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-cfg.c (make_ctrl_stmt_edges): Do not create bogus edges
+ 	to the successor block of TRY_CATCH_EXPR, TRY_FINALLY_EXPR,
+ 	CATCH_EXPR or EH_FILTER_EXPR nodes.
+ 
+ 	* gimplify.c (gimplify_modify_expr): If the RHS of an MODIFY_EXPR
+ 	might throw, then make sure its result goes into a temporary.
+ 
+ 	* tree-cfg.c (handle_switch_split): Handle case where target
+ 	block has only one statement (the case label itself).
+ 
+ 2003-06-19  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* doc/invoke.texi: Add documentation for -ftree-dominator-opts
+ 	that was missing from an earlier patch.
+ 
+ 2003-06-19  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	* gimplify.c (gimplify_expr): Handle LABELED_BLOCK_EXPR
+ 	and EXIT_BLOCK_EXPR.
+ 	(gimplify_labeled_block_expr): New function.
+ 	(gimplify_exit_block_expr): New function.
+ 
+ 2003-06-18  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-cfg.c (EDGE_INSERT_LOCATION_BSI_AFTER): New location code.
+ 	(cleanup_switch_expr_graph): Find default case correctly.
+ 	(bsi_insert_after): Get BB from stmt when its avialble.
+ 	(bsi_insert_before): Get BB from stmt when its avialble.
+ 	(handle_switch_fallthru): New. Handle edge from switch to the fallthru.
+ 	(handle_switch_split): Re-implement using new scheme.
+ 	(find_insert_location): Use handle_switch_fallthru ().
+ 	(bsi_insert_on_edge_immediate): Handle EDGE_INSERT_LOCATION_BSI_AFTER.
+ 	* tree-iterator.h (tsi_last): New. Find last stmt in a chain.
+ 
+ 2003-06-17  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-alias-common.c (find_func_aliases): Guard cast op
+ 	properly.
+ 	(ptr_may_alias_var): Small optimization to avoid calling
+ 	decl_function_context so often.
+ 	* tree-alias-ander.c (ander_simple_assign): Ignore if lhs == rhs.
+ 
+ 2003-06-17  Steven Bosscher  <steven@gcc.gnu.org>
+ 
+ 	* timevar.def (TV_TREE_BUILD_FUD_CHAINS): Remove.
+ 
+ 2003-06-16  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-ccp.c (DONT_SIMULATE_AGAIN): Define.
+ 	(visit_phi_node): Don't do anything if the PHI node doesn't need to
+ 	be simulated.
+ 	If the PHI variable does not have real references, consider it
+ 	VARYING.
+ 	If the PHI node has a lattice value of VARYING, set
+ 	DONT_SIMULATE_AGAIN.
+ 	(visit_stmt): Don't do anything if the statement doesn't need to be
+ 	simulated.
+ 	Only visit conditional branches COND_EXPR and SWITCH_EXPR.
+ 	If the statement doesn't produce a result mark it with
+ 	DONT_SIMULATE_AGAIN.
+ 	(visit_assignment): Remove unnecessary def_op() check.
+ 	If the value is VARYING, mark the statement with
+ 	DONT_SIMULATE_AGAIN.
+ 	(visit_cond_stmt): Remove unnecessary is_ctrl_stmt() check.
+ 	If the predicate is VARYING, mark the statement with
+ 	DONT_SIMULATE_AGAIN.
+ 	(initialize): Clear DONT_SIMULATE_AGAIN flag for every statement
+ 	and PHI node.
+ 	(likely_value): Get statement operands after checking if it makes
+ 	aliased loads or has volatile operands.
+ 
+ 2003-06-16  Jeff Law  <law@redhat.com>
+ 	    Jason Merrill  <jason@redhat.com>
+ 
+ 	* except.c (enum eh_region_type): Don't declare the enumeration
+ 	members here.  Instead do it in except.h.
+ 	(expand_eh_hander): Use expr_first instead of open-coding it.
+ 	* except.h (enum eh_region_type): Define the enumeration memebers
+ 	here.
+ 	* tree-cfg.c (last_exec_block): Break out from make_edges.
+ 	(could_trap_p): No longer static.
+ 	(get_eh_region_type): New function.
+ 	(make_try_expr_blocks): Keep the whole TRY_CATCH_EXPR or
+ 	TRY_FINALLY_EXPR instead of just the handler part in the
+ 	EH_STACK varray.  For a cleanup, record which cleanup higher
+ 	in the EH_STACK it can reach.
+ 	(make_edges): Use last_exec_block.
+ 	(make_ctrl_stmt_edges): Thread cleanups as needed.
+ 	(compute_reachable_eh):  Use get_eh_region_type.  Properly
+ 	track when we can skip cleanups.  Skip cleanups when possible.
+ 	* tree-flow.h (could_trap_p): Prototype.
+ 
+ 2003-06-16  Andrew Macleod  <amacleod@redhat.com>
+ 
+ 	* tree-cfg.c (find_insert_location): Check for control_altering stmts,
+ 	and abort if its an unrecognized BB ending stmt.
+ 	(bsi_commit_first_edge_insert): Rename to bsi_insert_on_edge_immediate,
+ 	externalize, and change the interface to an on-demand inserter.
+ 	(bsi_commit_edge_inserts): Call bsi_insert_on_edge_immediate().
+ 	* tree-flow.h (bsi_insert_on_edge_immediate): Prototype.
+ 	* tree-pretty-print.c (dump_block_info): Add 'ab' for abnormal edges.
+ 	* tree-ssa-dce.c (process_worklist): Use sparse bitmaps.
+ 	* tree-ssa-live.c (calculate_live_on_entry): Abort if ssa_name has a
+ 	definition, but is also live on entry.
+ 	* tree-ssa.c (coalesce_ssa_name): Call abort() instead of error(), and
+ 	provide more detailed info.
+ 	(rewrite_out_of_ssa): Provide CFG dumps before and after rewritting.
+ 
+ 2003-06-16  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* tree-mudflap.c (mf_mark): Use GC-compatible htab_create_ggc.
+ 
+ 2003-06-15  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-ccp.c (visit_phi_node): If the PHI is already known
+ 	to be varying, don't recompute its value.
+ 
+ 2003-06-14  Jeff Law  <law@redhat.com>
+ 	    Jason Merrill <jason@redhat.com>
+ 
+ 	* tree-cfg.c (make_blocks): Do not return early if presented
+ 	with an empty statement.
+ 	(make_ctrl_stmt_edges):  Do not try to optimize an empty TRY
+ 	block in a TRY_FINALLY_EXPR.  Simplify TRY_FINALLY_EXPR,
+ 	TRY_CATCH_EXPR, CATCH_EXPR, and EH_FILTER_EXPR now that empty
+ 	statements are no longer shared.
+ 
+ 2003-06-14  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* tree-ssa-pre.c: Fix a comment typo.
+ 
+ 2003-06-13  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (get_stmt_operands): Abort if the statement is a
+ 	variable.
+ 	(create_var_ann): Abort if the variable is not a _DECL node.
+ 
+ 2003-06-13  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* tree-mudflap.c (mudflap_c_function): Change calling conventions so
+ 	as to return the instrumented function body rather than changing the
+ 	given fndecl in place.  Gimplify at the very end, for cosmetic
+ 	reasons.
+ 	* tree-mudflap.h, tree-nomudflap.c: Corresponding changes.
+ 	* c-decl.c (c_expand_body_1): Call mudflap_c_function just before
+ 	rtl expansion of function body; don't interfere with inlining.
+ 
+ 2003-06-13  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-simplify.c: Fix typo in previous change.
+ 
+ 2003-06-13  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-common.c, c-common.h, c-decl.c, c-lang.c, c-simplify.c,
+ 	flags.h, gimplify.c, langhooks-def.h, langhooks.c, langhooks.h,
+ 	simple-break-elim.c, simple-goto-elim.c, toplev.c,
+ 	tree-alias-common.c, tree-cfg.c, tree-dfa.c, tree-dump.c,
+ 	tree-inline.c, tree-mudflap.c, tree-simple.c, tree-simple.h,
+ 	tree-ssa-ccp.c, tree-ssa-pre.c, tree-ssa.c, tree.h, doc/invoke.texi:
+ 	Rename SIMPLE to GIMPLE everywhere.
+ 
+ 2003-06-13  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-cfg.c (bsi_commit_first_edge_insert): Only consider non-abnormal
+ 	edges when determining whether an edge needs to be split.
+ 
+ 	* tree-ssa-dce.c (process_worklist): When checking for GOTO and
+ 	COND_EXPR's that are necessary, check each BB's predecessors only once.
+ 
+ 2003-06-12  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa.c (avail_expr_eq): Add some checking code to
+ 	detect when equal expressions have different hash values.
+ 
+ 	* tree.c (iterative_hash_expr): Don't hash types associated
+ 	with conversions.  Instead hash on the signedness of the
+ 	toplevel object and the operand of the conversion.
+ 
+ 	* Makefile.in (gimplify.o): Depend on $(RTL_H).  Ugh.
+ 	* gimplify.c: Include "rtl.h".
+ 	(simplify_call_expr): Use call_expr_flags and check for ECF_CONST
+ 	rather than checking bits in the tree node directly.
+ 
+ 	* fold-const.c (operand_equal_p): CALL_EXPRs with side effects
+ 	are never equal.
+ 
+ 2003-06-11  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* gcc.c (MFWRAP_SPEC): Always wrap main().
+ 	* tree-mudflap.c (mudflap_enqueue_decl): Mark enqueued decls
+ 	to prevent their repeated processing.
+ 
+ 2003-06-11  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c: add graph_dump_file, graph_dump_flags.
+ 	(finalize_1): Modify to use temporary in expr_info structure,
+ 	remove temporary from arguments.
+ 	Use bsi_insert_on_edge for ephi insertions.
+ 	Set EREF_TEMP on inserted euses.
+ 	(repair_phi_injury): Note (to dump file)  injuries we have
+ 	repaired already.
+ 	(repair_use_injury): Ditto.
+ 	(repair_euse_injury): Ditto.
+ 	(count_stmts_in_bb): Count both forwards and backwards, and make
+ 	sure the numbers agree. This makes sure both the head and end are
+ 	updated properly.
+ 	(code_motion): Use the EREF_TEMP, rather than calculating the
+ 	reaching def, when possible, because it's faster.
+ 	Add the phi we created when we insert the ephi.  We should always
+ 	be able to get the reaching def of the ephi from EREF_TEMP (since
+ 	the args should have already been inserted, or in the case of
+ 	phi's, have a phi already allocated), so abort if we can't.
+ 	(create_expr_ref): Take expr_info parameter.  Make a phi for the
+ 	ephi's, but don't add to the bb yet. Update all callers.
+ 	(get_default_def): New function.
+ 	(get_reaching_def): Use it to find the default def when we hit the
+ 	top of the dom tree.
+ 	(struct expr_info): Add temp.
+ 	(new_rename_1): Dump out occurrences after rename 1, but before
+ 	rename 2.
+ 	(requires_edge_placement): Now that we can insert on edges, we
+ 	shouldn't need this, so make it always return false.
+ 	Will remove unless something bad comes up.
+ 	(pre_expression): Start working on dumping the redundancy graph.
+ 
+ 	* tree.h (struct treeeref_common): Add the temp member.
+ 	Add EREF_TEMP macro.
+ 	(tree_dump_index): Reorder to match actual optimization order.
+ 	Add TDI_predot.
+ 
+ 	* tree-dump.c: Ditto.
+ 
+ 2003-06-11  Jeff Law  <law@redhat.com>
+ 
+ 	* gimplify.c (simplify_call_expr): Clear TREE_SIDE_EFFECTS for
+ 	calls to "const" functions.
+ 
+ 	* tree-inline.c (expand_call_inline): Recalculate TREE_SIDE_EFFECTS
+ 	properly when inlining gimplified functions.
+ 
+ 	* fold-const.c (operand_equal_p): Handle CALL_EXPRs.
+ 
+ 	* tree-cfg.c (first_exec_block): Kill.
+ 	(make_edges): Use bb_for_stmt rather than first_exec_block.
+ 	(make_ctrl_stmt_edges, make_exit_edges): Likewise.
+ 	(make_loop_expr_edges, make_cond_expr_edges): Likewise.
+ 	(successor_block): Don't skip empty statements.
+ 
+ 	* tree-ssa.c (rewrite_and_optimize_stmt): Do not special case
+ 	CALL_EXPRs they're caught by the TREE_SIDE_EFFECTS test.
+ 
+ 	* tree-ssa.c (rewrite_and_optimize_stmt): Improve/correct setting of
+ 	may_optimize_p.  Simplify later code knowing may_optimize_p is
+ 	correctly set.
+ 	(avail_expr_hash): Do not use iterative_hash_object or deal with
+ 	SSA names for real operands.  Instead use iterative_hash_expr
+ 	which handles both.
+ 	(avail_expr_eq): Use operand_equal_p to test for equality.
+ 
+ 2003-06-11  Steven Bosscher  <steven@gcc.gnu.org>
+ 
+ 	* tree-flow.h, tree-ssa-ccp.c, tree-ssa-copyprop.c,
+ 	tree-ssa-dce.c, tree-ssa-live.c, tree-ssa-live.h:
+ 	Convert function prototypes to ISO C.
+ 
+ 2003-06-10  Jeff Law  <law@redhat.com>
+ 
+ 	* toplev.c (parse_options_and_default_flags): Fix typo in last change.
+ 
+ 	* gimplify.c (simplify_expr, case BIT_FIELD_REF): Make sure
+ 	to call recalculate_side_effects after gimplifying the
+ 	operands.
+ 
+ 2003-06-10  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* toplev.c (flag_tree_dom): New variable.
+ 	(f_options): Add new entry for -ftree-dominator-opts.
+ 	(parse_options_and_default_flags): Enable flag_tree_dom for
+ 	-O1 and higher.  At -O2 and higher, disable flag_tree_dom is
+ 	SSA-PRE is also specified.
+ 	* flags.h (flag_tree_dom): Declare.
+ 	* doc/invoke.texi: Document -ftree-dominator-opts.
+ 	* tree-ssa.c (rewrite_block): Disable tracking of available
+ 	expressions when not doing dominator optimizations.
+ 	Call rewrite_stmt when not doing dominator optimizations.
+ 	Otherwise, call rewrite_and_optimize_stmt.
+ 	(rewrite_stmt): Don't optimize the statement.  Just rename.
+ 	(rewrite_and_optimize_stmt): Optimize the statement while rewriting
+ 	its operands.
+ 	(lookup_avail_expr): Update comments.
+ 
+ 2003-06-10  Andrew Haley  <aph@redhat.com>
+ 
+ 	* c-simplify.c (c_simplify_stmt): case ASM_STMT: Ensure qualifiers
+ 	come from input statement.
+ 
+ 2003-06-09  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-cfg.c (handle_switch_split): Update PHI nodes when splitting.
+ 	(tree_split_edge): Update PHI nodes in destination block.
+ 
+ 2003-06-09  Steven Bosscher  <steven@gcc.gnu.org>
+ 
+ 	* basic-block.h, tree-dfa.c, tree-ssa.c, tree-cfg.c,
+ 	tree-flow.h: Convert function prototypes to ISO C.
+ 
+ 2003-06-09  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-cfg.c (bsi_commit_edge_inserts): Fix computation of
+ 	new_blocks.
+ 
+ 2003-06-08  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-cfg.c (handle_switch_split): Don't allocate basic block
+ 	annotations more than once.
+ 	(bsi_commit_first_edge_insert): Likewise.
+ 
+ 2003-06-07  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	* tree-cfg.c (could_trap_p): New function.
+ 	(stmt_ends_bb_p): Handle flag_non_call_exceptions.
+ 	(make_exit_edges): Handle flag_non_call_exceptions.
+ 	(is_ctrl_altering_stmt): Handle flag_non_call_exceptions.
+ 	* tree-inline.c (walk_tree): Add case for CHAR_TYPE.
+ 	* tree-ssa-dce.c (stmt_useful_p): Keep all CATCH_EXPRs.
+ 
+ 2003-06-05  Jason Merrill  <jason@redhat.com>
+ 
+ 	* stmt.c (asm_op_is_mem_input): New fn.
+ 	* tree.h: Declare it.
+ 	* gimplify.c (simplify_asm_expr): Call resolve_asm_operand_names.
+ 	Use is_simple_modify_expr_lhs for mem input ops.
+ 
+ 2003-06-05  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* c-mudflap.c (mflang_register_call): Give the synthetic decl
+ 	undefined (not zero) size.
+ 
+ 2003-06-05  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* tree-mudflap.c (mx_flag): Remove.  Update callers to use mf_mark.
+ 	(TREE_MUDFLAPPED_P): Remove.  Update callers to use mf_marked_p.
+ 	(mf_mark, mf_marked_p): Replacement functions to replace old node
+ 	marking based on tree flag-bits.
+ 	(mf_mostly_copy_tree_r): Preserve markedness across copies.
+ 	* tree-mudflap.h: Add new decls
+ 	* c-mudflap.c (mx_flag): Remove.  Update callers to use mf_mark.
+ 
+ 2003-06-04  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (add_stmt_operand): Always consider non-scalar types
+ 	virtual operands.
+ 
+ 2003-06-04  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* toplev.c (parse_options_and_default_flags): Turn tree_copyprop on by
+ 	default.
+ 	* tree-cfg.c (linearize_control_structures, linearize_cond_expr,
+ 	replace_stmt, merge_tree_blocks, remap_stmts): Fix PROTOS.
+ 	(find_insert_location): Add additional basic block parameter. Handle
+ 	switch stmts.
+ 	(handle_switch_split): New. Split edges to switch labels.
+ 	(bsi_commit_first_edge_insert): Add extra parameter to
+ 	find_insert_location call. Fix split block chaining in THEN & ELSE.
+ 	* tree-ssa-live.c (calculate_live_on_entry): Process all PHI def's
+ 	after all the arguments have been processed.
+ 	* tree-ssa.c (struct ssa_stats_d, struct loops *loops, var_is_live,
+ 	rewrite_into_ssa): Remove old UNSSA code.
+ 	(rewrite_block): Remove stmt is rewrite_stmt returns 1.
+ 	(assign_vars): Remove abort and enable overlapping live ranges.
+ 	(replace_variable): New. Replace SSA name with the partition variable.
+ 	(rewrite_out_of_ssa): Use replace_variable().
+ 	(dump_tree_ssa_stats): Remove old UNSSA code.
+ 	(rewrite_stmt): Return 1 if stmt should be deleted. Remove old
+ 	UNSSA code.
+ 
+ 2003-06-03  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* gimplify.c (simplify_call_expr): Move code to mark MD builtins
+ 	non-simplifiable...
+ 	* tree-simple.c (is_simple_call_expr): ... here.
+ 
+ 2003-06-03  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-parse.in: Fix botched merge.
+ 
+ 2003-06-03  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-mudflap.c (MARK_TREE_MUDFLAPPED, TREE_MUDFLAPPED):
+ 	Use TREE_VISITED instead of TREE_BOUNDED.
+ 	* c-mudflap.c (TREE_MUDFLAPPED): Likewise.
+ 	* tree-pretty-print.c (dump_generic_node): Remove
+ 	references to TYPE_QUAL_BOUNDED.
+ 
+ 2003-06-03  Jason Merrill  <jason@redhat.com>
+ 
+ 	* gimplify.c (simplify_cond_expr): Call truthvalue_conversion
+ 	before invert_truthvalue.
+ 
+ 2003-06-02  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-dfa.c (compute_may_aliases): Call delete_alias_vars whenever we
+ 	call create_alias_vars.
+ 
+ 	* tree-alias-common (ptr_may_alias_var): Cleanup determination of
+ 	global vars and whatnot.
+ 
+ 2003-06-02  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (tree-ssa.o, tree-cfg.o): Add dependency on cfgloop.h
+ 	(tree-optimize.o): Remove dependency on cfgloop.h.
+ 	* basic-block.h (struct basic_block_def): Fix documentation for
+ 	field 'loop_father'.
+ 	* tree-dfa.c (add_referenced_var): Fix type of element
+ 	pushed into aliased_objects_alias_set.
+ 	* tree-optimize.c: Don't include cfgloop.h
+ 	(optimize_function_tree): Move code to initialize loop optimizer...
+ 	* tree-cfg.c (build_tree_cfg): ... here.
+ 	* tree-ssa.c: Include cfgloop.h.
+ 	(loops): New file local variable.
+ 	(rewrite_into_ssa): Initialize/finalize loop optimizer.
+ 	(rewrite_stmt): Call var_is_live when processing redundant
+ 	assignments to the same LHS.
+ 	(var_is_live): Add heuristic to discover overlapping definitions in
+ 	loops that do not have PHI nodes for VAR at the loop header.
+ 
+ 2003-06-02  Jason Merrill  <jason@redhat.com>
+ 
+ 	* gimplify.c (simplify_expr): Only allow a cast from a 'val'.
+ 	* tree-simple.c (is_simple_cast): Likewise.
+ 
+ 2003-06-02  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-cfg.c (bsi_insert_before): Update end of block pointer if we
+ 	inserted before the last stmt in a block. (The container changed).
+ 	* tree-ssa.c (elim_backward): Inserting copy should be within
+ 	conditional check.
+ 	(elim_create): Only select one bit instead of the all.
+ 
+ 2003-06-01  Jason Merrill  <jason@redhat.com>
+ 
+ 	* Makefile.in: Remove lots of -Wno-error targets.
+ 
+ 	* tree-simple.c (recalculate_side_effects): Check TREE_THIS_VOLATILE.
+ 
+ 	* gimplify.c (simplify_compound_lval): Call
+ 	recalculate_side_effects on each of the subexpressions.
+ 
+ 	* expr.c (expand_expr) <COND_EXPR>: Use the if-statement code if
+ 	it's void.
+ 
+ 2003-06-01  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-alias-common.c: Remove setting of DECL_CONTEXT in temp vars,
+ 	it's done in create_tmp_alias_var for us.
+ 	(ptr_may_alias_var): Check if the variables are memory tags, and get
+ 	the associated pointers if they are.
+ 
+ 2003-05-30  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* tree-mudflap.c (mudflap_c_function, enqueue_constant, enqueue_decl):
+ 	Rework dumping logic.
+ 
+ 2003-05-27  Jason Merrill  <jason@redhat.com>
+ 
+ 	* tree-ssa.c (avail_expr_hash): Simplify by using iterative_hash_expr
+ 	in more places.
+ 	* tree.c (iterative_hash_expr): Handle SSA_NAME.
+ 
+ 2003-05-29  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa.c (rewrite_stmt): Detect and remove redundant
+ 	memory loads.
+ 	(avail_expr_hash): Use iterative_hash_expr, not iterative_hash_object
+ 	as needed.
+ 
+ 2003-05-27  Jason Merrill  <jason@redhat.com>
+ 
+ 	* gimplify.c (shortcut_cond_expr): Avoid jumps to jumps.
+ 
+ 2003-05-26  Jason Merrill  <jason@redhat.com>
+ 
+ 	* c-simplify.c (simplify_switch_stmt): A SWITCH_EXPR also gets the
+ 	source location of its first line.
+ 
+ 2003-05-24  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	Do not consider INDIRECT_REF nodes to be variables.
+ 
+ 	* gimplify.c (create_tmp_alias_var): Allow temporaries of
+ 	ARRAY_TYPE to be created.
+ 	Create new temporaries with function scope.
+ 	Don't call build_type_variant.
+ 	Mark the temporary volatile if its type is volatile.
+ 
+ 	* tree-dfa.c: Change every function that received a variable and
+ 	its base symbol to just receive the variable.  Update all callers.
+ 	(struct alias_set_d): Remove field 'tag_sym'.
+ 	Add documentation for fields.
+ 	(struct walk_state): Add field 'is_indirect_ref'.
+ 	Add documentation for fields.
+ 	(opf_ignore_bp): Remove.  Update all users.
+ 	(aliased_objects_base): Remove.  Update all users.
+ 	(get_stmt_operands): If the statement had virtual operands, do not
+ 	scan them again.
+ 	(get_expr_operands): Handle INDIRECT_REF nodes by adding an operand
+ 	for the memory tag represented and a use for the base pointer.
+ 	Don't add VUSE operands for pointer arguments to functions.
+ 	Force a virtual operand when processing ADDR_EXPR nodes.
+ 	(add_stmt_operand): If the variable is an alias tag, always add it
+ 	as a virtual operand.
+ 	Remove code to handle INDIRECT_REF nodes.
+ 	Move code to determine if a pointer may point to global memory to
+ 	find_vars_r.
+ 	Set has_volatile_ops flag in the statement when adding operands for
+ 	globals and local statics.
+ 	If the variable is an alias tag, mark the statement as making
+ 	aliased loads or stores.
+ 	(set_def): Mark the variable as having real references.
+ 	(add_use): Likewise.
+ 	(add_vdef): Remove code to re-add previous virtual operands.
+ 	If PREV_VOPS is set, don't add a new virtual operand.
+ 	(add_vuse): Likewise.
+ 	(dump_variable): Show annotation bitfields 'mem_tag',
+ 	'occurs_in_abnormal_phi', 'is_alias_tag' and 'is_stored'.
+ 	(compute_may_aliases): Initialize walk_state.is_indirect_ref to 0.
+ 	(compute_alias_sets): Don't remove alias sets with exactly one
+ 	entry.
+ 	(register_alias_set): Re-implement to support memory tags instead
+ 	of INDIRECT_REF nodes.  Document algorithm.
+ 	(find_alias_for): Likewise.
+ 	(may_alias_p): Likewise.
+ 	(add_may_alias): Likewise.
+ 	(find_vars_r): If a pointer assignment is found and the RHS of the
+ 	assignment may access global memory, mark the pointer as pointing
+ 	to global memory.
+ 	Handle INDIRECT_REF nodes by marking the base pointer as
+ 	dereferenced.
+ 	Do not share INDIRECT_REF nodes.
+ 	(add_referenced_var): Don't handle INDIRECT_REF nodes.
+ 	If called from a store operation, mark the variable as stored.
+ 	By default mark the variable as not having real references.
+ 	When processing a pointer that has been dereferenced, create a
+ 	memory tag for the pointer.
+ 	(add_indirect_ref_var): Remove.  Update all callers.
+ 	(get_virtual_var): Don't handle INDIRECT_REF nodes.
+ 	(find_hidden_use_vars_r):
+ 
+ 	* tree-flow-inline.h (get_var_ann): New function.  Change all
+ 	functions that called var_ann and create_var_ann to call
+ 	get_var_ann.
+ 	(get_stmt_ann): Likewise.
+ 	(set_indirect_ref): Remove.  Update all callers.
+ 	(indirect_ref): Remove.  Update all callers.
+ 	(create_indirect_ref): Remove.  Update all callers.
+ 
+ 	* tree-flow.h (struct var_ann_d): Remove fields 'is_loaded',
+ 	'unused' and 'indirect_ref'.
+ 	Add fields 'mem_tag', 'is_mem_tag', 'is_alias_tag' and
+ 	'has_real_refs'.
+ 	(get_var_ann, get_stmt_ann): Declare.
+ 	(create_indirect_ref, set_indirect_ref, indirect_ref): Remove.
+ 
+ 	* tree-pretty-print.c (dump_generic_node): Don't handle
+ 	INDIRECT_REF nodes inside SSA_NAME nodes.
+ 
+ 	* tree-simple.c (get_base_symbol): Don't handle INDIRECT_REF nodes.
+ 	(is_simple_unary_expr): Don't call STRIP_NOPS.
+ 
+ 	* tree-ssa-copyprop.c (get_original): Don't handle INDIRECT_REF
+ 	nodes.  Allow pointers to be copy propagated.
+ 
+ 	* tree-ssa-dce.c (need_to_preserve_store): Don't handle
+ 	INDIRECT_REF nodes.
+ 
+ 	* tree-ssa-live.c (create_ssa_var_map): Only process variables that
+ 	have real references.
+ 
+ 	* tree-ssa.c: Update documentation regarding INDIRECT_REF nodes.
+ 	(update_indirect_ref_vuses): Remove.  Update all users.
+ 	(update_pointer_vuses): Remove.  Update all users.
+ 	(MAY_COPYPROP_P): Remove.  Update all users.
+ 	(create_temp): Don't handle INDIRECT_REF nodes.
+ 	(coalesce_ssa_name): Ignore variables that have no real references.
+ 	(rewrite_stmt): Mark the statement modified if a new copy or
+ 	constant was propagated into it.
+ 	Don't special-case pointers.
+ 	(rewrite_operand): Don't handle INDIRECT_REF nodes.
+ 	* tree.h (SSA_VAR_P): Remove.  Update all users.
+ 	(SSA_DECL_P): Rename to SSA_VAR_P.
+ 
+ 2003-05-22  Jeff Law  <law@redhat.com>
+ 
+ 	* gimplify.c (simplify_expr): Avoid gimplifying expressions which
+ 	are already in gimple form.
+ 	* tree-simple.c (is_simple_constructor): No longer treat TREE_STATIC
+ 	constructors specially.
+ 	(is_simple_addr_expr_arg): If we're taking the address of a label
+ 	for the first time, then the ADDR_EXPR is not in gimple form.
+ 
+ 2003-05-22  Jason Merrill  <jason@redhat.com>
+ 
+ 	* tree-cfg.c (compute_reachable_eh): Don't skip cleanups.
+ 
+ 	* tree-dfa.c (add_referenced_var): Read-only INDIRECT_REFs can
+ 	also be clobbered by function calls.
+ 
+ 2003-05-22  Jeff Law  <law@redhat.com>
+ 
+ 	* expr.c (convert_move): Avoid making silly copies.
+ 	(expand_expr, case BIND_EXPR): Correctly determine when the
+ 	result of the BIND_EXPR will not be used.
+ 
+ 2003-05-21  Jason Merrill  <jason@redhat.com>
+ 
+ 	* tree-cfg.c (compute_reachable_eh): Handle multiple CATCH_EXPRs.
+ 
+ 	* builtins.c (simplify_builtin_next_arg): Split out from...
+ 	(expand_builtin_next_arg): ...here.
+ 	(simplify_builtin_va_start): Split out from...
+ 	(expand_builtin_va_start): ...here.
+ 	(simplify_builtin): Call it.
+ 	* gimplify.c (simplify_call_expr): If simplify_builtin worked,
+ 	just return.
+ 
+ 2003-05-20  Jason Merrill  <jason@redhat.com>
+ 
+ 	* gimplify.c (shortcut_cond_expr, shortcut_cond_r): Rewrite.
+ 	(simplify_cond_expr): Also invert ifs with no 'then'.
+ 	(build_and_jump): New fn, split out from...
+ 	(gimplify_exit_expr): ...here.  Don't bother gimplifying the
+ 	condition.
+ 
+ 	* gimplify.c (simplify_save_expr): Add post-effects to the
+ 	postqueue.
+ 
+ 	* gimplify.c (mostly_copy_tree_r): Don't unshare constants.
+ 
+ 2003-05-20  Jeff Law  <law@redhat.com>
+ 
+ 	* expr.c (expand_expr, case COND_EXPR): Avoid useless RTL generation
+ 	when the THEN or ELSE arm is empty.
+ 
+ 	* tree-cfg.c (make_loop_expr_blocks): Do not accept next_block_link
+ 	as an argument, make it a local variable.  Callers changed.
+ 
+ 	* tree-cfg.c (remove_useless_stmts_and_empty_vars): Eliminate
+ 	GOTO_EXPRs which jump to the next statement occuring in an
+ 	outer control/block structure nest.
+ 
+ 2003-05-20  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-ccp.c (set_rhs): Fix typo in handling of
+ 	RETURN_EXPR nodes.
+ 
+ 2003-05-19  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-alias-common.c (alias_get_name): Handle unnamed variables once
+ 	and for all.
+ 
+ 2003-05-19  Jeff Law <law@redhat.com>
+ 
+ 	* tree-ssa-dce.c (remove_conditional): If the conditional's block
+ 	has no post dominator in the CFG, then wire it to the exit node.
+ 	Avoid unnecessary check of bb->succ.
+ 
+ 2003-05-17  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-pretty-print.c (MASK_POINTER): Parameter is P, not node.
+ 
+ 2003-05-17  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-alias-common.c (get_alias_var): Handle REFERENCE_EXPR.
+ 	(find_func_aliases): Ditto.
+ 	(get_alias_var): Use POINTER_TYPE_P.
+ 
+ 2003-05-16  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* gcc.c (cc1_options): Correct "-fmudflapth" handling.
+ 	* tree-mudflap.c (mudflap_c_function, mf_build_check_statement_for):
+ 	Use locally cached mask/shift values only in single-threaded mode.
+ 
+ 2003-05-16  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-alias-common.c (ptr_may_alias_var): Fix DECL_CONTEXT
+ 	checking.
+ 
+ 2003-05-16  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-flow.h (ssa_make_edge): Remove prototype.
+ 	* tree-ssa-dce.c (remove_dead_stmt): Change comment about removing
+ 	conditionals.
+ 	(remove_conditional): Don't update PHI nodes or call ssa_make_edge.
+ 	* tree-ssa.c (ssa_make_edge): Remove.
+ 
+ 2003-05-16  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-cfg.c (remove_useless_stmts_and_vars): Handle case where
+ 	both arms of an if-then-else simply jump to the same location.
+ 
+ 	* tree-ssa-ccp.c (get_rhs): Correctly handle MODIFY_EXPR embedded in
+ 	a RETURN_EXPR.
+ 	(set_rhs): Likewise.
+ 
+ 2003-05-15  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+ 
+ 	* Makefile.in (regmove.o-warn): Change to -Wno-error.
+ 
+ 2003-05-15  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-cfg.c (enum find_location_action): Enum for find_insert_location.
+ 	(bsi_insert_before): Handle insert at start of a BB and update pointers
+ 	from parents if appropriate.
+ 	(find_insert_location): Handle COND_EXPR properly. Return
+ 	an enum type indicating what action to take on the returned value.
+ 	(bsi_commit_first_edge_insert): Use new returned action.
+ 
+ 2003-05-15  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-cfg.c (make_edges): Factor out loop invariants from
+ 	code to insert edges from the TRY to the FINALLY block.
+ 	Avoid creating unnecessary edges from the end of the
+ 	FINALLY block back to the start of the FINALLY block.
+ 
+ 2003-05-15  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa.c (rewrite_out_of_ssa): Undo previous patch.
+ 
+ 2003-05-15  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa.c (rewrite_out_of_ssa): Don't dump the optimized
+ 	function after the SSA->normal pass.
+ 
+ 2003-05-14  Toon Moene  <toon@moene.indiv.nluug.nl>
+ 
+ 	* Makefile.in: Add additional -Wno-error targets for Alpha.
+ 
+ 2003-05-13  Jason Merrill  <jason@redhat.com>
+ 
+ 	* gdbinit.in (pgs, pge): New macros.
+ 
+ 	Implement expression temporary optimization.
+ 	* gimplify.c (gimplify_ctx): Add temp_htab field.
+ 	(push_gimplify_context): Initialize it.
+ 	(pop_gimplify_context): Destroy it.
+ 	(simplify_expr): If there's no internal postqueue, generate an
+ 	expression temporary.
+ 	(gimple_tree_hash, gimple_tree_eq): New fns.
+ 	(create_tmp_from_val, lookup_tmp_var): New fns.
+ 	(get_formal_tmp_var): New fn.
+ 	(internal_get_tmp_var): New fn.
+ 	(get_initialized_tmp_var): Use it.
+ 	* tree-simple.h: Declare it.
+ 
+ 	* gimplify.c (simplify_cond_expr): Reorganize.
+ 	(shortcut_cond_expr, shortcut_cond_r): New fns.
+ 	(build_and_jump): New fn.
+ 	(gimplify_exit_expr): Use it.
+ 
+ 	* gimplify.c (simplify_expr): Do better at stripping unnecessary
+ 	NOPs.  Tidy GOTO_EXPR handling.  Don't allow NON_LVALUE_EXPR.
+ 	* tree-simple.c (is_simple_modify_expr): Don't allow NON_LVALUE_EXPR.
+ 	(is_simple_binary_expr, is_simple_condexpr): Likewise.
+ 	(is_simple_unary_expr, is_simple_compound_lval): Likewise.
+ 	(is_simple_id): Likewise.
+ 
+ 	* tree-ssa.c (rewrite_stmt): Discard redundant assignments.
+ 	(avail_expr_eq): Don't test ops1 == ops2.
+ 	(avail_expr_hash): Use iterative_hash_object.
+ 
+ 2003-05-13  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-cfg.c (cleanup_tree_cfg): Update comments.   Set repeat
+ 	anytime we remove a control structure.
+ 
+ 	* tree-flow.h (struct var_ann_d): New field occurs_in_abnormal_phi.
+ 	* tree-ssa.c (MAY_COPYPROP_P): Do not allow copy propagations
+ 	if either argument occurs in an abnormal phi.
+ 	* tree-dfa.c (add_phi_arg): Set occurs_in_abrnomal_phi as needed.
+ 	* tree-ssa-copyprop.c (copyprop_stmt): Do not allow copy
+ 	propagations if either argument occurs in an abnormal phi.
+ 	(copyprop_phi): Likewise.
+ 
+ 2003-05-12  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-common.h (STATEMENT_CODE_P): Use size_t cast instead
+ 	of int.
+ 	(INIT_STATEMENT_CODES): Change type of local variable i to
+ 	size_t.
+ 
+ 2003-05-12  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-pretty-print.c (dump_c_node): Call CONSTRUCTOR_ELTS
+ 	to access the operand of a CONSTRUCTOR node.
+ 	* tree-pretty-print.c (dump_generic_node): Likewise.
+ 
+ 2003-05-11  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-simplify.c (simplify_if_stmt): Replace calls to
+ 	warning_with_file_and_line with warning.
+ 
+ 2003-05-12  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* toplev.c (lang_independent_options): Add "-fmudflapth".
+ 	* flags.h (flag_mudflap): Document meaning of >1 value.
+ 	* gcc.c (MFWRAP_SPEC, MFLIB_SPEC): Add -fmudflapth support.
+ 	(cpp_unique_options, cc1_options): Ditto.
+ 
+ 2003-05-10  Sebastian Pop  <s.pop@laposte.net>
+ 
+ 	* gimplify.c (simplify_expr): Replace CONST_DECL with its DECL_INITIAL.
+ 
+ 2003-05-09  Sebastian Pop  <s.pop@laposte.net>
+ 
+ 	* tree-optimize.c (optimize_function_tree): Clarify the use of the
+ 	loop analyzer.
+ 
+ 2003-05-09  Jeff Law  <law@redhat.com>
+ 
+ 	* c-simplify.c (simplify_cleanup): Remove code which optimizes
+ 	TRY_FINALLY and TRY_CATCH.  It doesn't trigger.
+ 
+ 	* tree-cfg.c (remove_useless_stmts_and_vars): Optimize away
+ 	TRY_CATCH and TRY_FINALLY blocks when possible.
+ 
+ 2003-05-09  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-pretty-print.c (dump_generic_node): CONSTRUCTOR
+ 	nodes have only one operand now.
+ 
+ 2003-05-08  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-cfg.c (pdom_info): New file level static.
+ 	(cleanup_tree_cfg): Free dominance info, if it was used.
+ 	(bsi_replace): New. Replace a stmt with a new one.
+ 	(linearize_cond_expr): Use post dominator info to determine is a
+ 	conditional can be safely removed.
+ 	(find_insert_location): New. Determine where to insert a new stmt that
+ 	is placed on a split edge.
+ 	(bsi_commit_first_edge_insert): Use find_insert_location to determine
+ 	where to link a stmt when splitting an edge.
+ 	(merge_tree_blocks): When deleting a basic block, remove it from the
+ 	dominance structure if it exists.
+ 	* tree-dfa.c (add_stmt_operand): Don't rename local statics. Treat
+ 	them just like globals.
+ 	* tree-flow.h (struct var_ann_d): Add root_var_processed bit and
+ 	root_index fields.
+ 	* tree-ssa-dce.c (process_worklist): Mark conditions feeding PHI's as
+ 	necessary as well.
+ 	(remove_dead_phis): Add missing debug information.
+ 	* tree-ssa-live.c (var_union): Handle combining partitions when one
+ 	has a root_variable as a representative.
+ 	(compact_var_map): Add comments and use flags.
+ 	(init_root_var): Use new root_var fields in struct var_ann_d.
+ 	(dump_root_var): Send output to specified file, not stderr.
+ 	(dump_var_map): Remove dump_flag parameter & some grotesque debug info.
+ 	* tree-ssa-live.h (VAR_ANN_ROOT_INDEX): Define.
+ 	(VARMAP_NORMAL, VARMAP_NO_SINGLE_DEFS): Define flags for compact_var_map.
+ 	(var_to_partition_to_var): Return NULL if not in a partition.
+ 	(find_root_var): Use VAR_ANN_ROOT_INDEX.
+ 	* tree-ssa.c (insert_copy_on_edge): Add listing info.
+ 	(coalesce_ssa_name): Coalesce live-on-entry variables to their root.
+ 	Coalesce partitions across abnormal edges.
+ 	(assign_vars): Remove redundant initialization code. Handle root_vars
+ 	which have already been coalesced to a partition.
+ 	(rewrite_out_of_ssa): Add debug info & remove PHI nodes when processed.
+ 	(rewrite_stmt): Don't redefine redundant expressions.
+ 
+ 2003-05-08  Jeff Law  <law@redhat.com>
+ 
+ 	* c-simplify.c (simplify_expr_stmt): Make sure to
+ 	simplify the body of the EXPR_STMT.
+ 
+ 	* tree-dfa.c (remove_decl): Accept new argument for the block
+ 	to start the search.
+ 	* tree-flow.h (remove_decl): Update prototype.
+ 	* tree-cfg.c (remove_stmt): Pass the toplevel block to
+ 	remove_decl.
+ 
+ 	* tree-dfa.c (find_hidden_use_vars): No longer returns a value.
+ 	Callers and prototype updated.  No longer need to look for
+ 	nested functions, instead just mark any variables and
+ 	parameters with DECL_NONLOCAL set as having hidden uses.
+ 
+ 2003-05-08  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* version.c (version_string): Change format to show daily
+ 	datestamp and merged date.
+ 
+ 2003-05-07  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-cfg.c (remove_useless_stmts_and_vars): Do not remove
+ 	the toplevel BIND_EXPR for an inlined function.
+ 
+ 	* tree-dfa.c (find_hidden_use_vars): Look at the size of
+ 	VAR_DECLs, not the size of ARRAY_TYPES.  Also make sure
+ 	to reset *inside_vla to its original value when done
+ 	processing any particular VAR_DECL.
+ 
+ 2003-05-06  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-simplify.c (simplify_if_stmt): Warn if
+ 	-Wunreachable-code is given and the conditional is always
+ 	true or always false.
+ 
+ 	* expr.c (expand_expr): Don't try to expand FUNCTION_DECL
+ 	nodes when processing BIND_EXPR_VARS.
+ 
+ 	* varasm.c (output_constant_def_contents): Re-use the
+ 	label when emitting a label for mudflap.
+ 
+ 	Disable the following patch:
+ 
+ 	2003-04-30  Steven Bosscher  <steven@gcc.gnu.org>
+ 
+ 		* ggc-page.c (TREE_EXP_SIZE): Define.
+ 		(extra_order_size_table): New entry for expr trees with
+ 		two operands.
+ 
+ 2003-05-06  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-cfg.c (make_exit_edges): Fix handling of blocks which
+ 	end with calls.
+ 
+ 	* tree-cfg.c (remove_useless_stmts_and_vars): Remove GOTO_EXPRs
+ 	to the immediately following tree node.
+ 
+ 	* tree-cfg.c (make_goto_expr_edges): Fix typo in comment.
+ 	(remove_useless_stmts_and_vars): New function.
+ 	* tree-flow.h (remove_useless_stmts_and_vars): Prototype.
+ 	* tree-ssa.c (rewrite_out_of_ssa): After returning to normal
+ 	form, call remove_useless_stmts_and_vars.
+ 
+ 2003-05-02  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-alias-common.c (alias_get_name): Given unnamed result decls
+ 	a name.
+ 	(create_fun_alias_var): Use DECL_RESULT if available.
+ 
+ 2003-05-02  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-inline.c (expand_call_inline): Avoid creating naked
+ 	_DECL nodes for inlined functions which had NRV optimizations
+ 	applied.
+ 
+ 2003-05-02  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-cfg.c (build_tree_cfg): Update comment.
+ 	(make_blocks): Don't skip over empty statements.
+ 	Move exception handling code ...
+ 	(compute_reachable_eh): ... here.
+ 	(set_parent_stmt): Don't skip over empty statements.
+ 	(bsi_remove): Don't return early on empty statements.
+ 	Don't call STRIP_NOPS.
+ 	(remove_stmt): Don't call STRIP_NOPS.
+ 	Always compute the block holding the statement.
+ 	After replacing the statement with an empty statement, add the
+ 	empty statement to the block.
+ 	(successor_block): Don't call STRIP_NOPS.
+ 	(first_exec_stmt): Likewise.
+ 	(first_exec_block): Don't return early for empty statements.
+ 	(first_stmt): Don't test for NULL blocks.
+ 	Reformat to improve legibility.
+ 	(bsi_next_in_bb): Don't call STRIP_NOPS.
+ 	Reformat to improve legibility.
+ 	(set_bb_for_stmt): Don't ignore empty statements.
+ 
+ 	* tree-dfa.c (get_stmt_operands): Don't call STRIP_NOPS.
+ 	(create_stmt_ann): Don't abort on emtpy statements.
+ 	Don't call STRIP_NOPS.
+ 	(copy_stmt): Remove unused function.
+ 	* tree-flow.h (copy_stmt): Remove prototype.
+ 
+ 	* tree-flow-inline.h: Don't call STRIP_NOPS.
+ 	Remove local variable 't'.
+ 	(bsi_stmt): Don't return NULL_TREE for empty statements.
+ 	Ignore error_mark_node.
+ 
+ 	* tree-iterator.h (tsi_next): Don't call STRIP_NOPS.
+ 	(tsi_stmt_ptr): Likewise.
+ 	(tsi_stmt): Likewise.
+ 	Don't return NULL_TREE for empty statements.
+ 
+ 	* tree-pretty-print.c (dump_generic_node): Don't ignore empty
+ 	statements.
+ 
+ 	* tree-ssa-ccp.c (fold_stmt): Don't call STRIP_NOPS.
+ 	* tree-ssa-dce.c (find_useful_stmts): Likewise.
+ 	(remove_dead_stmt): Likewise.
+ 	* tree-ssa.c (mark_def_sites): Likewise.
+ 	(rewrite_out_of_ssa): Likewise.
+ 	(rewrite_stmt): Likewise.
+ 
+ 	* tree.c (make_ssa_name): Don't ignore empty statements.
+ 	(body_is_empty): Fix comment.
+ 
+ 2003-05-01  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-dfa.c (find_hidden_use_vars): Renamed from find_vla_decls.
+ 	Now returns a value indicating if nested function was found.
+ 	When nested functions are found, mark suitable variables as
+ 	having hidden uses.
+ 	(find_hidden_use_vars_r): Renamed from find_vla_decls_r.
+ 	(compute_may_alias): Corresponding changes.  Handle
+ 	multiple BLOCKs at the toplevel of a function.
+ 
+ 2003-04-30  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree.c (build_empty_stmt): New function.
+ 	* tree.h (IS_EMPTY_STMT): Define.
+ 	(TI_EMPTY_STMT): Remove.
+ 	(empty_stmt_node): Remove.
+ 	Replace 'X = empty_stmt_node' with 'X = build_empty_stmt ()',
+ 	and 'X == empty_stmt_node' with 'IS_EMPTY_STMT (X)' everywhere.
+ 	(build_empty_stmt): Declare.
+ 
+ 	* cp/cp-simplify.c (cp_simplify_stmt): Use IS_EMPTY_STMT.
+ 
+ 	* java/java-tree.h (build_java_empty_stmt): Declare.
+ 	* java/expr.c (build_java_empty_stmt): New function.
+ 	* java/decl.c (java_init_decl_processing): Don't build empty_stmt_node.
+ 	Replace 'X = empty_stmt_node' with 'X = build_java_empty_stmt ()',
+ 	and 'X == empty_stmt_node' with 'IS_EMPTY_STMT (X)' everwhere.
+ 
+ 2003-04-30  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-dfa.c (get_expr_operands): Do not ignore operands of an
+ 	an ADDR_EXPR if it is a PARM_DECL or VAR_DECL.
+ 
+ 	* tree-dfa.c (get_expr_operands): Look inside operands in
+ 	a TREE_LIST.
+ 
+ 2003-04-29  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* builtins.def (BUILTIN_CONSTANT_P): Mark as constant.
+ 
+ 	* tree-dfa.c (get_expr_operands): Do not add VDEF operands for
+ 	dereferenced pointers at call sites.
+ 	* tree-ssa.c (assign_vars): Abort if we couldn't coalesce all the
+ 	versions together.
+ 
+ 2003-04-29  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-cfg.c (bsi_start): If there are no stmts in a block, use the
+ 	context pointer to represent the basic block.
+ 	(bsi_insert_after): Handle inserting into empty blocks better.
+ 	(bsi_insert_before): Call bsi_insert_after to handle empty blocks.
+ 	* tree-ssa.c (elim_create): Clear bitmap after its been processed
+ 	instead of during loop.
+ 
+ 2003-04-27  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (tree-mudflap.o): Add dependency on $(TREE_DUMP_H).
+ 	* c-decl.c (c_expand_body_1): Don't call simplify_function_tree
+ 	after mudflap_c_function.
+ 	Move mudflap instrumentation after SSA optimizers.
+ 	* tree-dump.c (dump_files): Add entry for -fdump-tree-mudflap.
+ 	* tree.h (enum tree_dump_index): Add TDI_mudflap.
+ 	* doc/invoke.texi: Document -fdump-tree-mudflap.
+ 	* tree-mudflap.c: Include tree-dump.h.
+ 	(dump_file): New local variable.
+ 	(dump_flags): New local variable.
+ 	(mudflap_c_function): Call dump_begin, dump_end and dump_function.
+ 	(mf_decl_cache_locals): Set DECL_CONTEXT for __mf_lookup_shift_l
+ 	and __mf_lookup_mask_l to current_function_decl.
+ 	(mf_offset_expr_of_array_ref): Likewise for __mf_index_X.
+ 	(mf_build_check_statement_for): Re-implement to emit a proper
+ 	STMT_EXPR.
+ 	(mx_xfn_indirect_ref): Emit detailed debugging info if
+ 	-fdump-tree-mudflap-details is given.
+ 	(mudflap_enqueue_decl): Likewise
+ 	* tree-optimize.c (optimize_function_tree): Don't check for
+ 	-fmudflap.
+ 
+ 2003-04-26  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-simplify.c (build_bc_goto): If the target label couldn't be
+ 	found, emit an error message.
+ 
+ 2003-04-25  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-ssa-live.c (compact_var_map): Add parameter to exclude variables
+ 	with a single SSA version.
+ 	(init_root_var): Allow that a var_map might not be compacted yet.
+ 	* tree-ssa-live.h (compact_var_map): Change Prototype.
+ 	* tree-ssa.c (rewrite_out_of_ssa): When coalescing, don't include single
+ 	reference variables during the compaction.
+ 
+ 2003-04-25  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-optimize.c (optimize_function_tree): Simplify slightly.
+ 
+ 2003-04-25  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-ssa.c (struct _elim_graph): Change type of fields
+ 	'pred' and 'succ' to be bitmaps instead of sbitmaps.
+ 	Update all uses.
+ 
+ 2003-04-25  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-cfg.c (linearize_cond_expr): Reformat.
+ 	* tree-dfa.c (get_expr_operands): Check for read-only
+ 	status the dereferenced argument pointer, not the pointer
+ 	itself.
+ 	(add_stmt_operand): Always consider global variables as
+ 	virtual operands.
+ 
+ 2003-04-24  Jason Merrill  <jason@redhat.com>
+ 
+ 	* gimplify.c (simplify_cond_expr): Avoid redundant gimplification.
+ 
+ 	Add TREE_VEC of case labels to the SWITCH_EXPR during gimplification.
+ 	* tree.def (CASE_LABEL_EXPR): Add an operand for the LABEL_DECL.
+ 	* tree.h (SWITCH_LABELS, CASE_LABEL): New macros.
+ 	* c-simplify.c (c_simplify_stmt) <CASE_LABEL>: Create LABEL_DECL here.
+ 	* expr.c (expand_expr) <CASE_LABEL_EXPR>: Not here.
+ 	* gimplify.c (gimplify_ctx): Add case_labels field.
+ 	(gimplify_switch_expr, gimple_add_case_label): New fns.
+ 	(simplify_expr): Use them.
+ 
+ 2003-04-24  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-flow.h (processed_out_of_ssa): Rename to out_of_ssa_tag.
+ 	* tree-ssa-live.c (register_ssa_partition): Add variable to partition.
+ 	(change_partition_var): Use out_of_ssa_tag.
+ 	(create_ssa_var_map): Add all uses, defs and PHI elements to partition.
+ 	(new_tree_live_info): Create a live range info structure.
+ 	(delete_tree_live_info): Free storage.
+ 	(live_worklist): Fill in the live range info for a variable for the
+ 	blocks between the def and all the blocks containing uses.
+ 	(set_if_valid): Set partition bit if variable is in a partition.
+ 	(add_livein_if_notdef): Set live on entry bit for a var's partition
+ 	if a definition has not been seen.
+ 	(calculate_live_on_entry): Create partition live on entry bitmaps for
+ 	all basic blocks .
+ 	(calculate_live_on_exit): Calculate live on exit information for each
+ 	basic block.
+ 	(init_root_var): Initialize and fill in a root_var structure.
+ 	(remove_root_var_partition): remove a partition from a root_var list.
+ 	(delete_root_var): Free storage.
+ 	(dump_root_var): Display root_var summary.
+ 	(dump_var_map): Show extra info for ssa name versions.
+ 	* tree-ssa-live.h (NO_PARTITION): Define.
+ 	(register_ssa_partition): Remove.
+ 	(partition_to_var): Use partition_find after decompressing.
+ 	(var_to_partition): Return NO_PARTITION if var is not in a partition.
+ 	(struct tree_live_info_d): Define live range info structure.
+ 	(partition_is_global): Return 1 if used outside a basic block.
+ 	(live_entry_blocks): Return bitmap over blocks that partition is live
+ 	on entry to.
+ 	(live_on_exit): Return bitmap of partitions live on exit from a block.
+ 	(struct root_var_d): Define a root_var structure.
+ 	(ROOT_VAR_NONE): Define.
+ 	(num_root_vars): Number of variables in root_var object.
+ 	(root_var): Return variable for a root_var index.
+ 	(first_root_var_partition): Return first partition for a root_var.
+ 	(next_root_var_partition): Get next partition for a root_var.
+ 	(find_root_var): Find root_var index for a specific partition.
+ 	* tree-ssa.c (eliminate_extraneous_phis): Remove.
+ 	(set_if_valid): Set partition bit if variable is in a partition.
+ 	(add_conflicts_if_valid): Add conflict between variable and all
+ 	related partitions set in a bitvector.
+ 	(coalesce_ssa_name): Create a conflict graph and coalesce all
+ 	partitions which don't conflict and are related by the same root_var.
+ 	(assign_vars): Use a root_var object, and assign different real
+ 	variables to all partitions.
+ 	(rewrite_out_of_ssa): Call compact_var_map() once, and don't call
+ 	eliminate_extraneous_phis.
+ 
+ 2003-04-23  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-flow.h (create_global_var): Add prototype.
+ 
+ 	* tree-dfa.c (create_global_var): Externalize.
+ 
+ 	* tree-alias-common.c: Set DECL_CONTEXT on our temp alias vars.
+ 	(call_may_clobber): Make a copy of this function, since our version
+ 	will be slightly different soon.
+ 	(create_alias_vars): We need global_var, so create it if necessary.
+ 
+ 2003-04-23  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (do_proper_save): Remove old code, since the new
+ 	insertion code works okay.
+ 	(pre_expression): Use new_rename_1, it removes a *lot* of useless
+ 	saves.
+ 
+ 2003-04-23  Jeff Law  <law@redhat.com>
+ 
+ 	* gimplify.c (simplify_target_expr): Make sure to simplify
+ 	the cleanup too.
+ 
+ 	* tree-ssa.c (struct def_blocks_d): Add new field phi_insertion_points.
+ 	(compute_global_livein): Accept varray rather than bitmaps.  Callers
+ 	updated.  Rewrite to compute global life information for all the
+ 	objects in the varray in parallel.
+ 	(insert_phis_for_deferred_variables): New function.
+ 	(insert_phi_nodes_for): New argument DEF_MAPs.  When an object
+ 	crosses the threshold for using fully pruned PHI insertions,
+ 	push it on the def_maps varray for deferred processing.
+ 	(insert_phi_nodes): Initialize def_maps.  Pass it to
+ 	insert_phi_nodes_for.  Drain the def_maps varray as it grows.
+ 	Also drain any residual objects in def_maps.  Zero def_maps
+ 	when complete.
+ 
+ 2003-04-21  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-cfg.c (find_contained_blocks_and_edge_targets): New function.
+ 	(try_finallys): New varray used during edge creation.
+ 	(make_edges): Initialize try_finallys varray.  After creating
+ 	all the "normal" edges, go back and create the special edges
+ 	for the try-finally blocks.
+ 	(make_ctrl_stmt_edges): Create edges for the EH nodes.  Also
+ 	make sure to build the try-finally stack.
+ 	(make_exit_edges): Create edges from calls which may throw
+ 	to any directly reachable exception handlers.
+ 	(is_ctrl_altering_stmt): Statements which may throw alter
+ 	flow control.
+ 
+ 	* tree-cfg.c: Include except.h.
+ 	(eh_stack): New file-scoped varray.
+ 	(build_tree_cfg): Initialize eh_stack.
+ 	(make_catch_expr_blocks): New function.
+ 	(make_try_expr_blocks, make_eh_filter_expr_blocks): Likewise.
+ 	(make_blocks): Call new functions as needed.  When ending a block
+ 	due to a statement that may throw, compute the reachable exception
+ 	handlers and store it in the statement's annotation.
+ 	(is_ctrl_stmt): Handle EH nodes.
+ 	(stmt_ends_bb_p): Likewise.
+ 	* tree-flow.h (stmt_ann_d): Add new field reachable_exception_handlers.
+ 
+ 	* except.c (check_handled): No longer static.
+ 	* except.h (check_handled): Prototype.
+ 
+ 	* c-simplify.c (c_build_bind_expr): Revert change from earlier today.
+ 
+ 	* c-common.h (find_reachable_label): Prototype.
+ 	* c-semantics.c (find_reachable_label): No longer static.
+ 	* c-simplify.c (c_build_bind_expr): Avoid creating unnecessary
+ 	BIND_EXPRs.
+ 	(simplify_cleanup): Avoid creating unnecessary TRY_CATCH_EXPRs
+ 	or TRY_FINALLY_EXPRs.
+ 	(simplify_if_stmt): If the condition is constant and the
+ 	unexecuted arm has no reachable code, then just emit
+ 	the executed arm.
+ 
+ 2003-04-18  Sebastian Pop  <s.pop@laposte.net>
+ 
+ 	* cfghooks.h, cfghooks.c: New files.
+ 	* Makefile.in (BASIC_BLOCK_H): Depends on cfghooks.h.
+ 	(OBJS): Add cfghooks.o.
+ 	(tree-optimize.o): Depends on cfgloop.h.
+ 	(cfghooks.o): New rule.
+ 	* basic-block.h (split_edge): Rename to rtl_split_edge.
+ 	(tree_split_edge): Declare.
+ 	(create_bb): Declare extern here.
+ 	(verify_flow_info): Rename to rtl_verify_flow_info.
+ 	(tree_verify_flow_info): Declare.
+ 	(cfghooks.h): Included here.
+ 	* cfgloop.c (tree.h, tree-flow.h): Included.
+ 	(make_forwarder_block): Renamed to rtl_make_forwarder_block.
+ 	(tree_make_forwarder_block): New static function.
+ 	(blocks_headers): Declared static.
+ 	(HEADER_BLOCK): Use blocks_headers instead of bb's .aux field.
+ 	(redirect_edge_with_latch_update, make_forwarder_block,
+ 	canonicalize_loop_headers): Don't allocate .aux, but makes grow
+ 	the blocks_headers array.
+ 	(canonicalize_loop_headers): Register tree_make_forwarder_block
+ 	into the tree_cfg_hooks and rtl_make_forwarder_block into the
+ 	rtl_cfg_hooks structure.
+ 	(canonicalize_loop_headers): Initialize/free the blocks_headers
+ 	array rather than the bb's .aux field.
+ 	* cfgloopmanip.c (loop_split_edge_with_NULL): New static function.
+ 	(remove_path, force_single_succ_latches):
+ 	Call loop_split_edge_with_NULL instead of loop_split_edge_with.
+ 	* cfgrtl.c (split_block): Update the comment.
+ 	(split_edge): Renamed rtl_split_edge.
+ 	(verify_flow_info): Renamed rtl_verify_flow_info.
+ 	* loop-init.c (loop_optimizer_init, loop_optimizer_finalize):
+ 	Execute code following the value of cfg_level.
+ 	* toplev.c (rest_of_compilation): Call rtl_register_cfg_hooks.
+ 	* tree-cfg.c (create_bb): Declared extern.
+ 	(build_tree_cfg): Call tree_register_cfg_hooks.
+ 	(make_edges, make_exit_edges): Remove the use of EDGE_FALLTHRU.
+ 	(bsi_commit_first_edge_insert): Use split_edge.
+ 	(tree_split_edge, tree_verify_flow_info): New functions.
+ 	* tree-optimize.c (cfgloop.h): Included.
+ 	(optimize_function_tree): Add #if 0'ed calls to
+ 	loop_optimizer_init and loop_optimizer_finalize.
+ 
+ 2003-04-16  Jeff Law  <law@redhat.com>
+ 
+ 	* Makefile.in (tree-ssa.o): Depend on langhooks.h.
+ 	(tree-dfa.o, tree-cfg.o): Likewise.
+ 	* tree-cfg.c: Include langhooks.h
+ 	(dump_tree_cfg): Revamp how we get the current function's name
+ 	to not rely on current_function_name (and implicitly cfun).
+ 	(dump_cfg_stats, tree_cfg2dot): Likewise.
+ 	* tree-dfa.c: Include langhooks.h
+ 	(dump_immediate_uses): Revamp how we get the current function's name
+ 	to not rely on current_function_name (and implicitly cfun).
+ 	(dump_dfa_stats, dump_alias_info): Likewise.
+ 	* tree-ssa.c: Include langhooks.h
+ 	(dump_tree_ssa): Revamp how we get the current function's name
+ 	to not rely on current_function_name (and implicitly cfun).
+ 
+ 	* tree-cfg.c (make_loop_expr_blocks): When determining the value for
+ 	NEXT_BLOCK_LINK, correctly handle empty statement nodes at the
+ 	end of the tree.
+ 	(make_cond_expr_blocks, make_switch_expr_blocks): Likewise.
+ 	(make_bind_expr_blocks): Likewise.
+ 
+ 	* gimplify.c (keep_function_tree_in_gimple_form): Move check of
+ 	flag_disable_simple here.  Include flags.h.
+ 	* Makefile.in (gimplify.o): Depends on flags.h
+ 	* c-decl.c (c_expand_body_1): No longer check flag_disable_simple.
+ 	* tree-inline.c (copy_body_r): Avoid creating non-gimple code
+ 	when inlining a function where the RESULT_DECL's initialization
+ 	is not on the RETURN_EXPR.
+ 
+ 2003-04-15  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-flow.h (struct var_ann_d): Renamed is_vla_decl field to
+ 	has_hidden_use.
+ 	(has_hidden_use, set_has_hidden_use): Renamed from is_vla_decl
+ 	and set_vla_decl.
+ 	* tree-flow-inline.h (has_hidden_use): Renamed from is_vla_decl.
+ 	Updated to use "has_hidden_use" instead of "is_vla_decl" field.
+ 	(set_has_hidden_use): Renamed from set_vla_decl.
+ 	Updated to use "has_hidden_use" instead of "is_vla_decl" field.
+ 	* tree-dfa.c (dump_variable): Corresponding changes.
+ 	(find_vla_decls_r): Likewise.
+ 	* c-simplify.c (simplify_decl_stmt): Likewise.
+ 	* tree-ssa-dce.c: Likewise.
+ 
+ 2003-04-09  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-dfa.c (struct alias_set_d, field tag_sym_set): Remove
+ 	unused field.
+ 	(register_alias_set): Rework to avoid incorrect coalescing of
+ 	entries.  Fix memory leak.  No longer set field tag_sym_set.
+ 	(get_expr_operands): ADDR_EXPR expressions may have interesting
+ 	operands in some cases.
+ 
+ 2003-04-09  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* gimplify.c (simplify_expr): Handle VECTOR_CST nodes.
+ 	* tree-cfg.c (make_blocks): Ignore empty statement containers.
+ 	Create a basic block before processing containers that only have
+ 	empty statements.
+ 	(make_loop_expr_blocks): Use the container instead of the statement
+ 	when setting NEXT_BLOCK_LINK.
+ 	(make_cond_expr_blocks): Likewise.
+ 	(make_switch_expr_blocks): Likewise.
+ 	(make_bind_expr_blocks): Likewise.
+ 	(successor_block): If the last statement of the block is the empty
+ 	statement, use its container to get NEXT_BLOCK_LINK.
+ 	(stmt_starts_bb_p): Return false if the statement is NULL.
+ 	* tree-pretty-print.c (dump_generic_node): Handle VECTOR_CST nodes.
+ 	* tree-simple.c (is_simple_const): Accept VECTOR_CST as constants.
+ 	* objc/objc-lang.c (LANG_HOOKS_TREE_INLINING_TREE_CHAIN_MATTERS_P):
+ 	Define.
+ 
+ 2003-04-06  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-cfg.c (remove_bb): Call ssa_remove_edge.
+ 	(cleanup_cond_expr_graph): Likewise.
+ 	(cleanup_switch_expr_graph): Likewise.
+ 	(disconnect_unreachable_case_labels): Likewise.
+ 	(merge_tree_blocks): Likewise.
+ 	Update PHI nodes at BB2's successor.
+ 	(dump_tree_bb): Show PHI nodes in the block.
+ 	* tree-dfa.c (add_phi_arg): Update comment.
+ 	(remove_phi_arg_num): New function.
+ 	(remove_phi_arg): Call it.
+ 	Move from tree-ssa.c.
+ 	(remove_phi_node): Move from tree-ssa.c.
+ 	* tree-flow.h (ssa_make_edge): Declare.
+ 	(ssa_remove_edge): Declare.
+ 	* tree-pretty-print.c (dump_generic_node): Show block where PHI
+ 	arguments are coming from.
+ 	* tree-ssa-dce.c (pdom_info): New local variable.
+ 	(remove_dead_stmts): Initialize it and free it at the end.
+ 	(remove_conditional): New function.
+ 	(remove_dead_stmt): Call it.
+ 	* tree-ssa.c (eliminate_phi): If the edge index is -1, abort
+ 	compilation.
+ 	(ssa_remove_edge): New function.
+ 	(ssa_make_edge): New function.
+ 
+ 2003-04-06  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-cfg.c (push_bsi): New. Push a block_stmt_iterator onto a stack.
+ 	(pop_bsi): New. Pop a block_stmt_iterator off a stack.
+ 	* tree-flow-inline.h (struct bsi_list_d): Block iterator stack struct.
+ 	(new_bsi_list): Start a new bsi stack.
+ 	(empty_bsi_stack): Is stack empty.
+ 	(FOR_EACH_BSI_IN_REVERSE): Macro for processing bsi's in reverse.
+ 	(FOR_EACH_STMT_IN_REVERSE): Macro for processing stmt's in reverse.
+ 
+ 2003-04-06  Andreas Jaeger  <aj@suse.de>
+ 
+ 	* treelang/treetree.c (tree_code_create_function_initial): Replace
+ 	calls to non-existent function annotate_with_file_line_column with
+ 	calls to annotate_with_file_line.
+ 	(tree_code_create_variable): Likewise.
+ 
+ 2003-04-05  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (get_expr_operands): Do not clobber readonly operands
+ 	in CALL_EXPRs.
+ 	(find_vars_r): Likewise.
+ 	(add_indirect_ref_var): When creating new INDIRECT_REF variables,
+ 	copy the readonly attribute from the variable's type.
+ 
+ 2003-04-05  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree.c (copy_node): Never copy tree annotations.
+ 
+ 2003-04-05  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-ccp.c (visit_cond_stmt): Don't short circuit evaluation
+ 	of UNDEFINED conditional expressions.
+ 
+ 2003-04-04  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* Makefile.in : Add tree-ssa-live.c and tree-ssa-live.h files.
+ 	* tree-ssa.c (struct _var_map, create_var_map, delete_var_map,
+ 	var_from_partition, get_var_partition, mapped_var_from_ref,
+ 	compact_var_map, dump_tree_partition, set_partition_for_var,
+ 	set_var_mapping, create_var_partition): Remove.
+ 	(create_temp): Allow temps to be created from SSA_NAME vars as well.
+ 	(eliminate_name, eliminate_build, elim_backward, elim_create,
+ 	eliminate_phi): Use new var map interface.
+ 	(coalesce_ssa_name): New. Coalesce ssa_name ranges together.
+ 	(assign_vars): Assign real variables to ssa_name partitions.
+ 	(rewrite_out_of_ssa): Use new varmap partition and routines.
+ 	* tree-ssa-live.h: New file
+ 	(var_map): Structure for variable map.
+ 	(num_var_partitions): Number of partitions.
+ 	(partition_to_var): Return variable for partition.
+ 	(var_to_partition): Return partition variable is in.
+ 	(var_to_partition_to_var): Return variable representing partition
+ 	another variable is in.
+ 	(register_ssa_partition): Initialize a partition element as used.
+ 	* tree-ssa-live.c: New file.
+ 	(init_var_map): Initialize a var_map.
+ 	(delete_var_map): Free storage for a var_map.
+ 	(var_union): Combine 2 partitions.
+ 	(compact_var_map): Reduce the number of partitions in a var_map.
+ 	(change_partition_var): Assign a specific var to a partition.
+ 	(create_ssa_var_map): Initialize a var_map with referenced variables.
+ 	(dump_var_map): Debug output for a var_map.
+ 
+ 2003-04-03  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* fold-const.c (fold_relational_hi_lo): Add missing comparison when
+ 	folding comparisons to signed_max+1.
+ 
+ 2003-04-02  Jason Merrill  <jason@redhat.com>
+ 	    Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-inline.c (initialize_inlined_parameters): Cast argument
+ 	types appropriately when emitting initialization assignments.
+ 
+ 2003-04-01  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-cfg.c (PENDING_STMT, SET_PENDING_STMT): New Macros.
+ 	(bsi_insert_on_edge): Rename to bsi_commit_first_edge_insert. Add an
+ 	empty annotation record to the new basic_block.
+ 	(bsi_commit_edge_inserts): New. Commit all pending edge inserts.
+ 	(bsi_insert_on_edge): New. Add stmt to edge's pending insert list.
+ 	* tree-flow-inline.h (phi_arg_from_edge): Return PHI index for an edge.
+ 	(phi_element_for_edge): Return PHI element for an edge.
+ 	* tree-flow.h (struct var_ann_d): Add auxiallary field and new
+ 	bit 'processed_out_of_ssa'.
+ 	* tree-ssa.c (_var_map): Structure for variable parition map.
+ 	(struct _elim_graph): Elimination graph for out-of-ssa pass.
+ 	(create_var_map): Create a new var_map.
+ 	(delete_var_map): Delete a var_map.
+ 	(var_from_parition): Return var for a specified partition.
+ 	(get_var_partition): Return partition a var belongs to.
+ 	(mapped_var_from_ref): Get root var for a var's partition.
+ 	(compact_var_map): Re-map the partitions to make the list dense.
+ 	(dump_var_parition): Print var_map.
+ 	(set_partition_for_var): Associate a real var with a partition.
+ 	(set_var_mapping): Associate an SSA version var with a real var.
+ 	(create_var_partition): Create a partition for processing.
+ 	(create_temp): Create a new temp variable for a partition.
+ 	(insert_copy_on_edge): Insert a copy between variables on an edge.
+ 	(new_elim_graph): Create a new elimination graph.
+ 	(clear_elim_graph): clear an elimination graph.
+ 	(delete_elim_graph): Delete an elimination graph.
+ 	(eliminate_name, eliminate_build, elim_forward,
+ 	elim_unvisited_predecessor, elim_backward, elim_create,
+ 	eliminate_phi): Routines to implement Morgans PHI elimination algorithm.
+ 	(eliminate_extraneous_phis): Eliminate PHI nodes which will never
+ 	generate code.
+ 	(rewrite_out_of_ssa): Use partitions and PHI elimination algorithm.
+ 
+ 2003-04-01  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-cfg.c (make_blocks): Make sure the BIND_EXPR's subgraph
+ 	actually ended in a statement before seeing of the statement should
+ 	end a basic block.
+ 
+ 	* tree-cfg.c (dump_tree_cfg): Avoid crashing when cfun is NULL.
+ 	(tree_cfg2dot): Likewise.
+ 	* tree-dfa.c (dump_immediate_uses): Likewise.
+ 	* tree-pretty-print.c (dump_generic_node): Dump the EH_FILTER_FAILURE
+ 	nodes attached to an EH_FILTER_EXPR.
+ 
+ 	* tree-dfa.c (get_stmt_operands): Add cases for TRY_FINALLY_EXPR,
+ 	TRY_CATCH_EXPR, CATCH_EXPR and EH_FILTER_EXPR.
+ 	(get_expr_operands): Add case for EXC_PTR_EXPR.
+ 
+ 	* tree-dfa.c (compute_may_aliases): Accept FNDECL as an argument.
+ 	Use FNDECL instead of relying on CURRENT_FUNCTION_DECL.
+ 	* tree-flow.h (compute_may_aliases): Update prototype.
+ 	* tree-ssa.c (rewrite_into_ssa): Corresponding changes.
+ 
+ 	* tree-inline.c (expand_calls_inline): Correctly handle EH_FILTER_EXPR.
+ 
+ 2003-03-31  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (STRICT_WARN, STRICT2_WARN): Remove -Wtraditional.
+ 	* timevar.def (TV_TREE_CLEANUP_CFG): Define.
+ 	* tree-cfg.c (set_parent_stmt): Add documentation.
+ 	(replace_stmt): New function.
+ 	(merge_tree_blocks): New function.
+ 	(remap_stmts): New function.
+ 	(linearize_cond_expr): New function.
+ 	(linearize_control_structures): New function.
+ 	(cleanup_tree_cfg): Call it.
+ 	Use new timevar TV_TREE_CLEANUP_CFG.
+ 	(remove_bb): Update debugging message.
+ 	Make sure that bb->head_tree_p and bb->end_tree_p exist before
+ 	resetting their basic blocks.
+ 	(remove_stmt): When removing a control flow expression, update
+ 	basic block flags.
+ 	(cleanup_control_flow): Make sure that the block contains
+ 	statements.
+ 	(last_stmt): Reformat for readability.
+ 	(last_stmt_ptr): Return NULL if the block has no statements.
+ 	* tree-flow-inline.h (parent_block): Check that the block is not
+ 	empty.
+ 	* tree-flow.h (bb_empty_p): Remove.
+ 	* tree-inline.c (copy_tree_r): Do not copy empty_stmt_node.
+ 	* tree-ssa-dce.c (tree_ssa_dce): Call cleanup_tree_cfg.
+ 	* tree.c (body_is_empty): New function.
+ 	* tree.h (body_is_empty): Declare.
+ 
+ 2003-03-31  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-ccp.c (simulate_block): Add abnormal edges out of a
+ 	block to the edge worklist after simulating a block for the
+ 	first time.  If the block has a single outgoing normal edge,
+ 	add that edge to the worklist after simulating the block for
+ 	the first time.
+ 
+ 2003-03-31  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* gcc.c (MFLIB_SPEC): Remove -ld.
+ 	(MFWRAP_SPEC): Remove dlopen wrapping.
+ 
+ 2003-03-28  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa.c (rewrite_block): Add new argument 'eq_expr_value'.
+ 	Update all users.
+ 	If 'eq_expr_value' is given, use it to register a new
+ 	value for the variable given on the LHS.
+ 	If the block ends in a conditional expression of the form 'X == Y',
+ 	propagate 'X = Y' into the THEN_CLAUSE.
+ 	(MAY_COPYPROP_P): Define.
+ 	(rewrite_stmt): Call it.
+ 	(register_new_def): Fix comment.
+ 	(get_eq_expr_value): New function.
+ 
+ 2003-03-28  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* basic-block.h (BB_COMPOUND_ENTRY): Remove.  Update all users
+ 	everywhere.
+ 	* tree-cfg.c: Minor fixes to various comments.
+ 	* tree-optimize.c (optimize_function_tree): Dump optimized function
+ 	after SSA->normal conversion.
+ 
+ 2003-03-26  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c:  Implement open64 renaming algorithm.
+ 	(subst_phis): New function.
+ 	(generate_expr_as_of_bb): Ditto.
+ 	(new_rename_1): Ditto.
+ 	(process_delayed_rename): Ditto.
+ 	(do_proper_save): Use bsi_* functions for insertion, don't remove
+ 	old code quite yet, haven't fully tested.
+ 	Also add argument that says whether to insert before use or after use.
+ 	(defs_y_dom_x): Factor through injuries properly.
+ 	(defs_match_p): Ditto.
+ 	(phi_opnd_from_res): Attempt to fix, and remove useless argument.
+ 	(reset_can_be_avail): Fix broken condition that would cause infinite
+ 	loop.
+ 	(update_old_new): #if 0 updating of bb heads.
+ 	(finalize_1): We occasionally get 5 + a rather than a + 5, so we
+ 	need to make sure 5 is a DECL before trying to get a reaching def.
+ 	(repair_use_injury): If we couldn't find a reaching def, we don't need
+ 	to repair it.
+ 	(assign_new_class): Only push to stack2 if it exists (so we can
+ 	share this function in both rename implementations).
+ 	(create_ephi_node): Add argument that says whether to add ephi
+ 	to block or not (we create them sometimes for validation only).
+ 	(tree_perform_ssapre): Skip expressions without any uses.
+ 
+ 	* tree.h: Add EREF_DELAYED_RENAME.
+ 	(struct tree_eref_common): Add delayed_rename bit.
+ 
+ 2003-03-25  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-simple.c: Use tree codes to document grammar for relational
+ 	operators &&, || and ^.
+ 
+ 2003-03-25  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* cfg.c (dump_edge_info): Add labels for EDGE_TRUE_VALUE,
+ 	EDGE_FALSE_VALUE and EDGE_EXECUTABLE.
+ 	* tree-cfg.c (dump_tree_bb): Change formatting.  Show all
+ 	statements in the block.
+ 	* tree-simple.c: Update documentation for GIMPLE conditional
+ 	expressions.
+ 
+ 2003-03-24  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (get_expr_operands): If there are no call clobbered
+ 	variables, don't create a VDEF for GLOBAL_VAR at clobbering
+ 	CALL_EXPRS.
+ 	* tree-flow.h (fold_stmt): Declare.
+ 	* tree-ssa-ccp.c (fold_stmt): Change to extern declaration.
+ 	* tree-ssa.c (rewrite_stmt): Call it.
+ 
+ 2003-03-22  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (gtype-desc.o): Add dependency on $(TREE_FLOW_H).
+ 
+ 	* tree-dfa.c (struct alias_set_d): Add field 'num_elements'.
+ 	(struct walk_state): Move declaration earlier in the file.
+ 	(create_global_var): New local function.
+ 	(num_referenced_vars, num_aliased_objects): Change type to
+ 	'size_t'.  Update all users.
+ 	(aliased_objects, aliased_objects_base, aliased_objects_aliase_set):
+ 	Mark for garbage collection.
+ 	(num_call_clobbered_vars, call_clobbered_vars): New global
+ 	variable.
+ 	(get_expr_operands): For CALL_EXPRs, add a VUSE or VDEF reference
+ 	for every pointer argument.  If the call may clobber, add a VDEF,
+ 	otherwise add a VUSE.
+ 	If the call may clobber, add VDEF for GLOBAL_VAR.
+ 	(dump_variable): Show whether the variable is call clobbered.
+ 	(dump_dfa_stats): Show call clobbered variables.
+ 	(compute_may_aliases): Minor formatting changes.
+ 	(compute_alias_sets): If the function makes clobbering calls, add
+ 	GLOBAL_VAR as an alias to every call-clobbered variable.
+ 	Remove alias sets that have exactly one element.
+ 	(register_alias_set): Set 'num_elements' to zero for every newly
+ 	created alias set.
+ 	(find_alias_for): Don't make a second call to add_may_alias to make
+ 	alias tags alias themselves.  It's redundant.
+ 	Increment 'num_elements' when adding a new alias to an alias set.
+ 	(may_alias_p): Don't handle GLOBAL_VAR.
+ 	Check for structure aliasing when either PTR or VAR are a
+ 	structure.  Don't do it only when both are structures.
+ 	(dump_alias_info): Show all aliases of each variable.
+ 	(find_vars_r): When processing a CALL_EXPR node, set
+ 	walk_state->is_store if the function may clobber and create a
+ 	reference to GLOBAL_VAR.
+ 	(add_indirect_ref_var): Change type of second argument from 'void *'
+ 	to 'struct walk_state *'.  Update all users.
+ 	(add_referenced_var): Likewise.  If a potentially aliased variabe
+ 	is not declared 'const', add it to the list of call clobbered
+ 	variables.
+ 
+ 	* tree-flow.h (struct var_ann_d): Add field 'is_call_clobbered'.
+ 	Change type of field 'uid' to size_t.  Update all users.
+ 	(stmt_ann_d): Add field 'makes_clobbering_call'.
+ 	(next_tree_ref_id): Remove unused variable.
+ 	(call_clobbered_vars): Declare.
+ 	(num_call_clobbered_vars): Declare.
+ 	(call_clobbered_var): New inline function.
+ 
+ 	* tree-ssa-ccp.c (visit_phi_node): If the LHS of a PHI node is
+ 	volatile, mark the PHI node VARYING without checking its arguments.
+ 	(visit_assignment): Likewise.
+ 	(set_value): Remove.  Update all users.
+ 	(likely_value): If the statement makes aliased loads or has
+ 	volatile operands, consider it VARYING.
+ 	(get_default_value): If a variable is volatile, consider it
+ 	VARYING.
+ 
+ 	* tree-ssa.c (init_tree_ssa): Initialize num_call_clobbered_vars
+ 	and call_clobbered_vars.
+ 	Do not create GLOBAL_VAR.  Set it to NULL_TREE.
+ 	Increase initial size for various hash tables.
+ 	(delete_tree_ssa): Reset num_call_clobbered_vars and
+ 	call_clobbered_vars.
+ 	(get_reaching_def): Rename from currdef_for.  Update all users.
+ 	Always create default definitions for variables that need them.
+ 	Callers that use to call currdef_for with the second argument set
+ 	to false now call get_value_for.
+ 	(htab_statistics): New function.
+ 	(dump_tree_ssa): Call it.
+ 	(avail_expr_eq): Also compare VUSE operands.
+ 
+ 2003-03-21  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-dfa.c: Revert vla changes from yesterday.
+ 	(find_vla_decls_r): Do not look inside TYPE_DECLs.
+ 
+ 2003-03-20  Jeff Law  <law@redhat.com>
+ 
+ 	* gimplify.c (simplify_return_expr): Tighten condition for
+ 	converting the RHS of a MODIFY_EXPR in a RETURN_EXPR to a
+ 	simple_val.  Allow returning a RESULT_DECL directly.
+ 	* tree-dfa.c (get_expr_operands): A RESULT_DECL can have
+ 	interesting operands.
+ 	(clobber_vars_r): Handle RESULT_DECLs.
+ 	(compute_may_aliases): Initialize and free vla_htab.
+ 	(find_vla_decls): Pass vla_htab to walk_tree.
+ 	(find_vla_decls_r): Likewise.
+ 	* tree.h (SSA_DECL_P): Accept RESULT_DECLs.
+ 
+ 2003-03-19  Jeff Law  <law@redhat.com>
+ 
+ 	* gimplify.c (simplify_return_expr): Only allow simple values
+ 	on the RHS of a MODIFY_EXPR appearing in a RETURN_EXPR.
+ 	* tree-cfg.c (make_exit_edges): We no longer need to look for
+ 	CALL_EXPRs on the RHS of a MODIFY_EXPR inside RETURN_EXPRs.
+ 
+ 2003-03-18  Andrew Macleod  <amacleod@redhat.com>
+ 
+ 	* tree-cfg.c (make_blocks): Use append_stmt_to_bb. Check for NULL
+ 	tsi_stmt when deciding whether to start a new block.
+ 	(add_stmt_to_bb): Don't update the basic block end pointer.
+ 	(append_stmt_to_bb): New. Add stmt and update the BB end pointer.
+ 	(first_stmt): Use only 1 return.
+ 	(last_stmt): Modified to use bsi_last().
+ 	(last_stmt_ptr): Modified to use bsi_last().
+ 	(bsi_last): New. Return an iterator to the last stmt in a block.
+ 	(bsi_from_tsi): Fix bug which wouldn't set the context properly when
+ 	within a nested BIND_EXPR.
+ 	(bsi_update_from_tsi): Insert helper which is more efficient than
+ 	bsi_from_tsi().
+ 	(bsi_link_after): link in a new stmt and update the basic block
+ 	data structures.
+ 	(bsi_insert_after): Insert a new stmt into a block.
+ 	(bsi_insert_before): Insert a new stmt into a block.
+ 	(bsi_insert_on_edge): Insert a new stmt on an edge.
+ 	* tree-flow-inline.h (is_label_stmt): Return true if stmt can be a
+ 	target of a control transfer.
+ 	* tree-flow.h (is_label_stmt, bsi_last): New prototypes.
+ 
+ 2003-03-12  Jeff Law  <law@redhat.com>
+ 
+ 	* c-simplify.c (simplify_switch_stmt): Save the type of the original
+ 	condition in TREE_TYPE (SWITCH_EXPR (...)).  Annotate the SWITCH_EXPR
+ 	with file/line information.
+ 	* expr.c (expand_expr, case SWITCH_EXPR): Use expand_end_case_type.
+ 	* tree.def (SWITCH_EXPR): Document meaning of TREE_TYPE field of
+ 	the SWITCH_EXPR.
+ 
+ 	* c-simplify.c (simplify_block): Set the current line number to
+ 	the line associated with the end of the block.
+ 
+ 	* c-decl.c (finish_function): No longer save/restore the
+ 	current filename or linenumber around simplification.  Instead
+ 	save/restore it around inlining.
+ 	(c_expand_body_1): Save/restore current filename and linenumber
+ 	around expansion of trees into RTL.
+ 	* gimplify.c (simplify_function_tree): Make the current file/line
+ 	number match the non-gimple code at the end of a function.
+ 
+ 	* tree-cfg.c: Include toplev.h.
+ 	(remove_bb): Warn about unreachable code.
+ 
+ 	* cfgrtl.c (verify_flow_info): Ignore EDGE_EXECUTABLE, it's for
+ 	the CCP optimizer only.
+ 
+ 	* ssa.c (convert_to_ssa): Use last_basic_block, not n_basic_blocks.
+ 
+ 2003-03-11  Jeff Law  <law@redhat.com>
+ 
+ 	* builtins.c: Fix minor comment typo.
+ 	(expand_builtin_strcmp, expand_builtin_strncmp): Remove.
+ 	(expand_builtin_strcat, expand_builtin_strncat): Likewise.
+ 	(expand_builtin_strspn, expand_builtin_strcspn): Likewise.
+ 	(expand_builtin_strcopy, expand_builtin_strstr): Likewise.
+ 	(expand_builtin_strpbrk, expand_builtin_strchr): Likewise.
+ 	(expand_builtin_strrchr, expand_builtin_fputs): Likewise.
+ 	(simplify_builtin_memcmp, simplify_builtin_strcmp): New functions.
+ 	(simplify_builtin_strpbrk, simplify_builtin_strstr): Likewise
+ 	(simplify_builtin_strchr, simplify_builtin_strrchr): Likewise
+ 	(simplify_builtin_strcpy, simplify_builtin_strncpy): Likewise
+ 	(simplify_builtin_strncmp, simplify_builtin_strcat): Likewise
+ 	(simplify_builtin_strncat, simplify_builtin_strspn): Likewise
+ 	(simplify_builtin_strcspn, simplify_builtin_fputs): Likewise
+ 	(expand_builtin_memcmp): Use simplify_builtin_memcmp.
+ 	(simplify_builtin): New function
+ 	(expand_builtin): Use simpify_builtin to collapse several common
+ 	cases together.
+ 	* gimplify.c (simplify_call_expr): Accept new argument.  All
+ 	callers updated.  Call simplify_builtin to try and simplify builtin
+ 	function calls before we simplify their arguments.
+ 	* tree.h (simplify_builtin): Prototype.
+ 
+ 2003-03-11  Jeff Law  <law@redhat.com>
+ 
+ 	* timevar.def (TV_TREE_SSA_TO_NORMAL): New timevar.
+ 	* tree-cfg.c (remove_stmt): Also remove special annotations
+ 	on RHS of MODIFY_EXPR statements.
+ 	* tree-dfa.c (create_stmt_ann): Update comments.  Fix formatting.
+ 	(compute_may_aliases): Make sure timevar encloses entire routine.
+ 	* tree-ssa.c (rewrite_out_of_ssa): Enclose with a timevar.
+ 	(remove_annotations_r): Avoid walking into subtrees of anything
+ 	except container nodes.  Remove the special annotation on the
+ 	RHS of MODIFY_EXPRs.
+ 
+ 2003-03-10  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* tree-mudflap.c (mx_xfn_indirect_ref): Allow unfolded "& ptr->field"
+ 	constructs to pass uninstrumented.  Remove TREE_ADDRESSABLE settings.
+ 	Keep array accesses to non-ADDRESSABLE objects uninstrumented.  Update
+ 	__MF_TYPE_* constants for __mf_register calls.
+ 
+ 2003-03-10  Jeff Law  <law@redhat.com>
+ 
+ 	* c-decl.c (c_expand_body_1): Update comments relating to
+ 	re-simplification after mudflap instrumentation.  Avoid
+ 	unnecessary simplification of the function tree.
+ 	* gimplify.c (keep_function_tree_in_gimple_form): New function.
+ 	* tree-inline.c: Include tree-iterator.h and tree-simple.h
+ 	(struct inline_data): Add new TSI field.
+ 	(copy_body_r): Keep tree in gimple form when transforming a
+ 	RETURN_EXPR into a MODIFY_EXPR and GOTO_EXPR.
+ 	(initialize_inlined_parameters): Use MODIFY_EXPR, not INIT_EXPR
+ 	for initialization of inlined parameters.
+ 	(expand_call_inline): Save and restore the TSI around the
+ 	call to expand_calls_inline.  Keep the tree in gimple form
+ 	when replacing a CALL_EXPR with a BIND_EXPR for the inlined
+ 	body.
+ 	(expand_calls_inline): Revamp to provide the current TSI to
+ 	expand_call_inline when we're working with gimple form.
+ 	* Makefile.in (tree-inline.o): Update dependencies.
+ 	* tree.h (keep_function_tree_in_gimple_form): Prototype.
+ 
+ 2003-03-10  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* Makefile.in (tree.o): Add tree-iterator.h dependancy.
+ 	* sbitmap.c (sbitmap_realloc): Grow a sbitmap structure.
+ 	* sbitmap.h (sbitmap_realloc): New Prototype.
+ 	* tree-cfg.c (remove_bb): Use new format for bsi_remove.
+ 	(bsi_remove): Update iterator to refer to the next stmt.
+ 	(bsi_prev): Implement previous stmt routine.
+ 	(bsi_from_tsi): Create a block iterator from a tree iterator.
+ 	* tree-flow-inline.h (bsi_prev): Remove.
+ 	(tsi_from_bsi): Create a tree iterator from a block iterator.
+ 	* tree-flow.h (bsi_prev,bsi_remove): Update prototypes.
+ 	(bsi_from_tsi, tsi_from_bsi, bsi_insert_*): New prototypes.
+ 	(bsi_iterator_update): New enum type.
+ 	* tree-iterator.h (tree_stmt_anchor, tsi_iterator_update): New type.
+ 	(tsi_link_before, tsi_link_after, tsi_delink, tsi_new_stmt_list,
+ 	tsi_stmt_list_head): New prototypes.
+ 	* tree-ssa-dce.c (remove_dead_stmts): Update removal loop to allow
+ 	that remove_dead_stmt update's the iterator.
+ 	(remove_dead_stmt): Use a pointer to the iterator since bsi_remove
+ 	requires it.
+ 	* tree.c (tsi_link_before): New function to link a stmt before an
+ 	iterator.
+ 	(tsi_link_after): New function links stmt after an iterator.
+ 	(tsi_delink): Removes a stmt from a list.
+ 	(tsi_new_stmt_list): New function to begin a new stmt list.
+ 	(tsi_stmt_list_head): New function to get the first stmt in a list.
+ 
+ 2003-03-07  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-cfg.c (remove_stmt): Don't assume that the statement is in
+ 	SSA form.
+ 
+ 	* tree-flow.h (dump_tree_ssa_stats): Declare.
+ 	(debug_tree_ssa_stats): Declare.
+ 	(stmt_ann_d): Add new statement flags 'makes_aliased_loads',
+ 	'makes_aliased_stores', and 'has_volatile_ops'.
+ 	* tree-dfa.c (add_stmt_operand): Set new statement flags accordingly.
+ 
+ 	* tree-pretty-print.c (dump_generic_node): Various cosmetic changes
+ 	to the rendering of some expressions.
+ 
+ 	* tree-ssa.c (struct var_value_d): Rename from struct currdef_d.
+ 	Rename field 'currdef' to 'value'.  Update all users.
+ 	(avail_exprs): New local hash table.
+ 	(const_and_copies): New local hash table.
+ 	(struct ssa_stats_d): Declare.
+ 	(ssa_stats): New local variable.
+ 	(rewrite_into_ssa): Deallocate avail_exprs and const_and_copies
+ 	after renaming.
+ 	Call dump_tree_ssa_stats() if -fdump-tree-ssa-stats is given.
+ 	(rewrite_block): Document the renaming process.
+ 	Add new local stack block_avail_exprs to keep track of expressions
+ 	made available in this block and its children.
+ 	(rewrite_stmts): Move body inside rewrite_block.
+ 	(dump_tree_ssa_stats): New function.
+ 	(debug_tree_ssa_stats): New function.
+ 	(get_def_blocks): New function.
+ 	(insert_phi_nodes_for): Call it.
+ 	(rewrite_stmt): Add support for keeping track of copies, constants
+ 	and globally redundant expressions.
+ 	(rewrite_operand): If a pointer has been copy propagated into
+ 	another one, rewrite INDIRECT_REF nodes of the original pointer to
+ 	refer to the new one.
+ 	(register_new_def): Add new argument 'var' indicating which
+ 	variable is this new definition for.  Update all users.
+ 	(update_indirect_ref_vuses): New function.
+ 	(update_pointer_vuses): New function.
+ 	(init_tree_ssa): Set variable 'ssa_stats' to zero.
+ 	Allocate memory for 'avail_exprs' and 'const_and_copies'.
+ 	(currdef_for): Don't mark inline.
+ 	Call get_value_for and set_value_for.
+ 	(set_currdef_for): Remove.  Update all users.
+ 	(var_value_hash): Rename from currdef_hash.  Update all users.
+ 	(var_value_eq): Rename from currdef_eq.  Update all users.
+ 	(get_value_for): New function.
+ 	(set_value_for): New function.
+ 	(lookup_avail_expr): New function.
+ 	(avail_expr_hash): New function.
+ 	(avail_expr_eq): New function.
+ 	(get_def_blocks_for): New function.
+ 	(var_is_live): New function.
+ 
+ 2003-03-06  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-ccp.c (likely_value): Don't assume CONSTANT if the
+ 	statement has virtual uses.
+ 
+ 2003-03-05  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (opf_none, opf_is_def, opf_force_vop, opf_ignore_bp):
+ 	New flags to alter the behavior of add_stmt_operand.
+ 	(get_expr_operands): Change operand IS_DEF with FLAGS.  Update all
+ 	users.
+ 	When adding a VUSE for pointer dereferences in function arguments,
+ 	don't add a superfluous VUSE for the base pointer.
+ 	(add_stmt_operand): Remove operands IS_DEF and FORCE_VOP.  Add
+ 	operand FLAGS.  Update all users.
+ 
+ 2003-03-05  Jason Merrill  <jason@redhat.com>
+ 
+ 	* c-pretty-print.c (do_niy): Only print operands of expressions.
+ 	* tree-pretty-print.c: Likewise.
+ 
+ 	* c-simplify.c (simplify_decl_stmt): Only simplify DECL_SIZE_UNIT.
+ 	* gimplify.c (simplify_array_ref_to_plus): New fn.
+ 	(simplify_array_ref): Use it.
+ 	(build_addr_expr_with_type): Split out from build_addr_expr.
+ 	(simplify_compound_lval): Break out an ARRAY_REF with non-constant
+ 	element size.
+ 
+ 2003-03-05  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* gcc.c (MFWRAP_SPEC): Remove most --wrap entries.
+ 
+ 2003-03-03  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (is_strred_cand): Temporarily disable strength
+ 	reduction while working on bootstrapping.
+ 	(requires_edge_placement): Reenable for now, until an insertion
+ 	infrastructure exists that can handle critical edges.
+ 	(count_stmts_in_bb): New function, used for verifying we do
+ 	insertions properly.
+ 	(update_old_new): Fix up bb heads as well.
+ 	(do_proper_save): Handle single statement bb properly.
+ 	Handle BB's contained in BIND_EXPRS.
+ 	(code_motion): Count number of statements in bb before and after
+ 	to make sure we don't screw up boundaries.
+ 	(finalize_1): Ditto.
+ 	(rename_2): Fix subtle rename bug.
+ 	(phi_opnd_from_res): Do this the right way, by cloning the
+ 	occurrence and modifying it, as every other PRE implementation
+ 	does.
+ 	(tree_perform_ssapre): Handle comparisons too (unary exprs
+ 	currently disabled till load PRE is reimplemented).
+ 	(reset_can_be_avail): Fix can_be_avail test.
+ 
+ 2003-03-01  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* doc/invoke.texi: Fix typo.
+ 
+ 2003-02-28  Aldy Hernandez  <aldyh@redhat.com>
+ 	    Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (OBJS): Add tree-ssa-copyprop.o.
+ 	(tree-ssa-copyprop.o): New rule.
+ 	(tree-ssa-ccp.o): Add dependency on $(TREE_SIMPLE_H).
+ 
+ 	* timevar.def (TV_TREE_COPYPROP): New timevar.
+ 	* flags.h (flag_tree_copyprop): Declare.
+ 	* toplev.c (flag_tree_copyprop): Define.
+ 	(f_options): Add -ftree-copyprop.
+ 	* tree.h (tree_dump_index): Add TDI_copyprop.
+ 	* tree-dump.c (dump_files): Add entry for -fdump-tree-copyprop.
+ 	* doc/invoke.texi: Document -ftree-copyprop and -fdump-tree-copyprop.
+ 
+ 	* tree-ssa-copyprop.c: New file.
+ 	* tree-flow.h (tree_ssa_copyprop): Declare.
+ 	* tree-optimize.c (optimize_function_tree): Call it.
+ 	* tree-dfa.c (add_vuse): Make extern.  Update all users.
+ 
+ 	* tree-ssa.c (mark_def_sites): VUSEs are stored in a varray of trees.
+ 
+ 2003-02-28  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* tree-mudflap.c (mudflap_enqueue_decl): Ignore extern artificial
+ 	variable declarations.
+ 
+ 2003-02-27  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (get_stmt_operands): INIT_EXPR nodes cannot
+ 	appear in GIMPLE form.  Don't handle them.
+ 	(get_expr_operands): Likewise.
+ 	(find_vars_r): Likewise.
+ 	* tree-ssa-ccp.c (get_rhs): Likewise.
+ 	(set_rhs): Likewise.
+ 	* tree-ssa-pre.c (tree_perform_ssapre): Likewise.
+ 
+ 2003-02-27  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-ccp.c (ccp_fold): Fold builtins by replacing and
+ 	restoring their arguments.
+ 
+ 2003-02-27  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-dfa.c (find_vars_r): Clear *walk_subtrees appropriately
+ 	to avoid useless walking of subtrees.
+ 
+ 	* fold-const.c (nondestructive_fold_binary_to_constant): Renamed
+ 	from nondestructive_fold_binary.  Update comments slightly.
+ 	(nondestructive_fold_unary_to_constant): Similarly.
+ 	(fold_relational_hi_lo): Corresponding changes.
+ 	* tree-ssa-ccp.c (ccp_fold): Corresponding changes.
+ 	* tree.h: Corresponding changes.
+ 
+ 2003-02-26  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-ccp.c (ccp_fold): Also handle folding of calls to
+ 	builtin functions.
+ 
+ 	* fold-const.c (nondestructive_fold_binary): Handle truth ops
+ 	when both arguments are constant (duh!).  Handle CONJ_EXPR.
+ 
+ 2003-02-26  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* flags.h: Remove flag_ip.
+ 	* toplev.c: Ditto.
+ 	* tree-alias-ander.c: s/flag_ip/flag_unit_at_a_time/g.
+ 	(andersen_cleanup): Set region to null when done.
+ 	(andersen_function_call): Check DECL_PTA_TYPEVAR, not
+ 	DECL_SAVED_TREE.
+ 	* tree-alias-common.c: s/SSA_DECL_P/DECL_P/g.
+ 	(get_alias_var_decl): Remove dead code, fix bug in what is a
+ 	local alias var.
+ 	(find_func_aliases): Use get_alias_var, not create_fun_alias_var.
+ 	(create_fun_alias_var): Fix to use DECL_PTA_TYPEVAR.
+ 	Use get_alias_var rather than create_alias_var.
+ 	(create_fun_alias_var_ptf): Ditto.
+ 	(create_alias_vars): Ditto.
+ 	* tree-dfa.c (compute_may_aliases): Fix check for
+ 	create_alias_vars.
+ 	Move deletion of alias vars back to here, from tree-ssa.c
+ 	* tree-ssa.c (delete_tree_ssa): Remove delete_alias_vars call.
+ 
+ 2003-02-25  Jeff Law  <law@redhat.com>
+ 	    Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-ccp.c (likely_value): If the statement has no
+ 	use operands, then return CONSTANT.
+ 
+ 	* fold-const.c (nondestructive_fold_binary): Handle TRUTH_AND_EXPR
+ 	and TRUTH_OR_EXPR.  Placeholder for TRUTH_XOR_EXPR.
+ 	* tree-ssa-ccp.c (ccp_fold): Handle TRUTH_{AND,OR,XOR}_EXPR.
+ 	(def_to_undefined): Re-enable VARYING->UNDEFINED state transition
+ 	sanity check.
+ 
+ 	* tree-ssa-ccp.c (likely_value): Renamed from may_fold_p.  Now
+ 	returns a latticevalue indicating the likely value for the
+ 	the RHS of the statement.
+ 	(evaluate_stmt): Update to use likely_value instead of may_fold_p.
+ 	Statements with UNDEFINED operands produce an UNDEFINED result.
+ 	(set_lattice_value): Reenable VARYING->CONSTANT sanity check.
+ 
+ 2003-02-25  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-cfg.c (bsi_init): Handle BIND_EXPR nodes inside a basic block.
+ 	(bsi_next_in_bb): Likewise.
+ 
+ 2003-02-25  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-cfg.c (parent_array): Remove.  Update all users.
+ 	(struct cfg_stats_d): Add field 'num_failed_bind_expr_merges'.
+ 	(NEXT_BLOCK_LINK): Define.
+ 	(build_tree_cfg): Call alloc_aux_for_blocks instead of
+ 	create_block_annotations.
+ 	(make_blocks): Rewrite to support basic blocks that can span whole
+ 	BIND_EXPR bodies and put control statements at the end of blocks.
+ 	Add arguments 'next_block_link' and 'bb'.  Replace 'parent_block'
+ 	with 'parent_stmt'.  Update all users.
+ 	(make_loop_expr_blocks): Replace argument 'parent_block' with 'entry'.
+ 	Add argument 'next_block_link'.  Update all users.
+ 	Don't create an empty latch block.
+ 	(make_cond_expr_blocks): Add argument 'next_block_link'.  Update
+ 	all users.
+ 	(make_switch_expr_blocks): Likewise.
+ 	(make_bind_expr_blocks): Replace 'parent_block' with 'parent_stmt'.
+ 	Add argument 'next_block_link' and 'entry'.
+ 	Don't create a new block for the BIND_EXPR node.  Extend the
+ 	existing block.
+ 	(add_stmt_to_bb): New function.
+ 	(create_bb): Remove argument 'parent_block'.  Update all users.
+ 	(create_block_annotations): Remove.  Update all users.
+ 	(make_edges): Don't handle BIND_EXPR nodes.
+ 	(make_ctrl_stmt_edges): Don't create an extra edge to the body of
+ 	the switch.
+ 	(make_loop_expr_edges): Only create an edge to the body of the
+ 	loop.
+ 	(remove_unreachable_block): Add more documentation for the special
+ 	case where a control statement entry is unreachable but its body
+ 	isn't.
+ 	Remove the basic block annotation from the head and end containers
+ 	in the block.
+ 	(disconnect_unreachable_case_labels): Don't keep the edge that goes
+ 	to the BIND_EXPR at the start of the switch body.
+ 	(dump_tree_bb): Call is_latch_block_for.
+ 	(dump_cfg_stats): Show stats about basic blocks that could not span
+ 	beyond the end of a BIND_EXPR body.
+ 	(successor_block): Use NEXT_BLOCK_LINK if the block is the last
+ 	inside a control structure.
+ 	(is_ctrl_stmt): Update documentation.
+ 	(stmt_starts_bb_p): Add new argument 'prev_t'.  Update all users.
+ 	Only labels may start a new basic block.
+ 	(stmt_ends_bb_p): Add LOOP_EXPR, TRY_FINALLY_EXPR and
+ 	TRY_CATCH_EXPR to the list.
+ 	(latch_block): Remove.
+ 	(is_latch_block_for): New function.
+ 	(set_bb_for_stmt): Reformat some code.
+ 
+ 	* tree-flow-inline.h (set_parent_block): Remove.  Update all users.
+ 	(parent_stmt): New function.
+ 	(parent_block): Call it.
+ 
+ 	* tree-flow.h (struct stmt_ann_d): Add field 'parent_stmt'.
+ 	(struct bb_ann_d): Remove block parent_block.
+ 
+ 	* tree-pretty-print.c (dump_generic_node): Don't handle empty latch
+ 	nodes.
+ 
+ 	* tree-ssa-ccp.c (def_to_undefined): Temporarily disable check for
+ 	VARYING->UNDEFINED transitions.
+ 	(set_lattice_value): Likewise for VARYING->CONSTANT transitions.
+ 
+ 	* tree-ssa-dce.c (mark_necessary): Use parent_stmt() to traverse
+ 	all the control statements that contain the current
+ 	statement.
+ 	(makr_control_parent_necessary): Remove.  Update all users.
+ 	(stmt_useful_p): Add BIND_EXPR to the list of useful
+ 	statements.
+ 	(process_worklist): Check that the statement is
+ 	associated to a basic block.
+ 	(remove_dead_stmt): Don't assume that the block has a
+ 	postdominator.
+ 
+ 2002-02-20  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-alias-ander.c: Store cached ptsets in the typevar, not
+ 	a seperate hash table.
+ 	(ptset_map): Removed;
+ 	(ptset_map_eq): Ditto.
+ 	(ptset_map_hash): Ditto.
+ 	(andersen_init): Remove ptset_map.
+ 	(andersen_cleanup): Ditto.
+ 	(andersen_add_var): Ditto.
+ 	(andersen_add_var_asm): Ditto.
+ 	(andersen_may_alias): Ditto.
+ 	* tree-alias-common.c: Store typevars for DECL nodes in the tree_decl
+ 	structure.
+ 	(get_alias_var_decl): Use DECL_PTA_TYPEVAR for DECL's.
+ 	(create_alias_var): Ditto.
+ 	(find_func_aliases): CONST functions don't affect aliasing either.
+ 	(ptr_may_alias_var): Don't call get_base_symbol.
+ 	Remove decl_function_context, use DECL_CONTEXT instead.
+ 	For DECL's, use DECL_PTA_TYPEVAR.
+ 	* tree-alias-type.c (struct alias_typevar_aterm): Add ptset member.
+ 	(ALIAS_TVAR_PTSET): New macro.
+ 	* tree.h (DECL_PTA_TYPEVAR): New macro.
+ 	(struct tree_decl): Add typevar member.
+ 
+ 2003-02-20  Jeff Law  <law@redhat.com>
+ 
+ 	* c-simplify.c (simplify_decl_stmt): Call set_vla_decl on the
+ 	temporary holding the size and unit size for a VLA.  Minor
+ 	formatting fixes.
+ 
+ 	* ssa.c: Revert caching of immediate dominators change made on
+ 	Jan 28, 2003.
+ 
+ 	* tree-dfa.c: Fix comment.
+ 
+ 2003-02-20  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-cfg.c (remove_bb): Update PHI nodes as edges are removed.
+ 	(cleanup_cond_expr_graph): Likewise.
+ 	(cleanup_switch_expr_graph): Likewise.
+ 	(disconnect_unreachable_case_labels): Likewise.
+ 
+ 	* tree-ssa-dce.c (mark_control_parent_necessary): Be much more
+ 	selective about what statements in the control parents are marked
+ 	as necessary.
+ 
+ 	* tree-dfa.c (INDIRECT_REFs and ADDRESSABLE_VARs varrays): Replace
+ 	with a single ALIASED_OBJECTs set of varrays.
+ 	(dump_dfa_stats): Corresponding changes.
+ 	(compute_may_aliases, dump_alias_info): Likewise.
+ 	(compute_alias_sets): Likesise.  Update comments.    Register
+ 	alias sets for all potentially aliased objects which are stored.
+ 	Check each potentially aliased object with the registered alias
+ 	sets.
+ 	(register_alias_set): If DEREF aliases a single registered _DECL,
+ 	then replace the _DECL's entry with DEREF.
+ 	(find_alias_for): Update comments.  Do not stop the search when
+ 	an alias is found.  There may be multiple entries with conflicting
+ 	alias sets.
+ 	(struct walk_state): New structure for statement walker callbacks.
+ 	(find_vars_r): Add logic to track loads and stores of potentially
+ 	aliased objects separately.  Various changes related to
+ 	using a single set of varrays for all aliased objects.
+ 	(add_referenced_var): Record in the var's annotation if the
+ 	var is read or written.  Various changes related to using a
+ 	single set of varrays for all the aliased objects.
+ 	(add_stmt_operand): Only set may_point_to_global_mem for INDIRECT_REFs.
+ 	* tree-flow.h (struct var_ann_d): Add new fields indicating if
+ 	the var is loaded or stored.  Explicitly note unused bitfield
+ 	entries.
+ 
+ 2003-02-19  Jeff Law  <law@redhat.com>
+ 
+ 	* fold-const.c (fold_negate_const): New function.  Broken out of
+ 	the generic fold code.
+ 	(fold_abs_const, fold_relational_const): Likewise.
+ 	(fold_relational_hi_lo): Likewise.
+ 	(nondestructive_fold_unary, nondestructive_fold_binary): Likewise.
+ 	(fold): Use fold_negate_const, fold_abs_const, fold_relational_const,
+ 	and fold_relational_hi_lo.
+ 	* tree.h (nondestructive_fold_unary): Declare.
+ 	(nondestructive_fold_binary): Declare.
+ 	* tree-ssa-ccp.c (ccp_fold): New function.
+ 	(add_control_edge): Fix trivial formatting bug.
+ 	(evaluate_stmt): Rework to use ccp_fold instead of copying
+ 	statements.
+ 
+ 2003-02-18  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-ccp.c (visit_assignment): For simple copies, copy the
+ 	lattice values.
+ 	(defs_to_undefined): Add missing abort.
+ 	(replace_uses_in): Do not do a replacement if it would create
+ 	non GIMPLE trees.
+ 
+ 2002-02-14  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-ccp.c (def_to_undefined): Improve sanity checking code
+ 	so that it can detect invalid VARYING->UNDEFINED transitions.
+ 	(set_lattice_value): Improve sanity checking code so that it
+ 	does not trip on valid VARYING->CONSTANT transitions.
+ 
+ 	* tree-flow.h (struct stmt_ann_d): Add new field in_ccp_worklist.
+ 	* tree-ssa-ccp.c (simulate_stmt): Renamed from simulate_def_use_edges.
+ 	(add_var_to_ssa_edges_worklist): New function.  Only add statements
+ 	to the ssa_edges worklist if they are not already on the worklist.
+ 	(def_to_undefined, def_to_varying, set_lattice_value)
+ 	(tree_ssa_ccp): Only reevaluate the statement if in_ccp_worklist
+ 	is set for the element popped off the ssa_edges worklist.
+ 	(simulate_statement): Simplify now that ssa_edges is a worklist
+ 	of statements to reevaluate rather than a worklist of defs
+ 	that need their immediate uses reevaluated.
+ 	(visit_stmt): Clear in_ccp_worklist.
+ 
+ 	* tree-ssa-ccp.c (def_to_undefined): Directly store the new
+ 	lattice values rather than call set_value.
+ 	(def_to_varying): Likewise.
+ 	(set_lattice_value): Likewise.
+ 
+ 	* tree-ssa-ccp.c (def_to_undefined): Add some state transition
+ 	sanity checking.  Avoid calling set_value if nothing changed.
+ 	(def_to_varying): Avoid calling set_value if nothing changed.
+ 	(set_lattice_value): Add some state transition sanity checking
+ 	for transitions into the CONSTANT state.  If the object's
+ 	"constant" value has changed to a new constant value, then the
+ 	object has a VARYING value.
+ 
+ 	* tree-ssa-ccp.c (tree_ssa_ccp): Work through the entire
+ 	ssa_edges worklist each iteration through the main loop.
+ 
+ 2002-02-13  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-ssa-ccp.c: Fix comment formatting glitches.
+ 
+ 	* tree-ssa-ccp.c (may_fold_p): New function.  Returns nonzero if
+ 	the given statement may fold after replacement of operands with
+ 	constants.
+ 	(evaluate_stmt): Only create a copy of the statement if there is
+ 	a reasonable chance the statement will fold.
+ 
+ 2002-02-13  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (OBJS): Add tree-ssa-pre.o.
+ 
+ 2003-02-13  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-dfa.c (create_stmt_ann): Do stmt part of common annotation.
+ 	* tree-flow-inline.h (tree_stmt): Return statement tree is part of.
+ 	* tree-flow.h (struct bb_ann_d): Add ephi_nodes.
+ 	* tree-optimize.c (optimize_tree): Activate SSAPRE again.
+ 	* tree-pretty-print.c (debug_generic_expr): New function.
+ 	(debug_generic_stmt): Ditto.
+ 	(dump_generic_node): Pretty print EUSE's, EREF's,  and EPHI's.
+ 
+ 	* tree-ssa-pre.c: Rewrite almost entirely. Now performs more
+ 	strength reduction, EPHI minimization, and keeps SSA up to date.
+ 	* tree.c (tree_size): Handle EUSE, EPHI, EREF nodes.
+ 	(tree_node_structure): Ditto.
+ 	(ephi_node_elt_check_failed): New function.
+ 	* tree.def: Add EUSE_NODE, ELEFT_NODE, EKILL_NODE, EPHI_NODE,
+ 	EEXIT_NODE.
+ 	* tree.h (EREF_NODE_CHECK): New.
+ 	(EPHI_NODE_ELT_CHECK): New.
+ 	(struct tree_eref_common): New.
+ 	(struct tree_euse_node): New.
+ 	(struct tree_ephi_node): New.
+ 	(union tree_node): Add euse, eref, ephi members.
+ 	(enum tree_node_structure): Add TS_EPHI_NODE, TS_EUSE_NODE,
+ 	TS_EREF_NODE.
+ 
+ 2003-02-13  Daniel Berlin <dberlin@dberlin.org>
+ 	    Andreas Jaeger  <aj@suse.de>
+ 
+ 	* tree-flow.h: Add some garbage collector marks.
+ 
+ 2003-02-12  Jeff Law  <law@redhat.com>
+ 
+ 	* Makefile.in (ssa.o): Depends on $(TREE_H) and tree-flow.h
+ 	* ssa.c: Include tree.h and tree-flow.h.
+ 	(compute_dominance_frontiers_1): Use the sparse bitmap
+ 	of dominator children from the basic block's annotation
+ 	if it's available.  Otherwise build the sparse bitmap
+ 	using the result of get_dominated_by.
+ 	* tree-ssa.c (rewrite_into_ssa): Reorder things slightly so
+ 	that we can use the cached dominator children computed
+ 	by mark_def_sites in compute_dominance_frontiers.
+ 
+ 2003-02-12  Andreas Jaeger  <aj@suse.de>
+ 
+ 	* tree-dfa.c (dump_alias_info): Cast variable of size_t properly.
+ 
+ 2003-02-12  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-dfa.c (find_may_aliases_for): Remove
+ 	(compute_may_aliases): Always call compute_alias_sets.
+ 
+ 2003-02-10  Jeff Law <law@redhat.com>
+ 
+ 	* ssa.c (compute_dominance_frontiers_1): Use a sparse bitmap
+ 	for the frontiers.
+ 	(compute_dominance_frontiers): Corresponding changes.
+ 	(convert_to_ssa): Similarly.  Convert the sparse bitmap to
+ 	a simple bitmap to avoid lots of collateral damage.
+ 	* ssa.h (compute_dominance_frontiers): Update prototype.
+ 	* tree-ssa.c (added, in_work): Kill, no longer needed.
+ 	(struct def_blocks_d): Add new bitmap (livein_blocks).
+ 	(rewrite_into_ssa): Make dominance frontiers be a sparse
+ 	bitmap instead of a simple bitmap.  Rename the "nonlocals"
+ 	simple bitmap to "globals".  Pass it into mark_def_sites.
+ 	(compute_global_livein): New function.
+ 	(mark_def_sites): Also keep track of variables which are
+ 	used before they are set.  Allow caller to allocate and
+ 	pass in a simple bitmap for global variables.  Process
+ 	items defined in the statement last.
+ 	(set_def_block): Also allocate bitmap for globals.
+ 	(set_livein_block): New function.
+ 	(def_blocks_free): Free def_blocks correctly.  Also free
+ 	livein_blocks.
+ 	(debug_def_blocks_r): Also dump the livein_blocks.
+ 	(insert_phi_nodes): Simplify now that we don't need the
+ 	added and in_work varrays.  Accept DFS as a sparse bitmap
+ 	instead of a simple bitmap.
+ 	(insert_phi_nodes_for): Rework significantly.  Pre-compute all
+ 	the insertion points for semi-pruned form.  While computing those
+ 	insertion points keep track of how many phi vector entries
+ 	would be needed at those insertion points.  When the number of
+ 	entries gets large (32), compute global life information and
+ 	use that to further pruned the number of PHI insertion points
+ 	necessary.
+ 
+ 2003-02-09  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (find_vars_r): Assume that the RHS of an INDIRECT_REF,
+ 	that is also an SSA variable, is a VAR_DECL.
+ 	(get_virtual_var): Handle INDIRECT_REF nodes that are not valid SSA
+ 	variables.
+ 
+ 	* tree-ssa-dce.c (stmt_useful_p): Revert kludge in previous commit.
+ 	VA_ARG_EXPR nodes are not inherently live.
+ 
+ 	* tree-ssa.c (mark_def_sites): Don't process the LHS of assignments
+ 	twice.
+ 	The operand of a virtual definition constitutes a use of the
+ 	variable which should be considered a non-local if it had not been
+ 	killed inside the block.
+ 
+ 	* tree.h (SSA_VAR_P): Only return true for INDIRECT_REFs if their
+ 	operand is a _DECL node.
+ 
+ 2003-02-09  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* config/rs6000/t-rs6000 (simplify-rtx.o): Compile with -Wno-error.
+ 
+ 2003-02-08  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* toplev.c (parse_options_and_default_flags): Enable SSA DCE by
+ 	default.
+ 
+ 	* tree-dfa.c (get_expr_operands): Recurse into LHS of an ARRAY_REF
+ 	when it's not a regular variable.  Always recurse into the RHS.
+ 	(add_stmt_operand): Set may_point_to_global_mem for pointers that
+ 	are assigned expressions that may reference global memory.  Also
+ 	set its dereference variable to be an alias of global memory.
+ 	(dump_variable): Show may_point_to_global_mem flag.
+ 	(compute_alias_sets): Also dump all referenced variables when
+ 	dumping alias information.
+ 	(add_may_alias): Check for global memory aliasing.
+ 	(may_access_global_mem_p): Rename from may_access_global_mem.
+ 	Return true if the expression is a variable that may point to or
+ 	alias global memory.
+ 	(add_referenced_var): Pointer arguments and global pointers may
+ 	point to global memory.
+ 	(set_may_alias_global_mem): Move ...
+ 	* tree-flow-inline.h (set_may_alias_global_mem): ... here.
+ 	(set_may_point_to_global_mem): New function.
+ 	(may_point_to_global_mem_p): New function.
+ 
+ 	* tree-ssa-dce.c (stmt_useful_p): VA_ARG_EXPRs are inherently live.
+ 	* tree-ssa.c (rewrite_into_ssa): Don't call dump_referenced_vars.
+ 
+ 2003-02-06  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (struct alias_tags, alias_tags, num_alias_tags):
+ 	Remove.  Update all users.
+ 	(struct alias_set_d): New.
+ 	(alias_sets): New file local variable.
+ 	(compute_alias_sets): New function.
+ 	(compute_may_aliases): Call it when not doing points-to analysis.
+ 	(register_alias_set): New function.
+ 	(find_alias_for): New function.
+ 	(may_alias_p): Declare static.
+ 	Don't assume that VAR may not be aliased if it's a non-addressable
+ 	_DECL.
+ 	If VAR and PTR are aggregate types, check if they can have a field
+ 	that points to the other one.
+ 	(find_may_aliases_for): Move handling of global memory aliasing ...
+ 	(add_may_alias): ... here.
+ 	Also accept the base symbols for the variable and its alias.
+ 	(register_new_alias): Remove.  Update all users.
+ 	(find_alias_tag): Remove.  Update all users.
+ 	(find_vars_r): Update VAR after re-writing *TP when sharing
+ 	INDIRECT_REF nodes.
+ 	* tree-flow.h (may_alias_p): Remove declaration.
+ 
+ 	* tree-ssa.c (rewrite_into_ssa): Include referenced variables in
+ 	default debug dumps.
+ 
+ 	Support for VLAs.
+ 
+ 	* tree-dfa.c (find_vla_decls): New function.
+ 	(compute_may_aliases): Call it.
+ 	(find_vla_decls_r): New function.
+ 	(dump_variable): Show whether the variable is used in a VLA
+ 	declaration.
+ 	* tree-flow-inline.h (is_vla_decl): New function.
+ 	(set_vla_decl): New function.
+ 	* tree-flow.h (struct var_ann_d): Add bitfield 'is_vla_decl'.
+ 	* tree-ssa-dce.c (need_to_preserve_store): Return true if SYM is
+ 	used inside a VLA declaration.
+ 
+ 2003-02-05  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* Makefile.in : Include new file tree-iterator.h in tree-simple.h
+ 	* gimplify.c (simplify_cleanup_point_expr): Use tsi_ rather than gsi_.
+ 	* tree-cfg.c (make_blocks, remove_bb): Use tsi_ not gsi_ routines.
+ 	(bsi_remove): Renamed from gsi_remove, use bsi_ routines.
+ 	(successor_block, first_exec_stmt): Use tsi_ not gsi_ routines.
+ 	(first_stmt, last_stmt, last_stmt_ptr): Use bsi_ not gsi_ routines.
+ 	(bsi_init): Split out from bsi_start.
+ 	(bsi_start): Renamed from gsi_start_bb, use bsi_ routines.
+ 	(bsi_next_in_bb): Moved from tree-flow-inline.h and renamed from
+ 	gsi_step_in_bb. Also verify BB of new stmt.
+ 	* tree-dfa.c (compute_immediate_uses, dump_immediate_uses,
+ 	collect_dfa_stats, compute_may_aliases): Use block_stmt_iterator.
+ 	* tree-flow-inline.h (gsi_step_in_bb): Moved to tree-cfg.c
+ 	(bsi_end_p): Renamed from gsi_end_bb_p.
+ 	(bsi_next): renamed from gsi_step_bb
+ 	(bsi_prev): New function.
+ 	(bsi_stmt_ptr): Block version of gsi_stmt_ptr.
+ 	(bsi_stmt): Block version of gsi_stmt.
+ 	(bsi_container): Block version of gsi_container.
+ 	* tree-flow.h (block_stmt_iterator): New iterator type.
+ 	* tree-iterator.h: New include file for tree_iterator.
+ 	* tree-simple.h : Include tree-iterator.h
+ 	(gimple_stmt_iterator, gsi_start, gsi_end_p, gsi_stmt_ptr,
+ 	gsi_stmt, gsi_container): Move to tree-iterator.h and rename to tsi_.
+ 	(gsi_step): Move to tree-iterator.h and renamed to tsi_next.
+ 	* tree-ssa-ccp.c (simulate_block, substitute_and_fold): Use block
+ 	iterators instead of gimple_stmt_iterator.
+ 	* tree-ssa-dce.c (mark_control_parent_necessary, find_useful_stmts,
+ 	remove_dead_stmts, remove_dead_stmt): Use block_stmt_iterator.
+ 	* tree-ssa.c (mark_def_sites, rewrite_out_of_ssa, rewrite_stmts): Use
+ 	block_stmt_iterator.
+ 
+ 2003-02-04  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-alias-common.c (get_alias_var_decl): If it's a global var,
+ 	make sure it doesn't get added to local_alias_vars.
+ 	(get_name): Return the right name for FUNCTION_DECL's.
+ 
+ 2003-02-04  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (add_stmt_operand): Do not add a VUSE for a pointer
+ 	when clobbering its associated INDIRECT_REF variable.
+ 
+ 2003-02-04  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* config/rs6000/t-rs6000 (jump.o, regmove.o, c-typeck.o, cfgrtl.o,
+ 	combine.o, fold-const.o, ifcvt.o, reload1.o, rtlanal.o,
+ 	cp/decl2.o, cp/pt.o, f/where.o, java/expr.o, objc/objc-act.o,
+ 	rs6000.o, insn-emit.o): Compile with -Wno-error.
+ 
+ 2003-02-03  Diego Novillo  <dnovillo@redhat.com>
+ 	    Jeff Law  <law@redhat.com>
+ 
+ 	* tree-cfg.c (make_blocks): Don't always start a new block with
+ 	COND_EXPR and SWITCH_EXPR statements.
+ 	Call stmt_ends_bb_p to determine if the current statement should be
+ 	the last in the block.
+ 	(make_cond_expr_blocks): Second argument is now the entry block
+ 	to the conditional.
+ 	(make_switch_expr_blocks): Second argument is now the entry block
+ 	to the switch.
+ 	(make_edges, make_ctrl_stmt_edges, make_loop_expr_edges,
+ 	cleanup_control_flow, cleanup_cond_expr_graph,
+ 	cleanup_switch_expr_graph, disconnect_unreachable_case_labels,
+ 	find_taken_edge, successor_block, latch_block, is_latch_block,
+ 	switch_parent): Work with the last statement of the block, not the
+ 	first.
+ 	(is_ctrl_altering_stmt): Pre-compute the code of the statement.
+ 	(stmt_starts_bb_p): Declare file local.
+ 	Don't call is_ctrl_stmt.  Check if T is a LOOP_EXPR instead.
+ 	(stmt_ends_bb_p): New function.
+ 
+ 	* tree-flow.h (stmt_starts_bb_p): Remove declaration.
+ 
+ 2003-02-03  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (find_vars_r): Share INDIRECT_REF nodes whose operand
+ 	is a VAR_DECL.
+ 	(add_referenced_var): Add additional argument 'sym'.  Update all users.
+ 	Don't call get_base_symbol.
+ 	(add_indirect_ref_var): Rename argument 'var' to 'ptr'.
+ 	(htab_hash_var): Remove.  Update all users to use htab_hash_pointer.
+ 	(htab_var_eq): Remove.  Update all users to use htab_eq_pointer.
+ 
+ 	* tree-flow-inline.h (var_ann): Don't retrieve the annotation of
+ 	the base pointer for INDIRECT_REF variables.
+ 	(is_aliased): Remove.  Update all users.
+ 	(is_dereferenced): Remove.  Update all users.
+ 	(same_var_p): Remove.  Update all users to use pointer equality.
+ 
+ 	* tree-simple.c (get_base_symbol): Convert tail recursion into
+ 	iteration.
+ 
+ 	* tree-ssa.c (rewrite_out_of_ssa): Add FIXME note about overlapping
+ 	live ranges for different versions of the same variable.
+ 
+ 2003-02-03  Jeff Law  <law@redhat.com>
+ 
+ 	* tree-dfa.c (add_referenced_var): Annotate each item in the
+ 	REFERENCED_VARS varray with a unique id.
+ 	* tree-flow.h (struct var_ann_d): Add new uid field.
+ 	* tree-ssa.c (mark_def_sites): Compute the set of variables
+ 	live across basic blocks and return them in an sbitmap.
+ 	(insert_phi_nodes): Use the set of nonlocal variables computed
+ 	by mark_def_sites to reduce the number of PHI nodes inserted.
+ 	(rewrite_into_ssa): Updated to deal with changes in
+ 	insert_phi_nodes and mark_def_sites.  Free the sbitmap returned
+ 	by mark_def_sites.
+ 
+ 2003-02-03  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-common.h (GOTO_DESTINATION): Remove.  Fix botched
+ 	merge.
+ 
+ 2003-02-03  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	Fix warnings to allow bootstrapping with -Werror.
+ 
+ 	* Makefile.in (c-semantics.o-warn): Add -Wno-error.
+ 	(emit-rtl.o-warn): Likewise.
+ 	(profile.o-warn): Likewise.
+ 	(tree.o-warn): Likewise.
+ 	(OBJS): Remove simple-break-elim.o and simple-goto-elim.o.
+ 	* c-pretty-print.c (print_function_decl): Remove unused function.
+ 	* bitmap.c (bitmap_last_set_bit): Initialize variable 'word'.
+ 	* c-typeck.c (build_binary_op): Initialize variable 'type'.
+ 	* combine.c (combine_simplify_rtx): Initialize variable 'reversed'.
+ 	(make_compound_operation): Initialize variable 'i'.
+ 	* dwarf2out.c (dwarf2out_finish): Initialize variable 'context'.
+ 	* expr.c (store_constructor): Initialize variables 'lo', 'hi',
+ 	'startb' and 'endb'.
+ 	(expand_expr): Initialize variable 'op0'.
+ 	* fold-const.c (fold): Initialize variable 'tem'.
+ 	* profile.c (branch_prob): Initialize variable 'prev_file_name'.
+ 	* reload.c (find_equiv_reg): Initialize variables 'valtry and
+ 	'valueno'.
+ 	* rtlanal.c (get_jump_table_offset): Initialize variable 'set'.
+ 	* ssa-ccp.c (ssa_const_prop): Fix sign mismatch warning.
+ 	* varasm.c (output_constant_def): Initialize variable 'defstr'.
+ 	* gimplify.c (simplify_expr): Initialize variables
+ 	'saved_input_filename' and 'saved_lineno'.
+ 	(simplify_compound_lval): Initialize variable 'code'.
+ 	* tree-alias-ander.c (pta_bottom): De-ansify.
+ 	(andersen_cleanup): Remove unused variables.
+ 	(andersen_heap_assign): Mark argument lhs ATTRIBUTE_UNUSED.
+ 	(pta_bottom): Remove unused function.
+ 	(pta_get_ptsize): Remove unused function.
+ 
+ 2003-02-02  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (get_expr_operands): Add a VUSE for the dereference of
+ 	every pointer passed in a function call.
+ 	Move code to add an operand for the base pointer of an
+ 	INDIRECT_REF ...
+ 	(add_stmt_operand): ... here.
+ 	Add a VUSE for the base pointer of every INDIRECT_REF variable.
+ 	(find_may_aliases_for): Fix starting index for the loop that scans
+ 	INDIRECT_REFs for aliasing.
+ 	Factor code that marks two variables aliased into
+ 	register_new_alias.
+ 	(register_new_alias): New function.
+ 	(may_alias_p): Handle aliasing of structure fields.
+ 	(add_may_alias): Fix documentation.
+ 	(find_vars_r): Factor code that adds a new referenced variable into
+ 	add_referenced_var.
+ 	(add_referenced_var): New function.
+ 	(add_indirect_ref_var): New function.
+ 	(get_virtual_var): Handle variables wrapped in SSA_NAMEs.
+ 	(set_may_alias_global_mem): Move from ...
+ 	* tree-flow-inline.h: ... here.
+ 
+ 	* tree-ssa-dce.c (need_to_preserve_store): CALL_EXPRs are
+ 	implicitly live.  VA_ARG_EXPRs are not.
+ 	(stmt_useful_p):
+ 
+ 	* tree.h (SSA_NAME_VAR): Rename from SSA_NAME_DECL.  Update all
+ 	users.
+ 	(struct tree_ssa_name): Rename field 'decl' to 'var'.  Update all
+ 	users.
+ 	(SSA_DECL_P): Accept only VAR_DECLs and PARM_DECLs possibly wrapped
+ 	inside an SSA_NAME node.
+ 	(SSA_VAR_P): Also accept SSA_NAME nodes.
+ 
+ 2003-02-01  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* Makefile.in (tree-ssa-pre2.o): Remove accidental addition.
+ 
+ 2003-01-31  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-cfg.c (find_taken_edge_cond_expr): New function.
+ 	(find_taken_edge_switch_expr): New function.
+ 	(value_matches_some_label): New function.
+ 	(find_taken_edge): Re-structure to use the three new functions.
+ 
+ 2003-01-30  Jason Merrill  <jason@redhat.com>
+ 
+ 	* gimplify.c (simplify_function_tree): Set TREE_SIDE_EFFECTS on
+ 	the BIND_EXPR wrapper.
+ 
+ 2003-01-30  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (call_may_clobber): New function.
+ 	(get_expr_operands): Call it.
+ 	(find_vars_r): Call it.
+ 
+ 2003-01-30  Jeff Law <law@redhat.com>
+ 
+ 	* tree-dfa.c (struct alias_tags): New.  Collector for key information
+ 	regarding alias tags.
+ 	(indirect_refs_base, indirect_refs_alias_set): New varrays.
+ 	(addressable_vars_base, addressable_vars_alias_set): Likewise.
+ 	(compute_may_aliases): Initialize and finalize the new varrays.
+ 	Update allocation of alias tags information.
+ 	(find_may_aliases_for): Extract base symbols and alias set
+ 	information for V1 and V2 from the virtual arrays and store
+ 	them into local variables.  Pass them as necessary to
+ 	may_alias_p, may_access_global_mem, find_alias_tag.  Add base
+ 	symbol and alias set when creating a new alias tag.
+ 	(find_vars_r): Fill in new varrays as needed.
+ 	(may_alias_p): Add new arguments for base and alias set of the
+ 	two origianl incoming arguments.  No longer call get_base_symbol
+ 	or get_alias_set.
+ 	(find_alias_tag,  may_access_global_mem): Similarly.
+ 	(add_stmt_operand): Update to pass additional argument to
+ 	may_access_global_mem.
+ 	(dump_alias_info): Update to deal with new alias tag structure.
+ 	* tree-flow.h (may_alias_p): Update prototype with new arguments.
+ 	* tree-ssa-pre.c (process_left_occs_and_kills): Update to pass
+ 	new arguments to may_alias_p.
+ 
+ 2003-01-30  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	Remove all traces of steensgaard's algorithm.
+ 	* tree-alias-steen.c: Removed.
+ 	* tree-alias-steen.h: Ditto.
+ 	* tree-alias-ecr.c: Ditto.
+ 	* tree-alias-ecr.h: Ditto.
+ 	* disjoint-set.c: Ditto.
+ 	* disjoint-set.h: Ditto.
+ 	* Makefile.in: Remove removed files.
+ 	* c-config-lang.in: Ditto.
+ 	* gengtype.c: Ditto.
+ 	* tree-alias-common.c: Don't use steen_alias_ops anymore.
+ 	* toplev.c: Remove help text and steen option.
+ 	* tree-alias-common.h: Remove PTA_STEEN.
+ 	* tree-alias-type.c: Remove all steensgaard related types and
+ 	functions.
+ 	* tree-alias-type.h: Ditto.
+ 
+ 2003-01-30  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-cfg.c (struct cfg_stats_d): New.
+ 	(cfg_stats): New file local.
+ 	(build_tree_cfg): Start TV_TREE_CFG timer before allocating memory.
+ 	Initialize cfg_stats.
+ 	(make_blocks): Count coalesced label blocks.
+ 	(dump_tree_cfg): Call dump_cfg_stats if TDF_STATS is enabled.
+ 	(dump_cfg_stats): New.
+ 	(debug_cfg_stats): New.
+ 
+ 	* tree-dfa.c (SCALE, LABEL, PERCENT): Move ...
+ 	* tree-flow.h: ... here
+ 
+ 2003-01-29  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-cfg.c (make_blocks): Do not start a new block if the
+ 	previous statement and the current statement are labels of the same
+ 	kind.
+ 
+ 2003-01-29  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-cfg.c (parent_array): Make file local.
+ 	(label_to_block_map): New file local variable.
+ 	(build_tree_cfg): Initialize label_to_block_map.
+ 	(make_edges): Don't pre-scan all the blocks looking for blocks with
+ 	labels.
+ 	(make_exit_edges): Remove argument label_to_block_map.  Update all
+ 	callers.
+ 	(make_goto_expr_edges): Likewise.
+ 	(dump_tree_bb): Check that the block has a valid annotation.
+ 	(set_bb_for_stmt): If the statement is a label, add the label to
+ 	the label_to_block_map.
+ 
+ 	* tree-pretty-print.c (dump_vops): Check that the block has a valid
+ 	annotation.
+ 
+ 2003-01-29  Jeff Law <law@redhat.com>
+ 
+ 	* tree-dfa.c (find_may_aliases_for): Just accept the index of
+ 	the current indirect_ref.  Caller updated.
+ 	(num_indirect_refs, num_addressable_vars): New variables.
+ 	(indirect_refs, addressable_vars): New varrays.
+ 	(dump_dfa_status): Dump info on the indirect refs and
+ 	addressable vars.
+ 	(dump_alias_info): Similarly.
+ 	(compute_may_aliases): Initialize and finalize the new virtual
+ 	arrays and hash tables for indirect refs and addressable vars.
+ 	Include setup/teardown in the cost for alias analysis.
+ 	(find_may_aliases_for):  Split main loop into two.  The first
+ 	walks over the indirect refs and takes advantage of the
+ 	symmetric properties of the aliasing relationship to avoid
+ 	useless work.  The second loop iterates over the addressable
+ 	variables.
+ 	(find_vars_r): Rework to build all three arrays we need.
+ 
+ 2003-01-29  Andreas Jaeger  <aj@suse.de>
+ 
+ 	* tree-alias-common.c (find_func_aliases): Remove unused variable.
+ 	(display_points_to_set_helper): #if 0 function to avoid warning
+ 	about unused function.
+ 
+ 	* tree-alias-ecr.c (ECR_new): Remove ISO C style function
+ 	definition.
+ 	* disjoint-set.c (disjoint_set_new): Likewise.
+ 
+ 2003-01-29  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* tree-mudflap.c (mx_xfn_indirect_ref): Use a stack of flags for
+ 	tracking pointer dereference reads vs writes.
+ 	(mf_build_check_statement_for): Pass access-type value to __mf_check.
+ 	* c-mudflap.c (mflang_register_call): Adapt to mf-runtime.h API change.
+ 
+ 2003-01-29  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (ssa.o): Add dependency on $(TIMEVAR_H).
+ 	* timevar.def (TV_DOM_FRONTIERS): Define.
+ 	* ssa.c (compute_dominance_frontiers): Use.
+ 
+ 2003-01-29  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-dce.c (remove_dead_stmt): Fix uninitialized use
+ 	warning.
+ 
+ 2003-01-28  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* timevar.def (TV_TREE_SSA_REWRITE_BLOCKS): Adjust legend.
+ 	* tree-ssa.c (rewrite_into_ssa): Use TV_TREE_SSA_REWRITE_BLOCKS.
+ 	(mark_def_sites): Add comment.
+ 
+ 2003-01-28  Jeff Law <law@redhat.com>
+ 
+ 	* ssa.c (compute_dominance_frontiers_1): Use get_dominated_by
+ 	to avoid useless walks over all the basic blocks.  Use cache
+ 	of immediate dominators to avoid silly calls to get_immediate_dominator.
+ 	Do not clear elements of the frontiers bitmap.
+ 	(compute_dominance_frontiers): Compute cache of immediate
+ 	dominators and pass it to compute_dominance_frontiers_1.  Clear
+ 	the entire vector of frontiers bitmaps.
+ 
+ 	* timevar.def (TV_TREE_SSA_REWRITE_BLOCKS): Renamed from
+ 	TV_TREE_BUILD_SSA.
+ 	(TV_TREE_SSA_OTHER): New timevar.
+ 	* tree-ssa.c (rewrite_into_ssa): Updated.  Use new TV_TREE_SSA_OTHER
+ 	timevar.
+ 
+ 	* tree.h (LABEL_DECL_INDEX): Define for use by CFG builder.
+ 	* tree-cfg.c (make_exit_edges): Accept and pass though label to
+ 	block mapping array.
+ 	(make_goto_expr_edges): For simple gotos, lookup the destination
+ 	in the label to block mapping array.  Zap old slow code to
+ 	handle simple gotos.
+ 	(make_edges): Build the label to block mapping array.
+ 
+ 	* tree.h (PHI_NODE_ELT_CHECK): Provide version when ENABLE_CHECKING
+ 	is not defined.
+ 
+ 2003-01-28  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-flow-inline.h (parent_block, set_parent_block, phi_nodes):
+ 	Assume that blocks always have valid annotations.
+ 	(add_dom_child): New function.
+ 	(dominator_children): New function.
+ 
+ 	* tree-flow.h (struct bb_ann_d): Add field 'dom_children'.
+ 
+ 	* tree-ssa.c (mark_def_sites): Add parameter 'idom'.
+ 	Add each block BB to the set of dominator children of BB's
+ 	immediate dominator.
+ 	(rewrite_block): Remove 'idom' parameter.
+ 	Recurse into blocks set in the dominator children bitmap.
+ 
+ 2003-01-28  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* flags.h (flag_disable_tree_ssa): New flag.
+ 	* c-decl.c (c_expand_body): Use it.
+ 	* toplev.c: Declare it.
+ 	(f_options): Add help text for -fdisable-tree-ssa.
+ 	* doc/invoke.texi: Add documentation for -fdisable-tree-ssa.
+ 
+ 2003-01-28  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (TREE_FLOW_H): Add dependency on $(HASHTAB_H)
+ 	(OBJS): Temporarily remove tree-ssa-pre.o.
+ 	(tree-ssa.o, c-decl.o): Add dependency on $(TREE_DUMP_H).
+ 
+ 	* c-decl.c: Include tree-dump.h
+ 
+ 	* c-pretty-print.c (dump_c_node): Fix rendering of GOTO_STMTs to
+ 	computed locations.
+ 	(op_prio): Don't abort on unknown operators.
+ 
+ 	* c-simplify.c (mostly_copy_tree_r): Don't copy statement
+ 	annotations.
+ 
+ 	* gimplify.c (simplify_addr_expr): Mark the RHS of the simplified
+ 	ADDR_EXPR addressable.
+ 	(mostly_copy_tree_r): Don't copy statement annotations.
+ 
+ 	* old-tree-inline.c (walk_tree): Handle SSA_NAME nodes.
+ 
+ 	* timevar.def (TV_TREE_RDEFS): Remove.
+ 	(TV_TREE_BUILD_SSA): Define.
+ 	(TV_TREE_DFA): Define.
+ 
+ 	* tree-cfg.c: Update copyright notices.
+ 	Remove doxygen markers everywhere.
+ 	(remove_unreachable_block): New local function
+ 	(remove_unreachable_blocks): Call it.
+ 	(remove_bb): Rename from remove_tree_bb.  Update all callers.
+ 	(validate_loops): Remove unused function.
+ 	(block_invalidates_loop): Remove unused function.
+ 	(remove_stmt): Invalidate the defining statement of all the
+ 	definitions made by the statement.
+ 	Remove the annotation before replacing the statement with
+ 	empty_stmt_node.
+ 
+ 	* tree-dfa.c: Update copyright notices.
+ 	Remove doxygen markers everywhere.
+ 	(struct clobber_data_d): Remove existing fields.  Add fields 'stmt'
+ 	and 'prev_vops'.  Update all users.
+ 	(alias_tags): Rename from alias_leaders.
+ 	(num_alias_tags): Rename from num_alias_leaders.
+ 	(struct dfa_stats_d): Declare.
+ 	(struct dfa_counts_d): Remove.  Update all users.
+ 	(TRM_*): Remove.  Update all users.
+ 	(find_tree_refs): Remove.  Update all users.
+ 	(get_stmt_operands): Rename from find_refs_in_stmt.  Update all users.
+ 	(get_expr_operands): Rename from find_refs_in_expr.  Update all users.
+ 	(add_stmt_operand): New function.
+ 	(set_def): New function.
+ 	(add_use): New function.
+ 	(add_vdef): New function.
+ 	(add_vuse): New function.
+ 	(create_phi_node): New function.
+ 	(copy_stmt): New function.
+ 	(compute_immediate_uses): New function.
+ 	(compute_immediate_uses_for): New function.
+ 	(compute_reached_uses): New function.
+ 	(compute_reaching_defs): New function.
+ 	(add_immediate_use): New function.
+ 	(create_var_ann): New function.
+ 	(create_stmt_ann): New function.
+ 	(dump_immediate_uses): New function.
+ 	(debug_immediate_uses): New function.
+ 	(dump_immediate_uses_for): New function.
+ 	(debug_immediate_uses_for): New function.
+ 	(create_ref_list, empty_ref_list, add_ref_to_list_begin,
+ 	add_ref_to_list_end, add_list_to_list_begin, add_list_to_list_end,
+ 	find_list_node, rli_start, rli_start_last, rli_start_at,
+ 	rli_delete, add_ref_to_list_after, tree_ref_size, create_ref,
+ 	add_ephi_arg, add_referenced_var, replace_ref_with,
+ 	try_replace_ref_with, replace_ref_r, replace_ref_stmt_with,
+ 	remove_ref, remove_def, reset_def_def_links, replace_phi_arg_with,
+ 	create_tree_ann, function_may_recurse_p, dump_ref, debug_ref,
+ 	dump_ref_list, dump_ref_array, debug_ref_list, debug_ref_array,
+ 	dump_phi_args, dump_if_different, count_tree_refs, ref_type_name,
+ 	ref_defines, is_killing_def, tree_ref_structure, output_ref):
+ 	Remove.  Update all users.
+ 	(dump_referenced_vars): Remove parameter 'details'.  Update all
+ 	users.
+ 	(dump_variable): Don't abort if the variable is nil.  Display all
+ 	the aliases for the variable.
+ 	(dump_dfa_stats): Handle new counters.
+ 	(collect_dfa_stats): Likewise.
+ 	(collect_dfa_stats_r): Likewise.
+ 	(find_vars_r): New function.
+ 	(compute_may_aliases): Call it via walk_tree before computing aliases.
+ 	Only use alias tags if -ftree-points-to is not given.
+ 	Call add_may_alias.
+ 	(find_may_aliases_for): Only use alias tags if -ftree-points-to is
+ 	not given.
+ 	(add_may_alias): New function.
+ 	(find_alias_tag): Rename from find_alias_leader.
+ 	(dump_alias_info): New function.
+ 	(debug_alias_info): New function.
+ 	(htab_hash_var): New function.
+ 	(htab_var_eq): New function.
+ 	(get_virtual_var): New function.
+ 
+ 	* tree-dump.c (struct dump_option_value_info): Rename -block to
+ 	-blocks.  Add new option -vops.
+ 	(dump_function): Don't display which pass enabled the dump.
+ 
+ 	* tree-flow-inline.h: Update copyright notices.
+ 	(var_ann): New function.
+ 	(stmt_ann): New function.
+ 	(ann_type): New function.
+ 	(bb_ann): Rename from bb_annotation.
+ 	(may_aliases): New function.
+ 	(set_may_alias_global_mem): New function.
+ 	(may_alias_global_mem_p): New function.
+ 	(set_indirect_ref): New function.
+ 	(indirect_ref): New function.
+ 	(is_dereferenced): New function.
+ 	(modify_stmt): New function.
+ 	(unmodify_stmt): New function.
+ 	(stmt_modified_p): New function.
+ 	(def_op): New function.
+ 	(use_ops): New function.
+ 	(vdef_ops): New function.
+ 	(vuse_ops): New function.
+ 	(immediate_uses): New function.
+ 	(reaching_defs): New function.
+ 	(phi_nodes): New function.
+ 	(same_var_p): New function.
+ 	(gsi_step_in_bb): Re-implement.  Check if the iterator stepped out
+ 	of the block by calling bb_for_stmt.
+ 	(gsi_end_bb_p): Rename from gsi_end_bb.  Update all users.
+ 	Call gsi_stmt to determine if the iterator has reached the end of
+ 	the block.
+ 	(ref_id, ref_type, ref_bb, ref_stmt, ref_var, imm_uses,
+ 	reached_uses, imm_reaching_def, set_imm_reaching_def,
+ 	set_phi_arg_def, phi_arg_def, set_phi_arg_edge, phi_arg_edge,
+ 	reaching_defs, phi_args, num_phi_args, phi_arg, set_phi_arg,
+ 	tree_annotation, tree_refs, add_tree_ref, remove_tree_ref,
+ 	alias_leader, set_alias_leader, set_tree_flag, clear_tree_flag,
+ 	reset_tree_flags, tree_flags, indirect_var, set_indirect_var,
+ 	bb_refs, remove_bb_ref, set_exprref_class, exprref_class,
+ 	set_exprref_inserted, exprref_inserted, set_exprref_save,
+ 	exprref_save, set_exprref_reload, exprref_reload,
+ 	set_exprref_processed, set_exprref_processed2, exprref_processed2i,
+ 	exprref_uses, set_exprref_uses, set_expruse_def, expruse_def,
+ 	set_expruse_phiop, expruse_phiop, set_expruse_phi, expruse_phi,
+ 	set_expruse_has_real_use, expruse_has_real_use,
+ 	set_exprphi_phi_args, exprphi_phi_args, num_ephi_args, ephi_arg,
+ 	set_ephi_arg, set_exprphi_downsafe, exprphi_downsafe,
+ 	set_exprphi_canbeavail, exprphi_canbeavail, set_exprphi_later,
+ 	exprphi_later, set_exprphi_extraneous, exprphi_extraneous,
+ 	exprphi_willbeavail, is_assignment_stmt, is_may_ref, is_may_def,
+ 	is_may_use, is_partial_ref, is_partial_use, is_volatile_ref,
+ 	is_volatile_def, is_volatile_use, is_clobbering_def,
+ 	is_relocating_def, is_addressof_use, is_pure_use, is_pure_def,
+ 	rli_after_end, rli_step, rli_step_rev, rli_ref, get_last_ref,
+ 	get_first_ref, ref_list_is_empty): Remove.  Update all users.
+ 
+ 	* tree-flow.h: Update copyright notices.
+ 	Remove doxygen markers.
+ 	Include hashtab.h.
+ 	(enum tree_ann_type): New.
+ 	(struct tree_ann_common_d): New.
+ 	(struct var_ann_d): New.
+ 	(struct operands_d): New.
+ 	(struct voperands_d): New.
+ 	(operands_t): New type.
+ 	(voperands_t): New type.
+ 	(struct dataflow_d): New.
+ 	(dataflow_t): New type.
+ 	(struct stmt_ann_d): New.
+ 	(tree_ann): New type.
+ 	(var_ann_t): New type.
+ 	(stmt_ann_t): New type.
+ 	(bb_ann_t): Rename from bb_ann.
+ 	(enum tree_ref_type, TRM_*, struct ref_list_node, struct
+ 	ref_list_priv, ref_list, struct tree_ref_common, struct var_ref_d,
+ 	struct var_def_d, struct var_phi_d, struct var_use_d, struct
+ 	phi_node_arg_d, phi_node_arg, struct expr_ref_common, struct
+ 	expr_phi_d, struct expr_use_d, enum tree_ref_structure_enum, union
+ 	tree_ref_d, tree_ref, struct tree_ann_d, tree_ann, enum tree_flags,
+ 	struct dfa_counts_d, ref_list_iterator): Remove.  Update all users.
+ 	(TDFA_USE_OPS): Define.
+ 	(TDFA_USE_VOPS): Define.
+ 
+ 	* tree-inline.c (walk_tree): Handle SSA_NAME nodes.
+ 
+ 	* tree-optimize.c: Update copyright notices.
+ 	Remove doxygen markers.
+ 	(optimize_function_tree): Temporarily disable call to
+ 	tree_perform_ssapre.
+ 	Remove #if0 code.
+ 
+ 	* tree-pretty-print.c (MASK_POINTER): Define.
+ 	(dump_vops): New function.
+ 	(dump_generic_node): Shorten made-up names for unnamed objects.
+ 	Hanlde PHI_NODE, VDEF_EXPR and SSA_NAME nodes.
+ 	Keep track of basic block transitions.
+ 	Call dump_vops if -vops dump option is given.
+ 	(op_prio): Don't abort if the operand is nil.
+ 	(dump_block_info): Don't keep track of basic block transitions.
+ 
+ 	* tree-simple.c: Update copyright notices.
+ 	(get_base_symbol): Call STRIP_NOPS.
+ 	Handle SSA_NAME nodes.
+ 
+ 	* tree-simple.h: Update copyright notices.
+ 	(gsi_end_p): Rename from gsi_end.  Update all callers.
+ 
+ 	* tree-ssa-ccp.c: Update copyright notices.
+ 	Update code to use the new SSA infrastructure.
+ 	(const_values): New hash table to keep track of constants.
+ 	(struct value_map_d): New.
+ 	(cfg_edges): Rename from edges.  Update all users.
+ 	(set_value): New function.
+ 	(get_value): New function.
+ 	(get_default_value): New function.
+ 	(value_map_hash): New function.
+ 	(value_map_eq): New function.
+ 
+ 	* tree-ssa-dce.c: Update copyright notice.
+ 	Update code to use new SSA infrastructure.  Factor some code into
+ 	new functions.
+ 	(dom_info): Declare with file scope.
+ 	(struct stmt_stats): Add fields 'total_phis' and 'removed_phis'.
+ 	(needed_stmts): New hash table to keep track of needed statements.
+ 	(stmt_useful_p): New function.
+ 	(find_useful_stmts): Call it.
+ 	(remove_dead_stmt, remove_dead_phis): New functions.
+ 	(remove_dead_stmts): Call them.
+ 	(need_to_preserve_store): Preserve stores to volatile variables.
+ 	(tree_ssa_dce): Rename from tree_ssa_eliminate_dead_code.  Update
+ 	all users.
+ 
+ 	* tree-ssa.c: Update copyright notice.
+ 	Change basic algorithm to rewrite the function into SSA form
+ 	instead of building factored use-def chains.
+ 	Include hashtab.h and tree-dump.h
+ 	(next_ssa_version): New global variable.
+ 	(def_blocks): New file local variable.
+ 	(struct def_blocks_d): New.
+ 	(currdefs): New file local variable.
+ 	(struct currdef_d): New.
+ 	(rewrite_into_ssa): Rename from build_tree_ssa.  Update all users.
+ 	Call compute_may_aliases, mark_def_sites and rewrite_block.
+ 	(rewrite_block): Rename from search_fud_chains.  Call
+ 	rewrite_stmts.
+ 	(mark_def_sites): New function.
+ 	(set_def_block): New function.
+ 	(rewrite_stmts): New function.
+ 	(rewrite_stmt): New function.
+ 	(rewrite_operand): New function.
+ 	(rewrite_out_of_ssa): New function.
+ 	(remove_phi_node): New function.
+ 	(register_new_def): New function.
+ 	(def_blocks_free): New function.
+ 	(def_blocks_hash): New function.
+ 	(def_blocks_eq): New function.
+ 	(currdef_hash): New function.
+ 	(currdef_eq): New function.
+ 	(debug_def_blocks): New function.
+ 	(debug_def_blocks_r): New function.
+ 	(build_fud_chains, compute_reaching_defs, follow_chain,
+ 	dump_reaching_defs, debug_reaching_defs, set_ssa_links): Remove.
+ 	(remove_phi_arg): Rename from tree_ssa_remove_phi_alternative.
+ 	Update all users.
+ 	(init_tree_ssa): Set next_ssa_version to 1.
+ 	Create hash tables def_blocks and currdefs.
+ 	(delete_tree_ssa): Accept a FUNCTION_DECL tree as argument.  Update
+ 	all users.
+ 	(currdef_for): Add new parameter 'create_default'.  If nonzero,
+ 	create a new SSA name if none is found for the variable.
+ 	(set_currdef_for): Search in the currdefs hash table.
+ 
+ 	* tree.c (tree_node_kind): Add new values phi_kind and
+ 	ssa_name_kind.
+ 	(tree_node_kind_names): Likewise.
+ 	(tree_size): Handle PHI_NODE and SSA_NAME nodes.
+ 	(make_node): Likewise.
+ 	(tree_node_structure): Likewise.
+ 	(phi_node_elt_check_failed): New function.
+ 	(make_phi_node): New function.
+ 	(make_ssa_name): New function.
+ 	(build_vdef_expr): New function.
+ 
+ 	* tree.def (SSA_NAME): New code.
+ 	(VDEF_EXPR): New code.
+ 	(PHI_NODE): New code.
+ 
+ 	* tree.h (union tree_ann_d): Forward declare.
+ 	(struct tree_common): Change type of field 'ann'.
+ 	(PHI_NODE_ELT_CHECK): Define.
+ 	(phi_node_elt_check_failed): Declare.
+ 	(VDEF_RESULT): Define.
+ 	(VDEF_OP): Define.
+ 	(SSA_NAME_DECL): Define.
+ 	(SSA_NAME_DEF_STMT): Define.
+ 	(SSA_NAME_VERSION): Define.
+ 	(struct tree_ssa_name): New.
+ 	(PHI_RESULT): Define.
+ 	(PHI_NUM_ARGS): Define.
+ 	(PHI_ARG_CAPACITY): Define.
+ 	(PHI_ARG_ELT): Define.
+ 	(PHI_ARG_EDGE): Define.
+ 	(PHI_ARG_DEF): Define.
+ 	(struct phi_arg_d): New.
+ 	(struct tree_phi_node): New.
+ 	(SSA_DECL_P): Define.
+ 	(SSA_VAR_P): Define.
+ 	(enum tree_node_structure_enum): Add values TS_SSA_NAME and
+ 	TS_PHI_NODE.
+ 	(union tree_node): Add fields 'ssa_name' and 'phi'.
+ 	(make_phi_node): Declare.
+ 	(make_ssa_name): Declare.
+ 	(build_vdef_expr): Declare.
+ 	(TDF_BLOCKS): Rename from TDF_BLOCK.
+ 	(TDF_VOPS): Define.
+ 
+ 	* doc/invoke.texi: Document new tree dump option -vops.  Update
+ 	documentation for switch -blocks.
+ 
+ 2003-01-27  Jeff Law <law@redhat.com>
+ 
+ 	* gimplify.c (simplify_return_expr): Correctly handle return
+ 	expressions with side effects in functions returning void.
+ 
+ 	* tree-ssa-ccp.c (widen_bitfield): Do not try to widen anything
+ 	except constant integers.
+ 
+ 2003-01-26  Jeff Law <law@redhat.com>
+ 
+ 	* c-simplify.c (simplify_decl_stmt): Fix comment typo.
+ 	Use correct predicate when "simplifying" a static initializer.
+ 
+ 2003-01-26  Andreas Jaeger  <aj@suse.de>
+ 
+ 	* Makefile.in (gt-dependence.h): New rule.
+ 
+ 2003-01-23  Jeff Law <law@redhat.com>
+ 
+ 	* c-simplify.c (simplify_decl_stmt): Arrange to examine initializers
+ 	for static variables.
+ 	* gimplify.c (simplify_constructor): Kill initial is_simple_constructor
+ 	check.
+ 	(simplify_modify_expr): Get the type from the destination rather than
+ 	the toplevel expression.  Handle case where type is ARRAY_TYPE.  Ignore
+ 	TREE_STATIC for the RHS.
+ 
+ 2003-01-24  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* tree-mudflap.c (mf_varname_tree): Check for non-NULL DECL_NAME
+ 	before trying to cplus_demangle it.
+ 
+ 2003-01-23  Jeff Law <law@redhat.com>
+ 
+ 	* tree-cfg.c (make_exit_edges): Fix thinkos.
+ 
+ 2003-01-22  Jeff Law <law@redhat.com>
+ 
+ 	* tree-cfg.c (make_goto_expr_edges): Check the underlying
+ 	LABEL_DECL, not the LABEL_EXPR for FORCED_LABEL and NONLOCAL_LABEL.
+ 
+ 	* gimplify.c (simplify_expr, case GOTO_EXPR): Identify and mark
+ 	labels which are targets of nonlocal gotos and mark functions which
+ 	have labels which are targets of nonlocal gotos.
+ 	(simplify_expr, case LABEL_DECL): New case.  Mark labels which
+ 	have their address taken.
+ 	* tree-cfg.c (is_nonlocal_label_block): Remove.  All callers
+ 	updated.
+ 	(make_exit_edges, case GOTO_EXPR): Handle computed gotos sanely.
+ 	(make_exit_edges, case CALL_EXPR): Handle abnormal edges from
+ 	nonlocal gotos at call sites.
+ 	(make_exit_edges, case RETURN_EXPR): Likewise.
+ 	(make_exit_edges, case MODIFY_EXPR): New case to handle abnormal
+ 	edges from nonlocal gotos as call sites.
+ 	(make_goto_expr_edges): Handle computed gotos and nonlocal gotos.
+ 	(is_ctrl_altering_stmt): Handle abnormal edges in CALL_EXPRs
+ 	functions which receive nonlocal gotos.  Similarly for CALL_EXPRs
+ 	which occur on the RHS of a MODIFY_EXPR.
+ 	* tree.h (FORCED_LABEL, NONLOCAL_LABEL): New defines.
+ 	(FUNCTION_RECEIVES_NONLOCAL_GOTO): Likewise.
+ 
+ 2003-01-22  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* doc/invoke.texi: Provide some information about -fmudflap.
+ 
+ 	* tree-mudflap.c (mf_varname_tree): Conditionally invoke the C++
+ 	demangler in libiberty.  Reduce function printing verbosity.
+ 	(mf_file_function_line_tree):  Reduce function printing verbosity.
+ 	(mudflap_enqueue_decl): Use COMPLETE_TYPE_P to avoid trying to
+ 	register (get size of) void-typed objects.
+ 
+ 2003-01-21  Jose Renau  <renau@uiuc.edu>
+ 
+ 	* tree-flow-inline.h (get_lineno): Return -1 for nodes without
+ 	locus information.
+ 	(get_filename): Return "???" for nodes without locus information.
+ 
+ 2003-01-21  Jeff Law <law@redhat.com>
+ 
+ 	* tree-cfg.c (cleanup_switch_expr_graph): Wrap declaration of
+ 	switch_expr with ENABLE_CHECKING block.
+ 
+ 	* c-simplify.c (is_last_stmt_of_scope): Wrap definition and
+ 	declaration inside and ENABLE_CHECKING block.
+ 
+ 2003-01-20  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* tree-mudflap.c (mx_xfn_indirect_ref): Use new TREE_LOCUS field
+ 	as a predicate for finding TREE_FILENAME etc.
+ 
+ 2003-01-16  Daniel Berlin  <dan@dberlin.org>
+ 
+ 	* Remove dead PRE code.
+ 	* tree-ssa-pre.c (tree_perform_ssapre): Collect left occurrences and
+ 	kills *after* finishing collecting all expressions.
+ 
+ 2003-01-15  Jeff Law <law@redhat.com>
+ 
+ 	* Death to WFL nodes.
+ 	* c-aux-info.c: Replace DECL_SOURCE_FILE and DECL_SOURCE_LINE with
+ 	TREE_FILENAME and TREE_LINENO respectively when retrieving file
+ 	and line information.  Use TREE_LOCUS to copy existing information
+ 	from one node to another.  Use annotate_with_file_line to add or
+ 	replace location information on a node.  Remove support for
+ 	EXPR_WITH_FILE_LOCATION nodes.  Remove STRIP_WFL statements.
+ 	* c-common.c, c-parse.in, c-pretty-print.c, dbxout.c: Likewise.
+ 	* diagnostic.c, dwarf2out.c, dwarfout.c: Likewise.
+ 	* except.c, integrate.c, stmt.c, tree-alias-common.c: Likewise.
+ 	* tree-cfg.c, tree-dfa.c, tree-dump.c, tree-flow-inline.h: Likewise.
+ 	* tree-mudflap.c, tree-pretty-print.c, tree-simple.c: Likewise.
+ 	* tree-ssa-ccp.c, tree-ssa-dce.c, tree-ssa-pre.c: Likewise.
+ 	* varasm.c, xcoffout.c: Likewise.
+ 	* config/alpha/alpha.c: Likewise.
+ 	* config/mips/mips.c: Likewise.
+ 	* c-decl.c: Likewise.
+ 	(duplicate_decls): Also copy TREE_LOCUS from olddecl to newdecl.
+ 	(finish_function): Save and restore the current filename and
+ 	linenumber around genericizing of the function tree.
+ 	* c-simplify.c (c_simplify_stmt): Use annotate_all_with_file_line
+ 	instead of wrap_all_with_wfl.  Remove STRIP_WFL statements.
+ 	* expr.c (expand_expr): Emit line number notes for expressions
+ 	with attached file/line information.  Remove EXPR_WITH_FILE_LOCATION
+ 	support.
+ 	* gimplify.c: Kill STRIP_WFL statements.  Remove EXPR_WITH_FILE_LOCATION
+ 	support.
+ 	(simplify_expr_wfl): Kill.
+ 	(annotate_stmt_with_file_line): Renamed from wrap_with_wfl.
+ 	(annotate_all_with_file_line): Renamed from wrap_all_with_wfl.
+ 	(simplify_expr): Save and restore the current file/line around
+ 	simplification of the given expression.  Add annotation to more
+ 	nodes created during simplification.
+ 	(simplify_self_mod_expr): Add file/line location to nodes we create.
+ 	(get_initialized_tmp_var): Similarly.
+ 	* old-tree-inline.c (expand_call_inline): Use annotate_with_file_line
+ 	to add file/line information to nodes instead of wrapping them
+ 	with EXPR_WITH_FILE_LOCATION nodes.
+ 	* print-tree.c: Use TREE_FILENAME and TREE_LINENO instead of
+ 	DECL_SOURCE_FILE and DECL_SOURCE_LINE respectively.  Remove
+ 	support for EXPR_WITH_FILE_LOCATION nodes.
+ 	(print_node): Dump any file/line information that is attached to
+ 	the given node.
+ 	* tree-inline.c (walk_tree): Set lineno appropriately.
+ 	* tree-simple.h (annotate_all_with_file_line): Renamed from
+ 	wrap_all_with_wfl.  Remove STRIP_WFL statements.
+ 	* tree.c (build_expr_wfl): Kill.
+ 	(make_node): Use annotate_with_file_line.
+ 	(annotate_with_file_line): New function.
+ 	* tree.def: Remove EXPR_WITH_FILE_LOCATION.
+ 	* tree.h (tree_common): Add locus field.  Remove references to
+ 	EXPR_WITH_FILE_LOCATION.
+ 	(tree_decl): Remove locus field.
+ 	(STRIP_WFL, EXPR_WFL_*): Kill.
+ 	(DECL_SOURCE_LOCATION, DECL_SOURCE_FILE, DECL_SOURCE_LINE): Kill.
+ 	(TREE_LOCUS, TREE_FILENAME, TREE_LINENO): new.
+ 	(annotate_with_file_line): Renamed from build_expr_wfl.
+ 
+ 	* objc/objc-act.c: Use TREE_FILENAME and TREE_LINENO to
+ 	extract file/line information from tree nodes.
+ 
+ 2003-01-14  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* tree-mudflap.c (mx_xfn_indirect_ref): Handle ARRAY_REF of
+ 	a COMPONENT_REF specially to avoid unnecessary checks.
+ 
+ 2003-01-13  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	Front-end generalization.
+ 	* Makefile.in (C_AND_OBJC_OBJS): Add c-mudflap.o and dependencies.
+ 	* tree-mudflap.c: Don't include "c-tree.h" any more.
+ 	(mf_init_extern_trees): Divert to mflang_lookup_decl().
+ 	(mf_enqueue_register_call, mf_flush_enqueued_calls): Move and rename
+ 	these functions.
+ 	* tree-mudflap.h: Declare new mflang_* routines.
+ 	* c-mudflap.c: New file with C front-end mflang_* routines.
+ 	* tree-nomudflap.c (*): Call internal_error instead of abort.
+ 
+ 2003-01-07  Steven Bosscher  <s.bosscher@student.tudelft.nl>
+ 
+ 	* Makefile.in (check-g95): New test target.
+ 	(check-f95): Alias for check-g95.
+ 
+ 2003-01-07  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dump.c (dump_function_to_file): New function.
+ 	(dump_function): Call it.
+ 	Convert argument declaration to K&R format.
+ 	* tree-dump.h: Include splay-tree.h.
+ 	(dump_function_to_file): Declare.
+ 
+ 	* tree-optimize.c (optimize_function_tree): Remove unused variables
+ 	dump_file and dump_flags.
+ 	(dump_current_function): Remove.  Update all users by calling
+ 	dump_function instead.
+ 	* tree.h (dump_current_function): Remove declaration.
+ 
+ 	* Makefile.in (TREE_DUMP_H): Define.
+ 	Update targets depending on tree-dump.h to depend on $(TREE_DUMP_H).
+ 	(tree-ssa-cp.o): Remove unused target.
+ 	(tree-cfg.o): Add dependency on $(TREE_DUMP_H).
+ 	(tree-optimize.o): Likewise.
+ 	(tree-ssa-dce.o): Likewise.
+ 	(tree-ssa-ccp.o): Likewise.
+ 	(tree-ssa-pre.o): Likewise.
+ 
+ 2003-01-02  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (rename_2): Fix a false matching condition.
+ 	This is actually fallout from is_default_def change.
+ 
+ 2003-01-02  Jason Merrill  <jason@redhat.com>
+ 
+ 	* c-simplify.c (c_genericize): Dump more info about the function.
+ 	Use dump_function.
+ 	* tree-dump.c (dump_function): Move from cp/optimize.c.
+ 	* tree-dump.h: Declare it.
+ 
+ 	* gimplify.c (mostly_copy_tree_r): Remove unnecessary cases.
+ 	(unshare_expr): New fn.
+ 	* tree-inline.c (mark_local_for_remap_r, unsave_r): New fns, adapted
+ 	from C++ versions.
+ 	(lhd_unsave_expr_now): Likewise.
+ 	* tree.c (unsave_expr_now): Remove.
+ 	(unsafe_for_reeval): Labels and BIND_EXPRs are only somewhat unsafe.
+ 
+ 	* gimplify.c (simplify_function_tree): Add an outer BIND_EXPR if
+ 	needed.
+ 	(voidify_wrapper_expr): Not static.  Abort if we try to voidify an
+ 	expression with TREE_ADDRESSABLE type.  Be clever with INDIRECT_REFs.
+ 	(foreach_stmt): Avoid redundant work.
+ 	(create_tmp_var): Abort if we try to create a temp of ADDRESSABLE type.
+ 	(simplify_expr): Simplify VTABLE_REF.
+ 	* c-simplify.c (simplify_decl_stmt): Ignore DECL_EXTERNAL decls.
+ 	(simplify_stmt_expr): Fix thinko.
+ 	(simplify_block): Don't ignore partial scopes.
+ 	(simplify_condition): New fn.
+ 	(simplify_c_loop, simplify_if_stmt, simplify_switch_stmt): Call it.
+ 	* expr.c (expand_expr) [BIND_EXPR]: Handle statics better.
+ 	* tree-inline.c (remap_decl): Remap all decls.
+ 	(declare_return_variable): Be clever with INDIRECT_REFs.
+ 	(expand_call_inline): If we have an explicit return slot, the inlined
+ 	body is void.
+ 	(walk_tree): Fix type handling.
+ 	(copy_tree_r): Don't walk into decls.
+ 	* tree-simple.c (is_simple_unary_expr): Handle VTABLE_REF.
+ 	(is_simple_id): Allow RESULT_DECL.
+ 	* tree-simple.h (gsi_stmt): Strip WFLs and NOPs.
+ 
+ 	* gimplify.c (simplify_cond_expr): Handle void arms.  Add target parm.
+ 	(simplify_modify_expr): Pass it.  Add special handling for COND_EXPR
+ 	and CONSTRUCTOR (from Daniel Berlin).  Add want_value parm.
+ 	(simplify_expr): Pass new args. Loop sooner if language-specific
+ 	simplification happened.
+ 	(simplify_return_expr): Pass the whole MODIFY_EXPR to simplify_expr.
+ 	(simplify_target_expr): Simplify.
+ 
+ 	* tree.def (CATCH_EXPR, EH_FILTER_EXPR): New tree codes.
+ 	* except.c (expand_eh_handler): New fn.
+ 	(expand_eh_region_end_allowed): If no types are allowed, hand off to
+ 	expand_eh_region_end_must_not_throw.
+ 	* except.h: Declare expand_eh_handler.
+ 	* expr.c (expand_expr) [TRY_CATCH_EXPR]: Use it.
+ 	[CATCH_EXPR, EH_FILTER_EXPR]: New cases.
+ 	* gimplify.c (simplify_expr) [EXC_PTR_EXPR, CATCH_EXPR,
+ 	EH_FILTER_EXPR]: New cases.
+ 	(gimple_build_eh_filter): New fn.
+ 	(maybe_protect_cleanup): New fn.
+ 	(gimple_push_cleanup): Call it.
+ 	(simplify_cleanup_point_expr): Fix thinko.
+ 	* c-simplify.c (simplify_cleanup): Call it.
+ 	* tree-simple.h: Declare it.
+ 	* Makefile.in (gimplify.o): Depend on except.h.
+ 	* tree.h (CATCH_TYPES, CATCH_BODY): New macros.
+ 	(EH_FILTER_TYPES, EH_FILTER_FAILURE): New macros.
+ 	* tree-simple.c (is_simple_id): Allow EXC_PTR_EXPR.
+ 	* c-pretty-print.c (dump_c_node) [CLEANUP_POINT_EXPR]: Support.
+ 	* tree-pretty-print.c (dump_generic_node): Likewise.
+ 	[CATCH_EXPR, EH_FILTER_EXPR, EXC_PTR_EXPR]: Support.
+ 
+ 	* c-pretty-print.c (NIY): Print operands.
+ 	(dump_c_tree): Don't look at TREE_CHAIN if it doesn't matter.
+ 	(dump_c_node) [ARRAY_TYPE]: Handle non-constant array bounds.
+ 	[CALL_EXPR]: Pass spc down.
+ 	[VTABLE_REF]: Support.
+ 	(op_prio) [TARGET_EXPR]: Support.
+ 	(print_call_name): Handle function pointers.
+ 	* tree-pretty-print.c: Likewise.
+ 
+ 2002-12-31  Steven Bosscher  <s.bosscher@student.tudelft.nl>
+ 
+ 	* gimplify.c (create_tmp_var_noc): Remove unused function.
+ 	* tree-simple.h: Kill prototype.
+ 
+ 2002-12-30  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-flow.h (tree_find_loops): Remove unused declaration.
+ 
+ 2002-12-29  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* toplev.c: Add flag_ip, enable by default at -O4+ (This is not
+ 	set in stone, and thus, not documented).
+ 	(decode_f_option): Add warning if andersen's PTA is selected but
+ 	not compiled in.
+ 
+ 	* flags.h: Add flag_ip.
+ 
+ 	* tree-alias-ander.c: Fix todo.
+ 	(andersen_function_call): Return 1 if we don't need to process
+ 	the function.
+ 	(ptset_map): New map, cache points-to sets.
+ 	(andersen_op): We can do IP on all statics without help.
+ 	(andersen_init): Only init once if we are doing ip analysis.
+ 	(andersen_cleanup): Don't cleanup if we need the info for ip.
+ 	(andersen_add_var): Clear points-to set if it exists already.
+ 	(andersen_add_var_same): Ditto.
+ 	(andersen_function_call): We can do interprocedural analysis on
+ 	statics.
+ 	(andersen_may_alias): Cache points-to sets.
+ 
+ 	* c-decl.c (c_expand_body): Don't throw away tree if flag_ip is
+ 	on, even if they are uninlinable, they may be wanted for ip
+ 	optimizations.
+ 
+ 	* tree-alias-common.c (get_values_from_constructor): New
+ 	function to collect alias_typevars from constructors.
+ 	(alias_annot): Fix where the GTY is so gengtype picks it up.
+ 	(intra_function_call): Ignore non-pointers for global var
+ 	assignment. What arguments point to can now point to a global var
+ 	as well.
+ 	(find_func_aliases): We need to handle decl's with initials as
+ 	well.
+ 	Only call intra_function_call if we have to.
+ 	Handle constructors.
+ 	(create_fun_alias_var): Incoming pointer arguments could be
+ 	pointing to a global var, unless this is a static function and we
+ 	are doing interprocedural analysis.
+ 	(create_alias_vars): Take an fndecl argument, and use it.
+ 	(init_alias_vars): Handle ip_partial as well.
+ 	(ptr_may_alias_var): Simplify, fix.
+ 
+ 	* tree-alias-common.h (tree_alias_ops): function_call now returns
+ 	an int, and we have an extra member named ip_partial.
+ 
+ 	* tree-alias-steen.c (steen_ops): We can't do ip_partial.
+ 	(steen_function_call): Update definition and return 1.
+ 
+ 	* tree-dfa.c (compute_may_aliases): Call create_alias_vars with
+ 	current_function_decl.
+ 
+ 	* tree-flow.h (create_alias_vars): Remove proto from here, it's
+ 	in tree-alias-common.h.
+ 	(tree_perform_ssapre): Take a tree, like the other optimizers.
+ 
+ 	* tree-optimize.c (optimize_function_tree): Call
+ 	tree_perform_ssapre with a tree.
+ 
+ 	* tree-ssa-pre.c: Remove dead, #if 0'd code.
+ 	(tree_perform_ssapre): Use passed in tree.
+ 
+ 2002-12-23  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* tree-mudflap.c (mf_decl_cache_locals, mf_decl_clear_locals): New
+ 	functions.
+ 	(mudflap_c_function): Call them before/after basic transforms.
+ 	(mf_cache_shift_decl_l, ..._mask_l): New variables to track local
+ 	VAR_DECL shadows of cache parameters.
+ 	(mf_build_check_statement_for): Use and update them.
+ 
+ 2002-12-23  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* tree-mudflap.c (mx_register_decls): Trust incoming TREE_ADDRESSABLE
+ 	instead of own timetaking analysis.
+ 	(mf_find_addrof, mx_xfn_find_addrof): Removed functions.
+ 
+ 2002-12-23  Steven Bosscher <s.bosscher@student.tudelft.nl>
+ 
+ 	* tree-dfa.c: Add doxygen markers in comments.
+ 
+ 2002-12-22  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* gimplify.c: Undo the following change:
+ 	    2002-12-11  Diego Novillo  <dnovillo@redhat.com>
+ 		* gimplify.c (simplify_return_expr): return statements should
+ 		  only have a GIMPLE value as argument.
+ 
+ 	* tree-simple.c: Fix grammar for return statements.
+ 
+ 2002-12-20  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* tree-mudflap.c (mf_init_extern_trees): Rewrite last change
+ 	without using statement-expressions.
+ 
+ 2002-12-19  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-cfg.c (build_tree_cfg): Make sure that TV_TREE_CFG
+ 	is popped properly.
+ 
+ 2002-12-19  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* tree-mudflap.c (mf_init_extern_trees): Abort gracefully if
+ 	<mf-runtime.h> was not included.
+ 	(*): Correct some minor compiler warnings elsewhere.
+ 
+ 2002-12-18  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* configure: Regenerate with autoconf 2.13.
+ 
+ 2002-12-17  Ben Elliston  <bje@redhat.com>
+ 
+ 	* tree-optimize.c (optimize_function_tree): Temporarily
+ 	disable SSA optimizations if -fmudflap is present.
+ 
+ 2002-12-16  Ben Elliston  <bje@redhat.com>
+ 
+ 	* tree-mudflap.c (mx_flag): Assert that the tree node is valid.
+ 
+ 2002-12-14  Jason Merrill  <jason@redhat.com>
+ 
+ 	* tree-dump.c (dump_files): Add .generic.  Move .inlined after it.
+ 	* tree.h (tree_dump_index): Likewise.
+ 	* c-simplify.c (c_genericize): Emit original and generic dumps here.
+ 	* c-decl.c (c_expand_body): Not here.
+ 
+ 2002-12-13  Ben Elliston  <bje@redhat.com>
+ 
+ 	* tree-dfa.c (find_refs_in_expr): Terminate comment.
+ 
+ 2002-12-12  Steven Bosscher <s.bosscher@student.tudelft.nl>
+ 
+ 	* tree-cfg.c: Update doxygen documentation.
+ 	* tree-dfa.c: Add doxygen documentation.
+ 
+ 2002-12-11  Steven Bosscher <s.bosscher@student.tudelft.nl>
+ 
+ 	* tree-cfg.c: Add doxygen markers in comments.
+ 	* tree-optimize.c: Likewise.
+ 	* tree-ssa.c: Likewise.
+ 
+ 2002-12-11  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* gimplify.c (simplify_return_expr): return statements should only
+ 	have a GIMPLE value as argument.
+ 	* tree-cfg.c (call_expr_flags): New function.
+ 	(is_ctrl_altering_stmt): Call it.
+ 	* tree-flow.h (extern): Declare it.
+ 
+ 2002-12-06  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-cfg.c (make_goto_expr_edges): Temporary hack to prevent
+ 	removing blocks with nonlocal labels.
+ 	(is_nonlocal_label_block): Return true if DECL_NONLOCAL is set for
+ 	the label.
+ 
+ 	* tree-dfa.c (alias_leaders): New local array.
+ 	(num_alias_leaders): New local variable.
+ 	(find_alias_leader): New local function.
+ 	(may_access_global_mem): New local function.
+ 	(find_may_aliases_for): Call them.
+ 	(compute_may_aliases): Allocate and deallocate alias_leaders.
+ 	Show alias information if -fdump-tree-...-alias flag is given.
+ 	(may_alias_p): Return true if both variables are the same.
+ 	(find_refs_in_expr): Strip WFL and NOPs from the parent statement.
+ 	If a pointer relocation is due to a function call, assignment from
+ 	a global or a function argument, mark the pointer as a may-alias
+ 	for global storage.
+ 	(dump_referenced_vars): Reformat output.
+ 	(dump_variable): Likewise.
+ 
+ 	* tree-dump.c (dump_option_value_info): Add entry for TDF_ALIAS.
+ 	* tree.h (TDF_ALIAS): Define.
+ 	* doc/invoke.texi: Document new flag.
+ 
+ 	* tree-flow-inline.h (may_alias_global_mem_p): New function.
+ 	* tree-flow.h (enum tree_flags): Add value TF_MAY_ALIAS_GLOBAL_MEM.
+ 	(may_alias_global_mem_p): Declare.
+ 
+ 	* tree-simple.c (get_base_symbol): Return NULL_TREE, not NULL.
+ 	* tree-ssa-ccp.c (tree_ssa_ccp): Remove unused variable.
+ 	* tree-ssa-dce.c (need_to_preserve_store): Call
+ 	decl_function_context instead of DECL_CONTEXT.
+ 	If the symbol may alias global memory, return nonzero.
+ 
+ 	* tree-ssa.c (dump_reaching_defs): Reformat output.
+ 	(set_currdef_for): Walk the alias leader chain, setting CURRDEF for
+ 	all the alias sets that may be affected by the definition.
+ 
+ 2002-12-06  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-dfa.c (may_alias_p): Fix global variables and points-to.
+ 
+ 2002-12-03  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa.c (delete_tree_ssa):  Move call to delete_alias_vars
+ 	above resetting num_referenced_vars.
+ 
+ 2002-12-03  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in: Add dependencies on $(TM_H) and coretypes.h for the
+ 	files mentioned below.
+ 	* old-tree-inline.c: Include tm.h and coretypes.h.
+ 	* c-pretty-print.c: Likewise.
+ 	* disjoint-set.c: Likewise.
+ 	* tree-alias-ecr.c: Likewise.
+ 	* tree-alias-type.c: Likewise.
+ 	* tree-alias-ander.c: Likewise.
+ 	* tree-alias-steen.c: Likewise.
+ 	* tree-alias-common.c: Likewise.
+ 	* tree-ssa.c: Likewise.
+ 	* tree-ssa-pre.c: Likewise.
+ 	* tree-cfg.c: Likewise.
+ 	* tree-dfa.c: Likewise.
+ 	* tree-optimize.c: Likewise.
+ 	* c-simplify.c: Likewise.
+ 	* gimplify.c: Likewise.
+ 	* tree-browser.c: Likewise.
+ 	* simple-break-elim.c: Likewise.
+ 	* simple-goto-elim.c: Likewise.
+ 	* tree-dchain.c: Likewise.
+ 	* c-call-graph.c: Likewise.
+ 	* tree-simple.c: Likewise.
+ 	* tree-nomudflap.c: Likewise.
+ 	* tree-pretty-print.c: Likewise.
+ 	* tree-ssa-dce.c: Likewise.
+ 	* tree-ssa-ccp.c: Likewise.
+ 	* dependence.c: Likewise.
+ 	* tree-mudflap.c: Likewise
+ 	(mx_xfn_indirect_ref): Use size_type_node instead of c_size_type_node.
+ 
+ 2002-12-03  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c: Undo this change that causes bootstrap
+ 	failures:
+ 
+ 	2002-12-02  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 		* tree-dfa.c (may_alias_p): Artificial variables
+ 		can also be aliased.
+ 
+ 2002-12-03  Andreas Jaeger  <aj@suse.de>
+ 
+ 	* tree-simple.c (right_assocify_expr): Remove unused variable.
+ 
+ 2002-12-02  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimplify.c (simplify_cleanup_point_expr): gsi_stmt can return NULL,
+ 	use gsi_end.
+ 	* tree-cfg.c (make_blocks): Use gsi_end, gsi_stmt can return NULL. Set
+ 	basic_block for empty_stmt_node containers.
+ 	(make_edges): Stmt's can be NULL.
+ 	(make_ctrl_stmt_edges, make_exit_edges, make_loop_expr_edges,
+ 	make_cond_expr_edges, make_goto_expr_edges, is_nonlocal_label_block,
+ 	block_invalidates_loop, cleanup_control_flow, cleanup_cond_expr_graph,
+ 	cleanup_switch_expr_graph, disconnect_unreachable_case_labels,
+ 	find_taken_edge, tree_cfg2dot, successor_block, is_latch_block,
+ 	switch_parent, first_stmt, last_stmt): Check for first_stmt() or
+ 	last_stmt() returning NULL.
+ 	(remove_tree_bb, first_exec_stmt): Use gsi_end.
+ 	(last_stmt_ptr): Iterate to find last execuatbel stmt_ptr in a block.
+ 	(gsi_start_bb): Return first non-empty stmt, if there is one.
+ 	(set_bb_for_stmt): Don't decend into an empty_stmt_node.
+ 	* tree-dfa.c (find_tree_refs): Use gsi_end.
+ 	(collect_dfa_stats): Use gsi_end_bb.
+ 	* tree-flow-inline.h (gsi_step_bb): split.
+ 	(gsi_step_in_bb): gsi_step with explicit bb specified. Never return
+ 	empty_stmt_node.
+ 	(gsi_start_bb): Move to tree-cfg.c.
+ 	(gsi_end_bb): New. Have we reached the end of a basic block.
+ 	* tree-flow.h (gsi_start_bb): Make external.
+ 	(gsi_end_bb, gsi_step_in_bb): New prototypes.
+ 	* tree-simple.h (gsi_end): renamed from gsi_after_end.
+ 	(gsi_stmt): Return NULL if stmt is an empty_stmt_node or error mark.
+ 	* tree-ssa-ccp.c (simulate_block, substitute_and_fold): Use gsi_end.
+ 	* tree-ssa-dce.c (mark_control_parent_necessary, find_useful_stmts,
+ 	remove_dead_stmts): Use gsi_end_bb.
+ 	(process_worklist): Check for NULL last_stmt.
+ 	* tree-ssa-pre.c (finalize_1): Use gsi_end_bb, gsi_stmt can be NULL.
+ 
+ 2002-12-02  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (dump_ref): Display '<nil>' for NULL references.
+ 	(dump_phi_args): Handle NULL arguments.
+ 	(may_alias_p): Artificial variables can also be aliased.
+ 
+ 2002-12-02  Daniel Berlin <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (okay_injuring_def): inj could be null.
+ 	(get_operand):  Use instead of special casing INDIRECT_REF and
+ 	COMPONENT_REF everywhere.
+ 	(names_match_p): Fix.
+ 	(defs_match_p): Ignore partial uses.
+ 	(rename_2): Fix non-matching condition.
+ 	(update_old_new): Update the kills and lefts arrays.
+ 	(finalize_1): Set the bb for the new statement.
+ 	(update_ssa_for_new_use): Ditto.
+ 	(code_motion): Ditto.
+ 	(call_modifies_slot): Handle function pointers (where we end up
+ 	with a _DECL as our argument).
+ 	(pre_part_1_trav): Update the kills and lefts arrays.
+ 	Just use TREE_TYPE (ei->expr) for type of expression.
+ 	(add_left_occ): New helper function.
+ 	(process_left_occs_and_kills): Add other cases we need to handle.
+ 	(tree_perform_ssapre): Add new processed array, since for left
+ 	occurrences and kills, we need to process *all* statements, not
+ 	just ones we might consider candiates for PRE.
+ 
+ 2002-12-02  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (find_refs_in_expr): Look for references in
+ 	VA_ARG_EXPR nodes.
+ 
+ 2002-12-01  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-optimize.c (optimize_function_tree): Undo
+ 	inadvertent change in previous commit.
+ 
+ 2002-12-01  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* fold-const.c (operand_equal_p): Check for NULL TREE_TYPEs.
+ 
+ 	* tree-cfg.c (remove_stmt): Call remove_ref.
+ 	(disconnect_unreachable_case_labels): Do not disconnect the edge
+ 	going to the block holding the BIND_EXPR node for the switch()
+ 	body.
+ 	(dump_tree_cfg): Call dump_current_function.
+ 
+ 	* Makefile.in (tree-dfa.o): Depend on convert.h.
+ 	* tree-dfa.c: Include convert.h.
+ 	(remove_def): New local function.
+ 	(reset_def_def_links): New local function.
+ 	(replace_phi_arg_with): New local function.
+ 	(replace_ref_with): New function.
+ 	(try_replace_ref_with): Rename from replace_ref_in.
+ 	Also look for V_USE references on the LHS of assignments.
+ 	When replacing the callee of a CALL_EXPR, make sure that the type
+ 	of the new callee is compatible with the old one.
+ 	(replace_ref_r): Call operand_equal_p.
+ 	(remove_ref): New function.
+ 	(same_var_p): New function.
+ 	(dump_referenced_vars): Add new flag DETAILS.  Update all users.
+ 	(debug_referenced_vars): Likewise.
+ 
+ 	* tree-ssa.c (dump_reaching_defs): Change output format.
+ 	(set_ssa_links): Don't set def-def links for PHI nodes.
+ 
+ 	* tree-ssa-ccp.c (replace_uses_in): Add new argument COMMIT.
+ 	Update all users.
+ 
+ 	* tree-optimize.c (dump_current_function): New function.
+ 	(optimize_function_tree): Call it.
+ 	* tree.h (dump_current_function): Declare.
+ 	* c-decl.c (c_expand_body): Call dump_current_function.
+ 	* tree-ssa-dce.c (tree_ssa_eliminate_dead_code): Likewise.
+ 	* tree-ssa-pre.c (tree_perform_ssapre): Likewise.
+ 	* tree-ssa.c (build_tree_ssa): Likewise.
+ 	* tree-ssa-ccp.c (tree_ssa_ccp): Likewise.
+ 	Dump variables and reaching definitions if TDF_DETAILS is set.
+ 
+ 	* tree-pretty-print.c (print_call_name): Call dump_generic_node for
+ 	NOP_EXPR operands.
+ 
+ 	* tree-ssa-pre.c: Don't include c-common.h nor c-tree.h
+ 	Replace calls to build_modify_expr with build everywhere.
+ 	Replace calls to deep_copy_node with copy_node_r everywhere.
+ 
+ 2002-11-29  Andreas Jaeger  <aj@suse.de>
+ 
+ 	* c-call-graph.c (construct_call_graph): Fix format.
+ 
+ 	* tree-alias-ander.c: Declare print_out_result.
+ 
+ 	* tree-ssa-pre.c: Declare is_on_lhs and call_modifies_slot.
+ 
+ 	* tree.h: Declare expand_asm_expr and add_var_to_bind_expr.
+ 
+ 	* tree-inline.c: Declare remap_decls.
+ 
+ 2002-11-28  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-alias-common.h: Start adding doxygen docs.
+ 
+ 	* tree-alias-common.c: Ditto
+ 
+ 2002-11-28  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-alias-ander.c: Convert debug defines and ifdefs into
+ 	dump_file use.
+ 
+ 	* tree.h: Add TDI_pta.
+ 
+ 	* tree-dump.c: Add dump-tree-pta and TDI_pta.
+ 
+ 2002-11-28  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (tree-ssa-pre.o, tree-cfg.o, gimplify.o, tree-ssa-dce.o,
+ 	tree-ssa-ccp.o): Add dependency on $(TIMEVAR_H).
+ 	* timevar.def (TV_TREE_GIMPLIFY, TV_TREE_MAY_ALIAS,
+ 	TV_TREE_INSERT_PHI_NODES, TV_TREE_BUILD_FUD_CHAINS, TV_TREE_RDEFS):
+ 	New timers.
+ 	(TV_TREE_SSA): Remove.
+ 	(TV_INTEGRATION, TV_EXPAND): Switch order.
+ 	* c-decl.c (c_expand_body): Pop TV_EXPAND before running the tree
+ 	optimizers.
+ 	* gimplify.c (simplify_function_tree): Push/pop TV_TREE_GIMPLIFY.
+ 	* tree-cfg.c (build_tree_cfg): Push/pop TV_TREE_CFG.
+ 	* tree-dfa.c (compute_may_aliases): Push/pop TV_TREE_MAY_ALIAS.
+ 	* tree-ssa-ccp.c (tree_ssa_ccp): Push/pop TV_TREE_CCP.
+ 	* tree-ssa-dce.c (tree_ssa_eliminate_dead_code): Push/pop
+ 	TV_TREE_DCE.
+ 	Call compute_reaching_defs.
+ 	Remove debugging dumps before DCE.
+ 	* tree-ssa-pre.c (tree_perform_ssapre): Push/pop TV_TREE_PRE.
+ 	* tree-ssa.c (build_tree_ssa): Don't call compute_reaching_defs.
+ 	Don't call dump_reaching_defs.
+ 	(insert_phi_nodes): Push/pop TV_TREE_INSERT_PHI_NODES.
+ 	(build_fud_chains): Push/pop TV_TREE_BUILD_FUD_CHAINS.
+ 	(compute_reaching_defs): Push/pop TV_TREE_RDEFS.
+ 	Call dump_reaching_defs.
+ 	* tree-optimize.c (optimize_function_tree): Remove calls to
+ 	timevar_push and timevar_pop.
+ 
+ 2002-11-28  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (tree-ssa.o): Add dependency on $(TIMEVAR_H) and
+ 	tree-alias-common.h.
+ 	(tree-dfa.o): Likewise.
+ 	(tree-optimize.o): Add dependency on $(TIMEVAR_H).
+ 	* tree-dfa.c (compute_may_aliases): Move call to delete_alias_vars
+ 	* tree-ssa.c (delete_tree_ssa): ... here.
+ 
+ 2002-11-27  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (add_may_alias): Remove.  Update all users.
+ 	(get_alias_index): Remove.  Update all users.
+ 	(dfa_stats_d): Remove fields num_may_alias, max_num_may_alias,
+ 	num_alias_imm_rdefs and max_num_alias_imm_rdefs.  Update all users.
+ 	(may_alias_p): Make extern.  Move declaration to tree-flow.h.
+ 	(TRM_DEFAULT): Remove.  Update all users.  Update values of the
+ 	other TRM_* constants.
+ 	(create_ref): Don't initialize the PHI argument array with the
+ 	number of incoming edges.
+ 	(collect_dfa_stats): Do not traverse the function body with
+ 	walk_tree.
+ 	Free temporary hash table before returning.
+ 	(compute_may_aliases): Update comment.
+ 	(may_alias_p): Switch arguments if the first argument is not an
+ 	INDIRECT_PTR or the artificial global_var.
+ 	(find_may_aliases_for): If a pointer aliases a variable, set the
+ 	pointer to be the alias leader for the variable.
+ 	(ref_defines): Call may_alias_p.
+ 	(is_killing_def): Return false if the reaching definition is NULL.
+ 	Don't check for volatile definitions.
+ 	Change second argument to be a tree.  Update all users.
+ 
+ 	* tree-flow-inline.h (alias_imm_reaching_def): Remove.  Update all
+ 	users.
+ 	(may_alias): Remove.  Update all users.
+ 	(set_imm_reaching_def): Check for circularity.
+ 	(alias_leader): New function.
+ 	(set_alias_leader): New function.
+ 	(is_aliased): New function.
+ 	(is_default_def): Remove.  Update all users.
+ 
+ 	* tree-flow.h (struct var_ref_d): Remove field alias_imm_rdefs.
+ 	Update all users.
+ 	(struct var_def_d): Remove field m_default.  Update all users.
+ 	(struct tree_ann_d): Remove field may_aliases.  Update all users.
+ 	Add field alias_leader.
+ 	(struct dfa_counts_d): Remove fields num_may_alias and
+ 	num_may_alias_imm_rdefs.  Update all users.
+ 
+ 	* tree-ssa.c: Update documentation on may-alias processing.
+ 	(set_ssa_links): Remove third argument.  Update all users.
+ 	(set_alias_imm_reaching_def): Remove.  Update all users.
+ 	(create_default_def): Likewise.
+ 	(analyze_rdefs): Likewise.
+ 	(currdef_for): Move from tree-flow-inline.h
+ 	(set_currdef_for): Likewise.
+ 	(compute_reaching_defs): Rename from compute_tree_rdefs.  Update
+ 	all users.
+ 	(follow_chain): Call is_killing_def instead of is_partial_def.
+ 	(tree_ssa_remove_phi_alternative): Remove unused variable ref.
+ 	(set_ssa_links): When processing V_USE references, make sure that
+ 	CURRDEF is a definition for the variable or one of its aliases.
+ 
+ 2002-11-26  Sebastian Pop  <s.pop@laposte.net>
+ 
+ 	* Makefile.in (OBJS): Add tree-browser.o.
+ 	(tree-browser.o): New dependency.
+ 	* tree-browser.c: New file.
+ 	* tree-browser.def: New file.
+ 
+ 2002-11-26  Jason Merrill  <jason@redhat.com>
+ 
+ 	Gimplify C++ cleanups.
+ 	* gimplify.c (voidify_wrapper_expr): Split out from...
+ 	(simplify_bind_expr): ...here.
+ 	(simplify_cleanup_point_expr): New fn.
+ 	(simplify_target_expr): New fn.
+ 	(gimple_conditional_context): New fn.
+ 	(gimple_push_condition, gimple_pop_condition): New fns.
+ 	(simplify_expr) [TRY_CATCH_EXPR]: Handle like TRY_FINALLY_EXPR.
+ 	* c-simplify.c (simplify_cleanup): New fn.
+ 	(c_simplify_stmt): Call it and lang_simplify_stmt.
+ 	(simplify_expr_stmt): Wrap the expr in a CLEANUP_POINT_EXPR.
+ 	(simplify_return_stmt, simplify_decl_stmt): Likewise.
+ 	(simplify_stmt_expr): Handle the STMT_EXPR_NO_SCOPE case.
+ 	(is_last_stmt_of_scope): Likewise.
+ 	* c-common.h: Declare c_genericize, c_simplify_stmt and
+ 	lang_simplify_stmt.
+ 	* c-common.c (lang_simplify_stmt): Define.
+ 
+ 	Gimplify EXIT_EXPRs.
+ 	* gimplify.c (gimplify_loop_expr, gimplify_exit_expr): New fns.
+ 	(simplify_expr): Call them.
+ 	* expr.c (expand_expr) [LOOP_EXPR]: Pass 1 again for exit_flag.
+ 
+ 	* tree-simple.c (right_assocify_expr): Also set TREE_SIDE_EFFECTS.
+ 
+ 	* gimplify.c (simplify_expr): Call STRIP_TYPE_NOPS.
+ 	[REALPART_EXPR]: Don't just return.
+ 
+ 	* tree-pretty-print.c (dump_c_node): Handle REFERENCE_TYPE.
+ 	* c-pretty-print.c (dump_c_node): Likewise.  Handle null FOR_INIT_STMT.
+ 
+ 2002-11-25  Daniel Berlin <dberlin@dberlin.org>
+ 
+ 	* config.gcc: Try committing the correct version.
+ 	* tree-alias-ander.c (andersen_may_alias): Add "!= NULL" to make
+ 	return a bool.
+ 
+ 2002-11-24  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* configure.in: Add --with-libbanshee, passed to us by toplevel if
+ 	libbanshee was configured. Substitute appropriate definitions for
+ 	Makefile (IE disabling tree-alias-ander building) if it wasn't.
+ 	* config.in: Regenerated.
+ 	* config.gcc: Rebuild libbanshee with stage1 on darwin to work
+ 	around system compiler problem.
+ 	* configure: Regenerated.
+ 	* Makefile.in: Add banshee stuff.
+ 	* tree-alias-ander.c: New file.
+ 	* tree-alias-ander.h: New file.
+ 	* tree-alias-common.c (get_alias_var): Fix field based stuff.
+ 	(find_func_aliases): Don't walk subtrees if we processed the tree.
+ 	(ptr_may_alias_var): Fix both field-based and non-field-based lookup.
+ 
+ 2002-11-22  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-ssa-dce.c (mark_necessary): Split out mark_tree_necessary. Don't
+ 	mark if tree is already marked.
+ 	(mark_tree_necessary): New. Mark tree without processing control parent.
+ 	(mark_control_parent_necessary): Remove recursion, mark trees directly.
+ 	(need_to_preserve_store): Can expression/symbol affect external values.
+ 	(tree_ssa_eliminate_dead_code): Split.
+ 	(find_useful_stmts): Find initial set of needed statements.
+ 	(process_worklist): Find statements which calculate needed statements.
+ 	(remove_dead_stmts): Delete statements which are dead.
+ 
+ 2002-11-16  Jason Merrill  <jason@redhat.com>
+ 
+ 	Improve tree dumps.
+ 	* c-pretty-print.c, tree-pretty-print.c (dump_c_node): Handle
+ 	integers larger than a host word.
+ 	(op_prio): Handle INIT_EXPR.
+ 	* gimplify.c (simplify_bind_expr): Set TREE_SIDE_EFFECTS and type
+ 	of void_type_node on the COMPOUND_EXPRs as we walk.
+ 	* tree-simple.c (right_assocify_expr): Propagate the type from cur
+ 	rather than rhs.
+ 
+ 	* c-decl.c (finish_function): Call c_genericize instead of
+ 	simplify_function_tree.
+ 	* c-simplify.c (c_genericize): New function.
+ 	(simplify_stmt_expr): Just genericize.
+ 	(simplify_compound_literal_expr): Likewise.
+ 	(c_build_bind_expr): Don't build a block for an artificial decl.
+ 	(simplify_decl_stmt): Add the variable to the temps list iff it's
+ 	artificial.
+ 	(c_simplify_expr): Don't call push/pop_context.
+ 	* c-decl.c (build_compound_literal): Set DECL_ARTIFICIAL.
+ 	* c-tree.h: Declare c_genericize.
+ 
+ 	* c-simplify.c (tree_build_scope): Remove.
+ 
+ 	Remove INIT_EXPR from GIMPLE.
+ 	* c-simplify.c (simplify_decl_stmt): Use MODIFY_EXPR.
+ 	* gimplify.c (simplify_bind_expr): Likewise.
+ 	(simplify_modify_expr): Convert INIT_EXPR to MODIFY_EXPR.
+ 
+ 	* c-simplify.c (create_tmp_var_1): Drop; change all users to call
+ 	create_tmp_var.
+ 	(gimple_add_tmp_var): Now adds to the external temps list if
+ 	available, or directly to the function otherwise.
+ 
+ 	Avoid gratuitous unused warnings.
+ 	* c-simplify.c (simplify_expr_stmt): Check TREE_SIDE_EFFECTS
+ 	directly.  Also check for explicit conversions to void.
+ 	(expr_has_effect): Remove.
+ 
+ 	* Makefile.in (OBJS): Remove tree-dchain.o.
+ 
+ 	* stor-layout.c (variable_size): We don't care about
+ 	global_bindings_p if the frontend doesn't want a list of the
+ 	expressions.
+ 
+ 2002-11-13  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* toplev.c (parse_options_and_default_flags): Enable SSA-CCP by
+ 	default with optimization >= 1.
+ 	* tree-dfa.c (find_refs_in_expr): Clobber '*.GLOBAL_VAR', not
+ 	'GLOBAL_VAR'.
+ 	(collect_dfa_stats): Collect statistics on '*.GLOBAL_VAR'.
+ 	(compute_may_aliases): Make sure that variable is an INDIRECT_REF.
+ 	(may_alias_p): GLOBAL_VAR should alias INDIRECT_REFs.
+ 	Only check addressability on VAR_DECLs.
+ 	(find_may_aliases_for): Make sure argument is an INDIRECT_REF.
+ 	* tree-flow-inline.h (indirect_var): Call DECL_P.
+ 	(set_indirect_var): Call DECL_P.
+ 	Create annotation if it doesn't exist.
+ 	(create_indirect_ref): Move from tree-dfa.c.
+ 	* tree-flow.h (create_indirect_ref): Declare.
+ 	* tree-ssa-ccp.c (visit_phi_node): Avoid debugging dump from
+ 	accessing uninitialized data.
+ 	* tree-ssa.c (init_tree_ssa): Create an INDIRECT_REF node for
+ 	.GLOBAL_VAR.
+ 
+ 2002-11-12  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-cfg.c (delete_tree_cfg): Call free_aux_for_blocks.
+ 	Call free_basic_block_vars.
+ 
+ 	* gimplify.c (simplify_expr): VA_ARG_EXPR nodes are in GIMPLE form
+ 	already.
+ 	Gimplify BIT_FIELD_REF nodes.
+ 	(simplify_call_expr): Update comment.
+ 	* tree-dfa.c (find_refs_in_expr): VA_ARG_EXPR nodes make no
+ 	data references.
+ 	Handle BIT_FIELD_REF nodes.
+ 	* tree-pretty-print.c (op_prio): Don't write an error message if
+ 	the operand is not recognized.
+ 	* tree-simple.c (is_simple_unary_expr): Handle BIT_FIELD_REFs.
+ 	(is_simplifiable_builtin): Only return false for MD builtins.
+ 
+ 2002-11-08  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-cfg.c (cleanup_switch_expr_graph): Handle edges going to
+ 	EXIT_BLOCK_PTR.
+ 	(first_stmt): Return NULL for ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR and
+ 	INVALID_BLOCK.
+ 	* tree-dfa.c (find_refs_in_expr): Call mark_not_simple.
+ 
+ 2002-11-07  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (tree-ssa.o, tree-cfg.o, tree-dfa.o): Add dependency
+ 	on function.h
+ 	* tree-cfg.c: Include function.h.
+ 	(build_tree_cfg): Set dump_file to NULL after closing the file.
+ 	(remove_tree_bb): Don't dump warnings about statements being
+ 	removed.
+ 	(dump_tree_cfg): Use current_function_name.
+ 	Check that the flowgraph is not empty before dumping the function
+ 	body.
+ 	(tree_cfg2dot): Use current_function_name.
+ 	* tree-dfa.c: Include function.h
+ 	(dump_dfa_stats): Use current_function_name.
+ 	* tree-optimize.c (optimize_function_tree): Set dump_file to NULL
+ 	after closing the file.
+ 	* tree-pretty-print.c (dump_generic_node): Make sure that the
+ 	flowgraph exists before displaying block boundaries.
+ 	* tree-ssa-ccp.c (tree_ssa_ccp): Set dump_file to NULL after
+ 	closing the file.
+ 	* tree-ssa.c: Include function.h.
+ 	(build_tree_ssa): Set tree_ssa_dump_file to NULL after closing the
+ 	file.
+ 	(dump_reaching_defs): Use current_function_name.
+ 	(dump_tree_ssa): Likewise.
+ 
+ 2002-11-07  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-cfg.c (successor_block): Return EXIT_BLOCK_PTR if no
+ 	successor can be found while walking the nesting chain.
+ 
+ 2002-11-07  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-cfg.c: Fix some formatting in code and comments.
+ 	(set_bb_for_stmt): Move from tree-flow-inline.h
+ 	* tree-dfa.c: Fix some formatting in code and comments.
+ 	* tree-flow-inline.h: Likewise.
+ 	* tree-flow.h: Likewise.
+ 	* tree-ssa.c: Likewise.
+ 
+ 2002-11-06  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (tree-ssa-ccp.o): Add dependency on tree-inline.h
+ 	* tree-cfg.c (find_taken_edge): New function.
+ 	(cleanup_cond_expr_graph): Call it.
+ 	(disconnect_unreachable_case_labels): Call it.
+ 
+ 	* tree-dfa.c (struct clobber_data_d): Remove field
+ 	parent_expr_p.  Update all users.
+ 	(find_refs_in_expr): Remove argument parent_expr_p.  Update all users.
+ 	(create_ref): Remove arguments parent_expr_p and operand_p.  Update
+ 	all users.
+ 	(replace_ref_in): Rename from replace_ref_operand_with.  Update all
+ 	users.  Find the operand in the statement and replace it with a new
+ 	operand.
+ 	(replace_ref_r): New local function.
+ 	(is_killing_def): Also handle V_PHI references.
+ 	(output_ref): Move from tree-flow-inline.h
+ 
+ 	* tree-flow-inline.h (ref_expr): Remove.  Update all users.
+ 	(restore_ref_operand): Remove.  Update all users.
+ 	(set_output_ref): Remove.  Update all users.
+ 	(is_assignment_stmt): New function.
+ 	(is_may_def, is_may_use, is_partial_def, is_partial_use,
+ 	is_volatile_def, is_volatile_use, is_default_def,
+ 	is_clobbering_def, is_initializing_def, is_relocating_def,
+ 	is_addressof_use, is_pure_use): Check reference type first.
+ 	(is_pure_def): New function.
+ 
+ 	* tree-flow.h (struct tree_ref_common): Remove fields expr_p,
+ 	operand_p and orig_operand.  Update all users.
+ 	(struct tree_ann_d): Remove field output_ref.  Update all users.
+ 
+ 	* tree-ssa-ccp.c: Include tree-inline.h.
+ 	(simulate_block): Simulate every statement in the block, not its
+ 	references
+ 	(simulate_def_use_chains): Simulate statements containing uses
+ 	reached by the definition.
+ 	(substitute_and_fold): Traverse statements, not references.
+ 	Call fold_stmt.
+ 	(visit_phi_node): If PHI node is marked volatile, assume varying.
+ 	(visit_stmt): Rename from visit_expression_for.  Work on a
+ 	statement, not a reference.
+ 	(visit_assignment): Rename from visit_assignment_for.  Work on a
+ 	statement, not a reference.
+ 	(visit_cond_stmt): Rename from visit_condexpr_for.  Work on a
+ 	statement, not a reference.
+ 	(evaluate_stmt): Rename from evaluate_expr.  Work on a statement,
+ 	not a reference.
+ 	(initialize): Initialize special definitions to varying.
+ 	(replace_uses_in): Work on a statement, not an expression.
+ 	(fold_stmt): Rename from ccp_fold.  Work on a statement, not an
+ 	expression.
+ 	(get_rhs): New local function.
+ 	(set_rhs): New local function.
+ 
+ 2002-11-06  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-flow.h: Prototype set_bb_for_stmt, last_stmt_ptr,
+ 	add_ephi_arg, num_ephi_args, set_ephi_arg, ephi_arg.
+ 	(enum tree_ref_type): Add E_LEFT, E_KILL, E_EXIT.
+ 
+ 	* tree-cfg.c (set_bb_for_stmt): Move to tree-flow-inline.h.
+ 	(last_stmt_ptr): New function, gives pointer to last statement in
+ 	bb.
+ 
+ 	* tree-flow-inline.h: Add exprref_processed, exprref_processed2,
+ 	expruse_phi, num_ephi_args, set_ephi_arg, ephi_arg, add_ephi_arg.
+ 
+ 	* tree-dfa.c (tree_ref_structure): Handle E_{LEFT,KILL,EXIT}.
+ 	(ref_type_name): Ditto.
+ 	(tree_ref_size): Ditto.
+ 	(dump_ref): E_PHI's phi_args is now a varray of phi_arg structs.
+ 	(add_ephi_arg): New function.
+ 	(remove_ref_from_list): Fix crash when node not found.
+ 	(compute_may_aliases): Add timing for points-to analysis.
+ 
+ 	* timevar.def: Add TV_TREE_PTA.
+ 
+ 	* tree-ssa-pre.c: Start of massive cleanup and rewriting (in
+ 	preparation for load/store PRE). No more uses of ref_expr, proper
+ 	call handling. Started removing unnecessary structures and lists,
+ 	started removing redundant and inefficient operations (IE O(n^2)
+ 	loops to process all phi operands, etc).  Basic load PRE implemented.
+ 	Code may look ugly due to large pieces commented out waiting for DFA
+ 	updating of refs to redo.
+ 
+ 2002-11-05  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-cfg.c (create_block_annotations): New local function.
+ 	(create_bb_ann): Remove.  Update all users.
+ 	(parent_array): New local variable.
+ 	(build_tree_cfg): Initialize it.
+ 	Call create_block_annotations.
+ 	(create_bb): Call alloc_block instead of ggc_alloc to allocate
+ 	memory for basic blocks.
+ 	Don't call set_parent_block.
+ 	Grow array parent_array.
+ 	(dump_tree_cfg): Change meaning of second argument.  Make it accept
+ 	any of the TDF_* flags defined in tree.h.
+ 	(delete_tree_cfg): Call free_aux_for_blocks.
+ 	Free array parent_array.
+ 	* tree-flow-inline.h (get_filename): New function.
+ 	(is_exec_stmt): return false if T is error_mark_node.
+ 	* tree-flow.h (struct var_ref_d): Mark alias_imm_rdefs field for
+ 	garbage collection.
+ 	(get_filename): Declare.
+ 	(struct bb_ann_d): Rename from bb_ann_def.
+ 	Remove garbage collection markers.
+ 	(referenced_vars): Mark for garbage collection.
+ 	(global_var): Likewise.
+ 	(create_bb_ann): Remove.
+ 	* tree-optimize.c (optimize_function_tree): Remove CFG and SSA
+ 	after debugging dumps.
+ 
+ 	* diagnostic.h (print_generic_stmt): Rename from print_generic_tree.
+ 	Update all users.
+ 	(print_generic_expr): Rename from print_generic_node.  Update all
+ 	users.
+ 	(PPF_BRIEF): Remove.  Update all users.
+ 	(PPF_BLOCK): Remove.  Update all users.
+ 	(PPF_LINENO): Remove.  Update all users.
+ 	(PPF_IS_STMT): Remove.  Update all users.
+ 	* flags.h (flag_dump_tree_all_ssa): Remove.  Update all users.
+ 	* toplev.c (f_options): Remove entry for -fdump-tree-all-ssa.
+ 	Update all users.
+ 	* tree-dump.c (dump_enable_all): Rename from dump_enable_all_ssa.
+ 	Update all users.
+ 	(dump_files): Add entry for -fdump-tree-all.
+ 	(dump_option_value_info): Remove entries for TDF_REFS and
+ 	TDF_RDEFS.
+ 	Add entry for TDF_BLOCK.
+ 	(dump_switch_p): If -fdump-tree-all was given, call dump_enable_all.
+ 	* tree-pretty-print.c (PPF_BRIEF): Remove.  Update all users.
+ 	(PPF_BLOCK): Remove.  Update all users.
+ 	(PPF_LINENO): Remove.  Update all users.
+ 	(PPF_IS_STMT): Remove.  Update all users.
+ 	(dumping_stmts): New local variable.
+ 	(print_generic_stmt): Rename from print_generic_tree.  Update all
+ 	users.
+ 	Set dumping_stmts to true.
+ 	(print_generic_expr): Rename from print_generic_node.  Update all
+ 	users.
+ 	Set dumping_stmts to false.
+ 	(maybe_init_pretty_print): Set last_bb to -1.
+ 	(dump_block_info): If available, dump file and line number
+ 	information for the first statement in the basic block.
+ 	* tree-ssa.c (build_tree_ssa): Dump referenced variables and
+ 	reaching definition information if -details is given.
+ 	* tree.h (enum tree_dump_index): Rename TDI_all to TDI_tu.  Update
+ 	all users.
+ 	Add new index TDI_all.
+ 	(TDF_DETAILS): Change value.
+ 	(TDF_REFS): Remove.  Update all users.
+ 	(TDF_RDEFS): Remove.  Update all users.
+ 	(TDF_BLOCK): Define.
+ 	* doc/invoke.texi: Update documentation for -fdump-tree-... flags.
+ 
+ 2002-11-05  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* tree-mudflap.c (mudflap_enqueue_decl, _constant): Use
+ 	size_in_bytes, not c_size_in_bytes.
+ 	(mf_init_extern_trees): Import uintptr_t typedef node from
+ 	mf-runtime.h.
+ 
+ 2002-11-01  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-cfg.c (remove_tree_bb): Add new argument remove_stmts.
+ 	Update all callers.
+ 	(make_ctrl_stmt_edges): Add an edge to the body of a SWITCH_EXPR.
+ 	(make_cond_expr_edges): Don't try to linearize the if() subgraph.
+ 	(make_case_label_edges): Don't remove the fallthru edge from the
+ 	entry block to the switch() subgraph.
+ 	(cleanup_tree_cfg): Call cleanup_control_flow.
+ 	(remove_unreachable_blocks): Remove blocks of compound structures
+ 	before removing the entry block.
+ 	(remove_blocks): New local function.
+ 	(blocks_unreachable_p): New local function.
+ 	(is_nonlocal_label_block): New local function.
+ 	(find_subblocks): New local function.
+ 	(is_parent): New local function.
+ 	(gsi_remove): New function.
+ 	(remove_stmt): New local function.
+ 	(cleanup_control_flow): New local function.
+ 	(cleanup_cond_expr_graph): New local function.
+ 	(cleanup_switch_expr_graph): New local function.
+ 	(disconnect_unreachable_case_labels): New local function.
+ 
+ 	* tree-dfa.c (remove_decl): New function.
+ 	(find_decl_location): New function.
+ 
+ 	* tree-flow.h (gsi_remove): Declare.
+ 	(remove_decl): Declare.
+ 	(find_decl_location): Declare.
+ 
+ 	* tree-ssa-ccp.c (optimize_unexecutable_edges): Remove.  Update all
+ 	users.
+ 	(ssa_ccp_df_delete_unreachable_insns): Remove.  Update all users.
+ 	(tree_ssa_ccp): Call print_generic_tree with PPF_BLOCK.
+ 
+ 2002-10-31  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (create_indirect_ref): New local function.
+ 	(find_refs_in_expr): Call it.
+ 	(create_ref): Check E_* reference types with == instead of &.
+ 	(dump_ref): Likewise.
+ 	(count_tree_refs): Likewise.
+ 	* tree-ssa.c (set_ssa_links): Update documentation comment for
+ 	save_chain.
+ 
+ 2002-10-31  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-cfg.c (remove_tree_bb): Don't walk beyond the end of the
+ 	basic block.
+ 
+ 2002-10-26  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* flags.h: Remove flag_tree_points_to from here.
+ 	* toplev.c: Include tree-alias-common.h.
+ 	(flag_tree_points_to): Now of type enum pta_type, rather than
+ 	int.
+ 	(lang_independent_options): Remove flag_tree_points_to.
+ 	(display_help): Display help for tree-points-to here.
+ 	(decode_f_option): Allow selecting of points-to algorithm.
+ 	* tree-alias-common.c (varmap): Removed.
+ 	(alias_annot): Changed to a hash table.  Update all functions
+ 	appropriately.
+ 	(FIELD_BASED): New macro, switches between field-based analysis,
+ 	and field-independent analysis (field-based isn't quite done yet).
+ 	(alias_annot_entry): New, used in hash table.
+ 	(annot_eq): New function.
+ 	(annot_hash): New function.
+ 	(find_func_aliases): Handle casts, fix indendation.
+ 	(splaycount): Removed.
+ 	(splay_tree_count): Removed.
+ 	(display_points_to_set): Removed.
+ 	(splay_tree_size): Removed.
+ 	(alias_get_name): New function.
+ 	(ptr_may_alias_var): Globals are a bit funky to handle.
+ 	* tree-alias-steen.c: Use alias_get_name, rather than
+ 	print_generic_node.
+ 	(steen_simple_assign): Handle assignment of PTF's.
+ 	(test_assign): Remove.
+ 	* tree-alias-common.h (enum pta_type): New.
+ 	(alias_get_name): New.
+ 	(flag_tree_points_to): New.
+ 
+ 2002-10-26  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-cfg.c (cleanup_tree_cfg): Uncomment call to
+ 	compact_blocks.
+ 
+ 2002-10-26  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (tree-pretty-print.o): Depend on $(TREE_FLOW_H)
+ 	* basic-block.h (BB_COMPOUND_ENTRY): Rename from BB_CONTROL_ENTRY.
+ 	* diagnostic.h (dump_generic_tree): Remove extern declaration.
+ 	(print_generic_node_brief): Remove.  Update all users.
+ 	(PPF_BRIEF): Declare.
+ 	(PPF_BLOCK): Declare.
+ 	(PPF_LINENO): Declare.
+ 	(PPF_IS_STMT): Declare.
+ 	* tree-pretty-print.c (PPF_BRIEF): New constant.
+ 	(PPF_BLOCK): New constant.
+ 	(PPF_LINENO): New constant.
+ 	(PPF_IS_STMT): New constant.
+ 	(dump_block_info): New local function.
+ 	(last_bb): New local variable.
+ 	(dump_generic_tree): Remove unused function.
+ 	(print_generic_tree): Add third argument 'flags'.  Update all
+ 	users.
+ 	(print_generic_node_brief): Remove.  Update all users.
+ 	(print_generic_node): Add third argument 'flags'.  Update all
+ 	users.
+ 	(dump_generic_node): Add third argument 'flags'.  Update all users.
+ 	If PPF_BLOCK is set, display basic block information at basic block
+ 	boundaries.
+ 	If PPF_IS_STMT is set, change the way COMPOUND_EXPR nodes are
+ 	rendered.
+ 	If PPF_BRIEF is set, don't show the bodies of control statements.
+ 	(print_declaration):
+ 
+ 	* toplev.c (process_options): Update comment for -fdisable-simple.
+ 
+ 	* tree-cfg.c (remove_tree_bb): Rename from tree_delete_bb.
+ 	(latch_block): Move declaration to tree-flow.h.  Declare extern.
+ 	(make_blocks): Start a new block after finding a control flow
+ 	altering statement.
+ 	(make_loop_expr_blocks): Set the loop entry block to be the parent
+ 	block for the loop latch block.
+ 	(cleanup_tree_cfg): Rename from tree_cleanup_cfg.
+ 	Call compact_blocks.
+ 	(remove_tree_bb): Rename from tree_delete_bb.  Update all users.
+ 	(dump_tree_bb): Rename from dump_tree_bb.  Update all users.
+ 	Dump information about loop latch blocks.
+ 	(debug_tree_bb): Rename from tree_debug_bb.  Update all users.
+ 	(debug_tree_cfg): Rename from tree_debug_cfg.  Update all users.
+ 	(dump_tree_cfg): Rename from tree_dump_cfg.  Update all users.
+ 	By default, dump the function with markers for basic block
+ 	boundaries.
+ 	(successor_block): If we can't find a successor following the
+ 	parent chain, return the next block in the linked list of blocks.
+ 	Update documentation comments.
+ 	(stmt_starts_bb_p): Don't let RETURN_EXPR start a new block.
+ 	(is_latch_block): New function.
+ 	(first_exec_stmt): Don't treat BIND_EXPR nodes as a special case.
+ 	(first_stmt): Return NULL_TREE if the block does not exist.
+ 	(last_stmt): Likewise.
+ 
+ 	* tree-dfa.c (find_tree_refs): Rename from tree_find_refs.  Update
+ 	all users.
+ 	(find_refs_in_stmt): Handle BIND_EXPR nodes.
+ 	(rli_start): Move from tree-flow-inline.h
+ 	(rli_start_last): Likewise.
+ 	(rli_start_at): Likewise.
+ 	(rli_delete): Likewise.
+ 
+ 	* tree-flow-inline.h (gsi_start_bb): Handle NULL blocks.
+ 	(ref_list_is_empty): New function.
+ 	* tree-flow.h (rli_start): Change declaration to extern.
+ 	(rli_start_last): Likewise.
+ 	(rli_start_at): Likewise.
+ 	(rli_delete): Declare.
+ 	(latch_block): Declare.
+ 	(is_latch_block): Declare.
+ 	(get_last_ref): Change to inline declaration.
+ 	(get_first_ref): Likewise.
+ 	(ref_list_empty): Declare.
+ 
+ 	* tree-optimize.c (delete_tree_ssa): Remove declaration.
+ 
+ 	* tree-ssa-dce.c (mark_control_parent_necessary): Call gsi_step_bb
+ 	instead of gsi_step.
+ 	(tree_ssa_eliminate_dead_code): Likewise.
+ 
+ 	* tree-ssa.c (compute_tree_rdefs): Rename from compute_tree_rdefs.
+ 	Update all users.
+ 
+ 2002-10-22  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (struct dfa_stats_d): Add field size_tree_refs.
+ 	(tree_ref_size): New function.
+ 	(create_ref): Call it.
+ 	(dump_dfa_stats): Get total size from dfa_stats.size_tree_refs.
+ 	(count_tree_refs): Call tree_ref_size.
+ 	* tree-flow-inline.h (get_last_ref): New function.
+ 	(get_first_ref): New function.
+ 	* tree-flow.h (struct var_ref_d): Rename from var_ref.
+ 	(struct var_def_d): Rename from var_def.
+ 	(struct var_phi_d): Rename from var_phi.
+ 	(struct var_use_d): Rename from var_use.
+ 	(struct expr_phi_d): Rename from expr_phi.
+ 	(struct expr_use_d): Rename from expr_use.
+ 	* tree-ssa-ccp.c (tree_ssa_ccp): Call get_last_ref.
+ 
+ 2002-10-21  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* timevar.def: Add TV_TREE_{PRE,CCP,DCE,CFG,SSA}} timevars.
+ 
+ 	* tree-optimize.c (optimize_function_tree): Push and pop timevars
+ 	for the tree optimizers.
+ 
+ 2002-10-21  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (OBJS): Move tree-mudflap.o ...
+ 	(C_AND_OBJC_OBJS): ... here.
+ 
+ 2002-10-21  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-flow-inline.h (rli_start): New function.
+ 	(rli_start_rev): New function.
+ 	(rli_start_at): New function.
+ 	(rli_after_end): New function.
+ 	(rli_step): New function.
+ 	(rli_step_rev): New function.
+ 	(rli_ref): New function.
+ 	* tree-flow.h (struct ref_list_iterator): Declare.
+ 	(FOR_REF_BETWEEN, FOR_EACH_REF, FOR_EACH_REF_REV): Replace with new
+ 	rli_* iterator functions.  Update all users.
+ 
+ 2002-10-21  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* tree-cfg.c (make_blocks): Ignore TRY_FINALLY_EXPR and
+ 	TRY_CATCH_EXPR.
+ 	* tree-mudflap.c (mx_register_decls): Ignore local decls
+ 	of extern variables of unknown size.
+ 
+ 2002-10-20  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (repair_injury): DTRT, rather than abort.
+ 
+ 	* tree-dfa.c (ref_type_name): E_* don't have these modifier
+ 	fields, but may have the same bits set, so don't print the
+ 	modifiers on them.
+ 
+ 	* gimplify.c (create_tmp_var): New function, wraps calls to
+ 	create_tmp_var_1 with pushing/popping of right context.
+ 	All internal gimplify.c now use create_tmp_var_1.
+ 	(create_tmp_var_noc): New function, create the var without
+ 	pushing/popping, and without exposing internals of create_tmp_var_1.
+ 	Only one use of this.
+ 
+ 	* tree-simple.h (create_tmp_var_noc): New prototype.
+ 
+ 	* c-simplify.c (simplify_stmt_expr): create_tmp_var changed to
+ 	create_tmp_var_noc.
+ 
+ 	* tree-ssa-pre.c: Add WAITING_FOR_DFA_UPDATE around code waiting for DFA
+ 	functions to keep refs up to date.
+ 	(add_call_to_ei): occurs and occurstmts is now an
+ 	array of tree pointers, not trees. Update approriately.
+ 	(insert_occ_in_preorder_dt_order_1): Ditto.
+ 	(tree_perform_ssapre): Ditto.
+ 	(find_use_for_var): Removed function.
+ 	(orig_expr_map): Removed global, removed uses.
+ 	(struct ei): Added injfixups member.
+ 	(is_strred_cand): STRIP_WFL the expression.
+ 	(calculate_increment): Ditto.
+ 	(is_injuring_def): Ditto.
+ 	(defs_y_dom_x): Ditto. Also account for fact that y is now a full
+ 	expression, not just an RHS.
+ 	(defs_match_p): Ditto (t2 is no longer just an RHS).
+ 	(finalize_1): Do insertion by replacement.
+ 	(repair_injury): Clean up, do insertion by replacement.
+ 	(find_reaching_def_of_var): Do backwards search in a cleaner way.
+ 	(update_ssa_for_new_use): Change how we do replacement.
+ 	(code_motion): Insertion by replacement. Print EXPR_WFL_LINENO, not
+ 	STMT_LINENO.
+ 	(pre_part_1_trav): Just create_tmp_var will now suffice.
+ 
+ 2002-10-18  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (find_refs_in_expr): Change type of second argument to
+ 	enum tree_ref_type.  Add third argument ref_mod.  Update all users.
+ 	(create_ref): Add third argument ref_mod.  Decode bitmask to set
+ 	the individual bitfields in the new reference.
+ 	* tree-flow-inline.h (is_may_ref): New function.
+ 	(is_may_def): New function.
+ 	(is_may_use): New function.
+ 	(is_partial_ref): New function.
+ 	(is_partial_def): New function.
+ 	(is_partial_use): New function.
+ 	(is_volatile_ref): New function.
+ 	(is_volatile_def): New function.
+ 	(is_volatile_use): New function.
+ 	(is_default_def): New function.
+ 	(is_clobbering_def): New function.
+ 	(is_initializing_def): New function.
+ 	(is_relocating_def): New function.
+ 	(is_addressof_use): New function.
+ 	(is_pure_use): New function.
+ 	* tree-flow.h (V_DEF, V_USE, V_PHI, E_PHI, E_USE, E_KILL): Redefine
+ 	inside enum tree_ref_type.  Update all users.
+ 	(enum tree_ref_type): Define.
+ 	(TRM_DEFAULT, TRM_CLOBBER, TRM_MAY, TRM_PARTIAL, TRM_INITIAL,
+ 	TRM_VOLATILE, TRM_RELOCATE): Rename from M_*.  Update all users.
+ 	(struct tree_ref_common): Change type of field 'type' to enum
+ 	tree_ref_type.  Update all users.
+ 	(struct var_ref): Add bitfields 'm_may', 'm_partial' and 'm_volatile'.
+ 	(struct var_def): Add bitfield 'm_default', 'm_clobber', 'm_initial'
+ 	and 'm_relocate'.
+ 	(struct var_use): Add bitfield 'm_addressof'.
+ 	(ref_type): Change return type to enum tree_ref_type.  Update all
+ 	users.
+ 	(create_ref): Add new argument ref_mod.  Update all users.
+ 	(function_may_recurse_p): Change return type to bool.  Update all
+ 	users.
+ 	(ref_type_name): Change argument type to tree_ref.  Update all
+ 	users.
+ 	(validate_ref_type): Remove.
+ 
+ 2002-10-18  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* cp/Make-lang.in (CXX_C_OBJS): Remove tree-cfg.o, tree-dfa.o,
+ 	tree-optimize.o, tree-ssa.o, tree-ssa-pre.o, gimplify.o, tree-simple.o,
+ 	tree-alias-steen.o, tree-alias-ecr.o, tree-alias-type.o,
+ 	disjoint-set.o, tree-ssa-ccp.o, tree-dchain.o, tree-alias-common.o,
+ 	and tree-ssa-dce.o.
+ 
+ 2002-10-17  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (TREE_FLOW_H): Add bitmap.h, basic-block.h,
+ 	hard-reg-set.h and tree-simple.h.  Update all users.
+ 	(C_AND_OBJC_OBJS): Move tree-cfg.o, tree-dfa.o,
+ 	tree-ssa.o, tree-optimize.o, c-simplify.o, c-call-graph.o,
+ 	tree-simple.o, simple-break-elim.o, simple-goto-elim.o, tree-dchain.o,
+ 	tree-ssa-pre.o, tree-alias-type.o, tree-mudflap.o, gimplify.o,
+ 	tree-alias-ecr.o, tree-alias-common.o, tree-alias-steen.o,
+ 	disjoint-set.o, tree-ssa-ccp.o and tree-ssa-dce.o ...
+ 	(OBJS): ... here.
+ 	(gimplify.o): Add dependency on $(TREE_FLOW_H).
+ 	(tree-pretty-print.o): New rule.
+ 	(GTFILES): Add tree-flow.h
+ 	* c-config-lang.in (gtfiles): Remove tree-flow.h
+ 	* c-simplify.c (copy_if_shared_r, unmark_visited_r,
+ 	unshare_all_trees, mark_not_simple): Move ...
+ 	* gimplify.c: ... here.
+ 	Include tree-flow.h
+ 	* tree-flow.h: Include hard-reg-set.h.
+ 
+ 	* c-common.h (print_c_tree, print_c_node, print_c_node_brief,
+ 	debug_c_tree, debug_c_node, debug_c_node_brief): Move declarations
+ 	from diagnostic.h.
+ 	* c-call-graph.c (construct_call_graph): Call get_name.
+ 	(print_callee): Likewise.
+ 	* c-pretty-print.c (print_declaration): Declare static.
+ 	(print_function_decl): Likewise.
+ 	(print_struct_decl): Likewise.
+ 	(dump_c_tree): Likewise.
+ 	(dump_c_node): Likewise.
+ 	* diagnostic.h (dump_generic_tree, dump_generic_node,
+ 	print_generic_tree, print_generic_node, print_generic_node_brief):
+ 	Declare.
+ 	* tree-pretty-print.c: New file.
+ 	* c-decl.c: Replace calls to print_c_node with print_generic_node.
+ 	* tree-alias-common.c: Likewise.
+ 	* tree-alias-steen.c: Likewise.
+ 	* tree-cfg.c: Likewise.
+ 	* tree-dfa.c: Likewise.
+ 	* tree-mudflap.c: Likewise.
+ 	* tree-optimize.c: Likewise.
+ 	* tree-ssa-ccp.c: Likewise.
+ 	* tree-ssa-pre.c: Likewise.
+ 	* tree-ssa-dce.c: Likewise.
+ 	Don't include c-common.h nor c-tree.h
+ 	(tree_ssa_eliminate_dead_code): Don't call COMPOUND_BODY.
+ 	Replace ASM_STMT with ASM_EXPR.  Don't check for EXPR_STMT.
+ 
+ 2002-10-17  Daniel Berlin  <dberlin@dberlin.org>
+ 	    Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-cfg.c (remove_bb_ann): Remove.  Update all users.
+ 	(delete_tree_cfg): Set bb->aux to NULL in all basic blocks.
+ 	* tree-dfa.c: Remove extern declaration for tree_find_refs.
+ 	(create_ref_list): Allocate new list with ggc_alloc.
+ 	(empty_ref_list): Just set first and last element to NULL.
+ 	(delete_ref_list): Remove.  Update all users.
+ 	(remove_ref_from_list): Don't call free.
+ 	(add_ref_to_list_begin): Allocate new node with ggc_alloc.
+ 	(add_ref_to_list_end): Likewise.
+ 	(add_ref_to_list_after): Likewise.
+ 	(create_ref): Call BITMAP_GGC_ALLOC.
+ 	(remove_tree_ann): Remove.  Update all users.
+ 	(tree_ref_structure): New function.
+ 	* tree-flow.h (edge, basic_block): Forward declare if necessary.
+ 	(struct ref_list_node): Mark for garbage collection.
+ 	(struct ref_list_priv): Likewise.
+ 	(struct tree_ref_common): Likewise.
+ 	(struct var_ref): Likewise.
+ 	(struct var_def): Likewise.
+ 	(struct var_phi): Likewise.
+ 	(struct var_use): Likewise.
+ 	(struct phi_node_arg_d): Likewise.
+ 	(struct expr_ref_common): Likewise.
+ 	(struct expr_phi): Likewise.
+ 	(struct expr_use): Likewise.
+ 	(union tree_ref_d): Likewise.
+ 	(struct tree_ann_d): Likewise.
+ 	(struct bb_ann_def): Likewise.
+ 	(referenced_vars): Likewise.
+ 	(global_var): Likewise.
+ 	(enum tree_ref_structure_enum): New.
+ 	(call_sites): Remove unused function.
+ 	* tree-inline.c (copy_tree_r): Copy the 'ann' field from tree_common.
+ 	* old-tree-inline.c (copy_tree_r): Likewise.
+ 	* tree-ssa.c (added): Mark for garbage collection.
+ 	(in_work): Likewise.
+ 	(work_stack): Likewise.
+ 	(delete_tree_ssa): Set global_var to NULL_TREE.
+ 	* tree.h (struct tree_ann_d): Forward declare.
+ 	(struct tree_common): Rename field 'aux' to 'ann'.  Update all
+ 	users.  Don't mark it 'skip' for garbage collection.
+ 
+ 2002-10-16  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-dfa.c (compute_may_aliases): Call create/delete_alias_vars
+ 	if flag_tree_points_to is on.
+ 	(may_alias_p): Use points-to info if user asked us to generate it.
+ 
+ 	* tree-optimize.c (optimize_function_tree): Don't call
+ 	create_alias_vars here.
+ 
+ 2002-10-16  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-cfg.c (make_cond_expr_edges): If the conditional has known
+ 	value, only make the edge to the corresponding branch.
+ 	(tree_delete_bb): Write a warning to the dump file when removing
+ 	blocks with executable statements.
+ 	(first_exec_stmt): Skip over empty BIND_EXPR blocks.
+ 
+ 	* tree-dfa.c (find_refs_in_expr): Don't look for references in non
+ 	GIMPLE statements.
+ 	(remove_tree_ann): Clear the annotation with memset.
+ 	(collect_dfa_stats_r): Don't call tree_annotation.
+ 	(find_may_aliases_for): Avoid adding the same alias more than once.
+ 	(may_alias_p): Fix comment grammar.
+ 
+ 	* tree-flow-inline.h (is_exec_stmt): New function.
+ 	* tree-flow.h (FOR_EACH_REF): Guard against NULL lists.
+ 	(FOR_EACH_REF_REV): Likewise.
+ 	(is_exec_stmt): Declare.
+ 
+ 	* tree-ssa-ccp.c (visit_phi_node): Reformat debug dumping output.
+ 	(visit_expression_for): Move check for clobbering definitions
+ 	before check for NULL expressions.
+ 	(visit_condexpr_for): Reformat debug dumping output.
+ 	(set_lattice_value): Remove stale comments.
+ 	(replace_uses_in): Don't clear TF_FOLDED flag from expression.
+ 
+ 	* tree-ssa.c (add_phi_node): If possible, associate the PHI node to
+ 	a statement.
+ 	(create_default_def): Create initial declarations for static
+ 	variables with DECL_INITIAL set.
+ 	(delete_tree_ssa): Remove annotations from variables.
+ 
+ 2002-10-16  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-alias-type.c (alias_tvar_new_with_aterm): New function.
+ 	Update all allocations to allocate right type, rather than the union.
+ 	Update to use macros to access members of alias_typevar.
+ 
+ 	* tree-alias-type.h: Split alias_typevar into a common, an ECR, and
+ 	an aterm, update all users.
+ 	Add macros to access members of union.
+ 
+ 	* tree-alias-common.c (create_alias_var): Handle function_decl's
+ 	properly (needed for proper handling of function pointers).
+ 	Updates for macros to access typevars.
+ 	Fix some indentation.
+ 
+ 	* tree-alias-steen.c: Updates for macros to access typevars.
+ 
+ 2002-10-16  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* c-decl.c (c_expand_body): Enable mudflap, only for gimple.
+ 	* c-pretty-print.c (dump_c_node): Render try/catch/finally exprs.
+ 	(op_prio): Accept BIND_EXPRs.
+ 	* gcc.c (cpp_unique_options): Make -fmudflap -include mf-runtime.h.
+ 	* toplev.c (process_options): Complain on -fmudflap -fdisable-simple.
+ 	* tree-mudflap.c (*): Reorganize for generic/gimple operation.
+ 	(mf_init_extern_trees): Extract decl nodes from -include'd file.
+ 	(mf_external_ref, mf_decl_extern_trees): Removed; updated callers.
+ 	(mf_offset_expr_of_array_ref): Don't bother store index type as
+ 	TREE_PURPOSE.
+ 	(mf_build_check_statement_for): Use GIMPLE tree types and builders.
+ 	(mx_register_decls): New function, replacing mx_register_decl.
+ 	(mx_xfn_xform_decls): Support only GIMPLE input tree types.
+ 	(mf_flush_enqueued_calls): Clean up enqueued call statements.
+ 
+ 2002-10-14  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* toplev.c (parse_options_and_default_flags): Undo local
+ 	hack that slipped in the previous commit.
+ 
+ 2002-10-14  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (c-decl.o): Add dependency on diagnostic.h.
+ 	* c-decl.c: Include diagnostic.h
+ 	(c_expand_body): Call get_name.
+ 
+ 	* basic-block.h (struct basic_block_def): Rename head_tree to
+ 	head_tree_p and end_tree to end_tree_p.  Change type to tree *.
+ 	Update all users.
+ 	(BLOCK_HEAD_TREE): Remove.  Update all users.
+ 	(BLOCK_END_TREE): Remove.  Update all users.
+ 	* tree-cfg.c (build_tree_cfg): Return if function body is empty.
+ 	(make_blocks): Change first argument to tree *.  Update all users.
+ 	(make_bind_expr_blocks): Likewise.
+ 	(make_loop_expr_blocks): Likewise.
+ 	(make_cond_expr_blocks): Likewise.
+ 	(make_switch_expr_blocks): Likewise.
+ 	(create_bb): Likewise.
+ 	(first_exec_block): Likewise.
+ 	(first_exec_stmt): Likewise.
+ 	(tree_delete_bb): Use a gimple statement iterator to unmap
+ 	statements.
+ 	(insert_stmt_before): Remove empty function.
+ 	(replace_expr_in_tree): Remove.  Update all users.
+ 	(find_expr_in_tree_helper): Likewise.
+ 	(find_expr_in_tree): Likewise.
+ 	(first_stmt): Call STRIP_NOPS.
+ 	(last_stmt): Call STRIP_NOPS.
+ 
+ 	* tree-dfa.c (struct clobber_data_d): Rename parent_stmt to
+ 	parent_stmt_p and parent_expr to parent_expr_p.  Change types to
+ 	tree *.  Update all users.
+ 	(find_refs_in_stmt): Change first argument type to tree *.  Update
+ 	all users.
+ 	(find_refs_in_expr): Chnage arguments parent_stmt and parent_expr
+ 	to tree *.  Update all users.
+ 	(create_ref): Don't add the same reference twice on the same list
+ 	when parent_stmt and parent_expr are the same node.
+ 	Don't set output_ref when the parent statement is not in GIMPLE
+ 	form.
+ 	(replace_ref_operand_with): Move from tree-flow-inline.h
+ 	(replace_ref_expr_with): New function.
+ 	(replace_ref_stmt_with): New function.
+ 	(create_tree_ann): Abort if trying to annotate certain nodes.
+ 	Don't create an empty ref list.
+ 	In the presence of WFL or NOPS wrappers, add the annotation to the
+ 	inner node.
+ 	(dump_ref): Don't call tree_annotation to access the tree
+ 	annotation.
+ 
+ 	* tree-flow.h (struct tree_ref_common): Rename field stmt to stmt_p
+ 	and field expr to expr_p.  Change types to tree *.  Update all
+ 	users.
+ 	(replace_ref_expr_with): Declare.
+ 	(replace_ref_stmt_with): Declare.
+ 	(insert_stmt_before, insert_stmt_after, replace_expr_in_tree,
+ 	find_expr_in_tree): Remove.
+ 	* tree-flow-inline.h (ref_expr): Return NULL_TREE if expr_p is
+ 	NULL.
+ 	(ref_stmt): Return NULL_TREE if stmt_p is NULL.
+ 	(tree_annotation): Call STRIP_WFL and STRIP_NOPS before returning
+ 	the annotation.
+ 	(add_tree_ref): Remove consistency checks.  Create an empty list
+ 	the first time.
+ 	(get_lineno): Return -1 on NULL_TREE.
+ 	(set_output_ref): Remove consistency.
+ 	(set_tree_flag): Likewise.
+ 	(clear_tree_flag): Likewise.
+ 	(reset_tree_flags): Likewise.
+ 	* tree-simple.h (gimple_stmt_iterator): Rename ptr to tp.  Change
+ 	type to tree *.  Update all users.
+ 	(gsi_start): Change argument type to tree *.  Update all users.
+ 	(gsi_stmt_ptr): New function.
+ 	(gsi_container): New function.
+ 
+ 	* tree-optimize.c (optimize_function_tree): Don't test fnbody for
+ 	NULL.
+ 	Re-enable optimizers.
+ 	* tree-ssa-ccp.c: Update documentation comments.
+ 	Don't include c-common.h and c-tree.h.
+ 	(tree_ssa_ccp): Don't call COMPOUND_BODY.
+ 	(ccp_fold): New private function.
+ 	(substitute_and_fold): Call it.
+ 	Call replace_ref_expr_with.
+ 	Set TF_FOLDED flag on the statement, not the expression.
+ 	(visit_assignment_for): Call STRIP_NOPS and STRIP_WFL.
+ 	(evaluate_expr): Call ccp_fold.  Only use the RHS of the simplified
+ 	value in the case of MODIFY_EXPR or INIT_EXPR.
+ 	(restore_expr):
+ 	* tree-ssa-dce.c (mark_control_parent_necessary): Use a gimple
+ 	iterator.
+ 	(tree_ssa_eliminate_dead_code): Likewise.
+ 	* tree-ssa-pre.c: Disable and add warning comments for out-of-date
+ 	calls to create_ref, find_refs_in_stmt and replace_expr_in_tree.
+ 
+ 2002-10-12  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-alias-type.h  (alias_typevar_def): Add struct aterm
+ 	as a temporary hack for andersen's analysis.
+ 	* tree-alias-common.c (current_alias_ops): New, use it
+ 	instead of referring to steen_alias_ops everywhere.
+ 	(get_alias_var): Use STRIP_WFL.
+ 	(find_func_aliases): Ditto.
+ 	(create_alias_vars): Call init function, move deletion to
+ 	delete_alias_vars.
+ 	(delete_alias_vars): New function, move deletion code to here.
+ 	(get_virtual_var): Removed.
+ 	(ptr_may_alias_var): New function.
+ 	* tree-alias-common.h (struct tree_alias_ops): Add may_alias
+ 	function.
+ 	* tree-alias-steen.c (steen_may_alias): New function.
+ 
+ 2002-10-10  Falk Hueffner  <falk.hueffner@student.uni-tuebingen.de>
+ 
+ 	* diagnostic.h (dump_c_tree, dump_c_node,
+ 	print_declaration, print_function_decl,
+ 	print_struct_decl): Fix argument types.
+ 
+ 2002-10-10  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree.h (struct tree_common): Rename field unused_0 to
+ 	not_gimple_flag.
+ 	(TREE_NOT_GIMPLE): Define.
+ 	* c-simplify.c (mark_not_simple_r): Remove.  Update all users.
+ 	(mark_not_simple): Set TREE_NOT_GIMPLE.
+ 	* gimplify.c (simplify_call_expr): Enable call to mark_not_simple.
+ 	* tree-flow.h (TF_NOT_SIMPLE): Remove.  Update all users.
+ 
+ 	* tree-cfg.c (build_tree_cfg): Rename from tree_find_basic_blocks.
+ 	Update all users.
+ 	Find the first executable statement before starting basic block 0.
+ 	(make_blocks): Do not accept TRY_FINALLY_EXPR and TRY_CATCH_EXPR
+ 	nodes.
+ 	(make_edges): Always create an edge from entry to basic block 0.
+ 	(delete_tree_cfg): Rename from delete_cfg.  Update all uses.
+ 	(first_exec_stmt): Return the container for the first statement,
+ 	not the statement itself.
+ 
+ 	* tree-dfa.c (tree_find_refs): Re-implement using a GIMPLE
+ 	iterator.
+ 	(find_refs_in_stmt): Handle GIMPLE statements.
+ 	(find_refs_in_expr): Call flags_from_decl_or_type when handling
+ 	CALL_EXPR expressions.
+ 	(create_ref): Call DECL_P.
+ 	(remove_tree_ann): Call tree_annotation.
+ 
+ 	* tree-flow-inline.h (gsi_step_bb): Stop if statement is not inside
+ 	a basic block.
+ 
+ 	* tree-flow.h (build_tree_cfg): Rename from tree_find_basic_blocks.
+ 	Update all users.
+ 	(delete_tree_cfg): Rename from delete_cfg.
+ 	(tree_find_refs): Declare.
+ 	(build_tree_ssa): Rename from tree_build_ssa.
+ 	(is_upward_exposed): Remove unused function.
+ 	* tree-optimize.c (delete_tree_ssa): Remove declaration.
+ 	(optimize_function_tree): Re-enable SSA builder.
+ 	* tree-simple.h (gsi_container): New function.
+ 
+ 	* Makefile.in (tree-ssa.o): Remove dependencies on c-common.h and
+ 	c-tree.h.
+ 	* tree-ssa.c: Don't include c-common.h nor c-tree.h.
+ 	(tree_find_refs): Remove declaration.
+ 	(remove_annotations_r): New local function.
+ 	(build_tree_ssa): Rename from tree_build_ssa.  Update all users.
+ 	(analyze_rdefs): Don't call prep_stmt.
+ 	(is_upward_exposed): Remove unused function.
+ 	(add_phi_node): Don't associate the PHI node to a statement.
+ 	(delete_tree_ssa): Receive the function body as argument.
+ 	Walk the function body removing annotations from every tree.
+ 
+ 2002-10-10  Steven Bosscher  <s.bosscher@student.tudelft.nl>
+ 
+ 	* tree-ssa-dce (tree_ssa_eliminate_dead_code): Initialize prev to
+ 	NULL_TREE.
+ 	Don't close dump_file until end of function.
+ 	Dump the tree after DCE for -fdump-tree-dce.
+ 
+ 2002-10-08  Richard Henderson  <rth@redhat.com>
+ 	    Jason Merrill  <jason@redhat.com>
+ 	    Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-simple.h (gimple_stmt_iterator): New type.
+ 	(gsi_start): New function.
+ 	(gsi_after_end): New function.
+ 	(gsi_step): New function.
+ 	(gsi_stmt): New function.
+ 
+ 2002-10-08  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* calls.c (flags_from_decl_or_type): Make extern.
+ 	(ECF_*): Move ...
+ 	* rtl.h (ECF_*): ... here.
+ 	(flags_from_decl_or_type): Declare.
+ 
+ 	* tree.h (COND_EXPR_COND): Define.
+ 	(COND_EXPR_THEN): Define.
+ 	(COND_EXPR_ELSE): Define.
+ 	(LABEL_EXPR_LABEL): Define.
+ 	(optimize_function_tree): Declare.
+ 
+ 2002-10-08  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (TREE_FLOW_H): Define.
+ 	(c-decl.o): Remove dependency on tree-optimize.h.
+ 	(tree-alias-steen.o, tree-alias-common.o, tree-ssa.o, tree-ssa-pre.o,
+ 	 tree-cfg.o, tree-dfa.o, tree-optimize.o, c-simplify.o, c-call-graph.o,
+ 	 tree-ssa-dce.o, tree-ssa-ccp.o): Depend on $(TREE_FLOW_H).
+ 	(tree-cfg.o): Remove dependencies on c-tree.h and c-common.h.
+ 	* c-call-graph.c (construct_call_graph): Disable calls to removed
+ 	functions.
+ 	* c-decl.c: Don't include tree-optimize.h.
+ 	(c_expand_body): Enable calls to optimize_function_tree.
+ 
+ 	* c-pretty-print.c (dump_c_node): Fix printf warnings.
+ 	Only dump the first node of a COMPOUND_EXPR when brief_dump is set.
+ 	Use COND_EXPR_COND, COND_EXPR_THEN and COND_EXPR_ELSE accessors.
+ 	Only dump the opening brace of a BIND_EXPR when brief_dump is set.
+ 
+ 	* tree-cfg.c: Don't include tree-optimize.h, c-common.h and c-tree.h.
+ 	(binding_stack, make_for_stmt_blocks, make_if_stmt_blocks,
+ 	 make_while_stmt_blocks, make_switch_stmt_blocks,
+ 	 make_do_stmt_blocks, create_maximal_bb, make_for_stmt_edges,
+ 	 make_while_stmt_edges, make_do_stmt_edges, make_if_stmt_edges,
+ 	 make_break_stmt_edges, make_continue_stmt_edges, create_loop_hdr,
+ 	 insert_before_ctrl_stmt, insert_before_normal_stmt,
+ 	 insert_after_ctrl_stmt, insert_after_normal_stmt,
+ 	 insert_after_loop_body, tree_split_bb, stmt_ends_bb_p): Remove.
+ 	Update all users.
+ 	(STRIP_CONTAINERS): Define.
+ 	(make_bind_expr_blocks): New local function.
+ 	(make_cond_expr_blocks): New local function.
+ 	(make_loop_expr_blocks): New local function.
+ 	(make_switch_expr_blocks): New local function.
+ 	(make_loop_expr_edges): New local function.
+ 	(make_cond_expr_edges): New local function.
+ 	(make_case_label_edges): New local function.
+ 	(first_exec_block): New local function.
+ 	(make_goto_expr_edges): Rename from make_goto_stmt_edges.
+ 	(make_blocks): Remove arguments COMPOUND_STMT and PREV_CHAIN_P.
+ 	Use gimple_stmt_iterator to iterate over the statements in the
+ 	function.  Create maximal basic blocks during traversal.
+ 	(create_bb): Remove arguments end, prev_chain_p and binding_scope.
+ 	Rename control_parent to parent_block.
+ 	(set_bb_for_stmt): Move from tree-flow.h.
+ 	(make_edges): Don't assume that basic block 0 contains executable
+ 	statements.
+ 	Handle BIND_EXPR nodes.
+ 	(make_ctrl_stmt_edges): Handle LOOP_EXPR, COND_EXPR and
+ 	SWITCH_EXPR.
+ 	(make_exit_edges): Handle GOTO_EXPR, CALL_EXPR and RETURN_EXPR.
+ 	(tree_delete_bb): Call first_stmt and last_stmt.
+ 	(block_invalidates_loop): Call last_stmt.
+ 	(replace_expr_in_tree): Don't dump line number information.
+ 	(find_expr_in_tree_helper): Don't call statement_code_p.
+ 	(tree_dump_bb): Call get_lineno.
+ 	(tree_cfg2dot): Ditto.
+ 	(successor_block): Use a gimple_stmt_iterator to find the first
+ 	executable block after the current one.
+ 	(is_ctrl_stmt): Handle COND_EXPR, LOOP_EXPR and SWITCH_EXPR.
+ 	(is_ctrl_altering_stmt): Call flags_from_decl_or_type to discover
+ 	non-return functions.
+ 	(is_loop_stmt): Handle LOOP_EXPR.
+ 	(is_computed_goto): Handle GOTO_EXPR.
+ 	(stmt_starts_bb_p): Handle CASE_LABEL_EXPR, LABEL_EXPR, RETURN_EXPR
+ 	and BIND_EXPR.
+ 	(first_exec_stmt): Use a gimple_stmt_iterator to traverse the
+ 	statements.
+ 	(first_stmt): New function.
+ 	(last_stmt): New function.
+ 
+ 	* tree-dfa.c: Don't include c-common.h, c-tree.h and
+ 	tree-optimize.h.  Include diagnostic.h.
+ 	(tree_find_refs): Disable.
+ 	(find_refs_in_stmt): Disable.
+ 	(find_refs_in_expr): Don't call prep_stmt.
+ 	(tree_ann): Don't annotate empty_stmt_node.
+ 	(find_declaration): Remove.  Update all users.
+ 	(dump_ref): Call get_lineno.
+ 	(is_visible_to): Always return true.
+ 
+ 	* tree-flow.h: Include tree-flow-inline.h, basic-block.h and
+ 	tree-simple.h.
+ 	(tree_ann_d): Remove compound_parent field.
+ 	(set_bb_for_stmt): Declare extern.
+ 	(compound_parent, set_compound_parent, struct for_header_blocks,
+ 	union header_blocks, prev_chain_p, set_prev_chain_p, binding_scope,
+ 	set_binding_scope, loop_hdr, for_init_bb, set_for_init_bb,
+ 	for_cond_bb, set_for_cond_bb, for_expr_bb, set_for_expr_bb,
+ 	end_while_bb, set_end_while_bb, do_cond_bb, set_cond_bb,
+ 	stmt_ends_bb_p, loop_parent, latch_block, switch_parent,
+ 	first_exec_stmt, last_exec_stmt, is_exec_stmt,
+ 	is_statement_expression, first_non_decl_stmt, first_decl_stmt,
+ 	first_non_label_in_bb, tree_split_bb, find_declaration): Remove.
+ 	Update all users.
+ 	(get_lineno): New function.
+ 	(struct bb_ann_def): Rename field parent to parent_block.  Update
+ 	all users.
+ 	Remove fields prev_chain_p, loop_hdr and binding_scope.  Update all
+ 	users.
+ 	(parent_block): Rename from bb_parent.
+ 	(set_parent_block): Rename from set_bb_parent.
+ 	(prev_chain_p): Remove
+ 	(bb_empty_p): Return true if block only contains empty_stmt_node.
+ 	(gsi_step_bb): New function.
+ 	(gsi_start_bb): New function.
+ 	(gsi_insert_before, gsi_insert_after, gsi_delete, gsi_replace):
+ 	Declare.
+ 	(insert_stmt_before): Rename from insert_stmt_tree_before.
+ 	(insert_stmt_after): Rename from insert_stmt_tree_after.
+ 	(first_stmt): Declare.
+ 	(last_stmt): Declare.
+ 	(tree_perform_ssapre, tree_ssa_ccp,
+ 	tree_ssa_eliminate_dead_code): Move declaration from tree-optimize.h.
+ 	* tree-flow-inline.h: New file for all the inline functions
+ 	declared in tree-flow.h
+ 
+ 	* tree-optimize.c: Don't include tree-optimize.h, c-common.h and
+ 	c-tree.h.
+ 	(optimize_function_tree): Disable call to double_chain_stmts.
+ 	Call init_flow.
+ 	Call tree_find_basic_blocks.
+ 	Disable calls to tree_build_ssa and optimizers.
+ 	(build_tree_ssa): Remove.  Update all users.
+ 	* tree-optimize.h: Remove.
+ 	* tree-ssa-ccp.c: Don't include tree-optimize.h
+ 	* tree-ssa-dce.c: Don't include tree-optimize.h.
+ 	Include diagnostic.h
+ 	* tree-ssa-pre.c: Don't include tree-optimize.h.
+ 	(requires_edge_placement): Disable unused function.
+ 	(set_need_repair): Disable unused function.
+ 	(finalize_1): Disable calls to insert_stmt_tree_before and
+ 	insert_stmt_tree_after.
+ 	(repair_injury): Ditto.
+ 	(code_motion): Ditto.
+ 	* tree-ssa.c: Don't include tree-optimize.h.
+ 	(insert_phi_nodes_for): Remove unused variable.
+ 	(add_phi_node): Don't call statement_code_p.
+ 	* cp/optimize.c: Don't include tree-optimize.h
+ 	* tree-alias-common.c: Don't include tree-optimize.h.
+ 	(find_func_decls): Disable.
+ 	(display_points_to_set): Disable.
+ 	* tree-alias-steen.c: Don't include tree-optimize.h.
+ 
+ 2002-10-04  Jason Merrill  <jason@redhat.com>
+ 
+ 	* gimplify.c (declare_tmp_vars): Don't add temps to block vars.
+ 	* tree-inline.c (remap_decls): Split out from remap_block.
+ 	(copy_bind_expr): Remap BIND_EXPR_VARS separately from block vars.
+ 
+ 	* c-simplify.c (simplify_expr_stmt): Call set_file_and_line_for_stmt.
+ 
+ 	* gimplify.c: New file.
+ 	(push_gimplify_context, pop_gimplify_context): New fns.
+ 	(gimple_push_bind_expr, gimple_pop_bind_expr): New fns.
+ 	(simplify_bind_expr): Use them.
+ 	(gimple_current_bind_expr, gimple_add_tmp_var): New fn.
+ 	(foreach_stmt): Recurse if necessary.
+ 	(various): Use generic interfaces instead of c-specific ones.
+ 	* c-simplify.c: Move language-independent code to gimplify.c.
+ 	(simplify_c_loop): Use add_tree instead of add_stmt_to_compound.
+ 	(various): Use new *_bind_expr interfaces.
+ 	* Makefile.in (C_AND_OBJC_OBJS): Add gimplify.o.
+ 	(gimplify.o): New rule.
+ 
+ 	* c-decl.c (c_expand_body): Dump trees here.
+ 	* c-simplify.c (simplify_function_body): Not here.
+ 
+ 2002-10-03  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* tree-mudflap.c (mf_offset_expr_of_array_ref): Don't emit
+ 	intermediate variables for constant index values.
+ 	(mx_xfn_indirect_ref): For constant valid index values and
+ 	known valid array sizes, omit bounds checks.
+ 
+ 2002-10-03  Jason Merrill  <jason@ariel.home>
+ 
+ 	* c-simplify.c (simplify_bind_expr): Don't clear TREE_SIDE_EFFECTS
+ 	if we have a block.
+ 
+ 	* c-simplify.c (simplify_expr) [TRY_FINALLY_EXPR]: New case.
+ 
+ 	* tree-inline.c (copy_body_r) [RETURN_EXPR]: Don't make an extra
+ 	copy of the MODIFY_EXPR.  Mark the return label used.
+ 	(expand_call_inline): Don't push/pop_srcloc.  Only emit the return
+ 	label if it was used.
+ 
+ 	* tree-simple.c (right_assocify_expr): Split out from
+ 	rationalize_compound_expr.  Don't move non-matching op0's.
+ 	* tree-simple.h: Declare it.
+ 	* c-simplify.c (simplify_boolean_expr): Call it.
+ 	(simplify_cond_expr): Reorganize.  Optimize if (a&&b).
+ 
+ 	* c-simplify.c (wrap_with_wfl): Drop special loop handling.
+ 	(simplify_c_loop): Wrap loop contents in wfls.
+ 
+ 	* c-simplify.c (STRIP_WFL): Move...
+ 	* tree.h: ...here.
+ 
+ 	* c-common.c (c_walk_subtrees): Don't walk TREE_CHAIN.
+ 	* tree-inline.c (walk_tree): Call langhook walk_subtrees first.
+ 	For expressions, walk TREE_CHAIN if it matters.
+ 
+ 2002-10-01  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* builtins.c (expand_builtin_alloca): Disable if -fmudflap.
+ 	* tree-mudflap.c (mudflap_enqueue_decl): Tweak logic to include
+ 	more globals.
+ 	(mx_xfn_indirect_ref): Handle bitfield COMPONENT_REFs; instrument
+ 	BIT_FIELD_REF/INDIRECT_REFs.
+ 
+ 2002-10-01  Jason Merrill  <jason@redhat.com>
+ 
+ 	* c-decl.c (poplevel): Only add undeclared labels to the toplevel
+ 	block.
+ 	* c-parse.in (label_decl): Push the declared label.
+ 
+ 	* c-decl.c (c_expand_body): If we've been simplified, use
+ 	expand_expr_stmt_value instead.
+ 
+ 	* c-decl.c (c_expand_decl): Rename from c_expand_decl_stmt.
+ 	Handle all C-specific expansion semantics.
+ 	* c-tree.h: Change prototype.
+ 	* langhooks.h (struct lang_hooks): Add expand_decl hook.
+ 	* langhooks.c (lhd_expand_decl): Default version.
+ 	* langhooks-def.h (LANG_HOOKS_EXPAND_DECL): Provide default.
+ 	* c-lang.c (LANG_HOOKS_EXPAND_DECL): Define.
+ 	* c-semantics.c (lang_expand_decl_stmt): Remove.
+ 	(genrtl_decl_stmt): Use lang_hooks.expand_decl.
+ 	* Makefile.in (c-semantics.o): Depend on langhooks.h.
+ 	* c-objc-common.c (c_objc_common_init): Don't set
+ 	lang_expand_decl_stmt.
+ 
+ 	* c-common.def (ASM_STMT): Only 4 operands.
+ 	* c-common.h (ASM_CV_QUAL): Remove.
+ 	(genrtl_asm_stmt): Adjust prototype.
+ 	* c-typeck.c (build_asm_stmt): Adjust.
+ 	* c-semantics.c (genrtl_asm_stmt): Change cv_qualifier parm to
+ 	volatile_p.
+ 	(expand_stmt): Adjust.
+ 
+ 	* c-common.h (SWITCH_COND, SWITCH_BODY, CASE_LOW, CASE_HIGH,
+ 	CASE_LABEL_DECL, GOTO_DESTINATION, ASM_STRING, ASM_OUTPUTS,
+ 	ASM_INPUTS, ASM_CLOBBERS, ASM_VOLATILE_P, ASM_INPUT_P): Move to tree.h.
+ 
+ 	* c-pretty-print.c (newline_and_indent): New fn.
+ 	(dump_c_tree, dump_c_node): Make spc a plain int.
+ 	(dump_c_node): Use output_add_identifier.
+ 	Reorganize for bnw-simple; indent in the enclosing node rather
+ 	than the subexpression.
+ 	[FUNCTION_DECL]: Just print the name for now.
+ 	[COMPOUND_EXPR, COND_EXPR]: Handle use as statements.
+ 	[BIND_EXPR, GOTO_EXPR, EXIT_EXPR, LOOP_EXPR, LABELED_BLOCK_EXPR,
+ 	EXIT_BLOCK_EXPR, RETURN_EXPR, SWITCH_EXPR, ASM_EXPR,
+ 	CASE_LABEL_EXPR]: Implement.
+ 	(print_declaration): Print 'static'.
+ 	* c-tree.h: Move c-pretty-print decls to diagnostic.h.
+ 
+ 	* expr.c (store_field): Don't always pass want_value==0 to store_expr.
+ 
+ 	* expr.c (expand_expr) [EXIT_EXPR]: Handle EXIT_EXPR_IS_LOOP_COND.
+ 
+ 	* expr.c (expand_expr) [LOOP_EXPR]: Pass exit_flag==0 to
+ 	exand_start_loop.
+ 	[BIND_EXPR]: Adjust for functions-as-trees mode.
+ 	[COMPOUND_EXPR]: Avoid recursion if possible.
+ 	[SWITCH_EXPR, LABEL_EXPR]: Move handling from java/expr.c.
+ 	[CASE_LABEL_EXPR, ASM_EXPR]: New handling.
+ 
+ 	* tree.h (struct tree_common): Add visited flag.
+ 	(TREE_VISITED): New macro.
+ 	* tree.c (copy_node): Clear TREE_VISITED.
+ 	* print-tree.c (print_node): Print visted.
+ 
+ 	* stmt.c (expand_asm_expr): New fn.
+ 
+ 	* tree.c (build1): Always set TREE_SIDE_EFFECTS for 's' codes.
+ 
+ 	* tree.h (enum tree_index): Add TI_EMPTY_STMT.
+ 	(empty_stmt_node): New macro.
+ 	* tree.c (build_common_tree_nodes_2): Initialize it.
+ 
+ 	* tree.def: Change some codes from 'e' to 's'.
+ 	(CASE_LABEL_EXPR, ASM_EXPR): New codes.
+ 
+ 	* tree.def (SWITCH_EXPR): Now has three operands.
+ 
+ 	* tree-inline.c: Retarget to generic trees.  FIXME FIXME.
+ 	* old-tree-inline.c: Old C/Java-specific inliner.
+ 	* Makefile.in (old-tree-inline.o): New rule.
+ 	* c-common.c (c_walk_subtrees): New fn.
+ 	(c_tree_chain_matters_p): New fn.
+ 	* c-lang.c: Use them for LANG_HOOKS_TREE_INLINING_WALK_SUBTREES
+ 	and LANG_HOOKS_TREE_INLINING_TREE_CHAIN_MATTERS_P.
+ 	* c-common.h: Declare them.
+ 	(DECL_NUM_STMTS): Move to tree.h.
+ 	* c-decl.c (finish_function): Simplify the function trees.
+ 	* c-objc-common.c (inline_forbidden_p): Look inside BIND_EXPRs
+ 	for nested functions.  Don't inline a function with _STMT trees.
+ 
+ 	* basic-block.h: Include hard-reg-set.h.
+ 
+ 	* c-decl.c (start_function): Don't call make_decl_rtl.
+ 	(c_expand_body): Call it here instead.
+ 
+ 	* Makefile.in (explow.o): Depend on langhooks.h.
+ 
+ 	* unroll.c (copy_loop_body): Don't copy NOTE_INSN_DELETED_LABELs
+ 	between copy_notes_from and loop_end, either.
+ 
+ 2002-09-30  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (repair_injury): Start work on updating SSA
+ 	representation for strength reduction injuries.
+ 	Print a new line after outputting tree node in debug statements.
+ 	Fix strength reduction of a candidate with two variables (IE a *
+ 	c).
+ 	Put the repair after the injuring statement, not at the end of the
+ 	block.
+ 	Break the RHS use lookup if it's defined by a phi.
+ 	(calculate_increment): Ditto on node printing.
+ 	(code_motion): Ditto on updating SSA rep for strength reduction
+ 	injuries.
+ 	(find_rhs_use_for_var): Rewrite to use maybe_find_rhs_use_for_var.
+ 	(maybe_find_rhs_use_for_var): Rename from find_rhs_use_for_var,
+ 	don't abort, return NULL.
+ 	(set_var_phis): Simplify break condition.
+ 	Make sure RHS *has* a use before we go and get it.
+ 	(rename2): Ditto on RHS checking.
+ 	When looking up injuring defs, break on phis.
+ 	(phi_opnd_from_res): Ditto.
+ 	(defs_y_dom_x): Ditto.
+ 	(TODO List): Add new TODO to fix the remapping crud.
+ 
+ 2002-09-27  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (tree_perform_ssapre): Move insertion into
+ 	splay tree inside the is_simple_modify_expr block, to prevent
+ 	tree check failure.
+ 
+ 2002-09-26  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (update_phis_in_list): New function.
+ 	(update_ssa_for_new_use): New function.
+ 	(code_motion): Start working on code to update SSA representation.
+ 	(find_reaching_def_of_var): New function.
+ 
+ 2002-09-25  Steven Bosscher  <s.bosscher@student.tudelft.nl>
+ 
+ 	* Makefile.in (tree): Add dependency on c-tree.h
+ 	* tree-optimize.c: Include c-tree.h
+ 	(optimize_function_tree): React to -fdump-tree-optimized.
+ 
+ 2002-09-25  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-dfa.c (add_list_to_ref_list_end): New function.
+ 	(add_list_to_ref_list_begin): Ditto.
+ 	(find_list_node): Handle searching in empty lists.
+ 	(find_refs_in_stmt): De-staticify.
+ 
+ 	* tree-flow.h (add_list_to_ref_list_end): New declaration.
+ 	(add_list_to_ref_list_begin): Ditto.
+ 	(find_refs_in_stmt): Add prototype.
+ 
+ 2002-09-25  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (tree-dfa.o): Depend on flags.h
+ 	* tree-cfg.c (tree_dump_cfg): Alter output format slightly.
+ 	(block_invalidates_loop): Look for clobbering definitions of
+ 	GLOBAL_VARIABLE.
+ 	* tree-simple.c (get_base_symbol): Handle EXPR_WITH_FILE_LOCATION
+ 	nodes.
+ 	* tree-optimize.c (init_tree_flow): Remove.  Update all users.
+ 	(build_tree_ssa): Don't call tree_find_refs.
+ 	Don't call tree_compute_rdefs.
+ 
+ 	* tree-dfa.c: Include flags.h
+ 	(dump_file): Remove.
+ 	(dump_flags): Remove.
+ 	(pointer_refs): Remove.
+ 	(struct dfa_stats_d): Add fields max_num_phi_args, num_may_alias,
+ 	max_num_may_alias, num_alias_imm_rdefs and max_num_alias_imm_rdefs.
+ 	Remove field num_fcalls.
+ 	(dfa_counts): Declare.
+ 	(tree_find_refs): Declare.
+ 	(tree_ssa_dump_file): Declare.
+ 	(tree_ssa_dump_flags): Declare.
+ 	(dump_if_different): New function.
+ 	(add_default_defs): Remove.  Update all users.
+ 	(add_call_site_clobbers): Remove.  Update all users.
+ 	(add_ptr_may_refs): Remove.  Update all users.
+ 	(compute_may_aliases): New function.
+ 	(find_may_aliases_for): New function.
+ 	(add_may_alias): New function.
+ 	(may_alias_p): New function.
+ 	(is_visible_to): New function.
+ 	(get_alias_index): New function.
+ 	(call_sites): Remove.  Update all users.
+ 	(global_var): Declare.
+ 	(E_FCALL): Remove.  Adjust other constants.
+ 	(M_INDIRECT): Remove.  Update all users.
+ 	(M_RELOCATE): Declare.
+ 	(tree_find_refs): Move debugging dumps to tree_build_ssa.
+ 	Move initialization code to init_tree_ssa.
+ 	Call compute_may_aliases.
+ 	(find_refs_in_expr): For INDIRECT_REF nodes create a reference to
+ 	the canonical INDIRECT_REF node associated with the pointer symbol.
+ 	Given a pointer p, clobber the canonical INDIRECT_REF of p after
+ 	creating a V_DEF for p.
+ 	For CALL_EXPR nodes, if the called function is not pure nor
+ 	const, create a use and a clobbering definition to GLOBAL_VAR.
+ 	(create_ref): Allow INDIRECT_REF variables.
+ 	(add_phi_arg): Keep track of number of PHI arguments created.
+ 	(function_may_recurse_p): Look for clobbering definitions to
+ 	GLOBAL_VAR.
+ 	(get_fcalls): Remove unused function.
+ 	(is_pure_fcall): Remove unused function.
+ 	(fcall_takes_ref_args): Remove unused function.
+ 	(find_declaration): Stop iterating at ENTRY_BLOCK_PTR.
+ 	(debug_variable): New function.
+ 	(dump_variable): New function.
+ 	(dump_referenced_vars): Call it.
+ 	(dump_phi_args): Don't dump NULL arguments.
+ 	(PERCENT): Define.
+ 	(dump_dfa_stats): Re-format output.
+ 	Add new counters.
+ 	Call dump_if_different.
+ 	(collect_dfa_stats): Also recurse into GLOBAL_VAR.
+ 	(collect_dfa_stats_r): Collect may-alias information.
+ 	(count_tree_refs): Collect information about def-def links for
+ 	aliases.
+ 	Keep track of maximum values for number of PHI arguments, aliases
+ 	and def-def links.
+ 	(ref_type_name): Handle M_RELOCATE.
+ 	(validate_ref_type): Ditto.
+ 
+ 	* tree-ssa.c: Add more documentation.
+ 	(tree_ssa_dump_file): Rename from dump_file.  Declare extern.
+ 	(tree_ssa_dump_flags): Rename from dump_flags.  Declare extern.
+ 	(added): New local varray.
+ 	(in_work): New local varray.
+ 	(work_stack): New local varray.
+ 	(dfa_counts): Declare.
+ 	(insert_phi_nodes_for): New local function.
+ 	(add_phi_node): New local function.
+ 	(set_ssa_links): New local function.
+ 	(set_alias_imm_reaching_def): New local function.
+ 	(create_default_def): New local function.
+ 	(init_tree_ssa): New local function.
+ 	(tree_find_refs): Relocate declaration from tree-flow.h
+ 	(tree_build_ssa): Call init_tree_ssa.
+ 	Call tree_find_refs.
+ 	Process all SSA-related dump options.
+ 	(insert_phi_nodes): Rename from insert_phi_terms.  Update all
+ 	users.
+ 	Call insert_phi_nodes_for.
+ 	(build_fud_chains): Add more documentation.
+ 	Initialize save_chain to 0.
+ 	(search_fud_chains): Add more documentation.
+ 	Call set_ssa_links.
+ 	Call create_default_def.
+ 	(tree_compute_rdefs): Initialize array marked to 0.
+ 	(follow_chain): Follow def-def chains for non-killing definitions
+ 	for aliases.
+ 	(dump_reaching_defs): Call dump_variable.
+ 
+ 	* tree-flow.h (E_FCALL): Remove.  Update all users.
+ 	(M_INDIRECT): Remove.  Update all users.
+ 	(M_RELOCATE): Declare.
+ 	(struct var_ref): Add field alias_imm_rdefs.
+ 	(alias_imm_reaching_def): New inline function.
+ 	(struct tree_ann_d): Add field indirect_var.
+ 	Add field may_aliases.
+ 	(enum tree_flags): Relocate.
+ 	(indirect_var): New inline function.
+ 	(set_indirect_var): New inline function.
+ 	(may_alias): New inline function.
+ 	(num_may_alias): New inline function.
+ 	(struct dfa_counts_d): Declare.
+ 	(global_var): Declare.
+ 	(FCALL_NON_PURE, FCALL_PURE, FCALL_BUILT_IN): Remove.
+ 	(tree_find_refs): Move to tree-ssa.c.
+ 	(dump_variable): Declare.
+ 	(debug_variable): Declare.
+ 	(get_fcalls): Remove.
+ 	(is_pure_fcall): Remove.
+ 	(fcall_takes_ref_args): Remove.
+ 	(ref_defines): Declare.
+ 	(is_killing_def): Declare.
+ 	(get_alias_index): Declare.
+ 	(delete_tree_ssa): Rename from delete_ssa.  Update all users.
+ 	(set_currdef_for): Allow INDIRECT_REF nodes.
+ 	(bb_annotation): Don't create a new one if the block didn't have an
+ 	annotation already.
+ 
+ 	* tree-ssa-ccp.c (substitute_and_fold): Rename from
+ 	ssa_ccp_substitute_constants.  Update all users.
+ 	Call replace_uses_in.
+ 	(replace_uses_in): New local function.
+ 	(evaluate_expr): Call it.
+ 	(initialize): Call get_base_symbol.
+ 
+ 	* tree-ssa-dce.c (tree_ssa_eliminate_dead_code): Don't handle
+ 	E_FCALL.
+ 
+ 2002-09-22  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (tree-dfa.o): Depend on hashtab.h.
+ 	* c-simplify.c (get_name): Declare extern.
+ 	* tree-cfg.c (tree_dump_cfg): Call it.
+ 	(tree_cfg2dot): Call it.
+ 	* tree-ssa-ccp.c (tree_ssa_ccp): Call get_name.
+ 	* tree-ssa-dce.c (tree_ssa_eliminate_dead_code): Call get_name.
+ 	* tree-ssa-pre.c (tree_perform_ssapre): Call get_name.
+ 	* tree-ssa.c (analyze_rdefs): Call get_name.
+ 	(dump_reaching_defs): Call get_name.
+ 	(dump_tree_ssa): Call get_name.
+ 	* tree.h (get_name): Declare.
+ 
+ 	* tree-dfa.c: Include "hashtab.h"
+ 	(struct dfa_stats_d): New.
+ 	(collect_dfa_stats): New local function.
+ 	(collect_dfa_stats_r): New local function.
+ 	(count_tree_refs): New local function.
+ 	(count_ref_list_nodes): New local function.
+ 	(tree_find_refs): Call dump_begin on entry to the function.
+ 	(dump_referenced_vars): Call get_name.
+ 	(SCALE): Declare.
+ 	(LABEL): Declare.
+ 	(dump_dfa_stats): New function.
+ 	(debug_dfa_stats): New function.
+ 	* tree-dump.c (struct dump_option_value_info): Add entry for TDF_STATS.
+ 	* tree-flow.h (has_annotation): Remove.  Update all users.
+ 	(dump_dfa_stats): Declare.
+ 	(debug_dfa_stats): Declare.
+ 	(tree_annotation): Don't create one if the tree doesn't have one
+ 	already.  Update all users to new semantics.
+ 	* tree-ssa-dce.c (print_stats): Dump if dump_flags has TDF_STATS bit
+ 	set.
+ 	* tree-ssa.c (tree_build_ssa): Open dump file on entry.
+ 	Call dump_dfa_stats if dump_flags has TDF_STATS bit set.
+ 	Call dump_tree_ssa if dump_flags has TDF_DETAILS bit set.
+ 	* tree.h (TDF_STATS): Define.
+ 	* doc/invoke.texi: Document 'stats' flag for -fdump-tree.
+ 
+ 	* tree-dfa.c (next_tree_ref_id): Change type to unsigned long.
+ 	Update all users.
+ 	tree-flow.h (tree_ref_common): Change type of field 'id' to
+ 	unsigned long.  Update all users.
+ 	(ref_id): Change return type to unsigned long.  Update all users.
+ 
+ 2002-09-21  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (struct expr_info): Add repaired member.
+ 	(repair_injury): Track which injuries we repaired, so we don't
+ 	repair them > 1 time.
+ 
+ 2002-09-20  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-pretty-print.c (dump_c_node): Fix call to REAL_VALUE_TO_DECIMAL.
+ 
+ 2002-09-20  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (find_refs_in_stmt): Fix botched call to
+ 	clobber_vars_r with CLEANUP_STMT nodes.
+ 
+ 2002-09-20  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* toplev.c (flag_tree_ssa): Remove.  Update all users.
+ 
+ 2002-09-20  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* gcc.c (cc1_options): Make -fmudflap imply -fno-merge-constants.
+ 	* varasm.c (categorize_decl_for_section): Likewise, for strings.
+ 	* tree-mudflap.c (mudflap_enqueue_decl): Don't be interested
+ 	in !TREE_USED decls.  Fix minor type warning.
+ 	(mf_offset_expr_of_array_ref): Create explicit temporary variables
+ 	for array index expressions instead of SAVE_EXPRs.  Update callers.
+ 	(mf_build_check_statement_for): Insert temp variables.
+ 	(mx_xfn_indirect_ref): Correct recursion-protection checking
+ 	sequence.  Tweak array check-base calculation back to "&array[0]".
+ 	(*): Use build_function_type_list instead of build_function_type.
+ 	(mx_external_ref): Remove unused parameter.  Update callers.
+ 
+ 2002-09-19  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-decl.c (c_expand_body): Invoke tree optimizers with -O1 and
+ 	above.
+ 	* flags.h (flag_tree_ssa): Remove.
+ 	* tree-cfg.c (find_expr_in_tree_helper): Change last argument type
+ 	to int.
+ 	* tree-dfa.c (create_ref): Ditto.
+ 	* tree-flow.h (num_referenced_vars): Change type to unsigned long.
+ 	* doc/invoke.texi (-ftree-ssa): Remove.
+ 	(-fdump-tree-{pre,ccp,dce}): Add to the summary section.
+ 	(-fdump-tree-xxx-details): Update documentation.
+ 	(-fdump-tree-ccp): Document.
+ 	(-fdump-tree-simple): Move elsewhere.
+ 
+ 2002-09-19  Richard Henderson  <rth@redhat.com>
+ 
+ 	* function.c (insns_for_mem_hash): Cast to size_t first.
+ 	* tree-dfa.c (num_referenced_vars): Unsigned long, not size_t.
+ 	(dump_referenced_vars): Use %lu for it.
+ 	(dump_ref): Use HOST_WIDE_INT_PRINT_DEC.
+ 	* tree-nomudflap.c (mudflap_c_function): Use ATTRIBUTE_UNUSED.
+ 	(mudflap_enqueue_decl, mudflap_enqueue_constant): Likewise.
+ 	* tree-ssa-pre.c (compute_idfs): Cast to size_t first.
+ 
+ 	* tree-optimize.c (optimize_function_tree): Fix missed renamings.
+ 	* tree-ssa-pre.c (tree_perform_ssapre): Likewise.
+ 
+ 2002-09-19  Jeff Law <law@redhat.com>
+ 
+ 	* tree-dfa.c (find_refs_in_stmt): Search for references in the call
+ 	address of a CALL_EXPR.
+ 
+ 2002-09-19  Daniel Berlin <dberlin@dberlin.org>
+ 
+ 	* toplev.c: tree-ssa-* -> tree-*.
+ 
+ 	* doc/invoke.texi: Ditto.
+ 
+ 2002-09-19  Daniel Berlin <dberlin@dberlin.org>
+ 
+ 	* flags.h: flag_tree_ssa_* -> flag_tree_*.
+ 
+ 	* toplev.c: Ditto.
+ 
+ 	* tree-optimize.c: Ditto.
+ 
+ 	* tree-dump.c: dump-tree-ssa-* -> dump-tree-*.
+ 	TDI_ssa_* -> TDI_*.
+ 
+ 	* tree.h: Ditto
+ 
+ 	* tree-ssa-dce.c (tree_ssa_eliminate_dead_code): Fix dump handling.
+ 
+ 2002-09-18  Daniel Berlin <dberlin@dberlin.org>
+ 
+ 	* tree-dump.c (dump_files): Use dump-tree-ssa-??? for the option names
+ 	and "ssa-???" for the dump files.
+ 
+ 	* tree.h: TDI_ccp and TDI_dce -> TDI_ssa_ccp and TDI_ssa_dce.
+ 
+ 	* tree-ssa-ccp.c: TDI_ccp->TDI_ssa_ccp.
+ 
+ 2002-09-18  Daniel Berlin <dberlin@dberlin.org>
+ 
+ 	* tree-dump.c: Fix order of dump files
+ 
+ 2002-09-17  Daniel Berlin <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c: Remove a lot of finding refs in statements junk.
+ 	Start on strength reduction.
+ 	Only generate simple statements.
+ 	Remove EXPR* macros in favor of inline functions.
+ 	Update comparisons and sets to 1 and 0 to true and false where
+ 	approriate.
+ 	(toplevel): Add DEBUGGING_STRRED define (temporary, for
+ 	implementation debugging, *not* useful as a dump option).
+ 	Add TODO notes.
+ 	Add global avdefs, orig_expr_map, need_repair_map,
+ 	strred_candidate.
+ 	(set_var_phis): Add struct expr_info * argument.
+ 	Update to handle injuring definitions.
+ 	(defs_y_dom_x): Ditto.
+ 	(phi_opnd_from_res): Ditto.
+ 	(phi_for_operand): Remove extra \.
+ 	(find_tree_ref_for_var): Renamed to find_use_for_var. Update all
+ 	callers.
+ 	Use orig_expr_map to lookup original expression, remove statement
+ 	searching gunk.
+ 	(find_rhs_use_for_var): New function.
+ 	(is_strred_cand): New function.
+ 	(is_injuring_def): New function.
+ 	(calculate_increment): New function.
+ 	(repair_injury): New function.
+ 	(set_need_repair): New function.
+ 	(struct expr_info): Add strred_cand member.
+ 	(rename_2): Update to handle injuring definitions.
+ 	(expr_phi_insertion): Ditto.
+ 	(code_motion): Update to repair injuries.
+ 	Only insert SIMPLE statements.
+ 	Free avdefs here now.
+ 	(finalize_1): Don't free avdefs anymore here.
+ 	(tree_perform_ssapre): Record original expresion for
+ 	find_use_for_var's benefit.
+ 	Determine strength reduction candidates.
+ 
+ 	* tree-flow.h: Remove EXPR* macros in favor of inline functions.
+ 	Remove E_INJ.
+ 
+ 	* tree-dfa.c: Change EXPR* macros to the new functions.
+ 	Remove E_INJ.
+ 
+ 2002-09-18  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (M_ADDRESSOF): Define.
+ 	(find_refs_in_expr): Create addressof-use references for ADDR_EXPR
+ 	nodes.
+ 	Don't create references for FUNCTION_DECL nodes.
+ 	(ref_type_name): Handle M_ADDRESSOF.
+ 	(validate_ref_type): Ditto.
+ 	(clobber_vars_r): Don't clobber FUNCTION_DECL nodes.
+ 	* tree-flow.h (M_ADDRESSOF): Declare.
+ 
+ 2002-09-17  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* doc/invoke.texi: Document -ftree-ssa-dce and -fdump-tree-dce.
+ 	* cp/Make-lang.in (CXX_C_OBJS): Add tree-ssa-dce.o.
+ 
+ 2002-09-17  Ben Elliston  <bje@redhat.com>
+ 
+ 	* Makefile.in (C_AND_OBJC_OBJS): Add tree-ssa-dce.o.
+ 	tree-ssa-dce.o): New target.
+ 	* tree-ssa-dce.c: New file.
+ 	* flags.h (flag_tree_ssa_dce): Declare flag.
+ 	* tree.h (tree_dump_index): Add TDI_dce.
+ 	* toplev.c (flag_tree_ssa_dce): New flag.
+ 	(f_options): Add "dump-tree-all-ssa" option.
+ 	* tree-flow.h (enum tree_flags): Add TF_NECESSARY.
+ 	* tree-dump.c (dump_files): Add dump-tree-dce option.
+ 	(dump_enable_all_ssa): Enable it when dumping all.
+ 	* tree-optimize.h (tree_ssa_eliminate_dead_code): Declare.
+ 	* tree-optimize.c (optimize_function_tree): Invoke the
+ 	optimisation pass if flag_tree_ssa_dce is set.
+ 
+ 2002-09-17  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (tree-ssa.o): Add dependency on c-tree.h
+ 	* c-simplify.c (mark_not_simple_r): Don't mark IDENTIFIER_NODEs.
+ 	* tree-dfa.c (function_may_recurse_p): Fix comment.
+ 	(dump_ref): Don't dump immediate uses for PHI nodes more than once.
+ 	(dump_referenced_vars): Unparse the name of the variable.
+ 	* tree-flow.h (dump_tree_ssa): Declare.
+ 	(debug_tree_ssa): Declare.
+ 	(replace_ref_operand_with): Check if OPERAND_P is NULL.
+ 	(restore_ref_operand): Ditto.
+ 	(tree_annotation): Check that constants, types and IDENTIFIER_NODEs
+ 	are not being annotated.
+ 	* tree-ssa.c: Include c-tree.h.
+ 	(dump_reaching_defs): Unparse the variable name.
+ 	(dump_tree_ssa): New function.
+ 	(tree_build_ssa): Call it.
+ 	(debug_tree_ssa): New function.
+ 
+ 2002-09-14  Steven Bosscher <s.bosscher@student.tudelft.nl>
+ 
+ 	* dwarf2out.c (is_fortran): Return true for
+ 	DW_LANG_Fortran95.
+ 	(gen_compile_unit_die): Return DW_LANG_Fortran95 if
+ 	language is "GNU F95".
+ 
+ 2002-09-13  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-dump.c (dump_switch_p): Get longest match, not first one.
+ 
+ 	* tree.h: Put TDI_* back in order, now that we do longest match
+ 	matching.
+ 
+ 2002-09-13  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (add_call_site_clobbers): Call decl_function_context
+ 	instead of DECL_CONTEXT.
+ 	* tree-ssa-ccp.c (initialize): Ditto.
+ 	* tree-ssa.c (analyze_rdefs): Ditto.
+ 
+ 2002-09-11  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (find_refs_in_stmt): Call clobber_vars_r to clobber
+ 	CLEANUP_STMT nodes.
+ 	(create_ref): Only add _DECL nodes to the list of referenced
+ 	variables.
+ 	(clobber_vars_r): Create a may-use reference prior to clobbering
+ 	the variable.
+ 	(add_call_site_clobbers): Ditto.
+ 	(add_ptr_may_refs): Move call to find_list_node where it's actually
+ 	needed.
+ 	* tree-flow.h: Update documentation on M_CLOBBER.
+ 
+ 2002-09-10  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (defs_match_p): Fix typo ( | -> || ).
+ 
+ 2002-09-10  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (V_PHI_ARG): Remove.  Adjust related constants.
+ 	Update all users.
+ 	(add_ref_to_list_after): Don't allocate memory for the
+ 	node when adding to the beginning or the end of the list.
+ 	(add_phi_arg): Don't call create_ref to add a new argument.
+ 	(debug_phi_args): New function.
+ 	(dump_phi_args): New function.
+ 	(dump_ref): Call it.
+ 	(dump_referenced_vars): Use 'file' instead of 'dump_file'.
+ 
+ 	* tree-flow.h (V_PHI_ARG): Remove.  Update all users.
+ 	(struct var_ref): Move fields used in distinct
+ 	reference types to other structures.  Update all users.
+ 	(struct var_def): New.
+ 	(struct var_phi): New.
+ 	(struct var_use): New.
+ 	(union tree_ref_d): Add members vdef, vphi, vuse and vphi_arg.
+ 	Update all users.
+ 	(save_chain): Remove.  Update all users.
+ 	(set_save_chain): Remove.  Update all users.
+ 	(marked_with): Remove.  Update all users.
+ 	(mark_def_with): Remove.  Update all users.
+ 	(dump_reaching_defs): Declare.
+ 	(debug_reaching_defs): Declare.
+ 
+ 	(struct phi_node_arg_d): New structure.
+ 	(phi_node_arg): New type.
+ 	(phi_arg): Change return type to phi_node_arg.
+ 	(imm_reaching_def_edge): Rename to phi_arg_edge.
+ 	(set_imm_reaching_def_edge): Rename to set_phi_arg_edge.
+ 	(phi_arg_def): New inline function.
+ 	(set_phi_arg_def): New inline function.
+ 	(debug_phi_args): Declare.
+ 	(dump_phi_args): Declare.
+ 
+ 	* tree-ssa-ccp.c: Use new phi_node_arg type when examining PHI node
+ 	arguments.
+ 
+ 	* tree-ssa-pre.c: Ditto.
+ 
+ 	* tree-ssa.c (save_chain): New local variable.
+ 	(build_fud_chains, search_fud_chains): Use it.
+ 	(marked): New local variable.
+ 	(tree_compute_rdefs, follow_chain): Use it.
+ 	(dump_reaching_defs): New function.
+ 	(debug_reaching_defs): New function.
+ 
+ 2002-09-09  Daniel Berlin <dberlin@dberlin.org>
+ 
+ 	* Makefile.in (tree-alias-steen.o): Remove gt-tree-alias-steen.h
+ 	(tree-alias-common.o): Add dependency on c-common.h
+ 
+ 	* tree-ssa-pre.c: Fix PRE now that V_USE's expr's are the entire
+ 	assignment, rather than just the right hand side.
+ 	Stop generating our own call clobbers
+ 
+ 	* tree-dfa.c (create_ref): Make sure var is not null before checking
+ 	TREE_THIS_VOLATILE.
+ 
+ 	* tree.h: Reorder TDI_* so ssapre comes before ssa.
+ 
+ 	* tree-dump.c: dump-tree-ssapre has to come before dump-tree-ssa
+ 	in the table, or else it'll never match.
+ 
+ 2002-09-09  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* tree-mudflap.c (mf_offset_expr_of_array_ref): Fold constants along
+ 	the way.
+ 	(mf_build_check_statement_for): Ditto.  Flag new COMPONENT_REFs.
+ 	(mx_xfn_indirect_ref): Instrument COMPONENT_REFs specially.  Tweak
+ 	ARRAY_REF instrumentation to reduce need of copying and recursion.
+ 
+ 2002-09-09  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa.c (analyze_rdefs): Disable uninitialized variable warnings.
+ 
+ 2002-09-09  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (tree-ssa.o): Add dependency on tree-simple.h.
+ 	(tree-dfa.o): Add dependency on tree-simple.h and tree-inline.h.
+ 	(tree-alias-steen.o): Add dependency on c-common.h.
+ 	(tree-optimize.o): Add dependency on c-common.h.
+ 
+ 	* c-simplify.c (deep_copy_node): Call walk_tree with mostly_copy_tree_r.
+ 	(mostly_copy_tree_r): Also copy flags from original tree.
+ 	(mark_not_simple_r): Call set_tree_flag.
+ 
+ 	* tree-alias-steen.c: Include c-common.h.
+ 
+ 	* tree-cfg.c (map_stmt_to_bb): Remove.
+ 	(block_invalidates_loop): Change return type to bool.
+ 	(create_loop_hdr): New function.
+ 	(create_bb): Call it.
+ 	(create_bb_ann): Return newly created annotation object.
+ 	(remove_bb_ann): Nullify loop_hdr annotation, if there is one.
+ 	(tree_delete_bb): Only remove basic block annotation from
+ 	executables statements.
+ 	(is_computed_goto): New function.
+ 
+ 	* tree-dfa.c (pointer_refs): New file local variable.
+ 	(call_sites): New global variable.
+ 	(V_DEF, V_USE, V_PHI, V_PHI_ARG, E_FCALL, E_PHI, E_USE, E_KILL,
+ 	E_INJ): New global constants.
+ 	(M_DEFAULT, M_CLOBBER, M_MAY, M_PARTIAL, M_INITIAL, M_INDIRECT,
+ 	M_VOLATILE): New global constants.
+ 	(num_referenced_vars): New global variable.
+ 	(referenced_vars): Rename from referenced_symbols.  Update all
+ 	users.
+ 	(clobber_vars_r): New function.
+ 	(add_default_defs): New function.
+ 	(add_call_site_clobbers): New function.
+ 	(add_ptr_may_refs): New function.
+ 	(add_phi_arg): New function.
+ 	(find_list_node): New function.
+ 	(remove_ref_from_list): Call it.
+ 	(add_ref_to_list_after): New function.
+ 	(is_pure_fcall): New function.
+ 	(fcall_takes_ref_args): New function.
+ 	(dump_referenced_vars): New function.
+ 	(debug_referenced_vars): New function.
+ 	(ref_type_name): New function.
+ 	(validate_ref_type): New function.
+ 	(debug_phi_args): Remove.
+ 	(dump_phi_args): Remove.
+ 	(add_referenced_var): Rename from add_ref_symbol.  Update all
+ 	users.
+ 	(dump_ref): Rename from dump_varref.  Update all users.
+ 	(debug_ref): Rename from debug_varref.  Update all users.
+ 	(dump_ref_list): Rename from dump_varref_list.  Update all users.
+ 	(dump_ref_array): Rename from dump_varref_array.  Update all users.
+ 	(next_tree_ref_id): Rename from next_varref_id.  Update all users.
+ 
+ 	(tree_find_refs): Rename from tree_find_varrefs.  Update all users.
+ 	Call add_default_defs.
+ 	Call add_call_site_clobbers.
+ 	Call add_ptr_may_refs.
+ 	Call dump_referenced_vars.
+ 	Create and destroy pointer_refs list.
+ 
+ 	(find_refs_in_stmt): Set reference type to clobbering definition
+ 	for the ASM_OUTPUTS and ASM_CLOBBERS expressions of an ASM_STMT.
+ 	Set reference type to initial definition for the DECL_INITIAL node
+ 	of a DECL_STMT.
+ 	Clobber everything in CLEANUP_STMT nodes.
+ 
+ 	(find_refs_in_expr): Re-write.
+ 	Recursively clobber every VAR_DECL contained in non SIMPLE nodes.
+ 	Mark indirect pointer references with M_INDIRECT flag.
+ 	Add pointer references to pointer_refs list.
+ 	Glob references to arrays and structures.
+ 	Add function call expressions to call_sites list.
+ 
+ 	(empty_ref_list): Do nothing if the list is empty already.
+ 	(delete_ref_list): Ditto.
+ 	(create_ref): Add new argument ADD_TO_BB.
+ 	Set M_VOLATILE modifier if this is a reference to a volatile
+ 	variable.
+ 	Count number of incoming edges for V_PHI references before
+ 	initializing the V_PHI_ARG array.
+ 	Only add reference to basic block if ADD_TO_BB is true.
+ 	Set output reference for the parent expression for V_DEF
+ 	references.
+ 	(remove_tree_ann): Do nothing if the tree didn't have an
+ 	annotation.
+ 
+ 	* tree-flow.h (enum treeref_type): Remove.  Update all users.
+ 	(union varref_def): Ditto.
+ 	(tree_ref): Rename from varref.  Update all users.
+ 	(V_DEF): Declare.
+ 	(V_USE): Declare.
+ 	(V_PHI): Declare.
+ 	(V_PHI_ARG): Declare.
+ 	(E_FCALL): Declare.
+ 	(E_PHI): Declare.
+ 	(E_USE): Declare.
+ 	(E_KILL): Declare.
+ 	(E_INJ): Declare.
+ 	(M_DEFAULT): Declare.
+ 	(M_CLOBBER): Declare.
+ 	(M_MAY): Declare.
+ 	(M_PARTIAL): Declare.
+ 	(M_INITIAL): Declare.
+ 	(M_INDIRECT): Declare.
+ 	(M_VOLATILE): Declare.
+ 	(struct tree_ref_common): Rename from treeref_common.  Update all
+ 	users.
+ 	Change type of field 'type' to HOST_WIDE_INT.
+ 	Rename field 'sym' to 'var'.
+ 	(struct var_ref): Rename from varref.  Update all users.
+ 	Join the structures varuse
+ 	and vardef into a single structure.
+ 	(struct expr_ref_common): Rename from exprref_common.  Update all
+ 	users.
+ 	(struct expr_use): Rename from expruse.  Update all users.
+ 	(struct expr_phi): Rename from exprphi.  Update all users.
+ 	(union tree_ref_d): Rename from varref_def.  Update all users.
+ 	(EXPRPHI_PHI_ARGS): Rename from EXPRPHI_PHI_CHAIN.  Update all
+ 	users.
+ 	(struct tree_ann_d): Rename field 'compound_stmt' to
+ 	'compound_parent'.
+ 	Add field 'output_ref'.
+ 	(enum tree_flags): New enum.
+ 	(TF_REFERENCED): New flag.
+ 	(phi_arg): Remove.
+ 	(get_num_phi_args): Remove.
+ 	(get_phi_arg): Remove.
+ 
+ 	(struct vardef): Remove.  Update all users.
+ 	(VARDEF_IMM_USES): Ditto.
+ 	(VARDEF_SAVE_CHAIN): Ditto.
+ 	(VARDEF_RUSES): Ditto.
+ 	(VARDEF_MARKED): Ditto.
+ 	(VARDEF_PHI_ARGS): Ditto.
+ 	(struct varuse): Ditto.
+ 	(VARUSE_IMM_RDEF): Ditto.
+ 	(VARUSE_RDEFS): Ditto.
+ 	(VARREF_ID): Ditto.
+ 	(VARREF_TYPE): Ditto.
+ 	(VARREF_BB): Ditto.
+ 	(VARREF_EXPR): Ditto.
+ 	(VARREF_OPERAND_P): Ditto.
+ 	(VARREF_STMT): Ditto.
+ 	(VARREF_SYM): Ditto.
+ 	(IS_DEFAULT_DEF): Ditto.
+ 	(IS_ARTIFICIAL_REF): Ditto.
+ 	(TREE_ANN): Ditto.
+ 	(BB_FOR_STMT): Ditto.
+ 	(TREE_CURRDEF): Ditto.
+ 	(TREE_REFS): Ditto.
+ 	(TREE_COMPOUND_STMT): Ditto.
+ 	(TREE_FLAGS): Ditto.
+ 	(BB_ANN): Ditto.
+ 	(BB_PARENT): Ditto.
+ 	(BB_REFS): Ditto.
+ 	(BB_PREV_CHAIN_P): Ditto.
+ 	(BB_BINDING_SCOPE): Ditto.
+ 	(BB_LOOP_HDR): Ditto.
+ 	(FOR_INIT_STMT_BB): Ditto.
+ 	(FOR_COND_BB): Ditto.
+ 	(FOR_EXPR_BB): Ditto.
+ 	(END_WHILE_BB): Ditto.
+ 	(DO_COND_BB): Ditto.
+ 	(BB_EMPTY_P): Ditto.
+ 
+ 	(ref_type): New inline function.
+ 	(ref_var): New inline function.
+ 	(ref_stmt): New inline function.
+ 	(ref_expr): New inline function.
+ 	(ref_bb): New inline function.
+ 	(ref_id): New inline function.
+ 	(replace_ref_operand_with): New inline function.
+ 	(restore_ref_operand): New inline function.
+ 	(imm_uses): New inline function.
+ 	(save_chain): New inline function.
+ 	(set_save_chain): New inline function.
+ 	(reached_uses): New inline function.
+ 	(marked_with): New inline function.
+ 	(mark_def_with): New inline function.
+ 	(phi_args): New inline function.
+ 	(num_phi_args): New inline function.
+ 	(phi_arg): New inline function.
+ 	(imm_reaching_def): New inline function.
+ 	(set_imm_reaching_def): New inline function.
+ 	(imm_reaching_def_edge): New inline function.
+ 	(set_imm_reaching_def_edge): New inline function.
+ 	(reaching_defs): New inline function.
+ 	(tree_annotation): New inline function.
+ 	(has_annotation): New inline function.
+ 	(bb_for_stmt): New inline function.
+ 	(set_bb_for_stmt): New inline function.
+ 	(currdef_for): New inline function.
+ 	(set_currdef_for): New inline function.
+ 	(tree_refs): New inline function.
+ 	(add_tree_ref): New inline function.
+ 	(remove_tree_ref): New inline function.
+ 	(compound_parent): New inline function.
+ 	(set_compound_parent): New inline function.
+ 	(set_tree_flag): New inline function.
+ 	(clear_tree_flag): New inline function.
+ 	(tree_flags): New inline function.
+ 	(reset_tree_flags): New inline function.
+ 	(output_ref): New inline function.
+ 	(set_output_ref): New inline function.
+ 	(bb_annotation): New inline function.
+ 	(bb_parent): New inline function.
+ 	(set_bb_parent): New inline function.
+ 	(bb_refs): New inline function.
+ 	(remove_bb_ref): New inline function.
+ 	(prev_chain_p): New inline function.
+ 	(set_prev_chain_p): New inline function.
+ 	(binding_scope): New inline function.
+ 	(set_binding_scope): New inline function.
+ 	(header_blocks): New inline function.
+ 	(for_init_bb): New inline function.
+ 	(set_for_init_bb): New inline function.
+ 	(for_cond_bb): New inline function.
+ 	(set_for_cond_bb): New inline function.
+ 	(for_expr_bb): New inline function.
+ 	(set_for_expr_bb): New inline function.
+ 	(end_while_bb): New inline function.
+ 	(set_end_while_bb): New inline function.
+ 	(do_cond_bb): New inline function.
+ 	(set_do_cond_bb): New inline function.
+ 	(bb_empty_p): New inline function.
+ 
+ 	(referenced_vars): Rename from referenced_symbols.  Update all
+ 	users.
+ 	(num_referenced_vars): Declare.
+ 	(NREF_SYMBOLS): Remove.  Update all users.
+ 	(REF_SYMBOL): Ditto.
+ 	(ADD_REF_SYMBOL): Ditto.
+ 	(referenced_var): New inline function.
+ 	(call_sites): Declare.
+ 	(next_tree_ref_id): Rename from next_varref_id.  Update all users.
+ 	(is_computed_goto): Declare.
+ 	(is_pure_fcall): Declare.
+ 	(fcall_takes_ref_args): Declare.
+ 	(add_ref_to_list_after): Declare.
+ 	(find_list_node): Declare.
+ 	(ref_type_name): Declare.
+ 	(validate_ref_type): Declare.
+ 
+ 	* tree-optimize.c: Include c-common.h.
+ 	(optimize_function_tree): Store DECL_SAVED_TREE in a local
+ 	variable.
+ 
+ 	* tree-ssa-ccp.c (cp_lattice_meet): New function.
+ 	(visit_phi_node): Call it.
+ 	(add_outgoing_control_edges): New function.
+ 	(visit_expression_for): Call it.
+ 	Don't handle static initializers.
+ 	Handle computed gotos.
+ 	(add_control_edge): New function.
+ 	(visit_condexpr_for, simulate_block, add_outgoing_control_edges): Call
+ 	it.
+ 	(simulate_def_use_chains): Only look at unmodified V_USE references.
+ 	(ssa_ccp_substitute_constants): Ditto.
+ 	(evaluate_expr): Ditto.
+ 	(initialize): Set initial value for incoming parameters and globals
+ 	to VARYING.
+ 	Set initial value for initialized static variables to VARYING,
+ 	unless the variable is read-only.
+ 	(set_lattice_value): Don't special case globals, volatiles and
+ 	variables with their address taken.
+ 
+ 	* tree-ssa.c: Include tree-simple.h.
+ 	(tree_build_ssa): Don't add default definitions.
+ 	(insert_phi_terms): Add new PHI nodes at the beginning of the list
+ 	of references for the basic block.
+ 	(search_fud_chains): Add def-def chains for non-killing
+ 	definitions.
+ 	(delete_ssa): Remove list call_sites.
+ 	Set num_referenced_vars to 0.
+ 	Set referenced_vars to NULL.
+ 	(follow_chain): Follow def-def chains for non-killing definitions.
+ 	(is_upward_exposed): Change return type to bool.
+ 	(add_phi_arg): Remove.
+ 
+ 2002-09-06  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* tree-mudflap.c (deferred_static_decl*): Correct GTY markup.
+ 	(mudflap_enqueue_decl): Correct iteration bounds.
+ 	(mf_init_extern_trees): Add more constness to mf_cache_structptr_type.
+ 	(mf_offset_expr_of_array_ref): Remove excess mx_flagging.  save_expr
+ 	array subscripts.
+ 	(mf_build_check_statement_for): Reorganize to take explicit
+ 	check-base/size arguments, in addition to value argument.  save_expr
+ 	array subscripts.  Copy value/base/size subtrees.
+ 	(mx_xfn_indirect_ref): Support marking of subtrees for nontraversal.
+ 	Track source line numbers more aggressively.  For arrays, check bounds
+ 	from base through indexed element, not just the indexed element.
+ 	Use nontraversal flagging to eliminate some excess instrumentation.
+ 	(mf_xform_derefs): Support nontraversal by a hash table.
+ 	(*): Remove "{{{"/"}}}" folding marks.
+ 
+ 2002-09-02  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-alias-common.[ch]: New files.
+ 	* tree-alias-steen.[ch]: Split out common stuff into
+ 	tree-alias-common.[ch].
+ 	* c-config-lang.in: Modify to use tree-alias-common.[ch] instead of
+ 	tree-alias-steen, since this is where the GTY'd stuff is now.
+ 	* Makefile.in: Add dependencies for tree-alias-common.[ch].
+ 
+ 2002-09-03  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-simplify.c (simplify_goto_stmt): New function.
+ 	(simplify_stmt): Call it.
+ 	* tree-simple.c: Document grammar for GOTO_STMT nodes.
+ 	(rationalize_compound_expr): Wrap it with #if 0/#endif.
+ 	(get_base_symbol): Minor comment fixup.
+ 
+ 2002-09-03  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* gcc.c (MFWRAP_SPEC): Add --wrap=alloca.
+ 
+ 2002-09-01  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-simplify.c (simplify_stmt): Mark CLEANUP_STMTs and ASM_STMTs
+ 	not SIMPLE.
+ 	(simplify_for_stmt): Do not allow expression sequences in
+ 	FOR_INIT_STMT and FOR_EXPR nodes.
+ 	* tree-simple.c: Document difference with original SIMPLE grammar.
+ 
+ 2002-08-31  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* tree-mudflap.c (mf_build_check_statement_for): Tolerate dereference
+ 	of void pointers.
+ 	(mx_register_decl): Correct typo in below patch.
+ 
+ 2002-08-30  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* tree-mudflap.c (mx_register_decl): Mark declarations as
+ 	TREE_ADDRESSABLE when mudflap decides to register them.
+ 
+ 2002-08-29  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* tree-mudflap.c (mx_xfn_indirect_ref): Rewrite array references as
+ 	pointer dereferences.
+ 	(struct mf_xform_decls_data): New member: param_decls.
+ 	(mx_register_decl): New function.
+ 	(mx_xfn_xform_decls): Factor code out into mx_register_decl.
+ 	Register live parameters with mudflap.
+ 	(mx_xfn_find_addrof): Notice references to fields of structures
+ 	and function parameters.
+ 
+ 2002-08-29  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* c-pretty-print.c (dump_c_tree): Detect loops in statement chains
+ 	using a hash table to track visited status.
+ 	* Makefile.in: Add hashtab.h dependency.
+ 
+ 2002-08-28  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* tree-mudflap.c (mudflap_enqueue_constant): Register non-string
+ 	constants also.
+ 	(mf_build_check_statement_for): Include pushlevel/pushdecl/poplevel
+ 	for local variables.
+ 
+ 2002-08-27  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	Better static registration:
+ 	* varasm.c (make_decl_rtl): Handle DECL_RTL_SET_P case for
+ 	mudflap static registration.
+ 	* tree-mudflap.c (mudflap_enqueue_decl): Rewrite to handle
+ 	deferred statics.
+ 	(mudflap_finish_file): Call above fn back for deferred statics.
+ 
+ 	Cleanup:
+ 	* tree-mudflap.c (mf_varname_tree, mf_file_function_line_tree):
+ 	Reorganize output_buffer reuse mechanism.
+ 	(mf_build_check_statement_for): Set TREE_SIDE_EFFECTS.
+ 	(mx_xfn_indirect_ref): Correct file/line collection tests.
+ 
+ 	Dynamic linking support:
+ 	* gcc.c (MFWRAP_SPEC): Make conditional on -static.  Add the
+ 	newer wrapped functions dlopen/mmap/munmap.
+ 	(MFLIB_SPEC): Be sensitive to -static.  Partial support for
+ 	dynamic linking.
+ 
+ 2002-08-26  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (tree-ssa.o): Add dependency on ggc.h
+ 	(c-simplify.o): Add dependency on langhooks-def.h
+ 	* c-simplify.c: Include langhooks-def.h
+ 	(simplify_function_tree): Do nothing if the front end does not
+ 	support simplification.
+ 
+ 	* tree-flow.h (struct vardef): Remove fields 'phi_chain' and
+ 	'phi_chain_bb'.
+ 	Add field 'phi_args'.
+ 	(VARDEF_PHI_CHAIN): Remove.  Update all users.
+ 	(VARDEF_PHI_CHAIN_BB): Remove.  Update all users.
+ 	(VARDEF_PHI_ARGS): Define.
+ 	(struct varuse): Rename field 'chain' to 'imm_rdef'.  Update all
+ 	users.
+ 	(VARUSE_IMM_RDEF):  Rename from VARUSE_CHAIN.  Update all users.
+ 	(phi_arg): New structure.
+ 	(get_num_phi_args): New function.
+ 	(get_phi_arg): New function.
+ 	(set_phi_arg): New function.
+ 	(add_phi_arg): New function.
+ 	(debug_phi_args): Declare.
+ 	(dump_phi_args): Declare.
+ 	* tree-dfa.c (create_ref): Remove initialization of
+ 	VARDEF_PHI_CHAIN and VARDEF_PHI_CHAIN_BB.
+ 	Initialize array VARDEF_PHI_ARGS.
+ 	(dump_varref): Call dump_phi_args.
+ 	(dump_phi_args): New function.
+ 	(debug_phi_args): New function.
+ 	* tree-ssa-ccp.c (PHI_PARMS): Remove.
+ 	(EIE): Remove.
+ 	(visit_phi_node): Get the argument's edge directly from the
+ 	argument instead of calling find_edge.
+ 	(initialize): Cast call to NUM_EDGES to unsigned.
+ 	* tree-ssa-pre.c: Update uses of VARDEF_PHI_CHAIN,
+ 	VARDEF_PHI_CHAIN_BB and VARUSE_CHAIN everywhere.
+ 	* tree-ssa.c: Ditto.
+ 	Include ggc.h.
+ 	(search_fud_chains): Call add_phi_arg to add arguments to each PHI
+ 	node.
+ 	(tree_ssa_remove_phi_alternative): Call set_phi_arg to switch the
+ 	last element with the element being removed.
+ 
+ 2002-08-26  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-simplify.c (mostly_copy_tree_r): Unshare STMT_EXPR
+ 	nodes.
+ 
+ 2002-08-25  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (find_refs_in_stmt): Replace calls to
+ 	RETURN_EXPR with RETURN_STMT_EXPR.
+ 	* c-simplify.c (simplify_return_stmt): Ditto.
+ 	(deep_copy_node): Ditto.
+ 	* c-pretty-print.c (dump_c_node): Ditto.
+ 
+ 2002-08-24  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-pretty-print.c: Add `break' after calls to NIY in
+ 	switch statements.
+ 
+ 2002-08-23  Jeffrey A Law  (law@redhat.com)
+ 
+ 	* tree-ssa-ccp.c (tree_ssa_ccp): Remove #if 0 that accidentally
+ 	got checked in.  Cleanup the cfg to remove unreachable blocks
+ 	discovered by CCP.
+ 
+ 	* basic-block.h (EDGE_EXECUTABLE): New edge flag.
+ 
+ 	* cfganal.c (find_edge): New function.
+ 
+ 	* ssa-ccp.c: Convert to use EDGE_EXECUTABLE bit in the
+ 	edge flags rather than a bitmap.  Convert edge worklist
+ 	into a varray.  Avoids expensive find_index_edge calls.
+ 	* tree-ssa-ccp.c: Likewise.
+ 
+ 	* tree-flow.h (tree_ssa_remove_phi_alternative): Declare.
+ 	* tree-ssa.c (tree_ssa_remove_phi_alternative): New function.
+ 	* tree-ssa-ccp.c (optimize_unexecutable_edges): Remove
+ 	PHI alternatives for unexecutable edges.  Also remove
+ 	unexecutable edges from the CFG.
+ 
+ 2002-08-22  Jeffrey A Law  (law@redhat.com)
+ 
+ 	* Makefile.in (tree-optimize.o): Depend on tree-dchain.o
+ 	* tree-optimize.c: Include tree-dchain.h.
+ 	(optimize_function_tree): Unconditionally build and tear down
+ 	the backpointers for the statement chain.
+ 
+ 2002-08-22  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (find_refs_in_stmt): Look for VARUSE references in
+ 	initialization expressions.
+ 	(find_refs_in_expr): Reformat.
+ 	(remove_ref_from_list): Optimize for the common case of removing
+ 	the head or the tail of the list.
+ 	(add_ref_to_list_end): Reformat comment.
+ 	(create_ref): Store the reference to LHS of assignment expressions.
+ 	(dump_varref): Also dump immediate uses of PHI nodes.
+ 	* tree-flow.h (IS_GHOST_DEF): Rename to IS_DEFAULT_DEF.  Update all
+ 	callers everywhere.
+ 	(struct tree_ann_def): Update comments for field 'currdef'.
+ 	* tree-ssa-ccp.c (ssa_edges): Change type to ref_list.
+ 	(SSA_NAME): Remove.
+ 	(initialize): New function
+ 	(finalize): New function.
+ 	(visit_expression): Rename to visit_expression_for.  Update all
+ 	callers.
+ 	(visit_condexpr_for): New function.
+ 	(visit_assignment): Rename to visit_assignment_for.  Update all
+ 	callers.
+ 	(examine_flow_edges): Rename to simulate_block.  Update all
+ 	callers.
+ 	(follow_def_use_chains): Rename to simulate_def_use_chains.  Update
+ 	all callers.
+ 	(evaluate_expr_for): Rename to evaluate_expr.  Change argument to
+ 	'tree'.
+ 	(set_lattice_value): New function.
+ 	(tree_ssa_ccp): Change main loop to visit flow_edges and ssa_edges
+ 	alternately.
+ 	(visit_phi_node): Do not set the lattice value to UNDEFINED when we
+ 	find a non-executable edge.
+ 	(visit_expression_for): Default definitions for PARM_DECLs are
+ 	assigned a VARYING value.
+ 	Default definitions for any other local variables are assigned an
+ 	UNDEFINED value.
+ 	Clobber VARDEFs that are not the LHS of an assignment.
+ 	Clobber VARDEFs that initialize non-const static variables.
+ 	* tree-ssa.c (search_fud_chains): Set up def-use edges for PHI
+ 	nodes and regular definitions.
+ 
+ 	* tree.c (simple_cst_equal): Call simple_cst_list_equal to compare
+ 	CONSTRUCTOR_ELTS pointers.
+ 
+ 2002-08-22  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-pretty-print.c (buffer): New file local variable.
+ 	(initialized): New file local variable.
+ 	(print_c_tree): Don't call init_output_buffer.  Call
+ 	maybe_init_pretty_print.
+ 	(print_c_node): Ditto.
+ 	(print_c_node_brief): Ditto.
+ 	(maybe_init_pretty_print): New function.
+ 	* tree-mudflap.c (mf_varname_tree): Only call init_output_buffer
+ 	once.  Call output_clear_message_text before returning.
+ 
+ 2002-08-21  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	Support source-file/line coordinates in check/violation messages.
+ 	* tree-mudflap.c (mf_init_extern_trees): Add new "location" formal
+ 	arg to __mf_check.
+ 	(mf_file_function_line_tree): New function to build an actual location
+ 	string.
+ 	(build_check_statement_for): Call it / pass it.
+ 	(mx_xfn_indirect_ref): Track source file/line location via
+ 	STMT_LINENO, FILE_STMT, EXPR_WITH_FILE_LOCATION traversal memos.
+ 
+ 2002-08-21  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* dominance.c: Cache immediate dominators.
+ 
+ 2002-08-20  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-alias-steen.h (struct tree_alias_ops): Add flag for
+ 	interprocedural.
+ 
+ 	* tree-alias-steen.c (steen_alias_ops): Set interprocedural to 0
+ 	for now.
+ 	(intra_function_call): New function to handle intraprocedural calling.
+ 	(finc_func_aliases): Use it.
+ 	Handle *x = *y, *x = &y, and *x = (cast) y.
+ 	(display_points_to_set_helper): New function, split from ...
+ 	(display_points_to_set): Here.
+ 	(create_alias_vars): Try to print all alias vars we find in the
+ 	alias_vars array, rather than just those that are linked directly to
+ 	trees.
+ 	Clear arrays when we finish if we aren't interprocedural.
+ 
+ 2002-08-20  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	static object registration support:
+ 	* tree-mudflap.c (mudflap_enqueue_decl, mudflap_enqueue_constant):
+ 	Replace stubs with real code.
+ 	(mf_enqueue_register_call): New function to generate asm-object
+ 	call to __mf_register.
+ 	(mf_flush_enqueued_calls): New function to emit global ctor function
+ 	with enqueued __mf_register calls.
+ 	(mf_varname_tree): Tolerate being called from non-function context.
+ 	* c-objc-common.c: #include <tree-mudflap.h>.
+ 
+ 	gengtypes support for mudflap:
+ 	* Makefile.in (GTFILES): Include tree-mudflap.c.
+ 	(gt-tree-mudflap.h): New target.
+ 	* tree-mudflap.c: Annotate global tree nodes with GTY(()).
+ 	* tree-nomudflap.c: Add dummy ggc root table.
+ 
+ 2002-08-19  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (find_refs_in_expr): If the current sub-expression is
+ 	not SIMPLE, mark its parent.
+ 	(create_ref): If the parent expression is not SIMPLE, create
+ 	VARDEFs regardless of the original reference type.
+ 
+ 	* tree-ssa-ccp.c (widen_bitfield): New function.
+ 	(evaluate_expr_for): Call it.
+ 
+ 2002-08-18  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-ccp.c (evaluate_expr_for): Fix thinko in
+ 	2002-08-17 patch.
+ 
+ 2002-08-17  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa-ccp.c (evaluate_expr_for): keep VARREF_SYM in a local
+ 	variable.
+ 
+ 2002-08-16  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* basic-block.h (BB_CONTROL_EXPR): Update value.
+ 	(BB_LOOP_CONTROL_EXPR): Define.
+ 	(BB_CONTROL_ENTRY): Update value.
+ 	* tree-cfg.c (make_for_stmt_blocks): Flag header blocks withh
+ 	BB_LOOP_CONTROL_EXPR.
+ 	(make_while_stmt_blocks): Ditto.
+ 	(make_do_stmt_blocks): Ditto.
+ 	(tree_delete_bb): Update annotations in the loop entry block when
+ 	removing one of the loop expression blocks.
+ 
+ 	* tree-dfa.c (tree_find_varrefs): Disregard empty blocks.
+ 	(find_refs_in_stmt): Handle all the loop expression blocks in
+ 	FOR_STMT and DO_STMT nodes.
+ 	(find_refs_in_expr): Change first argument to tree *.  Update all
+ 	callers.
+ 	Force all references to be definitions when the expression is not
+ 	in SIMPLE form.
+ 	Also create references for compound variables and array references.
+ 	Not just their individual components.
+ 	Always use the original parent expression when making recursive
+ 	calls.
+ 	(create_ref): Add new argument operand_p.  Update all callers.
+ 	(remove_tree_ann): New function.
+ 	(dump_varref): Don't assume that the referenced symbol is a _DECL
+ 	node.
+ 	* tree-flow.h (treeref_common): Add field operand_p.
+ 	(VARREF_OPERAND_P): Define.
+ 	(BB_EMPTY_P): Define.
+ 	(remove_tree_ann): Declare.
+ 	(create_ref): Add new argument operand_p.
+ 	* tree-simple.c (get_base_symbol): New function.
+ 	* tree-simple.h (get_base_symbol): Declare.
+ 	* tree-ssa-ccp.c (visit_assignment): Call it.
+ 	(ssa_ccp_substitute_constants): Use VARREF_OPERAND_P to replace
+ 	values into the expression.
+ 	(evaluate_expr_for): Ditto.
+ 	Do not try to evaluate the expression if the reference is not of
+ 	the same type as the expression.
+ 	After evaluation, restore the expression to its original form.
+ 	* tree-ssa-pre.c (insert_occ_in_preorder_dt_order_): Update calls
+ 	to create_ref.
+ 	(finalize_): Ditto.
+ 	(expr_phi_insertion): Ditto.
+ 	* tree-ssa.c (tree_build_ssa): Ditto.
+ 	(insert_phi_terms): Ditto.
+ 	(delete_ssa): Call remove_tree_ann.
+ 
+ 2002-08-15  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-pretty-print.c: Move extern definitions to diagnostic.h.
+ 	(print_c_node_brief): New function.
+ 	(debug_c_node_brief): New function.
+ 	(debug_c_node): Add option for showing brief versions of statement
+ 	nodes.  Update all callers.
+ 	(print_declaration): Ditto.
+ 	* c-simplify.c (simplify_function_tree): Add newline to debug
+ 	output.
+ 	* c-tree.h (print_c_node_brief): Declare.
+ 	(debug_c_node_brief): Declare.
+ 	* tree-cfg.c: Call print_c_node_brief in debugging otuput.
+ 	* tree-mudflap.c (dump_c_node): Remove extern declaration.
+ 	(mf_varname_tree): Update call to dump_c_node.
+ 
+ 2002-08-15  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-cfg.c (find_expr_in_tree_helper): Renamed from find_expr_in_tree.
+ 	(find_expr_in_tree): Redone.
+ 
+ 2002-08-15  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-cfg.c (insert_before_ctrl_stmt): Fix insertion for various
+ 	parts of for loop.
+ 
+ 	* tree-ssa-pre.c (finalize_1): Set EXPR_STMT type to type of
+ 	expression in it.
+ 
+ 2002-08-14  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* gcc.c (LINK_COMMAND_SPEC): Tweak placement of %(mflib).
+ 
+ 2002-08-14  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-simple.h (is_simple_decl_stmt): Declare.
+ 
+ 2002-08-13  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* gcc.c (MFWRAP_SPEC, MFLIB_SPEC): New macros, splitting MFLIB_SPEC.
+ 	(mfwrap_spec, mflib_spec): Define corresponding vars.
+ 	(static_specs): Define correponding spec aliases.
+ 	(LINK_COMMAND_SPEC): Include -fmudflap refs to new spec aliases.
+ 	(cpp_unique_options): Move -fmudflap MFCPP_SPEC clause here.
+ 	(cc1_options): Move -fmudflap MFCC1_SPEC clause here.
+ 	(MFCC1_SPEC, MFCPP_SPEC, MFLIB_SPEC): Remove macros and uses.
+ 
+ 2002-08-13  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* tree-mudflap.c (mf_build_check_statement_for): Factor code out of
+ 	mx_xfn_indirect_ref for use in ARRAY_REF case.
+ 	(mf_build_check_statement_for): Check size of underlying object
+ 	rather than size of pointer.
+ 	(mx_xfn_indirect_ref): Check ARRAY_REF expressions.
+ 	(mf_offset_expr_of_array_ref): New function to calculate array ref
+ 	offsets.
+ 
+ 2002-08-13  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-simple.c (is_simple_condexpr): Update comment.
+ 	* tree-ssa-ccp.c (ssa_ccp_substitute_constants): Add debugging code.
+ 
+ 2002-08-12  Jason Merrill  <jason@redhat.com>
+ 
+ 	* c-typeck.c (build_component_ref): Don't add a NON_LVALUE_EXPR
+ 	in C99 mode.
+ 
+ 	* c-simplify.c (simplify_expr): Always simplify.  Loop if *expr_p
+ 	changed.
+ 	(simplify_addr_expr): Just replace *expr_p if we have a '&*'.
+ 	* tree-simple.c (is_simplifiable_builtin): Add more tree codes.
+ 
+ 2002-08-11  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-simplify.c: Fix typo.  Substitute CHECKING with ENABLE_CHECKING.
+ 	* tree-cfg.c: Ditto.
+ 	* tree-dfa.c: Ditto.
+ 	* tree-ssa-ccp.c: Ditto.
+ 	* tree-ssa.c: Ditto.
+ 
+ 2002-08-11  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (find_refs_in_expr): Use the given ref_type for some unary
+ 	expressions.
+ 	(create_ref): Insert ghost definitions at the beginning of the
+ 	basic block.
+ 	(find_expr_in_tree): Ignore IDENTIFIER_NODE.
+ 	* tree-flow.h (treeref_common): Move the id field to the end of the
+ 	structure.
+ 	(IS_GHOST_DEF): Redefine to return non zero for definitions
+ 	without an associated expression in basic block 0.
+ 	* tree-ssa-ccp.c (tree_ssa_ccp): Use last_basic_block to allocate
+ 	executable_blocks.
+ 	(visit_expression): Set the lattice value for ghost definitions to
+ 	VARYING.
+ 	(examine_flow_edges): Update comments.
+ 	* tree-ssa.c (tree_build_ssa): Create ghost definitions in basic
+ 	block 0.
+ 	(insert_phi_terms): Don't ignore ghost definitions.
+ 
+ 	* c-simplify.c (simplify_function_tree): Return 0 if the function's
+ 	body is not a COMPOUND_STMT.
+ 	Return 0 if simplification failed.
+ 	(simplify_expr): Change to return int.  Return non zero if
+ 	simplification was successful.
+ 	(c_simplify_expr): Add default case to avoid compile time warnings.
+ 	(create_tmp_alias_var): Reformat comment.
+ 	* tree-simple.h (simplify_expr): Change return type to int.
+ 
+ 	* c-simplify.c: Guard consistency checks with #if defined CHECKING
+ 	everywhere.
+ 	* tree-cfg.c: Ditto.
+ 	* tree-dfa.c: Ditto.
+ 	* tree-ssa-ccp.c: Ditto.
+ 	* tree-ssa.c: Ditto.
+ 
+ 	* c-simplify.c: Include hard-reg-set.h, basic-block.h and
+ 	tree-flow.h.
+ 	(mark_not_simple_r): New function.
+ 	(simplify_expr): Temporarily mark VA_ARG_EXPR and BIT_FIELD_REF
+ 	trees as not simplifiable.
+ 	(simplify_call_expr): If the builtin cannot be simplified, flag it.
+ 	* Makefile.in (c-simplify.o): Update dependencies.
+ 	* tree-dfa.c (create_ref): Variable references inside
+ 	non-simplifiable expressions are always considered definitions.
+ 	* tree-flow.h (TF_NOT_SIMPLE): New flag.
+ 	* tree-simple.c (is_simplifiable_builtin): Update comments.
+ 
+ 	* c-pretty-print.c (dump_c_node): Unparse anonymous structures and
+ 	unions.
+ 	Change rendering for SAVE_EXPR and BIT_FIELD_REF.
+ 
+ 	* Makefile.in (tree-mudflap.o, tree-nomudflap.o): Add.
+ 
+ 2002-08-11  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	Prototype -fmudflap support.
+ 	* Makefile.in (C_AND_OBJC_OBJS): Add tree-mudflap.o.
+ 	(OBJS): Add tree-nomudflap.o.
+ 	* flags.h (flag_mudflap): New flag.
+ 	* toplev.c: Map "-fmudflap" to that flag.
+ 	* c-decl.c (c_expand_body): Call mudflap_c_function if flag_mudflap.
+ 	* c-objc-common.c (c_objc_common_finish_file): Add mudflap hook.
+ 	* varasm.c (make_decl_rtl): Add mudflap hook.
+ 	(output_constant_def_contents): Ditto.
+ 	* tree-mudflap.c: New file: implement mudflap instrumentation.
+ 	* tree-nomudflap.c: New file: stub functions for non-C frontends.
+ 	* tree-mudflap.h: New file: define exported functions.
+ 	* gcc.c (MFLIB_SPEC, MFCC1_SPEC, MFCPP_SPEC): Add general
+ 	-fmudflap spec mappings.
+ 	* c-simplify.c (simplify_stmt): Stub: handle CLEANUP_STMT nodes.
+ 	* tree-dfa.c (find_refs_in_stmt): Ditto.
+ 	* c-pretty-print.c (dump_c_node): Ditto.
+ 	(print_declaration): Handle "extern" decls.  Handle arrays with
+ 	indefinite sizes.
+ 	* tree-simple.h (is_simple_stmt, is_simple_compstmt): Remove decls.
+ 
+ 2002-08-11  Jason Merrill  <jason@redhat.com>
+ 
+ 	* c-simplify.c (simplify_self_mod_expr): Unshare the lhs before
+ 	using it again.
+ 	(simplify_compound_lval): Don't unshare.
+ 
+ 	* c-simplify.c (c_simplify_expr): Check statement_code_p.
+ 
+ 	* c-simplify.c (maybe_fixup_loop_cond): Move to cp/cp-simplify.c.
+ 	(simplify_for_stmt): Don't call it.
+ 	(simplify_while_stmt): Don't call it.
+ 
+ 2002-08-11  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-simplify.c (simplify_compound_lval): Use mostly_copy_tree_r.
+ 
+ 2002-08-09  Jason Merrill  <jason@redhat.com>
+ 
+ 	* langhooks-def.h: Replace the simplify_function_tree hook
+ 	with a simplify_expr hook.
+ 	* langhooks.h: Likewise.
+ 	* langhooks.c: Replace lhd_simplify_function_tree with
+ 	lhd_simplify_expr.
+ 	* c-lang.c (LANG_HOOKS_SIMPLIFY_FUNCTION_TREE): Don't define.
+ 	(LANG_HOOKS_SIMPLIFY_EXPR): Define.
+ 	* c-decl.c (c_expand_body): De-hook simplify_function_tree.
+ 	* c-common.h: Declare c_simplify_expr.
+ 	* c-simplify.c (simplify_function_tree): Rename from
+ 	c_simplify_function_tree.  Call simplify_expr instead of
+ 	simplify_stmt.
+ 	(c_simplify_expr): Split out from...
+ 	(simplify_expr): ...here.  No longer static.  Call langhook.
+ 	(is_simple_decl_stmt): Move here from tree-simple.c.
+ 	* tree-simple.c: Don't include c-tree.h.
+ 	(is_simple_stmt, is_simple_compstmt): Remove.
+ 	(is_simple_decl_stmt): Move to c-simplify.c.
+ 	* tree.h: Declare simplify_function_tree.
+ 	* tree-simple.h: Declare simplify_expr, add_tree.
+ 
+ 	* tree-simple.c (rationalize_compound_expr): New fn.
+ 
+ 2002-08-07  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* basic-block.h (EDGE_TRUE_VALUE): Define.
+ 	(EDGE_FALSE_VALUE): Define.
+ 	* tree-cfg.c: Include c-tree.h.
+ 	(make_for_stmt_edges): Call simple_cst_equal to determine infinite
+ 	and zero iteration loops.
+ 	Set EDGE_TRUE_VALUE and EDGE_FALSE_VALUE to edges coming out of
+ 	predicate block.
+ 	(make_while_stmt_edges): Ditto.
+ 	(make_do_stmt_edges): Ditto.
+ 	(make_if_stmt_edges): Set EDGE_TRUE_VALUE and EDGE_FALSE_VALUE to
+ 	edges coming out of predicate block.
+ 
+ 	* c-simplify.c (simplify_compound_lval): Unshare the compound
+ 	reference before simplification.
+ 
+ 	* tree-cfg.c (insert_before_ctrl_stmt): Call print_c_node instead of
+ 	print_node_brief.
+ 	(insert_before_normal_stmt): Ditto.
+ 	(insert_after_ctrl_stmt): Ditto.
+ 	(insert_after_normal_stmt): Ditto.
+ 	(insert_after_loop_body): Ditto.
+ 	(replace_expr_in_tree): Ditto.
+ 	(tree_dump_bb): Ditto.
+ 
+ 	* tree-dfa.c: Include c-tree.h
+ 	(next_varref_id): New global variable.
+ 	(tree_find_varrefs): Initialize it to 0.
+ 	(create_ref): Increment it after creating a new reference.  Store
+ 	it in ref.common.id.
+ 	Add the new reference to the list of references for the containing
+ 	expression.
+ 	(dump_varref): Show the reference ID.
+ 	* tree-flow.h (treeref_common): Add field 'id'.
+ 	(VARREF_ID): Define.
+ 
+ 	* tree-dump.c (dump_files): Re-order dump files.
+ 	* tree.h (tree_dump_index): Ditto.
+ 
+ 	* tree-optimize.c (optimize_function_tree): Remove blank lines.
+ 
+ 	* tree-simple.c: Remove unary operator '!' from grammar.
+ 
+ 	* tree-flow.h (tree_ann_def): Add field 'flags'.
+ 	(TF_FOLD): Define.
+ 	(TREE_ANN): Re-define into an lvalue.
+ 	(BB_FOR_STMT): Ditto.
+ 	(TREE_CURRDEF): Ditto.
+ 	(next_varref_id): Declare.
+ 	* tree-ssa-ccp.c: Include tree-simple.h
+ 	(ssa_edges): Convert sbitmap into varray_type.  Update all uses.
+ 	(decl_map): Remove.
+ 	(SSA_NAME): Use VARREF_ID instead of DECL_UID.
+ 	(visit_assignment): New function.
+ 	(evaluate_expr_for): New function.
+ 	(dump_lattice_value): New function.
+ 	(tree_ssa_ccp): Add debugging dumps.
+ 	Remove #if 0 code everywhere.
+ 	(visit_phi_node): Add debugging dumps.
+ 	Also visit PHI arguments.
+ 	Remove basic block argument
+ 	(visit_expression): Re-implement.
+ 	(examine_flow_edges): Add debugging dumps.
+ 	(ssa_ccp_substitute_constants): Add debugging dumps.
+ 	Update comments.
+ 	Mark and fold expressions with substituted constants.
+ 	* tree-ssa.c (search_fud_chains): Don't check if BB_REFS(bb) is
+ 	empty before iterating.
+ 	Add comment explaining how we chain PHI node arguments to their
+ 	originating basic block.
+ 
+ 	* Makefile.in (tree-cfg.o, tree-dfa.o, tree-ssa-ccp.o): Update
+ 	dependencies.
+ 
+ 2002-07-29  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (tree_perform_ssapre): Ben forgot to add a
+ 	dump_begin call when he removed the before dump.
+ 
+ 2002-07-24  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-alias-ecr.c (ECR_new_with_type): Use correct number in mapping.
+ 
+ 2002-07-23  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* c-simplify.c (simplify_for_stmt): Deep copy the result of the
+ 	tail_expression, so it's unshared.
+ 
+ 2002-07-23  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-flow.h: Add prototype for create_alias_vars.
+ 
+ 	* tree-alias-steen.c (display_points_to_set): New function.
+ 	(init_alias_vars): Display points to sets when we are done.
+ 
+ 	* disjoint-set.h (disjoint_set_def): ptr_alias to ECR_def so that
+ 	we mark parent properly.
+ 
+ 2002-07-24  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (GTFILES): Move tree-alias-type.[ch],
+ 	tree-alias-ecr.[ch], tree-alias-steen.[ch] from ...
+ 	* c-config-lang.in (gtfiles): ... here.
+ 
+ 	* tree-simple.c (is_simplifiable_builtin): Replace
+ 	BUILT_IN_VARARGS_START with BUILT_IN_VA_START.
+ 
+ 2002-07-23  Andreas Jaeger  <aj@suse.de>
+ 
+ 	* tree-ssa-pre.c (hash_expr_tree): Remove.
+ 
+ 	* c-call-graph.c (write_dtd): Remove.
+ 
+ 	* tree-ssa.c (delete_refs): Remove.
+ 
+ 2002-07-23  Andreas Jaeger  <aj@suse.de>
+ 
+ 	* gengtype.c (open_base_files): Add tree.h.
+ 
+ 	* tree-alias-type.h: Remove inclusion of tree.h.
+ 
+ 	* tree-alias-steen.c: Include tree.h.
+ 	Add prototype for create_fun_alias_var_ptf.
+ 
+ 	* tree-alias-ecr.c: Add prototype for ECR_add_pending.
+ 
+ 	* tree-ssa-pre.c (calculate_preorder): Remove unused variables.
+ 
+ 	* tree-simple.c: Include expr.h and rtl.h for prototypes.
+ 
+ 	* tree-optimize.c: Include tree-alias-steen.h for prototypes.
+ 
+ 	* Makefile.in (tree-optimize.o): Add tree-alias-steen.h.
+ 	(tree-simple.o): Add expr.h and rtl.h.
+ 	(tree-alias-steen.o): Add tree.h.
+ 
+ 	* diagnostic.h: Add declaration of debug_output_buffer.
+ 
+ 	* c-call-graph.c (construct_call_graph): Make static to follow
+ 	declaration.
+ 	(construct_call_graph): Use #if 0 instead of C++ comments to
+ 	disable code.
+ 
+ 2002-07-20  Andreas Jaeger  <aj@suse.de>
+ 
+ 	* doc/invoke.texi (Option Summary): Fix syntax.
+ 
+ 2002-07-19  Jason Merrill  <jason@redhat.com>
+ 
+ 	* c-simplify.c (simplify_return_stmt): Do simplify a returned
+ 	expression in a void function.
+ 
+ 	* c-simplify.c (simplify_stmt_expr): Handle C++ return semantics.
+ 
+ 2002-07-19  Jason Merrill  <jason@redhat.com>
+ 
+ 	* c-pretty-print.c (dump_c_node) [TARGET_EXPR]: Handle.
+ 	[COND_EXPR]: Print a returned expression in a void function.
+ 
+ 2002-07-19  Ben Elliston  <bje@redhat.com>
+ 
+ 	* tree-ssa-pre.c (tree_perform_ssapre): Don't dump the original
+ 	tree before applying this optimisation.
+ 
+ 	* flags.h (flag_dump_tree_all_ssa): New flag.
+ 	* toplev.c (flag_dump_tree_all_ssa): New flag.
+ 	(f_options): Add "dump-tree-all-ssa" option.
+ 	(process_options): Process flag_dump_tree_all_ssa.
+ 	* tree.h (dump_enable_all_ssa): Declare.
+ 	* tree-dump.c (dump_enable_all_ssa): New function.
+ 	* doc/invoke.texi (Option Summary): Add -fdump-tree-all-ssa and
+ 	-fdump-tree-ssapre options.
+ 	(Debugging Options): Describe in more detail.
+ 	* c-simplify.c (c_simplify_function_tree): Dump the original tree
+ 	only if a TDI_original dump is requested, rather than TDI_simple.
+ 
+ 	* tree-dump.c (dump_begin): Include phase number in dump filename.
+ 
+ 2002-07-18  Ben Elliston  <bje@redhat.com>
+ 
+ 	* tree-dump.c (dump_files): Rename "unparse" to "raw".
+ 	* tree.h (TDF_UNPARSE): Rename from this ..
+ 	(TDF_RAW): .. to this.
+ 	* tree-ssa-pre.c (tree_perform_ssapre): Use TDF_RAW and invert the
+ 	logical sense of this flag.
+ 	* tree-ssa-ccp.c (tree_ssa_ccp): Likewise.
+ 	* c-simplify.c (c_simplify_function_tree): Likewise.
+ 
+ 2002-07-18  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c (calculate_preorder): New function.
+ 	(tree_perform_ssapre): Use it, rather than
+ 	flow_compute_preorder_tranversal, which seems to not do
+ 	what we want.
+ 
+ 2002-07-18  Daniel Berlin <dberlin@dberlin.org>
+ 
+ 	* tree-alias-type.c: Move gt-tree-alias-type include to end of file.
+ 
+ 	* tree-alias-steen.c: Move gt-tree-alias-steen include to end of file.
+ 
+ 2002-07-18  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* gengtype.c (get_base_file_bitmap): Mark tree-alias-* and
+ 	disjoint-set* as c/c++/objc files only.
+ 
+ 	* Makefile.in (gt-tree-alias-type.h): Add.
+ 	(tree-alias-type.o): Add dependency on gt-tree-alias-type.h.
+ 
+ 	* tree-alias-type.c: Include gt-tree-alias-type.h.
+ 	(alias_bottom): Add a GTY marked version of alias_bottom here.
+ 
+ 	* tree-alias-type.h: Remove the GTY marker from alias_bottom.
+ 
+ 2002-07-17  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-alias-ecr.c (ECR_union_pending_sets): Only clear bitmap if
+ 	it's not NULL.
+ 
+ 2002-07-16  Jason Merrill  <jason@redhat.com>
+ 
+ 	* c-simplify.c (add_tree): Build an EXPR_STMT immediately.
+ 	(convert_to_stmt_chain): Remove.
+ 	(simplify_stmt, simplify_for_stmt, simplify_while_stmt,
+ 	simplify_do_stmt, simplify_expr_wfl, tail_expression): Adjust.
+ 
+ 2002-07-17  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-alias-ecr.c: New file. Equivalence Class Representation.
+ 
+ 	* tree-alias-steen.c: New file. Steengaard Alias Analysis.
+ 
+ 	* disjoint-set.c: New file. Disjoint set data structure.
+ 
+ 	* tree-alias-type.c: New file. Alias types.
+ 
+ 	* c-simplify.c (create_tmp_alias_var): New function, like
+ 	create_tmp_var, but doesn't add it to the current binding.
+ 
+ 	* tree-simple.h: Prototype for create_tmp_alias_var.
+ 
+ 	* tree-optimize.c (build_tree_ssa): Create alias variables, if
+ 	requested.
+ 
+ 	* flags.h: Add flag_tree_points_to.
+ 
+ 	* toplev.c: Ditto.
+ 
+ 	* gengtype.c (open_base_files): Add disjoint-set.h,
+ 	tree-alias-ecr.h, tree-alias-type.h, tree-flow.h.
+ 
+ 	* Makefile.in (C_AND_OBJC_OBJS): Add disjoint-set.o,
+ 	tree-alias-ecr.o, tree-alias-type.o, tree-alias-steen.o.
+ 	(tree-alias-steen.o): Add dependencies.
+ 	(tree-alias-ecr.o): Ditto.
+ 	(tree-alias-type.o): Ditto.
+ 	(disjoint-set.o): Ditto.
+ 
+ 2002-07-10  Daniel Berlin  <dberlin@dberlin.org>
+ 	    Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (C_AND_OBJC_OBJS): Add tree-ssa-ccp.o
+ 	* flags.h (flag_tree_ssa_ccp): Declare.
+ 	* fold-const.c (eval_subst): Make extern.
+ 	* toplev.c (flag_tree_ssa_ccp): Define.
+ 	(f_options): Document -ftree-ssa-ccp.
+ 	* tree-dump.c (dump_files): Add -fdump-tree-ccp.
+ 	* tree-flow.h (tree_perform_ssapre): Move declaration ...
+ 	* tree-optimize.h: ... here.
+ 	(tree_ssa_ccp): Declare.
+ 	* tree-optimize.c (optimize_function_tree): Call tree_ssa_ccp.
+ 	* tree-ssa-ccp.c: New file.
+ 	* tree.c (next_decl_uid): Remove static declaration.
+ 	* tree.h (next_decl_uid): Declare.
+ 	(tree_dump_index): Add TDI_ccp.
+ 	* cp/Make-lang.in (CXX_C_OBJS): Add tree-ssa-ccp.o.
+ 	* doc/invoke.texi: Document -ftree-ssa-pre and -ftree-ssa-ccp.
+ 
+ 2002-07-09  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	s/varrays of refs/ref_list of refs/g
+ 
+ 	* tree-flow.h: Add ref_list structure.
+ 	Add prototypes for ref_list functions.
+ 	(FOR_EACH_REF, FOR_EACH_REF_REV): New macros to iterate through
+ 	ref lists.
+ 	* tree-cfg.c, tree-ssa.c, tree-ssa-pre.c: Update all uses.
+ 
+ 	* tree-dfa.c (create_ref_list): New function.
+ 	(delete_ref_list): Ditto.
+ 	(empty_ref_list): Ditto.
+ 	(add_ref_to_list_end): Ditto.
+ 	(add_ref_to_list_begin): Ditto.
+ 	(remove_ref_from_list): Ditto.
+ 
+ 2002-07-04  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-simple.c (is_simplifiable_builtin): Don't simplify target
+ 	builtins.
+ 
+ 2002-07-03  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-simplify.c (simplify_decl_stmt): Unshare the
+ 	initializer nodes before simplification.
+ 
+ 2002-06-29  Aldy Hernandez  <aldyh@quesejoda.com>
+ 	    Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-simplify.c (simplify_call_expr): Do not bail on all builtins.
+ 	(is_simple_call_expr): Same.
+ 	(simplify_addr_expr): New function.
+ 	(simplify_expr): Call it.
+ 
+ 	* tree-simple.c (is_simplifiable_builtin): New.
+ 	(is_simple_compound_lval): Do not bail on INDIRECT_REF.
+ 
+ 	* tree-simple.h: New prototype for is_simplifiable_builtin.
+ 
+ 2002-06-26  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa.c (tree_build_ssa): Call free_dominance_info, not
+ 	free, on idom.
+ 
+ 	* tree-ssa-pre.c (compute_domchildren): Update to use new
+ 	dominance_info structure, rather than idom array.
+ 	(tree_perform_ssapre): Don't forget to free the dominance info.
+ 
+ 	s/VARRAY_FREE/VARRAY_CLEAR/g now that VARRAY's are ggc allocated.
+ 
+ 2002-06-24  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-ssa.c (build_fud_chains): Use dominance_info instead of int *.
+ 	(search_fud_chains): Ditto.
+ 	Call get_immediate_dominator.
+ 	* tree-ssa-pre.c (a_dom_b): Call dominated_by_p.
+ 	(pre_idom): Change type to dominance_info.  Update all uses.
+ 	(pre_doms): Remove.  Update all uses.
+ 
+ 2002-06-20  Jason Merrill  <jason@redhat.com>
+ 
+ 	Simplify DECL_STMT, CONSTRUCTOR and COMPOUND_LITERAL_EXPR.
+ 	* tree-simple.c (is_simple_decl_stmt): New fn.
+ 	(is_simple_constructor, is_simple_constructor_elt): New fns.
+ 	(is_simple_stmt, is_simple_unary_expr): Use them.
+ 	(is_simple_modify_expr): Accept an INIT_EXPR.
+ 	(is_simple_id): Don't allow a COMPOUND_LITERAL_EXPR.
+ 	(is_simple_unary_expr): Here either.
+ 	* c-simplify.c (simplify_decl_stmt, simplify_constructor): New fns.
+ 	(simplify_compound_literal_expr): New fn.
+ 	(simplify_stmt, simplify_expr): Use them.
+ 	(get_initialized_tmp_var): Use an INIT_EXPR.
+ 	(simplify_modify_expr): Accept an INIT_EXPR.
+ 	(simplify_for_stmt): Call simplify_decl_stmt.
+ 	(get_name): Don't crash if the decl is anonymous.
+ 	(tail_expression): New fn.
+ 	* tree-simple.h: Declare new fns.
+ 	* c-pretty-print.c (dump_c_node) [INIT_EXPR]: Print like MODIFY_EXPR.
+ 	(dump_c_node, op_prio): Handle COMPOUND_LITERAL_EXPR.
+ 	* c-simplify.c (simplify_expr_wfl): Only wrap pre and post stuff
+ 	that came from our subexpression.
+ 	(simplify_stmt): Restore stmts_are_full_exprs_p.
+ 
+ 	* c-simplify.c (simplify_expr_wfl): Bracket substatements with
+ 	FILE_STMTs rather than wrapping them in EXPR_WITH_FILE_LOCATION.
+ 	(simplify_stmt): Update lineno and input_filename from stmts.
+ 	(simplify_expr et al): Don't copy lineno between stmts.  Don't pass
+ 	enclosing stmt down.
+ 	(update_line_number): Remove.
+ 
+ 	* c-simplify.c (simplify_expr_stmt): Don't check
+ 	is_last_stmt_of_scope.
+ 	(simplify_stmt_expr): Check it here.  Set *expr_p to void_zero_node
+ 	instead of NULL_TREE.
+ 	(expr_has_effect): No need to deal with NULL exprs now.
+ 	(simplify_expr_wfl): Likewise.
+ 
+ 2002-06-18  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-simplify.c (strip_off_ending): Rename to remove_suffix.
+ 	Update callers.
+ 	(is_last_stmt_of_scope): New function.
+ 	(simplify_expr_stmt): Call it.
+ 	(stmt_has_effect): Ditto.
+ 	(c_simplify_function_tree): Update comment.
+ 
+ 2002-06-18  Jason Merrill  <jason@redhat.com>
+ 
+ 	* c-simplify.c (maybe_fixup_loop_cond): New fn for C++ conditions.
+ 	(simplify_for_stmt, simplify_while_stmt): Use it.
+ 
+ 	* c-pretty-print.c (dump_c_node) [COMPONENT_REF]: Print "->" if
+ 	appropriate.
+ 
+ 2002-06-19  Jason Merrill  <jason@redhat.com>
+ 
+ 	* c-simplify.c (simplify_stmt_expr): New fn.
+ 	(simplify_expr): Call it.
+ 	(stmt_expr_level): Remove.
+ 	(stmt_has_effect, c_simplify_function_tree): Remove refs.
+ 	(expr_has_effect): Deal with null expression.
+ 	(simplify_expr_wfl): If the subexpression is simplified away, drop
+ 	this one, too.  Don't wrap statements.
+ 	* tree-simple.c (is_simple_unary_expr): Don't allow a STMT_EXPR.
+ 	* tree-inline.c (copy_tree_r): Clear the aux field in the copies.
+ 
+ 2002-06-17  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* c-pretty-print.c (dump_c_node): Print pointer-type
+ 	integer constants as raw numbers with a "B" (bytes) suffix.
+ 
+ 2002-06-17  Jason Merrill  <jason@redhat.com>
+ 
+ 	* c-simplify.c (simplify_stmt): Take a tree *.
+ 	(various): Adjust.
+ 
+ 2002-06-16  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* c-simplify.c (get_name): New function.
+ 	(get_initialized_tmp_var): Use it to try to get a prefix for
+ 	create_tmp_var from the value we are initializing to.
+ 	(simplify_cond_expr): Add prefix for create_tmp_var.
+ 	(create_tmp_var): Add prefix argument.
+ 
+ 	* tree-simple.h: Change create_tmp_var prototype to match.
+ 
+ 	* tree-ssa-pre.c: Change create_tmp_var call.
+ 
+ 2002-06-15  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (c-decl.o): Add dependency on langhooks.h
+ 	(c-simplify.o): Add dependency on flags.h, langhooks.h, toplev.h
+ 	and rtl.h.
+ 	* c-decl.c: Include langhooks.h.
+ 	(c_expand_body): Simplify the function.  If it succeeds and
+ 	-ftree-ssa is enabled, call optimize_function_tree.
+ 	* c-simplify.c: Include flags.h, rtl.h and toplev.h.
+ 	(simplify_expr_stmt): New function.
+ 	(simplify_stmt): Call it.
+ 	* tree-optimize.c: Don't include langhooks.h.
+ 	(optimize_function_tree): Don't call lang_hooks.simplify_function_tree.
+ 
+ 	* c-decl.c (c_expand_body): Do not simplify nor optimize the
+ 	function if -fdisable-simple is given.
+ 	* c-simplify.c (simplify_expr): Use is_simple_addr_expr_arg when
+ 	simplifying ADDR_EXPR nodes.
+ 	* flags.h (flag_disable_simple): Declare.
+ 	* toplev.c (flag_disable_simple): Define.
+ 	(f_options): Document -fdisable-simple.
+ 	(process_options): Warn if -fdisable-simple is used with
+ 	optimization enabled.
+ 	* tree-simple.c (is_simple_addr_expr_arg): New function.
+ 	(is_simple_unary_expr): Call it.
+ 	* tree-simple.h (is_simple_addr_expr_arg): Declare.
+ 	* doc/invoke.texi: Document -fdisable-simple.
+ 
+ 	* c-pretty-print.c (dump_c_node): Handle DECL_STMT nodes inside
+ 	FOR_INIT_STMT.
+ 	* c-simplify.c (c_simplify_function_tree): Don't do anything if the
+ 	program had errors.
+ 	(simplify_stmt): Skip DECL_STMTs.
+ 	(simplify_for_stmt): Handle DECL_STMT nodes inside FOR_INIT_STMT.
+ 	(simplify_save_expr): New function.
+ 	(simplify_expr): Call it.
+ 	(tree_last_decl): Handle cases where DECL_STMTs are found before
+ 	the body of the function.
+ 	* tree-simple.c (is_simple_stmt): Handle DECL_STMT nodes inside
+ 	FOR_INIT_STMT.
+ 	(is_simple_compound_lval): Handle nodes wrapped in NON_LVALUE_EXPR.
+ 
+ 2002-06-14  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	* c-pretty-print.c (dump_c_node): Print more type qualifiers,
+ 	especially for pointers.
+ 
+ 2002-06-11  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-simplify.c: Remove folding markers.
+ 	(insert_before_first): Remove unused function.
+ 	* tree-cfg.c: Remove folding markers.
+ 	* tree-dfa.c: Ditto.
+ 	* tree-flow.h: Ditto.
+ 	* tree-optimize.c: Ditto.
+ 	* tree-optimize.h: Ditto.
+ 	* tree-simple.c: Ditto.
+ 	* tree-ssa.c: Ditto.
+ 
+ 2002-06-11  Jason Merrill  <jason@redhat.com>
+ 
+ 	* c-simplify.c (add_tree): Don't deep-copy expressions.
+ 	(simplify_for_stmt): Only deep-copy pre_cond_s the first time.
+ 	Don't deep copy expr_chain.
+ 
+ 2002-06-10  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-cfg.c (remove_bb_ann): Don't call VARRAY_FREE.
+ 	* tree-dfa.c (create_ref): Use sizeof (ref) instead of
+ 	refs->element_size.
+ 	* tree.h (struct tree_common): Skip field 'aux' from GC type
+ 	information.
+ 	* tree-optimize.c (optimize_function_tree): Don't call
+ 	VARRAY_REF.
+ 	* tree-ssa.c (insert_phi_terms): Ditto.
+ 	(delete_refs): Ditto.
+ 	* c-simplify.c (simplify_array_ref): Ditto.
+ 	* simple-break-elim.c: Disable whole file.
+ 	* simple-goto-elim.c: Disable whole file.
+ 
+ 2002-06-10  Jason Merrill  <jason@redhat.com>
+ 
+ 	* c-simplify.c (simplify_switch_stmt): Let simplify_expr handle
+ 	post-effects.  Reorder.
+ 	(simplify_if_stmt): Likewise.  Don't build redundant comparison.
+ 	(simplify_do_stmt, simplify_while_stmt): Likewise.
+ 	(simplify_for_stmt): Likewise.  Remove POST_P parm.
+ 	(simplify_stmt): Adjust.
+ 	(insert_before_first): #if 0, no longer used.
+ 
+ 	* c-pretty-print.c (dump_c_node): Print FIX_TRUNC_EXPR, FLOAT_EXPR
+ 	et al as casts.  Add parens as needed.
+ 
+ 	* tree-simple.c (is_union_based_ref): New fn.
+ 	(is_simple_min_lval): Use it.  Rename from is_simple_arraybase.
+ 	(is_simple_arrayref): Adjust.  Use loop instead of recursion.
+ 	(is_simple_compref): Likewise.
+ 	(is_simple_compref_lhs): Remove.
+ 	* tree-simple.h: Adjust.
+ 	* c-simplify.c (simplify_array_ref): Adjust.
+ 	(simplify_component_ref): Adjust.
+ 
+ 	* c-simplify.c (simplify_expr_common): Tweak ordering.
+ 	(get_initialized_tmp_var): Let simplify_expr handle post-effects.
+ 	* tree-simple.c (is_simple_stmt): Accept an rhs for a return expr.
+ 
+ 	* c-simplify.c (simplify_boolean_expr): Avoid redundant tests.
+ 	Give the temp the appropriate type for a boolean value, and
+ 	reconvert at the end.
+ 
+ 	* c-simplify.c (simplify_self_mod_expr): Don't duplicate side-effects.
+ 
+ 	* c-simplify.c (simplify_return_stmt): Accept a SIMPLE rhs.
+ 	Just hand off to simplify_expr.
+ 
+ 	* c-simplify.c (get_initialized_tmp_var): New fn.
+ 	(simplify_expr_common): Use it.  Handle post-effects internally if
+ 	POST_P is NULL.
+ 	(is_simple_tmp_var): Rename from simple_tmp_var_p.
+ 	* tree-simple.h: Adjust.
+ 
+ 2002-06-09  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-simplify.c (simplify_return_stmt): Update folding markers.
+ 	(build_addr_expr): Ditto.
+ 	* langhooks.h (struct langhooks): Document simplify_function_tree
+ 	hook.
+ 
+ 2002-06-09  Jason Merrill  <jason@redhat.com>
+ 
+ 	* c-simplify.c (simplify_expr_common): Handle creating both lvalue
+ 	and rvalue temps.  Add new parameter to specify which.
+ 	(simplify_expr): Now just a wrapper.
+ 	(simplify_lvalue_expr): Likewise.
+ 	(simplify_expr_either): New wrapper.
+ 	(simplify_component_ref): Use it instead of simplify_lvalue_expr.
+ 
+ 	* c-pretty-print.c (debug_c_tree): Add a trailing newline.
+ 	(debug_c_node): Likewise.
+ 	* gdbinit.in (pct): New macro, calls debug_c_tree.
+ 
+ 2002-06-08  Jason Merrill  <jason@redhat.com>
+ 
+ 	* tree-simple.c (is_simple_unary_expr): Only allow the address of
+ 	a varname.
+ 	(is_simple_id): Allow STRING_CST.
+ 	* c-simplify.c (simplify_expr_common): Split out from simplify_expr.
+ 	Do simplify ADDR_EXPR.
+ 	(simplify_lvalue_expr): Use it and build_addr_expr.  Take
+ 	simple_test_f.
+ 	(simplify_modify_expr): Adjust.
+ 	(build_addr_expr): New fn.
+ 	(simplify_array_ref): Use simplify_lvalue_expr.
+ 	(simplify_component_ref): Likewise.
+ 
+ 	* tree-simple.c (is_simple_rhs): Remove condexpr rule.
+ 	(is_simple_compref_lhs): Remove &ID.idlist rule.
+ 	(is_simple_relop): New fn.
+ 	(is_simple_binary_expr, is_simple_condexpr): Use it.
+ 	* tree-simple.h: Declare it.
+ 
+ 	* c-simplify.c (create_tmp_var): Refuse to create an array temp.
+ 	(simple_tmp_var_p): New fn.
+ 	(simplify_lvalue_expr): Use it; make sure we don't return a temp.
+ 	* tree-simple.h: Declare it.
+ 
+ 	* c-pretty-print.c (dump_c_node) [ARRAY_REF]: Wrap array in parens
+ 	as needed.
+ 	[COMPONENT_REF]: Likewise.
+ 	[POINTER_TYPE]: Fix pointer-to-function handling.
+ 	[ARRAY_TYPE]: Don't try to print an unknown dimension.
+ 
+ 	* tree-simple.c (is_simple_arraybase): New function.
+ 	(is_simple_arrayref): Use it to check the array base again.
+ 	* tree-simple.h: Add declaration.
+ 	* c-simplify.c (simplify_array_ref): Do simplify the base.
+ 	* expr.c (expand_expr): First make sure the type has a size.
+ 
+ 2002-06-07  Jason Merrill  <jason@redhat.com>
+ 
+ 	* cppexp.c (num_equality_op): Use a temporary variable to work
+ 	around gcc 3.0.4 bug.
+ 
+ 2002-06-05  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (BOOT_CFLAGS): Remove -ftree-ssa.
+ 	* c-decl.c (c_expand_body): Call optimize_function_tree if tree SSA
+ 	is enabled.
+ 	* c-lang.c (LANG_HOOKS_SIMPLIFY_FUNCTION_TREE): Define.
+ 	* c-simplify.c (simplify_tree): Rename to c_simplify_function_tree.
+ 	Update all callers.
+ 	Dump function body before and after simplification if
+ 	-fdump-tree-simple is used.
+ 	(simplify_expr): Document FIXME for simplification of BIT_FIELD_REF
+ 	nodes.
+ 	* c-tree.h (simplify_tree): Rename to c_simplify_function_tree.
+ 	* langhooks-def.h (LANG_HOOKS_SIMPLIFY_FUNCTION_TREE): Define
+ 	(LANGHOOKS_INITIALIZER): Add LANG_HOOKS_SIMPLIFY_FUNCTION_TREE.
+ 	(lhd_simplify_function_tree): Declare.
+ 	* langhooks.c (lhd_simplify_function_tree): New function.
+ 	* langhooks.h (lang_hooks): Add simplify_function_tree function
+ 	pointer.
+ 	* toplev.c (parse_options_and_default_flags): Set flag_tree_ssa to
+ 	1 at optimization levels >= 1.
+ 	Revert to default warning when -Wuninitialized is used without -O.
+ 	* tree-cfg.c (tree_find_basic_blocks): Rename argument 't' to
+ 	'fnbody'.
+ 	* tree-optimize.c: Include langhooks.h.
+ 	(optimize_tree): Rename to optimize_function_tree.  Update all
+ 	users.
+ 	Rename argument 't' to 'fndecl'.
+ 	Call simplify langhook before building SSA.
+ 	(build_tree_ssa): Rename argument 't' to 'fndecl'.
+ 	Adjust call to tree_find_basic_blocks to pass body of the function.
+ 	* tree-optimize.h (optimize_tree): Rename to
+ 	optimize_function_tree.
+ 	* tree-simple.c (is_simple_unary_expr): Document FIXME on
+ 	BIT_FIELD_REF nodes.
+ 	* tree-ssa.c: Add whitespace.
+ 	* testsuite/lib/c-torture.exp: Remove -ftree-ssa flag.
+ 
+ 2002-06-03  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-cfg.c (insert_before_*):  For insertion into FOR_INIT's, if
+ 	we have an expression statement, transform into a compound
+ 	expression.
+ 	Pick the right place to insert a statement by iterating until we
+ 	have a first_exec_stmt (first_non_decl_stmt) that is really the
+ 	first executable non decl statement.
+ 	(insert_after_*): Ditto.
+ 
+ 2002-06-03  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-ssa-pre.c: Update BB stuff to new basic block structure.
+ 	Add some comments throughout (more coming, particularly describing
+ 	the algorithm, rather than the implementation).
+ 	(free_expr_info): Free refs as well.
+ 	(defs_y_dom_x): Handle unary expressions as well.
+ 	(insert_euse_in_preorder_dt_order_1): Use block of ref, not block
+ 	of statement.
+ 	Don't insert exit blocks if we hit them before hitting an
+ 	occurrence (it's pointless).
+ 	(rename_2): Return set of phi operands we touched, don't forget to
+ 	free VARRAY's we allocated.
+ 	(rename_1): Correct downsafety computation. Now get exact same
+ 	results as Open64.
+ 	Correct setting of has_real_use.
+ 	(finalize_1): Fix up insertion.
+ 	(code_motion): Fix up insertion.
+ 
+ 	* tree-dfa.c (dump_varref):  Improve dumping of expression
+ 	references.
+ 
+ 2002-06-03  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-cfg.c (delete_bb): Rename to tree_delete_bb.  Update callers.
+ 	(tree_find_basic_blocks): Initializer last_basic_block.
+ 	(create_bb): Update last_basic_block after creating a new block.
+ 	(tree_cleanup_cfg): Delete unreachable blocks by traversing the
+ 	linked list, not the array.  Update comments.
+ 	(delete_bb): Update comments.
+ 	(tree_dump_cfg): Also show last_basic_block.
+ 	* tree-ssa.c (tree_build_ssa): Use last_basic_block instead of
+ 	n_basic_blocks to allocate dominator arrays.
+ 	(insert_phi_terms): Ditto.
+ 	(search_fud_chains): User FOR_EACH_BB to look for dominator
+ 	children.
+ 
+ 2002-05-29  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-cfg.c (tree_find_basic_blocks): Set next_bb and prev_bb for
+ 	ENTRY_BLOCK_PTR and EXIT_BLOCK_PTR.
+ 	(create_bb): Set flag BB_NEW for every newly created block.
+ 	Call link_block to add the new block to the linked list.
+ 	(tree_split_bb): Traverse basic blocks using FOR_EACH_BB.
+ 	(make_goto_stmt_edges): Ditto.
+ 	(remove_unreachable_blocks): Add reminder comment to stop
+ 	compacting the basic block array every time a block is deleted.
+ 	(delete_cfg): Traverse basic blocks using FOR_EACH_BB.
+ 	(tree_dump_bb): Ditto.
+ 	(tree_dump_cfg): Ditto.
+ 	(tree_cfg2dot): Ditto.
+ 	* tree-dfa.c (tree_find_varrefs): Ditto.
+ 	(create_tree_ann): Ditto.
+ 	(get_fcalls): Ditto.
+ 	(find_declaration): Ditto.
+ 	* tree-ssa.c (tree_build_ssa): Ditto.
+ 
+ 2002-05-28  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in: Add -ftree-ssa to BOOT_CFLAGS.
+ 
+ 2002-05-27  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-decl.c (c_expand_body): Close dump file before simplifying the
+ 	function.
+ 	* c-pretty-print.c (dump_c_node): Handle COMPLEX_CST,
+ 	BIT_FIELD_REF, COMPLEX_EXPR, CONJ_EXPR, REALPART_EXPR,
+ 	IMAGPART_EXPR and VA_ARG_EXPR nodes.
+ 	Display all type casts, not just pointer casts.
+ 	(op_prio): Handle LROTATE_EXPR, RROTATE_EXPR, REALPART_EXPR and
+ 	IMAGPART_EXPR.
+ 	* c-simplify.c: Include "tree-inline.h"
+ 	(dump_file): New local variable.
+ 	(dump_flags): New local variable.
+ 	(stmt_expr_level): New local variable.
+ 	(simplify_tree): Open and close dump file if
+ 	-fdump-tree-simple-details is given.
+ 	Initialize stmt_expr_level.
+ 	(simplify_stmt): Dump statement before and after simplification if
+ 	-fdump-tree-simple-detail is given.
+ 	Unshare the expression of an EXPR_STMT before simplifying it.
+ 	Call simplify_return_stmt to handle RETURN_STMT nodes.
+ 	Do not simplify DECL_STMT nodes.
+ 	Call stmt_has_effect before re-chaining side effects.
+ 	(simplify_for_stmt): Do not return the simplified statement.
+ 	Update all callers.
+ 	Simplify FOR_BODY after the headers.
+ 	Unshare loop header expressions before simplification.
+ 	(simplify_while_stmt): Do not return the simplified statement.
+ 	Update all callers.
+ 	Simplify WHILE_BODY after the headers.
+ 	Unshare the loop header expression before simplification.
+ 	(simplify_do_stmt): Do not return the simplified statement.  Update
+ 	all callers.
+ 	Unshare the loop header expression before simplification.
+ 	(simplify_if_stmt): Do not return the simplified statement.  Update
+ 	all callers.
+ 	Simplify the condition expression before the clauses.
+ 	Unshare the condition expression before simplification.
+ 	(simplify_switch_stmt): Do not return the simplified statement.
+ 	Update all callers.
+ 	Simplify the switch expression before the body.
+ 	Unshare the switch expression before simplification.
+ 	(simplify_decl_stmt): Remove.
+ 	(simplify_expr): Remove argument 'needs_lvalue'.
+ 	Add argument 'stmt'.
+ 	Replace first argument 'expr' with a pointer to the
+ 	expression 'expr_p'.
+ 	Do not return the simplified expression.
+ 	Update all callers and uses.
+ 	Handle TRUTH_NOT_EXPR nodes.  Simplify SAVE_EXPR nodes into a
+ 	SIMPLE id and remove the SAVE_EXPR node.
+ 	Do not simplify BIT_FIELD_REF nodes.
+ 	Remove code that tried to create new lvalues.
+ 	(simplify_array_ref): Replace first argument 'expr' with a pointer
+ 	to the expression 'expr_p'.
+ 	Do not return the simplified expression.
+ 	Add argument 'stmt'.
+ 	Update all callers and uses.
+ 	(simplify_self_mod_expr): Replace first argument 'expr' with a
+ 	pointer to the expression 'expr_p'.
+ 	Do not return the simplified expression.
+ 	Add argument 'stmt'.
+ 	Update all callers and uses.
+ 	Call simplify_lvalue_expr to simplify a copy of the LHS into an
+ 	lvalue for the new assignment.
+ 	Simplify the new binary expression.
+ 	(simplify_component_ref): Replace first argument 'expr' with a
+ 	pointer to the expression 'expr_p'.
+ 	Do not return the simplified expression.
+ 	Add argument 'stmt'.
+ 	Update all callers and uses.
+ 	(simplify_call_expr): Ditto.
+ 	(simplify_tree_list): Ditto.
+ 	(simplify_cond_expr): Ditto.
+ 	Build a replacement IF_STMT and call simplify_if_stmt() to process
+ 	it.  Set the line number of the new statement from the statement
+ 	containing the original expression.
+ 	(simplify_modify_expr): Replace first argument 'expr' with a
+ 	pointer to the expression 'expr_p'.
+ 	Do not return the simplified expression.
+ 	Add argument 'stmt'.
+ 	Update all callers.
+ 	Call simplify_lvalue_expr to simplify the LHS of the assignment.
+ 	(simplify_boolean_expr): Replace first argument 'expr' with a
+ 	pointer to the expression 'expr_p'.
+ 	Do not return the simplified expression.
+ 	Add argument 'stmt'.
+ 	Update all callers.
+ 	Build a new IF_STMT and simplify it all at once by calling
+ 	simplify_if_stmt.
+ 	(simplify_compound_expr): Replace first argument 'expr' with a
+ 	pointer to the expression 'expr_p'.
+ 	Do not return the simplified expression.
+ 	Add argument 'stmt'.
+ 	Update all callers.
+ 	(simplify_expr_wfl): Ditto.
+ 	(simplify_lvalue_expr): New function.
+ 	(add_tree): Create a copy of each expression before adding it to
+ 	the list.
+ 	(deep_copy_node): Call copy_tree_r to copy expression nodes.
+ 	(stmt_has_effect): Return nonzero if the statement may be the last
+ 	statement of a statement expression body.
+ 	(mostly_copy_tree_r): New function.
+ 	* tree-dump.c (dump_options): Add 'details'.
+ 	* tree-simple.c: Update documentation about ADDRESSOF expressions.
+ 	(is_simple_stmt): Test for SIMPLE values when checking return
+ 	statements.
+ 	Accept all DECL_STMT nodes.
+ 	(is_simple_compstmt): Return nonzero if T is NULL.  Do not test
+ 	DECL_STMT nodes
+ 	(is_simple_expr): Return nonzero if T is NULL.
+ 	(is_simple_rhs): Ditto.
+ 	(is_simple_modify_expr): Ditto.
+ 	(is_simple_modify_expr_lhs): Ditto.
+ 	(is_simple_binary_expr): Ditto.
+ 	(is_simple_cond_expr): Ditto.
+ 	(is_simple_unary_expr): Call STRIP_NOPS before testing T.
+ 	Always accept ADDR_EXPR nodes.
+ 	Always accept BIT_FIELD_REF nodes.
+ 	(is_simple_call_expr): Return nonzero if T is NULL.
+ 	(is_simple_const): Ditto.
+ 	(is_simple_val): Ditto.
+ 	(is_simple_compref): Ditto.
+ 	(is_simple_compref_lhs): Ditto.
+ 	(is_simple_cast): Ditto.
+ 	(is_simple_cast_op): Ditto.
+ 	(is_simple_id): Return nonzero if T is NULL.  Allow identifiers
+ 	wrapped inside NON_LVALUE_EXPR and EXPR_WITH_FILE_LOCATION nodes.
+ 	Allow real and imaginary parts of a complex variable.
+ 	Allow compound literals.
+ 	(is_simple_arrayref): Allow arrays of complex types.
+ 	* tree.h (TDF_DETAILS): Define.
+ 	* cp/pt.c (tsubst_template_parms): Check that 'parms' is non-NULL
+ 	before calling TMPL_PARMS_DEPTH.
+ 	* doc/invoke.texi: Document -fdump-tree-simple-details.
+ 
+ 2002-05-10  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* c-pretty-print.c (dump_c_node): Print "<unnamed whatever>" for
+ 	types, variables, etc that have no name, rather than printing
+ 	nothing.
+ 	Handle PMF's properly.
+ 	Print out structure initializers in a somewhat sensible way.
+ 	Print SAVE_EXPR () around SAVE_EXPRs.
+ 	(print_call_name): Handle EXPR_WITH_FILE_LOCATION.
+ 
+ 2002-05-09  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-dfa.c (dump_varref): Tree inlining generates variables with
+ 	no name. Don't crash on dumping varref's of them.
+ 
+ 	* tree-inline.c (expand_call_inline): Generate a proper STMT_EXPR
+ 	(it was missing COMPOUND_STMT).
+ 
+ 2002-05-08  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	s/varref_type/treeref_type/g
+ 	s/create_varref/create_ref/g
+ 
+ 	* tree-flow.h: Add EXPRPHI, EXPRUSE, EXPRKILL, EXPRINJ.
+ 	Add structures and macros for each.
+ 	Add tree_perform_ssapre prototype.
+ 
+ 	* Makefile.in (C_AND_OBJC_OBJS): Add tree-ssa-pre.o
+ 	(tree-ssa-pre.o): Add dependencies for tree-ssa-pre.o
+ 
+ 	* cp/Make-lang.in: Add tree-ssa-pre.o
+ 
+ 	* flags.h: Add flag_tree_ssa_pre.
+ 
+ 	* tree-ssa-pre.c: New file, SSA-PRE.
+ 
+ 	* toplev.c: Add flag_tree_ssa_pre.
+ 	(lang_independent_options): Add tree-ssa-pre.
+ 
+ 	* tree-dump.c (dump_files): Add ssapre dump.
+ 
+ 	* tree-optimize.c (optimize_tree): Do SSAPRE if requested.
+ 
+ 	* tree.h (dump_index): Add TDI_ssa_pre.
+ 
+ 	* tree-dfa.c (create_ref): Add support for creating the EXPR*'s refs.
+ 	(dump_varref): Add support for dumping EXPR* refs.
+ 
+ 	* tree-ssa.c (search_fud_chains): Add BB to VARDEF_PHI_CHAIN_BB.
+ 
+ 2002-05-07  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-pretty-print.c (op_prio): Handle ABS_EXPR.
+ 	Don't abort when the operand is not recognized.
+ 	(op_symbol): Don't abort when the operand is not recognized.
+ 	* c-simplify.c (simplify_expr): Remove 'const' qualifier from first
+ 	argument.
+ 	Do not copy incoming expression.
+ 	Exclude handling of MODIFY_EXPR, INIT_EXPR, SAVE_EXPR and binary
+ 	expression nodes.
+ 	(simplify_array_ref): Remove 'const' qualifier from first argument.
+ 	Do not copy the incoming expression.
+ 	(simplify_self_mod_expr): Ditto.
+ 	Do not simplify the first operand twice.
+ 	(simplify_component_ref): Remove 'const' qualifier from first
+ 	argument.  Do not copy the incoming expression.
+ 	(simplify_call_expr): Ditto.
+ 	(simplify_tree_list): Ditto.
+ 	(simplify_cond_expr): Ditto.
+ 	(simplify_modify_expr): Ditto.
+ 	(simplify_boolean_expr): Ditto.
+ 	(simplify_compound_expr): Ditto.
+ 	(simplify_save_expr): Ditto.
+ 	(simplify_expr_wfl): Ditto.
+ 	(tree_build_scope): Re-write.  Do nothing if block already contains
+ 	a scope.  Use chainon to chain the body with the scope closing
+ 	node.
+ 	(deep_copy_node): Do not check for NULL nodes.  Do not deep copy
+ 	declarations, types and constants.
+ 
+ 2002-05-06  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* c-simplify.c (deep_copy_node): Don't copy DECL_STMT_DECL's.
+ 
+ 2002-05-06  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* tree-simple.c (is_simple_compstmt): Don't post-initialize
+ 	statics or aggregate initializers.
+ 
+ 	* c-simplify.c (simplify_decl_stmt): Ditto.
+ 
+ 2002-05-06  Sebastian Pop  <s.pop@laposte.net>
+ 
+ 	* Makefile.in (simple-break-elim.o, simple-goto-elim.o, tree-dchain.o):
+ 	Added.
+ 	* c-decl.c: Include tree-dchain.h
+ 	(c_expand_body): Add entry point to the goto, break elimination
+ 	after the simplification pass.
+ 	* simple-break-elim.c: New file.
+ 	* simple-goto-elim.c: New file.
+ 	* tree-dchain.h: New file.
+ 	* tree-dchain.c: New file.
+ 
+ 2002-05-02  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-simplify.c (simplify_expr): Constify first argument.
+ 	Always work on a copy of the input expression.
+ 	Do not simplify COMPOUND_LITERAL_EXPR nor CONSTRUCTOR nodes.
+ 	(simplify_array_ref): Constify first argument.  Always work on a
+ 	copy of the input expression.
+ 	(simplify_self_mod_expr): Ditto.
+ 	(simplify_component_ref): Ditto.
+ 	(simplify_call_expr): Ditto.
+ 	(simplify_tree_list): Ditto.
+ 	(simplify_cond_expr): Ditto.
+ 	When building the THEN_CLAUSE and ELSE_CLAUSE for the new IF_STMT,
+ 	create a scope for them and simplify the scope, not the expression.
+ 	(simplify_modify_expr): Constify first argument.  Always work on a
+ 	copy of the input expression.
+ 	(simplify_boolean_expr): Ditto.
+ 	(simplify_compound_expr): Ditto.
+ 	(simplify_save_expr): Ditto.
+ 	(simplify_expr_wfl): Ditto.
+ 	* tree-cfg.c (tree_find_basic_blocks): Update comments for
+ 	-fdump-tree-dot.
+ 	(tree_dump_cfg): Ditto.
+ 	* tree-dump.c (dump_files): Rename -fdump-tree-graphviz to
+ 	-fdump-tree-dot.
+ 	* tree-simple.c (is_simple_unary_expr): Do not handle &CONST
+ 	expressions.
+ 	Handle COMPOUND_LITERAL_EXPR and CONSTRUCTOR nodes.
+ 	(is_simple_const): Strip NOPS and handle &CONST expressions.
+ 	* tree.h (enum tree_dump_index): Remove references to GraphViz.
+ 	* doc/invoke.texi: Update documentation for -fdump-tree-dot.
+ 
+ 2002-05-02  Sebastian Pop  <s.pop@laposte.net>
+ 
+ 	* c-pretty-print.c (dump_c_node): Don't print declarations
+ 	from the SCOPE_STMT_BLOCK, use the DECL_STMT instead.
+ 
+ 2002-04-30  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-pretty-print.c (NIY): Display an error string instead of aborting.
+ 	(op_prio): Add support for COMPOUND_EXPR, TRUTH_XOR_EXPR, MIN_EXPR,
+ 	MAX_EXPR and NON_LVALUE_EXPR.
+ 	For EXPR_WITH_FILE_LOCATION nodes, return the priority of
+ 	the internal node.
+ 	(op_symbol): Add support for TRUTH_XOR_EXPR.
+ 	* c-simplify.c (simplify_stmt): Only remove null statements that
+ 	have been nullified by simplification.
+ 	Call debug_tree() dump unhandled tree nodes.
+ 	(simplify_for_stmt): Always deep-copy PRE_COND_S before adding it
+ 	to PRE_P.
+ 	(simplify_expr): When simplifying a MODIFY_EXPR node into an
+ 	rvalue, return operand 0.
+ 	Handle VA_ARG_EXPR, BIT_FIELD_REF and NON_LVALUE_EXPR nodes.
+ 	Treat TRUTH_AND_EXPR, TRUTH_OR_EXPR and TRUTH_XOR_EXPR nodes as
+ 	regular binary expressions.
+ 	Call debug_tree() to dump an unhandled expression.
+ 	(simplify_array_ref): Do not simplify the base of an array.
+ 	(simplify_call_expr): Do not simplify calls to builtins.
+ 	(simplify_cond_expr): Handle conditional expressions of type void.
+ 	(simplify_boolean_expr): Return 'T != 0' instead of 'T'.
+ 	(simplify_save_expr): Do not wrap statement trees inside SAVE_EXPR
+ 	nodes.
+ 	(tree_last_decl): Ignore FILE_STMT nodes preceding a SCOPE_STMT.
+ 	* tree-simple.c: Update grammar to accept any valid C array as the
+ 	array base.
+ 	(is_simple_compstmt): Accept DECL_INITIAL expressions for read-only
+ 	variables.
+ 	(is_simple_expr): Do not abort if the incoming tree is NULL.
+ 	(is_simple_modify_expr): Allow SAVE_EXPR, EXPR_WITH_FILE_LOCATION
+ 	and NON_LVALUE_EXPR wrappers.
+ 	(is_simple_binary_expr): Ditto.
+ 	(is_simple_condexpr): Ditto.
+ 	Accept TRUTH_AND_EXPR, TRUTH_OR_EXPR and TRUTH_XOR_EXPR.
+ 	(is_simple_unary_expr): Do not abort it the incoming tree is NULL.
+ 	Allow SAVE_EXPR, EXPR_WITH_FILE_LOCATION and NON_LVALUE_EXPR
+ 	wrappers.
+ 	Handle BIT_FIELD_REF and VA_ARG_EXPR nodes.
+ 	(is_simple_call_expr): Always return 1 for builtin calls.
+ 	(is_simple_arrayref): Do not check the array base.
+ 
+ 2002-04-30  Daniel Berlin  <dberlin@dberlin.org>
+ 
+ 	* c-simplify.c (simplify_call_expr): Don't try to simplify
+ 	call_expr arglist if it's not there.
+ 
+ 2002-04-27  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-decl.c (c_expand_body): Call simplify_tree to simplify a
+ 	FUNCTION_DECL node.
+ 	* c-simplify.c (simplify_tree): New function.
+ 	(simplify_stmt): Remove variable 'new_vars'.  Update all called
+ 	functions.
+ 	Remove argument 'scope'.  Update all callers.
+ 	Do not keep track of new scope statements as they are entered.
+ 	Do not call declare_tmp_vars().
+ 	(simplify_for_stmt): Remove argument new_vars_p.  Update all callers.
+ 	(simplify_while_stmt): Ditto.
+ 	(simplify_do_stmt): Ditto.
+ 	(simplify_if_stmt): Ditto.
+ 	(simplify_switch_stmt): Ditto.
+ 	(simplify_decl_stmt): Reformat comments.
+ 	(simplify_expr): Remove argument new_vars_p.  Update all callers.
+ 	Call simplify_save_expr() to simplify SAVE_EXPR nodes.
+ 	Call simplify_expr_wfl() to simplify EXPR_WITH_FILE_LOCATION nodes.
+ 	Do not call is_unop() and is_binop() when checking for unary and
+ 	binary operators.
+ 	Do not return early after simplify statement-expressions.
+ 	Do not call add_modify_stmt() to create assignment expressions.
+ 	(simplify_array_ref): Remove argument new_vars_p.  Update all callers.
+ 	(simplify_self_mod_expr): Ditto.
+ 	(simplify_component_ref): Ditto.
+ 	(simplify_call_expr): Ditto.
+ 	(simplify_tree_list): Ditto.
+ 	(simplify_cond_expr): Ditto.
+ 	(simplify_modify_expr): Ditto.
+ 	(simplify_boolean_expr): Ditto.
+ 	(simplify_compound_expr): Ditto.
+ 	(simplify_save_expr): New function.
+ 	(simplify_expr_wfl): New function.
+ 	(tree_build_scope): Reformat.
+ 	(add_tree): Call stmt_has_effect() and expr_has_effect() to decide
+ 	whether or not to add a new tree to the list.
+ 	(add_modify_stmt): Remove.
+ 	(create_tmp_var): Remove 'new_vars_p' argument.
+ 	Call pushdecl() to insert the newly created variable in the current
+ 	binding scope.
+ 	(declare_tmp_vars): Do not create a BLOCK_VARS for the scope.
+ 	(is_binop): Remove.
+ 	(is_unop): Remove.
+ 	(expr_has_effect): New function.
+ 	* c-tree.h (simplify_tree): Remove second argument.
+ 	* stmt.c (warn_if_unused_value): Check operand 0 of SAVE_EXPR
+ 	nodes.
+ 	* tree-dfa.c (find_refs_in_expr): Call find_refs_in_expr() to look
+ 	inside an EXPR_WITH_FILE_LOCATION node.
+ 	* tree-simple.c (is_simple_stmt): Add a case for SCOPE_STMT nodes.
+ 	(is_simple_compstmt): Assume that T is the first tree in the
+ 	compound statement's body.
+ 	Stop when a scope ending SCOPE_STMT node is found.
+ 	(is_simple_binary_expr): Don't call is_simple_binop().
+ 	(is_simple_condexpr): Don't call is_simple_relop().
+ 	(is_simple_binop): Remove.
+ 	(is_simple_relop): Remove.
+ 	(is_simple_unary_expr): Accept any operator with tree code class
+ 	'1' followed by a simple value.
+ 	Accept simple unary expressions wrapped inside SAVE_EXPR,
+ 	EXPR_WITH_FILE_LOCATION and NON_LVALUE_EXPR nodes.
+ 	(is_simple_id): Accept simple identifiers wrapped inside SAVE_EXPR,
+ 	EXPR_WITH_FILE_LOCATION and NON_LVALUE_EXPR nodes.
+ 	* tree-simple.h (create_tmp_var): Remove second argument.
+ 	(is_simple_binop): Remove.
+ 	(is_simple_relop): Remove.
+ 
+ 2002-04-22  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-simplify.c (stmt_has_effect): New function.
+ 	(simplify_stmt): Fix example code in comment.
+ 	Use EXPR_STMT_EXPR to access the expression in an expression
+ 	statement.
+ 	Call debug_c_node to display unhandled statements.
+ 	Call stmt_has_effect to determine whether the statement has been
+ 	nullified by the simplification process.
+ 	(simplify_for_stmt): Do not simplify the initialization expression
+ 	if it's NULL.
+ 	Do not convert post_cond_s into a statement chain.
+ 	Do not simplify the expression if it's NULL.
+ 	(simplify_switch_stmt): initialize post_cond_s to NULL before
+ 	simplifying the expression.
+ 	(simplify_expr): Rename argument IS_LHS to NEEDS_LVALUE.  Update
+ 	all uses.
+ 	When simplifying assignments, return the LHS of the assignment if
+ 	the caller wants to use the assignment as an rvalue.
+ 	Do not simplify ADDR_EXPR nodes.
+ 	Handle NOP_EXPR, CONVERT_EXPR, FIX_TRUNC_EXPR, FIX_CEIL_EXPR,
+ 	FIX_ROUND_EXPR, INDIRECT_REF, NEGATE_EXPR, INTEGER_CST, STRING_CST,
+ 	COMPLEX_CST.
+ 	Abort if the expression has not been simplified and cannot be used
+ 	as an rvalue to assign it to a temporary.
+ 	When creating a new temporary to hold an lvalue, if the expression
+ 	is an indirect reference, use the address of the referenced object.
+ 	When creating an indirect reference, use the pointed-to type as the
+ 	type of the reference.
+ 	(simplify_self_mod_expr): If the LHS operand needs to be
+ 	simplified, simplify twice.  Once to produce an lvalue and another
+ 	to produce a simple value.
+ 	(simplify_modify_expr): Break assignment chains (a = b = c = ...)
+ 	into individual assignments.
+ 	(simplify_compound_expr):
+ 	(create_tmp_var): If the type is an array, use TYPE_POINTER_TO as
+ 	the pointer type.
+ 	(update_line_number): Fix typo in comment.
+ 	(is_unop): Ditto.
+ 	(convert_to_stmt_chain): Only add statements that comply with
+ 	stmt_has_effect().
+ 	* tree-dfa.c (find_declaration): Fix typo in comment.
+ 	(debug_varref): Ditto.
+ 	* tree-flow.h: Ditto.
+ 	* tree-simple.c (is_simple_stmt): New function.
+ 	(is_simple_compstmt): New function.
+ 	(is_simple_expr): Fix typo in comment.
+ 	(is_simple_rhs): Allow conditional expressions.
+ 	(is_simple_modify_expr): Fix typo in comment.
+ 	(is_simple_modify_expr_lhs): Ditto.
+ 	(is_simple_binary_expr): Ditto.
+ 	(is_simple_condexpr): Ditto.
+ 	(is_simple_relop): Ditto.
+ 	(is_simple_unary_expr): Ditto.
+ 	Allow taking the address of a constant (for strings).
+ 	(is_simple_call_expr): Fix typo in comment.
+ 	Call is_simple_id to determine if the first operand is a SIMPLE
+ 	function identifier.
+ 	(is_simple_arglist): Fix typo in comment.
+ 	(is_simple_varname): Ditto.
+ 	(is_simple_const): Don't accept casts of SIMPLE constants.
+ 	(is_simple_id): Don't accept casts of SIMPLE identifiers.
+ 	(is_simple_val): Fix typo in comment.
+ 	(is_simple_arrayref): Ditto.
+ 	(is_simple_compref): Ditto.
+ 	(is_simple_compref_lhs): Ditto.
+ 	(is_simple_cast_op): Ditto.
+ 	(is_simple_exprseq): Allow NULL expression sequences.
+ 	* tree-simple.h (is_simple_stmt): Declare
+ 	(is_simple_compstmt): Declare.
+ 	* tree-ssa.c (follow_chain): Fix typo in comment.
+ 
+ 2002-04-22  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-pretty-print.c (dump_c_node): Don't print function
+ 	bodies of FUNCTION_DECL nodes.
+ 
+ 2002-04-19  Andreas Jaeger  <aj@suse.de>
+ 
+ 	* Makefile.in (c-call-graph.o): New.
+ 
+ 2002-04-18  Sebastian Pop  <s.pop@laposte.net>
+ 
+ 	* c-pretty-print.c (PRINT_FUNCTION_NAME): Define.
+ 	(dump_c_node): Call pretty_print_string to print string.
+ 	Call print_call_name to print function names.
+ 	(pretty_print_string): New function.
+ 	(print_call_name): New function.
+ 
+ 2002-04-17  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-simplify.c (simplify_do_stmt): Call is_simple_condexpr to test
+ 	if the conditional is in SIMPLE form.
+ 	(simplify_if_stmt): Ditto.
+ 
+ 2002-04-17  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-pretty-print.c (dump_c_node): Handle escape sequences in strings.
+ 	(op_symbol): Handle TRUTH_NOT_EXPR.
+ 	* c-simplify.c: Rename 'after' with 'post' and 'before' with 'pre'
+ 	everywhere.
+ 	Re-group some functions and add comments.
+ 	(simplify_stmt): Update calls to simplify_for_stmt,
+ 	simplify_while_stmt, simplify_do_stmt and simplify_switch_stmt.
+ 	Call simplify_if_stmt.
+ 	Do not test if expression is in SIMPLE form before calling
+ 	simplify_expr.
+ 	Call convert_to_stmt_chain to emit statement trees for side effects
+ 	found while simplifying.
+ 	(simplify_for_stmt): Re-implement.  Do not change structure of the
+ 	statement.  Simplify each header expression and emit side effects
+ 	at sequence points.
+ 	(simplify_while_stmt): Ditto.
+ 	(simplify_do_stmt): Ditto.
+ 	(simplify_switch_stmt): Ditto.
+ 	(new_simplified_if): Rename to simplify_if_stmt.
+ 	Call simplify_expr to simplify the conditional.
+ 	(simplify_if_stmt): New name for new_simplified_if.
+ 	(simplify_expr): Do not default simple_test_f to is_simple_expr.
+ 	If simple_test_f is not set, abort.
+ 	Handle COMPOUND_EXPR, MODIFY_EXPR, TRUTH_ANDIF_EXPR,
+ 	TRUTH_ORIF_EXPR, SAVE_EXPR and EXPR_WITH_FILE_LOCATION.
+ 	(simplify_arglist): Rename to simplify_tree_list.
+ 	(simplify_tree_list): New name for simplify_arglist.
+ 	(simplify_boolean_expr): New function.
+ 	(simplify_compound_expr): New function.
+ 	(tree_build_scope): Use SCOPE_BEGIN_P instead of TREE_LANG_FLAG_0
+ 	to access scope operands.  Use COMPOUND_BODY instead of
+ 	TREE_OPERAND to access the body of the compound statement.
+ 	(add_tree): Use a TREE_LIST container instead of directly chaining the
+ 	trees.
+ 	(add_assignment_tree): Rename to add_modify_stmt.  Update all
+ 	callers.
+ 	(add_modify_stmt): New name for add_assignment_tree.
+ 	(insert_before_continue_end): Do nothing it the tree to insert is
+ 	NULL.
+ 	(copy_stmt_chain): Rename to deep_copy_list.  Update all callers.
+ 	(deep_copy_list): New name for copy_stmt_chain.
+ 	(copy_stmt): Rename to deep_copy_node.  Update all callers.
+ 	(deep_copy_node): New name for copy_stmt.  Handle TREE_LIST
+ 	trees.
+ 	(insert_before_first): New function.
+ 	(is_binop): Add COMPOUND_EXPR.
+ 	(convert_to_stmt_chain): New function.
+ 	* tree-cfg.c (make_for_stmt_blocks): Fix comment.
+ 	* tree-simple.c (is_simple_condexpr): New function.
+ 	(is_simple_const): Allow casts of SIMPLE constants.
+ 	(is_simple_id): Allow casts of SIMPLE identifiers.
+ 	(is_simple_cast): Call is_simple_cast_op.
+ 	(is_simple_cast_op): New function.
+ 	(is_simple_exprseq): New function.
+ 	* tree-simple.h (deep_copy_list): Declare.
+ 	(deep_copy_node): Declare.
+ 	(is_simple_cast_op): Declare.
+ 	(is_simple_exprseq): Declare.
+ 
+ 2002-04-03  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-simplify.c (simplify_expr): Add arguments simple_tree_f and
+ 	is_lhs.  Update all callers.
+ 	Call simplify_call_expr, simplify_cond_expr, simplify_arglist and
+ 	simplify_modify_expr.
+ 	Call is_unop and is_binop to check for unary and binary operators.
+ 	(simplify_binary_expr): Remove.
+ 	(simplify_call_expr): New function.
+ 	(simplify_arglist): New function.
+ 	(simplify_cond_expr): New function.
+ 	(simplify_modify_expr): New function.
+ 	(keep_stmt_p): Remove.
+ 	(is_binop): New function.
+ 	(is_unop): New function.
+ 	(simplify_stmt): Don't call keep_stmt_p.
+ 	(simplify_decl_stmt): Call add_assignment_tree.
+ 	* tree-simple.c: Include c-tree.h
+ 	Add expression-statements to the SIMPLE grammar.
+ 	(is_simple_modify_expr_lhs): New function.
+ 	(is_simple_modify_expr): Call it.
+ 	(is_simple_relop): Update comment.
+ 	(is_simple_unary_expr): Allow expression-statements.
+ 	(is_simple_arglist): New function.
+ 	(is_simple_call_expr): Call it.
+ 	(is_simple_id): Accept expressions taking the address of a
+ 	function.
+ 	* tree-simple.h (is_simple_modify_expr_lhs): Declare.
+ 	(is_simple_arglist): Declare.
+ 
+ 2002-03-21  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (c-simplify.o): Add dependency on varray.h.
+ 	* c-simplify.c: Include varray.h.
+ 	Remove comments with SIMPLE grammar.
+ 	(simplify_array_ref): New.
+ 	(simplify_self_mod_expr): New.
+ 	(simplify_component_ref): New.
+ 	(add_assignment_tree): New.
+ 	(simplify_expr): Call simplify_array_ref to simplify array
+ 	references.
+ 	Call simplify_self_mod_expr to simplify ++, --, += and -=
+ 	expressions.
+ 	Call simplify_component_ref to simplify references to structures.
+ 	(simplify_binary_expr): Do not check whether the expression is
+ 	already in SIMPLE form.
+ 	* tree-simple.c: Document changes from original SIMPLE grammar.
+ 	(is_simple_unary_expr): Add check for *ID.
+ 	(is_simple_call_expr): Update comments.
+ 	(is_simple_const): Ditto.
+ 	(is_simple_id): Do not accept *ID expressions.
+ 	(is_simple_val): Update comments.
+ 	(is_simple_arrayref): Accept any variable name as the base address.
+ 	(is_simple_compref_lhs): New.
+ 	(is_simple_compref): Call it.
+ 	* tree-simple.h (is_simple_compref_lhs): Declare.
+ 
+ 2002-03-18  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (C_AND_OBJC_OBJS): Add tree-simple.o
+ 	(tree-simple.o): New rule.
+ 	* c-simplify.c (simplified_p): Remove.
+ 	(simplified_rec_p): Remove.
+ 	(simplified_condition_p): Remove.
+ 	(simplify_for_stmt): Call is_simple_expr instead of
+ 	simplified_condition_p.
+ 	(simplify_while_stmt): Ditto.
+ 	(simplify_do_stmt): Call is_simple_expr instead of simplified_p.
+ 	(new_simplified_if): Call is_simple_expr instead of
+ 	simplified_rec_p.
+ 	(simplify_decl_stmt): Update comment.
+ 	(simplify_expr): Return the original expression if it's already
+ 	in SIMPLE form.
+ 	Do not special case most binary and unary expressions.
+ 	When simplifying array references, create temporary variables to
+ 	hold the base address for the array.
+ 	Simplify COMPONENT_REF expressions separately.
+ 	Call simplify_binary_expr to handle most binary expressions.
+ 	(simplify_binary_expr): New function.
+ 	(keep_stmt_p): Call is_simple_unary_expr to determine whether the
+ 	statement should be kept or not.
+ 	* tree-simple.c: New file.
+ 	* tree-simple.h (is_simple_expr): Declare.
+ 	(is_simple_rhs): Declare.
+ 	(is_simple_modify_expr): Declare.
+ 	(is_simple_binary_expr): Declare.
+ 	(is_simple_binop): Declare.
+ 	(is_simple_relop): Declare.
+ 	(is_simple_unary_expr): Declare.
+ 	(is_simple_call_expr): Declare.
+ 	(is_simple_const): Declare.
+ 	(is_simple_id): Declare.
+ 	(is_simple_varname): Declare.
+ 	(is_simple_val): Declare.
+ 	(is_simple_arrayref): Declare.
+ 	(is_simple_compref): Declare.
+ 	(is_simple_cast): Declare.
+ 	* cp/Make-lang.in (CXX_C_OBJS): Add tree-simple.o
+ 
+ 2002-03-18  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-simple.h: New file.
+ 	* Makefile.in (c-simplify.o): Add dependency on tree-simple.h
+ 	* c-simplify.c: Reformat some comments.
+ 	(tree_last_decl): Declare.
+ 
+ 2002-03-18  Sebastian Pop  <s.pop@laposte.net>
+ 
+ 	* c-simplify.c (insert_stmt_chain): Delete.
+ 	(simplified_condition_p, insert_after_case_labels): New.
+ 	(simplify_stmt, simplify_for_stmt, simplify_while_stmt,
+ 	simplify_do_stmt, new_simplified_if, simplify_switch_stmt):
+ 	Returns a single node, generate a chain of statements to be executed
+ 	before the if, and a list of new variables.
+ 	(new_simplified_if): Simplify clauses.
+ 	(simplify_expr): Remove unused parameter scope.
+ 
+ 2002-03-14  Sebastian Pop  <s.pop@laposte.net>
+ 
+ 	* c-simplify.c (simplify_switch_stmt, simplify_expr): Add scope
+ 	parameter.
+ 	(simplify_while_stmt, simplify_do_stmt, simplify_for_stmt): Avoid
+ 	negating loop condition during simplification.
+ 	(new_simplified_if): Don't simplify the IF_BODY.
+ 	(copy_stmt_chain): Use copy_stmt.
+ 	(copy_stmt): New function.
+ 
+ 2002-02-28  Sebastian Pop  <s.pop@laposte.net>
+ 
+ 	* tree-dfa.c (find_refs_in_stmt): Changed if/else statements in
+ 	a switch.
+ 
+ 2002-02-28  Sebastian Pop  <s.pop@laposte.net>
+ 
+ 	* c-simplify.c (simplify_if_stmt): Deleted.
+ 	(new_simplified_if): New function.
+ 	(make_type_writable): New function.
+ 	(insert_before_continue_end): New function.
+ 	(insert_before_continue): New function.
+ 	(copy_stmt_chain): New function.
+ 	(insert_stmt_chain): New function.
+ 	(update_line_number): New function.
+ 	(simplified_p): New function.
+ 	(simplified_rec_p) New function.
+ 	(simplify_stmt): Modify the way to call simplification
+ 	of COMPOUND_STMT, FOR_STMT, WHILE_STMT, DO_STMT, IF_STMT,
+ 	and SCOPE_STMT in order to avoid to execute the code after
+ 	the switch.  Add FILE_STMT, LABEL_STMT, GOTO_STMT, ASM_STMT cases.
+ 	Simplified a little the code after the switch.
+ 	(simplify_for_stmt): Change functions parameters.
+ 	Add code to simplify the FOR_INIT_STMT, FOR_COND, FOR_EXPR.
+ 	(simplify_while_stmt): Change functions parameters.
+ 	Add code to simplify the WHILE_COND.
+ 	(simplify_do_stmt): Change functions parameters.
+ 	Add code to simplify the DO_COND.
+ 	(simplify_switch_stmt): Change functions parameters.
+ 	(simplify_expr): Remove scope parameter.
+ 	Avoid to introduce a new temporary variable for an expression
+ 	that is already simplified.
+ 	([ARRAY|COMPONENT]_REF, COND_EXPR): Handle them apart.
+ 	(TRUTH_ANDIF_EXPR, TRUTH_ORIF_EXPR): Avoid to evaluate the second
+ 	operand if the value can be deduced from the first one.
+ 	(keep_stmt_p): Add some other cases in which we don't need to keep
+ 	a statement after its simplification.
+ 
+ 2002-02-28  Sebastian Pop  <s.pop@laposte.net>
+ 
+ 	* Makefile.in: Add c-call-graph.o dependence.
+ 	* c-call-graph.c: New file.
+ 	* c-decl.c (c_expand_body): Add an entry point for call-graph.
+ 	* tree-dump.c (dump_files): Add the flag dump-call-graph.
+ 	* tree.h (tree_dump_index): Add TDI_xml.
+ 
+ 2002-02-28  Sebastian Pop  <s.pop@laposte.net>
+ 
+ 	* c-pretty-print.c (dump_c_tree): Declare it extern.
+ 	(dump_c_node): Declare it extern.
+ 	(dump_c_scope_vars): Deleted, some code moved in print_declaration ().
+ 	(print_declaration): New function.
+ 	(print_function_decl): New function.
+ 	(print_struct_decl): New function.
+ 	(INDENT_PRINT_C_NODE): Deleted.
+ 	(INDENT): New macro.
+ 	(NIY): Define the macro body in a block.
+ 	(dump_c_node): Add dumping for TREE_PURPOSE operand in TREE_LIST.
+ 	[VOID|INTEGER|REAL|COMPLEX|VECTOR|ENUMERAL|BOOLEAN|CHAR]_TYPE nodes:
+ 	insert some code from print-tree.c:print_node_brief () in order to
+ 	stabilise the type printing.
+ 	[RECORD|UNION]_TYPE nodes: Don't print their contents by default,
+ 	move the existing code in print_struct_decl ().
+ 	[POSTDECREMENT|POSTINCREMENT]_EXPR: Print the operand in post postion.
+ 	[MIN|MAX|ABS]_EXPR: New code for printing these nodes.
+ 	FOR_STMT: Don't print the FOR_BODY if it is not present.
+ 	RETURN_STMT: Don't print the return expression for a void function.
+ 	ASM_STMT: New code for printing this node.
+ 	SCOPE_STMT: Use print_declaration instead of dump_c_scope_vars.
+ 	COMPOUND_LITERAL_EXPR: Add the node as not implemented yet.
+ 	(op_prio): Fix switch indent.
+ 	Add node EXPR_WITH_FILE_LOCATION with priority 16.
+ 	(op_symbol): Fix switch indent.
+ 
+ 2002-01-25  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (c-pretty-print.o): Add dependency on errors.h.
+ 	* c-decl.c (c_expand_body): React to -ftree-dump-simple.
+ 	* c-pretty-print.c: Fix typo in header comment.
+ 	(NYI): Flush output buffer, dump the tree and abort.
+ 	(dump_c_node): Add unparsing code for ERROR_MARK, IDENTIFIER_NODE,
+ 	ARRAY_TYPE, UNION_TYPE, STRING_CST, CEIL_DIV_EXPR, FLOOR_DIV_EXPR,
+ 	ROUND_DIV_EXPR, TRUNC_MOD_EXPR, FLOOR_MOD_EXPR, ROUND_MOD_EXPR,
+ 	RDIV_EXPR, EXACT_DIV_EXPR, LROTATE_EXPR, RROTATE_EXPR,
+ 	BIT_ANDTC_EXPR, BIT_NOT_EXPR, UNORDERED_EXPR, SAVE_EXPR and
+ 	EXPR_WITH_FILE_LOCATION.
+ 	Unify unparsing code for common binary and unary expressions.
+ 	Handle indirect references like any other unary expression.
+ 	(dump_c_scope_vars): Remove unused variable 'context'.
+ 	Call dump_c_node to print the type.
+ 	(dump_c_indirect_ref): Remove.
+ 	(op_prio): New function.
+ 	(op_symbol): New function.
+ 	* c-simplify.c (simplify_stmt): Do not simplify a return
+ 	expression, only its second operand.
+ 	Fix capitalization in error message.
+ 	(simplify_expr): Add documentation.
+ 	Fix capitalization in error message.
+ 	* tree-dump.c (dump_files): Add entry for -fdump-tree-simple.
+ 	(dump_options): Add entry for -unparse.
+ 	* tree.h (TDI_simple): Define.
+ 	(TDF_UNPARSE): Define.
+ 	* doc/invoke.texi: Document -fdump-tree-simple.
+ 
+ 2002-01-23  Sebastian Pop  <s.pop@laposte.net>
+ 
+ 	* c-pretty-print.c: Clean C++ comments.
+ 	(debug_output_buffer): Remove declaration and definition.
+ 	* diagnostic.h (debug_output_buffer): Add declaration.
+ 	* diagnostic.c (debug_output_buffer): Add definition.
+ 
+ 2002-01-21  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (find_refs_in_stmt): Fix capitalization in error
+ 	message.
+ 	(find_refs_in_expr): Ditto.
+ 
+ 2002-01-20  Diego Novillo  <dnovillo@redhat.com>
+ 	    Sebastian Pop  <s.pop@laposte.net>
+ 
+ 	* Makefile.in: Add c-simplify.o.
+ 	* cp/Make-lang.in: Ditto.
+ 	* c-decl.c (c_expand_body): Call simplify_stmt() before
+ 	calling optimize_tree().
+ 	* c-simplify.c: New file.
+ 	* c-tree.h (simplify_stmt): Declare.
+ 	(print_c_tree)
+ 	* tree-dfa.c (find_refs_in_stmt): Fix error message for unhandled
+ 	statement codes.
+ 
+ 2002-01-20  Sebastian Pop  <s.pop@laposte.net>
+ 
+ 	* Makefile.in: Add c-pretty-print.o.
+ 	* cp/Make-lang.in: Ditto.
+ 	* c-pretty-print.c: New file.
+ 	* c-tree.h (print_c_tree): Declare.
+ 	(print_c_node): Declare.
+ 	(debug_c_tree): Declare.
+ 	(debug_c_node): Declare.
+ 
+ 2001-12-29  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* c-lang.c (c_post_options): Move code to enable tree-ssa
+ 	if -Wuninitialized is used ...
+ 	* c-common.c (c_common_post_options): ... here.
+ 
+ 2001-12-29  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (tree-optimize.o): Don't depend on c-common.h
+ 	* tree-cfg.c: Don't include c-tree.h.  Explain why we need to
+ 	include c-common.h.
+ 	* tree-dfa.c: Explain why we need to include c-common.h.
+ 	* tree-ssa.c: Ditto.
+ 	* tree-optimize.c: Don't include c-common.h
+ 
+ 2001-12-21  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	Revert my patch of 2001-07-23 for the moment.
+ 
+ 2001-10-15  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (create_varref): If the new reference is inside a
+ 	statement, add it to the list of references for that statement.
+ 
+ 2001-10-14  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Merge from mainline:
+ 
+ 	Tue Sep 11 11:37:52 CEST 2001  Jan Hubicka  <jh@suse.cz>
+ 
+ 		* basic-block.h (cached_make_edge): New.
+ 		(make_edge): Remove first parameter.
+ 		* flow.c (cached_make_edge): Rename from make_edge; return
+ 		newly created edge; use obstack allocation.
+ 		(make_edge): New.
+ 		(flow_call_edges_add): Updaet make_edge call.
+ 		(add_noreturn_fake_exit_edges): Likewise.
+ 		(connect_infinite_loops_to_exit): Liekwise.
+ 		(make_label_edge, make_edges, find_sub_basic_blocks): Use
+ 		cached_make_edge.
+ 		* profile.c (branch_prob): Update make_edge call.
+ 		* ssa-dce.c (ssa_eliminate_dead_code): Likewise.
+ 
+ 2001-10-14  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (tree-ssa.o): Remove dependency on flags.h.
+ 	(tree-optimize.o): Add dependency on flags.h.
+ 	* bb-reorder.c (fixup_reorder_chain): Update call to make_edge.
+ 	* c-lang.c (c_post_options): Set flag_tree_ssa if -Wuninitialized
+ 	is given.
+ 	* ifcvt.c (find_if_case_1): Update call to make_edge.
+ 	* toplev.c (toplev_main): Do not warn about -Wuninitialized without
+ 	-O if -ftree-ssa is used.
+ 	* tree-cfg.c (dot_dump_file): Remove.
+ 	(dot_dump_flags): Remove.
+ 	(cfg_dump_file): Rename to dump_file.
+ 	(cfg_dump_flags): Rename to dump_flags.
+ 	(remove_bb_ann): New function.
+ 	(tree_find_basic_blocks): Do not open dump files at the beginning
+ 	of the function.
+ 	Do not call delete_cfg.
+ 	Create annotations for ENTRY_BLOCK_PTR and EXIT_BLOCK_PTR.
+ 	(make_for_stmt_blocks): Update FOR_INIT_STMT_BB and FOR_COND_BB
+ 	when creating the header blocks.
+ 	Create the blocks for the loop body before the expression block.
+ 	(make_while_stmt_blocks): Update END_WHILE_BB when creating the
+ 	header blocks.
+ 	Create the blocks for the loop body before the end-while block.
+ 	(make_do_stmt_blocks): Update DO_COND_BB when creating header
+ 	blocks.
+ 	Create the blocks for the loop body before the block for DO_COND.
+ 	(create_bb): When creating loop header blocks, allocate space for
+ 	the header_blocks union.
+ 	Call create_bb_ann to create a new annotation.
+ 	(remove_bb_ann): New function.
+ 	(tree_split_bb): New function.
+ 	(make_edges): Remove first argument from call to make_edge,
+ 	make_ctrl_stmt_edges, make_exit_edges, make_for_stmt_edges,
+ 	make_while_stmt_edges, make_do_stmt_edges, make_if_stmt_edges,
+ 	make_goto_stmt_edges, make_break_stmt_edges and
+ 	make_continue_stmt_edges.
+ 	When creating edges for the default label, remove the fallthru edge
+ 	that was created for the associated SWITCH_STMT entry block.
+ 	Do not call delete_unreachable_blocks.
+ 	Call tree_cleanup_cfg.
+ 	(make_ctrl_stmt_edges): Remove first argument.
+ 	(make_exit_edges): Remove first argument.
+ 	If the last element of the block is an EXPR_STMT, assume that it is
+ 	the call to a non-returning function and make an edge to the exit
+ 	block.
+ 	Do not call make_return_stmt_edges.  Call make_edge directly.
+ 	(make_for_stmt_edges): Remove first argument.
+ 	Simplify the graph for infinite and zero-iteration loops.
+ 	(make_while_stmt_edges): Remove first argument.
+ 	Simplify the graph for infinite and zero-iteration loops.
+ 	(make_do_stmt_edges): Remove first argument.
+ 	Simplify the graph for infinite and one-iteration loops.
+ 	(make_if_stmt_edges): Remove first argument.
+ 	Simplify the graph for always-true and always-false conditionals.
+ 	(make_goto_stmt_edges): Remove first argument.
+ 	(make_break_stmt_edges): Remove first argument.
+ 	(make_continue_stmt_edges): Remove first argument.
+ 	(make_return_stmt_edges): Remove.
+ 	(tree_cleanup_cfg): New function.
+ 	(delete_unreachable_blocks): Do not react to -Wunreachable-code.
+ 	Write to dump file blocks that have been removed.
+ 	Call remove_edge.
+ 	(is_ctrl_altering_stmt): If the statement contains a call to a
+ 	non-returning function, return 1.
+ 	(delete_cfg): Call remove_bb_ann.  Also remove annotations for
+ 	ENTRY_BLOCK_PTR and EXIT_BLOCK_PTR.
+ 	(latch_block): Use WHILE_COND_BB instead of END_WHILE_BB.
+ 	(insert_stmt_tree_before): Use cfg_dump_file instead of dump_file.
+ 	(insert_before_ctrl_stmt): Ditto.
+ 	(insert_before_normal_stmt): Ditto.
+ 	(insert_stmt_tree_after): Ditto.
+ 	(insert_after_ctrl_stmt): Ditto.
+ 	(insert_after_normal_stmt): Ditto.
+ 	(replace_expr_in_tree): Ditto.
+ 	(insert_bb_before): Ditto.
+ 	* tree-dfa.c (tree_find_varrefs): Call find_refs_in_expr when the
+ 	tree is not a statement.
+ 	(find_refs_in_stmt): Update comments.
+ 	Do not deal with FOR_STMT and DO_STMT trees separately.
+ 	When processing VAR_DECLs, call find_refs_in_expr with the
+ 	declaration, not its initial value.
+ 	(find_refs_in_expr): When processing COMPONENT_REFs and ARRAY_REFs,
+ 	recurse using the same reference type that was given by the
+ 	original caller.
+ 	(create_varref): Insert new PHI terms at the beginning of the
+ 	BB_REFS array, not the end.
+ 	* tree-flow.h (struct for_header_blocks): Declare.
+ 	(union header_blocks): Declare.
+ 	(struct bb_ann_def): Add new field 'loop_hdr'.
+ 	(BB_ANN): Re-define so that it can be used as an lvalue.
+ 	(BB_PARENT): Ditto.
+ 	(BB_REFS): Ditto.
+ 	(BB_PREV_CHAIN): Ditto.
+ 	(BB_BINDING_SCOPE): Ditto.
+ 	(BB_LOOP_HDR): Define.
+ 	(FOR_INIT_STMT_BB): Redefine using BB_LOOP_HDR.
+ 	(FOR_COND_BB): Ditto.
+ 	(FOR_EXPR_BB): Ditto.
+ 	(DO_COND_BB): Ditto.
+ 	(END_WHILE_BB): New name for WHILE_COND_BB.
+ 	(tree_warn_uninitialized): Declare.
+ 	(tree_cleanup_cfg): Declare.
+ 	(tree_split_bb): Declare.
+ 	* tree-optimize.c: Include flags.h.
+ 	(init_tree_flow): New function.
+ 	(optimize_tree): Call build_tree_ssa instead of building SSA
+ 	in-place.
+ 	(build_tree_ssa): New function.
+ 	* tree-optimize.h (build_tree_ssa): Declare.
+ 	* tree-ssa.c: Don't include toplev.h
+ 	(tree_warn_uninitialized): Define.
+ 	(tree_compute_rdefs): Do not call is_upward_exposed.  Instead
+ 	traverse all the uses of each variable and warn if the use is
+ 	reached by the ghost definition.
+ 
+ 2001-10-10  Graham Stott  <grahams@redhat.com>
+ 
+ 	* tree-cfg.c (create_bb): Add new binding_scope parameter which allows
+ 	the binding scope either to be explicitly specified if non-zero.
+ 	(make_blocks): Update call to create_bb.
+ 	(make_for_stmt_blocks): Ditto.
+ 	(make_while_stmt_blocks): Ditto.
+ 	(make_do_stmt_blocks): Ditto.
+ 	(make_if_stmt_blocks): Ditto.
+ 	(make_switch_stmt_blocks): Ditto.
+ 	(create_maximal_bb): Ditto.
+ 	(make_edges): If a statement expression is in the last basic
+ 	block create an edge to EXIT_BLOCK_PTR and not the next block.
+ 	(insert_before_normal_stmt): Pass the appropriate binding scope to
+ 	create_bb.
+ 
+ 2001-10-01  Graham Stott  <grahams@redhat.com>
+ 	    Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-optimize.c (optimize_tree): Early return if the program has
+ 	errors.
+ 
+ 2001-09-30  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-optimize.c (optimize_tree): Compute reaching definitions
+ 	after building SSA.
+ 
+ 2001-09-30  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-cfg.c (insert_after_ctrl_stmt): Remove unused argument.
+ 	(make_blocks): Pop top element from scope binding stack when an end
+ 	of scope statement is found.
+ 	(create_bb): Remove code for popping top element from scope binding
+ 	stack.
+ 	Do not push basic block 0 to initialize scope binding stack.
+ 	(insert_stmt_tree_after): Remove unused argument from call to
+ 	insert_after_ctrl_stmt.
+ 	(tree_dump_bb): Dump BB_BINDING_SCOPE if defined.
+ 	* doc/invoke.texi: Document debugging option -ftree-dump-ssa-rdefs.
+ 
+ 2001-09-29  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (tree-ssa.o): Update dependencies.
+ 	(tree-cfg.o): Ditto.
+ 	(tree-optimize.o): Ditto.
+ 	* basic-block.h (BB_CONTROL_EXPR): Define.
+ 	(BB_CONTROL_ENTRY): Define.
+ 	* c-common.h (TDF_RDEFS): Define.
+ 	* c-dump.c (dump_option_value_in): Add entry for TDF_RDEFS.
+ 	* tree-cfg.c: Include flags.h and c-tree.h
+ 	(binding_stack): New local variable.
+ 	(delete_block): Rename to delete_bb.
+ 	(tree_find_basic_blocks): Initialize varray 'binding_stack'.
+ 	Call make_blocks with an additional argument.
+ 	Adjust size of varray 'basic_block_info' after building CFG.
+ 	(make_blocks): Add new argument prev_chain_p.
+ 	Update all callers and callees.
+ 	Create sub-graphs for statement-expressions.
+ 	Update prev_chain_p when accessing the next tree in the chain.
+ 	(make_for_stmt_blocks): Add new argument prev_chain_p.
+ 	Update all callers and callees.
+ 	Update flags for control header blocks with BB_CONTROL_ENTRY and/or
+ 	BB_CONTROL_EXPR.
+ 	(make_while_stmt_blocks): Ditto.
+ 	(make_do_stmt_blocks): Ditto.
+ 	(make_if_stmt_blocks): Ditto.
+ 	(make_switch_stmt_blocks): Ditto.
+ 	(create_maximal_bb): Add new argument prev_chain_p.
+ 	Update all callers and callees.
+ 	(create_bb): Add new argument prev_chain_p.
+ 	Push basic block 0 the first time into the binding scope stack.
+ 	Associate the new basic block to the binding scope at the top of
+ 	the binding stack.
+ 	Push new binding scopes when a SCOPE_BEGIN statement is found.
+ 	Pop the top binding scope when a SCOPE_END statement is found.
+ 	(make_edges): Handle statement expressions.
+ 	Handle case labels preceded by scope statements in switch
+ 	statements.
+ 	(make_for_stmt_edges): Use FOR_INIT_STMT_BB, FOR_COND_BB and
+ 	FOR_EXPR_BB to access the header basic blocks.
+ 	(delete_unreachable_blocks): Call delete_bb instead of
+ 	delete_block.
+ 	(delete_block): Rename to delete_bb.
+ 	(block_invalidates_loop): Use data references to find calls to
+ 	non-pure functions.
+ 	(is_ctrl_stmt): Reformat.
+ 	(loop_body): New function.
+ 	(set_loop_body): New function.
+ 	(stmt_starts_bb_p): Statement expression trees also start a new
+ 	basic block.
+ 	(delete_cfg): Call VARRAY_FREE to delete all the references in each
+ 	basic block.
+ 	(latch_block): Use FOR_EXPR_BB, WHILE_COND_BB and DO_COND_BB to
+ 	find out the latch block for the loop.
+ 	(last_exec_stmt): New function.
+ 	(is_exec_stmt): Scope statements that begin a scope are also
+ 	considered executables.
+ 	(is_statement_expression): New function.
+ 	(first_non_decl_stmt): New function.
+ 	(first_decl_stmt): New function.
+ 	(first_non_label_in_bb): New function.
+ 	(insert_stmt_tree_before): New function.
+ 	(insert_before_ctrl_stmt): New function.
+ 	(insert_before_normal_stmt): New function.
+ 	(insert_stmt_tree_after): New function.
+ 	(insert_after_ctrl_stmt): New function.
+ 	(insert_after_normal_stmt): New function.
+ 	(insert_after_loop_body): New function.
+ 	(replace_expr_in_tree): New function.
+ 	(find_expr_in_tree): New function.
+ 	(insert_bb_before): New function.
+ 	(tree_dump_bb): Display the contents of BB_PREV_CHAIN_P.
+ 	* tree-dfa.c (tree_find_varrefs): Use accessor macros for array
+ 	'referenced_symbols'.
+ 	(find_refs_in_stmt): Do not process error_mark_node trees.
+ 	Handle statement-expression nodes as any other statement tree.
+ 	Do not call find_refs_in_stmt_expr.
+ 	(find_refs_in_stmt_expr): Remove.
+ 	(add_ref_to_sym): Remove.
+ 	(add_ref_to_bb): Remove.
+ 	(find_refs_in_expr): Do not process error_mark_node trees.
+ 	ADDR_EXPR trees are not variable references except if used in a
+ 	CALL_EXPR node.
+ 	Handle EXPR_WITH_FILE_LOCATION nodes.
+ 	(create_varref): Remove variable 'is_new'.
+ 	Initialize data-flow arrays VARDEF_IMM_USES, VARDEF_RUSES,
+ 	VARDEF_PHI_CHAIN and VARUSE_RDEFS.
+ 	Do not call add_ref_to_sym and add_ref_to_bb.
+ 	(add_ref_symbol): Use accessor macros for varray
+ 	'referenced_symbols'.
+ 	(function_may_recurse_p): New function.
+ 	(get_fcalls): New function.
+ 	(find_declaration): New function.
+ 	(dump_varref): Handle NULL values of VARREF_EXPR.
+ 	Use VARDEF_PHI_CHAIN instead of VARPHI_CHAIN.
+ 	(dump_varref_list): Check if the list is NULL before traversing it.
+ 	* tree-flow.h (struct vardef): Add fields 'ruses', 'marked' and
+ 	'phi_chain'.
+ 	(VARDEF_RUSES): Define.
+ 	(VARDEF_MARKED): Define.
+ 	(VARDEF_PHI_CHAIN): Define.
+ 	(VARPHI_CHAIN): Remove.
+ 	(struct varphi): Remove.
+ 	(struct varuse): Add field 'rdefs'.
+ 	(VARUSE_RDEFS): Define.
+ 	(union varref_def): Remove field 'phi'.
+ 	(IS_GHOST_DEF): Define.
+ 	(IS_ARTIFICIAL_REF): Define.
+ 	(struct bb_ann_def): Add fields 'prev_chain_p' and 'binding_scope'.
+ 	(BB_PREV_CHAIN_P): Define.
+ 	(BB_BINDING_SCOPE): Define.
+ 	(FOR_INIT_STMT_BB): Define.
+ 	(FOR_COND_BB): Define.
+ 	(FOR_EXPR_BB): Define.
+ 	(WHILE_COND_BB): Define.
+ 	(DO_COND_BB): Define.
+ 	(IF_COND_BB): Define.
+ 	(CASE_COND_BB): Define.
+ 	(NREF_SYMBOLS): Define.
+ 	(REF_SYMBOL): Define.
+ 	(ADD_REF_SYMBOL): Define.
+ 	(FCALL_NON_PURE): Define.
+ 	(FCALL_PURE): Define.
+ 	(FCALL_BUILT_IN): Define.
+ 	(loop_body): Declare.
+ 	(set_loop_body): Declare.
+ 	(last_exec_stmt): Declare.
+ 	(is_statement_expression): Declare.
+ 	(first_non_decl_stmt): Declare.
+ 	(first_decl_stmt): Declare.
+ 	(first_non_label_in_bb): Declare.
+ 	(insert_stmt_tree_before): Declare.
+ 	(insert_stmt_tree_after): Declare.
+ 	(replace_expr_in_tree): Declare.
+ 	(find_expr_in_tree): Declare.
+ 	(insert_bb_before): Declare.
+ 	(function_may_recurse_p): Declare.
+ 	(get_fcalls): Declare.
+ 	(find_declaration): Declare.
+ 	(tree_compute_rdefs): Declare.
+ 	(analyze_rdefs): Declare.
+ 	(is_upward_exposed): Declare.
+ 	* tree-optimize.c (optimize_tree): Update name for varray
+ 	referenced_symbols.
+ 	Free varray referenced_symbols and call delete_ssa on exit.
+ 	* tree-ssa.c: Include flags.h, diagnostic.h and toplev.h.
+ 	(tree_build_ssa): Create ghost definitions before building FUD
+ 	chains.
+ 	(insert_phi_terms): Use accessor macros for 'referenced_symbols'.
+ 	Ignore ghost definitions when placing PHI terms.
+ 	(build_fud_chains): Call get_tree_ann to create an annotation for
+ 	the symbol if it doesn't already have one.
+ 	(search_fud_chains): Reformat comments.
+ 	Do not initialize varray VARDEF_IMM_USES.
+ 	If a successor basic block does not have references, continue on to
+ 	the next one, do not stop.
+ 	Do not initialize varray VARDEF_PHI_CHAIN.
+ 	(delete_ssa): New function.
+ 	(delete_refs): New function.
+ 	(tree_compute_rdefs): New function.
+ 	(analyze_rdefs): New function.
+ 	(follow_chain): New function.
+ 	(is_upward_exposed): New function.
+ 
+ 2001-09-14  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-cfg.c (tree_find_basic_blocks): Remove call to
+ 	mark_critical_edges.
+ 	(create_maximal_bb): Do not create annotations for non-executable
+ 	statements.
+ 	(map_stmt_to_bb): Rename basic_block_ann with bb_ann.
+ 	(delete_cfg): Ditto.
+ 	(is_exec_stmt): Reformat.
+ 	(create_bb_ann): New function.
+ 	* tree-dfa.c (create_node): Remove.
+ 	(ref_symbols_list): Remove.
+ 	(create_tree_ann): Declare.
+ 	(referenced_symbols): Declare.
+ 	(tree_find_varrefs): Replace usage of linked lists with variable
+ 	arrays.
+ 	(create_varref): Remove second argument from call to
+ 	add_ref_symbol.
+ 	Update comments.
+ 	(add_ref_to_sym): Replace usage of linked lists with variable
+ 	arrays.
+ 	Declare static.
+ 	(add_ref_to_bb): Ditto.
+ 	(add_ref_symbol): Ditto.
+ 	(dump_varref_list): Ditto.
+ 	(debug_varref_list): Ditto.
+ 	(create_varref_list): Remove.
+ 	(push_ref): Remove.
+ 	(create_node): Remove.
+ 	(delete_varref_list): Remove.
+ 	(get_tree_ann): Call create_tree_ann if the tree doesn't have an
+ 	annotation already.
+ 	(create_tree_ann): New function.
+ 	* tree-flow.h (varref_list_def): Remove.
+ 	(vardef): Change type of field 'imm_uses' to 'varray_type'.
+ 	(varphi): Change type of field 'phi_chain' to 'varray_type'.
+ 	(varref_node_def): Remove.
+ 	(varref_node): Remove.
+ 	(VARREF_NODE_ELEM): Remove.
+ 	(VARREF_NODE_NEXT): Remove.
+ 	(VARREF_NODE_PREV): Remove.
+ 	(varref_list_def): Remove.
+ 	(varref_list): Remove.
+ 	(VARREF_LIST_FIRST): Remove.
+ 	(VARREF_LIST_LAST): Remove.
+ 	(tree_ann_def): Change type of field 'refs' to 'varray_type'.
+ 	(basic_block_ann_def): Rename to 'bb_ann_def'.
+ 	Change type of field 'refs' to 'varray_type'.
+ 	(basic_block_ann): Rename to 'bb_ann'.
+ 	(ref_symbols_list): Remove.
+ 	(referenced_symbols): Declare.
+ 	(add_ref_to_sym): Remove.
+ 	(add_ref_to_bb): Remove.
+ 	(add_ref_symbol): Remove.
+ 	(remove_ann_from_sym): Remove.
+ 	(create_varref_list): Remove.
+ 	(push_ref): Remove.
+ 	(delete_varref_list): Remove.
+ 	(debug_varref_list): Update argument type to be 'varray_type'.
+ 	(dump_varref_list): Ditto.
+ 	* tree-optimize.c: Include 'basic-block.h'.
+ 	(optimize_tree): Replace references to 'ref_symbols_list' with
+ 	'referenced_symbols'.
+ 	Remove call to delete_varref_list.
+ 	* tree-ssa.c (insert_phi_terms): Rename 'work_list' to
+ 	'work_stack'.
+ 	Use VARRAY_PUSH and VARRAY_TOP to access 'work_stack' instead of
+ 	maintaining the stack pointer in 'work_list_top'.
+ 	Remove code to grow 'work_stack'.
+ 	Remove references to 'work_list_top'.
+ 	Replace references to 'ref_symbols_list' with 'referenced_symbols'.
+ 	(build_fud_chains): Replace references to 'ref_symbols_list' with
+ 	'referenced_symbols'.
+ 	(search_fud_chains): If there are no variable references in the
+ 	basic block, return early.
+ 	Change usage of linked lists with variable arrays.
+ 
+ 2001-09-07  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-cfg.c (tree_find_basic_blocks): Document how to traverse
+ 	trees inside a basic block.
+ 	(make_for_stmt_blocks): Make sure that there is always a block for
+ 	FOR_EXPR, even if the loop does not have an expression.
+ 	Create a separate block for FOR_INIT_STMT.
+ 	(make_while_stmt_blocks): Always create an "end_while" block.
+ 	(make_if_stmt_blocks): Do not store IF_COND in the header block of
+ 	an IF statement.
+ 	(make_for_stmt_edges): Create an edge from the block header to the
+ 	block for FOR_INIT_STMT.
+ 	Determine the first block of the loop body calling BB_FOR_STMT on
+ 	the first executable statement in the body.
+ 	Remove the special case for missing FOR_EXPR trees.
+ 	(make_while_stmt_edges): Create a back edge from the end_while
+ 	block to the header block.
+ 	Determine the first block of the loop body calling BB_FOR_STMT on
+ 	the first executable statement in the body.
+ 	(make_do_stmt_edges): Determine the first block of the loop body
+ 	calling BB_FOR_STMT on the first executable statement in the body.
+ 	(condition_block): Rename to latch_block.  Return the latch
+ 	block for the given loop header.
+ 	(make_continue_stmt_edges): Rename condition_block to
+ 	latch_block.
+ 	(successor_block): Ditto.
+ 	* tree-flow.h (condition_block): Rename to latch_block.
+ 
+ 2001-09-06  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-dfa.c (tree_find_varrefs): Use TDF_REFS instead of TDF_VARREF.
+ 	* tree-flow.h (TDF_VARREF): Remove.
+ 
+ 2001-09-04  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* c-common.h (tree_dump_index): Add more comments.
+ 	(TDF_REFS): New dump flag.
+ 	* c-dump.c (dump_files): Name flags `tree' rather than `ast'.
+ 	(dump_option_value_info): New struct.
+ 	(dump_options): New array.
+ 	(dump_switch_p): Parse switch options symbolically.
+ 	* doc/invoke.texi (-fdump-ast): Rename to ...
+ 	(-fdump-tree): ... here. Document options are symbolic, and
+ 	not all are applicable. Combine ssa related flags into the other
+ 	tree dump flags.
+ 
+ 2001-08-27  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (tree-ssa.o): Update dependencies.
+ 	(tree-cfg.o): Ditto.
+ 	(tree-dfa.o): Ditto.
+ 	(tree-optimize.o): Ditto.
+ 
+ 2001-08-26  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (C_AND_OBJC_OBJS): Replace tree-opt.o with
+ 	tree-optimize.o.
+ 	(c-decl.o): Ditto.
+ 	(tree-ssa.o): Ditto.
+ 	(tree-cfg.o): Ditto.
+ 	(tree-dfa.o): Ditto.
+ 	(tree-opt.o): Ditto.
+ 	* c-decl.c: Replace tree-opt.h with tree-optimize.h.
+ 	(c_expand_body): Remove call to init_tree_opt.
+ 	* flow.c (flow_loop_dump): Do not display insn UIDs if this is not
+ 	an RTL basic block.
+ 	* tree-cfg.c: Replace tree-opt.h with tree-optimize.h.
+ 	(block_invalidates_loop): New local function.
+ 	(validate_loops): New function.
+ 	(tree_dump_bb): Display the loop depth of the block.
+ 	* tree-dfa.c: Replace tree-opt.h with tree-optimize.h.
+ 	* tree-flow.h (validate_loops): Declare.
+ 	* tree-opt.c: Rename to tree-optimize.c.
+ 	* tree-opt.h: Rename to tree-optimize.h.
+ 	* tree-optimize.c: Rename from tree-opt.c.
+ 	* tree-optimize.h: Rename from tree-opt.h.
+ 	* tree-ssa.c: Replace tree-opt.h with tree-optimize.h.
+ 	(tree_build_ssa): Call tree_dump_bb instead of tree_debug_bb.
+ 	* cp/Make-lang.in: Replace tree-opt.h with tree-optimize.h.
+ 
+ 2001-08-20  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* basic-block.h (basic_block): Remove field 'reachable'.
+ 	Add new field 'flags'.
+ 	(BB_REACHABLE): Define.
+ 	* c-common.h (tree_dump_index): Add TDI_cfg, TDI_dot, TDI_ssa.
+ 	* c-decl.c (c_decode_option): Skip '-f' prefix before calling
+ 	dump_switch_p.
+ 	* c-dump.c (dump_file_info): Add entries for -fdump-tree-cfg,
+ 	-fdump-tree-graphviz and -fdump-tree-ssa.
+ 	* flow.c (find_unreachable_blocks): Use BB_REACHABLE bit in bb->flags
+ 	instead of bb->reachable.
+ 	(delete_unreachable_blocks): Ditto.
+ 	* tree-cfg.c: Minor formatting changes throughout the file.
+ 	(DEBUG_TREE_FLOW): Remove.
+ 	(debug_tree_flow): Remove.
+ 	(cfg_dump_file): New local variable.
+ 	(dot_dump_file): New local variable.
+ 	(cfg_dump_flags): New local variable.
+ 	(dot_dump_flags): New local variable.
+ 	(tree_find_basic_blocks): Remove unused arguments.
+ 	Add code to react to -fdump-tree-cfg and -fdump-tree-graphviz.
+ 	Remove uses of DEBUG_TREE_FLOW.
+ 	(delete_unreachable_blocks): Use BB_REACHABLE bit in bb->flags
+ 	instead of bb->reachable.
+ 	(tree_dump_cfg): New.
+ 	(tree_debug_cfg): Call tree_dump_cfg().
+ 	(tree_cfg2dot): Accept a FILE pointer instead of a file name as
+ 	argument.
+ 	Name the graph with the current function name.
+ 	* tree-dfa.c: Minor formatting changes throughout the file.
+ 	(DEBUG_TREE_DFA): Remove.
+ 	(debug_tree_dfa): Remove.
+ 	(dump_file): New local variable.
+ 	(dump_flags): New local variable.
+ 	(tree_find_varrefs): Add code to react to -fdump-tree-ssa.
+ 	Remove uses of DEBUG_TREE_DFA.
+ 	(find_refs_in_expr): Remove uses of DEBUG_TREE_DFA.
+ 	(create_varref): Replace VARREF_BLOCK with VARREF_BB.
+ 	* tree-flow.h: Minor formatting changes throughout the file.
+ 	(VARREF_BLOCK): Rename to VARREF_BB.
+ 	(VARREF_NEXT): Remove.
+ 	(VARREF_PREV): Remove.
+ 	(TDF_VARREF): Define.
+ 	(tree_find_basic_blocks): Remove unused arguments.
+ 	(tree_dump_cfg): Declare.
+ 	(tree_cfg2dot): Change argument to FILE *.
+ 	* tree-opt.c: Minor formatting changes throughout the file.
+ 	(optimize_tree): Remove unused arguments in call to
+ 	tree_find_basic_blocks().
+ 	* tree-opt.h: Ditto.
+ 	* tree-ssa.c: Minor formatting changes throughout the file.
+ 	(DEBUG_TREE_SSA): Remove.
+ 	(debug_tree_ssa): Remove.
+ 	(dump_file): New local variable.
+ 	(dump_flags): New local variable.
+ 	(tree_build_ssa): Add code to react to -fdump-tree-ssa.
+ 	Remove uses of DEBUG_TREE_SSA.
+ 	(insert_phi_terms): Remove uses of DEBUG_TREE_SSA.
+ 	* doc/invoke.texi: Add documentation for -fdump-tree-cfg,
+ 	-fdump-tree-graphviz and -fdump-tree-ssa.
+ 	Replace existing references to -fdump-tree with -fdump-ast.
+ 
+ 2001-08-10  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* basic-block.h (basic_block): Add new field 'reachable'.
+ 	(expunge_block): Declare.
+ 	* flow.c (ENTRY_BLOCK_PTR): Initialize field 'reachable'.
+ 	(EXIT_BLOCK_PTR): Ditto.
+ 	(expunge_block): Remove static declaration.
+ 	(cleanup_cfg): Clear bb->aux on every basic block.
+ 	(find_unreachable_blocks): Use field 'reachable' when computing
+ 	reachability.
+ 	(delete_unreachable_blocks): Use field 'reachable'.
+ 
+ 	* tree-cfg.c: Rename all instance of 'node' with 'block.
+ 	(get_successor_block): Rename to successor_block.
+ 	(make_compound_stmt_edges): Remove.
+ 	(make_switch_stmt_edges): Remove.
+ 	(delete_unreachable_blocks): New.
+ 	(delete_block): New.
+ 	(make_blocks): Add new argument 'compound_stmt'.  Do not include
+ 	COMPOUND_STMT trees in the flowgraph.
+ 	(make_for_stmt_blocks): Include FOR_INIT_STMT in the entry block of
+ 	the loop.
+ 	If FOR_COND does not exist, create a tree holding the constant 1.
+ 	Add new argument 'compound_stmt'.
+ 	(make_while_stmt_blocks): Include WHILE_COND in the entry block of
+ 	the loop.
+ 	Add new argument 'compound_stmt'.
+ 	(make_do_stmt_blocks): Add new argument 'compound_stmt'.
+ 	(make_if_stmt_blocks): Add new argument 'compound_stmt'.
+ 	Include IF_COND in the IF header block.
+ 	(make_switch_stmt_blocks): Add new argument 'compound_stmt'.
+ 	Include SWITCH_COND in the SWITCH header block.
+ 	(create_maximal_bb): Remove argument 'is_loop_header'.
+ 	Add new argument 'compound_stmt'.
+ 	Update all callers.
+ 	Return the newly created basic block instead of its last statement.
+ 	Update comments.
+ 	Do not store control flow altering statements in bb->exit_stmt.
+ 	Only add executable statements to the block.
+ 	Annotate with 'compound_stmt' each tree added to the block.
+ 	(create_bb): Do not update annotation 'is_loop_header'.
+ 	(make_edges): Remove naive reachability analysis.
+ 	When a label node is found, add an edge from the immediately
+ 	enclosing switch statement.
+ 	Call delete_unreachable_blocks() after adding all the edges.
+ 	(make_ctrl_stmt_edges): Do not consider COMPOUND_STMT trees.
+ 	Do nothing for SWITCH_STMT trees.
+ 	(make_exit_edges): Use bb->end_tree instead of BB_EXIT_STMT.
+ 	(make_for_stmt_edges): Remove code that added edges for the block
+ 	holding FOR_INIT_STMT.
+ 	Update comments.
+ 	Do not consider the case where FOR_COND is NULL.
+ 	Call first_exec_stmt() to determine if FOR_BODY is empty.
+ 	Only create an edge from expr_bb to cond_bb if FOR_EXPR is
+ 	non-null.
+ 	(make_while_stmt_edges): Remove code that added edges for the block
+ 	holding WHILE_COND.
+ 	Update comments.
+ 	Call first_exec_stmt() to determine if WHILE_BODY is empty.
+ 	(make_do_stmt_edges): Call first_exec_stmt() to determine if
+ 	DO_BODY is empty.
+ 	(make_if_stmt_edges): Remove code that added edges for the block
+ 	holding IF_COND.
+ 	Call first_exec_stmt() to determine if THEN_CLAUSE or ELSE_CLAUSE
+ 	are empty.
+ 	(make_switch_stmt_edges): Remove.
+ 	(make_goto_stmt_edges): Use bb->end_tree instead of BB_EXIT_STMT.
+ 	(make_break_stmt_edges): Use bb->end_tree instead of BB_EXIT_STMT.
+ 	Call switch_parent() and loop_parent() to determine if the
+ 	statement is inside an appropriate control structure.
+ 	(make_continue_stmt_edges): Use bb->end_tree instead of
+ 	BB_EXIT_STMT.
+ 	(make_return_stmt_edges): Ditto.
+ 	(get_successor_block): Rename to successor_block.
+ 	Call first_exec_stmt() to find the first executable statement in
+ 	TREE_CHAIN.
+ 	(is_ctrl_stmt): Do not consider COMPOUND_STMT trees.
+ 	(stmt_starts_bb_p): Ditto.
+ 	(stmt_ends_bb_p): Reformat comments.
+ 	(delete_cfg): Reformat comments.
+ 	(find_loop_parent): Rename to loop_parent.
+ 	(get_condition_block): Rename to condition_block.
+ 	Update to use new index numbers for control structure header
+ 	blocks.
+ 	(switch_parent): New.
+ 	(first_exec_stmt): New.
+ 	(is_exec_stmt): New.
+ 	(tree_cfg2dot): Reformat comments.
+ 	* tree-dfa.c (find_refs): Remove.
+ 	(find_refs_in_stmt): New
+ 	(find_refs_in_stmt_expr): New.
+ 	(tree_find_varrefs): Look for variables doing a CFG traversal
+ 	instead of the trees.  Remove both arguments.
+ 	(find_refs_in_expr): Add new argument 'bb'.
+ 	Update all recursive calls.
+ 	(create_varref): Abort if the basic block 'bb' is NULL.
+ 	(add_ref_to_sym): Reformat comments.
+ 	(add_ref_symbol): Ditto.
+ 	(delete_varref_list): Ditto.
+ 	* tree-flow.h (struct tree_ann_def): Add 'compound_stmt'.
+ 	(TREE_COMPOUND_STMT): New macro.
+ 	(struct basic_block_ann_def): Remove 'exit_stmt' and
+ 	'is_loop_header'.
+ 	(BB_EXIT_STMT): Remove.
+ 	(BB_IS_LOOP_HEADER): Remove.
+ 	* tree-opt.c (optimize_tree): Call tree_find_varrefs() with no
+ 	arguments.
+ 	Only build DFA and SSA information if n_basic_blocks is greater
+ 	than zero.
+ 	* tree-ssa.c: Rename all instances of 'node' with 'block'.
+ 	(tree_build_ssa): Reformat comments.
+ 	(insert_phi_terms): Ditto.
+ 
+ 2001-08-01  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* tree-cfg.c (USE_TREE_IL): Remove.
+ 	(make_back_edges): Remove.
+ 	(make_fallthru_edge): Remove.
+ 	(get_outermost_scope_block): Remove.
+ 	(is_last_block_of_loop): Remove.
+ 	(tree_find_basic_blocks): Do not return early if 'errorcount' is set.
+ 	(make_edges): Do not treat back edges as a separate case.
+ 	Do not call make_fallthru_edge to create fall-through edges.
+ 	Do not emit a warning for unreachable blocks containing a single
+ 	closing brace.
+ 	(make_do_stmt_edges): Update comment.
+ 	(make_goto_stmt_edges): Do not call get_outermost_scope_block().
+ 	(make_break_stmt_edges): Do not call get_outermost_scope_block().
+ 	Do not call make_back_edges().
+ 	(make_continue_stmt_edges): Call find_loop_parent().  Emit an error
+ 	if the 'continue' statement is not inside a loop.  Call
+ 	get_condition_block() to find the target node.
+ 	(make_return_stmt_edges): Do not call get_outermost_scope_block().
+ 	(get_successor_block): Return EXIT_BLOCK_PTR if 'bb' is the last
+ 	block in the graph.
+ 	Return the condition node of the loop if 'bb' doesn't have a
+ 	natural successor and its parent is a loop header.
+ 	(tree_cfg2dot): Output fake edges with dotted lines.
+ 	* tree-dfa.c (USE_TREE_IL): Remove.
+ 	* tree-opt.c (USE_TREE_IL): Remove.
+ 	* tree-ssa.c (USE_TREE_IL): Remove.
+ 	* tree-flow.h (is_last_block_of_loop): Remove.
+ 
+ 2001-07-23  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Makefile.in (C_AND_OBJC_OBJS): Add tree-cfg.o, tree-dfa.o,
+ 	tree-ssa.o and tree-opt.o.
+ 	(c-decl.o): Add dependency on tree-opt.h
+ 	(tree-ssa.o): New rule.
+ 	(tree-cfg.o): New rule.
+ 	(tree-dfa.o): New rule.
+ 	(tree-opt.o): New rule.
+ 	* c-decl.c: Include tree-opt.h.
+ 	(c_expand_body): Call optimize_tree() when the -ftree-ssa flag is
+ 	given.
+ 	* flags.h (flag_tree_ssa): Declare.
+ 	* toplev.c (flag_tree_ssa): Define.
+ 	(lang_independent_options): Add -ftree-ssa.
+ 	* tree-cfg.c: New file.
+ 	* tree-dfa.c: New file.
+ 	* tree-flow.h: New file.
+ 	* tree-opt.c: New file.
+ 	* tree-opt.h: New file.
+ 	* tree-ssa.c: New file.
+ 	* cp/Make-lang.in (CXX_C_OBJS): Add tree-cfg.o, tree-dfa.o,
+ 	tree-opt.o and tree-ssa.o.
+ 	* doc/invoke.texi: Add documentation for -ftree-ssa.
+ 
+ 2001-07-23  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* Makefile.in (calls.o): Depend on intl.h.
+ 	* calls.c: Include intl.h.
+ 	(ECF_NEED_STACK_FRAME, ECF_NEED_ARG_FRAME): New flags.
+ 	(special_function_p): Detect when we need a stack or arg
+ 	frame. Don't optimize on length.
+ 	(setjmp_call_p): Remove.
+ 	(uninlinable_call_p): New function.
+ 	* tree.h (setjmp_call_p): Remove.
+ 	(uninlinable_call_p): Declare.
+ 
+ 2001-07-22  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* params.def (PARAM_MAX_INLINE_AST): New parameter.
+ 	(PARAM_ARG_INLINE_AST): New parameter.
+ 	* doc/invoke.texi (max-inline-ast, arg-inline-ast): Document
+ 	parameters.
+ 
+ Local Variables:
+ mode: change-log
+ change-log-default-name: "ChangeLog.tree-ssa"
+ End:
diff -Nrcpad gcc-3.4.3/gcc/LANGUAGES gcc-4.0.0/gcc/LANGUAGES
*** gcc-3.4.3/gcc/LANGUAGES	Fri Sep 27 12:48:02 2002
--- gcc-4.0.0/gcc/LANGUAGES	Fri Sep 17 21:54:20 2004
*************** time as we can formally start documentin
*** 6,64 ****
  serve as a repository for information on these interface and any incompatable
  changes we've made.
  
! 2001-02-26:
!   A DECL_INITIAL of NULL_TREE or error_mark_node in a VAR_DECL is no longer
!   taken to signify a tentative definition which should not be emitted until
!   end-of-file.  Frontends which want that behavior should set
!   DECL_DEFER_OUTPUT before calling rest_of_decl_compilation.
! 
! Aug 31, 1998:
!   The interface to HANDLE_PRAGMA has changed.  It now takes three arguments.
!   The first two are pointers to functions that should be used to read characters
!   from the input stream, and to push them back into the input stream respectively.
!   The third argument is a pointer to a null terminate string which is the first
!   word after #pragma.  The expression supplied by HANDLE_PRAGMA should return
!   nonzero if it parsed and implemented the pragma.  Otherwise it should return
!   zero, and leave the input stream as it was before the expression was evaluated.
! 
!   A new back-end definable macro has been added: INSERT_ATTRIBUTES.  This macro
!   allows backend to add attributes to decls as they are created.
! 
! Jun 10, 1998:
!   The interface to lang_decode_option has changed. It now uses and argc/argv
!   interface to allow for options that use more than one input string. The new
!   declaration is: int lang_decode_option (int argc, char** argv). It now
!   returns the number of input strings processed, or 0 if the option is
!   unknown.
! 
! Jun  7, 1998:
!   Front-ends must now define lang_init_options.  It is safe for this
!   function to do nothing.  See c-lang.c.
! 
! Apr 21, 1998:
!   Front ends which link with c-common or other files from the C/C++
!   front-ends may need to handle TI types.  Look for references to
!   [unsigned]int_DI_type_node in your front end.  If you have references
!   to these variables, you'll need up update the front end.
  
!   To update the front end you must mirror all the code which currently
!   deals with intDI_type_node to also handle intTI_type_node.
  
  
! Apr 7, 1998:
!   The interface between toplev.c and the language front ends for opening the
!   source file has changed:
  
!   o init_lex() has been renamed to init_parse (char *filename) where filename
!     is the name of the source file.
!   o The code in toplev.c which opened the source file should be moved to
!     the new init_parse function.
!   o toplev.c now calls finish_parse() instead of closing the source file
!     using fclose(). This should now be done in finish_parse, if necessary.
  
! Apr 1, 1998:
!   Front-ends must now define lang_print_xnode.  It is safe for this
!   function to do nothing.  See c-lang.c.
  
  Feb 1, 1998:
  
--- 6,28 ----
  serve as a repository for information on these interface and any incompatable
  changes we've made.
  
! 2004-09-09:
!   In an effort to decrease execution time, single char tree code
!   classes were changed to enumerated values.
  
!   Old way:
  
+     DEFTREECODE (CLASS_METHOD_DECL, "class_method_decl", 'd', 0)
  
!   New way:
  
!     DEFTREECODE (CLASS_METHOD_DECL, "class_method_decl", tcc_declaration, 0)
  
! 2001-02-26:
!   A DECL_INITIAL of NULL_TREE or error_mark_node in a VAR_DECL is no longer
!   taken to signify a tentative definition which should not be emitted until
!   end-of-file.  Frontends which want that behavior should set
!   DECL_DEFER_OUTPUT before calling rest_of_decl_compilation.
  
  Feb 1, 1998:
  
*************** Feb 1, 1998:
*** 78,87 ****
      When a size in bits is converted into a size in bytes, which is expressed
      in trees, care should be taken to change the tree's type again to sizetype.
  
-     We've updated C, C++, Fortran & Objective-C to work with the new
-     scheme.  Other languages will need to be updated accordingly.
-     Contact amylaar@cygnus.com for additional information.
- 
  ?? 1997:
  
    In an effort to decrease cache thrashing and useless loads we've changed the
--- 42,47 ----
diff -Nrcpad gcc-3.4.3/gcc/Makefile.in gcc-4.0.0/gcc/Makefile.in
*** gcc-3.4.3/gcc/Makefile.in	Mon Oct 18 16:00:39 2004
--- gcc-4.0.0/gcc/Makefile.in	Mon Apr  4 19:45:13 2005
***************
*** 2,8 ****
  # Run 'configure' to generate Makefile from Makefile.in
  
  # Copyright (C) 1987, 1988, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
! # 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
  
  #This file is part of GCC.
  
--- 2,8 ----
  # Run 'configure' to generate Makefile from Makefile.in
  
  # Copyright (C) 1987, 1988, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
! # 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
  
  #This file is part of GCC.
  
*************** docdir = @srcdir@/doc
*** 77,88 ****
  abs_srcdir = @abs_srcdir@
  abs_docdir = @abs_srcdir@/doc
  
! # Top build directory, relative to here.
! top_builddir = ..
  # objdir is set by configure.
  # It's normally the absolute path to the current directory.
  objdir = @objdir@
  
  # --------
  # Defined vpaths
  # --------
--- 77,90 ----
  abs_srcdir = @abs_srcdir@
  abs_docdir = @abs_srcdir@/doc
  
! # Top build directory for this package, relative to here.
! top_builddir = .
  # objdir is set by configure.
  # It's normally the absolute path to the current directory.
  objdir = @objdir@
  
+ build_subdir=@build_subdir@
+ 
  # --------
  # Defined vpaths
  # --------
*************** objdir = @objdir@
*** 90,96 ****
  # Directory where sources are, from where we are.
  VPATH = @srcdir@
  
! # We define a vpath for the sources of the .texi files here because they 
  # are split between multiple directories and we would rather use one implicit
  # pattern rule for everything.
  # This vpath could be extended within the Make-lang fragments.
--- 92,98 ----
  # Directory where sources are, from where we are.
  VPATH = @srcdir@
  
! # We define a vpath for the sources of the .texi files here because they
  # are split between multiple directories and we would rather use one implicit
  # pattern rule for everything.
  # This vpath could be extended within the Make-lang fragments.
*************** T_ADAFLAGS =
*** 117,123 ****
  # See below for how to change them for certain systems.
  
  # List of language subdirectories.
! SUBDIRS =@subdirs@
  
  # Selection of languages to be made.
  CONFIG_LANGUAGES = @all_languages@
--- 119,125 ----
  # See below for how to change them for certain systems.
  
  # List of language subdirectories.
! SUBDIRS =@subdirs@ build
  
  # Selection of languages to be made.
  CONFIG_LANGUAGES = @all_languages@
*************** BOOT_LANGUAGES = c @all_boot_languages@
*** 132,137 ****
--- 134,140 ----
  # or BOOT_CFLAGS
  # STAGE1_CFLAGS is set by configure on some targets or passed from toplevel
  # and sets the CFLAGS passed to stage1 of a bootstrap compilation.
+ # STAGE1_CHECKING enables checking for the stage1 compiler
  # BOOT_CFLAGS is the value of CFLAGS to pass to the stage2, stage3 and stage4
  # bootstrap compilations.
  # XCFLAGS is used for most compilations but not when using the GCC just built.
*************** XCFLAGS =
*** 140,145 ****
--- 143,149 ----
  TCFLAGS =
  CFLAGS = -g
  STAGE1_CFLAGS = -g @stage1_cflags@
+ STAGE1_CHECKING = -DENABLE_CHECKING -DENABLE_ASSERT_CHECKING
  BOOT_CFLAGS = -g -O2
  
  # Flags to determine code coverage. When coverage is disabled, this will
*************** coverageexts = .{gcda,gcno}
*** 159,168 ****
  # STRICT_WARN and STRICT2_WARN are the additional warning flags to
  # apply to the back end and the C front end, which may be compiled
  # with other compilers.  This is partially controlled by configure in
! # stage1, as not all versions of gcc understand -Wno-long-long.
  LOOSE_WARN = -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes
  STRICT_WARN = @strict1_warn@
! STRICT2_WARN = -pedantic -Wno-long-long -Wold-style-definition @WERROR@
  
  # This is set by --enable-checking.  The idea is to catch forgotten
  # "extern" tags in header files.
--- 163,175 ----
  # STRICT_WARN and STRICT2_WARN are the additional warning flags to
  # apply to the back end and the C front end, which may be compiled
  # with other compilers.  This is partially controlled by configure in
! # stage1, as not all versions of gcc understand -Wno-long-long or
! # -Wno-variadic-macros.
  LOOSE_WARN = -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes
  STRICT_WARN = @strict1_warn@
! WERROR_FLAGS = @WERROR@
! STRICT2_WARN = -pedantic -Wno-long-long -Wno-variadic-macros \
!   -Wold-style-definition $(WERROR_FLAGS)
  
  # This is set by --enable-checking.  The idea is to catch forgotten
  # "extern" tags in header files.
*************** VALGRIND_DRIVER_DEFINES = @valgrind_path
*** 177,195 ****
  
  # This is how we control whether or not the additional warnings are applied.
  .-warn = $(STRICT_WARN)
  GCC_WARN_CFLAGS = $(LOOSE_WARN) $($(@D)-warn) $(NOCOMMON_FLAG) $($@-warn)
  
  # These files are to have -Werror bypassed in stage2:
  # These are very hard to completely clean due to target complexities.
  gcc.o-warn = -Wno-error
! insn-conditions.o-warn = -Wno-error
  # Bison-1.75 output often yields (harmless) -Wtraditional warnings
! gengtype-yacc.o-warn = -Wno-error
  c-parse.o-warn = -Wno-error
  # flex output may yield harmless "no previous prototype" warnings
! gengtype-lex.o-warn = -Wno-error
  # SYSCALLS.c misses prototypes
  SYSCALLS.c.X-warn = -Wno-strict-prototypes -Wno-error
  
  # All warnings have to be shut off in stage1 if the compiler used then
  # isn't gcc; configure determines that.  WARN_CFLAGS will be either
--- 184,209 ----
  
  # This is how we control whether or not the additional warnings are applied.
  .-warn = $(STRICT_WARN)
+ build-warn = $(STRICT_WARN)
  GCC_WARN_CFLAGS = $(LOOSE_WARN) $($(@D)-warn) $(NOCOMMON_FLAG) $($@-warn)
  
  # These files are to have -Werror bypassed in stage2:
  # These are very hard to completely clean due to target complexities.
  gcc.o-warn = -Wno-error
! build/insn-conditions.o-warn = -Wno-error
  # Bison-1.75 output often yields (harmless) -Wtraditional warnings
! build/gengtype-yacc.o-warn = -Wno-error
  c-parse.o-warn = -Wno-error
  # flex output may yield harmless "no previous prototype" warnings
! build/gengtype-lex.o-warn = -Wno-error
  # SYSCALLS.c misses prototypes
  SYSCALLS.c.X-warn = -Wno-strict-prototypes -Wno-error
+ # These files need -Wno-error because the gimplifier triggers hard to fix
+ # warnings when converting to GIMPLE form.  The warnings are triggered because
+ # moving the condition into the loop prevents the loop optimizer from
+ # recognizing that the loop will always be executed at least once.  We need
+ # a new loop optimizer.
+ reload1.o-warn = -Wno-error
  
  # All warnings have to be shut off in stage1 if the compiler used then
  # isn't gcc; configure determines that.  WARN_CFLAGS will be either
*************** BISON = @BISON@
*** 211,219 ****
  BISONFLAGS =
  FLEX = @FLEX@
  FLEXFLAGS =
! AR = ar
  AR_FLAGS = rc
  RANLIB = @RANLIB@
  
  # -------------------------------------------
  # Programs which operate on the build machine
--- 225,235 ----
  BISONFLAGS =
  FLEX = @FLEX@
  FLEXFLAGS =
! AR = @AR@
  AR_FLAGS = rc
+ NM = @NM@
  RANLIB = @RANLIB@
+ RANLIB_FLAGS = @ranlib_flags@
  
  # -------------------------------------------
  # Programs which operate on the build machine
*************** INSTALL_SCRIPT = @INSTALL@
*** 240,245 ****
--- 256,262 ----
  MAKEINFO = @MAKEINFO@
  MAKEINFOFLAGS = --no-split
  TEXI2DVI = texi2dvi
+ TEXI2HTML = $(MAKEINFO) --html
  TEXI2POD = perl $(srcdir)/../contrib/texi2pod.pl
  POD2MAN = pod2man --center="GNU" --release="gcc-$(version)"
  # Some versions of `touch' (such as the version on Solaris 2.8)
*************** STAMP = echo timestamp >
*** 251,256 ****
--- 268,276 ----
  @SET_MAKE@
  REMAKEFLAGS=LANGUAGES="$(LANGUAGES)" BOOT_CFLAGS="$(BOOT_CFLAGS)"
  
+ # Locate mkinstalldirs.
+ mkinstalldirs=$(SHELL) $(srcdir)/../mkinstalldirs
+ 
  # --------
  # UNSORTED
  # --------
*************** OUTPUT_OPTION = @OUTPUT_OPTION@
*** 265,270 ****
--- 285,297 ----
  ZLIB = @zlibdir@ -lz
  ZLIBINC = @zlibinc@
  
+ # How to find GMP
+ GMPLIBS = @GMPLIBS@
+ GMPINC = @GMPINC@
+ 
+ CPPLIB = ../libcpp/libcpp.a
+ CPPINC = -I$(srcdir)/../libcpp/include
+ 
  # Substitution type for target's getgroups 2nd arg.
  TARGET_GETGROUPS_T = @TARGET_GETGROUPS_T@
  
*************** GCC_CFLAGS=$(INTERNAL_CFLAGS) $(X_CFLAGS
*** 297,316 ****
  # Programs which produce files for the target machine
  # ---------------------------------------------------
  
! AR_FOR_TARGET = ` \
    if [ -f $(objdir)/../binutils/ar ] ; then \
      echo $(objdir)/../binutils/ar ; \
    else \
      if [ "$(host)" = "$(target)" ] ; then \
!       echo ar; \
      else \
         t='$(program_transform_name)'; echo ar | sed -e $$t ; \
      fi; \
!   fi`
  AR_FLAGS_FOR_TARGET =
  AR_CREATE_FOR_TARGET = $(AR_FOR_TARGET) $(AR_FLAGS_FOR_TARGET) rc
  AR_EXTRACT_FOR_TARGET = $(AR_FOR_TARGET) $(AR_FLAGS_FOR_TARGET) x
! RANLIB_FOR_TARGET = ` \
    if [ -f $(objdir)/../binutils/ranlib ] ; then \
      echo $(objdir)/../binutils/ranlib ; \
    else \
--- 324,343 ----
  # Programs which produce files for the target machine
  # ---------------------------------------------------
  
! AR_FOR_TARGET := $(shell \
    if [ -f $(objdir)/../binutils/ar ] ; then \
      echo $(objdir)/../binutils/ar ; \
    else \
      if [ "$(host)" = "$(target)" ] ; then \
!       echo $(AR); \
      else \
         t='$(program_transform_name)'; echo ar | sed -e $$t ; \
      fi; \
!   fi)
  AR_FLAGS_FOR_TARGET =
  AR_CREATE_FOR_TARGET = $(AR_FOR_TARGET) $(AR_FLAGS_FOR_TARGET) rc
  AR_EXTRACT_FOR_TARGET = $(AR_FOR_TARGET) $(AR_FLAGS_FOR_TARGET) x
! RANLIB_FOR_TARGET := $(shell \
    if [ -f $(objdir)/../binutils/ranlib ] ; then \
      echo $(objdir)/../binutils/ranlib ; \
    else \
*************** RANLIB_FOR_TARGET = ` \
*** 319,337 ****
      else \
         t='$(program_transform_name)'; echo ranlib | sed -e $$t ; \
      fi; \
!   fi`
! NM_FOR_TARGET = ` \
    if [ -f ./nm ] ; then \
      echo ./nm ; \
    elif [ -f $(objdir)/../binutils/nm-new ] ; then \
      echo $(objdir)/../binutils/nm-new ; \
    else \
      if [ "$(host)" = "$(target)" ] ; then \
!       echo nm; \
      else \
         t='$(program_transform_name)'; echo nm | sed -e $$t ; \
      fi; \
!   fi`
  
  # --------
  # UNSORTED
--- 346,364 ----
      else \
         t='$(program_transform_name)'; echo ranlib | sed -e $$t ; \
      fi; \
!   fi)
! NM_FOR_TARGET := $(shell \
    if [ -f ./nm ] ; then \
      echo ./nm ; \
    elif [ -f $(objdir)/../binutils/nm-new ] ; then \
      echo $(objdir)/../binutils/nm-new ; \
    else \
      if [ "$(host)" = "$(target)" ] ; then \
!       echo $(NM); \
      else \
         t='$(program_transform_name)'; echo nm | sed -e $$t ; \
      fi; \
!   fi)
  
  # --------
  # UNSORTED
*************** OBSTACK_H   = $(srcdir)/../include/obsta
*** 343,348 ****
--- 370,376 ----
  SPLAY_TREE_H= $(srcdir)/../include/splay-tree.h
  FIBHEAP_H   = $(srcdir)/../include/fibheap.h
  PARTITION_H = $(srcdir)/../include/partition.h
+ MD5_H	    = $(srcdir)/../include/md5.h
  
  # Default native SYSTEM_HEADER_DIR, to be overridden by targets.
  NATIVE_SYSTEM_HEADER_DIR = /usr/include
*************** host_hook_obj=@out_host_hook_obj@
*** 396,402 ****
  gcc_version=@gcc_version@
  gcc_version_trigger=@gcc_version_trigger@
  version=$(gcc_version)
- mainversion=`grep version_string $(srcdir)/version.c | sed -e 's/.*\"\([0-9]*\.[0-9]*\).*/\1/'`
  
  # ------------------------
  # Installation directories
--- 424,429 ----
*************** man7dir = $(mandir)/man7
*** 463,468 ****
--- 490,498 ----
  # Dir for temp files.
  tmpdir = /tmp
  
+ # Directory in which to put HTML
+ htmldir = $(objdir)/HTML/gcc-$(version)
+ 
  # Whether we were configured with NLS.
  USE_NLS = @USE_NLS@
  
*************** LIB2ADDEH = $(srcdir)/unwind-dw2.c $(src
*** 507,513 ****
     $(srcdir)/unwind-sjlj.c $(srcdir)/gthr-gnat.c $(srcdir)/unwind-c.c
  LIB2ADDEHSTATIC = $(LIB2ADDEH)
  LIB2ADDEHSHARED = $(LIB2ADDEH)
! LIB2ADDEHDEP = unwind.inc unwind-dw2-fde.h
  
  # Don't build libunwind by default.
  LIBUNWIND =
--- 537,543 ----
     $(srcdir)/unwind-sjlj.c $(srcdir)/gthr-gnat.c $(srcdir)/unwind-c.c
  LIB2ADDEHSTATIC = $(LIB2ADDEH)
  LIB2ADDEHSHARED = $(LIB2ADDEH)
! LIB2ADDEHDEP = unwind.h unwind-pe.h unwind.inc unwind-dw2-fde.h unwind-dw2.h
  
  # Don't build libunwind by default.
  LIBUNWIND =
*************** EXTRA_GCC_OBJS =@extra_gcc_objs@
*** 541,549 ****
  # List of additional header files to install.
  EXTRA_HEADERS =@extra_headers_list@
  
! # It is convenient for configure to add the assignment at the beginning,
! # so don't override it here.
! USE_COLLECT2 = collect2$(exeext)
  
  # List of extra C and assembler files to add to static and shared libgcc2.
  # Assembler files should have names ending in `.asm'.
--- 571,580 ----
  # List of additional header files to install.
  EXTRA_HEADERS =@extra_headers_list@
  
! # The configure script will set this to collect2$(exeext), except on a
! # (non-Unix) host which can not build collect2, for which it will be
! # set to empty.
! COLLECT2 = @collect2@
  
  # List of extra C and assembler files to add to static and shared libgcc2.
  # Assembler files should have names ending in `.asm'.
*************** GCC_PASSES=xgcc$(exeext) cc1$(exeext) sp
*** 582,601 ****
  
  # List of things which should already be built whenever we try to use xgcc
  # to link anything.
! GCC_PARTS=$(GCC_PASSES) $(LIBGCC) $(EXTRA_PROGRAMS) $(USE_COLLECT2) $(EXTRA_PARTS)
  
  # Directory to link to, when using the target `maketest'.
  DIR = ../gcc
  
- # Flags to use when cross-building GCC.
- # Prefix to apply to names of object files when using them
- # to run on the machine we are compiling on.
- BUILD_PREFIX = @BUILD_PREFIX@
- # Prefix to apply to names of object files when compiling them
- # to run on the machine we are compiling on.
- # The default for this variable is chosen to keep these rules
- # out of the way of the other rules for compiling the same source files.
- BUILD_PREFIX_1 = @BUILD_PREFIX_1@
  # Native compiler for the build machine and its switches.
  CC_FOR_BUILD = @CC_FOR_BUILD@
  BUILD_CFLAGS= @BUILD_CFLAGS@ -DGENERATOR_FILE
--- 613,623 ----
  
  # List of things which should already be built whenever we try to use xgcc
  # to link anything.
! GCC_PARTS=$(GCC_PASSES) $(LIBGCC) $(EXTRA_PROGRAMS) $(COLLECT2) $(EXTRA_PARTS)
  
  # Directory to link to, when using the target `maketest'.
  DIR = ../gcc
  
  # Native compiler for the build machine and its switches.
  CC_FOR_BUILD = @CC_FOR_BUILD@
  BUILD_CFLAGS= @BUILD_CFLAGS@ -DGENERATOR_FILE
*************** TM_P_H    = tm_p.h    $(tm_p_file_list)
*** 659,696 ****
  GTM_H     = tm.h      $(tm_file_list)
  TM_H      = $(GTM_H) insn-constants.h insn-flags.h
  
! TARGET_H = $(TM_H) target.h
! HOOKS_H = hooks.h
  LANGHOOKS_DEF_H = langhooks-def.h $(HOOKS_H)
  TARGET_DEF_H = target-def.h $(HOOKS_H)
! MACHMODE_H = machmode.h mode-classes.def insn-modes.h
! RTL_BASE_H = rtl.h rtl.def $(MACHMODE_H)
! RTL_H = $(RTL_BASE_H) genrtl.h input.h
  PARAMS_H = params.h params.def
! TREE_H = tree.h tree.def $(MACHMODE_H) tree-check.h version.h builtins.def \
!           input.h
  BASIC_BLOCK_H = basic-block.h bitmap.h sbitmap.h varray.h $(PARTITION_H) \
!           hard-reg-set.h cfghooks.h
  COVERAGE_H = coverage.h gcov-io.h gcov-iov.h
  DEMANGLE_H = $(srcdir)/../include/demangle.h
  RECOG_H = recog.h
! EXPR_H = expr.h
  OPTABS_H = optabs.h insn-codes.h
! REGS_H = regs.h varray.h $(MACHMODE_H)
  INTEGRATE_H = integrate.h varray.h
! LOOP_H = loop.h varray.h bitmap.h
  GCC_H = gcc.h version.h
  GGC_H = ggc.h gtype-desc.h
  TIMEVAR_H = timevar.h timevar.def
  INSN_ATTR_H = insn-attr.h $(srcdir)/insn-addr.h $(srcdir)/varray.h
  C_COMMON_H = c-common.h $(SPLAY_TREE_H) $(CPPLIB_H)
  C_TREE_H = c-tree.h $(C_COMMON_H)
  SYSTEM_H = system.h hwint.h $(srcdir)/../include/libiberty.h
  PREDICT_H = predict.h predict.def
! CPPLIB_H = cpplib.h line-map.h
  PRETTY_PRINT_H = pretty-print.h input.h $(OBSTACK_H)
  DIAGNOSTIC_H = diagnostic.h diagnostic.def $(PRETTY_PRINT_H)
! C_PRETTY_PRINT_H = $(PRETTY_PRINT_H) $(C_COMMON_H) $(TREE_H)
  
  #
  # Now figure out from those variables how to compile and link.
--- 681,743 ----
  GTM_H     = tm.h      $(tm_file_list)
  TM_H      = $(GTM_H) insn-constants.h insn-flags.h
  
! TARGET_H = $(TM_H) target.h insn-modes.h
! MACHMODE_H = machmode.h mode-classes.def insn-modes.h
! HOOKS_H = hooks.h $(MACHMODE_H)
! HOSTHOOKS_DEF_H = hosthooks-def.h $(HOOKS_H)
  LANGHOOKS_DEF_H = langhooks-def.h $(HOOKS_H)
  TARGET_DEF_H = target-def.h $(HOOKS_H)
! RTL_BASE_H = rtl.h rtl.def $(MACHMODE_H) reg-notes.def insn-notes.def \
!   input.h statistics.h
! RTL_H = $(RTL_BASE_H) genrtl.h
  PARAMS_H = params.h params.def
! TREE_H = tree.h tree.def $(MACHMODE_H) tree-check.h builtins.def \
!           input.h statistics.h vec.h
  BASIC_BLOCK_H = basic-block.h bitmap.h sbitmap.h varray.h $(PARTITION_H) \
!           hard-reg-set.h cfghooks.h $(OBSTACK_H)
  COVERAGE_H = coverage.h gcov-io.h gcov-iov.h
  DEMANGLE_H = $(srcdir)/../include/demangle.h
  RECOG_H = recog.h
! ALIAS_H = alias.h
! EMIT_RTL_H = emit-rtl.h
! FLAGS_H = flags.h options.h
! EXPR_H = expr.h insn-config.h function.h $(RTL_H) $(FLAGS_H) $(TREE_H) $(MACHMODE_H) $(EMIT_RTL_H)
  OPTABS_H = optabs.h insn-codes.h
! REGS_H = regs.h varray.h $(MACHMODE_H) $(OBSTACK_H) $(BASIC_BLOCK_H)
! RESOURCE_H = resource.h hard-reg-set.h
! SCHED_INT_H = sched-int.h $(INSN_ATTR_H) $(BASIC_BLOCK_H) $(RTL_H)
  INTEGRATE_H = integrate.h varray.h
! CFGLAYOUT_H = cfglayout.h $(BASIC_BLOCK_H)
! CFGLOOP_H = cfgloop.h $(BASIC_BLOCK_H) $(RTL_H)
! CGRAPH_H = cgraph.h tree.h 
! DF_H = df.h bitmap.h sbitmap.h $(BASIC_BLOCK_H)
! DDG_H = ddg.h sbitmap.h $(DF_H)
  GCC_H = gcc.h version.h
  GGC_H = ggc.h gtype-desc.h
  TIMEVAR_H = timevar.h timevar.def
  INSN_ATTR_H = insn-attr.h $(srcdir)/insn-addr.h $(srcdir)/varray.h
  C_COMMON_H = c-common.h $(SPLAY_TREE_H) $(CPPLIB_H)
+ C_PRAGMA_H = c-pragma.h $(CPPLIB_H)
  C_TREE_H = c-tree.h $(C_COMMON_H)
  SYSTEM_H = system.h hwint.h $(srcdir)/../include/libiberty.h
  PREDICT_H = predict.h predict.def
! CPPLIB_H = $(srcdir)/../libcpp/include/line-map.h \
! 	$(srcdir)/../libcpp/include/cpplib.h
! MKDEPS_H = $(srcdir)/../libcpp/include/mkdeps.h
! SYMTAB_H = $(srcdir)/../libcpp/include/symtab.h
! CPP_ID_DATA_H = $(CPPLIB_H) $(srcdir)/../libcpp/include/cpp-id-data.h
! TREE_DUMP_H = tree-dump.h $(SPLAY_TREE_H)
! TREE_GIMPLE_H = tree-gimple.h tree-iterator.h
! TREE_FLOW_H = tree-flow.h tree-flow-inline.h tree-ssa-operands.h \
! 		bitmap.h $(BASIC_BLOCK_H) hard-reg-set.h $(TREE_GIMPLE_H) \
! 		$(HASHTAB_H) $(CGRAPH_H)
! TREE_SSA_LIVE_H = tree-ssa-live.h $(PARTITION_H)
  PRETTY_PRINT_H = pretty-print.h input.h $(OBSTACK_H)
  DIAGNOSTIC_H = diagnostic.h diagnostic.def $(PRETTY_PRINT_H)
! C_PRETTY_PRINT_H = c-pretty-print.h $(PRETTY_PRINT_H) $(C_COMMON_H) $(TREE_H)
! SCEV_H = tree-scalar-evolution.h $(GGC_H) tree-chrec.h
! LAMBDA_H = lambda.h tree.h vec.h $(GGC_H)
! TREE_DATA_REF_H = tree-data-ref.h $(LAMBDA_H)
  
  #
  # Now figure out from those variables how to compile and link.
*************** ALL_CFLAGS = $(X_CFLAGS) $(T_CFLAGS) \
*** 708,720 ****
  # Likewise.
  ALL_CPPFLAGS = $(CPPFLAGS) $(X_CPPFLAGS) $(T_CPPFLAGS)
  
! # Build and host support libraries.  FORBUILD is either
! # .. or ../$(build_alias) depending on whether host != build.
  LIBIBERTY = ../libiberty/libiberty.a
! BUILD_LIBIBERTY = @FORBUILD@/libiberty/libiberty.a
  
  # Dependencies on the intl and portability libraries.
! LIBDEPS= $(LIBIBERTY) $(LIBINTL_DEP) $(LIBICONV_DEP)
  
  # Likewise, for use in the tools that must run on this machine
  # even if we are cross-building GCC.
--- 755,766 ----
  # Likewise.
  ALL_CPPFLAGS = $(CPPFLAGS) $(X_CPPFLAGS) $(T_CPPFLAGS)
  
! # Build and host support libraries.
  LIBIBERTY = ../libiberty/libiberty.a
! BUILD_LIBIBERTY = ../$(build_subdir)/libiberty/libiberty.a
  
  # Dependencies on the intl and portability libraries.
! LIBDEPS= $(CPPLIB) $(LIBIBERTY) $(LIBINTL_DEP) $(LIBICONV_DEP)
  
  # Likewise, for use in the tools that must run on this machine
  # even if we are cross-building GCC.
*************** BUILD_LIBDEPS= $(BUILD_LIBIBERTY)
*** 722,728 ****
  
  # How to link with both our special library facilities
  # and the system's installed libraries.
! LIBS = @LIBS@ $(LIBIBERTY) $(LIBINTL) $(LIBICONV)
  
  # Any system libraries needed just for GNAT.
  SYSLIBS = @GNAT_LIBEXC@
--- 768,774 ----
  
  # How to link with both our special library facilities
  # and the system's installed libraries.
! LIBS = @LIBS@ $(CPPLIB) $(LIBINTL) $(LIBICONV) $(LIBIBERTY)
  
  # Any system libraries needed just for GNAT.
  SYSLIBS = @GNAT_LIBEXC@
*************** LDEXP_LIB = @LDEXP_LIB@
*** 734,747 ****
  # even if we are cross-building GCC.
  BUILD_LIBS = $(BUILD_LIBIBERTY)
  
! BUILD_RTL = $(BUILD_PREFIX)rtl.o read-rtl.o $(BUILD_PREFIX)bitmap.o \
! 		$(BUILD_PREFIX)ggc-none.o min-insn-modes.o
! BUILD_SUPPORT = gensupport.o insn-conditions.o
! BUILD_EARLY_SUPPORT = gensupport.o dummy-conditions.o
  
! BUILD_PRINT = print-rtl1.o
! BUILD_ERRORS = $(BUILD_PREFIX)errors.o
! BUILD_VARRAY = $(BUILD_PREFIX)varray.o
  
  # Specify the directories to be searched for header files.
  # Both . and srcdir are used, in that order,
--- 780,793 ----
  # even if we are cross-building GCC.
  BUILD_LIBS = $(BUILD_LIBIBERTY)
  
! BUILD_RTL = build/rtl.o build/read-rtl.o build/ggc-none.o \
! 	    build/min-insn-modes.o
! BUILD_SUPPORT = build/gensupport.o build/insn-conditions.o
! BUILD_EARLY_SUPPORT = build/gensupport.o build/dummy-conditions.o
  
! BUILD_PRINT = build/print-rtl.o
! BUILD_ERRORS = build/errors.o
! BUILD_VARRAY = build/varray.o
  
  # Specify the directories to be searched for header files.
  # Both . and srcdir are used, in that order,
*************** BUILD_VARRAY = $(BUILD_PREFIX)varray.o
*** 751,757 ****
  # currently being compiled, in both source trees, to be examined as well.
  # libintl.h will be found in ../intl if we are using the included libintl.
  INCLUDES = -I. -I$(@D) -I$(srcdir) -I$(srcdir)/$(@D) \
! 	   -I$(srcdir)/../include @INCINTL@
  
  .c.o:
  	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
--- 797,804 ----
  # currently being compiled, in both source trees, to be examined as well.
  # libintl.h will be found in ../intl if we are using the included libintl.
  INCLUDES = -I. -I$(@D) -I$(srcdir) -I$(srcdir)/$(@D) \
! 	   -I$(srcdir)/../include @INCINTL@ \
! 	   $(CPPINC) $(GMPINC)
  
  .c.o:
  	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
*************** export AR_CREATE_FOR_TARGET
*** 775,782 ****
  export AR_FLAGS_FOR_TARGET
  export AR_EXTRACT_FOR_TARGET
  export AWK
- export BUILD_PREFIX
- export BUILD_PREFIX_1
  export DESTDIR
  export GCC_FOR_TARGET
  export INCLUDES
--- 822,827 ----
*************** CXX_TARGET_OBJS=@cxx_target_objs@
*** 839,912 ****
  C_AND_OBJC_OBJS = attribs.o c-errors.o c-lex.o c-pragma.o c-decl.o c-typeck.o \
    c-convert.o c-aux-info.o c-common.o c-opts.o c-format.o c-semantics.o \
    c-incpath.o cppdefault.o c-ppoutput.o c-cppbuiltin.o prefix.o \
!   c-objc-common.o c-dump.o c-pch.o libcpp.a $(C_TARGET_OBJS)
  
  # Language-specific object files for C.
! C_OBJS = c-parse.o c-lang.o c-pretty-print.o stub-objc.o $(C_AND_OBJC_OBJS)
  
  # Language-independent object files.
- 
  OBJS-common = \
   alias.o bb-reorder.o bitmap.o builtins.o caller-save.o calls.o	  	   \
   cfg.o cfganal.o cfgbuild.o cfgcleanup.o cfglayout.o cfgloop.o		   \
   cfgloopanal.o cfgloopmanip.o loop-init.o loop-unswitch.o loop-unroll.o	   \
   cfgrtl.o combine.o conflict.o convert.o coverage.o cse.o cselib.o 	   \
!  dbxout.o debug.o df.o diagnostic.o dojump.o doloop.o dominance.o	   \
!  dwarf2asm.o dwarf2out.o emit-rtl.o except.o explow.o	                   \
   expmed.o expr.o final.o flow.o fold-const.o function.o gcse.o		   \
   genrtl.o ggc-common.o global.o graph.o gtype-desc.o			   \
   haifa-sched.o hooks.o ifcvt.o insn-attrtab.o insn-emit.o insn-modes.o	   \
   insn-extract.o insn-opinit.o insn-output.o insn-peep.o insn-recog.o	   \
   integrate.o intl.o jump.o  langhooks.o lcm.o lists.o local-alloc.o  	   \
!  loop.o optabs.o options.o opts.o params.o postreload.o predict.o	   \
!  print-rtl.o print-tree.o value-prof.o					   \
!  profile.o ra.o ra-build.o ra-colorize.o ra-debug.o ra-rewrite.o	   \
   real.o recog.o reg-stack.o regclass.o regmove.o regrename.o		   \
   reload.o reload1.o reorg.o resource.o rtl.o rtlanal.o rtl-error.o	   \
   sbitmap.o sched-deps.o sched-ebb.o sched-rgn.o sched-vis.o sdbout.o	   \
!  sibcall.o simplify-rtx.o sreal.o stmt.o stor-layout.o stringpool.o 	   \
!  targhooks.o timevar.o toplev.o tracer.o tree.o tree-dump.o unroll.o	   \
!  varasm.o varray.o version.o vmsdbgout.o xcoffout.o alloc-pool.o	   \
!  et-forest.o cfghooks.o bt-load.o pretty-print.o $(GGC) web.o
  
  OBJS-md = $(out_object_file)
! OBJS-archive = $(EXTRA_OBJS) $(host_hook_obj) hashtable.o tree-inline.o	   \
!   tree-optimize.o cgraph.o cgraphunit.o
  
  OBJS = $(OBJS-common) $(out_object_file) $(OBJS-archive)
  
  OBJS-onestep = libbackend.o $(OBJS-archive)
  
! BACKEND = main.o libbackend.a
  
! # Files to be copied away after each stage in building.
! STAGESTUFF = *$(objext) insn-flags.h insn-config.h insn-codes.h \
   insn-output.c insn-recog.c insn-emit.c insn-extract.c insn-peep.c \
!  insn-attr.h insn-attrtab.c insn-opinit.c insn-constants.h tm-preds.h \
   tree-check.h insn-conditions.c min-insn-modes.c insn-modes.c insn-modes.h \
!  s-flags s-config s-codes s-mlib s-genrtl s-modes s-gtype gtyp-gen.h \
!  s-output s-recog s-emit s-extract s-peep s-check s-conditions \
!  s-attr s-attrtab s-opinit s-preds s-constants s-crt0 \
!  genemit$(build_exeext) genoutput$(build_exeext) genrecog$(build_exeext) \
!  genextract$(build_exeext) genflags$(build_exeext) gencodes$(build_exeext) \
!  genconfig$(build_exeext) genpeep$(build_exeext) genattrtab$(build_exeext) \
!  genattr$(build_exeext) genopinit$(build_exeext) gengenrtl$(build_exeext) \
!  gencheck$(build_exeext) genpreds$(build_exeext) genconstants$(build_exeext) \
!  gengtype$(build_exeext) genconditions$(build_exeext) genmodes$(build_exeext) \
!  genrtl.c genrtl.h gt-*.h gtype-*.h gtype-desc.c \
   xgcc$(exeext) cpp$(exeext) cc1$(exeext) $(EXTRA_PASSES) \
   $(EXTRA_PARTS) $(EXTRA_PROGRAMS) gcc-cross$(exeext) \
   protoize$(exeext) unprotoize$(exeext) \
!  $(SPECS) collect2$(exeext) $(USE_COLLECT2) \
   gcov-iov$(build_exeext) gcov$(exeext) gcov-dump$(exeext) \
!  *.[0-9][0-9].* *.[si] libcpp.a libbackend.a libgcc.mk \
   $(LANG_STAGESTUFF)
  
  # Defined in libgcc2.c, included only in the static library.
  LIB2FUNCS_ST = _eprintf __gcc_bcmp
  
  # Defined in libgcov.c, included only in gcov library
! LIBGCOV = _gcov _gcov_merge_add _gcov_merge_single _gcov_merge_delta
  
  FPBIT_FUNCS = _pack_sf _unpack_sf _addsub_sf _mul_sf _div_sf \
      _fpcmp_parts_sf _compare_sf _eq_sf _ne_sf _gt_sf _ge_sf \
--- 884,971 ----
  C_AND_OBJC_OBJS = attribs.o c-errors.o c-lex.o c-pragma.o c-decl.o c-typeck.o \
    c-convert.o c-aux-info.o c-common.o c-opts.o c-format.o c-semantics.o \
    c-incpath.o cppdefault.o c-ppoutput.o c-cppbuiltin.o prefix.o \
!   c-objc-common.o c-dump.o c-pch.o $(C_TARGET_OBJS) \
!   c-gimplify.o tree-mudflap.o c-pretty-print.o
  
  # Language-specific object files for C.
! C_OBJS = c-parse.o c-lang.o stub-objc.o $(C_AND_OBJC_OBJS)
  
  # Language-independent object files.
  OBJS-common = \
+  tree-chrec.o tree-scalar-evolution.o tree-data-ref.o			   \
+  tree-cfg.o tree-dfa.o tree-eh.o tree-ssa.o tree-optimize.o tree-gimple.o  \
+  gimplify.o tree-pretty-print.o tree-into-ssa.o          \
+  tree-outof-ssa.o tree-ssa-ccp.o tree-vn.o             \
+  tree-ssa-dce.o  tree-ssa-copy.o tree-nrv.o tree-ssa-copyrename.o  \
+  tree-ssa-pre.o tree-ssa-live.o tree-ssa-operands.o tree-ssa-alias.o       \
+  tree-ssa-phiopt.o tree-ssa-forwprop.o tree-nested.o tree-ssa-dse.o	   \
+  tree-ssa-dom.o domwalk.o tree-tailcall.o gimple-low.o tree-iterator.o	   \
+  tree-phinodes.o tree-ssanames.o tree-sra.o tree-complex.o tree-ssa-loop.o \
+  tree-ssa-loop-niter.o tree-ssa-loop-manip.o tree-ssa-threadupdate.o	   \
+  tree-vectorizer.o tree-vect-analyze.o tree-vect-transform.o		   \
+  tree-ssa-loop-ivcanon.o tree-ssa-propagate.o	 	   		   \
+  tree-ssa-loop-ivopts.o tree-if-conv.o tree-ssa-loop-unswitch.o		   \
   alias.o bb-reorder.o bitmap.o builtins.o caller-save.o calls.o	  	   \
   cfg.o cfganal.o cfgbuild.o cfgcleanup.o cfglayout.o cfgloop.o		   \
   cfgloopanal.o cfgloopmanip.o loop-init.o loop-unswitch.o loop-unroll.o	   \
   cfgrtl.o combine.o conflict.o convert.o coverage.o cse.o cselib.o 	   \
!  dbxout.o ddg.o tree-ssa-loop-ch.o loop-invariant.o tree-ssa-loop-im.o	   \
!  debug.o df.o diagnostic.o dojump.o dominance.o loop-doloop.o		   \
!  dwarf2asm.o dwarf2out.o emit-rtl.o except.o explow.o loop-iv.o		   \
   expmed.o expr.o final.o flow.o fold-const.o function.o gcse.o		   \
   genrtl.o ggc-common.o global.o graph.o gtype-desc.o			   \
   haifa-sched.o hooks.o ifcvt.o insn-attrtab.o insn-emit.o insn-modes.o	   \
   insn-extract.o insn-opinit.o insn-output.o insn-peep.o insn-recog.o	   \
   integrate.o intl.o jump.o  langhooks.o lcm.o lists.o local-alloc.o  	   \
!  loop.o modulo-sched.o optabs.o options.o opts.o			   \
!  params.o postreload.o postreload-gcse.o predict.o			   \
!  insn-preds.o pointer-set.o postreload.o				   \
!  print-rtl.o print-tree.o profile.o value-prof.o var-tracking.o		   \
   real.o recog.o reg-stack.o regclass.o regmove.o regrename.o		   \
   reload.o reload1.o reorg.o resource.o rtl.o rtlanal.o rtl-error.o	   \
   sbitmap.o sched-deps.o sched-ebb.o sched-rgn.o sched-vis.o sdbout.o	   \
!  simplify-rtx.o sreal.o stmt.o stor-layout.o stringpool.o		   \
!  targhooks.o timevar.o toplev.o tracer.o tree.o tree-dump.o		   \
!  varasm.o varray.o vec.o version.o vmsdbgout.o xcoffout.o alloc-pool.o	   \
!  et-forest.o cfghooks.o bt-load.o pretty-print.o $(GGC) web.o passes.o	   \
!  rtl-profile.o tree-profile.o rtlhooks.o cfgexpand.o lambda-mat.o          \
!  lambda-trans.o	lambda-code.o tree-loop-linear.o
  
  OBJS-md = $(out_object_file)
! OBJS-archive = $(EXTRA_OBJS) $(host_hook_obj) tree-inline.o		   \
!   cgraph.o cgraphunit.o tree-nomudflap.o
  
  OBJS = $(OBJS-common) $(out_object_file) $(OBJS-archive)
  
  OBJS-onestep = libbackend.o $(OBJS-archive)
  
! BACKEND = main.o @TREEBROWSER@ libbackend.a $(CPPLIB)
  
! # Files to be copied after each stage in building.
! STAGECOPYSTUFF = insn-flags.h insn-config.h insn-codes.h \
   insn-output.c insn-recog.c insn-emit.c insn-extract.c insn-peep.c \
!  insn-attr.h insn-attrtab.c insn-opinit.c insn-preds.c insn-constants.h \
!  tm-preds.h \
   tree-check.h insn-conditions.c min-insn-modes.c insn-modes.c insn-modes.h \
!  genrtl.c genrtl.h gt-*.h gtype-*.h gtype-desc.c gtyp-gen.h
! 
! # Files to be moved away after each stage in building.
! STAGEMOVESTUFF = *$(objext) s-* \
   xgcc$(exeext) cpp$(exeext) cc1$(exeext) $(EXTRA_PASSES) \
   $(EXTRA_PARTS) $(EXTRA_PROGRAMS) gcc-cross$(exeext) \
   protoize$(exeext) unprotoize$(exeext) \
!  $(SPECS) collect2$(exeext) \
   gcov-iov$(build_exeext) gcov$(exeext) gcov-dump$(exeext) \
!  *.[0-9][0-9].* *.[si] libbackend.a libgcc.mk \
   $(LANG_STAGESTUFF)
  
  # Defined in libgcc2.c, included only in the static library.
  LIB2FUNCS_ST = _eprintf __gcc_bcmp
  
  # Defined in libgcov.c, included only in gcov library
! LIBGCOV = _gcov _gcov_merge_add _gcov_merge_single _gcov_merge_delta \
!     _gcov_fork _gcov_execl _gcov_execlp _gcov_execle \
!     _gcov_execv _gcov_execvp _gcov_execve
  
  FPBIT_FUNCS = _pack_sf _unpack_sf _addsub_sf _mul_sf _div_sf \
      _fpcmp_parts_sf _compare_sf _eq_sf _ne_sf _gt_sf _ge_sf \
*************** gccbug:	$(srcdir)/gccbug.in
*** 1024,1032 ****
  mklibgcc: $(srcdir)/mklibgcc.in
  	CONFIG_FILES=mklibgcc CONFIG_HEADERS= ./config.status
  
- mkheaders: $(srcdir)/mkheaders.in
- 	CONFIG_FILES=mkheaders CONFIG_HEADERS= ./config.status
- 
  # cstamp-h.in controls rebuilding of config.in.
  # It is named cstamp-h.in and not stamp-h.in so the mostlyclean rule doesn't
  # delete it.  A stamp file is needed as autoheader won't update the file if
--- 1083,1088 ----
*************** config.status: $(srcdir)/configure $(src
*** 1068,1074 ****
  all.internal: start.encap rest.encap doc
  # This is what to compile if making a cross-compiler.
  all.cross: native gcc-cross cpp$(exeext) specs \
! 	$(LIBGCC) $(EXTRA_PARTS) lang.all.cross doc
  # This is what must be made before installing GCC and converting libraries.
  start.encap: native xgcc$(exeext) cpp$(exeext) specs \
  	xlimits.h lang.start.encap @GENINSRC@ srcextra
--- 1124,1130 ----
  all.internal: start.encap rest.encap doc
  # This is what to compile if making a cross-compiler.
  all.cross: native gcc-cross cpp$(exeext) specs \
! 	$(LIBGCC) $(EXTRA_PARTS) lang.all.cross doc @GENINSRC@ srcextra
  # This is what must be made before installing GCC and converting libraries.
  start.encap: native xgcc$(exeext) cpp$(exeext) specs \
  	xlimits.h lang.start.encap @GENINSRC@ srcextra
*************** rest.encap: $(STMP_FIXPROTO) $(LIBGCC) $
*** 1077,1083 ****
  # This is what is made with the host's compiler
  # whether making a cross compiler or not.
  native: config.status auto-host.h build-@POSUB@ $(LANGUAGES) \
! 	$(EXTRA_PASSES) $(EXTRA_PROGRAMS) $(USE_COLLECT2)
  
  # Define the names for selecting languages in LANGUAGES.
  C c: cc1$(exeext)
--- 1133,1139 ----
  # This is what is made with the host's compiler
  # whether making a cross compiler or not.
  native: config.status auto-host.h build-@POSUB@ $(LANGUAGES) \
! 	$(EXTRA_PASSES) $(EXTRA_PROGRAMS) $(COLLECT2)
  
  # Define the names for selecting languages in LANGUAGES.
  C c: cc1$(exeext)
*************** rest.cross: $(LIBGCC) specs
*** 1094,1104 ****
  # This is used only if the user explicitly asks for it.
  compilations: $(BACKEND)
  
! # Like libcpp.a, this archive is strictly for the host.
  libbackend.a: $(OBJS@onestep@)
  	-rm -rf libbackend.a
  	$(AR) $(AR_FLAGS) libbackend.a $(OBJS@onestep@)
! 	-$(RANLIB) libbackend.a
  
  # We call this executable `xgcc' rather than `gcc'
  # to avoid confusion if the current directory is in the path
--- 1150,1160 ----
  # This is used only if the user explicitly asks for it.
  compilations: $(BACKEND)
  
! # This archive is strictly for the host.
  libbackend.a: $(OBJS@onestep@)
  	-rm -rf libbackend.a
  	$(AR) $(AR_FLAGS) libbackend.a $(OBJS@onestep@)
! 	-$(RANLIB) $(RANLIB_FLAGS) libbackend.a
  
  # We call this executable `xgcc' rather than `gcc'
  # to avoid confusion if the current directory is in the path
*************** libgcc.mk: config.status Makefile mklibg
*** 1178,1191 ****
  	SHLIB_MAPFILES='$(SHLIB_MAPFILES)' \
  	SHLIB_NM_FLAGS='$(SHLIB_NM_FLAGS)' \
  	MULTILIB_OSDIRNAMES='$(MULTILIB_OSDIRNAMES)' \
! 	mkinstalldirs='$(SHELL) $(srcdir)/mkinstalldirs' \
  	  $(SHELL) mklibgcc > tmp-libgcc.mk
  	mv tmp-libgcc.mk libgcc.mk
  
  # All the things that might cause us to want to recompile bits of libgcc.
  LIBGCC_DEPS = $(GCC_PASSES) $(LANGUAGES) stmp-int-hdrs $(STMP_FIXPROTO) \
  	libgcc.mk $(srcdir)/libgcc2.c $(srcdir)/libgcov.c $(TCONFIG_H) \
! 	$(MACHMODE_H) longlong.h gbl-ctors.h config.status stmp-int-hdrs \
  	tsystem.h $(FPBIT) $(DPBIT) $(TPBIT) $(LIB2ADD) \
  	$(LIB2ADD_ST) $(LIB2ADDEH) $(LIB2ADDEHDEP) $(EXTRA_PARTS) \
  	$(srcdir)/config/$(LIB1ASMSRC) \
--- 1234,1248 ----
  	SHLIB_MAPFILES='$(SHLIB_MAPFILES)' \
  	SHLIB_NM_FLAGS='$(SHLIB_NM_FLAGS)' \
  	MULTILIB_OSDIRNAMES='$(MULTILIB_OSDIRNAMES)' \
! 	ASM_HIDDEN_OP='$(ASM_HIDDEN_OP)' \
! 	mkinstalldirs='$(mkinstalldirs)' \
  	  $(SHELL) mklibgcc > tmp-libgcc.mk
  	mv tmp-libgcc.mk libgcc.mk
  
  # All the things that might cause us to want to recompile bits of libgcc.
  LIBGCC_DEPS = $(GCC_PASSES) $(LANGUAGES) stmp-int-hdrs $(STMP_FIXPROTO) \
  	libgcc.mk $(srcdir)/libgcc2.c $(srcdir)/libgcov.c $(TCONFIG_H) \
! 	$(MACHMODE_H) longlong.h gbl-ctors.h config.status \
  	tsystem.h $(FPBIT) $(DPBIT) $(TPBIT) $(LIB2ADD) \
  	$(LIB2ADD_ST) $(LIB2ADDEH) $(LIB2ADDEHDEP) $(EXTRA_PARTS) \
  	$(srcdir)/config/$(LIB1ASMSRC) \
*************** s-mlib: $(srcdir)/genmultilib Makefile
*** 1222,1228 ****
  	  $(SHELL) $(srcdir)/genmultilib '' '' '' '' '' '' '' no \
  	    > tmp-mlib.h; \
  	fi
! 	$(SHELL) $(srcdir)/move-if-change tmp-mlib.h multilib.h
  	$(STAMP) s-mlib
  
  # Build multiple copies of libgcc.a, one for each target switch.
--- 1279,1285 ----
  	  $(SHELL) $(srcdir)/genmultilib '' '' '' '' '' '' '' no \
  	    > tmp-mlib.h; \
  	fi
! 	$(SHELL) $(srcdir)/../move-if-change tmp-mlib.h multilib.h
  	$(STAMP) s-mlib
  
  # Build multiple copies of libgcc.a, one for each target switch.
*************** s-crt0:	$(CRT0_S) $(MCRT0_S) $(GCC_PASSE
*** 1289,1298 ****
  # C language specific files.
  
  c-errors.o: c-errors.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
!     $(C_TREE_H) flags.h $(DIAGNOSTIC_H) $(TM_P_H)
  c-parse.o : c-parse.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
!     $(GGC_H) intl.h $(C_TREE_H) input.h flags.h toplev.h output.h $(CPPLIB_H) \
!     varray.h gt-c-parse.h
  
  srcextra: gcc.srcextra lang.srcextra
  
--- 1346,1355 ----
  # C language specific files.
  
  c-errors.o: c-errors.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
!     $(C_TREE_H) $(FLAGS_H) $(DIAGNOSTIC_H) $(TM_P_H)
  c-parse.o : c-parse.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
!     $(GGC_H) intl.h $(C_TREE_H) input.h $(FLAGS_H) toplev.h output.h \
!     $(CPPLIB_H) varray.h gt-c-parse.h langhooks.h $(C_COMMON_H) $(C_PRAGMA_H)
  
  srcextra: gcc.srcextra lang.srcextra
  
*************** gcc.srcextra: c-parse.y c-parse.c gengty
*** 1300,1347 ****
  	-cp -p $^ $(srcdir)
  
  c-parse.c: c-parse.y
! 	-$(BISON) $(BISONFLAGS) -o $@ $< 
  
  c-parse.y: c-parse.in
  	echo '/*WARNING: This file is automatically generated!*/' >tmp-c-parse.y
  	sed -e "/^@@ifobjc.*/,/^@@end_ifobjc.*/d" \
  	    -e "/^@@ifc.*/d" -e "/^@@end_ifc.*/d" $< >>tmp-c-parse.y
! 	$(SHELL) $(srcdir)/move-if-change tmp-c-parse.y $@
  
  c-incpath.o: c-incpath.c c-incpath.h $(CONFIG_H) $(SYSTEM_H) $(CPPLIB_H) \
! 		intl.h prefix.h coretypes.h $(TM_H) cppdefault.h
  
  c-decl.o : c-decl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
!     $(RTL_H) $(C_TREE_H) $(GGC_H) $(TARGET_H) flags.h function.h output.h \
      $(EXPR_H) debug.h toplev.h intl.h $(TM_P_H) tree-inline.h $(TIMEVAR_H) \
!     opts.h c-pragma.h gt-c-decl.h cgraph.h $(HASHTAB_H) libfuncs.h except.h \
!     $(LANGHOOKS_DEF_H)
  c-typeck.o : c-typeck.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(C_TREE_H) \
!     $(TARGET_H) flags.h intl.h output.h $(EXPR_H) $(RTL_H) toplev.h $(TM_P_H)
  c-lang.o : c-lang.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
      $(C_TREE_H) $(C_PRETTY_PRINT_H) $(DIAGNOSTIC_H) \
!     $(GGC_H) langhooks.h $(LANGHOOKS_DEF_H) $(C_COMMON_H) gtype-c.h
  stub-objc.o : stub-objc.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TREE_H) \
      $(GGC_H) $(C_COMMON_H)
  c-lex.o : c-lex.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
      $(RTL_H) debug.h $(C_TREE_H) $(C_COMMON_H) real.h c-incpath.h cppdefault.h \
!     c-pragma.h input.h intl.h flags.h toplev.h output.h \
      $(CPPLIB_H) $(EXPR_H) $(TM_P_H)
  c-ppoutput.o : c-ppoutput.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
!     $(C_COMMON_H) $(TREE_H) $(CPPLIB_H) cpphash.h $(TM_P_H) c-pragma.h
  c-objc-common.o : c-objc-common.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
!     $(C_TREE_H) $(RTL_H) insn-config.h $(INTEGRATE_H) $(EXPR_H) $(C_TREE_H) \
!     flags.h toplev.h tree-inline.h $(DIAGNOSTIC_H) $(VARRAY_H) \
!     langhooks.h $(GGC_H) $(TARGET_H) cgraph.h
  c-aux-info.o : c-aux-info.c  $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
!     $(C_TREE_H) flags.h toplev.h
  c-convert.o : c-convert.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
!     flags.h toplev.h $(C_COMMON_H) real.h
! c-pragma.o: c-pragma.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
!     function.h c-pragma.h toplev.h output.h $(GGC_H) $(TM_P_H) $(C_COMMON_H) gt-c-pragma.h
! graph.o: graph.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) toplev.h flags.h output.h \
      $(RTL_H) function.h hard-reg-set.h $(BASIC_BLOCK_H) graph.h
! sbitmap.o: sbitmap.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) flags.h \
      hard-reg-set.h $(BASIC_BLOCK_H)
  
  COLLECT2_OBJS = collect2.o tlink.o intl.o version.o
--- 1357,1408 ----
  	-cp -p $^ $(srcdir)
  
  c-parse.c: c-parse.y
! 	-$(BISON) $(BISONFLAGS) -o $@ $<
  
  c-parse.y: c-parse.in
  	echo '/*WARNING: This file is automatically generated!*/' >tmp-c-parse.y
  	sed -e "/^@@ifobjc.*/,/^@@end_ifobjc.*/d" \
  	    -e "/^@@ifc.*/d" -e "/^@@end_ifc.*/d" $< >>tmp-c-parse.y
! 	$(SHELL) $(srcdir)/../move-if-change tmp-c-parse.y $@
  
  c-incpath.o: c-incpath.c c-incpath.h $(CONFIG_H) $(SYSTEM_H) $(CPPLIB_H) \
! 		intl.h prefix.h coretypes.h $(TM_H) cppdefault.h $(TARGET_H) \
! 		$(MACHMODE_H)
  
  c-decl.o : c-decl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
!     $(RTL_H) $(C_TREE_H) $(GGC_H) $(TARGET_H) $(FLAGS_H) function.h output.h \
      $(EXPR_H) debug.h toplev.h intl.h $(TM_P_H) tree-inline.h $(TIMEVAR_H) \
!     opts.h $(C_PRAGMA_H) gt-c-decl.h $(CGRAPH_H) $(HASHTAB_H) libfuncs.h except.h \
!     $(LANGHOOKS_DEF_H) $(TREE_DUMP_H)
  c-typeck.o : c-typeck.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(C_TREE_H) \
!     $(TARGET_H) $(FLAGS_H) intl.h output.h $(EXPR_H) $(RTL_H) toplev.h $(TM_P_H) \
!     langhooks.h
  c-lang.o : c-lang.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
      $(C_TREE_H) $(C_PRETTY_PRINT_H) $(DIAGNOSTIC_H) \
!     $(GGC_H) langhooks.h $(LANGHOOKS_DEF_H) $(C_COMMON_H) gtype-c.h \
!     c-objc-common.h c-pragma.h
  stub-objc.o : stub-objc.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TREE_H) \
      $(GGC_H) $(C_COMMON_H)
  c-lex.o : c-lex.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
      $(RTL_H) debug.h $(C_TREE_H) $(C_COMMON_H) real.h c-incpath.h cppdefault.h \
!     $(C_PRAGMA_H) input.h intl.h $(FLAGS_H) toplev.h output.h \
      $(CPPLIB_H) $(EXPR_H) $(TM_P_H)
  c-ppoutput.o : c-ppoutput.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
!     $(C_COMMON_H) $(TREE_H) $(CPPLIB_H) $(srcdir)/../libcpp/internal.h $(TM_P_H) $(C_PRAGMA_H)
  c-objc-common.o : c-objc-common.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
!     $(C_TREE_H) $(RTL_H) insn-config.h $(INTEGRATE_H) $(EXPR_H) \
!     $(FLAGS_H) toplev.h tree-inline.h $(DIAGNOSTIC_H) $(VARRAY_H) \
!     langhooks.h $(GGC_H) $(TARGET_H) $(CGRAPH_H) $(C_PRETTY_PRINT_H) c-objc-common.h
  c-aux-info.o : c-aux-info.c  $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
!     $(C_TREE_H) $(FLAGS_H) toplev.h
  c-convert.o : c-convert.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
!     $(FLAGS_H) toplev.h $(C_COMMON_H) real.h
! c-pragma.o: c-pragma.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
!     $(TREE_H) function.h $(C_PRAGMA_H) toplev.h output.h $(GGC_H) $(TM_P_H) \
!     $(C_COMMON_H) $(TARGET_H) gt-c-pragma.h
! graph.o: graph.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) toplev.h $(FLAGS_H) output.h \
      $(RTL_H) function.h hard-reg-set.h $(BASIC_BLOCK_H) graph.h
! sbitmap.o: sbitmap.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(FLAGS_H) \
      hard-reg-set.h $(BASIC_BLOCK_H)
  
  COLLECT2_OBJS = collect2.o tlink.o intl.o version.o
*************** tlink.o: tlink.c $(DEMANGLE_H) $(HASHTAB
*** 1364,1405 ****
  # A file used by all variants of C.
  
  c-common.o : c-common.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
! 	$(OBSTACK_H) $(C_COMMON_H) flags.h toplev.h output.h c-pragma.h intl.h \
  	$(GGC_H) $(EXPR_H) $(TM_P_H) builtin-types.def builtin-attrs.def \
  	$(DIAGNOSTIC_H) gt-c-common.h langhooks.h varray.h $(RTL_H) \
! 	$(TARGET_H) $(C_TREE_H)
  c-pretty-print.o : c-pretty-print.c $(C_PRETTY_PRINT_H) \
! 	$(C_COMMON_H) $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) real.h
  
! c-opts.o : c-opts.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
!         c-pragma.h flags.h toplev.h langhooks.h tree-inline.h $(DIAGNOSTIC_H) \
! 	intl.h debug.h $(C_COMMON_H) opts.h options.h $(PARAMS_H)
  	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
  		$< $(OUTPUT_OPTION) @TARGET_SYSTEM_ROOT_DEFINE@
  
  c-cppbuiltin.o : c-cppbuiltin.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
! 	$(TREE_H) $(C_COMMON_H) c-pragma.h flags.h toplev.h langhooks.h \
! 	output.h except.h real.h $(TM_P_H)
  
  # A file used by all variants of C and some other languages.
  
! attribs.o : attribs.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) flags.h \
! 	toplev.h output.h c-pragma.h $(RTL_H) $(GGC_H) $(EXPR_H) $(TM_P_H) \
  	builtin-types.def $(TARGET_H) langhooks.h
  
  c-format.o : c-format.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) langhooks.h \
! 	$(C_COMMON_H) flags.h toplev.h intl.h $(DIAGNOSTIC_H)
  
  c-semantics.o : c-semantics.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
! 	$(C_TREE_H) flags.h toplev.h output.h c-pragma.h $(RTL_H) $(GGC_H) \
  	$(EXPR_H) $(PREDICT_H) tree-inline.h
  
  c-dump.o : c-dump.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
! 	$(C_TREE_H) tree-dump.h
  
  c-pch.o : c-pch.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(CPPLIB_H) $(TREE_H) \
! 	$(C_COMMON_H) output.h toplev.h c-pragma.h $(GGC_H) debug.h \
! 	langhooks.h flags.h hosthooks.h version.h $(TARGET_H)
  	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
  	  -DHOST_MACHINE=\"$(host)\" -DTARGET_MACHINE=\"$(target)\" \
  	  $< $(OUTPUT_OPTION)
--- 1425,1471 ----
  # A file used by all variants of C.
  
  c-common.o : c-common.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
! 	$(OBSTACK_H) $(C_COMMON_H) $(FLAGS_H) toplev.h output.h $(C_PRAGMA_H) \
  	$(GGC_H) $(EXPR_H) $(TM_P_H) builtin-types.def builtin-attrs.def \
  	$(DIAGNOSTIC_H) gt-c-common.h langhooks.h varray.h $(RTL_H) \
! 	$(TARGET_H) $(C_TREE_H) tree-iterator.h langhooks.h tree-mudflap.h \
! 	intl.h opts.h real.h $(CPPLIB_H) tree-inline.h $(HASHTAB_H) \
! 	builtins.def
! 
  c-pretty-print.o : c-pretty-print.c $(C_PRETTY_PRINT_H) \
! 	$(C_COMMON_H) $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) real.h \
! 	$(DIAGNOSTIC_H)
  
! c-opts.o : c-opts.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H)		\
!         $(TREE_H) $(C_PRAGMA_H) $(FLAGS_H) toplev.h langhooks.h		\
!         tree-inline.h $(DIAGNOSTIC_H) intl.h debug.h $(C_COMMON_H)	\
!         opts.h options.h $(PARAMS_H) $(MKDEPS_H)
  	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
  		$< $(OUTPUT_OPTION) @TARGET_SYSTEM_ROOT_DEFINE@
  
  c-cppbuiltin.o : c-cppbuiltin.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
! 	$(TREE_H) version.h $(C_COMMON_H) $(C_PRAGMA_H) $(FLAGS_H) toplev.h \
! 	langhooks.h output.h except.h real.h $(TARGET_H) $(TM_P_H)
  
  # A file used by all variants of C and some other languages.
  
! attribs.o : attribs.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(FLAGS_H) \
! 	toplev.h output.h $(C_PRAGMA_H) $(RTL_H) $(GGC_H) $(EXPR_H) $(TM_P_H) \
  	builtin-types.def $(TARGET_H) langhooks.h
  
  c-format.o : c-format.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) langhooks.h \
! 	$(C_COMMON_H) $(FLAGS_H) toplev.h intl.h $(DIAGNOSTIC_H) c-format.h
  
  c-semantics.o : c-semantics.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
! 	$(C_TREE_H) $(FLAGS_H) toplev.h output.h $(C_PRAGMA_H) $(RTL_H) $(GGC_H) \
  	$(EXPR_H) $(PREDICT_H) tree-inline.h
  
  c-dump.o : c-dump.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
! 	$(C_TREE_H) $(TREE_DUMP_H)
  
  c-pch.o : c-pch.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(CPPLIB_H) $(TREE_H) \
! 	$(C_COMMON_H) output.h toplev.h $(C_PRAGMA_H) $(GGC_H) debug.h \
! 	langhooks.h $(FLAGS_H) hosthooks.h version.h $(TARGET_H)
  	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
  	  -DHOST_MACHINE=\"$(host)\" -DTARGET_MACHINE=\"$(target)\" \
  	  $< $(OUTPUT_OPTION)
*************** gccspec.o: gccspec.c $(CONFIG_H) $(SYSTE
*** 1437,1452 ****
  cppspec.o: cppspec.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(GCC_H)
  
  tree-check.h: s-check ; @true
! s-check : gencheck$(build_exeext) $(srcdir)/move-if-change
! 	$(RUN_GEN) ./gencheck$(build_exeext) > tmp-check.h
! 	$(SHELL) $(srcdir)/move-if-change tmp-check.h tree-check.h
  	$(STAMP) s-check
  
! gencheck$(build_exeext) : gencheck.o $(BUILD_LIBDEPS)
  	$(CC_FOR_BUILD) $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -o $@ \
! 	 gencheck.o $(BUILD_LIBS)
  
! gencheck.o : gencheck.c gencheck.h tree.def $(BCONFIG_H) $(SYSTEM_H) \
  	coretypes.h $(GTM_H) $(lang_tree_files)
  
  gencheck.h : s-gencheck ; @true
--- 1503,1518 ----
  cppspec.o: cppspec.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(GCC_H)
  
  tree-check.h: s-check ; @true
! s-check : build/gencheck$(build_exeext)
! 	$(RUN_GEN) build/gencheck$(build_exeext) > tmp-check.h
! 	$(SHELL) $(srcdir)/../move-if-change tmp-check.h tree-check.h
  	$(STAMP) s-check
  
! build/gencheck$(build_exeext) : build/gencheck.o $(BUILD_LIBDEPS)
  	$(CC_FOR_BUILD) $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -o $@ \
! 	 build/gencheck.o $(BUILD_LIBS)
  
! build/gencheck.o : gencheck.c gencheck.h tree.def $(BCONFIG_H) $(SYSTEM_H) \
  	coretypes.h $(GTM_H) $(lang_tree_files)
  
  gencheck.h : s-gencheck ; @true
*************** s-gencheck : Makefile
*** 1454,1460 ****
  	ltf="$(lang_tree_files)"; for f in $$ltf; do \
  	    echo "#include \"$$f\""; \
  	done | sed 's|$(srcdir)/||' > tmp-gencheck.h
! 	$(SHELL) $(srcdir)/move-if-change tmp-gencheck.h gencheck.h
  	$(STAMP) s-gencheck
  
  specs.h : s-specs ; @true
--- 1520,1526 ----
  	ltf="$(lang_tree_files)"; for f in $$ltf; do \
  	    echo "#include \"$$f\""; \
  	done | sed 's|$(srcdir)/||' > tmp-gencheck.h
! 	$(SHELL) $(srcdir)/../move-if-change tmp-gencheck.h gencheck.h
  	$(STAMP) s-gencheck
  
  specs.h : s-specs ; @true
*************** s-specs : Makefile
*** 1462,1862 ****
  	lsf="$(lang_specs_files)"; for f in $$lsf; do \
  	    echo "#include \"$$f\""; \
  	done | sed 's|$(srcdir)/||' > tmp-specs.h
! 	$(SHELL) $(srcdir)/move-if-change tmp-specs.h specs.h
  	$(STAMP) s-specs
  
! options.c: $(lang_opt_files) $(srcdir)/opts.sh options.h intl.h
  
! options.h: $(lang_opt_files) $(srcdir)/opts.sh Makefile
! 	AWK=$(AWK) $(SHELL) $(srcdir)/opts.sh \
!                '$(SHELL) $(srcdir)/move-if-change' \
!                options.c options.h $(lang_opt_files)
  
  dumpvers: dumpvers.c
  
  version.o: version.c version.h
  
! gtype-desc.o: gtype-desc.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) varray.h \
! 	$(HASHTAB_H) $(TREE_H) $(RTL_H) function.h insn-config.h $(EXPR_H) $(OPTABS_H) \
! 	libfuncs.h debug.h $(GGC_H) bitmap.h $(BASIC_BLOCK_H) hard-reg-set.h \
! 	cselib.h insn-addr.h
  
  ggc-common.o: ggc-common.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(GGC_H) \
! 	$(HASHTAB_H) toplev.h $(PARAMS_H) hosthooks.h
! 
! ggc-simple.o: ggc-simple.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
! 	flags.h $(GGC_H) varray.h $(TIMEVAR_H) $(TM_P_H) $(PARAMS_H)
  
  ggc-page.o: ggc-page.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
! 	flags.h toplev.h $(GGC_H) $(TIMEVAR_H) $(TM_P_H) $(PARAMS_H)
  
  ggc-zone.o: ggc-zone.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
! 	flags.h toplev.h $(GGC_H) $(TIMEVAR_H) $(TM_P_H) $(PARAMS_H)
  
  stringpool.o: stringpool.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
  	$(TREE_H) $(GGC_H) gt-stringpool.h
  
- ggc-none.o: ggc-none.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(GTM_H) $(GGC_H)
- 	$(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
- 
  prefix.o: prefix.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) Makefile prefix.h
  	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
  	-DPREFIX=\"$(prefix)\" \
  	  -c $(srcdir)/prefix.c $(OUTPUT_OPTION)
  
! convert.o: convert.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) flags.h \
     convert.h toplev.h langhooks.h
  
  langhooks.o : langhooks.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) toplev.h \
     tree-inline.h $(RTL_H) insn-config.h $(INTEGRATE_H) langhooks.h \
!    $(LANGHOOKS_DEF_H) flags.h $(GGC_H) gt-langhooks.h diagnostic.h
! tree.o : tree.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) flags.h function.h \
     toplev.h $(GGC_H) $(HASHTAB_H) $(TARGET_H) output.h $(TM_P_H) langhooks.h \
!    real.h gt-tree.h
  tree-dump.o: tree-dump.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
!    $(C_TREE_H) flags.h langhooks.h toplev.h output.h c-pragma.h $(RTL_H) $(GGC_H) \
!    $(EXPR_H) $(SPLAY_TREE_H) tree-dump.h
  tree-inline.o : tree-inline.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
!    $(TREE_H) $(RTL_H) $(EXPR_H) flags.h $(PARAMS_H) input.h insn-config.h \
     $(INTEGRATE_H) $(VARRAY_H) $(HASHTAB_H) $(SPLAY_TREE_H) toplev.h \
!    langhooks.h $(C_COMMON_H) tree-inline.h cgraph.h intl.h
! tree-optimize.o : tree-optimize.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
!    $(TREE_H) toplev.h langhooks.h cgraph.h $(TIMEVAR_H) function.h $(GGC_H)
! 
  print-tree.o : print-tree.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
     $(GGC_H) langhooks.h real.h
! stor-layout.o : stor-layout.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
!    flags.h function.h $(EXPR_H) $(RTL_H) toplev.h $(GGC_H) $(TM_P_H) $(TARGET_H) \
     langhooks.h
! fold-const.o : fold-const.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
!    flags.h real.h toplev.h $(HASHTAB_H) $(EXPR_H) $(RTL_H) $(GGC_H) $(TM_P_H) langhooks.h
! diagnostic.o : diagnostic.c $(DIAGNOSTIC_H) real.h \
!    $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(TM_P_H) flags.h $(GGC_H) \
!    input.h toplev.h intl.h langhooks.h $(LANGHOOKS_DEF_H)
  opts.o : opts.c opts.h options.h toplev.h $(CONFIG_H) $(SYSTEM_H) \
  	coretypes.h $(TREE_H) $(TM_H) langhooks.h $(GGC_H) $(RTL_H) \
! 	output.h $(DIAGNOSTIC_H) $(TM_P_H) $(INSN_ATTR_H) intl.h
  targhooks.o : targhooks.c targhooks.h $(CONFIG_H) $(SYSTEM_H) \
! 	coretypes.h $(TREE_H) $(TM_H) $(RTL_H) $(TM_P_H) function.h \
  	output.h toplev.h
  
! toplev.o : toplev.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(RTL_H) \
!    function.h flags.h xcoffout.h input.h $(INSN_ATTR_H) output.h $(DIAGNOSTIC_H) \
     debug.h insn-config.h intl.h $(RECOG_H) Makefile toplev.h \
     dwarf2out.h sdbout.h dbxout.h $(EXPR_H) hard-reg-set.h $(BASIC_BLOCK_H) \
!    graph.h $(LOOP_H) except.h $(REGS_H) $(TIMEVAR_H) value-prof.h \
     $(PARAMS_H) $(TM_P_H) reload.h dwarf2asm.h $(TARGET_H) \
!    langhooks.h insn-flags.h cfglayout.h real.h cfgloop.h \
!    hosthooks.h $(LANGHOOKS_DEF_H) cgraph.h $(COVERAGE_H) alloc-pool.h
  	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
  	  -DTARGET_NAME=\"$(target_noncanonical)\" \
  	  -c $(srcdir)/toplev.c $(OUTPUT_OPTION)
  main.o : main.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) toplev.h
  
! host-default.o : host-default.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
! 	hosthooks.h hosthooks-def.h
  
  rtl-error.o: rtl-error.c $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(INSN_ATTR_H) \
     insn-config.h input.h toplev.h intl.h $(DIAGNOSTIC_H) $(CONFIG_H)
  
! rtl.o : rtl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(GTM_H) $(RTL_H) real.h \
    $(GGC_H) errors.h
- 	$(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
  
  print-rtl.o : print-rtl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
!     $(RTL_H) $(TREE_H) hard-reg-set.h $(BASIC_BLOCK_H) real.h $(TM_P_H)
  rtlanal.o : rtlanal.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) toplev.h \
!    $(RTL_H) hard-reg-set.h $(TM_P_H) insn-config.h $(RECOG_H) real.h flags.h \
!    $(BASIC_BLOCK_H)
! 
! errors.o : errors.c $(CONFIG_H) $(SYSTEM_H) errors.h
! 	$(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
  
  varasm.o : varasm.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(RTL_H) \
!    flags.h function.h $(EXPR_H) hard-reg-set.h $(REGS_H) \
!    output.h c-pragma.h toplev.h xcoffout.h debug.h $(GGC_H) $(TM_P_H) \
     $(HASHTAB_H) $(TARGET_H) langhooks.h gt-varasm.h real.h
! function.o : function.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
!    flags.h function.h $(EXPR_H) $(OPTABS_H) libfuncs.h $(REGS_H) hard-reg-set.h \
     insn-config.h $(RECOG_H) output.h toplev.h except.h $(HASHTAB_H) $(GGC_H) \
!    $(TM_P_H) langhooks.h gt-function.h $(TARGET_H)
! stmt.o : stmt.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) flags.h \
     function.h insn-config.h hard-reg-set.h $(EXPR_H) libfuncs.h except.h \
!    $(LOOP_H) $(RECOG_H) toplev.h output.h varray.h $(GGC_H) $(TM_P_H) \
!    langhooks.h $(PREDICT_H) gt-stmt.h $(OPTABS_H) $(TARGET_H)
  except.o : except.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
!    $(TREE_H) flags.h except.h function.h $(EXPR_H) libfuncs.h $(INTEGRATE_H) \
     langhooks.h insn-config.h hard-reg-set.h $(BASIC_BLOCK_H) output.h \
     dwarf2asm.h dwarf2out.h toplev.h $(HASHTAB_H) intl.h $(GGC_H) \
!    gt-except.h cgraph.h
! expr.o : expr.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) flags.h \
!    function.h $(REGS_H) $(EXPR_H) $(OPTABS_H) libfuncs.h $(INSN_ATTR_H) insn-config.h \
!    $(RECOG_H) output.h typeclass.h hard-reg-set.h toplev.h hard-reg-set.h \
!    except.h reload.h $(GGC_H) langhooks.h intl.h $(TM_P_H) real.h $(TARGET_H)
  dojump.o : dojump.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
!    flags.h function.h $(EXPR_H) $(OPTABS_H) $(INSN_ATTR_H) insn-config.h \
!    langhooks.h
  builtins.o : builtins.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H)\
!    flags.h $(TARGET_H) function.h $(REGS_H) $(EXPR_H) $(OPTABS_H) insn-config.h \
!    $(RECOG_H) output.h typeclass.h hard-reg-set.h toplev.h hard-reg-set.h \
!    except.h $(TM_P_H) $(PREDICT_H) libfuncs.h real.h langhooks.h
! calls.o : calls.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) flags.h \
     $(EXPR_H) $(OPTABS_H) langhooks.h $(TARGET_H) \
!    libfuncs.h $(REGS_H) toplev.h output.h function.h $(TIMEVAR_H) $(TM_P_H) cgraph.h except.h
  expmed.o : expmed.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
!    flags.h insn-config.h $(EXPR_H) $(OPTABS_H) $(RECOG_H) real.h \
     toplev.h $(TM_P_H) langhooks.h
  explow.o : explow.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
!    flags.h hard-reg-set.h insn-config.h $(EXPR_H) $(OPTABS_H) $(RECOG_H) \
     toplev.h function.h $(GGC_H) $(TM_P_H) langhooks.h gt-explow.h
  optabs.o : optabs.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
!    flags.h insn-config.h $(EXPR_H) $(OPTABS_H) libfuncs.h $(RECOG_H) reload.h \
     toplev.h $(GGC_H) real.h $(TM_P_H) except.h gt-optabs.h $(BASIC_BLOCK_H) \
     $(TARGET_H)
  dbxout.o : dbxout.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(RTL_H) \
!    flags.h $(REGS_H) debug.h $(TM_P_H) $(TARGET_H) function.h langhooks.h \
     insn-config.h reload.h gstab.h xcoffout.h output.h dbxout.h toplev.h \
!    $(GGC_H) gt-dbxout.h
  debug.o : debug.c debug.h $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H)
! sdbout.o : sdbout.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(RTL_H) \
!    flags.h function.h $(EXPR_H) output.h hard-reg-set.h $(REGS_H) real.h \
!    insn-config.h xcoffout.h c-pragma.h $(GGC_H) $(TARGET_H) \
!    sdbout.h toplev.h $(TM_P_H) except.h debug.h langhooks.h gt-sdbout.h
! dwarf2out.o : dwarf2out.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
!    $(RTL_H) dwarf2.h debug.h flags.h insn-config.h reload.h output.h $(DIAGNOSTIC_H) real.h \
!    hard-reg-set.h $(REGS_H) $(EXPR_H) libfuncs.h toplev.h dwarf2out.h varray.h \
!    $(GGC_H) except.h dwarf2asm.h $(TM_P_H) langhooks.h $(HASHTAB_H) \
!    gt-dwarf2out.h $(TARGET_H) cgraph.h
! dwarf2asm.o : dwarf2asm.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) flags.h $(RTL_H) \
     $(TREE_H) output.h dwarf2asm.h $(TM_P_H) $(GGC_H) gt-dwarf2asm.h
! vmsdbgout.o : vmsdbgout.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
!    $(RTL_H) flags.h output.h vmsdbg.h debug.h langhooks.h function.h $(TARGET_H)
  xcoffout.o : xcoffout.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(RTL_H) \
!    xcoffout.h flags.h toplev.h output.h dbxout.h $(GGC_H) $(TARGET_H)
  emit-rtl.o : emit-rtl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
!    flags.h function.h $(REGS_H) insn-config.h $(RECOG_H) real.h $(GGC_H) \
     $(EXPR_H) $(OBSTACK_H) hard-reg-set.h bitmap.h toplev.h \
     $(HASHTAB_H) $(TM_P_H) debug.h langhooks.h gt-emit-rtl.h
  real.o : real.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) toplev.h $(TM_P_H)
  integrate.o : integrate.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
!    flags.h debug.h $(INTEGRATE_H) insn-config.h $(EXPR_H) real.h $(REGS_H) \
!    intl.h function.h output.h $(RECOG_H) except.h toplev.h $(LOOP_H) \
     $(PARAMS_H) $(TM_P_H) $(TARGET_H) langhooks.h gt-integrate.h
! jump.o : jump.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) flags.h \
     hard-reg-set.h $(REGS_H) insn-config.h $(RECOG_H) $(EXPR_H) real.h except.h function.h \
     toplev.h $(INSN_ATTR_H) $(TM_P_H) reload.h $(PREDICT_H) $(TIMEVAR_H) \
     $(DIAGNOSTIC_H)
  
  simplify-rtx.o : simplify-rtx.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
!    $(REGS_H) hard-reg-set.h flags.h real.h insn-config.h $(RECOG_H) $(EXPR_H) toplev.h \
     output.h function.h $(GGC_H) $(OBSTACK_H) $(TM_P_H) $(TREE_H) $(TARGET_H)
  cgraph.o : cgraph.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
!    langhooks.h toplev.h flags.h $(GGC_H)  $(TARGET_H) cgraph.h gt-cgraph.h \
     output.h intl.h
  cgraphunit.o : cgraphunit.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
!    langhooks.h tree-inline.h toplev.h flags.h $(GGC_H)  $(TARGET_H) cgraph.h intl.h \
!    function.h
  coverage.o : coverage.c gcov-io.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
!    $(TM_H) $(RTL_H) $(TREE_H) flags.h output.h $(REGS_H) $(EXPR_H) function.h \
     toplev.h $(GGC_H) $(TARGET_H) langhooks.h $(COVERAGE_H) libfuncs.h \
     gt-coverage.h $(HASHTAB_H)
  cselib.o : cselib.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(REGS_H) \
!    hard-reg-set.h flags.h real.h insn-config.h $(RECOG_H) $(EXPR_H) toplev.h \
!    output.h function.h cselib.h $(GGC_H) $(TM_P_H) gt-cselib.h $(PARAMS_H)
  cse.o : cse.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(REGS_H) \
!    hard-reg-set.h flags.h real.h insn-config.h $(RECOG_H) $(EXPR_H) toplev.h \
     output.h function.h $(BASIC_BLOCK_H) $(GGC_H) $(TM_P_H) $(TIMEVAR_H) \
!    except.h $(TARGET_H) $(PARAMS_H)
  web.o : web.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(REGS_H) \
!    hard-reg-set.h flags.h $(BASIC_BLOCK_H) function.h output.h toplev.h df.h
  gcse.o : gcse.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(REGS_H) \
!    hard-reg-set.h flags.h real.h insn-config.h $(GGC_H) $(RECOG_H) $(EXPR_H) \
     $(BASIC_BLOCK_H) function.h output.h toplev.h $(TM_P_H) $(PARAMS_H) \
!    except.h gt-gcse.h $(TREE_H) cselib.h
! sibcall.o : sibcall.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(REGS_H) \
!    function.h hard-reg-set.h flags.h insn-config.h $(RECOG_H) $(BASIC_BLOCK_H)
  resource.o : resource.c $(CONFIG_H) $(RTL_H) hard-reg-set.h $(SYSTEM_H) coretypes.h \
!    $(TM_H) $(BASIC_BLOCK_H) $(REGS_H) flags.h output.h resource.h function.h toplev.h \
     $(INSN_ATTR_H) except.h $(PARAMS_H) $(TM_P_H)
  lcm.o : lcm.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(REGS_H) \
!    hard-reg-set.h flags.h real.h insn-config.h $(INSN_ATTR_H) $(RECOG_H) $(EXPR_H) \
!    $(BASIC_BLOCK_H) $(TM_P_H) df.h function.h
  df.o : df.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
     insn-config.h $(RECOG_H) function.h $(REGS_H) alloc-pool.h hard-reg-set.h \
!    $(BASIC_BLOCK_H) df.h $(FIBHEAP_H)
  conflict.o : conflict.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(OBSTACK_H) \
     $(HASHTAB_H) $(RTL_H) hard-reg-set.h $(BASIC_BLOCK_H)
  profile.o : profile.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
!    $(TREE_H) flags.h output.h $(REGS_H) $(EXPR_H) function.h \
!    toplev.h $(BASIC_BLOCK_H) $(COVERAGE_H) $(TREE_H) value-prof.h
  value-prof.o : value-prof.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
!    $(BASIC_BLOCK_H) hard-reg-set.h value-prof.h $(EXPR_H) output.h flags.h \
!    $(RECOG_H) insn-config.h $(OPTABS_H) $(REGS_H)
! loop.o : loop.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) flags.h $(LOOP_H) \
     insn-config.h $(REGS_H) hard-reg-set.h $(RECOG_H) $(EXPR_H) \
!    real.h $(PREDICT_H) $(BASIC_BLOCK_H) function.h cfgloop.h \
     toplev.h varray.h except.h cselib.h $(OPTABS_H) $(TM_P_H) $(GGC_H)
! doloop.o : doloop.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) flags.h \
!    $(LOOP_H) $(EXPR_H) hard-reg-set.h $(BASIC_BLOCK_H) $(TM_P_H) toplev.h \
!    cfgloop.h
! unroll.o : unroll.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) insn-config.h \
!    function.h $(INTEGRATE_H) $(REGS_H) $(RECOG_H) flags.h $(EXPR_H) $(LOOP_H) toplev.h \
!    hard-reg-set.h varray.h $(BASIC_BLOCK_H) $(TM_P_H) $(PREDICT_H) $(PARAMS_H) \
!    cfgloop.h
  alloc-pool.o : alloc-pool.c $(CONFIG_H) $(SYSTEM_H) alloc-pool.h $(HASHTAB_H)
  flow.o : flow.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
!    flags.h insn-config.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h \
     $(RECOG_H) function.h except.h $(EXPR_H) $(GGC_H) $(TM_P_H)
! cfg.o : cfg.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) flags.h insn-config.h \
     $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h $(RECOG_H) \
!    function.h except.h $(GGC_H) $(TM_P_H) alloc-pool.h
  cfghooks.o: cfghooks.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
!    $(BASIC_BLOCK_H) cfglayout.h
! cfgrtl.o : cfgrtl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) flags.h \
     insn-config.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h $(RECOG_H) \
     function.h except.h $(GGC_H) $(TM_P_H) insn-config.h $(EXPR_H)
  cfganal.o : cfganal.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
!    $(BASIC_BLOCK_H) hard-reg-set.h insn-config.h $(RECOG_H) $(GGC_H) $(TM_P_H)
! cfgbuild.o : cfgbuild.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) flags.h \
     insn-config.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h $(RECOG_H) \
     function.h except.h $(GGC_H)
  cfgcleanup.o : cfgcleanup.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
!    $(RTL_H) $(TIMEVAR_H) $(BASIC_BLOCK_H) hard-reg-set.h output.h flags.h \
     $(RECOG_H) toplev.h $(GGC_H) insn-config.h cselib.h $(TARGET_H) $(TM_P_H) \
!    $(PARAMS_H)
  cfgloop.o : cfgloop.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) coretypes.h $(TM_H) \
!    $(BASIC_BLOCK_H) hard-reg-set.h cfgloop.h flags.h
  cfgloopanal.o : cfgloopanal.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) \
!    $(BASIC_BLOCK_H) hard-reg-set.h cfgloop.h $(EXPR_H) coretypes.h $(TM_H)
  cfgloopmanip.o : cfgloopmanip.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) \
!    $(BASIC_BLOCK_H) hard-reg-set.h cfgloop.h cfglayout.h output.h coretypes.h $(TM_H)
  loop-init.o : loop-init.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) \
!    $(BASIC_BLOCK_H) hard-reg-set.h cfgloop.h cfglayout.h \
     coretypes.h $(TM_H)
  loop-unswitch.o : loop-unswitch.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TM_H) \
!    $(BASIC_BLOCK_H) hard-reg-set.h cfgloop.h cfglayout.h $(PARAMS_H) \
     output.h $(EXPR_H) coretypes.h $(TM_H)
  loop-unroll.o: loop-unroll.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TM_H) \
!    $(BASIC_BLOCK_H) hard-reg-set.h cfgloop.h cfglayout.h $(PARAMS_H) \
!    output.h $(EXPR_H) coretypes.h $(TM_H)
  dominance.o : dominance.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
     hard-reg-set.h $(BASIC_BLOCK_H) et-forest.h
  et-forest.o : et-forest.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) et-forest.h alloc-pool.h
! combine.o : combine.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) flags.h \
!    function.h insn-config.h $(INSN_ATTR_H) $(REGS_H) $(EXPR_H) \
!    $(BASIC_BLOCK_H) $(RECOG_H) real.h hard-reg-set.h toplev.h $(TM_P_H) $(TREE_H) $(TARGET_H)
  regclass.o : regclass.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
!    hard-reg-set.h flags.h $(BASIC_BLOCK_H) $(REGS_H) insn-config.h $(RECOG_H) reload.h \
!    real.h toplev.h function.h output.h $(GGC_H) $(TM_P_H) $(EXPR_H) $(TIMEVAR_H)
  local-alloc.o : local-alloc.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
!    flags.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h insn-config.h $(RECOG_H) \
     output.h function.h $(INSN_ATTR_H) toplev.h  except.h $(TM_P_H)
! bitmap.o : bitmap.c $(CONFIG_H) $(SYSTEM_H)  coretypes.h $(GTM_H) $(RTL_H) flags.h \
!    $(BASIC_BLOCK_H) $(REGS_H) $(GGC_H)
! 	$(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
! global.o : global.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) flags.h \
!    reload.h function.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h insn-config.h output.h \
!    toplev.h $(TM_P_H)
! varray.o : varray.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) varray.h $(GGC_H) errors.h
! ra.o : ra.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TM_P_H) insn-config.h \
!    $(RECOG_H) $(INTEGRATE_H) function.h $(REGS_H) $(OBSTACK_H) hard-reg-set.h \
!    $(BASIC_BLOCK_H) df.h $(EXPR_H) output.h toplev.h flags.h reload.h ra.h
! ra-build.o : ra-build.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TM_P_H) \
!    insn-config.h $(RECOG_H) function.h $(REGS_H) hard-reg-set.h \
!    $(BASIC_BLOCK_H) df.h output.h $(GGC_H) ra.h gt-ra-build.h reload.h
! ra-colorize.o : ra-colorize.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
!     $(TM_P_H) function.h $(REGS_H) hard-reg-set.h $(BASIC_BLOCK_H) df.h output.h ra.h
! ra-debug.o : ra-debug.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
!    insn-config.h $(RECOG_H) function.h hard-reg-set.h $(BASIC_BLOCK_H) df.h output.h \
!    ra.h $(TM_P_H)
! ra-rewrite.o : ra-rewrite.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
!    $(TM_P_H) function.h $(REGS_H) hard-reg-set.h $(BASIC_BLOCK_H) df.h $(EXPR_H) \
!    output.h except.h ra.h reload.h insn-config.h
! reload.o : reload.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) flags.h output.h \
     $(EXPR_H) $(OPTABS_H) reload.h $(RECOG_H) hard-reg-set.h insn-config.h \
     $(REGS_H) function.h real.h toplev.h $(TM_P_H) $(PARAMS_H)
! reload1.o : reload1.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) real.h flags.h \
     $(EXPR_H) $(OPTABS_H) reload.h $(REGS_H) hard-reg-set.h insn-config.h \
     $(BASIC_BLOCK_H) $(RECOG_H) output.h function.h toplev.h $(TM_P_H) \
     except.h $(TREE_H)
! postreload.o : postreload.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) real.h flags.h \
     $(EXPR_H) $(OPTABS_H) reload.h $(REGS_H) hard-reg-set.h insn-config.h \
     $(BASIC_BLOCK_H) $(RECOG_H) output.h function.h toplev.h cselib.h $(TM_P_H) \
     except.h $(TREE_H)
  caller-save.o : caller-save.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
!    flags.h $(REGS_H) hard-reg-set.h insn-config.h $(BASIC_BLOCK_H) function.h \
     $(RECOG_H) reload.h $(EXPR_H) toplev.h $(TM_P_H)
! bt-load.o : bt-load.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
     $(BASIC_BLOCK_H) $(RTL_H) hard-reg-set.h $(REGS_H) $(OBSTACK_H) $(TM_P_H) \
!    $(FIBHEAP_H) output.h $(TARGET_H) $(EXPR_H) flags.h $(INSN_ATTR_H)
  reorg.o : reorg.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) conditions.h \
     hard-reg-set.h $(BASIC_BLOCK_H) $(REGS_H) insn-config.h $(INSN_ATTR_H) except.h \
!    $(RECOG_H) function.h flags.h output.h $(EXPR_H) toplev.h $(PARAMS_H) $(TM_P_H)
! alias.o : alias.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) flags.h \
!    hard-reg-set.h $(BASIC_BLOCK_H) $(REGS_H) toplev.h output.h $(EXPR_H) \
     $(GGC_H) function.h cselib.h $(TREE_H) $(TM_P_H) langhooks.h $(TARGET_H) \
!    gt-alias.h $(TIMEVAR_H) cgraph.h
  regmove.o : regmove.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) insn-config.h \
!    $(RECOG_H) output.h $(REGS_H) hard-reg-set.h flags.h function.h \
     $(EXPR_H) $(BASIC_BLOCK_H) toplev.h $(TM_P_H) except.h reload.h
  haifa-sched.o : haifa-sched.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
!    sched-int.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h flags.h insn-config.h function.h \
     $(INSN_ATTR_H) toplev.h $(RECOG_H) except.h $(TM_P_H) $(TARGET_H)
  sched-deps.o : sched-deps.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
!    sched-int.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h flags.h insn-config.h function.h \
     $(INSN_ATTR_H) toplev.h $(RECOG_H) except.h cselib.h $(PARAMS_H) $(TM_P_H)
  sched-rgn.o : sched-rgn.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
!    sched-int.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h flags.h insn-config.h function.h \
!    $(INSN_ATTR_H) toplev.h $(RECOG_H) except.h $(TM_P_H) $(TARGET_H)
  sched-ebb.o : sched-ebb.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
!    sched-int.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h flags.h insn-config.h function.h \
     $(INSN_ATTR_H) toplev.h $(RECOG_H) except.h $(TM_P_H) $(PARAMS_H)
  sched-vis.o : sched-vis.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
!    sched-int.h hard-reg-set.h $(BASIC_BLOCK_H) $(INSN_ATTR_H) $(REGS_H) $(TM_P_H) \
     $(TARGET_H) real.h
  final.o : final.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
!    flags.h intl.h $(REGS_H) $(RECOG_H) conditions.h insn-config.h $(INSN_ATTR_H) \
     function.h real.h output.h hard-reg-set.h except.h debug.h xcoffout.h \
     toplev.h reload.h dwarf2out.h $(BASIC_BLOCK_H) $(TM_P_H) $(TARGET_H) \
     $(EXPR_H)
  recog.o : recog.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) function.h \
!    $(BASIC_BLOCK_H) $(REGS_H) $(RECOG_H) $(EXPR_H) hard-reg-set.h flags.h insn-config.h \
     $(INSN_ATTR_H) real.h toplev.h output.h reload.h $(TM_P_H)
  reg-stack.o : reg-stack.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
!    $(RECOG_H) $(REGS_H) hard-reg-set.h flags.h insn-config.h toplev.h reload.h \
!    varray.h function.h $(TM_P_H) $(GGC_H) gt-reg-stack.h
  sreal.o: sreal.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) sreal.h
  predict.o: predict.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
!    flags.h insn-config.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h \
     $(RECOG_H) function.h except.h $(EXPR_H) $(TM_P_H) $(PREDICT_H) sreal.h \
!    $(PARAMS_H) $(TARGET_H) cfgloop.h $(COVERAGE_H)
! lists.o: lists.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) toplev.h $(RTL_H) $(GGC_H)
  bb-reorder.o : bb-reorder.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
!    $(RTL_H) $(BASIC_BLOCK_H) flags.h timevar.h output.h cfglayout.h $(FIBHEAP_H) \
!    $(TARGET_H)
  tracer.o : tracer.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
!    $(BASIC_BLOCK_H) hard-reg-set.h output.h cfglayout.h flags.h timevar.h \
     $(PARAMS_H) $(COVERAGE_H)
  cfglayout.o : cfglayout.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
     $(RTL_H) $(TREE_H) insn-config.h $(BASIC_BLOCK_H) hard-reg-set.h output.h \
!    function.h cfglayout.h cfgloop.h $(TARGET_H) gt-cfglayout.h $(GGC_H)
! timevar.o : timevar.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TIMEVAR_H) flags.h \
     intl.h toplev.h
  regrename.o : regrename.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
     insn-config.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h $(RECOG_H) function.h \
!    resource.h $(OBSTACK_H) flags.h $(TM_P_H)
  ifcvt.o : ifcvt.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
!    $(REGS_H) toplev.h flags.h insn-config.h function.h $(RECOG_H) $(TARGET_H) \
     $(BASIC_BLOCK_H) $(EXPR_H) output.h except.h $(TM_P_H) real.h $(OPTABS_H) \
!    cfgloop.h
  params.o : params.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(PARAMS_H) toplev.h
  hooks.o: hooks.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(HOOKS_H)
! pretty-print.o: $(CONFIG_H) $(SYSTEM_H) pretty-print.c $(PRETTY_PRINT_H)
  
  $(out_object_file): $(out_file) $(CONFIG_H) coretypes.h $(TM_H) $(TREE_H) $(GGC_H) \
     $(RTL_H) $(REGS_H) hard-reg-set.h real.h insn-config.h conditions.h \
     output.h $(INSN_ATTR_H) $(SYSTEM_H) toplev.h $(TARGET_H) libfuncs.h \
!    $(TARGET_DEF_H) function.h sched-int.h $(TM_P_H) $(EXPR_H) $(OPTABS_H) \
     langhooks.h
  	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
  		$(out_file) $(OUTPUT_OPTION)
--- 1528,2186 ----
  	lsf="$(lang_specs_files)"; for f in $$lsf; do \
  	    echo "#include \"$$f\""; \
  	done | sed 's|$(srcdir)/||' > tmp-specs.h
! 	$(SHELL) $(srcdir)/../move-if-change tmp-specs.h specs.h
  	$(STAMP) s-specs
  
! optionlist: s-options ; @true
! s-options: $(lang_opt_files) Makefile $(srcdir)/opt-gather.awk
! 	$(AWK) -f $(srcdir)/opt-gather.awk $(lang_opt_files) > tmp-optionlist
! 	$(SHELL) $(srcdir)/../move-if-change tmp-optionlist optionlist
! 	$(STAMP) s-options
  
! 
! options.c: optionlist $(srcdir)/opt-functions.awk $(srcdir)/optc-gen.awk
! 	$(AWK) -f $(srcdir)/opt-functions.awk -f $(srcdir)/optc-gen.awk \
! 	       -v header_name="options.h" < $< > $@ 
! 
! options.h: optionlist $(srcdir)/opt-functions.awk $(srcdir)/opth-gen.awk
! 	$(AWK) -f $(srcdir)/opt-functions.awk -f $(srcdir)/opth-gen.awk \
! 	       < $< > $@
! 
! options.o: options.c options.h opts.h intl.h
  
  dumpvers: dumpvers.c
  
  version.o: version.c version.h
  
! gtype-desc.o: gtype-desc.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
! 	varray.h $(HASHTAB_H) $(SPLAY_TREE_H) bitmap.h $(TREE_H) $(RTL_H) \
! 	function.h insn-config.h $(EXPR_H) hard-reg-set.h $(BASIC_BLOCK_H) \
! 	cselib.h insn-addr.h $(OPTABS_H) libfuncs.h debug.h $(GGC_H) \
! 	$(CGRAPH_H) $(TREE_FLOW_H) reload.h $(CPP_ID_DATA_H)
  
  ggc-common.o: ggc-common.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(GGC_H) \
! 	$(HASHTAB_H) toplev.h $(PARAMS_H) hosthooks.h $(HOSTHOOKS_DEF_H)
  
  ggc-page.o: ggc-page.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
! 	$(FLAGS_H) toplev.h $(GGC_H) $(TIMEVAR_H) $(TM_P_H) $(PARAMS_H) $(TREE_FLOW_H)
  
  ggc-zone.o: ggc-zone.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
! 	$(FLAGS_H) toplev.h $(GGC_H) $(TIMEVAR_H) $(TM_P_H) $(PARAMS_H)
! 
! ggc-none.o: ggc-none.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(GGC_H)
  
  stringpool.o: stringpool.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
  	$(TREE_H) $(GGC_H) gt-stringpool.h
  
  prefix.o: prefix.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) Makefile prefix.h
  	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
  	-DPREFIX=\"$(prefix)\" \
  	  -c $(srcdir)/prefix.c $(OUTPUT_OPTION)
  
! convert.o: convert.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(FLAGS_H) \
     convert.h toplev.h langhooks.h
  
  langhooks.o : langhooks.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) toplev.h \
     tree-inline.h $(RTL_H) insn-config.h $(INTEGRATE_H) langhooks.h \
!    $(LANGHOOKS_DEF_H) $(FLAGS_H) $(GGC_H) diagnostic.h intl.h
! tree.o : tree.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
!    $(FLAGS_H) function.h $(PARAMS_H) \
     toplev.h $(GGC_H) $(HASHTAB_H) $(TARGET_H) output.h $(TM_P_H) langhooks.h \
!    real.h gt-tree.h tree-iterator.h $(BASIC_BLOCK_H) $(TREE_FLOW_H)
  tree-dump.o: tree-dump.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
!    $(C_TREE_H) $(FLAGS_H) langhooks.h toplev.h output.h $(C_PRAGMA_H) $(RTL_H) \
!    $(GGC_H) $(EXPR_H) $(SPLAY_TREE_H) $(TREE_DUMP_H) tree-iterator.h tree-pass.h
  tree-inline.o : tree-inline.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
!    $(TREE_H) $(RTL_H) $(EXPR_H) $(FLAGS_H) $(PARAMS_H) input.h insn-config.h \
     $(INTEGRATE_H) $(VARRAY_H) $(HASHTAB_H) $(SPLAY_TREE_H) toplev.h \
!    langhooks.h $(C_COMMON_H) tree-inline.h $(CGRAPH_H) intl.h function.h \
!    pointer-set.h $(TREE_GIMPLE_H) debug.h
  print-tree.o : print-tree.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
     $(GGC_H) langhooks.h real.h
! stor-layout.o : stor-layout.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
!    $(TREE_H) $(PARAMS_H) $(FLAGS_H) function.h $(EXPR_H) $(RTL_H) toplev.h \
!    $(GGC_H) $(TM_P_H) $(TARGET_H) langhooks.h $(REGS_H) gt-stor-layout.h
! tree-ssa.o : tree-ssa.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \
!    $(RTL_H) $(TREE_H) $(TM_P_H) $(EXPR_H) output.h diagnostic.h \
!    errors.h toplev.h function.h $(TIMEVAR_H) \
!    $(TM_H) coretypes.h $(TREE_DUMP_H) langhooks.h $(CFGLOOP_H) \
!    tree-pass.h
! tree-into-ssa.o : tree-into-ssa.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \
!    $(RTL_H) $(TREE_H) $(TM_P_H) $(EXPR_H) output.h diagnostic.h \
!    errors.h toplev.h function.h $(TIMEVAR_H) \
!    $(TM_H) coretypes.h $(TREE_DUMP_H) langhooks.h domwalk.h tree-pass.h \
!    $(GGC_H)
! tree-outof-ssa.o : tree-outof-ssa.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \
!    $(RTL_H) $(TREE_H) $(TM_P_H) $(EXPR_H) output.h diagnostic.h \
!    errors.h toplev.h function.h $(TIMEVAR_H) \
!    $(TM_H) coretypes.h $(TREE_DUMP_H) langhooks.h domwalk.h \
!    tree-pass.h $(TREE_SSA_LIVE_H)
! tree-ssa-dse.o : tree-ssa-dse.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
!    $(TM_H) errors.h $(GGC_H) $(TREE_H) $(RTL_H) $(TM_P_H) $(BASIC_BLOCK_H) \
!    $(TREE_FLOW_H) tree-pass.h $(TREE_DUMP_H) domwalk.h $(FLAGS_H)
! tree-ssa-forwprop.o : tree-ssa-forwprop.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
!    $(TM_H) errors.h $(GGC_H) $(TREE_H) $(RTL_H) $(TM_P_H) $(BASIC_BLOCK_H) \
!    $(TREE_FLOW_H) tree-pass.h $(TREE_DUMP_H)
! tree-ssa-phiopt.o : tree-ssa-phiopt.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
!    $(TM_H) errors.h $(GGC_H) $(TREE_H) $(RTL_H) $(TM_P_H) $(BASIC_BLOCK_H) \
!    $(TREE_FLOW_H) tree-pass.h $(TREE_DUMP_H) langhooks.h $(FLAGS_H)
! tree-nrv.o : tree-nrv.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
!    $(TM_H) $(TREE_H) $(RTL_H) function.h $(BASIC_BLOCK_H) $(EXPR_H) \
!    diagnostic.h $(TREE_FLOW_H) $(TIMEVAR_H) $(TREE_DUMP_H) tree-pass.h \
     langhooks.h
! tree-ssa-copy.o : tree-ssa-copy.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \
!    $(RTL_H) $(TREE_H) $(TM_P_H) $(EXPR_H) $(GGC_H) output.h diagnostic.h \
!    errors.h function.h $(TIMEVAR_H) $(TM_H) coretypes.h $(TREE_DUMP_H) \
!    $(BASIC_BLOCK_H) tree-pass.h langhooks.h
! tree-ssa-propagate.o : tree-ssa-propagate.c $(TREE_FLOW_H) $(CONFIG_H) \
!    $(SYSTEM_H) $(RTL_H) $(TREE_H) $(TM_P_H) $(EXPR_H) $(GGC_H) output.h \
!    diagnostic.h errors.h function.h $(TIMEVAR_H) $(TM_H) coretypes.h \
!    $(TREE_DUMP_H) $(BASIC_BLOCK_H) tree-pass.h langhooks.h \
!    tree-ssa-propagate.h vec.h gt-tree-ssa-propagate.h
! tree-ssa-dom.o : tree-ssa-dom.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \
!    $(RTL_H) $(TREE_H) $(TM_P_H) $(EXPR_H) $(GGC_H) output.h diagnostic.h \
!    errors.h function.h $(TIMEVAR_H) $(TM_H) coretypes.h $(TREE_DUMP_H) \
!    $(BASIC_BLOCK_H) domwalk.h real.h tree-pass.h $(FLAGS_H) langhooks.h \
!    tree-ssa-propagate.h
! tree-ssa-threadupdate.o : tree-ssa-threadupdate.c $(TREE_FLOW_H) $(CONFIG_H) \
!    $(SYSTEM_H) $(RTL_H) $(TREE_H) $(TM_P_H) $(EXPR_H) $(GGC_H) output.h \
!    diagnostic.h errors.h function.h $(TM_H) coretypes.h $(TREE_DUMP_H) \
!    $(BASIC_BLOCK_H) $(FLAGS_H)  tree-pass.h
! tree-ssanames.o : tree-ssanames.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
!    $(TM_H) $(TREE_H) varray.h $(GGC_H) gt-tree-ssanames.h  $(TREE_FLOW_H)
! tree-phinodes.o : tree-phinodes.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
!    $(TM_H) $(TREE_H) varray.h $(GGC_H) $(BASIC_BLOCK_H) $(TREE_FLOW_H) \
!    gt-tree-phinodes.h $(RTL_H)
! domwalk.o : domwalk.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
!    $(TREE_H) $(BASIC_BLOCK_H) $(TREE_FLOW_H) domwalk.h $(GGC_H)
! tree-ssa-live.o : tree-ssa-live.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \
!    $(RTL_H) $(TREE_H) $(TM_P_H) $(EXPR_H) $(GGC_H) output.h diagnostic.h \
!    errors.h toplev.h function.h $(TIMEVAR_H) \
!    $(TM_H) coretypes.h $(TREE_DUMP_H) $(TREE_SSA_LIVE_H)
! tree-ssa-copyrename.o : tree-ssa-copyrename.c $(TREE_FLOW_H) $(CONFIG_H) \
!    $(SYSTEM_H) $(RTL_H) $(TREE_H) $(TM_P_H) $(EXPR_H) $(GGC_H) output.h \
!    diagnostic.h errors.h toplev.h function.h $(TIMEVAR_H) tree-pass.h \
!    $(TM_H) coretypes.h $(TREE_DUMP_H) $(TREE_SSA_LIVE_H)
! tree-ssa-pre.o : tree-ssa-pre.c $(TREE_FLOW_H) $(CONFIG_H) \
!    $(SYSTEM_H) $(TREE_H) $(TM_P_H) $(EXPR_H) \
!    $(GGC_H) output.h diagnostic.h errors.h toplev.h $(TIMEVAR_H) \
!    $(TM_H) coretypes.h $(TREE_DUMP_H) tree-pass.h $(FLAGS_H) $(CFGLOOP_H)
! tree-vn.o : tree-vn.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(GGC_H) \
!    $(TREE_H) $(TREE_FLOW_H) $(HASHTAB_H) langhooks.h tree-pass.h \
!    $(TREE_DUMP_H) diagnostic.h
! tree-cfg.o : tree-cfg.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \
!    $(RTL_H) $(TREE_H) $(TM_P_H) $(EXPR_H) $(GGC_H) $(FLAGS_H) output.h \
!    diagnostic.h errors.h function.h $(TIMEVAR_H) $(TM_H) coretypes.h \
!    $(TREE_DUMP_H) except.h langhooks.h $(CFGLOOP_H) gt-tree-cfg.h tree-pass.h \
!    $(CFGLAYOUT_H)
! tree-tailcall.o : tree-tailcall.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \
!    $(RTL_H) $(TREE_H) $(TM_P_H) function.h $(TM_H) coretypes.h \
!    $(TREE_DUMP_H) diagnostic.h except.h tree-pass.h $(FLAGS_H) langhooks.h
! tree-nested.o: tree-nested.c $(CONFIG_H) $(SYSTEM_H) $(TM_H) $(TREE_H) \
!    $(RTL_H) $(TM_P_H) function.h tree-dump.h tree-inline.h tree-iterator.h \
!    tree-gimple.h $(CGRAPH_H) $(EXPR_H) langhooks.h $(GGC_H) gt-tree-nested.h
! tree-if-conv.o: tree-if-conv.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
!    $(TREE_H) $(FLAGS_H) $(TIMEVAR_H) varray.h $(BASIC_BLOCK_H) $(TREE_FLOW_H) \
!    cfgloop.h $(RTL_H) c-common.h tree-chrec.h tree-data-ref.h \
!    tree-scalar-evolution.h tree-pass.h 
! tree-iterator.o : tree-iterator.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) \
!    coretypes.h $(GGC_H) tree-iterator.h tree-gimple.h gt-tree-iterator.h
! tree-dfa.o : tree-dfa.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \
!    $(RTL_H) $(TREE_H) $(TM_P_H) $(EXPR_H) $(GGC_H) output.h diagnostic.h \
!    errors.h tree-inline.h $(HASHTAB_H) pointer-set.h $(FLAGS_H) function.h $(TIMEVAR_H) \
!    convert.h $(TM_H) coretypes.h langhooks.h \
!    $(TREE_DUMP_H) tree-pass.h params.h $(CGRAPH_H)
! tree-ssa-operands.o : tree-ssa-operands.c $(TREE_FLOW_H) $(CONFIG_H) \
!    $(SYSTEM_H) $(TREE_H) $(TM_P_H) $(GGC_H) $(CGRAPH_H) diagnostic.h \
!    errors.h tree-inline.h $(FLAGS_H) function.h $(TM_H) $(TIMEVAR_H) \
!    tree-pass.h gt-tree-ssa-operands.h
! tree-eh.o : tree-eh.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \
!    $(RTL_H) $(TREE_H) $(TM_H) $(FLAGS_H) function.h except.h langhooks.h \
!    $(GGC_H) tree-pass.h gt-tree-eh.h
! tree-ssa-loop.o : tree-ssa-loop.c $(TREE_FLOW_H) $(CONFIG_H) \
!    $(SYSTEM_H) $(RTL_H) $(TREE_H) $(TM_P_H) $(CFGLOOP_H) \
!    output.h diagnostic.h $(TIMEVAR_H) $(TM_H) coretypes.h $(TREE_DUMP_H) \
!    tree-pass.h $(FLAGS_H) tree-inline.h $(SCEV_H)
! tree-ssa-loop-unswitch.o : tree-ssa-loop-unswitch.c $(TREE_FLOW_H) $(CONFIG_H) \
!    $(SYSTEM_H) $(RTL_H) $(TREE_H) $(TM_P_H) $(CFGLOOP_H) domwalk.h $(PARAMS_H)\
!    output.h diagnostic.h $(TIMEVAR_H) $(TM_H) coretypes.h $(TREE_DUMP_H) \
!    tree-pass.h
! tree-ssa-loop-niter.o : tree-ssa-loop-niter.c $(TREE_FLOW_H) $(CONFIG_H) \
!    $(SYSTEM_H) $(RTL_H) $(TREE_H) $(TM_P_H) cfgloop.h $(PARAMS_H) tree-inline.h \
!    output.h diagnostic.h $(TM_H) coretypes.h $(TREE_DUMP_H) $(FLAGS_H) \
!    tree-pass.h $(SCEV_H) tree-data-ref.h
! tree-ssa-loop-ivcanon.o : tree-ssa-loop-ivcanon.c $(TREE_FLOW_H) $(CONFIG_H) \
!    $(SYSTEM_H) $(RTL_H) $(TREE_H) $(TM_P_H) $(CFGLOOP_H) $(PARAMS_H) tree-inline.h \
!    output.h diagnostic.h $(TM_H) coretypes.h $(TREE_DUMP_H) $(FLAGS_H) \
!    tree-pass.h $(SCEV_H)
! tree-ssa-loop-ch.o : tree-ssa-loop-ch.c $(TREE_FLOW_H) $(CONFIG_H) \
!    $(SYSTEM_H) $(RTL_H) $(TREE_H) $(TM_P_H) $(CFGLOOP_H) tree-inline.h \
!    output.h diagnostic.h $(TIMEVAR_H) $(TM_H) coretypes.h $(TREE_DUMP_H) \
!    tree-pass.h $(FLAGS_H)
! tree-ssa-loop-ivopts.o : tree-ssa-loop-ivopts.c $(TREE_FLOW_H) $(CONFIG_H) \
!    $(SYSTEM_H) $(RTL_H) $(TREE_H) $(TM_P_H) $(CFGLOOP_H) varray.h $(EXPR_H) \
!    output.h diagnostic.h $(TIMEVAR_H) $(TM_H) coretypes.h $(TREE_DUMP_H) \
!    tree-pass.h $(GGC_H) $(RECOG_H) insn-config.h $(HASHTAB_H) $(SCEV_H) \
!    cfgloop.h $(PARAMS_H) sbitmap.h langhooks.h
! tree-ssa-loop-manip.o : tree-ssa-loop-manip.c $(TREE_FLOW_H) $(CONFIG_H) \
!    $(SYSTEM_H) $(RTL_H) $(TREE_H) $(TM_P_H) $(CFGLOOP_H) \
!    output.h diagnostic.h $(TIMEVAR_H) $(TM_H) coretypes.h $(TREE_DUMP_H) \
!    tree-pass.h cfglayout.h $(SCEV_H)
! tree-ssa-loop-im.o : tree-ssa-loop-im.c $(TREE_FLOW_H) $(CONFIG_H) \
!    $(SYSTEM_H) $(RTL_H) $(TREE_H) $(TM_P_H) $(CFGLOOP_H) domwalk.h $(PARAMS_H)\
!    output.h diagnostic.h $(TIMEVAR_H) $(TM_H) coretypes.h $(TREE_DUMP_H) \
!    tree-pass.h $(FLAGS_H) $(HASHTAB_H)
! tree-ssa-alias.o : tree-ssa-alias.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \
!    $(RTL_H) $(TREE_H) $(TM_P_H) $(EXPR_H) $(GGC_H) tree-inline.h $(FLAGS_H) \
!    function.h $(TIMEVAR_H) convert.h $(TM_H) coretypes.h \
!    langhooks.h $(TREE_DUMP_H) tree-pass.h params.h
! tree-optimize.o : tree-optimize.c $(TREE_FLOW_H) $(CONFIG_H) \
!    $(SYSTEM_H) $(RTL_H) $(TREE_H) $(TM_P_H) $(EXPR_H) \
!    $(GGC_H) output.h diagnostic.h errors.h $(FLAGS_H) \
!    $(TIMEVAR_H) $(TM_H) coretypes.h $(TREE_DUMP_H) toplev.h function.h \
!    langhooks.h $(FLAGS_H) $(CGRAPH_H) tree-inline.h tree-mudflap.h $(GGC_H) \
!    $(CGRAPH_H) tree-pass.h
! c-gimplify.o : c-gimplify.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) errors.h \
!    $(C_TREE_H) $(C_COMMON_H) diagnostic.h $(TREE_GIMPLE_H) varray.h $(FLAGS_H) \
!    langhooks.h toplev.h rtl.h $(TREE_FLOW_H) langhooks-def.h \
!    $(TM_H) coretypes.h $(C_PRETTY_PRINT_H) $(CGRAPH_H)
! gimplify.o : gimplify.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) errors.h \
!    diagnostic.h $(TREE_GIMPLE_H) tree-inline.h varray.h langhooks.h \
!    langhooks-def.h $(TREE_FLOW_H) $(CGRAPH_H) $(TIMEVAR_H) $(TM_H) coretypes.h \
!    except.h $(FLAGS_H) $(RTL_H) function.h $(EXPR_H) output.h $(GGC_H) \
!    gt-gimplify.h
! gimple-low.o : gimple-low.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) errors.h \
!    diagnostic.h $(TREE_GIMPLE_H) tree-inline.h varray.h langhooks.h \
!    langhooks-def.h $(TREE_FLOW_H) $(TIMEVAR_H) $(TM_H) coretypes.h except.h \
!    $(FLAGS_H) $(RTL_H) function.h $(EXPR_H) tree-pass.h
! tree-browser.o : tree-browser.c tree-browser.def $(CONFIG_H) $(SYSTEM_H) \
!    $(TREE_H) errors.h tree-inline.h diagnostic.h $(HASHTAB_H) \
!    $(TM_H) coretypes.h
! tree-chrec.o: tree-chrec.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
!    errors.h $(GGC_H) $(TREE_H) tree-chrec.h tree-pass.h
! tree-scalar-evolution.o: tree-scalar-evolution.c $(CONFIG_H) $(SYSTEM_H) \
!    coretypes.h $(TM_H) errors.h $(GGC_H) $(TREE_H) $(RTL_H) \
!    $(BASIC_BLOCK_H) diagnostic.h $(TREE_FLOW_H) $(TREE_DUMP_H) \
!    $(TIMEVAR_H) cfgloop.h $(SCEV_H) tree-pass.h $(FLAGS_H)
! tree-data-ref.o: tree-data-ref.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
!    errors.h $(GGC_H) $(TREE_H) $(RTL_H) $(BASIC_BLOCK_H) diagnostic.h \
!    $(TREE_FLOW_H) $(TREE_DUMP_H) $(TIMEVAR_H) cfgloop.h \
!    tree-data-ref.h $(SCEV_H) tree-pass.h $(LAMBDA_H)
! tree-vect-analyze.o: tree-vect-analyze.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
!    errors.h $(GGC_H) $(OPTABS_H) $(TREE_H) $(RTL_H) $(BASIC_BLOCK_H) diagnostic.h \
!    $(TREE_FLOW_H) $(TREE_DUMP_H) $(TIMEVAR_H) cfgloop.h \
!    tree-vectorizer.h tree-data-ref.h $(SCEV_H) $(EXPR_H)
! tree-vect-transform.o: tree-vect-transform.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
!    errors.h $(GGC_H) $(OPTABS_H) $(TREE_H) $(RTL_H) $(BASIC_BLOCK_H) diagnostic.h \
!    $(TREE_FLOW_H) $(TREE_DUMP_H) $(TIMEVAR_H) cfgloop.h target.h tree-pass.h $(EXPR_H) \
!    tree-vectorizer.h tree-data-ref.h $(SCEV_H) langhooks.h toplev.h
! tree-vectorizer.o: tree-vectorizer.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
!    errors.h $(GGC_H) $(OPTABS_H) $(TREE_H) $(RTL_H) $(BASIC_BLOCK_H) diagnostic.h \
!    $(TREE_FLOW_H) $(TREE_DUMP_H) $(TIMEVAR_H) cfgloop.h tree-pass.h $(EXPR_H) \
!    tree-vectorizer.h tree-data-ref.h $(SCEV_H) input.h target.h cfglayout.h
! tree-loop-linear.o: tree-loop-linear.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
!    errors.h $(GGC_H) $(OPTABS_H) $(TREE_H) $(RTL_H) $(BASIC_BLOCK_H) diagnostic.h \
!    $(TREE_FLOW_H) $(TREE_DUMP_H) $(TIMEVAR_H) cfgloop.h tree-pass.h \
!    $(TREE_DATA_REF_H) $(SCEV_H) $(EXPR_H)
! tree-gimple.o : tree-gimple.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(EXPR_H) \
! 	$(RTL_H) $(TREE_GIMPLE_H) $(TM_H) coretypes.h bitmap.h $(GGC_H)
! tree-mudflap.o : $(CONFIG_H) errors.h $(SYSTEM_H) $(TREE_H) tree-inline.h \
!    $(C_TREE_H) $(C_COMMON_H) $(TREE_GIMPLE_H) diagnostic.h $(HASHTAB_H) \
!    output.h varray.h langhooks.h tree-mudflap.h $(TM_H) coretypes.h \
!    $(TREE_DUMP_H) tree-pass.h $(CGRAPH_H) $(GGC_H) gt-tree-mudflap.h
! tree-nomudflap.o : $(CONFIG_H) errors.h $(SYSTEM_H) $(TREE_H) tree-inline.h \
!    $(C_TREE_H) $(C_COMMON_H) $(TREE_GIMPLE_H) diagnostic.h $(HASHTAB_H) \
!    output.h varray.h langhooks.h tree-mudflap.h $(TM_H) coretypes.h
! tree-pretty-print.o : tree-pretty-print.c $(CONFIG_H) $(SYSTEM_H) \
!    errors.h $(TREE_H) diagnostic.h real.h $(HASHTAB_H) $(TREE_FLOW_H) \
!    $(TM_H) coretypes.h tree-iterator.h tree-chrec.h
! fold-const.o : fold-const.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
!    $(TREE_H) $(FLAGS_H) real.h toplev.h $(HASHTAB_H) $(EXPR_H) $(RTL_H) $(GGC_H) \
!    $(TM_P_H) langhooks.h $(MD5_H)
! diagnostic.o : diagnostic.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
!    $(TREE_H) version.h $(TM_P_H) $(FLAGS_H) input.h toplev.h intl.h \
!    $(DIAGNOSTIC_H) langhooks.h $(LANGHOOKS_DEF_H)
  opts.o : opts.c opts.h options.h toplev.h $(CONFIG_H) $(SYSTEM_H) \
  	coretypes.h $(TREE_H) $(TM_H) langhooks.h $(GGC_H) $(RTL_H) \
! 	output.h $(DIAGNOSTIC_H) $(TM_P_H) $(INSN_ATTR_H) intl.h target.h
  targhooks.o : targhooks.c targhooks.h $(CONFIG_H) $(SYSTEM_H) \
! 	coretypes.h $(TREE_H) $(EXPR_H) $(TM_H) $(RTL_H) $(TM_P_H) function.h \
  	output.h toplev.h
  
! toplev.o : toplev.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) version.h $(RTL_H) \
!    function.h $(FLAGS_H) xcoffout.h input.h $(INSN_ATTR_H) output.h $(DIAGNOSTIC_H) \
     debug.h insn-config.h intl.h $(RECOG_H) Makefile toplev.h \
     dwarf2out.h sdbout.h dbxout.h $(EXPR_H) hard-reg-set.h $(BASIC_BLOCK_H) \
!    graph.h except.h $(REGS_H) $(TIMEVAR_H) value-prof.h \
     $(PARAMS_H) $(TM_P_H) reload.h dwarf2asm.h $(TARGET_H) \
!    langhooks.h insn-flags.h $(CFGLAYOUT_H) real.h $(CFGLOOP_H) \
!    hosthooks.h $(LANGHOOKS_DEF_H) $(CGRAPH_H) $(COVERAGE_H) alloc-pool.h
  	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
  	  -DTARGET_NAME=\"$(target_noncanonical)\" \
  	  -c $(srcdir)/toplev.c $(OUTPUT_OPTION)
+ 
+ passes.o : passes.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
+    $(RTL_H) function.h $(FLAGS_H) xcoffout.h input.h $(INSN_ATTR_H) output.h \
+    $(DIAGNOSTIC_H) debug.h insn-config.h intl.h $(RECOG_H) toplev.h \
+    dwarf2out.h sdbout.h dbxout.h $(EXPR_H) hard-reg-set.h $(BASIC_BLOCK_H) \
+    graph.h except.h $(REGS_H) $(TIMEVAR_H) value-prof.h \
+    $(PARAMS_H) $(TM_P_H) reload.h dwarf2asm.h $(TARGET_H) \
+    langhooks.h insn-flags.h $(CFGLAYOUT_H) real.h $(CFGLOOP_H) \
+    hosthooks.h $(LANGHOOKS_DEF_H) $(CGRAPH_H) $(COVERAGE_H) alloc-pool.h \
+    tree-pass.h tree-dump.h
+ 
  main.o : main.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) toplev.h
  
! host-default.o : host-default.c $(CONFIG_H) $(SYSTEM_H) $(HOOKS_H) coretypes.h \
! 	hosthooks.h $(HOSTHOOKS_DEF_H)
  
  rtl-error.o: rtl-error.c $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(INSN_ATTR_H) \
     insn-config.h input.h toplev.h intl.h $(DIAGNOSTIC_H) $(CONFIG_H)
  
! rtl.o : rtl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) real.h \
    $(GGC_H) errors.h
  
  print-rtl.o : print-rtl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
!     $(RTL_H) $(TREE_H) hard-reg-set.h $(BASIC_BLOCK_H) real.h $(FLAGS_H)
  rtlanal.o : rtlanal.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) toplev.h \
!    $(RTL_H) hard-reg-set.h $(TM_P_H) insn-config.h $(RECOG_H) real.h $(FLAGS_H) \
!    $(BASIC_BLOCK_H) $(REGS_H) output.h target.h function.h
  
  varasm.o : varasm.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(RTL_H) \
!    $(FLAGS_H) function.h $(EXPR_H) hard-reg-set.h $(REGS_H) \
!    output.h $(C_PRAGMA_H) toplev.h xcoffout.h debug.h $(GGC_H) $(TM_P_H) \
     $(HASHTAB_H) $(TARGET_H) langhooks.h gt-varasm.h real.h
! function.o : function.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
!    $(TREE_H) $(CFGLAYOUT_H) $(TREE_GIMPLE_H) \
!    $(FLAGS_H) function.h $(EXPR_H) $(OPTABS_H) libfuncs.h $(REGS_H) hard-reg-set.h \
     insn-config.h $(RECOG_H) output.h toplev.h except.h $(HASHTAB_H) $(GGC_H) \
!    $(TM_P_H) langhooks.h gt-function.h $(TARGET_H) basic-block.h
! stmt.o : stmt.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) $(FLAGS_H) \
     function.h insn-config.h hard-reg-set.h $(EXPR_H) libfuncs.h except.h \
!    $(RECOG_H) toplev.h output.h varray.h $(GGC_H) $(TM_P_H) \
!    langhooks.h $(PREDICT_H) $(OPTABS_H) $(TARGET_H)
  except.o : except.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
!    $(TREE_H) $(FLAGS_H) except.h function.h $(EXPR_H) libfuncs.h $(INTEGRATE_H) \
     langhooks.h insn-config.h hard-reg-set.h $(BASIC_BLOCK_H) output.h \
     dwarf2asm.h dwarf2out.h toplev.h $(HASHTAB_H) intl.h $(GGC_H) \
!    gt-except.h $(CGRAPH_H)
! expr.o : expr.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
!    $(TREE_H) $(FLAGS_H) function.h $(REGS_H) $(EXPR_H) $(OPTABS_H) \
!    libfuncs.h $(INSN_ATTR_H) insn-config.h $(RECOG_H) output.h \
!    typeclass.h hard-reg-set.h toplev.h hard-reg-set.h except.h reload.h \
!    $(GGC_H) langhooks.h intl.h $(TM_P_H) real.h $(TARGET_H) \
!    tree-iterator.h gt-expr.h
  dojump.o : dojump.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
!    $(FLAGS_H) function.h $(EXPR_H) $(OPTABS_H) $(INSN_ATTR_H) insn-config.h \
!    langhooks.h $(GGC_H) gt-dojump.h
  builtins.o : builtins.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H)\
!    $(TREE_GIMPLE_H) $(FLAGS_H) $(TARGET_H) function.h $(REGS_H) $(EXPR_H) $(OPTABS_H) \
!    insn-config.h $(RECOG_H) output.h typeclass.h hard-reg-set.h toplev.h hard-reg-set.h \
!    except.h $(TM_P_H) $(PREDICT_H) libfuncs.h real.h langhooks.h basic-block.h \
!    tree-mudflap.h
! calls.o : calls.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) $(FLAGS_H) \
     $(EXPR_H) $(OPTABS_H) langhooks.h $(TARGET_H) \
!    libfuncs.h $(REGS_H) toplev.h output.h function.h $(TIMEVAR_H) $(TM_P_H) $(CGRAPH_H) except.h
  expmed.o : expmed.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
!    $(FLAGS_H) insn-config.h $(EXPR_H) $(OPTABS_H) $(RECOG_H) real.h \
     toplev.h $(TM_P_H) langhooks.h
  explow.o : explow.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
!    $(FLAGS_H) hard-reg-set.h insn-config.h $(EXPR_H) $(OPTABS_H) $(RECOG_H) \
     toplev.h function.h $(GGC_H) $(TM_P_H) langhooks.h gt-explow.h
  optabs.o : optabs.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
!    $(FLAGS_H) insn-config.h $(EXPR_H) $(OPTABS_H) libfuncs.h $(RECOG_H) reload.h \
     toplev.h $(GGC_H) real.h $(TM_P_H) except.h gt-optabs.h $(BASIC_BLOCK_H) \
     $(TARGET_H)
  dbxout.o : dbxout.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(RTL_H) \
!    $(FLAGS_H) $(REGS_H) debug.h $(TM_P_H) $(TARGET_H) function.h langhooks.h \
     insn-config.h reload.h gstab.h xcoffout.h output.h dbxout.h toplev.h \
!    $(GGC_H) $(OBSTACK_H) gt-dbxout.h
  debug.o : debug.c debug.h $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H)
! sdbout.o : sdbout.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) debug.h \
!    $(TREE_H) $(GGC_H) varray.h $(RTL_H) $(REGS_H) $(FLAGS_H) insn-config.h \
!    output.h toplev.h $(TM_P_H) gsyms.h langhooks.h $(TARGET_H) sdbout.h \
!    gt-sdbout.h
! dwarf2out.o : dwarf2out.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
!    $(TREE_H) version.h $(RTL_H) dwarf2.h debug.h $(FLAGS_H) insn-config.h reload.h \
!    output.h $(DIAGNOSTIC_H) real.h hard-reg-set.h $(REGS_H) $(EXPR_H) \
!    libfuncs.h toplev.h dwarf2out.h varray.h $(GGC_H) except.h dwarf2asm.h \
!    $(TM_P_H) langhooks.h $(HASHTAB_H) gt-dwarf2out.h $(TARGET_H) $(CGRAPH_H) \
!    $(MD5_H) input.h
! dwarf2asm.o : dwarf2asm.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(FLAGS_H) $(RTL_H) \
     $(TREE_H) output.h dwarf2asm.h $(TM_P_H) $(GGC_H) gt-dwarf2asm.h
! vmsdbgout.o : vmsdbgout.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) version.h \
!    $(RTL_H) $(FLAGS_H) output.h vmsdbg.h debug.h langhooks.h function.h $(TARGET_H)
  xcoffout.o : xcoffout.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(RTL_H) \
!    xcoffout.h $(FLAGS_H) toplev.h output.h dbxout.h $(GGC_H) $(TARGET_H)
  emit-rtl.o : emit-rtl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
!    $(FLAGS_H) function.h $(REGS_H) insn-config.h $(RECOG_H) real.h $(GGC_H) \
     $(EXPR_H) $(OBSTACK_H) hard-reg-set.h bitmap.h toplev.h \
     $(HASHTAB_H) $(TM_P_H) debug.h langhooks.h gt-emit-rtl.h
  real.o : real.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) toplev.h $(TM_P_H)
  integrate.o : integrate.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
!    $(FLAGS_H) debug.h $(INTEGRATE_H) insn-config.h $(EXPR_H) real.h $(REGS_H) \
!    intl.h function.h output.h $(RECOG_H) except.h toplev.h \
     $(PARAMS_H) $(TM_P_H) $(TARGET_H) langhooks.h gt-integrate.h
! jump.o : jump.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(FLAGS_H) \
     hard-reg-set.h $(REGS_H) insn-config.h $(RECOG_H) $(EXPR_H) real.h except.h function.h \
     toplev.h $(INSN_ATTR_H) $(TM_P_H) reload.h $(PREDICT_H) $(TIMEVAR_H) \
     $(DIAGNOSTIC_H)
  
  simplify-rtx.o : simplify-rtx.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
!    $(REGS_H) hard-reg-set.h $(FLAGS_H) real.h insn-config.h $(RECOG_H) $(EXPR_H) toplev.h \
     output.h function.h $(GGC_H) $(OBSTACK_H) $(TM_P_H) $(TREE_H) $(TARGET_H)
  cgraph.o : cgraph.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
!    langhooks.h toplev.h $(FLAGS_H) $(GGC_H)  $(TARGET_H) $(CGRAPH_H) gt-cgraph.h \
     output.h intl.h
  cgraphunit.o : cgraphunit.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
!    langhooks.h tree-inline.h toplev.h $(FLAGS_H) $(GGC_H)  $(TARGET_H) $(CGRAPH_H) intl.h \
!    pointer-set.h function.h $(TREE_GIMPLE_H) $(TREE_FLOW_H)
  coverage.o : coverage.c gcov-io.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
!    $(TM_H) $(RTL_H) $(TREE_H) $(FLAGS_H) output.h $(REGS_H) $(EXPR_H) function.h \
     toplev.h $(GGC_H) $(TARGET_H) langhooks.h $(COVERAGE_H) libfuncs.h \
     gt-coverage.h $(HASHTAB_H)
  cselib.o : cselib.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(REGS_H) \
!    hard-reg-set.h $(FLAGS_H) real.h insn-config.h $(RECOG_H) $(EMIT_RTL_H) toplev.h \
!    output.h function.h cselib.h $(GGC_H) $(TM_P_H) gt-cselib.h $(PARAMS_H) \
!    alloc-pool.h
  cse.o : cse.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(REGS_H) \
!    hard-reg-set.h $(FLAGS_H) real.h insn-config.h $(RECOG_H) $(EXPR_H) toplev.h \
     output.h function.h $(BASIC_BLOCK_H) $(GGC_H) $(TM_P_H) $(TIMEVAR_H) \
!    except.h $(TARGET_H) $(PARAMS_H) rtlhooks-def.h
  web.o : web.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(REGS_H) \
!    hard-reg-set.h $(FLAGS_H) $(BASIC_BLOCK_H) function.h output.h toplev.h $(DF_H)
  gcse.o : gcse.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(REGS_H) \
!    hard-reg-set.h $(FLAGS_H) real.h insn-config.h $(GGC_H) $(RECOG_H) $(EXPR_H) \
     $(BASIC_BLOCK_H) function.h output.h toplev.h $(TM_P_H) $(PARAMS_H) \
!    except.h gt-gcse.h $(TREE_H) cselib.h $(TIMEVAR_H)
  resource.o : resource.c $(CONFIG_H) $(RTL_H) hard-reg-set.h $(SYSTEM_H) coretypes.h \
!    $(TM_H) $(BASIC_BLOCK_H) $(REGS_H) $(FLAGS_H) output.h $(RESOURCE_H) function.h toplev.h \
     $(INSN_ATTR_H) except.h $(PARAMS_H) $(TM_P_H)
  lcm.o : lcm.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(REGS_H) \
!    hard-reg-set.h $(FLAGS_H) real.h insn-config.h $(INSN_ATTR_H) $(RECOG_H) $(EXPR_H) \
!    $(BASIC_BLOCK_H) $(TM_P_H) $(DF_H) function.h
! tree-ssa-dce.o : tree-ssa-dce.c $(CONFIG_H) system.h errors.h $(TREE_H) \
!     $(RTL_H) $(TM_P_H) $(TREE_FLOW_H) diagnostic.h $(TIMEVAR_H) $(TM_H) \
!     coretypes.h $(TREE_DUMP_H) tree-pass.h $(FLAGS_H)
! tree-ssa-ccp.o : tree-ssa-ccp.c $(TREE_FLOW_H) $(CONFIG_H) \
!    $(SYSTEM_H) $(RTL_H) $(TREE_H) $(TM_P_H) $(EXPR_H) $(GGC_H) output.h \
!    diagnostic.h errors.h function.h $(TIMEVAR_H) $(TM_H) coretypes.h \
!    $(TREE_DUMP_H) $(BASIC_BLOCK_H) tree-pass.h langhooks.h \
!    tree-ssa-propagate.h
! tree-sra.o : tree-sra.c $(CONFIG_H) system.h errors.h $(TREE_H) $(RTL_H) \
!     $(TM_P_H) $(TREE_FLOW_H) diagnostic.h tree-inline.h \
!     $(TIMEVAR_H) $(TM_H) coretypes.h $(TREE_DUMP_H) $(TREE_GIMPLE_H) \
!     langhooks.h tree-pass.h $(FLAGS_H) $(EXPR_H)
! tree-complex.o : tree-complex.c $(CONFIG_H) system.h $(TREE_H) \
!     $(TM_H) $(TREE_FLOW_H) $(TREE_GIMPLE_H) tree-iterator.h tree-pass.h \
!     $(FLAGS_H) $(OPTABS_H) $(RTL_H) $(MACHMODE_H) $(EXPR_H) \
!     langhooks.h $(FLAGS_H) $(DIAGNOSTIC_H) gt-tree-complex.h $(GGC_H)
  df.o : df.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
     insn-config.h $(RECOG_H) function.h $(REGS_H) alloc-pool.h hard-reg-set.h \
!    $(BASIC_BLOCK_H) $(DF_H)
! var-tracking.o : var-tracking.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
!    $(RTL_H) $(TREE_H) hard-reg-set.h insn-config.h reload.h $(FLAGS_H) \
!    $(BASIC_BLOCK_H) output.h sbitmap.h alloc-pool.h $(FIBHEAP_H) $(HASHTAB_H)
  conflict.o : conflict.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(OBSTACK_H) \
     $(HASHTAB_H) $(RTL_H) hard-reg-set.h $(BASIC_BLOCK_H)
  profile.o : profile.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
!    $(TREE_H) $(FLAGS_H) output.h $(REGS_H) $(EXPR_H) function.h \
!    toplev.h $(BASIC_BLOCK_H) $(COVERAGE_H) $(TREE_FLOW_H) value-prof.h
! tree-profile.o : tree-profile.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
!    $(TM_H) $(RTL_H) $(TREE_H) $(FLAGS_H) output.h $(REGS_H) $(EXPR_H) function.h \
!    toplev.h $(BASIC_BLOCK_H) $(COVERAGE_H) $(TREE_H) value-prof.h \
!    tree-pass.h $(TREE_FLOW_H) $(TIMEVAR_H)
! rtl-profile.o : tree-profile.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
!    $(TM_H) $(RTL_H) $(TREE_H) $(FLAGS_H) output.h $(REGS_H) $(EXPR_H) function.h \
!    toplev.h $(BASIC_BLOCK_H) $(COVERAGE_H) $(TREE_FLOW_H) value-prof.h $(GGC_H)
  value-prof.o : value-prof.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
!    $(BASIC_BLOCK_H) hard-reg-set.h value-prof.h $(EXPR_H) output.h $(FLAGS_H) \
!    $(RECOG_H) insn-config.h $(OPTABS_H) $(REGS_H) $(GGC_H)
! loop.o : loop.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(FLAGS_H) \
     insn-config.h $(REGS_H) hard-reg-set.h $(RECOG_H) $(EXPR_H) \
!    real.h $(PREDICT_H) $(BASIC_BLOCK_H) function.h $(CFGLOOP_H) \
     toplev.h varray.h except.h cselib.h $(OPTABS_H) $(TM_P_H) $(GGC_H)
! loop-doloop.o : loop-doloop.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
!    $(RTL_H) $(FLAGS_H) $(EXPR_H) hard-reg-set.h $(BASIC_BLOCK_H) $(TM_P_H) \
!    toplev.h $(CFGLOOP_H) output.h $(PARAMS_H)
  alloc-pool.o : alloc-pool.c $(CONFIG_H) $(SYSTEM_H) alloc-pool.h $(HASHTAB_H)
  flow.o : flow.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
!    $(FLAGS_H) insn-config.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h \
     $(RECOG_H) function.h except.h $(EXPR_H) $(GGC_H) $(TM_P_H)
! cfg.o : cfg.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(FLAGS_H) insn-config.h \
     $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h $(RECOG_H) \
!    function.h except.h $(GGC_H) $(TM_P_H) alloc-pool.h $(TIMEVAR_H) 
  cfghooks.o: cfghooks.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
!    $(BASIC_BLOCK_H) $(CFGLAYOUT_H) $(TREE_FLOW_H) $(TIMEVAR_H) toplev.h
! cfgexpand.o : cfgexpand.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \
!    $(RTL_H) $(TREE_H) $(TM_P_H) $(EXPR_H) function.h $(TIMEVAR_H) $(TM_H) \
!    coretypes.h $(TREE_DUMP_H) except.h langhooks.h cfgloop.h tree-pass.h \
!    $(RTL_H) $(DIAGNOSTIC_H) toplev.h
! cfgrtl.o : cfgrtl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(FLAGS_H) \
     insn-config.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h $(RECOG_H) \
     function.h except.h $(GGC_H) $(TM_P_H) insn-config.h $(EXPR_H)
  cfganal.o : cfganal.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
!    $(BASIC_BLOCK_H) hard-reg-set.h insn-config.h $(RECOG_H) $(GGC_H) $(TM_P_H) \
!    $(TIMEVAR_H)
! cfgbuild.o : cfgbuild.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(FLAGS_H) \
     insn-config.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h $(RECOG_H) \
     function.h except.h $(GGC_H)
  cfgcleanup.o : cfgcleanup.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
!    $(RTL_H) $(TIMEVAR_H) $(BASIC_BLOCK_H) hard-reg-set.h output.h $(FLAGS_H) \
     $(RECOG_H) toplev.h $(GGC_H) insn-config.h cselib.h $(TARGET_H) $(TM_P_H) \
!    $(PARAMS_H) $(REGS_H) $(EMIT_RTL_H)
  cfgloop.o : cfgloop.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) coretypes.h $(TM_H) \
!    $(BASIC_BLOCK_H) hard-reg-set.h $(CFGLOOP_H) $(FLAGS_H)
  cfgloopanal.o : cfgloopanal.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) \
!    $(BASIC_BLOCK_H) hard-reg-set.h $(CFGLOOP_H) $(EXPR_H) coretypes.h $(TM_H)
! loop-iv.o : loop-iv.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(GGC_H) \
!    $(BASIC_BLOCK_H) hard-reg-set.h $(CFGLOOP_H) $(EXPR_H) coretypes.h $(TM_H)
! loop-invariant.o : loop-invariant.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(GGC_H) \
!    $(BASIC_BLOCK_H) hard-reg-set.h cfgloop.h $(EXPR_H) coretypes.h $(TM_H) \
!    function.h $(FLAGS_H) df.h
  cfgloopmanip.o : cfgloopmanip.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) \
!    $(BASIC_BLOCK_H) hard-reg-set.h $(CFGLOOP_H) $(CFGLAYOUT_H) output.h coretypes.h $(TM_H)
  loop-init.o : loop-init.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) \
!    $(BASIC_BLOCK_H) hard-reg-set.h $(CFGLOOP_H) $(CFGLAYOUT_H) \
     coretypes.h $(TM_H)
  loop-unswitch.o : loop-unswitch.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TM_H) \
!    $(BASIC_BLOCK_H) hard-reg-set.h $(CFGLOOP_H) $(CFGLAYOUT_H) $(PARAMS_H) \
     output.h $(EXPR_H) coretypes.h $(TM_H)
  loop-unroll.o: loop-unroll.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TM_H) \
!    $(BASIC_BLOCK_H) hard-reg-set.h $(CFGLOOP_H) $(CFGLAYOUT_H) $(PARAMS_H) \
!    output.h $(EXPR_H) coretypes.h $(TM_H) $(HASHTAB_H) $(RECOG_H) $(VARRAY_H)
  dominance.o : dominance.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
     hard-reg-set.h $(BASIC_BLOCK_H) et-forest.h
  et-forest.o : et-forest.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) et-forest.h alloc-pool.h
! combine.o : combine.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
!    $(FLAGS_H) function.h insn-config.h $(INSN_ATTR_H) $(REGS_H) $(EXPR_H) \
!    rtlhooks-def.h $(BASIC_BLOCK_H) $(RECOG_H) real.h hard-reg-set.h \
!    toplev.h $(TM_P_H) $(TREE_H) $(TARGET_H) output.h $(PARAMS_H) $(OPTABS_H)
  regclass.o : regclass.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
!    hard-reg-set.h $(FLAGS_H) $(BASIC_BLOCK_H) $(REGS_H) insn-config.h \
!    $(RECOG_H) reload.h real.h toplev.h function.h output.h $(GGC_H) \
!    $(TM_P_H) $(EXPR_H) $(TIMEVAR_H) gt-regclass.h
  local-alloc.o : local-alloc.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
!    $(FLAGS_H) $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h insn-config.h $(RECOG_H) \
     output.h function.h $(INSN_ATTR_H) toplev.h  except.h $(TM_P_H)
! bitmap.o : bitmap.c $(CONFIG_H) $(SYSTEM_H)  coretypes.h $(TM_H) $(RTL_H) \
!    $(FLAGS_H) $(BASIC_BLOCK_H) $(REGS_H) $(GGC_H) gt-bitmap.h
! global.o : global.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(FLAGS_H) \
!    reload.h function.h $(RECOG_H) $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h\
!    insn-config.h output.h toplev.h $(TM_P_H)
! varray.o : varray.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) varray.h $(GGC_H) errors.h \
!    $(HASHTAB_H)
! vec.o : vec.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) coretypes.h vec.h $(GGC_H) errors.h
! reload.o : reload.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(FLAGS_H) output.h \
     $(EXPR_H) $(OPTABS_H) reload.h $(RECOG_H) hard-reg-set.h insn-config.h \
     $(REGS_H) function.h real.h toplev.h $(TM_P_H) $(PARAMS_H)
! reload1.o : reload1.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) real.h $(FLAGS_H) \
     $(EXPR_H) $(OPTABS_H) reload.h $(REGS_H) hard-reg-set.h insn-config.h \
     $(BASIC_BLOCK_H) $(RECOG_H) output.h function.h toplev.h $(TM_P_H) \
     except.h $(TREE_H)
! rtlhooks.o :  rtlhooks.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
!    rtlhooks-def.h $(EXPR_H)
! postreload.o : postreload.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) real.h $(FLAGS_H) \
     $(EXPR_H) $(OPTABS_H) reload.h $(REGS_H) hard-reg-set.h insn-config.h \
     $(BASIC_BLOCK_H) $(RECOG_H) output.h function.h toplev.h cselib.h $(TM_P_H) \
     except.h $(TREE_H)
+ postreload-gcse.o : postreload-gcse.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
+    $(RTL_H) $(REGS_H) hard-reg-set.h $(FLAGS_H) real.h insn-config.h $(GGC_H) \
+    $(RECOG_H) $(EXPR_H) $(BASIC_BLOCK_H) function.h output.h toplev.h $(TM_P_H) \
+    except.h $(TREE_H)
  caller-save.o : caller-save.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
!    $(FLAGS_H) $(REGS_H) hard-reg-set.h insn-config.h $(BASIC_BLOCK_H) function.h \
     $(RECOG_H) reload.h $(EXPR_H) toplev.h $(TM_P_H)
! bt-load.o : bt-load.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) except.h \
     $(BASIC_BLOCK_H) $(RTL_H) hard-reg-set.h $(REGS_H) $(OBSTACK_H) $(TM_P_H) \
!    $(FIBHEAP_H) output.h $(TARGET_H) $(EXPR_H) $(FLAGS_H) $(INSN_ATTR_H)
  reorg.o : reorg.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) conditions.h \
     hard-reg-set.h $(BASIC_BLOCK_H) $(REGS_H) insn-config.h $(INSN_ATTR_H) except.h \
!    $(RECOG_H) function.h $(FLAGS_H) output.h $(EXPR_H) toplev.h $(PARAMS_H) $(TM_P_H)
! alias.o : alias.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(FLAGS_H) \
!    hard-reg-set.h $(BASIC_BLOCK_H) $(REGS_H) toplev.h output.h $(ALIAS_H) $(EMIT_RTL_H) \
     $(GGC_H) function.h cselib.h $(TREE_H) $(TM_P_H) langhooks.h $(TARGET_H) \
!    gt-alias.h $(TIMEVAR_H) $(CGRAPH_H)
  regmove.o : regmove.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) insn-config.h \
!    $(RECOG_H) output.h $(REGS_H) hard-reg-set.h $(FLAGS_H) function.h \
     $(EXPR_H) $(BASIC_BLOCK_H) toplev.h $(TM_P_H) except.h reload.h
+ ddg.o : ddg.c $(DDG_H) $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TARGET_H) \
+    toplev.h $(RTL_H) $(TM_P_H) $(BASIC_BLOCK_H) regs.h function.h $(FLAGS_H) \
+    insn-config.h insn-attr.h except.h $(RECOG_H) $(SCHED_INT_H) \
+    $(CFGLAYOUT_H) $(CFGLOOP_H) $(EXPR_H)
+ modulo-sched.o : modulo-sched.c $(DDG_H) $(CONFIG_H) \
+    $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TARGET_H) \
+    toplev.h $(RTL_H) $(TM_P_H) $(BASIC_BLOCK_H) regs.h function.h $(FLAGS_H) \
+    insn-config.h insn-attr.h except.h $(RECOG_H) $(SCHED_INT_H) \
+    $(CFGLAYOUT_H) $(CFGLOOP_H) $(EXPR_H) params.h $(COVERAGE_H)
  haifa-sched.o : haifa-sched.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
!    $(SCHED_INT_H) $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h $(FLAGS_H) insn-config.h function.h \
     $(INSN_ATTR_H) toplev.h $(RECOG_H) except.h $(TM_P_H) $(TARGET_H)
  sched-deps.o : sched-deps.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
!    $(SCHED_INT_H) $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h $(FLAGS_H) insn-config.h function.h \
     $(INSN_ATTR_H) toplev.h $(RECOG_H) except.h cselib.h $(PARAMS_H) $(TM_P_H)
  sched-rgn.o : sched-rgn.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
!    $(SCHED_INT_H) $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h $(FLAGS_H) insn-config.h function.h \
!    $(INSN_ATTR_H) toplev.h $(RECOG_H) except.h $(PARAMS_H) $(TM_P_H) $(TARGET_H)
  sched-ebb.o : sched-ebb.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
!    $(SCHED_INT_H) $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h $(FLAGS_H) insn-config.h function.h \
     $(INSN_ATTR_H) toplev.h $(RECOG_H) except.h $(TM_P_H) $(PARAMS_H)
  sched-vis.o : sched-vis.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
!    $(SCHED_INT_H) hard-reg-set.h $(BASIC_BLOCK_H) $(INSN_ATTR_H) $(REGS_H) $(TM_P_H) \
     $(TARGET_H) real.h
  final.o : final.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
!    $(FLAGS_H) intl.h $(REGS_H) $(RECOG_H) conditions.h insn-config.h $(INSN_ATTR_H) \
     function.h real.h output.h hard-reg-set.h except.h debug.h xcoffout.h \
     toplev.h reload.h dwarf2out.h $(BASIC_BLOCK_H) $(TM_P_H) $(TARGET_H) \
     $(EXPR_H)
  recog.o : recog.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) function.h \
!    $(BASIC_BLOCK_H) $(REGS_H) $(RECOG_H) $(EXPR_H) hard-reg-set.h $(FLAGS_H) insn-config.h \
     $(INSN_ATTR_H) real.h toplev.h output.h reload.h $(TM_P_H)
  reg-stack.o : reg-stack.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
!    $(RECOG_H) $(REGS_H) hard-reg-set.h $(FLAGS_H) insn-config.h toplev.h reload.h \
!    varray.h function.h $(TM_P_H) $(GGC_H) gt-reg-stack.h basic-block.h
  sreal.o: sreal.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) sreal.h
  predict.o: predict.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
!    $(FLAGS_H) insn-config.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h \
     $(RECOG_H) function.h except.h $(EXPR_H) $(TM_P_H) $(PREDICT_H) sreal.h \
!    $(PARAMS_H) $(TARGET_H) $(CFGLOOP_H) $(COVERAGE_H) tree-scalar-evolution.h
! lists.o: lists.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) toplev.h \
!    $(RTL_H) $(GGC_H) gt-lists.h
  bb-reorder.o : bb-reorder.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
!    $(RTL_H) $(BASIC_BLOCK_H) $(FLAGS_H) $(TIMEVAR_H) output.h $(CFGLAYOUT_H) $(FIBHEAP_H) \
!    $(TARGET_H) function.h $(TM_P_H) $(OBSTACK_H) $(EXPR_H) $(REGS_H)
  tracer.o : tracer.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
!    $(BASIC_BLOCK_H) hard-reg-set.h output.h $(CFGLAYOUT_H) $(FLAGS_H) $(TIMEVAR_H) \
     $(PARAMS_H) $(COVERAGE_H)
  cfglayout.o : cfglayout.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
     $(RTL_H) $(TREE_H) insn-config.h $(BASIC_BLOCK_H) hard-reg-set.h output.h \
!    function.h $(CFGLAYOUT_H) $(CFGLOOP_H) $(TARGET_H) gt-cfglayout.h $(GGC_H)
! timevar.o : timevar.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TIMEVAR_H) $(FLAGS_H) \
     intl.h toplev.h
  regrename.o : regrename.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
     insn-config.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h $(RECOG_H) function.h \
!    $(RESOURCE_H) $(OBSTACK_H) $(FLAGS_H) $(TM_P_H)
  ifcvt.o : ifcvt.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
!    $(REGS_H) toplev.h $(FLAGS_H) insn-config.h function.h $(RECOG_H) $(TARGET_H) \
     $(BASIC_BLOCK_H) $(EXPR_H) output.h except.h $(TM_P_H) real.h $(OPTABS_H) \
!    $(CFGLOOP_H)
! lambda-mat.o : lambda-mat.c $(LAMBDA_H) $(GGC_H) $(SYSTEM_H) $(CONFIG_H) $(TM_H)
! lambda-trans.o: lambda-trans.c $(LAMBDA_H) $(GGC_H) $(SYSTEM_H) $(CONFIG_H) $(TM_H)
! lambda-code.o: lambda-code.c $(LAMBDA_H) $(GGC_H) $(SYSTEM_H) $(CONFIG_H) \
!    errors.h $(TM_H) $(OPTABS_H) $(TREE_H) $(RTL_H) $(BASIC_BLOCK_H) diagnostic.h \
!    $(TREE_FLOW_H) $(TREE_DUMP_H) $(TIMEVAR_H) cfgloop.h \
!    $(TREE_DATA_REF_H) $(SCEV_H) $(EXPR_H)
  params.o : params.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(PARAMS_H) toplev.h
+ pointer-set.o: pointer-set.c pointer-set.h $(CONFIG_H) $(SYSTEM_H)
  hooks.o: hooks.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(HOOKS_H)
! pretty-print.o: $(CONFIG_H) $(SYSTEM_H) coretypes.h intl.h $(PRETTY_PRINT_H) \
!    $(TREE_H)
! errors.o : errors.c $(CONFIG_H) $(SYSTEM_H) errors.h
  
  $(out_object_file): $(out_file) $(CONFIG_H) coretypes.h $(TM_H) $(TREE_H) $(GGC_H) \
     $(RTL_H) $(REGS_H) hard-reg-set.h real.h insn-config.h conditions.h \
     output.h $(INSN_ATTR_H) $(SYSTEM_H) toplev.h $(TARGET_H) libfuncs.h \
!    $(TARGET_DEF_H) function.h $(SCHED_INT_H) $(TM_P_H) $(EXPR_H) $(OPTABS_H) \
     langhooks.h
  	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
  		$(out_file) $(OUTPUT_OPTION)
*************** libbackend.o : $(OBJS-common:.o=.c) $(ou
*** 1879,1885 ****
  	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
  	  -DTARGET_NAME=\"$(target_noncanonical)\" \
  	  -DLOCALEDIR=\"$(localedir)\" \
! 	  -c $(filter %.c,$^) -o $@
  
  #
  # Generate header and source files from the machine description,
--- 2203,2209 ----
  	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
  	  -DTARGET_NAME=\"$(target_noncanonical)\" \
  	  -DLOCALEDIR=\"$(localedir)\" \
! 	  -c $(filter %.c,$^) -o $@ -combine
  
  #
  # Generate header and source files from the machine description,
*************** libbackend.o : $(OBJS-common:.o=.c) $(ou
*** 1887,1893 ****
  
  .PRECIOUS: insn-config.h insn-flags.h insn-codes.h insn-constants.h \
    insn-emit.c insn-recog.c insn-extract.c insn-output.c insn-peep.c \
!   insn-attr.h insn-attrtab.c
  
  # The following pair of rules has this effect:
  # genconfig is run only if the md has changed since genconfig was last run;
--- 2211,2228 ----
  
  .PRECIOUS: insn-config.h insn-flags.h insn-codes.h insn-constants.h \
    insn-emit.c insn-recog.c insn-extract.c insn-output.c insn-peep.c \
!   insn-attr.h insn-attrtab.c insn-preds.c
! 
! # Dependencies for the md file.  The first time through, we just assume
! # the md file itself and the generated dependency file (in order to get
! # it built).  The second time through we have the dependency file.
! -include mddeps.mk
! MD_DEPS = s-mddeps $(md_file) $(MD_INCLUDES)
! 
! s-mddeps: $(md_file) $(MD_INCLUDES) build/genmddeps$(build_exeext)
! 	$(RUN_GEN) build/genmddeps$(build_exeext) $(md_file) > tmp-mddeps
! 	$(SHELL) $(srcdir)/../move-if-change tmp-mddeps mddeps.mk
! 	$(STAMP) s-mddeps
  
  # The following pair of rules has this effect:
  # genconfig is run only if the md has changed since genconfig was last run;
*************** libbackend.o : $(OBJS-common:.o=.c) $(ou
*** 1909,1985 ****
  # trailing `;'), we call true for each.
  
  insn-config.h: s-config ; @true
! s-config : $(md_file) genconfig$(build_exeext) $(srcdir)/move-if-change
! 	$(RUN_GEN) ./genconfig$(build_exeext) $(md_file) > tmp-config.h
! 	$(SHELL) $(srcdir)/move-if-change tmp-config.h insn-config.h
  	$(STAMP) s-config
  
  insn-conditions.c: s-conditions ; @true
! s-conditions : $(md_file) genconditions$(build_exeext) $(srcdir)/move-if-change
! 	$(RUN_GEN) ./genconditions$(build_exeext) $(md_file) > tmp-conditions.c
! 	$(SHELL) $(srcdir)/move-if-change tmp-conditions.c insn-conditions.c
  	$(STAMP) s-conditions
  
! insn-conditions.o : insn-conditions.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
    $(GTM_H) $(RTL_H) $(TM_P_H) $(REGS_H) function.h $(RECOG_H) real.h output.h \
!   flags.h hard-reg-set.h resource.h toplev.h reload.h gensupport.h \
!   insn-constants.h
! 	$(CC_FOR_BUILD) -c $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(INCLUDES) insn-conditions.c
  
! dummy-conditions.o : dummy-conditions.c $(BCONFIG_H) $(SYSTEM_H) \
!   coretypes.h $(GTM_H) gensupport.h
  
  insn-flags.h: s-flags ; @true
! s-flags : $(md_file) genflags$(build_exeext) $(srcdir)/move-if-change
! 	$(RUN_GEN) ./genflags$(build_exeext) $(md_file) > tmp-flags.h
! 	$(SHELL) $(srcdir)/move-if-change tmp-flags.h insn-flags.h
  	$(STAMP) s-flags
  
  insn-codes.h: s-codes ; @true
! s-codes : $(md_file) gencodes$(build_exeext) $(srcdir)/move-if-change
! 	$(RUN_GEN) ./gencodes$(build_exeext) $(md_file) > tmp-codes.h
! 	$(SHELL) $(srcdir)/move-if-change tmp-codes.h insn-codes.h
  	$(STAMP) s-codes
  
  insn-constants.h: s-constants ; @true
! s-constants : $(md_file) genconstants$(build_exeext) $(srcdir)/move-if-change
! 	$(RUN_GEN) ./genconstants$(build_exeext) $(md_file) > tmp-constants.h
! 	$(SHELL) $(srcdir)/move-if-change tmp-constants.h insn-constants.h
  	$(STAMP) s-constants
  
  insn-emit.o : insn-emit.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
    $(RTL_H) $(EXPR_H) real.h output.h insn-config.h $(OPTABS_H) reload.h \
!   $(RECOG_H) toplev.h function.h flags.h hard-reg-set.h resource.h $(TM_P_H)
  	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-emit.c \
  	  $(OUTPUT_OPTION)
  
  insn-emit.c: s-emit ; @true
! s-emit : $(md_file) genemit$(build_exeext) $(srcdir)/move-if-change
! 	$(RUN_GEN) ./genemit$(build_exeext) $(md_file) > tmp-emit.c
! 	$(SHELL) $(srcdir)/move-if-change tmp-emit.c insn-emit.c
  	$(STAMP) s-emit
  
  insn-recog.o : insn-recog.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
!   $(RTL_H) insn-config.h $(RECOG_H) real.h output.h flags.h  function.h \
!   hard-reg-set.h resource.h $(TM_P_H) toplev.h reload.h
  	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-recog.c \
  	  $(OUTPUT_OPTION)
  
  insn-recog.c: s-recog ; @true
! s-recog : $(md_file) genrecog$(build_exeext) $(srcdir)/move-if-change
! 	$(RUN_GEN) ./genrecog$(build_exeext) $(md_file) > tmp-recog.c
! 	$(SHELL) $(srcdir)/move-if-change tmp-recog.c insn-recog.c
  	$(STAMP) s-recog
  
  insn-opinit.o : insn-opinit.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
!   $(RTL_H) insn-config.h flags.h $(RECOG_H) $(EXPR_H) $(OPTABS_H) reload.h
  	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-opinit.c \
  	  $(OUTPUT_OPTION)
  
  insn-opinit.c: s-opinit ; @true
! s-opinit : $(md_file) genopinit$(build_exeext) $(srcdir)/move-if-change
! 	$(RUN_GEN) ./genopinit$(build_exeext) $(md_file) > tmp-opinit.c
! 	$(SHELL) $(srcdir)/move-if-change tmp-opinit.c insn-opinit.c
  	$(STAMP) s-opinit
  
  insn-extract.o : insn-extract.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
--- 2244,2318 ----
  # trailing `;'), we call true for each.
  
  insn-config.h: s-config ; @true
! s-config : $(MD_DEPS) build/genconfig$(build_exeext)
! 	$(RUN_GEN) build/genconfig$(build_exeext) $(md_file) > tmp-config.h
! 	$(SHELL) $(srcdir)/../move-if-change tmp-config.h insn-config.h
  	$(STAMP) s-config
  
  insn-conditions.c: s-conditions ; @true
! s-conditions : $(MD_DEPS) build/genconditions$(build_exeext)
! 	$(RUN_GEN) build/genconditions$(build_exeext) $(md_file) > tmp-conditions.c
! 	$(SHELL) $(srcdir)/../move-if-change tmp-conditions.c insn-conditions.c
  	$(STAMP) s-conditions
  
! build/insn-conditions.o : insn-conditions.c $(CONFIG_H) $(SYSTEM_H) \
    $(GTM_H) $(RTL_H) $(TM_P_H) $(REGS_H) function.h $(RECOG_H) real.h output.h \
!   $(FLAGS_H) hard-reg-set.h $(RESOURCE_H) toplev.h reload.h gensupport.h \
!   insn-constants.h coretypes.h
  
! build/dummy-conditions.o : dummy-conditions.c
  
  insn-flags.h: s-flags ; @true
! s-flags : $(MD_DEPS) build/genflags$(build_exeext)
! 	$(RUN_GEN) build/genflags$(build_exeext) $(md_file) > tmp-flags.h
! 	$(SHELL) $(srcdir)/../move-if-change tmp-flags.h insn-flags.h
  	$(STAMP) s-flags
  
  insn-codes.h: s-codes ; @true
! s-codes : $(MD_DEPS) build/gencodes$(build_exeext)
! 	$(RUN_GEN) build/gencodes$(build_exeext) $(md_file) > tmp-codes.h
! 	$(SHELL) $(srcdir)/../move-if-change tmp-codes.h insn-codes.h
  	$(STAMP) s-codes
  
  insn-constants.h: s-constants ; @true
! s-constants : $(MD_DEPS) build/genconstants$(build_exeext)
! 	$(RUN_GEN) build/genconstants$(build_exeext) $(md_file) > tmp-constants.h
! 	$(SHELL) $(srcdir)/../move-if-change tmp-constants.h insn-constants.h
  	$(STAMP) s-constants
  
  insn-emit.o : insn-emit.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
    $(RTL_H) $(EXPR_H) real.h output.h insn-config.h $(OPTABS_H) reload.h \
!   $(RECOG_H) toplev.h function.h $(FLAGS_H) hard-reg-set.h $(RESOURCE_H) $(TM_P_H)
  	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-emit.c \
  	  $(OUTPUT_OPTION)
  
  insn-emit.c: s-emit ; @true
! s-emit : $(MD_DEPS) build/genemit$(build_exeext)
! 	$(RUN_GEN) build/genemit$(build_exeext) $(md_file) > tmp-emit.c
! 	$(SHELL) $(srcdir)/../move-if-change tmp-emit.c insn-emit.c
  	$(STAMP) s-emit
  
  insn-recog.o : insn-recog.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
!   $(RTL_H) insn-config.h $(RECOG_H) real.h output.h $(FLAGS_H)  function.h \
!   hard-reg-set.h $(RESOURCE_H) $(TM_P_H) toplev.h reload.h
  	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-recog.c \
  	  $(OUTPUT_OPTION)
  
  insn-recog.c: s-recog ; @true
! s-recog : $(MD_DEPS) build/genrecog$(build_exeext)
! 	$(RUN_GEN) build/genrecog$(build_exeext) $(md_file) > tmp-recog.c
! 	$(SHELL) $(srcdir)/../move-if-change tmp-recog.c insn-recog.c
  	$(STAMP) s-recog
  
  insn-opinit.o : insn-opinit.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
!   $(RTL_H) insn-config.h $(FLAGS_H) $(RECOG_H) $(EXPR_H) $(OPTABS_H) reload.h
  	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-opinit.c \
  	  $(OUTPUT_OPTION)
  
  insn-opinit.c: s-opinit ; @true
! s-opinit : $(MD_DEPS) build/genopinit$(build_exeext)
! 	$(RUN_GEN) build/genopinit$(build_exeext) $(md_file) > tmp-opinit.c
! 	$(SHELL) $(srcdir)/../move-if-change tmp-opinit.c insn-opinit.c
  	$(STAMP) s-opinit
  
  insn-extract.o : insn-extract.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
*************** insn-extract.o : insn-extract.c $(CONFIG
*** 1988,1996 ****
  	  $(OUTPUT_OPTION)
  
  insn-extract.c: s-extract ; @true
! s-extract : $(md_file) genextract$(build_exeext) $(srcdir)/move-if-change
! 	$(RUN_GEN) ./genextract$(build_exeext) $(md_file) > tmp-extract.c
! 	$(SHELL) $(srcdir)/move-if-change tmp-extract.c insn-extract.c
  	$(STAMP) s-extract
  
  insn-peep.o : insn-peep.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
--- 2321,2329 ----
  	  $(OUTPUT_OPTION)
  
  insn-extract.c: s-extract ; @true
! s-extract : $(MD_DEPS) build/genextract$(build_exeext)
! 	$(RUN_GEN) build/genextract$(build_exeext) $(md_file) > tmp-extract.c
! 	$(SHELL) $(srcdir)/../move-if-change tmp-extract.c insn-extract.c
  	$(STAMP) s-extract
  
  insn-peep.o : insn-peep.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
*************** insn-peep.o : insn-peep.c $(CONFIG_H) $(
*** 2000,2039 ****
  	  $(OUTPUT_OPTION)
  
  insn-peep.c: s-peep ; @true
! s-peep : $(md_file) genpeep$(build_exeext) $(srcdir)/move-if-change
! 	$(RUN_GEN) ./genpeep$(build_exeext) $(md_file) > tmp-peep.c
! 	$(SHELL) $(srcdir)/move-if-change tmp-peep.c insn-peep.c
  	$(STAMP) s-peep
  
  insn-attrtab.o : insn-attrtab.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
    $(RTL_H) $(REGS_H) real.h output.h $(INSN_ATTR_H) insn-config.h toplev.h \
!   $(RECOG_H) $(TM_P_H) flags.h
  	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-attrtab.c \
  	  $(OUTPUT_OPTION)
  
  insn-attr.h: s-attr ; @true
! s-attr : $(md_file) genattr$(build_exeext) $(srcdir)/move-if-change
! 	$(RUN_GEN) ./genattr$(build_exeext) $(md_file) > tmp-attr.h
! 	$(SHELL) $(srcdir)/move-if-change tmp-attr.h insn-attr.h
  	$(STAMP) s-attr
  
  insn-attrtab.c: s-attrtab ; @true
! s-attrtab : $(md_file) genattrtab$(build_exeext) $(srcdir)/move-if-change
! 	$(RUN_GEN) ./genattrtab$(build_exeext) $(md_file) > tmp-attrtab.c
! 	$(SHELL) $(srcdir)/move-if-change tmp-attrtab.c insn-attrtab.c
  	$(STAMP) s-attrtab
  
  insn-output.o : insn-output.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
    $(RTL_H) $(GGC_H) $(REGS_H) real.h conditions.h hard-reg-set.h \
    insn-config.h $(INSN_ATTR_H) $(EXPR_H) output.h $(RECOG_H) function.h \
!   toplev.h flags.h insn-codes.h $(TM_P_H) $(TARGET_H)
  	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-output.c \
  	  $(OUTPUT_OPTION)
  
  insn-output.c: s-output ; @true
! s-output : $(md_file) genoutput$(build_exeext) $(srcdir)/move-if-change
! 	$(RUN_GEN) ./genoutput$(build_exeext) $(md_file) > tmp-output.c
! 	$(SHELL) $(srcdir)/move-if-change tmp-output.c insn-output.c
  	$(STAMP) s-output
  
  genrtl.o : genrtl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
--- 2333,2372 ----
  	  $(OUTPUT_OPTION)
  
  insn-peep.c: s-peep ; @true
! s-peep : $(MD_DEPS) build/genpeep$(build_exeext)
! 	$(RUN_GEN) build/genpeep$(build_exeext) $(md_file) > tmp-peep.c
! 	$(SHELL) $(srcdir)/../move-if-change tmp-peep.c insn-peep.c
  	$(STAMP) s-peep
  
  insn-attrtab.o : insn-attrtab.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
    $(RTL_H) $(REGS_H) real.h output.h $(INSN_ATTR_H) insn-config.h toplev.h \
!   $(RECOG_H) $(TM_P_H) $(FLAGS_H)
  	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-attrtab.c \
  	  $(OUTPUT_OPTION)
  
  insn-attr.h: s-attr ; @true
! s-attr : $(MD_DEPS) build/genattr$(build_exeext)
! 	$(RUN_GEN) build/genattr$(build_exeext) $(md_file) > tmp-attr.h
! 	$(SHELL) $(srcdir)/../move-if-change tmp-attr.h insn-attr.h
  	$(STAMP) s-attr
  
  insn-attrtab.c: s-attrtab ; @true
! s-attrtab : $(MD_DEPS) build/genattrtab$(build_exeext)
! 	$(RUN_GEN) build/genattrtab$(build_exeext) $(md_file) > tmp-attrtab.c
! 	$(SHELL) $(srcdir)/../move-if-change tmp-attrtab.c insn-attrtab.c
  	$(STAMP) s-attrtab
  
  insn-output.o : insn-output.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
    $(RTL_H) $(GGC_H) $(REGS_H) real.h conditions.h hard-reg-set.h \
    insn-config.h $(INSN_ATTR_H) $(EXPR_H) output.h $(RECOG_H) function.h \
!   toplev.h $(FLAGS_H) insn-codes.h $(TM_P_H) $(TARGET_H)
  	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-output.c \
  	  $(OUTPUT_OPTION)
  
  insn-output.c: s-output ; @true
! s-output : $(MD_DEPS) build/genoutput$(build_exeext)
! 	$(RUN_GEN) build/genoutput$(build_exeext) $(md_file) > tmp-output.c
! 	$(SHELL) $(srcdir)/../move-if-change tmp-output.c insn-output.c
  	$(STAMP) s-output
  
  genrtl.o : genrtl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
*************** genrtl.o : genrtl.c $(CONFIG_H) $(SYSTEM
*** 2041,2089 ****
  genrtl.c genrtl.h : s-genrtl
  	@true	# force gnu make to recheck modification times.
  
! s-genrtl: gengenrtl$(build_exeext) $(srcdir)/move-if-change
! 	$(RUN_GEN) ./gengenrtl$(build_exeext) -h > tmp-genrtl.h
! 	$(SHELL) $(srcdir)/move-if-change tmp-genrtl.h genrtl.h
! 	$(RUN_GEN) ./gengenrtl$(build_exeext) > tmp-genrtl.c
! 	$(SHELL) $(srcdir)/move-if-change tmp-genrtl.c genrtl.c
  	$(STAMP) s-genrtl
  
  insn-modes.o : insn-modes.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
  	       $(MACHMODE_H) real.h
  min-insn-modes.c insn-modes.c insn-modes.h : s-modes ; @true
  
! s-modes: genmodes$(build_exeext) $(srcdir)/move-if-change
! 	$(RUN_GEN) ./genmodes$(build_exeext) -h > tmp-modes.h
! 	$(SHELL) $(srcdir)/move-if-change tmp-modes.h insn-modes.h
! 	$(RUN_GEN) ./genmodes$(build_exeext) -m > tmp-min-modes.c
! 	$(SHELL) $(srcdir)/move-if-change tmp-min-modes.c min-insn-modes.c
! 	$(RUN_GEN) ./genmodes$(build_exeext) > tmp-modes.c
! 	$(SHELL) $(srcdir)/move-if-change tmp-modes.c insn-modes.c
  	$(STAMP) s-modes
  
! tm-preds.h: s-preds; @true
  
! s-preds: genpreds$(build_exeext) $(srcdir)/move-if-change
! 	$(RUN_GEN) ./genpreds$(build_exeext) > tmp-preds.h
! 	$(SHELL) $(srcdir)/move-if-change tmp-preds.h tm-preds.h
  	$(STAMP) s-preds
  
! GTFILES = $(srcdir)/input.h $(srcdir)/coretypes.h $(srcdir)/cpplib.h \
!   $(host_xm_file_list) $(tm_file_list) $(HASHTAB_H) $(SPLAY_TREE_H) \
!   $(srcdir)/bitmap.h $(srcdir)/coverage.c $(srcdir)/function.h  $(srcdir)/rtl.h \
!   $(srcdir)/optabs.h $(srcdir)/tree.h $(srcdir)/libfuncs.h $(srcdir)/hashtable.h \
!   $(srcdir)/real.h $(srcdir)/varray.h $(srcdir)/insn-addr.h \
    $(srcdir)/cselib.h $(srcdir)/basic-block.h  $(srcdir)/cgraph.h \
!   $(srcdir)/c-common.h $(srcdir)/c-tree.h \
    $(srcdir)/alias.c $(srcdir)/bitmap.c $(srcdir)/cselib.c $(srcdir)/cgraph.c \
    $(srcdir)/dbxout.c $(srcdir)/dwarf2out.c $(srcdir)/dwarf2asm.c \
    $(srcdir)/emit-rtl.c $(srcdir)/except.c $(srcdir)/explow.c $(srcdir)/expr.c \
!   $(srcdir)/fold-const.c $(srcdir)/function.c \
    $(srcdir)/gcse.c $(srcdir)/integrate.c $(srcdir)/lists.c $(srcdir)/optabs.c \
!   $(srcdir)/profile.c $(srcdir)/ra-build.c $(srcdir)/regclass.c \
!   $(srcdir)/reg-stack.c $(srcdir)/cfglayout.c $(srcdir)/langhooks.c \
!   $(srcdir)/sdbout.c $(srcdir)/stmt.c $(srcdir)/stor-layout.c \
    $(srcdir)/stringpool.c $(srcdir)/tree.c $(srcdir)/varasm.c \
    $(out_file) \
    @all_gtfiles@
  
--- 2374,2440 ----
  genrtl.c genrtl.h : s-genrtl
  	@true	# force gnu make to recheck modification times.
  
! s-genrtl: build/gengenrtl$(build_exeext)
! 	$(RUN_GEN) build/gengenrtl$(build_exeext) -h > tmp-genrtl.h
! 	$(SHELL) $(srcdir)/../move-if-change tmp-genrtl.h genrtl.h
! 	$(RUN_GEN) build/gengenrtl$(build_exeext) > tmp-genrtl.c
! 	$(SHELL) $(srcdir)/../move-if-change tmp-genrtl.c genrtl.c
  	$(STAMP) s-genrtl
  
  insn-modes.o : insn-modes.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
  	       $(MACHMODE_H) real.h
  min-insn-modes.c insn-modes.c insn-modes.h : s-modes ; @true
  
! s-modes: build/genmodes$(build_exeext)
! 	$(RUN_GEN) build/genmodes$(build_exeext) -h > tmp-modes.h
! 	$(SHELL) $(srcdir)/../move-if-change tmp-modes.h insn-modes.h
! 	$(RUN_GEN) build/genmodes$(build_exeext) -m > tmp-min-modes.c
! 	$(SHELL) $(srcdir)/../move-if-change tmp-min-modes.c min-insn-modes.c
! 	$(RUN_GEN) build/genmodes$(build_exeext) > tmp-modes.c
! 	$(SHELL) $(srcdir)/../move-if-change tmp-modes.c insn-modes.c
  	$(STAMP) s-modes
  
! insn-preds.c tm-preds.h: s-preds; @true
  
! s-preds: $(MD_DEPS) build/genpreds$(build_exeext)
! 	$(RUN_GEN) build/genpreds$(build_exeext) -h $(md_file) > tmp-preds.h
! 	$(SHELL) $(srcdir)/../move-if-change tmp-preds.h tm-preds.h
! 	$(RUN_GEN) build/genpreds$(build_exeext) $(md_file) > tmp-preds.c
! 	$(SHELL) $(srcdir)/../move-if-change tmp-preds.c insn-preds.c
  	$(STAMP) s-preds
  
! insn-preds.o : insn-preds.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
!   $(RTL_H) $(TREE_H) insn-config.h $(RECOG_H) real.h output.h $(FLAGS_H) \
!   function.h hard-reg-set.h $(RESOURCE_H) $(TM_P_H) toplev.h reload.h \
!   $(REGS_H)
! 
! GTFILES = $(srcdir)/input.h $(srcdir)/coretypes.h \
!   $(CPP_ID_DATA_H) $(host_xm_file_list) \
!   $(tm_file_list) $(HASHTAB_H) $(SPLAY_TREE_H) $(srcdir)/bitmap.h \
!   $(srcdir)/coverage.c $(srcdir)/function.h $(srcdir)/rtl.h \
!   $(srcdir)/optabs.h $(srcdir)/tree.h $(srcdir)/libfuncs.h $(SYMTAB_H) \
!   $(srcdir)/real.h $(srcdir)/varray.h $(srcdir)/insn-addr.h $(srcdir)/hwint.h \
    $(srcdir)/cselib.h $(srcdir)/basic-block.h  $(srcdir)/cgraph.h \
!   $(srcdir)/c-common.h $(srcdir)/c-tree.h $(srcdir)/reload.h \
    $(srcdir)/alias.c $(srcdir)/bitmap.c $(srcdir)/cselib.c $(srcdir)/cgraph.c \
    $(srcdir)/dbxout.c $(srcdir)/dwarf2out.c $(srcdir)/dwarf2asm.c \
+   $(srcdir)/dojump.c \
    $(srcdir)/emit-rtl.c $(srcdir)/except.c $(srcdir)/explow.c $(srcdir)/expr.c \
!   $(srcdir)/function.c \
    $(srcdir)/gcse.c $(srcdir)/integrate.c $(srcdir)/lists.c $(srcdir)/optabs.c \
!   $(srcdir)/profile.c $(srcdir)/regclass.c \
!   $(srcdir)/reg-stack.c $(srcdir)/cfglayout.c \
!   $(srcdir)/sdbout.c $(srcdir)/stor-layout.c \
    $(srcdir)/stringpool.c $(srcdir)/tree.c $(srcdir)/varasm.c \
+   $(srcdir)/tree-mudflap.c $(srcdir)/tree-flow.h \
+   $(srcdir)/c-objc-common.c $(srcdir)/c-common.c $(srcdir)/c-parse.in \
+   $(srcdir)/tree-ssanames.c $(srcdir)/tree-eh.c \
+   $(srcdir)/tree-phinodes.c $(srcdir)/tree-cfg.c \
+   $(srcdir)/tree-dfa.c $(srcdir)/tree-ssa-propagate.c \
+   $(srcdir)/tree-iterator.c $(srcdir)/gimplify.c \
+   $(srcdir)/tree-chrec.h $(srcdir)/tree-complex.c \
+   $(srcdir)/tree-ssa-operands.h $(srcdir)/tree-ssa-operands.c \
+   $(srcdir)/tree-profile.c $(srcdir)/rtl-profile.c $(srcdir)/tree-nested.c \
    $(out_file) \
    @all_gtfiles@
  
*************** GTFILES_LANG_DIR_NAMES = @subdirs@
*** 2093,2108 ****
  GTFILES_SRCDIR = @srcdir@
  
  gt-cgraph.h gt-coverage.h gtype-desc.h gtype-desc.c gt-except.h \
! gt-function.h gt-integrate.h gt-stmt.h gt-tree.h gt-varasm.h \
  gt-emit-rtl.h gt-explow.h gt-stor-layout.h gt-regclass.h \
! gt-lists.h gt-alias.h gt-cselib.h gt-fold-const.h gt-gcse.h \
! gt-expr.h gt-sdbout.h gt-optabs.h gt-bitmap.h \
! gt-dwarf2out.h gt-ra-build.h gt-reg-stack.h gt-dwarf2asm.h \
  gt-dbxout.h gt-c-common.h gt-c-decl.h gt-c-parse.h \
! gt-c-pragma.h gtype-c.h gt-input.h gt-cfglayout.h \
! gt-stringpool.h gt-langhooks.h : s-gtype ; @true
  
! gtyp-gen.h: Makefile
  	echo "/* This file is machine generated.  Do not edit.  */" > tmp-gtyp.h
  	echo "static const char *const srcdir = "  >> tmp-gtyp.h
  	echo "\"$(GTFILES_SRCDIR)\"" >> tmp-gtyp.h
--- 2444,2465 ----
  GTFILES_SRCDIR = @srcdir@
  
  gt-cgraph.h gt-coverage.h gtype-desc.h gtype-desc.c gt-except.h \
! gt-function.h gt-integrate.h gt-tree.h gt-varasm.h \
  gt-emit-rtl.h gt-explow.h gt-stor-layout.h gt-regclass.h \
! gt-lists.h gt-alias.h gt-cselib.h gt-gcse.h \
! gt-expr.h gt-sdbout.h gt-optabs.h gt-bitmap.h gt-dojump.h \
! gt-dwarf2out.h gt-reg-stack.h gt-dwarf2asm.h \
  gt-dbxout.h gt-c-common.h gt-c-decl.h gt-c-parse.h \
! gt-c-pragma.h gtype-c.h gt-cfglayout.h \
! gt-tree-mudflap.h gt-tree-complex.h \
! gt-tree-eh.h \
! gt-tree-ssanames.h gt-tree-iterator.h gt-gimplify.h \
! gt-tree-phinodes.h gt-tree-cfg.h gt-tree-nested.h \
! gt-tree-ssa-operands.h gt-tree-ssa-propagate.h \
! gt-stringpool.h : s-gtype ; @true
  
! gtyp-gen.h: s-gtyp-gen ; @true
! s-gtyp-gen: Makefile
  	echo "/* This file is machine generated.  Do not edit.  */" > tmp-gtyp.h
  	echo "static const char *const srcdir = "  >> tmp-gtyp.h
  	echo "\"$(GTFILES_SRCDIR)\"" >> tmp-gtyp.h
*************** gtyp-gen.h: Makefile
*** 2127,2136 ****
  	for l in $$gf; do \
  	echo "\"$$l\", "; done >> tmp-gtyp.h
  	echo "NULL};" >> tmp-gtyp.h
! 	$(SHELL) $(srcdir)/move-if-change tmp-gtyp.h gtyp-gen.h 
  
! s-gtype: gengtype$(build_exeext) $(GTFILES)
! 	$(RUN_GEN) ./gengtype
  	$(STAMP) s-gtype
  
  #
--- 2484,2494 ----
  	for l in $$gf; do \
  	echo "\"$$l\", "; done >> tmp-gtyp.h
  	echo "NULL};" >> tmp-gtyp.h
! 	$(SHELL) $(srcdir)/../move-if-change tmp-gtyp.h gtyp-gen.h
! 	$(STAMP) s-gtyp-gen
  
! s-gtype: build/gengtype$(build_exeext) $(GTFILES)
! 	$(RUN_GEN) build/gengtype$(build_exeext)
  	$(STAMP) s-gtype
  
  #
*************** genprognames=genconfig genflags gencodes
*** 2149,2161 ****
  	     genextract genpeep genattr genoutput
  
  # The names of the executable files for those programs.
! genprogs=$(genprognames:%=%$(build_exeext))
  
  # Object files used in those programs.
! genobjs=$(genprognames:%=%.o) read-rtl.o gensupport.o genattrtab.o \
          genautomata.o gengenrtl.o genmodes.o genpreds.o gengtype.o \
  	genconstants.o gen-protos.o scan.o fix-header.o scan-decls.o \
! 	gencheck.o dummy-conditions.o genconditions.o
  
  $(genprogs): %$(build_exeext): %.o  $(BUILD_RTL) $(BUILD_SUPPORT) \
  			       $(BUILD_PRINT) $(BUILD_ERRORS) \
--- 2507,2523 ----
  	     genextract genpeep genattr genoutput
  
  # The names of the executable files for those programs.
! genprogs=$(genprognames:%=build/%$(build_exeext))
  
  # Object files used in those programs.
! genobjnames=$(genprognames:%=%.o) read-rtl.o gensupport.o genattrtab.o \
          genautomata.o gengenrtl.o genmodes.o genpreds.o gengtype.o \
  	genconstants.o gen-protos.o scan.o fix-header.o scan-decls.o \
! 	gencheck.o dummy-conditions.o genconditions.o errors.o ggc-none.o \
! 	min-insn-modes.o rtl.o print-rtl.o varray.o gcov-iov.o \
! 	insn-conditions.o gengtype-lex.o gengtype-yacc.o genmddeps.o
! 
! genobjs=$(genobjnames:%=build/%)
  
  $(genprogs): %$(build_exeext): %.o  $(BUILD_RTL) $(BUILD_SUPPORT) \
  			       $(BUILD_PRINT) $(BUILD_ERRORS) \
*************** $(genprogs): %$(build_exeext): %.o  $(BU
*** 2164,2267 ****
  		$< $(BUILD_RTL) $(BUILD_SUPPORT) $(BUILD_PRINT) \
  		$(BUILD_ERRORS) $(BUILD_LIBS)
  
! $(genobjs): %.o : %.c
! 	$(CC_FOR_BUILD) -c $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
  
! read-rtl.o: read-rtl.c $(BCONFIG_H) $(SYSTEM_H) coretypes.h $(GTM_H) $(RTL_H) \
!   $(OBSTACK_H) $(HASHTAB_H)
  
! gensupport.o: gensupport.c $(BCONFIG_H) $(SYSTEM_H) coretypes.h $(GTM_H) $(RTL_H) \
!   $(OBSTACK_H) errors.h $(HASHTAB_H) gensupport.h
  
! genconfig.o : genconfig.c $(RTL_H) $(BCONFIG_H) \
    $(SYSTEM_H) coretypes.h $(GTM_H) errors.h gensupport.h
  
! genflags.o : genflags.c $(RTL_H) $(OBSTACK_H) $(BCONFIG_H) \
    $(SYSTEM_H) coretypes.h $(GTM_H) errors.h gensupport.h
  
! gencodes.o : gencodes.c $(RTL_H) $(BCONFIG_H) \
    $(SYSTEM_H) coretypes.h $(GTM_H) errors.h gensupport.h
  
! genconstants$(build_exeext) : genconstants.o $(BUILD_RTL) $(BUILD_EARLY_SUPPORT) \
!   $(BUILD_ERRORS) $(BUILD_LIBDEPS)
  	$(CC_FOR_BUILD) $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -o $@ \
! 	 genconstants.o $(BUILD_EARLY_SUPPORT) $(BUILD_RTL) \
! 	    $(BUILD_ERRORS) $(BUILD_LIBS)
  
! genconstants.o : genconstants.c $(RTL_H) $(BCONFIG_H) $(SYSTEM_H) coretypes.h $(GTM_H) \
!   errors.h
  
! genemit.o : genemit.c $(RTL_H) $(BCONFIG_H) $(SYSTEM_H) coretypes.h $(GTM_H) \
!   errors.h gensupport.h
  
! genopinit.o : genopinit.c $(RTL_H) $(BCONFIG_H) \
    $(SYSTEM_H) coretypes.h $(GTM_H) errors.h gensupport.h
  
! genrecog.o : genrecog.c $(RTL_H) $(BCONFIG_H) \
    $(SYSTEM_H) coretypes.h $(GTM_H) errors.h gensupport.h
  
! genextract.o : genextract.c $(RTL_H) $(BCONFIG_H) \
    $(SYSTEM_H) coretypes.h $(GTM_H) insn-config.h errors.h gensupport.h
  
! genpeep.o : genpeep.c $(RTL_H) $(BCONFIG_H) $(SYSTEM_H) coretypes.h $(GTM_H) \
!   errors.h gensupport.h
  
! genattr.o : genattr.c $(RTL_H) $(BCONFIG_H) $(SYSTEM_H) coretypes.h $(GTM_H) errors.h \
!   gensupport.h
  
! genattrtab$(build_exeext) : genattrtab.o genautomata.o \
!   $(BUILD_RTL) $(BUILD_SUPPORT) $(BUILD_PRINT) $(BUILD_ERRORS) $(BUILD_VARRAY) \
!   $(BUILD_LIBDEPS)
  	$(CC_FOR_BUILD) $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -o $@ \
! 	 genattrtab.o genautomata.o \
  	 $(BUILD_RTL) $(BUILD_SUPPORT) $(BUILD_PRINT) $(BUILD_ERRORS) \
  	 $(BUILD_VARRAY) $(BUILD_LIBS) -lm
  
! genattrtab.o : genattrtab.c $(RTL_H) $(OBSTACK_H) $(BCONFIG_H) \
    $(SYSTEM_H) coretypes.h $(GTM_H) errors.h $(GGC_H) gensupport.h genattrtab.h
  
! genautomata.o : genautomata.c $(RTL_H) $(OBSTACK_H) $(BCONFIG_H) \
    $(SYSTEM_H) coretypes.h $(GTM_H) errors.h varray.h genattrtab.h $(HASHTAB_H)
  
! genoutput.o : genoutput.c $(RTL_H) $(BCONFIG_H) \
    $(SYSTEM_H) coretypes.h $(GTM_H) errors.h gensupport.h
  
! gengenrtl$(build_exeext) : gengenrtl.o $(BUILD_LIBDEPS)
  	$(CC_FOR_BUILD) $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -o $@ \
! 	 gengenrtl.o $(BUILD_LIBS)
  
! gengenrtl.o : gengenrtl.c $(BCONFIG_H) $(SYSTEM_H) rtl.def
  
! genmodes$(build_exeext) : genmodes.o $(BUILD_ERRORS) $(BUILD_LIBDEPS)
  	$(CC_FOR_BUILD) $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -o $@ \
! 	 genmodes.o $(BUILD_ERRORS) $(BUILD_LIBS)
  
! genmodes.o : genmodes.c $(BCONFIG_H) $(SYSTEM_H) errors.h $(HASHTAB_H) \
  	     machmode.def $(extra_modes_file)
  
! genpreds$(build_exeext) : genpreds.o $(BUILD_LIBDEPS)
  	$(CC_FOR_BUILD) $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -o $@ \
! 	 genpreds.o $(BUILD_LIBS)
  
! genpreds.o : genpreds.c $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H) coretypes.h $(GTM_H)
  
! gengtype$(build_exeext) : gengtype.o gengtype-lex.o gengtype-yacc.o \
!   $(BUILD_LIBDEPS)
  	$(CC_FOR_BUILD) $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -o $@ \
! 	 gengtype.o gengtype-lex.o gengtype-yacc.o $(BUILD_LIBS)
  
! gengtype.o : gengtype.c gengtype.h $(BCONFIG_H) $(SYSTEM_H) coretypes.h $(GTM_H) \
!   real.h $(RTL_BASE_H) gtyp-gen.h
  
! gengtype-lex.o : gengtype-lex.c gengtype.h gengtype-yacc.h \
!   $(BCONFIG_H) coretypes.h $(GTM_H) $(SYSTEM_H)
! 	$(CC_FOR_BUILD) -c $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(INCLUDES) \
! 	 $< $(OUTPUT_OPTION)
  
! gengtype-yacc.o : gengtype-yacc.c gengtype.h $(BCONFIG_H) $(SYSTEM_H) \
    coretypes.h $(GTM_H)
- 	$(CC_FOR_BUILD) -c $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(INCLUDES) \
- 	 $< $(OUTPUT_OPTION)
  
  gengtype-lex.c : gengtype-lex.l
  	-$(FLEX) $(FLEXFLAGS) -o$@ $<
--- 2526,2641 ----
  		$< $(BUILD_RTL) $(BUILD_SUPPORT) $(BUILD_PRINT) \
  		$(BUILD_ERRORS) $(BUILD_LIBS)
  
! $(genobjs): %.o :  # dependencies provided by explicit rule later
! 	$(CC_FOR_BUILD) -c $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(INCLUDES) \
! 	 -o $@ $<
  
! build/read-rtl.o: read-rtl.c $(BCONFIG_H) $(SYSTEM_H) coretypes.h $(GTM_H) \
!   $(RTL_BASE_H) $(OBSTACK_H) $(HASHTAB_H)
  
! build/gensupport.o: gensupport.c $(BCONFIG_H) $(SYSTEM_H) coretypes.h \
!   $(GTM_H) $(RTL_BASE_H) $(OBSTACK_H) errors.h $(HASHTAB_H) gensupport.h
  
! build/genconfig.o : genconfig.c $(RTL_BASE_H) $(BCONFIG_H) \
    $(SYSTEM_H) coretypes.h $(GTM_H) errors.h gensupport.h
  
! build/genflags.o : genflags.c $(RTL_BASE_H) $(OBSTACK_H) $(BCONFIG_H) \
    $(SYSTEM_H) coretypes.h $(GTM_H) errors.h gensupport.h
  
! build/gencodes.o : gencodes.c $(RTL_BASE_H) $(BCONFIG_H) \
    $(SYSTEM_H) coretypes.h $(GTM_H) errors.h gensupport.h
  
! build/genmddeps$(build_exeext) : build/genmddeps.o $(BUILD_RTL) \
!   $(BUILD_EARLY_SUPPORT) $(BUILD_ERRORS) $(BUILD_LIBDEPS)
  	$(CC_FOR_BUILD) $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -o $@ \
! 	 build/genmddeps.o $(BUILD_EARLY_SUPPORT) $(BUILD_RTL) \
! 	 $(BUILD_ERRORS) $(BUILD_LIBS)
  
! build/genmddeps.o: genmddeps.c $(BCONFIG_H) $(SYSTEM_H) coretypes.h \
!   $(GTM_H) $(RTL_BASE_H) errors.h gensupport.h
  
! build/genconstants$(build_exeext) : build/genconstants.o $(BUILD_RTL) \
!   $(BUILD_EARLY_SUPPORT) $(BUILD_ERRORS) $(BUILD_LIBDEPS)
! 	$(CC_FOR_BUILD) $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -o $@ \
! 	 build/genconstants.o $(BUILD_EARLY_SUPPORT) $(BUILD_RTL) \
! 	 $(BUILD_ERRORS) $(BUILD_LIBS)
  
! build/genconstants.o : genconstants.c $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H) \
!   coretypes.h $(GTM_H) errors.h
! 
! build/genemit.o : genemit.c $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H) \
!   coretypes.h $(GTM_H) errors.h gensupport.h
! 
! build/genopinit.o : genopinit.c $(RTL_BASE_H) $(BCONFIG_H) \
    $(SYSTEM_H) coretypes.h $(GTM_H) errors.h gensupport.h
  
! build/genrecog.o : genrecog.c $(RTL_BASE_H) $(BCONFIG_H) \
    $(SYSTEM_H) coretypes.h $(GTM_H) errors.h gensupport.h
  
! build/genextract.o : genextract.c $(RTL_BASE_H) $(BCONFIG_H) \
    $(SYSTEM_H) coretypes.h $(GTM_H) insn-config.h errors.h gensupport.h
  
! build/genpeep.o : genpeep.c $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H) \
!   coretypes.h $(GTM_H) errors.h gensupport.h
  
! build/genattr.o : genattr.c $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H) \
!   coretypes.h $(GTM_H) errors.h gensupport.h
  
! build/genattrtab$(build_exeext) : build/genattrtab.o build/genautomata.o \
!   $(BUILD_RTL) $(BUILD_SUPPORT) $(BUILD_PRINT) $(BUILD_ERRORS) \
!   $(BUILD_VARRAY) $(BUILD_LIBDEPS)
  	$(CC_FOR_BUILD) $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -o $@ \
! 	 build/genattrtab.o build/genautomata.o \
  	 $(BUILD_RTL) $(BUILD_SUPPORT) $(BUILD_PRINT) $(BUILD_ERRORS) \
  	 $(BUILD_VARRAY) $(BUILD_LIBS) -lm
  
! build/genattrtab.o : genattrtab.c $(RTL_BASE_H) $(OBSTACK_H) $(BCONFIG_H) \
    $(SYSTEM_H) coretypes.h $(GTM_H) errors.h $(GGC_H) gensupport.h genattrtab.h
  
! build/genautomata.o : genautomata.c $(RTL_BASE_H) $(OBSTACK_H) $(BCONFIG_H) \
    $(SYSTEM_H) coretypes.h $(GTM_H) errors.h varray.h genattrtab.h $(HASHTAB_H)
  
! build/genoutput.o : genoutput.c $(RTL_BASE_H) $(BCONFIG_H) \
    $(SYSTEM_H) coretypes.h $(GTM_H) errors.h gensupport.h
  
! build/gengenrtl$(build_exeext) : build/gengenrtl.o $(BUILD_ERRORS) \
!   $(BUILD_LIBDEPS)
  	$(CC_FOR_BUILD) $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -o $@ \
! 	 build/gengenrtl.o $(BUILD_ERRORS) $(BUILD_LIBS)
  
! build/gengenrtl.o : gengenrtl.c $(BCONFIG_H) $(SYSTEM_H) rtl.def
  
! build/genmodes$(build_exeext) : build/genmodes.o $(BUILD_ERRORS) \
!   $(BUILD_LIBDEPS)
  	$(CC_FOR_BUILD) $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -o $@ \
! 	 build/genmodes.o $(BUILD_ERRORS) $(BUILD_LIBS)
  
! build/genmodes.o : genmodes.c $(BCONFIG_H) $(SYSTEM_H) errors.h $(HASHTAB_H) \
  	     machmode.def $(extra_modes_file)
  
! build/genpreds$(build_exeext) : build/genpreds.o $(BUILD_RTL) \
!   $(BUILD_EARLY_SUPPORT) $(BUILD_PRINT) $(BUILD_ERRORS) $(BUILD_LIBDEPS)
  	$(CC_FOR_BUILD) $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -o $@ \
! 	 build/genpreds.o $(BUILD_RTL) $(BUILD_EARLY_SUPPORT) $(BUILD_PRINT) \
! 	 $(BUILD_ERRORS) $(BUILD_LIBS)
  
! build/genpreds.o : genpreds.c $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H) \
!   coretypes.h $(GTM_H) errors.h gensupport.h $(OBSTACK_H)
  
! build/gengtype$(build_exeext) : build/gengtype.o build/gengtype-lex.o \
!   build/gengtype-yacc.o $(BUILD_LIBDEPS) $(BUILD_ERRORS)
  	$(CC_FOR_BUILD) $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -o $@ \
! 	 build/gengtype.o build/gengtype-lex.o build/gengtype-yacc.o \
! 	 $(BUILD_ERRORS) $(BUILD_LIBS)
  
! build/gengtype.o : gengtype.c $(BCONFIG_H) $(SYSTEM_H) coretypes.h $(GTM_H) \
!   gengtype.h gtyp-gen.h rtl.def insn-notes.def errors.h
  
! build/gengtype-lex.o : gengtype-lex.c gengtype.h gengtype-yacc.h \
!   $(BCONFIG_H) coretypes.h $(GTM_H) $(SYSTEM_H) vec.h
  
! build/gengtype-yacc.o : gengtype-yacc.c gengtype.h $(BCONFIG_H) $(SYSTEM_H) \
    coretypes.h $(GTM_H)
  
  gengtype-lex.c : gengtype-lex.l
  	-$(FLEX) $(FLEXFLAGS) -o$@ $<
*************** gengtype-lex.c : gengtype-lex.l
*** 2269,2327 ****
  gengtype-yacc.c gengtype-yacc.h: gengtype-yacc.y
  	-$(BISON) $(BISONFLAGS) -d -o gengtype-yacc.c $<
  
! genconditions$(build_exeext) : genconditions.o $(BUILD_EARLY_SUPPORT) \
!   $(BUILD_RTL) $(BUILD_ERRORS) $(BUILD_LIBDEPS)
  	$(CC_FOR_BUILD) $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -o $@ \
! 	 genconditions.o $(BUILD_EARLY_SUPPORT) $(BUILD_RTL) \
! 	    $(BUILD_ERRORS) $(BUILD_LIBS)
  
! genconditions.o : genconditions.c $(RTL_H) $(BCONFIG_H) $(SYSTEM_H) coretypes.h \
!   $(GTM_H) errors.h
  
! #
! # Compile the libraries to be used by gen*.
! # If we are not cross-building, gen* use the same .o's that cc1 will use,
! # and BUILD_PREFIX_1 is `loser-', just to ensure these rules don't conflict
! # with the rules for rtl.o, etc.
! $(BUILD_PREFIX_1)rtl.o: $(srcdir)/rtl.c $(BCONFIG_H) coretypes.h $(GTM_H) $(SYSTEM_H) $(RTL_H) \
    real.h $(GGC_H) errors.h
! 	rm -f $(BUILD_PREFIX)rtl.c
! 	sed -e 's/config[.]h/bconfig.h/' $(srcdir)/rtl.c > $(BUILD_PREFIX)rtl.c
! 	$(CC_FOR_BUILD) -c $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(INCLUDES) $(BUILD_PREFIX)rtl.c $(OUTPUT_OPTION)
! 
! print-rtl1.o: $(srcdir)/print-rtl.c $(BCONFIG_H) $(SYSTEM_H) coretypes.h \
!   $(GTM_H) $(RTL_H) $(TREE_H) hard-reg-set.h $(BASIC_BLOCK_H) $(TM_P_H)
! 	rm -f print-rtl1.c
! 	sed -e 's/config[.]h/bconfig.h/' $(srcdir)/print-rtl.c > print-rtl1.c
! 	$(CC_FOR_BUILD) -c $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(INCLUDES) print-rtl1.c $(OUTPUT_OPTION)
! 
! $(BUILD_PREFIX_1)bitmap.o: $(srcdir)/bitmap.c $(BCONFIG_H) coretypes.h $(GTM_H) $(SYSTEM_H) \
!   $(RTL_H) flags.h $(BASIC_BLOCK_H) $(REGS_H) $(GGC_H)
! 	rm -f $(BUILD_PREFIX)bitmap.c
! 	sed -e 's/config[.]h/bconfig.h/' $(srcdir)/bitmap.c > $(BUILD_PREFIX)bitmap.c
! 	$(CC_FOR_BUILD) -c $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(INCLUDES) $(BUILD_PREFIX)bitmap.c $(OUTPUT_OPTION)
! 
! $(BUILD_PREFIX_1)errors.o: errors.c $(BCONFIG_H) $(SYSTEM_H) errors.h
! 	rm -f $(BUILD_PREFIX)errors.c
! 	sed -e 's/config[.]h/bconfig.h/' $(srcdir)/errors.c > $(BUILD_PREFIX)errors.c
! 	$(CC_FOR_BUILD) -c $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(INCLUDES) $(BUILD_PREFIX)errors.c $(OUTPUT_OPTION)
! 
! $(BUILD_PREFIX_1)varray.o: varray.c $(BCONFIG_H) coretypes.h $(GTM_H) $(SYSTEM_H) varray.h \
!   $(RTL_H) $(GGC_H) $(TREE_H) bitmap.h errors.h
! 	rm -f $(BUILD_PREFIX)varray.c
! 	sed -e 's/config[.]h/bconfig.h/' $(srcdir)/varray.c > \
! 		$(BUILD_PREFIX)varray.c
! 	$(CC_FOR_BUILD) -c $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(INCLUDES) \
! 		$(BUILD_PREFIX)varray.c $(OUTPUT_OPTION)
! 
! $(BUILD_PREFIX_1)ggc-none.o: ggc-none.c $(BCONFIG_H) coretypes.h $(GTM_H) $(SYSTEM_H) $(GGC_H)
! 	rm -f $(BUILD_PREFIX)ggc-none.c
! 	sed -e 's/config[.]h/bconfig.h/' $(srcdir)/ggc-none.c > $(BUILD_PREFIX)ggc-none.c
! 	$(CC_FOR_BUILD) -c $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(INCLUDES) $(BUILD_PREFIX)ggc-none.c $(OUTPUT_OPTION)
! 
! min-insn-modes.o: min-insn-modes.c $(BCONFIG_H) $(SYSTEM_H) $(MACHMODE_H)
! 	$(CC_FOR_BUILD) -c $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(INCLUDES) \
! 	    min-insn-modes.c $(OUTPUT_OPTION)
  
  #
  # Remake internationalization support.
--- 2643,2666 ----
  gengtype-yacc.c gengtype-yacc.h: gengtype-yacc.y
  	-$(BISON) $(BISONFLAGS) -d -o gengtype-yacc.c $<
  
! build/genconditions$(build_exeext) : build/genconditions.o \
!   $(BUILD_EARLY_SUPPORT) $(BUILD_RTL) $(BUILD_ERRORS) $(BUILD_LIBDEPS)
  	$(CC_FOR_BUILD) $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -o $@ \
! 	 build/genconditions.o $(BUILD_EARLY_SUPPORT) $(BUILD_RTL) \
! 	 $(BUILD_ERRORS) $(BUILD_LIBS)
  
! build/genconditions.o : genconditions.c $(RTL_BASE_H) $(BCONFIG_H) \
!   $(SYSTEM_H) coretypes.h $(GTM_H) errors.h
  
! build/errors.o : errors.c $(BCONFIG_H) $(SYSTEM_H) errors.h
! build/ggc-none.o : ggc-none.c $(BCONFIG_H) $(SYSTEM_H) coretypes.h $(GGC_H)
! build/min-insn-modes.o : min-insn-modes.c $(BCONFIG_H) system.h $(MACHMODE_H)
! build/rtl.o: rtl.c $(BCONFIG_H) coretypes.h $(GTM_H) $(SYSTEM_H) $(RTL_H) \
    real.h $(GGC_H) errors.h
! build/print-rtl.o: print-rtl.c $(BCONFIG_H) $(SYSTEM_H) coretypes.h $(GTM_H) \
!   $(RTL_BASE_H)
! build/varray.o: varray.c $(BCONFIG_H) coretypes.h $(GTM_H) $(SYSTEM_H) \
!   varray.h $(RTL_BASE_H) $(GGC_H) $(TREE_H) bitmap.h errors.h
  
  #
  # Remake internationalization support.
*************** PREPROCESSOR_DEFINES = \
*** 2343,2390 ****
    -DTOOL_INCLUDE_DIR=\"$(gcc_tooldir)/include\" \
    @TARGET_SYSTEM_ROOT_DEFINE@
  
- LIBCPP_OBJS =	cpplib.o cpplex.o cppmacro.o cppexp.o cppfiles.o cpptrad.o \
- 		cpphash.o cpperror.o cppinit.o cppcharset.o \
- 		hashtable.o line-map.o mkdeps.o cpppch.o
- 
- LIBCPP_DEPS =	$(CPPLIB_H) cpphash.h line-map.h hashtable.h intl.h \
- 		$(OBSTACK_H) $(CONFIG_H) $(SYSTEM_H)
- 
- # Most of the other archives built/used by this makefile are for
- # targets.  This one is strictly for the host.
- libcpp.a: $(LIBCPP_OBJS)
- 	-rm -rf libcpp.a
- 	$(AR) $(AR_FLAGS) libcpp.a $(LIBCPP_OBJS)
- 	-$(RANLIB) libcpp.a
- 
- cppcharset.o: cppcharset.c $(LIBCPP_DEPS) cppucnid.h
- cpperror.o: cpperror.c $(LIBCPP_DEPS)
- cppexp.o:   cppexp.c   $(LIBCPP_DEPS)
- cpplex.o:   cpplex.c   $(LIBCPP_DEPS)
- cppmacro.o: cppmacro.c $(LIBCPP_DEPS)
- cpplib.o:   cpplib.c   $(LIBCPP_DEPS)
- cpphash.o:  cpphash.c  $(LIBCPP_DEPS)
- cpptrad.o:  cpptrad.c  $(LIBCPP_DEPS)
- cppfiles.o: cppfiles.c $(LIBCPP_DEPS) $(HASHTAB_H) mkdeps.h
- cppinit.o:  cppinit.c  $(LIBCPP_DEPS) mkdeps.h
- cpppch.o:   cpppch.c   $(LIBCPP_DEPS) mkdeps.h
- 
  cppdefault.o: cppdefault.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
  	cppdefault.h Makefile
  	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
  	  $(PREPROCESSOR_DEFINES) \
  	  -c $(srcdir)/cppdefault.c $(OUTPUT_OPTION)
  
- mkdeps.o: mkdeps.c $(CONFIG_H) $(SYSTEM_H) mkdeps.h
- hashtable.o: hashtable.c hashtable.h $(CONFIG_H) $(SYSTEM_H) $(OBSTACK_H)
- line-map.o: line-map.c line-map.h intl.h $(CONFIG_H) $(SYSTEM_H)
- 
  # Note for the stamp targets, we run the program `true' instead of
  # having an empty command (nothing following the semicolon).
  
  proto: config.status protoize$(exeext) unprotoize$(exeext) SYSCALLS.c.X
  
! PROTO_OBJS = intl.o version.o cppdefault.o
  
  protoize$(exeext): protoize.o $(PROTO_OBJS) $(LIBDEPS)
  	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ protoize.o $(PROTO_OBJS) $(LIBS)
--- 2682,2699 ----
    -DTOOL_INCLUDE_DIR=\"$(gcc_tooldir)/include\" \
    @TARGET_SYSTEM_ROOT_DEFINE@
  
  cppdefault.o: cppdefault.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
  	cppdefault.h Makefile
  	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
  	  $(PREPROCESSOR_DEFINES) \
  	  -c $(srcdir)/cppdefault.c $(OUTPUT_OPTION)
  
  # Note for the stamp targets, we run the program `true' instead of
  # having an empty command (nothing following the semicolon).
  
  proto: config.status protoize$(exeext) unprotoize$(exeext) SYSCALLS.c.X
  
! PROTO_OBJS = intl.o version.o cppdefault.o errors.o
  
  protoize$(exeext): protoize.o $(PROTO_OBJS) $(LIBDEPS)
  	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ protoize.o $(PROTO_OBJS) $(LIBS)
*************** test-protoize-simple: ./protoize ./unpro
*** 2449,2473 ****
  	-rm -f tmp-proto.[cs] tmp-proto$(objext)
  
  # gcov-iov.c is run on the build machine to generate gcov-iov.h from version.c
! gcov-iov.o: gcov-iov.c version.c $(BCONFIG_H) coretypes.h $(GTM_H) $(SYSTEM_H) coretypes.h $(TM_H)
! 	$(CC_FOR_BUILD) -c $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(INCLUDES) $(srcdir)/gcov-iov.c $(OUTPUT_OPTION)
! gcov-iov$(build_exeext): gcov-iov.o
! 	$(CC_FOR_BUILD) $(BUILD_CFLAGS) $(BUILD_LDFLAGS) gcov-iov.o -o $@
  gcov-iov.h: s-iov
! s-iov: gcov-iov$(build_exeext) $(srcdir)/move-if-change
! 	./gcov-iov$(build_exeext) > tmp-gcov-iov.h
! 	$(SHELL) $(srcdir)/move-if-change tmp-gcov-iov.h gcov-iov.h
  	$(STAMP) s-iov
  
  gcov.o: gcov.c gcov-io.h gcov-io.c gcov-iov.h intl.h $(SYSTEM_H) coretypes.h $(TM_H) $(CONFIG_H)
  gcov-dump.o: gcov-dump.c gcov-io.h gcov-io.c gcov-iov.h $(SYSTEM_H) coretypes.h $(TM_H) $(CONFIG_H)
  
! # Only one of 'gcov' or 'gcov.exe' is actually built, depending
! # upon whether $(exeext) is empty or not.
! GCOV_OBJS = gcov.o intl.o version.o
  gcov$(exeext): $(GCOV_OBJS) $(LIBDEPS)
  	$(CC) $(ALL_CFLAGS) $(LDFLAGS) $(GCOV_OBJS) $(LIBS) -o $@
! GCOV_DUMP_OBJS = gcov-dump.o version.o
  gcov-dump$(exeext): $(GCOV_DUMP_OBJS) $(LIBDEPS)
  	$(CC) $(ALL_CFLAGS) $(LDFLAGS) $(GCOV_DUMP_OBJS) $(LIBS) -o $@
  #
--- 2758,2782 ----
  	-rm -f tmp-proto.[cs] tmp-proto$(objext)
  
  # gcov-iov.c is run on the build machine to generate gcov-iov.h from version.c
! build/gcov-iov.o: gcov-iov.c version.c $(BCONFIG_H) coretypes.h $(GTM_H) \
!   $(SYSTEM_H) coretypes.h $(TM_H)
!  
! build/gcov-iov$(build_exeext): build/gcov-iov.o
! 	$(CC_FOR_BUILD) $(BUILD_CFLAGS) $(BUILD_LDFLAGS) build/gcov-iov.o -o $@
! 
  gcov-iov.h: s-iov
! s-iov: build/gcov-iov$(build_exeext)
! 	build/gcov-iov$(build_exeext) > tmp-gcov-iov.h
! 	$(SHELL) $(srcdir)/../move-if-change tmp-gcov-iov.h gcov-iov.h
  	$(STAMP) s-iov
  
  gcov.o: gcov.c gcov-io.h gcov-io.c gcov-iov.h intl.h $(SYSTEM_H) coretypes.h $(TM_H) $(CONFIG_H)
  gcov-dump.o: gcov-dump.c gcov-io.h gcov-io.c gcov-iov.h $(SYSTEM_H) coretypes.h $(TM_H) $(CONFIG_H)
  
! GCOV_OBJS = gcov.o intl.o version.o errors.o
  gcov$(exeext): $(GCOV_OBJS) $(LIBDEPS)
  	$(CC) $(ALL_CFLAGS) $(LDFLAGS) $(GCOV_OBJS) $(LIBS) -o $@
! GCOV_DUMP_OBJS = gcov-dump.o version.o errors.o
  gcov-dump$(exeext): $(GCOV_DUMP_OBJS) $(LIBDEPS)
  	$(CC) $(ALL_CFLAGS) $(LDFLAGS) $(GCOV_DUMP_OBJS) $(LIBS) -o $@
  #
*************** stmp-int-hdrs: $(STMP_FIXINC) $(USER_H) 
*** 2497,2538 ****
  	chmod a+r include/limits.h
  # Install the README
  	rm -f include/README
! 	cp $(srcdir)/README-fixinc include/README
  	chmod a+r include/README
  	$(STAMP) $@
  
- # fixinc.sh depends on this, not on specs directly.
- # The idea is to make sure specs gets built, but not rerun fixinc.sh
- # after each stage just because specs' mtime has changed.
- specs.ready: specs
- 	-if [ -f specs.ready ] ; then \
- 		true; \
- 	else \
- 		$(STAMP) specs.ready; \
- 	fi
- 
- # Until someone fixes this recursive make nightmare (please note where
- # BUILD_CFLAGS and WARN_CFLAGS are first expanded below versus which
- # later make invocation has the fine-grain -warn markings for fixinc):
- fixinc.sh-warn = -Wno-error
- 
- FIXINCSRCDIR=$(srcdir)/fixinc
- fixinc.sh: $(FIXINCSRCDIR)/mkfixinc.sh $(FIXINCSRCDIR)/fixincl.c \
- 	$(FIXINCSRCDIR)/procopen.c $(FIXINCSRCDIR)/server.c \
- 	$(FIXINCSRCDIR)/server.h $(FIXINCSRCDIR)/inclhack.def specs.ready
- 	(MAKE="$(MAKE)"; srcdir=`cd $(srcdir)/fixinc && ${PWD_COMMAND}` ; \
- 	CC="$(CC_FOR_BUILD)"; CFLAGS="$(BUILD_CFLAGS)"; LDFLAGS="$(BUILD_LDFLAGS)"; \
- 	WARN_CFLAGS="$(WARN_CFLAGS)"; LIBERTY=`${PWD_COMMAND}`/"$(BUILD_LIBIBERTY)"; \
- 	export MAKE srcdir CC CFLAGS LDFLAGS WARN_CFLAGS LIBERTY; \
- 	cd ./fixinc && \
- 	$(SHELL) $${srcdir}/mkfixinc.sh $(build) $(target))
- 
  .PHONY: install-gcc-tooldir
  install-gcc-tooldir:
! 	$(SHELL) ${srcdir}/mkinstalldirs $(DESTDIR)$(gcc_tooldir)
  
  # Build fixed copies of system files.
! stmp-fixinc: fixinc.sh gsyslimits.h
  	@if test ! -d ${SYSTEM_HEADER_DIR}; then \
  	  echo The directory that should contain system headers does not exist: >&2 ; \
  	  echo "  ${SYSTEM_HEADER_DIR}" >&2 ; \
--- 2806,2846 ----
  	chmod a+r include/limits.h
  # Install the README
  	rm -f include/README
! 	cp $(srcdir)/../fixincludes/README-fixinc include/README
  	chmod a+r include/README
  	$(STAMP) $@
  
  .PHONY: install-gcc-tooldir
  install-gcc-tooldir:
! 	$(mkinstalldirs) $(DESTDIR)$(gcc_tooldir)
! 
! macro_list: s-macro_list; @true
! s-macro_list : $(GCC_PASSES) 
! 	echo | $(GCC_FOR_TARGET) -E -dM - | \
! 	  sed -n 's/^#define \([^_][a-zA-Z0-9_]*\).*/\1/p ; \
! 		s/^#define \(_[^_A-Z][a-zA-Z0-9_]*\).*/\1/p' | \
! 	  sort -u > tmp-macro_list
! 	$(SHELL) $(srcdir)/../move-if-change tmp-macro_list macro_list
! 	$(STAMP) s-macro_list
! 
! # The line below is supposed to avoid accidentally matching the
! # built-in suffix rule `.o:' to build fixincl out of fixincl.o.  You'd
! # expect fixincl to be newer than fixincl.o, such that this situation
! # would never come up.  As it turns out, if you use ccache with
! # CCACHE_HARDLINK enabled, the compiler doesn't embed the current
! # working directory in object files (-g absent, or -fno-working-dir
! # present), and build and host are the same, fixincl for the host will
! # build after fixincl for the build machine, getting a cache hit,
! # thereby updating the timestamp of fixincl.o in the the host tree.
! # Because of CCACHE_HARDLINK, this will also update the timestamp in
! # the build tree, and so fixincl in the build tree will appear to be
! # out of date.  Yuck.
! ../$(build_subdir)/fixincludes/fixincl: ; @ :
  
  # Build fixed copies of system files.
! stmp-fixinc: gsyslimits.h macro_list \
!   ../$(build_subdir)/fixincludes/fixincl \
!   ../$(build_subdir)/fixincludes/fixinc.sh
  	@if test ! -d ${SYSTEM_HEADER_DIR}; then \
  	  echo The directory that should contain system headers does not exist: >&2 ; \
  	  echo "  ${SYSTEM_HEADER_DIR}" >&2 ; \
*************** stmp-fixinc: fixinc.sh gsyslimits.h
*** 2542,2557 ****
  	rm -rf include; mkdir include
  	-chmod a+rx include
  	(TARGET_MACHINE='$(target)'; srcdir=`cd $(srcdir); ${PWD_COMMAND}`; \
! 	SHELL='$(SHELL)' ;\
! 	export TARGET_MACHINE srcdir SHELL ; \
! 	$(SHELL) ./fixinc.sh `${PWD_COMMAND}`/include $(SYSTEM_HEADER_DIR) $(OTHER_FIXINCLUDES_DIRS); \
! 	rm -f include/syslimits.h; \
  	if [ -f include/limits.h ]; then \
  	  mv include/limits.h include/syslimits.h; \
  	else \
  	  cp $(srcdir)/gsyslimits.h include/syslimits.h; \
! 	fi; \
! 	chmod a+r include/syslimits.h)
  	$(STAMP) stmp-fixinc
  
  # Files related to the fixproto script.
--- 2850,2867 ----
  	rm -rf include; mkdir include
  	-chmod a+rx include
  	(TARGET_MACHINE='$(target)'; srcdir=`cd $(srcdir); ${PWD_COMMAND}`; \
! 	  SHELL='$(SHELL)'; MACRO_LIST=`${PWD_COMMAND}`/macro_list ; \
! 	  export TARGET_MACHINE srcdir SHELL MACRO_LIST && \
! 	  cd ../$(build_subdir)/fixincludes && \
! 	  $(SHELL) ./fixinc.sh ../../gcc/include \
! 	    $(SYSTEM_HEADER_DIR) $(OTHER_FIXINCLUDES_DIRS) )
! 	rm -f include/syslimits.h
  	if [ -f include/limits.h ]; then \
  	  mv include/limits.h include/syslimits.h; \
  	else \
  	  cp $(srcdir)/gsyslimits.h include/syslimits.h; \
! 	fi
! 	chmod a+r include/syslimits.h
  	$(STAMP) stmp-fixinc
  
  # Files related to the fixproto script.
*************** deduced.h: $(GCC_PASSES) $(srcdir)/scan-
*** 2570,2618 ****
  	  $(STAMP) deduced.h; \
  	fi
  
! GEN_PROTOS_OBJS = gen-protos.o scan.o
! gen-protos$(build_exeext): $(GEN_PROTOS_OBJS)
  	${CC_FOR_BUILD} $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -o $@ \
  	  $(GEN_PROTOS_OBJS) $(BUILD_LIBS)
  
! gen-protos.o: gen-protos.c scan.h $(BCONFIG_H) $(SYSTEM_H) coretypes.h $(GTM_H)
  
! scan.o: scan.c scan.h $(BCONFIG_H) $(SYSTEM_H) coretypes.h $(GTM_H)
  
! xsys-protos.h: $(GCC_PASSES) $(srcdir)/sys-protos.h deduced.h gen-protos$(build_exeext) Makefile
  	sed -e s/TARGET_GETGROUPS_T/$(TARGET_GETGROUPS_T)/ \
  	  deduced.h $(srcdir)/sys-protos.h > tmp-fixtmp.c
  	mv tmp-fixtmp.c fixtmp.c
  	$(GCC_FOR_TARGET) fixtmp.c -w -U__SIZE_TYPE__ -U__PTRDIFF_TYPE__ -U__WCHAR_TYPE__ -E \
  	  | sed -e 's/	/ /g' -e 's/ *(/ (/g' -e 's/ [ ]*/ /g' -e 's/( )/()/' \
! 	  | $(RUN_GEN) ./gen-protos >xsys-protos.hT
  	mv xsys-protos.hT xsys-protos.h
  	rm -rf fixtmp.c
  
  # This is nominally a 'build' program, but it's run only when host==build,
  # so we can (indeed, must) use $(LIBDEPS) and $(LIBS).
! fix-header$(build_exeext): fix-header.o scan-decls.o scan.o xsys-protos.h \
!            c-incpath.o cppdefault.o prefix.o $(LIBDEPS) libcpp.a
! 	$(CC_FOR_BUILD) $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -o $@ fix-header.o \
! 	c-incpath.o cppdefault.o scan-decls.o prefix.o scan.o libcpp.a $(LIBS)
  
! fix-header.o: fix-header.c $(OBSTACK_H) scan.h \
  	xsys-protos.h $(BCONFIG_H) $(SYSTEM_H) coretypes.h $(GTM_H) $(CPPLIB_H)
  
! scan-decls.o: scan-decls.c scan.h $(CPPLIB_H) $(BCONFIG_H) $(SYSTEM_H) coretypes.h $(GTM_H)
  
  # stmp-fixproto depends on this, not on fix-header directly.
  # The idea is to make sure fix-header gets built,
  # but not rerun fixproto after each stage
  # just because fix-header's mtime has changed.
! fixhdr.ready: fix-header$(build_exeext)
  	-if [ -f fixhdr.ready ] ; then \
  		true; \
  	else \
  		$(STAMP) fixhdr.ready; \
  	fi
  
! # stmp-int-headers is to make sure fixincludes has already finished.
  # The if statement is so that we don't run fixproto a second time
  # if it has already been run on the files in `include'.
  stmp-fixproto: fixhdr.ready fixproto stmp-int-hdrs
--- 2880,2932 ----
  	  $(STAMP) deduced.h; \
  	fi
  
! GEN_PROTOS_OBJS = build/gen-protos.o build/scan.o $(BUILD_ERRORS)
! build/gen-protos$(build_exeext): $(GEN_PROTOS_OBJS)
  	${CC_FOR_BUILD} $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -o $@ \
  	  $(GEN_PROTOS_OBJS) $(BUILD_LIBS)
  
! build/gen-protos.o: gen-protos.c scan.h $(BCONFIG_H) $(SYSTEM_H) coretypes.h \
!   $(GTM_H) errors.h
  
! build/scan.o: scan.c scan.h $(BCONFIG_H) $(SYSTEM_H) coretypes.h $(GTM_H)
  
! xsys-protos.h: $(GCC_PASSES) $(srcdir)/sys-protos.h deduced.h \
!   build/gen-protos$(build_exeext) Makefile
  	sed -e s/TARGET_GETGROUPS_T/$(TARGET_GETGROUPS_T)/ \
  	  deduced.h $(srcdir)/sys-protos.h > tmp-fixtmp.c
  	mv tmp-fixtmp.c fixtmp.c
  	$(GCC_FOR_TARGET) fixtmp.c -w -U__SIZE_TYPE__ -U__PTRDIFF_TYPE__ -U__WCHAR_TYPE__ -E \
  	  | sed -e 's/	/ /g' -e 's/ *(/ (/g' -e 's/ [ ]*/ /g' -e 's/( )/()/' \
! 	  | $(RUN_GEN) build/gen-protos >xsys-protos.hT
  	mv xsys-protos.hT xsys-protos.h
  	rm -rf fixtmp.c
  
  # This is nominally a 'build' program, but it's run only when host==build,
  # so we can (indeed, must) use $(LIBDEPS) and $(LIBS).
! build/fix-header$(build_exeext): build/fix-header.o build/scan-decls.o \
!   build/scan.o xsys-protos.h c-incpath.o cppdefault.o prefix.o \
!   $(BUILD_ERRORS) $(LIBDEPS)
! 	$(CC_FOR_BUILD) $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -o $@ \
! 	 build/fix-header.o c-incpath.o cppdefault.o build/scan-decls.o prefix.o \
! 	 build/scan.o $(BUILD_ERRORS) $(LIBS)
  
! build/fix-header.o: fix-header.c $(OBSTACK_H) scan.h errors.h \
  	xsys-protos.h $(BCONFIG_H) $(SYSTEM_H) coretypes.h $(GTM_H) $(CPPLIB_H)
  
! build/scan-decls.o: scan-decls.c scan.h $(CPPLIB_H) $(BCONFIG_H) $(SYSTEM_H) coretypes.h $(GTM_H)
  
  # stmp-fixproto depends on this, not on fix-header directly.
  # The idea is to make sure fix-header gets built,
  # but not rerun fixproto after each stage
  # just because fix-header's mtime has changed.
! fixhdr.ready: build/fix-header$(build_exeext)
  	-if [ -f fixhdr.ready ] ; then \
  		true; \
  	else \
  		$(STAMP) fixhdr.ready; \
  	fi
  
! # stmp-int-hdrs is to make sure fixincludes has already finished.
  # The if statement is so that we don't run fixproto a second time
  # if it has already been run on the files in `include'.
  stmp-fixproto: fixhdr.ready fixproto stmp-int-hdrs
*************** stmp-fixproto: fixhdr.ready fixproto stm
*** 2620,2626 ****
  	else \
  	  : This line works around a 'make' bug in BSDI 1.1.; \
  	  FIXPROTO_DEFINES="$(FIXPROTO_DEFINES)"; export FIXPROTO_DEFINES; \
! 	  mkinstalldirs="$(SHELL) $(srcdir)/mkinstalldirs"; \
  	    export mkinstalldirs; \
  	  if [ -d "$(SYSTEM_HEADER_DIR)" ]; then \
  	    $(SHELL) ${srcdir}/fixproto include include $(SYSTEM_HEADER_DIR); \
--- 2934,2941 ----
  	else \
  	  : This line works around a 'make' bug in BSDI 1.1.; \
  	  FIXPROTO_DEFINES="$(FIXPROTO_DEFINES)"; export FIXPROTO_DEFINES; \
! 	  FIX_HEADER="build/fix-header$(build_exeext)"; export FIX_HEADER; \
! 	  mkinstalldirs="$(mkinstalldirs)"; \
  	    export mkinstalldirs; \
  	  if [ -d "$(SYSTEM_HEADER_DIR)" ]; then \
  	    $(SHELL) ${srcdir}/fixproto include include $(SYSTEM_HEADER_DIR); \
*************** stmp-fixproto: fixhdr.ready fixproto stm
*** 2629,2634 ****
--- 2944,2955 ----
  	  $(STAMP) include/fixed; \
  	fi
  	$(STAMP) stmp-fixproto
+ 
+ # We can't run fixproto (it's being built for a different host), but we still
+ # need to install it so that the user can run it when the compiler is
+ # installed.
+ stmp-install-fixproto: fixproto
+ 	$(STAMP) $@
  #
  # Remake the info files.
  
*************** TEXI_CPP_FILES = cpp.texi fdl.texi cppen
*** 2647,2667 ****
  TEXI_GCC_FILES = gcc.texi gcc-common.texi frontends.texi standards.texi \
  	 invoke.texi extend.texi md.texi objc.texi gcov.texi trouble.texi \
  	 bugreport.texi service.texi contribute.texi compat.texi funding.texi \
! 	 gnu.texi gpl.texi fdl.texi contrib.texi cppenv.texi cppopts.texi
  
  TEXI_GCCINT_FILES = gccint.texi gcc-common.texi contribute.texi makefile.texi \
  	 configterms.texi portability.texi interface.texi passes.texi \
  	 c-tree.texi rtl.texi md.texi tm.texi hostconfig.texi fragments.texi \
  	 configfiles.texi collect2.texi headerdirs.texi funding.texi gnu.texi \
  	 gpl.texi fdl.texi contrib.texi languages.texi sourcebuild.texi \
! 	 gty.texi libgcc.texi
  
  TEXI_GCCINSTALL_FILES = install.texi install-old.texi fdl.texi
  
  TEXI_CPPINT_FILES = cppinternals.texi
  
! # The *.1, *.7, *.info, and *.dvi files are being generated from implicit 
! # patterns.   To use them, put each of the specific target with with their 
  # specific dependencies but no build commands.
  
  doc/cpp.info: $(TEXI_CPP_FILES)
--- 2968,2989 ----
  TEXI_GCC_FILES = gcc.texi gcc-common.texi frontends.texi standards.texi \
  	 invoke.texi extend.texi md.texi objc.texi gcov.texi trouble.texi \
  	 bugreport.texi service.texi contribute.texi compat.texi funding.texi \
! 	 gnu.texi gpl.texi fdl.texi contrib.texi cppenv.texi cppopts.texi \
! 	 implement-c.texi
  
  TEXI_GCCINT_FILES = gccint.texi gcc-common.texi contribute.texi makefile.texi \
  	 configterms.texi portability.texi interface.texi passes.texi \
  	 c-tree.texi rtl.texi md.texi tm.texi hostconfig.texi fragments.texi \
  	 configfiles.texi collect2.texi headerdirs.texi funding.texi gnu.texi \
  	 gpl.texi fdl.texi contrib.texi languages.texi sourcebuild.texi \
! 	 gty.texi libgcc.texi cfg.texi tree-ssa.texi
  
  TEXI_GCCINSTALL_FILES = install.texi install-old.texi fdl.texi
  
  TEXI_CPPINT_FILES = cppinternals.texi
  
! # The *.1, *.7, *.info, and *.dvi files are being generated from implicit
! # patterns.  To use them, put each of the specific targets with its
  # specific dependencies but no build commands.
  
  doc/cpp.info: $(TEXI_CPP_FILES)
*************** doc/gcc.dvi: $(TEXI_GCC_FILES)
*** 2687,2692 ****
--- 3009,3019 ----
  doc/gccint.dvi: $(TEXI_GCCINT_FILES)
  doc/cppinternals.dvi: $(TEXI_CPPINT_FILES)
  
+ $(htmldir)/cpp/index.html: $(TEXI_CPP_FILES)
+ $(htmldir)/gcc/index.html: $(TEXI_GCC_FILES)
+ $(htmldir)/gccint/index.html: $(TEXI_GCCINT_FILES)
+ $(htmldir)/cppinternals/index.html: $(TEXI_CPPINT_FILES)
+ 
  dvi:: doc/gcc.dvi doc/gccint.dvi doc/gccinstall.dvi doc/cpp.dvi \
        doc/cppinternals.dvi
  
*************** doc/%.dvi: %.texi
*** 2697,2705 ****
  doc/gccinstall.dvi: $(TEXI_GCCINSTALL_FILES)
  	$(TEXI2DVI) -I $(abs_docdir) -I $(abs_docdir)/include -o $@ $<
  
  MANFILES = doc/gcov.1 doc/cpp.1 doc/gcc.1 doc/gfdl.7 doc/gpl.7 doc/fsf-funding.7
  
! generated-manpages: man 
  
  man: $(MANFILES) lang.man @GENINSRC@ srcman lang.srcman
  
--- 3024,3047 ----
  doc/gccinstall.dvi: $(TEXI_GCCINSTALL_FILES)
  	$(TEXI2DVI) -I $(abs_docdir) -I $(abs_docdir)/include -o $@ $<
  
+ html:: $(htmldir)/cpp/index.html $(htmldir)/gcc/index.html \
+        $(htmldir)/gccinstall/index.html $(htmldir)/gccint/index.html \
+        $(htmldir)/cppinternals/index.html
+ 
+ $(htmldir)/%/index.html: %.texi
+ 	$(mkinstalldirs) $(@D)
+ 	rm -f $(@D)/*
+ 	$(TEXI2HTML) -I $(abs_docdir) -I $(abs_docdir)/include -o $(@D) $<
+ 
+ # Duplicate entry to handle renaming of gccinstall
+ $(htmldir)/gccinstall/index.html: $(TEXI_GCCINSTALL_FILES)
+ 	$(mkinstalldirs) $(@D)
+ 	echo rm -f $(@D)/*
+ 	$(TEXI2HTML) -I $(abs_docdir) -I $(abs_docdir)/include -o $(@D) $<
+ 
  MANFILES = doc/gcov.1 doc/cpp.1 doc/gcc.1 doc/gfdl.7 doc/gpl.7 doc/fsf-funding.7
  
! generated-manpages: man
  
  man: $(MANFILES) lang.man @GENINSRC@ srcman lang.srcman
  
*************** doc/%.7: %.pod
*** 2726,2732 ****
  cpp.pod: cpp.texi cppenv.texi cppopts.texi
  
  # These next rules exist because the output name is not the same as
! # the input name, so our implict %.pod rule will not work.
  
  gcc.pod: invoke.texi cppenv.texi cppopts.texi
  	$(STAMP) $@
--- 3068,3074 ----
  cpp.pod: cpp.texi cppenv.texi cppopts.texi
  
  # These next rules exist because the output name is not the same as
! # the input name, so our implicit %.pod rule will not work.
  
  gcc.pod: invoke.texi cppenv.texi cppopts.texi
  	$(STAMP) $@
*************** fsf-funding.pod: funding.texi
*** 2753,2765 ****
  # (less duplicated code).
  
  mostlyclean: lang.mostlyclean
! 	-rm -f $(STAGESTUFF)
  	-rm -f *$(coverageexts)
  	-rm -rf libgcc
! # Delete the temporary source copies for cross compilation.
! 	-rm -f $(BUILD_PREFIX_1)rtl.c $(BUILD_PREFIX_1)print-rtl.c
! 	-rm -f $(BUILD_PREFIX_1)bitmap.c $(BUILD_PREFIX_1)errors.c
! 	-rm -f $(BUILD_PREFIX_1)ggc-none.c print-rtl1.c
  # Delete the temp files made in the course of building libgcc.a.
  	-rm -f xlimits.h
  # Delete other built files.
--- 3095,3106 ----
  # (less duplicated code).
  
  mostlyclean: lang.mostlyclean
! 	-rm -f $(STAGECOPYSTUFF) $(STAGEMOVESTUFF)
  	-rm -f *$(coverageexts)
  	-rm -rf libgcc
! # Delete build programs
! 	-rm -f build/*
! 	-rm -f mddeps.mk
  # Delete the temp files made in the course of building libgcc.a.
  	-rm -f xlimits.h
  # Delete other built files.
*************** mostlyclean: lang.mostlyclean
*** 2774,2784 ****
  	-rm -f specs $(SPECS) SYSCALLS.c.X SYSCALLS.c
  	-rm -f collect collect2 mips-tfile mips-tdump
  # Delete files generated for fixproto
! 	-rm -rf fix-header$(build_exeext) xsys-protos.h deduced.h tmp-deduced.h \
  	  gen-protos$(build_exeext) fixproto.list fixtmp.* fixhdr.ready
- # Delete files generated for fixincl
- 	-rm -rf fixincl fixinc.sh specs.ready
- 	(cd fixinc && $(MAKE) clean)
  # Delete unwanted output files from TeX.
  	-rm -f *.toc *.log *.vr *.fn *.cp *.tp *.ky *.pg
  	-rm -f */*.toc */*.log */*.vr */*.fn */*.cp */*.tp */*.ky */*.pg
--- 3115,3122 ----
  	-rm -f specs $(SPECS) SYSCALLS.c.X SYSCALLS.c
  	-rm -f collect collect2 mips-tfile mips-tdump
  # Delete files generated for fixproto
! 	-rm -rf $(build_exeext) xsys-protos.h deduced.h tmp-deduced.h \
  	  gen-protos$(build_exeext) fixproto.list fixtmp.* fixhdr.ready
  # Delete unwanted output files from TeX.
  	-rm -f *.toc *.log *.vr *.fn *.cp *.tp *.ky *.pg
  	-rm -f */*.toc */*.log */*.vr */*.fn */*.cp */*.tp */*.ky */*.pg
*************** clean: mostlyclean lang.clean
*** 2799,2804 ****
--- 3137,3143 ----
  	-rm -f libgcc_s*
  	-rm -f libunwind*
  	-rm -f config.h tconfig.h bconfig.h tm_p.h tm.h
+ 	-rm -f options.c options.h optionlist
  	-rm -f cs-*
  	-rm -rf libgcc
  	-rm -f doc/*.dvi
*************** distclean: clean lang.distclean
*** 2835,2846 ****
  	-cd testsuite && rm -f *.out *.gcov *$(coverageexts)
  	-rm -rf ${QMTEST_DIR} stamp-qmtest
  	-rm -f cxxmain.c
! 	-rm -f mklibgcc mkheaders gccbug .gdbinit configargs.h
  	-rm -f gcov.pod
- 	-rm -f fixinc/Makefile
  # Delete po/*.gmo only if we are not building in the source directory.
  	-if [ ! -f po/exgettext ]; then rm -f po/*.gmo; fi
! 	-rmdir ada cp f java objc fixinc intl po testsuite 2>/dev/null
  
  # Get rid of every file that's generated from some other file, except for `configure'.
  # Most of these files ARE PRESENT in the GCC distribution.
--- 3174,3184 ----
  	-cd testsuite && rm -f *.out *.gcov *$(coverageexts)
  	-rm -rf ${QMTEST_DIR} stamp-qmtest
  	-rm -f cxxmain.c
! 	-rm -f mklibgcc gccbug .gdbinit configargs.h
  	-rm -f gcov.pod
  # Delete po/*.gmo only if we are not building in the source directory.
  	-if [ ! -f po/exgettext ]; then rm -f po/*.gmo; fi
! 	-rmdir ada cp f java objc intl po testsuite 2>/dev/null
  
  # Get rid of every file that's generated from some other file, except for `configure'.
  # Most of these files ARE PRESENT in the GCC distribution.
*************** install-cpp: cpp$(exeext)
*** 2875,2888 ****
  # Create the installation directories.
  # $(libdir)/gcc/include isn't currently searched by cpp.
  installdirs:
! 	$(SHELL) ${srcdir}/mkinstalldirs $(DESTDIR)$(libsubdir)
! 	$(SHELL) ${srcdir}/mkinstalldirs $(DESTDIR)$(libexecsubdir)
! 	$(SHELL) ${srcdir}/mkinstalldirs $(DESTDIR)$(bindir)
! 	$(SHELL) ${srcdir}/mkinstalldirs $(DESTDIR)$(includedir)
! 	$(SHELL) ${srcdir}/mkinstalldirs $(DESTDIR)$(infodir)
! 	$(SHELL) ${srcdir}/mkinstalldirs $(DESTDIR)$(slibdir)
! 	$(SHELL) ${srcdir}/mkinstalldirs $(DESTDIR)$(man1dir)
! 	$(SHELL) ${srcdir}/mkinstalldirs $(DESTDIR)$(man7dir)
  
  # Install the compiler executables built during cross compilation.
  install-common: native $(EXTRA_PARTS) lang.install-common installdirs
--- 3213,3226 ----
  # Create the installation directories.
  # $(libdir)/gcc/include isn't currently searched by cpp.
  installdirs:
! 	$(mkinstalldirs) $(DESTDIR)$(libsubdir)
! 	$(mkinstalldirs) $(DESTDIR)$(libexecsubdir)
! 	$(mkinstalldirs) $(DESTDIR)$(bindir)
! 	$(mkinstalldirs) $(DESTDIR)$(includedir)
! 	$(mkinstalldirs) $(DESTDIR)$(infodir)
! 	$(mkinstalldirs) $(DESTDIR)$(slibdir)
! 	$(mkinstalldirs) $(DESTDIR)$(man1dir)
! 	$(mkinstalldirs) $(DESTDIR)$(man7dir)
  
  # Install the compiler executables built during cross compilation.
  install-common: native $(EXTRA_PARTS) lang.install-common installdirs
*************** install-common: native $(EXTRA_PARTS) la
*** 2893,2899 ****
  	  else true; \
  	  fi; \
  	done
! 	for file in $(EXTRA_PASSES) $(EXTRA_PROGRAMS) $(USE_COLLECT2) ..; do \
  	  if [ x"$$file" != x.. ]; then \
  	    rm -f $(DESTDIR)$(libexecsubdir)/$$file; \
  	    $(INSTALL_PROGRAM) $$file $(DESTDIR)$(libexecsubdir)/$$file; \
--- 3231,3237 ----
  	  else true; \
  	  fi; \
  	done
! 	for file in $(EXTRA_PASSES) $(EXTRA_PROGRAMS) $(COLLECT2) ..; do \
  	  if [ x"$$file" != x.. ]; then \
  	    rm -f $(DESTDIR)$(libexecsubdir)/$$file; \
  	    $(INSTALL_PROGRAM) $$file $(DESTDIR)$(libexecsubdir)/$$file; \
*************** install-common: native $(EXTRA_PARTS) la
*** 2906,2917 ****
  	    chmod a-x $(DESTDIR)$(libsubdir)/$$file; \
  	  else true; fi; \
  	done
! # Don't mess with specs if it doesn't exist yet.
! 	-if [ -f specs ] ; then \
! 	  rm -f $(DESTDIR)$(libsubdir)/specs; \
! 	  $(INSTALL_DATA) $(SPECS) $(DESTDIR)$(libsubdir)/specs; \
! 	  chmod a-x $(DESTDIR)$(libsubdir)/specs; \
! 	fi
  # Install protoize if it was compiled.
  	-if [ -f protoize$(exeext) ]; then \
  	  rm -f $(DESTDIR)$(bindir)/$(PROTOIZE_INSTALL_NAME)$(exeext); \
--- 3244,3254 ----
  	    chmod a-x $(DESTDIR)$(libsubdir)/$$file; \
  	  else true; fi; \
  	done
! # We no longer install the specs file because its presence makes the
! # driver slower, and because people who need it can recreate it by
! # using -dumpspecs.  We remove any old version because it would
! # otherwise override the specs built into the driver.
! 	rm -f $(DESTDIR)$(libsubdir)/specs
  # Install protoize if it was compiled.
  	-if [ -f protoize$(exeext) ]; then \
  	  rm -f $(DESTDIR)$(bindir)/$(PROTOIZE_INSTALL_NAME)$(exeext); \
*************** install-common: native $(EXTRA_PARTS) la
*** 2930,2936 ****
  	fi
  	$(INSTALL_SCRIPT) gccbug $(DESTDIR)$(bindir)/$(GCCBUG_INSTALL_NAME)
  
! # Install the driver program as $(target_noncanonical)-gcc, 
  # $(target_noncanonical)-gcc-$(version)
  # and also as either gcc (if native) or $(gcc_tooldir)/bin/gcc.
  install-driver: installdirs xgcc$(exeext)
--- 3267,3273 ----
  	fi
  	$(INSTALL_SCRIPT) gccbug $(DESTDIR)$(bindir)/$(GCCBUG_INSTALL_NAME)
  
! # Install the driver program as $(target_noncanonical)-gcc,
  # $(target_noncanonical)-gcc-$(version)
  # and also as either gcc (if native) or $(gcc_tooldir)/bin/gcc.
  install-driver: installdirs xgcc$(exeext)
*************** $(DESTDIR)$(man7dir)/%$(man7ext): doc/%.
*** 2992,3008 ****
  
  $(DESTDIR)$(man1dir)/$(GCC_INSTALL_NAME)$(man1ext): doc/gcc.1
  	-rm -f $@
! 	-$(INSTALL_DATA) $< $@ 
  	-chmod a-x $@
  
  $(DESTDIR)$(man1dir)/$(CPP_INSTALL_NAME)$(man1ext): doc/cpp.1
  	-rm -f $@
! 	-$(INSTALL_DATA) $< $@ 
  	-chmod a-x $@
  
  $(DESTDIR)$(man1dir)/$(GCOV_INSTALL_NAME)$(man1ext): doc/gcov.1
  	-rm -f $@
! 	-$(INSTALL_DATA) $< $@ 
  	-chmod a-x $@
  
  # Install the library.
--- 3329,3345 ----
  
  $(DESTDIR)$(man1dir)/$(GCC_INSTALL_NAME)$(man1ext): doc/gcc.1
  	-rm -f $@
! 	-$(INSTALL_DATA) $< $@
  	-chmod a-x $@
  
  $(DESTDIR)$(man1dir)/$(CPP_INSTALL_NAME)$(man1ext): doc/cpp.1
  	-rm -f $@
! 	-$(INSTALL_DATA) $< $@
  	-chmod a-x $@
  
  $(DESTDIR)$(man1dir)/$(GCOV_INSTALL_NAME)$(man1ext): doc/gcov.1
  	-rm -f $@
! 	-$(INSTALL_DATA) $< $@
  	-chmod a-x $@
  
  # Install the library.
*************** install-libgcc: libgcc.mk libgcc.a libgc
*** 3011,3016 ****
--- 3348,3354 ----
  	  CFLAGS="$(CFLAGS) $(WARN_CFLAGS)" \
  	  CONFIG_H="$(TCONFIG_H)" \
  	  MAKEOVERRIDES= \
+ 	  mkinstalldirs='$(mkinstalldirs)' \
  	  -f libgcc.mk install
  
  # Install multiple versions of libgcc.a, libgcov.a.
*************** install-multilib: stmp-multilib installd
*** 3019,3024 ****
--- 3357,3363 ----
  	  CFLAGS="$(CFLAGS) $(WARN_CFLAGS)" \
  	  CONFIG_H="$(CONFIG_H)" \
  	  MAKEOVERRIDES= \
+ 	  mkinstalldirs='$(mkinstalldirs)' \
  	  -f libgcc.mk install
  
  # Install all the header files built in the include subdirectory.
*************** install-headers-cp: stmp-int-hdrs $(STMP
*** 3068,3102 ****
  
  itoolsdir = $(libexecsubdir)/install-tools
  itoolsdatadir = $(libsubdir)/install-tools
! # Don't install the headers.  Instead, install appropriate scripts
! # and supporting files for fixincludes to be run later.
  install-mkheaders: stmp-int-hdrs $(STMP_FIXPROTO) install-include-dir \
!     mkheaders xlimits.h
! 	-rm -rf $(DESTDIR)$(itoolsdir) $(DESTDIR)$(itoolsdatadir)
! 	$(SHELL) $(srcdir)/mkinstalldirs $(DESTDIR)$(itoolsdatadir)/include
! 	$(SHELL) $(srcdir)/mkinstalldirs $(DESTDIR)$(itoolsdir)
  	for file in $(USER_H); do \
  	  realfile=`echo $$file | sed -e 's|.*/\([^/]*\)$$|\1|'`; \
  	  $(INSTALL_DATA) $$file \
  	    $(DESTDIR)$(itoolsdatadir)/include/$$realfile ; \
  	done
  	$(INSTALL_DATA) xlimits.h $(DESTDIR)$(itoolsdatadir)/include/limits.h
! 	if [ x$(STMP_FIXINC) != x ] ; then \
! 	  $(INSTALL_DATA) $(srcdir)/README-fixinc \
! 	    $(DESTDIR)$(itoolsdatadir)/include/README ; \
! 	  $(INSTALL_SCRIPT) fixinc.sh $(DESTDIR)$(itoolsdir)/fixinc.sh ; \
! 	  $(INSTALL_PROGRAM) fixinc/fixincl $(DESTDIR)$(itoolsdir)/fixincl ; \
! 	  $(INSTALL_DATA) $(srcdir)/gsyslimits.h \
! 	    $(DESTDIR)$(itoolsdatadir)/gsyslimits.h ; \
! 	else :; fi
  	if [ x$(STMP_FIXPROTO) != x ] ; then \
! 	  $(INSTALL_SCRIPT) $(srcdir)/mkinstalldirs \
  		$(DESTDIR)$(itoolsdir)/mkinstalldirs ; \
  	  $(INSTALL_SCRIPT) $(srcdir)/fixproto $(DESTDIR)$(itoolsdir)/fixproto ; \
! 	  $(INSTALL_PROGRAM) fix-header$(build_exeext) \
  		$(DESTDIR)$(itoolsdir)/fix-header$(build_exeext) ; \
  	else :; fi
- 	$(INSTALL_SCRIPT) mkheaders $(DESTDIR)$(itoolsdir)/mkheaders
  	echo 'SYSTEM_HEADER_DIR="'"$(SYSTEM_HEADER_DIR)"'"' \
  		> $(DESTDIR)$(itoolsdatadir)/mkheaders.conf
  	echo 'OTHER_FIXINCLUDES_DIRS="$(OTHER_FIXINCLUDES_DIRS)"' \
--- 3407,3431 ----
  
  itoolsdir = $(libexecsubdir)/install-tools
  itoolsdatadir = $(libsubdir)/install-tools
! # Install supporting files for fixincludes to be run later.
  install-mkheaders: stmp-int-hdrs $(STMP_FIXPROTO) install-include-dir \
!   macro_list xlimits.h
  	for file in $(USER_H); do \
  	  realfile=`echo $$file | sed -e 's|.*/\([^/]*\)$$|\1|'`; \
  	  $(INSTALL_DATA) $$file \
  	    $(DESTDIR)$(itoolsdatadir)/include/$$realfile ; \
  	done
  	$(INSTALL_DATA) xlimits.h $(DESTDIR)$(itoolsdatadir)/include/limits.h
! 	$(INSTALL_DATA) $(srcdir)/gsyslimits.h \
! 	  $(DESTDIR)$(itoolsdatadir)/gsyslimits.h
! 	$(INSTALL_DATA) macro_list $(DESTDIR)$(itoolsdatadir)/macro_list
  	if [ x$(STMP_FIXPROTO) != x ] ; then \
! 	  $(INSTALL_SCRIPT) $(mkinstalldirs) \
  		$(DESTDIR)$(itoolsdir)/mkinstalldirs ; \
  	  $(INSTALL_SCRIPT) $(srcdir)/fixproto $(DESTDIR)$(itoolsdir)/fixproto ; \
! 	  $(INSTALL_PROGRAM) build/fix-header$(build_exeext) \
  		$(DESTDIR)$(itoolsdir)/fix-header$(build_exeext) ; \
  	else :; fi
  	echo 'SYSTEM_HEADER_DIR="'"$(SYSTEM_HEADER_DIR)"'"' \
  		> $(DESTDIR)$(itoolsdatadir)/mkheaders.conf
  	echo 'OTHER_FIXINCLUDES_DIRS="$(OTHER_FIXINCLUDES_DIRS)"' \
*************** site.exp: ./config.status Makefile
*** 3152,3160 ****
--- 3481,3492 ----
  	@echo "set build_triplet $(build)" >> ./tmp0
  	@echo "set target_triplet $(target)" >> ./tmp0
  	@echo "set target_alias $(target_noncanonical)" >> ./tmp0
+ 	@echo "set libiconv \"$(LIBICONV)\"" >> ./tmp0
  # CFLAGS is set even though it's empty to show we reserve the right to set it.
  	@echo "set CFLAGS \"\"" >> ./tmp0
  	@echo "set CXXFLAGS \"\"" >> ./tmp0
+ 	@echo "set HOSTCC \"$(CC)\"" >> ./tmp0
+ 	@echo "set HOSTCFLAGS \"$(CFLAGS)\"" >> ./tmp0
  	@echo "set TESTING_IN_BUILD_TREE 1" >> ./tmp0
  	@echo "set HAVE_LIBSTDCXX_V3 1" >> ./tmp0
  # If newlib has been configured, we need to pass -B to gcc so it can find
*************** TAGS: lang.tags
*** 3316,3326 ****
  	    incs="$$incs --include $$dir/TAGS.sub";	\
  	  fi;						\
  	done;						\
! 	mkdir tmp-tags;					\
! 	mv -f c-parse.[ch] tmp-tags;			\
! 	etags -o TAGS.sub *.y *.h *.c;			\
! 	mv tmp-tags/* .;				\
! 	rmdir tmp-tags;					\
  	etags --include TAGS.sub $$incs)
  
  # ------------------------------------------------------
--- 3648,3654 ----
  	    incs="$$incs --include $$dir/TAGS.sub";	\
  	  fi;						\
  	done;						\
! 	etags -o TAGS.sub *.y *.h *.c -l yacc c-parse.in; \
  	etags --include TAGS.sub $$incs)
  
  # ------------------------------------------------------
*************** TAGS: lang.tags
*** 3328,3334 ****
  # ------------------------------------------------------
  
  # A list of files to be destroyed during "lean" builds.
! VOL_FILES=`echo $(BACKEND) $(OBJS) $(C_OBJS) $(LIBCPP_OBJS) *.c *.h gen*`
  
  # Flags to pass to stage2 and later recursive makes.  Note that the
  # WARN_CFLAGS setting can't be to the expansion of GCC_WARN_CFLAGS in
--- 3656,3662 ----
  # ------------------------------------------------------
  
  # A list of files to be destroyed during "lean" builds.
! VOL_FILES=`echo $(BACKEND) $(OBJS) $(C_OBJS) *.c *.h gen*`
  
  # Flags to pass to stage2 and later recursive makes.  Note that the
  # WARN_CFLAGS setting can't be to the expansion of GCC_WARN_CFLAGS in
*************** POSTSTAGE1_FLAGS_TO_PASS = \
*** 3349,3374 ****
  
  STAGE2_FLAGS_TO_PASS = \
  	CFLAGS="$(BOOT_CFLAGS)" \
! 	WERROR="@WERROR@" \
  
  STAGEPROFILE_FLAGS_TO_PASS = \
! 	CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" 
  
  # Files never linked into the final executable produces warnings about missing
  # profile.
  STAGEFEEDBACK_FLAGS_TO_PASS = \
! 	CFLAGS="$(BOOT_CFLAGS) -fprofile-use" 
  
  # Only build the C compiler for stage1, because that is the only one that
  # we can guarantee will build with the native compiler, and also it is the
  # only thing useful for building stage2. STAGE1_CFLAGS (via CFLAGS),
  # MAKEINFO and MAKEINFOFLAGS are explicitly passed here to make them
  # overrideable (for a bootstrap build stage1 also builds gcc.info).
  stage1_build:
  	$(MAKE) CC="$(CC)" libdir=$(libdir) LANGUAGES="$(BOOT_LANGUAGES)" \
! 		CFLAGS="$(STAGE1_CFLAGS)" MAKEINFO="$(MAKEINFO)" \
! 		MAKEINFOFLAGS="$(MAKEINFOFLAGS)" COVERAGE_FLAGS= \
! 		OBJS-onestep="$(OBJS)"
  	$(STAMP) stage1_build
  	echo stage1_build > stage_last
  
--- 3677,3703 ----
  
  STAGE2_FLAGS_TO_PASS = \
  	CFLAGS="$(BOOT_CFLAGS)" \
! 	WERROR="$(WERROR_FLAGS)" \
  
  STAGEPROFILE_FLAGS_TO_PASS = \
! 	CFLAGS="$(BOOT_CFLAGS) -fprofile-generate"
  
  # Files never linked into the final executable produces warnings about missing
  # profile.
  STAGEFEEDBACK_FLAGS_TO_PASS = \
! 	CFLAGS="$(BOOT_CFLAGS) -fprofile-use"
  
  # Only build the C compiler for stage1, because that is the only one that
  # we can guarantee will build with the native compiler, and also it is the
  # only thing useful for building stage2. STAGE1_CFLAGS (via CFLAGS),
  # MAKEINFO and MAKEINFOFLAGS are explicitly passed here to make them
  # overrideable (for a bootstrap build stage1 also builds gcc.info).
+ # The stage1 compiler is always built with checking enabled.
  stage1_build:
  	$(MAKE) CC="$(CC)" libdir=$(libdir) LANGUAGES="$(BOOT_LANGUAGES)" \
! 		CFLAGS="$(STAGE1_CFLAGS) $(STAGE1_CHECKING)" \
! 		MAKEINFO="$(MAKEINFO)" MAKEINFOFLAGS="$(MAKEINFOFLAGS)" \
! 		COVERAGE_FLAGS= OBJS-onestep="$(OBJS)"
  	$(STAMP) stage1_build
  	echo stage1_build > stage_last
  
*************** stage1-start:
*** 3616,3622 ****
  	 done
  # If SPECS is overridden, make sure it is `installed' as specs.
  	-mv $(SPECS) stage1/specs
! 	-mv $(STAGESTUFF) stage1
  # Copy as/ld if they exist to stage dir, so that running xgcc from the stage
  # dir will work properly.
  	-if [ -f as$(exeext) ] ; then (cd stage1 && $(LN_S) ../as$(exeext) .) ; else true ; fi
--- 3945,3953 ----
  	 done
  # If SPECS is overridden, make sure it is `installed' as specs.
  	-mv $(SPECS) stage1/specs
! 	-mv $(STAGEMOVESTUFF) stage1
! 	-mv build/* stage1/build
! 	-cp -p $(STAGECOPYSTUFF) stage1
  # Copy as/ld if they exist to stage dir, so that running xgcc from the stage
  # dir will work properly.
  	-if [ -f as$(exeext) ] ; then (cd stage1 && $(LN_S) ../as$(exeext) .) ; else true ; fi
*************** stage2-start:
*** 3653,3659 ****
  	 done
  # If SPECS is overridden, make sure it is `installed' as specs.
  	-mv $(SPECS) stage2/specs
! 	-mv $(STAGESTUFF) stage2
  # Copy as/ld if they exist to stage dir, so that running xgcc from the stage
  # dir will work properly.
  	-if [ -f as$(exeext) ] ; then (cd stage2 && $(LN_S) ../as$(exeext) .) ; else true ; fi
--- 3984,3992 ----
  	 done
  # If SPECS is overridden, make sure it is `installed' as specs.
  	-mv $(SPECS) stage2/specs
! 	-mv $(STAGEMOVESTUFF) stage2
! 	-mv build/* stage2/build
! 	-cp -p $(STAGECOPYSTUFF) stage2
  # Copy as/ld if they exist to stage dir, so that running xgcc from the stage
  # dir will work properly.
  	-if [ -f as$(exeext) ] ; then (cd stage2 && $(LN_S) ../as$(exeext) .) ; else true ; fi
*************** stage3-start:
*** 3686,3692 ****
  	 done
  # If SPECS is overridden, make sure it is `installed' as specs.
  	-mv $(SPECS) stage3/specs
! 	-mv $(STAGESTUFF) stage3
  # Copy as/ld if they exist to stage dir, so that running xgcc from the stage
  # dir will work properly.
  	-if [ -f as$(exeext) ] ; then (cd stage3 && $(LN_S) ../as$(exeext) .) ; else true ; fi
--- 4019,4027 ----
  	 done
  # If SPECS is overridden, make sure it is `installed' as specs.
  	-mv $(SPECS) stage3/specs
! 	-mv $(STAGEMOVESTUFF) stage3
! 	-mv build/* stage3/build
! 	-cp -p $(STAGECOPYSTUFF) stage3
  # Copy as/ld if they exist to stage dir, so that running xgcc from the stage
  # dir will work properly.
  	-if [ -f as$(exeext) ] ; then (cd stage3 && $(LN_S) ../as$(exeext) .) ; else true ; fi
*************** stage4-start:
*** 3719,3725 ****
  	 done
  # If SPECS is overridden, make sure it is `installed' as specs.
  	-mv $(SPECS) stage4/specs
! 	-mv $(STAGESTUFF) stage4
  # Copy as/ld if they exist to stage dir, so that running xgcc from the stage
  # dir will work properly.
  	-if [ -f as$(exeext) ] ; then (cd stage4 && $(LN_S) ../as$(exeext) .) ; else true ; fi
--- 4054,4062 ----
  	 done
  # If SPECS is overridden, make sure it is `installed' as specs.
  	-mv $(SPECS) stage4/specs
! 	-mv $(STAGEMOVESTUFF) stage4
! 	-mv build/* stage4/build
! 	-cp -p $(STAGECOPYSTUFF) stage4
  # Copy as/ld if they exist to stage dir, so that running xgcc from the stage
  # dir will work properly.
  	-if [ -f as$(exeext) ] ; then (cd stage4 && $(LN_S) ../as$(exeext) .) ; else true ; fi
*************** stageprofile-start:
*** 3750,3756 ****
  	 do \
  	   if [ -d stageprofile/$$dir ] ; then true ; else mkdir stageprofile/$$dir ; fi ; \
  	 done
! 	-mv $(STAGESTUFF) stageprofile
  # Copy as/ld if they exist to stage dir, so that running xgcc from the stage
  # dir will work properly.
  	-if [ -f as$(exeext) ] ; then (cd stageprofile && $(LN_S) ../as$(exeext) .) ; else true ; fi
--- 4087,4095 ----
  	 do \
  	   if [ -d stageprofile/$$dir ] ; then true ; else mkdir stageprofile/$$dir ; fi ; \
  	 done
! 	-mv $(STAGEMOVESTUFF) stageprofile
! 	-mv build/* stageprofile/build
! 	-cp -p $(STAGECOPYSTUFF) stageprofile
  # Copy as/ld if they exist to stage dir, so that running xgcc from the stage
  # dir will work properly.
  	-if [ -f as$(exeext) ] ; then (cd stageprofile && $(LN_S) ../as$(exeext) .) ; else true ; fi
*************** stagefeedback-start:
*** 3781,3787 ****
  	 do \
  	   if [ -d stagefeedback/$$dir ] ; then true ; else mkdir stagefeedback/$$dir ; fi ; \
  	 done
! 	-mv $(STAGESTUFF) stagefeedback
  # Copy as/ld if they exist to stage dir, so that running xgcc from the stage
  # dir will work properly.
  	-if [ -f as$(exeext) ] ; then (cd stagefeedback && $(LN_S) ../as$(exeext) .) ; else true ; fi
--- 4120,4128 ----
  	 do \
  	   if [ -d stagefeedback/$$dir ] ; then true ; else mkdir stagefeedback/$$dir ; fi ; \
  	 done
! 	-mv $(STAGEMOVESTUFF) stagefeedback
! 	-mv build/* stagefeedback/build
! 	-cp -p $(STAGECOPYSTUFF) stagefeedback
  # Copy as/ld if they exist to stage dir, so that running xgcc from the stage
  # dir will work properly.
  	-if [ -f as$(exeext) ] ; then (cd stagefeedback && $(LN_S) ../as$(exeext) .) ; else true ; fi
*************** update-po: $(CATALOGS:.gmo=.pox)
*** 3876,3882 ****
  # for each language, in case they weren't built or included
  # with the distribution.
  install-po:
! 	$(SHELL) $(srcdir)/mkinstalldirs $(DESTDIR)$(datadir)
  	cats="$(CATALOGS)"; for cat in $$cats; do \
  	  lang=`basename $$cat | sed 's/\.gmo$$//'`; \
  	  if [ -f $$cat ]; then :; \
--- 4217,4223 ----
  # for each language, in case they weren't built or included
  # with the distribution.
  install-po:
! 	$(mkinstalldirs) $(DESTDIR)$(datadir)
  	cats="$(CATALOGS)"; for cat in $$cats; do \
  	  lang=`basename $$cat | sed 's/\.gmo$$//'`; \
  	  if [ -f $$cat ]; then :; \
*************** install-po:
*** 3884,3891 ****
  	  else continue; \
  	  fi; \
  	  dir=$(localedir)/$$lang/LC_MESSAGES; \
! 	  echo $(SHELL) $(srcdir)/mkinstalldirs $(DESTDIR)$$dir; \
! 	  $(SHELL) $(srcdir)/mkinstalldirs $(DESTDIR)$$dir || exit 1; \
  	  echo $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \
  	  $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \
  	done
--- 4225,4232 ----
  	  else continue; \
  	  fi; \
  	  dir=$(localedir)/$$lang/LC_MESSAGES; \
! 	  echo $(mkinstalldirs) $(DESTDIR)$$dir; \
! 	  $(mkinstalldirs) $(DESTDIR)$$dir || exit 1; \
  	  echo $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \
  	  $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \
  	done
diff -Nrcpad gcc-3.4.3/gcc/README-fixinc gcc-4.0.0/gcc/README-fixinc
*** gcc-3.4.3/gcc/README-fixinc	Sun May 27 18:21:04 2001
--- gcc-4.0.0/gcc/README-fixinc	Thu Jan  1 00:00:00 1970
***************
*** 1,14 ****
- This README file is copied into the directory for GCC-only header files
- when fixincludes is run by the makefile for GCC.
- 
- Many of the files in this directory were automatically edited from the
- standard system header files by the fixincludes process.  They are
- system-specific, and will not work on any other kind of system.  They
- are also not part of GCC.  The reason we have to do this is because
- GCC requires ANSI C headers and many vendors supply ANSI-incompatible
- headers.
- 
- Because this is an automated process, sometimes headers get "fixed"
- that do not, strictly speaking, need a fix.  As long as nothing is broken
- by the process, it is just an unfortunate collateral inconvenience.
- We would like to rectify it, if it is not "too inconvenient".
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/aclocal.m4 gcc-4.0.0/gcc/aclocal.m4
*** gcc-3.4.3/gcc/aclocal.m4	Fri Apr 16 22:13:20 2004
--- gcc-4.0.0/gcc/aclocal.m4	Thu Dec  2 11:04:01 2004
***************
*** 1,31 ****
! sinclude(../config/acx.m4)
! sinclude(../config/accross.m4)
! sinclude(../config/gettext.m4)
! sinclude(../config/progtest.m4)
! 
! dnl See if stdbool.h properly defines bool and true/false.
! AC_DEFUN([gcc_AC_HEADER_STDBOOL],
! [AC_CACHE_CHECK([for working stdbool.h],
!   ac_cv_header_stdbool_h,
! [AC_TRY_COMPILE([#include <stdbool.h>],
! [bool foo = false;],
! ac_cv_header_stdbool_h=yes, ac_cv_header_stdbool_h=no)])
! if test $ac_cv_header_stdbool_h = yes; then
!   AC_DEFINE(HAVE_STDBOOL_H, 1,
!   [Define if you have a working <stdbool.h> header file.])
! fi
! ])
! 
! dnl See whether we can include both string.h and strings.h.
! AC_DEFUN([gcc_AC_HEADER_STRING],
! [AC_CACHE_CHECK([whether string.h and strings.h may both be included],
!   gcc_cv_header_string,
! [AC_TRY_COMPILE([#include <string.h>
! #include <strings.h>], , gcc_cv_header_string=yes, gcc_cv_header_string=no)])
! if test $gcc_cv_header_string = yes; then
!   AC_DEFINE(STRING_WITH_STRINGS, 1, [Define if you can safely include both <string.h> and <strings.h>.])
! fi
! ])
  
  dnl See whether we need a declaration for a function.
  dnl The result is highly dependent on the INCLUDES passed in, so make sure
--- 1,14 ----
! m4_include([../config/accross.m4])
! m4_include([../config/acx.m4])
! m4_include([../config/gettext-sister.m4])
! m4_include([../config/gcc-lib-path.m4])
! m4_include([../config/gcc-version.m4])
! m4_include([../config/iconv.m4])
! m4_include([../config/lcmessage.m4])
! m4_include([../config/lib-ld.m4])
! m4_include([../config/lib-link.m4])
! m4_include([../config/lib-prefix.m4])
! m4_include([../config/progtest.m4])
  
  dnl See whether we need a declaration for a function.
  dnl The result is highly dependent on the INCLUDES passed in, so make sure
*************** dnl Arrange to define HAVE_DECL_<FUNCTIO
*** 52,62 ****
  dnl gcc_AC_CHECK_DECLS(SYMBOLS,
  dnl 	[ACTION-IF-NEEDED [, ACTION-IF-NOT-NEEDED [, INCLUDES]]])
  AC_DEFUN([gcc_AC_CHECK_DECLS],
! [for ac_func in $1
  do
! changequote(, )dnl
!   ac_tr_decl=HAVE_DECL_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
! changequote([, ])dnl
  gcc_AC_CHECK_DECL($ac_func,
    [AC_DEFINE_UNQUOTED($ac_tr_decl, 1) $2],
    [AC_DEFINE_UNQUOTED($ac_tr_decl, 0) $3],
--- 35,47 ----
  dnl gcc_AC_CHECK_DECLS(SYMBOLS,
  dnl 	[ACTION-IF-NEEDED [, ACTION-IF-NOT-NEEDED [, INCLUDES]]])
  AC_DEFUN([gcc_AC_CHECK_DECLS],
! [AC_FOREACH([gcc_AC_Func], [$1],
!   [AH_TEMPLATE(AS_TR_CPP(HAVE_DECL_[]gcc_AC_Func),
!   [Define to 1 if we found a declaration for ']gcc_AC_Func[', otherwise
!    define to 0.])])dnl
! for ac_func in $1
  do
!   ac_tr_decl=AS_TR_CPP([HAVE_DECL_$ac_func])
  gcc_AC_CHECK_DECL($ac_func,
    [AC_DEFINE_UNQUOTED($ac_tr_decl, 1) $2],
    [AC_DEFINE_UNQUOTED($ac_tr_decl, 0) $3],
*************** dnl during this test.
*** 72,83 ****
    $4
  )
  done
- dnl Automatically generate config.h entries via autoheader.
- if test x = y ; then
-   patsubst(translit([$1], [a-z], [A-Z]), [\w+],
-     [AC_DEFINE([HAVE_DECL_\&], 1,
-       [Define to 1 if we found this declaration otherwise define to 0.])])dnl
- fi
  ])
  
  dnl 'make compare' can be significantly faster, if cmp itself can
--- 57,62 ----
*************** else
*** 148,154 ****
    then
      gcc_cv_prog_LN_S=ln
    else
!     gcc_cv_prog_LN_S=cp
    fi
  fi
  rm -f conftestdata_f conftestdata_t
--- 127,138 ----
    then
      gcc_cv_prog_LN_S=ln
    else
!     if cp -p conftestdata_f conftestdata_t 2>/dev/null
!     then
!       gcc_cv_prog_LN_S="cp -p"
!     else
!       gcc_cv_prog_LN_S=cp
!     fi
    fi
  fi
  rm -f conftestdata_f conftestdata_t
*************** else
*** 160,215 ****
    if test "$gcc_cv_prog_LN_S" = "ln"; then
      AC_MSG_RESULT([no, using ln])
    else
!     AC_MSG_RESULT([no, and neither does ln, so using cp])
    fi
  fi
  AC_SUBST(LN_S)dnl
  ])
  
- dnl See if hard links work and if not, try to substitute either symbolic links or simple copy.
- AC_DEFUN([gcc_AC_PROG_LN],
- [AC_MSG_CHECKING(whether ln works)
- AC_CACHE_VAL(gcc_cv_prog_LN,
- [rm -f conftestdata_t
- echo >conftestdata_f
- if ln conftestdata_f conftestdata_t 2>/dev/null
- then
-   gcc_cv_prog_LN="ln"
- else
-   if ln -s conftestdata_f conftestdata_t 2>/dev/null
-   then
-     gcc_cv_prog_LN="ln -s"
-   else
-     gcc_cv_prog_LN=cp
-   fi
- fi
- rm -f conftestdata_f conftestdata_t
- ])dnl
- LN="$gcc_cv_prog_LN"
- if test "$gcc_cv_prog_LN" = "ln"; then
-   AC_MSG_RESULT(yes)
- else
-   if test "$gcc_cv_prog_LN" = "ln -s"; then
-     AC_MSG_RESULT([no, using ln -s])
-   else
-     AC_MSG_RESULT([no, and neither does ln -s, so using cp])
-   fi
- fi
- AC_SUBST(LN)dnl
- ])
- 
- dnl Check whether _Bool is built-in.
- AC_DEFUN([gcc_AC_C__BOOL],
- [AC_CACHE_CHECK(for built-in _Bool, gcc_cv_c__bool,
- [AC_TRY_COMPILE(,
- [_Bool foo;],
- gcc_cv_c__bool=yes, gcc_cv_c__bool=no)
- ])
- if test $gcc_cv_c__bool = yes; then
-   AC_DEFINE(HAVE__BOOL, 1, [Define if the \`_Bool' type is built-in.])
- fi
- ])
- 
  dnl Define MKDIR_TAKES_ONE_ARG if mkdir accepts only one argument instead
  dnl of the usual 2.
  AC_DEFUN([gcc_AC_FUNC_MKDIR_TAKES_ONE_ARG],
--- 144,155 ----
    if test "$gcc_cv_prog_LN_S" = "ln"; then
      AC_MSG_RESULT([no, using ln])
    else
!     AC_MSG_RESULT([no, and neither does ln, so using $gcc_cv_prog_LN_S])
    fi
  fi
  AC_SUBST(LN_S)dnl
  ])
  
  dnl Define MKDIR_TAKES_ONE_ARG if mkdir accepts only one argument instead
  dnl of the usual 2.
  AC_DEFUN([gcc_AC_FUNC_MKDIR_TAKES_ONE_ARG],
*************** test -z "$INSTALL_DATA" && INSTALL_DATA=
*** 295,386 ****
  AC_SUBST(INSTALL_DATA)dnl
  ])
  
- dnl Test for GNAT.
- dnl We require the gnatbind program, and a compiler driver that
- dnl understands Ada.  We use the user's CC setting, already found.
- dnl
- dnl Sets the shell variable have_gnat to yes or no as appropriate, and
- dnl substitutes GNATBIND.
- AC_DEFUN([gcc_AC_PROG_GNAT],
- [AC_REQUIRE([AC_CHECK_TOOL_PREFIX])
- AC_REQUIRE([AC_PROG_CC])
- AC_CHECK_TOOL(GNATBIND, gnatbind, no)
- AC_CACHE_CHECK([whether compiler driver understands Ada],
- 		 gcc_cv_cc_supports_ada,
- [cat >conftest.adb <<EOF
- procedure conftest is begin null; end conftest;
- EOF
- gcc_cv_cc_supports_ada=no
- # There is a bug in old released versions of GCC which causes the
- # driver to exit successfully when the appropriate language module
- # has not been installed.  This is fixed in 2.95.4, 3.0.2, and 3.1.
- # Therefore we must check for the error message as well as an
- # unsuccessful exit.
- # Other compilers, like HP Tru64 UNIX cc, exit successfully when
- # given a .adb file, but produce no object file.  So we must check
- # if an object file was really produced to guard against this.
- errors=`(${CC} -c conftest.adb) 2>&1 || echo failure`
- if test x"$errors" = x && test -f conftest.$ac_objext; then
-   gcc_cv_cc_supports_ada=yes
-   break
- fi
- rm -f conftest.*])
- 
- if test x$GNATBIND != xno && test x$gcc_cv_cc_supports_ada != xno; then
-   have_gnat=yes
- else
-   have_gnat=no
- fi
- ])
- 
- dnl GCC_PATH_PROG(VARIABLE, PROG-TO-CHECK-FOR [, VALUE-IF-NOT-FOUND [, PATH]])
- dnl like AC_PATH_PROG but use other cache variables
- AC_DEFUN([GCC_PATH_PROG],
- [# Extract the first word of "$2", so it can be a program name with args.
- set dummy $2; ac_word=[$]2
- AC_MSG_CHECKING([for $ac_word])
- AC_CACHE_VAL(gcc_cv_path_$1,
- [case "[$]$1" in
-   /*)
-   gcc_cv_path_$1="[$]$1" # Let the user override the test with a path.
-   ;;
-   ?:/*)			 
-   gcc_cv_path_$1="[$]$1" # Let the user override the test with a dos path.
-   ;;
-   *)
-   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
- dnl $ac_dummy forces splitting on constant user-supplied paths.
- dnl POSIX.2 word splitting is done only on the output of word expansions,
- dnl not every word.  This closes a longstanding sh security hole.
-   ac_dummy="ifelse([$4], , $PATH, [$4])"
-   for ac_dir in $ac_dummy; do 
-     test -z "$ac_dir" && ac_dir=.
-     if test -f $ac_dir/$ac_word; then
-       gcc_cv_path_$1="$ac_dir/$ac_word"
-       break
-     fi
-   done
-   IFS="$ac_save_ifs"
- dnl If no 3rd arg is given, leave the cache variable unset,
- dnl so GCC_PATH_PROGS will keep looking.
- ifelse([$3], , , [  test -z "[$]gcc_cv_path_$1" && gcc_cv_path_$1="$3"
- ])dnl
-   ;;
- esac])dnl
- $1="$gcc_cv_path_$1"
- if test -n "[$]$1"; then
-   AC_MSG_RESULT([$]$1)
- else
-   AC_MSG_RESULT(no)
- fi
- AC_SUBST($1)dnl
- ])
- 
  # mmap(2) blacklisting.  Some platforms provide the mmap library routine
  # but don't support all of the features we need from it.
  AC_DEFUN([gcc_AC_FUNC_MMAP_BLACKLIST],
! [if test $ac_cv_header_sys_mman_h != yes \
!  || test $ac_cv_func_mmap != yes; then
     gcc_cv_func_mmap_file=no
     gcc_cv_func_mmap_dev_zero=no
     gcc_cv_func_mmap_anon=no
--- 235,249 ----
  AC_SUBST(INSTALL_DATA)dnl
  ])
  
  # mmap(2) blacklisting.  Some platforms provide the mmap library routine
  # but don't support all of the features we need from it.
  AC_DEFUN([gcc_AC_FUNC_MMAP_BLACKLIST],
! [
! AC_CHECK_HEADER([sys/mman.h],
! 		[gcc_header_sys_mman_h=yes], [gcc_header_sys_mman_h=no])
! AC_CHECK_FUNC([mmap], [gcc_func_mmap=yes], [gcc_func_mmap=no])
! if test "$gcc_header_sys_mman_h" != yes \
!  || test "$gcc_func_mmap" != yes; then
     gcc_cv_func_mmap_file=no
     gcc_cv_func_mmap_dev_zero=no
     gcc_cv_func_mmap_anon=no
*************** AC_CACHE_CHECK(for __int64, ac_cv_c___in
*** 571,647 ****
    fi
  ])
  
- #serial AM2
- 
  dnl From Bruno Haible.
  
! AC_DEFUN([AM_ICONV],
  [
!   dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
!   dnl those with the standalone portable GNU libiconv installed).
! 
!   am_cv_lib_iconv_ldpath=
!   AC_ARG_WITH([libiconv-prefix],
! [  --with-libiconv-prefix=DIR  search for libiconv in DIR/include and DIR/lib], [
!     for dir in `echo "$withval" | tr : ' '`; do
!       if test -d $dir/include; then CPPFLAGS="$CPPFLAGS -I$dir/include"; fi
!       if test -d $dir/lib; then am_cv_lib_iconv_ldpath="-L$dir/lib"; fi
!     done
!    ])
! 
!   AC_CHECK_HEADERS([iconv.h])
! 
!   AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [
!     am_cv_func_iconv="no, consider installing GNU libiconv"
!     am_cv_lib_iconv=no
!     AC_TRY_LINK([#include <stdlib.h>
! #include <iconv.h>],
!       [iconv_t cd = iconv_open("","");
!        iconv(cd,NULL,NULL,NULL,NULL);
!        iconv_close(cd);],
!       am_cv_func_iconv=yes)
!     if test "$am_cv_func_iconv" != yes; then
!       am_save_LIBS="$LIBS"
!       LIBS="$LIBS $am_cv_libiconv_ldpath -liconv"
!       AC_TRY_LINK([#include <stdlib.h>
! #include <iconv.h>],
!         [iconv_t cd = iconv_open("","");
!          iconv(cd,NULL,NULL,NULL,NULL);
!          iconv_close(cd);],
!         am_cv_lib_iconv=yes
!         am_cv_func_iconv=yes)
!       LIBS="$am_save_LIBS"
!     fi
!   ])
!   if test "$am_cv_func_iconv" = yes; then
!     AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])
!     AC_MSG_CHECKING([for iconv declaration])
!     AC_CACHE_VAL(am_cv_proto_iconv, [
!       AC_TRY_COMPILE([
! #include <stdlib.h>
! #include <iconv.h>
! extern
! #ifdef __cplusplus
! "C"
! #endif
! #if defined(__STDC__) || defined(__cplusplus)
! size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
! #else
! size_t iconv();
! #endif
! ], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const")
!       am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
!     am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
!     AC_MSG_RESULT([$]{ac_t:-
!          }[$]am_cv_proto_iconv)
!     AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1,
!       [Define as const if the declaration of iconv() needs const.])
!   fi
!   LIBICONV=
!   if test "$am_cv_lib_iconv" = yes; then
!     LIBICONV="$am_cv_lib_iconv_ldpath -liconv"
    fi
-   AC_SUBST(LIBICONV)
  ])
  
  AC_DEFUN([gcc_AC_INITFINI_ARRAY],
--- 434,453 ----
    fi
  ])
  
  dnl From Bruno Haible.
  
! AC_DEFUN([AM_LANGINFO_CODESET],
  [
!   AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset,
!     [AC_TRY_LINK([#include <langinfo.h>],
!       [char* cs = nl_langinfo(CODESET);],
!       am_cv_langinfo_codeset=yes,
!       am_cv_langinfo_codeset=no)
!     ])
!   if test $am_cv_langinfo_codeset = yes; then
!     AC_DEFINE(HAVE_LANGINFO_CODESET, 1,
!       [Define if you have <langinfo.h> and nl_langinfo(CODESET).])
    fi
  ])
  
  AC_DEFUN([gcc_AC_INITFINI_ARRAY],
*************** for f in $gcc_cv_as_bfd_srcdir/configure
*** 676,682 ****
           $gcc_cv_as_gas_srcdir/configure \
           $gcc_cv_as_gas_srcdir/configure.in \
           $gcc_cv_as_gas_srcdir/Makefile.in ; do
!   gcc_cv_gas_version=`grep '^VERSION=[[0-9]]*\.[[0-9]]*' $f`
    if test x$gcc_cv_gas_version != x; then
      break
    fi
--- 482,488 ----
           $gcc_cv_as_gas_srcdir/configure \
           $gcc_cv_as_gas_srcdir/configure.in \
           $gcc_cv_as_gas_srcdir/Makefile.in ; do
!   gcc_cv_gas_version=`sed -n -e 's/^[[ 	]]*\(VERSION=[[0-9]]*\.[[0-9]]*.*\)/\1/p' < $f`
    if test x$gcc_cv_gas_version != x; then
      break
    fi
*************** if test $[$2] = yes; then
*** 750,784 ****
    $7
  fi])])
  
! # lcmessage.m4 serial 3 (gettext-0.11.3)
! dnl Copyright (C) 1995-2002 Free Software Foundation, Inc.
! dnl This file is free software, distributed under the terms of the GNU
! dnl General Public License.  As a special exception to the GNU General
! dnl Public License, this file may be distributed as part of a program
! dnl that contains a configuration script generated by Autoconf, under
! dnl the same distribution terms as the rest of that program.
! dnl
! dnl This file can can be used in projects which are not available under
! dnl the GNU General Public License or the GNU Library General Public
! dnl License but which still want to provide support for the GNU gettext
! dnl functionality.
! dnl Please note that the actual code of the GNU gettext library is covered
! dnl by the GNU Library General Public License, and the rest of the GNU
! dnl gettext package package is covered by the GNU General Public License.
! dnl They are *not* in the public domain.
  
! dnl Authors:
! dnl   Ulrich Drepper <drepper@cygnus.com>, 1995.
  
! # Check whether LC_MESSAGES is available in <locale.h>.
  
! AC_DEFUN([AM_LC_MESSAGES],
! [
!   AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
!     [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
!        am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
!   if test $am_cv_val_LC_MESSAGES = yes; then
!     AC_DEFINE(HAVE_LC_MESSAGES, 1,
!       [Define if your <locale.h> file defines LC_MESSAGES.])
!   fi
  ])
--- 556,659 ----
    $7
  fi])])
  
! # AM_PROG_CC_C_O
! # --------------
! # Like AC_PROG_CC_C_O, but changed for automake.
  
! # Copyright (C) 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
  
! # This program is free software; you can redistribute it and/or modify
! # it under the terms of the GNU General Public License as published by
! # the Free Software Foundation; either version 2, or (at your option)
! # any later version.
  
! # This program is distributed in the hope that it will be useful,
! # but WITHOUT ANY WARRANTY; without even the implied warranty of
! # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! # GNU General Public License for more details.
! 
! # You should have received a copy of the GNU General Public License
! # along with this program; if not, write to the Free Software
! # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
! # 02111-1307, USA.
! 
! AC_DEFUN([AM_PROG_CC_C_O],
! [AC_REQUIRE([AC_PROG_CC_C_O])dnl
! AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
! # FIXME: we rely on the cache variable name because
! # there is no other way.
! set dummy $CC
! ac_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']`
! if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" != yes"; then
!    # Losing compiler, so override with the script.
!    # FIXME: It is wrong to rewrite CC.
!    # But if we don't then we get into trouble of one sort or another.
!    # A longer-term fix would be to have automake use am__CC in this case,
!    # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
!    CC="$am_aux_dir/compile $CC"
! fi
! ])
! 
! # AM_AUX_DIR_EXPAND
! 
! # Copyright (C) 2001, 2003 Free Software Foundation, Inc.
! 
! # This program is free software; you can redistribute it and/or modify
! # it under the terms of the GNU General Public License as published by
! # the Free Software Foundation; either version 2, or (at your option)
! # any later version.
! 
! # This program is distributed in the hope that it will be useful,
! # but WITHOUT ANY WARRANTY; without even the implied warranty of
! # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! # GNU General Public License for more details.
! 
! # You should have received a copy of the GNU General Public License
! # along with this program; if not, write to the Free Software
! # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
! # 02111-1307, USA.
! 
! # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
! # $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
! # `$srcdir', `$srcdir/..', or `$srcdir/../..'.
! #
! # Of course, Automake must honor this variable whenever it calls a
! # tool from the auxiliary directory.  The problem is that $srcdir (and
! # therefore $ac_aux_dir as well) can be either absolute or relative,
! # depending on how configure is run.  This is pretty annoying, since
! # it makes $ac_aux_dir quite unusable in subdirectories: in the top
! # source directory, any form will work fine, but in subdirectories a
! # relative path needs to be adjusted first.
! #
! # $ac_aux_dir/missing
! #    fails when called from a subdirectory if $ac_aux_dir is relative
! # $top_srcdir/$ac_aux_dir/missing
! #    fails if $ac_aux_dir is absolute,
! #    fails when called from a subdirectory in a VPATH build with
! #          a relative $ac_aux_dir
! #
! # The reason of the latter failure is that $top_srcdir and $ac_aux_dir
! # are both prefixed by $srcdir.  In an in-source build this is usually
! # harmless because $srcdir is `.', but things will broke when you
! # start a VPATH build or use an absolute $srcdir.
! #
! # So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
! # iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
! #   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
! # and then we would define $MISSING as
! #   MISSING="\${SHELL} $am_aux_dir/missing"
! # This will work as long as MISSING is not called from configure, because
! # unfortunately $(top_srcdir) has no meaning in configure.
! # However there are other variables, like CC, which are often used in
! # configure, and could therefore not use this "fixed" $ac_aux_dir.
! #
! # Another solution, used here, is to always expand $ac_aux_dir to an
! # absolute PATH.  The drawback is that using absolute paths prevent a
! # configured tree to be moved without reconfiguration.
! 
! AC_DEFUN([AM_AUX_DIR_EXPAND],
! [dnl Rely on autoconf to set up CDPATH properly.
! AC_PREREQ([2.50])dnl
! # expand $ac_aux_dir to an absolute path
! am_aux_dir=`cd $ac_aux_dir && pwd`
  ])
diff -Nrcpad gcc-3.4.3/gcc/ada/1aexcept.adb gcc-4.0.0/gcc/ada/1aexcept.adb
*** gcc-3.4.3/gcc/ada/1aexcept.adb	Thu Apr 24 17:53:50 2003
--- gcc-4.0.0/gcc/ada/1aexcept.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,49 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                       A D A . E X C E P T I O N S                        --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --          Copyright (C) 1992-2001 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- package body Ada.Exceptions is
- 
-    procedure Last_Chance_Handler (Msg : System.Address; Line : Integer);
-    pragma Import (C, Last_Chance_Handler, "__gnat_last_chance_handler");
-    pragma No_Return (Last_Chance_Handler);
- 
-    ---------------------
-    -- Raise_Exception --
-    ---------------------
- 
-    procedure Raise_Exception (E : Exception_Id; Message : String := "") is
-    begin
-       Last_Chance_Handler (Message'Address, 0);
-    end Raise_Exception;
- 
- end Ada.Exceptions;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/1aexcept.ads gcc-4.0.0/gcc/ada/1aexcept.ads
*** gcc-3.4.3/gcc/ada/1aexcept.ads	Thu Apr 24 17:53:50 2003
--- gcc-4.0.0/gcc/ada/1aexcept.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,66 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT RUN-TIME COMPONENTS                         --
- --                                                                          --
- --                       A D A . E X C E P T I O N S                        --
- --                   (Version for No Exception Handlers)                    --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the  contents of the part following the private keyword. --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This version is for use when the restriction No_Exception_Handlers
- --  is enabled.
- 
- with System;
- 
- package Ada.Exceptions is
- 
-    type Exception_Id is private;
- 
-    Null_Id : constant Exception_Id;
- 
-    procedure Raise_Exception (E : Exception_Id; Message : String := "");
-    --  Unconditionally call __gnat_last_chance_handler.
-    --  Message should be a null terminated string.
-    pragma No_Return (Raise_Exception);
- 
- private
- 
-    ------------------
-    -- Exception_Id --
-    ------------------
- 
-    type Exception_Id is new System.Address;
-    Null_Id : constant Exception_Id := Exception_Id (System.Null_Address);
- 
-    pragma Inline_Always (Raise_Exception);
- 
- end Ada.Exceptions;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/1ic.ads gcc-4.0.0/gcc/ada/1ic.ads
*** gcc-3.4.3/gcc/ada/1ic.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/1ic.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,83 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                         I N T E R F A C E S . C                          --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- -- This specification is adapted from the Ada Reference Manual for use with --
- -- GNAT  Hi Integrity Edition.  In accordance  with the  copyright of  that --
- -- document,  you can  freely copy and modify this specification,  provided --
- -- that if you  redistribute a modified version,  any changes that you have --
- -- made are clearly indicated.                                              --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This version contains only the type definitions for standard interfacing
- --  with C. All functions have been removed from the original spec.
- 
- package Interfaces.C is
- pragma Pure (C);
- 
-    --  Declaration's based on C's <limits.h>
- 
-    CHAR_BIT  : constant := 8;
-    SCHAR_MIN : constant := -128;
-    SCHAR_MAX : constant := 127;
-    UCHAR_MAX : constant := 255;
- 
-    --  Signed and Unsigned Integers. Note that in GNAT, we have ensured that
-    --  the standard predefined Ada types correspond to the standard C types
- 
-    type int   is new Integer;
-    type short is new Short_Integer;
-    type long  is new Long_Integer;
- 
-    type signed_char is range SCHAR_MIN .. SCHAR_MAX;
-    for signed_char'Size use CHAR_BIT;
- 
-    type unsigned       is mod 2 ** int'Size;
-    type unsigned_short is mod 2 ** short'Size;
-    type unsigned_long  is mod 2 ** long'Size;
- 
-    type unsigned_char is mod (UCHAR_MAX + 1);
-    for unsigned_char'Size use CHAR_BIT;
- 
-    subtype plain_char is unsigned_char;
- 
-    type ptrdiff_t is
-      range -(2 ** (Standard'Address_Size - 1)) ..
-            +(2 ** (Standard'Address_Size - 1) - 1);
- 
-    type size_t is mod 2 ** Standard'Address_Size;
- 
-    --  Floating-Point
- 
-    type C_float     is new Float;
-    type double      is new Standard.Long_Float;
-    type long_double is new Standard.Long_Long_Float;
- 
-    ----------------------------
-    -- Characters and Strings --
-    ----------------------------
- 
-    type char is new Character;
- 
-    nul : constant char := char'First;
- 
-    type char_array is array (size_t range <>) of aliased char;
-    for char_array'Component_Size use CHAR_BIT;
- 
-    ------------------------------------
-    -- Wide Character and Wide String --
-    ------------------------------------
- 
-    type wchar_t is new Wide_Character;
-    for wchar_t'Size use Standard'Wchar_T_Size;
- 
-    wide_nul : constant wchar_t := wchar_t'First;
- 
-    type wchar_array is array (size_t range <>) of aliased wchar_t;
- 
- end Interfaces.C;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/1ssecsta.adb gcc-4.0.0/gcc/ada/1ssecsta.adb
*** gcc-3.4.3/gcc/ada/1ssecsta.adb	Mon Jan 12 11:45:23 2004
--- gcc-4.0.0/gcc/ada/1ssecsta.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,143 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --               S Y S T E M . S E C O N D A R Y _ S T A C K                --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the HI-E version of this package.
- 
- with Unchecked_Conversion;
- 
- package body System.Secondary_Stack is
- 
-    use type SSE.Storage_Offset;
- 
-    type Memory is array (Mark_Id range <>) of SSE.Storage_Element;
- 
-    type Stack_Id is record
-       Top  : Mark_Id;
-       Last : Mark_Id;
-       Mem  : Memory (1 .. Mark_Id'Last);
-    end record;
-    pragma Suppress_Initialization (Stack_Id);
- 
-    type Stack_Ptr is access Stack_Id;
- 
-    function From_Addr is new Unchecked_Conversion (Address, Stack_Ptr);
- 
-    function Get_Sec_Stack return Stack_Ptr;
-    pragma Import (C, Get_Sec_Stack, "__gnat_get_secondary_stack");
-    --  Return the address of the secondary stack.
-    --  In a multi-threaded environment, Sec_Stack should be a thread-local
-    --  variable.
- 
-    --  Possible implementation of Get_Sec_Stack in a single-threaded
-    --  environment:
-    --
-    --     Chunk : aliased Memory (1 .. Default_Secondary_Stack_Size);
-    --     for Chunk'Alignment use Standard'Maximum_Alignment;
-    --     --  The secondary stack.
-    --
-    --     function Get_Sec_Stack return Stack_Ptr is
-    --     begin
-    --        return From_Addr (Chunk'Address);
-    --     end Get_Sec_Stack;
-    --
-    --  begin
-    --     SS_Init (Chunk'Address, Default_Secondary_Stack_Size);
-    --  end System.Secondary_Stack;
- 
-    -----------------
-    -- SS_Allocate --
-    -----------------
- 
-    procedure SS_Allocate
-      (Address      : out System.Address;
-       Storage_Size : SSE.Storage_Count)
-    is
-       Max_Align    : constant Mark_Id := Mark_Id (Standard'Maximum_Alignment);
-       Max_Size     : constant Mark_Id :=
-                        ((Mark_Id (Storage_Size) + Max_Align - 1) / Max_Align)
-                          * Max_Align;
-       Sec_Stack    : constant Stack_Ptr := Get_Sec_Stack;
- 
-    begin
-       if Sec_Stack.Top + Max_Size > Sec_Stack.Last then
-          raise Storage_Error;
-       end if;
- 
-       Address := Sec_Stack.Mem (Sec_Stack.Top)'Address;
-       Sec_Stack.Top := Sec_Stack.Top + Max_Size;
-    end SS_Allocate;
- 
-    -------------
-    -- SS_Free --
-    -------------
- 
-    procedure SS_Free (Stk : in out System.Address) is
-    begin
-       Stk := Null_Address;
-    end SS_Free;
- 
-    -------------
-    -- SS_Init --
-    -------------
- 
-    procedure SS_Init
-      (Stk  : System.Address;
-       Size : Natural := Default_Secondary_Stack_Size)
-    is
-       Stack : Stack_Ptr := From_Addr (Stk);
-    begin
-       pragma Assert (Size >= 2 * Mark_Id'Max_Size_In_Storage_Elements);
- 
-       Stack.Top := Stack.Mem'First;
-       Stack.Last := Mark_Id (Size) - 2 * Mark_Id'Max_Size_In_Storage_Elements;
-    end SS_Init;
- 
-    -------------
-    -- SS_Mark --
-    -------------
- 
-    function SS_Mark return Mark_Id is
-    begin
-       return Get_Sec_Stack.Top;
-    end SS_Mark;
- 
-    ----------------
-    -- SS_Release --
-    ----------------
- 
-    procedure SS_Release (M : Mark_Id) is
-    begin
-       Get_Sec_Stack.Top := M;
-    end SS_Release;
- 
- end System.Secondary_Stack;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/1ssecsta.ads gcc-4.0.0/gcc/ada/1ssecsta.ads
*** gcc-3.4.3/gcc/ada/1ssecsta.ads	Mon Jan  5 15:20:42 2004
--- gcc-4.0.0/gcc/ada/1ssecsta.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,85 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --               S Y S T E M . S E C O N D A R Y _ S T A C K                --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  Version for use in HI-E mode
- 
- with System.Storage_Elements;
- 
- package System.Secondary_Stack is
- 
-    package SSE renames System.Storage_Elements;
- 
-    Default_Secondary_Stack_Size : Natural := 10 * 1024;
-    --  Default size of a secondary stack. May be modified by binder -D switch
- 
-    procedure SS_Init
-      (Stk  : System.Address;
-       Size : Natural := Default_Secondary_Stack_Size);
-    --  Initialize the secondary stack with a main stack of the given Size.
-    --
-    --  Stk is an "in" parameter that is already pointing to a memory area of
-    --  size Size.
-    --
-    --  The secondary stack is fixed, and any attempt to allocate more than the
-    --  initial size will result in a Storage_Error being raised.
- 
-    procedure SS_Allocate
-      (Address      : out System.Address;
-       Storage_Size : SSE.Storage_Count);
-    --  Allocate enough space for a 'Storage_Size' bytes object with Maximum
-    --  alignment. The address of the allocated space is returned in 'Address'
- 
-    procedure SS_Free (Stk : in out System.Address);
-    --  Release the memory allocated for the Secondary Stack. That is to say,
-    --  all the allocated chuncks.
-    --  Upon return, Stk will be set to System.Null_Address
- 
-    type Mark_Id is private;
-    --  Type used to mark the stack.
- 
-    function SS_Mark return Mark_Id;
-    --  Return the Mark corresponding to the current state of the stack
- 
-    procedure SS_Release (M : Mark_Id);
-    --  Restore the state of the stack corresponding to the mark M. If an
-    --  additional chunk have been allocated, it will never be freed during a
- 
- private
- 
-    SS_Pool : Integer;
-    --  Unused entity that is just present to ease the sharing of the pool
-    --  mechanism for specific allocation/deallocation in the compiler
- 
-    type Mark_Id is new SSE.Integer_Address;
- 
- end System.Secondary_Stack;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/31soccon.ads gcc-4.0.0/gcc/ada/31soccon.ads
*** gcc-3.4.3/gcc/ada/31soccon.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/31soccon.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,158 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --               G N A T . S O C K E T S . C O N S T A N T S                --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --          Copyright (C) 2000-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package provides target dependent definitions of constant for use
- --  by the GNAT.Sockets package (g-socket.ads). This package should not be
- --  directly with'ed by an applications program.
- 
- --  This is the version for UnixWare
- 
- package GNAT.Sockets.Constants is
- 
-    --------------
-    -- Families --
-    --------------
- 
-    AF_INET            : constant :=            2; --  IPv4 address family
-    AF_INET6           : constant :=           27; --  IPv6 address family
- 
-    -----------
-    -- Modes --
-    -----------
- 
-    SOCK_STREAM        : constant :=            2; --  Stream socket
-    SOCK_DGRAM         : constant :=            1; --  Datagram socket
- 
-    -------------------
-    -- Socket errors --
-    -------------------
- 
-    EACCES             : constant :=           13; --  Permission denied
-    EADDRINUSE         : constant :=          125; --  Address already in use
-    EADDRNOTAVAIL      : constant :=          126; --  Cannot assign address
-    EAFNOSUPPORT       : constant :=          124; --  Addr family not supported
-    EALREADY           : constant :=          149; --  Operation in progress
-    EBADF              : constant :=            9; --  Bad file descriptor
-    ECONNABORTED       : constant :=          130; --  Connection aborted
-    ECONNREFUSED       : constant :=          146; --  Connection refused
-    ECONNRESET         : constant :=          131; --  Connection reset by peer
-    EDESTADDRREQ       : constant :=           96; --  Destination addr required
-    EFAULT             : constant :=           14; --  Bad address
-    EHOSTDOWN          : constant :=          147; --  Host is down
-    EHOSTUNREACH       : constant :=          148; --  No route to host
-    EINPROGRESS        : constant :=          150; --  Operation now in progress
-    EINTR              : constant :=            4; --  Interrupted system call
-    EINVAL             : constant :=           22; --  Invalid argument
-    EIO                : constant :=            5; --  Input output error
-    EISCONN            : constant :=          133; --  Socket already connected
-    ELOOP              : constant :=           90; --  Too many symbolic lynks
-    EMFILE             : constant :=           24; --  Too many open files
-    EMSGSIZE           : constant :=           97; --  Message too long
-    ENAMETOOLONG       : constant :=           78; --  Name too long
-    ENETDOWN           : constant :=          127; --  Network is down
-    ENETRESET          : constant :=          129; --  Disconn. on network reset
-    ENETUNREACH        : constant :=          128; --  Network is unreachable
-    ENOBUFS            : constant :=          132; --  No buffer space available
-    ENOPROTOOPT        : constant :=           99; --  Protocol not available
-    ENOTCONN           : constant :=          134; --  Socket not connected
-    ENOTSOCK           : constant :=           95; --  Operation on non socket
-    EOPNOTSUPP         : constant :=          122; --  Operation not supported
-    EPFNOSUPPORT       : constant :=          123; --  Unknown protocol family
-    EPROTONOSUPPORT    : constant :=          120; --  Unknown protocol
-    EPROTOTYPE         : constant :=           98; --  Unknown protocol type
-    ESHUTDOWN          : constant :=          143; --  Cannot send once shutdown
-    ESOCKTNOSUPPORT    : constant :=          121; --  Socket type not supported
-    ETIMEDOUT          : constant :=          145; --  Connection timed out
-    ETOOMANYREFS       : constant :=          144; --  Too many references
-    EWOULDBLOCK        : constant :=           11; --  Operation would block
- 
-    -----------------
-    -- Host errors --
-    -----------------
- 
-    HOST_NOT_FOUND     : constant :=            1; --  Unknown host
-    TRY_AGAIN          : constant :=            2; --  Host name lookup failure
-    NO_DATA            : constant :=            4; --  No data record for name
-    NO_RECOVERY        : constant :=            3; --  Non recoverable errors
- 
-    -------------------
-    -- Control flags --
-    -------------------
- 
-    FIONBIO            : constant :=  -2147195266; --  Set/clear non-blocking io
-    FIONREAD           : constant :=   1074030207; --  How many bytes to read
- 
-    --------------------
-    -- Shutdown modes --
-    --------------------
- 
-    SHUT_RD            : constant :=            0; --  No more recv
-    SHUT_WR            : constant :=            1; --  No more send
-    SHUT_RDWR          : constant :=            2; --  No more recv/send
- 
-    ---------------------
-    -- Protocol levels --
-    ---------------------
- 
-    SOL_SOCKET         : constant :=        65535; --  Options for socket level
-    IPPROTO_IP         : constant :=            0; --  Dummy protocol for IP
-    IPPROTO_UDP        : constant :=           17; --  UDP
-    IPPROTO_TCP        : constant :=            6; --  TCP
- 
-    -------------------
-    -- Request flags --
-    -------------------
- 
-    MSG_OOB            : constant :=            1; --  Process out-of-band data
-    MSG_PEEK           : constant :=            2; --  Peek at incoming data
-    MSG_EOR            : constant :=            8; --  Send end of record
-    MSG_WAITALL        : constant :=           64; --  Wait for full reception
- 
-    --------------------
-    -- Socket options --
-    --------------------
- 
-    TCP_NODELAY        : constant :=            1; --  Do not coalesce packets
-    SO_SNDBUF          : constant :=         4097; --  Set/get send buffer size
-    SO_RCVBUF          : constant :=         4098; --  Set/get recv buffer size
-    SO_REUSEADDR       : constant :=            4; --  Bind reuse local address
-    SO_KEEPALIVE       : constant :=            8; --  Enable keep-alive msgs
-    SO_LINGER          : constant :=          128; --  Defer close to flush data
-    SO_ERROR           : constant :=         4103; --  Get/clear error status
-    SO_BROADCAST       : constant :=           32; --  Can send broadcast msgs
-    IP_ADD_MEMBERSHIP  : constant :=           11; --  Join a multicast group
-    IP_DROP_MEMBERSHIP : constant :=           12; --  Leave a multicast group
-    IP_MULTICAST_TTL   : constant :=           16; --  Set/get multicast TTL
-    IP_MULTICAST_LOOP  : constant :=           10; --  Set/get mcast loopback
- 
- end GNAT.Sockets.Constants;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/31soliop.ads gcc-4.0.0/gcc/ada/31soliop.ads
*** gcc-3.4.3/gcc/ada/31soliop.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/31soliop.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,43 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --          G N A T . S O C K E T S . L I N K E R _ O P T I O N S           --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --            Copyright (C) 2002-2003 Ada Core Technologies, Inc.           --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package is used to provide target specific linker_options for the
- --  support of scokets as required by the package GNAT.Sockets.
- 
- --  This is the UnixWare version of this package
- 
- package GNAT.Sockets.Linker_Options is
- private
-    pragma Linker_Options ("-lnsl");
-    pragma Linker_Options ("-lsocket");
- end GNAT.Sockets.Linker_Options;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/35soccon.ads gcc-4.0.0/gcc/ada/35soccon.ads
*** gcc-3.4.3/gcc/ada/35soccon.ads	Thu Nov 20 17:51:26 2003
--- gcc-4.0.0/gcc/ada/35soccon.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,158 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --               G N A T . S O C K E T S . C O N S T A N T S                --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --          Copyright (C) 2000-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package provides target dependent definitions of constant for use
- --  by the GNAT.Sockets package (g-socket.ads). This package should not be
- --  directly with'ed by an applications program.
- 
- --  This is the version for i386 FreeBSD
- 
- package GNAT.Sockets.Constants is
- 
-    --------------
-    -- Families --
-    --------------
- 
-    AF_INET            : constant :=            2; --  IPv4 address family
-    AF_INET6           : constant :=           28; --  IPv6 address family
- 
-    -----------
-    -- Modes --
-    -----------
- 
-    SOCK_STREAM        : constant :=            1; --  Stream socket
-    SOCK_DGRAM         : constant :=            2; --  Datagram socket
- 
-    -------------------
-    -- Socket errors --
-    -------------------
- 
-    EACCES             : constant :=           13; --  Permission denied
-    EADDRINUSE         : constant :=           48; --  Address already in use
-    EADDRNOTAVAIL      : constant :=           49; --  Cannot assign address
-    EAFNOSUPPORT       : constant :=           47; --  Addr family not supported
-    EALREADY           : constant :=           37; --  Operation in progress
-    EBADF              : constant :=            9; --  Bad file descriptor
-    ECONNABORTED       : constant :=           53; --  Connection aborted
-    ECONNREFUSED       : constant :=           61; --  Connection refused
-    ECONNRESET         : constant :=           54; --  Connection reset by peer
-    EDESTADDRREQ       : constant :=           39; --  Destination addr required
-    EFAULT             : constant :=           14; --  Bad address
-    EHOSTDOWN          : constant :=           64; --  Host is down
-    EHOSTUNREACH       : constant :=           65; --  No route to host
-    EINPROGRESS        : constant :=           36; --  Operation now in progress
-    EINTR              : constant :=            4; --  Interrupted system call
-    EINVAL             : constant :=           22; --  Invalid argument
-    EIO                : constant :=            5; --  Input output error
-    EISCONN            : constant :=           56; --  Socket already connected
-    ELOOP              : constant :=           62; --  Too many symbolic lynks
-    EMFILE             : constant :=           24; --  Too many open files
-    EMSGSIZE           : constant :=           40; --  Message too long
-    ENAMETOOLONG       : constant :=           63; --  Name too long
-    ENETDOWN           : constant :=           50; --  Network is down
-    ENETRESET          : constant :=           52; --  Disconn. on network reset
-    ENETUNREACH        : constant :=           51; --  Network is unreachable
-    ENOBUFS            : constant :=           55; --  No buffer space available
-    ENOPROTOOPT        : constant :=           42; --  Protocol not available
-    ENOTCONN           : constant :=           57; --  Socket not connected
-    ENOTSOCK           : constant :=           38; --  Operation on non socket
-    EOPNOTSUPP         : constant :=           45; --  Operation not supported
-    EPFNOSUPPORT       : constant :=           46; --  Unknown protocol family
-    EPROTONOSUPPORT    : constant :=           43; --  Unknown protocol
-    EPROTOTYPE         : constant :=           41; --  Unknown protocol type
-    ESHUTDOWN          : constant :=           58; --  Cannot send once shutdown
-    ESOCKTNOSUPPORT    : constant :=           44; --  Socket type not supported
-    ETIMEDOUT          : constant :=           60; --  Connection timed out
-    ETOOMANYREFS       : constant :=           59; --  Too many references
-    EWOULDBLOCK        : constant :=           35; --  Operation would block
- 
-    -----------------
-    -- Host errors --
-    -----------------
- 
-    HOST_NOT_FOUND     : constant :=            1; --  Unknown host
-    TRY_AGAIN          : constant :=            2; --  Host name lookup failure
-    NO_DATA            : constant :=            4; --  No data record for name
-    NO_RECOVERY        : constant :=            3; --  Non recoverable errors
- 
-    -------------------
-    -- Control flags --
-    -------------------
- 
-    FIONBIO            : constant :=  -2147195266; --  Set/clear non-blocking io
-    FIONREAD           : constant :=   1074030207; --  How many bytes to read
- 
-    --------------------
-    -- Shutdown modes --
-    --------------------
- 
-    SHUT_RD            : constant :=            0; --  No more recv
-    SHUT_WR            : constant :=            1; --  No more send
-    SHUT_RDWR          : constant :=            2; --  No more recv/send
- 
-    ---------------------
-    -- Protocol levels --
-    ---------------------
- 
-    SOL_SOCKET         : constant :=        65535; --  Options for socket level
-    IPPROTO_IP         : constant :=            0; --  Dummy protocol for IP
-    IPPROTO_UDP        : constant :=           17; --  UDP
-    IPPROTO_TCP        : constant :=            6; --  TCP
- 
-    -------------------
-    -- Request flags --
-    -------------------
- 
-    MSG_OOB            : constant :=            1; --  Process out-of-band data
-    MSG_PEEK           : constant :=            2; --  Peek at incoming data
-    MSG_EOR            : constant :=            8; --  Send end of record
-    MSG_WAITALL        : constant :=           64; --  Wait for full reception
- 
-    --------------------
-    -- Socket options --
-    --------------------
- 
-    TCP_NODELAY        : constant :=            1; --  Do not coalesce packets
-    SO_SNDBUF          : constant :=         4097; --  Set/get send buffer size
-    SO_RCVBUF          : constant :=         4098; --  Set/get recv buffer size
-    SO_REUSEADDR       : constant :=            4; --  Bind reuse local address
-    SO_KEEPALIVE       : constant :=            8; --  Enable keep-alive msgs
-    SO_LINGER          : constant :=          128; --  Defer close to flush data
-    SO_ERROR           : constant :=         4103; --  Get/clear error status
-    SO_BROADCAST       : constant :=           32; --  Can send broadcast msgs
-    IP_ADD_MEMBERSHIP  : constant :=           12; --  Join a multicast group
-    IP_DROP_MEMBERSHIP : constant :=           13; --  Leave a multicast group
-    IP_MULTICAST_TTL   : constant :=           10; --  Set/get multicast TTL
-    IP_MULTICAST_LOOP  : constant :=           11; --  Set/get mcast loopback
- 
- end GNAT.Sockets.Constants;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/3asoccon.ads gcc-4.0.0/gcc/ada/3asoccon.ads
*** gcc-3.4.3/gcc/ada/3asoccon.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/3asoccon.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,158 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --               G N A T . S O C K E T S . C O N S T A N T S                --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --          Copyright (C) 2000-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package provides target dependent definitions of constant for use
- --  by the GNAT.Sockets package (g-socket.ads). This package should not be
- --  directly with'ed by an applications program.
- 
- --  This is the version for OSF
- 
- package GNAT.Sockets.Constants is
- 
-    --------------
-    -- Families --
-    --------------
- 
-    AF_INET            : constant :=            2; --  IPv4 address family
-    AF_INET6           : constant :=           26; --  IPv6 address family
- 
-    -----------
-    -- Modes --
-    -----------
- 
-    SOCK_STREAM        : constant :=            1; --  Stream socket
-    SOCK_DGRAM         : constant :=            2; --  Datagram socket
- 
-    -------------------
-    -- Socket errors --
-    -------------------
- 
-    EACCES             : constant :=           13; --  Permission denied
-    EADDRINUSE         : constant :=           48; --  Address already in use
-    EADDRNOTAVAIL      : constant :=           49; --  Cannot assign address
-    EAFNOSUPPORT       : constant :=           47; --  Addr family not supported
-    EALREADY           : constant :=           37; --  Operation in progress
-    EBADF              : constant :=            9; --  Bad file descriptor
-    ECONNABORTED       : constant :=           53; --  Connection aborted
-    ECONNREFUSED       : constant :=           61; --  Connection refused
-    ECONNRESET         : constant :=           54; --  Connection reset by peer
-    EDESTADDRREQ       : constant :=           39; --  Destination addr required
-    EFAULT             : constant :=           14; --  Bad address
-    EHOSTDOWN          : constant :=           64; --  Host is down
-    EHOSTUNREACH       : constant :=           65; --  No route to host
-    EINPROGRESS        : constant :=           36; --  Operation now in progress
-    EINTR              : constant :=            4; --  Interrupted system call
-    EINVAL             : constant :=           22; --  Invalid argument
-    EIO                : constant :=            5; --  Input output error
-    EISCONN            : constant :=           56; --  Socket already connected
-    ELOOP              : constant :=           62; --  Too many symbolic lynks
-    EMFILE             : constant :=           24; --  Too many open files
-    EMSGSIZE           : constant :=           40; --  Message too long
-    ENAMETOOLONG       : constant :=           63; --  Name too long
-    ENETDOWN           : constant :=           50; --  Network is down
-    ENETRESET          : constant :=           52; --  Disconn. on network reset
-    ENETUNREACH        : constant :=           51; --  Network is unreachable
-    ENOBUFS            : constant :=           55; --  No buffer space available
-    ENOPROTOOPT        : constant :=           42; --  Protocol not available
-    ENOTCONN           : constant :=           57; --  Socket not connected
-    ENOTSOCK           : constant :=           38; --  Operation on non socket
-    EOPNOTSUPP         : constant :=           45; --  Operation not supported
-    EPFNOSUPPORT       : constant :=           46; --  Unknown protocol family
-    EPROTONOSUPPORT    : constant :=           43; --  Unknown protocol
-    EPROTOTYPE         : constant :=           41; --  Unknown protocol type
-    ESHUTDOWN          : constant :=           58; --  Cannot send once shutdown
-    ESOCKTNOSUPPORT    : constant :=           44; --  Socket type not supported
-    ETIMEDOUT          : constant :=           60; --  Connection timed out
-    ETOOMANYREFS       : constant :=           59; --  Too many references
-    EWOULDBLOCK        : constant :=           35; --  Operation would block
- 
-    -----------------
-    -- Host errors --
-    -----------------
- 
-    HOST_NOT_FOUND     : constant :=            1; --  Unknown host
-    TRY_AGAIN          : constant :=            2; --  Host name lookup failure
-    NO_DATA            : constant :=            4; --  No data record for name
-    NO_RECOVERY        : constant :=            3; --  Non recoverable errors
- 
-    -------------------
-    -- Control flags --
-    -------------------
- 
-    FIONBIO            : constant :=  -2147195266; --  Set/clear non-blocking io
-    FIONREAD           : constant :=   1074030207; --  How many bytes to read
- 
-    --------------------
-    -- Shutdown modes --
-    --------------------
- 
-    SHUT_RD            : constant :=            0; --  No more recv
-    SHUT_WR            : constant :=            1; --  No more send
-    SHUT_RDWR          : constant :=            2; --  No more recv/send
- 
-    ---------------------
-    -- Protocol levels --
-    ---------------------
- 
-    SOL_SOCKET         : constant :=        65535; --  Options for socket level
-    IPPROTO_IP         : constant :=            0; --  Dummy protocol for IP
-    IPPROTO_UDP        : constant :=           17; --  UDP
-    IPPROTO_TCP        : constant :=            6; --  TCP
- 
-    -------------------
-    -- Request flags --
-    -------------------
- 
-    MSG_OOB            : constant :=            1; --  Process out-of-band data
-    MSG_PEEK           : constant :=            2; --  Peek at incoming data
-    MSG_EOR            : constant :=            8; --  Send end of record
-    MSG_WAITALL        : constant :=           64; --  Wait for full reception
- 
-    --------------------
-    -- Socket options --
-    --------------------
- 
-    TCP_NODELAY        : constant :=            1; --  Do not coalesce packets
-    SO_SNDBUF          : constant :=         4097; --  Set/get send buffer size
-    SO_RCVBUF          : constant :=         4098; --  Set/get recv buffer size
-    SO_REUSEADDR       : constant :=            4; --  Bind reuse local address
-    SO_KEEPALIVE       : constant :=            8; --  Enable keep-alive msgs
-    SO_LINGER          : constant :=          128; --  Defer close to flush data
-    SO_ERROR           : constant :=         4103; --  Get/clear error status
-    SO_BROADCAST       : constant :=           32; --  Can send broadcast msgs
-    IP_ADD_MEMBERSHIP  : constant :=           12; --  Join a multicast group
-    IP_DROP_MEMBERSHIP : constant :=           13; --  Leave a multicast group
-    IP_MULTICAST_TTL   : constant :=           10; --  Set/get multicast TTL
-    IP_MULTICAST_LOOP  : constant :=           11; --  Set/get mcast loopback
- 
- end GNAT.Sockets.Constants;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/3bsoccon.ads gcc-4.0.0/gcc/ada/3bsoccon.ads
*** gcc-3.4.3/gcc/ada/3bsoccon.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/3bsoccon.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,158 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --               G N A T . S O C K E T S . C O N S T A N T S                --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --          Copyright (C) 2000-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package provides target dependent definitions of constant for use
- --  by the GNAT.Sockets package (g-socket.ads). This package should not be
- --  directly with'ed by an applications program.
- 
- --  This is the version for AIX
- 
- package GNAT.Sockets.Constants is
- 
-    --------------
-    -- Families --
-    --------------
- 
-    AF_INET            : constant :=            2; --  IPv4 address family
-    AF_INET6           : constant :=           24; --  IPv6 address family
- 
-    -----------
-    -- Modes --
-    -----------
- 
-    SOCK_STREAM        : constant :=            1; --  Stream socket
-    SOCK_DGRAM         : constant :=            2; --  Datagram socket
- 
-    -------------------
-    -- Socket errors --
-    -------------------
- 
-    EACCES             : constant :=           13; --  Permission denied
-    EADDRINUSE         : constant :=           67; --  Address already in use
-    EADDRNOTAVAIL      : constant :=           68; --  Cannot assign address
-    EAFNOSUPPORT       : constant :=           66; --  Addr family not supported
-    EALREADY           : constant :=           56; --  Operation in progress
-    EBADF              : constant :=            9; --  Bad file descriptor
-    ECONNABORTED       : constant :=           72; --  Connection aborted
-    ECONNREFUSED       : constant :=           79; --  Connection refused
-    ECONNRESET         : constant :=           73; --  Connection reset by peer
-    EDESTADDRREQ       : constant :=           58; --  Destination addr required
-    EFAULT             : constant :=           14; --  Bad address
-    EHOSTDOWN          : constant :=           80; --  Host is down
-    EHOSTUNREACH       : constant :=           81; --  No route to host
-    EINPROGRESS        : constant :=           55; --  Operation now in progress
-    EINTR              : constant :=            4; --  Interrupted system call
-    EINVAL             : constant :=           22; --  Invalid argument
-    EIO                : constant :=            5; --  Input output error
-    EISCONN            : constant :=           75; --  Socket already connected
-    ELOOP              : constant :=           85; --  Too many symbolic lynks
-    EMFILE             : constant :=           24; --  Too many open files
-    EMSGSIZE           : constant :=           59; --  Message too long
-    ENAMETOOLONG       : constant :=           86; --  Name too long
-    ENETDOWN           : constant :=           69; --  Network is down
-    ENETRESET          : constant :=           71; --  Disconn. on network reset
-    ENETUNREACH        : constant :=           70; --  Network is unreachable
-    ENOBUFS            : constant :=           74; --  No buffer space available
-    ENOPROTOOPT        : constant :=           61; --  Protocol not available
-    ENOTCONN           : constant :=           76; --  Socket not connected
-    ENOTSOCK           : constant :=           57; --  Operation on non socket
-    EOPNOTSUPP         : constant :=           64; --  Operation not supported
-    EPFNOSUPPORT       : constant :=           65; --  Unknown protocol family
-    EPROTONOSUPPORT    : constant :=           62; --  Unknown protocol
-    EPROTOTYPE         : constant :=           60; --  Unknown protocol type
-    ESHUTDOWN          : constant :=           77; --  Cannot send once shutdown
-    ESOCKTNOSUPPORT    : constant :=           63; --  Socket type not supported
-    ETIMEDOUT          : constant :=           78; --  Connection timed out
-    ETOOMANYREFS       : constant :=          115; --  Too many references
-    EWOULDBLOCK        : constant :=           11; --  Operation would block
- 
-    -----------------
-    -- Host errors --
-    -----------------
- 
-    HOST_NOT_FOUND     : constant :=            1; --  Unknown host
-    TRY_AGAIN          : constant :=            2; --  Host name lookup failure
-    NO_DATA            : constant :=            4; --  No data record for name
-    NO_RECOVERY        : constant :=            3; --  Non recoverable errors
- 
-    -------------------
-    -- Control flags --
-    -------------------
- 
-    FIONBIO            : constant :=  -2147195266; --  Set/clear non-blocking io
-    FIONREAD           : constant :=   1074030207; --  How many bytes to read
- 
-    --------------------
-    -- Shutdown modes --
-    --------------------
- 
-    SHUT_RD            : constant :=            0; --  No more recv
-    SHUT_WR            : constant :=            1; --  No more send
-    SHUT_RDWR          : constant :=            2; --  No more recv/send
- 
-    ---------------------
-    -- Protocol levels --
-    ---------------------
- 
-    SOL_SOCKET         : constant :=        65535; --  Options for socket level
-    IPPROTO_IP         : constant :=            0; --  Dummy protocol for IP
-    IPPROTO_UDP        : constant :=           17; --  UDP
-    IPPROTO_TCP        : constant :=            6; --  TCP
- 
-    -------------------
-    -- Request flags --
-    -------------------
- 
-    MSG_OOB            : constant :=            1; --  Process out-of-band data
-    MSG_PEEK           : constant :=            2; --  Peek at incoming data
-    MSG_EOR            : constant :=            8; --  Send end of record
-    MSG_WAITALL        : constant :=           64; --  Wait for full reception
- 
-    --------------------
-    -- Socket options --
-    --------------------
- 
-    TCP_NODELAY        : constant :=            1; --  Do not coalesce packets
-    SO_SNDBUF          : constant :=         4097; --  Set/get send buffer size
-    SO_RCVBUF          : constant :=         4098; --  Set/get recv buffer size
-    SO_REUSEADDR       : constant :=            4; --  Bind reuse local address
-    SO_KEEPALIVE       : constant :=            8; --  Enable keep-alive msgs
-    SO_LINGER          : constant :=          128; --  Defer close to flush data
-    SO_ERROR           : constant :=         4103; --  Get/clear error status
-    SO_BROADCAST       : constant :=           32; --  Can send broadcast msgs
-    IP_ADD_MEMBERSHIP  : constant :=           12; --  Join a multicast group
-    IP_DROP_MEMBERSHIP : constant :=           13; --  Leave a multicast group
-    IP_MULTICAST_TTL   : constant :=           10; --  Set/get multicast TTL
-    IP_MULTICAST_LOOP  : constant :=           11; --  Set/get mcast loopback
- 
- end GNAT.Sockets.Constants;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/3gsoccon.ads gcc-4.0.0/gcc/ada/3gsoccon.ads
*** gcc-3.4.3/gcc/ada/3gsoccon.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/3gsoccon.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,158 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --               G N A T . S O C K E T S . C O N S T A N T S                --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --          Copyright (C) 2000-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package provides target dependent definitions of constant for use
- --  by the GNAT.Sockets package (g-socket.ads). This package should not be
- --  directly with'ed by an applications program.
- 
- --  This is the version for SGI
- 
- package GNAT.Sockets.Constants is
- 
-    --------------
-    -- Families --
-    --------------
- 
-    AF_INET            : constant :=            2; --  IPv4 address family
-    AF_INET6           : constant :=           24; --  IPv6 address family
- 
-    -----------
-    -- Modes --
-    -----------
- 
-    SOCK_STREAM        : constant :=            2; --  Stream socket
-    SOCK_DGRAM         : constant :=            1; --  Datagram socket
- 
-    -------------------
-    -- Socket errors --
-    -------------------
- 
-    EACCES             : constant :=           13; --  Permission denied
-    EADDRINUSE         : constant :=          125; --  Address already in use
-    EADDRNOTAVAIL      : constant :=          126; --  Cannot assign address
-    EAFNOSUPPORT       : constant :=          124; --  Addr family not supported
-    EALREADY           : constant :=          149; --  Operation in progress
-    EBADF              : constant :=            9; --  Bad file descriptor
-    ECONNABORTED       : constant :=          130; --  Connection aborted
-    ECONNREFUSED       : constant :=          146; --  Connection refused
-    ECONNRESET         : constant :=          131; --  Connection reset by peer
-    EDESTADDRREQ       : constant :=           96; --  Destination addr required
-    EFAULT             : constant :=           14; --  Bad address
-    EHOSTDOWN          : constant :=          147; --  Host is down
-    EHOSTUNREACH       : constant :=          148; --  No route to host
-    EINPROGRESS        : constant :=          150; --  Operation now in progress
-    EINTR              : constant :=            4; --  Interrupted system call
-    EINVAL             : constant :=           22; --  Invalid argument
-    EIO                : constant :=            5; --  Input output error
-    EISCONN            : constant :=          133; --  Socket already connected
-    ELOOP              : constant :=           90; --  Too many symbolic lynks
-    EMFILE             : constant :=           24; --  Too many open files
-    EMSGSIZE           : constant :=           97; --  Message too long
-    ENAMETOOLONG       : constant :=           78; --  Name too long
-    ENETDOWN           : constant :=          127; --  Network is down
-    ENETRESET          : constant :=          129; --  Disconn. on network reset
-    ENETUNREACH        : constant :=          128; --  Network is unreachable
-    ENOBUFS            : constant :=          132; --  No buffer space available
-    ENOPROTOOPT        : constant :=           99; --  Protocol not available
-    ENOTCONN           : constant :=          134; --  Socket not connected
-    ENOTSOCK           : constant :=           95; --  Operation on non socket
-    EOPNOTSUPP         : constant :=          122; --  Operation not supported
-    EPFNOSUPPORT       : constant :=          123; --  Unknown protocol family
-    EPROTONOSUPPORT    : constant :=          120; --  Unknown protocol
-    EPROTOTYPE         : constant :=           98; --  Unknown protocol type
-    ESHUTDOWN          : constant :=          143; --  Cannot send once shutdown
-    ESOCKTNOSUPPORT    : constant :=          121; --  Socket type not supported
-    ETIMEDOUT          : constant :=          145; --  Connection timed out
-    ETOOMANYREFS       : constant :=          144; --  Too many references
-    EWOULDBLOCK        : constant :=           11; --  Operation would block
- 
-    -----------------
-    -- Host errors --
-    -----------------
- 
-    HOST_NOT_FOUND     : constant :=            1; --  Unknown host
-    TRY_AGAIN          : constant :=            2; --  Host name lookup failure
-    NO_DATA            : constant :=            4; --  No data record for name
-    NO_RECOVERY        : constant :=            3; --  Non recoverable errors
- 
-    -------------------
-    -- Control flags --
-    -------------------
- 
-    FIONBIO            : constant :=  -2147195266; --  Set/clear non-blocking io
-    FIONREAD           : constant :=   1074030207; --  How many bytes to read
- 
-    --------------------
-    -- Shutdown modes --
-    --------------------
- 
-    SHUT_RD            : constant :=            0; --  No more recv
-    SHUT_WR            : constant :=            1; --  No more send
-    SHUT_RDWR          : constant :=            2; --  No more recv/send
- 
-    ---------------------
-    -- Protocol levels --
-    ---------------------
- 
-    SOL_SOCKET         : constant :=        65535; --  Options for socket level
-    IPPROTO_IP         : constant :=            0; --  Dummy protocol for IP
-    IPPROTO_UDP        : constant :=           17; --  UDP
-    IPPROTO_TCP        : constant :=            6; --  TCP
- 
-    -------------------
-    -- Request flags --
-    -------------------
- 
-    MSG_OOB            : constant :=            1; --  Process out-of-band data
-    MSG_PEEK           : constant :=            2; --  Peek at incoming data
-    MSG_EOR            : constant :=            8; --  Send end of record
-    MSG_WAITALL        : constant :=           64; --  Wait for full reception
- 
-    --------------------
-    -- Socket options --
-    --------------------
- 
-    TCP_NODELAY        : constant :=            1; --  Do not coalesce packets
-    SO_SNDBUF          : constant :=         4097; --  Set/get send buffer size
-    SO_RCVBUF          : constant :=         4098; --  Set/get recv buffer size
-    SO_REUSEADDR       : constant :=            4; --  Bind reuse local address
-    SO_KEEPALIVE       : constant :=            8; --  Enable keep-alive msgs
-    SO_LINGER          : constant :=          128; --  Defer close to flush data
-    SO_ERROR           : constant :=         4103; --  Get/clear error status
-    SO_BROADCAST       : constant :=           32; --  Can send broadcast msgs
-    IP_ADD_MEMBERSHIP  : constant :=           23; --  Join a multicast group
-    IP_DROP_MEMBERSHIP : constant :=           24; --  Leave a multicast group
-    IP_MULTICAST_TTL   : constant :=           21; --  Set/get multicast TTL
-    IP_MULTICAST_LOOP  : constant :=           22; --  Set/get mcast loopback
- 
- end GNAT.Sockets.Constants;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/3hsoccon.ads gcc-4.0.0/gcc/ada/3hsoccon.ads
*** gcc-3.4.3/gcc/ada/3hsoccon.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/3hsoccon.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,158 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --               G N A T . S O C K E T S . C O N S T A N T S                --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --          Copyright (C) 2000-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package provides target dependent definitions of constant for use
- --  by the GNAT.Sockets package (g-socket.ads). This package should not be
- --  directly with'ed by an applications program.
- 
- --  This is the version for HP/UX
- 
- package GNAT.Sockets.Constants is
- 
-    --------------
-    -- Families --
-    --------------
- 
-    AF_INET            : constant :=            2; --  IPv4 address family
-    AF_INET6           : constant :=           26; --  IPv6 address family
- 
-    -----------
-    -- Modes --
-    -----------
- 
-    SOCK_STREAM        : constant :=            1; --  Stream socket
-    SOCK_DGRAM         : constant :=            2; --  Datagram socket
- 
-    -------------------
-    -- Socket errors --
-    -------------------
- 
-    EACCES             : constant :=           13; --  Permission denied
-    EADDRINUSE         : constant :=          226; --  Address already in use
-    EADDRNOTAVAIL      : constant :=          227; --  Cannot assign address
-    EAFNOSUPPORT       : constant :=          225; --  Addr family not supported
-    EALREADY           : constant :=          244; --  Operation in progress
-    EBADF              : constant :=            9; --  Bad file descriptor
-    ECONNABORTED       : constant :=          231; --  Connection aborted
-    ECONNREFUSED       : constant :=          239; --  Connection refused
-    ECONNRESET         : constant :=          232; --  Connection reset by peer
-    EDESTADDRREQ       : constant :=          217; --  Destination addr required
-    EFAULT             : constant :=           14; --  Bad address
-    EHOSTDOWN          : constant :=          241; --  Host is down
-    EHOSTUNREACH       : constant :=          242; --  No route to host
-    EINPROGRESS        : constant :=          245; --  Operation now in progress
-    EINTR              : constant :=            4; --  Interrupted system call
-    EINVAL             : constant :=           22; --  Invalid argument
-    EIO                : constant :=            5; --  Input output error
-    EISCONN            : constant :=          234; --  Socket already connected
-    ELOOP              : constant :=          249; --  Too many symbolic lynks
-    EMFILE             : constant :=           24; --  Too many open files
-    EMSGSIZE           : constant :=          218; --  Message too long
-    ENAMETOOLONG       : constant :=          248; --  Name too long
-    ENETDOWN           : constant :=          228; --  Network is down
-    ENETRESET          : constant :=          230; --  Disconn. on network reset
-    ENETUNREACH        : constant :=          229; --  Network is unreachable
-    ENOBUFS            : constant :=          233; --  No buffer space available
-    ENOPROTOOPT        : constant :=          220; --  Protocol not available
-    ENOTCONN           : constant :=          235; --  Socket not connected
-    ENOTSOCK           : constant :=          216; --  Operation on non socket
-    EOPNOTSUPP         : constant :=          223; --  Operation not supported
-    EPFNOSUPPORT       : constant :=          224; --  Unknown protocol family
-    EPROTONOSUPPORT    : constant :=          221; --  Unknown protocol
-    EPROTOTYPE         : constant :=          219; --  Unknown protocol type
-    ESHUTDOWN          : constant :=          236; --  Cannot send once shutdown
-    ESOCKTNOSUPPORT    : constant :=          222; --  Socket type not supported
-    ETIMEDOUT          : constant :=          238; --  Connection timed out
-    ETOOMANYREFS       : constant :=          237; --  Too many references
-    EWOULDBLOCK        : constant :=          246; --  Operation would block
- 
-    -----------------
-    -- Host errors --
-    -----------------
- 
-    HOST_NOT_FOUND     : constant :=            1; --  Unknown host
-    TRY_AGAIN          : constant :=            2; --  Host name lookup failure
-    NO_DATA            : constant :=            4; --  No data record for name
-    NO_RECOVERY        : constant :=            3; --  Non recoverable errors
- 
-    -------------------
-    -- Control flags --
-    -------------------
- 
-    FIONBIO            : constant :=  -2147195266; --  Set/clear non-blocking io
-    FIONREAD           : constant :=   1074030207; --  How many bytes to read
- 
-    --------------------
-    -- Shutdown modes --
-    --------------------
- 
-    SHUT_RD            : constant :=            0; --  No more recv
-    SHUT_WR            : constant :=            1; --  No more send
-    SHUT_RDWR          : constant :=            2; --  No more recv/send
- 
-    ---------------------
-    -- Protocol levels --
-    ---------------------
- 
-    SOL_SOCKET         : constant :=        65535; --  Options for socket level
-    IPPROTO_IP         : constant :=            0; --  Dummy protocol for IP
-    IPPROTO_UDP        : constant :=           17; --  UDP
-    IPPROTO_TCP        : constant :=            6; --  TCP
- 
-    -------------------
-    -- Request flags --
-    -------------------
- 
-    MSG_OOB            : constant :=            1; --  Process out-of-band data
-    MSG_PEEK           : constant :=            2; --  Peek at incoming data
-    MSG_EOR            : constant :=            8; --  Send end of record
-    MSG_WAITALL        : constant :=           64; --  Wait for full reception
- 
-    --------------------
-    -- Socket options --
-    --------------------
- 
-    TCP_NODELAY        : constant :=            1; --  Do not coalesce packets
-    SO_SNDBUF          : constant :=         4097; --  Set/get send buffer size
-    SO_RCVBUF          : constant :=         4098; --  Set/get recv buffer size
-    SO_REUSEADDR       : constant :=            4; --  Bind reuse local address
-    SO_KEEPALIVE       : constant :=            8; --  Enable keep-alive msgs
-    SO_LINGER          : constant :=          128; --  Defer close to flush data
-    SO_ERROR           : constant :=         4103; --  Get/clear error status
-    SO_BROADCAST       : constant :=           32; --  Can send broadcast msgs
-    IP_ADD_MEMBERSHIP  : constant :=            5; --  Join a multicast group
-    IP_DROP_MEMBERSHIP : constant :=            6; --  Leave a multicast group
-    IP_MULTICAST_TTL   : constant :=            3; --  Set/get multicast TTL
-    IP_MULTICAST_LOOP  : constant :=            4; --  Set/get mcast loopback
- 
- end GNAT.Sockets.Constants;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/3psoccon.ads gcc-4.0.0/gcc/ada/3psoccon.ads
*** gcc-3.4.3/gcc/ada/3psoccon.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/3psoccon.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,158 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --               G N A T . S O C K E T S . C O N S T A N T S                --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --          Copyright (C) 2000-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package provides target dependent definitions of constant for use
- --  by the GNAT.Sockets package (g-socket.ads). This package should not be
- --  directly with'ed by an applications program.
- 
- --  This is the version for Interix
- 
- package GNAT.Sockets.Constants is
- 
-    --------------
-    -- Families --
-    --------------
- 
-    AF_INET            : constant :=            2; --  IPv4 address family
-    AF_INET6           : constant :=           -1; --  IPv6 address family
- 
-    -----------
-    -- Modes --
-    -----------
- 
-    SOCK_STREAM        : constant :=            1; --  Stream socket
-    SOCK_DGRAM         : constant :=            2; --  Datagram socket
- 
-    -------------------
-    -- Socket errors --
-    -------------------
- 
-    EACCES             : constant :=           13; --  Permission denied
-    EADDRINUSE         : constant :=           48; --  Address already in use
-    EADDRNOTAVAIL      : constant :=           49; --  Cannot assign address
-    EAFNOSUPPORT       : constant :=           47; --  Addr family not supported
-    EALREADY           : constant :=           37; --  Operation in progress
-    EBADF              : constant :=            9; --  Bad file descriptor
-    ECONNABORTED       : constant :=           53; --  Connection aborted
-    ECONNREFUSED       : constant :=           61; --  Connection refused
-    ECONNRESET         : constant :=           54; --  Connection reset by peer
-    EDESTADDRREQ       : constant :=           82; --  Destination addr required
-    EFAULT             : constant :=           14; --  Bad address
-    EHOSTDOWN          : constant :=           64; --  Host is down
-    EHOSTUNREACH       : constant :=           65; --  No route to host
-    EINPROGRESS        : constant :=           80; --  Operation now in progress
-    EINTR              : constant :=            4; --  Interrupted system call
-    EINVAL             : constant :=           22; --  Invalid argument
-    EIO                : constant :=            5; --  Input output error
-    EISCONN            : constant :=           56; --  Socket already connected
-    ELOOP              : constant :=           62; --  Too many symbolic lynks
-    EMFILE             : constant :=           24; --  Too many open files
-    EMSGSIZE           : constant :=           83; --  Message too long
-    ENAMETOOLONG       : constant :=           38; --  Name too long
-    ENETDOWN           : constant :=           50; --  Network is down
-    ENETRESET          : constant :=           52; --  Disconn. on network reset
-    ENETUNREACH        : constant :=           51; --  Network is unreachable
-    ENOBUFS            : constant :=           55; --  No buffer space available
-    ENOPROTOOPT        : constant :=           85; --  Protocol not available
-    ENOTCONN           : constant :=           57; --  Socket not connected
-    ENOTSOCK           : constant :=           81; --  Operation on non socket
-    EOPNOTSUPP         : constant :=           45; --  Operation not supported
-    EPFNOSUPPORT       : constant :=           46; --  Unknown protocol family
-    EPROTONOSUPPORT    : constant :=           43; --  Unknown protocol
-    EPROTOTYPE         : constant :=           84; --  Unknown protocol type
-    ESHUTDOWN          : constant :=           58; --  Cannot send once shutdown
-    ESOCKTNOSUPPORT    : constant :=           44; --  Socket type not supported
-    ETIMEDOUT          : constant :=           60; --  Connection timed out
-    ETOOMANYREFS       : constant :=           59; --  Too many references
-    EWOULDBLOCK        : constant :=           11; --  Operation would block
- 
-    -----------------
-    -- Host errors --
-    -----------------
- 
-    HOST_NOT_FOUND     : constant :=           90; --  Unknown host
-    TRY_AGAIN          : constant :=           91; --  Host name lookup failure
-    NO_DATA            : constant :=           93; --  No data record for name
-    NO_RECOVERY        : constant :=           92; --  Non recoverable errors
- 
-    -------------------
-    -- Control flags --
-    -------------------
- 
-    FIONBIO            : constant :=  -2147195390; --  Set/clear non-blocking io
-    FIONREAD           : constant :=   1074030081; --  How many bytes to read
- 
-    --------------------
-    -- Shutdown modes --
-    --------------------
- 
-    SHUT_RD            : constant :=            0; --  No more recv
-    SHUT_WR            : constant :=            1; --  No more send
-    SHUT_RDWR          : constant :=            2; --  No more recv/send
- 
-    ---------------------
-    -- Protocol levels --
-    ---------------------
- 
-    SOL_SOCKET         : constant :=        65535; --  Options for socket level
-    IPPROTO_IP         : constant :=            0; --  Dummy protocol for IP
-    IPPROTO_UDP        : constant :=           17; --  UDP
-    IPPROTO_TCP        : constant :=            6; --  TCP
- 
-    -------------------
-    -- Request flags --
-    -------------------
- 
-    MSG_OOB            : constant :=            1; --  Process out-of-band data
-    MSG_PEEK           : constant :=            2; --  Peek at incoming data
-    MSG_EOR            : constant :=            8; --  Send end of record
-    MSG_WAITALL        : constant :=           64; --  Wait for full reception
- 
-    --------------------
-    -- Socket options --
-    --------------------
- 
-    TCP_NODELAY        : constant :=            1; --  Do not coalesce packets
-    SO_SNDBUF          : constant :=         4097; --  Set/get send buffer size
-    SO_RCVBUF          : constant :=         4098; --  Set/get recv buffer size
-    SO_REUSEADDR       : constant :=            4; --  Bind reuse local address
-    SO_KEEPALIVE       : constant :=            8; --  Enable keep-alive msgs
-    SO_LINGER          : constant :=          128; --  Defer close to flush data
-    SO_ERROR           : constant :=         4103; --  Get/clear error status
-    SO_BROADCAST       : constant :=           32; --  Can send broadcast msgs
-    IP_ADD_MEMBERSHIP  : constant :=            5; --  Join a multicast group
-    IP_DROP_MEMBERSHIP : constant :=            6; --  Leave a multicast group
-    IP_MULTICAST_TTL   : constant :=            3; --  Set/get multicast TTL
-    IP_MULTICAST_LOOP  : constant :=            4; --  Set/get mcast loopback
- 
- end GNAT.Sockets.Constants;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/3ssoccon.ads gcc-4.0.0/gcc/ada/3ssoccon.ads
*** gcc-3.4.3/gcc/ada/3ssoccon.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/3ssoccon.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,158 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --               G N A T . S O C K E T S . C O N S T A N T S                --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --          Copyright (C) 2000-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package provides target dependent definitions of constant for use
- --  by the GNAT.Sockets package (g-socket.ads). This package should not be
- --  directly with'ed by an applications program.
- 
- --  This is the version for Solaris
- 
- package GNAT.Sockets.Constants is
- 
-    --------------
-    -- Families --
-    --------------
- 
-    AF_INET            : constant :=            2; --  IPv4 address family
-    AF_INET6           : constant :=           26; --  IPv6 address family
- 
-    -----------
-    -- Modes --
-    -----------
- 
-    SOCK_STREAM        : constant :=            2; --  Stream socket
-    SOCK_DGRAM         : constant :=            1; --  Datagram socket
- 
-    -------------------
-    -- Socket errors --
-    -------------------
- 
-    EACCES             : constant :=           13; --  Permission denied
-    EADDRINUSE         : constant :=          125; --  Address already in use
-    EADDRNOTAVAIL      : constant :=          126; --  Cannot assign address
-    EAFNOSUPPORT       : constant :=          124; --  Addr family not supported
-    EALREADY           : constant :=          149; --  Operation in progress
-    EBADF              : constant :=            9; --  Bad file descriptor
-    ECONNABORTED       : constant :=          130; --  Connection aborted
-    ECONNREFUSED       : constant :=          146; --  Connection refused
-    ECONNRESET         : constant :=          131; --  Connection reset by peer
-    EDESTADDRREQ       : constant :=           96; --  Destination addr required
-    EFAULT             : constant :=           14; --  Bad address
-    EHOSTDOWN          : constant :=          147; --  Host is down
-    EHOSTUNREACH       : constant :=          148; --  No route to host
-    EINPROGRESS        : constant :=          150; --  Operation now in progress
-    EINTR              : constant :=            4; --  Interrupted system call
-    EINVAL             : constant :=           22; --  Invalid argument
-    EIO                : constant :=            5; --  Input output error
-    EISCONN            : constant :=          133; --  Socket already connected
-    ELOOP              : constant :=           90; --  Too many symbolic lynks
-    EMFILE             : constant :=           24; --  Too many open files
-    EMSGSIZE           : constant :=           97; --  Message too long
-    ENAMETOOLONG       : constant :=           78; --  Name too long
-    ENETDOWN           : constant :=          127; --  Network is down
-    ENETRESET          : constant :=          129; --  Disconn. on network reset
-    ENETUNREACH        : constant :=          128; --  Network is unreachable
-    ENOBUFS            : constant :=          132; --  No buffer space available
-    ENOPROTOOPT        : constant :=           99; --  Protocol not available
-    ENOTCONN           : constant :=          134; --  Socket not connected
-    ENOTSOCK           : constant :=           95; --  Operation on non socket
-    EOPNOTSUPP         : constant :=          122; --  Operation not supported
-    EPFNOSUPPORT       : constant :=          123; --  Unknown protocol family
-    EPROTONOSUPPORT    : constant :=          120; --  Unknown protocol
-    EPROTOTYPE         : constant :=           98; --  Unknown protocol type
-    ESHUTDOWN          : constant :=          143; --  Cannot send once shutdown
-    ESOCKTNOSUPPORT    : constant :=          121; --  Socket type not supported
-    ETIMEDOUT          : constant :=          145; --  Connection timed out
-    ETOOMANYREFS       : constant :=          144; --  Too many references
-    EWOULDBLOCK        : constant :=           11; --  Operation would block
- 
-    -----------------
-    -- Host errors --
-    -----------------
- 
-    HOST_NOT_FOUND     : constant :=            1; --  Unknown host
-    TRY_AGAIN          : constant :=            2; --  Host name lookup failure
-    NO_DATA            : constant :=            4; --  No data record for name
-    NO_RECOVERY        : constant :=            3; --  Non recoverable errors
- 
-    -------------------
-    -- Control flags --
-    -------------------
- 
-    FIONBIO            : constant :=  -2147195266; --  Set/clear non-blocking io
-    FIONREAD           : constant :=   1074030207; --  How many bytes to read
- 
-    --------------------
-    -- Shutdown modes --
-    --------------------
- 
-    SHUT_RD            : constant :=            0; --  No more recv
-    SHUT_WR            : constant :=            1; --  No more send
-    SHUT_RDWR          : constant :=            2; --  No more recv/send
- 
-    ---------------------
-    -- Protocol levels --
-    ---------------------
- 
-    SOL_SOCKET         : constant :=        65535; --  Options for socket level
-    IPPROTO_IP         : constant :=            0; --  Dummy protocol for IP
-    IPPROTO_UDP        : constant :=           17; --  UDP
-    IPPROTO_TCP        : constant :=            6; --  TCP
- 
-    -------------------
-    -- Request flags --
-    -------------------
- 
-    MSG_OOB            : constant :=            1; --  Process out-of-band data
-    MSG_PEEK           : constant :=            2; --  Peek at incoming data
-    MSG_EOR            : constant :=            8; --  Send end of record
-    MSG_WAITALL        : constant :=           64; --  Wait for full reception
- 
-    --------------------
-    -- Socket options --
-    --------------------
- 
-    TCP_NODELAY        : constant :=            1; --  Do not coalesce packets
-    SO_SNDBUF          : constant :=         4097; --  Set/get send buffer size
-    SO_RCVBUF          : constant :=         4098; --  Set/get recv buffer size
-    SO_REUSEADDR       : constant :=            4; --  Bind reuse local address
-    SO_KEEPALIVE       : constant :=            8; --  Enable keep-alive msgs
-    SO_LINGER          : constant :=          128; --  Defer close to flush data
-    SO_ERROR           : constant :=         4103; --  Get/clear error status
-    SO_BROADCAST       : constant :=           32; --  Can send broadcast msgs
-    IP_ADD_MEMBERSHIP  : constant :=           19; --  Join a multicast group
-    IP_DROP_MEMBERSHIP : constant :=           20; --  Leave a multicast group
-    IP_MULTICAST_TTL   : constant :=           17; --  Set/get multicast TTL
-    IP_MULTICAST_LOOP  : constant :=           18; --  Set/get mcast loopback
- 
- end GNAT.Sockets.Constants;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/3ssoliop.ads gcc-4.0.0/gcc/ada/3ssoliop.ads
*** gcc-3.4.3/gcc/ada/3ssoliop.ads	Fri Dec  5 10:24:04 2003
--- gcc-4.0.0/gcc/ada/3ssoliop.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,43 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --          G N A T . S O C K E T S . L I N K E R _ O P T I O N S           --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --            Copyright (C) 2001-2003 Ada Core Technologies, Inc.           --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package is used to provide target specific linker_options for the
- --  support of scokets as required by the package GNAT.Sockets.
- 
- --  This is the Solaris version of this package
- 
- package GNAT.Sockets.Linker_Options is
- private
-    pragma Linker_Options ("-lnsl");
-    pragma Linker_Options ("-lsocket");
- end GNAT.Sockets.Linker_Options;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/3veacodu.adb gcc-4.0.0/gcc/ada/3veacodu.adb
*** gcc-3.4.3/gcc/ada/3veacodu.adb	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/3veacodu.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,73 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --      G N A T . E X C E P T I O N _ A C T I O N S . C O R E _ D U M P     --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --            Copyright (C) 2003 Free Software Foundation, Inc.             --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the VMS version.
- 
- with System;
- with System.Aux_DEC;
- separate (GNAT.Exception_Actions)
- procedure Core_Dump (Occurrence : Exception_Occurrence) is
- 
-    use System;
-    use System.Aux_DEC;
- 
-    pragma Unreferenced (Occurrence);
- 
-    SS_IMGDMP : constant := 1276;
- 
-    subtype Cond_Value_Type is Unsigned_Longword;
-    subtype Access_Mode_Type is
-       Unsigned_Word range 0 .. 3;
-    Access_Mode_Zero : constant Access_Mode_Type := 0;
- 
-    Status : Cond_Value_Type;
- 
-    procedure Setexv (
-      Status : out Cond_Value_Type;
-      Vector : in  Unsigned_Longword := 0;
-      Addres : in  Address           := Address_Zero;
-      Acmode : in  Access_Mode_Type  := Access_Mode_Zero;
-      Prvhnd : in  Unsigned_Longword := 0);
-    pragma Interface (External, Setexv);
-    pragma Import_Valued_Procedure (Setexv, "SYS$SETEXV",
-      (Cond_Value_Type, Unsigned_Longword, Address, Access_Mode_Type,
-       Unsigned_Longword),
-      (Value, Value, Value, Value, Value));
- 
-    procedure Lib_Signal (I : in Integer);
-    pragma Interface (C, Lib_Signal);
-    pragma Import_Procedure (Lib_Signal, "LIB$SIGNAL", Mechanism => (Value));
- begin
-    Setexv (Status, 1, Address_Zero, 3);
-    Lib_Signal (SS_IMGDMP);
- end Core_Dump;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/3vexpect.adb gcc-4.0.0/gcc/ada/3vexpect.adb
*** gcc-3.4.3/gcc/ada/3vexpect.adb	Mon Jan  5 15:20:42 2004
--- gcc-4.0.0/gcc/ada/3vexpect.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,1184 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT LIBRARY COMPONENTS                          --
- --                                                                          --
- --                          G N A T . E X P E C T                           --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --             Copyright (C) 2002-2003 Ada Core Technologies, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the VMS version.
- 
- with System;        use System;
- with Ada.Calendar;  use Ada.Calendar;
- 
- with GNAT.IO;
- with GNAT.OS_Lib;   use GNAT.OS_Lib;
- with GNAT.Regpat;   use GNAT.Regpat;
- 
- with Unchecked_Deallocation;
- 
- package body GNAT.Expect is
- 
-    type Array_Of_Pd is array (Positive range <>) of Process_Descriptor_Access;
- 
-    Save_Input  : File_Descriptor;
-    Save_Output : File_Descriptor;
-    Save_Error  : File_Descriptor;
- 
-    procedure Expect_Internal
-      (Descriptors : in out Array_Of_Pd;
-       Result      : out Expect_Match;
-       Timeout     : Integer;
-       Full_Buffer : Boolean);
-    --  Internal function used to read from the process Descriptor.
-    --
-    --  Three outputs are possible:
-    --     Result=Expect_Timeout, if no output was available before the timeout
-    --        expired.
-    --     Result=Expect_Full_Buffer, if Full_Buffer is True and some characters
-    --        had to be discarded from the internal buffer of Descriptor.
-    --     Result=<integer>, indicates how many characters were added to the
-    --        internal buffer. These characters are from indexes
-    --        Descriptor.Buffer_Index - Result + 1 .. Descriptor.Buffer_Index
-    --  Process_Died is raised if the process is no longer valid.
- 
-    procedure Reinitialize_Buffer
-      (Descriptor : in out Process_Descriptor'Class);
-    --  Reinitialize the internal buffer.
-    --  The buffer is deleted up to the end of the last match.
- 
-    procedure Free is new Unchecked_Deallocation
-      (Pattern_Matcher, Pattern_Matcher_Access);
- 
-    procedure Call_Filters
-      (Pid       : Process_Descriptor'Class;
-       Str       : String;
-       Filter_On : Filter_Type);
-    --  Call all the filters that have the appropriate type.
-    --  This function does nothing if the filters are locked
- 
-    ------------------------------
-    -- Target dependent section --
-    ------------------------------
- 
-    function Dup (Fd : File_Descriptor) return File_Descriptor;
-    pragma Import (C, Dup);
- 
-    procedure Dup2 (Old_Fd, New_Fd : File_Descriptor);
-    pragma Import (C, Dup2);
- 
-    procedure Kill (Pid : Process_Id; Sig_Num : Integer);
-    pragma Import (C, Kill);
- 
-    function Create_Pipe (Pipe : access Pipe_Type) return Integer;
-    pragma Import (C, Create_Pipe, "__gnat_pipe");
- 
-    function Poll
-      (Fds     : System.Address;
-       Num_Fds : Integer;
-       Timeout : Integer;
-       Is_Set  : System.Address) return Integer;
-    pragma Import (C, Poll, "__gnat_expect_poll");
-    --  Check whether there is any data waiting on the file descriptor
-    --  Out_fd, and wait if there is none, at most Timeout milliseconds
-    --  Returns -1 in case of error, 0 if the timeout expired before
-    --  data became available.
-    --
-    --  Out_Is_Set is set to 1 if data was available, 0 otherwise.
- 
-    function Waitpid (Pid : Process_Id) return Integer;
-    pragma Import (C, Waitpid, "__gnat_waitpid");
-    --  Wait for a specific process id, and return its exit code.
- 
-    ---------
-    -- "+" --
-    ---------
- 
-    function "+" (S : String) return GNAT.OS_Lib.String_Access is
-    begin
-       return new String'(S);
-    end "+";
- 
-    ---------
-    -- "+" --
-    ---------
- 
-    function "+"
-      (P : GNAT.Regpat.Pattern_Matcher) return Pattern_Matcher_Access
-    is
-    begin
-       return new GNAT.Regpat.Pattern_Matcher'(P);
-    end "+";
- 
-    ----------------
-    -- Add_Filter --
-    ----------------
- 
-    procedure Add_Filter
-      (Descriptor : in out Process_Descriptor;
-       Filter     : Filter_Function;
-       Filter_On  : Filter_Type := Output;
-       User_Data  : System.Address := System.Null_Address;
-       After      : Boolean := False)
-    is
-       Current : Filter_List := Descriptor.Filters;
- 
-    begin
-       if After then
-          while Current /= null and then Current.Next /= null loop
-             Current := Current.Next;
-          end loop;
- 
-          if Current = null then
-             Descriptor.Filters :=
-               new Filter_List_Elem'
-                (Filter => Filter, Filter_On => Filter_On,
-                 User_Data => User_Data, Next => null);
-          else
-             Current.Next :=
-               new Filter_List_Elem'
-               (Filter => Filter, Filter_On => Filter_On,
-                User_Data => User_Data, Next => null);
-          end if;
- 
-       else
-          Descriptor.Filters :=
-            new Filter_List_Elem'
-              (Filter => Filter, Filter_On => Filter_On,
-               User_Data => User_Data, Next => Descriptor.Filters);
-       end if;
-    end Add_Filter;
- 
-    ------------------
-    -- Call_Filters --
-    ------------------
- 
-    procedure Call_Filters
-      (Pid       : Process_Descriptor'Class;
-       Str       : String;
-       Filter_On : Filter_Type)
-    is
-       Current_Filter  : Filter_List;
- 
-    begin
-       if Pid.Filters_Lock = 0 then
-          Current_Filter := Pid.Filters;
- 
-          while Current_Filter /= null loop
-             if Current_Filter.Filter_On = Filter_On then
-                Current_Filter.Filter
-                  (Pid, Str, Current_Filter.User_Data);
-             end if;
- 
-             Current_Filter := Current_Filter.Next;
-          end loop;
-       end if;
-    end Call_Filters;
- 
-    -----------
-    -- Close --
-    -----------
- 
-    procedure Close
-      (Descriptor : in out Process_Descriptor;
-       Status     : out Integer)
-    is
-    begin
-       Close (Descriptor.Input_Fd);
- 
-       if Descriptor.Error_Fd /= Descriptor.Output_Fd then
-          Close (Descriptor.Error_Fd);
-       end if;
- 
-       Close (Descriptor.Output_Fd);
- 
-       --  ??? Should have timeouts for different signals
-       Kill (Descriptor.Pid, 9);
- 
-       GNAT.OS_Lib.Free (Descriptor.Buffer);
-       Descriptor.Buffer_Size := 0;
- 
-       Status := Waitpid (Descriptor.Pid);
-    end Close;
- 
-    procedure Close (Descriptor : in out Process_Descriptor) is
-       Status : Integer;
-    begin
-       Close (Descriptor, Status);
-    end Close;
- 
-    ------------
-    -- Expect --
-    ------------
- 
-    procedure Expect
-      (Descriptor  : in out Process_Descriptor;
-       Result      : out Expect_Match;
-       Regexp      : String;
-       Timeout     : Integer := 10000;
-       Full_Buffer : Boolean := False)
-    is
-    begin
-       if Regexp = "" then
-          Expect (Descriptor, Result, Never_Match, Timeout, Full_Buffer);
-       else
-          Expect (Descriptor, Result, Compile (Regexp), Timeout, Full_Buffer);
-       end if;
-    end Expect;
- 
-    procedure Expect
-      (Descriptor  : in out Process_Descriptor;
-       Result      : out Expect_Match;
-       Regexp      : String;
-       Matched     : out GNAT.Regpat.Match_Array;
-       Timeout     : Integer := 10000;
-       Full_Buffer : Boolean := False)
-    is
-    begin
-       pragma Assert (Matched'First = 0);
-       if Regexp = "" then
-          Expect
-            (Descriptor, Result, Never_Match, Matched, Timeout, Full_Buffer);
-       else
-          Expect
-            (Descriptor, Result, Compile (Regexp), Matched, Timeout,
-             Full_Buffer);
-       end if;
-    end Expect;
- 
-    procedure Expect
-      (Descriptor  : in out Process_Descriptor;
-       Result      : out Expect_Match;
-       Regexp      : GNAT.Regpat.Pattern_Matcher;
-       Timeout     : Integer := 10000;
-       Full_Buffer : Boolean := False)
-    is
-       Matched : GNAT.Regpat.Match_Array (0 .. 0);
- 
-    begin
-       Expect (Descriptor, Result, Regexp, Matched, Timeout, Full_Buffer);
-    end Expect;
- 
-    procedure Expect
-      (Descriptor  : in out Process_Descriptor;
-       Result      : out Expect_Match;
-       Regexp      : GNAT.Regpat.Pattern_Matcher;
-       Matched     : out GNAT.Regpat.Match_Array;
-       Timeout     : Integer := 10000;
-       Full_Buffer : Boolean := False)
-    is
-       N           : Expect_Match;
-       Descriptors : Array_Of_Pd := (1 => Descriptor'Unrestricted_Access);
-       Try_Until   : constant Time := Clock + Duration (Timeout) / 1000.0;
-       Timeout_Tmp : Integer := Timeout;
- 
-    begin
-       pragma Assert (Matched'First = 0);
-       Reinitialize_Buffer (Descriptor);
- 
-       loop
-          --  First, test if what is already in the buffer matches (This is
-          --  required if this package is used in multi-task mode, since one of
-          --  the tasks might have added something in the buffer, and we don't
-          --  want other tasks to wait for new input to be available before
-          --  checking the regexps).
- 
-          Match
-            (Regexp, Descriptor.Buffer (1 .. Descriptor.Buffer_Index), Matched);
- 
-          if Descriptor.Buffer_Index >= 1 and then Matched (0).First /= 0 then
-             Result := 1;
-             Descriptor.Last_Match_Start := Matched (0).First;
-             Descriptor.Last_Match_End := Matched (0).Last;
-             return;
-          end if;
- 
-          --  Else try to read new input
- 
-          Expect_Internal (Descriptors, N, Timeout_Tmp, Full_Buffer);
- 
-          if N = Expect_Timeout or else N = Expect_Full_Buffer then
-             Result := N;
-             return;
-          end if;
- 
-          --  Calculate the timeout for the next turn.
-          --  Note that Timeout is, from the caller's perspective, the maximum
-          --  time until a match, not the maximum time until some output is
-          --  read, and thus can not be reused as is for Expect_Internal.
- 
-          if Timeout /= -1 then
-             Timeout_Tmp := Integer (Try_Until - Clock) * 1000;
- 
-             if Timeout_Tmp < 0 then
-                Result := Expect_Timeout;
-                exit;
-             end if;
-          end if;
-       end loop;
- 
-       --  Even if we had the general timeout above, we have to test that the
-       --  last test we read from the external process didn't match.
- 
-       Match
-         (Regexp, Descriptor.Buffer (1 .. Descriptor.Buffer_Index), Matched);
- 
-       if Matched (0).First /= 0 then
-          Result := 1;
-          Descriptor.Last_Match_Start := Matched (0).First;
-          Descriptor.Last_Match_End := Matched (0).Last;
-          return;
-       end if;
-    end Expect;
- 
-    procedure Expect
-      (Descriptor  : in out Process_Descriptor;
-       Result      : out Expect_Match;
-       Regexps     : Regexp_Array;
-       Timeout     : Integer := 10000;
-       Full_Buffer : Boolean := False)
-    is
-       Patterns : Compiled_Regexp_Array (Regexps'Range);
-       Matched  : GNAT.Regpat.Match_Array (0 .. 0);
- 
-    begin
-       for J in Regexps'Range loop
-          Patterns (J) := new Pattern_Matcher'(Compile (Regexps (J).all));
-       end loop;
- 
-       Expect (Descriptor, Result, Patterns, Matched, Timeout, Full_Buffer);
- 
-       for J in Regexps'Range loop
-          Free (Patterns (J));
-       end loop;
-    end Expect;
- 
-    procedure Expect
-      (Descriptor  : in out Process_Descriptor;
-       Result      : out Expect_Match;
-       Regexps     : Compiled_Regexp_Array;
-       Timeout     : Integer := 10000;
-       Full_Buffer : Boolean := False)
-    is
-       Matched : GNAT.Regpat.Match_Array (0 .. 0);
- 
-    begin
-       Expect (Descriptor, Result, Regexps, Matched, Timeout, Full_Buffer);
-    end Expect;
- 
-    procedure Expect
-      (Result      : out Expect_Match;
-       Regexps     : Multiprocess_Regexp_Array;
-       Timeout     : Integer := 10000;
-       Full_Buffer : Boolean := False)
-    is
-       Matched : GNAT.Regpat.Match_Array (0 .. 0);
- 
-    begin
-       Expect (Result, Regexps, Matched, Timeout, Full_Buffer);
-    end Expect;
- 
-    procedure Expect
-      (Descriptor  : in out Process_Descriptor;
-       Result      : out Expect_Match;
-       Regexps     : Regexp_Array;
-       Matched     : out GNAT.Regpat.Match_Array;
-       Timeout     : Integer := 10000;
-       Full_Buffer : Boolean := False)
-    is
-       Patterns : Compiled_Regexp_Array (Regexps'Range);
- 
-    begin
-       pragma Assert (Matched'First = 0);
- 
-       for J in Regexps'Range loop
-          Patterns (J) := new Pattern_Matcher'(Compile (Regexps (J).all));
-       end loop;
- 
-       Expect (Descriptor, Result, Patterns, Matched, Timeout, Full_Buffer);
- 
-       for J in Regexps'Range loop
-          Free (Patterns (J));
-       end loop;
-    end Expect;
- 
-    procedure Expect
-      (Descriptor  : in out Process_Descriptor;
-       Result      : out Expect_Match;
-       Regexps     : Compiled_Regexp_Array;
-       Matched     : out GNAT.Regpat.Match_Array;
-       Timeout     : Integer := 10000;
-       Full_Buffer : Boolean := False)
-    is
-       N           : Expect_Match;
-       Descriptors : Array_Of_Pd := (1 => Descriptor'Unrestricted_Access);
- 
-    begin
-       pragma Assert (Matched'First = 0);
- 
-       Reinitialize_Buffer (Descriptor);
- 
-       loop
-          --  First, test if what is already in the buffer matches (This is
-          --  required if this package is used in multi-task mode, since one of
-          --  the tasks might have added something in the buffer, and we don't
-          --  want other tasks to wait for new input to be available before
-          --  checking the regexps).
- 
-          if Descriptor.Buffer /= null then
-             for J in Regexps'Range loop
-                Match
-                  (Regexps (J).all,
-                   Descriptor.Buffer (1 .. Descriptor.Buffer_Index),
-                   Matched);
- 
-                if Matched (0) /= No_Match then
-                   Result := Expect_Match (J);
-                   Descriptor.Last_Match_Start := Matched (0).First;
-                   Descriptor.Last_Match_End := Matched (0).Last;
-                   return;
-                end if;
-             end loop;
-          end if;
- 
-          Expect_Internal (Descriptors, N, Timeout, Full_Buffer);
- 
-          if N = Expect_Timeout or else N = Expect_Full_Buffer then
-             Result := N;
-             return;
-          end if;
-       end loop;
-    end Expect;
- 
-    procedure Expect
-      (Result      : out Expect_Match;
-       Regexps     : Multiprocess_Regexp_Array;
-       Matched     : out GNAT.Regpat.Match_Array;
-       Timeout     : Integer := 10000;
-       Full_Buffer : Boolean := False)
-    is
-       N           : Expect_Match;
-       Descriptors : Array_Of_Pd (Regexps'Range);
- 
-    begin
-       pragma Assert (Matched'First = 0);
- 
-       for J in Descriptors'Range loop
-          Descriptors (J) := Regexps (J).Descriptor;
-          Reinitialize_Buffer (Regexps (J).Descriptor.all);
-       end loop;
- 
-       loop
-          --  First, test if what is already in the buffer matches (This is
-          --  required if this package is used in multi-task mode, since one of
-          --  the tasks might have added something in the buffer, and we don't
-          --  want other tasks to wait for new input to be available before
-          --  checking the regexps).
- 
-          for J in Regexps'Range loop
-             Match (Regexps (J).Regexp.all,
-                    Regexps (J).Descriptor.Buffer
-                      (1 .. Regexps (J).Descriptor.Buffer_Index),
-                    Matched);
- 
-             if Matched (0) /= No_Match then
-                Result := Expect_Match (J);
-                Regexps (J).Descriptor.Last_Match_Start := Matched (0).First;
-                Regexps (J).Descriptor.Last_Match_End := Matched (0).Last;
-                return;
-             end if;
-          end loop;
- 
-          Expect_Internal (Descriptors, N, Timeout, Full_Buffer);
- 
-          if N = Expect_Timeout or else N = Expect_Full_Buffer then
-             Result := N;
-             return;
-          end if;
-       end loop;
-    end Expect;
- 
-    ---------------------
-    -- Expect_Internal --
-    ---------------------
- 
-    procedure Expect_Internal
-      (Descriptors : in out Array_Of_Pd;
-       Result      : out Expect_Match;
-       Timeout     : Integer;
-       Full_Buffer : Boolean)
-    is
-       Num_Descriptors : Integer;
-       Buffer_Size     : Integer := 0;
- 
-       N : Integer;
- 
-       type File_Descriptor_Array is
-         array (Descriptors'Range) of File_Descriptor;
-       Fds : aliased File_Descriptor_Array;
- 
-       type Integer_Array is array (Descriptors'Range) of Integer;
-       Is_Set : aliased Integer_Array;
- 
-    begin
-       for J in Descriptors'Range loop
-          Fds (J) := Descriptors (J).Output_Fd;
- 
-          if Descriptors (J).Buffer_Size = 0 then
-             Buffer_Size := Integer'Max (Buffer_Size, 4096);
-          else
-             Buffer_Size :=
-               Integer'Max (Buffer_Size, Descriptors (J).Buffer_Size);
-          end if;
-       end loop;
- 
-       declare
-          Buffer : aliased String (1 .. Buffer_Size);
-          --  Buffer used for input. This is allocated only once, not for
-          --  every iteration of the loop
- 
-       begin
-          --  Loop until we match or we have a timeout
- 
-          loop
-             Num_Descriptors :=
-               Poll (Fds'Address, Fds'Length, Timeout, Is_Set'Address);
- 
-             case Num_Descriptors is
- 
-                --  Error?
- 
-                when -1 =>
-                   raise Process_Died;
- 
-                --  Timeout?
- 
-                when 0  =>
-                   Result := Expect_Timeout;
-                   return;
- 
-                --  Some input
- 
-                when others =>
-                   for J in Descriptors'Range loop
-                      if Is_Set (J) = 1 then
-                         Buffer_Size := Descriptors (J).Buffer_Size;
- 
-                         if Buffer_Size = 0 then
-                            Buffer_Size := 4096;
-                         end if;
- 
-                         N := Read (Descriptors (J).Output_Fd, Buffer'Address,
-                                    Buffer_Size);
- 
-                         --  Error or End of file
- 
-                         if N <= 0 then
-                            --  ??? Note that ddd tries again up to three times
-                            --  in that case. See LiterateA.C:174
-                            raise Process_Died;
- 
-                         else
-                            --  If there is no limit to the buffer size
- 
-                            if Descriptors (J).Buffer_Size = 0 then
- 
-                               declare
-                                  Tmp : String_Access := Descriptors (J).Buffer;
- 
-                               begin
-                                  if Tmp /= null then
-                                     Descriptors (J).Buffer :=
-                                       new String (1 .. Tmp'Length + N);
-                                     Descriptors (J).Buffer (1 .. Tmp'Length) :=
-                                       Tmp.all;
-                                     Descriptors (J).Buffer
-                                       (Tmp'Length + 1 .. Tmp'Length + N) :=
-                                       Buffer (1 .. N);
-                                     Free (Tmp);
-                                     Descriptors (J).Buffer_Index :=
-                                       Descriptors (J).Buffer'Last;
- 
-                                  else
-                                     Descriptors (J).Buffer :=
-                                       new String (1 .. N);
-                                     Descriptors (J).Buffer.all :=
-                                       Buffer (1 .. N);
-                                     Descriptors (J).Buffer_Index := N;
-                                  end if;
-                               end;
- 
-                            else
-                               --  Add what we read to the buffer
- 
-                               if Descriptors (J).Buffer_Index + N - 1 >
-                                 Descriptors (J).Buffer_Size
-                               then
-                                  --  If the user wants to know when we have
-                                  --  read more than the buffer can contain.
- 
-                                  if Full_Buffer then
-                                     Result := Expect_Full_Buffer;
-                                     return;
-                                  end if;
- 
-                                  --  Keep as much as possible from the buffer,
-                                  --  and forget old characters.
- 
-                                  Descriptors (J).Buffer
-                                    (1 .. Descriptors (J).Buffer_Size - N) :=
-                                   Descriptors (J).Buffer
-                                    (N - Descriptors (J).Buffer_Size +
-                                     Descriptors (J).Buffer_Index + 1 ..
-                                     Descriptors (J).Buffer_Index);
-                                  Descriptors (J).Buffer_Index :=
-                                    Descriptors (J).Buffer_Size - N;
-                               end if;
- 
-                               --  Keep what we read in the buffer.
- 
-                               Descriptors (J).Buffer
-                                 (Descriptors (J).Buffer_Index + 1 ..
-                                  Descriptors (J).Buffer_Index + N) :=
-                                 Buffer (1 .. N);
-                               Descriptors (J).Buffer_Index :=
-                                 Descriptors (J).Buffer_Index + N;
-                            end if;
- 
-                            --  Call each of the output filter with what we
-                            --  read.
- 
-                            Call_Filters
-                              (Descriptors (J).all, Buffer (1 .. N), Output);
- 
-                            Result := Expect_Match (N);
-                            return;
-                         end if;
-                      end if;
-                   end loop;
-             end case;
-          end loop;
-       end;
-    end Expect_Internal;
- 
-    ----------------
-    -- Expect_Out --
-    ----------------
- 
-    function Expect_Out (Descriptor : Process_Descriptor) return String is
-    begin
-       return Descriptor.Buffer (1 .. Descriptor.Last_Match_End);
-    end Expect_Out;
- 
-    ----------------------
-    -- Expect_Out_Match --
-    ----------------------
- 
-    function Expect_Out_Match (Descriptor : Process_Descriptor) return String is
-    begin
-       return Descriptor.Buffer
-         (Descriptor.Last_Match_Start .. Descriptor.Last_Match_End);
-    end Expect_Out_Match;
- 
-    -----------
-    -- Flush --
-    -----------
- 
-    procedure Flush
-      (Descriptor : in out Process_Descriptor;
-       Timeout    : Integer := 0)
-    is
-       Buffer_Size     : constant Integer := 8192;
-       Num_Descriptors : Integer;
-       N               : Integer;
-       Is_Set          : aliased Integer;
-       Buffer          : aliased String (1 .. Buffer_Size);
- 
-    begin
-       --  Empty the current buffer
- 
-       Descriptor.Last_Match_End := Descriptor.Buffer_Index;
-       Reinitialize_Buffer (Descriptor);
- 
-       --  Read everything from the process to flush its output
- 
-       loop
-          Num_Descriptors :=
-            Poll (Descriptor.Output_Fd'Address, 1, Timeout, Is_Set'Address);
- 
-          case Num_Descriptors is
- 
-             --  Error ?
- 
-             when -1 =>
-                raise Process_Died;
- 
-             --  Timeout => End of flush
- 
-             when 0  =>
-                return;
- 
-             --  Some input
- 
-             when others =>
-                if Is_Set = 1 then
-                   N := Read (Descriptor.Output_Fd, Buffer'Address,
-                              Buffer_Size);
- 
-                   if N = -1 then
-                      raise Process_Died;
-                   elsif N = 0 then
-                      return;
-                   end if;
-                end if;
-          end case;
-       end loop;
- 
-    end Flush;
- 
-    ------------------
-    -- Get_Error_Fd --
-    ------------------
- 
-    function Get_Error_Fd
-      (Descriptor : Process_Descriptor) return GNAT.OS_Lib.File_Descriptor
-    is
-    begin
-       return Descriptor.Error_Fd;
-    end Get_Error_Fd;
- 
-    ------------------
-    -- Get_Input_Fd --
-    ------------------
- 
-    function Get_Input_Fd
-      (Descriptor : Process_Descriptor) return GNAT.OS_Lib.File_Descriptor
-    is
-    begin
-       return Descriptor.Input_Fd;
-    end Get_Input_Fd;
- 
-    -------------------
-    -- Get_Output_Fd --
-    -------------------
- 
-    function Get_Output_Fd
-      (Descriptor : Process_Descriptor) return GNAT.OS_Lib.File_Descriptor
-    is
-    begin
-       return Descriptor.Output_Fd;
-    end Get_Output_Fd;
- 
-    -------------
-    -- Get_Pid --
-    -------------
- 
-    function Get_Pid
-      (Descriptor : Process_Descriptor) return Process_Id
-    is
-    begin
-       return Descriptor.Pid;
-    end Get_Pid;
- 
-    ---------------
-    -- Interrupt --
-    ---------------
- 
-    procedure Interrupt (Descriptor : in out Process_Descriptor) is
-       SIGINT : constant := 2;
- 
-    begin
-       Send_Signal (Descriptor, SIGINT);
-    end Interrupt;
- 
-    ------------------
-    -- Lock_Filters --
-    ------------------
- 
-    procedure Lock_Filters (Descriptor : in out Process_Descriptor) is
-    begin
-       Descriptor.Filters_Lock := Descriptor.Filters_Lock + 1;
-    end Lock_Filters;
- 
-    ------------------------
-    -- Non_Blocking_Spawn --
-    ------------------------
- 
-    procedure Non_Blocking_Spawn
-      (Descriptor  : out Process_Descriptor'Class;
-       Command     : String;
-       Args        : GNAT.OS_Lib.Argument_List;
-       Buffer_Size : Natural := 4096;
-       Err_To_Out  : Boolean := False)
-    is
-       function Alloc_Vfork_Blocks return Integer;
-       pragma Import (C, Alloc_Vfork_Blocks, "decc$$alloc_vfork_blocks");
- 
-       function Get_Vfork_Jmpbuf return System.Address;
-       pragma Import (C, Get_Vfork_Jmpbuf, "decc$$get_vfork_jmpbuf");
- 
-       function Get_Current_Invo_Context
-         (Addr : System.Address) return Process_Id;
-       pragma Import (C, Get_Current_Invo_Context,
-         "LIB$GET_CURRENT_INVO_CONTEXT");
- 
-       Pipe1, Pipe2, Pipe3 : aliased Pipe_Type;
- 
-       Arg      : String_Access;
-       Arg_List : aliased array (1 .. Args'Length + 2) of System.Address;
- 
-       Command_With_Path : String_Access;
- 
-    begin
-       --  Create the rest of the pipes
- 
-       Set_Up_Communications
-         (Descriptor, Err_To_Out, Pipe1'Access, Pipe2'Access, Pipe3'Access);
- 
-       Command_With_Path := Locate_Exec_On_Path (Command);
- 
-       if Command_With_Path = null then
-          raise Invalid_Process;
-       end if;
- 
-       --  Fork a new process. It's not possible to do this in a subprogram.
- 
-       if Alloc_Vfork_Blocks >= 0 then
-          Descriptor.Pid := Get_Current_Invo_Context (Get_Vfork_Jmpbuf);
-       else
-          Descriptor.Pid := -1;
-       end if;
- 
-       --  Are we now in the child (or, for Windows, still in the common
-       --  process).
- 
-       if Descriptor.Pid = Null_Pid then
-          --  Prepare an array of arguments to pass to C
- 
-          Arg   := new String (1 .. Command_With_Path'Length + 1);
-          Arg (1 .. Command_With_Path'Length) := Command_With_Path.all;
-          Arg (Arg'Last)        := ASCII.Nul;
-          Arg_List (1)          := Arg.all'Address;
- 
-          for J in Args'Range loop
-             Arg                     := new String (1 .. Args (J)'Length + 1);
-             Arg (1 .. Args (J)'Length)  := Args (J).all;
-             Arg (Arg'Last)              := ASCII.Nul;
-             Arg_List (J + 2 - Args'First) := Arg.all'Address;
-          end loop;
- 
-          Arg_List (Arg_List'Last) := System.Null_Address;
- 
-          --  This does not return on Unix systems
- 
-          Set_Up_Child_Communications
-            (Descriptor, Pipe1, Pipe2, Pipe3, Command_With_Path.all,
-             Arg_List'Address);
-       end if;
- 
-       Free (Command_With_Path);
- 
-       --  Did we have an error when spawning the child ?
- 
-       if Descriptor.Pid < Null_Pid then
-          raise Invalid_Process;
-       else
-          --  We are now in the parent process
- 
-          Set_Up_Parent_Communications (Descriptor, Pipe1, Pipe2, Pipe3);
-       end if;
- 
-       --  Create the buffer
- 
-       Descriptor.Buffer_Size := Buffer_Size;
- 
-       if Buffer_Size /= 0 then
-          Descriptor.Buffer := new String (1 .. Positive (Buffer_Size));
-       end if;
-    end Non_Blocking_Spawn;
- 
-    -------------------------
-    -- Reinitialize_Buffer --
-    -------------------------
- 
-    procedure Reinitialize_Buffer
-      (Descriptor : in out Process_Descriptor'Class)
-    is
-    begin
-       if Descriptor.Buffer_Size = 0 then
-          declare
-             Tmp : String_Access := Descriptor.Buffer;
- 
-          begin
-             Descriptor.Buffer :=
-               new String
-                 (1 .. Descriptor.Buffer_Index - Descriptor.Last_Match_End);
- 
-             if Tmp /= null then
-                Descriptor.Buffer.all := Tmp
-                  (Descriptor.Last_Match_End + 1 .. Descriptor.Buffer_Index);
-                Free (Tmp);
-             end if;
-          end;
- 
-          Descriptor.Buffer_Index := Descriptor.Buffer'Last;
- 
-       else
-          Descriptor.Buffer
-            (1 .. Descriptor.Buffer_Index - Descriptor.Last_Match_End) :=
-              Descriptor.Buffer
-                (Descriptor.Last_Match_End + 1 .. Descriptor.Buffer_Index);
- 
-          if Descriptor.Buffer_Index > Descriptor.Last_Match_End then
-             Descriptor.Buffer_Index :=
-               Descriptor.Buffer_Index - Descriptor.Last_Match_End;
-          else
-             Descriptor.Buffer_Index := 0;
-          end if;
-       end if;
- 
-       Descriptor.Last_Match_Start := 0;
-       Descriptor.Last_Match_End := 0;
-    end Reinitialize_Buffer;
- 
-    -------------------
-    -- Remove_Filter --
-    -------------------
- 
-    procedure Remove_Filter
-      (Descriptor : in out Process_Descriptor;
-       Filter     : Filter_Function)
-    is
-       Previous : Filter_List := null;
-       Current  : Filter_List := Descriptor.Filters;
- 
-    begin
-       while Current /= null loop
-          if Current.Filter = Filter then
-             if Previous = null then
-                Descriptor.Filters := Current.Next;
-             else
-                Previous.Next := Current.Next;
-             end if;
-          end if;
- 
-          Previous := Current;
-          Current := Current.Next;
-       end loop;
-    end Remove_Filter;
- 
-    ----------
-    -- Send --
-    ----------
- 
-    procedure Send
-      (Descriptor   : in out Process_Descriptor;
-       Str          : String;
-       Add_LF       : Boolean := True;
-       Empty_Buffer : Boolean := False)
-    is
-       Full_Str    : constant String := Str & ASCII.LF;
-       Last        : Natural;
-       Result      : Expect_Match;
-       Descriptors : Array_Of_Pd := (1 => Descriptor'Unrestricted_Access);
- 
-       Discard : Natural;
-       pragma Unreferenced (Discard);
- 
-    begin
-       if Empty_Buffer then
- 
-          --  Force a read on the process if there is anything waiting
- 
-          Expect_Internal (Descriptors, Result,
-                           Timeout => 0, Full_Buffer => False);
-          Descriptor.Last_Match_End := Descriptor.Buffer_Index;
- 
-          --  Empty the buffer
- 
-          Reinitialize_Buffer (Descriptor);
-       end if;
- 
-       if Add_LF then
-          Last := Full_Str'Last;
-       else
-          Last := Full_Str'Last - 1;
-       end if;
- 
-       Call_Filters (Descriptor, Full_Str (Full_Str'First .. Last), Input);
- 
-       Discard := Write (Descriptor.Input_Fd,
-                         Full_Str'Address,
-                         Last - Full_Str'First + 1);
-       --  Shouldn't we at least have a pragma Assert on the result ???
-    end Send;
- 
-    -----------------
-    -- Send_Signal --
-    -----------------
- 
-    procedure Send_Signal
-      (Descriptor : Process_Descriptor;
-       Signal     : Integer)
-    is
-    begin
-       Kill (Descriptor.Pid, Signal);
-       --  ??? Need to check process status here.
-    end Send_Signal;
- 
-    ---------------------------------
-    -- Set_Up_Child_Communications --
-    ---------------------------------
- 
-    procedure Set_Up_Child_Communications
-      (Pid   : in out Process_Descriptor;
-       Pipe1 : in out Pipe_Type;
-       Pipe2 : in out Pipe_Type;
-       Pipe3 : in out Pipe_Type;
-       Cmd   : in String;
-       Args  : in System.Address)
-    is
-       pragma Warnings (Off, Pid);
- 
-    begin
-       --  Since the code between fork and exec on VMS executes
-       --  in the context of the parent process, we need to
-       --  perform the following actions:
-       --    - save stdin, stdout, stderr
-       --    - replace them by our pipes
-       --    - create the child with process handle inheritance
-       --    - revert to the previous stdin, stdout and stderr.
- 
-       Save_Input  := Dup (GNAT.OS_Lib.Standin);
-       Save_Output := Dup (GNAT.OS_Lib.Standout);
-       Save_Error  := Dup (GNAT.OS_Lib.Standerr);
- 
-       --  Since we are still called from the parent process, there is no way
-       --  currently we can cleanly close the unneeded ends of the pipes, but
-       --  this doesn't really matter.
-       --  We could close Pipe1.Output, Pipe2.Input, Pipe3.Input.
- 
-       Dup2 (Pipe1.Input,  GNAT.OS_Lib.Standin);
-       Dup2 (Pipe2.Output, GNAT.OS_Lib.Standout);
-       Dup2 (Pipe3.Output, GNAT.OS_Lib.Standerr);
- 
-       Portable_Execvp (Pid.Pid'Access, Cmd & ASCII.Nul, Args);
- 
-    end Set_Up_Child_Communications;
- 
-    ---------------------------
-    -- Set_Up_Communications --
-    ---------------------------
- 
-    procedure Set_Up_Communications
-      (Pid        : in out Process_Descriptor;
-       Err_To_Out : Boolean;
-       Pipe1      : access Pipe_Type;
-       Pipe2      : access Pipe_Type;
-       Pipe3      : access Pipe_Type)
-    is
-    begin
-       --  Create the pipes
- 
-       if Create_Pipe (Pipe1) /= 0 then
-          return;
-       end if;
- 
-       if Create_Pipe (Pipe2) /= 0 then
-          return;
-       end if;
- 
-       Pid.Input_Fd  := Pipe1.Output;
-       Pid.Output_Fd := Pipe2.Input;
- 
-       if Err_To_Out then
-          Pipe3.all := Pipe2.all;
-       else
-          if Create_Pipe (Pipe3) /= 0 then
-             return;
-          end if;
-       end if;
- 
-       Pid.Error_Fd := Pipe3.Input;
-    end Set_Up_Communications;
- 
-    ----------------------------------
-    -- Set_Up_Parent_Communications --
-    ----------------------------------
- 
-    procedure Set_Up_Parent_Communications
-      (Pid   : in out Process_Descriptor;
-       Pipe1 : in out Pipe_Type;
-       Pipe2 : in out Pipe_Type;
-       Pipe3 : in out Pipe_Type)
-    is
-       pragma Warnings (Off, Pid);
- 
-    begin
- 
-       Dup2 (Save_Input,  GNAT.OS_Lib.Standin);
-       Dup2 (Save_Output, GNAT.OS_Lib.Standout);
-       Dup2 (Save_Error,  GNAT.OS_Lib.Standerr);
- 
-       Close (Save_Input);
-       Close (Save_Output);
-       Close (Save_Error);
- 
-       Close (Pipe1.Input);
-       Close (Pipe2.Output);
-       Close (Pipe3.Output);
-    end Set_Up_Parent_Communications;
- 
-    ------------------
-    -- Trace_Filter --
-    ------------------
- 
-    procedure Trace_Filter
-      (Descriptor : Process_Descriptor'Class;
-       Str        : String;
-       User_Data  : System.Address := System.Null_Address)
-    is
-       pragma Warnings (Off, Descriptor);
-       pragma Warnings (Off, User_Data);
- 
-    begin
-       GNAT.IO.Put (Str);
-    end Trace_Filter;
- 
-    --------------------
-    -- Unlock_Filters --
-    --------------------
- 
-    procedure Unlock_Filters (Descriptor : in out Process_Descriptor) is
-    begin
-       if Descriptor.Filters_Lock > 0 then
-          Descriptor.Filters_Lock := Descriptor.Filters_Lock - 1;
-       end if;
-    end Unlock_Filters;
- 
- end GNAT.Expect;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/3vsoccon.ads gcc-4.0.0/gcc/ada/3vsoccon.ads
*** gcc-3.4.3/gcc/ada/3vsoccon.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/3vsoccon.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,158 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --               G N A T . S O C K E T S . C O N S T A N T S                --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --          Copyright (C) 2000-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package provides target dependent definitions of constant for use
- --  by the GNAT.Sockets package (g-socket.ads). This package should not be
- --  directly with'ed by an applications program.
- 
- --  This is the version for Alpha/VMS
- 
- package GNAT.Sockets.Constants is
- 
-    --------------
-    -- Families --
-    --------------
- 
-    AF_INET            : constant :=            2; --  IPv4 address family
-    AF_INET6           : constant :=           26; --  IPv6 address family
- 
-    -----------
-    -- Modes --
-    -----------
- 
-    SOCK_STREAM        : constant :=            1; --  Stream socket
-    SOCK_DGRAM         : constant :=            2; --  Datagram socket
- 
-    -------------------
-    -- Socket errors --
-    -------------------
- 
-    EACCES             : constant :=           13; --  Permission denied
-    EADDRINUSE         : constant :=           48; --  Address already in use
-    EADDRNOTAVAIL      : constant :=           49; --  Cannot assign address
-    EAFNOSUPPORT       : constant :=           47; --  Addr family not supported
-    EALREADY           : constant :=           37; --  Operation in progress
-    EBADF              : constant :=            9; --  Bad file descriptor
-    ECONNABORTED       : constant :=           53; --  Connection aborted
-    ECONNREFUSED       : constant :=           61; --  Connection refused
-    ECONNRESET         : constant :=           54; --  Connection reset by peer
-    EDESTADDRREQ       : constant :=           39; --  Destination addr required
-    EFAULT             : constant :=           45; --  Bad address
-    EHOSTDOWN          : constant :=           64; --  Host is down
-    EHOSTUNREACH       : constant :=           65; --  No route to host
-    EINPROGRESS        : constant :=           36; --  Operation now in progress
-    EINTR              : constant :=            4; --  Interrupted system call
-    EINVAL             : constant :=           22; --  Invalid argument
-    EIO                : constant :=            5; --  Input output error
-    EISCONN            : constant :=           56; --  Socket already connected
-    ELOOP              : constant :=           62; --  Too many symbolic lynks
-    EMFILE             : constant :=           24; --  Too many open files
-    EMSGSIZE           : constant :=           40; --  Message too long
-    ENAMETOOLONG       : constant :=           63; --  Name too long
-    ENETDOWN           : constant :=           50; --  Network is down
-    ENETRESET          : constant :=           52; --  Disconn. on network reset
-    ENETUNREACH        : constant :=           51; --  Network is unreachable
-    ENOBUFS            : constant :=           55; --  No buffer space available
-    ENOPROTOOPT        : constant :=           42; --  Protocol not available
-    ENOTCONN           : constant :=           57; --  Socket not connected
-    ENOTSOCK           : constant :=           38; --  Operation on non socket
-    EOPNOTSUPP         : constant :=           95; --  Operation not supported
-    EPFNOSUPPORT       : constant :=           46; --  Unknown protocol family
-    EPROTONOSUPPORT    : constant :=           43; --  Unknown protocol
-    EPROTOTYPE         : constant :=           41; --  Unknown protocol type
-    ESHUTDOWN          : constant :=           58; --  Cannot send once shutdown
-    ESOCKTNOSUPPORT    : constant :=           44; --  Socket type not supported
-    ETIMEDOUT          : constant :=           60; --  Connection timed out
-    ETOOMANYREFS       : constant :=           59; --  Too many references
-    EWOULDBLOCK        : constant :=           35; --  Operation would block
- 
-    -----------------
-    -- Host errors --
-    -----------------
- 
-    HOST_NOT_FOUND     : constant :=            1; --  Unknown host
-    TRY_AGAIN          : constant :=            2; --  Host name lookup failure
-    NO_DATA            : constant :=            4; --  No data record for name
-    NO_RECOVERY        : constant :=            3; --  Non recoverable errors
- 
-    -------------------
-    -- Control flags --
-    -------------------
- 
-    FIONBIO            : constant :=  -2147195266; --  Set/clear non-blocking io
-    FIONREAD           : constant :=   1074030207; --  How many bytes to read
- 
-    --------------------
-    -- Shutdown modes --
-    --------------------
- 
-    SHUT_RD            : constant :=            0; --  No more recv
-    SHUT_WR            : constant :=            1; --  No more send
-    SHUT_RDWR          : constant :=            2; --  No more recv/send
- 
-    ---------------------
-    -- Protocol levels --
-    ---------------------
- 
-    SOL_SOCKET         : constant :=     16#FFFF#; --  Options for socket level
-    IPPROTO_IP         : constant :=            0; --  Dummy protocol for IP
-    IPPROTO_UDP        : constant :=           17; --  UDP
-    IPPROTO_TCP        : constant :=            6; --  TCP
- 
-    -------------------
-    -- Request flags --
-    -------------------
- 
-    MSG_OOB            : constant :=            1; --  Process out-of-band data
-    MSG_PEEK           : constant :=            2; --  Peek at incoming data
-    MSG_EOR            : constant :=            8; --  Send end of record
-    MSG_WAITALL        : constant :=           64; --  Wait for full reception
- 
-    --------------------
-    -- Socket options --
-    --------------------
- 
-    TCP_NODELAY        : constant :=            1; --  Do not coalesce packets
-    SO_SNDBUF          : constant :=     16#1001#; --  Set/get send buffer size
-    SO_RCVBUF          : constant :=     16#1002#; --  Set/get recv buffer size
-    SO_REUSEADDR       : constant :=     16#0004#; --  Bind reuse local address
-    SO_KEEPALIVE       : constant :=     16#0008#; --  Enable keep-alive msgs
-    SO_LINGER          : constant :=     16#0080#; --  Defer close to flush data
-    SO_ERROR           : constant :=     16#1007#; --  Get/clear error status
-    SO_BROADCAST       : constant :=     16#0020#; --  Can send broadcast msgs
-    IP_ADD_MEMBERSHIP  : constant :=           12; --  Join a multicast group
-    IP_DROP_MEMBERSHIP : constant :=           13; --  Leave a multicast group
-    IP_MULTICAST_TTL   : constant :=           10; --  Set/get multicast TTL
-    IP_MULTICAST_LOOP  : constant :=           11; --  Set/get mcast loopback
- 
- end GNAT.Sockets.Constants;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/3vsocthi.adb gcc-4.0.0/gcc/ada/3vsocthi.adb
*** gcc-3.4.3/gcc/ada/3vsocthi.adb	Mon Jan 12 11:45:23 2004
--- gcc-4.0.0/gcc/ada/3vsocthi.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,551 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                    G N A T . S O C K E T S . T H I N                     --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --              Copyright (C) 2001-2004 Ada Core Technologies, Inc.         --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  Temporary version for Alpha/VMS.
- 
- with GNAT.OS_Lib; use GNAT.OS_Lib;
- with GNAT.Task_Lock;
- 
- with Interfaces.C; use Interfaces.C;
- 
- package body GNAT.Sockets.Thin is
- 
-    Non_Blocking_Sockets : constant Fd_Set_Access
-      := New_Socket_Set (No_Socket_Set);
-    --  When this package is initialized with Process_Blocking_IO set
-    --  to True, sockets are set in non-blocking mode to avoid blocking
-    --  the whole process when a thread wants to perform a blocking IO
-    --  operation. But the user can also set a socket in non-blocking
-    --  mode by purpose. In order to make a difference between these
-    --  two situations, we track the origin of non-blocking mode in
-    --  Non_Blocking_Sockets. If S is in Non_Blocking_Sockets, it has
-    --  been set in non-blocking mode by the user.
- 
-    Quantum : constant Duration := 0.2;
-    --  When Thread_Blocking_IO is False, we set sockets in
-    --  non-blocking mode and we spend a period of time Quantum between
-    --  two attempts on a blocking operation.
- 
-    Thread_Blocking_IO : Boolean := True;
- 
-    Unknown_System_Error : constant C.Strings.chars_ptr :=
-      C.Strings.New_String ("Unknown system error");
- 
-    function Syscall_Accept
-      (S       : C.int;
-       Addr    : System.Address;
-       Addrlen : access C.int) return C.int;
-    pragma Import (C, Syscall_Accept, "accept");
- 
-    function Syscall_Connect
-      (S       : C.int;
-       Name    : System.Address;
-       Namelen : C.int) return C.int;
-    pragma Import (C, Syscall_Connect, "connect");
- 
-    function Syscall_Ioctl
-      (S    : C.int;
-       Req  : C.int;
-       Arg  : Int_Access) return C.int;
-    pragma Import (C, Syscall_Ioctl, "ioctl");
- 
-    function Syscall_Recv
-      (S     : C.int;
-       Msg   : System.Address;
-       Len   : C.int;
-       Flags : C.int) return C.int;
-    pragma Import (C, Syscall_Recv, "recv");
- 
-    function Syscall_Recvfrom
-      (S       : C.int;
-       Msg     : System.Address;
-       Len     : C.int;
-       Flags   : C.int;
-       From    : Sockaddr_In_Access;
-       Fromlen : access C.int) return C.int;
-    pragma Import (C, Syscall_Recvfrom, "recvfrom");
- 
-    function Syscall_Send
-      (S     : C.int;
-       Msg   : System.Address;
-       Len   : C.int;
-       Flags : C.int)
-       return  C.int;
-    pragma Import (C, Syscall_Send, "send");
- 
-    function Syscall_Sendto
-      (S     : C.int;
-       Msg   : System.Address;
-       Len   : C.int;
-       Flags : C.int;
-       To    : Sockaddr_In_Access;
-       Tolen : C.int)
-       return  C.int;
-    pragma Import (C, Syscall_Sendto, "sendto");
- 
-    function Syscall_Socket
-      (Domain, Typ, Protocol : C.int) return C.int;
-    pragma Import (C, Syscall_Socket, "socket");
- 
-    function  Non_Blocking_Socket (S : C.int) return Boolean;
-    procedure Set_Non_Blocking_Socket (S : C.int; V : Boolean);
- 
-    --------------
-    -- C_Accept --
-    --------------
- 
-    function C_Accept
-      (S       : C.int;
-       Addr    : System.Address;
-       Addrlen : access C.int) return C.int
-    is
-       R   : C.int;
-       Val : aliased C.int := 1;
- 
-       Discard : C.int;
-       pragma Warnings (Off, Discard);
- 
-    begin
-       loop
-          R := Syscall_Accept (S, Addr, Addrlen);
-          exit when Thread_Blocking_IO
-            or else R /= Failure
-            or else Non_Blocking_Socket (S)
-            or else Errno /= Constants.EWOULDBLOCK;
-          delay Quantum;
-       end loop;
- 
-       if not Thread_Blocking_IO
-         and then R /= Failure
-       then
-          --  A socket inherits the properties ot its server especially
-          --  the FIONBIO flag. Do not use C_Ioctl as this subprogram
-          --  tracks sockets set in non-blocking mode by user.
- 
-          Set_Non_Blocking_Socket (R, Non_Blocking_Socket (S));
-          Discard := Syscall_Ioctl (R, Constants.FIONBIO, Val'Unchecked_Access);
-       end if;
- 
-       return R;
-    end C_Accept;
- 
-    ---------------
-    -- C_Connect --
-    ---------------
- 
-    function C_Connect
-      (S       : C.int;
-       Name    : System.Address;
-       Namelen : C.int) return C.int
-    is
-       Res : C.int;
- 
-    begin
-       Res := Syscall_Connect (S, Name, Namelen);
- 
-       if Thread_Blocking_IO
-         or else Res /= Failure
-         or else Non_Blocking_Socket (S)
-         or else Errno /= Constants.EINPROGRESS
-       then
-          return Res;
-       end if;
- 
-       declare
-          WSet : Fd_Set_Access;
-          Now  : aliased Timeval;
- 
-       begin
-          WSet := New_Socket_Set (No_Socket_Set);
-          loop
-             Insert_Socket_In_Set (WSet, S);
-             Now := Immediat;
-             Res := C_Select
-               (S + 1,
-                No_Fd_Set,
-                WSet,
-                No_Fd_Set,
-                Now'Unchecked_Access);
- 
-             exit when Res > 0;
- 
-             if Res = Failure then
-                Free_Socket_Set (WSet);
-                return Res;
-             end if;
- 
-             delay Quantum;
-          end loop;
- 
-          Free_Socket_Set (WSet);
-       end;
- 
-       Res := Syscall_Connect (S, Name, Namelen);
- 
-       if Res = Failure
-         and then Errno = Constants.EISCONN
-       then
-          return Thin.Success;
-       else
-          return Res;
-       end if;
-    end C_Connect;
- 
-    -------------
-    -- C_Ioctl --
-    -------------
- 
-    function C_Ioctl
-      (S   : C.int;
-       Req : C.int;
-       Arg : Int_Access) return C.int
-    is
-    begin
-       if not Thread_Blocking_IO
-         and then Req = Constants.FIONBIO
-       then
-          if Arg.all /= 0 then
-             Set_Non_Blocking_Socket (S, True);
-          end if;
-       end if;
- 
-       return Syscall_Ioctl (S, Req, Arg);
-    end C_Ioctl;
- 
-    ------------
-    -- C_Recv --
-    ------------
- 
-    function C_Recv
-      (S     : C.int;
-       Msg   : System.Address;
-       Len   : C.int;
-       Flags : C.int) return C.int
-    is
-       Res : C.int;
- 
-    begin
-       loop
-          Res := Syscall_Recv (S, Msg, Len, Flags);
-          exit when Thread_Blocking_IO
-            or else Res /= Failure
-            or else Non_Blocking_Socket (S)
-            or else Errno /= Constants.EWOULDBLOCK;
-          delay Quantum;
-       end loop;
- 
-       return Res;
-    end C_Recv;
- 
-    ----------------
-    -- C_Recvfrom --
-    ----------------
- 
-    function C_Recvfrom
-      (S       : C.int;
-       Msg     : System.Address;
-       Len     : C.int;
-       Flags   : C.int;
-       From    : Sockaddr_In_Access;
-       Fromlen : access C.int) return C.int
-    is
-       Res : C.int;
- 
-    begin
-       loop
-          Res := Syscall_Recvfrom (S, Msg, Len, Flags, From, Fromlen);
-          exit when Thread_Blocking_IO
-            or else Res /= Failure
-            or else Non_Blocking_Socket (S)
-            or else Errno /= Constants.EWOULDBLOCK;
-          delay Quantum;
-       end loop;
- 
-       return Res;
-    end C_Recvfrom;
- 
-    ------------
-    -- C_Send --
-    ------------
- 
-    function C_Send
-      (S     : C.int;
-       Msg   : System.Address;
-       Len   : C.int;
-       Flags : C.int) return C.int
-    is
-       Res : C.int;
- 
-    begin
-       loop
-          Res := Syscall_Send (S, Msg, Len, Flags);
-          exit when Thread_Blocking_IO
-            or else Res /= Failure
-            or else Non_Blocking_Socket (S)
-            or else Errno /= Constants.EWOULDBLOCK;
-          delay Quantum;
-       end loop;
- 
-       return Res;
-    end C_Send;
- 
-    --------------
-    -- C_Sendto --
-    --------------
- 
-    function C_Sendto
-      (S     : C.int;
-       Msg   : System.Address;
-       Len   : C.int;
-       Flags : C.int;
-       To    : Sockaddr_In_Access;
-       Tolen : C.int) return C.int
-    is
-       Res : C.int;
- 
-    begin
-       loop
-          Res := Syscall_Sendto (S, Msg, Len, Flags, To, Tolen);
-          exit when Thread_Blocking_IO
-            or else Res /= Failure
-            or else Non_Blocking_Socket (S)
-            or else Errno /= Constants.EWOULDBLOCK;
-          delay Quantum;
-       end loop;
- 
-       return Res;
-    end C_Sendto;
- 
-    --------------
-    -- C_Socket --
-    --------------
- 
-    function C_Socket
-      (Domain   : C.int;
-       Typ      : C.int;
-       Protocol : C.int) return C.int
-    is
-       R   : C.int;
-       Val : aliased C.int := 1;
- 
-       Discard : C.int;
-       pragma Unreferenced (Discard);
- 
-    begin
-       R := Syscall_Socket (Domain, Typ, Protocol);
- 
-       if not Thread_Blocking_IO
-         and then R /= Failure
-       then
-          --  Do not use C_Ioctl as this subprogram tracks sockets set
-          --  in non-blocking mode by user.
- 
-          Discard := Syscall_Ioctl (R, Constants.FIONBIO, Val'Unchecked_Access);
-          Set_Non_Blocking_Socket (R, False);
-       end if;
- 
-       return R;
-    end C_Socket;
- 
-    --------------
-    -- Finalize --
-    --------------
- 
-    procedure Finalize is
-    begin
-       null;
-    end Finalize;
- 
-    ----------------
-    -- Initialize --
-    ----------------
- 
-    procedure Initialize (Process_Blocking_IO : Boolean) is
-    begin
-       Thread_Blocking_IO := not Process_Blocking_IO;
-    end Initialize;
- 
-    -------------------------
-    -- Non_Blocking_Socket --
-    -------------------------
- 
-    function Non_Blocking_Socket (S : C.int) return Boolean is
-       R : Boolean;
-    begin
-       Task_Lock.Lock;
-       R := Is_Socket_In_Set (Non_Blocking_Sockets, S);
-       Task_Lock.Unlock;
-       return R;
-    end Non_Blocking_Socket;
- 
-    -----------------
-    -- Set_Address --
-    -----------------
- 
-    procedure Set_Address (Sin : Sockaddr_In_Access; Address : In_Addr) is
-    begin
-       Sin.Sin_Addr   := Address;
-    end Set_Address;
- 
-    ----------------
-    -- Set_Family --
-    ----------------
- 
-    procedure Set_Family (Sin : Sockaddr_In_Access; Family : C.int) is
-    begin
-       Sin.Sin_Family := C.unsigned_short (Family);
-    end Set_Family;
- 
-    ----------------
-    -- Set_Length --
-    ----------------
- 
-    procedure Set_Length (Sin : Sockaddr_In_Access; Len : C.int) is
-       pragma Unreferenced (Sin);
-       pragma Unreferenced (Len);
-    begin
-       null;
-    end Set_Length;
- 
-    -----------------------------
-    -- Set_Non_Blocking_Socket --
-    -----------------------------
- 
-    procedure Set_Non_Blocking_Socket (S : C.int; V : Boolean) is
-    begin
-       Task_Lock.Lock;
- 
-       if V then
-          Insert_Socket_In_Set (Non_Blocking_Sockets, S);
-       else
-          Remove_Socket_From_Set (Non_Blocking_Sockets, S);
-       end if;
- 
-       Task_Lock.Unlock;
-    end Set_Non_Blocking_Socket;
- 
-    --------------
-    -- Set_Port --
-    --------------
- 
-    procedure Set_Port (Sin : Sockaddr_In_Access; Port : C.unsigned_short) is
-    begin
-       Sin.Sin_Port   := Port;
-    end Set_Port;
- 
-    --------------------------
-    -- Socket_Error_Message --
-    --------------------------
- 
-    function Socket_Error_Message
-      (Errno : Integer) return C.Strings.chars_ptr
-    is
-       use type Interfaces.C.Strings.chars_ptr;
- 
-       C_Msg : C.Strings.chars_ptr;
- 
-    begin
-       C_Msg := C_Strerror (C.int (Errno));
- 
-       if C_Msg = C.Strings.Null_Ptr then
-          return Unknown_System_Error;
-       else
-          return C_Msg;
-       end if;
-    end Socket_Error_Message;
- 
-    -------------
-    -- C_Readv --
-    -------------
- 
-    function C_Readv
-      (Fd     : C.int;
-       Iov    : System.Address;
-       Iovcnt : C.int) return C.int
-    is
-       Res : C.int;
-       Count : C.int := 0;
- 
-       Iovec : array (0 .. Iovcnt - 1) of Vector_Element;
-       for Iovec'Address use Iov;
-       pragma Import (Ada, Iovec);
- 
-    begin
-       for J in Iovec'Range loop
-          Res := C_Read
-            (Fd,
-             Iovec (J).Base.all'Address,
-             Interfaces.C.int (Iovec (J).Length));
- 
-          if Res < 0 then
-             return Res;
-          else
-             Count := Count + Res;
-          end if;
-       end loop;
-       return Count;
-    end C_Readv;
- 
-    --------------
-    -- C_Writev --
-    --------------
- 
-    function C_Writev
-      (Fd     : C.int;
-       Iov    : System.Address;
-       Iovcnt : C.int) return C.int
-    is
-       Res : C.int;
-       Count : C.int := 0;
- 
-       Iovec : array (0 .. Iovcnt - 1) of Vector_Element;
-       for Iovec'Address use Iov;
-       pragma Import (Ada, Iovec);
- 
-    begin
-       for J in Iovec'Range loop
-          Res := C_Write
-            (Fd,
-             Iovec (J).Base.all'Address,
-             Interfaces.C.int (Iovec (J).Length));
- 
-          if Res < 0 then
-             return Res;
-          else
-             Count := Count + Res;
-          end if;
-       end loop;
-       return Count;
-    end C_Writev;
- 
- end GNAT.Sockets.Thin;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/3vsocthi.ads gcc-4.0.0/gcc/ada/3vsocthi.ads
*** gcc-3.4.3/gcc/ada/3vsocthi.ads	Mon Jan 12 11:45:23 2004
--- gcc-4.0.0/gcc/ada/3vsocthi.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,445 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                    G N A T . S O C K E T S . T H I N                     --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --            Copyright (C) 2002-2004 Ada Core Technologies, Inc.           --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package provides a target dependent thin interface to the sockets
- --  layer for use by the GNAT.Sockets package (g-socket.ads). This package
- --  should not be directly with'ed by an applications program.
- 
- --  This is the Alpha/VMS version.
- 
- with Interfaces.C.Pointers;
- 
- with Interfaces.C.Strings;
- with GNAT.Sockets.Constants;
- with GNAT.OS_Lib;
- 
- with System;
- 
- package GNAT.Sockets.Thin is
- 
-    --  ??? more comments needed ???
- 
-    package C renames Interfaces.C;
- 
-    use type C.int;
-    --  This is so we can declare the Failure constant below
- 
-    Success : constant C.int :=  0;
-    Failure : constant C.int := -1;
- 
-    function Socket_Errno return Integer renames GNAT.OS_Lib.Errno;
-    --  Returns last socket error number.
- 
-    function Socket_Error_Message (Errno : Integer) return C.Strings.chars_ptr;
-    --  Returns the error message string for the error number Errno. If
-    --  Errno is not known it returns "Unknown system error".
- 
-    subtype Fd_Set_Access is System.Address;
-    No_Fd_Set : constant Fd_Set_Access := System.Null_Address;
- 
-    type Timeval_Unit is new C.int;
-    pragma Convention (C, Timeval_Unit);
- 
-    type Timeval is record
-       Tv_Sec  : Timeval_Unit;
-       Tv_Usec : Timeval_Unit;
-    end record;
-    pragma Convention (C, Timeval);
- 
-    type Timeval_Access is access all Timeval;
-    pragma Convention (C, Timeval_Access);
- 
-    Immediat : constant Timeval := (0, 0);
- 
-    type Int_Access is access all C.int;
-    pragma Convention (C, Int_Access);
-    --  Access to C integers
- 
-    type Chars_Ptr_Array is array (C.size_t range <>) of
-      aliased C.Strings.chars_ptr;
- 
-    package Chars_Ptr_Pointers is
-       new C.Pointers (C.size_t, C.Strings.chars_ptr, Chars_Ptr_Array,
-                       C.Strings.Null_Ptr);
-    --  Arrays of C (char *)
- 
-    type In_Addr is record
-       S_B1, S_B2, S_B3, S_B4 : C.unsigned_char;
-    end record;
-    pragma Convention (C, In_Addr);
-    --  Internet address
- 
-    type In_Addr_Access is access all In_Addr;
-    pragma Convention (C, In_Addr_Access);
-    --  Access to internet address
- 
-    Inaddr_Any : aliased constant In_Addr := (others => 0);
-    --  Any internet address (all the interfaces)
- 
-    type In_Addr_Access_Array is array (C.size_t range <>)
-      of aliased In_Addr_Access;
-    pragma Convention (C, In_Addr_Access_Array);
- 
-    package In_Addr_Access_Pointers is
-      new C.Pointers (C.size_t, In_Addr_Access, In_Addr_Access_Array, null);
-    --  Array of internet addresses
- 
-    type Sockaddr is record
-       Sa_Family : C.unsigned_short;
-       Sa_Data   : C.char_array (1 .. 14);
-    end record;
-    pragma Convention (C, Sockaddr);
-    --  Socket address
- 
-    type Sockaddr_Access is access all Sockaddr;
-    pragma Convention (C, Sockaddr_Access);
-    --  Access to socket address
- 
-    type Sockaddr_In is record
-       Sin_Family : C.unsigned_short      := Constants.AF_INET;
-       Sin_Port   : C.unsigned_short      := 0;
-       Sin_Addr   : In_Addr               := Inaddr_Any;
-       Sin_Zero   : C.char_array (1 .. 8) := (others => C.char'Val (0));
-    end record;
-    pragma Convention (C, Sockaddr_In);
-    --  Internet socket address
- 
-    type Sockaddr_In_Access is access all Sockaddr_In;
-    pragma Convention (C, Sockaddr_In_Access);
-    --  Access to internet socket address
- 
-    procedure Set_Length
-      (Sin : Sockaddr_In_Access;
-       Len : C.int);
-    pragma Inline (Set_Length);
-    --  Set Sin.Sin_Length to Len.
-    --  On this platform, nothing is done as there is no such field.
- 
-    procedure Set_Family
-      (Sin    : Sockaddr_In_Access;
-       Family : C.int);
-    pragma Inline (Set_Family);
-    --  Set Sin.Sin_Family to Family
- 
-    procedure Set_Port
-      (Sin     : Sockaddr_In_Access;
-       Port    : C.unsigned_short);
-    pragma Inline (Set_Port);
-    --  Set Sin.Sin_Port to Port
- 
-    procedure Set_Address
-      (Sin     : Sockaddr_In_Access;
-       Address : In_Addr);
-    pragma Inline (Set_Address);
-    --  Set Sin.Sin_Addr to Address
- 
-    type Hostent is record
-       H_Name      : C.Strings.chars_ptr;
-       H_Aliases   : Chars_Ptr_Pointers.Pointer;
-       H_Addrtype  : C.int;
-       H_Length    : C.int;
-       H_Addr_List : In_Addr_Access_Pointers.Pointer;
-    end record;
-    pragma Convention (C, Hostent);
-    --  Host entry
- 
-    type Hostent_Access is access all Hostent;
-    pragma Convention (C, Hostent_Access);
-    --  Access to host entry
- 
-    type Servent is record
-       S_Name    : C.Strings.chars_ptr;
-       S_Aliases : Chars_Ptr_Pointers.Pointer;
-       S_Port    : C.int;
-       S_Proto   : C.Strings.chars_ptr;
-    end record;
-    pragma Convention (C, Servent);
-    --  Service entry
- 
-    type Servent_Access is access all Servent;
-    pragma Convention (C, Servent_Access);
-    --  Access to service entry
- 
-    type Two_Int is array (0 .. 1) of C.int;
-    pragma Convention (C, Two_Int);
-    --  Used with pipe()
- 
-    function C_Accept
-      (S       : C.int;
-       Addr    : System.Address;
-       Addrlen : access C.int)
-       return    C.int;
- 
-    function C_Bind
-      (S       : C.int;
-       Name    : System.Address;
-       Namelen : C.int)
-       return    C.int;
- 
-    function C_Close
-      (Fd   : C.int)
-       return C.int;
- 
-    function C_Connect
-      (S       : C.int;
-       Name    : System.Address;
-       Namelen : C.int)
-       return    C.int;
- 
-    function C_Gethostbyaddr
-      (Addr : System.Address;
-       Len  : C.int;
-       Typ  : C.int)
-       return Hostent_Access;
- 
-    function C_Gethostbyname
-      (Name : C.char_array)
-       return Hostent_Access;
- 
-    function C_Gethostname
-      (Name    : System.Address;
-       Namelen : C.int)
-       return    C.int;
- 
-    function C_Getpeername
-      (S       : C.int;
-       Name    : System.Address;
-       Namelen : access C.int)
-       return    C.int;
- 
-    function C_Getservbyname
-      (Name  : C.char_array;
-       Proto : C.char_array)
-       return Servent_Access;
- 
-    function C_Getservbyport
-      (Port  : C.int;
-       Proto : C.char_array)
-       return Servent_Access;
- 
-    function C_Getsockname
-      (S       : C.int;
-       Name    : System.Address;
-       Namelen : access C.int)
-       return    C.int;
- 
-    function C_Getsockopt
-      (S       : C.int;
-       Level   : C.int;
-       Optname : C.int;
-       Optval  : System.Address;
-       Optlen  : access C.int)
-       return    C.int;
- 
-    function C_Inet_Addr
-      (Cp   : C.Strings.chars_ptr)
-       return C.int;
- 
-    function C_Ioctl
-      (S    : C.int;
-       Req  : C.int;
-       Arg  : Int_Access)
-       return C.int;
- 
-    function C_Listen (S, Backlog : C.int) return C.int;
- 
-    function C_Read
-      (Fd    : C.int;
-       Buf   : System.Address;
-       Count : C.int)
-       return  C.int;
- 
-    function C_Readv
-      (Fd     : C.int;
-       Iov    : System.Address;
-       Iovcnt : C.int)
-       return   C.int;
- 
-    function C_Recv
-      (S     : C.int;
-       Msg   : System.Address;
-       Len   : C.int;
-       Flags : C.int)
-       return  C.int;
- 
-    function C_Recvfrom
-      (S       : C.int;
-       Msg     : System.Address;
-       Len     : C.int;
-       Flags   : C.int;
-       From    : Sockaddr_In_Access;
-       Fromlen : access C.int)
-       return    C.int;
- 
-    function C_Select
-      (Nfds      : C.int;
-       Readfds   : Fd_Set_Access;
-       Writefds  : Fd_Set_Access;
-       Exceptfds : Fd_Set_Access;
-       Timeout   : Timeval_Access)
-       return      C.int;
- 
-    function C_Send
-      (S     : C.int;
-       Msg   : System.Address;
-       Len   : C.int;
-       Flags : C.int)
-       return  C.int;
- 
-    function C_Sendto
-      (S     : C.int;
-       Msg   : System.Address;
-       Len   : C.int;
-       Flags : C.int;
-       To    : Sockaddr_In_Access;
-       Tolen : C.int)
-       return  C.int;
- 
-    function C_Setsockopt
-      (S       : C.int;
-       Level   : C.int;
-       Optname : C.int;
-       Optval  : System.Address;
-       Optlen  : C.int)
-       return    C.int;
- 
-    function C_Shutdown
-      (S    : C.int;
-       How  : C.int)
-       return C.int;
- 
-    function C_Socket
-      (Domain   : C.int;
-       Typ      : C.int;
-       Protocol : C.int)
-       return     C.int;
- 
-    function C_Strerror
-      (Errnum : C.int)
-       return   C.Strings.chars_ptr;
- 
-    function C_System
-      (Command : System.Address)
-       return    C.int;
- 
-    function C_Write
-      (Fd    : C.int;
-       Buf   : System.Address;
-       Count : C.int)
-       return  C.int;
- 
-    function C_Writev
-      (Fd     : C.int;
-       Iov    : System.Address;
-       Iovcnt : C.int)
-       return   C.int;
- 
-    procedure Free_Socket_Set
-      (Set    : Fd_Set_Access);
-    --  Free system-dependent socket set.
- 
-    procedure Get_Socket_From_Set
-      (Set    : Fd_Set_Access;
-       Socket : Int_Access;
-       Last   : Int_Access);
-    --  Get last socket in Socket and remove it from the socket
-    --  set. The parameter Last is a maximum value of the largest
-    --  socket. This hint is used to avoid scanning very large socket
-    --  sets. After a call to Get_Socket_From_Set, Last is set back to
-    --  the real largest socket in the socket set.
- 
-    procedure Insert_Socket_In_Set
-      (Set    : Fd_Set_Access;
-       Socket : C.int);
-    --  Insert socket in the socket set.
- 
-    function  Is_Socket_In_Set
-      (Set    : Fd_Set_Access;
-       Socket : C.int)
-      return Boolean;
-    --  Check whether Socket is in the socket set.
- 
-    procedure Last_Socket_In_Set
-      (Set    : Fd_Set_Access;
-       Last   : Int_Access);
-    --  Find the largest socket in the socket set. This is needed for
-    --  select(). When Last_Socket_In_Set is called, parameter Last is
-    --  a maximum value of the largest socket. This hint is used to
-    --  avoid scanning very large socket sets. After the call, Last is
-    --  set back to the real largest socket in the socket set.
- 
-    function  New_Socket_Set
-      (Set    : Fd_Set_Access)
-      return   Fd_Set_Access;
-    --  Allocate a new socket set which is a system-dependent structure
-    --  and initialize by copying Set if it is non-null, by making it
-    --  empty otherwise.
- 
-    procedure Remove_Socket_From_Set
-      (Set    : Fd_Set_Access;
-       Socket : C.int);
-    --  Remove socket from the socket set.
- 
-    procedure Finalize;
-    procedure Initialize (Process_Blocking_IO : Boolean);
- 
- private
- 
-    pragma Import (C, C_Bind,          "DECC$BIND");
-    pragma Import (C, C_Close,         "DECC$CLOSE");
-    pragma Import (C, C_Gethostbyaddr, "DECC$GETHOSTBYADDR");
-    pragma Import (C, C_Gethostbyname, "DECC$GETHOSTBYNAME");
-    pragma Import (C, C_Gethostname,   "DECC$GETHOSTNAME");
-    pragma Import (C, C_Getpeername,   "DECC$GETPEERNAME");
-    pragma Import (C, C_Getservbyname, "DECC$GETSERVBYNAME");
-    pragma Import (C, C_Getservbyport, "DECC$GETSERVBYPORT");
-    pragma Import (C, C_Getsockname,   "DECC$GETSOCKNAME");
-    pragma Import (C, C_Getsockopt,    "DECC$GETSOCKOPT");
-    pragma Import (C, C_Inet_Addr,     "DECC$INET_ADDR");
-    pragma Import (C, C_Listen,        "DECC$LISTEN");
-    pragma Import (C, C_Read,          "DECC$READ");
-    pragma Import (C, C_Select,        "DECC$SELECT");
-    pragma Import (C, C_Setsockopt,    "DECC$SETSOCKOPT");
-    pragma Import (C, C_Shutdown,      "DECC$SHUTDOWN");
-    pragma Import (C, C_Strerror,      "DECC$STRERROR");
-    pragma Import (C, C_System,        "DECC$SYSTEM");
-    pragma Import (C, C_Write,         "DECC$WRITE");
- 
-    pragma Import (C, Free_Socket_Set, "__gnat_free_socket_set");
-    pragma Import (C, Get_Socket_From_Set, "__gnat_get_socket_from_set");
-    pragma Import (C, Is_Socket_In_Set, "__gnat_is_socket_in_set");
-    pragma Import (C, Last_Socket_In_Set, "__gnat_last_socket_in_set");
-    pragma Import (C, New_Socket_Set, "__gnat_new_socket_set");
-    pragma Import (C, Insert_Socket_In_Set, "__gnat_insert_socket_in_set");
-    pragma Import (C, Remove_Socket_From_Set, "__gnat_remove_socket_from_set");
- end GNAT.Sockets.Thin;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/3vtrasym.adb gcc-4.0.0/gcc/ada/3vtrasym.adb
*** gcc-3.4.3/gcc/ada/3vtrasym.adb	Tue Nov  4 12:51:45 2003
--- gcc-4.0.0/gcc/ada/3vtrasym.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,282 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT RUN-TIME COMPONENTS                         --
- --                                                                          --
- --             G N A T . T R A C E B A C K . S Y M B O L I C                --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --           Copyright (C) 1999-2003 Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  Run-time symbolic traceback support for VMS
- 
- with Ada.Exceptions.Traceback; use Ada.Exceptions.Traceback;
- with Interfaces.C;
- with System;
- with System.Aux_DEC;
- with System.Soft_Links;
- with System.Traceback_Entries;
- 
- package body GNAT.Traceback.Symbolic is
- 
-    pragma Warnings (Off);
-    pragma Linker_Options ("--for-linker=sys$library:trace.exe");
- 
-    use Interfaces.C;
-    use System;
-    use System.Aux_DEC;
-    use System.Traceback_Entries;
- 
-    subtype User_Arg_Type is Unsigned_Longword;
-    subtype Cond_Value_Type is Unsigned_Longword;
- 
-    type ASCIC is record
-       Count : unsigned_char;
-       Data  : char_array (1 .. 255);
-    end record;
-    pragma Convention (C, ASCIC);
- 
-    for ASCIC use record
-       Count at 0 range 0 .. 7;
-       Data  at 1 range 0 .. 8 * 255 - 1;
-    end record;
-    for ASCIC'Size use 8 * 256;
- 
-    function Fetch_ASCIC is new Fetch_From_Address (ASCIC);
- 
-    procedure Symbolize
-      (Status         : out Cond_Value_Type;
-       Current_PC     : in Address;
-       Adjusted_PC    : in Address;
-       Current_FP     : in Address;
-       Current_R26    : in Address;
-       Image_Name     : out Address;
-       Module_Name    : out Address;
-       Routine_Name   : out Address;
-       Line_Number    : out Integer;
-       Relative_PC    : out Address;
-       Absolute_PC    : out Address;
-       PC_Is_Valid    : out Long_Integer;
-       User_Act_Proc  : Address           := Address'Null_Parameter;
-       User_Arg_Value : User_Arg_Type     := User_Arg_Type'Null_Parameter);
- 
-    pragma Interface (External, Symbolize);
- 
-    pragma Import_Valued_Procedure
-      (Symbolize, "TBK$SYMBOLIZE",
-       (Cond_Value_Type, Address, Address, Address, Address,
-        Address, Address, Address, Integer,
-        Address, Address, Long_Integer,
-        Address, User_Arg_Type),
-       (Value, Value, Value, Value, Value,
-        Reference, Reference, Reference, Reference,
-        Reference, Reference, Reference,
-        Value, Value),
-        User_Act_Proc);
- 
-    function Decode_Ada_Name (Encoded_Name : String) return String;
-    --  Decodes an Ada identifier name. Removes leading "_ada_" and trailing
-    --  __{DIGIT}+ or ${DIGIT}+, converts other "__" to '.'
- 
-    ---------------------
-    -- Decode_Ada_Name --
-    ---------------------
- 
-    function Decode_Ada_Name (Encoded_Name : String) return String is
-       Decoded_Name : String (1 .. Encoded_Name'Length);
-       Pos          : Integer := Encoded_Name'First;
-       Last         : Integer := Encoded_Name'Last;
-       DPos         : Integer := 1;
- 
-    begin
-       if Pos > Last then
-          return "";
-       end if;
- 
-       --  Skip leading _ada_
- 
-       if Encoded_Name'Length > 4
-         and then Encoded_Name (Pos .. Pos + 4) = "_ada_"
-       then
-          Pos := Pos + 5;
-       end if;
- 
-       --  Skip trailing __{DIGIT}+ or ${DIGIT}+
- 
-       if Encoded_Name (Last) in '0' .. '9' then
-          for J in reverse Pos + 2 .. Last - 1 loop
-             case Encoded_Name (J) is
-                when '0' .. '9' =>
-                   null;
-                when '$' =>
-                   Last := J - 1;
-                   exit;
-                when '_' =>
-                   if Encoded_Name (J - 1) = '_' then
-                      Last := J - 2;
-                   end if;
-                   exit;
-                when others =>
-                   exit;
-             end case;
-          end loop;
-       end if;
- 
-       --  Now just copy encoded name to decoded name, converting "__" to '.'
- 
-       while Pos <= Last loop
-          if Encoded_Name (Pos) = '_' and then Encoded_Name (Pos + 1) = '_'
-            and then Pos /= Encoded_Name'First
-          then
-             Decoded_Name (DPos) := '.';
-             Pos := Pos + 2;
- 
-          else
-             Decoded_Name (DPos) := Encoded_Name (Pos);
-             Pos := Pos + 1;
-          end if;
- 
-          DPos := DPos + 1;
-       end loop;
- 
-       return Decoded_Name (1 .. DPos - 1);
-    end Decode_Ada_Name;
- 
-    ------------------------
-    -- Symbolic_Traceback --
-    ------------------------
- 
-    function Symbolic_Traceback (Traceback : Tracebacks_Array) return String is
-       Status            : Cond_Value_Type;
-       Image_Name        : ASCIC;
-       Image_Name_Addr   : Address;
-       Module_Name       : ASCIC;
-       Module_Name_Addr  : Address;
-       Routine_Name      : ASCIC;
-       Routine_Name_Addr : Address;
-       Line_Number       : Integer;
-       Relative_PC       : Address;
-       Absolute_PC       : Address;
-       PC_Is_Valid       : Long_Integer;
-       Return_Address    : Address;
-       Res               : String (1 .. 256 * Traceback'Length);
-       Len               : Integer;
- 
-    begin
-       if Traceback'Length > 0 then
-          Len := 0;
- 
-          --  Since image computation is not thread-safe we need task lockout
- 
-          System.Soft_Links.Lock_Task.all;
- 
-          for J in Traceback'Range loop
-             if J = Traceback'Last then
-                Return_Address := Address_Zero;
-             else
-                Return_Address := PC_For (Traceback (J + 1));
-             end if;
- 
-             Symbolize
-               (Status,
-                PC_For (Traceback (J)),
-                PC_For (Traceback (J)),
-                PV_For (Traceback (J)),
-                Return_Address,
-                Image_Name_Addr,
-                Module_Name_Addr,
-                Routine_Name_Addr,
-                Line_Number,
-                Relative_PC,
-                Absolute_PC,
-                PC_Is_Valid);
- 
-             Image_Name   := Fetch_ASCIC (Image_Name_Addr);
-             Module_Name  := Fetch_ASCIC (Module_Name_Addr);
-             Routine_Name := Fetch_ASCIC (Routine_Name_Addr);
- 
-             declare
-                First : Integer := Len + 1;
-                Last  : Integer := First + 80 - 1;
-                Pos   : Integer;
-                Routine_Name_D : String := Decode_Ada_Name
-                  (To_Ada
-                     (Routine_Name.Data (1 .. size_t (Routine_Name.Count)),
-                      False));
- 
-             begin
-                Res (First .. Last) := (others => ' ');
- 
-                Res (First .. First + Integer (Image_Name.Count) - 1) :=
-                  To_Ada
-                   (Image_Name.Data (1 .. size_t (Image_Name.Count)),
-                    False);
- 
-                Res (First + 10 ..
-                     First + 10 + Integer (Module_Name.Count) - 1) :=
-                  To_Ada
-                   (Module_Name.Data (1 .. size_t (Module_Name.Count)),
-                    False);
- 
-                Res (First + 30 ..
-                     First + 30 + Routine_Name_D'Length - 1) :=
-                  Routine_Name_D;
- 
-                --  If routine name doesn't fit 20 characters, output
-                --  the line number on next line at 50th position
- 
-                if Routine_Name_D'Length > 20 then
-                   Pos := First + 30 + Routine_Name_D'Length;
-                   Res (Pos) := ASCII.LF;
-                   Last := Pos + 80;
-                   Res (Pos + 1 .. Last) := (others => ' ');
-                   Pos := Pos + 51;
-                else
-                   Pos := First + 50;
-                end if;
- 
-                Res (Pos .. Pos + Integer'Image (Line_Number)'Length - 1) :=
-                  Integer'Image (Line_Number);
- 
-                Res (Last) := ASCII.LF;
-                Len := Last;
-             end;
-          end loop;
- 
-          System.Soft_Links.Unlock_Task.all;
-          return Res (1 .. Len);
- 
-       else
-          return "";
-       end if;
-    end Symbolic_Traceback;
- 
-    function Symbolic_Traceback (E : Exception_Occurrence) return String is
-    begin
-       return Symbolic_Traceback (Tracebacks (E));
-    end Symbolic_Traceback;
- 
- end GNAT.Traceback.Symbolic;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/3wsoccon.ads gcc-4.0.0/gcc/ada/3wsoccon.ads
*** gcc-3.4.3/gcc/ada/3wsoccon.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/3wsoccon.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,158 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --               G N A T . S O C K E T S . C O N S T A N T S                --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --          Copyright (C) 2000-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package provides target dependent definitions of constant for use
- --  by the GNAT.Sockets package (g-socket.ads). This package should not be
- --  directly with'ed by an applications program.
- 
- --  This is the version for MINGW32 NT
- 
- package GNAT.Sockets.Constants is
- 
-    --------------
-    -- Families --
-    --------------
- 
-    AF_INET            : constant :=            2; --  IPv4 address family
-    AF_INET6           : constant :=            3; --  IPv6 address family
- 
-    -----------
-    -- Modes --
-    -----------
- 
-    SOCK_STREAM        : constant :=            1; --  Stream socket
-    SOCK_DGRAM         : constant :=            2; --  Datagram socket
- 
-    -------------------
-    -- Socket errors --
-    -------------------
- 
-    EACCES             : constant :=        10013; --  Permission denied
-    EADDRINUSE         : constant :=        10048; --  Address already in use
-    EADDRNOTAVAIL      : constant :=        10049; --  Cannot assign address
-    EAFNOSUPPORT       : constant :=        10047; --  Addr family not supported
-    EALREADY           : constant :=        10037; --  Operation in progress
-    EBADF              : constant :=        10009; --  Bad file descriptor
-    ECONNABORTED       : constant :=        10053; --  Connection aborted
-    ECONNREFUSED       : constant :=        10061; --  Connection refused
-    ECONNRESET         : constant :=        10054; --  Connection reset by peer
-    EDESTADDRREQ       : constant :=        10039; --  Destination addr required
-    EFAULT             : constant :=        10014; --  Bad address
-    EHOSTDOWN          : constant :=        10064; --  Host is down
-    EHOSTUNREACH       : constant :=        10065; --  No route to host
-    EINPROGRESS        : constant :=        10036; --  Operation now in progress
-    EINTR              : constant :=        10004; --  Interrupted system call
-    EINVAL             : constant :=        10022; --  Invalid argument
-    EIO                : constant :=        10101; --  Input output error
-    EISCONN            : constant :=        10056; --  Socket already connected
-    ELOOP              : constant :=        10062; --  Too many symbolic lynks
-    EMFILE             : constant :=        10024; --  Too many open files
-    EMSGSIZE           : constant :=        10040; --  Message too long
-    ENAMETOOLONG       : constant :=        10063; --  Name too long
-    ENETDOWN           : constant :=        10050; --  Network is down
-    ENETRESET          : constant :=        10052; --  Disconn. on network reset
-    ENETUNREACH        : constant :=        10051; --  Network is unreachable
-    ENOBUFS            : constant :=        10055; --  No buffer space available
-    ENOPROTOOPT        : constant :=        10042; --  Protocol not available
-    ENOTCONN           : constant :=        10057; --  Socket not connected
-    ENOTSOCK           : constant :=        10038; --  Operation on non socket
-    EOPNOTSUPP         : constant :=        10045; --  Operation not supported
-    EPFNOSUPPORT       : constant :=        10046; --  Unknown protocol family
-    EPROTONOSUPPORT    : constant :=        10043; --  Unknown protocol
-    EPROTOTYPE         : constant :=        10041; --  Unknown protocol type
-    ESHUTDOWN          : constant :=        10058; --  Cannot send once shutdown
-    ESOCKTNOSUPPORT    : constant :=        10044; --  Socket type not supported
-    ETIMEDOUT          : constant :=        10060; --  Connection timed out
-    ETOOMANYREFS       : constant :=        10059; --  Too many references
-    EWOULDBLOCK        : constant :=        10035; --  Operation would block
- 
-    -----------------
-    -- Host errors --
-    -----------------
- 
-    HOST_NOT_FOUND     : constant :=        11001; --  Unknown host
-    TRY_AGAIN          : constant :=        11002; --  Host name lookup failure
-    NO_DATA            : constant :=        11004; --  No data record for name
-    NO_RECOVERY        : constant :=        11003; --  Non recoverable errors
- 
-    -------------------
-    -- Control flags --
-    -------------------
- 
-    FIONBIO            : constant :=  -2147195266; --  Set/clear non-blocking io
-    FIONREAD           : constant :=   1074030207; --  How many bytes to read
- 
-    --------------------
-    -- Shutdown modes --
-    --------------------
- 
-    SHUT_RD            : constant :=            0; --  No more recv
-    SHUT_WR            : constant :=            1; --  No more send
-    SHUT_RDWR          : constant :=            2; --  No more recv/send
- 
-    ---------------------
-    -- Protocol levels --
-    ---------------------
- 
-    SOL_SOCKET         : constant :=        65535; --  Options for socket level
-    IPPROTO_IP         : constant :=            0; --  Dummy protocol for IP
-    IPPROTO_UDP        : constant :=           17; --  UDP
-    IPPROTO_TCP        : constant :=            6; --  TCP
- 
-    -------------------
-    -- Request flags --
-    -------------------
- 
-    MSG_OOB            : constant :=            1; --  Process out-of-band data
-    MSG_PEEK           : constant :=            2; --  Peek at incoming data
-    MSG_EOR            : constant :=           -1; --  Send end of record
-    MSG_WAITALL        : constant :=           -1; --  Wait for full reception
- 
-    --------------------
-    -- Socket options --
-    --------------------
- 
-    TCP_NODELAY        : constant :=            1; --  Do not coalesce packets
-    SO_SNDBUF          : constant :=         4097; --  Set/get send buffer size
-    SO_RCVBUF          : constant :=         4098; --  Set/get recv buffer size
-    SO_REUSEADDR       : constant :=            4; --  Bind reuse local address
-    SO_KEEPALIVE       : constant :=            8; --  Enable keep-alive msgs
-    SO_LINGER          : constant :=          128; --  Defer close to flush data
-    SO_ERROR           : constant :=         4103; --  Get/clear error status
-    SO_BROADCAST       : constant :=           32; --  Can send broadcast msgs
-    IP_ADD_MEMBERSHIP  : constant :=            5; --  Join a multicast group
-    IP_DROP_MEMBERSHIP : constant :=            6; --  Leave a multicast group
-    IP_MULTICAST_TTL   : constant :=            3; --  Set/get multicast TTL
-    IP_MULTICAST_LOOP  : constant :=            4; --  Set/get mcast loopback
- 
- end GNAT.Sockets.Constants;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/3wsocthi.adb gcc-4.0.0/gcc/ada/3wsocthi.adb
*** gcc-3.4.3/gcc/ada/3wsocthi.adb	Mon Jan 12 11:45:23 2004
--- gcc-4.0.0/gcc/ada/3wsocthi.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,587 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                    G N A T . S O C K E T S . T H I N                     --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --              Copyright (C) 2001-2004 Ada Core Technologies, Inc.         --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package provides a target dependent thin interface to the sockets
- --  layer for use by the GNAT.Sockets package (g-socket.ads). This package
- --  should not be directly with'ed by an applications program.
- 
- --  This version is for NT.
- 
- with GNAT.Sockets.Constants; use GNAT.Sockets.Constants;
- with Interfaces.C.Strings;   use Interfaces.C.Strings;
- 
- with System; use System;
- 
- package body GNAT.Sockets.Thin is
- 
-    use type C.unsigned;
- 
-    WSAData_Dummy : array (1 .. 512) of C.int;
- 
-    WS_Version  : constant := 16#0101#;
-    Initialized : Boolean := False;
- 
-    SYSNOTREADY          : constant := 10091;
-    VERNOTSUPPORTED      : constant := 10092;
-    NOTINITIALISED       : constant := 10093;
-    EDISCON              : constant := 10101;
- 
-    function Standard_Connect
-      (S       : C.int;
-       Name    : System.Address;
-       Namelen : C.int)
-       return    C.int;
-    pragma Import (Stdcall, Standard_Connect, "connect");
- 
-    function Standard_Select
-      (Nfds      : C.int;
-       Readfds   : Fd_Set_Access;
-       Writefds  : Fd_Set_Access;
-       Exceptfds : Fd_Set_Access;
-       Timeout   : Timeval_Access)
-       return      C.int;
-    pragma Import (Stdcall, Standard_Select, "select");
- 
-    type Error_Type is
-      (N_EINTR,
-       N_EBADF,
-       N_EACCES,
-       N_EFAULT,
-       N_EINVAL,
-       N_EMFILE,
-       N_EWOULDBLOCK,
-       N_EINPROGRESS,
-       N_EALREADY,
-       N_ENOTSOCK,
-       N_EDESTADDRREQ,
-       N_EMSGSIZE,
-       N_EPROTOTYPE,
-       N_ENOPROTOOPT,
-       N_EPROTONOSUPPORT,
-       N_ESOCKTNOSUPPORT,
-       N_EOPNOTSUPP,
-       N_EPFNOSUPPORT,
-       N_EAFNOSUPPORT,
-       N_EADDRINUSE,
-       N_EADDRNOTAVAIL,
-       N_ENETDOWN,
-       N_ENETUNREACH,
-       N_ENETRESET,
-       N_ECONNABORTED,
-       N_ECONNRESET,
-       N_ENOBUFS,
-       N_EISCONN,
-       N_ENOTCONN,
-       N_ESHUTDOWN,
-       N_ETOOMANYREFS,
-       N_ETIMEDOUT,
-       N_ECONNREFUSED,
-       N_ELOOP,
-       N_ENAMETOOLONG,
-       N_EHOSTDOWN,
-       N_EHOSTUNREACH,
-       N_SYSNOTREADY,
-       N_VERNOTSUPPORTED,
-       N_NOTINITIALISED,
-       N_EDISCON,
-       N_HOST_NOT_FOUND,
-       N_TRY_AGAIN,
-       N_NO_RECOVERY,
-       N_NO_DATA,
-       N_OTHERS);
- 
-    Error_Messages : constant array (Error_Type) of chars_ptr :=
-      (N_EINTR =>
-         New_String ("Interrupted system call"),
-       N_EBADF =>
-         New_String ("Bad file number"),
-       N_EACCES =>
-         New_String ("Permission denied"),
-       N_EFAULT =>
-         New_String ("Bad address"),
-       N_EINVAL =>
-         New_String ("Invalid argument"),
-       N_EMFILE =>
-         New_String ("Too many open files"),
-       N_EWOULDBLOCK =>
-         New_String ("Operation would block"),
-       N_EINPROGRESS =>
-         New_String ("Operation now in progress. This error is "
-                     & "returned if any Windows Sockets API "
-                     & "function is called while a blocking "
-                     & "function is in progress"),
-       N_EALREADY =>
-         New_String ("Operation already in progress"),
-       N_ENOTSOCK =>
-         New_String ("Socket operation on nonsocket"),
-       N_EDESTADDRREQ =>
-         New_String ("Destination address required"),
-       N_EMSGSIZE =>
-         New_String ("Message too long"),
-       N_EPROTOTYPE =>
-         New_String ("Protocol wrong type for socket"),
-       N_ENOPROTOOPT =>
-         New_String ("Protocol not available"),
-       N_EPROTONOSUPPORT =>
-         New_String ("Protocol not supported"),
-       N_ESOCKTNOSUPPORT =>
-         New_String ("Socket type not supported"),
-       N_EOPNOTSUPP =>
-         New_String ("Operation not supported on socket"),
-       N_EPFNOSUPPORT =>
-         New_String ("Protocol family not supported"),
-       N_EAFNOSUPPORT =>
-         New_String ("Address family not supported by protocol family"),
-       N_EADDRINUSE =>
-         New_String ("Address already in use"),
-       N_EADDRNOTAVAIL =>
-         New_String ("Cannot assign requested address"),
-       N_ENETDOWN =>
-         New_String ("Network is down. This error may be "
-                     & "reported at any time if the Windows "
-                     & "Sockets implementation detects an "
-                     & "underlying failure"),
-       N_ENETUNREACH =>
-         New_String ("Network is unreachable"),
-       N_ENETRESET =>
-         New_String ("Network dropped connection on reset"),
-       N_ECONNABORTED =>
-         New_String ("Software caused connection abort"),
-       N_ECONNRESET =>
-         New_String ("Connection reset by peer"),
-       N_ENOBUFS =>
-         New_String ("No buffer space available"),
-       N_EISCONN  =>
-         New_String ("Socket is already connected"),
-       N_ENOTCONN =>
-         New_String ("Socket is not connected"),
-       N_ESHUTDOWN =>
-         New_String ("Cannot send after socket shutdown"),
-       N_ETOOMANYREFS =>
-         New_String ("Too many references: cannot splice"),
-       N_ETIMEDOUT =>
-         New_String ("Connection timed out"),
-       N_ECONNREFUSED =>
-         New_String ("Connection refused"),
-       N_ELOOP =>
-         New_String ("Too many levels of symbolic links"),
-       N_ENAMETOOLONG =>
-         New_String ("File name too long"),
-       N_EHOSTDOWN =>
-         New_String ("Host is down"),
-       N_EHOSTUNREACH =>
-         New_String ("No route to host"),
-       N_SYSNOTREADY =>
-         New_String ("Returned by WSAStartup(), indicating that "
-                     & "the network subsystem is unusable"),
-       N_VERNOTSUPPORTED =>
-         New_String ("Returned by WSAStartup(), indicating that "
-                     & "the Windows Sockets DLL cannot support "
-                     & "this application"),
-       N_NOTINITIALISED =>
-         New_String ("Winsock not initialized. This message is "
-                     & "returned by any function except WSAStartup(), "
-                     & "indicating that a successful WSAStartup() has "
-                     & "not yet been performed"),
-       N_EDISCON =>
-         New_String ("Disconnect"),
-       N_HOST_NOT_FOUND =>
-         New_String ("Host not found. This message indicates "
-                     & "that the key (name, address, and so on) was not found"),
-       N_TRY_AGAIN =>
-         New_String ("Nonauthoritative host not found. This error may "
-                     & "suggest that the name service itself is not "
-                     & "functioning"),
-       N_NO_RECOVERY =>
-         New_String ("Nonrecoverable error. This error may suggest that the "
-                     & "name service itself is not functioning"),
-       N_NO_DATA =>
-         New_String ("Valid name, no data record of requested type. "
-                     & "This error indicates that the key (name, address, "
-                     & "and so on) was not found."),
-       N_OTHERS =>
-         New_String ("Unknown system error"));
- 
-    ---------------
-    -- C_Connect --
-    ---------------
- 
-    function C_Connect
-      (S       : C.int;
-       Name    : System.Address;
-       Namelen : C.int)
-       return    C.int
-    is
-       Res : C.int;
- 
-    begin
-       Res := Standard_Connect (S, Name, Namelen);
- 
-       if Res = -1 then
-          if Socket_Errno = EWOULDBLOCK then
-             Set_Socket_Errno (EINPROGRESS);
-          end if;
-       end if;
- 
-       return Res;
-    end C_Connect;
- 
-    -------------
-    -- C_Readv --
-    -------------
- 
-    function C_Readv
-      (Socket : C.int;
-       Iov    : System.Address;
-       Iovcnt : C.int)
-       return  C.int
-    is
-       Res : C.int;
-       Count : C.int := 0;
- 
-       Iovec : array (0 .. Iovcnt - 1) of Vector_Element;
-       for Iovec'Address use Iov;
-       pragma Import (Ada, Iovec);
- 
-    begin
-       for J in Iovec'Range loop
-          Res := C_Recv
-            (Socket,
-             Iovec (J).Base.all'Address,
-             C.int (Iovec (J).Length),
-             0);
- 
-          if Res < 0 then
-             return Res;
-          else
-             Count := Count + Res;
-          end if;
-       end loop;
-       return Count;
-    end C_Readv;
- 
-    --------------
-    -- C_Select --
-    --------------
- 
-    function C_Select
-      (Nfds      : C.int;
-       Readfds   : Fd_Set_Access;
-       Writefds  : Fd_Set_Access;
-       Exceptfds : Fd_Set_Access;
-       Timeout   : Timeval_Access)
-       return      C.int
-    is
-       pragma Warnings (Off, Exceptfds);
- 
-       RFS  : constant Fd_Set_Access := Readfds;
-       WFS  : constant Fd_Set_Access := Writefds;
-       WFSC : Fd_Set_Access := No_Fd_Set;
-       EFS  : Fd_Set_Access := Exceptfds;
-       Res  : C.int;
-       S    : aliased C.int;
-       Last : aliased C.int;
- 
-    begin
-       --  Asynchronous connection failures are notified in the
-       --  exception fd set instead of the write fd set. To ensure
-       --  POSIX compatitibility, copy write fd set into exception fd
-       --  set. Once select() returns, check any socket present in the
-       --  exception fd set and peek at incoming out-of-band data. If
-       --  the test is not successfull and if the socket is present in
-       --  the initial write fd set, then move the socket from the
-       --  exception fd set to the write fd set.
- 
-       if WFS /= No_Fd_Set then
-          --  Add any socket present in write fd set into exception fd set
- 
-          if EFS = No_Fd_Set then
-             EFS := New_Socket_Set (WFS);
- 
-          else
-             WFSC := New_Socket_Set (WFS);
- 
-             Last := Nfds - 1;
-             loop
-                Get_Socket_From_Set
-                  (WFSC, S'Unchecked_Access, Last'Unchecked_Access);
-                exit when S = -1;
-                Insert_Socket_In_Set (EFS, S);
-             end loop;
- 
-             Free_Socket_Set (WFSC);
-          end if;
- 
-          --  Keep a copy of write fd set
- 
-          WFSC := New_Socket_Set (WFS);
-       end if;
- 
-       Res := Standard_Select (Nfds, RFS, WFS, EFS, Timeout);
- 
-       if EFS /= No_Fd_Set then
-          declare
-             EFSC    : constant Fd_Set_Access := New_Socket_Set (EFS);
-             Flag    : constant C.int := MSG_PEEK + MSG_OOB;
-             Buffer  : Character;
-             Length  : C.int;
-             Fromlen : aliased C.int;
- 
-          begin
-             Last := Nfds - 1;
-             loop
-                Get_Socket_From_Set
-                  (EFSC, S'Unchecked_Access, Last'Unchecked_Access);
- 
-                --  No more sockets in EFSC
- 
-                exit when S = -1;
- 
-                --  Check out-of-band data
- 
-                Length := C_Recvfrom
-                  (S, Buffer'Address, 1, Flag,
-                   null, Fromlen'Unchecked_Access);
- 
-                --  If the signal is not an out-of-band data, then it
-                --  is a connection failure notification.
- 
-                if Length = -1 then
-                   Remove_Socket_From_Set (EFS, S);
- 
-                   --  If S is present in the initial write fd set,
-                   --  move it from exception fd set back to write fd
-                   --  set. Otherwise, ignore this event since the user
-                   --  is not watching for it.
- 
-                   if WFSC /= No_Fd_Set
-                     and then Is_Socket_In_Set (WFSC, S)
-                   then
-                      Insert_Socket_In_Set (WFS, S);
-                   end if;
-                end if;
-             end loop;
- 
-             Free_Socket_Set (EFSC);
-          end;
- 
-          if Exceptfds = No_Fd_Set then
-             Free_Socket_Set (EFS);
-          end if;
-       end if;
- 
-       --  Free any copy of write fd set
- 
-       if WFSC /= No_Fd_Set then
-          Free_Socket_Set (WFSC);
-       end if;
- 
-       return Res;
-    end C_Select;
- 
-    --------------
-    -- C_Writev --
-    --------------
- 
-    function C_Writev
-      (Socket : C.int;
-       Iov    : System.Address;
-       Iovcnt : C.int)
-       return   C.int
-    is
-       Res : C.int;
-       Count : C.int := 0;
- 
-       Iovec : array (0 .. Iovcnt - 1) of Vector_Element;
-       for Iovec'Address use Iov;
-       pragma Import (Ada, Iovec);
- 
-    begin
-       for J in Iovec'Range loop
-          Res := C_Send
-            (Socket,
-             Iovec (J).Base.all'Address,
-             C.int (Iovec (J).Length),
-             0);
- 
-          if Res < 0 then
-             return Res;
-          else
-             Count := Count + Res;
-          end if;
-       end loop;
-       return Count;
-    end C_Writev;
- 
-    --------------
-    -- Finalize --
-    --------------
- 
-    procedure Finalize is
-    begin
-       if Initialized then
-          WSACleanup;
-          Initialized := False;
-       end if;
-    end Finalize;
- 
-    ----------------
-    -- Initialize --
-    ----------------
- 
-    procedure Initialize (Process_Blocking_IO : Boolean := False) is
-       pragma Unreferenced (Process_Blocking_IO);
- 
-       Return_Value : Interfaces.C.int;
- 
-    begin
-       if not Initialized then
-          Return_Value := WSAStartup (WS_Version, WSAData_Dummy'Address);
-          pragma Assert (Interfaces.C."=" (Return_Value, 0));
-          Initialized := True;
-       end if;
-    end Initialize;
- 
-    -----------------
-    -- Set_Address --
-    -----------------
- 
-    procedure Set_Address
-      (Sin     : Sockaddr_In_Access;
-       Address : In_Addr)
-    is
-    begin
-       Sin.Sin_Addr := Address;
-    end Set_Address;
- 
-    ----------------
-    -- Set_Family --
-    ----------------
- 
-    procedure Set_Family
-      (Sin    : Sockaddr_In_Access;
-       Family : C.int)
-    is
-    begin
-       Sin.Sin_Family := C.unsigned_short (Family);
-    end Set_Family;
- 
-    ----------------
-    -- Set_Length --
-    ----------------
- 
-    procedure Set_Length
-      (Sin : Sockaddr_In_Access;
-       Len : C.int)
-    is
-       pragma Unreferenced (Sin);
-       pragma Unreferenced (Len);
- 
-    begin
-       null;
-    end Set_Length;
- 
-    --------------
-    -- Set_Port --
-    --------------
- 
-    procedure Set_Port
-      (Sin  : Sockaddr_In_Access;
-       Port : C.unsigned_short)
-    is
-    begin
-       Sin.Sin_Port := Port;
-    end Set_Port;
- 
-    --------------------------
-    -- Socket_Error_Message --
-    --------------------------
- 
-    function Socket_Error_Message
-      (Errno : Integer)
-      return  C.Strings.chars_ptr
-    is
-       use GNAT.Sockets.Constants;
- 
-    begin
-       case Errno is
-          when EINTR =>           return Error_Messages (N_EINTR);
-          when EBADF =>           return Error_Messages (N_EBADF);
-          when EACCES =>          return Error_Messages (N_EACCES);
-          when EFAULT =>          return Error_Messages (N_EFAULT);
-          when EINVAL =>          return Error_Messages (N_EINVAL);
-          when EMFILE =>          return Error_Messages (N_EMFILE);
-          when EWOULDBLOCK =>     return Error_Messages (N_EWOULDBLOCK);
-          when EINPROGRESS =>     return Error_Messages (N_EINPROGRESS);
-          when EALREADY =>        return Error_Messages (N_EALREADY);
-          when ENOTSOCK =>        return Error_Messages (N_ENOTSOCK);
-          when EDESTADDRREQ =>    return Error_Messages (N_EDESTADDRREQ);
-          when EMSGSIZE =>        return Error_Messages (N_EMSGSIZE);
-          when EPROTOTYPE =>      return Error_Messages (N_EPROTOTYPE);
-          when ENOPROTOOPT =>     return Error_Messages (N_ENOPROTOOPT);
-          when EPROTONOSUPPORT => return Error_Messages (N_EPROTONOSUPPORT);
-          when ESOCKTNOSUPPORT => return Error_Messages (N_ESOCKTNOSUPPORT);
-          when EOPNOTSUPP =>      return Error_Messages (N_EOPNOTSUPP);
-          when EPFNOSUPPORT =>    return Error_Messages (N_EPFNOSUPPORT);
-          when EAFNOSUPPORT =>    return Error_Messages (N_EAFNOSUPPORT);
-          when EADDRINUSE =>      return Error_Messages (N_EADDRINUSE);
-          when EADDRNOTAVAIL =>   return Error_Messages (N_EADDRNOTAVAIL);
-          when ENETDOWN =>        return Error_Messages (N_ENETDOWN);
-          when ENETUNREACH =>     return Error_Messages (N_ENETUNREACH);
-          when ENETRESET =>       return Error_Messages (N_ENETRESET);
-          when ECONNABORTED =>    return Error_Messages (N_ECONNABORTED);
-          when ECONNRESET =>      return Error_Messages (N_ECONNRESET);
-          when ENOBUFS =>         return Error_Messages (N_ENOBUFS);
-          when EISCONN =>         return Error_Messages (N_EISCONN);
-          when ENOTCONN =>        return Error_Messages (N_ENOTCONN);
-          when ESHUTDOWN =>       return Error_Messages (N_ESHUTDOWN);
-          when ETOOMANYREFS =>    return Error_Messages (N_ETOOMANYREFS);
-          when ETIMEDOUT =>       return Error_Messages (N_ETIMEDOUT);
-          when ECONNREFUSED =>    return Error_Messages (N_ECONNREFUSED);
-          when ELOOP =>           return Error_Messages (N_ELOOP);
-          when ENAMETOOLONG =>    return Error_Messages (N_ENAMETOOLONG);
-          when EHOSTDOWN =>       return Error_Messages (N_EHOSTDOWN);
-          when EHOSTUNREACH =>    return Error_Messages (N_EHOSTUNREACH);
-          when SYSNOTREADY =>     return Error_Messages (N_SYSNOTREADY);
-          when VERNOTSUPPORTED => return Error_Messages (N_VERNOTSUPPORTED);
-          when NOTINITIALISED =>  return Error_Messages (N_NOTINITIALISED);
-          when EDISCON =>         return Error_Messages (N_EDISCON);
-          when HOST_NOT_FOUND =>  return Error_Messages (N_HOST_NOT_FOUND);
-          when TRY_AGAIN =>       return Error_Messages (N_TRY_AGAIN);
-          when NO_RECOVERY =>     return Error_Messages (N_NO_RECOVERY);
-          when NO_DATA =>         return Error_Messages (N_NO_DATA);
-          when others =>          return Error_Messages (N_OTHERS);
-       end case;
-    end Socket_Error_Message;
- 
- end GNAT.Sockets.Thin;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/3wsocthi.ads gcc-4.0.0/gcc/ada/3wsocthi.ads
*** gcc-3.4.3/gcc/ada/3wsocthi.ads	Mon Jan 12 11:45:23 2004
--- gcc-4.0.0/gcc/ada/3wsocthi.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,433 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                    G N A T . S O C K E T S . T H I N                     --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --              Copyright (C) 2001-2004 Ada Core Technologies, Inc.         --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package provides a target dependent thin interface to the sockets
- --  layer for use by the GNAT.Sockets package (g-socket.ads). This package
- --  should not be directly with'ed by an applications program.
- 
- --  This version is for NT
- 
- with Interfaces.C.Pointers;
- with Interfaces.C.Strings;
- 
- with GNAT.Sockets.Constants;
- 
- with System;
- 
- package GNAT.Sockets.Thin is
- 
-    package C renames Interfaces.C;
- 
-    use type C.int;
-    --  So that we can declare the Failure constant below.
- 
-    Success : constant C.int :=  0;
-    Failure : constant C.int := -1;
- 
-    function Socket_Errno return Integer;
-    --  Returns last socket error number.
- 
-    procedure Set_Socket_Errno (Errno : Integer);
-    --  Set last socket error number.
- 
-    function Socket_Error_Message
-      (Errno : Integer)
-       return  C.Strings.chars_ptr;
-    --  Returns the error message string for the error number Errno. If
-    --  Errno is not known it returns "Unknown system error".
- 
-    subtype Fd_Set_Access is System.Address;
-    No_Fd_Set : constant Fd_Set_Access := System.Null_Address;
- 
-    type Timeval_Unit is new C.long;
-    pragma Convention (C, Timeval_Unit);
- 
-    type Timeval is record
-       Tv_Sec  : Timeval_Unit;
-       Tv_Usec : Timeval_Unit;
-    end record;
-    pragma Convention (C, Timeval);
- 
-    type Timeval_Access is access all Timeval;
-    pragma Convention (C, Timeval_Access);
- 
-    Immediat : constant Timeval := (0, 0);
- 
-    type Int_Access is access all C.int;
-    pragma Convention (C, Int_Access);
-    --  Access to C integers
- 
-    type Chars_Ptr_Array is array (C.size_t range <>) of
-      aliased C.Strings.chars_ptr;
- 
-    package Chars_Ptr_Pointers is
-       new C.Pointers (C.size_t, C.Strings.chars_ptr, Chars_Ptr_Array,
-                     C.Strings.Null_Ptr);
-    --  Arrays of C (char *)
- 
-    type In_Addr is record
-       S_B1, S_B2, S_B3, S_B4 : C.unsigned_char;
-    end record;
-    pragma Convention (C, In_Addr);
-    --  Internet address
- 
-    type In_Addr_Access is access all In_Addr;
-    pragma Convention (C, In_Addr_Access);
-    --  Access to internet address
- 
-    Inaddr_Any : aliased constant In_Addr := (others => 0);
-    --  Any internet address (all the interfaces)
- 
-    type In_Addr_Access_Array is array (C.size_t range <>)
-      of aliased In_Addr_Access;
-    pragma Convention (C, In_Addr_Access_Array);
-    package In_Addr_Access_Pointers is
-      new C.Pointers (C.size_t, In_Addr_Access, In_Addr_Access_Array, null);
-    --  Array of internet addresses
- 
-    type Sockaddr is record
-       Sa_Family : C.unsigned_short;
-       Sa_Data   : C.char_array (1 .. 14);
-    end record;
-    pragma Convention (C, Sockaddr);
-    --  Socket address
- 
-    type Sockaddr_Access is access all Sockaddr;
-    pragma Convention (C, Sockaddr_Access);
-    --  Access to socket address
- 
-    type Sockaddr_In is record
-       Sin_Family : C.unsigned_short      := Constants.AF_INET;
-       Sin_Port   : C.unsigned_short      := 0;
-       Sin_Addr   : In_Addr               := Inaddr_Any;
-       Sin_Zero   : C.char_array (1 .. 8) := (others => C.char'Val (0));
-    end record;
-    pragma Convention (C, Sockaddr_In);
-    --  Internet socket address
- 
-    type Sockaddr_In_Access is access all Sockaddr_In;
-    pragma Convention (C, Sockaddr_In_Access);
-    --  Access to internet socket address
- 
-    procedure Set_Length
-      (Sin : Sockaddr_In_Access;
-       Len : C.int);
-    pragma Inline (Set_Length);
-    --  Set Sin.Sin_Length to Len.
-    --  On this platform, nothing is done as there is no such field.
- 
-    procedure Set_Family
-      (Sin    : Sockaddr_In_Access;
-       Family : C.int);
-    pragma Inline (Set_Family);
-    --  Set Sin.Sin_Family to Family
- 
-    procedure Set_Port
-      (Sin  : Sockaddr_In_Access;
-       Port : C.unsigned_short);
-    pragma Inline (Set_Port);
-    --  Set Sin.Sin_Port to Port
- 
-    procedure Set_Address
-      (Sin     : Sockaddr_In_Access;
-       Address : In_Addr);
-    pragma Inline (Set_Address);
-    --  Set Sin.Sin_Addr to Address
- 
-    type Hostent is record
-       H_Name      : C.Strings.chars_ptr;
-       H_Aliases   : Chars_Ptr_Pointers.Pointer;
-       H_Addrtype  : C.short;
-       H_Length    : C.short;
-       H_Addr_List : In_Addr_Access_Pointers.Pointer;
-    end record;
-    pragma Convention (C, Hostent);
-    --  Host entry
- 
-    type Hostent_Access is access all Hostent;
-    pragma Convention (C, Hostent_Access);
-    --  Access to host entry
- 
-    type Servent is record
-       S_Name    : C.Strings.chars_ptr;
-       S_Aliases : Chars_Ptr_Pointers.Pointer;
-       S_Port    : C.int;
-       S_Proto   : C.Strings.chars_ptr;
-    end record;
-    pragma Convention (C, Servent);
-    --  Service entry
- 
-    type Servent_Access is access all Servent;
-    pragma Convention (C, Servent_Access);
-    --  Access to service entry
- 
-    type Two_Int is array (0 .. 1) of C.int;
-    pragma Convention (C, Two_Int);
-    --  Used with pipe()
- 
-    function C_Accept
-      (S       : C.int;
-       Addr    : System.Address;
-       Addrlen : access C.int) return C.int;
- 
-    function C_Bind
-      (S       : C.int;
-       Name    : System.Address;
-       Namelen : C.int) return C.int;
- 
-    function C_Close
-      (Fd : C.int) return C.int;
- 
-    function C_Connect
-      (S       : C.int;
-       Name    : System.Address;
-       Namelen : C.int) return C.int;
- 
-    function C_Gethostbyaddr
-      (Addr     : System.Address;
-       Length   : C.int;
-       Typ      : C.int) return Hostent_Access;
- 
-    function C_Gethostbyname
-      (Name : C.char_array) return Hostent_Access;
- 
-    function C_Gethostname
-      (Name    : System.Address;
-       Namelen : C.int) return C.int;
- 
-    function C_Getpeername
-      (S       : C.int;
-       Name    : System.Address;
-       Namelen : access C.int) return C.int;
- 
-    function C_Getservbyname
-      (Name  : C.char_array;
-       Proto : C.char_array) return Servent_Access;
- 
-    function C_Getservbyport
-      (Port  : C.int;
-       Proto : C.char_array) return Servent_Access;
- 
-    function C_Getsockname
-      (S       : C.int;
-       Name    : System.Address;
-       Namelen : access C.int) return C.int;
- 
-    function C_Getsockopt
-      (S       : C.int;
-       Level   : C.int;
-       Optname : C.int;
-       Optval  : System.Address;
-       Optlen  : access C.int) return C.int;
- 
-    function C_Inet_Addr
-      (Cp : C.Strings.chars_ptr) return C.int;
- 
-    function C_Ioctl
-      (S    : C.int;
-       Req  : C.int;
-       Arg  : Int_Access) return C.int;
- 
-    function C_Listen
-      (S       : C.int;
-       Backlog : C.int) return C.int;
- 
-    function C_Read
-      (Fildes : C.int;
-       Buf    : System.Address;
-       Nbyte  : C.int) return C.int;
- 
-    function C_Readv
-      (Socket : C.int;
-       Iov    : System.Address;
-       Iovcnt : C.int) return C.int;
- 
-    function C_Recv
-      (S     : C.int;
-       Buf   : System.Address;
-       Len   : C.int;
-       Flags : C.int) return C.int;
- 
-    function C_Recvfrom
-      (S       : C.int;
-       Buf     : System.Address;
-       Len     : C.int;
-       Flags   : C.int;
-       From    : Sockaddr_In_Access;
-       Fromlen : access C.int) return C.int;
- 
-    function C_Select
-      (Nfds      : C.int;
-       Readfds   : Fd_Set_Access;
-       Writefds  : Fd_Set_Access;
-       Exceptfds : Fd_Set_Access;
-       Timeout   : Timeval_Access) return C.int;
- 
-    function C_Send
-      (S     : C.int;
-       Buf   : System.Address;
-       Len   : C.int;
-       Flags : C.int) return C.int;
- 
-    function C_Sendto
-      (S     : C.int;
-       Msg   : System.Address;
-       Len   : C.int;
-       Flags : C.int;
-       To    : Sockaddr_In_Access;
-       Tolen : C.int) return C.int;
- 
-    function C_Setsockopt
-      (S       : C.int;
-       Level   : C.int;
-       Optname : C.int;
-       Optval  : System.Address;
-       Optlen  : C.int) return C.int;
- 
-    function C_Shutdown
-      (S    : C.int;
-       How  : C.int) return C.int;
- 
-    function C_Socket
-      (Domain   : C.int;
-       Typ      : C.int;
-       Protocol : C.int) return C.int;
- 
-    function C_Strerror
-      (Errnum : C.int) return C.Strings.chars_ptr;
- 
-    function C_System
-      (Command : System.Address) return C.int;
- 
-    function C_Write
-      (Fildes : C.int;
-       Buf    : System.Address;
-       Nbyte  : C.int) return C.int;
- 
-    function C_Writev
-      (Socket : C.int;
-       Iov    : System.Address;
-       Iovcnt : C.int) return C.int;
- 
-    function WSAStartup
-      (WS_Version     : Interfaces.C.int;
-       WSADataAddress : System.Address) return Interfaces.C.int;
- 
-    procedure Free_Socket_Set
-      (Set : Fd_Set_Access);
-    --  Free system-dependent socket set.
- 
-    procedure Get_Socket_From_Set
-      (Set    : Fd_Set_Access;
-       Socket : Int_Access;
-       Last   : Int_Access);
-    --  Get last socket in Socket and remove it from the socket
-    --  set. The parameter Last is a maximum value of the largest
-    --  socket. This hint is used to avoid scanning very large socket
-    --  sets. After a call to Get_Socket_From_Set, Last is set back to
-    --  the real largest socket in the socket set.
- 
-    procedure Insert_Socket_In_Set
-      (Set    : Fd_Set_Access;
-       Socket : C.int);
-    --  Insert socket in the socket set
- 
-    function  Is_Socket_In_Set
-      (Set    : Fd_Set_Access;
-       Socket : C.int) return Boolean;
-    --  Check whether Socket is in the socket set
- 
-    procedure Last_Socket_In_Set
-      (Set  : Fd_Set_Access;
-       Last : Int_Access);
-    --  Find the largest socket in the socket set. This is needed for
-    --  select(). When Last_Socket_In_Set is called, parameter Last is
-    --  a maximum value of the largest socket. This hint is used to
-    --  avoid scanning very large socket sets. After the call, Last is
-    --  set back to the real largest socket in the socket set.
- 
-    function  New_Socket_Set
-      (Set : Fd_Set_Access) return Fd_Set_Access;
-    --  Allocate a new socket set which is a system-dependent structure
-    --  and initialize by copying Set if it is non-null, by making it
-    --  empty otherwise.
- 
-    procedure Remove_Socket_From_Set
-      (Set    : Fd_Set_Access;
-       Socket : C.int);
-    --  Remove socket from the socket set
- 
-    procedure WSACleanup;
- 
-    procedure Finalize;
-    procedure Initialize (Process_Blocking_IO : Boolean := False);
- 
- private
-    pragma Import (Stdcall, C_Accept, "accept");
-    pragma Import (Stdcall, C_Bind, "bind");
-    pragma Import (Stdcall, C_Close, "closesocket");
-    pragma Import (Stdcall, C_Gethostbyaddr, "gethostbyaddr");
-    pragma Import (Stdcall, C_Gethostbyname, "gethostbyname");
-    pragma Import (Stdcall, C_Gethostname, "gethostname");
-    pragma Import (Stdcall, C_Getpeername, "getpeername");
-    pragma Import (Stdcall, C_Getservbyname, "getservbyname");
-    pragma Import (Stdcall, C_Getservbyport, "getservbyport");
-    pragma Import (Stdcall, C_Getsockname, "getsockname");
-    pragma Import (Stdcall, C_Getsockopt, "getsockopt");
-    pragma Import (Stdcall, C_Inet_Addr, "inet_addr");
-    pragma Import (Stdcall, C_Ioctl, "ioctlsocket");
-    pragma Import (Stdcall, C_Listen, "listen");
-    pragma Import (C, C_Read, "_read");
-    pragma Import (Stdcall, C_Recv, "recv");
-    pragma Import (Stdcall, C_Recvfrom, "recvfrom");
-    pragma Import (Stdcall, C_Send, "send");
-    pragma Import (Stdcall, C_Sendto, "sendto");
-    pragma Import (Stdcall, C_Setsockopt, "setsockopt");
-    pragma Import (Stdcall, C_Shutdown, "shutdown");
-    pragma Import (Stdcall, C_Socket, "socket");
-    pragma Import (C, C_Strerror, "strerror");
-    pragma Import (C, C_System, "_system");
-    pragma Import (C, C_Write, "_write");
-    pragma Import (Stdcall, Socket_Errno, "WSAGetLastError");
-    pragma Import (Stdcall, Set_Socket_Errno, "WSASetLastError");
-    pragma Import (Stdcall, WSAStartup, "WSAStartup");
-    pragma Import (Stdcall, WSACleanup, "WSACleanup");
- 
-    pragma Import (C, Free_Socket_Set, "__gnat_free_socket_set");
-    pragma Import (C, Get_Socket_From_Set, "__gnat_get_socket_from_set");
-    pragma Import (C, Is_Socket_In_Set, "__gnat_is_socket_in_set");
-    pragma Import (C, Last_Socket_In_Set, "__gnat_last_socket_in_set");
-    pragma Import (C, New_Socket_Set, "__gnat_new_socket_set");
-    pragma Import (C, Insert_Socket_In_Set, "__gnat_insert_socket_in_set");
-    pragma Import (C, Remove_Socket_From_Set, "__gnat_remove_socket_from_set");
- end GNAT.Sockets.Thin;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/3wsoliop.ads gcc-4.0.0/gcc/ada/3wsoliop.ads
*** gcc-3.4.3/gcc/ada/3wsoliop.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/3wsoliop.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,43 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --          G N A T . S O C K E T S . L I N K E R _ O P T I O N S           --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --            Copyright (C) 2001-2003 Ada Core Technologies, Inc.           --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package is used to provide target specific linker_options for the
- --  support of scokets as required by the package GNAT.Sockets.
- 
- --  This is the Windows/NT version of this package
- 
- 
- package GNAT.Sockets.Linker_Options is
- private
-    pragma Linker_Options ("-lwsock32");
- end GNAT.Sockets.Linker_Options;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/3zsoccon.ads gcc-4.0.0/gcc/ada/3zsoccon.ads
*** gcc-3.4.3/gcc/ada/3zsoccon.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/3zsoccon.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,158 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --               G N A T . S O C K E T S . C O N S T A N T S                --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --          Copyright (C) 2000-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package provides target dependent definitions of constant for use
- --  by the GNAT.Sockets package (g-socket.ads). This package should not be
- --  directly with'ed by an applications program.
- 
- --  This is the version for VxWorks
- 
- package GNAT.Sockets.Constants is
- 
-    --------------
-    -- Families --
-    --------------
- 
-    AF_INET            : constant :=            2; --  IPv4 address family
-    AF_INET6           : constant :=           -1; --  IPv6 address family
- 
-    -----------
-    -- Modes --
-    -----------
- 
-    SOCK_STREAM        : constant :=            1; --  Stream socket
-    SOCK_DGRAM         : constant :=            2; --  Datagram socket
- 
-    -------------------
-    -- Socket errors --
-    -------------------
- 
-    EACCES             : constant :=           13; --  Permission denied
-    EADDRINUSE         : constant :=           48; --  Address already in use
-    EADDRNOTAVAIL      : constant :=           49; --  Cannot assign address
-    EAFNOSUPPORT       : constant :=           47; --  Addr family not supported
-    EALREADY           : constant :=           69; --  Operation in progress
-    EBADF              : constant :=            9; --  Bad file descriptor
-    ECONNABORTED       : constant :=           53; --  Connection aborted
-    ECONNREFUSED       : constant :=           61; --  Connection refused
-    ECONNRESET         : constant :=           54; --  Connection reset by peer
-    EDESTADDRREQ       : constant :=           40; --  Destination addr required
-    EFAULT             : constant :=           14; --  Bad address
-    EHOSTDOWN          : constant :=           67; --  Host is down
-    EHOSTUNREACH       : constant :=           65; --  No route to host
-    EINPROGRESS        : constant :=           68; --  Operation now in progress
-    EINTR              : constant :=            4; --  Interrupted system call
-    EINVAL             : constant :=           22; --  Invalid argument
-    EIO                : constant :=            5; --  Input output error
-    EISCONN            : constant :=           56; --  Socket already connected
-    ELOOP              : constant :=           64; --  Too many symbolic lynks
-    EMFILE             : constant :=           24; --  Too many open files
-    EMSGSIZE           : constant :=           36; --  Message too long
-    ENAMETOOLONG       : constant :=           26; --  Name too long
-    ENETDOWN           : constant :=           62; --  Network is down
-    ENETRESET          : constant :=           52; --  Disconn. on network reset
-    ENETUNREACH        : constant :=           51; --  Network is unreachable
-    ENOBUFS            : constant :=           55; --  No buffer space available
-    ENOPROTOOPT        : constant :=           42; --  Protocol not available
-    ENOTCONN           : constant :=           57; --  Socket not connected
-    ENOTSOCK           : constant :=           50; --  Operation on non socket
-    EOPNOTSUPP         : constant :=           45; --  Operation not supported
-    EPFNOSUPPORT       : constant :=           46; --  Unknown protocol family
-    EPROTONOSUPPORT    : constant :=           43; --  Unknown protocol
-    EPROTOTYPE         : constant :=           41; --  Unknown protocol type
-    ESHUTDOWN          : constant :=           58; --  Cannot send once shutdown
-    ESOCKTNOSUPPORT    : constant :=           44; --  Socket type not supported
-    ETIMEDOUT          : constant :=           60; --  Connection timed out
-    ETOOMANYREFS       : constant :=           59; --  Too many references
-    EWOULDBLOCK        : constant :=           70; --  Operation would block
- 
-    -----------------
-    -- Host errors --
-    -----------------
- 
-    HOST_NOT_FOUND     : constant :=            1; --  Unknown host
-    TRY_AGAIN          : constant :=            2; --  Host name lookup failure
-    NO_DATA            : constant :=            4; --  No data record for name
-    NO_RECOVERY        : constant :=            3; --  Non recoverable errors
- 
-    -------------------
-    -- Control flags --
-    -------------------
- 
-    FIONBIO            : constant :=           16; --  Set/clear non-blocking io
-    FIONREAD           : constant :=            1; --  How many bytes to read
- 
-    --------------------
-    -- Shutdown modes --
-    --------------------
- 
-    SHUT_RD            : constant :=            0; --  No more recv
-    SHUT_WR            : constant :=            1; --  No more send
-    SHUT_RDWR          : constant :=            2; --  No more recv/send
- 
-    ---------------------
-    -- Protocol levels --
-    ---------------------
- 
-    SOL_SOCKET         : constant :=        65535; --  Options for socket level
-    IPPROTO_IP         : constant :=            0; --  Dummy protocol for IP
-    IPPROTO_UDP        : constant :=           17; --  UDP
-    IPPROTO_TCP        : constant :=            6; --  TCP
- 
-    -------------------
-    -- Request flags --
-    -------------------
- 
-    MSG_OOB            : constant :=            1; --  Process out-of-band data
-    MSG_PEEK           : constant :=            2; --  Peek at incoming data
-    MSG_EOR            : constant :=            8; --  Send end of record
-    MSG_WAITALL        : constant :=           64; --  Wait for full reception
- 
-    --------------------
-    -- Socket options --
-    --------------------
- 
-    TCP_NODELAY        : constant :=            1; --  Do not coalesce packets
-    SO_SNDBUF          : constant :=         4097; --  Set/get send buffer size
-    SO_RCVBUF          : constant :=         4098; --  Set/get recv buffer size
-    SO_REUSEADDR       : constant :=            4; --  Bind reuse local address
-    SO_KEEPALIVE       : constant :=            8; --  Enable keep-alive msgs
-    SO_LINGER          : constant :=          128; --  Defer close to flush data
-    SO_ERROR           : constant :=         4103; --  Get/clear error status
-    SO_BROADCAST       : constant :=           32; --  Can send broadcast msgs
-    IP_ADD_MEMBERSHIP  : constant :=           35; --  Join a multicast group
-    IP_DROP_MEMBERSHIP : constant :=           36; --  Leave a multicast group
-    IP_MULTICAST_TTL   : constant :=           33; --  Set/get multicast TTL
-    IP_MULTICAST_LOOP  : constant :=           34; --  Set/get mcast loopback
- 
- end GNAT.Sockets.Constants;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/3zsocthi.adb gcc-4.0.0/gcc/ada/3zsocthi.adb
*** gcc-3.4.3/gcc/ada/3zsocthi.adb	Tue Jan 13 11:51:31 2004
--- gcc-4.0.0/gcc/ada/3zsocthi.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,624 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                    G N A T . S O C K E T S . T H I N                     --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --            Copyright (C) 2002-2004 Ada Core Technologies, Inc.           --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package provides a target dependent thin interface to the sockets
- --  layer for use by the GNAT.Sockets package (g-socket.ads). This package
- --  should not be directly with'ed by an applications program.
- 
- --  This version is for VxWorks
- 
- with GNAT.OS_Lib;  use GNAT.OS_Lib;
- with GNAT.Task_Lock;
- 
- with Interfaces.C; use Interfaces.C;
- with Unchecked_Conversion;
- 
- package body GNAT.Sockets.Thin is
- 
-    Non_Blocking_Sockets : constant Fd_Set_Access :=
-                             New_Socket_Set (No_Socket_Set);
-    --  When this package is initialized with Process_Blocking_IO set
-    --  to True, sockets are set in non-blocking mode to avoid blocking
-    --  the whole process when a thread wants to perform a blocking IO
-    --  operation. But the user can also set a socket in non-blocking
-    --  mode by purpose. In order to make a difference between these
-    --  two situations, we track the origin of non-blocking mode in
-    --  Non_Blocking_Sockets. If S is in Non_Blocking_Sockets, it has
-    --  been set in non-blocking mode by the user.
- 
-    Quantum : constant Duration := 0.2;
-    --  When Thread_Blocking_IO is False, we set sockets in
-    --  non-blocking mode and we spend a period of time Quantum between
-    --  two attempts on a blocking operation.
- 
-    Thread_Blocking_IO : Boolean := True;
- 
-    Unknown_System_Error : constant C.Strings.chars_ptr :=
-                             C.Strings.New_String ("Unknown system error");
- 
-    --  The following types and variables are required to create a Hostent
-    --  record "by hand".
- 
-    type In_Addr_Access_Array_Access is access In_Addr_Access_Array;
- 
-    Alias_Access : constant Chars_Ptr_Pointers.Pointer :=
-                     new C.Strings.chars_ptr'(C.Strings.Null_Ptr);
- 
-    In_Addr_Access_Array_A : constant In_Addr_Access_Array_Access :=
-                               new In_Addr_Access_Array'(new In_Addr, null);
- 
-    In_Addr_Access_Ptr : constant In_Addr_Access_Pointers.Pointer :=
-                           In_Addr_Access_Array_A
-                             (In_Addr_Access_Array_A'First)'Access;
- 
-    Local_Hostent : constant Hostent_Access := new Hostent;
- 
-    -----------------------
-    -- Local Subprograms --
-    -----------------------
- 
-    --  All these require comments ???
- 
-    function Syscall_Accept
-      (S       : C.int;
-       Addr    : System.Address;
-       Addrlen : access C.int) return C.int;
-    pragma Import (C, Syscall_Accept, "accept");
- 
-    function Syscall_Connect
-      (S       : C.int;
-       Name    : System.Address;
-       Namelen : C.int) return C.int;
-    pragma Import (C, Syscall_Connect, "connect");
- 
-    function Syscall_Ioctl
-      (S    : C.int;
-       Req  : C.int;
-       Arg  : Int_Access) return C.int;
-    pragma Import (C, Syscall_Ioctl, "ioctl");
- 
-    function Syscall_Recv
-      (S     : C.int;
-       Msg   : System.Address;
-       Len   : C.int;
-       Flags : C.int) return C.int;
-    pragma Import (C, Syscall_Recv, "recv");
- 
-    function Syscall_Recvfrom
-      (S       : C.int;
-       Msg     : System.Address;
-       Len     : C.int;
-       Flags   : C.int;
-       From    : Sockaddr_In_Access;
-       Fromlen : access C.int) return C.int;
-    pragma Import (C, Syscall_Recvfrom, "recvfrom");
- 
-    function Syscall_Send
-      (S     : C.int;
-       Msg   : System.Address;
-       Len   : C.int;
-       Flags : C.int) return C.int;
-    pragma Import (C, Syscall_Send, "send");
- 
-    function Syscall_Sendto
-      (S     : C.int;
-       Msg   : System.Address;
-       Len   : C.int;
-       Flags : C.int;
-       To    : Sockaddr_In_Access;
-       Tolen : C.int) return C.int;
-    pragma Import (C, Syscall_Sendto, "sendto");
- 
-    function Syscall_Socket
-      (Domain   : C.int;
-       Typ      : C.int;
-       Protocol : C.int) return C.int;
-    pragma Import (C, Syscall_Socket, "socket");
- 
-    function  Non_Blocking_Socket (S : C.int) return Boolean;
-    procedure Set_Non_Blocking_Socket (S : C.int; V : Boolean);
- 
-    --------------
-    -- C_Accept --
-    --------------
- 
-    function C_Accept
-      (S       : C.int;
-       Addr    : System.Address;
-       Addrlen : access C.int) return C.int
-    is
-       R   : C.int;
-       Val : aliased C.int := 1;
- 
-       Res : C.int;
-       pragma Unreferenced (Res);
- 
-    begin
-       loop
-          R := Syscall_Accept (S, Addr, Addrlen);
-          exit when Thread_Blocking_IO
-            or else R /= Failure
-            or else Non_Blocking_Socket (S)
-            or else Errno /= Constants.EWOULDBLOCK;
-          delay Quantum;
-       end loop;
- 
-       if not Thread_Blocking_IO
-         and then R /= Failure
-       then
-          --  A socket inherits the properties ot its server especially
-          --  the FIONBIO flag. Do not use C_Ioctl as this subprogram
-          --  tracks sockets set in non-blocking mode by user.
- 
-          Set_Non_Blocking_Socket (R, Non_Blocking_Socket (S));
-          Res := Syscall_Ioctl (R, Constants.FIONBIO, Val'Unchecked_Access);
-          --  Is it OK to ignore result ???
-       end if;
- 
-       return R;
-    end C_Accept;
- 
-    ---------------
-    -- C_Connect --
-    ---------------
- 
-    function C_Connect
-      (S       : C.int;
-       Name    : System.Address;
-       Namelen : C.int) return C.int
-    is
-       Res : C.int;
- 
-    begin
-       Res := Syscall_Connect (S, Name, Namelen);
- 
-       if Thread_Blocking_IO
-         or else Res /= Failure
-         or else Non_Blocking_Socket (S)
-         or else Errno /= Constants.EINPROGRESS
-       then
-          return Res;
-       end if;
- 
-       declare
-          WSet : Fd_Set_Access;
-          Now  : aliased Timeval;
- 
-       begin
-          WSet := New_Socket_Set (No_Socket_Set);
- 
-          loop
-             Insert_Socket_In_Set (WSet, S);
-             Now := Immediat;
-             Res := C_Select
-               (S + 1,
-                No_Fd_Set,
-                WSet,
-                No_Fd_Set,
-                Now'Unchecked_Access);
- 
-             exit when Res > 0;
- 
-             if Res = Failure then
-                Free_Socket_Set (WSet);
-                return Res;
-             end if;
- 
-             delay Quantum;
-          end loop;
- 
-          Free_Socket_Set (WSet);
-       end;
- 
-       Res := Syscall_Connect (S, Name, Namelen);
- 
-       if Res = Failure
-         and then Errno = Constants.EISCONN
-       then
-          return Thin.Success;
-       else
-          return Res;
-       end if;
-    end C_Connect;
- 
-    ---------------------
-    -- C_Gethostbyaddr --
-    ---------------------
- 
-    function C_Gethostbyaddr
-      (Addr : System.Address;
-       Len  : C.int;
-       Typ  : C.int) return Hostent_Access
-    is
-       pragma Warnings (Off, Len);
-       pragma Warnings (Off, Typ);
- 
-       type int_Access is access int;
-       function To_Pointer is
-         new Unchecked_Conversion (System.Address, int_Access);
- 
-       procedure VxWorks_Gethostbyaddr
-         (Addr : C.int; Buf : out C.char_array);
-       pragma Import (C, VxWorks_Gethostbyaddr, "hostGetByAddr");
- 
-       Host_Name : C.char_array (1 .. Max_Name_Length);
- 
-    begin
-       VxWorks_Gethostbyaddr (To_Pointer (Addr).all, Host_Name);
- 
-       In_Addr_Access_Ptr.all.all := To_In_Addr (To_Pointer (Addr).all);
-       Local_Hostent.all.H_Name := C.Strings.New_Char_Array (Host_Name);
- 
-       return Local_Hostent;
-    end C_Gethostbyaddr;
- 
-    ---------------------
-    -- C_Gethostbyname --
-    ---------------------
- 
-    function C_Gethostbyname
-      (Name : C.char_array) return Hostent_Access
-    is
-       function VxWorks_Gethostbyname
-         (Name : C.char_array) return C.int;
-       pragma Import (C, VxWorks_Gethostbyname, "hostGetByName");
- 
-       Addr : C.int;
- 
-    begin
-       Addr := VxWorks_Gethostbyname (Name);
- 
-       In_Addr_Access_Ptr.all.all := To_In_Addr (Addr);
-       Local_Hostent.all.H_Name := C.Strings.New_Char_Array (To_C (Host_Name));
- 
-       return Local_Hostent;
-    end C_Gethostbyname;
- 
-    ---------------------
-    -- C_Getservbyname --
-    ---------------------
- 
-    function C_Getservbyname
-      (Name  : C.char_array;
-       Proto : C.char_array) return Servent_Access
-    is
-       pragma Warnings (Off, Name);
-       pragma Warnings (Off, Proto);
- 
-    begin
-       return null;
-    end C_Getservbyname;
- 
-    ---------------------
-    -- C_Getservbyport --
-    ---------------------
- 
-    function C_Getservbyport
-      (Port  : C.int;
-       Proto : C.char_array) return Servent_Access
-    is
-       pragma Warnings (Off, Port);
-       pragma Warnings (Off, Proto);
- 
-    begin
-       return null;
-    end C_Getservbyport;
- 
-    -------------
-    -- C_Ioctl --
-    -------------
- 
-    function C_Ioctl
-      (S    : C.int;
-       Req  : C.int;
-       Arg  : Int_Access) return C.int
-    is
-    begin
-       if not Thread_Blocking_IO
-         and then Req = Constants.FIONBIO
-       then
-          if Arg.all /= 0 then
-             Set_Non_Blocking_Socket (S, True);
-          end if;
-       end if;
- 
-       return Syscall_Ioctl (S, Req, Arg);
-    end C_Ioctl;
- 
-    ------------
-    -- C_Recv --
-    ------------
- 
-    function C_Recv
-      (S     : C.int;
-       Msg   : System.Address;
-       Len   : C.int;
-       Flags : C.int) return C.int
-    is
-       Res : C.int;
- 
-    begin
-       loop
-          Res := Syscall_Recv (S, Msg, Len, Flags);
-          exit when Thread_Blocking_IO
-            or else Res /= Failure
-            or else Non_Blocking_Socket (S)
-            or else Errno /= Constants.EWOULDBLOCK;
-          delay Quantum;
-       end loop;
- 
-       return Res;
-    end C_Recv;
- 
-    ----------------
-    -- C_Recvfrom --
-    ----------------
- 
-    function C_Recvfrom
-      (S       : C.int;
-       Msg     : System.Address;
-       Len     : C.int;
-       Flags   : C.int;
-       From    : Sockaddr_In_Access;
-       Fromlen : access C.int) return C.int
-    is
-       Res : C.int;
- 
-    begin
-       loop
-          Res := Syscall_Recvfrom (S, Msg, Len, Flags, From, Fromlen);
-          exit when Thread_Blocking_IO
-            or else Res /= Failure
-            or else Non_Blocking_Socket (S)
-            or else Errno /= Constants.EWOULDBLOCK;
-          delay Quantum;
-       end loop;
- 
-       return Res;
-    end C_Recvfrom;
- 
-    ------------
-    -- C_Send --
-    ------------
- 
-    function C_Send
-      (S     : C.int;
-       Msg   : System.Address;
-       Len   : C.int;
-       Flags : C.int) return C.int
-    is
-       Res : C.int;
- 
-    begin
-       loop
-          Res := Syscall_Send (S, Msg, Len, Flags);
-          exit when Thread_Blocking_IO
-            or else Res /= Failure
-            or else Non_Blocking_Socket (S)
-            or else Errno /= Constants.EWOULDBLOCK;
-          delay Quantum;
-       end loop;
- 
-       return Res;
-    end C_Send;
- 
-    --------------
-    -- C_Sendto --
-    --------------
- 
-    function C_Sendto
-      (S     : C.int;
-       Msg   : System.Address;
-       Len   : C.int;
-       Flags : C.int;
-       To    : Sockaddr_In_Access;
-       Tolen : C.int) return C.int
-    is
-       Res : C.int;
- 
-    begin
-       loop
-          Res := Syscall_Sendto (S, Msg, Len, Flags, To, Tolen);
-          exit when Thread_Blocking_IO
-            or else Res /= Failure
-            or else Non_Blocking_Socket (S)
-            or else Errno /= Constants.EWOULDBLOCK;
-          delay Quantum;
-       end loop;
- 
-       return Res;
-    end C_Sendto;
- 
-    --------------
-    -- C_Socket --
-    --------------
- 
-    function C_Socket
-      (Domain   : C.int;
-       Typ      : C.int;
-       Protocol : C.int) return C.int
-    is
-       R   : C.int;
-       Val : aliased C.int := 1;
- 
-       Res : C.int;
-       pragma Unreferenced (Res);
- 
-    begin
-       R := Syscall_Socket (Domain, Typ, Protocol);
- 
-       if not Thread_Blocking_IO
-         and then R /= Failure
-       then
-          --  Do not use C_Ioctl as this subprogram tracks sockets set
-          --  in non-blocking mode by user.
- 
-          Res := Syscall_Ioctl (R, Constants.FIONBIO, Val'Unchecked_Access);
-          --  Is it OK to ignore result ???
-          Set_Non_Blocking_Socket (R, False);
-       end if;
- 
-       return R;
-    end C_Socket;
- 
-    --------------
-    -- Finalize --
-    --------------
- 
-    procedure Finalize is
-    begin
-       null;
-    end Finalize;
- 
-    ----------------
-    -- Initialize --
-    ----------------
- 
-    procedure Initialize (Process_Blocking_IO : Boolean) is
-    begin
-       Thread_Blocking_IO := not Process_Blocking_IO;
-    end Initialize;
- 
-    -------------------------
-    -- Non_Blocking_Socket --
-    -------------------------
- 
-    function Non_Blocking_Socket (S : C.int) return Boolean is
-       R : Boolean;
- 
-    begin
-       Task_Lock.Lock;
-       R := Is_Socket_In_Set (Non_Blocking_Sockets, S);
-       Task_Lock.Unlock;
-       return R;
-    end Non_Blocking_Socket;
- 
-    -----------------
-    -- Set_Address --
-    -----------------
- 
-    procedure Set_Address
-      (Sin     : Sockaddr_In_Access;
-       Address : In_Addr)
-    is
-    begin
-       Sin.Sin_Addr   := Address;
-    end Set_Address;
- 
-    ----------------
-    -- Set_Family --
-    ----------------
- 
-    procedure Set_Family
-      (Sin    : Sockaddr_In_Access;
-       Family : C.int)
-    is
-    begin
-       Sin.Sin_Family := C.unsigned_char (Family);
-    end Set_Family;
- 
-    ----------------
-    -- Set_Length --
-    ----------------
- 
-    procedure Set_Length
-      (Sin : Sockaddr_In_Access;
-       Len : C.int)
-    is
-    begin
-       Sin.Sin_Length := C.unsigned_char (Len);
-    end Set_Length;
- 
-    -----------------------------
-    -- Set_Non_Blocking_Socket --
-    -----------------------------
- 
-    procedure Set_Non_Blocking_Socket (S : C.int; V : Boolean) is
-    begin
-       Task_Lock.Lock;
-       if V then
-          Insert_Socket_In_Set (Non_Blocking_Sockets, S);
-       else
-          Remove_Socket_From_Set (Non_Blocking_Sockets, S);
-       end if;
- 
-       Task_Lock.Unlock;
-    end Set_Non_Blocking_Socket;
- 
-    --------------
-    -- Set_Port --
-    --------------
- 
-    procedure Set_Port
-      (Sin  : Sockaddr_In_Access;
-       Port : C.unsigned_short)
-    is
-    begin
-       Sin.Sin_Port   := Port;
-    end Set_Port;
- 
-    --------------------------
-    -- Socket_Error_Message --
-    --------------------------
- 
-    function Socket_Error_Message
-      (Errno : Integer) return C.Strings.chars_ptr
-    is
-       use type Interfaces.C.Strings.chars_ptr;
- 
-       C_Msg : C.Strings.chars_ptr;
- 
-    begin
-       C_Msg := C_Strerror (C.int (Errno));
- 
-       if C_Msg = C.Strings.Null_Ptr then
-          return Unknown_System_Error;
- 
-       else
-          return C_Msg;
-       end if;
-    end Socket_Error_Message;
- 
- --  Package elaboration
- 
- begin
-    Local_Hostent.all.H_Aliases   := Alias_Access;
- 
-    --  VxWorks currently only supports AF_INET
- 
-    Local_Hostent.all.H_Addrtype  := Constants.AF_INET;
- 
-    Local_Hostent.all.H_Length    := 1;
-    Local_Hostent.all.H_Addr_List := In_Addr_Access_Ptr;
- 
- end GNAT.Sockets.Thin;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/3zsocthi.ads gcc-4.0.0/gcc/ada/3zsocthi.ads
*** gcc-3.4.3/gcc/ada/3zsocthi.ads	Mon Jan 12 11:45:23 2004
--- gcc-4.0.0/gcc/ada/3zsocthi.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,446 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                    G N A T . S O C K E T S . T H I N                     --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --            Copyright (C) 2002-2004 Ada Core Technologies, Inc.           --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package provides a target dependent thin interface to the sockets
- --  layer for use by the GNAT.Sockets package (g-socket.ads). This package
- --  should not be directly with'ed by an applications program.
- 
- --  This is the version for VxWorks
- 
- with Interfaces.C.Pointers;
- 
- with Ada.Unchecked_Conversion;
- with Interfaces.C.Strings;
- with GNAT.Sockets.Constants;
- with GNAT.OS_Lib;
- 
- with System;
- 
- package GNAT.Sockets.Thin is
- 
-    package C renames Interfaces.C;
- 
-    use type C.int;
-    --  This is so we can declare the Failure constant below
- 
-    Success : constant C.int :=  0;
-    Failure : constant C.int := -1;
- 
-    function Socket_Errno return Integer renames GNAT.OS_Lib.Errno;
-    --  Returns last socket error number.
- 
-    function Socket_Error_Message (Errno : Integer) return C.Strings.chars_ptr;
-    --  Returns the error message string for the error number Errno. If
-    --  Errno is not known it returns "Unknown system error".
- 
-    subtype Fd_Set_Access is System.Address;
-    No_Fd_Set : constant Fd_Set_Access := System.Null_Address;
- 
-    type Timeval_Unit is new C.int;
-    pragma Convention (C, Timeval_Unit);
- 
-    type Timeval is record
-       Tv_Sec  : Timeval_Unit;
-       Tv_Usec : Timeval_Unit;
-    end record;
-    pragma Convention (C, Timeval);
- 
-    type Timeval_Access is access all Timeval;
-    pragma Convention (C, Timeval_Access);
- 
-    Immediat : constant Timeval := (0, 0);
- 
-    type Int_Access is access all C.int;
-    pragma Convention (C, Int_Access);
-    --  Access to C integers
- 
-    type Chars_Ptr_Array is array (C.size_t range <>) of
-      aliased C.Strings.chars_ptr;
- 
-    package Chars_Ptr_Pointers is
-       new C.Pointers (C.size_t, C.Strings.chars_ptr, Chars_Ptr_Array,
-                       C.Strings.Null_Ptr);
-    --  Arrays of C (char *)
- 
-    type In_Addr is record
-       S_B1, S_B2, S_B3, S_B4 : C.unsigned_char;
-    end record;
-    pragma Convention (C, In_Addr);
-    --  Internet address
- 
-    function To_In_Addr is new Ada.Unchecked_Conversion (C.int, In_Addr);
- 
-    type In_Addr_Access is access all In_Addr;
-    pragma Convention (C, In_Addr_Access);
-    --  Access to internet address
- 
-    Inaddr_Any : aliased constant In_Addr := (others => 0);
-    --  Any internet address (all the interfaces)
- 
-    type In_Addr_Access_Array is array (C.size_t range <>)
-      of aliased In_Addr_Access;
-    pragma Convention (C, In_Addr_Access_Array);
- 
-    package In_Addr_Access_Pointers is
-      new C.Pointers (C.size_t, In_Addr_Access, In_Addr_Access_Array, null);
-    --  Array of internet addresses
- 
-    type Sockaddr is record
-       Sa_Length : C.unsigned_char;
-       Sa_Family : C.unsigned_char;
-       Sa_Data   : C.char_array (1 .. 14);
-    end record;
-    pragma Convention (C, Sockaddr);
-    --  Socket address
- 
-    type Sockaddr_Access is access all Sockaddr;
-    pragma Convention (C, Sockaddr_Access);
-    --  Access to socket address
- 
-    type Sockaddr_In is record
-       Sin_Length : C.unsigned_char       := 0;
-       Sin_Family : C.unsigned_char       := Constants.AF_INET;
-       Sin_Port   : C.unsigned_short      := 0;
-       Sin_Addr   : In_Addr               := Inaddr_Any;
-       Sin_Zero   : C.char_array (1 .. 8) := (others => C.char'Val (0));
-    end record;
-    pragma Convention (C, Sockaddr_In);
-    --  Internet socket address
- 
-    type Sockaddr_In_Access is access all Sockaddr_In;
-    pragma Convention (C, Sockaddr_In_Access);
-    --  Access to internet socket address
- 
-    procedure Set_Length
-      (Sin : Sockaddr_In_Access;
-       Len : C.int);
-    pragma Inline (Set_Length);
-    --  Set Sin.Sin_Length to Len.
- 
-    procedure Set_Family
-      (Sin     : Sockaddr_In_Access;
-       Family  : C.int);
-    pragma Inline (Set_Family);
-    --  Set Sin.Sin_Family to Family.
- 
-    procedure Set_Port
-      (Sin     : Sockaddr_In_Access;
-       Port    : C.unsigned_short);
-    pragma Inline (Set_Port);
-    --  Set Sin.Sin_Port to Port.
- 
-    procedure Set_Address
-      (Sin        : Sockaddr_In_Access;
-       Address    : In_Addr);
-    pragma Inline (Set_Address);
-    --  Set Sin.Sin_Addr to Address.
- 
-    type Hostent is record
-       H_Name      : C.Strings.chars_ptr;
-       H_Aliases   : Chars_Ptr_Pointers.Pointer;
-       H_Addrtype  : C.int;
-       H_Length    : C.int;
-       H_Addr_List : In_Addr_Access_Pointers.Pointer;
-    end record;
-    pragma Convention (C, Hostent);
-    --  Host entry
- 
-    type Hostent_Access is access all Hostent;
-    pragma Convention (C, Hostent_Access);
-    --  Access to host entry
- 
-    type Servent is record
-       S_Name      : C.Strings.chars_ptr;
-       S_Aliases   : Chars_Ptr_Pointers.Pointer;
-       S_Port      : C.int;
-       S_Proto     : C.Strings.chars_ptr;
-    end record;
-    pragma Convention (C, Servent);
-    --  Service entry
- 
-    type Servent_Access is access all Servent;
-    pragma Convention (C, Servent_Access);
-    --  Access to service entry
- 
-    type Two_Int is array (0 .. 1) of C.int;
-    pragma Convention (C, Two_Int);
-    --  Used with pipe()
- 
-    function C_Accept
-      (S       : C.int;
-       Addr    : System.Address;
-       Addrlen : access C.int)
-       return    C.int;
- 
-    function C_Bind
-      (S       : C.int;
-       Name    : System.Address;
-       Namelen : C.int)
-       return    C.int;
- 
-    function C_Close
-      (Fd   : C.int)
-       return C.int;
- 
-    function C_Connect
-      (S       : C.int;
-       Name    : System.Address;
-       Namelen : C.int)
-       return    C.int;
- 
-    function C_Gethostbyaddr
-      (Addr : System.Address;
-       Len  : C.int;
-       Typ  : C.int)
-       return Hostent_Access;
- 
-    function C_Gethostbyname
-      (Name : C.char_array)
-       return Hostent_Access;
- 
-    function C_Gethostname
-      (Name    : System.Address;
-       Namelen : C.int)
-       return    C.int;
- 
-    function C_Getpeername
-      (S       : C.int;
-       Name    : System.Address;
-       Namelen : access C.int)
-       return    C.int;
- 
-    function C_Getservbyname
-      (Name  : C.char_array;
-       Proto : C.char_array)
-       return Servent_Access;
- 
-    function C_Getservbyport
-      (Port  : C.int;
-       Proto : C.char_array)
-       return Servent_Access;
- 
-    function C_Getsockname
-      (S       : C.int;
-       Name    : System.Address;
-       Namelen : access C.int)
-       return    C.int;
- 
-    function C_Getsockopt
-      (S       : C.int;
-       Level   : C.int;
-       Optname : C.int;
-       Optval  : System.Address;
-       Optlen  : access C.int)
-       return    C.int;
- 
-    function C_Inet_Addr
-      (Cp   : C.Strings.chars_ptr)
-       return C.int;
- 
-    function C_Ioctl
-      (S    : C.int;
-       Req  : C.int;
-       Arg  : Int_Access)
-       return C.int;
- 
-    function C_Listen (S, Backlog : C.int) return C.int;
- 
-    function C_Read
-      (Fd    : C.int;
-       Buf   : System.Address;
-       Count : C.int)
-       return  C.int;
- 
-    function C_Readv
-      (Fd     : C.int;
-       Iov    : System.Address;
-       Iovcnt : C.int)
-       return   C.int;
- 
-    function C_Recv
-      (S     : C.int;
-       Msg   : System.Address;
-       Len   : C.int;
-       Flags : C.int)
-       return  C.int;
- 
-    function C_Recvfrom
-      (S       : C.int;
-       Msg     : System.Address;
-       Len     : C.int;
-       Flags   : C.int;
-       From    : Sockaddr_In_Access;
-       Fromlen : access C.int)
-       return    C.int;
- 
-    function C_Select
-      (Nfds      : C.int;
-       Readfds   : Fd_Set_Access;
-       Writefds  : Fd_Set_Access;
-       Exceptfds : Fd_Set_Access;
-       Timeout   : Timeval_Access)
-       return      C.int;
- 
-    function C_Send
-      (S     : C.int;
-       Msg   : System.Address;
-       Len   : C.int;
-       Flags : C.int)
-       return  C.int;
- 
-    function C_Sendto
-      (S     : C.int;
-       Msg   : System.Address;
-       Len   : C.int;
-       Flags : C.int;
-       To    : Sockaddr_In_Access;
-       Tolen : C.int)
-       return  C.int;
- 
-    function C_Setsockopt
-      (S       : C.int;
-       Level   : C.int;
-       Optname : C.int;
-       Optval  : System.Address;
-       Optlen  : C.int)
-       return    C.int;
- 
-    function C_Shutdown
-      (S    : C.int;
-       How  : C.int)
-       return C.int;
- 
-    function C_Socket
-      (Domain   : C.int;
-       Typ      : C.int;
-       Protocol : C.int)
-       return     C.int;
- 
-    function C_Strerror
-      (Errnum : C.int)
-       return   C.Strings.chars_ptr;
- 
-    function C_System
-      (Command : System.Address)
-       return    C.int;
- 
-    function C_Write
-      (Fd    : C.int;
-       Buf   : System.Address;
-       Count : C.int)
-       return  C.int;
- 
-    function C_Writev
-      (Fd     : C.int;
-       Iov    : System.Address;
-       Iovcnt : C.int)
-       return   C.int;
- 
-    procedure Free_Socket_Set
-      (Set    : Fd_Set_Access);
-    --  Free system-dependent socket set
- 
-    procedure Get_Socket_From_Set
-      (Set    : Fd_Set_Access;
-       Socket : Int_Access;
-       Last   : Int_Access);
-    --  Get last socket in Socket and remove it from the socket
-    --  set. The parameter Last is a maximum value of the largest
-    --  socket. This hint is used to avoid scanning very large socket
-    --  sets. After a call to Get_Socket_From_Set, Last is set back to
-    --  the real largest socket in the socket set.
- 
-    procedure Insert_Socket_In_Set
-      (Set    : Fd_Set_Access;
-       Socket : C.int);
-    --  Insert socket in the socket set
- 
-    function  Is_Socket_In_Set
-      (Set    : Fd_Set_Access;
-       Socket : C.int)
-      return Boolean;
-    --  Check whether Socket is in the socket set
- 
-    procedure Last_Socket_In_Set
-      (Set    : Fd_Set_Access;
-       Last   : Int_Access);
-    --  Find the largest socket in the socket set. This is needed for
-    --  select(). When Last_Socket_In_Set is called, parameter Last is
-    --  a maximum value of the largest socket. This hint is used to
-    --  avoid scanning very large socket sets. After the call, Last is
-    --  set back to the real largest socket in the socket set.
- 
-    function  New_Socket_Set
-      (Set    : Fd_Set_Access)
-      return   Fd_Set_Access;
-    --  Allocate a new socket set which is a system-dependent structure
-    --  and initialize by copying Set if it is non-null, by making it
-    --  empty otherwise.
- 
-    procedure Remove_Socket_From_Set
-      (Set    : Fd_Set_Access;
-       Socket : C.int);
-    --  Remove socket from the socket set
- 
-    procedure Finalize;
-    procedure Initialize (Process_Blocking_IO : Boolean);
- 
- private
- 
-    pragma Import (C, C_Bind, "bind");
-    pragma Import (C, C_Close, "close");
-    pragma Import (C, C_Gethostname, "gethostname");
-    pragma Import (C, C_Getpeername, "getpeername");
-    pragma Import (C, C_Getsockname, "getsockname");
-    pragma Import (C, C_Getsockopt, "getsockopt");
-    pragma Import (C, C_Inet_Addr, "inet_addr");
-    pragma Import (C, C_Listen, "listen");
-    pragma Import (C, C_Read, "read");
-    pragma Import (C, C_Readv, "readv");
-    pragma Import (C, C_Select, "select");
-    pragma Import (C, C_Setsockopt, "setsockopt");
-    pragma Import (C, C_Shutdown, "shutdown");
-    pragma Import (C, C_Strerror, "strerror");
-    pragma Import (C, C_System, "system");
-    pragma Import (C, C_Write, "write");
-    pragma Import (C, C_Writev, "writev");
- 
-    pragma Import (C, Free_Socket_Set, "__gnat_free_socket_set");
-    pragma Import (C, Get_Socket_From_Set, "__gnat_get_socket_from_set");
-    pragma Import (C, Is_Socket_In_Set, "__gnat_is_socket_in_set");
-    pragma Import (C, Last_Socket_In_Set, "__gnat_last_socket_in_set");
-    pragma Import (C, New_Socket_Set, "__gnat_new_socket_set");
-    pragma Import (C, Insert_Socket_In_Set, "__gnat_insert_socket_in_set");
-    pragma Import (C, Remove_Socket_From_Set, "__gnat_remove_socket_from_set");
- 
- end GNAT.Sockets.Thin;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/41intnam.ads gcc-4.0.0/gcc/ada/41intnam.ads
*** gcc-3.4.3/gcc/ada/41intnam.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/41intnam.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,164 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   A D A . I N T E R R U P T S . N A M E S                --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --          Copyright (C) 1991-2002 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a SCO UnixWare version of this package.
- --
- --  The following signals are reserved by the run time:
- --
- --  SIGFPE, SIGILL, SIGSEGV, SIGBUS, SIGTRAP, SIGABRT, SIGINT,
- --  SIGWAITING, SIGLWP, SIGTTIN, SIGTTOU, SIGTSTP, SIGPROF, SIGSTOP, SIGKILL
- --
- --  The pragma Unreserve_All_Interrupts affects the following signal(s):
- --
- --  SIGINT: made available for Ada handler
- 
- with System.OS_Interface;
- --  used for names of interrupts
- 
- package Ada.Interrupts.Names is
- 
-    --  Beware that the mapping of names to signals may be
-    --  many-to-one. There may be aliases.
- 
-    SIGHUP : constant Interrupt_ID :=
-      System.OS_Interface.SIGHUP;      --  hangup
- 
-    SIGINT : constant Interrupt_ID :=
-      System.OS_Interface.SIGINT;      --  interrupt (rubout)
- 
-    SIGQUIT : constant Interrupt_ID :=
-      System.OS_Interface.SIGQUIT;     --  quit (ASCD FS)
- 
-    SIGILL : constant Interrupt_ID :=
-      System.OS_Interface.SIGILL;      --  illegal instruction (not reset)
- 
-    SIGTRAP : constant Interrupt_ID :=
-      System.OS_Interface.SIGTRAP;     --  trace trap (not reset)
- 
-    SIGIOT : constant Interrupt_ID :=
-      System.OS_Interface.SIGIOT;      --  IOT instruction
- 
-    SIGABRT : constant Interrupt_ID := --  used by abort,
-      System.OS_Interface.SIGABRT;     --  replace SIGIOT in the  future
- 
-    SIGEMT : constant Interrupt_ID :=
-      System.OS_Interface.SIGEMT;      --  EMT instruction
- 
-    SIGFPE : constant Interrupt_ID :=
-      System.OS_Interface.SIGFPE;      --  floating point exception
- 
-    SIGKILL : constant Interrupt_ID :=
-      System.OS_Interface.SIGKILL;     --  kill (cannot be caught or ignored)
- 
-    SIGBUS : constant Interrupt_ID :=
-      System.OS_Interface.SIGBUS;      --  bus error
- 
-    SIGSEGV : constant Interrupt_ID :=
-      System.OS_Interface.SIGSEGV;     --  segmentation violation
- 
-    SIGSYS : constant Interrupt_ID :=
-      System.OS_Interface.SIGSYS;      --  bad argument to system call
- 
-    SIGPIPE : constant Interrupt_ID := --  write on a pipe with
-      System.OS_Interface.SIGPIPE;     --  no one to read it
- 
-    SIGALRM : constant Interrupt_ID :=
-      System.OS_Interface.SIGALRM;     --  alarm clock
- 
-    SIGTERM : constant Interrupt_ID :=
-      System.OS_Interface.SIGTERM;     --  software termination signal from kill
- 
-    SIGUSR1 : constant Interrupt_ID :=
-      System.OS_Interface.SIGUSR1;     --  user defined signal 1
- 
-    SIGUSR2 : constant Interrupt_ID :=
-      System.OS_Interface.SIGUSR2;     --  user defined signal 2
- 
-    SIGCLD : constant Interrupt_ID :=
-      System.OS_Interface.SIGCLD;      --  child status change
- 
-    SIGCHLD : constant Interrupt_ID :=
-      System.OS_Interface.SIGCHLD;     --  4.3BSD's/POSIX name for SIGCLD
- 
-    SIGPWR : constant Interrupt_ID :=
-      System.OS_Interface.SIGPWR;      --  power-fail restart
- 
-    SIGWINCH : constant Interrupt_ID :=
-      System.OS_Interface.SIGWINCH;    --  window size change
- 
-    SIGURG : constant Interrupt_ID :=
-      System.OS_Interface.SIGURG;      --  urgent condition on IO channel
- 
-    SIGPOLL : constant Interrupt_ID :=
-      System.OS_Interface.SIGPOLL;     --  pollable event occurred
- 
-    SIGIO : constant Interrupt_ID :=   --  input/output possible,
-      System.OS_Interface.SIGIO;       --  SIGPOLL alias (Solaris)
- 
-    SIGSTOP : constant Interrupt_ID :=
-      System.OS_Interface.SIGSTOP;     --  stop (cannot be caught or ignored)
- 
-    SIGTSTP : constant Interrupt_ID :=
-      System.OS_Interface.SIGTSTP;     --  user stop requested from tty
- 
-    SIGCONT : constant Interrupt_ID :=
-      System.OS_Interface.SIGCONT;     --  stopped process has been continued
- 
-    SIGTTIN : constant Interrupt_ID :=
-      System.OS_Interface.SIGTTIN;     --  background tty read attempted
- 
-    SIGTTOU : constant Interrupt_ID :=
-      System.OS_Interface.SIGTTOU;     --  background tty write attempted
- 
-    SIGVTALRM : constant Interrupt_ID :=
-      System.OS_Interface.SIGVTALRM;   --  virtual timer expired
- 
-    SIGPROF : constant Interrupt_ID :=
-      System.OS_Interface.SIGPROF;     --  profiling timer expired
- 
-    SIGXCPU : constant Interrupt_ID :=
-      System.OS_Interface.SIGXCPU;     --  CPU time limit exceeded
- 
-    SIGXFSZ : constant Interrupt_ID :=
-      System.OS_Interface.SIGXFSZ;     --  filesize limit exceeded
- 
-    SIGWAITING : constant Interrupt_ID :=
-      System.OS_Interface.SIGWAITING;  --  process's lwps blocked (Solaris)
- 
-    SIGLWP : constant Interrupt_ID :=
-      System.OS_Interface.SIGLWP;      --  used by thread library (Solaris)
- 
-    SIGAIO : constant Interrupt_ID :=
-      System.OS_Interface.SIGAIO;      --  Asynchronous I/O signal
- 
- end Ada.Interrupts.Names;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/42intnam.ads gcc-4.0.0/gcc/ada/42intnam.ads
*** gcc-3.4.3/gcc/ada/42intnam.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/42intnam.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,165 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   A D A . I N T E R R U P T S . N A M E S                --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --          Copyright (C) 1991-2002 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a LynxOS version of this package.
- --
- --  The following signals are reserved by the run time:
- --
- --  SIGFPE, SIGILL, SIGSEGV, SIGBUS, SIGTRAP, SIGABRT, SIGINT,
- --  SIGWAITING, SIGLWP, SIGTTIN, SIGTTOU, SIGTSTP, SIGPROF, SIGSTOP, SIGKILL
- --
- --  The pragma Unreserve_All_Interrupts affects the following signal(s):
- --
- --  SIGINT: made available for Ada handler
- 
- with System.OS_Interface;
- --  used for names of interrupts
- 
- package Ada.Interrupts.Names is
- 
-    --  Beware that the mapping of names to signals may be
-    --  many-to-one. There may be aliases.
- 
-    SIGHUP : constant Interrupt_ID :=
-      System.OS_Interface.SIGHUP;      --  hangup
- 
-    SIGINT : constant Interrupt_ID :=
-      System.OS_Interface.SIGINT;      --  interrupt (rubout)
- 
-    SIGQUIT : constant Interrupt_ID :=
-      System.OS_Interface.SIGQUIT;     --  quit (ASCD FS)
- 
-    SIGILL : constant Interrupt_ID :=
-      System.OS_Interface.SIGILL;      --  illegal instruction (not reset)
- 
-    SIGTRAP : constant Interrupt_ID :=
-      System.OS_Interface.SIGTRAP;     --  trace trap (not reset)
- 
-    SIGBRK : constant Interrupt_ID :=
-      System.OS_Interface.SIGBRK;      --  break
- 
-    SIGIOT : constant Interrupt_ID :=
-      System.OS_Interface.SIGIOT;      --  IOT instruction
- 
-    SIGABRT : constant Interrupt_ID := --  used by abort,
-      System.OS_Interface.SIGABRT;     --  replace SIGIOT in the  future
- 
-    SIGCORE : constant Interrupt_ID :=
-      System.OS_Interface.SIGCORE;     --  kill with core dump
- 
-    SIGEMT : constant Interrupt_ID :=
-      System.OS_Interface.SIGEMT;      --  EMT instruction
- 
-    SIGFPE : constant Interrupt_ID :=
-      System.OS_Interface.SIGFPE;      --  floating point exception
- 
-    SIGKILL : constant Interrupt_ID :=
-      System.OS_Interface.SIGKILL;     --  kill (cannot be caught or ignored)
- 
-    SIGBUS : constant Interrupt_ID :=
-      System.OS_Interface.SIGBUS;      --  bus error
- 
-    SIGSEGV : constant Interrupt_ID :=
-      System.OS_Interface.SIGSEGV;     --  segmentation violation
- 
-    SIGSYS : constant Interrupt_ID :=
-      System.OS_Interface.SIGSYS;      --  bad argument to system call
- 
-    SIGPIPE : constant Interrupt_ID := --  write on a pipe with
-      System.OS_Interface.SIGPIPE;     --  no one to read it
- 
-    SIGALRM : constant Interrupt_ID :=
-      System.OS_Interface.SIGALRM;     --  alarm clock
- 
-    SIGTERM : constant Interrupt_ID :=
-      System.OS_Interface.SIGTERM;     --  software termination signal from kill
- 
-    SIGURG : constant Interrupt_ID :=
-      System.OS_Interface.SIGURG;      --  urgent condition on IO channel
- 
-    SIGSTOP : constant Interrupt_ID :=
-      System.OS_Interface.SIGSTOP;     --  stop (cannot be caught or ignored)
- 
-    SIGTSTP : constant Interrupt_ID :=
-      System.OS_Interface.SIGTSTP;     --  user stop requested from tty
- 
-    SIGCONT : constant Interrupt_ID :=
-      System.OS_Interface.SIGCONT;     --  stopped process has been continued
- 
-    SIGCLD : constant Interrupt_ID :=
-      System.OS_Interface.SIGCLD;      --  child status change
- 
-    SIGCHLD : constant Interrupt_ID :=
-      System.OS_Interface.SIGCHLD;     --  4.3BSD's/POSIX name for SIGCLD
- 
-    SIGTTIN : constant Interrupt_ID :=
-      System.OS_Interface.SIGTTIN;     --  background tty read attempted
- 
-    SIGTTOU : constant Interrupt_ID :=
-      System.OS_Interface.SIGTTOU;     --  background tty write attempted
- 
-    SIGPOLL : constant Interrupt_ID :=
-      System.OS_Interface.SIGPOLL;     --  pollable event occurred
- 
-    SIGIO : constant Interrupt_ID :=   --  input/output possible,
-      System.OS_Interface.SIGIO;       --  SIGPOLL alias (Solaris)
- 
-    SIGXCPU : constant Interrupt_ID :=
-      System.OS_Interface.SIGXCPU;     --  CPU time limit exceeded
- 
-    SIGXFSZ : constant Interrupt_ID :=
-      System.OS_Interface.SIGXFSZ;     --  filesize limit exceeded
- 
-    SIGVTALRM : constant Interrupt_ID :=
-      System.OS_Interface.SIGVTALRM;   --  virtual timer expired
- 
-    SIGPROF : constant Interrupt_ID :=
-      System.OS_Interface.SIGPROF;     --  profiling timer expired
- 
-    SIGWINCH : constant Interrupt_ID :=
-      System.OS_Interface.SIGWINCH;    --  window size change
- 
-    SIGLOST : constant Interrupt_ID :=
-      System.OS_Interface.SIGLOST;     --  SUN 4.1 compatibility
- 
-    SIGUSR1 : constant Interrupt_ID :=
-      System.OS_Interface.SIGUSR1;     --  user defined signal 1
- 
-    SIGUSR2 : constant Interrupt_ID :=
-      System.OS_Interface.SIGUSR2;     --  user defined signal 2
- 
-    SIGPRIO : constant Interrupt_ID :=
-      System.OS_Interface.SIGPRIO;
-    --  sent to a process with its priority
-    --  or group is changed
- end Ada.Interrupts.Names;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/45intnam.ads gcc-4.0.0/gcc/ada/45intnam.ads
*** gcc-3.4.3/gcc/ada/45intnam.ads	Thu Nov 20 17:51:26 2003
--- gcc-4.0.0/gcc/ada/45intnam.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,136 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   A D A . I N T E R R U P T S . N A M E S                --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --          Copyright (C) 1991-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the FreeBSD THREADS version of this package
- 
- with System.OS_Interface;
- --  used for names of interrupts
- 
- package Ada.Interrupts.Names is
- 
-    SIGHUP : constant Interrupt_ID :=
-      System.OS_Interface.SIGHUP;      --  hangup
- 
-    SIGINT : constant Interrupt_ID :=
-      System.OS_Interface.SIGINT;      --  interrupt (rubout)
- 
-    SIGQUIT : constant Interrupt_ID :=
-      System.OS_Interface.SIGQUIT;     --  quit (ASCD FS)
- 
-    SIGILL : constant Interrupt_ID :=
-      System.OS_Interface.SIGILL;      --  illegal instruction (not reset)
- 
-    SIGTRAP : constant Interrupt_ID :=
-      System.OS_Interface.SIGTRAP;     --  trace trap (not reset)
- 
-    SIGIOT : constant Interrupt_ID :=
-      System.OS_Interface.SIGIOT;      --  IOT instruction
- 
-    SIGABRT : constant Interrupt_ID := --  used by abort,
-      System.OS_Interface.SIGABRT;     --  replace SIGIOT in the  future
- 
-    SIGFPE : constant Interrupt_ID :=
-      System.OS_Interface.SIGFPE;      --  floating point exception
- 
-    SIGKILL : constant Interrupt_ID :=
-      System.OS_Interface.SIGKILL;     --  kill (cannot be caught or ignored)
- 
-    SIGBUS : constant Interrupt_ID :=
-      System.OS_Interface.SIGBUS;      --  bus error
- 
-    SIGSEGV : constant Interrupt_ID :=
-      System.OS_Interface.SIGSEGV;     --  segmentation violation
- 
-    SIGPIPE : constant Interrupt_ID := --  write on a pipe with
-      System.OS_Interface.SIGPIPE;     --  no one to read it
- 
-    SIGALRM : constant Interrupt_ID :=
-      System.OS_Interface.SIGALRM;     --  alarm clock
- 
-    SIGTERM : constant Interrupt_ID :=
-      System.OS_Interface.SIGTERM;     --  software termination signal from kill
- 
-    SIGURG : constant Interrupt_ID :=
-      System.OS_Interface.SIGURG;      --  urgent condition on IO channel
- 
-    SIGSTOP : constant Interrupt_ID :=
-      System.OS_Interface.SIGSTOP;     --  stop (cannot be caught or ignored)
- 
-    SIGTSTP : constant Interrupt_ID :=
-      System.OS_Interface.SIGTSTP;     --  user stop requested from tty
- 
-    SIGCONT : constant Interrupt_ID :=
-      System.OS_Interface.SIGCONT;     --  stopped process has been continued
- 
-    SIGCHLD : constant Interrupt_ID :=
-      System.OS_Interface.SIGCHLD;     --  4.3BSD's/POSIX name for SIGCLD
- 
-    SIGCLD : constant Interrupt_ID :=
-      System.OS_Interface.SIGCLD;      --  child status change
- 
-    SIGTTIN : constant Interrupt_ID :=
-      System.OS_Interface.SIGTTIN;     --  background tty read attempted
- 
-    SIGTTOU : constant Interrupt_ID :=
-      System.OS_Interface.SIGTTOU;     --  background tty write attempted
- 
-    SIGIO : constant Interrupt_ID :=   --  input/output possible,
-      System.OS_Interface.SIGIO;       --  SIGPOLL alias (Solaris)
- 
-    SIGXCPU : constant Interrupt_ID :=
-      System.OS_Interface.SIGXCPU;     --  CPU time limit exceeded
- 
-    SIGXFSZ : constant Interrupt_ID :=
-      System.OS_Interface.SIGXFSZ;     --  filesize limit exceeded
- 
-    SIGVTALRM : constant Interrupt_ID :=
-      System.OS_Interface.SIGVTALRM;   --  virtual timer expired
- 
-    SIGPROF : constant Interrupt_ID :=
-      System.OS_Interface.SIGPROF;     --  profiling timer expired
- 
-    SIGWINCH : constant Interrupt_ID :=
-      System.OS_Interface.SIGWINCH;    --  window size change
- 
-    SIGUSR1 : constant Interrupt_ID :=
-      System.OS_Interface.SIGUSR1;     --  user defined signal 1
- 
-    SIGUSR2 : constant Interrupt_ID :=
-      System.OS_Interface.SIGUSR2;     --  user defined signal 2
- 
-    --  Beware that the mapping of names to signals may be
-    --  many-to-one.  There may be aliases.  Also, for all
-    --  signal names that are not supported on the current system
-    --  the value of the corresponding constant will be zero.
- 
- end Ada.Interrupts.Names;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/4aintnam.ads gcc-4.0.0/gcc/ada/4aintnam.ads
*** gcc-3.4.3/gcc/ada/4aintnam.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/4aintnam.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,151 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   A D A . I N T E R R U P T S . N A M E S                --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --          Copyright (C) 1991-2002 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the DEC Unix 4.0 version of this package.
- --
- --  The following signals are reserved by the run time:
- --
- --  SIGFPE, SIGILL, SIGSEGV, SIGBUS, SIGABRT, SIGTRAP, SIGINT, SIGALRM,
- --  SIGSTOP, SIGKILL
- --
- --  The pragma Unreserve_All_Interrupts affects the following signal(s):
- --
- --  SIGINT: made available for Ada handler
- 
- with System.OS_Interface;
- --  used for names of interrupts
- 
- package Ada.Interrupts.Names is
- 
-    --  Beware that the mapping of names to signals may be
-    --  many-to-one.  There may be aliases.  Also, for all
-    --  signal names that are not supported on the current system
-    --  the value of the corresponding constant will be zero.
- 
-    SIGHUP : constant Interrupt_ID :=
-      System.OS_Interface.SIGHUP;      --  hangup
- 
-    SIGINT : constant Interrupt_ID :=
-      System.OS_Interface.SIGINT;      --  interrupt (rubout)
- 
-    SIGQUIT : constant Interrupt_ID :=
-      System.OS_Interface.SIGQUIT;     --  quit (ASCD FS)
- 
-    SIGILL : constant Interrupt_ID :=
-      System.OS_Interface.SIGILL;      --  illegal instruction (not reset)
- 
-    SIGTRAP : constant Interrupt_ID :=
-      System.OS_Interface.SIGTRAP;     --  trace trap (not reset)
- 
-    SIGIOT : constant Interrupt_ID :=
-      System.OS_Interface.SIGIOT;      --  IOT instruction
- 
-    SIGABRT : constant Interrupt_ID := --  used by abort,
-      System.OS_Interface.SIGABRT;     --  replace SIGIOT in the  future
- 
-    SIGEMT : constant Interrupt_ID :=
-      System.OS_Interface.SIGEMT;      --  EMT instruction
- 
-    SIGFPE : constant Interrupt_ID :=
-      System.OS_Interface.SIGFPE;      --  floating point exception
- 
-    SIGKILL : constant Interrupt_ID :=
-      System.OS_Interface.SIGKILL;     --  kill (cannot be caught or ignored)
- 
-    SIGBUS : constant Interrupt_ID :=
-      System.OS_Interface.SIGBUS;      --  bus error
- 
-    SIGSEGV : constant Interrupt_ID :=
-      System.OS_Interface.SIGSEGV;     --  segmentation violation
- 
-    SIGSYS : constant Interrupt_ID :=
-      System.OS_Interface.SIGSYS;      --  bad argument to system call
- 
-    SIGPIPE : constant Interrupt_ID := --  write on a pipe with
-      System.OS_Interface.SIGPIPE;     --  no one to read it
- 
-    SIGALRM : constant Interrupt_ID :=
-      System.OS_Interface.SIGALRM;     --  alarm clock
- 
-    SIGTERM : constant Interrupt_ID :=
-      System.OS_Interface.SIGTERM;     --  software termination signal from kill
- 
-    SIGUSR1 : constant Interrupt_ID :=
-      System.OS_Interface.SIGUSR1;     --  user defined signal 1
- 
-    SIGUSR2 : constant Interrupt_ID :=
-      System.OS_Interface.SIGUSR2;     --  user defined signal 2
- 
-    SIGCHLD : constant Interrupt_ID :=
-      System.OS_Interface.SIGCHLD;     --  4.3BSD's/POSIX name for SIGCLD
- 
-    SIGWINCH : constant Interrupt_ID :=
-      System.OS_Interface.SIGWINCH;    --  window size change
- 
-    SIGURG : constant Interrupt_ID :=
-      System.OS_Interface.SIGURG;      --  urgent condition on IO channel
- 
-    SIGPOLL : constant Interrupt_ID :=
-      System.OS_Interface.SIGPOLL;     --  pollable event occurred
- 
-    SIGIO : constant Interrupt_ID :=   --  input/output possible,
-      System.OS_Interface.SIGIO;       --  SIGPOLL alias (Solaris)
- 
-    SIGSTOP : constant Interrupt_ID :=
-      System.OS_Interface.SIGSTOP;     --  stop (cannot be caught or ignored)
- 
-    SIGTSTP : constant Interrupt_ID :=
-      System.OS_Interface.SIGTSTP;     --  user stop requested from tty
- 
-    SIGCONT : constant Interrupt_ID :=
-      System.OS_Interface.SIGCONT;     --  stopped process has been continued
- 
-    SIGTTIN : constant Interrupt_ID :=
-      System.OS_Interface.SIGTTIN;     --  background tty read attempted
- 
-    SIGTTOU : constant Interrupt_ID :=
-      System.OS_Interface.SIGTTOU;     --  background tty write attempted
- 
-    SIGVTALRM : constant Interrupt_ID :=
-      System.OS_Interface.SIGVTALRM;   --  virtual timer expired
- 
-    SIGPROF : constant Interrupt_ID :=
-      System.OS_Interface.SIGPROF;     --  profiling timer expired
- 
-    SIGXCPU : constant Interrupt_ID :=
-      System.OS_Interface.SIGXCPU;     --  CPU time limit exceeded
- 
-    SIGXFSZ : constant Interrupt_ID :=
-      System.OS_Interface.SIGXFSZ;     --  filesize limit exceeded
- 
- end Ada.Interrupts.Names;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/4cintnam.ads gcc-4.0.0/gcc/ada/4cintnam.ads
*** gcc-3.4.3/gcc/ada/4cintnam.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/4cintnam.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,201 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   A D A . I N T E R R U P T S . N A M E S                --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --           Copyright (C) 1991-2002 Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a AIX version of this package.
- --
- --  The following signals are reserved by the run time (native threads):
- --
- --  SIGFPE, SIGILL, SIGSEGV, SIGBUS, SIGABRT, SIGTRAP, SIGINT, SIGTERM,
- --  SIGSTOP, SIGKILL
- --
- --  The following signals are reserved by the run time (FSU threads):
- --
- --  SIGFPE, SIGILL, SIGSEGV, SIGBUS, SIGABRT, SIGTRAP, SIGINT, SIGALRM,
- --  SIGWAITING, SIGSTOP, SIGKILL
- --
- --  The pragma Unreserve_All_Interrupts affects the following signal(s):
- --
- --  SIGINT: made available for Ada handler
- 
- --  This target-dependent package spec contains names of interrupts
- --  supported by the local system.
- 
- with System.OS_Interface;
- --  used for names of interrupts
- 
- package Ada.Interrupts.Names is
- 
-    --  Beware that the mapping of names to signals may be
-    --  many-to-one.  There may be aliases.  Also, for all
-    --  signal names that are not supported on the current system
-    --  the value of the corresponding constant will be zero.
- 
-    SIGHUP : constant Interrupt_ID :=
-      System.OS_Interface.SIGHUP;      --  hangup
- 
-    SIGINT : constant Interrupt_ID :=
-      System.OS_Interface.SIGINT;      --  interrupt (rubout)
- 
-    SIGQUIT : constant Interrupt_ID :=
-      System.OS_Interface.SIGQUIT;     --  quit (ASCD FS)
- 
-    SIGILL : constant Interrupt_ID :=
-      System.OS_Interface.SIGILL;      --  illegal instruction (not reset)
- 
-    SIGTRAP : constant Interrupt_ID :=
-      System.OS_Interface.SIGTRAP;     --  trace trap (not reset)
- 
-    SIGIOT : constant Interrupt_ID :=
-      System.OS_Interface.SIGIOT;      --  IOT instruction
- 
-    SIGABRT : constant Interrupt_ID := --  used by abort,
-      System.OS_Interface.SIGABRT;     --  replace SIGIOT in the  future
- 
-    SIGEMT : constant Interrupt_ID :=
-      System.OS_Interface.SIGEMT;      --  EMT instruction
- 
-    SIGFPE : constant Interrupt_ID :=
-      System.OS_Interface.SIGFPE;      --  floating point exception
- 
-    SIGKILL : constant Interrupt_ID :=
-      System.OS_Interface.SIGKILL;     --  kill (cannot be caught or ignored)
- 
-    SIGBUS : constant Interrupt_ID :=
-      System.OS_Interface.SIGBUS;      --  bus error
- 
-    SIGSEGV : constant Interrupt_ID :=
-      System.OS_Interface.SIGSEGV;     --  segmentation violation
- 
-    SIGSYS : constant Interrupt_ID :=
-      System.OS_Interface.SIGSYS;      --  bad argument to system call
- 
-    SIGPIPE : constant Interrupt_ID := --  write on a pipe with
-      System.OS_Interface.SIGPIPE;     --  no one to read it
- 
-    SIGALRM : constant Interrupt_ID :=
-      System.OS_Interface.SIGALRM;     --  alarm clock
- 
-    SIGTERM : constant Interrupt_ID :=
-      System.OS_Interface.SIGTERM;     --  software termination signal from kill
- 
-    SIGUSR1 : constant Interrupt_ID :=
-      System.OS_Interface.SIGUSR1;     --  user defined signal 1
- 
-    SIGUSR2 : constant Interrupt_ID :=
-      System.OS_Interface.SIGUSR2;     --  user defined signal 2
- 
-    SIGCLD : constant Interrupt_ID :=
-      System.OS_Interface.SIGCLD;      --  child status change
- 
-    SIGCHLD : constant Interrupt_ID :=
-      System.OS_Interface.SIGCHLD;     --  4.3BSD's/POSIX name for SIGCLD
- 
-    SIGPWR : constant Interrupt_ID :=
-      System.OS_Interface.SIGPWR;        --  power-fail restart
- 
-    SIGWINCH : constant Interrupt_ID :=
-      System.OS_Interface.SIGWINCH;    --  window size change
- 
-    SIGURG : constant Interrupt_ID :=
-      System.OS_Interface.SIGURG;      --  urgent condition on IO channel
- 
-    SIGPOLL : constant Interrupt_ID :=
-      System.OS_Interface.SIGPOLL;     --  pollable event occurred
- 
-    SIGIO : constant Interrupt_ID :=   --  input/output possible,
-      System.OS_Interface.SIGIO;       --  SIGPOLL alias (Solaris)
- 
-    SIGSTOP : constant Interrupt_ID :=
-      System.OS_Interface.SIGSTOP;     --  stop (cannot be caught or ignored)
- 
-    SIGTSTP : constant Interrupt_ID :=
-      System.OS_Interface.SIGTSTP;     --  user stop requested from tty
- 
-    SIGCONT : constant Interrupt_ID :=
-      System.OS_Interface.SIGCONT;     --  stopped process has been continued
- 
-    SIGTTIN : constant Interrupt_ID :=
-      System.OS_Interface.SIGTTIN;     --  background tty read attempted
- 
-    SIGTTOU : constant Interrupt_ID :=
-      System.OS_Interface.SIGTTOU;     --  background tty write attempted
- 
-    SIGVTALRM : constant Interrupt_ID :=
-      System.OS_Interface.SIGVTALRM;   --  virtual timer expired
- 
-    SIGPROF : constant Interrupt_ID :=
-      System.OS_Interface.SIGPROF;     --  profiling timer expired
- 
-    SIGXCPU : constant Interrupt_ID :=
-      System.OS_Interface.SIGXCPU;     --  CPU time limit exceeded
- 
-    SIGXFSZ : constant Interrupt_ID :=
-      System.OS_Interface.SIGXFSZ;     --  filesize limit exceeded
- 
-    SIGMSG : constant Interrupt_ID :=
-      System.OS_Interface.SIGMSG;      -- input data is in the ring buffer
- 
-    SIGDANGER : constant Interrupt_ID :=
-      System.OS_Interface.SIGDANGER;   -- system crash imminent;
- 
-    SIGMIGRATE : constant Interrupt_ID :=
-      System.OS_Interface.SIGMIGRATE;  -- migrate process
- 
-    SIGPRE : constant Interrupt_ID :=
-      System.OS_Interface.SIGPRE;      -- programming exception
- 
-    SIGVIRT : constant Interrupt_ID :=
-      System.OS_Interface.SIGVIRT;     -- AIX virtual time alarm
- 
-    SIGALRM1 : constant Interrupt_ID :=
-      System.OS_Interface.SIGALRM1;    -- m:n condition variables
- 
-    SIGWAITING : constant Interrupt_ID :=
-      System.OS_Interface.SIGWAITING;  --  m:n scheduling
- 
-    SIGKAP : constant Interrupt_ID :=
-      System.OS_Interface.SIGKAP;      -- keep alive poll from native keyboard
- 
-    SIGGRANT : constant Interrupt_ID :=
-      System.OS_Interface.SIGGRANT;    -- monitor mode granted
- 
-    SIGRETRACT : constant Interrupt_ID :=
-      System.OS_Interface.SIGRETRACT;  -- monitor mode should be relinguished
- 
-    SIGSOUND : constant Interrupt_ID :=
-      System.OS_Interface.SIGSOUND;    -- sound control has completed
- 
-    SIGSAK : constant Interrupt_ID :=
-      System.OS_Interface.SIGSAK;      -- secure attention key
- 
- end Ada.Interrupts.Names;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/4gintnam.ads gcc-4.0.0/gcc/ada/4gintnam.ads
*** gcc-3.4.3/gcc/ada/4gintnam.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/4gintnam.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,196 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
- --                                                                          --
- --                   A D A . I N T E R R U P T S . N A M E S                --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --             Copyright (C) 1991-1994, Florida State University            --
- --             Copyright (C) 1995-2003, Ada Core Technologies               --
- --                                                                          --
- -- GNARL is free software; you can redistribute it  and/or modify it  under --
- -- terms  of  the  GNU  Library General Public License  as published by the --
- -- Free Software  Foundation;  either version 2, or (at  your  option)  any --
- -- later  version.  GNARL is distributed  in the hope that  it will be use- --
- -- ful, but  WITHOUT ANY WARRANTY;   without even the  implied  warranty of --
- -- MERCHANTABILITY  or  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Gen- --
- -- eral Library Public License  for more details.  You should have received --
- -- a  copy of the GNU Library General Public License along with GNARL;  see --
- -- file COPYING.LIB.  If not,  write to the  Free Software Foundation,   59 --
- -- Temple Place - Suite 330, Boston, MA 02111-1307, USA.                    --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the Irix version of this package
- 
- --  The following signals are reserved by the run time (Athread library):
- 
- --  SIGFPE, SIGILL, SIGSEGV, SIGBUS, SIGTRAP, SIGSTOP, SIGKILL
- 
- --  The following signals are reserved by the run time (Pthread library):
- 
- --  SIGTSTP, SIGILL, SIGTRAP, SIGEMT, SIGFPE, SIGBUS, SIGSTOP, SIGKILL,
- --  SIGSEGV, SIGSYS, SIGXCPU, SIGXFSZ, SIGPROF, SIGPTINTR, SIGPTRESCHED,
- --  SIGABRT, SIGINT
- 
- --  The pragma Unreserve_All_Interrupts affects the following signal
- --  (Pthread library):
- 
- --  SIGINT: made available for Ada handler
- 
- --  This target-dependent package spec contains names of interrupts
- --  supported by the local system.
- 
- with System.OS_Interface;
- --  used for names of interrupts
- 
- package Ada.Interrupts.Names is
- 
-    --  Beware that the mapping of names to signals may be
-    --  many-to-one.  There may be aliases.  Also, for all
-    --  signal names that are not supported on the current system
-    --  the value of the corresponding constant will be zero.
- 
-    SIGHUP : constant Interrupt_ID :=
-      System.OS_Interface.SIGHUP;      --  hangup
- 
-    SIGINT : constant Interrupt_ID :=
-      System.OS_Interface.SIGINT;      --  interrupt (rubout)
- 
-    SIGQUIT : constant Interrupt_ID :=
-      System.OS_Interface.SIGQUIT;     --  quit (ASCD FS)
- 
-    SIGILL : constant Interrupt_ID :=
-      System.OS_Interface.SIGILL;      --  illegal instruction (not reset)
- 
-    SIGTRAP : constant Interrupt_ID :=
-      System.OS_Interface.SIGTRAP;     --  trace trap (not reset)
- 
-    SIGIOT : constant Interrupt_ID :=
-      System.OS_Interface.SIGIOT;      --  IOT instruction
- 
-    SIGABRT : constant Interrupt_ID :=
-      System.OS_Interface.SIGABRT;     --  used by abort, replace SIGIOT in the
-    --                                     future
- 
-    SIGEMT : constant Interrupt_ID :=
-      System.OS_Interface.SIGEMT;      --  EMT instruction
- 
-    SIGFPE : constant Interrupt_ID :=
-      System.OS_Interface.SIGFPE;      --  floating point exception
- 
-    SIGKILL : constant Interrupt_ID :=
-      System.OS_Interface.SIGKILL;     --  kill (cannot be caught or ignored)
- 
-    SIGBUS : constant Interrupt_ID :=
-      System.OS_Interface.SIGBUS;      --  bus error
- 
-    SIGSEGV : constant Interrupt_ID :=
-      System.OS_Interface.SIGSEGV;     --  segmentation violation
- 
-    SIGSYS : constant Interrupt_ID :=
-      System.OS_Interface.SIGSYS;      --  bad argument to system call
- 
-    SIGPIPE : constant Interrupt_ID :=
-      System.OS_Interface.SIGPIPE;     --  write on pipe with no one to read it
- 
-    SIGALRM : constant Interrupt_ID :=
-      System.OS_Interface.SIGALRM;     --  alarm clock
- 
-    SIGTERM : constant Interrupt_ID :=
-      System.OS_Interface.SIGTERM;     --  software termination signal from kill
- 
-    SIGUSR1 : constant Interrupt_ID :=
-      System.OS_Interface.SIGUSR1;     --  user defined signal 1
- 
-    SIGUSR2 : constant Interrupt_ID :=
-      System.OS_Interface.SIGUSR2;     --  user defined signal 2
- 
-    SIGCLD : constant Interrupt_ID :=
-      System.OS_Interface.SIGCLD;      --  alias for SIGCHLD
- 
-    SIGCHLD : constant Interrupt_ID :=
-      System.OS_Interface.SIGCHLD;     --  child status change
- 
-    SIGPWR : constant Interrupt_ID :=
-      System.OS_Interface.SIGPWR;      --  power-fail restart
- 
-    SIGWINCH : constant Interrupt_ID :=
-      System.OS_Interface.SIGWINCH;    --  window size change
- 
-    SIGURG : constant Interrupt_ID :=
-      System.OS_Interface.SIGURG;      --  urgent condition on IO channel
- 
-    SIGPOLL : constant Interrupt_ID :=
-      System.OS_Interface.SIGPOLL;     --  pollable event occurred
- 
-    SIGIO : constant Interrupt_ID :=
-      System.OS_Interface.SIGIO;       --  I/O possible (Solaris SIGPOLL alias)
- 
-    SIGSTOP : constant Interrupt_ID :=
-      System.OS_Interface.SIGSTOP;     --  stop (cannot be caught or ignored)
- 
-    SIGTSTP : constant Interrupt_ID :=
-      System.OS_Interface.SIGTSTP;     --  user stop requested from tty
- 
-    SIGCONT : constant Interrupt_ID :=
-      System.OS_Interface.SIGCONT;     --  stopped process has been continued
- 
-    SIGTTIN : constant Interrupt_ID :=
-      System.OS_Interface.SIGTTIN;     --  background tty read attempted
- 
-    SIGTTOU : constant Interrupt_ID :=
-      System.OS_Interface.SIGTTOU;     --  background tty write attempted
- 
-    SIGVTALRM : constant Interrupt_ID :=
-      System.OS_Interface.SIGVTALRM;   --  virtual timer expired
- 
-    SIGPROF : constant Interrupt_ID :=
-      System.OS_Interface.SIGPROF;     --  profiling timer expired
- 
-    SIGXCPU : constant Interrupt_ID :=
-      System.OS_Interface.SIGXCPU;     --  CPU time limit exceeded
- 
-    SIGXFSZ : constant Interrupt_ID :=
-      System.OS_Interface.SIGXFSZ;     --  filesize limit exceeded
- 
-    SIGK32 : constant Interrupt_ID :=
-      System.OS_Interface.SIGK32;      --  reserved for kernel (IRIX)
- 
-    SIGCKPT : constant Interrupt_ID :=
-      System.OS_Interface.SIGCKPT;     --  Checkpoint warning
- 
-    SIGRESTART : constant Interrupt_ID :=
-      System.OS_Interface.SIGRESTART;  --  Restart warning
- 
-    SIGUME : constant Interrupt_ID :=
-      System.OS_Interface.SIGUME;      --  Uncorrectable memory error
- 
-    --  Signals defined for Posix 1003.1c.
- 
-    SIGPTINTR : constant Interrupt_ID :=
-      System.OS_Interface.SIGPTINTR;    --  Pthread Interrupt Signal
- 
-    SIGPTRESCHED : constant Interrupt_ID :=
-      System.OS_Interface.SIGPTRESCHED; --  Pthread Rescheduling Signal
- 
-    --  Posix 1003.1b signals
- 
-    SIGRTMIN : constant Interrupt_ID :=
-      System.OS_Interface.SIGRTMIN;    --  Posix 1003.1b signals
- 
-    SIGRTMAX : constant Interrupt_ID :=
-      System.OS_Interface.SIGRTMAX;    --  Posix 1003.1b signals
- 
- end Ada.Interrupts.Names;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/4hexcpol.adb gcc-4.0.0/gcc/ada/4hexcpol.adb
*** gcc-3.4.3/gcc/ada/4hexcpol.adb	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/4hexcpol.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,66 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   A D A . E X C E P T I O N S . P O L L                  --
- --       (version supporting asynchronous abort test and time slicing)      --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --          Copyright (C) 1992-2000, Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This version is for targets that do not support per-thread asynchronous
- --  signals or that do not handle async timers properly. On such targets, we
- --  require compilation with the -gnatP switch that activates periodic polling.
- --  Then in the body of the polling routine we test for asynchronous abort and
- --  yield periodically.
- 
- --  HP-UX and SCO currently use this file
- 
- with System.Soft_Links;
- --  used for Check_Abort_Status
- 
- separate (Ada.Exceptions)
- 
- ----------
- -- Poll --
- ----------
- 
- procedure Poll is
- begin
-    if Counter = 10000 then
-       Counter := 0;
-       delay 0.0;
-    else
-       Counter := Counter + 1;
-    end if;
- 
-    --  Test for asynchronous abort on each poll
- 
-    if System.Soft_Links.Check_Abort_Status.all /= 0 then
-       raise Standard'Abort_Signal;
-    end if;
- end Poll;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/4hintnam.ads gcc-4.0.0/gcc/ada/4hintnam.ads
*** gcc-3.4.3/gcc/ada/4hintnam.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/4hintnam.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,155 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   A D A . I N T E R R U P T S . N A M E S                --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --             Copyright (C) 1991-1994, Florida State University            --
- --             Copyright (C) 1995-2003, Ada Core Technologies               --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a HP-UX version of this package.
- 
- --  The following signals are reserved by the run time:
- 
- --  SIGFPE, SIGILL, SIGSEGV, SIGBUS, SIGTRAP, SIGTERM, SIGABRT, SIGINT,
- --  SIGALRM, SIGSTOP, SIGKILL
- 
- --  The pragma Unreserve_All_Interrupts affects the following signal(s):
- 
- --  SIGINT: made available for Ada handler
- 
- --  This target-dependent package spec contains names of interrupts
- --  supported by the local system.
- 
- with System.OS_Interface;
- --  used for names of interrupts
- 
- package Ada.Interrupts.Names is
- 
-    --  Beware that the mapping of names to signals may be
-    --  many-to-one.  There may be aliases.  Also, for all
-    --  signal names that are not supported on the current system
-    --  the value of the corresponding constant will be zero.
- 
-    SIGHUP : constant Interrupt_ID :=
-      System.OS_Interface.SIGHUP;      --  hangup
- 
-    SIGINT : constant Interrupt_ID :=
-      System.OS_Interface.SIGINT;      --  interrupt (rubout)
- 
-    SIGQUIT : constant Interrupt_ID :=
-      System.OS_Interface.SIGQUIT;     --  quit (ASCD FS)
- 
-    SIGILL : constant Interrupt_ID :=
-      System.OS_Interface.SIGILL;      --  illegal instruction (not reset)
- 
-    SIGTRAP : constant Interrupt_ID :=
-      System.OS_Interface.SIGTRAP;     --  trace trap (not reset)
- 
-    SIGIOT : constant Interrupt_ID :=
-      System.OS_Interface.SIGIOT;      --  IOT instruction
- 
-    SIGABRT : constant Interrupt_ID := --  used by abort,
-      System.OS_Interface.SIGABRT;     --  replace SIGIOT in the  future
- 
-    SIGEMT : constant Interrupt_ID :=
-      System.OS_Interface.SIGEMT;      --  EMT instruction
- 
-    SIGFPE : constant Interrupt_ID :=
-      System.OS_Interface.SIGFPE;      --  floating point exception
- 
-    SIGKILL : constant Interrupt_ID :=
-      System.OS_Interface.SIGKILL;     --  kill (cannot be caught or ignored)
- 
-    SIGBUS : constant Interrupt_ID :=
-      System.OS_Interface.SIGBUS;      --  bus error
- 
-    SIGSEGV : constant Interrupt_ID :=
-      System.OS_Interface.SIGSEGV;     --  segmentation violation
- 
-    SIGSYS : constant Interrupt_ID :=
-      System.OS_Interface.SIGSYS;      --  bad argument to system call
- 
-    SIGPIPE : constant Interrupt_ID := --  write on a pipe with
-      System.OS_Interface.SIGPIPE;     --  no one to read it
- 
-    SIGALRM : constant Interrupt_ID :=
-      System.OS_Interface.SIGALRM;     --  alarm clock
- 
-    SIGTERM : constant Interrupt_ID :=
-      System.OS_Interface.SIGTERM;     --  software termination signal from kill
- 
-    SIGUSR1 : constant Interrupt_ID :=
-      System.OS_Interface.SIGUSR1;     --  user defined signal 1
- 
-    SIGUSR2 : constant Interrupt_ID :=
-      System.OS_Interface.SIGUSR2;     --  user defined signal 2
- 
-    SIGCLD : constant Interrupt_ID :=
-      System.OS_Interface.SIGCLD;      --  child status change
- 
-    SIGCHLD : constant Interrupt_ID :=
-      System.OS_Interface.SIGCHLD;     --  4.3BSD's/POSIX name for SIGCLD
- 
-    SIGWINCH : constant Interrupt_ID :=
-      System.OS_Interface.SIGWINCH;    --  window size change
- 
-    SIGURG : constant Interrupt_ID :=
-      System.OS_Interface.SIGURG;      --  urgent condition on IO channel
- 
-    SIGPOLL : constant Interrupt_ID :=
-      System.OS_Interface.SIGPOLL;     --  pollable event occurred
- 
-    SIGIO : constant Interrupt_ID :=   --  input/output possible,
-      System.OS_Interface.SIGIO;       --  SIGPOLL alias
- 
-    SIGSTOP : constant Interrupt_ID :=
-      System.OS_Interface.SIGSTOP;     --  stop (cannot be caught or ignored)
- 
-    SIGTSTP : constant Interrupt_ID :=
-      System.OS_Interface.SIGTSTP;     --  user stop requested from tty
- 
-    SIGCONT : constant Interrupt_ID :=
-      System.OS_Interface.SIGCONT;     --  stopped process has been continued
- 
-    SIGTTIN : constant Interrupt_ID :=
-      System.OS_Interface.SIGTTIN;     --  background tty read attempted
- 
-    SIGTTOU : constant Interrupt_ID :=
-      System.OS_Interface.SIGTTOU;     --  background tty write attempted
- 
-    SIGVTALRM : constant Interrupt_ID :=
-      System.OS_Interface.SIGVTALRM;   --  virtual timer expired
- 
-    SIGPROF : constant Interrupt_ID :=
-      System.OS_Interface.SIGPROF;     --  profiling timer expired
- 
-    SIGPWR : constant Interrupt_ID :=
-      System.OS_Interface.SIGPWR;      --  power-fail restart
- 
- end Ada.Interrupts.Names;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/4lintnam.ads gcc-4.0.0/gcc/ada/4lintnam.ads
*** gcc-3.4.3/gcc/ada/4lintnam.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/4lintnam.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,168 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   A D A . I N T E R R U P T S . N A M E S                --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --           Copyright (C) 1991-2002 Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a GNU/Linux version of this package.
- --
- --  The following signals are reserved by the run time (FSU threads):
- --
- --  SIGFPE, SIGILL, SIGSEGV, SIGBUS, SIGTRAP, SIGABRT, SIGINT,
- --  SIGALRM, SIGVTALRM, SIGUNUSED, SIGSTOP, SIGKILL
- --
- --  The following signals are reserved by the run time (LinuxThreads):
- --
- --  SIGFPE, SIGILL, SIGSEGV, SIGBUS, SIGTRAP, SIGABRT, SIGINT,
- --  SIGUSR1, SIGUSR2, SIGVTALRM, SIGUNUSED, SIGSTOP, SIGKILL
- --
- --  The pragma Unreserve_All_Interrupts affects the following signal(s):
- --
- --  SIGINT: made available for Ada handler
- 
- --  This target-dependent package spec contains names of interrupts
- --  supported by the local system.
- 
- with System.OS_Interface;
- --  used for names of interrupts
- 
- package Ada.Interrupts.Names is
- 
-    --  Beware that the mapping of names to signals may be
-    --  many-to-one.  There may be aliases.  Also, for all
-    --  signal names that are not supported on the current system
-    --  the value of the corresponding constant will be zero.
- 
-    SIGHUP : constant Interrupt_ID :=
-      System.OS_Interface.SIGHUP;      --  hangup
- 
-    SIGINT : constant Interrupt_ID :=
-      System.OS_Interface.SIGINT;      --  interrupt (rubout)
- 
-    SIGQUIT : constant Interrupt_ID :=
-      System.OS_Interface.SIGQUIT;     --  quit (ASCD FS)
- 
-    SIGILL : constant Interrupt_ID :=
-      System.OS_Interface.SIGILL;      --  illegal instruction (not reset)
- 
-    SIGTRAP : constant Interrupt_ID :=
-      System.OS_Interface.SIGTRAP;     --  trace trap (not reset)
- 
-    SIGIOT : constant Interrupt_ID :=
-      System.OS_Interface.SIGIOT;      --  IOT instruction
- 
-    SIGABRT : constant Interrupt_ID := --  used by abort,
-      System.OS_Interface.SIGABRT;     --  replace SIGIOT in the  future
- 
-    SIGFPE : constant Interrupt_ID :=
-      System.OS_Interface.SIGFPE;      --  floating point exception
- 
-    SIGKILL : constant Interrupt_ID :=
-      System.OS_Interface.SIGKILL;     --  kill (cannot be caught or ignored)
- 
-    SIGBUS : constant Interrupt_ID :=
-      System.OS_Interface.SIGBUS;      --  bus error
- 
-    SIGSEGV : constant Interrupt_ID :=
-      System.OS_Interface.SIGSEGV;     --  segmentation violation
- 
-    SIGPIPE : constant Interrupt_ID := --  write on a pipe with
-      System.OS_Interface.SIGPIPE;     --  no one to read it
- 
-    SIGALRM : constant Interrupt_ID :=
-      System.OS_Interface.SIGALRM;     --  alarm clock
- 
-    SIGTERM : constant Interrupt_ID :=
-      System.OS_Interface.SIGTERM;     --  software termination signal from kill
- 
-    SIGUSR1 : constant Interrupt_ID :=
-      System.OS_Interface.SIGUSR1;     --  user defined signal 1
- 
-    SIGUSR2 : constant Interrupt_ID :=
-      System.OS_Interface.SIGUSR2;     --  user defined signal 2
- 
-    SIGCLD : constant Interrupt_ID :=
-      System.OS_Interface.SIGCLD;      --  child status change
- 
-    SIGCHLD : constant Interrupt_ID :=
-      System.OS_Interface.SIGCHLD;     --  4.3BSD's/POSIX name for SIGCLD
- 
-    SIGWINCH : constant Interrupt_ID :=
-      System.OS_Interface.SIGWINCH;    --  window size change
- 
-    SIGURG : constant Interrupt_ID :=
-      System.OS_Interface.SIGURG;      --  urgent condition on IO channel
- 
-    SIGPOLL : constant Interrupt_ID :=
-      System.OS_Interface.SIGPOLL;     --  pollable event occurred
- 
-    SIGIO : constant Interrupt_ID :=   --  input/output possible,
-      System.OS_Interface.SIGIO;       --  SIGPOLL alias (Solaris)
- 
-    SIGSTOP : constant Interrupt_ID :=
-      System.OS_Interface.SIGSTOP;     --  stop (cannot be caught or ignored)
- 
-    SIGTSTP : constant Interrupt_ID :=
-      System.OS_Interface.SIGTSTP;     --  user stop requested from tty
- 
-    SIGCONT : constant Interrupt_ID :=
-      System.OS_Interface.SIGCONT;     --  stopped process has been continued
- 
-    SIGTTIN : constant Interrupt_ID :=
-      System.OS_Interface.SIGTTIN;     --  background tty read attempted
- 
-    SIGTTOU : constant Interrupt_ID :=
-      System.OS_Interface.SIGTTOU;     --  background tty write attempted
- 
-    SIGVTALRM : constant Interrupt_ID :=
-      System.OS_Interface.SIGVTALRM;   --  virtual timer expired
- 
-    SIGPROF : constant Interrupt_ID :=
-      System.OS_Interface.SIGPROF;     --  profiling timer expired
- 
-    SIGXCPU : constant Interrupt_ID :=
-      System.OS_Interface.SIGXCPU;     --  CPU time limit exceeded
- 
-    SIGXFSZ : constant Interrupt_ID :=
-      System.OS_Interface.SIGXFSZ;     --  filesize limit exceeded
- 
-    SIGUNUSED : constant Interrupt_ID :=
-      System.OS_Interface.SIGUNUSED;     --  unused signal
- 
-    SIGSTKFLT : constant Interrupt_ID :=
-      System.OS_Interface.SIGSTKFLT;     --  stack fault on coprocessor
- 
-    SIGLOST : constant Interrupt_ID :=
-      System.OS_Interface.SIGLOST;       --  Linux alias for SIGIO
- 
-    SIGPWR : constant Interrupt_ID :=
-      System.OS_Interface.SIGPWR;        --  Power failure
- 
- end Ada.Interrupts.Names;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/4nintnam.ads gcc-4.0.0/gcc/ada/4nintnam.ads
*** gcc-3.4.3/gcc/ada/4nintnam.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/4nintnam.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,48 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                 GNU ADA RUNTIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   A D A . I N T E R R U P T S . N A M E S                --
- --                                                                          --
- --                                  S p e c                                 --
- --                           (No Tasking Version)                           --
- --                                                                          --
- --          Copyright (C) 1991-2002 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  The standard implementation of this spec contains only dummy interrupt
- --  names. These dummy entries permit checking out code for correctness of
- --  semantics, even if interrupts are not supported.
- 
- --  For specific implementations that fully support interrupts, this package
- --  spec is replaced by an implementation dependent version that defines the
- --  interrupts available on the system.
- 
- package Ada.Interrupts.Names is
- 
-    DUMMY_INTERRUPT_1 : constant Interrupt_ID := 1;
-    DUMMY_INTERRUPT_2 : constant Interrupt_ID := 2;
- 
- end Ada.Interrupts.Names;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/4ointnam.ads gcc-4.0.0/gcc/ada/4ointnam.ads
*** gcc-3.4.3/gcc/ada/4ointnam.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/4ointnam.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,43 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
- --                                                                          --
- --                   A D A . I N T E R R U P T S . N A M E S                --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --             Copyright (C) 1991-1994, Florida State University            --
- --             Copyright (C) 1995-2003, Ada Core Technologies               --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is an OS/2 version of this package.
- 
- --  This target-dependent package spec contains names of interrupts
- --  supported by the local system.
- 
- --  This is a stub, for systems that do not support interrupts (or signals)
- 
- package Ada.Interrupts.Names is
- end Ada.Interrupts.Names;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/4onumaux.ads gcc-4.0.0/gcc/ada/4onumaux.ads
*** gcc-3.4.3/gcc/ada/4onumaux.ads	Mon Jan  5 15:20:42 2004
--- gcc-4.0.0/gcc/ada/4onumaux.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,108 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT RUNTIME COMPONENTS                          --
- --                                                                          --
- --                     A D A . N U M E R I C S . A U X                      --
- --                                                                          --
- --                                 S p e c                                  --
- --                       (C Library Version for x86)                        --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package provides the basic computational interface for the generic
- --  elementary functions. The C library version interfaces with the routines
- --  in the C mathematical library, and is thus quite portable, although it may
- --  not necessarily meet the requirements for accuracy in the numerics annex.
- --  One advantage of using this package is that it will interface directly to
- --  hardware instructions, such as the those provided on the Intel x86.
- 
- --  Note: there are two versions of this package. One using the 80-bit x86
- --  long double format (which is this version), and one using 64-bit IEEE
- --  double (see file a-numaux.ads).
- 
- package Ada.Numerics.Aux is
- pragma Pure (Aux);
- 
-    pragma Linker_Options ("-lm");
- 
-    type Double is digits 18;
- 
-    --  We import these functions directly from C. Note that we label them
-    --  all as pure functions, because indeed all of them are in fact pure!
- 
-    function Sin (X : Double) return Double;
-    pragma Import (C, Sin, "sinl");
-    pragma Pure_Function (Sin);
- 
-    function Cos (X : Double) return Double;
-    pragma Import (C, Cos, "cosl");
-    pragma Pure_Function (Cos);
- 
-    function Tan (X : Double) return Double;
-    pragma Import (C, Tan, "tanl");
-    pragma Pure_Function (Tan);
- 
-    function Exp (X : Double) return Double;
-    pragma Import (C, Exp, "expl");
-    pragma Pure_Function (Exp);
- 
-    function Sqrt (X : Double) return Double;
-    pragma Import (C, Sqrt, "sqrtl");
-    pragma Pure_Function (Sqrt);
- 
-    function Log (X : Double) return Double;
-    pragma Import (C, Log, "logl");
-    pragma Pure_Function (Log);
- 
-    function Acos (X : Double) return Double;
-    pragma Import (C, Acos, "acosl");
-    pragma Pure_Function (Acos);
- 
-    function Asin (X : Double) return Double;
-    pragma Import (C, Asin, "asinl");
-    pragma Pure_Function (Asin);
- 
-    function Atan (X : Double) return Double;
-    pragma Import (C, Atan, "atanl");
-    pragma Pure_Function (Atan);
- 
-    function Sinh (X : Double) return Double;
-    pragma Import (C, Sinh, "sinhl");
-    pragma Pure_Function (Sinh);
- 
-    function Cosh (X : Double) return Double;
-    pragma Import (C, Cosh, "coshl");
-    pragma Pure_Function (Cosh);
- 
-    function Tanh (X : Double) return Double;
-    pragma Import (C, Tanh, "tanhl");
-    pragma Pure_Function (Tanh);
- 
-    function Pow (X, Y : Double) return Double;
-    pragma Import (C, Pow, "powl");
-    pragma Pure_Function (Pow);
- 
- end Ada.Numerics.Aux;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/4pintnam.ads gcc-4.0.0/gcc/ada/4pintnam.ads
*** gcc-3.4.3/gcc/ada/4pintnam.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/4pintnam.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,154 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   A D A . I N T E R R U P T S . N A M E S                --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --           Copyright (C) 1991-2002 Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a OpenNT (FSU THREAD) version of this package.
- --
- --  The following signals are reserved by the run time:
- --
- --  SIGFPE, SIGILL, SIGSEGV, SIGBUS, SIGTRAP, SIGABRT, SIGINT,
- --  SIGALRM, SIGVTALRM, SIGSTOP, SIGKILL
- --
- --  The pragma Unreserve_All_Interrupts affects the following signal(s):
- --
- --  SIGINT: made available for Ada handlers
- 
- --  This target-dependent package spec contains names of interrupts
- --  supported by the local system.
- 
- with System.OS_Interface;
- --  used for names of interrupts
- 
- package Ada.Interrupts.Names is
- 
-    --  Beware that the mapping of names to signals may be
-    --  many-to-one.  There may be aliases.  Also, for all
-    --  signal names that are not supported on the current system
-    --  the value of the corresponding constant will be zero.
- 
-    SIGHUP : constant Interrupt_ID :=
-      System.OS_Interface.SIGHUP;      --  hangup
- 
-    SIGINT : constant Interrupt_ID :=
-      System.OS_Interface.SIGINT;      --  interrupt (rubout)
- 
-    SIGQUIT : constant Interrupt_ID :=
-      System.OS_Interface.SIGQUIT;     --  quit (ASCD FS)
- 
-    SIGILL : constant Interrupt_ID :=
-      System.OS_Interface.SIGILL;      --  illegal instruction (not reset)
- 
-    SIGTRAP : constant Interrupt_ID :=
-      System.OS_Interface.SIGTRAP;     --  trace trap (not reset)
- 
-    SIGIOT : constant Interrupt_ID :=
-      System.OS_Interface.SIGIOT;      --  IOT instruction
- 
-    SIGABRT : constant Interrupt_ID := --  used by abort,
-      System.OS_Interface.SIGABRT;     --  replace SIGIOT in the  future
- 
-    SIGFPE : constant Interrupt_ID :=
-      System.OS_Interface.SIGFPE;      --  floating point exception
- 
-    SIGKILL : constant Interrupt_ID :=
-      System.OS_Interface.SIGKILL;     --  kill (cannot be caught or ignored)
- 
-    SIGBUS : constant Interrupt_ID :=
-      System.OS_Interface.SIGBUS;      --  bus error
- 
-    SIGSEGV : constant Interrupt_ID :=
-      System.OS_Interface.SIGSEGV;     --  segmentation violation
- 
-    SIGSYS : constant Interrupt_ID :=
-      System.OS_Interface.SIGSYS;      --  bad argument to system call
- 
-    SIGPIPE : constant Interrupt_ID := --  write on a pipe with
-      System.OS_Interface.SIGPIPE;     --  no one to read it
- 
-    SIGALRM : constant Interrupt_ID :=
-      System.OS_Interface.SIGALRM;     --  alarm clock
- 
-    SIGTERM : constant Interrupt_ID :=
-      System.OS_Interface.SIGTERM;     --  software termination signal from kill
- 
-    SIGUSR1 : constant Interrupt_ID :=
-      System.OS_Interface.SIGUSR1;     --  user defined signal 1
- 
-    SIGUSR2 : constant Interrupt_ID :=
-      System.OS_Interface.SIGUSR2;     --  user defined signal 2
- 
-    SIGCLD : constant Interrupt_ID :=
-      System.OS_Interface.SIGCLD;      --  child status change
- 
-    SIGCHLD : constant Interrupt_ID :=
-      System.OS_Interface.SIGCHLD;     --  4.3BSD's/POSIX name for SIGCLD
- 
-    SIGWINCH : constant Interrupt_ID :=
-      System.OS_Interface.SIGWINCH;    --  window size change
- 
-    SIGURG : constant Interrupt_ID :=
-      System.OS_Interface.SIGURG;      --  urgent condition on IO channel
- 
-    SIGPOLL : constant Interrupt_ID :=
-      System.OS_Interface.SIGPOLL;     --  pollable event occurred
- 
-    SIGIO : constant Interrupt_ID :=   --  input/output possible,
-      System.OS_Interface.SIGIO;       --  SIGPOLL alias (Solaris)
- 
-    SIGSTOP : constant Interrupt_ID :=
-      System.OS_Interface.SIGSTOP;     --  stop (cannot be caught or ignored)
- 
-    SIGTSTP : constant Interrupt_ID :=
-      System.OS_Interface.SIGTSTP;     --  user stop requested from tty
- 
-    SIGCONT : constant Interrupt_ID :=
-      System.OS_Interface.SIGCONT;     --  stopped process has been continued
- 
-    SIGTTIN : constant Interrupt_ID :=
-      System.OS_Interface.SIGTTIN;     --  background tty read attempted
- 
-    SIGTTOU : constant Interrupt_ID :=
-      System.OS_Interface.SIGTTOU;     --  background tty write attempted
- 
-    SIGVTALRM : constant Interrupt_ID :=
-      System.OS_Interface.SIGVTALRM;   --  virtual timer expired
- 
-    SIGPROF : constant Interrupt_ID :=
-      System.OS_Interface.SIGPROF;     --  profiling timer expired
- 
-    SIGXCPU : constant Interrupt_ID :=
-      System.OS_Interface.SIGXCPU;     --  CPU time limit exceeded
- 
-    SIGXFSZ : constant Interrupt_ID :=
-      System.OS_Interface.SIGXFSZ;     --  filesize limit exceeded
- 
- end Ada.Interrupts.Names;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/4rintnam.ads gcc-4.0.0/gcc/ada/4rintnam.ads
*** gcc-3.4.3/gcc/ada/4rintnam.ads	Thu Apr 24 17:53:50 2003
--- gcc-4.0.0/gcc/ada/4rintnam.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,116 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   A D A . I N T E R R U P T S . N A M E S                --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --             Copyright (C) 1991-2002 Free Software Foundation, Inc.       --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- -- The GNARL files that were developed for RTEMS are maintained by  On-Line --
- -- Applications Research Corporation (http://www.oarcorp.com)  in  coopera- --
- -- tion with Ada Core Technologies Inc. and Florida State University.       --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a RTEMS version of this package
- --
- --  The following signals are reserved by the run time:
- --
- --  SIGFPE, SIGILL, SIGSEGV, SIGBUS, SIGTRAP, SIGABRT, SIGINT,
- --  SIGALRM, SIGEMT, SIGKILL
- --
- --  The pragma Unreserve_All_Interrupts affects the following signal(s):
- --
- --  SIGINT: made available for Ada handlers
- 
- --  This target-dependent package spec contains names of interrupts
- --  supported by the local system.
- 
- with System.OS_Interface;
- --  used for names of interrupts
- 
- package Ada.Interrupts.Names is
- 
-    --  Beware that the mapping of names to signals may be
-    --  many-to-one.  There may be aliases.  Also, for all
-    --  signal names that are not supported on the current system
-    --  the value of the corresponding constant will be zero.
- 
-    SIGHUP : constant Interrupt_ID :=
-      System.OS_Interface.SIGHUP;      --  hangup
- 
-    SIGINT : constant Interrupt_ID :=
-      System.OS_Interface.SIGINT;      --  interrupt (rubout)
- 
-    SIGQUIT : constant Interrupt_ID :=
-      System.OS_Interface.SIGQUIT;     --  quit (ASCD FS)
- 
-    SIGILL : constant Interrupt_ID :=
-      System.OS_Interface.SIGILL;      --  illegal instruction (not reset)
- 
-    SIGTRAP : constant Interrupt_ID :=
-      System.OS_Interface.SIGTRAP;     --  trace trap (not reset)
- 
-    SIGIOT : constant Interrupt_ID :=
-      System.OS_Interface.SIGIOT;      --  IOT instruction
- 
-    SIGABRT : constant Interrupt_ID := --  used by abort,
-      System.OS_Interface.SIGABRT;     --  replace SIGIOT in the  future
- 
-    SIGEMT : constant Interrupt_ID :=
-      System.OS_Interface.SIGEMT;      --  EMT instruction
- 
-    SIGFPE : constant Interrupt_ID :=
-      System.OS_Interface.SIGFPE;      --  floating point exception
- 
-    SIGKILL : constant Interrupt_ID :=
-      System.OS_Interface.SIGKILL;     --  kill (cannot be caught or ignored)
- 
-    SIGBUS : constant Interrupt_ID :=
-      System.OS_Interface.SIGBUS;      --  bus error
- 
-    SIGSEGV : constant Interrupt_ID :=
-      System.OS_Interface.SIGSEGV;     --  segmentation violation
- 
-    SIGSYS : constant Interrupt_ID :=
-      System.OS_Interface.SIGSYS;      --  bad argument to system call
- 
-    SIGPIPE : constant Interrupt_ID := --  write on a pipe with
-      System.OS_Interface.SIGPIPE;     --  no one to read it
- 
-    SIGALRM : constant Interrupt_ID :=
-      System.OS_Interface.SIGALRM;     --  alarm clock
- 
-    SIGTERM : constant Interrupt_ID :=
-      System.OS_Interface.SIGTERM;     --  software termination signal from kill
- 
-    SIGUSR1 : constant Interrupt_ID :=
-      System.OS_Interface.SIGUSR1;     --  user defined signal 1
- 
-    SIGUSR2 : constant Interrupt_ID :=
-      System.OS_Interface.SIGUSR2;     --  user defined signal 2
- 
- end Ada.Interrupts.Names;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/4sintnam.ads gcc-4.0.0/gcc/ada/4sintnam.ads
*** gcc-3.4.3/gcc/ada/4sintnam.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/4sintnam.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,179 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   A D A . I N T E R R U P T S . N A M E S                --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --             Copyright (C) 1991-2002 Free Software Foundation, Inc.       --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a Solaris version of this package.
- --
- --  The following signals are reserved by the run time (native threads):
- --
- --  SIGFPE, SIGILL, SIGSEGV, SIGBUS, SIGTRAP, SIGABRT, SIGINT,
- --  SIGLWP, SIGWAITING, SIGCANCEL, SIGSTOP, SIGKILL
- --
- --  The following signals are reserved by the run time (FSU threads):
- --
- --  SIGFPE, SIGILL, SIGSEGV, SIGBUS, SIGTRAP, SIGTERM, SIGABRT, SIGINT,
- --  SIGLWP, SIGALRM, SIGVTALRM, SIGAITING, SIGSTOP, SIGKILL
- --
- --  The pragma Unreserve_All_Interrupts affects the following signal(s):
- --
- --  SIGINT: made available for Ada handlers
- 
- with System.OS_Interface;
- --  used for names of interrupts
- 
- package Ada.Interrupts.Names is
- 
-    --  Beware that the mapping of names to signals may be
-    --  many-to-one.  There may be aliases.  Also, for all
-    --  signal names that are not supported on the current system
-    --  the value of the corresponding constant will be zero.
- 
-    SIGHUP : constant Interrupt_ID :=
-      System.OS_Interface.SIGHUP;      --  hangup
- 
-    SIGINT : constant Interrupt_ID :=
-      System.OS_Interface.SIGINT;      --  interrupt (rubout)
- 
-    SIGQUIT : constant Interrupt_ID :=
-      System.OS_Interface.SIGQUIT;     --  quit (ASCD FS)
- 
-    SIGILL : constant Interrupt_ID :=
-      System.OS_Interface.SIGILL;      --  illegal instruction (not reset)
- 
-    SIGTRAP : constant Interrupt_ID :=
-      System.OS_Interface.SIGTRAP;     --  trace trap (not reset)
- 
-    SIGIOT : constant Interrupt_ID :=
-      System.OS_Interface.SIGIOT;      --  IOT instruction
- 
-    SIGABRT : constant Interrupt_ID := --  used by abort,
-      System.OS_Interface.SIGABRT;     --  replace SIGIOT in the  future
- 
-    SIGEMT : constant Interrupt_ID :=
-      System.OS_Interface.SIGEMT;      --  EMT instruction
- 
-    SIGFPE : constant Interrupt_ID :=
-      System.OS_Interface.SIGFPE;      --  floating point exception
- 
-    SIGKILL : constant Interrupt_ID :=
-      System.OS_Interface.SIGKILL;     --  kill (cannot be caught or ignored)
- 
-    SIGBUS : constant Interrupt_ID :=
-      System.OS_Interface.SIGBUS;      --  bus error
- 
-    SIGSEGV : constant Interrupt_ID :=
-      System.OS_Interface.SIGSEGV;     --  segmentation violation
- 
-    SIGSYS : constant Interrupt_ID :=
-      System.OS_Interface.SIGSYS;      --  bad argument to system call
- 
-    SIGPIPE : constant Interrupt_ID := --  write on a pipe with
-      System.OS_Interface.SIGPIPE;     --  no one to read it
- 
-    SIGALRM : constant Interrupt_ID :=
-      System.OS_Interface.SIGALRM;     --  alarm clock
- 
-    SIGTERM : constant Interrupt_ID :=
-      System.OS_Interface.SIGTERM;     --  software termination signal from kill
- 
-    SIGUSR1 : constant Interrupt_ID :=
-      System.OS_Interface.SIGUSR1;     --  user defined signal 1
- 
-    SIGUSR2 : constant Interrupt_ID :=
-      System.OS_Interface.SIGUSR2;     --  user defined signal 2
- 
-    SIGCLD : constant Interrupt_ID :=
-      System.OS_Interface.SIGCLD;      --  child status change
- 
-    SIGCHLD : constant Interrupt_ID :=
-      System.OS_Interface.SIGCHLD;     --  4.3BSD's/POSIX name for SIGCLD
- 
-    SIGWINCH : constant Interrupt_ID :=
-      System.OS_Interface.SIGWINCH;    --  window size change
- 
-    SIGURG : constant Interrupt_ID :=
-      System.OS_Interface.SIGURG;      --  urgent condition on IO channel
- 
-    SIGPOLL : constant Interrupt_ID :=
-      System.OS_Interface.SIGPOLL;     --  pollable event occurred
- 
-    SIGIO : constant Interrupt_ID :=   --  input/output possible,
-      System.OS_Interface.SIGIO;       --  SIGPOLL alias (Solaris)
- 
-    SIGSTOP : constant Interrupt_ID :=
-      System.OS_Interface.SIGSTOP;     --  stop (cannot be caught or ignored)
- 
-    SIGTSTP : constant Interrupt_ID :=
-      System.OS_Interface.SIGTSTP;     --  user stop requested from tty
- 
-    SIGCONT : constant Interrupt_ID :=
-      System.OS_Interface.SIGCONT;     --  stopped process has been continued
- 
-    SIGTTIN : constant Interrupt_ID :=
-      System.OS_Interface.SIGTTIN;     --  background tty read attempted
- 
-    SIGTTOU : constant Interrupt_ID :=
-      System.OS_Interface.SIGTTOU;     --  background tty write attempted
- 
-    SIGVTALRM : constant Interrupt_ID :=
-      System.OS_Interface.SIGVTALRM;   --  virtual timer expired
- 
-    SIGPROF : constant Interrupt_ID :=
-      System.OS_Interface.SIGPROF;     --  profiling timer expired
- 
-    SIGXCPU : constant Interrupt_ID :=
-      System.OS_Interface.SIGXCPU;     --  CPU time limit exceeded
- 
-    SIGXFSZ : constant Interrupt_ID :=
-      System.OS_Interface.SIGXFSZ;     --  filesize limit exceeded
- 
-    SIGPWR : constant Interrupt_ID :=
-      System.OS_Interface.SIGPWR;      --  power-fail restart
- 
-    SIGWAITING : constant Interrupt_ID :=
-      System.OS_Interface.SIGWAITING;  --  process's lwps blocked (Solaris)
- 
-    SIGLWP : constant Interrupt_ID :=
-      System.OS_Interface.SIGLWP;      --  used by thread library (Solaris)
- 
-    SIGFREEZE : constant Interrupt_ID :=
-      System.OS_Interface.SIGFREEZE;   --  used by CPR (Solaris)
- 
- --  what is CPR????
- 
-    SIGTHAW : constant Interrupt_ID :=
-      System.OS_Interface.SIGTHAW;     --  used by CPR (Solaris)
- 
-    SIGCANCEL : constant Interrupt_ID :=
-      System.OS_Interface.SIGCANCEL;     --  used for thread cancel (Solaris)
- 
- end Ada.Interrupts.Names;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/4vcaldel.adb gcc-4.0.0/gcc/ada/4vcaldel.adb
*** gcc-3.4.3/gcc/ada/4vcaldel.adb	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/4vcaldel.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,99 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   A D A . C A L E N D A R . D E L A Y S                  --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --             Copyright (C) 1991-1994, Florida State University            --
- --             Copyright (C) 1995-2003, Ada Core Technologies               --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the Alpha/VMS version.
- 
- with System.OS_Primitives;
- --  Used for Max_Sensible_Delay
- 
- with System.Soft_Links;
- --  Used for Timed_Delay
- 
- package body Ada.Calendar.Delays is
- 
-    package OSP renames System.OS_Primitives;
-    package TSL renames System.Soft_Links;
- 
-    use type TSL.Timed_Delay_Call;
- 
-    ---------------
-    -- Delay_For --
-    ---------------
- 
-    procedure Delay_For (D : Duration) is
-    begin
-       TSL.Timed_Delay.all
-         (Duration'Min (D, OSP.Max_Sensible_Delay), OSP.Relative);
-    end Delay_For;
- 
-    -----------------
-    -- Delay_Until --
-    -----------------
- 
-    procedure Delay_Until (T : Time) is
-    begin
-       TSL.Timed_Delay.all (To_Duration (T), OSP.Absolute_Calendar);
-    end Delay_Until;
- 
-    -----------------
-    -- To_Duration --
-    -----------------
- 
-    function To_Duration (T : Time) return Duration is
-    begin
-       return OSP.To_Duration (OSP.OS_Time (T), OSP.Absolute_Calendar);
-    end To_Duration;
- 
-    --------------------
-    -- Timed_Delay_NT --
-    --------------------
- 
-    procedure Timed_Delay_NT (Time : Duration; Mode : Integer);
- 
-    procedure Timed_Delay_NT (Time : Duration; Mode : Integer) is
-    begin
-       OSP.Timed_Delay (Time, Mode);
-    end Timed_Delay_NT;
- 
- begin
-    --  Set up the Timed_Delay soft link to the non tasking version if it has
-    --  not been already set.
-    --  If tasking is present, Timed_Delay has already set this soft link, or
-    --  this will be overriden during the elaboration of
-    --  System.Tasking.Initialization
- 
-    if TSL.Timed_Delay = null then
-       TSL.Timed_Delay := Timed_Delay_NT'Access;
-    end if;
- end Ada.Calendar.Delays;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/4vcalend.adb gcc-4.0.0/gcc/ada/4vcalend.adb
*** gcc-3.4.3/gcc/ada/4vcalend.adb	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/4vcalend.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,361 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                        GNAT RUN-TIME COMPONENTS                          --
- --                                                                          --
- --                         A D A . C A L E N D A R                          --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --            Copyright (C) 1992-2003 Free Software Foundation, Inc.        --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the Alpha/VMS version.
- 
- with System.Aux_DEC; use System.Aux_DEC;
- 
- package body Ada.Calendar is
- 
-    ------------------------------
-    -- Use of Pragma Unsuppress --
-    ------------------------------
- 
-    --  This implementation of Calendar takes advantage of the permission in
-    --  Ada 95 of using arithmetic overflow checks to check for out of bounds
-    --  time values. This means that we must catch the constraint error that
-    --  results from arithmetic overflow, so we use pragma Unsuppress to make
-    --  sure that overflow is enabled, using software overflow checking if
-    --  necessary. That way, compiling Calendar with options to suppress this
-    --  checking will not affect its correctness.
- 
-    ------------------------
-    -- Local Declarations --
-    ------------------------
- 
-    Ada_Year_Min : constant := 1901;
-    Ada_Year_Max : constant := 2099;
- 
-    --  Some basic constants used throughout
- 
-    function To_Relative_Time (D : Duration) return Time;
- 
-    function To_Relative_Time (D : Duration) return Time is
-    begin
-       return Time (Long_Integer'Integer_Value (D) / 100);
-    end To_Relative_Time;
- 
-    ---------
-    -- "+" --
-    ---------
- 
-    function "+" (Left : Time; Right : Duration) return Time is
-       pragma Unsuppress (Overflow_Check);
-    begin
-       return (Left + To_Relative_Time (Right));
- 
-    exception
-       when Constraint_Error =>
-          raise Time_Error;
-    end "+";
- 
-    function "+" (Left : Duration; Right : Time) return Time is
-       pragma Unsuppress (Overflow_Check);
-    begin
-       return (To_Relative_Time (Left) + Right);
- 
-    exception
-       when Constraint_Error =>
-          raise Time_Error;
-    end "+";
- 
-    ---------
-    -- "-" --
-    ---------
- 
-    function "-" (Left : Time; Right : Duration)  return Time is
-       pragma Unsuppress (Overflow_Check);
-    begin
-       return Left - To_Relative_Time (Right);
- 
-    exception
-       when Constraint_Error =>
-          raise Time_Error;
-    end "-";
- 
-    function "-" (Left : Time; Right : Time) return Duration is
-       pragma Unsuppress (Overflow_Check);
-    begin
-       return Duration'Fixed_Value
-         ((Long_Integer (Left) - Long_Integer (Right)) * 100);
- 
-    exception
-       when Constraint_Error =>
-          raise Time_Error;
-    end "-";
- 
-    ---------
-    -- "<" --
-    ---------
- 
-    function "<" (Left, Right : Time) return Boolean is
-    begin
-       return Long_Integer (Left) < Long_Integer (Right);
-    end "<";
- 
-    ----------
-    -- "<=" --
-    ----------
- 
-    function "<=" (Left, Right : Time) return Boolean is
-    begin
-       return Long_Integer (Left) <= Long_Integer (Right);
-    end "<=";
- 
-    ---------
-    -- ">" --
-    ---------
- 
-    function ">" (Left, Right : Time) return Boolean is
-    begin
-       return Long_Integer (Left) > Long_Integer (Right);
-    end ">";
- 
-    ----------
-    -- ">=" --
-    ----------
- 
-    function ">=" (Left, Right : Time) return Boolean is
-    begin
-       return Long_Integer (Left) >= Long_Integer (Right);
-    end ">=";
- 
-    -----------
-    -- Clock --
-    -----------
- 
-    --  The Ada.Calendar.Clock function gets the time.
-    --  Note that on other targets a soft-link is used to get a different clock
-    --  depending whether tasking is used or not. On VMS this isn't needed
-    --  since all clock calls end up using SYS$GETTIM, so call the
-    --  OS_Primitives version for efficiency.
- 
-    function Clock return Time is
-    begin
-       return Time (OSP.OS_Clock);
-    end Clock;
- 
-    ---------
-    -- Day --
-    ---------
- 
-    function Day (Date : Time) return Day_Number is
-       DY : Year_Number;
-       DM : Month_Number;
-       DD : Day_Number;
-       DS : Day_Duration;
- 
-    begin
-       Split (Date, DY, DM, DD, DS);
-       return DD;
-    end Day;
- 
-    -----------
-    -- Month --
-    -----------
- 
-    function Month (Date : Time) return Month_Number is
-       DY : Year_Number;
-       DM : Month_Number;
-       DD : Day_Number;
-       DS : Day_Duration;
- 
-    begin
-       Split (Date, DY, DM, DD, DS);
-       return DM;
-    end Month;
- 
-    -------------
-    -- Seconds --
-    -------------
- 
-    function Seconds (Date : Time) return Day_Duration is
-       DY : Year_Number;
-       DM : Month_Number;
-       DD : Day_Number;
-       DS : Day_Duration;
- 
-    begin
-       Split (Date, DY, DM, DD, DS);
-       return DS;
-    end Seconds;
- 
-    -----------
-    -- Split --
-    -----------
- 
-    procedure Split
-      (Date    : Time;
-       Year    : out Year_Number;
-       Month   : out Month_Number;
-       Day     : out Day_Number;
-       Seconds : out Day_Duration)
-    is
-       procedure Numtim (
-         Status : out Unsigned_Longword;
-         Timbuf : out Unsigned_Word_Array;
-         Timadr : in  Time);
- 
-       pragma Interface (External, Numtim);
- 
-       pragma Import_Valued_Procedure (Numtim, "SYS$NUMTIM",
-         (Unsigned_Longword, Unsigned_Word_Array, Time),
-         (Value, Reference, Reference));
- 
-       Status   : Unsigned_Longword;
-       Timbuf   : Unsigned_Word_Array (1 .. 7);
- 
-       Subsecs   : constant Time := Date mod 10_000_000;
-       Date_Secs : constant Time := Date - Subsecs;
- 
-    begin
-       Numtim (Status, Timbuf, Date_Secs);
- 
-       if Status mod 2 /= 1
-         or else Timbuf (1) not in Ada_Year_Min .. Ada_Year_Max
-       then
-          raise Time_Error;
-       end if;
- 
-       Seconds := Day_Duration (Timbuf (6)
-                    + 60 * (Timbuf (5) + 60 * Timbuf (4)))
-                    + Duration (Subsecs) / 10_000_000.0;
- 
-       Day   := Integer (Timbuf (3));
-       Month := Integer (Timbuf (2));
-       Year  := Integer (Timbuf (1));
-    end Split;
- 
-    -------------
-    -- Time_Of --
-    -------------
- 
-    function Time_Of
-      (Year    : Year_Number;
-       Month   : Month_Number;
-       Day     : Day_Number;
-       Seconds : Day_Duration := 0.0)
-       return    Time
-    is
- 
-       procedure Cvt_Vectim (
-         Status         : out Unsigned_Longword;
-         Input_Time     : in  Unsigned_Word_Array;
-         Resultant_Time : out Time);
- 
-       pragma Interface (External, Cvt_Vectim);
- 
-       pragma Import_Valued_Procedure (Cvt_Vectim, "LIB$CVT_VECTIM",
-         (Unsigned_Longword, Unsigned_Word_Array, Time),
-         (Value, Reference, Reference));
- 
-       Status      : Unsigned_Longword;
-       Timbuf      : Unsigned_Word_Array (1 .. 7);
-       Date        : Time;
-       Int_Secs    : Integer;
-       Day_Hack    : Boolean := False;
-       Subsecs     : Day_Duration;
- 
-    begin
-       --  The following checks are redundant with respect to the constraint
-       --  error checks that should normally be made on parameters, but we
-       --  decide to raise Constraint_Error in any case if bad values come
-       --  in (as a result of checks being off in the caller, or for other
-       --  erroneous or bounded error cases).
- 
-       if        not Year   'Valid
-         or else not Month  'Valid
-         or else not Day    'Valid
-         or else not Seconds'Valid
-       then
-          raise Constraint_Error;
-       end if;
- 
-       --  Truncate seconds value by subtracting 0.5 and rounding,
-       --  but be careful with 0.0 since that will give -1.0 unless
-       --  it is treated specially.
- 
-       if Seconds > 0.0 then
-          Int_Secs := Integer (Seconds - 0.5);
-       else
-          Int_Secs := Integer (Seconds);
-       end if;
- 
-       Subsecs := Seconds - Day_Duration (Int_Secs);
- 
-       --  Cvt_Vectim barfs on the largest Day_Duration, so trick it by
-       --  setting it to zero and then adding the difference after conversion.
- 
-       if Int_Secs = 86_400 then
-          Int_Secs := 0;
-          Day_Hack := True;
-       end if;
- 
-       Timbuf (7) := 0;
-       Timbuf (6) := Unsigned_Word (Int_Secs mod 60);
-       Timbuf (5) := Unsigned_Word ((Int_Secs / 60) mod 60);
-       Timbuf (4) := Unsigned_Word (Int_Secs / 3600);
-       Timbuf (3) := Unsigned_Word (Day);
-       Timbuf (2) := Unsigned_Word (Month);
-       Timbuf (1) := Unsigned_Word (Year);
- 
-       Cvt_Vectim (Status, Timbuf, Date);
- 
-       if Status mod 2 /= 1 then
-          raise Time_Error;
-       end if;
- 
-       if Day_Hack then
-          Date := Date + 10_000_000 * 86_400;
-       end if;
- 
-       Date := Date + Time (10_000_000.0 * Subsecs);
-       return Date;
-    end Time_Of;
- 
-    ----------
-    -- Year --
-    ----------
- 
-    function Year (Date : Time) return Year_Number is
-       DY : Year_Number;
-       DM : Month_Number;
-       DD : Day_Number;
-       DS : Day_Duration;
- 
-    begin
-       Split (Date, DY, DM, DD, DS);
-       return DY;
-    end Year;
- 
- end Ada.Calendar;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/4vcalend.ads gcc-4.0.0/gcc/ada/4vcalend.ads
*** gcc-3.4.3/gcc/ada/4vcalend.ads	Thu Apr 24 17:53:51 2003
--- gcc-4.0.0/gcc/ada/4vcalend.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,121 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT RUNTIME COMPONENTS                          --
- --                                                                          --
- --                         A D A . C A L E N D A R                          --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the  contents of the part following the private keyword. --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the Alpha/VMS version.
- 
- with System.OS_Primitives;
- package Ada.Calendar is
- 
-    package OSP renames System.OS_Primitives;
- 
-    type Time is private;
- 
-    --  Declarations representing limits of allowed local time values. Note that
-    --  these do NOT constrain the possible stored values of time which may well
-    --  permit a larger range of times (this is explicitly allowed in Ada 95).
- 
-    subtype Year_Number  is Integer range 1901 .. 2099;
-    subtype Month_Number is Integer range 1 .. 12;
-    subtype Day_Number   is Integer range 1 .. 31;
- 
-    subtype Day_Duration is Duration range 0.0 .. 86_400.0;
- 
-    function Clock return Time;
- 
-    function Year    (Date : Time) return Year_Number;
-    function Month   (Date : Time) return Month_Number;
-    function Day     (Date : Time) return Day_Number;
-    function Seconds (Date : Time) return Day_Duration;
- 
-    procedure Split
-      (Date    : Time;
-       Year    : out Year_Number;
-       Month   : out Month_Number;
-       Day     : out Day_Number;
-       Seconds : out Day_Duration);
- 
-    function Time_Of
-      (Year    : Year_Number;
-       Month   : Month_Number;
-       Day     : Day_Number;
-       Seconds : Day_Duration := 0.0)
-       return    Time;
- 
-    function "+" (Left : Time;     Right : Duration) return Time;
-    function "+" (Left : Duration; Right : Time)     return Time;
-    function "-" (Left : Time;     Right : Duration) return Time;
-    function "-" (Left : Time;     Right : Time)     return Duration;
- 
-    function "<"  (Left, Right : Time) return Boolean;
-    function "<=" (Left, Right : Time) return Boolean;
-    function ">"  (Left, Right : Time) return Boolean;
-    function ">=" (Left, Right : Time) return Boolean;
- 
-    Time_Error : exception;
- 
- private
- 
-    pragma Inline (Clock);
- 
-    pragma Inline (Year);
-    pragma Inline (Month);
-    pragma Inline (Day);
- 
-    pragma Inline ("+");
-    pragma Inline ("-");
- 
-    pragma Inline ("<");
-    pragma Inline ("<=");
-    pragma Inline (">");
-    pragma Inline (">=");
- 
-    --  Time is represented as the number of 100-nanosecond (ns) units offset
-    --  from the system base date and time, which is 00:00 o'clock,
-    --  November 17, 1858 (the Smithsonian base date and time for the
-    --  astronomic calendar).
- 
-    --  The time value stored is typically a GMT value, as provided in standard
-    --  Unix environments. If this is the case then Split and Time_Of perform
-    --  required conversions to and from local times.
- 
-    type Time is new OSP.OS_Time;
- 
-    --  Notwithstanding this definition, Time is not quite the same as OS_Time.
-    --  Relative Time is positive, whereas relative OS_Time is negative,
-    --  but this declaration makes for easier conversion.
- 
- end Ada.Calendar;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/4vintnam.ads gcc-4.0.0/gcc/ada/4vintnam.ads
*** gcc-3.4.3/gcc/ada/4vintnam.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/4vintnam.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,77 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   A D A . I N T E R R U P T S . N A M E S                --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --          Copyright (C) 1991-2002 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a OpenVMS/Alpha version of this package.
- --
- --  This target-dependent package spec contains names of interrupts
- --  supported by the local system.
- 
- with System.OS_Interface;
- package Ada.Interrupts.Names is
- 
-    package OS renames System.OS_Interface;
- 
-    Interrupt_ID_0   : constant Interrupt_ID := OS.Interrupt_ID_0;
-    Interrupt_ID_1   : constant Interrupt_ID := OS.Interrupt_ID_1;
-    Interrupt_ID_2   : constant Interrupt_ID := OS.Interrupt_ID_2;
-    Interrupt_ID_3   : constant Interrupt_ID := OS.Interrupt_ID_3;
-    Interrupt_ID_4   : constant Interrupt_ID := OS.Interrupt_ID_4;
-    Interrupt_ID_5   : constant Interrupt_ID := OS.Interrupt_ID_5;
-    Interrupt_ID_6   : constant Interrupt_ID := OS.Interrupt_ID_6;
-    Interrupt_ID_7   : constant Interrupt_ID := OS.Interrupt_ID_7;
-    Interrupt_ID_8   : constant Interrupt_ID := OS.Interrupt_ID_8;
-    Interrupt_ID_9   : constant Interrupt_ID := OS.Interrupt_ID_9;
-    Interrupt_ID_10  : constant Interrupt_ID := OS.Interrupt_ID_10;
-    Interrupt_ID_11  : constant Interrupt_ID := OS.Interrupt_ID_11;
-    Interrupt_ID_12  : constant Interrupt_ID := OS.Interrupt_ID_12;
-    Interrupt_ID_13  : constant Interrupt_ID := OS.Interrupt_ID_13;
-    Interrupt_ID_14  : constant Interrupt_ID := OS.Interrupt_ID_14;
-    Interrupt_ID_15  : constant Interrupt_ID := OS.Interrupt_ID_15;
-    Interrupt_ID_16  : constant Interrupt_ID := OS.Interrupt_ID_16;
-    Interrupt_ID_17  : constant Interrupt_ID := OS.Interrupt_ID_17;
-    Interrupt_ID_18  : constant Interrupt_ID := OS.Interrupt_ID_18;
-    Interrupt_ID_19  : constant Interrupt_ID := OS.Interrupt_ID_19;
-    Interrupt_ID_20  : constant Interrupt_ID := OS.Interrupt_ID_20;
-    Interrupt_ID_21  : constant Interrupt_ID := OS.Interrupt_ID_21;
-    Interrupt_ID_22  : constant Interrupt_ID := OS.Interrupt_ID_22;
-    Interrupt_ID_23  : constant Interrupt_ID := OS.Interrupt_ID_23;
-    Interrupt_ID_24  : constant Interrupt_ID := OS.Interrupt_ID_24;
-    Interrupt_ID_25  : constant Interrupt_ID := OS.Interrupt_ID_25;
-    Interrupt_ID_26  : constant Interrupt_ID := OS.Interrupt_ID_26;
-    Interrupt_ID_27  : constant Interrupt_ID := OS.Interrupt_ID_27;
-    Interrupt_ID_28  : constant Interrupt_ID := OS.Interrupt_ID_28;
-    Interrupt_ID_29  : constant Interrupt_ID := OS.Interrupt_ID_29;
-    Interrupt_ID_30  : constant Interrupt_ID := OS.Interrupt_ID_30;
-    Interrupt_ID_31  : constant Interrupt_ID := OS.Interrupt_ID_31;
- 
- end Ada.Interrupts.Names;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/4wcalend.adb gcc-4.0.0/gcc/ada/4wcalend.adb
*** gcc-3.4.3/gcc/ada/4wcalend.adb	Thu Apr 24 17:53:51 2003
--- gcc-4.0.0/gcc/ada/4wcalend.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,394 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                        GNAT RUN-TIME COMPONENTS                          --
- --                                                                          --
- --                         A D A . C A L E N D A R                          --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --            Copyright (C) 1997-2002 Free Software Foundation, Inc.        --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the Windows NT/95 version.
- 
- with System.OS_Primitives;
- --  used for Clock
- 
- with System.OS_Interface;
- 
- package body Ada.Calendar is
- 
-    use System.OS_Interface;
- 
-    ------------------------------
-    -- Use of Pragma Unsuppress --
-    ------------------------------
- 
-    --  This implementation of Calendar takes advantage of the permission in
-    --  Ada 95 of using arithmetic overflow checks to check for out of bounds
-    --  time values. This means that we must catch the constraint error that
-    --  results from arithmetic overflow, so we use pragma Unsuppress to make
-    --  sure that overflow is enabled, using software overflow checking if
-    --  necessary. That way, compiling Calendar with options to suppress this
-    --  checking will not affect its correctness.
- 
-    ------------------------
-    -- Local Declarations --
-    ------------------------
- 
-    Ada_Year_Min : constant := 1901;
-    Ada_Year_Max : constant := 2099;
- 
-    --  Win32 time constants
- 
-    epoch_1970     : constant := 16#19D_B1DE_D53E_8000#; -- win32 UTC epoch
-    system_time_ns : constant := 100;                    -- 100 ns per tick
-    Sec_Unit       : constant := 10#1#E9;
- 
-    ---------
-    -- "+" --
-    ---------
- 
-    function "+" (Left : Time; Right : Duration) return Time is
-       pragma Unsuppress (Overflow_Check);
-    begin
-       return (Left + Time (Right));
- 
-    exception
-       when Constraint_Error =>
-          raise Time_Error;
-    end "+";
- 
-    function "+" (Left : Duration; Right : Time) return Time is
-       pragma Unsuppress (Overflow_Check);
-    begin
-       return (Time (Left) + Right);
- 
-    exception
-       when Constraint_Error =>
-          raise Time_Error;
-    end "+";
- 
-    ---------
-    -- "-" --
-    ---------
- 
-    function "-" (Left : Time; Right : Duration)  return Time is
-       pragma Unsuppress (Overflow_Check);
-    begin
-       return Left - Time (Right);
- 
-    exception
-       when Constraint_Error =>
-          raise Time_Error;
-    end "-";
- 
-    function "-" (Left : Time; Right : Time) return Duration is
-       pragma Unsuppress (Overflow_Check);
-    begin
-       return Duration (Left) - Duration (Right);
- 
-    exception
-       when Constraint_Error =>
-          raise Time_Error;
-    end "-";
- 
-    ---------
-    -- "<" --
-    ---------
- 
-    function "<" (Left, Right : Time) return Boolean is
-    begin
-       return Duration (Left) < Duration (Right);
-    end "<";
- 
-    ----------
-    -- "<=" --
-    ----------
- 
-    function "<=" (Left, Right : Time) return Boolean is
-    begin
-       return Duration (Left) <= Duration (Right);
-    end "<=";
- 
-    ---------
-    -- ">" --
-    ---------
- 
-    function ">" (Left, Right : Time) return Boolean is
-    begin
-       return Duration (Left) > Duration (Right);
-    end ">";
- 
-    ----------
-    -- ">=" --
-    ----------
- 
-    function ">=" (Left, Right : Time) return Boolean is
-    begin
-       return Duration (Left) >= Duration (Right);
-    end ">=";
- 
-    -----------
-    -- Clock --
-    -----------
- 
-    --  The Ada.Calendar.Clock function gets the time from the soft links
-    --  interface which will call the appropriate function depending wether
-    --  tasking is involved or not.
- 
-    function Clock return Time is
-    begin
-       return Time (System.OS_Primitives.Clock);
-    end Clock;
- 
-    ---------
-    -- Day --
-    ---------
- 
-    function Day (Date : Time) return Day_Number is
-       DY : Year_Number;
-       DM : Month_Number;
-       DD : Day_Number;
-       DS : Day_Duration;
- 
-    begin
-       Split (Date, DY, DM, DD, DS);
-       return DD;
-    end Day;
- 
-    -----------
-    -- Month --
-    -----------
- 
-    function Month (Date : Time) return Month_Number is
-       DY : Year_Number;
-       DM : Month_Number;
-       DD : Day_Number;
-       DS : Day_Duration;
- 
-    begin
-       Split (Date, DY, DM, DD, DS);
-       return DM;
-    end Month;
- 
-    -------------
-    -- Seconds --
-    -------------
- 
-    function Seconds (Date : Time) return Day_Duration is
-       DY : Year_Number;
-       DM : Month_Number;
-       DD : Day_Number;
-       DS : Day_Duration;
- 
-    begin
-       Split (Date, DY, DM, DD, DS);
-       return DS;
-    end Seconds;
- 
-    -----------
-    -- Split --
-    -----------
- 
-    procedure Split
-      (Date    : Time;
-       Year    : out Year_Number;
-       Month   : out Month_Number;
-       Day     : out Day_Number;
-       Seconds : out Day_Duration)
-    is
- 
-       Date_Int    : aliased Long_Long_Integer;
-       Date_Loc    : aliased Long_Long_Integer;
-       Timbuf      : aliased SYSTEMTIME;
-       Int_Date    : Long_Long_Integer;
-       Sub_Seconds : Duration;
- 
-    begin
-       --  We take the sub-seconds (decimal part) of Date and this is added
-       --  to compute the Seconds. This way we keep the precision of the
-       --  high-precision clock that was lost with the Win32 API calls
-       --  below.
- 
-       if Date < 0.0 then
- 
-          --  this is a Date before Epoch (January 1st, 1970)
- 
-          Sub_Seconds := Duration (Date) -
-            Duration (Long_Long_Integer (Date + Duration'(0.5)));
- 
-          Int_Date := Long_Long_Integer (Date - Sub_Seconds);
- 
-          --  For Date = -86400.1 we are 2 days before Epoch at 0.1 seconds
-          --  from day 1 before Epoch. It means that it is 23h 59m 59.9s.
-          --  here we adjust for that.
- 
-          if Sub_Seconds < 0.0 then
-             Int_Date    := Int_Date - 1;
-             Sub_Seconds := 1.0 + Sub_Seconds;
-          end if;
- 
-       else
- 
-          --  this is a Date after Epoch (January 1st, 1970)
- 
-          Sub_Seconds := Duration (Date) -
-            Duration (Long_Long_Integer (Date - Duration'(0.5)));
- 
-          Int_Date := Long_Long_Integer (Date - Sub_Seconds);
- 
-       end if;
- 
-       --  Date_Int is the number of seconds from Epoch.
- 
-       Date_Int := Long_Long_Integer
-         (Int_Date * Sec_Unit / system_time_ns) + epoch_1970;
- 
-       if not FileTimeToLocalFileTime (Date_Int'Access, Date_Loc'Access) then
-          raise Time_Error;
-       end if;
- 
-       if not FileTimeToSystemTime (Date_Loc'Access, Timbuf'Access) then
-          raise Time_Error;
-       end if;
- 
-       if Timbuf.wYear not in Ada_Year_Min .. Ada_Year_Max then
-          raise Time_Error;
-       end if;
- 
-       Seconds :=
-         Duration (Timbuf.wHour) * 3_600.0 +
-         Duration (Timbuf.wMinute) * 60.0 +
-         Duration (Timbuf.wSecond) +
-         Sub_Seconds;
- 
-       Day       := Integer (Timbuf.wDay);
-       Month     := Integer (Timbuf.wMonth);
-       Year      := Integer (Timbuf.wYear);
-    end Split;
- 
-    -------------
-    -- Time_Of --
-    -------------
- 
-    function Time_Of
-      (Year    : Year_Number;
-       Month   : Month_Number;
-       Day     : Day_Number;
-       Seconds : Day_Duration := 0.0)
-       return    Time
-    is
- 
-       Timbuf      : aliased SYSTEMTIME;
-       Now         : aliased Long_Long_Integer;
-       Loc         : aliased Long_Long_Integer;
-       Int_Secs    : Integer;
-       Secs        : Integer;
-       Add_One_Day : Boolean := False;
-       Date        : Time;
- 
-    begin
-       --  The following checks are redundant with respect to the constraint
-       --  error checks that should normally be made on parameters, but we
-       --  decide to raise Constraint_Error in any case if bad values come
-       --  in (as a result of checks being off in the caller, or for other
-       --  erroneous or bounded error cases).
- 
-       if        not Year   'Valid
-         or else not Month  'Valid
-         or else not Day    'Valid
-         or else not Seconds'Valid
-       then
-          raise Constraint_Error;
-       end if;
- 
-       if Seconds = 0.0 then
-          Int_Secs := 0;
-       else
-          Int_Secs := Integer (Seconds - 0.5);
-       end if;
- 
-       --  Timbuf.wMillisec is to keep the msec. We can't use that because the
-       --  high-resolution clock has a precision of 1 Microsecond.
-       --  Anyway the sub-seconds part is not needed to compute the number
-       --  of seconds in UTC.
- 
-       if Int_Secs = 86_400 then
-          Secs := 0;
-          Add_One_Day := True;
-       else
-          Secs := Int_Secs;
-       end if;
- 
-       Timbuf.wMilliseconds := 0;
-       Timbuf.wSecond       := WORD (Secs mod 60);
-       Timbuf.wMinute       := WORD ((Secs / 60) mod 60);
-       Timbuf.wHour         := WORD (Secs / 3600);
-       Timbuf.wDay          := WORD (Day);
-       Timbuf.wMonth        := WORD (Month);
-       Timbuf.wYear         := WORD (Year);
- 
-       if not SystemTimeToFileTime (Timbuf'Access, Loc'Access) then
-          raise Time_Error;
-       end if;
- 
-       if not LocalFileTimeToFileTime (Loc'Access, Now'Access) then
-          raise Time_Error;
-       end if;
- 
-       --  Here we have the UTC now translate UTC to Epoch time (UNIX style
-       --  time based on 1 january 1970) and add there the sub-seconds part.
- 
-       declare
-          Sub_Sec : constant Duration := Seconds - Duration (Int_Secs);
-       begin
-          Date := Time ((Now - epoch_1970) * system_time_ns / Sec_Unit) +
-            Sub_Sec;
-       end;
- 
-       if Add_One_Day then
-          Date := Date + Duration (86400.0);
-       end if;
- 
-       return Date;
-    end Time_Of;
- 
-    ----------
-    -- Year --
-    ----------
- 
-    function Year (Date : Time) return Year_Number is
-       DY : Year_Number;
-       DM : Month_Number;
-       DD : Day_Number;
-       DS : Day_Duration;
- 
-    begin
-       Split (Date, DY, DM, DD, DS);
-       return DY;
-    end Year;
- 
- end Ada.Calendar;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/4wexcpol.adb gcc-4.0.0/gcc/ada/4wexcpol.adb
*** gcc-3.4.3/gcc/ada/4wexcpol.adb	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/4wexcpol.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,58 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   A D A . E X C E P T I O N S . P O L L                  --
- --                (version supporting asynchronous abort test)              --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --          Copyright (C) 1992-2000, Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This version is for targets that do not support per-thread asynchronous
- --  signals. On such targets, we require compilation with the -gnatP switch
- --  that activates periodic polling. Then in the body of the polling routine
- --  we test for asynchronous abort.
- 
- --  NT, OS/2, HPUX/DCE and SCO currently use this file
- 
- with System.Soft_Links;
- --  used for Check_Abort_Status
- 
- separate (Ada.Exceptions)
- 
- ----------
- -- Poll --
- ----------
- 
- procedure Poll is
- begin
-    --  Test for asynchronous abort on each poll
- 
-    if System.Soft_Links.Check_Abort_Status.all /= 0 then
-       raise Standard'Abort_Signal;
-    end if;
- end Poll;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/4wintnam.ads gcc-4.0.0/gcc/ada/4wintnam.ads
*** gcc-3.4.3/gcc/ada/4wintnam.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/4wintnam.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,67 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   A D A . I N T E R R U P T S . N A M E S                --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --          Copyright (C) 1997-2002 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a NT (native) version of this package.
- 
- --  This target-dependent package spec contains names of interrupts
- --  supported by the local system.
- 
- with System.OS_Interface;
- --  used for names of interrupts
- 
- package Ada.Interrupts.Names is
- 
-    --  Beware that the mapping of names to signals may be
-    --  many-to-one.  There may be aliases.  Also, for all
-    --  signal names that are not supported on the current system
-    --  the value of the corresponding constant will be zero.
- 
-    SIGINT : constant Interrupt_ID :=
-      System.OS_Interface.SIGINT;      --  interrupt (rubout)
- 
-    SIGILL : constant Interrupt_ID :=
-      System.OS_Interface.SIGILL;      --  illegal instruction (not reset)
- 
-    SIGABRT : constant Interrupt_ID := --  used by abort,
-      System.OS_Interface.SIGABRT;     --  replace SIGIOT in the  future
- 
-    SIGFPE : constant Interrupt_ID :=
-      System.OS_Interface.SIGFPE;      --  floating point exception
- 
-    SIGSEGV : constant Interrupt_ID :=
-      System.OS_Interface.SIGSEGV;     --  segmentation violation
- 
-    SIGTERM : constant Interrupt_ID :=
-      System.OS_Interface.SIGTERM;     --  software termination signal from kill
- 
- end Ada.Interrupts.Names;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/4zintnam.ads gcc-4.0.0/gcc/ada/4zintnam.ads
*** gcc-3.4.3/gcc/ada/4zintnam.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/4zintnam.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,44 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
- --                                                                          --
- --                   A D A . I N T E R R U P T S . N A M E S                --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --           Copyright (C) 1998-2001 Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the VxWorks version of this package.
- 
- with System.OS_Interface;
- 
- package Ada.Interrupts.Names is
- 
-    subtype Hardware_Interrupts is Interrupt_ID
-      range Interrupt_ID'First .. System.OS_Interface.Max_HW_Interrupt;
-    --  Range of values that can be used for hardware interrupts.
- 
- end Ada.Interrupts.Names;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/4znumaux.ads gcc-4.0.0/gcc/ada/4znumaux.ads
*** gcc-3.4.3/gcc/ada/4znumaux.ads	Mon Jan  5 15:20:42 2004
--- gcc-4.0.0/gcc/ada/4znumaux.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,110 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT RUNTIME COMPONENTS                          --
- --                                                                          --
- --                     A D A . N U M E R I C S . A U X                      --
- --                                                                          --
- --                                 S p e c                                  --
- --                       (C Library Version, VxWorks)                       --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package provides the basic computational interface for the generic
- --  elementary functions. The C library version interfaces with the routines
- --  in the C mathematical library, and is thus quite portable, although it may
- --  not necessarily meet the requirements for accuracy in the numerics annex.
- --  One advantage of using this package is that it will interface directly to
- --  hardware instructions, such as the those provided on the Intel x86.
- 
- --  Note: there are two versions of this package. One using the normal IEEE
- --  64-bit double format (which is this version), and one using 80-bit x86
- --  long double (see file 4onumaux.ads).
- 
- package Ada.Numerics.Aux is
- pragma Pure (Aux);
- 
-    --  This version omits the pragma linker_options ("-lm") since there is
-    --  no libm.a library for VxWorks.
- 
-    type Double is digits 15;
-    --  Type Double is the type used to call the C routines
- 
-    --  We import these functions directly from C. Note that we label them
-    --  all as pure functions, because indeed all of them are in fact pure!
- 
-    function Sin (X : Double) return Double;
-    pragma Import (C, Sin, "sin");
-    pragma Pure_Function (Sin);
- 
-    function Cos (X : Double) return Double;
-    pragma Import (C, Cos, "cos");
-    pragma Pure_Function (Cos);
- 
-    function Tan (X : Double) return Double;
-    pragma Import (C, Tan, "tan");
-    pragma Pure_Function (Tan);
- 
-    function Exp (X : Double) return Double;
-    pragma Import (C, Exp, "exp");
-    pragma Pure_Function (Exp);
- 
-    function Sqrt (X : Double) return Double;
-    pragma Import (C, Sqrt, "sqrt");
-    pragma Pure_Function (Sqrt);
- 
-    function Log (X : Double) return Double;
-    pragma Import (C, Log, "log");
-    pragma Pure_Function (Log);
- 
-    function Acos (X : Double) return Double;
-    pragma Import (C, Acos, "acos");
-    pragma Pure_Function (Acos);
- 
-    function Asin (X : Double) return Double;
-    pragma Import (C, Asin, "asin");
-    pragma Pure_Function (Asin);
- 
-    function Atan (X : Double) return Double;
-    pragma Import (C, Atan, "atan");
-    pragma Pure_Function (Atan);
- 
-    function Sinh (X : Double) return Double;
-    pragma Import (C, Sinh, "sinh");
-    pragma Pure_Function (Sinh);
- 
-    function Cosh (X : Double) return Double;
-    pragma Import (C, Cosh, "cosh");
-    pragma Pure_Function (Cosh);
- 
-    function Tanh (X : Double) return Double;
-    pragma Import (C, Tanh, "tanh");
-    pragma Pure_Function (Tanh);
- 
-    function Pow (X, Y : Double) return Double;
-    pragma Import (C, Pow, "pow");
-    pragma Pure_Function (Pow);
- 
- end Ada.Numerics.Aux;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/4zsytaco.adb gcc-4.0.0/gcc/ada/4zsytaco.adb
*** gcc-3.4.3/gcc/ada/4zsytaco.adb	Mon Jan  5 15:20:42 2004
--- gcc-4.0.0/gcc/ada/4zsytaco.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,147 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT RUNTIME COMPONENTS                          --
- --                                                                          --
- --         A D A . S Y N C H R O N O U S _ T A S K _ C O N T R O L          --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --            Copyright (C) 1992-2004 Free Software Foundation, Inc.        --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- with Interfaces.C;
- 
- package body Ada.Synchronous_Task_Control is
-    use System.OS_Interface;
-    use type Interfaces.C.int;
- 
-    -------------------
-    -- Current_State --
-    -------------------
- 
-    function Current_State (S : Suspension_Object) return Boolean is
-       St     : STATUS;
-       Result : Boolean := False;
- 
-    begin
-       --  Determine state by attempting to take the semaphore with
-       --  a 0 timeout value.  Status = OK indicates the semaphore was
-       --  full, so reset it to the full state.
- 
-       St := semTake (S.Sema, NO_WAIT);
- 
-       --  If we took the semaphore, reset semaphore state to FULL
- 
-       if St = OK then
-          Result := True;
-          St := semGive (S.Sema);
-       end if;
- 
-       return Result;
-    end Current_State;
- 
-    ---------------
-    -- Set_False --
-    ---------------
- 
-    procedure Set_False (S : in out Suspension_Object) is
-       St : STATUS;
- 
-    begin
-       --  Need to get the semaphore into the "empty" state.
-       --  On return, this task will have made the semaphore
-       --  empty (St = OK) or have left it empty.
- 
-       St := semTake (S.Sema, NO_WAIT);
-       pragma Assert (St = OK);
-    end Set_False;
- 
-    --------------
-    -- Set_True --
-    --------------
- 
-    procedure Set_True (S : in out Suspension_Object) is
-       St : STATUS;
-       pragma Unreferenced (St);
-    begin
-       St := semGive (S.Sema);
-    end Set_True;
- 
-    ------------------------
-    -- Suspend_Until_True --
-    ------------------------
- 
-    procedure Suspend_Until_True (S : in out Suspension_Object) is
-       St : STATUS;
- 
-    begin
-       --  Determine whether another task is pending on the suspension
-       --  object. Should never be called from an ISR. Therefore semTake can
-       --  be called on the mutex
- 
-       St := semTake (S.Mutex, NO_WAIT);
- 
-       if St = OK then
- 
-          --  Wait for suspension object
- 
-          St := semTake (S.Sema, WAIT_FOREVER);
-          St := semGive (S.Mutex);
- 
-       else
-          --  Another task is pending on the suspension object
- 
-          raise Program_Error;
-       end if;
-    end Suspend_Until_True;
- 
-    ----------------
-    -- Initialize --
-    ----------------
- 
-    procedure Initialize (S : in out Suspension_Object) is
-    begin
-       S.Sema := semBCreate (SEM_Q_FIFO, SEM_EMPTY);
- 
-       --  Use simpler binary semaphore instead of VxWorks
-       --  mutual exclusion semaphore, because we don't need
-       --  the fancier semantics and their overhead.
- 
-       S.Mutex := semBCreate (SEM_Q_FIFO, SEM_FULL);
-    end Initialize;
- 
-    --------------
-    -- Finalize --
-    --------------
- 
-    procedure Finalize (S : in out Suspension_Object) is
-       St : STATUS;
-       pragma Unreferenced (St);
-    begin
-       St := semDelete (S.Sema);
-       St := semDelete (S.Mutex);
-    end Finalize;
- 
- end Ada.Synchronous_Task_Control;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/4zsytaco.ads gcc-4.0.0/gcc/ada/4zsytaco.ads
*** gcc-3.4.3/gcc/ada/4zsytaco.ads	Thu Apr 24 17:53:51 2003
--- gcc-4.0.0/gcc/ada/4zsytaco.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,68 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT RUN-TIME COMPONENTS                         --
- --                                                                          --
- --         A D A . S Y N C H R O N O U S _ T A S K _ C O N T R O L          --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --          Copyright (C) 1992-2001 Free Software Foundation, Inc.          --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the  contents of the part following the private keyword. --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- with System.OS_Interface;
- with Ada.Finalization;
- package Ada.Synchronous_Task_Control is
- 
-    type Suspension_Object is limited private;
- 
-    procedure Set_True (S : in out Suspension_Object);
- 
-    procedure Set_False (S : in out Suspension_Object);
- 
-    function Current_State (S : Suspension_Object) return Boolean;
- 
-    procedure Suspend_Until_True (S : in out Suspension_Object);
- 
- private
- 
-    procedure Initialize (S : in out Suspension_Object);
- 
-    procedure Finalize (S : in out Suspension_Object);
- 
-    --  Implement with a VxWorks binary semaphore. A second semaphore
-    --  is used to avoid a race condition related to the implementation of
-    --  the STC requirement to raise Program_Error when Suspend_Until_True is
-    --  called with a task already pending on the suspension object
- 
-    type Suspension_Object is new Ada.Finalization.Controlled with record
-       Sema  : System.OS_Interface.SEM_ID;
-       Mutex : System.OS_Interface.SEM_ID;
-    end record;
- 
- end Ada.Synchronous_Task_Control;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/50system.ads gcc-4.0.0/gcc/ada/50system.ads
*** gcc-3.4.3/gcc/ada/50system.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/50system.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,163 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                        GNAT RUN-TIME COMPONENTS                          --
- --                                                                          --
- --                               S Y S T E M                                --
- --                                                                          --
- --                                 S p e c                                  --
- --                        (VxWorks/HIE Version PPC)                         --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the  contents of the part following the private keyword. --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- pragma Restrictions (No_Exception_Handlers);
- pragma Restrictions (No_Implicit_Dynamic_Code);
- pragma Restrictions (No_Finalization);
- pragma Discard_Names;
- 
- package System is
- pragma Pure (System);
- --  Note that we take advantage of the implementation permission to
- --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
- 
-    type Name is (SYSTEM_NAME_GNAT);
-    System_Name : constant Name := SYSTEM_NAME_GNAT;
- 
-    --  System-Dependent Named Numbers
- 
-    Min_Int               : constant := Long_Long_Integer'First;
-    Max_Int               : constant := Long_Long_Integer'Last;
- 
-    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
-    Max_Nonbinary_Modulus : constant := Integer'Last;
- 
-    Max_Base_Digits       : constant := Long_Long_Float'Digits;
-    Max_Digits            : constant := Long_Long_Float'Digits;
- 
-    Max_Mantissa          : constant := 63;
-    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
- 
-    Tick                  : constant := 1.0 / 60.0;
- 
-    --  Storage-related Declarations
- 
-    type Address is private;
-    Null_Address : constant Address;
- 
-    Storage_Unit : constant := 8;
-    Word_Size    : constant := 32;
-    Memory_Size  : constant := 2 ** 32;
- 
-    --  Address comparison
- 
-    function "<"  (Left, Right : Address) return Boolean;
-    function "<=" (Left, Right : Address) return Boolean;
-    function ">"  (Left, Right : Address) return Boolean;
-    function ">=" (Left, Right : Address) return Boolean;
-    function "="  (Left, Right : Address) return Boolean;
- 
-    pragma Import (Intrinsic, "<");
-    pragma Import (Intrinsic, "<=");
-    pragma Import (Intrinsic, ">");
-    pragma Import (Intrinsic, ">=");
-    pragma Import (Intrinsic, "=");
- 
-    --  Other System-Dependent Declarations
- 
-    type Bit_Order is (High_Order_First, Low_Order_First);
-    Default_Bit_Order : constant Bit_Order := High_Order_First;
- 
-    --  Priority-related Declarations (RM D.1)
- 
-    --  256        is reserved for the VxWorks kernel
-    --  248 - 255  correspond to hardware interrupt levels 0 .. 7
-    --  247        is a catchall default "interrupt" priority for signals,
-    --             allowing higher priority than normal tasks, but lower than
-    --             hardware priority levels.  Protected Object ceilings can
-    --             override these values.
-    --  246        is used by the Interrupt_Manager task
- 
-    Max_Priority           : constant Positive := 245;
-    Max_Interrupt_Priority : constant Positive := 255;
- 
-    subtype Any_Priority       is Integer      range   0 .. 255;
-    subtype Priority           is Any_Priority range   0 .. 245;
-    subtype Interrupt_Priority is Any_Priority range 246 .. 255;
- 
-    Default_Priority : constant Priority := 122;
- 
- private
- 
-    type Address is mod Memory_Size;
-    Null_Address : constant Address := 0;
- 
-    --------------------------------------
-    -- System Implementation Parameters --
-    --------------------------------------
- 
-    --  These parameters provide information about the target that is used
-    --  by the compiler. They are in the private part of System, where they
-    --  can be accessed using the special circuitry in the Targparm unit
-    --  whose source should be consulted for more detailed descriptions
-    --  of the individual switch values.
- 
-    AAMP                      : constant Boolean := False;
-    Backend_Divide_Checks     : constant Boolean := False;
-    Backend_Overflow_Checks   : constant Boolean := False;
-    Command_Line_Args         : constant Boolean := False;
-    Configurable_Run_Time     : constant Boolean := True;
-    Denorm                    : constant Boolean := True;
-    Duration_32_Bits          : constant Boolean := True;
-    Exit_Status_Supported     : constant Boolean := True;
-    Fractional_Fixed_Ops      : constant Boolean := False;
-    Frontend_Layout           : constant Boolean := False;
-    Functions_Return_By_DSP   : constant Boolean := False;
-    Machine_Overflows         : constant Boolean := False;
-    Machine_Rounds            : constant Boolean := True;
-    OpenVMS                   : constant Boolean := False;
-    Signed_Zeros              : constant Boolean := True;
-    Stack_Check_Default       : constant Boolean := False;
-    Stack_Check_Probes        : constant Boolean := False;
-    Support_64_Bit_Divides    : constant Boolean := False;
-    Support_Aggregates        : constant Boolean := True;
-    Support_Composite_Assign  : constant Boolean := True;
-    Support_Composite_Compare : constant Boolean := True;
-    Support_Long_Shifts       : constant Boolean := True;
-    Suppress_Standard_Library : constant Boolean := True;
-    Use_Ada_Main_Program_Name : constant Boolean := True;
-    ZCX_By_Default            : constant Boolean := False;
-    GCC_ZCX_Support           : constant Boolean := False;
-    Front_End_ZCX_Support     : constant Boolean := False;
- 
-    --  Obsolete entries, to be removed eventually (bootstrap issues!)
- 
-    High_Integrity_Mode       : constant Boolean := True;
-    Long_Shifts_Inlined       : constant Boolean := False;
- 
- end System;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/51osinte.adb gcc-4.0.0/gcc/ada/51osinte.adb
*** gcc-3.4.3/gcc/ada/51osinte.adb	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/51osinte.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,182 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   S Y S T E M . O S _ I N T E R F A C E                  --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --           Copyright (C) 1999-2002 Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a UnixWare (Native) version of this package
- 
- pragma Polling (Off);
- --  Turn off polling, we do not want ATC polling to take place during
- --  tasking operations. It causes infinite loops and other problems.
- 
- with Interfaces.C;
- 
- package body System.OS_Interface is
- 
-    use Interfaces.C;
- 
-    -----------------
-    -- To_Duration --
-    -----------------
- 
-    function To_Duration (TS : timespec) return Duration is
-    begin
-       return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9;
-    end To_Duration;
- 
-    function To_Duration (TV : struct_timeval) return Duration is
-    begin
-       return Duration (TV.tv_sec) + Duration (TV.tv_usec) / 10#1#E6;
-    end To_Duration;
- 
-    -----------------
-    -- To_Timespec --
-    -----------------
- 
-    function To_Timespec (D : Duration) return timespec is
-       S : time_t;
-       F : Duration;
- 
-    begin
-       S := time_t (Long_Long_Integer (D));
-       F := D - Duration (S);
- 
-       --  If F has negative value due to a round-up, adjust for positive F
-       --  value.
- 
-       if F < 0.0 then
-          S := S - 1;
-          F := F + 1.0;
-       end if;
- 
-       return timespec'(tv_sec => S,
-                        tv_nsec => long (Long_Long_Integer (F * 10#1#E9)));
-    end To_Timespec;
- 
-    ----------------
-    -- To_Timeval --
-    ----------------
- 
-    function To_Timeval (D : Duration) return struct_timeval is
-       S : long;
-       F : Duration;
- 
-    begin
-       S := long (Long_Long_Integer (D));
-       F := D - Duration (S);
- 
-       --  If F has negative value due to a round-up, adjust for positive F
-       --  value.
- 
-       if F < 0.0 then
-          S := S - 1;
-          F := F + 1.0;
-       end if;
- 
-       return
-         struct_timeval'
-           (tv_sec => S,
-            tv_usec => long (Long_Long_Integer (F * 10#1#E6)));
-    end To_Timeval;
- 
-    -------------------
-    -- clock_gettime --
-    -------------------
- 
-    function clock_gettime
-      (clock_id : clockid_t;
-       tp       : access timespec)
-       return     int
-    is
-       pragma Warnings (Off, clock_id);
- 
-       Result : int;
-       tv     : aliased struct_timeval;
- 
-       function gettimeofday
-         (tv   : access struct_timeval;
-          tz   : System.Address := System.Null_Address)
-          return int;
-       pragma Import (C, gettimeofday, "gettimeofday");
- 
-    begin
-       Result := gettimeofday (tv'Unchecked_Access);
-       tp.all := To_Timespec (To_Duration (tv));
-       return Result;
-    end clock_gettime;
- 
-    ---------------------------
-    --  POSIX.1c  Section 3  --
-    ---------------------------
- 
-    function sigwait (set : access sigset_t; sig : access Signal) return int is
-       Result : int;
- 
-       function sigwait (set : access sigset_t) return int;
-       pragma Import (C, sigwait, "sigwait");
- 
-    begin
-       Result := sigwait (set);
- 
-       if Result < 0 then
-          sig.all := 0;
-          return errno;
-       end if;
- 
-       sig.all := Signal (Result);
-       return 0;
-    end sigwait;
- 
-    function pthread_kill (thread : pthread_t; sig : Signal) return int is
-       function pthread_kill_base
-         (thread : access pthread_t; sig : access Signal) return int;
-       pragma Import (C, pthread_kill_base, "pthread_kill");
- 
-       thr   : aliased pthread_t := thread;
-       signo : aliased Signal := sig;
- 
-    begin
-       return pthread_kill_base (thr'Unchecked_Access, signo'Unchecked_Access);
-    end pthread_kill;
- 
-    function Get_Stack_Base (thread : pthread_t) return Address is
-       pragma Warnings (Off, thread);
- 
-    begin
-       return Null_Address;
-    end Get_Stack_Base;
- 
-    procedure pthread_init is
-    begin
-       null;
-    end pthread_init;
- 
- end System.OS_Interface;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/51osinte.ads gcc-4.0.0/gcc/ada/51osinte.ads
*** gcc-3.4.3/gcc/ada/51osinte.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/51osinte.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,594 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   S Y S T E M . O S _ I N T E R F A C E                  --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --          Copyright (C) 1999-2001 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a UnixWare (Native THREADS) version of this package.
- 
- --  This package encapsulates all direct interfaces to OS services
- --  that are needed by children of System.
- 
- --  PLEASE DO NOT add any with-clauses to this package
- --  or remove the pragma Elaborate_Body.
- --  It is designed to be a bottom-level (leaf) package.
- 
- with Interfaces.C;
- package System.OS_Interface is
-    pragma Preelaborate;
- 
-    pragma Linker_Options ("-lthread");
- 
-    subtype int            is Interfaces.C.int;
-    subtype char           is Interfaces.C.char;
-    subtype short          is Interfaces.C.short;
-    subtype long           is Interfaces.C.long;
-    subtype unsigned       is Interfaces.C.unsigned;
-    subtype unsigned_short is Interfaces.C.unsigned_short;
-    subtype unsigned_long  is Interfaces.C.unsigned_long;
-    subtype unsigned_char  is Interfaces.C.unsigned_char;
-    subtype plain_char     is Interfaces.C.plain_char;
-    subtype size_t         is Interfaces.C.size_t;
- 
-    -----------
-    -- Errno --
-    -----------
- 
-    function errno return int;
-    pragma Import (C, errno, "__get_errno");
- 
-    EAGAIN    : constant := 11;
-    EINTR     : constant := 4;
-    EINVAL    : constant := 22;
-    ENOMEM    : constant := 12;
-    ETIMEDOUT : constant := 145;
- 
-    -------------
-    -- Signals --
-    -------------
- 
-    Max_Interrupt : constant := 34;
-    type Signal is new int range 0 .. Max_Interrupt;
-    for Signal'Size use int'Size;
- 
-    SIGHUP      : constant := 1; --  hangup
-    SIGINT      : constant := 2; --  interrupt (rubout)
-    SIGQUIT     : constant := 3; --  quit (ASCD FS)
-    SIGILL      : constant := 4; --  illegal instruction (not reset)
-    SIGTRAP     : constant := 5; --  trace trap (not reset)
-    SIGIOT      : constant := 6; --  IOT instruction
-    SIGABRT     : constant := 6; --  used by abort, replace SIGIOT in the future
-    SIGEMT      : constant := 7; --  EMT instruction
-    SIGFPE      : constant := 8; --  floating point exception
-    SIGKILL     : constant := 9; --  kill (cannot be caught or ignored)
-    SIGBUS      : constant := 10; --  bus error
-    SIGSEGV     : constant := 11; --  segmentation violation
-    SIGSYS      : constant := 12; --  bad argument to system call
-    SIGPIPE     : constant := 13; --  write on a pipe with no one to read it
-    SIGALRM     : constant := 14; --  alarm clock
-    SIGTERM     : constant := 15; --  software termination signal from kill
-    SIGUSR1     : constant := 16; --  user defined signal 1
-    SIGUSR2     : constant := 17; --  user defined signal 2
-    SIGCLD      : constant := 18; --  alias for SIGCHLD
-    SIGCHLD     : constant := 18; --  child status change
-    SIGPWR      : constant := 19; --  power-fail restart
-    SIGWINCH    : constant := 20; --  window size change
-    SIGURG      : constant := 21; --  urgent condition on IO channel
-    SIGPOLL     : constant := 22; --  pollable event occurred
-    SIGIO       : constant := 22; --  I/O possible (Solaris SIGPOLL alias)
-    SIGSTOP     : constant := 23; --  stop (cannot be caught or ignored)
-    SIGTSTP     : constant := 24; --  user stop requested from tty
-    SIGCONT     : constant := 25; --  stopped process has been continued
-    SIGTTIN     : constant := 26; --  background tty read attempted
-    SIGTTOU     : constant := 27; --  background tty write attempted
-    SIGVTALRM   : constant := 28; --  virtual timer expired
-    SIGPROF     : constant := 29; --  profiling timer expired
-    SIGXCPU     : constant := 30; --  CPU time limit exceeded
-    SIGXFSZ     : constant := 31; --  filesize limit exceeded
-    SIGWAITING  : constant := 32; --  all LWPs blocked interruptibly notific.
-    SIGLWP      : constant := 33; --  signal reserved for thread lib impl.
-    SIGAIO      : constant := 34; --  Asynchronous I/O signal
- 
-    SIGADAABORT : constant := SIGABRT;
-    --  Change this if you want to use another signal for task abort.
-    --  SIGTERM might be a good one.
- 
-    type Signal_Set is array (Natural range <>) of Signal;
- 
-    Unmasked    : constant Signal_Set :=
-      (SIGTRAP, SIGLWP, SIGWAITING, SIGTTIN, SIGTTOU, SIGTSTP, SIGPROF);
-    Reserved    : constant Signal_Set := (SIGABRT, SIGKILL, SIGSTOP);
- 
-    type sigset_t is private;
- 
-    function sigaddset (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigaddset, "sigaddset");
- 
-    function sigdelset (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigdelset, "sigdelset");
- 
-    function sigfillset (set : access sigset_t) return int;
-    pragma Import (C, sigfillset, "sigfillset");
- 
-    function sigismember (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigismember, "sigismember");
- 
-    function sigemptyset (set : access sigset_t) return int;
-    pragma Import (C, sigemptyset, "sigemptyset");
- 
-    type struct_sigaction is record
-       sa_flags   : int;
-       sa_handler : System.Address;
-       sa_mask    : sigset_t;
-       sa_resv1   : int;
-       sa_resv2   : int;
-    end record;
-    pragma Convention (C, struct_sigaction);
-    type struct_sigaction_ptr is access all struct_sigaction;
- 
-    SIG_BLOCK   : constant := 1;
-    SIG_UNBLOCK : constant := 2;
-    SIG_SETMASK : constant := 3;
- 
-    SIG_DFL : constant := 0;
-    SIG_IGN : constant := 1;
-    --  SIG_ERR : constant := -1;
-    --  not used
- 
-    function sigaction
-      (sig  : Signal;
-       act  : struct_sigaction_ptr;
-       oact : struct_sigaction_ptr) return int;
-    pragma Import (C, sigaction, "sigaction");
- 
-    ----------
-    -- Time --
-    ----------
- 
-    Time_Slice_Supported : constant Boolean := False;
-    --  Indicates wether time slicing is supported
- 
-    type timespec is private;
- 
-    type clockid_t is private;
- 
-    CLOCK_REALTIME : constant clockid_t;
- 
-    function clock_gettime
-      (clock_id : clockid_t;
-       tp       : access timespec) return int;
-    --  UnixWare threads don't have clock_gettime
-    --  We instead use gettimeofday()
- 
-    function To_Duration (TS : timespec) return Duration;
-    pragma Inline (To_Duration);
- 
-    function To_Timespec (D : Duration) return timespec;
-    pragma Inline (To_Timespec);
- 
-    type struct_timezone is record
-       tz_minuteswest : int;
-       tz_dsttime     : int;
-    end record;
-    pragma Convention (C, struct_timezone);
-    type struct_timezone_ptr is access all struct_timezone;
- 
-    type struct_timeval is private;
-    --  This is needed on systems that do not have clock_gettime()
-    --  but do have gettimeofday().
- 
-    function To_Duration (TV : struct_timeval) return Duration;
-    pragma Inline (To_Duration);
- 
-    function To_Timeval (D : Duration) return struct_timeval;
-    pragma Inline (To_Timeval);
- 
-    -------------------------
-    -- Priority Scheduling --
-    -------------------------
- 
-    SCHED_FIFO  : constant := 2;
-    SCHED_RR    : constant := 3;
-    SCHED_OTHER : constant := 1;
- 
-    -------------
-    -- Process --
-    -------------
- 
-    type pid_t is private;
- 
-    function kill (pid : pid_t; sig : Signal) return int;
-    pragma Import (C, kill, "kill");
- 
-    function getpid return pid_t;
-    pragma Import (C, getpid, "getpid");
- 
-    ---------
-    -- LWP --
-    ---------
- 
-    function lwp_self return System.Address;
-    pragma Import (C, lwp_self, "_lwp_self");
- 
-    -------------
-    -- Threads --
-    -------------
- 
-    type Thread_Body is access
-      function (arg : System.Address) return System.Address;
-    type pthread_t           is private;
-    subtype Thread_Id        is pthread_t;
- 
-    type pthread_mutex_t     is limited private;
-    type pthread_cond_t      is limited private;
-    type pthread_attr_t      is limited private;
-    type pthread_mutexattr_t is limited private;
-    type pthread_condattr_t  is limited private;
-    type pthread_key_t       is private;
- 
-    PTHREAD_CREATE_DETACHED : constant := 0;
- 
-    -----------
-    -- Stack --
-    -----------
- 
-    Stack_Base_Available : constant Boolean := False;
-    --  Indicates wether the stack base is available on this target.
- 
-    function Get_Stack_Base (thread : pthread_t) return Address;
-    pragma Inline (Get_Stack_Base);
-    --  returns the stack base of the specified thread.
-    --  Only call this function when Stack_Base_Available is True.
- 
-    function Get_Page_Size return size_t;
-    function Get_Page_Size return Address;
-    pragma Import (C, Get_Page_Size, "getpagesize");
-    --  returns the size of a page, or 0 if this is not relevant on this
-    --  target
- 
-    PROT_NONE  : constant := 0;
-    PROT_READ  : constant := 1;
-    PROT_WRITE : constant := 2;
-    PROT_EXEC  : constant := 4;
-    PROT_USER  : constant := 8;
-    PROT_ALL   : constant := PROT_READ + PROT_WRITE + PROT_EXEC + PROT_USER;
- 
-    PROT_ON    : constant := PROT_READ;
-    PROT_OFF   : constant := PROT_ALL;
- 
-    function mprotect (addr : Address; len : size_t; prot : int) return int;
-    pragma Import (C, mprotect);
- 
-    -------------------------
-    -- POSIX.1c  Section 3 --
-    -------------------------
- 
-    function sigwait (set : access sigset_t; sig : access Signal) return int;
-    pragma Inline (sigwait);
-    --  UnixWare provides a non standard sigwait
- 
-    function pthread_kill (thread : pthread_t; sig : Signal) return int;
-    pragma Inline (pthread_kill);
-    --  UnixWare provides a non standard pthread_kill
- 
-    type sigset_t_ptr is access all sigset_t;
- 
-    function pthread_sigmask
-      (how  : int;
-       set  : sigset_t_ptr;
-       oset : sigset_t_ptr) return int;
-    pragma Import (C, pthread_sigmask, "pthread_sigmask");
- 
-    --------------------------
-    -- POSIX.1c  Section 11 --
-    --------------------------
- 
-    function pthread_mutexattr_init
-      (attr : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
- 
-    function pthread_mutexattr_destroy
-      (attr : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
- 
-    function pthread_mutex_init
-      (mutex : access pthread_mutex_t;
-       attr  : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
- 
-    function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
- 
-    function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_mutex_lock, "pthread_mutex_lock");
- 
-    function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_mutex_unlock, "pthread_mutex_unlock");
- 
-    function pthread_condattr_init
-      (attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
- 
-    function pthread_condattr_destroy
-      (attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
- 
-    function pthread_cond_init
-      (cond : access pthread_cond_t;
-       attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_cond_init, "pthread_cond_init");
- 
-    function pthread_cond_destroy (cond : access pthread_cond_t) return int;
-    pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
- 
-    function pthread_cond_signal (cond : access pthread_cond_t) return int;
-    pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
- 
-    function pthread_cond_wait
-      (cond  : access pthread_cond_t;
-       mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_cond_wait, "pthread_cond_wait");
- 
-    function pthread_cond_timedwait
-      (cond    : access pthread_cond_t;
-       mutex   : access pthread_mutex_t;
-       abstime : access timespec) return int;
-    pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait");
- 
-    Relative_Timed_Wait : constant Boolean := False;
-    --  pthread_cond_timedwait requires an absolute delay time
- 
-    --------------------------
-    -- POSIX.1c  Section 13 --
-    --------------------------
- 
-    PTHREAD_PRIO_NONE    : constant := 1;
-    PTHREAD_PRIO_INHERIT : constant := 2;
-    PTHREAD_PRIO_PROTECT : constant := 3;
- 
-    function pthread_mutexattr_setprotocol
-      (attr     : access pthread_mutexattr_t;
-       protocol : int) return int;
-    pragma Import (C, pthread_mutexattr_setprotocol);
- 
-    function pthread_mutexattr_setprioceiling
-      (attr     : access pthread_mutexattr_t;
-       prioceiling : int) return int;
-    pragma Import (C, pthread_mutexattr_setprioceiling);
- 
-    type sched_union is record
-       sched_fifo    : int;
-       sched_fcfs    : int;
-       sched_other   : int;
-       sched_ts      : int;
-       policy_params : long;
-    end record;
- 
-    type struct_sched_param is record
-       sched_priority    : int;
-       sched_other_stuff : sched_union;
-    end record;
- 
-    function pthread_setschedparam
-      (thread : pthread_t;
-       policy : int;
-       param  : access struct_sched_param) return int;
-    pragma Import (C, pthread_setschedparam, "pthread_setschedparam");
- 
-    function pthread_attr_setscope
-      (attr            : access pthread_attr_t;
-       contentionscope : int) return int;
-    pragma Import (C, pthread_attr_setscope, "pthread_attr_setscope");
- 
-    function pthread_attr_setinheritsched
-      (attr            : access pthread_attr_t;
-       inheritsched : int) return int;
-    pragma Import (C, pthread_attr_setinheritsched);
- 
-    function pthread_attr_setschedpolicy
-      (attr   : access pthread_attr_t;
-       policy : int) return int;
-    pragma Import (C, pthread_attr_setschedpolicy);
- 
-    function sched_yield return int;
-    pragma Import (C, sched_yield, "sched_yield");
- 
-    ---------------------------
-    -- P1003.1c - Section 16 --
-    ---------------------------
- 
-    function pthread_attr_init (attributes : access pthread_attr_t) return int;
-    pragma Import (C, pthread_attr_init, "pthread_attr_init");
- 
-    function pthread_attr_destroy
-      (attributes : access pthread_attr_t) return int;
-    pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
- 
-    function pthread_attr_setdetachstate
-      (attr        : access pthread_attr_t;
-       detachstate : int) return int;
-    pragma Import (C, pthread_attr_setdetachstate);
- 
-    function pthread_attr_setstacksize
-      (attr      : access pthread_attr_t;
-       stacksize : size_t) return int;
-    pragma Import (C, pthread_attr_setstacksize);
- 
-    function pthread_create
-      (thread        : access pthread_t;
-       attributes    : access pthread_attr_t;
-       start_routine : Thread_Body;
-       arg           : System.Address) return int;
-    pragma Import (C, pthread_create, "pthread_create");
- 
-    procedure pthread_exit (status : System.Address);
-    pragma Import (C, pthread_exit, "pthread_exit");
- 
-    function pthread_self return pthread_t;
-    pragma Import (C, pthread_self, "pthread_self");
- 
-    --------------------------
-    -- POSIX.1c  Section 17 --
-    --------------------------
- 
-    function pthread_setspecific
-      (key   : pthread_key_t;
-       value : System.Address) return int;
-    pragma Import (C, pthread_setspecific, "pthread_setspecific");
- 
-    function pthread_getspecific (key : pthread_key_t) return System.Address;
-    pragma Import (C, pthread_getspecific, "pthread_getspecific");
- 
-    type destructor_pointer is access procedure (arg : System.Address);
- 
-    function pthread_key_create
-      (key        : access pthread_key_t;
-       destructor : destructor_pointer) return int;
-    pragma Import (C, pthread_key_create, "pthread_key_create");
- 
-    procedure pthread_init;
-    --  This is a dummy procedure to share some GNULLI files
- 
- private
- 
-    type sigbit_array is array (1 .. 4) of unsigned;
-    type sigset_t is record
-       sa_sigbits : sigbit_array;
-    end record;
-    pragma Convention (C_Pass_By_Copy, sigset_t);
- 
-    type pid_t is new unsigned;
- 
-    type time_t is new long;
- 
-    type timespec is record
-       tv_sec       : time_t;
-       tv_nsec      : long;
-    end record;
-    pragma Convention (C, timespec);
- 
-    type clockid_t is new int;
-    CLOCK_REALTIME : constant clockid_t := 0;
- 
-    type struct_timeval is record
-       tv_sec       : long;
-       tv_usec      : long;
-    end record;
-    pragma Convention (C, struct_timeval);
- 
-    type pthread_attr_t is record
-       pt_attr_status          : int;
-       pt_attr_stacksize       : size_t;
-       pt_attr_stackaddr       : System.Address;
-       pt_attr_detachstate     : int;
-       pt_attr_contentionscope : int;
-       pt_attr_inheritsched    : int;
-       pt_attr_schedpolicy     : int;
-       pt_attr_sched_param     : struct_sched_param;
-       pt_attr_tlflags         : int;
-    end record;
-    pragma Convention (C, pthread_attr_t);
- 
-    type pthread_condattr_t is record
-       pt_condattr_status  : int;
-       pt_condattr_pshared : int;
-    end record;
-    pragma Convention (C, pthread_condattr_t);
- 
-    type pthread_mutexattr_t is record
-       pt_mutexattr_status  : int;
-       pt_mutexattr_pshared : int;
-       pt_mutexattr_type    : int;
-    end record;
-    pragma Convention (C, pthread_mutexattr_t);
- 
-    type thread_t is new long;
-    type pthread_t is new thread_t;
- 
-    type thrq_elt_t;
-    type thrq_elt_t_ptr is access all thrq_elt_t;
- 
-    type thrq_elt_t is record
-       thrq_next : thrq_elt_t_ptr;
-       thrq_prev : thrq_elt_t_ptr;
-    end record;
-    pragma Convention (C, thrq_elt_t);
- 
-    type lwp_mutex_t is record
-       wanted : char;
-       lock   : unsigned_char;
-    end record;
-    pragma Convention (C, lwp_mutex_t);
-    pragma Volatile (lwp_mutex_t);
- 
-    type mutex_t is record
-       m_lmutex    : lwp_mutex_t;
-       m_sync_lock : lwp_mutex_t;
-       m_type      : int;
-       m_sleepq    : thrq_elt_t;
-       filler1     : int;
-       filler2     : int;
-    end record;
-    pragma Convention (C, mutex_t);
-    pragma Volatile (mutex_t);
- 
-    type pthread_mutex_t is record
-       pt_mutex_mutex : mutex_t;
-       pt_mutex_pid   : pid_t;
-       pt_mutex_owner : thread_t;
-       pt_mutex_depth : int;
-       pt_mutex_attr  : pthread_mutexattr_t;
-    end record;
-    pragma Convention (C, pthread_mutex_t);
- 
-    type lwp_cond_t is record
-       wanted : char;
-    end record;
-    pragma Convention (C, lwp_cond_t);
-    pragma Volatile (lwp_cond_t);
- 
-    type cond_t is record
-       c_lcond     : lwp_cond_t;
-       c_sync_lock : lwp_mutex_t;
-       c_type      : int;
-       c_syncq     : thrq_elt_t;
-    end record;
-    pragma Convention (C, cond_t);
-    pragma Volatile (cond_t);
- 
-    type pthread_cond_t is record
-       pt_cond_cond : cond_t;
-       pt_cond_attr : pthread_condattr_t;
-    end record;
-    pragma Convention (C, pthread_cond_t);
- 
-    type pthread_key_t is new unsigned;
- 
- end System.OS_Interface;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/51system.ads gcc-4.0.0/gcc/ada/51system.ads
*** gcc-3.4.3/gcc/ada/51system.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/51system.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,150 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                        GNAT RUN-TIME COMPONENTS                          --
- --                                                                          --
- --                               S Y S T E M                                --
- --                                                                          --
- --                                 S p e c                                  --
- --                         (SCO UnixWare Version)                           --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the  contents of the part following the private keyword. --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- package System is
- pragma Pure (System);
- --  Note that we take advantage of the implementation permission to
- --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
- 
-    type Name is (SYSTEM_NAME_GNAT);
-    System_Name : constant Name := SYSTEM_NAME_GNAT;
- 
-    --  System-Dependent Named Numbers
- 
-    Min_Int               : constant := Long_Long_Integer'First;
-    Max_Int               : constant := Long_Long_Integer'Last;
- 
-    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
-    Max_Nonbinary_Modulus : constant := Integer'Last;
- 
-    Max_Base_Digits       : constant := Long_Long_Float'Digits;
-    Max_Digits            : constant := Long_Long_Float'Digits;
- 
-    Max_Mantissa          : constant := 63;
-    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
- 
-    Tick                  : constant := 0.01;
- 
-    --  Storage-related Declarations
- 
-    type Address is private;
-    Null_Address : constant Address;
- 
-    Storage_Unit : constant := 8;
-    Word_Size    : constant := 32;
-    Memory_Size  : constant := 2 ** 32;
- 
-    --  Address comparison
- 
-    function "<"  (Left, Right : Address) return Boolean;
-    function "<=" (Left, Right : Address) return Boolean;
-    function ">"  (Left, Right : Address) return Boolean;
-    function ">=" (Left, Right : Address) return Boolean;
-    function "="  (Left, Right : Address) return Boolean;
- 
-    pragma Import (Intrinsic, "<");
-    pragma Import (Intrinsic, "<=");
-    pragma Import (Intrinsic, ">");
-    pragma Import (Intrinsic, ">=");
-    pragma Import (Intrinsic, "=");
- 
-    --  Other System-Dependent Declarations
- 
-    type Bit_Order is (High_Order_First, Low_Order_First);
-    Default_Bit_Order : constant Bit_Order := Low_Order_First;
- 
-    --  Priority-related Declarations (RM D.1)
- 
-    Max_Priority           : constant Positive := 30;
-    Max_Interrupt_Priority : constant Positive := 31;
- 
-    subtype Any_Priority       is Integer      range  0 .. 31;
-    subtype Priority           is Any_Priority range  0 .. 30;
-    subtype Interrupt_Priority is Any_Priority range 31 .. 31;
- 
-    Default_Priority : constant Priority := 15;
- 
- private
- 
-    type Address is mod Memory_Size;
-    Null_Address : constant Address := 0;
- 
-    --------------------------------------
-    -- System Implementation Parameters --
-    --------------------------------------
- 
-    --  These parameters provide information about the target that is used
-    --  by the compiler. They are in the private part of System, where they
-    --  can be accessed using the special circuitry in the Targparm unit
-    --  whose source should be consulted for more detailed descriptions
-    --  of the individual switch values.
- 
-    AAMP                      : constant Boolean := False;
-    Backend_Divide_Checks     : constant Boolean := False;
-    Backend_Overflow_Checks   : constant Boolean := False;
-    Command_Line_Args         : constant Boolean := True;
-    Configurable_Run_Time     : constant Boolean := False;
-    Denorm                    : constant Boolean := True;
-    Duration_32_Bits          : constant Boolean := False;
-    Exit_Status_Supported     : constant Boolean := True;
-    Fractional_Fixed_Ops      : constant Boolean := False;
-    Frontend_Layout           : constant Boolean := False;
-    Functions_Return_By_DSP   : constant Boolean := False;
-    Machine_Overflows         : constant Boolean := False;
-    Machine_Rounds            : constant Boolean := True;
-    OpenVMS                   : constant Boolean := False;
-    Signed_Zeros              : constant Boolean := True;
-    Stack_Check_Default       : constant Boolean := False;
-    Stack_Check_Probes        : constant Boolean := False;
-    Support_64_Bit_Divides    : constant Boolean := True;
-    Support_Aggregates        : constant Boolean := True;
-    Support_Composite_Assign  : constant Boolean := True;
-    Support_Composite_Compare : constant Boolean := True;
-    Support_Long_Shifts       : constant Boolean := True;
-    Suppress_Standard_Library : constant Boolean := False;
-    Use_Ada_Main_Program_Name : constant Boolean := False;
-    ZCX_By_Default            : constant Boolean := False;
-    GCC_ZCX_Support           : constant Boolean := False;
-    Front_End_ZCX_Support     : constant Boolean := False;
- 
-    --  Obsolete entries, to be removed eventually (bootstrap issues!)
- 
-    High_Integrity_Mode       : constant Boolean := False;
-    Long_Shifts_Inlined       : constant Boolean := True;
- 
- end System;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/52osinte.adb gcc-4.0.0/gcc/ada/52osinte.adb
*** gcc-3.4.3/gcc/ada/52osinte.adb	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/52osinte.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,597 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   S Y S T E M . O S _ I N T E R F A C E                  --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --           Copyright (C) 1999-2003 Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a LynxOS (Native) version of this package
- 
- pragma Polling (Off);
- --  Turn off polling, we do not want ATC polling to take place during
- --  tasking operations. It causes infinite loops and other problems.
- 
- with Interfaces.C;
- 
- package body System.OS_Interface is
- 
-    use Interfaces.C;
- 
-    -------------------
-    -- clock_gettime --
-    -------------------
- 
-    function clock_gettime
-      (clock_id : clockid_t;
-       tp       : access timespec)
-       return     int
-    is
-       function clock_gettime_base
-         (clock_id : clockid_t;
-          tp       : access timespec)
-          return     int;
-       pragma Import (C, clock_gettime_base, "clock_gettime");
- 
-    begin
-       if clock_gettime_base (clock_id, tp) /= 0 then
-          return errno;
-       end if;
- 
-       return 0;
-    end clock_gettime;
- 
-    -----------------
-    -- To_Duration --
-    -----------------
- 
-    function To_Duration (TS : timespec) return Duration is
-    begin
-       return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9;
-    end To_Duration;
- 
-    function To_Duration (TV : struct_timeval) return Duration is
-    begin
-       return Duration (TV.tv_sec) + Duration (TV.tv_usec) / 10#1#E6;
-    end To_Duration;
- 
-    -----------------
-    -- To_Timespec --
-    -----------------
- 
-    function To_Timespec (D : Duration) return timespec is
-       S : time_t;
-       F : Duration;
- 
-    begin
-       S := time_t (Long_Long_Integer (D));
-       F := D - Duration (S);
- 
-       --  If F has negative value due to a round-up, adjust for positive F
-       --  value.
- 
-       if F < 0.0 then
-          S := S - 1;
-          F := F + 1.0;
-       end if;
- 
-       return timespec'(tv_sec => S,
-         tv_nsec => long (Long_Long_Integer (F * 10#1#E9)));
-    end To_Timespec;
- 
-    ----------------
-    -- To_Timeval --
-    ----------------
- 
-    function To_Timeval (D : Duration) return struct_timeval is
-       S : time_t;
-       F : Duration;
- 
-    begin
-       S := time_t (Long_Long_Integer (D));
-       F := D - Duration (S);
- 
-       --  If F has negative value due to a round-up, adjust for positive F
-       --  value.
- 
-       if F < 0.0 then
-          S := S - 1;
-          F := F + 1.0;
-       end if;
- 
-       return struct_timeval'(tv_sec => S,
-         tv_usec => time_t (Long_Long_Integer (F * 10#1#E6)));
-    end To_Timeval;
- 
-    -------------------------
-    -- POSIX.1c  Section 3 --
-    -------------------------
- 
-    function sigwait
-      (set :  access sigset_t;
-       sig :  access Signal)
-       return int
-    is
-       function sigwait_base
-         (set   : access sigset_t;
-          value : System.Address)
-          return  Signal;
-       pragma Import (C, sigwait_base, "sigwait");
- 
-    begin
-       sig.all := sigwait_base (set, Null_Address);
- 
-       if sig.all = -1 then
-          return errno;
-       end if;
- 
-       return 0;
-    end sigwait;
- 
-    --------------------------
-    -- POSIX.1c  Section 11 --
-    --------------------------
- 
-    --  For all the following functions, LynxOS threads has the POSIX Draft 4
-    --  begavior; it sets errno but the standard Posix requires it to be
-    --  returned.
- 
-    function pthread_mutexattr_init
-      (attr : access pthread_mutexattr_t)
-       return int
-    is
-       function pthread_mutexattr_create
-         (attr : access pthread_mutexattr_t)
-          return int;
-       pragma Import (C, pthread_mutexattr_create, "pthread_mutexattr_create");
- 
-    begin
-       if pthread_mutexattr_create (attr) /= 0 then
-          return errno;
-       end if;
- 
-       return 0;
-    end pthread_mutexattr_init;
- 
-    function pthread_mutexattr_destroy
-      (attr : access pthread_mutexattr_t)
-       return int
-    is
-       function pthread_mutexattr_delete
-         (attr : access pthread_mutexattr_t)
-          return int;
-       pragma Import (C, pthread_mutexattr_delete, "pthread_mutexattr_delete");
- 
-    begin
-       if pthread_mutexattr_delete (attr) /= 0 then
-          return errno;
-       end if;
- 
-       return 0;
-    end pthread_mutexattr_destroy;
- 
-    function pthread_mutex_init
-      (mutex : access pthread_mutex_t;
-       attr  : access pthread_mutexattr_t)
-       return  int
-    is
-       function pthread_mutex_init_base
-         (mutex : access pthread_mutex_t;
-          attr  : pthread_mutexattr_t)
-          return  int;
-       pragma Import (C, pthread_mutex_init_base, "pthread_mutex_init");
- 
-    begin
-       if pthread_mutex_init_base (mutex, attr.all) /= 0 then
-          return errno;
-       end if;
- 
-       return 0;
-    end pthread_mutex_init;
- 
-    function pthread_mutex_destroy
-      (mutex : access pthread_mutex_t)
-       return  int
-    is
-       function pthread_mutex_destroy_base
-         (mutex : access pthread_mutex_t)
-          return  int;
-       pragma Import (C, pthread_mutex_destroy_base, "pthread_mutex_destroy");
- 
-    begin
-       if pthread_mutex_destroy_base (mutex) /= 0 then
-          return errno;
-       end if;
- 
-       return 0;
-    end pthread_mutex_destroy;
- 
-    function pthread_mutex_lock
-      (mutex : access pthread_mutex_t)
-       return  int
-    is
-       function pthread_mutex_lock_base
-         (mutex : access pthread_mutex_t)
-          return  int;
-       pragma Import (C, pthread_mutex_lock_base, "pthread_mutex_lock");
- 
-    begin
-       if pthread_mutex_lock_base (mutex) /= 0 then
-          return errno;
-       end if;
- 
-       return 0;
-    end pthread_mutex_lock;
- 
-    function pthread_mutex_unlock
-      (mutex : access pthread_mutex_t)
-       return  int
-    is
-       function pthread_mutex_unlock_base
-         (mutex : access pthread_mutex_t)
-          return  int;
-       pragma Import (C, pthread_mutex_unlock_base, "pthread_mutex_unlock");
- 
-    begin
-       if pthread_mutex_unlock_base (mutex) /= 0 then
-          return errno;
-       end if;
- 
-       return 0;
-    end pthread_mutex_unlock;
- 
-    function pthread_condattr_init
-      (attr : access pthread_condattr_t)
-       return int
-    is
-       function pthread_condattr_create
-         (attr : access pthread_condattr_t)
-          return int;
-       pragma Import (C, pthread_condattr_create, "pthread_condattr_create");
- 
-    begin
-       if pthread_condattr_create (attr) /= 0 then
-          return errno;
-       end if;
- 
-       return 0;
-    end pthread_condattr_init;
- 
-    function pthread_condattr_destroy
-      (attr : access pthread_condattr_t)
-       return int
-    is
-       function pthread_condattr_delete
-         (attr : access pthread_condattr_t)
-          return int;
-       pragma Import (C, pthread_condattr_delete, "pthread_condattr_delete");
- 
-    begin
-       if pthread_condattr_delete (attr) /= 0 then
-          return errno;
-       end if;
- 
-       return 0;
-    end pthread_condattr_destroy;
- 
-    function pthread_cond_init
-      (cond : access pthread_cond_t;
-       attr : access pthread_condattr_t)
-       return int
-    is
-       function pthread_cond_init_base
-         (cond : access pthread_cond_t;
-          attr : pthread_condattr_t)
-          return int;
-       pragma Import (C, pthread_cond_init_base, "pthread_cond_init");
- 
-    begin
-       if pthread_cond_init_base (cond, attr.all) /= 0 then
-          return errno;
-       end if;
- 
-       return 0;
-    end pthread_cond_init;
- 
-    function pthread_cond_destroy
-      (cond : access pthread_cond_t)
-       return int
-    is
-       function pthread_cond_destroy_base
-         (cond : access pthread_cond_t)
-          return int;
-       pragma Import (C, pthread_cond_destroy_base, "pthread_cond_destroy");
- 
-    begin
-       if pthread_cond_destroy_base (cond) /= 0 then
-          return errno;
-       end if;
- 
-       return 0;
-    end pthread_cond_destroy;
- 
-    function pthread_cond_signal
-      (cond : access pthread_cond_t)
-       return int
-    is
-       function pthread_cond_signal_base
-         (cond : access pthread_cond_t)
-          return int;
-       pragma Import (C, pthread_cond_signal_base, "pthread_cond_signal");
- 
-    begin
-       if pthread_cond_signal_base (cond) /= 0 then
-          return errno;
-       end if;
- 
-       return 0;
-    end pthread_cond_signal;
- 
-    function pthread_cond_wait
-      (cond  : access pthread_cond_t;
-       mutex : access pthread_mutex_t)
-       return  int
-    is
-       function pthread_cond_wait_base
-         (cond  : access pthread_cond_t;
-          mutex : access pthread_mutex_t)
-          return  int;
-       pragma Import (C, pthread_cond_wait_base, "pthread_cond_wait");
- 
-    begin
-       if pthread_cond_wait_base (cond, mutex) /= 0 then
-          return errno;
-       end if;
- 
-       return 0;
-    end pthread_cond_wait;
- 
-    function pthread_cond_timedwait
-      (cond    : access pthread_cond_t;
-       mutex   : access pthread_mutex_t;
-       reltime : access timespec) return int
-    is
-       function pthread_cond_timedwait_base
-         (cond    : access pthread_cond_t;
-          mutex   : access pthread_mutex_t;
-          reltime : access timespec) return int;
-       pragma Import (C, pthread_cond_timedwait_base, "pthread_cond_timedwait");
- 
-    begin
-       if pthread_cond_timedwait_base (cond, mutex, reltime) /= 0 then
-          if errno = EAGAIN then
-             return ETIMEDOUT;
-          end if;
- 
-          return errno;
-       end if;
- 
-       return 0;
-    end pthread_cond_timedwait;
- 
-    --------------------------
-    -- POSIX.1c  Section 13 --
-    --------------------------
- 
-    function pthread_setschedparam
-      (thread : pthread_t;
-       policy : int;
-       param  : access struct_sched_param)
-       return   int
-    is
-       function pthread_setscheduler
-         (thread : pthread_t;
-          policy : int;
-          prio   : int)
-          return   int;
-       pragma Import (C, pthread_setscheduler, "pthread_setscheduler");
- 
-    begin
-       if pthread_setscheduler (thread, policy, param.sched_priority) = -1 then
-          return errno;
-       end if;
- 
-       return 0;
-    end pthread_setschedparam;
- 
-    function pthread_mutexattr_setprotocol
-      (attr     : access pthread_mutexattr_t;
-       protocol : int)
-       return     int
-    is
-       pragma Unreferenced (attr, protocol);
-    begin
-       return 0;
-    end pthread_mutexattr_setprotocol;
- 
-    function pthread_mutexattr_setprioceiling
-      (attr        : access pthread_mutexattr_t;
-       prioceiling : int)
-       return        int
-    is
-       pragma Unreferenced (attr, prioceiling);
-    begin
-       return 0;
-    end pthread_mutexattr_setprioceiling;
- 
-    function pthread_attr_setscope
-      (attr            : access pthread_attr_t;
-       contentionscope : int)
-       return            int
-    is
-       pragma Unreferenced (attr, contentionscope);
-    begin
-       return 0;
-    end pthread_attr_setscope;
- 
-    function sched_yield return int is
-       procedure pthread_yield;
-       pragma Import (C, pthread_yield, "pthread_yield");
- 
-    begin
-       pthread_yield;
-       return 0;
-    end sched_yield;
- 
-    -----------------------------
-    --  P1003.1c - Section 16  --
-    -----------------------------
- 
-    function pthread_attr_setdetachstate
-      (attr        : access pthread_attr_t;
-       detachstate : int)
-       return        int
-    is
-       pragma Unreferenced (attr, detachstate);
-    begin
-       return 0;
-    end pthread_attr_setdetachstate;
- 
-    function pthread_create
-      (thread        : access pthread_t;
-       attributes    : access pthread_attr_t;
-       start_routine : Thread_Body;
-       arg           : System.Address)
-       return          int
-    is
-       --  The LynxOS pthread_create doesn't seems to work.
-       --  Workaround : We're using st_new instead.
-       --
-       --   function pthread_create_base
-       --     (thread        : access pthread_t;
-       --      attributes    : pthread_attr_t;
-       --      start_routine : Thread_Body;
-       --      arg           : System.Address)
-       --      return          int;
-       --   pragma Import (C, pthread_create_base, "pthread_create");
- 
-       St : aliased st_t := attributes.st;
- 
-       function st_new
-         (start_routine : Thread_Body;
-          arg           : System.Address;
-          attributes    : access st_t;
-          thread        : access pthread_t)
-          return          int;
-       pragma Import (C, st_new, "st_new");
- 
-    begin
-       --  Following code would be used if above commented function worked
- 
-       --   if pthread_create_base
-       --        (thread, attributes.all, start_routine, arg) /= 0 then
- 
-       if st_new (start_routine, arg, St'Access, thread) /= 0 then
-          return errno;
-       end if;
- 
-       return 0;
-    end pthread_create;
- 
-    function pthread_detach (thread : pthread_t) return int is
-       aliased_thread : aliased pthread_t := thread;
- 
-       function pthread_detach_base (thread : access pthread_t) return int;
-       pragma Import (C, pthread_detach_base, "pthread_detach");
- 
-    begin
-       if pthread_detach_base (aliased_thread'Access) /= 0 then
-          return errno;
-       end if;
- 
-       return 0;
-    end pthread_detach;
- 
-    --------------------------
-    -- POSIX.1c  Section 17 --
-    --------------------------
- 
-    function pthread_setspecific
-      (key   : pthread_key_t;
-       value : System.Address)
-       return  int
-    is
-       function pthread_setspecific_base
-         (key   : pthread_key_t;
-          value : System.Address)
-          return  int;
-       pragma Import (C, pthread_setspecific_base, "pthread_setspecific");
- 
-    begin
-       if pthread_setspecific_base (key, value) /= 0 then
-          return errno;
-       end if;
- 
-       return 0;
-    end pthread_setspecific;
- 
-    function pthread_getspecific (key : pthread_key_t) return System.Address is
-       procedure pthread_getspecific_base
-         (key   : pthread_key_t;
-          value : access System.Address);
-       pragma Import (C, pthread_getspecific_base, "pthread_getspecific");
- 
-       value : aliased System.Address := System.Null_Address;
- 
-    begin
-       pthread_getspecific_base (key, value'Unchecked_Access);
-       return value;
-    end pthread_getspecific;
- 
-    function Get_Stack_Base (thread : pthread_t) return Address is
-       pragma Warnings (Off, thread);
- 
-    begin
-       return Null_Address;
-    end Get_Stack_Base;
- 
-    function pthread_key_create
-      (key        : access pthread_key_t;
-       destructor : destructor_pointer)
-       return       int
-    is
-       function pthread_keycreate
-         (key        : access pthread_key_t;
-          destructor : destructor_pointer)
-          return       int;
-       pragma Import (C, pthread_keycreate, "pthread_keycreate");
- 
-    begin
-       if pthread_keycreate (key, destructor) /= 0 then
-          return errno;
-       end if;
- 
-       return 0;
-    end pthread_key_create;
- 
-    procedure pthread_init is
-    begin
-       null;
-    end pthread_init;
- 
- end System.OS_Interface;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/52osinte.ads gcc-4.0.0/gcc/ada/52osinte.ads
*** gcc-3.4.3/gcc/ada/52osinte.ads	Fri Dec  5 10:24:04 2003
--- gcc-4.0.0/gcc/ada/52osinte.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,559 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   S Y S T E M . O S _ I N T E R F A C E                  --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --                                                                          --
- --          Copyright (C) 1999-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a LynxOS (Native) version of this package.
- 
- --  This package encapsulates all direct interfaces to OS services
- --  that are needed by children of System.
- 
- --  PLEASE DO NOT add any with-clauses to this package
- --  or remove the pragma Elaborate_Body.
- --  It is designed to be a bottom-level (leaf) package.
- 
- with Interfaces.C;
- package System.OS_Interface is
-    pragma Preelaborate;
- 
-    pragma Linker_Options ("-mthreads");
- 
-    subtype int            is Interfaces.C.int;
-    subtype char           is Interfaces.C.char;
-    subtype short          is Interfaces.C.short;
-    subtype long           is Interfaces.C.long;
-    subtype unsigned       is Interfaces.C.unsigned;
-    subtype unsigned_short is Interfaces.C.unsigned_short;
-    subtype unsigned_long  is Interfaces.C.unsigned_long;
-    subtype unsigned_char  is Interfaces.C.unsigned_char;
-    subtype plain_char     is Interfaces.C.plain_char;
-    subtype size_t         is Interfaces.C.size_t;
- 
-    -----------
-    -- Errno --
-    -----------
- 
-    function errno return int;
-    pragma Import (C, errno, "__get_errno");
- 
-    EAGAIN    : constant := 11;
-    EINTR     : constant := 4;
-    EINVAL    : constant := 22;
-    ENOMEM    : constant := 12;
-    ETIMEDOUT : constant := 60;
- 
-    -------------
-    -- Signals --
-    -------------
- 
-    Max_Interrupt : constant := 63;
-    type Signal is new int range 0 .. Max_Interrupt;
-    for Signal'Size use int'Size;
- 
-    SIGHUP      : constant := 1; --  hangup
-    SIGINT      : constant := 2; --  interrupt (rubout)
-    SIGQUIT     : constant := 3; --  quit (ASCD FS)
-    SIGILL      : constant := 4; --  illegal instruction (not reset)
-    SIGTRAP     : constant := 5; --  trace trap (not reset)
-    SIGBRK      : constant := 6; --  break
-    SIGIOT      : constant := 6; --  IOT instruction
-    SIGABRT     : constant := 6; --  used by abort, replace SIGIOT in the future
-    SIGCORE     : constant := 7; --  kill with core dump
-    SIGEMT      : constant := 7; --  EMT instruction
-    SIGFPE      : constant := 8; --  floating point exception
-    SIGKILL     : constant := 9; --  kill (cannot be caught or ignored)
-    SIGBUS      : constant := 10; --  bus error
-    SIGSEGV     : constant := 11; --  segmentation violation
-    SIGSYS      : constant := 12; --  bad argument to system call
-    SIGPIPE     : constant := 13; --  write on a pipe with no one to read it
-    SIGALRM     : constant := 14; --  alarm clock
-    SIGTERM     : constant := 15; --  software termination signal from kill
-    SIGURG      : constant := 16; --  urgent condition on IO channel
-    SIGSTOP     : constant := 17; --  stop (cannot be caught or ignored)
-    SIGTSTP     : constant := 18; --  user stop requested from tty
-    SIGCONT     : constant := 19; --  stopped process has been continued
-    SIGCLD      : constant := 20; --  alias for SIGCHLD
-    SIGCHLD     : constant := 20; --  child status change
-    SIGTTIN     : constant := 21; --  background tty read attempted
-    SIGTTOU     : constant := 22; --  background tty write attempted
-    SIGIO       : constant := 23; --  I/O possible (Solaris SIGPOLL alias)
-    SIGPOLL     : constant := 23; --  pollable event occurred
-    SIGXCPU     : constant := 24; --  CPU time limit exceeded
-    SIGXFSZ     : constant := 25; --  filesize limit exceeded
-    SIGVTALRM   : constant := 26; --  virtual timer expired
-    SIGPROF     : constant := 27; --  profiling timer expired
-    SIGWINCH    : constant := 28; --  window size change
-    SIGLOST     : constant := 29; --  SUN 4.1 compatibility
-    SIGUSR1     : constant := 30; --  user defined signal 1
-    SIGUSR2     : constant := 31; --  user defined signal 2
-    SIGPRIO     : constant := 32; --  sent to a process with its priority or
-                                  --  group is changed
- 
-    SIGADAABORT : constant := SIGABRT;
-    --  Change this if you want to use another signal for task abort.
-    --  SIGTERM might be a good one.
- 
-    type Signal_Set is array (Natural range <>) of Signal;
- 
-    Unmasked    : constant Signal_Set :=
-      (SIGTRAP, SIGTTIN, SIGTTOU, SIGTSTP, SIGPROF);
-    Reserved    : constant Signal_Set := (SIGABRT, SIGKILL, SIGSTOP, SIGPRIO);
- 
-    type sigset_t is private;
- 
-    function sigaddset (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigaddset, "sigaddset");
- 
-    function sigdelset (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigdelset, "sigdelset");
- 
-    function sigfillset (set : access sigset_t) return int;
-    pragma Import (C, sigfillset, "sigfillset");
- 
-    function sigismember (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigismember, "sigismember");
- 
-    function sigemptyset (set : access sigset_t) return int;
-    pragma Import (C, sigemptyset, "sigemptyset");
- 
-    type struct_sigaction is record
-       sa_handler : System.Address;
-       sa_mask    : sigset_t;
-       sa_flags   : int;
-    end record;
-    pragma Convention (C, struct_sigaction);
-    type struct_sigaction_ptr is access all struct_sigaction;
- 
-    SA_SIGINFO  : constant := 16#80#;
- 
-    SIG_BLOCK   : constant := 0;
-    SIG_UNBLOCK : constant := 1;
-    SIG_SETMASK : constant := 2;
- 
-    SIG_DFL : constant := 0;
-    SIG_IGN : constant := 1;
- 
-    function sigaction
-      (sig  : Signal;
-       act  : struct_sigaction_ptr;
-       oact : struct_sigaction_ptr) return int;
-    pragma Import (C, sigaction, "sigaction");
- 
-    ----------
-    -- Time --
-    ----------
- 
-    Time_Slice_Supported : constant Boolean := True;
-    --  Indicates wether time slicing is supported
- 
-    type timespec is private;
- 
-    type clockid_t is private;
- 
-    CLOCK_REALTIME : constant clockid_t;
- 
-    function clock_gettime
-      (clock_id : clockid_t;
-       tp       : access timespec) return int;
-    pragma Inline (clock_gettime);
-    --  LynxOS has non standard clock_gettime
- 
-    function To_Duration (TS : timespec) return Duration;
-    pragma Inline (To_Duration);
- 
-    function To_Timespec (D : Duration) return timespec;
-    pragma Inline (To_Timespec);
- 
-    type struct_timezone is record
-       tz_minuteswest : int;
-       tz_dsttime     : int;
-    end record;
-    pragma Convention (C, struct_timezone);
-    type struct_timezone_ptr is access all struct_timezone;
- 
-    type struct_timeval is private;
-    --  This is needed on systems that do not have clock_gettime()
-    --  but do have gettimeofday().
- 
-    function To_Duration (TV : struct_timeval) return Duration;
-    pragma Inline (To_Duration);
- 
-    function To_Timeval (D : Duration) return struct_timeval;
-    pragma Inline (To_Timeval);
- 
-    -------------------------
-    -- Priority Scheduling --
-    -------------------------
- 
-    SCHED_FIFO  : constant := 16#00200000#;
-    SCHED_RR    : constant := 16#00100000#;
-    SCHED_OTHER : constant := 16#00400000#;
- 
-    -------------
-    -- Process --
-    -------------
- 
-    type pid_t is private;
- 
-    function kill (pid : pid_t; sig : Signal) return int;
-    pragma Import (C, kill, "kill");
- 
-    function getpid return pid_t;
-    pragma Import (C, getpid, "getpid");
- 
-    ---------
-    -- LWP --
-    ---------
- 
-    function lwp_self return System.Address;
-    --  lwp_self does not exist on this thread library, revert to pthread_self
-    --  which is the closest approximation (with getpid). This function is
-    --  needed to share 7staprop.adb across POSIX-like targets.
-    pragma Import (C, lwp_self, "pthread_self");
- 
-    -------------
-    -- Threads --
-    -------------
- 
-    type Thread_Body is access
-      function (arg : System.Address) return System.Address;
-    type pthread_t           is private;
-    subtype Thread_Id        is pthread_t;
- 
-    type pthread_mutex_t     is limited private;
-    type pthread_cond_t      is limited private;
-    type st_t                is limited private;
-    type pthread_attr_t      is limited private;
-    type pthread_mutexattr_t is limited private;
-    type pthread_condattr_t  is limited private;
-    type pthread_key_t       is private;
- 
-    PTHREAD_CREATE_DETACHED : constant := 0;
- 
-    -----------
-    -- Stack --
-    -----------
- 
-    Stack_Base_Available : constant Boolean := False;
-    --  Indicates wether the stack base is available on this target.
- 
-    function Get_Stack_Base (thread : pthread_t) return Address;
-    pragma Inline (Get_Stack_Base);
-    --  returns the stack base of the specified thread.
-    --  Only call this function when Stack_Base_Available is True.
- 
-    function Get_Page_Size return size_t;
-    function Get_Page_Size return Address;
-    pragma Import (C, Get_Page_Size, "getpagesize");
-    --  returns the size of a page, or 0 if this is not relevant on this
-    --  target
- 
-    PROT_NONE  : constant := 0;
-    PROT_READ  : constant := 1;
-    PROT_WRITE : constant := 2;
-    PROT_EXEC  : constant := 4;
-    PROT_USER  : constant := 8;
-    PROT_ALL   : constant := PROT_READ + PROT_WRITE + PROT_EXEC + PROT_USER;
- 
-    PROT_ON    : constant := PROT_READ;
-    PROT_OFF   : constant := PROT_ALL;
- 
-    function mprotect (addr : Address; len : size_t; prot : int) return int;
-    pragma Import (C, mprotect);
- 
-    -------------------------
-    -- POSIX.1c  Section 3 --
-    -------------------------
- 
-    function sigwait
-      (set : access sigset_t;
-       sig : access Signal) return int;
-    pragma Inline (sigwait);
-    --  LynxOS has non standard sigwait
- 
-    function pthread_kill (thread : pthread_t; sig : Signal) return int;
-    pragma Import (C, pthread_kill, "pthread_kill");
- 
-    type sigset_t_ptr is access all sigset_t;
- 
-    function pthread_sigmask
-      (how  : int;
-       set  : sigset_t_ptr;
-       oset : sigset_t_ptr) return int;
-    pragma Import (C, pthread_sigmask, "sigprocmask");
- 
-    --------------------------
-    -- POSIX.1c  Section 11 --
-    --------------------------
- 
-    function pthread_mutexattr_init
-      (attr : access pthread_mutexattr_t) return int;
-    pragma Inline (pthread_mutexattr_init);
-    --  LynxOS has a nonstandard pthread_mutexattr_init
- 
-    function pthread_mutexattr_destroy
-      (attr : access pthread_mutexattr_t) return int;
-    pragma Inline (pthread_mutexattr_destroy);
-    --  Lynxos has a nonstandard pthread_mutexattr_destroy
- 
-    function pthread_mutex_init
-      (mutex : access pthread_mutex_t;
-       attr  : access pthread_mutexattr_t) return int;
-    pragma Inline (pthread_mutex_init);
-    --  LynxOS has a nonstandard pthread_mutex_init
- 
-    function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
-    pragma Inline (pthread_mutex_destroy);
-    --  LynxOS has a nonstandard pthread_mutex_destroy
- 
-    function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
-    pragma Inline (pthread_mutex_lock);
-    --  LynxOS has a nonstandard pthread_mutex_lock
- 
-    function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
-    pragma Inline (pthread_mutex_unlock);
-    --  LynxOS has a nonstandard pthread_mutex_unlock
- 
-    function pthread_condattr_init
-      (attr : access pthread_condattr_t) return int;
-    pragma Inline (pthread_condattr_init);
-    --  LynxOS has a nonstandard pthread_condattr_init
- 
-    function pthread_condattr_destroy
-      (attr : access pthread_condattr_t) return int;
-    pragma Inline (pthread_condattr_destroy);
-    --  LynxOS has a nonstandard pthread_condattr_destroy
- 
-    function pthread_cond_init
-      (cond : access pthread_cond_t;
-       attr : access pthread_condattr_t) return int;
-    pragma Inline (pthread_cond_init);
-    --  LynxOS has a non standard pthread_cond_init
- 
-    function pthread_cond_destroy (cond : access pthread_cond_t) return int;
-    pragma Inline (pthread_cond_destroy);
-    --  LynxOS has a nonstandard pthread_cond_destroy
- 
-    function pthread_cond_signal (cond : access pthread_cond_t) return int;
-    pragma Inline (pthread_cond_signal);
-    --  LynxOS has a nonstandard pthread_cond_signal
- 
-    function pthread_cond_wait
-      (cond  : access pthread_cond_t;
-       mutex : access pthread_mutex_t) return int;
-    pragma Inline (pthread_cond_wait);
-    --  LynxOS has a nonstandard pthread_cond_wait
- 
-    function pthread_cond_timedwait
-      (cond    : access pthread_cond_t;
-       mutex   : access pthread_mutex_t;
-       reltime : access timespec) return int;
-    pragma Inline (pthread_cond_timedwait);
-    --  LynxOS has a nonstandard pthrad_cond_timedwait
- 
-    Relative_Timed_Wait : constant Boolean := True;
-    --  pthread_cond_timedwait requires a relative delay time
- 
-    --------------------------
-    -- POSIX.1c  Section 13 --
-    --------------------------
- 
-    PTHREAD_PRIO_NONE    : constant := 0;
-    PTHREAD_PRIO_INHERIT : constant := 0;
-    PTHREAD_PRIO_PROTECT : constant := 0;
- 
-    type struct_sched_param is record
-       sched_priority : int;  --  scheduling priority
-    end record;
- 
-    function pthread_setschedparam
-      (thread : pthread_t;
-       policy : int;
-       param  : access struct_sched_param) return int;
-    pragma Inline (pthread_setschedparam);
-    --  LynxOS doesn't have pthread_setschedparam.
-    --  Instead, use pthread_setscheduler
- 
-    function pthread_mutexattr_setprotocol
-      (attr     : access pthread_mutexattr_t;
-       protocol : int) return int;
-    pragma Inline (pthread_mutexattr_setprotocol);
-    --  LynxOS doesn't have pthread_mutexattr_setprotocol
- 
-    function pthread_mutexattr_setprioceiling
-      (attr     : access pthread_mutexattr_t;
-       prioceiling : int) return int;
-    pragma Inline (pthread_mutexattr_setprioceiling);
-    --  LynxOS doesn't have pthread_mutexattr_setprioceiling
- 
-    function pthread_attr_setscope
-      (attr            : access pthread_attr_t;
-       contentionscope : int) return int;
-    --  LynxOS doesn't have pthread_attr_setscope: all threads have system scope
-    pragma Inline (pthread_attr_setscope);
- 
-    function pthread_attr_setschedpolicy
-      (attr   : access pthread_attr_t;
-       policy : int) return int;
-    pragma Import (C, pthread_attr_setschedpolicy, "pthread_attr_setsched");
- 
-    function sched_yield return int;
-    --   pragma Import (C, sched_yield, "sched_yield");
-    pragma Inline (sched_yield);
- 
-    ---------------------------
-    -- P1003.1c - Section 16 --
-    ---------------------------
- 
-    function pthread_attr_init (attributes : access pthread_attr_t) return int;
-    pragma Import (C, pthread_attr_init, "pthread_attr_create");
- 
-    function pthread_attr_destroy
-      (attributes : access pthread_attr_t) return int;
-    pragma Import (C, pthread_attr_destroy, "pthread_attr_delete");
- 
-    function pthread_attr_setdetachstate
-      (attr        : access pthread_attr_t;
-       detachstate : int) return int;
-    pragma Inline (pthread_attr_setdetachstate);
-    --  LynxOS doesn't have pthread_attr_setdetachstate
- 
-    function pthread_attr_setstacksize
-      (attr      : access pthread_attr_t;
-       stacksize : size_t) return int;
-    pragma Import (C, pthread_attr_setstacksize, "pthread_attr_setstacksize");
- 
-    function pthread_create
-      (thread        : access pthread_t;
-       attributes    : access pthread_attr_t;
-       start_routine : Thread_Body;
-       arg           : System.Address) return int;
-    pragma Inline (pthread_create);
-    --  LynxOS has a non standard pthread_create
- 
-    function pthread_detach (thread : pthread_t) return int;
-    pragma Inline (pthread_detach);
- 
-    procedure pthread_exit (status : System.Address);
-    pragma Import (C, pthread_exit, "pthread_exit");
- 
-    function pthread_self return pthread_t;
-    pragma Import (C, pthread_self, "pthread_self");
- 
-    --------------------------
-    -- POSIX.1c  Section 17 --
-    --------------------------
- 
-    function pthread_setspecific
-      (key   : pthread_key_t;
-       value : System.Address) return int;
-    pragma Inline (pthread_setspecific);
-    --  LynxOS has a non standard pthread_setspecific
- 
-    function pthread_getspecific (key : pthread_key_t) return System.Address;
-    pragma Inline (pthread_getspecific);
-    --  LynxOS has a non standard pthread_getspecific
- 
-    type destructor_pointer is access procedure (arg : System.Address);
- 
-    function pthread_key_create
-      (key        : access pthread_key_t;
-       destructor : destructor_pointer) return int;
-    pragma Inline (pthread_key_create);
-    --  LynxOS has a non standard pthread_keycreate
- 
-    procedure pthread_init;
-    --  This is a dummy procedure to share some GNULLI files
- 
- private
- 
-    type sigbit_array is array (1 .. 2) of long;
-    type sigset_t is record
-       sa_sigbits : sigbit_array;
-    end record;
-    pragma Convention (C_Pass_By_Copy, sigset_t);
- 
-    type pid_t is new long;
- 
-    type time_t is new long;
- 
-    type timespec is record
-       tv_sec  : time_t;
-       tv_nsec : long;
-    end record;
-    pragma Convention (C, timespec);
- 
-    type clockid_t is new unsigned_char;
-    CLOCK_REALTIME : constant clockid_t := 0;
- 
-    type struct_timeval is record
-       tv_sec  : time_t;
-       tv_usec : time_t;
-    end record;
-    pragma Convention (C, struct_timeval);
- 
-    type st_t is record
-       stksize      : int;
-       prio         : int;
-       inheritsched : int;
-       state        : int;
-       sched        : int;
-    end record;
-    pragma Convention (C, st_t);
- 
-    type pthread_attr_t is record
-       st                 : st_t;
-       pthread_attr_scope : int;  --  ignored
-    end record;
-    pragma Convention (C, pthread_attr_t);
- 
-    type pthread_condattr_t is new int;
- 
-    type pthread_mutexattr_t is new int;
- 
-    type tid_t is new short;
-    type pthread_t is new tid_t;
- 
-    type synch_ptr is access all pthread_mutex_t;
-    type pthread_mutex_t is record
-       w_count   : int;
-       mut_owner : int;
-       id        : unsigned;
-       next      : synch_ptr;
-    end record;
-    pragma Convention (C, pthread_mutex_t);
- 
-    type pthread_cond_t is new pthread_mutex_t;
- 
-    type pthread_key_t is new int;
- 
- end System.OS_Interface;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/53osinte.ads gcc-4.0.0/gcc/ada/53osinte.ads
*** gcc-3.4.3/gcc/ada/53osinte.ads	Fri Dec  5 10:24:04 2003
--- gcc-4.0.0/gcc/ada/53osinte.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,547 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   S Y S T E M . O S _ I N T E R F A C E                  --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --          Copyright (C) 1999-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a HPUX 11.0 (Native THREADS) version of this package.
- 
- --  This package encapsulates all direct interfaces to OS services
- --  that are needed by children of System.
- 
- --  PLEASE DO NOT add any with-clauses to this package
- --  or remove the pragma Elaborate_Body.
- --  It is designed to be a bottom-level (leaf) package.
- 
- with Interfaces.C;
- package System.OS_Interface is
-    pragma Preelaborate;
- 
-    pragma Linker_Options ("-lpthread");
- 
-    subtype int            is Interfaces.C.int;
-    subtype short          is Interfaces.C.short;
-    subtype long           is Interfaces.C.long;
-    subtype unsigned       is Interfaces.C.unsigned;
-    subtype unsigned_short is Interfaces.C.unsigned_short;
-    subtype unsigned_long  is Interfaces.C.unsigned_long;
-    subtype unsigned_char  is Interfaces.C.unsigned_char;
-    subtype plain_char     is Interfaces.C.plain_char;
-    subtype size_t         is Interfaces.C.size_t;
- 
-    -----------
-    -- Errno --
-    -----------
- 
-    function errno return int;
-    pragma Import (C, errno, "__get_errno");
- 
-    EAGAIN    : constant := 11;
-    EINTR     : constant := 4;
-    EINVAL    : constant := 22;
-    ENOMEM    : constant := 12;
-    ETIMEDOUT : constant := 238;
- 
-    -------------
-    -- Signals --
-    -------------
- 
-    Max_Interrupt : constant := 44;
-    type Signal is new int range 0 .. Max_Interrupt;
-    for Signal'Size use int'Size;
- 
-    SIGHUP     : constant := 1; --  hangup
-    SIGINT     : constant := 2; --  interrupt (rubout)
-    SIGQUIT    : constant := 3; --  quit (ASCD FS)
-    SIGILL     : constant := 4; --  illegal instruction (not reset)
-    SIGTRAP    : constant := 5; --  trace trap (not reset)
-    SIGIOT     : constant := 6; --  IOT instruction
-    SIGABRT    : constant := 6; --  used by abort, replace SIGIOT in the  future
-    SIGEMT     : constant := 7; --  EMT instruction
-    SIGFPE     : constant := 8; --  floating point exception
-    SIGKILL    : constant := 9; --  kill (cannot be caught or ignored)
-    SIGBUS     : constant := 10; --  bus error
-    SIGSEGV    : constant := 11; --  segmentation violation
-    SIGSYS     : constant := 12; --  bad argument to system call
-    SIGPIPE    : constant := 13; --  write on a pipe with no one to read it
-    SIGALRM    : constant := 14; --  alarm clock
-    SIGTERM    : constant := 15; --  software termination signal from kill
-    SIGUSR1    : constant := 16; --  user defined signal 1
-    SIGUSR2    : constant := 17; --  user defined signal 2
-    SIGCLD     : constant := 18; --  alias for SIGCHLD
-    SIGCHLD    : constant := 18; --  child status change
-    SIGPWR     : constant := 19; --  power-fail restart
-    SIGVTALRM  : constant := 20; --  virtual timer alarm
-    SIGPROF    : constant := 21; --  profiling timer alarm
-    SIGIO      : constant := 22; --  asynchronous I/O
-    SIGPOLL    : constant := 22; --  pollable event occurred
-    SIGWINCH   : constant := 23; --  window size change
-    SIGSTOP    : constant := 24; --  stop (cannot be caught or ignored)
-    SIGTSTP    : constant := 25; --  user stop requested from tty
-    SIGCONT    : constant := 26; --  stopped process has been continued
-    SIGTTIN    : constant := 27; --  background tty read attempted
-    SIGTTOU    : constant := 28; --  background tty write attempted
-    SIGURG     : constant := 29; --  urgent condition on IO channel
-    SIGLOST    : constant := 30; --  remote lock lost  (NFS)
-    SIGDIL     : constant := 32; --  DIL signal
-    SIGXCPU    : constant := 33; --  CPU time limit exceeded (setrlimit)
-    SIGXFSZ    : constant := 34; --  file size limit exceeded (setrlimit)
-    SIGCANCEL  : constant := 35; --  used for pthread cancellation.
-    SIGGFAULT  : constant := 36; --  Graphics framebuffer fault
- 
-    SIGADAABORT : constant := SIGABRT;
-    --  Note: on other targets, we usually use SIGABRT, but on HPUX, it
-    --  appears that SIGABRT can't be used in sigwait(), so we use SIGTERM.
- 
-    type Signal_Set is array (Natural range <>) of Signal;
- 
-    Unmasked    : constant Signal_Set :=
-      (SIGABRT, SIGPIPE, SIGBUS, SIGTRAP, SIGTTIN, SIGTTOU, SIGTSTP, SIGPROF,
-       SIGALRM, SIGVTALRM, SIGIO, SIGCHLD);
- 
-    Reserved    : constant Signal_Set := (SIGKILL, SIGSTOP);
- 
-    type sigset_t is private;
- 
-    function sigaddset (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigaddset, "sigaddset");
- 
-    function sigdelset (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigdelset, "sigdelset");
- 
-    function sigfillset (set : access sigset_t) return int;
-    pragma Import (C, sigfillset, "sigfillset");
- 
-    function sigismember (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigismember, "sigismember");
- 
-    function sigemptyset (set : access sigset_t) return int;
-    pragma Import (C, sigemptyset, "sigemptyset");
- 
-    type struct_sigaction is record
-       sa_handler : System.Address;
-       sa_mask    : sigset_t;
-       sa_flags   : int;
-    end record;
-    pragma Convention (C, struct_sigaction);
-    type struct_sigaction_ptr is access all struct_sigaction;
- 
-    SA_SIGINFO  : constant := 16#10#;
- 
-    SIG_BLOCK   : constant := 0;
-    SIG_UNBLOCK : constant := 1;
-    SIG_SETMASK : constant := 2;
- 
-    SIG_DFL : constant := 0;
-    SIG_IGN : constant := 1;
- 
-    function sigaction
-      (sig  : Signal;
-       act  : struct_sigaction_ptr;
-       oact : struct_sigaction_ptr) return int;
-    pragma Import (C, sigaction, "sigaction");
- 
-    ----------
-    -- Time --
-    ----------
- 
-    Time_Slice_Supported : constant Boolean := True;
-    --  Indicates wether time slicing is supported
- 
-    type timespec is private;
- 
-    type clockid_t is private;
- 
-    CLOCK_REALTIME : constant clockid_t;
- 
-    function clock_gettime
-      (clock_id : clockid_t;
-       tp       : access timespec) return int;
-    pragma Import (C, clock_gettime, "clock_gettime");
- 
-    function clock_getres
-      (clock_id : clockid_t;
-       res      : access timespec) return int;
-    pragma Import (C, clock_getres, "clock_getres");
- 
-    function To_Duration (TS : timespec) return Duration;
-    pragma Inline (To_Duration);
- 
-    function To_Timespec (D : Duration) return timespec;
-    pragma Inline (To_Timespec);
- 
-    type struct_timezone is record
-       tz_minuteswest : int;
-       tz_dsttime     : int;
-    end record;
-    pragma Convention (C, struct_timezone);
-    type struct_timezone_ptr is access all struct_timezone;
- 
-    type struct_timeval is private;
-    --  This is needed on systems that do not have clock_gettime()
-    --  but do have gettimeofday().
- 
-    function To_Duration (TV : struct_timeval) return Duration;
-    pragma Inline (To_Duration);
- 
-    function To_Timeval (D : Duration) return struct_timeval;
-    pragma Inline (To_Timeval);
- 
-    -------------------------
-    -- Priority Scheduling --
-    -------------------------
- 
-    SCHED_FIFO  : constant := 0;
-    SCHED_RR    : constant := 1;
-    SCHED_OTHER : constant := 2;
- 
-    -------------
-    -- Process --
-    -------------
- 
-    type pid_t is private;
- 
-    function kill (pid : pid_t; sig : Signal) return int;
-    pragma Import (C, kill, "kill");
- 
-    function getpid return pid_t;
-    pragma Import (C, getpid, "getpid");
- 
-    ---------
-    -- LWP --
-    ---------
- 
-    function lwp_self return System.Address;
-    pragma Import (C, lwp_self, "_lwp_self");
- 
-    -------------
-    -- Threads --
-    -------------
- 
-    type Thread_Body is access
-      function (arg : System.Address) return System.Address;
-    type pthread_t           is private;
-    subtype Thread_Id        is pthread_t;
- 
-    type pthread_mutex_t     is limited private;
-    type pthread_cond_t      is limited private;
-    type pthread_attr_t      is limited private;
-    type pthread_mutexattr_t is limited private;
-    type pthread_condattr_t  is limited private;
-    type pthread_key_t       is private;
- 
-    PTHREAD_CREATE_DETACHED : constant := 16#de#;
- 
-    -----------
-    -- Stack --
-    -----------
- 
-    Stack_Base_Available : constant Boolean := False;
-    --  Indicates wether the stack base is available on this target.
- 
-    function Get_Stack_Base (thread : pthread_t) return Address;
-    pragma Inline (Get_Stack_Base);
-    --  returns the stack base of the specified thread.
-    --  Only call this function when Stack_Base_Available is True.
- 
-    function Get_Page_Size return size_t;
-    function Get_Page_Size return Address;
-    pragma Import (C, Get_Page_Size, "getpagesize");
-    --  returns the size of a page, or 0 if this is not relevant on this
-    --  target
- 
-    PROT_NONE  : constant := 0;
-    PROT_READ  : constant := 1;
-    PROT_WRITE : constant := 2;
-    PROT_EXEC  : constant := 4;
-    PROT_ALL   : constant := PROT_READ + PROT_WRITE + PROT_EXEC;
- 
-    PROT_ON    : constant := PROT_READ;
-    PROT_OFF   : constant := PROT_ALL;
- 
-    function mprotect (addr : Address; len : size_t; prot : int) return int;
-    pragma Import (C, mprotect);
- 
-    ---------------------------------------
-    -- Nonstandard Thread Initialization --
-    ---------------------------------------
- 
-    procedure pthread_init;
-    pragma Inline (pthread_init);
-    --  This is a dummy procedure to share some GNULLI files
- 
-    -------------------------
-    -- POSIX.1c  Section 3 --
-    -------------------------
- 
-    function sigwait
-      (set : access sigset_t;
-       sig : access Signal) return int;
-    pragma Import (C, sigwait, "sigwait");
- 
-    function pthread_kill
-      (thread : pthread_t;
-       sig    : Signal) return int;
-    pragma Import (C, pthread_kill, "pthread_kill");
- 
-    type sigset_t_ptr is access all sigset_t;
- 
-    function pthread_sigmask
-      (how  : int;
-       set  : sigset_t_ptr;
-       oset : sigset_t_ptr) return int;
-    pragma Import (C, pthread_sigmask, "pthread_sigmask");
- 
-    --------------------------
-    -- POSIX.1c  Section 11 --
-    --------------------------
- 
-    function pthread_mutexattr_init
-      (attr : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
- 
-    function pthread_mutexattr_destroy
-      (attr : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
- 
-    function pthread_mutex_init
-      (mutex : access pthread_mutex_t;
-       attr  : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
- 
-    function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
- 
-    function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_mutex_lock, "pthread_mutex_lock");
- 
-    function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_mutex_unlock, "pthread_mutex_unlock");
- 
-    function pthread_condattr_init
-      (attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
- 
-    function pthread_condattr_destroy
-      (attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
- 
-    function pthread_cond_init
-      (cond : access pthread_cond_t;
-       attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_cond_init, "pthread_cond_init");
- 
-    function pthread_cond_destroy (cond : access pthread_cond_t) return int;
-    pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
- 
-    function pthread_cond_signal (cond : access pthread_cond_t) return int;
-    pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
- 
-    function pthread_cond_wait
-      (cond  : access pthread_cond_t;
-       mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_cond_wait, "pthread_cond_wait");
- 
-    function pthread_cond_timedwait
-      (cond    : access pthread_cond_t;
-       mutex   : access pthread_mutex_t;
-       abstime : access timespec) return int;
-    pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait");
- 
-    Relative_Timed_Wait : constant Boolean := False;
-    --  pthread_cond_timedwait requires an absolute delay time
- 
-    ----------------------------
-    --  POSIX.1c  Section 13  --
-    ----------------------------
- 
-    PTHREAD_PRIO_NONE    : constant := 16#100#;
-    PTHREAD_PRIO_PROTECT : constant := 16#200#;
-    PTHREAD_PRIO_INHERIT : constant := 16#400#;
- 
-    function pthread_mutexattr_setprotocol
-      (attr     : access pthread_mutexattr_t;
-       protocol : int) return int;
-    pragma Import (C, pthread_mutexattr_setprotocol);
- 
-    function pthread_mutexattr_setprioceiling
-      (attr     : access pthread_mutexattr_t;
-       prioceiling : int) return int;
-    pragma Import (C, pthread_mutexattr_setprioceiling);
- 
-    type Array_7_Int is array (0 .. 6) of int;
-    type struct_sched_param is record
-       sched_priority : int;
-       sched_reserved : Array_7_Int;
-    end record;
- 
-    function pthread_setschedparam
-      (thread : pthread_t;
-       policy : int;
-       param  : access struct_sched_param)
-      return int;
-    pragma Import (C, pthread_setschedparam, "pthread_setschedparam");
- 
-    function pthread_attr_setscope
-      (attr            : access pthread_attr_t;
-       contentionscope : int) return int;
-    pragma Import (C, pthread_attr_setscope, "pthread_attr_setscope");
- 
-    function pthread_attr_setinheritsched
-      (attr         : access pthread_attr_t;
-       inheritsched : int) return int;
-    pragma Import (C, pthread_attr_setinheritsched);
- 
-    function pthread_attr_setschedpolicy
-      (attr   : access pthread_attr_t;
-       policy : int) return int;
-    pragma Import (C, pthread_attr_setschedpolicy);
- 
-    function sched_yield return int;
-    pragma Import (C, sched_yield, "sched_yield");
- 
-    ---------------------------
-    -- P1003.1c - Section 16 --
-    ---------------------------
- 
-    function pthread_attr_init
-      (attributes : access pthread_attr_t) return int;
-    pragma Import (C, pthread_attr_init, "__pthread_attr_init_system");
- 
-    function pthread_attr_destroy
-      (attributes : access pthread_attr_t) return int;
-    pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
- 
-    function pthread_attr_setdetachstate
-      (attr        : access pthread_attr_t;
-       detachstate : int) return int;
-    pragma Import (C, pthread_attr_setdetachstate);
- 
-    function pthread_attr_setstacksize
-      (attr      : access pthread_attr_t;
-       stacksize : size_t) return int;
-    pragma Import (C, pthread_attr_setstacksize, "pthread_attr_setstacksize");
- 
-    function pthread_create
-      (thread        : access pthread_t;
-       attributes    : access pthread_attr_t;
-       start_routine : Thread_Body;
-       arg           : System.Address) return int;
-    pragma Import (C, pthread_create, "__pthread_create_system");
- 
-    procedure pthread_exit (status : System.Address);
-    pragma Import (C, pthread_exit, "pthread_exit");
- 
-    function pthread_self return pthread_t;
-    pragma Import (C, pthread_self, "pthread_self");
- 
-    --------------------------
-    -- POSIX.1c  Section 17 --
-    --------------------------
- 
-    function pthread_setspecific
-      (key   : pthread_key_t;
-       value : System.Address) return int;
-    pragma Import (C, pthread_setspecific, "pthread_setspecific");
- 
-    function pthread_getspecific (key : pthread_key_t) return System.Address;
-    pragma Import (C, pthread_getspecific, "pthread_getspecific");
- 
-    type destructor_pointer is access procedure (arg : System.Address);
- 
-    function pthread_key_create
-      (key        : access pthread_key_t;
-       destructor : destructor_pointer) return int;
-    pragma Import (C, pthread_key_create, "pthread_key_create");
- 
- private
- 
-    type unsigned_int_array_8 is array (0 .. 7) of unsigned;
-    type sigset_t is record
-       sigset : unsigned_int_array_8;
-    end record;
-    pragma Convention (C_Pass_By_Copy, sigset_t);
- 
-    type pid_t is new int;
- 
-    type time_t is new long;
- 
-    type timespec is record
-       tv_sec  : time_t;
-       tv_nsec : long;
-    end record;
-    pragma Convention (C, timespec);
- 
-    type clockid_t is new int;
-    CLOCK_REALTIME : constant clockid_t := 1;
- 
-    type struct_timeval is record
-       tv_sec  : time_t;
-       tv_usec : time_t;
-    end record;
-    pragma Convention (C, struct_timeval);
- 
-    type pthread_attr_t is new int;
-    type pthread_condattr_t is new int;
-    type pthread_mutexattr_t is new int;
-    type pthread_t is new int;
- 
-    type short_array is array (Natural range <>) of short;
-    type int_array is array (Natural range <>) of int;
- 
-    type pthread_mutex_t is record
-       m_short  : short_array (0 .. 1);
-       m_int    : int;
-       m_int1   : int_array (0 .. 3);
-       m_pad    : int;  --  needed for 32 bit ABI, but *not* for 64 bit
-       m_ptr    : System.Address;
-       m_int2   : int_array (0 .. 1);
-       m_int3   : int_array (0 .. 3);
-       m_short2 : short_array (0 .. 1);
-       m_int4   : int_array (0 .. 4);
-       m_int5   : int_array (0 .. 1);
-    end record;
-    pragma Convention (C, pthread_mutex_t);
- 
-    type pthread_cond_t is record
-       c_short : short_array (0 .. 1);
-       c_int   : int;
-       c_int1  : int_array (0 .. 3);
-       m_pad   : int;  --  needed for 32 bit ABI, but *not* for 64 bit
-       m_ptr   : System.Address;
-       c_int2  : int_array (0 .. 1);
-       c_int3  : int_array (0 .. 1);
-       c_int4  : int_array (0 .. 1);
-    end record;
-    pragma Convention (C, pthread_cond_t);
- 
-    type pthread_key_t is new int;
- 
- end System.OS_Interface;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/54osinte.ads gcc-4.0.0/gcc/ada/54osinte.ads
*** gcc-3.4.3/gcc/ada/54osinte.ads	Fri Dec  5 10:24:04 2003
--- gcc-4.0.0/gcc/ada/54osinte.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,533 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   S Y S T E M . O S _ I N T E R F A C E                  --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --            Copyright (C) 2000-2003 Ada Core Technologies, Inc.           --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a Solaris (POSIX Threads) version of this package.
- 
- --  This package encapsulates all direct interfaces to OS services
- --  that are needed by children of System.
- 
- --  PLEASE DO NOT add any with-clauses to this package
- --  or remove the pragma Elaborate_Body.
- --  It is designed to be a bottom-level (leaf) package.
- 
- with Interfaces.C;
- package System.OS_Interface is
-    pragma Preelaborate;
- 
-    pragma Linker_Options ("-lposix4");
-    pragma Linker_Options ("-lpthread");
- 
-    subtype int            is Interfaces.C.int;
-    subtype short          is Interfaces.C.short;
-    subtype long           is Interfaces.C.long;
-    subtype unsigned       is Interfaces.C.unsigned;
-    subtype unsigned_short is Interfaces.C.unsigned_short;
-    subtype unsigned_long  is Interfaces.C.unsigned_long;
-    subtype unsigned_char  is Interfaces.C.unsigned_char;
-    subtype plain_char     is Interfaces.C.plain_char;
-    subtype size_t         is Interfaces.C.size_t;
- 
-    -----------
-    -- Errno --
-    -----------
- 
-    function errno return int;
-    pragma Import (C, errno, "__get_errno");
- 
-    EAGAIN    : constant := 11;
-    EINTR     : constant := 4;
-    EINVAL    : constant := 22;
-    ENOMEM    : constant := 12;
-    ETIMEDOUT : constant := 145;
- 
-    -------------
-    -- Signals --
-    -------------
- 
-    Max_Interrupt : constant := 45;
-    type Signal is new int range 0 .. Max_Interrupt;
-    for Signal'Size use int'Size;
- 
-    SIGHUP      : constant := 1; --  hangup
-    SIGINT      : constant := 2; --  interrupt (rubout)
-    SIGQUIT     : constant := 3; --  quit (ASCD FS)
-    SIGILL      : constant := 4; --  illegal instruction (not reset)
-    SIGTRAP     : constant := 5; --  trace trap (not reset)
-    SIGIOT      : constant := 6; --  IOT instruction
-    SIGABRT     : constant := 6; --  used by abort, replace SIGIOT in the future
-    SIGEMT      : constant := 7; --  EMT instruction
-    SIGFPE      : constant := 8; --  floating point exception
-    SIGKILL     : constant := 9; --  kill (cannot be caught or ignored)
-    SIGBUS      : constant := 10; --  bus error
-    SIGSEGV     : constant := 11; --  segmentation violation
-    SIGSYS      : constant := 12; --  bad argument to system call
-    SIGPIPE     : constant := 13; --  write on a pipe with no one to read it
-    SIGALRM     : constant := 14; --  alarm clock
-    SIGTERM     : constant := 15; --  software termination signal from kill
-    SIGUSR1     : constant := 16; --  user defined signal 1
-    SIGUSR2     : constant := 17; --  user defined signal 2
-    SIGCLD      : constant := 18; --  alias for SIGCHLD
-    SIGCHLD     : constant := 18; --  child status change
-    SIGPWR      : constant := 19; --  power-fail restart
-    SIGWINCH    : constant := 20; --  window size change
-    SIGURG      : constant := 21; --  urgent condition on IO channel
-    SIGPOLL     : constant := 22; --  pollable event occurred
-    SIGIO       : constant := 22; --  I/O possible (Solaris SIGPOLL alias)
-    SIGSTOP     : constant := 23; --  stop (cannot be caught or ignored)
-    SIGTSTP     : constant := 24; --  user stop requested from tty
-    SIGCONT     : constant := 25; --  stopped process has been continued
-    SIGTTIN     : constant := 26; --  background tty read attempted
-    SIGTTOU     : constant := 27; --  background tty write attempted
-    SIGVTALRM   : constant := 28; --  virtual timer expired
-    SIGPROF     : constant := 29; --  profiling timer expired
-    SIGXCPU     : constant := 30; --  CPU time limit exceeded
-    SIGXFSZ     : constant := 31; --  filesize limit exceeded
-    SIGWAITING  : constant := 32; --  process's lwps blocked (Solaris)
-    SIGLWP      : constant := 33; --  used by thread library (Solaris)
-    SIGFREEZE   : constant := 34; --  used by CPR (Solaris)
-    SIGTHAW     : constant := 35; --  used by CPR (Solaris)
-    SIGCANCEL   : constant := 36; --  thread cancellation signal (libthread)
- 
-    SIGADAABORT : constant := SIGABRT;
- 
-    type Signal_Set is array (Natural range <>) of Signal;
- 
-    Unmasked    : constant Signal_Set := (SIGTRAP, SIGLWP, SIGPROF);
- 
-    --  Following signals should not be disturbed.
-    --  See c-posix-signals.c in FLORIST
- 
-    Reserved    : constant Signal_Set :=
-      (SIGKILL, SIGSTOP, SIGWAITING, SIGCANCEL);
- 
-    type sigset_t is private;
- 
-    function sigaddset (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigaddset, "sigaddset");
- 
-    function sigdelset (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigdelset, "sigdelset");
- 
-    function sigfillset (set : access sigset_t) return int;
-    pragma Import (C, sigfillset, "sigfillset");
- 
-    function sigismember (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigismember, "sigismember");
- 
-    function sigemptyset (set : access sigset_t) return int;
-    pragma Import (C, sigemptyset, "sigemptyset");
- 
-    type struct_sigaction is record
-       sa_flags   : int;
-       sa_handler : System.Address;
-       sa_mask    : sigset_t;
-       sa_resv1   : int;
-       sa_resv2   : int;
-    end record;
-    pragma Convention (C, struct_sigaction);
-    type struct_sigaction_ptr is access all struct_sigaction;
- 
-    SA_SIGINFO : constant := 16#0008#;
- 
-    SIG_BLOCK   : constant := 1;
-    SIG_UNBLOCK : constant := 2;
-    SIG_SETMASK : constant := 3;
- 
-    SIG_DFL : constant := 0;
-    SIG_IGN : constant := 1;
- 
-    function sigaction
-      (sig  : Signal;
-       act  : struct_sigaction_ptr;
-       oact : struct_sigaction_ptr) return int;
-    pragma Import (C, sigaction, "sigaction");
- 
-    ----------
-    -- Time --
-    ----------
- 
-    Time_Slice_Supported : constant Boolean := True;
-    --  Indicates wether time slicing is supported
- 
-    type timespec is private;
- 
-    type clockid_t is private;
- 
-    CLOCK_REALTIME : constant clockid_t;
- 
-    function clock_gettime
-      (clock_id : clockid_t;
-       tp       : access timespec) return int;
-    pragma Import (C, clock_gettime, "clock_gettime");
- 
-    function To_Duration (TS : timespec) return Duration;
-    pragma Inline (To_Duration);
- 
-    function To_Timespec (D : Duration) return timespec;
-    pragma Inline (To_Timespec);
- 
-    type struct_timeval is private;
- 
-    function To_Duration (TV : struct_timeval) return Duration;
-    pragma Inline (To_Duration);
- 
-    function To_Timeval (D : Duration) return struct_timeval;
-    pragma Inline (To_Timeval);
- 
-    -------------------------
-    -- Priority Scheduling --
-    -------------------------
- 
-    SCHED_FIFO  : constant := 1;
-    SCHED_RR    : constant := 2;
-    SCHED_OTHER : constant := 0;
- 
-    -------------
-    -- Process --
-    -------------
- 
-    type pid_t is private;
- 
-    function kill (pid : pid_t; sig : Signal) return int;
-    pragma Import (C, kill, "kill");
- 
-    function getpid return pid_t;
-    pragma Import (C, getpid, "getpid");
- 
-    ---------
-    -- LWP --
-    ---------
- 
-    function lwp_self return System.Address;
-    pragma Import (C, lwp_self, "_lwp_self");
- 
-    -------------
-    -- Threads --
-    -------------
- 
-    type Thread_Body is access
-      function (arg : System.Address) return System.Address;
-    type pthread_t           is private;
-    subtype Thread_Id        is pthread_t;
- 
-    type pthread_mutex_t     is limited private;
-    type pthread_cond_t      is limited private;
-    type pthread_attr_t      is limited private;
-    type pthread_mutexattr_t is limited private;
-    type pthread_condattr_t  is limited private;
-    type pthread_key_t       is private;
- 
-    PTHREAD_CREATE_DETACHED : constant := 16#40#;
- 
-    -----------
-    -- Stack --
-    -----------
- 
-    Stack_Base_Available : constant Boolean := False;
-    --  Indicates wether the stack base is available on this target.
- 
-    function Get_Stack_Base (thread : pthread_t) return Address;
-    pragma Inline (Get_Stack_Base);
-    --  returns the stack base of the specified thread.
-    --  Only call this function when Stack_Base_Available is True.
- 
-    function Get_Page_Size return size_t;
-    function Get_Page_Size return Address;
-    pragma Import (C, Get_Page_Size, "getpagesize");
-    --  returns the size of a page, or 0 if this is not relevant on this
-    --  target
- 
-    PROT_NONE  : constant := 0;
-    PROT_READ  : constant := 1;
-    PROT_WRITE : constant := 2;
-    PROT_EXEC  : constant := 4;
-    PROT_ALL   : constant := PROT_READ + PROT_WRITE + PROT_EXEC;
- 
-    PROT_ON    : constant := PROT_READ;
-    PROT_OFF   : constant := PROT_ALL;
- 
-    function mprotect (addr : Address; len : size_t; prot : int) return int;
-    pragma Import (C, mprotect);
- 
-    ---------------------------------------
-    -- Nonstandard Thread Initialization --
-    ---------------------------------------
- 
-    procedure pthread_init;
-    --  This is a dummy procedure to share some GNULLI files
- 
-    -------------------------
-    -- POSIX.1c  Section 3 --
-    -------------------------
- 
-    function sigwait
-      (set : access sigset_t;
-       sig : access Signal) return int;
-    pragma Import (C, sigwait, "__posix_sigwait");
- 
-    function pthread_kill
-      (thread : pthread_t;
-       sig    : Signal) return int;
-    pragma Import (C, pthread_kill, "pthread_kill");
- 
-    type sigset_t_ptr is access all sigset_t;
- 
-    function pthread_sigmask
-      (how  : int;
-       set  : sigset_t_ptr;
-       oset : sigset_t_ptr) return int;
-    pragma Import (C, pthread_sigmask, "pthread_sigmask");
- 
-    --------------------------
-    -- POSIX.1c  Section 11 --
-    --------------------------
- 
-    function pthread_mutexattr_init
-      (attr : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
- 
-    function pthread_mutexattr_destroy
-      (attr : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
- 
-    function pthread_mutex_init
-      (mutex : access pthread_mutex_t;
-       attr  : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
- 
-    function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
- 
-    function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_mutex_lock, "pthread_mutex_lock");
- 
-    function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_mutex_unlock, "pthread_mutex_unlock");
- 
-    function pthread_condattr_init
-      (attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
- 
-    function pthread_condattr_destroy
-      (attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
- 
-    function pthread_cond_init
-      (cond : access pthread_cond_t;
-       attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_cond_init, "pthread_cond_init");
- 
-    function pthread_cond_destroy (cond : access pthread_cond_t) return int;
-    pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
- 
-    function pthread_cond_signal (cond : access pthread_cond_t) return int;
-    pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
- 
-    function pthread_cond_wait
-      (cond  : access pthread_cond_t;
-       mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_cond_wait, "pthread_cond_wait");
- 
-    function pthread_cond_timedwait
-      (cond    : access pthread_cond_t;
-       mutex   : access pthread_mutex_t;
-       abstime : access timespec) return int;
-    pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait");
- 
-    Relative_Timed_Wait : constant Boolean := False;
-    --  pthread_cond_timedwait requires an absolute delay time
- 
-    --------------------------
-    -- POSIX.1c  Section 13 --
-    --------------------------
- 
-    PTHREAD_PRIO_NONE    : constant := 0;
-    PTHREAD_PRIO_INHERIT : constant := 16#10#;
-    PTHREAD_PRIO_PROTECT : constant := 16#20#;
- 
-    function pthread_mutexattr_setprotocol
-      (attr     : access pthread_mutexattr_t;
-       protocol : int) return int;
-    pragma Import (C, pthread_mutexattr_setprotocol);
- 
-    function pthread_mutexattr_setprioceiling
-      (attr        : access pthread_mutexattr_t;
-       prioceiling : int) return int;
-    pragma Import (C, pthread_mutexattr_setprioceiling);
- 
-    type Array_8_Int is array (0 .. 7) of int;
-    type struct_sched_param is record
-       sched_priority : int;
-       sched_pad      : Array_8_Int;
-    end record;
- 
-    function pthread_setschedparam
-      (thread : pthread_t;
-       policy : int;
-       param  : access struct_sched_param) return int;
-    pragma Import (C, pthread_setschedparam, "pthread_setschedparam");
- 
-    function pthread_attr_setscope
-      (attr            : access pthread_attr_t;
-       contentionscope : int) return int;
-    pragma Import (C, pthread_attr_setscope, "pthread_attr_setscope");
- 
-    function pthread_attr_setinheritsched
-      (attr         : access pthread_attr_t;
-       inheritsched : int) return int;
-    pragma Import (C, pthread_attr_setinheritsched);
- 
-    function pthread_attr_setschedpolicy
-      (attr   : access pthread_attr_t;
-       policy : int) return int;
-    pragma Import (C, pthread_attr_setschedpolicy);
- 
-    function sched_yield return int;
-    pragma Import (C, sched_yield, "sched_yield");
- 
-    ---------------------------
-    -- P1003.1c - Section 16 --
-    ---------------------------
- 
-    function pthread_attr_init (attributes : access pthread_attr_t) return int;
-    pragma Import (C, pthread_attr_init, "pthread_attr_init");
- 
-    function pthread_attr_destroy
-      (attributes : access pthread_attr_t) return int;
-    pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
- 
-    function pthread_attr_setdetachstate
-      (attr        : access pthread_attr_t;
-       detachstate : int) return int;
-    pragma Import (C, pthread_attr_setdetachstate);
- 
-    function pthread_attr_setstacksize
-      (attr      : access pthread_attr_t;
-       stacksize : size_t) return int;
-    pragma Import (C, pthread_attr_setstacksize);
- 
-    function pthread_create
-      (thread        : access pthread_t;
-       attributes    : access pthread_attr_t;
-       start_routine : Thread_Body;
-       arg           : System.Address) return int;
-    pragma Import (C, pthread_create, "pthread_create");
- 
-    procedure pthread_exit (status : System.Address);
-    pragma Import (C, pthread_exit, "pthread_exit");
- 
-    function pthread_self return pthread_t;
-    pragma Import (C, pthread_self, "pthread_self");
- 
-    --------------------------
-    -- POSIX.1c  Section 17 --
-    --------------------------
- 
-    function pthread_setspecific
-      (key   : pthread_key_t;
-       value : System.Address) return int;
-    pragma Import (C, pthread_setspecific, "pthread_setspecific");
- 
-    function pthread_getspecific (key : pthread_key_t) return System.Address;
-    pragma Import (C, pthread_getspecific, "pthread_getspecific");
- 
-    type destructor_pointer is access procedure (arg : System.Address);
- 
-    function pthread_key_create
-      (key        : access pthread_key_t;
-       destructor : destructor_pointer) return int;
-    pragma Import (C, pthread_key_create, "pthread_key_create");
- 
- private
- 
-    type array_type_1 is array (Integer range 0 .. 3) of unsigned_long;
-    type sigset_t is record
-       X_X_sigbits  : array_type_1;
-    end record;
-    pragma Convention (C, sigset_t);
- 
-    type pid_t is new long;
- 
-    type time_t is new long;
- 
-    type timespec is record
-       tv_sec  : time_t;
-       tv_nsec : long;
-    end record;
-    pragma Convention (C, timespec);
- 
-    type clockid_t is new int;
-    CLOCK_REALTIME : constant clockid_t := 0;
- 
-    type struct_timeval is record
-       tv_sec  : time_t;
-       tv_usec : time_t;
-    end record;
-    pragma Convention (C, struct_timeval);
- 
-    type pthread_attr_t is record
-       pthread_attrp : System.Address;
-    end record;
-    pragma Convention (C, pthread_attr_t);
- 
-    type pthread_condattr_t is record
-       pthread_condattrp : System.Address;
-    end record;
-    pragma Convention (C, pthread_condattr_t);
- 
-    type pthread_mutexattr_t is record
-       pthread_mutexattrp : System.Address;
-    end record;
-    pragma Convention (C, pthread_mutexattr_t);
- 
-    type pthread_t is new unsigned;
- 
-    type uint64_t is mod 2 ** 64;
- 
-    type pthread_mutex_t is record
-       pthread_mutex_flags   : uint64_t;
-       pthread_mutex_owner64 : uint64_t;
-       pthread_mutex_data    : uint64_t;
-    end record;
-    pragma Convention (C, pthread_mutex_t);
-    type pthread_mutex_t_ptr is access pthread_mutex_t;
- 
-    type pthread_cond_t is record
-       pthread_cond_flags : uint64_t;
-       pthread_cond_data  : uint64_t;
-    end record;
-    pragma Convention (C, pthread_cond_t);
- 
-    type pthread_key_t is new unsigned;
- 
- end System.OS_Interface;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/55osinte.adb gcc-4.0.0/gcc/ada/55osinte.adb
*** gcc-3.4.3/gcc/ada/55osinte.adb	Thu Nov 20 17:51:26 2003
--- gcc-4.0.0/gcc/ada/55osinte.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,108 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                 GNU ADA RUNTIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   S Y S T E M . O S _ I N T E R F A C E                  --
- --                                                                          --
- --                                   B o d y                                --
- --                                                                          --
- --          Copyright (C) 1991-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University. It is --
- -- now maintained by Ada Core Technologies Inc. in cooperation with Florida --
- -- State University (http://www.gnat.com).                                  --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the FreeBSD THREADS version of this package
- 
- with Interfaces.C; use Interfaces.C;
- 
- package body System.OS_Interface is
- 
-    function Errno return int is
-       type int_ptr is access all int;
- 
-       function internal_errno return int_ptr;
-       pragma Import (C, internal_errno, "__error");
-    begin
-       return (internal_errno.all);
-    end Errno;
- 
-    function Get_Stack_Base (thread : pthread_t) return Address is
-       pragma Unreferenced (thread);
-    begin
-       return (0);
-    end Get_Stack_Base;
- 
-    procedure pthread_init is
-    begin
-       null;
-    end pthread_init;
- 
-    -----------------
-    -- To_Duration --
-    -----------------
- 
-    function To_Duration (TS : timespec) return Duration is
-    begin
-       return Duration (TS.ts_sec) + Duration (TS.ts_nsec) / 10#1#E9;
-    end To_Duration;
- 
-    -----------------
-    -- To_Timespec --
-    -----------------
- 
-    function To_Timespec (D : Duration) return timespec is
-       S : time_t;
-       F : Duration;
-    begin
-       S := time_t (Long_Long_Integer (D));
-       F := D - Duration (S);
- 
-       --  If F has negative value due to a round-up, adjust for positive F
-       --  value.
-       if F < 0.0 then S := S - 1; F := F + 1.0; end if;
-       return timespec'(ts_sec => S,
-         ts_nsec => long (Long_Long_Integer (F * 10#1#E9)));
-    end To_Timespec;
- 
- 
-    function To_Duration (TV : struct_timeval) return Duration is
-    begin
-       return Duration (TV.tv_sec) + Duration (TV.tv_usec) / 10#1#E6;
-    end To_Duration;
- 
-    function To_Timeval (D : Duration) return struct_timeval is
-       S : long;
-       F : Duration;
-    begin
-       S := long (Long_Long_Integer (D));
-       F := D - Duration (S);
- 
-       --  If F has negative value due to a round-up, adjust for positive F
-       --  value.
-       if F < 0.0 then S := S - 1; F := F + 1.0; end if;
-       return struct_timeval'(tv_sec => S,
-         tv_usec => long (Long_Long_Integer (F * 10#1#E6)));
-    end To_Timeval;
- 
- end System.OS_Interface;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/55osinte.ads gcc-4.0.0/gcc/ada/55osinte.ads
*** gcc-3.4.3/gcc/ada/55osinte.ads	Fri Dec  5 10:24:04 2003
--- gcc-4.0.0/gcc/ada/55osinte.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,632 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                 GNU ADA RUNTIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   S Y S T E M . O S _ I N T E R F A C E                  --
- --                                                                          --
- --                                   S p e c                                --
- --                                                                          --
- --          Copyright (C) 1991-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University. It is --
- -- now maintained by Ada Core Technologies Inc. in cooperation with Florida --
- -- State University (http://www.gnat.com).                                  --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the FreeBSD PTHREADS version of this package
- 
- with Interfaces.C;
- package System.OS_Interface is
-    pragma Preelaborate;
- 
-    pragma Linker_Options ("-pthread");
- 
-    subtype int            is Interfaces.C.int;
-    subtype short          is Interfaces.C.short;
-    subtype long           is Interfaces.C.long;
-    subtype unsigned       is Interfaces.C.unsigned;
-    subtype unsigned_short is Interfaces.C.unsigned_short;
-    subtype unsigned_long  is Interfaces.C.unsigned_long;
-    subtype unsigned_char  is Interfaces.C.unsigned_char;
-    subtype plain_char     is Interfaces.C.plain_char;
-    subtype size_t         is Interfaces.C.size_t;
- 
-    -----------
-    -- Errno --
-    -----------
- 
-    function Errno return int;
-    pragma Inline (Errno);
- 
-    EAGAIN   : constant := 35;
-    EINTR    : constant := 4;
-    EINVAL   : constant := 22;
-    ENOMEM   : constant := 12;
-    ETIMEDOUT    : constant := 60;
- 
-    -------------
-    -- Signals --
-    -------------
- 
-    Max_Interrupt : constant := 31;
-    type Signal is new int range 0 .. Max_Interrupt;
-    for Signal'Size use int'Size;
- 
-    SIGHUP     : constant := 1; --  hangup
-    SIGINT     : constant := 2; --  interrupt (rubout)
-    SIGQUIT    : constant := 3; --  quit (ASCD FS)
-    SIGILL     : constant := 4; --  illegal instruction (not reset)
-    SIGTRAP    : constant := 5; --  trace trap (not reset)
-    SIGIOT     : constant := 6; --  IOT instruction
-    SIGABRT    : constant := 6; --  used by abort, replace SIGIOT in the  future
-    SIGEMT     : constant := 7; --  EMT instruction
-    SIGFPE     : constant := 8; --  floating point exception
-    SIGKILL    : constant := 9; --  kill (cannot be caught or ignored)
-    SIGBUS     : constant := 10; --  bus error
-    SIGSEGV    : constant := 11; --  segmentation violation
-    SIGSYS     : constant := 12; --  bad argument to system call
-    SIGPIPE    : constant := 13; --  write on a pipe with no one to read it
-    SIGALRM    : constant := 14; --  alarm clock
-    SIGTERM    : constant := 15; --  software termination signal from kill
-    SIGURG     : constant := 16; --  urgent condition on IO channel
-    SIGSTOP    : constant := 17; --  stop (cannot be caught or ignored)
-    SIGTSTP    : constant := 18; --  user stop requested from tty
-    SIGCONT    : constant := 19; --  stopped process has been continued
-    SIGCLD     : constant := 20; --  alias for SIGCHLD
-    SIGCHLD    : constant := 20; --  child status change
-    SIGTTIN    : constant := 21; --  background tty read attempted
-    SIGTTOU    : constant := 22; --  background tty write attempted
-    SIGIO      : constant := 23; --  I/O possible (Solaris SIGPOLL alias)
-    SIGXCPU    : constant := 24; --  CPU time limit exceeded
-    SIGXFSZ    : constant := 25; --  filesize limit exceeded
-    SIGVTALRM  : constant := 26; --  virtual timer expired
-    SIGPROF    : constant := 27; --  profiling timer expired
-    SIGWINCH   : constant := 28; --  window size change
-    SIGINFO    : constant := 29; --  information request (NetBSD/FreeBSD)
-    SIGUSR1    : constant := 30; --  user defined signal 1
-    SIGUSR2    : constant := 31; --  user defined signal 2
- 
-    SIGADAABORT : constant := SIGABRT;
-    --  Change this if you want to use another signal for task abort.
-    --  SIGTERM might be a good one.
- 
-    type Signal_Set is array (Natural range <>) of Signal;
- 
-    --  Interrupts that must be unmasked at all times.  FreeBSD
-    --  pthreads will not allow an application to mask out any
-    --  interrupt needed by the threads library.
-    Unmasked : constant Signal_Set :=
-      (SIGTRAP, SIGBUS, SIGTTIN, SIGTTOU, SIGTSTP);
- 
-    --  FreeBSD will uses SIGPROF for timing.  Do not allow a
-    --  handler to attach to this signal.
-    Reserved : constant Signal_Set := (0 .. 0 => SIGPROF);
- 
-    type sigset_t is private;
- 
-    function sigaddset
-      (set : access sigset_t;
-       sig : Signal) return int;
-    pragma Import (C, sigaddset, "sigaddset");
- 
-    function sigdelset
-      (set : access sigset_t;
-       sig : Signal) return int;
-    pragma Import (C, sigdelset, "sigdelset");
- 
-    function sigfillset (set : access sigset_t) return int;
-    pragma Import (C, sigfillset, "sigfillset");
- 
-    function sigismember
-      (set : access sigset_t;
-       sig : Signal) return int;
-    pragma Import (C, sigismember, "sigismember");
- 
-    function sigemptyset (set : access sigset_t) return int;
-    pragma Import (C, sigemptyset, "sigemptyset");
- 
-    --  sigcontext is architecture dependent, so define it private
-    type struct_sigcontext is private;
- 
-    type old_struct_sigaction is record
-       sa_handler : System.Address;
-       sa_mask    : sigset_t;
-       sa_flags   : int;
-    end record;
-    pragma Convention (C, old_struct_sigaction);
- 
-    type new_struct_sigaction is record
-       sa_handler : System.Address;
-       sa_flags   : int;
-       sa_mask    : sigset_t;
-    end record;
-    pragma Convention (C, new_struct_sigaction);
- 
-    subtype struct_sigaction is new_struct_sigaction;
-    type struct_sigaction_ptr is access all struct_sigaction;
- 
-    SIG_BLOCK   : constant := 1;
-    SIG_UNBLOCK : constant := 2;
-    SIG_SETMASK : constant := 3;
- 
-    SIG_DFL : constant := 0;
-    SIG_IGN : constant := 1;
- 
-    SA_SIGINFO : constant := 16#0040#;
- 
-    function sigaction
-      (sig  : Signal;
-       act  : struct_sigaction_ptr;
-       oact : struct_sigaction_ptr) return int;
-    pragma Import (C, sigaction, "sigaction");
- 
-    ----------
-    -- Time --
-    ----------
- 
-    Time_Slice_Supported : constant Boolean := True;
-    --  Indicates wether time slicing is supported (i.e SCHED_RR is supported)
- 
-    type timespec is private;
- 
-    function nanosleep (rqtp, rmtp : access timespec)  return int;
-    pragma Import (C, nanosleep, "nanosleep");
- 
-    type clockid_t is private;
- 
-    CLOCK_REALTIME : constant clockid_t;
- 
-    function clock_gettime
-      (clock_id : clockid_t;
-       tp       : access timespec)
-       return int;
-    pragma Import (C, clock_gettime, "clock_gettime");
- 
-    function To_Duration (TS : timespec) return Duration;
-    pragma Inline (To_Duration);
- 
-    function To_Timespec (D : Duration) return timespec;
-    pragma Inline (To_Timespec);
- 
-    type struct_timezone is record
-       tz_minuteswest : int;
-       tz_dsttime     : int;
-    end record;
-    pragma Convention (C, struct_timezone);
-    type struct_timeval is private;
-    --  This is needed on systems that do not have clock_gettime()
-    --  but do have gettimeofday().
- 
-    function To_Duration (TV : struct_timeval) return Duration;
-    pragma Inline (To_Duration);
- 
-    function To_Timeval (D : Duration) return struct_timeval;
-    pragma Inline (To_Timeval);
- 
-    function gettimeofday
-      (tv : access struct_timeval;
-       tz : System.Address) return int;
-    pragma Import (C, gettimeofday, "gettimeofday");
- 
-    procedure usleep (useconds : unsigned_long);
-    pragma Import (C, usleep, "usleep");
- 
-    -------------------------
-    -- Priority Scheduling --
-    -------------------------
- 
-    SCHED_FIFO  : constant := 1;
-    SCHED_OTHER : constant := 2;
-    SCHED_RR    : constant := 3;
- 
-    -------------
-    -- Process --
-    -------------
- 
-    type pid_t is private;
- 
-    Self_PID : constant pid_t;
- 
-    function kill (pid : pid_t; sig : Signal) return int;
-    pragma Import (C, kill, "kill");
- 
-    function getpid return pid_t;
-    pragma Import (C, getpid, "getpid");
- 
-    ---------
-    -- LWP --
-    ---------
- 
-    function lwp_self return System.Address;
-    --  lwp_self does not exist on this thread library, revert to pthread_self
-    --  which is the closest approximation (with getpid). This function is
-    --  needed to share 7staprop.adb across POSIX-like targets.
-    pragma Import (C, lwp_self, "pthread_self");
- 
-    -------------
-    -- Threads --
-    -------------
- 
-    type Thread_Body is access
-      function (arg : System.Address) return System.Address;
- 
-    type pthread_t           is private;
-    subtype Thread_Id        is pthread_t;
- 
-    type pthread_mutex_t     is limited private;
-    type pthread_cond_t      is limited private;
-    type pthread_attr_t      is limited private;
-    type pthread_mutexattr_t is limited private;
-    type pthread_condattr_t  is limited private;
-    type pthread_key_t       is private;
- 
-    PTHREAD_CREATE_DETACHED : constant := 1;
-    PTHREAD_CREATE_JOINABLE : constant := 0;
- 
-    -----------
-    -- Stack --
-    -----------
- 
-    Stack_Base_Available : constant Boolean := False;
-    --  Indicates wether the stack base is available on this target.
-    --  This allows us to share s-osinte.adb between all the FSU run time.
-    --  Note that this value can only be true if pthread_t has a complete
-    --  definition that corresponds exactly to the C header files.
- 
-    function Get_Stack_Base (thread : pthread_t) return Address;
-    pragma Inline (Get_Stack_Base);
-    --  returns the stack base of the specified thread.
-    --  Only call this function when Stack_Base_Available is True.
- 
-    function Get_Page_Size return size_t;
-    function Get_Page_Size return Address;
-    pragma Import (C, Get_Page_Size, "getpagesize");
-    --  returns the size of a page, or 0 if this is not relevant on this
-    --  target
- 
-    PROT_NONE  : constant := 0;
-    PROT_READ  : constant := 1;
-    PROT_WRITE : constant := 2;
-    PROT_EXEC  : constant := 4;
-    PROT_ALL   : constant := PROT_READ + PROT_WRITE + PROT_EXEC;
- 
-    PROT_ON    : constant := PROT_NONE;
-    PROT_OFF   : constant := PROT_ALL;
- 
-    function mprotect
-      (addr : Address; len : size_t; prot : int) return int;
-    pragma Import (C, mprotect);
- 
-    -----------------------------------------
-    --  Nonstandard Thread Initialization  --
-    -----------------------------------------
-    --  FSU_THREADS requires pthread_init, which is nonstandard
-    --  and this should be invoked during the elaboration of s-taprop.adb
-    --
-    --  FreeBSD does not require this so we provide an empty Ada body.
-    procedure pthread_init;
- 
-    ---------------------------
-    --  POSIX.1c  Section 3  --
-    ---------------------------
- 
-    function sigwait
-      (set : access sigset_t;
-       sig : access Signal) return int;
-    pragma Import (C, sigwait, "sigwait");
- 
-    function pthread_kill
-      (thread : pthread_t;
-       sig    : Signal) return   int;
-    pragma Import (C, pthread_kill, "pthread_kill");
- 
-    type sigset_t_ptr is access all sigset_t;
- 
-    function pthread_sigmask
-      (how  : int;
-       set  : sigset_t_ptr;
-       oset : sigset_t_ptr) return int;
-    pragma Import (C, pthread_sigmask, "pthread_sigmask");
- 
-    ----------------------------
-    --  POSIX.1c  Section 11  --
-    ----------------------------
- 
-    function pthread_mutexattr_init
-      (attr : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
- 
-    function pthread_mutexattr_destroy
-      (attr : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
- 
-    function pthread_mutex_init
-      (mutex : access pthread_mutex_t;
-       attr  : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
- 
-    function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
- 
-    function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_mutex_lock, "pthread_mutex_lock");
- 
-    function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_mutex_unlock, "pthread_mutex_unlock");
- 
-    function pthread_condattr_init
-      (attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
- 
-    function pthread_condattr_destroy
-      (attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
- 
-    function pthread_cond_init
-      (cond : access pthread_cond_t;
-       attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_cond_init, "pthread_cond_init");
- 
-    function pthread_cond_destroy (cond : access pthread_cond_t) return int;
-    pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
- 
-    function pthread_cond_signal (cond : access pthread_cond_t) return int;
-    pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
- 
-    function pthread_cond_wait
-      (cond  : access pthread_cond_t;
-       mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_cond_wait, "pthread_cond_wait");
- 
-    function pthread_cond_timedwait
-      (cond    : access pthread_cond_t;
-       mutex   : access pthread_mutex_t;
-       abstime : access timespec) return int;
-    pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait");
- 
-    Relative_Timed_Wait : constant Boolean := False;
-    --  pthread_cond_timedwait requires an absolute delay time
- 
-    ----------------------------
-    --  POSIX.1c  Section 13  --
-    ----------------------------
- 
-    PTHREAD_PRIO_NONE    : constant := 0;
-    PTHREAD_PRIO_PROTECT : constant := 2;
-    PTHREAD_PRIO_INHERIT : constant := 1;
- 
-    function pthread_mutexattr_setprotocol
-      (attr     : access pthread_mutexattr_t;
-       protocol : int) return int;
-    pragma Import
-       (C, pthread_mutexattr_setprotocol, "pthread_mutexattr_setprotocol");
- 
-    function pthread_mutexattr_getprotocol
-      (attr     : access pthread_mutexattr_t;
-       protocol : access int) return int;
-    pragma Import
-      (C, pthread_mutexattr_getprotocol, "pthread_mutexattr_getprotocol");
- 
-    function pthread_mutexattr_setprioceiling
-      (attr     : access pthread_mutexattr_t;
-       prioceiling : int) return int;
-    pragma Import
-      (C, pthread_mutexattr_setprioceiling,
-       "pthread_mutexattr_setprioceiling");
- 
-    function pthread_mutexattr_getprioceiling
-      (attr     : access pthread_mutexattr_t;
-       prioceiling : access int) return int;
-    pragma Import
-      (C, pthread_mutexattr_getprioceiling,
-       "pthread_mutexattr_getprioceiling");
- 
-    type struct_sched_param is record
-       sched_priority : int;
-    end record;
-    pragma Convention (C, struct_sched_param);
- 
-    function pthread_getschedparam
-      (thread : pthread_t;
-       policy : access int;
-       param  : access struct_sched_param) return int;
-    pragma Import (C, pthread_getschedparam, "pthread_getschedparam");
- 
-    function pthread_setschedparam
-      (thread : pthread_t;
-       policy : int;
-       param  : access struct_sched_param) return int;
-    pragma Import (C, pthread_setschedparam, "pthread_setschedparam");
- 
-    function pthread_attr_setscope
-      (attr            : access pthread_attr_t;
-       contentionscope : int) return int;
-    pragma Import (C, pthread_attr_setscope, "pthread_attr_setscope");
- 
-    function pthread_attr_getscope
-      (attr            : access pthread_attr_t;
-       contentionscope : access int) return int;
-    pragma Import (C, pthread_attr_getscope, "pthread_attr_getscope");
- 
-    function pthread_attr_setinheritsched
-      (attr            : access pthread_attr_t;
-       inheritsched : int) return int;
-    pragma Import
-      (C, pthread_attr_setinheritsched, "pthread_attr_setinheritsched");
- 
-    function pthread_attr_getinheritsched
-      (attr         : access pthread_attr_t;
-       inheritsched : access int) return int;
-    pragma Import
-      (C, pthread_attr_getinheritsched, "pthread_attr_getinheritsched");
- 
-    function pthread_attr_setschedpolicy
-      (attr   : access pthread_attr_t;
-       policy : int) return int;
-    pragma Import (C, pthread_attr_setschedpolicy,
-      "pthread_attr_setschedpolicy");
- 
-    function pthread_attr_getschedpolicy
-      (attr   : access pthread_attr_t;
-       policy : access int) return int;
-    pragma Import (C, pthread_attr_getschedpolicy,
-      "pthread_attr_getschedpolicy");
- 
-    function pthread_attr_setschedparam
-      (attr        : access pthread_attr_t;
-       sched_param : int) return int;
-    pragma Import (C, pthread_attr_setschedparam, "pthread_attr_setschedparam");
- 
-    function pthread_attr_getschedparam
-      (attr        : access pthread_attr_t;
-       sched_param : access int) return int;
-    pragma Import (C, pthread_attr_getschedparam, "pthread_attr_getschedparam");
- 
-    function sched_yield return int;
-    pragma Import (C, sched_yield, "pthread_yield");
- 
-    -----------------------------
-    --  P1003.1c - Section 16  --
-    -----------------------------
- 
-    function pthread_attr_init (attributes : access pthread_attr_t) return int;
-    pragma Import (C, pthread_attr_init, "pthread_attr_init");
- 
-    function pthread_attr_destroy
-      (attributes : access pthread_attr_t) return int;
-    pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
- 
-    function pthread_attr_setdetachstate
-      (attr        : access pthread_attr_t;
-       detachstate : int) return int;
-    pragma Import
-      (C, pthread_attr_setdetachstate, "pthread_attr_setdetachstate");
- 
-    function pthread_attr_getdetachstate
-      (attr        : access pthread_attr_t;
-       detachstate : access int) return int;
-    pragma Import
-      (C, pthread_attr_getdetachstate, "pthread_attr_getdetachstate");
- 
-    function pthread_attr_getstacksize
-      (attr      : access pthread_attr_t;
-       stacksize : access size_t) return int;
-    pragma Import
-      (C, pthread_attr_getstacksize, "pthread_attr_getstacksize");
- 
-    function pthread_attr_setstacksize
-      (attr      : access pthread_attr_t;
-       stacksize : size_t) return int;
-    pragma Import
-      (C, pthread_attr_setstacksize, "pthread_attr_setstacksize");
- 
-    function pthread_create
-      (thread        : access pthread_t;
-       attributes    : access pthread_attr_t;
-       start_routine : Thread_Body;
-       arg           : System.Address) return int;
-    pragma Import (C, pthread_create, "pthread_create");
- 
-    function pthread_detach (thread : pthread_t) return int;
-    pragma Import (C, pthread_detach, "pthread_detach");
- 
-    procedure pthread_exit (status : System.Address);
-    pragma Import (C, pthread_exit, "pthread_exit");
- 
-    function pthread_self return pthread_t;
-    pragma Import (C, pthread_self, "pthread_self");
- 
-    ----------------------------
-    --  POSIX.1c  Section 17  --
-    ----------------------------
- 
-    function pthread_setspecific
-      (key   : pthread_key_t;
-       value : System.Address) return  int;
-    pragma Import (C, pthread_setspecific, "pthread_setspecific");
- 
-    function pthread_getspecific (key : pthread_key_t) return System.Address;
-    pragma Import (C, pthread_getspecific, "pthread_getspecific");
- 
-    type destructor_pointer is access
-       procedure (arg : System.Address);
- 
-    function pthread_key_create
-      (key        : access pthread_key_t;
-       destructor : destructor_pointer) return int;
-    pragma Import (C, pthread_key_create, "pthread_key_create");
- 
-    --------------------------------------
-    --  Non-portable pthread functions  --
-    --------------------------------------
- 
-    function pthread_set_name_np
-      (thread : pthread_t;
-       name   : System.Address) return int;
-    pragma Import (C, pthread_set_name_np, "pthread_set_name_np");
- 
- private
- 
-    type sigset_t is array (1 .. 4) of unsigned;
- 
-    --  In FreeBSD the component sa_handler turns out to
-    --  be one a union type, and the selector is a macro:
-    --  #define sa_handler __sigaction_u._handler
-    --  #define sa_sigaction __sigaction_u._sigaction
- 
-    --  Should we add a signal_context type here ?
-    --  How could it be done independent of the CPU architecture ?
-    --  sigcontext type is opaque, so it is architecturally neutral.
-    --  It is always passed as an access type, so define it as an empty record
-    --  since the contents are not used anywhere.
-    type struct_sigcontext is null record;
-    pragma Convention (C, struct_sigcontext);
- 
-    type pid_t is new int;
-    Self_PID : constant pid_t := 0;
- 
-    type time_t is new long;
- 
-    type timespec is record
-       ts_sec  : time_t;
-       ts_nsec : long;
-    end record;
-    pragma Convention (C, timespec);
- 
-    type clockid_t is new int;
-    CLOCK_REALTIME : constant clockid_t := 0;
- 
-    type struct_timeval is record
-       tv_sec  : long;
-       tv_usec : long;
-    end record;
-    pragma Convention (C, struct_timeval);
- 
-    type pthread_t           is new System.Address;
-    type pthread_attr_t      is new System.Address;
-    type pthread_mutex_t     is new System.Address;
-    type pthread_mutexattr_t is new System.Address;
-    type pthread_cond_t      is new System.Address;
-    type pthread_condattr_t  is new System.Address;
-    type pthread_key_t       is new int;
- 
- end System.OS_Interface;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/55system.ads gcc-4.0.0/gcc/ada/55system.ads
*** gcc-3.4.3/gcc/ada/55system.ads	Fri Nov 21 15:25:00 2003
--- gcc-4.0.0/gcc/ada/55system.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,150 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                        GNAT RUN-TIME COMPONENTS                          --
- --                                                                          --
- --                               S Y S T E M                                --
- --                                                                          --
- --                                 S p e c                                  --
- --                         (GNU-Linux/ia64 Version)                         --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the  contents of the part following the private keyword. --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- package System is
- pragma Pure (System);
- --  Note that we take advantage of the implementation permission to
- --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
- 
-    type Name is (SYSTEM_NAME_GNAT);
-    System_Name : constant Name := SYSTEM_NAME_GNAT;
- 
-    --  System-Dependent Named Numbers
- 
-    Min_Int               : constant := Long_Long_Integer'First;
-    Max_Int               : constant := Long_Long_Integer'Last;
- 
-    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
-    Max_Nonbinary_Modulus : constant := Integer'Last;
- 
-    Max_Base_Digits       : constant := Long_Long_Float'Digits;
-    Max_Digits            : constant := Long_Long_Float'Digits;
- 
-    Max_Mantissa          : constant := 63;
-    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
- 
-    Tick                  : constant := 0.01;
- 
-    --  Storage-related Declarations
- 
-    type Address is private;
-    Null_Address : constant Address;
- 
-    Storage_Unit : constant := 8;
-    Word_Size    : constant := 64;
-    Memory_Size  : constant := 2 ** 64;
- 
-    --  Address comparison
- 
-    function "<"  (Left, Right : Address) return Boolean;
-    function "<=" (Left, Right : Address) return Boolean;
-    function ">"  (Left, Right : Address) return Boolean;
-    function ">=" (Left, Right : Address) return Boolean;
-    function "="  (Left, Right : Address) return Boolean;
- 
-    pragma Import (Intrinsic, "<");
-    pragma Import (Intrinsic, "<=");
-    pragma Import (Intrinsic, ">");
-    pragma Import (Intrinsic, ">=");
-    pragma Import (Intrinsic, "=");
- 
-    --  Other System-Dependent Declarations
- 
-    type Bit_Order is (High_Order_First, Low_Order_First);
-    Default_Bit_Order : constant Bit_Order := Low_Order_First;
- 
-    --  Priority-related Declarations (RM D.1)
- 
-    Max_Priority           : constant Positive := 30;
-    Max_Interrupt_Priority : constant Positive := 31;
- 
-    subtype Any_Priority       is Integer      range  0 .. 31;
-    subtype Priority           is Any_Priority range  0 .. 30;
-    subtype Interrupt_Priority is Any_Priority range 31 .. 31;
- 
-    Default_Priority : constant Priority := 15;
- 
- private
- 
-    type Address is mod Memory_Size;
-    Null_Address : constant Address := 0;
- 
-    --------------------------------------
-    -- System Implementation Parameters --
-    --------------------------------------
- 
-    --  These parameters provide information about the target that is used
-    --  by the compiler. They are in the private part of System, where they
-    --  can be accessed using the special circuitry in the Targparm unit
-    --  whose source should be consulted for more detailed descriptions
-    --  of the individual switch values.
- 
-    AAMP                      : constant Boolean := False;
-    Backend_Divide_Checks     : constant Boolean := False;
-    Backend_Overflow_Checks   : constant Boolean := False;
-    Command_Line_Args         : constant Boolean := True;
-    Configurable_Run_Time     : constant Boolean := False;
-    Denorm                    : constant Boolean := True;
-    Duration_32_Bits          : constant Boolean := False;
-    Exit_Status_Supported     : constant Boolean := True;
-    Fractional_Fixed_Ops      : constant Boolean := False;
-    Frontend_Layout           : constant Boolean := False;
-    Functions_Return_By_DSP   : constant Boolean := False;
-    Machine_Overflows         : constant Boolean := False;
-    Machine_Rounds            : constant Boolean := True;
-    OpenVMS                   : constant Boolean := False;
-    Signed_Zeros              : constant Boolean := True;
-    Stack_Check_Default       : constant Boolean := False;
-    Stack_Check_Probes        : constant Boolean := False;
-    Support_64_Bit_Divides    : constant Boolean := True;
-    Support_Aggregates        : constant Boolean := True;
-    Support_Composite_Assign  : constant Boolean := True;
-    Support_Composite_Compare : constant Boolean := True;
-    Support_Long_Shifts       : constant Boolean := True;
-    Suppress_Standard_Library : constant Boolean := False;
-    Use_Ada_Main_Program_Name : constant Boolean := False;
-    ZCX_By_Default            : constant Boolean := True;
-    GCC_ZCX_Support           : constant Boolean := True;
-    Front_End_ZCX_Support     : constant Boolean := False;
- 
-    --  Obsolete entries, to be removed eventually (bootstrap issues!)
- 
-    High_Integrity_Mode       : constant Boolean := False;
-    Long_Shifts_Inlined       : constant Boolean := True;
- 
- end System;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/56osinte.adb gcc-4.0.0/gcc/ada/56osinte.adb
*** gcc-3.4.3/gcc/ada/56osinte.adb	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/56osinte.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,154 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   S Y S T E M . O S _ I N T E R F A C E                  --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --           Copyright (C) 2001-2002 Ada Core Technologies, Inc.            --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a LynxOS (POSIX Threads) version of this package
- 
- pragma Polling (Off);
- --  Turn off polling, we do not want ATC polling to take place during
- --  tasking operations. It causes infinite loops and other problems.
- 
- with Interfaces.C;
- 
- package body System.OS_Interface is
- 
-    use Interfaces.C;
- 
-    -----------------
-    -- To_Duration --
-    -----------------
- 
-    function To_Duration (TS : timespec) return Duration is
-    begin
-       return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9;
-    end To_Duration;
- 
-    function To_Duration (TV : struct_timeval) return Duration is
-    begin
-       return Duration (TV.tv_sec) + Duration (TV.tv_usec) / 10#1#E6;
-    end To_Duration;
- 
-    -----------------
-    -- To_Timespec --
-    -----------------
- 
-    function To_Timespec (D : Duration) return timespec is
-       S : time_t;
-       F : Duration;
- 
-    begin
-       S := time_t (Long_Long_Integer (D));
-       F := D - Duration (S);
- 
-       --  If F has negative value due to a round-up, adjust for positive F
-       --  value.
- 
-       if F < 0.0 then
-          S := S - 1;
-          F := F + 1.0;
-       end if;
- 
-       return timespec'(tv_sec => S,
-                        tv_nsec => long (Long_Long_Integer (F * 10#1#E9)));
-    end To_Timespec;
- 
-    ----------------
-    -- To_Timeval --
-    ----------------
- 
-    function To_Timeval (D : Duration) return struct_timeval is
-       S : time_t;
-       F : Duration;
- 
-    begin
-       S := time_t (Long_Long_Integer (D));
-       F := D - Duration (S);
- 
-       --  If F has negative value due to a round-up, adjust for positive F
-       --  value.
- 
-       if F < 0.0 then
-          S := S - 1;
-          F := F + 1.0;
-       end if;
- 
-       return
-         struct_timeval'
-           (tv_sec => S,
-            tv_usec => time_t (Long_Long_Integer (F * 10#1#E6)));
-    end To_Timeval;
- 
-    -------------
-    -- sigwait --
-    -------------
- 
-    function sigwait
-      (set :  access sigset_t;
-       sig :  access Signal)
-       return int
-    is
-       function sigwaitinfo
-         (set   : access sigset_t;
-          info  : System.Address) return Signal;
-       pragma Import (C, sigwaitinfo, "sigwaitinfo");
- 
-    begin
-       sig.all := sigwaitinfo (set, Null_Address);
- 
-       if sig.all = -1 then
-          return errno;
-       end if;
- 
-       return 0;
-    end sigwait;
- 
-    --------------------
-    -- Get_Stack_Base --
-    --------------------
- 
-    function Get_Stack_Base (thread : pthread_t) return Address is
-       pragma Warnings (Off, thread);
- 
-    begin
-       return Null_Address;
-    end Get_Stack_Base;
- 
-    ------------------
-    -- pthread_init --
-    ------------------
- 
-    procedure pthread_init is
-    begin
-       null;
-    end pthread_init;
- 
- end System.OS_Interface;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/56osinte.ads gcc-4.0.0/gcc/ada/56osinte.ads
*** gcc-3.4.3/gcc/ada/56osinte.ads	Fri Dec  5 10:24:04 2003
--- gcc-4.0.0/gcc/ada/56osinte.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,586 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   S Y S T E M . O S _ I N T E R F A C E                  --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --             Copyright (C) 2002-2003 Ada Core Technologies, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a LynxOS (POSIX Threads) version of this package.
- 
- --  This package encapsulates all direct interfaces to OS services
- --  that are needed by children of System.
- 
- --  PLEASE DO NOT add any with-clauses to this package
- --  or remove the pragma Elaborate_Body.
- --  It is designed to be a bottom-level (leaf) package.
- 
- with Interfaces.C;
- package System.OS_Interface is
-    pragma Preelaborate;
- 
-    pragma Linker_Options ("-mthreads");
-    --  Selects the POSIX 1.c runtime, rather than the non-threading runtime
-    --  or the deprecated legacy threads library. The -mthreads flag is
-    --  defined in patch.LynxOS and matches the definition for Lynx's gcc.
- 
-    subtype int            is Interfaces.C.int;
-    subtype short          is Interfaces.C.short;
-    subtype long           is Interfaces.C.long;
-    subtype unsigned       is Interfaces.C.unsigned;
-    subtype unsigned_short is Interfaces.C.unsigned_short;
-    subtype unsigned_long  is Interfaces.C.unsigned_long;
-    subtype unsigned_char  is Interfaces.C.unsigned_char;
-    subtype plain_char     is Interfaces.C.plain_char;
-    subtype size_t         is Interfaces.C.size_t;
- 
-    -----------
-    -- Errno --
-    -----------
- 
-    function errno return int;
-    pragma Import (C, errno, "__get_errno");
- 
-    EAGAIN    : constant := 11;
-    EINTR     : constant := 4;
-    EINVAL    : constant := 22;
-    ENOMEM    : constant := 12;
-    ETIMEDOUT : constant := 60;
- 
-    -------------
-    -- Signals --
-    -------------
- 
-    Max_Interrupt : constant := 63;
- 
-    --  Max_Interrupt is the number of OS signals, as defined in:
-    --
-    --   /usr/include/sys/signal.h
-    --
-    --
-    --  The lowest numbered signal is 1, but 0 is a valid argument to some
-    --  library functions, eg. kill(2). However, 0 is not just another
-    --  signal: For instance 'I in Signal' and similar should be used with
-    --  caution.
- 
-    type Signal is new int range 0 .. Max_Interrupt;
-    for  Signal'Size use int'Size;
- 
-    SIGHUP        : constant := 1;  --  hangup
-    SIGINT        : constant := 2;  --  interrupt (rubout)
-    SIGQUIT       : constant := 3;  --  quit (ASCD FS)
-    SIGILL        : constant := 4;  --  illegal instruction (not reset)
-    SIGTRAP       : constant := 5;  --  trace trap (not reset)
-    SIGBRK        : constant := 6;  --  break
-    SIGIOT        : constant := 6;  --  IOT instruction
-    SIGABRT       : constant := 6;  --  used by abort, replace SIGIOT in future
-    SIGCORE       : constant := 7;  --  kill with core dump
-    SIGEMT        : constant := 7;  --  EMT instruction
-    SIGFPE        : constant := 8;  --  floating point exception
-    SIGKILL       : constant := 9;  --  kill (cannot be caught or ignored)
-    SIGBUS        : constant := 10; --  bus error
-    SIGSEGV       : constant := 11; --  segmentation violation
-    SIGSYS        : constant := 12; --  bad argument to system call
-    SIGPIPE       : constant := 13; --  write on a pipe with no one to read it
-    SIGALRM       : constant := 14; --  alarm clock
-    SIGTERM       : constant := 15; --  software termination signal from kill
-    SIGURG        : constant := 16; --  urgent condition on IO channel
-    SIGSTOP       : constant := 17; --  stop (cannot be caught or ignored)
-    SIGTSTP       : constant := 18; --  user stop requested from tty
-    SIGCONT       : constant := 19; --  stopped process has been continued
-    SIGCLD        : constant := 20; --  alias for SIGCHLD
-    SIGCHLD       : constant := 20; --  child status change
-    SIGTTIN       : constant := 21; --  background tty read attempted
-    SIGTTOU       : constant := 22; --  background tty write attempted
-    SIGIO         : constant := 23; --  I/O possible (Solaris SIGPOLL alias)
-    SIGPOLL       : constant := 23; --  pollable event occurred
-    SIGTHREADKILL : constant := 24; --  Reserved by LynxOS runtime
-    SIGXCPU       : constant := 24; --  CPU time limit exceeded
-    SIGXFSZ       : constant := 25; --  filesize limit exceeded
-    SIGVTALRM     : constant := 26; --  virtual timer expired
-    SIGPROF       : constant := 27; --  profiling timer expired
-    SIGWINCH      : constant := 28; --  window size change
-    SIGLOST       : constant := 29; --  SUN 4.1 compatibility
-    SIGUSR1       : constant := 30; --  user defined signal 1
-    SIGUSR2       : constant := 31; --  user defined signal 2
- 
-    SIGPRIO       : constant := 32;
-    --  sent to a process with its priority or group is changed
- 
-    SIGADAABORT : constant := SIGABRT;
-    --  Change this if you want to use another signal for task abort.
-    --  SIGTERM might be a good one.
- 
-    type Signal_Set is array (Natural range <>) of Signal;
- 
-    Unmasked    : constant Signal_Set :=
-      (SIGTRAP, SIGTTIN, SIGTTOU, SIGTSTP, SIGPROF, SIGTHREADKILL);
-    Reserved    : constant Signal_Set := (SIGABRT, SIGKILL, SIGSTOP, SIGPRIO);
- 
-    type sigset_t is private;
- 
-    function sigaddset (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigaddset, "sigaddset");
- 
-    function sigdelset (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigdelset, "sigdelset");
- 
-    function sigfillset (set : access sigset_t) return int;
-    pragma Import (C, sigfillset, "sigfillset");
- 
-    function sigismember (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigismember, "sigismember");
- 
-    function sigemptyset (set : access sigset_t) return int;
-    pragma Import (C, sigemptyset, "sigemptyset");
- 
-    type struct_sigaction is record
-       sa_handler   : System.Address;
-       sa_mask      : sigset_t;
-       sa_flags     : int;
-    end record;
-    pragma Convention (C, struct_sigaction);
-    type struct_sigaction_ptr is access all struct_sigaction;
- 
-    SA_SIGINFO  : constant := 16#80#;
- 
-    SIG_BLOCK   : constant := 0;
-    SIG_UNBLOCK : constant := 1;
-    SIG_SETMASK : constant := 2;
- 
-    SIG_DFL : constant := 0;
-    SIG_IGN : constant := 1;
- 
-    function sigaction
-      (sig  : Signal;
-       act  : struct_sigaction_ptr;
-       oact : struct_sigaction_ptr) return int;
-    pragma Import (C, sigaction, "sigaction");
- 
-    ----------
-    -- Time --
-    ----------
- 
-    Time_Slice_Supported : constant Boolean := True;
-    --  Indicates whether time slicing is supported
- 
-    type timespec is private;
- 
-    type clockid_t is private;
- 
-    CLOCK_REALTIME : constant clockid_t;
- 
-    function clock_gettime
-      (clock_id : clockid_t;
-       tp       : access timespec) return int;
-    pragma Import (C, clock_gettime, "clock_gettime");
- 
-    function clock_getres
-      (clock_id : clockid_t;
-       res      : access timespec) return int;
-    pragma Import (C, clock_getres, "clock_getres");
- 
-    function To_Duration (TS : timespec) return Duration;
-    pragma Inline (To_Duration);
- 
-    function To_Timespec (D : Duration) return timespec;
-    pragma Inline (To_Timespec);
- 
-    type struct_timezone is record
-       tz_minuteswest : int;
-       tz_dsttime     : int;
-    end record;
-    pragma Convention (C, struct_timezone);
-    type struct_timezone_ptr is access all struct_timezone;
- 
-    type struct_timeval is private;
-    --  This is needed on systems that do not have clock_gettime()
-    --  but do have gettimeofday().
- 
-    function To_Duration (TV : struct_timeval) return Duration;
-    pragma Inline (To_Duration);
- 
-    function To_Timeval (D : Duration) return struct_timeval;
-    pragma Inline (To_Timeval);
- 
-    -------------------------
-    -- Priority Scheduling --
-    -------------------------
- 
-    SCHED_FIFO  : constant := 16#200000#;
-    SCHED_RR    : constant := 16#100000#;
-    SCHED_OTHER : constant := 16#400000#;
- 
-    -------------
-    -- Process --
-    -------------
- 
-    type pid_t is private;
- 
-    function kill (pid : pid_t; sig : Signal) return int;
-    pragma Import (C, kill, "kill");
- 
-    function getpid return pid_t;
-    pragma Import (C, getpid, "getpid");
- 
-    ---------
-    -- LWP --
-    ---------
- 
-    function lwp_self return System.Address;
-    pragma Import (C, lwp_self, "pthread_self");
- 
-    -------------
-    -- Threads --
-    -------------
- 
-    type Thread_Body is access
-      function (arg : System.Address) return System.Address;
-    type pthread_t           is private;
-    subtype Thread_Id        is pthread_t;
- 
-    type pthread_mutex_t     is limited private;
-    type pthread_cond_t      is limited private;
-    type pthread_attr_t      is limited private;
-    type pthread_mutexattr_t is limited private;
-    type pthread_condattr_t  is limited private;
-    type pthread_key_t       is private;
- 
-    PTHREAD_CREATE_DETACHED : constant := 1;
-    PTHREAD_CREATE_JOINABLE : constant := 0;
- 
-    -----------
-    -- Stack --
-    -----------
- 
-    Stack_Base_Available : constant Boolean := False;
-    --  Indicates whether the stack base is available on this target.
- 
-    function Get_Stack_Base (thread : pthread_t) return Address;
-    pragma Inline (Get_Stack_Base);
-    --  Returns the stack base of the specified thread.
-    --  Only call this function when Stack_Base_Available is True.
- 
-    function Get_Page_Size return size_t;
-    function Get_Page_Size return Address;
-    pragma Import (C, Get_Page_Size, "getpagesize");
-    --  Returns the size of a page, or 0 if this is not relevant on this
-    --  target
- 
-    PROT_NONE  : constant := 1;
-    PROT_READ  : constant := 2;
-    PROT_WRITE : constant := 4;
-    PROT_EXEC  : constant := 8;
-    PROT_ALL   : constant := PROT_READ + PROT_WRITE + PROT_EXEC;
- 
-    PROT_ON    : constant := PROT_READ;
-    PROT_OFF   : constant := PROT_ALL;
- 
-    function mprotect (addr : Address; len : size_t; prot : int) return int;
-    pragma Import (C, mprotect);
- 
-    -----------------------------------------
-    --  Nonstandard Thread Initialization  --
-    -----------------------------------------
- 
-    procedure pthread_init;
-    --  This is a dummy procedure to share some GNULLI files
- 
-    ---------------------------
-    --  POSIX.1c  Section 3  --
-    ---------------------------
- 
-    function sigwait
-      (set : access sigset_t;
-       sig : access Signal) return int;
-    pragma Inline (sigwait);
-    --  LynxOS has non standard sigwait
- 
-    function pthread_kill
-      (thread : pthread_t;
-       sig    : Signal) return int;
-    pragma Import (C, pthread_kill, "pthread_kill");
- 
-    type sigset_t_ptr is access all sigset_t;
- 
-    function pthread_sigmask
-      (how  : int;
-       set  : sigset_t_ptr;
-       oset : sigset_t_ptr) return int;
-    pragma Import (C, pthread_sigmask, "pthread_sigmask");
-    --  The behavior of pthread_sigmask on LynxOS requires
-    --  further investigation.
- 
-    ----------------------------
-    --  POSIX.1c  Section 11  --
-    ----------------------------
- 
-    function pthread_mutexattr_init
-      (attr : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
- 
-    function pthread_mutexattr_destroy
-      (attr : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
- 
-    function pthread_mutex_init
-      (mutex : access pthread_mutex_t;
-       attr  : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
- 
-    function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
- 
-    function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_mutex_lock, "pthread_mutex_lock");
- 
-    function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_mutex_unlock, "pthread_mutex_unlock");
- 
-    function pthread_condattr_init
-      (attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
- 
-    function pthread_condattr_destroy
-      (attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
- 
-    function pthread_cond_init
-      (cond : access pthread_cond_t;
-       attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_cond_init, "pthread_cond_init");
- 
-    function pthread_cond_destroy (cond : access pthread_cond_t) return int;
-    pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
- 
-    function pthread_cond_signal (cond : access pthread_cond_t) return int;
-    pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
- 
-    function pthread_cond_wait
-      (cond  : access pthread_cond_t;
-       mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_cond_wait, "pthread_cond_wait");
- 
-    function pthread_cond_timedwait
-      (cond    : access pthread_cond_t;
-       mutex   : access pthread_mutex_t;
-       abstime : access timespec) return int;
-    pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait");
- 
-    Relative_Timed_Wait : constant Boolean := False;
-    --  pthread_cond_timedwait requires an absolute delay time
- 
-    --------------------------
-    -- POSIX.1c  Section 13 --
-    --------------------------
- 
-    PTHREAD_PRIO_NONE    : constant := 0;
-    PTHREAD_PRIO_INHERIT : constant := 1;
-    PTHREAD_PRIO_PROTECT : constant := 2;
- 
-    function pthread_mutexattr_setprotocol
-      (attr     : access pthread_mutexattr_t;
-       protocol : int) return int;
-    pragma Import (C, pthread_mutexattr_setprotocol);
- 
-    function pthread_mutexattr_setprioceiling
-      (attr        : access pthread_mutexattr_t;
-       prioceiling : int) return int;
-    pragma Import (C, pthread_mutexattr_setprioceiling);
- 
-    type struct_sched_param is record
-       sched_priority : int;
-    end record;
- 
-    function pthread_setschedparam
-      (thread : pthread_t;
-       policy : int;
-       param  : access struct_sched_param) return int;
-    pragma Import (C, pthread_setschedparam, "pthread_setschedparam");
- 
-    function pthread_attr_setscope
-      (attr            : access pthread_attr_t;
-       contentionscope : int) return int;
-    pragma Import (C, pthread_attr_setscope, "pthread_attr_setscope");
- 
-    function pthread_attr_setinheritsched
-      (attr         : access pthread_attr_t;
-       inheritsched : int) return int;
-    pragma Import (C, pthread_attr_setinheritsched);
- 
-    function pthread_attr_setschedpolicy
-      (attr   : access pthread_attr_t;
-       policy : int) return int;
-    pragma Import (C, pthread_attr_setschedpolicy);
- 
-    function sched_yield return int;
-    pragma Import (C, sched_yield, "sched_yield");
- 
-    ---------------------------
-    -- P1003.1c - Section 16 --
-    ---------------------------
- 
-    function pthread_attr_init (attributes : access pthread_attr_t) return int;
-    pragma Import (C, pthread_attr_init, "pthread_attr_init");
- 
-    function pthread_attr_destroy
-      (attributes : access pthread_attr_t) return int;
-    pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
- 
-    function pthread_attr_setdetachstate
-      (attr        : access pthread_attr_t;
-       detachstate : int) return int;
-    pragma Import (C, pthread_attr_setdetachstate);
- 
-    function pthread_attr_setstacksize
-      (attr      : access pthread_attr_t;
-       stacksize : size_t) return int;
-    pragma Import (C, pthread_attr_setstacksize);
- 
-    function pthread_create
-      (thread        : access pthread_t;
-       attributes    : access pthread_attr_t;
-       start_routine : Thread_Body;
-       arg           : System.Address) return int;
-    pragma Import (C, pthread_create, "pthread_create");
- 
-    procedure pthread_exit (status : System.Address);
-    pragma Import (C, pthread_exit, "pthread_exit");
- 
-    function pthread_self return pthread_t;
-    pragma Import (C, pthread_self, "pthread_self");
- 
-    --------------------------
-    -- POSIX.1c  Section 17 --
-    --------------------------
- 
-    function st_setspecific
-      (key   : pthread_key_t;
-       value : System.Address) return int;
-    pragma Import (C, st_setspecific, "st_setspecific");
- 
-    function st_getspecific
-      (key    : pthread_key_t;
-       retval : System.Address) return int;
-    pragma Import (C, st_getspecific, "st_getspecific");
- 
-    type destructor_pointer is access procedure (arg : System.Address);
- 
-    function st_keycreate
-      (destructor : destructor_pointer;
-       key        : access pthread_key_t) return int;
-    pragma Import (C, st_keycreate, "st_keycreate");
- 
- private
- 
-    type sigset_t is record
-       X1, X2 : long;
-    end record;
-    pragma Convention (C, sigset_t);
- 
-    type pid_t is new long;
- 
-    type time_t is new long;
- 
-    type timespec is record
-       tv_sec  : time_t;
-       tv_nsec : long;
-    end record;
-    pragma Convention (C, timespec);
- 
-    type clockid_t is new unsigned_char;
-    CLOCK_REALTIME : constant clockid_t := 0;
- 
-    type struct_timeval is record
-       tv_sec  : time_t;
-       tv_usec : time_t;
-    end record;
-    pragma Convention (C, struct_timeval);
- 
-    type st_attr_t is record
-       stksize      : int;
-       prio         : int;
-       inheritsched : int;
-       state        : int;
-       sched        : int;
-       detachstate  : int;
-       guardsize    : int;
-    end record;
-    pragma Convention (C, st_attr_t);
- 
-    type pthread_attr_t is record
-       pthread_attr_magic : unsigned;
-       st                 : st_attr_t;
-       pthread_attr_scope : int;
-    end record;
-    pragma Convention (C, pthread_attr_t);
- 
-    type pthread_condattr_t is record
-       cv_magic   : unsigned;
-       cv_pshared : unsigned;
-    end record;
-    pragma Convention (C, pthread_condattr_t);
- 
-    type pthread_mutexattr_t is record
-       m_flags   : unsigned;
-       m_prio_c  : int;
-       m_pshared : int;
-    end record;
-    pragma Convention (C, pthread_mutexattr_t);
- 
-    type tid_t is new short;
-    type pthread_t is new tid_t;
- 
-    type block_obj_t is new System.Address;
-    --  typedef struct _block_obj_s {
-    --     struct st_entry *b_head;
-    --  } block_obj_t;
- 
-    type pthread_mutex_t is record
-       m_flags      : unsigned;
-       m_owner      : tid_t;
-       m_wait       : block_obj_t;
-       m_prio_c     : int;
-       m_oldprio    : int;
-       m_count      : int;
-       m_referenced : int;
-    end record;
-    pragma Convention (C, pthread_mutex_t);
-    type pthread_mutex_t_ptr is access all pthread_mutex_t;
- 
-    type pthread_cond_t is record
-       cv_magic  : unsigned;
-       cv_wait   : block_obj_t;
-       cv_mutex  : pthread_mutex_t_ptr;
-       cv_refcnt : int;
-    end record;
-    pragma Convention (C, pthread_cond_t);
- 
-    type pthread_key_t is new int;
- 
- end System.OS_Interface;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/56system.ads gcc-4.0.0/gcc/ada/56system.ads
*** gcc-3.4.3/gcc/ada/56system.ads	Thu Nov 20 17:51:26 2003
--- gcc-4.0.0/gcc/ada/56system.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,150 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                        GNAT RUN-TIME COMPONENTS                          --
- --                                                                          --
- --                               S Y S T E M                                --
- --                                                                          --
- --                                 S p e c                                  --
- --                           (FreeBSD/x86 Version)                          --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the  contents of the part following the private keyword. --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- package System is
- pragma Pure (System);
- --  Note that we take advantage of the implementation permission to
- --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
- 
-    type Name is (SYSTEM_NAME_GNAT);
-    System_Name : constant Name := SYSTEM_NAME_GNAT;
- 
-    --  System-Dependent Named Numbers
- 
-    Min_Int               : constant := Long_Long_Integer'First;
-    Max_Int               : constant := Long_Long_Integer'Last;
- 
-    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
-    Max_Nonbinary_Modulus : constant := Integer'Last;
- 
-    Max_Base_Digits       : constant := Long_Long_Float'Digits;
-    Max_Digits            : constant := Long_Long_Float'Digits;
- 
-    Max_Mantissa          : constant := 63;
-    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
- 
-    Tick                  : constant := 0.000_001;
- 
-    --  Storage-related Declarations
- 
-    type Address is private;
-    Null_Address : constant Address;
- 
-    Storage_Unit : constant := 8;
-    Word_Size    : constant := 32;
-    Memory_Size  : constant := 2 ** 32;
- 
-    --  Address comparison
- 
-    function "<"  (Left, Right : Address) return Boolean;
-    function "<=" (Left, Right : Address) return Boolean;
-    function ">"  (Left, Right : Address) return Boolean;
-    function ">=" (Left, Right : Address) return Boolean;
-    function "="  (Left, Right : Address) return Boolean;
- 
-    pragma Import (Intrinsic, "<");
-    pragma Import (Intrinsic, "<=");
-    pragma Import (Intrinsic, ">");
-    pragma Import (Intrinsic, ">=");
-    pragma Import (Intrinsic, "=");
- 
-    --  Other System-Dependent Declarations
- 
-    type Bit_Order is (High_Order_First, Low_Order_First);
-    Default_Bit_Order : constant Bit_Order := Low_Order_First;
- 
-    --  Priority-related Declarations (RM D.1)
- 
-    Max_Priority           : constant Positive := 30;
-    Max_Interrupt_Priority : constant Positive := 31;
- 
-    subtype Any_Priority       is Integer      range  0 .. 31;
-    subtype Priority           is Any_Priority range  0 .. 30;
-    subtype Interrupt_Priority is Any_Priority range 31 .. 31;
- 
-    Default_Priority : constant Priority := 15;
- 
- private
- 
-    type Address is mod Memory_Size;
-    Null_Address : constant Address := 0;
- 
-    --------------------------------------
-    -- System Implementation Parameters --
-    --------------------------------------
- 
-    --  These parameters provide information about the target that is used
-    --  by the compiler. They are in the private part of System, where they
-    --  can be accessed using the special circuitry in the Targparm unit
-    --  whose source should be consulted for more detailed descriptions
-    --  of the individual switch values.
- 
-    AAMP                      : constant Boolean := False;
-    Backend_Divide_Checks     : constant Boolean := False;
-    Backend_Overflow_Checks   : constant Boolean := False;
-    Command_Line_Args         : constant Boolean := True;
-    Configurable_Run_Time     : constant Boolean := False;
-    Denorm                    : constant Boolean := True;
-    Duration_32_Bits          : constant Boolean := False;
-    Exit_Status_Supported     : constant Boolean := True;
-    Fractional_Fixed_Ops      : constant Boolean := False;
-    Frontend_Layout           : constant Boolean := False;
-    Functions_Return_By_DSP   : constant Boolean := False;
-    Machine_Overflows         : constant Boolean := False;
-    Machine_Rounds            : constant Boolean := True;
-    OpenVMS                   : constant Boolean := False;
-    Signed_Zeros              : constant Boolean := True;
-    Stack_Check_Default       : constant Boolean := False;
-    Stack_Check_Probes        : constant Boolean := False;
-    Support_64_Bit_Divides    : constant Boolean := True;
-    Support_Aggregates        : constant Boolean := True;
-    Support_Composite_Assign  : constant Boolean := True;
-    Support_Composite_Compare : constant Boolean := True;
-    Support_Long_Shifts       : constant Boolean := True;
-    Suppress_Standard_Library : constant Boolean := False;
-    Use_Ada_Main_Program_Name : constant Boolean := False;
-    ZCX_By_Default            : constant Boolean := False;
-    GCC_ZCX_Support           : constant Boolean := False;
-    Front_End_ZCX_Support     : constant Boolean := False;
- 
-    --  Obsolete entries, to be removed eventually (bootstrap issues!)
- 
-    High_Integrity_Mode       : constant Boolean := False;
-    Long_Shifts_Inlined       : constant Boolean := True;
- 
- end System;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/56taprop.adb gcc-4.0.0/gcc/ada/56taprop.adb
*** gcc-3.4.3/gcc/ada/56taprop.adb	Mon Jan  5 15:20:42 2004
--- gcc-4.0.0/gcc/ada/56taprop.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,1188 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --     S Y S T E M . T A S K _ P R I M I T I V E S . O P E R A T I O N S    --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --         Copyright (C) 1992-2003, Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a LynxOS version of this file, adapted to make
- --  SCHED_FIFO and ceiling locking (Annex D compliance) work properly
- 
- --  This package contains all the GNULL primitives that interface directly
- --  with the underlying OS.
- 
- pragma Polling (Off);
- --  Turn off polling, we do not want ATC polling to take place during
- --  tasking operations. It causes infinite loops and other problems.
- 
- with System.Tasking.Debug;
- --  used for Known_Tasks
- 
- with System.Task_Info;
- --  used for Task_Info_Type
- 
- with Interfaces.C;
- --  used for int
- --           size_t
- 
- with System.Interrupt_Management;
- --  used for Keep_Unmasked
- --           Abort_Task_Interrupt
- --           Interrupt_ID
- 
- with System.Interrupt_Management.Operations;
- --  used for Set_Interrupt_Mask
- --           All_Tasks_Mask
- pragma Elaborate_All (System.Interrupt_Management.Operations);
- 
- with System.Parameters;
- --  used for Size_Type
- 
- with System.Tasking;
- --  used for Ada_Task_Control_Block
- --           Task_ID
- 
- with System.Soft_Links;
- --  used for Defer/Undefer_Abort
- 
- --  Note that we do not use System.Tasking.Initialization directly since
- --  this is a higher level package that we shouldn't depend on. For example
- --  when using the restricted run time, it is replaced by
- --  System.Tasking.Restricted.Initialization
- 
- with System.OS_Primitives;
- --  used for Delay_Modes
- 
- with Unchecked_Conversion;
- with Unchecked_Deallocation;
- 
- package body System.Task_Primitives.Operations is
- 
-    use System.Tasking.Debug;
-    use System.Tasking;
-    use Interfaces.C;
-    use System.OS_Interface;
-    use System.Parameters;
-    use System.OS_Primitives;
- 
-    package SSL renames System.Soft_Links;
- 
-    ----------------
-    -- Local Data --
-    ----------------
- 
-    --  The followings are logically constants, but need to be initialized
-    --  at run time.
- 
-    Single_RTS_Lock : aliased RTS_Lock;
-    --  This is a lock to allow only one thread of control in the RTS at
-    --  a time; it is used to execute in mutual exclusion from all other tasks.
-    --  Used mainly in Single_Lock mode, but also to protect All_Tasks_List
- 
-    ATCB_Key : aliased pthread_key_t;
-    --  Key used to find the Ada Task_ID associated with a thread
- 
-    Environment_Task_ID : Task_ID;
-    --  A variable to hold Task_ID for the environment task.
- 
-    Locking_Policy : Character;
-    pragma Import (C, Locking_Policy, "__gl_locking_policy");
-    --  Value of the pragma Locking_Policy:
-    --    'C' for Ceiling_Locking
-    --    'I' for Inherit_Locking
-    --    ' ' for none.
- 
-    Unblocked_Signal_Mask : aliased sigset_t;
-    --  The set of signals that should unblocked in all tasks
- 
-    --  The followings are internal configuration constants needed.
- 
-    Next_Serial_Number : Task_Serial_Number := 100;
-    --  We start at 100, to reserve some special values for
-    --  using in error checking.
- 
-    Time_Slice_Val : Integer;
-    pragma Import (C, Time_Slice_Val, "__gl_time_slice_val");
- 
-    Dispatching_Policy : Character;
-    pragma Import (C, Dispatching_Policy, "__gl_task_dispatching_policy");
- 
-    FIFO_Within_Priorities : constant Boolean := Dispatching_Policy = 'F';
-    --  Indicates whether FIFO_Within_Priorities is set.
- 
-    Foreign_Task_Elaborated : aliased Boolean := True;
-    --  Used to identified fake tasks (i.e., non-Ada Threads).
- 
-    --------------------
-    -- Local Packages --
-    --------------------
- 
-    package Specific is
- 
-       procedure Initialize (Environment_Task : Task_ID);
-       pragma Inline (Initialize);
-       --  Initialize various data needed by this package.
- 
-       function Is_Valid_Task return Boolean;
-       pragma Inline (Is_Valid_Task);
-       --  Does the current thread have an ATCB?
- 
-       procedure Set (Self_Id : Task_ID);
-       pragma Inline (Set);
-       --  Set the self id for the current task.
- 
-       function Self return Task_ID;
-       pragma Inline (Self);
-       --  Return a pointer to the Ada Task Control Block of the calling task.
- 
-    end Specific;
- 
-    package body Specific is separate;
-    --  The body of this package is target specific.
- 
-    ---------------------------------
-    -- Support for foreign threads --
-    ---------------------------------
- 
-    function Register_Foreign_Thread (Thread : Thread_Id) return Task_ID;
-    --  Allocate and Initialize a new ATCB for the current Thread.
- 
-    function Register_Foreign_Thread
-      (Thread : Thread_Id) return Task_ID is separate;
- 
-    -----------------------
-    -- Local Subprograms --
-    -----------------------
- 
-    procedure Abort_Handler (Sig : Signal);
-    --  Signal handler used to implement asynchronous abort.
- 
-    procedure Set_OS_Priority (T : Task_ID; Prio : System.Any_Priority);
-    --  This procedure calls the scheduler of the OS to set thread's priority
- 
-    function To_Address is new Unchecked_Conversion (Task_ID, System.Address);
- 
-    -------------------
-    -- Abort_Handler --
-    -------------------
- 
-    procedure Abort_Handler (Sig : Signal) is
-       pragma Unreferenced (Sig);
- 
-       T       : Task_ID := Self;
-       Result  : Interfaces.C.int;
-       Old_Set : aliased sigset_t;
- 
-    begin
-       --  It is not safe to raise an exception when using ZCX and the GCC
-       --  exception handling mechanism.
- 
-       if ZCX_By_Default and then GCC_ZCX_Support then
-          return;
-       end if;
- 
-       if T.Deferral_Level = 0
-         and then T.Pending_ATC_Level < T.ATC_Nesting_Level and then
-         not T.Aborting
-       then
-          T.Aborting := True;
- 
-          --  Make sure signals used for RTS internal purpose are unmasked
- 
-          Result := pthread_sigmask (SIG_UNBLOCK,
-            Unblocked_Signal_Mask'Unchecked_Access, Old_Set'Unchecked_Access);
-          pragma Assert (Result = 0);
- 
-          raise Standard'Abort_Signal;
-       end if;
-    end Abort_Handler;
- 
-    -----------------
-    -- Stack_Guard --
-    -----------------
- 
-    procedure Stack_Guard (T : ST.Task_ID; On : Boolean) is
-       Stack_Base : constant Address := Get_Stack_Base (T.Common.LL.Thread);
-       Guard_Page_Address : Address;
- 
-       Res : Interfaces.C.int;
- 
-    begin
-       if Stack_Base_Available then
- 
-          --  Compute the guard page address
- 
-          Guard_Page_Address :=
-            Stack_Base - (Stack_Base mod Get_Page_Size) + Get_Page_Size;
- 
-          if On then
-             Res := mprotect (Guard_Page_Address, Get_Page_Size, PROT_ON);
-          else
-             Res := mprotect (Guard_Page_Address, Get_Page_Size, PROT_OFF);
-          end if;
- 
-          pragma Assert (Res = 0);
-       end if;
-    end Stack_Guard;
- 
-    --------------------
-    -- Get_Thread_Id  --
-    --------------------
- 
-    function Get_Thread_Id (T : ST.Task_ID) return OSI.Thread_Id is
-    begin
-       return T.Common.LL.Thread;
-    end Get_Thread_Id;
- 
-    ----------
-    -- Self --
-    ----------
- 
-    function Self return Task_ID renames Specific.Self;
- 
-    ---------------------
-    -- Initialize_Lock --
-    ---------------------
- 
-    procedure Initialize_Lock
-      (Prio : System.Any_Priority;
-       L    : access Lock)
-    is
-       Attributes : aliased pthread_mutexattr_t;
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := pthread_mutexattr_init (Attributes'Access);
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result = ENOMEM then
-          raise Storage_Error;
-       end if;
- 
-       if Locking_Policy = 'C' then
-          L.Ceiling := Prio;
-       end if;
- 
-       Result := pthread_mutex_init (L.Mutex'Access, Attributes'Access);
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result = ENOMEM then
-          raise Storage_Error;
-       end if;
- 
-       Result := pthread_mutexattr_destroy (Attributes'Access);
-       pragma Assert (Result = 0);
-    end Initialize_Lock;
- 
-    procedure Initialize_Lock (L : access RTS_Lock; Level : Lock_Level) is
-       pragma Unreferenced (Level);
- 
-       Attributes : aliased pthread_mutexattr_t;
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := pthread_mutexattr_init (Attributes'Access);
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result = ENOMEM then
-          raise Storage_Error;
-       end if;
- 
-       Result := pthread_mutex_init (L, Attributes'Access);
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result = ENOMEM then
-          Result := pthread_mutexattr_destroy (Attributes'Access);
-          raise Storage_Error;
-       end if;
- 
-       Result := pthread_mutexattr_destroy (Attributes'Access);
-       pragma Assert (Result = 0);
-    end Initialize_Lock;
- 
-    -------------------
-    -- Finalize_Lock --
-    -------------------
- 
-    procedure Finalize_Lock (L : access Lock) is
-       Result : Interfaces.C.int;
-    begin
-       Result := pthread_mutex_destroy (L.Mutex'Access);
-       pragma Assert (Result = 0);
-    end Finalize_Lock;
- 
-    procedure Finalize_Lock (L : access RTS_Lock) is
-       Result : Interfaces.C.int;
-    begin
-       Result := pthread_mutex_destroy (L);
-       pragma Assert (Result = 0);
-    end Finalize_Lock;
- 
-    ----------------
-    -- Write_Lock --
-    ----------------
- 
-    procedure Write_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
-       Result : Interfaces.C.int;
-       T : constant Task_ID := Self;
- 
-    begin
-       if Locking_Policy = 'C' then
-          if T.Common.Current_Priority > L.Ceiling then
-             Ceiling_Violation := True;
-             return;
-          end if;
- 
-          L.Saved_Priority := T.Common.Current_Priority;
- 
-          if T.Common.Current_Priority < L.Ceiling then
-             Set_OS_Priority (T, L.Ceiling);
-          end if;
-       end if;
- 
-       Result := pthread_mutex_lock (L.Mutex'Access);
- 
-       --  Assume that the cause of EINVAL is a priority ceiling violation
- 
-       Ceiling_Violation := (Result = EINVAL);
-       pragma Assert (Result = 0 or else Result = EINVAL);
-    end Write_Lock;
- 
-    --  No tricks on RTS_Locks
- 
-    procedure Write_Lock
-      (L : access RTS_Lock; Global_Lock : Boolean := False)
-    is
-       Result : Interfaces.C.int;
-    begin
-       if not Single_Lock or else Global_Lock then
-          Result := pthread_mutex_lock (L);
-          pragma Assert (Result = 0);
-       end if;
-    end Write_Lock;
- 
-    procedure Write_Lock (T : Task_ID) is
-       Result : Interfaces.C.int;
-    begin
-       if not Single_Lock then
-          Result := pthread_mutex_lock (T.Common.LL.L'Access);
-          pragma Assert (Result = 0);
-       end if;
-    end Write_Lock;
- 
-    ---------------
-    -- Read_Lock --
-    ---------------
- 
-    procedure Read_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
-    begin
-       Write_Lock (L, Ceiling_Violation);
-    end Read_Lock;
- 
-    ------------
-    -- Unlock --
-    ------------
- 
-    procedure Unlock (L : access Lock) is
-       Result : Interfaces.C.int;
-       T : constant Task_ID := Self;
- 
-    begin
-       Result := pthread_mutex_unlock (L.Mutex'Access);
-       pragma Assert (Result = 0);
- 
-       if Locking_Policy = 'C' then
-          if T.Common.Current_Priority > L.Saved_Priority then
-             Set_OS_Priority (T, L.Saved_Priority);
-          end if;
-       end if;
-    end Unlock;
- 
-    procedure Unlock (L : access RTS_Lock; Global_Lock : Boolean := False) is
-       Result : Interfaces.C.int;
-    begin
-       if not Single_Lock or else Global_Lock then
-          Result := pthread_mutex_unlock (L);
-          pragma Assert (Result = 0);
-       end if;
-    end Unlock;
- 
-    procedure Unlock (T : Task_ID) is
-       Result : Interfaces.C.int;
-    begin
-       if not Single_Lock then
-          Result := pthread_mutex_unlock (T.Common.LL.L'Access);
-          pragma Assert (Result = 0);
-       end if;
-    end Unlock;
- 
-    -----------
-    -- Sleep --
-    -----------
- 
-    procedure Sleep
-      (Self_ID : Task_ID;
-       Reason   : System.Tasking.Task_States)
-    is
-       pragma Unreferenced (Reason);
-       Result : Interfaces.C.int;
- 
-    begin
-       if Single_Lock then
-          Result := pthread_cond_wait
-            (Self_ID.Common.LL.CV'Access, Single_RTS_Lock'Access);
-       else
-          Result := pthread_cond_wait
-            (Self_ID.Common.LL.CV'Access, Self_ID.Common.LL.L'Access);
-       end if;
- 
-       --  EINTR is not considered a failure
- 
-       pragma Assert (Result = 0 or else Result = EINTR);
-    end Sleep;
- 
-    -----------------
-    -- Timed_Sleep --
-    -----------------
- 
-    --  This is for use within the run-time system, so abort is
-    --  assumed to be already deferred, and the caller should be
-    --  holding its own ATCB lock.
- 
-    procedure Timed_Sleep
-      (Self_ID  : Task_ID;
-       Time     : Duration;
-       Mode     : ST.Delay_Modes;
-       Reason   : Task_States;
-       Timedout : out Boolean;
-       Yielded  : out Boolean)
-    is
-       pragma Unreferenced (Reason);
- 
-       Check_Time : constant Duration := Monotonic_Clock;
-       Rel_Time   : Duration;
-       Abs_Time   : Duration;
-       Request    : aliased timespec;
-       Result     : Interfaces.C.int;
- 
-    begin
-       Timedout := True;
-       Yielded := False;
- 
-       if Mode = Relative then
-          Abs_Time := Duration'Min (Time, Max_Sensible_Delay) + Check_Time;
- 
-          if Relative_Timed_Wait then
-             Rel_Time := Duration'Min (Max_Sensible_Delay, Time);
-          end if;
- 
-       else
-          Abs_Time := Duration'Min (Check_Time + Max_Sensible_Delay, Time);
- 
-          if Relative_Timed_Wait then
-             Rel_Time := Duration'Min (Max_Sensible_Delay, Time - Check_Time);
-          end if;
-       end if;
- 
-       if Abs_Time > Check_Time then
-          if Relative_Timed_Wait then
-             Request := To_Timespec (Rel_Time);
-          else
-             Request := To_Timespec (Abs_Time);
-          end if;
- 
-          loop
-             exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level
-               or else Self_ID.Pending_Priority_Change;
- 
-             if Single_Lock then
-                Result := pthread_cond_timedwait
-                  (Self_ID.Common.LL.CV'Access, Single_RTS_Lock'Access,
-                   Request'Access);
- 
-             else
-                Result := pthread_cond_timedwait
-                  (Self_ID.Common.LL.CV'Access, Self_ID.Common.LL.L'Access,
-                   Request'Access);
-             end if;
- 
-             exit when Abs_Time <= Monotonic_Clock;
- 
-             if Result = 0 or Result = EINTR then
- 
-                --  Somebody may have called Wakeup for us
- 
-                Timedout := False;
-                exit;
-             end if;
- 
-             pragma Assert (Result = ETIMEDOUT);
-          end loop;
-       end if;
-    end Timed_Sleep;
- 
-    -----------------
-    -- Timed_Delay --
-    -----------------
- 
-    --  This is for use in implementing delay statements, so we assume
-    --  the caller is abort-deferred but is holding no locks.
- 
-    procedure Timed_Delay
-      (Self_ID  : Task_ID;
-       Time     : Duration;
-       Mode     : ST.Delay_Modes)
-    is
-       Check_Time : constant Duration := Monotonic_Clock;
-       Abs_Time   : Duration;
-       Rel_Time   : Duration;
-       Request    : aliased timespec;
-       Result     : Interfaces.C.int;
- 
-    begin
-       --  Only the little window between deferring abort and
-       --  locking Self_ID is the reason we need to
-       --  check for pending abort and priority change below!
- 
-       SSL.Abort_Defer.all;
- 
-       if Single_Lock then
-          Lock_RTS;
-       end if;
- 
-       --  Comments needed in code below ???
- 
-       Write_Lock (Self_ID);
- 
-       if Mode = Relative then
-          Abs_Time := Duration'Min (Time, Max_Sensible_Delay) + Check_Time;
- 
-          if Relative_Timed_Wait then
-             Rel_Time := Duration'Min (Max_Sensible_Delay, Time);
-          end if;
- 
-       else
-          Abs_Time := Duration'Min (Check_Time + Max_Sensible_Delay, Time);
- 
-          if Relative_Timed_Wait then
-             Rel_Time := Duration'Min (Max_Sensible_Delay, Time - Check_Time);
-          end if;
-       end if;
- 
-       if Abs_Time > Check_Time then
-          if Relative_Timed_Wait then
-             Request := To_Timespec (Rel_Time);
-          else
-             Request := To_Timespec (Abs_Time);
-          end if;
- 
-          Self_ID.Common.State := Delay_Sleep;
- 
-          loop
-             if Self_ID.Pending_Priority_Change then
-                Self_ID.Pending_Priority_Change := False;
-                Self_ID.Common.Base_Priority := Self_ID.New_Base_Priority;
-                Set_Priority (Self_ID, Self_ID.Common.Base_Priority);
-             end if;
- 
-             exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level;
- 
-             if Single_Lock then
-                Result := pthread_cond_timedwait (Self_ID.Common.LL.CV'Access,
-                  Single_RTS_Lock'Access, Request'Access);
-             else
-                Result := pthread_cond_timedwait (Self_ID.Common.LL.CV'Access,
-                  Self_ID.Common.LL.L'Access, Request'Access);
-             end if;
- 
-             exit when Abs_Time <= Monotonic_Clock;
- 
-             pragma Assert (Result = 0
-                              or else Result = ETIMEDOUT
-                              or else Result = EINTR);
-          end loop;
- 
-          Self_ID.Common.State := Runnable;
-       end if;
- 
-       Unlock (Self_ID);
- 
-       if Single_Lock then
-          Unlock_RTS;
-       end if;
- 
-       Result := sched_yield;
-       SSL.Abort_Undefer.all;
-    end Timed_Delay;
- 
-    ---------------------
-    -- Monotonic_Clock --
-    ---------------------
- 
-    function Monotonic_Clock return Duration is
-       TS     : aliased timespec;
-       Result : Interfaces.C.int;
-    begin
-       Result := clock_gettime
-         (clock_id => CLOCK_REALTIME, tp => TS'Unchecked_Access);
-       pragma Assert (Result = 0);
-       return To_Duration (TS);
-    end Monotonic_Clock;
- 
-    -------------------
-    -- RT_Resolution --
-    -------------------
- 
-    function RT_Resolution return Duration is
-       Res    : aliased timespec;
-       Result : Interfaces.C.int;
-    begin
-       Result := clock_getres
-         (clock_id => CLOCK_REALTIME, Res => Res'Unchecked_Access);
-       pragma Assert (Result = 0);
-       return To_Duration (Res);
-    end RT_Resolution;
- 
-    ------------
-    -- Wakeup --
-    ------------
- 
-    procedure Wakeup (T : Task_ID; Reason : System.Tasking.Task_States) is
-       pragma Unreferenced (Reason);
-       Result : Interfaces.C.int;
-    begin
-       Result := pthread_cond_signal (T.Common.LL.CV'Access);
-       pragma Assert (Result = 0);
-    end Wakeup;
- 
-    -----------
-    -- Yield --
-    -----------
- 
-    procedure Yield (Do_Yield : Boolean := True) is
-       Result : Interfaces.C.int;
-       pragma Unreferenced (Result);
-    begin
-       if Do_Yield then
-          Result := sched_yield;
-       end if;
-    end Yield;
- 
-    ------------------
-    -- Set_Priority --
-    ------------------
- 
-    procedure Set_OS_Priority (T : Task_ID; Prio : System.Any_Priority) is
-       Result : Interfaces.C.int;
-       Param  : aliased struct_sched_param;
- 
-    begin
-       Param.sched_priority := Interfaces.C.int (Prio);
- 
-       if Time_Slice_Supported and then Time_Slice_Val > 0 then
-          Result := pthread_setschedparam
-            (T.Common.LL.Thread, SCHED_RR, Param'Access);
- 
-       elsif FIFO_Within_Priorities or else Time_Slice_Val = 0 then
-          Result := pthread_setschedparam
-            (T.Common.LL.Thread, SCHED_FIFO, Param'Access);
- 
-       else
-          Result := pthread_setschedparam
-            (T.Common.LL.Thread, SCHED_OTHER, Param'Access);
-       end if;
- 
-       pragma Assert (Result = 0);
-    end Set_OS_Priority;
- 
-    type Prio_Array_Type is array (System.Any_Priority) of Integer;
-    pragma Atomic_Components (Prio_Array_Type);
-    Prio_Array : Prio_Array_Type;
-    --  Comments needed for these declarations ???
- 
-    procedure Set_Priority
-      (T                   : Task_ID;
-       Prio                : System.Any_Priority;
-       Loss_Of_Inheritance : Boolean := False)
-    is
-       Array_Item : Integer;
- 
-    begin
-       Set_OS_Priority (T, Prio);
- 
-       if Locking_Policy = 'C' then
-          --  Annex D requirements: loss of inheritance puts task at the
-          --  beginning of the queue for that prio; copied from 5ztaprop
-          --  (VxWorks)
- 
-          if Loss_Of_Inheritance
-            and then Prio < T.Common.Current_Priority then
- 
-             Array_Item := Prio_Array (T.Common.Base_Priority) + 1;
-             Prio_Array (T.Common.Base_Priority) := Array_Item;
- 
-             loop
-                Yield;
-                exit when Array_Item = Prio_Array (T.Common.Base_Priority)
-                  or else Prio_Array (T.Common.Base_Priority) = 1;
-             end loop;
- 
-             Prio_Array (T.Common.Base_Priority) :=
-               Prio_Array (T.Common.Base_Priority) - 1;
-          end if;
-       end if;
- 
-       T.Common.Current_Priority := Prio;
-    end Set_Priority;
- 
-    ------------------
-    -- Get_Priority --
-    ------------------
- 
-    function Get_Priority (T : Task_ID) return System.Any_Priority is
-    begin
-       return T.Common.Current_Priority;
-    end Get_Priority;
- 
-    ----------------
-    -- Enter_Task --
-    ----------------
- 
-    procedure Enter_Task (Self_ID : Task_ID) is
-    begin
-       Self_ID.Common.LL.Thread := pthread_self;
-       Self_ID.Common.LL.LWP := lwp_self;
- 
-       Specific.Set (Self_ID);
- 
-       Lock_RTS;
- 
-       for J in Known_Tasks'Range loop
-          if Known_Tasks (J) = null then
-             Known_Tasks (J) := Self_ID;
-             Self_ID.Known_Tasks_Index := J;
-             exit;
-          end if;
-       end loop;
- 
-       Unlock_RTS;
-    end Enter_Task;
- 
-    --------------
-    -- New_ATCB --
-    --------------
- 
-    function New_ATCB (Entry_Num : Task_Entry_Index) return Task_ID is
-    begin
-       return new Ada_Task_Control_Block (Entry_Num);
-    end New_ATCB;
- 
-    -------------------
-    -- Is_Valid_Task --
-    -------------------
- 
-    function Is_Valid_Task return Boolean renames Specific.Is_Valid_Task;
- 
-    -----------------------------
-    -- Register_Foreign_Thread --
-    -----------------------------
- 
-    function Register_Foreign_Thread return Task_ID is
-    begin
-       if Is_Valid_Task then
-          return Self;
-       else
-          return Register_Foreign_Thread (pthread_self);
-       end if;
-    end Register_Foreign_Thread;
- 
-    ----------------------
-    --  Initialize_TCB  --
-    ----------------------
- 
-    procedure Initialize_TCB (Self_ID : Task_ID; Succeeded : out Boolean) is
-       Mutex_Attr : aliased pthread_mutexattr_t;
-       Result     : Interfaces.C.int;
-       Cond_Attr  : aliased pthread_condattr_t;
- 
-    begin
-       --  Give the task a unique serial number.
- 
-       Self_ID.Serial_Number := Next_Serial_Number;
-       Next_Serial_Number := Next_Serial_Number + 1;
-       pragma Assert (Next_Serial_Number /= 0);
- 
-       if not Single_Lock then
-          Result := pthread_mutexattr_init (Mutex_Attr'Access);
-          pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-          if Result = 0 then
-             Result := pthread_mutex_init (Self_ID.Common.LL.L'Access,
-               Mutex_Attr'Access);
-             pragma Assert (Result = 0 or else Result = ENOMEM);
-          end if;
- 
-          if Result /= 0 then
-             Succeeded := False;
-             return;
-          end if;
- 
-          Result := pthread_mutexattr_destroy (Mutex_Attr'Access);
-          pragma Assert (Result = 0);
-       end if;
- 
-       Result := pthread_condattr_init (Cond_Attr'Access);
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result = 0 then
-          Result := pthread_cond_init (Self_ID.Common.LL.CV'Access,
-            Cond_Attr'Access);
-          pragma Assert (Result = 0 or else Result = ENOMEM);
-       end if;
- 
-       if Result = 0 then
-          Succeeded := True;
-       else
-          if not Single_Lock then
-             Result := pthread_mutex_destroy (Self_ID.Common.LL.L'Access);
-             pragma Assert (Result = 0);
-          end if;
- 
-          Succeeded := False;
-       end if;
- 
-       Result := pthread_condattr_destroy (Cond_Attr'Access);
-       pragma Assert (Result = 0);
-    end Initialize_TCB;
- 
-    -----------------
-    -- Create_Task --
-    -----------------
- 
-    procedure Create_Task
-      (T          : Task_ID;
-       Wrapper    : System.Address;
-       Stack_Size : System.Parameters.Size_Type;
-       Priority   : System.Any_Priority;
-       Succeeded  : out Boolean)
-    is
-       Attributes          : aliased pthread_attr_t;
-       Adjusted_Stack_Size : Interfaces.C.size_t;
-       Result              : Interfaces.C.int;
- 
-       function Thread_Body_Access is new
-         Unchecked_Conversion (System.Address, Thread_Body);
- 
-       use System.Task_Info;
- 
-    begin
-       if Stack_Size = Unspecified_Size then
-          Adjusted_Stack_Size := Interfaces.C.size_t (Default_Stack_Size);
- 
-       elsif Stack_Size < Minimum_Stack_Size then
-          Adjusted_Stack_Size := Interfaces.C.size_t (Minimum_Stack_Size);
- 
-       else
-          Adjusted_Stack_Size := Interfaces.C.size_t (Stack_Size);
-       end if;
- 
-       if Stack_Base_Available then
- 
-          --  If Stack Checking is supported then allocate 2 additional pages:
-          --
-          --  In the worst case, stack is allocated at something like
-          --  N * Get_Page_Size - epsilon, we need to add the size for 2 pages
-          --  to be sure the effective stack size is greater than what
-          --  has been asked.
- 
-          Adjusted_Stack_Size := Adjusted_Stack_Size + 2 * Get_Page_Size;
-       end if;
- 
-       Result := pthread_attr_init (Attributes'Access);
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result /= 0 then
-          Succeeded := False;
-          return;
-       end if;
- 
-       Result := pthread_attr_setdetachstate
-         (Attributes'Access, PTHREAD_CREATE_DETACHED);
-       pragma Assert (Result = 0);
- 
-       Result := pthread_attr_setstacksize
-         (Attributes'Access, Adjusted_Stack_Size);
-       pragma Assert (Result = 0);
- 
-       if T.Common.Task_Info /= Default_Scope then
- 
-          --  We are assuming that Scope_Type has the same values than the
-          --  corresponding C macros
- 
-          Result := pthread_attr_setscope
-            (Attributes'Access, Task_Info_Type'Pos (T.Common.Task_Info));
-          pragma Assert (Result = 0);
-       end if;
- 
-       --  Since the initial signal mask of a thread is inherited from the
-       --  creator, and the Environment task has all its signals masked, we
-       --  do not need to manipulate caller's signal mask at this point.
-       --  All tasks in RTS will have All_Tasks_Mask initially.
- 
-       Result := pthread_create
-         (T.Common.LL.Thread'Access,
-          Attributes'Access,
-          Thread_Body_Access (Wrapper),
-          To_Address (T));
-       pragma Assert (Result = 0 or else Result = EAGAIN);
- 
-       Succeeded := Result = 0;
- 
-       Result := pthread_attr_destroy (Attributes'Access);
-       pragma Assert (Result = 0);
- 
-       Set_Priority (T, Priority);
-    end Create_Task;
- 
-    ------------------
-    -- Finalize_TCB --
-    ------------------
- 
-    procedure Finalize_TCB (T : Task_ID) is
-       Result : Interfaces.C.int;
-       Tmp    : Task_ID := T;
-       Is_Self : constant Boolean := T = Self;
- 
-       procedure Free is new
-         Unchecked_Deallocation (Ada_Task_Control_Block, Task_ID);
- 
-    begin
-       if not Single_Lock then
-          Result := pthread_mutex_destroy (T.Common.LL.L'Access);
-          pragma Assert (Result = 0);
-       end if;
- 
-       Result := pthread_cond_destroy (T.Common.LL.CV'Access);
-       pragma Assert (Result = 0);
- 
-       if T.Known_Tasks_Index /= -1 then
-          Known_Tasks (T.Known_Tasks_Index) := null;
-       end if;
- 
-       Free (Tmp);
- 
-       if Is_Self then
-          Result := st_setspecific (ATCB_Key, System.Null_Address);
-          pragma Assert (Result = 0);
-       end if;
- 
-    end Finalize_TCB;
- 
-    ---------------
-    -- Exit_Task --
-    ---------------
- 
-    procedure Exit_Task is
-    begin
-       Specific.Set (null);
-    end Exit_Task;
- 
-    ----------------
-    -- Abort_Task --
-    ----------------
- 
-    procedure Abort_Task (T : Task_ID) is
-       Result : Interfaces.C.int;
-    begin
-       Result := pthread_kill (T.Common.LL.Thread,
-         Signal (System.Interrupt_Management.Abort_Task_Interrupt));
-       pragma Assert (Result = 0);
-    end Abort_Task;
- 
-    ----------------
-    -- Check_Exit --
-    ----------------
- 
-    --  Dummy versions
- 
-    function Check_Exit (Self_ID : ST.Task_ID) return Boolean is
-       pragma Unreferenced (Self_ID);
-    begin
-       return True;
-    end Check_Exit;
- 
-    --------------------
-    -- Check_No_Locks --
-    --------------------
- 
-    function Check_No_Locks (Self_ID : ST.Task_ID) return Boolean is
-       pragma Unreferenced (Self_ID);
-    begin
-       return True;
-    end Check_No_Locks;
- 
-    ----------------------
-    -- Environment_Task --
-    ----------------------
- 
-    function Environment_Task return Task_ID is
-    begin
-       return Environment_Task_ID;
-    end Environment_Task;
- 
-    --------------
-    -- Lock_RTS --
-    --------------
- 
-    procedure Lock_RTS is
-    begin
-       Write_Lock (Single_RTS_Lock'Access, Global_Lock => True);
-    end Lock_RTS;
- 
-    ----------------
-    -- Unlock_RTS --
-    ----------------
- 
-    procedure Unlock_RTS is
-    begin
-       Unlock (Single_RTS_Lock'Access, Global_Lock => True);
-    end Unlock_RTS;
- 
-    ------------------
-    -- Suspend_Task --
-    ------------------
- 
-    function Suspend_Task
-      (T           : ST.Task_ID;
-       Thread_Self : Thread_Id)
-       return        Boolean
-    is
-       pragma Unreferenced (T);
-       pragma Unreferenced (Thread_Self);
-    begin
-       return False;
-    end Suspend_Task;
- 
-    -----------------
-    -- Resume_Task --
-    -----------------
- 
-    function Resume_Task
-      (T           : ST.Task_ID;
-       Thread_Self : Thread_Id) return Boolean
-    is
-       pragma Unreferenced (T);
-       pragma Unreferenced (Thread_Self);
-    begin
-       return False;
-    end Resume_Task;
- 
-    ----------------
-    -- Initialize --
-    ----------------
- 
-    procedure Initialize (Environment_Task : Task_ID) is
-       act     : aliased struct_sigaction;
-       old_act : aliased struct_sigaction;
-       Tmp_Set : aliased sigset_t;
-       Result  : Interfaces.C.int;
- 
-       function State
-         (Int  : System.Interrupt_Management.Interrupt_ID)
-          return Character;
-       pragma Import (C, State, "__gnat_get_interrupt_state");
-       --  Get interrupt state.  Defined in a-init.c
-       --  The input argument is the interrupt number,
-       --  and the result is one of the following:
- 
-       Default : constant Character := 's';
-       --    'n'   this interrupt not set by any Interrupt_State pragma
-       --    'u'   Interrupt_State pragma set state to User
-       --    'r'   Interrupt_State pragma set state to Runtime
-       --    's'   Interrupt_State pragma set state to System (use "default"
-       --           system handler)
- 
-    begin
-       Environment_Task_ID := Environment_Task;
- 
-       --  Initialize the lock used to synchronize chain of all ATCBs.
- 
-       Initialize_Lock (Single_RTS_Lock'Access, RTS_Lock_Level);
- 
-       Specific.Initialize (Environment_Task);
- 
-       Enter_Task (Environment_Task);
- 
-       --  Install the abort-signal handler
- 
-       if State (System.Interrupt_Management.Abort_Task_Interrupt)
-                                                      /= Default
-       then
-          act.sa_flags := 0;
-          act.sa_handler := Abort_Handler'Address;
- 
-          Result := sigemptyset (Tmp_Set'Access);
-          pragma Assert (Result = 0);
-          act.sa_mask := Tmp_Set;
- 
-          Result :=
-            sigaction
-            (Signal (System.Interrupt_Management.Abort_Task_Interrupt),
-             act'Unchecked_Access,
-             old_act'Unchecked_Access);
- 
-          pragma Assert (Result = 0);
-       end if;
-    end Initialize;
- 
- begin
-    declare
-       Result : Interfaces.C.int;
- 
-    begin
-       --  Mask Environment task for all signals. The original mask of the
-       --  Environment task will be recovered by Interrupt_Server task
-       --  during the elaboration of s-interr.adb.
- 
-       System.Interrupt_Management.Operations.Set_Interrupt_Mask
-         (System.Interrupt_Management.Operations.All_Tasks_Mask'Access);
- 
-       --  Prepare the set of signals that should unblocked in all tasks
- 
-       Result := sigemptyset (Unblocked_Signal_Mask'Access);
-       pragma Assert (Result = 0);
- 
-       for J in Interrupt_Management.Interrupt_ID loop
-          if System.Interrupt_Management.Keep_Unmasked (J) then
-             Result := sigaddset (Unblocked_Signal_Mask'Access, Signal (J));
-             pragma Assert (Result = 0);
-          end if;
-       end loop;
-    end;
- end System.Task_Primitives.Operations;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/56taspri.ads gcc-4.0.0/gcc/ada/56taspri.ads
*** gcc-3.4.3/gcc/ada/56taspri.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/56taspri.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,97 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
- --                                                                          --
- --                 S Y S T E M . T A S K _ P R I M I T I V E S              --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --             Copyright (C) 1991-1994, Florida State University            --
- --             Copyright (C) 1995-2003, Ada Core Technologies               --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a LynxOS version of this package, derived from
- --  7staspri.ads
- 
- pragma Polling (Off);
- --  Turn off polling, we do not want ATC polling to take place during
- --  tasking operations. It causes infinite loops and other problems.
- 
- with System.OS_Interface;
- --  used for pthread_mutex_t
- --           pthread_cond_t
- --           pthread_t
- 
- package System.Task_Primitives is
- 
-    type Lock is limited private;
-    --  Should be used for implementation of protected objects.
- 
-    type RTS_Lock is limited private;
-    --  Should be used inside the runtime system.
-    --  The difference between Lock and the RTS_Lock is that the later
-    --  one serves only as a semaphore so that do not check for
-    --  ceiling violations.
- 
-    type Task_Body_Access is access procedure;
-    --  Pointer to the task body's entry point (or possibly a wrapper
-    --  declared local to the GNARL).
- 
-    type Private_Data is limited private;
-    --  Any information that the GNULLI needs maintained on a per-task
-    --  basis.  A component of this type is guaranteed to be included
-    --  in the Ada_Task_Control_Block.
- 
- private
- 
-    type Lock is record
-       Mutex          : aliased System.OS_Interface.pthread_mutex_t;
-       Ceiling        : System.Any_Priority;
-       Saved_Priority : System.Any_Priority;
-    end record;
- 
-    type RTS_Lock is new System.OS_Interface.pthread_mutex_t;
- 
-    type Private_Data is record
-       Thread : aliased System.OS_Interface.pthread_t;
-       pragma Atomic (Thread);
-       --  Thread field may be updated by two different threads of control.
-       --  (See, Enter_Task and Create_Task in s-taprop.adb).
-       --  They put the same value (thr_self value). We do not want to
-       --  use lock on those operations and the only thing we have to
-       --  make sure is that they are updated in atomic fashion.
- 
-       LWP : aliased System.Address;
-       --  The purpose of this field is to provide a better tasking support on
-       --  gdb. The order of the two first fields (Thread and LWP) is important.
-       --  On targets where lwp is not relevant, this is equivalent to Thread.
- 
-       CV : aliased System.OS_Interface.pthread_cond_t;
- 
-       L  : aliased RTS_Lock;
-       --  Protection for all components is lock L
-    end record;
- 
- end System.Task_Primitives;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/56tpopsp.adb gcc-4.0.0/gcc/ada/56tpopsp.adb
*** gcc-3.4.3/gcc/ada/56tpopsp.adb	Mon Jan  5 15:20:42 2004
--- gcc-4.0.0/gcc/ada/56tpopsp.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,113 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                SYSTEM.TASK_PRIMITIVES.OPERATIONS.SPECIFIC                --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --         Copyright (C) 1992-2003, Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a LynxOS version of this package.
- 
- separate (System.Task_Primitives.Operations)
- package body Specific is
- 
-    ----------------
-    -- Initialize --
-    ----------------
- 
-    procedure Initialize (Environment_Task : Task_ID) is
-       pragma Warnings (Off, Environment_Task);
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := st_keycreate (null, ATCB_Key'Access);
-       pragma Assert (Result = 0);
-    end Initialize;
- 
-    -------------------
-    -- Is_Valid_Task --
-    -------------------
- 
-    function Is_Valid_Task return Boolean is
-       Result : Interfaces.C.int;
-       Value : aliased System.Address;
-    begin
-       Result := st_getspecific (ATCB_Key, Value'Address);
-       pragma Assert (Result = 0);
-       return (Value /= System.Null_Address);
-    end Is_Valid_Task;
- 
-    ---------
-    -- Set --
-    ---------
- 
-    procedure Set (Self_Id : Task_ID) is
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := st_setspecific (ATCB_Key, To_Address (Self_Id));
-       pragma Assert (Result = 0);
-    end Set;
- 
-    ----------
-    -- Self --
-    ----------
- 
-    --  To make Ada tasks and C threads interoperate better, we have added some
-    --  functionality to Self. Suppose a C main program (with threads) calls an
-    --  Ada procedure and the Ada procedure calls the tasking runtime system.
-    --  Eventually, a call will be made to self. Since the call is not coming
-    --  from an Ada task, there will be no corresponding ATCB.
- 
-    --  What we do in Self is to catch references that do not come from
-    --  recognized Ada tasks, and create an ATCB for the calling thread.
- 
-    --  The new ATCB will be "detached" from the normal Ada task master
-    --  hierarchy, much like the existing implicitly created signal-server
-    --  tasks.
- 
-    function Self return Task_ID is
-       Value : aliased System.Address;
- 
-       Result : Interfaces.C.int;
-       pragma Unreferenced (Result);
- 
-    begin
-       Result := st_getspecific (ATCB_Key, Value'Address);
-       --  Is it OK not to check this result???
- 
-       --  If the key value is Null, then it is a non-Ada task.
- 
-       if Value /= System.Null_Address then
-          return To_Task_Id (Value);
-       else
-          return Register_Foreign_Thread;
-       end if;
-    end Self;
- 
- end Specific;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/57system.ads gcc-4.0.0/gcc/ada/57system.ads
*** gcc-3.4.3/gcc/ada/57system.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/57system.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,150 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                        GNAT RUN-TIME COMPONENTS                          --
- --                                                                          --
- --                               S Y S T E M                                --
- --                                                                          --
- --                                 S p e c                                  --
- --                           (LynxOS PPC Version)                           --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the  contents of the part following the private keyword. --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- package System is
- pragma Pure (System);
- --  Note that we take advantage of the implementation permission to
- --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
- 
-    type Name is (SYSTEM_NAME_GNAT);
-    System_Name : constant Name := SYSTEM_NAME_GNAT;
- 
-    --  System-Dependent Named Numbers
- 
-    Min_Int               : constant := Long_Long_Integer'First;
-    Max_Int               : constant := Long_Long_Integer'Last;
- 
-    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
-    Max_Nonbinary_Modulus : constant := Integer'Last;
- 
-    Max_Base_Digits       : constant := Long_Long_Float'Digits;
-    Max_Digits            : constant := Long_Long_Float'Digits;
- 
-    Max_Mantissa          : constant := 63;
-    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
- 
-    Tick                  : constant := 0.01;
- 
-    --  Storage-related Declarations
- 
-    type Address is private;
-    Null_Address : constant Address;
- 
-    Storage_Unit : constant := 8;
-    Word_Size    : constant := 32;
-    Memory_Size  : constant := 2 ** 32;
- 
-    --  Address comparison
- 
-    function "<"  (Left, Right : Address) return Boolean;
-    function "<=" (Left, Right : Address) return Boolean;
-    function ">"  (Left, Right : Address) return Boolean;
-    function ">=" (Left, Right : Address) return Boolean;
-    function "="  (Left, Right : Address) return Boolean;
- 
-    pragma Import (Intrinsic, "<");
-    pragma Import (Intrinsic, "<=");
-    pragma Import (Intrinsic, ">");
-    pragma Import (Intrinsic, ">=");
-    pragma Import (Intrinsic, "=");
- 
-    --  Other System-Dependent Declarations
- 
-    type Bit_Order is (High_Order_First, Low_Order_First);
-    Default_Bit_Order : constant Bit_Order := High_Order_First;
- 
-    --  Priority-related Declarations (RM D.1)
- 
-    Max_Priority           : constant Positive := 254;
-    Max_Interrupt_Priority : constant Positive := 255;
- 
-    subtype Any_Priority       is Integer      range   0 .. 255;
-    subtype Priority           is Any_Priority range   0 .. 254;
-    subtype Interrupt_Priority is Any_Priority range 255 .. 255;
- 
-    Default_Priority : constant Priority := 15;
- 
- private
- 
-    type Address is mod Memory_Size;
-    Null_Address : constant Address := 0;
- 
-    --------------------------------------
-    -- System Implementation Parameters --
-    --------------------------------------
- 
-    --  These parameters provide information about the target that is used
-    --  by the compiler. They are in the private part of System, where they
-    --  can be accessed using the special circuitry in the Targparm unit
-    --  whose source should be consulted for more detailed descriptions
-    --  of the individual switch values.
- 
-    AAMP                      : constant Boolean := False;
-    Backend_Divide_Checks     : constant Boolean := False;
-    Backend_Overflow_Checks   : constant Boolean := False;
-    Command_Line_Args         : constant Boolean := True;
-    Configurable_Run_Time     : constant Boolean := False;
-    Denorm                    : constant Boolean := True;
-    Duration_32_Bits          : constant Boolean := False;
-    Exit_Status_Supported     : constant Boolean := True;
-    Fractional_Fixed_Ops      : constant Boolean := False;
-    Frontend_Layout           : constant Boolean := False;
-    Functions_Return_By_DSP   : constant Boolean := False;
-    Machine_Overflows         : constant Boolean := False;
-    Machine_Rounds            : constant Boolean := True;
-    OpenVMS                   : constant Boolean := False;
-    Signed_Zeros              : constant Boolean := True;
-    Stack_Check_Default       : constant Boolean := False;
-    Stack_Check_Probes        : constant Boolean := False;
-    Support_64_Bit_Divides    : constant Boolean := True;
-    Support_Aggregates        : constant Boolean := True;
-    Support_Composite_Assign  : constant Boolean := True;
-    Support_Composite_Compare : constant Boolean := True;
-    Support_Long_Shifts       : constant Boolean := True;
-    Suppress_Standard_Library : constant Boolean := False;
-    Use_Ada_Main_Program_Name : constant Boolean := False;
-    ZCX_By_Default            : constant Boolean := False;
-    GCC_ZCX_Support           : constant Boolean := False;
-    Front_End_ZCX_Support     : constant Boolean := False;
- 
-    --  Obsolete entries, to be removed eventually (bootstrap issues!)
- 
-    High_Integrity_Mode       : constant Boolean := False;
-    Long_Shifts_Inlined       : constant Boolean := True;
- 
- end System;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/58system.ads gcc-4.0.0/gcc/ada/58system.ads
*** gcc-3.4.3/gcc/ada/58system.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/58system.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,150 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                        GNAT RUN-TIME COMPONENTS                          --
- --                                                                          --
- --                               S Y S T E M                                --
- --                                                                          --
- --                                 S p e c                                  --
- --                           (LynxOS x86 Version)                           --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the  contents of the part following the private keyword. --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- package System is
- pragma Pure (System);
- --  Note that we take advantage of the implementation permission to
- --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
- 
-    type Name is (SYSTEM_NAME_GNAT);
-    System_Name : constant Name := SYSTEM_NAME_GNAT;
- 
-    --  System-Dependent Named Numbers
- 
-    Min_Int               : constant := Long_Long_Integer'First;
-    Max_Int               : constant := Long_Long_Integer'Last;
- 
-    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
-    Max_Nonbinary_Modulus : constant := Integer'Last;
- 
-    Max_Base_Digits       : constant := Long_Long_Float'Digits;
-    Max_Digits            : constant := Long_Long_Float'Digits;
- 
-    Max_Mantissa          : constant := 63;
-    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
- 
-    Tick                  : constant := 0.01;
- 
-    --  Storage-related Declarations
- 
-    type Address is private;
-    Null_Address : constant Address;
- 
-    Storage_Unit : constant := 8;
-    Word_Size    : constant := 32;
-    Memory_Size  : constant := 2 ** 32;
- 
-    --  Address comparison
- 
-    function "<"  (Left, Right : Address) return Boolean;
-    function "<=" (Left, Right : Address) return Boolean;
-    function ">"  (Left, Right : Address) return Boolean;
-    function ">=" (Left, Right : Address) return Boolean;
-    function "="  (Left, Right : Address) return Boolean;
- 
-    pragma Import (Intrinsic, "<");
-    pragma Import (Intrinsic, "<=");
-    pragma Import (Intrinsic, ">");
-    pragma Import (Intrinsic, ">=");
-    pragma Import (Intrinsic, "=");
- 
-    --  Other System-Dependent Declarations
- 
-    type Bit_Order is (High_Order_First, Low_Order_First);
-    Default_Bit_Order : constant Bit_Order := Low_Order_First;
- 
-    --  Priority-related Declarations (RM D.1)
- 
-    Max_Priority           : constant Positive := 254;
-    Max_Interrupt_Priority : constant Positive := 255;
- 
-    subtype Any_Priority       is Integer      range   0 .. 255;
-    subtype Priority           is Any_Priority range   0 .. 254;
-    subtype Interrupt_Priority is Any_Priority range 255 .. 255;
- 
-    Default_Priority : constant Priority := 15;
- 
- private
- 
-    type Address is mod Memory_Size;
-    Null_Address : constant Address := 0;
- 
-    --------------------------------------
-    -- System Implementation Parameters --
-    --------------------------------------
- 
-    --  These parameters provide information about the target that is used
-    --  by the compiler. They are in the private part of System, where they
-    --  can be accessed using the special circuitry in the Targparm unit
-    --  whose source should be consulted for more detailed descriptions
-    --  of the individual switch values.
- 
-    AAMP                      : constant Boolean := False;
-    Backend_Divide_Checks     : constant Boolean := False;
-    Backend_Overflow_Checks   : constant Boolean := False;
-    Command_Line_Args         : constant Boolean := True;
-    Configurable_Run_Time     : constant Boolean := False;
-    Denorm                    : constant Boolean := True;
-    Duration_32_Bits          : constant Boolean := False;
-    Exit_Status_Supported     : constant Boolean := True;
-    Fractional_Fixed_Ops      : constant Boolean := False;
-    Frontend_Layout           : constant Boolean := False;
-    Functions_Return_By_DSP   : constant Boolean := False;
-    Machine_Overflows         : constant Boolean := False;
-    Machine_Rounds            : constant Boolean := True;
-    OpenVMS                   : constant Boolean := False;
-    Signed_Zeros              : constant Boolean := True;
-    Stack_Check_Default       : constant Boolean := False;
-    Stack_Check_Probes        : constant Boolean := False;
-    Support_64_Bit_Divides    : constant Boolean := True;
-    Support_Aggregates        : constant Boolean := True;
-    Support_Composite_Assign  : constant Boolean := True;
-    Support_Composite_Compare : constant Boolean := True;
-    Support_Long_Shifts       : constant Boolean := True;
-    Suppress_Standard_Library : constant Boolean := False;
-    Use_Ada_Main_Program_Name : constant Boolean := False;
-    ZCX_By_Default            : constant Boolean := False;
-    GCC_ZCX_Support           : constant Boolean := False;
-    Front_End_ZCX_Support     : constant Boolean := False;
- 
-    --  Obsolete entries, to be removed eventually (bootstrap issues!)
- 
-    High_Integrity_Mode       : constant Boolean := False;
-    Long_Shifts_Inlined       : constant Boolean := True;
- 
- end System;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/59system.ads gcc-4.0.0/gcc/ada/59system.ads
*** gcc-3.4.3/gcc/ada/59system.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/59system.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,164 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                        GNAT RUN-TIME COMPONENTS                          --
- --                                                                          --
- --                               S Y S T E M                                --
- --                                                                          --
- --                                 S p e c                                  --
- --                            (PPC ELF Version)                             --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the  contents of the part following the private keyword. --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- pragma Restrictions (No_Exception_Handlers);
- pragma Restrictions (No_Implicit_Dynamic_Code);
- pragma Restrictions (No_Finalization);
- pragma Discard_Names;
- --  Above pragmas need commenting ???
- 
- package System is
- pragma Pure (System);
- --  Note that we take advantage of the implementation permission to
- --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
- 
-    type Name is (SYSTEM_NAME_GNAT);
-    System_Name : constant Name := SYSTEM_NAME_GNAT;
- 
-    --  System-Dependent Named Numbers
- 
-    Min_Int               : constant := Long_Long_Integer'First;
-    Max_Int               : constant := Long_Long_Integer'Last;
- 
-    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
-    Max_Nonbinary_Modulus : constant := Integer'Last;
- 
-    Max_Base_Digits       : constant := Long_Long_Float'Digits;
-    Max_Digits            : constant := Long_Long_Float'Digits;
- 
-    Max_Mantissa          : constant := 63;
-    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
- 
-    Tick                  : constant := 1.0 / 60.0;
- 
-    --  Storage-related Declarations
- 
-    type Address is private;
-    Null_Address : constant Address;
- 
-    Storage_Unit : constant := 8;
-    Word_Size    : constant := 32;
-    Memory_Size  : constant := 2 ** 32;
- 
-    --  Address comparison
- 
-    function "<"  (Left, Right : Address) return Boolean;
-    function "<=" (Left, Right : Address) return Boolean;
-    function ">"  (Left, Right : Address) return Boolean;
-    function ">=" (Left, Right : Address) return Boolean;
-    function "="  (Left, Right : Address) return Boolean;
- 
-    pragma Import (Intrinsic, "<");
-    pragma Import (Intrinsic, "<=");
-    pragma Import (Intrinsic, ">");
-    pragma Import (Intrinsic, ">=");
-    pragma Import (Intrinsic, "=");
- 
-    --  Other System-Dependent Declarations
- 
-    type Bit_Order is (High_Order_First, Low_Order_First);
-    Default_Bit_Order : constant Bit_Order := High_Order_First;
- 
-    --  Priority-related Declarations (RM D.1)
- 
-    --  256        is reserved for the VxWorks kernel
-    --  248 - 255  correspond to hardware interrupt levels 0 .. 7
-    --  247        is a catchall default "interrupt" priority for signals,
-    --             allowing higher priority than normal tasks, but lower than
-    --             hardware priority levels.  Protected Object ceilings can
-    --             override these values.
-    --  246        is used by the Interrupt_Manager task
- 
-    Max_Priority           : constant Positive := 245;
-    Max_Interrupt_Priority : constant Positive := 255;
- 
-    subtype Any_Priority       is Integer      range   0 .. 255;
-    subtype Priority           is Any_Priority range   0 .. 245;
-    subtype Interrupt_Priority is Any_Priority range 246 .. 255;
- 
-    Default_Priority : constant Priority := 122;
- 
- private
- 
-    type Address is mod Memory_Size;
-    Null_Address : constant Address := 0;
- 
-    --------------------------------------
-    -- System Implementation Parameters --
-    --------------------------------------
- 
-    --  These parameters provide information about the target that is used
-    --  by the compiler. They are in the private part of System, where they
-    --  can be accessed using the special circuitry in the Targparm unit
-    --  whose source should be consulted for more detailed descriptions
-    --  of the individual switch values.
- 
-    AAMP                      : constant Boolean := False;
-    Backend_Divide_Checks     : constant Boolean := False;
-    Backend_Overflow_Checks   : constant Boolean := False;
-    Command_Line_Args         : constant Boolean := False;
-    Configurable_Run_Time     : constant Boolean := True;
-    Denorm                    : constant Boolean := True;
-    Duration_32_Bits          : constant Boolean := True;
-    Exit_Status_Supported     : constant Boolean := False;
-    Fractional_Fixed_Ops      : constant Boolean := False;
-    Frontend_Layout           : constant Boolean := False;
-    Functions_Return_By_DSP   : constant Boolean := False;
-    Machine_Overflows         : constant Boolean := False;
-    Machine_Rounds            : constant Boolean := True;
-    OpenVMS                   : constant Boolean := False;
-    Signed_Zeros              : constant Boolean := True;
-    Stack_Check_Default       : constant Boolean := False;
-    Stack_Check_Probes        : constant Boolean := False;
-    Support_64_Bit_Divides    : constant Boolean := False;
-    Support_Aggregates        : constant Boolean := True;
-    Support_Composite_Assign  : constant Boolean := True;
-    Support_Composite_Compare : constant Boolean := True;
-    Support_Long_Shifts       : constant Boolean := True;
-    Suppress_Standard_Library : constant Boolean := True;
-    Use_Ada_Main_Program_Name : constant Boolean := False;
-    ZCX_By_Default            : constant Boolean := False;
-    GCC_ZCX_Support           : constant Boolean := False;
-    Front_End_ZCX_Support     : constant Boolean := False;
- 
-    --  Obsolete entries, to be removed eventually (bootstrap issues!)
- 
-    High_Integrity_Mode       : constant Boolean := True;
-    Long_Shifts_Inlined       : constant Boolean := False;
- 
- end System;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5amastop.adb gcc-4.0.0/gcc/ada/5amastop.adb
*** gcc-3.4.3/gcc/ada/5amastop.adb	Mon Jan  5 15:20:42 2004
--- gcc-4.0.0/gcc/ada/5amastop.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,181 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                     SYSTEM.MACHINE_STATE_OPERATIONS                      --
- --                                                                          --
- --                                 B o d y                                  --
- --                         (Version for Alpha/Dec Unix)                     --
- --                                                                          --
- --           Copyright (C) 1999-2003 Ada Core Technologies, Inc.            --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This version of System.Machine_State_Operations is for use on
- --  Alpha systems running DEC Unix.
- 
- with System.Memory;
- 
- package body System.Machine_State_Operations is
- 
-    use System.Exceptions;
- 
-    pragma Linker_Options ("-lexc");
-    --  Needed for definitions of exc_capture_context and exc_virtual_unwind
- 
-    ----------------------------
-    -- Allocate_Machine_State --
-    ----------------------------
- 
-    function Allocate_Machine_State return Machine_State is
-       use System.Storage_Elements;
- 
-       function c_machine_state_length return Storage_Offset;
-       pragma Import (C, c_machine_state_length, "__gnat_machine_state_length");
- 
-    begin
-       return Machine_State
-         (Memory.Alloc (Memory.size_t (c_machine_state_length)));
-    end Allocate_Machine_State;
- 
-    -------------------
-    -- Enter_Handler --
-    -------------------
- 
-    procedure Enter_Handler (M : Machine_State; Handler : Handler_Loc) is
-       procedure c_enter_handler (M : Machine_State; Handler : Handler_Loc);
-       pragma Import (C, c_enter_handler, "__gnat_enter_handler");
- 
-    begin
-       c_enter_handler (M, Handler);
-    end Enter_Handler;
- 
-    ----------------
-    -- Fetch_Code --
-    ----------------
- 
-    function Fetch_Code (Loc : Code_Loc) return Code_Loc is
-    begin
-       return Loc;
-    end Fetch_Code;
- 
-    ------------------------
-    -- Free_Machine_State --
-    ------------------------
- 
-    procedure Free_Machine_State (M : in out Machine_State) is
-    begin
-       Memory.Free (Address (M));
-       M := Machine_State (Null_Address);
-    end Free_Machine_State;
- 
-    ------------------
-    -- Get_Code_Loc --
-    ------------------
- 
-    function Get_Code_Loc (M : Machine_State) return Code_Loc is
-       Asm_Call_Size : constant := 4;
- 
-       function c_get_code_loc (M : Machine_State) return Code_Loc;
-       pragma Import (C, c_get_code_loc, "__gnat_get_code_loc");
- 
-       --  Code_Loc returned by c_get_code_loc is the return point but here we
-       --  want Get_Code_Loc to return the call point. Under DEC Unix a call
-       --  asm instruction takes 4 bytes. So we must remove this value from
-       --  c_get_code_loc to have the call point.
- 
-       Loc : constant Code_Loc := c_get_code_loc (M);
- 
-    begin
-       if Loc = 0 then
-          return 0;
-       else
-          return Loc - Asm_Call_Size;
-       end if;
-    end Get_Code_Loc;
- 
-    --------------------------
-    -- Machine_State_Length --
-    --------------------------
- 
-    function Machine_State_Length
-      return System.Storage_Elements.Storage_Offset
-    is
-       use System.Storage_Elements;
- 
-       function c_machine_state_length return Storage_Offset;
-       pragma Import (C, c_machine_state_length, "__gnat_machine_state_length");
- 
-    begin
-       return c_machine_state_length;
-    end Machine_State_Length;
- 
-    ---------------
-    -- Pop_Frame --
-    ---------------
- 
-    procedure Pop_Frame
-      (M    : Machine_State;
-       Info : Subprogram_Info_Type)
-    is
-       pragma Warnings (Off, Info);
- 
-       procedure exc_virtual_unwind
-         (Fcn  : System.Address;
-          M    : Machine_State);
-       pragma Import (C, exc_virtual_unwind, "exc_virtual_unwind");
- 
-    begin
-       exc_virtual_unwind (System.Null_Address, M);
-    end Pop_Frame;
- 
-    -----------------------
-    -- Set_Machine_State --
-    -----------------------
- 
-    procedure Set_Machine_State (M : Machine_State) is
-       procedure c_capture_context (M : Machine_State);
-       pragma Import (C, c_capture_context, "exc_capture_context");
- 
-    begin
-       c_capture_context (M);
-       Pop_Frame (M, System.Null_Address);
-    end Set_Machine_State;
- 
-    ------------------------------
-    -- Set_Signal_Machine_State --
-    ------------------------------
- 
-    procedure Set_Signal_Machine_State
-      (M       : Machine_State;
-       Context : System.Address)
-    is
-       pragma Warnings (Off, M);
-       pragma Warnings (Off, Context);
- 
-    begin
-       null;
-    end Set_Signal_Machine_State;
- 
- end System.Machine_State_Operations;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5aml-tgt.adb gcc-4.0.0/gcc/ada/5aml-tgt.adb
*** gcc-3.4.3/gcc/ada/5aml-tgt.adb	Mon Jan  5 15:20:42 2004
--- gcc-4.0.0/gcc/ada/5aml-tgt.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,389 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                             M L I B . T G T                              --
- --                             (True64 Version)                             --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --              Copyright (C) 2002-2003 Free Software Foundation, Inc.      --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package provides a set of target dependent routines to build
- --  static, dynamic and shared libraries.
- 
- --  This is the True64 version of the body.
- 
- with MLib.Fil;
- with MLib.Utl;
- with Namet;  use Namet;
- with Opt;
- with Output; use Output;
- with Prj.Com;
- with System;
- 
- package body MLib.Tgt is
- 
-    use GNAT;
-    use MLib;
- 
-    Expect_Unresolved : aliased String := "-Wl,-expect_unresolved,*";
- 
-    No_Arguments        : aliased Argument_List         := (1 .. 0 => null);
-    Empty_Argument_List : constant Argument_List_Access := No_Arguments'Access;
- 
-    Wl_Init_String : aliased String         := "-Wl,-init";
-    Wl_Init        : constant String_Access := Wl_Init_String'Access;
-    Wl_Fini_String : aliased String         := "-Wl,-fini";
-    Wl_Fini        : constant String_Access := Wl_Fini_String'Access;
- 
-    Init_Fini_List :  constant Argument_List_Access :=
-                        new Argument_List'(1 => Wl_Init,
-                                           2 => null,
-                                           3 => Wl_Fini,
-                                           4 => null);
-    --  Used to put switches for automatic elaboration/finalization
- 
-    ---------------------
-    -- Archive_Builder --
-    ---------------------
- 
-    function Archive_Builder return String is
-    begin
-       return "ar";
-    end Archive_Builder;
- 
-    -----------------------------
-    -- Archive_Builder_Options --
-    -----------------------------
- 
-    function Archive_Builder_Options return String_List_Access is
-    begin
-       return new String_List'(1 => new String'("cr"));
-    end Archive_Builder_Options;
- 
-    -----------------
-    -- Archive_Ext --
-    -----------------
- 
-    function Archive_Ext return  String is
-    begin
-       return "a";
-    end Archive_Ext;
- 
-    ---------------------
-    -- Archive_Indexer --
-    ---------------------
- 
-    function Archive_Indexer return String is
-    begin
-       return "ranlib";
-    end Archive_Indexer;
- 
-    ---------------------------
-    -- Build_Dynamic_Library --
-    ---------------------------
- 
-    procedure Build_Dynamic_Library
-      (Ofiles       : Argument_List;
-       Foreign      : Argument_List;
-       Afiles       : Argument_List;
-       Options      : Argument_List;
-       Interfaces   : Argument_List;
-       Lib_Filename : String;
-       Lib_Dir      : String;
-       Symbol_Data  : Symbol_Record;
-       Driver_Name  : Name_Id := No_Name;
-       Lib_Address  : String  := "";
-       Lib_Version  : String  := "";
-       Relocatable  : Boolean := False;
-       Auto_Init    : Boolean := False)
-    is
-       pragma Unreferenced (Foreign);
-       pragma Unreferenced (Afiles);
-       pragma Unreferenced (Interfaces);
-       pragma Unreferenced (Symbol_Data);
-       pragma Unreferenced (Lib_Address);
-       pragma Unreferenced (Relocatable);
- 
-       Lib_File : constant String :=
-         Lib_Dir & Directory_Separator & "lib" &
-         Fil.Ext_To (Lib_Filename, DLL_Ext);
- 
-       Version_Arg          : String_Access;
-       Symbolic_Link_Needed : Boolean := False;
- 
-       Init_Fini : Argument_List_Access := Empty_Argument_List;
- 
-    begin
-       if Opt.Verbose_Mode then
-          Write_Str ("building relocatable shared library ");
-          Write_Line (Lib_File);
-       end if;
- 
-       --  If specified, add automatic elaboration/finalization
- 
-       if Auto_Init then
-          Init_Fini := Init_Fini_List;
-          Init_Fini (2) := new String'("-Wl," & Lib_Filename & "init");
-          Init_Fini (4) := new String'("-Wl," & Lib_Filename & "final");
-       end if;
- 
-       if Lib_Version = "" then
-          Utl.Gcc
-            (Output_File => Lib_File,
-             Objects     => Ofiles,
-             Options     =>
-               Options &
-               Expect_Unresolved'Access &
-               Init_Fini.all,
-             Driver_Name => Driver_Name);
- 
-       else
-          Version_Arg := new String'("-Wl,-soname," & Lib_Version);
- 
-          if Is_Absolute_Path (Lib_Version) then
-             Utl.Gcc
-               (Output_File => Lib_Version,
-                Objects     => Ofiles,
-                Options     =>
-                  Options &
-                  Version_Arg &
-                  Expect_Unresolved'Access &
-                  Init_Fini.all,
-                Driver_Name => Driver_Name);
-             Symbolic_Link_Needed := Lib_Version /= Lib_File;
- 
-          else
-             Utl.Gcc
-               (Output_File => Lib_Dir & Directory_Separator & Lib_Version,
-                Objects     => Ofiles,
-                Options     =>
-                  Options &
-                  Version_Arg &
-                  Expect_Unresolved'Access &
-                  Init_Fini.all,
-                Driver_Name => Driver_Name);
-             Symbolic_Link_Needed :=
-               Lib_Dir & Directory_Separator & Lib_Version /= Lib_File;
-          end if;
- 
-          if Symbolic_Link_Needed then
-             declare
-                Success : Boolean;
-                Oldpath : String (1 .. Lib_Version'Length + 1);
-                Newpath : String (1 .. Lib_File'Length + 1);
- 
-                Result : Integer;
-                pragma Unreferenced (Result);
- 
-                function Symlink
-                  (Oldpath : System.Address;
-                   Newpath : System.Address)
-                   return    Integer;
-                pragma Import (C, Symlink, "__gnat_symlink");
- 
-             begin
-                Oldpath (1 .. Lib_Version'Length) := Lib_Version;
-                Oldpath (Oldpath'Last)            := ASCII.NUL;
-                Newpath (1 .. Lib_File'Length)    := Lib_File;
-                Newpath (Newpath'Last)            := ASCII.NUL;
- 
-                Delete_File (Lib_File, Success);
- 
-                Result := Symlink (Oldpath'Address, Newpath'Address);
-             end;
-          end if;
-       end if;
-    end Build_Dynamic_Library;
- 
-    -------------------------
-    -- Default_DLL_Address --
-    -------------------------
- 
-    function Default_DLL_Address return String is
-    begin
-       return "";
-    end Default_DLL_Address;
- 
-    -------------
-    -- DLL_Ext --
-    -------------
- 
-    function DLL_Ext return String is
-    begin
-       return "so";
-    end DLL_Ext;
- 
-    --------------------
-    -- Dynamic_Option --
-    --------------------
- 
-    function Dynamic_Option return String is
-    begin
-       return "-shared";
-    end Dynamic_Option;
- 
-    -------------------
-    -- Is_Object_Ext --
-    -------------------
- 
-    function Is_Object_Ext (Ext : String) return Boolean is
-    begin
-       return Ext = ".o";
-    end Is_Object_Ext;
- 
-    --------------
-    -- Is_C_Ext --
-    --------------
- 
-    function Is_C_Ext (Ext : String) return Boolean is
-    begin
-       return Ext = ".c";
-    end Is_C_Ext;
- 
-    --------------------
-    -- Is_Archive_Ext --
-    --------------------
- 
-    function Is_Archive_Ext (Ext : String) return Boolean is
-    begin
-       return Ext = ".a" or else Ext = ".so";
-    end Is_Archive_Ext;
- 
-    -------------
-    -- Libgnat --
-    -------------
- 
-    function Libgnat return String is
-    begin
-       return "libgnat.a";
-    end Libgnat;
- 
-    ------------------------
-    -- Library_Exists_For --
-    ------------------------
- 
-    function Library_Exists_For (Project : Project_Id) return Boolean is
-    begin
-       if not Projects.Table (Project).Library then
-          Prj.Com.Fail ("INTERNAL ERROR: Library_Exists_For called " &
-                        "for non library project");
-          return False;
- 
-       else
-          declare
-             Lib_Dir : constant String :=
-               Get_Name_String (Projects.Table (Project).Library_Dir);
-             Lib_Name : constant String :=
-               Get_Name_String (Projects.Table (Project).Library_Name);
- 
-          begin
-             if Projects.Table (Project).Library_Kind = Static then
-                return Is_Regular_File
-                  (Lib_Dir & Directory_Separator & "lib" &
-                   Fil.Ext_To (Lib_Name, Archive_Ext));
- 
-             else
-                return Is_Regular_File
-                  (Lib_Dir & Directory_Separator & "lib" &
-                   Fil.Ext_To (Lib_Name, DLL_Ext));
-             end if;
-          end;
-       end if;
-    end Library_Exists_For;
- 
-    ---------------------------
-    -- Library_File_Name_For --
-    ---------------------------
- 
-    function Library_File_Name_For (Project : Project_Id) return Name_Id is
-    begin
-       if not Projects.Table (Project).Library then
-          Prj.Com.Fail ("INTERNAL ERROR: Library_File_Name_For called " &
-                        "for non library project");
-          return No_Name;
- 
-       else
-          declare
-             Lib_Name : constant String :=
-               Get_Name_String (Projects.Table (Project).Library_Name);
- 
-          begin
-             Name_Len := 3;
-             Name_Buffer (1 .. Name_Len) := "lib";
- 
-             if Projects.Table (Project).Library_Kind = Static then
-                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, Archive_Ext));
- 
-             else
-                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, DLL_Ext));
-             end if;
- 
-             return Name_Find;
-          end;
-       end if;
-    end Library_File_Name_For;
- 
-    --------------------------------
-    -- Linker_Library_Path_Option --
-    --------------------------------
- 
-    function Linker_Library_Path_Option return String_Access is
-    begin
-       return new String'("-Wl,-rpath,");
-    end Linker_Library_Path_Option;
- 
-    ----------------
-    -- Object_Ext --
-    ----------------
- 
-    function Object_Ext return String is
-    begin
-       return "o";
-    end Object_Ext;
- 
-    ----------------
-    -- PIC_Option --
-    ----------------
- 
-    function PIC_Option return String is
-    begin
-       return "";
-    end PIC_Option;
- 
-    -----------------------------------------------
-    -- Standalone_Library_Auto_Init_Is_Supported --
-    -----------------------------------------------
- 
-    function Standalone_Library_Auto_Init_Is_Supported return Boolean is
-    begin
-       return True;
-    end Standalone_Library_Auto_Init_Is_Supported;
- 
-    ---------------------------
-    -- Support_For_Libraries --
-    ---------------------------
- 
-    function Support_For_Libraries return Library_Support is
-    begin
-       return Full;
-    end Support_For_Libraries;
- 
- end MLib.Tgt;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5aosinte.adb gcc-4.0.0/gcc/ada/5aosinte.adb
*** gcc-3.4.3/gcc/ada/5aosinte.adb	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/5aosinte.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,135 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   S Y S T E M . O S _ I N T E R F A C E                  --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --         Copyright (C) 1998-2002, Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the DEC Unix version of this package.
- 
- --  This package encapsulates all direct interfaces to OS services
- --  that are needed by children of System.
- 
- pragma Polling (Off);
- --  Turn off polling, we do not want ATC polling to take place during
- --  tasking operations. It causes infinite loops and other problems.
- 
- with Interfaces.C; use Interfaces.C;
- with System.Machine_Code; use System.Machine_Code;
- 
- package body System.OS_Interface is
- 
-    ------------------
-    -- pthread_init --
-    ------------------
- 
-    procedure pthread_init is
-    begin
-       null;
-    end pthread_init;
- 
-    ------------------
-    -- pthread_self --
-    ------------------
- 
-    function pthread_self return pthread_t is
-       Self : pthread_t;
-    begin
-       Asm ("call_pal 0x9e" & ASCII.LF & ASCII.HT &
-            "bis $31, $0, %0",
-            Outputs => pthread_t'Asm_Output ("=r", Self),
-            Clobber => "$0");
-       return Self;
-    end pthread_self;
- 
-    -----------------
-    -- To_Duration --
-    -----------------
- 
-    function To_Duration (TS : timespec) return Duration is
-    begin
-       return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9;
-    end To_Duration;
- 
-    function To_Duration (TV : struct_timeval) return Duration is
-    begin
-       return Duration (TV.tv_sec) + Duration (TV.tv_usec) / 10#1#E6;
-    end To_Duration;
- 
-    -----------------
-    -- To_Timespec --
-    -----------------
- 
-    function To_Timespec (D : Duration) return timespec is
-       S : time_t;
-       F : Duration;
- 
-    begin
-       S := time_t (Long_Long_Integer (D));
-       F := D - Duration (S);
- 
-       --  If F has negative value due to a round-up, adjust for positive F
-       --  value.
- 
-       if F < 0.0 then
-          S := S - 1;
-          F := F + 1.0;
-       end if;
- 
-       return timespec'(tv_sec => S,
-                        tv_nsec => long (Long_Long_Integer (F * 10#1#E9)));
-    end To_Timespec;
- 
-    ----------------
-    -- To_Timeval --
-    ----------------
- 
-    function To_Timeval (D : Duration) return struct_timeval is
-       S : time_t;
-       F : Duration;
- 
-    begin
-       S := time_t (Long_Long_Integer (D));
-       F := D - Duration (S);
- 
-       --  If F has negative value due to a round-up, adjust for positive F
-       --  value.
- 
-       if F < 0.0 then
-          S := S - 1;
-          F := F + 1.0;
-       end if;
- 
-       return
-         struct_timeval'
-           (tv_sec => S,
-            tv_usec => time_t (Long_Long_Integer (F * 10#1#E6)));
-    end To_Timeval;
- 
- end System.OS_Interface;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5aosinte.ads gcc-4.0.0/gcc/ada/5aosinte.ads
*** gcc-3.4.3/gcc/ada/5aosinte.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/5aosinte.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,532 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   S Y S T E M . O S _ I N T E R F A C E                  --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --           Copyright (C) 1998-2002 Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the DEC Unix 4.0/5.1 version of this package.
- 
- --  This package encapsulates all direct interfaces to OS services
- --  that are needed by children of System.
- 
- --  PLEASE DO NOT add any with-clauses to this package
- --  It is designed to be a bottom-level (leaf) package.
- 
- with Interfaces.C;
- package System.OS_Interface is
-    pragma Preelaborate;
- 
-    pragma Linker_Options ("-lpthread");
-    pragma Linker_Options ("-lmach");
-    pragma Linker_Options ("-lexc");
-    pragma Linker_Options ("-lrt");
- 
-    subtype int            is Interfaces.C.int;
-    subtype short          is Interfaces.C.short;
-    subtype long           is Interfaces.C.long;
-    subtype unsigned       is Interfaces.C.unsigned;
-    subtype unsigned_short is Interfaces.C.unsigned_short;
-    subtype unsigned_long  is Interfaces.C.unsigned_long;
-    subtype unsigned_char  is Interfaces.C.unsigned_char;
-    subtype plain_char     is Interfaces.C.plain_char;
-    subtype size_t         is Interfaces.C.size_t;
-    subtype char_array     is Interfaces.C.char_array;
- 
-    -----------
-    -- Errno --
-    -----------
- 
-    function errno return int;
-    pragma Import (C, errno, "_Geterrno");
- 
-    EAGAIN    : constant := 35;
-    EINTR     : constant := 4;
-    EINVAL    : constant := 22;
-    ENOMEM    : constant := 12;
-    ETIMEDOUT : constant := 60;
- 
-    -------------
-    -- Signals --
-    -------------
- 
-    Max_Interrupt : constant := 48;
-    type Signal is new int range 0 .. Max_Interrupt;
-    for Signal'Size use int'Size;
- 
-    SIGHUP     : constant := 1; --  hangup
-    SIGINT     : constant := 2; --  interrupt (rubout)
-    SIGQUIT    : constant := 3; --  quit (ASCD FS)
-    SIGILL     : constant := 4; --  illegal instruction (not reset)
-    SIGTRAP    : constant := 5; --  trace trap (not reset)
-    SIGABRT    : constant := 6; --  used by abort, replace SIGIOT in the  future
-    SIGIOT     : constant := 6; --  abort (terminate) process
-    SIGLOST    : constant := 6; --  old BSD signal ??
-    SIGEMT     : constant := 7; --  EMT instruction
-    SIGFPE     : constant := 8; --  floating point exception
-    SIGKILL    : constant := 9; --  kill (cannot be caught or ignored)
-    SIGBUS     : constant := 10; --  bus error
-    SIGSEGV    : constant := 11; --  segmentation violation
-    SIGSYS     : constant := 12; --  bad argument to system call
-    SIGPIPE    : constant := 13; --  write on a pipe with no one to read it
-    SIGALRM    : constant := 14; --  alarm clock
-    SIGTERM    : constant := 15; --  software termination signal from kill
-    SIGURG     : constant := 16; --  urgent condition on IO channel
-    SIGIOINT   : constant := 16; --  printer to backend error signal
-    SIGSTOP    : constant := 17; --  stop (cannot be caught or ignored)
-    SIGTSTP    : constant := 18; --  user stop requested from tty
-    SIGCONT    : constant := 19; --  stopped process has been continued
-    SIGCHLD    : constant := 20; --  child status change
-    SIGTTIN    : constant := 21; --  background tty read attempted
-    SIGTTOU    : constant := 22; --  background tty write attempted
-    SIGPOLL    : constant := 23; --  I/O possible, or completed
-    SIGIO      : constant := 23; --  STREAMS version of SIGPOLL
-    SIGAIO     : constant := 23; --  base lan i/o
-    SIGPTY     : constant := 23; --  pty i/o
-    SIGXCPU    : constant := 24; --  CPU time limit exceeded
-    SIGXFSZ    : constant := 25; --  filesize limit exceeded
-    SIGVTALRM  : constant := 26; --  virtual timer expired
-    SIGPROF    : constant := 27; --  profiling timer expired
-    SIGWINCH   : constant := 28; --  window size change
-    SIGINFO    : constant := 29; --  information request
-    SIGPWR     : constant := 29; --  Power Fail/Restart -- SVID3/SVR4
-    SIGUSR1    : constant := 30; --  user defined signal 1
-    SIGUSR2    : constant := 31; --  user defined signal 2
-    SIGRESV    : constant := 32; --  reserved by Digital for future use
- 
-    SIGADAABORT : constant := SIGABRT;
- 
-    type Signal_Set is array (Natural range <>) of Signal;
- 
-    Unmasked    : constant Signal_Set := (0 .. 0 => SIGTRAP);
-    Reserved    : constant Signal_Set := (SIGALRM, SIGABRT, SIGKILL, SIGSTOP);
- 
-    type sigset_t is private;
- 
-    function sigaddset (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigaddset);
- 
-    function sigdelset (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigdelset);
- 
-    function sigfillset (set : access sigset_t) return int;
-    pragma Import (C, sigfillset);
- 
-    function sigismember (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigismember);
- 
-    function sigemptyset (set : access sigset_t) return int;
-    pragma Import (C, sigemptyset);
- 
-    type union_type_3 is new String (1 .. 116);
-    type siginfo_t is record
-       si_signo     : int;
-       si_errno     : int;
-       si_code      : int;
-       X_data       : union_type_3;
-    end record;
-    for siginfo_t'Size use 8 * 128;
-    pragma Convention (C, siginfo_t);
- 
-    type struct_sigaction is record
-       sa_handler : System.Address;
-       sa_mask    : sigset_t;
-       sa_flags   : int;
-       sa_signo   : int;
-    end record;
-    pragma Convention (C, struct_sigaction);
-    type struct_sigaction_ptr is access all struct_sigaction;
- 
-    SIG_BLOCK   : constant := 1;
-    SIG_UNBLOCK : constant := 2;
-    SIG_SETMASK : constant := 3;
- 
-    SIG_DFL : constant := 0;
-    SIG_IGN : constant := 1;
- 
-    SA_NODEFER : constant := 8;
-    SA_SIGINFO : constant := 16#40#;
- 
-    function sigaction
-      (sig  : Signal;
-       act  : struct_sigaction_ptr;
-       oact : struct_sigaction_ptr) return int;
-    pragma Import (C, sigaction);
- 
-    ----------
-    -- Time --
-    ----------
- 
-    type timespec is private;
- 
-    function nanosleep (rqtp, rmtp : access timespec)  return int;
-    pragma Import (C, nanosleep);
- 
-    type clockid_t is private;
- 
-    CLOCK_REALTIME : constant clockid_t;
- 
-    function clock_gettime
-      (clock_id : clockid_t;
-       tp       : access timespec) return int;
-    pragma Import (C, clock_gettime);
- 
-    function To_Duration (TS : timespec) return Duration;
-    pragma Inline (To_Duration);
- 
-    function To_Timespec (D : Duration) return timespec;
-    pragma Inline (To_Timespec);
- 
-    type struct_timezone is record
-       tz_minuteswest : int;
-       tz_dsttime     : int;
-    end record;
-    pragma Convention (C, struct_timezone);
-    type struct_timeval is private;
-    --  This is needed on systems that do not have clock_gettime()
-    --  but do have gettimeofday().
- 
-    function To_Duration (TV : struct_timeval) return Duration;
-    pragma Inline (To_Duration);
- 
-    function To_Timeval (D : Duration) return struct_timeval;
-    pragma Inline (To_Timeval);
- 
-    -------------------------
-    -- Priority Scheduling --
-    -------------------------
- 
-    SCHED_FIFO  : constant := 1;
-    SCHED_RR    : constant := 2;
-    SCHED_OTHER : constant := 3;
-    SCHED_LFI   : constant := 5;
- 
-    -------------
-    -- Process --
-    -------------
- 
-    type pid_t is private;
- 
-    function kill (pid : pid_t; sig : Signal) return int;
-    pragma Import (C, kill);
- 
-    function getpid return pid_t;
-    pragma Import (C, getpid);
- 
-    BIND_NO_INHERIT  : constant := 1;
- 
-    function bind_to_cpu
-      (pid       : pid_t;
-       cpu_mask  : unsigned_long;
-       flag      : unsigned_long := BIND_NO_INHERIT) return int;
-    pragma Import (C, bind_to_cpu);
- 
-    -------------
-    -- Threads --
-    -------------
- 
-    type Thread_Body is access
-      function (arg : System.Address) return System.Address;
-    type pthread_t           is private;
-    subtype Thread_Id        is pthread_t;
- 
-    type pthread_mutex_t     is limited private;
-    type pthread_cond_t      is limited private;
-    type pthread_attr_t      is limited private;
-    type pthread_mutexattr_t is limited private;
-    type pthread_condattr_t  is limited private;
-    type pthread_key_t       is private;
- 
-    PTHREAD_CREATE_DETACHED : constant := 1;
- 
-    PTHREAD_SCOPE_PROCESS : constant := 0;
-    PTHREAD_SCOPE_SYSTEM  : constant := 1;
- 
-    PTHREAD_EXPLICIT_SCHED : constant := 1;
- 
-    ---------------------------------------
-    -- Nonstandard Thread Initialization --
-    ---------------------------------------
- 
-    procedure pthread_init;
-    pragma Inline (pthread_init);
-    --  This is a dummy procedure to share some GNULLI files
- 
-    ---------------------------
-    --  POSIX.1c  Section 3  --
-    ---------------------------
- 
-    function sigwait
-      (set : access sigset_t;
-       sig : access Signal) return int;
-    pragma Import (C, sigwait, "__sigwaitd10");
- 
-    function pthread_kill
-      (thread : pthread_t;
-       sig    : Signal) return int;
-    pragma Import (C, pthread_kill);
- 
-    type sigset_t_ptr is access all sigset_t;
- 
-    function pthread_sigmask
-      (how  : int;
-       set  : sigset_t_ptr;
-       oset : sigset_t_ptr) return int;
-    pragma Import (C, pthread_sigmask);
- 
-    ----------------------------
-    --  POSIX.1c  Section 11  --
-    ----------------------------
- 
-    function pthread_mutexattr_init (attr : access pthread_mutexattr_t)
-      return int;
-    pragma Import (C, pthread_mutexattr_init);
- 
-    function pthread_mutexattr_destroy
-      (attr : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutexattr_destroy);
- 
-    function pthread_mutex_init
-      (mutex : access pthread_mutex_t;
-       attr  : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutex_init, "__pthread_mutex_init");
- 
-    function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_mutex_destroy, "__pthread_mutex_destroy");
- 
-    function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_mutex_lock, "__pthread_mutex_lock");
- 
-    function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_mutex_unlock, "__pthread_mutex_unlock");
- 
-    function pthread_condattr_init
-      (attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_condattr_init);
- 
-    function pthread_condattr_destroy
-      (attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_condattr_destroy);
- 
-    function pthread_cond_init
-      (cond : access pthread_cond_t;
-       attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_cond_init, "__pthread_cond_init");
- 
-    function pthread_cond_destroy (cond : access pthread_cond_t) return int;
-    pragma Import (C, pthread_cond_destroy, "__pthread_cond_destroy");
- 
-    function pthread_cond_signal (cond : access pthread_cond_t) return int;
-    pragma Import (C, pthread_cond_signal, "__pthread_cond_signal");
- 
-    function pthread_cond_wait
-      (cond  : access pthread_cond_t;
-       mutex : access pthread_mutex_t) return  int;
-    pragma Import (C, pthread_cond_wait, "__pthread_cond_wait");
- 
-    function pthread_cond_timedwait
-      (cond    : access pthread_cond_t;
-       mutex   : access pthread_mutex_t;
-       abstime : access timespec) return int;
-    pragma Import (C, pthread_cond_timedwait, "__pthread_cond_timedwait");
- 
-    ----------------------------
-    --  POSIX.1c  Section 13  --
-    ----------------------------
- 
-    function pthread_mutexattr_setprotocol
-      (attr     : access pthread_mutexattr_t;
-       protocol : int) return int;
-    pragma Import (C, pthread_mutexattr_setprotocol);
- 
-    function pthread_mutexattr_setprioceiling
-      (attr     : access pthread_mutexattr_t;
-       prioceiling : int) return int;
-    pragma Import (C, pthread_mutexattr_setprioceiling);
- 
-    type struct_sched_param is record
-       sched_priority : int;  --  scheduling priority
-    end record;
- 
-    function pthread_setschedparam
-      (thread : pthread_t;
-       policy : int;
-       param  : access struct_sched_param) return int;
-    pragma Import (C, pthread_setschedparam);
- 
-    function pthread_attr_setscope
-      (attr            : access pthread_attr_t;
-       contentionscope : int) return int;
-    pragma Import (C, pthread_attr_setscope);
- 
-    function pthread_attr_setinheritsched
-      (attr            : access pthread_attr_t;
-       inheritsched    : int) return int;
-    pragma Import (C, pthread_attr_setinheritsched,
-      "__pthread_attr_setinheritsched");
- 
-    function pthread_attr_setschedpolicy
-      (attr : access pthread_attr_t; policy : int) return int;
-    pragma Import (C, pthread_attr_setschedpolicy);
- 
-    function pthread_attr_setschedparam
-      (attr        : access pthread_attr_t;
-       sched_param : access struct_sched_param) return int;
-    pragma Import (C, pthread_attr_setschedparam);
- 
-    function sched_yield return int;
-    pragma Import (C, sched_yield);
- 
-    ---------------------------
-    -- P1003.1c - Section 16 --
-    ---------------------------
- 
-    function pthread_attr_init (attributes : access pthread_attr_t)
-      return int;
-    pragma Import (C, pthread_attr_init);
- 
-    function pthread_attr_destroy (attributes : access pthread_attr_t)
-      return int;
-    pragma Import (C, pthread_attr_destroy);
- 
-    function pthread_attr_setdetachstate
-      (attr        : access pthread_attr_t;
-       detachstate : int) return int;
-    pragma Import (C, pthread_attr_setdetachstate);
- 
-    function pthread_attr_setstacksize
-      (attr      : access pthread_attr_t;
-       stacksize : size_t) return int;
-    pragma Import (C, pthread_attr_setstacksize, "__pthread_attr_setstacksize");
- 
-    function pthread_create
-      (thread        : access pthread_t;
-       attributes    : access pthread_attr_t;
-       start_routine : Thread_Body;
-       arg           : System.Address) return int;
-    pragma Import (C, pthread_create, "__pthread_create");
- 
-    procedure pthread_exit (status : System.Address);
-    pragma Import (C, pthread_exit, "__pthread_exit");
- 
-    function pthread_self return pthread_t;
-    pragma Inline (pthread_self);
- 
-    --------------------------
-    -- POSIX.1c  Section 17 --
-    --------------------------
- 
-    function pthread_setspecific
-      (key : pthread_key_t; value : System.Address) return int;
-    pragma Import (C, pthread_setspecific, "__pthread_setspecific");
- 
-    function pthread_getspecific (key : pthread_key_t) return System.Address;
-    pragma Import (C, pthread_getspecific, "__pthread_getspecific");
- 
-    type destructor_pointer is access procedure (arg : System.Address);
- 
-    function pthread_key_create
-      (key        : access pthread_key_t;
-       destructor : destructor_pointer) return int;
-    pragma Import (C, pthread_key_create);
- 
- private
- 
-    type sigset_t is new unsigned_long;
- 
-    type pid_t is new int;
- 
-    type time_t is new int;
- 
-    type timespec is record
-       tv_sec  : time_t;
-       tv_nsec : long;
-    end record;
-    pragma Convention (C, timespec);
- 
-    type clockid_t is new int;
-    CLOCK_REALTIME : constant clockid_t := 1;
- 
-    type struct_timeval is record
-       tv_sec  : time_t;
-       tv_usec : time_t;
-    end record;
-    pragma Convention (C, struct_timeval);
- 
-    type unsigned_long_array is array (Natural range <>) of unsigned_long;
- 
-    type pthread_t is new System.Address;
- 
-    type pthread_cond_t is record
-       state     : unsigned;
-       valid     : unsigned;
-       name      : System.Address;
-       arg       : unsigned;
-       reserved1 : unsigned;
-       sequence  : unsigned_long;
-       block     : System.Address;
-    end record;
-    pragma Convention (C, pthread_cond_t);
- 
-    type pthread_attr_t is record
-       valid    : long;
-       name     : System.Address;
-       arg      : unsigned_long;
-       reserved : unsigned_long_array (0 .. 18);
-    end record;
-    pragma Convention (C, pthread_attr_t);
- 
-    type pthread_mutex_t is record
-       lock     : unsigned;
-       valid    : unsigned;
-       name     : System.Address;
-       arg      : unsigned;
-       depth    : unsigned;
-       sequence : unsigned_long;
-       owner    : unsigned_long;
-       block    : System.Address;
-    end record;
-    for pthread_mutex_t'Size use 8 * 48;
-    pragma Convention (C, pthread_mutex_t);
- 
-    type pthread_mutexattr_t is record
-       valid    : long;
-       reserved : unsigned_long_array (0 .. 14);
-    end record;
-    pragma Convention (C, pthread_mutexattr_t);
- 
-    type pthread_condattr_t is record
-       valid    : long;
-       reserved : unsigned_long_array (0 .. 12);
-    end record;
-    pragma Convention (C, pthread_condattr_t);
- 
-    type pthread_key_t is new unsigned;
- 
- end System.OS_Interface;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5asystem.ads gcc-4.0.0/gcc/ada/5asystem.ads
*** gcc-3.4.3/gcc/ada/5asystem.ads	Thu Nov 27 11:40:45 2003
--- gcc-4.0.0/gcc/ada/5asystem.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,221 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                        GNAT RUN-TIME COMPONENTS                          --
- --                                                                          --
- --                               S Y S T E M                                --
- --                                                                          --
- --                                 S p e c                                  --
- --                           (DEC Unix Version)                             --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the  contents of the part following the private keyword. --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- package System is
- pragma Pure (System);
- --  Note that we take advantage of the implementation permission to
- --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
- 
-    type Name is (SYSTEM_NAME_GNAT);
-    System_Name : constant Name := SYSTEM_NAME_GNAT;
- 
-    --  System-Dependent Named Numbers
- 
-    Min_Int               : constant := Long_Long_Integer'First;
-    Max_Int               : constant := Long_Long_Integer'Last;
- 
-    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
-    Max_Nonbinary_Modulus : constant := Integer'Last;
- 
-    Max_Base_Digits       : constant := Long_Long_Float'Digits;
-    Max_Digits            : constant := Long_Long_Float'Digits;
- 
-    Max_Mantissa          : constant := 63;
-    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
- 
-    Tick                  : constant := 1.0 / 1024.0;
- 
-    --  Storage-related Declarations
- 
-    type Address is private;
-    Null_Address : constant Address;
- 
-    Storage_Unit : constant := 8;
-    Word_Size    : constant := 64;
-    Memory_Size  : constant := 2 ** 64;
- 
-    --  Address comparison
- 
-    function "<"  (Left, Right : Address) return Boolean;
-    function "<=" (Left, Right : Address) return Boolean;
-    function ">"  (Left, Right : Address) return Boolean;
-    function ">=" (Left, Right : Address) return Boolean;
-    function "="  (Left, Right : Address) return Boolean;
- 
-    pragma Import (Intrinsic, "<");
-    pragma Import (Intrinsic, "<=");
-    pragma Import (Intrinsic, ">");
-    pragma Import (Intrinsic, ">=");
-    pragma Import (Intrinsic, "=");
- 
-    --  Other System-Dependent Declarations
- 
-    type Bit_Order is (High_Order_First, Low_Order_First);
-    Default_Bit_Order : constant Bit_Order := Low_Order_First;
- 
-    --  Priority-related Declarations (RM D.1)
- 
-    Max_Priority           : constant Positive := 60;
-    Max_Interrupt_Priority : constant Positive := 63;
- 
-    subtype Any_Priority       is Integer      range  0 .. 63;
-    subtype Priority           is Any_Priority range  0 .. 60;
-    subtype Interrupt_Priority is Any_Priority range 61 .. 63;
- 
-    Default_Priority : constant Priority := 30;
- 
- private
- 
-    type Address is mod Memory_Size;
-    Null_Address : constant Address := 0;
- 
-    --------------------------------------
-    -- System Implementation Parameters --
-    --------------------------------------
- 
-    --  These parameters provide information about the target that is used
-    --  by the compiler. They are in the private part of System, where they
-    --  can be accessed using the special circuitry in the Targparm unit
-    --  whose source should be consulted for more detailed descriptions
-    --  of the individual switch values.
- 
-    AAMP                      : constant Boolean := False;
-    Backend_Divide_Checks     : constant Boolean := False;
-    Backend_Overflow_Checks   : constant Boolean := False;
-    Command_Line_Args         : constant Boolean := True;
-    Configurable_Run_Time     : constant Boolean := False;
-    Denorm                    : constant Boolean := False;
-    Duration_32_Bits          : constant Boolean := False;
-    Exit_Status_Supported     : constant Boolean := True;
-    Fractional_Fixed_Ops      : constant Boolean := False;
-    Frontend_Layout           : constant Boolean := False;
-    Functions_Return_By_DSP   : constant Boolean := False;
-    Machine_Overflows         : constant Boolean := False;
-    Machine_Rounds            : constant Boolean := True;
-    OpenVMS                   : constant Boolean := False;
-    Signed_Zeros              : constant Boolean := True;
-    Stack_Check_Default       : constant Boolean := True;
-    Stack_Check_Probes        : constant Boolean := True;
-    Support_64_Bit_Divides    : constant Boolean := True;
-    Support_Aggregates        : constant Boolean := True;
-    Support_Composite_Assign  : constant Boolean := True;
-    Support_Composite_Compare : constant Boolean := True;
-    Support_Long_Shifts       : constant Boolean := True;
-    Suppress_Standard_Library : constant Boolean := False;
-    Use_Ada_Main_Program_Name : constant Boolean := False;
-    ZCX_By_Default            : constant Boolean := True;
-    GCC_ZCX_Support           : constant Boolean := True;
-    Front_End_ZCX_Support     : constant Boolean := False;
- 
-    --  Obsolete entries, to be removed eventually (bootstrap issues!)
- 
-    High_Integrity_Mode       : constant Boolean := False;
-    Long_Shifts_Inlined       : constant Boolean := True;
- 
-    --  Note: Denorm is False because denormals are only handled properly
-    --  if the -mieee switch is set, and we do not require this usage.
- 
-    ---------------------------
-    -- Underlying Priorities --
-    ---------------------------
- 
-    --  Important note: this section of the file must come AFTER the
-    --  definition of the system implementation parameters to ensure
-    --  that the value of these parameters is available for analysis
-    --  of the declarations here (using Rtsfind at compile time).
- 
-    --  The underlying priorities table provides a generalized mechanism
-    --  for mapping from Ada priorities to system priorities. In some
-    --  cases a 1-1 mapping is not the convenient or optimal choice.
- 
-    --  For Dec Unix 4.0d, we use a default 1-to-1 mapping that provides
-    --  the full range of 64 priorities available from the operating system.
- 
-    --  On DU prior to 4.0d, less than 64 priorities are available so there
-    --  are two possibilities:
- 
-    --    Limit your range of priorities to the range provided by the
-    --    OS (e.g 16 .. 32 on 4.0b)
- 
-    --    Replace the standard table as described below
- 
-    --  To replace the default values of the Underlying_Priorities mapping,
-    --  copy this source file into your build directory, edit the file to
-    --  reflect your desired behavior, and recompile with the command:
- 
-    --     $ gcc -c -O3 -gnatpgn system.ads
- 
-    --  then recompile the run-time parts that depend on this package:
- 
-    --     $ gnatmake -a -gnatn -O3 <your application>
- 
-    --  then force rebuilding your application if you need different options:
- 
-    --     $ gnatmake -f <your options> <your application>
- 
-    type Priorities_Mapping is array (Any_Priority) of Integer;
-    pragma Suppress_Initialization (Priorities_Mapping);
-    --  Suppress initialization in case gnat.adc specifies Normalize_Scalars
- 
-    Underlying_Priorities : constant Priorities_Mapping :=
- 
-      (Priority'First => 0,
- 
-        1 =>  1,  2 =>  2,  3 =>  3,  4 =>  4,  5 =>  5,
-        6 =>  6,  7 =>  7,  8 =>  8,  9 =>  9, 10 => 10,
-       11 => 11, 12 => 12, 13 => 13, 14 => 14, 15 => 15,
-       16 => 16, 17 => 17, 18 => 18, 19 => 19, 20 => 20,
-       21 => 21, 22 => 22, 23 => 23, 24 => 24, 25 => 25,
-       26 => 26, 27 => 27, 28 => 28, 29 => 29,
- 
-       Default_Priority => 30,
- 
-       31 => 31, 32 => 32, 33 => 33, 34 => 34, 35 => 35,
-       36 => 36, 37 => 37, 38 => 38, 39 => 39, 40 => 40,
-       41 => 41, 42 => 42, 43 => 43, 44 => 44, 45 => 45,
-       46 => 46, 47 => 47, 48 => 48, 49 => 49, 50 => 50,
-       51 => 51, 52 => 52, 53 => 53, 54 => 54, 55 => 55,
-       56 => 56, 57 => 57, 58 => 58, 59 => 59,
- 
-       Priority'Last => 60,
- 
-       61 => 61, 62 => 62,
- 
-       Interrupt_Priority'Last => 63);
- 
- end System;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5ataprop.adb gcc-4.0.0/gcc/ada/5ataprop.adb
*** gcc-3.4.3/gcc/ada/5ataprop.adb	Mon Jan  5 15:20:42 2004
--- gcc-4.0.0/gcc/ada/5ataprop.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,1144 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --     S Y S T E M . T A S K _ P R I M I T I V E S . O P E R A T I O N S    --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --         Copyright (C) 1992-2003, Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a DEC Unix 4.0d version of this package
- 
- --  This package contains all the GNULL primitives that interface directly
- --  with the underlying OS.
- 
- pragma Polling (Off);
- --  Turn off polling, we do not want ATC polling to take place during
- --  tasking operations. It causes infinite loops and other problems.
- 
- with System.Tasking.Debug;
- --  used for Known_Tasks
- 
- with System.Task_Info;
- --  used for Task_Info_Type
- 
- with Interfaces;
- --  used for Shift_Left
- 
- with Interfaces.C;
- --  used for int
- --           size_t
- 
- with System.Interrupt_Management;
- --  used for Keep_Unmasked
- --           Abort_Task_Interrupt
- --           Interrupt_ID
- 
- with System.Interrupt_Management.Operations;
- --  used for Set_Interrupt_Mask
- --           All_Tasks_Mask
- pragma Elaborate_All (System.Interrupt_Management.Operations);
- 
- with System.Parameters;
- --  used for Size_Type
- 
- with System.Tasking;
- --  used for Ada_Task_Control_Block
- --           Task_ID
- --           ATCB components and types
- 
- with System.Soft_Links;
- --  used for Defer/Undefer_Abort
- 
- --  Note that we do not use System.Tasking.Initialization directly since
- --  this is a higher level package that we shouldn't depend on. For example
- --  when using the restricted run time, it is replaced by
- --  System.Tasking.Restricted.Initialization
- 
- with System.OS_Primitives;
- --  used for Delay_Modes
- 
- with Unchecked_Conversion;
- with Unchecked_Deallocation;
- 
- package body System.Task_Primitives.Operations is
- 
-    use System.Tasking.Debug;
-    use System.Tasking;
-    use Interfaces.C;
-    use System.OS_Interface;
-    use System.Parameters;
-    use System.OS_Primitives;
- 
-    package SSL renames System.Soft_Links;
- 
-    ----------------
-    -- Local Data --
-    ----------------
- 
-    --  The followings are logically constants, but need to be initialized
-    --  at run time.
- 
-    Single_RTS_Lock : aliased RTS_Lock;
-    --  This is a lock to allow only one thread of control in the RTS at
-    --  a time; it is used to execute in mutual exclusion from all other tasks.
-    --  Used mainly in Single_Lock mode, but also to protect All_Tasks_List
- 
-    ATCB_Key : aliased pthread_key_t;
-    --  Key used to find the Ada Task_ID associated with a thread
- 
-    Environment_Task_ID : Task_ID;
-    --  A variable to hold Task_ID for the environment task.
- 
-    Unblocked_Signal_Mask : aliased sigset_t;
-    --  The set of signals that should unblocked in all tasks
- 
-    Time_Slice_Val : Integer;
-    pragma Import (C, Time_Slice_Val, "__gl_time_slice_val");
- 
-    Locking_Policy : Character;
-    pragma Import (C, Locking_Policy, "__gl_locking_policy");
- 
-    Dispatching_Policy : Character;
-    pragma Import (C, Dispatching_Policy, "__gl_task_dispatching_policy");
- 
-    FIFO_Within_Priorities : constant Boolean := Dispatching_Policy = 'F';
-    --  Indicates whether FIFO_Within_Priorities is set.
- 
-    Curpid : pid_t;
- 
-    Foreign_Task_Elaborated : aliased Boolean := True;
-    --  Used to identified fake tasks (i.e., non-Ada Threads).
- 
-    --------------------
-    -- Local Packages --
-    --------------------
- 
-    package Specific is
- 
-       procedure Initialize (Environment_Task : Task_ID);
-       pragma Inline (Initialize);
-       --  Initialize various data needed by this package.
- 
-       function Is_Valid_Task return Boolean;
-       pragma Inline (Is_Valid_Task);
-       --  Does executing thread have a TCB?
- 
-       procedure Set (Self_Id : Task_ID);
-       pragma Inline (Set);
-       --  Set the self id for the current task.
- 
-       function Self return Task_ID;
-       pragma Inline (Self);
-       --  Return a pointer to the Ada Task Control Block of the calling task.
- 
-    end Specific;
- 
-    package body Specific is separate;
-    --  The body of this package is target specific.
- 
-    ---------------------------------
-    -- Support for foreign threads --
-    ---------------------------------
- 
-    function Register_Foreign_Thread (Thread : Thread_Id) return Task_ID;
-    --  Allocate and Initialize a new ATCB for the current Thread.
- 
-    function Register_Foreign_Thread
-      (Thread : Thread_Id) return Task_ID is separate;
- 
-    -----------------------
-    -- Local Subprograms --
-    -----------------------
- 
-    procedure Abort_Handler (Sig : Signal);
-    --  Signal handler used to implement asynchronous abortion.
- 
-    function To_Address is new Unchecked_Conversion (Task_ID, System.Address);
- 
-    -------------------
-    -- Abort_Handler --
-    -------------------
- 
-    procedure Abort_Handler (Sig : Signal) is
-       pragma Unreferenced (Sig);
- 
-       T       : constant Task_ID := Self;
-       Result  : Interfaces.C.int;
-       Old_Set : aliased sigset_t;
- 
-    begin
-       --  It is not safe to raise an exception when using ZCX and the GCC
-       --  exception handling mechanism.
- 
-       if ZCX_By_Default and then GCC_ZCX_Support then
-          return;
-       end if;
- 
-       if T.Deferral_Level = 0
-         and then T.Pending_ATC_Level < T.ATC_Nesting_Level and then
-         not T.Aborting
-       then
-          T.Aborting := True;
- 
-          --  Make sure signals used for RTS internal purpose are unmasked
- 
-          Result := pthread_sigmask (SIG_UNBLOCK,
-            Unblocked_Signal_Mask'Unchecked_Access, Old_Set'Unchecked_Access);
-          pragma Assert (Result = 0);
- 
-          raise Standard'Abort_Signal;
-       end if;
-    end Abort_Handler;
- 
-    ------------------
-    -- Stack_Guard  --
-    ------------------
- 
-    --  The underlying thread system sets a guard page at the
-    --  bottom of a thread stack, so nothing is needed.
- 
-    procedure Stack_Guard (T : ST.Task_ID; On : Boolean) is
-       pragma Unreferenced (T);
-       pragma Unreferenced (On);
- 
-    begin
-       null;
-    end Stack_Guard;
- 
-    --------------------
-    -- Get_Thread_Id  --
-    --------------------
- 
-    function Get_Thread_Id (T : ST.Task_ID) return OSI.Thread_Id is
-    begin
-       return T.Common.LL.Thread;
-    end Get_Thread_Id;
- 
-    ----------
-    -- Self --
-    ----------
- 
-    function Self return Task_ID renames Specific.Self;
- 
-    ---------------------
-    -- Initialize_Lock --
-    ---------------------
- 
-    --  Note: mutexes and cond_variables needed per-task basis are
-    --        initialized in Initialize_TCB and the Storage_Error is
-    --        handled. Other mutexes (such as RTS_Lock, Memory_Lock...)
-    --        used in RTS is initialized before any status change of RTS.
-    --        Therefore rasing Storage_Error in the following routines
-    --        should be able to be handled safely.
- 
-    procedure Initialize_Lock
-      (Prio : System.Any_Priority;
-       L    : access Lock)
-    is
-       Attributes : aliased pthread_mutexattr_t;
-       Result     : Interfaces.C.int;
- 
-    begin
-       Result := pthread_mutexattr_init (Attributes'Access);
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result = ENOMEM then
-          raise Storage_Error;
-       end if;
- 
-       if Locking_Policy = 'C' then
-          L.Ceiling := Interfaces.C.int (Prio);
-       end if;
- 
-       Result := pthread_mutex_init (L.L'Access, Attributes'Access);
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result = ENOMEM then
-          Result := pthread_mutexattr_destroy (Attributes'Access);
-          raise Storage_Error;
-       end if;
- 
-       Result := pthread_mutexattr_destroy (Attributes'Access);
-       pragma Assert (Result = 0);
-    end Initialize_Lock;
- 
-    procedure Initialize_Lock (L : access RTS_Lock; Level : Lock_Level) is
-       pragma Unreferenced (Level);
- 
-       Attributes : aliased pthread_mutexattr_t;
-       Result     : Interfaces.C.int;
- 
-    begin
-       Result := pthread_mutexattr_init (Attributes'Access);
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result = ENOMEM then
-          raise Storage_Error;
-       end if;
- 
-       Result := pthread_mutex_init (L, Attributes'Access);
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result = ENOMEM then
-          Result := pthread_mutexattr_destroy (Attributes'Access);
-          raise Storage_Error;
-       end if;
- 
-       Result := pthread_mutexattr_destroy (Attributes'Access);
-       pragma Assert (Result = 0);
-    end Initialize_Lock;
- 
-    -------------------
-    -- Finalize_Lock --
-    -------------------
- 
-    procedure Finalize_Lock (L : access Lock) is
-       Result : Interfaces.C.int;
-    begin
-       Result := pthread_mutex_destroy (L.L'Access);
-       pragma Assert (Result = 0);
-    end Finalize_Lock;
- 
-    procedure Finalize_Lock (L : access RTS_Lock) is
-       Result : Interfaces.C.int;
-    begin
-       Result := pthread_mutex_destroy (L);
-       pragma Assert (Result = 0);
-    end Finalize_Lock;
- 
-    ----------------
-    -- Write_Lock --
-    ----------------
- 
-    procedure Write_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
-       Result         : Interfaces.C.int;
-       Self_ID        : Task_ID;
-       All_Tasks_Link : Task_ID;
-       Current_Prio   : System.Any_Priority;
- 
-    begin
-       --  Perform ceiling checks only when this is the locking policy in use.
- 
-       if Locking_Policy = 'C' then
-          Self_ID := Self;
-          All_Tasks_Link := Self_ID.Common.All_Tasks_Link;
-          Current_Prio := Get_Priority (Self_ID);
- 
-          --  If there is no other task, no need to check priorities
- 
-          if All_Tasks_Link /= Null_Task
-            and then L.Ceiling < Interfaces.C.int (Current_Prio)
-          then
-             Ceiling_Violation := True;
-             return;
-          end if;
-       end if;
- 
-       Result := pthread_mutex_lock (L.L'Access);
-       pragma Assert (Result = 0);
- 
-       Ceiling_Violation := False;
-    end Write_Lock;
- 
-    procedure Write_Lock
-      (L : access RTS_Lock; Global_Lock : Boolean := False)
-    is
-       Result : Interfaces.C.int;
-    begin
-       if not Single_Lock or else Global_Lock then
-          Result := pthread_mutex_lock (L);
-          pragma Assert (Result = 0);
-       end if;
-    end Write_Lock;
- 
-    procedure Write_Lock (T : Task_ID) is
-       Result : Interfaces.C.int;
-    begin
-       if not Single_Lock then
-          Result := pthread_mutex_lock (T.Common.LL.L'Access);
-          pragma Assert (Result = 0);
-       end if;
-    end Write_Lock;
- 
-    ---------------
-    -- Read_Lock --
-    ---------------
- 
-    procedure Read_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
-    begin
-       Write_Lock (L, Ceiling_Violation);
-    end Read_Lock;
- 
-    ------------
-    -- Unlock --
-    ------------
- 
-    procedure Unlock (L : access Lock) is
-       Result : Interfaces.C.int;
-    begin
-       Result := pthread_mutex_unlock (L.L'Access);
-       pragma Assert (Result = 0);
-    end Unlock;
- 
-    procedure Unlock (L : access RTS_Lock; Global_Lock : Boolean := False) is
-       Result : Interfaces.C.int;
-    begin
-       if not Single_Lock or else Global_Lock then
-          Result := pthread_mutex_unlock (L);
-          pragma Assert (Result = 0);
-       end if;
-    end Unlock;
- 
-    procedure Unlock (T : Task_ID) is
-       Result : Interfaces.C.int;
-    begin
-       if not Single_Lock then
-          Result := pthread_mutex_unlock (T.Common.LL.L'Access);
-          pragma Assert (Result = 0);
-       end if;
-    end Unlock;
- 
-    -----------
-    -- Sleep --
-    -----------
- 
-    procedure Sleep
-      (Self_ID : Task_ID;
-       Reason  : System.Tasking.Task_States)
-    is
-       pragma Unreferenced (Reason);
- 
-       Result : Interfaces.C.int;
- 
-    begin
-       if Single_Lock then
-          Result := pthread_cond_wait
-                      (Self_ID.Common.LL.CV'Access, Single_RTS_Lock'Access);
-       else
-          Result := pthread_cond_wait
-                      (Self_ID.Common.LL.CV'Access, Self_ID.Common.LL.L'Access);
-       end if;
- 
-       --  EINTR is not considered a failure.
- 
-       pragma Assert (Result = 0 or else Result = EINTR);
-    end Sleep;
- 
-    -----------------
-    -- Timed_Sleep --
-    -----------------
- 
-    --  This is for use within the run-time system, so abort is
-    --  assumed to be already deferred, and the caller should be
-    --  holding its own ATCB lock.
- 
-    procedure Timed_Sleep
-      (Self_ID  : Task_ID;
-       Time     : Duration;
-       Mode     : ST.Delay_Modes;
-       Reason   : System.Tasking.Task_States;
-       Timedout : out Boolean;
-       Yielded  : out Boolean)
-    is
-       pragma Unreferenced (Reason);
- 
-       Check_Time : constant Duration := Monotonic_Clock;
-       Abs_Time   : Duration;
-       Request    : aliased timespec;
-       Result     : Interfaces.C.int;
- 
-    begin
-       Timedout := True;
-       Yielded := False;
- 
-       if Mode = Relative then
-          Abs_Time := Duration'Min (Time, Max_Sensible_Delay) + Check_Time;
-       else
-          Abs_Time := Duration'Min (Check_Time + Max_Sensible_Delay, Time);
-       end if;
- 
-       if Abs_Time > Check_Time then
-          Request := To_Timespec (Abs_Time);
- 
-          loop
-             exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level
-               or else Self_ID.Pending_Priority_Change;
- 
-             if Single_Lock then
-                Result := pthread_cond_timedwait
-                            (Self_ID.Common.LL.CV'Access,
-                             Single_RTS_Lock'Access,
-                             Request'Access);
- 
-             else
-                Result := pthread_cond_timedwait
-                            (Self_ID.Common.LL.CV'Access,
-                             Self_ID.Common.LL.L'Access,
-                             Request'Access);
-             end if;
- 
-             exit when Abs_Time <= Monotonic_Clock;
- 
-             if Result = 0 or Result = EINTR then
- 
-                --  Somebody may have called Wakeup for us
- 
-                Timedout := False;
-                exit;
-             end if;
- 
-             pragma Assert (Result = ETIMEDOUT);
-          end loop;
-       end if;
-    end Timed_Sleep;
- 
-    -----------------
-    -- Timed_Delay --
-    -----------------
- 
-    --  This is for use in implementing delay statements, so
-    --  we assume the caller is abort-deferred but is holding
-    --  no locks.
- 
-    procedure Timed_Delay
-      (Self_ID  : Task_ID;
-       Time     : Duration;
-       Mode     : ST.Delay_Modes)
-    is
-       Check_Time : constant Duration := Monotonic_Clock;
-       Abs_Time   : Duration;
-       Request    : aliased timespec;
-       Result     : Interfaces.C.int;
- 
-    begin
-       --  Only the little window between deferring abort and
-       --  locking Self_ID is the reason we need to
-       --  check for pending abort and priority change below! :(
- 
-       SSL.Abort_Defer.all;
- 
-       if Single_Lock then
-          Lock_RTS;
-       end if;
- 
-       Write_Lock (Self_ID);
- 
-       if Mode = Relative then
-          Abs_Time := Time + Check_Time;
-       else
-          Abs_Time := Duration'Min (Check_Time + Max_Sensible_Delay, Time);
-       end if;
- 
-       if Abs_Time > Check_Time then
-          Request := To_Timespec (Abs_Time);
-          Self_ID.Common.State := Delay_Sleep;
- 
-          loop
-             if Self_ID.Pending_Priority_Change then
-                Self_ID.Pending_Priority_Change := False;
-                Self_ID.Common.Base_Priority := Self_ID.New_Base_Priority;
-                Set_Priority (Self_ID, Self_ID.Common.Base_Priority);
-             end if;
- 
-             exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level;
- 
-             if Single_Lock then
-                Result := pthread_cond_timedwait
-                            (Self_ID.Common.LL.CV'Access,
-                             Single_RTS_Lock'Access,
-                             Request'Access);
-             else
-                Result := pthread_cond_timedwait (Self_ID.Common.LL.CV'Access,
-                  Self_ID.Common.LL.L'Access, Request'Access);
-             end if;
- 
-             exit when Abs_Time <= Monotonic_Clock;
- 
-             pragma Assert (Result = 0 or else
-               Result = ETIMEDOUT or else
-               Result = EINTR);
-          end loop;
- 
-          Self_ID.Common.State := Runnable;
-       end if;
- 
-       Unlock (Self_ID);
- 
-       if Single_Lock then
-          Unlock_RTS;
-       end if;
- 
-       Yield;
-       SSL.Abort_Undefer.all;
-    end Timed_Delay;
- 
-    ---------------------
-    -- Monotonic_Clock --
-    ---------------------
- 
-    function Monotonic_Clock return Duration is
-       TS     : aliased timespec;
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := clock_gettime (CLOCK_REALTIME, TS'Unchecked_Access);
-       pragma Assert (Result = 0);
-       return To_Duration (TS);
-    end Monotonic_Clock;
- 
-    -------------------
-    -- RT_Resolution --
-    -------------------
- 
-    function RT_Resolution return Duration is
-    begin
-       return 1.0 / 1024.0; --  Clock on DEC Alpha ticks at 1024 Hz
-    end RT_Resolution;
- 
-    ------------
-    -- Wakeup --
-    ------------
- 
-    procedure Wakeup (T : Task_ID; Reason : System.Tasking.Task_States) is
-       pragma Unreferenced (Reason);
-       Result : Interfaces.C.int;
-    begin
-       Result := pthread_cond_signal (T.Common.LL.CV'Access);
-       pragma Assert (Result = 0);
-    end Wakeup;
- 
-    -----------
-    -- Yield --
-    -----------
- 
-    procedure Yield (Do_Yield : Boolean := True) is
-       Result : Interfaces.C.int;
-       pragma Unreferenced (Result);
-    begin
-       if Do_Yield then
-          Result := sched_yield;
-       end if;
-    end Yield;
- 
-    ------------------
-    -- Set_Priority --
-    ------------------
- 
-    procedure Set_Priority
-      (T                   : Task_ID;
-       Prio                : System.Any_Priority;
-       Loss_Of_Inheritance : Boolean := False)
-    is
-       pragma Unreferenced (Loss_Of_Inheritance);
- 
-       Result : Interfaces.C.int;
-       Param  : aliased struct_sched_param;
- 
-    begin
-       T.Common.Current_Priority := Prio;
-       Param.sched_priority  := Interfaces.C.int (Underlying_Priorities (Prio));
- 
-       if Time_Slice_Val > 0 then
-          Result := pthread_setschedparam
-                      (T.Common.LL.Thread, SCHED_RR, Param'Access);
- 
-       elsif FIFO_Within_Priorities or else Time_Slice_Val = 0 then
-          Result := pthread_setschedparam
-                      (T.Common.LL.Thread, SCHED_FIFO, Param'Access);
- 
-       else
-          Result := pthread_setschedparam
-                      (T.Common.LL.Thread, SCHED_OTHER, Param'Access);
-       end if;
- 
-       pragma Assert (Result = 0);
-    end Set_Priority;
- 
-    ------------------
-    -- Get_Priority --
-    ------------------
- 
-    function Get_Priority (T : Task_ID) return System.Any_Priority is
-    begin
-       return T.Common.Current_Priority;
-    end Get_Priority;
- 
-    ----------------
-    -- Enter_Task --
-    ----------------
- 
-    procedure Enter_Task (Self_ID : Task_ID) is
-    begin
-       Self_ID.Common.LL.Thread := pthread_self;
-       Specific.Set (Self_ID);
- 
-       Lock_RTS;
- 
-       for J in Known_Tasks'Range loop
-          if Known_Tasks (J) = null then
-             Known_Tasks (J) := Self_ID;
-             Self_ID.Known_Tasks_Index := J;
-             exit;
-          end if;
-       end loop;
- 
-       Unlock_RTS;
-    end Enter_Task;
- 
-    --------------
-    -- New_ATCB --
-    --------------
- 
-    function New_ATCB (Entry_Num : Task_Entry_Index) return Task_ID is
-    begin
-       return new Ada_Task_Control_Block (Entry_Num);
-    end New_ATCB;
- 
-    -------------------
-    -- Is_Valid_Task --
-    -------------------
- 
-    function Is_Valid_Task return Boolean renames Specific.Is_Valid_Task;
- 
-    -----------------------------
-    -- Register_Foreign_Thread --
-    -----------------------------
- 
-    function Register_Foreign_Thread return Task_ID is
-    begin
-       if Is_Valid_Task then
-          return Self;
-       else
-          return Register_Foreign_Thread (pthread_self);
-       end if;
-    end Register_Foreign_Thread;
- 
-    --------------------
-    -- Initialize_TCB --
-    --------------------
- 
-    procedure Initialize_TCB (Self_ID : Task_ID; Succeeded : out Boolean) is
-       Mutex_Attr : aliased pthread_mutexattr_t;
-       Result     : Interfaces.C.int;
-       Cond_Attr  : aliased pthread_condattr_t;
- 
-    begin
-       if not Single_Lock then
-          Result := pthread_mutexattr_init (Mutex_Attr'Access);
-          pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-          if Result = 0 then
-             Result := pthread_mutex_init
-                         (Self_ID.Common.LL.L'Access, Mutex_Attr'Access);
-             pragma Assert (Result = 0 or else Result = ENOMEM);
-          end if;
- 
-          if Result /= 0 then
-             Succeeded := False;
-             return;
-          end if;
- 
-          Result := pthread_mutexattr_destroy (Mutex_Attr'Access);
-          pragma Assert (Result = 0);
-       end if;
- 
-       Result := pthread_condattr_init (Cond_Attr'Access);
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result = 0 then
-          Result := pthread_cond_init
-                      (Self_ID.Common.LL.CV'Access, Cond_Attr'Access);
-          pragma Assert (Result = 0 or else Result = ENOMEM);
-       end if;
- 
-       if Result = 0 then
-          Succeeded := True;
-       else
-          if not Single_Lock then
-             Result := pthread_mutex_destroy (Self_ID.Common.LL.L'Access);
-             pragma Assert (Result = 0);
-          end if;
- 
-          Succeeded := False;
-       end if;
- 
-       Result := pthread_condattr_destroy (Cond_Attr'Access);
-       pragma Assert (Result = 0);
-    end Initialize_TCB;
- 
-    -----------------
-    -- Create_Task --
-    -----------------
- 
-    procedure Create_Task
-      (T          : Task_ID;
-       Wrapper    : System.Address;
-       Stack_Size : System.Parameters.Size_Type;
-       Priority   : System.Any_Priority;
-       Succeeded  : out Boolean)
-    is
-       Attributes          : aliased pthread_attr_t;
-       Adjusted_Stack_Size : Interfaces.C.size_t;
-       Result              : Interfaces.C.int;
-       Param               : aliased System.OS_Interface.struct_sched_param;
- 
-       function Thread_Body_Access is new
-         Unchecked_Conversion (System.Address, Thread_Body);
- 
-       use System.Task_Info;
- 
-    begin
-       if Stack_Size = Unspecified_Size then
-          Adjusted_Stack_Size := Interfaces.C.size_t (Default_Stack_Size);
- 
-       elsif Stack_Size < Minimum_Stack_Size then
-          Adjusted_Stack_Size := Interfaces.C.size_t (Minimum_Stack_Size);
- 
-       else
-          Adjusted_Stack_Size := Interfaces.C.size_t (Stack_Size);
-       end if;
- 
-       Result := pthread_attr_init (Attributes'Access);
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result /= 0 then
-          Succeeded := False;
-          return;
-       end if;
- 
-       Result := pthread_attr_setdetachstate
-                   (Attributes'Access, PTHREAD_CREATE_DETACHED);
-       pragma Assert (Result = 0);
- 
-       Result := pthread_attr_setstacksize
-                   (Attributes'Access, Adjusted_Stack_Size);
-       pragma Assert (Result = 0);
- 
-       Param.sched_priority :=
-         Interfaces.C.int (Underlying_Priorities (Priority));
-       Result := pthread_attr_setschedparam
-                   (Attributes'Access, Param'Access);
-       pragma Assert (Result = 0);
- 
-       if Time_Slice_Val > 0 then
-          Result := pthread_attr_setschedpolicy
-                      (Attributes'Access, System.OS_Interface.SCHED_RR);
- 
-       elsif FIFO_Within_Priorities or else Time_Slice_Val = 0 then
-          Result := pthread_attr_setschedpolicy
-                      (Attributes'Access, System.OS_Interface.SCHED_FIFO);
- 
-       else
-          Result := pthread_attr_setschedpolicy
-                      (Attributes'Access, System.OS_Interface.SCHED_OTHER);
-       end if;
- 
-       pragma Assert (Result = 0);
- 
-       --  Set the scheduling parameters explicitly, since this is the
-       --  only way to force the OS to take e.g. the sched policy and scope
-       --  attributes into account.
- 
-       Result := pthread_attr_setinheritsched
-                   (Attributes'Access, PTHREAD_EXPLICIT_SCHED);
-       pragma Assert (Result = 0);
- 
-       T.Common.Current_Priority := Priority;
- 
-       if T.Common.Task_Info /= null then
-          case T.Common.Task_Info.Contention_Scope is
-             when System.Task_Info.Process_Scope =>
-                Result := pthread_attr_setscope
-                            (Attributes'Access, PTHREAD_SCOPE_PROCESS);
- 
-             when System.Task_Info.System_Scope =>
-                Result := pthread_attr_setscope
-                            (Attributes'Access, PTHREAD_SCOPE_SYSTEM);
- 
-             when System.Task_Info.Default_Scope =>
-                Result := 0;
-          end case;
- 
-          pragma Assert (Result = 0);
-       end if;
- 
-       --  Since the initial signal mask of a thread is inherited from the
-       --  creator, and the Environment task has all its signals masked, we
-       --  do not need to manipulate caller's signal mask at this point.
-       --  All tasks in RTS will have All_Tasks_Mask initially.
- 
-       Result := pthread_create
-                   (T.Common.LL.Thread'Access,
-                    Attributes'Access,
-                    Thread_Body_Access (Wrapper),
-                    To_Address (T));
-       pragma Assert (Result = 0 or else Result = EAGAIN);
- 
-       Succeeded := Result = 0;
- 
-       Result := pthread_attr_destroy (Attributes'Access);
-       pragma Assert (Result = 0);
- 
-       if T.Common.Task_Info /= null then
-          --  ??? We're using a process-wide function to implement a task
-          --  specific characteristic.
- 
-          if T.Common.Task_Info.Bind_To_Cpu_Number = 0 then
-             Result := bind_to_cpu (Curpid, 0);
-          elsif T.Common.Task_Info.Bind_To_Cpu_Number > 0 then
-             Result := bind_to_cpu
-               (Curpid,
-                Interfaces.C.unsigned_long (
-                  Interfaces.Shift_Left
-                    (Interfaces.Unsigned_64'(1),
-                     T.Common.Task_Info.Bind_To_Cpu_Number - 1)));
-             pragma Assert (Result = 0);
-          end if;
-       end if;
-    end Create_Task;
- 
-    ------------------
-    -- Finalize_TCB --
-    ------------------
- 
-    procedure Finalize_TCB (T : Task_ID) is
-       Result : Interfaces.C.int;
-       Tmp    : Task_ID := T;
-       Is_Self : constant Boolean := T = Self;
- 
-       procedure Free is new
-         Unchecked_Deallocation (Ada_Task_Control_Block, Task_ID);
- 
-    begin
-       if not Single_Lock then
-          Result := pthread_mutex_destroy (T.Common.LL.L'Access);
-          pragma Assert (Result = 0);
-       end if;
- 
-       Result := pthread_cond_destroy (T.Common.LL.CV'Access);
-       pragma Assert (Result = 0);
- 
-       if T.Known_Tasks_Index /= -1 then
-          Known_Tasks (T.Known_Tasks_Index) := null;
-       end if;
- 
-       Free (Tmp);
- 
-       if Is_Self then
-          Result := pthread_setspecific (ATCB_Key, System.Null_Address);
-          pragma Assert (Result = 0);
-       end if;
- 
-    end Finalize_TCB;
- 
-    ---------------
-    -- Exit_Task --
-    ---------------
- 
-    procedure Exit_Task is
-    begin
-       Specific.Set (null);
-    end Exit_Task;
- 
-    ----------------
-    -- Abort_Task --
-    ----------------
- 
-    procedure Abort_Task (T : Task_ID) is
-       Result : Interfaces.C.int;
-    begin
-       Result :=
-         pthread_kill
-           (T.Common.LL.Thread,
-            Signal (System.Interrupt_Management.Abort_Task_Interrupt));
-       pragma Assert (Result = 0);
-    end Abort_Task;
- 
-    ----------------
-    -- Check_Exit --
-    ----------------
- 
-    --  Dummy version
- 
-    function Check_Exit (Self_ID : ST.Task_ID) return Boolean is
-       pragma Unreferenced (Self_ID);
- 
-    begin
-       return True;
-    end Check_Exit;
- 
-    --------------------
-    -- Check_No_Locks --
-    --------------------
- 
-    function Check_No_Locks (Self_ID : ST.Task_ID) return Boolean is
-       pragma Unreferenced (Self_ID);
- 
-    begin
-       return True;
-    end Check_No_Locks;
- 
-    ----------------------
-    -- Environment_Task --
-    ----------------------
- 
-    function Environment_Task return Task_ID is
-    begin
-       return Environment_Task_ID;
-    end Environment_Task;
- 
-    --------------
-    -- Lock_RTS --
-    --------------
- 
-    procedure Lock_RTS is
-    begin
-       Write_Lock (Single_RTS_Lock'Access, Global_Lock => True);
-    end Lock_RTS;
- 
-    ----------------
-    -- Unlock_RTS --
-    ----------------
- 
-    procedure Unlock_RTS is
-    begin
-       Unlock (Single_RTS_Lock'Access, Global_Lock => True);
-    end Unlock_RTS;
- 
-    ------------------
-    -- Suspend_Task --
-    ------------------
- 
-    function Suspend_Task
-      (T           : ST.Task_ID;
-       Thread_Self : Thread_Id) return Boolean
-    is
-       pragma Warnings (Off, T);
-       pragma Warnings (Off, Thread_Self);
- 
-    begin
-       return False;
-    end Suspend_Task;
- 
-    -----------------
-    -- Resume_Task --
-    -----------------
- 
-    function Resume_Task
-      (T           : ST.Task_ID;
-       Thread_Self : Thread_Id) return Boolean
-    is
-       pragma Warnings (Off, T);
-       pragma Warnings (Off, Thread_Self);
- 
-    begin
-       return False;
-    end Resume_Task;
- 
-    ----------------
-    -- Initialize --
-    ----------------
- 
-    procedure Initialize (Environment_Task : Task_ID) is
-       act     : aliased struct_sigaction;
-       old_act : aliased struct_sigaction;
-       Tmp_Set : aliased sigset_t;
-       Result  : Interfaces.C.int;
- 
-       function State
-         (Int : System.Interrupt_Management.Interrupt_ID) return Character;
-       pragma Import (C, State, "__gnat_get_interrupt_state");
-       --  Get interrupt state. Defined in a-init.c. The input argument is
-       --  the interrupt number, and the result is one of the following:
- 
-       Default : constant Character := 's';
-       --    'n'   this interrupt not set by any Interrupt_State pragma
-       --    'u'   Interrupt_State pragma set state to User
-       --    'r'   Interrupt_State pragma set state to Runtime
-       --    's'   Interrupt_State pragma set state to System (use "default"
-       --           system handler)
- 
-    begin
-       Environment_Task_ID := Environment_Task;
- 
-       --  Initialize the lock used to synchronize chain of all ATCBs.
- 
-       Initialize_Lock (Single_RTS_Lock'Access, RTS_Lock_Level);
- 
-       Specific.Initialize (Environment_Task);
- 
-       Enter_Task (Environment_Task);
- 
-       --  Install the abort-signal handler
- 
-       if State (System.Interrupt_Management.Abort_Task_Interrupt)
-         /= Default
-       then
-          act.sa_flags := 0;
-          act.sa_handler := Abort_Handler'Address;
- 
-          Result := sigemptyset (Tmp_Set'Access);
-          pragma Assert (Result = 0);
-          act.sa_mask := Tmp_Set;
- 
-          Result :=
-            sigaction
-            (Signal (System.Interrupt_Management.Abort_Task_Interrupt),
-             act'Unchecked_Access,
-             old_act'Unchecked_Access);
-          pragma Assert (Result = 0);
-       end if;
-    end Initialize;
- 
- begin
-    declare
-       Result : Interfaces.C.int;
- 
-    begin
-       --  Mask Environment task for all signals. The original mask of the
-       --  Environment task will be recovered by Interrupt_Server task
-       --  during the elaboration of s-interr.adb.
- 
-       System.Interrupt_Management.Operations.Set_Interrupt_Mask
-         (System.Interrupt_Management.Operations.All_Tasks_Mask'Access);
- 
-       --  Prepare the set of signals that should unblocked in all tasks
- 
-       Result := sigemptyset (Unblocked_Signal_Mask'Access);
-       pragma Assert (Result = 0);
- 
-       for J in Interrupt_Management.Interrupt_ID loop
-          if System.Interrupt_Management.Keep_Unmasked (J) then
-             Result := sigaddset (Unblocked_Signal_Mask'Access, Signal (J));
-             pragma Assert (Result = 0);
-          end if;
-       end loop;
-    end;
- 
-    Curpid := getpid;
- end System.Task_Primitives.Operations;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5atasinf.ads gcc-4.0.0/gcc/ada/5atasinf.ads
*** gcc-3.4.3/gcc/ada/5atasinf.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/5atasinf.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,111 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                     S Y S T E M . T A S K _ I N F O                      --
- --                                                                          --
- --                                 S p e c                                  --
- --                           (Compiler Interface)                           --
- --                                                                          --
- --         Copyright (C) 1998-2003 Free Software Foundation, Inc.           --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package contains the definitions and routines associated with the
- --  implementation and use of the Task_Info pragma. It is specialized
- --  appropriately for targets that make use of this pragma.
- 
- --  Note: the compiler generates direct calls to this interface, via Rtsfind.
- --  Any changes to this interface may require corresponding compiler changes.
- 
- --  This unit may be used directly from an application program by providing
- --  an appropriate WITH, and the interface can be expected to remain stable.
- 
- --  This is a DEC Unix 4.0d version of this package.
- 
- package System.Task_Info is
-    pragma Elaborate_Body;
-    --  To ensure that a body is allowed
- 
-    -----------------------------------------
-    -- Implementation of Task_Info Feature --
-    -----------------------------------------
- 
-    --  The Task_Info pragma:
- 
-    --    pragma Task_Info (EXPRESSION);
- 
-    --  allows the specification on a task by task basis of a value of type
-    --  System.Task_Info.Task_Info_Type to be passed to a task when it is
-    --  created. The specification of this type, and the effect on the task
-    --  that is created is target dependent.
- 
-    --  The Task_Info pragma appears within a task definition (compare the
-    --  definition and implementation of pragma Priority). If no such pragma
-    --  appears, then the value Task_Info_Unspecified is passed. If a pragma
-    --  is present, then it supplies an alternative value. If the argument of
-    --  the pragma is a discriminant reference, then the value can be set on
-    --  a task by task basis by supplying the appropriate discriminant value.
- 
-    --  Note that this means that the type used for Task_Info_Type must be
-    --  suitable for use as a discriminant (i.e. a scalar or access type).
- 
-    ------------------
-    -- Declarations --
-    ------------------
- 
-    type Scope_Type is
-      (Process_Scope,
-       --  Contend only with threads in same process
- 
-       System_Scope,
-       --  Contend with all threads on same CPU
- 
-       Default_Scope);
- 
-    type Thread_Attributes is record
-       Bind_To_Cpu_Number : Integer;
-       --   -1: Do nothing
-       --    0: Unbind
-       --  1-N: Bind all unbound threads to this CPU
- 
-       Contention_Scope   : Scope_Type;
-    end record;
- 
-    type Task_Info_Type is access all Thread_Attributes;
-    --  Type used for passing information to task create call, using the
-    --  Task_Info pragma. This type may be specialized for individual
-    --  implementations, but it must be a type that can be used as a
-    --  discriminant (i.e. a scalar or access type).
- 
-    Unspecified_Thread_Attribute : aliased Thread_Attributes :=
-      Thread_Attributes'(-1, Default_Scope);
- 
-    Unspecified_Task_Info : constant Task_Info_Type :=
-      Unspecified_Thread_Attribute'Access;
-    --  Value passed to task in the absence of a Task_Info pragma
-    --  Don't call new here because the tasking run time has not been
-    --  elaborated yet, so calling Task_Lock is unsafe.
- 
- end System.Task_Info;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5ataspri.ads gcc-4.0.0/gcc/ada/5ataspri.ads
*** gcc-3.4.3/gcc/ada/5ataspri.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/5ataspri.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,93 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                 S Y S T E M . T A S K _ P R I M I T I V E S              --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --          Copyright (C) 1991-2000 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the DEC Unix 4.0 version of this package.
- 
- --  This package provides low-level support for most tasking features.
- 
- pragma Polling (Off);
- --  Turn off polling, we do not want ATC polling to take place during
- --  tasking operations. It causes infinite loops and other problems.
- 
- with Interfaces.C;
- --  used for int
- --           size_t
- 
- with System.OS_Interface;
- --  used for pthread_mutex_t
- --           pthread_cond_t
- --           pthread_t
- 
- package System.Task_Primitives is
- 
-    type Lock is limited private;
-    --  Should be used for implementation of protected objects.
- 
-    type RTS_Lock is limited private;
-    --  Should be used inside the runtime system.
-    --  The difference between Lock and the RTS_Lock is that the later
-    --  one serves only as a semaphore so that do not check for
-    --  ceiling violations.
- 
-    type Task_Body_Access is access procedure;
-    --  Pointer to the task body's entry point (or possibly a wrapper
-    --  declared local to the GNARL).
- 
-    type Private_Data is limited private;
-    --  Any information that the GNULLI needs maintained on a per-task
-    --  basis.  A component of this type is guaranteed to be included
-    --  in the Ada_Task_Control_Block.
- 
- private
- 
-    type Lock is record
-       L          : aliased System.OS_Interface.pthread_mutex_t;
-       Ceiling    : Interfaces.C.int;
-    end record;
- 
-    type RTS_Lock is new System.OS_Interface.pthread_mutex_t;
-    type Private_Data is record
-       Thread      : aliased System.OS_Interface.pthread_t;
-       pragma Atomic (Thread);
-       --  Thread field may be updated by two different threads of control.
-       --  (See, Enter_Task and Create_Task in s-taprop.adb).
-       --  They put the same value (thr_self value). We do not want to
-       --  use lock on those operations and the only thing we have to
-       --  make sure is that they are updated in atomic fashion.
- 
-       CV          : aliased System.OS_Interface.pthread_cond_t;
-       L           : aliased RTS_Lock;
-       --  protection for all components is lock L
-    end record;
- 
- end System.Task_Primitives;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5atpopsp.adb gcc-4.0.0/gcc/ada/5atpopsp.adb
*** gcc-3.4.3/gcc/ada/5atpopsp.adb	Mon Jan  5 15:20:42 2004
--- gcc-4.0.0/gcc/ada/5atpopsp.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,108 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                SYSTEM.TASK_PRIMITIVES.OPERATIONS.SPECIFIC                --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --         Copyright (C) 1992-2003, Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a POSIX version of this package where foreign threads are
- --  recognized.
- 
- --  Currently, DEC Unix, SCO UnixWare, Solaris pthread, HPUX pthread,
- --  GNU/Linux threads, and RTEMS use this version.
- 
- separate (System.Task_Primitives.Operations)
- package body Specific is
- 
-    ----------------
-    -- Initialize --
-    ----------------
- 
-    procedure Initialize (Environment_Task : Task_ID) is
-       pragma Warnings (Off, Environment_Task);
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := pthread_key_create (ATCB_Key'Access, null);
-       pragma Assert (Result = 0);
-    end Initialize;
- 
-    -------------------
-    -- Is_Valid_Task --
-    -------------------
- 
-    function Is_Valid_Task return Boolean is
-    begin
-       return pthread_getspecific (ATCB_Key) /= System.Null_Address;
-    end Is_Valid_Task;
- 
-    ---------
-    -- Set --
-    ---------
- 
-    procedure Set (Self_Id : Task_ID) is
-       Result : Interfaces.C.int;
-    begin
-       Result := pthread_setspecific (ATCB_Key, To_Address (Self_Id));
-       pragma Assert (Result = 0);
-    end Set;
- 
-    ----------
-    -- Self --
-    ----------
- 
-    --  To make Ada tasks and C threads interoperate better, we have added some
-    --  functionality to Self. Suppose a C main program (with threads) calls an
-    --  Ada procedure and the Ada procedure calls the tasking runtime system.
-    --  Eventually, a call will be made to self. Since the call is not coming
-    --  from an Ada task, there will be no corresponding ATCB.
- 
-    --  What we do in Self is to catch references that do not come from
-    --  recognized Ada tasks, and create an ATCB for the calling thread.
- 
-    --  The new ATCB will be "detached" from the normal Ada task master
-    --  hierarchy, much like the existing implicitly created signal-server
-    --  tasks.
- 
-    function Self return Task_ID is
-       Result : System.Address;
- 
-    begin
-       Result := pthread_getspecific (ATCB_Key);
- 
-       --  If the key value is Null, then it is a non-Ada task.
- 
-       if Result /= System.Null_Address then
-          return To_Task_Id (Result);
-       else
-          return Register_Foreign_Thread;
-       end if;
-    end Self;
- 
- end Specific;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5avxwork.ads gcc-4.0.0/gcc/ada/5avxwork.ads
*** gcc-3.4.3/gcc/ada/5avxwork.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/5avxwork.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,57 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
- --                                                                          --
- --                        S Y S T E M . V X W O R K S                       --
- --                                                                          --
- --                                   S p e c                                --
- --                                                                          --
- --            Copyright (C) 1998-2001 Free Software Foundation, Inc.        --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the Alpha VxWorks version of this package.
- 
- with Interfaces.C;
- 
- package System.VxWorks is
-    pragma Preelaborate (System.VxWorks);
- 
-    package IC renames Interfaces.C;
- 
-    --  Floating point context record. Alpha version
- 
-    FP_NUM_DREGS : constant := 32;
-    type Fpx_Array is array (1 .. FP_NUM_DREGS) of IC.double;
- 
-    type FP_CONTEXT is record
-       fpx   : Fpx_Array;
-       fpcsr : IC.long;
-    end record;
-    pragma Convention (C, FP_CONTEXT);
- 
-    Num_HW_Interrupts : constant := 256;
-    --  Number of entries in hardware interrupt vector table.
- 
- end System.VxWorks;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5bml-tgt.adb gcc-4.0.0/gcc/ada/5bml-tgt.adb
*** gcc-3.4.3/gcc/ada/5bml-tgt.adb	Thu Nov 20 09:53:57 2003
--- gcc-4.0.0/gcc/ada/5bml-tgt.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,400 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                             M L I B . T G T                              --
- --                              (AIX Version)                               --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --              Copyright (C) 2003, Ada Core Technologies, Inc.             --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package provides a set of target dependent routines to build
- --  static, dynamic or relocatable libraries.
- 
- --  This is the AIX version of the body.
- 
- with Ada.Strings.Fixed; use Ada.Strings.Fixed;
- with Ada.Text_IO; use Ada.Text_IO;
- with MLib.Fil;
- with MLib.Utl;
- with Namet;  use Namet;
- with Osint;  use Osint;
- with Opt;
- with Output; use Output;
- with Prj.Com;
- 
- package body MLib.Tgt is
- 
-    No_Arguments        : aliased Argument_List         := (1 .. 0 => null);
-    Empty_Argument_List : constant Argument_List_Access := No_Arguments'Access;
- 
-    Wl_Initfini_String  : constant String := "-Wl,-binitfini:";
- 
-    Init_Fini_List      :  constant Argument_List_Access :=
-                             new Argument_List'(1 => null);
-    --  Used to put switch for automatic elaboration/finalization
- 
-    Bexpall : aliased String := "-Wl,-bexpall";
-    Bexpall_Option : constant String_Access := Bexpall'Access;
-    --  The switch to export all symbols
- 
-    Lpthreads : aliased String := "-lpthreads";
-    Native_Thread_Options : aliased Argument_List := (1 => Lpthreads'Access);
-    --  The switch to use when linking a library against libgnarl when using
-    --  Native threads.
- 
-    Lgthreads : aliased String := "-lgthreads";
-    Lmalloc   : aliased String := "-lmalloc";
-    FSU_Thread_Options : aliased Argument_List :=
-                           (1 => Lgthreads'Access, 2 => Lmalloc'Access);
-    --  The switches to use when linking a library against libgnarl when using
-    --  FSU threads.
- 
-    Thread_Options : Argument_List_Access := null;
-    --  Designate the thread switches to used when linking a library against
-    --  libgnarl. Depends on the thread library (Native or FSU). Resolved for
-    --  the first library linked against libgnarl.
- 
-    ---------------------
-    -- Archive_Builder --
-    ---------------------
- 
-    function Archive_Builder return String is
-    begin
-       return "ar";
-    end Archive_Builder;
- 
-    -----------------------------
-    -- Archive_Builder_Options --
-    -----------------------------
- 
-    function Archive_Builder_Options return String_List_Access is
-    begin
-       return new String_List'(1 => new String'("cr"));
-    end Archive_Builder_Options;
- 
-    -----------------
-    -- Archive_Ext --
-    -----------------
- 
-    function Archive_Ext return String is
-    begin
-       return "a";
-    end Archive_Ext;
- 
-    ---------------------
-    -- Archive_Indexer --
-    ---------------------
- 
-    function Archive_Indexer return String is
-    begin
-       return "ranlib";
-    end Archive_Indexer;
- 
-    ---------------------------
-    -- Build_Dynamic_Library --
-    ---------------------------
- 
-    procedure Build_Dynamic_Library
-      (Ofiles       : Argument_List;
-       Foreign      : Argument_List;
-       Afiles       : Argument_List;
-       Options      : Argument_List;
-       Interfaces   : Argument_List;
-       Lib_Filename : String;
-       Lib_Dir      : String;
-       Symbol_Data  : Symbol_Record;
-       Driver_Name  : Name_Id := No_Name;
-       Lib_Address  : String  := "";
-       Lib_Version  : String  := "";
-       Relocatable  : Boolean := False;
-       Auto_Init    : Boolean := False)
-    is
-       pragma Unreferenced (Foreign);
-       pragma Unreferenced (Afiles);
-       pragma Unreferenced (Interfaces);
-       pragma Unreferenced (Symbol_Data);
-       pragma Unreferenced (Lib_Address);
-       pragma Unreferenced (Lib_Version);
-       pragma Unreferenced (Relocatable);
- 
-       Lib_File : constant String :=
-         Lib_Dir & Directory_Separator & "lib" &
-         MLib.Fil.Ext_To (Lib_Filename, DLL_Ext);
-       --  The file name of the library
- 
-       Init_Fini : Argument_List_Access := Empty_Argument_List;
-       --  The switch for automatic initialization of Stand-Alone Libraries.
-       --  Changed to a real switch when Auto_Init is True.
- 
-       Options_2 : Argument_List_Access := Empty_Argument_List;
-       --  Changed to the thread options, if -lgnarl is specified
- 
-    begin
-       if Opt.Verbose_Mode then
-          Write_Str ("building relocatable shared library ");
-          Write_Line (Lib_File);
-       end if;
- 
-       --  If specified, add automatic elaboration/finalization
- 
-       if Auto_Init then
-          Init_Fini := Init_Fini_List;
-          Init_Fini (1) :=
-            new String'(Wl_Initfini_String & Lib_Filename & "init:" &
-                        Lib_Filename & "final");
-       end if;
- 
-       --  Look for -lgnarl in Options. If found, set the thread options.
- 
-       for J in Options'Range loop
-          if Options (J).all = "-lgnarl" then
- 
-             --  If Thread_Options is null, read s-osinte.ads to discover the
-             --  thread library and set Thread_Options accordingly.
- 
-             if Thread_Options = null then
-                declare
-                   File : Ada.Text_IO.File_Type;
-                   Line : String (1 .. 100);
-                   Last : Natural;
- 
-                begin
-                   Open
-                     (File, In_File,
-                      Include_Dir_Default_Prefix & "/s-osinte.ads");
- 
-                   while not End_Of_File (File) loop
-                      Get_Line (File, Line, Last);
- 
-                      if Index (Line (1 .. Last), "-lpthreads") /= 0 then
-                         Thread_Options := Native_Thread_Options'Access;
-                         exit;
- 
-                      elsif Index (Line (1 .. Last), "-lgthreads") /= 0 then
-                         Thread_Options := FSU_Thread_Options'Access;
-                         exit;
-                      end if;
-                   end loop;
- 
-                   Close (File);
- 
-                   if Thread_Options = null then
-                      Prj.Com.Fail ("cannot find the thread library in use");
-                   end if;
- 
-                exception
-                   when others =>
-                      Prj.Com.Fail ("cannot open s-osinte.ads");
-                end;
-             end if;
- 
-             Options_2 := Thread_Options;
-             exit;
-          end if;
-       end loop;
- 
-       --  Finally, call GCC (or the driver specified) to build the library
- 
-       MLib.Utl.Gcc
-            (Output_File => Lib_File,
-             Objects     => Ofiles,
-             Options     => Options & Bexpall_Option & Init_Fini.all,
-             Driver_Name => Driver_Name,
-             Options_2   => Options_2.all);
-    end Build_Dynamic_Library;
- 
-    -------------------------
-    -- Default_DLL_Address --
-    -------------------------
- 
-    function Default_DLL_Address return String is
-    begin
-       return "";
-    end Default_DLL_Address;
- 
-    -------------
-    -- DLL_Ext --
-    -------------
- 
-    function DLL_Ext return String is
-    begin
-       return "a";
-    end DLL_Ext;
- 
-    --------------------
-    -- Dynamic_Option --
-    --------------------
- 
-    function Dynamic_Option return String is
-    begin
-       return "-shared";
-    end Dynamic_Option;
- 
-    -------------------
-    -- Is_Object_Ext --
-    -------------------
- 
-    function Is_Object_Ext (Ext : String) return Boolean is
-    begin
-       return Ext = ".o";
-    end Is_Object_Ext;
- 
-    --------------
-    -- Is_C_Ext --
-    --------------
- 
-    function Is_C_Ext (Ext : String) return Boolean is
-    begin
-       return Ext = ".c";
-    end Is_C_Ext;
- 
-    --------------------
-    -- Is_Archive_Ext --
-    --------------------
- 
-    function Is_Archive_Ext (Ext : String) return Boolean is
-    begin
-       return Ext = ".a";
-    end Is_Archive_Ext;
- 
-    -------------
-    -- Libgnat --
-    -------------
- 
-    function Libgnat return String is
-    begin
-       return "libgnat.a";
-    end Libgnat;
- 
-    ------------------------
-    -- Library_Exists_For --
-    ------------------------
- 
-    function Library_Exists_For (Project : Project_Id) return Boolean is
-    begin
-       if not Projects.Table (Project).Library then
-          Prj.Com.Fail ("INTERNAL ERROR: Library_Exists_For called " &
-                        "for non library project");
-          return False;
- 
-       else
-          declare
-             Lib_Dir : constant String :=
-               Get_Name_String (Projects.Table (Project).Library_Dir);
-             Lib_Name : constant String :=
-               Get_Name_String (Projects.Table (Project).Library_Name);
- 
-          begin
-             if Projects.Table (Project).Library_Kind = Static then
-                return Is_Regular_File
-                  (Lib_Dir & Directory_Separator & "lib" &
-                   Fil.Ext_To (Lib_Name, Archive_Ext));
- 
-             else
-                return Is_Regular_File
-                  (Lib_Dir & Directory_Separator & "lib" &
-                   Fil.Ext_To (Lib_Name, DLL_Ext));
-             end if;
-          end;
-       end if;
-    end Library_Exists_For;
- 
-    ---------------------------
-    -- Library_File_Name_For --
-    ---------------------------
- 
-    function Library_File_Name_For (Project : Project_Id) return Name_Id is
-    begin
-       if not Projects.Table (Project).Library then
-          Prj.Com.Fail ("INTERNAL ERROR: Library_File_Name_For called " &
-                        "for non library project");
-          return No_Name;
- 
-       else
-          declare
-             Lib_Name : constant String :=
-               Get_Name_String (Projects.Table (Project).Library_Name);
- 
-          begin
-             Name_Len := 3;
-             Name_Buffer (1 .. Name_Len) := "lib";
- 
-             if Projects.Table (Project).Library_Kind = Static then
-                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, Archive_Ext));
- 
-             else
-                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, DLL_Ext));
-             end if;
- 
-             return Name_Find;
-          end;
-       end if;
-    end Library_File_Name_For;
- 
-    --------------------------------
-    -- Linker_Library_Path_Option --
-    --------------------------------
- 
-    function Linker_Library_Path_Option return String_Access is
-    begin
-       --  On AIX, any path specify with an -L switch is automatically added
-       --  to the library path. So, nothing is needed here.
- 
-       return null;
-    end Linker_Library_Path_Option;
- 
-    ----------------
-    -- Object_Ext --
-    ----------------
- 
-    function Object_Ext return String is
-    begin
-       return "o";
-    end Object_Ext;
- 
-    ----------------
-    -- PIC_Option --
-    ----------------
- 
-    function PIC_Option return String is
-    begin
-       return "-fPIC";
-    end PIC_Option;
- 
-    -----------------------------------------------
-    -- Standalone_Library_Auto_Init_Is_Supported --
-    -----------------------------------------------
- 
-    function Standalone_Library_Auto_Init_Is_Supported return Boolean is
-    begin
-       return True;
-    end Standalone_Library_Auto_Init_Is_Supported;
- 
-    ---------------------------
-    -- Support_For_Libraries --
-    ---------------------------
- 
-    function Support_For_Libraries return Library_Support is
-    begin
-       return Full;
-    end Support_For_Libraries;
- 
- end MLib.Tgt;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5bosinte.adb gcc-4.0.0/gcc/ada/5bosinte.adb
*** gcc-3.4.3/gcc/ada/5bosinte.adb	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/5bosinte.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,159 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   S Y S T E M . O S _ I N T E R F A C E                  --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --          Copyright (C) 1997-2002, Free Software Fundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a AIX (Native) version of this package
- 
- pragma Polling (Off);
- --  Turn off polling, we do not want ATC polling to take place during
- --  tasking operations. It causes infinite loops and other problems.
- 
- with Interfaces.C;
- 
- package body System.OS_Interface is
- 
-    use Interfaces.C;
- 
-    -----------------
-    -- To_Duration --
-    -----------------
- 
-    function To_Duration (TS : timespec) return Duration is
-    begin
-       return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9;
-    end To_Duration;
- 
-    function To_Duration (TV : struct_timeval) return Duration is
-    begin
-       return Duration (TV.tv_sec) + Duration (TV.tv_usec) / 10#1#E6;
-    end To_Duration;
- 
-    -----------------
-    -- To_Timespec --
-    -----------------
- 
-    function To_Timespec (D : Duration) return timespec is
-       S : time_t;
-       F : Duration;
- 
-    begin
-       S := time_t (Long_Long_Integer (D));
-       F := D - Duration (S);
- 
-       --  If F has negative value due to a round-up, adjust for positive F
-       --  value.
- 
-       if F < 0.0 then
-          S := S - 1;
-          F := F + 1.0;
-       end if;
- 
-       return timespec'(tv_sec => S,
-                        tv_nsec => long (Long_Long_Integer (F * 10#1#E9)));
-    end To_Timespec;
- 
-    ----------------
-    -- To_Timeval --
-    ----------------
- 
-    function To_Timeval (D : Duration) return struct_timeval is
-       S : long;
-       F : Duration;
- 
-    begin
-       S := long (Long_Long_Integer (D));
-       F := D - Duration (S);
- 
-       --  If F has negative value due to a round-up, adjust for positive F
-       --  value.
- 
-       if F < 0.0 then
-          S := S - 1;
-          F := F + 1.0;
-       end if;
- 
-       return
-         struct_timeval'
-           (tv_sec => S,
-            tv_usec => long (Long_Long_Integer (F * 10#1#E6)));
-    end To_Timeval;
- 
-    -------------------
-    -- clock_gettime --
-    -------------------
- 
-    function clock_gettime
-      (clock_id : clockid_t;
-       tp       : access timespec)
-       return     int
-    is
-       pragma Warnings (Off, clock_id);
- 
-       Result : int;
-       tv     : aliased struct_timeval;
- 
-       function gettimeofday
-         (tv   : access struct_timeval;
-          tz   : System.Address := System.Null_Address)
-          return int;
-       pragma Import (C, gettimeofday, "gettimeofday");
- 
-    begin
-       Result := gettimeofday (tv'Unchecked_Access);
-       tp.all := To_Timespec (To_Duration (tv));
-       return Result;
-    end clock_gettime;
- 
-    -----------------
-    -- sched_yield --
-    -----------------
- 
-    --  AIX Thread does not have sched_yield;
- 
-    function sched_yield return int is
- 
-       procedure pthread_yield;
-       pragma Import (C, pthread_yield, "sched_yield");
- 
-    begin
-       pthread_yield;
-       return 0;
-    end sched_yield;
- 
-    function Get_Stack_Base (thread : pthread_t) return Address is
-       pragma Warnings (Off, thread);
- 
-    begin
-       return Null_Address;
-    end Get_Stack_Base;
- 
- end System.OS_Interface;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5bosinte.ads gcc-4.0.0/gcc/ada/5bosinte.ads
*** gcc-3.4.3/gcc/ada/5bosinte.ads	Fri Dec  5 10:24:04 2003
--- gcc-4.0.0/gcc/ada/5bosinte.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,580 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   S Y S T E M . O S _ I N T E R F A C E                  --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --          Copyright (C) 1997-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a AIX (Native THREADS) version of this package.
- 
- --  This package encapsulates all direct interfaces to OS services
- --  that are needed by children of System.
- 
- --  PLEASE DO NOT add any with-clauses to this package
- --  or remove the pragma Elaborate_Body.
- --  It is designed to be a bottom-level (leaf) package.
- 
- with Interfaces.C;
- package System.OS_Interface is
-    pragma Preelaborate;
- 
-    pragma Linker_Options ("-lpthreads");
-    pragma Linker_Options ("-lc_r");
- 
-    subtype int            is Interfaces.C.int;
-    subtype short          is Interfaces.C.short;
-    subtype long           is Interfaces.C.long;
-    subtype unsigned       is Interfaces.C.unsigned;
-    subtype unsigned_short is Interfaces.C.unsigned_short;
-    subtype unsigned_long  is Interfaces.C.unsigned_long;
-    subtype unsigned_char  is Interfaces.C.unsigned_char;
-    subtype plain_char     is Interfaces.C.plain_char;
-    subtype size_t         is Interfaces.C.size_t;
- 
-    -----------
-    -- Errno --
-    -----------
- 
-    function errno return int;
-    pragma Import (C, errno, "__get_errno");
- 
-    EAGAIN    : constant := 11;
-    EINTR     : constant := 4;
-    EINVAL    : constant := 22;
-    ENOMEM    : constant := 12;
-    ETIMEDOUT : constant := 78;
- 
-    -------------
-    -- Signals --
-    -------------
- 
-    Max_Interrupt : constant := 63;
-    type Signal is new int range 0 .. Max_Interrupt;
-    for Signal'Size use int'Size;
- 
-    SIGHUP      : constant := 1; --  hangup
-    SIGINT      : constant := 2; --  interrupt (rubout)
-    SIGQUIT     : constant := 3; --  quit (ASCD FS)
-    SIGILL      : constant := 4; --  illegal instruction (not reset)
-    SIGTRAP     : constant := 5; --  trace trap (not reset)
-    SIGIOT      : constant := 6; --  IOT instruction
-    SIGABRT     : constant := 6; --  used by abort, replace SIGIOT in the future
-    SIGEMT      : constant := 7; --  EMT instruction
-    SIGFPE      : constant := 8; --  floating point exception
-    SIGKILL     : constant := 9; --  kill (cannot be caught or ignored)
-    SIGBUS      : constant := 10; --  bus error
-    SIGSEGV     : constant := 11; --  segmentation violation
-    SIGSYS      : constant := 12; --  bad argument to system call
-    SIGPIPE     : constant := 13; --  write on a pipe with no one to read it
-    SIGALRM     : constant := 14; --  alarm clock
-    SIGTERM     : constant := 15; --  software termination signal from kill
-    SIGUSR1     : constant := 30; --  user defined signal 1
-    SIGUSR2     : constant := 31; --  user defined signal 2
-    SIGCLD      : constant := 20; --  alias for SIGCHLD
-    SIGCHLD     : constant := 20; --  child status change
-    SIGPWR      : constant := 29; --  power-fail restart
-    SIGWINCH    : constant := 28; --  window size change
-    SIGURG      : constant := 16; --  urgent condition on IO channel
-    SIGPOLL     : constant := 23; --  pollable event occurred
-    SIGIO       : constant := 23; --  I/O possible (Solaris SIGPOLL alias)
-    SIGSTOP     : constant := 17; --  stop (cannot be caught or ignored)
-    SIGTSTP     : constant := 18; --  user stop requested from tty
-    SIGCONT     : constant := 19; --  stopped process has been continued
-    SIGTTIN     : constant := 21; --  background tty read attempted
-    SIGTTOU     : constant := 22; --  background tty write attempted
-    SIGVTALRM   : constant := 34; --  virtual timer expired
-    SIGPROF     : constant := 32; --  profiling timer expired
-    SIGXCPU     : constant := 24; --  CPU time limit exceeded
-    SIGXFSZ     : constant := 25; --  filesize limit exceeded
-    SIGWAITING  : constant := 39; --  m:n scheduling
- 
-    --  the following signals are AIX specific
-    SIGMSG      : constant := 27; -- input data is in the ring buffer
-    SIGDANGER   : constant := 33; -- system crash imminent
-    SIGMIGRATE  : constant := 35; -- migrate process
-    SIGPRE      : constant := 36; -- programming exception
-    SIGVIRT     : constant := 37; -- AIX virtual time alarm
-    SIGALRM1    : constant := 38; -- m:n condition variables
-    SIGKAP      : constant := 60; -- keep alive poll from native keyboard
-    SIGGRANT    : constant := SIGKAP; -- monitor mode granted
-    SIGRETRACT  : constant := 61; -- monitor mode should be relinguished
-    SIGSOUND    : constant := 62; -- sound control has completed
-    SIGSAK      : constant := 63; -- secure attention key
- 
-    SIGADAABORT : constant := SIGTERM;
-    --  Note: on other targets, we usually use SIGABRT, but on AiX, it
-    --  appears that SIGABRT can't be used in sigwait(), so we use SIGTERM.
- 
-    type Signal_Set is array (Natural range <>) of Signal;
- 
-    Unmasked    : constant Signal_Set :=
-      (SIGTRAP, SIGTTIN, SIGTTOU, SIGTSTP, SIGPROF);
-    Reserved    : constant Signal_Set := (SIGABRT, SIGKILL, SIGSTOP);
- 
-    type sigset_t is private;
- 
-    function sigaddset (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigaddset, "sigaddset");
- 
-    function sigdelset (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigdelset, "sigdelset");
- 
-    function sigfillset (set : access sigset_t) return int;
-    pragma Import (C, sigfillset, "sigfillset");
- 
-    function sigismember (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigismember, "sigismember");
- 
-    function sigemptyset (set : access sigset_t) return int;
-    pragma Import (C, sigemptyset, "sigemptyset");
- 
-    type struct_sigaction is record
-       sa_handler : System.Address;
-       sa_mask    : sigset_t;
-       sa_flags   : int;
-    end record;
-    pragma Convention (C, struct_sigaction);
-    type struct_sigaction_ptr is access all struct_sigaction;
- 
-    SA_SIGINFO  : constant := 16#0100#;
- 
-    SIG_BLOCK   : constant := 0;
-    SIG_UNBLOCK : constant := 1;
-    SIG_SETMASK : constant := 2;
- 
-    SIG_DFL : constant := 0;
-    SIG_IGN : constant := 1;
- 
-    function sigaction
-      (sig  : Signal;
-       act  : struct_sigaction_ptr;
-       oact : struct_sigaction_ptr) return int;
-    pragma Import (C, sigaction, "sigaction");
- 
-    ----------
-    -- Time --
-    ----------
- 
-    Time_Slice_Supported : constant Boolean := False;
-    --  Indicates wether time slicing is supported
- 
-    type timespec is private;
- 
-    type clockid_t is private;
- 
-    CLOCK_REALTIME : constant clockid_t;
- 
-    function clock_gettime
-      (clock_id : clockid_t;
-       tp       : access timespec) return int;
-    --  AiX threads don't have clock_gettime
-    --  We instead use gettimeofday()
- 
-    function To_Duration (TS : timespec) return Duration;
-    pragma Inline (To_Duration);
- 
-    function To_Timespec (D : Duration) return timespec;
-    pragma Inline (To_Timespec);
- 
-    type struct_timezone is record
-       tz_minuteswest : int;
-       tz_dsttime     : int;
-    end record;
-    pragma Convention (C, struct_timezone);
-    type struct_timezone_ptr is access all struct_timezone;
- 
-    type struct_timeval is private;
-    --  This is needed on systems that do not have clock_gettime()
-    --  but do have gettimeofday().
- 
-    function To_Duration (TV : struct_timeval) return Duration;
-    pragma Inline (To_Duration);
- 
-    function To_Timeval (D : Duration) return struct_timeval;
-    pragma Inline (To_Timeval);
- 
-    -------------------------
-    -- Priority Scheduling --
-    -------------------------
- 
-    SCHED_FIFO  : constant := 1;
-    SCHED_RR    : constant := 2;
-    SCHED_OTHER : constant := 0;
- 
-    -------------
-    -- Process --
-    -------------
- 
-    type pid_t is private;
- 
-    function kill (pid : pid_t; sig : Signal) return int;
-    pragma Import (C, kill, "kill");
- 
-    function getpid return pid_t;
-    pragma Import (C, getpid, "getpid");
- 
-    ---------
-    -- LWP --
-    ---------
- 
-    function lwp_self return System.Address;
-    pragma Import (C, lwp_self, "thread_self");
- 
-    -------------
-    -- Threads --
-    -------------
- 
-    type Thread_Body is access
-      function (arg : System.Address) return System.Address;
-    type pthread_t           is private;
-    subtype Thread_Id        is pthread_t;
- 
-    type pthread_mutex_t     is limited private;
-    type pthread_cond_t      is limited private;
-    type pthread_attr_t      is limited private;
-    type pthread_mutexattr_t is limited private;
-    type pthread_condattr_t  is limited private;
-    type pthread_key_t       is private;
- 
-    PTHREAD_CREATE_DETACHED : constant := 1;
- 
-    -----------
-    -- Stack --
-    -----------
- 
-    Stack_Base_Available : constant Boolean := False;
-    --  Indicates wether the stack base is available on this target.
- 
-    function Get_Stack_Base (thread : pthread_t) return Address;
-    pragma Inline (Get_Stack_Base);
-    --  returns the stack base of the specified thread.
-    --  Only call this function when Stack_Base_Available is True.
- 
-    function Get_Page_Size return size_t;
-    function Get_Page_Size return Address;
-    pragma Import (C, Get_Page_Size, "getpagesize");
-    --  returns the size of a page, or 0 if this is not relevant on this
-    --  target
- 
-    PROT_NONE  : constant := 0;
-    PROT_READ  : constant := 1;
-    PROT_WRITE : constant := 2;
-    PROT_EXEC  : constant := 4;
-    PROT_ALL   : constant := PROT_READ + PROT_WRITE + PROT_EXEC;
- 
-    PROT_ON    : constant := PROT_READ;
-    PROT_OFF   : constant := PROT_ALL;
- 
-    function mprotect (addr : Address; len : size_t; prot : int) return int;
-    pragma Import (C, mprotect);
- 
-    ---------------------------------------
-    -- Nonstandard Thread Initialization --
-    ---------------------------------------
- 
-    --  Though not documented, pthread_init *must* be called before any other
-    --  pthread call
- 
-    procedure pthread_init;
-    pragma Import (C, pthread_init, "pthread_init");
- 
-    -------------------------
-    -- POSIX.1c  Section 3 --
-    -------------------------
- 
-    function sigwait
-      (set : access sigset_t;
-       sig : access Signal) return int;
-    pragma Import (C, sigwait, "sigwait");
- 
-    function pthread_kill
-      (thread : pthread_t;
-       sig    : Signal) return int;
-    pragma Import (C, pthread_kill, "pthread_kill");
- 
-    type sigset_t_ptr is access all sigset_t;
- 
-    function pthread_sigmask
-      (how  : int;
-       set  : sigset_t_ptr;
-       oset : sigset_t_ptr) return int;
-    pragma Import (C, pthread_sigmask, "sigthreadmask");
- 
-    --------------------------
-    -- POSIX.1c  Section 11 --
-    --------------------------
- 
-    function pthread_mutexattr_init
-      (attr : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
- 
-    function pthread_mutexattr_destroy
-      (attr : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
- 
-    function pthread_mutex_init
-      (mutex : access pthread_mutex_t;
-       attr  : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
- 
-    function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
- 
-    function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_mutex_lock, "pthread_mutex_lock");
- 
-    function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_mutex_unlock, "pthread_mutex_unlock");
- 
-    function pthread_condattr_init
-      (attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
- 
-    function pthread_condattr_destroy
-      (attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
- 
-    function pthread_cond_init
-      (cond : access pthread_cond_t;
-       attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_cond_init, "pthread_cond_init");
- 
-    function pthread_cond_destroy (cond : access pthread_cond_t) return int;
-    pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
- 
-    function pthread_cond_signal (cond : access pthread_cond_t) return int;
-    pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
- 
-    function pthread_cond_wait
-      (cond  : access pthread_cond_t;
-       mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_cond_wait, "pthread_cond_wait");
- 
-    function pthread_cond_timedwait
-      (cond    : access pthread_cond_t;
-       mutex   : access pthread_mutex_t;
-       abstime : access timespec) return int;
-    pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait");
- 
-    Relative_Timed_Wait : constant Boolean := False;
-    --  pthread_cond_timedwait requires an absolute delay time
- 
-    ----------------------------
-    --  POSIX.1c  Section 13  --
-    ----------------------------
- 
-    PTHREAD_PRIO_NONE    : constant := 0;
-    PTHREAD_PRIO_PROTECT : constant := 0;
-    PTHREAD_PRIO_INHERIT : constant := 0;
- 
-    function pthread_mutexattr_setprotocol
-      (attr     : access pthread_mutexattr_t;
-       protocol : int) return int;
-    pragma Import (C, pthread_mutexattr_setprotocol);
- 
-    function pthread_mutexattr_setprioceiling
-      (attr        : access pthread_mutexattr_t;
-       prioceiling : int) return int;
-    pragma Import (C, pthread_mutexattr_setprioceiling);
- 
-    type Array_5_Int is array (0 .. 5) of int;
-    type struct_sched_param is record
-       sched_priority : int;
-       sched_policy   : int;
-       sched_reserved : Array_5_Int;
-    end record;
- 
-    function pthread_setschedparam
-      (thread : pthread_t;
-       policy : int;
-       param  : access struct_sched_param) return int;
-    pragma Import (C, pthread_setschedparam, "pthread_setschedparam");
- 
-    function pthread_attr_setscope
-      (attr            : access pthread_attr_t;
-       contentionscope : int) return int;
-    pragma Import (C, pthread_attr_setscope, "pthread_attr_setscope");
- 
-    function pthread_attr_setinheritsched
-      (attr            : access pthread_attr_t;
-       inheritsched : int) return int;
-    pragma Import (C, pthread_attr_setinheritsched);
- 
-    function pthread_attr_setschedpolicy
-      (attr   : access pthread_attr_t;
-       policy : int) return int;
-    pragma Import (C, pthread_attr_setschedpolicy);
- 
-    function pthread_attr_setschedparam
-      (attr        : access pthread_attr_t;
-       sched_param : int) return int;
-    pragma Import (C, pthread_attr_setschedparam);
- 
-    function sched_yield return int;
-    --  AiX have a nonstandard sched_yield.
- 
-    ---------------------------
-    -- P1003.1c - Section 16 --
-    ---------------------------
- 
-    function pthread_attr_init (attributes : access pthread_attr_t) return int;
-    pragma Import (C, pthread_attr_init, "pthread_attr_init");
- 
-    function pthread_attr_destroy
-      (attributes : access pthread_attr_t) return int;
-    pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
- 
-    function pthread_attr_setdetachstate
-      (attr        : access pthread_attr_t;
-       detachstate : int) return int;
-    pragma Import (C, pthread_attr_setdetachstate);
- 
-    function pthread_attr_setstacksize
-      (attr      : access pthread_attr_t;
-       stacksize : size_t) return int;
-    pragma Import (C, pthread_attr_setstacksize);
- 
-    function pthread_create
-      (thread        : access pthread_t;
-       attributes    : access pthread_attr_t;
-       start_routine : Thread_Body;
-       arg           : System.Address)
-      return int;
-    pragma Import (C, pthread_create, "pthread_create");
- 
-    procedure pthread_exit (status : System.Address);
-    pragma Import (C, pthread_exit, "pthread_exit");
- 
-    function pthread_self return pthread_t;
-    pragma Import (C, pthread_self, "pthread_self");
- 
-    --------------------------
-    -- POSIX.1c  Section 17 --
-    --------------------------
- 
-    function pthread_setspecific
-      (key   : pthread_key_t;
-       value : System.Address) return int;
-    pragma Import (C, pthread_setspecific, "pthread_setspecific");
- 
-    function pthread_getspecific (key : pthread_key_t) return System.Address;
-    pragma Import (C, pthread_getspecific, "pthread_getspecific");
- 
-    type destructor_pointer is access
-       procedure (arg : System.Address);
- 
-    function pthread_key_create
-      (key        : access pthread_key_t;
-       destructor : destructor_pointer) return int;
-    pragma Import (C, pthread_key_create, "pthread_key_create");
- 
- private
- 
-    type sigset_t is record
-       losigs : unsigned_long;
-       hisigs : unsigned_long;
-    end record;
-    pragma Convention (C_Pass_By_Copy, sigset_t);
- 
-    type pid_t is new int;
- 
-    type time_t is new long;
- 
-    type timespec is record
-       tv_sec  : time_t;
-       tv_nsec : long;
-    end record;
-    pragma Convention (C, timespec);
- 
-    type clockid_t is new int;
-    CLOCK_REALTIME : constant clockid_t := 0;
- 
-    type struct_timeval is record
-       tv_sec  : long;
-       tv_usec : long;
-    end record;
-    pragma Convention (C, struct_timeval);
- 
-    type pthread_attr_t is new System.Address;
-    pragma Convention (C, pthread_attr_t);
-    --  typedef struct __pt_attr        *pthread_attr_t;
- 
-    type pthread_condattr_t is new System.Address;
-    pragma Convention (C, pthread_condattr_t);
-    --  typedef struct __pt_attr        *pthread_condattr_t;
- 
-    type pthread_mutexattr_t is new System.Address;
-    pragma Convention (C, pthread_mutexattr_t);
-    --  typedef struct __pt_attr        *pthread_mutexattr_t;
- 
-    type pthread_t is new System.Address;
-    pragma Convention (C, pthread_t);
-    --  typedef void    *pthread_t;
- 
-    type ptq_queue;
-    type ptq_queue_ptr is access all ptq_queue;
- 
-    type ptq_queue is record
-       ptq_next : ptq_queue_ptr;
-       ptq_prev : ptq_queue_ptr;
-    end record;
- 
-    type Array_3_Int is array (0 .. 3) of int;
-    type pthread_mutex_t is record
-         link        : ptq_queue;
-         ptmtx_lock  : int;
-         ptmtx_flags : long;
-         protocol    : int;
-         prioceiling : int;
-         ptmtx_owner : pthread_t;
-         mtx_id      : int;
-         attr        : pthread_attr_t;
-         mtx_kind    : int;
-         lock_cpt    : int;
-         reserved    : Array_3_Int;
-    end record;
-    pragma Convention (C, pthread_mutex_t);
-    type pthread_mutex_t_ptr is access pthread_mutex_t;
- 
-    type pthread_cond_t is record
-       link         : ptq_queue;
-       ptcv_lock    : int;
-       ptcv_flags   : long;
-       ptcv_waiters : ptq_queue;
-       cv_id        : int;
-       attr         : pthread_attr_t;
-       mutex        : pthread_mutex_t_ptr;
-       cptwait      : int;
-       reserved     : int;
-    end record;
-    pragma Convention (C, pthread_cond_t);
- 
-    type pthread_key_t is new unsigned;
- 
- end System.OS_Interface;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5bsystem.ads gcc-4.0.0/gcc/ada/5bsystem.ads
*** gcc-3.4.3/gcc/ada/5bsystem.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/5bsystem.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,150 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                        GNAT RUN-TIME COMPONENTS                          --
- --                                                                          --
- --                               S Y S T E M                                --
- --                                                                          --
- --                                 S p e c                                  --
- --                            (AIX/PPC Version)                             --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the  contents of the part following the private keyword. --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- package System is
- pragma Pure (System);
- --  Note that we take advantage of the implementation permission to
- --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
- 
-    type Name is (SYSTEM_NAME_GNAT);
-    System_Name : constant Name := SYSTEM_NAME_GNAT;
- 
-    --  System-Dependent Named Numbers
- 
-    Min_Int               : constant := Long_Long_Integer'First;
-    Max_Int               : constant := Long_Long_Integer'Last;
- 
-    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
-    Max_Nonbinary_Modulus : constant := Integer'Last;
- 
-    Max_Base_Digits       : constant := Long_Long_Float'Digits;
-    Max_Digits            : constant := Long_Long_Float'Digits;
- 
-    Max_Mantissa          : constant := 63;
-    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
- 
-    Tick                  : constant := 0.01;
- 
-    --  Storage-related Declarations
- 
-    type Address is private;
-    Null_Address : constant Address;
- 
-    Storage_Unit : constant := 8;
-    Word_Size    : constant := 32;
-    Memory_Size  : constant := 2 ** 32;
- 
-    --  Address comparison
- 
-    function "<"  (Left, Right : Address) return Boolean;
-    function "<=" (Left, Right : Address) return Boolean;
-    function ">"  (Left, Right : Address) return Boolean;
-    function ">=" (Left, Right : Address) return Boolean;
-    function "="  (Left, Right : Address) return Boolean;
- 
-    pragma Import (Intrinsic, "<");
-    pragma Import (Intrinsic, "<=");
-    pragma Import (Intrinsic, ">");
-    pragma Import (Intrinsic, ">=");
-    pragma Import (Intrinsic, "=");
- 
-    --  Other System-Dependent Declarations
- 
-    type Bit_Order is (High_Order_First, Low_Order_First);
-    Default_Bit_Order : constant Bit_Order := High_Order_First;
- 
-    --  Priority-related Declarations (RM D.1)
- 
-    Max_Priority           : constant Positive := 30;
-    Max_Interrupt_Priority : constant Positive := 31;
- 
-    subtype Any_Priority       is Integer      range  0 .. 31;
-    subtype Priority           is Any_Priority range  0 .. 30;
-    subtype Interrupt_Priority is Any_Priority range 31 .. 31;
- 
-    Default_Priority : constant Priority := 15;
- 
- private
- 
-    type Address is mod Memory_Size;
-    Null_Address : constant Address := 0;
- 
-    --------------------------------------
-    -- System Implementation Parameters --
-    --------------------------------------
- 
-    --  These parameters provide information about the target that is used
-    --  by the compiler. They are in the private part of System, where they
-    --  can be accessed using the special circuitry in the Targparm unit
-    --  whose source should be consulted for more detailed descriptions
-    --  of the individual switch values.
- 
-    AAMP                      : constant Boolean := False;
-    Backend_Divide_Checks     : constant Boolean := False;
-    Backend_Overflow_Checks   : constant Boolean := False;
-    Command_Line_Args         : constant Boolean := True;
-    Configurable_Run_Time     : constant Boolean := False;
-    Denorm                    : constant Boolean := True;
-    Duration_32_Bits          : constant Boolean := False;
-    Exit_Status_Supported     : constant Boolean := True;
-    Fractional_Fixed_Ops      : constant Boolean := False;
-    Frontend_Layout           : constant Boolean := False;
-    Functions_Return_By_DSP   : constant Boolean := False;
-    Machine_Overflows         : constant Boolean := False;
-    Machine_Rounds            : constant Boolean := True;
-    OpenVMS                   : constant Boolean := False;
-    Signed_Zeros              : constant Boolean := True;
-    Stack_Check_Default       : constant Boolean := False;
-    Stack_Check_Probes        : constant Boolean := False;
-    Support_64_Bit_Divides    : constant Boolean := True;
-    Support_Aggregates        : constant Boolean := True;
-    Support_Composite_Assign  : constant Boolean := True;
-    Support_Composite_Compare : constant Boolean := True;
-    Support_Long_Shifts       : constant Boolean := True;
-    Suppress_Standard_Library : constant Boolean := False;
-    Use_Ada_Main_Program_Name : constant Boolean := False;
-    ZCX_By_Default            : constant Boolean := False;
-    GCC_ZCX_Support           : constant Boolean := False;
-    Front_End_ZCX_Support     : constant Boolean := False;
- 
-    --  Obsolete entries, to be removed eventually (bootstrap issues!)
- 
-    High_Integrity_Mode       : constant Boolean := False;
-    Long_Shifts_Inlined       : constant Boolean := True;
- 
- end System;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5cosinte.ads gcc-4.0.0/gcc/ada/5cosinte.ads
*** gcc-3.4.3/gcc/ada/5cosinte.ads	Fri Dec  5 10:24:04 2003
--- gcc-4.0.0/gcc/ada/5cosinte.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,583 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   S Y S T E M . O S _ I N T E R F A C E                  --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --          Copyright (C) 1998-2001 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a AIX (FSU THREADS) version of this package.
- 
- --  This package encapsulates all direct interfaces to OS services
- --  that are needed by children of System.
- 
- --  PLEASE DO NOT add any with-clauses to this package
- --  or remove the pragma Elaborate_Body.
- --  It is designed to be a bottom-level (leaf) package.
- 
- with Interfaces.C;
- package System.OS_Interface is
-    pragma Preelaborate;
-    --  pragma Elaborate_Body;
- 
-    pragma Linker_Options ("-lgthreads");
-    pragma Linker_Options ("-lmalloc");
- 
-    subtype int            is Interfaces.C.int;
-    subtype short          is Interfaces.C.short;
-    subtype long           is Interfaces.C.long;
-    subtype unsigned       is Interfaces.C.unsigned;
-    subtype unsigned_short is Interfaces.C.unsigned_short;
-    subtype unsigned_long  is Interfaces.C.unsigned_long;
-    subtype unsigned_char  is Interfaces.C.unsigned_char;
-    subtype plain_char     is Interfaces.C.plain_char;
-    subtype size_t         is Interfaces.C.size_t;
- 
-    -----------
-    -- Errno --
-    -----------
- 
-    function errno return int;
-    pragma Import (C, errno, "__get_errno");
- 
-    EAGAIN    : constant := 11;
-    EINTR     : constant := 4;
-    EINVAL    : constant := 22;
-    ENOMEM    : constant := 12;
-    ETIMEDOUT : constant := 78;
- 
-    -------------
-    -- Signals --
-    -------------
- 
-    Max_Interrupt : constant := 63;
-    type Signal is new int range 0 .. Max_Interrupt;
-    for Signal'Size use int'Size;
- 
-    SIGHUP      : constant := 1; --  hangup
-    SIGINT      : constant := 2; --  interrupt (rubout)
-    SIGQUIT     : constant := 3; --  quit (ASCD FS)
-    SIGILL      : constant := 4; --  illegal instruction (not reset)
-    SIGTRAP     : constant := 5; --  trace trap (not reset)
-    SIGIOT      : constant := 6; --  IOT instruction
-    SIGABRT     : constant := 6; --  used by abort, replace SIGIOT in the future
-    SIGEMT      : constant := 7; --  EMT instruction
-    SIGFPE      : constant := 8; --  floating point exception
-    SIGKILL     : constant := 9; --  kill (cannot be caught or ignored)
-    SIGBUS      : constant := 10; --  bus error
-    SIGSEGV     : constant := 11; --  segmentation violation
-    SIGSYS      : constant := 12; --  bad argument to system call
-    SIGPIPE     : constant := 13; --  write on a pipe with no one to read it
-    SIGALRM     : constant := 14; --  alarm clock
-    SIGTERM     : constant := 15; --  software termination signal from kill
-    SIGUSR1     : constant := 30; --  user defined signal 1
-    SIGUSR2     : constant := 31; --  user defined signal 2
-    SIGCLD      : constant := 20; --  alias for SIGCHLD
-    SIGCHLD     : constant := 20; --  child status change
-    SIGPWR      : constant := 29; --  power-fail restart
-    SIGWINCH    : constant := 28; --  window size change
-    SIGURG      : constant := 16; --  urgent condition on IO channel
-    SIGPOLL     : constant := 23; --  pollable event occurred
-    SIGIO       : constant := 23; --  I/O possible (Solaris SIGPOLL alias)
-    SIGSTOP     : constant := 17; --  stop (cannot be caught or ignored)
-    SIGTSTP     : constant := 18; --  user stop requested from tty
-    SIGCONT     : constant := 19; --  stopped process has been continued
-    SIGTTIN     : constant := 21; --  background tty read attempted
-    SIGTTOU     : constant := 22; --  background tty write attempted
-    SIGVTALRM   : constant := 34; --  virtual timer expired
-    SIGPROF     : constant := 32; --  profiling timer expired
-    SIGXCPU     : constant := 24; --  CPU time limit exceeded
-    SIGXFSZ     : constant := 25; --  filesize limit exceeded
-    SIGWAITING  : constant := 39; --  m:n scheduling
- 
-    --  the following signals are AIX specific
-    SIGMSG      : constant := 27; -- input data is in the ring buffer
-    SIGDANGER   : constant := 33; -- system crash imminent
-    SIGMIGRATE  : constant := 35; -- migrate process
-    SIGPRE      : constant := 36; -- programming exception
-    SIGVIRT     : constant := 37; -- AIX virtual time alarm
-    SIGALRM1    : constant := 38; -- m:n condition variables
-    SIGKAP      : constant := 60; -- keep alive poll from native keyboard
-    SIGGRANT    : constant := SIGKAP; -- monitor mode granted
-    SIGRETRACT  : constant := 61; -- monitor mode should be relinguished
-    SIGSOUND    : constant := 62; -- sound control has completed
-    SIGSAK      : constant := 63; -- secure attention key
- 
-    SIGADAABORT : constant := SIGABRT;
- 
-    type Signal_Set is array (Natural range <>) of Signal;
- 
-    Unmasked    : constant Signal_Set :=
-      (SIGTRAP, SIGTTIN, SIGTTOU, SIGTSTP, SIGPROF);
-    Reserved    : constant Signal_Set :=
-      (SIGKILL, SIGSTOP, SIGALRM, SIGWAITING);
- 
-    type sigset_t is private;
- 
-    function sigaddset (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigaddset, "sigaddset");
- 
-    function sigdelset (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigdelset, "sigdelset");
- 
-    function sigfillset (set : access sigset_t) return int;
-    pragma Import (C, sigfillset, "sigfillset");
- 
-    function sigismember (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigismember, "sigismember");
- 
-    function sigemptyset (set : access sigset_t) return int;
-    pragma Import (C, sigemptyset, "sigemptyset");
- 
-    type struct_sigaction is record
-       sa_handler : System.Address;
-       sa_mask    : sigset_t;
-       sa_flags   : int;
-    end record;
-    pragma Convention (C, struct_sigaction);
-    type struct_sigaction_ptr is access all struct_sigaction;
- 
-    SA_SIGINFO  : constant := 16#0100#;
- 
-    SIG_BLOCK   : constant := 0;
-    SIG_UNBLOCK : constant := 1;
-    SIG_SETMASK : constant := 2;
- 
-    SIG_DFL : constant := 0;
-    SIG_IGN : constant := 1;
- 
-    function sigaction
-      (sig  : Signal;
-       act  : struct_sigaction_ptr;
-       oact : struct_sigaction_ptr) return int;
-    pragma Import (C, sigaction, "_internal_sigaction");
- 
-    ----------
-    -- Time --
-    ----------
- 
-    Time_Slice_Supported : constant Boolean := True;
-    --  Indicates wether time slicing is supported (i.e FSU threads have been
-    --  compiled with DEF_RR)
- 
-    type timespec is private;
- 
-    type clockid_t is private;
- 
-    CLOCK_REALTIME : constant clockid_t;
- 
-    function clock_gettime
-      (clock_id : clockid_t;
-       tp       : access timespec) return int;
-    pragma Import (C, clock_gettime, "clock_gettime");
- 
-    function To_Duration (TS : timespec) return Duration;
-    pragma Inline (To_Duration);
- 
-    function To_Timespec (D : Duration) return timespec;
-    pragma Inline (To_Timespec);
- 
-    type struct_timeval is private;
- 
-    function To_Duration (TV : struct_timeval) return Duration;
-    pragma Inline (To_Duration);
- 
-    function To_Timeval (D : Duration) return struct_timeval;
-    pragma Inline (To_Timeval);
- 
-    -------------------------
-    -- Priority Scheduling --
-    -------------------------
- 
-    SCHED_FIFO  : constant := 0;
-    SCHED_RR    : constant := 1;
-    SCHED_OTHER : constant := 2;
- 
-    -------------
-    -- Process --
-    -------------
- 
-    type pid_t is private;
- 
-    function kill (pid : pid_t; sig : Signal) return int;
-    pragma Import (C, kill, "kill");
- 
-    function getpid return pid_t;
-    pragma Import (C, getpid, "getpid");
- 
-    ---------
-    -- LWP --
-    ---------
- 
-    function lwp_self return System.Address;
-    --  lwp_self does not exist on this thread library, revert to pthread_self
-    --  which is the closest approximation (with getpid). This function is
-    --  needed to share 7staprop.adb across POSIX-like targets.
-    pragma Import (C, lwp_self, "pthread_self");
- 
-    -------------
-    -- Threads --
-    -------------
- 
-    type Thread_Body is access
-      function (arg : System.Address) return System.Address;
-    type pthread_t           is private;
-    subtype Thread_Id        is pthread_t;
- 
-    type pthread_mutex_t     is limited private;
-    type pthread_cond_t      is limited private;
-    type pthread_attr_t      is limited private;
-    type pthread_mutexattr_t is limited private;
-    type pthread_condattr_t  is limited private;
-    type pthread_key_t       is private;
- 
-    PTHREAD_CREATE_DETACHED : constant := 1;
- 
-    -----------
-    -- Stack --
-    -----------
- 
-    Stack_Base_Available : constant Boolean := True;
-    --  Indicates wether the stack base is available on this target.
-    --  This allows us to share s-osinte.adb between all the FSU run time.
-    --  Note that this value can only be true if pthread_t has a complete
-    --  definition that corresponds exactly to the C header files.
- 
-    function Get_Stack_Base (thread : pthread_t) return Address;
-    pragma Inline (Get_Stack_Base);
-    --  returns the stack base of the specified thread.
-    --  Only call this function when Stack_Base_Available is True.
- 
-    function Get_Page_Size return size_t;
-    function Get_Page_Size return Address;
-    pragma Import (C, Get_Page_Size, "getpagesize");
-    --  returns the size of a page, or 0 if this is not relevant on this
-    --  target
- 
-    PROT_NONE  : constant := 0;
-    PROT_READ  : constant := 1;
-    PROT_WRITE : constant := 2;
-    PROT_EXEC  : constant := 4;
-    PROT_ALL   : constant := PROT_READ + PROT_WRITE + PROT_EXEC;
- 
-    PROT_ON    : constant := PROT_READ;
-    PROT_OFF   : constant := PROT_ALL;
- 
-    function mprotect (addr : Address; len : size_t; prot : int) return int;
-    pragma Import (C, mprotect);
- 
-    ---------------------------------------
-    -- Nonstandard Thread Initialization --
-    ---------------------------------------
- 
-    procedure pthread_init;
-    --  FSU_THREADS requires pthread_init, which is nonstandard
-    --  and this should be invoked during the elaboration of s-taprop.adb
-    pragma Import (C, pthread_init, "pthread_init");
- 
-    -------------------------
-    -- POSIX.1c  Section 3 --
-    -------------------------
- 
-    function sigwait
-      (set : access sigset_t;
-       sig : access Signal) return int;
-    --  FSU_THREADS has a nonstandard sigwait
- 
-    function pthread_kill
-      (thread : pthread_t;
-       sig    : Signal) return int;
-    pragma Import (C, pthread_kill, "pthread_kill");
- 
-    --  FSU threads does not have pthread_sigmask. Instead, it redefines
-    --  sigprocmask and then uses a special syscall API to call the system
-    --  version. Doing syscalls on AiX is very difficult, so we rename the
-    --  pthread version instead.
- 
-    type sigset_t_ptr is access all sigset_t;
- 
-    function pthread_sigmask
-      (how  : int;
-       set  : sigset_t_ptr;
-       oset : sigset_t_ptr) return int;
-    pragma Import (C, pthread_sigmask, "_internal_sigprocmask");
- 
-    --------------------------
-    -- POSIX.1c  Section 11 --
-    --------------------------
- 
-    function pthread_mutexattr_init
-      (attr : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
- 
-    function pthread_mutexattr_destroy
-      (attr : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
- 
-    function pthread_mutex_init
-      (mutex : access pthread_mutex_t;
-       attr  : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
- 
-    function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
- 
-    function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
-    --  FSU_THREADS has nonstandard pthread_mutex_lock
- 
-    function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
-    --  FSU_THREADS has nonstandard pthread_mutex_lock
- 
-    function pthread_condattr_init
-      (attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
- 
-    function pthread_condattr_destroy
-      (attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
- 
-    function pthread_cond_init
-      (cond : access pthread_cond_t;
-       attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_cond_init, "pthread_cond_init");
- 
-    function pthread_cond_destroy (cond : access pthread_cond_t) return int;
-    pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
- 
-    function pthread_cond_signal (cond : access pthread_cond_t) return int;
-    pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
- 
-    function pthread_cond_wait
-      (cond  : access pthread_cond_t;
-       mutex : access pthread_mutex_t) return int;
-    --  FSU_THREADS has a nonstandard pthread_cond_wait
- 
-    function pthread_cond_timedwait
-      (cond    : access pthread_cond_t;
-       mutex   : access pthread_mutex_t;
-       abstime : access timespec) return int;
-    --  FSU_THREADS has a nonstandard pthread_cond_timedwait
- 
-    Relative_Timed_Wait : constant Boolean := False;
-    --  pthread_cond_timedwait requires an absolute delay time
- 
-    --------------------------
-    -- POSIX.1c  Section 13 --
-    --------------------------
- 
-    PTHREAD_PRIO_NONE    : constant := 0;
-    PTHREAD_PRIO_PROTECT : constant := 2;
-    PTHREAD_PRIO_INHERIT : constant := 1;
- 
-    function pthread_mutexattr_setprotocol
-      (attr     : access pthread_mutexattr_t;
-       protocol : int) return int;
-    pragma Import (C, pthread_mutexattr_setprotocol);
- 
-    function pthread_mutexattr_setprioceiling
-      (attr        : access pthread_mutexattr_t;
-       prioceiling : int) return int;
-    pragma Import
-      (C, pthread_mutexattr_setprioceiling,
-          "pthread_mutexattr_setprio_ceiling");
- 
-    type struct_sched_param is record
-       sched_priority : int;  --  scheduling priority
-    end record;
- 
-    function pthread_setschedparam
-      (thread : pthread_t;
-       policy : int;
-       param  : access struct_sched_param) return int;
-    --  FSU_THREADS does not have pthread_setschedparam
- 
-    function pthread_attr_setscope
-      (attr            : access pthread_attr_t;
-       contentionscope : int) return int;
-    pragma Import (C, pthread_attr_setscope, "pthread_attr_setscope");
- 
-    function pthread_attr_setinheritsched
-      (attr         : access pthread_attr_t;
-       inheritsched : int) return int;
-    pragma Import (C, pthread_attr_setinheritsched);
- 
-    function pthread_attr_setschedpolicy
-      (attr   : access pthread_attr_t;
-       policy : int) return int;
-    pragma Import (C, pthread_attr_setschedpolicy, "pthread_attr_setsched");
- 
-    function sched_yield return int;
-    --  FSU_THREADS does not have sched_yield;
- 
-    ---------------------------
-    -- P1003.1c - Section 16 --
-    ---------------------------
- 
-    function pthread_attr_init (attributes : access pthread_attr_t) return int;
-    pragma Import (C, pthread_attr_init, "pthread_attr_init");
- 
-    function pthread_attr_destroy
-      (attributes : access pthread_attr_t) return int;
-    pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
- 
-    function pthread_attr_setdetachstate
-      (attr        : access pthread_attr_t;
-       detachstate : int) return int;
-    --  FSU_THREADS has a nonstandard pthread_attr_setdetachstate
- 
-    function pthread_attr_setstacksize
-      (attr      : access pthread_attr_t;
-       stacksize : size_t) return int;
-    pragma Import (C, pthread_attr_setstacksize);
- 
-    function pthread_create
-      (thread        : access pthread_t;
-       attributes    : access pthread_attr_t;
-       start_routine : Thread_Body;
-       arg           : System.Address) return int;
-    pragma Import (C, pthread_create, "pthread_create");
- 
-    procedure pthread_exit (status : System.Address);
-    pragma Import (C, pthread_exit, "pthread_exit");
- 
-    function pthread_self return pthread_t;
-    pragma Import (C, pthread_self, "pthread_self");
- 
-    --------------------------
-    -- POSIX.1c  Section 17 --
-    --------------------------
- 
-    function pthread_setspecific
-      (key   : pthread_key_t;
-       value : System.Address) return int;
-    pragma Import (C, pthread_setspecific, "pthread_setspecific");
- 
-    function pthread_getspecific (key : pthread_key_t) return System.Address;
-    --  FSU_THREADS has a nonstandard pthread_getspecific
- 
-    type destructor_pointer is access procedure (arg : System.Address);
- 
-    function pthread_key_create
-      (key        : access pthread_key_t;
-       destructor : destructor_pointer) return int;
-    pragma Import (C, pthread_key_create, "pthread_key_create");
- 
- private
- 
-    type sigset_t is record
-       losigs : unsigned_long;
-       hisigs : unsigned_long;
-    end record;
-    pragma Convention (C_Pass_By_Copy, sigset_t);
- 
-    type pid_t is new int;
- 
-    type time_t is new long;
- 
-    type timespec is record
-       tv_sec  : time_t;
-       tv_nsec : long;
-    end record;
-    pragma Convention (C, timespec);
- 
-    type clockid_t is new int;
-    CLOCK_REALTIME : constant clockid_t := 0;
- 
-    type struct_timeval is record
-       tv_sec  : long;
-       tv_usec : long;
-    end record;
-    pragma Convention (C, struct_timeval);
- 
-    type pthread_attr_t is record
-       flags           : int;
-       stacksize       : int;
-       contentionscope : int;
-       inheritsched    : int;
-       detachstate     : int;
-       sched           : int;
-       prio            : int;
-       starttime       : timespec;
-       deadline        : timespec;
-       period          : timespec;
-    end record;
-    pragma Convention (C_Pass_By_Copy, pthread_attr_t);
- 
-    type pthread_condattr_t is record
-       flags : int;
-    end record;
-    pragma Convention (C, pthread_condattr_t);
- 
-    type pthread_mutexattr_t is record
-       flags        : int;
-       prio_ceiling : int;
-       protocol     : int;
-    end record;
-    pragma Convention (C, pthread_mutexattr_t);
- 
-    type sigjmp_buf is array (Integer range 0 .. 63) of int;
- 
-    type pthread_t_struct is record
-       context    : sigjmp_buf;
-       pbody      : sigjmp_buf;
-       errno      : int;
-       ret        : int;
-       stack_base : System.Address;
-    end record;
-    pragma Convention (C, pthread_t_struct);
- 
-    type pthread_t is access all pthread_t_struct;
- 
-    type queue_t is record
-       head : System.Address;
-       tail : System.Address;
-    end record;
-    pragma Convention (C, queue_t);
- 
-    type pthread_mutex_t is record
-       queue        : queue_t;
-       lock         : plain_char;
-       owner        : System.Address;
-       flags        : int;
-       prio_ceiling : int;
-       protocol     : int;
-       prev_max_ceiling_prio  : int;
-    end record;
-    pragma Convention (C, pthread_mutex_t);
- 
-    type pthread_cond_t is record
-       queue   : queue_t;
-       flags   : int;
-       waiters : int;
-       mutex   : System.Address;
-    end record;
-    pragma Convention (C, pthread_cond_t);
- 
-    type pthread_key_t is new int;
- 
- end System.OS_Interface;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5csystem.ads gcc-4.0.0/gcc/ada/5csystem.ads
*** gcc-3.4.3/gcc/ada/5csystem.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/5csystem.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,160 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                        GNAT RUN-TIME COMPONENTS                          --
- --                                                                          --
- --                               S Y S T E M                                --
- --                                                                          --
- --                                 S p e c                                  --
- --                       (VxWorks Version Sparc/64)                         --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the  contents of the part following the private keyword. --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- package System is
- pragma Pure (System);
- --  Note that we take advantage of the implementation permission to
- --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
- 
-    type Name is (SYSTEM_NAME_GNAT);
-    System_Name : constant Name := SYSTEM_NAME_GNAT;
- 
-    --  System-Dependent Named Numbers
- 
-    Min_Int               : constant := Long_Long_Integer'First;
-    Max_Int               : constant := Long_Long_Integer'Last;
- 
-    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
-    Max_Nonbinary_Modulus : constant := Integer'Last;
- 
-    Max_Base_Digits       : constant := Long_Long_Float'Digits;
-    Max_Digits            : constant := Long_Long_Float'Digits;
- 
-    Max_Mantissa          : constant := 63;
-    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
- 
-    Tick                  : constant := 1.0 / 60.0;
- 
-    --  Storage-related Declarations
- 
-    --  VxWorks for UltraSparc uses 64bit words but 32bit pointers
- 
-    type Address is private;
-    Null_Address : constant Address;
- 
-    Storage_Unit : constant := 8;
-    Word_Size    : constant := 64;
-    Memory_Size  : constant := 2 ** 32;
- 
-    --  Address comparison
- 
-    function "<"  (Left, Right : Address) return Boolean;
-    function "<=" (Left, Right : Address) return Boolean;
-    function ">"  (Left, Right : Address) return Boolean;
-    function ">=" (Left, Right : Address) return Boolean;
-    function "="  (Left, Right : Address) return Boolean;
- 
-    pragma Import (Intrinsic, "<");
-    pragma Import (Intrinsic, "<=");
-    pragma Import (Intrinsic, ">");
-    pragma Import (Intrinsic, ">=");
-    pragma Import (Intrinsic, "=");
- 
-    --  Other System-Dependent Declarations
- 
-    type Bit_Order is (High_Order_First, Low_Order_First);
-    Default_Bit_Order : constant Bit_Order := High_Order_First;
- 
-    --  Priority-related Declarations (RM D.1)
- 
-    --  256        is reserved for the VxWorks kernel
-    --  248 - 255  correspond to hardware interrupt levels 0 .. 7
-    --  247        is a catchall default "interrupt" priority for signals,
-    --             allowing higher priority than normal tasks, but lower than
-    --             hardware priority levels.  Protected Object ceilings can
-    --             override these values.
-    --  246        is used by the Interrupt_Manager task
- 
-    Max_Priority           : constant Positive := 245;
-    Max_Interrupt_Priority : constant Positive := 255;
- 
-    subtype Any_Priority       is Integer      range   0 .. 255;
-    subtype Priority           is Any_Priority range   0 .. 245;
-    subtype Interrupt_Priority is Any_Priority range 246 .. 255;
- 
-    Default_Priority : constant Priority := 122;
- 
- private
- 
-    type Address is mod Memory_Size;
-    Null_Address : constant Address := 0;
- 
-    --------------------------------------
-    -- System Implementation Parameters --
-    --------------------------------------
- 
-    --  These parameters provide information about the target that is used
-    --  by the compiler. They are in the private part of System, where they
-    --  can be accessed using the special circuitry in the Targparm unit
-    --  whose source should be consulted for more detailed descriptions
-    --  of the individual switch values.
- 
-    AAMP                      : constant Boolean := False;
-    Backend_Divide_Checks     : constant Boolean := False;
-    Backend_Overflow_Checks   : constant Boolean := False;
-    Command_Line_Args         : constant Boolean := False;
-    Configurable_Run_Time     : constant Boolean := False;
-    Denorm                    : constant Boolean := True;
-    Duration_32_Bits          : constant Boolean := False;
-    Exit_Status_Supported     : constant Boolean := True;
-    Fractional_Fixed_Ops      : constant Boolean := False;
-    Frontend_Layout           : constant Boolean := False;
-    Functions_Return_By_DSP   : constant Boolean := False;
-    Machine_Overflows         : constant Boolean := False;
-    Machine_Rounds            : constant Boolean := True;
-    OpenVMS                   : constant Boolean := False;
-    Signed_Zeros              : constant Boolean := True;
-    Stack_Check_Default       : constant Boolean := False;
-    Stack_Check_Probes        : constant Boolean := False;
-    Support_64_Bit_Divides    : constant Boolean := True;
-    Support_Aggregates        : constant Boolean := True;
-    Support_Composite_Assign  : constant Boolean := True;
-    Support_Composite_Compare : constant Boolean := True;
-    Support_Long_Shifts       : constant Boolean := True;
-    Suppress_Standard_Library : constant Boolean := False;
-    Use_Ada_Main_Program_Name : constant Boolean := True;
-    ZCX_By_Default            : constant Boolean := False;
-    GCC_ZCX_Support           : constant Boolean := False;
-    Front_End_ZCX_Support     : constant Boolean := False;
- 
-    --  Obsolete entries, to be removed eventually (bootstrap issues!)
- 
-    High_Integrity_Mode       : constant Boolean := False;
-    Long_Shifts_Inlined       : constant Boolean := False;
- 
- end System;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5dsystem.ads gcc-4.0.0/gcc/ada/5dsystem.ads
*** gcc-3.4.3/gcc/ada/5dsystem.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/5dsystem.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,158 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                        GNAT RUN-TIME COMPONENTS                          --
- --                                                                          --
- --                               S Y S T E M                                --
- --                                                                          --
- --                                 S p e c                                  --
- --                         (VxWorks Version Xscale)                         --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the  contents of the part following the private keyword. --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- package System is
- pragma Pure (System);
- --  Note that we take advantage of the implementation permission to
- --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
- 
-    type Name is (SYSTEM_NAME_GNAT);
-    System_Name : constant Name := SYSTEM_NAME_GNAT;
- 
-    --  System-Dependent Named Numbers
- 
-    Min_Int               : constant := Long_Long_Integer'First;
-    Max_Int               : constant := Long_Long_Integer'Last;
- 
-    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
-    Max_Nonbinary_Modulus : constant := Integer'Last;
- 
-    Max_Base_Digits       : constant := Long_Long_Float'Digits;
-    Max_Digits            : constant := Long_Long_Float'Digits;
- 
-    Max_Mantissa          : constant := 63;
-    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
- 
-    Tick                  : constant := 1.0 / 60.0;
- 
-    --  Storage-related Declarations
- 
-    type Address is private;
-    Null_Address : constant Address;
- 
-    Storage_Unit : constant := 8;
-    Word_Size    : constant := 32;
-    Memory_Size  : constant := 2 ** 32;
- 
-    --  Address comparison
- 
-    function "<"  (Left, Right : Address) return Boolean;
-    function "<=" (Left, Right : Address) return Boolean;
-    function ">"  (Left, Right : Address) return Boolean;
-    function ">=" (Left, Right : Address) return Boolean;
-    function "="  (Left, Right : Address) return Boolean;
- 
-    pragma Import (Intrinsic, "<");
-    pragma Import (Intrinsic, "<=");
-    pragma Import (Intrinsic, ">");
-    pragma Import (Intrinsic, ">=");
-    pragma Import (Intrinsic, "=");
- 
-    --  Other System-Dependent Declarations
- 
-    type Bit_Order is (High_Order_First, Low_Order_First);
-    Default_Bit_Order : constant Bit_Order := Low_Order_First;
- 
-    --  Priority-related Declarations (RM D.1)
- 
-    --  256        is reserved for the VxWorks kernel
-    --  248 - 255  correspond to hardware interrupt levels 0 .. 7
-    --  247        is a catchall default "interrupt" priority for signals,
-    --             allowing higher priority than normal tasks, but lower than
-    --             hardware priority levels.  Protected Object ceilings can
-    --             override these values.
-    --  246        is used by the Interrupt_Manager task
- 
-    Max_Priority           : constant Positive := 245;
-    Max_Interrupt_Priority : constant Positive := 255;
- 
-    subtype Any_Priority       is Integer      range   0 .. 255;
-    subtype Priority           is Any_Priority range   0 .. 245;
-    subtype Interrupt_Priority is Any_Priority range 246 .. 255;
- 
-    Default_Priority : constant Priority := 122;
- 
- private
- 
-    type Address is mod Memory_Size;
-    Null_Address : constant Address := 0;
- 
-    --------------------------------------
-    -- System Implementation Parameters --
-    --------------------------------------
- 
-    --  These parameters provide information about the target that is used
-    --  by the compiler. They are in the private part of System, where they
-    --  can be accessed using the special circuitry in the Targparm unit
-    --  whose source should be consulted for more detailed descriptions
-    --  of the individual switch values.
- 
-    AAMP                      : constant Boolean := False;
-    Backend_Divide_Checks     : constant Boolean := False;
-    Backend_Overflow_Checks   : constant Boolean := False;
-    Command_Line_Args         : constant Boolean := False;
-    Configurable_Run_Time     : constant Boolean := False;
-    Denorm                    : constant Boolean := True;
-    Duration_32_Bits          : constant Boolean := False;
-    Exit_Status_Supported     : constant Boolean := True;
-    Fractional_Fixed_Ops      : constant Boolean := False;
-    Frontend_Layout           : constant Boolean := False;
-    Functions_Return_By_DSP   : constant Boolean := False;
-    Machine_Overflows         : constant Boolean := False;
-    Machine_Rounds            : constant Boolean := True;
-    OpenVMS                   : constant Boolean := False;
-    Signed_Zeros              : constant Boolean := True;
-    Stack_Check_Default       : constant Boolean := False;
-    Stack_Check_Probes        : constant Boolean := False;
-    Support_64_Bit_Divides    : constant Boolean := True;
-    Support_Aggregates        : constant Boolean := True;
-    Support_Composite_Assign  : constant Boolean := True;
-    Support_Composite_Compare : constant Boolean := True;
-    Support_Long_Shifts       : constant Boolean := True;
-    Suppress_Standard_Library : constant Boolean := False;
-    Use_Ada_Main_Program_Name : constant Boolean := True;
-    ZCX_By_Default            : constant Boolean := False;
-    GCC_ZCX_Support           : constant Boolean := False;
-    Front_End_ZCX_Support     : constant Boolean := False;
- 
-    --  Obsolete entries, to be removed eventually (bootstrap issues!)
- 
-    High_Integrity_Mode       : constant Boolean := False;
-    Long_Shifts_Inlined       : constant Boolean := False;
- 
- end System;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5esystem.ads gcc-4.0.0/gcc/ada/5esystem.ads
*** gcc-3.4.3/gcc/ada/5esystem.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/5esystem.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,150 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                        GNAT RUN-TIME COMPONENTS                          --
- --                                                                          --
- --                               S Y S T E M                                --
- --                                                                          --
- --                                 S p e c                                  --
- --                          (x86 Solaris Version)                           --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the  contents of the part following the private keyword. --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- package System is
- pragma Pure (System);
- --  Note that we take advantage of the implementation permission to
- --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
- 
-    type Name is (SYSTEM_NAME_GNAT);
-    System_Name : constant Name := SYSTEM_NAME_GNAT;
- 
-    --  System-Dependent Named Numbers
- 
-    Min_Int               : constant := Long_Long_Integer'First;
-    Max_Int               : constant := Long_Long_Integer'Last;
- 
-    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
-    Max_Nonbinary_Modulus : constant := Integer'Last;
- 
-    Max_Base_Digits       : constant := Long_Long_Float'Digits;
-    Max_Digits            : constant := Long_Long_Float'Digits;
- 
-    Max_Mantissa          : constant := 63;
-    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
- 
-    Tick                  : constant := 0.01;
- 
-    --  Storage-related Declarations
- 
-    type Address is private;
-    Null_Address : constant Address;
- 
-    Storage_Unit : constant := 8;
-    Word_Size    : constant := 32;
-    Memory_Size  : constant := 2 ** 32;
- 
-    --  Address comparison
- 
-    function "<"  (Left, Right : Address) return Boolean;
-    function "<=" (Left, Right : Address) return Boolean;
-    function ">"  (Left, Right : Address) return Boolean;
-    function ">=" (Left, Right : Address) return Boolean;
-    function "="  (Left, Right : Address) return Boolean;
- 
-    pragma Import (Intrinsic, "<");
-    pragma Import (Intrinsic, "<=");
-    pragma Import (Intrinsic, ">");
-    pragma Import (Intrinsic, ">=");
-    pragma Import (Intrinsic, "=");
- 
-    --  Other System-Dependent Declarations
- 
-    type Bit_Order is (High_Order_First, Low_Order_First);
-    Default_Bit_Order : constant Bit_Order := Low_Order_First;
- 
-    --  Priority-related Declarations (RM D.1)
- 
-    Max_Priority           : constant Positive := 30;
-    Max_Interrupt_Priority : constant Positive := 31;
- 
-    subtype Any_Priority       is Integer      range  0 .. 31;
-    subtype Priority           is Any_Priority range  0 .. 30;
-    subtype Interrupt_Priority is Any_Priority range 31 .. 31;
- 
-    Default_Priority : constant Priority := 15;
- 
- private
- 
-    type Address is mod Memory_Size;
-    Null_Address : constant Address := 0;
- 
-    --------------------------------------
-    -- System Implementation Parameters --
-    --------------------------------------
- 
-    --  These parameters provide information about the target that is used
-    --  by the compiler. They are in the private part of System, where they
-    --  can be accessed using the special circuitry in the Targparm unit
-    --  whose source should be consulted for more detailed descriptions
-    --  of the individual switch values.
- 
-    AAMP                      : constant Boolean := False;
-    Backend_Divide_Checks     : constant Boolean := False;
-    Backend_Overflow_Checks   : constant Boolean := False;
-    Command_Line_Args         : constant Boolean := True;
-    Configurable_Run_Time     : constant Boolean := False;
-    Denorm                    : constant Boolean := True;
-    Duration_32_Bits          : constant Boolean := False;
-    Exit_Status_Supported     : constant Boolean := True;
-    Fractional_Fixed_Ops      : constant Boolean := False;
-    Frontend_Layout           : constant Boolean := False;
-    Functions_Return_By_DSP   : constant Boolean := False;
-    Machine_Overflows         : constant Boolean := False;
-    Machine_Rounds            : constant Boolean := True;
-    OpenVMS                   : constant Boolean := False;
-    Signed_Zeros              : constant Boolean := True;
-    Stack_Check_Default       : constant Boolean := False;
-    Stack_Check_Probes        : constant Boolean := True;
-    Support_64_Bit_Divides    : constant Boolean := True;
-    Support_Aggregates        : constant Boolean := True;
-    Support_Composite_Assign  : constant Boolean := True;
-    Support_Composite_Compare : constant Boolean := True;
-    Support_Long_Shifts       : constant Boolean := True;
-    Suppress_Standard_Library : constant Boolean := False;
-    Use_Ada_Main_Program_Name : constant Boolean := False;
-    ZCX_By_Default            : constant Boolean := False;
-    GCC_ZCX_Support           : constant Boolean := False;
-    Front_End_ZCX_Support     : constant Boolean := True;
- 
-    --  Obsolete entries, to be removed eventually (bootstrap issues!)
- 
-    High_Integrity_Mode       : constant Boolean := False;
-    Long_Shifts_Inlined       : constant Boolean := True;
- 
- end System;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5fintman.adb gcc-4.0.0/gcc/ada/5fintman.adb
*** gcc-3.4.3/gcc/ada/5fintman.adb	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/5fintman.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,152 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --           S Y S T E M . I N T E R R U P T _ M A N A G E M E N T          --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --             Copyright (C) 1991-1994, Florida State University            --
- --             Copyright (C) 1995-2003, Ada Core Technologies               --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a SGI Pthread version of this package.
- 
- --  PLEASE DO NOT add any dependences on other packages.
- --  This package is designed to work with or without tasking support.
- 
- --  Make a careful study of all signals available under the OS,
- --  to see which need to be reserved, kept always unmasked,
- --  or kept always unmasked.
- --  Be on the lookout for special signals that
- --  may be used by the thread library.
- 
- with Interfaces.C;
- --  used for int
- 
- with System.OS_Interface;
- --  used for various Constants, Signal and types
- 
- package body System.Interrupt_Management is
- 
-    use System.OS_Interface;
- 
-    type Interrupt_List is array (Interrupt_ID range <>) of Interrupt_ID;
-    Exception_Interrupts : constant Interrupt_List :=
-      (SIGTSTP, SIGILL, SIGTRAP, SIGEMT, SIGFPE, SIGBUS, SIGSTOP, SIGKILL,
-       SIGSEGV, SIGSYS, SIGXCPU, SIGXFSZ, SIGPROF, SIGPTINTR, SIGPTRESCHED,
-       SIGABRT, SIGPIPE);
- 
-    ---------------------------
-    -- Initialize_Interrupts --
-    ---------------------------
- 
-    --  Nothing needs to be done on this platform
- 
-    procedure Initialize_Interrupts is
-    begin
-       null;
-    end Initialize_Interrupts;
- 
-    Unreserve_All_Interrupts : Interfaces.C.int;
-    pragma Import
-      (C, Unreserve_All_Interrupts, "__gl_unreserve_all_interrupts");
- 
-    use type Interfaces.C.int;
- 
- begin
-    declare
-       function State (Int : Interrupt_ID) return Character;
-       pragma Import (C, State, "__gnat_get_interrupt_state");
- 
-       --  Get interrupt state.  Defined in a-init.c
-       --  The input argument is the interrupt number,
-       --  and the result is one of the following:
- 
-       User    : constant Character := 'u';
-       Runtime : constant Character := 'r';
-       Default : constant Character := 's';
-       --    'n'   this interrupt not set by any Interrupt_State pragma
-       --    'u'   Interrupt_State pragma set state to User
-       --    'r'   Interrupt_State pragma set state to Runtime
-       --    's'   Interrupt_State pragma set state to System (use "default"
-       --           system handler)
- 
-    begin
-       Abort_Task_Interrupt := SIGABRT;
- 
-       --  Change this if you want to use another signal for task abort.
-       --  SIGTERM might be a good one.
- 
-       pragma Assert (Keep_Unmasked = (Interrupt_ID'Range => False));
-       pragma Assert (Reserve = (Interrupt_ID'Range => False));
- 
-       --  Process state of exception signals
- 
-       for J in Exception_Interrupts'Range loop
-          if State (Exception_Interrupts (J)) /= User then
-             Keep_Unmasked (Exception_Interrupts (J)) := True;
-             Reserve (Exception_Interrupts (J)) := True;
-          end if;
-       end loop;
- 
-       if State (Abort_Task_Interrupt) /= User then
-          Keep_Unmasked (Abort_Task_Interrupt) := True;
-          Reserve (Abort_Task_Interrupt) := True;
-       end if;
- 
-       --  Set SIGINT to unmasked state as long as it's
-       --  not in "User" state.  Check for Unreserve_All_Interrupts last
- 
-       if State (SIGINT) /= User then
-          Keep_Unmasked (SIGINT) := True;
-       end if;
- 
-       --  Check all signals for state that requires keeping them
-       --  unmasked and reserved
- 
-       for J in Interrupt_ID'Range loop
-          if State (J) = Default or else State (J) = Runtime then
-             Keep_Unmasked (J) := True;
-             Reserve (J) := True;
-          end if;
-       end loop;
- 
-       --  Process pragma Unreserve_All_Interrupts. This overrides any
-       --  settings due to pragma Interrupt_State:
- 
-       if Unreserve_All_Interrupts /= 0 then
-          Keep_Unmasked (SIGINT) := False;
-          Reserve (SIGINT) := False;
-       end if;
- 
-       --  We do not have Signal 0 in reality. We just use this value
-       --  to identify not existing signals (see s-intnam.ads). Therefore,
-       --  Signal 0 should not be used in all signal related operations hence
-       --  mark it as reserved.
- 
-       Reserve (0) := True;
-    end;
- end System.Interrupt_Management;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5fosinte.adb gcc-4.0.0/gcc/ada/5fosinte.adb
*** gcc-3.4.3/gcc/ada/5fosinte.adb	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/5fosinte.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,120 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   S Y S T E M . O S _ I N T E R F A C E                  --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --         Copyright (C) 1992-2002, Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the IRIX version of this package.
- 
- --  This package encapsulates all direct interfaces to OS services
- --  that are needed by children of System.
- 
- pragma Polling (Off);
- --  Turn off polling, we do not want ATC polling to take place during
- --  tasking operations. It causes infinite loops and other problems.
- 
- with Interfaces.C; use Interfaces.C;
- 
- package body System.OS_Interface is
- 
-    ------------------
-    -- pthread_init --
-    ------------------
- 
-    procedure pthread_init is
-    begin
-       null;
-    end pthread_init;
- 
-    -----------------
-    -- To_Duration --
-    -----------------
- 
-    function To_Duration (TS : timespec) return Duration is
-    begin
-       return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9;
-    end To_Duration;
- 
-    function To_Duration (TV : struct_timeval) return Duration is
-    begin
-       return Duration (TV.tv_sec) + Duration (TV.tv_usec) / 10#1#E6;
-    end To_Duration;
- 
-    -----------------
-    -- To_Timespec --
-    -----------------
- 
-    function To_Timespec (D : Duration) return timespec is
-       S : time_t;
-       F : Duration;
- 
-    begin
-       S := time_t (Long_Long_Integer (D));
-       F := D - Duration (S);
- 
-       --  If F has negative value due to a round-up, adjust for positive F
-       --  value.
- 
-       if F < 0.0 then
-          S := S - 1;
-          F := F + 1.0;
-       end if;
- 
-       return timespec'(tv_sec => S,
-                        tv_nsec => long (Long_Long_Integer (F * 10#1#E9)));
-    end To_Timespec;
- 
-    ----------------
-    -- To_Timeval --
-    ----------------
- 
-    function To_Timeval (D : Duration) return struct_timeval is
-       S : time_t;
-       F : Duration;
- 
-    begin
-       S := time_t (Long_Long_Integer (D));
-       F := D - Duration (S);
- 
-       --  If F has negative value due to a round-up, adjust for positive F
-       --  value.
- 
-       if F < 0.0 then
-          S := S - 1;
-          F := F + 1.0;
-       end if;
- 
-       return
-         struct_timeval'
-           (tv_sec => S,
-            tv_usec => time_t (Long_Long_Integer (F * 10#1#E6)));
-    end To_Timeval;
- 
- end System.OS_Interface;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5fosinte.ads gcc-4.0.0/gcc/ada/5fosinte.ads
*** gcc-3.4.3/gcc/ada/5fosinte.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/5fosinte.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,521 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   S Y S T E M . O S _ I N T E R F A C E                  --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --          Copyright (C) 1998-2001, Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the SGI Pthreads version of this package.
- 
- --  This package encapsulates all direct interfaces to OS services
- --  that are needed by children of System.
- 
- --  PLEASE DO NOT add any with-clauses to this package
- --  or remove the pragma Elaborate_Body.
- --  It is designed to be a bottom-level (leaf) package.
- 
- with Interfaces.C;
- package System.OS_Interface is
- 
-    pragma Preelaborate;
- 
-    pragma Linker_Options ("-lpthread");
- 
-    subtype int            is Interfaces.C.int;
-    subtype short          is Interfaces.C.short;
-    subtype long           is Interfaces.C.long;
-    subtype unsigned       is Interfaces.C.unsigned;
-    subtype unsigned_short is Interfaces.C.unsigned_short;
-    subtype unsigned_long  is Interfaces.C.unsigned_long;
-    subtype unsigned_char  is Interfaces.C.unsigned_char;
-    subtype plain_char     is Interfaces.C.plain_char;
-    subtype size_t         is Interfaces.C.size_t;
- 
-    -----------
-    -- Errno --
-    -----------
- 
-    function errno return int;
-    pragma Import (C, errno, "__get_errno");
- 
-    EINTR     : constant := 4;   --  interrupted system call
-    EAGAIN    : constant := 11;  --  No more processes
-    ENOMEM    : constant := 12;  --  Not enough core
-    EINVAL    : constant := 22;  --  Invalid argument
-    ETIMEDOUT : constant := 145; --  Connection timed out
- 
-    -------------
-    -- Signals --
-    -------------
- 
-    Max_Interrupt : constant := 64;
-    type Signal is new int range 0 .. Max_Interrupt;
-    for Signal'Size use int'Size;
- 
-    SIGHUP     : constant := 1; --  hangup
-    SIGINT     : constant := 2; --  interrupt (rubout)
-    SIGQUIT    : constant := 3; --  quit (ASCD FS)
-    SIGILL     : constant := 4; --  illegal instruction (not reset)
-    SIGTRAP    : constant := 5; --  trace trap (not reset)
-    SIGIOT     : constant := 6; --  IOT instruction
-    SIGABRT    : constant := 6; --  used by abort, replace SIGIOT in the
-    --                              future
-    SIGEMT     : constant := 7; --  EMT instruction
-    SIGFPE     : constant := 8; --  floating point exception
-    SIGKILL    : constant := 9; --  kill (cannot be caught or ignored)
-    SIGBUS     : constant := 10; --  bus error
-    SIGSEGV    : constant := 11; --  segmentation violation
-    SIGSYS     : constant := 12; --  bad argument to system call
-    SIGPIPE    : constant := 13; --  write on a pipe with no one to read it
-    SIGALRM    : constant := 14; --  alarm clock
-    SIGTERM    : constant := 15; --  software termination signal from kill
-    SIGUSR1    : constant := 16; --  user defined signal 1
-    SIGUSR2    : constant := 17; --  user defined signal 2
-    SIGCLD     : constant := 18; --  alias for SIGCHLD
-    SIGCHLD    : constant := 18; --  child status change
-    SIGPWR     : constant := 19; --  power-fail restart
-    SIGWINCH   : constant := 20; --  window size change
-    SIGURG     : constant := 21; --  urgent condition on IO channel
-    SIGPOLL    : constant := 22; --  pollable event occurred
-    SIGIO      : constant := 22; --  I/O possible (Solaris SIGPOLL alias)
-    SIGSTOP    : constant := 23; --  stop (cannot be caught or ignored)
-    SIGTSTP    : constant := 24; --  user stop requested from tty
-    SIGCONT    : constant := 25; --  stopped process has been continued
-    SIGTTIN    : constant := 26; --  background tty read attempted
-    SIGTTOU    : constant := 27; --  background tty write attempted
-    SIGVTALRM  : constant := 28; --  virtual timer expired
-    SIGPROF    : constant := 29; --  profiling timer expired
-    SIGXCPU    : constant := 30; --  CPU time limit exceeded
-    SIGXFSZ    : constant := 31; --  filesize limit exceeded
-    SIGK32     : constant := 32; --  reserved for kernel (IRIX)
-    SIGCKPT    : constant := 33; --  Checkpoint warning
-    SIGRESTART : constant := 34; --  Restart warning
-    SIGUME     : constant := 35; --  Uncorrectable memory error
-    --  Signals defined for Posix 1003.1c.
-    SIGPTINTR    : constant := 47;
-    SIGPTRESCHED : constant := 48;
-    --  Posix 1003.1b signals
-    SIGRTMIN   : constant := 49; --  Posix 1003.1b signals
-    SIGRTMAX   : constant := 64; --  Posix 1003.1b signals
- 
-    type sigset_t is private;
-    type sigset_t_ptr is access all sigset_t;
- 
-    function sigaddset (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigaddset, "sigaddset");
- 
-    function sigdelset (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigdelset, "sigdelset");
- 
-    function sigfillset (set : access sigset_t) return int;
-    pragma Import (C, sigfillset, "sigfillset");
- 
-    function sigismember (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigismember, "sigismember");
- 
-    function sigemptyset (set : access sigset_t) return int;
-    pragma Import (C, sigemptyset, "sigemptyset");
- 
-    type array_type_2 is array (Integer range 0 .. 1) of int;
-    type struct_sigaction is record
-       sa_flags     : int;
-       sa_handler   : System.Address;
-       sa_mask      : sigset_t;
-       sa_resv      : array_type_2;
-    end record;
-    pragma Convention (C, struct_sigaction);
- 
-    type struct_sigaction_ptr is access all struct_sigaction;
- 
-    SIG_BLOCK   : constant := 1;
-    SIG_UNBLOCK : constant := 2;
-    SIG_SETMASK : constant := 3;
- 
-    SIG_DFL : constant := 0;
-    SIG_IGN : constant := 1;
- 
-    function sigaction
-      (sig  : Signal;
-       act  : struct_sigaction_ptr;
-       oact : struct_sigaction_ptr := null) return int;
-    pragma Import (C, sigaction, "sigaction");
- 
-    ----------
-    -- Time --
-    ----------
- 
-    type timespec is private;
-    type timespec_ptr is access all timespec;
- 
-    type clockid_t is private;
- 
-    CLOCK_REALTIME  : constant clockid_t;
-    CLOCK_SGI_FAST  : constant clockid_t;
-    CLOCK_SGI_CYCLE : constant clockid_t;
- 
-    SGI_CYCLECNTR_SIZE : constant := 165;
- 
-    function syssgi (request : Interfaces.C.int) return Interfaces.C.ptrdiff_t;
-    pragma Import (C, syssgi, "syssgi");
- 
-    function clock_gettime
-      (clock_id : clockid_t;
-       tp       : access timespec) return int;
-    pragma Import (C, clock_gettime, "clock_gettime");
- 
-    function clock_getres
-      (clock_id : clockid_t;
-       tp       : access timespec) return int;
-    pragma Import (C, clock_getres, "clock_getres");
- 
-    function To_Duration (TS : timespec) return Duration;
-    pragma Inline (To_Duration);
- 
-    function To_Timespec (D : Duration) return timespec;
-    pragma Inline (To_Timespec);
- 
-    type struct_timeval is private;
- 
-    function To_Duration (TV : struct_timeval) return Duration;
-    pragma Inline (To_Duration);
- 
-    function To_Timeval (D : Duration) return struct_timeval;
-    pragma Inline (To_Timeval);
- 
-    -------------------------
-    -- Priority Scheduling --
-    -------------------------
- 
-    SCHED_FIFO  : constant := 1;
-    SCHED_RR    : constant := 2;
-    SCHED_TS    : constant := 3;
-    SCHED_OTHER : constant := 3;
-    SCHED_NP    : constant := 4;
- 
-    function sched_get_priority_min (Policy : int) return int;
-    pragma Import (C, sched_get_priority_min, "sched_get_priority_min");
- 
-    function sched_get_priority_max (Policy : int) return int;
-    pragma Import (C, sched_get_priority_max, "sched_get_priority_max");
- 
-    -------------
-    -- Process --
-    -------------
- 
-    type pid_t is private;
- 
-    function kill (pid : pid_t; sig : Signal) return int;
-    pragma Import (C, kill, "kill");
- 
-    function getpid return pid_t;
-    pragma Import (C, getpid, "getpid");
- 
-    -------------
-    -- Threads --
-    -------------
- 
-    type Thread_Body is access
-      function (arg : System.Address) return System.Address;
-    type pthread_t           is private;
-    subtype Thread_Id        is pthread_t;
- 
-    type pthread_mutex_t     is limited private;
-    type pthread_cond_t      is limited private;
-    type pthread_attr_t      is limited private;
-    type pthread_mutexattr_t is limited private;
-    type pthread_condattr_t  is limited private;
-    type pthread_key_t       is private;
- 
-    PTHREAD_CREATE_DETACHED : constant := 1;
- 
-    ---------------------------------------
-    -- Nonstandard Thread Initialization --
-    ---------------------------------------
- 
-    procedure pthread_init;
-    pragma Inline (pthread_init);
-    --  This is a dummy procedure to share some GNULLI files
- 
-    -------------------------
-    -- POSIX.1c  Section 3 --
-    -------------------------
- 
-    function sigwait
-      (set : access sigset_t;
-       sig : access Signal) return int;
-    pragma Import (C, sigwait, "sigwait");
- 
-    function pthread_kill
-      (thread : pthread_t;
-       sig    : Signal) return int;
-    pragma Import (C, pthread_kill, "pthread_kill");
- 
-    function pthread_sigmask
-      (how  : int;
-       set  : sigset_t_ptr;
-       oset : sigset_t_ptr) return int;
-    pragma Import (C, pthread_sigmask, "pthread_sigmask");
- 
-    --------------------------
-    -- POSIX.1c  Section 11 --
-    --------------------------
- 
-    function pthread_mutexattr_init
-      (attr : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
- 
-    function pthread_mutexattr_destroy
-      (attr : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
- 
-    function pthread_mutex_init
-      (mutex : access pthread_mutex_t;
-       attr  : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
- 
-    function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
- 
-    function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_mutex_lock, "pthread_mutex_lock");
- 
-    function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_mutex_unlock, "pthread_mutex_unlock");
- 
-    function pthread_condattr_init
-      (attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
- 
-    function pthread_condattr_destroy
-      (attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
- 
-    function pthread_cond_init
-      (cond : access pthread_cond_t;
-       attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_cond_init, "pthread_cond_init");
- 
-    function pthread_cond_destroy (cond : access pthread_cond_t) return int;
-    pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
- 
-    function pthread_cond_signal (cond : access pthread_cond_t) return int;
-    pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
- 
-    function pthread_cond_wait
-      (cond  : access pthread_cond_t;
-       mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_cond_wait, "pthread_cond_wait");
- 
-    function pthread_cond_timedwait
-      (cond    : access pthread_cond_t;
-       mutex   : access pthread_mutex_t;
-       abstime : access timespec) return int;
-    pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait");
- 
-    --------------------------
-    -- POSIX.1c  Section 13 --
-    --------------------------
- 
-    PTHREAD_PRIO_NONE    : constant := 0;
-    PTHREAD_PRIO_PROTECT : constant := 2;
-    PTHREAD_PRIO_INHERIT : constant := 1;
- 
-    function pthread_mutexattr_setprotocol
-      (attr     : access pthread_mutexattr_t;
-       protocol : int) return int;
-    pragma Import (C, pthread_mutexattr_setprotocol);
- 
-    function pthread_mutexattr_setprioceiling
-      (attr     : access pthread_mutexattr_t;
-       prioceiling : int) return int;
-    pragma Import (C, pthread_mutexattr_setprioceiling);
- 
-    type struct_sched_param is record
-       sched_priority : int;
-    end record;
-    pragma Convention (C, struct_sched_param);
- 
-    function pthread_setschedparam
-      (thread : pthread_t;
-       policy : int;
-       param  : access struct_sched_param)
-      return int;
-    pragma Import (C, pthread_setschedparam, "pthread_setschedparam");
- 
-    function pthread_attr_setscope
-      (attr            : access pthread_attr_t;
-       contentionscope : int) return int;
-    pragma Import (C, pthread_attr_setscope, "pthread_attr_setscope");
- 
-    function pthread_attr_setinheritsched
-      (attr         : access pthread_attr_t;
-       inheritsched : int) return int;
-    pragma Import
-      (C, pthread_attr_setinheritsched, "pthread_attr_setinheritsched");
- 
-    function pthread_attr_setschedpolicy
-      (attr   : access pthread_attr_t;
-       policy : int) return int;
-    pragma Import (C, pthread_attr_setschedpolicy);
- 
-    function pthread_attr_setschedparam
-      (attr        : access pthread_attr_t;
-       sched_param : access struct_sched_param)
-      return int;
-    pragma Import (C, pthread_attr_setschedparam, "pthread_attr_setschedparam");
- 
-    function sched_yield return int;
-    pragma Import (C, sched_yield, "sched_yield");
- 
-    ---------------------------
-    -- P1003.1c - Section 16 --
-    ---------------------------
- 
-    function pthread_attr_init (attributes : access pthread_attr_t) return int;
-    pragma Import (C, pthread_attr_init, "pthread_attr_init");
- 
-    function pthread_attr_destroy
-      (attributes : access pthread_attr_t) return int;
-    pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
- 
-    function pthread_attr_setdetachstate
-      (attr        : access pthread_attr_t;
-       detachstate : int) return int;
-    pragma Import (C, pthread_attr_setdetachstate);
- 
-    function pthread_attr_setstacksize
-      (attr      : access pthread_attr_t;
-       stacksize : size_t) return int;
-    pragma Import (C, pthread_attr_setstacksize, "pthread_attr_setstacksize");
- 
-    function pthread_create
-      (thread        : access pthread_t;
-       attributes    : access pthread_attr_t;
-       start_routine : Thread_Body;
-       arg           : System.Address) return int;
-    pragma Import (C, pthread_create, "pthread_create");
- 
-    procedure pthread_exit (status : System.Address);
-    pragma Import (C, pthread_exit, "pthread_exit");
- 
-    function pthread_self return pthread_t;
-    pragma Import (C, pthread_self, "pthread_self");
- 
-    --------------------------
-    -- POSIX.1c  Section 17 --
-    --------------------------
- 
-    function pthread_setspecific
-      (key   : pthread_key_t;
-       value : System.Address) return int;
-    pragma Import (C, pthread_setspecific, "pthread_setspecific");
- 
-    function pthread_getspecific (key : pthread_key_t) return System.Address;
-    pragma Import (C, pthread_getspecific, "pthread_getspecific");
- 
-    type destructor_pointer is access procedure (arg : System.Address);
- 
-    function pthread_key_create
-      (key        : access pthread_key_t;
-       destructor : destructor_pointer) return int;
-    pragma Import (C, pthread_key_create, "pthread_key_create");
- 
-    ---------------------------------------------------------------
-    --  Non portable SGI 6.5 additions to the pthread interface  --
-    --  must be executed from within the context of a system     --
-    --  scope task                                               --
-    ---------------------------------------------------------------
- 
-    function pthread_setrunon_np (cpu : int) return int;
-    pragma Import (C, pthread_setrunon_np, "pthread_setrunon_np");
- 
- private
- 
-    type array_type_1 is array (Integer range 0 .. 3) of unsigned;
-    type sigset_t is record
-       X_X_sigbits : array_type_1;
-    end record;
-    pragma Convention (C, sigset_t);
- 
-    type pid_t is new long;
- 
-    type time_t is new long;
- 
-    type timespec is record
-       tv_sec  : time_t;
-       tv_nsec : long;
-    end record;
-    pragma Convention (C, timespec);
- 
-    type clockid_t is new int;
-    CLOCK_REALTIME  : constant clockid_t := 1;
-    CLOCK_SGI_CYCLE : constant clockid_t := 2;
-    CLOCK_SGI_FAST  : constant clockid_t := 3;
- 
-    type struct_timeval is record
-       tv_sec  : time_t;
-       tv_usec : time_t;
-    end record;
-    pragma Convention (C, struct_timeval);
- 
-    type array_type_9 is array (Integer range 0 .. 4) of long;
-    type pthread_attr_t is record
-       X_X_D : array_type_9;
-    end record;
-    pragma Convention (C, pthread_attr_t);
- 
-    type array_type_8 is array (Integer range 0 .. 1) of long;
-    type pthread_condattr_t is record
-       X_X_D : array_type_8;
-    end record;
-    pragma Convention (C, pthread_condattr_t);
- 
-    type array_type_7 is array (Integer range 0 .. 1) of long;
-    type pthread_mutexattr_t is record
-       X_X_D : array_type_7;
-    end record;
-    pragma Convention (C, pthread_mutexattr_t);
- 
-    type pthread_t is new unsigned;
- 
-    type array_type_10 is array (Integer range 0 .. 7) of long;
-    type pthread_mutex_t is record
-       X_X_D : array_type_10;
-    end record;
-    pragma Convention (C, pthread_mutex_t);
- 
-    type array_type_11 is array (Integer range 0 .. 7) of long;
-    type pthread_cond_t is record
-       X_X_D : array_type_11;
-    end record;
-    pragma Convention (C, pthread_cond_t);
- 
-    type pthread_key_t is new int;
- 
- end System.OS_Interface;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5fsystem.ads gcc-4.0.0/gcc/ada/5fsystem.ads
*** gcc-3.4.3/gcc/ada/5fsystem.ads	Mon Jan 26 21:57:33 2004
--- gcc-4.0.0/gcc/ada/5fsystem.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,153 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                        GNAT RUN-TIME COMPONENTS                          --
- --                                                                          --
- --                               S Y S T E M                                --
- --                                                                          --
- --                                 S p e c                                  --
- --                           (SGI Irix, o32 ABI)                            --
- --                                                                          --
- --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the  contents of the part following the private keyword. --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- package System is
- pragma Pure (System);
- --  Note that we take advantage of the implementation permission to
- --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
- 
-    type Name is (SYSTEM_NAME_GNAT);
-    System_Name : constant Name := SYSTEM_NAME_GNAT;
- 
-    --  System-Dependent Named Numbers
- 
-    Min_Int               : constant := Long_Long_Integer'First;
-    Max_Int               : constant := Long_Long_Integer'Last;
- 
-    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
-    Max_Nonbinary_Modulus : constant := Integer'Last;
- 
-    Max_Base_Digits       : constant := Long_Long_Float'Digits;
-    Max_Digits            : constant := Long_Long_Float'Digits;
- 
-    Max_Mantissa          : constant := 63;
-    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
- 
-    Tick                  : constant := 0.01;
- 
-    --  Storage-related Declarations
- 
-    type Address is private;
-    Null_Address : constant Address;
- 
-    Storage_Unit : constant := 8;
-    Word_Size    : constant := 32;
-    Memory_Size  : constant := 2 ** 32;
- 
-    --  Address comparison
- 
-    function "<"  (Left, Right : Address) return Boolean;
-    function "<=" (Left, Right : Address) return Boolean;
-    function ">"  (Left, Right : Address) return Boolean;
-    function ">=" (Left, Right : Address) return Boolean;
-    function "="  (Left, Right : Address) return Boolean;
- 
-    pragma Import (Intrinsic, "<");
-    pragma Import (Intrinsic, "<=");
-    pragma Import (Intrinsic, ">");
-    pragma Import (Intrinsic, ">=");
-    pragma Import (Intrinsic, "=");
- 
-    --  Other System-Dependent Declarations
- 
-    type Bit_Order is (High_Order_First, Low_Order_First);
-    Default_Bit_Order : constant Bit_Order := High_Order_First;
- 
-    --  Priority-related Declarations (RM D.1)
- 
-    Max_Priority           : constant Positive := 30;
-    Max_Interrupt_Priority : constant Positive := 31;
- 
-    subtype Any_Priority       is Integer      range  0 .. 31;
-    subtype Priority           is Any_Priority range  0 .. 30;
-    subtype Interrupt_Priority is Any_Priority range 31 .. 31;
- 
-    Default_Priority : constant Priority := 15;
- 
- private
- 
-    type Address is mod Memory_Size;
-    Null_Address : constant Address := 0;
- 
-    --------------------------------------
-    -- System Implementation Parameters --
-    --------------------------------------
- 
-    --  These parameters provide information about the target that is used
-    --  by the compiler. They are in the private part of System, where they
-    --  can be accessed using the special circuitry in the Targparm unit
-    --  whose source should be consulted for more detailed descriptions
-    --  of the individual switch values.
- 
-    AAMP                      : constant Boolean := False;
-    Backend_Divide_Checks     : constant Boolean := False;
-    Backend_Overflow_Checks   : constant Boolean := False;
-    Command_Line_Args         : constant Boolean := True;
-    Configurable_Run_Time     : constant Boolean := False;
-    Denorm                    : constant Boolean := False;
-    Duration_32_Bits          : constant Boolean := False;
-    Exit_Status_Supported     : constant Boolean := True;
-    Fractional_Fixed_Ops      : constant Boolean := False;
-    Frontend_Layout           : constant Boolean := False;
-    Functions_Return_By_DSP   : constant Boolean := False;
-    Machine_Overflows         : constant Boolean := False;
-    Machine_Rounds            : constant Boolean := True;
-    OpenVMS                   : constant Boolean := False;
-    Signed_Zeros              : constant Boolean := True;
-    Stack_Check_Default       : constant Boolean := False;
-    Stack_Check_Probes        : constant Boolean := True;
-    Support_64_Bit_Divides    : constant Boolean := True;
-    Support_Aggregates        : constant Boolean := True;
-    Support_Composite_Assign  : constant Boolean := True;
-    Support_Composite_Compare : constant Boolean := True;
-    Support_Long_Shifts       : constant Boolean := True;
-    Suppress_Standard_Library : constant Boolean := False;
-    Use_Ada_Main_Program_Name : constant Boolean := False;
-    ZCX_By_Default            : constant Boolean := False;
-    GCC_ZCX_Support           : constant Boolean := False;
-    Front_End_ZCX_Support     : constant Boolean := False;
- 
-    --  Obsolete entries, to be removed eventually (bootstrap issues!)
- 
-    High_Integrity_Mode       : constant Boolean := False;
-    Long_Shifts_Inlined       : constant Boolean := True;
- 
-    --  Note: Denorm is False because denormals are not supported on the
-    --  R10000, and we want the code to be valid for this processor.
- 
- end System;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5ftaprop.adb gcc-4.0.0/gcc/ada/5ftaprop.adb
*** gcc-3.4.3/gcc/ada/5ftaprop.adb	Mon Jan  5 15:20:42 2004
--- gcc-4.0.0/gcc/ada/5ftaprop.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,1141 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --     S Y S T E M . T A S K _ P R I M I T I V E S . O P E R A T I O N S    --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --         Copyright (C) 1992-2003, Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a IRIX (pthread library) version of this package
- 
- --  This package contains all the GNULL primitives that interface directly
- --  with the underlying OS.
- 
- pragma Polling (Off);
- --  Turn off polling, we do not want ATC polling to take place during
- --  tasking operations. It causes infinite loops and other problems.
- 
- with Interfaces.C;
- --  used for int
- --           size_t
- 
- with System.Task_Info;
- 
- with System.Tasking.Debug;
- --  used for Known_Tasks
- 
- with System.IO;
- --  used for Put_Line
- 
- with System.Interrupt_Management;
- --  used for Keep_Unmasked
- --           Abort_Task_Interrupt
- --           Interrupt_ID
- 
- with System.Interrupt_Management.Operations;
- --  used for Set_Interrupt_Mask
- --           All_Tasks_Mask
- pragma Elaborate_All (System.Interrupt_Management.Operations);
- 
- with System.Parameters;
- --  used for Size_Type
- 
- with System.Tasking;
- --  used for Ada_Task_Control_Block
- --           Task_ID
- 
- with System.Soft_Links;
- --  used for Defer/Undefer_Abort
- 
- --  Note that we do not use System.Tasking.Initialization directly since
- --  this is a higher level package that we shouldn't depend on. For example
- --  when using the restricted run time, it is replaced by
- --  System.Tasking.Restricted.Initialization
- 
- with System.Program_Info;
- --  used for Default_Task_Stack
- --           Default_Time_Slice
- --           Stack_Guard_Pages
- --           Pthread_Sched_Signal
- --           Pthread_Arena_Size
- 
- with System.OS_Interface;
- --  used for various type, constant, and operations
- 
- with System.OS_Primitives;
- --  used for Delay_Modes
- 
- with Unchecked_Conversion;
- with Unchecked_Deallocation;
- 
- package body System.Task_Primitives.Operations is
- 
-    use System.Tasking;
-    use System.Tasking.Debug;
-    use Interfaces.C;
-    use System.OS_Interface;
-    use System.OS_Primitives;
-    use System.Parameters;
- 
-    package SSL renames System.Soft_Links;
- 
-    ------------------
-    --  Local Data  --
-    ------------------
- 
-    --  The followings are logically constants, but need to be initialized
-    --  at run time.
- 
-    Single_RTS_Lock : aliased RTS_Lock;
-    --  This is a lock to allow only one thread of control in the RTS at
-    --  a time; it is used to execute in mutual exclusion from all other tasks.
-    --  Used mainly in Single_Lock mode, but also to protect All_Tasks_List
- 
-    ATCB_Key : aliased pthread_key_t;
-    --  Key used to find the Ada Task_ID associated with a thread
- 
-    Environment_Task_ID : Task_ID;
-    --  A variable to hold Task_ID for the environment task.
- 
-    Locking_Policy : Character;
-    pragma Import (C, Locking_Policy, "__gl_locking_policy");
- 
-    Real_Time_Clock_Id : constant clockid_t := CLOCK_REALTIME;
- 
-    Unblocked_Signal_Mask : aliased sigset_t;
- 
-    Foreign_Task_Elaborated : aliased Boolean := True;
-    --  Used to identified fake tasks (i.e., non-Ada Threads).
- 
-    --------------------
-    -- Local Packages --
-    --------------------
- 
-    package Specific is
- 
-       procedure Initialize (Environment_Task : Task_ID);
-       pragma Inline (Initialize);
-       --  Initialize various data needed by this package.
- 
-       function Is_Valid_Task return Boolean;
-       pragma Inline (Is_Valid_Task);
-       --  Does executing thread have a TCB?
- 
-       procedure Set (Self_Id : Task_ID);
-       pragma Inline (Set);
-       --  Set the self id for the current task.
- 
-       function Self return Task_ID;
-       pragma Inline (Self);
-       --  Return a pointer to the Ada Task Control Block of the calling task.
- 
-    end Specific;
- 
-    package body Specific is separate;
-    --  The body of this package is target specific.
- 
-    ---------------------------------
-    -- Support for foreign threads --
-    ---------------------------------
- 
-    function Register_Foreign_Thread (Thread : Thread_Id) return Task_ID;
-    --  Allocate and Initialize a new ATCB for the current Thread.
- 
-    function Register_Foreign_Thread
-      (Thread : Thread_Id) return Task_ID is separate;
- 
-    -----------------------
-    -- Local Subprograms --
-    -----------------------
- 
-    function To_Address is new Unchecked_Conversion (Task_ID, System.Address);
- 
-    procedure Abort_Handler (Sig : Signal);
-    --  Signal handler used to implement asynchronous abort.
- 
-    -------------------
-    -- Abort_Handler --
-    -------------------
- 
-    procedure Abort_Handler (Sig : Signal) is
-       pragma Unreferenced (Sig);
- 
-       T       : constant Task_ID := Self;
-       Result  : Interfaces.C.int;
-       Old_Set : aliased sigset_t;
- 
-    begin
-       --  It is not safe to raise an exception when using ZCX and the GCC
-       --  exception handling mechanism.
- 
-       if ZCX_By_Default and then GCC_ZCX_Support then
-          return;
-       end if;
- 
-       if T.Deferral_Level = 0
-         and then T.Pending_ATC_Level < T.ATC_Nesting_Level
-       then
-          --  Make sure signals used for RTS internal purpose are unmasked
- 
-          Result := pthread_sigmask
-            (SIG_UNBLOCK,
-             Unblocked_Signal_Mask'Unchecked_Access,
-             Old_Set'Unchecked_Access);
-          pragma Assert (Result = 0);
- 
-          raise Standard'Abort_Signal;
-       end if;
-    end Abort_Handler;
- 
-    -----------------
-    -- Stack_Guard --
-    -----------------
- 
-    --  The underlying thread system sets a guard page at the
-    --  bottom of a thread stack, so nothing is needed.
- 
-    procedure Stack_Guard (T : ST.Task_ID; On : Boolean) is
-       pragma Unreferenced (On);
-       pragma Unreferenced (T);
-    begin
-       null;
-    end Stack_Guard;
- 
-    -------------------
-    -- Get_Thread_Id --
-    -------------------
- 
-    function Get_Thread_Id (T : ST.Task_ID) return OSI.Thread_Id is
-    begin
-       return T.Common.LL.Thread;
-    end Get_Thread_Id;
- 
-    ----------
-    -- Self --
-    ----------
- 
-    function Self return Task_ID renames Specific.Self;
- 
-    ---------------------
-    -- Initialize_Lock --
-    ---------------------
- 
-    --  Note: mutexes and cond_variables needed per-task basis are
-    --        initialized in Initialize_TCB and the Storage_Error is
-    --        handled. Other mutexes (such as RTS_Lock, Memory_Lock...)
-    --        used in RTS is initialized before any status change of RTS.
-    --        Therefore rasing Storage_Error in the following routines
-    --        should be able to be handled safely.
- 
-    procedure Initialize_Lock
-      (Prio : System.Any_Priority;
-       L    : access Lock)
-    is
-       Attributes : aliased pthread_mutexattr_t;
-       Result     : Interfaces.C.int;
- 
-    begin
-       Result := pthread_mutexattr_init (Attributes'Access);
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result = ENOMEM then
-          raise Storage_Error;
-       end if;
- 
-       if Locking_Policy = 'C' then
-          Result := pthread_mutexattr_setprotocol
-            (Attributes'Access, PTHREAD_PRIO_PROTECT);
-          pragma Assert (Result = 0);
- 
-          Result := pthread_mutexattr_setprioceiling
-             (Attributes'Access, Interfaces.C.int (Prio));
-          pragma Assert (Result = 0);
-       end if;
- 
-       Result := pthread_mutex_init (L, Attributes'Access);
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result = ENOMEM then
-          Result := pthread_mutexattr_destroy (Attributes'Access);
-          raise Storage_Error;
-       end if;
- 
-       Result := pthread_mutexattr_destroy (Attributes'Access);
-       pragma Assert (Result = 0);
-    end Initialize_Lock;
- 
-    procedure Initialize_Lock (L : access RTS_Lock; Level : Lock_Level) is
-       pragma Unreferenced (Level);
- 
-       Attributes : aliased pthread_mutexattr_t;
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := pthread_mutexattr_init (Attributes'Access);
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result = ENOMEM then
-          raise Storage_Error;
-       end if;
- 
-       if Locking_Policy = 'C' then
-          Result := pthread_mutexattr_setprotocol
-            (Attributes'Access, PTHREAD_PRIO_PROTECT);
-          pragma Assert (Result = 0);
- 
-          Result := pthread_mutexattr_setprioceiling
-             (Attributes'Access, Interfaces.C.int (System.Any_Priority'Last));
-          pragma Assert (Result = 0);
-       end if;
- 
-       Result := pthread_mutex_init (L, Attributes'Access);
- 
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result = ENOMEM then
-          Result := pthread_mutexattr_destroy (Attributes'Access);
-          raise Storage_Error;
-       end if;
- 
-       Result := pthread_mutexattr_destroy (Attributes'Access);
-    end Initialize_Lock;
- 
-    -------------------
-    -- Finalize_Lock --
-    -------------------
- 
-    procedure Finalize_Lock (L : access Lock) is
-       Result : Interfaces.C.int;
-    begin
-       Result := pthread_mutex_destroy (L);
-       pragma Assert (Result = 0);
-    end Finalize_Lock;
- 
-    procedure Finalize_Lock (L : access RTS_Lock) is
-       Result : Interfaces.C.int;
-    begin
-       Result := pthread_mutex_destroy (L);
-       pragma Assert (Result = 0);
-    end Finalize_Lock;
- 
-    ----------------
-    -- Write_Lock --
-    ----------------
- 
-    procedure Write_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
-       Result : Interfaces.C.int;
-    begin
-       Result := pthread_mutex_lock (L);
-       Ceiling_Violation := Result = EINVAL;
- 
-       --  Assumes the cause of EINVAL is a priority ceiling violation
- 
-       pragma Assert (Result = 0 or else Result = EINVAL);
-    end Write_Lock;
- 
-    procedure Write_Lock
-      (L           : access RTS_Lock;
-       Global_Lock : Boolean := False)
-    is
-       Result : Interfaces.C.int;
-    begin
-       if not Single_Lock or else Global_Lock then
-          Result := pthread_mutex_lock (L);
-          pragma Assert (Result = 0);
-       end if;
-    end Write_Lock;
- 
-    procedure Write_Lock (T : Task_ID) is
-       Result : Interfaces.C.int;
-    begin
-       if not Single_Lock then
-          Result := pthread_mutex_lock (T.Common.LL.L'Access);
-          pragma Assert (Result = 0);
-       end if;
-    end Write_Lock;
- 
-    ---------------
-    -- Read_Lock --
-    ---------------
- 
-    procedure Read_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
-    begin
-       Write_Lock (L, Ceiling_Violation);
-    end Read_Lock;
- 
-    ------------
-    -- Unlock --
-    ------------
- 
-    procedure Unlock (L : access Lock) is
-       Result : Interfaces.C.int;
-    begin
-       Result := pthread_mutex_unlock (L);
-       pragma Assert (Result = 0);
-    end Unlock;
- 
-    procedure Unlock (L : access RTS_Lock; Global_Lock : Boolean := False) is
-       Result : Interfaces.C.int;
- 
-    begin
-       if not Single_Lock or else Global_Lock then
-          Result := pthread_mutex_unlock (L);
-          pragma Assert (Result = 0);
-       end if;
-    end Unlock;
- 
-    procedure Unlock (T : Task_ID) is
-       Result : Interfaces.C.int;
- 
-    begin
-       if not Single_Lock then
-          Result := pthread_mutex_unlock (T.Common.LL.L'Access);
-          pragma Assert (Result = 0);
-       end if;
-    end Unlock;
- 
-    -----------
-    -- Sleep --
-    -----------
- 
-    procedure Sleep
-      (Self_ID : ST.Task_ID;
-       Reason  : System.Tasking.Task_States)
-    is
-       pragma Unreferenced (Reason);
- 
-       Result : Interfaces.C.int;
- 
-    begin
-       if Single_Lock then
-          Result := pthread_cond_wait
-            (Self_ID.Common.LL.CV'Access, Single_RTS_Lock'Access);
-       else
-          Result := pthread_cond_wait
-            (Self_ID.Common.LL.CV'Access, Self_ID.Common.LL.L'Access);
-       end if;
- 
-       --  EINTR is not considered a failure.
- 
-       pragma Assert (Result = 0 or else Result = EINTR);
-    end Sleep;
- 
-    -----------------
-    -- Timed_Sleep --
-    -----------------
- 
-    procedure Timed_Sleep
-      (Self_ID  : Task_ID;
-       Time     : Duration;
-       Mode     : ST.Delay_Modes;
-       Reason   : Task_States;
-       Timedout : out Boolean;
-       Yielded  : out Boolean)
-    is
-       pragma Unreferenced (Reason);
- 
-       Check_Time : constant Duration := Monotonic_Clock;
-       Abs_Time   : Duration;
-       Request    : aliased timespec;
-       Result     : Interfaces.C.int;
- 
-    begin
-       Timedout := True;
-       Yielded  := False;
- 
-       if Mode = Relative then
-          Abs_Time := Duration'Min (Time, Max_Sensible_Delay) + Check_Time;
-       else
-          Abs_Time := Duration'Min (Check_Time + Max_Sensible_Delay, Time);
-       end if;
- 
-       if Abs_Time > Check_Time then
-          Request := To_Timespec (Abs_Time);
- 
-          loop
-             exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level
-               or else Self_ID.Pending_Priority_Change;
- 
-             if Single_Lock then
-                Result := pthread_cond_timedwait
-                  (Self_ID.Common.LL.CV'Access, Single_RTS_Lock'Access,
-                   Request'Access);
- 
-             else
-                Result := pthread_cond_timedwait
-                  (Self_ID.Common.LL.CV'Access, Self_ID.Common.LL.L'Access,
-                   Request'Access);
-             end if;
- 
-             exit when Abs_Time <= Monotonic_Clock;
- 
-             if Result = 0 or else errno = EINTR then
-                Timedout := False;
-                exit;
-             end if;
-          end loop;
-       end if;
-    end Timed_Sleep;
- 
-    -----------------
-    -- Timed_Delay --
-    -----------------
- 
-    --  This is for use in implementing delay statements, so
-    --  we assume the caller is abort-deferred but is holding
-    --  no locks.
- 
-    procedure Timed_Delay
-      (Self_ID : Task_ID;
-       Time    : Duration;
-       Mode    : ST.Delay_Modes)
-    is
-       Check_Time : constant Duration := Monotonic_Clock;
-       Abs_Time   : Duration;
-       Request    : aliased timespec;
-       Result     : Interfaces.C.int;
- 
-    begin
-       --  Only the little window between deferring abort and
-       --  locking Self_ID is the reason we need to
-       --  check for pending abort and priority change below! :(
- 
-       SSL.Abort_Defer.all;
- 
-       if Single_Lock then
-          Lock_RTS;
-       end if;
- 
-       Write_Lock (Self_ID);
- 
-       if Mode = Relative then
-          Abs_Time := Time + Check_Time;
-       else
-          Abs_Time := Duration'Min (Check_Time + Max_Sensible_Delay, Time);
-       end if;
- 
-       if Abs_Time > Check_Time then
-          Request := To_Timespec (Abs_Time);
-          Self_ID.Common.State := Delay_Sleep;
- 
-          loop
-             if Self_ID.Pending_Priority_Change then
-                Self_ID.Pending_Priority_Change := False;
-                Self_ID.Common.Base_Priority := Self_ID.New_Base_Priority;
-                Set_Priority (Self_ID, Self_ID.Common.Base_Priority);
-             end if;
- 
-             exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level;
- 
-             Result := pthread_cond_timedwait (Self_ID.Common.LL.CV'Access,
-               Self_ID.Common.LL.L'Access, Request'Access);
-             exit when Abs_Time <= Monotonic_Clock;
- 
-             pragma Assert (Result = 0
-               or else Result = ETIMEDOUT
-               or else Result = EINTR);
-          end loop;
- 
-          Self_ID.Common.State := Runnable;
-       end if;
- 
-       Unlock (Self_ID);
- 
-       if Single_Lock then
-          Unlock_RTS;
-       end if;
- 
-       Yield;
-       SSL.Abort_Undefer.all;
-    end Timed_Delay;
- 
-    ---------------------
-    -- Monotonic_Clock --
-    ---------------------
- 
-    function Monotonic_Clock return Duration is
-       TS     : aliased timespec;
-       Result : Interfaces.C.int;
-    begin
-       Result := clock_gettime (Real_Time_Clock_Id, TS'Unchecked_Access);
-       pragma Assert (Result = 0);
-       return To_Duration (TS);
-    end Monotonic_Clock;
- 
-    -------------------
-    -- RT_Resolution --
-    -------------------
- 
-    function RT_Resolution return Duration is
-    begin
-       --  The clock_getres (Real_Time_Clock_Id) function appears to return
-       --  the interrupt resolution of the realtime clock and not the actual
-       --  resolution of reading the clock. Even though this last value is
-       --  only guaranteed to be 100 Hz, at least the Origin 200 appears to
-       --  have a microsecond resolution or better.
-       --  ??? We should figure out a method to return the right value on
-       --  all SGI hardware.
- 
-       return 0.000_001; --  Assume microsecond resolution of clock
-    end RT_Resolution;
- 
-    ------------
-    -- Wakeup --
-    ------------
- 
-    procedure Wakeup (T : ST.Task_ID; Reason : System.Tasking.Task_States) is
-       pragma Unreferenced (Reason);
-       Result : Interfaces.C.int;
-    begin
-       Result := pthread_cond_signal (T.Common.LL.CV'Access);
-       pragma Assert (Result = 0);
-    end Wakeup;
- 
-    -----------
-    -- Yield --
-    -----------
- 
-    procedure Yield (Do_Yield : Boolean := True) is
-       Result : Interfaces.C.int;
-       pragma Unreferenced (Result);
-    begin
-       if Do_Yield then
-          Result := sched_yield;
-       end if;
-    end Yield;
- 
-    ------------------
-    -- Set_Priority --
-    ------------------
- 
-    procedure Set_Priority
-      (T                   : Task_ID;
-       Prio                : System.Any_Priority;
-       Loss_Of_Inheritance : Boolean := False)
-    is
-       pragma Unreferenced (Loss_Of_Inheritance);
- 
-       Result       : Interfaces.C.int;
-       Param        : aliased struct_sched_param;
-       Sched_Policy : Interfaces.C.int;
- 
-       use type System.Task_Info.Task_Info_Type;
- 
-       function To_Int is new Unchecked_Conversion
-         (System.Task_Info.Thread_Scheduling_Policy, Interfaces.C.int);
- 
-    begin
-       T.Common.Current_Priority := Prio;
-       Param.sched_priority := Interfaces.C.int (Prio);
- 
-       if T.Common.Task_Info /= null then
-          Sched_Policy := To_Int (T.Common.Task_Info.Policy);
-       else
-          Sched_Policy := SCHED_FIFO;
-       end if;
- 
-       Result := pthread_setschedparam (T.Common.LL.Thread, Sched_Policy,
-         Param'Access);
-       pragma Assert (Result = 0);
-    end Set_Priority;
- 
-    ------------------
-    -- Get_Priority --
-    ------------------
- 
-    function Get_Priority (T : Task_ID) return System.Any_Priority is
-    begin
-       return T.Common.Current_Priority;
-    end Get_Priority;
- 
-    ----------------
-    -- Enter_Task --
-    ----------------
- 
-    procedure Enter_Task (Self_ID : Task_ID) is
-       Result : Interfaces.C.int;
- 
-       function To_Int is new Unchecked_Conversion
-         (System.Task_Info.CPU_Number, Interfaces.C.int);
- 
-       use System.Task_Info;
- 
-    begin
-       Self_ID.Common.LL.Thread := pthread_self;
-       Specific.Set (Self_ID);
- 
-       if Self_ID.Common.Task_Info /= null
-         and then Self_ID.Common.Task_Info.Scope = PTHREAD_SCOPE_SYSTEM
-         and then Self_ID.Common.Task_Info.Runon_CPU /= ANY_CPU
-       then
-          Result := pthread_setrunon_np
-            (To_Int (Self_ID.Common.Task_Info.Runon_CPU));
-          pragma Assert (Result = 0);
-       end if;
- 
-       Lock_RTS;
- 
-       for J in Known_Tasks'Range loop
-          if Known_Tasks (J) = null then
-             Known_Tasks (J) := Self_ID;
-             Self_ID.Known_Tasks_Index := J;
-             exit;
-          end if;
-       end loop;
- 
-       Unlock_RTS;
-    end Enter_Task;
- 
-    --------------
-    -- New_ATCB --
-    --------------
- 
-    function New_ATCB (Entry_Num : Task_Entry_Index) return Task_ID is
-    begin
-       return new Ada_Task_Control_Block (Entry_Num);
-    end New_ATCB;
- 
-    -------------------
-    -- Is_Valid_Task --
-    -------------------
- 
-    function Is_Valid_Task return Boolean renames Specific.Is_Valid_Task;
- 
-    -----------------------------
-    -- Register_Foreign_Thread --
-    -----------------------------
- 
-    function Register_Foreign_Thread return Task_ID is
-    begin
-       if Is_Valid_Task then
-          return Self;
-       else
-          return Register_Foreign_Thread (pthread_self);
-       end if;
-    end Register_Foreign_Thread;
- 
-    --------------------
-    -- Initialize_TCB --
-    --------------------
- 
-    procedure Initialize_TCB (Self_ID : Task_ID; Succeeded : out Boolean) is
-       Result    : Interfaces.C.int;
-       Cond_Attr : aliased pthread_condattr_t;
- 
-    begin
-       if not Single_Lock then
-          Initialize_Lock (Self_ID.Common.LL.L'Access, ATCB_Level);
-       end if;
- 
-       Result := pthread_condattr_init (Cond_Attr'Access);
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result = 0 then
-          Result := pthread_cond_init (Self_ID.Common.LL.CV'Access,
-            Cond_Attr'Access);
-          pragma Assert (Result = 0 or else Result = ENOMEM);
-       end if;
- 
-       if Result = 0 then
-          Succeeded := True;
-       else
-          if not Single_Lock then
-             Result := pthread_mutex_destroy (Self_ID.Common.LL.L'Access);
-             pragma Assert (Result = 0);
-          end if;
- 
-          Succeeded := False;
-       end if;
- 
-       Result := pthread_condattr_destroy (Cond_Attr'Access);
-       pragma Assert (Result = 0);
-    end Initialize_TCB;
- 
-    -----------------
-    -- Create_Task --
-    -----------------
- 
-    procedure Create_Task
-      (T          : Task_ID;
-       Wrapper    : System.Address;
-       Stack_Size : System.Parameters.Size_Type;
-       Priority   : System.Any_Priority;
-       Succeeded  : out Boolean)
-    is
-       use System.Task_Info;
- 
-       Attributes          : aliased pthread_attr_t;
-       Sched_Param         : aliased struct_sched_param;
-       Adjusted_Stack_Size : Interfaces.C.size_t;
-       Result              : Interfaces.C.int;
- 
-       function Thread_Body_Access is new
-         Unchecked_Conversion (System.Address, Thread_Body);
- 
-       function To_Int is new Unchecked_Conversion
-         (System.Task_Info.Thread_Scheduling_Scope, Interfaces.C.int);
-       function To_Int is new Unchecked_Conversion
-         (System.Task_Info.Thread_Scheduling_Inheritance, Interfaces.C.int);
-       function To_Int is new Unchecked_Conversion
-         (System.Task_Info.Thread_Scheduling_Policy, Interfaces.C.int);
- 
-    begin
-       if Stack_Size = System.Parameters.Unspecified_Size then
-          Adjusted_Stack_Size :=
-            Interfaces.C.size_t (System.Program_Info.Default_Task_Stack);
- 
-       elsif Stack_Size < Size_Type (Minimum_Stack_Size) then
-          Adjusted_Stack_Size :=
-            Interfaces.C.size_t (Minimum_Stack_Size);
- 
-       else
-          Adjusted_Stack_Size := Interfaces.C.size_t (Stack_Size);
-       end if;
- 
-       Result := pthread_attr_init (Attributes'Access);
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result /= 0 then
-          Succeeded := False;
-          return;
-       end if;
- 
-       Result := pthread_attr_setdetachstate
-         (Attributes'Access, PTHREAD_CREATE_DETACHED);
-       pragma Assert (Result = 0);
- 
-       Result := pthread_attr_setstacksize
-         (Attributes'Access, Adjusted_Stack_Size);
-       pragma Assert (Result = 0);
- 
-       if T.Common.Task_Info /= null then
-          Result := pthread_attr_setscope
-            (Attributes'Access, To_Int (T.Common.Task_Info.Scope));
-          pragma Assert (Result = 0);
- 
-          Result := pthread_attr_setinheritsched
-            (Attributes'Access, To_Int (T.Common.Task_Info.Inheritance));
-          pragma Assert (Result = 0);
- 
-          Result := pthread_attr_setschedpolicy
-            (Attributes'Access, To_Int (T.Common.Task_Info.Policy));
-          pragma Assert (Result = 0);
- 
-          Sched_Param.sched_priority :=
-            Interfaces.C.int (T.Common.Task_Info.Priority);
- 
-          Result := pthread_attr_setschedparam
-            (Attributes'Access, Sched_Param'Access);
-          pragma Assert (Result = 0);
-       end if;
- 
-       --  Since the initial signal mask of a thread is inherited from the
-       --  creator, and the Environment task has all its signals masked, we
-       --  do not need to manipulate caller's signal mask at this point.
-       --  All tasks in RTS will have All_Tasks_Mask initially.
- 
-       Result := pthread_create
-         (T.Common.LL.Thread'Access,
-          Attributes'Access,
-          Thread_Body_Access (Wrapper),
-          To_Address (T));
- 
-       if Result /= 0
-         and then T.Common.Task_Info /= null
-         and then T.Common.Task_Info.Scope = PTHREAD_SCOPE_SYSTEM
-       then
-          --  The pthread_create call may have failed because we
-          --  asked for a system scope pthread and none were
-          --  available (probably because the program was not executed
-          --  by the superuser). Let's try for a process scope pthread
-          --  instead of raising Tasking_Error.
- 
-          System.IO.Put_Line
-            ("Request for PTHREAD_SCOPE_SYSTEM in Task_Info pragma for task");
-          System.IO.Put ("""");
-          System.IO.Put (T.Common.Task_Image (1 .. T.Common.Task_Image_Len));
-          System.IO.Put_Line (""" could not be honored. ");
-          System.IO.Put_Line ("Scope changed to PTHREAD_SCOPE_PROCESS");
- 
-          T.Common.Task_Info.Scope := PTHREAD_SCOPE_PROCESS;
-          Result := pthread_attr_setscope
-            (Attributes'Access, To_Int (T.Common.Task_Info.Scope));
-          pragma Assert (Result = 0);
- 
-          Result := pthread_create
-            (T.Common.LL.Thread'Access,
-             Attributes'Access,
-             Thread_Body_Access (Wrapper),
-             To_Address (T));
-       end if;
- 
-       pragma Assert (Result = 0 or else Result = EAGAIN);
- 
-       Succeeded := Result = 0;
- 
-       --  The following needs significant commenting ???
- 
-       if T.Common.Task_Info /= null then
-          T.Common.Base_Priority := T.Common.Task_Info.Priority;
-          Set_Priority (T, T.Common.Task_Info.Priority);
-       else
-          Set_Priority (T, Priority);
-       end if;
- 
-       Result := pthread_attr_destroy (Attributes'Access);
-       pragma Assert (Result = 0);
-    end Create_Task;
- 
-    ------------------
-    -- Finalize_TCB --
-    ------------------
- 
-    procedure Finalize_TCB (T : Task_ID) is
-       Result : Interfaces.C.int;
-       Tmp    : Task_ID := T;
-       Is_Self : constant Boolean := T = Self;
- 
-       procedure Free is new
-         Unchecked_Deallocation (Ada_Task_Control_Block, Task_ID);
- 
-    begin
-       if not Single_Lock then
-          Result := pthread_mutex_destroy (T.Common.LL.L'Access);
-          pragma Assert (Result = 0);
-       end if;
- 
-       Result := pthread_cond_destroy (T.Common.LL.CV'Access);
-       pragma Assert (Result = 0);
- 
-       if T.Known_Tasks_Index /= -1 then
-          Known_Tasks (T.Known_Tasks_Index) := null;
-       end if;
- 
-       Free (Tmp);
- 
-       if Is_Self then
-          Result := pthread_setspecific (ATCB_Key, System.Null_Address);
-          pragma Assert (Result = 0);
-       end if;
- 
-    end Finalize_TCB;
- 
-    ---------------
-    -- Exit_Task --
-    ---------------
- 
-    procedure Exit_Task is
-    begin
-       Specific.Set (null);
-    end Exit_Task;
- 
-    ----------------
-    -- Abort_Task --
-    ----------------
- 
-    procedure Abort_Task (T : Task_ID) is
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := pthread_kill (T.Common.LL.Thread,
-         Signal (System.Interrupt_Management.Abort_Task_Interrupt));
-       pragma Assert (Result = 0);
-    end Abort_Task;
- 
-    ----------------
-    -- Check_Exit --
-    ----------------
- 
-    --  Dummy version
- 
-    function Check_Exit (Self_ID : ST.Task_ID) return Boolean is
-       pragma Unreferenced (Self_ID);
- 
-    begin
-       return True;
-    end Check_Exit;
- 
-    --------------------
-    -- Check_No_Locks --
-    --------------------
- 
-    function Check_No_Locks (Self_ID : ST.Task_ID) return Boolean is
-       pragma Unreferenced (Self_ID);
- 
-    begin
-       return True;
-    end Check_No_Locks;
- 
-    ----------------------
-    -- Environment_Task --
-    ----------------------
- 
-    function Environment_Task return Task_ID is
-    begin
-       return Environment_Task_ID;
-    end Environment_Task;
- 
-    --------------
-    -- Lock_RTS --
-    --------------
- 
-    procedure Lock_RTS is
-    begin
-       Write_Lock (Single_RTS_Lock'Access, Global_Lock => True);
-    end Lock_RTS;
- 
-    ----------------
-    -- Unlock_RTS --
-    ----------------
- 
-    procedure Unlock_RTS is
-    begin
-       Unlock (Single_RTS_Lock'Access, Global_Lock => True);
-    end Unlock_RTS;
- 
-    ------------------
-    -- Suspend_Task --
-    ------------------
- 
-    function Suspend_Task
-      (T           : ST.Task_ID;
-       Thread_Self : Thread_Id)
-       return        Boolean
-    is
-       pragma Unreferenced (T);
-       pragma Unreferenced (Thread_Self);
- 
-    begin
-       return False;
-    end Suspend_Task;
- 
-    -----------------
-    -- Resume_Task --
-    -----------------
- 
-    function Resume_Task
-      (T           : ST.Task_ID;
-       Thread_Self : Thread_Id)
-       return        Boolean
-    is
-       pragma Unreferenced (T);
-       pragma Unreferenced (Thread_Self);
- 
-    begin
-       return False;
-    end Resume_Task;
- 
-    ----------------
-    -- Initialize --
-    ----------------
- 
-    procedure Initialize (Environment_Task : Task_ID) is
-       act     : aliased struct_sigaction;
-       old_act : aliased struct_sigaction;
-       Tmp_Set : aliased sigset_t;
-       Result  : Interfaces.C.int;
- 
-       function State (Int : System.Interrupt_Management.Interrupt_ID)
-                      return Character;
-       pragma Import (C, State, "__gnat_get_interrupt_state");
-       --  Get interrupt state. Defined in a-init.c. The input argument is
-       --  the interrupt number, and the result is one of the following:
- 
-       Default : constant Character := 's';
-       --    'n'   this interrupt not set by any Interrupt_State pragma
-       --    'u'   Interrupt_State pragma set state to User
-       --    'r'   Interrupt_State pragma set state to Runtime
-       --    's'   Interrupt_State pragma set state to System (use "default"
-       --           system handler)
- 
-    begin
-       Environment_Task_ID := Environment_Task;
- 
-       --  Initialize the lock used to synchronize chain of all ATCBs.
- 
-       Initialize_Lock (Single_RTS_Lock'Access, RTS_Lock_Level);
- 
-       Specific.Initialize (Environment_Task);
- 
-       Enter_Task (Environment_Task);
- 
-       --  Install the abort-signal handler
- 
-       if State (System.Interrupt_Management.Abort_Task_Interrupt)
-                                                         /= Default
-       then
-          act.sa_flags := 0;
-          act.sa_handler := Abort_Handler'Address;
- 
-          Result := sigemptyset (Tmp_Set'Access);
-          pragma Assert (Result = 0);
-          act.sa_mask := Tmp_Set;
- 
-          Result :=
-            sigaction (
-              Signal (System.Interrupt_Management.Abort_Task_Interrupt),
-              act'Unchecked_Access,
-              old_act'Unchecked_Access);
-          pragma Assert (Result = 0);
-       end if;
-    end Initialize;
- 
- begin
-    declare
-       Result : Interfaces.C.int;
- 
-    begin
-       --  Mask Environment task for all signals. The original mask of the
-       --  Environment task will be recovered by Interrupt_Server task
-       --  during the elaboration of s-interr.adb.
- 
-       System.Interrupt_Management.Operations.Set_Interrupt_Mask
-         (System.Interrupt_Management.Operations.All_Tasks_Mask'Access);
- 
-       --  Prepare the set of signals that should unblocked in all tasks
- 
-       Result := sigemptyset (Unblocked_Signal_Mask'Access);
-       pragma Assert (Result = 0);
- 
-       for J in Interrupt_Management.Interrupt_ID loop
-          if System.Interrupt_Management.Keep_Unmasked (J) then
-             Result := sigaddset (Unblocked_Signal_Mask'Access, Signal (J));
-             pragma Assert (Result = 0);
-          end if;
-       end loop;
- 
-       --  Pick the highest resolution Clock for Clock_Realtime
-       --  ??? This code currently doesn't work (see c94007[ab] for example)
-       --
-       --  if syssgi (SGI_CYCLECNTR_SIZE) = 64 then
-       --     Real_Time_Clock_Id := CLOCK_SGI_CYCLE;
-       --  else
-       --     Real_Time_Clock_Id := CLOCK_REALTIME;
-       --  end if;
-    end;
- end System.Task_Primitives.Operations;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5ftasinf.ads gcc-4.0.0/gcc/ada/5ftasinf.ads
*** gcc-3.4.3/gcc/ada/5ftasinf.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/5ftasinf.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,136 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                     S Y S T E M . T A S K _ I N F O                      --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package contains the definitions and routines associated with the
- --  implementation and use of the Task_Info pragma. It is specialized
- --  appropriately for targets that make use of this pragma.
- 
- --  Note: the compiler generates direct calls to this interface, via Rtsfind.
- --  Any changes to this interface may require corresponding compiler changes.
- 
- --  This unit may be used directly from an application program by providing
- --  an appropriate WITH, and the interface can be expected to remain stable.
- 
- --  This is the IRIX (kernel threads) version of this package
- 
- with Interfaces.C;
- with System.OS_Interface;
- 
- package System.Task_Info is
-    pragma Elaborate_Body;
-    --  To ensure that a body is allowed
- 
-    package OSI renames System.OS_Interface;
- 
-    -----------------------------------------
-    -- Implementation of Task_Info Feature --
-    -----------------------------------------
- 
-    --  Pragma Task_Info allows an application to set the underlying
-    --  pthread scheduling attributes for a specific task.
- 
-    ------------------
-    -- Declarations --
-    ------------------
- 
-    type Thread_Scheduling_Scope is
-      (PTHREAD_SCOPE_PROCESS, PTHREAD_SCOPE_SYSTEM);
- 
-    for Thread_Scheduling_Scope'Size use Interfaces.C.int'Size;
- 
-    type Thread_Scheduling_Inheritance is
-       (PTHREAD_EXPLICIT_SCHED, PTHREAD_INHERIT_SCHED);
- 
-    for Thread_Scheduling_Inheritance'Size use Interfaces.C.int'Size;
- 
-    type Thread_Scheduling_Policy is
-       (SCHED_FIFO,   --  The first-in-first-out real-time policy
-        SCHED_RR,     --  The round-robin real-time scheduling policy
-        SCHED_TS);    --  The timeshare earnings based scheduling policy
- 
-    for Thread_Scheduling_Policy'Size use Interfaces.C.int'Size;
-    for Thread_Scheduling_Policy use
-       (SCHED_FIFO => 1,
-        SCHED_RR   => 2,
-        SCHED_TS   => 3);
- 
-    function SCHED_OTHER return Thread_Scheduling_Policy renames SCHED_TS;
- 
-    No_Specified_Priority : constant := -1;
- 
-    subtype Thread_Scheduling_Priority is Integer range
-      No_Specified_Priority .. 255;
- 
-    function Min (Policy : Interfaces.C.int) return Interfaces.C.int
-      renames OSI.sched_get_priority_min;
- 
-    function Max (Policy : Interfaces.C.int) return Interfaces.C.int
-      renames OSI.sched_get_priority_max;
- 
-    subtype FIFO_Priority is Thread_Scheduling_Priority range
-       Thread_Scheduling_Priority (Min (OSI.SCHED_FIFO)) ..
-       Thread_Scheduling_Priority (Max (OSI.SCHED_FIFO));
- 
-    subtype RR_Priority is Thread_Scheduling_Priority range
-       Thread_Scheduling_Priority (Min (OSI.SCHED_RR)) ..
-       Thread_Scheduling_Priority (Max (OSI.SCHED_RR));
- 
-    subtype TS_Priority is Thread_Scheduling_Priority range
-       Thread_Scheduling_Priority (Min (OSI.SCHED_TS)) ..
-       Thread_Scheduling_Priority (Max (OSI.SCHED_TS));
- 
-    subtype OTHER_Priority is Thread_Scheduling_Priority range
-       Thread_Scheduling_Priority (Min (OSI.SCHED_OTHER)) ..
-       Thread_Scheduling_Priority (Max (OSI.SCHED_OTHER));
- 
-    subtype CPU_Number is Integer range -1 .. Integer'Last;
-    ANY_CPU : constant CPU_Number := CPU_Number'First;
- 
-    type Thread_Attributes is record
-       Scope       : Thread_Scheduling_Scope       := PTHREAD_SCOPE_PROCESS;
-       Inheritance : Thread_Scheduling_Inheritance := PTHREAD_EXPLICIT_SCHED;
-       Policy      : Thread_Scheduling_Policy      := SCHED_RR;
-       Priority    : Thread_Scheduling_Priority    := No_Specified_Priority;
-       Runon_CPU   : CPU_Number                    := ANY_CPU;
-    end record;
- 
-    Default_Thread_Attributes : constant Thread_Attributes :=
-      (PTHREAD_SCOPE_PROCESS, PTHREAD_EXPLICIT_SCHED, SCHED_RR,
-        No_Specified_Priority, ANY_CPU);
- 
-    type Task_Info_Type is access all Thread_Attributes;
- 
-    Unspecified_Task_Info : constant Task_Info_Type := null;
-    --  Value passed to task in the absence of a Task_Info pragma
- 
- end System.Task_Info;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5ginterr.adb gcc-4.0.0/gcc/ada/5ginterr.adb
*** gcc-3.4.3/gcc/ada/5ginterr.adb	Mon Jan  5 15:20:42 2004
--- gcc-4.0.0/gcc/ada/5ginterr.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,682 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                     S Y S T E M . I N T E R R U P T S                    --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --              Copyright (C) 1998-2003 Free Software Fundation             --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the IRIX & NT version of this package.
- 
- with Ada.Task_Identification;
- --  used for Task_Id
- 
- with Ada.Exceptions;
- --  used for Raise_Exception
- 
- with System.OS_Interface;
- --  used for intr_attach
- 
- with System.Storage_Elements;
- --  used for To_Address
- --           To_Integer
- 
- with System.Task_Primitives.Operations;
- --  used for Self
- --           Sleep
- --           Wakeup
- --           Write_Lock
- --           Unlock
- 
- with System.Tasking.Utilities;
- --  used for Make_Independent
- 
- with System.Tasking.Rendezvous;
- --  used for Call_Simple
- 
- with System.Tasking.Initialization;
- --  used for Defer_Abort
- --           Undefer_Abort
- 
- with System.Interrupt_Management;
- 
- with System.Parameters;
- --  used for Single_Lock
- 
- with Interfaces.C;
- --  used for int
- 
- with Unchecked_Conversion;
- 
- package body System.Interrupts is
- 
-    use Parameters;
-    use Tasking;
-    use Ada.Exceptions;
-    use System.OS_Interface;
-    use Interfaces.C;
- 
-    package STPO renames System.Task_Primitives.Operations;
-    package IMNG renames System.Interrupt_Management;
- 
-    subtype int is Interfaces.C.int;
- 
-    function To_System is new Unchecked_Conversion
-      (Ada.Task_Identification.Task_Id, Task_ID);
- 
-    type Handler_Kind is (Unknown, Task_Entry, Protected_Procedure);
- 
-    type Handler_Desc is record
-       Kind   : Handler_Kind := Unknown;
-       T      : Task_ID;
-       E      : Task_Entry_Index;
-       H      : Parameterless_Handler;
-       Static : Boolean := False;
-    end record;
- 
-    task type Server_Task (Interrupt : Interrupt_ID) is
-       pragma Interrupt_Priority (System.Interrupt_Priority'Last);
-    end Server_Task;
- 
-    type Server_Task_Access is access Server_Task;
- 
-    Attached_Interrupts : array (Interrupt_ID) of Boolean;
-    Handlers            : array (Interrupt_ID) of Task_ID;
-    Descriptors         : array (Interrupt_ID) of Handler_Desc;
-    Interrupt_Count     : array (Interrupt_ID) of Integer := (others => 0);
- 
-    pragma Volatile_Components (Interrupt_Count);
- 
-    procedure Attach_Handler
-      (New_Handler : Parameterless_Handler;
-       Interrupt   : Interrupt_ID;
-       Static      : Boolean;
-       Restoration : Boolean);
-    --  This internal procedure is needed to finalize protected objects
-    --  that contain interrupt handlers.
- 
-    procedure Signal_Handler (Sig : Interrupt_ID);
-    --  This procedure is used to handle all the signals.
- 
-    --  Type and Head, Tail of the list containing Registered Interrupt
-    --  Handlers. These definitions are used to register the handlers
-    --  specified by the pragma Interrupt_Handler.
- 
-    --
-    --  Handler Registration:
-    --
- 
-    type Registered_Handler;
-    type R_Link is access all Registered_Handler;
- 
-    type Registered_Handler is record
-       H    : System.Address := System.Null_Address;
-       Next : R_Link := null;
-    end record;
- 
-    Registered_Handlers : R_Link := null;
- 
-    function Is_Registered (Handler : Parameterless_Handler) return Boolean;
-    --  See if the Handler has been "pragma"ed using Interrupt_Handler.
-    --  Always consider a null handler as registered.
- 
-    type Handler_Ptr is access procedure (Sig : Interrupt_ID);
- 
-    function TISR is new Unchecked_Conversion (Handler_Ptr, isr_address);
- 
-    procedure Signal_Handler (Sig : Interrupt_ID) is
-       Handler : Task_ID renames Handlers (Sig);
-    begin
-       if Intr_Attach_Reset and then
-         intr_attach (int (Sig), TISR (Signal_Handler'Access)) = FUNC_ERR
-       then
-          raise Program_Error;
-       end if;
- 
-       if Handler /= null then
-          Interrupt_Count (Sig) := Interrupt_Count (Sig) + 1;
-          STPO.Wakeup (Handler, Interrupt_Server_Idle_Sleep);
-       end if;
-    end Signal_Handler;
- 
-    -----------------
-    -- Is_Reserved --
-    -----------------
- 
-    function Is_Reserved (Interrupt : Interrupt_ID) return Boolean is
-    begin
-       return IMNG.Reserve (IMNG.Interrupt_ID (Interrupt));
-    end Is_Reserved;
- 
-    -----------------------
-    -- Is_Entry_Attached --
-    -----------------------
- 
-    function Is_Entry_Attached (Interrupt : Interrupt_ID) return Boolean is
-    begin
-       if Is_Reserved (Interrupt) then
-          Raise_Exception (Program_Error'Identity, "Interrupt" &
-            Interrupt_ID'Image (Interrupt) & " is reserved");
-       end if;
- 
-       return Descriptors (Interrupt).T /= Null_Task;
-    end Is_Entry_Attached;
- 
-    -------------------------
-    -- Is_Handler_Attached --
-    -------------------------
- 
-    function Is_Handler_Attached (Interrupt : Interrupt_ID) return Boolean is
-    begin
-       if Is_Reserved (Interrupt) then
-          Raise_Exception (Program_Error'Identity, "Interrupt" &
-            Interrupt_ID'Image (Interrupt) & " is reserved");
-       end if;
- 
-       return Descriptors (Interrupt).Kind /= Unknown;
-    end Is_Handler_Attached;
- 
-    ----------------
-    -- Is_Ignored --
-    ----------------
- 
-    function Is_Ignored (Interrupt : Interrupt_ID) return Boolean is
-    begin
-       raise Program_Error;
-       return False;
-    end Is_Ignored;
- 
-    ------------------
-    -- Unblocked_By --
-    ------------------
- 
-    function Unblocked_By (Interrupt : Interrupt_ID) return Task_ID is
-    begin
-       raise Program_Error;
-       return Null_Task;
-    end Unblocked_By;
- 
-    ----------------------
-    -- Ignore_Interrupt --
-    ----------------------
- 
-    procedure Ignore_Interrupt (Interrupt : Interrupt_ID) is
-    begin
-       raise Program_Error;
-    end Ignore_Interrupt;
- 
-    ------------------------
-    -- Unignore_Interrupt --
-    ------------------------
- 
-    procedure Unignore_Interrupt (Interrupt : Interrupt_ID) is
-    begin
-       raise Program_Error;
-    end Unignore_Interrupt;
- 
-    -------------------------------------
-    -- Has_Interrupt_Or_Attach_Handler --
-    -------------------------------------
- 
-    function Has_Interrupt_Or_Attach_Handler
-      (Object : access Dynamic_Interrupt_Protection) return Boolean
-    is
-       pragma Unreferenced (Object);
-    begin
-       return True;
-    end Has_Interrupt_Or_Attach_Handler;
- 
-    ----------------
-    --  Finalize  --
-    ----------------
- 
-    procedure Finalize (Object : in out Static_Interrupt_Protection) is
-    begin
-       --  ??? loop to be executed only when we're not doing library level
-       --  finalization, since in this case all interrupt tasks are gone.
- 
-       for N in reverse Object.Previous_Handlers'Range loop
-          Attach_Handler
-            (New_Handler => Object.Previous_Handlers (N).Handler,
-             Interrupt   => Object.Previous_Handlers (N).Interrupt,
-             Static      => Object.Previous_Handlers (N).Static,
-             Restoration => True);
-       end loop;
- 
-       Tasking.Protected_Objects.Entries.Finalize
-         (Tasking.Protected_Objects.Entries.Protection_Entries (Object));
-    end Finalize;
- 
-    -------------------------------------
-    -- Has_Interrupt_Or_Attach_Handler --
-    -------------------------------------
- 
-    function Has_Interrupt_Or_Attach_Handler
-      (Object : access Static_Interrupt_Protection) return Boolean
-    is
-       pragma Unreferenced (Object);
-    begin
-       return True;
-    end Has_Interrupt_Or_Attach_Handler;
- 
-    ----------------------
-    -- Install_Handlers --
-    ----------------------
- 
-    procedure Install_Handlers
-      (Object       : access Static_Interrupt_Protection;
-       New_Handlers : New_Handler_Array)
-    is
-    begin
-       for N in New_Handlers'Range loop
- 
-          --  We need a lock around this ???
- 
-          Object.Previous_Handlers (N).Interrupt := New_Handlers (N).Interrupt;
-          Object.Previous_Handlers (N).Static    := Descriptors
-            (New_Handlers (N).Interrupt).Static;
- 
-          --  We call Exchange_Handler and not directly Interrupt_Manager.
-          --  Exchange_Handler so we get the Is_Reserved check.
- 
-          Exchange_Handler
-            (Old_Handler => Object.Previous_Handlers (N).Handler,
-             New_Handler => New_Handlers (N).Handler,
-             Interrupt   => New_Handlers (N).Interrupt,
-             Static      => True);
-       end loop;
-    end Install_Handlers;
- 
-    ---------------------
-    -- Current_Handler --
-    ---------------------
- 
-    function Current_Handler
-      (Interrupt : Interrupt_ID) return Parameterless_Handler
-    is
-    begin
-       if Is_Reserved (Interrupt) then
-          raise Program_Error;
-       end if;
- 
-       if Descriptors (Interrupt).Kind = Protected_Procedure then
-          return Descriptors (Interrupt).H;
-       else
-          return null;
-       end if;
-    end Current_Handler;
- 
-    --------------------
-    -- Attach_Handler --
-    --------------------
- 
-    procedure Attach_Handler
-      (New_Handler : Parameterless_Handler;
-       Interrupt   : Interrupt_ID;
-       Static      : Boolean := False) is
-    begin
-       Attach_Handler (New_Handler, Interrupt, Static, False);
-    end Attach_Handler;
- 
-    procedure Attach_Handler
-      (New_Handler : Parameterless_Handler;
-       Interrupt   : Interrupt_ID;
-       Static      : Boolean;
-       Restoration : Boolean)
-    is
-       New_Task : Server_Task_Access;
- 
-    begin
-       if Is_Reserved (Interrupt) then
-          raise Program_Error;
-       end if;
- 
-       if not Restoration and then not Static
- 
-          --  Tries to overwrite a static Interrupt Handler with a
-          --  dynamic Handler
- 
-         and then (Descriptors (Interrupt).Static
- 
-                      --  The new handler is not specified as an
-                      --  Interrupt Handler by a pragma.
- 
-                      or else not Is_Registered (New_Handler))
-       then
-          Raise_Exception (Program_Error'Identity,
-            "Trying to overwrite a static Interrupt Handler with a " &
-            "dynamic Handler");
-       end if;
- 
-       if Handlers (Interrupt) = null then
-          New_Task := new Server_Task (Interrupt);
-          Handlers (Interrupt) := To_System (New_Task.all'Identity);
-       end if;
- 
-       if intr_attach (int (Interrupt),
-         TISR (Signal_Handler'Access)) = FUNC_ERR
-       then
-          raise Program_Error;
-       end if;
- 
-       if New_Handler = null then
- 
-          --  The null handler means we are detaching the handler.
- 
-          Attached_Interrupts (Interrupt) := False;
-          Descriptors (Interrupt) :=
-            (Kind => Unknown, T => null, E => 0, H => null, Static => False);
- 
-       else
-          Descriptors (Interrupt).Kind := Protected_Procedure;
-          Descriptors (Interrupt).H := New_Handler;
-          Descriptors (Interrupt).Static := Static;
-          Attached_Interrupts (Interrupt) := True;
-       end if;
-    end Attach_Handler;
- 
-    ----------------------
-    -- Exchange_Handler --
-    ----------------------
- 
-    procedure Exchange_Handler
-      (Old_Handler : out Parameterless_Handler;
-       New_Handler : Parameterless_Handler;
-       Interrupt   : Interrupt_ID;
-       Static      : Boolean := False) is
-    begin
-       if Is_Reserved (Interrupt) then
-          raise Program_Error;
-       end if;
- 
-       if Descriptors (Interrupt).Kind = Task_Entry then
- 
-          --  In case we have an Interrupt Entry already installed.
-          --  raise a program error. (propagate it to the caller).
- 
-          Raise_Exception (Program_Error'Identity,
-            "An interrupt is already installed");
-       end if;
- 
-       Old_Handler := Current_Handler (Interrupt);
-       Attach_Handler (New_Handler, Interrupt, Static);
-    end Exchange_Handler;
- 
-    --------------------
-    -- Detach_Handler --
-    --------------------
- 
-    procedure Detach_Handler
-      (Interrupt : Interrupt_ID;
-       Static    : Boolean := False) is
-    begin
-       if Is_Reserved (Interrupt) then
-          raise Program_Error;
-       end if;
- 
-       if Descriptors (Interrupt).Kind = Task_Entry then
-          Raise_Exception (Program_Error'Identity,
-            "Trying to detach an Interrupt Entry");
-       end if;
- 
-       if not Static and then Descriptors (Interrupt).Static then
-          Raise_Exception (Program_Error'Identity,
-            "Trying to detach a static Interrupt Handler");
-       end if;
- 
-       Attached_Interrupts (Interrupt) := False;
-       Descriptors (Interrupt) :=
-         (Kind => Unknown, T => null, E => 0, H => null, Static => False);
- 
-       if intr_attach (int (Interrupt), null) = FUNC_ERR then
-          raise Program_Error;
-       end if;
-    end Detach_Handler;
- 
-    ---------------
-    -- Reference --
-    ---------------
- 
-    function Reference (Interrupt : Interrupt_ID) return System.Address is
-       Signal : constant System.Address :=
-                  System.Storage_Elements.To_Address
-                    (System.Storage_Elements.Integer_Address (Interrupt));
- 
-    begin
-       if Is_Reserved (Interrupt) then
- 
-          --  Only usable Interrupts can be used for binding it to an Entry
- 
-          raise Program_Error;
-       end if;
- 
-       return Signal;
-    end Reference;
- 
-    --------------------------------
-    -- Register_Interrupt_Handler --
-    --------------------------------
- 
-    procedure Register_Interrupt_Handler (Handler_Addr : System.Address) is
-    begin
-       Registered_Handlers :=
-        new Registered_Handler'(H => Handler_Addr, Next => Registered_Handlers);
-    end Register_Interrupt_Handler;
- 
-    -------------------
-    -- Is_Registered --
-    -------------------
- 
-    --  See if the Handler has been "pragma"ed using Interrupt_Handler.
-    --  Always consider a null handler as registered.
- 
-    function Is_Registered (Handler : Parameterless_Handler) return Boolean is
-       Ptr : R_Link := Registered_Handlers;
- 
-       type Fat_Ptr is record
-          Object_Addr  : System.Address;
-          Handler_Addr : System.Address;
-       end record;
- 
-       function To_Fat_Ptr is new Unchecked_Conversion
-         (Parameterless_Handler, Fat_Ptr);
- 
-       Fat : Fat_Ptr;
- 
-    begin
-       if Handler = null then
-          return True;
-       end if;
- 
-       Fat := To_Fat_Ptr (Handler);
- 
-       while Ptr /= null loop
- 
-          if Ptr.H = Fat.Handler_Addr then
-             return True;
-          end if;
- 
-          Ptr := Ptr.Next;
-       end loop;
- 
-       return False;
-    end Is_Registered;
- 
-    -----------------------------
-    -- Bind_Interrupt_To_Entry --
-    -----------------------------
- 
-    procedure Bind_Interrupt_To_Entry
-      (T       : Task_ID;
-       E       : Task_Entry_Index;
-       Int_Ref : System.Address)
-    is
-       Interrupt   : constant Interrupt_ID :=
-         Interrupt_ID (Storage_Elements.To_Integer (Int_Ref));
- 
-       New_Task : Server_Task_Access;
- 
-    begin
-       if Is_Reserved (Interrupt) then
-          raise Program_Error;
-       end if;
- 
-       if Descriptors (Interrupt).Kind /= Unknown then
-          Raise_Exception (Program_Error'Identity,
-            "A binding for this interrupt is already present");
-       end if;
- 
-       if Handlers (Interrupt) = null then
-          New_Task := new Server_Task (Interrupt);
-          Handlers (Interrupt) := To_System (New_Task.all'Identity);
-       end if;
- 
-       if intr_attach (int (Interrupt),
-         TISR (Signal_Handler'Access)) = FUNC_ERR
-       then
-          raise Program_Error;
-       end if;
- 
-       Descriptors (Interrupt).Kind := Task_Entry;
-       Descriptors (Interrupt).T := T;
-       Descriptors (Interrupt).E := E;
- 
-       --  Indicate the attachment of Interrupt Entry in ATCB.
-       --  This is need so that when an Interrupt Entry task terminates
-       --  the binding can be cleaned. The call to unbinding must be
-       --  make by the task before it terminates.
- 
-       T.Interrupt_Entry := True;
- 
-       Attached_Interrupts (Interrupt) := True;
-    end Bind_Interrupt_To_Entry;
- 
-    ------------------------------
-    -- Detach_Interrupt_Entries --
-    ------------------------------
- 
-    procedure Detach_Interrupt_Entries (T : Task_ID) is
-    begin
-       for I in Interrupt_ID loop
-          if not Is_Reserved (I) then
-             if Descriptors (I).Kind = Task_Entry and then
-               Descriptors (I).T = T then
-                Attached_Interrupts (I) := False;
-                Descriptors (I).Kind := Unknown;
- 
-                if intr_attach (int (I), null) = FUNC_ERR then
-                   raise Program_Error;
-                end if;
-             end if;
-          end if;
-       end loop;
- 
-       --  Indicate in ATCB that no Interrupt Entries are attached.
- 
-       T.Interrupt_Entry := True;
-    end Detach_Interrupt_Entries;
- 
-    ---------------------
-    -- Block_Interrupt --
-    ---------------------
- 
-    procedure Block_Interrupt (Interrupt : Interrupt_ID) is
-    begin
-       raise Program_Error;
-    end Block_Interrupt;
- 
-    -----------------------
-    -- Unblock_Interrupt --
-    -----------------------
- 
-    procedure Unblock_Interrupt (Interrupt : Interrupt_ID) is
-    begin
-       raise Program_Error;
-    end Unblock_Interrupt;
- 
-    ----------------
-    -- Is_Blocked --
-    ----------------
- 
-    function Is_Blocked (Interrupt : Interrupt_ID) return Boolean is
-    begin
-       raise Program_Error;
-       return False;
-    end Is_Blocked;
- 
-    task body Server_Task is
-       Desc    : Handler_Desc renames Descriptors (Interrupt);
-       Self_Id : Task_ID := STPO.Self;
-       Temp    : Parameterless_Handler;
- 
-    begin
-       Utilities.Make_Independent;
- 
-       loop
-          while Interrupt_Count (Interrupt) > 0 loop
-             Interrupt_Count (Interrupt) := Interrupt_Count (Interrupt) - 1;
-             begin
-                case Desc.Kind is
-                   when Unknown =>
-                      null;
-                   when Task_Entry =>
-                      Rendezvous.Call_Simple (Desc.T, Desc.E, Null_Address);
-                   when Protected_Procedure =>
-                      Temp := Desc.H;
-                      Temp.all;
-                end case;
-             exception
-                when others => null;
-             end;
-          end loop;
- 
-          Initialization.Defer_Abort (Self_Id);
- 
-          if Single_Lock then
-             STPO.Lock_RTS;
-          end if;
- 
-          STPO.Write_Lock (Self_Id);
-          Self_Id.Common.State := Interrupt_Server_Idle_Sleep;
-          STPO.Sleep (Self_Id, Interrupt_Server_Idle_Sleep);
-          Self_Id.Common.State := Runnable;
-          STPO.Unlock (Self_Id);
- 
-          if Single_Lock then
-             STPO.Unlock_RTS;
-          end if;
- 
-          Initialization.Undefer_Abort (Self_Id);
- 
-          --  Undefer abort here to allow a window for this task
-          --  to be aborted  at the time of system shutdown.
- 
-       end loop;
-    end Server_Task;
- 
- end System.Interrupts;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5gintman.adb gcc-4.0.0/gcc/ada/5gintman.adb
*** gcc-3.4.3/gcc/ada/5gintman.adb	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/5gintman.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,184 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
- --                                                                          --
- --           S Y S T E M . I N T E R R U P T _ M A N A G E M E N T          --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --             Copyright (C) 1991-1994, Florida State University            --
- --             Copyright (C) 1995-2003, Ada Core Technologies               --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is an Irix (old pthread library) version of this package.
- 
- --  PLEASE DO NOT add any dependences on other packages.
- --  This package is designed to work with or without tasking support.
- 
- --  Make a careful study of all signals available under the OS,
- --  to see which need to be reserved, kept always unmasked,
- --  or kept always unmasked.
- 
- --  Be on the lookout for special signals that
- --  may be used by the thread library.
- 
- with System.OS_Interface;
- --  used for various Constants, Signal and types
- 
- with Interfaces.C;
- --  used for "int"
- package body System.Interrupt_Management is
- 
-    use System.OS_Interface;
- 
-    type Interrupt_List is array (Interrupt_ID range <>) of Interrupt_ID;
- 
-    Exception_Interrupts : constant Interrupt_List :=
-      (SIGILL,
-       SIGABRT,
-       SIGFPE,
-       SIGSEGV,
-       SIGBUS);
- 
-    Reserved_Interrupts : constant Interrupt_List :=
-      (0,
-       SIGTRAP,
-       SIGKILL,
-       SIGSYS,
-       SIGALRM,
-       SIGSTOP,
-       SIGPTINTR,
-       SIGPTRESCHED);
- 
-    Abort_Signal : constant := 48;
-    --
-    --  Serious MOJO:  The SGI pthreads library only supports the
-    --                 unnamed signal number 48 for pthread_kill!
-    --
- 
-    Unreserve_All_Interrupts : Interfaces.C.int;
-    pragma Import
-      (C, Unreserve_All_Interrupts, "__gl_unreserve_all_interrupts");
- 
-    ----------------------
-    -- Notify_Exception --
-    ----------------------
- 
-    --  This function identifies the Ada exception to be raised using the
-    --  information when the system received a synchronous signal.
-    --  Since this function is machine and OS dependent, different code has to
-    --  be provided for different target.
-    --  On SGI, the signal handling is done is a-init.c, even when tasking is
-    --  involved.
- 
-    ---------------------------
-    -- Initialize_Interrupts --
-    ---------------------------
- 
-    --  Nothing needs to be done on this platform.
- 
-    procedure Initialize_Interrupts is
-    begin
-       null;
-    end Initialize_Interrupts;
- 
- begin
-    declare
-       function State (Int : Interrupt_ID) return Character;
-       pragma Import (C, State, "__gnat_get_interrupt_state");
-       --  Get interrupt state.  Defined in a-init.c
-       --  The input argument is the interrupt number,
-       --  and the result is one of the following:
- 
-       User    : constant Character := 'u';
-       Runtime : constant Character := 'r';
-       Default : constant Character := 's';
-       --    'n'   this interrupt not set by any Interrupt_State pragma
-       --    'u'   Interrupt_State pragma set state to User
-       --    'r'   Interrupt_State pragma set state to Runtime
-       --    's'   Interrupt_State pragma set state to System (use "default"
-       --           system handler)
- 
-       use Interfaces.C;
- 
-    begin
-       Abort_Task_Interrupt := Abort_Signal;
- 
-       pragma Assert (Keep_Unmasked = (Interrupt_ID'Range => False));
-       pragma Assert (Reserve = (Interrupt_ID'Range => False));
- 
-       --  Process state of exception signals
- 
-       for J in Exception_Interrupts'Range loop
-          if State (Exception_Interrupts (J)) /= User then
-             Keep_Unmasked (Exception_Interrupts (J)) := True;
-             Reserve (Exception_Interrupts (J)) := True;
-          end if;
-       end loop;
- 
-       if State (Abort_Task_Interrupt) /= User then
-          Keep_Unmasked (Abort_Task_Interrupt) := True;
-          Reserve (Abort_Task_Interrupt) := True;
-       end if;
- 
-       --  Set SIGINT to unmasked state as long as it's
-       --  not in "User" state.  Check for Unreserve_All_Interrupts last
- 
-       if State (SIGINT) /= User then
-          Keep_Unmasked (SIGINT) := True;
-       end if;
- 
-       --  Check all signals for state that requires keeping them
-       --  unmasked and reserved
- 
-       for J in Interrupt_ID'Range loop
-          if State (J) = Default or else State (J) = Runtime then
-             Keep_Unmasked (J) := True;
-             Reserve (J) := True;
-          end if;
-       end loop;
- 
-       --  Add target-specific reserved signals
- 
-       for J in Reserved_Interrupts'Range loop
-          Reserve (Interrupt_ID (Reserved_Interrupts (J))) := True;
-       end loop;
- 
-       --  Process pragma Unreserve_All_Interrupts. This overrides any
-       --  settings due to pragma Interrupt_State:
- 
-       if Unreserve_All_Interrupts /= 0 then
-          Keep_Unmasked (SIGINT) := False;
-          Reserve (SIGINT) := False;
-       end if;
- 
-       --  We do not have Signal 0 in reality. We just use this value
-       --  to identify not existing signals (see s-intnam.ads). Therefore,
-       --  Signal 0 should not be used in all signal related operations hence
-       --  mark it as reserved.
- 
-       Reserve (0) := True;
-    end;
- end System.Interrupt_Management;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5gmastop.adb gcc-4.0.0/gcc/ada/5gmastop.adb
*** gcc-3.4.3/gcc/ada/5gmastop.adb	Wed May 12 07:28:31 2004
--- gcc-4.0.0/gcc/ada/5gmastop.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,423 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                     SYSTEM.MACHINE_STATE_OPERATIONS                      --
- --                                                                          --
- --                                 B o d y                                  --
- --                         (Version for IRIX/MIPS)                          --
- --                                                                          --
- --          Copyright (C) 1999-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This version of Ada.Exceptions.Machine_State_Operations is for use on
- --  SGI Irix systems. By means of compile time conditional calculations, it
- --  can handle both n32/n64 and o32 modes.
- 
- with System.Machine_Code; use System.Machine_Code;
- with System.Memory;
- with System.Soft_Links; use System.Soft_Links;
- with Unchecked_Conversion;
- 
- package body System.Machine_State_Operations is
- 
-    use System.Storage_Elements;
-    use System.Exceptions;
- 
-    --  The exc_unwind function in libexc operats on a Sigcontext
- 
-    --  Type sigcontext_t is defined in /usr/include/sys/signal.h.
-    --  We define an equivalent Ada type here. From the comments in
-    --  signal.h:
- 
-    --    sigcontext is not part of the ABI - so this version is used to
-    --    handle 32 and 64 bit applications - it is a constant size regardless
-    --    of compilation mode, and always returns 64 bit register values
- 
-    type Uns32 is mod 2 ** 32;
-    type Uns64 is mod 2 ** 64;
- 
-    type Uns32_Ptr is access all Uns32;
-    type Uns64_Array is array (Integer range <>) of Uns64;
- 
-    type Reg_Array is array (0 .. 31) of Uns64;
- 
-    type Sigcontext is record
-       SC_Regmask           : Uns32;          --  0
-       SC_Status            : Uns32;          --  4
-       SC_PC                : Uns64;          --  8
-       SC_Regs              : Reg_Array;      --  16
-       SC_Fpregs            : Reg_Array;      --  272
-       SC_Ownedfp           : Uns32;          --  528
-       SC_Fpc_Csr           : Uns32;          --  532
-       SC_Fpc_Eir           : Uns32;          --  536
-       SC_Ssflags           : Uns32;          --  540
-       SC_Mdhi              : Uns64;          --  544
-       SC_Mdlo              : Uns64;          --  552
-       SC_Cause             : Uns64;          --  560
-       SC_Badvaddr          : Uns64;          --  568
-       SC_Triggersave       : Uns64;          --  576
-       SC_Sigset            : Uns64;          --  584
-       SC_Fp_Rounded_Result : Uns64;          --  592
-       SC_Pancake           : Uns64_Array (0 .. 5);
-       SC_Pad               : Uns64_Array (0 .. 26);
-    end record;
- 
-    type Sigcontext_Ptr is access all Sigcontext;
- 
-    SC_Regs_Pos   : constant String := "16";
-    SC_Fpregs_Pos : constant String := "272";
-    --  Byte offset of the Integer and Floating Point register save areas
-    --  within the Sigcontext.
- 
-    function To_Sigcontext_Ptr is
-      new Unchecked_Conversion (Machine_State, Sigcontext_Ptr);
- 
-    type Addr_Int is mod 2 ** Long_Integer'Size;
-    --  An unsigned integer type whose size is the same as System.Address.
-    --  We rely on the fact that Long_Integer'Size = System.Address'Size in
-    --  all ABIs.  Type Addr_Int can be converted to Uns64.
- 
-    function To_Code_Loc is new Unchecked_Conversion (Addr_Int, Code_Loc);
-    function To_Addr_Int is new Unchecked_Conversion (System.Address, Addr_Int);
-    function To_Uns32_Ptr is new Unchecked_Conversion (Addr_Int, Uns32_Ptr);
- 
-    --------------------------------
-    -- ABI-Dependent Declarations --
-    --------------------------------
- 
-    o32  : constant Boolean := System.Word_Size = 32;
-    n32  : constant Boolean := System.Word_Size = 64;
-    o32n : constant Natural := Boolean'Pos (o32);
-    n32n : constant Natural := Boolean'Pos (n32);
-    --  Flags to indicate which ABI is in effect for this compilation. For the
-    --  purposes of this unit, the n32 and n64 ABI's are identical.
- 
-    LSC : constant Character := Character'Val (o32n * Character'Pos ('w') +
-                                               n32n * Character'Pos ('d'));
-    --  This is 'w' for o32, and 'd' for n32/n64, used for constructing the
-    --  load/store instructions used to save/restore machine instructions.
- 
-    Roff : constant Character := Character'Val (o32n * Character'Pos ('4') +
-                                                n32n * Character'Pos ('0'));
-    --  Offset from first byte of a __uint64 register save location where
-    --  the register value is stored.  For n32/64 we store the entire 64
-    --  bit register into the uint64.  For o32, only 32 bits are stored
-    --  at an offset of 4 bytes.
- 
-    procedure Update_GP (Scp : Sigcontext_Ptr);
- 
-    ---------------
-    -- Update_GP --
-    ---------------
- 
-    procedure Update_GP (Scp : Sigcontext_Ptr) is
- 
-       type F_op  is mod 2 ** 6;
-       type F_reg is mod 2 ** 5;
-       type F_imm is new Short_Integer;
- 
-       type I_Type is record
-          op    : F_op;
-          rs    : F_reg;
-          rt    : F_reg;
-          imm   : F_imm;
-       end record;
- 
-       pragma Pack (I_Type);
-       for I_Type'Size use 32;
- 
-       type I_Type_Ptr is access all I_Type;
- 
-       LW : constant F_op := 2#100011#;
-       Reg_GP : constant := 28;
- 
-       type Address_Int is mod 2 ** Standard'Address_Size;
-       function To_I_Type_Ptr is new
-         Unchecked_Conversion (Address_Int, I_Type_Ptr);
- 
-       Ret_Ins : constant I_Type_Ptr := To_I_Type_Ptr (Address_Int (Scp.SC_PC));
-       GP_Ptr  : Uns32_Ptr;
- 
-    begin
-       if Ret_Ins.op = LW and then Ret_Ins.rt = Reg_GP then
-          GP_Ptr := To_Uns32_Ptr
-            (Addr_Int (Scp.SC_Regs (Integer (Ret_Ins.rs)))
-             + Addr_Int (Ret_Ins.imm));
-          Scp.SC_Regs (Reg_GP) := Uns64 (GP_Ptr.all);
-       end if;
-    end Update_GP;
- 
-    ----------------------------
-    -- Allocate_Machine_State --
-    ----------------------------
- 
-    function Allocate_Machine_State return Machine_State is
-    begin
-       return Machine_State
-         (Memory.Alloc (Sigcontext'Max_Size_In_Storage_Elements));
-    end Allocate_Machine_State;
- 
-    -------------------
-    -- Enter_Handler --
-    -------------------
- 
-    procedure Enter_Handler (M : Machine_State; Handler : Handler_Loc) is
-       pragma Warnings (Off, M);
-       pragma Warnings (Off, Handler);
- 
-       LOADI : constant String (1 .. 2) := 'l' & LSC;
-       --  This is "lw" in o32 mode, and "ld" in n32/n64 mode
- 
-       LOADF : constant String (1 .. 4) := 'l' & LSC & "c1";
-       --  This is "lwc1" in o32 mode and "ldc1" in n32/n64 mode
- 
-    begin
-       --  Restore integer registers from machine state. Note that we know
-       --  that $4 points to M, and $5 points to Handler, since this is
-       --  the standard calling sequence
- 
-       Asm (LOADI & " $16,  16*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
-       Asm (LOADI & " $17,  17*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
-       Asm (LOADI & " $18,  18*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
-       Asm (LOADI & " $19,  19*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
-       Asm (LOADI & " $20,  20*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
-       Asm (LOADI & " $21,  21*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
-       Asm (LOADI & " $22,  22*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
-       Asm (LOADI & " $23,  23*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
-       Asm (LOADI & " $24,  24*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
-       Asm (LOADI & " $25,  25*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
-       Asm (LOADI & " $26,  26*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
-       Asm (LOADI & " $27,  27*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
-       Asm (LOADI & " $28,  28*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
-       Asm (LOADI & " $29,  29*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
-       Asm (LOADI & " $30,  30*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
-       Asm (LOADI & " $31,  31*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
- 
-       --  Restore floating-point registers from machine state
- 
-       Asm (LOADF & " $f16, 16*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
-       Asm (LOADF & " $f17, 17*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
-       Asm (LOADF & " $f18, 18*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
-       Asm (LOADF & " $f19, 19*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
-       Asm (LOADF & " $f20, 20*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
-       Asm (LOADF & " $f21, 21*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
-       Asm (LOADF & " $f22, 22*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
-       Asm (LOADF & " $f23, 23*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
-       Asm (LOADF & " $f24, 24*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
-       Asm (LOADF & " $f25, 25*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
-       Asm (LOADF & " $f26, 26*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
-       Asm (LOADF & " $f27, 27*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
-       Asm (LOADF & " $f28, 28*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
-       Asm (LOADF & " $f29, 29*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
-       Asm (LOADF & " $f30, 30*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
-       Asm (LOADF & " $f31, 31*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
- 
-       --  Jump directly to the handler
- 
-       Asm ("jr  $5");
-    end Enter_Handler;
- 
-    ----------------
-    -- Fetch_Code --
-    ----------------
- 
-    function Fetch_Code (Loc : Code_Loc) return Code_Loc is
-    begin
-       return Loc;
-    end Fetch_Code;
- 
-    ------------------------
-    -- Free_Machine_State --
-    ------------------------
- 
-    procedure Free_Machine_State (M : in out Machine_State) is
-    begin
-       Memory.Free (Address (M));
-       M := Machine_State (Null_Address);
-    end Free_Machine_State;
- 
-    ------------------
-    -- Get_Code_Loc --
-    ------------------
- 
-    function Get_Code_Loc (M : Machine_State) return Code_Loc is
-       SC : constant Sigcontext_Ptr := To_Sigcontext_Ptr (M);
-    begin
-       return To_Code_Loc (Addr_Int (SC.SC_PC));
-    end Get_Code_Loc;
- 
-    --------------------------
-    -- Machine_State_Length --
-    --------------------------
- 
-    function Machine_State_Length return Storage_Offset is
-    begin
-       return Sigcontext'Max_Size_In_Storage_Elements;
-    end Machine_State_Length;
- 
-    ---------------
-    -- Pop_Frame --
-    ---------------
- 
-    procedure Pop_Frame
-      (M    : Machine_State;
-       Info : Subprogram_Info_Type)
-    is
-       pragma Warnings (Off, Info);
- 
-       Scp : Sigcontext_Ptr := To_Sigcontext_Ptr (M);
- 
-       procedure Exc_Unwind (Scp : Sigcontext_Ptr; Fde : Long_Integer := 0);
-       pragma Import (C, Exc_Unwind, "exc_unwind");
-       pragma Linker_Options ("-lexc");
- 
-    begin
-       --  exc_unwind is apparently not thread-safe under IRIX, so protect it
-       --  against race conditions within the GNAT run time.
-       --  ??? Note that we might want to use a fine grained lock here since
-       --  Lock_Task is used in many other places.
- 
-       Lock_Task.all;
-       Exc_Unwind (Scp);
-       Unlock_Task.all;
- 
-       if Scp.SC_PC = 0 or else Scp.SC_PC = 1 then
- 
-          --  A return value of 0 or 1 means exc_unwind couldn't find a parent
-          --  frame. Propagate_Exception expects a zero return address to
-          --  indicate TOS.
- 
-          Scp.SC_PC := 0;
- 
-       else
-          --  Set the GP to restore to the caller value (not callee value)
-          --  This is done only in o32 mode. In n32/n64 mode, GP is a normal
-          --  callee save register
- 
-          if o32 then
-             Update_GP (Scp);
-          end if;
- 
-          --  Adjust the return address to the call site, not the
-          --  instruction following the branch delay slot.  This may
-          --  be necessary if the last instruction of a pragma No_Return
-          --  subprogram is a call. The first instruction following the
-          --  delay slot may be the start of another subprogram. We back
-          --  off the address by 8, which points safely into the middle
-          --  of the generated subprogram code, avoiding end effects.
- 
-          Scp.SC_PC := Scp.SC_PC - 8;
-       end if;
-    end Pop_Frame;
- 
-    -----------------------
-    -- Set_Machine_State --
-    -----------------------
- 
-    procedure Set_Machine_State (M : Machine_State) is
- 
-       STOREI : constant String (1 .. 2) := 's' & LSC;
-       --  This is "sw" in o32 mode, and "sd" in n32 mode
- 
-       STOREF : constant String (1 .. 4) := 's' & LSC & "c1";
-       --  This is "swc1" in o32 mode and "sdc1" in n32 mode
- 
-       Scp : Sigcontext_Ptr;
- 
-    begin
-       --  Save the integer registers. Note that we know that $4 points
-       --  to M, since that is where the first parameter is passed.
-       --  Restore integer registers from machine state. Note that we know
-       --  that $4 points to M since this is the standard calling sequence
- 
-       <<Past_Prolog>>
- 
-       Asm (STOREI & " $16,  16*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
-       Asm (STOREI & " $17,  17*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
-       Asm (STOREI & " $18,  18*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
-       Asm (STOREI & " $19,  19*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
-       Asm (STOREI & " $20,  20*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
-       Asm (STOREI & " $21,  21*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
-       Asm (STOREI & " $22,  22*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
-       Asm (STOREI & " $23,  23*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
-       Asm (STOREI & " $24,  24*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
-       Asm (STOREI & " $25,  25*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
-       Asm (STOREI & " $26,  26*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
-       Asm (STOREI & " $27,  27*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
-       Asm (STOREI & " $28,  28*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
-       Asm (STOREI & " $29,  29*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
-       Asm (STOREI & " $30,  30*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
-       Asm (STOREI & " $31,  31*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
- 
-       --  Restore floating-point registers from machine state
- 
-       Asm (STOREF & " $f16, 16*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
-       Asm (STOREF & " $f17, 17*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
-       Asm (STOREF & " $f18, 18*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
-       Asm (STOREF & " $f19, 19*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
-       Asm (STOREF & " $f20, 20*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
-       Asm (STOREF & " $f21, 21*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
-       Asm (STOREF & " $f22, 22*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
-       Asm (STOREF & " $f23, 23*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
-       Asm (STOREF & " $f24, 24*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
-       Asm (STOREF & " $f25, 25*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
-       Asm (STOREF & " $f26, 26*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
-       Asm (STOREF & " $f27, 27*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
-       Asm (STOREF & " $f28, 28*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
-       Asm (STOREF & " $f29, 29*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
-       Asm (STOREF & " $f30, 30*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
-       Asm (STOREF & " $f31, 31*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
- 
-       --  Set the PC value for the context to a location after the
-       --  prolog has been executed.
- 
-       Scp := To_Sigcontext_Ptr (M);
-       Scp.SC_PC := Uns64 (To_Addr_Int (Past_Prolog'Address));
- 
-       --  We saved the state *inside* this routine, but what we want is
-       --  the state at the call site. So we need to do one pop operation.
-       --  This pop operation will properly set the PC value in the machine
-       --  state, so there is no need to save PC in the above code.
- 
-       Pop_Frame (M, Set_Machine_State'Address);
-    end Set_Machine_State;
- 
-    ------------------------------
-    -- Set_Signal_Machine_State --
-    ------------------------------
- 
-    procedure Set_Signal_Machine_State
-      (M       : Machine_State;
-       Context : System.Address)
-    is
-       pragma Warnings (Off, M);
-       pragma Warnings (Off, Context);
- 
-    begin
-       null;
-    end Set_Signal_Machine_State;
- 
- end System.Machine_State_Operations;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5gml-tgt.adb gcc-4.0.0/gcc/ada/5gml-tgt.adb
*** gcc-3.4.3/gcc/ada/5gml-tgt.adb	Mon Jan  5 15:20:42 2004
--- gcc-4.0.0/gcc/ada/5gml-tgt.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,372 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                             M L I B . T G T                              --
- --                              (IRIX Version)                              --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --              Copyright (C) 2003, Ada Core Technologies, Inc.             --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package provides a set of target dependent routines to build
- --  static, dynamic and shared libraries.
- 
- --  This is the IRIX version of the body.
- 
- with MLib.Fil;
- with MLib.Utl;
- with Namet;  use Namet;
- with Opt;
- with Output; use Output;
- with Prj.Com;
- with System;
- 
- package body MLib.Tgt is
- 
-    No_Arguments        : aliased Argument_List         := (1 .. 0 => null);
-    Empty_Argument_List : constant Argument_List_Access := No_Arguments'Access;
- 
-    Wl_Init_String : aliased String         := "-Wl,-init";
-    Wl_Init        : constant String_Access := Wl_Init_String'Access;
-    Wl_Fini_String : aliased String         := "-Wl,-fini";
-    Wl_Fini        : constant String_Access := Wl_Fini_String'Access;
- 
-    Init_Fini_List :  constant Argument_List_Access :=
-                        new Argument_List'(1 => Wl_Init,
-                                           2 => null,
-                                           3 => Wl_Fini,
-                                           4 => null);
-    --  Used to put switches for automatic elaboration/finalization
- 
-    ---------------------
-    -- Archive_Builder --
-    ---------------------
- 
-    function Archive_Builder return String is
-    begin
-       return "ar";
-    end Archive_Builder;
- 
-    -----------------------------
-    -- Archive_Builder_Options --
-    -----------------------------
- 
-    function Archive_Builder_Options return String_List_Access is
-    begin
-       return new String_List'(1 => new String'("cr"));
-    end Archive_Builder_Options;
- 
-    -----------------
-    -- Archive_Ext --
-    -----------------
- 
-    function Archive_Ext return String is
-    begin
-       return "a";
-    end Archive_Ext;
- 
-    ---------------------
-    -- Archive_Indexer --
-    ---------------------
- 
-    function Archive_Indexer return String is
-    begin
-       return "ranlib";
-    end Archive_Indexer;
- 
-    ---------------------------
-    -- Build_Dynamic_Library --
-    ---------------------------
- 
-    procedure Build_Dynamic_Library
-      (Ofiles       : Argument_List;
-       Foreign      : Argument_List;
-       Afiles       : Argument_List;
-       Options      : Argument_List;
-       Interfaces   : Argument_List;
-       Lib_Filename : String;
-       Lib_Dir      : String;
-       Symbol_Data  : Symbol_Record;
-       Driver_Name  : Name_Id := No_Name;
-       Lib_Address  : String  := "";
-       Lib_Version  : String  := "";
-       Relocatable  : Boolean := False;
-       Auto_Init    : Boolean := False)
-    is
-       pragma Unreferenced (Foreign);
-       pragma Unreferenced (Afiles);
-       pragma Unreferenced (Interfaces);
-       pragma Unreferenced (Symbol_Data);
-       pragma Unreferenced (Lib_Address);
-       pragma Unreferenced (Relocatable);
- 
-       Lib_File : constant String :=
-         Lib_Dir & Directory_Separator & "lib" &
-         MLib.Fil.Ext_To (Lib_Filename, DLL_Ext);
- 
-       Version_Arg          : String_Access;
-       Symbolic_Link_Needed : Boolean := False;
- 
-       Init_Fini : Argument_List_Access := Empty_Argument_List;
- 
-    begin
-       if Opt.Verbose_Mode then
-          Write_Str ("building relocatable shared library ");
-          Write_Line (Lib_File);
-       end if;
- 
-       --  If specified, add automatic elaboration/finalization
-       if Auto_Init then
-          Init_Fini := Init_Fini_List;
-          Init_Fini (2) := new String'("-Wl," & Lib_Filename & "init");
-          Init_Fini (4) := new String'("-Wl," & Lib_Filename & "final");
-       end if;
- 
-       if Lib_Version = "" then
-          MLib.Utl.Gcc
-            (Output_File => Lib_File,
-             Objects     => Ofiles,
-             Options     => Options & Init_Fini.all,
-             Driver_Name => Driver_Name);
- 
-       else
-          Version_Arg := new String'("-Wl,-soname," & Lib_Version);
- 
-          if Is_Absolute_Path (Lib_Version) then
-             MLib.Utl.Gcc
-               (Output_File => Lib_Version,
-                Objects     => Ofiles,
-                Options     => Options & Version_Arg & Init_Fini.all,
-                Driver_Name => Driver_Name);
-             Symbolic_Link_Needed := Lib_Version /= Lib_File;
- 
-          else
-             MLib.Utl.Gcc
-               (Output_File => Lib_Dir & Directory_Separator & Lib_Version,
-                Objects     => Ofiles,
-                Options     => Options & Version_Arg & Init_Fini.all,
-                Driver_Name => Driver_Name);
-             Symbolic_Link_Needed :=
-               Lib_Dir & Directory_Separator & Lib_Version /= Lib_File;
-          end if;
- 
-          if Symbolic_Link_Needed then
-             declare
-                Success : Boolean;
-                Oldpath : String (1 .. Lib_Version'Length + 1);
-                Newpath : String (1 .. Lib_File'Length + 1);
- 
-                Result : Integer;
-                pragma Unreferenced (Result);
- 
-                function Symlink
-                  (Oldpath : System.Address;
-                   Newpath : System.Address)
-                   return    Integer;
-                pragma Import (C, Symlink, "__gnat_symlink");
- 
-             begin
-                Oldpath (1 .. Lib_Version'Length) := Lib_Version;
-                Oldpath (Oldpath'Last)            := ASCII.NUL;
-                Newpath (1 .. Lib_File'Length)    := Lib_File;
-                Newpath (Newpath'Last)            := ASCII.NUL;
- 
-                Delete_File (Lib_File, Success);
- 
-                Result := Symlink (Oldpath'Address, Newpath'Address);
-             end;
-          end if;
-       end if;
-    end Build_Dynamic_Library;
- 
-    -------------------------
-    -- Default_DLL_Address --
-    -------------------------
- 
-    function Default_DLL_Address return String is
-    begin
-       return "";
-    end Default_DLL_Address;
- 
-    -------------
-    -- DLL_Ext --
-    -------------
- 
-    function DLL_Ext return String is
-    begin
-       return "so";
-    end DLL_Ext;
- 
-    --------------------
-    -- Dynamic_Option --
-    --------------------
- 
-    function Dynamic_Option return String is
-    begin
-       return "-shared";
-    end Dynamic_Option;
- 
-    -------------------
-    -- Is_Object_Ext --
-    -------------------
- 
-    function Is_Object_Ext (Ext : String) return Boolean is
-    begin
-       return Ext = ".o";
-    end Is_Object_Ext;
- 
-    --------------
-    -- Is_C_Ext --
-    --------------
- 
-    function Is_C_Ext (Ext : String) return Boolean is
-    begin
-       return Ext = ".c";
-    end Is_C_Ext;
- 
-    --------------------
-    -- Is_Archive_Ext --
-    --------------------
- 
-    function Is_Archive_Ext (Ext : String) return Boolean is
-    begin
-       return Ext = ".a" or else Ext = ".so";
-    end Is_Archive_Ext;
- 
-    -------------
-    -- Libgnat --
-    -------------
- 
-    function Libgnat return String is
-    begin
-       return "libgnat.a";
-    end Libgnat;
- 
-    ------------------------
-    -- Library_Exists_For --
-    ------------------------
- 
-    function Library_Exists_For (Project : Project_Id) return Boolean is
-    begin
-       if not Projects.Table (Project).Library then
-          Prj.Com.Fail ("INTERNAL ERROR: Library_Exists_For called " &
-                        "for non library project");
-          return False;
- 
-       else
-          declare
-             Lib_Dir : constant String :=
-               Get_Name_String (Projects.Table (Project).Library_Dir);
-             Lib_Name : constant String :=
-               Get_Name_String (Projects.Table (Project).Library_Name);
- 
-          begin
-             if Projects.Table (Project).Library_Kind = Static then
-                return Is_Regular_File
-                  (Lib_Dir & Directory_Separator & "lib" &
-                   Fil.Ext_To (Lib_Name, Archive_Ext));
- 
-             else
-                return Is_Regular_File
-                  (Lib_Dir & Directory_Separator & "lib" &
-                   Fil.Ext_To (Lib_Name, DLL_Ext));
-             end if;
-          end;
-       end if;
-    end Library_Exists_For;
- 
-    ---------------------------
-    -- Library_File_Name_For --
-    ---------------------------
- 
-    function Library_File_Name_For (Project : Project_Id) return Name_Id is
-    begin
-       if not Projects.Table (Project).Library then
-          Prj.Com.Fail ("INTERNAL ERROR: Library_File_Name_For called " &
-                        "for non library project");
-          return No_Name;
- 
-       else
-          declare
-             Lib_Name : constant String :=
-               Get_Name_String (Projects.Table (Project).Library_Name);
- 
-          begin
-             Name_Len := 3;
-             Name_Buffer (1 .. Name_Len) := "lib";
- 
-             if Projects.Table (Project).Library_Kind = Static then
-                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, Archive_Ext));
- 
-             else
-                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, DLL_Ext));
-             end if;
- 
-             return Name_Find;
-          end;
-       end if;
-    end Library_File_Name_For;
- 
-    --------------------------------
-    -- Linker_Library_Path_Option --
-    --------------------------------
- 
-    function Linker_Library_Path_Option return String_Access is
-    begin
-       return new String'("-Wl,-rpath,");
-    end Linker_Library_Path_Option;
- 
-    ----------------
-    -- Object_Ext --
-    ----------------
- 
-    function Object_Ext return String is
-    begin
-       return "o";
-    end Object_Ext;
- 
-    ----------------
-    -- PIC_Option --
-    ----------------
- 
-    function PIC_Option return String is
-    begin
-       return "-fPIC";
-    end PIC_Option;
- 
-    -----------------------------------------------
-    -- Standalone_Library_Auto_Init_Is_Supported --
-    -----------------------------------------------
- 
-    function Standalone_Library_Auto_Init_Is_Supported return Boolean is
-    begin
-       return True;
-    end Standalone_Library_Auto_Init_Is_Supported;
- 
-    ---------------------------
-    -- Support_For_Libraries --
-    ---------------------------
- 
-    function Support_For_Libraries return Library_Support is
-    begin
-       return Full;
-    end Support_For_Libraries;
- 
- end MLib.Tgt;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5gosinte.ads gcc-4.0.0/gcc/ada/5gosinte.ads
*** gcc-3.4.3/gcc/ada/5gosinte.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/5gosinte.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,695 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
- --                                                                          --
- --                   S Y S T E M . O S _ I N T E R F A C E                  --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --          Copyright (C) 1997-2001 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is an Irix (old pthread library) version of this package.
- 
- --  This package encapsulates all direct interfaces to OS services
- --  that are needed by children of System.
- 
- --  PLEASE DO NOT add any with-clauses to this package
- --  or remove the pragma Elaborate_Body.
- --  It is designed to be a bottom-level (leaf) package.
- 
- with Interfaces;
- with Interfaces.C;
- with Interfaces.C.Strings;
- 
- package System.OS_Interface is
- 
-    pragma Preelaborate;
- 
-    pragma Linker_Options ("-lathread");
- 
-    subtype int            is Interfaces.C.int;
-    subtype short          is Interfaces.C.short;
-    subtype long           is Interfaces.C.long;
-    subtype unsigned       is Interfaces.C.unsigned;
-    subtype unsigned_short is Interfaces.C.unsigned_short;
-    subtype unsigned_long  is Interfaces.C.unsigned_long;
-    subtype unsigned_char  is Interfaces.C.unsigned_char;
-    subtype plain_char     is Interfaces.C.plain_char;
-    subtype size_t         is Interfaces.C.size_t;
-    subtype chars_ptr      is Interfaces.C.Strings.chars_ptr;
- 
-    -----------
-    -- Errno --
-    -----------
- 
-    function errno return int;
-    pragma Import (C, errno, "__get_errno");
- 
-    EINTR     : constant := 4;   --  interrupted system call
-    EAGAIN    : constant := 11;  --  No more processes
-    ENOMEM    : constant := 12;  --  Not enough core
-    EINVAL    : constant := 22;  --  Invalid argument
-    ETIMEDOUT : constant := 145; --  Connection timed out
- 
-    -------------
-    -- Signals --
-    -------------
- 
-    Max_Interrupt : constant := 64;
-    type Signal is new int range 0 .. Max_Interrupt;
-    for Signal'Size use int'Size;
- 
-    SIGHUP     : constant := 1; --  hangup
-    SIGINT     : constant := 2; --  interrupt (rubout)
-    SIGQUIT    : constant := 3; --  quit (ASCD FS)
-    SIGILL     : constant := 4; --  illegal instruction (not reset)
-    SIGTRAP    : constant := 5; --  trace trap (not reset)
-    SIGIOT     : constant := 6; --  IOT instruction
-    SIGABRT    : constant := 6; --  used by abort, replace SIGIOT in the
-    --                              future
-    SIGEMT     : constant := 7; --  EMT instruction
-    SIGFPE     : constant := 8; --  floating point exception
-    SIGKILL    : constant := 9; --  kill (cannot be caught or ignored)
-    SIGBUS     : constant := 10; --  bus error
-    SIGSEGV    : constant := 11; --  segmentation violation
-    SIGSYS     : constant := 12; --  bad argument to system call
-    SIGPIPE    : constant := 13; --  write on a pipe with no one to read it
-    SIGALRM    : constant := 14; --  alarm clock
-    SIGTERM    : constant := 15; --  software termination signal from kill
-    SIGUSR1    : constant := 16; --  user defined signal 1
-    SIGUSR2    : constant := 17; --  user defined signal 2
-    SIGCLD     : constant := 18; --  alias for SIGCHLD
-    SIGCHLD    : constant := 18; --  child status change
-    SIGPWR     : constant := 19; --  power-fail restart
-    SIGWINCH   : constant := 20; --  window size change
-    SIGURG     : constant := 21; --  urgent condition on IO channel
-    SIGPOLL    : constant := 22; --  pollable event occurred
-    SIGIO      : constant := 22; --  I/O possible (Solaris SIGPOLL alias)
-    SIGSTOP    : constant := 23; --  stop (cannot be caught or ignored)
-    SIGTSTP    : constant := 24; --  user stop requested from tty
-    SIGCONT    : constant := 25; --  stopped process has been continued
-    SIGTTIN    : constant := 26; --  background tty read attempted
-    SIGTTOU    : constant := 27; --  background tty write attempted
-    SIGVTALRM  : constant := 28; --  virtual timer expired
-    SIGPROF    : constant := 29; --  profiling timer expired
-    SIGXCPU    : constant := 30; --  CPU time limit exceeded
-    SIGXFSZ    : constant := 31; --  filesize limit exceeded
-    SIGK32     : constant := 32; --  reserved for kernel (IRIX)
-    SIGCKPT    : constant := 33; --  Checkpoint warning
-    SIGRESTART : constant := 34; --  Restart warning
-    SIGUME     : constant := 35; --  Uncorrectable memory error
-    --  Signals defined for Posix 1003.1c.
-    SIGPTINTR    : constant := 47;
-    SIGPTRESCHED : constant := 48;
-    --  Posix 1003.1b signals
-    SIGRTMIN   : constant := 49; --  Posix 1003.1b signals
-    SIGRTMAX   : constant := 64; --  Posix 1003.1b signals
- 
-    type sigset_t is private;
-    type sigset_t_ptr is access all sigset_t;
- 
-    function sigaddset (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigaddset, "sigaddset");
- 
-    function sigdelset (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigdelset, "sigdelset");
- 
-    function sigfillset (set : access sigset_t) return int;
-    pragma Import (C, sigfillset, "sigfillset");
- 
-    function sigismember (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigismember, "sigismember");
- 
-    function sigemptyset (set : access sigset_t) return int;
-    pragma Import (C, sigemptyset, "sigemptyset");
- 
-    type siginfo_t is record
-       si_signo     : int;
-       si_code      : int;
-       si_errno     : int;
-       bit_field_substitute_1 : String (1 .. 116);
-    end record;
-    pragma Convention (C, siginfo_t);
- 
-    type array_type_2 is array (Integer range 0 .. 1) of int;
-    type struct_sigaction is record
-       sa_flags     : int;
-       sa_handler   : System.Address;
-       sa_mask      : sigset_t;
-       sa_resv      : array_type_2;
-    end record;
-    pragma Convention (C, struct_sigaction);
-    type struct_sigaction_ptr is access all struct_sigaction;
- 
-    SIG_BLOCK   : constant := 1;
-    SIG_UNBLOCK : constant := 2;
-    SIG_SETMASK : constant := 3;
- 
-    SIG_DFL : constant := 0;
-    SIG_IGN : constant := 1;
- 
-    function sigaction
-      (sig  : Signal;
-       act  : struct_sigaction_ptr;
-       oact : struct_sigaction_ptr := null) return int;
-    pragma Import (C, sigaction, "sigaction");
- 
-    ----------
-    -- Time --
-    ----------
- 
-    type time_t is new int;
- 
-    type timespec is record
-       tv_sec  : time_t;
-       tv_nsec : long;
-    end record;
-    pragma Convention (C, timespec);
-    type timespec_ptr is access all timespec;
- 
-    function To_Duration (TS : timespec) return Duration;
-    pragma Inline (To_Duration);
- 
-    function To_Timespec (D : Duration) return timespec;
-    pragma Inline (To_Timespec);
- 
-    type timer_t is new Integer;
-    type clockid_t is private;
- 
-    CLOCK_REALTIME  : constant clockid_t;
-    CLOCK_SGI_FAST  : constant clockid_t;
-    CLOCK_SGI_CYCLE : constant clockid_t;
- 
-    SGI_CYCLECNTR_SIZE : constant := 165;
-    function syssgi (request : Interfaces.C.int) return Interfaces.C.ptrdiff_t;
- 
-    pragma Import (C, syssgi, "syssgi");
- 
-    function clock_gettime
-      (clock_id : clockid_t;
-       tp       : access timespec) return int;
-    pragma Import (C, clock_gettime, "clock_gettime");
- 
-    function clock_getres
-      (clock_id : clockid_t; tp : access timespec) return int;
-    pragma Import (C, clock_getres, "clock_getres");
- 
-    type struct_timeval is record
-       tv_sec  : time_t;
-       tv_usec : time_t;
-    end record;
-    pragma Convention (C, struct_timeval);
- 
-    function To_Duration (TV : struct_timeval) return Duration;
-    pragma Inline (To_Duration);
- 
-    function To_Timeval (D : Duration) return struct_timeval;
-    pragma Inline (To_Timeval);
- 
-    function gettimeofday
-      (tv : access struct_timeval;
-       tz : System.Address := System.Null_Address) return int;
-    pragma Import (C, gettimeofday, "gettimeofday");
- 
-    -------------------------
-    -- Priority Scheduling --
-    -------------------------
- 
-    SCHED_FIFO  : constant := 0;
-    SCHED_RR    : constant := 0;
-    SCHED_OTHER : constant := 0;
- 
-    -------------
-    -- Process --
-    -------------
- 
-    type pid_t is private;
- 
-    function kill (pid : pid_t; sig : Signal) return int;
-    pragma Import (C, kill, "kill");
- 
-    function getpid return pid_t;
-    pragma Import (C, getpid, "getpid");
- 
-    ---------------------------------------
-    -- Nonstandard Thread Initialization --
-    ---------------------------------------
- 
-    procedure pthread_init;
-    pragma Inline (pthread_init);
-    --  This is a dummy procedure to share some GNULLI files
- 
-    -------------
-    -- Threads --
-    -------------
- 
-    type Thread_Body is access
-      function (arg : System.Address) return System.Address;
- 
-    type pthread_t           is private; --   thread identifier
-    subtype Thread_Id        is pthread_t;
- 
-    type pthread_mutex_t     is private; --   mutex identifier
-    type pthread_cond_t      is private; --   cond identifier
-    type pthread_attr_t      is private; --   pthread attributes
-    type pthread_mutexattr_t is private; --   mutex attributes
-    type pthread_condattr_t  is private; --   mutex attributes
-    type sem_t               is private; --   semaphore identifier
-    type pthread_key_t       is private; --   per thread key
- 
-    subtype pthread_once_t   is int;     --   dynamic package initialization
-    subtype resource_t       is long;    --   sproc. resource info.
-    type start_addr is access function (arg : Address) return Address;
-    type sproc_start_addr is access function (arg : Address) return int;
-    type callout_addr is
-      access function (arg : Address; arg1 : Address) return Address;
- 
-    --  SGI specific types
- 
-    subtype sproc_t      is Address; --   sproc identifier
-    subtype sproc_attr_t is Address; --   sproc attributes
- 
-    subtype spcb_p is Address;
-    subtype ptcb_p is Address;
- 
-    --  Pthread Error Types
- 
-    FUNC_OK  : constant := 0;
-    FUNC_ERR : constant := -1;
- 
-    --  pthread run-time initialization data structure
- 
-    type pthread_init_struct is record
-       conf_initsize       : int; --  shared area size
-       max_sproc_count     : int; --  maximum number of sprocs
-       sproc_stack_size    : size_t;  --  sproc stack size
-       os_default_priority : int; --  default IRIX pri for main process
-       os_sched_signal     : int; --  default OS scheduling signal
-       guard_pages         : int; --  number of guard pages per stack
-       init_sproc_count    : int; --  initial number of sprocs
-    end record;
- 
-    --
-    --  Pthread Attribute Initialize / Destroy
-    --
- 
-    function pthread_attr_init (attr : access pthread_attr_t) return int;
-    pragma Import (C, pthread_attr_init, "pthread_attr_init");
- 
-    function pthread_attr_destroy (attr : access pthread_attr_t) return int;
-    pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
- 
-    --
-    --  Thread Attributes
-    --
- 
-    function pthread_attr_setstacksize
-      (attr : access pthread_attr_t; stacksize : size_t) return int;
-    pragma Import (C, pthread_attr_setstacksize, "pthread_attr_setstacksize");
- 
-    function pthread_attr_setdetachstate
-      (attr : access pthread_attr_t; detachstate : int) return int;
-    pragma Import (C, pthread_attr_setdetachstate);
- 
-    function pthread_attr_setname
-      (attr : access pthread_attr_t; name : chars_ptr) return int;
-    pragma Import (C, pthread_attr_setname, "pthread_attr_setname");
- 
-    --
-    --  Thread Scheduling Attributes
-    --
- 
-    function pthread_attr_setscope
-      (attr : access pthread_attr_t; contentionscope : int) return int;
-    pragma Import (C, pthread_attr_setscope, "pthread_attr_setscope");
- 
-    function pthread_attr_setinheritsched
-      (attr : access pthread_attr_t; inherit : int) return int;
-    pragma Import
-      (C, pthread_attr_setinheritsched, "pthread_attr_setinheritsched");
- 
-    function pthread_attr_setsched
-      (attr : access pthread_attr_t; scheduler : int) return int;
-    pragma Import (C, pthread_attr_setsched, "pthread_attr_setsched");
- 
-    function  pthread_attr_setprio
-      (attr : access pthread_attr_t; priority : int) return int;
-    pragma Import (C, pthread_attr_setprio, "pthread_attr_setprio");
- 
-    --
-    --  SGI Extensions to Thread Attributes
-    --
- 
-    --  Bound to sproc attribute values
- 
-    PTHREAD_BOUND     : constant := 1;
-    PTHREAD_NOT_BOUND : constant := 0;
- 
-    function pthread_attr_setresources
-      (attr : access pthread_attr_t; resources : resource_t) return int;
-    pragma Import (C, pthread_attr_setresources, "pthread_attr_setresources");
- 
-    function pthread_attr_set_boundtosproc
-      (attr : access pthread_attr_t; bound_to_sproc : int) return int;
-    pragma Import
-      (C, pthread_attr_set_boundtosproc, "pthread_attr_set_boundtosproc");
- 
-    function pthread_attr_set_bsproc
-      (attr : access pthread_attr_t; bsproc : spcb_p) return int;
-    pragma Import (C, pthread_attr_set_bsproc, "pthread_attr_set_bsproc");
- 
-    function pthread_attr_set_tslice
-      (attr        : access pthread_attr_t;
-       ts_interval : access struct_timeval) return int;
-    pragma Import (C, pthread_attr_set_tslice, "pthread_attr_set_tslice");
- 
-    --
-    --  Thread Creation & Management
-    --
- 
-    function pthread_create
-      (thread        : access pthread_t;
-       attr          : access pthread_attr_t;
-       start_routine : start_addr;
-       arg           : Address) return int;
-    pragma Import (C, pthread_create, "pthread_create");
- 
-    procedure pthread_exit (status : Address);
-    pragma Import (C, pthread_exit, "pthread_exit");
- 
-    procedure pthread_yield (arg : Address := System.Null_Address);
-    pragma Import (C, pthread_yield, "pthread_yield");
- 
-    function pthread_self return pthread_t;
-    pragma Import (C, pthread_self, "pthread_self");
- 
-    function pthread_kill (thread : pthread_t; sig : int) return int;
-    pragma Import (C, pthread_kill, "pthread_kill");
- 
-    --
-    --  SGI Extensions to POSIX thread operations
-    --
- 
-    function pthread_setprio (thread : pthread_t; priority : int) return int;
-    pragma Import (C, pthread_setprio, "pthread_setprio");
- 
-    function pthread_suspend (thread : pthread_t) return int;
-    pragma Import (C, pthread_suspend, "pthread_suspend");
- 
-    function pthread_resume (thread : pthread_t) return int;
-    pragma Import (C, pthread_resume, "pthread_resume");
- 
-    function pthread_get_current_ada_tcb return Address;
-    pragma Import (C, pthread_get_current_ada_tcb);
- 
-    function pthread_set_ada_tcb
-      (thread : pthread_t; data : Address) return int;
-    pragma Import (C, pthread_set_ada_tcb, "pthread_set_ada_tcb");
- 
-    --  Mutex Initialization / Destruction
- 
-    function pthread_mutexattr_init
-      (attr : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
- 
-    function pthread_mutexattr_destroy
-      (attr : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
- 
-    function pthread_mutexattr_setqueueorder
-      (attr : access pthread_mutexattr_t; order : int) return int;
-    pragma Import (C, pthread_mutexattr_setqueueorder);
- 
-    function pthread_mutexattr_setceilingprio
-      (attr : access pthread_mutexattr_t; priority : int) return int;
-    pragma Import (C, pthread_mutexattr_setceilingprio);
- 
-    --  Mutex Attributes
- 
-    --  Threads queueing order
- 
-    MUTEX_PRIORITY         : constant := 0; --   wait in priority order
-    MUTEX_FIFO             : constant := 1; --   first-in-first-out
-    MUTEX_PRIORITY_INHERIT : constant := 2; --   priority inhertance mutex
-    MUTEX_PRIORITY_CEILING : constant := 3; --   priority ceiling mutex
- 
-    --  Mutex debugging options
- 
-    MUTEX_NO_DEBUG  : constant := 0; --   no debugging on mutex
-    MUTEX_DEBUG     : constant := 1; --   debugging is on
- 
-    --  Mutex spin on lock operations
- 
-    MUTEX_NO_SPIN   : constant := 0;  --   no spin, try once only
-    MUTEX_SPIN_ONLY : constant := -1; --   spin forever
-    --  cnt > 0, limited spin
-    --  Mutex sharing attributes
- 
-    MUTEX_SHARED    : constant := 0; --   shared between processes
-    MUTEX_NOTSHARED : constant := 1; --   not shared between processes
- 
-    --  Mutex Operations
- 
-    function pthread_mutex_init
-      (mutex : access pthread_mutex_t;
-       attr  : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
- 
-    function pthread_mutex_destroy
-      (mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
- 
-    function pthread_mutex_lock
-      (mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_mutex_lock, "pthread_mutex_lock");
- 
-    function pthread_mutex_unlock
-      (mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_mutex_unlock, "pthread_mutex_unlock");
- 
-    --  Condition Initialization / Destruction
- 
-    function pthread_condattr_init
-      (attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
- 
-    function pthread_condattr_destroy
-      (attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
- 
-    --  Condition Attributes
- 
-    COND_PRIORITY  : constant := 0; --   wait in priority order
-    COND_FIFO      : constant := 1; --   first-in-first-out
- 
-    --  Condition debugging options
- 
-    COND_NO_DEBUG  : constant := 0; --   no debugging on mutex
-    COND_DEBUG     : constant := 1; --   debugging is on
- 
-    --  Condition sharing attributes
- 
-    COND_SHARED    : constant := 0; --   shared between processes
-    COND_NOTSHARED : constant := 1; --   not shared between processes
- 
-    --  Condition Operations
- 
-    function pthread_cond_init
-      (cond : access pthread_cond_t;
-       attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_cond_init, "pthread_cond_init");
- 
-    function pthread_cond_destroy
-      (cond : access pthread_cond_t) return int;
-    pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
- 
-    function pthread_cond_signal (cond : access pthread_cond_t) return int;
-    pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
- 
-    function pthread_cond_wait
-      (cond  : access pthread_cond_t;
-       mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_cond_wait, "pthread_cond_wait");
- 
-    function pthread_cond_timedwait
-      (cond    : access pthread_cond_t;
-       mutex   : access pthread_mutex_t;
-       abstime : access struct_timeval) return int;
-    pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait");
- 
-    --  Thread-Specific Data
- 
-    type foo_h_proc_1 is access procedure (value : Address);
- 
-    function pthread_key_create
-      (key : access pthread_key_t; destructor : foo_h_proc_1) return int;
-    pragma Import (C, pthread_key_create, "pthread_key_create");
- 
-    function pthread_setspecific
-      (key : pthread_key_t; value : Address) return int;
-    pragma Import (C, pthread_setspecific, "pthread_setspecific");
- 
-    function pthread_getspecific
-      (key : pthread_key_t; value : access Address) return int;
-    pragma Import (C, pthread_getspecific, "pthread_getspecific");
- 
-    type foo_h_proc_2 is access procedure;
- 
-    function pthread_exec_begin (init : access pthread_init_struct) return int;
-    pragma Import (C, pthread_exec_begin, "pthread_exec_begin");
- 
-    function sproc_create
-      (sproc_id      : access sproc_t;
-       attr          : access sproc_attr_t;
-       start_routine : sproc_start_addr;
-       arg           : Address) return int;
-    pragma Import (C, sproc_create, "sproc_create");
- 
-    function sproc_self return sproc_t;
-    pragma Import (C, sproc_self, "sproc_self");
- 
-    --  if equal fast TRUE is returned - common case
-    --  if not equal thread resource must NOT be null in order to compare bits
- 
-    --
-    --  Sproc attribute initialize / destroy
-    --
- 
-    function sproc_attr_init (attr : access sproc_attr_t) return int;
-    pragma Import (C, sproc_attr_init, "sproc_attr_init");
- 
-    function sproc_attr_destroy (attr : access sproc_attr_t) return int;
-    pragma Import (C, sproc_attr_destroy, "sproc_attr_destroy");
- 
-    function sproc_attr_setresources
-      (attr : access sproc_attr_t; resources : resource_t) return int;
-    pragma Import (C, sproc_attr_setresources, "sproc_attr_setresources");
- 
-    function sproc_attr_getresources
-      (attr      : access sproc_attr_t;
-       resources : access resource_t) return int;
-    pragma Import (C, sproc_attr_getresources, "sproc_attr_getresources");
- 
-    function sproc_attr_setcpu
-      (attr : access sproc_attr_t; cpu_num : int) return int;
-    pragma Import (C, sproc_attr_setcpu, "sproc_attr_setcpu");
- 
-    function sproc_attr_getcpu
-      (attr : access sproc_attr_t; cpu_num : access int) return int;
-    pragma Import (C, sproc_attr_getcpu, "sproc_attr_getcpu");
- 
-    function sproc_attr_setresident
-      (attr : access sproc_attr_t; resident : int) return int;
-    pragma Import (C, sproc_attr_setresident, "sproc_attr_setresident");
- 
-    function sproc_attr_getresident
-      (attr : access sproc_attr_t; resident : access int) return int;
-    pragma Import (C, sproc_attr_getresident, "sproc_attr_getresident");
- 
-    function sproc_attr_setname
-      (attr : access sproc_attr_t; name : chars_ptr) return int;
-    pragma Import (C, sproc_attr_setname, "sproc_attr_setname");
- 
-    function sproc_attr_getname
-      (attr : access sproc_attr_t; name : chars_ptr) return int;
-    pragma Import (C, sproc_attr_getname, "sproc_attr_getname");
- 
-    function sproc_attr_setstacksize
-      (attr : access sproc_attr_t; stacksize : size_t) return int;
-    pragma Import (C, sproc_attr_setstacksize, "sproc_attr_setstacksize");
- 
-    function sproc_attr_getstacksize
-      (attr : access sproc_attr_t; stacksize : access size_t) return int;
-    pragma Import (C, sproc_attr_getstacksize, "sproc_attr_getstacksize");
- 
-    function sproc_attr_setprio
-      (attr : access sproc_attr_t; priority : int) return int;
-    pragma Import (C, sproc_attr_setprio, "sproc_attr_setprio");
- 
-    function sproc_attr_getprio
-      (attr : access sproc_attr_t; priority : access int) return int;
-    pragma Import (C, sproc_attr_getprio, "sproc_attr_getprio");
- 
-    function sproc_attr_setbthread
-      (attr : access sproc_attr_t; bthread : ptcb_p) return int;
-    pragma Import (C, sproc_attr_setbthread, "sproc_attr_setbthread");
- 
-    function sproc_attr_getbthread
-      (attr : access sproc_attr_t; bthread : access ptcb_p) return int;
-    pragma Import (C, sproc_attr_getbthread, "sproc_attr_getbthread");
- 
-    SPROC_NO_RESOURCES : constant := 0;
-    SPROC_ANY_CPU      : constant := -1;
-    SPROC_MY_PRIORITY  : constant := -1;
-    SPROC_SWAPPED      : constant := 0;
-    SPROC_RESIDENT     : constant := 1;
- 
-    type isr_address is access procedure;
- 
-    function intr_attach (sig : int; isr : isr_address) return int;
-    pragma Import (C, intr_attach, "intr_attach");
- 
-    Intr_Attach_Reset : constant Boolean := False;
-    --  True if intr_attach is reset after an interrupt handler is called
- 
-    function intr_exchange
-      (sig  : int;
-       isr  : isr_address;
-       oisr : access isr_address) return int;
-    pragma Import (C, intr_exchange, "intr_exchange");
- 
-    function intr_current_isr
-      (sig  : int;
-       oisr : access isr_address)
-      return int;
-    pragma Import (C, intr_current_isr, "intr_current_isr");
- 
- private
- 
-    type clockid_t is new int;
- 
-    CLOCK_REALTIME  : constant clockid_t := 1;
-    CLOCK_SGI_CYCLE : constant clockid_t := 2;
-    CLOCK_SGI_FAST  : constant clockid_t := 3;
- 
-    type pthread_t           is new Address; --   thread identifier
-    type pthread_mutex_t     is new Address; --   mutex identifier
-    type pthread_cond_t      is new Address; --   cond identifier
-    type pthread_attr_t      is new Address; --   pthread attributes
-    type pthread_mutexattr_t is new Address; --   mutex attributes
-    type pthread_condattr_t  is new Address; --   mutex attributes
-    type sem_t               is new Address; --   semaphore identifier
-    type pthread_key_t       is new Address; --   per thread key
- 
-    type sigbits_t is array (Integer range 0 .. 3) of unsigned;
-    type sigset_t is record
-       sigbits : sigbits_t;
-    end record;
-    pragma Convention (C, sigset_t);
- 
-    type pid_t is new long;
- 
- end System.OS_Interface;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5gproinf.adb gcc-4.0.0/gcc/ada/5gproinf.adb
*** gcc-3.4.3/gcc/ada/5gproinf.adb	Thu Apr 24 17:53:51 2003
--- gcc-4.0.0/gcc/ada/5gproinf.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,221 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                 S Y S T E M . P R O G R A M  _  I N F O                  --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --          Copyright (C) 1997-1999 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is an Irix (old pthread library) version of this package.
- 
- --  This package   contains the parameters  used by   the run-time system at
- --  program startup.  These parameters are  isolated in this package body to
- --  facilitate replacement by the end user.
- --
- --  To replace the default values, copy this source file into your build
- --  directory, edit the file to reflect your desired behavior, and recompile
- --  with the command:
- --
- --     % gcc -c -O2 -gnatpg s-proinf.adb
- --
- --  then relink your application as usual.
- --
- 
- with GNAT.OS_Lib;
- 
- package body System.Program_Info is
- 
-    Kbytes : constant := 1024;
- 
-    Default_Initial_Sproc_Count  : constant := 0;
-    Default_Max_Sproc_Count      : constant := 128;
-    Default_Sproc_Stack_Size     : constant := 16#4000#;
-    Default_Stack_Guard_Pages    : constant := 1;
-    Default_Default_Time_Slice   : constant := 0.0;
-    Default_Default_Task_Stack   : constant := 12 * Kbytes;
-    Default_Pthread_Sched_Signal : constant := 35;
-    Default_Pthread_Arena_Size   : constant := 16#40000#;
-    Default_Os_Default_Priority  : constant := 0;
- 
-    -------------------------
-    -- Initial_Sproc_Count --
-    -------------------------
- 
-    function Initial_Sproc_Count return Integer is
- 
-       function sysmp (P1 : Integer) return Integer;
-       pragma Import (C, sysmp, "sysmp", "sysmp");
- 
-       MP_NPROCS : constant := 1; --   # processor in complex
- 
-       Pthread_Sproc_Count : constant GNAT.OS_Lib.String_Access :=
-         GNAT.OS_Lib.Getenv ("PTHREAD_SPROC_COUNT");
- 
-    begin
-       if Pthread_Sproc_Count.all'Length = 0 then
-          return Default_Initial_Sproc_Count;
- 
-       elsif Pthread_Sproc_Count.all = "AUTO" then
-          return sysmp (MP_NPROCS);
- 
-       else
-          return Integer'Value (Pthread_Sproc_Count.all);
-       end if;
-    exception
-       when others =>
-          return Default_Initial_Sproc_Count;
-    end Initial_Sproc_Count;
- 
-    ---------------------
-    -- Max_Sproc_Count --
-    ---------------------
- 
-    function Max_Sproc_Count return Integer is
-       Pthread_Max_Sproc_Count : constant GNAT.OS_Lib.String_Access :=
-         GNAT.OS_Lib.Getenv ("PTHREAD_MAX_SPROC_COUNT");
- 
-    begin
-       if Pthread_Max_Sproc_Count.all'Length = 0 then
-          return Default_Max_Sproc_Count;
-       else
-          return Integer'Value (Pthread_Max_Sproc_Count.all);
-       end if;
-    exception
-       when others =>
-          return Default_Max_Sproc_Count;
-    end Max_Sproc_Count;
- 
-    ----------------------
-    -- Sproc_Stack_Size --
-    ----------------------
- 
-    function Sproc_Stack_Size return Integer is
-    begin
-       return Default_Sproc_Stack_Size;
-    end Sproc_Stack_Size;
- 
-    ------------------------
-    -- Default_Time_Slice --
-    ------------------------
- 
-    function Default_Time_Slice return Duration is
-       Pthread_Time_Slice_Sec : constant GNAT.OS_Lib.String_Access :=
-         GNAT.OS_Lib.Getenv ("PTHREAD_TIME_SLICE_SEC");
-       Pthread_Time_Slice_Usec : constant GNAT.OS_Lib.String_Access :=
-         GNAT.OS_Lib.Getenv ("PTHREAD_TIME_SLICE_USEC");
- 
-       Val_Sec, Val_Usec : Integer := 0;
- 
-    begin
-       if Pthread_Time_Slice_Sec.all'Length /= 0 or
-         Pthread_Time_Slice_Usec.all'Length /= 0
-       then
-          if Pthread_Time_Slice_Sec.all'Length /= 0 then
-             Val_Sec := Integer'Value (Pthread_Time_Slice_Sec.all);
-          end if;
- 
-          if Pthread_Time_Slice_Usec.all'Length /= 0 then
-             Val_Usec := Integer'Value (Pthread_Time_Slice_Usec.all);
-          end if;
- 
-          return Duration (Val_Sec) + Duration (Val_Usec) / 1000.0;
-       else
-          return Default_Default_Time_Slice;
-       end if;
- 
-    exception
-       when others =>
-          return Default_Default_Time_Slice;
-    end Default_Time_Slice;
- 
-    ------------------------
-    -- Default_Task_Stack --
-    ------------------------
- 
-    function Default_Task_Stack return Integer is
-    begin
-       return Default_Default_Task_Stack;
-    end Default_Task_Stack;
- 
-    -----------------------
-    -- Stack_Guard_Pages --
-    -----------------------
- 
-    function Stack_Guard_Pages return Integer is
-       Pthread_Stack_Guard_Pages : constant GNAT.OS_Lib.String_Access :=
-         GNAT.OS_Lib.Getenv ("PTHREAD_STACK_GUARD_PAGES");
- 
-    begin
-       if Pthread_Stack_Guard_Pages.all'Length /= 0 then
-          return Integer'Value (Pthread_Stack_Guard_Pages.all);
-       else
-          return Default_Stack_Guard_Pages;
-       end if;
-    exception
-       when others =>
-          return Default_Stack_Guard_Pages;
-    end Stack_Guard_Pages;
- 
-    --------------------------
-    -- Pthread_Sched_Signal --
-    --------------------------
- 
-    function Pthread_Sched_Signal return Integer is
-    begin
-       return Default_Pthread_Sched_Signal;
-    end Pthread_Sched_Signal;
- 
-    ------------------------
-    -- Pthread_Arena_Size --
-    ------------------------
- 
-    function Pthread_Arena_Size  return Integer is
-       Pthread_Arena_Size : constant GNAT.OS_Lib.String_Access :=
-         GNAT.OS_Lib.Getenv ("PTHREAD_ARENA_SIZE");
- 
-    begin
-       if Pthread_Arena_Size.all'Length = 0 then
-          return Default_Pthread_Arena_Size;
-       else
-          return Integer'Value (Pthread_Arena_Size.all);
-       end if;
-    exception
-       when others =>
-          return Default_Pthread_Arena_Size;
-    end Pthread_Arena_Size;
- 
-    -------------------------
-    -- Os_Default_Priority --
-    -------------------------
- 
-    function Os_Default_Priority return Integer is
-    begin
-       return Default_Os_Default_Priority;
-    end Os_Default_Priority;
- 
- end System.Program_Info;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5gproinf.ads gcc-4.0.0/gcc/ada/5gproinf.ads
*** gcc-3.4.3/gcc/ada/5gproinf.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/5gproinf.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,96 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                 S Y S T E M . P R O G R A M  _  I N F O                  --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --          Copyright (C) 1997-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package contains the definitions and routines used as parameters
- --  to the run-time system at program startup for the SGI implementation.
- 
- package System.Program_Info is
- 
-    function Initial_Sproc_Count return Integer;
-    --
-    --  The number of sproc created at program startup for scheduling
-    --  threads.
-    --
- 
-    function Max_Sproc_Count     return Integer;
-    --
-    --  The maximum number of sprocs that can be created by the program
-    --  for servicing threads.  This limit includes both the pre-created
-    --  sprocs and those explicitly created under program control.
-    --
- 
-    function Sproc_Stack_Size    return Integer;
-    --
-    --  The size, in bytes, of the sproc's initial stack.
-    --
- 
-    function Default_Time_Slice  return Duration;
-    --
-    --  The default time quanta for round-robin scheduling of threads of
-    --  equal priority.  This default value can be overridden on a per-task
-    --  basis by specifying an alternate value via the implementation-defined
-    --  Task_Info pragma. See s-tasinf.ads for more information.
-    --
- 
-    function Default_Task_Stack  return Integer;
-    --
-    --  The default stack size for each created thread.  This default value
-    --  can be overriden on a per-task basis by the language-defined
-    --  Storage_Size pragma.
-    --
- 
-    function Stack_Guard_Pages   return Integer;
-    --
-    --  The number of non-writable, guard pages to append to the bottom of
-    --  each thread's stack.
-    --
- 
-    function Pthread_Sched_Signal return Integer;
-    --
-    --  The signal used by the Pthreads library to affect scheduling actions
-    --  in remote sprocs.
-    --
- 
-    function Pthread_Arena_Size  return Integer;
-    --
-    --  The size of the shared arena from which pthread locks are allocated.
-    --  See the usinit(3p) man page for more information on shared arenas.
-    --
- 
-    function Os_Default_Priority return Integer;
-    --
-    --  The default Irix Non-Degrading priority for each sproc created to
-    --  service threads.
-    --
- 
- end System.Program_Info;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5gsystem.ads gcc-4.0.0/gcc/ada/5gsystem.ads
*** gcc-3.4.3/gcc/ada/5gsystem.ads	Wed Nov 12 21:24:19 2003
--- gcc-4.0.0/gcc/ada/5gsystem.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,153 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                        GNAT RUN-TIME COMPONENTS                          --
- --                                                                          --
- --                               S Y S T E M                                --
- --                                                                          --
- --                                 S p e c                                  --
- --                           (SGI Irix, n32 ABI)                            --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the  contents of the part following the private keyword. --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- package System is
- pragma Pure (System);
- --  Note that we take advantage of the implementation permission to
- --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
- 
-    type Name is (SYSTEM_NAME_GNAT);
-    System_Name : constant Name := SYSTEM_NAME_GNAT;
- 
-    --  System-Dependent Named Numbers
- 
-    Min_Int               : constant := Long_Long_Integer'First;
-    Max_Int               : constant := Long_Long_Integer'Last;
- 
-    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
-    Max_Nonbinary_Modulus : constant := Integer'Last;
- 
-    Max_Base_Digits       : constant := Long_Long_Float'Digits;
-    Max_Digits            : constant := Long_Long_Float'Digits;
- 
-    Max_Mantissa          : constant := 63;
-    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
- 
-    Tick                  : constant := 0.01;
- 
-    --  Storage-related Declarations
- 
-    type Address is private;
-    Null_Address : constant Address;
- 
-    Storage_Unit : constant := 8;
-    Word_Size    : constant := 64;
-    Memory_Size  : constant := 2 ** 32;
- 
-    --  Address comparison
- 
-    function "<"  (Left, Right : Address) return Boolean;
-    function "<=" (Left, Right : Address) return Boolean;
-    function ">"  (Left, Right : Address) return Boolean;
-    function ">=" (Left, Right : Address) return Boolean;
-    function "="  (Left, Right : Address) return Boolean;
- 
-    pragma Import (Intrinsic, "<");
-    pragma Import (Intrinsic, "<=");
-    pragma Import (Intrinsic, ">");
-    pragma Import (Intrinsic, ">=");
-    pragma Import (Intrinsic, "=");
- 
-    --  Other System-Dependent Declarations
- 
-    type Bit_Order is (High_Order_First, Low_Order_First);
-    Default_Bit_Order : constant Bit_Order := High_Order_First;
- 
-    --  Priority-related Declarations (RM D.1)
- 
-    Max_Priority           : constant Positive := 30;
-    Max_Interrupt_Priority : constant Positive := 31;
- 
-    subtype Any_Priority       is Integer      range  0 .. 31;
-    subtype Priority           is Any_Priority range  0 .. 30;
-    subtype Interrupt_Priority is Any_Priority range 31 .. 31;
- 
-    Default_Priority : constant Priority := 15;
- 
- private
- 
-    type Address is mod Memory_Size;
-    Null_Address : constant Address := 0;
- 
-    --------------------------------------
-    -- System Implementation Parameters --
-    --------------------------------------
- 
-    --  These parameters provide information about the target that is used
-    --  by the compiler. They are in the private part of System, where they
-    --  can be accessed using the special circuitry in the Targparm unit
-    --  whose source should be consulted for more detailed descriptions
-    --  of the individual switch values.
- 
-    AAMP                      : constant Boolean := False;
-    Backend_Divide_Checks     : constant Boolean := False;
-    Backend_Overflow_Checks   : constant Boolean := False;
-    Command_Line_Args         : constant Boolean := True;
-    Configurable_Run_Time     : constant Boolean := False;
-    Denorm                    : constant Boolean := False;
-    Duration_32_Bits          : constant Boolean := False;
-    Exit_Status_Supported     : constant Boolean := True;
-    Fractional_Fixed_Ops      : constant Boolean := False;
-    Frontend_Layout           : constant Boolean := False;
-    Functions_Return_By_DSP   : constant Boolean := False;
-    Machine_Overflows         : constant Boolean := False;
-    Machine_Rounds            : constant Boolean := True;
-    OpenVMS                   : constant Boolean := False;
-    Signed_Zeros              : constant Boolean := True;
-    Stack_Check_Default       : constant Boolean := False;
-    Stack_Check_Probes        : constant Boolean := True;
-    Support_64_Bit_Divides    : constant Boolean := True;
-    Support_Aggregates        : constant Boolean := True;
-    Support_Composite_Assign  : constant Boolean := True;
-    Support_Composite_Compare : constant Boolean := True;
-    Support_Long_Shifts       : constant Boolean := True;
-    Suppress_Standard_Library : constant Boolean := False;
-    Use_Ada_Main_Program_Name : constant Boolean := False;
-    ZCX_By_Default            : constant Boolean := False;
-    GCC_ZCX_Support           : constant Boolean := False;
-    Front_End_ZCX_Support     : constant Boolean := False;
- 
-    --  Obsolete entries, to be removed eventually (bootstrap issues!)
- 
-    High_Integrity_Mode       : constant Boolean := False;
-    Long_Shifts_Inlined       : constant Boolean := True;
- 
-    --  Note: Denorm is False because denormals are not supported on the
-    --  R10000, and we want the code to be valid for this processor.
- 
- end System;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5gtaprop.adb gcc-4.0.0/gcc/ada/5gtaprop.adb
*** gcc-3.4.3/gcc/ada/5gtaprop.adb	Mon Jan 26 21:57:33 2004
--- gcc-4.0.0/gcc/ada/5gtaprop.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,969 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
- --                                                                          --
- --     S Y S T E M . T A S K _ P R I M I T I V E S . O P E R A T I O N S    --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --         Copyright (C) 1992-2004, Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is an Irix (old athread library) version of this package
- 
- --  This package contains all the GNULL primitives that interface directly
- --  with the underlying OS.
- 
- pragma Polling (Off);
- --  Turn off polling, we do not want ATC polling to take place during
- --  tasking operations. It causes infinite loops and other problems.
- 
- with Interfaces.C;
- --  used for int
- --           size_t
- 
- with System.Tasking.Debug;
- --  used for Known_Tasks
- 
- with System.Task_Info;
- 
- with System.Interrupt_Management;
- --  used for Keep_Unmasked
- --           Abort_Task_Interrupt
- --           Interrupt_ID
- 
- with System.Parameters;
- --  used for Size_Type
- 
- with System.Tasking;
- --  used for Ada_Task_Control_Block
- --           Task_ID
- 
- with System.Program_Info;
- --  used for Default_Task_Stack
- --           Default_Time_Slice
- --           Stack_Guard_Pages
- --           Pthread_Sched_Signal
- --           Pthread_Arena_Size
- 
- with System.Soft_Links;
- --  used for Defer/Undefer_Abort
- 
- --  Note that we do not use System.Tasking.Initialization directly since
- --  this is a higher level package that we shouldn't depend on. For example
- --  when using the restricted run time, it is replaced by
- --  System.Tasking.Restricted.Initialization
- 
- with System.OS_Primitives;
- --  used for Delay_Modes
- 
- with System.Storage_Elements;
- --  used for To_Address
- 
- with Unchecked_Conversion;
- with Unchecked_Deallocation;
- 
- package body System.Task_Primitives.Operations is
- 
-    use System.Tasking.Debug;
-    use System.Tasking;
-    use Interfaces.C;
-    use System.OS_Interface;
-    use System.Parameters;
-    use System.OS_Primitives;
- 
-    package SSL renames System.Soft_Links;
- 
-    -----------------
-    -- Local Data  --
-    -----------------
- 
-    --  The followings are logically constants, but need to be initialized
-    --  at run time.
- 
-    Single_RTS_Lock : aliased RTS_Lock;
-    --  This is a lock to allow only one thread of control in the RTS at
-    --  a time; it is used to execute in mutual exclusion from all other tasks.
-    --  Used mainly in Single_Lock mode, but also to protect All_Tasks_List
- 
-    Environment_Task_ID : Task_ID;
-    --  A variable to hold Task_ID for the environment task.
- 
-    Locking_Policy : Character;
-    pragma Import (C, Locking_Policy, "__gl_locking_policy");
- 
-    Clock_Address : constant System.Address :=
-      System.Storage_Elements.To_Address (16#200F90#);
- 
-    RT_Clock_Id : clockid_t;
-    for RT_Clock_Id'Address use Clock_Address;
- 
-    -----------------------
-    -- Local Subprograms --
-    -----------------------
- 
-    procedure Initialize_Athread_Library;
- 
-    function To_Task_ID is new Unchecked_Conversion (System.Address, Task_ID);
- 
-    function To_Address is new Unchecked_Conversion (Task_ID, System.Address);
- 
-    -------------------
-    --  Stack_Guard  --
-    -------------------
- 
-    --  The underlying thread system sets a guard page at the
-    --  bottom of a thread stack, so nothing is needed.
-    --  ??? Check the comment above
- 
-    procedure Stack_Guard (T : ST.Task_ID; On : Boolean) is
-       pragma Unreferenced (T);
-       pragma Unreferenced (On);
- 
-    begin
-       null;
-    end Stack_Guard;
- 
-    --------------------
-    -- Get_Thread_Id  --
-    --------------------
- 
-    function Get_Thread_Id (T : ST.Task_ID) return OSI.Thread_Id is
-    begin
-       return T.Common.LL.Thread;
-    end Get_Thread_Id;
- 
-    ----------
-    -- Self --
-    ----------
- 
-    function Self return Task_ID is
-    begin
-       return To_Task_ID (pthread_get_current_ada_tcb);
-    end Self;
- 
-    ---------------------
-    -- Initialize_Lock --
-    ---------------------
- 
-    --  Note: mutexes and cond_variables needed per-task basis are
-    --        initialized in Initialize_TCB and the Storage_Error is
-    --        handled. Other mutexes (such as RTS_Lock, Memory_Lock...)
-    --        used in RTS is initialized before any status change of RTS.
-    --        Therefore rasing Storage_Error in the following routines
-    --        should be able to be handled safely.
- 
-    procedure Initialize_Lock
-      (Prio : System.Any_Priority;
-       L    : access Lock)
-    is
-       Attributes : aliased pthread_mutexattr_t;
-       Result     : Interfaces.C.int;
- 
-    begin
-       Result := pthread_mutexattr_init (Attributes'Access);
- 
-       if Result = FUNC_ERR then
-          raise Storage_Error;
-       end if;
- 
-       if Locking_Policy = 'C' then
- 
-          Result := pthread_mutexattr_setqueueorder
-            (Attributes'Access, MUTEX_PRIORITY_CEILING);
- 
-          pragma Assert (Result /= FUNC_ERR);
- 
-          Result := pthread_mutexattr_setceilingprio
-             (Attributes'Access, Interfaces.C.int (Prio));
- 
-          pragma Assert (Result /= FUNC_ERR);
-       end if;
- 
-       Result := pthread_mutex_init (L, Attributes'Access);
- 
-       if Result = FUNC_ERR then
-          Result := pthread_mutexattr_destroy (Attributes'Access);
-          raise Storage_Error;
-       end if;
- 
-       Result := pthread_mutexattr_destroy (Attributes'Access);
-    end Initialize_Lock;
- 
-    procedure Initialize_Lock (L : access RTS_Lock; Level : Lock_Level) is
-       pragma Unreferenced (Level);
- 
-       Attributes : aliased pthread_mutexattr_t;
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := pthread_mutexattr_init (Attributes'Access);
- 
-       if Result = FUNC_ERR then
-          raise Storage_Error;
-       end if;
- 
-       if Locking_Policy = 'C' then
-          Result := pthread_mutexattr_setqueueorder
-            (Attributes'Access, MUTEX_PRIORITY_CEILING);
-          pragma Assert (Result /= FUNC_ERR);
- 
-          Result := pthread_mutexattr_setceilingprio
-             (Attributes'Access, Interfaces.C.int (System.Any_Priority'Last));
-          pragma Assert (Result /= FUNC_ERR);
-       end if;
- 
-       Result := pthread_mutex_init (L, Attributes'Access);
- 
-       if Result = FUNC_ERR then
-          Result := pthread_mutexattr_destroy (Attributes'Access);
-          raise Storage_Error;
-       end if;
- 
-       Result := pthread_mutexattr_destroy (Attributes'Access);
-    end Initialize_Lock;
- 
-    -------------------
-    -- Finalize_Lock --
-    -------------------
- 
-    procedure Finalize_Lock (L : access Lock) is
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := pthread_mutex_destroy (L);
-       pragma Assert (Result = 0);
-    end Finalize_Lock;
- 
-    procedure Finalize_Lock (L : access RTS_Lock) is
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := pthread_mutex_destroy (L);
-       pragma Assert (Result = 0);
-    end Finalize_Lock;
- 
-    ----------------
-    -- Write_Lock --
-    ----------------
- 
-    procedure Write_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := pthread_mutex_lock (L);
- 
-       Ceiling_Violation := Result = FUNC_ERR and then errno = EINVAL;
-       pragma Assert (Result /= FUNC_ERR);
-    end Write_Lock;
- 
-    procedure Write_Lock
-      (L : access RTS_Lock; Global_Lock : Boolean := False)
-    is
-       Result : Interfaces.C.int;
- 
-    begin
-       if not Single_Lock or else Global_Lock then
-          Result := pthread_mutex_lock (L);
-          pragma Assert (Result = 0);
-       end if;
-    end Write_Lock;
- 
-    procedure Write_Lock (T : Task_ID) is
-       Result : Interfaces.C.int;
- 
-    begin
-       if not Single_Lock then
-          Result := pthread_mutex_lock (T.Common.LL.L'Access);
-          pragma Assert (Result = 0);
-       end if;
-    end Write_Lock;
- 
-    ---------------
-    -- Read_Lock --
-    ---------------
- 
-    procedure Read_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
-    begin
-       Write_Lock (L, Ceiling_Violation);
-    end Read_Lock;
- 
-    ------------
-    -- Unlock --
-    ------------
- 
-    procedure Unlock (L : access Lock) is
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := pthread_mutex_unlock (L);
-       pragma Assert (Result = 0);
-    end Unlock;
- 
-    procedure Unlock (L : access RTS_Lock; Global_Lock : Boolean := False) is
-       Result : Interfaces.C.int;
- 
-    begin
-       if not Single_Lock or else Global_Lock then
-          Result := pthread_mutex_unlock (L);
-          pragma Assert (Result = 0);
-       end if;
-    end Unlock;
- 
-    procedure Unlock (T : Task_ID) is
-       Result : Interfaces.C.int;
- 
-    begin
-       if not Single_Lock then
-          Result := pthread_mutex_unlock (T.Common.LL.L'Access);
-          pragma Assert (Result = 0);
-       end if;
-    end Unlock;
- 
-    -----------
-    -- Sleep --
-    -----------
- 
-    procedure Sleep
-      (Self_ID  : ST.Task_ID;
-       Reason   : System.Tasking.Task_States)
-    is
-       pragma Unreferenced (Reason);
- 
-       Result : Interfaces.C.int;
- 
-    begin
-       if Single_Lock then
-          Result := pthread_cond_wait
-            (Self_ID.Common.LL.CV'Access, Single_RTS_Lock'Access);
-       else
-          Result := pthread_cond_wait
-            (Self_ID.Common.LL.CV'Access, Self_ID.Common.LL.L'Access);
-       end if;
- 
-       --  EINTR is not considered a failure.
- 
-       pragma Assert (Result = 0 or else Result = EINTR);
-    end Sleep;
- 
-    -----------------
-    -- Timed_Sleep --
-    -----------------
- 
-    procedure Timed_Sleep
-      (Self_ID  : Task_ID;
-       Time     : Duration;
-       Mode     : ST.Delay_Modes;
-       Reason   : System.Tasking.Task_States;
-       Timedout : out Boolean;
-       Yielded  : out Boolean)
-    is
-       pragma Unreferenced (Reason);
- 
-       Check_Time : constant Duration := Monotonic_Clock;
-       Abs_Time   : Duration;
-       Request    : aliased struct_timeval;
-       Result     : Interfaces.C.int;
- 
-    begin
-       Timedout := True;
-       Yielded := False;
- 
-       if Mode = Relative then
-          Abs_Time := Duration'Min (Time, Max_Sensible_Delay) + Check_Time;
-       else
-          Abs_Time := Duration'Min (Check_Time + Max_Sensible_Delay, Time);
-       end if;
- 
-       if Abs_Time > Check_Time then
-          Request := To_Timeval (Abs_Time);
- 
-          loop
-             exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level
-               or else Self_ID.Pending_Priority_Change;
- 
-             if Single_Lock then
-                Result := pthread_cond_timedwait
-                  (Self_ID.Common.LL.CV'Access, Single_RTS_Lock'Access,
-                   Request'Access);
- 
-             else
-                Result := pthread_cond_timedwait
-                  (Self_ID.Common.LL.CV'Access, Self_ID.Common.LL.L'Access,
-                   Request'Access);
-             end if;
- 
-             exit when Abs_Time <= Monotonic_Clock;
- 
-             if Result = 0 or Result = EINTR then
-                --  somebody may have called Wakeup for us
-                Timedout := False;
-                exit;
-             end if;
- 
-             pragma Assert (Result = ETIMEDOUT
-               or else (Result = -1 and then errno = EAGAIN));
-          end loop;
-       end if;
-    end Timed_Sleep;
- 
-    -----------------
-    -- Timed_Delay --
-    -----------------
- 
-    procedure Timed_Delay
-      (Self_ID  : Task_ID;
-       Time     : Duration;
-       Mode     : ST.Delay_Modes)
-    is
-       Check_Time : constant Duration := Monotonic_Clock;
-       Abs_Time   : Duration;
-       Request    : aliased struct_timeval;
-       Result     : Interfaces.C.int;
- 
-    begin
-       --  Only the little window between deferring abort and
-       --  locking Self_ID is the reason we need to
-       --  check for pending abort and priority change below!
- 
-       SSL.Abort_Defer.all;
- 
-       if Single_Lock then
-          Lock_RTS;
-       end if;
- 
-       Write_Lock (Self_ID);
- 
-       if Mode = Relative then
-          Abs_Time := Time + Check_Time;
-       else
-          Abs_Time := Duration'Min (Check_Time + Max_Sensible_Delay, Time);
-       end if;
- 
-       if Abs_Time > Check_Time then
-          Request := To_Timeval (Abs_Time);
-          Self_ID.Common.State := Delay_Sleep;
- 
-          loop
-             if Self_ID.Pending_Priority_Change then
-                Self_ID.Pending_Priority_Change := False;
-                Self_ID.Common.Base_Priority := Self_ID.New_Base_Priority;
-                Set_Priority (Self_ID, Self_ID.Common.Base_Priority);
-             end if;
- 
-             exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level;
- 
-             if Single_Lock then
-                Result := pthread_cond_timedwait (Self_ID.Common.LL.CV'Access,
-                  Single_RTS_Lock'Access, Request'Access);
-             else
-                Result := pthread_cond_timedwait (Self_ID.Common.LL.CV'Access,
-                  Self_ID.Common.LL.L'Access, Request'Access);
-             end if;
- 
-             exit when Abs_Time <= Monotonic_Clock;
- 
-             pragma Assert (Result = 0 or else
-               Result = ETIMEDOUT or else
-               (Result = -1 and then errno = EAGAIN) or else
-               Result = EINTR);
-          end loop;
- 
-          Self_ID.Common.State := Runnable;
-       end if;
- 
-       Unlock (Self_ID);
- 
-       if Single_Lock then
-          Unlock_RTS;
-       end if;
- 
-       pthread_yield;
-       SSL.Abort_Undefer.all;
-    end Timed_Delay;
- 
-    ---------------------
-    -- Monotonic_Clock --
-    ---------------------
- 
-    function Monotonic_Clock return Duration is
-       type timeval is record
-          tv_sec  : Integer;
-          tv_usec : Integer;
-       end record;
-       pragma Convention (C, timeval);
- 
-       tv : aliased timeval;
- 
-       procedure gettimeofday (tp : access timeval);
-       pragma Import (C, gettimeofday, "gettimeofday", "gettimeofday");
- 
-    begin
-       gettimeofday (tv'Access);
-       return Duration (tv.tv_sec) + Duration (tv.tv_usec) / 1_000_000.0;
-    end Monotonic_Clock;
- 
-    -------------------
-    -- RT_Resolution --
-    -------------------
- 
-    function RT_Resolution return Duration is
-    begin
-       return 10#1.0#E-6;
-    end RT_Resolution;
- 
-    ------------
-    -- Wakeup --
-    ------------
- 
-    procedure Wakeup
-      (T : ST.Task_ID;
-       Reason : System.Tasking.Task_States)
-    is
-       pragma Unreferenced (Reason);
- 
-       Result : Interfaces.C.int;
-    begin
-       Result := pthread_cond_signal (T.Common.LL.CV'Access);
-       pragma Assert (Result = 0);
-    end Wakeup;
- 
-    -----------
-    -- Yield --
-    -----------
- 
-    procedure Yield (Do_Yield : Boolean := True) is
-    begin
-       if Do_Yield then
-          pthread_yield;
-       end if;
-    end Yield;
- 
-    ------------------
-    -- Set_Priority --
-    ------------------
- 
-    procedure Set_Priority
-      (T                   : Task_ID;
-       Prio                : System.Any_Priority;
-       Loss_Of_Inheritance : Boolean := False)
-    is
-       pragma Unreferenced (Loss_Of_Inheritance);
- 
-       Result : Interfaces.C.int;
- 
-    begin
-       T.Common.Current_Priority := Prio;
-       Result := pthread_setprio (T.Common.LL.Thread, Interfaces.C.int (Prio));
-       pragma Assert (Result /= FUNC_ERR);
- 
-    end Set_Priority;
- 
-    ------------------
-    -- Get_Priority --
-    ------------------
- 
-    function Get_Priority (T : Task_ID) return System.Any_Priority is
-    begin
-       return T.Common.Current_Priority;
-    end Get_Priority;
- 
-    ----------------
-    -- Enter_Task --
-    ----------------
- 
-    procedure Enter_Task (Self_ID : Task_ID) is
-       Result : Interfaces.C.int;
- 
-    begin
-       Self_ID.Common.LL.Thread := pthread_self;
-       Self_ID.Common.LL.LWP := sproc_self;
- 
-       Result :=
-         pthread_set_ada_tcb (Self_ID.Common.LL.Thread, To_Address (Self_ID));
- 
-       pragma Assert (Result = 0);
- 
-       Lock_RTS;
- 
-       for J in Known_Tasks'Range loop
-          if Known_Tasks (J) = null then
-             Known_Tasks (J) := Self_ID;
-             Self_ID.Known_Tasks_Index := J;
-             exit;
-          end if;
-       end loop;
- 
-       Unlock_RTS;
-    end Enter_Task;
- 
-    --------------
-    -- New_ATCB --
-    --------------
- 
-    function New_ATCB (Entry_Num : Task_Entry_Index) return Task_ID is
-    begin
-       return new Ada_Task_Control_Block (Entry_Num);
-    end New_ATCB;
- 
-    -------------------
-    -- Is_Valid_Task --
-    -------------------
- 
-    function Is_Valid_Task return Boolean is
-    begin
-       return False;
-    end Is_Valid_Task;
- 
-    -----------------------------
-    -- Register_Foreign_Thread --
-    -----------------------------
- 
-    function Register_Foreign_Thread return Task_ID is
-    begin
-       return null;
-    end Register_Foreign_Thread;
- 
-    ----------------------
-    --  Initialize_TCB  --
-    ----------------------
- 
-    procedure Initialize_TCB (Self_ID : Task_ID; Succeeded : out Boolean) is
-       Result    : Interfaces.C.int;
-       Cond_Attr : aliased pthread_condattr_t;
- 
-    begin
-       if not Single_Lock then
-          Initialize_Lock (Self_ID.Common.LL.L'Access, ATCB_Level);
-       end if;
- 
-       Result := pthread_condattr_init (Cond_Attr'Access);
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result = 0 then
-          Result := pthread_cond_init (Self_ID.Common.LL.CV'Access,
-            Cond_Attr'Access);
-          pragma Assert (Result = 0 or else Result = ENOMEM);
-       end if;
- 
-       if Result = 0 then
-          Succeeded := True;
-       else
-          if not Single_Lock then
-             Result := pthread_mutex_destroy (Self_ID.Common.LL.L'Access);
-             pragma Assert (Result = 0);
-          end if;
- 
-          Succeeded := False;
-       end if;
- 
-       Result := pthread_condattr_destroy (Cond_Attr'Access);
-       pragma Assert (Result = 0);
-    end Initialize_TCB;
- 
-    -----------------
-    -- Create_Task --
-    -----------------
- 
-    procedure Create_Task
-      (T          : Task_ID;
-       Wrapper    : System.Address;
-       Stack_Size : System.Parameters.Size_Type;
-       Priority   : System.Any_Priority;
-       Succeeded  : out Boolean)
-    is
-       Attributes          : aliased pthread_attr_t;
-       Adjusted_Stack_Size : Interfaces.C.size_t;
-       Result              : Interfaces.C.int;
- 
-       function Thread_Body_Access is new
-         Unchecked_Conversion (System.Address, start_addr);
- 
-       function To_Resource_T is new Unchecked_Conversion
-         (System.Task_Info.Resource_Vector_T, System.OS_Interface.resource_t);
- 
-       use System.Task_Info;
- 
-    begin
-       if Stack_Size = Unspecified_Size then
-          Adjusted_Stack_Size :=
-            Interfaces.C.size_t (System.Program_Info.Default_Task_Stack);
- 
-       elsif Stack_Size < Minimum_Stack_Size then
-          Adjusted_Stack_Size := Interfaces.C.size_t (Minimum_Stack_Size);
- 
-       else
-          Adjusted_Stack_Size := Interfaces.C.size_t (Stack_Size);
-       end if;
- 
-       Result := pthread_attr_init (Attributes'Access);
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result /= 0 then
-          Succeeded := False;
-          return;
-       end if;
- 
-       Result := pthread_attr_setdetachstate (Attributes'Access, 1);
-       pragma Assert (Result = 0);
- 
-       Result := pthread_attr_setstacksize
-         (Attributes'Access, Adjusted_Stack_Size);
-       pragma Assert (Result = 0);
- 
-       if T.Common.Task_Info /= null then
-          Result := pthread_attr_setresources
-            (Attributes'Access,
-             To_Resource_T (T.Common.Task_Info.Thread_Resources));
-          pragma Assert (Result /= FUNC_ERR);
- 
-          if T.Common.Task_Info.Thread_Timeslice /= 0.0 then
-             declare
-                use System.OS_Interface;
- 
-                Tv : aliased struct_timeval := To_Timeval
-                  (T.Common.Task_Info.Thread_Timeslice);
-             begin
-                Result := pthread_attr_set_tslice
-                  (Attributes'Access, Tv'Access);
-             end;
-          end if;
- 
-          if T.Common.Task_Info.Bound_To_Sproc then
-             Result := pthread_attr_set_boundtosproc
-               (Attributes'Access, PTHREAD_BOUND);
-             Result := pthread_attr_set_bsproc
-               (Attributes'Access, T.Common.Task_Info.Sproc);
-          end if;
- 
-       end if;
- 
-       --  Since the initial signal mask of a thread is inherited from the
-       --  creator, and the Environment task has all its signals masked, we
-       --  do not need to manipulate caller's signal mask at this point.
-       --  All tasks in RTS will have All_Tasks_Mask initially.
- 
-       Result := pthread_create
-         (T.Common.LL.Thread'Access,
-          Attributes'Access,
-          Thread_Body_Access (Wrapper),
-          To_Address (T));
-       pragma Assert (Result = 0 or else Result = EAGAIN);
- 
-       Succeeded := Result = 0;
- 
-       Set_Priority (T, Priority);
- 
-       Result := pthread_attr_destroy (Attributes'Access);
-       pragma Assert (Result /= FUNC_ERR);
-    end Create_Task;
- 
-    ------------------
-    -- Finalize_TCB --
-    ------------------
- 
-    procedure Finalize_TCB (T : Task_ID) is
-       procedure Free is new
-         Unchecked_Deallocation (Ada_Task_Control_Block, Task_ID);
- 
-       Result : Interfaces.C.int;
-       Tmp    : Task_ID := T;
- 
-    begin
-       if not Single_Lock then
-          Result := pthread_mutex_destroy (T.Common.LL.L'Access);
-          pragma Assert (Result = 0);
-       end if;
- 
-       Result := pthread_cond_destroy (T.Common.LL.CV'Access);
-       pragma Assert (Result = 0);
- 
-       if T.Known_Tasks_Index /= -1 then
-          Known_Tasks (T.Known_Tasks_Index) := null;
-       end if;
- 
-       Free (Tmp);
-    end Finalize_TCB;
- 
-    ---------------
-    -- Exit_Task --
-    ---------------
- 
-    procedure Exit_Task is
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := pthread_set_ada_tcb (pthread_self, System.Null_Address);
- 
-       pragma Assert (Result = 0);
-    end Exit_Task;
- 
-    ----------------
-    -- Abort_Task --
-    ----------------
- 
-    procedure Abort_Task (T : Task_ID) is
-       Result : Interfaces.C.int;
- 
-    begin
-       Result :=
-         pthread_kill (T.Common.LL.Thread,
-                       Interfaces.C.int
-                         (System.Interrupt_Management.Abort_Task_Interrupt));
-       pragma Assert (Result = 0);
-    end Abort_Task;
- 
-    ----------------
-    -- Check_Exit --
-    ----------------
- 
-    --  Dummy version
- 
-    function Check_Exit (Self_ID : ST.Task_ID) return Boolean is
-       pragma Unreferenced (Self_ID);
- 
-    begin
-       return True;
-    end Check_Exit;
- 
-    --------------------
-    -- Check_No_Locks --
-    --------------------
- 
-    function Check_No_Locks (Self_ID : ST.Task_ID) return Boolean is
-       pragma Unreferenced (Self_ID);
- 
-    begin
-       return True;
-    end Check_No_Locks;
- 
-    ----------------------
-    -- Environment_Task --
-    ----------------------
- 
-    function Environment_Task return Task_ID is
-    begin
-       return Environment_Task_ID;
-    end Environment_Task;
- 
-    --------------
-    -- Lock_RTS --
-    --------------
- 
-    procedure Lock_RTS is
-    begin
-       Write_Lock (Single_RTS_Lock'Access, Global_Lock => True);
-    end Lock_RTS;
- 
-    ----------------
-    -- Unlock_RTS --
-    ----------------
- 
-    procedure Unlock_RTS is
-    begin
-       Unlock (Single_RTS_Lock'Access, Global_Lock => True);
-    end Unlock_RTS;
- 
-    ------------------
-    -- Suspend_Task --
-    ------------------
- 
-    function Suspend_Task
-      (T           : ST.Task_ID;
-       Thread_Self : Thread_Id) return Boolean
-    is
-    begin
-       if T.Common.LL.Thread /= Thread_Self then
-          return pthread_suspend (T.Common.LL.Thread) = 0;
-       else
-          return True;
-       end if;
-    end Suspend_Task;
- 
-    -----------------
-    -- Resume_Task --
-    -----------------
- 
-    function Resume_Task
-      (T           : ST.Task_ID;
-       Thread_Self : Thread_Id) return Boolean
-    is
-    begin
-       if T.Common.LL.Thread /= Thread_Self then
-          return pthread_resume (T.Common.LL.Thread) = 0;
-       else
-          return True;
-       end if;
-    end Resume_Task;
- 
-    ----------------
-    -- Initialize --
-    ----------------
- 
-    procedure Initialize (Environment_Task : Task_ID) is
-    begin
-       Environment_Task_ID := Environment_Task;
- 
-       Initialize_Lock (Single_RTS_Lock'Access, RTS_Lock_Level);
-       --  Initialize the lock used to synchronize chain of all ATCBs.
- 
-       Enter_Task (Environment_Task);
- 
-       Set_Priority (Environment_Task,
-         Environment_Task.Common.Current_Priority);
-    end Initialize;
- 
-    --------------------------------
-    -- Initialize_Athread_Library --
-    --------------------------------
- 
-    procedure Initialize_Athread_Library is
-       Result : Interfaces.C.int;
-       Init   : aliased pthread_init_struct;
- 
-       package PINF renames System.Program_Info;
-       package C    renames Interfaces.C;
- 
-    begin
-       Init.conf_initsize       := C.int (PINF.Pthread_Arena_Size);
-       Init.max_sproc_count     := C.int (PINF.Max_Sproc_Count);
-       Init.sproc_stack_size    := C.size_t (PINF.Sproc_Stack_Size);
-       Init.os_default_priority := C.int (PINF.Os_Default_Priority);
-       Init.os_sched_signal     := C.int (PINF.Pthread_Sched_Signal);
-       Init.guard_pages         := C.int (PINF.Stack_Guard_Pages);
-       Init.init_sproc_count    := C.int (PINF.Initial_Sproc_Count);
- 
-       Result := pthread_exec_begin (Init'Access);
-       pragma Assert (Result /= FUNC_ERR);
- 
-       if Result = FUNC_ERR then
-          raise Storage_Error;               --  Insufficient resources.
-       end if;
- 
-    end Initialize_Athread_Library;
- 
- begin
-    Initialize_Athread_Library;
- end System.Task_Primitives.Operations;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5gtasinf.adb gcc-4.0.0/gcc/ada/5gtasinf.adb
*** gcc-3.4.3/gcc/ada/5gtasinf.adb	Mon Jan 26 21:57:33 2004
--- gcc-4.0.0/gcc/ada/5gtasinf.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,327 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                     S Y S T E M . T A S K _ I N F O                      --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package body contains the routines associated with the implementation
- --  of the Task_Info pragma.
- 
- --  This is the SGI specific version of this module.
- 
- with Interfaces.C;
- with System.OS_Interface;
- with System;
- with Unchecked_Conversion;
- 
- package body System.Task_Info is
- 
-    use System.OS_Interface;
-    use type Interfaces.C.int;
- 
-    function To_Resource_T is new
-      Unchecked_Conversion (Resource_Vector_T, resource_t);
- 
-    MP_NPROCS : constant := 1;
- 
-    function Sysmp (Cmd : Integer) return Integer;
-    pragma Import (C, Sysmp);
- 
-    function Num_Processors (Cmd : Integer := MP_NPROCS) return Integer
-      renames Sysmp;
- 
-    function Geteuid return Integer;
-    pragma Import (C, Geteuid);
- 
-    Locking_Map : constant array (Page_Locking) of Interfaces.C.int :=
-      (NOLOCK   => 0,
-       PROCLOCK => 1,
-       TXTLOCK  => 2,
-       DATLOCK  => 4);
- 
-    -------------------------------
-    -- Resource_Vector_Functions --
-    -------------------------------
- 
-    package body Resource_Vector_Functions is
- 
-       ---------
-       -- "+" --
-       ---------
- 
-       function "+" (R : Resource_T) return Resource_Vector_T is
-          Result  : Resource_Vector_T  := NO_RESOURCES;
- 
-       begin
-          Result (Resource_T'Pos (R)) := True;
-          return Result;
-       end "+";
- 
-       function "+" (R1, R2 : Resource_T) return Resource_Vector_T is
-          Result  : Resource_Vector_T  := NO_RESOURCES;
- 
-       begin
-          Result (Resource_T'Pos (R1)) := True;
-          Result (Resource_T'Pos (R2)) := True;
-          return Result;
-       end "+";
- 
-       function "+"
-         (R    : Resource_T;
-          S    : Resource_Vector_T)
-          return Resource_Vector_T
-       is
-          Result  : Resource_Vector_T := S;
- 
-       begin
-          Result (Resource_T'Pos (R)) := True;
-          return Result;
-       end "+";
- 
-       function "+"
-         (S    : Resource_Vector_T;
-          R    : Resource_T)
-          return Resource_Vector_T
-       is
-          Result  : Resource_Vector_T :=  S;
- 
-       begin
-          Result (Resource_T'Pos (R)) := True;
-          return Result;
-       end "+";
- 
-       function "+" (S1, S2 : Resource_Vector_T) return Resource_Vector_T is
-          Result  : Resource_Vector_T;
- 
-       begin
-          Result :=  S1 or S2;
-          return Result;
-       end "+";
- 
-       function "-"
-         (S    : Resource_Vector_T;
-          R    : Resource_T)
-          return Resource_Vector_T
-       is
-          Result  : Resource_Vector_T := S;
- 
-       begin
-          Result (Resource_T'Pos (R)) := False;
-          return Result;
-       end "-";
- 
-    end Resource_Vector_Functions;
- 
-    ---------------
-    -- New_Sproc --
-    ---------------
- 
-    function New_Sproc (Attr : Sproc_Attributes) return sproc_t is
-       Sproc_Attr : aliased sproc_attr_t;
-       Sproc      : aliased sproc_t;
-       Status     : int;
- 
-    begin
-       Status := sproc_attr_init (Sproc_Attr'Unrestricted_Access);
- 
-       if Status = 0 then
-          Status := sproc_attr_setresources
-            (Sproc_Attr'Unrestricted_Access,
-             To_Resource_T (Attr.Sproc_Resources));
- 
-          if Attr.CPU /= ANY_CPU then
-             if Attr.CPU > Num_Processors then
-                raise Invalid_CPU_Number;
-             end if;
- 
-             Status := sproc_attr_setcpu
-               (Sproc_Attr'Unrestricted_Access,
-                int (Attr.CPU));
-          end if;
- 
-          if Attr.Resident /= NOLOCK then
-             if Geteuid /= 0 then
-                raise Permission_Error;
-             end if;
- 
-             Status := sproc_attr_setresident
-               (Sproc_Attr'Unrestricted_Access,
-                 Locking_Map (Attr.Resident));
-          end if;
- 
-          if Attr.NDPRI /= NDP_NONE then
- --  ??? why is that comment out, should it be removed ?
- --          if Geteuid /= 0 then
- --             raise Permission_Error;
- --          end if;
- 
-             Status := sproc_attr_setprio
-               (Sproc_Attr'Unrestricted_Access,
-                int (Attr.NDPRI));
-          end if;
- 
-          Status := sproc_create
-            (Sproc'Unrestricted_Access,
-             Sproc_Attr'Unrestricted_Access,
-             null,
-             System.Null_Address);
- 
-          if Status /= 0 then
-             Status := sproc_attr_destroy (Sproc_Attr'Unrestricted_Access);
-             raise Sproc_Create_Error;
-          end if;
- 
-          Status := sproc_attr_destroy (Sproc_Attr'Unrestricted_Access);
- 
-       end if;
- 
-       if Status /= 0 then
-          raise Sproc_Create_Error;
-       end if;
- 
-       return Sproc;
-    end New_Sproc;
- 
-    ---------------
-    -- New_Sproc --
-    ---------------
- 
-    function New_Sproc
-      (Sproc_Resources : Resource_Vector_T      := NO_RESOURCES;
-       CPU             : CPU_Number             := ANY_CPU;
-       Resident        : Page_Locking           := NOLOCK;
-       NDPRI           : Non_Degrading_Priority := NDP_NONE)
-       return            sproc_t
-    is
-       Attr : constant Sproc_Attributes :=
-         (Sproc_Resources, CPU, Resident, NDPRI);
- 
-    begin
-       return New_Sproc (Attr);
-    end New_Sproc;
- 
-    -------------------------------
-    -- Unbound_Thread_Attributes --
-    -------------------------------
- 
-    function Unbound_Thread_Attributes
-      (Thread_Resources : Resource_Vector_T := NO_RESOURCES;
-       Thread_Timeslice : Duration          := 0.0)
-       return             Thread_Attributes
-    is
-    begin
-       return (False, Thread_Resources, Thread_Timeslice);
-    end Unbound_Thread_Attributes;
- 
-    -----------------------------
-    -- Bound_Thread_Attributes --
-    -----------------------------
- 
-    function Bound_Thread_Attributes
-      (Thread_Resources : Resource_Vector_T := NO_RESOURCES;
-       Thread_Timeslice : Duration          := 0.0;
-       Sproc            : sproc_t)
-       return             Thread_Attributes
-    is
-    begin
-       return (True, Thread_Resources, Thread_Timeslice, Sproc);
-    end Bound_Thread_Attributes;
- 
-    -----------------------------
-    -- Bound_Thread_Attributes --
-    -----------------------------
- 
-    function Bound_Thread_Attributes
-      (Thread_Resources : Resource_Vector_T      := NO_RESOURCES;
-       Thread_Timeslice : Duration               := 0.0;
-       Sproc_Resources  : Resource_Vector_T      := NO_RESOURCES;
-       CPU              : CPU_Number             := ANY_CPU;
-       Resident         : Page_Locking           := NOLOCK;
-       NDPRI            : Non_Degrading_Priority := NDP_NONE)
-       return             Thread_Attributes
-    is
-       Sproc : constant sproc_t := New_Sproc
-         (Sproc_Resources, CPU, Resident, NDPRI);
- 
-    begin
-       return (True, Thread_Resources, Thread_Timeslice, Sproc);
-    end Bound_Thread_Attributes;
- 
-    -----------------------------------
-    -- New_Unbound_Thread_Attributes --
-    -----------------------------------
- 
-    function New_Unbound_Thread_Attributes
-      (Thread_Resources : Resource_Vector_T := NO_RESOURCES;
-       Thread_Timeslice : Duration          := 0.0)
-       return             Task_Info_Type
-    is
-    begin
-       return new Thread_Attributes'
-         (False, Thread_Resources, Thread_Timeslice);
-    end New_Unbound_Thread_Attributes;
- 
-    ---------------------------------
-    -- New_Bound_Thread_Attributes --
-    ---------------------------------
- 
-    function New_Bound_Thread_Attributes
-      (Thread_Resources : Resource_Vector_T := NO_RESOURCES;
-       Thread_Timeslice : Duration          := 0.0;
-       Sproc            : sproc_t)
-       return             Task_Info_Type
-    is
-    begin
-       return new Thread_Attributes'
-         (True, Thread_Resources, Thread_Timeslice, Sproc);
-    end  New_Bound_Thread_Attributes;
- 
-    ---------------------------------
-    -- New_Bound_Thread_Attributes --
-    ---------------------------------
- 
-    function New_Bound_Thread_Attributes
-      (Thread_Resources : Resource_Vector_T      := NO_RESOURCES;
-       Thread_Timeslice : Duration               := 0.0;
-       Sproc_Resources  : Resource_Vector_T      := NO_RESOURCES;
-       CPU              : CPU_Number             := ANY_CPU;
-       Resident         : Page_Locking           := NOLOCK;
-       NDPRI            : Non_Degrading_Priority := NDP_NONE)
-       return             Task_Info_Type
-    is
-       Sproc : constant sproc_t := New_Sproc
-         (Sproc_Resources, CPU, Resident, NDPRI);
- 
-    begin
-       return new Thread_Attributes'
-         (True, Thread_Resources, Thread_Timeslice, Sproc);
-    end  New_Bound_Thread_Attributes;
- 
- end System.Task_Info;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5gtasinf.ads gcc-4.0.0/gcc/ada/5gtasinf.ads
*** gcc-3.4.3/gcc/ada/5gtasinf.ads	Tue Oct 21 13:41:51 2003
--- gcc-4.0.0/gcc/ada/5gtasinf.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,284 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                     S Y S T E M . T A S K _ I N F O                      --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package contains the definitions and routines associated with the
- --  implementation and use of the Task_Info pragma. It is specialized
- --  appropriately for targets that make use of this pragma.
- 
- --  Note: the compiler generates direct calls to this interface, via Rtsfind.
- --  Any changes to this interface may require corresponding compiler changes.
- 
- --  This unit may be used directly from an application program by providing
- --  an appropriate WITH, and the interface can be expected to remain stable.
- 
- --  This is the SGI (libathread) specific version of this module.
- 
- with System.OS_Interface;
- 
- package System.Task_Info is
-    pragma Elaborate_Body;
-    --  To ensure that a body is allowed
- 
-    ---------------------------------------------------------
-    -- Binding of Tasks to sprocs and sprocs to processors --
-    ---------------------------------------------------------
- 
-    --  The SGI implementation of the GNU Low-Level Interface (GNULLI)
-    --  implements each Ada task as a Posix thread (Pthread). The SGI
-    --  Pthread library distributes threads across one or more processes
-    --  that are members of a common share group. Irix distributes
-    --  processes across the available CPUs on a given machine. The
-    --  pragma Task_Info provides the mechanism to control the distribution
-    --  of tasks to sprocs, and sprocs to processors.
- 
-    --  Each thread has a number of attributes that dictate it's scheduling.
-    --  These attributes are:
-    --
-    --      Bound_To_Sproc:  whether the thread is bound to a specific sproc
-    --                       for its entire lifetime.
-    --
-    --      Timeslice:       Amount of time that a thread is allowed to execute
-    --                       before the system yeilds control to another thread
-    --                       of equal priority.
-    --
-    --      Resource_Vector: A bitmask used to control the binding of threads
-    --                       to sprocs.
-    --
- 
-    --  Each share group process (sproc)
- 
-    --  The Task_Info pragma:
- 
-    --    pragma Task_Info (EXPRESSION);
- 
-    --  allows the specification on a task by task basis of a value of type
-    --  System.Task_Info.Task_Info_Type to be passed to a task when it is
-    --  created. The specification of this type, and the effect on the task
-    --  that is created is target dependent.
- 
-    --  The Task_Info pragma appears within a task definition (compare the
-    --  definition and implementation of pragma Priority). If no such pragma
-    --  appears, then the value Task_Info_Unspecified is passed. If a pragma
-    --  is present, then it supplies an alternative value. If the argument of
-    --  the pragma is a discriminant reference, then the value can be set on
-    --  a task by task basis by supplying the appropriate discriminant value.
- 
-    --  Note that this means that the type used for Task_Info_Type must be
-    --  suitable for use as a discriminant (i.e. a scalar or access type).
- 
-    ----------------------
-    -- Resource Vectors --
-    ----------------------
- 
-    --  <discussion>
- 
-    type Resource_Vector_T is array (0 .. 31) of Boolean;
-    pragma Pack (Resource_Vector_T);
- 
-    NO_RESOURCES : constant Resource_Vector_T := (others => False);
- 
-    generic
-       type Resource_T is (<>);
-       --  Discrete type up to 32 entries
- 
-    package Resource_Vector_Functions is
-       function "+"
-         (R    : Resource_T)
-          return Resource_Vector_T;
- 
-       function "+"
-         (R1   : Resource_T;
-          R2   : Resource_T)
-          return Resource_Vector_T;
- 
-       function "+"
-         (R    : Resource_T;
-          S    : Resource_Vector_T)
-          return Resource_Vector_T;
- 
-       function "+"
-         (S    : Resource_Vector_T;
-          R    : Resource_T)
-          return Resource_Vector_T;
- 
-       function "+"
-         (S1   : Resource_Vector_T;
-          S2   : Resource_Vector_T)
-          return Resource_Vector_T;
- 
-       function "-"
-         (S    : Resource_Vector_T;
-          R    : Resource_T)
-          return Resource_Vector_T;
-    end Resource_Vector_Functions;
- 
-    ----------------------
-    -- Sproc Attributes --
-    ----------------------
- 
-    subtype sproc_t is System.OS_Interface.sproc_t;
- 
-    subtype CPU_Number is Integer range -1 .. Integer'Last;
- 
-    ANY_CPU : constant CPU_Number := CPU_Number'First;
- 
-    type Non_Degrading_Priority is range 0 .. 255;
-    --  Specification of IRIX Non Degrading Priorities.
-    --
-    --  WARNING: IRIX priorities have the reverse meaning of Ada priorities.
-    --           The lower the priority value, the greater the greater the
-    --           scheduling preference.
-    --
-    --  See the schedctl(2) man page for a complete discussion of non-degrading
-    --  priorities.
- 
-    NDPHIMAX : constant Non_Degrading_Priority := 30;
-    NDPHIMIN : constant Non_Degrading_Priority := 39;
-    --  These priorities are higher than ALL normal user process priorities
- 
-    subtype NDP_High is Non_Degrading_Priority range NDPHIMAX .. NDPHIMIN;
- 
-    NDPNORMMAX : constant Non_Degrading_Priority := 40;
-    NDPNORMMIN : constant Non_Degrading_Priority := 127;
-    --  These priorities overlap normal user process priorities
- 
-    subtype NDP_Norm is Non_Degrading_Priority range NDPNORMMAX .. NDPNORMMIN;
- 
-    NDPLOMAX : constant Non_Degrading_Priority := 128;
-    NDPLOMIN : constant Non_Degrading_Priority := 254;
-    --  These priorities are below ALL normal user process priorities
- 
-    NDP_NONE   : constant Non_Degrading_Priority := 255;
- 
-    subtype NDP_LOW is Non_Degrading_Priority range NDPLOMAX .. NDPLOMIN;
- 
-    type Page_Locking is
-       (NOLOCK,     --  Do not lock pages in memory
-        PROCLOCK,   --  Lock text and data segments into memory (process lock)
-        TXTLOCK,    --  Lock text segment into memory (text lock)
-        DATLOCK     --  Lock data segment into memory (data lock)
-       );
- 
-    type Sproc_Attributes is record
-       Sproc_Resources : Resource_Vector_T      := NO_RESOURCES;
-       CPU             : CPU_Number             := ANY_CPU;
-       Resident        : Page_Locking           := NOLOCK;
-       NDPRI           : Non_Degrading_Priority := NDP_NONE;
- --  ??? why is that commented out, should it be removed ?
- --       Sproc_Slice     : Duration               := 0.0;
- --       Deadline_Period : Duration               := 0.0;
- --       Deadline_Alloc  : Duration               := 0.0;
-    end record;
- 
-    Default_Sproc_Attributes : constant Sproc_Attributes :=
-       (NO_RESOURCES, ANY_CPU, NOLOCK, NDP_NONE);
- 
-    function New_Sproc (Attr : Sproc_Attributes) return sproc_t;
-    function New_Sproc
-      (Sproc_Resources : Resource_Vector_T      := NO_RESOURCES;
-       CPU             : CPU_Number             := ANY_CPU;
-       Resident        : Page_Locking           := NOLOCK;
-       NDPRI           : Non_Degrading_Priority := NDP_NONE)
-       return            sproc_t;
-    --  Allocates a sproc_t control structure and creates the
-    --  corresponding sproc.
- 
-    Invalid_CPU_Number : exception;
-    Permission_Error   : exception;
-    Sproc_Create_Error : exception;
- 
-    -----------------------
-    -- Thread Attributes --
-    -----------------------
- 
-    type Thread_Attributes (Bound_To_Sproc : Boolean) is record
-       Thread_Resources : Resource_Vector_T := NO_RESOURCES;
- 
-       Thread_Timeslice : Duration          := 0.0;
- 
-       case Bound_To_Sproc is
-          when False =>
-             null;
-          when True   =>
-             Sproc : sproc_t;
-       end case;
-    end record;
- 
-    Default_Thread_Attributes : constant Thread_Attributes :=
-      (False, NO_RESOURCES, 0.0);
- 
-    function Unbound_Thread_Attributes
-      (Thread_Resources : Resource_Vector_T := NO_RESOURCES;
-       Thread_Timeslice : Duration          := 0.0)
-       return             Thread_Attributes;
- 
-    function Bound_Thread_Attributes
-      (Thread_Resources : Resource_Vector_T := NO_RESOURCES;
-       Thread_Timeslice : Duration          := 0.0;
-       Sproc            : sproc_t)
-       return             Thread_Attributes;
- 
-    function Bound_Thread_Attributes
-      (Thread_Resources : Resource_Vector_T      := NO_RESOURCES;
-       Thread_Timeslice : Duration               := 0.0;
-       Sproc_Resources  : Resource_Vector_T      := NO_RESOURCES;
-       CPU              : CPU_Number             := ANY_CPU;
-       Resident         : Page_Locking           := NOLOCK;
-       NDPRI            : Non_Degrading_Priority := NDP_NONE)
-       return             Thread_Attributes;
- 
-    type Task_Info_Type is access all Thread_Attributes;
- 
-    function New_Unbound_Thread_Attributes
-      (Thread_Resources : Resource_Vector_T := NO_RESOURCES;
-       Thread_Timeslice : Duration          := 0.0)
-       return             Task_Info_Type;
- 
-    function New_Bound_Thread_Attributes
-      (Thread_Resources : Resource_Vector_T := NO_RESOURCES;
-       Thread_Timeslice : Duration          := 0.0;
-       Sproc            : sproc_t)
-       return             Task_Info_Type;
- 
-    function New_Bound_Thread_Attributes
-      (Thread_Resources : Resource_Vector_T      := NO_RESOURCES;
-       Thread_Timeslice : Duration               := 0.0;
-       Sproc_Resources  : Resource_Vector_T      := NO_RESOURCES;
-       CPU              : CPU_Number             := ANY_CPU;
-       Resident         : Page_Locking           := NOLOCK;
-       NDPRI            : Non_Degrading_Priority := NDP_NONE)
-       return             Task_Info_Type;
- 
-    Unspecified_Task_Info : constant Task_Info_Type := null;
- 
- end System.Task_Info;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5gtpgetc.adb gcc-4.0.0/gcc/ada/5gtpgetc.adb
*** gcc-3.4.3/gcc/ada/5gtpgetc.adb	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5gtpgetc.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,207 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --     S Y S T E M . T A S K _ P R I M I T I V E S . G E N _ T C B I N F    --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --              Copyright (C) 1999-2000 Free Software Fundation             --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is an SGI Irix version of this package
- 
- --  This procedure creates the file "a-tcbinf.c"
- --  "A-tcbinf.c" is subsequently compiled and made part of the RTL
- --  to be referenced by the SGI Workshop debugger. The main procedure:
- --  "Gen_Tcbinf" imports this child procedure and runs as part of the
- --  RTL build process. Because of the complex process used to build
- --  the GNAT RTL for all the different systems and the frequent changes
- --  made to the internal data structures, its impractical to create
- --  "a-tcbinf.c" using a standalone process.
- with System.Tasking;
- with Ada.Text_IO;
- with Unchecked_Conversion;
- 
- procedure System.Task_Primitives.Gen_Tcbinf is
- 
-    use System.Tasking;
- 
-    subtype Version_String is String (1 .. 4);
- 
-    Version : constant Version_String := "3.11";
- 
-    function To_Integer is new Unchecked_Conversion
-      (Version_String, Integer);
- 
-    type Dummy_TCB_Ptr is access Ada_Task_Control_Block (Entry_Num => 0);
-    Dummy_TCB : constant Dummy_TCB_Ptr := new Ada_Task_Control_Block (0);
- 
-    C_File : Ada.Text_IO.File_Type;
- 
-    procedure Pl (S : String);
-    procedure Nl (C : Ada.Text_IO.Positive_Count := 1);
-    function State_Name (S : Task_States) return String;
- 
-    procedure Pl (S : String) is
-    begin
-       Ada.Text_IO.Put_Line (C_File, S);
-    end Pl;
- 
-    procedure Nl (C : Ada.Text_IO.Positive_Count := 1) is
-    begin
-       Ada.Text_IO.New_Line (C_File, C);
-    end Nl;
- 
-    function State_Name (S : Task_States) return String is
-    begin
-       case S is
-          when Unactivated =>
-             return "Unactivated";
-          when Runnable =>
-             return "Runnable";
-          when Terminated =>
-             return "Terminated";
-          when Activator_Sleep =>
-             return "Child Activation Wait";
-          when Acceptor_Sleep =>
-             return "Accept/Select Wait";
-          when Entry_Caller_Sleep =>
-             return "Waiting on Entry Call";
-          when Async_Select_Sleep =>
-             return "Async_Select Wait";
-          when Delay_Sleep =>
-             return "Delay Sleep";
-          when Master_Completion_Sleep =>
-             return "Child Termination Wait";
-          when Master_Phase_2_Sleep =>
-             return "Wait Child in Term Alt";
-          when Interrupt_Server_Idle_Sleep =>
-             return "Int Server Idle Sleep";
-          when Interrupt_Server_Blocked_Interrupt_Sleep =>
-             return "Int Server Blk Int Sleep";
-          when Timer_Server_Sleep =>
-             return "Timer Server Sleep";
-          when AST_Server_Sleep =>
-             return "AST Server Sleep";
-          when Asynchronous_Hold =>
-             return "Asynchronous Hold";
-          when Interrupt_Server_Blocked_On_Event_Flag =>
-             return "Int Server Blk Evt Flag";
-       end case;
-    end State_Name;
- 
-    All_Tasks_Link_Offset   : constant Integer
-      := Dummy_TCB.Common'Position + Dummy_TCB.Common.All_Tasks_Link'Position;
-    Entry_Count_Offset      : constant Integer
-      := Dummy_TCB.Entry_Num'Position;
-    Entry_Point_Offset      : constant Integer
-      := Dummy_TCB.Common'Position + Dummy_TCB.Common.Task_Entry_Point'Position;
-    Parent_Offset           : constant Integer
-      := Dummy_TCB.Common'Position + Dummy_TCB.Common.Parent'Position;
-    Base_Priority_Offset    : constant Integer
-      := Dummy_TCB.Common'Position + Dummy_TCB.Common.Base_Priority'Position;
-    Current_Priority_Offset : constant Integer
-      := Dummy_TCB.Common'Position + Dummy_TCB.Common.Current_Priority'Position;
-    Stack_Size_Offset       : constant Integer
-      := Dummy_TCB.Common'Position +
-        Dummy_TCB.Common.Compiler_Data.Pri_Stack_Info.Size'Position;
-    State_Offset            : constant Integer
-      := Dummy_TCB.Common'Position + Dummy_TCB.Common.State'Position;
-    Task_Image_Offset       : constant Integer
-      := Dummy_TCB.Common'Position + Dummy_TCB.Common.Task_Image'Position;
-    Thread_Offset           : constant Integer
-      := Dummy_TCB.Common'Position + Dummy_TCB.Common.LL'Position +
-         Dummy_TCB.Common.LL.Thread'Position;
- 
- begin
- 
-    Ada.Text_IO.Create (C_File, Ada.Text_IO.Out_File, "a-tcbinf.c");
- 
-    Pl ("");
-    Pl ("#include <sys/types.h>");
-    Pl ("");
-    Pl ("#define TCB_INFO_VERSION 2");
-    Pl ("#define TCB_LIBRARY_VERSION "
-      & Integer'Image (To_Integer (Version)));
-    Pl ("");
-    Pl ("typedef struct {");
-    Pl ("");
-    Pl ("   __uint32_t   info_version;");
-    Pl ("   __uint32_t   library_version;");
-    Pl ("");
-    Pl ("   __uint32_t   All_Tasks_Link_Offset;");
-    Pl ("   __uint32_t   Entry_Count_Offset;");
-    Pl ("   __uint32_t   Entry_Point_Offset;");
-    Pl ("   __uint32_t   Parent_Offset;");
-    Pl ("   __uint32_t   Base_Priority_Offset;");
-    Pl ("   __uint32_t   Current_Priority_Offset;");
-    Pl ("   __uint32_t   Stack_Size_Offset;");
-    Pl ("   __uint32_t   State_Offset;");
-    Pl ("   __uint32_t   Task_Image_Offset;");
-    Pl ("   __uint32_t   Thread_Offset;");
-    Pl ("");
-    Pl ("   char         **state_names;");
-    Pl ("   __uint32_t   state_names_max;");
-    Pl ("");
-    Pl ("} task_control_block_info_t;");
-    Pl ("");
-    Pl ("static char *accepting_state_names = NULL;");
- 
-    Pl ("");
-    Pl ("static char *task_state_names[] = {");
- 
-    for State in Task_States loop
-       Pl ("   """ & State_Name (State) & """,");
-    end loop;
-    Pl ("   """"};");
- 
-    Pl ("");
-    Pl ("");
-    Pl ("task_control_block_info_t __task_control_block_info = {");
-    Pl ("");
-    Pl ("   TCB_INFO_VERSION,");
-    Pl ("   TCB_LIBRARY_VERSION,");
-    Pl ("");
-    Pl ("   " & All_Tasks_Link_Offset'Img & ",");
-    Pl ("   " & Entry_Count_Offset'Img & ",");
-    Pl ("   " & Entry_Point_Offset'Img & ",");
-    Pl ("   " & Parent_Offset'Img & ",");
-    Pl ("   " & Base_Priority_Offset'Img & ",");
-    Pl ("   " & Current_Priority_Offset'Img & ",");
-    Pl ("   " & Stack_Size_Offset'Img & ",");
-    Pl ("   " & State_Offset'Img & ",");
-    Pl ("   " & Task_Image_Offset'Img & ",");
-    Pl ("   " & Thread_Offset'Img & ",");
-    Pl ("");
-    Pl ("   task_state_names,");
-    Pl ("   sizeof (task_state_names),");
-    Pl ("");
-    Pl ("");
-    Pl ("};");
- 
-    Ada.Text_IO.Close (C_File);
- 
- end System.Task_Primitives.Gen_Tcbinf;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5hml-tgt.adb gcc-4.0.0/gcc/ada/5hml-tgt.adb
*** gcc-3.4.3/gcc/ada/5hml-tgt.adb	Mon Jan  5 15:20:42 2004
--- gcc-4.0.0/gcc/ada/5hml-tgt.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,377 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                             M L I B . T G T                              --
- --                             (HP-UX Version)                              --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --              Copyright (C) 2003, Ada Core Technologies, Inc.             --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package provides a set of target dependent routines to build
- --  libraries (static only on HP-UX).
- 
- --  This is the HP-UX version of the body.
- 
- with MLib.Fil;
- with MLib.Utl;
- with Namet;  use Namet;
- with Opt;
- with Output; use Output;
- with Prj.Com;
- with System;
- 
- package body MLib.Tgt is
- 
-    No_Arguments        : aliased Argument_List         := (1 .. 0 => null);
-    Empty_Argument_List : constant Argument_List_Access := No_Arguments'Access;
- 
-    Wl_Init_String : aliased String         := "-Wl,+init";
-    Wl_Init        : constant String_Access := Wl_Init_String'Access;
-    Wl_Fini_String : aliased String         := "-Wl,+fini";
-    Wl_Fini        : constant String_Access := Wl_Fini_String'Access;
- 
-    Init_Fini_List :  constant Argument_List_Access :=
-                        new Argument_List'(1 => Wl_Init,
-                                           2 => null,
-                                           3 => Wl_Fini,
-                                           4 => null);
-    --  Used to put switches for automatic elaboration/finalization
-    ---------------------
-    -- Archive_Builder --
-    ---------------------
- 
-    function Archive_Builder return String is
-    begin
-       return "ar";
-    end Archive_Builder;
- 
-    -----------------------------
-    -- Archive_Builder_Options --
-    -----------------------------
- 
-    function Archive_Builder_Options return String_List_Access is
-    begin
-       return new String_List'(1 => new String'("cr"));
-    end Archive_Builder_Options;
- 
-    -----------------
-    -- Archive_Ext --
-    -----------------
- 
-    function Archive_Ext return String is
-    begin
-       return "a";
-    end Archive_Ext;
- 
-    ---------------------
-    -- Archive_Indexer --
-    ---------------------
- 
-    function Archive_Indexer return String is
-    begin
-       return "ranlib";
-    end Archive_Indexer;
- 
-    ---------------------------
-    -- Build_Dynamic_Library --
-    ---------------------------
- 
-    procedure Build_Dynamic_Library
-      (Ofiles       : Argument_List;
-       Foreign      : Argument_List;
-       Afiles       : Argument_List;
-       Options      : Argument_List;
-       Interfaces   : Argument_List;
-       Lib_Filename : String;
-       Lib_Dir      : String;
-       Symbol_Data  : Symbol_Record;
-       Driver_Name  : Name_Id := No_Name;
-       Lib_Address  : String  := "";
-       Lib_Version  : String  := "";
-       Relocatable  : Boolean := False;
-       Auto_Init    : Boolean := False)
-    is
-       pragma Unreferenced (Foreign);
-       pragma Unreferenced (Afiles);
-       pragma Unreferenced (Interfaces);
-       pragma Unreferenced (Symbol_Data);
-       pragma Unreferenced (Lib_Address);
-       pragma Unreferenced (Relocatable);
- 
-       Lib_File : constant String :=
-         Lib_Dir & Directory_Separator & "lib" &
-         MLib.Fil.Ext_To (Lib_Filename, DLL_Ext);
- 
-       Version_Arg          : String_Access;
-       Symbolic_Link_Needed : Boolean := False;
- 
-       Init_Fini : Argument_List_Access := Empty_Argument_List;
- 
-       Common_Options : constant Argument_List :=
-                          Options & new String'(PIC_Option);
-       --  Common set of options to the gcc command performing the link.
-       --  On HPUX, this command eventually resorts to collect2, which may
-       --  generate a C file and compile it on the fly. This compilation shall
-       --  also generate position independant code for the final link to
-       --  succeed.
-    begin
-       if Opt.Verbose_Mode then
-          Write_Str ("building relocatable shared library ");
-          Write_Line (Lib_File);
-       end if;
- 
-       --  If specified, add automatic elaboration/finalization
-       if Auto_Init then
-          Init_Fini := Init_Fini_List;
-          Init_Fini (2) := new String'("-Wl," & Lib_Filename & "init");
-          Init_Fini (4) := new String'("-Wl," & Lib_Filename & "final");
-       end if;
- 
-       if Lib_Version = "" then
-          MLib.Utl.Gcc
-            (Output_File => Lib_File,
-             Objects     => Ofiles,
-             Options     => Common_Options & Init_Fini.all,
-             Driver_Name => Driver_Name);
- 
-       else
-          Version_Arg := new String'("-Wl,+h," & Lib_Version);
- 
-          if Is_Absolute_Path (Lib_Version) then
-             MLib.Utl.Gcc
-               (Output_File => Lib_Version,
-                Objects     => Ofiles,
-                Options     => Common_Options & Version_Arg & Init_Fini.all,
-                Driver_Name => Driver_Name);
-             Symbolic_Link_Needed := Lib_Version /= Lib_File;
- 
-          else
-             MLib.Utl.Gcc
-               (Output_File => Lib_Dir & Directory_Separator & Lib_Version,
-                Objects     => Ofiles,
-                Options     => Common_Options & Version_Arg & Init_Fini.all,
-                Driver_Name => Driver_Name);
-             Symbolic_Link_Needed :=
-               Lib_Dir & Directory_Separator & Lib_Version /= Lib_File;
-          end if;
- 
-          if Symbolic_Link_Needed then
-             declare
-                Success : Boolean;
-                Oldpath : String (1 .. Lib_Version'Length + 1);
-                Newpath : String (1 .. Lib_File'Length + 1);
- 
-                Result : Integer;
-                pragma Unreferenced (Result);
- 
-                function Symlink
-                  (Oldpath : System.Address;
-                   Newpath : System.Address) return Integer;
-                pragma Import (C, Symlink, "__gnat_symlink");
- 
-             begin
-                Oldpath (1 .. Lib_Version'Length) := Lib_Version;
-                Oldpath (Oldpath'Last)            := ASCII.NUL;
-                Newpath (1 .. Lib_File'Length)    := Lib_File;
-                Newpath (Newpath'Last)            := ASCII.NUL;
- 
-                Delete_File (Lib_File, Success);
- 
-                Result := Symlink (Oldpath'Address, Newpath'Address);
-             end;
-          end if;
-       end if;
-    end Build_Dynamic_Library;
- 
-    -------------------------
-    -- Default_DLL_Address --
-    -------------------------
- 
-    function Default_DLL_Address return String is
-    begin
-       return "";
-    end Default_DLL_Address;
- 
-    -------------
-    -- DLL_Ext --
-    -------------
- 
-    function DLL_Ext return String is
-    begin
-       return "sl";
-    end DLL_Ext;
- 
-    --------------------
-    -- Dynamic_Option --
-    --------------------
- 
-    function Dynamic_Option return String is
-    begin
-       return "-shared";
-    end Dynamic_Option;
- 
-    -------------------
-    -- Is_Object_Ext --
-    -------------------
- 
-    function Is_Object_Ext (Ext : String) return Boolean is
-    begin
-       return Ext = ".o";
-    end Is_Object_Ext;
- 
-    --------------
-    -- Is_C_Ext --
-    --------------
- 
-    function Is_C_Ext (Ext : String) return Boolean is
-    begin
-       return Ext = ".c";
-    end Is_C_Ext;
- 
-    --------------------
-    -- Is_Archive_Ext --
-    --------------------
- 
-    function Is_Archive_Ext (Ext : String) return Boolean is
-    begin
-       return Ext = ".a" or else Ext = ".so";
-    end Is_Archive_Ext;
- 
-    -------------
-    -- Libgnat --
-    -------------
- 
-    function Libgnat return String is
-    begin
-       return "libgnat.a";
-    end Libgnat;
- 
-    ------------------------
-    -- Library_Exists_For --
-    ------------------------
- 
-    function Library_Exists_For (Project : Project_Id) return Boolean is
-    begin
-       if not Projects.Table (Project).Library then
-          Prj.Com.Fail ("INTERNAL ERROR: Library_Exists_For called " &
-                        "for non library project");
-          return False;
- 
-       else
-          declare
-             Lib_Dir : constant String :=
-               Get_Name_String (Projects.Table (Project).Library_Dir);
-             Lib_Name : constant String :=
-               Get_Name_String (Projects.Table (Project).Library_Name);
- 
-          begin
-             if Projects.Table (Project).Library_Kind = Static then
-                return Is_Regular_File
-                  (Lib_Dir & Directory_Separator & "lib" &
-                   Fil.Ext_To (Lib_Name, Archive_Ext));
- 
-             else
-                return Is_Regular_File
-                  (Lib_Dir & Directory_Separator & "lib" &
-                   Fil.Ext_To (Lib_Name, DLL_Ext));
-             end if;
-          end;
-       end if;
-    end Library_Exists_For;
- 
-    ---------------------------
-    -- Library_File_Name_For --
-    ---------------------------
- 
-    function Library_File_Name_For (Project : Project_Id) return Name_Id is
-    begin
-       if not Projects.Table (Project).Library then
-          Prj.Com.Fail ("INTERNAL ERROR: Library_File_Name_For called " &
-                        "for non library project");
-          return No_Name;
- 
-       else
-          declare
-             Lib_Name : constant String :=
-               Get_Name_String (Projects.Table (Project).Library_Name);
- 
-          begin
-             Name_Len := 3;
-             Name_Buffer (1 .. Name_Len) := "lib";
- 
-             if Projects.Table (Project).Library_Kind = Static then
-                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, Archive_Ext));
- 
-             else
-                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, DLL_Ext));
-             end if;
- 
-             return Name_Find;
-          end;
-       end if;
-    end Library_File_Name_For;
- 
-    --------------------------------
-    -- Linker_Library_Path_Option --
-    --------------------------------
- 
-    function Linker_Library_Path_Option return String_Access is
-    begin
-       return new String'("-Wl,+b,");
-    end Linker_Library_Path_Option;
- 
-    ----------------
-    -- Object_Ext --
-    ----------------
- 
-    function Object_Ext return String is
-    begin
-       return "o";
-    end Object_Ext;
- 
-    ----------------
-    -- PIC_Option --
-    ----------------
- 
-    function PIC_Option return String is
-    begin
-       return "-fPIC";
-    end PIC_Option;
- 
-    -----------------------------------------------
-    -- Standalone_Library_Auto_Init_Is_Supported --
-    -----------------------------------------------
- 
-    function Standalone_Library_Auto_Init_Is_Supported return Boolean is
-    begin
-       return True;
-    end Standalone_Library_Auto_Init_Is_Supported;
- 
-    ---------------------------
-    -- Support_For_Libraries --
-    ---------------------------
- 
-    function Support_For_Libraries return Library_Support is
-    begin
-       return Full;
-    end Support_For_Libraries;
- 
- end MLib.Tgt;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5hosinte.adb gcc-4.0.0/gcc/ada/5hosinte.adb
*** gcc-3.4.3/gcc/ada/5hosinte.adb	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5hosinte.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,564 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   S Y S T E M . O S _ I N T E R F A C E                  --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --             Copyright (C) 1991-1994, Florida State University            --
- --             Copyright (C) 1995-2003, Ada Core Technologies               --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a DCE version of this package.
- --  Currently HP-UX and SNI use this file
- 
- pragma Polling (Off);
- --  Turn off polling, we do not want ATC polling to take place during
- --  tasking operations. It causes infinite loops and other problems.
- 
- --  This package encapsulates all direct interfaces to OS services
- --  that are needed by children of System.
- 
- with Interfaces.C; use Interfaces.C;
- 
- package body System.OS_Interface is
- 
-    -----------------
-    -- To_Duration --
-    -----------------
- 
-    function To_Duration (TS : timespec) return Duration is
-    begin
-       return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9;
-    end To_Duration;
- 
-    -----------------
-    -- To_Timespec --
-    -----------------
- 
-    function To_Timespec (D : Duration) return timespec is
-       S : time_t;
-       F : Duration;
- 
-    begin
-       S := time_t (Long_Long_Integer (D));
-       F := D - Duration (S);
- 
-       --  If F has negative value due to a round-up, adjust for positive F
-       --  value.
-       if F < 0.0 then
-          S := S - 1;
-          F := F + 1.0;
-       end if;
- 
-       return timespec'(tv_sec => S,
-                        tv_nsec => long (Long_Long_Integer (F * 10#1#E9)));
-    end To_Timespec;
- 
-    function To_Duration (TV : struct_timeval) return Duration is
-    begin
-       return Duration (TV.tv_sec) + Duration (TV.tv_usec) / 10#1#E6;
-    end To_Duration;
- 
-    function To_Timeval (D : Duration) return struct_timeval is
-       S : time_t;
-       F : Duration;
-    begin
-       S := time_t (Long_Long_Integer (D));
-       F := D - Duration (S);
- 
-       --  If F has negative value due to a round-up, adjust for positive F
-       --  value.
- 
-       if F < 0.0 then
-          S := S - 1;
-          F := F + 1.0;
-       end if;
- 
-       return
-         struct_timeval'
-           (tv_sec => S,
-            tv_usec => time_t (Long_Long_Integer (F * 10#1#E6)));
-    end To_Timeval;
- 
-    ---------------------------
-    --  POSIX.1c  Section 3  --
-    ---------------------------
- 
-    function sigwait
-      (set : access sigset_t;
-       sig : access Signal)
-      return int
-    is
-       Result : int;
- 
-    begin
-       Result := sigwait (set);
- 
-       if Result = -1 then
-          sig.all := 0;
-          return errno;
-       end if;
- 
-       sig.all := Signal (Result);
-       return 0;
-    end sigwait;
- 
-    --  DCE_THREADS does not have pthread_kill. Instead, we just ignore it.
- 
-    function pthread_kill (thread : pthread_t; sig : Signal) return int is
-       pragma Unreferenced (thread, sig);
-    begin
-       return 0;
-    end pthread_kill;
- 
-    ----------------------------
-    --  POSIX.1c  Section 11  --
-    ----------------------------
- 
-    --  For all the following functions, DCE Threads has a non standard
-    --  behavior: it sets errno but the standard Posix requires it to be
-    --  returned.
- 
-    function pthread_mutexattr_init
-      (attr : access pthread_mutexattr_t)
-      return int
-    is
-       function pthread_mutexattr_create
-         (attr : access pthread_mutexattr_t)
-         return int;
-       pragma Import (C, pthread_mutexattr_create, "pthread_mutexattr_create");
- 
-    begin
-       if pthread_mutexattr_create (attr) /= 0 then
-          return errno;
-       else
-          return 0;
-       end if;
-    end pthread_mutexattr_init;
- 
-    function pthread_mutexattr_destroy
-      (attr : access pthread_mutexattr_t)
-      return int
-    is
-       function pthread_mutexattr_delete
-         (attr : access pthread_mutexattr_t)
-         return int;
-       pragma Import (C, pthread_mutexattr_delete, "pthread_mutexattr_delete");
- 
-    begin
-       if pthread_mutexattr_delete (attr) /= 0 then
-          return errno;
-       else
-          return 0;
-       end if;
-    end pthread_mutexattr_destroy;
- 
-    function pthread_mutex_init
-      (mutex : access pthread_mutex_t;
-       attr  : access pthread_mutexattr_t)
-      return int
-    is
-       function pthread_mutex_init_base
-         (mutex : access pthread_mutex_t;
-          attr  : pthread_mutexattr_t)
-         return int;
-       pragma Import (C, pthread_mutex_init_base, "pthread_mutex_init");
- 
-    begin
-       if pthread_mutex_init_base (mutex, attr.all) /= 0 then
-          return errno;
-       else
-          return 0;
-       end if;
-    end pthread_mutex_init;
- 
-    function pthread_mutex_destroy
-      (mutex : access pthread_mutex_t)
-      return int
-    is
-       function pthread_mutex_destroy_base
-         (mutex : access pthread_mutex_t)
-         return int;
-       pragma Import (C, pthread_mutex_destroy_base, "pthread_mutex_destroy");
- 
-    begin
-       if pthread_mutex_destroy_base (mutex) /= 0 then
-          return errno;
-       else
-          return 0;
-       end if;
-    end pthread_mutex_destroy;
- 
-    function pthread_mutex_lock
-      (mutex : access pthread_mutex_t)
-      return int
-    is
-       function pthread_mutex_lock_base
-         (mutex : access pthread_mutex_t)
-         return int;
-       pragma Import (C, pthread_mutex_lock_base, "pthread_mutex_lock");
- 
-    begin
-       if pthread_mutex_lock_base (mutex) /= 0 then
-          return errno;
-       else
-          return 0;
-       end if;
-    end pthread_mutex_lock;
- 
-    function pthread_mutex_unlock
-      (mutex : access pthread_mutex_t)
-      return int
-    is
-       function pthread_mutex_unlock_base
-         (mutex : access pthread_mutex_t)
-         return int;
-       pragma Import (C, pthread_mutex_unlock_base, "pthread_mutex_unlock");
- 
-    begin
-       if pthread_mutex_unlock_base (mutex) /= 0 then
-          return errno;
-       else
-          return 0;
-       end if;
-    end pthread_mutex_unlock;
- 
-    function pthread_condattr_init
-      (attr : access pthread_condattr_t)
-      return int
-    is
-       function pthread_condattr_create
-         (attr : access pthread_condattr_t)
-         return int;
-       pragma Import (C, pthread_condattr_create, "pthread_condattr_create");
- 
-    begin
-       if pthread_condattr_create (attr) /= 0 then
-          return errno;
-       else
-          return 0;
-       end if;
-    end pthread_condattr_init;
- 
-    function pthread_condattr_destroy
-      (attr : access pthread_condattr_t)
-      return int
-    is
-       function pthread_condattr_delete
-         (attr : access pthread_condattr_t)
-         return int;
-       pragma Import (C, pthread_condattr_delete, "pthread_condattr_delete");
- 
-    begin
-       if pthread_condattr_delete (attr) /= 0 then
-          return errno;
-       else
-          return 0;
-       end if;
-    end pthread_condattr_destroy;
- 
-    function pthread_cond_init
-      (cond : access pthread_cond_t;
-       attr : access pthread_condattr_t)
-      return int
-    is
-       function pthread_cond_init_base
-         (cond : access pthread_cond_t;
-          attr : pthread_condattr_t)
-         return int;
-       pragma Import (C, pthread_cond_init_base, "pthread_cond_init");
- 
-    begin
-       if pthread_cond_init_base (cond, attr.all) /= 0 then
-          return errno;
-       else
-          return 0;
-       end if;
-    end pthread_cond_init;
- 
-    function pthread_cond_destroy
-      (cond : access pthread_cond_t)
-      return int
-    is
-       function pthread_cond_destroy_base
-         (cond : access pthread_cond_t)
-         return int;
-       pragma Import (C, pthread_cond_destroy_base, "pthread_cond_destroy");
- 
-    begin
-       if pthread_cond_destroy_base (cond) /= 0 then
-          return errno;
-       else
-          return 0;
-       end if;
-    end pthread_cond_destroy;
- 
-    function pthread_cond_signal
-      (cond : access pthread_cond_t)
-      return int
-    is
-       function pthread_cond_signal_base
-         (cond : access pthread_cond_t)
-         return int;
-       pragma Import (C, pthread_cond_signal_base, "pthread_cond_signal");
- 
-    begin
-       if pthread_cond_signal_base (cond) /= 0 then
-          return errno;
-       else
-          return 0;
-       end if;
-    end pthread_cond_signal;
- 
-    function pthread_cond_wait
-      (cond  : access pthread_cond_t;
-       mutex : access pthread_mutex_t)
-      return int
-    is
-       function pthread_cond_wait_base
-         (cond  : access pthread_cond_t;
-          mutex : access pthread_mutex_t)
-         return int;
-       pragma Import (C, pthread_cond_wait_base, "pthread_cond_wait");
- 
-    begin
-       if pthread_cond_wait_base (cond, mutex) /= 0 then
-          return errno;
-       else
-          return 0;
-       end if;
-    end pthread_cond_wait;
- 
-    function pthread_cond_timedwait
-      (cond    : access pthread_cond_t;
-       mutex   : access pthread_mutex_t;
-       abstime : access timespec)
-      return int
-    is
-       function pthread_cond_timedwait_base
-         (cond    : access pthread_cond_t;
-          mutex   : access pthread_mutex_t;
-          abstime : access timespec)
-         return int;
-       pragma Import (C, pthread_cond_timedwait_base, "pthread_cond_timedwait");
- 
-    begin
-       if pthread_cond_timedwait_base (cond, mutex, abstime) /= 0 then
-          if errno = EAGAIN then
-             return ETIMEDOUT;
-          else
-             return errno;
-          end if;
-       else
-          return 0;
-       end if;
-    end pthread_cond_timedwait;
- 
-    ----------------------------
-    --  POSIX.1c  Section 13  --
-    ----------------------------
- 
-    function pthread_setschedparam
-      (thread : pthread_t;
-       policy : int;
-       param  : access struct_sched_param) return int
-    is
-       function pthread_setscheduler
-         (thread   : pthread_t;
-          policy   : int;
-          priority : int)
-          return int;
-       pragma Import (C, pthread_setscheduler, "pthread_setscheduler");
- 
-    begin
-       if pthread_setscheduler (thread, policy, param.sched_priority) = -1 then
-          return errno;
-       else
-          return 0;
-       end if;
-    end pthread_setschedparam;
- 
-    function sched_yield return int is
-       procedure pthread_yield;
-       pragma Import (C, pthread_yield, "pthread_yield");
-    begin
-       pthread_yield;
-       return 0;
-    end sched_yield;
- 
-    -----------------------------
-    --  P1003.1c - Section 16  --
-    -----------------------------
- 
-    function pthread_attr_init (attributes : access pthread_attr_t) return int
-    is
-       function pthread_attr_create
-         (attributes : access pthread_attr_t)
-         return int;
-       pragma Import (C, pthread_attr_create, "pthread_attr_create");
- 
-    begin
-       if pthread_attr_create (attributes) /= 0 then
-          return errno;
-       else
-          return 0;
-       end if;
-    end pthread_attr_init;
- 
-    function pthread_attr_destroy
-      (attributes : access pthread_attr_t) return int
-    is
-       function pthread_attr_delete
-         (attributes : access pthread_attr_t)
-         return int;
-       pragma Import (C, pthread_attr_delete, "pthread_attr_delete");
- 
-    begin
-       if pthread_attr_delete (attributes) /= 0 then
-          return errno;
-       else
-          return 0;
-       end if;
-    end pthread_attr_destroy;
- 
-    function pthread_attr_setstacksize
-      (attr      : access pthread_attr_t;
-       stacksize : size_t) return int
-    is
-       function pthread_attr_setstacksize_base
-         (attr      : access pthread_attr_t;
-          stacksize : size_t)
-         return int;
-       pragma Import (C, pthread_attr_setstacksize_base,
-                      "pthread_attr_setstacksize");
- 
-    begin
-       if pthread_attr_setstacksize_base (attr, stacksize) /= 0 then
-          return errno;
-       else
-          return 0;
-       end if;
-    end pthread_attr_setstacksize;
- 
-    function pthread_create
-      (thread        : access pthread_t;
-       attributes    : access pthread_attr_t;
-       start_routine : Thread_Body;
-       arg           : System.Address) return int
-    is
-       function pthread_create_base
-         (thread        : access pthread_t;
-          attributes    : pthread_attr_t;
-          start_routine : Thread_Body;
-          arg           : System.Address)
-         return int;
-       pragma Import (C, pthread_create_base, "pthread_create");
- 
-    begin
-       if pthread_create_base
-         (thread, attributes.all, start_routine, arg) /= 0
-       then
-          return errno;
-       else
-          return 0;
-       end if;
-    end pthread_create;
- 
-    ----------------------------
-    --  POSIX.1c  Section 17  --
-    ----------------------------
- 
-    function pthread_setspecific
-      (key   : pthread_key_t;
-       value : System.Address) return int
-    is
-       function pthread_setspecific_base
-         (key   : pthread_key_t;
-          value : System.Address) return int;
-       pragma Import (C, pthread_setspecific_base, "pthread_setspecific");
- 
-    begin
-       if pthread_setspecific_base (key, value) /= 0 then
-          return errno;
-       else
-          return 0;
-       end if;
-    end pthread_setspecific;
- 
-    function pthread_getspecific (key : pthread_key_t) return System.Address is
-       function pthread_getspecific_base
-         (key   : pthread_key_t;
-          value : access System.Address) return  int;
-       pragma Import (C, pthread_getspecific_base, "pthread_getspecific");
-       Addr : aliased System.Address;
- 
-    begin
-       if pthread_getspecific_base (key, Addr'Access) /= 0 then
-          return System.Null_Address;
-       else
-          return Addr;
-       end if;
-    end pthread_getspecific;
- 
-    function pthread_key_create
-      (key        : access pthread_key_t;
-       destructor : destructor_pointer) return int
-    is
-       function pthread_keycreate
-         (key        : access pthread_key_t;
-          destructor : destructor_pointer) return int;
-       pragma Import (C, pthread_keycreate, "pthread_keycreate");
- 
-    begin
-       if pthread_keycreate (key, destructor) /= 0 then
-          return errno;
-       else
-          return 0;
-       end if;
-    end pthread_key_create;
- 
-    function Get_Stack_Base (thread : pthread_t) return Address is
-       pragma Warnings (Off, thread);
- 
-    begin
-       return Null_Address;
-    end Get_Stack_Base;
- 
-    procedure pthread_init is
-    begin
-       null;
-    end pthread_init;
- 
-    function intr_attach (sig : int; handler : isr_address) return long is
-       function c_signal (sig : int; handler : isr_address) return long;
-       pragma Import (C, c_signal, "signal");
- 
-    begin
-       return c_signal (sig, handler);
-    end intr_attach;
- 
- end System.OS_Interface;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5hosinte.ads gcc-4.0.0/gcc/ada/5hosinte.ads
*** gcc-3.4.3/gcc/ada/5hosinte.ads	Fri Dec  5 10:24:04 2003
--- gcc-4.0.0/gcc/ada/5hosinte.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,490 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   S Y S T E M . O S _ I N T E R F A C E                  --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --             Copyright (C) 1991-1994, Florida State University            --
- --             Copyright (C) 1995-2003, Ada Core Technologies               --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the HP-UX version of this package.
- 
- --  This package encapsulates all direct interfaces to OS services
- --  that are needed by children of System.
- 
- --  PLEASE DO NOT add any with-clauses to this package
- --  or remove the pragma Elaborate_Body.
- --  It is designed to be a bottom-level (leaf) package.
- 
- with Interfaces.C;
- package System.OS_Interface is
-    pragma Preelaborate;
- 
-    pragma Linker_Options ("-lcma");
- 
-    subtype int            is Interfaces.C.int;
-    subtype short          is Interfaces.C.short;
-    subtype long           is Interfaces.C.long;
-    subtype unsigned       is Interfaces.C.unsigned;
-    subtype unsigned_short is Interfaces.C.unsigned_short;
-    subtype unsigned_long  is Interfaces.C.unsigned_long;
-    subtype unsigned_char  is Interfaces.C.unsigned_char;
-    subtype plain_char     is Interfaces.C.plain_char;
-    subtype size_t         is Interfaces.C.size_t;
- 
-    -----------
-    -- Errno --
-    -----------
- 
-    function errno return int;
-    pragma Import (C, errno, "__get_errno");
- 
-    EAGAIN    : constant := 11;
-    EINTR     : constant := 4;
-    EINVAL    : constant := 22;
-    ENOMEM    : constant := 12;
-    ETIME     : constant := 52;
-    ETIMEDOUT : constant := 238;
- 
-    FUNC_ERR : constant := -1;
- 
-    -------------
-    -- Signals --
-    -------------
- 
-    Max_Interrupt : constant := 44;
-    type Signal is new int range 0 .. Max_Interrupt;
-    for Signal'Size use int'Size;
- 
-    SIGHUP     : constant := 1; --  hangup
-    SIGINT     : constant := 2; --  interrupt (rubout)
-    SIGQUIT    : constant := 3; --  quit (ASCD FS)
-    SIGILL     : constant := 4; --  illegal instruction (not reset)
-    SIGTRAP    : constant := 5; --  trace trap (not reset)
-    SIGIOT     : constant := 6; --  IOT instruction
-    SIGABRT    : constant := 6; --  used by abort, replace SIGIOT in the  future
-    SIGEMT     : constant := 7; --  EMT instruction
-    SIGFPE     : constant := 8; --  floating point exception
-    SIGKILL    : constant := 9; --  kill (cannot be caught or ignored)
-    SIGBUS     : constant := 10; --  bus error
-    SIGSEGV    : constant := 11; --  segmentation violation
-    SIGSYS     : constant := 12; --  bad argument to system call
-    SIGPIPE    : constant := 13; --  write on a pipe with no one to read it
-    SIGALRM    : constant := 14; --  alarm clock
-    SIGTERM    : constant := 15; --  software termination signal from kill
-    SIGUSR1    : constant := 16; --  user defined signal 1
-    SIGUSR2    : constant := 17; --  user defined signal 2
-    SIGCLD     : constant := 18; --  alias for SIGCHLD
-    SIGCHLD    : constant := 18; --  child status change
-    SIGPWR     : constant := 19; --  power-fail restart
-    SIGVTALRM  : constant := 20; --  virtual timer alarm
-    SIGPROF    : constant := 21; --  profiling timer alarm
-    SIGIO      : constant := 22; --  asynchronous I/O
-    SIGPOLL    : constant := 22; --  pollable event occurred
-    SIGWINCH   : constant := 23; --  window size change
-    SIGSTOP    : constant := 24; --  stop (cannot be caught or ignored)
-    SIGTSTP    : constant := 25; --  user stop requested from tty
-    SIGCONT    : constant := 26; --  stopped process has been continued
-    SIGTTIN    : constant := 27; --  background tty read attempted
-    SIGTTOU    : constant := 28; --  background tty write attempted
-    SIGURG     : constant := 29; --  urgent condition on IO channel
-    SIGLOST    : constant := 30; --  remote lock lost  (NFS)
-    SIGDIL     : constant := 32; --  DIL signal
-    SIGXCPU    : constant := 33; --  CPU time limit exceeded (setrlimit)
-    SIGXFSZ    : constant := 34; --  file size limit exceeded (setrlimit)
- 
-    SIGADAABORT : constant := SIGABRT;
-    --  Note: on other targets, we usually use SIGABRT, but on HP/UX, it
-    --  appears that SIGABRT can't be used in sigwait(), so we use SIGTERM.
- 
-    type Signal_Set is array (Natural range <>) of Signal;
- 
-    Unmasked    : constant Signal_Set :=
-      (SIGBUS, SIGTRAP, SIGTTIN, SIGTTOU, SIGTSTP);
- 
-    Reserved    : constant Signal_Set := (SIGKILL, SIGSTOP);
- 
-    type sigset_t is private;
- 
-    type isr_address is access procedure (sig : int);
- 
-    function intr_attach (sig : int; handler : isr_address) return long;
- 
-    Intr_Attach_Reset : constant Boolean := True;
-    --  True if intr_attach is reset after an interrupt handler is called
- 
-    function sigaddset (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigaddset, "sigaddset");
- 
-    function sigdelset (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigdelset, "sigdelset");
- 
-    function sigfillset (set : access sigset_t) return int;
-    pragma Import (C, sigfillset, "sigfillset");
- 
-    function sigismember (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigismember, "sigismember");
- 
-    function sigemptyset (set : access sigset_t) return int;
-    pragma Import (C, sigemptyset, "sigemptyset");
- 
-    type Signal_Handler is access procedure (signo : Signal);
- 
-    type struct_sigaction is record
-       sa_handler : System.Address;
-       sa_mask    : sigset_t;
-       sa_flags   : int;
-    end record;
-    pragma Convention (C, struct_sigaction);
-    type struct_sigaction_ptr is access all struct_sigaction;
- 
-    SA_RESTART  : constant  := 16#40#;
-    SA_SIGINFO  : constant  := 16#10#;
- 
-    SIG_BLOCK   : constant  := 0;
-    SIG_UNBLOCK : constant  := 1;
-    SIG_SETMASK : constant  := 2;
- 
-    SIG_DFL : constant := 0;
-    SIG_IGN : constant := 1;
-    SIG_ERR : constant := -1;
- 
-    function sigaction
-      (sig  : Signal;
-       act  : struct_sigaction_ptr;
-       oact : struct_sigaction_ptr) return int;
-    pragma Import (C, sigaction, "sigaction");
- 
-    ----------
-    -- Time --
-    ----------
- 
-    type timespec is private;
- 
-    function nanosleep (rqtp, rmtp : access timespec) return int;
-    pragma Import (C, nanosleep);
- 
-    type clockid_t is private;
- 
-    CLOCK_REALTIME : constant clockid_t;
- 
-    function Clock_Gettime
-      (Clock_Id : clockid_t; Tp : access timespec) return int;
-    pragma Import (C, Clock_Gettime);
- 
-    function To_Duration (TS : timespec) return Duration;
-    pragma Inline (To_Duration);
- 
-    function To_Timespec (D : Duration) return timespec;
-    pragma Inline (To_Timespec);
- 
-    type struct_timeval is private;
- 
-    function To_Duration (TV : struct_timeval) return Duration;
-    pragma Inline (To_Duration);
- 
-    function To_Timeval (D : Duration) return struct_timeval;
-    pragma Inline (To_Timeval);
- 
-    -------------------------
-    -- Priority Scheduling --
-    -------------------------
- 
-    SCHED_FIFO  : constant := 0;
-    SCHED_RR    : constant := 1;
-    SCHED_OTHER : constant := 2;
- 
-    -------------
-    -- Process --
-    -------------
- 
-    type pid_t is private;
- 
-    function kill (pid : pid_t; sig : Signal) return int;
-    pragma Import (C, kill, "kill");
- 
-    function getpid return pid_t;
-    pragma Import (C, getpid, "getpid");
- 
-    -------------
-    -- Threads --
-    -------------
- 
-    type Thread_Body is access
-      function (arg : System.Address) return System.Address;
-    type pthread_t           is private;
-    subtype Thread_Id        is pthread_t;
- 
-    type pthread_mutex_t     is limited private;
-    type pthread_cond_t      is limited private;
-    type pthread_attr_t      is limited private;
-    type pthread_mutexattr_t is limited private;
-    type pthread_condattr_t  is limited private;
-    type pthread_key_t       is private;
- 
-    -----------
-    -- Stack --
-    -----------
- 
-    function Get_Stack_Base (thread : pthread_t) return Address;
-    pragma Inline (Get_Stack_Base);
-    --  This is a dummy procedure to share some GNULLI files
- 
-    ---------------------------------------
-    -- Nonstandard Thread Initialization --
-    ---------------------------------------
- 
-    procedure pthread_init;
-    pragma Inline (pthread_init);
-    --  This is a dummy procedure to share some GNULLI files
- 
-    -------------------------
-    -- POSIX.1c  Section 3 --
-    -------------------------
- 
-    function sigwait (set : access sigset_t) return int;
-    pragma Import (C, sigwait, "cma_sigwait");
- 
-    function sigwait
-      (set : access sigset_t;
-       sig : access Signal) return int;
-    pragma Inline (sigwait);
-    --  DCE_THREADS has a nonstandard sigwait
- 
-    function pthread_kill
-      (thread : pthread_t;
-       sig    : Signal) return int;
-    pragma Inline (pthread_kill);
-    --  DCE_THREADS doesn't have pthread_kill
- 
-    type sigset_t_ptr is access all sigset_t;
- 
-    function pthread_sigmask
-      (how  : int;
-       set  : sigset_t_ptr;
-       oset : sigset_t_ptr) return int;
-    --  DCE THREADS does not have pthread_sigmask. Instead, it uses
-    --  sigprocmask to do the signal handling when the thread library is
-    --  sucked in.
-    pragma Import (C, pthread_sigmask, "sigprocmask");
- 
-    --------------------------
-    -- POSIX.1c  Section 11 --
-    --------------------------
- 
-    function pthread_mutexattr_init
-      (attr : access pthread_mutexattr_t) return int;
-    --  DCE_THREADS has a nonstandard pthread_mutexattr_init.
- 
-    function pthread_mutexattr_destroy
-      (attr : access pthread_mutexattr_t) return int;
-    --  DCE_THREADS has a nonstandard pthread_mutexattr_destroy
- 
-    function pthread_mutex_init
-      (mutex : access pthread_mutex_t;
-       attr  : access pthread_mutexattr_t) return int;
-    --  DCE_THREADS has a nonstandard pthread_mutex_init
- 
-    function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
-    --  DCE_THREADS has a nonstandard pthread_mutex_destroy
- 
-    function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
-    pragma Inline (pthread_mutex_lock);
-    --  DCE_THREADS has nonstandard pthread_mutex_lock
- 
-    function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
-    pragma Inline (pthread_mutex_unlock);
-    --  DCE_THREADS has nonstandard pthread_mutex_lock
- 
-    function pthread_condattr_init
-      (attr : access pthread_condattr_t) return int;
-    --  DCE_THREADS has nonstandard pthread_condattr_init
- 
-    function pthread_condattr_destroy
-      (attr : access pthread_condattr_t) return int;
-    --  DCE_THREADS has nonstandard pthread_condattr_destroy
- 
-    function pthread_cond_init
-      (cond : access pthread_cond_t;
-       attr : access pthread_condattr_t) return int;
-    --  DCE_THREADS has nonstandard pthread_cond_init
- 
-    function pthread_cond_destroy (cond : access pthread_cond_t) return int;
-    --  DCE_THREADS has nonstandard pthread_cond_destroy
- 
-    function pthread_cond_signal (cond : access pthread_cond_t) return int;
-    pragma Inline (pthread_cond_signal);
-    --  DCE_THREADS has nonstandard pthread_cond_signal
- 
-    function pthread_cond_wait
-      (cond  : access pthread_cond_t;
-       mutex : access pthread_mutex_t) return int;
-    pragma Inline (pthread_cond_wait);
-    --  DCE_THREADS has a nonstandard pthread_cond_wait
- 
-    function pthread_cond_timedwait
-      (cond    : access pthread_cond_t;
-       mutex   : access pthread_mutex_t;
-       abstime : access timespec) return int;
-    pragma Inline (pthread_cond_timedwait);
-    --  DCE_THREADS has a nonstandard pthread_cond_timedwait
- 
-    --------------------------
-    -- POSIX.1c  Section 13 --
-    --------------------------
- 
-    type struct_sched_param is record
-       sched_priority : int;  --  scheduling priority
-    end record;
- 
-    function pthread_setschedparam
-      (thread : pthread_t;
-       policy : int;
-       param  : access struct_sched_param) return int;
-    pragma Inline (pthread_setschedparam);
-    --  DCE_THREADS has a nonstandard pthread_setschedparam
- 
-    function sched_yield return int;
-    pragma Inline (sched_yield);
-    --  DCE_THREADS has a nonstandard sched_yield
- 
-    ---------------------------
-    -- P1003.1c - Section 16 --
-    ---------------------------
- 
-    function pthread_attr_init (attributes : access pthread_attr_t) return int;
-    pragma Inline (pthread_attr_init);
-    --  DCE_THREADS has a nonstandard pthread_attr_init
- 
-    function pthread_attr_destroy
-      (attributes : access pthread_attr_t) return int;
-    pragma Inline (pthread_attr_destroy);
-    --  DCE_THREADS has a nonstandard pthread_attr_destroy
- 
-    function pthread_attr_setstacksize
-      (attr      : access pthread_attr_t;
-       stacksize : size_t) return int;
-    pragma Inline (pthread_attr_setstacksize);
-    --  DCE_THREADS has a nonstandard pthread_attr_setstacksize
- 
-    function pthread_create
-      (thread        : access pthread_t;
-       attributes    : access pthread_attr_t;
-       start_routine : Thread_Body;
-       arg           : System.Address) return int;
-    pragma Inline (pthread_create);
-    --  DCE_THREADS has a nonstandard pthread_create
- 
-    procedure pthread_detach (thread : access pthread_t);
-    pragma Import (C, pthread_detach);
- 
-    procedure pthread_exit (status : System.Address);
-    pragma Import (C, pthread_exit, "pthread_exit");
- 
-    function pthread_self return pthread_t;
-    pragma Import (C, pthread_self, "pthread_self");
- 
-    --------------------------
-    -- POSIX.1c  Section 17 --
-    --------------------------
- 
-    function pthread_setspecific
-      (key   : pthread_key_t;
-       value : System.Address) return int;
-    pragma Inline (pthread_setspecific);
-    --  DCE_THREADS has a nonstandard pthread_setspecific
- 
-    function pthread_getspecific (key : pthread_key_t) return System.Address;
-    pragma Inline (pthread_getspecific);
-    --  DCE_THREADS has a nonstandard pthread_getspecific
- 
-    type destructor_pointer is access procedure (arg : System.Address);
- 
-    function pthread_key_create
-      (key        : access pthread_key_t;
-       destructor : destructor_pointer) return int;
-    pragma Inline (pthread_key_create);
-    --  DCE_THREADS has a nonstandard pthread_key_create
- 
- private
- 
-    type array_type_1 is array (Integer range 0 .. 7) of unsigned_long;
-    type sigset_t is record
-       X_X_sigbits : array_type_1;
-    end record;
-    pragma Convention (C, sigset_t);
- 
-    type pid_t is new int;
- 
-    type time_t is new long;
- 
-    type timespec is record
-       tv_sec  : time_t;
-       tv_nsec : long;
-    end record;
-    pragma Convention (C, timespec);
- 
-    type clockid_t is new int;
-    CLOCK_REALTIME : constant clockid_t := 1;
- 
-    type struct_timeval is record
-       tv_sec  : time_t;
-       tv_usec : time_t;
-    end record;
-    pragma Convention (C, struct_timeval);
- 
-    type cma_t_address is new System.Address;
- 
-    type cma_t_handle is record
-       field1 : cma_t_address;
-       field2 : Short_Integer;
-       field3 : Short_Integer;
-    end record;
-    for cma_t_handle'Size use 64;
- 
-    type pthread_attr_t is new cma_t_handle;
-    pragma Convention (C_Pass_By_Copy, pthread_attr_t);
- 
-    type pthread_condattr_t is new cma_t_handle;
-    pragma Convention (C_Pass_By_Copy, pthread_condattr_t);
- 
-    type pthread_mutexattr_t is new cma_t_handle;
-    pragma Convention (C_Pass_By_Copy, pthread_mutexattr_t);
- 
-    type pthread_t is new cma_t_handle;
-    pragma Convention (C_Pass_By_Copy, pthread_t);
- 
-    type pthread_mutex_t is new cma_t_handle;
-    pragma Convention (C_Pass_By_Copy, pthread_mutex_t);
- 
-    type pthread_cond_t is new cma_t_handle;
-    pragma Convention (C_Pass_By_Copy, pthread_cond_t);
- 
-    type pthread_key_t is new int;
- 
- end System.OS_Interface;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5hparame.ads gcc-4.0.0/gcc/ada/5hparame.ads
*** gcc-3.4.3/gcc/ada/5hparame.ads	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5hparame.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,202 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                    S Y S T E M . P A R A M E T E R S                     --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the HP version of this package
- --  Blank line intentional so that it lines up exactly with default.
- 
- --  This package defines some system dependent parameters for GNAT. These
- --  are values that are referenced by the runtime library and are therefore
- --  relevant to the target machine.
- 
- --  The parameters whose value is defined in the spec are not generally
- --  expected to be changed. If they are changed, it will be necessary to
- --  recompile the run-time library.
- 
- --  The parameters which are defined by functions can be changed by modifying
- --  the body of System.Parameters in file s-parame.adb. A change to this body
- --  requires only rebinding and relinking of the application.
- 
- --  Note: do not introduce any pragma Inline statements into this unit, since
- --  otherwise the relinking and rebinding capability would be deactivated.
- 
- package System.Parameters is
- pragma Pure (Parameters);
- 
-    ---------------------------------------
-    -- Task And Stack Allocation Control --
-    ---------------------------------------
- 
-    type Task_Storage_Size is new Integer;
-    --  Type used in tasking units for task storage size
- 
-    type Size_Type is new Task_Storage_Size;
-    --  Type used to provide task storage size to runtime
- 
-    Unspecified_Size : constant Size_Type := Size_Type'First;
-    --  Value used to indicate that no size type is set
- 
-    subtype Ratio is Size_Type range -1 .. 100;
-    Dynamic : constant Size_Type := -1;
-    --  The secondary stack ratio is a constant between 0 and 100 which
-    --  determines the percentage of the allocated task stack that is
-    --  used by the secondary stack (the rest being the primary stack).
-    --  The special value of minus one indicates that the secondary
-    --  stack is to be allocated from the heap instead.
- 
-    Sec_Stack_Ratio : constant Ratio := Dynamic;
-    --  This constant defines the handling of the secondary stack
- 
-    Sec_Stack_Dynamic : constant Boolean := Sec_Stack_Ratio = Dynamic;
-    --  Convenient Boolean for testing for dynamic secondary stack
- 
-    function Default_Stack_Size return Size_Type;
-    --  Default task stack size used if none is specified
- 
-    function Minimum_Stack_Size return Size_Type;
-    --  Minimum task stack size permitted
- 
-    function Adjust_Storage_Size (Size : Size_Type) return Size_Type;
-    --  Given the storage size stored in the TCB, return the Storage_Size
-    --  value required by the RM for the Storage_Size attribute. The
-    --  required adjustment is as follows:
-    --
-    --    when Size = Unspecified_Size, return Default_Stack_Size
-    --    when Size < Minimum_Stack_Size, return Minimum_Stack_Size
-    --    otherwise return given Size
- 
-    Default_Env_Stack_Size : constant Size_Type := 8_192_000;
-    --  Assumed size of the environment task, if no other information
-    --  is available. This value is used when stack checking is
-    --  enabled and no GNAT_STACK_LIMIT environment variable is set.
- 
-    Stack_Grows_Down  : constant Boolean := False;
-    --  This constant indicates whether the stack grows up (False) or
-    --  down (True) in memory as functions are called. It is used for
-    --  proper implementation of the stack overflow check.
- 
-    ----------------------------------------------
-    -- Characteristics of Types in Interfaces.C --
-    ----------------------------------------------
- 
-    long_bits : constant := Long_Integer'Size;
-    --  Number of bits in type long and unsigned_long. The normal convention
-    --  is that this is the same as type Long_Integer, but this is not true
-    --  of all targets. For example, in OpenVMS long /= Long_Integer.
- 
-    ----------------------------------------------
-    -- Behavior of Pragma Finalize_Storage_Only --
-    ----------------------------------------------
- 
-    --  Garbage_Collected is a Boolean constant whose value indicates the
-    --  effect of the pragma Finalize_Storage_Entry on a controlled type.
- 
-    --    Garbage_Collected = False
- 
-    --      The system releases all storage on program termination only,
-    --      but not other garbage collection occurs, so finalization calls
-    --      are ommitted only for outer level onjects can be omitted if
-    --      pragma Finalize_Storage_Only is used.
- 
-    --    Garbage_Collected = True
- 
-    --      The system provides full garbage collection, so it is never
-    --      necessary to release storage for controlled objects for which
-    --      a pragma Finalize_Storage_Only is used.
- 
-    Garbage_Collected : constant Boolean := False;
-    --  The storage mode for this system (release on program exit)
- 
-    ---------------------
-    -- Tasking Profile --
-    ---------------------
- 
-    --  In the following sections, constant parameters are defined to
-    --  allow some optimizations and fine tuning within the tasking run time
-    --  based on restrictions on the tasking features.
- 
-    ----------------------
-    -- Locking Strategy --
-    ----------------------
- 
-    Single_Lock : constant Boolean := False;
-    --  Indicates whether a single lock should be used within the tasking
-    --  run-time to protect internal structures. If True, a single lock
-    --  will be used, meaning less locking/unlocking operations, but also
-    --  more global contention. In general, Single_Lock should be set to
-    --  True on single processor machines, and to False to multi-processor
-    --  systems, but this can vary from application to application and also
-    --  depends on the scheduling policy.
- 
-    -------------------
-    -- Task Abortion --
-    -------------------
- 
-    No_Abort : constant Boolean := False;
-    --  This constant indicates whether abort statements and asynchronous
-    --  transfer of control (ATC) are disallowed. If set to True, it is
-    --  assumed that neither construct is used, and the run time does not
-    --  need to defer/undefer abort and check for pending actions at
-    --  completion points. A value of True for No_Abort corresponds to:
-    --  pragma Restrictions (No_Abort_Statements);
-    --  pragma Restrictions (Max_Asynchronous_Select_Nesting => 0);
- 
-    ----------------------
-    -- Dynamic Priority --
-    ----------------------
- 
-    Dynamic_Priority_Support : constant Boolean := True;
-    --  This constant indicates whether dynamic changes of task priorities
-    --  are allowed (True means normal RM mode in which such changes are
-    --  allowed). In particular, if this is False, then we do not need to
-    --  poll for pending base priority changes at every abort completion
-    --  point. A value of False for Dynamic_Priority_Support corresponds
-    --  to pragma Restrictions (No_Dynamic_Priorities);
- 
-    ---------------------
-    -- Task Attributes --
-    ---------------------
- 
-    Default_Attribute_Count : constant := 4;
-    --  Number of pre-allocated Address-sized task attributes stored in the
-    --  task control block.
- 
-    --------------------
-    -- Runtime Traces --
-    --------------------
- 
-    Runtime_Traces : constant Boolean := False;
-    --  This constant indicates whether the runtime outputs traces to a
-    --  predefined output or not (True means that traces are output).
-    --  See System.Traces for more details.
- 
- end System.Parameters;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5hsystem.ads gcc-4.0.0/gcc/ada/5hsystem.ads
*** gcc-3.4.3/gcc/ada/5hsystem.ads	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5hsystem.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,226 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                        GNAT RUN-TIME COMPONENTS                          --
- --                                                                          --
- --                               S Y S T E M                                --
- --                                                                          --
- --                                 S p e c                                  --
- --                             (HP-UX Version)                              --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the  contents of the part following the private keyword. --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- package System is
- pragma Pure (System);
- --  Note that we take advantage of the implementation permission to
- --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
- 
-    type Name is (SYSTEM_NAME_GNAT);
-    System_Name : constant Name := SYSTEM_NAME_GNAT;
- 
-    --  System-Dependent Named Numbers
- 
-    Min_Int               : constant := Long_Long_Integer'First;
-    Max_Int               : constant := Long_Long_Integer'Last;
- 
-    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
-    Max_Nonbinary_Modulus : constant := Integer'Last;
- 
-    Max_Base_Digits       : constant := Long_Long_Float'Digits;
-    Max_Digits            : constant := Long_Long_Float'Digits;
- 
-    Max_Mantissa          : constant := 63;
-    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
- 
-    Tick                  : constant := 0.01;
- 
-    --  Storage-related Declarations
- 
-    type Address is private;
-    Null_Address : constant Address;
- 
-    Storage_Unit : constant := 8;
-    Word_Size    : constant := 32;
-    Memory_Size  : constant := 2 ** 32;
- 
-    --  Address comparison
- 
-    function "<"  (Left, Right : Address) return Boolean;
-    function "<=" (Left, Right : Address) return Boolean;
-    function ">"  (Left, Right : Address) return Boolean;
-    function ">=" (Left, Right : Address) return Boolean;
-    function "="  (Left, Right : Address) return Boolean;
- 
-    pragma Import (Intrinsic, "<");
-    pragma Import (Intrinsic, "<=");
-    pragma Import (Intrinsic, ">");
-    pragma Import (Intrinsic, ">=");
-    pragma Import (Intrinsic, "=");
- 
-    --  Other System-Dependent Declarations
- 
-    type Bit_Order is (High_Order_First, Low_Order_First);
-    Default_Bit_Order : constant Bit_Order := High_Order_First;
- 
-    --  Priority-related Declarations (RM D.1)
- 
-    Max_Priority           : constant Positive := 30;
-    Max_Interrupt_Priority : constant Positive := 31;
- 
-    subtype Any_Priority       is Integer      range  0 .. 31;
-    subtype Priority           is Any_Priority range  0 .. 30;
-    subtype Interrupt_Priority is Any_Priority range 31 .. 31;
- 
-    Default_Priority : constant Priority := 15;
- 
- private
- 
-    type Address is mod Memory_Size;
-    Null_Address : constant Address := 0;
- 
-    --------------------------------------
-    -- System Implementation Parameters --
-    --------------------------------------
- 
-    --  These parameters provide information about the target that is used
-    --  by the compiler. They are in the private part of System, where they
-    --  can be accessed using the special circuitry in the Targparm unit
-    --  whose source should be consulted for more detailed descriptions
-    --  of the individual switch values.
- 
-    AAMP                      : constant Boolean := False;
-    Backend_Divide_Checks     : constant Boolean := False;
-    Backend_Overflow_Checks   : constant Boolean := False;
-    Command_Line_Args         : constant Boolean := True;
-    Configurable_Run_Time     : constant Boolean := False;
-    Denorm                    : constant Boolean := True;
-    Duration_32_Bits          : constant Boolean := False;
-    Exit_Status_Supported     : constant Boolean := True;
-    Fractional_Fixed_Ops      : constant Boolean := False;
-    Frontend_Layout           : constant Boolean := False;
-    Functions_Return_By_DSP   : constant Boolean := False;
-    Machine_Overflows         : constant Boolean := False;
-    Machine_Rounds            : constant Boolean := True;
-    OpenVMS                   : constant Boolean := False;
-    Signed_Zeros              : constant Boolean := False;
-    Stack_Check_Default       : constant Boolean := False;
-    Stack_Check_Probes        : constant Boolean := False;
-    Support_64_Bit_Divides    : constant Boolean := True;
-    Support_Aggregates        : constant Boolean := True;
-    Support_Composite_Assign  : constant Boolean := True;
-    Support_Composite_Compare : constant Boolean := True;
-    Support_Long_Shifts       : constant Boolean := True;
-    Suppress_Standard_Library : constant Boolean := False;
-    Use_Ada_Main_Program_Name : constant Boolean := False;
-    ZCX_By_Default            : constant Boolean := False;
-    GCC_ZCX_Support           : constant Boolean := True;
-    Front_End_ZCX_Support     : constant Boolean := False;
- 
-    --  Obsolete entries, to be removed eventually (bootstrap issues!)
- 
-    High_Integrity_Mode       : constant Boolean := False;
-    Long_Shifts_Inlined       : constant Boolean := False;
- 
-    --------------------------
-    -- Underlying Priorities --
-    ---------------------------
- 
-    --  Important note: this section of the file must come AFTER the
-    --  definition of the system implementation parameters to ensure
-    --  that the value of these parameters is available for analysis
-    --  of the declarations here (using Rtsfind at compile time).
- 
-    --  The underlying priorities table provides a generalized mechanism
-    --  for mapping from Ada priorities to system priorities. In some
-    --  cases a 1-1 mapping is not the convenient or optimal choice.
- 
-    --  For HP/UX DCE Threads, we use the full range of 31 priorities
-    --  in the Ada model, but map them by compression onto the more limited
-    --  range of priorities available in HP/UX.
-    --  For POSIX Threads, this table is ignored.
- 
-    --  To replace the default values of the Underlying_Priorities mapping,
-    --  copy this source file into your build directory, edit the file to
-    --  reflect your desired behavior, and recompile with the command:
- 
-    --     $ gcc -c -O2 -gnatpgn system.ads
- 
-    --  then recompile the run-time parts that depend on this package:
- 
-    --     $ gnatmake -a -gnatn -O2 <your application>
- 
-    --  then force rebuilding your application if you need different options:
- 
-    --     $ gnatmake -f <your options> <your application>
- 
-    type Priorities_Mapping is array (Any_Priority) of Integer;
-    pragma Suppress_Initialization (Priorities_Mapping);
-    --  Suppress initialization in case gnat.adc specifies Normalize_Scalars
- 
-    Underlying_Priorities : constant Priorities_Mapping :=
- 
-      (Priority'First => 16,
- 
-       1  => 17,
-       2  => 18,
-       3  => 18,
-       4  => 18,
-       5  => 18,
-       6  => 19,
-       7  => 19,
-       8  => 19,
-       9  => 20,
-       10 => 20,
-       11 => 21,
-       12 => 21,
-       13 => 22,
-       14 => 23,
- 
-       Default_Priority   => 24,
- 
-       16 => 25,
-       17 => 25,
-       18 => 25,
-       19 => 26,
-       20 => 26,
-       21 => 26,
-       22 => 27,
-       23 => 27,
-       24 => 27,
-       25 => 28,
-       26 => 28,
-       27 => 29,
-       28 => 29,
-       29 => 30,
- 
-       Priority'Last      => 30,
- 
-       Interrupt_Priority => 31);
- 
- end System;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5htaprop.adb gcc-4.0.0/gcc/ada/5htaprop.adb
*** gcc-3.4.3/gcc/ada/5htaprop.adb	Mon Jan  5 15:20:42 2004
--- gcc-4.0.0/gcc/ada/5htaprop.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,1063 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --     S Y S T E M . T A S K _ P R I M I T I V E S . O P E R A T I O N S    --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --         Copyright (C) 1992-2003, Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a HP-UX DCE threads (HPUX 10) version of this package
- 
- --  This package contains all the GNULL primitives that interface directly
- --  with the underlying OS.
- 
- pragma Polling (Off);
- --  Turn off polling, we do not want ATC polling to take place during
- --  tasking operations. It causes infinite loops and other problems.
- 
- with System.Tasking.Debug;
- --  used for Known_Tasks
- 
- with Interfaces.C;
- --  used for int
- --           size_t
- 
- with System.Interrupt_Management;
- --  used for Keep_Unmasked
- --           Abort_Task_Interrupt
- --           Interrupt_ID
- 
- with System.Interrupt_Management.Operations;
- --  used for Set_Interrupt_Mask
- --           All_Tasks_Mask
- pragma Elaborate_All (System.Interrupt_Management.Operations);
- 
- with System.Parameters;
- --  used for Size_Type
- 
- with System.Task_Primitives.Interrupt_Operations;
- --  used for Get_Interrupt_ID
- 
- with System.Tasking;
- --  used for Ada_Task_Control_Block
- --           Task_ID
- 
- with System.Soft_Links;
- --  used for Defer/Undefer_Abort
- 
- --  Note that we do not use System.Tasking.Initialization directly since
- --  this is a higher level package that we shouldn't depend on. For example
- --  when using the restricted run time, it is replaced by
- --  System.Tasking.Restricted.Initialization
- 
- with System.OS_Primitives;
- --  used for Delay_Modes
- 
- with Unchecked_Conversion;
- with Unchecked_Deallocation;
- 
- package body System.Task_Primitives.Operations is
- 
-    use System.Tasking.Debug;
-    use System.Tasking;
-    use Interfaces.C;
-    use System.OS_Interface;
-    use System.Parameters;
-    use System.OS_Primitives;
- 
-    package PIO renames System.Task_Primitives.Interrupt_Operations;
-    package SSL renames System.Soft_Links;
- 
-    ------------------
-    --  Local Data  --
-    ------------------
- 
-    --  The followings are logically constants, but need to be initialized
-    --  at run time.
- 
-    Single_RTS_Lock : aliased RTS_Lock;
-    --  This is a lock to allow only one thread of control in the RTS at
-    --  a time; it is used to execute in mutual exclusion from all other tasks.
-    --  Used mainly in Single_Lock mode, but also to protect All_Tasks_List
- 
-    ATCB_Key : aliased pthread_key_t;
-    --  Key used to find the Ada Task_ID associated with a thread
- 
-    Environment_Task_ID : Task_ID;
-    --  A variable to hold Task_ID for the environment task.
- 
-    Unblocked_Signal_Mask : aliased sigset_t;
-    --  The set of signals that should unblocked in all tasks
- 
-    Time_Slice_Val : Integer;
-    pragma Import (C, Time_Slice_Val, "__gl_time_slice_val");
- 
-    Dispatching_Policy : Character;
-    pragma Import (C, Dispatching_Policy, "__gl_task_dispatching_policy");
- 
-    --  Note: the reason that Locking_Policy is not needed is that this
-    --  is not implemented for DCE threads. The HPUX 10 port is at this
-    --  stage considered dead, and no further work is planned on it.
- 
-    FIFO_Within_Priorities : constant Boolean := Dispatching_Policy = 'F';
-    --  Indicates whether FIFO_Within_Priorities is set.
- 
-    Foreign_Task_Elaborated : aliased Boolean := True;
-    --  Used to identified fake tasks (i.e., non-Ada Threads).
- 
-    --------------------
-    -- Local Packages --
-    --------------------
- 
-    package Specific is
- 
-       procedure Initialize (Environment_Task : Task_ID);
-       pragma Inline (Initialize);
-       --  Initialize various data needed by this package.
- 
-       function Is_Valid_Task return Boolean;
-       pragma Inline (Is_Valid_Task);
-       --  Does the executing thread have a TCB?
- 
-       procedure Set (Self_Id : Task_ID);
-       pragma Inline (Set);
-       --  Set the self id for the current task.
- 
-       function Self return Task_ID;
-       pragma Inline (Self);
-       --  Return a pointer to the Ada Task Control Block of the calling task.
- 
-    end Specific;
- 
-    package body Specific is separate;
-    --  The body of this package is target specific.
- 
-    ---------------------------------
-    -- Support for foreign threads --
-    ---------------------------------
- 
-    function Register_Foreign_Thread (Thread : Thread_Id) return Task_ID;
-    --  Allocate and Initialize a new ATCB for the current Thread.
- 
-    function Register_Foreign_Thread
-      (Thread : Thread_Id) return Task_ID is separate;
- 
-    -----------------------
-    -- Local Subprograms --
-    -----------------------
- 
-    procedure Abort_Handler (Sig : Signal);
- 
-    function To_Address is new Unchecked_Conversion (Task_ID, System.Address);
- 
-    -------------------
-    -- Abort_Handler --
-    -------------------
- 
-    procedure Abort_Handler (Sig : Signal) is
-       pragma Unreferenced (Sig);
- 
-       Self_Id : constant Task_ID := Self;
-       Result  : Interfaces.C.int;
-       Old_Set : aliased sigset_t;
- 
-    begin
-       if Self_Id.Deferral_Level = 0
-         and then Self_Id.Pending_ATC_Level < Self_Id.ATC_Nesting_Level and then
-         not Self_Id.Aborting
-       then
-          Self_Id.Aborting := True;
- 
-          --  Make sure signals used for RTS internal purpose are unmasked
- 
-          Result := pthread_sigmask (SIG_UNBLOCK,
-            Unblocked_Signal_Mask'Unchecked_Access, Old_Set'Unchecked_Access);
-          pragma Assert (Result = 0);
- 
-          raise Standard'Abort_Signal;
-       end if;
-    end Abort_Handler;
- 
-    -----------------
-    -- Stack_Guard --
-    -----------------
- 
-    --  The underlying thread system sets a guard page at the
-    --  bottom of a thread stack, so nothing is needed.
-    --  ??? Check the comment above
- 
-    procedure Stack_Guard (T : ST.Task_ID; On : Boolean) is
-       pragma Unreferenced (T, On);
-    begin
-       null;
-    end Stack_Guard;
- 
-    -------------------
-    -- Get_Thread_Id --
-    -------------------
- 
-    function Get_Thread_Id (T : ST.Task_ID) return OSI.Thread_Id is
-    begin
-       return T.Common.LL.Thread;
-    end Get_Thread_Id;
- 
-    ----------
-    -- Self --
-    ----------
- 
-    function Self return Task_ID renames Specific.Self;
- 
-    ---------------------
-    -- Initialize_Lock --
-    ---------------------
- 
-    --  Note: mutexes and cond_variables needed per-task basis are
-    --        initialized in Initialize_TCB and the Storage_Error is
-    --        handled. Other mutexes (such as RTS_Lock, Memory_Lock...)
-    --        used in RTS is initialized before any status change of RTS.
-    --        Therefore rasing Storage_Error in the following routines
-    --        should be able to be handled safely.
- 
-    procedure Initialize_Lock
-      (Prio : System.Any_Priority;
-       L    : access Lock)
-    is
-       Attributes : aliased pthread_mutexattr_t;
-       Result     : Interfaces.C.int;
- 
-    begin
-       Result := pthread_mutexattr_init (Attributes'Access);
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result = ENOMEM then
-          raise Storage_Error;
-       end if;
- 
-       L.Priority := Prio;
- 
-       Result := pthread_mutex_init (L.L'Access, Attributes'Access);
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result = ENOMEM then
-          raise Storage_Error;
-       end if;
- 
-       Result := pthread_mutexattr_destroy (Attributes'Access);
-       pragma Assert (Result = 0);
-    end Initialize_Lock;
- 
-    procedure Initialize_Lock (L : access RTS_Lock; Level : Lock_Level) is
-       pragma Unreferenced (Level);
- 
-       Attributes : aliased pthread_mutexattr_t;
-       Result     : Interfaces.C.int;
- 
-    begin
-       Result := pthread_mutexattr_init (Attributes'Access);
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result = ENOMEM then
-          raise Storage_Error;
-       end if;
- 
-       Result := pthread_mutex_init (L, Attributes'Access);
- 
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result = ENOMEM then
-          raise Storage_Error;
-       end if;
- 
-       Result := pthread_mutexattr_destroy (Attributes'Access);
-       pragma Assert (Result = 0);
-    end Initialize_Lock;
- 
-    -------------------
-    -- Finalize_Lock --
-    -------------------
- 
-    procedure Finalize_Lock (L : access Lock) is
-       Result : Interfaces.C.int;
-    begin
-       Result := pthread_mutex_destroy (L.L'Access);
-       pragma Assert (Result = 0);
-    end Finalize_Lock;
- 
-    procedure Finalize_Lock (L : access RTS_Lock) is
-       Result : Interfaces.C.int;
-    begin
-       Result := pthread_mutex_destroy (L);
-       pragma Assert (Result = 0);
-    end Finalize_Lock;
- 
-    ----------------
-    -- Write_Lock --
-    ----------------
- 
-    procedure Write_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
-       Result : Interfaces.C.int;
- 
-    begin
-       L.Owner_Priority := Get_Priority (Self);
- 
-       if L.Priority < L.Owner_Priority then
-          Ceiling_Violation := True;
-          return;
-       end if;
- 
-       Result := pthread_mutex_lock (L.L'Access);
-       pragma Assert (Result = 0);
-       Ceiling_Violation := False;
-    end Write_Lock;
- 
-    procedure Write_Lock
-      (L : access RTS_Lock; Global_Lock : Boolean := False)
-    is
-       Result : Interfaces.C.int;
- 
-    begin
-       if not Single_Lock or else Global_Lock then
-          Result := pthread_mutex_lock (L);
-          pragma Assert (Result = 0);
-       end if;
-    end Write_Lock;
- 
-    procedure Write_Lock (T : Task_ID) is
-       Result : Interfaces.C.int;
- 
-    begin
-       if not Single_Lock then
-          Result := pthread_mutex_lock (T.Common.LL.L'Access);
-          pragma Assert (Result = 0);
-       end if;
-    end Write_Lock;
- 
-    ---------------
-    -- Read_Lock --
-    ---------------
- 
-    procedure Read_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
-    begin
-       Write_Lock (L, Ceiling_Violation);
-    end Read_Lock;
- 
-    ------------
-    -- Unlock --
-    ------------
- 
-    procedure Unlock (L : access Lock) is
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := pthread_mutex_unlock (L.L'Access);
-       pragma Assert (Result = 0);
-    end Unlock;
- 
-    procedure Unlock (L : access RTS_Lock; Global_Lock : Boolean := False) is
-       Result : Interfaces.C.int;
-    begin
-       if not Single_Lock or else Global_Lock then
-          Result := pthread_mutex_unlock (L);
-          pragma Assert (Result = 0);
-       end if;
-    end Unlock;
- 
-    procedure Unlock (T : Task_ID) is
-       Result : Interfaces.C.int;
- 
-    begin
-       if not Single_Lock then
-          Result := pthread_mutex_unlock (T.Common.LL.L'Access);
-          pragma Assert (Result = 0);
-       end if;
-    end Unlock;
- 
-    -----------
-    -- Sleep --
-    -----------
- 
-    procedure Sleep
-      (Self_ID : Task_ID;
-       Reason  : System.Tasking.Task_States)
-    is
-       pragma Unreferenced (Reason);
- 
-       Result : Interfaces.C.int;
-    begin
-       if Single_Lock then
-          Result := pthread_cond_wait
-            (Self_ID.Common.LL.CV'Access, Single_RTS_Lock'Access);
-       else
-          Result := pthread_cond_wait
-            (Self_ID.Common.LL.CV'Access, Self_ID.Common.LL.L'Access);
-       end if;
- 
-       --  EINTR is not considered a failure.
-       pragma Assert (Result = 0 or else Result = EINTR);
-    end Sleep;
- 
-    -----------------
-    -- Timed_Sleep --
-    -----------------
- 
-    procedure Timed_Sleep
-      (Self_ID  : Task_ID;
-       Time     : Duration;
-       Mode     : ST.Delay_Modes;
-       Reason   : System.Tasking.Task_States;
-       Timedout : out Boolean;
-       Yielded  : out Boolean)
-    is
-       pragma Unreferenced (Reason);
- 
-       Check_Time : constant Duration := Monotonic_Clock;
-       Abs_Time   : Duration;
-       Request    : aliased timespec;
-       Result     : Interfaces.C.int;
- 
-    begin
-       Timedout := True;
-       Yielded := False;
- 
-       if Mode = Relative then
-          Abs_Time := Duration'Min (Time, Max_Sensible_Delay) + Check_Time;
-       else
-          Abs_Time := Duration'Min (Check_Time + Max_Sensible_Delay, Time);
-       end if;
- 
-       if Abs_Time > Check_Time then
-          Request := To_Timespec (Abs_Time);
- 
-          loop
-             exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level
-               or else Self_ID.Pending_Priority_Change;
- 
-             if Single_Lock then
-                Result := pthread_cond_timedwait
-                  (Self_ID.Common.LL.CV'Access, Single_RTS_Lock'Access,
-                   Request'Access);
- 
-             else
-                Result := pthread_cond_timedwait
-                  (Self_ID.Common.LL.CV'Access, Self_ID.Common.LL.L'Access,
-                   Request'Access);
-             end if;
- 
-             exit when Abs_Time <= Monotonic_Clock;
- 
-             if Result = 0 or Result = EINTR then
- 
-                --  Somebody may have called Wakeup for us
- 
-                Timedout := False;
-                exit;
-             end if;
- 
-             pragma Assert (Result = ETIMEDOUT);
-          end loop;
-       end if;
-    end Timed_Sleep;
- 
-    -----------------
-    -- Timed_Delay --
-    -----------------
- 
-    procedure Timed_Delay
-      (Self_ID  : Task_ID;
-       Time     : Duration;
-       Mode     : ST.Delay_Modes)
-    is
-       Check_Time : constant Duration := Monotonic_Clock;
-       Abs_Time   : Duration;
-       Request    : aliased timespec;
-       Result     : Interfaces.C.int;
- 
-    begin
-       --  Only the little window between deferring abort and
-       --  locking Self_ID is the reason we need to
-       --  check for pending abort and priority change below! :(
- 
-       SSL.Abort_Defer.all;
- 
-       if Single_Lock then
-          Lock_RTS;
-       end if;
- 
-       Write_Lock (Self_ID);
- 
-       if Mode = Relative then
-          Abs_Time := Time + Check_Time;
-       else
-          Abs_Time := Duration'Min (Check_Time + Max_Sensible_Delay, Time);
-       end if;
- 
-       if Abs_Time > Check_Time then
-          Request := To_Timespec (Abs_Time);
-          Self_ID.Common.State := Delay_Sleep;
- 
-          loop
-             if Self_ID.Pending_Priority_Change then
-                Self_ID.Pending_Priority_Change := False;
-                Self_ID.Common.Base_Priority := Self_ID.New_Base_Priority;
-                Set_Priority (Self_ID, Self_ID.Common.Base_Priority);
-             end if;
- 
-             exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level;
- 
-             if Single_Lock then
-                Result := pthread_cond_timedwait (Self_ID.Common.LL.CV'Access,
-                  Single_RTS_Lock'Access, Request'Access);
-             else
-                Result := pthread_cond_timedwait (Self_ID.Common.LL.CV'Access,
-                  Self_ID.Common.LL.L'Access, Request'Access);
-             end if;
- 
-             exit when Abs_Time <= Monotonic_Clock;
- 
-             pragma Assert (Result = 0 or else
-               Result = ETIMEDOUT or else
-               Result = EINTR);
-          end loop;
- 
-          Self_ID.Common.State := Runnable;
-       end if;
- 
-       Unlock (Self_ID);
- 
-       if Single_Lock then
-          Unlock_RTS;
-       end if;
- 
-       Result := sched_yield;
-       SSL.Abort_Undefer.all;
-    end Timed_Delay;
- 
-    ---------------------
-    -- Monotonic_Clock --
-    ---------------------
- 
-    function Monotonic_Clock return Duration is
-       TS     : aliased timespec;
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := Clock_Gettime (CLOCK_REALTIME, TS'Unchecked_Access);
-       pragma Assert (Result = 0);
-       return To_Duration (TS);
-    end Monotonic_Clock;
- 
-    -------------------
-    -- RT_Resolution --
-    -------------------
- 
-    function RT_Resolution return Duration is
-    begin
-       return 10#1.0#E-6;
-    end RT_Resolution;
- 
-    ------------
-    -- Wakeup --
-    ------------
- 
-    procedure Wakeup (T : Task_ID; Reason : System.Tasking.Task_States) is
-       pragma Unreferenced (Reason);
- 
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := pthread_cond_signal (T.Common.LL.CV'Access);
-       pragma Assert (Result = 0);
-    end Wakeup;
- 
-    -----------
-    -- Yield --
-    -----------
- 
-    procedure Yield (Do_Yield : Boolean := True) is
-       Result : Interfaces.C.int;
-       pragma Unreferenced (Result);
-    begin
-       if Do_Yield then
-          Result := sched_yield;
-       end if;
-    end Yield;
- 
-    ------------------
-    -- Set_Priority --
-    ------------------
- 
-    type Prio_Array_Type is array (System.Any_Priority) of Integer;
-    pragma Atomic_Components (Prio_Array_Type);
- 
-    Prio_Array : Prio_Array_Type;
-    --  Global array containing the id of the currently running task for
-    --  each priority.
-    --
-    --  Note: we assume that we are on a single processor with run-til-blocked
-    --  scheduling.
- 
-    procedure Set_Priority
-      (T                   : Task_ID;
-       Prio                : System.Any_Priority;
-       Loss_Of_Inheritance : Boolean := False)
-    is
-       Result     : Interfaces.C.int;
-       Array_Item : Integer;
-       Param      : aliased struct_sched_param;
- 
-    begin
-       Param.sched_priority  := Interfaces.C.int (Underlying_Priorities (Prio));
- 
-       if Time_Slice_Val > 0 then
-          Result := pthread_setschedparam
-            (T.Common.LL.Thread, SCHED_RR, Param'Access);
- 
-       elsif FIFO_Within_Priorities or else Time_Slice_Val = 0 then
-          Result := pthread_setschedparam
-            (T.Common.LL.Thread, SCHED_FIFO, Param'Access);
- 
-       else
-          Result := pthread_setschedparam
-            (T.Common.LL.Thread, SCHED_OTHER, Param'Access);
-       end if;
- 
-       pragma Assert (Result = 0);
- 
-       if FIFO_Within_Priorities then
- 
-          --  Annex D requirement [RM D.2.2 par. 9]:
-          --    If the task drops its priority due to the loss of inherited
-          --    priority, it is added at the head of the ready queue for its
-          --    new active priority.
- 
-          if Loss_Of_Inheritance
-            and then Prio < T.Common.Current_Priority
-          then
-             Array_Item := Prio_Array (T.Common.Base_Priority) + 1;
-             Prio_Array (T.Common.Base_Priority) := Array_Item;
- 
-             loop
-                --  Let some processes a chance to arrive
- 
-                Yield;
- 
-                --  Then wait for our turn to proceed
- 
-                exit when Array_Item = Prio_Array (T.Common.Base_Priority)
-                  or else Prio_Array (T.Common.Base_Priority) = 1;
-             end loop;
- 
-             Prio_Array (T.Common.Base_Priority) :=
-               Prio_Array (T.Common.Base_Priority) - 1;
-          end if;
-       end if;
- 
-       T.Common.Current_Priority := Prio;
-    end Set_Priority;
- 
-    ------------------
-    -- Get_Priority --
-    ------------------
- 
-    function Get_Priority (T : Task_ID) return System.Any_Priority is
-    begin
-       return T.Common.Current_Priority;
-    end Get_Priority;
- 
-    ----------------
-    -- Enter_Task --
-    ----------------
- 
-    procedure Enter_Task (Self_ID : Task_ID) is
-    begin
-       Self_ID.Common.LL.Thread := pthread_self;
-       Specific.Set (Self_ID);
- 
-       Lock_RTS;
- 
-       for J in Known_Tasks'Range loop
-          if Known_Tasks (J) = null then
-             Known_Tasks (J) := Self_ID;
-             Self_ID.Known_Tasks_Index := J;
-             exit;
-          end if;
-       end loop;
- 
-       Unlock_RTS;
-    end Enter_Task;
- 
-    --------------
-    -- New_ATCB --
-    --------------
- 
-    function New_ATCB (Entry_Num : Task_Entry_Index) return Task_ID is
-    begin
-       return new Ada_Task_Control_Block (Entry_Num);
-    end New_ATCB;
- 
-    -------------------
-    -- Is_Valid_Task --
-    -------------------
- 
-    function Is_Valid_Task return Boolean renames Specific.Is_Valid_Task;
- 
-    -----------------------------
-    -- Register_Foreign_Thread --
-    -----------------------------
- 
-    function Register_Foreign_Thread return Task_ID is
-    begin
-       if Is_Valid_Task then
-          return Self;
-       else
-          return Register_Foreign_Thread (pthread_self);
-       end if;
-    end Register_Foreign_Thread;
- 
-    --------------------
-    -- Initialize_TCB --
-    --------------------
- 
-    procedure Initialize_TCB (Self_ID : Task_ID; Succeeded : out Boolean) is
-       Mutex_Attr : aliased pthread_mutexattr_t;
-       Result     : Interfaces.C.int;
-       Cond_Attr  : aliased pthread_condattr_t;
- 
-    begin
-       if not Single_Lock then
-          Result := pthread_mutexattr_init (Mutex_Attr'Access);
-          pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-          if Result = 0 then
-             Result := pthread_mutex_init (Self_ID.Common.LL.L'Access,
-               Mutex_Attr'Access);
-             pragma Assert (Result = 0 or else Result = ENOMEM);
-          end if;
- 
-          if Result /= 0 then
-             Succeeded := False;
-             return;
-          end if;
- 
-          Result := pthread_mutexattr_destroy (Mutex_Attr'Access);
-          pragma Assert (Result = 0);
-       end if;
- 
-       Result := pthread_condattr_init (Cond_Attr'Access);
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result = 0 then
-          Result := pthread_cond_init (Self_ID.Common.LL.CV'Access,
-            Cond_Attr'Access);
-          pragma Assert (Result = 0 or else Result = ENOMEM);
-       end if;
- 
-       if Result = 0 then
-          Succeeded := True;
-       else
-          if not Single_Lock then
-             Result := pthread_mutex_destroy (Self_ID.Common.LL.L'Access);
-             pragma Assert (Result = 0);
-          end if;
- 
-          Succeeded := False;
-       end if;
- 
-       Result := pthread_condattr_destroy (Cond_Attr'Access);
-       pragma Assert (Result = 0);
-    end Initialize_TCB;
- 
-    -----------------
-    -- Create_Task --
-    -----------------
- 
-    procedure Create_Task
-      (T          : Task_ID;
-       Wrapper    : System.Address;
-       Stack_Size : System.Parameters.Size_Type;
-       Priority   : System.Any_Priority;
-       Succeeded  : out Boolean)
-    is
-       Attributes          : aliased pthread_attr_t;
-       Adjusted_Stack_Size : Interfaces.C.size_t;
-       Result              : Interfaces.C.int;
- 
-       function Thread_Body_Access is new
-         Unchecked_Conversion (System.Address, Thread_Body);
- 
-    begin
-       if Stack_Size = Unspecified_Size then
-          Adjusted_Stack_Size := Interfaces.C.size_t (Default_Stack_Size);
- 
-       elsif Stack_Size < Minimum_Stack_Size then
-          Adjusted_Stack_Size := Interfaces.C.size_t (Minimum_Stack_Size);
- 
-       else
-          Adjusted_Stack_Size := Interfaces.C.size_t (Stack_Size);
-       end if;
- 
-       Result := pthread_attr_init (Attributes'Access);
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result /= 0 then
-          Succeeded := False;
-          return;
-       end if;
- 
-       Result := pthread_attr_setstacksize
-         (Attributes'Access, Adjusted_Stack_Size);
-       pragma Assert (Result = 0);
- 
-       --  Since the initial signal mask of a thread is inherited from the
-       --  creator, and the Environment task has all its signals masked, we
-       --  do not need to manipulate caller's signal mask at this point.
-       --  All tasks in RTS will have All_Tasks_Mask initially.
- 
-       Result := pthread_create
-         (T.Common.LL.Thread'Access,
-          Attributes'Access,
-          Thread_Body_Access (Wrapper),
-          To_Address (T));
-       pragma Assert (Result = 0 or else Result = EAGAIN);
- 
-       Succeeded := Result = 0;
- 
-       pthread_detach (T.Common.LL.Thread'Access);
-       --  Detach the thread using pthread_detach, sinc DCE threads do not have
-       --  pthread_attr_set_detachstate.
- 
-       Result := pthread_attr_destroy (Attributes'Access);
-       pragma Assert (Result = 0);
- 
-       Set_Priority (T, Priority);
-    end Create_Task;
- 
-    ------------------
-    -- Finalize_TCB --
-    ------------------
- 
-    procedure Finalize_TCB (T : Task_ID) is
-       Result : Interfaces.C.int;
-       Tmp    : Task_ID := T;
-       Is_Self : constant Boolean := T = Self;
- 
-       procedure Free is new
-         Unchecked_Deallocation (Ada_Task_Control_Block, Task_ID);
- 
-    begin
-       if not Single_Lock then
-          Result := pthread_mutex_destroy (T.Common.LL.L'Access);
-          pragma Assert (Result = 0);
-       end if;
- 
-       Result := pthread_cond_destroy (T.Common.LL.CV'Access);
-       pragma Assert (Result = 0);
- 
-       if T.Known_Tasks_Index /= -1 then
-          Known_Tasks (T.Known_Tasks_Index) := null;
-       end if;
- 
-       Free (Tmp);
- 
-       if Is_Self then
-          Result := pthread_setspecific (ATCB_Key, System.Null_Address);
-          pragma Assert (Result = 0);
-       end if;
- 
-    end Finalize_TCB;
- 
-    ---------------
-    -- Exit_Task --
-    ---------------
- 
-    procedure Exit_Task is
-    begin
-       Specific.Set (null);
-    end Exit_Task;
- 
-    ----------------
-    -- Abort_Task --
-    ----------------
- 
-    procedure Abort_Task (T : Task_ID) is
-    begin
-       --
-       --  Interrupt Server_Tasks may be waiting on an "event" flag (signal)
-       --
-       if T.Common.State = Interrupt_Server_Blocked_On_Event_Flag then
-          System.Interrupt_Management.Operations.Interrupt_Self_Process
-            (System.Interrupt_Management.Interrupt_ID
-              (PIO.Get_Interrupt_ID (T)));
-       end if;
-    end Abort_Task;
- 
-    ----------------
-    -- Check_Exit --
-    ----------------
- 
-    --  Dummy versions.  The only currently working versions is for solaris
-    --  (native).
- 
-    function Check_Exit (Self_ID : ST.Task_ID) return Boolean is
-       pragma Unreferenced (Self_ID);
-    begin
-       return True;
-    end Check_Exit;
- 
-    --------------------
-    -- Check_No_Locks --
-    --------------------
- 
-    function Check_No_Locks (Self_ID : ST.Task_ID) return Boolean is
-       pragma Unreferenced (Self_ID);
-    begin
-       return True;
-    end Check_No_Locks;
- 
-    ----------------------
-    -- Environment_Task --
-    ----------------------
- 
-    function Environment_Task return Task_ID is
-    begin
-       return Environment_Task_ID;
-    end Environment_Task;
- 
-    --------------
-    -- Lock_RTS --
-    --------------
- 
-    procedure Lock_RTS is
-    begin
-       Write_Lock (Single_RTS_Lock'Access, Global_Lock => True);
-    end Lock_RTS;
- 
-    ----------------
-    -- Unlock_RTS --
-    ----------------
- 
-    procedure Unlock_RTS is
-    begin
-       Unlock (Single_RTS_Lock'Access, Global_Lock => True);
-    end Unlock_RTS;
- 
-    ------------------
-    -- Suspend_Task --
-    ------------------
- 
-    function Suspend_Task
-      (T           : ST.Task_ID;
-       Thread_Self : Thread_Id)
-       return        Boolean
-    is
-       pragma Unreferenced (T);
-       pragma Unreferenced (Thread_Self);
- 
-    begin
-       return False;
-    end Suspend_Task;
- 
-    -----------------
-    -- Resume_Task --
-    -----------------
- 
-    function Resume_Task
-      (T           : ST.Task_ID;
-       Thread_Self : Thread_Id)
-       return        Boolean
-    is
-       pragma Unreferenced (T);
-       pragma Unreferenced (Thread_Self);
- 
-    begin
-       return False;
-    end Resume_Task;
- 
-    ----------------
-    -- Initialize --
-    ----------------
- 
-    procedure Initialize (Environment_Task : Task_ID) is
-       act       : aliased struct_sigaction;
-       old_act   : aliased struct_sigaction;
-       Tmp_Set   : aliased sigset_t;
-       Result    : Interfaces.C.int;
- 
-       function State (Int : System.Interrupt_Management.Interrupt_ID)
-                      return Character;
-       pragma Import (C, State, "__gnat_get_interrupt_state");
-       --  Get interrupt state.  Defined in a-init.c
-       --  The input argument is the interrupt number,
-       --  and the result is one of the following:
- 
-       Default : constant Character := 's';
-       --    'n'   this interrupt not set by any Interrupt_State pragma
-       --    'u'   Interrupt_State pragma set state to User
-       --    'r'   Interrupt_State pragma set state to Runtime
-       --    's'   Interrupt_State pragma set state to System (use "default"
-       --           system handler)
- 
-    begin
-       Environment_Task_ID := Environment_Task;
- 
-       --  Initialize the lock used to synchronize chain of all ATCBs.
- 
-       Initialize_Lock (Single_RTS_Lock'Access, RTS_Lock_Level);
- 
-       Specific.Initialize (Environment_Task);
- 
-       Enter_Task (Environment_Task);
- 
-       --  Install the abort-signal handler
- 
-       if State (System.Interrupt_Management.Abort_Task_Interrupt)
-                                                      /= Default
-       then
-          act.sa_flags := 0;
-          act.sa_handler := Abort_Handler'Address;
- 
-          Result := sigemptyset (Tmp_Set'Access);
-          pragma Assert (Result = 0);
-          act.sa_mask := Tmp_Set;
- 
-          Result :=
-            sigaction (
-              Signal (System.Interrupt_Management.Abort_Task_Interrupt),
-              act'Unchecked_Access,
-              old_act'Unchecked_Access);
-          pragma Assert (Result = 0);
-       end if;
-    end Initialize;
- 
-    --  NOTE: Unlike other pthread implementations, we do *not* mask all
-    --  signals here since we handle signals using the process-wide primitive
-    --  signal, rather than using sigthreadmask and sigwait. The reason of
-    --  this difference is that sigwait doesn't work when some critical
-    --  signals (SIGABRT, SIGPIPE) are masked.
- 
- end System.Task_Primitives.Operations;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5htaspri.ads gcc-4.0.0/gcc/ada/5htaspri.ads
*** gcc-3.4.3/gcc/ada/5htaspri.ads	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5htaspri.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,89 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                 S Y S T E M . T A S K _ P R I M I T I V E S              --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --          Copyright (C) 1991-2000 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a HP-UX version of this package.
- 
- --  This package provides low-level support for most tasking features.
- 
- pragma Polling (Off);
- --  Turn off polling, we do not want ATC polling to take place during
- --  tasking operations. It causes infinite loops and other problems.
- 
- with System.OS_Interface;
- --  used for pthread_mutex_t
- --           pthread_cond_t
- --           pthread_t
- 
- package System.Task_Primitives is
- 
-    type Lock is limited private;
-    --  Should be used for implementation of protected objects.
- 
-    type RTS_Lock is limited private;
-    --  Should be used inside the runtime system.
-    --  The difference between Lock and the RTS_Lock is that the later
-    --  one serves only as a semaphore so that do not check for
-    --  ceiling violations.
- 
-    type Task_Body_Access is access procedure;
-    --  Pointer to the task body's entry point (or possibly a wrapper
-    --  declared local to the GNARL).
- 
-    type Private_Data is limited private;
-    --  Any information that the GNULLI needs maintained on a per-task
-    --  basis.  A component of this type is guaranteed to be included
-    --  in the Ada_Task_Control_Block.
- 
- private
-    type Lock is record
-       L              : aliased System.OS_Interface.pthread_mutex_t;
-       Priority       : Integer;
-       Owner_Priority : Integer;
-    end record;
- 
-    type RTS_Lock is new System.OS_Interface.pthread_mutex_t;
-    type Private_Data is record
-       Thread      : aliased System.OS_Interface.pthread_t;
-       pragma Atomic (Thread);
-       --  Thread field may be updated by two different threads of control.
-       --  (See, Enter_Task and Create_Task in s-taprop.adb).
-       --  They put the same value (thr_self value). We do not want to
-       --  use lock on those operations and the only thing we have to
-       --  make sure is that they are updated in atomic fashion.
- 
-       CV          : aliased System.OS_Interface.pthread_cond_t;
-       L           : aliased RTS_Lock;
-       --  protection for all components is lock L
-    end record;
- 
- end System.Task_Primitives;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5htraceb.adb gcc-4.0.0/gcc/ada/5htraceb.adb
*** gcc-3.4.3/gcc/ada/5htraceb.adb	Mon Jan  5 15:20:42 2004
--- gcc-4.0.0/gcc/ada/5htraceb.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,600 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                     S Y S T E M . T R A C E B A C K                      --
- --                             (HP/UX Version)                              --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --           Copyright (C) 1999-2003 Ada Core Technologies, Inc.            --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- with Ada.Unchecked_Conversion;
- 
- package body System.Traceback is
- 
-    --  This package implements the backtracing facility by way of a dedicated
-    --  HP library for stack unwinding described in the "Runtime Architecture
-    --  Document".
- 
-    pragma Linker_Options ("/usr/lib/libcl.a");
- 
-    --  The library basically offers services to fetch information about a
-    --  "previous" frame based on information about a "current" one.
- 
-    type Current_Frame_Descriptor is record
-       cur_fsz : Address;  --  Frame size of current routine.
-       cur_sp  : Address;  --  The current value of stack pointer.
-       cur_rls : Address;  --  PC-space of the caller.
-       cur_rlo : Address;  --  PC-offset of the caller.
-       cur_dp  : Address;  --  Data Pointer of the current routine.
-       top_rp  : Address;  --  Initial value of RP.
-       top_mrp : Address;  --  Initial value of MRP.
-       top_sr0 : Address;  --  Initial value of sr0.
-       top_sr4 : Address;  --  Initial value of sr4.
-       top_r3  : Address;  --  Initial value of gr3.
-       cur_r19 : Address;  --  GR19 value of the calling routine.
-       top_r4  : Address;  --  Initial value of gr4.
-       dummy   : Address;  --  Reserved.
-       out_rlo : Address;  --  PC-offset of the caller after get_previous.
-    end record;
- 
-    type Previous_Frame_Descriptor is record
-       prev_fsz : Address;  --  frame size of calling routine.
-       prev_sp  : Address;  --  SP of calling routine.
-       prev_rls : Address;  --  PC_space of calling routine's caller.
-       prev_rlo : Address;  --  PC_offset of calling routine's caller.
-       prev_dp  : Address;  --  DP of calling routine.
-       udescr0  : Address;  --  low word of calling routine's unwind desc.
-       udescr1  : Address;  --  high word of calling routine's unwind desc.
-       ustart   : Address;  --  start of the unwind region.
-       uend     : Address;  --  end of the unwind region.
-       uw_index : Address;  --  index into the unwind table.
-       prev_r19 : Address;  --  GR19 value of the caller's caller.
-       top_r3   : Address;  --  Caller's initial gr3.
-       top_r4   : Address;  --  Caller's initial gr4.
-    end record;
- 
-    --  Provide useful shortcuts for the names
- 
-    subtype CFD is Current_Frame_Descriptor;
-    subtype PFD is Previous_Frame_Descriptor;
- 
-    --  Frames with dynamic stack allocation are handled using the associated
-    --  frame pointer, but HP compilers and GCC setup this pointer differently.
-    --  HP compilers set it to point at the top (highest address) of the static
-    --  part of the frame, wheras GCC sets it to point at the bottom of this
-    --  region. We have to fake the unwinder to compensate for this difference,
-    --  for which we'll need to access some subprograms unwind descriptors.
- 
-    type Bits_2_Value is mod 2 ** 2;
-    for Bits_2_Value'Size use 2;
- 
-    type Bits_4_Value  is mod 2 ** 4;
-    for Bits_4_Value'Size use 4;
- 
-    type Bits_5_Value  is mod 2 ** 5;
-    for Bits_5_Value'Size use 5;
- 
-    type Bits_27_Value is mod 2 ** 27;
-    for Bits_27_Value'Size use 27;
- 
-    type Unwind_Descriptor is record
-       cannot_unwind         : Boolean;
-       mcode                 : Boolean;
-       mcode_save_restore    : Boolean;
-       region_desc           : Bits_2_Value;
-       reserved0             : Boolean;
-       entry_sr              : Boolean;
-       entry_fr              : Bits_4_Value;
-       entry_gr              : Bits_5_Value;
- 
-       args_stored           : Boolean;
-       variable_frame        : Boolean;
-       separate_package_body : Boolean;
-       frame_extension_mcode : Boolean;
- 
-       stack_overflow_check  : Boolean;
-       two_steps_sp_adjust   : Boolean;
-       sr4_export            : Boolean;
-       cxx_info              : Boolean;
- 
-       cxx_try_catch         : Boolean;
-       sched_entry_seq       : Boolean;
-       reserved1             : Boolean;
-       save_sp               : Boolean;
- 
-       save_rp               : Boolean;
-       save_mrp              : Boolean;
-       save_r19              : Boolean;
-       cleanups              : Boolean;
- 
-       hpe_interrupt_marker  : Boolean;
-       hpux_interrupt_marker : Boolean;
-       large_frame           : Boolean;
-       alloca_frame          : Boolean;
- 
-       reserved2             : Boolean;
-       frame_size            : Bits_27_Value;
-    end record;
- 
-    for Unwind_Descriptor'Size use 64;
- 
-    for Unwind_Descriptor use record
-       cannot_unwind         at 0 range 0 .. 0;
-       mcode                 at 0 range 1 .. 1;
-       mcode_save_restore    at 0 range 2 .. 2;
-       region_desc           at 0 range 3 .. 4;
-       reserved0             at 0 range 5 .. 5;
-       entry_sr              at 0 range 6 .. 6;
-       entry_fr              at 0 range 7 .. 10;
- 
-       entry_gr              at 1 range 3 .. 7;
- 
-       args_stored           at 2 range 0 .. 0;
-       variable_frame        at 2 range 1 .. 1;
-       separate_package_body at 2 range 2 .. 2;
-       frame_extension_mcode at 2 range 3 .. 3;
-       stack_overflow_check  at 2 range 4 .. 4;
-       two_steps_sp_adjust   at 2 range 5 .. 5;
-       sr4_export            at 2 range 6 .. 6;
-       cxx_info              at 2 range 7 .. 7;
- 
-       cxx_try_catch         at 3 range 0 .. 0;
-       sched_entry_seq       at 3 range 1 .. 1;
-       reserved1             at 3 range 2 .. 2;
-       save_sp               at 3 range 3 .. 3;
-       save_rp               at 3 range 4 .. 4;
-       save_mrp              at 3 range 5 .. 5;
-       save_r19              at 3 range 6 .. 6;
-       cleanups              at 3 range 7 .. 7;
- 
-       hpe_interrupt_marker  at 4 range 0 .. 0;
-       hpux_interrupt_marker at 4 range 1 .. 1;
-       large_frame           at 4 range 2 .. 2;
-       alloca_frame          at 4 range 3 .. 3;
- 
-       reserved2             at 4 range 4 .. 4;
-       frame_size            at 4 range 5 .. 31;
-    end record;
- 
-    subtype UWD is Unwind_Descriptor;
-    type UWD_Ptr is access all UWD;
- 
-    function To_UWD_Access is new Ada.Unchecked_Conversion (Address, UWD_Ptr);
- 
-    --  The descriptor associated with a given code location is retrieved
-    --  using functions imported from the HP library, requiring the definition
-    --  of additional structures.
- 
-    type Unwind_Table_Region is record
-       Table_Start : Address;
-       Table_End   : Address;
-    end record;
-    --  An Unwind Table region, which is a memory area containing Unwind
-    --  Descriptors.
- 
-    subtype UWT is Unwind_Table_Region;
- 
-    --  The subprograms imported below are provided by the HP library
- 
-    function U_get_unwind_table return UWT;
-    pragma Import (C, U_get_unwind_table, "U_get_unwind_table");
-    --  Get the unwind table region associated with the current executable.
-    --  This function is actually documented as having an argument, but which
-    --  is only used for the MPE/iX targets.
- 
-    function U_get_shLib_unwind_table (r19 : Address) return UWT;
-    pragma Import (C, U_get_shLib_unwind_table, "U_get_shLib_unw_tbl");
-    --  Return the unwind table region associated with a possible shared
-    --  library, as determined by the provided r19 value.
- 
-    function U_get_shLib_text_addr (r19 : Address) return Address;
-    pragma Import (C, U_get_shLib_text_addr, "U_get_shLib_text_addr");
-    --  Return the address at which the code for a shared library begins, or
-    --  -1 if the value provided for r19 does not identify shared library code.
- 
-    function U_get_unwind_entry
-      (Pc          : Address;
-       Space       : Address;
-       Table_Start : Address;
-       Table_End   : Address) return Address;
-    pragma Import (C, U_get_unwind_entry, "U_get_unwind_entry");
-    --  Given the bounds of an unwind table, return the address of the
-    --  unwind descriptor associated with a code location/space. In the case
-    --  of shared library code, the offset from the beginning of the library
-    --  is expected as Pc.
- 
-    procedure U_init_frame_record (Frame : access CFD);
-    pragma Import (C, U_init_frame_record, "U_init_frame_record");
- 
-    procedure U_prep_frame_rec_for_unwind (Frame : access CFD);
-    pragma Import (C, U_prep_frame_rec_for_unwind,
-                     "U_prep_frame_rec_for_unwind");
- 
-    --  Fetch the description data of the frame in which these two procedures
-    --  are called.
- 
-    function U_get_u_rlo (Cur : access CFD; Prev : access PFD) return Integer;
-    pragma Import (C, U_get_u_rlo, "U_IS_STUB_OR_CALLX");
-    --  From a complete current frame with a return location possibly located
-    --  into a linker generated stub, and basic information about the previous
-    --  frame, place the first non stub return location into the current frame.
-    --  Return -1 if something went wrong during the computation.
- 
-    function U_is_shared_pc (rlo : Address; r19 : Address) return Address;
-    pragma Import (C, U_is_shared_pc, "U_is_shared_pc");
-    --  Return 0 if the provided return location does not correspond to code
-    --  in a shared library, or something non null otherwise.
- 
-    function U_get_previous_frame_x
-      (current_frame  : access CFD;
-       previous_frame : access PFD;
-       previous_size  : Integer) return Integer;
-    pragma Import (C, U_get_previous_frame_x, "U_get_previous_frame_x");
-    --  Fetch the data describing the "previous" frame relatively to the
-    --  "current" one. "previous_size" should be the size of the "previous"
-    --  frame descriptor provided.
-    --
-    --  The library provides a simpler interface without the size parameter
-    --  but it is not usable when frames with dynamically allocated space are
-    --  on the way.
- 
-    ------------------
-    -- C_Call_Chain --
-    ------------------
- 
-    function C_Call_Chain
-      (Traceback : System.Address;
-       Max_Len   : Natural) return Natural
-    is
-       Val : Natural;
- 
-    begin
-       Call_Chain (Traceback, Max_Len, Val);
-       return Val;
-    end C_Call_Chain;
- 
-    ----------------
-    -- Call_Chain --
-    ----------------
- 
-    procedure Call_Chain
-      (Traceback   : System.Address;
-       Max_Len     : Natural;
-       Len         : out Natural;
-       Exclude_Min : System.Address := System.Null_Address;
-       Exclude_Max : System.Address := System.Null_Address;
-       Skip_Frames : Natural := 1)
-    is
-       type Tracebacks_Array is array (1 .. Max_Len) of System.Address;
-       pragma Suppress_Initialization (Tracebacks_Array);
- 
-       --  The code location returned by the unwinder is a return location but
-       --  what we need is a call point. Under HP-UX call instructions are 4
-       --  bytes long and the return point they specify is 4 bytes beyond the
-       --  next instruction because of the delay slot.
- 
-       Call_Size  : constant := 4;
-       DSlot_Size : constant := 4;
-       Rlo_Offset : constant := Call_Size + DSlot_Size;
- 
-       --  Moreover, the return point is passed via a register which two least
-       --  significant bits specify a privilege level that we will have to mask.
- 
-       Priv_Mask  : constant := 16#00000003#;
- 
-       Frame       : aliased CFD;
-       Code        : System.Address;
-       J           : Natural := 1;
-       Pop_Success : Boolean;
-       Trace       : Tracebacks_Array;
-       for Trace'Address use Traceback;
- 
-       --  The backtracing process needs a set of subprograms :
- 
-       function UWD_For_RLO_Of (Frame : access CFD) return UWD_Ptr;
-       --  Return an access to the unwind descriptor for the caller of
-       --  a given frame, using only the provided return location.
- 
-       function UWD_For_Caller_Of (Frame : access CFD) return UWD_Ptr;
-       --  Return an access to the unwind descriptor for the user code caller
-       --  of a given frame, or null if the information is not available.
- 
-       function Pop_Frame (Frame : access CFD) return Boolean;
-       --  Update the provided machine state structure so that it reflects
-       --  the state one call frame "above" the initial one.
-       --
-       --  Return True if the operation has been successful, False otherwise.
-       --  Failure typically occurs when the top of the call stack has been
-       --  reached.
- 
-       function Prepare_For_Unwind_Of (Frame : access CFD) return Boolean;
-       --  Perform the necessary adaptations to the machine state before
-       --  calling the unwinder. Currently used for the specific case of
-       --  dynamically sized previous frames.
-       --
-       --  Return True if everything went fine, or False otherwise.
- 
-       Program_UWT : constant UWT := U_get_unwind_table;
- 
-       ---------------
-       -- Pop_Frame --
-       ---------------
- 
-       function Pop_Frame (Frame : access CFD) return Boolean is
-          Up_Frame    : aliased PFD;
-          State_Ready : Boolean;
- 
-       begin
-          --  Check/adapt the state before calling the unwinder and return
-          --  if anything went wrong.
- 
-          State_Ready := Prepare_For_Unwind_Of (Frame);
- 
-          if not State_Ready then
-             return False;
-          end if;
- 
-          --  Now, safely call the unwinder and use the results.
- 
-          if U_get_previous_frame_x (Frame,
-                                     Up_Frame'Access,
-                                     Up_Frame'Size) /= 0
-          then
-             return False;
-          end if;
- 
-          --  In case a stub is on the way, the usual previous return location
-          --  (the one in prev_rlo) is the one in the stub and the "real" one
-          --  is placed in the "current" record, so let's take this one into
-          --  account.
- 
-          Frame.out_rlo := Frame.cur_rlo;
- 
-          Frame.cur_fsz := Up_Frame.prev_fsz;
-          Frame.cur_sp  := Up_Frame.prev_sp;
-          Frame.cur_rls := Up_Frame.prev_rls;
-          Frame.cur_rlo := Up_Frame.prev_rlo;
-          Frame.cur_dp  := Up_Frame.prev_dp;
-          Frame.cur_r19 := Up_Frame.prev_r19;
-          Frame.top_r3  := Up_Frame.top_r3;
-          Frame.top_r4  := Up_Frame.top_r4;
- 
-          return True;
-       end Pop_Frame;
- 
-       ---------------------------------
-       -- Prepare_State_For_Unwind_Of --
-       ---------------------------------
- 
-       function Prepare_For_Unwind_Of (Frame : access CFD) return Boolean
-       is
-          Caller_UWD    : UWD_Ptr;
-          FP_Adjustment : Integer;
- 
-       begin
-          --  No need to bother doing anything if the stack is already fully
-          --  unwound.
- 
-          if Frame.cur_rlo = 0 then
-             return False;
-          end if;
- 
-          --  When ALLOCA_FRAME is set in an unwind descriptor, the unwinder
-          --  uses the value provided in current.top_r3 or current.top_r4 as
-          --  a frame pointer to compute the size of the frame. What decides
-          --  between r3 or r4 is the unwind descriptor LARGE_FRAME bit, with
-          --  r4 chosen if the bit is set.
- 
-          --  The size computed by the unwinder is STATIC_PART + (SP - FP),
-          --  which is correct with HP's frame pointer convention, but not
-          --  with GCC's one since we end up with the static part accounted
-          --  for twice.
- 
-          --  We have to compute r4 when it is required because the unwinder
-          --  has looked for it at a place where it was not if we went through
-          --  GCC frames.
- 
-          --  The size of the static part of a frame can be found in the
-          --  associated unwind descriptor.
- 
-          Caller_UWD := UWD_For_Caller_Of (Frame);
- 
-          --  If we cannot get it, we are unable to compute the potentially
-          --  necessary adjustments. We'd better not try to go on then.
- 
-          if Caller_UWD = null then
-             return False;
-          end if;
- 
-          --  If the caller frame is a GCC one, r3 is its frame pointer and
-          --  points to the bottom of the frame. The value to provide for r4
-          --  can then be computed directly from the one of r3, compensating
-          --  for the static part of the frame.
- 
-          --  If the caller frame is an HP one, r3 is used to locate the
-          --  previous frame marker, that is it also points to the bottom of
-          --  the frame (this is why r3 cannot be used as the frame pointer in
-          --  the HP sense for large frames). The value to provide for r4 can
-          --  then also be computed from the one of r3 with the compensation
-          --  for the static part of the frame.
- 
-          FP_Adjustment := Integer (Caller_UWD.frame_size * 8);
-          Frame.top_r4  := Address (Integer (Frame.top_r3) + FP_Adjustment);
- 
-          return True;
-       end Prepare_For_Unwind_Of;
- 
-       -----------------------
-       -- UWD_For_Caller_Of --
-       -----------------------
- 
-       function UWD_For_Caller_Of (Frame : access CFD) return UWD_Ptr
-       is
-          UWD_Access : UWD_Ptr;
- 
-       begin
-          --  First try the most direct path, using the return location data
-          --  associated with the frame.
- 
-          UWD_Access := UWD_For_RLO_Of (Frame);
- 
-          if UWD_Access /= null then
-             return UWD_Access;
-          end if;
- 
-          --  If we did not get a result, we might face an in-stub return
-          --  address. In this case U_get_previous_frame can tell us what the
-          --  first not-in-stub return point is. We cannot call it directly,
-          --  though, because we haven't computed the potentially necessary
-          --  frame pointer adjustments, which might lead to SEGV in some
-          --  circumstances. Instead, we directly call the libcl routine which
-          --  is called by U_get_previous_frame and which only requires few
-          --  information. Take care, however, that the information is provided
-          --  in the "current" argument, so we need to work on a copy to avoid
-          --  disturbing our caller.
- 
-          declare
-             U_Current  : aliased CFD := Frame.all;
-             U_Previous : aliased PFD;
- 
-          begin
-             U_Previous.prev_dp  := U_Current.cur_dp;
-             U_Previous.prev_rls := U_Current.cur_rls;
-             U_Previous.prev_sp  := U_Current.cur_sp - U_Current.cur_fsz;
- 
-             if U_get_u_rlo (U_Current'Access, U_Previous'Access) /= -1 then
-                UWD_Access := UWD_For_RLO_Of (U_Current'Access);
-             end if;
-          end;
- 
-          return UWD_Access;
-       end UWD_For_Caller_Of;
- 
-       --------------------
-       -- UWD_For_RLO_Of --
-       --------------------
- 
-       function UWD_For_RLO_Of (Frame : access CFD) return UWD_Ptr
-       is
-          UWD_Address : Address;
- 
-          --  The addresses returned by the library point to full descriptors
-          --  including the frame information bits but also the applicable PC
-          --  range. We need to account for this.
- 
-          Frame_Info_Offset  : constant := 8;
- 
-       begin
-          --  First try to locate the descriptor in the program's unwind table.
- 
-          UWD_Address := U_get_unwind_entry (Frame.cur_rlo,
-                                             Frame.cur_rls,
-                                             Program_UWT.Table_Start,
-                                             Program_UWT.Table_End);
- 
-          --  If we did not get it, we might have a frame from code in a
-          --  stub or shared library. For code in stub we would have to
-          --  compute the first non-stub return location but this is not
-          --  the role of this subprogram, so let's just try to see if we
-          --  can get a result from the tables in shared libraries.
- 
-          if UWD_Address = -1
-            and then U_is_shared_pc (Frame.cur_rlo, Frame.cur_r19) /= 0
-          then
-             declare
-                Shlib_UWT   : constant UWT     :=
-                                U_get_shLib_unwind_table (Frame.cur_r19);
-                Shlib_Start : constant Address :=
-                                U_get_shLib_text_addr (Frame.cur_r19);
-                Rlo_Offset  : constant Address :=
-                                Frame.cur_rlo - Shlib_Start;
-             begin
-                UWD_Address := U_get_unwind_entry (Rlo_Offset,
-                                                   Frame.cur_rls,
-                                                   Shlib_UWT.Table_Start,
-                                                   Shlib_UWT.Table_End);
-             end;
-          end if;
- 
-          if UWD_Address /= -1 then
-             return To_UWD_Access (UWD_Address + Frame_Info_Offset);
-          else
-             return null;
-          end if;
-       end UWD_For_RLO_Of;
- 
-    --  Start of processing for Call_Chain
- 
-    begin
-       --  Fetch the state for this subprogram's frame and pop it so that we
-       --  start with an initial out_rlo "here".
- 
-       U_init_frame_record (Frame'Access);
-       Frame.top_sr0 := 0;
-       Frame.top_sr4 := 0;
- 
-       U_prep_frame_rec_for_unwind (Frame'Access);
- 
-       Pop_Success := Pop_Frame (Frame'Access);
- 
-       --  Skip the requested number of frames.
- 
-       for I in 1 .. Skip_Frames loop
-          Pop_Success := Pop_Frame (Frame'Access);
-       end loop;
- 
-       --  Loop popping frames and storing locations until either a problem
-       --  occurs, or the top of the call chain is reached, or the provided
-       --  array is full.
- 
-       loop
-          --  We have to test some conditions against the return location
-          --  as it is returned, so get it as is first.
- 
-          Code := Frame.out_rlo;
- 
-          exit when not Pop_Success or else Code = 0 or else J = Max_Len + 1;
- 
-          --  Compute the call point from the retrieved return location :
-          --  Mask the privilege bits and account for the delta between the
-          --  call site and the return point.
- 
-          Code := (Code and not Priv_Mask) - Rlo_Offset;
- 
-          if Code < Exclude_Min or else Code > Exclude_Max then
-             Trace (J) := Code;
-             J := J + 1;
-          end if;
- 
-          Pop_Success := Pop_Frame (Frame'Access);
-       end loop;
- 
-       Len := J - 1;
-    end Call_Chain;
- 
- end System.Traceback;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5iosinte.adb gcc-4.0.0/gcc/ada/5iosinte.adb
*** gcc-3.4.3/gcc/ada/5iosinte.adb	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5iosinte.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,132 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   S Y S T E M . O S _ I N T E R F A C E                  --
- --                                                                          --
- --                                   B o d y                                --
- --                                                                          --
- --             Copyright (C) 1991-1994, Florida State University            --
- --             Copyright (C) 1995-2003, Ada Core Technologies               --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a GNU/LinuxThreads, Solaris pthread and HP-UX pthread version
- --  of this package.
- 
- pragma Polling (Off);
- --  Turn off polling, we do not want ATC polling to take place during
- --  tasking operations. It causes infinite loops and other problems.
- 
- --  This package encapsulates all direct interfaces to OS services
- --  that are needed by children of System.
- 
- with Interfaces.C; use Interfaces.C;
- package body System.OS_Interface is
- 
-    --------------------
-    -- Get_Stack_Base --
-    --------------------
- 
-    function Get_Stack_Base (thread : pthread_t) return Address is
-       pragma Warnings (Off, thread);
- 
-    begin
-       return Null_Address;
-    end Get_Stack_Base;
- 
-    ------------------
-    -- pthread_init --
-    ------------------
- 
-    procedure pthread_init is
-    begin
-       null;
-    end pthread_init;
- 
-    -----------------
-    -- To_Duration --
-    -----------------
- 
-    function To_Duration (TS : timespec) return Duration is
-    begin
-       return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9;
-    end To_Duration;
- 
-    function To_Duration (TV : struct_timeval) return Duration is
-    begin
-       return Duration (TV.tv_sec) + Duration (TV.tv_usec) / 10#1#E6;
-    end To_Duration;
- 
-    -----------------
-    -- To_Timespec --
-    -----------------
- 
-    function To_Timespec (D : Duration) return timespec is
-       S : time_t;
-       F : Duration;
- 
-    begin
-       S := time_t (Long_Long_Integer (D));
-       F := D - Duration (S);
- 
-       --  If F has negative value due to a round-up, adjust for positive F
-       --  value.
- 
-       if F < 0.0 then
-          S := S - 1;
-          F := F + 1.0;
-       end if;
- 
-       return timespec'(tv_sec => S,
-                        tv_nsec => long (Long_Long_Integer (F * 10#1#E9)));
-    end To_Timespec;
- 
-    ----------------
-    -- To_Timeval --
-    ----------------
- 
-    function To_Timeval (D : Duration) return struct_timeval is
-       S : time_t;
-       F : Duration;
- 
-    begin
-       S := time_t (Long_Long_Integer (D));
-       F := D - Duration (S);
- 
-       --  If F has negative value due to a round-up, adjust for positive F
-       --  value.
- 
-       if F < 0.0 then
-          S := S - 1;
-          F := F + 1.0;
-       end if;
- 
-       return
-         struct_timeval'
-           (tv_sec  => S,
-            tv_usec => time_t (Long_Long_Integer (F * 10#1#E6)));
-    end To_Timeval;
- 
- end System.OS_Interface;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5iosinte.ads gcc-4.0.0/gcc/ada/5iosinte.ads
*** gcc-3.4.3/gcc/ada/5iosinte.ads	Fri Dec  5 10:24:04 2003
--- gcc-4.0.0/gcc/ada/5iosinte.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,517 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   S Y S T E M . O S _ I N T E R F A C E                  --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a GNU/Linux (GNU/LinuxThreads) version of this package.
- 
- --  This package encapsulates all direct interfaces to OS services
- --  that are needed by children of System.
- 
- --  PLEASE DO NOT add any with-clauses to this package
- --  or remove the pragma Elaborate_Body.
- --  It is designed to be a bottom-level (leaf) package.
- 
- with Interfaces.C;
- package System.OS_Interface is
-    pragma Preelaborate;
- 
-    pragma Linker_Options ("-lpthread");
- 
-    subtype int            is Interfaces.C.int;
-    subtype char           is Interfaces.C.char;
-    subtype short          is Interfaces.C.short;
-    subtype long           is Interfaces.C.long;
-    subtype unsigned       is Interfaces.C.unsigned;
-    subtype unsigned_short is Interfaces.C.unsigned_short;
-    subtype unsigned_long  is Interfaces.C.unsigned_long;
-    subtype unsigned_char  is Interfaces.C.unsigned_char;
-    subtype plain_char     is Interfaces.C.plain_char;
-    subtype size_t         is Interfaces.C.size_t;
- 
-    -----------
-    -- Errno --
-    -----------
- 
-    function errno return int;
-    pragma Import (C, errno, "__get_errno");
- 
-    EAGAIN    : constant := 11;
-    EINTR     : constant := 4;
-    EINVAL    : constant := 22;
-    ENOMEM    : constant := 12;
-    EPERM     : constant := 1;
-    ETIMEDOUT : constant := 110;
- 
-    -------------
-    -- Signals --
-    -------------
- 
-    Max_Interrupt : constant := 63;
-    type Signal is new int range 0 .. Max_Interrupt;
-    for Signal'Size use int'Size;
- 
-    SIGHUP     : constant := 1; --  hangup
-    SIGINT     : constant := 2; --  interrupt (rubout)
-    SIGQUIT    : constant := 3; --  quit (ASCD FS)
-    SIGILL     : constant := 4; --  illegal instruction (not reset)
-    SIGTRAP    : constant := 5; --  trace trap (not reset)
-    SIGIOT     : constant := 6; --  IOT instruction
-    SIGABRT    : constant := 6; --  used by abort, replace SIGIOT in the  future
-    SIGFPE     : constant := 8; --  floating point exception
-    SIGKILL    : constant := 9; --  kill (cannot be caught or ignored)
-    SIGBUS     : constant := 7; --  bus error
-    SIGSEGV    : constant := 11; --  segmentation violation
-    SIGPIPE    : constant := 13; --  write on a pipe with no one to read it
-    SIGALRM    : constant := 14; --  alarm clock
-    SIGTERM    : constant := 15; --  software termination signal from kill
-    SIGUSR1    : constant := 10; --  user defined signal 1
-    SIGUSR2    : constant := 12; --  user defined signal 2
-    SIGCLD     : constant := 17; --  alias for SIGCHLD
-    SIGCHLD    : constant := 17; --  child status change
-    SIGPWR     : constant := 30; --  power-fail restart
-    SIGWINCH   : constant := 28; --  window size change
-    SIGURG     : constant := 23; --  urgent condition on IO channel
-    SIGPOLL    : constant := 29; --  pollable event occurred
-    SIGIO      : constant := 29; --  I/O now possible (4.2 BSD)
-    SIGLOST    : constant := 29; --  File lock lost
-    SIGSTOP    : constant := 19; --  stop (cannot be caught or ignored)
-    SIGTSTP    : constant := 20; --  user stop requested from tty
-    SIGCONT    : constant := 18; --  stopped process has been continued
-    SIGTTIN    : constant := 21; --  background tty read attempted
-    SIGTTOU    : constant := 22; --  background tty write attempted
-    SIGVTALRM  : constant := 26; --  virtual timer expired
-    SIGPROF    : constant := 27; --  profiling timer expired
-    SIGXCPU    : constant := 24; --  CPU time limit exceeded
-    SIGXFSZ    : constant := 25; --  filesize limit exceeded
-    SIGUNUSED  : constant := 31; --  unused signal (GNU/Linux)
-    SIGSTKFLT  : constant := 16; --  coprocessor stack fault (Linux)
-    SIGLTHRRES : constant := 32; --  GNU/LinuxThreads restart signal
-    SIGLTHRCAN : constant := 33; --  GNU/LinuxThreads cancel signal
-    SIGLTHRDBG : constant := 34; --  GNU/LinuxThreads debugger signal
- 
-    SIGADAABORT : constant := SIGABRT;
-    --  Change this if you want to use another signal for task abort.
-    --  SIGTERM might be a good one.
- 
-    type Signal_Set is array (Natural range <>) of Signal;
- 
-    Unmasked    : constant Signal_Set := (
-       SIGTRAP,
-       --  To enable debugging on multithreaded applications, mark SIGTRAP to
-       --  be kept unmasked.
- 
-       SIGBUS,
- 
-       SIGTTIN, SIGTTOU, SIGTSTP,
-       --  Keep these three signals unmasked so that background processes
-       --  and IO behaves as normal "C" applications
- 
-       SIGPROF,
-       --  To avoid confusing the profiler
- 
-       SIGKILL, SIGSTOP,
-       --  These two signals actually cannot be masked;
-       --  POSIX simply won't allow it.
- 
-       SIGLTHRRES, SIGLTHRCAN, SIGLTHRDBG);
-       --  These three signals are used by GNU/LinuxThreads starting from
-       --  glibc 2.1 (future 2.2).
- 
-    Reserved    : constant Signal_Set :=
-    --  I am not sure why the following two signals are reserved.
-    --  I guess they are not supported by this version of GNU/Linux.
-      (SIGVTALRM, SIGUNUSED);
- 
-    type sigset_t is private;
- 
-    function sigaddset (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigaddset, "sigaddset");
- 
-    function sigdelset (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigdelset, "sigdelset");
- 
-    function sigfillset (set : access sigset_t) return int;
-    pragma Import (C, sigfillset, "sigfillset");
- 
-    function sigismember (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigismember, "sigismember");
- 
-    function sigemptyset (set : access sigset_t) return int;
-    pragma Import (C, sigemptyset, "sigemptyset");
- 
-    type union_type_3 is new String (1 .. 116);
-    type siginfo_t is record
-       si_signo : int;
-       si_code  : int;
-       si_errno : int;
-       X_data   : union_type_3;
-    end record;
-    pragma Convention (C, siginfo_t);
- 
-    type struct_sigaction is record
-       sa_handler   : System.Address;
-       sa_mask      : sigset_t;
-       sa_flags     : unsigned_long;
-       sa_restorer  : System.Address;
-    end record;
-    pragma Convention (C, struct_sigaction);
-    type struct_sigaction_ptr is access all struct_sigaction;
- 
-    type Machine_State is record
-       eip : unsigned_long;
-       ebx : unsigned_long;
-       esp : unsigned_long;
-       ebp : unsigned_long;
-       esi : unsigned_long;
-       edi : unsigned_long;
-    end record;
-    type Machine_State_Ptr is access all Machine_State;
- 
-    SA_SIGINFO  : constant := 16#04#;
- 
-    SIG_BLOCK   : constant := 0;
-    SIG_UNBLOCK : constant := 1;
-    SIG_SETMASK : constant := 2;
- 
-    SIG_DFL : constant := 0;
-    SIG_IGN : constant := 1;
- 
-    function sigaction
-      (sig  : Signal;
-       act  : struct_sigaction_ptr;
-       oact : struct_sigaction_ptr) return int;
-    pragma Import (C, sigaction, "sigaction");
- 
-    ----------
-    -- Time --
-    ----------
- 
-    type timespec is private;
- 
-    function To_Duration (TS : timespec) return Duration;
-    pragma Inline (To_Duration);
- 
-    function To_Timespec (D : Duration) return timespec;
-    pragma Inline (To_Timespec);
- 
-    type struct_timeval is private;
- 
-    function To_Duration (TV : struct_timeval) return Duration;
-    pragma Inline (To_Duration);
- 
-    function To_Timeval (D : Duration) return struct_timeval;
-    pragma Inline (To_Timeval);
- 
-    function gettimeofday
-      (tv : access struct_timeval;
-       tz : System.Address := System.Null_Address) return int;
-    pragma Import (C, gettimeofday, "gettimeofday");
- 
-    function sysconf (name : int) return long;
-    pragma Import (C, sysconf);
- 
-    SC_CLK_TCK : constant := 2;
- 
-    -------------------------
-    -- Priority Scheduling --
-    -------------------------
- 
-    SCHED_OTHER : constant := 0;
-    SCHED_FIFO  : constant := 1;
-    SCHED_RR    : constant := 2;
- 
-    -------------
-    -- Process --
-    -------------
- 
-    type pid_t is private;
- 
-    function kill (pid : pid_t; sig : Signal) return int;
-    pragma Import (C, kill, "kill");
- 
-    function getpid return pid_t;
-    pragma Import (C, getpid, "getpid");
- 
-    -------------
-    -- Threads --
-    -------------
- 
-    type Thread_Body is access
-      function (arg : System.Address) return System.Address;
-    type pthread_t           is private;
-    subtype Thread_Id        is pthread_t;
- 
-    type pthread_mutex_t     is limited private;
-    type pthread_cond_t      is limited private;
-    type pthread_attr_t      is limited private;
-    type pthread_mutexattr_t is limited private;
-    type pthread_condattr_t  is limited private;
-    type pthread_key_t       is private;
- 
-    PTHREAD_CREATE_DETACHED : constant := 1;
- 
-    -----------
-    -- Stack --
-    -----------
- 
-    function Get_Stack_Base (thread : pthread_t) return Address;
-    pragma Inline (Get_Stack_Base);
-    --  This is a dummy procedure to share some GNULLI files
- 
-    ---------------------------------------
-    -- Nonstandard Thread Initialization --
-    ---------------------------------------
- 
-    procedure pthread_init;
-    pragma Inline (pthread_init);
-    --  This is a dummy procedure to share some GNULLI files
- 
-    -------------------------
-    -- POSIX.1c  Section 3 --
-    -------------------------
- 
-    function sigwait (set : access sigset_t; sig : access Signal) return int;
-    pragma Import (C, sigwait, "sigwait");
- 
-    function pthread_kill (thread : pthread_t; sig : Signal) return int;
-    pragma Import (C, pthread_kill, "pthread_kill");
- 
-    type sigset_t_ptr is access all sigset_t;
- 
-    function pthread_sigmask
-      (how  : int;
-       set  : sigset_t_ptr;
-       oset : sigset_t_ptr) return int;
-    pragma Import (C, pthread_sigmask, "pthread_sigmask");
- 
-    --------------------------
-    -- POSIX.1c  Section 11 --
-    --------------------------
- 
-    function pthread_mutexattr_init
-      (attr : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
- 
-    function pthread_mutexattr_destroy
-      (attr : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
- 
-    function pthread_mutex_init
-      (mutex : access pthread_mutex_t;
-       attr  : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
- 
-    function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
- 
-    function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_mutex_lock, "pthread_mutex_lock");
- 
-    function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_mutex_unlock, "pthread_mutex_unlock");
- 
-    function pthread_condattr_init
-      (attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
- 
-    function pthread_condattr_destroy
-      (attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
- 
-    function pthread_cond_init
-      (cond : access pthread_cond_t;
-       attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_cond_init, "pthread_cond_init");
- 
-    function pthread_cond_destroy (cond : access pthread_cond_t) return int;
-    pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
- 
-    function pthread_cond_signal (cond : access pthread_cond_t) return int;
-    pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
- 
-    function pthread_cond_wait
-      (cond  : access pthread_cond_t;
-       mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_cond_wait, "pthread_cond_wait");
- 
-    function pthread_cond_timedwait
-      (cond    : access pthread_cond_t;
-       mutex   : access pthread_mutex_t;
-       abstime : access timespec) return int;
-    pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait");
- 
-    --------------------------
-    -- POSIX.1c  Section 13 --
-    --------------------------
- 
-    type struct_sched_param is record
-       sched_priority : int;  --  scheduling priority
-    end record;
-    pragma Convention (C, struct_sched_param);
- 
-    function pthread_setschedparam
-      (thread : pthread_t;
-       policy : int;
-       param  : access struct_sched_param) return int;
-    pragma Import (C, pthread_setschedparam, "pthread_setschedparam");
- 
-    function pthread_attr_setschedpolicy
-      (attr   : access pthread_attr_t;
-       policy : int) return int;
-    pragma Import
-      (C, pthread_attr_setschedpolicy, "pthread_attr_setschedpolicy");
- 
-    function sched_yield return int;
-    pragma Import (C, sched_yield, "sched_yield");
- 
-    ---------------------------
-    -- P1003.1c - Section 16 --
-    ---------------------------
- 
-    function pthread_attr_init
-      (attributes : access pthread_attr_t) return int;
-    pragma Import (C, pthread_attr_init, "pthread_attr_init");
- 
-    function pthread_attr_destroy
-      (attributes : access pthread_attr_t) return int;
-    pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
- 
-    function pthread_attr_setdetachstate
-      (attr        : access pthread_attr_t;
-       detachstate : int) return int;
-    pragma Import
-      (C, pthread_attr_setdetachstate, "pthread_attr_setdetachstate");
- 
-    function pthread_attr_setstacksize
-      (attr      : access pthread_attr_t;
-       stacksize : size_t) return int;
-    pragma Import (C, pthread_attr_setstacksize, "pthread_attr_setstacksize");
- 
-    function pthread_create
-      (thread        : access pthread_t;
-       attributes    : access pthread_attr_t;
-       start_routine : Thread_Body;
-       arg           : System.Address) return int;
-    pragma Import (C, pthread_create, "pthread_create");
- 
-    procedure pthread_exit (status : System.Address);
-    pragma Import (C, pthread_exit, "pthread_exit");
- 
-    function pthread_self return pthread_t;
-    pragma Import (C, pthread_self, "pthread_self");
- 
-    --------------------------
-    -- POSIX.1c  Section 17 --
-    --------------------------
- 
-    function pthread_setspecific
-      (key   : pthread_key_t;
-       value : System.Address) return int;
-    pragma Import (C, pthread_setspecific, "pthread_setspecific");
- 
-    function pthread_getspecific (key : pthread_key_t) return System.Address;
-    pragma Import (C, pthread_getspecific, "pthread_getspecific");
- 
-    type destructor_pointer is access procedure (arg : System.Address);
- 
-    function pthread_key_create
-      (key        : access pthread_key_t;
-       destructor : destructor_pointer) return int;
-    pragma Import (C, pthread_key_create, "pthread_key_create");
- 
- private
- 
-    type sigset_t is array (0 .. 127) of unsigned_char;
-    pragma Convention (C, sigset_t);
- 
-    type pid_t is new int;
- 
-    type time_t is new long;
- 
-    type timespec is record
-       tv_sec  : time_t;
-       tv_nsec : long;
-    end record;
-    pragma Convention (C, timespec);
- 
-    type struct_timeval is record
-       tv_sec  : time_t;
-       tv_usec : time_t;
-    end record;
-    pragma Convention (C, struct_timeval);
- 
-    type pthread_attr_t is record
-       detachstate   : int;
-       schedpolicy   : int;
-       schedparam    : struct_sched_param;
-       inheritsched  : int;
-       scope         : int;
-       guardsize     : size_t;
-       stackaddr_set : int;
-       stackaddr     : System.Address;
-       stacksize     : size_t;
-    end record;
-    pragma Convention (C, pthread_attr_t);
- 
-    type pthread_condattr_t is record
-       dummy : int;
-    end record;
-    pragma Convention (C, pthread_condattr_t);
- 
-    type pthread_mutexattr_t is record
-       mutexkind : int;
-    end record;
-    pragma Convention (C, pthread_mutexattr_t);
- 
-    type pthread_t is new unsigned_long;
- 
-    type struct_pthread_fast_lock is record
-       status   : long;
-       spinlock : int;
-    end record;
-    pragma Convention (C, struct_pthread_fast_lock);
- 
-    type pthread_mutex_t is record
-       m_reserved : int;
-       m_count    : int;
-       m_owner    : System.Address;
-       m_kind     : int;
-       m_lock     : struct_pthread_fast_lock;
-    end record;
-    pragma Convention (C, pthread_mutex_t);
- 
-    type pthread_cond_t is array (0 .. 47) of unsigned_char;
-    pragma Convention (C, pthread_cond_t);
- 
-    type pthread_key_t is new unsigned;
- 
- end System.OS_Interface;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5isystem.ads gcc-4.0.0/gcc/ada/5isystem.ads
*** gcc-3.4.3/gcc/ada/5isystem.ads	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5isystem.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,166 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                        GNAT RUN-TIME COMPONENTS                          --
- --                                                                          --
- --                               S Y S T E M                                --
- --                                                                          --
- --                                 S p e c                                  --
- --                      (VxWorks/LEVEL B Version PPC)                       --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the  contents of the part following the private keyword. --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  Level B certifiable VxWorks version
- 
- pragma Restrictions (No_Finalization);
- pragma Restrictions (No_Exception_Registration);
- pragma Restrictions (No_Abort_Statements);
- 
- pragma Restrictions (Max_Asynchronous_Select_Nesting => 0);
- 
- package System is
- pragma Pure (System);
- --  Note that we take advantage of the implementation permission to
- --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
- 
-    type Name is (SYSTEM_NAME_GNAT);
-    System_Name : constant Name := SYSTEM_NAME_GNAT;
- 
-    --  System-Dependent Named Numbers
- 
-    Min_Int               : constant := Long_Long_Integer'First;
-    Max_Int               : constant := Long_Long_Integer'Last;
- 
-    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
-    Max_Nonbinary_Modulus : constant := Integer'Last;
- 
-    Max_Base_Digits       : constant := Long_Long_Float'Digits;
-    Max_Digits            : constant := Long_Long_Float'Digits;
- 
-    Max_Mantissa          : constant := 63;
-    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
- 
-    Tick                  : constant := 1.0 / 60.0;
- 
-    --  Storage-related Declarations
- 
-    type Address is private;
-    Null_Address : constant Address;
- 
-    Storage_Unit : constant := 8;
-    Word_Size    : constant := 32;
-    Memory_Size  : constant := 2 ** 32;
- 
-    --  Address comparison
- 
-    function "<"  (Left, Right : Address) return Boolean;
-    function "<=" (Left, Right : Address) return Boolean;
-    function ">"  (Left, Right : Address) return Boolean;
-    function ">=" (Left, Right : Address) return Boolean;
-    function "="  (Left, Right : Address) return Boolean;
- 
-    pragma Import (Intrinsic, "<");
-    pragma Import (Intrinsic, "<=");
-    pragma Import (Intrinsic, ">");
-    pragma Import (Intrinsic, ">=");
-    pragma Import (Intrinsic, "=");
- 
-    --  Other System-Dependent Declarations
- 
-    type Bit_Order is (High_Order_First, Low_Order_First);
-    Default_Bit_Order : constant Bit_Order := High_Order_First;
- 
-    --  Priority-related Declarations (RM D.1)
- 
-    --  256        is reserved for the VxWorks kernel
-    --  248 - 255  correspond to hardware interrupt levels 0 .. 7
-    --  247        is a catchall default "interrupt" priority for signals,
-    --             allowing higher priority than normal tasks, but lower than
-    --             hardware priority levels.  Protected Object ceilings can
-    --             override these values.
-    --  246        is used by the Interrupt_Manager task
- 
-    Max_Priority           : constant Positive := 245;
-    Max_Interrupt_Priority : constant Positive := 255;
- 
-    subtype Any_Priority       is Integer      range   0 .. 255;
-    subtype Priority           is Any_Priority range   0 .. 245;
-    subtype Interrupt_Priority is Any_Priority range 246 .. 255;
- 
-    Default_Priority : constant Priority := 122;
- 
- private
- 
-    type Address is mod Memory_Size;
-    Null_Address : constant Address := 0;
- 
-    --------------------------------------
-    -- System Implementation Parameters --
-    --------------------------------------
- 
-    --  These parameters provide information about the target that is used
-    --  by the compiler. They are in the private part of System, where they
-    --  can be accessed using the special circuitry in the Targparm unit
-    --  whose source should be consulted for more detailed descriptions
-    --  of the individual switch values.
- 
-    AAMP                      : constant Boolean := False;
-    Backend_Divide_Checks     : constant Boolean := False;
-    Backend_Overflow_Checks   : constant Boolean := False;
-    Command_Line_Args         : constant Boolean := False;
-    Configurable_Run_Time     : constant Boolean := True;
-    Denorm                    : constant Boolean := True;
-    Duration_32_Bits          : constant Boolean := True;
-    Exit_Status_Supported     : constant Boolean := True;
-    Fractional_Fixed_Ops      : constant Boolean := False;
-    Frontend_Layout           : constant Boolean := False;
-    Functions_Return_By_DSP   : constant Boolean := False;
-    Machine_Overflows         : constant Boolean := False;
-    Machine_Rounds            : constant Boolean := True;
-    OpenVMS                   : constant Boolean := False;
-    Signed_Zeros              : constant Boolean := True;
-    Stack_Check_Default       : constant Boolean := False;
-    Stack_Check_Probes        : constant Boolean := False;
-    Support_64_Bit_Divides    : constant Boolean := True;
-    Support_Aggregates        : constant Boolean := True;
-    Support_Composite_Assign  : constant Boolean := True;
-    Support_Composite_Compare : constant Boolean := True;
-    Support_Long_Shifts       : constant Boolean := True;
-    Suppress_Standard_Library : constant Boolean := False;
-    Use_Ada_Main_Program_Name : constant Boolean := True;
-    ZCX_By_Default            : constant Boolean := False;
-    GCC_ZCX_Support           : constant Boolean := False;
-    Front_End_ZCX_Support     : constant Boolean := False;
- 
-    --  Obsolete entries, to be removed eventually (bootstrap issues!)
- 
-    High_Integrity_Mode       : constant Boolean := True;
-    Long_Shifts_Inlined       : constant Boolean := False;
- 
- end System;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5itaprop.adb gcc-4.0.0/gcc/ada/5itaprop.adb
*** gcc-3.4.3/gcc/ada/5itaprop.adb	Tue Jan 13 11:51:31 2004
--- gcc-4.0.0/gcc/ada/5itaprop.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,1100 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --     S Y S T E M . T A S K _ P R I M I T I V E S . O P E R A T I O N S    --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --         Copyright (C) 1992-2003, Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a GNU/Linux (GNU/LinuxThreads) version of this package
- 
- --  This package contains all the GNULL primitives that interface directly
- --  with the underlying OS.
- 
- pragma Polling (Off);
- --  Turn off polling, we do not want ATC polling to take place during
- --  tasking operations. It causes infinite loops and other problems.
- 
- with System.Tasking.Debug;
- --  used for Known_Tasks
- 
- with Interfaces.C;
- --  used for int
- --           size_t
- 
- with System.Interrupt_Management;
- --  used for Keep_Unmasked
- --           Abort_Task_Interrupt
- --           Interrupt_ID
- 
- with System.Interrupt_Management.Operations;
- --  used for Set_Interrupt_Mask
- --           All_Tasks_Mask
- pragma Elaborate_All (System.Interrupt_Management.Operations);
- 
- with System.Parameters;
- --  used for Size_Type
- 
- with System.Tasking;
- --  used for Ada_Task_Control_Block
- --           Task_ID
- 
- with Ada.Exceptions;
- --  used for Raise_Exception
- --           Raise_From_Signal_Handler
- --           Exception_Id
- 
- with System.Soft_Links;
- --  used for Defer/Undefer_Abort
- 
- --  Note that we do not use System.Tasking.Initialization directly since
- --  this is a higher level package that we shouldn't depend on. For example
- --  when using the restricted run time, it is replaced by
- --  System.Tasking.Restricted.Initialization
- 
- with System.OS_Primitives;
- --  used for Delay_Modes
- 
- with System.Soft_Links;
- --  used for Get_Machine_State_Addr
- 
- with Unchecked_Conversion;
- with Unchecked_Deallocation;
- 
- package body System.Task_Primitives.Operations is
- 
-    use System.Tasking.Debug;
-    use System.Tasking;
-    use Interfaces.C;
-    use System.OS_Interface;
-    use System.Parameters;
-    use System.OS_Primitives;
- 
-    package SSL renames System.Soft_Links;
- 
-    ------------------
-    --  Local Data  --
-    ------------------
- 
-    --  The followings are logically constants, but need to be initialized
-    --  at run time.
- 
-    Single_RTS_Lock : aliased RTS_Lock;
-    --  This is a lock to allow only one thread of control in the RTS at
-    --  a time; it is used to execute in mutual exclusion from all other tasks.
-    --  Used mainly in Single_Lock mode, but also to protect All_Tasks_List
- 
-    ATCB_Key : aliased pthread_key_t;
-    --  Key used to find the Ada Task_ID associated with a thread
- 
-    Environment_Task_ID : Task_ID;
-    --  A variable to hold Task_ID for the environment task.
- 
-    Unblocked_Signal_Mask : aliased sigset_t;
-    --  The set of signals that should unblocked in all tasks
- 
-    --  The followings are internal configuration constants needed.
-    Priority_Ceiling_Emulation : constant Boolean := True;
- 
-    Next_Serial_Number : Task_Serial_Number := 100;
-    --  We start at 100, to reserve some special values for
-    --  using in error checking.
-    --  The following are internal configuration constants needed.
- 
-    Time_Slice_Val : Integer;
-    pragma Import (C, Time_Slice_Val, "__gl_time_slice_val");
- 
-    Dispatching_Policy : Character;
-    pragma Import (C, Dispatching_Policy, "__gl_task_dispatching_policy");
- 
-    FIFO_Within_Priorities : constant Boolean := Dispatching_Policy = 'F';
-    --  Indicates whether FIFO_Within_Priorities is set.
- 
-    --  The following are effectively constants, but they need to
-    --  be initialized by calling a pthread_ function.
- 
-    Mutex_Attr   : aliased pthread_mutexattr_t;
-    Cond_Attr    : aliased pthread_condattr_t;
- 
-    Foreign_Task_Elaborated : aliased Boolean := True;
-    --  Used to identified fake tasks (i.e., non-Ada Threads).
- 
-    --------------------
-    -- Local Packages --
-    --------------------
- 
-    package Specific is
- 
-       procedure Initialize (Environment_Task : Task_ID);
-       pragma Inline (Initialize);
-       --  Initialize various data needed by this package.
- 
-       function Is_Valid_Task return Boolean;
-       pragma Inline (Is_Valid_Task);
-       --  Does executing thread have a TCB?
- 
-       procedure Set (Self_Id : Task_ID);
-       pragma Inline (Set);
-       --  Set the self id for the current task.
- 
-       function Self return Task_ID;
-       pragma Inline (Self);
-       --  Return a pointer to the Ada Task Control Block of the calling task.
- 
-    end Specific;
- 
-    package body Specific is separate;
-    --  The body of this package is target specific.
- 
-    ---------------------------------
-    -- Support for foreign threads --
-    ---------------------------------
- 
-    function Register_Foreign_Thread (Thread : Thread_Id) return Task_ID;
-    --  Allocate and Initialize a new ATCB for the current Thread.
- 
-    function Register_Foreign_Thread
-      (Thread : Thread_Id) return Task_ID is separate;
- 
-    -----------------------
-    -- Local Subprograms --
-    -----------------------
- 
-    subtype unsigned_long is Interfaces.C.unsigned_long;
- 
-    procedure Abort_Handler (signo : Signal);
- 
-    function To_Address is new Unchecked_Conversion (Task_ID, System.Address);
- 
-    function To_pthread_t is new Unchecked_Conversion
-      (unsigned_long, System.OS_Interface.pthread_t);
- 
-    -------------------
-    -- Abort_Handler --
-    -------------------
- 
-    procedure Abort_Handler (signo : Signal) is
-       pragma Unreferenced (signo);
- 
-       Self_Id : constant Task_ID := Self;
-       Result  : Interfaces.C.int;
-       Old_Set : aliased sigset_t;
- 
-    begin
-       if ZCX_By_Default and then GCC_ZCX_Support then
-          return;
-       end if;
- 
-       if Self_Id.Deferral_Level = 0
-         and then Self_Id.Pending_ATC_Level < Self_Id.ATC_Nesting_Level
-         and then not Self_Id.Aborting
-       then
-          Self_Id.Aborting := True;
- 
-          --  Make sure signals used for RTS internal purpose are unmasked
- 
-          Result := pthread_sigmask (SIG_UNBLOCK,
-            Unblocked_Signal_Mask'Unchecked_Access, Old_Set'Unchecked_Access);
-          pragma Assert (Result = 0);
- 
-          raise Standard'Abort_Signal;
-       end if;
-    end Abort_Handler;
- 
-    --------------
-    -- Lock_RTS --
-    --------------
- 
-    procedure Lock_RTS is
-    begin
-       Write_Lock (Single_RTS_Lock'Access, Global_Lock => True);
-    end Lock_RTS;
- 
-    ----------------
-    -- Unlock_RTS --
-    ----------------
- 
-    procedure Unlock_RTS is
-    begin
-       Unlock (Single_RTS_Lock'Access, Global_Lock => True);
-    end Unlock_RTS;
- 
-    -----------------
-    -- Stack_Guard --
-    -----------------
- 
-    --  The underlying thread system extends the memory (up to 2MB) when needed
- 
-    procedure Stack_Guard (T : ST.Task_ID; On : Boolean) is
-       pragma Unreferenced (T);
-       pragma Unreferenced (On);
- 
-    begin
-       null;
-    end Stack_Guard;
- 
-    --------------------
-    -- Get_Thread_Id  --
-    --------------------
- 
-    function Get_Thread_Id (T : ST.Task_ID) return OSI.Thread_Id is
-    begin
-       return T.Common.LL.Thread;
-    end Get_Thread_Id;
- 
-    ----------
-    -- Self --
-    ----------
- 
-    function Self return Task_ID renames Specific.Self;
- 
-    ---------------------
-    -- Initialize_Lock --
-    ---------------------
- 
-    --  Note: mutexes and cond_variables needed per-task basis are
-    --  initialized in Initialize_TCB and the Storage_Error is
-    --  handled. Other mutexes (such as RTS_Lock, Memory_Lock...)
-    --  used in RTS is initialized before any status change of RTS.
-    --  Therefore rasing Storage_Error in the following routines
-    --  should be able to be handled safely.
- 
-    procedure Initialize_Lock
-      (Prio : System.Any_Priority;
-       L    : access Lock)
-    is
-       Result : Interfaces.C.int;
- 
-    begin
-       if Priority_Ceiling_Emulation then
-          L.Ceiling := Prio;
-       end if;
- 
-       Result := pthread_mutex_init (L.L'Access, Mutex_Attr'Access);
- 
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result = ENOMEM then
-          Ada.Exceptions.Raise_Exception (Storage_Error'Identity,
-            "Failed to allocate a lock");
-       end if;
-    end Initialize_Lock;
- 
-    procedure Initialize_Lock (L : access RTS_Lock; Level : Lock_Level) is
-       pragma Unreferenced (Level);
- 
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := pthread_mutex_init (L, Mutex_Attr'Access);
- 
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result = ENOMEM then
-          raise Storage_Error;
-       end if;
-    end Initialize_Lock;
- 
-    -------------------
-    -- Finalize_Lock --
-    -------------------
- 
-    procedure Finalize_Lock (L : access Lock) is
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := pthread_mutex_destroy (L.L'Access);
-       pragma Assert (Result = 0);
-    end Finalize_Lock;
- 
-    procedure Finalize_Lock (L : access RTS_Lock) is
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := pthread_mutex_destroy (L);
-       pragma Assert (Result = 0);
-    end Finalize_Lock;
- 
-    ----------------
-    -- Write_Lock --
-    ----------------
- 
-    procedure Write_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
-       Result : Interfaces.C.int;
- 
-    begin
-       if Priority_Ceiling_Emulation then
-          declare
-             Self_ID : constant Task_ID := Self;
- 
-          begin
-             if Self_ID.Common.LL.Active_Priority > L.Ceiling then
-                Ceiling_Violation := True;
-                return;
-             end if;
- 
-             L.Saved_Priority := Self_ID.Common.LL.Active_Priority;
- 
-             if Self_ID.Common.LL.Active_Priority < L.Ceiling then
-                Self_ID.Common.LL.Active_Priority := L.Ceiling;
-             end if;
- 
-             Result := pthread_mutex_lock (L.L'Access);
-             pragma Assert (Result = 0);
-             Ceiling_Violation := False;
-          end;
- 
-       else
-          Result := pthread_mutex_lock (L.L'Access);
-          Ceiling_Violation := Result = EINVAL;
- 
-          --  Assume the cause of EINVAL is a priority ceiling violation
- 
-          pragma Assert (Result = 0 or else Result = EINVAL);
-       end if;
-    end Write_Lock;
- 
-    procedure Write_Lock
-      (L           : access RTS_Lock;
-       Global_Lock : Boolean := False)
-    is
-       Result : Interfaces.C.int;
- 
-    begin
-       if not Single_Lock or else Global_Lock then
-          Result := pthread_mutex_lock (L);
-          pragma Assert (Result = 0);
-       end if;
-    end Write_Lock;
- 
-    procedure Write_Lock (T : Task_ID) is
-       Result : Interfaces.C.int;
- 
-    begin
-       if not Single_Lock then
-          Result := pthread_mutex_lock (T.Common.LL.L'Access);
-          pragma Assert (Result = 0);
-       end if;
-    end Write_Lock;
- 
-    ---------------
-    -- Read_Lock --
-    ---------------
- 
-    procedure Read_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
-    begin
-       Write_Lock (L, Ceiling_Violation);
-    end Read_Lock;
- 
-    ------------
-    -- Unlock --
-    ------------
- 
-    procedure Unlock (L : access Lock) is
-       Result : Interfaces.C.int;
- 
-    begin
-       if Priority_Ceiling_Emulation then
-          declare
-             Self_ID : constant Task_ID := Self;
- 
-          begin
-             Result := pthread_mutex_unlock (L.L'Access);
-             pragma Assert (Result = 0);
- 
-             if Self_ID.Common.LL.Active_Priority > L.Saved_Priority then
-                Self_ID.Common.LL.Active_Priority := L.Saved_Priority;
-             end if;
-          end;
- 
-       else
-          Result := pthread_mutex_unlock (L.L'Access);
-          pragma Assert (Result = 0);
-       end if;
-    end Unlock;
- 
-    procedure Unlock (L : access RTS_Lock; Global_Lock : Boolean := False) is
-       Result : Interfaces.C.int;
- 
-    begin
-       if not Single_Lock or else Global_Lock then
-          Result := pthread_mutex_unlock (L);
-          pragma Assert (Result = 0);
-       end if;
-    end Unlock;
- 
-    procedure Unlock (T : Task_ID) is
-       Result : Interfaces.C.int;
- 
-    begin
-       if not Single_Lock then
-          Result := pthread_mutex_unlock (T.Common.LL.L'Access);
-          pragma Assert (Result = 0);
-       end if;
-    end Unlock;
- 
-    -----------
-    -- Sleep --
-    -----------
- 
-    procedure Sleep
-      (Self_ID  : Task_ID;
-       Reason   : System.Tasking.Task_States)
-    is
-       pragma Unreferenced (Reason);
- 
-       Result : Interfaces.C.int;
- 
-    begin
-       pragma Assert (Self_ID = Self);
- 
-       if Single_Lock then
-          Result := pthread_cond_wait
-            (Self_ID.Common.LL.CV'Access, Single_RTS_Lock'Access);
-       else
-          Result := pthread_cond_wait
-            (Self_ID.Common.LL.CV'Access, Self_ID.Common.LL.L'Access);
-       end if;
- 
-       --  EINTR is not considered a failure.
-       pragma Assert (Result = 0 or else Result = EINTR);
-    end Sleep;
- 
-    -----------------
-    -- Timed_Sleep --
-    -----------------
- 
-    --  This is for use within the run-time system, so abort is
-    --  assumed to be already deferred, and the caller should be
-    --  holding its own ATCB lock.
- 
-    procedure Timed_Sleep
-      (Self_ID  : Task_ID;
-       Time     : Duration;
-       Mode     : ST.Delay_Modes;
-       Reason   : System.Tasking.Task_States;
-       Timedout : out Boolean;
-       Yielded  : out Boolean)
-    is
-       pragma Unreferenced (Reason);
- 
-       Check_Time : constant Duration := Monotonic_Clock;
-       Abs_Time   : Duration;
-       Request    : aliased timespec;
-       Result     : Interfaces.C.int;
- 
-    begin
-       Timedout := True;
-       Yielded := False;
- 
-       if Mode = Relative then
-          Abs_Time := Duration'Min (Time, Max_Sensible_Delay) + Check_Time;
-       else
-          Abs_Time := Duration'Min (Check_Time + Max_Sensible_Delay, Time);
-       end if;
- 
-       if Abs_Time > Check_Time then
-          Request := To_Timespec (Abs_Time);
- 
-          loop
-             exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level
-               or else Self_ID.Pending_Priority_Change;
- 
-             if Single_Lock then
-                Result := pthread_cond_timedwait
-                  (Self_ID.Common.LL.CV'Access, Single_RTS_Lock'Access,
-                   Request'Access);
- 
-             else
-                Result := pthread_cond_timedwait
-                  (Self_ID.Common.LL.CV'Access, Self_ID.Common.LL.L'Access,
-                   Request'Access);
-             end if;
- 
-             exit when Abs_Time <= Monotonic_Clock;
- 
-             if Result = 0 or Result = EINTR then
-                --  somebody may have called Wakeup for us
-                Timedout := False;
-                exit;
-             end if;
- 
-             pragma Assert (Result = ETIMEDOUT);
-          end loop;
-       end if;
-    end Timed_Sleep;
- 
-    -----------------
-    -- Timed_Delay --
-    -----------------
- 
-    --  This is for use in implementing delay statements, so
-    --  we assume the caller is abort-deferred but is holding
-    --  no locks.
- 
-    procedure Timed_Delay
-      (Self_ID  : Task_ID;
-       Time     : Duration;
-       Mode     : ST.Delay_Modes)
-    is
-       Check_Time : constant Duration := Monotonic_Clock;
-       Abs_Time   : Duration;
-       Request    : aliased timespec;
-       Result     : Interfaces.C.int;
-    begin
- 
-       --  Only the little window between deferring abort and
-       --  locking Self_ID is the reason we need to
-       --  check for pending abort and priority change below! :(
- 
-       SSL.Abort_Defer.all;
- 
-       if Single_Lock then
-          Lock_RTS;
-       end if;
- 
-       Write_Lock (Self_ID);
- 
-       if Mode = Relative then
-          Abs_Time := Time + Check_Time;
-       else
-          Abs_Time := Duration'Min (Check_Time + Max_Sensible_Delay, Time);
-       end if;
- 
-       if Abs_Time > Check_Time then
-          Request := To_Timespec (Abs_Time);
-          Self_ID.Common.State := Delay_Sleep;
- 
-          loop
-             if Self_ID.Pending_Priority_Change then
-                Self_ID.Pending_Priority_Change := False;
-                Self_ID.Common.Base_Priority := Self_ID.New_Base_Priority;
-                Set_Priority (Self_ID, Self_ID.Common.Base_Priority);
-             end if;
- 
-             exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level;
- 
-             if Single_Lock then
-                Result := pthread_cond_timedwait (Self_ID.Common.LL.CV'Access,
-                  Single_RTS_Lock'Access, Request'Access);
-             else
-                Result := pthread_cond_timedwait (Self_ID.Common.LL.CV'Access,
-                  Self_ID.Common.LL.L'Access, Request'Access);
-             end if;
- 
-             exit when Abs_Time <= Monotonic_Clock;
- 
-             pragma Assert (Result = 0 or else
-               Result = ETIMEDOUT or else
-               Result = EINTR);
-          end loop;
- 
-          Self_ID.Common.State := Runnable;
-       end if;
- 
-       Unlock (Self_ID);
- 
-       if Single_Lock then
-          Unlock_RTS;
-       end if;
- 
-       Result := sched_yield;
-       SSL.Abort_Undefer.all;
-    end Timed_Delay;
- 
-    ---------------------
-    -- Monotonic_Clock --
-    ---------------------
- 
-    function Monotonic_Clock return Duration is
-       TV     : aliased struct_timeval;
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := gettimeofday (TV'Access, System.Null_Address);
-       pragma Assert (Result = 0);
-       return To_Duration (TV);
-    end Monotonic_Clock;
- 
-    -------------------
-    -- RT_Resolution --
-    -------------------
- 
-    function RT_Resolution return Duration is
-    begin
-       return 10#1.0#E-6;
-    end RT_Resolution;
- 
-    ------------
-    -- Wakeup --
-    ------------
- 
-    procedure Wakeup (T : Task_ID; Reason : System.Tasking.Task_States) is
-       pragma Unreferenced (Reason);
-       Result : Interfaces.C.int;
-    begin
-       Result := pthread_cond_signal (T.Common.LL.CV'Access);
-       pragma Assert (Result = 0);
-    end Wakeup;
- 
-    -----------
-    -- Yield --
-    -----------
- 
-    procedure Yield (Do_Yield : Boolean := True) is
-       Result : Interfaces.C.int;
-       pragma Unreferenced (Result);
-    begin
-       if Do_Yield then
-          Result := sched_yield;
-       end if;
-    end Yield;
- 
-    ------------------
-    -- Set_Priority --
-    ------------------
- 
-    procedure Set_Priority
-      (T                   : Task_ID;
-       Prio                : System.Any_Priority;
-       Loss_Of_Inheritance : Boolean := False)
-    is
-       pragma Unreferenced (Loss_Of_Inheritance);
- 
-       Result : Interfaces.C.int;
-       Param  : aliased struct_sched_param;
- 
-    begin
-       T.Common.Current_Priority := Prio;
- 
-       if Priority_Ceiling_Emulation then
-          if T.Common.LL.Active_Priority < Prio then
-             T.Common.LL.Active_Priority := Prio;
-          end if;
-       end if;
- 
-       --  Priorities are in range 1 .. 99 on GNU/Linux, so we map
-       --  map 0 .. 31 to 1 .. 32
- 
-       Param.sched_priority := Interfaces.C.int (Prio) + 1;
- 
-       if Time_Slice_Val > 0 then
-          Result := pthread_setschedparam
-            (T.Common.LL.Thread, SCHED_RR, Param'Access);
- 
-       elsif FIFO_Within_Priorities or else Time_Slice_Val = 0 then
-          Result := pthread_setschedparam
-            (T.Common.LL.Thread, SCHED_FIFO, Param'Access);
- 
-       else
-          Result := pthread_setschedparam
-            (T.Common.LL.Thread, SCHED_OTHER, Param'Access);
-       end if;
- 
-       pragma Assert (Result = 0 or else Result = EPERM);
-    end Set_Priority;
- 
-    ------------------
-    -- Get_Priority --
-    ------------------
- 
-    function Get_Priority (T : Task_ID) return System.Any_Priority is
-    begin
-       return T.Common.Current_Priority;
-    end Get_Priority;
- 
-    ----------------
-    -- Enter_Task --
-    ----------------
- 
-    procedure Enter_Task (Self_ID : Task_ID) is
-    begin
-       Self_ID.Common.LL.Thread := pthread_self;
- 
-       Specific.Set (Self_ID);
- 
-       Lock_RTS;
- 
-       for J in Known_Tasks'Range loop
-          if Known_Tasks (J) = null then
-             Known_Tasks (J) := Self_ID;
-             Self_ID.Known_Tasks_Index := J;
-             exit;
-          end if;
-       end loop;
- 
-       Unlock_RTS;
-    end Enter_Task;
- 
-    --------------
-    -- New_ATCB --
-    --------------
- 
-    function New_ATCB (Entry_Num : Task_Entry_Index) return Task_ID is
-    begin
-       return new Ada_Task_Control_Block (Entry_Num);
-    end New_ATCB;
- 
-    -------------------
-    -- Is_Valid_Task --
-    -------------------
- 
-    function Is_Valid_Task return Boolean renames Specific.Is_Valid_Task;
- 
-    -----------------------------
-    -- Register_Foreign_Thread --
-    -----------------------------
- 
-    function Register_Foreign_Thread return Task_ID is
-    begin
-       if Is_Valid_Task then
-          return Self;
-       else
-          return Register_Foreign_Thread (pthread_self);
-       end if;
-    end Register_Foreign_Thread;
- 
-    --------------------
-    -- Initialize_TCB --
-    --------------------
- 
-    procedure Initialize_TCB (Self_ID : Task_ID; Succeeded : out Boolean) is
-       Result : Interfaces.C.int;
- 
-    begin
-       --  Give the task a unique serial number.
- 
-       Self_ID.Serial_Number := Next_Serial_Number;
-       Next_Serial_Number := Next_Serial_Number + 1;
-       pragma Assert (Next_Serial_Number /= 0);
- 
-       Self_ID.Common.LL.Thread := To_pthread_t (-1);
- 
-       if not Single_Lock then
-          Result := pthread_mutex_init (Self_ID.Common.LL.L'Access,
-            Mutex_Attr'Access);
-          pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-          if Result /= 0 then
-             Succeeded := False;
-             return;
-          end if;
-       end if;
- 
-       Result := pthread_cond_init (Self_ID.Common.LL.CV'Access,
-         Cond_Attr'Access);
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result = 0 then
-          Succeeded := True;
-       else
-          if not Single_Lock then
-             Result := pthread_mutex_destroy (Self_ID.Common.LL.L'Access);
-             pragma Assert (Result = 0);
-          end if;
- 
-          Succeeded := False;
-       end if;
-    end Initialize_TCB;
- 
-    -----------------
-    -- Create_Task --
-    -----------------
- 
-    procedure Create_Task
-      (T          : Task_ID;
-       Wrapper    : System.Address;
-       Stack_Size : System.Parameters.Size_Type;
-       Priority   : System.Any_Priority;
-       Succeeded  : out Boolean)
-    is
-       Adjusted_Stack_Size : Interfaces.C.size_t;
- 
-       Attributes : aliased pthread_attr_t;
-       Result     : Interfaces.C.int;
- 
-       function Thread_Body_Access is new
-         Unchecked_Conversion (System.Address, Thread_Body);
- 
-    begin
-       if Stack_Size = Unspecified_Size then
-          Adjusted_Stack_Size := Interfaces.C.size_t (Default_Stack_Size);
- 
-       elsif Stack_Size < Minimum_Stack_Size then
-          Adjusted_Stack_Size := Interfaces.C.size_t (Minimum_Stack_Size);
- 
-       else
-          Adjusted_Stack_Size := Interfaces.C.size_t (Stack_Size);
-       end if;
- 
-       Result := pthread_attr_init (Attributes'Access);
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result /= 0 then
-          Succeeded := False;
-          return;
-       end if;
- 
-       Result :=
-         pthread_attr_setstacksize
-           (Attributes'Access, Adjusted_Stack_Size);
-       pragma Assert (Result = 0);
- 
-       Result :=
-         pthread_attr_setdetachstate
-           (Attributes'Access, PTHREAD_CREATE_DETACHED);
-       pragma Assert (Result = 0);
- 
-       --  Since the initial signal mask of a thread is inherited from the
-       --  creator, and the Environment task has all its signals masked, we
-       --  do not need to manipulate caller's signal mask at this point.
-       --  All tasks in RTS will have All_Tasks_Mask initially.
- 
-       Result := pthread_create
-         (T.Common.LL.Thread'Access,
-          Attributes'Access,
-          Thread_Body_Access (Wrapper),
-          To_Address (T));
-       pragma Assert (Result = 0 or else Result = EAGAIN);
- 
-       Succeeded := Result = 0;
- 
-       Result := pthread_attr_destroy (Attributes'Access);
-       pragma Assert (Result = 0);
- 
-       Set_Priority (T, Priority);
-    end Create_Task;
- 
-    ------------------
-    -- Finalize_TCB --
-    ------------------
- 
-    procedure Finalize_TCB (T : Task_ID) is
-       Result : Interfaces.C.int;
-       Tmp    : Task_ID := T;
-       Is_Self : constant Boolean := T = Self;
- 
-       procedure Free is new
-         Unchecked_Deallocation (Ada_Task_Control_Block, Task_ID);
- 
-    begin
-       if not Single_Lock then
-          Result := pthread_mutex_destroy (T.Common.LL.L'Access);
-          pragma Assert (Result = 0);
-       end if;
- 
-       Result := pthread_cond_destroy (T.Common.LL.CV'Access);
-       pragma Assert (Result = 0);
- 
-       if T.Known_Tasks_Index /= -1 then
-          Known_Tasks (T.Known_Tasks_Index) := null;
-       end if;
- 
-       Free (Tmp);
- 
-       if Is_Self then
-          Result := pthread_setspecific (ATCB_Key, System.Null_Address);
-          pragma Assert (Result = 0);
-       end if;
- 
-    end Finalize_TCB;
- 
-    ---------------
-    -- Exit_Task --
-    ---------------
- 
-    procedure Exit_Task is
-    begin
-       Specific.Set (null);
-    end Exit_Task;
- 
-    ----------------
-    -- Abort_Task --
-    ----------------
- 
-    procedure Abort_Task (T : Task_ID) is
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := pthread_kill (T.Common.LL.Thread,
-         Signal (System.Interrupt_Management.Abort_Task_Interrupt));
-       pragma Assert (Result = 0);
-    end Abort_Task;
- 
-    ----------------
-    -- Check_Exit --
-    ----------------
- 
-    --  Dummy version
- 
-    function Check_Exit (Self_ID : ST.Task_ID) return Boolean is
-       pragma Unreferenced (Self_ID);
- 
-    begin
-       return True;
-    end Check_Exit;
- 
-    --------------------
-    -- Check_No_Locks --
-    --------------------
- 
-    function Check_No_Locks (Self_ID : ST.Task_ID) return Boolean is
-       pragma Unreferenced (Self_ID);
- 
-    begin
-       return True;
-    end Check_No_Locks;
- 
-    ----------------------
-    -- Environment_Task --
-    ----------------------
- 
-    function Environment_Task return Task_ID is
-    begin
-       return Environment_Task_ID;
-    end Environment_Task;
- 
-    ------------------
-    -- Suspend_Task --
-    ------------------
- 
-    function Suspend_Task
-      (T           : ST.Task_ID;
-       Thread_Self : Thread_Id) return Boolean
-    is
-    begin
-       if T.Common.LL.Thread /= Thread_Self then
-          return pthread_kill (T.Common.LL.Thread, SIGSTOP) = 0;
-       else
-          return True;
-       end if;
-    end Suspend_Task;
- 
-    -----------------
-    -- Resume_Task --
-    -----------------
- 
-    function Resume_Task
-      (T           : ST.Task_ID;
-       Thread_Self : Thread_Id) return Boolean
-    is
-    begin
-       if T.Common.LL.Thread /= Thread_Self then
-          return pthread_kill (T.Common.LL.Thread, SIGCONT) = 0;
-       else
-          return True;
-       end if;
-    end Resume_Task;
- 
-    ----------------
-    -- Initialize --
-    ----------------
- 
-    procedure Initialize (Environment_Task : Task_ID) is
-       act     : aliased struct_sigaction;
-       old_act : aliased struct_sigaction;
-       Tmp_Set : aliased sigset_t;
-       Result  : Interfaces.C.int;
- 
-       function State (Int : System.Interrupt_Management.Interrupt_ID)
-                      return Character;
-       pragma Import (C, State, "__gnat_get_interrupt_state");
-       --  Get interrupt state.  Defined in a-init.c
-       --  The input argument is the interrupt number,
-       --  and the result is one of the following:
- 
-       Default : constant Character := 's';
-       --    'n'   this interrupt not set by any Interrupt_State pragma
-       --    'u'   Interrupt_State pragma set state to User
-       --    'r'   Interrupt_State pragma set state to Runtime
-       --    's'   Interrupt_State pragma set state to System (use "default"
-       --           system handler)
- 
-    begin
-       Environment_Task_ID := Environment_Task;
- 
-       Result := pthread_mutexattr_init (Mutex_Attr'Access);
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       Result := pthread_condattr_init (Cond_Attr'Access);
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       Initialize_Lock (Single_RTS_Lock'Access, RTS_Lock_Level);
- 
-       --  Initialize the global RTS lock
- 
-       Specific.Initialize (Environment_Task);
- 
-       Enter_Task (Environment_Task);
- 
-       --  Install the abort-signal handler
- 
-       if State (System.Interrupt_Management.Abort_Task_Interrupt)
-         /= Default
-       then
-          act.sa_flags := 0;
-          act.sa_handler := Abort_Handler'Address;
- 
-          Result := sigemptyset (Tmp_Set'Access);
-          pragma Assert (Result = 0);
-          act.sa_mask := Tmp_Set;
- 
-          Result :=
-            sigaction
-            (Signal (Interrupt_Management.Abort_Task_Interrupt),
-             act'Unchecked_Access,
-             old_act'Unchecked_Access);
-          pragma Assert (Result = 0);
-       end if;
-    end Initialize;
- 
- begin
-    declare
-       Result : Interfaces.C.int;
- 
-    begin
-       --  Mask Environment task for all signals. The original mask of the
-       --  Environment task will be recovered by Interrupt_Server task
-       --  during the elaboration of s-interr.adb.
- 
-       System.Interrupt_Management.Operations.Set_Interrupt_Mask
-         (System.Interrupt_Management.Operations.All_Tasks_Mask'Access);
- 
-       --  Prepare the set of signals that should unblocked in all tasks
- 
-       Result := sigemptyset (Unblocked_Signal_Mask'Access);
-       pragma Assert (Result = 0);
- 
-       for J in Interrupt_Management.Interrupt_ID loop
-          if System.Interrupt_Management.Keep_Unmasked (J) then
-             Result := sigaddset (Unblocked_Signal_Mask'Access, Signal (J));
-             pragma Assert (Result = 0);
-          end if;
-       end loop;
-    end;
- end System.Task_Primitives.Operations;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5itaspri.ads gcc-4.0.0/gcc/ada/5itaspri.ads
*** gcc-3.4.3/gcc/ada/5itaspri.ads	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5itaspri.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,96 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                 S Y S T E M . T A S K _ P R I M I T I V E S              --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --           Copyright (C) 1991-2001 Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the GNU/Linux (GNU/LinuxThreads) version of this package.
- 
- --  This package provides low-level support for most tasking features.
- 
- pragma Polling (Off);
- --  Turn off polling, we do not want ATC polling to take place during
- --  tasking operations. It causes infinite loops and other problems.
- 
- with System.OS_Interface;
- --  used for pthread_mutex_t
- --           pthread_cond_t
- --           pthread_t
- 
- package System.Task_Primitives is
- 
-    type Lock is limited private;
-    --  Should be used for implementation of protected objects.
- 
-    type RTS_Lock is limited private;
-    --  Should be used inside the runtime system.
-    --  The difference between Lock and the RTS_Lock is that the later
-    --  one serves only as a semaphore so that do not check for
-    --  ceiling violations.
- 
-    type Task_Body_Access is access procedure;
-    --  Pointer to the task body's entry point (or possibly a wrapper
-    --  declared local to the GNARL).
- 
-    type Private_Data is limited private;
-    --  Any information that the GNULLI needs maintained on a per-task
-    --  basis.  A component of this type is guaranteed to be included
-    --  in the Ada_Task_Control_Block.
- 
- private
- 
-    type Prio_Array_Type is array (System.Any_Priority) of Integer;
- 
-    type Lock is record
-       L          : aliased System.OS_Interface.pthread_mutex_t;
-       Ceiling    : System.Any_Priority := System.Any_Priority'First;
-       Saved_Priority : System.Any_Priority := System.Any_Priority'First;
-    end record;
- 
-    type RTS_Lock is new System.OS_Interface.pthread_mutex_t;
-    type Private_Data is record
-       Thread      : aliased System.OS_Interface.pthread_t;
-       pragma Atomic (Thread);
-       --  Thread field may be updated by two different threads of control.
-       --  (See, Enter_Task and Create_Task in s-taprop.adb).
-       --  They put the same value (thr_self value). We do not want to
-       --  use lock on those operations and the only thing we have to
-       --  make sure is that they are updated in atomic fashion.
- 
-       CV          : aliased System.OS_Interface.pthread_cond_t;
-       L           : aliased RTS_Lock;
-       --  protection for all components is lock L
- 
-       Active_Priority : System.Any_Priority := System.Any_Priority'First;
-       --  Simulated active priority,
-       --  used only if Priority_Ceiling_Support is True.
-    end record;
- 
- end System.Task_Primitives;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5ksystem.ads gcc-4.0.0/gcc/ada/5ksystem.ads
*** gcc-3.4.3/gcc/ada/5ksystem.ads	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5ksystem.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,158 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                        GNAT RUN-TIME COMPONENTS                          --
- --                                                                          --
- --                               S Y S T E M                                --
- --                                                                          --
- --                                 S p e c                                  --
- --                          (VxWorks version M68K)                          --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the  contents of the part following the private keyword. --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- package System is
- pragma Pure (System);
- --  Note that we take advantage of the implementation permission to
- --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
- 
-    type Name is (SYSTEM_NAME_GNAT);
-    System_Name : constant Name := SYSTEM_NAME_GNAT;
- 
-    --  System-Dependent Named Numbers
- 
-    Min_Int               : constant := Long_Long_Integer'First;
-    Max_Int               : constant := Long_Long_Integer'Last;
- 
-    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
-    Max_Nonbinary_Modulus : constant := Integer'Last;
- 
-    Max_Base_Digits       : constant := Long_Long_Float'Digits;
-    Max_Digits            : constant := Long_Long_Float'Digits;
- 
-    Max_Mantissa          : constant := 63;
-    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
- 
-    Tick                  : constant := 1.0 / 60.0;
- 
-    --  Storage-related Declarations
- 
-    type Address is private;
-    Null_Address : constant Address;
- 
-    Storage_Unit : constant := 8;
-    Word_Size    : constant := 32;
-    Memory_Size  : constant := 2 ** 32;
- 
-    --  Address comparison
- 
-    function "<"  (Left, Right : Address) return Boolean;
-    function "<=" (Left, Right : Address) return Boolean;
-    function ">"  (Left, Right : Address) return Boolean;
-    function ">=" (Left, Right : Address) return Boolean;
-    function "="  (Left, Right : Address) return Boolean;
- 
-    pragma Import (Intrinsic, "<");
-    pragma Import (Intrinsic, "<=");
-    pragma Import (Intrinsic, ">");
-    pragma Import (Intrinsic, ">=");
-    pragma Import (Intrinsic, "=");
- 
-    --  Other System-Dependent Declarations
- 
-    type Bit_Order is (High_Order_First, Low_Order_First);
-    Default_Bit_Order : constant Bit_Order := High_Order_First;
- 
-    --  Priority-related Declarations (RM D.1)
- 
-    --  256        is reserved for the VxWorks kernel
-    --  248 - 255  correspond to hardware interrupt levels 0 .. 7
-    --  247        is a catchall default "interrupt" priority for signals,
-    --             allowing higher priority than normal tasks, but lower than
-    --             hardware priority levels.  Protected Object ceilings can
-    --             override these values.
-    --  246        is used by the Interrupt_Manager task
- 
-    Max_Priority           : constant Positive := 245;
-    Max_Interrupt_Priority : constant Positive := 255;
- 
-    subtype Any_Priority       is Integer      range   0 .. 255;
-    subtype Priority           is Any_Priority range   0 .. 245;
-    subtype Interrupt_Priority is Any_Priority range 246 .. 255;
- 
-    Default_Priority : constant Priority := 122;
- 
- private
- 
-    type Address is mod Memory_Size;
-    Null_Address : constant Address := 0;
- 
-    --------------------------------------
-    -- System Implementation Parameters --
-    --------------------------------------
- 
-    --  These parameters provide information about the target that is used
-    --  by the compiler. They are in the private part of System, where they
-    --  can be accessed using the special circuitry in the Targparm unit
-    --  whose source should be consulted for more detailed descriptions
-    --  of the individual switch values.
- 
-    AAMP                      : constant Boolean := False;
-    Backend_Divide_Checks     : constant Boolean := False;
-    Backend_Overflow_Checks   : constant Boolean := False;
-    Command_Line_Args         : constant Boolean := False;
-    Configurable_Run_Time     : constant Boolean := False;
-    Denorm                    : constant Boolean := True;
-    Duration_32_Bits          : constant Boolean := False;
-    Exit_Status_Supported     : constant Boolean := True;
-    Fractional_Fixed_Ops      : constant Boolean := False;
-    Frontend_Layout           : constant Boolean := False;
-    Functions_Return_By_DSP   : constant Boolean := False;
-    Machine_Overflows         : constant Boolean := False;
-    Machine_Rounds            : constant Boolean := True;
-    OpenVMS                   : constant Boolean := False;
-    Signed_Zeros              : constant Boolean := False;
-    Stack_Check_Default       : constant Boolean := False;
-    Stack_Check_Probes        : constant Boolean := False;
-    Support_64_Bit_Divides    : constant Boolean := True;
-    Support_Aggregates        : constant Boolean := True;
-    Support_Composite_Assign  : constant Boolean := True;
-    Support_Composite_Compare : constant Boolean := True;
-    Support_Long_Shifts       : constant Boolean := True;
-    Suppress_Standard_Library : constant Boolean := False;
-    Use_Ada_Main_Program_Name : constant Boolean := True;
-    ZCX_By_Default            : constant Boolean := False;
-    GCC_ZCX_Support           : constant Boolean := False;
-    Front_End_ZCX_Support     : constant Boolean := False;
- 
-    --  Obsolete entries, to be removed eventually (bootstrap issues!)
- 
-    High_Integrity_Mode       : constant Boolean := False;
-    Long_Shifts_Inlined       : constant Boolean := False;
- 
- end System;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5kvxwork.ads gcc-4.0.0/gcc/ada/5kvxwork.ads
*** gcc-3.4.3/gcc/ada/5kvxwork.ads	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5kvxwork.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,76 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
- --                                                                          --
- --                        S Y S T E M . V X W O R K S                       --
- --                                                                          --
- --                                   S p e c                                --
- --                                                                          --
- --            Copyright (C) 1998-2001 Free Software Foundation, Inc.        --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the M68K VxWorks version of this package.
- 
- with Interfaces.C;
- 
- package System.VxWorks is
-    pragma Preelaborate (System.VxWorks);
- 
-    package IC renames Interfaces.C;
- 
-    --  Floating point context record. 68K version
- 
-    FP_NUM_DREGS        : constant := 8;
-    FP_STATE_FRAME_SIZE : constant := 216;
- 
-    type DOUBLEX is array (1 .. 12) of Interfaces.Unsigned_8;
-    pragma Pack (DOUBLEX);
-    for DOUBLEX'Size use 12 * 8;
- 
-    type DOUBLEX_Array is array (1 .. FP_NUM_DREGS) of DOUBLEX;
-    pragma Pack (DOUBLEX_Array);
-    for DOUBLEX_Array'Size use FP_NUM_DREGS * 12 * 8;
- 
-    type FPREG_SET is record
-       fpcr  : IC.int;
-       fpsr  : IC.int;
-       fpiar : IC.int;
-       fpx   : DOUBLEX_Array;
-    end record;
- 
-    type Fp_State_Frame_Array is array (1 .. FP_STATE_FRAME_SIZE) of IC.char;
-    pragma Pack (Fp_State_Frame_Array);
-    for Fp_State_Frame_Array'Size use 8 * FP_STATE_FRAME_SIZE;
- 
-    type FP_CONTEXT is record
-       fpRegSet   : FPREG_SET;
-       stateFrame : Fp_State_Frame_Array;
-    end record;
-    pragma Convention (C, FP_CONTEXT);
- 
-    Num_HW_Interrupts : constant := 256;
-    --  Number of entries in the hardware interrupt vector table
- 
- end System.VxWorks;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5lml-tgt.adb gcc-4.0.0/gcc/ada/5lml-tgt.adb
*** gcc-3.4.3/gcc/ada/5lml-tgt.adb	Mon Jan  5 15:20:42 2004
--- gcc-4.0.0/gcc/ada/5lml-tgt.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,374 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                             M L I B . T G T                              --
- --                           (GNU/Linux Version)                            --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --              Copyright (C) 2001-2003, Free Software Foundation, Inc.     --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package provides a set of target dependent routines to build
- --  static, dynamic and shared libraries.
- 
- --  This is the GNU/Linux version of the body.
- 
- with MLib.Fil;
- with MLib.Utl;
- with Namet;  use Namet;
- with Opt;
- with Output; use Output;
- with Prj.Com;
- with System;
- 
- package body MLib.Tgt is
- 
-    use GNAT;
-    use MLib;
- 
-    No_Arguments        : aliased Argument_List         := (1 .. 0 => null);
-    Empty_Argument_List : constant Argument_List_Access := No_Arguments'Access;
- 
-    Wl_Init_String : aliased String         := "-Wl,-init";
-    Wl_Init        : constant String_Access := Wl_Init_String'Access;
-    Wl_Fini_String : aliased String         := "-Wl,-fini";
-    Wl_Fini        : constant String_Access := Wl_Fini_String'Access;
- 
-    Init_Fini_List :  constant Argument_List_Access :=
-                        new Argument_List'(1 => Wl_Init,
-                                           2 => null,
-                                           3 => Wl_Fini,
-                                           4 => null);
-    --  Used to put switches for automatic elaboration/finalization
- 
-    ---------------------
-    -- Archive_Builder --
-    ---------------------
- 
-    function Archive_Builder return String is
-    begin
-       return "ar";
-    end Archive_Builder;
- 
-    -----------------------------
-    -- Archive_Builder_Options --
-    -----------------------------
- 
-    function Archive_Builder_Options return String_List_Access is
-    begin
-       return new String_List'(1 => new String'("cr"));
-    end Archive_Builder_Options;
- 
-    -----------------
-    -- Archive_Ext --
-    -----------------
- 
-    function Archive_Ext return  String is
-    begin
-       return "a";
-    end Archive_Ext;
- 
-    ---------------------
-    -- Archive_Indexer --
-    ---------------------
- 
-    function Archive_Indexer return String is
-    begin
-       return "ranlib";
-    end Archive_Indexer;
- 
-    ---------------------------
-    -- Build_Dynamic_Library --
-    ---------------------------
- 
-    procedure Build_Dynamic_Library
-      (Ofiles       : Argument_List;
-       Foreign      : Argument_List;
-       Afiles       : Argument_List;
-       Options      : Argument_List;
-       Interfaces   : Argument_List;
-       Lib_Filename : String;
-       Lib_Dir      : String;
-       Symbol_Data  : Symbol_Record;
-       Driver_Name  : Name_Id := No_Name;
-       Lib_Address  : String  := "";
-       Lib_Version  : String  := "";
-       Relocatable  : Boolean := False;
-       Auto_Init    : Boolean := False)
-    is
-       pragma Unreferenced (Foreign);
-       pragma Unreferenced (Afiles);
-       pragma Unreferenced (Interfaces);
-       pragma Unreferenced (Symbol_Data);
-       pragma Unreferenced (Lib_Address);
-       pragma Unreferenced (Relocatable);
- 
-       Lib_File : constant String :=
-         Lib_Dir & Directory_Separator & "lib" &
-         Fil.Ext_To (Lib_Filename, DLL_Ext);
- 
-       Version_Arg          : String_Access;
-       Symbolic_Link_Needed : Boolean := False;
- 
-       Init_Fini : Argument_List_Access := Empty_Argument_List;
- 
-    begin
-       if Opt.Verbose_Mode then
-          Write_Str ("building relocatable shared library ");
-          Write_Line (Lib_File);
-       end if;
- 
-       --  If specified, add automatic elaboration/finalization
-       if Auto_Init then
-          Init_Fini := Init_Fini_List;
-          Init_Fini (2) := new String'("-Wl," & Lib_Filename & "init");
-          Init_Fini (4) := new String'("-Wl," & Lib_Filename & "final");
-       end if;
- 
-       if Lib_Version = "" then
-          Utl.Gcc
-            (Output_File => Lib_File,
-             Objects     => Ofiles,
-             Options     => Options & Init_Fini.all,
-             Driver_Name => Driver_Name);
- 
-       else
-          Version_Arg := new String'("-Wl,-soname," & Lib_Version);
- 
-          if Is_Absolute_Path (Lib_Version) then
-             Utl.Gcc
-               (Output_File => Lib_Version,
-                Objects     => Ofiles,
-                Options     => Options & Version_Arg & Init_Fini.all,
-                Driver_Name => Driver_Name);
-             Symbolic_Link_Needed := Lib_Version /= Lib_File;
- 
-          else
-             Utl.Gcc
-               (Output_File => Lib_Dir & Directory_Separator & Lib_Version,
-                Objects     => Ofiles,
-                Options     => Options & Version_Arg & Init_Fini.all,
-                Driver_Name => Driver_Name);
-             Symbolic_Link_Needed :=
-               Lib_Dir & Directory_Separator & Lib_Version /= Lib_File;
-          end if;
- 
-          if Symbolic_Link_Needed then
-             declare
-                Success : Boolean;
-                Oldpath : String (1 .. Lib_Version'Length + 1);
-                Newpath : String (1 .. Lib_File'Length + 1);
- 
-                Result : Integer;
-                pragma Unreferenced (Result);
- 
-                function Symlink
-                  (Oldpath : System.Address;
-                   Newpath : System.Address) return Integer;
-                pragma Import (C, Symlink, "__gnat_symlink");
- 
-             begin
-                Oldpath (1 .. Lib_Version'Length) := Lib_Version;
-                Oldpath (Oldpath'Last)            := ASCII.NUL;
-                Newpath (1 .. Lib_File'Length)    := Lib_File;
-                Newpath (Newpath'Last)            := ASCII.NUL;
- 
-                Delete_File (Lib_File, Success);
- 
-                Result := Symlink (Oldpath'Address, Newpath'Address);
-             end;
-          end if;
-       end if;
-    end Build_Dynamic_Library;
- 
-    -------------------------
-    -- Default_DLL_Address --
-    -------------------------
- 
-    function Default_DLL_Address return String is
-    begin
-       return "";
-    end Default_DLL_Address;
- 
-    -------------
-    -- DLL_Ext --
-    -------------
- 
-    function DLL_Ext return String is
-    begin
-       return "so";
-    end DLL_Ext;
- 
-    --------------------
-    -- Dynamic_Option --
-    --------------------
- 
-    function Dynamic_Option return String is
-    begin
-       return "-shared";
-    end Dynamic_Option;
- 
-    -------------------
-    -- Is_Object_Ext --
-    -------------------
- 
-    function Is_Object_Ext (Ext : String) return Boolean is
-    begin
-       return Ext = ".o";
-    end Is_Object_Ext;
- 
-    --------------
-    -- Is_C_Ext --
-    --------------
- 
-    function Is_C_Ext (Ext : String) return Boolean is
-    begin
-       return Ext = ".c";
-    end Is_C_Ext;
- 
-    --------------------
-    -- Is_Archive_Ext --
-    --------------------
- 
-    function Is_Archive_Ext (Ext : String) return Boolean is
-    begin
-       return Ext = ".a" or else Ext = ".so";
-    end Is_Archive_Ext;
- 
-    -------------
-    -- Libgnat --
-    -------------
- 
-    function Libgnat return String is
-    begin
-       return "libgnat.a";
-    end Libgnat;
- 
-    ------------------------
-    -- Library_Exists_For --
-    ------------------------
- 
-    function Library_Exists_For (Project : Project_Id) return Boolean is
-    begin
-       if not Projects.Table (Project).Library then
-          Prj.Com.Fail ("INTERNAL ERROR: Library_Exists_For called " &
-                        "for non library project");
-          return False;
- 
-       else
-          declare
-             Lib_Dir : constant String :=
-               Get_Name_String (Projects.Table (Project).Library_Dir);
-             Lib_Name : constant String :=
-               Get_Name_String (Projects.Table (Project).Library_Name);
- 
-          begin
-             if Projects.Table (Project).Library_Kind = Static then
-                return Is_Regular_File
-                  (Lib_Dir & Directory_Separator & "lib" &
-                   Fil.Ext_To (Lib_Name, Archive_Ext));
- 
-             else
-                return Is_Regular_File
-                  (Lib_Dir & Directory_Separator & "lib" &
-                   Fil.Ext_To (Lib_Name, DLL_Ext));
-             end if;
-          end;
-       end if;
-    end Library_Exists_For;
- 
-    ---------------------------
-    -- Library_File_Name_For --
-    ---------------------------
- 
-    function Library_File_Name_For (Project : Project_Id) return Name_Id is
-    begin
-       if not Projects.Table (Project).Library then
-          Prj.Com.Fail ("INTERNAL ERROR: Library_File_Name_For called " &
-                        "for non library project");
-          return No_Name;
- 
-       else
-          declare
-             Lib_Name : constant String :=
-               Get_Name_String (Projects.Table (Project).Library_Name);
- 
-          begin
-             Name_Len := 3;
-             Name_Buffer (1 .. Name_Len) := "lib";
- 
-             if Projects.Table (Project).Library_Kind = Static then
-                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, Archive_Ext));
- 
-             else
-                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, DLL_Ext));
-             end if;
- 
-             return Name_Find;
-          end;
-       end if;
-    end Library_File_Name_For;
- 
-    --------------------------------
-    -- Linker_Library_Path_Option --
-    --------------------------------
- 
-    function Linker_Library_Path_Option return String_Access is
-    begin
-       return new String'("-Wl,-rpath,");
-    end Linker_Library_Path_Option;
- 
-    ----------------
-    -- Object_Ext --
-    ----------------
- 
-    function Object_Ext return String is
-    begin
-       return "o";
-    end Object_Ext;
- 
-    ----------------
-    -- PIC_Option --
-    ----------------
- 
-    function PIC_Option return String is
-    begin
-       return "-fPIC";
-    end PIC_Option;
- 
-    -----------------------------------------------
-    -- Standalone_Library_Auto_Init_Is_Supported --
-    -----------------------------------------------
- 
-    function Standalone_Library_Auto_Init_Is_Supported return Boolean is
-    begin
-       return True;
-    end Standalone_Library_Auto_Init_Is_Supported;
- 
-    ---------------------------
-    -- Support_For_Libraries --
-    ---------------------------
- 
-    function Support_For_Libraries return Library_Support is
-    begin
-       return Full;
-    end Support_For_Libraries;
- 
- end MLib.Tgt;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5losinte.ads gcc-4.0.0/gcc/ada/5losinte.ads
*** gcc-3.4.3/gcc/ada/5losinte.ads	Fri Dec  5 10:24:04 2003
--- gcc-4.0.0/gcc/ada/5losinte.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,593 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   S Y S T E M . O S _ I N T E R F A C E                  --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --          Copyright (C) 1991-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a GNU/Linux (FSU THREADS) version of this package.
- 
- --  This package encapsulates all direct interfaces to OS services
- --  that are needed by children of System.
- 
- --  PLEASE DO NOT add any with-clauses to this package
- --  or remove the pragma Elaborate_Body.
- --  It is designed to be a bottom-level (leaf) package.
- 
- with Interfaces.C;
- package System.OS_Interface is
-    pragma Preelaborate;
- 
-    pragma Linker_Options ("-lgthreads");
-    pragma Linker_Options ("-lmalloc");
- 
-    subtype int            is Interfaces.C.int;
-    subtype short          is Interfaces.C.short;
-    subtype long           is Interfaces.C.long;
-    subtype unsigned       is Interfaces.C.unsigned;
-    subtype unsigned_short is Interfaces.C.unsigned_short;
-    subtype unsigned_long  is Interfaces.C.unsigned_long;
-    subtype unsigned_char  is Interfaces.C.unsigned_char;
-    subtype plain_char     is Interfaces.C.plain_char;
-    subtype size_t         is Interfaces.C.size_t;
- 
-    -----------
-    -- Errno --
-    -----------
- 
-    function errno return int;
-    pragma Import (C, errno, "__get_errno");
- 
-    EAGAIN    : constant := 11;
-    EINTR     : constant := 4;
-    EINVAL    : constant := 22;
-    ENOMEM    : constant := 12;
-    ETIMEDOUT : constant := 110;
- 
-    -------------
-    -- Signals --
-    -------------
- 
-    Max_Interrupt : constant := 31;
-    type Signal is new int range 0 .. Max_Interrupt;
-    for Signal'Size use int'Size;
- 
-    SIGHUP     : constant := 1; --  hangup
-    SIGINT     : constant := 2; --  interrupt (rubout)
-    SIGQUIT    : constant := 3; --  quit (ASCD FS)
-    SIGILL     : constant := 4; --  illegal instruction (not reset)
-    SIGTRAP    : constant := 5; --  trace trap (not reset)
-    SIGIOT     : constant := 6; --  IOT instruction
-    SIGABRT    : constant := 6; --  used by abort, replace SIGIOT in the  future
-    SIGFPE     : constant := 8; --  floating point exception
-    SIGKILL    : constant := 9; --  kill (cannot be caught or ignored)
-    SIGBUS     : constant := 7; --  bus error
-    SIGSEGV    : constant := 11; --  segmentation violation
-    SIGPIPE    : constant := 13; --  write on a pipe with no one to read it
-    SIGALRM    : constant := 14; --  alarm clock
-    SIGTERM    : constant := 15; --  software termination signal from kill
-    SIGUSR1    : constant := 10; --  user defined signal 1
-    SIGUSR2    : constant := 12; --  user defined signal 2
-    SIGCLD     : constant := 17; --  alias for SIGCHLD
-    SIGCHLD    : constant := 17; --  child status change
-    SIGPWR     : constant := 30; --  power-fail restart
-    SIGWINCH   : constant := 28; --  window size change
-    SIGURG     : constant := 23; --  urgent condition on IO channel
-    SIGPOLL    : constant := 29; --  pollable event occurred
-    SIGIO      : constant := 29; --  I/O now possible (4.2 BSD)
-    SIGLOST    : constant := 29; --  File lock lost
-    SIGSTOP    : constant := 19; --  stop (cannot be caught or ignored)
-    SIGTSTP    : constant := 20; --  user stop requested from tty
-    SIGCONT    : constant := 18; --  stopped process has been continued
-    SIGTTIN    : constant := 21; --  background tty read attempted
-    SIGTTOU    : constant := 22; --  background tty write attempted
-    SIGVTALRM  : constant := 26; --  virtual timer expired
-    SIGPROF    : constant := 27; --  profiling timer expired
-    SIGXCPU    : constant := 24; --  CPU time limit exceeded
-    SIGXFSZ    : constant := 25; --  filesize limit exceeded
-    SIGUNUSED  : constant := 31; --  unused signal (GNU/Linux)
-    SIGSTKFLT  : constant := 16; --  coprocessor stack fault (GNU/Linux)
- 
-    SIGADAABORT : constant := SIGABRT;
-    --  Change this if you want to use another signal for task abort.
-    --  SIGTERM might be a good one.
- 
-    type Signal_Set is array (Natural range <>) of Signal;
- 
-    Unmasked    : constant Signal_Set :=
-      (SIGTRAP, SIGBUS, SIGTTIN, SIGTTOU, SIGTSTP, SIGPROF);
- 
-    Reserved    : constant Signal_Set :=
-      (SIGKILL, SIGSTOP, SIGALRM, SIGVTALRM, SIGUNUSED);
- 
-    type sigset_t is private;
- 
-    function sigaddset (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigaddset, "sigaddset");
- 
-    function sigdelset (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigdelset, "sigdelset");
- 
-    function sigfillset (set : access sigset_t) return int;
-    pragma Import (C, sigfillset, "sigfillset");
- 
-    function sigismember (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigismember, "sigismember");
- 
-    function sigemptyset (set : access sigset_t) return int;
-    pragma Import (C, sigemptyset, "sigemptyset");
- 
-    type struct_sigaction is record
-       sa_handler  : System.Address;
-       sa_mask     : sigset_t;
-       sa_flags    : unsigned_long;
-       sa_restorer : System.Address;
-    end record;
-    pragma Convention (C, struct_sigaction);
-    type struct_sigaction_ptr is access all struct_sigaction;
- 
-    type Machine_State is record
-       eip : unsigned_long;
-       ebx : unsigned_long;
-       esp : unsigned_long;
-       ebp : unsigned_long;
-       esi : unsigned_long;
-       edi : unsigned_long;
-    end record;
-    type Machine_State_Ptr is access all Machine_State;
- 
-    SA_SIGINFO  : constant := 16#04#;
- 
-    SIG_BLOCK   : constant := 0;
-    SIG_UNBLOCK : constant := 1;
-    SIG_SETMASK : constant := 2;
- 
-    SIG_DFL : constant := 0;
-    SIG_IGN : constant := 1;
- 
-    function sigaction
-      (sig  : Signal;
-       act  : struct_sigaction_ptr;
-       oact : struct_sigaction_ptr) return int;
-    pragma Import (C, sigaction, "sigaction");
- 
-    ----------
-    -- Time --
-    ----------
- 
-    Time_Slice_Supported : constant Boolean := False;
-    --  Indicates wether time slicing is supported (i.e FSU threads have been
-    --  compiled with DEF_RR)
- 
-    type timespec is private;
- 
-    type clockid_t is private;
- 
-    CLOCK_REALTIME : constant clockid_t;
- 
-    function clock_gettime
-      (clock_id : clockid_t;
-       tp       : access timespec) return int;
-    pragma Import (C, clock_gettime, "clock_gettime");
- 
-    function To_Duration (TS : timespec) return Duration;
-    pragma Inline (To_Duration);
- 
-    function To_Timespec (D : Duration) return timespec;
-    pragma Inline (To_Timespec);
- 
-    type struct_timeval is private;
- 
-    function To_Duration (TV : struct_timeval) return Duration;
-    pragma Inline (To_Duration);
- 
-    function To_Timeval (D : Duration) return struct_timeval;
-    pragma Inline (To_Timeval);
- 
-    -------------------------
-    -- Priority Scheduling --
-    -------------------------
- 
-    SCHED_FIFO  : constant := 0;
-    SCHED_RR    : constant := 1;
-    SCHED_OTHER : constant := 2;
- 
-    -------------
-    -- Process --
-    -------------
- 
-    type pid_t is private;
- 
-    function kill (pid : pid_t; sig : Signal) return int;
-    pragma Import (C, kill, "kill");
- 
-    function getpid return pid_t;
-    pragma Import (C, getpid, "getpid");
- 
-    ---------
-    -- LWP --
-    ---------
- 
-    function lwp_self return System.Address;
-    --  lwp_self does not exist on this thread library, revert to pthread_self
-    --  which is the closest approximation (with getpid). This function is
-    --  needed to share 7staprop.adb across POSIX-like targets.
-    pragma Import (C, lwp_self, "pthread_self");
- 
-    -------------
-    -- Threads --
-    -------------
- 
-    type Thread_Body is access
-      function (arg : System.Address) return System.Address;
-    type pthread_t           is private;
-    subtype Thread_Id        is pthread_t;
- 
-    type pthread_mutex_t     is limited private;
-    type pthread_cond_t      is limited private;
-    type pthread_attr_t      is limited private;
-    type pthread_mutexattr_t is limited private;
-    type pthread_condattr_t  is limited private;
-    type pthread_key_t       is private;
- 
-    PTHREAD_CREATE_DETACHED : constant := 1;
- 
-    -----------
-    -- Stack --
-    -----------
- 
-    Stack_Base_Available : constant Boolean := False;
-    --  Indicates wether the stack base is available on this target.
-    --  This allows us to share s-osinte.adb between all the FSU run time.
-    --  Note that this value can only be true if pthread_t has a complete
-    --  definition that corresponds exactly to the C header files.
- 
-    function Get_Stack_Base (thread : pthread_t) return Address;
-    pragma Inline (Get_Stack_Base);
-    --  returns the stack base of the specified thread.
-    --  Only call this function when Stack_Base_Available is True.
- 
-    function Get_Page_Size return size_t;
-    function Get_Page_Size return Address;
-    pragma Import (C, Get_Page_Size, "getpagesize");
-    --  returns the size of a page, or 0 if this is not relevant on this
-    --  target
- 
-    PROT_NONE  : constant := 0;
-    PROT_READ  : constant := 1;
-    PROT_WRITE : constant := 2;
-    PROT_EXEC  : constant := 4;
-    PROT_ALL   : constant := PROT_READ + PROT_WRITE + PROT_EXEC;
- 
-    PROT_ON    : constant := PROT_NONE;
-    PROT_OFF   : constant := PROT_ALL;
- 
-    function mprotect (addr : Address; len : size_t; prot : int) return int;
-    pragma Import (C, mprotect);
- 
-    ---------------------------------------
-    -- Nonstandard Thread Initialization --
-    ---------------------------------------
- 
-    procedure pthread_init;
-    --  FSU_THREADS requires pthread_init, which is nonstandard
-    --  and this should be invoked during the elaboration of s-taprop.adb
-    pragma Import (C, pthread_init, "pthread_init");
- 
-    -------------------------
-    -- POSIX.1c  Section 3 --
-    -------------------------
- 
-    function sigwait
-      (set : access sigset_t;
-       sig : access Signal) return int;
-    pragma Inline (sigwait);
-    --  FSU_THREADS has a nonstandard sigwait
- 
-    function pthread_kill
-      (thread : pthread_t;
-       sig    : Signal) return int;
-    pragma Import (C, pthread_kill, "pthread_kill");
- 
-    --  FSU threads does not have pthread_sigmask. Instead, it uses
-    --  sigprocmask to do the signal handling when the thread library is
-    --  sucked in.
- 
-    type sigset_t_ptr is access all sigset_t;
- 
-    function pthread_sigmask
-      (how  : int;
-       set  : sigset_t_ptr;
-       oset : sigset_t_ptr) return int;
-    pragma Import (C, pthread_sigmask, "sigprocmask");
- 
-    --------------------------
-    -- POSIX.1c  Section 11 --
-    --------------------------
- 
-    function pthread_mutexattr_init
-      (attr : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
- 
-    function pthread_mutexattr_destroy
-      (attr : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
- 
-    function pthread_mutex_init
-      (mutex : access pthread_mutex_t;
-       attr  : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
- 
-    function pthread_mutex_destroy
-      (mutex : access pthread_mutex_t) return  int;
-    pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
- 
-    function pthread_mutex_lock
-      (mutex : access pthread_mutex_t) return int;
-    pragma Inline (pthread_mutex_lock);
-    --  FSU_THREADS has nonstandard pthread_mutex_lock
- 
-    function pthread_mutex_unlock
-      (mutex : access pthread_mutex_t) return int;
-    pragma Inline (pthread_mutex_unlock);
-    --  FSU_THREADS has nonstandard pthread_mutex_lock
- 
-    function pthread_condattr_init
-      (attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
- 
-    function pthread_condattr_destroy
-      (attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
- 
-    function pthread_cond_init
-      (cond : access pthread_cond_t;
-       attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_cond_init, "pthread_cond_init");
- 
-    function pthread_cond_destroy (cond : access pthread_cond_t) return int;
-    pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
- 
-    function pthread_cond_signal (cond : access pthread_cond_t) return int;
-    pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
- 
-    function pthread_cond_wait
-      (cond  : access pthread_cond_t;
-       mutex : access pthread_mutex_t) return int;
-    pragma Inline (pthread_cond_wait);
-    --  FSU_THREADS has a nonstandard pthread_cond_wait
- 
-    function pthread_cond_timedwait
-      (cond    : access pthread_cond_t;
-       mutex   : access pthread_mutex_t;
-       abstime : access timespec) return int;
-    pragma Inline (pthread_cond_timedwait);
-    --  FSU_THREADS has a nonstandard pthread_cond_timedwait
- 
-    Relative_Timed_Wait : constant Boolean := False;
-    --  pthread_cond_timedwait requires an absolute delay time
- 
-    --------------------------
-    -- POSIX.1c  Section 13 --
-    --------------------------
- 
-    PTHREAD_PRIO_NONE    : constant := 0;
-    PTHREAD_PRIO_PROTECT : constant := 2;
-    PTHREAD_PRIO_INHERIT : constant := 1;
- 
-    function pthread_mutexattr_setprotocol
-      (attr     : access pthread_mutexattr_t;
-       protocol : int) return int;
-    pragma Import (C, pthread_mutexattr_setprotocol);
- 
-    function pthread_mutexattr_setprioceiling
-      (attr        : access pthread_mutexattr_t;
-       prioceiling : int) return int;
-    pragma Import
-      (C, pthread_mutexattr_setprioceiling,
-       "pthread_mutexattr_setprio_ceiling");
- 
-    type struct_sched_param is record
-       sched_priority : int;  --  scheduling priority
-    end record;
- 
-    function pthread_setschedparam
-      (thread : pthread_t;
-       policy : int;
-       param  : access struct_sched_param) return int;
-    pragma Inline (pthread_setschedparam);
-    --  FSU_THREADS does not have pthread_setschedparam
- 
-    function pthread_attr_setscope
-      (attr            : access pthread_attr_t;
-       contentionscope : int) return int;
-    pragma Import (C, pthread_attr_setscope, "pthread_attr_setscope");
- 
-    function pthread_attr_setinheritsched
-      (attr         : access pthread_attr_t;
-       inheritsched : int) return int;
-    pragma Import (C, pthread_attr_setinheritsched);
- 
-    function pthread_attr_setschedpolicy
-      (attr   : access pthread_attr_t;
-       policy : int) return int;
-    pragma Import (C, pthread_attr_setschedpolicy, "pthread_attr_setsched");
- 
-    function sched_yield return int;
-    pragma Inline (sched_yield);
-    --  FSU_THREADS does not have sched_yield;
- 
-    ---------------------------
-    -- P1003.1c - Section 16 --
-    ---------------------------
- 
-    function pthread_attr_init (attributes : access pthread_attr_t) return int;
-    pragma Import (C, pthread_attr_init, "pthread_attr_init");
- 
-    function pthread_attr_destroy
-      (attributes : access pthread_attr_t) return int;
-    pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
- 
-    function pthread_attr_setdetachstate
-      (attr        : access pthread_attr_t;
-       detachstate : int) return int;
-    pragma Inline (pthread_attr_setdetachstate);
-    --  FSU_THREADS has a nonstandard pthread_attr_setdetachstate
- 
-    function pthread_attr_setstacksize
-      (attr      : access pthread_attr_t;
-       stacksize : size_t) return int;
-    pragma Import (C, pthread_attr_setstacksize, "pthread_attr_setstacksize");
- 
-    function pthread_create
-      (thread        : access pthread_t;
-       attributes    : access pthread_attr_t;
-       start_routine : Thread_Body;
-       arg           : System.Address) return int;
-    pragma Import (C, pthread_create, "pthread_create");
- 
-    procedure pthread_exit (status : System.Address);
-    pragma Import (C, pthread_exit, "pthread_exit");
- 
-    function pthread_self return pthread_t;
-    pragma Import (C, pthread_self, "pthread_self");
- 
-    --------------------------
-    -- POSIX.1c  Section 17 --
-    --------------------------
- 
-    function pthread_setspecific
-      (key   : pthread_key_t;
-       value : System.Address) return int;
-    pragma Import (C, pthread_setspecific, "pthread_setspecific");
- 
-    function pthread_getspecific (key : pthread_key_t) return System.Address;
-    pragma Inline (pthread_getspecific);
-    --  FSU_THREADS has a nonstandard pthread_getspecific
- 
-    type destructor_pointer is access procedure (arg : System.Address);
- 
-    function pthread_key_create
-      (key        : access pthread_key_t;
-       destructor : destructor_pointer) return int;
-    pragma Import (C, pthread_key_create, "pthread_key_create");
- 
- private
- 
-    type sigset_t is array (0 .. 31) of unsigned_long;
-    pragma Convention (C, sigset_t);
-    --  This is for GNU libc version 2 but should be backward compatible with
-    --  other libc where sigset_t is smaller.
- 
-    type pid_t is new int;
- 
-    type time_t is new long;
- 
-    type timespec is record
-       tv_sec  : time_t;
-       tv_nsec : long;
-    end record;
-    pragma Convention (C, timespec);
- 
-    type clockid_t is new int;
-    CLOCK_REALTIME : constant clockid_t := 0;
- 
-    type struct_timeval is record
-       tv_sec  : long;
-       tv_usec : long;
-    end record;
-    pragma Convention (C, struct_timeval);
- 
-    type pthread_attr_t is record
-       flags           : int;
-       stacksize       : int;
-       contentionscope : int;
-       inheritsched    : int;
-       detachstate     : int;
-       sched           : int;
-       prio            : int;
-       starttime       : timespec;
-       deadline        : timespec;
-       period          : timespec;
-    end record;
-    pragma Convention (C_Pass_By_Copy, pthread_attr_t);
- 
-    type pthread_condattr_t is record
-       flags : int;
-    end record;
-    pragma Convention (C, pthread_condattr_t);
- 
-    type pthread_mutexattr_t is record
-       flags        : int;
-       prio_ceiling : int;
-       protocol     : int;
-    end record;
-    pragma Convention (C, pthread_mutexattr_t);
- 
-    type sigjmp_buf is array (Integer range 0 .. 38) of int;
- 
-    type pthread_t_struct is record
-       context    : sigjmp_buf;
-       pbody      : sigjmp_buf;
-       errno      : int;
-       ret        : int;
-       stack_base : System.Address;
-    end record;
-    pragma Convention (C, pthread_t_struct);
- 
-    type pthread_t is access all pthread_t_struct;
- 
-    type queue_t is record
-       head : System.Address;
-       tail : System.Address;
-    end record;
-    pragma Convention (C, queue_t);
- 
-    type pthread_mutex_t is record
-       queue                 : queue_t;
-       lock                  : plain_char;
-       owner                 : System.Address;
-       flags                 : int;
-       prio_ceiling          : int;
-       protocol              : int;
-       prev_max_ceiling_prio : int;
-    end record;
-    pragma Convention (C, pthread_mutex_t);
- 
-    type pthread_cond_t is record
-       queue        : queue_t;
-       flags        : int;
-       waiters      : int;
-       mutex        : System.Address;
-    end record;
-    pragma Convention (C, pthread_cond_t);
- 
-    type pthread_key_t is new int;
- 
- end System.OS_Interface;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5lparame.adb gcc-4.0.0/gcc/ada/5lparame.adb
*** gcc-3.4.3/gcc/ada/5lparame.adb	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5lparame.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,73 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                    S Y S T E M . P A R A M E T E R S                     --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --          Copyright (C) 1995-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the Linux (native) specific version
- 
- package body System.Parameters is
- 
-    -------------------------
-    -- Adjust_Storage_Size --
-    -------------------------
- 
-    function Adjust_Storage_Size (Size : Size_Type) return Size_Type is
-    begin
-       if Size = Unspecified_Size then
-          return Default_Stack_Size;
- 
-       elsif Size < Minimum_Stack_Size then
-          return Minimum_Stack_Size;
- 
-       else
-          return Size;
-       end if;
-    end Adjust_Storage_Size;
- 
-    ------------------------
-    -- Default_Stack_Size --
-    ------------------------
- 
-    function Default_Stack_Size return Size_Type is
-    begin
-       return 2 * 1024 * 1024;
-    end Default_Stack_Size;
- 
-    ------------------------
-    -- Minimum_Stack_Size --
-    ------------------------
- 
-    function Minimum_Stack_Size return Size_Type is
-    begin
-       return 8 * 1024;
-    end Minimum_Stack_Size;
- 
- end System.Parameters;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5lsystem.ads gcc-4.0.0/gcc/ada/5lsystem.ads
*** gcc-3.4.3/gcc/ada/5lsystem.ads	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5lsystem.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,150 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                        GNAT RUN-TIME COMPONENTS                          --
- --                                                                          --
- --                               S Y S T E M                                --
- --                                                                          --
- --                                 S p e c                                  --
- --                          (GNU-Linux/x86 Version)                         --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the  contents of the part following the private keyword. --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- package System is
- pragma Pure (System);
- --  Note that we take advantage of the implementation permission to
- --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
- 
-    type Name is (SYSTEM_NAME_GNAT);
-    System_Name : constant Name := SYSTEM_NAME_GNAT;
- 
-    --  System-Dependent Named Numbers
- 
-    Min_Int               : constant := Long_Long_Integer'First;
-    Max_Int               : constant := Long_Long_Integer'Last;
- 
-    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
-    Max_Nonbinary_Modulus : constant := Integer'Last;
- 
-    Max_Base_Digits       : constant := Long_Long_Float'Digits;
-    Max_Digits            : constant := Long_Long_Float'Digits;
- 
-    Max_Mantissa          : constant := 63;
-    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
- 
-    Tick                  : constant := 0.000_001;
- 
-    --  Storage-related Declarations
- 
-    type Address is private;
-    Null_Address : constant Address;
- 
-    Storage_Unit : constant := 8;
-    Word_Size    : constant := 32;
-    Memory_Size  : constant := 2 ** 32;
- 
-    --  Address comparison
- 
-    function "<"  (Left, Right : Address) return Boolean;
-    function "<=" (Left, Right : Address) return Boolean;
-    function ">"  (Left, Right : Address) return Boolean;
-    function ">=" (Left, Right : Address) return Boolean;
-    function "="  (Left, Right : Address) return Boolean;
- 
-    pragma Import (Intrinsic, "<");
-    pragma Import (Intrinsic, "<=");
-    pragma Import (Intrinsic, ">");
-    pragma Import (Intrinsic, ">=");
-    pragma Import (Intrinsic, "=");
- 
-    --  Other System-Dependent Declarations
- 
-    type Bit_Order is (High_Order_First, Low_Order_First);
-    Default_Bit_Order : constant Bit_Order := Low_Order_First;
- 
-    --  Priority-related Declarations (RM D.1)
- 
-    Max_Priority           : constant Positive := 30;
-    Max_Interrupt_Priority : constant Positive := 31;
- 
-    subtype Any_Priority       is Integer      range  0 .. 31;
-    subtype Priority           is Any_Priority range  0 .. 30;
-    subtype Interrupt_Priority is Any_Priority range 31 .. 31;
- 
-    Default_Priority : constant Priority := 15;
- 
- private
- 
-    type Address is mod Memory_Size;
-    Null_Address : constant Address := 0;
- 
-    --------------------------------------
-    -- System Implementation Parameters --
-    --------------------------------------
- 
-    --  These parameters provide information about the target that is used
-    --  by the compiler. They are in the private part of System, where they
-    --  can be accessed using the special circuitry in the Targparm unit
-    --  whose source should be consulted for more detailed descriptions
-    --  of the individual switch values.
- 
-    AAMP                      : constant Boolean := False;
-    Backend_Divide_Checks     : constant Boolean := False;
-    Backend_Overflow_Checks   : constant Boolean := False;
-    Command_Line_Args         : constant Boolean := True;
-    Configurable_Run_Time     : constant Boolean := False;
-    Denorm                    : constant Boolean := True;
-    Duration_32_Bits          : constant Boolean := False;
-    Exit_Status_Supported     : constant Boolean := True;
-    Fractional_Fixed_Ops      : constant Boolean := False;
-    Frontend_Layout           : constant Boolean := False;
-    Functions_Return_By_DSP   : constant Boolean := False;
-    Machine_Overflows         : constant Boolean := False;
-    Machine_Rounds            : constant Boolean := True;
-    OpenVMS                   : constant Boolean := False;
-    Signed_Zeros              : constant Boolean := True;
-    Stack_Check_Default       : constant Boolean := False;
-    Stack_Check_Probes        : constant Boolean := False;
-    Support_64_Bit_Divides    : constant Boolean := True;
-    Support_Aggregates        : constant Boolean := True;
-    Support_Composite_Assign  : constant Boolean := True;
-    Support_Composite_Compare : constant Boolean := True;
-    Support_Long_Shifts       : constant Boolean := True;
-    Suppress_Standard_Library : constant Boolean := False;
-    Use_Ada_Main_Program_Name : constant Boolean := False;
-    ZCX_By_Default            : constant Boolean := True;
-    GCC_ZCX_Support           : constant Boolean := True;
-    Front_End_ZCX_Support     : constant Boolean := False;
- 
-    --  Obsolete entries, to be removed eventually (bootstrap issues!)
- 
-    High_Integrity_Mode       : constant Boolean := False;
-    Long_Shifts_Inlined       : constant Boolean := True;
- 
- end System;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5msystem.ads gcc-4.0.0/gcc/ada/5msystem.ads
*** gcc-3.4.3/gcc/ada/5msystem.ads	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5msystem.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,158 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                        GNAT RUN-TIME COMPONENTS                          --
- --                                                                          --
- --                               S Y S T E M                                --
- --                                                                          --
- --                                 S p e c                                  --
- --                         (VxWorks Version Mips)                           --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the  contents of the part following the private keyword. --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- package System is
- pragma Pure (System);
- --  Note that we take advantage of the implementation permission to
- --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
- 
-    type Name is (SYSTEM_NAME_GNAT);
-    System_Name : constant Name := SYSTEM_NAME_GNAT;
- 
-    --  System-Dependent Named Numbers
- 
-    Min_Int               : constant := Long_Long_Integer'First;
-    Max_Int               : constant := Long_Long_Integer'Last;
- 
-    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
-    Max_Nonbinary_Modulus : constant := Integer'Last;
- 
-    Max_Base_Digits       : constant := Long_Long_Float'Digits;
-    Max_Digits            : constant := Long_Long_Float'Digits;
- 
-    Max_Mantissa          : constant := 63;
-    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
- 
-    Tick                  : constant := 1.0 / 60.0;
- 
-    --  Storage-related Declarations
- 
-    type Address is private;
-    Null_Address : constant Address;
- 
-    Storage_Unit : constant := 8;
-    Word_Size    : constant := 32;
-    Memory_Size  : constant := 2 ** 32;
- 
-    --  Address comparison
- 
-    function "<"  (Left, Right : Address) return Boolean;
-    function "<=" (Left, Right : Address) return Boolean;
-    function ">"  (Left, Right : Address) return Boolean;
-    function ">=" (Left, Right : Address) return Boolean;
-    function "="  (Left, Right : Address) return Boolean;
- 
-    pragma Import (Intrinsic, "<");
-    pragma Import (Intrinsic, "<=");
-    pragma Import (Intrinsic, ">");
-    pragma Import (Intrinsic, ">=");
-    pragma Import (Intrinsic, "=");
- 
-    --  Other System-Dependent Declarations
- 
-    type Bit_Order is (High_Order_First, Low_Order_First);
-    Default_Bit_Order : constant Bit_Order := High_Order_First;
- 
-    --  Priority-related Declarations (RM D.1)
- 
-    --  256        is reserved for the VxWorks kernel
-    --  248 - 255  correspond to hardware interrupt levels 0 .. 7
-    --  247        is a catchall default "interrupt" priority for signals,
-    --             allowing higher priority than normal tasks, but lower than
-    --             hardware priority levels.  Protected Object ceilings can
-    --             override these values.
-    --  246        is used by the Interrupt_Manager task
- 
-    Max_Priority           : constant Positive := 245;
-    Max_Interrupt_Priority : constant Positive := 255;
- 
-    subtype Any_Priority       is Integer      range   0 .. 255;
-    subtype Priority           is Any_Priority range   0 .. 245;
-    subtype Interrupt_Priority is Any_Priority range 246 .. 255;
- 
-    Default_Priority : constant Priority := 122;
- 
- private
- 
-    type Address is mod Memory_Size;
-    Null_Address : constant Address := 0;
- 
-    --------------------------------------
-    -- System Implementation Parameters --
-    --------------------------------------
- 
-    --  These parameters provide information about the target that is used
-    --  by the compiler. They are in the private part of System, where they
-    --  can be accessed using the special circuitry in the Targparm unit
-    --  whose source should be consulted for more detailed descriptions
-    --  of the individual switch values.
- 
-    AAMP                      : constant Boolean := False;
-    Backend_Divide_Checks     : constant Boolean := False;
-    Backend_Overflow_Checks   : constant Boolean := False;
-    Command_Line_Args         : constant Boolean := False;
-    Configurable_Run_Time     : constant Boolean := False;
-    Denorm                    : constant Boolean := False;
-    Duration_32_Bits          : constant Boolean := False;
-    Exit_Status_Supported     : constant Boolean := True;
-    Fractional_Fixed_Ops      : constant Boolean := False;
-    Frontend_Layout           : constant Boolean := False;
-    Functions_Return_By_DSP   : constant Boolean := False;
-    Machine_Overflows         : constant Boolean := False;
-    Machine_Rounds            : constant Boolean := True;
-    OpenVMS                   : constant Boolean := False;
-    Signed_Zeros              : constant Boolean := True;
-    Stack_Check_Default       : constant Boolean := False;
-    Stack_Check_Probes        : constant Boolean := False;
-    Support_64_Bit_Divides    : constant Boolean := True;
-    Support_Aggregates        : constant Boolean := True;
-    Support_Composite_Assign  : constant Boolean := True;
-    Support_Composite_Compare : constant Boolean := True;
-    Support_Long_Shifts       : constant Boolean := True;
-    Suppress_Standard_Library : constant Boolean := False;
-    Use_Ada_Main_Program_Name : constant Boolean := True;
-    ZCX_By_Default            : constant Boolean := False;
-    GCC_ZCX_Support           : constant Boolean := False;
-    Front_End_ZCX_Support     : constant Boolean := False;
- 
-    --  Obsolete entries, to be removed eventually (bootstrap issues!)
- 
-    High_Integrity_Mode       : constant Boolean := False;
-    Long_Shifts_Inlined       : constant Boolean := False;
- 
- end System;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5mvxwork.ads gcc-4.0.0/gcc/ada/5mvxwork.ads
*** gcc-3.4.3/gcc/ada/5mvxwork.ads	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5mvxwork.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,57 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
- --                                                                          --
- --                        S Y S T E M . V X W O R K S                       --
- --                                                                          --
- --                                   S p e c                                --
- --                                                                          --
- --            Copyright (C) 1998-2001 Free Software Foundation, Inc.        --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the MIPS VxWorks version of this package.
- 
- with Interfaces.C;
- 
- package System.VxWorks is
-    pragma Preelaborate (System.VxWorks);
- 
-    package IC renames Interfaces.C;
- 
-    --  Floating point context record. MIPS version
- 
-    FP_NUM_DREGS : constant := 16;
-    type Fpx_Array is array (1 .. FP_NUM_DREGS) of IC.double;
- 
-    type FP_CONTEXT is record
-       fpx   : Fpx_Array;
-       fpcsr : IC.int;
-    end record;
-    pragma Convention (C, FP_CONTEXT);
- 
-    Num_HW_Interrupts : constant := 256;
-    --  Number of entries in hardware interrupt vector table.
- 
- end System.VxWorks;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5ninmaop.adb gcc-4.0.0/gcc/ada/5ninmaop.adb
*** gcc-3.4.3/gcc/ada/5ninmaop.adb	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5ninmaop.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,194 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                  SYSTEM.INTERRUPT_MANAGEMENT.OPERATIONS                  --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --          Copyright (C) 1992-2001 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a NO tasking version of this package.
- 
- package body System.Interrupt_Management.Operations is
- 
-    --  Turn off warnings since many unused formals
- 
-    pragma Warnings (Off);
- 
-    ----------------------------
-    -- Thread_Block_Interrupt --
-    ----------------------------
- 
-    procedure Thread_Block_Interrupt
-      (Interrupt : Interrupt_ID)
-    is
-    begin
-       null;
-    end Thread_Block_Interrupt;
- 
-    ------------------------------
-    -- Thread_Unblock_Interrupt --
-    ------------------------------
- 
-    procedure Thread_Unblock_Interrupt
-      (Interrupt : Interrupt_ID)
-    is
-    begin
-       null;
-    end Thread_Unblock_Interrupt;
- 
-    ------------------------
-    -- Set_Interrupt_Mask --
-    ------------------------
- 
-    procedure Set_Interrupt_Mask (Mask : access Interrupt_Mask) is
-    begin
-       null;
-    end Set_Interrupt_Mask;
- 
-    procedure Set_Interrupt_Mask
-      (Mask  : access Interrupt_Mask;
-       OMask : access Interrupt_Mask) is
-    begin
-       null;
-    end Set_Interrupt_Mask;
- 
-    ------------------------
-    -- Get_Interrupt_Mask --
-    ------------------------
- 
-    procedure Get_Interrupt_Mask (Mask : access Interrupt_Mask) is
-    begin
-       null;
-    end Get_Interrupt_Mask;
- 
-    --------------------
-    -- Interrupt_Wait --
-    --------------------
- 
-    function Interrupt_Wait
-      (Mask : access Interrupt_Mask)
-       return Interrupt_ID
-    is
-    begin
-       return 0;
-    end Interrupt_Wait;
- 
-    ----------------------------
-    -- Install_Default_Action --
-    ----------------------------
- 
-    procedure Install_Default_Action (Interrupt : Interrupt_ID) is
-    begin
-       null;
-    end Install_Default_Action;
- 
-    ---------------------------
-    -- Install_Ignore_Action --
-    ---------------------------
- 
-    procedure Install_Ignore_Action (Interrupt : Interrupt_ID) is
-    begin
-       null;
-    end Install_Ignore_Action;
- 
-    -------------------------
-    -- Fill_Interrupt_Mask --
-    -------------------------
- 
-    procedure Fill_Interrupt_Mask (Mask : access Interrupt_Mask) is
-    begin
-       null;
-    end Fill_Interrupt_Mask;
- 
-    --------------------------
-    -- Empty_Interrupt_Mask --
-    --------------------------
- 
-    procedure Empty_Interrupt_Mask (Mask : access Interrupt_Mask) is
-    begin
-       null;
-    end Empty_Interrupt_Mask;
- 
-    -----------------------
-    -- Add_To_Sigal_Mask --
-    -----------------------
- 
-    procedure Add_To_Interrupt_Mask
-      (Mask      : access Interrupt_Mask;
-       Interrupt : Interrupt_ID)
-    is
-    begin
-       null;
-    end Add_To_Interrupt_Mask;
- 
-    --------------------------------
-    -- Delete_From_Interrupt_Mask --
-    --------------------------------
- 
-    procedure Delete_From_Interrupt_Mask
-      (Mask      : access Interrupt_Mask;
-       Interrupt : Interrupt_ID)
-    is
-    begin
-       null;
-    end Delete_From_Interrupt_Mask;
- 
-    ---------------
-    -- Is_Member --
-    ---------------
- 
-    function Is_Member
-      (Mask      : access Interrupt_Mask;
-       Interrupt : Interrupt_ID) return Boolean
-    is
-    begin
-       return False;
-    end Is_Member;
- 
-    -------------------------
-    -- Copy_Interrupt_Mask --
-    -------------------------
- 
-    procedure Copy_Interrupt_Mask
-      (X : out Interrupt_Mask;
-       Y : Interrupt_Mask)
-    is
-    begin
-       X := Y;
-    end Copy_Interrupt_Mask;
- 
-    -------------------------
-    -- Interrupt_Self_Process --
-    -------------------------
- 
-    procedure Interrupt_Self_Process (Interrupt : Interrupt_ID) is
-    begin
-       null;
-    end Interrupt_Self_Process;
- 
- end System.Interrupt_Management.Operations;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5nintman.adb gcc-4.0.0/gcc/ada/5nintman.adb
*** gcc-3.4.3/gcc/ada/5nintman.adb	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5nintman.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,49 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --           S Y S T E M . I N T E R R U P T _ M A N A G E M E N T          --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --          Copyright (C) 1997-2002 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a NO tasking version of this package.
- 
- package body System.Interrupt_Management is
- 
-    ---------------------------
-    -- Initialize_Interrupts --
-    ---------------------------
- 
-    --  Nothing needs to be done on this platform.
- 
-    procedure Initialize_Interrupts is
-    begin
-       null;
-    end Initialize_Interrupts;
- 
- end System.Interrupt_Management;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5nosinte.ads gcc-4.0.0/gcc/ada/5nosinte.ads
*** gcc-3.4.3/gcc/ada/5nosinte.ads	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5nosinte.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,49 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   S Y S T E M . O S _ I N T E R F A C E                  --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the no tasking version
- 
- package System.OS_Interface is
-    pragma Preelaborate;
- 
-    -------------
-    -- Signals --
-    -------------
- 
-    Max_Interrupt : constant := 2;
-    type Signal is new Integer range 0 .. Max_Interrupt;
- 
-    type sigset_t is new Integer;
-    type Thread_Id is new Integer;
- 
- end System.OS_Interface;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5nsystem.ads gcc-4.0.0/gcc/ada/5nsystem.ads
*** gcc-3.4.3/gcc/ada/5nsystem.ads	Fri Nov 14 13:56:34 2003
--- gcc-4.0.0/gcc/ada/5nsystem.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,150 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                        GNAT RUN-TIME COMPONENTS                          --
- --                                                                          --
- --                               S Y S T E M                                --
- --                                                                          --
- --                                 S p e c                                  --
- --                          (GNU-Linux/x86-64 Version)                      --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the  contents of the part following the private keyword. --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- package System is
- pragma Pure (System);
- --  Note that we take advantage of the implementation permission to
- --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
- 
-    type Name is (SYSTEM_NAME_GNAT);
-    System_Name : constant Name := SYSTEM_NAME_GNAT;
- 
-    --  System-Dependent Named Numbers
- 
-    Min_Int               : constant := Long_Long_Integer'First;
-    Max_Int               : constant := Long_Long_Integer'Last;
- 
-    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
-    Max_Nonbinary_Modulus : constant := Integer'Last;
- 
-    Max_Base_Digits       : constant := Long_Long_Float'Digits;
-    Max_Digits            : constant := Long_Long_Float'Digits;
- 
-    Max_Mantissa          : constant := 63;
-    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
- 
-    Tick                  : constant := 0.000_001;
- 
-    --  Storage-related Declarations
- 
-    type Address is private;
-    Null_Address : constant Address;
- 
-    Storage_Unit : constant := 8;
-    Word_Size    : constant := 64;
-    Memory_Size  : constant := 2 ** 64;
- 
-    --  Address comparison
- 
-    function "<"  (Left, Right : Address) return Boolean;
-    function "<=" (Left, Right : Address) return Boolean;
-    function ">"  (Left, Right : Address) return Boolean;
-    function ">=" (Left, Right : Address) return Boolean;
-    function "="  (Left, Right : Address) return Boolean;
- 
-    pragma Import (Intrinsic, "<");
-    pragma Import (Intrinsic, "<=");
-    pragma Import (Intrinsic, ">");
-    pragma Import (Intrinsic, ">=");
-    pragma Import (Intrinsic, "=");
- 
-    --  Other System-Dependent Declarations
- 
-    type Bit_Order is (High_Order_First, Low_Order_First);
-    Default_Bit_Order : constant Bit_Order := Low_Order_First;
- 
-    --  Priority-related Declarations (RM D.1)
- 
-    Max_Priority           : constant Positive := 30;
-    Max_Interrupt_Priority : constant Positive := 31;
- 
-    subtype Any_Priority       is Integer      range  0 .. 31;
-    subtype Priority           is Any_Priority range  0 .. 30;
-    subtype Interrupt_Priority is Any_Priority range 31 .. 31;
- 
-    Default_Priority : constant Priority := 15;
- 
- private
- 
-    type Address is mod Memory_Size;
-    Null_Address : constant Address := 0;
- 
-    --------------------------------------
-    -- System Implementation Parameters --
-    --------------------------------------
- 
-    --  These parameters provide information about the target that is used
-    --  by the compiler. They are in the private part of System, where they
-    --  can be accessed using the special circuitry in the Targparm unit
-    --  whose source should be consulted for more detailed descriptions
-    --  of the individual switch values.
- 
-    AAMP                      : constant Boolean := False;
-    Backend_Divide_Checks     : constant Boolean := False;
-    Backend_Overflow_Checks   : constant Boolean := False;
-    Command_Line_Args         : constant Boolean := True;
-    Configurable_Run_Time     : constant Boolean := False;
-    Denorm                    : constant Boolean := True;
-    Duration_32_Bits          : constant Boolean := False;
-    Exit_Status_Supported     : constant Boolean := True;
-    Fractional_Fixed_Ops      : constant Boolean := False;
-    Frontend_Layout           : constant Boolean := False;
-    Functions_Return_By_DSP   : constant Boolean := False;
-    Machine_Overflows         : constant Boolean := False;
-    Machine_Rounds            : constant Boolean := True;
-    OpenVMS                   : constant Boolean := False;
-    Signed_Zeros              : constant Boolean := True;
-    Stack_Check_Default       : constant Boolean := False;
-    Stack_Check_Probes        : constant Boolean := False;
-    Support_64_Bit_Divides    : constant Boolean := True;
-    Support_Aggregates        : constant Boolean := True;
-    Support_Composite_Assign  : constant Boolean := True;
-    Support_Composite_Compare : constant Boolean := True;
-    Support_Long_Shifts       : constant Boolean := True;
-    Suppress_Standard_Library : constant Boolean := False;
-    Use_Ada_Main_Program_Name : constant Boolean := False;
-    ZCX_By_Default            : constant Boolean := True;
-    GCC_ZCX_Support           : constant Boolean := True;
-    Front_End_ZCX_Support     : constant Boolean := False;
- 
-    --  Obsolete entries, to be removed eventually (bootstrap issues!)
- 
-    High_Integrity_Mode       : constant Boolean := False;
-    Long_Shifts_Inlined       : constant Boolean := True;
- 
- end System;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5ntaprop.adb gcc-4.0.0/gcc/ada/5ntaprop.adb
*** gcc-3.4.3/gcc/ada/5ntaprop.adb	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5ntaprop.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,438 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --     S Y S T E M . T A S K _ P R I M I T I V E S . O P E R A T I O N S    --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --         Copyright (C) 1992-2002, Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a no tasking version of this package
- 
- --  This package contains all the GNULL primitives that interface directly
- --  with the underlying OS.
- 
- pragma Polling (Off);
- --  Turn off polling, we do not want ATC polling to take place during
- --  tasking operations. It causes infinite loops and other problems.
- 
- with System.Tasking;
- --  used for Ada_Task_Control_Block
- --           Task_ID
- 
- with System.Error_Reporting;
- --  used for Shutdown
- 
- package body System.Task_Primitives.Operations is
- 
-    use System.Tasking;
-    use System.Parameters;
- 
-    pragma Warnings (Off);
-    --  Turn off warnings since so many unreferenced parameters
- 
-    -----------------
-    -- Stack_Guard --
-    -----------------
- 
-    procedure Stack_Guard (T : ST.Task_ID; On : Boolean) is
-    begin
-       null;
-    end Stack_Guard;
- 
-    --------------------
-    -- Get_Thread_Id  --
-    --------------------
- 
-    function Get_Thread_Id (T : ST.Task_ID) return OSI.Thread_Id is
-    begin
-       return OSI.Thread_Id (T.Common.LL.Thread);
-    end Get_Thread_Id;
- 
-    ----------
-    -- Self --
-    ----------
- 
-    function Self return Task_ID is
-    begin
-       return Null_Task;
-    end Self;
- 
-    ---------------------
-    -- Initialize_Lock --
-    ---------------------
- 
-    procedure Initialize_Lock
-      (Prio : System.Any_Priority;
-       L    : access Lock)
-    is
-    begin
-       null;
-    end Initialize_Lock;
- 
-    procedure Initialize_Lock (L : access RTS_Lock; Level : Lock_Level) is
-    begin
-       null;
-    end Initialize_Lock;
- 
-    -------------------
-    -- Finalize_Lock --
-    -------------------
- 
-    procedure Finalize_Lock (L : access Lock) is
-    begin
-       null;
-    end Finalize_Lock;
- 
-    procedure Finalize_Lock (L : access RTS_Lock) is
-    begin
-       null;
-    end Finalize_Lock;
- 
-    ----------------
-    -- Write_Lock --
-    ----------------
- 
-    procedure Write_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
-    begin
-       Ceiling_Violation := False;
-    end Write_Lock;
- 
-    procedure Write_Lock
-      (L           : access RTS_Lock;
-       Global_Lock : Boolean := False)
-    is
-    begin
-       null;
-    end Write_Lock;
- 
-    procedure Write_Lock (T : Task_ID) is
-    begin
-       null;
-    end Write_Lock;
- 
-    ---------------
-    -- Read_Lock --
-    ---------------
- 
-    procedure Read_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
-    begin
-       Ceiling_Violation := False;
-    end Read_Lock;
- 
-    ------------
-    -- Unlock --
-    ------------
- 
-    procedure Unlock (L : access Lock) is
-    begin
-       null;
-    end Unlock;
- 
-    procedure Unlock (L : access RTS_Lock; Global_Lock : Boolean := False) is
-    begin
-       null;
-    end Unlock;
- 
-    procedure Unlock (T : Task_ID) is
-    begin
-       null;
-    end Unlock;
- 
-    -----------
-    -- Sleep --
-    -----------
- 
-    procedure Sleep (Self_ID : Task_ID; Reason  : System.Tasking.Task_States) is
-    begin
-       null;
-    end Sleep;
- 
-    -----------------
-    -- Timed_Sleep --
-    -----------------
- 
-    procedure Timed_Sleep
-      (Self_ID  : Task_ID;
-       Time     : Duration;
-       Mode     : ST.Delay_Modes;
-       Reason   : System.Tasking.Task_States;
-       Timedout : out Boolean;
-       Yielded  : out Boolean) is
-    begin
-       Timedout := False;
-       Yielded := False;
-    end Timed_Sleep;
- 
-    -----------------
-    -- Timed_Delay --
-    -----------------
- 
-    procedure Timed_Delay
-      (Self_ID : Task_ID;
-       Time    : Duration;
-       Mode    : ST.Delay_Modes) is
-    begin
-       null;
-    end Timed_Delay;
- 
-    ---------------------
-    -- Monotonic_Clock --
-    ---------------------
- 
-    function Monotonic_Clock return Duration is
-    begin
-       return 0.0;
-    end Monotonic_Clock;
- 
-    -------------------
-    -- RT_Resolution --
-    -------------------
- 
-    function RT_Resolution return Duration is
-    begin
-       return 10#1.0#E-6;
-    end RT_Resolution;
- 
-    ------------
-    -- Wakeup --
-    ------------
- 
-    procedure Wakeup (T : Task_ID; Reason : System.Tasking.Task_States) is
-    begin
-       null;
-    end Wakeup;
- 
-    ------------------
-    -- Set_Priority --
-    ------------------
- 
-    procedure Set_Priority
-      (T                   : Task_ID;
-       Prio                : System.Any_Priority;
-       Loss_Of_Inheritance : Boolean := False) is
-    begin
-       null;
-    end Set_Priority;
- 
-    ------------------
-    -- Get_Priority --
-    ------------------
- 
-    function Get_Priority (T : Task_ID) return System.Any_Priority is
-    begin
-       return 0;
-    end Get_Priority;
- 
-    ----------------
-    -- Enter_Task --
-    ----------------
- 
-    procedure Enter_Task (Self_ID : Task_ID) is
-    begin
-       null;
-    end Enter_Task;
- 
-    --------------
-    -- New_ATCB --
-    --------------
- 
-    function New_ATCB (Entry_Num : Task_Entry_Index) return Task_ID is
-    begin
-       return new Ada_Task_Control_Block (Entry_Num);
-    end New_ATCB;
- 
-    -------------------
-    -- Is_Valid_Task --
-    -------------------
- 
-    function Is_Valid_Task return Boolean is
-    begin
-       return False;
-    end Is_Valid_Task;
- 
-    -----------------------------
-    -- Register_Foreign_Thread --
-    -----------------------------
- 
-    function Register_Foreign_Thread return Task_ID is
-    begin
-       return null;
-    end Register_Foreign_Thread;
- 
-    ----------------------
-    --  Initialize_TCB  --
-    ----------------------
- 
-    procedure Initialize_TCB (Self_ID : Task_ID; Succeeded : out Boolean) is
-    begin
-       Succeeded := False;
-    end Initialize_TCB;
- 
-    -----------------
-    -- Create_Task --
-    -----------------
- 
-    procedure Create_Task
-      (T          : Task_ID;
-       Wrapper    : System.Address;
-       Stack_Size : System.Parameters.Size_Type;
-       Priority   : System.Any_Priority;
-       Succeeded  : out Boolean) is
-    begin
-       Succeeded := False;
-    end Create_Task;
- 
-    ------------------
-    -- Finalize_TCB --
-    ------------------
- 
-    procedure Finalize_TCB (T : Task_ID) is
-    begin
-       null;
-    end Finalize_TCB;
- 
-    ---------------
-    -- Exit_Task --
-    ---------------
- 
-    procedure Exit_Task is
-    begin
-       null;
-    end Exit_Task;
- 
-    ----------------
-    -- Abort_Task --
-    ----------------
- 
-    procedure Abort_Task (T : Task_ID) is
-    begin
-       null;
-    end Abort_Task;
- 
-    -----------
-    -- Yield --
-    -----------
- 
-    procedure Yield (Do_Yield : Boolean := True) is
-    begin
-       null;
-    end Yield;
- 
-    ----------------
-    -- Check_Exit --
-    ----------------
- 
-    --  Dummy versions.  The only currently working versions is for solaris
-    --  (native).
- 
-    function Check_Exit (Self_ID : ST.Task_ID) return Boolean is
-    begin
-       return True;
-    end Check_Exit;
- 
-    --------------------
-    -- Check_No_Locks --
-    --------------------
- 
-    function Check_No_Locks (Self_ID : ST.Task_ID) return Boolean is
-    begin
-       return True;
-    end Check_No_Locks;
- 
-    ----------------------
-    -- Environment_Task --
-    ----------------------
- 
-    function Environment_Task return Task_ID is
-    begin
-       return null;
-    end Environment_Task;
- 
-    --------------
-    -- Lock_RTS --
-    --------------
- 
-    procedure Lock_RTS is
-    begin
-       null;
-    end Lock_RTS;
- 
-    ----------------
-    -- Unlock_RTS --
-    ----------------
- 
-    procedure Unlock_RTS is
-    begin
-       null;
-    end Unlock_RTS;
- 
-    ------------------
-    -- Suspend_Task --
-    ------------------
- 
-    function Suspend_Task
-      (T           : ST.Task_ID;
-       Thread_Self : OSI.Thread_Id)
-       return        Boolean
-    is
-    begin
-       return False;
-    end Suspend_Task;
- 
-    -----------------
-    -- Resume_Task --
-    -----------------
- 
-    function Resume_Task
-      (T           : ST.Task_ID;
-       Thread_Self : OSI.Thread_Id)
-       return        Boolean
-    is
-    begin
-       return False;
-    end Resume_Task;
- 
-    ----------------
-    -- Initialize --
-    ----------------
- 
-    procedure Initialize (Environment_Task : Task_ID) is
-    begin
-       null;
-    end Initialize;
- 
-    No_Tasking : Boolean;
- 
- begin
-    --  Can't raise an exception because target independent packages try to
-    --  do an Abort_Defer, which gets a memory fault.
- 
-    No_Tasking :=
-      System.Error_Reporting.Shutdown
-        ("Tasking not implemented on this configuration");
- end System.Task_Primitives.Operations;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5ntaspri.ads gcc-4.0.0/gcc/ada/5ntaspri.ads
*** gcc-3.4.3/gcc/ada/5ntaspri.ads	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5ntaspri.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,55 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                 S Y S T E M . T A S K _ P R I M I T I V E S              --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --          Copyright (C) 1991-2000 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a no tasking version of this package
- 
- pragma Polling (Off);
- --  Turn off polling, we do not want ATC polling to take place during
- --  tasking operations. It causes infinite loops and other problems.
- 
- package System.Task_Primitives is
-    pragma Preelaborate;
- 
-    type Lock is new Integer;
- 
-    type RTS_Lock is new Integer;
- 
-    type Task_Body_Access is access procedure;
- 
-    type Private_Data is record
-       Thread      : aliased Integer;
-       CV          : aliased Integer;
-       L           : aliased RTS_Lock;
-    end record;
- 
- end System.Task_Primitives;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5ointerr.adb gcc-4.0.0/gcc/ada/5ointerr.adb
*** gcc-3.4.3/gcc/ada/5ointerr.adb	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5ointerr.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,307 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
- --                                                                          --
- --                     S Y S T E M . I N T E R R U P T S                    --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --             Copyright (C) 1991-1994, Florida State University            --
- --             Copyright (C) 1995-2003, Ada Core Technologies               --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is an OS/2 version of this package.
- 
- --  This version is a stub, for systems that
- --  do not support interrupts (or signals).
- 
- with Ada.Exceptions;
- 
- package body System.Interrupts is
- 
-    pragma Warnings (Off); -- kill warnings on unreferenced formals
- 
-    use System.Tasking;
- 
-    -----------------------
-    -- Local Subprograms --
-    -----------------------
- 
-    procedure Unimplemented;
-    --  This procedure raises a Program_Error with an appropriate message
-    --  indicating that an unimplemented feature has been used.
- 
-    --------------------
-    -- Attach_Handler --
-    --------------------
- 
-    procedure Attach_Handler
-      (New_Handler : Parameterless_Handler;
-       Interrupt   : Interrupt_ID;
-       Static      : Boolean := False)
-    is
-    begin
-       Unimplemented;
-    end Attach_Handler;
- 
-    -----------------------------
-    -- Bind_Interrupt_To_Entry --
-    -----------------------------
- 
-    procedure Bind_Interrupt_To_Entry
-      (T       : Task_ID;
-       E       : Task_Entry_Index;
-       Int_Ref : System.Address)
-    is
-    begin
-       Unimplemented;
-    end Bind_Interrupt_To_Entry;
- 
-    ---------------------
-    -- Block_Interrupt --
-    ---------------------
- 
-    procedure Block_Interrupt (Interrupt : Interrupt_ID) is
-    begin
-       Unimplemented;
-    end Block_Interrupt;
- 
-    ---------------------
-    -- Current_Handler --
-    ---------------------
- 
-    function Current_Handler
-      (Interrupt : Interrupt_ID)
-       return      Parameterless_Handler
-    is
-    begin
-       Unimplemented;
-       return null;
-    end Current_Handler;
- 
-    --------------------
-    -- Detach_Handler --
-    --------------------
- 
-    procedure Detach_Handler
-      (Interrupt : Interrupt_ID;
-       Static    : Boolean := False)
-    is
-    begin
-       Unimplemented;
-    end Detach_Handler;
- 
-    ------------------------------
-    -- Detach_Interrupt_Entries --
-    ------------------------------
- 
-    procedure Detach_Interrupt_Entries (T : Task_ID) is
-    begin
-       Unimplemented;
-    end Detach_Interrupt_Entries;
- 
-    ----------------------
-    -- Exchange_Handler --
-    ----------------------
- 
-    procedure Exchange_Handler
-      (Old_Handler : out Parameterless_Handler;
-       New_Handler : Parameterless_Handler;
-       Interrupt   : Interrupt_ID;
-       Static      : Boolean := False)
-    is
-    begin
-       Old_Handler := null;
-       Unimplemented;
-    end Exchange_Handler;
- 
-    --------------
-    -- Finalize --
-    --------------
- 
-    procedure Finalize (Object : in out Static_Interrupt_Protection) is
-    begin
-       Unimplemented;
-    end Finalize;
- 
-    -------------------------------------
-    -- Has_Interrupt_Or_Attach_Handler --
-    -------------------------------------
- 
-    function Has_Interrupt_Or_Attach_Handler
-      (Object : access Dynamic_Interrupt_Protection)
-       return   Boolean
-    is
-       pragma Warnings (Off, Object);
- 
-    begin
-       Unimplemented;
-       return True;
-    end Has_Interrupt_Or_Attach_Handler;
- 
-    function Has_Interrupt_Or_Attach_Handler
-      (Object : access Static_Interrupt_Protection)
-       return   Boolean
-    is
-       pragma Warnings (Off, Object);
- 
-    begin
-       Unimplemented;
-       return True;
-    end Has_Interrupt_Or_Attach_Handler;
- 
-    ----------------------
-    -- Ignore_Interrupt --
-    ----------------------
- 
-    procedure Ignore_Interrupt (Interrupt : Interrupt_ID) is
-    begin
-       Unimplemented;
-    end Ignore_Interrupt;
- 
-    ----------------------
-    -- Install_Handlers --
-    ----------------------
- 
-    procedure Install_Handlers
-      (Object       : access Static_Interrupt_Protection;
-       New_Handlers : New_Handler_Array)
-    is
-    begin
-       Unimplemented;
-    end Install_Handlers;
- 
-    ----------------
-    -- Is_Blocked --
-    ----------------
- 
-    function Is_Blocked (Interrupt : Interrupt_ID) return Boolean is
-    begin
-       Unimplemented;
-       return True;
-    end Is_Blocked;
- 
-    -----------------------
-    -- Is_Entry_Attached --
-    -----------------------
- 
-    function Is_Entry_Attached (Interrupt : Interrupt_ID) return Boolean is
-    begin
-       Unimplemented;
-       return True;
-    end Is_Entry_Attached;
- 
-    -------------------------
-    -- Is_Handler_Attached --
-    -------------------------
- 
-    function Is_Handler_Attached (Interrupt : Interrupt_ID) return Boolean is
-    begin
-       Unimplemented;
-       return True;
-    end Is_Handler_Attached;
- 
-    ----------------
-    -- Is_Ignored --
-    ----------------
- 
-    function Is_Ignored (Interrupt : Interrupt_ID) return Boolean is
-    begin
-       Unimplemented;
-       return True;
-    end Is_Ignored;
- 
-    -----------------
-    -- Is_Reserved --
-    -----------------
- 
-    function Is_Reserved (Interrupt : Interrupt_ID) return Boolean is
-    begin
-       Unimplemented;
-       return True;
-    end Is_Reserved;
- 
-    ---------------
-    -- Reference --
-    ---------------
- 
-    function Reference (Interrupt : Interrupt_ID) return System.Address is
-    begin
-       Unimplemented;
-       return Interrupt'Address;
-    end Reference;
- 
-    --------------------------------
-    -- Register_Interrupt_Handler --
-    --------------------------------
- 
-    procedure Register_Interrupt_Handler
-      (Handler_Addr : System.Address)
-    is
-    begin
-       Unimplemented;
-    end Register_Interrupt_Handler;
- 
-    -----------------------
-    -- Unblock_Interrupt --
-    -----------------------
- 
-    procedure Unblock_Interrupt (Interrupt : Interrupt_ID) is
-    begin
-       Unimplemented;
-    end Unblock_Interrupt;
- 
-    ------------------
-    -- Unblocked_By --
-    ------------------
- 
-    function Unblocked_By (Interrupt : Interrupt_ID)
-      return System.Tasking.Task_ID is
-    begin
-       Unimplemented;
-       return null;
-    end Unblocked_By;
- 
-    ------------------------
-    -- Unignore_Interrupt --
-    ------------------------
- 
-    procedure Unignore_Interrupt (Interrupt : Interrupt_ID) is
-    begin
-       Unimplemented;
-    end Unignore_Interrupt;
- 
-    -------------------
-    -- Unimplemented; --
-    -------------------
- 
-    procedure Unimplemented is
-    begin
-       Ada.Exceptions.Raise_Exception
-         (Program_Error'Identity, "interrupts/signals not implemented");
-       raise Program_Error;
-    end Unimplemented;
- 
- end System.Interrupts;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5omastop.adb gcc-4.0.0/gcc/ada/5omastop.adb
*** gcc-3.4.3/gcc/ada/5omastop.adb	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5omastop.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,588 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                     SYSTEM.MACHINE_STATE_OPERATIONS                      --
- --                                                                          --
- --                                 B o d y                                  --
- --                            (Version for x86)                             --
- --                                                                          --
- --           Copyright (C) 1999-2002 Ada Core Technologies, Inc.            --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  Note: it is very important that this unit not generate any exception
- --  tables of any kind. Otherwise we get a nasty rtsfind recursion problem.
- --  This means no subprograms, including implicitly generated ones.
- 
- with Unchecked_Conversion;
- with System.Storage_Elements;
- with System.Machine_Code; use System.Machine_Code;
- with System.Memory;
- 
- package body System.Machine_State_Operations is
- 
-    use System.Exceptions;
- 
-    type Uns8  is mod 2 ** 8;
-    type Uns32 is mod 2 ** 32;
- 
-    type Bits5 is mod 2 ** 5;
-    type Bits6 is mod 2 ** 6;
- 
-    function To_Address is new Unchecked_Conversion (Uns32, Address);
- 
-    type Uns32_Ptr is access all Uns32;
-    function To_Uns32_Ptr is new Unchecked_Conversion (Uns32,   Uns32_Ptr);
- 
-    --  Note: the type Uns32 has an alignment of 4. However, in some cases
-    --  values of type Uns32_Ptr will not be aligned (notably in the case
-    --  where we get the immediate field from an instruction). However this
-    --  does not matter in practice, since the x86 does not require that
-    --  operands be aligned.
- 
-    ----------------------
-    -- General Approach --
-    ----------------------
- 
-    --  For the x86 version of this unit, the Subprogram_Info_Type values
-    --  are simply the starting code address for the subprogram. Popping
-    --  of stack frames works by analyzing the code in the prolog, and
-    --  deriving from this analysis the necessary information for restoring
-    --  the registers, including the return point.
- 
-    ---------------------------
-    -- Description of Prolog --
-    ---------------------------
- 
-    --  If a frame pointer is present, the prolog looks like
- 
-    --     pushl %ebp
-    --     movl  %esp,%ebp
-    --     subl  $nnn,%esp     omitted if nnn = 0
-    --     pushl %edi          omitted if edi not used
-    --     pushl %esi          omitted if esi not used
-    --     pushl %ebx          omitted if ebx not used
- 
-    --  If a frame pointer is not present, the prolog looks like
- 
-    --     subl  $nnn,%esp     omitted if nnn = 0
-    --     pushl %ebp          omitted if ebp not used
-    --     pushl %edi          omitted if edi not used
-    --     pushl %esi          omitted if esi not used
-    --     pushl %ebx          omitted if ebx not used
- 
-    --  Note: any or all of the save over call registers may be used and
-    --  if so, will be saved using pushl as shown above. The order of the
-    --  pushl instructions will be as shown above for gcc generated code,
-    --  but the code in this unit does not assume this.
- 
-    -------------------------
-    -- Description of Call --
-    -------------------------
- 
-    --  A call looks like:
- 
-    --     pushl ...           push parameters
-    --     pushl ...
-    --     call  ...           perform the call
-    --     addl  $nnn,%esp     omitted if no parameters
- 
-    --  Note that we are not absolutely guaranteed that the call is always
-    --  followed by an addl operation that readjusts %esp for this particular
-    --  call. There are two reasons for this:
- 
-    --    1) The addl can be delayed and combined in the case where more than
-    --       one call appears in sequence. This can be suppressed by using the
-    --       switch -fno-defer-pop and for Ada code, we automatically use
-    --       this switch, but we could still be dealing with C code that was
-    --       compiled without using this switch.
- 
-    --    2) Scheduling may result in moving the addl instruction away from
-    --       the call. It is not clear if this actually can happen at the
-    --       current time, but it is certainly conceptually possible.
- 
-    --  The addl after the call is important, since we need to be able to
-    --  restore the proper %esp value when we pop the stack. However, we do
-    --  not try to compensate for either of the above effects. As noted above,
-    --  case 1 does not occur for Ada code, and it does not appear in practice
-    --  that case 2 occurs with any significant frequency (we have never seen
-    --  an example so far for gcc generated code).
- 
-    --  Furthermore, it is only in the case of -fomit-frame-pointer that we
-    --  really get into trouble from not properly restoring %esp. If we have
-    --  a frame pointer, then the worst that happens is that %esp is slightly
-    --  more depressed than it should be. This could waste a bit of space on
-    --  the stack, and even in some cases cause a storage leak on the stack,
-    --  but it will not affect the functional correctness of the processing.
- 
-    ----------------------------------------
-    -- Definitions of Instruction Formats --
-    ----------------------------------------
- 
-    type Rcode is (eax, ecx, edx, ebx, esp, ebp, esi, edi);
-    pragma Warnings (Off, Rcode);
-    --  Code indicating which register is referenced in an instruction
- 
-    --  The following define the format of a pushl instruction
- 
-    Op_pushl : constant Bits5 := 2#01010#;
- 
-    type Ins_pushl is record
-       Op  : Bits5 := Op_pushl;
-       Reg : Rcode;
-    end record;
- 
-    for Ins_pushl use record
-       Op  at 0 range 3 .. 7;
-       Reg at 0 range 0 .. 2;
-    end record;
- 
-    Ins_pushl_ebp : constant Ins_pushl := (Op_pushl, Reg => ebp);
- 
-    type Ins_pushl_Ptr is access all Ins_pushl;
- 
-    --  For the movl %esp,%ebp instruction, we only need to know the length
-    --  because we simply skip past it when we analyze the prolog.
- 
-    Ins_movl_length : constant := 2;
- 
-    --  The following define the format of addl/subl esp instructions
- 
-    Op_Immed : constant Bits6 := 2#100000#;
- 
-    Op2_addl_Immed : constant Bits5 := 2#11100#;
-    pragma Unreferenced (Op2_addl_Immed);
- 
-    Op2_subl_Immed : constant Bits5 := 2#11101#;
- 
-    type Word_Byte is (Word, Byte);
-    pragma Unreferenced (Byte);
- 
-    type Ins_addl_subl_byte is record
-       Op   : Bits6;           -- Set to Op_Immed
-       w    : Word_Byte;       -- Word/Byte flag (set to 1 = byte)
-       s    : Boolean;         -- Sign extension bit (1 = extend)
-       Op2  : Bits5;           -- Secondary opcode
-       Reg  : Rcode;           -- Register
-       Imm8 : Uns8;            -- Immediate operand
-    end record;
- 
-    for Ins_addl_subl_byte use record
-       Op   at 0 range 2 .. 7;
-       w    at 0 range 1 .. 1;
-       s    at 0 range 0 .. 0;
-       Op2  at 1 range 3 .. 7;
-       Reg  at 1 range 0 .. 2;
-       Imm8 at 2 range 0 .. 7;
-    end record;
- 
-    type Ins_addl_subl_word is record
-       Op    : Bits6;          -- Set to Op_Immed
-       w     : Word_Byte;      -- Word/Byte flag (set to 0 = word)
-       s     : Boolean;        -- Sign extension bit (1 = extend)
-       Op2   : Bits5;          -- Secondary opcode
-       Reg   : Rcode;          -- Register
-       Imm32 : Uns32;          -- Immediate operand
-    end record;
- 
-    for Ins_addl_subl_word use record
-       Op    at 0 range 2 .. 7;
-       w     at 0 range 1 .. 1;
-       s     at 0 range 0 .. 0;
-       Op2   at 1 range 3 .. 7;
-       Reg   at 1 range 0 .. 2;
-       Imm32 at 2 range 0 .. 31;
-    end record;
- 
-    type Ins_addl_subl_byte_Ptr is access all Ins_addl_subl_byte;
-    type Ins_addl_subl_word_Ptr is access all Ins_addl_subl_word;
- 
-    ---------------------
-    -- Prolog Analysis --
-    ---------------------
- 
-    --  The analysis of the prolog answers the following questions:
- 
-    --    1. Is %ebp used as a frame pointer?
-    --    2. How far is SP depressed (i.e. what is the stack frame size)
-    --    3. Which registers are saved in the prolog, and in what order
- 
-    --  The following data structure stores the answers to these questions
- 
-    subtype SOC is Rcode range ebx .. edi;
-    --  Possible save over call registers
- 
-    SOC_Max : constant := 4;
-    --  Max number of SOC registers that can be pushed
- 
-    type SOC_Push_Regs_Type is array (1 .. 4) of Rcode;
-    --  Used to hold the register codes of pushed SOC registers
- 
-    type Prolog_Type is record
- 
-       Frame_Reg : Boolean;
-       --  This is set to True if %ebp is used as a frame register, and
-       --  False otherwise (in the False case, %ebp may be saved in the
-       --  usual manner along with the other SOC registers).
- 
-       Frame_Length : Uns32;
-       --  Amount by which ESP is decremented on entry, includes the effects
-       --  of push's of save over call registers as indicated above, e.g. if
-       --  the prolog of a routine is:
-       --
-       --    pushl %ebp
-       --    movl %esp,%ebp
-       --    subl $424,%esp
-       --    pushl %edi
-       --    pushl %esi
-       --    pushl %ebx
-       --
-       --  Then the value of Frame_Length would be 436 (424 + 3 * 4). A
-       --  precise definition is that it is:
-       --
-       --    %esp on entry   minus   %esp after last SOC push
-       --
-       --  That definition applies both in the frame pointer present and
-       --  the frame pointer absent cases.
- 
-       Num_SOC_Push : Integer range 0 .. SOC_Max;
-       --  Number of save over call registers actually saved by pushl
-       --  instructions (other than the initial pushl to save the frame
-       --  pointer if a frame pointer is in use).
- 
-       SOC_Push_Regs : SOC_Push_Regs_Type;
-       --  The First Num_SOC_Push entries of this array are used to contain
-       --  the codes for the SOC registers, in the order in which they were
-       --  pushed. Note that this array excludes %ebp if it is used as a frame
-       --  register, since although %ebp is still considered an SOC register
-       --  in this case, it is saved and restored by a separate mechanism.
-       --  Also we will never see %esp represented in this list. Again, it is
-       --  true that %esp is saved over call, but it is restored by a separate
-       --  mechanism.
- 
-    end record;
- 
-    procedure Analyze_Prolog (A : Address; Prolog : out Prolog_Type);
-    --  Given the address of the start of the prolog for a procedure,
-    --  analyze the instructions of the prolog, and set Prolog to contain
-    --  the information obtained from this analysis.
- 
-    ----------------------------------
-    -- Machine_State_Representation --
-    ----------------------------------
- 
-    --  The type Machine_State is defined in the body of Ada.Exceptions as
-    --  a Storage_Array of length 1 .. Machine_State_Length. But really it
-    --  has structure as defined here. We use the structureless declaration
-    --  in Ada.Exceptions to avoid this unit from being implementation
-    --  dependent. The actual definition of Machine_State is as follows:
- 
-    type SOC_Regs_Type is array (SOC) of Uns32;
- 
-    type MState is record
-       eip : Uns32;
-       --  The instruction pointer location (which is the return point
-       --  value from the next level down in all cases).
- 
-       Regs : SOC_Regs_Type;
-       --  Values of the save over call registers
-    end record;
- 
-    for MState use record
-       eip  at 0 range 0 .. 31;
-       Regs at 4 range 0 .. 5 * 32 - 1;
-    end record;
-    --  Note: the routines Enter_Handler, and Set_Machine_State reference
-    --  the fields in this structure non-symbolically.
- 
-    type MState_Ptr is access all MState;
- 
-    function To_MState_Ptr is
-      new Unchecked_Conversion (Machine_State, MState_Ptr);
- 
-    ----------------------------
-    -- Allocate_Machine_State --
-    ----------------------------
- 
-    function Allocate_Machine_State return Machine_State is
-       use System.Storage_Elements;
- 
-    begin
-       return Machine_State
-         (Memory.Alloc (MState'Max_Size_In_Storage_Elements));
-    end Allocate_Machine_State;
- 
-    --------------------
-    -- Analyze_Prolog --
-    --------------------
- 
-    procedure Analyze_Prolog (A : Address; Prolog : out Prolog_Type) is
-       Ptr : Address;
-       Ppl : Ins_pushl_Ptr;
-       Pas : Ins_addl_subl_byte_Ptr;
- 
-       function To_Ins_pushl_Ptr is
-         new Unchecked_Conversion (Address, Ins_pushl_Ptr);
- 
-       function To_Ins_addl_subl_byte_Ptr is
-         new Unchecked_Conversion (Address, Ins_addl_subl_byte_Ptr);
- 
-       function To_Ins_addl_subl_word_Ptr is
-         new Unchecked_Conversion (Address, Ins_addl_subl_word_Ptr);
- 
-    begin
-       Ptr := A;
-       Prolog.Frame_Length := 0;
- 
-       if Ptr = Null_Address then
-          Prolog.Num_SOC_Push := 0;
-          Prolog.Frame_Reg := True;
-          return;
-       end if;
- 
-       if To_Ins_pushl_Ptr (Ptr).all = Ins_pushl_ebp then
-          Ptr := Ptr + 1 + Ins_movl_length;
-          Prolog.Frame_Reg := True;
-       else
-          Prolog.Frame_Reg := False;
-       end if;
- 
-       Pas := To_Ins_addl_subl_byte_Ptr (Ptr);
- 
-       if Pas.Op = Op_Immed
-         and then Pas.Op2 = Op2_subl_Immed
-         and then Pas.Reg = esp
-       then
-          if Pas.w = Word then
-             Prolog.Frame_Length := Prolog.Frame_Length +
-                                      To_Ins_addl_subl_word_Ptr (Ptr).Imm32;
-             Ptr := Ptr + 6;
- 
-          else
-             Prolog.Frame_Length := Prolog.Frame_Length + Uns32 (Pas.Imm8);
-             Ptr := Ptr + 3;
- 
-             --  Note: we ignore sign extension, since a sign extended
-             --  value that was negative would imply a ludicrous frame size.
-          end if;
-       end if;
- 
-       --  Now scan push instructions for SOC registers
- 
-       Prolog.Num_SOC_Push := 0;
- 
-       loop
-          Ppl := To_Ins_pushl_Ptr (Ptr);
- 
-          if Ppl.Op = Op_pushl and then Ppl.Reg in SOC then
-             Prolog.Num_SOC_Push := Prolog.Num_SOC_Push + 1;
-             Prolog.SOC_Push_Regs (Prolog.Num_SOC_Push) := Ppl.Reg;
-             Prolog.Frame_Length := Prolog.Frame_Length + 4;
-             Ptr := Ptr + 1;
- 
-          else
-             exit;
-          end if;
-       end loop;
- 
-    end Analyze_Prolog;
- 
-    -------------------
-    -- Enter_Handler --
-    -------------------
- 
-    procedure Enter_Handler (M : Machine_State; Handler : Handler_Loc) is
-    begin
-       Asm ("mov %0,%%edx", Inputs => Machine_State'Asm_Input ("r", M));
-       Asm ("mov %0,%%eax", Inputs => Handler_Loc'Asm_Input ("r", Handler));
- 
-       Asm ("mov 4(%%edx),%%ebx");    -- M.Regs (ebx)
-       Asm ("mov 12(%%edx),%%ebp");   -- M.Regs (ebp)
-       Asm ("mov 16(%%edx),%%esi");   -- M.Regs (esi)
-       Asm ("mov 20(%%edx),%%edi");   -- M.Regs (edi)
-       Asm ("mov 8(%%edx),%%esp");    -- M.Regs (esp)
-       Asm ("jmp %*%%eax");
-    end Enter_Handler;
- 
-    ----------------
-    -- Fetch_Code --
-    ----------------
- 
-    function Fetch_Code (Loc : Code_Loc) return Code_Loc is
-    begin
-       return Loc;
-    end Fetch_Code;
- 
-    ------------------------
-    -- Free_Machine_State --
-    ------------------------
- 
-    procedure Free_Machine_State (M : in out Machine_State) is
-    begin
-       Memory.Free (Address (M));
-       M := Machine_State (Null_Address);
-    end Free_Machine_State;
- 
-    ------------------
-    -- Get_Code_Loc --
-    ------------------
- 
-    function Get_Code_Loc (M : Machine_State) return Code_Loc is
- 
-       Asm_Call_Size : constant := 2;
-       --  Minimum size for a call instruction under ix86. Using the minimum
-       --  size is safe here as the call point computed from the return point
-       --  will always be inside the call instruction.
- 
-       MS : constant MState_Ptr := To_MState_Ptr (M);
- 
-    begin
-       if MS.eip = 0 then
-          return To_Address (MS.eip);
-       else
-          --  When doing a call the return address is pushed to the stack.
-          --  We want to return the call point address, so we substract
-          --  Asm_Call_Size from the return address. This value is set
-          --  to 5 as an asm call takes 5 bytes on x86 architectures.
- 
-          return To_Address (MS.eip - Asm_Call_Size);
-       end if;
-    end Get_Code_Loc;
- 
-    --------------------------
-    -- Machine_State_Length --
-    --------------------------
- 
-    function Machine_State_Length
-      return System.Storage_Elements.Storage_Offset
-    is
-    begin
-       return MState'Max_Size_In_Storage_Elements;
-    end Machine_State_Length;
- 
-    ---------------
-    -- Pop_Frame --
-    ---------------
- 
-    procedure Pop_Frame
-      (M    : Machine_State;
-       Info : Subprogram_Info_Type)
-    is
-       MS  : constant MState_Ptr := To_MState_Ptr (M);
-       PL  : Prolog_Type;
- 
-       SOC_Ptr : Uns32;
-       --  Pointer to stack location after last SOC push
- 
-       Rtn_Ptr : Uns32;
-       --  Pointer to stack location containing return address
- 
-    begin
-       Analyze_Prolog (Info, PL);
- 
-       --  Case of frame register, use EBP, safer than ESP
- 
-       if PL.Frame_Reg then
-          SOC_Ptr := MS.Regs (ebp) - PL.Frame_Length;
-          Rtn_Ptr := MS.Regs (ebp) + 4;
-          MS.Regs (ebp) := To_Uns32_Ptr (MS.Regs (ebp)).all;
- 
-       --  No frame pointer, use ESP, and hope we have it exactly right!
- 
-       else
-          SOC_Ptr := MS.Regs (esp);
-          Rtn_Ptr := SOC_Ptr + PL.Frame_Length;
-       end if;
- 
-       --  Get saved values of SOC registers
- 
-       for J in reverse 1 .. PL.Num_SOC_Push loop
-          MS.Regs (PL.SOC_Push_Regs (J)) := To_Uns32_Ptr (SOC_Ptr).all;
-          SOC_Ptr := SOC_Ptr + 4;
-       end loop;
- 
-       MS.eip := To_Uns32_Ptr (Rtn_Ptr).all;
-       MS.Regs (esp) := Rtn_Ptr + 4;
-    end Pop_Frame;
- 
-    -----------------------
-    -- Set_Machine_State --
-    -----------------------
- 
-    procedure Set_Machine_State (M : Machine_State) is
-       N : constant Asm_Output_Operand := No_Output_Operands;
- 
-    begin
-       Asm ("mov %0,%%edx", N, Machine_State'Asm_Input ("r", M));
- 
-       --  At this stage, we have the following situation (note that we
-       --  are assuming that the -fomit-frame-pointer switch has not been
-       --  used in compiling this procedure.
- 
-       --     (value of M)
-       --     return point
-       --     old ebp          <------ current ebp/esp value
- 
-       --  The values of registers ebx/esi/edi are unchanged from entry
-       --  so they have the values we want, and %edx points to the parameter
-       --  value M, so we can store these values directly.
- 
-       Asm ("mov %%ebx,4(%%edx)");    -- M.Regs (ebx)
-       Asm ("mov %%esi,16(%%edx)");   -- M.Regs (esi)
-       Asm ("mov %%edi,20(%%edx)");   -- M.Regs (edi)
- 
-       --  The desired value of ebp is the old value
- 
-       Asm ("mov 0(%%ebp),%%eax");
-       Asm ("mov %%eax,12(%%edx)");   -- M.Regs (ebp)
- 
-       --  The return point is the desired eip value
- 
-       Asm ("mov 4(%%ebp),%%eax");
-       Asm ("mov %%eax,(%%edx)");   -- M.eip
- 
-       --  Finally, the desired %esp value is the value at the point of
-       --  call to this routine *before* pushing the parameter value.
- 
-       Asm ("lea 12(%%ebp),%%eax");
-       Asm ("mov %%eax,8(%%edx)");   -- M.Regs (esp)
-    end Set_Machine_State;
- 
-    ------------------------------
-    -- Set_Signal_Machine_State --
-    ------------------------------
- 
-    procedure Set_Signal_Machine_State
-      (M       : Machine_State;
-       Context : System.Address)
-    is
-       pragma Warnings (Off, M);
-       pragma Warnings (Off, Context);
- 
-    begin
-       null;
-    end Set_Signal_Machine_State;
- 
- end System.Machine_State_Operations;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5oosinte.adb gcc-4.0.0/gcc/ada/5oosinte.adb
*** gcc-3.4.3/gcc/ada/5oosinte.adb	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5oosinte.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,120 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
- --                                                                          --
- --                   S Y S T E M . O S _ I N T E R F A C E                  --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --             Copyright (C) 1991-1994, Florida State University            --
- --             Copyright (C) 1995-2003, Ada Core Technologies               --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the OS/2 version of this package
- 
- pragma Polling (Off);
- --  Turn off polling, we do not want ATC polling to take place during
- --  tasking operations. It causes infinite loops and other problems.
- 
- with Interfaces.OS2Lib.Errors;
- with Interfaces.OS2Lib.Synchronization;
- 
- package body System.OS_Interface is
- 
-    use Interfaces;
-    use Interfaces.OS2Lib;
-    use Interfaces.OS2Lib.Synchronization;
-    use Interfaces.OS2Lib.Errors;
- 
-    -----------
-    -- Yield --
-    -----------
- 
-    --  Give up the remainder of the time-slice and yield the processor
-    --  to other threads of equal priority. Yield will return immediately
-    --  without giving up the current time-slice when the only threads
-    --  that are ready have a lower priority.
- 
-    --  ???  Just giving up the current time-slice seems not to be enough
-    --  to get the thread to the end of the ready queue if OS/2 does use
-    --  a queue at all. As a partial work-around, we give up two time-slices.
- 
-    --  This is the best we can do now, and at least is sufficient for passing
-    --  the ACVC 2.0.1 Annex D tests.
- 
-    procedure Yield is
-    begin
-       Delay_For (0);
-       Delay_For (0);
-    end Yield;
- 
-    ---------------
-    -- Delay_For --
-    ---------------
- 
-    procedure Delay_For (Period : in Duration_In_Millisec) is
-       Result : APIRET;
- 
-    begin
-       pragma Assert (Period >= 0, "GNULLI---Delay_For: negative argument");
- 
-       --  ??? DosSleep is not the appropriate function for a delay in real
-       --  time. It only gives up some number of scheduled time-slices.
-       --  Use a timer instead or block for some semaphore with a time-out.
-       Result := DosSleep (ULONG (Period));
- 
-       if Result = ERROR_TS_WAKEUP then
- 
-          --  Do appropriate processing for interrupted sleep
-          --  Can we raise an exception here?
- 
-          null;
-       end if;
- 
-       pragma Assert (Result = NO_ERROR, "GNULLI---Error in Delay_For");
-    end Delay_For;
- 
-    -----------
-    -- Clock --
-    -----------
- 
-    function Clock return Duration is
- 
-       --  Implement conversion from tick count to Duration
-       --  using fixed point arithmetic. The frequency of
-       --  the Intel 8254 timer chip is 18.2 * 2**16 Hz.
- 
-       Tick_Duration : constant := 1.0 / (18.2 * 2**16);
-       Tick_Count    : aliased QWORD;
- 
-    begin
-       --  Read nr of clock ticks since boot time
- 
-       Must_Not_Fail (DosTmrQueryTime (Tick_Count'Access));
- 
-       return Tick_Count * Tick_Duration;
-    end Clock;
- 
- end System.OS_Interface;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5oosinte.ads gcc-4.0.0/gcc/ada/5oosinte.ads
*** gcc-3.4.3/gcc/ada/5oosinte.ads	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5oosinte.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,126 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
- --                                                                          --
- --                   S Y S T E M . O S _ I N T E R F A C E                  --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --             Copyright (C) 1991-1994, Florida State University            --
- --             Copyright (C) 1995-2003, Ada Core Technologies               --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the OS/2 version of this package
- 
- --  This package encapsulates all direct interfaces to OS services
- --  that are needed by children of System.
- 
- --  PLEASE DO NOT add any with-clauses to this package
- --  or remove the pragma Preelaborate.
- 
- --  It is designed to be a bottom-level (leaf) package.
- 
- with Interfaces.C;
- package System.OS_Interface is
-    pragma Preelaborate;
- 
-    package C renames Interfaces.C;
- 
-    subtype int            is C.int;
-    subtype unsigned_long  is C.unsigned_long;
- 
-    type Duration_In_Millisec is new C.long;
-    --  New type to prevent confusing time functions in this package
-    --  with time functions returning seconds or other units.
- 
-    type Thread_Id is new unsigned_long;
- 
-    -----------
-    -- Errno --
-    -----------
- 
-    function errno return int;
-    pragma Import (C, errno, "__get_errno");
- 
-    EAGAIN   : constant := 5;
-    EINTR    : constant := 13;
-    EINVAL   : constant := 14;
-    ENOMEM   : constant := 25;
- 
-    -------------
-    -- Signals --
-    -------------
- 
-    Max_Interrupt : constant := 15;
-    type Signal is new int range 0 .. Max_Interrupt;
- 
-    --  Signals for OS/2, only SIGTERM used currently. The values are
-    --  fake, since OS/2 uses 32 bit exception numbers that cannot be
-    --  used to index arrays etc. The GNULLI maps these Unix-like signals
-    --  to OS/2 exception numbers.
- 
-    --  SIGTERM is used for the abort interrupt.
- 
-    SIGHUP     : constant := 1;  --  hangup
-    SIGINT     : constant := 2;  --  interrupt (rubout)
-    SIGQUIT    : constant := 3;  --  quit (ASCD FS)
-    SIGILL     : constant := 4;  --  illegal instruction (not reset)
-    SIGTRAP    : constant := 5;  --  trace trap (not reset)
-    SIGIOT     : constant := 6;  --  IOT instruction
-    SIGEMT     : constant := 0;  --  EMT instruction
-    SIGFPE     : constant := 8;  --  floating point exception
-    SIGKILL    : constant := 9;  --  kill (cannot be caught or ignored)
-    SIGBUS     : constant := 10; --  bus error
-    SIGSEGV    : constant := 11; --  segmentation violation
-    SIGSYS     : constant := 12; --  bad argument to system call
-    SIGPIPE    : constant := 13; --  write on a pipe with no one to read it
-    SIGALRM    : constant := 14; --  alarm clock
-    SIGTERM    : constant := 15; --  software termination signal from kill
- 
-    subtype sigset_t is unsigned_long;
- 
-    ----------
-    -- Time --
-    ----------
- 
-    function Clock return Duration;
-    pragma Inline (Clock);
-    --  Clock measuring time since the epoch, which is the boot-time.
-    --  The clock resolution is approximately 838 ns.
- 
-    procedure Delay_For (Period : in Duration_In_Millisec);
-    pragma Inline (Delay_For);
-    --  Changed Sleep to Delay_For, for consistency with System.Time_Operations
- 
-    ----------------
-    -- Scheduling --
-    ----------------
- 
-    --  Put the calling task at the end of the ready queue for its priority
- 
-    procedure Yield;
-    pragma Inline (Yield);
- 
- end System.OS_Interface;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5oosprim.adb gcc-4.0.0/gcc/ada/5oosprim.adb
*** gcc-3.4.3/gcc/ada/5oosprim.adb	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5oosprim.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,172 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                  S Y S T E M . O S _ P R I M I T I V E S                 --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --         Copyright (C) 1998-2001 Free Software Foundation, Inc.           --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the OS/2 version of this package
- 
- with Interfaces.C;                      use Interfaces.C;
- with Interfaces.OS2Lib;                 use Interfaces.OS2Lib;
- with Interfaces.OS2Lib.Synchronization; use Interfaces.OS2Lib.Synchronization;
- 
- package body System.OS_Primitives is
- 
-    ----------------
-    -- Local Data --
-    ----------------
- 
-    Epoch_Offset    : Duration;       --  See Set_Epoch_Offset
-    Max_Tick_Count  : QWORD := 0.0;
-    --  This is needed to compensate for small glitches in the
-    --  hardware clock or the way it is read by the OS
- 
-    -----------------------
-    -- Local Subprograms --
-    -----------------------
- 
-    procedure Set_Epoch_Offset;
-    --  Initializes the Epoch_1970_Offset to the offset of the System_Clock
-    --  relative to the Unix epoch (Jan 1, 1970), such that
-    --     Clock = System_Clock + Epoch_1970_Offset
- 
-    function System_Clock return Duration;
-    pragma Inline (System_Clock);
-    --  Function returning value of system clock with system-dependent timebase.
-    --  For OS/2 the system clock returns the elapsed time since system boot.
-    --  The clock resolution is approximately 838 ns.
- 
-    ------------------
-    -- System_Clock --
-    ------------------
- 
-    function System_Clock return Duration is
- 
-       --  Implement conversion from tick count to Duration
-       --  using fixed point arithmetic. The frequency of
-       --  the Intel 8254 timer chip is 18.2 * 2**16 Hz.
- 
-       Tick_Duration : constant := 1.0 / (18.2 * 2**16);
-       Tick_Count    : aliased QWORD;
- 
-    begin
-       Must_Not_Fail (DosTmrQueryTime (Tick_Count'Access));
-       --  Read nr of clock ticks since boot time
- 
-       Max_Tick_Count := QWORD'Max (Tick_Count, Max_Tick_Count);
- 
-       return Max_Tick_Count * Tick_Duration;
-    end System_Clock;
- 
-    -----------
-    -- Clock --
-    -----------
- 
-    function Clock return Duration is
-    begin
-       return System_Clock + Epoch_Offset;
-    end Clock;
- 
-    ---------------------
-    -- Monotonic_Clock --
-    ---------------------
- 
-    function Monotonic_Clock return Duration renames Clock;
- 
-    ----------------------
-    -- Set_Epoch_Offset --
-    ----------------------
- 
-    procedure Set_Epoch_Offset is
- 
-       --  Interface to Unix C style gettimeofday
- 
-       type timeval is record
-          tv_sec  : long;
-          tv_usec : long;
-       end record;
- 
-       procedure gettimeofday
-         (time : access timeval;
-          zone : System.Address := System.Address'Null_Parameter);
-       pragma Import (C, gettimeofday);
- 
-       Time_Of_Day       : aliased timeval;
-       Micro_To_Nano     : constant := 1.0E3;
-       Sec_To_Nano       : constant := 1.0E9;
-       Nanos_Since_Epoch : QWORD;
- 
-    begin
-       gettimeofday (Time_Of_Day'Access);
-       Nanos_Since_Epoch := QWORD (Time_Of_Day.tv_sec) * Sec_To_Nano
-         + QWORD (Time_Of_Day.tv_usec) * Micro_To_Nano;
- 
-       Epoch_Offset :=
-          Duration'(Nanos_Since_Epoch / Sec_To_Nano) - System_Clock;
- 
-    end Set_Epoch_Offset;
- 
-    -----------------
-    -- Timed_Delay --
-    -----------------
- 
-    procedure Timed_Delay
-      (Time : Duration;
-       Mode : Integer)
-    is
-       Rel_Time   : Duration;
-       Abs_Time   : Duration;
-       Check_Time : Duration := Clock;
- 
-    begin
-       if Mode = Relative then
-          Rel_Time := Time;
-          Abs_Time := Time + Check_Time;
-       else
-          Rel_Time := Time - Check_Time;
-          Abs_Time := Time;
-       end if;
- 
-       if Rel_Time > 0.0 then
-          loop
-             Must_Not_Fail (DosSleep (ULONG (Rel_Time * 1000.0)));
- 
-             Check_Time := Clock;
- 
-             exit when Abs_Time <= Check_Time;
- 
-             Rel_Time := Abs_Time - Check_Time;
-          end loop;
-       end if;
-    end Timed_Delay;
- 
- begin
-    Set_Epoch_Offset;
- end System.OS_Primitives;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5oparame.adb gcc-4.0.0/gcc/ada/5oparame.adb
*** gcc-3.4.3/gcc/ada/5oparame.adb	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5oparame.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,83 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                    S Y S T E M . P A R A M E T E R S                     --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --          Copyright (C) 1997-2002 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the OS/2 specific version - default stacksizes need to be large
- 
- package body System.Parameters is
- 
-    ------------------------
-    -- Default_Stack_Size --
-    ------------------------
- 
-    function Default_Stack_Size return Size_Type is
-    begin
-       --  The default stack size for extra tasks is based on the
-       --  default stack size for the main task (8 MB) and for the heap
-       --  (32 MB).
- 
-       --  In OS/2 it doesn't hurt to define large stacks, unless
-       --  the system is configured to commit all memory reservations.
-       --  This is not a default configuration however.
- 
-       return 1024 * 1024;
-    end Default_Stack_Size;
- 
-    ------------------------
-    -- Minimum_Stack_Size --
-    ------------------------
- 
-    function Minimum_Stack_Size return Size_Type is
-    begin
-       --  System functions may need 8 kB of stack, so 12 kB seems a
-       --  good minimum.
-       return 12 * 1024;
-    end Minimum_Stack_Size;
- 
-    -------------------------
-    -- Adjust_Storage_Size --
-    -------------------------
- 
-    function Adjust_Storage_Size (Size : Size_Type) return Size_Type is
-    begin
-       if Size = Unspecified_Size then
-          return Default_Stack_Size;
- 
-       elsif Size < Minimum_Stack_Size then
-          return Minimum_Stack_Size;
- 
-       else
-          return Size;
-       end if;
-    end Adjust_Storage_Size;
- 
- end System.Parameters;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5osystem.ads gcc-4.0.0/gcc/ada/5osystem.ads
*** gcc-3.4.3/gcc/ada/5osystem.ads	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5osystem.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,150 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                        GNAT RUN-TIME COMPONENTS                          --
- --                                                                          --
- --                               S Y S T E M                                --
- --                                                                          --
- --                                 S p e c                                  --
- --                             (OS/2 Version)                               --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the  contents of the part following the private keyword. --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- package System is
- pragma Pure (System);
- --  Note that we take advantage of the implementation permission to
- --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
- 
-    type Name is (SYSTEM_NAME_GNAT);
-    System_Name : constant Name := SYSTEM_NAME_GNAT;
- 
-    --  System-Dependent Named Numbers
- 
-    Min_Int               : constant := Long_Long_Integer'First;
-    Max_Int               : constant := Long_Long_Integer'Last;
- 
-    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
-    Max_Nonbinary_Modulus : constant := Integer'Last;
- 
-    Max_Base_Digits       : constant := Long_Long_Float'Digits;
-    Max_Digits            : constant := Long_Long_Float'Digits;
- 
-    Max_Mantissa          : constant := 63;
-    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
- 
-    Tick                  : constant := 0.01;
- 
-    --  Storage-related Declarations
- 
-    type Address is private;
-    Null_Address : constant Address;
- 
-    Storage_Unit : constant := 8;
-    Word_Size    : constant := 32;
-    Memory_Size  : constant := 2 ** 32;
- 
-    --  Address comparison
- 
-    function "<"  (Left, Right : Address) return Boolean;
-    function "<=" (Left, Right : Address) return Boolean;
-    function ">"  (Left, Right : Address) return Boolean;
-    function ">=" (Left, Right : Address) return Boolean;
-    function "="  (Left, Right : Address) return Boolean;
- 
-    pragma Import (Intrinsic, "<");
-    pragma Import (Intrinsic, "<=");
-    pragma Import (Intrinsic, ">");
-    pragma Import (Intrinsic, ">=");
-    pragma Import (Intrinsic, "=");
- 
-    --  Other System-Dependent Declarations
- 
-    type Bit_Order is (High_Order_First, Low_Order_First);
-    Default_Bit_Order : constant Bit_Order := Low_Order_First;
- 
-    --  Priority-related Declarations (RM D.1)
- 
-    Max_Priority           : constant Positive := 30;
-    Max_Interrupt_Priority : constant Positive := 31;
- 
-    subtype Any_Priority       is Integer      range  0 .. 31;
-    subtype Priority           is Any_Priority range  0 .. 30;
-    subtype Interrupt_Priority is Any_Priority range 31 .. 31;
- 
-    Default_Priority : constant Priority := 15;
- 
- private
- 
-    type Address is mod Memory_Size;
-    Null_Address : constant Address := 0;
- 
-    --------------------------------------
-    -- System Implementation Parameters --
-    --------------------------------------
- 
-    --  These parameters provide information about the target that is used
-    --  by the compiler. They are in the private part of System, where they
-    --  can be accessed using the special circuitry in the Targparm unit
-    --  whose source should be consulted for more detailed descriptions
-    --  of the individual switch values.
- 
-    AAMP                      : constant Boolean := False;
-    Backend_Divide_Checks     : constant Boolean := False;
-    Backend_Overflow_Checks   : constant Boolean := False;
-    Command_Line_Args         : constant Boolean := True;
-    Configurable_Run_Time     : constant Boolean := False;
-    Denorm                    : constant Boolean := True;
-    Duration_32_Bits          : constant Boolean := False;
-    Exit_Status_Supported     : constant Boolean := True;
-    Fractional_Fixed_Ops      : constant Boolean := False;
-    Frontend_Layout           : constant Boolean := False;
-    Functions_Return_By_DSP   : constant Boolean := False;
-    Machine_Overflows         : constant Boolean := False;
-    Machine_Rounds            : constant Boolean := True;
-    OpenVMS                   : constant Boolean := False;
-    Signed_Zeros              : constant Boolean := True;
-    Stack_Check_Default       : constant Boolean := False;
-    Stack_Check_Probes        : constant Boolean := False;
-    Support_64_Bit_Divides    : constant Boolean := True;
-    Support_Aggregates        : constant Boolean := True;
-    Support_Composite_Assign  : constant Boolean := True;
-    Support_Composite_Compare : constant Boolean := True;
-    Support_Long_Shifts       : constant Boolean := True;
-    Suppress_Standard_Library : constant Boolean := False;
-    Use_Ada_Main_Program_Name : constant Boolean := False;
-    ZCX_By_Default            : constant Boolean := False;
-    GCC_ZCX_Support           : constant Boolean := False;
-    Front_End_ZCX_Support     : constant Boolean := True;
- 
-    --  Obsolete entries, to be removed eventually (bootstrap issues!)
- 
-    High_Integrity_Mode       : constant Boolean := False;
-    Long_Shifts_Inlined       : constant Boolean := True;
- 
- end System;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5otaprop.adb gcc-4.0.0/gcc/ada/5otaprop.adb
*** gcc-3.4.3/gcc/ada/5otaprop.adb	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5otaprop.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,1157 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
- --                                                                          --
- --    S Y S T E M . T A S K _ P R I M I T I V E S . O P E R A T I O N S     --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --         Copyright (C) 1992-2003, Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is an OS/2 version of this package
- 
- --  This package contains all the GNULL primitives that interface directly
- --  with the underlying OS.
- 
- pragma Polling (Off);
- --  Turn off polling, we do not want ATC polling to take place during
- --  tasking operations. It causes infinite loops and other problems.
- 
- with System.Tasking.Debug;
- --  used for Known_Tasks
- 
- with Interfaces.C;
- --  used for size_t
- 
- with Interfaces.C.Strings;
- --  used for Null_Ptr
- 
- with Interfaces.OS2Lib.Errors;
- with Interfaces.OS2Lib.Threads;
- with Interfaces.OS2Lib.Synchronization;
- 
- with System.Parameters;
- --  used for Size_Type
- 
- with System.Tasking;
- --  used for Task_ID
- 
- with System.Parameters;
- --  used for Size_Type
- 
- with System.Soft_Links;
- --  used for Defer/Undefer_Abort
- 
- --  Note that we do not use System.Tasking.Initialization directly since
- --  this is a higher level package that we shouldn't depend on. For example
- --  when using the restricted run time, it is replaced by
- --  System.Tasking.Restricted.Initialization
- 
- with System.OS_Primitives;
- --  used for Delay_Modes
- --           Clock
- 
- with Unchecked_Conversion;
- with Unchecked_Deallocation;
- 
- package body System.Task_Primitives.Operations is
- 
-    package IC  renames Interfaces.C;
-    package ICS renames Interfaces.C.Strings;
-    package OSP renames System.OS_Primitives;
-    package SSL renames System.Soft_Links;
- 
-    use Interfaces.OS2Lib;
-    use Interfaces.OS2Lib.Errors;
-    use Interfaces.OS2Lib.Threads;
-    use Interfaces.OS2Lib.Synchronization;
-    use System.Parameters;
-    use System.Tasking.Debug;
-    use System.Tasking;
-    use System.OS_Interface;
-    use Interfaces.C;
-    use System.OS_Primitives;
- 
-    ---------------------
-    -- Local Constants --
-    ---------------------
- 
-    Max_Locks_Per_Task   : constant := 100;
-    Suppress_Owner_Check : constant Boolean := False;
- 
-    -----------------
-    -- Local Types --
-    -----------------
- 
-    subtype Lock_Range is Integer range 0 .. Max_Locks_Per_Task;
- 
-    -----------------
-    -- Local Data  --
-    -----------------
- 
-    --  The OS/2 DosAllocThreadLocalMemory API is used to allocate our TCB_Ptr.
- 
-    --  This API reserves a small range of virtual addresses that is backed
-    --  by different physical memory for each running thread. In this case we
-    --  create a pointer at a fixed address that points to the TCB_Ptr for the
-    --  running thread. So all threads will be able to query and update their
-    --  own TCB_Ptr without destroying the TCB_Ptr of other threads.
- 
-    type Thread_Local_Data is record
-       Self_ID           : Task_ID;    --  ID of the current thread
-       Lock_Prio_Level   : Lock_Range; --  Nr of priority changes due to locks
- 
-       --  ... room for expansion here, if we decide to make access to
-       --  jump-buffer and exception stack more efficient in future
-    end record;
- 
-    type Access_Thread_Local_Data is access all Thread_Local_Data;
- 
-    --  Pointer to Thread Local Data
-    Thread_Local_Data_Ptr : aliased Access_Thread_Local_Data;
- 
-    type PPTLD is access all Access_Thread_Local_Data;
- 
-    Single_RTS_Lock : aliased RTS_Lock;
-    --  This is a lock to allow only one thread of control in the RTS at
-    --  a time; it is used to execute in mutual exclusion from all other tasks.
-    --  Used mainly in Single_Lock mode, but also to protect All_Tasks_List
- 
-    Environment_Task_ID : Task_ID;
-    --  A variable to hold Task_ID for the environment task.
- 
-    -----------------------
-    -- Local Subprograms --
-    -----------------------
- 
-    function To_PPVOID is new Unchecked_Conversion (PPTLD, PPVOID);
-    function To_Address is new Unchecked_Conversion (Task_ID, System.Address);
-    function To_PFNTHREAD is
-      new Unchecked_Conversion (System.Address, PFNTHREAD);
- 
-    function To_MS (D : Duration) return ULONG;
- 
-    procedure Set_Temporary_Priority
-      (T            : in Task_ID;
-       New_Priority : in System.Any_Priority);
- 
-    -----------
-    -- To_MS --
-    -----------
- 
-    function To_MS (D : Duration) return ULONG is
-    begin
-       return ULONG (D * 1_000);
-    end To_MS;
- 
-    -----------
-    -- Clock --
-    -----------
- 
-    function Monotonic_Clock return Duration renames OSP.Monotonic_Clock;
- 
-    -------------------
-    -- RT_Resolution --
-    -------------------
- 
-    function RT_Resolution return Duration is
-    begin
-       return 10#1.0#E-6;
-    end RT_Resolution;
- 
-    -------------------
-    -- Abort_Handler --
-    -------------------
- 
-    --  OS/2 only has limited support for asynchronous signals.
-    --  It seems not to be possible to jump out of an exception
-    --  handler or to change the execution context of the thread.
-    --  So asynchonous transfer of control is not supported.
- 
-    -----------------
-    -- Stack_Guard --
-    -----------------
- 
-    --  The underlying thread system sets a guard page at the
-    --  bottom of a thread stack, so nothing is needed.
-    --  ??? Check the comment above
- 
-    procedure Stack_Guard (T : ST.Task_ID; On : Boolean) is
-       pragma Unreferenced (T);
-       pragma Unreferenced (On);
- 
-    begin
-       null;
-    end Stack_Guard;
- 
-    --------------------
-    -- Get_Thread_Id  --
-    --------------------
- 
-    function Get_Thread_Id (T : ST.Task_ID) return OSI.Thread_Id is
-    begin
-       return OSI.Thread_Id (T.Common.LL.Thread);
-    end Get_Thread_Id;
- 
-    ----------
-    -- Self --
-    ----------
- 
-    function Self return Task_ID is
-       Self_ID : Task_ID renames Thread_Local_Data_Ptr.Self_ID;
-    begin
-       --  Check that the thread local data has been initialized.
- 
-       pragma Assert
-         ((Thread_Local_Data_Ptr /= null
-           and then Thread_Local_Data_Ptr.Self_ID /= null));
- 
-       return Self_ID;
-    end Self;
- 
-    ---------------------
-    -- Initialize_Lock --
-    ---------------------
- 
-    procedure Initialize_Lock
-      (Prio : System.Any_Priority;
-       L    : access Lock)
-    is
-    begin
-       if DosCreateMutexSem
-         (ICS.Null_Ptr, L.Mutex'Unchecked_Access, 0, False32) /= NO_ERROR
-       then
-          raise Storage_Error;
-       end if;
- 
-       pragma Assert (L.Mutex /= 0, "Error creating Mutex");
-       L.Priority := Prio;
-       L.Owner_ID := Null_Address;
-    end Initialize_Lock;
- 
-    procedure Initialize_Lock (L : access RTS_Lock; Level : Lock_Level) is
-       pragma Unreferenced (Level);
- 
-    begin
-       if DosCreateMutexSem
-         (ICS.Null_Ptr, L.Mutex'Unchecked_Access, 0, False32) /= NO_ERROR
-       then
-          raise Storage_Error;
-       end if;
- 
-       pragma Assert (L.Mutex /= 0, "Error creating Mutex");
- 
-       L.Priority := System.Any_Priority'Last;
-       L.Owner_ID := Null_Address;
-    end Initialize_Lock;
- 
-    -------------------
-    -- Finalize_Lock --
-    -------------------
- 
-    procedure Finalize_Lock (L : access Lock) is
-    begin
-       Must_Not_Fail (DosCloseMutexSem (L.Mutex));
-    end Finalize_Lock;
- 
-    procedure Finalize_Lock (L : access RTS_Lock) is
-    begin
-       Must_Not_Fail (DosCloseMutexSem (L.Mutex));
-    end Finalize_Lock;
- 
-    ----------------
-    -- Write_Lock --
-    ----------------
- 
-    procedure Write_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
-       Self_ID      : constant Task_ID := Thread_Local_Data_Ptr.Self_ID;
-       Old_Priority : constant Any_Priority :=
-                        Self_ID.Common.LL.Current_Priority;
- 
-    begin
-       if L.Priority < Old_Priority then
-          Ceiling_Violation := True;
-          return;
-       end if;
- 
-       Ceiling_Violation := False;
- 
-       --  Increase priority before getting the lock
-       --  to prevent priority inversion
- 
-       Thread_Local_Data_Ptr.Lock_Prio_Level :=
-         Thread_Local_Data_Ptr.Lock_Prio_Level + 1;
-       if L.Priority > Old_Priority then
-          Set_Temporary_Priority (Self_ID, L.Priority);
-       end if;
- 
-       --  Request the lock and then update the lock owner data
- 
-       Must_Not_Fail (DosRequestMutexSem (L.Mutex, SEM_INDEFINITE_WAIT));
-       L.Owner_Priority := Old_Priority;
-       L.Owner_ID := Self_ID.all'Address;
-    end Write_Lock;
- 
-    procedure Write_Lock
-      (L           : access RTS_Lock;
-       Global_Lock : Boolean := False)
-    is
-       Self_ID      : Task_ID;
-       Old_Priority : Any_Priority;
- 
-    begin
-       if not Single_Lock or else Global_Lock then
-          Self_ID := Thread_Local_Data_Ptr.Self_ID;
-          Old_Priority := Self_ID.Common.LL.Current_Priority;
- 
-          --  Increase priority before getting the lock
-          --  to prevent priority inversion
- 
-          Thread_Local_Data_Ptr.Lock_Prio_Level :=
-            Thread_Local_Data_Ptr.Lock_Prio_Level + 1;
- 
-          if L.Priority > Old_Priority then
-             Set_Temporary_Priority (Self_ID, L.Priority);
-          end if;
- 
-          --  Request the lock and then update the lock owner data
- 
-          Must_Not_Fail (DosRequestMutexSem (L.Mutex, SEM_INDEFINITE_WAIT));
-          L.Owner_Priority := Old_Priority;
-          L.Owner_ID := Self_ID.all'Address;
-       end if;
-    end Write_Lock;
- 
-    procedure Write_Lock (T : Task_ID) is
-    begin
-       if not Single_Lock then
- 
-          --  Request the lock and then update the lock owner data
- 
-          Must_Not_Fail
-            (DosRequestMutexSem (T.Common.LL.L.Mutex, SEM_INDEFINITE_WAIT));
-          T.Common.LL.L.Owner_ID := Null_Address;
-       end if;
-    end Write_Lock;
- 
-    ---------------
-    -- Read_Lock --
-    ---------------
- 
-    procedure Read_Lock
-      (L : access Lock; Ceiling_Violation : out Boolean) renames Write_Lock;
- 
-    ------------
-    -- Unlock --
-    ------------
- 
-    procedure Unlock (L : access Lock) is
-       Self_ID      : constant Task_ID := Thread_Local_Data_Ptr.Self_ID;
-       Old_Priority : constant Any_Priority := L.Owner_Priority;
- 
-    begin
-       --  Check that this task holds the lock
- 
-       pragma Assert (Suppress_Owner_Check
-         or else L.Owner_ID = Self_ID.all'Address);
- 
-       --  Upate the owner data
- 
-       L.Owner_ID := Null_Address;
- 
-       --  Do the actual unlocking. No more references
-       --  to owner data of L after this point.
- 
-       Must_Not_Fail (DosReleaseMutexSem (L.Mutex));
- 
-       --  Reset priority after unlocking to avoid priority inversion
- 
-       Thread_Local_Data_Ptr.Lock_Prio_Level :=
-         Thread_Local_Data_Ptr.Lock_Prio_Level - 1;
-       if L.Priority /= Old_Priority then
-          Set_Temporary_Priority (Self_ID, Old_Priority);
-       end if;
-    end Unlock;
- 
-    procedure Unlock (L : access RTS_Lock; Global_Lock : Boolean := False) is
-       Self_ID      : Task_ID;
-       Old_Priority : Any_Priority;
- 
-    begin
-       if not Single_Lock or else Global_Lock then
-          Self_ID := Thread_Local_Data_Ptr.Self_ID;
-          Old_Priority := L.Owner_Priority;
-          --  Check that this task holds the lock
- 
-          pragma Assert (Suppress_Owner_Check
-            or else L.Owner_ID = Self_ID.all'Address);
- 
-          --  Upate the owner data
- 
-          L.Owner_ID := Null_Address;
- 
-          --  Do the actual unlocking. No more references
-          --  to owner data of L after this point.
- 
-          Must_Not_Fail (DosReleaseMutexSem (L.Mutex));
- 
-          --  Reset priority after unlocking to avoid priority inversion
- 
-          Thread_Local_Data_Ptr.Lock_Prio_Level :=
-            Thread_Local_Data_Ptr.Lock_Prio_Level - 1;
- 
-          if L.Priority /= Old_Priority then
-             Set_Temporary_Priority (Self_ID, Old_Priority);
-          end if;
-       end if;
-    end Unlock;
- 
-    procedure Unlock (T : Task_ID) is
-    begin
-       if not Single_Lock then
- 
-          --  Check the owner data
- 
-          pragma Assert (Suppress_Owner_Check
-            or else T.Common.LL.L.Owner_ID = Null_Address);
- 
-          --  Do the actual unlocking. No more references
-          --  to owner data of T.Common.LL.L after this point.
- 
-          Must_Not_Fail (DosReleaseMutexSem (T.Common.LL.L.Mutex));
-       end if;
-    end Unlock;
- 
-    -----------
-    -- Sleep --
-    -----------
- 
-    procedure Sleep
-      (Self_ID : Task_ID;
-       Reason  : System.Tasking.Task_States)
-    is
-       pragma Unreferenced (Reason);
- 
-       Count : aliased ULONG; -- Used to store dummy result
- 
-    begin
-       --  Must reset Cond BEFORE L is unlocked.
- 
-       Sem_Must_Not_Fail
-         (DosResetEventSem (Self_ID.Common.LL.CV, Count'Unchecked_Access));
- 
-       if Single_Lock then
-          Unlock_RTS;
-       else
-          Unlock (Self_ID);
-       end if;
- 
-       --  No problem if we are interrupted here.
-       --  If the condition is signaled, DosWaitEventSem will simply not block.
- 
-       Sem_Must_Not_Fail
-         (DosWaitEventSem (Self_ID.Common.LL.CV, SEM_INDEFINITE_WAIT));
- 
-       --  Since L was previously accquired, lock operation should not fail.
- 
-       if Single_Lock then
-          Lock_RTS;
-       else
-          Write_Lock (Self_ID);
-       end if;
-    end Sleep;
- 
-    -----------------
-    -- Timed_Sleep --
-    -----------------
- 
-    --  This is for use within the run-time system, so abort is
-    --  assumed to be already deferred, and the caller should be
-    --  holding its own ATCB lock.
- 
-    --  Pre-assertion: Cond is posted
-    --                 Self is locked.
- 
-    --  Post-assertion: Cond is posted
-    --                  Self is locked.
- 
-    procedure Timed_Sleep
-      (Self_ID  : Task_ID;
-       Time     : Duration;
-       Mode     : ST.Delay_Modes;
-       Reason   : System.Tasking.Task_States;
-       Timedout : out Boolean;
-       Yielded  : out Boolean)
-    is
-       pragma Unreferenced (Reason);
- 
-       Check_Time : constant Duration := OSP.Monotonic_Clock;
-       Rel_Time   : Duration;
-       Abs_Time   : Duration;
-       Time_Out   : ULONG;
-       Result    : APIRET;
-       Count      : aliased ULONG;  --  Used to store dummy result
- 
-    begin
-       --  Must reset Cond BEFORE Self_ID is unlocked.
- 
-       Sem_Must_Not_Fail
-         (DosResetEventSem (Self_ID.Common.LL.CV,
-          Count'Unchecked_Access));
- 
-       if Single_Lock then
-          Unlock_RTS;
-       else
-          Unlock (Self_ID);
-       end if;
- 
-       Timedout := True;
-       Yielded := False;
- 
-       if Mode = Relative then
-          Rel_Time := Time;
-          Abs_Time := Duration'Min (Time, Max_Sensible_Delay) + Check_Time;
-       else
-          Rel_Time := Time - Check_Time;
-          Abs_Time := Time;
-       end if;
- 
-       if Rel_Time > 0.0 then
-          loop
-             exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level
-               or else Self_ID.Pending_Priority_Change;
- 
-             Time_Out := To_MS (Rel_Time);
-             Result := DosWaitEventSem (Self_ID.Common.LL.CV, Time_Out);
-             pragma Assert
-              ((Result = NO_ERROR or Result = ERROR_TIMEOUT
-                 or Result = ERROR_INTERRUPT));
- 
-             --  ???
-             --  What to do with error condition ERROR_NOT_ENOUGH_MEMORY? Can
-             --  we raise an exception here?  And what about ERROR_INTERRUPT?
-             --  Should that be treated as a simple timeout?
-             --  For now, consider only ERROR_TIMEOUT to be a timeout.
- 
-             exit when Abs_Time <= OSP.Monotonic_Clock;
- 
-             if Result /= ERROR_TIMEOUT then
-                --  somebody may have called Wakeup for us
-                Timedout := False;
-                exit;
-             end if;
- 
-             Rel_Time := Abs_Time - OSP.Monotonic_Clock;
-          end loop;
-       end if;
- 
-       --  Ensure post-condition
- 
-       if Single_Lock then
-          Lock_RTS;
-       else
-          Write_Lock (Self_ID);
-       end if;
- 
-       if Timedout then
-          Sem_Must_Not_Fail (DosPostEventSem (Self_ID.Common.LL.CV));
-       end if;
-    end Timed_Sleep;
- 
-    -----------------
-    -- Timed_Delay --
-    -----------------
- 
-    procedure Timed_Delay
-      (Self_ID  : Task_ID;
-       Time     : Duration;
-       Mode     : ST.Delay_Modes)
-    is
-       Check_Time : constant Duration := OSP.Monotonic_Clock;
-       Rel_Time   : Duration;
-       Abs_Time   : Duration;
-       Timedout   : Boolean := True;
-       Time_Out   : ULONG;
-       Result     : APIRET;
-       Count      : aliased ULONG;  --  Used to store dummy result
- 
-    begin
-       --  Only the little window between deferring abort and
-       --  locking Self_ID is the reason we need to
-       --  check for pending abort and priority change below! :(
- 
-       SSL.Abort_Defer.all;
- 
-       if Single_Lock then
-          Lock_RTS;
-       else
-          Write_Lock (Self_ID);
-       end if;
- 
-       --  Must reset Cond BEFORE Self_ID is unlocked.
- 
-       Sem_Must_Not_Fail
-         (DosResetEventSem (Self_ID.Common.LL.CV,
-          Count'Unchecked_Access));
- 
-       if Single_Lock then
-          Unlock_RTS;
-       else
-          Unlock (Self_ID);
-       end if;
- 
-       if Mode = Relative then
-          Rel_Time := Time;
-          Abs_Time := Time + Check_Time;
-       else
-          Rel_Time := Time - Check_Time;
-          Abs_Time := Time;
-       end if;
- 
-       if Rel_Time > 0.0 then
-          Self_ID.Common.State := Delay_Sleep;
- 
-          loop
-             if Self_ID.Pending_Priority_Change then
-                Self_ID.Pending_Priority_Change := False;
-                Self_ID.Common.Base_Priority := Self_ID.New_Base_Priority;
-                Set_Priority (Self_ID, Self_ID.Common.Base_Priority);
-             end if;
- 
-             exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level;
- 
-             Time_Out := To_MS (Rel_Time);
-             Result := DosWaitEventSem (Self_ID.Common.LL.CV, Time_Out);
- 
-             exit when Abs_Time <= OSP.Monotonic_Clock;
- 
-             Rel_Time := Abs_Time - OSP.Monotonic_Clock;
-          end loop;
- 
-          Self_ID.Common.State := Runnable;
-          Timedout := Result = ERROR_TIMEOUT;
-       end if;
- 
-       if Single_Lock then
-          Lock_RTS;
-       else
-          Write_Lock (Self_ID);
-       end if;
- 
-       if Timedout then
-          Sem_Must_Not_Fail (DosPostEventSem (Self_ID.Common.LL.CV));
-       end if;
- 
-       if Single_Lock then
-          Unlock_RTS;
-       else
-          Unlock (Self_ID);
-       end if;
- 
-       System.OS_Interface.Yield;
-       SSL.Abort_Undefer.all;
-    end Timed_Delay;
- 
-    ------------
-    -- Wakeup --
-    ------------
- 
-    procedure Wakeup (T : Task_ID; Reason : System.Tasking.Task_States) is
-       pragma Unreferenced (Reason);
- 
-    begin
-       Sem_Must_Not_Fail (DosPostEventSem (T.Common.LL.CV));
-    end Wakeup;
- 
-    -----------
-    -- Yield --
-    -----------
- 
-    procedure Yield (Do_Yield : Boolean := True) is
-    begin
-       if Do_Yield then
-          System.OS_Interface.Yield;
-       end if;
-    end Yield;
- 
-    ----------------------------
-    -- Set_Temporary_Priority --
-    ----------------------------
- 
-    procedure Set_Temporary_Priority
-      (T            : Task_ID;
-       New_Priority : System.Any_Priority)
-    is
-       use Interfaces.C;
-       Delta_Priority : Integer;
- 
-    begin
-       --  When Lock_Prio_Level = 0, we always need to set the
-       --  Active_Priority. In this way we can make priority changes
-       --  due to locking independent of those caused by calling
-       --  Set_Priority.
- 
-       if Thread_Local_Data_Ptr.Lock_Prio_Level = 0
-         or else New_Priority < T.Common.Current_Priority
-       then
-          Delta_Priority := T.Common.Current_Priority -
-            T.Common.LL.Current_Priority;
-       else
-          Delta_Priority := New_Priority - T.Common.LL.Current_Priority;
-       end if;
- 
-       if Delta_Priority /= 0 then
-          --  ??? There is a race-condition here
-          --  The TCB is updated before the system call to make
-          --  pre-emption in the critical section less likely.
- 
-          T.Common.LL.Current_Priority :=
-            T.Common.LL.Current_Priority + Delta_Priority;
-          Must_Not_Fail
-            (DosSetPriority (Scope   => PRTYS_THREAD,
-                             Class   => PRTYC_NOCHANGE,
-                             Delta_P => IC.long (Delta_Priority),
-                             PorTid  => T.Common.LL.Thread));
-       end if;
-    end Set_Temporary_Priority;
- 
-    ------------------
-    -- Set_Priority --
-    ------------------
- 
-    procedure Set_Priority
-      (T                   : Task_ID;
-       Prio                : System.Any_Priority;
-       Loss_Of_Inheritance : Boolean := False)
-    is
-       pragma Unreferenced (Loss_Of_Inheritance);
- 
-    begin
-       T.Common.Current_Priority := Prio;
-       Set_Temporary_Priority (T, Prio);
-    end Set_Priority;
- 
-    ------------------
-    -- Get_Priority --
-    ------------------
- 
-    function Get_Priority (T : Task_ID) return System.Any_Priority is
-    begin
-       return T.Common.Current_Priority;
-    end Get_Priority;
- 
-    ----------------
-    -- Enter_Task --
-    ----------------
- 
-    procedure Enter_Task (Self_ID : Task_ID) is
-    begin
-       --  Initialize thread local data. Must be done first.
- 
-       Thread_Local_Data_Ptr.Self_ID := Self_ID;
-       Thread_Local_Data_Ptr.Lock_Prio_Level := 0;
- 
-       Lock_RTS;
- 
-       for J in Known_Tasks'Range loop
-          if Known_Tasks (J) = null then
-             Known_Tasks (J) := Self_ID;
-             Self_ID.Known_Tasks_Index := J;
-             exit;
-          end if;
-       end loop;
- 
-       Unlock_RTS;
- 
-       --  For OS/2, we can set Self_ID.Common.LL.Thread in
-       --  Create_Task, since the thread is created suspended.
-       --  That is, there is no danger of the thread racing ahead
-       --  and trying to reference Self_ID.Common.LL.Thread before it
-       --  has been initialized.
- 
-       --  .... Do we need to do anything with signals for OS/2 ???
-    end Enter_Task;
- 
-    --------------
-    -- New_ATCB --
-    --------------
- 
-    function New_ATCB (Entry_Num : Task_Entry_Index) return Task_ID is
-    begin
-       return new Ada_Task_Control_Block (Entry_Num);
-    end New_ATCB;
- 
-    -------------------
-    -- Is_Valid_Task --
-    -------------------
- 
-    function Is_Valid_Task return Boolean is
-    begin
-       return False;
-    end Is_Valid_Task;
- 
-    -----------------------------
-    -- Register_Foreign_Thread --
-    -----------------------------
- 
-    function Register_Foreign_Thread return Task_ID is
-    begin
-       return null;
-    end Register_Foreign_Thread;
- 
-    --------------------
-    -- Initialize_TCB --
-    --------------------
- 
-    procedure Initialize_TCB (Self_ID : Task_ID; Succeeded : out Boolean) is
-    begin
-       if DosCreateEventSem (ICS.Null_Ptr,
-         Self_ID.Common.LL.CV'Unchecked_Access, 0, True32) = NO_ERROR
-       then
-          if not Single_Lock
-            and then DosCreateMutexSem
-              (ICS.Null_Ptr,
-               Self_ID.Common.LL.L.Mutex'Unchecked_Access,
-               0,
-               False32) /= NO_ERROR
-          then
-             Succeeded := False;
-             Must_Not_Fail (DosCloseEventSem (Self_ID.Common.LL.CV));
-          else
-             Succeeded := True;
-          end if;
- 
-          --  We now want to do the equivalent of:
- 
-          --  Initialize_Lock
-          --    (Self_ID.Common.LL.L'Unchecked_Access, ATCB_Level);
- 
-          --  But we avoid that because the Initialize_TCB routine has an
-          --  exception handler, and it is too early for us to deal with
-          --  installing handlers (see comment below), so we do our own
-          --  Initialize_Lock operation manually.
- 
-          Self_ID.Common.LL.L.Priority := System.Any_Priority'Last;
-          Self_ID.Common.LL.L.Owner_ID := Null_Address;
- 
-       else
-          Succeeded := False;
-       end if;
- 
-       --  Note: at one time we had an exception handler here, whose code
-       --  was as follows:
- 
-       --  exception
- 
-       --     Assumes any failure must be due to insufficient resources
- 
-       --     when Storage_Error =>
-       --        Must_Not_Fail (DosCloseEventSem (Self_ID.Common.LL.CV));
-       --        Succeeded := False;
- 
-       --  but that won't work with the old exception scheme, since it would
-       --  result in messing with Jmpbuf values too early. If and when we get
-       --  switched entirely to the new zero-cost exception scheme, we could
-       --  put this handler back in!
-    end Initialize_TCB;
- 
-    -----------------
-    -- Create_Task --
-    -----------------
- 
-    procedure Create_Task
-      (T          : Task_ID;
-       Wrapper    : System.Address;
-       Stack_Size : System.Parameters.Size_Type;
-       Priority   : System.Any_Priority;
-       Succeeded  : out Boolean)
-    is
-       Result              : aliased APIRET;
-       Adjusted_Stack_Size : System.Parameters.Size_Type;
-       use System.Parameters;
- 
-    begin
-       --  In OS/2 the allocated stack size should be based on the
-       --  amount of address space that should be reserved for the stack.
-       --  Actual memory will only be used when the stack is touched anyway.
- 
-       --  The new minimum size is 12 kB, although the EMX docs
-       --  recommend a minimum size of 32 kB.  (The original was 4 kB)
-       --  Systems that use many tasks (say > 30) and require much
-       --  memory may run out of virtual address space, since OS/2
-       --  has a per-proces limit of 512 MB, of which max. 300 MB is
-       --  usable in practise.
- 
-       if Stack_Size = Unspecified_Size then
-          Adjusted_Stack_Size := Default_Stack_Size;
- 
-       elsif Stack_Size < Minimum_Stack_Size then
-          Adjusted_Stack_Size := Minimum_Stack_Size;
- 
-       else
-          Adjusted_Stack_Size := Stack_Size;
-       end if;
- 
-       --  GB970222:
-       --    Because DosCreateThread is called directly here, the
-       --    C RTL doesn't get initialized for the new thead. EMX by
-       --    default uses per-thread local heaps in addition to the
-       --    global heap. There might be other effects of by-passing the
-       --    C library here.
- 
-       --    When using _beginthread the newly created thread is not
-       --    blocked initially. Does this matter or can I create the
-       --    thread running anyway? The LL.Thread variable will be set
-       --    anyway because the variable is passed by reference to OS/2.
- 
-       T.Common.LL.Wrapper := To_PFNTHREAD (Wrapper);
- 
-       --  The OS implicitly gives the new task the priority of this task.
- 
-       T.Common.LL.Current_Priority := Self.Common.LL.Current_Priority;
- 
-       --  If task was locked before activator task was
-       --  initialized, assume it has OS standard priority
- 
-       if T.Common.LL.L.Owner_Priority not in Any_Priority'Range then
-          T.Common.LL.L.Owner_Priority := 1;
-       end if;
- 
-       --  Create the thread, in blocked mode
- 
-       Result := DosCreateThread
-         (F_ptid   => T.Common.LL.Thread'Unchecked_Access,
-          pfn      => T.Common.LL.Wrapper,
-          param    => To_Address (T),
-          flag     => Block_Child + Commit_Stack,
-          cbStack  => ULONG (Adjusted_Stack_Size));
- 
-       Succeeded := (Result = NO_ERROR);
- 
-       if not Succeeded then
-          return;
-       end if;
- 
-       --  Set the new thread's priority
-       --  (child has inherited priority from parent)
- 
-       Set_Priority (T, Priority);
- 
-       --  Start the thread executing
- 
-       Must_Not_Fail (DosResumeThread (T.Common.LL.Thread));
- 
-    end Create_Task;
- 
-    ------------------
-    -- Finalize_TCB --
-    ------------------
- 
-    procedure Finalize_TCB (T : Task_ID) is
-       Tmp    : Task_ID := T;
- 
-       procedure Free is new
-         Unchecked_Deallocation (Ada_Task_Control_Block, Task_ID);
- 
-    begin
-       Must_Not_Fail (DosCloseEventSem (T.Common.LL.CV));
- 
-       if not Single_Lock then
-          Finalize_Lock (T.Common.LL.L'Unchecked_Access);
-       end if;
- 
-       if T.Known_Tasks_Index /= -1 then
-          Known_Tasks (T.Known_Tasks_Index) := null;
-       end if;
- 
-       Free (Tmp);
-    end Finalize_TCB;
- 
-    ---------------
-    -- Exit_Task --
-    ---------------
- 
-    procedure Exit_Task is
-    begin
-       Thread_Local_Data_Ptr := null;
-    end Exit_Task;
- 
-    ----------------
-    -- Abort_Task --
-    ----------------
- 
-    procedure Abort_Task (T : Task_ID) is
-       pragma Unreferenced (T);
- 
-    begin
-       null;
- 
-       --  Task abortion not implemented yet.
-       --  Should perform other action ???
- 
-    end Abort_Task;
- 
-    ----------------
-    -- Check_Exit --
-    ----------------
- 
-    --  Dummy version
- 
-    function Check_Exit (Self_ID : ST.Task_ID) return Boolean is
-    begin
-       return Check_No_Locks (Self_ID);
-    end Check_Exit;
- 
-    --------------------
-    -- Check_No_Locks --
-    --------------------
- 
-    function Check_No_Locks (Self_ID : ST.Task_ID) return Boolean is
-       TLD : constant Access_Thread_Local_Data := Thread_Local_Data_Ptr;
- 
-    begin
-       return Self_ID = TLD.Self_ID
-         and then TLD.Lock_Prio_Level = 0;
-    end Check_No_Locks;
- 
-    ----------------------
-    -- Environment_Task --
-    ----------------------
- 
-    function Environment_Task return Task_ID is
-    begin
-       return Environment_Task_ID;
-    end Environment_Task;
- 
-    --------------
-    -- Lock_RTS --
-    --------------
- 
-    procedure Lock_RTS is
-    begin
-       Write_Lock (Single_RTS_Lock'Access, Global_Lock => True);
-    end Lock_RTS;
- 
-    ----------------
-    -- Unlock_RTS --
-    ----------------
- 
-    procedure Unlock_RTS is
-    begin
-       Unlock (Single_RTS_Lock'Access, Global_Lock => True);
-    end Unlock_RTS;
- 
-    ------------------
-    -- Suspend_Task --
-    ------------------
- 
-    function Suspend_Task
-      (T           : ST.Task_ID;
-       Thread_Self : Thread_Id)
-       return        Boolean
-    is
-    begin
-       if Thread_Id (T.Common.LL.Thread) /= Thread_Self then
-          return DosSuspendThread (T.Common.LL.Thread) = NO_ERROR;
-       else
-          return True;
-       end if;
-    end Suspend_Task;
- 
-    -----------------
-    -- Resume_Task --
-    -----------------
- 
-    function Resume_Task
-      (T           : ST.Task_ID;
-       Thread_Self : Thread_Id)
-       return        Boolean
-    is
-    begin
-       if Thread_Id (T.Common.LL.Thread) /= Thread_Self then
-          return DosResumeThread (T.Common.LL.Thread) = NO_ERROR;
-       else
-          return True;
-       end if;
-    end Resume_Task;
- 
-    ----------------
-    -- Initialize --
-    ----------------
- 
-    procedure Initialize (Environment_Task : Task_ID) is
-       Succeeded : Boolean;
-    begin
-       Environment_Task_ID := Environment_Task;
- 
-       Initialize_Lock (Single_RTS_Lock'Access, RTS_Lock_Level);
-       --  Initialize the lock used to synchronize chain of all ATCBs.
- 
-       --  Set ID of environment task.
- 
-       Thread_Local_Data_Ptr.Self_ID := Environment_Task;
-       Environment_Task.Common.LL.Thread := 1; --  By definition
- 
-       --  This priority is unknown in fact.
-       --  If actual current priority is different,
-       --  it will get synchronized later on anyway.
- 
-       Environment_Task.Common.LL.Current_Priority :=
-         Environment_Task.Common.Current_Priority;
- 
-       --  Initialize TCB for this task.
-       --  This includes all the normal task-external initialization.
-       --  This is also done by Initialize_ATCB, why ???
- 
-       Initialize_TCB (Environment_Task, Succeeded);
- 
-       --  Consider raising Storage_Error,
-       --  if propagation can be tolerated ???
- 
-       pragma Assert (Succeeded);
- 
-       --  Do normal task-internal initialization,
-       --  which depends on an initialized TCB.
- 
-       Enter_Task (Environment_Task);
- 
-       --  Insert here any other special
-       --  initialization needed for the environment task.
-    end Initialize;
- 
- begin
-    --  Initialize pointer to task local data.
-    --  This is done once, for all tasks.
- 
-    Must_Not_Fail (DosAllocThreadLocalMemory
-       ((Thread_Local_Data'Size + 31) / 32,  --  nr of 32-bit words
-        To_PPVOID (Thread_Local_Data_Ptr'Access)));
- 
-    --  Initialize thread local data for main thread
- 
-    Thread_Local_Data_Ptr.Self_ID := null;
-    Thread_Local_Data_Ptr.Lock_Prio_Level := 0;
- end System.Task_Primitives.Operations;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5otaspri.ads gcc-4.0.0/gcc/ada/5otaspri.ads
*** gcc-3.4.3/gcc/ada/5otaspri.ads	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5otaspri.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,107 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
- --                                                                          --
- --                S Y S T E M . T A S K _ P R I M I T I V E S               --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --             Copyright (C) 1991-1994, Florida State University            --
- --             Copyright (C) 1995-2003, Ada Core Technologies               --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is an OS/2 version of this package.
- 
- --  This package provides low-level support for most tasking features.
- 
- pragma Polling (Off);
- --  Turn off polling, we do not want ATC polling to take place during
- --  tasking operations. It causes infinite loops and other problems.
- 
- with Interfaces.OS2Lib.Threads;
- with Interfaces.OS2Lib.Synchronization;
- 
- package System.Task_Primitives is
- 
-    pragma Preelaborate;
- 
- --   type Lock is limited private;
-    --  Should be used for implementation of protected objects.
- 
- --   type RTS_Lock is limited private;
-    --  Should be used inside the runtime system.
-    --  The difference between Lock and the RTS_Lock is that the later
-    --  one serves only as a semaphore so that do not check for
-    --  ceiling violations.
- 
-    type Task_Body_Access is access procedure;
-    --  Pointer to the task body's entry point (or possibly a wrapper
-    --  declared local to the GNARL).
- 
- --   type Private_Data is limited private;
-    --  Any information that the GNULLI needs maintained on a per-task
-    --  basis.  A component of this type is guaranteed to be included
-    --  in the Ada_Task_Control_Block.
- 
- --  private
- 
-    type Lock is record
-       Mutex          : aliased Interfaces.OS2Lib.Synchronization.HMTX;
-       Priority       : Integer;
-       Owner_Priority : Integer;
-       Owner_ID       : Address;
-    end record;
- 
-    type RTS_Lock is new Lock;
- 
-    type Private_Data is record
-       Thread          : aliased Interfaces.OS2Lib.Threads.TID;
-       pragma Atomic (Thread);
-       --  Thread field may be updated by two different threads of control.
-       --  (See, Enter_Task and Create_Task in s-taprop.adb).
-       --  They put the same value (thr_self value). We do not want to
-       --  use lock on those operations and the only thing we have to
-       --  make sure is that they are updated in atomic fashion.
- 
-       CV : aliased Interfaces.OS2Lib.Synchronization.HEV;
- 
-       L  : aliased RTS_Lock;
-       --  Protection for all components is lock L
- 
-       Current_Priority : Integer := -1;
-       --  The Current_Priority is the actual priority of a thread.
-       --  This field is needed because it is only possible to set a
-       --  delta priority in OS/2. The only places where this field should
-       --  be set are Set_Priority, Create_Task and Initialize (Environment).
- 
-       Wrapper : Interfaces.OS2Lib.Threads.PFNTHREAD;
-       --  This is the original wrapper passed by Operations.Create_Task.
-       --  When installing an exception handler in a thread, the thread
-       --  starts executing the Exception_Wrapper which calls Wrapper
-       --  when the handler has been installed. The handler is removed when
-       --  wrapper returns.
-    end record;
- 
- end System.Task_Primitives;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5posinte.ads gcc-4.0.0/gcc/ada/5posinte.ads
*** gcc-3.4.3/gcc/ada/5posinte.ads	Fri Dec  5 10:24:04 2003
--- gcc-4.0.0/gcc/ada/5posinte.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,568 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   S Y S T E M . O S _ I N T E R F A C E                  --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --          Copyright (C) 1997-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a OpenNT/Interix (FSU THREADS) version of this package.
- 
- --  This package encapsulates all direct interfaces to OS services
- --  that are needed by children of System.
- 
- --  PLEASE DO NOT add any with-clauses to this package
- --  or remove the pragma Elaborate_Body.
- --  It is designed to be a bottom-level (leaf) package.
- 
- with Interfaces.C;
- package System.OS_Interface is
-    pragma Preelaborate;
- 
-    pragma Linker_Options ("-lgthreads");
-    pragma Linker_Options ("-lmalloc");
- 
-    subtype int            is Interfaces.C.int;
-    subtype short          is Interfaces.C.short;
-    subtype long           is Interfaces.C.long;
-    subtype unsigned       is Interfaces.C.unsigned;
-    subtype unsigned_short is Interfaces.C.unsigned_short;
-    subtype unsigned_long  is Interfaces.C.unsigned_long;
-    subtype unsigned_char  is Interfaces.C.unsigned_char;
-    subtype plain_char     is Interfaces.C.plain_char;
-    subtype size_t         is Interfaces.C.size_t;
- 
-    -----------
-    -- Errno --
-    -----------
- 
-    function errno return int;
-    pragma Import (C, errno, "__get_errno");
- 
-    EAGAIN    : constant := 11;
-    EINTR     : constant := 4;
-    EINVAL    : constant := 22;
-    ENOMEM    : constant := 12;
-    ETIMEDOUT : constant := 60;
- 
-    -------------
-    -- Signals --
-    -------------
- 
-    Max_Interrupt : constant := 31;
-    type Signal is new int range 0 .. Max_Interrupt;
-    for Signal'Size use int'Size;
- 
-    SIGHUP      : constant := 1; --  hangup
-    SIGINT      : constant := 2; --  interrupt (rubout)
-    SIGQUIT     : constant := 3; --  quit (ASCD FS)
-    SIGILL      : constant := 4; --  illegal instruction (not reset)
-    SIGTRAP     : constant := 5; --  trace trap (not reset)
-    SIGIOT      : constant := 6; --  IOT instruction
-    SIGABRT     : constant := 6; --  used by abort, replace SIGIOT in the future
-    SIGEMT      : constant := 0; --  EMT instruction
-    SIGFPE      : constant := 8; --  floating point exception
-    SIGKILL     : constant := 9; --  kill (cannot be caught or ignored)
-    SIGBUS      : constant := 10; --  bus error
-    SIGSEGV     : constant := 11; --  segmentation violation
-    SIGSYS      : constant := 12;  --  bad argument to system call
-    SIGPIPE     : constant := 13; --  write on a pipe with no one to read it
-    SIGALRM     : constant := 14; --  alarm clock
-    SIGTERM     : constant := 15; --  software termination signal from kill
-    SIGUSR1     : constant := 16; --  user defined signal 1
-    SIGUSR2     : constant := 17; --  user defined signal 2
-    SIGCLD      : constant := 18; --  alias for SIGCHLD
-    SIGCHLD     : constant := 18; --  child status change
-    SIGPWR      : constant := 0; --  power-fail restart
-    SIGWINCH    : constant := 20; --  window size change
-    SIGURG      : constant := 21; --  urgent condition on IO channel
-    SIGPOLL     : constant := 22; --  pollable event occurred
-    SIGIO       : constant := 19; --  I/O possible (Solaris SIGPOLL alias)
-    SIGSTOP     : constant := 23; --  stop (cannot be caught or ignored)
-    SIGTSTP     : constant := 24; --  user stop requested from tty
-    SIGCONT     : constant := 25; --  stopped process has been continued
-    SIGTTIN     : constant := 26; --  background tty read attempted
-    SIGTTOU     : constant := 27; --  background tty write attempted
-    SIGVTALRM   : constant := 28; --  virtual timer expired
-    SIGPROF     : constant := 29; --  profiling timer expired
-    SIGXCPU     : constant := 30; --  CPU time limit exceeded
-    SIGXFSZ     : constant := 31; --  filesize limit exceeded
- 
-    SIGADAABORT : constant := SIGABRT;
- 
-    type Signal_Set is array (Natural range <>) of Signal;
- 
-    Unmasked    : constant Signal_Set :=
-      (SIGTRAP, SIGALRM, SIGVTALRM, SIGTTIN, SIGTTOU, SIGTSTP, SIGPROF);
- 
-    Reserved    : constant Signal_Set := (SIGKILL, SIGSTOP);
- 
-    type sigset_t is private;
- 
-    function sigaddset (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigaddset, "sigaddset");
- 
-    function sigdelset (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigdelset, "sigdelset");
- 
-    function sigfillset (set : access sigset_t) return int;
-    pragma Import (C, sigfillset, "sigfillset");
- 
-    function sigismember (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigismember, "sigismember");
- 
-    function sigemptyset (set : access sigset_t) return int;
-    pragma Import (C, sigemptyset, "sigemptyset");
- 
-    type struct_sigaction is record
-       sa_handler  : System.Address;
-       sa_mask     : sigset_t;
-       sa_flags    : int;
-       sa_restorer : System.Address;
-    end record;
-    pragma Convention (C, struct_sigaction);
-    type struct_sigaction_ptr is access all struct_sigaction;
- 
-    SIG_BLOCK   : constant := 1;
-    SIG_UNBLOCK : constant := 2;
-    SIG_SETMASK : constant := 3;
- 
-    SIG_DFL : constant := 0;
-    SIG_IGN : constant := 1;
- 
-    SA_SIGINFO : constant := 0;
-    --  Dummy constant for a sa_flags bit. A proper definition is needed only
-    --  for the GCC/ZCX EH scheme (see System.Interrupt_Management).
- 
-    function sigaction
-      (sig  : Signal;
-       act  : struct_sigaction_ptr;
-       oact : struct_sigaction_ptr) return int;
-    --  FSU pthreads redefines sigaction and then uses a special syscall
-    --  API to call the system version. Doing syscalls on OpenNT is very
-    --  difficult, so we rename the pthread version instead.
-    pragma Import (C, sigaction, "pthread_wrapper_sigaction");
- 
-    ----------
-    -- Time --
-    ----------
- 
-    Time_Slice_Supported : constant Boolean := False;
-    --  Indicates wether time slicing is supported (i.e FSU threads have been
-    --  compiled with DEF_RR)
- 
-    type timespec is private;
- 
-    type clockid_t is private;
- 
-    CLOCK_REALTIME : constant clockid_t;
- 
-    function clock_gettime
-      (clock_id : clockid_t;
-       tp       : access timespec) return int;
-    pragma Import (C, clock_gettime, "clock_gettime");
- 
-    function To_Duration (TS : timespec) return Duration;
-    pragma Inline (To_Duration);
- 
-    function To_Timespec (D : Duration) return timespec;
-    pragma Inline (To_Timespec);
- 
-    type struct_timeval is private;
- 
-    function To_Duration (TV : struct_timeval) return Duration;
-    pragma Inline (To_Duration);
- 
-    function To_Timeval (D : Duration) return struct_timeval;
-    pragma Inline (To_Timeval);
- 
-    -------------------------
-    -- Priority Scheduling --
-    -------------------------
- 
-    SCHED_FIFO  : constant := 0;
-    SCHED_RR    : constant := 1;
-    SCHED_OTHER : constant := 2;
- 
-    -------------
-    -- Process --
-    -------------
- 
-    type pid_t is private;
- 
-    function kill (pid : pid_t; sig : Signal) return int;
-    pragma Import (C, kill, "kill");
- 
-    function getpid return pid_t;
-    pragma Import (C, getpid, "getpid");
- 
-    ---------
-    -- LWP --
-    ---------
- 
-    function lwp_self return System.Address;
-    --  lwp_self does not exist on this thread library, revert to pthread_self
-    --  which is the closest approximation (with getpid). This function is
-    --  needed to share 7staprop.adb across POSIX-like targets.
-    pragma Import (C, lwp_self, "pthread_self");
- 
-    -------------
-    -- Threads --
-    -------------
- 
-    type Thread_Body is access
-      function (arg : System.Address) return System.Address;
-    type pthread_t           is private;
-    subtype Thread_Id        is pthread_t;
- 
-    type pthread_mutex_t     is limited private;
-    type pthread_cond_t      is limited private;
-    type pthread_attr_t      is limited private;
-    type pthread_mutexattr_t is limited private;
-    type pthread_condattr_t  is limited private;
-    type pthread_key_t       is private;
- 
-    PTHREAD_CREATE_DETACHED : constant := 1;
-    PTHREAD_CREATE_JOINABLE : constant := 0;
- 
-    -----------
-    -- Stack --
-    -----------
- 
-    Stack_Base_Available : constant Boolean := False;
-    --  Indicates wether the stack base is available on this target.
-    --  This allows us to share s-osinte.adb between all the FSU run time.
-    --  Note that this value can only be true if pthread_t has a complete
-    --  definition that corresponds exactly to the C header files.
- 
-    function Get_Stack_Base (thread : pthread_t) return Address;
-    pragma Inline (Get_Stack_Base);
-    --  returns the stack base of the specified thread.
-    --  Only call this function when Stack_Base_Available is True.
- 
-    function Get_Page_Size return size_t;
-    function Get_Page_Size return Address;
-    pragma Import (C, Get_Page_Size, "getpagesize");
-    --  returns the size of a page, or 0 if this is not relevant on this
-    --  target
- 
-    PROT_NONE  : constant := 0;
-    PROT_READ  : constant := 1;
-    PROT_WRITE : constant := 2;
-    PROT_EXEC  : constant := 4;
-    PROT_ALL   : constant := PROT_READ + PROT_WRITE + PROT_EXEC;
- 
-    PROT_ON    : constant := PROT_NONE;
-    PROT_OFF   : constant := PROT_ALL;
- 
-    function mprotect (addr : Address; len : size_t; prot : int) return int;
-    pragma Import (C, mprotect);
- 
-    ---------------------------------------
-    -- Nonstandard Thread Initialization --
-    ---------------------------------------
- 
-    procedure pthread_init;
-    --  FSU_THREADS requires pthread_init, which is nonstandard
-    --  and this should be invoked during the elaboration of s-taprop.adb
-    pragma Import (C, pthread_init, "pthread_init");
- 
-    -------------------------
-    -- POSIX.1c  Section 3 --
-    -------------------------
- 
-    function sigwait
-      (set : access sigset_t;
-       sig : access Signal) return int;
-    --  FSU_THREADS has a nonstandard sigwait
- 
-    function pthread_kill
-      (thread : pthread_t;
-       sig    : Signal) return   int;
-    pragma Import (C, pthread_kill, "pthread_kill");
- 
-    type sigset_t_ptr is access all sigset_t;
- 
-    function pthread_sigmask
-      (how  : int;
-       set  : sigset_t_ptr;
-       oset : sigset_t_ptr) return int;
-    pragma Import (C, pthread_sigmask, "pthread_wrapper_sigprocmask");
- 
-    --------------------------
-    -- POSIX.1c  Section 11 --
-    --------------------------
- 
-    function pthread_mutexattr_init
-      (attr : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
- 
-    function pthread_mutexattr_destroy
-      (attr : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
- 
-    function pthread_mutex_init
-      (mutex : access pthread_mutex_t;
-       attr  : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
- 
-    function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
- 
-    function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
-    --  FSU_THREADS has nonstandard pthread_mutex_lock
- 
-    function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
-    --  FSU_THREADS has nonstandard pthread_mutex_lock
- 
-    function pthread_condattr_init
-      (attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
- 
-    function pthread_condattr_destroy
-      (attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
- 
-    function pthread_cond_init
-      (cond : access pthread_cond_t;
-       attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_cond_init, "pthread_cond_init");
- 
-    function pthread_cond_destroy (cond : access pthread_cond_t) return int;
-    pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
- 
-    function pthread_cond_signal (cond : access pthread_cond_t) return int;
-    pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
- 
-    function pthread_cond_wait
-      (cond  : access pthread_cond_t;
-       mutex : access pthread_mutex_t) return int;
-    --  FSU_THREADS has a nonstandard pthread_cond_wait
- 
-    function pthread_cond_timedwait
-      (cond    : access pthread_cond_t;
-       mutex   : access pthread_mutex_t;
-       abstime : access timespec) return int;
-    --  FSU_THREADS has a nonstandard pthread_cond_timedwait
- 
-    Relative_Timed_Wait : constant Boolean := False;
-    --  pthread_cond_timedwait requires an absolute delay time
- 
-    --------------------------
-    -- POSIX.1c  Section 13 --
-    --------------------------
- 
-    PTHREAD_PRIO_NONE    : constant := 0;
-    PTHREAD_PRIO_PROTECT : constant := 2;
-    PTHREAD_PRIO_INHERIT : constant := 1;
- 
-    function pthread_mutexattr_setprotocol
-      (attr     : access pthread_mutexattr_t;
-       protocol : int) return int;
-    pragma Import (C, pthread_mutexattr_setprotocol);
- 
-    function pthread_mutexattr_setprioceiling
-      (attr     : access pthread_mutexattr_t;
-       prioceiling : int) return int;
-    pragma Import
-      (C, pthread_mutexattr_setprioceiling,
-       "pthread_mutexattr_setprio_ceiling");
- 
-    type struct_sched_param is record
-       sched_priority : int;  --  scheduling priority
-    end record;
- 
-    function pthread_setschedparam
-      (thread : pthread_t;
-       policy : int;
-       param  : access struct_sched_param) return int;
-    --  FSU_THREADS does not have pthread_setschedparam
- 
-    function pthread_attr_setscope
-      (attr            : access pthread_attr_t;
-       contentionscope : int) return int;
-    pragma Import (C, pthread_attr_setscope, "pthread_attr_setscope");
- 
-    function pthread_attr_setinheritsched
-      (attr         : access pthread_attr_t;
-       inheritsched : int) return int;
-    pragma Import (C, pthread_attr_setinheritsched);
- 
-    function pthread_attr_setschedpolicy
-      (attr   : access pthread_attr_t;
-       policy : int) return int;
-    pragma Import
-     (C, pthread_attr_setschedpolicy, "pthread_attr_setsched");
- 
-    function sched_yield return int;
-    --  FSU_THREADS does not have sched_yield;
- 
-    ---------------------------
-    -- P1003.1c - Section 16 --
-    ---------------------------
- 
-    function pthread_attr_init (attributes : access pthread_attr_t) return int;
-    pragma Import (C, pthread_attr_init, "pthread_attr_init");
- 
-    function pthread_attr_destroy
-      (attributes : access pthread_attr_t) return int;
-    pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
- 
-    function pthread_attr_setdetachstate
-      (attr        : access pthread_attr_t;
-       detachstate : int) return int;
-    --  FSU_THREADS has a nonstandard pthread_attr_setdetachstate
- 
-    function pthread_attr_setstacksize
-      (attr      : access pthread_attr_t;
-       stacksize : size_t) return int;
-    pragma Import (C, pthread_attr_setstacksize);
- 
-    function pthread_create
-      (thread        : access pthread_t;
-       attributes    : access pthread_attr_t;
-       start_routine : Thread_Body;
-       arg           : System.Address) return int;
-    pragma Import (C, pthread_create, "pthread_create");
- 
-    procedure pthread_exit (status : System.Address);
-    pragma Import (C, pthread_exit, "pthread_exit");
- 
-    function pthread_self return pthread_t;
-    pragma Import (C, pthread_self, "pthread_self");
- 
-    --------------------------
-    -- POSIX.1c  Section 17 --
-    --------------------------
- 
-    function pthread_setspecific
-      (key   : pthread_key_t;
-       value : System.Address) return  int;
-    pragma Import (C, pthread_setspecific, "pthread_setspecific");
- 
-    function pthread_getspecific (key : pthread_key_t) return System.Address;
-    --  FSU_THREADS has a nonstandard pthread_getspecific
- 
-    type destructor_pointer is access procedure (arg : System.Address);
- 
-    function pthread_key_create
-      (key        : access pthread_key_t;
-       destructor : destructor_pointer) return int;
-    pragma Import (C, pthread_key_create, "pthread_key_create");
- 
- private
- 
-    type sigset_t is new unsigned_long;
-    pragma Convention (C, sigset_t);
- 
-    type pid_t is new int;
- 
-    subtype time_t is long;
- 
-    type timespec is record
-       tv_sec  : time_t;
-       tv_nsec : long;
-    end record;
-    pragma Convention (C, timespec);
- 
-    type clockid_t is new int;
-    CLOCK_REALTIME : constant clockid_t := 0;
- 
-    type struct_timeval is record
-       tv_sec  : time_t;
-       tv_usec : long;
-    end record;
-    pragma Convention (C, struct_timeval);
- 
-    type pthread_attr_t is record
-       flags           : int;
-       stacksize       : int;
-       contentionscope : int;
-       inheritsched    : int;
-       detachstate     : int;
-       sched           : int;
-       prio            : int;
-       starttime       : timespec;
-       deadline        : timespec;
-       period          : timespec;
-    end record;
-    pragma Convention (C_Pass_By_Copy, pthread_attr_t);
- 
-    type pthread_condattr_t is record
-       flags : int;
-    end record;
-    pragma Convention (C, pthread_condattr_t);
- 
-    type pthread_mutexattr_t is record
-       flags        : int;
-       prio_ceiling : int;
-       protocol     : int;
-    end record;
-    pragma Convention (C, pthread_mutexattr_t);
- 
-    type sigjmp_buf is array (Integer range 0 .. 17) of int;
- 
-    type pthread_t_struct is record
-       context    : sigjmp_buf;
-       pbody      : sigjmp_buf;
-       errno      : int;
-       ret        : int;
-       stack_base : System.Address;
-    end record;
-    pragma Convention (C, pthread_t_struct);
- 
-    type pthread_t is access all pthread_t_struct;
- 
-    type queue_t is record
-       head : System.Address;
-       tail : System.Address;
-    end record;
-    pragma Convention (C, queue_t);
- 
-    type pthread_mutex_t is record
-       queue                 : queue_t;
-       lock                  : plain_char;
-       owner                 : System.Address;
-       flags                 : int;
-       prio_ceiling          : int;
-       protocol              : int;
-       prev_max_ceiling_prio : int;
-    end record;
-    pragma Convention (C, pthread_mutex_t);
- 
-    type pthread_cond_t is record
-       queue   : queue_t;
-       flags   : int;
-       waiters : int;
-       mutex   : System.Address;
-    end record;
-    pragma Convention (C, pthread_cond_t);
- 
-    type pthread_key_t is new int;
- 
- end System.OS_Interface;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5posprim.adb gcc-4.0.0/gcc/ada/5posprim.adb
*** gcc-3.4.3/gcc/ada/5posprim.adb	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5posprim.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,124 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                  S Y S T E M . O S _ P R I M I T I V E S                 --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --          Copyright (C) 1998-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This version uses gettimeofday and select
- --  This file is suitable for OpenNT, Dec Unix and SCO UnixWare.
- 
- package body System.OS_Primitives is
- 
-    --  ??? These definitions are duplicated from System.OS_Interface
-    --  because we don't want to depend on any package. Consider removing
-    --  these declarations in System.OS_Interface and move these ones in
-    --  the spec.
- 
-    type struct_timeval is record
-       tv_sec  : Integer;
-       tv_usec : Integer;
-    end record;
-    pragma Convention (C, struct_timeval);
- 
-    procedure gettimeofday
-      (tv : access struct_timeval;
-       tz : Address := Null_Address);
-    pragma Import (C, gettimeofday, "gettimeofday");
- 
-    procedure C_select
-      (n         : Integer := 0;
-       readfds,
-       writefds,
-       exceptfds : Address := Null_Address;
-       timeout   : access struct_timeval);
-    pragma Import (C, C_select, "select");
- 
-    -----------
-    -- Clock --
-    -----------
- 
-    function Clock return Duration is
-       TV : aliased struct_timeval;
- 
-    begin
-       gettimeofday (TV'Access);
-       return Duration (TV.tv_sec) + Duration (TV.tv_usec) / 10#1#E6;
-    end Clock;
- 
-    ---------------------
-    -- Monotonic_Clock --
-    ---------------------
- 
-    function Monotonic_Clock return Duration renames Clock;
- 
-    -----------------
-    -- Timed_Delay --
-    -----------------
- 
-    procedure Timed_Delay
-      (Time : Duration;
-       Mode : Integer)
-    is
-       Rel_Time   : Duration;
-       Abs_Time   : Duration;
-       Check_Time : Duration := Clock;
-       timeval    : aliased struct_timeval;
- 
-    begin
-       if Mode = Relative then
-          Rel_Time := Time;
-          Abs_Time := Time + Check_Time;
-       else
-          Rel_Time := Time - Check_Time;
-          Abs_Time := Time;
-       end if;
- 
-       if Rel_Time > 0.0 then
-          loop
-             timeval.tv_sec := Integer (Rel_Time);
- 
-             if Duration (timeval.tv_sec) > Rel_Time then
-                timeval.tv_sec := timeval.tv_sec - 1;
-             end if;
- 
-             timeval.tv_usec :=
-               Integer ((Rel_Time - Duration (timeval.tv_sec)) * 10#1#E6);
- 
-             C_select (timeout => timeval'Unchecked_Access);
-             Check_Time := Clock;
- 
-             exit when Abs_Time <= Check_Time;
- 
-             Rel_Time := Abs_Time - Check_Time;
-          end loop;
-       end if;
-    end Timed_Delay;
- 
- end System.OS_Primitives;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5psystem.ads gcc-4.0.0/gcc/ada/5psystem.ads
*** gcc-3.4.3/gcc/ada/5psystem.ads	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5psystem.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,150 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                        GNAT RUN-TIME COMPONENTS                          --
- --                                                                          --
- --                               S Y S T E M                                --
- --                                                                          --
- --                                 S p e c                                  --
- --                        (OpenNT/Interix Version)                          --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the  contents of the part following the private keyword. --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- package System is
- pragma Pure (System);
- --  Note that we take advantage of the implementation permission to
- --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
- 
-    type Name is (SYSTEM_NAME_GNAT);
-    System_Name : constant Name := SYSTEM_NAME_GNAT;
- 
-    --  System-Dependent Named Numbers
- 
-    Min_Int               : constant := Long_Long_Integer'First;
-    Max_Int               : constant := Long_Long_Integer'Last;
- 
-    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
-    Max_Nonbinary_Modulus : constant := Integer'Last;
- 
-    Max_Base_Digits       : constant := Long_Long_Float'Digits;
-    Max_Digits            : constant := Long_Long_Float'Digits;
- 
-    Max_Mantissa          : constant := 63;
-    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
- 
-    Tick                  : constant := 0.01;
- 
-    --  Storage-related Declarations
- 
-    type Address is private;
-    Null_Address : constant Address;
- 
-    Storage_Unit : constant := 8;
-    Word_Size    : constant := 32;
-    Memory_Size  : constant := 2 ** 32;
- 
-    --  Address comparison
- 
-    function "<"  (Left, Right : Address) return Boolean;
-    function "<=" (Left, Right : Address) return Boolean;
-    function ">"  (Left, Right : Address) return Boolean;
-    function ">=" (Left, Right : Address) return Boolean;
-    function "="  (Left, Right : Address) return Boolean;
- 
-    pragma Import (Intrinsic, "<");
-    pragma Import (Intrinsic, "<=");
-    pragma Import (Intrinsic, ">");
-    pragma Import (Intrinsic, ">=");
-    pragma Import (Intrinsic, "=");
- 
-    --  Other System-Dependent Declarations
- 
-    type Bit_Order is (High_Order_First, Low_Order_First);
-    Default_Bit_Order : constant Bit_Order := Low_Order_First;
- 
-    --  Priority-related Declarations (RM D.1)
- 
-    Max_Priority           : constant Positive := 30;
-    Max_Interrupt_Priority : constant Positive := 31;
- 
-    subtype Any_Priority       is Integer      range  0 .. 31;
-    subtype Priority           is Any_Priority range  0 .. 30;
-    subtype Interrupt_Priority is Any_Priority range 31 .. 31;
- 
-    Default_Priority : constant Priority := 15;
- 
- private
- 
-    type Address is mod Memory_Size;
-    Null_Address : constant Address := 0;
- 
-    --------------------------------------
-    -- System Implementation Parameters --
-    --------------------------------------
- 
-    --  These parameters provide information about the target that is used
-    --  by the compiler. They are in the private part of System, where they
-    --  can be accessed using the special circuitry in the Targparm unit
-    --  whose source should be consulted for more detailed descriptions
-    --  of the individual switch values.
- 
-    AAMP                      : constant Boolean := False;
-    Backend_Divide_Checks     : constant Boolean := False;
-    Backend_Overflow_Checks   : constant Boolean := False;
-    Command_Line_Args         : constant Boolean := True;
-    Configurable_Run_Time     : constant Boolean := False;
-    Denorm                    : constant Boolean := True;
-    Duration_32_Bits          : constant Boolean := False;
-    Exit_Status_Supported     : constant Boolean := True;
-    Fractional_Fixed_Ops      : constant Boolean := False;
-    Frontend_Layout           : constant Boolean := False;
-    Functions_Return_By_DSP   : constant Boolean := False;
-    Machine_Overflows         : constant Boolean := False;
-    Machine_Rounds            : constant Boolean := True;
-    OpenVMS                   : constant Boolean := False;
-    Signed_Zeros              : constant Boolean := True;
-    Stack_Check_Default       : constant Boolean := False;
-    Stack_Check_Probes        : constant Boolean := False;
-    Support_64_Bit_Divides    : constant Boolean := True;
-    Support_Aggregates        : constant Boolean := True;
-    Support_Composite_Assign  : constant Boolean := True;
-    Support_Composite_Compare : constant Boolean := True;
-    Support_Long_Shifts       : constant Boolean := True;
-    Suppress_Standard_Library : constant Boolean := False;
-    Use_Ada_Main_Program_Name : constant Boolean := False;
-    ZCX_By_Default            : constant Boolean := False;
-    GCC_ZCX_Support           : constant Boolean := False;
-    Front_End_ZCX_Support     : constant Boolean := False;
- 
-    --  Obsolete entries, to be removed eventually (bootstrap issues!)
- 
-    High_Integrity_Mode       : constant Boolean := False;
-    Long_Shifts_Inlined       : constant Boolean := True;
- 
- end System;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5pvxwork.ads gcc-4.0.0/gcc/ada/5pvxwork.ads
*** gcc-3.4.3/gcc/ada/5pvxwork.ads	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5pvxwork.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,57 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
- --                                                                          --
- --                        S Y S T E M . V X W O R K S                       --
- --                                                                          --
- --                                   S p e c                                --
- --                                                                          --
- --            Copyright (C) 1998-2001 Free Software Foundation, Inc.        --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the PPC VxWorks version of this package.
- 
- with Interfaces.C;
- 
- package System.VxWorks is
-    pragma Preelaborate (System.VxWorks);
- 
-    package IC renames Interfaces.C;
- 
-    --  Floating point context record. PPC version
- 
-    FP_NUM_DREGS : constant := 32;
-    type Fpr_Array is array (1 .. FP_NUM_DREGS) of IC.double;
- 
-    type FP_CONTEXT is record
-       fpr   : Fpr_Array;
-       fpcsr : IC.int;
-       pad   : IC.int;
-    end record;
-    pragma Convention (C, FP_CONTEXT);
- 
-    Num_HW_Interrupts : constant := 256;
- 
- end System.VxWorks;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5rosinte.adb gcc-4.0.0/gcc/ada/5rosinte.adb
*** gcc-3.4.3/gcc/ada/5rosinte.adb	Thu Apr  8 17:40:05 2004
--- gcc-4.0.0/gcc/ada/5rosinte.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,121 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   S Y S T E M . O S _ I N T E R F A C E                  --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --            Copyright (C) 1991-2002 Florida State University              --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University. It is --
- -- now maintained by Ada Core Technologies Inc. in cooperation with Florida --
- -- State University (http://www.gnat.com).                                  --
- --                                                                          --
- -- The GNARL files that were developed for RTEMS are maintained by  On-Line --
- -- Applications Research Corporation (http://www.oarcorp.com)  in  coopera- --
- -- tion with Ada Core Technologies Inc. and Florida State University.       --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the RTEMS version of this package
- 
- --  This package encapsulates all direct interfaces to OS services
- --  that are needed by children of System.
- 
- pragma Polling (Off);
- --  Turn off polling, we do not want ATC polling to take place during
- --  tasking operations. It causes infinite loops and other problems.
- 
- with Interfaces.C; use Interfaces.C;
- package body System.OS_Interface is
- 
-    -----------------
-    -- To_Duration --
-    -----------------
- 
-    function To_Duration (TS : timespec) return Duration is
-    begin
-       return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9;
-    end To_Duration;
- 
-    -----------------
-    -- To_Timespec --
-    -----------------
- 
-    function To_Timespec (D : Duration) return timespec is
-       S : time_t;
-       F : Duration;
-    begin
-       S := time_t (Long_Long_Integer (D));
-       F := D - Duration (S);
- 
-       --  If F has negative value due to round-up, adjust for positive F value
- 
-       if F < 0.0 then S := S - 1; F := F + 1.0; end if;
-       return timespec'(tv_sec => S,
-                        tv_nsec => long (Long_Long_Integer (F * 10#1#E9)));
-    end To_Timespec;
- 
-    function To_Duration (TV : struct_timeval) return Duration is
-    begin
-       return Duration (TV.tv_sec) + Duration (TV.tv_usec) / 10#1#E6;
-    end To_Duration;
- 
-    function To_Timeval (D : Duration) return struct_timeval is
-       S : int;
-       F : Duration;
-    begin
-       S := int (Long_Long_Integer (D));
-       F := D - Duration (S);
- 
-       --  If F has negative value due to a round-up, adjust for positive F
-       --  value.
-       if F < 0.0 then S := S - 1; F := F + 1.0; end if;
-       return
-         struct_timeval'
-           (tv_sec  => S,
-            tv_usec => int (Long_Long_Integer (F * 10#1#E6)));
-    end To_Timeval;
- 
-    procedure pthread_init is
-    begin
-       null;
-    end pthread_init;
- 
-    function Get_Stack_Base (thread : pthread_t) return Address is
-       pragma Warnings (Off, thread);
- 
-    begin
-       return Null_Address;
-    end Get_Stack_Base;
- 
-    function Get_Page_Size return size_t is
-    begin
-       return 0;
-    end Get_Page_Size;
- 
-    function Get_Page_Size return Address is
-    begin
-       return 0;
-    end Get_Page_Size;
- 
- end System.OS_Interface;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5rosinte.ads gcc-4.0.0/gcc/ada/5rosinte.ads
*** gcc-3.4.3/gcc/ada/5rosinte.ads	Thu Apr  8 17:40:05 2004
--- gcc-4.0.0/gcc/ada/5rosinte.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,525 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   S Y S T E M . O S _ I N T E R F A C E                  --
- --                                                                          --
- --                                   S p e c                                --
- --                                                                          --
- --          Copyright (C) 1997-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- -- The GNARL files that were developed for RTEMS are maintained by  On-Line --
- -- Applications Research Corporation (http://www.oarcorp.com)  in  coopera- --
- -- tion with Ada Core Technologies Inc. and Florida State University.       --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the RTEMS version of this package
- 
- --  These are guesses based on what I think the GNARL team will want to
- --  call the rtems configurations.  We use CPU-rtems for the rtems
- --  configurations.
- 
- --  This package encapsulates all direct interfaces to OS services
- --  that are needed by children of System.
- 
- --  PLEASE DO NOT add any with-clauses to this package
- --  or remove the pragma Elaborate_Body.
- --  It is designed to be a bottom-level (leaf) package.
- 
- with Interfaces.C;
- package System.OS_Interface is
-    pragma Preelaborate;
- 
-    --  This interface assumes that "unsigned" is a 32-bit entity.  This
-    --  will correspond to RTEMS object ids.
- 
-    subtype rtems_id       is Interfaces.C.unsigned;
- 
-    subtype int            is Interfaces.C.int;
-    subtype short          is Interfaces.C.short;
-    subtype long           is Interfaces.C.long;
-    subtype unsigned       is Interfaces.C.unsigned;
-    subtype unsigned_short is Interfaces.C.unsigned_short;
-    subtype unsigned_long  is Interfaces.C.unsigned_long;
-    subtype unsigned_char  is Interfaces.C.unsigned_char;
-    subtype plain_char     is Interfaces.C.plain_char;
-    subtype size_t         is Interfaces.C.size_t;
- 
-    -----------
-    -- Errno --
-    -----------
- 
-    function errno return int;
-    pragma Import (C, errno, "__get_errno");
- 
-    EAGAIN    : constant := 11;
-    EINTR     : constant := 4;
-    EINVAL    : constant := 22;
-    ENOMEM    : constant := 12;
-    ETIMEDOUT : constant := 116;
- 
-    -------------
-    -- Signals --
-    -------------
- 
-    Max_Interrupt : constant := 31;
-    type Signal is new int range 0 .. Max_Interrupt;
- 
-    SIGXCPU     : constant := 0; --  XCPU
-    SIGHUP      : constant := 1; --  hangup
-    SIGINT      : constant := 2; --  interrupt (rubout)
-    SIGQUIT     : constant := 3; --  quit (ASCD FS)
-    SIGILL      : constant := 4; --  illegal instruction (not reset)
-    SIGTRAP     : constant := 5; --  trace trap (not reset)
-    SIGIOT      : constant := 6; --  IOT instruction
-    SIGABRT     : constant := 6; --  used by abort, replace SIGIOT in the future
-    SIGEMT      : constant := 7; --  EMT instruction
-    SIGFPE      : constant := 8; --  floating point exception
-    SIGKILL     : constant := 9; --  kill (cannot be caught or ignored)
-    SIGBUS      : constant := 10; --  bus error
-    SIGSEGV     : constant := 11; --  segmentation violation
-    SIGSYS      : constant := 12; --  bad argument to system call
-    SIGPIPE     : constant := 13; --  write on a pipe with no one to read it
-    SIGALRM     : constant := 14; --  alarm clock
-    SIGTERM     : constant := 15; --  software termination signal from kill
-    SIGUSR1     : constant := 16; --  user defined signal 1
-    SIGUSR2     : constant := 17; --  user defined signal 2
- 
-    SIGADAABORT : constant := SIGABRT;
- 
-    type Signal_Set is array (Natural range <>) of Signal;
- 
-    Unmasked    : constant Signal_Set := (SIGTRAP, SIGALRM, SIGEMT);
-    Reserved    : constant Signal_Set := (1 .. 1 => SIGKILL);
- 
-    type sigset_t is private;
- 
-    function sigaddset (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigaddset, "sigaddset");
- 
-    function sigdelset (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigdelset, "sigdelset");
- 
-    function sigfillset (set : access sigset_t) return int;
-    pragma Import (C, sigfillset, "sigfillset");
- 
-    function sigismember (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigismember, "sigismember");
- 
-    function sigemptyset (set : access sigset_t) return int;
-    pragma Import (C, sigemptyset, "sigemptyset");
- 
-    type struct_sigaction is record
-       sa_flags   : int;
-       sa_mask    : sigset_t;
-       sa_handler : System.Address;
-    end record;
-    pragma Convention (C, struct_sigaction);
-    type struct_sigaction_ptr is access all struct_sigaction;
- 
-    SA_SIGINFO  : constant := 16#02#;
- 
-    SIG_BLOCK   : constant := 1;
-    SIG_UNBLOCK : constant := 2;
-    SIG_SETMASK : constant := 3;
- 
-    SIG_DFL : constant := 0;
-    SIG_IGN : constant := 1;
- 
-    function sigaction
-      (sig  : Signal;
-       act  : struct_sigaction_ptr;
-       oact : struct_sigaction_ptr) return int;
-    pragma Import (C, sigaction, "sigaction");
- 
-    ----------
-    -- Time --
-    ----------
- 
-    Time_Slice_Supported : constant Boolean := True;
-    --  Indicates wether time slicing is supported (i.e SCHED_RR is supported)
- 
-    type timespec is private;
- 
-    type clockid_t is private;
- 
-    CLOCK_REALTIME : constant clockid_t;
- 
-    function clock_gettime
-      (clock_id : clockid_t;
-       tp       : access timespec) return int;
-    pragma Import (C, clock_gettime, "clock_gettime");
- 
-    function To_Duration (TS : timespec) return Duration;
-    pragma Inline (To_Duration);
- 
-    function To_Timespec (D : Duration) return timespec;
-    pragma Inline (To_Timespec);
- 
-    type struct_timeval is private;
- 
-    function To_Duration (TV : struct_timeval) return Duration;
-    pragma Inline (To_Duration);
- 
-    function To_Timeval (D : Duration) return struct_timeval;
-    pragma Inline (To_Timeval);
- 
-    -------------------------
-    -- Priority Scheduling --
-    -------------------------
- 
-    SCHED_FIFO  : constant := 1;
-    SCHED_RR    : constant := 2;
-    SCHED_OTHER : constant := 0;
- 
-    -------------
-    -- Process --
-    -------------
- 
-    type pid_t is private;
- 
-    function kill (pid : pid_t; sig : Signal) return int;
-    pragma Import (C, kill, "kill");
- 
-    function getpid return pid_t;
-    pragma Import (C, getpid, "getpid");
- 
-    ---------
-    -- LWP --
-    ---------
- 
-    function lwp_self return System.Address;
-    --  lwp_self does not exist on this thread library, revert to pthread_self
-    --  which is the closest approximation (with getpid). This function is
-    --  needed to share 7staprop.adb across POSIX-like targets.
-    pragma Import (C, lwp_self, "pthread_self");
- 
-    -------------
-    -- Threads --
-    -------------
- 
-    type Thread_Body is access
-      function (arg : System.Address) return System.Address;
- 
-    type pthread_t           is private;
-    subtype Thread_Id        is pthread_t;
- 
-    type pthread_mutex_t     is limited private;
-    type pthread_cond_t      is limited private;
-    type pthread_attr_t      is limited private;
-    type pthread_mutexattr_t is limited private;
-    type pthread_condattr_t  is limited private;
-    type pthread_key_t       is new Interfaces.C.unsigned;
- 
-    PTHREAD_CREATE_DETACHED : constant := 0;
- 
-    -----------
-    -- Stack --
-    -----------
- 
-    Stack_Base_Available : constant Boolean := False;
-    --  Indicates wether the stack base is available on this target.
-    --  This allows us to share s-osinte.adb between all the FSU/RTEMS
-    --  run time.
-    --  Note that this value can only be true if pthread_t has a complete
-    --  definition that corresponds exactly to the C header files.
- 
-    function Get_Stack_Base (thread : pthread_t) return Address;
-    pragma Inline (Get_Stack_Base);
-    --  returns the stack base of the specified thread.
-    --  Only call this function when Stack_Base_Available is True.
- 
-    --  These two functions are only needed to share s-taprop.adb with
-    --  FSU threads.
- 
-    function Get_Page_Size return size_t;
-    function Get_Page_Size return Address;
-    --  returns the size of a page, or 0 if this is not relevant on this
-    --  target (which is the case for RTEMS)
- 
-    PROT_ON  : constant := 0;
-    PROT_OFF : constant := 0;
- 
-    function mprotect (addr : Address; len : size_t; prot : int) return int;
-    pragma Import (C, mprotect);
- 
-    -----------------------------------------
-    --  Nonstandard Thread Initialization  --
-    -----------------------------------------
- 
-    procedure pthread_init;
-    --  FSU_THREADS requires pthread_init, which is nonstandard
-    --  and this should be invoked during the elaboration of s-taprop.adb
-    --
-    --  RTEMS does not require this so we provide an empty Ada body.
- 
-    -------------------------
-    -- POSIX.1c  Section 3 --
-    -------------------------
- 
-    function sigwait
-      (set : access sigset_t;
-       sig : access Signal) return int;
-    pragma Import (C, sigwait, "sigwait");
- 
-    function pthread_kill
-      (thread : pthread_t;
-       sig    : Signal) return int;
-    pragma Import (C, pthread_kill, "pthread_kill");
- 
-    type sigset_t_ptr is access all sigset_t;
- 
-    function pthread_sigmask
-      (how  : int;
-       set  : sigset_t_ptr;
-       oset : sigset_t_ptr) return int;
-    pragma Import (C, pthread_sigmask, "pthread_sigmask");
- 
-    ----------------------------
-    --  POSIX.1c  Section 11  --
-    ----------------------------
- 
-    function pthread_mutexattr_init
-      (attr : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
- 
-    function pthread_mutexattr_destroy
-      (attr : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
- 
-    function pthread_mutex_init
-      (mutex : access pthread_mutex_t;
-       attr  : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
- 
-    function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
- 
-    function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_mutex_lock, "pthread_mutex_lock");
- 
-    function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_mutex_unlock, "pthread_mutex_unlock");
- 
-    function pthread_condattr_init
-      (attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
- 
-    function pthread_condattr_destroy
-      (attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
- 
-    function pthread_cond_init
-      (cond : access pthread_cond_t;
-       attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_cond_init, "pthread_cond_init");
- 
-    function pthread_cond_destroy (cond : access pthread_cond_t) return int;
-    pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
- 
-    function pthread_cond_signal (cond : access pthread_cond_t) return int;
-    pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
- 
-    function pthread_cond_wait
-      (cond  : access pthread_cond_t;
-       mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_cond_wait, "pthread_cond_wait");
- 
-    function pthread_cond_timedwait
-      (cond    : access pthread_cond_t;
-       mutex   : access pthread_mutex_t;
-       abstime : access timespec) return int;
-    pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait");
- 
-    Relative_Timed_Wait : constant Boolean := False;
-    --  pthread_cond_timedwait requires an absolute delay time
- 
-    --------------------------
-    -- POSIX.1c  Section 13 --
-    --------------------------
- 
-    PTHREAD_PRIO_NONE    : constant := 0;
-    PTHREAD_PRIO_PROTECT : constant := 2;
-    PTHREAD_PRIO_INHERIT : constant := 1;
- 
-    function pthread_mutexattr_setprotocol
-      (attr     : access pthread_mutexattr_t;
-       protocol : int) return int;
-    pragma Import (C, pthread_mutexattr_setprotocol);
- 
-    function pthread_mutexattr_setprioceiling
-      (attr     : access pthread_mutexattr_t;
-       prioceiling : int) return int;
-    pragma Import
-      (C, pthread_mutexattr_setprioceiling,
-       "pthread_mutexattr_setprioceiling");
- 
-    type struct_sched_param is record
-       sched_priority      : int;
-       ss_low_priority     : timespec;
-       ss_replenish_period : timespec;
-       ss_initial_budget   : timespec;
-    end record;
-    pragma Convention (C, struct_sched_param);
- 
-    function pthread_setschedparam
-      (thread : pthread_t;
-       policy : int;
-       param  : access struct_sched_param) return int;
-    pragma Import (C, pthread_setschedparam, "pthread_setschedparam");
- 
-    function pthread_attr_setscope
-      (attr            : access pthread_attr_t;
-       contentionscope : int) return int;
-    pragma Import (C, pthread_attr_setscope, "pthread_attr_setscope");
- 
-    function pthread_attr_setinheritsched
-      (attr         : access pthread_attr_t;
-       inheritsched : int) return int;
-    pragma Import (C, pthread_attr_setinheritsched);
- 
-    function pthread_attr_setschedpolicy
-      (attr   : access pthread_attr_t;
-       policy : int) return int;
-    pragma Import (C, pthread_attr_setschedpolicy);
- 
-    function pthread_attr_setschedparam
-      (attr        : access pthread_attr_t;
-       sched_param : int) return int;
-    pragma Import (C, pthread_attr_setschedparam);
- 
-    function sched_yield return int;
-    pragma Import (C, sched_yield, "sched_yield");
- 
-    ---------------------------
-    -- P1003.1c - Section 16 --
-    ---------------------------
- 
-    function pthread_attr_init (attributes : access pthread_attr_t) return int;
-    pragma Import (C, pthread_attr_init, "pthread_attr_init");
- 
-    function pthread_attr_destroy
-      (attributes : access pthread_attr_t) return int;
-    pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
- 
-    function pthread_attr_setdetachstate
-      (attr        : access pthread_attr_t;
-       detachstate : int) return int;
-    pragma Import (C, pthread_attr_setdetachstate);
- 
-    function pthread_attr_setstacksize
-      (attr      : access pthread_attr_t;
-       stacksize : size_t) return int;
-    pragma Import (C, pthread_attr_setstacksize, "pthread_attr_setstacksize");
- 
-    function pthread_create
-      (thread        : access pthread_t;
-       attributes    : access pthread_attr_t;
-       start_routine : Thread_Body;
-       arg           : System.Address) return int;
-    pragma Import (C, pthread_create, "pthread_create");
- 
-    procedure pthread_exit (status : System.Address);
-    pragma Import (C, pthread_exit, "pthread_exit");
- 
-    function pthread_self return pthread_t;
-    pragma Import (C, pthread_self, "pthread_self");
- 
-    --------------------------
-    -- POSIX.1c  Section 17 --
-    --------------------------
- 
-    function pthread_setspecific
-      (key   : pthread_key_t;
-       value : System.Address) return int;
-    pragma Import (C, pthread_setspecific, "pthread_setspecific");
- 
-    function pthread_getspecific (key : pthread_key_t) return System.Address;
-    pragma Import (C, pthread_getspecific, "pthread_getspecific");
- 
-    type destructor_pointer is access procedure (arg : System.Address);
- 
-    function pthread_key_create
-      (key        : access pthread_key_t;
-       destructor : destructor_pointer) return int;
-    pragma Import (C, pthread_key_create, "pthread_key_create");
- 
- private
- 
-    type sigset_t is new int;
- 
-    type pid_t is new int;
- 
-    type time_t is new long;
- 
-    type timespec is record
-       tv_sec  : time_t;
-       tv_nsec : long;
-    end record;
-    pragma Convention (C, timespec);
- 
-    type clockid_t is new rtems_id;
-    CLOCK_REALTIME : constant clockid_t := 1;
- 
-    type struct_timeval is record
-       tv_sec  : int;
-       tv_usec : int;
-    end record;
-    pragma Convention (C, struct_timeval);
- 
-    type pthread_attr_t is record
-       is_initialized  : int;
-       stackaddr       : System.Address;
-       stacksize       : int;
-       contentionscope : int;
-       inheritsched    : int;
-       schedpolicy     : int;
-       schedparam      : struct_sched_param;
-       cputime_clocked_allowed : int;
-       deatchstate     : int;
-    end record;
-    pragma Convention (C, pthread_attr_t);
- 
-    type pthread_condattr_t is record
-       flags        : int;
-    end record;
-    pragma Convention (C, pthread_condattr_t);
- 
-    type pthread_mutexattr_t is record
-       is_initialized  : int;
-       process_shared  : int;
-       prio_ceiling    : int;
-       protocol        : int;
-       recursive       : int;
-    end record;
-    pragma Convention (C, pthread_mutexattr_t);
- 
-    type pthread_t is new rtems_id;
- 
-    type pthread_mutex_t is new rtems_id;
- 
-    type pthread_cond_t is new rtems_id;
- 
- end System.OS_Interface;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5rparame.adb gcc-4.0.0/gcc/ada/5rparame.adb
*** gcc-3.4.3/gcc/ada/5rparame.adb	Thu Apr 24 17:53:51 2003
--- gcc-4.0.0/gcc/ada/5rparame.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,80 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                    S Y S T E M . P A R A M E T E R S                     --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --          Copyright (C) 1997-1998 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the RTEMS specific version
- 
- with Interfaces.C;
- 
- package body System.Parameters is
- 
-    function ada_pthread_minimum_stack_size return Interfaces.C.size_t;
-    pragma Import (C, ada_pthread_minimum_stack_size,
-      "_ada_pthread_minimum_stack_size");
- 
-    ------------------------
-    -- Default_Stack_Size --
-    ------------------------
- 
-    function Default_Stack_Size return Size_Type is
-    begin
-       return Size_Type (ada_pthread_minimum_stack_size);
-    end Default_Stack_Size;
- 
-    ------------------------
-    -- Minimum_Stack_Size --
-    ------------------------
- 
-    function Minimum_Stack_Size return Size_Type is
- 
-    begin
-       return Size_Type (ada_pthread_minimum_stack_size);
-    end Minimum_Stack_Size;
- 
-    -------------------------
-    -- Adjust_Storage_Size --
-    -------------------------
- 
-    function Adjust_Storage_Size (Size : Size_Type) return Size_Type is
-    begin
-       if Size = Unspecified_Size then
-          return Default_Stack_Size;
- 
-       elsif Size < Minimum_Stack_Size then
-          return Minimum_Stack_Size;
- 
-       else
-          return Size;
-       end if;
-    end Adjust_Storage_Size;
- 
- end System.Parameters;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5rtpopsp.adb gcc-4.0.0/gcc/ada/5rtpopsp.adb
*** gcc-3.4.3/gcc/ada/5rtpopsp.adb	Thu Apr  8 17:40:05 2004
--- gcc-4.0.0/gcc/ada/5rtpopsp.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,116 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --    S Y S T E M . T A S K _ P R I M I T I V E S . O P E R A T I O N S .   --
- --                              S P E C I F I C                             --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --                             $Revision: 1.2 $
- --                                                                          --
- --            Copyright (C) 1991-2003, Florida State University             --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University. It is --
- -- now maintained by Ada Core Technologies Inc. in cooperation with Florida --
- -- State University (http://www.gnat.com).                                  --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a RTEMS version of this package which uses a special
- --  variable for Ada self which is contexted switch implicitly by RTEMS.
- --
- --  This is the same as the POSIX version except that an RTEMS variable
- --  is used instead of a POSIX key.
- 
- separate (System.Task_Primitives.Operations)
- package body Specific is
- 
-    --  The following gives the Ada run-time direct access to a variable
-    --  context switched by RTEMS at the lowest level.
- 
-    RTEMS_Ada_Self : System.Address;
-    pragma Import (C, RTEMS_Ada_Self, "rtems_ada_self");
- 
-    ----------------
-    -- Initialize --
-    ----------------
- 
-    procedure Initialize (Environment_Task : Task_ID) is
-       pragma Warnings (Off, Environment_Task);
-       Result : Interfaces.C.int;
- 
-    begin
-       RTEMS_Ada_Self := To_Address (Environment_Task);
-    end Initialize;
- 
-    -------------------
-    -- Is_Valid_Task --
-    -------------------
- 
-    function Is_Valid_Task return Boolean is
-    begin
-       return RTEMS_Ada_Self /= System.Null_Address;
-    end Is_Valid_Task;
- 
-    ---------
-    -- Set --
-    ---------
- 
-    procedure Set (Self_Id : Task_ID) is
-       Result : Interfaces.C.int;
-    begin
-       RTEMS_Ada_Self := To_Address (Self_Id);
-    end Set;
- 
-    ----------
-    -- Self --
-    ----------
- 
-    --  To make Ada tasks and C threads interoperate better, we have added some
-    --  functionality to Self. Suppose a C main program (with threads) calls an
-    --  Ada procedure and the Ada procedure calls the tasking runtime system.
-    --  Eventually, a call will be made to self. Since the call is not coming
-    --  from an Ada task, there will be no corresponding ATCB.
- 
-    --  What we do in Self is to catch references that do not come from
-    --  recognized Ada tasks, and create an ATCB for the calling thread.
- 
-    --  The new ATCB will be "detached" from the normal Ada task master
-    --  hierarchy, much like the existing implicitly created signal-server
-    --  tasks.
- 
-    function Self return Task_ID is
-       Result : System.Address;
- 
-    begin
-       Result := RTEMS_Ada_Self;
- 
-       --  If the key value is Null, then it is a non-Ada task.
- 
-       if Result /= System.Null_Address then
-          return To_Task_Id (Result);
-       else
-          return Register_Foreign_Thread;
-       end if;
-    end Self;
- 
- end Specific;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5sintman.adb gcc-4.0.0/gcc/ada/5sintman.adb
*** gcc-3.4.3/gcc/ada/5sintman.adb	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5sintman.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,263 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --           S Y S T E M . I N T E R R U P T _ M A N A G E M E N T          --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a Solaris version of this package.
- 
- --  PLEASE DO NOT add any dependences on other packages.
- --  This package is designed to work with or without tasking support.
- 
- --  Make a careful study of all signals available under the OS,
- --  to see which need to be reserved, kept always unmasked,
- --  or kept always unmasked.
- 
- --  Be on the lookout for special signals that
- --  may be used by the thread library.
- 
- with Interfaces.C;
- --  used for int
- 
- with System.OS_Interface;
- --  used for various Constants, Signal and types
- 
- package body System.Interrupt_Management is
- 
-    use Interfaces.C;
-    use System.OS_Interface;
- 
-    type Interrupt_List is array (Interrupt_ID range <>) of Interrupt_ID;
- 
-    Exception_Interrupts : constant Interrupt_List :=
-      (SIGFPE, SIGILL, SIGSEGV, SIGBUS);
- 
-    Unreserve_All_Interrupts : Interfaces.C.int;
-    pragma Import
-      (C, Unreserve_All_Interrupts, "__gl_unreserve_all_interrupts");
- 
-    ----------------------
-    -- Notify_Exception --
-    ----------------------
- 
-    --  This function identifies the Ada exception to be raised using
-    --  the information when the system received a synchronous signal.
-    --  Since this function is machine and OS dependent, different code
-    --  has to be provided for different target.
- 
-    procedure Notify_Exception
-      (signo   : Signal;
-       info    : access siginfo_t;
-       context : access ucontext_t);
- 
-    ----------------------
-    -- Notify_Exception --
-    ----------------------
- 
-    procedure Notify_Exception
-      (signo   : Signal;
-       info    : access siginfo_t;
-       context : access ucontext_t)
-    is
-       pragma Warnings (Off, context);
- 
-    begin
-       --  Check that treatment of exception propagation here
-       --  is consistent with treatment of the abort signal in
-       --  System.Task_Primitives.Operations.
- 
-       case signo is
-          when SIGFPE =>
-             case info.si_code is
-                when  FPE_INTDIV |
-                      FPE_INTOVF |
-                      FPE_FLTDIV |
-                      FPE_FLTOVF |
-                      FPE_FLTUND |
-                      FPE_FLTRES |
-                      FPE_FLTINV |
-                      FPE_FLTSUB =>
- 
-                   raise Constraint_Error;
- 
-                when others =>
-                   pragma Assert (False);
-                   null;
-             end case;
- 
-          when SIGILL | SIGSEGV | SIGBUS  =>
-             raise Storage_Error;
- 
-          when others =>
-             pragma Assert (False);
-             null;
-       end case;
-    end Notify_Exception;
- 
-    ---------------------------
-    -- Initialize_Interrupts --
-    ---------------------------
- 
-    --  Nothing needs to be done on this platform.
- 
-    procedure Initialize_Interrupts is
-    begin
-       null;
-    end Initialize_Interrupts;
- 
- ----------------------------
- -- Package Initialization --
- ----------------------------
- 
- begin
-    declare
-       act     : aliased struct_sigaction;
-       old_act : aliased struct_sigaction;
-       mask    : aliased sigset_t;
-       Result  : Interfaces.C.int;
- 
-       function State (Int : Interrupt_ID) return Character;
-       pragma Import (C, State, "__gnat_get_interrupt_state");
-       --  Get interrupt state.  Defined in a-init.c
-       --  The input argument is the interrupt number,
-       --  and the result is one of the following:
-       --
-       User    : constant Character := 'u';
-       Runtime : constant Character := 'r';
-       Default : constant Character := 's';
-       --    'n'   this interrupt not set by any Interrupt_State pragma
-       --    'u'   Interrupt_State pragma set state to User
-       --    'r'   Interrupt_State pragma set state to Runtime
-       --    's'   Interrupt_State pragma set state to System (use "default"
-       --           system handler)
- 
-    begin
-       --  Need to call pthread_init very early because it is doing signal
-       --  initializations.
- 
-       pthread_init;
- 
-       --  Change this if you want to use another signal for task abort.
-       --  SIGTERM might be a good one.
- 
-       Abort_Task_Interrupt := SIGABRT;
- 
-       act.sa_handler := Notify_Exception'Address;
- 
-       --  Set sa_flags to SA_NODEFER so that during the handler execution
-       --  we do not change the Signal_Mask to be masked for the Signal.
-       --  This is a temporary fix to the problem that the Signal_Mask is
-       --  not restored after the exception (longjmp) from the handler.
-       --  The right fix should be made in sigsetjmp so that we save
-       --  the Signal_Set and restore it after a longjmp.
- 
-       --  In that case, this field should be changed back to 0. ??? (Dong-Ik)
- 
-       act.sa_flags := 16;
- 
-       Result := sigemptyset (mask'Access);
-       pragma Assert (Result = 0);
- 
-       --  ??? For the same reason explained above, we can't mask these
-       --  signals because otherwise we won't be able to catch more than
-       --  one signal.
- 
-       act.sa_mask := mask;
- 
-       pragma Assert (Keep_Unmasked = (Interrupt_ID'Range => False));
-       pragma Assert (Reserve = (Interrupt_ID'Range => False));
- 
-       for J in Exception_Interrupts'Range loop
-          if State (Exception_Interrupts (J)) /= User then
-             Keep_Unmasked (Exception_Interrupts (J)) := True;
-             Reserve (Exception_Interrupts (J)) := True;
- 
-             if State (Exception_Interrupts (J)) /= Default then
-                Result :=
-                  sigaction
-                  (Signal (Exception_Interrupts (J)), act'Unchecked_Access,
-                   old_act'Unchecked_Access);
-                pragma Assert (Result = 0);
-             end if;
-          end if;
-       end loop;
- 
-       if State (Abort_Task_Interrupt) /= User then
-          Keep_Unmasked (Abort_Task_Interrupt) := True;
-          Reserve (Abort_Task_Interrupt) := True;
-       end if;
- 
-       --  Set SIGINT to unmasked state as long as it's
-       --  not in "User" state.  Check for Unreserve_All_Interrupts last
- 
-       if State (SIGINT) /= User then
-          Keep_Unmasked (SIGINT) := True;
-          Reserve (SIGINT) := True;
-       end if;
- 
-       --  Check all signals for state that requires keeping them
-       --  unmasked and reserved
- 
-       for J in Interrupt_ID'Range loop
-          if State (J) = Default or else State (J) = Runtime then
-             Keep_Unmasked (J) := True;
-             Reserve (J) := True;
-          end if;
-       end loop;
- 
-       --  Add the set of signals that must always be unmasked for this target
- 
-       for J in Unmasked'Range loop
-          Keep_Unmasked (Interrupt_ID (Unmasked (J))) := True;
-          Reserve (Interrupt_ID (Unmasked (J))) := True;
-       end loop;
- 
-       --  Add target-specific reserved signals
- 
-       for J in Reserved'Range loop
-          Reserve (Interrupt_ID (Reserved (J))) := True;
-       end loop;
- 
-       --  Process pragma Unreserve_All_Interrupts. This overrides any
-       --  settings due to pragma Interrupt_State:
- 
-       if Unreserve_All_Interrupts /= 0 then
-          Keep_Unmasked (SIGINT) := False;
-          Reserve (SIGINT) := False;
-       end if;
- 
-       --  We do not have Signal 0 in reality. We just use this value
-       --  to identify not existing signals (see s-intnam.ads). Therefore,
-       --  Signal 0 should not be used in all signal related operations hence
-       --  mark it as reserved.
- 
-       Reserve (0) := True;
-    end;
- end System.Interrupt_Management;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5sml-tgt.adb gcc-4.0.0/gcc/ada/5sml-tgt.adb
*** gcc-3.4.3/gcc/ada/5sml-tgt.adb	Mon Jan  5 15:20:43 2004
--- gcc-4.0.0/gcc/ada/5sml-tgt.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,371 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                             M L I B . T G T                              --
- --                            (Solaris Version)                             --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --              Copyright (C) 2002-2003 Free Software Foundation, Inc.      --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package provides a set of target dependent routines to build
- --  static, dynamic and shared libraries.
- 
- --  This is the Solaris version of the body
- 
- with MLib.Fil;
- with MLib.Utl;
- with Namet;  use Namet;
- with Opt;
- with Output; use Output;
- with Prj.Com;
- with System;
- 
- package body MLib.Tgt is
- 
-    No_Arguments        : aliased Argument_List         := (1 .. 0 => null);
-    Empty_Argument_List : constant Argument_List_Access := No_Arguments'Access;
- 
-    Wl_Init_String : constant String         := "-Wl,-zinitarray=";
-    Wl_Fini_String : constant String         := "-Wl,-zfiniarray=";
- 
-    Init_Fini_List :  constant Argument_List_Access :=
-                        new Argument_List'(1 => null,
-                                           2 => null);
- 
-    --  Used to put switches for automatic elaboration/finalization
- 
-    ---------------------
-    -- Archive_Builder --
-    ---------------------
- 
-    function Archive_Builder return String is
-    begin
-       return "ar";
-    end Archive_Builder;
- 
-    -----------------------------
-    -- Archive_Builder_Options --
-    -----------------------------
- 
-    function Archive_Builder_Options return String_List_Access is
-    begin
-       return new String_List'(1 => new String'("cr"));
-    end Archive_Builder_Options;
- 
-    -----------------
-    -- Archive_Ext --
-    -----------------
- 
-    function Archive_Ext return  String is
-    begin
-       return "a";
-    end Archive_Ext;
- 
-    ---------------------
-    -- Archive_Indexer --
-    ---------------------
- 
-    function Archive_Indexer return String is
-    begin
-       return "ranlib";
-    end Archive_Indexer;
- 
-    ---------------------------
-    -- Build_Dynamic_Library --
-    ---------------------------
- 
-    procedure Build_Dynamic_Library
-      (Ofiles       : Argument_List;
-       Foreign      : Argument_List;
-       Afiles       : Argument_List;
-       Options      : Argument_List;
-       Interfaces   : Argument_List;
-       Lib_Filename : String;
-       Lib_Dir      : String;
-       Symbol_Data  : Symbol_Record;
-       Driver_Name  : Name_Id := No_Name;
-       Lib_Address  : String  := "";
-       Lib_Version  : String  := "";
-       Relocatable  : Boolean := False;
-       Auto_Init    : Boolean := False)
-    is
-       pragma Unreferenced (Foreign);
-       pragma Unreferenced (Afiles);
-       pragma Unreferenced (Interfaces);
-       pragma Unreferenced (Symbol_Data);
-       pragma Unreferenced (Lib_Address);
-       pragma Unreferenced (Relocatable);
- 
-       Lib_File : constant String :=
-         Lib_Dir & Directory_Separator & "lib" &
-         Fil.Ext_To (Lib_Filename, DLL_Ext);
- 
-       Version_Arg          : String_Access;
-       Symbolic_Link_Needed : Boolean := False;
- 
-       Init_Fini : Argument_List_Access := Empty_Argument_List;
- 
-    begin
-       if Opt.Verbose_Mode then
-          Write_Str ("building relocatable shared library ");
-          Write_Line (Lib_File);
-       end if;
- 
-       --  If specified, add automatic elaboration/finalization
-       if Auto_Init then
-          Init_Fini := Init_Fini_List;
-          Init_Fini (1) :=
-            new String'(Wl_Init_String & Lib_Filename & "init");
-          Init_Fini (2) :=
-            new String'(Wl_Fini_String & Lib_Filename & "final");
-       end if;
- 
-       if Lib_Version = "" then
-          Utl.Gcc
-            (Output_File => Lib_File,
-             Objects     => Ofiles,
-             Options     => Options & Init_Fini.all,
-             Driver_Name => Driver_Name);
- 
-       else
-          Version_Arg := new String'("-Wl,-h," & Lib_Version);
- 
-          if Is_Absolute_Path (Lib_Version) then
-             Utl.Gcc
-               (Output_File => Lib_Version,
-                Objects     => Ofiles,
-                Options     => Options & Version_Arg & Init_Fini.all,
-                Driver_Name => Driver_Name);
-             Symbolic_Link_Needed := Lib_Version /= Lib_File;
- 
-          else
-             Utl.Gcc
-               (Output_File => Lib_Dir & Directory_Separator & Lib_Version,
-                Objects     => Ofiles,
-                Options     => Options & Version_Arg & Init_Fini.all,
-                Driver_Name => Driver_Name);
-             Symbolic_Link_Needed :=
-               Lib_Dir & Directory_Separator & Lib_Version /= Lib_File;
-          end if;
- 
-          if Symbolic_Link_Needed then
-             declare
-                Success : Boolean;
-                Oldpath : String (1 .. Lib_Version'Length + 1);
-                Newpath : String (1 .. Lib_File'Length + 1);
- 
-                Result : Integer;
-                pragma Unreferenced (Result);
- 
-                function Symlink
-                  (Oldpath : System.Address;
-                   Newpath : System.Address)
-                   return    Integer;
-                pragma Import (C, Symlink, "__gnat_symlink");
- 
-             begin
-                Oldpath (1 .. Lib_Version'Length) := Lib_Version;
-                Oldpath (Oldpath'Last)            := ASCII.NUL;
-                Newpath (1 .. Lib_File'Length)    := Lib_File;
-                Newpath (Newpath'Last)            := ASCII.NUL;
- 
-                Delete_File (Lib_File, Success);
- 
-                Result := Symlink (Oldpath'Address, Newpath'Address);
-             end;
-          end if;
-       end if;
-    end Build_Dynamic_Library;
- 
-    -------------------------
-    -- Default_DLL_Address --
-    -------------------------
- 
-    function Default_DLL_Address return String is
-    begin
-       return "";
-    end Default_DLL_Address;
- 
-    -------------
-    -- DLL_Ext --
-    -------------
- 
-    function DLL_Ext return String is
-    begin
-       return "so";
-    end DLL_Ext;
- 
-    --------------------
-    -- Dynamic_Option --
-    --------------------
- 
-    function Dynamic_Option return String is
-    begin
-       return "-shared";
-    end Dynamic_Option;
- 
-    -------------------
-    -- Is_Object_Ext --
-    -------------------
- 
-    function Is_Object_Ext (Ext : String) return Boolean is
-    begin
-       return Ext = ".o";
-    end Is_Object_Ext;
- 
-    --------------
-    -- Is_C_Ext --
-    --------------
- 
-    function Is_C_Ext (Ext : String) return Boolean is
-    begin
-       return Ext = ".c";
-    end Is_C_Ext;
- 
-    --------------------
-    -- Is_Archive_Ext --
-    --------------------
- 
-    function Is_Archive_Ext (Ext : String) return Boolean is
-    begin
-       return Ext = ".a" or else Ext = ".so";
-    end Is_Archive_Ext;
- 
-    -------------
-    -- Libgnat --
-    -------------
- 
-    function Libgnat return String is
-    begin
-       return "libgnat.a";
-    end Libgnat;
- 
-    ------------------------
-    -- Library_Exists_For --
-    ------------------------
- 
-    function Library_Exists_For (Project : Project_Id) return Boolean is
-    begin
-       if not Projects.Table (Project).Library then
-          Prj.Com.Fail ("INTERNAL ERROR: Library_Exists_For called " &
-                        "for non library project");
-          return False;
- 
-       else
-          declare
-             Lib_Dir : constant String :=
-               Get_Name_String (Projects.Table (Project).Library_Dir);
-             Lib_Name : constant String :=
-               Get_Name_String (Projects.Table (Project).Library_Name);
- 
-          begin
-             if Projects.Table (Project).Library_Kind = Static then
-                return Is_Regular_File
-                  (Lib_Dir & Directory_Separator & "lib" &
-                   Fil.Ext_To (Lib_Name, Archive_Ext));
- 
-             else
-                return Is_Regular_File
-                  (Lib_Dir & Directory_Separator & "lib" &
-                   Fil.Ext_To (Lib_Name, DLL_Ext));
-             end if;
-          end;
-       end if;
-    end Library_Exists_For;
- 
-    ---------------------------
-    -- Library_File_Name_For --
-    ---------------------------
- 
-    function Library_File_Name_For (Project : Project_Id) return Name_Id is
-    begin
-       if not Projects.Table (Project).Library then
-          Prj.Com.Fail ("INTERNAL ERROR: Library_File_Name_For called " &
-                        "for non library project");
-          return No_Name;
- 
-       else
-          declare
-             Lib_Name : constant String :=
-               Get_Name_String (Projects.Table (Project).Library_Name);
- 
-          begin
-             Name_Len := 3;
-             Name_Buffer (1 .. Name_Len) := "lib";
- 
-             if Projects.Table (Project).Library_Kind = Static then
-                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, Archive_Ext));
- 
-             else
-                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, DLL_Ext));
-             end if;
- 
-             return Name_Find;
-          end;
-       end if;
-    end Library_File_Name_For;
- 
-    --------------------------------
-    -- Linker_Library_Path_Option --
-    --------------------------------
- 
-    function Linker_Library_Path_Option return String_Access is
-    begin
-       return new String'("-Wl,-R,");
-    end Linker_Library_Path_Option;
- 
-    ----------------
-    -- Object_Ext --
-    ----------------
- 
-    function Object_Ext return String is
-    begin
-       return "o";
-    end Object_Ext;
- 
-    ----------------
-    -- PIC_Option --
-    ----------------
- 
-    function PIC_Option return String is
-    begin
-       return "-fPIC";
-    end PIC_Option;
- 
-    -----------------------------------------------
-    -- Standalone_Library_Auto_Init_Is_Supported --
-    -----------------------------------------------
- 
-    function Standalone_Library_Auto_Init_Is_Supported return Boolean is
-    begin
-       return True;
-    end Standalone_Library_Auto_Init_Is_Supported;
- 
-    ---------------------------
-    -- Support_For_Libraries --
-    ---------------------------
- 
-    function Support_For_Libraries return Library_Support is
-    begin
-       return Full;
-    end Support_For_Libraries;
- 
- end MLib.Tgt;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5sosinte.adb gcc-4.0.0/gcc/ada/5sosinte.adb
*** gcc-3.4.3/gcc/ada/5sosinte.adb	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5sosinte.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,100 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   S Y S T E M . O S _ I N T E R F A C E                  --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --             Copyright (C) 1991-1994, Florida State University            --
- --             Copyright (C) 1995-2003, Ada Core Technologies               --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a Solaris version of this package.
- 
- --  This package encapsulates all direct interfaces to OS services
- --  that are needed by children of System.
- 
- pragma Polling (Off);
- --  Turn off polling, we do not want ATC polling to take place during
- --  tasking operations. It causes infinite loops and other problems.
- 
- with Interfaces.C; use Interfaces.C;
- package body System.OS_Interface is
- 
-    -----------------
-    -- To_Duration --
-    -----------------
- 
-    function To_Duration (TS : timespec) return Duration is
-    begin
-       return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9;
-    end To_Duration;
- 
-    -----------------
-    -- To_Timespec --
-    -----------------
- 
-    function To_Timespec (D : Duration) return timespec is
-       S : time_t;
-       F : Duration;
-    begin
-       S := time_t (Long_Long_Integer (D));
-       F := D - Duration (S);
- 
-       --  If F has negative value due to a round-up, adjust for positive F
-       --  value.
-       if F < 0.0 then S := S - 1; F := F + 1.0; end if;
-       return timespec'(tv_sec  => S,
-                        tv_nsec => long (Long_Long_Integer (F * 10#1#E9)));
-    end To_Timespec;
- 
-    function To_Duration (TV : struct_timeval) return Duration is
-    begin
-       return Duration (TV.tv_sec) + Duration (TV.tv_usec) / 10#1#E6;
-    end To_Duration;
- 
-    function To_Timeval (D : Duration) return struct_timeval is
-       S : long;
-       F : Duration;
-    begin
-       S := long (Long_Long_Integer (D));
-       F := D - Duration (S);
- 
-       --  If F has negative value due to a round-up, adjust for positive F
-       --  value.
-       if F < 0.0 then S := S - 1; F := F + 1.0; end if;
-       return
-         struct_timeval'
-           (tv_sec  => S,
-            tv_usec => long (Long_Long_Integer (F * 10#1#E6)));
-    end To_Timeval;
- 
-    procedure pthread_init is
-    begin
-       null;
-    end pthread_init;
- 
- end System.OS_Interface;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5sosinte.ads gcc-4.0.0/gcc/ada/5sosinte.ads
*** gcc-3.4.3/gcc/ada/5sosinte.ads	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5sosinte.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,563 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   S Y S T E M . O S _ I N T E R F A C E                  --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --          Copyright (C) 1997-2002 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a Solaris (native) version of this package
- 
- --  This package includes all direct interfaces to OS services
- --  that are needed by children of System.
- 
- --  PLEASE DO NOT add any with-clauses to this package
- --  or remove the pragma Elaborate_Body.
- --  It is designed to be a bottom-level (leaf) package.
- 
- with Interfaces.C;
- package System.OS_Interface is
-    pragma Preelaborate;
- 
-    pragma Linker_Options ("-lposix4");
-    pragma Linker_Options ("-lthread");
- 
-    subtype int            is Interfaces.C.int;
-    subtype short          is Interfaces.C.short;
-    subtype long           is Interfaces.C.long;
-    subtype unsigned       is Interfaces.C.unsigned;
-    subtype unsigned_short is Interfaces.C.unsigned_short;
-    subtype unsigned_long  is Interfaces.C.unsigned_long;
-    subtype unsigned_char  is Interfaces.C.unsigned_char;
-    subtype plain_char     is Interfaces.C.plain_char;
-    subtype size_t         is Interfaces.C.size_t;
- 
-    -----------
-    -- Errno --
-    -----------
- 
-    function errno return int;
-    pragma Import (C, errno, "__get_errno");
- 
-    EAGAIN    : constant := 11;
-    EINTR     : constant := 4;
-    EINVAL    : constant := 22;
-    ENOMEM    : constant := 12;
-    ETIME     : constant := 62;
-    ETIMEDOUT : constant := 145;
- 
-    -------------
-    -- Signals --
-    -------------
- 
-    Max_Interrupt : constant := 45;
-    type Signal is new int range 0 .. Max_Interrupt;
-    for Signal'Size use int'Size;
- 
-    SIGHUP     : constant := 1; --  hangup
-    SIGINT     : constant := 2; --  interrupt (rubout)
-    SIGQUIT    : constant := 3; --  quit (ASCD FS)
-    SIGILL     : constant := 4; --  illegal instruction (not reset)
-    SIGTRAP    : constant := 5; --  trace trap (not reset)
-    SIGIOT     : constant := 6; --  IOT instruction
-    SIGABRT    : constant := 6; --  used by abort, replace SIGIOT in the  future
-    SIGEMT     : constant := 7; --  EMT instruction
-    SIGFPE     : constant := 8; --  floating point exception
-    SIGKILL    : constant := 9; --  kill (cannot be caught or ignored)
-    SIGBUS     : constant := 10; --  bus error
-    SIGSEGV    : constant := 11; --  segmentation violation
-    SIGSYS     : constant := 12; --  bad argument to system call
-    SIGPIPE    : constant := 13; --  write on a pipe with no one to read it
-    SIGALRM    : constant := 14; --  alarm clock
-    SIGTERM    : constant := 15; --  software termination signal from kill
-    SIGUSR1    : constant := 16; --  user defined signal 1
-    SIGUSR2    : constant := 17; --  user defined signal 2
-    SIGCLD     : constant := 18; --  alias for SIGCHLD
-    SIGCHLD    : constant := 18; --  child status change
-    SIGPWR     : constant := 19; --  power-fail restart
-    SIGWINCH   : constant := 20; --  window size change
-    SIGURG     : constant := 21; --  urgent condition on IO channel
-    SIGPOLL    : constant := 22; --  pollable event occurred
-    SIGIO      : constant := 22; --  I/O possible (Solaris SIGPOLL alias)
-    SIGSTOP    : constant := 23; --  stop (cannot be caught or ignored)
-    SIGTSTP    : constant := 24; --  user stop requested from tty
-    SIGCONT    : constant := 25; --  stopped process has been continued
-    SIGTTIN    : constant := 26; --  background tty read attempted
-    SIGTTOU    : constant := 27; --  background tty write attempted
-    SIGVTALRM  : constant := 28; --  virtual timer expired
-    SIGPROF    : constant := 29; --  profiling timer expired
-    SIGXCPU    : constant := 30; --  CPU time limit exceeded
-    SIGXFSZ    : constant := 31; --  filesize limit exceeded
-    SIGWAITING : constant := 32; --  process's lwps blocked (Solaris)
-    SIGLWP     : constant := 33; --  used by thread library (Solaris)
-    SIGFREEZE  : constant := 34; --  used by CPR (Solaris)
-    SIGTHAW    : constant := 35; --  used by CPR (Solaris)
-    SIGCANCEL  : constant := 36; --  thread cancellation signal (libthread)
- 
-    type Signal_Set is array (Natural range <>) of Signal;
- 
-    Unmasked : constant Signal_Set := (SIGTRAP, SIGLWP, SIGPROF);
- 
-    --  Following signals should not be disturbed.
-    --  See c-posix-signals.c in FLORIST
- 
-    Reserved : constant Signal_Set :=
-      (SIGKILL, SIGSTOP, SIGWAITING, SIGCANCEL, SIGTRAP, SIGSEGV);
- 
-    type sigset_t is private;
- 
-    function sigaddset (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigaddset, "sigaddset");
- 
-    function sigdelset (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigdelset, "sigdelset");
- 
-    function sigfillset (set : access sigset_t) return int;
-    pragma Import (C, sigfillset, "sigfillset");
- 
-    function sigismember (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigismember, "sigismember");
- 
-    function sigemptyset (set : access sigset_t) return int;
-    pragma Import (C, sigemptyset, "sigemptyset");
- 
-    type union_type_3 is new String (1 .. 116);
-    type siginfo_t is record
-       si_signo     : int;
-       si_code      : int;
-       si_errno     : int;
-       X_data       : union_type_3;
-    end record;
-    pragma Convention (C, siginfo_t);
- 
-    --  The types mcontext_t and gregset_t are part of the ucontext_t
-    --  information, which is specific to Solaris2.4 for SPARC
-    --  The ucontext_t info seems to be used by the handler
-    --  for SIGSEGV to decide whether it is a Storage_Error (stack overflow) or
-    --  a Constraint_Error (bad pointer).  The original code that did this
-    --  is suspect, so it is not clear whether we really need this part of
-    --  the signal context information, or perhaps something else.
-    --  More analysis is needed, after which these declarations may need to
-    --  be changed.
- 
-    FPE_INTDIV  : constant := 1; --  integer divide by zero
-    FPE_INTOVF  : constant := 2; --  integer overflow
-    FPE_FLTDIV  : constant := 3; --  floating point divide by zero
-    FPE_FLTOVF  : constant := 4; --  floating point overflow
-    FPE_FLTUND  : constant := 5; --  floating point underflow
-    FPE_FLTRES  : constant := 6; --  floating point inexact result
-    FPE_FLTINV  : constant := 7; --  invalid floating point operation
-    FPE_FLTSUB  : constant := 8; --  subscript out of range
- 
-    type greg_t is new int;
- 
-    type gregset_t is array (0 .. 18) of greg_t;
- 
-    type union_type_2 is new String (1 .. 128);
-    type record_type_1 is record
-       fpu_fr       : union_type_2;
-       fpu_q        : System.Address;
-       fpu_fsr      : unsigned;
-       fpu_qcnt     : unsigned_char;
-       fpu_q_entrysize  : unsigned_char;
-       fpu_en       : unsigned_char;
-    end record;
-    pragma Convention (C, record_type_1);
- 
-    type array_type_7 is array (Integer range 0 .. 20) of long;
-    type mcontext_t is record
-       gregs        : gregset_t;
-       gwins        : System.Address;
-       fpregs       : record_type_1;
-       filler       : array_type_7;
-    end record;
-    pragma Convention (C, mcontext_t);
- 
-    type record_type_2 is record
-       ss_sp        : System.Address;
-       ss_size      : int;
-       ss_flags     : int;
-    end record;
-    pragma Convention (C, record_type_2);
- 
-    type array_type_8 is array (Integer range 0 .. 22) of long;
-    type ucontext_t is record
-       uc_flags     : unsigned_long;
-       uc_link      : System.Address;
-       uc_sigmask   : sigset_t;
-       uc_stack     : record_type_2;
-       uc_mcontext  : mcontext_t;
-       uc_filler    : array_type_8;
-    end record;
-    pragma Convention (C, ucontext_t);
- 
-    type Signal_Handler is access procedure
-      (signo   : Signal;
-       info    : access siginfo_t;
-       context : access ucontext_t);
- 
-    type union_type_1 is new plain_char;
-    type array_type_2 is array (Integer range 0 .. 1) of int;
-    type struct_sigaction is record
-       sa_flags   : int;
-       sa_handler : System.Address;
-       sa_mask    : sigset_t;
-       sa_resv    : array_type_2;
-    end record;
-    pragma Convention (C, struct_sigaction);
-    type struct_sigaction_ptr is access all struct_sigaction;
- 
-    SIG_BLOCK   : constant := 1;
-    SIG_UNBLOCK : constant := 2;
-    SIG_SETMASK : constant := 3;
- 
-    SIG_DFL : constant := 0;
-    SIG_IGN : constant := 1;
- 
-    function sigaction
-      (sig  : Signal;
-       act  : struct_sigaction_ptr;
-       oact : struct_sigaction_ptr) return int;
-    pragma Import (C, sigaction, "sigaction");
- 
-    ----------
-    -- Time --
-    ----------
- 
-    type timespec is private;
- 
-    type clockid_t is private;
- 
-    CLOCK_REALTIME : constant clockid_t;
- 
-    function clock_gettime
-      (clock_id : clockid_t; tp : access timespec) return int;
-    pragma Import (C, clock_gettime, "clock_gettime");
- 
-    function clock_getres
-      (clock_id : clockid_t; res : access timespec) return int;
-    pragma Import (C, clock_getres, "clock_getres");
- 
-    function To_Duration (TS : timespec) return Duration;
-    pragma Inline (To_Duration);
- 
-    function To_Timespec (D : Duration) return timespec;
-    pragma Inline (To_Timespec);
- 
-    type struct_timeval is private;
-    --  This is needed on systems that do not have clock_gettime()
-    --  but do have gettimeofday().
- 
-    function To_Duration (TV : struct_timeval) return Duration;
-    pragma Inline (To_Duration);
- 
-    function To_Timeval (D : Duration) return struct_timeval;
-    pragma Inline (To_Timeval);
- 
-    -------------
-    -- Process --
-    -------------
- 
-    type pid_t is private;
- 
-    function kill (pid : pid_t; sig : Signal) return int;
-    pragma Import (C, kill, "kill");
- 
-    function getpid return pid_t;
-    pragma Import (C, getpid, "getpid");
- 
-    -------------
-    -- Threads --
-    -------------
- 
-    type Thread_Body is access
-      function (arg : System.Address) return System.Address;
- 
-    THR_DETACHED  : constant := 64;
-    THR_BOUND     : constant := 1;
-    THR_NEW_LWP   : constant := 2;
-    USYNC_THREAD  : constant := 0;
- 
-    type thread_t is private;
-    subtype Thread_Id is thread_t;
- 
-    type mutex_t is limited private;
- 
-    type cond_t is limited private;
- 
-    type thread_key_t is private;
- 
-    function thr_create
-      (stack_base    : System.Address;
-       stack_size    : size_t;
-       start_routine : Thread_Body;
-       arg           : System.Address;
-       flags         : int;
-       new_thread    : access thread_t) return int;
-    pragma Import (C, thr_create, "thr_create");
- 
-    function thr_min_stack return size_t;
-    pragma Import (C, thr_min_stack, "thr_min_stack");
- 
-    function thr_self return thread_t;
-    pragma Import (C, thr_self, "thr_self");
- 
-    function mutex_init
-      (mutex : access mutex_t;
-       mtype : int;
-       arg   : System.Address) return int;
-    pragma Import (C, mutex_init, "mutex_init");
- 
-    function mutex_destroy (mutex : access mutex_t) return int;
-    pragma Import (C, mutex_destroy, "mutex_destroy");
- 
-    function mutex_lock (mutex : access mutex_t) return int;
-    pragma Import (C, mutex_lock, "mutex_lock");
- 
-    function mutex_unlock (mutex : access mutex_t) return int;
-    pragma Import (C, mutex_unlock, "mutex_unlock");
- 
-    function cond_init
-      (cond  : access cond_t;
-       ctype : int;
-       arg   : int) return int;
-    pragma Import (C, cond_init, "cond_init");
- 
-    function cond_wait
-      (cond : access cond_t; mutex : access mutex_t) return int;
-    pragma Import (C, cond_wait, "cond_wait");
- 
-    function cond_timedwait
-      (cond    : access cond_t;
-       mutex   : access mutex_t;
-       abstime : access timespec) return int;
-    pragma Import (C, cond_timedwait, "cond_timedwait");
- 
-    function cond_signal (cond : access cond_t) return int;
-    pragma Import (C, cond_signal, "cond_signal");
- 
-    function cond_destroy (cond : access cond_t) return int;
-    pragma Import (C, cond_destroy, "cond_destroy");
- 
-    function thr_setspecific
-      (key : thread_key_t; value : System.Address) return int;
-    pragma Import (C, thr_setspecific, "thr_setspecific");
- 
-    function thr_getspecific
-      (key   : thread_key_t;
-       value : access System.Address) return int;
-    pragma Import (C, thr_getspecific, "thr_getspecific");
- 
-    function thr_keycreate
-      (key : access thread_key_t; destructor : System.Address) return int;
-    pragma Import (C, thr_keycreate, "thr_keycreate");
- 
-    function thr_setprio (thread : thread_t; priority : int) return int;
-    pragma Import (C, thr_setprio, "thr_setprio");
- 
-    procedure thr_exit (status : System.Address);
-    pragma Import (C, thr_exit, "thr_exit");
- 
-    function thr_setconcurrency (new_level : int) return int;
-    pragma Import (C, thr_setconcurrency, "thr_setconcurrency");
- 
-    function sigwait (set : access sigset_t; sig : access Signal) return int;
-    pragma Import (C, sigwait, "__posix_sigwait");
- 
-    function thr_kill (thread : thread_t; sig : Signal) return int;
-    pragma Import (C, thr_kill, "thr_kill");
- 
-    type sigset_t_ptr is access all sigset_t;
- 
-    function thr_sigsetmask
-      (how  : int;
-       set  : sigset_t_ptr;
-       oset : sigset_t_ptr) return int;
-    pragma Import (C, thr_sigsetmask, "thr_sigsetmask");
- 
-    function pthread_sigmask
-      (how  : int;
-       set  : sigset_t_ptr;
-       oset : sigset_t_ptr) return int;
-    pragma Import (C, pthread_sigmask, "thr_sigsetmask");
- 
-    function thr_suspend (target_thread : thread_t) return int;
-    pragma Import (C, thr_suspend, "thr_suspend");
- 
-    function thr_continue (target_thread : thread_t) return int;
-    pragma Import (C, thr_continue, "thr_continue");
- 
-    procedure thr_yield;
-    pragma Import (C, thr_yield, "thr_yield");
- 
-    ---------
-    -- LWP --
-    ---------
- 
-    P_PID   : constant := 0;
-    P_LWPID : constant := 8;
- 
-    PC_GETCID    : constant := 0;
-    PC_GETCLINFO : constant := 1;
-    PC_SETPARMS  : constant := 2;
-    PC_GETPARMS  : constant := 3;
-    PC_ADMIN     : constant := 4;
- 
-    PC_CLNULL : constant := -1;
- 
-    RT_NOCHANGE : constant := -1;
-    RT_TQINF    : constant := -2;
-    RT_TQDEF    : constant := -3;
- 
-    PC_CLNMSZ : constant := 16;
- 
-    PC_VERSION : constant := 1;
- 
-    type lwpid_t is new int;
- 
-    type pri_t is new short;
- 
-    type id_t is new long;
- 
-    P_MYID : constant := -1;
-    --  the specified LWP or process is the current one.
- 
-    type struct_pcinfo is record
-       pc_cid    : id_t;
-       pc_clname : String (1 .. PC_CLNMSZ);
-       rt_maxpri : short;
-    end record;
-    pragma Convention (C, struct_pcinfo);
- 
-    type struct_pcparms is record
-       pc_cid     : id_t;
-       rt_pri     : pri_t;
-       rt_tqsecs  : long;
-       rt_tqnsecs : long;
-    end record;
-    pragma Convention (C, struct_pcparms);
- 
-    function priocntl
-      (ver     : int;
-       id_type : int;
-       id      : lwpid_t;
-       cmd     : int;
-       arg     : System.Address) return Interfaces.C.long;
-    pragma Import (C, priocntl, "__priocntl");
- 
-    function lwp_self return lwpid_t;
-    pragma Import (C, lwp_self, "_lwp_self");
- 
-    type processorid_t is new int;
-    type processorid_t_ptr is access all processorid_t;
- 
-    --  Constants for function processor_bind
- 
-    PBIND_QUERY : constant processorid_t := -2;
-    --  the processor bindings are not changed.
- 
-    PBIND_NONE  : constant processorid_t := -1;
-    --  the processor bindings of the specified LWPs are cleared.
- 
-    --  Flags for function p_online
- 
-    PR_OFFLINE : constant int := 1;
-    --  processor is offline, as quiet as possible
- 
-    PR_ONLINE  : constant int := 2;
-    --  processor online
- 
-    PR_STATUS  : constant int := 3;
-    --  value passed to p_online to request status
- 
-    function p_online (processorid : processorid_t; flag : int) return int;
-    pragma Import (C, p_online, "p_online");
- 
-    function processor_bind
-      (id_type : int;
-       id      : id_t;
-       proc_id : processorid_t;
-       obind   : processorid_t_ptr) return int;
-    pragma Import (C, processor_bind, "processor_bind");
- 
-    procedure pthread_init;
-    --  dummy procedure to share s-intman.adb with other Solaris targets.
- 
- private
- 
-    type array_type_1 is array (0 .. 3) of unsigned_long;
-    type sigset_t is record
-       X_X_sigbits : array_type_1;
-    end record;
-    pragma Convention (C, sigset_t);
- 
-    type pid_t is new long;
- 
-    type time_t is new long;
- 
-    type timespec is record
-       tv_sec  : time_t;
-       tv_nsec : long;
-    end record;
-    pragma Convention (C, timespec);
- 
-    type clockid_t is new int;
-    CLOCK_REALTIME : constant clockid_t := 0;
- 
-    type struct_timeval is record
-       tv_sec  : long;
-       tv_usec : long;
-    end record;
-    pragma Convention (C, struct_timeval);
- 
-    type thread_t is new unsigned;
- 
-    type array_type_9 is array (0 .. 3) of unsigned_char;
-    type record_type_3 is record
-       flag  : array_type_9;
-       Xtype : unsigned_long;
-    end record;
-    pragma Convention (C, record_type_3);
- 
-    type mutex_t is record
-       flags : record_type_3;
-       lock  : String (1 .. 8);
-       data  : String (1 .. 8);
-    end record;
-    pragma Convention (C, mutex_t);
- 
-    type cond_t is record
-       flag  : array_type_9;
-       Xtype : unsigned_long;
-       data  : String (1 .. 8);
-    end record;
-    pragma Convention (C, cond_t);
- 
-    type thread_key_t is new unsigned;
- 
- end System.OS_Interface;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5sosprim.adb gcc-4.0.0/gcc/ada/5sosprim.adb
*** gcc-3.4.3/gcc/ada/5sosprim.adb	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5sosprim.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,124 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                  S Y S T E M . O S _ P R I M I T I V E S                 --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --          Copyright (C) 1998-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This version uses gettimeofday and select
- --  This file is suitable for Solaris (32 and 64 bits).
- 
- package body System.OS_Primitives is
- 
-    --  ??? These definitions are duplicated from System.OS_Interface
-    --  because we don't want to depend on any package. Consider removing
-    --  these declarations in System.OS_Interface and move these ones in
-    --  the spec.
- 
-    type struct_timeval is record
-       tv_sec  : Long_Integer;
-       tv_usec : Long_Integer;
-    end record;
-    pragma Convention (C, struct_timeval);
- 
-    procedure gettimeofday
-      (tv : access struct_timeval;
-       tz : Address := Null_Address);
-    pragma Import (C, gettimeofday, "gettimeofday");
- 
-    procedure C_select
-      (n         : Integer := 0;
-       readfds,
-       writefds,
-       exceptfds : Address := Null_Address;
-       timeout   : access struct_timeval);
-    pragma Import (C, C_select, "select");
- 
-    -----------
-    -- Clock --
-    -----------
- 
-    function Clock return Duration is
-       TV : aliased struct_timeval;
- 
-    begin
-       gettimeofday (TV'Access);
-       return Duration (TV.tv_sec) + Duration (TV.tv_usec) / 10#1#E6;
-    end Clock;
- 
-    ---------------------
-    -- Monotonic_Clock --
-    ---------------------
- 
-    function Monotonic_Clock return Duration renames Clock;
- 
-    -----------------
-    -- Timed_Delay --
-    -----------------
- 
-    procedure Timed_Delay
-      (Time : Duration;
-       Mode : Integer)
-    is
-       Rel_Time   : Duration;
-       Abs_Time   : Duration;
-       Check_Time : Duration := Clock;
-       timeval    : aliased struct_timeval;
- 
-    begin
-       if Mode = Relative then
-          Rel_Time := Time;
-          Abs_Time := Time + Check_Time;
-       else
-          Rel_Time := Time - Check_Time;
-          Abs_Time := Time;
-       end if;
- 
-       if Rel_Time > 0.0 then
-          loop
-             timeval.tv_sec := Long_Integer (Rel_Time);
- 
-             if Duration (timeval.tv_sec) > Rel_Time then
-                timeval.tv_sec := timeval.tv_sec - 1;
-             end if;
- 
-             timeval.tv_usec :=
-               Long_Integer ((Rel_Time - Duration (timeval.tv_sec)) * 10#1#E6);
- 
-             C_select (timeout => timeval'Unchecked_Access);
-             Check_Time := Clock;
- 
-             exit when Abs_Time <= Check_Time;
- 
-             Rel_Time := Abs_Time - Check_Time;
-          end loop;
-       end if;
-    end Timed_Delay;
- 
- end System.OS_Primitives;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5sparame.adb gcc-4.0.0/gcc/ada/5sparame.adb
*** gcc-3.4.3/gcc/ada/5sparame.adb	Thu Apr 24 17:53:52 2003
--- gcc-4.0.0/gcc/ada/5sparame.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,80 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                    S Y S T E M . P A R A M E T E R S                     --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --          Copyright (C) 1998-2001 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the Solaris (native) specific version
- 
- package body System.Parameters is
- 
-    ------------------------
-    -- Default_Stack_Size --
-    ------------------------
- 
-    function Default_Stack_Size return Size_Type is
-    begin
-       return 100_000;
-    end Default_Stack_Size;
- 
-    ------------------------
-    -- Minimum_Stack_Size --
-    ------------------------
- 
-    function Minimum_Stack_Size return Size_Type is
- 
-       thr_min_stack : constant Size_Type := 1160;
-       --  hard coded value for Solaris 8 to avoid adding dependency on
-       --  libthread for every Ada program.
-       --  This value does not really matter anyway, since this is checked
-       --  and adjusted at the library level when creating a thread.
- 
-    begin
-       return thr_min_stack;
-    end Minimum_Stack_Size;
- 
-    -------------------------
-    -- Adjust_Storage_Size --
-    -------------------------
- 
-    function Adjust_Storage_Size (Size : Size_Type) return Size_Type is
-    begin
-       if Size = Unspecified_Size then
-          return Default_Stack_Size;
- 
-       elsif Size < Minimum_Stack_Size then
-          return Minimum_Stack_Size;
- 
-       else
-          return Size;
-       end if;
-    end Adjust_Storage_Size;
- 
- end System.Parameters;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5ssystem.ads gcc-4.0.0/gcc/ada/5ssystem.ads
*** gcc-3.4.3/gcc/ada/5ssystem.ads	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5ssystem.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,150 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                        GNAT RUN-TIME COMPONENTS                          --
- --                                                                          --
- --                               S Y S T E M                                --
- --                                                                          --
- --                                 S p e c                                  --
- --                          (SUN Solaris Version)                           --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the  contents of the part following the private keyword. --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- package System is
- pragma Pure (System);
- --  Note that we take advantage of the implementation permission to
- --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
- 
-    type Name is (SYSTEM_NAME_GNAT);
-    System_Name : constant Name := SYSTEM_NAME_GNAT;
- 
-    --  System-Dependent Named Numbers
- 
-    Min_Int               : constant := Long_Long_Integer'First;
-    Max_Int               : constant := Long_Long_Integer'Last;
- 
-    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
-    Max_Nonbinary_Modulus : constant := Integer'Last;
- 
-    Max_Base_Digits       : constant := Long_Long_Float'Digits;
-    Max_Digits            : constant := Long_Long_Float'Digits;
- 
-    Max_Mantissa          : constant := 63;
-    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
- 
-    Tick                  : constant := 0.01;
- 
-    --  Storage-related Declarations
- 
-    type Address is private;
-    Null_Address : constant Address;
- 
-    Storage_Unit : constant := 8;
-    Word_Size    : constant := 32;
-    Memory_Size  : constant := 2 ** 32;
- 
-    --  Address comparison
- 
-    function "<"  (Left, Right : Address) return Boolean;
-    function "<=" (Left, Right : Address) return Boolean;
-    function ">"  (Left, Right : Address) return Boolean;
-    function ">=" (Left, Right : Address) return Boolean;
-    function "="  (Left, Right : Address) return Boolean;
- 
-    pragma Import (Intrinsic, "<");
-    pragma Import (Intrinsic, "<=");
-    pragma Import (Intrinsic, ">");
-    pragma Import (Intrinsic, ">=");
-    pragma Import (Intrinsic, "=");
- 
-    --  Other System-Dependent Declarations
- 
-    type Bit_Order is (High_Order_First, Low_Order_First);
-    Default_Bit_Order : constant Bit_Order := High_Order_First;
- 
-    --  Priority-related Declarations (RM D.1)
- 
-    Max_Priority           : constant Positive := 30;
-    Max_Interrupt_Priority : constant Positive := 31;
- 
-    subtype Any_Priority       is Integer      range  0 .. 31;
-    subtype Priority           is Any_Priority range  0 .. 30;
-    subtype Interrupt_Priority is Any_Priority range 31 .. 31;
- 
-    Default_Priority : constant Priority := 15;
- 
- private
- 
-    type Address is mod Memory_Size;
-    Null_Address : constant Address := 0;
- 
-    --------------------------------------
-    -- System Implementation Parameters --
-    --------------------------------------
- 
-    --  These parameters provide information about the target that is used
-    --  by the compiler. They are in the private part of System, where they
-    --  can be accessed using the special circuitry in the Targparm unit
-    --  whose source should be consulted for more detailed descriptions
-    --  of the individual switch values.
- 
-    AAMP                      : constant Boolean := False;
-    Backend_Divide_Checks     : constant Boolean := False;
-    Backend_Overflow_Checks   : constant Boolean := False;
-    Command_Line_Args         : constant Boolean := True;
-    Configurable_Run_Time     : constant Boolean := False;
-    Denorm                    : constant Boolean := True;
-    Duration_32_Bits          : constant Boolean := False;
-    Exit_Status_Supported     : constant Boolean := True;
-    Fractional_Fixed_Ops      : constant Boolean := False;
-    Frontend_Layout           : constant Boolean := False;
-    Functions_Return_By_DSP   : constant Boolean := False;
-    Machine_Overflows         : constant Boolean := False;
-    Machine_Rounds            : constant Boolean := True;
-    OpenVMS                   : constant Boolean := False;
-    Signed_Zeros              : constant Boolean := True;
-    Stack_Check_Default       : constant Boolean := False;
-    Stack_Check_Probes        : constant Boolean := True;
-    Support_64_Bit_Divides    : constant Boolean := True;
-    Support_Aggregates        : constant Boolean := True;
-    Support_Composite_Assign  : constant Boolean := True;
-    Support_Composite_Compare : constant Boolean := True;
-    Support_Long_Shifts       : constant Boolean := True;
-    Suppress_Standard_Library : constant Boolean := False;
-    Use_Ada_Main_Program_Name : constant Boolean := False;
-    ZCX_By_Default            : constant Boolean := True;
-    GCC_ZCX_Support           : constant Boolean := True;
-    Front_End_ZCX_Support     : constant Boolean := False;
- 
-    --  Obsolete entries, to be removed eventually (bootstrap issues!)
- 
-    High_Integrity_Mode       : constant Boolean := False;
-    Long_Shifts_Inlined       : constant Boolean := True;
- 
- end System;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5staprop.adb gcc-4.0.0/gcc/ada/5staprop.adb
*** gcc-3.4.3/gcc/ada/5staprop.adb	Mon Jan  5 15:20:43 2004
--- gcc-4.0.0/gcc/ada/5staprop.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,1837 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --     S Y S T E M . T A S K _ P R I M I T I V E S . O P E R A T I O N S    --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --         Copyright (C) 1992-2003, Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a Solaris (native) version of this package
- 
- --  This package contains all the GNULL primitives that interface directly
- --  with the underlying OS.
- 
- pragma Polling (Off);
- --  Turn off polling, we do not want ATC polling to take place during
- --  tasking operations. It causes infinite loops and other problems.
- 
- with System.Tasking.Debug;
- --  used for Known_Tasks
- 
- with Ada.Exceptions;
- --  used for Raise_Exception
- 
- with GNAT.OS_Lib;
- --  used for String_Access, Getenv
- 
- with Interfaces.C;
- --  used for int
- --           size_t
- 
- with System.Interrupt_Management;
- --  used for Keep_Unmasked
- --           Abort_Task_Interrupt
- --           Interrupt_ID
- 
- with System.Interrupt_Management.Operations;
- --  used for Set_Interrupt_Mask
- --           All_Tasks_Mask
- pragma Elaborate_All (System.Interrupt_Management.Operations);
- 
- with System.Parameters;
- --  used for Size_Type
- 
- with System.Tasking;
- --  used for Ada_Task_Control_Block
- --           Task_ID
- --           ATCB components and types
- 
- with System.Task_Info;
- --  to initialize Task_Info for a C thread, in function Self
- 
- with System.Soft_Links;
- --  used for Defer/Undefer_Abort
- --       to initialize TSD for a C thread, in function Self
- 
- --  Note that we do not use System.Tasking.Initialization directly since
- --  this is a higher level package that we shouldn't depend on. For example
- --  when using the restricted run time, it is replaced by
- --  System.Tasking.Restricted.Initialization
- 
- with System.OS_Primitives;
- --  used for Delay_Modes
- 
- with Unchecked_Conversion;
- with Unchecked_Deallocation;
- 
- package body System.Task_Primitives.Operations is
- 
-    use System.Tasking.Debug;
-    use System.Tasking;
-    use Interfaces.C;
-    use System.OS_Interface;
-    use System.Parameters;
-    use Ada.Exceptions;
-    use System.OS_Primitives;
- 
-    package SSL renames System.Soft_Links;
- 
-    ----------------
-    -- Local Data --
-    ----------------
- 
-    --  The following are logically constants, but need to be initialized
-    --  at run time.
- 
-    Environment_Task_ID : Task_ID;
-    --  A variable to hold Task_ID for the environment task.
-    --  If we use this variable to get the Task_ID, we need the following
-    --  ATCB_Key only for non-Ada threads.
- 
-    Unblocked_Signal_Mask : aliased sigset_t;
-    --  The set of signals that should unblocked in all tasks
- 
-    ATCB_Key : aliased thread_key_t;
-    --  Key used to find the Ada Task_ID associated with a thread,
-    --  at least for C threads unknown to the Ada run-time system.
- 
-    Single_RTS_Lock : aliased RTS_Lock;
-    --  This is a lock to allow only one thread of control in the RTS at
-    --  a time; it is used to execute in mutual exclusion from all other tasks.
-    --  Used mainly in Single_Lock mode, but also to protect All_Tasks_List
- 
-    Next_Serial_Number : Task_Serial_Number := 100;
-    --  We start at 100, to reserve some special values for
-    --  using in error checking.
-    --  The following are internal configuration constants needed.
- 
-    ----------------------
-    -- Priority Support --
-    ----------------------
- 
-    Priority_Ceiling_Emulation : constant Boolean := True;
-    --  controls whether we emulate priority ceiling locking
- 
-    --  To get a scheduling close to annex D requirements, we use the real-time
-    --  class provided for LWP's and map each task/thread to a specific and
-    --  unique LWP (there is 1 thread per LWP, and 1 LWP per thread).
- 
-    --  The real time class can only be set when the process has root
-    --  priviledges, so in the other cases, we use the normal thread scheduling
-    --  and priority handling.
- 
-    Using_Real_Time_Class : Boolean := False;
-    --  indicates wether the real time class is being used (i.e the process
-    --  has root priviledges).
- 
-    Prio_Param : aliased struct_pcparms;
-    --  Hold priority info (Real_Time) initialized during the package
-    --  elaboration.
- 
-    -----------------------------------
-    -- External Configuration Values --
-    -----------------------------------
- 
-    Time_Slice_Val : Interfaces.C.long;
-    pragma Import (C, Time_Slice_Val, "__gl_time_slice_val");
- 
-    Locking_Policy : Character;
-    pragma Import (C, Locking_Policy, "__gl_locking_policy");
- 
-    Dispatching_Policy : Character;
-    pragma Import (C, Dispatching_Policy, "__gl_task_dispatching_policy");
- 
-    Foreign_Task_Elaborated : aliased Boolean := True;
-    --  Used to identified fake tasks (i.e., non-Ada Threads).
- 
-    -----------------------
-    -- Local Subprograms --
-    -----------------------
- 
-    function sysconf (name : System.OS_Interface.int)
-      return processorid_t;
-    pragma Import (C, sysconf, "sysconf");
- 
-    SC_NPROCESSORS_CONF : constant System.OS_Interface.int := 14;
- 
-    function Num_Procs (name : System.OS_Interface.int := SC_NPROCESSORS_CONF)
-      return processorid_t renames sysconf;
- 
-    procedure Abort_Handler
-      (Sig     : Signal;
-       Code    : access siginfo_t;
-       Context : access ucontext_t);
-    --  Target-dependent binding of inter-thread Abort signal to
-    --  the raising of the Abort_Signal exception.
-    --  See also comments in 7staprop.adb
- 
-    function To_thread_t is new Unchecked_Conversion
-      (Integer, System.OS_Interface.thread_t);
- 
-    function To_Task_ID is new Unchecked_Conversion (System.Address, Task_ID);
- 
-    function To_Address is new Unchecked_Conversion (Task_ID, System.Address);
- 
-    function Thread_Body_Access is
-      new Unchecked_Conversion (System.Address, Thread_Body);
- 
-    ------------
-    -- Checks --
-    ------------
- 
-    function Check_Initialize_Lock (L : Lock_Ptr; Level : Lock_Level)
-      return Boolean;
-    pragma Inline (Check_Initialize_Lock);
- 
-    function Check_Lock (L : Lock_Ptr) return Boolean;
-    pragma Inline (Check_Lock);
- 
-    function Record_Lock (L : Lock_Ptr) return Boolean;
-    pragma Inline (Record_Lock);
- 
-    function Check_Sleep (Reason : Task_States) return Boolean;
-    pragma Inline (Check_Sleep);
- 
-    function Record_Wakeup
-      (L : Lock_Ptr;
-       Reason : Task_States) return Boolean;
-    pragma Inline (Record_Wakeup);
- 
-    function Check_Wakeup
-      (T : Task_ID;
-       Reason : Task_States) return Boolean;
-    pragma Inline (Check_Wakeup);
- 
-    function Check_Unlock (L : Lock_Ptr) return Boolean;
-    pragma Inline (Check_Lock);
- 
-    function Check_Finalize_Lock (L : Lock_Ptr) return Boolean;
-    pragma Inline (Check_Finalize_Lock);
- 
-    --------------------
-    -- Local Packages --
-    --------------------
- 
-    package Specific is
- 
-       procedure Initialize (Environment_Task : Task_ID);
-       pragma Inline (Initialize);
-       --  Initialize various data needed by this package.
- 
-       function Is_Valid_Task return Boolean;
-       pragma Inline (Is_Valid_Task);
-       --  Does executing thread have a TCB?
- 
-       procedure Set (Self_Id : Task_ID);
-       pragma Inline (Set);
-       --  Set the self id for the current task.
- 
-       function Self return Task_ID;
-       pragma Inline (Self);
-       --  Return a pointer to the Ada Task Control Block of the calling task.
- 
-    end Specific;
- 
-    package body Specific is separate;
-    --  The body of this package is target specific.
- 
-    ---------------------------------
-    -- Support for foreign threads --
-    ---------------------------------
- 
-    function Register_Foreign_Thread (Thread : Thread_Id) return Task_ID;
-    --  Allocate and Initialize a new ATCB for the current Thread.
- 
-    function Register_Foreign_Thread
-      (Thread : Thread_Id) return Task_ID is separate;
- 
-    ------------
-    -- Checks --
-    ------------
- 
-    Check_Count  : Integer := 0;
-    Lock_Count   : Integer := 0;
-    Unlock_Count : Integer := 0;
- 
-    function To_Lock_Ptr is
-      new Unchecked_Conversion (RTS_Lock_Ptr, Lock_Ptr);
-    function To_Owner_ID is
-      new Unchecked_Conversion (Task_ID, Owner_ID);
- 
-    -------------------
-    -- Abort_Handler --
-    -------------------
- 
-    procedure Abort_Handler
-      (Sig     : Signal;
-       Code    : access siginfo_t;
-       Context : access ucontext_t)
-    is
-       pragma Unreferenced (Sig);
-       pragma Unreferenced (Code);
-       pragma Unreferenced (Context);
- 
-       Self_ID : Task_ID := Self;
-       Old_Set : aliased sigset_t;
- 
-       Result : Interfaces.C.int;
-       pragma Unreferenced (Result);
- 
-    begin
-       --  It is not safe to raise an exception when using ZCX and the GCC
-       --  exception handling mechanism.
- 
-       if ZCX_By_Default and then GCC_ZCX_Support then
-          return;
-       end if;
- 
-       if Self_ID.Deferral_Level = 0
-         and then Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level
-         and then not Self_ID.Aborting
-       then
-          Self_ID.Aborting := True;
- 
-          --  Make sure signals used for RTS internal purpose are unmasked
- 
-          Result := thr_sigsetmask (SIG_UNBLOCK,
-            Unblocked_Signal_Mask'Unchecked_Access, Old_Set'Unchecked_Access);
-          pragma Assert (Result = 0);
- 
-          raise Standard'Abort_Signal;
-       end if;
-    end Abort_Handler;
- 
-    -------------------
-    --  Stack_Guard  --
-    -------------------
- 
-    --  The underlying thread system sets a guard page at the
-    --  bottom of a thread stack, so nothing is needed.
- 
-    procedure Stack_Guard (T : ST.Task_ID; On : Boolean) is
-       pragma Unreferenced (T);
-       pragma Unreferenced (On);
- 
-    begin
-       null;
-    end Stack_Guard;
- 
-    --------------------
-    -- Get_Thread_Id  --
-    --------------------
- 
-    function Get_Thread_Id (T : ST.Task_ID) return OSI.Thread_Id is
-    begin
-       return T.Common.LL.Thread;
-    end Get_Thread_Id;
- 
-    ----------------
-    -- Initialize --
-    ----------------
- 
-    procedure Initialize (Environment_Task : ST.Task_ID) is
-       act     : aliased struct_sigaction;
-       old_act : aliased struct_sigaction;
-       Tmp_Set : aliased sigset_t;
-       Result  : Interfaces.C.int;
- 
-       procedure Configure_Processors;
-       --  Processors configuration
-       --  The user can specify a processor which the program should run
-       --  on to emulate a single-processor system. This can be easily
-       --  done by setting environment variable GNAT_PROCESSOR to one of
-       --  the following :
-       --
-       --    -2 : use the default configuration (run the program on all
-       --         available processors) - this is the same as having
-       --         GNAT_PROCESSOR unset
-       --    -1 : let the RTS choose one processor and run the program on
-       --         that processor
-       --    0 .. Last_Proc : run the program on the specified processor
-       --
-       --  Last_Proc is equal to the value of the system variable
-       --  _SC_NPROCESSORS_CONF, minus one.
- 
-       procedure Configure_Processors is
-          Proc_Acc  : constant GNAT.OS_Lib.String_Access :=
-                        GNAT.OS_Lib.Getenv ("GNAT_PROCESSOR");
-          Proc      : aliased processorid_t;  --  User processor #
-          Last_Proc : processorid_t;          --  Last processor #
- 
-       begin
-          if Proc_Acc.all'Length /= 0 then
-             --  Environment variable is defined
- 
-             Last_Proc := Num_Procs - 1;
- 
-             if Last_Proc /= -1 then
-                Proc := processorid_t'Value (Proc_Acc.all);
- 
-                if Proc <= -2  or else Proc > Last_Proc then
-                   --  Use the default configuration
-                   null;
-                elsif Proc = -1 then
-                   --  Choose a processor
- 
-                   Result := 0;
- 
-                   while Proc < Last_Proc loop
-                      Proc := Proc + 1;
-                      Result := p_online (Proc, PR_STATUS);
-                      exit when Result = PR_ONLINE;
-                   end loop;
- 
-                   pragma Assert (Result = PR_ONLINE);
-                   Result := processor_bind (P_PID, P_MYID, Proc, null);
-                   pragma Assert (Result = 0);
- 
-                else
-                   --  Use user processor
- 
-                   Result := processor_bind (P_PID, P_MYID, Proc, null);
-                   pragma Assert (Result = 0);
-                end if;
-             end if;
-          end if;
- 
-       exception
-          when Constraint_Error =>
- 
-             --  Illegal environment variable GNAT_PROCESSOR - ignored
- 
-             null;
-       end Configure_Processors;
- 
-       function State (Int : System.Interrupt_Management.Interrupt_ID)
-                      return Character;
-       pragma Import (C, State, "__gnat_get_interrupt_state");
-       --  Get interrupt state.  Defined in a-init.c
-       --  The input argument is the interrupt number,
-       --  and the result is one of the following:
- 
-       Default : constant Character := 's';
-       --    'n'   this interrupt not set by any Interrupt_State pragma
-       --    'u'   Interrupt_State pragma set state to User
-       --    'r'   Interrupt_State pragma set state to Runtime
-       --    's'   Interrupt_State pragma set state to System (use "default"
-       --           system handler)
- 
-    --  Start of processing for Initialize
- 
-    begin
-       Environment_Task_ID := Environment_Task;
- 
-       --  This is done in Enter_Task, but this is too late for the
-       --  Environment Task, since we need to call Self in Check_Locks when
-       --  the run time is compiled with assertions on.
- 
-       Specific.Initialize (Environment_Task);
- 
-       --  Initialize the lock used to synchronize chain of all ATCBs.
- 
-       Initialize_Lock (Single_RTS_Lock'Access, RTS_Lock_Level);
- 
-       Enter_Task (Environment_Task);
- 
-       --  Install the abort-signal handler
- 
-       if State (System.Interrupt_Management.Abort_Task_Interrupt)
-         /= Default
-       then
-          --  Set sa_flags to SA_NODEFER so that during the handler execution
-          --  we do not change the Signal_Mask to be masked for the Abort_Signal
-          --  This is a temporary fix to the problem that the Signal_Mask is
-          --  not restored after the exception (longjmp) from the handler.
-          --  The right fix should be made in sigsetjmp so that we save
-          --  the Signal_Set and restore it after a longjmp.
-          --  In that case, this field should be changed back to 0. ???
- 
-          act.sa_flags := 16;
- 
-          act.sa_handler := Abort_Handler'Address;
-          Result := sigemptyset (Tmp_Set'Access);
-          pragma Assert (Result = 0);
-          act.sa_mask := Tmp_Set;
- 
-          Result :=
-            sigaction (
-              Signal (System.Interrupt_Management.Abort_Task_Interrupt),
-              act'Unchecked_Access,
-              old_act'Unchecked_Access);
-          pragma Assert (Result = 0);
-       end if;
- 
-       Configure_Processors;
-    end Initialize;
- 
-    ---------------------
-    -- Initialize_Lock --
-    ---------------------
- 
-    --  Note: mutexes and cond_variables needed per-task basis are
-    --        initialized in Initialize_TCB and the Storage_Error is
-    --        handled. Other mutexes (such as RTS_Lock, Memory_Lock...)
-    --        used in RTS is initialized before any status change of RTS.
-    --        Therefore rasing Storage_Error in the following routines
-    --        should be able to be handled safely.
- 
-    procedure Initialize_Lock
-      (Prio : System.Any_Priority;
-       L    : access Lock)
-    is
-       Result : Interfaces.C.int;
- 
-    begin
-       pragma Assert (Check_Initialize_Lock (Lock_Ptr (L), PO_Level));
- 
-       if Priority_Ceiling_Emulation then
-          L.Ceiling := Prio;
-       end if;
- 
-       Result := mutex_init (L.L'Access, USYNC_THREAD, System.Null_Address);
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result = ENOMEM then
-          Raise_Exception (Storage_Error'Identity, "Failed to allocate a lock");
-       end if;
-    end Initialize_Lock;
- 
-    procedure Initialize_Lock
-      (L : access RTS_Lock;
-       Level : Lock_Level)
-    is
-       Result : Interfaces.C.int;
- 
-    begin
-       pragma Assert (Check_Initialize_Lock
-         (To_Lock_Ptr (RTS_Lock_Ptr (L)), Level));
-       Result := mutex_init (L.L'Access, USYNC_THREAD, System.Null_Address);
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result = ENOMEM then
-          Raise_Exception (Storage_Error'Identity, "Failed to allocate a lock");
-       end if;
-    end Initialize_Lock;
- 
-    -------------------
-    -- Finalize_Lock --
-    -------------------
- 
-    procedure Finalize_Lock (L : access Lock) is
-       Result : Interfaces.C.int;
- 
-    begin
-       pragma Assert (Check_Finalize_Lock (Lock_Ptr (L)));
-       Result := mutex_destroy (L.L'Access);
-       pragma Assert (Result = 0);
-    end Finalize_Lock;
- 
-    procedure Finalize_Lock (L : access RTS_Lock) is
-       Result : Interfaces.C.int;
- 
-    begin
-       pragma Assert (Check_Finalize_Lock (To_Lock_Ptr (RTS_Lock_Ptr (L))));
-       Result := mutex_destroy (L.L'Access);
-       pragma Assert (Result = 0);
-    end Finalize_Lock;
- 
-    ----------------
-    -- Write_Lock --
-    ----------------
- 
-    procedure Write_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
-       Result : Interfaces.C.int;
- 
-    begin
-       pragma Assert (Check_Lock (Lock_Ptr (L)));
- 
-       if Priority_Ceiling_Emulation and then Locking_Policy = 'C' then
-          declare
-             Self_Id        : constant Task_ID := Self;
-             Saved_Priority : System.Any_Priority;
- 
-          begin
-             if Self_Id.Common.LL.Active_Priority > L.Ceiling then
-                Ceiling_Violation := True;
-                return;
-             end if;
- 
-             Saved_Priority := Self_Id.Common.LL.Active_Priority;
- 
-             if Self_Id.Common.LL.Active_Priority < L.Ceiling then
-                Set_Priority (Self_Id, L.Ceiling);
-             end if;
- 
-             Result := mutex_lock (L.L'Access);
-             pragma Assert (Result = 0);
-             Ceiling_Violation := False;
- 
-             L.Saved_Priority := Saved_Priority;
-          end;
- 
-       else
-          Result := mutex_lock (L.L'Access);
-          pragma Assert (Result = 0);
-          Ceiling_Violation := False;
-       end if;
- 
-       pragma Assert (Record_Lock (Lock_Ptr (L)));
-    end Write_Lock;
- 
-    procedure Write_Lock
-      (L          : access RTS_Lock;
-      Global_Lock : Boolean := False)
-    is
-       Result : Interfaces.C.int;
- 
-    begin
-       if not Single_Lock or else Global_Lock then
-          pragma Assert (Check_Lock (To_Lock_Ptr (RTS_Lock_Ptr (L))));
-          Result := mutex_lock (L.L'Access);
-          pragma Assert (Result = 0);
-          pragma Assert (Record_Lock (To_Lock_Ptr (RTS_Lock_Ptr (L))));
-       end if;
-    end Write_Lock;
- 
-    procedure Write_Lock (T : Task_ID) is
-       Result : Interfaces.C.int;
- 
-    begin
-       if not Single_Lock then
-          pragma Assert (Check_Lock (To_Lock_Ptr (T.Common.LL.L'Access)));
-          Result := mutex_lock (T.Common.LL.L.L'Access);
-          pragma Assert (Result = 0);
-          pragma Assert (Record_Lock (To_Lock_Ptr (T.Common.LL.L'Access)));
-       end if;
-    end Write_Lock;
- 
-    ---------------
-    -- Read_Lock --
-    ---------------
- 
-    procedure Read_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
-    begin
-       Write_Lock (L, Ceiling_Violation);
-    end Read_Lock;
- 
-    ------------
-    -- Unlock --
-    ------------
- 
-    procedure Unlock (L : access Lock) is
-       Result  : Interfaces.C.int;
- 
-    begin
-       pragma Assert (Check_Unlock (Lock_Ptr (L)));
- 
-       if Priority_Ceiling_Emulation and then Locking_Policy = 'C' then
-          declare
-             Self_Id : constant Task_ID := Self;
- 
-          begin
-             Result := mutex_unlock (L.L'Access);
-             pragma Assert (Result = 0);
- 
-             if Self_Id.Common.LL.Active_Priority > L.Saved_Priority then
-                Set_Priority (Self_Id, L.Saved_Priority);
-             end if;
-          end;
-       else
-          Result := mutex_unlock (L.L'Access);
-          pragma Assert (Result = 0);
-       end if;
-    end Unlock;
- 
-    procedure Unlock (L : access RTS_Lock; Global_Lock : Boolean := False) is
-       Result : Interfaces.C.int;
- 
-    begin
-       if not Single_Lock or else Global_Lock then
-          pragma Assert (Check_Unlock (To_Lock_Ptr (RTS_Lock_Ptr (L))));
-          Result := mutex_unlock (L.L'Access);
-          pragma Assert (Result = 0);
-       end if;
-    end Unlock;
- 
-    procedure Unlock (T : Task_ID) is
-       Result : Interfaces.C.int;
- 
-    begin
-       if not Single_Lock then
-          pragma Assert (Check_Unlock (To_Lock_Ptr (T.Common.LL.L'Access)));
-          Result := mutex_unlock (T.Common.LL.L.L'Access);
-          pragma Assert (Result = 0);
-       end if;
-    end Unlock;
- 
-    --  For the time delay implementation, we need to make sure we
-    --  achieve following criteria:
- 
-    --  1) We have to delay at least for the amount requested.
-    --  2) We have to give up CPU even though the actual delay does not
-    --     result in blocking.
-    --  3) Except for restricted run-time systems that do not support
-    --     ATC or task abort, the delay must be interrupted by the
-    --     abort_task operation.
-    --  4) The implementation has to be efficient so that the delay overhead
-    --     is relatively cheap.
-    --  (1)-(3) are Ada requirements. Even though (2) is an Annex-D
-    --     requirement we still want to provide the effect in all cases.
-    --     The reason is that users may want to use short delays to implement
-    --     their own scheduling effect in the absence of language provided
-    --     scheduling policies.
- 
-    ---------------------
-    -- Monotonic_Clock --
-    ---------------------
- 
-    function Monotonic_Clock return Duration is
-       TS     : aliased timespec;
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := clock_gettime (CLOCK_REALTIME, TS'Unchecked_Access);
-       pragma Assert (Result = 0);
-       return To_Duration (TS);
-    end Monotonic_Clock;
- 
-    -------------------
-    -- RT_Resolution --
-    -------------------
- 
-    function RT_Resolution return Duration is
-    begin
-       return 10#1.0#E-6;
-    end RT_Resolution;
- 
-    -----------
-    -- Yield --
-    -----------
- 
-    procedure Yield (Do_Yield : Boolean := True) is
-    begin
-       if Do_Yield then
-          System.OS_Interface.thr_yield;
-       end if;
-    end Yield;
- 
-    -----------
-    -- Self ---
-    -----------
- 
-    function Self return Task_ID renames Specific.Self;
- 
-    ------------------
-    -- Set_Priority --
-    ------------------
- 
-    procedure Set_Priority
-      (T                   : Task_ID;
-       Prio                : System.Any_Priority;
-       Loss_Of_Inheritance : Boolean := False)
-    is
-       pragma Unreferenced (Loss_Of_Inheritance);
- 
-       Result : Interfaces.C.int;
-       pragma Unreferenced (Result);
- 
-       Param   : aliased struct_pcparms;
- 
-       use Task_Info;
- 
-    begin
-       T.Common.Current_Priority := Prio;
- 
-       if Priority_Ceiling_Emulation then
-          T.Common.LL.Active_Priority := Prio;
-       end if;
- 
-       if Using_Real_Time_Class then
-          Param.pc_cid := Prio_Param.pc_cid;
-          Param.rt_pri := pri_t (Prio);
-          Param.rt_tqsecs := Prio_Param.rt_tqsecs;
-          Param.rt_tqnsecs := Prio_Param.rt_tqnsecs;
- 
-          Result := Interfaces.C.int (
-            priocntl (PC_VERSION, P_LWPID, T.Common.LL.LWP, PC_SETPARMS,
-              Param'Address));
- 
-       else
-          if T.Common.Task_Info /= null
-            and then not T.Common.Task_Info.Bound_To_LWP
-          then
-             --  The task is not bound to a LWP, so use thr_setprio
- 
-             Result :=
-               thr_setprio (T.Common.LL.Thread, Interfaces.C.int (Prio));
- 
-          else
- 
-             --  The task is bound to a LWP, use priocntl
-             --  ??? TBD
- 
-             null;
-          end if;
-       end if;
-    end Set_Priority;
- 
-    ------------------
-    -- Get_Priority --
-    ------------------
- 
-    function Get_Priority (T : Task_ID) return System.Any_Priority is
-    begin
-       return T.Common.Current_Priority;
-    end Get_Priority;
- 
-    ----------------
-    -- Enter_Task --
-    ----------------
- 
-    procedure Enter_Task (Self_ID : Task_ID) is
-       Result    : Interfaces.C.int;
-       Proc      : processorid_t;  --  User processor #
-       Last_Proc : processorid_t;  --  Last processor #
- 
-       use System.Task_Info;
-    begin
-       Self_ID.Common.LL.Thread := thr_self;
- 
-       Self_ID.Common.LL.LWP := lwp_self;
- 
-       if Self_ID.Common.Task_Info /= null then
-          if Self_ID.Common.Task_Info.New_LWP
-            and then Self_ID.Common.Task_Info.CPU /= CPU_UNCHANGED
-          then
-             Last_Proc := Num_Procs - 1;
- 
-             if Self_ID.Common.Task_Info.CPU = ANY_CPU then
-                Result := 0;
-                Proc := 0;
- 
-                while Proc < Last_Proc loop
-                   Result := p_online (Proc, PR_STATUS);
-                   exit when Result = PR_ONLINE;
-                   Proc := Proc + 1;
-                end loop;
- 
-                Result := processor_bind (P_LWPID, P_MYID, Proc, null);
-                pragma Assert (Result = 0);
- 
-             else
-                --  Use specified processor
- 
-                if Self_ID.Common.Task_Info.CPU < 0
-                  or else Self_ID.Common.Task_Info.CPU > Last_Proc
-                then
-                   raise Invalid_CPU_Number;
-                end if;
- 
-                Result := processor_bind
-                  (P_LWPID, P_MYID, Self_ID.Common.Task_Info.CPU, null);
-                pragma Assert (Result = 0);
-             end if;
-          end if;
-       end if;
- 
-       Specific.Set (Self_ID);
- 
-       --  We need the above code even if we do direct fetch of Task_ID in Self
-       --  for the main task on Sun, x86 Solaris and for gcc 2.7.2.
- 
-       Lock_RTS;
- 
-       for J in Known_Tasks'Range loop
-          if Known_Tasks (J) = null then
-             Known_Tasks (J) := Self_ID;
-             Self_ID.Known_Tasks_Index := J;
-             exit;
-          end if;
-       end loop;
- 
-       Unlock_RTS;
-    end Enter_Task;
- 
-    --------------
-    -- New_ATCB --
-    --------------
- 
-    function New_ATCB (Entry_Num : Task_Entry_Index) return Task_ID is
-    begin
-       return new Ada_Task_Control_Block (Entry_Num);
-    end New_ATCB;
- 
-    -------------------
-    -- Is_Valid_Task --
-    -------------------
- 
-    function Is_Valid_Task return Boolean renames Specific.Is_Valid_Task;
- 
-    -----------------------------
-    -- Register_Foreign_Thread --
-    -----------------------------
- 
-    function Register_Foreign_Thread return Task_ID is
- 
-    begin
-       if Is_Valid_Task then
-          return Self;
-       else
-          return Register_Foreign_Thread (thr_self);
-       end if;
-    end Register_Foreign_Thread;
- 
-    --------------------
-    -- Initialize_TCB --
-    --------------------
- 
-    procedure Initialize_TCB (Self_ID : Task_ID; Succeeded : out Boolean) is
-       Result : Interfaces.C.int := 0;
- 
-    begin
-       --  Give the task a unique serial number.
- 
-       Self_ID.Serial_Number := Next_Serial_Number;
-       Next_Serial_Number := Next_Serial_Number + 1;
-       pragma Assert (Next_Serial_Number /= 0);
- 
-       Self_ID.Common.LL.Thread := To_thread_t (-1);
- 
-       if not Single_Lock then
-          Result := mutex_init
-            (Self_ID.Common.LL.L.L'Access, USYNC_THREAD, System.Null_Address);
-          Self_ID.Common.LL.L.Level :=
-            Private_Task_Serial_Number (Self_ID.Serial_Number);
-          pragma Assert (Result = 0 or else Result = ENOMEM);
-       end if;
- 
-       if Result = 0 then
-          Result := cond_init (Self_ID.Common.LL.CV'Access, USYNC_THREAD, 0);
-          pragma Assert (Result = 0 or else Result = ENOMEM);
-       end if;
- 
-       if Result = 0 then
-          Succeeded := True;
-       else
-          if not Single_Lock then
-             Result := mutex_destroy (Self_ID.Common.LL.L.L'Access);
-             pragma Assert (Result = 0);
-          end if;
- 
-          Succeeded := False;
-       end if;
-    end Initialize_TCB;
- 
-    -----------------
-    -- Create_Task --
-    -----------------
- 
-    procedure Create_Task
-      (T          : Task_ID;
-       Wrapper    : System.Address;
-       Stack_Size : System.Parameters.Size_Type;
-       Priority   : System.Any_Priority;
-       Succeeded  : out Boolean)
-    is
-       pragma Unreferenced (Priority);
- 
-       Result     : Interfaces.C.int;
-       Adjusted_Stack_Size : Interfaces.C.size_t;
-       Opts       : Interfaces.C.int := THR_DETACHED;
- 
-       Page_Size  : constant System.Parameters.Size_Type := 4096;
-       --  This constant is for reserving extra space at the
-       --  end of the stack, which can be used by the stack
-       --  checking as guard page. The idea is that we need
-       --  to have at least Stack_Size bytes available for
-       --  actual use.
- 
-       use System.Task_Info;
- 
-    begin
-       if Stack_Size = System.Parameters.Unspecified_Size then
-          Adjusted_Stack_Size :=
-            Interfaces.C.size_t (Default_Stack_Size + Page_Size);
- 
-       elsif Stack_Size < Minimum_Stack_Size then
-          Adjusted_Stack_Size :=
-            Interfaces.C.size_t (Minimum_Stack_Size + Page_Size);
- 
-       else
-          Adjusted_Stack_Size :=
-            Interfaces.C.size_t (Stack_Size + Page_Size);
-       end if;
- 
-       --  Since the initial signal mask of a thread is inherited from the
-       --  creator, and the Environment task has all its signals masked, we
-       --  do not need to manipulate caller's signal mask at this point.
-       --  All tasks in RTS will have All_Tasks_Mask initially.
- 
-       if T.Common.Task_Info /= null then
-          if T.Common.Task_Info.New_LWP then
-             Opts := Opts + THR_NEW_LWP;
-          end if;
- 
-          if T.Common.Task_Info.Bound_To_LWP then
-             Opts := Opts + THR_BOUND;
-          end if;
- 
-       else
-          Opts := THR_DETACHED + THR_BOUND;
-       end if;
- 
-       Result := thr_create
-         (System.Null_Address,
-          Adjusted_Stack_Size,
-          Thread_Body_Access (Wrapper),
-          To_Address (T),
-          Opts,
-          T.Common.LL.Thread'Access);
- 
-       Succeeded := Result = 0;
-       pragma Assert
-         (Result = 0
-           or else Result = ENOMEM
-           or else Result = EAGAIN);
-    end Create_Task;
- 
-    ------------------
-    -- Finalize_TCB --
-    ------------------
- 
-    procedure Finalize_TCB (T : Task_ID) is
-       Result : Interfaces.C.int;
-       Tmp    : Task_ID := T;
-       Is_Self : constant Boolean := T = Self;
- 
-       procedure Free is new
-         Unchecked_Deallocation (Ada_Task_Control_Block, Task_ID);
- 
-    begin
-       T.Common.LL.Thread := To_thread_t (0);
- 
-       if not Single_Lock then
-          Result := mutex_destroy (T.Common.LL.L.L'Access);
-          pragma Assert (Result = 0);
-       end if;
- 
-       Result := cond_destroy (T.Common.LL.CV'Access);
-       pragma Assert (Result = 0);
- 
-       if T.Known_Tasks_Index /= -1 then
-          Known_Tasks (T.Known_Tasks_Index) := null;
-       end if;
- 
-       Free (Tmp);
- 
-       if Is_Self then
-          Specific.Set (null);
-       end if;
- 
-    end Finalize_TCB;
- 
-    ---------------
-    -- Exit_Task --
-    ---------------
- 
-    --  This procedure must be called with abort deferred.
-    --  It can no longer call Self or access
-    --  the current task's ATCB, since the ATCB has been deallocated.
- 
-    procedure Exit_Task is
-    begin
-       Specific.Set (null);
-    end Exit_Task;
- 
-    ----------------
-    -- Abort_Task --
-    ----------------
- 
-    procedure Abort_Task (T : Task_ID) is
-       Result : Interfaces.C.int;
-    begin
-       pragma Assert (T /= Self);
- 
-       Result := thr_kill (T.Common.LL.Thread,
-         Signal (System.Interrupt_Management.Abort_Task_Interrupt));
-       null;
- 
-       pragma Assert (Result = 0);
-    end Abort_Task;
- 
-    -----------
-    -- Sleep --
-    -----------
- 
-    procedure Sleep
-      (Self_ID : Task_ID;
-       Reason  : Task_States)
-    is
-       Result : Interfaces.C.int;
- 
-    begin
-       pragma Assert (Check_Sleep (Reason));
- 
-       if Dynamic_Priority_Support
-         and then Self_ID.Pending_Priority_Change
-       then
-          Self_ID.Pending_Priority_Change := False;
-          Self_ID.Common.Base_Priority := Self_ID.New_Base_Priority;
-          Set_Priority (Self_ID, Self_ID.Common.Base_Priority);
-       end if;
- 
-       if Single_Lock then
-          Result := cond_wait
-            (Self_ID.Common.LL.CV'Access, Single_RTS_Lock.L'Access);
-       else
-          Result := cond_wait
-            (Self_ID.Common.LL.CV'Access, Self_ID.Common.LL.L.L'Access);
-       end if;
- 
-       pragma Assert (Record_Wakeup
-         (To_Lock_Ptr (Self_ID.Common.LL.L'Access), Reason));
-       pragma Assert (Result = 0 or else Result = EINTR);
-    end Sleep;
- 
-    --  Note that we are relying heaviliy here on the GNAT feature
-    --  that Calendar.Time, System.Real_Time.Time, Duration, and
-    --  System.Real_Time.Time_Span are all represented in the same
-    --  way, i.e., as a 64-bit count of nanoseconds.
- 
-    --  This allows us to always pass the timeout value as a Duration.
- 
-    --  ???
-    --  We are taking liberties here with the semantics of the delays.
-    --  That is, we make no distinction between delays on the Calendar clock
-    --  and delays on the Real_Time clock. That is technically incorrect, if
-    --  the Calendar clock happens to be reset or adjusted.
-    --  To solve this defect will require modification to the compiler
-    --  interface, so that it can pass through more information, to tell
-    --  us here which clock to use!
- 
-    --  cond_timedwait will return if any of the following happens:
-    --  1) some other task did cond_signal on this condition variable
-    --     In this case, the return value is 0
-    --  2) the call just returned, for no good reason
-    --     This is called a "spurious wakeup".
-    --     In this case, the return value may also be 0.
-    --  3) the time delay expires
-    --     In this case, the return value is ETIME
-    --  4) this task received a signal, which was handled by some
-    --     handler procedure, and now the thread is resuming execution
-    --     UNIX calls this an "interrupted" system call.
-    --     In this case, the return value is EINTR
- 
-    --  If the cond_timedwait returns 0 or EINTR, it is still
-    --  possible that the time has actually expired, and by chance
-    --  a signal or cond_signal occurred at around the same time.
- 
-    --  We have also observed that on some OS's the value ETIME
-    --  will be returned, but the clock will show that the full delay
-    --  has not yet expired.
- 
-    --  For these reasons, we need to check the clock after return
-    --  from cond_timedwait.  If the time has expired, we will set
-    --  Timedout = True.
- 
-    --  This check might be omitted for systems on which the
-    --  cond_timedwait() never returns early or wakes up spuriously.
- 
-    --  Annex D requires that completion of a delay cause the task
-    --  to go to the end of its priority queue, regardless of whether
-    --  the task actually was suspended by the delay. Since
-    --  cond_timedwait does not do this on Solaris, we add a call
-    --  to thr_yield at the end. We might do this at the beginning,
-    --  instead, but then the round-robin effect would not be the
-    --  same; the delayed task would be ahead of other tasks of the
-    --  same priority that awoke while it was sleeping.
- 
-    --  For Timed_Sleep, we are expecting possible cond_signals
-    --  to indicate other events (e.g., completion of a RV or
-    --  completion of the abortable part of an async. select),
-    --  we want to always return if interrupted. The caller will
-    --  be responsible for checking the task state to see whether
-    --  the wakeup was spurious, and to go back to sleep again
-    --  in that case.  We don't need to check for pending abort
-    --  or priority change on the way in our out; that is the
-    --  caller's responsibility.
- 
-    --  For Timed_Delay, we are not expecting any cond_signals or
-    --  other interruptions, except for priority changes and aborts.
-    --  Therefore, we don't want to return unless the delay has
-    --  actually expired, or the call has been aborted. In this
-    --  case, since we want to implement the entire delay statement
-    --  semantics, we do need to check for pending abort and priority
-    --  changes. We can quietly handle priority changes inside the
-    --  procedure, since there is no entry-queue reordering involved.
- 
-    -----------------
-    -- Timed_Sleep --
-    -----------------
- 
-    procedure Timed_Sleep
-      (Self_ID  : Task_ID;
-       Time     : Duration;
-       Mode     : ST.Delay_Modes;
-       Reason   : System.Tasking.Task_States;
-       Timedout : out Boolean;
-       Yielded  : out Boolean)
-    is
-       Check_Time : constant Duration := Monotonic_Clock;
-       Abs_Time   : Duration;
-       Request    : aliased timespec;
-       Result     : Interfaces.C.int;
- 
-    begin
-       pragma Assert (Check_Sleep (Reason));
-       Timedout := True;
-       Yielded := False;
- 
-       if Mode = Relative then
-          Abs_Time := Duration'Min (Time, Max_Sensible_Delay) + Check_Time;
-       else
-          Abs_Time := Duration'Min (Check_Time + Max_Sensible_Delay, Time);
-       end if;
- 
-       if Abs_Time > Check_Time then
-          Request := To_Timespec (Abs_Time);
- 
-          loop
-             exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level
-               or else (Dynamic_Priority_Support and then
-                 Self_ID.Pending_Priority_Change);
- 
-             if Single_Lock then
-                Result := cond_timedwait (Self_ID.Common.LL.CV'Access,
-                  Single_RTS_Lock.L'Access, Request'Access);
-             else
-                Result := cond_timedwait (Self_ID.Common.LL.CV'Access,
-                  Self_ID.Common.LL.L.L'Access, Request'Access);
-             end if;
- 
-             Yielded := True;
- 
-             exit when Abs_Time <= Monotonic_Clock;
- 
-             if Result = 0 or Result = EINTR then
- 
-                --  Somebody may have called Wakeup for us
- 
-                Timedout := False;
-                exit;
-             end if;
- 
-             pragma Assert (Result = ETIME);
-          end loop;
-       end if;
- 
-       pragma Assert (Record_Wakeup
-         (To_Lock_Ptr (Self_ID.Common.LL.L'Access), Reason));
-    end Timed_Sleep;
- 
-    -----------------
-    -- Timed_Delay --
-    -----------------
- 
-    procedure Timed_Delay
-      (Self_ID  : Task_ID;
-       Time     : Duration;
-       Mode     : ST.Delay_Modes)
-    is
-       Check_Time : constant Duration := Monotonic_Clock;
-       Abs_Time   : Duration;
-       Request    : aliased timespec;
-       Result     : Interfaces.C.int;
-       Yielded    : Boolean := False;
- 
-    begin
-       --  Only the little window between deferring abort and
-       --  locking Self_ID is the reason we need to
-       --  check for pending abort and priority change below!
- 
-       SSL.Abort_Defer.all;
- 
-       if Single_Lock then
-          Lock_RTS;
-       end if;
- 
-       Write_Lock (Self_ID);
- 
-       if Mode = Relative then
-          Abs_Time := Time + Check_Time;
-       else
-          Abs_Time := Duration'Min (Check_Time + Max_Sensible_Delay, Time);
-       end if;
- 
-       if Abs_Time > Check_Time then
-          Request := To_Timespec (Abs_Time);
-          Self_ID.Common.State := Delay_Sleep;
- 
-          pragma Assert (Check_Sleep (Delay_Sleep));
- 
-          loop
-             if Dynamic_Priority_Support and then
-               Self_ID.Pending_Priority_Change then
-                Self_ID.Pending_Priority_Change := False;
-                Self_ID.Common.Base_Priority := Self_ID.New_Base_Priority;
-                Set_Priority (Self_ID, Self_ID.Common.Base_Priority);
-             end if;
- 
-             exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level;
- 
-             if Single_Lock then
-                Result := cond_timedwait (Self_ID.Common.LL.CV'Access,
-                  Single_RTS_Lock.L'Access, Request'Access);
-             else
-                Result := cond_timedwait (Self_ID.Common.LL.CV'Access,
-                  Self_ID.Common.LL.L.L'Access, Request'Access);
-             end if;
- 
-             Yielded := True;
- 
-             exit when Abs_Time <= Monotonic_Clock;
- 
-             pragma Assert (Result = 0 or else
-               Result = ETIME or else
-               Result = EINTR);
-          end loop;
- 
-          pragma Assert (Record_Wakeup
-            (To_Lock_Ptr (Self_ID.Common.LL.L'Access), Delay_Sleep));
- 
-          Self_ID.Common.State := Runnable;
-       end if;
- 
-       Unlock (Self_ID);
- 
-       if Single_Lock then
-          Unlock_RTS;
-       end if;
- 
-       if not Yielded then
-          thr_yield;
-       end if;
- 
-       SSL.Abort_Undefer.all;
-    end Timed_Delay;
- 
-    ------------
-    -- Wakeup --
-    ------------
- 
-    procedure Wakeup
-      (T : Task_ID;
-       Reason : Task_States)
-    is
-       Result : Interfaces.C.int;
- 
-    begin
-       pragma Assert (Check_Wakeup (T, Reason));
-       Result := cond_signal (T.Common.LL.CV'Access);
-       pragma Assert (Result = 0);
-    end Wakeup;
- 
-    ---------------------------
-    -- Check_Initialize_Lock --
-    ---------------------------
- 
-    --  The following code is intended to check some of the invariant
-    --  assertions related to lock usage, on which we depend.
- 
-    function Check_Initialize_Lock
-      (L     : Lock_Ptr;
-       Level : Lock_Level)
-       return  Boolean
-    is
-       Self_ID : constant Task_ID := Self;
- 
-    begin
-       --  Check that caller is abort-deferred
- 
-       if Self_ID.Deferral_Level <= 0 then
-          return False;
-       end if;
- 
-       --  Check that the lock is not yet initialized
- 
-       if L.Level /= 0 then
-          return False;
-       end if;
- 
-       L.Level := Lock_Level'Pos (Level) + 1;
-       return True;
-    end Check_Initialize_Lock;
- 
-    ----------------
-    -- Check_Lock --
-    ----------------
- 
-    function Check_Lock (L : Lock_Ptr) return Boolean is
-       Self_ID : constant Task_ID := Self;
-       P       : Lock_Ptr;
- 
-    begin
-       --  Check that the argument is not null
- 
-       if L = null then
-          return False;
-       end if;
- 
-       --  Check that L is not frozen
- 
-       if L.Frozen then
-          return False;
-       end if;
- 
-       --  Check that caller is abort-deferred
- 
-       if Self_ID.Deferral_Level <= 0 then
-          return False;
-       end if;
- 
-       --  Check that caller is not holding this lock already
- 
-       if L.Owner = To_Owner_ID (Self_ID) then
-          return False;
-       end if;
- 
-       if Single_Lock then
-          return True;
-       end if;
- 
-       --  Check that TCB lock order rules are satisfied
- 
-       P := Self_ID.Common.LL.Locks;
-       if P /= null then
-          if P.Level >= L.Level
-            and then (P.Level > 2 or else L.Level > 2)
-          then
-             return False;
-          end if;
-       end if;
- 
-       return True;
-    end Check_Lock;
- 
-    -----------------
-    -- Record_Lock --
-    -----------------
- 
-    function Record_Lock (L : Lock_Ptr) return Boolean is
-       Self_ID : Task_ID := Self;
-       P       : Lock_Ptr;
- 
-    begin
-       Lock_Count := Lock_Count + 1;
- 
-       --  There should be no owner for this lock at this point
- 
-       if L.Owner /= null then
-          return False;
-       end if;
- 
-       --  Record new owner
- 
-       L.Owner := To_Owner_ID (Self_ID);
- 
-       if Single_Lock then
-          return True;
-       end if;
- 
-       --  Check that TCB lock order rules are satisfied
- 
-       P := Self_ID.Common.LL.Locks;
- 
-       if P /= null then
-          L.Next := P;
-       end if;
- 
-       Self_ID.Common.LL.Locking := null;
-       Self_ID.Common.LL.Locks := L;
-       return True;
-    end Record_Lock;
- 
-    -----------------
-    -- Check_Sleep --
-    -----------------
- 
-    function Check_Sleep (Reason : Task_States) return Boolean is
-       pragma Unreferenced (Reason);
- 
-       Self_ID : Task_ID := Self;
-       P       : Lock_Ptr;
- 
-    begin
-       --  Check that caller is abort-deferred
- 
-       if Self_ID.Deferral_Level <= 0 then
-          return False;
-       end if;
- 
-       if Single_Lock then
-          return True;
-       end if;
- 
-       --  Check that caller is holding own lock, on top of list
- 
-       if Self_ID.Common.LL.Locks /=
-         To_Lock_Ptr (Self_ID.Common.LL.L'Access)
-       then
-          return False;
-       end if;
- 
-       --  Check that TCB lock order rules are satisfied
- 
-       if Self_ID.Common.LL.Locks.Next /= null then
-          return False;
-       end if;
- 
-       Self_ID.Common.LL.L.Owner := null;
-       P := Self_ID.Common.LL.Locks;
-       Self_ID.Common.LL.Locks := Self_ID.Common.LL.Locks.Next;
-       P.Next := null;
-       return True;
-    end Check_Sleep;
- 
-    -------------------
-    -- Record_Wakeup --
-    -------------------
- 
-    function Record_Wakeup
-      (L      : Lock_Ptr;
-       Reason : Task_States)
-       return   Boolean
-    is
-       pragma Unreferenced (Reason);
- 
-       Self_ID : Task_ID := Self;
-       P       : Lock_Ptr;
- 
-    begin
-       --  Record new owner
- 
-       L.Owner := To_Owner_ID (Self_ID);
- 
-       if Single_Lock then
-          return True;
-       end if;
- 
-       --  Check that TCB lock order rules are satisfied
- 
-       P := Self_ID.Common.LL.Locks;
- 
-       if P /= null then
-          L.Next := P;
-       end if;
- 
-       Self_ID.Common.LL.Locking := null;
-       Self_ID.Common.LL.Locks := L;
-       return True;
-    end Record_Wakeup;
- 
-    ------------------
-    -- Check_Wakeup --
-    ------------------
- 
-    function Check_Wakeup
-      (T      : Task_ID;
-       Reason : Task_States)
-       return   Boolean
-    is
-       Self_ID : constant Task_ID := Self;
- 
-    begin
-       --  Is caller holding T's lock?
- 
-       if T.Common.LL.L.Owner /= To_Owner_ID (Self_ID) then
-          return False;
-       end if;
- 
-       --  Are reasons for wakeup and sleep consistent?
- 
-       if T.Common.State /= Reason then
-          return False;
-       end if;
- 
-       return True;
-    end Check_Wakeup;
- 
-    ------------------
-    -- Check_Unlock --
-    ------------------
- 
-    function Check_Unlock (L : Lock_Ptr) return Boolean is
-       Self_ID : Task_ID := Self;
-       P       : Lock_Ptr;
- 
-    begin
-       Unlock_Count := Unlock_Count + 1;
- 
-       if L = null then
-          return False;
-       end if;
- 
-       if L.Buddy /= null then
-          return False;
-       end if;
- 
-       if L.Level = 4 then
-          Check_Count := Unlock_Count;
-       end if;
- 
-       if Unlock_Count - Check_Count > 1000 then
-          Check_Count := Unlock_Count;
-       end if;
- 
-       --  Check that caller is abort-deferred
- 
-       if Self_ID.Deferral_Level <= 0 then
-          return False;
-       end if;
- 
-       --  Check that caller is holding this lock, on top of list
- 
-       if Self_ID.Common.LL.Locks /= L then
-          return False;
-       end if;
- 
-       --  Record there is no owner now
- 
-       L.Owner := null;
-       P := Self_ID.Common.LL.Locks;
-       Self_ID.Common.LL.Locks := Self_ID.Common.LL.Locks.Next;
-       P.Next := null;
-       return True;
-    end Check_Unlock;
- 
-    --------------------
-    -- Check_Finalize --
-    --------------------
- 
-    function Check_Finalize_Lock (L : Lock_Ptr) return Boolean is
-       Self_ID : constant Task_ID := Self;
- 
-    begin
-       --  Check that caller is abort-deferred
- 
-       if Self_ID.Deferral_Level <= 0 then
-          return False;
-       end if;
- 
-       --  Check that no one is holding this lock
- 
-       if L.Owner /= null then
-          return False;
-       end if;
- 
-       L.Frozen := True;
-       return True;
-    end Check_Finalize_Lock;
- 
-    ----------------
-    -- Check_Exit --
-    ----------------
- 
-    function Check_Exit (Self_ID : Task_ID) return Boolean is
-    begin
-       --  Check that caller is just holding Global_Task_Lock
-       --  and no other locks
- 
-       if Self_ID.Common.LL.Locks = null then
-          return False;
-       end if;
- 
-       --  2 = Global_Task_Level
- 
-       if Self_ID.Common.LL.Locks.Level /= 2 then
-          return False;
-       end if;
- 
-       if Self_ID.Common.LL.Locks.Next /= null then
-          return False;
-       end if;
- 
-       --  Check that caller is abort-deferred
- 
-       if Self_ID.Deferral_Level <= 0 then
-          return False;
-       end if;
- 
-       return True;
-    end Check_Exit;
- 
-    --------------------
-    -- Check_No_Locks --
-    --------------------
- 
-    function Check_No_Locks (Self_ID : Task_ID) return Boolean is
-    begin
-       return Self_ID.Common.LL.Locks = null;
-    end Check_No_Locks;
- 
-    ----------------------
-    -- Environment_Task --
-    ----------------------
- 
-    function Environment_Task return Task_ID is
-    begin
-       return Environment_Task_ID;
-    end Environment_Task;
- 
-    --------------
-    -- Lock_RTS --
-    --------------
- 
-    procedure Lock_RTS is
-    begin
-       Write_Lock (Single_RTS_Lock'Access, Global_Lock => True);
-    end Lock_RTS;
- 
-    ----------------
-    -- Unlock_RTS --
-    ----------------
- 
-    procedure Unlock_RTS is
-    begin
-       Unlock (Single_RTS_Lock'Access, Global_Lock => True);
-    end Unlock_RTS;
- 
-    ------------------
-    -- Suspend_Task --
-    ------------------
- 
-    function Suspend_Task
-      (T           : ST.Task_ID;
-       Thread_Self : Thread_Id)
-       return        Boolean
-    is
-    begin
-       if T.Common.LL.Thread /= Thread_Self then
-          return thr_suspend (T.Common.LL.Thread) = 0;
-       else
-          return True;
-       end if;
-    end Suspend_Task;
- 
-    -----------------
-    -- Resume_Task --
-    -----------------
- 
-    function Resume_Task
-      (T           : ST.Task_ID;
-       Thread_Self : Thread_Id)
-       return        Boolean
-    is
-    begin
-       if T.Common.LL.Thread /= Thread_Self then
-          return thr_continue (T.Common.LL.Thread) = 0;
-       else
-          return True;
-       end if;
-    end Resume_Task;
- 
- --  Package elaboration
- 
- begin
-    declare
-       Result : Interfaces.C.int;
- 
-    begin
-       --  Mask Environment task for all signals. The original mask of the
-       --  Environment task will be recovered by Interrupt_Server task
-       --  during the elaboration of s-interr.adb.
- 
-       System.Interrupt_Management.Operations.Set_Interrupt_Mask
-         (System.Interrupt_Management.Operations.All_Tasks_Mask'Access);
- 
-       --  Prepare the set of signals that should unblocked in all tasks
- 
-       Result := sigemptyset (Unblocked_Signal_Mask'Access);
-       pragma Assert (Result = 0);
- 
-       for J in Interrupt_Management.Interrupt_ID loop
-          if System.Interrupt_Management.Keep_Unmasked (J) then
-             Result := sigaddset (Unblocked_Signal_Mask'Access, Signal (J));
-             pragma Assert (Result = 0);
-          end if;
-       end loop;
- 
-       --  We need the following code to support automatic creation of fake
-       --  ATCB's for C threads that call the Ada run-time system, even if
-       --  we use a faster way of getting Self for real Ada tasks.
- 
-       Result := thr_keycreate (ATCB_Key'Access, System.Null_Address);
-       pragma Assert (Result = 0);
-    end;
- 
-    if Dispatching_Policy = 'F' then
-       declare
-          Result      : Interfaces.C.long;
-          Class_Info  : aliased struct_pcinfo;
-          Secs, Nsecs : Interfaces.C.long;
- 
-       begin
-          --  If a pragma Time_Slice is specified, takes the value in account.
- 
-          if Time_Slice_Val > 0 then
-             --  Convert Time_Slice_Val (microseconds) into seconds and
-             --  nanoseconds
- 
-             Secs := Time_Slice_Val / 1_000_000;
-             Nsecs := (Time_Slice_Val rem 1_000_000) * 1_000;
- 
-          --  Otherwise, default to no time slicing (i.e run until blocked)
- 
-          else
-             Secs := RT_TQINF;
-             Nsecs := RT_TQINF;
-          end if;
- 
-          --  Get the real time class id.
- 
-          Class_Info.pc_clname (1) := 'R';
-          Class_Info.pc_clname (2) := 'T';
-          Class_Info.pc_clname (3) := ASCII.NUL;
- 
-          Result := priocntl (PC_VERSION, P_LWPID, P_MYID, PC_GETCID,
-            Class_Info'Address);
- 
-          --  Request the real time class
- 
-          Prio_Param.pc_cid := Class_Info.pc_cid;
-          Prio_Param.rt_pri := pri_t (Class_Info.rt_maxpri);
-          Prio_Param.rt_tqsecs := Secs;
-          Prio_Param.rt_tqnsecs := Nsecs;
- 
-          Result := priocntl (PC_VERSION, P_LWPID, P_MYID, PC_SETPARMS,
-            Prio_Param'Address);
- 
-          Using_Real_Time_Class := Result /= -1;
-       end;
-    end if;
- end System.Task_Primitives.Operations;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5stasinf.adb gcc-4.0.0/gcc/ada/5stasinf.adb
*** gcc-3.4.3/gcc/ada/5stasinf.adb	Thu Apr 24 17:53:52 2003
--- gcc-4.0.0/gcc/ada/5stasinf.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,73 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                     S Y S T E M . T A S K _ I N F O                      --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package body contains the routines associated with the implementation
- --  of the Task_Info pragma.
- 
- --  This is the Solaris (native) version of this module.
- 
- package body System.Task_Info is
- 
-    function Unbound_Thread_Attributes return Thread_Attributes is
-    begin
-       return (False, False);
-    end Unbound_Thread_Attributes;
- 
-    function Bound_Thread_Attributes return Thread_Attributes is
-    begin
-       return (False, True);
-    end Bound_Thread_Attributes;
- 
-    function Bound_Thread_Attributes (CPU : CPU_Number)
-       return Thread_Attributes is
-    begin
-       return (True, True, CPU);
-    end Bound_Thread_Attributes;
- 
-    function New_Unbound_Thread_Attributes return Task_Info_Type is
-    begin
-       return new Thread_Attributes'(False, False);
-    end New_Unbound_Thread_Attributes;
- 
-    function New_Bound_Thread_Attributes return Task_Info_Type is
-    begin
-       return new Thread_Attributes'(False, True);
-    end New_Bound_Thread_Attributes;
- 
-    function New_Bound_Thread_Attributes (CPU : CPU_Number)
-       return Task_Info_Type is
-    begin
-       return new Thread_Attributes'(True, True, CPU);
-    end New_Bound_Thread_Attributes;
- 
- end System.Task_Info;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5stasinf.ads gcc-4.0.0/gcc/ada/5stasinf.ads
*** gcc-3.4.3/gcc/ada/5stasinf.ads	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5stasinf.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,142 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                     S Y S T E M . T A S K _ I N F O                      --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package contains the definitions and routines associated with the
- --  implementation and use of the Task_Info pragma. It is specialized
- --  appropriately for targets that make use of this pragma.
- 
- --  Note: the compiler generates direct calls to this interface, via Rtsfind.
- --  Any changes to this interface may require corresponding compiler changes.
- 
- --  This unit may be used directly from an application program by providing
- --  an appropriate WITH, and the interface can be expected to remain stable.
- 
- --  This is the Solaris (native) version of this module.
- 
- with System.OS_Interface;
- 
- package System.Task_Info is
-    pragma Elaborate_Body;
-    --  To ensure that a body is allowed
- 
-    -----------------------------------------------------
-    -- Binding of Tasks to LWPs and LWPs to processors --
-    -----------------------------------------------------
- 
-    --  The Solaris implementation of the GNU Low-Level Interface (GNULLI)
-    --  implements each Ada task as a Solaris thread.  The Solaris thread
-    --  library distributes threads across one or more LWPs (Light Weight
-    --  Process) that are members of the same process. Solaris distributes
-    --  processes and LWPs across the available CPUs on a given machine. The
-    --  pragma Task_Info provides the mechanism to control the distribution
-    --  of tasks to LWPs, and LWPs to processors.
- 
-    --  Each thread has a number of attributes that dictate it's scheduling.
-    --  These attributes are:
-    --
-    --      New_LWP:       whether a new LWP is created for this thread.
-    --
-    --      Bound_To_LWP:  whether the thread is bound to a specific LWP
-    --                     for its entire lifetime.
-    --
-    --      CPU:           the CPU number associated to the LWP
-    --
- 
-    --  The Task_Info pragma:
- 
-    --    pragma Task_Info (EXPRESSION);
- 
-    --  allows the specification on a task by task basis of a value of type
-    --  System.Task_Info.Task_Info_Type to be passed to a task when it is
-    --  created. The specification of this type, and the effect on the task
-    --  that is created is target dependent.
- 
-    --  The Task_Info pragma appears within a task definition (compare the
-    --  definition and implementation of pragma Priority). If no such pragma
-    --  appears, then the value Task_Info_Unspecified is passed. If a pragma
-    --  is present, then it supplies an alternative value. If the argument of
-    --  the pragma is a discriminant reference, then the value can be set on
-    --  a task by task basis by supplying the appropriate discriminant value.
- 
-    --  Note that this means that the type used for Task_Info_Type must be
-    --  suitable for use as a discriminant (i.e. a scalar or access type).
- 
-    -----------------------
-    -- Thread Attributes --
-    -----------------------
- 
-    subtype CPU_Number is System.OS_Interface.processorid_t;
- 
-    CPU_UNCHANGED : constant CPU_Number := System.OS_Interface.PBIND_QUERY;
-    --  Do not bind the LWP to a specific processor
- 
-    ANY_CPU       : constant CPU_Number := System.OS_Interface.PBIND_NONE;
-    --  Bind the LWP to any processor
- 
-    Invalid_CPU_Number : exception;
- 
-    type Thread_Attributes (New_LWP : Boolean) is record
-       Bound_To_LWP     : Boolean    := True;
-       case New_LWP is
-          when False =>
-             null;
-          when True =>
-             CPU        : CPU_Number := CPU_UNCHANGED;
-       end case;
-    end record;
- 
-    Default_Thread_Attributes : constant Thread_Attributes := (False, True);
- 
-    function Unbound_Thread_Attributes
-       return Thread_Attributes;
- 
-    function Bound_Thread_Attributes
-       return Thread_Attributes;
- 
-    function Bound_Thread_Attributes (CPU : CPU_Number)
-       return Thread_Attributes;
- 
-    type Task_Info_Type is access all Thread_Attributes;
- 
-    function New_Unbound_Thread_Attributes
-       return Task_Info_Type;
- 
-    function New_Bound_Thread_Attributes
-       return Task_Info_Type;
- 
-    function New_Bound_Thread_Attributes (CPU : CPU_Number)
-       return Task_Info_Type;
- 
-    Unspecified_Task_Info : constant Task_Info_Type := null;
- 
- end System.Task_Info;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5staspri.ads gcc-4.0.0/gcc/ada/5staspri.ads
*** gcc-3.4.3/gcc/ada/5staspri.ads	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5staspri.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,125 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                 S Y S T E M . T A S K _ P R I M I T I V E S              --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --          Copyright (C) 1992-2000, Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a Solaris version of this package.
- --  It was created by hand for use with new "checked"
- --  GNULLI primitives.
- 
- --  This package provides low-level support for most tasking features.
- 
- pragma Polling (Off);
- --  Turn off polling, we do not want ATC polling to take place during
- --  tasking operations. It causes infinite loops and other problems.
- 
- with System.OS_Interface;
- --  used for mutex_t
- --           cond_t
- --           thread_t
- 
- package System.Task_Primitives is
-    pragma Preelaborate;
- 
-    type Lock is limited private;
-    type Lock_Ptr is access all Lock;
-    --  Should be used for implementation of protected objects.
- 
-    type RTS_Lock is limited private;
-    type RTS_Lock_Ptr is access all RTS_Lock;
-    --  Should be used inside the runtime system.
-    --  The difference between Lock and the RTS_Lock is that the later
-    --  one serves only as a semaphore so that do not check for
-    --  ceiling violations.
- 
-    type Task_Body_Access is access procedure;
-    --  Pointer to the task body's entry point (or possibly a wrapper
-    --  declared local to the GNARL).
- 
-    type Private_Data is limited private;
-    --  Any information that the GNULLI needs maintained on a per-task
-    --  basis.  A component of this type is guaranteed to be included
-    --  in the Ada_Task_Control_Block.
- 
- private
- 
-    type Private_Task_Serial_Number is mod 2 ** 64;
-    --  Used to give each task a unique serial number.
- 
-    type Base_Lock is new System.OS_Interface.mutex_t;
- 
-    type Owner_Int is new Integer;
-    for Owner_Int'Alignment use Standard'Maximum_Alignment;
- 
-    type Owner_ID is access all Owner_Int;
- 
-    type Lock is record
-       L : aliased Base_Lock;
-       Ceiling : System.Any_Priority := System.Any_Priority'First;
-       Saved_Priority : System.Any_Priority :=  System.Any_Priority'First;
-       Owner : Owner_ID;
-       Next  : Lock_Ptr;
-       Level : Private_Task_Serial_Number := 0;
-       Buddy : Owner_ID;
-       Frozen : Boolean := False;
-    end record;
- 
-    type RTS_Lock is new Lock;
- 
-    --  Note that task support on gdb relies on the fact that the first
-    --  2 fields of Private_Data are Thread and LWP.
- 
-    type Private_Data is record
-       Thread      : aliased System.OS_Interface.thread_t;
-       pragma Atomic (Thread);
-       --  Thread field may be updated by two different threads of control.
-       --  (See, Enter_Task and Create_Task in s-taprop.adb).
-       --  They put the same value (thr_self value). We do not want to
-       --  use lock on those operations and the only thing we have to
-       --  make sure is that they are updated in atomic fashion.
- 
-       LWP : System.OS_Interface.lwpid_t;
-       --  The LWP id of the thread. Set by self in Enter_Task.
- 
-       CV          : aliased System.OS_Interface.cond_t;
-       L           : aliased RTS_Lock;
-       --  protection for all components is lock L
- 
-       Active_Priority : System.Any_Priority := System.Any_Priority'First;
-       --  Simulated active priority,
-       --  used only if Priority_Ceiling_Support is True.
- 
-       Locking : Lock_Ptr;
-       Locks : Lock_Ptr;
-       Wakeups : Natural := 0;
-    end record;
- 
- end System.Task_Primitives;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5stpopsp.adb gcc-4.0.0/gcc/ada/5stpopsp.adb
*** gcc-3.4.3/gcc/ada/5stpopsp.adb	Mon Jan  5 15:20:43 2004
--- gcc-4.0.0/gcc/ada/5stpopsp.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,107 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                SYSTEM.TASK_PRIMITIVES.OPERATIONS.SPECIFIC                --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --         Copyright (C) 1992-2003, Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a version for Solaris native threads
- 
- separate (System.Task_Primitives.Operations)
- package body Specific is
- 
-    ----------------
-    -- Initialize --
-    ----------------
- 
-    procedure Initialize (Environment_Task : Task_ID) is
-       Result : Interfaces.C.int;
-    begin
-       Result := thr_setspecific (ATCB_Key, To_Address (Environment_Task));
-       pragma Assert (Result = 0);
-    end Initialize;
- 
-    -------------------
-    -- Is_Valid_Task --
-    -------------------
- 
-    function Is_Valid_Task return Boolean is
-       Unknown_Task : aliased System.Address;
-       Result       : Interfaces.C.int;
-    begin
-       Result := thr_getspecific (ATCB_Key, Unknown_Task'Unchecked_Access);
-       pragma Assert (Result = 0);
-       return Unknown_Task /= System.Null_Address;
-    end Is_Valid_Task;
- 
-    ---------
-    -- Set --
-    ---------
- 
-    procedure Set (Self_Id : Task_ID) is
-       Result : Interfaces.C.int;
-    begin
-       Result := thr_setspecific (ATCB_Key, To_Address (Self_Id));
-       pragma Assert (Result = 0);
-    end Set;
- 
-    ----------
-    -- Self --
-    ----------
- 
-    --  To make Ada tasks and C threads interoperate better, we have
-    --  added some functionality to Self. Suppose a C main program
-    --  (with threads) calls an Ada procedure and the Ada procedure
-    --  calls the tasking run-time system. Eventually, a call will be
-    --  made to self. Since the call is not coming from an Ada task,
-    --  there will be no corresponding ATCB.
- 
-    --  What we do in Self is to catch references that do not come
-    --  from recognized Ada tasks, and create an ATCB for the calling
-    --  thread.
- 
-    --  The new ATCB will be "detached" from the normal Ada task
-    --  master hierarchy, much like the existing implicitly created
-    --  signal-server tasks.
- 
-    function Self return Task_ID is
-       Result  : Interfaces.C.int;
-       Self_Id : aliased System.Address;
-    begin
-       Result := thr_getspecific (ATCB_Key, Self_Id'Unchecked_Access);
-       pragma Assert (Result = 0);
- 
-       if Self_Id = System.Null_Address then
-          return Register_Foreign_Thread;
-       else
-          return To_Task_ID (Self_Id);
-       end if;
-    end Self;
- 
- end Specific;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5svxwork.ads gcc-4.0.0/gcc/ada/5svxwork.ads
*** gcc-3.4.3/gcc/ada/5svxwork.ads	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5svxwork.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,62 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
- --                                                                          --
- --                        S Y S T E M . V X W O R K S                       --
- --                                                                          --
- --                                   S p e c                                --
- --                                                                          --
- --            Copyright (C) 1998-2002 Free Software Foundation, Inc.        --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the Sparc64 VxWorks version of this package.
- 
- with Interfaces;
- 
- package System.VxWorks is
-    pragma Preelaborate (System.VxWorks);
- 
-    --  Floating point context record. SPARCV9 version
- 
-    FP_NUM_DREGS : constant := 32;
- 
-    type RType is new Interfaces.Unsigned_64;
-    for RType'Alignment use 8;
- 
-    type Fpd_Array is array (1 .. FP_NUM_DREGS) of RType;
-    for Fpd_Array'Alignment use 8;
- 
-    type FP_CONTEXT is record
-       fpd : Fpd_Array;
-       fsr : RType;
-    end record;
- 
-    for FP_CONTEXT'Alignment use 8;
-    pragma Convention (C, FP_CONTEXT);
- 
-    Num_HW_Interrupts : constant := 256;
-    --  Number of entries in hardware interrupt vector table.
- 
- end System.VxWorks;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5tosinte.ads gcc-4.0.0/gcc/ada/5tosinte.ads
*** gcc-3.4.3/gcc/ada/5tosinte.ads	Fri Dec  5 10:52:03 2003
--- gcc-4.0.0/gcc/ada/5tosinte.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,661 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   S Y S T E M . O S _ I N T E R F A C E                  --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --          Copyright (C) 1997-2003, Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a Solaris (FSU THREADS) version of this package.
- 
- --  This package includes all direct interfaces to OS services
- --  that are needed by children of System.
- 
- --  PLEASE DO NOT add any with-clauses to this package
- --  or remove the pragma Elaborate_Body.
- --  It is designed to be a bottom-level (leaf) package.
- 
- with Interfaces.C;
- package System.OS_Interface is
-    pragma Preelaborate;
- 
-    pragma Linker_Options ("-lgthreads");
-    pragma Linker_Options ("-lmalloc");
- 
-    subtype int            is Interfaces.C.int;
-    subtype short          is Interfaces.C.short;
-    subtype long           is Interfaces.C.long;
-    subtype unsigned       is Interfaces.C.unsigned;
-    subtype unsigned_short is Interfaces.C.unsigned_short;
-    subtype unsigned_long  is Interfaces.C.unsigned_long;
-    subtype unsigned_char  is Interfaces.C.unsigned_char;
-    subtype plain_char     is Interfaces.C.plain_char;
-    subtype size_t         is Interfaces.C.size_t;
- 
-    -----------
-    -- Errno --
-    -----------
- 
-    function errno return int;
-    pragma Import (C, errno, "__get_errno");
- 
-    EAGAIN    : constant := 11;
-    EINTR     : constant := 4;
-    EINVAL    : constant := 22;
-    ENOMEM    : constant := 12;
-    ETIMEDOUT : constant := 145;
- 
-    -------------
-    -- Signals --
-    -------------
- 
-    Max_Interrupt : constant := 45;
-    type Signal is new int range 0 .. Max_Interrupt;
-    for Signal'Size use int'Size;
- 
-    SIGHUP     : constant := 1; --  hangup
-    SIGINT     : constant := 2; --  interrupt (rubout)
-    SIGQUIT    : constant := 3; --  quit (ASCD FS)
-    SIGILL     : constant := 4; --  illegal instruction (not reset)
-    SIGTRAP    : constant := 5; --  trace trap (not reset)
-    SIGIOT     : constant := 6; --  IOT instruction
-    SIGABRT    : constant := 6; --  used by abort, replace SIGIOT in the  future
-    SIGEMT     : constant := 7; --  EMT instruction
-    SIGFPE     : constant := 8; --  floating point exception
-    SIGKILL    : constant := 9; --  kill (cannot be caught or ignored)
-    SIGBUS     : constant := 10; --  bus error
-    SIGSEGV    : constant := 11; --  segmentation violation
-    SIGSYS     : constant := 12; --  bad argument to system call
-    SIGPIPE    : constant := 13; --  write on a pipe with no one to read it
-    SIGALRM    : constant := 14; --  alarm clock
-    SIGTERM    : constant := 15; --  software termination signal from kill
-    SIGUSR1    : constant := 16; --  user defined signal 1
-    SIGUSR2    : constant := 17; --  user defined signal 2
-    SIGCLD     : constant := 18; --  alias for SIGCHLD
-    SIGCHLD    : constant := 18; --  child status change
-    SIGPWR     : constant := 19; --  power-fail restart
-    SIGWINCH   : constant := 20; --  window size change
-    SIGURG     : constant := 21; --  urgent condition on IO channel
-    SIGPOLL    : constant := 22; --  pollable event occurred
-    SIGIO      : constant := 22; --  I/O possible (Solaris SIGPOLL alias)
-    SIGSTOP    : constant := 23; --  stop (cannot be caught or ignored)
-    SIGTSTP    : constant := 24; --  user stop requested from tty
-    SIGCONT    : constant := 25; --  stopped process has been continued
-    SIGTTIN    : constant := 26; --  background tty read attempted
-    SIGTTOU    : constant := 27; --  background tty write attempted
-    SIGVTALRM  : constant := 28; --  virtual timer expired
-    SIGPROF    : constant := 29; --  profiling timer expired
-    SIGXCPU    : constant := 30; --  CPU time limit exceeded
-    SIGXFSZ    : constant := 31; --  filesize limit exceeded
-    SIGWAITING : constant := 32; --  process's lwps blocked (Solaris)
-    SIGLWP     : constant := 33; --  used by thread library (Solaris)
-    SIGFREEZE  : constant := 34; --  used by CPR (Solaris)
-    SIGTHAW    : constant := 35; --  used by CPR (Solaris)
-    SIGCANCEL  : constant := 36; --  used for thread cancel (Solaris)
-    SIGRTMIN   : constant := 38; --  first (highest-priority) realtime signal
-    SIGRTMAX   : constant := 45; --  last (lowest-priority) realtime signal
- 
-    type Signal_Set is array (Natural range <>) of Signal;
- 
-    Unmasked    : constant Signal_Set :=
-      (SIGTRAP, SIGLWP, SIGTTIN, SIGTTOU, SIGTSTP, SIGPROF);
- 
-    Reserved    : constant Signal_Set :=
-      (SIGKILL, SIGSTOP, SIGALRM, SIGVTALRM, SIGWAITING, SIGRTMAX);
- 
-    type sigset_t is private;
- 
-    function sigaddset (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigaddset, "sigaddset");
- 
-    function sigdelset (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigdelset, "sigdelset");
- 
-    function sigfillset (set : access sigset_t) return int;
-    pragma Import (C, sigfillset, "sigfillset");
- 
-    function sigismember (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigismember, "sigismember");
- 
-    function sigemptyset (set : access sigset_t) return int;
-    pragma Import (C, sigemptyset, "sigemptyset");
- 
-    type union_type_3 is new String (1 .. 116);
-    type siginfo_t is record
-       si_signo     : int;
-       si_code      : int;
-       si_errno     : int;
-       X_data       : union_type_3;
-    end record;
-    pragma Convention (C, siginfo_t);
- 
-    --  The types mcontext_t and gregset_t are part of the ucontext_t
-    --  information, which is specific to Solaris2.4 for SPARC
-    --  The ucontext_t info seems to be used by the handler
-    --  for SIGSEGV to decide whether it is a Storage_Error (stack overflow) or
-    --  a Constraint_Error (bad pointer).  The original code that did this
-    --  is suspect, so it is not clear whether we really need this part of
-    --  the signal context information, or perhaps something else.
-    --  More analysis is needed, after which these declarations may need to
-    --  be changed.
- 
-    EMT_TAGOVF  : constant := 1; --  tag overflow
-    FPE_INTDIV  : constant := 1; --  integer divide by zero
-    FPE_INTOVF  : constant := 2; --  integer overflow
-    FPE_FLTDIV  : constant := 3; --  floating point divide by zero
-    FPE_FLTOVF  : constant := 4; --  floating point overflow
-    FPE_FLTUND  : constant := 5; --  floating point underflow
-    FPE_FLTRES  : constant := 6; --  floating point inexact result
-    FPE_FLTINV  : constant := 7; --  invalid floating point operation
-    FPE_FLTSUB  : constant := 8; --  subscript out of range
- 
-    SEGV_MAPERR : constant := 1; --  address not mapped to object
-    SEGV_ACCERR : constant := 2; --  invalid permissions
- 
-    BUS_ADRALN  : constant := 1; --  invalid address alignment
-    BUS_ADRERR  : constant := 2; --  non-existent physical address
-    BUS_OBJERR  : constant := 3; --  object specific hardware error
- 
-    ILL_ILLOPC  : constant := 1; --  illegal opcode
-    ILL_ILLOPN  : constant := 2; --  illegal operand
-    ILL_ILLADR  : constant := 3; --  illegal addressing mode
-    ILL_ILLTRP  : constant := 4; --  illegal trap
-    ILL_PRVOPC  : constant := 5; --  privileged opcode
-    ILL_PRVREG  : constant := 6; --  privileged register
-    ILL_COPROC  : constant := 7; --  co-processor
-    ILL_BADSTK  : constant := 8; --  bad stack
- 
-    type greg_t is new int;
- 
-    type gregset_t is array (Integer range 0 .. 18) of greg_t;
- 
-    REG_O0 : constant := 11;
-    --  index of saved register O0 in ucontext.uc_mcontext.gregs array
- 
-    type union_type_2 is new String (1 .. 128);
-    type record_type_1 is record
-       fpu_fr       : union_type_2;
-       fpu_q        : System.Address;
-       fpu_fsr      : unsigned;
-       fpu_qcnt     : unsigned_char;
-       fpu_q_entrysize  : unsigned_char;
-       fpu_en       : unsigned_char;
-    end record;
-    pragma Convention (C, record_type_1);
-    type array_type_7 is array (Integer range 0 .. 20) of long;
-    type mcontext_t is record
-       gregs        : gregset_t;
-       gwins        : System.Address;
-       fpregs       : record_type_1;
-       filler       : array_type_7;
-    end record;
-    pragma Convention (C, mcontext_t);
- 
-    type record_type_2 is record
-       ss_sp        : System.Address;
-       ss_size      : int;
-       ss_flags     : int;
-    end record;
-    pragma Convention (C, record_type_2);
-    type array_type_8 is array (Integer range 0 .. 22) of long;
-    type ucontext_t is record
-       uc_flags     : unsigned_long;
-       uc_link      : System.Address;
-       uc_sigmask   : sigset_t;
-       uc_stack     : record_type_2;
-       uc_mcontext  : mcontext_t;
-       uc_filler    : array_type_8;
-    end record;
-    pragma Convention (C, ucontext_t);
- 
-    type Signal_Handler is access procedure
-       (signo   : Signal;
-        info    : access siginfo_t;
-        context : access ucontext_t);
- 
-    type union_type_1 is new plain_char;
-    type array_type_2 is array (Integer range 0 .. 1) of int;
-    type struct_sigaction is record
-       sa_flags     : int;
-       sa_handler   : System.Address;
-       sa_mask      : sigset_t;
-       sa_resv      : array_type_2;
-    end record;
-    pragma Convention (C, struct_sigaction);
-    type struct_sigaction_ptr is access all struct_sigaction;
- 
-    SA_SIGINFO  : constant := 16#08#;
- 
-    SIG_BLOCK   : constant := 1;
-    SIG_UNBLOCK : constant := 2;
-    SIG_SETMASK : constant := 3;
- 
-    SIG_DFL : constant := 0;
-    SIG_IGN : constant := 1;
- 
-    function sigaction
-      (sig  : Signal;
-       act  : struct_sigaction_ptr;
-       oact : struct_sigaction_ptr) return int;
-    pragma Import (C, sigaction, "sigaction");
- 
-    ----------
-    -- Time --
-    ----------
- 
-    Time_Slice_Supported : constant Boolean := False;
-    --  Indicates wether time slicing is supported (i.e FSU threads have been
-    --  compiled with DEF_RR)
- 
-    type timespec is private;
- 
-    type clockid_t is private;
- 
-    CLOCK_REALTIME : constant clockid_t;
- 
-    function clock_gettime
-      (clock_id : clockid_t;
-       tp       : access timespec) return int;
-    pragma Import (C, clock_gettime, "clock_gettime");
- 
-    function To_Duration (TS : timespec) return Duration;
-    pragma Inline (To_Duration);
- 
-    function To_Timespec (D : Duration) return timespec;
-    pragma Inline (To_Timespec);
- 
-    type struct_timeval is private;
- 
-    function To_Duration (TV : struct_timeval) return Duration;
-    pragma Inline (To_Duration);
- 
-    function To_Timeval (D : Duration) return struct_timeval;
-    pragma Inline (To_Timeval);
- 
-    -------------------------
-    -- Priority Scheduling --
-    -------------------------
- 
-    SCHED_FIFO  : constant := 0;
-    SCHED_RR    : constant := 1;
-    SCHED_OTHER : constant := 2;
- 
-    -------------
-    -- Process --
-    -------------
- 
-    type pid_t is private;
- 
-    function kill (pid : pid_t; sig : Signal) return int;
-    pragma Import (C, kill, "kill");
- 
-    function getpid return pid_t;
-    pragma Import (C, getpid, "getpid");
- 
-    ---------
-    -- LWP --
-    ---------
- 
-    function lwp_self return System.Address;
-    --  lwp_self does not exist on this thread library, revert to pthread_self
-    --  which is the closest approximation (with getpid). This function is
-    --  needed to share 7staprop.adb across POSIX-like targets.
-    pragma Import (C, lwp_self, "pthread_self");
- 
-    -------------
-    -- Threads --
-    -------------
- 
-    type Thread_Body is access
-      function (arg : System.Address) return System.Address;
-    type pthread_t           is private;
-    subtype Thread_Id        is pthread_t;
- 
-    type pthread_mutex_t     is limited private;
-    type pthread_cond_t      is limited private;
-    type pthread_attr_t      is limited private;
-    type pthread_mutexattr_t is limited private;
-    type pthread_condattr_t  is limited private;
-    type pthread_key_t       is private;
- 
-    PTHREAD_CREATE_DETACHED : constant := 1;
- 
-    -----------
-    -- Stack --
-    -----------
- 
-    Stack_Base_Available : constant Boolean := False;
-    --  Indicates wether the stack base is available on this target.
-    --  This allows us to share s-osinte.adb between all the FSU run time.
-    --  Note that this value can only be true if pthread_t has a complete
-    --  definition that corresponds exactly to the C header files.
- 
-    function Get_Stack_Base (thread : pthread_t) return Address;
-    pragma Inline (Get_Stack_Base);
-    --  returns the stack base of the specified thread.
-    --  Only call this function when Stack_Base_Available is True.
- 
-    function Get_Page_Size return size_t;
-    function Get_Page_Size return Address;
-    pragma Import (C, Get_Page_Size, "getpagesize");
-    --  returns the size of a page, or 0 if this is not relevant on this
-    --  target
- 
-    PROT_NONE  : constant := 0;
-    PROT_READ  : constant := 1;
-    PROT_WRITE : constant := 2;
-    PROT_EXEC  : constant := 4;
-    PROT_ALL   : constant := PROT_READ + PROT_WRITE + PROT_EXEC;
- 
-    PROT_ON    : constant := PROT_NONE;
-    PROT_OFF   : constant := PROT_ALL;
- 
-    function mprotect (addr : Address; len : size_t; prot : int) return int;
-    pragma Import (C, mprotect);
- 
-    ---------------------------------------
-    -- Nonstandard Thread Initialization --
-    ---------------------------------------
- 
-    procedure pthread_init;
-    --  FSU_THREADS requires pthread_init, which is nonstandard
-    --  and this should be invoked during the elaboration of s-taprop.adb
-    pragma Import (C, pthread_init, "pthread_init");
- 
-    -------------------------
-    -- POSIX.1c  Section 3 --
-    -------------------------
- 
-    function sigwait (set : access sigset_t; sig : access Signal) return int;
-    --  FSU_THREADS has a nonstandard sigwait
- 
-    function pthread_kill (thread : pthread_t; sig : Signal) return int;
-    pragma Import (C, pthread_kill, "pthread_kill");
- 
-    type sigset_t_ptr is access all sigset_t;
- 
-    function pthread_sigmask
-      (how  : int;
-       set  : sigset_t_ptr;
-       oset : sigset_t_ptr) return int;
-    pragma Import (C, pthread_sigmask, "sigprocmask");
- 
-    --------------------------
-    -- POSIX.1c  Section 11 --
-    --------------------------
- 
-    function pthread_mutexattr_init
-      (attr : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
- 
-    function pthread_mutexattr_destroy
-      (attr : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
- 
-    function pthread_mutex_init
-      (mutex : access pthread_mutex_t;
-       attr  : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
- 
-    function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
- 
-    function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
-    --  FSU_THREADS has nonstandard pthread_mutex_lock
- 
-    function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
-    --  FSU_THREADS has nonstandard pthread_mutex_lock
- 
-    function pthread_condattr_init
-      (attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
- 
-    function pthread_condattr_destroy
-      (attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
- 
-    function pthread_cond_init
-      (cond : access pthread_cond_t;
-       attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_cond_init, "pthread_cond_init");
- 
-    function pthread_cond_destroy (cond : access pthread_cond_t) return int;
-    pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
- 
-    function pthread_cond_signal (cond : access pthread_cond_t) return int;
-    pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
- 
-    function pthread_cond_wait
-      (cond  : access pthread_cond_t;
-       mutex : access pthread_mutex_t) return int;
-    --  FSU_THREADS has a nonstandard pthread_cond_wait
- 
-    function pthread_cond_timedwait
-      (cond    : access pthread_cond_t;
-       mutex   : access pthread_mutex_t;
-       abstime : access timespec) return int;
-    --  FSU_THREADS has a nonstandard pthread_cond_timedwait
- 
-    Relative_Timed_Wait : constant Boolean := False;
-    --  pthread_cond_timedwait requires an absolute delay time
- 
-    --------------------------
-    -- POSIX.1c  Section 13 --
-    --------------------------
- 
-    PTHREAD_PRIO_NONE    : constant := 0;
-    PTHREAD_PRIO_PROTECT : constant := 2;
-    PTHREAD_PRIO_INHERIT : constant := 1;
- 
-    function pthread_mutexattr_setprotocol
-      (attr     : access pthread_mutexattr_t;
-       protocol : int) return int;
-    pragma Import (C, pthread_mutexattr_setprotocol);
- 
-    function pthread_mutexattr_setprioceiling
-      (attr     : access pthread_mutexattr_t;
-       prioceiling : int) return int;
-    pragma Import
-      (C, pthread_mutexattr_setprioceiling,
-       "pthread_mutexattr_setprio_ceiling");
- 
-    type struct_sched_param is record
-       sched_priority : int;  --  scheduling priority
-    end record;
- 
-    function pthread_setschedparam
-      (thread : pthread_t;
-       policy : int;
-       param  : access struct_sched_param) return int;
-    --  FSU_THREADS does not have pthread_setschedparam
- 
-    function pthread_attr_setscope
-      (attr            : access pthread_attr_t;
-       contentionscope : int) return int;
-    pragma Import (C, pthread_attr_setscope, "pthread_attr_setscope");
- 
-    function pthread_attr_setinheritsched
-      (attr            : access pthread_attr_t;
-       inheritsched : int) return int;
-    pragma Import (C, pthread_attr_setinheritsched);
- 
-    function pthread_attr_setschedpolicy
-      (attr   : access pthread_attr_t;
-       policy : int) return int;
-    pragma Import (C, pthread_attr_setschedpolicy, "pthread_attr_setsched");
- 
-    function sched_yield return int;
-    --  FSU_THREADS does not have sched_yield;
- 
-    ---------------------------
-    -- P1003.1c - Section 16 --
-    ---------------------------
- 
-    function pthread_attr_init (attributes : access pthread_attr_t) return int;
-    pragma Import (C, pthread_attr_init, "pthread_attr_init");
- 
-    function pthread_attr_destroy
-      (attributes : access pthread_attr_t) return int;
-    pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
- 
-    function pthread_attr_setdetachstate
-      (attr        : access pthread_attr_t;
-       detachstate : int) return int;
-    --  FSU_THREADS has a nonstandard pthread_attr_setdetachstate
- 
-    function pthread_attr_setstacksize
-      (attr      : access pthread_attr_t;
-       stacksize : size_t) return int;
-    pragma Import (C, pthread_attr_setstacksize);
- 
-    function pthread_create
-      (thread        : access pthread_t;
-       attributes    : access pthread_attr_t;
-       start_routine : Thread_Body;
-       arg           : System.Address) return int;
-    pragma Import (C, pthread_create, "pthread_create");
- 
-    procedure pthread_exit (status : System.Address);
-    pragma Import (C, pthread_exit, "pthread_exit");
- 
-    function pthread_self return pthread_t;
-    pragma Import (C, pthread_self, "pthread_self");
- 
-    --------------------------
-    -- POSIX.1c  Section 17 --
-    --------------------------
- 
-    function pthread_setspecific
-      (key   : pthread_key_t;
-       value : System.Address) return int;
-    pragma Import (C, pthread_setspecific, "pthread_setspecific");
- 
-    function pthread_getspecific (key : pthread_key_t) return System.Address;
-    --  FSU_THREADS has a nonstandard pthread_getspecific
- 
-    type destructor_pointer is access procedure (arg : System.Address);
- 
-    function pthread_key_create
-      (key        : access pthread_key_t;
-       destructor : destructor_pointer) return int;
-    pragma Import (C, pthread_key_create, "pthread_key_create");
- 
- private
- 
-    type array_type_1 is array (Integer range 0 .. 3) of unsigned_long;
-    type sigset_t is record
-       X_X_sigbits  : array_type_1;
-    end record;
-    pragma Convention (C, sigset_t);
- 
-    type pid_t is new long;
- 
-    type time_t is new long;
- 
-    type timespec is record
-       tv_sec  : time_t;
-       tv_nsec : long;
-    end record;
-    pragma Convention (C, timespec);
- 
-    type clockid_t is new int;
-    CLOCK_REALTIME : constant clockid_t := 0;
- 
-    type struct_timeval is record
-       tv_sec  : long;
-       tv_usec : long;
-    end record;
-    pragma Convention (C, struct_timeval);
- 
-    type pthread_attr_t is record
-       flags           : int;
-       stacksize       : int;
-       contentionscope : int;
-       inheritsched    : int;
-       detachstate     : int;
-       sched           : int;
-       prio            : int;
-       starttime       : timespec;
-       deadline        : timespec;
-       period          : timespec;
-    end record;
-    pragma Convention (C, pthread_attr_t);
- 
-    type pthread_condattr_t is record
-       flags : int;
-    end record;
-    pragma Convention (C, pthread_condattr_t);
- 
-    type pthread_mutexattr_t is record
-       flags        : int;
-       prio_ceiling : int;
-       protocol     : int;
-    end record;
-    pragma Convention (C, pthread_mutexattr_t);
- 
-    type sigjmp_buf is array (Integer range 0 .. 18) of int;
- 
-    type pthread_t_struct is record
-       context    : sigjmp_buf;
-       pbody      : sigjmp_buf;
-       errno      : int;
-       ret        : int;
-       stack_base : System.Address;
-    end record;
-    pragma Convention (C, pthread_t_struct);
- 
-    type pthread_t is access all pthread_t_struct;
- 
-    type queue_t is record
-       head : System.Address;
-       tail : System.Address;
-    end record;
-    pragma Convention (C, queue_t);
- 
-    type pthread_mutex_t is record
-       queue                 : queue_t;
-       lock                  : plain_char;
-       owner                 : System.Address;
-       flags                 : int;
-       prio_ceiling          : int;
-       protocol              : int;
-       prev_max_ceiling_prio : int;
-    end record;
-    pragma Convention (C, pthread_mutex_t);
- 
-    type pthread_cond_t is record
-       queue        : queue_t;
-       flags        : int;
-       waiters      : int;
-       mutex        : System.Address;
-    end record;
-    pragma Convention (C, pthread_cond_t);
- 
-    type pthread_key_t is new int;
- 
- end System.OS_Interface;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5tsystem.ads gcc-4.0.0/gcc/ada/5tsystem.ads
*** gcc-3.4.3/gcc/ada/5tsystem.ads	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5tsystem.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,236 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                        GNAT RUN-TIME COMPONENTS                          --
- --                                                                          --
- --                               S Y S T E M                                --
- --                                                                          --
- --                                 S p e c                                  --
- --                       (OpenVMS DEC Threads Version)                      --
- --                                                                          --
- --          Copyright (C) 2002-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the  contents of the part following the private keyword. --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- package System is
- pragma Pure (System);
- --  Note that we take advantage of the implementation permission to
- --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
- 
-    type Name is (SYSTEM_NAME_GNAT);
-    System_Name : constant Name := SYSTEM_NAME_GNAT;
- 
-    --  System-Dependent Named Numbers
- 
-    Min_Int               : constant := Long_Long_Integer'First;
-    Max_Int               : constant := Long_Long_Integer'Last;
- 
-    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
-    Max_Nonbinary_Modulus : constant := Integer'Last;
- 
-    Max_Base_Digits       : constant := Long_Long_Float'Digits;
-    Max_Digits            : constant := Long_Long_Float'Digits;
- 
-    Max_Mantissa          : constant := 63;
-    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
- 
-    Tick                  : constant := 0.01;
- 
-    --  Storage-related Declarations
- 
-    type Address is private;
-    Null_Address : constant Address;
- 
-    Storage_Unit : constant := 8;
-    Word_Size    : constant := 32;
-    Memory_Size  : constant := 2 ** 32;
- 
-    --  Address comparison
- 
-    function "<"  (Left, Right : Address) return Boolean;
-    function "<=" (Left, Right : Address) return Boolean;
-    function ">"  (Left, Right : Address) return Boolean;
-    function ">=" (Left, Right : Address) return Boolean;
-    function "="  (Left, Right : Address) return Boolean;
- 
-    pragma Import (Intrinsic, "<");
-    pragma Import (Intrinsic, "<=");
-    pragma Import (Intrinsic, ">");
-    pragma Import (Intrinsic, ">=");
-    pragma Import (Intrinsic, "=");
- 
-    --  Other System-Dependent Declarations
- 
-    type Bit_Order is (High_Order_First, Low_Order_First);
-    Default_Bit_Order : constant Bit_Order := Low_Order_First;
- 
-    --  Priority-related Declarations (RM D.1)
- 
-    Max_Priority           : constant Positive := 30;
-    Max_Interrupt_Priority : constant Positive := 31;
- 
-    subtype Any_Priority       is Integer      range  0 .. 31;
-    subtype Priority           is Any_Priority range  0 .. 30;
-    subtype Interrupt_Priority is Any_Priority range 31 .. 31;
- 
-    Default_Priority : constant Priority := 15;
- 
- private
- 
-    type Address is mod Memory_Size;
-    Null_Address : constant Address := 0;
- 
-    --------------------------------------
-    -- System Implementation Parameters --
-    --------------------------------------
- 
-    --  These parameters provide information about the target that is used
-    --  by the compiler. They are in the private part of System, where they
-    --  can be accessed using the special circuitry in the Targparm unit
-    --  whose source should be consulted for more detailed descriptions
-    --  of the individual switch values.
- 
-    AAMP                      : constant Boolean := False;
-    Backend_Divide_Checks     : constant Boolean := False;
-    Backend_Overflow_Checks   : constant Boolean := False;
-    Command_Line_Args         : constant Boolean := True;
-    Configurable_Run_Time     : constant Boolean := False;
-    Denorm                    : constant Boolean := False;
-    Duration_32_Bits          : constant Boolean := False;
-    Exit_Status_Supported     : constant Boolean := True;
-    Fractional_Fixed_Ops      : constant Boolean := False;
-    Frontend_Layout           : constant Boolean := False;
-    Functions_Return_By_DSP   : constant Boolean := False;
-    Machine_Overflows         : constant Boolean := False;
-    Machine_Rounds            : constant Boolean := True;
-    OpenVMS                   : constant Boolean := True;
-    Signed_Zeros              : constant Boolean := True;
-    Stack_Check_Default       : constant Boolean := True;
-    Stack_Check_Probes        : constant Boolean := True;
-    Support_64_Bit_Divides    : constant Boolean := True;
-    Support_Aggregates        : constant Boolean := True;
-    Support_Composite_Assign  : constant Boolean := True;
-    Support_Composite_Compare : constant Boolean := True;
-    Support_Long_Shifts       : constant Boolean := True;
-    Suppress_Standard_Library : constant Boolean := False;
-    Use_Ada_Main_Program_Name : constant Boolean := False;
-    ZCX_By_Default            : constant Boolean := False;
-    GCC_ZCX_Support           : constant Boolean := False;
-    Front_End_ZCX_Support     : constant Boolean := False;
- 
-    --  Obsolete entries, to be removed eventually (bootstrap issues!)
- 
-    High_Integrity_Mode       : constant Boolean := False;
-    Long_Shifts_Inlined       : constant Boolean := True;
- 
-    --------------------------
-    -- Underlying Priorities --
-    ---------------------------
- 
-    --  Important note: this section of the file must come AFTER the
-    --  definition of the system implementation parameters to ensure
-    --  that the value of these parameters is available for analysis
-    --  of the declarations here (using Rtsfind at compile time).
- 
-    --  The underlying priorities table provides a generalized mechanism
-    --  for mapping from Ada priorities to system priorities. In some
-    --  cases a 1-1 mapping is not the convenient or optimal choice.
- 
-    --  For DEC Threads OpenVMS, we use the full range of 31 priorities
-    --  in the Ada model, but map them by compression onto the more limited
-    --  range of priorities available in OpenVMS.
- 
-    --  To replace the default values of the Underlying_Priorities mapping,
-    --  copy this source file into your build directory, edit the file to
-    --  reflect your desired behavior, and recompile with the command:
- 
-    --     $ gcc -c -O3 -gnatpgn system.ads
- 
-    --  then recompile the run-time parts that depend on this package:
- 
-    --     $ gnatmake -a -gnatn -O3 <your application>
- 
-    --  then force rebuilding your application if you need different options:
- 
-    --     $ gnatmake -f <your options> <your application>
- 
-    type Priorities_Mapping is array (Any_Priority) of Integer;
-    pragma Suppress_Initialization (Priorities_Mapping);
-    --  Suppress initialization in case gnat.adc specifies Normalize_Scalars
- 
-    Underlying_Priorities : constant Priorities_Mapping :=
- 
-      (Priority'First => 16,
- 
-       1  => 17,
-       2  => 18,
-       3  => 18,
-       4  => 18,
-       5  => 18,
-       6  => 19,
-       7  => 19,
-       8  => 19,
-       9  => 20,
-       10 => 20,
-       11 => 21,
-       12 => 21,
-       13 => 22,
-       14 => 23,
- 
-       Default_Priority   => 24,
- 
-       16 => 25,
-       17 => 25,
-       18 => 25,
-       19 => 26,
-       20 => 26,
-       21 => 26,
-       22 => 27,
-       23 => 27,
-       24 => 27,
-       25 => 28,
-       26 => 28,
-       27 => 29,
-       28 => 29,
-       29 => 30,
- 
-       Priority'Last      => 30,
- 
-       Interrupt_Priority => 31);
- 
-    ----------------------------
-    -- Special VMS Interfaces --
-    ----------------------------
- 
-    procedure Lib_Stop (I : in Integer);
-    pragma Interface (C, Lib_Stop);
-    pragma Import_Procedure (Lib_Stop, "LIB$STOP", Mechanism => (Value));
-    --  Interface to VMS condition handling. Used by RTSfind and pragma
-    --  {Import,Export}_Exception. Put here because this is the only
-    --  VMS specific package that doesn't drag in tasking.
- 
- end System;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5usystem.ads gcc-4.0.0/gcc/ada/5usystem.ads
*** gcc-3.4.3/gcc/ada/5usystem.ads	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5usystem.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,150 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                        GNAT RUN-TIME COMPONENTS                          --
- --                                                                          --
- --                               S Y S T E M                                --
- --                                                                          --
- --                                 S p e c                                  --
- --                        (Solaris Sparcv9 Version)                         --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the  contents of the part following the private keyword. --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- package System is
- pragma Pure (System);
- --  Note that we take advantage of the implementation permission to
- --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
- 
-    type Name is (SYSTEM_NAME_GNAT);
-    System_Name : constant Name := SYSTEM_NAME_GNAT;
- 
-    --  System-Dependent Named Numbers
- 
-    Min_Int               : constant := Long_Long_Integer'First;
-    Max_Int               : constant := Long_Long_Integer'Last;
- 
-    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
-    Max_Nonbinary_Modulus : constant := Integer'Last;
- 
-    Max_Base_Digits       : constant := Long_Long_Float'Digits;
-    Max_Digits            : constant := Long_Long_Float'Digits;
- 
-    Max_Mantissa          : constant := 63;
-    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
- 
-    Tick                  : constant := 0.01;
- 
-    --  Storage-related Declarations
- 
-    type Address is private;
-    Null_Address : constant Address;
- 
-    Storage_Unit : constant := 8;
-    Word_Size    : constant := 64;
-    Memory_Size  : constant := 2 ** 64;
- 
-    --  Address comparison
- 
-    function "<"  (Left, Right : Address) return Boolean;
-    function "<=" (Left, Right : Address) return Boolean;
-    function ">"  (Left, Right : Address) return Boolean;
-    function ">=" (Left, Right : Address) return Boolean;
-    function "="  (Left, Right : Address) return Boolean;
- 
-    pragma Import (Intrinsic, "<");
-    pragma Import (Intrinsic, "<=");
-    pragma Import (Intrinsic, ">");
-    pragma Import (Intrinsic, ">=");
-    pragma Import (Intrinsic, "=");
- 
-    --  Other System-Dependent Declarations
- 
-    type Bit_Order is (High_Order_First, Low_Order_First);
-    Default_Bit_Order : constant Bit_Order := High_Order_First;
- 
-    --  Priority-related Declarations (RM D.1)
- 
-    Max_Priority           : constant Positive := 30;
-    Max_Interrupt_Priority : constant Positive := 31;
- 
-    subtype Any_Priority       is Integer      range  0 .. 31;
-    subtype Priority           is Any_Priority range  0 .. 30;
-    subtype Interrupt_Priority is Any_Priority range 31 .. 31;
- 
-    Default_Priority : constant Priority := 15;
- 
- private
- 
-    type Address is mod Memory_Size;
-    Null_Address : constant Address := 0;
- 
-    --------------------------------------
-    -- System Implementation Parameters --
-    --------------------------------------
- 
-    --  These parameters provide information about the target that is used
-    --  by the compiler. They are in the private part of System, where they
-    --  can be accessed using the special circuitry in the Targparm unit
-    --  whose source should be consulted for more detailed descriptions
-    --  of the individual switch values.
- 
-    AAMP                      : constant Boolean := False;
-    Backend_Divide_Checks     : constant Boolean := False;
-    Backend_Overflow_Checks   : constant Boolean := False;
-    Command_Line_Args         : constant Boolean := True;
-    Configurable_Run_Time     : constant Boolean := False;
-    Denorm                    : constant Boolean := True;
-    Duration_32_Bits          : constant Boolean := False;
-    Exit_Status_Supported     : constant Boolean := True;
-    Fractional_Fixed_Ops      : constant Boolean := False;
-    Frontend_Layout           : constant Boolean := False;
-    Functions_Return_By_DSP   : constant Boolean := False;
-    Machine_Overflows         : constant Boolean := False;
-    Machine_Rounds            : constant Boolean := True;
-    OpenVMS                   : constant Boolean := False;
-    Signed_Zeros              : constant Boolean := True;
-    Stack_Check_Default       : constant Boolean := False;
-    Stack_Check_Probes        : constant Boolean := True;
-    Support_64_Bit_Divides    : constant Boolean := True;
-    Support_Aggregates        : constant Boolean := True;
-    Support_Composite_Assign  : constant Boolean := True;
-    Support_Composite_Compare : constant Boolean := True;
-    Support_Long_Shifts       : constant Boolean := True;
-    Suppress_Standard_Library : constant Boolean := False;
-    Use_Ada_Main_Program_Name : constant Boolean := False;
-    ZCX_By_Default            : constant Boolean := True;
-    GCC_ZCX_Support           : constant Boolean := True;
-    Front_End_ZCX_Support     : constant Boolean := False;
- 
-    --  Obsolete entries, to be removed eventually (bootstrap issues!)
- 
-    High_Integrity_Mode       : constant Boolean := False;
-    Long_Shifts_Inlined       : constant Boolean := True;
- 
- end System;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5vasthan.adb gcc-4.0.0/gcc/ada/5vasthan.adb
*** gcc-3.4.3/gcc/ada/5vasthan.adb	Mon Jan  5 15:20:43 2004
--- gcc-4.0.0/gcc/ada/5vasthan.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,597 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                        GNAT RUN-TIME COMPONENTS                          --
- --                                                                          --
- --                  S Y S T E M . A S T _ H A N D L I N G                   --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --          Copyright (C) 1996-2004 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the OpenVMS/Alpha version.
- 
- with System; use System;
- 
- with System.IO;
- 
- with System.Machine_Code;
- with System.Parameters;
- with System.Storage_Elements;
- 
- with System.Tasking;
- with System.Tasking.Rendezvous;
- with System.Tasking.Initialization;
- with System.Tasking.Utilities;
- 
- with System.Task_Primitives;
- with System.Task_Primitives.Operations;
- with System.Task_Primitives.Operations.DEC;
- 
- --  with Ada.Finalization;
- --  removed, because of problem with controlled attribute ???
- 
- with Ada.Task_Attributes;
- with Ada.Task_Identification;
- 
- with Ada.Exceptions; use Ada.Exceptions;
- 
- with Ada.Unchecked_Conversion;
- 
- package body System.AST_Handling is
- 
-    package ATID renames Ada.Task_Identification;
- 
-    package SP   renames System.Parameters;
-    package ST   renames System.Tasking;
-    package STR  renames System.Tasking.Rendezvous;
-    package STI  renames System.Tasking.Initialization;
-    package STU  renames System.Tasking.Utilities;
- 
-    package SSE  renames System.Storage_Elements;
-    package STPO renames System.Task_Primitives.Operations;
-    package STPOD renames System.Task_Primitives.Operations.DEC;
- 
-    AST_Lock : aliased System.Task_Primitives.RTS_Lock;
-    --  This is a global lock; it is used to execute in mutual exclusion
-    --  from all other AST tasks.  It is only used by Lock_AST and
-    --  Unlock_AST.
- 
-    procedure Lock_AST (Self_ID : ST.Task_ID);
-    --  Locks out other AST tasks. Preceding a section of code by Lock_AST and
-    --  following it by Unlock_AST creates a critical region.
- 
-    procedure Unlock_AST (Self_ID : ST.Task_ID);
-    --  Releases lock previously set by call to Lock_AST.
-    --  All nested locks must be released before other tasks competing for the
-    --  tasking lock are released.
- 
-    --------------
-    -- Lock_AST --
-    --------------
- 
-    procedure Lock_AST (Self_ID : ST.Task_ID) is
-    begin
-       STI.Defer_Abort_Nestable (Self_ID);
-       STPO.Write_Lock (AST_Lock'Access, Global_Lock => True);
-    end Lock_AST;
- 
-    ----------------
-    -- Unlock_AST --
-    ----------------
- 
-    procedure Unlock_AST (Self_ID : ST.Task_ID) is
-    begin
-       STPO.Unlock (AST_Lock'Access, Global_Lock => True);
-       STI.Undefer_Abort_Nestable (Self_ID);
-    end Unlock_AST;
- 
-    ---------------------------------
-    -- AST_Handler Data Structures --
-    ---------------------------------
- 
-    --  As noted in the private part of the spec of System.Aux_DEC, the
-    --  AST_Handler type is simply a pointer to a procedure that takes
-    --  a single 64bit parameter. The following is a local copy
-    --  of that definition.
- 
-    --  We need our own copy because we need to get our hands on this
-    --  and we cannot see the private part of System.Aux_DEC. We don't
-    --  want to be a child of Aux_Dec because of complications resulting
-    --  from the use of pragma Extend_System. We will use unchecked
-    --  conversions between the two versions of the declarations.
- 
-    type AST_Handler is access procedure (Param : Long_Integer);
- 
-    --  However, this declaration is somewhat misleading, since the values
-    --  referenced by AST_Handler values (all produced in this package by
-    --  calls to Create_AST_Handler) are highly stylized.
- 
-    --  The first point is that in VMS/Alpha, procedure pointers do not in
-    --  fact point to code, but rather to a 48-byte procedure descriptor.
-    --  So a value of type AST_Handler is in fact a pointer to one of these
-    --  48-byte descriptors.
- 
-    type Descriptor_Type is new SSE.Storage_Array (1 .. 48);
-    for  Descriptor_Type'Alignment use Standard'Maximum_Alignment;
-    pragma Warnings (Off, Descriptor_Type);
-    --  Suppress harmless warnings about alignment.
-    --  Should explain why this warning is harmless ???
- 
-    type Descriptor_Ref is access all Descriptor_Type;
- 
-    --  Normally, there is only one such descriptor for a given procedure, but
-    --  it works fine to make a copy of the single allocated descriptor, and
-    --  use the copy itself, and we take advantage of this in the design here.
-    --  The idea is that AST_Handler values will all point to a record with the
-    --  following structure:
- 
-    --  Note: When we say it works fine, there is one delicate point, which
-    --  is that the code for the AST procedure itself requires the original
-    --  descriptor address.  We handle this by saving the orignal descriptor
-    --  address in this structure and restoring in Process_AST.
- 
-    type AST_Handler_Data is record
-       Descriptor              : Descriptor_Type;
-       Original_Descriptor_Ref : Descriptor_Ref;
-       Taskid                  : ATID.Task_Id;
-       Entryno                 : Natural;
-    end record;
- 
-    type AST_Handler_Data_Ref is access all AST_Handler_Data;
- 
-    function To_AST_Handler is new Ada.Unchecked_Conversion
-      (AST_Handler_Data_Ref, System.Aux_DEC.AST_Handler);
- 
-    --  Each time Create_AST_Handler is called, a new value of this record
-    --  type is created, containing a copy of the procedure descriptor for
-    --  the routine used to handle all AST's (Process_AST), and the Task_Id
-    --  and entry number parameters identifying the task entry involved.
- 
-    --  The AST_Handler value returned is a pointer to this record. Since
-    --  the record starts with the procedure descriptor, it can be used
-    --  by the system in the normal way to call the procedure. But now
-    --  when the procedure gets control, it can determine the address of
-    --  the procedure descriptor used to call it (since the ABI specifies
-    --  that this is left sitting in register r27 on entry), and then use
-    --  that address to retrieve the Task_Id and entry number so that it
-    --  knows on which entry to queue the AST request.
- 
-    --  The next issue is where are these records placed. Since we intend
-    --  to pass pointers to these records to asynchronous system service
-    --  routines, they have to be on the heap, which means we have to worry
-    --  about when to allocate them and deallocate them.
- 
-    --  We solve this problem by introducing a task attribute that points to
-    --  a vector, indexed by the entry number, of AST_Handler_Data records
-    --  for a given task. The pointer itself is a controlled object allowing
-    --  us to write a finalization routine that frees the referenced vector.
- 
-    --  An entry in this vector is either initialized (Entryno non-zero) and
-    --  can be used for any subsequent reference to the same entry, or it is
-    --  unused, marked by the Entryno value being zero.
- 
-    type AST_Handler_Vector is array (Natural range <>) of AST_Handler_Data;
-    type AST_Handler_Vector_Ref is access all AST_Handler_Vector;
- 
- --  type AST_Vector_Ptr is new Ada.Finalization.Controlled with record
- --  removed due to problem with controlled attribute, consequence is that
- --  we have a memory leak if a task that has AST attribute entries is
- --  terminated. ???
- 
-    type AST_Vector_Ptr is record
-       Vector : AST_Handler_Vector_Ref;
-    end record;
- 
-    AST_Vector_Init : AST_Vector_Ptr;
-    --  Initial value, treated as constant, Vector will be null.
- 
-    package AST_Attribute is new Ada.Task_Attributes
-      (Attribute     => AST_Vector_Ptr,
-       Initial_Value => AST_Vector_Init);
- 
-    use AST_Attribute;
- 
-    -----------------------
-    -- AST Service Queue --
-    -----------------------
- 
-    --  The following global data structures are used to queue pending
-    --  AST requests. When an AST is signalled, the AST service routine
-    --  Process_AST is called, and it makes an entry in this structure.
- 
-    type AST_Instance is record
-       Taskid  : ATID.Task_Id;
-       Entryno : Natural;
-       Param   : Long_Integer;
-    end record;
-    --  The Taskid and Entryno indicate the entry on which this AST is to
-    --  be queued, and Param is the parameter provided from the AST itself.
- 
-    AST_Service_Queue_Size  : constant := 256;
-    AST_Service_Queue_Limit : constant := 250;
-    type AST_Service_Queue_Index is mod AST_Service_Queue_Size;
-    --  Index used to refer to entries in the circular buffer which holds
-    --  active AST_Instance values. The upper bound reflects the maximum
-    --  number of AST instances that can be stored in the buffer. Since
-    --  these entries are immediately serviced by the high priority server
-    --  task that does the actual entry queuing, it is very unusual to have
-    --  any significant number of entries simulaneously queued.
- 
-    AST_Service_Queue : array (AST_Service_Queue_Index) of AST_Instance;
-    pragma Volatile_Components (AST_Service_Queue);
-    --  The circular buffer used to store active AST requests.
- 
-    AST_Service_Queue_Put : AST_Service_Queue_Index := 0;
-    AST_Service_Queue_Get : AST_Service_Queue_Index := 0;
-    pragma Atomic (AST_Service_Queue_Put);
-    pragma Atomic (AST_Service_Queue_Get);
-    --  These two variables point to the next slots in the AST_Service_Queue
-    --  to be used for putting a new entry in and taking an entry out. This
-    --  is a circular buffer, so these pointers wrap around. If the two values
-    --  are equal the buffer is currently empty. The pointers are atomic to
-    --  ensure proper synchronization between the single producer (namely the
-    --  Process_AST procedure), and the single consumer (the AST_Service_Task).
- 
-    --------------------------------
-    -- AST Server Task Structures --
-    --------------------------------
- 
-    --  The basic approach is that when an AST comes in, a call is made to
-    --  the Process_AST procedure. It queues the request in the service queue
-    --  and then wakes up an AST server task to perform the actual call to the
-    --  required entry. We use this intermediate server task, since the AST
-    --  procedure itself cannot wait to return, and we need some caller for
-    --  the rendezvous so that we can use the normal rendezvous mechanism.
- 
-    --  It would work to have only one AST server task, but then we would lose
-    --  all overlap in AST processing, and furthermore, we could get priority
-    --  inversion effects resulting in starvation of AST requests.
- 
-    --  We therefore maintain a small pool of AST server tasks. We adjust
-    --  the size of the pool dynamically to reflect traffic, so that we have
-    --  a sufficient number of server tasks to avoid starvation.
- 
-    Max_AST_Servers : constant Natural := 16;
-    --  Maximum number of AST server tasks that can be allocated
- 
-    Num_AST_Servers : Natural := 0;
-    --  Number of AST server tasks currently active
- 
-    Num_Waiting_AST_Servers : Natural := 0;
-    --  This is the number of AST server tasks that are either waiting for
-    --  work, or just about to go to sleep and wait for work.
- 
-    Is_Waiting : array (1 .. Max_AST_Servers) of Boolean := (others => False);
-    --  An array of flags showing which AST server tasks are currently waiting
- 
-    AST_Task_Ids : array (1 .. Max_AST_Servers) of ST.Task_ID;
-    --  Task Id's of allocated AST server tasks
- 
-    task type AST_Server_Task (Num : Natural) is
-       pragma Priority (Priority'Last);
-    end AST_Server_Task;
-    --  Declaration for AST server task. This task has no entries, it is
-    --  controlled by sleep and wakeup calls at the task primitives level.
- 
-    type AST_Server_Task_Ptr is access all AST_Server_Task;
-    --  Type used to allocate server tasks
- 
-    -----------------------
-    -- Local Subprograms --
-    -----------------------
- 
-    procedure Allocate_New_AST_Server;
-    --  Allocate an additional AST server task
- 
-    procedure Process_AST (Param : Long_Integer);
-    --  This is the central routine for processing all AST's, it is referenced
-    --  as the code address of all created AST_Handler values. See detailed
-    --  description in body to understand how it works to have a single such
-    --  procedure for all AST's even though it does not get any indication of
-    --  the entry involved passed as an explicit parameter. The single explicit
-    --  parameter Param is the parameter passed by the system with the AST.
- 
-    -----------------------------
-    -- Allocate_New_AST_Server --
-    -----------------------------
- 
-    procedure Allocate_New_AST_Server is
-       Dummy : AST_Server_Task_Ptr;
-       pragma Unreferenced (Dummy);
- 
-    begin
-       if Num_AST_Servers = Max_AST_Servers then
-          return;
- 
-       else
-          --  Note: it is safe to increment Num_AST_Servers immediately, since
-          --  no one will try to activate this task until it indicates that it
-          --  is sleeping by setting its entry in Is_Waiting to True.
- 
-          Num_AST_Servers := Num_AST_Servers + 1;
-          Dummy := new AST_Server_Task (Num_AST_Servers);
-       end if;
-    end Allocate_New_AST_Server;
- 
-    ---------------------
-    -- AST_Server_Task --
-    ---------------------
- 
-    task body AST_Server_Task is
-       Taskid  : ATID.Task_Id;
-       Entryno : Natural;
-       Param   : aliased Long_Integer;
-       Self_Id : constant ST.Task_ID := ST.Self;
- 
-       pragma Volatile (Param);
- 
-    begin
-       --  By making this task independent of master, when the environment
-       --  task is finalizing, the AST_Server_Task will be notified that it
-       --  should terminate.
- 
-       STU.Make_Independent;
- 
-       --  Record our task Id for access by Process_AST
- 
-       AST_Task_Ids (Num) := Self_Id;
- 
-       --  Note: this entire task operates with the main task lock set, except
-       --  when it is sleeping waiting for work, or busy doing a rendezvous
-       --  with an AST server. This lock protects the data structures that
-       --  are shared by multiple instances of the server task.
- 
-       Lock_AST (Self_Id);
- 
-       --  This is the main infinite loop of the task. We go to sleep and
-       --  wait to be woken up by Process_AST when there is some work to do.
- 
-       loop
-          Num_Waiting_AST_Servers := Num_Waiting_AST_Servers + 1;
- 
-          Unlock_AST (Self_Id);
- 
-          STI.Defer_Abort (Self_Id);
- 
-          if SP.Single_Lock then
-             STPO.Lock_RTS;
-          end if;
- 
-          STPO.Write_Lock (Self_Id);
- 
-          Is_Waiting (Num) := True;
- 
-          Self_Id.Common.State := ST.AST_Server_Sleep;
-          STPO.Sleep (Self_Id, ST.AST_Server_Sleep);
-          Self_Id.Common.State := ST.Runnable;
- 
-          STPO.Unlock (Self_Id);
- 
-          if SP.Single_Lock then
-             STPO.Unlock_RTS;
-          end if;
- 
-          --  If the process is finalizing, Undefer_Abort will simply end
-          --  this task.
- 
-          STI.Undefer_Abort (Self_Id);
- 
-          --  We are awake, there is something to do!
- 
-          Lock_AST (Self_Id);
-          Num_Waiting_AST_Servers := Num_Waiting_AST_Servers - 1;
- 
-          --  Loop here to service outstanding requests. We are always
-          --  locked on entry to this loop.
- 
-          while AST_Service_Queue_Get /= AST_Service_Queue_Put loop
-             Taskid  := AST_Service_Queue (AST_Service_Queue_Get).Taskid;
-             Entryno := AST_Service_Queue (AST_Service_Queue_Get).Entryno;
-             Param   := AST_Service_Queue (AST_Service_Queue_Get).Param;
- 
-             AST_Service_Queue_Get := AST_Service_Queue_Get + 1;
- 
-             --  This is a manual expansion of the normal call simple code
- 
-             declare
-                type AA is access all Long_Integer;
-                P : AA := Param'Unrestricted_Access;
- 
-                function To_ST_Task_Id is new Ada.Unchecked_Conversion
-                  (ATID.Task_Id, ST.Task_ID);
- 
-             begin
-                Unlock_AST (Self_Id);
-                STR.Call_Simple
-                  (Acceptor           => To_ST_Task_Id (Taskid),
-                   E                  => ST.Task_Entry_Index (Entryno),
-                   Uninterpreted_Data => P'Address);
- 
-             exception
-                when E : others =>
-                   System.IO.Put_Line ("%Debugging event");
-                   System.IO.Put_Line (Exception_Name (E) &
-                     " raised when trying to deliver an AST.");
- 
-                   if Exception_Message (E)'Length /= 0 then
-                      System.IO.Put_Line (Exception_Message (E));
-                   end if;
- 
-                   System.IO.Put_Line ("Task type is " & "Receiver_Type");
-                   System.IO.Put_Line ("Task id is " & ATID.Image (Taskid));
-             end;
- 
-             Lock_AST (Self_Id);
-          end loop;
-       end loop;
-    end AST_Server_Task;
- 
-    ------------------------
-    -- Create_AST_Handler --
-    ------------------------
- 
-    function Create_AST_Handler
-      (Taskid  : ATID.Task_Id;
-       Entryno : Natural) return System.Aux_DEC.AST_Handler
-    is
-       Attr_Ref : Attribute_Handle;
- 
-       Process_AST_Ptr : constant AST_Handler := Process_AST'Access;
-       --  Reference to standard procedure descriptor for Process_AST
- 
-       function To_Descriptor_Ref is new Ada.Unchecked_Conversion
-         (AST_Handler, Descriptor_Ref);
- 
-       Original_Descriptor_Ref : constant Descriptor_Ref :=
-                                   To_Descriptor_Ref (Process_AST_Ptr);
- 
-    begin
-       if ATID.Is_Terminated (Taskid) then
-          raise Program_Error;
-       end if;
- 
-       Attr_Ref := Reference (Taskid);
- 
-       --  Allocate another server if supply is getting low
- 
-       if Num_Waiting_AST_Servers < 2 then
-          Allocate_New_AST_Server;
-       end if;
- 
-       --  No point in creating more if we have zillions waiting to
-       --  be serviced.
- 
-       while AST_Service_Queue_Put - AST_Service_Queue_Get
-          > AST_Service_Queue_Limit
-       loop
-          delay 0.01;
-       end loop;
- 
-       --  If no AST vector allocated, or the one we have is too short, then
-       --  allocate one of right size and initialize all entries except the
-       --  one we will use to unused. Note that the assignment automatically
-       --  frees the old allocated table if there is one.
- 
-       if Attr_Ref.Vector = null
-         or else Attr_Ref.Vector'Length < Entryno
-       then
-          Attr_Ref.Vector := new AST_Handler_Vector (1 .. Entryno);
- 
-          for E in 1 .. Entryno loop
-             Attr_Ref.Vector (E).Descriptor :=
-               Original_Descriptor_Ref.all;
-             Attr_Ref.Vector (E).Original_Descriptor_Ref :=
-               Original_Descriptor_Ref;
-             Attr_Ref.Vector (E).Taskid  := Taskid;
-             Attr_Ref.Vector (E).Entryno := E;
-          end loop;
-       end if;
- 
-       return To_AST_Handler (Attr_Ref.Vector (Entryno)'Unrestricted_Access);
-    end Create_AST_Handler;
- 
-    ----------------------------
-    -- Expand_AST_Packet_Pool --
-    ----------------------------
- 
-    procedure Expand_AST_Packet_Pool
-      (Requested_Packets : in Natural;
-       Actual_Number     : out Natural;
-       Total_Number      : out Natural)
-    is
-       pragma Unreferenced (Requested_Packets);
-    begin
-       --  The AST implementation of GNAT does not permit dynamic expansion
-       --  of the pool, so we simply add no entries and return the total. If
-       --  it is necessary to expand the allocation, then this package body
-       --  must be recompiled with a larger value for AST_Service_Queue_Size.
- 
-       Actual_Number := 0;
-       Total_Number := AST_Service_Queue_Size;
-    end Expand_AST_Packet_Pool;
- 
-    -----------------
-    -- Process_AST --
-    -----------------
- 
-    procedure Process_AST (Param : Long_Integer) is
- 
-       Handler_Data_Ptr : AST_Handler_Data_Ref;
-       --  This variable is set to the address of the descriptor through
-       --  which Process_AST is called. Since the descriptor is part of
-       --  an AST_Handler value, this is also the address of this value,
-       --  from which we can obtain the task and entry number information.
- 
-       function To_Address is new Ada.Unchecked_Conversion
-         (ST.Task_ID, System.Address);
- 
-    begin
-       System.Machine_Code.Asm
-         (Template => "addl $27,0,%0",
-          Outputs  => AST_Handler_Data_Ref'Asm_Output ("=r", Handler_Data_Ptr),
-          Volatile => True);
- 
-       System.Machine_Code.Asm
-         (Template => "ldl $27,%0",
-          Inputs  => Descriptor_Ref'Asm_Input
-            ("m", Handler_Data_Ptr.Original_Descriptor_Ref),
-          Volatile => True);
- 
-       AST_Service_Queue (AST_Service_Queue_Put) := AST_Instance'
-         (Taskid  => Handler_Data_Ptr.Taskid,
-          Entryno => Handler_Data_Ptr.Entryno,
-          Param   => Param);
- 
-       --  OpenVMS Programming Concepts manual, chapter 8.2.3:
-       --  "Implicit synchronization can be achieved for data that is shared
-       --   for write by using only AST routines to write the data, since only
-       --   one AST can be running at any one time."
- 
-       --  This subprogram runs at AST level so is guaranteed to be
-       --  called sequentially at a given access level.
- 
-       AST_Service_Queue_Put := AST_Service_Queue_Put + 1;
- 
-       --  Need to wake up processing task. If there is no waiting server
-       --  then we have temporarily run out, but things should still be
-       --  OK, since one of the active ones will eventually pick up the
-       --  service request queued in the AST_Service_Queue.
- 
-       for J in 1 .. Num_AST_Servers loop
-          if Is_Waiting (J) then
-             Is_Waiting (J) := False;
- 
-             --  Sleeps are handled by ASTs on VMS, so don't call Wakeup.
- 
-             STPOD.Interrupt_AST_Handler (To_Address (AST_Task_Ids (J)));
-             exit;
-          end if;
-       end loop;
-    end Process_AST;
- 
- begin
-    STPO.Initialize_Lock (AST_Lock'Access, STPO.Global_Task_Level);
- end System.AST_Handling;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5vinmaop.adb gcc-4.0.0/gcc/ada/5vinmaop.adb
*** gcc-3.4.3/gcc/ada/5vinmaop.adb	Mon Jan  5 15:20:43 2004
--- gcc-4.0.0/gcc/ada/5vinmaop.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,295 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --           S Y S T E M . I N T E R R U P T _ M A N A G E M E N T .        --
- --                           O P E R A T I O N S                            --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a OpenVMS/Alpha version of this package.
- 
- with System.OS_Interface;
- --  used for various type, constant, and operations
- 
- with System.Parameters;
- 
- with System.Tasking;
- 
- with System.Tasking.Initialization;
- 
- with System.Task_Primitives.Operations;
- 
- with System.Task_Primitives.Operations.DEC;
- 
- with Unchecked_Conversion;
- 
- package body System.Interrupt_Management.Operations is
- 
-    use System.OS_Interface;
-    use System.Parameters;
-    use System.Tasking;
-    use type unsigned_short;
- 
-    function To_Address is new Unchecked_Conversion (Task_ID, System.Address);
-    package POP renames System.Task_Primitives.Operations;
- 
-    ----------------------------
-    -- Thread_Block_Interrupt --
-    ----------------------------
- 
-    procedure Thread_Block_Interrupt (Interrupt : Interrupt_ID) is
-       pragma Warnings (Off, Interrupt);
-    begin
-       null;
-    end Thread_Block_Interrupt;
- 
-    ------------------------------
-    -- Thread_Unblock_Interrupt --
-    ------------------------------
- 
-    procedure Thread_Unblock_Interrupt (Interrupt : Interrupt_ID) is
-       pragma Warnings (Off, Interrupt);
-    begin
-       null;
-    end Thread_Unblock_Interrupt;
- 
-    ------------------------
-    -- Set_Interrupt_Mask --
-    ------------------------
- 
-    procedure Set_Interrupt_Mask (Mask : access Interrupt_Mask) is
-       pragma Warnings (Off, Mask);
-    begin
-       null;
-    end Set_Interrupt_Mask;
- 
-    procedure Set_Interrupt_Mask
-      (Mask  : access Interrupt_Mask;
-       OMask : access Interrupt_Mask)
-    is
-       pragma Warnings (Off, Mask);
-       pragma Warnings (Off, OMask);
-    begin
-       null;
-    end Set_Interrupt_Mask;
- 
-    ------------------------
-    -- Get_Interrupt_Mask --
-    ------------------------
- 
-    procedure Get_Interrupt_Mask (Mask : access Interrupt_Mask) is
-       pragma Warnings (Off, Mask);
-    begin
-       null;
-    end Get_Interrupt_Mask;
- 
-    --------------------
-    -- Interrupt_Wait --
-    --------------------
- 
-    function To_unsigned_long is new
-      Unchecked_Conversion (System.Address, unsigned_long);
- 
-    function Interrupt_Wait (Mask : access Interrupt_Mask)
-      return Interrupt_ID
-    is
-       Self_ID : constant Task_ID := Self;
-       Iosb    : IO_Status_Block_Type := (0, 0, 0);
-       Status  : Cond_Value_Type;
- 
-    begin
- 
-       --  A QIO read is registered. The system call returns immediately
-       --  after scheduling an AST to be fired when the operation
-       --  completes.
- 
-       Sys_QIO
-         (Status => Status,
-          Chan   => Rcv_Interrupt_Chan,
-          Func   => IO_READVBLK,
-          Iosb   => Iosb,
-          Astadr =>
-            POP.DEC.Interrupt_AST_Handler'Access,
-          Astprm => To_Address (Self_ID),
-          P1     => To_unsigned_long (Interrupt_Mailbox'Address),
-          P2     => Interrupt_ID'Size / 8);
- 
-       pragma Assert ((Status and 1) = 1);
- 
-       loop
- 
-          --  Wait to be woken up. Could be that the AST has fired,
-          --  in which case the Iosb.Status variable will be non-zero,
-          --  or maybe the wait is being aborted.
- 
-          POP.Sleep
-            (Self_ID,
-             System.Tasking.Interrupt_Server_Blocked_On_Event_Flag);
- 
-          if Iosb.Status /= 0 then
-             if (Iosb.Status and 1) = 1
-               and then Mask (Signal (Interrupt_Mailbox))
-             then
-                return Interrupt_Mailbox;
-             else
-                return 0;
-             end if;
-          else
-             POP.Unlock (Self_ID);
- 
-             if Single_Lock then
-                POP.Unlock_RTS;
-             end if;
- 
-             System.Tasking.Initialization.Undefer_Abort (Self_ID);
-             System.Tasking.Initialization.Defer_Abort (Self_ID);
- 
-             if Single_Lock then
-                POP.Lock_RTS;
-             end if;
- 
-             POP.Write_Lock (Self_ID);
-          end if;
-       end loop;
-    end Interrupt_Wait;
- 
-    ----------------------------
-    -- Install_Default_Action --
-    ----------------------------
- 
-    procedure Install_Default_Action (Interrupt : Interrupt_ID) is
-       pragma Warnings (Off, Interrupt);
-    begin
-       null;
-    end Install_Default_Action;
- 
-    ---------------------------
-    -- Install_Ignore_Action --
-    ---------------------------
- 
-    procedure Install_Ignore_Action (Interrupt : Interrupt_ID) is
-       pragma Warnings (Off, Interrupt);
-    begin
-       null;
-    end Install_Ignore_Action;
- 
-    -------------------------
-    -- Fill_Interrupt_Mask --
-    -------------------------
- 
-    procedure Fill_Interrupt_Mask (Mask : access Interrupt_Mask) is
-    begin
-       Mask.all := (others => True);
-    end Fill_Interrupt_Mask;
- 
-    --------------------------
-    -- Empty_Interrupt_Mask --
-    --------------------------
- 
-    procedure Empty_Interrupt_Mask (Mask : access Interrupt_Mask) is
-    begin
-       Mask.all := (others => False);
-    end Empty_Interrupt_Mask;
- 
-    ---------------------------
-    -- Add_To_Interrupt_Mask --
-    ---------------------------
- 
-    procedure Add_To_Interrupt_Mask
-      (Mask      : access Interrupt_Mask;
-       Interrupt : Interrupt_ID)
-    is
-    begin
-       Mask (Signal (Interrupt)) := True;
-    end Add_To_Interrupt_Mask;
- 
-    --------------------------------
-    -- Delete_From_Interrupt_Mask --
-    --------------------------------
- 
-    procedure Delete_From_Interrupt_Mask
-      (Mask      : access Interrupt_Mask;
-       Interrupt : Interrupt_ID)
-    is
-    begin
-       Mask (Signal (Interrupt)) := False;
-    end Delete_From_Interrupt_Mask;
- 
-    ---------------
-    -- Is_Member --
-    ---------------
- 
-    function Is_Member
-      (Mask      : access Interrupt_Mask;
-       Interrupt : Interrupt_ID) return Boolean
-    is
-    begin
-       return Mask (Signal (Interrupt));
-    end Is_Member;
- 
-    -------------------------
-    -- Copy_Interrupt_Mask --
-    -------------------------
- 
-    procedure Copy_Interrupt_Mask
-      (X : out Interrupt_Mask;
-       Y : Interrupt_Mask)
-    is
-    begin
-       X := Y;
-    end Copy_Interrupt_Mask;
- 
-    -------------------------
-    -- Interrupt_Self_Process --
-    -------------------------
- 
-    procedure Interrupt_Self_Process (Interrupt : Interrupt_ID) is
-       Status : Cond_Value_Type;
-    begin
-       Sys_QIO
-         (Status => Status,
-          Chan   => Snd_Interrupt_Chan,
-          Func   => IO_WRITEVBLK,
-          P1     => To_unsigned_long (Interrupt'Address),
-          P2     => Interrupt_ID'Size / 8);
- 
-       pragma Assert ((Status and 1) = 1);
-    end Interrupt_Self_Process;
- 
- begin
-    Environment_Mask := (others => False);
-    All_Tasks_Mask := (others => True);
- 
-    for J in Interrupt_ID loop
-       if Keep_Unmasked (J) then
-          Environment_Mask (Signal (J)) := True;
-          All_Tasks_Mask (Signal (J)) := False;
-       end if;
-    end loop;
- end System.Interrupt_Management.Operations;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5vinterr.adb gcc-4.0.0/gcc/ada/5vinterr.adb
*** gcc-3.4.3/gcc/ada/5vinterr.adb	Mon Jan  5 15:20:43 2004
--- gcc-4.0.0/gcc/ada/5vinterr.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,1176 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                     S Y S T E M . I N T E R R U P T S                    --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --         Copyright (C) 1992-2004, Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is an OpenVMS/Alpha version of this package.
- 
- --  Invariants:
- 
- --  Once we associate a Server_Task with an interrupt, the task never
- --  goes away, and we never remove the association.
- 
- --  There is no more than one interrupt per Server_Task and no more than
- --  one Server_Task per interrupt.
- 
- --  Within this package, the lock L is used to protect the various status
- --  tables. If there is a Server_Task associated with an interrupt, we use
- --  the per-task lock of the Server_Task instead so that we protect the
- --  status between Interrupt_Manager and Server_Task. Protection among
- --  service requests are done using User Request to Interrupt_Manager
- --  rendezvous.
- 
- with Ada.Task_Identification;
- --  used for Task_ID type
- 
- with Ada.Exceptions;
- --  used for Raise_Exception
- 
- with System.Task_Primitives;
- --  used for RTS_Lock
- --           Self
- 
- with System.Interrupt_Management;
- --  used for Reserve
- --           Interrupt_ID
- --           Interrupt_Mask
- --           Abort_Task_Interrupt
- 
- with System.Interrupt_Management.Operations;
- --  used for Thread_Block_Interrupt
- --           Thread_Unblock_Interrupt
- --           Install_Default_Action
- --           Install_Ignore_Action
- --           Copy_Interrupt_Mask
- --           Set_Interrupt_Mask
- --           Empty_Interrupt_Mask
- --           Fill_Interrupt_Mask
- --           Add_To_Interrupt_Mask
- --           Delete_From_Interrupt_Mask
- --           Interrupt_Wait
- --           Interrupt_Self_Process
- --           Get_Interrupt_Mask
- --           Set_Interrupt_Mask
- --           IS_Member
- --           Environment_Mask
- pragma Elaborate_All (System.Interrupt_Management.Operations);
- 
- with System.Task_Primitives.Operations;
- --  used for Write_Lock
- --           Unlock
- --           Abort
- --           Wakeup_Task
- --           Sleep
- --           Initialize_Lock
- 
- with System.Task_Primitives.Interrupt_Operations;
- --  used for Set_Interrupt_ID
- 
- with System.Storage_Elements;
- --  used for To_Address
- --           To_Integer
- --           Integer_Address
- 
- with System.Tasking;
- --  used for Task_ID
- --           Task_Entry_Index
- --           Null_Task
- --           Self
- --           Interrupt_Manager_ID
- 
- with System.Tasking.Utilities;
- --  used for Make_Independent
- 
- with System.Tasking.Rendezvous;
- --  used for Call_Simple
- pragma Elaborate_All (System.Tasking.Rendezvous);
- 
- with System.Tasking.Initialization;
- --  used for Defer_Abort
- --           Undefer_Abort
- 
- with System.Parameters;
- --  used for Single_Lock
- 
- with Unchecked_Conversion;
- 
- package body System.Interrupts is
- 
-    use Tasking;
-    use System.Parameters;
-    use Ada.Exceptions;
- 
-    package POP renames System.Task_Primitives.Operations;
-    package PIO renames System.Task_Primitives.Interrupt_Operations;
-    package IMNG renames System.Interrupt_Management;
-    package IMOP renames System.Interrupt_Management.Operations;
- 
-    function To_System is new Unchecked_Conversion
-      (Ada.Task_Identification.Task_Id, Task_ID);
- 
-    -----------------
-    -- Local Tasks --
-    -----------------
- 
-    --  WARNING: System.Tasking.Stages performs calls to this task
-    --  with low-level constructs. Do not change this spec without synchro-
-    --  nizing it.
- 
-    task Interrupt_Manager is
-       entry Detach_Interrupt_Entries (T : Task_ID);
- 
-       entry Initialize (Mask : IMNG.Interrupt_Mask);
- 
-       entry Attach_Handler
-         (New_Handler : Parameterless_Handler;
-          Interrupt   : Interrupt_ID;
-          Static      : Boolean;
-          Restoration : Boolean := False);
- 
-       entry Exchange_Handler
-         (Old_Handler : out Parameterless_Handler;
-          New_Handler : Parameterless_Handler;
-          Interrupt   : Interrupt_ID;
-          Static      : Boolean);
- 
-       entry Detach_Handler
-         (Interrupt   : Interrupt_ID;
-          Static      : Boolean);
- 
-       entry Bind_Interrupt_To_Entry
-         (T         : Task_ID;
-          E         : Task_Entry_Index;
-          Interrupt : Interrupt_ID);
- 
-       entry Block_Interrupt (Interrupt : Interrupt_ID);
- 
-       entry Unblock_Interrupt (Interrupt : Interrupt_ID);
- 
-       entry Ignore_Interrupt (Interrupt : Interrupt_ID);
- 
-       entry Unignore_Interrupt (Interrupt : Interrupt_ID);
- 
-       pragma Interrupt_Priority (System.Interrupt_Priority'Last);
-    end Interrupt_Manager;
- 
-    task type Server_Task (Interrupt : Interrupt_ID) is
-       pragma Priority (System.Interrupt_Priority'Last);
-       --  Note: the above pragma Priority is strictly speaking improper
-       --  since it is outside the range of allowed priorities, but the
-       --  compiler treats system units specially and does not apply
-       --  this range checking rule to system units.
- 
-    end Server_Task;
- 
-    type Server_Task_Access is access Server_Task;
- 
-    --------------------------------
-    --  Local Types and Variables --
-    --------------------------------
- 
-    type Entry_Assoc is record
-       T : Task_ID;
-       E : Task_Entry_Index;
-    end record;
- 
-    type Handler_Assoc is record
-       H      : Parameterless_Handler;
-       Static : Boolean;   --  Indicates static binding;
-    end record;
- 
-    User_Handler : array (Interrupt_ID'Range) of Handler_Assoc :=
-                     (others => (null, Static => False));
-    pragma Volatile_Components (User_Handler);
-    --  Holds the protected procedure handler (if any) and its Static
-    --  information  for each interrupt. A handler is a Static one if
-    --  it is specified through the pragma Attach_Handler.
-    --  Attach_Handler. Otherwise, not static)
- 
-    User_Entry : array (Interrupt_ID'Range) of Entry_Assoc :=
-                   (others => (T => Null_Task, E => Null_Task_Entry));
-    pragma Volatile_Components (User_Entry);
-    --  Holds the task and entry index (if any) for each interrupt
- 
-    Blocked : constant array (Interrupt_ID'Range) of Boolean :=
-      (others => False);
- --  ??? pragma Volatile_Components (Blocked);
-    --  True iff the corresponding interrupt is blocked in the process level
- 
-    Ignored : array (Interrupt_ID'Range) of Boolean := (others => False);
-    pragma Volatile_Components (Ignored);
-    --  True iff the corresponding interrupt is blocked in the process level
- 
-    Last_Unblocker : constant array (Interrupt_ID'Range) of Task_ID :=
-      (others => Null_Task);
- --  ??? pragma Volatile_Components (Last_Unblocker);
-    --  Holds the ID of the last Task which Unblocked this Interrupt.
-    --  It contains Null_Task if no tasks have ever requested the
-    --  Unblocking operation or the Interrupt is currently Blocked.
- 
-    Server_ID : array (Interrupt_ID'Range) of Task_ID :=
-                  (others => Null_Task);
-    pragma Atomic_Components (Server_ID);
-    --  Holds the Task_ID of the Server_Task for each interrupt.
-    --  Task_ID is needed to accomplish locking per Interrupt base. Also
-    --  is needed to decide whether to create a new Server_Task.
- 
-    --  Type and Head, Tail of the list containing Registered Interrupt
-    --  Handlers. These definitions are used to register the handlers
-    --  specified by the pragma Interrupt_Handler.
- 
-    type Registered_Handler;
-    type R_Link is access all Registered_Handler;
- 
-    type Registered_Handler is record
-       H :    System.Address := System.Null_Address;
-       Next : R_Link := null;
-    end record;
- 
-    Registered_Handler_Head : R_Link := null;
-    Registered_Handler_Tail : R_Link := null;
- 
-    Access_Hold : Server_Task_Access;
-    --  variable used to allocate Server_Task using "new".
- 
-    -----------------------
-    -- Local Subprograms --
-    -----------------------
- 
-    function Is_Registered (Handler : Parameterless_Handler) return Boolean;
-    --  See if the Handler has been "pragma"ed using Interrupt_Handler.
-    --  Always consider a null handler as registered.
- 
-    --------------------------------
-    -- Register_Interrupt_Handler --
-    --------------------------------
- 
-    procedure Register_Interrupt_Handler (Handler_Addr : System.Address) is
-       New_Node_Ptr : R_Link;
-    begin
-       --  This routine registers the Handler as usable for Dynamic
-       --  Interrupt Handler. Routines attaching and detaching Handler
-       --  dynamically should first consult if the Handler is rgistered.
-       --  A Program Error should be raised if it is not registered.
- 
-       --  The pragma Interrupt_Handler can only appear in the library
-       --  level PO definition and instantiation. Therefore, we do not need
-       --  to implement Unregistering operation. Neither we need to
-       --  protect the queue structure using a Lock.
- 
-       pragma Assert (Handler_Addr /= System.Null_Address);
- 
-       New_Node_Ptr := new Registered_Handler;
-       New_Node_Ptr.H := Handler_Addr;
- 
-       if Registered_Handler_Head = null then
-          Registered_Handler_Head := New_Node_Ptr;
-          Registered_Handler_Tail := New_Node_Ptr;
- 
-       else
-          Registered_Handler_Tail.Next := New_Node_Ptr;
-          Registered_Handler_Tail := New_Node_Ptr;
-       end if;
-    end Register_Interrupt_Handler;
- 
-    -------------------
-    -- Is_Registered --
-    -------------------
- 
-    function Is_Registered (Handler : Parameterless_Handler) return Boolean is
-       type Fat_Ptr is record
-          Object_Addr  : System.Address;
-          Handler_Addr : System.Address;
-       end record;
- 
-       function To_Fat_Ptr is new Unchecked_Conversion
-         (Parameterless_Handler, Fat_Ptr);
- 
-       Ptr : R_Link;
-       Fat : Fat_Ptr;
- 
-    begin
-       if Handler = null then
-          return True;
-       end if;
- 
-       Fat := To_Fat_Ptr (Handler);
- 
-       Ptr := Registered_Handler_Head;
- 
-       while Ptr /= null loop
-          if Ptr.H = Fat.Handler_Addr then
-             return True;
-          end if;
- 
-          Ptr := Ptr.Next;
-       end loop;
- 
-       return False;
- 
-    end Is_Registered;
- 
-    -----------------
-    -- Is_Reserved --
-    -----------------
- 
-    function Is_Reserved (Interrupt : Interrupt_ID) return Boolean is
-    begin
-       return IMNG.Reserve (IMNG.Interrupt_ID (Interrupt));
-    end Is_Reserved;
- 
-    -----------------------
-    -- Is_Entry_Attached --
-    -----------------------
- 
-    function Is_Entry_Attached (Interrupt : Interrupt_ID) return Boolean is
-    begin
-       if Is_Reserved (Interrupt) then
-          Raise_Exception (Program_Error'Identity, "Interrupt" &
-            Interrupt_ID'Image (Interrupt) & " is reserved");
-       end if;
- 
-       return User_Entry (Interrupt).T /= Null_Task;
-    end Is_Entry_Attached;
- 
-    -------------------------
-    -- Is_Handler_Attached --
-    -------------------------
- 
-    function Is_Handler_Attached (Interrupt : Interrupt_ID) return Boolean is
-    begin
-       if Is_Reserved (Interrupt) then
-          Raise_Exception (Program_Error'Identity, "Interrupt" &
-            Interrupt_ID'Image (Interrupt) & " is reserved");
-       end if;
- 
-       return User_Handler (Interrupt).H /= null;
-    end Is_Handler_Attached;
- 
-    ----------------
-    -- Is_Blocked --
-    ----------------
- 
-    function Is_Blocked (Interrupt : Interrupt_ID) return Boolean is
-    begin
-       if Is_Reserved (Interrupt) then
-          Raise_Exception (Program_Error'Identity, "Interrupt" &
-            Interrupt_ID'Image (Interrupt) & " is reserved");
-       end if;
- 
-       return Blocked (Interrupt);
-    end Is_Blocked;
- 
-    ----------------
-    -- Is_Ignored --
-    ----------------
- 
-    function Is_Ignored (Interrupt : Interrupt_ID) return Boolean is
-    begin
-       if Is_Reserved (Interrupt) then
-          Raise_Exception (Program_Error'Identity, "Interrupt" &
-            Interrupt_ID'Image (Interrupt) & " is reserved");
-       end if;
- 
-       return Ignored (Interrupt);
-    end Is_Ignored;
- 
-    ---------------------
-    -- Current_Handler --
-    ---------------------
- 
-    function Current_Handler (Interrupt : Interrupt_ID)
-      return Parameterless_Handler is
-    begin
-       if Is_Reserved (Interrupt) then
-          Raise_Exception (Program_Error'Identity, "Interrupt" &
-            Interrupt_ID'Image (Interrupt) & " is reserved");
-       end if;
- 
-       --  ??? Since Parameterless_Handler is not Atomic, the
-       --  current implementation is wrong. We need a new service in
-       --  Interrupt_Manager to ensure atomicity.
- 
-       return User_Handler (Interrupt).H;
-    end Current_Handler;
- 
-    --------------------
-    -- Attach_Handler --
-    --------------------
- 
-    --  Calling this procedure with New_Handler = null and Static = True
-    --  means we want to detach the current handler regardless of the
-    --  previous handler's binding status (ie. do not care if it is a
-    --  dynamic or static handler).
- 
-    --  This option is needed so that during the finalization of a PO, we
-    --  can detach handlers attached through pragma Attach_Handler.
- 
-    procedure Attach_Handler
-      (New_Handler : Parameterless_Handler;
-       Interrupt   : Interrupt_ID;
-       Static      : Boolean := False) is
-    begin
-       if Is_Reserved (Interrupt) then
-          Raise_Exception (Program_Error'Identity, "Interrupt" &
-            Interrupt_ID'Image (Interrupt) & " is reserved");
-       end if;
- 
-       Interrupt_Manager.Attach_Handler (New_Handler, Interrupt, Static);
- 
-    end Attach_Handler;
- 
-    ----------------------
-    -- Exchange_Handler --
-    ----------------------
- 
-    --  Calling this procedure with New_Handler = null and Static = True
-    --  means we want to detach the current handler regardless of the
-    --  previous handler's binding status (ie. do not care if it is a
-    --  dynamic or static handler).
- 
-    --  This option is needed so that during the finalization of a PO, we
-    --  can detach handlers attached through pragma Attach_Handler.
- 
-    procedure Exchange_Handler
-      (Old_Handler : out Parameterless_Handler;
-       New_Handler : Parameterless_Handler;
-       Interrupt   : Interrupt_ID;
-       Static      : Boolean := False) is
-    begin
-       if Is_Reserved (Interrupt) then
-          Raise_Exception (Program_Error'Identity, "Interrupt" &
-            Interrupt_ID'Image (Interrupt) & " is reserved");
-       end if;
- 
-       Interrupt_Manager.Exchange_Handler
-         (Old_Handler, New_Handler, Interrupt, Static);
- 
-    end Exchange_Handler;
- 
-    --------------------
-    -- Detach_Handler --
-    --------------------
- 
-    --  Calling this procedure with Static = True means we want to Detach the
-    --  current handler regardless of the previous handler's binding status
-    --  (i.e. do not care if it is a dynamic or static handler).
- 
-    --  This option is needed so that during the finalization of a PO, we can
-    --  detach handlers attached through pragma Attach_Handler.
- 
-    procedure Detach_Handler
-      (Interrupt : Interrupt_ID;
-       Static    : Boolean := False)
-    is
-    begin
-       if Is_Reserved (Interrupt) then
-          Raise_Exception (Program_Error'Identity, "Interrupt" &
-            Interrupt_ID'Image (Interrupt) & " is reserved");
-       end if;
- 
-       Interrupt_Manager.Detach_Handler (Interrupt, Static);
-    end Detach_Handler;
- 
-    ---------------
-    -- Reference --
-    ---------------
- 
-    function Reference (Interrupt : Interrupt_ID) return System.Address is
-    begin
-       if Is_Reserved (Interrupt) then
-          Raise_Exception (Program_Error'Identity, "Interrupt" &
-            Interrupt_ID'Image (Interrupt) & " is reserved");
-       end if;
- 
-       return Storage_Elements.To_Address
-         (Storage_Elements.Integer_Address (Interrupt));
-    end Reference;
- 
-    -----------------------------
-    -- Bind_Interrupt_To_Entry --
-    -----------------------------
- 
-    --  This procedure raises a Program_Error if it tries to
-    --  bind an interrupt to which an Entry or a Procedure is
-    --  already bound.
- 
-    procedure Bind_Interrupt_To_Entry
-      (T       : Task_ID;
-       E       : Task_Entry_Index;
-       Int_Ref : System.Address)
-    is
-       Interrupt : constant Interrupt_ID :=
-         Interrupt_ID (Storage_Elements.To_Integer (Int_Ref));
- 
-    begin
-       if Is_Reserved (Interrupt) then
-          Raise_Exception (Program_Error'Identity, "Interrupt" &
-            Interrupt_ID'Image (Interrupt) & " is reserved");
-       end if;
- 
-       Interrupt_Manager.Bind_Interrupt_To_Entry (T, E, Interrupt);
- 
-    end Bind_Interrupt_To_Entry;
- 
-    ------------------------------
-    -- Detach_Interrupt_Entries --
-    ------------------------------
- 
-    procedure Detach_Interrupt_Entries (T : Task_ID) is
-    begin
-       Interrupt_Manager.Detach_Interrupt_Entries (T);
-    end Detach_Interrupt_Entries;
- 
-    ---------------------
-    -- Block_Interrupt --
-    ---------------------
- 
-    procedure Block_Interrupt (Interrupt : Interrupt_ID) is
-    begin
-       if Is_Reserved (Interrupt) then
-          Raise_Exception (Program_Error'Identity, "Interrupt" &
-            Interrupt_ID'Image (Interrupt) & " is reserved");
-       end if;
- 
-       Interrupt_Manager.Block_Interrupt (Interrupt);
-    end Block_Interrupt;
- 
-    -----------------------
-    -- Unblock_Interrupt --
-    -----------------------
- 
-    procedure Unblock_Interrupt (Interrupt : Interrupt_ID) is
-    begin
-       if Is_Reserved (Interrupt) then
-          Raise_Exception (Program_Error'Identity, "Interrupt" &
-            Interrupt_ID'Image (Interrupt) & " is reserved");
-       end if;
- 
-       Interrupt_Manager.Unblock_Interrupt (Interrupt);
-    end Unblock_Interrupt;
- 
-    ------------------
-    -- Unblocked_By --
-    ------------------
- 
-    function Unblocked_By
-      (Interrupt : Interrupt_ID) return System.Tasking.Task_ID is
-    begin
-       if Is_Reserved (Interrupt) then
-          Raise_Exception (Program_Error'Identity, "Interrupt" &
-            Interrupt_ID'Image (Interrupt) & " is reserved");
-       end if;
- 
-       return Last_Unblocker (Interrupt);
-    end Unblocked_By;
- 
-    ----------------------
-    -- Ignore_Interrupt --
-    ----------------------
- 
-    procedure Ignore_Interrupt (Interrupt : Interrupt_ID) is
-    begin
-       if Is_Reserved (Interrupt) then
-          Raise_Exception (Program_Error'Identity, "Interrupt" &
-            Interrupt_ID'Image (Interrupt) & " is reserved");
-       end if;
- 
-       Interrupt_Manager.Ignore_Interrupt (Interrupt);
-    end Ignore_Interrupt;
- 
-    ------------------------
-    -- Unignore_Interrupt --
-    ------------------------
- 
-    procedure Unignore_Interrupt (Interrupt : Interrupt_ID) is
-    begin
-       if Is_Reserved (Interrupt) then
-          Raise_Exception (Program_Error'Identity, "Interrupt" &
-            Interrupt_ID'Image (Interrupt) & " is reserved");
-       end if;
- 
-       Interrupt_Manager.Unignore_Interrupt (Interrupt);
-    end Unignore_Interrupt;
- 
-    -----------------------
-    -- Interrupt_Manager --
-    -----------------------
- 
-    task body Interrupt_Manager is
- 
-       ---------------------
-       --  Local Routines --
-       ---------------------
- 
-       procedure Unprotected_Exchange_Handler
-         (Old_Handler : out Parameterless_Handler;
-          New_Handler : Parameterless_Handler;
-          Interrupt   : Interrupt_ID;
-          Static      : Boolean;
-          Restoration : Boolean := False);
- 
-       procedure Unprotected_Detach_Handler
-         (Interrupt : Interrupt_ID;
-          Static    : Boolean);
- 
-       ----------------------------------
-       -- Unprotected_Exchange_Handler --
-       ----------------------------------
- 
-       procedure Unprotected_Exchange_Handler
-         (Old_Handler : out Parameterless_Handler;
-          New_Handler : Parameterless_Handler;
-          Interrupt   : Interrupt_ID;
-          Static      : Boolean;
-          Restoration : Boolean := False)
-       is
-       begin
-          if User_Entry (Interrupt).T /= Null_Task then
-             --  In case we have an Interrupt Entry already installed.
-             --  raise a program error. (propagate it to the caller).
- 
-             Raise_Exception (Program_Error'Identity,
-               "An interrupt is already installed");
-          end if;
- 
-          --  Note : A null handler with Static = True will
-          --  pass the following check. That is the case when we want to
-          --  Detach a handler regardless of the Static status
-          --  of the current_Handler.
-          --  We don't check anything if Restoration is True, since we
-          --  may be detaching a static handler to restore a dynamic one.
- 
-          if not Restoration and then not Static
-             --  Tries to overwrite a static Interrupt Handler with a
-             --  dynamic Handler
- 
-            and then (User_Handler (Interrupt).Static
- 
-                         --  The new handler is not specified as an
-                         --  Interrupt Handler by a pragma.
- 
-                         or else not Is_Registered (New_Handler))
-          then
-             Raise_Exception (Program_Error'Identity,
-               "Trying to overwrite a static Interrupt Handler with a " &
-               "dynamic Handler");
-          end if;
- 
-          --  The interrupt should no longer be ingnored if
-          --  it was ever ignored.
- 
-          Ignored (Interrupt) := False;
- 
-          --  Save the old handler
- 
-          Old_Handler := User_Handler (Interrupt).H;
- 
-          --  The new handler
- 
-          User_Handler (Interrupt).H := New_Handler;
- 
-          if New_Handler = null then
- 
-             --  The null handler means we are detaching the handler.
- 
-             User_Handler (Interrupt).Static := False;
- 
-          else
-             User_Handler (Interrupt).Static := Static;
-          end if;
- 
-          --  Invoke a corresponding Server_Task if not yet created.
-          --  Place Task_ID info in Server_ID array.
- 
-          if Server_ID (Interrupt) = Null_Task then
-             Access_Hold := new Server_Task (Interrupt);
-             Server_ID (Interrupt) := To_System (Access_Hold.all'Identity);
-          else
-             POP.Wakeup (Server_ID (Interrupt), Interrupt_Server_Idle_Sleep);
-          end if;
- 
-       end Unprotected_Exchange_Handler;
- 
-       --------------------------------
-       -- Unprotected_Detach_Handler --
-       --------------------------------
- 
-       procedure Unprotected_Detach_Handler
-         (Interrupt   : Interrupt_ID;
-          Static      : Boolean)
-       is
-       begin
-          if User_Entry (Interrupt).T /= Null_Task then
-             --  In case we have an Interrupt Entry installed.
-             --  raise a program error. (propagate it to the caller).
- 
-             Raise_Exception (Program_Error'Identity,
-               "An interrupt entry is already installed");
-          end if;
- 
-          --  Note : Static = True will pass the following check. That is the
-          --  case when we want to detach a handler regardless of the static
-          --  status of the current_Handler.
- 
-          if not Static and then User_Handler (Interrupt).Static then
-             --  Tries to detach a static Interrupt Handler.
-             --  raise a program error.
- 
-             Raise_Exception (Program_Error'Identity,
-               "Trying to detach a static Interrupt Handler");
-          end if;
- 
-          --  The interrupt should no longer be ignored if
-          --  it was ever ignored.
- 
-          Ignored (Interrupt) := False;
- 
-          --  The new handler
- 
-          User_Handler (Interrupt).H := null;
-          User_Handler (Interrupt).Static := False;
-          IMOP.Interrupt_Self_Process (IMNG.Interrupt_ID (Interrupt));
- 
-       end Unprotected_Detach_Handler;
- 
-    --  Start of processing for Interrupt_Manager
- 
-    begin
-       --  By making this task independent of master, when the process
-       --  goes away, the Interrupt_Manager will terminate gracefully.
- 
-       System.Tasking.Utilities.Make_Independent;
- 
-       --  Environmen task gets its own interrupt mask, saves it,
-       --  and then masks all interrupts except the Keep_Unmasked set.
- 
-       --  During rendezvous, the Interrupt_Manager receives the old
-       --  interrupt mask of the environment task, and sets its own
-       --  interrupt mask to that value.
- 
-       --  The environment task will call the entry of Interrupt_Manager some
-       --  during elaboration of the body of this package.
- 
-       accept Initialize (Mask : IMNG.Interrupt_Mask) do
-          pragma Warnings (Off, Mask);
-          null;
-       end Initialize;
- 
-       --  Note: All tasks in RTS will have all the Reserve Interrupts
-       --  being masked (except the Interrupt_Manager) and Keep_Unmasked
-       --  unmasked when created.
- 
-       --  Abort_Task_Interrupt is one of the Interrupt unmasked
-       --  in all tasks. We mask the Interrupt in this particular task
-       --  so that "sigwait" is possible to catch an explicitely sent
-       --  Abort_Task_Interrupt from the Server_Tasks.
- 
-       --  This sigwaiting is needed so that we make sure a Server_Task is
-       --  out of its own sigwait state. This extra synchronization is
-       --  necessary to prevent following senarios.
- 
-       --   1) Interrupt_Manager sends an Abort_Task_Interrupt to the
-       --      Server_Task then changes its own interrupt mask (OS level).
-       --      If an interrupt (corresponding to the Server_Task) arrives
-       --      in the nean time we have the Interrupt_Manager umnasked and
-       --      the Server_Task waiting on sigwait.
- 
-       --   2) For unbinding handler, we install a default action in the
-       --      Interrupt_Manager. POSIX.1c states that the result of using
-       --      "sigwait" and "sigaction" simaltaneously on the same interrupt
-       --      is undefined. Therefore, we need to be informed from the
-       --      Server_Task of the fact that the Server_Task is out of its
-       --      sigwait stage.
- 
-       loop
-          --  A block is needed to absorb Program_Error exception
- 
-          declare
-             Old_Handler : Parameterless_Handler;
-          begin
-             select
- 
-             accept Attach_Handler
-                (New_Handler : Parameterless_Handler;
-                 Interrupt   : Interrupt_ID;
-                 Static      : Boolean;
-                 Restoration : Boolean := False)
-             do
-                Unprotected_Exchange_Handler
-                  (Old_Handler, New_Handler, Interrupt, Static, Restoration);
-             end Attach_Handler;
- 
-             or accept Exchange_Handler
-                (Old_Handler : out Parameterless_Handler;
-                 New_Handler : Parameterless_Handler;
-                 Interrupt   : Interrupt_ID;
-                 Static      : Boolean)
-             do
-                Unprotected_Exchange_Handler
-                  (Old_Handler, New_Handler, Interrupt, Static);
-             end Exchange_Handler;
- 
-             or accept Detach_Handler
-                (Interrupt   : Interrupt_ID;
-                 Static      : Boolean)
-             do
-                Unprotected_Detach_Handler (Interrupt, Static);
-             end Detach_Handler;
- 
-             or accept Bind_Interrupt_To_Entry
-               (T       : Task_ID;
-                E       : Task_Entry_Index;
-                Interrupt : Interrupt_ID)
-             do
-                --  if there is a binding already (either a procedure or an
-                --  entry), raise Program_Error (propagate it to the caller).
- 
-                if User_Handler (Interrupt).H /= null
-                  or else User_Entry (Interrupt).T /= Null_Task
-                then
-                   Raise_Exception (Program_Error'Identity,
-                     "A binding for this interrupt is already present");
-                end if;
- 
-                --  The interrupt should no longer be ingnored if
-                --  it was ever ignored.
- 
-                Ignored (Interrupt) := False;
-                User_Entry (Interrupt) := Entry_Assoc'(T => T, E => E);
- 
-                --  Indicate the attachment of Interrupt Entry in ATCB.
-                --  This is need so that when an Interrupt Entry task
-                --  terminates the binding can be cleaned.
-                --  The call to unbinding must be
-                --  make by the task before it terminates.
- 
-                T.Interrupt_Entry := True;
- 
-                --  Invoke a corresponding Server_Task if not yet created.
-                --  Place Task_ID info in Server_ID array.
- 
-                if Server_ID (Interrupt) = Null_Task then
- 
-                   Access_Hold := new Server_Task (Interrupt);
-                   Server_ID (Interrupt) :=
-                     To_System (Access_Hold.all'Identity);
-                else
-                   POP.Wakeup (Server_ID (Interrupt),
-                               Interrupt_Server_Idle_Sleep);
-                end if;
-             end Bind_Interrupt_To_Entry;
- 
-             or accept Detach_Interrupt_Entries (T : Task_ID)
-             do
-                for J in Interrupt_ID'Range loop
-                   if not Is_Reserved (J) then
-                      if User_Entry (J).T = T then
- 
-                         --  The interrupt should no longer be ignored if
-                         --  it was ever ignored.
- 
-                         Ignored (J) := False;
-                         User_Entry (J) :=
-                           Entry_Assoc'(T => Null_Task, E => Null_Task_Entry);
-                         IMOP.Interrupt_Self_Process (IMNG.Interrupt_ID (J));
-                      end if;
-                   end if;
-                end loop;
- 
-                --  Indicate in ATCB that no Interrupt Entries are attached.
- 
-                T.Interrupt_Entry := False;
-             end Detach_Interrupt_Entries;
- 
-             or accept Block_Interrupt (Interrupt : Interrupt_ID) do
-                pragma Warnings (Off, Interrupt);
-                raise Program_Error;
-             end Block_Interrupt;
- 
-             or accept Unblock_Interrupt (Interrupt : Interrupt_ID) do
-                pragma Warnings (Off, Interrupt);
-                raise Program_Error;
-             end Unblock_Interrupt;
- 
-             or accept Ignore_Interrupt (Interrupt : Interrupt_ID) do
-                pragma Warnings (Off, Interrupt);
-                raise Program_Error;
-             end Ignore_Interrupt;
- 
-             or accept Unignore_Interrupt (Interrupt : Interrupt_ID) do
-                pragma Warnings (Off, Interrupt);
-                raise Program_Error;
-             end Unignore_Interrupt;
- 
-             end select;
- 
-          exception
-             --  If there is a program error we just want to propagate it
-             --  to the caller and do not want to stop this task.
- 
-             when Program_Error =>
-                null;
- 
-             when others =>
-                pragma Assert (False);
-                null;
-          end;
-       end loop;
-    end Interrupt_Manager;
- 
-    -----------------
-    -- Server_Task --
-    -----------------
- 
-    task body Server_Task is
-       Self_ID         : Task_ID := Self;
-       Tmp_Handler     : Parameterless_Handler;
-       Tmp_ID          : Task_ID;
-       Tmp_Entry_Index : Task_Entry_Index;
-       Intwait_Mask    : aliased IMNG.Interrupt_Mask;
- 
-    begin
-       --  By making this task independent of master, when the process
-       --  goes away, the Server_Task will terminate gracefully.
- 
-       System.Tasking.Utilities.Make_Independent;
- 
-       --  Install default action in system level.
- 
-       IMOP.Install_Default_Action (IMNG.Interrupt_ID (Interrupt));
- 
-       --  Set up the mask (also clears the event flag)
- 
-       IMOP.Empty_Interrupt_Mask (Intwait_Mask'Access);
-       IMOP.Add_To_Interrupt_Mask
-         (Intwait_Mask'Access, IMNG.Interrupt_ID (Interrupt));
- 
-       --  Remember the Interrupt_ID for Abort_Task.
- 
-       PIO.Set_Interrupt_ID (IMNG.Interrupt_ID (Interrupt), Self_ID);
- 
-       --  Note: All tasks in RTS will have all the Reserve Interrupts
-       --  being masked (except the Interrupt_Manager) and Keep_Unmasked
-       --  unmasked when created.
- 
-       loop
-          System.Tasking.Initialization.Defer_Abort (Self_ID);
- 
-          --  A Handler or an Entry is installed. At this point all tasks
-          --  mask for the Interrupt is masked. Catch the Interrupt using
-          --  sigwait.
- 
-          --  This task may wake up from sigwait by receiving an interrupt
-          --  (Abort_Task_Interrupt) from the Interrupt_Manager for unbinding
-          --  a Procedure Handler or an Entry. Or it could be a wake up
-          --  from status change (Unblocked -> Blocked). If that is not
-          --  the case, we should exceute the attached Procedure or Entry.
- 
-          if Single_Lock then
-             POP.Lock_RTS;
-          end if;
- 
-          POP.Write_Lock (Self_ID);
- 
-          if User_Handler (Interrupt).H = null
-            and then User_Entry (Interrupt).T = Null_Task
-          then
-             --  No Interrupt binding. If there is an interrupt,
-             --  Interrupt_Manager will take default action.
- 
-             Self_ID.Common.State := Interrupt_Server_Idle_Sleep;
-             POP.Sleep (Self_ID, Interrupt_Server_Idle_Sleep);
-             Self_ID.Common.State := Runnable;
- 
-          else
-             Self_ID.Common.State := Interrupt_Server_Blocked_On_Event_Flag;
-             Self_ID.Common.State := Runnable;
- 
-             if not (Self_ID.Deferral_Level = 0
-                     and then Self_ID.Pending_ATC_Level
-                              < Self_ID.ATC_Nesting_Level)
-             then
-                if User_Handler (Interrupt).H /= null then
-                   Tmp_Handler := User_Handler (Interrupt).H;
- 
-                   --  RTS calls should not be made with self being locked.
- 
-                   POP.Unlock (Self_ID);
- 
-                   if Single_Lock then
-                      POP.Unlock_RTS;
-                   end if;
- 
-                   Tmp_Handler.all;
- 
-                   if Single_Lock then
-                      POP.Lock_RTS;
-                   end if;
- 
-                   POP.Write_Lock (Self_ID);
- 
-                elsif User_Entry (Interrupt).T /= Null_Task then
-                   Tmp_ID := User_Entry (Interrupt).T;
-                   Tmp_Entry_Index := User_Entry (Interrupt).E;
- 
-                   --  RTS calls should not be made with self being locked.
- 
-                   POP.Unlock (Self_ID);
- 
-                   if Single_Lock then
-                      POP.Unlock_RTS;
-                   end if;
- 
-                   System.Tasking.Rendezvous.Call_Simple
-                     (Tmp_ID, Tmp_Entry_Index, System.Null_Address);
- 
-                   if Single_Lock then
-                      POP.Lock_RTS;
-                   end if;
- 
-                   POP.Write_Lock (Self_ID);
-                end if;
-             end if;
-          end if;
- 
-          POP.Unlock (Self_ID);
- 
-          if Single_Lock then
-             POP.Unlock_RTS;
-          end if;
- 
-          System.Tasking.Initialization.Undefer_Abort (Self_ID);
- 
-          --  Undefer abort here to allow a window for this task
-          --  to be aborted  at the time of system shutdown.
-       end loop;
-    end Server_Task;
- 
-    -------------------------------------
-    -- Has_Interrupt_Or_Attach_Handler --
-    -------------------------------------
- 
-    function Has_Interrupt_Or_Attach_Handler
-      (Object : access Dynamic_Interrupt_Protection)
-       return   Boolean
-    is
-       pragma Warnings (Off, Object);
- 
-    begin
-       return True;
-    end Has_Interrupt_Or_Attach_Handler;
- 
-    ----------------
-    --  Finalize  --
-    ----------------
- 
-    procedure Finalize (Object : in out Static_Interrupt_Protection) is
-    begin
-       --  ??? loop to be executed only when we're not doing library level
-       --  finalization, since in this case all interrupt tasks are gone.
-       if not Interrupt_Manager'Terminated then
-          for N in reverse Object.Previous_Handlers'Range loop
-             Interrupt_Manager.Attach_Handler
-               (New_Handler => Object.Previous_Handlers (N).Handler,
-                Interrupt   => Object.Previous_Handlers (N).Interrupt,
-                Static      => Object.Previous_Handlers (N).Static,
-                Restoration => True);
-          end loop;
-       end if;
- 
-       Tasking.Protected_Objects.Entries.Finalize
-         (Tasking.Protected_Objects.Entries.Protection_Entries (Object));
-    end Finalize;
- 
-    -------------------------------------
-    -- Has_Interrupt_Or_Attach_Handler --
-    -------------------------------------
- 
-    function Has_Interrupt_Or_Attach_Handler
-      (Object : access Static_Interrupt_Protection)
-       return   Boolean
-    is
-       pragma Warnings (Off, Object);
-    begin
-       return True;
-    end Has_Interrupt_Or_Attach_Handler;
- 
-    ----------------------
-    -- Install_Handlers --
-    ----------------------
- 
-    procedure Install_Handlers
-      (Object       : access Static_Interrupt_Protection;
-       New_Handlers : New_Handler_Array)
-    is
-    begin
-       for N in New_Handlers'Range loop
- 
-          --  We need a lock around this ???
- 
-          Object.Previous_Handlers (N).Interrupt := New_Handlers (N).Interrupt;
-          Object.Previous_Handlers (N).Static    := User_Handler
-            (New_Handlers (N).Interrupt).Static;
- 
-          --  We call Exchange_Handler and not directly Interrupt_Manager.
-          --  Exchange_Handler so we get the Is_Reserved check.
- 
-          Exchange_Handler
-            (Old_Handler => Object.Previous_Handlers (N).Handler,
-             New_Handler => New_Handlers (N).Handler,
-             Interrupt   => New_Handlers (N).Interrupt,
-             Static      => True);
-       end loop;
-    end Install_Handlers;
- 
- --  Elaboration code for package System.Interrupts
- begin
- 
-    --  Get Interrupt_Manager's ID so that Abort_Interrupt can be sent.
- 
-    Interrupt_Manager_ID := To_System (Interrupt_Manager'Identity);
- 
-    --  During the elaboration of this package body we want RTS to
-    --  inherit the interrupt mask from the Environment Task.
- 
-    --  The Environment Task should have gotten its mask from
-    --  the enclosing process during the RTS start up. (See
-    --  in s-inmaop.adb). Pass the Interrupt_Mask of the Environment
-    --  task to the Interrupt_Manager.
- 
-    --  Note : At this point we know that all tasks (including
-    --  RTS internal servers) are masked for non-reserved signals
-    --  (see s-taprop.adb). Only the Interrupt_Manager will have
-    --  masks set up differently inheriting the original Environment
-    --  Task's mask.
- 
-    Interrupt_Manager.Initialize (IMOP.Environment_Mask);
- end System.Interrupts;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5vintman.adb gcc-4.0.0/gcc/ada/5vintman.adb
*** gcc-3.4.3/gcc/ada/5vintman.adb	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5vintman.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,88 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --           S Y S T E M . I N T E R R U P T _ M A N A G E M E N T          --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --         Copyright (C) 1992-2002, Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a OpenVMS/Alpha version of this package.
- 
- --  PLEASE DO NOT add any dependences on other packages.
- --  This package is designed to work with or without tasking support.
- 
- --  See the other warnings in the package specification before making
- --  any modifications to this file.
- 
- with System.OS_Interface;
- --  used for various Constants, Signal and types
- 
- package body System.Interrupt_Management is
- 
-    use System.OS_Interface;
-    use type unsigned_long;
- 
-    ---------------------------
-    -- Initialize_Interrupts --
-    ---------------------------
- 
-    procedure Initialize_Interrupts is
-       Status : Cond_Value_Type;
- 
-    begin
-       Sys_Crembx
-         (Status => Status,
-          Prmflg => False,
-          Chan   => Rcv_Interrupt_Chan,
-          Maxmsg => Interrupt_ID'Size,
-          Bufquo => Interrupt_Bufquo,
-          Lognam => "GNAT_Interrupt_Mailbox",
-          Flags  => CMB_M_READONLY);
- 
-       pragma Assert ((Status and 1) = 1);
- 
-       Sys_Assign
-         (Status => Status,
-          Devnam => "GNAT_Interrupt_Mailbox",
-          Chan   => Snd_Interrupt_Chan,
-          Flags  => AGN_M_WRITEONLY);
- 
-       pragma Assert ((Status and 1) = 1);
-    end Initialize_Interrupts;
- 
- begin
-    --  Unused
- 
-    Abort_Task_Interrupt := Interrupt_ID_0;
- 
-    Reserve := Reserve or Keep_Unmasked or Keep_Masked;
- 
-    Reserve (Interrupt_ID_0) := True;
- 
-    Initialize_Interrupts;
- end System.Interrupt_Management;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5vintman.ads gcc-4.0.0/gcc/ada/5vintman.ads
*** gcc-3.4.3/gcc/ada/5vintman.ads	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5vintman.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,142 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --            S Y S T E M . I N T E R R U P T _ M A N A G E M E N T         --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --          Copyright (C) 1991-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the Alpha/VMS version of this package.
- --
- --  This package encapsulates and centralizes information about
- --  all uses of interrupts (or signals), including the
- --  target-dependent mapping of interrupts (or signals) to exceptions.
- 
- --  PLEASE DO NOT add any with-clauses to this package.
- --  This is designed to work for both tasking and non-tasking systems,
- --  without pulling in any of the tasking support.
- 
- --  PLEASE DO NOT remove the Elaborate_Body pragma from this package.
- --  Elaboration of this package should happen early, as most other
- --  initializations depend on it.
- --  Forcing immediate elaboration of the body also helps to enforce
- --  the design assumption that this is a second-level
- --  package, just one level above System.OS_Interface, with no
- --  cross-dependences.
- 
- --  PLEASE DO NOT put any subprogram declarations with arguments of
- --  type Interrupt_ID into the visible part of this package.
- --  The type Interrupt_ID is used to derive the type in Ada.Interrupts,
- --  and adding more operations to that type would be illegal according
- --  to the Ada Reference Manual.  (This is the reason why the signals sets
- --  below are implemented as visible arrays rather than functions.)
- 
- with System.OS_Interface;
- --  used for Signal
- --           sigset_t
- 
- package System.Interrupt_Management is
- 
-    pragma Elaborate_Body;
- 
-    type Interrupt_Mask is limited private;
- 
-    type Interrupt_ID is new System.OS_Interface.Signal;
- 
-    type Interrupt_Set is array (Interrupt_ID) of Boolean;
- 
-    --  The following objects serve as constants, but are initialized
-    --  in the body to aid portability.  This permits us
-    --  to use more portable names for interrupts,
-    --  where distinct names may map to the same interrupt ID value.
-    --  For example, suppose SIGRARE is a signal that is not defined on
-    --  all systems, but is always reserved when it is defined.
-    --  If we have the convention that ID zero is not used for any "real"
-    --  signals, and SIGRARE = 0 when SIGRARE is not one of the locally
-    --  supported signals, we can write
-    --     Reserved (SIGRARE) := true;
-    --  and the initialization code will be portable.
- 
-    Abort_Task_Interrupt : Interrupt_ID;
-    --  The interrupt that is used to implement task abortion,
-    --  if an interrupt is used for that purpose.
-    --  This is one of the reserved interrupts.
- 
-    Keep_Unmasked : Interrupt_Set := (others => False);
-    --  Keep_Unmasked (I) is true iff the interrupt I is
-    --  one that must be kept unmasked at all times,
-    --  except (perhaps) for short critical sections.
-    --  This includes interrupts that are mapped to exceptions
-    --  (see System.Interrupt_Exceptions.Is_Exception), but may also
-    --  include interrupts (e.g. timer) that need to be kept unmasked
-    --  for other reasons.
-    --  Where interrupts are implemented as OS signals, and signal masking
-    --  is per-task, the interrupt should be unmasked in ALL TASKS.
- 
-    Reserve : Interrupt_Set := (others => False);
-    --  Reserve (I) is true iff the interrupt I is one that
-    --  cannot be permitted to be attached to a user handler.
-    --  The possible reasons are many.  For example,
-    --  it may be mapped to an exception, used to implement task abortion,
-    --  or used to implement time delays.
- 
-    Keep_Masked : Interrupt_Set := (others => False);
-    --  Keep_Masked (I) is true iff the interrupt I must always be masked.
-    --  Where interrupts are implemented as OS signals, and signal masking
-    --  is per-task, the interrupt should be masked in ALL TASKS.
-    --  There might not be any interrupts in this class, depending on
-    --  the environment.  For example, if interrupts are OS signals
-    --  and signal masking is per-task, use of the sigwait operation
-    --  requires the signal be masked in all tasks.
- 
-    procedure Initialize_Interrupts;
-    --  On systems where there is no signal inheritance between tasks (e.g
-    --  VxWorks, GNU/LinuxThreads), this procedure is used to initialize
-    --  interrupts handling in each task. Otherwise this function should
-    --  only be called by initialize in this package body.
- 
- private
- 
-    use type System.OS_Interface.unsigned_long;
- 
-    type Interrupt_Mask is new System.OS_Interface.sigset_t;
- 
-    --  Interrupts on VMS are implemented with a mailbox. A QIO read is
-    --  registered on the Rcv channel and the interrupt occurs by registering
-    --  a QIO write on the Snd channel. The maximum number of pending
-    --  interrupts is arbitrarily set at 1000. One nice feature of using
-    --  a mailbox is that it is trivially extendable to cross process
-    --  interrupts.
- 
-    Rcv_Interrupt_Chan : System.OS_Interface.unsigned_short := 0;
-    Snd_Interrupt_Chan : System.OS_Interface.unsigned_short := 0;
-    Interrupt_Mailbox  : Interrupt_ID := 0;
-    Interrupt_Bufquo   : System.OS_Interface.unsigned_long
-                         := 1000 * (Interrupt_ID'Size / 8);
- 
- end System.Interrupt_Management;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5vmastop.adb gcc-4.0.0/gcc/ada/5vmastop.adb
*** gcc-3.4.3/gcc/ada/5vmastop.adb	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5vmastop.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,339 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                     SYSTEM.MACHINE_STATE_OPERATIONS                      --
- --                                                                          --
- --                                 B o d y                                  --
- --                         (Version for Alpha/VMS)                          --
- --                                                                          --
- --          Copyright (C) 2001-2002 Ada Core Technologies, Inc.             --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This version of System.Machine_State_Operations is for use on
- --  Alpha systems running VMS.
- 
- with System.Memory;
- with System.Aux_DEC; use System.Aux_DEC;
- with Unchecked_Conversion;
- 
- package body System.Machine_State_Operations is
- 
-    use System.Exceptions;
-    subtype Cond_Value_Type is Unsigned_Longword;
- 
-    --  Record layouts copied from Starlet.
- 
-    type ICB_Fflags_Bits_Type is record
-       Exception_Frame : Boolean;
-       Ast_Frame       : Boolean;
-       Bottom_Of_Stack : Boolean;
-       Base_Frame      : Boolean;
-       Filler_1        : Unsigned_20;
-    end record;
- 
-    for ICB_Fflags_Bits_Type use record
-       Exception_Frame at 0 range 0 .. 0;
-       Ast_Frame       at 0 range 1 .. 1;
-       Bottom_Of_Stack at 0 range 2 .. 2;
-       Base_Frame      at 0 range 3 .. 3;
-       Filler_1        at 0 range 4 .. 23;
-    end record;
-    for ICB_Fflags_Bits_Type'Size use 24;
- 
-    type ICB_Hdr_Quad_Type is record
-       Context_Length : Unsigned_Longword;
-       Fflags_Bits    : ICB_Fflags_Bits_Type;
-       Block_Version  : Unsigned_Byte;
-    end record;
- 
-    for ICB_Hdr_Quad_Type use record
-       Context_Length at 0 range 0 .. 31;
-       Fflags_Bits    at 4 range 0 .. 23;
-       Block_Version  at 7 range 0 .. 7;
-    end record;
-    for ICB_Hdr_Quad_Type'Size use 64;
- 
-    type Invo_Context_Blk_Type is record
- 
-       Hdr_Quad : ICB_Hdr_Quad_Type;
-       --  The first quadword contains:
-       --    o  The length of the structure in bytes (a longword field)
-       --    o  The frame flags (a 3 byte field of bits)
-       --    o  The version number (a 1 byte field)
- 
-       Procedure_Descriptor : Unsigned_Quadword;
-       --  The address of the procedure descriptor for the procedure
- 
-       Program_Counter : Integer_64;
-       --  The current PC of a given procedure invocation
- 
-       Processor_Status : Integer_64;
-       --  The current PS of a given procedure invocation
- 
-       Ireg : Unsigned_Quadword_Array (0 .. 30);
-       Freg : Unsigned_Quadword_Array (0 .. 30);
-       --  The register contents areas. 31 for scalars, 31 for float.
- 
-       System_Defined : Unsigned_Quadword_Array (0 .. 1);
-       --  The following is an "internal" area that's reserved for use by
-       --  the operating system. It's size may vary over time.
- 
-       --  Chfctx_Addr : Unsigned_Quadword;
-       --  Defined as a comment since it overlaps other fields
- 
-       Filler_1             : String (1 .. 0);
-       --  Align to octaword
-    end record;
- 
-    for Invo_Context_Blk_Type use record
-       Hdr_Quad             at   0 range 0 .. 63;
-       Procedure_Descriptor at   8 range 0 .. 63;
-       Program_Counter      at  16 range 0 .. 63;
-       Processor_Status     at  24 range 0 .. 63;
-       Ireg                 at  32 range 0 .. 1983;
-       Freg                 at 280 range 0 .. 1983;
-       System_Defined       at 528 range 0 .. 127;
- 
-       --  Component representation spec(s) below are defined as
-       --  comments since they overlap other fields
- 
-       --  Chfctx_Addr at 528 range 0 .. 63;
- 
-       Filler_1 at 544 range 0 .. -1;
-    end record;
-    for Invo_Context_Blk_Type'Size use 4352;
- 
-    subtype Invo_Handle_Type is Unsigned_Longword;
- 
-    type Invo_Handle_Access_Type is access all Invo_Handle_Type;
- 
-    function Fetch is new Fetch_From_Address (Code_Loc);
- 
-    function To_Invo_Handle_Access is new Unchecked_Conversion
-      (Machine_State, Invo_Handle_Access_Type);
- 
-    function To_Machine_State is new Unchecked_Conversion
-      (System.Address, Machine_State);
- 
-    ----------------------------
-    -- Allocate_Machine_State --
-    ----------------------------
- 
-    function Allocate_Machine_State return Machine_State is
-    begin
-       return To_Machine_State
-         (Memory.Alloc (Invo_Handle_Type'Max_Size_In_Storage_Elements));
-    end Allocate_Machine_State;
- 
-    -------------------
-    -- Enter_Handler --
-    -------------------
- 
-    procedure Enter_Handler (M : Machine_State; Handler : Handler_Loc) is
-       procedure Get_Invo_Context (
-          Result       : out Unsigned_Longword; -- return value
-          Invo_Handle  : Invo_Handle_Type;
-          Invo_Context : out Invo_Context_Blk_Type);
- 
-       pragma Interface (External, Get_Invo_Context);
- 
-       pragma Import_Valued_Procedure (Get_Invo_Context, "LIB$GET_INVO_CONTEXT",
-          (Unsigned_Longword, Invo_Handle_Type, Invo_Context_Blk_Type),
-          (Value, Value, Reference));
- 
-       ICB : Invo_Context_Blk_Type;
- 
-       procedure Goto_Unwind (
-          Status      : out Cond_Value_Type; -- return value
-          Target_Invo : Address := Address_Zero;
-          Target_PC   : Address := Address_Zero;
-          New_R0      : Unsigned_Quadword := Unsigned_Quadword'Null_Parameter;
-          New_R1      : Unsigned_Quadword := Unsigned_Quadword'Null_Parameter);
- 
-       pragma Interface (External, Goto_Unwind);
- 
-       pragma Import_Valued_Procedure
-         (Goto_Unwind, "SYS$GOTO_UNWIND",
-          (Cond_Value_Type, Address, Address,
-           Unsigned_Quadword, Unsigned_Quadword),
-          (Value, Reference, Reference,
-           Reference, Reference));
- 
-       Status : Cond_Value_Type;
- 
-    begin
-       Get_Invo_Context (Status, To_Invo_Handle_Access (M).all, ICB);
-       Goto_Unwind
-         (Status, System.Address (To_Invo_Handle_Access (M).all), Handler);
-    end Enter_Handler;
- 
-    ----------------
-    -- Fetch_Code --
-    ----------------
- 
-    function Fetch_Code (Loc : Code_Loc) return Code_Loc is
-    begin
-       --  The starting address is in the second longword pointed to by Loc.
- 
-       return Fetch (System.Aux_DEC."+" (Loc, 8));
-    end Fetch_Code;
- 
-    ------------------------
-    -- Free_Machine_State --
-    ------------------------
- 
-    procedure Free_Machine_State (M : in out Machine_State) is
-    begin
-       Memory.Free (Address (M));
-       M := Machine_State (Null_Address);
-    end Free_Machine_State;
- 
-    ------------------
-    -- Get_Code_Loc --
-    ------------------
- 
-    function Get_Code_Loc (M : Machine_State) return Code_Loc is
-       procedure Get_Invo_Context (
-          Result       : out Unsigned_Longword; -- return value
-          Invo_Handle  : in  Invo_Handle_Type;
-          Invo_Context : out Invo_Context_Blk_Type);
- 
-       pragma Interface (External, Get_Invo_Context);
- 
-       pragma Import_Valued_Procedure (Get_Invo_Context, "LIB$GET_INVO_CONTEXT",
-          (Unsigned_Longword, Invo_Handle_Type, Invo_Context_Blk_Type),
-          (Value, Value, Reference));
- 
-       Asm_Call_Size : constant := 4;
-       --  Under VMS a call
-       --  asm instruction takes 4 bytes. So we must remove this amount.
- 
-       ICB : Invo_Context_Blk_Type;
-       Status : Cond_Value_Type;
- 
-    begin
-       Get_Invo_Context (Status, To_Invo_Handle_Access (M).all, ICB);
- 
-       if (Status and 1) /= 1 then
-          return Code_Loc (System.Null_Address);
-       end if;
- 
-       return Code_Loc (ICB.Program_Counter - Asm_Call_Size);
-    end Get_Code_Loc;
- 
-    --------------------------
-    -- Machine_State_Length --
-    --------------------------
- 
-    function Machine_State_Length
-      return System.Storage_Elements.Storage_Offset
-    is
-       use System.Storage_Elements;
- 
-    begin
-       return Invo_Handle_Type'Size / 8;
-    end Machine_State_Length;
- 
-    ---------------
-    -- Pop_Frame --
-    ---------------
- 
-    procedure Pop_Frame
-      (M    : Machine_State;
-       Info : Subprogram_Info_Type)
-    is
-       pragma Warnings (Off, Info);
- 
-       procedure Get_Prev_Invo_Handle (
-          Result : out Invo_Handle_Type; -- return value
-          ICB    : in  Invo_Handle_Type);
- 
-       pragma Interface (External, Get_Prev_Invo_Handle);
- 
-       pragma Import_Valued_Procedure
-         (Get_Prev_Invo_Handle, "LIB$GET_PREV_INVO_HANDLE",
-          (Invo_Handle_Type, Invo_Handle_Type),
-          (Value, Value));
- 
-       Prev_Handle : aliased Invo_Handle_Type;
- 
-    begin
-       Get_Prev_Invo_Handle (Prev_Handle, To_Invo_Handle_Access (M).all);
-       To_Invo_Handle_Access (M).all := Prev_Handle;
-    end Pop_Frame;
- 
-    -----------------------
-    -- Set_Machine_State --
-    -----------------------
- 
-    procedure Set_Machine_State (M : Machine_State) is
- 
-       procedure Get_Curr_Invo_Context
-         (Invo_Context : out Invo_Context_Blk_Type);
- 
-       pragma Interface (External, Get_Curr_Invo_Context);
- 
-       pragma Import_Valued_Procedure
-         (Get_Curr_Invo_Context, "LIB$GET_CURR_INVO_CONTEXT",
-          (Invo_Context_Blk_Type),
-          (Reference));
- 
-       procedure Get_Invo_Handle (
-          Result       : out Invo_Handle_Type; -- return value
-          Invo_Context : in Invo_Context_Blk_Type);
- 
-       pragma Interface (External, Get_Invo_Handle);
- 
-       pragma Import_Valued_Procedure (Get_Invo_Handle, "LIB$GET_INVO_HANDLE",
-          (Invo_Handle_Type, Invo_Context_Blk_Type),
-          (Value, Reference));
- 
-       ICB : Invo_Context_Blk_Type;
-       Invo_Handle : aliased Invo_Handle_Type;
- 
-    begin
-       Get_Curr_Invo_Context (ICB);
-       Get_Invo_Handle (Invo_Handle, ICB);
-       To_Invo_Handle_Access (M).all := Invo_Handle;
-       Pop_Frame (M, System.Null_Address);
-    end Set_Machine_State;
- 
-    ------------------------------
-    -- Set_Signal_Machine_State --
-    ------------------------------
- 
-    procedure Set_Signal_Machine_State
-      (M       : Machine_State;
-       Context : System.Address)
-    is
-       pragma Warnings (Off, M);
-       pragma Warnings (Off, Context);
- 
-    begin
-       null;
-    end Set_Signal_Machine_State;
- 
- end System.Machine_State_Operations;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5vml-tgt.adb gcc-4.0.0/gcc/ada/5vml-tgt.adb
*** gcc-3.4.3/gcc/ada/5vml-tgt.adb	Mon Jan  5 15:20:43 2004
--- gcc-4.0.0/gcc/ada/5vml-tgt.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,665 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                             M L I B . T G T                              --
- --                              (VMS Version)                               --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --          Copyright (C) 2003-2004, Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the VMS version of the body
- 
- with Ada.Characters.Handling; use Ada.Characters.Handling;
- with Ada.Text_IO;             use Ada.Text_IO;
- 
- with GNAT.Directory_Operations;  use GNAT.Directory_Operations;
- 
- with MLib.Fil;
- with MLib.Utl;
- with Namet;             use Namet;
- with Opt;               use Opt;
- with Output;            use Output;
- with Prj.Com;
- with System;            use System;
- with System.Case_Util;  use System.Case_Util;
- 
- package body MLib.Tgt is
- 
-    use GNAT;
- 
-    Empty_Argument_List : aliased Argument_List := (1 .. 0 => null);
-    Additional_Objects  : Argument_List_Access := Empty_Argument_List'Access;
-    --  Used to add the generated auto-init object files for auto-initializing
-    --  stand-alone libraries.
- 
-    Macro_Name   : constant String := "macro";
-    --  The name of the command to invoke the macro-assembler
- 
-    --  Options to use when invoking gcc to build the dynamic library
- 
-    No_Start_Files : aliased String := "-nostartfiles";
- 
-    VMS_Options : Argument_List :=
-      (No_Start_Files'Access, null);
- 
-    Gnatsym_Name : constant String := "gnatsym";
- 
-    Gnatsym_Path : String_Access;
- 
-    Arguments : Argument_List_Access := null;
-    Last_Argument : Natural := 0;
- 
-    Success : Boolean := False;
- 
-    ------------------------------
-    -- Target dependent section --
-    ------------------------------
- 
-    function Popen (Command, Mode : System.Address) return System.Address;
-    pragma Import (C, Popen);
- 
-    function Pclose (File : System.Address) return Integer;
-    pragma Import (C, Pclose);
- 
-    ---------------------
-    -- Archive_Builder --
-    ---------------------
- 
-    function Archive_Builder return String is
-    begin
-       return "ar";
-    end Archive_Builder;
- 
-    -----------------------------
-    -- Archive_Builder_Options --
-    -----------------------------
- 
-    function Archive_Builder_Options return String_List_Access is
-    begin
-       return new String_List'(1 => new String'("cr"));
-    end Archive_Builder_Options;
- 
-    -----------------
-    -- Archive_Ext --
-    -----------------
- 
-    function Archive_Ext return String is
-    begin
-       return "olb";
-    end Archive_Ext;
- 
-    ---------------------
-    -- Archive_Indexer --
-    ---------------------
- 
-    function Archive_Indexer return String is
-    begin
-       return "ranlib";
-    end Archive_Indexer;
- 
-    ---------------------------
-    -- Build_Dynamic_Library --
-    ---------------------------
- 
-    procedure Build_Dynamic_Library
-      (Ofiles       : Argument_List;
-       Foreign      : Argument_List;
-       Afiles       : Argument_List;
-       Options      : Argument_List;
-       Interfaces   : Argument_List;
-       Lib_Filename : String;
-       Lib_Dir      : String;
-       Symbol_Data  : Symbol_Record;
-       Driver_Name  : Name_Id := No_Name;
-       Lib_Address  : String  := "";
-       Lib_Version  : String  := "";
-       Relocatable  : Boolean := False;
-       Auto_Init    : Boolean := False)
-    is
-       pragma Unreferenced (Foreign);
-       pragma Unreferenced (Afiles);
-       pragma Unreferenced (Lib_Address);
-       pragma Unreferenced (Relocatable);
- 
-       Lib_File : constant String :=
-                    Lib_Dir & Directory_Separator & "lib" &
-                      Fil.Ext_To (Lib_Filename, DLL_Ext);
- 
-       Opts      : Argument_List := Options;
-       Last_Opt  : Natural       := Opts'Last;
-       Opts2     : Argument_List (Options'Range);
-       Last_Opt2 : Natural       := Opts2'First - 1;
- 
-       Inter : constant Argument_List := Interfaces;
- 
-       function Is_Interface (Obj_File : String) return Boolean;
-       --  For a Stand-Alone Library, returns True if Obj_File is the object
-       --  file name of an interface of the SAL.
-       --  For other libraries, always return True.
- 
-       function Option_File_Name return String;
-       --  Returns Symbol_File, if not empty. Otherwise, returns "symvec.opt"
- 
-       function Version_String return String;
-       --  Returns Lib_Version if not empty, otherwise returns "1".
-       --  Fails gnatmake if Lib_Version is not the image of a positive number.
- 
-       ------------------
-       -- Is_Interface --
-       ------------------
- 
-       function Is_Interface (Obj_File : String) return Boolean is
-          ALI : constant String :=
-                  Fil.Ext_To
-                   (Filename => To_Lower (Base_Name (Obj_File)),
-                    New_Ext  => "ali");
- 
-       begin
-          if Inter'Length = 0 then
-             return True;
- 
-          elsif ALI'Length > 2 and then
-                ALI (ALI'First .. ALI'First + 1) = "b$"
-          then
-             return True;
- 
-          else
-             for J in Inter'Range loop
-                if Inter (J).all = ALI then
-                   return True;
-                end if;
-             end loop;
- 
-             return False;
-          end if;
-       end Is_Interface;
- 
-       ----------------------
-       -- Option_File_Name --
-       ----------------------
- 
-       function Option_File_Name return String is
-       begin
-          if Symbol_Data.Symbol_File = No_Name then
-             return "symvec.opt";
-          else
-             return Get_Name_String (Symbol_Data.Symbol_File);
-          end if;
-       end Option_File_Name;
- 
-       --------------------
-       -- Version_String --
-       --------------------
- 
-       function Version_String return String is
-          Version : Integer := 0;
-       begin
-          if Lib_Version = "" then
-             return "1";
- 
-          else
-             begin
-                Version := Integer'Value (Lib_Version);
- 
-                if Version <= 0 then
-                   raise Constraint_Error;
-                end if;
- 
-                return Lib_Version;
- 
-             exception
-                when Constraint_Error =>
-                   Fail ("illegal version """, Lib_Version,
-                         """ (on VMS version must be a positive number)");
-                   return "";
-             end;
-          end if;
-       end Version_String;
- 
-       Opt_File_Name  : constant String := Option_File_Name;
-       Version        : constant String := Version_String;
-       For_Linker_Opt : constant String_Access :=
-                          new String'("--for-linker=" & Opt_File_Name);
- 
-    --  Start of processing for Build_Dynamic_Library
- 
-    begin
-       VMS_Options (VMS_Options'First + 1) := For_Linker_Opt;
- 
-       for J in Inter'Range loop
-          To_Lower (Inter (J).all);
-       end loop;
- 
-       --  "gnatsym" is necessary for building the option file
- 
-       if Gnatsym_Path = null then
-          Gnatsym_Path := OS_Lib.Locate_Exec_On_Path (Gnatsym_Name);
- 
-          if Gnatsym_Path = null then
-             Fail (Gnatsym_Name, " not found in path");
-          end if;
-       end if;
- 
-       --  For auto-initialization of a stand-alone library, we create
-       --  a macro-assembly file and we invoke the macro-assembler.
- 
-       if Auto_Init then
-          declare
-             Macro_File_Name : constant String := Lib_Filename & "$init.mar";
-             Macro_File      : Ada.Text_IO.File_Type;
-             Init_Proc       : String := Lib_Filename & "INIT";
-             Popen_Result    : System.Address;
-             Pclose_Result   : Integer;
- 
-             Command  : constant String :=
-                          Macro_Name & " " & Macro_File_Name & ASCII.NUL;
-             --  The command to invoke the macro-assembler on the generated
-             --  assembly file.
- 
-             Mode : constant String := "r" & ASCII.NUL;
-             --  The mode for the invocation of Popen
- 
-          begin
-             To_Upper (Init_Proc);
- 
-             if Verbose_Mode then
-                Write_Str ("Creating auto-init assembly file """);
-                Write_Str (Macro_File_Name);
-                Write_Line ("""");
-             end if;
- 
-             begin
-                Create (Macro_File, Out_File, Macro_File_Name);
- 
-                Put_Line (Macro_File, ASCII.HT & ".EXTRN LIB$INITIALIZE");
-                Put_Line (Macro_File, ASCII.HT & ".EXTRN " & Init_Proc);
-                Put_Line
-                  (Macro_File,
-                   ASCII.HT & ".PSECT LIB$INITIALIZE USR,GBL,NOEXE,NOWRT,LONG");
-                Put_Line (Macro_File, ASCII.HT & ".ADDRESS " & Init_Proc);
-                Put_Line (Macro_File, ASCII.HT & ".END");
- 
-                Close (Macro_File);
- 
-             exception
-                when others =>
-                   Fail ("creation of auto-init assembly file """,
-                         Macro_File_Name, """ failed");
-             end;
- 
-             --  Invoke the macro-assembler
- 
-             if Verbose_Mode then
-                Write_Str ("Assembling auto-init assembly file """);
-                Write_Str (Macro_File_Name);
-                Write_Line ("""");
-             end if;
- 
-             Popen_Result := Popen (Command (Command'First)'Address,
-                                    Mode (Mode'First)'Address);
- 
-             if Popen_Result = Null_Address then
-                Fail ("assembly of auto-init assembly file """,
-                      Macro_File_Name, """ failed");
-             end if;
- 
-             --  Wait for the end of execution of the macro-assembler
- 
-             Pclose_Result := Pclose (Popen_Result);
- 
-             if Pclose_Result < 0 then
-                Fail ("assembly of auto init assembly file """,
-                      Macro_File_Name, """ failed");
-             end if;
- 
-             --  Add the generated object file to the list of objects to be
-             --  included in the library.
- 
-             Additional_Objects :=
-               new Argument_List'
-                 (1 => new String'(Lib_Filename & "$init.obj"));
-          end;
-       end if;
- 
-       --  Allocate the argument list and put the symbol file name, the
-       --  reference (if any) and the policy (if not autonomous).
- 
-       Arguments := new Argument_List (1 .. Ofiles'Length + 8);
- 
-       Last_Argument := 0;
- 
-       --  Verbosity
- 
-       if Verbose_Mode then
-          Last_Argument := Last_Argument + 1;
-          Arguments (Last_Argument) := new String'("-v");
-       end if;
- 
-       --  Version number (major ID)
- 
-       if Lib_Version /= "" then
-          Last_Argument := Last_Argument + 1;
-          Arguments (Last_Argument) := new String'("-V");
-          Last_Argument := Last_Argument + 1;
-          Arguments (Last_Argument) := new String'(Version);
-       end if;
- 
-       --  Symbol file
- 
-       Last_Argument := Last_Argument + 1;
-       Arguments (Last_Argument) := new String'("-s");
-       Last_Argument := Last_Argument + 1;
-       Arguments (Last_Argument) := new String'(Opt_File_Name);
- 
-       --  Reference Symbol File
- 
-       if Symbol_Data.Reference /= No_Name then
-          Last_Argument := Last_Argument + 1;
-          Arguments (Last_Argument) := new String'("-r");
-          Last_Argument := Last_Argument + 1;
-          Arguments (Last_Argument) :=
-            new String'(Get_Name_String (Symbol_Data.Reference));
-       end if;
- 
-       --  Policy
- 
-       case Symbol_Data.Symbol_Policy is
-          when Autonomous =>
-             null;
- 
-          when Compliant =>
-             Last_Argument := Last_Argument + 1;
-             Arguments (Last_Argument) := new String'("-c");
- 
-          when Controlled =>
-             Last_Argument := Last_Argument + 1;
-             Arguments (Last_Argument) := new String'("-C");
-       end case;
- 
-       --  Add each relevant object file
- 
-       for Index in Ofiles'Range loop
-          if Is_Interface (Ofiles (Index).all) then
-             Last_Argument := Last_Argument + 1;
-             Arguments (Last_Argument) := new String'(Ofiles (Index).all);
-          end if;
-       end loop;
- 
-       --  Spawn gnatsym
- 
-       Spawn (Program_Name => Gnatsym_Path.all,
-              Args         => Arguments (1 .. Last_Argument),
-              Success      => Success);
- 
-       if not Success then
-          Fail ("unable to create symbol file for library """,
-                Lib_Filename, """");
-       end if;
- 
-       Free (Arguments);
- 
-       --  Move all the -l switches from Opts to Opts2
- 
-       declare
-          Index : Natural := Opts'First;
-          Opt   : String_Access;
- 
-       begin
-          while Index <= Last_Opt loop
-             Opt := Opts (Index);
- 
-             if Opt'Length > 2 and then
-               Opt (Opt'First .. Opt'First + 1) = "-l"
-             then
-                if Index < Last_Opt then
-                   Opts (Index .. Last_Opt - 1) :=
-                     Opts (Index + 1 .. Last_Opt);
-                end if;
- 
-                Last_Opt := Last_Opt - 1;
- 
-                Last_Opt2 := Last_Opt2 + 1;
-                Opts2 (Last_Opt2) := Opt;
- 
-             else
-                Index := Index + 1;
-             end if;
-          end loop;
-       end;
- 
-       --  Invoke gcc to build the library
- 
-       Utl.Gcc
-         (Output_File => Lib_File,
-          Objects     => Ofiles & Additional_Objects.all,
-          Options     => VMS_Options,
-          Options_2   => Opts (Opts'First .. Last_Opt) &
-                         Opts2 (Opts2'First .. Last_Opt2),
-          Driver_Name => Driver_Name);
- 
-       --  The auto-init object file need to be deleted, so that it will not
-       --  be included in the library as a regular object file, otherwise
-       --  it will be included twice when the library will be built next
-       --  time, which may lead to errors.
- 
-       if Auto_Init then
-          declare
-             Auto_Init_Object_File_Name : constant String :=
-                                            Lib_Filename & "$init.obj";
-             Disregard : Boolean;
- 
-          begin
-             if Verbose_Mode then
-                Write_Str ("deleting auto-init object file """);
-                Write_Str (Auto_Init_Object_File_Name);
-                Write_Line ("""");
-             end if;
- 
-             Delete_File (Auto_Init_Object_File_Name, Success => Disregard);
-          end;
-       end if;
-    end Build_Dynamic_Library;
- 
-    -------------------------
-    -- Default_DLL_Address --
-    -------------------------
- 
-    function Default_DLL_Address return String is
-    begin
-       return "";
-    end Default_DLL_Address;
- 
-    -------------
-    -- DLL_Ext --
-    -------------
- 
-    function DLL_Ext return String is
-    begin
-       return "exe";
-    end DLL_Ext;
- 
-    --------------------
-    -- Dynamic_Option --
-    --------------------
- 
-    function Dynamic_Option return String is
-    begin
-       return "-shared";
-    end Dynamic_Option;
- 
-    -------------------
-    -- Is_Object_Ext --
-    -------------------
- 
-    function Is_Object_Ext (Ext : String) return Boolean is
-    begin
-       return Ext = ".obj";
-    end Is_Object_Ext;
- 
-    --------------
-    -- Is_C_Ext --
-    --------------
- 
-    function Is_C_Ext (Ext : String) return Boolean is
-    begin
-       return Ext = ".c";
-    end Is_C_Ext;
- 
-    --------------------
-    -- Is_Archive_Ext --
-    --------------------
- 
-    function Is_Archive_Ext (Ext : String) return Boolean is
-    begin
-       return Ext = ".olb" or else Ext = ".exe";
-    end Is_Archive_Ext;
- 
-    -------------
-    -- Libgnat --
-    -------------
- 
-    function Libgnat return String is
-       Libgnat_A : constant String := "libgnat.a";
-       Libgnat_Olb : constant String := "libgnat.olb";
- 
-    begin
-       Name_Len := Libgnat_A'Length;
-       Name_Buffer (1 .. Name_Len) := Libgnat_A;
- 
-       if Osint.Find_File (Name_Enter, Osint.Library) /= No_File then
-          return Libgnat_A;
- 
-       else
-          return Libgnat_Olb;
-       end if;
-    end Libgnat;
- 
-    ------------------------
-    -- Library_Exists_For --
-    ------------------------
- 
-    function Library_Exists_For (Project : Project_Id) return Boolean is
-    begin
-       if not Projects.Table (Project).Library then
-          Fail ("INTERNAL ERROR: Library_Exists_For called " &
-                "for non library project");
-          return False;
- 
-       else
-          declare
-             Lib_Dir : constant String :=
-               Get_Name_String (Projects.Table (Project).Library_Dir);
-             Lib_Name : constant String :=
-               Get_Name_String (Projects.Table (Project).Library_Name);
- 
-          begin
-             if Projects.Table (Project).Library_Kind = Static then
-                return Is_Regular_File
-                  (Lib_Dir & Directory_Separator & "lib" &
-                   Fil.Ext_To (Lib_Name, Archive_Ext));
- 
-             else
-                return Is_Regular_File
-                  (Lib_Dir & Directory_Separator & "lib" &
-                   Fil.Ext_To (Lib_Name, DLL_Ext));
-             end if;
-          end;
-       end if;
-    end Library_Exists_For;
- 
-    ---------------------------
-    -- Library_File_Name_For --
-    ---------------------------
- 
-    function Library_File_Name_For (Project : Project_Id) return Name_Id is
-    begin
-       if not Projects.Table (Project).Library then
-          Prj.Com.Fail ("INTERNAL ERROR: Library_File_Name_For called " &
-                        "for non library project");
-          return No_Name;
- 
-       else
-          declare
-             Lib_Name : constant String :=
-               Get_Name_String (Projects.Table (Project).Library_Name);
- 
-          begin
-             Name_Len := 3;
-             Name_Buffer (1 .. Name_Len) := "lib";
- 
-             if Projects.Table (Project).Library_Kind = Static then
-                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, Archive_Ext));
- 
-             else
-                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, DLL_Ext));
-             end if;
- 
-             return Name_Find;
-          end;
-       end if;
-    end Library_File_Name_For;
- 
-    --------------------------------
-    -- Linker_Library_Path_Option --
-    --------------------------------
- 
-    function Linker_Library_Path_Option return String_Access is
-    begin
-       return null;
-    end Linker_Library_Path_Option;
- 
-    ----------------
-    -- Object_Ext --
-    ----------------
- 
-    function Object_Ext return String is
-    begin
-       return "obj";
-    end Object_Ext;
- 
-    ----------------
-    -- PIC_Option --
-    ----------------
- 
-    function PIC_Option return String is
-    begin
-       return "";
-    end PIC_Option;
- 
-    -----------------------------------------------
-    -- Standalone_Library_Auto_Init_Is_Supported --
-    -----------------------------------------------
- 
-    function Standalone_Library_Auto_Init_Is_Supported return Boolean is
-    begin
-       return True;
-    end Standalone_Library_Auto_Init_Is_Supported;
- 
-    ---------------------------
-    -- Support_For_Libraries --
-    ---------------------------
- 
-    function Support_For_Libraries return Library_Support is
-    begin
-       return Full;
-    end Support_For_Libraries;
- 
- end MLib.Tgt;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5vosinte.adb gcc-4.0.0/gcc/ada/5vosinte.adb
*** gcc-3.4.3/gcc/ada/5vosinte.adb	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5vosinte.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,78 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   S Y S T E M . O S _ I N T E R F A C E                  --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --             Copyright (C) 1991-1994, Florida State University            --
- --             Copyright (C) 1995-2003, Ada Core Technologies               --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a OpenVMS/Alpha version of this package.
- 
- --  This package encapsulates all direct interfaces to OS services
- --  that are needed by children of System.
- 
- pragma Polling (Off);
- --  Turn off polling, we do not want ATC polling to take place during
- --  tasking operations. It causes infinite loops and other problems.
- 
- with Interfaces.C; use Interfaces.C;
- with System.Machine_Code; use System.Machine_Code;
- 
- package body System.OS_Interface is
- 
-    ------------------
-    -- pthread_self --
-    ------------------
- 
-    function pthread_self return pthread_t is
-       use ASCII;
-       Self : pthread_t;
- 
-    begin
-       Asm ("call_pal 0x9e" & LF & HT &
-            "bis $31, $0, %0",
-            Outputs => pthread_t'Asm_Output ("=r", Self),
-            Clobber => "$0");
-       return Self;
-    end pthread_self;
- 
-    -----------------
-    -- sched_yield --
-    -----------------
- 
-    function sched_yield return int is
-       procedure sched_yield_base;
-       pragma Import (C, sched_yield_base, "PTHREAD_YIELD_NP");
- 
-    begin
-       sched_yield_base;
-       return 0;
-    end sched_yield;
- 
- end System.OS_Interface;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5vosinte.ads gcc-4.0.0/gcc/ada/5vosinte.ads
*** gcc-3.4.3/gcc/ada/5vosinte.ads	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5vosinte.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,640 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   S Y S T E M . O S _ I N T E R F A C E                  --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --           Copyright (C) 1991-2002 Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a OpenVMS/Alpha version of this package.
- 
- --  This package encapsulates all direct interfaces to OS services
- --  that are needed by children of System.
- 
- --  PLEASE DO NOT add any with-clauses to this package
- --  or remove the pragma Elaborate_Body.
- --  It is designed to be a bottom-level (leaf) package.
- 
- with Interfaces.C;
- package System.OS_Interface is
-    pragma Preelaborate;
- 
-    pragma Linker_Options ("--for-linker=sys$library:pthread$rtl.exe");
-    --  Link in the DEC threads library.
- 
-    --  pragma Linker_Options ("--for-linker=/threads_enable");
-    --  Enable upcalls and multiple kernel threads.
- 
-    subtype int            is Interfaces.C.int;
-    subtype short          is Interfaces.C.short;
-    subtype long           is Interfaces.C.long;
-    subtype unsigned       is Interfaces.C.unsigned;
-    subtype unsigned_short is Interfaces.C.unsigned_short;
-    subtype unsigned_long  is Interfaces.C.unsigned_long;
-    subtype unsigned_char  is Interfaces.C.unsigned_char;
-    subtype plain_char     is Interfaces.C.plain_char;
-    subtype size_t         is Interfaces.C.size_t;
- 
-    -----------------------------
-    -- Signals (Interrupt IDs) --
-    -----------------------------
- 
-    --  Type signal has an arbitrary limit of 31
- 
-    Max_Interrupt : constant := 31;
-    type Signal is new unsigned range 0 .. Max_Interrupt;
-    for Signal'Size use unsigned'Size;
- 
-    type sigset_t is array (Signal) of Boolean;
-    pragma Pack (sigset_t);
- 
-    --  Interrupt_Number_Type
-    --  Unsigned long integer denoting the number of an interrupt
- 
-    subtype Interrupt_Number_Type is unsigned_long;
- 
-    --  OpenVMS system services return values of type Cond_Value_Type.
- 
-    subtype Cond_Value_Type is unsigned_long;
-    subtype Short_Cond_Value_Type is unsigned_short;
- 
-    type IO_Status_Block_Type is record
-       Status   : Short_Cond_Value_Type;
-       Count    : unsigned_short;
-       Dev_Info : unsigned_long;
-    end record;
- 
-    type AST_Handler is access procedure (Param : Address);
-    No_AST_Handler : constant AST_Handler := null;
- 
-    CMB_M_READONLY  : constant := 16#00000001#;
-    CMB_M_WRITEONLY : constant := 16#00000002#;
-    AGN_M_READONLY  : constant := 16#00000001#;
-    AGN_M_WRITEONLY : constant := 16#00000002#;
- 
-    IO_WRITEVBLK : constant := 48;  --  WRITE VIRTUAL BLOCK
-    IO_READVBLK  : constant := 49;  --  READ VIRTUAL BLOCK
- 
-    ----------------
-    -- Sys_Assign --
-    ----------------
-    --
-    --  Assign I/O Channel
-    --
-    --  Status = returned status
-    --  Devnam = address  of  device  name  or  logical  name   string
-    --               descriptor
-    --  Chan   = address of word to receive channel number assigned
-    --  Acmode = access mode associated with channel
-    --  Mbxnam = address of mailbox logical name string descriptor, if
-    --               mailbox associated with device
-    --  Flags  = optional channel flags longword for specifying options
-    --           for the $ASSIGN operation
-    --
- 
-    procedure Sys_Assign
-      (Status : out Cond_Value_Type;
-       Devnam : in String;
-       Chan   : out unsigned_short;
-       Acmode : in unsigned_short := 0;
-       Mbxnam : in String := String'Null_Parameter;
-       Flags  : in unsigned_long := 0);
-    pragma Interface (External, Sys_Assign);
-    pragma Import_Valued_Procedure
-      (Sys_Assign, "SYS$ASSIGN",
-       (Cond_Value_Type, String,         unsigned_short,
-        unsigned_short,  String,         unsigned_long),
-       (Value,           Descriptor (s), Reference,
-        Value,           Descriptor (s), Value),
-       Flags);
- 
-    ----------------
-    -- Sys_Cantim --
-    ----------------
-    --
-    --  Cancel Timer
-    --
-    --  Status  = returned status
-    --  Reqidt  = ID of timer to be cancelled
-    --  Acmode  = Access mode
-    --
-    procedure Sys_Cantim
-      (Status : out Cond_Value_Type;
-       Reqidt : in Address;
-       Acmode : in unsigned);
-    pragma Interface (External, Sys_Cantim);
-    pragma Import_Valued_Procedure
-      (Sys_Cantim, "SYS$CANTIM",
-       (Cond_Value_Type, Address, unsigned),
-       (Value,           Value,   Value));
- 
-    ----------------
-    -- Sys_Crembx --
-    ----------------
-    --
-    --  Create mailbox
-    --
-    --     Status  = returned status
-    --     Prmflg  = permanent flag
-    --     Chan    = channel
-    --     Maxmsg  = maximum message
-    --     Bufquo  = buufer quote
-    --     Promsk  = protection mast
-    --     Acmode  = access mode
-    --     Lognam  = logical name
-    --     Flags   = flags
-    --
-    procedure Sys_Crembx
-      (Status : out Cond_Value_Type;
-       Prmflg : in Boolean;
-       Chan   : out unsigned_short;
-       Maxmsg : in unsigned_long := 0;
-       Bufquo : in unsigned_long := 0;
-       Promsk : in unsigned_short := 0;
-       Acmode : in unsigned_short := 0;
-       Lognam : in String;
-       Flags  : in unsigned_long := 0);
-    pragma Interface (External, Sys_Crembx);
-    pragma Import_Valued_Procedure
-      (Sys_Crembx, "SYS$CREMBX",
-       (Cond_Value_Type, Boolean,        unsigned_short,
-        unsigned_long,   unsigned_long,  unsigned_short,
-        unsigned_short,  String,         unsigned_long),
-       (Value,           Value,          Reference,
-        Value,           Value,          Value,
-        Value,           Descriptor (s), Value));
- 
-    -------------
-    -- Sys_QIO --
-    -------------
-    --
-    --    Queue I/O
-    --
-    --     Status = Returned status of call
-    --     EFN    = event flag to be set when I/O completes
-    --     Chan   = channel
-    --     Func   = function
-    --     Iosb   = I/O status block
-    --     Astadr = system trap to be generated when I/O completes
-    --     Astprm = AST parameter
-    --     P1-6   = optional parameters
- 
-    procedure Sys_QIO
-      (Status : out Cond_Value_Type;
-       EFN    : in unsigned_long := 0;
-       Chan   : in unsigned_short;
-       Func   : in unsigned_long := 0;
-       Iosb   : out IO_Status_Block_Type;
-       Astadr : in AST_Handler := No_AST_Handler;
-       Astprm : in Address := Null_Address;
-       P1     : in  unsigned_long := 0;
-       P2     : in  unsigned_long := 0;
-       P3     : in  unsigned_long := 0;
-       P4     : in  unsigned_long := 0;
-       P5     : in  unsigned_long := 0;
-       P6     : in  unsigned_long := 0);
- 
-    procedure Sys_QIO
-      (Status : out Cond_Value_Type;
-       EFN    : in unsigned_long := 0;
-       Chan   : in unsigned_short;
-       Func   : in unsigned_long := 0;
-       Iosb   : in Address := Null_Address;
-       Astadr : in AST_Handler := No_AST_Handler;
-       Astprm : in Address := Null_Address;
-       P1     : in  unsigned_long := 0;
-       P2     : in  unsigned_long := 0;
-       P3     : in  unsigned_long := 0;
-       P4     : in  unsigned_long := 0;
-       P5     : in  unsigned_long := 0;
-       P6     : in  unsigned_long := 0);
- 
-    pragma Interface (External, Sys_QIO);
-    pragma Import_Valued_Procedure
-      (Sys_QIO, "SYS$QIO",
-       (Cond_Value_Type,      unsigned_long, unsigned_short, unsigned_long,
-        IO_Status_Block_Type, AST_Handler,   Address,
-        unsigned_long,        unsigned_long, unsigned_long,
-        unsigned_long,        unsigned_long, unsigned_long),
-       (Value,                Value,         Value,          Value,
-        Reference,            Value,         Value,
-        Value,                Value,         Value,
-        Value,                Value,         Value));
- 
-    pragma Import_Valued_Procedure
-      (Sys_QIO, "SYS$QIO",
-       (Cond_Value_Type, unsigned_long, unsigned_short, unsigned_long,
-        Address,         AST_Handler,   Address,
-        unsigned_long,   unsigned_long, unsigned_long,
-        unsigned_long,   unsigned_long, unsigned_long),
-       (Value,           Value,         Value,          Value,
-        Value,           Value,         Value,
-        Value,           Value,         Value,
-        Value,           Value,         Value));
- 
-    ----------------
-    -- Sys_Setimr --
-    ----------------
-    --
-    --    Set Timer
-    --
-    --     Status = Returned status of call
-    --     EFN    = event flag to be set when timer expires
-    --     Tim    = expiration time
-    --     AST    = system trap to be generated when timer expires
-    --     Redidt = returned ID of timer (e.g. to cancel timer)
-    --     Flags  = flags
-    --
-    procedure Sys_Setimr
-      (Status : out Cond_Value_Type;
-       EFN    : in unsigned_long;
-       Tim    : in Long_Integer;
-       AST    : in AST_Handler;
-       Reqidt : in Address;
-       Flags  : in unsigned_long);
-    pragma Interface (External, Sys_Setimr);
-    pragma Import_Valued_Procedure
-      (Sys_Setimr, "SYS$SETIMR",
-       (Cond_Value_Type, unsigned_long,     Long_Integer,
-        AST_Handler,     Address,           unsigned_long),
-       (Value,           Value,             Reference,
-        Value,           Value,             Value));
- 
-    Interrupt_ID_0   : constant  := 0;
-    Interrupt_ID_1   : constant  := 1;
-    Interrupt_ID_2   : constant  := 2;
-    Interrupt_ID_3   : constant  := 3;
-    Interrupt_ID_4   : constant  := 4;
-    Interrupt_ID_5   : constant  := 5;
-    Interrupt_ID_6   : constant  := 6;
-    Interrupt_ID_7   : constant  := 7;
-    Interrupt_ID_8   : constant  := 8;
-    Interrupt_ID_9   : constant  := 9;
-    Interrupt_ID_10  : constant  := 10;
-    Interrupt_ID_11  : constant  := 11;
-    Interrupt_ID_12  : constant  := 12;
-    Interrupt_ID_13  : constant  := 13;
-    Interrupt_ID_14  : constant  := 14;
-    Interrupt_ID_15  : constant  := 15;
-    Interrupt_ID_16  : constant  := 16;
-    Interrupt_ID_17  : constant  := 17;
-    Interrupt_ID_18  : constant  := 18;
-    Interrupt_ID_19  : constant  := 19;
-    Interrupt_ID_20  : constant  := 20;
-    Interrupt_ID_21  : constant  := 21;
-    Interrupt_ID_22  : constant  := 22;
-    Interrupt_ID_23  : constant  := 23;
-    Interrupt_ID_24  : constant  := 24;
-    Interrupt_ID_25  : constant  := 25;
-    Interrupt_ID_26  : constant  := 26;
-    Interrupt_ID_27  : constant  := 27;
-    Interrupt_ID_28  : constant  := 28;
-    Interrupt_ID_29  : constant  := 29;
-    Interrupt_ID_30  : constant  := 30;
-    Interrupt_ID_31  : constant  := 31;
- 
-    -----------
-    -- Errno --
-    -----------
- 
-    function errno return int;
-    pragma Import (C, errno, "__get_errno");
- 
-    EINTR  : constant := 4;   --  Interrupted system call
-    EAGAIN : constant := 11;  --  No more processes
-    ENOMEM : constant := 12;  --  Not enough core
- 
-    -------------------------
-    -- Priority Scheduling --
-    -------------------------
- 
-    SCHED_FIFO  : constant := 1;
-    SCHED_RR    : constant := 2;
-    SCHED_OTHER : constant := 3;
-    SCHED_BG    : constant := 4;
-    SCHED_LFI   : constant := 5;
-    SCHED_LRR   : constant := 6;
- 
-    -------------
-    -- Process --
-    -------------
- 
-    type pid_t is private;
- 
-    function kill (pid : pid_t; sig : Signal) return int;
-    pragma Import (C, kill);
- 
-    function getpid return pid_t;
-    pragma Import (C, getpid);
- 
-    -------------
-    -- Threads --
-    -------------
- 
-    type Thread_Body is access
-      function (arg : System.Address) return System.Address;
-    type pthread_t           is private;
-    subtype Thread_Id        is pthread_t;
- 
-    type pthread_mutex_t     is limited private;
-    type pthread_cond_t      is limited private;
-    type pthread_attr_t      is limited private;
-    type pthread_mutexattr_t is limited private;
-    type pthread_condattr_t  is limited private;
-    type pthread_key_t       is private;
- 
-    PTHREAD_CREATE_JOINABLE     : constant := 0;
-    PTHREAD_CREATE_DETACHED     : constant := 1;
- 
-    PTHREAD_CANCEL_DISABLE      : constant := 0;
-    PTHREAD_CANCEL_ENABLE       : constant := 1;
- 
-    PTHREAD_CANCEL_DEFERRED     : constant := 0;
-    PTHREAD_CANCEL_ASYNCHRONOUS : constant := 1;
- 
-    --  Don't use ERRORCHECK mutexes, they don't work when a thread is not
-    --  the owner.  AST's, at least, unlock others threads mutexes. Even
-    --  if the error is ignored, they don't work.
-    PTHREAD_MUTEX_NORMAL_NP     : constant := 0;
-    PTHREAD_MUTEX_RECURSIVE_NP  : constant := 1;
-    PTHREAD_MUTEX_ERRORCHECK_NP : constant := 2;
- 
-    PTHREAD_INHERIT_SCHED       : constant := 0;
-    PTHREAD_EXPLICIT_SCHED      : constant := 1;
- 
-    function pthread_cancel (thread : pthread_t) return int;
-    pragma Import (C, pthread_cancel, "PTHREAD_CANCEL");
- 
-    procedure pthread_testcancel;
-    pragma Import (C, pthread_testcancel, "PTHREAD_TESTCANCEL");
- 
-    function pthread_setcancelstate
-      (newstate : int; oldstate : access int) return int;
-    pragma Import (C, pthread_setcancelstate, "PTHREAD_SETCANCELSTATE");
- 
-    function pthread_setcanceltype
-      (newtype : int; oldtype : access int) return int;
-    pragma Import (C, pthread_setcanceltype, "PTHREAD_SETCANCELTYPE");
- 
-    ---------------------------
-    --  POSIX.1c  Section 3  --
-    ---------------------------
- 
-    function pthread_lock_global_np return int;
-    pragma Import (C, pthread_lock_global_np, "PTHREAD_LOCK_GLOBAL_NP");
- 
-    function pthread_unlock_global_np return int;
-    pragma Import (C, pthread_unlock_global_np, "PTHREAD_UNLOCK_GLOBAL_NP");
- 
-    ----------------------------
-    --  POSIX.1c  Section 11  --
-    ----------------------------
- 
-    function pthread_mutexattr_init
-      (attr : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutexattr_init, "PTHREAD_MUTEXATTR_INIT");
- 
-    function pthread_mutexattr_destroy
-      (attr : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutexattr_destroy, "PTHREAD_MUTEXATTR_DESTROY");
- 
-    function pthread_mutexattr_settype_np
-      (attr      : access pthread_mutexattr_t;
-       mutextype : int) return int;
-    pragma Import (C, pthread_mutexattr_settype_np,
-                      "PTHREAD_MUTEXATTR_SETTYPE_NP");
- 
-    function pthread_mutex_init
-      (mutex : access pthread_mutex_t;
-       attr  : access pthread_mutexattr_t) return int;
-    pragma Import (C, pthread_mutex_init, "PTHREAD_MUTEX_INIT");
- 
-    function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_mutex_destroy, "PTHREAD_MUTEX_DESTROY");
- 
-    function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_mutex_lock, "PTHREAD_MUTEX_LOCK");
- 
-    function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_mutex_unlock, "PTHREAD_MUTEX_UNLOCK");
- 
-    function pthread_condattr_init
-      (attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_condattr_init, "PTHREAD_CONDATTR_INIT");
- 
-    function pthread_condattr_destroy
-      (attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_condattr_destroy, "PTHREAD_CONDATTR_DESTROY");
- 
-    function pthread_cond_init
-      (cond : access pthread_cond_t;
-       attr : access pthread_condattr_t) return int;
-    pragma Import (C, pthread_cond_init, "PTHREAD_COND_INIT");
- 
-    function pthread_cond_destroy (cond : access pthread_cond_t) return int;
-    pragma Import (C, pthread_cond_destroy, "PTHREAD_COND_DESTROY");
- 
-    function pthread_cond_signal (cond : access pthread_cond_t) return int;
-    pragma Import (C, pthread_cond_signal, "PTHREAD_COND_SIGNAL");
- 
-    function pthread_cond_signal_int_np
-      (cond : access pthread_cond_t) return int;
-    pragma Import (C, pthread_cond_signal_int_np,
-                   "PTHREAD_COND_SIGNAL_INT_NP");
- 
-    function pthread_cond_wait
-      (cond  : access pthread_cond_t;
-       mutex : access pthread_mutex_t) return int;
-    pragma Import (C, pthread_cond_wait, "PTHREAD_COND_WAIT");
- 
-    --------------------------
-    -- POSIX.1c  Section 13 --
-    --------------------------
- 
-    function pthread_mutexattr_setprotocol
-      (attr : access pthread_mutexattr_t; protocol : int) return int;
-    pragma Import (C, pthread_mutexattr_setprotocol,
-                      "PTHREAD_MUTEXATTR_SETPROTOCOL");
- 
-    type struct_sched_param is record
-       sched_priority : int;  --  scheduling priority
-    end record;
-    for struct_sched_param'Size use 8*4;
-    pragma Convention (C, struct_sched_param);
- 
-    function pthread_setschedparam
-      (thread : pthread_t;
-       policy : int;
-       param  : access struct_sched_param) return int;
-    pragma Import (C, pthread_setschedparam, "PTHREAD_SETSCHEDPARAM");
- 
-    function pthread_attr_setscope
-      (attr            : access pthread_attr_t;
-       contentionscope : int) return int;
-    pragma Import (C, pthread_attr_setscope, "PTHREAD_ATTR_SETSCOPE");
- 
-    function pthread_attr_setinheritsched
-      (attr            : access pthread_attr_t;
-       inheritsched : int) return int;
-    pragma Import (C, pthread_attr_setinheritsched,
-                      "PTHREAD_ATTR_SETINHERITSCHED");
- 
-    function pthread_attr_setschedpolicy
-      (attr : access pthread_attr_t; policy : int) return int;
-    pragma Import (C, pthread_attr_setschedpolicy,
-                      "PTHREAD_ATTR_SETSCHEDPOLICY");
- 
-    function pthread_attr_setschedparam
-      (attr        : access pthread_attr_t;
-       sched_param : int) return int;
-    pragma Import (C, pthread_attr_setschedparam, "PTHREAD_ATTR_SETSCHEDPARAM");
- 
-    function sched_yield return int;
- 
-    -----------------------------
-    --  P1003.1c - Section 16  --
-    -----------------------------
- 
-    function pthread_attr_init (attributes : access pthread_attr_t) return int;
-    pragma Import (C, pthread_attr_init, "PTHREAD_ATTR_INIT");
- 
-    function pthread_attr_destroy
-      (attributes : access pthread_attr_t) return int;
-    pragma Import (C, pthread_attr_destroy, "PTHREAD_ATTR_DESTROY");
- 
-    function pthread_attr_setdetachstate
-      (attr        : access pthread_attr_t;
-       detachstate : int) return int;
-    pragma Import (C, pthread_attr_setdetachstate,
-                      "PTHREAD_ATTR_SETDETACHSTATE");
- 
-    function pthread_attr_setstacksize
-      (attr      : access pthread_attr_t;
-       stacksize : size_t) return int;
-    pragma Import (C, pthread_attr_setstacksize, "PTHREAD_ATTR_SETSTACKSIZE");
- 
-    function pthread_create
-      (thread        : access pthread_t;
-       attributes    : access pthread_attr_t;
-       start_routine : Thread_Body;
-       arg           : System.Address) return int;
-    pragma Import (C, pthread_create, "PTHREAD_CREATE");
- 
-    procedure pthread_exit (status : System.Address);
-    pragma Import (C, pthread_exit, "PTHREAD_EXIT");
- 
-    function pthread_self return pthread_t;
- 
-    --------------------------
-    -- POSIX.1c  Section 17 --
-    --------------------------
- 
-    function pthread_setspecific
-      (key   : pthread_key_t;
-       value : System.Address) return  int;
-    pragma Import (C, pthread_setspecific, "PTHREAD_SETSPECIFIC");
- 
-    function pthread_getspecific (key : pthread_key_t) return System.Address;
-    pragma Import (C, pthread_getspecific, "PTHREAD_GETSPECIFIC");
- 
-    type destructor_pointer is access procedure (arg : System.Address);
- 
-    function pthread_key_create
-      (key        : access pthread_key_t;
-       destructor : destructor_pointer) return int;
-    pragma Import (C, pthread_key_create, "PTHREAD_KEY_CREATE");
- 
- private
- 
-    type pid_t is new int;
- 
-    type pthreadLongAddr_p is mod 2 ** Long_Integer'Size;
- 
-    type pthreadLongAddr_t is mod 2 ** Long_Integer'Size;
-    type pthreadLongAddr_t_ptr is mod 2 ** Long_Integer'Size;
- 
-    type pthreadLongString_t is mod 2 ** Long_Integer'Size;
- 
-    type pthreadLongUint_t is mod 2 ** Long_Integer'Size;
-    type pthreadLongUint_array is array (Natural range <>)
-      of pthreadLongUint_t;
- 
-    type pthread_t is mod 2 ** Long_Integer'Size;
- 
-    type pthread_cond_t is record
-       state    : unsigned;
-       valid    : unsigned;
-       name     : pthreadLongString_t;
-       arg      : unsigned;
-       sequence : unsigned;
-       block    : pthreadLongAddr_t_ptr;
-    end record;
-    for pthread_cond_t'Size use 8*32;
-    pragma Convention (C, pthread_cond_t);
- 
-    type pthread_attr_t is record
-       valid    : long;
-       name     : pthreadLongString_t;
-       arg      : pthreadLongUint_t;
-       reserved : pthreadLongUint_array (0 .. 18);
-    end record;
-    for pthread_attr_t'Size use 8*176;
-    pragma Convention (C, pthread_attr_t);
- 
-    type pthread_mutex_t is record
-       lock     : unsigned;
-       valid    : unsigned;
-       name     : pthreadLongString_t;
-       arg      : unsigned;
-       sequence : unsigned;
-       block    : pthreadLongAddr_p;
-       owner    : unsigned;
-       depth    : unsigned;
-    end record;
-    for pthread_mutex_t'Size use 8*40;
-    pragma Convention (C, pthread_mutex_t);
- 
-    type pthread_mutexattr_t is record
-       valid    : long;
-       reserved : pthreadLongUint_array (0 .. 14);
-    end record;
-    for pthread_mutexattr_t'Size use 8*128;
-    pragma Convention (C, pthread_mutexattr_t);
- 
-    type pthread_condattr_t is record
-       valid    : long;
-       reserved : pthreadLongUint_array (0 .. 12);
-    end record;
-    for pthread_condattr_t'Size use 8*112;
-    pragma Convention (C, pthread_condattr_t);
- 
-    type pthread_key_t is new unsigned;
- 
-    pragma Inline (pthread_self);
- 
- end System.OS_Interface;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5vosprim.adb gcc-4.0.0/gcc/ada/5vosprim.adb
*** gcc-3.4.3/gcc/ada/5vosprim.adb	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5vosprim.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,193 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                  S Y S T E M . O S _ P R I M I T I V E S                 --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --          Copyright (C) 1998-2002 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the OpenVMS/Alpha version of this file
- 
- with System.Aux_DEC;
- 
- package body System.OS_Primitives is
- 
-    --------------------------------------
-    -- Local functions and declarations --
-    --------------------------------------
- 
-    function Get_GMToff return Integer;
-    pragma Import (C, Get_GMToff, "get_gmtoff");
-    --  Get the offset from GMT for this timezone
- 
-    VMS_Epoch_Offset : constant Long_Integer :=
-                         10_000_000 *
-                           (3_506_716_800 + Long_Integer (Get_GMToff));
-    --  The offset between the Unix Epoch and the VMS Epoch
- 
-    subtype Cond_Value_Type is System.Aux_DEC.Unsigned_Longword;
-    --  Condition Value return type
- 
-    ----------------
-    -- Sys_Schdwk --
-    ----------------
-    --
-    --  Schedule Wakeup
-    --
-    --  status = returned status
-    --  pidadr = address of process id to be woken up
-    --  prcnam = name of process to be woken up
-    --  daytim = time to wake up
-    --  reptim = repitition interval of wakeup calls
-    --
- 
-    procedure Sys_Schdwk
-      (
-       Status : out Cond_Value_Type;
-       Pidadr : in Address := Null_Address;
-       Prcnam : in String := String'Null_Parameter;
-       Daytim : in Long_Integer;
-       Reptim : in Long_Integer := Long_Integer'Null_Parameter
-      );
- 
-    pragma Interface (External, Sys_Schdwk);
-    --  VMS system call to schedule a wakeup event
-    pragma Import_Valued_Procedure
-      (Sys_Schdwk, "SYS$SCHDWK",
-       (Cond_Value_Type, Address, String,         Long_Integer, Long_Integer),
-       (Value,           Value,   Descriptor (S), Reference,    Reference)
-      );
- 
-    ----------------
-    -- Sys_Gettim --
-    ----------------
-    --
-    --  Get System Time
-    --
-    --  status = returned status
-    --  tim    = current system time
-    --
- 
-    procedure Sys_Gettim
-      (
-       Status : out Cond_Value_Type;
-       Tim    : out OS_Time
-      );
-    --  VMS system call to get the current system time
-    pragma Interface (External, Sys_Gettim);
-    pragma Import_Valued_Procedure
-      (Sys_Gettim, "SYS$GETTIM",
-       (Cond_Value_Type, OS_Time),
-       (Value,           Reference)
-      );
- 
-    ---------------
-    -- Sys_Hiber --
-    ---------------
- 
-    --  Hibernate (until woken up)
- 
-    --  status = returned status
- 
-    procedure Sys_Hiber (Status : out Cond_Value_Type);
-    --  VMS system call to hibernate the current process
-    pragma Interface (External, Sys_Hiber);
-    pragma Import_Valued_Procedure
-      (Sys_Hiber, "SYS$HIBER",
-       (Cond_Value_Type),
-       (Value)
-      );
- 
-    -----------
-    -- Clock --
-    -----------
- 
-    function OS_Clock return OS_Time is
-       Status : Cond_Value_Type;
-       T      : OS_Time;
-    begin
-       Sys_Gettim (Status, T);
-       return (T);
-    end OS_Clock;
- 
-    -----------
-    -- Clock --
-    -----------
- 
-    function Clock return Duration is
-    begin
-       return To_Duration (OS_Clock, Absolute_Calendar);
-    end Clock;
- 
-    ---------------------
-    -- Monotonic_Clock --
-    ---------------------
- 
-    function Monotonic_Clock return Duration renames Clock;
- 
-    -----------------
-    -- Timed_Delay --
-    -----------------
- 
-    procedure Timed_Delay
-      (Time : Duration;
-       Mode : Integer)
-    is
-       Sleep_Time : OS_Time;
-       Status     : Cond_Value_Type;
- 
-    begin
-       Sleep_Time := To_OS_Time (Time, Mode);
-       Sys_Schdwk (Status => Status, Daytim => Sleep_Time);
-       Sys_Hiber (Status);
-    end Timed_Delay;
- 
-    -----------------
-    -- To_Duration --
-    -----------------
- 
-    function To_Duration (T : OS_Time; Mode : Integer) return Duration is
-       pragma Warnings (Off, Mode);
-    begin
-       return Duration'Fixed_Value (T - VMS_Epoch_Offset) * 100;
-    end To_Duration;
- 
-    ----------------
-    -- To_OS_Time --
-    ----------------
- 
-    function To_OS_Time (D : Duration; Mode : Integer) return OS_Time is
-    begin
-       if Mode = Relative then
-          return -(Long_Integer'Integer_Value (D) / 100);
-       else
-          return Long_Integer'Integer_Value (D) / 100 + VMS_Epoch_Offset;
-       end if;
-    end To_OS_Time;
- 
- end System.OS_Primitives;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5vosprim.ads gcc-4.0.0/gcc/ada/5vosprim.ads
*** gcc-3.4.3/gcc/ada/5vosprim.ads	Thu Apr 24 17:53:52 2003
--- gcc-4.0.0/gcc/ada/5vosprim.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,106 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                  S Y S T E M . O S _ P R I M I T I V E S                 --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --          Copyright (C) 1998-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package provides low level primitives used to implement clock and
- --  delays in non tasking applications on Alpha/VMS
- 
- --  The choice of the real clock/delay implementation (depending on whether
- --  tasking is involved or not) is done via soft links (see s-tasoli.ads)
- 
- --  NEVER add any dependency to tasking packages here
- 
- package System.OS_Primitives is
- 
-    subtype OS_Time is Long_Integer;
-    --  System time on VMS is used for performance reasons.
-    --  Note that OS_Time is *not* the same as Ada.Calendar.Time, the
-    --  difference being that relative OS_Time is negative, but relative
-    --  Calendar.Time is positive.
-    --  See Ada.Calendar.Delays for more information on VMS Time.
- 
-    Max_Sensible_Delay : constant Duration :=
-                           Duration'Min (183 * 24 * 60 * 60.0,
-                                         Duration'Last);
-    --  Max of half a year delay, needed to prevent exceptions for large
-    --  delay values. It seems unlikely that any test will notice this
-    --  restriction, except in the case of applications setting the clock at
-    --  at run time (see s-tastim.adb). Also note that a larger value might
-    --  cause problems (e.g overflow, or more likely OS limitation in the
-    --  primitives used). In the case where half a year is too long (which
-    --  occurs in high integrity mode with 32-bit words, and possibly on
-    --  some specific ports of GNAT), Duration'Last is used instead.
- 
-    function OS_Clock return OS_Time;
-    --  Returns "absolute" time, represented as an offset
-    --  relative to "the Epoch", which is Nov 17, 1858 on VMS.
- 
-    function Clock return Duration;
-    pragma Inline (Clock);
-    --  Returns "absolute" time, represented as an offset
-    --  relative to "the Epoch", which is Jan 1, 1970 on unixes.
-    --  This implementation is affected by system's clock changes.
- 
-    function Monotonic_Clock return Duration;
-    pragma Inline (Monotonic_Clock);
-    --  Returns "absolute" time, represented as an offset
-    --  relative to "the Epoch", which is Jan 1, 1970.
-    --  This clock implementation is immune to the system's clock changes.
- 
-    Relative          : constant := 0;
-    Absolute_Calendar : constant := 1;
-    Absolute_RT       : constant := 2;
-    --  Values for Mode call below. Note that the compiler (exp_ch9.adb)
-    --  relies on these values. So any change here must be reflected in
-    --  corresponding changes in the compiler.
- 
-    procedure Timed_Delay (Time : Duration; Mode : Integer);
-    --  Implements the semantics of the delay statement when no tasking is
-    --  used in the application.
-    --
-    --    Mode is one of the three values above
-    --
-    --    Time is a relative or absolute duration value, depending on Mode.
-    --
-    --  Note that currently Ada.Real_Time always uses the tasking run time, so
-    --  this procedure should never be called with Mode set to Absolute_RT.
-    --  This may change in future or bare board implementations.
- 
-    function To_Duration (T : OS_Time; Mode : Integer) return Duration;
-    --  Convert VMS system time to Duration
-    --  Mode is one of the three values above
- 
-    function To_OS_Time (D : Duration; Mode : Integer) return OS_Time;
-    --  Convert Duration to VMS system time
-    --  Mode is one of the three values above
- 
- end System.OS_Primitives;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5vparame.ads gcc-4.0.0/gcc/ada/5vparame.ads
*** gcc-3.4.3/gcc/ada/5vparame.ads	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5vparame.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,202 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                    S Y S T E M . P A R A M E T E R S                     --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the OpenVMS version.
- --  Blank line intentional so that it lines up exactly with default.
- 
- --  This package defines some system dependent parameters for GNAT. These
- --  are values that are referenced by the runtime library and are therefore
- --  relevant to the target machine.
- 
- --  The parameters whose value is defined in the spec are not generally
- --  expected to be changed. If they are changed, it will be necessary to
- --  recompile the run-time library.
- 
- --  The parameters which are defined by functions can be changed by modifying
- --  the body of System.Parameters in file s-parame.adb. A change to this body
- --  requires only rebinding and relinking of the application.
- 
- --  Note: do not introduce any pragma Inline statements into this unit, since
- --  otherwise the relinking and rebinding capability would be deactivated.
- 
- package System.Parameters is
- pragma Pure (Parameters);
- 
-    ---------------------------------------
-    -- Task And Stack Allocation Control --
-    ---------------------------------------
- 
-    type Task_Storage_Size is new Integer;
-    --  Type used in tasking units for task storage size
- 
-    type Size_Type is new Task_Storage_Size;
-    --  Type used to provide task storage size to runtime
- 
-    Unspecified_Size : constant Size_Type := Size_Type'First;
-    --  Value used to indicate that no size type is set
- 
-    subtype Ratio is Size_Type range -1 .. 100;
-    Dynamic : constant Size_Type := -1;
-    --  The secondary stack ratio is a constant between 0 and 100 which
-    --  determines the percentage of the allocated task stack that is
-    --  used by the secondary stack (the rest being the primary stack).
-    --  The special value of minus one indicates that the secondary
-    --  stack is to be allocated from the heap instead.
- 
-    Sec_Stack_Ratio : constant Ratio := Dynamic;
-    --  This constant defines the handling of the secondary stack
- 
-    Sec_Stack_Dynamic : constant Boolean := Sec_Stack_Ratio = Dynamic;
-    --  Convenient Boolean for testing for dynamic secondary stack
- 
-    function Default_Stack_Size return Size_Type;
-    --  Default task stack size used if none is specified
- 
-    function Minimum_Stack_Size return Size_Type;
-    --  Minimum task stack size permitted
- 
-    function Adjust_Storage_Size (Size : Size_Type) return Size_Type;
-    --  Given the storage size stored in the TCB, return the Storage_Size
-    --  value required by the RM for the Storage_Size attribute. The
-    --  required adjustment is as follows:
-    --
-    --    when Size = Unspecified_Size, return Default_Stack_Size
-    --    when Size < Minimum_Stack_Size, return Minimum_Stack_Size
-    --    otherwise return given Size
- 
-    Default_Env_Stack_Size : constant Size_Type := 8_192_000;
-    --  Assumed size of the environment task, if no other information
-    --  is available. This value is used when stack checking is
-    --  enabled and no GNAT_STACK_LIMIT environment variable is set.
- 
-    Stack_Grows_Down  : constant Boolean := True;
-    --  This constant indicates whether the stack grows up (False) or
-    --  down (True) in memory as functions are called. It is used for
-    --  proper implementation of the stack overflow check.
- 
-    ----------------------------------------------
-    -- Characteristics of types in Interfaces.C --
-    ----------------------------------------------
- 
-    long_bits : constant := 32;
-    --  Number of bits in type long and unsigned_long. The normal convention
-    --  is that this is the same as type Long_Integer, but this is not true
-    --  of all targets. For example, in OpenVMS long /= Long_Integer.
- 
-    ----------------------------------------------
-    -- Behavior of Pragma Finalize_Storage_Only --
-    ----------------------------------------------
- 
-    --  Garbage_Collected is a Boolean constant whose value indicates the
-    --  effect of the pragma Finalize_Storage_Entry on a controlled type.
- 
-    --    Garbage_Collected = False
- 
-    --      The system releases all storage on program termination only,
-    --      but not other garbage collection occurs, so finalization calls
-    --      are ommitted only for outer level onjects can be omitted if
-    --      pragma Finalize_Storage_Only is used.
- 
-    --    Garbage_Collected = True
- 
-    --      The system provides full garbage collection, so it is never
-    --      necessary to release storage for controlled objects for which
-    --      a pragma Finalize_Storage_Only is used.
- 
-    Garbage_Collected : constant Boolean := False;
-    --  The storage mode for this system (release on program exit)
- 
-    ---------------------
-    -- Tasking Profile --
-    ---------------------
- 
-    --  In the following sections, constant parameters are defined to
-    --  allow some optimizations and fine tuning within the tasking run time
-    --  based on restrictions on the tasking features.
- 
-    ----------------------
-    -- Locking Strategy --
-    ----------------------
- 
-    Single_Lock : constant Boolean := True;
-    --  Indicates whether a single lock should be used within the tasking
-    --  run-time to protect internal structures. If True, a single lock
-    --  will be used, meaning less locking/unlocking operations, but also
-    --  more global contention. In general, Single_Lock should be set to
-    --  True on single processor machines, and to False to multi-processor
-    --  systems, but this can vary from application to application and also
-    --  depends on the scheduling policy.
- 
-    -------------------
-    -- Task Abortion --
-    -------------------
- 
-    No_Abort : constant Boolean := False;
-    --  This constant indicates whether abort statements and asynchronous
-    --  transfer of control (ATC) are disallowed. If set to True, it is
-    --  assumed that neither construct is used, and the run time does not
-    --  need to defer/undefer abort and check for pending actions at
-    --  completion points. A value of True for No_Abort corresponds to:
-    --  pragma Restrictions (No_Abort_Statements);
-    --  pragma Restrictions (Max_Asynchronous_Select_Nesting => 0);
- 
-    ----------------------
-    -- Dynamic Priority --
-    ----------------------
- 
-    Dynamic_Priority_Support : constant Boolean := True;
-    --  This constant indicates whether dynamic changes of task priorities
-    --  are allowed (True means normal RM mode in which such changes are
-    --  allowed). In particular, if this is False, then we do not need to
-    --  poll for pending base priority changes at every abort completion
-    --  point. A value of False for Dynamic_Priority_Support corresponds
-    --  to pragma Restrictions (No_Dynamic_Priorities);
- 
-    ---------------------
-    -- Task Attributes --
-    ---------------------
- 
-    Default_Attribute_Count : constant := 4;
-    --  Number of pre-allocated Address-sized task attributes stored in the
-    --  task control block.
- 
-    --------------------
-    -- Runtime Traces --
-    --------------------
- 
-    Runtime_Traces : constant Boolean := False;
-    --  This constant indicates whether the runtime outputs traces to a
-    --  predefined output or not (True means that traces are output).
-    --  See System.Traces for more details.
- 
- end System.Parameters;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5vsymbol.adb gcc-4.0.0/gcc/ada/5vsymbol.adb
*** gcc-3.4.3/gcc/ada/5vsymbol.adb	Thu Nov 20 09:53:58 2003
--- gcc-4.0.0/gcc/ada/5vsymbol.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,743 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                              S Y M B O L S                               --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --          Copyright (C) 2003 Free Software Foundation, Inc.               --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the VMS version of this package
- 
- with Ada.Exceptions;    use Ada.Exceptions;
- with Ada.Sequential_IO;
- with Ada.Text_IO;       use Ada.Text_IO;
- 
- package body Symbols is
- 
-    Case_Sensitive  : constant String := "case_sensitive=";
-    Symbol_Vector   : constant String := "SYMBOL_VECTOR=(";
-    Equal_Data      : constant String := "=DATA)";
-    Equal_Procedure : constant String := "=PROCEDURE)";
-    Gsmatch         : constant String := "gsmatch=equal,";
- 
-    Symbol_File_Name : String_Access := null;
-    --  Name of the symbol file
- 
-    Sym_Policy : Policy := Autonomous;
-    --  The symbol policy. Set by Initialize
- 
-    Major_ID : Integer := 1;
-    --  The Major ID. May be modified by Initialize if Library_Version is
-    --  specified or if it is read from the reference symbol file.
- 
-    Soft_Major_ID : Boolean := True;
-    --  False if library version is specified in procedure Initialize.
-    --  When True, Major_ID may be modified if found in the reference symbol
-    --  file.
- 
-    Minor_ID : Natural := 0;
-    --  The Minor ID. May be modified if read from the reference symbol file
- 
-    Soft_Minor_ID : Boolean := True;
-    --  False if symbol policy is Autonomous, if library version is specified
-    --  in procedure Initialize and is not the same as the major ID read from
-    --  the reference symbol file. When True, Minor_ID may be increased in
-    --  Compliant symbol policy.
- 
-    subtype Byte is Character;
-    --  Object files are stream of bytes, but some of these bytes, those for
-    --  the names of the symbols, are ASCII characters.
- 
-    package Byte_IO is new Ada.Sequential_IO (Byte);
-    use Byte_IO;
- 
-    type Number is mod 2**16;
-    --  16 bits unsigned number for number of characters
- 
-    GSD : constant Number := 10;
-    --  Code for the Global Symbol Definition section
- 
-    C_SYM : constant Number := 1;
-    --  Code for a Symbol subsection
- 
-    V_DEF_Mask  : constant Number := 2**1;
-    V_NORM_Mask : constant Number := 2**6;
- 
-    File : Byte_IO.File_Type;
-    --  Each object file is read as a stream of bytes (characters)
- 
-    B : Byte;
- 
-    Number_Of_Characters : Natural := 0;
-    --  The number of characters of each section
- 
-    --  The following variables are used by procedure Process when reading an
-    --  object file.
- 
-    Code   : Number := 0;
-    Length : Natural := 0;
- 
-    Dummy : Number;
- 
-    Nchars : Natural := 0;
-    Flags  : Number  := 0;
- 
-    Symbol : String (1 .. 255);
-    LSymb  : Natural;
- 
-    function Equal (Left, Right : Symbol_Data) return Boolean;
-    --  Test for equality of symbols
- 
-    procedure Get (N : out Number);
-    --  Read two bytes from the object file LSB first as unsigned 16 bit number
- 
-    procedure Get (N : out Natural);
-    --  Read two bytes from the object file, LSByte first, as a Natural
- 
- 
-    function Image (N : Integer) return String;
-    --  Returns the image of N, without the initial space
- 
-    -----------
-    -- Equal --
-    -----------
- 
-    function Equal (Left, Right : Symbol_Data) return Boolean is
-    begin
-       return Left.Name /= null and then
-              Right.Name /= null and then
-              Left.Name.all = Right.Name.all and then
-              Left.Kind = Right.Kind and then
-              Left.Present = Right.Present;
-    end Equal;
- 
-    ---------
-    -- Get --
-    ---------
- 
-    procedure Get (N : out Number) is
-       C : Byte;
-       LSByte : Number;
-    begin
-       Read (File, C);
-       LSByte := Byte'Pos (C);
-       Read (File, C);
-       N := LSByte + (256 * Byte'Pos (C));
-    end Get;
- 
-    procedure Get (N : out Natural) is
-       Result : Number;
-    begin
-       Get (Result);
-       N := Natural (Result);
-    end Get;
- 
-    -----------
-    -- Image --
-    -----------
- 
-    function Image (N : Integer) return String is
-       Result : constant String := N'Img;
-    begin
-       if Result (Result'First) = ' ' then
-          return Result (Result'First + 1 .. Result'Last);
- 
-       else
-          return Result;
-       end if;
-    end Image;
- 
-    ----------------
-    -- Initialize --
-    ----------------
- 
-    procedure Initialize
-      (Symbol_File   : String;
-       Reference     : String;
-       Symbol_Policy : Policy;
-       Quiet         : Boolean;
-       Version       : String;
-       Success       : out Boolean)
-    is
-       File : Ada.Text_IO.File_Type;
-       Line : String (1 .. 1_000);
-       Last : Natural;
- 
-    begin
-       --  Record the symbol file name
- 
-       Symbol_File_Name := new String'(Symbol_File);
- 
-       --  Record the policy
- 
-       Sym_Policy := Symbol_Policy;
- 
-       --  Record the version (Major ID)
- 
-       if Version = "" then
-          Major_ID := 1;
-          Soft_Major_ID := True;
- 
-       else
-          begin
-             Major_ID := Integer'Value (Version);
-             Soft_Major_ID := False;
- 
-             if Major_ID <= 0 then
-                raise Constraint_Error;
-             end if;
- 
-          exception
-             when Constraint_Error =>
-                if not Quiet then
-                   Put_Line ("Version """ & Version & """ is illegal.");
-                   Put_Line ("On VMS, version must be a positive number");
-                end if;
- 
-                Success := False;
-                return;
-          end;
-       end if;
- 
-       Minor_ID := 0;
-       Soft_Minor_ID := Sym_Policy /= Autonomous;
- 
-       --  Empty the symbol tables
- 
-       Symbol_Table.Set_Last (Original_Symbols, 0);
-       Symbol_Table.Set_Last (Complete_Symbols, 0);
- 
-       --  Assume that everything will be fine
- 
-       Success := True;
- 
-       --  If policy is not autonomous, attempt to read the reference file
- 
-       if Sym_Policy /= Autonomous then
-          begin
-             Open (File, In_File, Reference);
- 
-          exception
-             when Ada.Text_IO.Name_Error =>
-                return;
- 
-             when X : others =>
-                if not Quiet then
-                   Put_Line ("could not open """ & Reference & """");
-                   Put_Line (Exception_Message (X));
-                end if;
- 
-                Success := False;
-                return;
-          end;
- 
-          --  Read line by line
- 
-          while not End_Of_File (File) loop
-             Get_Line (File, Line, Last);
- 
-             --  Ignore empty lines
- 
-             if Last = 0 then
-                null;
- 
-             --  Ignore lines starting with "case_sensitive="
- 
-             elsif Last > Case_Sensitive'Length
-               and then Line (1 .. Case_Sensitive'Length) = Case_Sensitive
-             then
-                null;
- 
-             --  Line starting with "SYMBOL_VECTOR=("
- 
-             elsif Last > Symbol_Vector'Length
-               and then Line (1 .. Symbol_Vector'Length) = Symbol_Vector
-             then
- 
-                --  SYMBOL_VECTOR=(<symbol>=DATA)
- 
-                if Last > Symbol_Vector'Length + Equal_Data'Length and then
-                  Line (Last - Equal_Data'Length + 1 .. Last) = Equal_Data
-                then
-                   Symbol_Table.Increment_Last (Original_Symbols);
-                   Original_Symbols.Table
-                     (Symbol_Table.Last (Original_Symbols)) :=
-                       (Name =>
-                          new String'(Line (Symbol_Vector'Length + 1 ..
-                                            Last - Equal_Data'Length)),
-                        Kind => Data,
-                        Present => True);
- 
-                --  SYMBOL_VECTOR=(<symbol>=PROCEDURE)
- 
-                elsif Last > Symbol_Vector'Length + Equal_Procedure'Length
-                  and then
-                   Line (Last - Equal_Procedure'Length + 1 .. Last) =
-                                                               Equal_Procedure
-                then
-                   Symbol_Table.Increment_Last (Original_Symbols);
-                   Original_Symbols.Table
-                     (Symbol_Table.Last (Original_Symbols)) :=
-                     (Name =>
-                        new String'(Line (Symbol_Vector'Length + 1 ..
-                                          Last - Equal_Procedure'Length)),
-                      Kind => Proc,
-                      Present => True);
- 
-                --  Anything else is incorrectly formatted
- 
-                else
-                   if not Quiet then
-                      Put_Line ("symbol file """ & Reference &
-                                """ is incorrectly formatted:");
-                      Put_Line ("""" & Line (1 .. Last) & """");
-                   end if;
- 
-                   Close (File);
-                   Success := False;
-                   return;
-                end if;
- 
-             --  Lines with "gsmatch=equal,<Major_ID>,<Minor_Id>
- 
-             elsif Last > Gsmatch'Length
-               and then Line (1 .. Gsmatch'Length) = Gsmatch
-             then
-                declare
-                   Start  : Positive := Gsmatch'Length + 1;
-                   Finish : Positive := Start;
-                   OK     : Boolean  := True;
-                   ID     : Integer;
- 
-                begin
-                   loop
-                      if Line (Finish) not in '0' .. '9'
-                        or else Finish >= Last - 1
-                      then
-                         OK := False;
-                         exit;
-                      end if;
- 
-                      exit when Line (Finish + 1) = ',';
- 
-                      Finish := Finish + 1;
-                   end loop;
- 
-                   if OK then
-                      ID := Integer'Value (Line (Start .. Finish));
-                      OK := ID /= 0;
- 
-                      --  If Soft_Major_ID is True, it means that
-                      --  Library_Version was not specified.
- 
-                      if Soft_Major_ID then
-                         Major_ID := ID;
- 
-                      --  If the Major ID in the reference file is different
-                      --  from the Library_Version, then the Minor ID will be 0
-                      --  because there is no point in taking the Minor ID in
-                      --  the reference file, or incrementing it. So, we set
-                      --  Soft_Minor_ID to False, so that we don't modify
-                      --  the Minor_ID later.
- 
-                      elsif Major_ID /= ID then
-                         Soft_Minor_ID := False;
-                      end if;
- 
-                      Start := Finish + 2;
-                      Finish := Start;
- 
-                      loop
-                         if Line (Finish) not in '0' .. '9' then
-                            OK := False;
-                            exit;
-                         end if;
- 
-                         exit when Finish = Last;
- 
-                         Finish := Finish + 1;
-                      end loop;
- 
-                      --  Only set Minor_ID if Soft_Minor_ID is True (see above)
- 
-                      if OK and then Soft_Minor_ID then
-                         Minor_ID := Integer'Value (Line (Start .. Finish));
-                      end if;
-                   end if;
- 
-                   --  If OK is not True, that means the line is not correctly
-                   --  formatted.
- 
-                   if not OK then
-                      if not Quiet then
-                         Put_Line ("symbol file """ & Reference &
-                                   """ is incorrectly formatted");
-                         Put_Line ("""" & Line (1 .. Last) & """");
-                      end if;
- 
-                      Close (File);
-                      Success := False;
-                      return;
-                   end if;
-                end;
- 
-             --  Anything else is incorrectly formatted
- 
-             else
-                if not Quiet then
-                   Put_Line ("unexpected line in symbol file """ &
-                             Reference & """");
-                   Put_Line ("""" & Line (1 .. Last) & """");
-                end if;
- 
-                Close (File);
-                Success := False;
-                return;
-             end if;
-          end loop;
- 
-          Close (File);
-       end if;
-    end Initialize;
- 
-    -------------
-    -- Process --
-    -------------
- 
-    procedure Process
-      (Object_File : String;
-       Success     : out Boolean)
-    is
-    begin
-       --  Open the object file with Byte_IO. Return with Success = False if
-       --  this fails.
- 
-       begin
-          Open (File, In_File, Object_File);
-       exception
-          when others =>
-             Put_Line
-               ("*** Unable to open object file """ & Object_File & """");
-             Success := False;
-             return;
-       end;
- 
-       --  Assume that the object file has a correct format
- 
-       Success := True;
- 
-       --  Get the different sections one by one from the object file
- 
-       while not End_Of_File (File) loop
- 
-          Get (Code);
-          Get (Number_Of_Characters);
-          Number_Of_Characters := Number_Of_Characters - 4;
- 
-          --  If this is not a Global Symbol Definition section, skip to the
-          --  next section.
- 
-          if Code /= GSD then
- 
-             for J in 1 .. Number_Of_Characters loop
-                Read (File, B);
-             end loop;
- 
-          else
- 
-             --  Skip over the next 4 bytes
- 
-             Get (Dummy);
-             Get (Dummy);
-             Number_Of_Characters := Number_Of_Characters - 4;
- 
-             --  Get each subsection in turn
- 
-             loop
-                Get (Code);
-                Get (Nchars);
-                Get (Dummy);
-                Get (Flags);
-                Number_Of_Characters := Number_Of_Characters - 8;
-                Nchars := Nchars - 8;
- 
-                --  If this is a symbol and the V_DEF flag is set, get the
-                --  symbol.
- 
-                if Code = C_SYM and then ((Flags and V_DEF_Mask) /= 0) then
-                   --  First, reach the symbol length
- 
-                   for J in 1 .. 25 loop
-                      Read (File, B);
-                      Nchars := Nchars - 1;
-                      Number_Of_Characters := Number_Of_Characters - 1;
-                   end loop;
- 
-                   Length := Byte'Pos (B);
-                   LSymb := 0;
- 
-                   --  Get the symbol characters
- 
-                   for J in 1 .. Nchars loop
-                      Read (File, B);
-                      Number_Of_Characters := Number_Of_Characters - 1;
-                      if Length > 0 then
-                         LSymb := LSymb + 1;
-                         Symbol (LSymb) := B;
-                         Length := Length - 1;
-                      end if;
-                   end loop;
- 
-                   --  Create the new Symbol
- 
-                   declare
-                      S_Data : Symbol_Data;
-                   begin
-                      S_Data.Name := new String'(Symbol (1 .. LSymb));
- 
-                      --  The symbol kind (Data or Procedure) depends on the
-                      --  V_NORM flag.
- 
-                      if (Flags and V_NORM_Mask) = 0 then
-                         S_Data.Kind := Data;
- 
-                      else
-                         S_Data.Kind := Proc;
-                      end if;
- 
-                      --  Put the new symbol in the table
- 
-                      Symbol_Table.Increment_Last (Complete_Symbols);
-                      Complete_Symbols.Table
-                        (Symbol_Table.Last (Complete_Symbols)) := S_Data;
-                   end;
- 
-                else
-                   --  As it is not a symbol subsection, skip to the next
-                   --  subsection.
- 
-                   for J in 1 .. Nchars loop
-                      Read (File, B);
-                      Number_Of_Characters := Number_Of_Characters - 1;
-                   end loop;
-                end if;
- 
-                --  Exit the GSD section when number of characters reaches 0
- 
-                exit when Number_Of_Characters = 0;
-             end loop;
-          end if;
-       end loop;
- 
-       --  The object file has been processed, close it
- 
-       Close (File);
- 
-    exception
-       --  For any exception, output an error message, close the object file
-       --  and return with Success = False.
- 
-       when X : others =>
-          Put_Line ("unexpected exception raised while processing """
-                    & Object_File & """");
-          Put_Line (Exception_Information (X));
-          Close (File);
-          Success := False;
-    end Process;
- 
-    --------------
-    -- Finalize --
-    --------------
- 
-    procedure Finalize
-      (Quiet   : Boolean;
-       Success : out Boolean)
-    is
-       File   : Ada.Text_IO.File_Type;
-       --  The symbol file
- 
-       S_Data : Symbol_Data;
-       --  A symbol
- 
-       Cur    : Positive := 1;
-       --  Most probable index in the Complete_Symbols of the current symbol
-       --  in Original_Symbol.
- 
-       Found  : Boolean;
- 
-    begin
-       --  Nothing to be done if Initialize has never been called
- 
-       if Symbol_File_Name = null then
-          Success := False;
- 
-       else
- 
-          --  First find if the symbols in the reference symbol file are also
-          --  in the object files. Note that this is not done if the policy is
-          --  Autonomous, because no reference symbol file has been read.
- 
-          --  Expect the first symbol in the symbol file to also be the first
-          --  in Complete_Symbols.
- 
-          Cur := 1;
- 
-          for Index_1 in 1 .. Symbol_Table.Last (Original_Symbols) loop
-             S_Data := Original_Symbols.Table (Index_1);
-             Found := False;
- 
-             First_Object_Loop :
-             for Index_2 in Cur .. Symbol_Table.Last (Complete_Symbols) loop
-                if Equal (S_Data, Complete_Symbols.Table (Index_2)) then
-                   Cur := Index_2 + 1;
-                   Complete_Symbols.Table (Index_2).Present := False;
-                   Found := True;
-                   exit First_Object_Loop;
-                end if;
-             end loop First_Object_Loop;
- 
-             --  If the symbol could not be found between Cur and Last, try
-             --  before Cur.
- 
-             if not Found then
-                Second_Object_Loop :
-                for Index_2 in 1 .. Cur - 1 loop
-                   if Equal (S_Data, Complete_Symbols.Table (Index_2)) then
-                      Cur := Index_2 + 1;
-                      Complete_Symbols.Table (Index_2).Present := False;
-                      Found := True;
-                      exit Second_Object_Loop;
-                   end if;
-                end loop Second_Object_Loop;
-             end if;
- 
-             --  If the symbol is not found, mark it as such in the table
- 
-             if not Found then
-                if (not Quiet) or else Sym_Policy = Controlled then
-                   Put_Line ("symbol """ & S_Data.Name.all &
-                             """ is no longer present in the object files");
-                end if;
- 
-                if Sym_Policy = Controlled then
-                   Success := False;
-                   return;
- 
-                elsif Soft_Minor_ID then
-                   Minor_ID := Minor_ID + 1;
-                   Soft_Minor_ID := False;
-                end if;
- 
-                Original_Symbols.Table (Index_1).Present := False;
-                Free (Original_Symbols.Table (Index_1).Name);
- 
-                if Soft_Minor_ID then
-                   Minor_ID := Minor_ID + 1;
-                   Soft_Minor_ID := False;
-                end if;
-             end if;
-          end loop;
- 
-          --  Append additional symbols, if any, to the Original_Symbols table
- 
-          for Index in 1 .. Symbol_Table.Last (Complete_Symbols) loop
-             S_Data := Complete_Symbols.Table (Index);
- 
-             if S_Data.Present then
- 
-                if Sym_Policy = Controlled then
-                   Put_Line ("symbol """ & S_Data.Name.all &
-                             """ is not in the reference symbol file");
-                   Success := False;
-                   return;
- 
-                elsif Soft_Minor_ID then
-                   Minor_ID := Minor_ID + 1;
-                   Soft_Minor_ID := False;
-                end if;
- 
-                Symbol_Table.Increment_Last (Original_Symbols);
-                Original_Symbols.Table (Symbol_Table.Last (Original_Symbols)) :=
-                  S_Data;
-                Complete_Symbols.Table (Index).Present := False;
-             end if;
-          end loop;
- 
-          --  Create the symbol file
- 
-          Create (File, Ada.Text_IO.Out_File, Symbol_File_Name.all);
- 
-          Put (File, Case_Sensitive);
-          Put_Line (File, "yes");
- 
-          --  Put a line in the symbol file for each symbol in the symbol table
- 
-          for Index in 1 .. Symbol_Table.Last (Original_Symbols) loop
-             if Original_Symbols.Table (Index).Present then
-                Put (File, Symbol_Vector);
-                Put (File, Original_Symbols.Table (Index).Name.all);
- 
-                if Original_Symbols.Table (Index).Kind = Data then
-                   Put_Line (File, Equal_Data);
- 
-                else
-                   Put_Line (File, Equal_Procedure);
-                end if;
- 
-                Free (Original_Symbols.Table (Index).Name);
-             end if;
-          end loop;
- 
-          Put (File, Case_Sensitive);
-          Put_Line (File, "NO");
- 
-          --  Put the version IDs
- 
-          Put (File, Gsmatch);
-          Put (File, Image (Major_ID));
-          Put (File, ',');
-          Put_Line  (File, Image (Minor_ID));
- 
-          --  And we are done
- 
-          Close (File);
- 
-          --  Reset both tables
- 
-          Symbol_Table.Set_Last (Original_Symbols, 0);
-          Symbol_Table.Set_Last (Complete_Symbols, 0);
- 
-          --  Clear the symbol file name
- 
-          Free (Symbol_File_Name);
- 
-          Success := True;
-       end if;
- 
-    exception
-       when X : others =>
-          Put_Line ("unexpected exception raised while finalizing """
-                    & Symbol_File_Name.all & """");
-          Put_Line (Exception_Information (X));
-          Success := False;
-    end Finalize;
- 
- end Symbols;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5vsystem.ads gcc-4.0.0/gcc/ada/5vsystem.ads
*** gcc-3.4.3/gcc/ada/5vsystem.ads	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5vsystem.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,236 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                        GNAT RUN-TIME COMPONENTS                          --
- --                                                                          --
- --                               S Y S T E M                                --
- --                                                                          --
- --                                 S p e c                                  --
- --                       (OpenVMS DEC Threads Version)                      --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the  contents of the part following the private keyword. --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- package System is
- pragma Pure (System);
- --  Note that we take advantage of the implementation permission to
- --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
- 
-    type Name is (SYSTEM_NAME_GNAT);
-    System_Name : constant Name := SYSTEM_NAME_GNAT;
- 
-    --  System-Dependent Named Numbers
- 
-    Min_Int               : constant := Long_Long_Integer'First;
-    Max_Int               : constant := Long_Long_Integer'Last;
- 
-    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
-    Max_Nonbinary_Modulus : constant := Integer'Last;
- 
-    Max_Base_Digits       : constant := Long_Long_Float'Digits;
-    Max_Digits            : constant := Long_Long_Float'Digits;
- 
-    Max_Mantissa          : constant := 63;
-    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
- 
-    Tick                  : constant := 0.01;
- 
-    --  Storage-related Declarations
- 
-    type Address is private;
-    Null_Address : constant Address;
- 
-    Storage_Unit : constant := 8;
-    Word_Size    : constant := 32;
-    Memory_Size  : constant := 2 ** 32;
- 
-    --  Address comparison
- 
-    function "<"  (Left, Right : Address) return Boolean;
-    function "<=" (Left, Right : Address) return Boolean;
-    function ">"  (Left, Right : Address) return Boolean;
-    function ">=" (Left, Right : Address) return Boolean;
-    function "="  (Left, Right : Address) return Boolean;
- 
-    pragma Import (Intrinsic, "<");
-    pragma Import (Intrinsic, "<=");
-    pragma Import (Intrinsic, ">");
-    pragma Import (Intrinsic, ">=");
-    pragma Import (Intrinsic, "=");
- 
-    --  Other System-Dependent Declarations
- 
-    type Bit_Order is (High_Order_First, Low_Order_First);
-    Default_Bit_Order : constant Bit_Order := Low_Order_First;
- 
-    --  Priority-related Declarations (RM D.1)
- 
-    Max_Priority           : constant Positive := 30;
-    Max_Interrupt_Priority : constant Positive := 31;
- 
-    subtype Any_Priority       is Integer      range  0 .. 31;
-    subtype Priority           is Any_Priority range  0 .. 30;
-    subtype Interrupt_Priority is Any_Priority range 31 .. 31;
- 
-    Default_Priority : constant Priority := 15;
- 
- private
- 
-    type Address is mod Memory_Size;
-    Null_Address : constant Address := 0;
- 
-    --------------------------------------
-    -- System Implementation Parameters --
-    --------------------------------------
- 
-    --  These parameters provide information about the target that is used
-    --  by the compiler. They are in the private part of System, where they
-    --  can be accessed using the special circuitry in the Targparm unit
-    --  whose source should be consulted for more detailed descriptions
-    --  of the individual switch values.
- 
-    AAMP                      : constant Boolean := False;
-    Backend_Divide_Checks     : constant Boolean := False;
-    Backend_Overflow_Checks   : constant Boolean := False;
-    Command_Line_Args         : constant Boolean := True;
-    Configurable_Run_Time     : constant Boolean := False;
-    Denorm                    : constant Boolean := False;
-    Duration_32_Bits          : constant Boolean := False;
-    Exit_Status_Supported     : constant Boolean := True;
-    Fractional_Fixed_Ops      : constant Boolean := False;
-    Frontend_Layout           : constant Boolean := False;
-    Functions_Return_By_DSP   : constant Boolean := False;
-    Machine_Overflows         : constant Boolean := False;
-    Machine_Rounds            : constant Boolean := True;
-    OpenVMS                   : constant Boolean := True;
-    Signed_Zeros              : constant Boolean := True;
-    Stack_Check_Default       : constant Boolean := True;
-    Stack_Check_Probes        : constant Boolean := True;
-    Support_64_Bit_Divides    : constant Boolean := True;
-    Support_Aggregates        : constant Boolean := True;
-    Support_Composite_Assign  : constant Boolean := True;
-    Support_Composite_Compare : constant Boolean := True;
-    Support_Long_Shifts       : constant Boolean := True;
-    Suppress_Standard_Library : constant Boolean := False;
-    Use_Ada_Main_Program_Name : constant Boolean := False;
-    ZCX_By_Default            : constant Boolean := True;
-    GCC_ZCX_Support           : constant Boolean := False;
-    Front_End_ZCX_Support     : constant Boolean := True;
- 
-    --  Obsolete entries, to be removed eventually (bootstrap issues!)
- 
-    High_Integrity_Mode       : constant Boolean := False;
-    Long_Shifts_Inlined       : constant Boolean := False;
- 
-    --------------------------
-    -- Underlying Priorities --
-    ---------------------------
- 
-    --  Important note: this section of the file must come AFTER the
-    --  definition of the system implementation parameters to ensure
-    --  that the value of these parameters is available for analysis
-    --  of the declarations here (using Rtsfind at compile time).
- 
-    --  The underlying priorities table provides a generalized mechanism
-    --  for mapping from Ada priorities to system priorities. In some
-    --  cases a 1-1 mapping is not the convenient or optimal choice.
- 
-    --  For DEC Threads OpenVMS, we use the full range of 31 priorities
-    --  in the Ada model, but map them by compression onto the more limited
-    --  range of priorities available in OpenVMS.
- 
-    --  To replace the default values of the Underlying_Priorities mapping,
-    --  copy this source file into your build directory, edit the file to
-    --  reflect your desired behavior, and recompile with the command:
- 
-    --     $ gcc -c -O3 -gnatpgn system.ads
- 
-    --  then recompile the run-time parts that depend on this package:
- 
-    --     $ gnatmake -a -gnatn -O3 <your application>
- 
-    --  then force rebuilding your application if you need different options:
- 
-    --     $ gnatmake -f <your options> <your application>
- 
-    type Priorities_Mapping is array (Any_Priority) of Integer;
-    pragma Suppress_Initialization (Priorities_Mapping);
-    --  Suppress initialization in case gnat.adc specifies Normalize_Scalars
- 
-    Underlying_Priorities : constant Priorities_Mapping :=
- 
-      (Priority'First => 16,
- 
-       1  => 17,
-       2  => 18,
-       3  => 18,
-       4  => 18,
-       5  => 18,
-       6  => 19,
-       7  => 19,
-       8  => 19,
-       9  => 20,
-       10 => 20,
-       11 => 21,
-       12 => 21,
-       13 => 22,
-       14 => 23,
- 
-       Default_Priority   => 24,
- 
-       16 => 25,
-       17 => 25,
-       18 => 25,
-       19 => 26,
-       20 => 26,
-       21 => 26,
-       22 => 27,
-       23 => 27,
-       24 => 27,
-       25 => 28,
-       26 => 28,
-       27 => 29,
-       28 => 29,
-       29 => 30,
- 
-       Priority'Last      => 30,
- 
-       Interrupt_Priority => 31);
- 
-    ----------------------------
-    -- Special VMS Interfaces --
-    ----------------------------
- 
-    procedure Lib_Stop (I : in Integer);
-    pragma Interface (C, Lib_Stop);
-    pragma Import_Procedure (Lib_Stop, "LIB$STOP", Mechanism => (Value));
-    --  Interface to VMS condition handling. Used by RTSfind and pragma
-    --  {Import,Export}_Exception. Put here because this is the only
-    --  VMS specific package that doesn't drag in tasking.
- 
- end System;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5vtaprop.adb gcc-4.0.0/gcc/ada/5vtaprop.adb
*** gcc-3.4.3/gcc/ada/5vtaprop.adb	Mon Jan  5 15:20:43 2004
--- gcc-4.0.0/gcc/ada/5vtaprop.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,1006 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --     S Y S T E M . T A S K _ P R I M I T I V E S . O P E R A T I O N S    --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --         Copyright (C) 1992-2004, Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a OpenVMS/Alpha version of this package
- 
- --  This package contains all the GNULL primitives that interface directly
- --  with the underlying OS.
- 
- pragma Polling (Off);
- --  Turn off polling, we do not want ATC polling to take place during
- --  tasking operations. It causes infinite loops and other problems.
- 
- with System.Tasking.Debug;
- --  used for Known_Tasks
- 
- with Interfaces.C;
- --  used for int
- --           size_t
- 
- with System.Parameters;
- --  used for Size_Type
- 
- with System.Tasking;
- --  used for Ada_Task_Control_Block
- --           Task_ID
- 
- with System.Soft_Links;
- --  used for Defer/Undefer_Abort
- --           Set_Exc_Stack_Addr
- 
- --  Note that we do not use System.Tasking.Initialization directly since
- --  this is a higher level package that we shouldn't depend on. For example
- --  when using the restricted run time, it is replaced by
- --  System.Tasking.Restricted.Initialization
- 
- with System.OS_Primitives;
- --  used for Delay_Modes
- 
- with Unchecked_Conversion;
- with Unchecked_Deallocation;
- 
- package body System.Task_Primitives.Operations is
- 
-    use System.Tasking.Debug;
-    use System.Tasking;
-    use Interfaces.C;
-    use System.OS_Interface;
-    use System.Parameters;
-    use System.OS_Primitives;
-    use type System.OS_Primitives.OS_Time;
- 
-    package SSL renames System.Soft_Links;
- 
-    ------------------
-    --  Local Data  --
-    ------------------
- 
-    --  The followings are logically constants, but need to be initialized
-    --  at run time.
- 
-    Single_RTS_Lock : aliased RTS_Lock;
-    --  This is a lock to allow only one thread of control in the RTS at
-    --  a time; it is used to execute in mutual exclusion from all other tasks.
-    --  Used mainly in Single_Lock mode, but also to protect All_Tasks_List
- 
-    ATCB_Key : aliased pthread_key_t;
-    --  Key used to find the Ada Task_ID associated with a thread
- 
-    Environment_Task_ID : Task_ID;
-    --  A variable to hold Task_ID for the environment task.
- 
-    Time_Slice_Val : Integer;
-    pragma Import (C, Time_Slice_Val, "__gl_time_slice_val");
- 
-    Dispatching_Policy : Character;
-    pragma Import (C, Dispatching_Policy, "__gl_task_dispatching_policy");
- 
-    FIFO_Within_Priorities : constant Boolean := Dispatching_Policy = 'F';
-    --  Indicates whether FIFO_Within_Priorities is set.
- 
-    Foreign_Task_Elaborated : aliased Boolean := True;
-    --  Used to identified fake tasks (i.e., non-Ada Threads).
- 
-    --------------------
-    -- Local Packages --
-    --------------------
- 
-    package Specific is
- 
-       procedure Initialize (Environment_Task : Task_ID);
-       pragma Inline (Initialize);
-       --  Initialize various data needed by this package.
- 
-       function Is_Valid_Task return Boolean;
-       pragma Inline (Is_Valid_Task);
-       --  Does executing thread have a TCB?
- 
-       procedure Set (Self_Id : Task_ID);
-       pragma Inline (Set);
-       --  Set the self id for the current task
- 
-       function Self return Task_ID;
-       pragma Inline (Self);
-       --  Return a pointer to the Ada Task Control Block of the calling task
- 
-    end Specific;
- 
-    package body Specific is separate;
-    --  The body of this package is target specific.
- 
-    ---------------------------------
-    -- Support for foreign threads --
-    ---------------------------------
- 
-    function Register_Foreign_Thread (Thread : Thread_Id) return Task_ID;
-    --  Allocate and Initialize a new ATCB for the current Thread
- 
-    function Register_Foreign_Thread
-      (Thread : Thread_Id) return Task_ID is separate;
- 
-    -----------------------
-    -- Local Subprograms --
-    -----------------------
- 
-    function To_Task_ID is new Unchecked_Conversion (System.Address, Task_ID);
- 
-    function To_Address is new Unchecked_Conversion (Task_ID, System.Address);
- 
-    procedure Timer_Sleep_AST (ID : Address);
-    --  Signal the condition variable when AST fires.
- 
-    procedure Timer_Sleep_AST (ID : Address) is
-       Result  : Interfaces.C.int;
-       Self_ID : Task_ID := To_Task_ID (ID);
-    begin
-       Self_ID.Common.LL.AST_Pending := False;
-       Result := pthread_cond_signal_int_np (Self_ID.Common.LL.CV'Access);
-       pragma Assert (Result = 0);
-    end Timer_Sleep_AST;
- 
-    -----------------
-    -- Stack_Guard --
-    -----------------
- 
-    --  The underlying thread system sets a guard page at the
-    --  bottom of a thread stack, so nothing is needed.
-    --  ??? Check the comment above
- 
-    procedure Stack_Guard (T : ST.Task_ID; On : Boolean) is
-       pragma Unreferenced (T);
-       pragma Unreferenced (On);
-    begin
-       null;
-    end Stack_Guard;
- 
-    --------------------
-    -- Get_Thread_Id  --
-    --------------------
- 
-    function Get_Thread_Id (T : ST.Task_ID) return OSI.Thread_Id is
-    begin
-       return T.Common.LL.Thread;
-    end Get_Thread_Id;
- 
-    ----------
-    -- Self --
-    ----------
- 
-    function Self return Task_ID renames Specific.Self;
- 
-    ---------------------
-    -- Initialize_Lock --
-    ---------------------
- 
-    --  Note: mutexes and cond_variables needed per-task basis are
-    --  initialized in Initialize_TCB and the Storage_Error is
-    --  handled. Other mutexes (such as RTS_Lock, Memory_Lock...)
-    --  used in RTS is initialized before any status change of RTS.
-    --  Therefore rasing Storage_Error in the following routines
-    --  should be able to be handled safely.
- 
-    procedure Initialize_Lock (Prio : System.Any_Priority; L : access Lock) is
-       Attributes : aliased pthread_mutexattr_t;
-       Result     : Interfaces.C.int;
- 
-    begin
-       Result := pthread_mutexattr_init (Attributes'Access);
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result = ENOMEM then
-          raise Storage_Error;
-       end if;
- 
-       L.Prio_Save := 0;
-       L.Prio := Interfaces.C.int (Prio);
- 
-       Result := pthread_mutex_init (L.L'Access, Attributes'Access);
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result = ENOMEM then
-          raise Storage_Error;
-       end if;
- 
-       Result := pthread_mutexattr_destroy (Attributes'Access);
-       pragma Assert (Result = 0);
-    end Initialize_Lock;
- 
-    procedure Initialize_Lock (L : access RTS_Lock; Level : Lock_Level) is
-       pragma Unreferenced (Level);
- 
-       Attributes : aliased pthread_mutexattr_t;
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := pthread_mutexattr_init (Attributes'Access);
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result = ENOMEM then
-          raise Storage_Error;
-       end if;
- 
- --      Don't use, see comment in s-osinte.ads about ERRORCHECK mutexes???
- --      Result := pthread_mutexattr_settype_np
- --        (Attributes'Access, PTHREAD_MUTEX_ERRORCHECK_NP);
- --      pragma Assert (Result = 0);
- 
- --      Result := pthread_mutexattr_setprotocol
- --        (Attributes'Access, PTHREAD_PRIO_PROTECT);
- --      pragma Assert (Result = 0);
- 
- --      Result := pthread_mutexattr_setprioceiling
- --         (Attributes'Access, Interfaces.C.int (System.Any_Priority'Last));
- --      pragma Assert (Result = 0);
- 
-       Result := pthread_mutex_init (L, Attributes'Access);
- 
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result = ENOMEM then
-          raise Storage_Error;
-       end if;
- 
-       Result := pthread_mutexattr_destroy (Attributes'Access);
-       pragma Assert (Result = 0);
-    end Initialize_Lock;
- 
-    -------------------
-    -- Finalize_Lock --
-    -------------------
- 
-    procedure Finalize_Lock (L : access Lock) is
-       Result : Interfaces.C.int;
-    begin
-       Result := pthread_mutex_destroy (L.L'Access);
-       pragma Assert (Result = 0);
-    end Finalize_Lock;
- 
-    procedure Finalize_Lock (L : access RTS_Lock) is
-       Result : Interfaces.C.int;
-    begin
-       Result := pthread_mutex_destroy (L);
-       pragma Assert (Result = 0);
-    end Finalize_Lock;
- 
-    ----------------
-    -- Write_Lock --
-    ----------------
- 
-    procedure Write_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
-       Self_ID        : constant Task_ID := Self;
-       All_Tasks_Link : constant Task_ID := Self.Common.All_Tasks_Link;
-       Current_Prio   : System.Any_Priority;
-       Result         : Interfaces.C.int;
- 
-    begin
-       Current_Prio := Get_Priority (Self_ID);
- 
-       --  If there is no other tasks, no need to check priorities
- 
-       if All_Tasks_Link /= Null_Task
-         and then L.Prio < Interfaces.C.int (Current_Prio)
-       then
-          Ceiling_Violation := True;
-          return;
-       end if;
- 
-       Result := pthread_mutex_lock (L.L'Access);
-       pragma Assert (Result = 0);
- 
-       Ceiling_Violation := False;
- --  Why is this commented out ???
- --      L.Prio_Save := Interfaces.C.int (Current_Prio);
- --      Set_Priority (Self_ID, System.Any_Priority (L.Prio));
-    end Write_Lock;
- 
-    procedure Write_Lock
-      (L           : access RTS_Lock;
-       Global_Lock : Boolean := False)
-    is
-       Result : Interfaces.C.int;
-    begin
-       if not Single_Lock or else Global_Lock then
-          Result := pthread_mutex_lock (L);
-          pragma Assert (Result = 0);
-       end if;
-    end Write_Lock;
- 
-    procedure Write_Lock (T : Task_ID) is
-       Result : Interfaces.C.int;
-    begin
-       if not Single_Lock then
-          Result := pthread_mutex_lock (T.Common.LL.L'Access);
-          pragma Assert (Result = 0);
-       end if;
-    end Write_Lock;
- 
-    ---------------
-    -- Read_Lock --
-    ---------------
- 
-    procedure Read_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
-    begin
-       Write_Lock (L, Ceiling_Violation);
-    end Read_Lock;
- 
-    ------------
-    -- Unlock --
-    ------------
- 
-    procedure Unlock (L : access Lock) is
-       Result : Interfaces.C.int;
-    begin
-       Result := pthread_mutex_unlock (L.L'Access);
-       pragma Assert (Result = 0);
-    end Unlock;
- 
-    procedure Unlock (L : access RTS_Lock; Global_Lock : Boolean := False) is
-       Result : Interfaces.C.int;
-    begin
-       if not Single_Lock or else Global_Lock then
-          Result := pthread_mutex_unlock (L);
-          pragma Assert (Result = 0);
-       end if;
-    end Unlock;
- 
-    procedure Unlock (T : Task_ID) is
-       Result : Interfaces.C.int;
-    begin
-       if not Single_Lock then
-          Result := pthread_mutex_unlock (T.Common.LL.L'Access);
-          pragma Assert (Result = 0);
-       end if;
-    end Unlock;
- 
-    -----------
-    -- Sleep --
-    -----------
- 
-    procedure Sleep
-      (Self_ID : Task_ID;
-       Reason  : System.Tasking.Task_States)
-    is
-       pragma Unreferenced (Reason);
-       Result : Interfaces.C.int;
- 
-    begin
-       if Single_Lock then
-          Result := pthread_cond_wait
-            (Self_ID.Common.LL.CV'Access, Single_RTS_Lock'Access);
-       else
-          Result := pthread_cond_wait
-            (Self_ID.Common.LL.CV'Access, Self_ID.Common.LL.L'Access);
-       end if;
- 
-       --  EINTR is not considered a failure
- 
-       pragma Assert (Result = 0 or else Result = EINTR);
- 
-       if Self_ID.Deferral_Level = 0
-         and then Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level
-       then
-          Unlock (Self_ID);
-          raise Standard'Abort_Signal;
-       end if;
-    end Sleep;
- 
-    -----------------
-    -- Timed_Sleep --
-    -----------------
- 
-    procedure Timed_Sleep
-      (Self_ID  : Task_ID;
-       Time     : Duration;
-       Mode     : ST.Delay_Modes;
-       Reason   : System.Tasking.Task_States;
-       Timedout : out Boolean;
-       Yielded  : out Boolean)
-    is
-       pragma Unreferenced (Reason);
- 
-       Sleep_Time : OS_Time;
-       Result     : Interfaces.C.int;
-       Status     : Cond_Value_Type;
- 
-       --  The body below requires more comments ???
- 
-    begin
-       Timedout := False;
-       Yielded := False;
- 
-       Sleep_Time := To_OS_Time (Time, Mode);
- 
-       if Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level
-         or else Self_ID.Pending_Priority_Change
-       then
-          return;
-       end if;
- 
-       Self_ID.Common.LL.AST_Pending := True;
- 
-       Sys_Setimr
-        (Status, 0, Sleep_Time,
-         Timer_Sleep_AST'Access, To_Address (Self_ID), 0);
- 
-       if (Status and 1) /= 1 then
-          raise Storage_Error;
-       end if;
- 
-       if Single_Lock then
-          Result := pthread_cond_wait
-            (Self_ID.Common.LL.CV'Access, Single_RTS_Lock'Access);
-          pragma Assert (Result = 0);
- 
-       else
-          Result := pthread_cond_wait
-            (Self_ID.Common.LL.CV'Access, Self_ID.Common.LL.L'Access);
-          pragma Assert (Result = 0);
-       end if;
- 
-       Yielded := True;
- 
-       if not Self_ID.Common.LL.AST_Pending then
-          Timedout := True;
-       else
-          Sys_Cantim (Status, To_Address (Self_ID), 0);
-          pragma Assert ((Status and 1) = 1);
-       end if;
-    end Timed_Sleep;
- 
-    -----------------
-    -- Timed_Delay --
-    -----------------
- 
-    procedure Timed_Delay
-      (Self_ID : Task_ID;
-       Time    : Duration;
-       Mode    : ST.Delay_Modes)
-    is
-       Sleep_Time : OS_Time;
-       Result     : Interfaces.C.int;
-       Status     : Cond_Value_Type;
-       Yielded    : Boolean := False;
- 
-    begin
-       --  Only the little window between deferring abort and
-       --  locking Self_ID is the reason we need to
-       --  check for pending abort and priority change below!
- 
-       if Single_Lock then
-          Lock_RTS;
-       end if;
- 
-       --  More comments required in body below ???
- 
-       SSL.Abort_Defer.all;
-       Write_Lock (Self_ID);
- 
-       if Time /= 0.0 or else Mode /= Relative then
-          Sleep_Time := To_OS_Time (Time, Mode);
- 
-          if Mode = Relative or else OS_Clock < Sleep_Time then
-             Self_ID.Common.State := Delay_Sleep;
-             Self_ID.Common.LL.AST_Pending := True;
- 
-             Sys_Setimr
-              (Status, 0, Sleep_Time,
-               Timer_Sleep_AST'Access, To_Address (Self_ID), 0);
- 
-             if (Status and 1) /= 1 then
-                raise Storage_Error;
-             end if;
- 
-             loop
-                if Self_ID.Pending_Priority_Change then
-                   Self_ID.Pending_Priority_Change := False;
-                   Self_ID.Common.Base_Priority := Self_ID.New_Base_Priority;
-                   Set_Priority (Self_ID, Self_ID.Common.Base_Priority);
-                end if;
- 
-                if Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level then
-                   Sys_Cantim (Status, To_Address (Self_ID), 0);
-                   pragma Assert ((Status and 1) = 1);
-                   exit;
-                end if;
- 
-                if Single_Lock then
-                   Result := pthread_cond_wait
-                     (Self_ID.Common.LL.CV'Access, Single_RTS_Lock'Access);
-                   pragma Assert (Result = 0);
-                else
-                   Result := pthread_cond_wait
-                     (Self_ID.Common.LL.CV'Access, Self_ID.Common.LL.L'Access);
-                   pragma Assert (Result = 0);
-                end if;
- 
-                Yielded := True;
- 
-                exit when not Self_ID.Common.LL.AST_Pending;
-             end loop;
- 
-             Self_ID.Common.State := Runnable;
-          end if;
-       end if;
- 
-       Unlock (Self_ID);
- 
-       if Single_Lock then
-          Unlock_RTS;
-       end if;
- 
-       if not Yielded then
-          Result := sched_yield;
-          pragma Assert (Result = 0);
-       end if;
- 
-       SSL.Abort_Undefer.all;
-    end Timed_Delay;
- 
-    ---------------------
-    -- Monotonic_Clock --
-    ---------------------
- 
-    function Monotonic_Clock return Duration
-      renames System.OS_Primitives.Monotonic_Clock;
- 
-    -------------------
-    -- RT_Resolution --
-    -------------------
- 
-    function RT_Resolution return Duration is
-    begin
-       return 10#1.0#E-3;
-    end RT_Resolution;
- 
-    ------------
-    -- Wakeup --
-    ------------
- 
-    procedure Wakeup (T : Task_ID; Reason : System.Tasking.Task_States) is
-       pragma Unreferenced (Reason);
- 
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := pthread_cond_signal (T.Common.LL.CV'Access);
-       pragma Assert (Result = 0);
-    end Wakeup;
- 
-    -----------
-    -- Yield --
-    -----------
- 
-    procedure Yield (Do_Yield : Boolean := True) is
-       Result : Interfaces.C.int;
-       pragma Unreferenced (Result);
-    begin
-       if Do_Yield then
-          Result := sched_yield;
-       end if;
-    end Yield;
- 
-    ------------------
-    -- Set_Priority --
-    ------------------
- 
-    procedure Set_Priority
-      (T                   : Task_ID;
-       Prio                : System.Any_Priority;
-       Loss_Of_Inheritance : Boolean := False)
-    is
-       pragma Unreferenced (Loss_Of_Inheritance);
- 
-       Result : Interfaces.C.int;
-       Param  : aliased struct_sched_param;
- 
-    begin
-       T.Common.Current_Priority := Prio;
-       Param.sched_priority := Interfaces.C.int (Underlying_Priorities (Prio));
- 
-       if Time_Slice_Val > 0 then
-          Result := pthread_setschedparam
-            (T.Common.LL.Thread, SCHED_RR, Param'Access);
- 
-       elsif FIFO_Within_Priorities or else Time_Slice_Val = 0 then
-          Result := pthread_setschedparam
-            (T.Common.LL.Thread, SCHED_FIFO, Param'Access);
- 
-       else
-          --  SCHED_OTHER priorities are restricted to the range 8 - 15.
-          --  Since the translation from Underlying priorities results
-          --  in a range of 16 - 31, dividing by 2 gives the correct result.
- 
-          Param.sched_priority := Param.sched_priority / 2;
-          Result := pthread_setschedparam
-            (T.Common.LL.Thread, SCHED_OTHER, Param'Access);
-       end if;
- 
-       pragma Assert (Result = 0);
-    end Set_Priority;
- 
-    ------------------
-    -- Get_Priority --
-    ------------------
- 
-    function Get_Priority (T : Task_ID) return System.Any_Priority is
-    begin
-       return T.Common.Current_Priority;
-    end Get_Priority;
- 
-    ----------------
-    -- Enter_Task --
-    ----------------
- 
-    procedure Enter_Task (Self_ID : Task_ID) is
-    begin
-       Self_ID.Common.LL.Thread := pthread_self;
- 
-       Specific.Set (Self_ID);
- 
-       Lock_RTS;
- 
-       for J in Known_Tasks'Range loop
-          if Known_Tasks (J) = null then
-             Known_Tasks (J) := Self_ID;
-             Self_ID.Known_Tasks_Index := J;
-             exit;
-          end if;
-       end loop;
- 
-       Unlock_RTS;
-    end Enter_Task;
- 
-    --------------
-    -- New_ATCB --
-    --------------
- 
-    function New_ATCB (Entry_Num : Task_Entry_Index) return Task_ID is
-    begin
-       return new Ada_Task_Control_Block (Entry_Num);
-    end New_ATCB;
- 
-    -------------------
-    -- Is_Valid_Task --
-    -------------------
- 
-    function Is_Valid_Task return Boolean renames Specific.Is_Valid_Task;
- 
-    -----------------------------
-    -- Register_Foreign_Thread --
-    -----------------------------
- 
-    function Register_Foreign_Thread return Task_ID is
-    begin
-       if Is_Valid_Task then
-          return Self;
-       else
-          return Register_Foreign_Thread (pthread_self);
-       end if;
-    end Register_Foreign_Thread;
- 
-    ----------------------
-    --  Initialize_TCB  --
-    ----------------------
- 
-    procedure Initialize_TCB (Self_ID : Task_ID; Succeeded : out Boolean) is
-       Mutex_Attr : aliased pthread_mutexattr_t;
-       Result     : Interfaces.C.int;
-       Cond_Attr  : aliased pthread_condattr_t;
- 
-    begin
-       --  More comments required in body below ???
- 
-       if not Single_Lock then
-          Result := pthread_mutexattr_init (Mutex_Attr'Access);
-          pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-          if Result = 0 then
-             Result := pthread_mutex_init (Self_ID.Common.LL.L'Access,
-               Mutex_Attr'Access);
-             pragma Assert (Result = 0 or else Result = ENOMEM);
-          end if;
- 
-          if Result /= 0 then
-             Succeeded := False;
-             return;
-          end if;
- 
-          Result := pthread_mutexattr_destroy (Mutex_Attr'Access);
-          pragma Assert (Result = 0);
-       end if;
- 
-       Result := pthread_condattr_init (Cond_Attr'Access);
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result = 0 then
-          Result := pthread_cond_init (Self_ID.Common.LL.CV'Access,
-            Cond_Attr'Access);
-          pragma Assert (Result = 0 or else Result = ENOMEM);
-       end if;
- 
-       if Result = 0 then
-          Succeeded := True;
-          Self_ID.Common.LL.Exc_Stack_Ptr := new Exc_Stack_T;
-          SSL.Set_Exc_Stack_Addr
-            (To_Address (Self_ID),
-             Self_ID.Common.LL.Exc_Stack_Ptr (Exc_Stack_T'Last)'Address);
- 
-       else
-          if not Single_Lock then
-             Result := pthread_mutex_destroy (Self_ID.Common.LL.L'Access);
-             pragma Assert (Result = 0);
-          end if;
- 
-          Succeeded := False;
-       end if;
- 
-       Result := pthread_condattr_destroy (Cond_Attr'Access);
-       pragma Assert (Result = 0);
-    end Initialize_TCB;
- 
-    -----------------
-    -- Create_Task --
-    -----------------
- 
-    procedure Create_Task
-      (T          : Task_ID;
-       Wrapper    : System.Address;
-       Stack_Size : System.Parameters.Size_Type;
-       Priority   : System.Any_Priority;
-       Succeeded  : out Boolean)
-    is
-       Attributes          : aliased pthread_attr_t;
-       Adjusted_Stack_Size : Interfaces.C.size_t;
-       Result              : Interfaces.C.int;
- 
-       function Thread_Body_Access is new
-         Unchecked_Conversion (System.Address, Thread_Body);
- 
-    begin
-       if Stack_Size = Unspecified_Size then
-          Adjusted_Stack_Size := Interfaces.C.size_t (Default_Stack_Size);
- 
-       elsif Stack_Size < Minimum_Stack_Size then
-          Adjusted_Stack_Size := Interfaces.C.size_t (Minimum_Stack_Size);
- 
-       else
-          Adjusted_Stack_Size := Interfaces.C.size_t (Stack_Size);
-       end if;
- 
-       --  Since the initial signal mask of a thread is inherited from the
-       --  creator, we need to set our local signal mask mask all signals
-       --  during the creation operation, to make sure the new thread is
-       --  not disturbed by signals before it has set its own Task_ID.
- 
-       Result := pthread_attr_init (Attributes'Access);
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result /= 0 then
-          Succeeded := False;
-          return;
-       end if;
- 
-       Result := pthread_attr_setdetachstate
-         (Attributes'Access, PTHREAD_CREATE_DETACHED);
-       pragma Assert (Result = 0);
- 
-       Result := pthread_attr_setstacksize
-         (Attributes'Access, Adjusted_Stack_Size);
-       pragma Assert (Result = 0);
- 
-       --  This call may be unnecessary, not sure. ???
- 
-       Result :=
-         pthread_attr_setinheritsched
-           (Attributes'Access, PTHREAD_EXPLICIT_SCHED);
-       pragma Assert (Result = 0);
- 
-       Result := pthread_create
-         (T.Common.LL.Thread'Access,
-          Attributes'Access,
-          Thread_Body_Access (Wrapper),
-          To_Address (T));
- 
-       --  ENOMEM is a valid run-time error.  Don't shut down.
- 
-       pragma Assert (Result = 0
-         or else Result = EAGAIN or else Result = ENOMEM);
- 
-       Succeeded := Result = 0;
- 
-       Result := pthread_attr_destroy (Attributes'Access);
-       pragma Assert (Result = 0);
- 
-       if Succeeded then
-          Set_Priority (T, Priority);
-       end if;
-    end Create_Task;
- 
-    ------------------
-    -- Finalize_TCB --
-    ------------------
- 
-    procedure Finalize_TCB (T : Task_ID) is
-       Result  : Interfaces.C.int;
-       Tmp     : Task_ID := T;
-       Is_Self : constant Boolean := T = Self;
- 
-       procedure Free is new
-         Unchecked_Deallocation (Ada_Task_Control_Block, Task_ID);
- 
-       procedure Free is new Unchecked_Deallocation
-        (Exc_Stack_T, Exc_Stack_Ptr_T);
- 
-    begin
-       if not Single_Lock then
-          Result := pthread_mutex_destroy (T.Common.LL.L'Access);
-          pragma Assert (Result = 0);
-       end if;
- 
-       Result := pthread_cond_destroy (T.Common.LL.CV'Access);
-       pragma Assert (Result = 0);
- 
-       if T.Known_Tasks_Index /= -1 then
-          Known_Tasks (T.Known_Tasks_Index) := null;
-       end if;
- 
-       Free (T.Common.LL.Exc_Stack_Ptr);
- 
-       Free (Tmp);
- 
-       if Is_Self then
-          Result := pthread_setspecific (ATCB_Key, System.Null_Address);
-          pragma Assert (Result = 0);
-       end if;
-    end Finalize_TCB;
- 
-    ---------------
-    -- Exit_Task --
-    ---------------
- 
-    procedure Exit_Task is
-    begin
-       Specific.Set (null);
-    end Exit_Task;
- 
-    ----------------
-    -- Abort_Task --
-    ----------------
- 
-    procedure Abort_Task (T : Task_ID) is
-    begin
-       --  Interrupt Server_Tasks may be waiting on an event flag
- 
-       if T.Common.State = Interrupt_Server_Blocked_On_Event_Flag then
-          Wakeup (T, Interrupt_Server_Blocked_On_Event_Flag);
-       end if;
-    end Abort_Task;
- 
-    ----------------
-    -- Check_Exit --
-    ----------------
- 
-    --  Dummy version
- 
-    function Check_Exit (Self_ID : ST.Task_ID) return Boolean is
-       pragma Unreferenced (Self_ID);
- 
-    begin
-       return True;
-    end Check_Exit;
- 
-    --------------------
-    -- Check_No_Locks --
-    --------------------
- 
-    function Check_No_Locks (Self_ID : ST.Task_ID) return Boolean is
-       pragma Unreferenced (Self_ID);
- 
-    begin
-       return True;
-    end Check_No_Locks;
- 
-    ----------------------
-    -- Environment_Task --
-    ----------------------
- 
-    function Environment_Task return Task_ID is
-    begin
-       return Environment_Task_ID;
-    end Environment_Task;
- 
-    --------------
-    -- Lock_RTS --
-    --------------
- 
-    procedure Lock_RTS is
-    begin
-       Write_Lock (Single_RTS_Lock'Access, Global_Lock => True);
-    end Lock_RTS;
- 
-    ----------------
-    -- Unlock_RTS --
-    ----------------
- 
-    procedure Unlock_RTS is
-    begin
-       Unlock (Single_RTS_Lock'Access, Global_Lock => True);
-    end Unlock_RTS;
- 
-    ------------------
-    -- Suspend_Task --
-    ------------------
- 
-    function Suspend_Task
-      (T           : ST.Task_ID;
-       Thread_Self : Thread_Id) return Boolean
-    is
-       pragma Unreferenced (T);
-       pragma Unreferenced (Thread_Self);
- 
-    begin
-       return False;
-    end Suspend_Task;
- 
-    -----------------
-    -- Resume_Task --
-    -----------------
- 
-    function Resume_Task
-      (T           : ST.Task_ID;
-       Thread_Self : Thread_Id) return Boolean
-    is
-       pragma Unreferenced (T);
-       pragma Unreferenced (Thread_Self);
-    begin
-       return False;
-    end Resume_Task;
- 
-    ----------------
-    -- Initialize --
-    ----------------
- 
-    procedure Initialize (Environment_Task : Task_ID) is
-    begin
-       Environment_Task_ID := Environment_Task;
- 
-       --  Initialize the lock used to synchronize chain of all ATCBs
- 
-       Initialize_Lock (Single_RTS_Lock'Access, RTS_Lock_Level);
- 
-       Specific.Initialize (Environment_Task);
- 
-       Enter_Task (Environment_Task);
-    end Initialize;
- 
- end System.Task_Primitives.Operations;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5vtaspri.ads gcc-4.0.0/gcc/ada/5vtaspri.ads
*** gcc-3.4.3/gcc/ada/5vtaspri.ads	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5vtaspri.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,105 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                 S Y S T E M . T A S K _ P R I M I T I V E S              --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --          Copyright (C) 1991-2000 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a OpenVMS/Alpha version of this package.
- 
- --  This package provides low-level support for most tasking features.
- 
- pragma Polling (Off);
- --  Turn off polling, we do not want ATC polling to take place during
- --  tasking operations. It causes infinite loops and other problems.
- 
- with Interfaces.C;
- --  used for int
- --           size_t
- 
- with System.OS_Interface;
- --  used for pthread_mutex_t
- --           pthread_cond_t
- --           pthread_t
- 
- package System.Task_Primitives is
- 
-    type Lock is limited private;
-    --  Should be used for implementation of protected objects.
- 
-    type RTS_Lock is limited private;
-    --  Should be used inside the runtime system.
-    --  The difference between Lock and the RTS_Lock is that the later
-    --  one serves only as a semaphore so that do not check for
-    --  ceiling violations.
- 
-    type Task_Body_Access is access procedure;
-    --  Pointer to the task body's entry point (or possibly a wrapper
-    --  declared local to the GNARL).
- 
-    type Private_Data is limited private;
-    --  Any information that the GNULLI needs maintained on a per-task
-    --  basis.  A component of this type is guaranteed to be included
-    --  in the Ada_Task_Control_Block.
- 
- private
- 
-    type Exc_Stack_T is array (0 .. 8192) of aliased Character;
-    for Exc_Stack_T'Alignment use Standard'Maximum_Alignment;
-    type Exc_Stack_Ptr_T is access all Exc_Stack_T;
- 
-    type Lock is record
-       L         : aliased System.OS_Interface.pthread_mutex_t;
-       Prio      : Interfaces.C.int;
-       Prio_Save : Interfaces.C.int;
-    end record;
- 
-    type RTS_Lock is new System.OS_Interface.pthread_mutex_t;
-    type Private_Data is record
-       Thread      : aliased System.OS_Interface.pthread_t;
-       pragma Atomic (Thread);
-       --  Thread field may be updated by two different threads of control.
-       --  (See, Enter_Task and Create_Task in s-taprop.adb).
-       --  They put the same value (thr_self value). We do not want to
-       --  use lock on those operations and the only thing we have to
-       --  make sure is that they are updated in atomic fashion.
- 
-       CV          : aliased System.OS_Interface.pthread_cond_t;
-       L           : aliased RTS_Lock;
-       --  protection for all components is lock L
- 
-       Exc_Stack_Ptr : Exc_Stack_Ptr_T;
-       --  ??? This needs comments.
- 
-       AST_Pending : Boolean;
-       --  Used to detect delay and sleep timeouts
- 
-    end record;
- 
- end System.Task_Primitives;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5vtpopde.adb gcc-4.0.0/gcc/ada/5vtpopde.adb
*** gcc-3.4.3/gcc/ada/5vtpopde.adb	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5vtpopde.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,164 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   SYSTEM.TASK_PRIMITIVES.OPERATIONS.DEC                  --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --           Copyright (C) 2000-2003 Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --   This package is for OpenVMS/Alpha
- 
- with System.OS_Interface;
- with System.Parameters;
- with System.Tasking;
- with Unchecked_Conversion;
- with System.Soft_Links;
- 
- package body System.Task_Primitives.Operations.DEC is
- 
-    use System.OS_Interface;
-    use System.Parameters;
-    use System.Tasking;
-    use System.Aux_DEC;
-    use type Interfaces.C.int;
- 
-    package SSL renames System.Soft_Links;
- 
-    --  The FAB_RAB_Type specifies where the context field (the calling
-    --  task) is stored.  Other fields defined for FAB_RAB arent' need and
-    --  so are ignored.
- 
-    type FAB_RAB_Type is record
-       CTX : Unsigned_Longword;
-    end record;
- 
-    for FAB_RAB_Type use record
-       CTX at 24 range 0 .. 31;
-    end record;
- 
-    for FAB_RAB_Type'Size use 224;
- 
-    type FAB_RAB_Access_Type is access all FAB_RAB_Type;
- 
-    -----------------------
-    -- Local Subprograms --
-    -----------------------
- 
-    function To_Unsigned_Longword is new
-      Unchecked_Conversion (Task_ID, Unsigned_Longword);
- 
-    function To_Task_Id is new
-      Unchecked_Conversion (Unsigned_Longword, Task_ID);
- 
-    function To_FAB_RAB is new
-      Unchecked_Conversion (Address, FAB_RAB_Access_Type);
- 
-    ---------------------------
-    -- Interrupt_AST_Handler --
-    ---------------------------
- 
-    procedure Interrupt_AST_Handler (ID : Address) is
-       Result      : Interfaces.C.int;
-       AST_Self_ID : Task_ID := To_Task_Id (ID);
- 
-    begin
-       Result := pthread_cond_signal_int_np (AST_Self_ID.Common.LL.CV'Access);
-       pragma Assert (Result = 0);
-    end Interrupt_AST_Handler;
- 
-    ---------------------
-    -- RMS_AST_Handler --
-    ---------------------
- 
-    procedure RMS_AST_Handler (ID : Address) is
-       AST_Self_ID : Task_ID := To_Task_Id (To_FAB_RAB (ID).CTX);
-       Result      : Interfaces.C.int;
- 
-    begin
-       AST_Self_ID.Common.LL.AST_Pending := False;
-       Result := pthread_cond_signal_int_np (AST_Self_ID.Common.LL.CV'Access);
-       pragma Assert (Result = 0);
-    end RMS_AST_Handler;
- 
-    ----------
-    -- Self --
-    ----------
- 
-    function Self return Unsigned_Longword is
-       Self_ID : Task_ID := Self;
-    begin
-       Self_ID.Common.LL.AST_Pending := True;
-       return To_Unsigned_Longword (Self);
-    end Self;
- 
-    -------------------------
-    -- Starlet_AST_Handler --
-    -------------------------
- 
-    procedure Starlet_AST_Handler (ID : Address) is
-       Result      : Interfaces.C.int;
-       AST_Self_ID : Task_ID := To_Task_Id (ID);
- 
-    begin
-       AST_Self_ID.Common.LL.AST_Pending := False;
-       Result := pthread_cond_signal_int_np (AST_Self_ID.Common.LL.CV'Access);
-       pragma Assert (Result = 0);
-    end Starlet_AST_Handler;
- 
-    ----------------
-    -- Task_Synch --
-    ----------------
- 
-    procedure Task_Synch is
-       Synch_Self_ID : constant Task_ID := Self;
-    begin
-       if Single_Lock then
-          Lock_RTS;
-       else
-          Write_Lock (Synch_Self_ID);
-       end if;
- 
-       SSL.Abort_Defer.all;
-       Synch_Self_ID.Common.State := AST_Server_Sleep;
- 
-       while Synch_Self_ID.Common.LL.AST_Pending loop
-          Sleep (Synch_Self_ID, AST_Server_Sleep);
-       end loop;
- 
-       Synch_Self_ID.Common.State := Runnable;
- 
-       if Single_Lock then
-          Unlock_RTS;
-       else
-          Unlock (Synch_Self_ID);
-       end if;
- 
-       SSL.Abort_Undefer.all;
-    end Task_Synch;
- 
- end System.Task_Primitives.Operations.DEC;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5vtpopde.ads gcc-4.0.0/gcc/ada/5vtpopde.ads
*** gcc-3.4.3/gcc/ada/5vtpopde.ads	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5vtpopde.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,54 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   SYSTEM.TASK_PRIMITIVES.OPERATIONS.DEC                  --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --          Copyright (C) 2000-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package is for OpenVMS/Alpha.
- --
- with System.Aux_DEC;
- package System.Task_Primitives.Operations.DEC is
- 
-    procedure Interrupt_AST_Handler (ID : Address);
-    --  Handles the AST for Ada95 Interrupts.
- 
-    procedure RMS_AST_Handler (ID : Address);
-    --  Handles the AST for RMS_Asynch_Operations.
- 
-    function Self return System.Aux_DEC.Unsigned_Longword;
-    --  Returns the task identification for the AST.
- 
-    procedure Starlet_AST_Handler (ID : Address);
-    --  Handles the AST for Starlet Tasking_Services.
- 
-    procedure Task_Synch;
-    --  Synchronizes the task after the system service completes.
- 
- end System.Task_Primitives.Operations.DEC;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5vtraent.adb gcc-4.0.0/gcc/ada/5vtraent.adb
*** gcc-3.4.3/gcc/ada/5vtraent.adb	Wed Oct 29 10:26:12 2003
--- gcc-4.0.0/gcc/ada/5vtraent.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,68 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT RUN-TIME COMPONENTS                         --
- --                                                                          --
- --              S Y S T E M . T R A C E B A C K _ E N T R I E S             --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --             Copyright (C) 2003 Free Software Foundation, Inc.            --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the  contents of the part following the private keyword. --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- package body System.Traceback_Entries is
- 
-    ------------
-    -- PC_For --
-    ------------
- 
-    function PC_For (TB_Entry : Traceback_Entry) return System.Address is
-    begin
-       return TB_Entry.PC;
-    end PC_For;
- 
-    ------------
-    -- PV_For --
-    ------------
- 
-    function PV_For (TB_Entry : Traceback_Entry) return System.Address is
-    begin
-       return TB_Entry.PV;
-    end PV_For;
- 
-    ------------------
-    -- TB_Entry_For --
-    ------------------
- 
-    function TB_Entry_For (PC : System.Address) return Traceback_Entry is
-    begin
-       return (PC => PC, PV => System.Null_Address);
-    end TB_Entry_For;
- 
- end System.Traceback_Entries;
- 
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5vtraent.ads gcc-4.0.0/gcc/ada/5vtraent.ads
*** gcc-3.4.3/gcc/ada/5vtraent.ads	Wed Oct 29 10:26:12 2003
--- gcc-4.0.0/gcc/ada/5vtraent.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,59 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT RUN-TIME COMPONENTS                         --
- --                                                                          --
- --              S Y S T E M . T R A C E B A C K _ E N T R I E S             --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --             Copyright (C) 2003 Free Software Foundation, Inc.            --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the  contents of the part following the private keyword. --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the Alpha/OpenVMS version of this package
- 
- package System.Traceback_Entries is
- 
-    type Traceback_Entry is record
-       PC : System.Address;
-       PV : System.Address;
-    end record;
- 
-    pragma Suppress_Initialization (Traceback_Entry);
- 
-    Null_TB_Entry : constant Traceback_Entry :=
-                      (PC => System.Null_Address,
-                       PV => System.Null_Address);
- 
-    function PC_For (TB_Entry : Traceback_Entry) return System.Address;
-    function PV_For (TB_Entry : Traceback_Entry) return System.Address;
- 
-    function TB_Entry_For (PC : System.Address) return Traceback_Entry;
- 
- end System.Traceback_Entries;
- 
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5vvaflop.adb gcc-4.0.0/gcc/ada/5vvaflop.adb
*** gcc-3.4.3/gcc/ada/5vvaflop.adb	Thu Apr 24 17:53:52 2003
--- gcc-4.0.0/gcc/ada/5vvaflop.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,621 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --           S Y S T E M . V A X _ F L O A T _ O P E R A T I O N S          --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --          Copyright (C) 1997-2000 Free Software Foundation, Inc.          --
- --                       (Version for Alpha OpenVMS)                        --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- with System.IO;           use System.IO;
- with System.Machine_Code; use System.Machine_Code;
- 
- package body System.Vax_Float_Operations is
- 
-    --  Ensure this gets compiled with -O to avoid extra (and possibly
-    --  improper) memory stores.
- 
-    pragma Optimize (Time);
- 
-    --  Declare the functions that do the conversions between floating-point
-    --  formats.  Call the operands IEEE float so they get passed in
-    --  FP registers.
- 
-    function Cvt_G_T (X : T) return T;
-    function Cvt_T_G (X : T) return T;
-    function Cvt_T_F (X : T) return S;
- 
-    pragma Import (C, Cvt_G_T, "OTS$CVT_FLOAT_G_T");
-    pragma Import (C, Cvt_T_G, "OTS$CVT_FLOAT_T_G");
-    pragma Import (C, Cvt_T_F, "OTS$CVT_FLOAT_T_F");
- 
-    --  In each of the conversion routines that are done with OTS calls,
-    --  we define variables of the corresponding IEEE type so that they are
-    --  passed and kept in the proper register class.
- 
-    ------------
-    -- D_To_G --
-    ------------
- 
-    function D_To_G (X : D) return G is
-       A, B : T;
-       C : G;
- 
-    begin
-       Asm ("ldg %0,%1", T'Asm_Output ("=f", A), D'Asm_Input ("m", X));
-       Asm ("cvtdg %1,%0", T'Asm_Output ("=f", B), T'Asm_Input ("f", A));
-       Asm ("stg %1,%0", G'Asm_Output ("=m", C), T'Asm_Input ("f", B));
-       return C;
-    end D_To_G;
- 
-    ------------
-    -- F_To_G --
-    ------------
- 
-    function F_To_G (X : F) return G is
-       A : T;
-       B : G;
- 
-    begin
-       Asm ("ldf %0,%1", T'Asm_Output ("=f", A), F'Asm_Input ("m", X));
-       Asm ("stg %1,%0", G'Asm_Output ("=m", B), T'Asm_Input ("f", A));
-       return B;
-    end F_To_G;
- 
-    ------------
-    -- F_To_S --
-    ------------
- 
-    function F_To_S (X : F) return S is
-       A : T;
-       B : S;
- 
-    begin
-       --  Because converting to a wider FP format is a no-op, we say
-       --  A is 64-bit even though we are loading 32 bits into it.
-       Asm ("ldf %0,%1", T'Asm_Output ("=f", A), F'Asm_Input ("m", X));
- 
-       B := S (Cvt_G_T (A));
-       return B;
-    end F_To_S;
- 
-    ------------
-    -- G_To_D --
-    ------------
- 
-    function G_To_D (X : G) return D is
-       A, B : T;
-       C : D;
- 
-    begin
-       Asm ("ldg %0,%1", T'Asm_Output ("=f", A), G'Asm_Input ("m", X));
-       Asm ("cvtgd %1,%0", T'Asm_Output ("=f", B), T'Asm_Input ("f", A));
-       Asm ("stg %1,%0", D'Asm_Output ("=m", C), T'Asm_Input ("f", B));
-       return C;
-    end G_To_D;
- 
-    ------------
-    -- G_To_F --
-    ------------
- 
-    function G_To_F (X : G) return F is
-       A : T;
-       B : S;
-       C : F;
- 
-    begin
-       Asm ("ldg %0,%1", T'Asm_Output ("=f", A), G'Asm_Input ("m", X));
-       Asm ("cvtgf %1,%0", S'Asm_Output ("=f", B), T'Asm_Input ("f", A));
-       Asm ("stf %1,%0", F'Asm_Output ("=m", C), S'Asm_Input ("f", B));
-       return C;
-    end G_To_F;
- 
-    ------------
-    -- G_To_Q --
-    ------------
- 
-    function G_To_Q (X : G) return Q is
-       A : T;
-       B : Q;
- 
-    begin
-       Asm ("ldg %0,%1", T'Asm_Output ("=f", A), G'Asm_Input ("m", X));
-       Asm ("cvtgq %1,%0", Q'Asm_Output ("=f", B), T'Asm_Input ("f", A));
-       return B;
-    end G_To_Q;
- 
-    ------------
-    -- G_To_T --
-    ------------
- 
-    function G_To_T (X : G) return T is
-       A, B : T;
- 
-    begin
-       Asm ("ldg %0,%1", T'Asm_Output ("=f", A), G'Asm_Input ("m", X));
-       B := Cvt_G_T (A);
-       return B;
-    end G_To_T;
- 
-    ------------
-    -- F_To_Q --
-    ------------
- 
-    function F_To_Q (X : F) return Q is
-    begin
-       return G_To_Q (F_To_G (X));
-    end F_To_Q;
- 
-    ------------
-    -- Q_To_F --
-    ------------
- 
-    function Q_To_F (X : Q) return F is
-       A : S;
-       B : F;
- 
-    begin
-       Asm ("cvtqf %1,%0", S'Asm_Output ("=f", A), Q'Asm_Input ("f", X));
-       Asm ("stf %1,%0", F'Asm_Output ("=m", B), S'Asm_Input ("f", A));
-       return B;
-    end Q_To_F;
- 
-    ------------
-    -- Q_To_G --
-    ------------
- 
-    function Q_To_G (X : Q) return G is
-       A : T;
-       B : G;
- 
-    begin
-       Asm ("cvtqg %1,%0", T'Asm_Output ("=f", A), Q'Asm_Input ("f", X));
-       Asm ("stg %1,%0", G'Asm_Output ("=m", B), T'Asm_Input ("f", A));
-       return B;
-    end Q_To_G;
- 
-    ------------
-    -- S_To_F --
-    ------------
- 
-    function S_To_F (X : S) return F is
-       A : S;
-       B : F;
- 
-    begin
-       A := Cvt_T_F (T (X));
-       Asm ("stf %1,%0", F'Asm_Output ("=m", B), S'Asm_Input ("f", A));
-       return B;
-    end S_To_F;
- 
-    ------------
-    -- T_To_D --
-    ------------
- 
-    function T_To_D (X : T) return D is
-    begin
-       return G_To_D (T_To_G (X));
-    end T_To_D;
- 
-    ------------
-    -- T_To_G --
-    ------------
- 
-    function T_To_G (X : T) return G is
-       A : T;
-       B : G;
- 
-    begin
-       A := Cvt_T_G (X);
-       Asm ("stg %1,%0", G'Asm_Output ("=m", B), T'Asm_Input ("f", A));
-       return B;
-    end T_To_G;
- 
-    -----------
-    -- Abs_F --
-    -----------
- 
-    function Abs_F (X : F) return F is
-       A, B : S;
-       C : F;
- 
-    begin
-       Asm ("ldf %0,%1", S'Asm_Output ("=f", A), F'Asm_Input ("m", X));
-       Asm ("cpys $f31,%1,%0", S'Asm_Output ("=f", B), S'Asm_Input ("f", A));
-       Asm ("stf %1,%0", F'Asm_Output ("=m", C), S'Asm_Input ("f", B));
-       return C;
-    end Abs_F;
- 
-    -----------
-    -- Abs_G --
-    -----------
- 
-    function Abs_G (X : G) return G is
-       A, B : T;
-       C : G;
- 
-    begin
-       Asm ("ldg %0,%1", T'Asm_Output ("=f", A), G'Asm_Input ("m", X));
-       Asm ("cpys $f31,%1,%0", T'Asm_Output ("=f", B), T'Asm_Input ("f", A));
-       Asm ("stg %1,%0", G'Asm_Output ("=m", C), T'Asm_Input ("f", B));
-       return C;
-    end Abs_G;
- 
-    -----------
-    -- Add_F --
-    -----------
- 
-    function Add_F (X, Y : F) return F is
-       X1, Y1, R : S;
-       R1 : F;
- 
-    begin
-       Asm ("ldf %0,%1", S'Asm_Output ("=f", X1), F'Asm_Input ("m", X));
-       Asm ("ldf %0,%1", S'Asm_Output ("=f", Y1), F'Asm_Input ("m", Y));
-       Asm ("addf %1,%2,%0", S'Asm_Output ("=f", R),
-            (S'Asm_Input ("f", X1), S'Asm_Input ("f", Y1)));
-       Asm ("stf %1,%0", F'Asm_Output ("=m", R1), S'Asm_Input ("f", R));
-       return R1;
-    end Add_F;
- 
-    -----------
-    -- Add_G --
-    -----------
- 
-    function Add_G (X, Y : G) return G is
-       X1, Y1, R : T;
-       R1 : G;
- 
-    begin
-       Asm ("ldg %0,%1", T'Asm_Output ("=f", X1), G'Asm_Input ("m", X));
-       Asm ("ldg %0,%1", T'Asm_Output ("=f", Y1), G'Asm_Input ("m", Y));
-       Asm ("addg %1,%2,%0", T'Asm_Output ("=f", R),
-            (T'Asm_Input ("f", X1), T'Asm_Input ("f", Y1)));
-       Asm ("stg %1,%0", G'Asm_Output ("=m", R1), T'Asm_Input ("f", R));
-       return R1;
-    end Add_G;
- 
-    --------------------
-    -- Debug_Output_D --
-    --------------------
- 
-    procedure Debug_Output_D (Arg : D) is
-    begin
-       Put (D'Image (Arg));
-    end Debug_Output_D;
- 
-    --------------------
-    -- Debug_Output_F --
-    --------------------
- 
-    procedure Debug_Output_F (Arg : F) is
-    begin
-       Put (F'Image (Arg));
-    end Debug_Output_F;
- 
-    --------------------
-    -- Debug_Output_G --
-    --------------------
- 
-    procedure Debug_Output_G (Arg : G) is
-    begin
-       Put (G'Image (Arg));
-    end Debug_Output_G;
- 
-    --------------------
-    -- Debug_String_D --
-    --------------------
- 
-    Debug_String_Buffer : String (1 .. 32);
-    --  Buffer used by all Debug_String_x routines for returning result
- 
-    function Debug_String_D (Arg : D) return System.Address is
-       Image_String : constant String := D'Image (Arg) & ASCII.NUL;
-       Image_Size   : constant Integer := Image_String'Length;
- 
-    begin
-       Debug_String_Buffer (1 .. Image_Size) := Image_String;
-       return Debug_String_Buffer (1)'Address;
-    end Debug_String_D;
- 
-    --------------------
-    -- Debug_String_F --
-    --------------------
- 
-    function Debug_String_F (Arg : F) return System.Address is
-       Image_String : constant String := F'Image (Arg) & ASCII.NUL;
-       Image_Size   : constant Integer := Image_String'Length;
- 
-    begin
-       Debug_String_Buffer (1 .. Image_Size) := Image_String;
-       return Debug_String_Buffer (1)'Address;
-    end Debug_String_F;
- 
-    --------------------
-    -- Debug_String_G --
-    --------------------
- 
-    function Debug_String_G (Arg : G) return System.Address is
-       Image_String : constant String := G'Image (Arg) & ASCII.NUL;
-       Image_Size   : constant Integer := Image_String'Length;
- 
-    begin
-       Debug_String_Buffer (1 .. Image_Size) := Image_String;
-       return Debug_String_Buffer (1)'Address;
-    end Debug_String_G;
- 
-    -----------
-    -- Div_F --
-    -----------
- 
-    function Div_F (X, Y : F) return F is
-       X1, Y1, R : S;
- 
-       R1 : F;
-    begin
-       Asm ("ldf %0,%1", S'Asm_Output ("=f", X1), F'Asm_Input ("m", X));
-       Asm ("ldf %0,%1", S'Asm_Output ("=f", Y1), F'Asm_Input ("m", Y));
-       Asm ("divf %1,%2,%0", S'Asm_Output ("=f", R),
-            (S'Asm_Input ("f", X1), S'Asm_Input ("f", Y1)));
-       Asm ("stf %1,%0", F'Asm_Output ("=m", R1), S'Asm_Input ("f", R));
-       return R1;
-    end Div_F;
- 
-    -----------
-    -- Div_G --
-    -----------
- 
-    function Div_G (X, Y : G) return G is
-       X1, Y1, R : T;
-       R1 : G;
- 
-    begin
-       Asm ("ldg %0,%1", T'Asm_Output ("=f", X1), G'Asm_Input ("m", X));
-       Asm ("ldg %0,%1", T'Asm_Output ("=f", Y1), G'Asm_Input ("m", Y));
-       Asm ("divg %1,%2,%0", T'Asm_Output ("=f", R),
-            (T'Asm_Input ("f", X1), T'Asm_Input ("f", Y1)));
-       Asm ("stg %1,%0", G'Asm_Output ("=m", R1), T'Asm_Input ("f", R));
-       return R1;
-    end Div_G;
- 
-    ----------
-    -- Eq_F --
-    ----------
- 
-    function Eq_F (X, Y : F) return Boolean is
-       X1, Y1, R : S;
- 
-    begin
-       Asm ("ldf %0,%1", S'Asm_Output ("=f", X1), F'Asm_Input ("m", X));
-       Asm ("ldf %0,%1", S'Asm_Output ("=f", Y1), F'Asm_Input ("m", Y));
-       Asm ("cmpgeq %1,%2,%0", S'Asm_Output ("=f", R),
-            (S'Asm_Input ("f", X1), S'Asm_Input ("f", Y1)));
-       return R /= 0.0;
-    end Eq_F;
- 
-    ----------
-    -- Eq_G --
-    ----------
- 
-    function Eq_G (X, Y : G) return Boolean is
-       X1, Y1, R : T;
- 
-    begin
-       Asm ("ldg %0,%1", T'Asm_Output ("=f", X1), G'Asm_Input ("m", X));
-       Asm ("ldg %0,%1", T'Asm_Output ("=f", Y1), G'Asm_Input ("m", Y));
-       Asm ("cmpgeq %1,%2,%0", T'Asm_Output ("=f", R),
-            (T'Asm_Input ("f", X1), T'Asm_Input ("f", Y1)));
-       return R /= 0.0;
-    end Eq_G;
- 
-    ----------
-    -- Le_F --
-    ----------
- 
-    function Le_F (X, Y : F) return Boolean is
-       X1, Y1, R : S;
- 
-    begin
-       Asm ("ldf %0,%1", S'Asm_Output ("=f", X1), F'Asm_Input ("m", X));
-       Asm ("ldf %0,%1", S'Asm_Output ("=f", Y1), F'Asm_Input ("m", Y));
-       Asm ("cmpgle %1,%2,%0", S'Asm_Output ("=f", R),
-            (S'Asm_Input ("f", X1), S'Asm_Input ("f", Y1)));
-       return R /= 0.0;
-    end Le_F;
- 
-    ----------
-    -- Le_G --
-    ----------
- 
-    function Le_G (X, Y : G) return Boolean is
-       X1, Y1, R : T;
- 
-    begin
-       Asm ("ldg %0,%1", T'Asm_Output ("=f", X1), G'Asm_Input ("m", X));
-       Asm ("ldg %0,%1", T'Asm_Output ("=f", Y1), G'Asm_Input ("m", Y));
-       Asm ("cmpgle %1,%2,%0", T'Asm_Output ("=f", R),
-            (T'Asm_Input ("f", X1), T'Asm_Input ("f", Y1)));
-       return R /= 0.0;
-    end Le_G;
- 
-    ----------
-    -- Lt_F --
-    ----------
- 
-    function Lt_F (X, Y : F) return Boolean is
-       X1, Y1, R : S;
- 
-    begin
-       Asm ("ldf %0,%1", S'Asm_Output ("=f", X1), F'Asm_Input ("m", X));
-       Asm ("ldf %0,%1", S'Asm_Output ("=f", Y1), F'Asm_Input ("m", Y));
-       Asm ("cmpglt %1,%2,%0", S'Asm_Output ("=f", R),
-            (S'Asm_Input ("f", X1), S'Asm_Input ("f", Y1)));
-       return R /= 0.0;
-    end Lt_F;
- 
-    ----------
-    -- Lt_G --
-    ----------
- 
-    function Lt_G (X, Y : G) return Boolean is
-       X1, Y1, R : T;
- 
-    begin
-       Asm ("ldg %0,%1", T'Asm_Output ("=f", X1), G'Asm_Input ("m", X));
-       Asm ("ldg %0,%1", T'Asm_Output ("=f", Y1), G'Asm_Input ("m", Y));
-       Asm ("cmpglt %1,%2,%0", T'Asm_Output ("=f", R),
-            (T'Asm_Input ("f", X1), T'Asm_Input ("f", Y1)));
-       return R /= 0.0;
-    end Lt_G;
- 
-    -----------
-    -- Mul_F --
-    -----------
- 
-    function Mul_F (X, Y : F) return F is
-       X1, Y1, R : S;
-       R1 : F;
- 
-    begin
-       Asm ("ldf %0,%1", S'Asm_Output ("=f", X1), F'Asm_Input ("m", X));
-       Asm ("ldf %0,%1", S'Asm_Output ("=f", Y1), F'Asm_Input ("m", Y));
-       Asm ("mulf %1,%2,%0", S'Asm_Output ("=f", R),
-            (S'Asm_Input ("f", X1), S'Asm_Input ("f", Y1)));
-       Asm ("stf %1,%0", F'Asm_Output ("=m", R1), S'Asm_Input ("f", R));
-       return R1;
-    end Mul_F;
- 
-    -----------
-    -- Mul_G --
-    -----------
- 
-    function Mul_G (X, Y : G) return G is
-       X1, Y1, R : T;
-       R1 : G;
- 
-    begin
-       Asm ("ldg %0,%1", T'Asm_Output ("=f", X1), G'Asm_Input ("m", X));
-       Asm ("ldg %0,%1", T'Asm_Output ("=f", Y1), G'Asm_Input ("m", Y));
-       Asm ("mulg %1,%2,%0", T'Asm_Output ("=f", R),
-            (T'Asm_Input ("f", X1), T'Asm_Input ("f", Y1)));
-       Asm ("stg %1,%0", G'Asm_Output ("=m", R1), T'Asm_Input ("f", R));
-       return R1;
-    end Mul_G;
- 
-    -----------
-    -- Neg_F --
-    -----------
- 
-    function Neg_F (X : F) return F is
-       A, B : S;
-       C : F;
- 
-    begin
-       Asm ("ldf %0,%1", S'Asm_Output ("=f", A), F'Asm_Input ("m", X));
-       Asm ("cpysn %1,%1,%0", S'Asm_Output ("=f", B), S'Asm_Input ("f", A));
-       Asm ("stf %1,%0", F'Asm_Output ("=m", C), S'Asm_Input ("f", B));
-       return C;
-    end Neg_F;
- 
-    -----------
-    -- Neg_G --
-    -----------
- 
-    function Neg_G (X : G) return G is
-       A, B : T;
-       C : G;
- 
-    begin
-       Asm ("ldg %0,%1", T'Asm_Output ("=f", A), G'Asm_Input ("m", X));
-       Asm ("cpysn %1,%1,%0", T'Asm_Output ("=f", B), T'Asm_Input ("f", A));
-       Asm ("stg %1,%0", G'Asm_Output ("=m", C), T'Asm_Input ("f", B));
-       return C;
-    end Neg_G;
- 
-    --------
-    -- pd --
-    --------
- 
-    procedure pd (Arg : D) is
-    begin
-       Put_Line (D'Image (Arg));
-    end pd;
- 
-    --------
-    -- pf --
-    --------
- 
-    procedure pf (Arg : F) is
-    begin
-       Put_Line (F'Image (Arg));
-    end pf;
- 
-    --------
-    -- pg --
-    --------
- 
-    procedure pg (Arg : G) is
-    begin
-       Put_Line (G'Image (Arg));
-    end pg;
- 
-    -----------
-    -- Sub_F --
-    -----------
- 
-    function Sub_F (X, Y : F) return F is
-       X1, Y1, R : S;
-       R1 : F;
- 
-    begin
-       Asm ("ldf %0,%1", S'Asm_Output ("=f", X1), F'Asm_Input ("m", X));
-       Asm ("ldf %0,%1", S'Asm_Output ("=f", Y1), F'Asm_Input ("m", Y));
-       Asm ("subf %1,%2,%0", S'Asm_Output ("=f", R),
-            (S'Asm_Input ("f", X1), S'Asm_Input ("f", Y1)));
-       Asm ("stf %1,%0", F'Asm_Output ("=m", R1), S'Asm_Input ("f", R));
-       return R1;
-    end Sub_F;
- 
-    -----------
-    -- Sub_G --
-    -----------
- 
-    function Sub_G (X, Y : G) return G is
-       X1, Y1, R : T;
-       R1 : G;
- 
-    begin
-       Asm ("ldg %0,%1", T'Asm_Output ("=f", X1), G'Asm_Input ("m", X));
-       Asm ("ldg %0,%1", T'Asm_Output ("=f", Y1), G'Asm_Input ("m", Y));
-       Asm ("subg %1,%2,%0", T'Asm_Output ("=f", R),
-            (T'Asm_Input ("f", X1), T'Asm_Input ("f", Y1)));
-       Asm ("stg %1,%0", G'Asm_Output ("=m", R1), T'Asm_Input ("f", R));
-       return R1;
-    end Sub_G;
- 
- end System.Vax_Float_Operations;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5wgloloc.adb gcc-4.0.0/gcc/ada/5wgloloc.adb
*** gcc-3.4.3/gcc/ada/5wgloloc.adb	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5wgloloc.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,113 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                  S Y S T E M . G L O B A L _ L O C K S                   --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --           Copyright (C) 1999-2001 Ada Core Technologies, Inc.            --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This implementation is specific to NT.
- 
- with GNAT.Task_Lock;
- 
- with Interfaces.C.Strings;
- with System.OS_Interface;
- 
- package body System.Global_Locks is
- 
-    package TSL renames GNAT.Task_Lock;
-    package OSI renames System.OS_Interface;
-    package ICS renames Interfaces.C.Strings;
- 
-    subtype Lock_File_Entry is OSI.HANDLE;
- 
-    Last_Lock  : Lock_Type := Null_Lock;
-    Lock_Table : array (Lock_Type range 1 .. 15) of Lock_File_Entry;
- 
-    -----------------
-    -- Create_Lock --
-    -----------------
- 
-    procedure Create_Lock
-      (Lock : out Lock_Type;
-       Name : in String)
-    is
-       L : Lock_Type;
- 
-    begin
-       TSL.Lock;
-       Last_Lock := Last_Lock + 1;
-       L := Last_Lock;
-       TSL.Unlock;
- 
-       if L > Lock_Table'Last then
-          raise Lock_Error;
-       end if;
- 
-       Lock_Table (L) :=
-         OSI.CreateMutex (null, OSI.BOOL (False), ICS.New_String (Name));
-       Lock := L;
-    end Create_Lock;
- 
-    ------------------
-    -- Acquire_Lock --
-    ------------------
- 
-    procedure Acquire_Lock
-      (Lock : in out Lock_Type)
-    is
-       use type OSI.DWORD;
- 
-       Res : OSI.DWORD;
-    begin
-       Res := OSI.WaitForSingleObject (Lock_Table (Lock), OSI.Wait_Infinite);
- 
-       if Res = OSI.WAIT_FAILED then
-          raise Lock_Error;
-       end if;
-    end Acquire_Lock;
- 
-    ------------------
-    -- Release_Lock --
-    ------------------
- 
-    procedure Release_Lock
-      (Lock : in out Lock_Type)
-    is
-       use type OSI.BOOL;
- 
-       Res : OSI.BOOL;
-    begin
-       Res := OSI.ReleaseMutex (Lock_Table (Lock));
- 
-       if Res = OSI.False then
-          raise Lock_Error;
-       end if;
-    end Release_Lock;
- 
- end System.Global_Locks;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5wintman.adb gcc-4.0.0/gcc/ada/5wintman.adb
*** gcc-3.4.3/gcc/ada/5wintman.adb	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5wintman.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,78 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --           S Y S T E M . I N T E R R U P T _ M A N A G E M E N T          --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --          Copyright (C) 1991-2000 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the NT version of this package
- 
- --  This file performs the system-dependent translation between machine
- --  exceptions and the Ada exceptions, if any, that should be raised when they
- --  occur.
- 
- --  PLEASE DO NOT add any dependences on other packages.
- --  This package is designed to work with or without tasking support.
- 
- --  See the other warnings in the package specification before making any
- --  modifications to this file.
- 
- --  Make a careful study of all signals available under the OS, to see which
- --  need to be reserved, kept always unmasked, or kept always unmasked. Be on
- --  the lookout for special signals that may be used by the thread library.
- 
- with System.OS_Interface; use System.OS_Interface;
- 
- package body System.Interrupt_Management is
- 
-    ---------------------------
-    -- Initialize_Interrupts --
-    ---------------------------
- 
-    --  Nothing needs to be done on this platform.
- 
-    procedure Initialize_Interrupts is
-    begin
-       null;
-    end Initialize_Interrupts;
- 
- begin
-    --  "Reserve" all the interrupts, except those that are explicitely defined
- 
-    for J in Interrupt_ID'Range loop
-       Reserve (J) := True;
-    end loop;
- 
-    Reserve (SIGINT)  := False;
-    Reserve (SIGILL)  := False;
-    Reserve (SIGABRT) := False;
-    Reserve (SIGFPE)  := False;
-    Reserve (SIGSEGV) := False;
-    Reserve (SIGTERM) := False;
- end System.Interrupt_Management;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5wmemory.adb gcc-4.0.0/gcc/ada/5wmemory.adb
*** gcc-3.4.3/gcc/ada/5wmemory.adb	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5wmemory.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,223 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT RUN-TIME COMPONENTS                         --
- --                                                                          --
- --                         S Y S T E M . M E M O R Y                        --
- --                                                                          --
- --                                 B o d y                                 --
- --                                                                          --
- --          Copyright (C) 2001-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This version provides ways to limit the amount of used memory for systems
- --  that do not have OS support for that.
- 
- --  The amount of available memory available for dynamic allocation is limited
- --  by setting the environment variable GNAT_MEMORY_LIMIT to the number of
- --  kilobytes that can be used.
- --
- --  Windows is currently using this version.
- 
- with Ada.Exceptions;
- with System.Soft_Links;
- 
- package body System.Memory is
- 
-    use Ada.Exceptions;
-    use System.Soft_Links;
- 
-    function c_malloc (Size : size_t) return System.Address;
-    pragma Import (C, c_malloc, "malloc");
- 
-    procedure c_free (Ptr : System.Address);
-    pragma Import (C, c_free, "free");
- 
-    function c_realloc
-      (Ptr : System.Address; Size : size_t) return System.Address;
-    pragma Import (C, c_realloc, "realloc");
- 
-    function msize (Ptr : System.Address) return size_t;
-    pragma Import (C, msize, "_msize");
- 
-    function getenv (Str : String) return System.Address;
-    pragma Import (C, getenv);
- 
-    function atoi (Str : System.Address) return Integer;
-    pragma Import (C, atoi);
- 
-    Available_Memory : size_t := 0;
-    --  Amount of memory that is available for heap allocations.
-    --  A value of 0 means that the amount is not yet initialized.
- 
-    Msize_Accuracy   : constant := 4096;
-    --  Defines the amount of memory to add to requested allocation sizes,
-    --  because malloc may return a bigger block than requested. As msize
-    --  is used when by Free, it must be used on allocation as well. To
-    --  prevent underflow of available_memory we need to use a reserve.
- 
-    procedure Check_Available_Memory (Size : size_t);
-    --  This routine must be called while holding the task lock. When the
-    --  memory limit is not yet initialized, it will be set to the value of
-    --  the GNAT_MEMORY_LIMIT environment variable or to unlimited if that
-    --  does not exist. If the size is larger than the amount of available
-    --  memory, the task lock will be freed and a storage_error exception
-    --  will be raised.
- 
-    -----------
-    -- Alloc --
-    -----------
- 
-    function Alloc (Size : size_t) return System.Address is
-       Result      : System.Address;
-       Actual_Size : size_t := Size;
- 
-    begin
-       if Size = size_t'Last then
-          Raise_Exception (Storage_Error'Identity, "object too large");
-       end if;
- 
-       --  Change size from zero to non-zero. We still want a proper pointer
-       --  for the zero case because pointers to zero length objects have to
-       --  be distinct, but we can't just go ahead and allocate zero bytes,
-       --  since some malloc's return zero for a zero argument.
- 
-       if Size = 0 then
-          Actual_Size := 1;
-       end if;
- 
-       Lock_Task.all;
- 
-       if Actual_Size + Msize_Accuracy >= Available_Memory then
-          Check_Available_Memory (Size + Msize_Accuracy);
-       end if;
- 
-       Result := c_malloc (Actual_Size);
- 
-       if Result /= System.Null_Address then
-          Available_Memory := Available_Memory - msize (Result);
-       end if;
- 
-       Unlock_Task.all;
- 
-       if Result = System.Null_Address then
-          Raise_Exception (Storage_Error'Identity, "heap exhausted");
-       end if;
- 
-       return Result;
-    end Alloc;
- 
-    ----------------------------
-    -- Check_Available_Memory --
-    ----------------------------
- 
-    procedure Check_Available_Memory (Size : size_t) is
-       Gnat_Memory_Limit : System.Address;
- 
-    begin
-       if Available_Memory = 0 then
- 
-          --  The amount of available memory hasn't been initialized yet
- 
-          Gnat_Memory_Limit := getenv ("GNAT_MEMORY_LIMIT" & ASCII.NUL);
- 
-          if Gnat_Memory_Limit /= System.Null_Address then
-             Available_Memory :=
-               size_t (atoi (Gnat_Memory_Limit)) * 1024 + Msize_Accuracy;
-          else
-             Available_Memory := size_t'Last;
-          end if;
-       end if;
- 
-       if Size >= Available_Memory then
- 
-          --  There is a memory overflow
- 
-          Unlock_Task.all;
-          Raise_Exception
-            (Storage_Error'Identity, "heap memory limit exceeded");
-       end if;
-    end Check_Available_Memory;
- 
-    ----------
-    -- Free --
-    ----------
- 
-    procedure Free (Ptr : System.Address) is
-    begin
-       Lock_Task.all;
- 
-       if Ptr /= System.Null_Address then
-          Available_Memory := Available_Memory + msize (Ptr);
-       end if;
- 
-       c_free (Ptr);
- 
-       Unlock_Task.all;
-    end Free;
- 
-    -------------
-    -- Realloc --
-    -------------
- 
-    function Realloc
-      (Ptr  : System.Address;
-       Size : size_t)
-       return System.Address
-    is
-       Result      : System.Address;
-       Actual_Size : constant size_t := Size;
-       Old_Size    : size_t;
- 
-    begin
-       if Size = size_t'Last then
-          Raise_Exception (Storage_Error'Identity, "object too large");
-       end if;
- 
-       Lock_Task.all;
- 
-       Old_Size := msize (Ptr);
- 
-       --  Conservative check - no need to try to be precise here
- 
-       if Size + Msize_Accuracy >= Available_Memory then
-          Check_Available_Memory (Size + Msize_Accuracy);
-       end if;
- 
-       Result := c_realloc (Ptr, Actual_Size);
- 
-       if Result /= System.Null_Address then
-          Available_Memory := Available_Memory + Old_Size - msize (Result);
-       end if;
- 
-       Unlock_Task.all;
- 
-       if Result = System.Null_Address then
-          Raise_Exception (Storage_Error'Identity, "heap exhausted");
-       end if;
- 
-       return Result;
-    end Realloc;
- 
- end System.Memory;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5wml-tgt.adb gcc-4.0.0/gcc/ada/5wml-tgt.adb
*** gcc-3.4.3/gcc/ada/5wml-tgt.adb	Thu Nov 20 09:53:58 2003
--- gcc-4.0.0/gcc/ada/5wml-tgt.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,356 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                             M L I B . T G T                              --
- --                            (Windows Version)                             --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --           Copyright (C) 2002-2003, Ada Core Technologies, Inc.           --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package provides a set of target dependent routines to build
- --  static, dynamic and shared libraries.
- 
- --  This is the Windows version of the body.
- 
- with Namet;  use Namet;
- with Opt;
- with Output; use Output;
- with Prj.Com;
- 
- with GNAT.OS_Lib; use GNAT.OS_Lib;
- 
- with MDLL;
- with MDLL.Utl;
- with MLib.Fil;
- 
- package body MLib.Tgt is
- 
-    ---------------------
-    -- Archive_Builder --
-    ---------------------
- 
-    function Archive_Builder return String is
-    begin
-       return "ar";
-    end Archive_Builder;
- 
-    -----------------------------
-    -- Archive_Builder_Options --
-    -----------------------------
- 
-    function Archive_Builder_Options return String_List_Access is
-    begin
-       return new String_List'(1 => new String'("cr"));
-    end Archive_Builder_Options;
- 
-    -----------------
-    -- Archive_Ext --
-    -----------------
- 
-    function Archive_Ext return  String is
-    begin
-       return "a";
-    end Archive_Ext;
- 
-    ---------------------
-    -- Archive_Indexer --
-    ---------------------
- 
-    function Archive_Indexer return String is
-    begin
-       return "ranlib";
-    end Archive_Indexer;
- 
-    ---------------------------
-    -- Build_Dynamic_Library --
-    ---------------------------
- 
-    procedure Build_Dynamic_Library
-      (Ofiles       : Argument_List;
-       Foreign      : Argument_List;
-       Afiles       : Argument_List;
-       Options      : Argument_List;
-       Interfaces   : Argument_List;
-       Lib_Filename : String;
-       Lib_Dir      : String;
-       Symbol_Data  : Symbol_Record;
-       Driver_Name  : Name_Id := No_Name;
-       Lib_Address  : String  := "";
-       Lib_Version  : String  := "";
-       Relocatable  : Boolean := False;
-       Auto_Init    : Boolean := False)
-    is
-       pragma Unreferenced (Ofiles);
-       pragma Unreferenced (Interfaces);
-       pragma Unreferenced (Symbol_Data);
-       pragma Unreferenced (Driver_Name);
-       pragma Unreferenced (Lib_Version);
-       pragma Unreferenced (Auto_Init);
- 
-       Imp_File : constant String :=
-                    "lib" & MLib.Fil.Ext_To (Lib_Filename, Archive_Ext);
-       --  Name of the import library
- 
-       DLL_File : constant String := MLib.Fil.Ext_To (Lib_Filename, DLL_Ext);
-       --  Name of the DLL file
- 
-       Lib_File : constant String := Lib_Dir & Directory_Separator & DLL_File;
-       --  Full path of the DLL file
- 
-       Success : Boolean;
- 
-    begin
-       if Opt.Verbose_Mode then
-          if Relocatable then
-             Write_Str ("building relocatable shared library ");
-          else
-             Write_Str ("building non-relocatable shared library ");
-          end if;
- 
-          Write_Line (Lib_File);
-       end if;
- 
-       MDLL.Verbose := Opt.Verbose_Mode;
-       MDLL.Quiet   := not MDLL.Verbose;
- 
-       MDLL.Utl.Locate;
- 
-       MDLL.Build_Dynamic_Library
-         (Foreign, Afiles,
-          MDLL.Null_Argument_List, MDLL.Null_Argument_List, Options,
-          Lib_Filename, Lib_Filename & ".def",
-          Lib_Address, True, Relocatable);
- 
-       --  Move the DLL and import library in the lib directory
- 
-       Copy_File (DLL_File, Lib_Dir, Success, Mode => Overwrite);
- 
-       if not Success then
-          Fail ("could not copy DLL to library dir");
-       end if;
- 
-       Copy_File (Imp_File, Lib_Dir, Success, Mode => Overwrite);
- 
-       if not Success then
-          Fail ("could not copy import library to library dir");
-       end if;
- 
-       --  Delete files
- 
-       Delete_File (DLL_File, Success);
- 
-       if not Success then
-          Fail ("could not delete DLL from build dir");
-       end if;
- 
-       Delete_File (Imp_File, Success);
- 
-       if not Success then
-          Fail ("could not delete import library from build dir");
-       end if;
-    end Build_Dynamic_Library;
- 
-    -------------------------
-    -- Default_DLL_Address --
-    -------------------------
- 
-    function Default_DLL_Address return String is
-    begin
-       return "0x11000000";
-    end Default_DLL_Address;
- 
-    -------------
-    -- DLL_Ext --
-    -------------
- 
-    function DLL_Ext return String is
-    begin
-       return "dll";
-    end DLL_Ext;
- 
-    --------------------
-    -- Dynamic_Option --
-    --------------------
- 
-    function Dynamic_Option return String is
-    begin
-       return "";
-    end Dynamic_Option;
- 
-    -------------------
-    -- Is_Object_Ext --
-    -------------------
- 
-    function Is_Object_Ext (Ext : String) return Boolean is
-    begin
-       return Ext = ".o";
-    end Is_Object_Ext;
- 
-    --------------
-    -- Is_C_Ext --
-    --------------
- 
-    function Is_C_Ext (Ext : String) return Boolean is
-    begin
-       return Ext = ".c";
-    end Is_C_Ext;
- 
-    --------------------
-    -- Is_Archive_Ext --
-    --------------------
- 
-    function Is_Archive_Ext (Ext : String) return Boolean is
-    begin
-       return Ext = ".a";
-    end Is_Archive_Ext;
- 
-    -------------
-    -- Libgnat --
-    -------------
- 
-    function Libgnat return String is
-    begin
-       return "libgnat.a";
-    end Libgnat;
- 
-    ------------------------
-    -- Library_Exists_For --
-    ------------------------
- 
-    function Library_Exists_For (Project : Project_Id) return Boolean is
-    begin
-       if not Projects.Table (Project).Library then
-          Prj.Com.Fail ("INTERNAL ERROR: Library_Exists_For called " &
-                        "for non library project");
-          return False;
- 
-       else
-          declare
-             Lib_Dir : constant String :=
-               Get_Name_String (Projects.Table (Project).Library_Dir);
-             Lib_Name : constant String :=
-               Get_Name_String (Projects.Table (Project).Library_Name);
- 
-          begin
-             if Projects.Table (Project).Library_Kind = Static then
- 
-                --  Static libraries are named : lib<name>.a
- 
-                return Is_Regular_File
-                  (Lib_Dir & Directory_Separator & "lib" &
-                   MLib.Fil.Ext_To (Lib_Name, Archive_Ext));
- 
-             else
-                --  Shared libraries are named : <name>.dll
- 
-                return Is_Regular_File
-                  (Lib_Dir & Directory_Separator &
-                   MLib.Fil.Ext_To (Lib_Name, DLL_Ext));
-             end if;
-          end;
-       end if;
-    end Library_Exists_For;
- 
-    ---------------------------
-    -- Library_File_Name_For --
-    ---------------------------
- 
-    function Library_File_Name_For (Project : Project_Id) return Name_Id is
-    begin
-       if not Projects.Table (Project).Library then
-          Prj.Com.Fail ("INTERNAL ERROR: Library_File_Name_For called " &
-                        "for non library project");
-          return No_Name;
- 
-       else
-          declare
-             Lib_Name : constant String :=
-                          Get_Name_String
-                            (Projects.Table (Project).Library_Name);
- 
-          begin
-             if Projects.Table (Project).Library_Kind = Static then
- 
-                --  Static libraries are named : lib<name>.a
- 
-                Name_Len := 3;
-                Name_Buffer (1 .. Name_Len) := "lib";
- 
-                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, Archive_Ext));
- 
-             else
-                --  Shared libraries are named : <name>.dll
- 
-                Name_Len := 0;
-                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, DLL_Ext));
-             end if;
- 
-             return Name_Find;
-          end;
-       end if;
-    end Library_File_Name_For;
- 
-    --------------------------------
-    -- Linker_Library_Path_Option --
-    --------------------------------
- 
-    function Linker_Library_Path_Option return String_Access is
-    begin
-       return null;
-    end Linker_Library_Path_Option;
- 
-    ----------------
-    -- Object_Ext --
-    ----------------
- 
-    function Object_Ext return String is
-    begin
-       return "o";
-    end Object_Ext;
- 
-    ----------------
-    -- PIC_Option --
-    ----------------
- 
-    function PIC_Option return String is
-    begin
-       return "";
-    end PIC_Option;
- 
-    -----------------------------------------------
-    -- Standalone_Library_Auto_Init_Is_Supported --
-    -----------------------------------------------
- 
-    function Standalone_Library_Auto_Init_Is_Supported return Boolean is
-    begin
-       return False;
-    end Standalone_Library_Auto_Init_Is_Supported;
- 
-    ---------------------------
-    -- Support_For_Libraries --
-    ---------------------------
- 
-    function Support_For_Libraries return Library_Support is
-    begin
-       return Full;
-    end Support_For_Libraries;
- 
- end MLib.Tgt;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5wosinte.ads gcc-4.0.0/gcc/ada/5wosinte.ads
*** gcc-3.4.3/gcc/ada/5wosinte.ads	Thu Dec 11 16:21:39 2003
--- gcc-4.0.0/gcc/ada/5wosinte.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,443 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   S Y S T E M . O S _ I N T E R F A C E                  --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --         Copyright (C) 1997-2003, Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a NT (native) version of this package.
- 
- --  This package encapsulates all direct interfaces to OS services
- --  that are needed by children of System.
- 
- --  PLEASE DO NOT add any with-clauses to this package
- --  or remove the pragma Elaborate_Body.
- --  It is designed to be a bottom-level (leaf) package.
- 
- with Interfaces.C;
- with Interfaces.C.Strings;
- 
- package System.OS_Interface is
- pragma Preelaborate;
- 
-    pragma Linker_Options ("-mthreads");
- 
-    subtype int  is Interfaces.C.int;
-    subtype long is Interfaces.C.long;
- 
-    -------------------
-    -- General Types --
-    -------------------
- 
-    type DWORD is new Interfaces.C.unsigned_long;
-    type WORD  is new Interfaces.C.unsigned_short;
- 
-    --  The LARGE_INTEGER type is actually a fixed point type
-    --  that only can represent integers. The reason for this is
-    --  easier conversion to Duration or other fixed point types.
-    --  (See Operations.Clock)
- 
-    type LARGE_INTEGER is delta 1.0 range -2.0**63 .. 2.0**63 - 1.0;
- 
-    subtype PSZ   is Interfaces.C.Strings.chars_ptr;
-    subtype PCHAR is Interfaces.C.Strings.chars_ptr;
-    subtype PVOID is System.Address;
-    Null_Void   : constant PVOID := System.Null_Address;
- 
-    type PLONG  is access all Interfaces.C.long;
-    type PDWORD is access all DWORD;
- 
-    type BOOL is new Boolean;
-    for BOOL'Size use Interfaces.C.unsigned_long'Size;
- 
-    -------------------------
-    -- Handles for objects --
-    -------------------------
- 
-    type HANDLE is new Interfaces.C.long;
-    type PHANDLE is access all HANDLE;
- 
-    subtype Thread_Id is HANDLE;
- 
-    -----------
-    -- Errno --
-    -----------
- 
-    NO_ERROR : constant := 0;
-    FUNC_ERR : constant := -1;
- 
-    -------------
-    -- Signals --
-    -------------
- 
-    Max_Interrupt : constant := 31;
-    type Signal is new int range 0 .. Max_Interrupt;
-    for Signal'Size use int'Size;
- 
-    SIGINT     : constant := 2; --  interrupt (Ctrl-C)
-    SIGILL     : constant := 4; --  illegal instruction (not reset)
-    SIGFPE     : constant := 8; --  floating point exception
-    SIGSEGV    : constant := 11; -- segmentation violation
-    SIGTERM    : constant := 15; -- software termination signal from kill
-    SIGBREAK   : constant := 21; -- break (Ctrl-Break)
-    SIGABRT    : constant := 22; -- used by abort, replace SIGIOT in the future
- 
-    type sigset_t is private;
- 
-    type isr_address is access procedure (sig : int);
- 
-    function intr_attach (sig : int; handler : isr_address) return long;
-    pragma Import (C, intr_attach, "signal");
- 
-    Intr_Attach_Reset : constant Boolean := True;
-    --  True if intr_attach is reset after an interrupt handler is called
- 
-    procedure kill (sig : Signal);
-    pragma Import (C, kill, "raise");
- 
-    ---------------------
-    -- Time Management --
-    ---------------------
- 
-    procedure Sleep (dwMilliseconds : DWORD);
-    pragma Import (Stdcall, Sleep, External_Name => "Sleep");
- 
-    type SYSTEMTIME is record
-       wYear         : WORD;
-       wMonth        : WORD;
-       wDayOfWeek    : WORD;
-       wDay          : WORD;
-       wHour         : WORD;
-       wMinute       : WORD;
-       wSecond       : WORD;
-       wMilliseconds : WORD;
-    end record;
- 
-    procedure GetSystemTime (pSystemTime : access SYSTEMTIME);
-    pragma Import (Stdcall, GetSystemTime, "GetSystemTime");
- 
-    procedure GetSystemTimeAsFileTime (lpFileTime : access Long_Long_Integer);
-    pragma Import (Stdcall, GetSystemTimeAsFileTime, "GetSystemTimeAsFileTime");
- 
-    function SetSystemTime (pSystemTime : access SYSTEMTIME) return BOOL;
-    pragma Import (Stdcall, SetSystemTime, "SetSystemTime");
- 
-    function FileTimeToSystemTime
-      (lpFileTime   : access Long_Long_Integer;
-       lpSystemTime : access SYSTEMTIME) return BOOL;
-    pragma Import (Stdcall, FileTimeToSystemTime, "FileTimeToSystemTime");
- 
-    function SystemTimeToFileTime
-      (lpSystemTime : access SYSTEMTIME;
-       lpFileTime   : access Long_Long_Integer) return BOOL;
-    pragma Import (Stdcall, SystemTimeToFileTime, "SystemTimeToFileTime");
- 
-    function FileTimeToLocalFileTime
-      (lpFileTime      : access Long_Long_Integer;
-       lpLocalFileTime : access Long_Long_Integer) return BOOL;
-    pragma Import (Stdcall, FileTimeToLocalFileTime, "FileTimeToLocalFileTime");
- 
-    function LocalFileTimeToFileTime
-      (lpFileTime      : access Long_Long_Integer;
-       lpLocalFileTime : access Long_Long_Integer) return BOOL;
-    pragma Import (Stdcall, LocalFileTimeToFileTime, "LocalFileTimeToFileTime");
- 
-    function QueryPerformanceCounter
-      (lpPerformanceCount : access LARGE_INTEGER) return BOOL;
-    pragma Import
-      (Stdcall, QueryPerformanceCounter, "QueryPerformanceCounter");
- 
-    function QueryPerformanceFrequency
-      (lpFrequency : access LARGE_INTEGER) return BOOL;
-    pragma Import
-      (Stdcall, QueryPerformanceFrequency, "QueryPerformanceFrequency");
- 
-    -------------
-    -- Threads --
-    -------------
- 
-    type Thread_Body is access
-      function (arg : System.Address) return System.Address;
- 
-    procedure SwitchToThread;
-    pragma Import (Stdcall, SwitchToThread, "SwitchToThread");
- 
-    -----------------------
-    -- Critical sections --
-    -----------------------
- 
-    type CRITICAL_SECTION is private;
-    type PCRITICAL_SECTION is access all CRITICAL_SECTION;
- 
-    procedure InitializeCriticalSection (pCriticalSection : PCRITICAL_SECTION);
-    pragma Import
-      (Stdcall, InitializeCriticalSection, "InitializeCriticalSection");
- 
-    procedure EnterCriticalSection (pCriticalSection : PCRITICAL_SECTION);
-    pragma Import (Stdcall, EnterCriticalSection, "EnterCriticalSection");
- 
-    procedure LeaveCriticalSection (pCriticalSection : PCRITICAL_SECTION);
-    pragma Import (Stdcall, LeaveCriticalSection, "LeaveCriticalSection");
- 
-    procedure DeleteCriticalSection (pCriticalSection : PCRITICAL_SECTION);
-    pragma Import (Stdcall, DeleteCriticalSection, "DeleteCriticalSection");
- 
-    -------------------------------------------------------------
-    -- Thread Creation, Activation, Suspension And Termination --
-    -------------------------------------------------------------
- 
-    type PTHREAD_START_ROUTINE is access function
-      (pThreadParameter : PVOID) return DWORD;
-    pragma Convention (Stdcall, PTHREAD_START_ROUTINE);
- 
-    type SECURITY_ATTRIBUTES is record
-       nLength              : DWORD;
-       pSecurityDescriptor  : PVOID;
-       bInheritHandle       : BOOL;
-    end record;
- 
-    type PSECURITY_ATTRIBUTES is access all SECURITY_ATTRIBUTES;
- 
-    function CreateThread
-      (pThreadAttributes    : PSECURITY_ATTRIBUTES;
-       dwStackSize          : DWORD;
-       pStartAddress        : PTHREAD_START_ROUTINE;
-       pParameter           : PVOID;
-       dwCreationFlags      : DWORD;
-       pThreadId            : PDWORD) return HANDLE;
-    pragma Import (Stdcall, CreateThread, "CreateThread");
- 
-    function BeginThreadEx
-      (pThreadAttributes    : PSECURITY_ATTRIBUTES;
-       dwStackSize          : DWORD;
-       pStartAddress        : PTHREAD_START_ROUTINE;
-       pParameter           : PVOID;
-       dwCreationFlags      : DWORD;
-       pThreadId            : PDWORD) return HANDLE;
-    pragma Import (C, BeginThreadEx, "_beginthreadex");
- 
-    Debug_Process              : constant := 16#00000001#;
-    Debug_Only_This_Process    : constant := 16#00000002#;
-    Create_Suspended           : constant := 16#00000004#;
-    Detached_Process           : constant := 16#00000008#;
-    Create_New_Console         : constant := 16#00000010#;
- 
-    Create_New_Process_Group   : constant := 16#00000200#;
- 
-    Create_No_window           : constant := 16#08000000#;
- 
-    Profile_User               : constant := 16#10000000#;
-    Profile_Kernel             : constant := 16#20000000#;
-    Profile_Server             : constant := 16#40000000#;
- 
-    function GetExitCodeThread
-      (hThread   : HANDLE;
-       pExitCode : PDWORD) return BOOL;
-    pragma Import (Stdcall, GetExitCodeThread, "GetExitCodeThread");
- 
-    function ResumeThread (hThread : HANDLE) return DWORD;
-    pragma Import (Stdcall, ResumeThread, "ResumeThread");
- 
-    function SuspendThread (hThread : HANDLE) return DWORD;
-    pragma Import (Stdcall, SuspendThread, "SuspendThread");
- 
-    procedure ExitThread (dwExitCode : DWORD);
-    pragma Import (Stdcall, ExitThread, "ExitThread");
- 
-    procedure EndThreadEx (dwExitCode : DWORD);
-    pragma Import (C, EndThreadEx, "_endthreadex");
- 
-    function TerminateThread
-      (hThread    : HANDLE;
-       dwExitCode : DWORD) return BOOL;
-    pragma Import (Stdcall, TerminateThread, "TerminateThread");
- 
-    function GetCurrentThread return HANDLE;
-    pragma Import (Stdcall, GetCurrentThread, "GetCurrentThread");
- 
-    function GetCurrentProcess return HANDLE;
-    pragma Import (Stdcall, GetCurrentProcess, "GetCurrentProcess");
- 
-    function GetCurrentThreadId return DWORD;
-    pragma Import (Stdcall, GetCurrentThreadId, "GetCurrentThreadId");
- 
-    function TlsAlloc return DWORD;
-    pragma Import (Stdcall, TlsAlloc, "TlsAlloc");
- 
-    function TlsGetValue (dwTlsIndex : DWORD) return PVOID;
-    pragma Import (Stdcall, TlsGetValue, "TlsGetValue");
- 
-    function TlsSetValue (dwTlsIndex : DWORD; pTlsValue : PVOID) return BOOL;
-    pragma Import (Stdcall, TlsSetValue, "TlsSetValue");
- 
-    function TlsFree (dwTlsIndex : DWORD) return BOOL;
-    pragma Import (Stdcall, TlsFree, "TlsFree");
- 
-    TLS_Nothing : constant := DWORD'Last;
- 
-    procedure ExitProcess (uExitCode : Interfaces.C.unsigned);
-    pragma Import (Stdcall, ExitProcess, "ExitProcess");
- 
-    function WaitForSingleObject
-      (hHandle        : HANDLE;
-       dwMilliseconds : DWORD) return DWORD;
-    pragma Import (Stdcall, WaitForSingleObject, "WaitForSingleObject");
- 
-    function WaitForSingleObjectEx
-      (hHandle        : HANDLE;
-       dwMilliseconds : DWORD;
-       fAlertable     : BOOL) return DWORD;
-    pragma Import (Stdcall, WaitForSingleObjectEx, "WaitForSingleObjectEx");
- 
-    Wait_Infinite : constant := DWORD'Last;
-    WAIT_TIMEOUT  : constant := 16#0000_0102#;
-    WAIT_FAILED   : constant := 16#FFFF_FFFF#;
- 
-    ------------------------------------
-    -- Semaphores, Events and Mutexes --
-    ------------------------------------
- 
-    function CloseHandle (hObject : HANDLE) return BOOL;
-    pragma Import (Stdcall, CloseHandle, "CloseHandle");
- 
-    function CreateSemaphore
-      (pSemaphoreAttributes : PSECURITY_ATTRIBUTES;
-       lInitialCount        : Interfaces.C.long;
-       lMaximumCount        : Interfaces.C.long;
-       pName                : PSZ) return HANDLE;
-    pragma Import (Stdcall, CreateSemaphore, "CreateSemaphoreA");
- 
-    function OpenSemaphore
-      (dwDesiredAccess : DWORD;
-       bInheritHandle  : BOOL;
-       pName           : PSZ) return HANDLE;
-    pragma Import (Stdcall, OpenSemaphore, "OpenSemaphoreA");
- 
-    function ReleaseSemaphore
-      (hSemaphore     : HANDLE;
-       lReleaseCount  : Interfaces.C.long;
-       pPreviousCount : PLONG) return BOOL;
-    pragma Import (Stdcall, ReleaseSemaphore, "ReleaseSemaphore");
- 
-    function CreateEvent
-      (pEventAttributes : PSECURITY_ATTRIBUTES;
-       bManualReset     : BOOL;
-       bInitialState    : BOOL;
-       pName            : PSZ) return HANDLE;
-    pragma Import (Stdcall, CreateEvent, "CreateEventA");
- 
-    function OpenEvent
-      (dwDesiredAccess : DWORD;
-       bInheritHandle  : BOOL;
-       pName           : PSZ) return HANDLE;
-    pragma Import (Stdcall, OpenEvent, "OpenEventA");
- 
-    function SetEvent (hEvent : HANDLE) return BOOL;
-    pragma Import (Stdcall, SetEvent, "SetEvent");
- 
-    function ResetEvent (hEvent : HANDLE) return BOOL;
-    pragma Import (Stdcall, ResetEvent, "ResetEvent");
- 
-    function PulseEvent (hEvent : HANDLE) return BOOL;
-    pragma Import (Stdcall, PulseEvent, "PulseEvent");
- 
-    function CreateMutex
-      (pMutexAttributes : PSECURITY_ATTRIBUTES;
-       bInitialOwner    : BOOL;
-       pName            : PSZ) return HANDLE;
-    pragma Import (Stdcall, CreateMutex, "CreateMutexA");
- 
-    function OpenMutex
-      (dwDesiredAccess : DWORD;
-       bInheritHandle  : BOOL;
-       pName           : PSZ) return HANDLE;
-    pragma Import (Stdcall, OpenMutex, "OpenMutexA");
- 
-    function ReleaseMutex (hMutex : HANDLE) return BOOL;
-    pragma Import (Stdcall, ReleaseMutex, "ReleaseMutex");
- 
-    ---------------------------------------------------
-    -- Accessing properties of Threads and Processes --
-    ---------------------------------------------------
- 
-    -----------------
-    --  Priorities --
-    -----------------
- 
-    function SetThreadPriority
-      (hThread   : HANDLE;
-       nPriority : Interfaces.C.int) return BOOL;
-    pragma Import (Stdcall, SetThreadPriority, "SetThreadPriority");
- 
-    function GetThreadPriority (hThread : HANDLE) return Interfaces.C.int;
-    pragma Import (Stdcall, GetThreadPriority, "GetThreadPriority");
- 
-    function SetPriorityClass
-      (hProcess        : HANDLE;
-       dwPriorityClass : DWORD) return BOOL;
-    pragma Import (Stdcall, SetPriorityClass, "SetPriorityClass");
- 
-    procedure SetThreadPriorityBoost
-      (hThread              : HANDLE;
-       DisablePriorityBoost : BOOL);
-    pragma Import (Stdcall, SetThreadPriorityBoost, "SetThreadPriorityBoost");
- 
-    Normal_Priority_Class   : constant := 16#00000020#;
-    Idle_Priority_Class     : constant := 16#00000040#;
-    High_Priority_Class     : constant := 16#00000080#;
-    Realtime_Priority_Class : constant := 16#00000100#;
- 
-    Thread_Priority_Idle          : constant := -15;
-    Thread_Priority_Lowest        : constant := -2;
-    Thread_Priority_Below_Normal  : constant := -1;
-    Thread_Priority_Normal        : constant := 0;
-    Thread_Priority_Above_Normal  : constant := 1;
-    Thread_Priority_Highest       : constant := 2;
-    Thread_Priority_Time_Critical : constant := 15;
-    Thread_Priority_Error_Return  : constant := Interfaces.C.long'Last;
- 
-    function GetLastError return DWORD;
-    pragma Import (Stdcall, GetLastError, "GetLastError");
- 
- private
- 
-    type sigset_t is new Interfaces.C.unsigned_long;
- 
-    type CRITICAL_SECTION is record
-       DebugInfo      : System.Address;
-       --  The following three fields control entering and
-       --  exiting the critical section for the resource
-       LockCount      : Long_Integer;
-       RecursionCount : Long_Integer;
-       OwningThread   : HANDLE;
-       LockSemaphore  : HANDLE;
-       Reserved       : DWORD;
-    end record;
- 
- end System.OS_Interface;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5wosprim.adb gcc-4.0.0/gcc/ada/5wosprim.adb
*** gcc-3.4.3/gcc/ada/5wosprim.adb	Mon Jan  5 15:20:43 2004
--- gcc-4.0.0/gcc/ada/5wosprim.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,286 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                  S Y S T E M . O S _ P R I M I T I V E S                 --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --          Copyright (C) 1998-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the NT version of this package
- 
- with Ada.Exceptions;
- with Interfaces.C;
- 
- package body System.OS_Primitives is
- 
-    ---------------------------
-    -- Win32 API Definitions --
-    ---------------------------
- 
-    --  These definitions are copied from System.OS_Interface because we do not
-    --  want to depend on gnarl here.
- 
-    type DWORD is new Interfaces.C.unsigned_long;
- 
-    type LARGE_INTEGER is delta 1.0 range -2.0**63 .. 2.0**63 - 1.0;
- 
-    type BOOL is new Boolean;
-    for BOOL'Size use Interfaces.C.unsigned_long'Size;
- 
-    procedure GetSystemTimeAsFileTime (lpFileTime : access Long_Long_Integer);
-    pragma Import (Stdcall, GetSystemTimeAsFileTime, "GetSystemTimeAsFileTime");
- 
-    function QueryPerformanceCounter
-      (lpPerformanceCount : access LARGE_INTEGER) return BOOL;
-    pragma Import
-      (Stdcall, QueryPerformanceCounter, "QueryPerformanceCounter");
- 
-    function QueryPerformanceFrequency
-      (lpFrequency : access LARGE_INTEGER) return BOOL;
-    pragma Import
-      (Stdcall, QueryPerformanceFrequency, "QueryPerformanceFrequency");
- 
-    procedure Sleep (dwMilliseconds : DWORD);
-    pragma Import (Stdcall, Sleep, External_Name => "Sleep");
- 
-    ----------------------------------------
-    -- Data for the high resolution clock --
-    ----------------------------------------
- 
-    --  Declare some pointers to access multi-word data above. This is needed
-    --  to workaround a limitation in the GNU/Linker auto-import feature used
-    --  to build the GNAT runtime DLLs. In fact the Clock and Monotonic_Clock
-    --  routines are inlined and they are using some multi-word variables.
-    --  GNU/Linker will fail to auto-import those variables when building
-    --  libgnarl.dll. The indirection level introduced here has no measurable
-    --  penalties.
-    --
-    --  Note that access variables below must not be declared as constant
-    --  otherwise the compiler optimization will remove this indirect access.
- 
-    type DA is access all Duration;
-    --  Use to have indirect access to multi-word variables
- 
-    type LIA is access all LARGE_INTEGER;
-    --  Use to have indirect access to multi-word variables
- 
-    type LLIA is access all Long_Long_Integer;
-    --  Use to have indirect access to multi-word variables
- 
-    Tick_Frequency : aliased LARGE_INTEGER;
-    TFA : constant LIA := Tick_Frequency'Access;
-    --  Holds frequency of high-performance counter used by Clock
-    --  Windows NT uses a 1_193_182 Hz counter on PCs.
- 
-    Base_Ticks : aliased LARGE_INTEGER;
-    BTA : constant LIA := Base_Ticks'Access;
-    --  Holds the Tick count for the base time.
- 
-    Base_Monotonic_Ticks : aliased LARGE_INTEGER;
-    BMTA : constant LIA := Base_Monotonic_Ticks'Access;
-    --  Holds the Tick count for the base monotonic time
- 
-    Base_Clock : aliased Duration;
-    BCA : constant DA := Base_Clock'Access;
-    --  Holds the current clock for the standard clock's base time
- 
-    Base_Monotonic_Clock : aliased Duration;
-    BMCA : constant DA := Base_Monotonic_Clock'Access;
-    --  Holds the current clock for monotonic clock's base time
- 
-    Base_Time : aliased Long_Long_Integer;
-    BTiA : constant LLIA := Base_Time'Access;
-    --  Holds the base time used to check for system time change, used with
-    --  the standard clock.
- 
-    procedure Get_Base_Time;
-    --  Retrieve the base time and base ticks. These values will be used by
-    --  clock to compute the current time by adding to it a fraction of the
-    --  performance counter. This is for the implementation of a
-    --  high-resolution clock. Note that this routine does not change the base
-    --  monotonic values used by the monotonic clock.
- 
-    -----------
-    -- Clock --
-    -----------
- 
-    --  This implementation of clock provides high resolution timer values
-    --  using QueryPerformanceCounter. This call return a 64 bits values (based
-    --  on the 8253 16 bits counter). This counter is updated every 1/1_193_182
-    --  times per seconds. The call to QueryPerformanceCounter takes 6
-    --  microsecs to complete.
- 
-    function Clock return Duration is
-       Max_Shift            : constant Duration        := 2.0;
-       Hundreds_Nano_In_Sec : constant Long_Long_Float := 1.0E7;
-       Current_Ticks        : aliased LARGE_INTEGER;
-       Elap_Secs_Tick       : Duration;
-       Elap_Secs_Sys        : Duration;
-       Now                  : aliased Long_Long_Integer;
- 
-    begin
-       if not QueryPerformanceCounter (Current_Ticks'Access) then
-          return 0.0;
-       end if;
- 
-       GetSystemTimeAsFileTime (Now'Access);
- 
-       Elap_Secs_Sys :=
-         Duration (Long_Long_Float (abs (Now - BTiA.all)) /
-                     Hundreds_Nano_In_Sec);
- 
-       Elap_Secs_Tick :=
-         Duration (Long_Long_Float (Current_Ticks - BTA.all) /
-                   Long_Long_Float (TFA.all));
- 
-       --  If we have a shift of more than Max_Shift seconds we resynchonize the
-       --  Clock. This is probably due to a manual Clock adjustment, an DST
-       --  adjustment or an NTP synchronisation. And we want to adjust the
-       --  time for this system (non-monotonic) clock.
- 
-       if abs (Elap_Secs_Sys - Elap_Secs_Tick) > Max_Shift then
-          Get_Base_Time;
- 
-          Elap_Secs_Tick :=
-            Duration (Long_Long_Float (Current_Ticks - BTA.all) /
-                      Long_Long_Float (TFA.all));
-       end if;
- 
-       return BCA.all + Elap_Secs_Tick;
-    end Clock;
- 
-    -------------------
-    -- Get_Base_Time --
-    -------------------
- 
-    procedure Get_Base_Time is
-       --  The resolution for GetSystemTime is 1 millisecond.
- 
-       --  The time to get both base times should take less than 1 millisecond.
-       --  Therefore, the elapsed time reported by GetSystemTime between both
-       --  actions should be null.
- 
-       Max_Elapsed    : constant := 0;
- 
-       Test_Now       : aliased Long_Long_Integer;
- 
-       epoch_1970     : constant := 16#19D_B1DE_D53E_8000#; -- win32 UTC epoch
-       system_time_ns : constant := 100;                    -- 100 ns per tick
-       Sec_Unit       : constant := 10#1#E9;
- 
-    begin
-       --  Here we must be sure that both of these calls are done in a short
-       --  amount of time. Both are base time and should in theory be taken
-       --  at the very same time.
- 
-       loop
-          GetSystemTimeAsFileTime (Base_Time'Access);
- 
-          if not QueryPerformanceCounter (Base_Ticks'Access) then
-             pragma Assert
-               (Standard.False,
-                "Could not query high performance counter in Clock");
-             null;
-          end if;
- 
-          GetSystemTimeAsFileTime (Test_Now'Access);
- 
-          exit when Test_Now - Base_Time = Max_Elapsed;
-       end loop;
- 
-       Base_Clock := Duration
-         (Long_Long_Float ((Base_Time - epoch_1970) * system_time_ns) /
-          Long_Long_Float (Sec_Unit));
-    end Get_Base_Time;
- 
-    ---------------------
-    -- Monotonic_Clock --
-    ---------------------
- 
-    function Monotonic_Clock return Duration is
-       Current_Ticks  : aliased LARGE_INTEGER;
-       Elap_Secs_Tick : Duration;
-    begin
-       if not QueryPerformanceCounter (Current_Ticks'Access) then
-          return 0.0;
-       end if;
- 
-       Elap_Secs_Tick :=
-         Duration (Long_Long_Float (Current_Ticks - BMTA.all) /
-                   Long_Long_Float (TFA.all));
- 
-       return BMCA.all + Elap_Secs_Tick;
-    end Monotonic_Clock;
- 
-    -----------------
-    -- Timed_Delay --
-    -----------------
- 
-    procedure Timed_Delay (Time : Duration; Mode : Integer) is
-       Rel_Time   : Duration;
-       Abs_Time   : Duration;
-       Check_Time : Duration := Monotonic_Clock;
- 
-    begin
-       if Mode = Relative then
-          Rel_Time := Time;
-          Abs_Time := Time + Check_Time;
-       else
-          Rel_Time := Time - Check_Time;
-          Abs_Time := Time;
-       end if;
- 
-       if Rel_Time > 0.0 then
-          loop
-             Sleep (DWORD (Rel_Time * 1000.0));
-             Check_Time := Monotonic_Clock;
- 
-             exit when Abs_Time <= Check_Time;
- 
-             Rel_Time := Abs_Time - Check_Time;
-          end loop;
-       end if;
-    end Timed_Delay;
- 
- --  Package elaboration, get starting time as base
- 
- begin
-    if not QueryPerformanceFrequency (Tick_Frequency'Access) then
-       Ada.Exceptions.Raise_Exception
-         (Program_Error'Identity,
-          "cannot get high performance counter frequency");
-    end if;
- 
-    Get_Base_Time;
- 
-    --  Keep base clock and ticks for the monotonic clock. These values should
-    --  never be changed to ensure proper behavior of the monotonic clock.
- 
-    Base_Monotonic_Clock := Base_Clock;
-    Base_Monotonic_Ticks := Base_Ticks;
- end System.OS_Primitives;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5wsystem.ads gcc-4.0.0/gcc/ada/5wsystem.ads
*** gcc-3.4.3/gcc/ada/5wsystem.ads	Mon Dec  1 09:39:57 2003
--- gcc-4.0.0/gcc/ada/5wsystem.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,208 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                        GNAT RUN-TIME COMPONENTS                          --
- --                                                                          --
- --                               S Y S T E M                                --
- --                                                                          --
- --                                 S p e c                                  --
- --                               (NT Version)                               --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the  contents of the part following the private keyword. --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- package System is
- pragma Pure (System);
- --  Note that we take advantage of the implementation permission to
- --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
- 
-    type Name is (SYSTEM_NAME_GNAT);
-    System_Name : constant Name := SYSTEM_NAME_GNAT;
- 
-    --  System-Dependent Named Numbers
- 
-    Min_Int               : constant := Long_Long_Integer'First;
-    Max_Int               : constant := Long_Long_Integer'Last;
- 
-    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
-    Max_Nonbinary_Modulus : constant := Integer'Last;
- 
-    Max_Base_Digits       : constant := Long_Long_Float'Digits;
-    Max_Digits            : constant := Long_Long_Float'Digits;
- 
-    Max_Mantissa          : constant := 63;
-    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
- 
-    Tick                  : constant := 0.01;
- 
-    --  Storage-related Declarations
- 
-    type Address is private;
-    Null_Address : constant Address;
- 
-    Storage_Unit : constant := 8;
-    Word_Size    : constant := 32;
-    Memory_Size  : constant := 2 ** 32;
- 
-    --  Address comparison
- 
-    function "<"  (Left, Right : Address) return Boolean;
-    function "<=" (Left, Right : Address) return Boolean;
-    function ">"  (Left, Right : Address) return Boolean;
-    function ">=" (Left, Right : Address) return Boolean;
-    function "="  (Left, Right : Address) return Boolean;
- 
-    pragma Import (Intrinsic, "<");
-    pragma Import (Intrinsic, "<=");
-    pragma Import (Intrinsic, ">");
-    pragma Import (Intrinsic, ">=");
-    pragma Import (Intrinsic, "=");
- 
-    --  Other System-Dependent Declarations
- 
-    type Bit_Order is (High_Order_First, Low_Order_First);
-    Default_Bit_Order : constant Bit_Order := Low_Order_First;
- 
-    --  Priority-related Declarations (RM D.1)
- 
-    Max_Priority           : constant Positive := 30;
-    Max_Interrupt_Priority : constant Positive := 31;
- 
-    subtype Any_Priority       is Integer      range  0 .. 31;
-    subtype Priority           is Any_Priority range  0 .. 30;
-    subtype Interrupt_Priority is Any_Priority range 31 .. 31;
- 
-    Default_Priority : constant Priority := 15;
- 
- private
- 
-    type Address is mod Memory_Size;
-    Null_Address : constant Address := 0;
- 
-    --------------------------------------
-    -- System Implementation Parameters --
-    --------------------------------------
- 
-    --  These parameters provide information about the target that is used
-    --  by the compiler. They are in the private part of System, where they
-    --  can be accessed using the special circuitry in the Targparm unit
-    --  whose source should be consulted for more detailed descriptions
-    --  of the individual switch values.
- 
-    AAMP                      : constant Boolean := False;
-    Backend_Divide_Checks     : constant Boolean := False;
-    Backend_Overflow_Checks   : constant Boolean := False;
-    Command_Line_Args         : constant Boolean := True;
-    Configurable_Run_Time     : constant Boolean := False;
-    Denorm                    : constant Boolean := True;
-    Duration_32_Bits          : constant Boolean := False;
-    Exit_Status_Supported     : constant Boolean := True;
-    Fractional_Fixed_Ops      : constant Boolean := False;
-    Frontend_Layout           : constant Boolean := False;
-    Functions_Return_By_DSP   : constant Boolean := False;
-    Machine_Overflows         : constant Boolean := False;
-    Machine_Rounds            : constant Boolean := True;
-    OpenVMS                   : constant Boolean := False;
-    Signed_Zeros              : constant Boolean := True;
-    Stack_Check_Default       : constant Boolean := False;
-    Stack_Check_Probes        : constant Boolean := False;
-    Support_64_Bit_Divides    : constant Boolean := True;
-    Support_Aggregates        : constant Boolean := True;
-    Support_Composite_Assign  : constant Boolean := True;
-    Support_Composite_Compare : constant Boolean := True;
-    Support_Long_Shifts       : constant Boolean := True;
-    Suppress_Standard_Library : constant Boolean := False;
-    Use_Ada_Main_Program_Name : constant Boolean := False;
-    ZCX_By_Default            : constant Boolean := False;
-    GCC_ZCX_Support           : constant Boolean := False;
-    Front_End_ZCX_Support     : constant Boolean := False;
- 
-    --  Obsolete entries, to be removed eventually (bootstrap issues!)
- 
-    High_Integrity_Mode       : constant Boolean := False;
-    Long_Shifts_Inlined       : constant Boolean := False;
- 
-    ---------------------------
-    -- Underlying Priorities --
-    ---------------------------
- 
-    --  Important note: this section of the file must come AFTER the
-    --  definition of the system implementation parameters to ensure
-    --  that the value of these parameters is available for analysis
-    --  of the declarations here (using Rtsfind at compile time).
- 
-    --  The underlying priorities table provides a generalized mechanism
-    --  for mapping from Ada priorities to system priorities. In some
-    --  cases a 1-1 mapping is not the convenient or optimal choice.
- 
-    type Priorities_Mapping is array (Any_Priority) of Integer;
-    pragma Suppress_Initialization (Priorities_Mapping);
-    --  Suppress initialization in case gnat.adc specifies Normalize_Scalars
- 
-    --  On NT, the default mapping preserves the standard 31 priorities
-    --  of the Ada model, but maps them using compression onto the 7
-    --  priority levels available in NT.
- 
-    --  To replace the default values of the Underlying_Priorities mapping,
-    --  copy this source file into your build directory, edit the file to
-    --  reflect your desired behavior, and recompile with the command:
- 
-    --     $ gcc -c -O3 -gnatpgn system.ads
- 
-    --  then recompile the run-time parts that depend on this package:
- 
-    --     $ gnatmake -a -gnatn -O3 <your application>
- 
-    --  then force rebuilding your application if you need different options:
- 
-    --     $ gnatmake -f <your options> <your application>
- 
-    Underlying_Priorities : constant Priorities_Mapping :=
- 
-      (Priority'First .. 1        => -15,
- 
-       2 .. Default_Priority - 2  => -2,
- 
-       Default_Priority - 1       => -1,
- 
-       Default_Priority           => 0,
- 
-       Default_Priority + 1 .. 19 => 1,
- 
-       20 .. Priority'Last        => 2,
- 
-       Interrupt_Priority         => 15);
- 
-    pragma Linker_Options ("-Wl,--stack=0x2000000");
-    --  This is used to change the default stack (32 MB) size for non tasking
-    --  programs. We change this value for GNAT on Windows here because the
-    --  binutils on this platform have switched to a too low value for Ada
-    --  programs. Note that we also set the stack size for tasking programs in
-    --  System.Task_Primitives.Operations.
- 
- end System;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5wtaprop.adb gcc-4.0.0/gcc/ada/5wtaprop.adb
*** gcc-3.4.3/gcc/ada/5wtaprop.adb	Mon Jan  5 15:20:43 2004
--- gcc-4.0.0/gcc/ada/5wtaprop.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,1122 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --     S Y S T E M . T A S K _ P R I M I T I V E S . O P E R A T I O N S    --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --         Copyright (C) 1992-2003, Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a NT (native) version of this package
- 
- --  This package contains all the GNULL primitives that interface directly
- --  with the underlying OS.
- 
- pragma Polling (Off);
- --  Turn off polling, we do not want ATC polling to take place during
- --  tasking operations. It causes infinite loops and other problems.
- 
- with System.Tasking.Debug;
- --  used for Known_Tasks
- 
- with Interfaces.C;
- --  used for int
- --           size_t
- 
- with Interfaces.C.Strings;
- --  used for Null_Ptr
- 
- with System.OS_Interface;
- --  used for various type, constant, and operations
- 
- with System.Parameters;
- --  used for Size_Type
- 
- with System.Tasking;
- --  used for Ada_Task_Control_Block
- --           Task_ID
- 
- with System.Soft_Links;
- --  used for Defer/Undefer_Abort
- --       to initialize TSD for a C thread, in function Self
- 
- --  Note that we do not use System.Tasking.Initialization directly since
- --  this is a higher level package that we shouldn't depend on. For example
- --  when using the restricted run time, it is replaced by
- --  System.Tasking.Restricted.Initialization
- 
- with System.OS_Primitives;
- --  used for Delay_Modes
- 
- with System.Task_Info;
- --  used for Unspecified_Task_Info
- 
- with Unchecked_Conversion;
- with Unchecked_Deallocation;
- 
- package body System.Task_Primitives.Operations is
- 
-    use System.Tasking.Debug;
-    use System.Tasking;
-    use Interfaces.C;
-    use Interfaces.C.Strings;
-    use System.OS_Interface;
-    use System.Parameters;
-    use System.OS_Primitives;
- 
-    pragma Link_With ("-Xlinker --stack=0x800000,0x1000");
-    --  Change the stack size (8 MB) for tasking programs on Windows. This
-    --  permit to have more than 30 tasks running at the same time. Note that
-    --  we set the stack size for non tasking programs on System unit.
- 
-    package SSL renames System.Soft_Links;
- 
-    ----------------
-    -- Local Data --
-    ----------------
- 
-    Environment_Task_ID : Task_ID;
-    --  A variable to hold Task_ID for the environment task.
- 
-    Single_RTS_Lock : aliased RTS_Lock;
-    --  This is a lock to allow only one thread of control in the RTS at
-    --  a time; it is used to execute in mutual exclusion from all other tasks.
-    --  Used mainly in Single_Lock mode, but also to protect All_Tasks_List
- 
-    Time_Slice_Val : Integer;
-    pragma Import (C, Time_Slice_Val, "__gl_time_slice_val");
- 
-    Dispatching_Policy : Character;
-    pragma Import (C, Dispatching_Policy, "__gl_task_dispatching_policy");
- 
-    FIFO_Within_Priorities : constant Boolean := Dispatching_Policy = 'F';
-    --  Indicates whether FIFO_Within_Priorities is set.
- 
-    Foreign_Task_Elaborated : aliased Boolean := True;
-    --  Used to identified fake tasks (i.e., non-Ada Threads).
- 
-    ------------------------------------
-    -- The thread local storage index --
-    ------------------------------------
- 
-    TlsIndex : DWORD;
-    pragma Export (Ada, TlsIndex);
-    --  To ensure that this variable won't be local to this package, since
-    --  in some cases, inlining forces this variable to be global anyway.
- 
-    --------------------
-    -- Local Packages --
-    --------------------
- 
-    package Specific is
- 
-       function Is_Valid_Task return Boolean;
-       pragma Inline (Is_Valid_Task);
-       --  Does executing thread have a TCB?
- 
-       procedure Set (Self_Id : Task_ID);
-       pragma Inline (Set);
-       --  Set the self id for the current task.
- 
-    end Specific;
- 
-    package body Specific is
- 
-       function Is_Valid_Task return Boolean is
-       begin
-          return TlsGetValue (TlsIndex) /= System.Null_Address;
-       end Is_Valid_Task;
- 
-       procedure Set (Self_Id : Task_ID) is
-          Succeeded : BOOL;
-       begin
-          Succeeded := TlsSetValue (TlsIndex, To_Address (Self_Id));
-          pragma Assert (Succeeded = True);
-       end Set;
- 
-    end Specific;
- 
-    ---------------------------------
-    -- Support for foreign threads --
-    ---------------------------------
- 
-    function Register_Foreign_Thread (Thread : Thread_Id) return Task_ID;
-    --  Allocate and Initialize a new ATCB for the current Thread.
- 
-    function Register_Foreign_Thread
-      (Thread : Thread_Id) return Task_ID is separate;
- 
-    ----------------------------------
-    -- Utility Conversion Functions --
-    ----------------------------------
- 
-    function To_Task_Id is new Unchecked_Conversion (System.Address, Task_ID);
- 
-    function To_Address is new Unchecked_Conversion (Task_ID, System.Address);
- 
-    ----------------------------------
-    -- Condition Variable Functions --
-    ----------------------------------
- 
-    procedure Initialize_Cond (Cond : access Condition_Variable);
-    --  Initialize given condition variable Cond
- 
-    procedure Finalize_Cond (Cond : access Condition_Variable);
-    --  Finalize given condition variable Cond.
- 
-    procedure Cond_Signal (Cond : access Condition_Variable);
-    --  Signal condition variable Cond
- 
-    procedure Cond_Wait
-      (Cond : access Condition_Variable;
-       L    : access RTS_Lock);
-    --  Wait on conditional variable Cond, using lock L
- 
-    procedure Cond_Timed_Wait
-      (Cond      : access Condition_Variable;
-       L         : access RTS_Lock;
-       Rel_Time  : Duration;
-       Timed_Out : out Boolean;
-       Status    : out Integer);
-    --  Do timed wait on condition variable Cond using lock L. The duration
-    --  of the timed wait is given by Rel_Time. When the condition is
-    --  signalled, Timed_Out shows whether or not a time out occurred.
-    --  Status is only valid if Timed_Out is False, in which case it
-    --  shows whether Cond_Timed_Wait completed successfully.
- 
-    ---------------------
-    -- Initialize_Cond --
-    ---------------------
- 
-    procedure Initialize_Cond (Cond : access Condition_Variable) is
-       hEvent : HANDLE;
- 
-    begin
-       hEvent := CreateEvent (null, True, False, Null_Ptr);
-       pragma Assert (hEvent /= 0);
-       Cond.all := Condition_Variable (hEvent);
-    end Initialize_Cond;
- 
-    -------------------
-    -- Finalize_Cond --
-    -------------------
- 
-    --  No such problem here, DosCloseEventSem has been derived.
-    --  What does such refer to in above comment???
- 
-    procedure Finalize_Cond (Cond : access Condition_Variable) is
-       Result : BOOL;
-    begin
-       Result := CloseHandle (HANDLE (Cond.all));
-       pragma Assert (Result = True);
-    end Finalize_Cond;
- 
-    -----------------
-    -- Cond_Signal --
-    -----------------
- 
-    procedure Cond_Signal (Cond : access Condition_Variable) is
-       Result : BOOL;
-    begin
-       Result := SetEvent (HANDLE (Cond.all));
-       pragma Assert (Result = True);
-    end Cond_Signal;
- 
-    ---------------
-    -- Cond_Wait --
-    ---------------
- 
-    --  Pre-assertion: Cond is posted
-    --                 L is locked.
- 
-    --  Post-assertion: Cond is posted
-    --                  L is locked.
- 
-    procedure Cond_Wait
-      (Cond : access Condition_Variable;
-       L    : access RTS_Lock)
-    is
-       Result      : DWORD;
-       Result_Bool : BOOL;
- 
-    begin
-       --  Must reset Cond BEFORE L is unlocked.
- 
-       Result_Bool := ResetEvent (HANDLE (Cond.all));
-       pragma Assert (Result_Bool = True);
-       Unlock (L);
- 
-       --  No problem if we are interrupted here: if the condition is signaled,
-       --  WaitForSingleObject will simply not block
- 
-       Result := WaitForSingleObject (HANDLE (Cond.all), Wait_Infinite);
-       pragma Assert (Result = 0);
- 
-       Write_Lock (L);
-    end Cond_Wait;
- 
-    ---------------------
-    -- Cond_Timed_Wait --
-    ---------------------
- 
-    --  Pre-assertion: Cond is posted
-    --                 L is locked.
- 
-    --  Post-assertion: Cond is posted
-    --                  L is locked.
- 
-    procedure Cond_Timed_Wait
-      (Cond      : access Condition_Variable;
-       L         : access RTS_Lock;
-       Rel_Time  : Duration;
-       Timed_Out : out Boolean;
-       Status    : out Integer)
-    is
-       Time_Out_Max : constant DWORD := 16#FFFF0000#;
-       --  NT 4 cannot handle timeout values that are too large,
-       --  e.g. DWORD'Last - 1
- 
-       Time_Out     : DWORD;
-       Result       : BOOL;
-       Wait_Result  : DWORD;
- 
-    begin
-       --  Must reset Cond BEFORE L is unlocked.
- 
-       Result := ResetEvent (HANDLE (Cond.all));
-       pragma Assert (Result = True);
-       Unlock (L);
- 
-       --  No problem if we are interrupted here: if the condition is signaled,
-       --  WaitForSingleObject will simply not block
- 
-       if Rel_Time <= 0.0 then
-          Timed_Out := True;
-          Wait_Result := 0;
- 
-       else
-          if Rel_Time >= Duration (Time_Out_Max) / 1000 then
-             Time_Out := Time_Out_Max;
-          else
-             Time_Out := DWORD (Rel_Time * 1000);
-          end if;
- 
-          Wait_Result := WaitForSingleObject (HANDLE (Cond.all), Time_Out);
- 
-          if Wait_Result = WAIT_TIMEOUT then
-             Timed_Out := True;
-             Wait_Result := 0;
-          else
-             Timed_Out := False;
-          end if;
-       end if;
- 
-       Write_Lock (L);
- 
-       --  Ensure post-condition
- 
-       if Timed_Out then
-          Result := SetEvent (HANDLE (Cond.all));
-          pragma Assert (Result = True);
-       end if;
- 
-       Status := Integer (Wait_Result);
-    end Cond_Timed_Wait;
- 
-    ------------------
-    -- Stack_Guard  --
-    ------------------
- 
-    --  The underlying thread system sets a guard page at the
-    --  bottom of a thread stack, so nothing is needed.
-    --  ??? Check the comment above
- 
-    procedure Stack_Guard (T : ST.Task_ID; On : Boolean) is
-       pragma Warnings (Off, T);
-       pragma Warnings (Off, On);
- 
-    begin
-       null;
-    end Stack_Guard;
- 
-    --------------------
-    -- Get_Thread_Id  --
-    --------------------
- 
-    function Get_Thread_Id (T : ST.Task_ID) return OSI.Thread_Id is
-    begin
-       return T.Common.LL.Thread;
-    end Get_Thread_Id;
- 
-    ----------
-    -- Self --
-    ----------
- 
-    function Self return Task_ID is
-       Self_Id : constant Task_ID := To_Task_Id (TlsGetValue (TlsIndex));
- 
-    begin
-       if Self_Id = null then
-          return Register_Foreign_Thread (GetCurrentThread);
-       else
-          return Self_Id;
-       end if;
-    end Self;
- 
-    ---------------------
-    -- Initialize_Lock --
-    ---------------------
- 
-    --  Note: mutexes and cond_variables needed per-task basis are
-    --  initialized in Intialize_TCB and the Storage_Error is handled.
-    --  Other mutexes (such as RTS_Lock, Memory_Lock...) used in
-    --  the RTS is initialized before any status change of RTS.
-    --  Therefore raising Storage_Error in the following routines
-    --  should be able to be handled safely.
- 
-    procedure Initialize_Lock
-      (Prio : System.Any_Priority;
-       L    : access Lock)
-    is
-    begin
-       InitializeCriticalSection (L.Mutex'Access);
-       L.Owner_Priority := 0;
-       L.Priority := Prio;
-    end Initialize_Lock;
- 
-    procedure Initialize_Lock (L : access RTS_Lock; Level : Lock_Level) is
-       pragma Unreferenced (Level);
- 
-    begin
-       InitializeCriticalSection (CRITICAL_SECTION (L.all)'Unrestricted_Access);
-    end Initialize_Lock;
- 
-    -------------------
-    -- Finalize_Lock --
-    -------------------
- 
-    procedure Finalize_Lock (L : access Lock) is
-    begin
-       DeleteCriticalSection (L.Mutex'Access);
-    end Finalize_Lock;
- 
-    procedure Finalize_Lock (L : access RTS_Lock) is
-    begin
-       DeleteCriticalSection (CRITICAL_SECTION (L.all)'Unrestricted_Access);
-    end Finalize_Lock;
- 
-    ----------------
-    -- Write_Lock --
-    ----------------
- 
-    procedure Write_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
-    begin
-       L.Owner_Priority := Get_Priority (Self);
- 
-       if L.Priority < L.Owner_Priority then
-          Ceiling_Violation := True;
-          return;
-       end if;
- 
-       EnterCriticalSection (L.Mutex'Access);
- 
-       Ceiling_Violation := False;
-    end Write_Lock;
- 
-    procedure Write_Lock
-      (L           : access RTS_Lock;
-       Global_Lock : Boolean := False)
-    is
-    begin
-       if not Single_Lock or else Global_Lock then
-          EnterCriticalSection (CRITICAL_SECTION (L.all)'Unrestricted_Access);
-       end if;
-    end Write_Lock;
- 
-    procedure Write_Lock (T : Task_ID) is
-    begin
-       if not Single_Lock then
-          EnterCriticalSection
-            (CRITICAL_SECTION (T.Common.LL.L)'Unrestricted_Access);
-       end if;
-    end Write_Lock;
- 
-    ---------------
-    -- Read_Lock --
-    ---------------
- 
-    procedure Read_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
-    begin
-       Write_Lock (L, Ceiling_Violation);
-    end Read_Lock;
- 
-    ------------
-    -- Unlock --
-    ------------
- 
-    procedure Unlock (L : access Lock) is
-    begin
-       LeaveCriticalSection (L.Mutex'Access);
-    end Unlock;
- 
-    procedure Unlock (L : access RTS_Lock; Global_Lock : Boolean := False) is
-    begin
-       if not Single_Lock or else Global_Lock then
-          LeaveCriticalSection (CRITICAL_SECTION (L.all)'Unrestricted_Access);
-       end if;
-    end Unlock;
- 
-    procedure Unlock (T : Task_ID) is
-    begin
-       if not Single_Lock then
-          LeaveCriticalSection
-            (CRITICAL_SECTION (T.Common.LL.L)'Unrestricted_Access);
-       end if;
-    end Unlock;
- 
-    -----------
-    -- Sleep --
-    -----------
- 
-    procedure Sleep
-      (Self_ID : Task_ID;
-       Reason  : System.Tasking.Task_States)
-    is
-       pragma Unreferenced (Reason);
- 
-    begin
-       pragma Assert (Self_ID = Self);
- 
-       if Single_Lock then
-          Cond_Wait (Self_ID.Common.LL.CV'Access, Single_RTS_Lock'Access);
-       else
-          Cond_Wait (Self_ID.Common.LL.CV'Access, Self_ID.Common.LL.L'Access);
-       end if;
- 
-       if Self_ID.Deferral_Level = 0
-         and then Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level
-       then
-          Unlock (Self_ID);
-          raise Standard'Abort_Signal;
-       end if;
-    end Sleep;
- 
-    -----------------
-    -- Timed_Sleep --
-    -----------------
- 
-    --  This is for use within the run-time system, so abort is
-    --  assumed to be already deferred, and the caller should be
-    --  holding its own ATCB lock.
- 
-    procedure Timed_Sleep
-      (Self_ID  : Task_ID;
-       Time     : Duration;
-       Mode     : ST.Delay_Modes;
-       Reason   : System.Tasking.Task_States;
-       Timedout : out Boolean;
-       Yielded  : out Boolean)
-    is
-       pragma Unreferenced (Reason);
-       Check_Time : Duration := Monotonic_Clock;
-       Rel_Time   : Duration;
-       Abs_Time   : Duration;
-       Result     : Integer;
- 
-       Local_Timedout : Boolean;
- 
-    begin
-       Timedout := True;
-       Yielded  := False;
- 
-       if Mode = Relative then
-          Rel_Time := Time;
-          Abs_Time := Duration'Min (Time, Max_Sensible_Delay) + Check_Time;
-       else
-          Rel_Time := Time - Check_Time;
-          Abs_Time := Time;
-       end if;
- 
-       if Rel_Time > 0.0 then
-          loop
-             exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level
-               or else Self_ID.Pending_Priority_Change;
- 
-             if Single_Lock then
-                Cond_Timed_Wait (Self_ID.Common.LL.CV'Access,
-                  Single_RTS_Lock'Access, Rel_Time, Local_Timedout, Result);
-             else
-                Cond_Timed_Wait (Self_ID.Common.LL.CV'Access,
-                  Self_ID.Common.LL.L'Access, Rel_Time, Local_Timedout, Result);
-             end if;
- 
-             Check_Time := Monotonic_Clock;
-             exit when Abs_Time <= Check_Time;
- 
-             if not Local_Timedout then
- 
-                --  Somebody may have called Wakeup for us
- 
-                Timedout := False;
-                exit;
-             end if;
- 
-             Rel_Time := Abs_Time - Check_Time;
-          end loop;
-       end if;
-    end Timed_Sleep;
- 
-    -----------------
-    -- Timed_Delay --
-    -----------------
- 
-    procedure Timed_Delay
-      (Self_ID  : Task_ID;
-       Time     : Duration;
-       Mode     : ST.Delay_Modes)
-    is
-       Check_Time : Duration := Monotonic_Clock;
-       Rel_Time   : Duration;
-       Abs_Time   : Duration;
-       Result     : Integer;
-       Timedout   : Boolean;
- 
-    begin
-       --  Only the little window between deferring abort and
-       --  locking Self_ID is the reason we need to
-       --  check for pending abort and priority change below!
- 
-       SSL.Abort_Defer.all;
- 
-       if Single_Lock then
-          Lock_RTS;
-       end if;
- 
-       Write_Lock (Self_ID);
- 
-       if Mode = Relative then
-          Rel_Time := Time;
-          Abs_Time := Time + Check_Time;
-       else
-          Rel_Time := Time - Check_Time;
-          Abs_Time := Time;
-       end if;
- 
-       if Rel_Time > 0.0 then
-          Self_ID.Common.State := Delay_Sleep;
- 
-          loop
-             if Self_ID.Pending_Priority_Change then
-                Self_ID.Pending_Priority_Change := False;
-                Self_ID.Common.Base_Priority := Self_ID.New_Base_Priority;
-                Set_Priority (Self_ID, Self_ID.Common.Base_Priority);
-             end if;
- 
-             exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level;
- 
-             if Single_Lock then
-                Cond_Timed_Wait (Self_ID.Common.LL.CV'Access,
-                  Single_RTS_Lock'Access, Rel_Time, Timedout, Result);
-             else
-                Cond_Timed_Wait (Self_ID.Common.LL.CV'Access,
-                  Self_ID.Common.LL.L'Access, Rel_Time, Timedout, Result);
-             end if;
- 
-             Check_Time := Monotonic_Clock;
-             exit when Abs_Time <= Check_Time;
- 
-             Rel_Time := Abs_Time - Check_Time;
-          end loop;
- 
-          Self_ID.Common.State := Runnable;
-       end if;
- 
-       Unlock (Self_ID);
- 
-       if Single_Lock then
-          Unlock_RTS;
-       end if;
- 
-       Yield;
-       SSL.Abort_Undefer.all;
-    end Timed_Delay;
- 
-    ------------
-    -- Wakeup --
-    ------------
- 
-    procedure Wakeup (T : Task_ID; Reason : System.Tasking.Task_States) is
-       pragma Unreferenced (Reason);
- 
-    begin
-       Cond_Signal (T.Common.LL.CV'Access);
-    end Wakeup;
- 
-    -----------
-    -- Yield --
-    -----------
- 
-    procedure Yield (Do_Yield : Boolean := True) is
-    begin
-       if Do_Yield then
-          Sleep (0);
-       end if;
-    end Yield;
- 
-    ------------------
-    -- Set_Priority --
-    ------------------
- 
-    type Prio_Array_Type is array (System.Any_Priority) of Integer;
-    pragma Atomic_Components (Prio_Array_Type);
- 
-    Prio_Array : Prio_Array_Type;
-    --  Global array containing the id of the currently running task for
-    --  each priority.
-    --
-    --  Note: we assume that we are on a single processor with run-til-blocked
-    --  scheduling.
- 
-    procedure Set_Priority
-      (T                   : Task_ID;
-       Prio                : System.Any_Priority;
-       Loss_Of_Inheritance : Boolean := False)
-    is
-       Res        : BOOL;
-       Array_Item : Integer;
- 
-    begin
-       Res := SetThreadPriority
-         (T.Common.LL.Thread, Interfaces.C.int (Underlying_Priorities (Prio)));
-       pragma Assert (Res = True);
- 
-       if FIFO_Within_Priorities then
- 
-          --  Annex D requirement [RM D.2.2 par. 9]:
-          --    If the task drops its priority due to the loss of inherited
-          --    priority, it is added at the head of the ready queue for its
-          --    new active priority.
- 
-          if Loss_Of_Inheritance
-            and then Prio < T.Common.Current_Priority
-          then
-             Array_Item := Prio_Array (T.Common.Base_Priority) + 1;
-             Prio_Array (T.Common.Base_Priority) := Array_Item;
- 
-             loop
-                --  Let some processes a chance to arrive
- 
-                Yield;
- 
-                --  Then wait for our turn to proceed
- 
-                exit when Array_Item = Prio_Array (T.Common.Base_Priority)
-                  or else Prio_Array (T.Common.Base_Priority) = 1;
-             end loop;
- 
-             Prio_Array (T.Common.Base_Priority) :=
-               Prio_Array (T.Common.Base_Priority) - 1;
-          end if;
-       end if;
- 
-       T.Common.Current_Priority := Prio;
-    end Set_Priority;
- 
-    ------------------
-    -- Get_Priority --
-    ------------------
- 
-    function Get_Priority (T : Task_ID) return System.Any_Priority is
-    begin
-       return T.Common.Current_Priority;
-    end Get_Priority;
- 
-    ----------------
-    -- Enter_Task --
-    ----------------
- 
-    --  There were two paths were we needed to call Enter_Task :
-    --  1) from System.Task_Primitives.Operations.Initialize
-    --  2) from System.Tasking.Stages.Task_Wrapper
-    --
-    --  The thread initialisation has to be done only for the first case.
-    --
-    --  This is because the GetCurrentThread NT call does not return the
-    --  real thread handler but only a "pseudo" one. It is not possible to
-    --  release the thread handle and free the system ressources from this
-    --  "pseudo" handle. So we really want to keep the real thread handle
-    --  set in System.Task_Primitives.Operations.Create_Task during the
-    --  thread creation.
- 
-    procedure Enter_Task (Self_ID : Task_ID) is
-       procedure Init_Float;
-       pragma Import (C, Init_Float, "__gnat_init_float");
-       --  Properly initializes the FPU for x86 systems.
- 
-    begin
-       Specific.Set (Self_ID);
-       Init_Float;
- 
-       Self_ID.Common.LL.Thread_Id := GetCurrentThreadId;
- 
-       Lock_RTS;
- 
-       for J in Known_Tasks'Range loop
-          if Known_Tasks (J) = null then
-             Known_Tasks (J) := Self_ID;
-             Self_ID.Known_Tasks_Index := J;
-             exit;
-          end if;
-       end loop;
- 
-       Unlock_RTS;
-    end Enter_Task;
- 
-    --------------
-    -- New_ATCB --
-    --------------
- 
-    function New_ATCB (Entry_Num : Task_Entry_Index) return Task_ID is
-    begin
-       return new Ada_Task_Control_Block (Entry_Num);
-    end New_ATCB;
- 
-    -------------------
-    -- Is_Valid_Task --
-    -------------------
- 
-    function Is_Valid_Task return Boolean renames Specific.Is_Valid_Task;
- 
-    -----------------------------
-    -- Register_Foreign_Thread --
-    -----------------------------
- 
-    function Register_Foreign_Thread return Task_ID is
-    begin
-       if Is_Valid_Task then
-          return Self;
-       else
-          return Register_Foreign_Thread (GetCurrentThread);
-       end if;
-    end Register_Foreign_Thread;
- 
-    --------------------
-    -- Initialize_TCB --
-    --------------------
- 
-    procedure Initialize_TCB (Self_ID : Task_ID; Succeeded : out Boolean) is
-    begin
-       --  Initialize thread ID to 0, this is needed to detect threads that
-       --  are not yet activated.
- 
-       Self_ID.Common.LL.Thread := 0;
- 
-       Initialize_Cond (Self_ID.Common.LL.CV'Access);
- 
-       if not Single_Lock then
-          Initialize_Lock (Self_ID.Common.LL.L'Access, ATCB_Level);
-       end if;
- 
-       Succeeded := True;
-    end Initialize_TCB;
- 
-    -----------------
-    -- Create_Task --
-    -----------------
- 
-    procedure Create_Task
-      (T          : Task_ID;
-       Wrapper    : System.Address;
-       Stack_Size : System.Parameters.Size_Type;
-       Priority   : System.Any_Priority;
-       Succeeded  : out Boolean)
-    is
-       hTask          : HANDLE;
-       TaskId         : aliased DWORD;
-       pTaskParameter : System.OS_Interface.PVOID;
-       dwStackSize    : DWORD;
-       Result         : DWORD;
-       Entry_Point    : PTHREAD_START_ROUTINE;
- 
-       function To_PTHREAD_START_ROUTINE is new
-         Unchecked_Conversion (System.Address, PTHREAD_START_ROUTINE);
- 
-    begin
-       pTaskParameter := To_Address (T);
- 
-       if Stack_Size = Unspecified_Size then
-          dwStackSize := DWORD (Default_Stack_Size);
- 
-       elsif Stack_Size < Minimum_Stack_Size then
-          dwStackSize := DWORD (Minimum_Stack_Size);
- 
-       else
-          dwStackSize := DWORD (Stack_Size);
-       end if;
- 
-       Entry_Point := To_PTHREAD_START_ROUTINE (Wrapper);
- 
-       hTask := CreateThread
-          (null,
-           dwStackSize,
-           Entry_Point,
-           pTaskParameter,
-           DWORD (Create_Suspended),
-           TaskId'Unchecked_Access);
- 
-       --  Step 1: Create the thread in blocked mode
- 
-       if hTask = 0 then
-          raise Storage_Error;
-       end if;
- 
-       --  Step 2: set its TCB
- 
-       T.Common.LL.Thread := hTask;
- 
-       --  Step 3: set its priority (child has inherited priority from parent)
- 
-       Set_Priority (T, Priority);
- 
-       if Time_Slice_Val = 0 or else FIFO_Within_Priorities then
-          --  Here we need Annex E semantics so we disable the NT priority
-          --  boost. A priority boost is temporarily given by the system to a
-          --  thread when it is taken out of a wait state.
- 
-          SetThreadPriorityBoost (hTask, DisablePriorityBoost => True);
-       end if;
- 
-       --  Step 4: Now, start it for good:
- 
-       Result := ResumeThread (hTask);
-       pragma Assert (Result = 1);
- 
-       Succeeded := Result = 1;
-    end Create_Task;
- 
-    ------------------
-    -- Finalize_TCB --
-    ------------------
- 
-    procedure Finalize_TCB (T : Task_ID) is
-       Self_ID   : Task_ID := T;
-       Result    : DWORD;
-       Succeeded : BOOL;
-       Is_Self : constant Boolean := T = Self;
- 
-       procedure Free is new
-         Unchecked_Deallocation (Ada_Task_Control_Block, Task_ID);
- 
-    begin
-       if not Single_Lock then
-          Finalize_Lock (T.Common.LL.L'Access);
-       end if;
- 
-       Finalize_Cond (T.Common.LL.CV'Access);
- 
-       if T.Known_Tasks_Index /= -1 then
-          Known_Tasks (T.Known_Tasks_Index) := null;
-       end if;
- 
-       if Self_ID.Common.LL.Thread /= 0 then
- 
-          --  This task has been activated. Wait for the thread to terminate
-          --  then close it. this is needed to release system ressources.
- 
-          Result := WaitForSingleObject (T.Common.LL.Thread, Wait_Infinite);
-          pragma Assert (Result /= WAIT_FAILED);
-          Succeeded := CloseHandle (T.Common.LL.Thread);
-          pragma Assert (Succeeded = True);
-       end if;
- 
-       Free (Self_ID);
- 
-       if Is_Self then
-          Succeeded := TlsSetValue (TlsIndex, System.Null_Address);
-          pragma Assert (Succeeded = True);
-       end if;
-    end Finalize_TCB;
- 
-    ---------------
-    -- Exit_Task --
-    ---------------
- 
-    procedure Exit_Task is
-    begin
-       Specific.Set (null);
-    end Exit_Task;
- 
-    ----------------
-    -- Abort_Task --
-    ----------------
- 
-    procedure Abort_Task (T : Task_ID) is
-    pragma Unreferenced (T);
-    begin
-       null;
-    end Abort_Task;
- 
-    ----------------------
-    -- Environment_Task --
-    ----------------------
- 
-    function Environment_Task return Task_ID is
-    begin
-       return Environment_Task_ID;
-    end Environment_Task;
- 
-    --------------
-    -- Lock_RTS --
-    --------------
- 
-    procedure Lock_RTS is
-    begin
-       Write_Lock (Single_RTS_Lock'Access, Global_Lock => True);
-    end Lock_RTS;
- 
-    ----------------
-    -- Unlock_RTS --
-    ----------------
- 
-    procedure Unlock_RTS is
-    begin
-       Unlock (Single_RTS_Lock'Access, Global_Lock => True);
-    end Unlock_RTS;
- 
-    ----------------
-    -- Initialize --
-    ----------------
- 
-    procedure Initialize (Environment_Task : Task_ID) is
-       Discard : BOOL;
-       pragma Unreferenced (Discard);
- 
-    begin
-       Environment_Task_ID := Environment_Task;
- 
-       if Time_Slice_Val = 0 or else FIFO_Within_Priorities then
- 
-          --  Here we need Annex E semantics, switch the current process to the
-          --  High_Priority_Class.
- 
-          Discard :=
-            OS_Interface.SetPriorityClass
-              (GetCurrentProcess, High_Priority_Class);
- 
-          --  ??? In theory it should be possible to use the priority class
-          --  Realtime_Prioriry_Class but we suspect a bug in the NT scheduler
-          --  which prevents (in some obscure cases) a thread to get on top of
-          --  the running queue by another thread of lower priority. For
-          --  example cxd8002 ACATS test freeze.
-       end if;
- 
-       TlsIndex := TlsAlloc;
- 
-       --  Initialize the lock used to synchronize chain of all ATCBs.
- 
-       Initialize_Lock (Single_RTS_Lock'Access, RTS_Lock_Level);
- 
-       Environment_Task.Common.LL.Thread := GetCurrentThread;
-       Enter_Task (Environment_Task);
-    end Initialize;
- 
-    ---------------------
-    -- Monotonic_Clock --
-    ---------------------
- 
-    function Monotonic_Clock return Duration
-      renames System.OS_Primitives.Monotonic_Clock;
- 
-    -------------------
-    -- RT_Resolution --
-    -------------------
- 
-    function RT_Resolution return Duration is
-    begin
-       return 0.000_001; --  1 micro-second
-    end RT_Resolution;
- 
-    ----------------
-    -- Check_Exit --
-    ----------------
- 
-    --  Dummy versions.  The only currently working versions is for solaris
-    --  (native).
- 
-    function Check_Exit (Self_ID : ST.Task_ID) return Boolean is
-       pragma Unreferenced (Self_ID);
- 
-    begin
-       return True;
-    end Check_Exit;
- 
-    --------------------
-    -- Check_No_Locks --
-    --------------------
- 
-    function Check_No_Locks (Self_ID : ST.Task_ID) return Boolean is
-       pragma Unreferenced (Self_ID);
- 
-    begin
-       return True;
-    end Check_No_Locks;
- 
-    ------------------
-    -- Suspend_Task --
-    ------------------
- 
-    function Suspend_Task
-      (T           : ST.Task_ID;
-       Thread_Self : Thread_Id)
-       return        Boolean
-    is
-    begin
-       if T.Common.LL.Thread /= Thread_Self then
-          return SuspendThread (T.Common.LL.Thread) = NO_ERROR;
-       else
-          return True;
-       end if;
-    end Suspend_Task;
- 
-    -----------------
-    -- Resume_Task --
-    -----------------
- 
-    function Resume_Task
-      (T           : ST.Task_ID;
-       Thread_Self : Thread_Id)
-       return        Boolean
-    is
-    begin
-       if T.Common.LL.Thread /= Thread_Self then
-          return ResumeThread (T.Common.LL.Thread) = NO_ERROR;
-       else
-          return True;
-       end if;
-    end Resume_Task;
- 
- end System.Task_Primitives.Operations;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5wtaspri.ads gcc-4.0.0/gcc/ada/5wtaspri.ads
*** gcc-3.4.3/gcc/ada/5wtaspri.ads	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5wtaspri.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,97 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                 S Y S T E M . T A S K _ P R I M I T I V E S              --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --          Copyright (C) 1991-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a NT (native) version of this package.
- 
- pragma Polling (Off);
- --  Turn off polling, we do not want ATC polling to take place during
- --  tasking operations. It causes infinite loops and other problems.
- 
- with System.OS_Interface;
- --  used for pthread_mutex_t
- --           pthread_cond_t
- --           pthread_t
- 
- package System.Task_Primitives is
- 
-    type Lock is limited private;
-    --  Should be used for implementation of protected objects.
- 
-    type RTS_Lock is limited private;
-    --  Should be used inside the runtime system.
-    --  The difference between Lock and the RTS_Lock is that the later
-    --  one serves only as a semaphore so that do not check for
-    --  ceiling violations.
- 
-    type Task_Body_Access is access procedure;
-    --  Pointer to the task body's entry point (or possibly a wrapper
-    --  declared local to the GNARL).
- 
-    type Private_Data is limited private;
-    --  Any information that the GNULLI needs maintained on a per-task
-    --  basis.  A component of this type is guaranteed to be included
-    --  in the Ada_Task_Control_Block.
- 
- private
- 
-    type Lock is record
-       Mutex          : aliased System.OS_Interface.CRITICAL_SECTION;
-       Priority       : Integer;
-       Owner_Priority : Integer;
-    end record;
- 
-    type Condition_Variable is new System.OS_Interface.HANDLE;
- 
-    type RTS_Lock is new System.OS_Interface.CRITICAL_SECTION;
- 
-    type Private_Data is record
-       Thread : aliased System.OS_Interface.HANDLE;
-       pragma Atomic (Thread);
-       --  Thread field may be updated by two different threads of control.
-       --  (See, Enter_Task and Create_Task in s-taprop.adb).
-       --  They put the same value (thr_self value). We do not want to
-       --  use lock on those operations and the only thing we have to
-       --  make sure is that they are updated in atomic fashion.
- 
-       Thread_Id : aliased System.OS_Interface.DWORD;
-       --  The purpose of this field is to provide a better tasking support
-       --  in gdb.
- 
-       CV : aliased Condition_Variable;
-       --  Condition Variable used to implement Sleep/Wakeup
- 
-       L : aliased RTS_Lock;
-       --  Protection for all components is lock L
-    end record;
- 
- end System.Task_Primitives;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5xcrtl.ads gcc-4.0.0/gcc/ada/5xcrtl.ads
*** gcc-3.4.3/gcc/ada/5xcrtl.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/5xcrtl.ads	Thu Mar 18 15:18:36 2004
***************
*** 0 ****
--- 1,159 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --                         S Y S T E M . C R T L                            --
+ --                                                                          --
+ --                                S p e c                                   --
+ --                                                                          --
+ --           Copyright (C) 2004 Free Software Foundation, Inc.              --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package provides the low level interface to the C Run Time Library
+ --  on 64 bit VMS
+ 
+ with System.Parameters;
+ package System.CRTL is
+ pragma Preelaborate (CRTL);
+ 
+    subtype chars is System.Address;
+    --  Pointer to null-terminated array of characters
+ 
+    subtype FILEs is System.Address;
+    --  Corresponds to the C type FILE*
+ 
+    subtype int is Integer;
+ 
+    type long is range -(2 ** (System.Parameters.long_bits - 1))
+       .. +(2 ** (System.Parameters.long_bits - 1)) - 1;
+ 
+    subtype off_t is Integer;
+ 
+    type size_t is mod 2 ** Standard'Address_Size;
+ 
+    function atoi (A : System.Address) return Integer;
+    pragma Import (C, atoi, "decc$atoi");
+ 
+    procedure clearerr (stream : FILEs);
+    pragma Import (C, clearerr, "decc$clearerr");
+ 
+    function fclose (stream : FILEs) return int;
+    pragma Import (C, fclose, "decc$fclose");
+ 
+    function fdopen (handle : int; mode : chars) return FILEs;
+    pragma Import (C, fdopen, "decc$fdopen");
+ 
+    function fflush (stream : FILEs) return int;
+    pragma Import (C, fflush, "decc$fflush");
+ 
+    function fgetc (stream : FILEs) return int;
+    pragma Import (C, fgetc, "decc$fgetc");
+ 
+    function fgets (strng : chars; n : int; stream : FILEs) return chars;
+    pragma Import (C, fgets, "decc$fgets");
+ 
+    function fopen (filename : chars; Mode : chars) return FILEs;
+    pragma Import (C, fopen, "decc$fopen");
+ 
+    function fputc (C : int; stream : FILEs) return int;
+    pragma Import (C, fputc, "decc$fputc");
+ 
+    function fputs (Strng : chars; Stream : FILEs) return int;
+    pragma Import (C, fputs, "decc$fputs");
+ 
+    procedure free (Ptr : System.Address);
+    pragma Import (C, free, "decc$free");
+ 
+    function freopen
+      (filename : chars;
+       mode     : chars;
+       stream   : FILEs)
+       return     FILEs;
+    pragma Import (C, freopen, "decc$freopen");
+ 
+    function fseek
+      (stream : FILEs;
+       offset : long;
+       origin : int)
+       return   int;
+    pragma Import (C, fseek, "decc$fseek");
+ 
+    function ftell (stream : FILEs) return long;
+    pragma Import (C, ftell, "decc$ftell");
+ 
+    function getenv (S : String) return System.Address;
+    pragma Import (C, getenv, "decc$getenv");
+ 
+    function isatty (handle : int) return int;
+    pragma Import (C, isatty, "decc$isatty");
+ 
+    function lseek (fd : int; offset : off_t; direction : int) return off_t;
+    pragma Import (C, lseek, "decc$lseek");
+ 
+    function malloc (Size : size_t) return System.Address;
+    pragma Import (C, malloc, "decc$_malloc64");
+ 
+    procedure memcpy (S1 : System.Address; S2 : System.Address; N : size_t);
+    pragma Import (C, memcpy, "decc$_memcpy64");
+ 
+    procedure memmove (S1 : System.Address; S2 : System.Address; N : size_t);
+    pragma Import (C, memmove, "decc$_memmove64");
+ 
+    procedure mktemp (template : chars);
+    pragma Import (C, mktemp, "decc$_mktemp64");
+ 
+    function read (fd : int; buffer : chars; nbytes : int) return int;
+    pragma Import (C, read, "decc$read");
+ 
+    function realloc
+      (Ptr : System.Address; Size : size_t) return System.Address;
+    pragma Import (C, realloc, "decc$_realloc64");
+ 
+    procedure rewind (stream : FILEs);
+    pragma Import (C, rewind, "decc$rewind");
+ 
+    function setvbuf
+      (stream : FILEs;
+       buffer : chars;
+       mode   : int;
+       size   : size_t)
+       return   int;
+    pragma Import (C, setvbuf, "decc$setvbuf");
+ 
+    procedure tmpnam (string : chars);
+    pragma Import (C, tmpnam, "decc$_tmpnam64");
+ 
+    function tmpfile return FILEs;
+    pragma Import (C, tmpfile, "decc$tmpfile");
+ 
+    function ungetc (c : int; stream : FILEs) return int;
+    pragma Import (C, ungetc, "decc$ungetc");
+ 
+    function unlink (filename : chars) return int;
+    pragma Import (C, unlink, "decc$unlink");
+ 
+    function write (fd : int; buffer : chars; nbytes : int) return int;
+    pragma Import (C, write, "decc$write");
+ end System.CRTL;
diff -Nrcpad gcc-3.4.3/gcc/ada/5xparame.ads gcc-4.0.0/gcc/ada/5xparame.ads
*** gcc-3.4.3/gcc/ada/5xparame.ads	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5xparame.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,203 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                    S Y S T E M . P A R A M E T E R S                     --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the OpenVMS version for restricted tasking.
- 
- --  Blank line intentional so that it lines up exactly with default.
- 
- --  This package defines some system dependent parameters for GNAT. These
- --  are values that are referenced by the runtime library and are therefore
- --  relevant to the target machine.
- 
- --  The parameters whose value is defined in the spec are not generally
- --  expected to be changed. If they are changed, it will be necessary to
- --  recompile the run-time library.
- 
- --  The parameters which are defined by functions can be changed by modifying
- --  the body of System.Parameters in file s-parame.adb. A change to this body
- --  requires only rebinding and relinking of the application.
- 
- --  Note: do not introduce any pragma Inline statements into this unit, since
- --  otherwise the relinking and rebinding capability would be deactivated.
- 
- package System.Parameters is
- pragma Pure (Parameters);
- 
-    ---------------------------------------
-    -- Task And Stack Allocation Control --
-    ---------------------------------------
- 
-    type Task_Storage_Size is new Integer;
-    --  Type used in tasking units for task storage size
- 
-    type Size_Type is new Task_Storage_Size;
-    --  Type used to provide task storage size to runtime
- 
-    Unspecified_Size : constant Size_Type := Size_Type'First;
-    --  Value used to indicate that no size type is set
- 
-    subtype Ratio is Size_Type range -1 .. 100;
-    Dynamic : constant Size_Type := -1;
-    --  The secondary stack ratio is a constant between 0 and 100 which
-    --  determines the percentage of the allocated task stack that is
-    --  used by the secondary stack (the rest being the primary stack).
-    --  The special value of minus one indicates that the secondary
-    --  stack is to be allocated from the heap instead.
- 
-    Sec_Stack_Ratio : constant Ratio := Dynamic;
-    --  This constant defines the handling of the secondary stack
- 
-    Sec_Stack_Dynamic : constant Boolean := Sec_Stack_Ratio = Dynamic;
-    --  Convenient Boolean for testing for dynamic secondary stack
- 
-    function Default_Stack_Size return Size_Type;
-    --  Default task stack size used if none is specified
- 
-    function Minimum_Stack_Size return Size_Type;
-    --  Minimum task stack size permitted
- 
-    function Adjust_Storage_Size (Size : Size_Type) return Size_Type;
-    --  Given the storage size stored in the TCB, return the Storage_Size
-    --  value required by the RM for the Storage_Size attribute. The
-    --  required adjustment is as follows:
-    --
-    --    when Size = Unspecified_Size, return Default_Stack_Size
-    --    when Size < Minimum_Stack_Size, return Minimum_Stack_Size
-    --    otherwise return given Size
- 
-    Default_Env_Stack_Size : constant Size_Type := 8_192_000;
-    --  Assumed size of the environment task, if no other information
-    --  is available. This value is used when stack checking is
-    --  enabled and no GNAT_STACK_LIMIT environment variable is set.
- 
-    Stack_Grows_Down  : constant Boolean := True;
-    --  This constant indicates whether the stack grows up (False) or
-    --  down (True) in memory as functions are called. It is used for
-    --  proper implementation of the stack overflow check.
- 
-    ----------------------------------------------
-    -- Characteristics of types in Interfaces.C --
-    ----------------------------------------------
- 
-    long_bits : constant := 32;
-    --  Number of bits in type long and unsigned_long. The normal convention
-    --  is that this is the same as type Long_Integer, but this is not true
-    --  of all targets. For example, in OpenVMS long /= Long_Integer.
- 
-    ----------------------------------------------
-    -- Behavior of Pragma Finalize_Storage_Only --
-    ----------------------------------------------
- 
-    --  Garbage_Collected is a Boolean constant whose value indicates the
-    --  effect of the pragma Finalize_Storage_Entry on a controlled type.
- 
-    --    Garbage_Collected = False
- 
-    --      The system releases all storage on program termination only,
-    --      but not other garbage collection occurs, so finalization calls
-    --      are ommitted only for outer level onjects can be omitted if
-    --      pragma Finalize_Storage_Only is used.
- 
-    --    Garbage_Collected = True
- 
-    --      The system provides full garbage collection, so it is never
-    --      necessary to release storage for controlled objects for which
-    --      a pragma Finalize_Storage_Only is used.
- 
-    Garbage_Collected : constant Boolean := False;
-    --  The storage mode for this system (release on program exit)
- 
-    ---------------------
-    -- Tasking Profile --
-    ---------------------
- 
-    --  In the following sections, constant parameters are defined to
-    --  allow some optimizations and fine tuning within the tasking run time
-    --  based on restrictions on the tasking features.
- 
-    ----------------------
-    -- Locking Strategy --
-    ----------------------
- 
-    Single_Lock : constant Boolean := True;
-    --  Indicates whether a single lock should be used within the tasking
-    --  run-time to protect internal structures. If True, a single lock
-    --  will be used, meaning less locking/unlocking operations, but also
-    --  more global contention. In general, Single_Lock should be set to
-    --  True on single processor machines, and to False to multi-processor
-    --  systems, but this can vary from application to application and also
-    --  depends on the scheduling policy.
- 
-    -------------------
-    -- Task Abortion --
-    -------------------
- 
-    No_Abort : constant Boolean := True;
-    --  This constant indicates whether abort statements and asynchronous
-    --  transfer of control (ATC) are disallowed. If set to True, it is
-    --  assumed that neither construct is used, and the run time does not
-    --  need to defer/undefer abort and check for pending actions at
-    --  completion points. A value of True for No_Abort corresponds to:
-    --  pragma Restrictions (No_Abort_Statements);
-    --  pragma Restrictions (Max_Asynchronous_Select_Nesting => 0);
- 
-    ----------------------
-    -- Dynamic Priority --
-    ----------------------
- 
-    Dynamic_Priority_Support : constant Boolean := False;
-    --  This constant indicates whether dynamic changes of task priorities
-    --  are allowed (True means normal RM mode in which such changes are
-    --  allowed). In particular, if this is False, then we do not need to
-    --  poll for pending base priority changes at every abort completion
-    --  point. A value of False for Dynamic_Priority_Support corresponds
-    --  to pragma Restrictions (No_Dynamic_Priorities);
- 
-    ---------------------
-    -- Task Attributes --
-    ---------------------
- 
-    Default_Attribute_Count : constant := 4;
-    --  Number of pre-allocated Address-sized task attributes stored in the
-    --  task control block.
- 
-    --------------------
-    -- Runtime Traces --
-    --------------------
- 
-    Runtime_Traces : constant Boolean := False;
-    --  This constant indicates whether the runtime outputs traces to a
-    --  predefined output or not (True means that traces are output).
-    --  See System.Traces for more details.
- 
- end System.Parameters;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5xsystem.ads gcc-4.0.0/gcc/ada/5xsystem.ads
*** gcc-3.4.3/gcc/ada/5xsystem.ads	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5xsystem.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,236 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                        GNAT RUN-TIME COMPONENTS                          --
- --                                                                          --
- --                               S Y S T E M                                --
- --                                                                          --
- --                                 S p e c                                  --
- --                   (OpenVMS GCC_ZCX DEC Threads Version)                  --
- --                                                                          --
- --          Copyright (C) 2002-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the  contents of the part following the private keyword. --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- package System is
- pragma Pure (System);
- --  Note that we take advantage of the implementation permission to
- --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
- 
-    type Name is (SYSTEM_NAME_GNAT);
-    System_Name : constant Name := SYSTEM_NAME_GNAT;
- 
-    --  System-Dependent Named Numbers
- 
-    Min_Int               : constant := Long_Long_Integer'First;
-    Max_Int               : constant := Long_Long_Integer'Last;
- 
-    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
-    Max_Nonbinary_Modulus : constant := Integer'Last;
- 
-    Max_Base_Digits       : constant := Long_Long_Float'Digits;
-    Max_Digits            : constant := Long_Long_Float'Digits;
- 
-    Max_Mantissa          : constant := 63;
-    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
- 
-    Tick                  : constant := 0.01;
- 
-    --  Storage-related Declarations
- 
-    type Address is private;
-    Null_Address : constant Address;
- 
-    Storage_Unit : constant := 8;
-    Word_Size    : constant := 32;
-    Memory_Size  : constant := 2 ** 32;
- 
-    --  Address comparison
- 
-    function "<"  (Left, Right : Address) return Boolean;
-    function "<=" (Left, Right : Address) return Boolean;
-    function ">"  (Left, Right : Address) return Boolean;
-    function ">=" (Left, Right : Address) return Boolean;
-    function "="  (Left, Right : Address) return Boolean;
- 
-    pragma Import (Intrinsic, "<");
-    pragma Import (Intrinsic, "<=");
-    pragma Import (Intrinsic, ">");
-    pragma Import (Intrinsic, ">=");
-    pragma Import (Intrinsic, "=");
- 
-    --  Other System-Dependent Declarations
- 
-    type Bit_Order is (High_Order_First, Low_Order_First);
-    Default_Bit_Order : constant Bit_Order := Low_Order_First;
- 
-    --  Priority-related Declarations (RM D.1)
- 
-    Max_Priority           : constant Positive := 30;
-    Max_Interrupt_Priority : constant Positive := 31;
- 
-    subtype Any_Priority       is Integer      range  0 .. 31;
-    subtype Priority           is Any_Priority range  0 .. 30;
-    subtype Interrupt_Priority is Any_Priority range 31 .. 31;
- 
-    Default_Priority : constant Priority := 15;
- 
- private
- 
-    type Address is mod Memory_Size;
-    Null_Address : constant Address := 0;
- 
-    --------------------------------------
-    -- System Implementation Parameters --
-    --------------------------------------
- 
-    --  These parameters provide information about the target that is used
-    --  by the compiler. They are in the private part of System, where they
-    --  can be accessed using the special circuitry in the Targparm unit
-    --  whose source should be consulted for more detailed descriptions
-    --  of the individual switch values.
- 
-    AAMP                      : constant Boolean := False;
-    Backend_Divide_Checks     : constant Boolean := False;
-    Backend_Overflow_Checks   : constant Boolean := False;
-    Command_Line_Args         : constant Boolean := True;
-    Configurable_Run_Time     : constant Boolean := False;
-    Denorm                    : constant Boolean := False;
-    Duration_32_Bits          : constant Boolean := False;
-    Exit_Status_Supported     : constant Boolean := True;
-    Fractional_Fixed_Ops      : constant Boolean := False;
-    Frontend_Layout           : constant Boolean := False;
-    Functions_Return_By_DSP   : constant Boolean := False;
-    Machine_Overflows         : constant Boolean := False;
-    Machine_Rounds            : constant Boolean := True;
-    OpenVMS                   : constant Boolean := True;
-    Signed_Zeros              : constant Boolean := True;
-    Stack_Check_Default       : constant Boolean := True;
-    Stack_Check_Probes        : constant Boolean := True;
-    Support_64_Bit_Divides    : constant Boolean := True;
-    Support_Aggregates        : constant Boolean := True;
-    Support_Composite_Assign  : constant Boolean := True;
-    Support_Composite_Compare : constant Boolean := True;
-    Support_Long_Shifts       : constant Boolean := True;
-    Suppress_Standard_Library : constant Boolean := False;
-    Use_Ada_Main_Program_Name : constant Boolean := False;
-    ZCX_By_Default            : constant Boolean := True;
-    GCC_ZCX_Support           : constant Boolean := True;
-    Front_End_ZCX_Support     : constant Boolean := False;
- 
-    --  Obsolete entries, to be removed eventually (bootstrap issues!)
- 
-    High_Integrity_Mode       : constant Boolean := False;
-    Long_Shifts_Inlined       : constant Boolean := False;
- 
-    --------------------------
-    -- Underlying Priorities --
-    ---------------------------
- 
-    --  Important note: this section of the file must come AFTER the
-    --  definition of the system implementation parameters to ensure
-    --  that the value of these parameters is available for analysis
-    --  of the declarations here (using Rtsfind at compile time).
- 
-    --  The underlying priorities table provides a generalized mechanism
-    --  for mapping from Ada priorities to system priorities. In some
-    --  cases a 1-1 mapping is not the convenient or optimal choice.
- 
-    --  For DEC Threads OpenVMS, we use the full range of 31 priorities
-    --  in the Ada model, but map them by compression onto the more limited
-    --  range of priorities available in OpenVMS.
- 
-    --  To replace the default values of the Underlying_Priorities mapping,
-    --  copy this source file into your build directory, edit the file to
-    --  reflect your desired behavior, and recompile with the command:
- 
-    --     $ gcc -c -O3 -gnatpgn system.ads
- 
-    --  then recompile the run-time parts that depend on this package:
- 
-    --     $ gnatmake -a -gnatn -O3 <your application>
- 
-    --  then force rebuilding your application if you need different options:
- 
-    --     $ gnatmake -f <your options> <your application>
- 
-    type Priorities_Mapping is array (Any_Priority) of Integer;
-    pragma Suppress_Initialization (Priorities_Mapping);
-    --  Suppress initialization in case gnat.adc specifies Normalize_Scalars
- 
-    Underlying_Priorities : constant Priorities_Mapping :=
- 
-      (Priority'First => 16,
- 
-       1  => 17,
-       2  => 18,
-       3  => 18,
-       4  => 18,
-       5  => 18,
-       6  => 19,
-       7  => 19,
-       8  => 19,
-       9  => 20,
-       10 => 20,
-       11 => 21,
-       12 => 21,
-       13 => 22,
-       14 => 23,
- 
-       Default_Priority   => 24,
- 
-       16 => 25,
-       17 => 25,
-       18 => 25,
-       19 => 26,
-       20 => 26,
-       21 => 26,
-       22 => 27,
-       23 => 27,
-       24 => 27,
-       25 => 28,
-       26 => 28,
-       27 => 29,
-       28 => 29,
-       29 => 30,
- 
-       Priority'Last      => 30,
- 
-       Interrupt_Priority => 31);
- 
-    ----------------------------
-    -- Special VMS Interfaces --
-    ----------------------------
- 
-    procedure Lib_Stop (I : in Integer);
-    pragma Interface (C, Lib_Stop);
-    pragma Import_Procedure (Lib_Stop, "LIB$STOP", Mechanism => (Value));
-    --  Interface to VMS condition handling. Used by RTSfind and pragma
-    --  {Import,Export}_Exception. Put here because this is the only
-    --  VMS specific package that doesn't drag in tasking.
- 
- end System;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5xvxwork.ads gcc-4.0.0/gcc/ada/5xvxwork.ads
*** gcc-3.4.3/gcc/ada/5xvxwork.ads	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5xvxwork.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,54 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
- --                                                                          --
- --                        S Y S T E M . V X W O R K S                       --
- --                                                                          --
- --                                   S p e c                                --
- --                                                                          --
- --            Copyright (C) 1998-2002 Free Software Foundation, Inc.        --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the Xscale VxWorks version of this package.
- 
- package System.VxWorks is
-    pragma Preelaborate (System.VxWorks);
- 
-    --  Floating point context record. Xscale version
- 
-    --  There is no floating point unit on Xscale. The record definition
-    --  below matches what arch/arm/fppArmLib.h says.
- 
-    type FP_CONTEXT is record
-       Dummy : Integer;
-    end record;
- 
-    for FP_CONTEXT'Alignment use 4;
-    pragma Convention (C, FP_CONTEXT);
- 
-    Num_HW_Interrupts : constant := 256;
-    --  Number of entries in hardware interrupt vector table.
- 
- end System.VxWorks;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5yparame.ads gcc-4.0.0/gcc/ada/5yparame.ads
*** gcc-3.4.3/gcc/ada/5yparame.ads	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5yparame.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,203 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                    S Y S T E M . P A R A M E T E R S                     --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the default VxWorks AE 653 version of the package.`
- 
- --  This package defines some system dependent parameters for GNAT. These
- --  are values that are referenced by the runtime library and are therefore
- --  relevant to the target machine.
- 
- --  The parameters whose value is defined in the spec are not generally
- --  expected to be changed. If they are changed, it will be necessary to
- --  recompile the run-time library.
- 
- --  The parameters which are defined by functions can be changed by modifying
- --  the body of System.Parameters in file s-parame.adb. A change to this body
- --  requires only rebinding and relinking of the application.
- 
- --  Note: do not introduce any pragma Inline statements into this unit, since
- --  otherwise the relinking and rebinding capability would be deactivated.
- 
- package System.Parameters is
- pragma Pure (Parameters);
- 
-    ---------------------------------------
-    -- Task And Stack Allocation Control --
-    ---------------------------------------
- 
-    type Task_Storage_Size is new Integer;
-    --  Type used in tasking units for task storage size
- 
-    type Size_Type is new Task_Storage_Size;
-    --  Type used to provide task storage size to runtime
- 
-    Unspecified_Size : constant Size_Type := Size_Type'First;
-    --  Value used to indicate that no size type is set
- 
-    subtype Ratio is Size_Type range -1 .. 100;
-    Dynamic : constant Size_Type := -1;
-    --  The secondary stack ratio is a constant between 0 and 100 which
-    --  determines the percentage of the allocated task stack that is
-    --  used by the secondary stack (the rest being the primary stack).
-    --  The special value of minus one indicates that the secondary
-    --  stack is to be allocated from the heap instead.
- 
-    Sec_Stack_Ratio : constant Ratio := 50;
-    --  This constant defines the handling of the secondary stack
- 
-    Sec_Stack_Dynamic : constant Boolean := Sec_Stack_Ratio = Dynamic;
-    --  Convenient Boolean for testing for dynamic secondary stack
- 
-    function Default_Stack_Size return Size_Type;
-    --  Default task stack size used if none is specified
- 
-    function Minimum_Stack_Size return Size_Type;
-    --  Minimum task stack size permitted
- 
-    function Adjust_Storage_Size (Size : Size_Type) return Size_Type;
-    --  Given the storage size stored in the TCB, return the Storage_Size
-    --  value required by the RM for the Storage_Size attribute. The
-    --  required adjustment is as follows:
-    --
-    --    when Size = Unspecified_Size, return Default_Stack_Size
-    --    when Size < Minimum_Stack_Size, return Minimum_Stack_Size
-    --    otherwise return given Size
- 
-    Default_Env_Stack_Size : constant Size_Type := 14_336;
-    --  Assumed size of the environment task, if no other information
-    --  is available. This value is used when stack checking is
-    --  enabled and no GNAT_STACK_LIMIT environment variable is set.
-    --  This value is chosen as the VxWorks default stack size is 20kB,
-    --  and a little more than 4kB is necessary for the run time.
- 
-    Stack_Grows_Down  : constant Boolean := True;
-    --  This constant indicates whether the stack grows up (False) or
-    --  down (True) in memory as functions are called. It is used for
-    --  proper implementation of the stack overflow check.
- 
-    ----------------------------------------------
-    -- Characteristics of types in Interfaces.C --
-    ----------------------------------------------
- 
-    long_bits : constant := Long_Integer'Size;
-    --  Number of bits in type long and unsigned_long. The normal convention
-    --  is that this is the same as type Long_Integer, but this is not true
-    --  of all targets. For example, in OpenVMS long /= Long_Integer.
- 
-    ----------------------------------------------
-    -- Behavior of Pragma Finalize_Storage_Only --
-    ----------------------------------------------
- 
-    --  Garbage_Collected is a Boolean constant whose value indicates the
-    --  effect of the pragma Finalize_Storage_Entry on a controlled type.
- 
-    --    Garbage_Collected = False
- 
-    --      The system releases all storage on program termination only,
-    --      but not other garbage collection occurs, so finalization calls
-    --      are ommitted only for outer level onjects can be omitted if
-    --      pragma Finalize_Storage_Only is used.
- 
-    --    Garbage_Collected = True
- 
-    --      The system provides full garbage collection, so it is never
-    --      necessary to release storage for controlled objects for which
-    --      a pragma Finalize_Storage_Only is used.
- 
-    Garbage_Collected : constant Boolean := False;
-    --  The storage mode for this system (release on program exit)
- 
-    ---------------------
-    -- Tasking Profile --
-    ---------------------
- 
-    --  In the following sections, constant parameters are defined to
-    --  allow some optimizations and fine tuning within the tasking run time
-    --  based on restrictions on the tasking features.
- 
-    ----------------------
-    -- Locking Strategy --
-    ----------------------
- 
-    Single_Lock : constant Boolean := False;
-    --  Indicates whether a single lock should be used within the tasking
-    --  run-time to protect internal structures. If True, a single lock
-    --  will be used, meaning less locking/unlocking operations, but also
-    --  more global contention. In general, Single_Lock should be set to
-    --  True on single processor machines, and to False to multi-processor
-    --  systems, but this can vary from application to application and also
-    --  depends on the scheduling policy.
- 
-    -------------------
-    -- Task Abortion --
-    -------------------
- 
-    No_Abort : constant Boolean := False;
-    --  This constant indicates whether abort statements and asynchronous
-    --  transfer of control (ATC) are disallowed. If set to True, it is
-    --  assumed that neither construct is used, and the run time does not
-    --  need to defer/undefer abort and check for pending actions at
-    --  completion points. A value of True for No_Abort corresponds to:
-    --  pragma Restrictions (No_Abort_Statements);
-    --  pragma Restrictions (Max_Asynchronous_Select_Nesting => 0);
- 
-    ----------------------
-    -- Dynamic Priority --
-    ----------------------
- 
-    Dynamic_Priority_Support : constant Boolean := True;
-    --  This constant indicates whether dynamic changes of task priorities
-    --  are allowed (True means normal RM mode in which such changes are
-    --  allowed). In particular, if this is False, then we do not need to
-    --  poll for pending base priority changes at every abort completion
-    --  point. A value of False for Dynamic_Priority_Support corresponds
-    --  to pragma Restrictions (No_Dynamic_Priorities);
- 
-    ---------------------
-    -- Task Attributes --
-    ---------------------
- 
-    Default_Attribute_Count : constant := 4;
-    --  Number of pre-allocated Address-sized task attributes stored in the
-    --  task control block.
- 
-    --------------------
-    -- Runtime Traces --
-    --------------------
- 
-    Runtime_Traces : constant Boolean := False;
-    --  This constant indicates whether the runtime outputs traces to a
-    --  predefined output or not (True means that traces are output).
-    --  See System.Traces for more details.
- 
- end System.Parameters;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5ysystem.ads gcc-4.0.0/gcc/ada/5ysystem.ads
*** gcc-3.4.3/gcc/ada/5ysystem.ads	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5ysystem.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,158 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                        GNAT RUN-TIME COMPONENTS                          --
- --                                                                          --
- --                               S Y S T E M                                --
- --                                                                          --
- --                                 S p e c                                  --
- --                          (VxWorks Version PPC)                           --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the  contents of the part following the private keyword. --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- package System is
- pragma Pure (System);
- --  Note that we take advantage of the implementation permission to
- --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
- 
-    type Name is (SYSTEM_NAME_GNAT);
-    System_Name : constant Name := SYSTEM_NAME_GNAT;
- 
-    --  System-Dependent Named Numbers
- 
-    Min_Int               : constant := Long_Long_Integer'First;
-    Max_Int               : constant := Long_Long_Integer'Last;
- 
-    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
-    Max_Nonbinary_Modulus : constant := Integer'Last;
- 
-    Max_Base_Digits       : constant := Long_Long_Float'Digits;
-    Max_Digits            : constant := Long_Long_Float'Digits;
- 
-    Max_Mantissa          : constant := 63;
-    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
- 
-    Tick                  : constant := 1.0 / 60.0;
- 
-    --  Storage-related Declarations
- 
-    type Address is private;
-    Null_Address : constant Address;
- 
-    Storage_Unit : constant := 8;
-    Word_Size    : constant := 32;
-    Memory_Size  : constant := 2 ** 32;
- 
-    --  Address comparison
- 
-    function "<"  (Left, Right : Address) return Boolean;
-    function "<=" (Left, Right : Address) return Boolean;
-    function ">"  (Left, Right : Address) return Boolean;
-    function ">=" (Left, Right : Address) return Boolean;
-    function "="  (Left, Right : Address) return Boolean;
- 
-    pragma Import (Intrinsic, "<");
-    pragma Import (Intrinsic, "<=");
-    pragma Import (Intrinsic, ">");
-    pragma Import (Intrinsic, ">=");
-    pragma Import (Intrinsic, "=");
- 
-    --  Other System-Dependent Declarations
- 
-    type Bit_Order is (High_Order_First, Low_Order_First);
-    Default_Bit_Order : constant Bit_Order := High_Order_First;
- 
-    --  Priority-related Declarations (RM D.1)
- 
-    --  256        is reserved for the VxWorks kernel
-    --  248 - 255  correspond to hardware interrupt levels 0 .. 7
-    --  247        is a catchall default "interrupt" priority for signals,
-    --             allowing higher priority than normal tasks, but lower than
-    --             hardware priority levels.  Protected Object ceilings can
-    --             override these values.
-    --  246        is used by the Interrupt_Manager task
- 
-    Max_Priority           : constant Positive := 245;
-    Max_Interrupt_Priority : constant Positive := 255;
- 
-    subtype Any_Priority       is Integer      range   0 .. 255;
-    subtype Priority           is Any_Priority range   0 .. 245;
-    subtype Interrupt_Priority is Any_Priority range 246 .. 255;
- 
-    Default_Priority : constant Priority := 122;
- 
- private
- 
-    type Address is mod Memory_Size;
-    Null_Address : constant Address := 0;
- 
-    --------------------------------------
-    -- System Implementation Parameters --
-    --------------------------------------
- 
-    --  These parameters provide information about the target that is used
-    --  by the compiler. They are in the private part of System, where they
-    --  can be accessed using the special circuitry in the Targparm unit
-    --  whose source should be consulted for more detailed descriptions
-    --  of the individual switch values.
- 
-    AAMP                      : constant Boolean := False;
-    Backend_Divide_Checks     : constant Boolean := False;
-    Backend_Overflow_Checks   : constant Boolean := False;
-    Command_Line_Args         : constant Boolean := False;
-    Configurable_Run_Time     : constant Boolean := False;
-    Denorm                    : constant Boolean := True;
-    Duration_32_Bits          : constant Boolean := False;
-    Exit_Status_Supported     : constant Boolean := True;
-    Fractional_Fixed_Ops      : constant Boolean := False;
-    Frontend_Layout           : constant Boolean := False;
-    Functions_Return_By_DSP   : constant Boolean := False;
-    Machine_Overflows         : constant Boolean := False;
-    Machine_Rounds            : constant Boolean := True;
-    OpenVMS                   : constant Boolean := False;
-    Signed_Zeros              : constant Boolean := True;
-    Stack_Check_Default       : constant Boolean := False;
-    Stack_Check_Probes        : constant Boolean := False;
-    Support_64_Bit_Divides    : constant Boolean := True;
-    Support_Aggregates        : constant Boolean := True;
-    Support_Composite_Assign  : constant Boolean := True;
-    Support_Composite_Compare : constant Boolean := True;
-    Support_Long_Shifts       : constant Boolean := True;
-    Suppress_Standard_Library : constant Boolean := False;
-    Use_Ada_Main_Program_Name : constant Boolean := True;
-    ZCX_By_Default            : constant Boolean := False;
-    GCC_ZCX_Support           : constant Boolean := False;
-    Front_End_ZCX_Support     : constant Boolean := False;
- 
-    --  Obsolete entries, to be removed eventually (bootstrap issues!)
- 
-    High_Integrity_Mode       : constant Boolean := False;
-    Long_Shifts_Inlined       : constant Boolean := False;
- 
- end System;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5zinit.adb gcc-4.0.0/gcc/ada/5zinit.adb
*** gcc-3.4.3/gcc/ada/5zinit.adb	Mon Jan  5 15:20:43 2004
--- gcc-4.0.0/gcc/ada/5zinit.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,319 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
- --                                                                          --
- --                             S Y S T E M . I N I T                        --
- --                                                                          --
- --                                   B o d y                                --
- --                                                                          --
- --          Copyright (C) 2003-2004 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the Level A cert version of this package for AE653
- 
- with Interfaces.C;
- --  Used for int and other types
- 
- with Ada.Exceptions;
- --  Used for Raise_Exception
- 
- package body System.Init is
- 
-    use Ada.Exceptions;
-    use Interfaces.C;
- 
-    --------------------------
-    --  Signal Definitions  --
-    --------------------------
- 
-    NSIG : constant := 32;
-    --  Number of signals on the target OS
- 
-    type Signal is new int range 0 .. Interfaces.C."-" (NSIG, 1);
- 
-    SIGILL  : constant :=  4; --  illegal instruction (not reset)
-    SIGFPE  : constant :=  8; --  floating point exception
-    SIGBUS  : constant := 10; --  bus error
-    SIGSEGV : constant := 11; --  segmentation violation
- 
-    type sigset_t is new long;
- 
-    SIG_SETMASK : constant := 3;
-    SA_ONSTACK   : constant := 16#0004#;
- 
-    type struct_sigaction is record
-       sa_handler : System.Address;
-       sa_mask    : sigset_t;
-       sa_flags   : int;
-    end record;
-    pragma Convention (C, struct_sigaction);
-    type struct_sigaction_ptr is access all struct_sigaction;
- 
-    function sigdelset (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigdelset, "sigdelset");
- 
-    function sigemptyset (set : access sigset_t) return int;
-    pragma Import (C, sigemptyset, "sigemptyset");
- 
-    function sigaction
-      (sig  : Signal;
-       act  : struct_sigaction_ptr;
-       oact : struct_sigaction_ptr) return int;
-    pragma Import (C, sigaction, "sigaction");
- 
-    type sigset_t_ptr is access all sigset_t;
- 
-    function pthread_sigmask
-      (how  : int;
-       set  : sigset_t_ptr;
-       oset : sigset_t_ptr) return int;
-    pragma Import (C, pthread_sigmask, "sigprocmask");
- 
-    -------------------------------
-    --  Binder Generated Values  --
-    -------------------------------
- 
-    Gl_Main_Priority : Integer := -1;
-    pragma Export (C, Gl_Main_Priority, "__gl_main_priority");
- 
-    Gl_Time_Slice_Val : Integer := -1;
-    pragma Export (C, Gl_Time_Slice_Val, "__gl_time_slice_val");
- 
-    Gl_Wc_Encoding : Character := 'n';
-    pragma Export (C, Gl_Wc_Encoding, "__gl_wc_encoding");
- 
-    Gl_Locking_Policy : Character := ' ';
-    pragma Export (C, Gl_Locking_Policy, "__gl_locking_policy");
- 
-    Gl_Queuing_Policy : Character := ' ';
-    pragma Export (C, Gl_Queuing_Policy, "__gl_queuing_policy");
- 
-    Gl_Task_Dispatching_Policy : Character := ' ';
-    pragma Export (C, Gl_Task_Dispatching_Policy,
-                      "__gl_task_dispatching_policy");
- 
-    Gl_Restrictions : Address := Null_Address;
-    pragma Export (C, Gl_Restrictions, "__gl_restrictions");
- 
-    Gl_Interrupt_States : Address := Null_Address;
-    pragma Export (C, Gl_Interrupt_States, "__gl_interrupt_states");
- 
-    Gl_Num_Interrupt_States : Integer := 0;
-    pragma Export (C, Gl_Num_Interrupt_States, "__gl_num_interrupt_states");
- 
-    Gl_Unreserve_All_Interrupts : Integer := 0;
-    pragma Export (C, Gl_Unreserve_All_Interrupts,
-                   "__gl_unreserve_all_interrupts");
- 
-    Gl_Exception_Tracebacks : Integer := 0;
-    pragma Export (C, Gl_Exception_Tracebacks, "__gl_exception_tracebacks");
- 
-    Gl_Zero_Cost_Exceptions : Integer := 0;
-    pragma Export (C, Gl_Zero_Cost_Exceptions, "__gl_zero_cost_exceptions");
- 
-    Already_Called : Boolean := False;
- 
-    Handler_Installed : Integer := 0;
-    pragma Export (C, Handler_Installed, "__gnat_handler_installed");
-    --  Indication of whether synchronous signal handlers have already been
-    --  installed by a previous call to Install_Handler.
- 
-    ------------------------
-    --  Local procedures  --
-    ------------------------
- 
-    procedure GNAT_Error_Handler (Sig : Signal);
-    --  Common procedure that is executed when a SIGFPE, SIGILL,
-    --  SIGSEGV, or SIGBUS is captured.
- 
-    ------------------------
-    -- GNAT_Error_Handler --
-    ------------------------
- 
-    procedure GNAT_Error_Handler (Sig : Signal) is
-       Mask : aliased sigset_t;
- 
-       Result : int;
-       pragma Unreferenced (Result);
- 
-    begin
-       --  VxWorks will always mask out the signal during the signal
-       --  handler and will reenable it on a longjmp.  GNAT does not
-       --  generate a longjmp to return from a signal handler so the
-       --  signal will still be masked unless we unmask it.
- 
-       Result := pthread_sigmask (SIG_SETMASK, null, Mask'Unchecked_Access);
-       Result := sigdelset (Mask'Access, Sig);
-       Result := pthread_sigmask (SIG_SETMASK, Mask'Unchecked_Access, null);
- 
-       case Sig is
-          when SIGFPE =>
-             Raise_Exception (Constraint_Error'Identity, "SIGFPE");
-          when SIGILL =>
-             Raise_Exception (Constraint_Error'Identity, "SIGILL");
-          when SIGSEGV =>
-             Raise_Exception
-               (Program_Error'Identity,
-                "erroneous memory access");
-          when SIGBUS =>
-             Raise_Exception
-               (Storage_Error'Identity,
-                "stack overflow or SIGBUS");
-          when others =>
-             Raise_Exception (Program_Error'Identity, "unhandled signal");
-       end case;
-    end GNAT_Error_Handler;
- 
-    -----------------
-    -- Set_Globals --
-    -----------------
- 
-    --  This routine is called from the binder generated main program.  It
-    --  copies the values for global quantities computed by the binder
-    --  into the following global locations. The reason that we go through
-    --  this copy, rather than just define the global locations in the
-    --  binder generated file, is that they are referenced from the
-    --  runtime, which may be in a shared library, and the binder file is
-    --  not in the shared library. Global references across library
-    --  boundaries like this are not handled correctly in all systems.
- 
-    procedure Set_Globals
-      (Main_Priority            : Integer;
-       Time_Slice_Value         : Integer;
-       WC_Encoding              : Character;
-       Locking_Policy           : Character;
-       Queuing_Policy           : Character;
-       Task_Dispatching_Policy  : Character;
-       Restrictions             : System.Address;
-       Interrupt_States         : System.Address;
-       Num_Interrupt_States     : Integer;
-       Unreserve_All_Interrupts : Integer;
-       Exception_Tracebacks     : Integer;
-       Zero_Cost_Exceptions     : Integer)
-    is
-    begin
-       --  If this procedure has been already called once, check that the
-       --  arguments in this call are consistent with the ones in the
-       --  previous calls. Otherwise, raise a Program_Error exception.
- 
-       --  We do not check for consistency of the wide character encoding
-       --  method. This default affects only Wide_Text_IO where no
-       --  explicit coding method is given, and there is no particular
-       --  reason to let this default be affected by the source
-       --  representation of a library in any case.
- 
-       --  We do not check either for the consistency of exception tracebacks,
-       --  because exception tracebacks are not normally set in Stand-Alone
-       --  libraries. If a library or the main program set the exception
-       --  tracebacks, then they are never reset afterwards (see below).
- 
-       --  The value of main_priority is meaningful only when we are
-       --  invoked from the main program elaboration routine of an Ada
-       --  application. Checking the consistency of this parameter should
-       --  therefore not be done. Since it is assured that the main
-       --  program elaboration will always invoke this procedure before
-       --  any library elaboration routine, only the value of
-       --  main_priority during the first call should be taken into
-       --  account and all the subsequent ones should be ignored. Note
-       --  that the case where the main program is not written in Ada is
-       --  also properly handled, since the default value will then be
-       --  used for this parameter.
- 
-       --  For identical reasons, the consistency of time_slice_val should
-       --  not be checked.
- 
-       if Already_Called then
-          if (Gl_Locking_Policy           /= Locking_Policy)           or else
-             (Gl_Queuing_Policy           /= Queuing_Policy)           or else
-             (Gl_Task_Dispatching_Policy  /= Task_Dispatching_Policy)  or else
-             (Gl_Unreserve_All_Interrupts /= Unreserve_All_Interrupts) or else
-             (Gl_Exception_Tracebacks     /= Exception_Tracebacks)     or else
-             (Gl_Zero_Cost_Exceptions     /= Zero_Cost_Exceptions)
-          then
-             raise Program_Error;
-          end if;
- 
-          --  If either a library or the main program set the exception
-          --  traceback flag, it is never reset later.
- 
-          if Gl_Exception_Tracebacks /= 0 then
-             Gl_Exception_Tracebacks := Exception_Tracebacks;
-          end if;
- 
-       else
-          Already_Called := True;
- 
-          Gl_Main_Priority            := Main_Priority;
-          Gl_Time_Slice_Val           := Time_Slice_Value;
-          Gl_Wc_Encoding              := WC_Encoding;
-          Gl_Locking_Policy           := Locking_Policy;
-          Gl_Queuing_Policy           := Queuing_Policy;
-          Gl_Task_Dispatching_Policy  := Task_Dispatching_Policy;
-          Gl_Restrictions             := Restrictions;
-          Gl_Interrupt_States         := Interrupt_States;
-          Gl_Num_Interrupt_States     := Num_Interrupt_States;
-          Gl_Unreserve_All_Interrupts := Unreserve_All_Interrupts;
-          Gl_Exception_Tracebacks     := Exception_Tracebacks;
-          Gl_Zero_Cost_Exceptions     := Zero_Cost_Exceptions;
-       end if;
-    end Set_Globals;
- 
-    ---------------------
-    -- Install_Handler --
-    ---------------------
- 
-    procedure Install_Handler is
-       Mask          : aliased sigset_t;
-       Signal_Action : aliased struct_sigaction;
- 
-       Result : Interfaces.C.int;
-       pragma Unreferenced (Result);
- 
-    begin
-       --  Set up signal handler to map synchronous signals to appropriate
-       --  exceptions. Make sure that the handler isn't interrupted by
-       --  another signal that might cause a scheduling event!
- 
-       Signal_Action.sa_handler := GNAT_Error_Handler'Address;
-       Signal_Action.sa_flags := SA_ONSTACK;
-       Result := sigemptyset (Mask'Access);
-       Signal_Action.sa_mask := Mask;
- 
-       Result := sigaction
-         (Signal (SIGFPE), Signal_Action'Unchecked_Access, null);
- 
-       Result := sigaction
-         (Signal (SIGILL), Signal_Action'Unchecked_Access, null);
- 
-       Result := sigaction
-         (Signal (SIGSEGV), Signal_Action'Unchecked_Access, null);
- 
-       Result := sigaction
-         (Signal (SIGBUS), Signal_Action'Unchecked_Access, null);
- 
-       Handler_Installed := 1;
-    end Install_Handler;
- 
- end System.Init;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5zinterr.adb gcc-4.0.0/gcc/ada/5zinterr.adb
*** gcc-3.4.3/gcc/ada/5zinterr.adb	Mon Jan  5 15:20:43 2004
--- gcc-4.0.0/gcc/ada/5zinterr.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,1146 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                     S Y S T E M . I N T E R R U P T S                    --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --         Copyright (C) 1992-2004, Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  Invariants:
- 
- --  All user-handleable signals are masked at all times in all
- --  tasks/threads except possibly for the Interrupt_Manager task.
- 
- --  When a user task wants to have the effect of masking/unmasking an
- --  signal, it must call Block_Interrupt/Unblock_Interrupt, which
- --  will have the effect of unmasking/masking the signal in the
- --  Interrupt_Manager task.  These comments do not apply to vectored
- --  hardware interrupts, which may be masked or unmasked using routined
- --  interfaced to the relevant VxWorks system calls.
- 
- --  Once we associate a Signal_Server_Task with an signal, the task never
- --  goes away, and we never remove the association. On the other hand, it
- --  is more convenient to terminate an associated Interrupt_Server_Task
- --  for a vectored hardware interrupt (since we use a binary semaphore
- --  for synchronization with the umbrella handler).
- 
- --  There is no more than one signal per Signal_Server_Task and no more than
- --  one Signal_Server_Task per signal.  The same relation holds for hardware
- --  interrupts and Interrupt_Server_Task's at any given time.  That is,
- --  only one non-terminated Interrupt_Server_Task exists for a give
- --  interrupt at any time.
- 
- --  Within this package, the lock L is used to protect the various status
- --  tables. If there is a Server_Task associated with a signal or interrupt,
- --  we use the per-task lock of the Server_Task instead so that we protect the
- --  status between Interrupt_Manager and Server_Task. Protection among
- --  service requests are ensured via user calls to the Interrupt_Manager
- --  entries.
- 
- --  This is the VxWorks version of this package, supporting vectored hardware
- --  interrupts.
- 
- with Unchecked_Conversion;
- 
- with System.OS_Interface; use System.OS_Interface;
- 
- with Interfaces.VxWorks;
- 
- with Ada.Task_Identification;
- --  used for Task_ID type
- 
- with Ada.Exceptions;
- --  used for Raise_Exception
- 
- with System.Interrupt_Management;
- --  used for Reserve
- 
- with System.Task_Primitives.Operations;
- --  used for Write_Lock
- --           Unlock
- --           Abort
- --           Wakeup_Task
- --           Sleep
- --           Initialize_Lock
- 
- with System.Storage_Elements;
- --  used for To_Address
- --           To_Integer
- --           Integer_Address
- 
- with System.Tasking;
- --  used for Task_ID
- --           Task_Entry_Index
- --           Null_Task
- --           Self
- --           Interrupt_Manager_ID
- 
- with System.Tasking.Utilities;
- --  used for Make_Independent
- 
- with System.Tasking.Rendezvous;
- --  used for Call_Simple
- pragma Elaborate_All (System.Tasking.Rendezvous);
- 
- package body System.Interrupts is
- 
-    use Tasking;
-    use Ada.Exceptions;
- 
-    package POP renames System.Task_Primitives.Operations;
- 
-    function To_Ada is new Unchecked_Conversion
-      (System.Tasking.Task_ID, Ada.Task_Identification.Task_Id);
- 
-    function To_System is new Unchecked_Conversion
-      (Ada.Task_Identification.Task_Id, Task_ID);
- 
-    -----------------
-    -- Local Tasks --
-    -----------------
- 
-    --  WARNING: System.Tasking.Stages performs calls to this task
-    --  with low-level constructs. Do not change this spec without synchro-
-    --  nizing it.
- 
-    task Interrupt_Manager is
-       entry Detach_Interrupt_Entries (T : Task_ID);
- 
-       entry Attach_Handler
-         (New_Handler : Parameterless_Handler;
-          Interrupt   : Interrupt_ID;
-          Static      : Boolean;
-          Restoration : Boolean := False);
- 
-       entry Exchange_Handler
-         (Old_Handler : out Parameterless_Handler;
-          New_Handler : Parameterless_Handler;
-          Interrupt   : Interrupt_ID;
-          Static      : Boolean);
- 
-       entry Detach_Handler
-         (Interrupt : Interrupt_ID;
-          Static    : Boolean);
- 
-       entry Bind_Interrupt_To_Entry
-         (T         : Task_ID;
-          E         : Task_Entry_Index;
-          Interrupt : Interrupt_ID);
- 
-       pragma Interrupt_Priority (System.Interrupt_Priority'First);
-    end Interrupt_Manager;
- 
-    task type Interrupt_Server_Task
-      (Interrupt : Interrupt_ID; Int_Sema : SEM_ID) is
-       --  Server task for vectored hardware interrupt handling
-       pragma Interrupt_Priority (System.Interrupt_Priority'First + 2);
-    end Interrupt_Server_Task;
- 
-    type Interrupt_Task_Access is access Interrupt_Server_Task;
- 
-    -------------------------------
-    -- Local Types and Variables --
-    -------------------------------
- 
-    type Entry_Assoc is record
-       T : Task_ID;
-       E : Task_Entry_Index;
-    end record;
- 
-    type Handler_Assoc is record
-       H      : Parameterless_Handler;
-       Static : Boolean;   --  Indicates static binding;
-    end record;
- 
-    User_Handler : array (Interrupt_ID) of Handler_Assoc :=
-      (others => (null, Static => False));
-    pragma Volatile_Components (User_Handler);
-    --  Holds the protected procedure handler (if any) and its Static
-    --  information  for each interrupt or signal. A handler is static
-    --  iff it is specified through the pragma Attach_Handler.
- 
-    User_Entry : array (Interrupt_ID) of Entry_Assoc :=
-      (others => (T => Null_Task, E => Null_Task_Entry));
-    pragma Volatile_Components (User_Entry);
-    --  Holds the task and entry index (if any) for each interrupt / signal
- 
-    --  Type and Head, Tail of the list containing Registered Interrupt
-    --  Handlers. These definitions are used to register the handlers
-    --  specified by the pragma Interrupt_Handler.
- 
-    type Registered_Handler;
-    type R_Link is access all Registered_Handler;
- 
-    type Registered_Handler is record
-       H    : System.Address := System.Null_Address;
-       Next : R_Link := null;
-    end record;
- 
-    Registered_Handler_Head : R_Link := null;
-    Registered_Handler_Tail : R_Link := null;
- 
-    Server_ID : array (Interrupt_ID) of System.Tasking.Task_ID :=
-      (others => System.Tasking.Null_Task);
-    pragma Atomic_Components (Server_ID);
-    --  Holds the Task_ID of the Server_Task for each interrupt / signal.
-    --  Task_ID is needed to accomplish locking per interrupt base. Also
-    --  is needed to determine whether to create a new Server_Task.
- 
-    Semaphore_ID_Map : array
-      (Interrupt_ID range 0 .. System.OS_Interface.Max_HW_Interrupt)
-       of SEM_ID := (others => 0);
-    --  Array of binary semaphores associated with vectored interrupts
-    --  Note that the last bound should be Max_HW_Interrupt, but this will raise
-    --  Storage_Error if Num_HW_Interrupts is null, so use an extra 4 bytes
-    --  instead.
- 
-    Interrupt_Access_Hold : Interrupt_Task_Access;
-    --  Variable for allocating an Interrupt_Server_Task
- 
-    Default_Handler : array (HW_Interrupt) of Interfaces.VxWorks.VOIDFUNCPTR;
-    --  Vectored interrupt handlers installed prior to program startup.
-    --  These are saved only when the umbrella handler is installed for
-    --  a given interrupt number.
- 
-    -----------------------
-    -- Local Subprograms --
-    -----------------------
- 
-    procedure Check_Reserved_Interrupt (Interrupt : Interrupt_ID);
-    --  Check if Id is a reserved interrupt, and if so raise Program_Error
-    --  with an appropriate message, otherwise return.
- 
-    procedure Finalize_Interrupt_Servers;
-    --  Unbind the handlers for hardware interrupt server tasks at program
-    --  termination.
- 
-    function Is_Registered (Handler : Parameterless_Handler) return Boolean;
-    --  See if Handler has been "pragma"ed using Interrupt_Handler.
-    --  Always consider a null handler as registered.
- 
-    procedure Notify_Interrupt (Param : System.Address);
-    --  Umbrella handler for vectored interrupts (not signals)
- 
-    procedure Install_Default_Action (Interrupt : HW_Interrupt);
-    --  Restore a handler that was in place prior to program execution
- 
-    procedure Install_Umbrella_Handler
-      (Interrupt : HW_Interrupt;
-       Handler   : Interfaces.VxWorks.VOIDFUNCPTR);
-    --  Install the runtime umbrella handler for a vectored hardware
-    --  interrupt
- 
-    procedure Unimplemented (Feature : String);
-    pragma No_Return (Unimplemented);
-    --  Used to mark a call to an unimplemented function. Raises Program_Error
-    --  with an appropriate message noting that Feature is unimplemented.
- 
-    --------------------
-    -- Attach_Handler --
-    --------------------
- 
-    --  Calling this procedure with New_Handler = null and Static = True
-    --  means we want to detach the current handler regardless of the
-    --  previous handler's binding status (ie. do not care if it is a
-    --  dynamic or static handler).
- 
-    --  This option is needed so that during the finalization of a PO, we
-    --  can detach handlers attached through pragma Attach_Handler.
- 
-    procedure Attach_Handler
-      (New_Handler : Parameterless_Handler;
-       Interrupt   : Interrupt_ID;
-       Static      : Boolean := False) is
-    begin
-       Check_Reserved_Interrupt (Interrupt);
-       Interrupt_Manager.Attach_Handler (New_Handler, Interrupt, Static);
-    end Attach_Handler;
- 
-    -----------------------------
-    -- Bind_Interrupt_To_Entry --
-    -----------------------------
- 
-    --  This procedure raises a Program_Error if it tries to
-    --  bind an interrupt to which an Entry or a Procedure is
-    --  already bound.
- 
-    procedure Bind_Interrupt_To_Entry
-      (T       : Task_ID;
-       E       : Task_Entry_Index;
-       Int_Ref : System.Address)
-    is
-       Interrupt : constant Interrupt_ID :=
-         Interrupt_ID (Storage_Elements.To_Integer (Int_Ref));
- 
-    begin
-       Check_Reserved_Interrupt (Interrupt);
-       Interrupt_Manager.Bind_Interrupt_To_Entry (T, E, Interrupt);
-    end Bind_Interrupt_To_Entry;
- 
-    ---------------------
-    -- Block_Interrupt --
-    ---------------------
- 
-    procedure Block_Interrupt (Interrupt : Interrupt_ID) is
-    begin
-       Unimplemented ("Block_Interrupt");
-    end Block_Interrupt;
- 
-    ------------------------------
-    -- Check_Reserved_Interrupt --
-    ------------------------------
- 
-    procedure Check_Reserved_Interrupt (Interrupt : Interrupt_ID) is
-    begin
-       if Is_Reserved (Interrupt) then
-          Raise_Exception
-            (Program_Error'Identity,
-             "Interrupt" & Interrupt_ID'Image (Interrupt) & " is reserved");
-       else
-          return;
-       end if;
-    end Check_Reserved_Interrupt;
- 
-    ---------------------
-    -- Current_Handler --
-    ---------------------
- 
-    function Current_Handler
-      (Interrupt : Interrupt_ID) return Parameterless_Handler is
-    begin
-       Check_Reserved_Interrupt (Interrupt);
- 
-       --  ??? Since Parameterless_Handler is not Atomic, the
-       --  current implementation is wrong. We need a new service in
-       --  Interrupt_Manager to ensure atomicity.
- 
-       return User_Handler (Interrupt).H;
-    end Current_Handler;
- 
-    --------------------
-    -- Detach_Handler --
-    --------------------
- 
-    --  Calling this procedure with Static = True means we want to Detach the
-    --  current handler regardless of the previous handler's binding status
-    --  (i.e. do not care if it is a dynamic or static handler).
- 
-    --  This option is needed so that during the finalization of a PO, we can
-    --  detach handlers attached through pragma Attach_Handler.
- 
-    procedure Detach_Handler
-      (Interrupt : Interrupt_ID;
-       Static    : Boolean := False) is
-    begin
-       Check_Reserved_Interrupt (Interrupt);
-       Interrupt_Manager.Detach_Handler (Interrupt, Static);
-    end Detach_Handler;
- 
-    ------------------------------
-    -- Detach_Interrupt_Entries --
-    ------------------------------
- 
-    procedure Detach_Interrupt_Entries (T : Task_ID) is
-    begin
-       Interrupt_Manager.Detach_Interrupt_Entries (T);
-    end Detach_Interrupt_Entries;
- 
-    ----------------------
-    -- Exchange_Handler --
-    ----------------------
- 
-    --  Calling this procedure with New_Handler = null and Static = True
-    --  means we want to detach the current handler regardless of the
-    --  previous handler's binding status (ie. do not care if it is a
-    --  dynamic or static handler).
- 
-    --  This option is needed so that during the finalization of a PO, we
-    --  can detach handlers attached through pragma Attach_Handler.
- 
-    procedure Exchange_Handler
-      (Old_Handler : out Parameterless_Handler;
-       New_Handler : Parameterless_Handler;
-       Interrupt   : Interrupt_ID;
-       Static      : Boolean := False) is
-    begin
-       Check_Reserved_Interrupt (Interrupt);
-       Interrupt_Manager.Exchange_Handler
-         (Old_Handler, New_Handler, Interrupt, Static);
-    end Exchange_Handler;
- 
-    --------------
-    -- Finalize --
-    --------------
- 
-    procedure Finalize (Object : in out Static_Interrupt_Protection) is
-    begin
-       --  ??? loop to be executed only when we're not doing library level
-       --  finalization, since in this case all interrupt / signal tasks are
-       --  gone.
- 
-       if not Interrupt_Manager'Terminated then
-          for N in reverse Object.Previous_Handlers'Range loop
-             Interrupt_Manager.Attach_Handler
-               (New_Handler => Object.Previous_Handlers (N).Handler,
-                Interrupt   => Object.Previous_Handlers (N).Interrupt,
-                Static      => Object.Previous_Handlers (N).Static,
-                Restoration => True);
-          end loop;
-       end if;
- 
-       Tasking.Protected_Objects.Entries.Finalize
-         (Tasking.Protected_Objects.Entries.Protection_Entries (Object));
-    end Finalize;
- 
-    --------------------------------
-    -- Finalize_Interrupt_Servers --
-    --------------------------------
- 
-    --  Restore default handlers for interrupt servers.
- 
-    --  This is called by the Interrupt_Manager task when it receives the abort
-    --  signal during program finalization.
- 
-    procedure Finalize_Interrupt_Servers is
-       HW_Interrupts : constant Boolean := HW_Interrupt'Last >= 0;
- 
-    begin
-       if HW_Interrupts then
-          for Int in HW_Interrupt loop
-             if Server_ID (Interrupt_ID (Int)) /= null
-               and then
-                 not Ada.Task_Identification.Is_Terminated
-                  (To_Ada (Server_ID (Interrupt_ID (Int))))
-             then
-                Interrupt_Manager.Attach_Handler
-                  (New_Handler => null,
-                   Interrupt => Interrupt_ID (Int),
-                   Static => True,
-                   Restoration => True);
-             end if;
-          end loop;
-       end if;
-    end Finalize_Interrupt_Servers;
- 
-    -------------------------------------
-    -- Has_Interrupt_Or_Attach_Handler --
-    -------------------------------------
- 
-    function Has_Interrupt_Or_Attach_Handler
-      (Object : access Dynamic_Interrupt_Protection)
-       return   Boolean
-    is
-       pragma Unreferenced (Object);
- 
-    begin
-       return True;
-    end Has_Interrupt_Or_Attach_Handler;
- 
-    function Has_Interrupt_Or_Attach_Handler
-      (Object : access Static_Interrupt_Protection)
-       return   Boolean
-    is
-       pragma Unreferenced (Object);
- 
-    begin
-       return True;
-    end Has_Interrupt_Or_Attach_Handler;
- 
-    ----------------------
-    -- Ignore_Interrupt --
-    ----------------------
- 
-    procedure Ignore_Interrupt (Interrupt : Interrupt_ID) is
-    begin
-       Unimplemented ("Ignore_Interrupt");
-    end Ignore_Interrupt;
- 
-    ----------------------------
-    -- Install_Default_Action --
-    ----------------------------
- 
-    procedure Install_Default_Action (Interrupt : HW_Interrupt) is
-    begin
-       --  Restore original interrupt handler
- 
-       Interfaces.VxWorks.intVecSet
-         (Interfaces.VxWorks.INUM_TO_IVEC (Integer (Interrupt)),
-          Default_Handler (Interrupt));
-       Default_Handler (Interrupt) := null;
-    end Install_Default_Action;
- 
-    ----------------------
-    -- Install_Handlers --
-    ----------------------
- 
-    procedure Install_Handlers
-      (Object       : access Static_Interrupt_Protection;
-       New_Handlers : New_Handler_Array) is
-    begin
-       for N in New_Handlers'Range loop
-          --  We need a lock around this ???
- 
-          Object.Previous_Handlers (N).Interrupt := New_Handlers (N).Interrupt;
-          Object.Previous_Handlers (N).Static    := User_Handler
-            (New_Handlers (N).Interrupt).Static;
- 
-          --  We call Exchange_Handler and not directly Interrupt_Manager.
-          --  Exchange_Handler so we get the Is_Reserved check.
- 
-          Exchange_Handler
-            (Old_Handler => Object.Previous_Handlers (N).Handler,
-             New_Handler => New_Handlers (N).Handler,
-             Interrupt   => New_Handlers (N).Interrupt,
-             Static      => True);
-       end loop;
-    end Install_Handlers;
- 
-    ------------------------------
-    -- Install_Umbrella_Handler --
-    ------------------------------
- 
-    procedure Install_Umbrella_Handler
-      (Interrupt : HW_Interrupt;
-       Handler   : Interfaces.VxWorks.VOIDFUNCPTR)
-    is
-       use Interfaces.VxWorks;
- 
-       Vec : constant Interrupt_Vector :=
-               INUM_TO_IVEC (Interfaces.VxWorks.int (Interrupt));
- 
-       Old_Handler : constant VOIDFUNCPTR :=
-                       intVecGet
-                         (INUM_TO_IVEC (Interfaces.VxWorks.int (Interrupt)));
- 
-       Stat : Interfaces.VxWorks.STATUS;
-       pragma Unreferenced (Stat);
-       --  ??? shouldn't we test Stat at least in a pragma Assert?
- 
-    begin
-       --  Only install umbrella handler when no Ada handler has already been
-       --  installed. Note that the interrupt number is passed as a parameter
-       --  when an interrupt occurs, so the umbrella handler has a different
-       --  wrapper generated by intConnect for each interrupt number.
- 
-       if Default_Handler (Interrupt) = null then
-          Stat :=
-            intConnect (Vec, Handler, System.Address (Interrupt));
-          Default_Handler (Interrupt) := Old_Handler;
-       end if;
-    end Install_Umbrella_Handler;
- 
-    ----------------
-    -- Is_Blocked --
-    ----------------
- 
-    function Is_Blocked (Interrupt : Interrupt_ID) return Boolean is
-    begin
-       Unimplemented ("Is_Blocked");
-       return False;
-    end Is_Blocked;
- 
-    -----------------------
-    -- Is_Entry_Attached --
-    -----------------------
- 
-    function Is_Entry_Attached (Interrupt : Interrupt_ID) return Boolean is
-    begin
-       Check_Reserved_Interrupt (Interrupt);
-       return User_Entry (Interrupt).T /= Null_Task;
-    end Is_Entry_Attached;
- 
-    -------------------------
-    -- Is_Handler_Attached --
-    -------------------------
- 
-    function Is_Handler_Attached (Interrupt : Interrupt_ID) return Boolean is
-    begin
-       Check_Reserved_Interrupt (Interrupt);
-       return User_Handler (Interrupt).H /= null;
-    end Is_Handler_Attached;
- 
-    ----------------
-    -- Is_Ignored --
-    ----------------
- 
-    function Is_Ignored (Interrupt : Interrupt_ID) return Boolean is
-    begin
-       Unimplemented ("Is_Ignored");
-       return False;
-    end Is_Ignored;
- 
-    -------------------
-    -- Is_Registered --
-    -------------------
- 
-    function Is_Registered (Handler : Parameterless_Handler) return Boolean is
-       type Fat_Ptr is record
-          Object_Addr  : System.Address;
-          Handler_Addr : System.Address;
-       end record;
- 
-       function To_Fat_Ptr is new Unchecked_Conversion
-         (Parameterless_Handler, Fat_Ptr);
- 
-       Ptr : R_Link;
-       Fat : Fat_Ptr;
- 
-    begin
-       if Handler = null then
-          return True;
-       end if;
- 
-       Fat := To_Fat_Ptr (Handler);
- 
-       Ptr := Registered_Handler_Head;
- 
-       while Ptr /= null loop
-          if Ptr.H = Fat.Handler_Addr then
-             return True;
-          end if;
- 
-          Ptr := Ptr.Next;
-       end loop;
- 
-       return False;
-    end Is_Registered;
- 
-    -----------------
-    -- Is_Reserved --
-    -----------------
- 
-    function Is_Reserved (Interrupt : Interrupt_ID) return Boolean is
-       use System.Interrupt_Management;
-    begin
-       return Reserve (System.Interrupt_Management.Interrupt_ID (Interrupt));
-    end Is_Reserved;
- 
-    ----------------------
-    -- Notify_Interrupt --
-    ----------------------
- 
-    --  Umbrella handler for vectored hardware interrupts (as opposed to
-    --  signals and exceptions).  As opposed to the signal implementation,
-    --  this handler is only installed in the vector table while there is
-    --  an active association of an Ada handler to the interrupt.
- 
-    --  Otherwise, the handler that existed prior to program startup is
-    --  in the vector table.  This ensures that handlers installed by
-    --  the BSP are active unless explicitly replaced in the program text.
- 
-    --  Each Interrupt_Server_Task has an associated binary semaphore
-    --  on which it pends once it's been started.  This routine determines
-    --  The appropriate semaphore and and issues a semGive call, waking
-    --  the server task.  When a handler is unbound,
-    --  System.Interrupts.Unbind_Handler issues a semFlush, and the
-    --  server task deletes its semaphore and terminates.
- 
-    procedure Notify_Interrupt (Param : System.Address) is
-       Interrupt : constant Interrupt_ID := Interrupt_ID (Param);
- 
-       Discard_Result : STATUS;
-       pragma Unreferenced (Discard_Result);
- 
-    begin
-       Discard_Result := semGive (Semaphore_ID_Map (Interrupt));
-    end Notify_Interrupt;
- 
-    ---------------
-    -- Reference --
-    ---------------
- 
-    function Reference (Interrupt : Interrupt_ID) return System.Address is
-    begin
-       Check_Reserved_Interrupt (Interrupt);
-       return Storage_Elements.To_Address
-         (Storage_Elements.Integer_Address (Interrupt));
-    end Reference;
- 
-    --------------------------------
-    -- Register_Interrupt_Handler --
-    --------------------------------
- 
-    procedure Register_Interrupt_Handler (Handler_Addr : System.Address) is
-       New_Node_Ptr : R_Link;
-    begin
-       --  This routine registers a handler as usable for dynamic
-       --  interrupt handler association. Routines attaching and detaching
-       --  handlers dynamically should determine whether the handler is
-       --  registered. Program_Error should be raised if it is not registered.
- 
-       --  Pragma Interrupt_Handler can only appear in a library
-       --  level PO definition and instantiation. Therefore, we do not need
-       --  to implement an unregister operation. Nor do we need to
-       --  protect the queue structure with a lock.
- 
-       pragma Assert (Handler_Addr /= System.Null_Address);
- 
-       New_Node_Ptr := new Registered_Handler;
-       New_Node_Ptr.H := Handler_Addr;
- 
-       if Registered_Handler_Head = null then
-          Registered_Handler_Head := New_Node_Ptr;
-          Registered_Handler_Tail := New_Node_Ptr;
- 
-       else
-          Registered_Handler_Tail.Next := New_Node_Ptr;
-          Registered_Handler_Tail := New_Node_Ptr;
-       end if;
-    end Register_Interrupt_Handler;
- 
-    -----------------------
-    -- Unblock_Interrupt --
-    -----------------------
- 
-    procedure Unblock_Interrupt (Interrupt : Interrupt_ID) is
-    begin
-       Unimplemented ("Unblock_Interrupt");
-    end Unblock_Interrupt;
- 
-    ------------------
-    -- Unblocked_By --
-    ------------------
- 
-    function Unblocked_By
-      (Interrupt : Interrupt_ID) return System.Tasking.Task_ID is
-    begin
-       Unimplemented ("Unblocked_By");
-       return Null_Task;
-    end Unblocked_By;
- 
-    ------------------------
-    -- Unignore_Interrupt --
-    ------------------------
- 
-    procedure Unignore_Interrupt (Interrupt : Interrupt_ID) is
-    begin
-       Unimplemented ("Unignore_Interrupt");
-    end Unignore_Interrupt;
- 
-    -------------------
-    -- Unimplemented --
-    -------------------
- 
-    procedure Unimplemented (Feature : String) is
-    begin
-       Raise_Exception
-         (Program_Error'Identity,
-          Feature & " not implemented on VxWorks");
-    end Unimplemented;
- 
-    -----------------------
-    -- Interrupt_Manager --
-    -----------------------
- 
-    task body Interrupt_Manager is
- 
-       --------------------
-       -- Local Routines --
-       --------------------
- 
-       procedure Bind_Handler (Interrupt : Interrupt_ID);
-       --  This procedure does not do anything if a signal is blocked.
-       --  Otherwise, we have to interrupt Server_Task for status change through
-       --  a wakeup signal.
- 
-       procedure Unbind_Handler (Interrupt : Interrupt_ID);
-       --  This procedure does not do anything if a signal is blocked.
-       --  Otherwise, we have to interrupt Server_Task for status change
-       --  through an abort signal.
- 
-       procedure Unprotected_Exchange_Handler
-         (Old_Handler : out Parameterless_Handler;
-          New_Handler : Parameterless_Handler;
-          Interrupt   : Interrupt_ID;
-          Static      : Boolean;
-          Restoration : Boolean := False);
- 
-       procedure Unprotected_Detach_Handler
-         (Interrupt : Interrupt_ID;
-          Static    : Boolean);
- 
-       ------------------
-       -- Bind_Handler --
-       ------------------
- 
-       procedure Bind_Handler (Interrupt : Interrupt_ID) is
-       begin
-          Install_Umbrella_Handler
-            (HW_Interrupt (Interrupt), Notify_Interrupt'Access);
-       end Bind_Handler;
- 
-       --------------------
-       -- Unbind_Handler --
-       --------------------
- 
-       procedure Unbind_Handler (Interrupt : Interrupt_ID) is
-          S : STATUS;
-          use type STATUS;
- 
-       begin
-          --  Hardware interrupt
- 
-          Install_Default_Action (HW_Interrupt (Interrupt));
- 
-          --  Flush server task off semaphore, allowing it to terminate
- 
-          S := semFlush (Semaphore_ID_Map (Interrupt));
-          pragma Assert (S = 0);
-       end Unbind_Handler;
- 
-       --------------------------------
-       -- Unprotected_Detach_Handler --
-       --------------------------------
- 
-       procedure Unprotected_Detach_Handler
-         (Interrupt : Interrupt_ID;
-          Static    : Boolean)
-       is
-          Old_Handler : Parameterless_Handler;
-       begin
-          if User_Entry (Interrupt).T /= Null_Task then
-             --  If an interrupt entry is installed raise
-             --  Program_Error. (propagate it to the caller).
- 
-             Raise_Exception (Program_Error'Identity,
-               "An interrupt entry is already installed");
-          end if;
- 
-          --  Note : Static = True will pass the following check. This is the
-          --  case when we want to detach a handler regardless of the static
-          --  status of the Current_Handler.
- 
-          if not Static and then User_Handler (Interrupt).Static then
-             --  Trying to detach a static Interrupt Handler.
-             --  raise Program_Error.
- 
-             Raise_Exception (Program_Error'Identity,
-               "Trying to detach a static Interrupt Handler");
-          end if;
- 
-          Old_Handler := User_Handler (Interrupt).H;
- 
-          --  The new handler
- 
-          User_Handler (Interrupt).H := null;
-          User_Handler (Interrupt).Static := False;
- 
-          if Old_Handler /= null then
-             Unbind_Handler (Interrupt);
-          end if;
-       end Unprotected_Detach_Handler;
- 
-       ----------------------------------
-       -- Unprotected_Exchange_Handler --
-       ----------------------------------
- 
-       procedure Unprotected_Exchange_Handler
-         (Old_Handler : out Parameterless_Handler;
-          New_Handler : Parameterless_Handler;
-          Interrupt   : Interrupt_ID;
-          Static      : Boolean;
-          Restoration : Boolean := False) is
-       begin
-          if User_Entry (Interrupt).T /= Null_Task then
-             --  If an interrupt entry is already installed, raise
-             --  Program_Error. (propagate it to the caller).
- 
-             Raise_Exception
-               (Program_Error'Identity,
-                "An interrupt is already installed");
-          end if;
- 
-          --  Note : A null handler with Static = True will
-          --  pass the following check. This is the case when we want to
-          --  detach a handler regardless of the Static status
-          --  of Current_Handler.
-          --  We don't check anything if Restoration is True, since we
-          --  may be detaching a static handler to restore a dynamic one.
- 
-          if not Restoration and then not Static
-            and then (User_Handler (Interrupt).Static
- 
-             --  Trying to overwrite a static Interrupt Handler with a
-             --  dynamic Handler
- 
-             --  The new handler is not specified as an
-             --  Interrupt Handler by a pragma.
- 
-            or else not Is_Registered (New_Handler))
-          then
-             Raise_Exception
-               (Program_Error'Identity,
-                "Trying to overwrite a static Interrupt Handler with a " &
-                "dynamic Handler");
-          end if;
- 
-          --  Save the old handler
- 
-          Old_Handler := User_Handler (Interrupt).H;
- 
-          --  The new handler
- 
-          User_Handler (Interrupt).H := New_Handler;
- 
-          if New_Handler = null then
- 
-             --  The null handler means we are detaching the handler.
- 
-             User_Handler (Interrupt).Static := False;
- 
-          else
-             User_Handler (Interrupt).Static := Static;
-          end if;
- 
-          --  Invoke a corresponding Server_Task if not yet created.
-          --  Place Task_ID info in Server_ID array.
- 
-          if New_Handler /= null
-            and then
-             (Server_ID (Interrupt) = Null_Task
-               or else
-                 Ada.Task_Identification.Is_Terminated
-                   (To_Ada (Server_ID (Interrupt))))
-          then
-             Interrupt_Access_Hold :=
-               new Interrupt_Server_Task
-                 (Interrupt, semBCreate (SEM_Q_FIFO, SEM_EMPTY));
-             Server_ID (Interrupt) :=
-               To_System (Interrupt_Access_Hold.all'Identity);
-          end if;
- 
-          if (New_Handler = null) and then Old_Handler /= null then
-             --  Restore default handler
- 
-             Unbind_Handler (Interrupt);
- 
-          elsif Old_Handler = null then
-             --  Save default handler
- 
-             Bind_Handler (Interrupt);
-          end if;
-       end Unprotected_Exchange_Handler;
- 
-       --  Start of processing for Interrupt_Manager
- 
-    begin
-       --  By making this task independent of any master, when the process
-       --  goes away, the Interrupt_Manager will terminate gracefully.
- 
-       System.Tasking.Utilities.Make_Independent;
- 
-       loop
-          --  A block is needed to absorb Program_Error exception
- 
-          declare
-             Old_Handler : Parameterless_Handler;
- 
-          begin
-             select
-                accept Attach_Handler
-                  (New_Handler : Parameterless_Handler;
-                   Interrupt   : Interrupt_ID;
-                   Static      : Boolean;
-                   Restoration : Boolean := False)
-                do
-                   Unprotected_Exchange_Handler
-                     (Old_Handler, New_Handler, Interrupt, Static, Restoration);
-                end Attach_Handler;
- 
-             or
-                accept Exchange_Handler
-                  (Old_Handler : out Parameterless_Handler;
-                   New_Handler : Parameterless_Handler;
-                   Interrupt   : Interrupt_ID;
-                   Static      : Boolean)
-                do
-                   Unprotected_Exchange_Handler
-                     (Old_Handler, New_Handler, Interrupt, Static);
-                end Exchange_Handler;
- 
-             or
-                accept Detach_Handler
-                   (Interrupt   : Interrupt_ID;
-                    Static      : Boolean)
-                do
-                   Unprotected_Detach_Handler (Interrupt, Static);
-                end Detach_Handler;
-             or
-                accept Bind_Interrupt_To_Entry
-                  (T       : Task_ID;
-                   E       : Task_Entry_Index;
-                   Interrupt : Interrupt_ID)
-                do
-                   --  If there is a binding already (either a procedure or an
-                   --  entry), raise Program_Error (propagate it to the caller).
- 
-                   if User_Handler (Interrupt).H /= null
-                     or else User_Entry (Interrupt).T /= Null_Task
-                   then
-                      Raise_Exception
-                        (Program_Error'Identity,
-                         "A binding for this interrupt is already present");
-                   end if;
- 
-                   User_Entry (Interrupt) := Entry_Assoc'(T => T, E => E);
- 
-                   --  Indicate the attachment of interrupt entry in the ATCB.
-                   --  This is needed so when an interrupt entry task terminates
-                   --  the binding can be cleaned. The call to unbinding must be
-                   --  make by the task before it terminates.
- 
-                   T.Interrupt_Entry := True;
- 
-                   --  Invoke a corresponding Server_Task if not yet created.
-                   --  Place Task_ID info in Server_ID array.
- 
-                   if Server_ID (Interrupt) = Null_Task
-                     or else
-                       Ada.Task_Identification.Is_Terminated
-                         (To_Ada (Server_ID (Interrupt)))
-                   then
-                      Interrupt_Access_Hold := new Interrupt_Server_Task
-                        (Interrupt, semBCreate (SEM_Q_FIFO, SEM_EMPTY));
-                      Server_ID (Interrupt) :=
-                        To_System (Interrupt_Access_Hold.all'Identity);
-                   end if;
- 
-                   Bind_Handler (Interrupt);
-                end Bind_Interrupt_To_Entry;
- 
-             or
-                accept Detach_Interrupt_Entries (T : Task_ID) do
-                   for Int in Interrupt_ID'Range loop
-                      if not Is_Reserved (Int) then
-                         if User_Entry (Int).T = T then
-                            User_Entry (Int) :=
-                              Entry_Assoc'
-                                (T => Null_Task, E => Null_Task_Entry);
-                            Unbind_Handler (Int);
-                         end if;
-                      end if;
-                   end loop;
- 
-                   --  Indicate in ATCB that no interrupt entries are attached.
- 
-                   T.Interrupt_Entry := False;
-                end Detach_Interrupt_Entries;
-             end select;
- 
-          exception
-             --  If there is a Program_Error we just want to propagate it to
-             --  the caller and do not want to stop this task.
- 
-             when Program_Error =>
-                null;
- 
-             when others =>
-                pragma Assert (False);
-                null;
-          end;
-       end loop;
- 
-    exception
-       when Standard'Abort_Signal =>
-          --  Flush interrupt server semaphores, so they can terminate
-          Finalize_Interrupt_Servers;
-          raise;
-    end Interrupt_Manager;
- 
-    ---------------------------
-    -- Interrupt_Server_Task --
-    ---------------------------
- 
-    --  Server task for vectored hardware interrupt handling
- 
-    task body Interrupt_Server_Task is
-       Self_Id         : constant Task_ID := Self;
-       Tmp_Handler     : Parameterless_Handler;
-       Tmp_ID          : Task_ID;
-       Tmp_Entry_Index : Task_Entry_Index;
-       S               : STATUS;
- 
-       use type STATUS;
- 
-    begin
-       System.Tasking.Utilities.Make_Independent;
-       Semaphore_ID_Map (Interrupt) := Int_Sema;
- 
-       loop
-          --  Pend on semaphore that will be triggered by the
-          --  umbrella handler when the associated interrupt comes in
- 
-          S := semTake (Int_Sema, WAIT_FOREVER);
-          pragma Assert (S = 0);
- 
-          if User_Handler (Interrupt).H /= null then
- 
-             --  Protected procedure handler
- 
-             Tmp_Handler := User_Handler (Interrupt).H;
-             Tmp_Handler.all;
- 
-          elsif User_Entry (Interrupt).T /= Null_Task then
- 
-             --  Interrupt entry handler
- 
-             Tmp_ID := User_Entry (Interrupt).T;
-             Tmp_Entry_Index := User_Entry (Interrupt).E;
-             System.Tasking.Rendezvous.Call_Simple
-               (Tmp_ID, Tmp_Entry_Index, System.Null_Address);
- 
-          else
-             --  Semaphore has been flushed by an unbind operation in
-             --  the Interrupt_Manager. Terminate the server task.
- 
-             --  Wait for the Interrupt_Manager to complete its work
- 
-             POP.Write_Lock (Self_Id);
- 
-             --  Delete the associated semaphore
- 
-             S := semDelete (Int_Sema);
- 
-             pragma Assert (S = 0);
- 
-             --  Set status for the Interrupt_Manager
- 
-             Semaphore_ID_Map (Interrupt) := 0;
-             Server_ID (Interrupt) := Null_Task;
-             POP.Unlock (Self_Id);
- 
-             exit;
-          end if;
-       end loop;
-    end Interrupt_Server_Task;
- 
- begin
-    --  Get Interrupt_Manager's ID so that Abort_Interrupt can be sent.
- 
-    Interrupt_Manager_ID := To_System (Interrupt_Manager'Identity);
- end System.Interrupts;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5zintman.adb gcc-4.0.0/gcc/ada/5zintman.adb
*** gcc-3.4.3/gcc/ada/5zintman.adb	Mon Jan  5 15:20:43 2004
--- gcc-4.0.0/gcc/ada/5zintman.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,194 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --           S Y S T E M . I N T E R R U P T _ M A N A G E M E N T          --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the VxWorks version of this package.
- 
- --  It is likely to need tailoring to fit each operating system
- --  and machine architecture.
- 
- --  PLEASE DO NOT add any dependences on other packages.
- --  This package is designed to work with or without tasking support.
- 
- --  See the other warnings in the package specification before making
- --  any modifications to this file.
- 
- --  Make a careful study of all signals available under the OS,
- --  to see which need to be reserved, kept always unmasked,
- --  or kept always unmasked.
- --  Be on the lookout for special signals that
- --  may be used by the thread library.
- 
- with Interfaces.C;
- 
- with System.OS_Interface;
- --  used for various Constants, Signal and types
- 
- package body System.Interrupt_Management is
- 
-    use System.OS_Interface;
-    use type Interfaces.C.int;
- 
-    type Signal_List is array (Signal_ID range <>) of Signal_ID;
-    Exception_Signals : constant Signal_List (1 .. 4) :=
-                          (SIGFPE, SIGILL, SIGSEGV, SIGBUS);
- 
-    --  Keep these variables global so that they are initialized only once
-    --  What are "these variables" ???, I see only one
- 
-    Exception_Action : aliased struct_sigaction;
- 
-    procedure Map_And_Raise_Exception (signo : Signal);
-    pragma Import (C, Map_And_Raise_Exception, "__gnat_map_signal");
-    --  Map signal to Ada exception and raise it.  Different versions
-    --  of VxWorks need different mappings.
- 
-    -----------------------
-    -- Local Subprograms --
-    -----------------------
- 
-    procedure Notify_Exception (signo : Signal);
-    --  Identify the Ada exception to be raised using
-    --  the information when the system received a synchronous signal.
- 
-    ----------------------
-    -- Notify_Exception --
-    ----------------------
- 
-    procedure Notify_Exception (signo : Signal) is
-       Mask   : aliased sigset_t;
-       My_Id  : t_id;
- 
-       Result : int;
-       pragma Unreferenced (Result);
- 
-    begin
-       Result := pthread_sigmask (SIG_SETMASK, null, Mask'Unchecked_Access);
-       Result := sigdelset (Mask'Access, signo);
-       Result := pthread_sigmask (SIG_SETMASK, Mask'Unchecked_Access, null);
- 
-       --  VxWorks will suspend the task when it gets a hardware
-       --  exception.  We take the liberty of resuming the task
-       --  for the application.
- 
-       My_Id := taskIdSelf;
- 
-       if taskIsSuspended (My_Id) /= 0 then
-          Result := taskResume (My_Id);
-       end if;
- 
-       Map_And_Raise_Exception (signo);
-    end Notify_Exception;
- 
-    ---------------------------
-    -- Initialize_Interrupts --
-    ---------------------------
- 
-    --  Since there is no signal inheritance between VxWorks tasks, we need
-    --  to initialize signal handling in each task.
- 
-    procedure Initialize_Interrupts is
-       Result  : int;
-       old_act : aliased struct_sigaction;
- 
-    begin
-       for J in Exception_Signals'Range loop
-          Result :=
-            sigaction
-              (Signal (Exception_Signals (J)), Exception_Action'Access,
-               old_act'Unchecked_Access);
-          pragma Assert (Result = 0);
-       end loop;
-    end Initialize_Interrupts;
- 
- begin
-    declare
-       mask   : aliased sigset_t;
-       Result : int;
- 
-       function State (Int : Interrupt_ID) return Character;
-       pragma Import (C, State, "__gnat_get_interrupt_state");
-       --  Get interrupt state.  Defined in a-init.c
-       --  The input argument is the interrupt number,
-       --  and the result is one of the following:
- 
-       Runtime : constant Character := 'r';
-       Default : constant Character := 's';
-       --    'n'   this interrupt not set by any Interrupt_State pragma
-       --    'u'   Interrupt_State pragma set state to User
-       --    'r'   Interrupt_State pragma set state to Runtime
-       --    's'   Interrupt_State pragma set state to System (use "default"
-       --           system handler)
- 
-    begin
-       --  Initialize signal handling
- 
-       --  Change this if you want to use another signal for task abort.
-       --  SIGTERM might be a good one.
- 
-       Abort_Task_Signal := SIGABRT;
- 
-       Exception_Action.sa_handler := Notify_Exception'Address;
-       Exception_Action.sa_flags := SA_ONSTACK;
-       Result := sigemptyset (mask'Access);
-       pragma Assert (Result = 0);
- 
-       for J in Exception_Signals'Range loop
-          Result := sigaddset (mask'Access, Signal (Exception_Signals (J)));
-          pragma Assert (Result = 0);
-       end loop;
- 
-       Exception_Action.sa_mask := mask;
- 
-       --  Initialize hardware interrupt handling
- 
-       pragma Assert (Reserve = (Interrupt_ID'Range => False));
- 
-       --  Check all interrupts for state that requires keeping them reserved
- 
-       for J in Interrupt_ID'Range loop
-          if State (J) = Default or else State (J) = Runtime then
-             Reserve (J) := True;
-          end if;
-       end loop;
- 
-       --  Add exception signals to the set of unmasked signals
- 
-       for J in Exception_Signals'Range loop
-          Keep_Unmasked (Exception_Signals (J)) := True;
-       end loop;
- 
-       --  The abort signal must also be unmasked
- 
-       Keep_Unmasked (Abort_Task_Signal) := True;
-    end;
- end System.Interrupt_Management;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5zintman.ads gcc-4.0.0/gcc/ada/5zintman.ads
*** gcc-3.4.3/gcc/ada/5zintman.ads	Mon Nov 24 14:27:57 2003
--- gcc-4.0.0/gcc/ada/5zintman.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,123 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --            S Y S T E M . I N T E R R U P T _ M A N A G E M E N T         --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the VxWorks version of this package.
- 
- --  This package encapsulates and centralizes information about all
- --  uses of interrupts (or signals), including the target-dependent
- --  mapping of interrupts (or signals) to exceptions.
- 
- --  Unlike the original design, System.Interrupt_Management can only
- --  be used for tasking systems.
- 
- --  PLEASE DO NOT remove the Elaborate_Body pragma from this package.
- --  Elaboration of this package should happen early, as most other
- --  initializations depend on it. Forcing immediate elaboration of
- --  the body also helps to enforce the design assumption that this
- --  is a second-level package, just one level above System.OS_Interface
- --  with no cross-dependencies.
- 
- --  PLEASE DO NOT put any subprogram declarations with arguments of
- --  type Interrupt_ID into the visible part of this package. The type
- --  Interrupt_ID is used to derive the type in Ada.Interrupts, and
- --  adding more operations to that type would be illegal according
- --  to the Ada Reference Manual. This is the reason why the signals
- --  sets are implemeneted using visible arrays rather than functions.
- 
- with System.OS_Interface;
- --  used for sigset_t
- 
- with Interfaces.C;
- --  used for int
- 
- package System.Interrupt_Management is
- 
-    pragma Elaborate_Body;
- 
-    type Interrupt_Mask is limited private;
- 
-    type Interrupt_ID is new Interfaces.C.int
-      range 0 .. System.OS_Interface.Max_Interrupt;
- 
-    type Interrupt_Set is array (Interrupt_ID) of Boolean;
- 
-    subtype Signal_ID is Interrupt_ID
-      range 0 .. Interfaces.C."-" (System.OS_Interface.NSIG, 1);
- 
-    type Signal_Set is array (Signal_ID) of Boolean;
- 
-    --  The following objects serve as constants, but are initialized
-    --  in the body to aid portability.  This permits us to use more
-    --  portable names for interrupts, where distinct names may map to
-    --  the same interrupt ID value.
-    --
-    --  For example, suppose SIGRARE is a signal that is not defined on
-    --  all systems, but is always reserved when it is defined. If we
-    --  have the convention that ID zero is not used for any "real"
-    --  signals, and SIGRARE = 0 when SIGRARE is not one of the locally
-    --  supported signals, we can write
-    --     Reserved (SIGRARE) := true;
-    --  and the initialization code will be portable.
- 
-    Abort_Task_Signal : Signal_ID;
-    --  The signal that is used to implement task abortion if
-    --  an interrupt is used for that purpose. This is one of the
-    --  reserved signals.
- 
-    Keep_Unmasked : Signal_Set := (others => False);
-    --  Keep_Unmasked (I) is true iff the signal I is one that must
-    --  that must be kept unmasked at all times, except (perhaps) for
-    --  short critical sections. This includes signals that are
-    --  mapped to exceptions, but may also include interrupts
-    --  (e.g. timer) that need to be kept unmasked for other
-    --  reasons. Where signal masking is per-task, the signal should be
-    --  unmasked in ALL TASKS.
- 
-    Reserve : Interrupt_Set := (others => False);
-    --  Reserve (I) is true iff the interrupt I is one that cannot be
-    --  permitted to be attached to a user handler. The possible reasons
-    --  are many. For example, it may be mapped to an exception used to
-    --  implement task abortion, or used to implement time delays.
- 
-    procedure Initialize_Interrupts;
-    --  On systems where there is no signal inheritance between tasks (e.g
-    --  VxWorks, GNU/LinuxThreads), this procedure is used to initialize
-    --  interrupts handling in each task. Otherwise this function should
-    --  only be called by initialize in this package body.
- 
- private
-    type Interrupt_Mask is new System.OS_Interface.sigset_t;
-    --  In some implementation Interrupt_Mask can be represented
-    --  as a linked list.
- 
- end System.Interrupt_Management;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5zml-tgt.adb gcc-4.0.0/gcc/ada/5zml-tgt.adb
*** gcc-3.4.3/gcc/ada/5zml-tgt.adb	Mon Jan  5 15:20:43 2004
--- gcc-4.0.0/gcc/ada/5zml-tgt.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,326 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                             M L I B . T G T                              --
- --                            (VxWorks Version)                             --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --              Copyright (C) 2003 Free Software Foundation, Inc.           --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package provides a set of target dependent routines to build
- --  static libraries.
- 
- --  This is the VxWorks version of the body
- 
- with MLib.Fil;
- with Namet;  use Namet;
- with Prj.Com;
- with Sdefault;
- 
- package body MLib.Tgt is
- 
-    -----------------------
-    -- Local Subprograms --
-    -----------------------
- 
-    function Get_Target_Suffix return String;
-    --  Returns the required suffix for some utilities
-    --  (such as ar and ranlib) that depend on the real target.
- 
-    ---------------------
-    -- Archive_Builder --
-    ---------------------
- 
-    function Archive_Builder return String is
-    begin
-       return "ar" & Get_Target_Suffix;
-    end Archive_Builder;
- 
-    -----------------------------
-    -- Archive_Builder_Options --
-    -----------------------------
- 
-    function Archive_Builder_Options return String_List_Access is
-    begin
-       return new String_List'(1 => new String'("cr"));
-    end Archive_Builder_Options;
- 
-    -----------------
-    -- Archive_Ext --
-    -----------------
- 
-    function Archive_Ext return String is
-    begin
-       return "a";
-    end Archive_Ext;
- 
-    ---------------------
-    -- Archive_Indexer --
-    ---------------------
- 
-    function Archive_Indexer return String is
-    begin
-       return "ranlib" & Get_Target_Suffix;
-    end Archive_Indexer;
- 
-    ---------------------------
-    -- Build_Dynamic_Library --
-    ---------------------------
- 
-    procedure Build_Dynamic_Library
-      (Ofiles       : Argument_List;
-       Foreign      : Argument_List;
-       Afiles       : Argument_List;
-       Options      : Argument_List;
-       Interfaces   : Argument_List;
-       Lib_Filename : String;
-       Lib_Dir      : String;
-       Symbol_Data  : Symbol_Record;
-       Driver_Name  : Name_Id := No_Name;
-       Lib_Address  : String  := "";
-       Lib_Version  : String  := "";
-       Relocatable  : Boolean := False;
-       Auto_Init    : Boolean := False)
-    is
-       pragma Unreferenced (Ofiles);
-       pragma Unreferenced (Foreign);
-       pragma Unreferenced (Afiles);
-       pragma Unreferenced (Options);
-       pragma Unreferenced (Interfaces);
-       pragma Unreferenced (Lib_Filename);
-       pragma Unreferenced (Lib_Dir);
-       pragma Unreferenced (Symbol_Data);
-       pragma Unreferenced (Driver_Name);
-       pragma Unreferenced (Lib_Address);
-       pragma Unreferenced (Lib_Version);
-       pragma Unreferenced (Relocatable);
-       pragma Unreferenced (Auto_Init);
- 
-    begin
-       null;
-    end Build_Dynamic_Library;
- 
-    -------------------------
-    -- Default_DLL_Address --
-    -------------------------
- 
-    function Default_DLL_Address return String is
-    begin
-       return "";
-    end Default_DLL_Address;
- 
-    -------------
-    -- DLL_Ext --
-    -------------
- 
-    function DLL_Ext return String is
-    begin
-       return "";
-    end DLL_Ext;
- 
-    --------------------
-    -- Dynamic_Option --
-    --------------------
- 
-    function Dynamic_Option return String is
-    begin
-       return "";
-    end Dynamic_Option;
- 
-    -----------------------------
-    -- Get_Target_Suffix --
-    -----------------------------
- 
-    function Get_Target_Suffix return String is
-       Target_Name : constant String_Ptr := Sdefault.Target_Name;
-       Index       : Positive   := Target_Name'First;
- 
-    begin
-       while Index < Target_Name'Last
-         and then Target_Name (Index + 1) /= '-'
-       loop
-          Index := Index + 1;
-       end loop;
- 
-       if Target_Name (Target_Name'First .. Index) = "m68k" then
-          return "68k";
-       elsif Target_Name (Target_Name'First .. Index) = "mips" then
-          return "mips";
-       elsif Target_Name (Target_Name'First .. Index) = "powerpc" then
-          return "ppc";
-       elsif Target_Name (Target_Name'First .. Index) = "sparc" then
-          return "sparc";
-       elsif Target_Name (Target_Name'First .. Index) = "sparc64" then
-          return "sparc64";
-       elsif Target_Name (Target_Name'First .. Index) = "xscale" then
-          return "arm";
-       else
-          return "";
-       end if;
-    end Get_Target_Suffix;
- 
-    -------------------
-    -- Is_Object_Ext --
-    -------------------
- 
-    function Is_Object_Ext (Ext : String) return Boolean is
-    begin
-       return Ext = ".o";
-    end Is_Object_Ext;
- 
-    --------------
-    -- Is_C_Ext --
-    --------------
- 
-    function Is_C_Ext (Ext : String) return Boolean is
-    begin
-       return Ext = ".c";
-    end Is_C_Ext;
- 
-    --------------------
-    -- Is_Archive_Ext --
-    --------------------
- 
-    function Is_Archive_Ext (Ext : String) return Boolean is
-    begin
-       return Ext = ".a";
-    end Is_Archive_Ext;
- 
-    -------------
-    -- Libgnat --
-    -------------
- 
-    function Libgnat return String is
-    begin
-       return "libgnat.a";
-    end Libgnat;
- 
-    ------------------------
-    -- Library_Exists_For --
-    ------------------------
- 
-    function Library_Exists_For (Project : Project_Id) return Boolean is
-    begin
-       if not Projects.Table (Project).Library then
-          Prj.Com.Fail ("INTERNAL ERROR: Library_Exists_For called " &
-                        "for non library project");
-          return False; --  To avoid warning;
- 
-       else
-          declare
-             Lib_Dir : constant String :=
-               Get_Name_String (Projects.Table (Project).Library_Dir);
-             Lib_Name : constant String :=
-               Get_Name_String (Projects.Table (Project).Library_Name);
- 
-          begin
-             if Projects.Table (Project).Library_Kind = Static then
-                return Is_Regular_File
-                  (Lib_Dir & Directory_Separator & "lib" &
-                   Fil.Ext_To (Lib_Name, Archive_Ext));
- 
-             else
-                return Is_Regular_File
-                  (Lib_Dir & Directory_Separator & "lib" &
-                   Fil.Ext_To (Lib_Name, DLL_Ext));
-             end if;
-          end;
-       end if;
-    end Library_Exists_For;
- 
-    ---------------------------
-    -- Library_File_Name_For --
-    ---------------------------
- 
-    function Library_File_Name_For (Project : Project_Id) return Name_Id is
-    begin
-       if not Projects.Table (Project).Library then
-          Prj.Com.Fail ("INTERNAL ERROR: Library_File_Name_For called " &
-                        "for non library project");
-          return No_Name;
- 
-       else
-          declare
-             Lib_Name : constant String :=
-               Get_Name_String (Projects.Table (Project).Library_Name);
- 
-          begin
-             Name_Len := 3;
-             Name_Buffer (1 .. Name_Len) := "lib";
- 
-             if Projects.Table (Project).Library_Kind = Static then
-                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, Archive_Ext));
- 
-             else
-                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, DLL_Ext));
-             end if;
- 
-             return Name_Find;
-          end;
-       end if;
-    end Library_File_Name_For;
- 
-    --------------------------------
-    -- Linker_Library_Path_Option --
-    --------------------------------
- 
-    function Linker_Library_Path_Option return String_Access is
-    begin
-       return new String'("-Wl,-R,");
-    end Linker_Library_Path_Option;
- 
-    ----------------
-    -- Object_Ext --
-    ----------------
- 
-    function Object_Ext return String is
-    begin
-       return "o";
-    end Object_Ext;
- 
-    ----------------
-    -- PIC_Option --
-    ----------------
- 
-    function PIC_Option return String is
-    begin
-       return "";
-    end PIC_Option;
- 
-    -----------------------------------------------
-    -- Standalone_Library_Auto_Init_Is_Supported --
-    -----------------------------------------------
- 
-    function Standalone_Library_Auto_Init_Is_Supported return Boolean is
-    begin
-       return False;
-    end Standalone_Library_Auto_Init_Is_Supported;
- 
-    ---------------------------
-    -- Support_For_Libraries --
-    ---------------------------
- 
-    function Support_For_Libraries return Library_Support is
-    begin
-       return Static_Only;
-    end Support_For_Libraries;
- 
- end MLib.Tgt;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5zosinte.adb gcc-4.0.0/gcc/ada/5zosinte.adb
*** gcc-3.4.3/gcc/ada/5zosinte.adb	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5zosinte.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,164 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
- --                                                                          --
- --                   S Y S T E M . O S _ I N T E R F A C E                  --
- --                                                                          --
- --                                   B o d y                                --
- --                                                                          --
- --             Copyright (C) 1997-2002 Free Software Foundation             --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the VxWorks version.
- 
- --  This package encapsulates all direct interfaces to OS services
- --  that are needed by children of System.
- 
- pragma Polling (Off);
- --  Turn off polling, we do not want ATC polling to take place during
- --  tasking operations. It causes infinite loops and other problems.
- 
- package body System.OS_Interface is
- 
-    use type Interfaces.C.int;
- 
-    Low_Priority : constant := 255;
-    --  VxWorks native (default) lowest scheduling priority.
- 
-    -------------
-    -- sigwait --
-    -------------
- 
-    function sigwait
-      (set : access sigset_t;
-       sig : access Signal) return int
-    is
-       Result : int;
- 
-       function sigwaitinfo
-         (set : access sigset_t; sigvalue : System.Address) return int;
-       pragma Import (C, sigwaitinfo, "sigwaitinfo");
- 
-    begin
-       Result := sigwaitinfo (set, System.Null_Address);
- 
-       if Result /= -1 then
-          sig.all := Signal (Result);
-          return 0;
-       else
-          sig.all := 0;
-          return errno;
-       end if;
-    end sigwait;
- 
-    -----------------
-    -- To_Duration --
-    -----------------
- 
-    function To_Duration (TS : timespec) return Duration is
-    begin
-       return Duration (TS.ts_sec) + Duration (TS.ts_nsec) / 10#1#E9;
-    end To_Duration;
- 
-    -----------------
-    -- To_Timespec --
-    -----------------
- 
-    function To_Timespec (D : Duration) return timespec is
-       S : time_t;
-       F : Duration;
-    begin
-       S := time_t (Long_Long_Integer (D));
-       F := D - Duration (S);
- 
-       --  If F has negative value due to a round-up, adjust for positive F
-       --  value.
-       if F < 0.0 then
-          S := S - 1;
-          F := F + 1.0;
-       end if;
- 
-       return timespec'(ts_sec  => S,
-                        ts_nsec => long (Long_Long_Integer (F * 10#1#E9)));
-    end To_Timespec;
- 
-    -------------------------
-    -- To_VxWorks_Priority --
-    -------------------------
- 
-    function To_VxWorks_Priority (Priority : in int) return int is
-    begin
-       return Low_Priority - Priority;
-    end To_VxWorks_Priority;
- 
-    --------------------
-    -- To_Clock_Ticks --
-    --------------------
- 
-    --  ??? - For now, we'll always get the system clock rate
-    --  since it is allowed to be changed during run-time in
-    --  VxWorks. A better method would be to provide an operation
-    --  to set it that so we can always know its value.
-    --
-    --  Another thing we should probably allow for is a resultant
-    --  tick count greater than int'Last. This should probably
-    --  be a procedure with two output parameters, one in the
-    --  range 0 .. int'Last, and another representing the overflow
-    --  count.
- 
-    function To_Clock_Ticks (D : Duration) return int is
-       Ticks          : Long_Long_Integer;
-       Rate_Duration  : Duration;
-       Ticks_Duration : Duration;
- 
-    begin
-       if D < 0.0 then
-          return -1;
-       end if;
- 
-       --  Ensure that the duration can be converted to ticks
-       --  at the current clock tick rate without overflowing.
- 
-       Rate_Duration := Duration (sysClkRateGet);
- 
-       if D > (Duration'Last / Rate_Duration) then
-          Ticks := Long_Long_Integer (int'Last);
-       else
-          Ticks_Duration := D * Rate_Duration;
-          Ticks := Long_Long_Integer (Ticks_Duration);
- 
-          if Ticks_Duration > Duration (Ticks) then
-             Ticks := Ticks + 1;
-          end if;
- 
-          if Ticks > Long_Long_Integer (int'Last) then
-             Ticks := Long_Long_Integer (int'Last);
-          end if;
-       end if;
- 
-       return int (Ticks);
-    end To_Clock_Ticks;
- 
- end System.OS_Interface;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5zosinte.ads gcc-4.0.0/gcc/ada/5zosinte.ads
*** gcc-3.4.3/gcc/ada/5zosinte.ads	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5zosinte.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,376 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
- --                                                                          --
- --                    S Y S T E M . O S _ I N T E R F A C E                 --
- --                                                                          --
- --                                   S p e c                                --
- --                                                                          --
- --           Copyright (C) 1997-2002 Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the VxWorks version of this package.
- --
- --  VxWorks does not directly support the needed POSIX routines, but it
- --  does have other routines that make it possible to code equivalent
- --  POSIX compliant routines.  The approach taken is to provide an
- --  FSU threads compliant interface.
- 
- --  This package encapsulates all direct interfaces to OS services
- --  that are needed by children of System.
- 
- --  PLEASE DO NOT add any with-clauses to this package
- --  or remove the pragma Elaborate_Body.
- --  It is designed to be a bottom-level (leaf) package.
- 
- with Interfaces.C;
- with System.VxWorks;
- 
- package System.OS_Interface is
-    pragma Preelaborate;
- 
-    subtype int         is Interfaces.C.int;
-    subtype short       is Short_Integer;
-    type long           is new Long_Integer;
-    type unsigned_long  is mod 2 ** long'Size;
-    type size_t         is mod 2 ** Standard'Address_Size;
- 
-    -----------
-    -- Errno --
-    -----------
- 
-    function errno return int;
-    pragma Import (C, errno, "errnoGet");
- 
-    EINTR     : constant := 4;
-    EAGAIN    : constant := 35;
-    ENOMEM    : constant := 12;
-    EINVAL    : constant := 22;
-    ETIMEDOUT : constant := 60;
- 
-    FUNC_ERR  : constant := -1;
- 
-    ----------------------------
-    -- Signals and Interrupts --
-    ----------------------------
- 
-    NSIG : constant := 32;
-    --  Number of signals on the target OS
-    type Signal is new int range 0 .. Interfaces.C."-" (NSIG, 1);
- 
-    Max_HW_Interrupt : constant := System.VxWorks.Num_HW_Interrupts - 1;
-    type HW_Interrupt is new int range 0 .. Max_HW_Interrupt;
- 
-    Max_Interrupt : constant := Max_HW_Interrupt;
- 
-    SIGILL  : constant :=  4; --  illegal instruction (not reset)
-    SIGABRT : constant :=  6; --  used by abort, replace SIGIOT in the future
-    SIGFPE  : constant :=  8; --  floating point exception
-    SIGBUS  : constant := 10; --  bus error
-    SIGSEGV : constant := 11; --  segmentation violation
- 
-    -----------------------------------
-    -- Signal processing definitions --
-    -----------------------------------
- 
-    --  The how in sigprocmask().
-    SIG_BLOCK   : constant := 1;
-    SIG_UNBLOCK : constant := 2;
-    SIG_SETMASK : constant := 3;
- 
-    --  The sa_flags in struct sigaction.
-    SA_SIGINFO   : constant := 16#0002#;
-    SA_ONSTACK   : constant := 16#0004#;
- 
-    SIG_DFL : constant := 0;
-    SIG_IGN : constant := 1;
- 
-    type sigset_t is private;
- 
-    type struct_sigaction is record
-       sa_handler : System.Address;
-       sa_mask    : sigset_t;
-       sa_flags   : int;
-    end record;
-    pragma Convention (C, struct_sigaction);
-    type struct_sigaction_ptr is access all struct_sigaction;
- 
-    function sigaddset (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigaddset, "sigaddset");
- 
-    function sigdelset (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigdelset, "sigdelset");
- 
-    function sigfillset (set : access sigset_t) return int;
-    pragma Import (C, sigfillset, "sigfillset");
- 
-    function sigismember (set : access sigset_t; sig : Signal) return int;
-    pragma Import (C, sigismember, "sigismember");
- 
-    function sigemptyset (set : access sigset_t) return int;
-    pragma Import (C, sigemptyset, "sigemptyset");
- 
-    function sigaction
-      (sig  : Signal;
-       act  : struct_sigaction_ptr;
-       oact : struct_sigaction_ptr) return int;
-    pragma Import (C, sigaction, "sigaction");
- 
-    type isr_address is access procedure (sig : int);
- 
-    function c_signal (sig : Signal; handler : isr_address) return isr_address;
-    pragma Import (C, c_signal, "signal");
- 
-    function sigwait (set : access sigset_t; sig : access Signal) return int;
-    pragma Inline (sigwait);
- 
-    type sigset_t_ptr is access all sigset_t;
- 
-    function pthread_sigmask
-      (how  : int;
-       set  : sigset_t_ptr;
-       oset : sigset_t_ptr) return int;
-    pragma Import (C, pthread_sigmask, "sigprocmask");
- 
-    type t_id is new long;
-    subtype Thread_Id is t_id;
- 
-    function kill (pid : t_id; sig : Signal) return int;
-    pragma Import (C, kill, "kill");
- 
-    --  VxWorks doesn't have getpid; taskIdSelf is the equivalent
-    --  routine.
-    function getpid return t_id;
-    pragma Import (C, getpid, "taskIdSelf");
- 
-    ----------
-    -- Time --
-    ----------
- 
-    type time_t is new unsigned_long;
- 
-    type timespec is record
-       ts_sec  : time_t;
-       ts_nsec : long;
-    end record;
-    pragma Convention (C, timespec);
- 
-    type clockid_t is private;
- 
-    CLOCK_REALTIME : constant clockid_t;   --  System wide realtime clock
- 
-    function To_Duration (TS : timespec) return Duration;
-    pragma Inline (To_Duration);
- 
-    function To_Timespec (D : Duration) return timespec;
-    pragma Inline (To_Timespec);
- 
-    function To_Clock_Ticks (D : Duration) return int;
-    --  Convert a duration value (in seconds) into clock ticks.
- 
-    function clock_gettime
-      (clock_id : clockid_t; tp : access timespec) return int;
-    pragma Import (C, clock_gettime, "clock_gettime");
- 
-    type ULONG is new unsigned_long;
- 
-    procedure tickSet (ticks : ULONG);
-    pragma Import (C, tickSet, "tickSet");
- 
-    function tickGet return ULONG;
-    pragma Import (C, tickGet, "tickGet");
- 
-    -----------------------------------------------------
-    --  Convenience routine to convert between VxWorks --
-    --  priority and Ada priority.                     --
-    -----------------------------------------------------
- 
-    function To_VxWorks_Priority (Priority : in int) return int;
-    pragma Inline (To_VxWorks_Priority);
- 
-    --------------------------
-    -- VxWorks specific API --
-    --------------------------
- 
-    subtype STATUS is int;
-    --  Equivalent of the C type STATUS
- 
-    OK    : constant STATUS := 0;
-    ERROR : constant STATUS := Interfaces.C.int (-1);
- 
-    function taskIdVerify (tid : t_id)  return STATUS;
-    pragma Import (C, taskIdVerify, "taskIdVerify");
- 
-    function taskIdSelf return t_id;
-    pragma Import (C, taskIdSelf, "taskIdSelf");
- 
-    function taskSuspend (tid : t_id) return int;
-    pragma Import (C, taskSuspend, "taskSuspend");
- 
-    function taskResume (tid : t_id) return int;
-    pragma Import (C, taskResume, "taskResume");
- 
-    function taskIsSuspended (tid : t_id) return int;
-    pragma Import (C, taskIsSuspended, "taskIsSuspended");
- 
-    function taskVarAdd
-      (tid : t_id; pVar : access System.Address) return int;
-    pragma Import (C, taskVarAdd, "taskVarAdd");
- 
-    function taskVarDelete
-      (tid : t_id; pVar : access System.Address) return int;
-    pragma Import (C, taskVarDelete, "taskVarDelete");
- 
-    function taskVarSet
-      (tid   : t_id;
-       pVar  : access System.Address;
-       value : System.Address) return int;
-    pragma Import (C, taskVarSet, "taskVarSet");
- 
-    function taskVarGet
-      (tid  : t_id;
-       pVar : access System.Address) return int;
-    pragma Import (C, taskVarGet, "taskVarGet");
- 
-    function taskDelay (ticks : int) return int;
-    procedure taskDelay (ticks : int);
-    pragma Import (C, taskDelay, "taskDelay");
- 
-    function sysClkRateGet return int;
-    pragma Import (C, sysClkRateGet, "sysClkRateGet");
- 
-    --  Option flags for taskSpawn
- 
-    VX_UNBREAKABLE    : constant := 16#0002#;
-    VX_FP_TASK        : constant := 16#0008#;
-    VX_FP_PRIVATE_ENV : constant := 16#0080#;
-    VX_NO_STACK_FILL  : constant := 16#0100#;
- 
-    function taskSpawn
-      (name          : System.Address;  --  Pointer to task name
-       priority      : int;
-       options       : int;
-       stacksize     : size_t;
-       start_routine : System.Address;
-       arg1          : System.Address;
-       arg2          : int := 0;
-       arg3          : int := 0;
-       arg4          : int := 0;
-       arg5          : int := 0;
-       arg6          : int := 0;
-       arg7          : int := 0;
-       arg8          : int := 0;
-       arg9          : int := 0;
-       arg10         : int := 0) return t_id;
-    pragma Import (C, taskSpawn, "taskSpawn");
- 
-    procedure taskDelete (tid : t_id);
-    pragma Import (C, taskDelete, "taskDelete");
- 
-    function kernelTimeSlice (ticks : int) return int;
-    pragma Import (C, kernelTimeSlice, "kernelTimeSlice");
- 
-    function taskPrioritySet
-      (tid : t_id; newPriority : int) return int;
-    pragma Import (C, taskPrioritySet, "taskPrioritySet");
- 
-    --  Semaphore creation flags.
- 
-    SEM_Q_FIFO         : constant := 0;
-    SEM_Q_PRIORITY     : constant := 1;
-    SEM_DELETE_SAFE    : constant := 4;  -- only valid for binary semaphore
-    SEM_INVERSION_SAFE : constant := 8;  -- only valid for binary semaphore
- 
-    --  Semaphore initial state flags
- 
-    SEM_EMPTY : constant := 0;
-    SEM_FULL  : constant := 1;
- 
-    --  Semaphore take (semTake) time constants.
- 
-    WAIT_FOREVER : constant := -1;
-    NO_WAIT      : constant := 0;
- 
-    --  Error codes (errno).  The lower level 16 bits are the
-    --  error code, with the upper 16 bits representing the
-    --  module number in which the error occurred.  By convention,
-    --  the module number is 0 for UNIX errors.  VxWorks reserves
-    --  module numbers 1-500, with the remaining module numbers
-    --  being available for user applications.
- 
-    M_objLib                 : constant := 61 * 2**16;
-    --  semTake() failure with ticks = NO_WAIT
-    S_objLib_OBJ_UNAVAILABLE : constant := M_objLib + 2;
-    --  semTake() timeout with ticks > NO_WAIT
-    S_objLib_OBJ_TIMEOUT     : constant := M_objLib + 4;
- 
-    type SEM_ID is new System.Address;
-    --  typedef struct semaphore *SEM_ID;
- 
-    --  We use two different kinds of VxWorks semaphores: mutex
-    --  and binary semaphores.  A null ID is returned when
-    --  a semaphore cannot be created.
- 
-    function semBCreate (options : int; initial_state : int) return SEM_ID;
-    --  Create a binary semaphore. Return ID, or 0 if memory could not
-    --  be allocated.
-    pragma Import (C, semBCreate, "semBCreate");
- 
-    function semMCreate (options : int) return SEM_ID;
-    pragma Import (C, semMCreate, "semMCreate");
- 
-    function semDelete (Sem : SEM_ID) return int;
-    --  Delete a semaphore
-    pragma Import (C, semDelete, "semDelete");
- 
-    function semGive (Sem : SEM_ID) return int;
-    pragma Import (C, semGive, "semGive");
- 
-    function semTake (Sem : SEM_ID; timeout : int) return int;
-    --  Attempt to take binary semaphore.  Error is returned if operation
-    --  times out
-    pragma Import (C, semTake, "semTake");
- 
-    function semFlush (SemID : SEM_ID) return STATUS;
-    --  Release all threads blocked on the semaphore
-    pragma Import (C, semFlush, "semFlush");
- 
-    function taskLock return int;
-    pragma Import (C, taskLock, "taskLock");
- 
-    function taskUnlock return int;
-    pragma Import (C, taskUnlock, "taskUnlock");
- 
- private
-    type sigset_t is new long;
- 
-    type pid_t is new int;
- 
-    ERROR_PID : constant pid_t := -1;
- 
-    type clockid_t is new int;
-    CLOCK_REALTIME : constant clockid_t := 0;
- 
- end System.OS_Interface;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5zosprim.adb gcc-4.0.0/gcc/ada/5zosprim.adb
*** gcc-3.4.3/gcc/ada/5zosprim.adb	Tue Oct 21 13:41:52 2003
--- gcc-4.0.0/gcc/ada/5zosprim.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,161 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                  S Y S T E M . O S _ P R I M I T I V E S                 --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --          Copyright (C) 1998-2002 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This version is for VxWorks targets
- 
- with System.OS_Interface;
- --  Since the thread library is part of the VxWorks kernel, using OS_Interface
- --  is not a problem here, as long as we only use System.OS_Interface as a
- --  set of C imported routines: using Ada routines from this package would
- --  create a dependency on libgnarl in libgnat, which is not desirable.
- 
- with Interfaces.C;
- --  used for type int
- 
- package body System.OS_Primitives is
- 
-    use System.OS_Interface;
-    use type Interfaces.C.int;
- 
-    --------------------------
-    --  Internal functions  --
-    --------------------------
- 
-    function To_Clock_Ticks (D : Duration) return int;
-    --  Convert a duration value (in seconds) into clock ticks.
-    --  Note that this routine is duplicated from System.OS_Interface since
-    --  as explained above, we do not want to depend on libgnarl
- 
-    function To_Clock_Ticks (D : Duration) return int is
-       Ticks          : Long_Long_Integer;
-       Rate_Duration  : Duration;
-       Ticks_Duration : Duration;
- 
-    begin
-       if D < 0.0 then
-          return -1;
-       end if;
- 
-       --  Ensure that the duration can be converted to ticks
-       --  at the current clock tick rate without overflowing.
- 
-       Rate_Duration := Duration (sysClkRateGet);
- 
-       if D > (Duration'Last / Rate_Duration) then
-          Ticks := Long_Long_Integer (int'Last);
-       else
-          Ticks_Duration := D * Rate_Duration;
-          Ticks := Long_Long_Integer (Ticks_Duration);
- 
-          if Ticks_Duration > Duration (Ticks) then
-             Ticks := Ticks + 1;
-          end if;
- 
-          if Ticks > Long_Long_Integer (int'Last) then
-             Ticks := Long_Long_Integer (int'Last);
-          end if;
-       end if;
- 
-       return int (Ticks);
-    end To_Clock_Ticks;
- 
-    -----------
-    -- Clock --
-    -----------
- 
-    function Clock return Duration is
-       TS     : aliased timespec;
-       Result : int;
- 
-       use type Interfaces.C.int;
- 
-    begin
-       Result := clock_gettime (CLOCK_REALTIME, TS'Unchecked_Access);
-       pragma Assert (Result = 0);
-       return Duration (TS.ts_sec) + Duration (TS.ts_nsec) / 10#1#E9;
-    end Clock;
- 
-    ---------------------
-    -- Monotonic_Clock --
-    ---------------------
- 
-    function Monotonic_Clock return Duration renames Clock;
- 
-    -----------------
-    -- Timed_Delay --
-    -----------------
- 
-    procedure Timed_Delay
-      (Time : Duration;
-       Mode : Integer)
-    is
-       Rel_Time   : Duration;
-       Abs_Time   : Duration;
-       Check_Time : Duration := Clock;
-       Ticks      : int;
- 
-       Result     : int;
-       pragma Unreferenced (Result);
- 
-    begin
-       if Mode = Relative then
-          Rel_Time := Time;
-          Abs_Time := Time + Check_Time;
-       else
-          Rel_Time := Time - Check_Time;
-          Abs_Time := Time;
-       end if;
- 
-       if Rel_Time > 0.0 then
-          loop
-             Ticks := To_Clock_Ticks (Rel_Time);
- 
-             if Mode = Relative and then Ticks < int'Last then
-                --  The first tick will delay anytime between 0 and
-                --  1 / sysClkRateGet seconds, so we need to add one to
-                --  be on the safe side.
- 
-                Ticks := Ticks + 1;
-             end if;
- 
-             Result := taskDelay (Ticks);
-             Check_Time := Clock;
- 
-             exit when Abs_Time <= Check_Time;
- 
-             Rel_Time := Abs_Time - Check_Time;
-          end loop;
-       end if;
-    end Timed_Delay;
- 
- end System.OS_Primitives;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5zparame.ads gcc-4.0.0/gcc/ada/5zparame.ads
*** gcc-3.4.3/gcc/ada/5zparame.ads	Tue Oct 21 13:41:53 2003
--- gcc-4.0.0/gcc/ada/5zparame.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,203 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                    S Y S T E M . P A R A M E T E R S                     --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the default VxWorks version of the package.`
- 
- --  This package defines some system dependent parameters for GNAT. These
- --  are values that are referenced by the runtime library and are therefore
- --  relevant to the target machine.
- 
- --  The parameters whose value is defined in the spec are not generally
- --  expected to be changed. If they are changed, it will be necessary to
- --  recompile the run-time library.
- 
- --  The parameters which are defined by functions can be changed by modifying
- --  the body of System.Parameters in file s-parame.adb. A change to this body
- --  requires only rebinding and relinking of the application.
- 
- --  Note: do not introduce any pragma Inline statements into this unit, since
- --  otherwise the relinking and rebinding capability would be deactivated.
- 
- package System.Parameters is
- pragma Pure (Parameters);
- 
-    ---------------------------------------
-    -- Task And Stack Allocation Control --
-    ---------------------------------------
- 
-    type Task_Storage_Size is new Integer;
-    --  Type used in tasking units for task storage size
- 
-    type Size_Type is new Task_Storage_Size;
-    --  Type used to provide task storage size to runtime
- 
-    Unspecified_Size : constant Size_Type := Size_Type'First;
-    --  Value used to indicate that no size type is set
- 
-    subtype Ratio is Size_Type range -1 .. 100;
-    Dynamic : constant Size_Type := -1;
-    --  The secondary stack ratio is a constant between 0 and 100 which
-    --  determines the percentage of the allocated task stack that is
-    --  used by the secondary stack (the rest being the primary stack).
-    --  The special value of minus one indicates that the secondary
-    --  stack is to be allocated from the heap instead.
- 
-    Sec_Stack_Ratio : constant Ratio := Dynamic;
-    --  This constant defines the handling of the secondary stack
- 
-    Sec_Stack_Dynamic : constant Boolean := Sec_Stack_Ratio = Dynamic;
-    --  Convenient Boolean for testing for dynamic secondary stack
- 
-    function Default_Stack_Size return Size_Type;
-    --  Default task stack size used if none is specified
- 
-    function Minimum_Stack_Size return Size_Type;
-    --  Minimum task stack size permitted
- 
-    function Adjust_Storage_Size (Size : Size_Type) return Size_Type;
-    --  Given the storage size stored in the TCB, return the Storage_Size
-    --  value required by the RM for the Storage_Size attribute. The
-    --  required adjustment is as follows:
-    --
-    --    when Size = Unspecified_Size, return Default_Stack_Size
-    --    when Size < Minimum_Stack_Size, return Minimum_Stack_Size
-    --    otherwise return given Size
- 
-    Default_Env_Stack_Size : constant Size_Type := 14_336;
-    --  Assumed size of the environment task, if no other information
-    --  is available. This value is used when stack checking is
-    --  enabled and no GNAT_STACK_LIMIT environment variable is set.
-    --  This value is chosen as the VxWorks default stack size is 20kB,
-    --  and a little more than 4kB is necessary for the run time.
- 
-    Stack_Grows_Down  : constant Boolean := True;
-    --  This constant indicates whether the stack grows up (False) or
-    --  down (True) in memory as functions are called. It is used for
-    --  proper implementation of the stack overflow check.
- 
-    ----------------------------------------------
-    -- Characteristics of types in Interfaces.C --
-    ----------------------------------------------
- 
-    long_bits : constant := Long_Integer'Size;
-    --  Number of bits in type long and unsigned_long. The normal convention
-    --  is that this is the same as type Long_Integer, but this is not true
-    --  of all targets. For example, in OpenVMS long /= Long_Integer.
- 
-    ----------------------------------------------
-    -- Behavior of Pragma Finalize_Storage_Only --
-    ----------------------------------------------
- 
-    --  Garbage_Collected is a Boolean constant whose value indicates the
-    --  effect of the pragma Finalize_Storage_Entry on a controlled type.
- 
-    --    Garbage_Collected = False
- 
-    --      The system releases all storage on program termination only,
-    --      but not other garbage collection occurs, so finalization calls
-    --      are ommitted only for outer level onjects can be omitted if
-    --      pragma Finalize_Storage_Only is used.
- 
-    --    Garbage_Collected = True
- 
-    --      The system provides full garbage collection, so it is never
-    --      necessary to release storage for controlled objects for which
-    --      a pragma Finalize_Storage_Only is used.
- 
-    Garbage_Collected : constant Boolean := False;
-    --  The storage mode for this system (release on program exit)
- 
-    ---------------------
-    -- Tasking Profile --
-    ---------------------
- 
-    --  In the following sections, constant parameters are defined to
-    --  allow some optimizations and fine tuning within the tasking run time
-    --  based on restrictions on the tasking features.
- 
-    ----------------------
-    -- Locking Strategy --
-    ----------------------
- 
-    Single_Lock : constant Boolean := False;
-    --  Indicates whether a single lock should be used within the tasking
-    --  run-time to protect internal structures. If True, a single lock
-    --  will be used, meaning less locking/unlocking operations, but also
-    --  more global contention. In general, Single_Lock should be set to
-    --  True on single processor machines, and to False to multi-processor
-    --  systems, but this can vary from application to application and also
-    --  depends on the scheduling policy.
- 
-    -------------------
-    -- Task Abortion --
-    -------------------
- 
-    No_Abort : constant Boolean := False;
-    --  This constant indicates whether abort statements and asynchronous
-    --  transfer of control (ATC) are disallowed. If set to True, it is
-    --  assumed that neither construct is used, and the run time does not
-    --  need to defer/undefer abort and check for pending actions at
-    --  completion points. A value of True for No_Abort corresponds to:
-    --  pragma Restrictions (No_Abort_Statements);
-    --  pragma Restrictions (Max_Asynchronous_Select_Nesting => 0);
- 
-    ----------------------
-    -- Dynamic Priority --
-    ----------------------
- 
-    Dynamic_Priority_Support : constant Boolean := True;
-    --  This constant indicates whether dynamic changes of task priorities
-    --  are allowed (True means normal RM mode in which such changes are
-    --  allowed). In particular, if this is False, then we do not need to
-    --  poll for pending base priority changes at every abort completion
-    --  point. A value of False for Dynamic_Priority_Support corresponds
-    --  to pragma Restrictions (No_Dynamic_Priorities);
- 
-    ---------------------
-    -- Task Attributes --
-    ---------------------
- 
-    Default_Attribute_Count : constant := 4;
-    --  Number of pre-allocated Address-sized task attributes stored in the
-    --  task control block.
- 
-    --------------------
-    -- Runtime Traces --
-    --------------------
- 
-    Runtime_Traces : constant Boolean := False;
-    --  This constant indicates whether the runtime outputs traces to a
-    --  predefined output or not (True means that traces are output).
-    --  See System.Traces for more details.
- 
- end System.Parameters;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5zsystem.ads gcc-4.0.0/gcc/ada/5zsystem.ads
*** gcc-3.4.3/gcc/ada/5zsystem.ads	Tue Oct 21 13:41:53 2003
--- gcc-4.0.0/gcc/ada/5zsystem.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,158 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                        GNAT RUN-TIME COMPONENTS                          --
- --                                                                          --
- --                               S Y S T E M                                --
- --                                                                          --
- --                                 S p e c                                  --
- --                         (VxWorks Version Alpha)                          --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the  contents of the part following the private keyword. --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- package System is
- pragma Pure (System);
- --  Note that we take advantage of the implementation permission to
- --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
- 
-    type Name is (SYSTEM_NAME_GNAT);
-    System_Name : constant Name := SYSTEM_NAME_GNAT;
- 
-    --  System-Dependent Named Numbers
- 
-    Min_Int               : constant := Long_Long_Integer'First;
-    Max_Int               : constant := Long_Long_Integer'Last;
- 
-    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
-    Max_Nonbinary_Modulus : constant := Integer'Last;
- 
-    Max_Base_Digits       : constant := Long_Long_Float'Digits;
-    Max_Digits            : constant := Long_Long_Float'Digits;
- 
-    Max_Mantissa          : constant := 63;
-    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
- 
-    Tick                  : constant := 1.0 / 60.0;
- 
-    --  Storage-related Declarations
- 
-    type Address is private;
-    Null_Address : constant Address;
- 
-    Storage_Unit : constant := 8;
-    Word_Size    : constant := 64;
-    Memory_Size  : constant := 2 ** 64;
- 
-    --  Address comparison
- 
-    function "<"  (Left, Right : Address) return Boolean;
-    function "<=" (Left, Right : Address) return Boolean;
-    function ">"  (Left, Right : Address) return Boolean;
-    function ">=" (Left, Right : Address) return Boolean;
-    function "="  (Left, Right : Address) return Boolean;
- 
-    pragma Import (Intrinsic, "<");
-    pragma Import (Intrinsic, "<=");
-    pragma Import (Intrinsic, ">");
-    pragma Import (Intrinsic, ">=");
-    pragma Import (Intrinsic, "=");
- 
-    --  Other System-Dependent Declarations
- 
-    type Bit_Order is (High_Order_First, Low_Order_First);
-    Default_Bit_Order : constant Bit_Order := Low_Order_First;
- 
-    --  Priority-related Declarations (RM D.1)
- 
-    --  256        is reserved for the VxWorks kernel
-    --  248 - 255  correspond to hardware interrupt levels 0 .. 7
-    --  247        is a catchall default "interrupt" priority for signals,
-    --             allowing higher priority than normal tasks, but lower than
-    --             hardware priority levels.  Protected Object ceilings can
-    --             override these values.
-    --  246        is used by the Interrupt_Manager task
- 
-    Max_Priority           : constant Positive := 245;
-    Max_Interrupt_Priority : constant Positive := 255;
- 
-    subtype Any_Priority       is Integer      range   0 .. 255;
-    subtype Priority           is Any_Priority range   0 .. 245;
-    subtype Interrupt_Priority is Any_Priority range 246 .. 255;
- 
-    Default_Priority : constant Priority := 122;
- 
- private
- 
-    type Address is mod Memory_Size;
-    Null_Address : constant Address := 0;
- 
-    --------------------------------------
-    -- System Implementation Parameters --
-    --------------------------------------
- 
-    --  These parameters provide information about the target that is used
-    --  by the compiler. They are in the private part of System, where they
-    --  can be accessed using the special circuitry in the Targparm unit
-    --  whose source should be consulted for more detailed descriptions
-    --  of the individual switch values.
- 
-    AAMP                      : constant Boolean := False;
-    Backend_Divide_Checks     : constant Boolean := False;
-    Backend_Overflow_Checks   : constant Boolean := False;
-    Command_Line_Args         : constant Boolean := False;
-    Configurable_Run_Time     : constant Boolean := False;
-    Denorm                    : constant Boolean := False;
-    Duration_32_Bits          : constant Boolean := False;
-    Exit_Status_Supported     : constant Boolean := True;
-    Fractional_Fixed_Ops      : constant Boolean := False;
-    Frontend_Layout           : constant Boolean := False;
-    Functions_Return_By_DSP   : constant Boolean := False;
-    Machine_Overflows         : constant Boolean := False;
-    Machine_Rounds            : constant Boolean := True;
-    OpenVMS                   : constant Boolean := False;
-    Signed_Zeros              : constant Boolean := True;
-    Stack_Check_Default       : constant Boolean := False;
-    Stack_Check_Probes        : constant Boolean := False;
-    Support_64_Bit_Divides    : constant Boolean := True;
-    Support_Aggregates        : constant Boolean := True;
-    Support_Composite_Assign  : constant Boolean := True;
-    Support_Composite_Compare : constant Boolean := True;
-    Support_Long_Shifts       : constant Boolean := True;
-    Suppress_Standard_Library : constant Boolean := False;
-    Use_Ada_Main_Program_Name : constant Boolean := True;
-    ZCX_By_Default            : constant Boolean := False;
-    GCC_ZCX_Support           : constant Boolean := False;
-    Front_End_ZCX_Support     : constant Boolean := False;
- 
-    --  Obsolete entries, to be removed eventually (bootstrap issues!)
- 
-    High_Integrity_Mode       : constant Boolean := False;
-    Long_Shifts_Inlined       : constant Boolean := False;
- 
- end System;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5ztaprop.adb gcc-4.0.0/gcc/ada/5ztaprop.adb
*** gcc-3.4.3/gcc/ada/5ztaprop.adb	Mon Jan  5 15:20:43 2004
--- gcc-4.0.0/gcc/ada/5ztaprop.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,1144 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
- --                                                                          --
- --     S Y S T E M . T A S K _ P R I M I T I V E S . O P E R A T I O N S    --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --         Copyright (C) 1992-2003, Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the VxWorks version of this package
- 
- --  This package contains all the GNULL primitives that interface directly
- --  with the underlying OS.
- 
- pragma Polling (Off);
- --  Turn off polling, we do not want ATC polling to take place during
- --  tasking operations. It causes infinite loops and other problems.
- 
- with System.Tasking.Debug;
- --  used for Known_Tasks
- 
- with System.Interrupt_Management;
- --  used for Keep_Unmasked
- --           Abort_Task_Signal
- --           Signal_ID
- --           Initialize_Interrupts
- 
- with System.Soft_Links;
- --  used for Defer/Undefer_Abort
- 
- --  Note that we do not use System.Tasking.Initialization directly since
- --  this is a higher level package that we shouldn't depend on. For example
- --  when using the restricted run time, it is replaced by
- --  System.Tasking.Restricted.Initialization
- 
- with System.OS_Interface;
- --  used for various type, constant, and operations
- 
- with System.Parameters;
- --  used for Size_Type
- 
- with System.Tasking;
- --  used for Ada_Task_Control_Block
- --           Task_ID
- --           ATCB components and types
- 
- with Interfaces.C;
- 
- with Unchecked_Conversion;
- with Unchecked_Deallocation;
- 
- package body System.Task_Primitives.Operations is
- 
-    use System.Tasking.Debug;
-    use System.Tasking;
-    use System.OS_Interface;
-    use System.Parameters;
-    use type Interfaces.C.int;
- 
-    package SSL renames System.Soft_Links;
- 
-    subtype int is System.OS_Interface.int;
- 
-    Relative : constant := 0;
- 
-    ----------------
-    -- Local Data --
-    ----------------
- 
-    --  The followings are logically constants, but need to be initialized
-    --  at run time.
- 
-    Single_RTS_Lock : aliased RTS_Lock;
-    --  This is a lock to allow only one thread of control in the RTS at
-    --  a time; it is used to execute in mutual exclusion from all other tasks.
-    --  Used mainly in Single_Lock mode, but also to protect All_Tasks_List
- 
-    ATCB_Key : aliased System.Address := System.Null_Address;
-    --  Key used to find the Ada Task_ID associated with a thread
- 
-    ATCB_Key_Addr : System.Address := ATCB_Key'Address;
-    pragma Export (Ada, ATCB_Key_Addr, "__gnat_ATCB_key_addr");
-    --  Exported to support the temporary AE653 task registration
-    --  implementation. This mechanism is used to minimize impact on other
-    --  targets.
- 
-    Environment_Task_ID : Task_ID;
-    --  A variable to hold Task_ID for the environment task.
- 
-    Unblocked_Signal_Mask : aliased sigset_t;
-    --  The set of signals that should unblocked in all tasks
- 
-    --  The followings are internal configuration constants needed.
- 
-    Time_Slice_Val : Integer;
-    pragma Import (C, Time_Slice_Val, "__gl_time_slice_val");
- 
-    Locking_Policy : Character;
-    pragma Import (C, Locking_Policy, "__gl_locking_policy");
- 
-    Dispatching_Policy : Character;
-    pragma Import (C, Dispatching_Policy, "__gl_task_dispatching_policy");
- 
-    FIFO_Within_Priorities : constant Boolean := Dispatching_Policy = 'F';
-    --  Indicates whether FIFO_Within_Priorities is set.
- 
-    Mutex_Protocol : Priority_Type;
- 
-    Foreign_Task_Elaborated : aliased Boolean := True;
-    --  Used to identified fake tasks (i.e., non-Ada Threads).
- 
-    --------------------
-    -- Local Packages --
-    --------------------
- 
-    package Specific is
- 
-       function Is_Valid_Task return Boolean;
-       pragma Inline (Is_Valid_Task);
-       --  Does executing thread have a TCB?
- 
-       procedure Set (Self_Id : Task_ID);
-       pragma Inline (Set);
-       --  Set the self id for the current task.
- 
-       function Self return Task_ID;
-       pragma Inline (Self);
-       --  Return a pointer to the Ada Task Control Block of the calling task.
- 
-    end Specific;
- 
-    package body Specific is separate;
-    --  The body of this package is target specific.
- 
-    ---------------------------------
-    -- Support for foreign threads --
-    ---------------------------------
- 
-    function Register_Foreign_Thread (Thread : Thread_Id) return Task_ID;
-    --  Allocate and Initialize a new ATCB for the current Thread.
- 
-    function Register_Foreign_Thread
-      (Thread : Thread_Id) return Task_ID is separate;
- 
-    -----------------------
-    -- Local Subprograms --
-    -----------------------
- 
-    procedure Abort_Handler (signo : Signal);
-    --  Handler for the abort (SIGABRT) signal to handle asynchronous abortion.
- 
-    procedure Install_Signal_Handlers;
-    --  Install the default signal handlers for the current task
- 
-    function To_Address is new Unchecked_Conversion (Task_ID, System.Address);
- 
-    -------------------
-    -- Abort_Handler --
-    -------------------
- 
-    procedure Abort_Handler (signo : Signal) is
-       pragma Unreferenced (signo);
- 
-       Self_ID : constant Task_ID := Self;
-       Result  : int;
-       Old_Set : aliased sigset_t;
- 
-    begin
-       --  It is not safe to raise an exception when using ZCX and the GCC
-       --  exception handling mechanism.
- 
-       if ZCX_By_Default and then GCC_ZCX_Support then
-          return;
-       end if;
- 
-       if Self_ID.Deferral_Level = 0
-         and then Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level
-         and then not Self_ID.Aborting
-       then
-          Self_ID.Aborting := True;
- 
-          --  Make sure signals used for RTS internal purpose are unmasked
- 
-          Result := pthread_sigmask (SIG_UNBLOCK,
-            Unblocked_Signal_Mask'Unchecked_Access, Old_Set'Unchecked_Access);
-          pragma Assert (Result = 0);
- 
-          raise Standard'Abort_Signal;
-       end if;
-    end Abort_Handler;
- 
-    -----------------
-    -- Stack_Guard --
-    -----------------
- 
-    procedure Stack_Guard (T : ST.Task_ID; On : Boolean) is
-       pragma Unreferenced (T);
-       pragma Unreferenced (On);
- 
-    begin
-       --  Nothing needed (why not???)
- 
-       null;
-    end Stack_Guard;
- 
-    -------------------
-    -- Get_Thread_Id --
-    -------------------
- 
-    function Get_Thread_Id (T : ST.Task_ID) return OSI.Thread_Id is
-    begin
-       return T.Common.LL.Thread;
-    end Get_Thread_Id;
- 
-    ----------
-    -- Self --
-    ----------
- 
-    function Self return Task_ID renames Specific.Self;
- 
-    -----------------------------
-    -- Install_Signal_Handlers --
-    -----------------------------
- 
-    procedure Install_Signal_Handlers is
-       act     : aliased struct_sigaction;
-       old_act : aliased struct_sigaction;
-       Tmp_Set : aliased sigset_t;
-       Result  : int;
- 
-    begin
-       act.sa_flags := 0;
-       act.sa_handler := Abort_Handler'Address;
- 
-       Result := sigemptyset (Tmp_Set'Access);
-       pragma Assert (Result = 0);
-       act.sa_mask := Tmp_Set;
- 
-       Result :=
-         sigaction
-           (Signal (Interrupt_Management.Abort_Task_Signal),
-            act'Unchecked_Access,
-            old_act'Unchecked_Access);
-       pragma Assert (Result = 0);
- 
-       Interrupt_Management.Initialize_Interrupts;
-    end Install_Signal_Handlers;
- 
-    ---------------------
-    -- Initialize_Lock --
-    ---------------------
- 
-    procedure Initialize_Lock (Prio : System.Any_Priority; L : access Lock) is
-    begin
-       L.Mutex := semMCreate (SEM_Q_PRIORITY + SEM_INVERSION_SAFE);
-       L.Prio_Ceiling := int (Prio);
-       L.Protocol := Mutex_Protocol;
-       pragma Assert (L.Mutex /= 0);
-    end Initialize_Lock;
- 
-    procedure Initialize_Lock (L : access RTS_Lock; Level : Lock_Level) is
-       pragma Unreferenced (Level);
- 
-    begin
-       L.Mutex := semMCreate (SEM_Q_PRIORITY + SEM_INVERSION_SAFE);
-       L.Prio_Ceiling := int (System.Any_Priority'Last);
-       L.Protocol := Mutex_Protocol;
-       pragma Assert (L.Mutex /= 0);
-    end Initialize_Lock;
- 
-    -------------------
-    -- Finalize_Lock --
-    -------------------
- 
-    procedure Finalize_Lock (L : access Lock) is
-       Result : int;
- 
-    begin
-       Result := semDelete (L.Mutex);
-       pragma Assert (Result = 0);
-    end Finalize_Lock;
- 
-    procedure Finalize_Lock (L : access RTS_Lock) is
-       Result : int;
- 
-    begin
-       Result := semDelete (L.Mutex);
-       pragma Assert (Result = 0);
-    end Finalize_Lock;
- 
-    ----------------
-    -- Write_Lock --
-    ----------------
- 
-    procedure Write_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
-       Result : int;
- 
-    begin
-       if L.Protocol = Prio_Protect
-         and then int (Self.Common.Current_Priority) > L.Prio_Ceiling
-       then
-          Ceiling_Violation := True;
-          return;
-       else
-          Ceiling_Violation := False;
-       end if;
- 
-       Result := semTake (L.Mutex, WAIT_FOREVER);
-       pragma Assert (Result = 0);
-    end Write_Lock;
- 
-    procedure Write_Lock
-      (L           : access RTS_Lock;
-       Global_Lock : Boolean := False)
-    is
-       Result : int;
- 
-    begin
-       if not Single_Lock or else Global_Lock then
-          Result := semTake (L.Mutex, WAIT_FOREVER);
-          pragma Assert (Result = 0);
-       end if;
-    end Write_Lock;
- 
-    procedure Write_Lock (T : Task_ID) is
-       Result : int;
- 
-    begin
-       if not Single_Lock then
-          Result := semTake (T.Common.LL.L.Mutex, WAIT_FOREVER);
-          pragma Assert (Result = 0);
-       end if;
-    end Write_Lock;
- 
-    ---------------
-    -- Read_Lock --
-    ---------------
- 
-    procedure Read_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
-    begin
-       Write_Lock (L, Ceiling_Violation);
-    end Read_Lock;
- 
-    ------------
-    -- Unlock --
-    ------------
- 
-    procedure Unlock (L : access Lock) is
-       Result  : int;
- 
-    begin
-       Result := semGive (L.Mutex);
-       pragma Assert (Result = 0);
-    end Unlock;
- 
-    procedure Unlock (L : access RTS_Lock; Global_Lock : Boolean := False) is
-       Result : int;
- 
-    begin
-       if not Single_Lock or else Global_Lock then
-          Result := semGive (L.Mutex);
-          pragma Assert (Result = 0);
-       end if;
-    end Unlock;
- 
-    procedure Unlock (T : Task_ID) is
-       Result : int;
- 
-    begin
-       if not Single_Lock then
-          Result := semGive (T.Common.LL.L.Mutex);
-          pragma Assert (Result = 0);
-       end if;
-    end Unlock;
- 
-    -----------
-    -- Sleep --
-    -----------
- 
-    procedure Sleep (Self_ID : Task_ID; Reason : System.Tasking.Task_States) is
-       pragma Unreferenced (Reason);
- 
-       Result : int;
- 
-    begin
-       pragma Assert (Self_ID = Self);
- 
-       --  Release the mutex before sleeping.
-       if Single_Lock then
-          Result := semGive (Single_RTS_Lock.Mutex);
-       else
-          Result := semGive (Self_ID.Common.LL.L.Mutex);
-       end if;
- 
-       pragma Assert (Result = 0);
- 
-       --  Perform a blocking operation to take the CV semaphore.
-       --  Note that a blocking operation in VxWorks will reenable
-       --  task scheduling. When we are no longer blocked and control
-       --  is returned, task scheduling will again be disabled.
- 
-       Result := semTake (Self_ID.Common.LL.CV, WAIT_FOREVER);
-       pragma Assert (Result = 0);
- 
-       --  Take the mutex back.
-       if Single_Lock then
-          Result := semTake (Single_RTS_Lock.Mutex, WAIT_FOREVER);
-       else
-          Result := semTake (Self_ID.Common.LL.L.Mutex, WAIT_FOREVER);
-       end if;
- 
-       pragma Assert (Result = 0);
-    end Sleep;
- 
-    -----------------
-    -- Timed_Sleep --
-    -----------------
- 
-    --  This is for use within the run-time system, so abort is
-    --  assumed to be already deferred, and the caller should be
-    --  holding its own ATCB lock.
- 
-    procedure Timed_Sleep
-      (Self_ID  : Task_ID;
-       Time     : Duration;
-       Mode     : ST.Delay_Modes;
-       Reason   : System.Tasking.Task_States;
-       Timedout : out Boolean;
-       Yielded  : out Boolean)
-    is
-       pragma Unreferenced (Reason);
- 
-       Orig     : constant Duration := Monotonic_Clock;
-       Absolute : Duration;
-       Ticks    : int;
-       Result   : int;
-       Wakeup   : Boolean := False;
- 
-    begin
-       Timedout := False;
-       Yielded  := True;
- 
-       if Mode = Relative then
-          Absolute := Orig + Time;
- 
-          --  Systematically add one since the first tick will delay
-          --  *at most* 1 / Rate_Duration seconds, so we need to add one to
-          --  be on the safe side.
- 
-          Ticks := To_Clock_Ticks (Time);
- 
-          if Ticks > 0 and then Ticks < int'Last then
-             Ticks := Ticks + 1;
-          end if;
- 
-       else
-          Absolute := Time;
-          Ticks    := To_Clock_Ticks (Time - Monotonic_Clock);
-       end if;
- 
-       if Ticks > 0 then
-          loop
-             --  Release the mutex before sleeping.
-             if Single_Lock then
-                Result := semGive (Single_RTS_Lock.Mutex);
-             else
-                Result := semGive (Self_ID.Common.LL.L.Mutex);
-             end if;
- 
-             pragma Assert (Result = 0);
- 
-             --  Perform a blocking operation to take the CV semaphore.
-             --  Note that a blocking operation in VxWorks will reenable
-             --  task scheduling. When we are no longer blocked and control
-             --  is returned, task scheduling will again be disabled.
- 
-             Result := semTake (Self_ID.Common.LL.CV, Ticks);
- 
-             if Result = 0 then
-                --  Somebody may have called Wakeup for us
- 
-                Wakeup := True;
- 
-             else
-                if errno /= S_objLib_OBJ_TIMEOUT then
-                   Wakeup := True;
-                else
-                   --  If Ticks = int'last, it was most probably truncated
-                   --  so let's make another round after recomputing Ticks
-                   --  from the the absolute time.
- 
-                   if Ticks /= int'Last then
-                      Timedout := True;
-                   else
-                      Ticks := To_Clock_Ticks (Absolute - Monotonic_Clock);
- 
-                      if Ticks < 0 then
-                         Timedout := True;
-                      end if;
-                   end if;
-                end if;
-             end if;
- 
-             --  Take the mutex back.
-             if Single_Lock then
-                Result := semTake (Single_RTS_Lock.Mutex, WAIT_FOREVER);
-             else
-                Result := semTake (Self_ID.Common.LL.L.Mutex, WAIT_FOREVER);
-             end if;
- 
-             pragma Assert (Result = 0);
- 
-             exit when Timedout or Wakeup;
-          end loop;
- 
-       else
-          Timedout := True;
- 
-          --  Should never hold a lock while yielding.
-          if Single_Lock then
-             Result := semGive (Single_RTS_Lock.Mutex);
-             taskDelay (0);
-             Result := semTake (Single_RTS_Lock.Mutex, WAIT_FOREVER);
- 
-          else
-             Result := semGive (Self_ID.Common.LL.L.Mutex);
-             taskDelay (0);
-             Result := semTake (Self_ID.Common.LL.L.Mutex, WAIT_FOREVER);
-          end if;
-       end if;
-    end Timed_Sleep;
- 
-    -----------------
-    -- Timed_Delay --
-    -----------------
- 
-    --  This is for use in implementing delay statements, so
-    --  we assume the caller is holding no locks.
- 
-    procedure Timed_Delay
-      (Self_ID  : Task_ID;
-       Time     : Duration;
-       Mode     : ST.Delay_Modes)
-    is
-       Orig     : constant Duration := Monotonic_Clock;
-       Absolute : Duration;
-       Ticks    : int;
-       Timedout : Boolean;
-       Result   : int;
-       Aborted  : Boolean := False;
- 
-    begin
-       SSL.Abort_Defer.all;
- 
-       if Mode = Relative then
-          Absolute := Orig + Time;
-          Ticks    := To_Clock_Ticks (Time);
- 
-          if Ticks > 0 and then Ticks < int'Last then
- 
-             --  The first tick will delay anytime between 0 and
-             --  1 / sysClkRateGet seconds, so we need to add one to
-             --  be on the safe side.
- 
-             Ticks := Ticks + 1;
-          end if;
- 
-       else
-          Absolute := Time;
-          Ticks    := To_Clock_Ticks (Time - Orig);
-       end if;
- 
-       if Ticks > 0 then
-          --  Modifying State and Pending_Priority_Change, locking the TCB.
-          if Single_Lock then
-             Result := semTake (Single_RTS_Lock.Mutex, WAIT_FOREVER);
-          else
-             Result := semTake (Self_ID.Common.LL.L.Mutex, WAIT_FOREVER);
-          end if;
- 
-          pragma Assert (Result = 0);
- 
-          Self_ID.Common.State := Delay_Sleep;
-          Timedout := False;
- 
-          loop
-             if Self_ID.Pending_Priority_Change then
-                Self_ID.Pending_Priority_Change := False;
-                Self_ID.Common.Base_Priority    := Self_ID.New_Base_Priority;
-                Set_Priority (Self_ID, Self_ID.Common.Base_Priority);
-             end if;
- 
-             Aborted := Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level;
- 
-             --  Release the TCB before sleeping
- 
-             if Single_Lock then
-                Result := semGive (Single_RTS_Lock.Mutex);
-             else
-                Result := semGive (Self_ID.Common.LL.L.Mutex);
-             end if;
-             pragma Assert (Result = 0);
- 
-             exit when Aborted;
- 
-             Result := semTake (Self_ID.Common.LL.CV, Ticks);
- 
-             if Result /= 0 then
-                --  If Ticks = int'last, it was most probably truncated
-                --  so let's make another round after recomputing Ticks
-                --  from the the absolute time.
- 
-                if errno = S_objLib_OBJ_TIMEOUT and then Ticks /= int'Last then
-                   Timedout := True;
-                else
-                   Ticks := To_Clock_Ticks (Absolute - Monotonic_Clock);
- 
-                   if Ticks < 0 then
-                      Timedout := True;
-                   end if;
-                end if;
-             end if;
- 
-             --  Take back the lock after having slept, to protect further
-             --  access to Self_ID
- 
-             if Single_Lock then
-                Result := semTake (Single_RTS_Lock.Mutex, WAIT_FOREVER);
-             else
-                Result := semTake (Self_ID.Common.LL.L.Mutex, WAIT_FOREVER);
-             end if;
- 
-             pragma Assert (Result = 0);
- 
-             exit when Timedout;
-          end loop;
- 
-          Self_ID.Common.State := Runnable;
- 
-          if Single_Lock then
-             Result := semGive (Single_RTS_Lock.Mutex);
-          else
-             Result := semGive (Self_ID.Common.LL.L.Mutex);
-          end if;
- 
-       else
-          taskDelay (0);
-       end if;
- 
-       SSL.Abort_Undefer.all;
-    end Timed_Delay;
- 
-    ---------------------
-    -- Monotonic_Clock --
-    ---------------------
- 
-    function Monotonic_Clock return Duration is
-       TS     : aliased timespec;
-       Result : int;
- 
-    begin
-       Result := clock_gettime (CLOCK_REALTIME, TS'Unchecked_Access);
-       pragma Assert (Result = 0);
-       return To_Duration (TS);
-    end Monotonic_Clock;
- 
-    -------------------
-    -- RT_Resolution --
-    -------------------
- 
-    function RT_Resolution return Duration is
-    begin
-       return 1.0 / Duration (sysClkRateGet);
-    end RT_Resolution;
- 
-    ------------
-    -- Wakeup --
-    ------------
- 
-    procedure Wakeup (T : Task_ID; Reason : System.Tasking.Task_States) is
-       pragma Unreferenced (Reason);
- 
-       Result : int;
- 
-    begin
-       Result := semGive (T.Common.LL.CV);
-       pragma Assert (Result = 0);
-    end Wakeup;
- 
-    -----------
-    -- Yield --
-    -----------
- 
-    procedure Yield (Do_Yield : Boolean := True) is
-       pragma Unreferenced (Do_Yield);
-       Result : int;
-       pragma Unreferenced (Result);
-    begin
-       Result := taskDelay (0);
-    end Yield;
- 
-    ------------------
-    -- Set_Priority --
-    ------------------
- 
-    type Prio_Array_Type is array (System.Any_Priority) of Integer;
-    pragma Atomic_Components (Prio_Array_Type);
- 
-    Prio_Array : Prio_Array_Type;
-    --  Global array containing the id of the currently running task for
-    --  each priority. Note that we assume that we are on a single processor
-    --  with run-till-blocked scheduling.
- 
-    procedure Set_Priority
-      (T                   : Task_ID;
-       Prio                : System.Any_Priority;
-       Loss_Of_Inheritance : Boolean := False)
-    is
-       Array_Item : Integer;
-       Result     : int;
- 
-    begin
-       Result :=
-         taskPrioritySet
-           (T.Common.LL.Thread, To_VxWorks_Priority (int (Prio)));
-       pragma Assert (Result = 0);
- 
-       if FIFO_Within_Priorities then
- 
-          --  Annex D requirement [RM D.2.2 par. 9]:
-          --    If the task drops its priority due to the loss of inherited
-          --    priority, it is added at the head of the ready queue for its
-          --    new active priority.
- 
-          if Loss_Of_Inheritance
-            and then Prio < T.Common.Current_Priority
-          then
-             Array_Item := Prio_Array (T.Common.Base_Priority) + 1;
-             Prio_Array (T.Common.Base_Priority) := Array_Item;
- 
-             loop
-                --  Give some processes a chance to arrive
- 
-                taskDelay (0);
- 
-                --  Then wait for our turn to proceed
- 
-                exit when Array_Item = Prio_Array (T.Common.Base_Priority)
-                  or else Prio_Array (T.Common.Base_Priority) = 1;
-             end loop;
- 
-             Prio_Array (T.Common.Base_Priority) :=
-               Prio_Array (T.Common.Base_Priority) - 1;
-          end if;
-       end if;
- 
-       T.Common.Current_Priority := Prio;
-    end Set_Priority;
- 
-    ------------------
-    -- Get_Priority --
-    ------------------
- 
-    function Get_Priority (T : Task_ID) return System.Any_Priority is
-    begin
-       return T.Common.Current_Priority;
-    end Get_Priority;
- 
-    ----------------
-    -- Enter_Task --
-    ----------------
- 
-    procedure Enter_Task (Self_ID : Task_ID) is
-       procedure Init_Float;
-       pragma Import (C, Init_Float, "__gnat_init_float");
-       --  Properly initializes the FPU for PPC/MIPS systems.
- 
-    begin
-       Self_ID.Common.LL.Thread := taskIdSelf;
-       Specific.Set (Self_ID);
- 
-       Init_Float;
- 
-       --  Install the signal handlers.
-       --  This is called for each task since there is no signal inheritance
-       --  between VxWorks tasks.
- 
-       Install_Signal_Handlers;
- 
-       Lock_RTS;
- 
-       for J in Known_Tasks'Range loop
-          if Known_Tasks (J) = null then
-             Known_Tasks (J) := Self_ID;
-             Self_ID.Known_Tasks_Index := J;
-             exit;
-          end if;
-       end loop;
- 
-       Unlock_RTS;
-    end Enter_Task;
- 
-    --------------
-    -- New_ATCB --
-    --------------
- 
-    function New_ATCB (Entry_Num : Task_Entry_Index) return Task_ID is
-    begin
-       return new Ada_Task_Control_Block (Entry_Num);
-    end New_ATCB;
- 
-    -------------------
-    -- Is_Valid_Task --
-    -------------------
- 
-    function Is_Valid_Task return Boolean renames Specific.Is_Valid_Task;
- 
-    -----------------------------
-    -- Register_Foreign_Thread --
-    -----------------------------
- 
-    function Register_Foreign_Thread return Task_ID is
-    begin
-       if Is_Valid_Task then
-          return Self;
-       else
-          return Register_Foreign_Thread (taskIdSelf);
-       end if;
-    end Register_Foreign_Thread;
- 
-    --------------------
-    -- Initialize_TCB --
-    --------------------
- 
-    procedure Initialize_TCB (Self_ID : Task_ID; Succeeded : out Boolean) is
-    begin
-       Self_ID.Common.LL.CV := semBCreate (SEM_Q_PRIORITY, SEM_EMPTY);
-       Self_ID.Common.LL.Thread := 0;
- 
-       if Self_ID.Common.LL.CV = 0 then
-          Succeeded := False;
-       else
-          Succeeded := True;
- 
-          if not Single_Lock then
-             Initialize_Lock (Self_ID.Common.LL.L'Access, ATCB_Level);
-          end if;
-       end if;
-    end Initialize_TCB;
- 
-    -----------------
-    -- Create_Task --
-    -----------------
- 
-    procedure Create_Task
-      (T          : Task_ID;
-       Wrapper    : System.Address;
-       Stack_Size : System.Parameters.Size_Type;
-       Priority   : System.Any_Priority;
-       Succeeded  : out Boolean)
-    is
-       Adjusted_Stack_Size : size_t;
-    begin
-       if Stack_Size = Unspecified_Size then
-          Adjusted_Stack_Size := size_t (Default_Stack_Size);
- 
-       elsif Stack_Size < Minimum_Stack_Size then
-          Adjusted_Stack_Size := size_t (Minimum_Stack_Size);
- 
-       else
-          Adjusted_Stack_Size := size_t (Stack_Size);
-       end if;
- 
-       --  Ask for 4 extra bytes of stack space so that the ATCB
-       --  pointer can be stored below the stack limit, plus extra
-       --  space for the frame of Task_Wrapper.  This is so the user
-       --  gets the amount of stack requested exclusive of the needs
-       --  of the runtime.
-       --
-       --  We also have to allocate n more bytes for the task name
-       --  storage and enough space for the Wind Task Control Block
-       --  which is around 0x778 bytes.  VxWorks also seems to carve out
-       --  additional space, so use 2048 as a nice round number.
-       --  We might want to increment to the nearest page size in
-       --  case we ever support VxVMI.
-       --
-       --  XXX - we should come back and visit this so we can
-       --        set the task name to something appropriate.
- 
-       Adjusted_Stack_Size := Adjusted_Stack_Size + 2048;
- 
-       --  Since the initial signal mask of a thread is inherited from the
-       --  creator, and the Environment task has all its signals masked, we
-       --  do not need to manipulate caller's signal mask at this point.
-       --  All tasks in RTS will have All_Tasks_Mask initially.
- 
-       if T.Common.Task_Image_Len = 0 then
-          T.Common.LL.Thread := taskSpawn
-            (System.Null_Address,
-             To_VxWorks_Priority (int (Priority)),
-             VX_FP_TASK,
-             Adjusted_Stack_Size,
-             Wrapper,
-             To_Address (T));
-       else
-          declare
-             Name : aliased String (1 .. T.Common.Task_Image_Len + 1);
-          begin
-             Name (1 .. Name'Last - 1) :=
-               T.Common.Task_Image (1 .. T.Common.Task_Image_Len);
-             Name (Name'Last) := ASCII.NUL;
- 
-             T.Common.LL.Thread := taskSpawn
-               (Name'Address,
-                To_VxWorks_Priority (int (Priority)),
-                VX_FP_TASK,
-                Adjusted_Stack_Size,
-                Wrapper,
-                To_Address (T));
-          end;
-       end if;
- 
-       if T.Common.LL.Thread = -1 then
-          Succeeded := False;
-       else
-          Succeeded := True;
-       end if;
- 
-       Task_Creation_Hook (T.Common.LL.Thread);
-       Set_Priority (T, Priority);
-    end Create_Task;
- 
-    ------------------
-    -- Finalize_TCB --
-    ------------------
- 
-    procedure Finalize_TCB (T : Task_ID) is
-       Result  : int;
-       Tmp     : Task_ID          := T;
-       Is_Self : constant Boolean := (T = Self);
- 
-       procedure Free is new
-         Unchecked_Deallocation (Ada_Task_Control_Block, Task_ID);
- 
-    begin
-       if not Single_Lock then
-          Result := semDelete (T.Common.LL.L.Mutex);
-          pragma Assert (Result = 0);
-       end if;
- 
-       T.Common.LL.Thread := 0;
- 
-       Result := semDelete (T.Common.LL.CV);
-       pragma Assert (Result = 0);
- 
-       if T.Known_Tasks_Index /= -1 then
-          Known_Tasks (T.Known_Tasks_Index) := null;
-       end if;
- 
-       Free (Tmp);
- 
-       if Is_Self then
-          Result := taskVarDelete (taskIdSelf, ATCB_Key'Access);
-          pragma Assert (Result /= ERROR);
-       end if;
-    end Finalize_TCB;
- 
-    ---------------
-    -- Exit_Task --
-    ---------------
- 
-    procedure Exit_Task is
-    begin
-       Specific.Set (null);
-    end Exit_Task;
- 
-    ----------------
-    -- Abort_Task --
-    ----------------
- 
-    procedure Abort_Task (T : Task_ID) is
-       Result : int;
- 
-    begin
-       Result := kill (T.Common.LL.Thread,
-         Signal (Interrupt_Management.Abort_Task_Signal));
-       pragma Assert (Result = 0);
-    end Abort_Task;
- 
-    ----------------
-    -- Check_Exit --
-    ----------------
- 
-    --  Dummy version
- 
-    function Check_Exit (Self_ID : ST.Task_ID) return Boolean is
-       pragma Unreferenced (Self_ID);
- 
-    begin
-       return True;
-    end Check_Exit;
- 
-    --------------------
-    -- Check_No_Locks --
-    --------------------
- 
-    function Check_No_Locks (Self_ID : ST.Task_ID) return Boolean is
-       pragma Unreferenced (Self_ID);
- 
-    begin
-       return True;
-    end Check_No_Locks;
- 
-    ----------------------
-    -- Environment_Task --
-    ----------------------
- 
-    function Environment_Task return Task_ID is
-    begin
-       return Environment_Task_ID;
-    end Environment_Task;
- 
-    --------------
-    -- Lock_RTS --
-    --------------
- 
-    procedure Lock_RTS is
-    begin
-       Write_Lock (Single_RTS_Lock'Access, Global_Lock => True);
-    end Lock_RTS;
- 
-    ----------------
-    -- Unlock_RTS --
-    ----------------
- 
-    procedure Unlock_RTS is
-    begin
-       Unlock (Single_RTS_Lock'Access, Global_Lock => True);
-    end Unlock_RTS;
- 
-    ------------------
-    -- Suspend_Task --
-    ------------------
- 
-    function Suspend_Task
-      (T           : ST.Task_ID;
-       Thread_Self : Thread_Id)
-       return        Boolean
-    is
-    begin
-       if T.Common.LL.Thread /= 0
-         and then T.Common.LL.Thread /= Thread_Self
-       then
-          return taskSuspend (T.Common.LL.Thread) = 0;
-       else
-          return True;
-       end if;
-    end Suspend_Task;
- 
-    -----------------
-    -- Resume_Task --
-    -----------------
- 
-    function Resume_Task
-      (T           : ST.Task_ID;
-       Thread_Self : Thread_Id)
-       return        Boolean
-    is
-    begin
-       if T.Common.LL.Thread /= 0
-         and then T.Common.LL.Thread /= Thread_Self
-       then
-          return taskResume (T.Common.LL.Thread) = 0;
-       else
-          return True;
-       end if;
-    end Resume_Task;
- 
-    ----------------
-    -- Initialize --
-    ----------------
- 
-    procedure Initialize (Environment_Task : Task_ID) is
-       Result : int;
- 
-    begin
-       if Locking_Policy = 'C' then
-          Mutex_Protocol := Prio_Protect;
-       elsif Locking_Policy = 'I' then
-          Mutex_Protocol := Prio_Inherit;
-       else
-          Mutex_Protocol := Prio_None;
-       end if;
- 
-       if Time_Slice_Val > 0 then
-          Result := kernelTimeSlice
-            (To_Clock_Ticks
-              (Duration (Time_Slice_Val) / Duration (1_000_000.0)));
-       end if;
- 
-       Result := sigemptyset (Unblocked_Signal_Mask'Access);
-       pragma Assert (Result = 0);
- 
-       for J in Interrupt_Management.Signal_ID loop
-          if System.Interrupt_Management.Keep_Unmasked (J) then
-             Result := sigaddset (Unblocked_Signal_Mask'Access, Signal (J));
-             pragma Assert (Result = 0);
-          end if;
-       end loop;
- 
-       Environment_Task_ID := Environment_Task;
- 
-       --  Initialize the lock used to synchronize chain of all ATCBs.
- 
-       Initialize_Lock (Single_RTS_Lock'Access, RTS_Lock_Level);
- 
-       Enter_Task (Environment_Task);
-    end Initialize;
- 
- end System.Task_Primitives.Operations;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5ztaspri.ads gcc-4.0.0/gcc/ada/5ztaspri.ads
*** gcc-3.4.3/gcc/ada/5ztaspri.ads	Tue Oct 21 13:41:53 2003
--- gcc-4.0.0/gcc/ada/5ztaspri.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,95 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
- --                                                                          --
- --                 S Y S T E M . T A S K _ P R I M I T I V E S              --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --          Copyright (C) 2001-2002 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a VxWorks version of this package.
- 
- pragma Polling (Off);
- --  Turn off polling, we do not want ATC polling to take place during
- --  tasking operations. It causes infinite loops and other problems.
- 
- with System.OS_Interface;
- 
- package System.Task_Primitives is
- 
-    type Lock is limited private;
-    --  Should be used for implementation of protected objects.
- 
-    type RTS_Lock is limited private;
-    --  Should be used inside the runtime system.
-    --  The difference between Lock and the RTS_Lock is that the later
-    --  one serves only as a semaphore so that do not check for
-    --  ceiling violations.
- 
-    type Task_Body_Access is access procedure;
-    --  Pointer to the task body's entry point (or possibly a wrapper
-    --  declared local to the GNARL).
- 
-    type Private_Data is limited private;
-    --  Any information that the GNULLI needs maintained on a per-task
-    --  basis.  A component of this type is guaranteed to be included
-    --  in the Ada_Task_Control_Block.
- 
- private
- 
-    type Priority_Type is (Prio_None, Prio_Protect, Prio_Inherit);
- 
-    type Lock is record
-       Mutex        : System.OS_Interface.SEM_ID;
-       Protocol     : Priority_Type;
-       Prio_Ceiling : System.OS_Interface.int;
-       --  priority ceiling of lock
-    end record;
- 
-    type RTS_Lock is new Lock;
- 
-    type Private_Data is record
-       Thread : aliased System.OS_Interface.t_id := 0;
-       pragma Atomic (Thread);
-       --  Thread field may be updated by two different threads of control.
-       --  (See, Enter_Task and Create_Task in s-taprop.adb).
-       --  They put the same value (thr_self value). We do not want to
-       --  use lock on those operations and the only thing we have to
-       --  make sure is that they are updated in atomic fashion.
- 
-       LWP : aliased System.Address;
-       --  The purpose of this field is to provide a better tasking support on
-       --  gdb. The order of the two first fields (Thread and LWP) is important.
-       --  On targets where lwp is not relevant, this is equivalent to Thread.
- 
-       CV : aliased System.OS_Interface.SEM_ID;
- 
-       L  : aliased RTS_Lock;
-       --  Protection for all components is lock L
-    end record;
- 
- end System.Task_Primitives;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5ztfsetr.adb gcc-4.0.0/gcc/ada/5ztfsetr.adb
*** gcc-3.4.3/gcc/ada/5ztfsetr.adb	Tue Oct 21 13:41:53 2003
--- gcc-4.0.0/gcc/ada/5ztfsetr.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,107 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                     S Y S T E M . T R A C E S . S E N D                  --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --             Copyright (C) 2001 Free Software Foundation, Inc.            --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This version is for VxWorks targets.
- 
- --  Trace information is sent to WindView using the wvEvent function.
- 
- --  Note that wvEvent is from the VxWorks API.
- 
- --  When adding a new event, just give an Id to then event, and then modify
- --  the WindView events database.
- 
- --  Refer to WindView User's Guide for more details on how to add new events
- --  to the events database.
- 
- ----------------
- -- Send_Trace --
- ----------------
- 
- --  This procedure formats the string, maps the event Id to an Id
- --  recognized by WindView, and send the event using wvEvent
- 
- separate (System.Traces.Format)
- procedure Send_Trace (Id : Trace_T; Info : String) is
- 
-    procedure Wv_Event
-      (Id : Integer;
-       Buffer : System.Address;
-       Size : Integer);
-    pragma Import (C, Wv_Event, "wvEvent");
- 
-    Info_Trace : String_Trace;
-    Id_Event   : Integer;
- 
- begin
-    Info_Trace := Format_Trace (Info);
- 
-    case Id is
-       when M_Accept_Complete => Id_Event := 30000;
-       when M_Select_Else     => Id_Event := 30001;
-       when M_RDV_Complete    => Id_Event := 30002;
-       when M_Call_Complete   => Id_Event := 30003;
-       when M_Delay           => Id_Event := 30004;
-       when E_Kill            => Id_Event := 30005;
-       when E_Missed          => Id_Event := 30006;
-       when E_Timeout         => Id_Event := 30007;
- 
-       when W_Call            => Id_Event := 30010;
-       when W_Accept          => Id_Event := 30011;
-       when W_Select          => Id_Event := 30012;
-       when W_Completion      => Id_Event := 30013;
-       when W_Delay           => Id_Event := 30014;
-       when WT_Select         => Id_Event := 30015;
-       when WT_Call           => Id_Event := 30016;
-       when WT_Completion     => Id_Event := 30017;
-       when WU_Delay          => Id_Event := 30018;
- 
-       when PO_Call           => Id_Event := 30020;
-       when POT_Call          => Id_Event := 30021;
-       when PO_Run            => Id_Event := 30022;
-       when PO_Lock           => Id_Event := 30023;
-       when PO_Unlock         => Id_Event := 30024;
-       when PO_Done           => Id_Event := 30025;
- 
-       when T_Create          => Id_Event := 30030;
-       when T_Activate        => Id_Event := 30031;
-       when T_Abort           => Id_Event := 30032;
-       when T_Terminate       => Id_Event := 30033;
- 
-       --  Unrecognized events are given the special Id_Event value 29999
- 
-       when others            => Id_Event := 29999;
- 
-    end case;
- 
-    Wv_Event (Id_Event, Info_Trace'Address, Max_Size);
- end Send_Trace;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/5ztpopsp.adb gcc-4.0.0/gcc/ada/5ztpopsp.adb
*** gcc-3.4.3/gcc/ada/5ztpopsp.adb	Tue Oct 21 13:41:53 2003
--- gcc-4.0.0/gcc/ada/5ztpopsp.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,74 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                SYSTEM.TASK_PRIMITIVES.OPERATIONS.SPECIFIC                --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --         Copyright (C) 1992-2002, Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a VxWorks version of this package where foreign threads are
- --  recognized.
- 
- separate (System.Task_Primitives.Operations)
- package body Specific is
- 
-    -------------------
-    -- Is_Valid_Task --
-    -------------------
- 
-    function Is_Valid_Task return Boolean is
-    begin
-       return taskVarGet (taskIdSelf, ATCB_Key'Access) /= ERROR;
-    end Is_Valid_Task;
- 
-    ---------
-    -- Set --
-    ---------
- 
-    procedure Set (Self_Id : Task_ID) is
-       Result : STATUS;
- 
-    begin
-       if taskVarGet (0, ATCB_Key'Access) = ERROR then
-          Result := taskVarAdd (0, ATCB_Key'Access);
-          pragma Assert (Result = OK);
-       end if;
- 
-       ATCB_Key := To_Address (Self_Id);
-    end Set;
- 
-    ----------
-    -- Self --
-    ----------
- 
-    function Self return Task_ID is
-    begin
-       return To_Task_Id (ATCB_Key);
-    end Self;
- 
- end Specific;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/6vcpp.adb gcc-4.0.0/gcc/ada/6vcpp.adb
*** gcc-3.4.3/gcc/ada/6vcpp.adb	Mon Jan  5 15:20:43 2004
--- gcc-4.0.0/gcc/ada/6vcpp.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,346 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT RUN-TIME COMPONENTS                         --
- --                                                                          --
- --                       I N T E R F A C E S . C P P                        --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --         Copyright (C) 2000-2004, Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the OpenVMS/Alpha DEC C++ (cxx) version of this package
- 
- with Ada.Tags;                use Ada.Tags;
- with System;                  use System;
- with System.Storage_Elements; use System.Storage_Elements;
- with Unchecked_Conversion;
- 
- package body Interfaces.CPP is
- 
-    subtype Cstring is String (Positive);
-    type Cstring_Ptr is access all Cstring;
-    type Tag_Table is array (Natural range <>) of Vtable_Ptr;
-    pragma Suppress_Initialization (Tag_Table);
- 
-    type Type_Specific_Data is record
-       Idepth        : Natural;
-       Expanded_Name : Cstring_Ptr;
-       External_Tag  : Cstring_Ptr;
-       HT_Link       : Tag;
-       Ancestor_Tags : Tag_Table (Natural);
-    end record;
- 
-    type Vtable_Entry is record
-      Pfn    : System.Address;
-    end record;
- 
-    type Type_Specific_Data_Ptr is access all Type_Specific_Data;
-    type Vtable_Entry_Array is array (Positive range <>) of Vtable_Entry;
- 
-    type VTable is record
-       Prims_Ptr : Vtable_Entry_Array (Positive);
-       TSD       : Type_Specific_Data_Ptr;
-       --  Location of TSD is unknown so it got moved here to be out of the
-       --  way of Prims_Ptr. Find it later. ???
-    end record;
- 
-    --------------------------------------------------------
-    -- Unchecked Conversions for Tag, Vtable_Ptr, and TSD --
-    --------------------------------------------------------
- 
-    function To_Type_Specific_Data_Ptr is
-      new Unchecked_Conversion (Address, Type_Specific_Data_Ptr);
- 
-    function To_Address is
-      new Unchecked_Conversion (Type_Specific_Data_Ptr, Address);
- 
-    ---------------------------------------------
-    -- Unchecked Conversions for String Fields --
-    ---------------------------------------------
- 
-    function To_Cstring_Ptr is
-      new Unchecked_Conversion (Address, Cstring_Ptr);
- 
-    function To_Address is
-      new Unchecked_Conversion (Cstring_Ptr, Address);
- 
-    -----------------------
-    -- Local Subprograms --
-    -----------------------
- 
-    function Length (Str : Cstring_Ptr) return Natural;
-    --  Length of string represented by the given pointer (treating the
-    --  string as a C-style string, which is Nul terminated).
- 
-    --------------------
-    -- Displaced_This --
-    --------------------
- 
-    function Displaced_This
-     (Current_This : System.Address;
-      Vptr         : Vtable_Ptr;
-      Position     : Positive) return System.Address
-    is
-       pragma Warnings (Off, Vptr);
-       pragma Warnings (Off, Position);
-    begin
-       return Current_This;
-       --        + Storage_Offset (Vptr.Prims_Ptr (Position).Delta1);
-       --  why is above line commented out ???
-    end Displaced_This;
- 
-    -----------------------
-    -- CPP_CW_Membership --
-    -----------------------
- 
-    function CPP_CW_Membership
-      (Obj_Tag : Vtable_Ptr;
-       Typ_Tag : Vtable_Ptr) return Boolean
-    is
-       Pos : constant Integer := Obj_Tag.TSD.Idepth - Typ_Tag.TSD.Idepth;
-    begin
-       return Pos >= 0 and then Obj_Tag.TSD.Ancestor_Tags (Pos) = Typ_Tag;
-    end CPP_CW_Membership;
- 
-    ---------------------------
-    -- CPP_Get_Expanded_Name --
-    ---------------------------
- 
-    function CPP_Get_Expanded_Name (T : Vtable_Ptr) return Address is
-    begin
-       return To_Address (T.TSD.Expanded_Name);
-    end CPP_Get_Expanded_Name;
- 
-    --------------------------
-    -- CPP_Get_External_Tag --
-    --------------------------
- 
-    function CPP_Get_External_Tag (T : Vtable_Ptr) return Address is
-    begin
-       return To_Address (T.TSD.External_Tag);
-    end CPP_Get_External_Tag;
- 
-    -------------------------------
-    -- CPP_Get_Inheritance_Depth --
-    -------------------------------
- 
-    function CPP_Get_Inheritance_Depth (T : Vtable_Ptr) return Natural is
-    begin
-       return T.TSD.Idepth;
-    end CPP_Get_Inheritance_Depth;
- 
-    -----------------------
-    -- CPP_Get_RC_Offset --
-    -----------------------
- 
-    function CPP_Get_RC_Offset (T : Vtable_Ptr) return SSE.Storage_Offset is
-       pragma Warnings (Off, T);
-    begin
-       return 0;
-    end CPP_Get_RC_Offset;
- 
-    -----------------------------
-    -- CPP_Get_Prim_Op_Address --
-    -----------------------------
- 
-    function CPP_Get_Prim_Op_Address
-      (T        : Vtable_Ptr;
-       Position : Positive) return Address
-    is
-    begin
-       return T.Prims_Ptr (Position).Pfn;
-    end CPP_Get_Prim_Op_Address;
- 
-    -------------------------------
-    -- CPP_Get_Remotely_Callable --
-    -------------------------------
- 
-    function CPP_Get_Remotely_Callable (T : Vtable_Ptr) return Boolean is
-       pragma Warnings (Off, T);
-    begin
-       return True;
-    end CPP_Get_Remotely_Callable;
- 
-    -----------------
-    -- CPP_Get_TSD --
-    -----------------
- 
-    function CPP_Get_TSD  (T : Vtable_Ptr) return Address is
-    begin
-       return To_Address (T.TSD);
-    end CPP_Get_TSD;
- 
-    --------------------
-    -- CPP_Inherit_DT --
-    --------------------
- 
-    procedure CPP_Inherit_DT
-     (Old_T       : Vtable_Ptr;
-      New_T       : Vtable_Ptr;
-      Entry_Count : Natural)
-    is
-    begin
-       if Old_T /= null then
-          New_T.Prims_Ptr (1 .. Entry_Count) :=
-            Old_T.Prims_Ptr (1 .. Entry_Count);
-       end if;
-    end CPP_Inherit_DT;
- 
-    ---------------------
-    -- CPP_Inherit_TSD --
-    ---------------------
- 
-    procedure CPP_Inherit_TSD
-      (Old_TSD : Address;
-       New_Tag : Vtable_Ptr)
-    is
-       TSD : constant Type_Specific_Data_Ptr :=
-               To_Type_Specific_Data_Ptr (Old_TSD);
- 
-       New_TSD : Type_Specific_Data renames New_Tag.TSD.all;
- 
-    begin
-       if TSD /= null then
-          New_TSD.Idepth := TSD.Idepth + 1;
-          New_TSD.Ancestor_Tags (1 .. New_TSD.Idepth)
-            := TSD.Ancestor_Tags (0 .. TSD.Idepth);
-       else
-          New_TSD.Idepth := 0;
-       end if;
- 
-       New_TSD.Ancestor_Tags (0) := New_Tag;
-    end CPP_Inherit_TSD;
- 
-    ---------------------------
-    -- CPP_Set_Expanded_Name --
-    ---------------------------
- 
-    procedure CPP_Set_Expanded_Name (T : Vtable_Ptr; Value : Address) is
-    begin
-       T.TSD.Expanded_Name := To_Cstring_Ptr (Value);
-    end CPP_Set_Expanded_Name;
- 
-    --------------------------
-    -- CPP_Set_External_Tag --
-    --------------------------
- 
-    procedure CPP_Set_External_Tag (T : Vtable_Ptr; Value : Address) is
-    begin
-       T.TSD.External_Tag := To_Cstring_Ptr (Value);
-    end CPP_Set_External_Tag;
- 
-    -------------------------------
-    -- CPP_Set_Inheritance_Depth --
-    -------------------------------
- 
-    procedure CPP_Set_Inheritance_Depth
-      (T     : Vtable_Ptr;
-       Value : Natural)
-    is
-    begin
-       T.TSD.Idepth := Value;
-    end CPP_Set_Inheritance_Depth;
- 
-    -----------------------------
-    -- CPP_Set_Prim_Op_Address --
-    -----------------------------
- 
-    procedure CPP_Set_Prim_Op_Address
-      (T        : Vtable_Ptr;
-       Position : Positive;
-       Value    : Address)
-    is
-    begin
-       T.Prims_Ptr (Position).Pfn := Value;
-    end CPP_Set_Prim_Op_Address;
- 
-    -----------------------
-    -- CPP_Set_RC_Offset --
-    -----------------------
- 
-    procedure CPP_Set_RC_Offset (T : Vtable_Ptr; Value : SSE.Storage_Offset) is
-       pragma Warnings (Off, T);
-       pragma Warnings (Off, Value);
-    begin
-       null;
-    end CPP_Set_RC_Offset;
- 
-    -------------------------------
-    -- CPP_Set_Remotely_Callable --
-    -------------------------------
- 
-    procedure CPP_Set_Remotely_Callable (T : Vtable_Ptr; Value : Boolean) is
-       pragma Warnings (Off, T);
-       pragma Warnings (Off, Value);
-    begin
-       null;
-    end CPP_Set_Remotely_Callable;
- 
-    -----------------
-    -- CPP_Set_TSD --
-    -----------------
- 
-    procedure CPP_Set_TSD (T : Vtable_Ptr; Value : Address) is
-    begin
-       T.TSD := To_Type_Specific_Data_Ptr (Value);
-    end CPP_Set_TSD;
- 
-    -------------------
-    -- Expanded_Name --
-    -------------------
- 
-    function Expanded_Name (T : Vtable_Ptr) return String is
-       Result : constant Cstring_Ptr := T.TSD.Expanded_Name;
-    begin
-       return Result (1 .. Length (Result));
-    end Expanded_Name;
- 
-    ------------------
-    -- External_Tag --
-    ------------------
- 
-    function External_Tag (T : Vtable_Ptr) return String is
-       Result : constant Cstring_Ptr := T.TSD.External_Tag;
-    begin
-       return Result (1 .. Length (Result));
-    end External_Tag;
- 
-    ------------
-    -- Length --
-    ------------
- 
-    function Length (Str : Cstring_Ptr) return Natural is
-       Len : Integer := 1;
- 
-    begin
-       while Str (Len) /= ASCII.Nul loop
-          Len := Len + 1;
-       end loop;
- 
-       return Len - 1;
-    end Length;
- 
- end Interfaces.CPP;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/6vcstrea.adb gcc-4.0.0/gcc/ada/6vcstrea.adb
*** gcc-3.4.3/gcc/ada/6vcstrea.adb	Mon Jan  5 15:20:43 2004
--- gcc-4.0.0/gcc/ada/6vcstrea.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,198 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                 I N T E R F A C E S . C _ S T R E A M S                  --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --          Copyright (C) 1996-2004 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the Alpha/VMS version.
- 
- with Unchecked_Conversion;
- package body Interfaces.C_Streams is
- 
-    use type System.CRTL.size_t;
- 
-    --  Substantial rewriting is needed here. These functions are far too
-    --  long to be inlined. They should be rewritten to be small helper
-    --  functions that are inlined, and then call the real routines.???
- 
-    --  Alternatively, provide a separate spec for VMS, in which case we
-    --  could reduce the amount of junk bodies in the other cases by
-    --  interfacing directly in the spec.???
- 
-    ------------
-    -- fread --
-    ------------
- 
-    function fread
-      (buffer : voids;
-       size   : size_t;
-       count  : size_t;
-       stream : FILEs) return size_t
-    is
-       Get_Count : size_t := 0;
- 
-       type Buffer_Type is array (size_t range 1 .. count,
-                                  size_t range 1 .. size) of Character;
-       type Buffer_Access is access Buffer_Type;
-       function To_BA is new Unchecked_Conversion (voids, Buffer_Access);
- 
-       BA : constant Buffer_Access := To_BA (buffer);
-       Ch : int;
- 
-    begin
-       --  This Fread goes with the Fwrite below.
-       --  The C library fread sometimes can't read fputc generated files.
- 
-       for C in 1 .. count loop
-          for S in 1 .. size loop
-             Ch := fgetc (stream);
- 
-             if Ch = EOF then
-                return Get_Count;
-             end if;
- 
-             BA.all (C, S) := Character'Val (Ch);
-          end loop;
- 
-          Get_Count := Get_Count + 1;
-       end loop;
- 
-       return Get_Count;
-    end fread;
- 
-    ------------
-    -- fread --
-    ------------
- 
-    function fread
-      (buffer : voids;
-       index  : size_t;
-       size   : size_t;
-       count  : size_t;
-       stream : FILEs) return size_t
-    is
-       Get_Count : size_t := 0;
- 
-       type Buffer_Type is array (size_t range 1 .. count,
-                                  size_t range 1 .. size) of Character;
-       type Buffer_Access is access Buffer_Type;
-       function To_BA is new Unchecked_Conversion (voids, Buffer_Access);
- 
-       BA : constant Buffer_Access := To_BA (buffer);
-       Ch : int;
- 
-    begin
-       --  This Fread goes with the Fwrite below.
-       --  The C library fread sometimes can't read fputc generated files.
- 
-       for C in 1 + index .. count + index loop
-          for S in 1 .. size loop
-             Ch := fgetc (stream);
- 
-             if Ch = EOF then
-                return Get_Count;
-             end if;
- 
-             BA.all (C, S) := Character'Val (Ch);
-          end loop;
- 
-          Get_Count := Get_Count + 1;
-       end loop;
- 
-       return Get_Count;
-    end fread;
- 
-    ------------
-    -- fwrite --
-    ------------
- 
-    function fwrite
-      (buffer : voids;
-       size   : size_t;
-       count  : size_t;
-       stream : FILEs) return size_t
-    is
-       Put_Count : size_t := 0;
- 
-       type Buffer_Type is array (size_t range 1 .. count,
-                                  size_t range 1 .. size) of Character;
-       type Buffer_Access is access Buffer_Type;
-       function To_BA is new Unchecked_Conversion (voids, Buffer_Access);
- 
-       BA : constant Buffer_Access := To_BA (buffer);
- 
-    begin
-       --  Fwrite on VMS has the undesirable effect of always generating at
-       --  least one record of output per call, regardless of buffering.  To
-       --  get around this, we do multiple fputc calls instead.
- 
-       for C in 1 .. count loop
-          for S in 1 .. size loop
-             if fputc (Character'Pos (BA.all (C, S)), stream) = EOF then
-                return Put_Count;
-             end if;
-          end loop;
- 
-          Put_Count := Put_Count + 1;
-       end loop;
- 
-       return Put_Count;
-    end fwrite;
- 
-    -------------
-    -- setvbuf --
-    -------------
- 
-    function setvbuf
-      (stream : FILEs;
-       buffer : chars;
-       mode   : int;
-       size   : size_t) return int
-    is
-       use type System.Address;
- 
-    begin
-       --  In order for the above fwrite hack to work, we must always buffer
-       --  stdout and stderr. Is_regular_file on VMS cannot detect when
-       --  these are redirected to a file, so checking for that condition
-       --  doesnt help.
- 
-       if mode = IONBF
-         and then (stream = stdout or else stream = stderr)
-       then
-          return System.CRTL.setvbuf
-            (stream, buffer, IOLBF, System.CRTL.size_t (size));
-       else
-          return System.CRTL.setvbuf
-            (stream, buffer, mode, System.CRTL.size_t (size));
-       end if;
-    end setvbuf;
- 
- end Interfaces.C_Streams;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/6vinterf.ads gcc-4.0.0/gcc/ada/6vinterf.ads
*** gcc-3.4.3/gcc/ada/6vinterf.ads	Tue Oct 21 13:41:53 2003
--- gcc-4.0.0/gcc/ada/6vinterf.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,194 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                           I N T E R F A C E S                            --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --          Copyright (C) 2002-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the implementation dependent sections of this file.      --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the OpenVMS version of this package which adds Float_Representation
- --  pragmas to the IEEE floating point types to ensure they remain IEEE in
- --  the presence of a configuration pragma Float_Representation (Vax_Float).
- 
- --  It assumes integer sizes of 8, 16, 32 and 64 are available, and that IEEE
- --  floating-point formats are available.
- 
- package Interfaces is
- pragma Pure (Interfaces);
- 
-    type Integer_8  is range -2 **  7 .. 2 **  7 - 1;
-    for Integer_8'Size use  8;
- 
-    type Integer_16 is range -2 ** 15 .. 2 ** 15 - 1;
-    for Integer_16'Size use 16;
- 
-    type Integer_32 is range -2 ** 31 .. 2 ** 31 - 1;
-    for Integer_32'Size use 32;
- 
-    type Integer_64 is range -2 ** 63 .. 2 ** 63 - 1;
-    for Integer_64'Size use 64;
- 
-    type Unsigned_8  is mod 2 **  8;
-    for Unsigned_8'Size use  8;
- 
-    type Unsigned_16 is mod 2 ** 16;
-    for Unsigned_16'Size use 16;
- 
-    type Unsigned_32 is mod 2 ** 32;
-    for Unsigned_32'Size use 32;
- 
-    type Unsigned_64 is mod 2 ** 64;
-    for Unsigned_64'Size use 64;
- 
-    function Shift_Left
-      (Value  : Unsigned_8;
-       Amount : Natural)
-      return    Unsigned_8;
- 
-    function Shift_Right
-      (Value  : Unsigned_8;
-       Amount : Natural)
-       return   Unsigned_8;
- 
-    function Shift_Right_Arithmetic
-      (Value  : Unsigned_8;
-       Amount : Natural)
-       return   Unsigned_8;
- 
-    function Rotate_Left
-      (Value  : Unsigned_8;
-       Amount : Natural)
-       return   Unsigned_8;
- 
-    function Rotate_Right
-      (Value  : Unsigned_8;
-       Amount : Natural)
-       return   Unsigned_8;
- 
-    function Shift_Left
-      (Value  : Unsigned_16;
-       Amount : Natural)
-      return    Unsigned_16;
- 
-    function Shift_Right
-      (Value  : Unsigned_16;
-       Amount : Natural)
-       return   Unsigned_16;
- 
-    function Shift_Right_Arithmetic
-      (Value  : Unsigned_16;
-       Amount : Natural)
-       return   Unsigned_16;
- 
-    function Rotate_Left
-      (Value  : Unsigned_16;
-       Amount : Natural)
-       return   Unsigned_16;
- 
-    function Rotate_Right
-      (Value  : Unsigned_16;
-       Amount : Natural)
-       return   Unsigned_16;
- 
-    function Shift_Left
-      (Value  : Unsigned_32;
-       Amount : Natural)
-      return    Unsigned_32;
- 
-    function Shift_Right
-      (Value  : Unsigned_32;
-       Amount : Natural)
-       return   Unsigned_32;
- 
-    function Shift_Right_Arithmetic
-      (Value  : Unsigned_32;
-       Amount : Natural)
-       return   Unsigned_32;
- 
-    function Rotate_Left
-      (Value  : Unsigned_32;
-       Amount : Natural)
-       return   Unsigned_32;
- 
-    function Rotate_Right
-      (Value  : Unsigned_32;
-       Amount : Natural)
-       return   Unsigned_32;
- 
-    function Shift_Left
-      (Value  : Unsigned_64;
-       Amount : Natural)
-      return    Unsigned_64;
- 
-    function Shift_Right
-      (Value  : Unsigned_64;
-       Amount : Natural)
-       return   Unsigned_64;
- 
-    function Shift_Right_Arithmetic
-      (Value  : Unsigned_64;
-       Amount : Natural)
-       return   Unsigned_64;
- 
-    function Rotate_Left
-      (Value  : Unsigned_64;
-       Amount : Natural)
-       return   Unsigned_64;
- 
-    function Rotate_Right
-      (Value  : Unsigned_64;
-       Amount : Natural)
-       return   Unsigned_64;
- 
-    pragma Import (Intrinsic, Shift_Left);
-    pragma Import (Intrinsic, Shift_Right);
-    pragma Import (Intrinsic, Shift_Right_Arithmetic);
-    pragma Import (Intrinsic, Rotate_Left);
-    pragma Import (Intrinsic, Rotate_Right);
- 
-    --  Floating point types. We use the digits value to define the IEEE
-    --  forms, otherwise a configuration pragma specifying VAX float can
-    --  default the digits to an illegal value for IEEE.
-    --  Note: it is harmless, and explicitly permitted, to include additional
-    --  types in interfaces, so it is not wrong to have IEEE_Extended_Float
-    --  defined even if the extended format is not available.
- 
-    type IEEE_Float_32       is digits 6;
-    pragma Float_Representation (IEEE_Float, IEEE_Float_32);
- 
-    type IEEE_Float_64       is digits 15;
-    pragma Float_Representation (IEEE_Float, IEEE_Float_64);
- 
-    type IEEE_Extended_Float is digits 15;
-    pragma Float_Representation (IEEE_Float, IEEE_Extended_Float);
- 
- end Interfaces;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/7sinmaop.adb gcc-4.0.0/gcc/ada/7sinmaop.adb
*** gcc-3.4.3/gcc/ada/7sinmaop.adb	Mon Nov 24 14:27:57 2003
--- gcc-4.0.0/gcc/ada/7sinmaop.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,359 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
- --                                                                          --
- --                   SYSTEM.INTERRUPT_MANAGEMENT.OPERATIONS                 --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --             Copyright (C) 1991-1994, Florida State University            --
- --             Copyright (C) 1995-2003, Ada Core Technologies               --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a POSIX-like version of this package.
- --  Note: this file can only be used for POSIX compliant systems.
- 
- with Interfaces.C;
- --  used for int
- --           size_t
- --           unsigned
- 
- with System.OS_Interface;
- --  used for various type, constant, and operations
- 
- with System.Storage_Elements;
- --  used for To_Address
- --           Integer_Address
- 
- with Unchecked_Conversion;
- 
- package body System.Interrupt_Management.Operations is
- 
-    use Interfaces.C;
-    use System.OS_Interface;
- 
-    type Interrupt_Mask_Ptr is access all Interrupt_Mask;
- 
-    function "+" is new
-      Unchecked_Conversion (Interrupt_Mask_Ptr, sigset_t_ptr);
- 
-    ---------------------
-    -- Local Variables --
-    ---------------------
- 
-    Initial_Action : array (Signal) of aliased struct_sigaction;
- 
-    Default_Action : aliased struct_sigaction;
- 
-    Ignore_Action  : aliased struct_sigaction;
- 
-    ----------------------------
-    -- Thread_Block_Interrupt --
-    ----------------------------
- 
-    procedure Thread_Block_Interrupt
-      (Interrupt : Interrupt_ID)
-    is
-       Result : Interfaces.C.int;
-       Mask   : aliased sigset_t;
- 
-    begin
-       Result := sigemptyset (Mask'Access);
-       pragma Assert (Result = 0);
-       Result := sigaddset (Mask'Access, Signal (Interrupt));
-       pragma Assert (Result = 0);
-       Result := pthread_sigmask (SIG_BLOCK, Mask'Unchecked_Access, null);
-       pragma Assert (Result = 0);
-    end Thread_Block_Interrupt;
- 
-    ------------------------------
-    -- Thread_Unblock_Interrupt --
-    ------------------------------
- 
-    procedure Thread_Unblock_Interrupt
-      (Interrupt : Interrupt_ID)
-    is
-       Mask   : aliased sigset_t;
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := sigemptyset (Mask'Access);
-       pragma Assert (Result = 0);
-       Result := sigaddset (Mask'Access, Signal (Interrupt));
-       pragma Assert (Result = 0);
-       Result := pthread_sigmask (SIG_UNBLOCK, Mask'Unchecked_Access, null);
-       pragma Assert (Result = 0);
-    end Thread_Unblock_Interrupt;
- 
-    ------------------------
-    -- Set_Interrupt_Mask --
-    ------------------------
- 
-    procedure Set_Interrupt_Mask (Mask : access Interrupt_Mask) is
-       Result   : Interfaces.C.int;
- 
-    begin
-       Result := pthread_sigmask
-         (SIG_SETMASK, +Interrupt_Mask_Ptr (Mask), null);
-       pragma Assert (Result = 0);
-    end Set_Interrupt_Mask;
- 
-    procedure Set_Interrupt_Mask
-      (Mask  : access Interrupt_Mask;
-       OMask : access Interrupt_Mask)
-    is
-       Result  : Interfaces.C.int;
- 
-    begin
-       Result := pthread_sigmask
-         (SIG_SETMASK, +Interrupt_Mask_Ptr (Mask), +Interrupt_Mask_Ptr (OMask));
-       pragma Assert (Result = 0);
-    end Set_Interrupt_Mask;
- 
-    ------------------------
-    -- Get_Interrupt_Mask --
-    ------------------------
- 
-    procedure Get_Interrupt_Mask (Mask : access Interrupt_Mask) is
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := pthread_sigmask
-         (SIG_SETMASK, null, +Interrupt_Mask_Ptr (Mask));
-       pragma Assert (Result = 0);
-    end Get_Interrupt_Mask;
- 
-    --------------------
-    -- Interrupt_Wait --
-    --------------------
- 
-    function Interrupt_Wait
-      (Mask : access Interrupt_Mask)
-       return Interrupt_ID
-    is
-       Result : Interfaces.C.int;
-       Sig    : aliased Signal;
- 
-    begin
-       Result := sigwait (Mask, Sig'Access);
- 
-       if Result /= 0 then
-          return 0;
-       end if;
- 
-       return Interrupt_ID (Sig);
-    end Interrupt_Wait;
- 
-    ----------------------------
-    -- Install_Default_Action --
-    ----------------------------
- 
-    procedure Install_Default_Action (Interrupt : Interrupt_ID) is
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := sigaction
-         (Signal (Interrupt),
-          Initial_Action (Signal (Interrupt))'Access, null);
-       pragma Assert (Result = 0);
-    end Install_Default_Action;
- 
-    ---------------------------
-    -- Install_Ignore_Action --
-    ---------------------------
- 
-    procedure Install_Ignore_Action (Interrupt : Interrupt_ID) is
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := sigaction (Signal (Interrupt), Ignore_Action'Access, null);
-       pragma Assert (Result = 0);
-    end Install_Ignore_Action;
- 
-    -------------------------
-    -- Fill_Interrupt_Mask --
-    -------------------------
- 
-    procedure Fill_Interrupt_Mask (Mask : access Interrupt_Mask) is
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := sigfillset (Mask);
-       pragma Assert (Result = 0);
-    end Fill_Interrupt_Mask;
- 
-    --------------------------
-    -- Empty_Interrupt_Mask --
-    --------------------------
- 
-    procedure Empty_Interrupt_Mask (Mask : access Interrupt_Mask) is
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := sigemptyset (Mask);
-       pragma Assert (Result = 0);
-    end Empty_Interrupt_Mask;
- 
-    ---------------------------
-    -- Add_To_Interrupt_Mask --
-    ---------------------------
- 
-    procedure Add_To_Interrupt_Mask
-      (Mask      : access Interrupt_Mask;
-       Interrupt : Interrupt_ID)
-    is
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := sigaddset (Mask, Signal (Interrupt));
-       pragma Assert (Result = 0);
-    end Add_To_Interrupt_Mask;
- 
-    --------------------------------
-    -- Delete_From_Interrupt_Mask --
-    --------------------------------
- 
-    procedure Delete_From_Interrupt_Mask
-      (Mask      : access Interrupt_Mask;
-       Interrupt : Interrupt_ID)
-    is
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := sigdelset (Mask, Signal (Interrupt));
-       pragma Assert (Result = 0);
-    end Delete_From_Interrupt_Mask;
- 
-    ---------------
-    -- Is_Member --
-    ---------------
- 
-    function Is_Member
-      (Mask      : access Interrupt_Mask;
-       Interrupt : Interrupt_ID) return Boolean
-    is
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := sigismember (Mask, Signal (Interrupt));
-       pragma Assert (Result = 0 or else Result = 1);
-       return Result = 1;
-    end Is_Member;
- 
-    -------------------------
-    -- Copy_Interrupt_Mask --
-    -------------------------
- 
-    procedure Copy_Interrupt_Mask
-      (X : out Interrupt_Mask;
-       Y : Interrupt_Mask)
-    is
-    begin
-       X := Y;
-    end Copy_Interrupt_Mask;
- 
-    ----------------------------
-    -- Interrupt_Self_Process --
-    ----------------------------
- 
-    procedure Interrupt_Self_Process (Interrupt : Interrupt_ID) is
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := kill (getpid, Signal (Interrupt));
-       pragma Assert (Result = 0);
-    end Interrupt_Self_Process;
- 
- begin
- 
-    declare
-       mask    : aliased sigset_t;
-       allmask : aliased sigset_t;
-       Result  : Interfaces.C.int;
- 
-    begin
-       for Sig in 1 .. Signal'Last loop
-          Result := sigaction
-            (Sig, null, Initial_Action (Sig)'Unchecked_Access);
- 
-          --  ??? [assert 1]
-          --  we can't check Result here since sigaction will fail on
-          --  SIGKILL, SIGSTOP, and possibly other signals
-          --  pragma Assert (Result = 0);
- 
-       end loop;
- 
-       --  Setup the masks to be exported.
- 
-       Result := sigemptyset (mask'Access);
-       pragma Assert (Result = 0);
- 
-       Result := sigfillset (allmask'Access);
-       pragma Assert (Result = 0);
- 
-       Default_Action.sa_flags   := 0;
-       Default_Action.sa_mask    := mask;
-       Default_Action.sa_handler :=
-         Storage_Elements.To_Address
-           (Storage_Elements.Integer_Address (SIG_DFL));
- 
-       Ignore_Action.sa_flags   := 0;
-       Ignore_Action.sa_mask    := mask;
-       Ignore_Action.sa_handler :=
-         Storage_Elements.To_Address
-           (Storage_Elements.Integer_Address (SIG_IGN));
- 
-       for J in Interrupt_ID loop
- 
-          --  We need to check whether J is in Keep_Unmasked because
-          --  the index type of the Keep_Unmasked array is not always
-          --  Interrupt_ID; it may be a subtype of Interrupt_ID.
- 
-          if J in Keep_Unmasked'Range and then Keep_Unmasked (J) then
-             Result := sigaddset (mask'Access, Signal (J));
-             pragma Assert (Result = 0);
-             Result := sigdelset (allmask'Access, Signal (J));
-             pragma Assert (Result = 0);
-          end if;
-       end loop;
- 
-       --  The Keep_Unmasked signals should be unmasked for Environment task
- 
-       Result := pthread_sigmask (SIG_UNBLOCK, mask'Unchecked_Access, null);
-       pragma Assert (Result = 0);
- 
-       --  Get the signal mask of the Environment Task
- 
-       Result := pthread_sigmask (SIG_SETMASK, null, mask'Unchecked_Access);
-       pragma Assert (Result = 0);
- 
-       --  Setup the constants exported
- 
-       Environment_Mask := Interrupt_Mask (mask);
- 
-       All_Tasks_Mask := Interrupt_Mask (allmask);
-    end;
- 
- end System.Interrupt_Management.Operations;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/7sintman.adb gcc-4.0.0/gcc/ada/7sintman.adb
*** gcc-3.4.3/gcc/ada/7sintman.adb	Mon Dec  8 10:33:14 2003
--- gcc-4.0.0/gcc/ada/7sintman.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,285 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --           S Y S T E M . I N T E R R U P T _ M A N A G E M E N T          --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --          Copyright (C) 1992-2003, Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the POSIX threads version of this package
- 
- --  PLEASE DO NOT add any dependences on other packages. ??? why not ???
- --  This package is designed to work with or without tasking support.
- 
- --  See the other warnings in the package specification before making
- --  any modifications to this file.
- 
- --  Make a careful study of all signals available under the OS, to see which
- --  need to be reserved, kept always unmasked, or kept always unmasked. Be on
- --  the lookout for special signals that may be used by the thread library.
- 
- --  Since this is a multi target file, the signal <-> exception mapping
- --  is simple minded. If you need a more precise and target specific
- --  signal handling, create a new s-intman.adb that will fit your needs.
- 
- --  This file assumes that:
- 
- --    SIGFPE, SIGILL, SIGSEGV and SIGBUS exist. They are mapped as follows:
- --      SIGPFE  => Constraint_Error
- --      SIGILL  => Program_Error
- --      SIGSEGV => Storage_Error
- --      SIGBUS  => Storage_Error
- 
- --    SIGINT exists and will be kept unmasked unless the pragma
- --     Unreserve_All_Interrupts is specified anywhere in the application.
- 
- --    System.OS_Interface contains the following:
- --      SIGADAABORT: the signal that will be used to abort tasks.
- --      Unmasked: the OS specific set of signals that should be unmasked in
- --                all the threads. SIGADAABORT is unmasked by
- --                default
- --      Reserved: the OS specific set of signals that are reserved.
- 
- with Interfaces.C;
- --  used for int and other types
- 
- with System.OS_Interface;
- --  used for various Constants, Signal and types
- 
- package body System.Interrupt_Management is
- 
-    use Interfaces.C;
-    use System.OS_Interface;
- 
-    type Interrupt_List is array (Interrupt_ID range <>) of Interrupt_ID;
-    Exception_Interrupts : constant Interrupt_List :=
-      (SIGFPE, SIGILL, SIGSEGV, SIGBUS);
- 
-    Unreserve_All_Interrupts : Interfaces.C.int;
-    pragma Import
-      (C, Unreserve_All_Interrupts, "__gl_unreserve_all_interrupts");
- 
-    -----------------------
-    -- Local Subprograms --
-    -----------------------
- 
-    procedure Notify_Exception (signo : Signal);
-    --  This function identifies the Ada exception to be raised using
-    --  the information when the system received a synchronous signal.
-    --  Since this function is machine and OS dependent, different code
-    --  has to be provided for different target.
- 
-    ----------------------
-    -- Notify_Exception --
-    ----------------------
- 
-    Signal_Mask : aliased sigset_t;
-    --  The set of signals handled by Notify_Exception
- 
-    procedure Notify_Exception (signo : Signal) is
-       Result  : Interfaces.C.int;
- 
-    begin
-       --  With the __builtin_longjmp, the signal mask is not restored, so we
-       --  need to restore it explicitely.
- 
-       Result := pthread_sigmask (SIG_UNBLOCK, Signal_Mask'Access, null);
-       pragma Assert (Result = 0);
- 
-       --  Check that treatment of exception propagation here
-       --  is consistent with treatment of the abort signal in
-       --  System.Task_Primitives.Operations.
- 
-       case signo is
-          when SIGFPE =>
-             raise Constraint_Error;
-          when SIGILL =>
-             raise Program_Error;
-          when SIGSEGV =>
-             raise Storage_Error;
-          when SIGBUS =>
-             raise Storage_Error;
-          when others =>
-             null;
-       end case;
-    end Notify_Exception;
- 
-    ---------------------------
-    -- Initialize_Interrupts --
-    ---------------------------
- 
-    --  Nothing needs to be done on this platform.
- 
-    procedure Initialize_Interrupts is
-    begin
-       null;
-    end Initialize_Interrupts;
- 
- -------------------------
- -- Package Elaboration --
- -------------------------
- 
- begin
-    declare
-       act     : aliased struct_sigaction;
-       old_act : aliased struct_sigaction;
-       Result  : System.OS_Interface.int;
- 
-       function State (Int : Interrupt_ID) return Character;
-       pragma Import (C, State, "__gnat_get_interrupt_state");
-       --  Get interrupt state. Defined in a-init.c
-       --  The input argument is the interrupt number,
-       --  and the result is one of the following:
- 
-       User    : constant Character := 'u';
-       Runtime : constant Character := 'r';
-       Default : constant Character := 's';
-       --    'n'   this interrupt not set by any Interrupt_State pragma
-       --    'u'   Interrupt_State pragma set state to User
-       --    'r'   Interrupt_State pragma set state to Runtime
-       --    's'   Interrupt_State pragma set state to System (use "default"
-       --           system handler)
- 
-    begin
-       --  Need to call pthread_init very early because it is doing signal
-       --  initializations.
- 
-       pthread_init;
- 
-       Abort_Task_Interrupt := SIGADAABORT;
- 
-       act.sa_handler := Notify_Exception'Address;
- 
-       act.sa_flags := SA_SIGINFO;
- 
-       --  Setting SA_SIGINFO asks the kernel to pass more than just the signal
-       --  number argument to the handler when it is called. The set of extra
-       --  parameters typically includes a pointer to a structure describing
-       --  the interrupted context. Although the Notify_Exception handler does
-       --  not use this information, it is actually required for the GCC/ZCX
-       --  exception propagation scheme because on some targets (at least
-       --  alpha-tru64), the structure contents are not even filled when this
-       --  flag is not set.
- 
-       --  On some targets, we set sa_flags to SA_NODEFER so that during the
-       --  handler execution we do not change the Signal_Mask to be masked for
-       --  the Signal.
- 
-       --  This is a temporary fix to the problem that the Signal_Mask is
-       --  not restored after the exception (longjmp) from the handler.
-       --  The right fix should be made in sigsetjmp so that we save
-       --  the Signal_Set and restore it after a longjmp.
- 
-       --  Since SA_NODEFER is obsolete, instead we reset explicitely
-       --  the mask in the exception handler.
- 
-       Result := sigemptyset (Signal_Mask'Access);
-       pragma Assert (Result = 0);
- 
-       --  Add signals that map to Ada exceptions to the mask.
-       for J in Exception_Interrupts'Range loop
-          if State (Exception_Interrupts (J)) /= Default  then
-             Result :=
-             sigaddset (Signal_Mask'Access, Signal (Exception_Interrupts (J)));
-             pragma Assert (Result = 0);
-          end if;
-       end loop;
- 
-       act.sa_mask := Signal_Mask;
- 
-       pragma Assert (Keep_Unmasked = (Interrupt_ID'Range => False));
-       pragma Assert (Reserve = (Interrupt_ID'Range => False));
- 
-       --  Process state of exception signals
-       for J in Exception_Interrupts'Range loop
-          if State (Exception_Interrupts (J)) /= User then
-             Keep_Unmasked (Exception_Interrupts (J)) := True;
-             Reserve (Exception_Interrupts (J)) := True;
- 
-             if State (Exception_Interrupts (J)) /= Default then
-                Result :=
-                  sigaction
-                  (Signal (Exception_Interrupts (J)), act'Unchecked_Access,
-                   old_act'Unchecked_Access);
-                pragma Assert (Result = 0);
-             end if;
-          end if;
-       end loop;
- 
-       if State (Abort_Task_Interrupt) /= User then
-          Keep_Unmasked (Abort_Task_Interrupt) := True;
-          Reserve (Abort_Task_Interrupt) := True;
-       end if;
- 
-       --  Set SIGINT to unmasked state as long as it is not in "User"
-       --  state. Check for Unreserve_All_Interrupts last
- 
-       if State (SIGINT) /= User then
-          Keep_Unmasked (SIGINT) := True;
-          Reserve (SIGINT) := True;
-       end if;
- 
-       --  Check all signals for state that requires keeping them
-       --  unmasked and reserved
- 
-       for J in Interrupt_ID'Range loop
-          if State (J) = Default or else State (J) = Runtime then
-             Keep_Unmasked (J) := True;
-             Reserve (J) := True;
-          end if;
-       end loop;
- 
-       --  Add the set of signals that must always be unmasked for this target
- 
-       for J in Unmasked'Range loop
-          Keep_Unmasked (Interrupt_ID (Unmasked (J))) := True;
-          Reserve (Interrupt_ID (Unmasked (J))) := True;
-       end loop;
- 
-       --  Add target-specific reserved signals
- 
-       for J in Reserved'Range loop
-          Reserve (Interrupt_ID (Reserved (J))) := True;
-       end loop;
- 
-       --  Process pragma Unreserve_All_Interrupts. This overrides any
-       --  settings due to pragma Interrupt_State:
- 
-       if Unreserve_All_Interrupts /= 0 then
-          Keep_Unmasked (SIGINT) := False;
-          Reserve (SIGINT) := False;
-       end if;
- 
-       --  We do not have Signal 0 in reality. We just use this value
-       --  to identify non-existent signals (see s-intnam.ads). Therefore,
-       --  Signal 0 should not be used in all signal related operations hence
-       --  mark it as reserved.
- 
-       Reserve (0) := True;
-    end;
- end System.Interrupt_Management;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/7sosinte.adb gcc-4.0.0/gcc/ada/7sosinte.adb
*** gcc-3.4.3/gcc/ada/7sosinte.adb	Tue Oct 21 13:41:53 2003
--- gcc-4.0.0/gcc/ada/7sosinte.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,366 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                   S Y S T E M . O S _ I N T E R F A C E                  --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --             Copyright (C) 1991-1994, Florida State University            --
- --             Copyright (C) 1995-2003, Ada Core Technologies               --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a FSU Threads version of this package
- 
- pragma Polling (Off);
- --  Turn off polling, we do not want ATC polling to take place during
- --  tasking operations. It causes infinite loops and other problems.
- 
- with Interfaces.C;
- 
- package body System.OS_Interface is
- 
-    use Interfaces.C;
- 
-    -----------------
-    -- To_Duration --
-    -----------------
- 
-    function To_Duration (TS : timespec) return Duration is
-    begin
-       return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9;
-    end To_Duration;
- 
-    function To_Duration (TV : struct_timeval) return Duration is
-    begin
-       return Duration (TV.tv_sec) + Duration (TV.tv_usec) / 10#1#E6;
-    end To_Duration;
- 
-    -----------------
-    -- To_Timespec --
-    -----------------
- 
-    function To_Timespec (D : Duration) return timespec is
-       S : time_t;
-       F : Duration;
- 
-    begin
-       S := time_t (Long_Long_Integer (D));
-       F := D - Duration (S);
- 
-       --  If F has negative value due to a round-up, adjust for positive F
-       --  value.
- 
-       if F < 0.0 then
-          S := S - 1;
-          F := F + 1.0;
-       end if;
- 
-       return timespec'(tv_sec  => S,
-                        tv_nsec => long (Long_Long_Integer (F * 10#1#E9)));
-    end To_Timespec;
- 
-    ----------------
-    -- To_Timeval --
-    ----------------
- 
-    function To_Timeval (D : Duration) return struct_timeval is
-       S : long;
-       F : Duration;
- 
-    begin
-       S := long (Long_Long_Integer (D));
-       F := D - Duration (S);
- 
-       --  If F has negative value due to a round-up, adjust for positive F
-       --  value.
- 
-       if F < 0.0 then
-          S := S - 1;
-          F := F + 1.0;
-       end if;
- 
-       return
-         struct_timeval'
-           (tv_sec  => S,
-            tv_usec => long (Long_Long_Integer (F * 10#1#E6)));
-    end To_Timeval;
- 
-    -------------
-    -- sigwait --
-    -------------
- 
-    --  FSU_THREADS has a nonstandard sigwait
- 
-    function sigwait
-      (set  : access sigset_t;
-       sig  : access Signal) return int
-    is
-       Result : int;
- 
-       function sigwait_base (set : access sigset_t) return int;
-       pragma Import (C, sigwait_base, "sigwait");
- 
-    begin
-       Result := sigwait_base (set);
- 
-       if Result = -1 then
-          sig.all := 0;
-          return errno;
-       end if;
- 
-       sig.all := Signal (Result);
-       return 0;
-    end sigwait;
- 
-    ------------------------
-    -- pthread_mutex_lock --
-    ------------------------
- 
-    --  FSU_THREADS has nonstandard pthread_mutex_lock and unlock.
-    --  It sets errno but the standard Posix requires it to be returned.
- 
-    function pthread_mutex_lock (mutex : access pthread_mutex_t) return int is
-       function pthread_mutex_lock_base
-         (mutex : access pthread_mutex_t) return int;
-       pragma Import (C, pthread_mutex_lock_base, "pthread_mutex_lock");
- 
-       Result : int;
- 
-    begin
-       Result := pthread_mutex_lock_base (mutex);
- 
-       if Result /= 0 then
-          return errno;
-       end if;
- 
-       return 0;
-    end pthread_mutex_lock;
- 
-    --------------------------
-    -- pthread_mutex_unlock --
-    --------------------------
- 
-    function pthread_mutex_unlock
-      (mutex : access pthread_mutex_t) return int
-    is
-       function pthread_mutex_unlock_base
-         (mutex : access pthread_mutex_t) return int;
-       pragma Import (C, pthread_mutex_unlock_base, "pthread_mutex_unlock");
- 
-       Result : int;
- 
-    begin
-       Result := pthread_mutex_unlock_base (mutex);
- 
-       if Result /= 0 then
-          return errno;
-       end if;
- 
-       return 0;
-    end pthread_mutex_unlock;
- 
-    -----------------------
-    -- pthread_cond_wait --
-    -----------------------
- 
-    --  FSU_THREADS has a nonstandard pthread_cond_wait.
-    --  The FSU_THREADS version returns EINTR when interrupted.
- 
-    function pthread_cond_wait
-      (cond  : access pthread_cond_t;
-       mutex : access pthread_mutex_t) return int
-    is
-       function pthread_cond_wait_base
-         (cond  : access pthread_cond_t;
-          mutex : access pthread_mutex_t) return int;
-       pragma Import (C, pthread_cond_wait_base, "pthread_cond_wait");
- 
-       Result : int;
- 
-    begin
-       Result := pthread_cond_wait_base (cond, mutex);
- 
-       if Result = EINTR then
-          return 0;
-       else
-          return Result;
-       end if;
-    end pthread_cond_wait;
- 
-    ----------------------------
-    -- pthread_cond_timedwait --
-    ----------------------------
- 
-    --  FSU_THREADS has a nonstandard pthread_cond_timedwait. The
-    --  FSU_THREADS version returns -1 and set errno to EAGAIN for timeout.
- 
-    function pthread_cond_timedwait
-      (cond    : access pthread_cond_t;
-       mutex   : access pthread_mutex_t;
-       abstime : access timespec) return int
-    is
-       function pthread_cond_timedwait_base
-         (cond    : access pthread_cond_t;
-          mutex   : access pthread_mutex_t;
-          abstime : access timespec) return int;
-       pragma Import (C, pthread_cond_timedwait_base, "pthread_cond_timedwait");
- 
-       Result : int;
- 
-    begin
-       Result := pthread_cond_timedwait_base (cond, mutex, abstime);
- 
-       if Result = -1 then
-          if errno = EAGAIN then
-             return ETIMEDOUT;
-          else
-             return EINVAL;
-          end if;
-       end if;
- 
-       return 0;
-    end pthread_cond_timedwait;
- 
-    ---------------------------
-    -- pthread_setschedparam --
-    ---------------------------
- 
-    --  FSU_THREADS does not have pthread_setschedparam
- 
-    --  This routine returns a non-negative value upon failure
-    --  but the error code can not be set conforming the POSIX standard.
- 
-    function pthread_setschedparam
-      (thread : pthread_t;
-       policy : int;
-       param  : access struct_sched_param) return int
-    is
-       function pthread_setschedattr
-         (thread : pthread_t;
-          attr   : pthread_attr_t) return int;
-       pragma Import (C, pthread_setschedattr, "pthread_setschedattr");
- 
-       attr   : aliased pthread_attr_t;
-       Result : int;
- 
-    begin
-       Result := pthread_attr_init (attr'Access);
- 
-       if Result /= 0 then
-          return Result;
-       end if;
- 
-       attr.sched := policy;
- 
-       --  Short-cut around pthread_attr_setprio
- 
-       attr.prio := param.sched_priority;
- 
-       Result := pthread_setschedattr (thread, attr);
- 
-       if Result /= 0 then
-          return Result;
-       end if;
- 
-       Result := pthread_attr_destroy (attr'Access);
- 
-       if Result /= 0 then
-          return Result;
-       else
-          return 0;
-       end if;
-    end pthread_setschedparam;
- 
-    -------------------------
-    -- pthread_getspecific --
-    -------------------------
- 
-    --  FSU_THREADS has a nonstandard pthread_getspecific
- 
-    function pthread_getspecific (key : pthread_key_t) return System.Address is
-       function pthread_getspecific_base
-         (key   : pthread_key_t;
-          value : access System.Address) return int;
-       pragma Import (C, pthread_getspecific_base, "pthread_getspecific");
- 
-       Tmp    : aliased System.Address;
-       Result : int;
- 
-    begin
-       Result := pthread_getspecific_base (key, Tmp'Access);
- 
-       if Result /= 0 then
-          return System.Null_Address;
-       end if;
- 
-       return Tmp;
-    end pthread_getspecific;
- 
-    ---------------------------------
-    -- pthread_attr_setdetachstate --
-    ---------------------------------
- 
-    function pthread_attr_setdetachstate
-      (attr        : access pthread_attr_t;
-       detachstate : int) return int
-    is
-       function pthread_attr_setdetachstate_base
-         (attr        : access pthread_attr_t;
-          detachstate : access int) return int;
-       pragma Import
-         (C, pthread_attr_setdetachstate_base, "pthread_attr_setdetachstate");
- 
-       Tmp : aliased int := detachstate;
- 
-    begin
-       return pthread_attr_setdetachstate_base (attr, Tmp'Access);
-    end pthread_attr_setdetachstate;
- 
-    -----------------
-    -- sched_yield --
-    -----------------
- 
-    --  FSU_THREADS does not have sched_yield;
- 
-    function sched_yield return int is
-       procedure sched_yield_base (arg : System.Address);
-       pragma Import (C, sched_yield_base, "pthread_yield");
- 
-    begin
-       sched_yield_base (System.Null_Address);
-       return 0;
-    end sched_yield;
- 
-    ----------------
-    -- Stack_Base --
-    ----------------
- 
-    function Get_Stack_Base (thread : pthread_t) return Address is
-    begin
-       return thread.stack_base;
-    end Get_Stack_Base;
- 
- end System.OS_Interface;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/7sosprim.adb gcc-4.0.0/gcc/ada/7sosprim.adb
*** gcc-3.4.3/gcc/ada/7sosprim.adb	Mon Nov 10 15:54:35 2003
--- gcc-4.0.0/gcc/ada/7sosprim.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,159 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                  S Y S T E M . O S _ P R I M I T I V E S                 --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --          Copyright (C) 1998-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This version is for POSIX-like operating systems
- 
- package body System.OS_Primitives is
- 
-    --  ??? These definitions are duplicated from System.OS_Interface
-    --  because we don't want to depend on any package. Consider removing
-    --  these declarations in System.OS_Interface and move these ones in
-    --  the spec.
- 
-    type struct_timezone is record
-       tz_minuteswest  : Integer;
-       tz_dsttime   : Integer;
-    end record;
-    pragma Convention (C, struct_timezone);
-    type struct_timezone_ptr is access all struct_timezone;
- 
-    type time_t is new Long_Integer;
- 
-    type struct_timeval is record
-       tv_sec       : time_t;
-       tv_usec      : Long_Integer;
-    end record;
-    pragma Convention (C, struct_timeval);
- 
-    function gettimeofday
-      (tv : access struct_timeval;
-       tz : struct_timezone_ptr) return Integer;
-    pragma Import (C, gettimeofday, "gettimeofday");
- 
-    type timespec is record
-       tv_sec  : time_t;
-       tv_nsec : Long_Integer;
-    end record;
-    pragma Convention (C, timespec);
- 
-    function nanosleep (rqtp, rmtp : access timespec) return Integer;
-    pragma Import (C, nanosleep, "nanosleep");
- 
-    -----------
-    -- Clock --
-    -----------
- 
-    function Clock return Duration is
-       TV     : aliased struct_timeval;
- 
-       Result : Integer;
-       pragma Unreferenced (Result);
- 
-    begin
-       Result := gettimeofday (TV'Access, null);
-       return Duration (TV.tv_sec) + Duration (TV.tv_usec) / 10#1#E6;
-    end Clock;
- 
-    ---------------------
-    -- Monotonic_Clock --
-    ---------------------
- 
-    function Monotonic_Clock return Duration renames Clock;
- 
-    -----------------
-    -- To_Timespec --
-    -----------------
- 
-    function To_Timespec (D : Duration) return timespec;
- 
-    function To_Timespec (D : Duration) return timespec is
-       S : time_t;
-       F : Duration;
- 
-    begin
-       S := time_t (Long_Long_Integer (D));
-       F := D - Duration (S);
- 
-       --  If F has negative value due to a round-up, adjust for positive F
-       --  value.
- 
-       if F < 0.0 then
-          S := S - 1;
-          F := F + 1.0;
-       end if;
- 
-       return
-         timespec'(tv_sec  => S,
-                   tv_nsec => Long_Integer (Long_Long_Integer (F * 10#1#E9)));
-    end To_Timespec;
- 
-    -----------------
-    -- Timed_Delay --
-    -----------------
- 
-    procedure Timed_Delay
-      (Time : Duration;
-       Mode : Integer)
-    is
-       Request : aliased timespec;
-       Remaind : aliased timespec;
-       Rel_Time : Duration;
-       Abs_Time : Duration;
-       Check_Time : Duration := Clock;
- 
-       Result : Integer;
-       pragma Unreferenced (Result);
- 
-    begin
-       if Mode = Relative then
-          Rel_Time := Time;
-          Abs_Time := Time + Check_Time;
-       else
-          Rel_Time := Time - Check_Time;
-          Abs_Time := Time;
-       end if;
- 
-       if Rel_Time > 0.0 then
-          loop
-             Request := To_Timespec (Rel_Time);
-             Result := nanosleep (Request'Access, Remaind'Access);
-             Check_Time := Clock;
- 
-             exit when Abs_Time <= Check_Time;
- 
-             Rel_Time := Abs_Time - Check_Time;
-          end loop;
-       end if;
-    end Timed_Delay;
- 
- end System.OS_Primitives;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/7staprop.adb gcc-4.0.0/gcc/ada/7staprop.adb
*** gcc-3.4.3/gcc/ada/7staprop.adb	Mon Jan  5 15:20:43 2004
--- gcc-4.0.0/gcc/ada/7staprop.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,1214 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --     S Y S T E M . T A S K _ P R I M I T I V E S . O P E R A T I O N S    --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --         Copyright (C) 1992-2003, Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a POSIX-like version of this package
- 
- --  This package contains all the GNULL primitives that interface directly
- --  with the underlying OS.
- 
- --  Note: this file can only be used for POSIX compliant systems that
- --  implement SCHED_FIFO and Ceiling Locking correctly.
- 
- --  For configurations where SCHED_FIFO and priority ceiling are not a
- --  requirement, this file can also be used (e.g AiX threads)
- 
- pragma Polling (Off);
- --  Turn off polling, we do not want ATC polling to take place during
- --  tasking operations. It causes infinite loops and other problems.
- 
- with System.Tasking.Debug;
- --  used for Known_Tasks
- 
- with System.Task_Info;
- --  used for Task_Info_Type
- 
- with Interfaces.C;
- --  used for int
- --           size_t
- 
- with System.Interrupt_Management;
- --  used for Keep_Unmasked
- --           Abort_Task_Interrupt
- --           Interrupt_ID
- 
- with System.Interrupt_Management.Operations;
- --  used for Set_Interrupt_Mask
- --           All_Tasks_Mask
- pragma Elaborate_All (System.Interrupt_Management.Operations);
- 
- with System.Parameters;
- --  used for Size_Type
- 
- with System.Tasking;
- --  used for Ada_Task_Control_Block
- --           Task_ID
- 
- with System.Soft_Links;
- --  used for Defer/Undefer_Abort
- 
- --  Note that we do not use System.Tasking.Initialization directly since
- --  this is a higher level package that we shouldn't depend on. For example
- --  when using the restricted run time, it is replaced by
- --  System.Tasking.Restricted.Initialization
- 
- with System.OS_Primitives;
- --  used for Delay_Modes
- 
- with Unchecked_Conversion;
- with Unchecked_Deallocation;
- 
- package body System.Task_Primitives.Operations is
- 
-    use System.Tasking.Debug;
-    use System.Tasking;
-    use Interfaces.C;
-    use System.OS_Interface;
-    use System.Parameters;
-    use System.OS_Primitives;
- 
-    package SSL renames System.Soft_Links;
- 
-    ----------------
-    -- Local Data --
-    ----------------
- 
-    --  The followings are logically constants, but need to be initialized
-    --  at run time.
- 
-    Single_RTS_Lock : aliased RTS_Lock;
-    --  This is a lock to allow only one thread of control in the RTS at
-    --  a time; it is used to execute in mutual exclusion from all other tasks.
-    --  Used mainly in Single_Lock mode, but also to protect All_Tasks_List
- 
-    ATCB_Key : aliased pthread_key_t;
-    --  Key used to find the Ada Task_ID associated with a thread
- 
-    Environment_Task_ID : Task_ID;
-    --  A variable to hold Task_ID for the environment task.
- 
-    Locking_Policy : Character;
-    pragma Import (C, Locking_Policy, "__gl_locking_policy");
-    --  Value of the pragma Locking_Policy:
-    --    'C' for Ceiling_Locking
-    --    'I' for Inherit_Locking
-    --    ' ' for none.
- 
-    Unblocked_Signal_Mask : aliased sigset_t;
-    --  The set of signals that should unblocked in all tasks
- 
-    --  The followings are internal configuration constants needed.
- 
-    Next_Serial_Number : Task_Serial_Number := 100;
-    --  We start at 100, to reserve some special values for
-    --  using in error checking.
- 
-    Time_Slice_Val : Integer;
-    pragma Import (C, Time_Slice_Val, "__gl_time_slice_val");
- 
-    Dispatching_Policy : Character;
-    pragma Import (C, Dispatching_Policy, "__gl_task_dispatching_policy");
- 
-    FIFO_Within_Priorities : constant Boolean := Dispatching_Policy = 'F';
-    --  Indicates whether FIFO_Within_Priorities is set.
- 
-    Foreign_Task_Elaborated : aliased Boolean := True;
-    --  Used to identified fake tasks (i.e., non-Ada Threads).
- 
-    --------------------
-    -- Local Packages --
-    --------------------
- 
-    package Specific is
- 
-       procedure Initialize (Environment_Task : Task_ID);
-       pragma Inline (Initialize);
-       --  Initialize various data needed by this package.
- 
-       function Is_Valid_Task return Boolean;
-       pragma Inline (Is_Valid_Task);
-       --  Does executing thread have a TCB?
- 
-       procedure Set (Self_Id : Task_ID);
-       pragma Inline (Set);
-       --  Set the self id for the current task.
- 
-       function Self return Task_ID;
-       pragma Inline (Self);
-       --  Return a pointer to the Ada Task Control Block of the calling task.
- 
-    end Specific;
- 
-    package body Specific is separate;
-    --  The body of this package is target specific.
- 
-    ---------------------------------
-    -- Support for foreign threads --
-    ---------------------------------
- 
-    function Register_Foreign_Thread (Thread : Thread_Id) return Task_ID;
-    --  Allocate and Initialize a new ATCB for the current Thread.
- 
-    function Register_Foreign_Thread
-      (Thread : Thread_Id) return Task_ID is separate;
- 
-    -----------------------
-    -- Local Subprograms --
-    -----------------------
- 
-    procedure Abort_Handler (Sig : Signal);
-    --  Signal handler used to implement asynchronous abort.
-    --  See also comment before body, below.
- 
-    function To_Address is new Unchecked_Conversion (Task_ID, System.Address);
- 
-    -------------------
-    -- Abort_Handler --
-    -------------------
- 
-    --  Target-dependent binding of inter-thread Abort signal to
-    --  the raising of the Abort_Signal exception.
- 
-    --  The technical issues and alternatives here are essentially
-    --  the same as for raising exceptions in response to other
-    --  signals (e.g. Storage_Error). See code and comments in
-    --  the package body System.Interrupt_Management.
- 
-    --  Some implementations may not allow an exception to be propagated
-    --  out of a handler, and others might leave the signal or
-    --  interrupt that invoked this handler masked after the exceptional
-    --  return to the application code.
- 
-    --  GNAT exceptions are originally implemented using setjmp()/longjmp().
-    --  On most UNIX systems, this will allow transfer out of a signal handler,
-    --  which is usually the only mechanism available for implementing
-    --  asynchronous handlers of this kind. However, some
-    --  systems do not restore the signal mask on longjmp(), leaving the
-    --  abort signal masked.
- 
-    procedure Abort_Handler (Sig : Signal) is
-       pragma Warnings (Off, Sig);
- 
-       T       : Task_ID := Self;
-       Result  : Interfaces.C.int;
-       Old_Set : aliased sigset_t;
- 
-    begin
-       --  It is not safe to raise an exception when using ZCX and the GCC
-       --  exception handling mechanism.
- 
-       if ZCX_By_Default and then GCC_ZCX_Support then
-          return;
-       end if;
- 
-       if T.Deferral_Level = 0
-         and then T.Pending_ATC_Level < T.ATC_Nesting_Level and then
-         not T.Aborting
-       then
-          T.Aborting := True;
- 
-          --  Make sure signals used for RTS internal purpose are unmasked
- 
-          Result := pthread_sigmask (SIG_UNBLOCK,
-            Unblocked_Signal_Mask'Unchecked_Access, Old_Set'Unchecked_Access);
-          pragma Assert (Result = 0);
- 
-          raise Standard'Abort_Signal;
-       end if;
-    end Abort_Handler;
- 
-    -----------------
-    -- Stack_Guard --
-    -----------------
- 
-    procedure Stack_Guard (T : ST.Task_ID; On : Boolean) is
-       Stack_Base : constant Address := Get_Stack_Base (T.Common.LL.Thread);
-       Guard_Page_Address : Address;
- 
-       Res : Interfaces.C.int;
- 
-    begin
-       if Stack_Base_Available then
- 
-          --  Compute the guard page address
- 
-          Guard_Page_Address :=
-            Stack_Base - (Stack_Base mod Get_Page_Size) + Get_Page_Size;
- 
-          if On then
-             Res := mprotect (Guard_Page_Address, Get_Page_Size, PROT_ON);
-          else
-             Res := mprotect (Guard_Page_Address, Get_Page_Size, PROT_OFF);
-          end if;
- 
-          pragma Assert (Res = 0);
-       end if;
-    end Stack_Guard;
- 
-    --------------------
-    -- Get_Thread_Id  --
-    --------------------
- 
-    function Get_Thread_Id (T : ST.Task_ID) return OSI.Thread_Id is
-    begin
-       return T.Common.LL.Thread;
-    end Get_Thread_Id;
- 
-    ----------
-    -- Self --
-    ----------
- 
-    function Self return Task_ID renames Specific.Self;
- 
-    ---------------------
-    -- Initialize_Lock --
-    ---------------------
- 
-    --  Note: mutexes and cond_variables needed per-task basis are
-    --        initialized in Intialize_TCB and the Storage_Error is
-    --        handled. Other mutexes (such as RTS_Lock, Memory_Lock...)
-    --        used in RTS is initialized before any status change of RTS.
-    --        Therefore rasing Storage_Error in the following routines
-    --        should be able to be handled safely.
- 
-    procedure Initialize_Lock
-      (Prio : System.Any_Priority;
-       L    : access Lock)
-    is
-       Attributes : aliased pthread_mutexattr_t;
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := pthread_mutexattr_init (Attributes'Access);
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result = ENOMEM then
-          raise Storage_Error;
-       end if;
- 
-       if Locking_Policy = 'C' then
-          Result := pthread_mutexattr_setprotocol
-            (Attributes'Access, PTHREAD_PRIO_PROTECT);
-          pragma Assert (Result = 0);
- 
-          Result := pthread_mutexattr_setprioceiling
-             (Attributes'Access, Interfaces.C.int (Prio));
-          pragma Assert (Result = 0);
- 
-       elsif Locking_Policy = 'I' then
-          Result := pthread_mutexattr_setprotocol
-            (Attributes'Access, PTHREAD_PRIO_INHERIT);
-          pragma Assert (Result = 0);
-       end if;
- 
-       Result := pthread_mutex_init (L, Attributes'Access);
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result = ENOMEM then
-          raise Storage_Error;
-       end if;
- 
-       Result := pthread_mutexattr_destroy (Attributes'Access);
-       pragma Assert (Result = 0);
-    end Initialize_Lock;
- 
-    procedure Initialize_Lock (L : access RTS_Lock; Level : Lock_Level) is
-       pragma Warnings (Off, Level);
- 
-       Attributes : aliased pthread_mutexattr_t;
-       Result     : Interfaces.C.int;
- 
-    begin
-       Result := pthread_mutexattr_init (Attributes'Access);
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result = ENOMEM then
-          raise Storage_Error;
-       end if;
- 
-       if Locking_Policy = 'C' then
-          Result := pthread_mutexattr_setprotocol
-            (Attributes'Access, PTHREAD_PRIO_PROTECT);
-          pragma Assert (Result = 0);
- 
-          Result := pthread_mutexattr_setprioceiling
-             (Attributes'Access, Interfaces.C.int (System.Any_Priority'Last));
-          pragma Assert (Result = 0);
- 
-       elsif Locking_Policy = 'I' then
-          Result := pthread_mutexattr_setprotocol
-            (Attributes'Access, PTHREAD_PRIO_INHERIT);
-          pragma Assert (Result = 0);
-       end if;
- 
-       Result := pthread_mutex_init (L, Attributes'Access);
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result = ENOMEM then
-          Result := pthread_mutexattr_destroy (Attributes'Access);
-          raise Storage_Error;
-       end if;
- 
-       Result := pthread_mutexattr_destroy (Attributes'Access);
-       pragma Assert (Result = 0);
-    end Initialize_Lock;
- 
-    -------------------
-    -- Finalize_Lock --
-    -------------------
- 
-    procedure Finalize_Lock (L : access Lock) is
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := pthread_mutex_destroy (L);
-       pragma Assert (Result = 0);
-    end Finalize_Lock;
- 
-    procedure Finalize_Lock (L : access RTS_Lock) is
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := pthread_mutex_destroy (L);
-       pragma Assert (Result = 0);
-    end Finalize_Lock;
- 
-    ----------------
-    -- Write_Lock --
-    ----------------
- 
-    procedure Write_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := pthread_mutex_lock (L);
- 
-       --  Assume that the cause of EINVAL is a priority ceiling violation
- 
-       Ceiling_Violation := (Result = EINVAL);
-       pragma Assert (Result = 0 or else Result = EINVAL);
-    end Write_Lock;
- 
-    procedure Write_Lock
-      (L           : access RTS_Lock;
-       Global_Lock : Boolean := False)
-    is
-       Result : Interfaces.C.int;
- 
-    begin
-       if not Single_Lock or else Global_Lock then
-          Result := pthread_mutex_lock (L);
-          pragma Assert (Result = 0);
-       end if;
-    end Write_Lock;
- 
-    procedure Write_Lock (T : Task_ID) is
-       Result : Interfaces.C.int;
- 
-    begin
-       if not Single_Lock then
-          Result := pthread_mutex_lock (T.Common.LL.L'Access);
-          pragma Assert (Result = 0);
-       end if;
-    end Write_Lock;
- 
-    ---------------
-    -- Read_Lock --
-    ---------------
- 
-    procedure Read_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
-    begin
-       Write_Lock (L, Ceiling_Violation);
-    end Read_Lock;
- 
-    ------------
-    -- Unlock --
-    ------------
- 
-    procedure Unlock (L : access Lock) is
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := pthread_mutex_unlock (L);
-       pragma Assert (Result = 0);
-    end Unlock;
- 
-    procedure Unlock (L : access RTS_Lock; Global_Lock : Boolean := False) is
-       Result : Interfaces.C.int;
- 
-    begin
-       if not Single_Lock or else Global_Lock then
-          Result := pthread_mutex_unlock (L);
-          pragma Assert (Result = 0);
-       end if;
-    end Unlock;
- 
-    procedure Unlock (T : Task_ID) is
-       Result : Interfaces.C.int;
- 
-    begin
-       if not Single_Lock then
-          Result := pthread_mutex_unlock (T.Common.LL.L'Access);
-          pragma Assert (Result = 0);
-       end if;
-    end Unlock;
- 
-    -----------
-    -- Sleep --
-    -----------
- 
-    procedure Sleep
-      (Self_ID : Task_ID;
-       Reason   : System.Tasking.Task_States)
-    is
-       pragma Warnings (Off, Reason);
- 
-       Result : Interfaces.C.int;
- 
-    begin
-       if Single_Lock then
-          Result := pthread_cond_wait
-            (Self_ID.Common.LL.CV'Access, Single_RTS_Lock'Access);
-       else
-          Result := pthread_cond_wait
-            (Self_ID.Common.LL.CV'Access, Self_ID.Common.LL.L'Access);
-       end if;
- 
-       --  EINTR is not considered a failure.
- 
-       pragma Assert (Result = 0 or else Result = EINTR);
-    end Sleep;
- 
-    -----------------
-    -- Timed_Sleep --
-    -----------------
- 
-    --  This is for use within the run-time system, so abort is
-    --  assumed to be already deferred, and the caller should be
-    --  holding its own ATCB lock.
- 
-    procedure Timed_Sleep
-      (Self_ID  : Task_ID;
-       Time     : Duration;
-       Mode     : ST.Delay_Modes;
-       Reason   : Task_States;
-       Timedout : out Boolean;
-       Yielded  : out Boolean)
-    is
-       pragma Warnings (Off, Reason);
- 
-       Check_Time : constant Duration := Monotonic_Clock;
-       Rel_Time   : Duration;
-       Abs_Time   : Duration;
-       Request    : aliased timespec;
-       Result     : Interfaces.C.int;
- 
-    begin
-       Timedout := True;
-       Yielded := False;
- 
-       if Mode = Relative then
-          Abs_Time := Duration'Min (Time, Max_Sensible_Delay) + Check_Time;
- 
-          if Relative_Timed_Wait then
-             Rel_Time := Duration'Min (Max_Sensible_Delay, Time);
-          end if;
- 
-       else
-          Abs_Time := Duration'Min (Check_Time + Max_Sensible_Delay, Time);
- 
-          if Relative_Timed_Wait then
-             Rel_Time := Duration'Min (Max_Sensible_Delay, Time - Check_Time);
-          end if;
-       end if;
- 
-       if Abs_Time > Check_Time then
-          if Relative_Timed_Wait then
-             Request := To_Timespec (Rel_Time);
-          else
-             Request := To_Timespec (Abs_Time);
-          end if;
- 
-          loop
-             exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level
-               or else Self_ID.Pending_Priority_Change;
- 
-             if Single_Lock then
-                Result := pthread_cond_timedwait
-                  (Self_ID.Common.LL.CV'Access, Single_RTS_Lock'Access,
-                   Request'Access);
- 
-             else
-                Result := pthread_cond_timedwait
-                  (Self_ID.Common.LL.CV'Access, Self_ID.Common.LL.L'Access,
-                   Request'Access);
-             end if;
- 
-             exit when Abs_Time <= Monotonic_Clock;
- 
-             if Result = 0 or Result = EINTR then
- 
-                --  Somebody may have called Wakeup for us
- 
-                Timedout := False;
-                exit;
-             end if;
- 
-             pragma Assert (Result = ETIMEDOUT);
-          end loop;
-       end if;
-    end Timed_Sleep;
- 
-    -----------------
-    -- Timed_Delay --
-    -----------------
- 
-    --  This is for use in implementing delay statements, so
-    --  we assume the caller is abort-deferred but is holding
-    --  no locks.
- 
-    procedure Timed_Delay
-      (Self_ID  : Task_ID;
-       Time     : Duration;
-       Mode     : ST.Delay_Modes)
-    is
-       Check_Time : constant Duration := Monotonic_Clock;
-       Abs_Time   : Duration;
-       Rel_Time   : Duration;
-       Request    : aliased timespec;
-       Result     : Interfaces.C.int;
- 
-    begin
-       --  Only the little window between deferring abort and
-       --  locking Self_ID is the reason we need to
-       --  check for pending abort and priority change below! :(
- 
-       SSL.Abort_Defer.all;
- 
-       if Single_Lock then
-          Lock_RTS;
-       end if;
- 
-       Write_Lock (Self_ID);
- 
-       if Mode = Relative then
-          Abs_Time := Duration'Min (Time, Max_Sensible_Delay) + Check_Time;
- 
-          if Relative_Timed_Wait then
-             Rel_Time := Duration'Min (Max_Sensible_Delay, Time);
-          end if;
- 
-       else
-          Abs_Time := Duration'Min (Check_Time + Max_Sensible_Delay, Time);
- 
-          if Relative_Timed_Wait then
-             Rel_Time := Duration'Min (Max_Sensible_Delay, Time - Check_Time);
-          end if;
-       end if;
- 
-       if Abs_Time > Check_Time then
-          if Relative_Timed_Wait then
-             Request := To_Timespec (Rel_Time);
-          else
-             Request := To_Timespec (Abs_Time);
-          end if;
- 
-          Self_ID.Common.State := Delay_Sleep;
- 
-          loop
-             if Self_ID.Pending_Priority_Change then
-                Self_ID.Pending_Priority_Change := False;
-                Self_ID.Common.Base_Priority := Self_ID.New_Base_Priority;
-                Set_Priority (Self_ID, Self_ID.Common.Base_Priority);
-             end if;
- 
-             exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level;
- 
-             if Single_Lock then
-                Result := pthread_cond_timedwait (Self_ID.Common.LL.CV'Access,
-                  Single_RTS_Lock'Access, Request'Access);
-             else
-                Result := pthread_cond_timedwait (Self_ID.Common.LL.CV'Access,
-                  Self_ID.Common.LL.L'Access, Request'Access);
-             end if;
- 
-             exit when Abs_Time <= Monotonic_Clock;
- 
-             pragma Assert (Result = 0
-                              or else Result = ETIMEDOUT
-                              or else Result = EINTR);
-          end loop;
- 
-          Self_ID.Common.State := Runnable;
-       end if;
- 
-       Unlock (Self_ID);
- 
-       if Single_Lock then
-          Unlock_RTS;
-       end if;
- 
-       Result := sched_yield;
-       SSL.Abort_Undefer.all;
-    end Timed_Delay;
- 
-    ---------------------
-    -- Monotonic_Clock --
-    ---------------------
- 
-    function Monotonic_Clock return Duration is
-       TS     : aliased timespec;
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := clock_gettime
-         (clock_id => CLOCK_REALTIME, tp => TS'Unchecked_Access);
-       pragma Assert (Result = 0);
-       return To_Duration (TS);
-    end Monotonic_Clock;
- 
-    -------------------
-    -- RT_Resolution --
-    -------------------
- 
-    function RT_Resolution return Duration is
-    begin
-       return 10#1.0#E-6;
-    end RT_Resolution;
- 
-    ------------
-    -- Wakeup --
-    ------------
- 
-    procedure Wakeup (T : Task_ID; Reason : System.Tasking.Task_States) is
-       pragma Warnings (Off, Reason);
- 
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := pthread_cond_signal (T.Common.LL.CV'Access);
-       pragma Assert (Result = 0);
-    end Wakeup;
- 
-    -----------
-    -- Yield --
-    -----------
- 
-    procedure Yield (Do_Yield : Boolean := True) is
-       Result : Interfaces.C.int;
-       pragma Unreferenced (Result);
-    begin
-       if Do_Yield then
-          Result := sched_yield;
-       end if;
-    end Yield;
- 
-    ------------------
-    -- Set_Priority --
-    ------------------
- 
-    procedure Set_Priority
-      (T                   : Task_ID;
-       Prio                : System.Any_Priority;
-       Loss_Of_Inheritance : Boolean := False)
-    is
-       pragma Warnings (Off, Loss_Of_Inheritance);
- 
-       Result : Interfaces.C.int;
-       Param  : aliased struct_sched_param;
- 
-    begin
-       T.Common.Current_Priority := Prio;
-       Param.sched_priority := Interfaces.C.int (Prio);
- 
-       if Time_Slice_Supported and then Time_Slice_Val > 0 then
-          Result := pthread_setschedparam
-            (T.Common.LL.Thread, SCHED_RR, Param'Access);
- 
-       elsif FIFO_Within_Priorities or else Time_Slice_Val = 0 then
-          Result := pthread_setschedparam
-            (T.Common.LL.Thread, SCHED_FIFO, Param'Access);
- 
-       else
-          Result := pthread_setschedparam
-            (T.Common.LL.Thread, SCHED_OTHER, Param'Access);
-       end if;
- 
-       pragma Assert (Result = 0);
-    end Set_Priority;
- 
-    ------------------
-    -- Get_Priority --
-    ------------------
- 
-    function Get_Priority (T : Task_ID) return System.Any_Priority is
-    begin
-       return T.Common.Current_Priority;
-    end Get_Priority;
- 
-    ----------------
-    -- Enter_Task --
-    ----------------
- 
-    procedure Enter_Task (Self_ID : Task_ID) is
-    begin
-       Self_ID.Common.LL.Thread := pthread_self;
-       Self_ID.Common.LL.LWP := lwp_self;
- 
-       Specific.Set (Self_ID);
- 
-       Lock_RTS;
- 
-       for J in Known_Tasks'Range loop
-          if Known_Tasks (J) = null then
-             Known_Tasks (J) := Self_ID;
-             Self_ID.Known_Tasks_Index := J;
-             exit;
-          end if;
-       end loop;
- 
-       Unlock_RTS;
-    end Enter_Task;
- 
-    --------------
-    -- New_ATCB --
-    --------------
- 
-    function New_ATCB (Entry_Num : Task_Entry_Index) return Task_ID is
-    begin
-       return new Ada_Task_Control_Block (Entry_Num);
-    end New_ATCB;
- 
-    -------------------
-    -- Is_Valid_Task --
-    -------------------
- 
-    function Is_Valid_Task return Boolean renames Specific.Is_Valid_Task;
- 
-    -----------------------------
-    -- Register_Foreign_Thread --
-    -----------------------------
- 
-    function Register_Foreign_Thread return Task_ID is
-    begin
-       if Is_Valid_Task then
-          return Self;
-       else
-          return Register_Foreign_Thread (pthread_self);
-       end if;
-    end Register_Foreign_Thread;
- 
-    --------------------
-    -- Initialize_TCB --
-    --------------------
- 
-    procedure Initialize_TCB (Self_ID : Task_ID; Succeeded : out Boolean) is
-       Mutex_Attr : aliased pthread_mutexattr_t;
-       Result     : Interfaces.C.int;
-       Cond_Attr  : aliased pthread_condattr_t;
- 
-    begin
-       --  Give the task a unique serial number.
- 
-       Self_ID.Serial_Number := Next_Serial_Number;
-       Next_Serial_Number := Next_Serial_Number + 1;
-       pragma Assert (Next_Serial_Number /= 0);
- 
-       if not Single_Lock then
-          Result := pthread_mutexattr_init (Mutex_Attr'Access);
-          pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-          if Result = 0 then
-             if Locking_Policy = 'C' then
-                Result := pthread_mutexattr_setprotocol
-                  (Mutex_Attr'Access, PTHREAD_PRIO_PROTECT);
-                pragma Assert (Result = 0);
- 
-                Result := pthread_mutexattr_setprioceiling
-                   (Mutex_Attr'Access,
-                    Interfaces.C.int (System.Any_Priority'Last));
-                pragma Assert (Result = 0);
- 
-             elsif Locking_Policy = 'I' then
-                Result := pthread_mutexattr_setprotocol
-                  (Mutex_Attr'Access, PTHREAD_PRIO_INHERIT);
-                pragma Assert (Result = 0);
-             end if;
- 
-             Result := pthread_mutex_init (Self_ID.Common.LL.L'Access,
-               Mutex_Attr'Access);
-             pragma Assert (Result = 0 or else Result = ENOMEM);
-          end if;
- 
-          if Result /= 0 then
-             Succeeded := False;
-             return;
-          end if;
- 
-          Result := pthread_mutexattr_destroy (Mutex_Attr'Access);
-          pragma Assert (Result = 0);
-       end if;
- 
-       Result := pthread_condattr_init (Cond_Attr'Access);
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result = 0 then
-          Result := pthread_cond_init (Self_ID.Common.LL.CV'Access,
-            Cond_Attr'Access);
-          pragma Assert (Result = 0 or else Result = ENOMEM);
-       end if;
- 
-       if Result = 0 then
-          Succeeded := True;
-       else
-          if not Single_Lock then
-             Result := pthread_mutex_destroy (Self_ID.Common.LL.L'Access);
-             pragma Assert (Result = 0);
-          end if;
- 
-          Succeeded := False;
-       end if;
- 
-       Result := pthread_condattr_destroy (Cond_Attr'Access);
-       pragma Assert (Result = 0);
-    end Initialize_TCB;
- 
-    -----------------
-    -- Create_Task --
-    -----------------
- 
-    procedure Create_Task
-      (T          : Task_ID;
-       Wrapper    : System.Address;
-       Stack_Size : System.Parameters.Size_Type;
-       Priority   : System.Any_Priority;
-       Succeeded  : out Boolean)
-    is
-       Attributes          : aliased pthread_attr_t;
-       Adjusted_Stack_Size : Interfaces.C.size_t;
-       Result              : Interfaces.C.int;
- 
-       function Thread_Body_Access is new
-         Unchecked_Conversion (System.Address, Thread_Body);
- 
-       use System.Task_Info;
- 
-    begin
-       if Stack_Size = Unspecified_Size then
-          Adjusted_Stack_Size := Interfaces.C.size_t (Default_Stack_Size);
- 
-       elsif Stack_Size < Minimum_Stack_Size then
-          Adjusted_Stack_Size := Interfaces.C.size_t (Minimum_Stack_Size);
- 
-       else
-          Adjusted_Stack_Size := Interfaces.C.size_t (Stack_Size);
-       end if;
- 
-       if Stack_Base_Available then
-          --  If Stack Checking is supported then allocate 2 additional pages:
-          --
-          --  In the worst case, stack is allocated at something like
-          --  N * Get_Page_Size - epsilon, we need to add the size for 2 pages
-          --  to be sure the effective stack size is greater than what
-          --  has been asked.
- 
-          Adjusted_Stack_Size := Adjusted_Stack_Size + 2 * Get_Page_Size;
-       end if;
- 
-       Result := pthread_attr_init (Attributes'Access);
-       pragma Assert (Result = 0 or else Result = ENOMEM);
- 
-       if Result /= 0 then
-          Succeeded := False;
-          return;
-       end if;
- 
-       Result := pthread_attr_setdetachstate
-         (Attributes'Access, PTHREAD_CREATE_DETACHED);
-       pragma Assert (Result = 0);
- 
-       Result := pthread_attr_setstacksize
-         (Attributes'Access, Adjusted_Stack_Size);
-       pragma Assert (Result = 0);
- 
-       if T.Common.Task_Info /= Default_Scope then
- 
-          --  We are assuming that Scope_Type has the same values than the
-          --  corresponding C macros
- 
-          Result := pthread_attr_setscope
-            (Attributes'Access, Task_Info_Type'Pos (T.Common.Task_Info));
-          pragma Assert (Result = 0);
-       end if;
- 
-       --  Since the initial signal mask of a thread is inherited from the
-       --  creator, and the Environment task has all its signals masked, we
-       --  do not need to manipulate caller's signal mask at this point.
-       --  All tasks in RTS will have All_Tasks_Mask initially.
- 
-       Result := pthread_create
-         (T.Common.LL.Thread'Access,
-          Attributes'Access,
-          Thread_Body_Access (Wrapper),
-          To_Address (T));
-       pragma Assert (Result = 0 or else Result = EAGAIN);
- 
-       Succeeded := Result = 0;
- 
-       Result := pthread_attr_destroy (Attributes'Access);
-       pragma Assert (Result = 0);
- 
-       Set_Priority (T, Priority);
-    end Create_Task;
- 
-    ------------------
-    -- Finalize_TCB --
-    ------------------
- 
-    procedure Finalize_TCB (T : Task_ID) is
-       Result : Interfaces.C.int;
-       Tmp    : Task_ID := T;
-       Is_Self : constant Boolean := T = Self;
- 
-       procedure Free is new
-         Unchecked_Deallocation (Ada_Task_Control_Block, Task_ID);
- 
-    begin
-       if not Single_Lock then
-          Result := pthread_mutex_destroy (T.Common.LL.L'Access);
-          pragma Assert (Result = 0);
-       end if;
- 
-       Result := pthread_cond_destroy (T.Common.LL.CV'Access);
-       pragma Assert (Result = 0);
- 
-       if T.Known_Tasks_Index /= -1 then
-          Known_Tasks (T.Known_Tasks_Index) := null;
-       end if;
- 
-       Free (Tmp);
- 
-       if Is_Self then
-          Result := pthread_setspecific (ATCB_Key, System.Null_Address);
-          pragma Assert (Result = 0);
-       end if;
- 
-    end Finalize_TCB;
- 
-    ---------------
-    -- Exit_Task --
-    ---------------
- 
-    procedure Exit_Task is
-    begin
-       --  Mark this task as unknown, so that if Self is called, it won't
-       --  return a dangling pointer.
- 
-       Specific.Set (null);
-    end Exit_Task;
- 
-    ----------------
-    -- Abort_Task --
-    ----------------
- 
-    procedure Abort_Task (T : Task_ID) is
-       Result : Interfaces.C.int;
- 
-    begin
-       Result := pthread_kill (T.Common.LL.Thread,
-         Signal (System.Interrupt_Management.Abort_Task_Interrupt));
-       pragma Assert (Result = 0);
-    end Abort_Task;
- 
-    ----------------
-    -- Check_Exit --
-    ----------------
- 
-    --  Dummy version
- 
-    function Check_Exit (Self_ID : ST.Task_ID) return Boolean is
-       pragma Warnings (Off, Self_ID);
- 
-    begin
-       return True;
-    end Check_Exit;
- 
-    --------------------
-    -- Check_No_Locks --
-    --------------------
- 
-    function Check_No_Locks (Self_ID : ST.Task_ID) return Boolean is
-       pragma Warnings (Off, Self_ID);
- 
-    begin
-       return True;
-    end Check_No_Locks;
- 
-    ----------------------
-    -- Environment_Task --
-    ----------------------
- 
-    function Environment_Task return Task_ID is
-    begin
-       return Environment_Task_ID;
-    end Environment_Task;
- 
-    --------------
-    -- Lock_RTS --
-    --------------
- 
-    procedure Lock_RTS is
-    begin
-       Write_Lock (Single_RTS_Lock'Access, Global_Lock => True);
-    end Lock_RTS;
- 
-    ----------------
-    -- Unlock_RTS --
-    ----------------
- 
-    procedure Unlock_RTS is
-    begin
-       Unlock (Single_RTS_Lock'Access, Global_Lock => True);
-    end Unlock_RTS;
- 
-    ------------------
-    -- Suspend_Task --
-    ------------------
- 
-    function Suspend_Task
-      (T           : ST.Task_ID;
-       Thread_Self : Thread_Id)
-       return        Boolean
-    is
-       pragma Warnings (Off, T);
-       pragma Warnings (Off, Thread_Self);
- 
-    begin
-       return False;
-    end Suspend_Task;
- 
-    -----------------
-    -- Resume_Task --
-    -----------------
- 
-    function Resume_Task
-      (T           : ST.Task_ID;
-       Thread_Self : Thread_Id)
-       return        Boolean
-    is
-       pragma Warnings (Off, T);
-       pragma Warnings (Off, Thread_Self);
- 
-    begin
-       return False;
-    end Resume_Task;
- 
-    ----------------
-    -- Initialize --
-    ----------------
- 
-    procedure Initialize (Environment_Task : Task_ID) is
-       act     : aliased struct_sigaction;
-       old_act : aliased struct_sigaction;
-       Tmp_Set : aliased sigset_t;
-       Result  : Interfaces.C.int;
- 
-       function State (Int : System.Interrupt_Management.Interrupt_ID)
-                      return Character;
-       pragma Import (C, State, "__gnat_get_interrupt_state");
-       --  Get interrupt state.  Defined in a-init.c
-       --  The input argument is the interrupt number,
-       --  and the result is one of the following:
- 
-       Default : constant Character := 's';
-       --    'n'   this interrupt not set by any Interrupt_State pragma
-       --    'u'   Interrupt_State pragma set state to User
-       --    'r'   Interrupt_State pragma set state to Runtime
-       --    's'   Interrupt_State pragma set state to System (use "default"
-       --           system handler)
- 
-    begin
-       Environment_Task_ID := Environment_Task;
- 
-       --  Initialize the lock used to synchronize chain of all ATCBs.
- 
-       Initialize_Lock (Single_RTS_Lock'Access, RTS_Lock_Level);
- 
-       Specific.Initialize (Environment_Task);
- 
-       Enter_Task (Environment_Task);
- 
-       --  Install the abort-signal handler
- 
-       if State (System.Interrupt_Management.Abort_Task_Interrupt)
-         /= Default
-       then
-          act.sa_flags := 0;
-          act.sa_handler := Abort_Handler'Address;
- 
-          Result := sigemptyset (Tmp_Set'Access);
-          pragma Assert (Result = 0);
-          act.sa_mask := Tmp_Set;
- 
-          Result :=
-            sigaction
-            (Signal (System.Interrupt_Management.Abort_Task_Interrupt),
-             act'Unchecked_Access,
-             old_act'Unchecked_Access);
-          pragma Assert (Result = 0);
-       end if;
-    end Initialize;
- 
- begin
-    declare
-       Result : Interfaces.C.int;
-    begin
-       --  Mask Environment task for all signals. The original mask of the
-       --  Environment task will be recovered by Interrupt_Server task
-       --  during the elaboration of s-interr.adb.
- 
-       System.Interrupt_Management.Operations.Set_Interrupt_Mask
-         (System.Interrupt_Management.Operations.All_Tasks_Mask'Access);
- 
-       --  Prepare the set of signals that should unblocked in all tasks
- 
-       Result := sigemptyset (Unblocked_Signal_Mask'Access);
-       pragma Assert (Result = 0);
- 
-       for J in Interrupt_Management.Interrupt_ID loop
-          if System.Interrupt_Management.Keep_Unmasked (J) then
-             Result := sigaddset (Unblocked_Signal_Mask'Access, Signal (J));
-             pragma Assert (Result = 0);
-          end if;
-       end loop;
-    end;
- end System.Task_Primitives.Operations;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/7staspri.ads gcc-4.0.0/gcc/ada/7staspri.ads
*** gcc-3.4.3/gcc/ada/7staspri.ads	Tue Oct 21 13:41:53 2003
--- gcc-4.0.0/gcc/ada/7staspri.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,92 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
- --                                                                          --
- --                 S Y S T E M . T A S K _ P R I M I T I V E S              --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --             Copyright (C) 1991-1994, Florida State University            --
- --             Copyright (C) 1995-2003, Ada Core Technologies               --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a POSIX-like version of this package.
- --  Note: this file can only be used for POSIX compliant systems.
- 
- pragma Polling (Off);
- --  Turn off polling, we do not want ATC polling to take place during
- --  tasking operations. It causes infinite loops and other problems.
- 
- with System.OS_Interface;
- --  used for pthread_mutex_t
- --           pthread_cond_t
- --           pthread_t
- 
- package System.Task_Primitives is
- 
-    type Lock is limited private;
-    --  Should be used for implementation of protected objects.
- 
-    type RTS_Lock is limited private;
-    --  Should be used inside the runtime system.
-    --  The difference between Lock and the RTS_Lock is that the later
-    --  one serves only as a semaphore so that do not check for
-    --  ceiling violations.
- 
-    type Task_Body_Access is access procedure;
-    --  Pointer to the task body's entry point (or possibly a wrapper
-    --  declared local to the GNARL).
- 
-    type Private_Data is limited private;
-    --  Any information that the GNULLI needs maintained on a per-task
-    --  basis.  A component of this type is guaranteed to be included
-    --  in the Ada_Task_Control_Block.
- 
- private
- 
-    type Lock is new System.OS_Interface.pthread_mutex_t;
-    type RTS_Lock is new System.OS_Interface.pthread_mutex_t;
- 
-    type Private_Data is record
-       Thread : aliased System.OS_Interface.pthread_t;
-       pragma Atomic (Thread);
-       --  Thread field may be updated by two different threads of control.
-       --  (See, Enter_Task and Create_Task in s-taprop.adb).
-       --  They put the same value (thr_self value). We do not want to
-       --  use lock on those operations and the only thing we have to
-       --  make sure is that they are updated in atomic fashion.
- 
-       LWP : aliased System.Address;
-       --  The purpose of this field is to provide a better tasking support on
-       --  gdb. The order of the two first fields (Thread and LWP) is important.
-       --  On targets where lwp is not relevant, this is equivalent to Thread.
- 
-       CV : aliased System.OS_Interface.pthread_cond_t;
- 
-       L  : aliased RTS_Lock;
-       --  Protection for all components is lock L
-    end record;
- 
- end System.Task_Primitives;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/7stfsetr.adb gcc-4.0.0/gcc/ada/7stfsetr.adb
*** gcc-3.4.3/gcc/ada/7stfsetr.adb	Tue Oct 21 13:41:53 2003
--- gcc-4.0.0/gcc/ada/7stfsetr.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,313 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                     S Y S T E M . T R A C E S . S E N D                  --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --          Copyright (C) 2001-2002 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This version is for all targets, provided that System.IO.Put_Line is
- --  functional. It prints debug information to Standard Output
- 
- with System.IO;   use System.IO;
- with GNAT.Regpat; use GNAT.Regpat;
- 
- ----------------
- -- Send_Trace --
- ----------------
- 
- --  Prints debug information both in a human readable form
- --  and in the form they are sent from upper layers.
- 
- separate (System.Traces.Format)
- procedure Send_Trace (Id : Trace_T; Info : String) is
- 
-    type Param_Type is
-      (Name_Param,
-       Caller_Param,
-       Entry_Param,
-       Timeout_Param,
-       Acceptor_Param,
-       Parent_Param,
-       Number_Param);
-    --  Type of parameter found in the message
- 
-    Info_Trace : String_Trace := Format_Trace (Info);
- 
-    function Get_Param
-      (Input    : String_Trace;
-       Param    : Param_Type;
-       How_Many : Integer)
-       return     String;
-    --  Extract a parameter from the given input string
- 
-    ---------------
-    -- Get_Param --
-    ---------------
- 
-    function Get_Param
-      (Input    : String_Trace;
-       Param    : Param_Type;
-       How_Many : Integer)
-       return     String
-    is
-       pragma Unreferenced (How_Many);
- 
-       Matches : Match_Array (1 .. 2);
-    begin
-       --  We need comments here ???
- 
-       case Param is
-          when Name_Param     =>
-             Match ("/N:([\w]+)", Input, Matches);
- 
-          when Caller_Param   =>
-             Match ("/C:([\w]+)", Input, Matches);
- 
-          when Entry_Param =>
-             Match ("/E:([\s]*) +([0-9 ,]+)", Input, Matches);
- 
-          when Timeout_Param =>
-             Match ("/T:([\s]*) +([0-9]+.[0-9]+)", Input, Matches);
- 
-          when Acceptor_Param =>
-             Match ("/A:([\w]+)", Input, Matches);
- 
-          when Parent_Param   =>
-             Match ("/P:([\w]+)", Input, Matches);
- 
-          when Number_Param =>
-             Match ("/#:([\s]*) +([0-9]+)", Input, Matches);
-       end case;
- 
-       if Matches (1).First < Input'First then
-          return "";
-       end if;
- 
-       case Param is
-          when Timeout_Param | Entry_Param | Number_Param =>
-             return Input (Matches (2).First .. Matches (2).Last);
- 
-          when others =>
-             return Input (Matches (1).First .. Matches (1).Last);
-       end case;
-    end Get_Param;
- 
- --  Start of processing for Send_Trace
- 
- begin
-    New_Line;
-    Put_Line ("- Trace Debug Info ----------------");
-    Put ("Caught event Id : ");
- 
-    case Id is
-       when M_Accept_Complete => Put ("M_Accept_Complete");
-          New_Line;
-          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
-                    & " completes accept on entry "
-                    & Get_Param (Info_Trace, Entry_Param, 1) & " with "
-                    & Get_Param (Info_Trace, Caller_Param, 1));
- 
-       when M_Select_Else     => Put ("M_Select_Else");
-          New_Line;
-          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
-                    & " selects else statement");
- 
-       when M_RDV_Complete    => Put ("M_RDV_Complete");
-          New_Line;
-          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
-                    & " completes rendezvous with "
-                    & Get_Param (Info_Trace, Caller_Param, 1));
- 
-       when M_Call_Complete   => Put ("M_Call_Complete");
-          New_Line;
-          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
-                    & " completes call");
- 
-       when M_Delay           => Put ("M_Delay");
-          New_Line;
-          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
-                    & " completes delay "
-                    & Get_Param (Info_Trace, Timeout_Param, 1));
- 
-       when E_Missed          => Put ("E_Missed");
-          New_Line;
-          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
-                    & " got an invalid acceptor "
-                    & Get_Param (Info_Trace, Acceptor_Param, 1));
- 
-       when E_Timeout         => Put ("E_Timeout");
-          New_Line;
-          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
-                    & " ends select due to timeout ");
- 
-       when E_Kill            => Put ("E_Kill");
-          New_Line;
-          Put_Line ("Asynchronous Transfer of Control on task "
-                    & Get_Param (Info_Trace, Name_Param, 1));
- 
-       when W_Delay           => Put ("W_Delay");
-          New_Line;
-          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
-                    & " sleeping "
-                    & Get_Param (Info_Trace, Timeout_Param, 1)
-                    & " seconds");
- 
-       when WU_Delay           => Put ("WU_Delay");
-          New_Line;
-          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
-                    & " sleeping until "
-                    & Get_Param (Info_Trace, Timeout_Param, 1));
- 
-       when W_Call            => Put ("W_Call");
-          New_Line;
-          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
-                    & " calling entry "
-                    & Get_Param (Info_Trace, Entry_Param, 1)
-                    & " of "  & Get_Param (Info_Trace, Acceptor_Param, 1));
- 
-       when W_Accept          => Put ("W_Accept");
-          New_Line;
-          Put ("Task " & Get_Param (Info_Trace, Name_Param, 1)
-               & " waiting on "
-               & Get_Param (Info_Trace, Number_Param, 1)
-               & " accept(s)"
-               & ", " & Get_Param (Info_Trace, Entry_Param, 1));
-          New_Line;
- 
-       when W_Select          => Put ("W_Select");
-          New_Line;
-          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
-                    & " waiting on "
-                    & Get_Param (Info_Trace, Number_Param, 1)
-                    & " select(s)"
-                       & ", " & Get_Param (Info_Trace, Entry_Param, 1));
-          New_Line;
- 
-       when W_Completion      => Put ("W_Completion");
-          New_Line;
-             Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
-                       & " waiting for completion ");
- 
-       when WT_Select         => Put ("WT_Select");
-          New_Line;
-          Put ("Task " & Get_Param (Info_Trace, Name_Param, 1)
-               & " waiting " & Get_Param (Info_Trace, Timeout_Param, 1)
-               & " seconds  on "
-               & Get_Param (Info_Trace, Number_Param, 1)
-               & " select(s)");
- 
-          if Get_Param (Info_Trace, Number_Param, 1) /= "" then
-             Put (", " & Get_Param (Info_Trace, Entry_Param, 1));
-          end if;
- 
-          New_Line;
- 
-       when WT_Call           => Put ("WT_Call");
-          New_Line;
-          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
-                    & " calling entry "
-                    & Get_Param (Info_Trace, Entry_Param, 1)
-                    & " of "  & Get_Param (Info_Trace, Acceptor_Param, 1)
-                    & " with timeout "
-                    & Get_Param (Info_Trace, Timeout_Param, 1));
- 
-       when WT_Completion     => Put ("WT_Completion");
-          New_Line;
-          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
-                    & " waiting "
-                    & Get_Param (Info_Trace, Timeout_Param, 1)
-                    & " for call completion");
- 
-       when PO_Call           => Put ("PO_Call");
-          New_Line;
-          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
-                    & " calling protected entry  "
-                    & Get_Param (Info_Trace, Entry_Param, 1));
- 
-       when POT_Call          => Put ("POT_Call");
-          New_Line;
-          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
-                    & " calling protected entry  "
-                    & Get_Param (Info_Trace, Entry_Param, 1)
-                    & " with timeout "
-                    & Get_Param (Info_Trace, Timeout_Param, 1));
- 
-       when PO_Run            => Put ("PO_Run");
-          New_Line;
-          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
-                       & " running entry  "
-                    & Get_Param (Info_Trace, Entry_Param, 1)
-                    & " for "
-                    & Get_Param (Info_Trace, Caller_Param, 1));
- 
-       when PO_Done           => Put ("PO_Done");
-          New_Line;
-          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
-                    & " finished call from "
-                    & Get_Param (Info_Trace, Caller_Param, 1));
- 
-       when PO_Lock           => Put ("PO_Lock");
-          New_Line;
-          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
-                    & " took lock");
- 
-       when PO_Unlock         => Put ("PO_Unlock");
-          New_Line;
-          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
-                    & " released lock");
- 
-       when T_Create          => Put ("T_Create");
-          New_Line;
-          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
-                    & " created");
- 
-       when T_Activate        => Put ("T_Activate");
-          New_Line;
-          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
-                    & " activated");
- 
-       when T_Abort           => Put ("T_Abort");
-          New_Line;
-          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
-                    & " aborted by "
-                    & Get_Param (Info_Trace, Parent_Param, 1));
- 
-       when T_Terminate       => Put ("T_Terminate");
-          New_Line;
-          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
-                    & " terminated");
- 
-       when others
-         => Put ("Invalid Id");
-    end case;
- 
-    Put_Line ("  --> " & Info_Trace);
-    Put_Line ("-----------------------------------");
-    New_Line;
- end Send_Trace;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/7stpopsp.adb gcc-4.0.0/gcc/ada/7stpopsp.adb
*** gcc-3.4.3/gcc/ada/7stpopsp.adb	Mon Jan  5 15:20:43 2004
--- gcc-4.0.0/gcc/ada/7stpopsp.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,81 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                SYSTEM.TASK_PRIMITIVES.OPERATIONS.SPECIFIC                --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --            Copyright (C) 1992-2003, Free Software Fundation, Inc.        --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNARL was developed by the GNARL team at Florida State University.       --
- -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a POSIX-like version of this package.
- 
- separate (System.Task_Primitives.Operations)
- package body Specific is
- 
-    ----------------
-    -- Initialize --
-    ----------------
- 
-    procedure Initialize (Environment_Task : Task_ID) is
-       pragma Warnings (Off, Environment_Task);
-       Result : Interfaces.C.int;
-    begin
-       Result := pthread_key_create (ATCB_Key'Access, null);
-       pragma Assert (Result = 0);
-    end Initialize;
- 
-    -------------------
-    -- Is_Valid_Task --
-    -------------------
- 
-    function Is_Valid_Task return Boolean is
-    begin
-       return  pthread_getspecific (ATCB_Key) /= System.Null_Address;
-    end Is_Valid_Task;
- 
-    ---------
-    -- Set --
-    ---------
- 
-    procedure Set (Self_Id : Task_ID) is
-       Result : Interfaces.C.int;
-    begin
-       Result := pthread_setspecific (ATCB_Key, To_Address (Self_Id));
-       pragma Assert (Result = 0);
-    end Set;
- 
-    ----------
-    -- Self --
-    ----------
- 
-    function Self return Task_ID is
- 
-    begin
-       return To_Task_Id (pthread_getspecific (ATCB_Key));
-    end Self;
- 
- end Specific;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/7straceb.adb gcc-4.0.0/gcc/ada/7straceb.adb
*** gcc-3.4.3/gcc/ada/7straceb.adb	Tue Oct 21 13:41:53 2003
--- gcc-4.0.0/gcc/ada/7straceb.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,113 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                     S Y S T E M . T R A C E B A C K                      --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --           Copyright (C) 1999-2003 Ada Core Technologies, Inc.            --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This version assumes that System.Machine_State_Operations.Pop_Frame can
- --  work with the Info parameter being null.
- 
- with System.Machine_State_Operations;
- 
- package body System.Traceback is
- 
-    use System.Machine_State_Operations;
- 
-    ----------------
-    -- Call_Chain --
-    ----------------
- 
-    procedure Call_Chain
-      (Traceback : System.Address;
-       Max_Len   : Natural;
-       Len       : out Natural;
-       Exclude_Min : System.Address := System.Null_Address;
-       Exclude_Max : System.Address := System.Null_Address;
-       Skip_Frames : Natural := 1)
-    is
-       type Tracebacks_Array is array (1 .. Max_Len) of Code_Loc;
-       pragma Suppress_Initialization (Tracebacks_Array);
- 
-       M     : Machine_State;
-       Code  : Code_Loc;
- 
-       Trace : Tracebacks_Array;
-       for Trace'Address use Traceback;
- 
-       N_Skips  : Natural := 0;
- 
-    begin
-       M := Allocate_Machine_State;
-       Set_Machine_State (M);
- 
-       --  Skip the requested number of frames
- 
-       loop
-          Code := Get_Code_Loc (M);
-          exit when Code = Null_Address or else N_Skips = Skip_Frames;
- 
-          Pop_Frame (M, System.Null_Address);
-          N_Skips := N_Skips + 1;
-       end loop;
- 
-       --  Now, record the frames outside the exclusion bounds, updating
-       --  the Len output value along the way.
- 
-       Len := 0;
-       loop
-          Code := Get_Code_Loc (M);
-          exit when Code = Null_Address or else Len = Max_Len;
- 
-          if Code < Exclude_Min or else Code > Exclude_Max then
-             Len := Len + 1;
-             Trace (Len) := Code;
-          end if;
- 
-          Pop_Frame (M, System.Null_Address);
-       end loop;
- 
-       Free_Machine_State (M);
-    end Call_Chain;
- 
-    ------------------
-    -- C_Call_Chain --
-    ------------------
- 
-    function C_Call_Chain
-      (Traceback   : System.Address;
-       Max_Len     : Natural) return Natural
-    is
-       Val : Natural;
-    begin
-       Call_Chain (Traceback, Max_Len, Val);
-       return Val;
-    end C_Call_Chain;
- 
- end System.Traceback;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/7straces.adb gcc-4.0.0/gcc/ada/7straces.adb
*** gcc-3.4.3/gcc/ada/7straces.adb	Tue Oct 21 13:41:53 2003
--- gcc-4.0.0/gcc/ada/7straces.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,73 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                         S Y S T E M . T R A C E S                        --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --             Copyright (C) 2001 Free Software Foundation, Inc.            --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- with System.Soft_Links;
- with System.Parameters;
- with System.Traces.Format;
- 
- package body System.Traces is
- 
-    package SSL renames System.Soft_Links;
-    use System.Traces.Format;
- 
-    ----------------------
-    -- Send_Trace_Info  --
-    ----------------------
- 
-    procedure Send_Trace_Info (Id : Trace_T) is
-       Task_S  : String := SSL.Task_Name.all;
-       Trace_S : String (1 .. 3 + Task_S'Length);
- 
-    begin
-       if Parameters.Runtime_Traces then
-          Trace_S (1 .. 3) := "/N:";
-          Trace_S (4 .. Trace_S'Last) := Task_S;
-          Send_Trace (Id, Trace_S);
-       end if;
-    end Send_Trace_Info;
- 
-    procedure Send_Trace_Info (Id : Trace_T; Timeout : Duration) is
-       Task_S    : String := SSL.Task_Name.all;
-       Timeout_S : String := Duration'Image (Timeout);
-       Trace_S   : String (1 .. 6 + Task_S'Length + Timeout_S'Length);
- 
-    begin
-       if Parameters.Runtime_Traces then
-          Trace_S (1 .. 3) := "/N:";
-          Trace_S (4 .. 3 + Task_S'Length) := Task_S;
-          Trace_S (4 + Task_S'Length .. 6 + Task_S'Length) := "/T:";
-          Trace_S (7 + Task_S'Length .. Trace_S'Last) := Timeout_S;
-          Send_Trace (Id, Trace_S);
-       end if;
-    end Send_Trace_Info;
- end System.Traces;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/7strafor.adb gcc-4.0.0/gcc/ada/7strafor.adb
*** gcc-3.4.3/gcc/ada/7strafor.adb	Tue Oct 21 13:41:53 2003
--- gcc-4.0.0/gcc/ada/7strafor.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,113 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                  S Y S T E M . T R A C E S . F O R M A T                 --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --             Copyright (C) 2001 Free Software Foundation, Inc.            --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- with System.Parameters;
- 
- package body System.Traces.Format is
- 
-    procedure Send_Trace (Id : Trace_T; Info : String) is separate;
- 
-    ------------------
-    -- Format_Trace --
-    ------------------
- 
-    function Format_Trace (Source : in String) return String_Trace is
-       Length : Integer      := Source'Length;
-       Result : String_Trace := (others => ' ');
- 
-    begin
-       --  If run-time tracing active, then fill the string
- 
-       if Parameters.Runtime_Traces then
-          if Max_Size - Length > 0 then
-             Result (1 .. Length) := Source (1 .. Length);
-             Result (Length + 1 .. Max_Size) := (others => ' ');
-             Result (Length + 1) := ASCII.NUL;
-          else
-             Result (1 .. Max_Size - 1) := Source (1 .. Max_Size - 1);
-             Result (Max_Size) := ASCII.NUL;
-          end if;
-       end if;
- 
-       return Result;
-    end Format_Trace;
- 
-    ------------
-    -- Append --
-    ------------
- 
-    function Append
-      (Source : String_Trace;
-       Annex  : String)
-       return   String_Trace
-    is
-       Result        : String_Trace := (others => ' ');
-       Source_Length : Integer := 1;
-       Annex_Length  : Integer := Annex'Length;
- 
-    begin
-       if Parameters.Runtime_Traces then
- 
-          --  First we determine the size used, without the spaces at the
-          --  end, if a String_Trace is present. Look at
-          --  System.Traces.Tasking for examples.
- 
-          while Source (Source_Length) /= ASCII.NUL loop
-             Source_Length := Source_Length + 1;
-          end loop;
- 
-          --  Then we fill the string.
- 
-          if Source_Length - 1 + Annex_Length <= Max_Size then
-             Result (1 .. Source_Length - 1) :=
-               Source (1 .. Source_Length - 1);
- 
-             Result (Source_Length .. Source_Length - 1 + Annex_Length) :=
-               Annex (1 ..  Annex_Length);
- 
-             Result (Source_Length + Annex_Length) := ASCII.NUL;
- 
-             Result (Source_Length + Annex_Length + 1 .. Max_Size) :=
-               (others => ' ');
-          else
-             Result (1 .. Source_Length - 1) := Source (1 .. Source_Length - 1);
-             Result (Source_Length .. Max_Size - 1) :=
-               Annex (1 .. Max_Size - Source_Length);
-             Result (Max_Size) := ASCII.NUL;
-          end if;
-       end if;
- 
-       return Result;
-    end Append;
- 
- end System.Traces.Format;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/7strafor.ads gcc-4.0.0/gcc/ada/7strafor.ads
*** gcc-3.4.3/gcc/ada/7strafor.ads	Tue Oct 21 13:41:53 2003
--- gcc-4.0.0/gcc/ada/7strafor.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,62 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                  S Y S T E M . T R A C E S . F O R M A T                 --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --             Copyright (C) 2001 Free Software Foundation, Inc.            --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package implements functions to format run-time traces
- 
- package System.Traces.Format is
- 
-    Max_Size : constant Integer := 128;
-    --  Event messages' maximum size.
- 
-    subtype String_Trace is String (1 .. Max_Size);
-    --  Specific type in which trace information is stored. An ASCII.NUL
-    --  character ends the string so that it is compatible with C strings
-    --  which is useful on some targets (eg. VxWorks)
- 
-    --  These private functions handles String_Trace formatting
- 
-    function Format_Trace (Source : String) return String_Trace;
-    --  Put a String in a String_Trace, truncates the string if necessary.
-    --  Similar to Head( .. ) found in Ada.Strings.Bounded
- 
-    function Append
-      (Source : String_Trace;
-       Annex  : String)
-       return   String_Trace;
-    pragma Inline (Append);
-    --  Concatenates two string, similar to & operator from Ada.String.Unbounded
- 
-    procedure Send_Trace (Id : Trace_T; Info : String);
-    --  This function (which is a subunit) send messages to external programs
- 
- end System.Traces.Format;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/7stratas.adb gcc-4.0.0/gcc/ada/7stratas.adb
*** gcc-3.4.3/gcc/ada/7stratas.adb	Tue Oct 21 13:41:53 2003
--- gcc-4.0.0/gcc/ada/7stratas.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,367 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
- --                                                                          --
- --                 S Y S T E M . T R A C E S . T A S K I N G                --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --           Copyright (C) 2001-2002 Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNARL is free software; you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNARL; see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- with System.Tasking;       use System.Tasking;
- with System.Soft_Links;
- with System.Parameters;
- with System.Traces.Format; use System.Traces.Format;
- with System.Traces;        use System.Traces;
- 
- package body System.Traces.Tasking is
- 
-    use System.Tasking;
-    use System.Traces;
-    use System.Traces.Format;
- 
-    package SSL renames System.Soft_Links;
- 
-    function Extract_Accepts (Task_Name : Task_ID) return String_Trace;
-    --  This function is used to extract data joined with
-    --  W_Select, WT_Select, W_Accept events
- 
-    ---------------------
-    -- Send_Trace_Info --
-    ---------------------
- 
-    procedure Send_Trace_Info (Id : Trace_T; Task_Name2 : Task_ID) is
-       Task_S  : constant String := SSL.Task_Name.all;
-       Task2_S : constant String :=
-                   Task_Name2.Common.Task_Image
-                     (1 .. Task_Name2.Common.Task_Image_Len);
-       Trace_S : String (1 .. 6 + Task_S'Length + Task2_S'Length);
- 
-       L0 : Integer := Task_S'Length;
-       L1 : Integer := Task2_S'Length;
- 
-    begin
-       if Parameters.Runtime_Traces then
-          case Id is
-             when M_RDV_Complete | PO_Done =>
-                Trace_S (1 .. 3)                 := "/N:";
-                Trace_S (4 .. 3 + L0)            := Task_S;
-                Trace_S (4 + L0 .. 6 + L0)       := "/C:";
-                Trace_S (7 + L0 .. Trace_S'Last) := Task2_S;
-                Send_Trace (Id, Trace_S);
- 
-             when E_Missed =>
-                Trace_S (1 .. 3)                 := "/N:";
-                Trace_S (4 .. 3 + L0)            := Task_S;
-                Trace_S (4 + L0 .. 6 + L0)       := "/A:";
-                Trace_S (7 + L0 .. Trace_S'Last) := Task2_S;
-                Send_Trace (Id, Trace_S);
- 
-             when E_Kill =>
-                Trace_S (1 .. 3)                 := "/N:";
-                Trace_S (4 .. 3 + L1)            := Task2_S;
-                Trace_S (4 + L1 .. Trace_S'Last) := (others => ' ');
-                Send_Trace (Id, Trace_S);
- 
-             when T_Create =>
-                Trace_S (1 .. 3)                 := "/N:";
-                Trace_S (4 .. 3 + L1)            := Task2_S;
-                Trace_S (4 + L1 .. Trace_S'Last) := (others => ' ');
-                Send_Trace (Id, Trace_S);
- 
-             when others =>
-                null;
-                --  should raise an exception ???
-          end case;
-       end if;
-    end Send_Trace_Info;
- 
-    procedure Send_Trace_Info
-      (Id           : Trace_T;
-       Task_Name2   : Task_ID;
-       Entry_Number : Entry_Index)
-    is
-       Task_S  : constant String := SSL.Task_Name.all;
-       Task2_S : constant String :=
-                   Task_Name2.Common.Task_Image
-                     (1 .. Task_Name2.Common.Task_Image_Len);
-       Entry_S   : String := Integer'Image (Integer (Entry_Number));
-       Trace_S   : String (1 .. 9 + Task_S'Length
-                                  + Task2_S'Length + Entry_S'Length);
- 
-       L0 : Integer := Task_S'Length;
-       L1 : Integer := Task_S'Length + Entry_S'Length;
-       L2 : Integer := Task_S'Length + Task2_S'Length;
- 
-    begin
-       if Parameters.Runtime_Traces then
-          case Id is
-             when M_Accept_Complete =>
-                Trace_S (1 .. 3)                  := "/N:";
-                Trace_S (4 .. 3 + L0)             := Task_S;
-                Trace_S (4 + L0 .. 6 + L0)        := "/E:";
-                Trace_S (7 + L0 .. 6 + L1)         := Entry_S;
-                Trace_S (7 + L1 .. 9 + L1)        := "/C:";
-                Trace_S (10 + L1 .. Trace_S'Last) := Task2_S;
-                Send_Trace (Id, Trace_S);
- 
-             when W_Call =>
-                Trace_S (1 .. 3)                  := "/N:";
-                Trace_S (4 .. 3 + L0)             := Task_S;
-                Trace_S (4 + L0 .. 6 + L0)        := "/A:";
-                Trace_S (7 + L0 .. 6 + L2)        := Task2_S;
-                Trace_S (7 + L2 .. 9 + L2)        := "/C:";
-                Trace_S (10 + L2 .. Trace_S'Last) := Entry_S;
-                Send_Trace (Id, Trace_S);
- 
-             when others =>
-                null;
-                --  should raise an exception ???
-          end case;
-       end if;
-    end Send_Trace_Info;
- 
-    procedure Send_Trace_Info
-      (Id           : Trace_T;
-       Task_Name    : Task_ID;
-       Task_Name2   : Task_ID;
-       Entry_Number : Entry_Index)
-    is
-       Task_S  : constant String :=
-                   Task_Name.Common.Task_Image
-                     (1 .. Task_Name.Common.Task_Image_Len);
-       Task2_S : constant String :=
-                   Task_Name2.Common.Task_Image
-                     (1 .. Task_Name2.Common.Task_Image_Len);
-       Entry_S   : String := Integer'Image (Integer (Entry_Number));
-       Trace_S   : String (1 .. 9 + Task_S'Length
-                                  + Task2_S'Length + Entry_S'Length);
- 
-       L0 : Integer := Task_S'Length;
-       L1 : Integer := Task_S'Length + Entry_S'Length;
- 
-    begin
-       if Parameters.Runtime_Traces then
-          case Id is
-             when PO_Run =>
-                Trace_S (1 .. 3)                  := "/N:";
-                Trace_S (4 .. 3 + L0)             := Task_S;
-                Trace_S (4 + L0 .. 6 + L0)        := "/E:";
-                Trace_S (7 + L0 .. 6 + L1)        := Entry_S;
-                Trace_S (7 + L1 .. 9 + L1)        := "/C:";
-                Trace_S (10 + L1 .. Trace_S'Last) := Task2_S;
-                Send_Trace (Id, Trace_S);
- 
-             when others =>
-                null;
-                --  should raise an exception ???
-          end case;
-       end if;
-    end Send_Trace_Info;
- 
-    procedure Send_Trace_Info (Id : Trace_T; Entry_Number : Entry_Index) is
-       Task_S  : String := SSL.Task_Name.all;
-       Entry_S : String := Integer'Image (Integer (Entry_Number));
-       Trace_S : String (1 .. 6 + Task_S'Length + Entry_S'Length);
- 
-       L0 : Integer := Task_S'Length;
- 
-    begin
-       if Parameters.Runtime_Traces then
-          Trace_S (1 .. 3)                 := "/N:";
-          Trace_S (4 .. 3 + L0)            := Task_S;
-          Trace_S (4 + L0 .. 6 + L0)       := "/E:";
-          Trace_S (7 + L0 .. Trace_S'Last) := Entry_S;
-          Send_Trace (Id, Trace_S);
-       end if;
-    end Send_Trace_Info;
- 
-    procedure Send_Trace_Info
-      (Id         : Trace_T;
-       Task_Name  : Task_ID;
-       Task_Name2 : Task_ID)
-    is
-       Task_S  : constant String :=
-                   Task_Name.Common.Task_Image
-                     (1 .. Task_Name.Common.Task_Image_Len);
-       Task2_S : constant String :=
-                   Task_Name2.Common.Task_Image
-                     (1 .. Task_Name2.Common.Task_Image_Len);
-       Trace_S : String (1 .. 6 + Task_S'Length + Task2_S'Length);
- 
-       L0 : Integer := Task2_S'Length;
- 
-    begin
-       if Parameters.Runtime_Traces then
-          Trace_S (1 .. 3)                 := "/N:";
-          Trace_S (4 .. 3 + L0)            := Task2_S;
-          Trace_S (4 + L0 .. 6 + L0)       := "/P:";
-          Trace_S (7 + L0 .. Trace_S'Last) := Task_S;
-          Send_Trace (Id, Trace_S);
-       end if;
-    end Send_Trace_Info;
- 
-    procedure Send_Trace_Info
-      (Id           : Trace_T;
-       Acceptor     : Task_ID;
-       Entry_Number : Entry_Index;
-       Timeout      : Duration)
-    is
-       Task_S     : constant String := SSL.Task_Name.all;
-       Acceptor_S : constant String :=
-                      Acceptor.Common.Task_Image
-                        (1 .. Acceptor.Common.Task_Image_Len);
-       Entry_S    : String := Integer'Image (Integer (Entry_Number));
-       Timeout_S  : String := Duration'Image (Timeout);
-       Trace_S    : String (1 .. 12 + Task_S'Length + Acceptor_S'Length
-                                    + Entry_S'Length + Timeout_S'Length);
- 
-       L0 : Integer := Task_S'Length;
-       L1 : Integer := Task_S'Length + Acceptor_S'Length;
-       L2 : Integer := Task_S'Length + Acceptor_S'Length + Entry_S'Length;
- 
-    begin
-       if Parameters.Runtime_Traces then
-          Trace_S (1 .. 3)                  := "/N:";
-          Trace_S (4 .. 3 + L0)             := Task_S;
-          Trace_S (4 + L0 .. 6 + L0)        := "/A:";
-          Trace_S (7 + L0 .. 6 + L1)        := Acceptor_S;
-          Trace_S (7 + L1 .. 9 + L1)        := "/E:";
-          Trace_S (10 + L1 .. 9 + L2)       := Entry_S;
-          Trace_S (10 + L2 .. 12 + L2)      := "/T:";
-          Trace_S (13 + L2 .. Trace_S'Last) := Timeout_S;
-          Send_Trace (Id, Trace_S);
-       end if;
-    end Send_Trace_Info;
- 
-    procedure Send_Trace_Info
-      (Id           : Trace_T;
-       Entry_Number : Entry_Index;
-       Timeout      : Duration)
-    is
-       Task_S    : String := SSL.Task_Name.all;
-       Entry_S   : String := Integer'Image (Integer (Entry_Number));
-       Timeout_S : String := Duration'Image (Timeout);
-       Trace_S   : String (1 .. 9 + Task_S'Length
-                                  + Entry_S'Length + Timeout_S'Length);
- 
-       L0 : Integer := Task_S'Length;
-       L1 : Integer := Task_S'Length + Entry_S'Length;
- 
-    begin
-       if Parameters.Runtime_Traces then
-          Trace_S (1 .. 3)                  := "/N:";
-          Trace_S (4 .. 3 + L0)             := Task_S;
-          Trace_S (4 + L0 .. 6 + L0)        := "/E:";
-          Trace_S (7 + L0 .. 6 + L1)        := Entry_S;
-          Trace_S (7 + L1 .. 9 + L1)        := "/T:";
-          Trace_S (10 + L1 .. Trace_S'Last) := Timeout_S;
-          Send_Trace (Id, Trace_S);
-       end if;
-    end Send_Trace_Info;
- 
-    procedure Send_Trace_Info
-      (Id        : Trace_T;
-       Task_Name : Task_ID;
-       Number    : Integer)
-    is
-       Task_S    : String := SSL.Task_Name.all;
-       Number_S  : String := Integer'Image (Number);
-       Accepts_S : String := Extract_Accepts (Task_Name);
-       Trace_S   : String (1 .. 9 + Task_S'Length
-                                  + Number_S'Length + Accepts_S'Length);
- 
-       L0 : Integer := Task_S'Length;
-       L1 : Integer := Task_S'Length + Number_S'Length;
- 
-    begin
-       if Parameters.Runtime_Traces then
-          Trace_S (1 .. 3)                  := "/N:";
-          Trace_S (4 .. 3 + L0)             := Task_S;
-          Trace_S (4 + L0 .. 6 + L0)        := "/#:";
-          Trace_S (7 + L0 .. 6 + L1)        := Number_S;
-          Trace_S (7 + L1 .. 9 + L1)        := "/E:";
-          Trace_S (10 + L1 .. Trace_S'Last) := Accepts_S;
-          Send_Trace (Id, Trace_S);
-       end if;
-    end Send_Trace_Info;
- 
-    procedure Send_Trace_Info
-      (Id        : Trace_T;
-       Task_Name : Task_ID;
-       Number    : Integer;
-       Timeout   : Duration)
-    is
-       Task_S    : String := SSL.Task_Name.all;
-       Timeout_S : String := Duration'Image (Timeout);
-       Number_S  : String := Integer'Image (Number);
-       Accepts_S : String := Extract_Accepts (Task_Name);
-       Trace_S   : String (1 .. 12 + Task_S'Length + Timeout_S'Length
-                                   + Number_S'Length + Accepts_S'Length);
- 
-       L0 : Integer := Task_S'Length;
-       L1 : Integer := Task_S'Length + Timeout_S'Length;
-       L2 : Integer := Task_S'Length + Timeout_S'Length + Number_S'Length;
- 
-    begin
-       if Parameters.Runtime_Traces then
-          Trace_S (1 .. 3)                  := "/N:";
-          Trace_S (4 .. 3 + L0)             := Task_S;
-          Trace_S (4 + L0 .. 6 + L0)        := "/T:";
-          Trace_S (7 + L0 .. 6 + L1)        := Timeout_S;
-          Trace_S (7 + L1 .. 9 + L1)        := "/#:";
-          Trace_S (10 + L1 .. 9 + L2)       := Number_S;
-          Trace_S (10 + L2 .. 12 + L2)      := "/E:";
-          Trace_S (13 + L2 .. Trace_S'Last) := Accepts_S;
-          Send_Trace (Id, Trace_S);
-       end if;
-    end Send_Trace_Info;
- 
-    ---------------------
-    -- Extract_Accepts --
-    ---------------------
- 
-    --  This function returns a string in which all opened
-    --  Accepts or Selects are given, separated by semi-colons.
- 
-    function Extract_Accepts (Task_Name : Task_ID) return String_Trace is
-       Info_Annex : String_Trace := (ASCII.NUL, others => ' ');
- 
-    begin
-       for J in Task_Name.Open_Accepts'First ..
-         Task_Name.Open_Accepts'Last - 1
-       loop
-          Info_Annex := Append (Info_Annex, Integer'Image
-                                (Integer (Task_Name.Open_Accepts (J).S)) & ",");
-       end loop;
- 
-       Info_Annex := Append (Info_Annex,
-                             Integer'Image (Integer
-                                            (Task_Name.Open_Accepts
-                                             (Task_Name.Open_Accepts'Last).S)));
-       return Info_Annex;
-    end Extract_Accepts;
- end System.Traces.Tasking;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/86numaux.adb gcc-4.0.0/gcc/ada/86numaux.adb
*** gcc-3.4.3/gcc/ada/86numaux.adb	Thu Apr 24 17:53:52 2003
--- gcc-4.0.0/gcc/ada/86numaux.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,592 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT RUNTIME COMPONENTS                          --
- --                                                                          --
- --                     A D A . N U M E R I C S . A U X                      --
- --                                                                          --
- --                                 B o d y                                  --
- --                        (Machine Version for x86)                         --
- --                                                                          --
- --          Copyright (C) 1998-2001 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  File a-numaux.adb <- 86numaux.adb
- 
- --  This version of Numerics.Aux is for the IEEE Double Extended floating
- --  point format on x86.
- 
- with System.Machine_Code; use System.Machine_Code;
- 
- package body Ada.Numerics.Aux is
- 
-    NL           : constant String := ASCII.LF & ASCII.HT;
- 
-    type FPU_Stack_Pointer is range 0 .. 7;
-    for FPU_Stack_Pointer'Size use 3;
- 
-    type FPU_Status_Word is record
-       B   : Boolean; -- FPU Busy (for 8087 compatibility only)
-       ES  : Boolean; -- Error Summary Status
-       SF  : Boolean; -- Stack Fault
- 
-       Top : FPU_Stack_Pointer;
- 
-       --  Condition Code Flags
- 
-       --  C2 is set by FPREM and FPREM1 to indicate incomplete reduction.
-       --  In case of successfull recorction, C0, C3 and C1 are set to the
-       --  three least significant bits of the result (resp. Q2, Q1 and Q0).
- 
-       --  C2 is used by FPTAN, FSIN, FCOS, and FSINCOS to indicate that
-       --  that source operand is beyond the allowable range of
-       --  -2.0**63 .. 2.0**63.
- 
-       C3  : Boolean;
-       C2  : Boolean;
-       C1  : Boolean;
-       C0  : Boolean;
- 
-       --  Exception Flags
- 
-       PE  : Boolean; -- Precision
-       UE  : Boolean; -- Underflow
-       OE  : Boolean; -- Overflow
-       ZE  : Boolean; -- Zero Divide
-       DE  : Boolean; -- Denormalized Operand
-       IE  : Boolean; -- Invalid Operation
-    end record;
- 
-    for FPU_Status_Word use record
-       B   at 0 range 15 .. 15;
-       C3  at 0 range 14 .. 14;
-       Top at 0 range 11 .. 13;
-       C2  at 0 range 10 .. 10;
-       C1  at 0 range  9 ..  9;
-       C0  at 0 range  8 ..  8;
-       ES  at 0 range  7 ..  7;
-       SF  at 0 range  6 ..  6;
-       PE  at 0 range  5 ..  5;
-       UE  at 0 range  4 ..  4;
-       OE  at 0 range  3 ..  3;
-       ZE  at 0 range  2 ..  2;
-       DE  at 0 range  1 ..  1;
-       IE  at 0 range  0 ..  0;
-    end record;
- 
-    for FPU_Status_Word'Size use 16;
- 
-    -----------------------
-    -- Local subprograms --
-    -----------------------
- 
-    function Is_Nan (X : Double) return Boolean;
-    --  Return True iff X is a IEEE NaN value
- 
-    function Logarithmic_Pow (X, Y : Double) return Double;
-    --  Implementation of X**Y using Exp and Log functions (binary base)
-    --  to calculate the exponentiation. This is used by Pow for values
-    --  for values of Y in the open interval (-0.25, 0.25)
- 
-    function Reduce (X : Double) return Double;
-    --  Implement partial reduction of X by Pi in the x86.
- 
-    --  Note that for the Sin, Cos and Tan functions completely accurate
-    --  reduction of the argument is done for arguments in the range of
-    --  -2.0**63 .. 2.0**63, using a 66-bit approximation of Pi.
- 
-    pragma Inline (Is_Nan);
-    pragma Inline (Reduce);
- 
-    ---------------------------------
-    --  Basic Elementary Functions --
-    ---------------------------------
- 
-    --  This section implements a few elementary functions that are
-    --  used to build the more complex ones. This ordering enables
-    --  better inlining.
- 
-    ----------
-    -- Atan --
-    ----------
- 
-    function Atan (X : Double) return Double is
-       Result  : Double;
- 
-    begin
-       Asm (Template =>
-            "fld1" & NL
-          & "fpatan",
-          Outputs  => Double'Asm_Output ("=t", Result),
-          Inputs   => Double'Asm_Input  ("0", X));
- 
-       --  The result value is NaN iff input was invalid
- 
-       if not (Result = Result) then
-          raise Argument_Error;
-       end if;
- 
-       return Result;
-    end Atan;
- 
-    ---------
-    -- Exp --
-    ---------
- 
-    function Exp (X : Double) return Double is
-       Result : Double;
-    begin
-       Asm (Template =>
-          "fldl2e               " & NL
-        & "fmulp   %%st, %%st(1)" & NL -- X * log2 (E)
-        & "fld     %%st(0)      " & NL
-        & "frndint              " & NL -- Integer (X * Log2 (E))
-        & "fsubr   %%st, %%st(1)" & NL -- Fraction (X * Log2 (E))
-        & "fxch                 " & NL
-        & "f2xm1                " & NL -- 2**(...) - 1
-        & "fld1                 " & NL
-        & "faddp   %%st, %%st(1)" & NL -- 2**(Fraction (X * Log2 (E)))
-        & "fscale               " & NL -- E ** X
-        & "fstp    %%st(1)      ",
-          Outputs  => Double'Asm_Output ("=t", Result),
-          Inputs   => Double'Asm_Input  ("0", X));
-       return Result;
-    end Exp;
- 
-    ------------
-    -- Is_Nan --
-    ------------
- 
-    function Is_Nan (X : Double) return Boolean is
-    begin
-       --  The IEEE NaN values are the only ones that do not equal themselves
- 
-       return not (X = X);
-    end Is_Nan;
- 
-    ---------
-    -- Log --
-    ---------
- 
-    function Log (X : Double) return Double is
-       Result : Double;
- 
-    begin
-       Asm (Template =>
-          "fldln2               " & NL
-        & "fxch                 " & NL
-        & "fyl2x                " & NL,
-          Outputs  => Double'Asm_Output ("=t", Result),
-          Inputs   => Double'Asm_Input  ("0", X));
-       return Result;
-    end Log;
- 
-    ------------
-    -- Reduce --
-    ------------
- 
-    function Reduce (X : Double) return Double is
-       Result : Double;
-    begin
-       Asm
-         (Template =>
-          --  Partial argument reduction
-          "fldpi                " & NL
-        & "fadd    %%st(0), %%st" & NL
-        & "fxch    %%st(1)      " & NL
-        & "fprem1               " & NL
-        & "fstp    %%st(1)      ",
-          Outputs  => Double'Asm_Output ("=t", Result),
-          Inputs   => Double'Asm_Input  ("0", X));
-       return Result;
-    end Reduce;
- 
-    ----------
-    -- Sqrt --
-    ----------
- 
-    function Sqrt (X : Double) return Double is
-       Result  : Double;
- 
-    begin
-       if X < 0.0 then
-          raise Argument_Error;
-       end if;
- 
-       Asm (Template => "fsqrt",
-            Outputs  => Double'Asm_Output ("=t", Result),
-            Inputs   => Double'Asm_Input  ("0", X));
- 
-       return Result;
-    end Sqrt;
- 
-    ---------------------------------
-    --  Other Elementary Functions --
-    ---------------------------------
- 
-    --  These are built using the previously implemented basic functions
- 
-    ----------
-    -- Acos --
-    ----------
- 
-    function Acos (X : Double) return Double is
-       Result  : Double;
-    begin
-       Result := 2.0 * Atan (Sqrt ((1.0 - X) / (1.0 + X)));
- 
-       --  The result value is NaN iff input was invalid
- 
-       if Is_Nan (Result) then
-          raise Argument_Error;
-       end if;
- 
-       return Result;
-    end Acos;
- 
-    ----------
-    -- Asin --
-    ----------
- 
-    function Asin (X : Double) return Double is
-       Result  : Double;
-    begin
- 
-       Result := Atan (X / Sqrt ((1.0 - X) * (1.0 + X)));
- 
-       --  The result value is NaN iff input was invalid
- 
-       if Is_Nan (Result) then
-          raise Argument_Error;
-       end if;
- 
-       return Result;
-    end Asin;
- 
-    ---------
-    -- Cos --
-    ---------
- 
-    function Cos (X : Double) return Double is
-       Reduced_X : Double := X;
-       Result    : Double;
-       Status    : FPU_Status_Word;
- 
-    begin
- 
-       loop
-          Asm
-            (Template =>
-             "fcos                 " & NL
-           & "xorl    %%eax, %%eax " & NL
-           & "fnstsw  %%ax         ",
-             Outputs  => (Double'Asm_Output         ("=t", Result),
-                         FPU_Status_Word'Asm_Output ("=a", Status)),
-             Inputs   => Double'Asm_Input           ("0", Reduced_X));
- 
-          exit when not Status.C2;
- 
-          --  Original argument was not in range and the result
-          --  is the unmodified argument.
- 
-          Reduced_X := Reduce (Result);
-       end loop;
- 
-       return Result;
-    end Cos;
- 
-    ---------------------
-    -- Logarithmic_Pow --
-    ---------------------
- 
-    function Logarithmic_Pow (X, Y : Double) return Double is
-       Result  : Double;
- 
-    begin
-       Asm (Template => ""             --  X                  : Y
-        & "fyl2x                " & NL --  Y * Log2 (X)
-        & "fst     %%st(1)      " & NL --  Y * Log2 (X)       : Y * Log2 (X)
-        & "frndint              " & NL --  Int (...)          : Y * Log2 (X)
-        & "fsubr   %%st, %%st(1)" & NL --  Int (...)          : Fract (...)
-        & "fxch                 " & NL --  Fract (...)        : Int (...)
-        & "f2xm1                " & NL --  2**Fract (...) - 1 : Int (...)
-        & "fld1                 " & NL --  1 : 2**Fract (...) - 1 : Int (...)
-        & "faddp   %%st, %%st(1)" & NL --  2**Fract (...)     : Int (...)
-        & "fscale               " & NL --  2**(Fract (...) + Int (...))
-        & "fstp    %%st(1)      ",
-          Outputs  => Double'Asm_Output ("=t", Result),
-          Inputs   =>
-            (Double'Asm_Input  ("0", X),
-             Double'Asm_Input  ("u", Y)));
- 
-       return Result;
-    end Logarithmic_Pow;
- 
-    ---------
-    -- Pow --
-    ---------
- 
-    function Pow (X, Y : Double) return Double is
-       type Mantissa_Type is mod 2**Double'Machine_Mantissa;
-       --  Modular type that can hold all bits of the mantissa of Double
- 
-       --  For negative exponents, a division is done
-       --  at the end of the processing.
- 
-       Negative_Y : constant Boolean := Y < 0.0;
-       Abs_Y      : constant Double := abs Y;
- 
-       --  During this function the following invariant is kept:
-       --  X ** (abs Y) = Base**(Exp_High + Exp_Mid + Exp_Low) * Factor
- 
-       Base : Double := X;
- 
-       Exp_High : Double := Double'Floor (Abs_Y);
-       Exp_Mid  : Double;
-       Exp_Low  : Double;
-       Exp_Int  : Mantissa_Type;
- 
-       Factor : Double := 1.0;
- 
-    begin
-       --  Select algorithm for calculating Pow:
-       --  integer cases fall through
- 
-       if Exp_High >= 2.0**Double'Machine_Mantissa then
- 
-          --  In case of Y that is IEEE infinity, just raise constraint error
- 
-          if Exp_High > Double'Safe_Last then
-             raise Constraint_Error;
-          end if;
- 
-          --  Large values of Y are even integers and will stay integer
-          --  after division by two.
- 
-          loop
-             --  Exp_Mid and Exp_Low are zero, so
-             --    X**(abs Y) = Base ** Exp_High = (Base**2) ** (Exp_High / 2)
- 
-             Exp_High := Exp_High / 2.0;
-             Base := Base * Base;
-             exit when Exp_High < 2.0**Double'Machine_Mantissa;
-          end loop;
- 
-       elsif Exp_High /= Abs_Y then
-          Exp_Low := Abs_Y - Exp_High;
- 
-          Factor := 1.0;
- 
-          if Exp_Low /= 0.0 then
- 
-             --  Exp_Low now is in interval (0.0, 1.0)
-             --  Exp_Mid := Double'Floor (Exp_Low * 4.0) / 4.0;
- 
-             Exp_Mid := 0.0;
-             Exp_Low := Exp_Low - Exp_Mid;
- 
-             if Exp_Low >= 0.5 then
-                Factor := Sqrt (X);
-                Exp_Low := Exp_Low - 0.5;  -- exact
- 
-                if Exp_Low >= 0.25 then
-                   Factor := Factor * Sqrt (Factor);
-                   Exp_Low := Exp_Low - 0.25; --  exact
-                end if;
- 
-             elsif Exp_Low >= 0.25 then
-                Factor := Sqrt (Sqrt (X));
-                Exp_Low := Exp_Low - 0.25; --  exact
-             end if;
- 
-             --  Exp_Low now is in interval (0.0, 0.25)
- 
-             --  This means it is safe to call Logarithmic_Pow
-             --  for the remaining part.
- 
-             Factor := Factor * Logarithmic_Pow (X, Exp_Low);
-          end if;
- 
-       elsif X = 0.0 then
-          return 0.0;
-       end if;
- 
-       --  Exp_High is non-zero integer smaller than 2**Double'Machine_Mantissa
- 
-       Exp_Int := Mantissa_Type (Exp_High);
- 
-       --  Standard way for processing integer powers > 0
- 
-       while Exp_Int > 1 loop
-          if (Exp_Int and 1) = 1 then
- 
-             --  Base**Y = Base**(Exp_Int - 1) * Exp_Int for Exp_Int > 0
- 
-             Factor := Factor * Base;
-          end if;
- 
-          --  Exp_Int is even and Exp_Int > 0, so
-          --    Base**Y = (Base**2)**(Exp_Int / 2)
- 
-          Base := Base * Base;
-          Exp_Int := Exp_Int / 2;
-       end loop;
- 
-       --  Exp_Int = 1 or Exp_Int = 0
- 
-       if Exp_Int = 1 then
-          Factor := Base * Factor;
-       end if;
- 
-       if Negative_Y then
-          Factor := 1.0 / Factor;
-       end if;
- 
-       return Factor;
-    end Pow;
- 
-    ---------
-    -- Sin --
-    ---------
- 
-    function Sin (X : Double) return Double is
-       Reduced_X : Double := X;
-       Result    : Double;
-       Status    : FPU_Status_Word;
- 
-    begin
- 
-       loop
-          Asm
-            (Template =>
-             "fsin                 " & NL
-           & "xorl    %%eax, %%eax " & NL
-           & "fnstsw  %%ax         ",
-             Outputs  => (Double'Asm_Output          ("=t", Result),
-                          FPU_Status_Word'Asm_Output ("=a", Status)),
-             Inputs   => Double'Asm_Input            ("0", Reduced_X));
- 
-          exit when not Status.C2;
- 
-          --  Original argument was not in range and the result
-          --  is the unmodified argument.
- 
-          Reduced_X := Reduce (Result);
-       end loop;
- 
-       return Result;
-    end Sin;
- 
-    ---------
-    -- Tan --
-    ---------
- 
-    function Tan (X : Double) return Double is
-       Reduced_X : Double := X;
-       Result    : Double;
-       Status    : FPU_Status_Word;
- 
-    begin
- 
-       loop
-          Asm
-            (Template =>
-             "fptan                " & NL
-           & "xorl    %%eax, %%eax " & NL
-           & "fnstsw  %%ax         " & NL
-           & "ffree   %%st(0)      " & NL
-           & "fincstp              ",
- 
-             Outputs  => (Double'Asm_Output         ("=t", Result),
-                         FPU_Status_Word'Asm_Output ("=a", Status)),
-             Inputs   => Double'Asm_Input           ("0", Reduced_X));
- 
-          exit when not Status.C2;
- 
-          --  Original argument was not in range and the result
-          --  is the unmodified argument.
- 
-          Reduced_X := Reduce (Result);
-       end loop;
- 
-       return Result;
-    end Tan;
- 
-    ----------
-    -- Sinh --
-    ----------
- 
-    function Sinh (X : Double) return Double is
-    begin
-       --  Mathematically Sinh (x) is defined to be (Exp (X) - Exp (-X)) / 2.0
- 
-       if abs X < 25.0 then
-          return (Exp (X) - Exp (-X)) / 2.0;
- 
-       else
-          return Exp (X) / 2.0;
-       end if;
- 
-    end Sinh;
- 
-    ----------
-    -- Cosh --
-    ----------
- 
-    function Cosh (X : Double) return Double is
-    begin
-       --  Mathematically Cosh (X) is defined to be (Exp (X) + Exp (-X)) / 2.0
- 
-       if abs X < 22.0 then
-          return (Exp (X) + Exp (-X)) / 2.0;
- 
-       else
-          return Exp (X) / 2.0;
-       end if;
- 
-    end Cosh;
- 
-    ----------
-    -- Tanh --
-    ----------
- 
-    function Tanh (X : Double) return Double is
-    begin
-       --  Return the Hyperbolic Tangent of x
-       --
-       --                                    x    -x
-       --                                   e  - e        Sinh (X)
-       --       Tanh (X) is defined to be -----------   = --------
-       --                                    x    -x      Cosh (X)
-       --                                   e  + e
- 
-       if abs X > 23.0 then
-          return Double'Copy_Sign (1.0, X);
-       end if;
- 
-       return 1.0 / (1.0 + Exp (-2.0 * X)) - 1.0 / (1.0 + Exp (2.0 * X));
- 
-    end Tanh;
- 
- end Ada.Numerics.Aux;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/86numaux.ads gcc-4.0.0/gcc/ada/86numaux.ads
*** gcc-3.4.3/gcc/ada/86numaux.ads	Thu Apr 24 17:53:52 2003
--- gcc-4.0.0/gcc/ada/86numaux.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,84 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT RUNTIME COMPONENTS                          --
- --                                                                          --
- --                     A D A . N U M E R I C S . A U X                      --
- --                                                                          --
- --                                 S p e c                                  --
- --                        (Machine Version for x86)                         --
- --                                                                          --
- --          Copyright (C) 1992-1998 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package provides the basic computational interface for the generic
- --  elementary functions. This implementation is based on the glibc assembly
- --  sources for the x86 glibc math library.
- 
- --  Note: there are two versions of this package. One using the 80-bit x86
- --  long double format (which is this version), and one using 64-bit IEEE
- --  double (see file a-numaux.ads). The latter version imports the C
- --  routines directly.
- 
- package Ada.Numerics.Aux is
- pragma Pure (Aux);
- 
-    type Double is new Long_Long_Float;
- 
-    function Sin (X : Double) return Double;
- 
-    function Cos (X : Double) return Double;
- 
-    function Tan (X : Double) return Double;
- 
-    function Exp (X : Double) return Double;
- 
-    function Sqrt (X : Double) return Double;
- 
-    function Log (X : Double) return Double;
- 
-    function Atan (X : Double) return Double;
- 
-    function Acos (X : Double) return Double;
- 
-    function Asin (X : Double) return Double;
- 
-    function Sinh (X : Double) return Double;
- 
-    function Cosh (X : Double) return Double;
- 
-    function Tanh (X : Double) return Double;
- 
-    function Pow (X, Y : Double) return Double;
- 
- private
-    pragma Inline (Atan);
-    pragma Inline (Cos);
-    pragma Inline (Tan);
-    pragma Inline (Exp);
-    pragma Inline (Log);
-    pragma Inline (Sin);
-    pragma Inline (Sqrt);
- 
- end Ada.Numerics.Aux;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/9drpc.adb gcc-4.0.0/gcc/ada/9drpc.adb
*** gcc-3.4.3/gcc/ada/9drpc.adb	Tue Oct 21 13:41:53 2003
--- gcc-4.0.0/gcc/ada/9drpc.adb	Thu Jul 15 20:34:34 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2001 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body System.RPC is
*** 1009,1015 ****
                 Partition_ID'Image (Partition));
              Garbage_Collector.Allocate (Anonymous);
  
!             --  We substracted the size of the header from the size of the
              --  global message in order to provide immediatly Params size
  
              Anonymous.Element.Start
--- 1009,1015 ----
                 Partition_ID'Image (Partition));
              Garbage_Collector.Allocate (Anonymous);
  
!             --  We subtracted the size of the header from the size of the
              --  global message in order to provide immediatly Params size
  
              Anonymous.Element.Start
diff -Nrcpad gcc-3.4.3/gcc/ada/ChangeLog gcc-4.0.0/gcc/ada/ChangeLog
*** gcc-3.4.3/gcc/ada/ChangeLog	Fri Nov  5 03:33:30 2004
--- gcc-4.0.0/gcc/ada/ChangeLog	Thu Apr 21 05:17:36 2005
***************
*** 1,34 ****
! 2004-11-04  Release Manager
  
! 	* GCC 3.4.3 released.
  
! 2004-09-06  Release Manager
  
! 	* GCC 3.4.2 released.
  
! 2004-09-01  Laurent GUERBY <laurent@guerby.net>
  
! 	* Make-lang.in (bldtools): revert previous commit since
! 	it breaks parallel builds.
  	
! 2004-09-01  Laurent GUERBY <laurent@guerby.net>
!         
!         * Make-lang.in (bldtools): force rebuild of
!         runtime with no optimization for bltools to workaround
!         a code generation bug in 3.4.2.
  
! 2004-07-07  Kelley Cook  <kcook@gcc.gnu.org>
  
- 	PR bootstrap/16250
  	* Make-lang.in (doc/gnat_ugn_unw.texi): Eliminate explicit
  	dependency on xgnatugn, instead build it via a submake.
  	(ADA_INFOFILES): Add doc/gnat_ugn_unw.texi.
  
! 2004-07-01  Release Manager
  
! 	* GCC 3.4.1 released.
  
! 2004-06-09  Arnaud Charlet  <charlet@act-europe.fr>
  
  	PR ada/14150
  	* Make-lang.in: Clean up generation of documentation
--- 1,7433 ----
! 2005-04-20  Release Manager
  
! 	* GCC 4.0.0 released.
  
! 2005-04-07  Laurent GUERBY  <laurent@guerby.net>
! 	    John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
  
! 	* Makefile.in: Add make ifeq define for hppa linux tasking support.
! 	* system-hpux.ads: Define Signed_Zeros to be True.
! 	* system-linux-hppa.ads, s-osinte-linux-hppa.ads: New files.
  
! 2005-04-07  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	PR ada/18659
! 	PR ada/18819
! 	* misc.c (tree_sra_requested): New global.
! 	(gnat_init_options): Detect -ftree-sra.
! 	(gnat_post_options): Enable Tree-SRA only if specifically requested.
! 
! 2005-04-04  Eric Botcazou  <ebotcazou@adacore.com>
! 
! 	PR ada/19956
! 	Backport from mainline:
! 
! 	2005-03-29  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 	* utils.c (finish_record_type): Use variable_size when setting sizes.
! 
! 2005-03-17  Eric Botcazou  <ebotcazou@adacore.com>
! 
! 	PR ada/20255
! 	Backport from mainline:
! 
! 	2005-03-15  Eric Botcazou  <ebotcazou@adacore.com>
! 	* utils.c (convert) <UNION_TYPE>: Accept slight type variations when
! 	converting to an unchecked union type.
! 
! 2005-03-17  Eric Botcazou  <ebotcazou@adacore.com>
! 
! 	PR ada/18727
! 	Backport from mainline:
! 
! 	2005-03-15  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 	* exp_ch13.adb (Expand_N_Freeze_Entity): If Freeze_Type returns True,
! 	replace the N_Freeze_Entity with a null statement.
! 	* exp_ch3.adb (Freeze_Type): Now a function that returns True if
! 	the N_Freeze_Entity is to be deleted.
! 	* exp_ch3.ads (Freeze_Type): Now a function that returns Boolean.
! 	* freeze.adb (Undelay_Type): New Subprogram.
! 	(Set_Small_Size): Pass T, the type to modify; all callers changed.
! 	(Freeze_Entity, Freeze_Record_Type): Change the way we handle types
! 	within records; allow them to have freeze nodes if their base types
! 	aren't frozen yet.
! 	* sem_ch3.adb (Constrain_Access, Constrain_Array): Allow itypes to be
! 	delayed.
! 	* gigi.h (gnat_to_gnu_field_decl): New decl.
! 	* decl.c (gnat_to_gnu_entity, case E_Array_Subtype): Call
! 	copy_alias_set.
! 	(gnat_to_gnu_field_decl): New function.
! 	(substitution_list, annotate_rep): Call it.
! 	(gnat_to_gnu_entity, case E_Record_Subtype): Likewise.
! 	(gnat_to_gnu_entity, case E_Record_Type): Likewise.
! 	No longer update discriminants to not be a COMPONENT_REF.
! 	(copy_alias_set): Strip padding from input type; also handle
! 	unconstrained arrays properly.
! 	* trans.c (gnat_to_gnu, case N_Selected_Component): Call
! 	gnat_to_gnu_field_decl.
! 	(assoc_to_constructor): Likewise.
! 
! 2005-03-17  Eric Botcazou  <ebotcazou@adacore.com>
! 
! 	PR ada/19408
! 	PR ada/19900
! 	Backport from mainline:
! 
! 	2005-03-15  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 	* exp_util.adb (Remove_Side_Effects): Properly test for
! 	Expansion_Delayed and handle case when it's inside an
! 	N_Qualified_Expression.
! 	* decl.c (gnat_to_gnu_entity, case E_Component): Always look at
! 	Original_Record_Component if Present and not the entity.
! 	(gnat_to_gnu_entity, case E_Record_Subtype): Rework handling of subtype
! 	of tagged extension types by not making field for components that are
! 	inside the parent.
! 	* trans.c (gnat_to_gnu, case N_Aggregate): Verify that
! 	Expansion_Delayed is False.
! 	(assoc_to_constructor): Ignore fields that have a
! 	Corresponding_Discriminant.
!     
! 2005-03-17  Eric Botcazou  <ebotcazou@adacore.com>
! 
! 	PR ada/19140
! 	Backport from mainline:
! 
! 	2005-03-15  Eric Botcazou  <ebotcazou@adacore.com>
! 	* decl.c (gnat_to_gnu_entity) <E_Variable>: Do not convert again the
! 	expression to the type of the object when the object is constant.
! 	* trans.c (gnat_to_gnu) <N_Return_Statement>: Restructure.  Set
! 	gnu_result to NULL_TREE on entry.  If the function returns "by
! 	target", dereference the target pointer using the type of the
! 	actual return value.
! 	<all>: Be prepared for a null gnu_result.
! 	* utils2.c (build_binary_op): Fix typo.
! 
! 2005-03-17  Eric Botcazou  <ebotcazou@adacore.com>
! 
! 	PR ada/20344
! 	Backport from mainline:
! 
! 	2005-03-15  Eric Botcazou  <ebotcazou@adacore.com>
! 	* lang.opt: Fix specification of -fRTS=.
! 	* misc.c (gnat_handle_option): Accept OPT_fRTS_, not OPT_fRTS.
!     
! 2005-03-15  Jakub Jelinek  <jakub@redhat.com>
! 
! 	* Make-lang.in (ada/treeprs.ads, ada/einfo.h, ada/sinfo.h,
! 	ada/nmake.adb, ada/nmake.ads): Use unique subdirectories of
! 	ada/bldtools to avoid make -jN failures.
! 
! 2005-03-08  Laurent Guerby <laurent@guerby.net>
! 
! 	* system-linux-sparc.ads: Fix typo in previous commit.
! 
! 2005-03-07  James A. Morrison <phython@gcc.gnu.org>	
!             Laurent Guerby <laurent@guerby.net>
! 
! 	PR ada/20035
! 	* system-linux-sparc.ads: New.
! 	* Makefile.in: Add sparc linux entry.
  	
! 2005-02-13  Andrew Pinski  <pinskia@physics.uc.edu>
  
! 	PR ada/19942
! 	* utils.c (gnat_type_for_mode): Return null instead of ICE because we asked
! 	for an unknown mode.
! 
! 2005-02-12  Richard Henderson  <rth@redhat.com>
! 
! 	* utils.c (gnat_type_for_mode): Return NULL for COMPLEX modes;
! 	validate SCALAR_INT_MODE_P before calling gnat_type_for_size.
! 
! 2005-02-10  Andreas Jaeger  <aj@suse.de>
! 
! 	* init.c (__gnat_initialize): Mark parameter as unused.
! 
! 2005-02-09  Doug Rupp  <rupp@adacore.com>
! 
! 	* g-expect-vms.adb (Non_Blocking_Spawn): Separate out.
! 	* g-enblsp-vms-alpha.adb g-enblsp-vms-ia64.adb: New subunits.
! 
! 2005-02-09  Doug Rupp  <rupp@adacore.com>
! 
! 	* gnatchop.adb (dup, dup2),
! 	g-dirope.adb (closedir, opendir, rmdir): Reference via System.CRTL.
! 
! 	* gnatlbr.adb (mkdir),
! 	mlib-tgt-vms-ia64.adb (popen, plose):  Import with decc$ prefix.
! 
! 	* s-crtl.ads (closdir, dup, dup2, opendir, rmdir): Import.
! 
! 2005-02-09  Doug Rupp  <rupp@adacore.com>
! 
! 	* s-tpopde-vms.adb: Add pragma Warnings (Off) for Task_Id conversions.
! 
! 2005-02-09  Robert Dewar  <dewar@adacore.com>
! 	    Thomas Quinot  <quinot@adacore.com>
! 	    Javier Miranda  <miranda@adacore.com>
! 	    Pascal Obry  <obry@adacore.com>
! 	    Ed Schonberg  <schonberg@adacore.com>
! 	    Doug Rupp  <rupp@adacore.com>
! 	    Gary Dismukes  <dismukes@adacore.com>
! 	    Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 
! 	* g-zstspl.ads: New file.
! 
! 	* a-chahan.ads, a-chahan.adb: Add declarations from AI-285
! 
! 	* a-string.ads: Add pragma Ada_05 for wide_wide_space to get warning in
! 	Ada 95 mode
! 	Add definition of Wide_Wide_Space for AI-285
! 
! 	* impunit.ads, impunit.adb, sem_ch10.adb: Complete rewrite and new
! 	interface (to support Ada 95 and Ada 2005 units).
! 	Add Unbounded_IO files
! 	Add entries for Wide_Wide packages for AI-285
! 	Add list of containers packages to Ada 2005 unit list
! 
! 	* a-swuwti.ads, a-swuwti.adb, a-suteio.ads, a-suteio.adb: Updates to
! 	support new Unbounded_IO package cleanly.
! 
! 	* g-utf_32.ads, g-utf_32.adb: New files.
! 
! 	* Makefile.rtl: Add entry for g-utf_32
! 	Add new files for Unbounded_IO
! 	Adjust make file for new AI-285 wide wide packages
! 	Add AI-302 containers to the run time.
! 
! 	* a-stwibo.adb, a-stwibo.ads, a-stwisu.adb, a-stwisu.ads,
! 	a-strbou.ads, a-strbou.adb, a-strsup.ads, a-strsup.adb: New
! 	subprograms for AI-301.
! 
! 	* a-stwiun.adb, a-stwiun.ads: Minor reformatting.
! 
! 	* a-stunau.ads: Minor comment correction
! 
! 	* rtsfind.ads, rtsfind.adb: Add definitions for Wide_Wide attributes
! 	etc.
! 	Also extend Text_IO_Kludge to support Wide_Wide_Text_IO
! 	(Check_RPC): Update to match changes in expanded code.
! 	Clean up unused entity.
! 
! 	* exp_ch3.ads, exp_ch3.adb: Fix various places where Wide_Wide_String
! 	was not taken into account.
! 	This includes proper initialization with Normalize_Scalars.
! 	(Get_Simple_Init_Val): Major rewrite for initialize scalars and
! 	normalize scalars cases (particularly the latter) to do a better job
! 	of finding invalid representations.
! 
! 	* s-scaval.ads, s-scaval.adb: Add values for zero invalid values
! 
! 	* s-strops.ads, s-strops.adb: Remove string normalize routines, never
! 	used
! 
! 	* exp_dist.adb: Add support for wide wide character type
! 	(Expand_Receiving_Stubs_Bodies): For a package declaration that has a
! 	private part, generate stub bodies at the end of the private part,
! 	not the visible part.
! 	(Add_RACW_Primitive_Operations_And_Bodies): Add last missing code for
! 	PolyORB support.
! 	(Add_Obj_RPC_Receiver_Completion): Add PCS-specific subprograms and
! 	generic wrapper to execute final processing after completing the
! 	expansion of the RPC receiver for an RACW.
! 
! 	* snames.h, snames.ads, snames.adb: Add definitions for wide_wide
! 	packages and attributes.
! 	(Preset_Names): Addition of the new reserved words of Ada 2005,
! 	that is interface, overriding and synchronized.
! 	(Get_Pragma_Id): Give support to the use of the new reserved word
! 	"interface" as a pragma name.
! 	(Is_Pragma_Name): Give support to the use of the new reserved word
! 	"interface" as a pragma name.
! 	(Preset_Names): Add stream_size string for the Stream_Size Ada2005
! 	attribute implementation.
! 
! 	* exp_attr.adb (Expand_Attribute_Reference): Do not apply validity
! 	checks to entities that are output parameters of Asm operations.
! 	Handle the Stream_Size attribute.
! 	Add implementation of Wide_Wide_Value, Wide_Wide_Image, Wide_Wide_Width
! 
! 	* exp_imgv.ads, exp_imgv.adb: Add support for wide wide character type
! 
! 	* sem_attr.adb (Eval_Attribute): Raise compile-time constraint error
! 	for second parameter being 0.0.
! 	Add support for wide wide character type.
! 	(Analyze_Attribute, Eval_Attribute): Handle the Stream_Size attribute.
! 
! 	* s-valwch.adb, s-valwch.ads, s-imgwch.ads, s-imgwch.adb,
! 	s-wchstw.ads, s-wchstw.adb, s-wchwts.adb, s-wchwts.ads,
! 	s-widwch.adb, s-widwch.ads, s-wwdcha.adb, s-wwdcha.ads,
! 	s-wwdenu.adb, s-wwdenu.ads, s-wwdwch.adb, s-wwdwch.ads: Add support
! 	for wide wide character cases.
! 
! 	* cstand.adb: Create entities for Wide_Wide_Character and
! 	Wide_Wide_String.
! 
! 	* i-c.ads, i-c.adb: Fix not raising CE for null wide strings in
! 	accordance with AI-258.
! 	Add new declarations for 16/32 bit C character types (Part of AI285)
! 
! 	* einfo.ads, einfo.adb (Is_Obsolescent, Is_Ada_2005): New flag
! 	(Obsolescent_Warning): New field
! 	(Rep_Clause): New local subprogram used to share code. Returns the rep
! 	clause for which the name is given in parameter.
! 	(Has_Stream_Size_Clause): New routine.
! 	(Stream_Size_Clause): Idem. Implementation is based on Rep_Clause.
! 	(Address_Clause): Implementation is now using Rep_Clause.
! 	(Alignment_Clause): Idem.
! 	(Size_Clause): Idem.
! 
! 	* lib-xref.adb (Generate_Reference): Test for reference to Ada 2005
! 	entity in non-Ada 2005 mode and generate warning.
! 
! 	* par-prag.adb: Add handling of one argument form for pragma Ada_05.
! 	(Prag): Code cleanup. Remove old gnat pragma "overriding"
! 
! 	* sem_prag.adb: Add handling of one argument form for pragma Ada_05
! 	(Analyze_Pragma, case Elaborate, Elaborate_All): Do not disable warnings
! 	on the named unit if the pragma is not in the current compilation unit,
! 	so that elaboration calls in the current unit can set up an elaboration
! 	dependency on the named unit, as needed.
! 	(Analyze_Pragma, case Obsolescent): Allow pragma to be used for library
! 	subprogram as well as for subprograms declared within a package.
! 	(Analyze_Pragma, Sig_Flags): Code cleanup. Remove support for the GNAT
! 	pragma overriding.
! 
! 	* krunch.ads, krunch.adb: Add special handling of Wide_Wide (krunched
! 	to z) to avoid some instances of duplication for Wide_Wide packages.
! 
! 	* namet.ads, namet.adb: Implement encoding (WWhhhhhhhh) for wide wide
! 	characters.
! 
! 	* scn.adb: Char_Literal_Value field is now a Uint
! 
! 	* scng.adb: Significant rewrite to handle new Ada 2005 features
! 	allowing wide and wide wide characters in program text, e.g. for
! 	identifiers, as described in AI-285.
! 	(Set_Reserved): New procedure, makes setting up keywords cleaner.
! 	(Initialize_Scanner): Register the new reserved words of Ada 2005.
! 	(Scan): Give support to the new reserved words.
! 
! 	* par-ch2.adb (P_Identifier): Compiling in Ada95 mode, generate a
! 	warning notifying that interface, overriding, and synchronized are
! 	new reserved words.
! 	(P_Pragma): Allow the use of the new reserved word "interface" as
! 	a pragma name.
! 
! 	* gnatls.adb, gnatbind.adb,
! 	ali-util.adb, binde.adb, ali.ads, ali.adb: Code cleanup. Rename
! 	identifiers named "interface" to "SAL_Interface".
! 
! 	* bindgen.adb (Gen_Main_Ada): Add support for the new SEH
! 	(Structured Exception handling).
! 	(Gen_Main_C): Idem.
! 
! 	* bindgen.adb: 
! 	(Gen_Main_Ada): Set the default exit code if specified.
! 	(Gen_Main_C): Likewise.
! 	Part of *DC20-006.
! 	(Gen_Output_File_C): Remove redundant output of gnat_exit_status.
! 	Code cleanup. Rename identifiers named "interface" to "SAL_Interface"
! 
! 	* switch-b.adb, bindusg.adb, opt.ads, vms_data.ads: Add handling of
! 	new -Xnnn switch.
! 
! 	* mlib-prj.adb, mlib.adb: Code cleanup. Rename one identifier that
! 	has a collision with the new Ada 2005 "interface" reserved word.
! 
! 	* par-ch3.adb (P_Defining_Identifier): Compiling in Ada95 mode,
! 	generate a warning notifying that interface, overriding, and
! 	synchronized are new reserved words.
! 
! 	* scans.ads (Token_Type): Addition of the tokens corresponding to the
! 	new reserved words of Ada 2005: Tok_Interface, Tok_Overriding
! 	and Tok_Synchronized.
! 
! 	* sem_res.adb (Resolve_Actuals): Change error messages to refer to
! 	"dispatching" rather than "primitive" operations, since dispatching
! 	calls are now allowed to abstract formal subprograms (which are not
! 	primitive).
! 	Char_Literal_Value field is now a Uint
! 	(Resolve_Slice): If the prefix is an access to an unconstrained array,
! 	compute the actual subtype of the designated object to impose the proper
! 	index constraints.
! 	(Resolve_Selected_Component): Do not insert an access check if the
! 	prefix is an access type: such a node is expanded into an explicit
! 	dereference, on which the access check is performed anyway. Removes
! 	expensive duplicate checks.
! 	(Resolve_Call): Use new flag Is_Obsolescent and field
! 	Obsolescent_Warning so that pragma Obsolescent works on library
! 	subprograms.
! 	Add support for wide wide character type
! 	(Resolve_Allocator): Replace the error message on wrong null-exclusion
! 	value by a warning message.
! 	(Resolve_Type_Conversion): If the mixed-mode expression is interpreted
! 	as fixed-point, and one of the operands is non-static and universal, it
! 	can only be an illegal exponentiation operation, in which case there is
! 	no real value to retrieve.
! 
! 	* exp_strm.adb: Add support for wide wide character type
! 	(Build_Elementary_Input_Call): Compute the size of the stream element by
! 	querying the rep chain to find the Stream_Attribute attribute value.
! 	(Build_Elementary_Write_Call): Ditto.
! 
! 	* sem_aggr.adb: Char_Literal_Value field is now a Uint
! 	Add support for wide wide character type
! 	Replace the error messages on wrong null-exclusion value by warnings
! 	as described in Ada 2005.
! 	(Resolve_Extension_Aggregate): Document the fact that the error
! 	message on class-wide expressions in extensions aggregates.
! 
! 	* sem_case.adb: Add support for wide wide character type
! 
! 	* sem_ch13.adb: Add support for wide wide character type
! 	(Analyze_Attribute_Definition_Clause): Handle the Stream_Size attribute.
! 
! 	* sem_ch3.adb: Add support for wide wide character type
! 	(Process_Subtype): If constraint is illegal for the type, set Ekind of
! 	now-useless Itype, to prevent cascaded errors on a compiler built
! 	without -gnatp.
! 
! 	* sem_ch8.adb: Add with and use of Sem_Disp.
! 	(Analyze_Subprogram_Renaming): Replace unclean uses of
! 	Corresponding_Spec with Corresponding_Formal_Spec (and delete setting
! 	of Corresponding_Spec to Empty).
! 	(Attribute_Renaming): Replace use of Corresponding_Spec with
! 	Corresponding_ Formal_Spec and simplify condition.
! 	(Use_One_Package): Check that scope of homonym of identifier is defined,
! 	before checking whether it is a wrapper package.
! 	Add support for wide wide character type
! 
! 	* sem_eval.adb: Add support for wide wide character type.
! 	(Eval_Arithmetic_Op): Check for compile time known signed integer
! 	overflow in the non-static case.
! 	(Subtypes_Statically_Match): A formal scalar type and its base type do
! 	not statically match.
! 
! 	* sem_util.adb (Collect_Primitive_Operations): Minor change of "/=" to
! 	"not in" for test of N_Formal_Subprogram_Declaration (which is now a
! 	subtype).
! 	(Unit_Declaration_Node): Ditto.
! 	(Is_Variable_Prefix):  For the case of an indexed component whose prefix
! 	has a packed array type, the prefix has been rewritten into a type
! 	conversion. Determine variable-ness from the converted expression.
! 	Handle wide wide character cases.
! 
! 	* stand.ads: Add types Wide_Wide_Character and Wide_Wide_String
! 
! 	* stringt.ads, stringt.adb: Handle full UTF-32 range.
! 	Remove ["0A"] from comment, since it can look like a line terminator.
! 	Currently we don't permit this, but this is under discussion by the
! 	ARG, and it is easy enough to use a different example.
! 
! 	* s-wchcon.ads, s-wchcnv.ads, s-wchcnv.adb: Add new subprograms for
! 	handling UTF-32 encoding for wide wide character.
! 	Implement new brackets coding ["hhhhhhhh"]
! 	Add UTF-8 encodings for full UTF-32 range
! 
! 	* ttypes.ads: Add definition of Standard_Wide_Wide_Character_Size
! 
! 	* types.h, types.ads, types.adb: Wide_Wide_Character now has full 31
! 	bit range Add full UTF-32 support.
! 	(RT_Exception_Code): Addition of CE_Null_Not_Allowed; used to
! 	notify that constraint error will be raised at run-time
! 	because a null value is assigned to a null-excluding object.
! 	Remove some obsolete declarations and make Char_Code
! 	unsigned.
! 
! 	* a-except.adb (Rcheck_30): New subprogram. Addition of the message
! 	corresponding to CE_Null_Not_Allowed, and adjust the output of all the
! 	Rcheck subprograms.
! 
! 	* checks.adb (Check_Null_Not_Allowed): Replace the error message on
! 	wrong null-exclusion value by a warning message.
! 	(Enable_Range_Check): Do range check if the prefix is an
! 	explicit dereference whose designated object is an unconstrained array.
! 	Current algorithm for removing duplicate checks is over-eager in this
! 	case.
! 
! 	* sem_ch5.adb (Analyze_Assignment): Replace the error messages on wrong
! 	null-exclusion value by a warning message
! 
! 	* atree.h, atree.ads, atree.adb: Remove Char_Code field support
! 	completely. Add support for Uint2 field
! 
! 	sem_ch2.adb, exp_ch11.adb, exp_dbug.adb,
! 	exp_prag.adb: Char_Literal_Value field is now a Uint.
! 
! 	* exp_util.adb (Insert_Actions): Replace
! 	N_Formal_Subprogram_Declaration by
! 	N_Formal_{Abstract|Concrete}_Subprogram_Declaration.
! 	Char_Literal_Value field is now a Uint.
! 
! 	* sinfo.ads, sinfo.adb (Corresponding_Formal_Spec): New function
! 	defined for subprogram renaming declarations. When set, the field
! 	indicates the defining entity of a corresponding formal subprogram
! 	when the renaming corresponds to a formal subprogram association in an
! 	instantiation.
! 	(Set_Corresponding_Formal_Spec): New procedure to return
! 	Corresponding_Formal_Spec field.
! 	Minor changes of "=" to "in" in tests of N_Formal_Subprogram_Declaration
! 	(which is now a subtype).
! 	Char_Literal_Value field is now a Uint
! 
! 	* exp_disp.ads, exp_disp.adb (Make_DT): Generate code that moves the
! 	pointer to the base of the dispatch table.
! 	Minor changes to comments.
! 	(Controlling_Type): New function for determining the tagged type
! 	associated with a tagged primitive subprogram.
! 	(Expand_Dispatching_Call): Add support for a controlling actual that is
! 	directly a value of type Ada.Tag rather than a tagged object.
! 
! 	* i-cpp.ads, i-cpp.adb, a-tags.ads, a-tags.adb: Update documentation
! 	describing the new layout.
! 	(Dispatch_Table): The expander computes the actual array size, allocates
! 	the Dispatch_Table record accordingly, and generates code that displaces
! 	the base of the record after the Typeinfo_Ptr component. The access to
! 	these components is done by means of local functions.
! 	(Offset_To_Top): New function.
! 	(Typeinfo_Ptr): New function.
! 	(Get_TSD): Modified to access the new position of the TSD.
! 	(Set_TSD): Modified to save the TSD in its new position.
! 
! 	* par-ch12.adb (P_Formal_Subprogram_Declaration): Add parsing for the
! 	case of formal abstract subprograms. Add check and message for -gnat05.
! 	Update comments.
! 
! 	* sem_ch12.adb: Add with and use for Sem_Disp.
! 	(Analyze_Associations): Minor change from "=" to "in" for use of
! 	N_Formal_Subtype_Declaration (which is now a subtype).
! 	(Set_Analyzed_Formal): Minor changes from "=" to "in" for uses of
! 	N_Formal_Subtype_Declaration (which is now a subtype).
! 	(Analyze_Formal_Subprogram): Add handling for
! 	N_Formal_Abstract_Subprogram, marking the formal as abstract and
! 	dispatching, setting the controlling status of the formal parameters
! 	and result, and issuing an error if there is no controlling type for
! 	the formal subprogram.
! 	(Instantiate_Formal_Subprogram): Rather than setting Corresponding_Spec,
! 	which is an unclean use of that field, we set the new field
! 	Corresponding_Formal_Spec to make the formal subprogram available to
! 	processing in Analyze_Subprogram_Declaration.
! 	(Analyze_Formal_{Discrete, Decimal_Fixed_Point, Fixed_Point,
! 	Floating_Point, Modular_Integer, Signed_Integer}_Type: Make formal type
! 	Constrained, so that it is is does not statically match its anonymous
! 	base type.
! 
! 	* sem_ch6.adb (Analyze_Subprogram_Specification): Include test for
! 	abstract formal subprograms in error check for functions returning
! 	abstract types. Set scope of new designator for
! 	a parameterless subprogram, so that it is available when checking the
! 	body for nested subprograms, before full analysis of said body.
! 	(Analyze_Subprogram_Body): Warn on inlining bodies with nested
! 	subprogram only if inner one comes from source.
! 	(Analyze_Function_Call): If the call is given in object notation, the
! 	analysis of the name rewrites the node and analyzes it with the proper
! 	argument list. After analyzing the name, if the call has been rewritten
! 	and the result type is set, no further analysis is needed.
! 	(Analyze_Return_Type): Subsidiary to Process_Formals: analyze subtype
! 	mark in function specification, in a context where the formals are
! 	visible and hide outer homographs.
! 
! 	* sem_disp.adb (Check_Controlling_Type): Relax the check for same scope
! 	as the tagged type for the cases of abstract formal subprograms and
! 	renamings of those.  Clean up spec comments.
! 	(Check_Dispatching_Context): Add error message to indicate "abstract
! 	procedure", covering the case of a call to a formal abstract procedure
! 	that has statically tagged operands.
! 	(Check_Dispatching_Call): Check for the case of an actual given by
! 	a tag-indeterminate function call whose type is an ancestor of the
! 	containing call's associated tagged type. This situation can occur
! 	for inherited primitives with function defaults. In this case we
! 	use the tagged type's tag directly as the controlling argument for
! 	the calls.
! 	(Expand_Call): Name change on call to Expand_Dispatch_Call.
! 
! 	* sprint.adb (Sprint_Node_Actual): Split
! 	N_Formal_Subprogram_Declaration into two alternatives for the new
! 	cases N_Formal_Abstract_Subprogram_Declaration and
! 	N_Formal_Concrete_Subprogram_Declaration.
! 	Char_Literal_Value field is now a Uint.
! 
! 	* trans.c: Get rid of junk Uint2 reference.
! 	Char_Literal_Value field is now a Uint.
! 	(gnat_to_gnu, case N_Aggregate): Check TYPE_UNCHECKED_UNION_P.
! 	(gigi): Correct third arg to gimplify_body.
! 
! 	* ada-tree.h: (TYPE_UNCHECKED_UNION_P): New flag.
! 	(TYPE_LANG_FLAG_0): Check for record or union.
! 
! 	* treepr.adb: Char_Literal_Value field is now a Uint
! 
! 	* uintp.h, uintp.ads, uintp.adb: Add new routines UI_To_CC and
! 	UI_From_CC.
! 
! 	* widechar.ads, widechar.adb (Is_UTF_32_Non_Graphic): New function
! 	Add full UTF-32 support
! 	Char_Code is now 32 bits
! 
! 	* sinput.ads, sinput.adb (Skip_Line_Terminators): Extend to deal with
! 	wide character UTF_32 line terminators.
! 	Initialize Main_Source_File to avoid error when no main
! 	source is loaded.
! 
! 	* errout.adb (Finalize): Do not check Num_SRef_Pragmas
! 	(Main_Source_File) when no main source has been loaded, to avoid
! 	potential crash.
! 
! 2005-02-09  Robert Dewar  <dewar@adacore.com>
! 
!         * a-strunb.ads, a-strunb.adb: Add missing pragma Ada_05 statements
!         Fix name of Set routine
! 
! 	* a-strfix.ads, a-strfix.adb: Add new index functions from AI-301 to
! 	fixed packages.
! 
! 	* a-stwise.ads, a-stwise.adb, a-stwifi.ads, a-stwifi.adb,
! 	a-strsea.ads, a-strsea.adb: Add new index functions from AI-301 to
! 	fixed packages
! 
! 	* a-witeio.ads, a-witeio.adb, a-textio.ads, a-textio.adb: New function
! 	forms of Get_Line subprograms for AI-301.
! 
! 	* a-wtcoau.adb, a-wtcoau.ads, a-wtcoio.adb, a-wtcoio.ads,
! 	a-wtedit.adb, a-wtedit.adb, a-wtedit.ads, a-wttest.adb,
! 	a-wttest.ads, a-strmap.ads, a-strmap.adb, a-stwima.adb,
! 	a-stwima.ads: Minor reformatting.
! 
! 2005-02-09  Doug Rupp  <rupp@adacore.com>
! 	    Thomas Quinot  <quinot@adacore.com>
! 
! 	* adaint.c, adaint.h
! 	[VMS] (to_ptr32): New function.
! 	(MAYBE_TO_PTR32): New macro.
! 	(__gnat_portable_spawn,__gnat_portable_no_block_spawn): Adjust argv
! 	for pointer size.
! 	[VMS] (descriptor_s, ile_s): Use __char_ptr32 for adr field.
! 	[VMS] (#define fork()): Remove since unneccessary.
! 	(__gnat_set_close_on_exec): New routine to support
! 	GNAT.OS_Lib.Set_Close_On_Exec.
! 
! 	* g-expect.adb (Set_Up_Communications): Mark the pipe descriptors for
! 	the parent side as close-on-exec so that they are not inherited by the
! 	child.
! 
! 	* g-os_lib.ads, g-os_lib.adb (Set_Close_On_Exec): New subprogram to
! 	set or clear the FD_CLOEXEC flag on a file descriptor.
! 
! 2005-02-09  Eric Botcazou  <ebotcazou@adacore.com>
! 	    Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 
! 	Fix for c330001 - PR ada/19386
! 
! 	* decl.c: 
! 	(gnat_to_gnu_field): Do not necessarily invoke make_packable_type
! 	on the field if Pragma Component_Alignment (Storage_Unit).
! 	(gnat_to_gnu_entity, case object): Do not treat a renaming that has
! 	side-effects as if it were a constant; also make SAVE_EXPR to protect
! 	side-effects.
! 	(gnat_to_gnu_entity, case E_Record_Subtype): If have _Parent, make a
! 	UNION_TYPE.
! 	(make_dummy_type): Set TYPE_UNCHECKED_UNION_P.
! 	(components_to_record): Test it.
! 	Fix improper usage of REFERENCE_CLASS_P.
! 
! 	* utils2.c (build_binary_op, case MODIFY_EXPRP): Treat UNION_TYPE as
! 	RECORD_TYPE.
! 
! 	* utils2.c: Minor reformatting.
! 
! 	* utils.c (convert, case UNION_TYPE): Check TYPE_UNCHECKED_UNION;
! 	handle other cases like RECORD_TYPE.
! 
! 	* utils.c (gnat_pushdecl): Set TREE_NO_WARNING.
! 
! 2005-02-09  Ed Schonberg  <schonberg@adacore.com>
! 
! 	* exp_aggr.adb (Gen_Assign): If the expression is an aggregate for a
! 	component of an array of arrays in an assignment context, and the
! 	aggregate has component associations that require sliding on
! 	assignment, force reanalysis of the aggregate to generate a temporary
! 	before the assignment.
! 	(Must_Slide): Make global to the package, for use in Gen_Assign.
! 
! 2005-02-09  Ed Schonberg  <schonberg@adacore.com>
! 
! 	* exp_ch4.adb (Expand_Composite_Equality): If a component is an
! 	unchecked union with no inferable discriminants, return a
! 	Raise_Program_Error node, rather than inserting it at the point the
! 	type is frozen.
! 	(Expand_Record_Equality, Component_Equality): Handle properly the case
! 	where some subcomponent is an unchecked union whose generated equality
! 	code raises program error.
! 
! 2005-02-09  Doug Rupp  <rupp@adacore.com>
! 
! 	* gnatbl.c: [VMS] (_POSIX_EXIT): Define.
! 	[VMS] (#define exit hack): Remove.
! 
! 2005-02-09  Pascal Obry  <obry@adacore.com>
! 	    Arnaud Charlet <charlet@adacore.com>
! 
! 	* init.c (__gnat_initialize): Add a new parameter eh which contains the
! 	address of the exception registration. The Win32 version of this
! 	routine calls __gnat_install_SEH_handler() to initialize the SEH
! 	(Structured Exception Handling) handler.
! 	(__gnat_error_handler) [Win32]: Removed. Not needed as we use
! 	SEH (Structured Exception Handling) now.
! 	(__gnat_install_handler) [Win32]: Nothing to do now as we use SEH.
! 	(__gnat_initialize for ppc-vxworks): Adjust comments and the
! 	preprocessor condition protecting the call to the extra eh setup
! 	subprogram, which is only available for the ppc target.
! 	(__gnat_clear_exception_count): replaced reference to
! 	variable taskIdCurrent by call to taskIdSelf(), cleaner.
! 
! 	* seh_init.c: New file.
! 
! 	* Make-lang.in: (GNAT_ADA_OBJS): Add seh_init.o.
! 	(GNATBIND_OBJS): Idem.
! 
! 	* misc.c (gnat_parse_file): Update call to __gnat_initialize. This
! 	routine takes a new parameter (a pointer to the exception registration
! 	for the SEH (Structured Exception Handling) support.
! 
! 	* raise.h: (__gnat_install_SEH_handler): New prototype.
! 	Update copyright notice.
! 
! 	* s-tassta.adb (Task_Wrapper): Declare the exception registration
! 	record and initialize it by calling __gnat_install_SEH_handler.
! 
! 2005-02-09  Vincent Celier  <celier@adacore.com>
! 
! 	* make.adb (Gnatmake): Do not fail when the main project has no object
! 	directory.
! 
! 2005-02-09  Doug Rupp  <rupp@adacore.com>
! 
! 	* Makefile.in [VMS] (LN,LN_S): Define as cp -p
! 	Rename s-asthan-vms.adb to s-asthan-vms-alpha.adb.
! 	[VMS]: Add translations for g-enblsp.adb.
! 
! 	* s-asthan-vms.adb: Removed.
! 	* s-asthan-vms-alpha.adb: Added.
! 
! 2005-02-09  Pascal Obry  <obry@adacore.com>
! 
! 	* Makefile.in (LIBGNAT_SRCS): Add seh_init.c.
! 	(LIBGNAT_OBJS): Add seh_init.o.
! 
! 2005-02-09  Arnaud Charlet  <charlet@adacore.com>
! 
! 	PR ada/16592
! 
! 	* Makefile.in: Link all gnat tools with -static-libgcc, since
! 	-shared-libgcc is now used by default on some systems (e.g. linux with
! 	recent binutils).
! 	Remove references to Makefile.prolog/generic, no longer used.
! 
! 2005-02-09  Vincent Celier  <celier@adacore.com>
! 
! 	* prj-makr.adb (Process_Directory): Put file name in canonical case
! 	before matching against the patterns.
! 	If gnatname has been invoked as <prefix>-gnatname
! 	then invoke the compiler as <prefix>-gcc, not just "gcc".
! 
! 2005-02-09  Ed Schonberg  <schonberg@adacore.com>
! 
! 	* sem_ch4.adb (Analyze_Selected_Component): Create Actual_Subtype even
! 	with expansion disabled. The actual subtype is needed among other
! 	places when the selected component appears in the context of a loop
! 	bound, and denotes a packed array.
! 	(Operator_Check): Always use the first subtype in the
! 	error message, to avoid the appearance of internal base types.
! 	(Transform_Object_Operation): Copy each actual in full
! 	to the parameter associations of the constructed call, rather than
! 	using the shallow copy mechanism of New_Copy_List. This ensures that
! 	the chaining of named associations is done properly.
! 	(Complete_Object_Operation): Rewrite node, rather than
! 	replacing it, so that we can trace back to the original selected
! 	component.
! 
! 	* sem_elab.adb (Set_Elaboration_Constraint): For initialization calls,
! 	and calls that use object notation, if the called function is not
! 	declared  in a withed unit, place the elaboration constraint on the
! 	unit in the context that makes the function accessible.
! 	(Check_Elab_Subtype_Declaration): Check whether a subtype declaration
! 	imposes an elaboration constraint between two packages.
! 
! 2005-02-09  Ed Schonberg  <schonberg@adacore.com>
! 
! 	* sem_ch7.adb (Uninstall_Declarations): Exchange full and private
! 	views of a private type after handling its private dependents, to
! 	maintain proper stack discipline between entry and exit from the
! 	package.
! 
! 2005-02-09  Cyrille Comar  <comar@adacore.com>
! 
! 	* s-finimp.adb: (Finalize_List): Optimize in the no-abort case.
! 	Minor reformatting.
! 
! 2005-02-09  Arnaud Charlet  <charlet@adacore.com>
! 
! 	* s-tporft.adb (Register_Foreign_Thread): Initialize Task_Image[_Len]
! 	fields for foreign threads.
! 
! 2005-02-09  Doug Rupp  <rupp@adacore.com>
! 
! 	* s-vaflop.adb: Add pragma Warnings (Off) to eliminate infinite
! 	recursion warnings when compiled with -gnatdm.
! 
! 2005-02-09  Robert Dewar  <dewar@adacore.com>
! 
! 	* usage.adb: Add line for switch -gnat05 (allow Ada 2005 extensions)
! 	Slight fix to documentation of -gnaty with no parameters
! 
! 	* xr_tabls.ads: Add ??? comment for missing overall comment
! 
! 	* xsinfo.adb: Make default file name be sinfo.h, since this is what
! 	we now use by default.
! 
! 	* xsnames.adb: Adjust end of file test to look for five space followed
! 	by '#' instead of six spaces. The format of xsnames.adb was modified
! 	in the last update.
! 
! 	* a-numeri.ads: Add reference to AI-388 for greek letter pi
! 	identifier.
! 
! 	* clean.adb: Minor reformatting.
! 
! 	* gnat1drv.adb, gnatfind.adb, gnatlink.adb, gnatmem.adb,
! 	gnatname.adb: Minor reformatting
! 	Add 2005 to copyright output when utility is run
! 
! 	* csets.adb: Eliminate obsolete comment
! 
! 	* debug.adb, g-socket.ads, i-cobol.adb: Minor reformatting throughout
! 	Update comments.
! 
! 	* sem_eval.ads (Eval_Integer_Literal): Do not inline this, not useful.
! 
! 2005-02-09  Sergey Rybin  <rybin@adacore.com>
! 
! 	* gnat_ugn.texi: Add to the gnatpp section the paragraph describing
! 	the difference between compact and incompact layout and add the record
! 	representation clause to the example illustrating different layouts.
! 	Add the description of '-A5' gnatpp option ("align 'AT' keywords in
! 	component clauses").
! 
! 2005-02-09  Florian Villoing  <villoing@adacore.com>
! 
! 	* gnat_ugn.texi: Fix typos.
! 	Use @command to display 'gcc', 'gnatbind', etc. insted of @code or
! 	@file.
! 	Make proper use of @ref, @xref and @pxref to avoid duplication of "see"
! 	in the generated documentation.
! 
! 2005-02-09  Arnaud Charlet  <charlet@adacore.com>
! 
! 	* gnat_ugn.texi: Remove all mentions of FSU threads, which are no
! 	longer supported.
! 	Update linker wrapper when linking with non GNU C++.
! 
! 2005-02-09  Pascal Obry  <obry@adacore.com>
! 
! 	* gnat_ugn.texi: 
! 	Document the procedure to debug the DllMain routine on Windows.
! 	Add note about -funwind-tables and mixed Ada and C/C++ programming in
! 	ZCX mode.
! 	Document new BIND qualifer /RETURN_CODES=VMS.
! 
! 2005-02-09  Ben Brosgol  <brosgol@adacore.com>
! 
! 	* gnat_ugn.texi: Wordsmithing of "GNAT and Libraries" chapter
! 	Edited gnatmetric chapter
! 
! 2005-02-09  Robert Dewar  <dewar@adacore.com>
! 
! 	* gnat_rm.texi: 
! 	Changes to document new wide wide character support
! 	For AI-285
! 	Update documentation on Normalize_Scalars and Initialize_Scalars
! 
! 2005-02-09  Pascal Obry  <obry@adacore.com>
! 
! 	* s-taprop-mingw.adb, s-soflin.ads: Minor reformatting.
! 
! 2005-02-09  Jose Ruiz  <ruiz@adacore.com>
! 
! 	* s-osinte-vxworks.ads (taskPriorityGet): Add this function (imported
! 	from the VxWorks kernel) that is needed for getting the active
! 	priority of the different tasks.
! 
! 	* s-atacco.ads, s-atacco.adb (Nothing): Remove this dummy procedure.
! 	Use a pragma Elaborate_Body in the spec file instead.
! 	Noticed by code reading.
! 
! 2005-02-09  Thomas Quinot  <quinot@adacore.com>
! 
! 	* exp_util.ads: Minor correction in comment.
! 
! 2005-02-09  Arnaud Charlet  <charlet@adacore.com>
! 
! 	* s-taprop.ads (Initialize): Update comments. Remove pragma Inline,
! 	since this procedure is now too complex to be worth inlining.
! 
! 2005-02-09  Richard Henderson  <rth@redhat.com>
! 
! 	* utils.c (gnat_define_builtin): Remove.
! 	(gnat_install_builtins): Use build_common_builtin_nodes.
! 
! 2005-02-09  Arnaud Charlet  <charlet@adacore.com>
! 
! 	* a-rbtgso.adb, a-crbtgo.ads, a-crbtgo.adb, a-crbtgk.ads,
! 	a-crbtgk.adb, a-crbltr.ads, a-coprnu.ads, a-coprnu.adb,
! 	a-coorse.ads, a-coorse.adb, a-convec.ads, a-convec.adb,
! 	a-contai.ads, a-coinve.ads, a-coinve.adb, a-cohata.ads,
! 	a-cohama.ads, a-cohama.adb, a-ciorse.ads, a-ciorse.adb,
! 	a-cihama.ads, a-cihama.adb, a-cidlli.ads, a-cidlli.adb,
! 	a-chtgop.ads, a-chtgop.adb, a-cgcaso.ads, a-cgcaso.adb,
! 	a-cgarso.ads, a-cgarso.adb, a-cdlili.ads, a-cdlili.adb,
! 	a-cgaaso.adb, a-coormu.adb, a-ciormu.adb, a-cihase.adb,
! 	a-cihase.ads, a-cohase.adb, a-cohase.ads, a-ciorma.ads,
! 	a-coorma.ads, a-swunha.ads, a-stunha.ads, a-ciormu.ads,
! 	a-coormu.ads, a-rbtgso.ads, a-swunha.adb, a-stunha.adb,
! 	a-cgaaso.ads, a-ciorma.adb, a-coorma.adb, a-secain.adb,
! 	a-secain.ads, a-slcain.ads, a-slcain.adb, a-shcain.ads,
! 	a-shcain.adb, a-chtgke.ads, a-chtgke.adb, a-stwiha.ads,
! 	a-stwiha.adb, a-strhas.ads, a-strhas.adb, a-chzla1.ads,
! 	a-chzla9.ads, a-lfztio.ads, a-liztio.ads, a-llfzti.ads,
! 	a-llizti.ads, a-sfztio.ads, a-siztio.ads, a-ssizti.ads,
! 	a-stzbou.adb, a-stzbou.ads, a-stzfix.adb, a-stzfix.ads,
! 	a-stzhas.adb, a-stzhas.ads, a-stzmap.adb, a-stzmap.ads,
! 	a-stzsea.adb, a-stzsea.ads, a-stzsup.adb, a-stzsup.ads,
! 	a-stzunb.adb, a-stzunb.ads, a-swunau.adb, a-swunau.ads,
! 	a-szmzco.ads, a-szunau.adb, a-szunau.ads, a-szunha.adb,
! 	a-szunha.ads, a-szuzti.adb, a-szuzti.ads, a-tiunio.ads,
! 	a-wwunio.ads, a-ztcoau.adb, a-ztcoau.ads, a-ztcoio.adb,
! 	a-ztcoio.ads, a-ztcstr.adb, a-ztcstr.ads, a-ztdeau.adb,
! 	a-ztdeau.ads, a-ztdeio.adb, a-ztdeio.ads, a-ztedit.adb,
! 	a-ztedit.ads, a-ztenau.adb, a-ztenau.ads, a-ztenio.adb,
! 	a-ztenio.ads, a-ztexio.adb, a-ztexio.ads, a-ztfiio.adb,
! 	a-ztfiio.ads, a-ztflau.adb, a-ztflau.ads, a-ztflio.adb,
! 	a-ztflio.ads, a-ztgeau.adb, a-ztgeau.ads, a-ztinau.adb,
! 	a-ztinau.ads, a-ztinio.adb, a-ztinio.ads, a-ztmoau.adb,
! 	a-ztmoau.ads, a-ztmoio.adb, a-ztmoio.ads, a-zttest.adb,
! 	a-zttest.ads, a-zzunio.ads: New files. Part of new Ada 2005
! 	library.
! 
! 2005-01-27  Laurent GUERBY <laurent@guerby.net>
! 
! 	* Makefile.in: Fix a-intnam.ads from previous commit,
! 	add 2005 to copyright.
! 	* a-intman-rtems.ads: Renamed to...
! 	* a-intnam-rtems.ads:
! 
! 2005-01-27  Laurent GUERBY <laurent@guerby.net>
! 
! 	* Makefile.in: Rename GNAT RTEMS specific files.
! 	* 5rtpopsp.adb, 4rintnam.ads, 5rosinte.adb,  
!  	5rosinte.ads, 5rparame.adb: Replaced by files below.
! 	* s-tpopsp-rtems.adb, a-intman-rtems.ads, s-osinte-rtems.adb,
! 	s-osinte-rtems.ads, s-parame-rtems.adb: Replace files above.
! 
! 2005-01-27  Joel Sherrill <joel.sherrill@oarcorp.com>
! 	    Laurent GUERBY <laurent@guerby.net>
! 
! 	PR ada/19488
! 	* 5rosinte.ads: Add No_Key constant.
!         * 5rtpopsp.adb: Initialize ATCB_Key with No_Key and fix style.
!         * gsocket.h: Do not include <sys/socket.h> with RTEMS either.
! 
! 2005-01-26  Laurent GUERBY <laurent@guerby.net>
! 
! 	PR ada/19414
! 	* i-cobol.adb (Valid_Numeric): Handle zero length case.
! 	
! 2005-01-20  Richard Henderson  <rth@redhat.com>
! 
! 	* Makefile.in (alpha-linux, LIBGNAT_TARGET_PAIRS): Use
! 	a-intnam-linux.ads and system-linux-alpha.ads.
! 	* a-intnam-linux-alpha.ads: Remove file.
! 	* s-osinte-linux-alpha.ads (SIGUNUSED, SIGSTKFLT, SIGLOST): New.
! 	* system-linux-alpha.ads: New file.
! 
! 2005-01-18  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR ada/13470
! 	* a-stunau.adb (Get_String): Don't return U.Reference, but Ret that is
! 	set to the new string.
! 
! 2005-01-18  Toon Moene  <toon@moene.indiv.nluug.nl>
! 
! 	* system-linux-ppc.ads: Set ZCX_By_Default and GCC_ZCX_Support
! 	to True.
! 
! 2005-01-18  Richard Henderson  <rth@redhat.com>
! 
! 	* Makefile.in (LIBGNAT_TARGET_PAIRS, TOOLS_TARGET_PAIRS, MISCLIB,
! 	THREADSLIB, GNATLIB_SHARED, PREFIX_OBJS, LIBRARY_VERSION): Specialize
! 	for alpha-linux.
! 	* s-osinte-linux-alpha.ads, a-intnam-linux-alpha.ads: New files.
! 
! 2005-01-14  Andrew Pinski  <pinskia@physics.uc.edu>
! 
! 	* system-darwin-ppc.ads (ZCX_By_Default): Change to True.
! 	(GCC_ZCX_Support): Likewise.
! 
! 2005-01-11  Bastian Blank  <waldi@debian.org>
! 
! 	* system-linux-s390.ads: Define Preallocated_Stacks.
! 	* system-linux-s390x.ads: Likewise.
! 
! 2005-01-04  Arnaud Charlet  <charlet@adacore.com>
! 
! 	* gnat_ugn.texi: Fix texi errors with null variables.
! 
! 2005-01-03  Thomas Quinot  <quinot@adacore.com>
! 
! 	* gen-soccon.c: New utility program to generate g-soccon.ads
! 	automatically.
! 
! 	* socket.c, gsocket.h: Split inclusion of system header files into a
! 	gsocket.h file separated from socket.c, to allow reuse in gen-soccon.c.
! 
! 	* g-soccon.ads, g-soccon-unixware.ads, g-soccon-tru64.ads,
! 	g-soccon-aix.ads, g-soccon-irix.ads, g-soccon-hpux.ads,
! 	g-soccon-interix.ads, g-soccon-solaris.ads, g-soccon-mingw.ads,
! 	g-soccon-vxworks.ads, g-soccon-freebsd.ads: Note that these files
! 	should not be edited by hand anymore, but should be regenerated using
! 	gen-soccon.
! 
! 2005-01-03  Robert Dewar  <dewar@adacore.com>
! 	    Ed Schonberg  <schonberg@adacore.com>
! 	    Vincent Celier  <celier@adacore.com>
! 
! 	* s-atacco.ads, a-direio.adb: Protect use of 'Constrained by warnings
! 	on/off, since this is an obsolescent feature, for which we now generate
! 	a warning.
! 
! 	* sem_attr.adb (Analyze_Attribute, case Constrained): Issue warning if
! 	warning mode is set and obsolescent usage of this attribute occurs.
! 	(Resolve_Access, case 'Access): Note that GNAT uses the context type to
! 	disambiguate overloaded prefixes, in accordance with AI-235. GNAT code
! 	predates, and partly motivates, the adoption of the AI.
! 	Implement new Ada 2005 attribute Mod
! 
! 	* exp_attr.adb (Expand_N_Attribute_Reference): Implement Ada 2005
! 	attribute Mod.
! 
! 	* par-ch4.adb (P_Name): In Ada 2005 mode, recognize new attribute Mod
! 
! 	* snames.h, snames.ads, snames.adb: Add entry for No_Dependence for
! 	pragma restrictions.
! 	New entry for Ada 2005 attribute Mod.
! 
! 	* par-prag.adb: 
! 	Add recognition of new pragma Restrictions No_Dependence
! 	Recognize restriction No_Obsolescent_Features at parse time
! 
! 	* bcheck.adb: Add circuitry for checking for consistency of
! 	No_Dependence restrictions.
! 
! 	* lib-writ.ads, lib-writ.adb: Output new R lines for No_Dependence
! 	restrictions.
! 
! 	* restrict.ads, restrict.adb: Add subprograms to deal with
! 	No_Dependence restrictions.
! 
! 	* rtsfind.adb: Check that implicit with's do not violate No_Dependence
! 	restrictions.
! 
! 	* sem_ch3.adb, sem_ch11.adb, sem_ch13.adb, lib-xref.adb,
! 	sem_attr.adb: Add check for new restriction No_Obsolescent_Features
! 
! 	* scn.ads, prj-err.ads, prj-err.adb, ali-util.adb, gprep.adb: Add new
! 	dummy parameter to scng instantiation.
! 	Needed for new restriction No_Obsolescent_Features
! 
! 	* scn.adb: (Obsolescent_Check): New procedure
! 	Needed for new restriction No_Obsolescent_Features
! 
! 	* scng.ads, scng.adb: Always allow wide characters in Ada 2005 mode, as
! 	specified by AI-285, needed for implementation of AI-388 (adding greek
! 	pi to Ada.Numerics).
! 	Add new generic formal to scng, needed for new restriction
! 	No_Obsolescent_Features.
! 
! 	* s-rident.ads: Add new restriction No_Obsolescent_Features.
! 
! 	* ali.ads, ali.adb: Adjustments for reading new No_Dependence
! 	restrictions lines.
! 	(Scan_ALI): When finding an unexpected character on an R line, raise
! 	exception Bad_R_Line, instead of calling Fatal_Error, so that, when
! 	Ignore_Errors is True, default restrictions are set and scanning of the
! 	ALI file continues with the next line. Also, when Bad_R_Line is raised
! 	and Ignore_Errors is True, skip to the end of le line.
! 
! 	* sem_ch10.adb: Check that explicit with's do not violate
! 	No_Dependence restrictions.
! 	(Install_Withed_Unit): Add code to implement AI-377 and diagnose
! 	illegal context clauses containing child units of instance.
! 
! 	* sem_prag.adb: Processing and checking for new No_Dependence
! 	restrictions.
! 	(Analyze_Pragma, case Psect_Object): Call Check_Arg_Is_External_Name to
! 	analyze and check the External argument.
! 
! 	* a-numeri.ads: Add greek letter pi as alternative spelling of Pi
! 
! 2005-01-03  Robert Dewar  <dewar@adacore.com>
! 
! 	* atree.adb: Add a fifth component to entities
! 	This allows us to add 32 flags and four new fields
! 
! 	* atree.ads: Add a fifth component to entities
! 	This allows us to add 32 flags and four new fields
! 
! 	* einfo.ads, einfo.adb: Document new fields and new flags now available
! 	Add routines for printing new fields
! 
! 	* treepr.adb: Call routines to print out additional fields if present
! 
! 2005-01-03  Arnaud Charlet  <charlet@adacore.com>
! 
! 	* bld.ads, bld.adb, bld-io.ads, bld-io.adb, gprcmd.adb,
! 	gpr2make.ads, gpr2make.adb: Remove gpr2make, replaced by gprmake.
! 
! 	* Makefile.in: Add support to build shared Ada libraries on solaris x86
! 	Remove gpr2make, replaced by gprmake.
! 	Remove references to gnatmem and libaddr2line.
! 	Add indepsw.adb<indepsw-linux.adb to TOOLS_TARGET_PAIRS for IA64 linux.
! 	(gnatlib-shared-darwin): Add "-fno-common" to GNATLIBCFLAGS.
! 	Add support for specialized version of Ada.Numerics.Aux for Darwin: use
! 	a-numaux-darwin.ads and a-numaux-darwin.adb
! 	Enable mlib-tgt-lynxos.adb on lynxos.
! 
! 	* Make-lang.in: Remove rules for gpr2make.
! 	When generating sdefault.adb, do not call Relocate_Path
! 	on S3 for function Target_Name, as it is not a path.
! 	Remove references to gnatmem and libaddr2line.
! 
! 	* a-numaux-darwin.ads, a-numaux-darwin.adb, g-soccon-darwin.ads: New
! 	files.
! 
! 2005-01-03  Samuel Tardieu  <tardieu@adacore.com>
! 
! 	* checks.adb (Apply_Alignment_Check): Generate a warning if an object
! 	address is incompatible with its base type alignment constraints when
! 	this can be decided statically.
! 
! 2005-01-03  Olivier Hainque  <hainque@adacore.com>
! 
! 	* decl.c (compatible_signatures_p): New function. The intended purpose
! 	is to check if two function signatures for a call-site and a callee are
! 	compatible enough for the call to be valid. The underlying purpose is
! 	to check if a call to a mapped builtin is using the right interface.
! 	The current code actually does not check antyhing - this a placeholder
! 	for future refinements.
! 	(gnat_to_gnu_entity) <E_Subprogram_Call>: Add preliminary bits to handle
! 	builtin calls for convention Intrinsic.
! 
! 	* gigi.h (builtin_decl_for): Declare (new function).
! 
! 	* utils.c (gnat_install_builtins): Install the target specific builtins.
! 	(builtin_decl_for): New function, provide a dummy body for now.
! 
! 2005-01-03  Geert Bosch  <bosch@adacore.com>
! 
! 	* eval_fat.adb: (Eps_Model,Eps_Denorm): Remove, no longer used.
! 	(Succ): Re-implement using Scaling, Exponent and Ceiling attributes.
! 	(Pred): Implement in terms of Succ.
! 	
! 	* trans.c (convert_with_check): Reimplement conversion of float to
! 	integer.
! 
! 2005-01-03  Ed Schonberg  <schonberg@adacore.com>
! 	    Vincent Celier  <celier@adacore.com>
! 
! 	* exp_aggr.adb (Packed_Array_Aggregate_Handled): The values of the
! 	bounds can be negative, and must be declared Int, not Nat.
! 
! 	* sem_elim.adb (Line_Num_Match): Correct wrong code when index in an
! 	array is checked after using the index in the array.
! 
! 	* makegpr.adb (Add_Switches): Check if there is a package for the
! 	processor. If there is no package, do not look for switches.
! 
! 2005-01-03  Ed Schonberg  <schonberg@adacore.com>
! 
! 	* exp_ch3.adb (Stream_Operations_OK): Predicate to determine when the
! 	generation of predefined stream operations (specs and bodies) should
! 	proceed. Under various restrictions these subprograms must not be
! 	generated.
! 
! 2005-01-03  Thomas Quinot  <quinot@adacore.com>
! 
! 	* exp_dist.adb: 
! 	Declare subprogram index in Build_RPC_Receiver_Body, to reduce the
! 	amount of PCS-specific code in RACW stubs generation.
! 	(Copy_Specification): Set Etype on copied formal parameter entities, as
! 	this information is needed for PolyORB stubs generation.
! 	(PolyORB_Support.Build_Subprogram_Receiving_Stubs): Remove unused
! 	variable Dynamic_Async.
! 	(Build_Subprogram_Receiving_Stubs): Make PCS-specific
! 	(Build_RPC_Receiver_Specification): Make generic again, as recent
! 	changes have allowed RPC receivers to have the same profile for both
! 	variants of the PCS.
! 	Reorganise RPC receiver generation to reduce differences between the
! 	structure of GARLIC and PolyORB RPC receivers.
! 	(Add_Receiving_Stubs_To_Declarations): Make this subprogram
! 	PCS-specific.
! 	Simplify elaboration code for RCI packages.
! 
! 	* s-parint.ads, s-parint.adb, rtsfind.ads: Reorganise RPC receiver
! 	generation to reduce differences between the structure of GARLIC and
! 	PolyORB RPC receivers.
! 
! 	* s-stratt.adb: Fix typo in comment.
! 
! 2005-01-03  Thomas Quinot  <quinot@adacore.com>
! 
! 	* exp_ch7.ads (Make_Final_Call): Rewrite comment (was incorrectly
! 	copied from Make_Init_Call).
! 
! 	* exp_strm.adb (Build_Mutable_Record_Read_Procedure): Do component
! 	reads and assignments on a temporary variable declared with appropriate
! 	discriminants.
! 
! 2005-01-03  Robert Dewar  <dewar@adacore.com>
! 
! 	* i-c.adb (To_C): Raise CE if string is null and Append_Null
! 
! 2005-01-03  Robert Dewar  <dewar@adacore.com>
! 
! 	* i-cstrin.adb (Update): Do not append a null in form called with a
! 	String. This avoids unintended behavior.
! 
! 2005-01-03  Arnaud Charlet  <charlet@adacore.com>
! 
! 	PR ada/17527
! 	* init.c: Fix warnings on Free BSD section.
! 
! 2005-01-03  Arnaud Charlet  <charlet@adacore.com>
! 
! 	PR ada/16949
! 	* sinfo.ads: Fix obsolete reference to xsinfo.spt (replaced by
! 	xsinfo.adb).
! 
! 2005-01-03  Vincent Celier  <celier@adacore.com>
! 
! 	* make.adb (Collect_Arguments_And_Compile): Do not attempt to build
! 	libraries when Unique_Compile is True (-u switch).
! 	(Gnatmake): ditto.
! 
! 2005-01-03  Robert Dewar  <dewar@adacore.com>
! 
! 	* namet.adb (Get_Decoded_Name_With_Brackets): Fix case of not allowing
! 	upper case letter or underscore after W, as allowed by spec.
! 
! 2005-01-03  Arnaud Charlet  <charlet@adacore.com>
! 
! 	* s-osinte-darwin.ads, s-osinte-darwin.adb: Clean up
! 	darwin port by using proper type definitions from header files.
! 	Use SIGTERM instead of SIGABRT for SIGADAABORT.
! 
! 2005-01-03  Robert Dewar  <dewar@adacore.com>
! 
! 	* par.adb: Enhance error message handling for configuration file
! 	pragmas.
! 
! 2005-01-03  Robert Dewar  <dewar@adacore.com>
! 
! 	* s-arit64.adb (Double_Divide): Put back changes that got accidentally
! 	removed during the previous update (test properly for case of dividing
! 	largest negative number by -1, which generates overflow).
! 
! 2005-01-03  Ed Schonberg  <schonberg@adacore.com>
! 	    Sergey Rybin  <rybin@adacore.com>
! 
! 	* sem_ch12.adb (Analyze_Package_Instantiation): Create a separate node
! 	to use as the defining identifier for a formal package.
! 	(Remove_Parent): If the instance takes place within (an instance of)
! 	a sibling, preserve private declarations of common parent.
! 
! 2005-01-03  Ed Schonberg  <schonberg@adacore.com>
! 
! 	* sem_ch4.adb (Has_Fixed_Op): New predicate in Check_Arithmetic_Pair,
! 	to determine whether one of the operands is a fixed-point type for
! 	which a user-defined multiplication or division operation might be
! 	defined.
! 
! 	* sem_res.adb (Valid_Conversion): The legality rules for conversions
! 	of access types are symmetric in Ada 2005: either designated type can
! 	be unconstrained.
! 
! 2005-01-03  Vincent Celier  <celier@adacore.com>
! 
! 	* s-fileio.adb (Temp_File_Record): Change length of string component
! 	Name from L_tmpnam + 1 to max_path_len + 1.
! 
! 2005-01-03  Arnaud Charlet  <charlet@adacore.com>
! 
! 	* s-tasini.ads, s-tasini.adb (Undefer_Abortion): Handle case of
! 	Self_Id.Deferral_Level = 0.
! 	(Do_Pending_Action): Move this function to the spec.
! 
! 	* s-tasren.adb (Selective_Wait [Terminate_Selected]): Call
! 	Do_Pending_Action explicitely when needed, in case we're using
! 	No_Abort restrictions.
! 
! 	* s-tassta.adb (Create_Task): If Abort is not allowed, reset the
! 	deferral level since it will not get changed by the generated code.
! 	Keeping a default value of 1 would prevent some operations (e.g.
! 	select or delay) to proceed successfully.
! 
! 2005-01-03  Ben Brosgol  <brosgol@adacore.com>
! 	    Robert Dewar  <dewar@adacore.com>
! 	    Cyrille Comar  <comar@adacore.com>
! 
! 	* ug_words, gnat_ugn.texi: Added alpha-ivms transitioning section to
! 	porting guide chapter (vms version).
! 	Revised doc title (removed "for native platforms") and subtitle.
! 	Add discussion on warning flag for obsolescent features. First we
! 	note that it applies to obsolete GNAT features, which was previously
! 	omitted. Second we contrast the behavior with that of the new
! 	Ada 2005 AI-368 restriction No_Obsolescent_Features.
! 	Preliminary rewriting of GNAT & libraries chapter in order to take
! 	into account default project locations & new project manager
! 	capabilities.
! 
! 2005-01-03  Robert Dewar  <dewar@adacore.com>
! 
! 	* cstand.adb (Create_Operators): Clean up format and documentation of
! 	unary and binary operator result tables. No change in code, just
! 	reformatting and addition of comments.
! 
! 	* errout.ads, gnatfind.adb, s-maccod.ads, sem.adb,
! 	sem_ch2.adb: Minor reformatting
! 
! 	* atree.ads, elists.ads, lib.ads, namet.ads, nlists.ads, repinfo.ads,
! 	sinput.ads, stringt.ads, uintp.ads, urealp.ads: Minor clarification to
! 	comments for Tree_Read and Tree_Write.
! 
! 2005-01-03  Pascal Obry  <obry@adacore.com>
! 
! 	* exp_attr.ads: Minor reformatting.
! 
! 2005-01-03  Romain Berrendonner  <berrendo@adacore.com>
! 
! 	* comperr.adb (Compiler_Abort): Add specialized message for GAP
! 	versions.
! 
! 2005-01-03  Ed Schonberg  <schonberg@adacore.com>
! 
! 	* exp_pakd.adb (Create_Packed_Array_Type): Add a guard to check
! 	whether the ancestor type is private, as may be the case with nested
! 	instantiations.
! 
! 2004-12-30  Sohail Somani <sohail@sohailsomani.com>
! 
! 	PR ada/19128
! 	* trans.c (gnat_to_gnu): Fix typo: Use correct return variable.
! 
! 2004-12-23  Eric Botcazou  <ebotcazou@libertysurf.fr>
! 
! 	* trans.c (Attribute_to_gnu): Adjust call to get_inner_reference.
! 	* utils2.c (build_unary_op): Likewise.
! 
! 2004-12-22  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 
! 	* trans.c (mark_visited): Set TYPE_SIZES_GIMPLIFIED.
! 
! 2004-12-19  Richard Henderson  <rth@redhat.com>
! 
! 	* trans.c (gigi): Update gimplify_body call.
! 
! 2004-12-09  Nathan Sidwell  <nathan@codesourcery.com>
! 
! 	* decl.c (gnat_substitute_in_type): Remove SET_TYPE case.
! 
! 2004-12-07  Ed Falis  <falis@adacore.com>
! 
! 	* s-intman-vxworks.adb (Notify_Exception): removed useless check for
! 	current task being suspended.
! 
! 	* init.c (__gnat_clear_exception): added to reset VxWorks exception
! 	count.
! 	(__gnat_map_signal): removed test for current task being suspended.
! 
! 2004-12-07  Gary Dismukes  <dismukes@adacore.com>
! 
! 	* a-exexpr.adb (Others_Value, All_Others_Value): Change initial values
! 	from 16#BEEF# to 16#7FFF# to avoid exceeding Integer'Last on 16-bit
! 	targets (such as AAMP).
! 
! 2004-12-07  Ed Schonberg  <schonberg@adacore.com>
! 
! 	* atree.adb (Visit_Itype): Create a new name for the generated itype,
! 	because the back-end may otherwise treat it as a redefinition of the
! 	old symbol.
! 
! 2004-12-07  Eric Botcazou  <ebotcazou@adacore.com>
! 
! 	* back_end.adb (Scan_Back_End_Switches): Accept --param.
! 
! 	* lang-specs.h: Accept --param.
! 
! 2004-12-07  Vincent Celier  <celier@adacore.com>
! 
! 	* make.adb (Check_Mains, Switches_Of): Adapt to name changes in
! 	package Prj (Current_Spec_Suffix => Ada_Spec_Suffix,
! 	Current_Body_Suffix => Ada_Body_Suffix).
! 	Take into account Externally_Built attribute.
! 
! 	* clean.adb (In_Extension_Chain): Always return False when one of the
! 	parameter is No_Project.
! 	(Clean_Project): Adapt to changes in package Prj (Lang_Ada =>
! 	Ada_Language_Index).
! 	(Gnatclean): Adapt to change in package Prj.Pars (no parameter
! 	Process_Languages for procedure Parse).
! 
! 	* gnatcmd.adb (Carg_Switches): New table.
! 	(GNATCmd): Put all switches following -cargs in the Carg_Switches table.
! 	Adapt to name changes in package Prj (Current_Spec_Suffix =>
! 	Ada_Spec_Suffix, Current_Body_Suffix => Ada_Body_Suffix).
! 
! 	* mlib-prj.adb: Adapt to changes in packages Prj and Prj.Com: type
! 	Header_Num and function Hash are now declared in package Prj,
! 	not Prj.Com.
! 
! 	* prj.adb (Suffix_Of): New function.
! 	(Set (Suffix)): New procedure.
! 	(Hash): One function moved from Prj.Com
! 	(Is_Present, Language_Processing_Data_Of): New functions
! 	(Set): Two new procedures
! 	(Add_Language_Name, Display_Language_Name): New procedures
! 
! 	* prj.ads: (Suffix_Of): New function
! 	(Set (Suffix)): New procedure
! 	Add several types and tables for multi-language support.
! 	(Header_Num): Type moved from Prj.Com
! 	(Hash): Two functions moved from Prj.Com
! 	(Is_Present, Language_Processing_Data_Of): New functions
! 	(Set): Two new procedures
! 	(Add_Language_Name, Display_Language_Name): New procedures
! 	(Naming): Component name changes:
! 	Current_Spec_Suffix => Ada_Spec_Suffix,
! 	Current_Body_Suffix => Ada_Body_Suffix. Add new components:
! 	Impl_Suffixes, Supp_Suffixes.
! 	(Project_Data): New components: Externally_Built, Supp_Languages,
! 	First_Language_Processing, Supp_Language_Processing, Default_Linker,
! 	Default_Linker_Path.
! 
! 	* prj-attr.adb: Add new attributes Ada_Roots and Externally_Built and
! 	new package Language_Processing with its attributes (Compiler_Driver,
! 	Compiler_Kind, Dependency_Option, Compute_Dependency, Include_Option,
! 	Binder_Driver, Default_Linker).
! 
! 	* prj-com.ads, prj-com.adb (Hash): Function moved to package Prj.
! 	(Header_Num): Type moved to package Prj
! 
! 	* prj-env.adb: Adapt to name changes in package Prj
! 	(Current_Spec_Suffix => Ada_Spec_Suffix,
! 	Current_Body_Suffix => Ada_Body_Suffix).
! 
! 	* prj-ext.adb: Add the default project dir (<prefix>/log/gnat) by
! 	default to the project path, except the "-" is one of the directories
! 	in env var ADA_PROJECT_PATH.
! 	(Current_Project_Path): Global variable, replacing Project_Path
! 	that was in the body of Prj.Part.
! 	(Project_Path): New function
! 	(Set_Project_Path): New procedure
! 	Initialize Current_Project_Path during elaboration of the package
! 	Remove dependency on Prj.Com, no longer needed
! 
! 	* prj-ext.ads (Project_Path): New function
! 	(Set_Project_Path): New procedure
! 
! 	* prj-nmsc.adb (Body_Suffix_Of): New function. Returns .<lang> when no
! 	suffix is defined for language <lang>.
! 	(Find_Sources, Record_Other_Sources): Use Body_Suffix_Of, instead of
! 	accessing directly the components of Naming.
! 	(Look_For_Sources): Use Set (Suffix) to set the suffix of a language.
! 	Reorganise of this package.
! 	Break procedure Check in several procedures.
! 
! 	* prj-nmsc.ads: Replace all procedures (Ada_Check,
! 	Other_Languages_Check and Language_Independent_Check) with a single
! 	procedure Check.
! 
! 	* prj-pars.ads, prj-pars.adb (Parse): Remove parameter
! 	Process_Languages, no longer needed.
! 
! 	* prj-part.adb (Project_Path): Move to the body of Prj.Ext as
! 	Current_Project_Path.
! 	Remove elaboration code, moved to the body of Prj.Ext
! 	Use new function Prj.Ext.Project_Path instead of old variable
! 	Project_Path.
! 	(Post_Parse_Context_Clause): Get Resolved_Path as a case-sensitive path.
! 	When comparing with project paths on the stack, first put the resolved
! 	path in canonical case.
! 	(Parse_Single_Project): Set the path name of the project file in the
! 	tree to the normalized path.
! 
! 	* prj-proc.ads, prj-proc.adb (Check, Recursive_Check, Process): Remove
! 	parameter Process_Languages, no longer needed.
! 	(Recursive_Check): Call Prj.Nmsc.Check, instead of Ada_Check and
! 	Other_Languages_Check.
! 
! 	* prj-tree.ads (Project_Name_And_Node): New component Canonical_Path
! 	to store the resolved canonical path of the project file.
! 	Remove dependency to Prj.Com, no longer needed
! 
! 	* prj-util.adb: Adapt to name changes in package Prj
! 	(Current_Spec_Suffix => Ada_Spec_Suffix, Current_Body_Suffix =>
! 	Ada_Body_Suffix).
! 
! 	* snames.ads, snames.adb: New standard names: Ada_Roots, Binder_Driver,
! 	Compiler_Driver, Compiler_Kind, Compute_Dependency, Default_Linker,
! 	Externally_Built, Include_Option, Language_Processing.
! 
! 	* makegpr.adb: Numerous changes due to changes in packages
! 	Prj and Prj.Nmsc.
! 
! 	* gnatls.adb: Add the default project dir (<prefix>/log/gnat) by
! 	default to the project path, except whe "-" is one of the directories
! 	in env var ADA_PROJECT_PATH.
! 	(Gnatls): In verbose mode, add the new section "Project Search Path:"
! 
! 2004-12-07  Robert Dewar  <dewar@adacore.com>
! 
! 	* debug.adb: Document that -gnatdA automatically sets -gnatR3m
! 
! 	* gnat1drv.adb (Gnat1drv): If debug flag A set, then automatically
! 	set -gnatR3m mode.
! 
! 	* repinfo.adb (List_Rep_Info): Remove special handling of -gnatdA
! 	flag. No longer needed now that we handle this in gnat1drv.adb.
! 
! 	* repinfo.ads: Minor reformatting
! 
! 2004-12-07  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 	    Olivier Hainque  <hainque@adacore.com>
! 	    Eric Botcazou  <ebotcazou@adacore.com>
! 
! 	* decl.c (maybe_pad_type): Use TYPE_SIZE_UNIT of the input type for
! 	TYPE_SIZE_UNIT of result type if SIZE is not specified.
! 	(make_aligning_type): Pass -1 as ADDRESSABLE to prevent the creation
! 	of a bitfield, which we know is useless and causes trouble because of
! 	alignment implications.
! 
! 	* utils.c (create_var_decl): Set DECL_COMMON again on targets without
! 	BSS sections.
! 	(process_attributes): Clear DECL_COMMON again when a section attribute
! 	is present.
! 	(finish_record_type): Independently track if RECORD_TYPE has SIZE and/or
! 	SIZE_UNIT already set and use to compute final SIZE and SIZE_UNIT.
! 	(create_field_decl): Special case ADDRESSABLE negative to mean
! 	"no bitfield creation", to be used by make_aligning_type. Don't
! 	restrict bitfield creation to !ADDRESSABLE any more, as some BLKmode
! 	fields claimed addressable still have to be bitfields. Use
! 	value_factor_p instead of a raw binop construction to check for the
! 	position's alignment.
! 
! 2004-12-07  Geert Bosch  <bosch@adacore.com>
! 
! 	* eval_fat.adb: Revert previous change.
! 
! 2004-12-07  Thomas Quinot  <quinot@adacore.com>
! 	    Ed Schonberg  <schonberg@adacore.com>
! 
! 	* exp_ch4.adb (Expand_N_Indexed_Component): For an indexed component
! 	with an implicit dereference as its prefix, use
! 	Insert_Explicit_Dereference instead of merely rewriting the prefix into
! 	an explicit dereference. This ensures that a reference to the original
! 	prefix is generated, if appropriate.
! 
! 	* sem_util.adb (Insert_Explicit_Dereference): When an implicit
! 	dereference is rewritten to an explicit one, generate a reference to
! 	the entity denoted by its prefix using the original prefix node, so
! 	the dereference can be properly recorded as a read of the denoted
! 	access value, if appropriate.
! 
! 	* sem_warn.adb (Output_Unreferenced_Messages): Do not abstain from
! 	emitting 'assigned but never read' warning on a variable on the basis
! 	that it has an access type.
! 	(Check_References): Emit unreferenced warning when the scope is a
! 	subprogram body.
! 
! 2004-12-07  Robert Dewar  <dewar@adacore.com>
! 	    Ed Schonberg  <schonberg@adacore.com>
! 
! 	* exp_ch6.adb (Expand_Call): Add comment on handling of back end
! 	intrinsic
! 
! 	* exp_intr.adb (Expand_Intrinsic_Call): Ignore unrecognized intrinsic,
! 	leaving call unchanged.
! 	This deals with the case where the pragma Import specified
! 	an external name, to be handled by the back end.
! 
! 	* sem_prag.adb (Process_Import_Or_Interface): Do not check validity of
! 	subprogram which is Imported with convention Intrinsic if an
! 	External_Name argument is specified.
! 	(Process_Import_Or_Interface): Properly diagnose link name argument.
! 	(Inlining_Not_Possible): New name for Cannot_Inline, to avoid confusion
! 	with Sem_Ch6.Cannot_Inline.
! 	(Process_Inline): Provide separate warning for inapplicable inline
! 	pragma.
! 	(Cannot_Inline): Reject subprograms that have an at_end handler, so that
! 	treatment is uniform on different targets.
! 
! 2004-12-07  Ed Schonberg  <schonberg@adacore.com>
! 
! 	* exp_ch7.adb (Expand_Cleanup_Actions): If statement sequence of
! 	construct is rewritten, preserve end label to permit source navigation.
! 
! 2004-12-07  Thomas Quinot  <quinot@adacore.com>
! 
! 	* exp_dist.adb (Specific_Build_General_Calling_Stubs,
! 	Specific_Build_Stub_Target): New subprograms.
! 	(Build_Subprogram_Calling_Stubs): Make this procedure independent from
! 	the PCS implementation used, using the above PCS-customized subprograms.
! 	Minor reformatting.
! 	(PolyORB_Support.Helpers): New subunit containing supporting subprograms
! 	for generation of DSA code targeted to the PolyORB PCS.
! 	(Add_Stub_Type): Rewrite to isolate the parts that are specific to one
! 	implementation of the partition communication subsystem in ancillary
! 	subprograms.
! 	(Specific_Build_Stub_Type, GARLIC_Support.Build_Stub_Type,
! 	PolyORB_Support.Build_Stub_Type): New subrograms containing the
! 	PCS-specific part of Add_Stub_Type.
! 	(Insert_Partition_Check): Use runtime library function to perform
! 	E.4(19) check.
! 
!         * rtsfind.ads: New entity System.PolyORB_Interface.Make_Ref
!         (RE_Same_Partition): New entity, from s-parint.
! 
!         * s-parint.ads, s-parint.adb (Same_Partition): New subprogram.
! 
! 2004-12-07  Gary Dismukes  <dismukes@adacore.com>
! 
! 	* gnatmem.adb, gnatname.adb, gnatsym.adb, gprcmd.adb, vms_conv.adb:
! 	Output the copyright message on a separate line from the version
! 	message.
! 
! 2004-12-07  Joel Brobecker  <brobecker@adacore.com>
! 
! 	* g-os_lib.adb (Spawn): Explicitly initialize Saved_Error to avoid a
! 	compile-time warning.
! 
! 2004-12-07  Robert Dewar  <dewar@adacore.com>
! 
! 	* g-regpat.adb: (Match): Change a misuse of or to or else
! 
! 2004-12-07  Ed Schonberg  <schonberg@adacore.com>
! 
! 	* lib-xref.adb:
! 	(Generate_Reference): Handle properly a reference to an entry formal,
! 	 when an accept statement has a pragma Unreferenced for it.
! 
! 	* sem_ch9.adb (Analyze_Accept_Statement): Reset the Is_Referenced flag
! 	and the Has_Pragma_Unreferenced flag for each formal before analyzing
! 	the body, to ensure that warnings are properly emitted for each accept
! 	statement of a given task entry.
! 
! 2004-12-07  Vasiliy Fofanov  <fofanov@adacore.com>
! 
! 	* Makefile.in: Add support for foreign threads on VMS.
! 
! 2004-12-07  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 
! 	* misc.c (gnat_types_compatible_p, LANG_HOOKS_TYPES_COMPATIBLE_P):
! 	Remove.
! 	(LANG_HOOKS_REDUCE_BIT_FIELD_OPERATIONS): New.
! 
! 	* adaint.h: (__gnat_dup, __gnat_dup2): Add missing decls.
! 
! 	* trans.c (Exception_Handler_to_gnu_sjlj): Also handle renamed
! 	exception.
! 	(call_to_gnu): Convert to actual DECL_ARG_TYPE, not variant of it.
! 
! 2004-12-07  Robert Dewar  <dewar@adacore.com>
! 
! 	* nlists.adb (Prepend_Debug): Remove parameters and nest within
! 	Prepend.
! 	(Remove_Next_Debug): Same fix
! 
! 	* nlists.ads: Correct bad comments for Prev and Prev_Non_Pragma (we do
! 	maintain back pointers now, though we did not used to, and comments
! 	were out of date).
! 	(Prepend): Remove pragma Inline.
! 	(Remove_Next): Same cleanup
! 
! 2004-12-07  Thomas Quinot  <quinot@adacore.com>
! 
! 	* sem_ch4.adb (Process_Implicit_Dereference_Prefix): New subprogram
! 	used to record an implicit dereference as a read operation on its
! 	prefix when operating under -gnatc. Necessary to avoid spurious
! 	'variable assigned but never read' warnings in that mode.
! 	(Process_Indexed_Component, Analyze_Selected_Component): When the prefix
! 	is a non-overloaded implicit dereference, call the above subprogram to
! 	ensure proper recording of references.
! 
! 2004-12-07  Gary Dismukes  <dismukes@adacore.com>
! 
! 	* sem_ch5.adb (One_Bound): Remove call to Resolve, as the bound needs
! 	to be resolved later as part of Analyze_Iteration_Scheme's call to
! 	Make_Index.
! 
! 2004-12-07  Ed Schonberg  <schonberg@adacore.com>
! 
! 	* sem_ch8.adb (Find_Type): If node is a reference to 'Base and the
! 	prefix is not a scalar type, place error message on prefix, not on
! 	type entity.
! 
! 2004-12-07  Bernard Banner  <banner@adacore.com>
! 
! 	* vxaddr2line.adb: Add support for x86 vxworks
! 
! 2004-12-07  Thomas Quinot  <quinot@adacore.com>
! 
! 	* g-socket.ads (Get_Host_By_Address, Get_Host_By_Name): Clarify
! 	documentation of the behaviour of these functions when passed an IP
! 	address that has no record in the system hosts database and no reverse
! 	record in the DNS.
! 
! 	* cstand.adb, a-tags.ads: Fix typos in comment.
! 
! 2004-12-07  Robert Dewar  <dewar@adacore.com>
! 
! 	* exp_ch2.adb, exp_ch3.adb, exp_ch5.adb, exp_ch8.adb,
! 	exp_ch9.adb, exp_pakd.adb, interfac.ads, sem_ch6.adb,
! 	sem_ch7.adb, sem_ch10.adb, sem_ch13.adb, sem_ch3.adb,
! 	s-poosiz.ads: Minor reformatting
! 
! 	* make.adb: Minor reformatting
! 	Add some ??? comments asking for more comments
! 
! 	* s-poosiz.adb: Minor reformatting
! 	Add comments on alignment requirement
! 
! 	* sinfo.ads: Remove obsolete comment and fix typo.
! 
! 2004-12-07  Vincent Celier  <celier@adacore.com>
! 	    Sergey Rybin  <rybin@adacore.com>
! 
! 	* gnat_ugn.texi: Update the section "The GNAT Driver and Project
! 	Files" with the new tool and package names.
! 	Reformatting to suppress most of the warnings for line too long
! 	Document the new section "Project Search Path:" in the output of
! 	gnatls -v.
! 	Add gnatmetric section
! 
! 2004-12-07  Vincent Celier  <celier@adacore.com>
! 
! 	* vms_data.ads: Correct GNAT METRIC qualifiers: -I-, -Idir and
! 	-gnatec= are not direct switches of gnatmetric. Changed -eis to -eps
! 	and -eit to -ept. Added qualifier
! 	/ELEMENT_METRICS=CONSTRUCT_NESTING_MAX for new switch -ec.
! 
! 2004-11-27  Andreas Schwab  <schwab@suse.de>
! 
! 	* Make-lang.in (ada/trans.o): Depend on $(EXPR_H).
! 
! 2004-11-25  Arnaud Charlet  <charlet@adacore.com>
! 
! 	* g-socthi-mingw.ads, g-socthi-vms.ads: Remove C_Read and C_Write from
! 	internal implementation unit GNAT.Sockets.Thin,
! 	as their usage for sockets is non-portable (using the read and write
! 	functions from the system runtime library is fine on UNIX but won't
! 	work under Windows).
! 
! 	* mingw32.h: Update copyright notice.
! 
! 2004-11-25  Arnaud Charlet  <charlet@adacore.com>
! 
! 	* ada-tree.h: Minor reformatting of previous change to avoid lines
! 	longer than 79 characters.
! 
! 2004-11-25  Olivier Hainque  <hainque@adacore.com>
! 
! 	* tb-gcc.c: GCC infrastructure based implementation of
! 	__gnat_backtrace.
! 
! 2004-11-24  Steven Bosscher  <stevenb@suse.de>
! 
! 	* misc.c (gnat_post_options): Don't clear
! 	flag_inline_functions.
! 
! 2004-11-22  Andrew Pinski  <pinskia@physics.uc.edu>
! 
! 	PR ada/17986
! 	* ada-tree.h (lang_tree_node): Set chain_next to be the chain of the
! 	tree.
! 
! 2004-11-21  Andreas Jaeger  <aj@suse.de>
! 
! 	* stylesw.adb: Change Style_Check_Subprogram_Order to
! 	Style_Check_Order_Subprograms.
! 
! 2004-11-18  Arnaud Charlet  <charlet@adacore.com>
! 
! 	* adaint.h, adaint.c
! 	(__gnat_portable_spawn): Fix cast of spawnvp third parameter
! 	to avoid warnings.
! 	Add also a cast to kill another warning.
! 	(win32_no_block_spawn): Initialize CreateProcess's dwCreationFlags
! 	parameter with the priority class of the parent process instead of
! 	always using the NORMAL_PRIORITY_CLASS.
! 	(__gnat_dup): New function.
! 	(__gnat_dup2): New function.
! 	(__gnat_is_symbolic_link): Enable the effective body of this
! 	function when __APPLE__ is defined.
! 
! 	* g-os_lib.ads, g-os_lib.adb (Spawn): Two new procedures.
! 	Update comments.
! 
! 2004-11-18  Olivier Hainque  <hainque@adacore.com>
! 
! 	* a-exexpr.adb (Others_Value, All_Others_Value): New variables, the
! 	address of which may be used to represent "others" and "all others"
! 	choices in exception tables, instead of the current harcoded
! 	(void *)0 and (void *)1.
! 	(Setup_Exception): Do nothing in the GNAT SJLJ case.
! 
! 	* gigi.h (others_decl, all_others_decl): New decls representing the
! 	new Others_Value and All_Others_Value objects.
! 	(struct attrib): Rename "arg" component as "args", since GCC expects a
! 	list of arguments in there.
! 
! 	* raise.c (GNAT_OTHERS, GNAT_ALL_OTHERS): Are now the address of the
! 	corresponding objects exported by a-exexpr, instead of hardcoded dummy
! 	addresses.
! 
! 	* trans.c (Exception_Handler_to_gnu_zcx): Use the address of
! 	others_decl and all_others_decl instead of hardcoded dummy addresses
! 	to represent "others" and "all others" choices, which is cleaner and
! 	more flexible with respect to the possible eh pointer encoding policies.
! 
! 	* utils.c (init_gigi_decls): Initialize others_decl and all_others_decl.
! 	(process_attributes): Account for the naming change of the "args"
! 	attribute list entry component.
! 
! 	* decl.c (build_attr_list): Rename into prepend_attributes to allow
! 	cumulating attributes for different entities into a single list.
! 	(gnat_to_gnu_entity): Use prepend_attributes to build the list of
! 	attributes for the current entity and propagate first subtype
! 	attributes to other subtypes.
! 	<E_Procedure>: Attribute arguments are attr->args and not
! 	attr->arg any more.
! 	(build_attr_list): Ditto. Make attr->args a TREE_LIST when there is an
! 	argument provided, as this is what GCC expects. Use NULL_TREE instead
! 	of 0 for trees.
! 
! 2004-11-18  Robert Dewar  <dewar@adacore.com>
! 
! 	* a-stmaco.ads, exp_util.ads, exp_util.adb, i-cpp.ads, i-cpp.adb:
! 	Minor reformatting througout (including new function specs)
! 	Add ??? comments asking for clarification.
! 
! 2004-11-18  Thomas Quinot  <quinot@adacore.com>
! 
! 	* butil.ads, butil.adb, bindgen.adb (Get_Unit_Name_String): Remove
! 	incomplete duplicate implementation of this subprogram from butil.
! 
! 2004-11-18  Thomas Quinot  <quinot@adacore.com>
! 
! 	* exp_dist.adb (Build_RPC_Receiver_Body): New subprogram. This
! 	procedures factors the common processing for building an RPC receiver
! 	for an RCI package or an RACW type.
! 	Stylistic cleanup: change '/= Empty' to 'Present ()'; move body of
! 	Build_Remote_Subprogram_Proxy_Type into proper alphabetical order.
! 	(Get_PCS_Name): New subprogram. Returns the name of the PCS currently
! 	in use.
! 	(Specific_Add_RACW_Features): New subprogram. PCS-specific part of
! 	Add_RACW_Features.
! 	(Specific_Add_RAST_Features): New subprogram. PCS-specific part of
! 	Add_RAST_Features.
! 	(Assign_Subprogram_Identifier): New subprogram. Provision for assigning
! 	distribution subprogram identifiers that are either subprogram numbers
! 	or strings.
! 	(Get_Subprogram_Ids): New subprogram. Retrieve both the numeric and
! 	string distribution identifiers assigned to a given subprogram.
! 	(Get_Subprogram_Id): Reimplement in terms of Get_Subprogram_Ids.
! 	(Add_RAS_Dereference_TSS): Add comments.
! 	(Build_General_Calling_Stubs): Note that the RACW_Type formal parameter
! 	is not referenced yet because it will be used by the PolyORB DSA
! 	implementation.
! 	(Insert_Partition_Check): Remove fossile code.
! 	(First_RCI_Subprogram_Id): Document this constant.
! 	(Add_RAS_Access_TSS): Correct the setting of the Etype of the
! 	RAS_Access TSS.
! 	(Get_Pkg_Name_String): Remove subprogram. Usage occurrences are
! 	replaced with calls to Get_Library_Unit_Name_String. Previously there
! 	were several instances of the same code in different locations in the
! 	compiler; this checkin completes the replacement of all of these
! 	instances with calls to a common subprogram.
! 	Minor reformatting.
! 
! 	* sem_dist.adb: Remove comment noting that RPC receiver generation
! 	should be disabled for RACWs that implement RASs.
! 	(Process_Partition_Id): Use new subprogram Get_Library_Unit_Name_String.
! 
! 	* sem_util.ads, sem_util.adb (Has_Stream): New function
! 	(Get_Library_Unit_Name_String): New subprogram to retrieve the fully
! 	qualified name of a library unit into the name buffer.
! 	(Note_Possible_Modification): Generate a reference only
! 	if the context comes from source.
! 
! 	* snames.ads (PCS_Names): New subtype corresponding to names of
! 	supported implementations of the Partition Communication Subsystem
! 	(PCS) (i.e. the runtime library support modules for the distributed
! 	systems annex).
! 
! 2004-11-18  Robert Dewar  <dewar@adacore.com>
! 	    Ed Schonberg  <schonberg@adacore.com>
! 
! 	* einfo.ads, einfo.adb: Remove Is_Psected flag, no longer used
! 	(Has_Rep_Pragma): New function
! 	(Has_Attribute_Definition_Clause): New function
! 	(Record_Rep_Pragma): Moved here from sem_ch13.adb
! 	(Get_Rep_Pragma): Remove junk kludge for Stream_Convert pragma
! 
! 	* sem_ch13.ads, sem_ch13.adb (Record_Rep_Pragma): Moved to einfo.adb
! 
! 	* exp_prag.adb: (Expand_Pragma_Common_Object): New procedure
! 	(Expand_Pragma_Psect_Object): New procedure
! 	These procedures contain the revised and cleaned up processing for
! 	these two pragmas. This processing was formerly in Sem_Prag, but
! 	is more appropriately moved here. The cleanup involves making sure
! 	that the pragmas are properly attached to the tree, and that no
! 	nodes are improperly shared.
! 
! 	* sem_prag.adb: Move expansion of Common_Object and Psect_Object
! 	pragmas to Exp_Prag, which is more appropriate.
! 	Attach these two pragmas to the Rep_Item chain Use Rep_Item chain to
! 	check for duplicates Remove use of Is_Psected flag, no longer needed.
! 	Use new Make_String_Literal function with string.
! 
! 	* exp_attr.adb (Expand_Fpt_Attribute): The floating-point attributes
! 	that are functions return universal values, that have to be converted
! 	to the context type.
! 	Use new Make_String_Literal function with string.
! 	(Get_Stream_Convert_Pragma): New function, replaces the use of
! 	Get_Rep_Pragma, which had to be kludged to work in this case.
! 
! 	* freeze.adb: Use new Has_Rep_Pragma function
! 
! 	* exp_intr.adb, exp_ch3.adb, sem_attr.adb: Use new Make_String_Literal
! 	function with string.
! 	Use new Has_Rep_Pragma function.
! 
! 	* tbuild.ads, tbuild.adb (Make_String_Literal): New function, takes
! 	string argument.
! 
! 2004-11-18  Robert Dewar  <dewar@adacore.com>
! 
! 	* errout.ads, errout.adb: (First_Sloc): New function
! 
! 	* par-ch5.adb (P_Condition): Check for redundant parens is now a style
! 	check (-gnatyx) instead of being included as a redundant construct
! 	warning.
! 
! 	* sem_ch6.adb: Change name Style_Check_Subprogram_Order to
! 	Style_Check_Order_Subprograms.
! 
! 	* style.ads, styleg.ads, styleg.adb, styleg-c.adb, stylesw.ads,
! 	stylesw.adb: Add Style_Check_Xtra_Parens
! 
! 	* usage.adb: Add line for -gnatyx (check extra parens)
! 
! 	* vms_data.ads: Add entry for STYLE_CHECKS=XTRA_PARENS => -gnatyx
! 
! 2004-11-18  Ed Schonberg  <schonberg@adacore.com>
! 	    Robert Dewar  <dewar@adacore.com>
! 
! 	* exp_ch4.adb (Expand_N_Selected_Component): If the component is the
! 	discriminant of a constrained subtype, analyze the copy of the
! 	corresponding constraint, because in some cases it may be only
! 	partially analyzed.
! 	Removes long-lived ??? comments.
! 
! 	* exp_ch7.adb (Establish_Transient_Scope): Remove complex code that
! 	handled controlled or secondary-stack expressions within the
! 	iteration_scheme of a loop.
! 
! 	* sem_ch5.adb (Analyze_Iteration_Scheme): Build a block to evaluate
! 	bounds that may contain functions calls, to prevent memory leaks when
! 	the bound contains a call to a function that uses the secondary stack.
! 	(Check_Complex_Bounds): Subsidiary of Analyze_Iteration_Scheme, to
! 	generate temporaries for loop bounds that might contain function calls
! 	that require secondary stack and/or finalization actions.
! 
! 	* sem_ch4.adb (Analyze_Indexed_Component_Form): If the prefix is a
! 	selected component and the selector is overloadable (not just a
! 	function) treat as function call, Analyze_Call will disambiguate if
! 	necessary.
! 	(Analyze_Selected_Component): Do not generate an actual subtype for the
! 	selected component if expansion is disabled. The actual subtype is only
! 	needed for constraint checks.
! 	(Analyze_Allocator): If restriction No_Streams is set, then do
! 	not permit objects to be declared of a stream type, or of a
! 	composite type containing a stream.
! 
! 	* restrict.ads: Remove the a-stream entry from Unit_Array, since
! 	No_Streams no longer prohibits with'ing this package.
! 
! 	* sem_ch3.adb (Build_Derived_Record_Type): If the parent type has
! 	discriminants, but the parent base has unknown discriminants, there is
! 	no discriminant constraint to inherit. Such a discrepancy can arise
! 	when the actual for a formal type with unknown discriminants is a
! 	similar private type whose full view has discriminants.
! 	(Analyze_Object_Declaration): If restriction No_Streams is set, then
! 	do not permit objects to be declared of a stream type, or of a
! 	composite type containing a stream.
! 
! 2004-11-18  Ed Schonberg  <schonberg@adacore.com>
! 
! 	* exp_dbug.ads: Update documentation to reflect simpler encoding for
! 	protected operations.
! 
! 	* exp_ch9.adb (Build_Selected_Name): Do not include "PT" suffix in
! 	generated name, it complicates decoding in gdb and hinders debugging
! 	of protected operations.
! 	(Build_Barrier_Function_Specification): Set the Needs_Debug_Info
! 	flag for the protected entry barrier function.
! 	(Build_Protected_Entry_Specification): Set the Needs_Debug_Info
! 	flag for the protected entry function.
! 
! 2004-11-18  Nicolas Setton  <setton@adacore.com>
! 
! 	* expect.c: Define __unix__ when __APPLE__ is defined.
! 
! 	* Makefile.in: Inform the value of the variable GMEM_LIB in the
! 	Darwin-specific section.
! 
! 	* lang-specs.h: Change the placement of the %1 marker.
! 	Works around the fact that gcc adds -fPIC by default under Darwin.
! 
! 2004-11-18  Ed Schonberg  <schonberg@adacore.com>
! 
! 	* exp_pakd.adb (Convert_To_PAT_Type): After replacing the original
! 	type of the object with the packed array type, set the Analyzed flag
! 	on the object if it is an entity or simple indexed component, to avoid
! 	spurious type errors.
! 
! 2004-11-18  Gary Dismukes  <dismukes@adacore.com>
! 
! 	* gnat1drv.adb, gnatbind.adb, gnatchop.adb, gnatfind.adb, gnatlink.adb,
! 	gnatls.adb, gnatxref.adb, gprep.adb: Output the copyright message on a
! 	separate line from the version message.
! 
! 2004-11-18  Ed Falis  <falis@adacore.com>
! 
! 	* init.c (__gnat_map_signal): map SIGSEGV to Storage_Error for AE653
! 	vthreads.
! 	(init_float): Eliminate initialization of floating point status for
! 	AE653. The instructions have no effect for vThreads.
! 
! 2004-11-18  Vincent Celier  <celier@adacore.com>
! 
! 	* make.adb (Gnatmake): Invoke gnatlink with -shared-libgcc when
! 	gnatbind is invoked with -shared.
! 
! 2004-11-18  Jose Ruiz  <ruiz@adacore.com>
! 
! 	* s-tposen.adb (Lock_Entry): Remove the code for raising Program_Error
! 	for Detect_Blocking which is redundant with the check done within the
! 	procedure Protected_Single_Entry_Call.
! 	(Lock_Read_Only_Entry): Remove the code for raising Program_Error for
! 	Detect_Blocking which is redundant with the check done within the
! 	procedure Protected_Single_Entry_Call.
! 
! 2004-11-18  Vincent Celier  <celier@adacore.com>
! 
! 	* makegpr.adb (Compile): Put the compiling switches (in package
! 	Compiler and on the command line) immediately after "-c", instead of
! 	at the end of the command line invocation of the compiler, when
! 	compiling a non-Ada file.
! 	(Build_Global_Archive): When there is no need to rebuild the archive,
! 	set Global_Archive_Exists, so that the archive is passed to the linker
! 	if one is needed.
! 
! 2004-11-18  Robert Dewar  <dewar@adacore.com>
! 	    Sergey Rybin  <rybin@adacore.com>
! 
! 	* gnat_ugn.texi:
! 	Remove extra paren check from list of checks for redundant constructs
! 	Add documentation of new -gnatyx style check (check extra parens)
! 	Remove paragraph about gnatelim debug options.
! 
! 	* gnat_rm.texi: Document that Ada.Streams now forbids creating stream
! 	objects rather than forbidding dependencies on the package Ada.Streams.
! 
! 	* sinfo.ads: Add ??? note that we should document pragmas passed to
! 	back end.
! 
! 	* g-expect.ads: Fix a few typos in the comments.
! 
! 2004-11-09  Joseph S. Myers  <joseph@codesourcery.com>
! 
! 	* misc.c (gnat_handle_option): Use %< and %> for quoting in
! 	warning message.
! 
! 2004-11-08  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
! 
! 	* a-numaux-x86.adb (Tan): Fix fdivp syntax.
! 
! 2004-11-07  Andreas Schwab  <schwab@suse.de>
! 
! 	* Makefile.in (install-gnatlib): Remove spurious hyphen.
! 
! 2004-11-02  Andrew Pinski  <pinskia@physics.uc.edu>
! 
! 	PR ada/18228
! 	* Makefile.in (darwin): Set soext to .dylib.
! 
! 2004-10-26  Vincent Celier  <celier@gnat.com>
! 	    Thomas Quinot   <quinot@act-europe.fr>
! 
! 	* g-socthi-vms.adb, g-socthi-mingw.adb, g-socthi-vxworks.ads:
! 	(C_Writev): Change MSG_Forced_Flags to Constants.MSG_Forced_Flags as
! 	there is no use of GNAT.Sockets.Constants.
! 	Remove remaining pragma Import for C_Write
! 	Remove C_Read and C_Write from internal implementation unit
! 	GNAT.Sockets.Thin, as their usage for sockets is non-portable (using
! 	the read and write functions from the system runtime library is fine
! 	on UNIX but won't work under Windows).
! 
! 	* g-socket.adb: (Abort_Selector): Use C_Send instead of C_Write.
! 	(Check_Selector): Use C_Recv instead of C_Read.
! 	Selectors are the GNAT.Sockets abstraction to perform a select()
! 	call on a set of descriptors. To allow abortion of an ongoing
! 	select operation, some data is written to a dedicated socket that
! 	is always monitored.
! 	Under Windows, the write and read library functions cannot operate
! 	on sockets, so we need to use send and recv instead, which is portable
! 	across all supported platforms.
! 
! 	* g-socthi.ads: Remove C_Read and C_Write from internal implementation
! 	unit GNAT.Sockets.Thin, as their usage for sockets is non-portable
! 	(using the read and write functions from the system runtime library is
! 	fine on UNIX but won't work under Windows).
! 
! 2004-10-26  Nicolas Setton  <setton@act-europe.fr>
! 
! 	* mlib-tgt-darwin.adb: New file.
! 
! 	* mlib-tgt-tru64.adb, mlib-tgt-aix.adb, mlib-tgt-irix.adb,
! 	mlib-tgt-hpux.adb, mlib-tgt-linux.adb, mlib-tgt-solaris.adb,
! 	mlib-tgt-vms-alpha.adb, mlib-tgt-vms-ia64.adb,
! 	mlib-tgt-mingw.adb, mlib-tgt-vxworks.adb (Archive_Indexer_Options): New
! 	subprogram body.
! 
! 	* Makefile.in: Add support for building shared libraries under Darwin.
! 	(EXTRA_GNATRTL_NONTASKING_OBJS, ppc-vxworks): Add s-vxwexc.o, containing
! 	the low level EH init subprogram to be called from __gnat_initialize.
! 
! 	* mlib-tgt.ads, mlib-tgt.adb (Archive_Indexer_Options): New subprogram,
! 	indicates which options to pass to the archive indexer.
! 
! 	* mlib-utl.adb: Add support for calling ranlib with additional
! 	options. This is needed for instance under Mac OS X.
! 	(Ranlib_Options): New global variable, used to store the potential
! 	options to pass to ranlib.
! 	(Ar): Use Ranlib_Options when spawning ranlib.
! 	(Initialize): Set the value of ranlib option.
! 
! 2004-10-26  Olivier Hainque  <hainque@act-europe.fr>
! 
! 	* s-parame-linux.adb (Minimum_Stack_Size): Adjust to return 12K
! 	instead of 8K, to reflect the real potential needs for stack-checking
! 	in the ZCX case.
! 
! 2004-10-26  Pascal Obry  <obry@gnat.com>
! 
! 	* s-parame-mingw.adb (Default_Stack_Size): Add some comments.
! 
! 	* s-taprop-mingw.adb (Create_Task): Set initial stack size to 1024. On
! 	Windows only the initial thread stack size can be set so it is good to
! 	start we a low stack size.
! 	The OS will adjust the size as needed.
! 
! 2004-10-26  Olivier Hainque  <hainque@act-europe.fr>
! 	    Nicolas Setton  <setton@act-europe.fr>
! 
! 	* expect.c, adaint.c, link.c, sysdep.c (unix sections): Guard with
! 	"__unix__" instead of "unix".
! 	The latter is implicitly defined by gcc3.2 but not by gcc >= 3.4, so the
! 	sections were just mistakenly ignored. The former is
! 	implicitely defined by gcc2.8, gcc3.2 and gcc3.4.
! 	Update #ifdef preprocessor macro to detect the symbol __hpux__ instead
! 	of hpux. This prevents an unwanted definition of the symbol
! 	convert_addresses in adaint.o.
! 
! 2004-10-26  Gary Dismukes  <dismukes@gnat.com>
! 
! 	* a-exexpr.adb (Setup_Key): Change initial value to 16#DEAD#, for
! 	compatibility with type Unwind_Word on 16-bit targets such as AAMP.
! 
! 2004-10-26  Cyrille Comar  <comar@act-europe.fr>
! 
! 	* a-filico.ads, a-filico.adb: fix incorrect header.
! 
! 2004-10-26  Javier Miranda  <miranda@gnat.com>
! 
! 	* a-ststio.ads: Fix typo in identifier
! 
! 2004-10-26  Thomas Quinot  <quinot@act-europe.fr>
! 
! 	* sem_ch4.adb: Minor reformatting.
! 
! 2004-10-26  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* checks.adb (Expr_Known_Valid): If floating-point validity checks are
! 	enabled, check the result of unary and binary operations when the
! 	expression is the right-hand side of an assignment.
! 
! 2004-10-26  Vincent Celier  <celier@gnat.com>
! 
! 	* clean.adb (Delete): Do not output warnings when in quiet output and
! 	not in verbose mode.
! 	(Force_Deletions): New Boolean flag, defaulted to False
! 	(Delete): Only delete a file if it is writable, and when
! 	Force_Deletions is True.
! 	(Parse_Cmd_Line): New switch -f: set Force_Deletions to True
! 	(Usage): Line for new switch -f
! 	(Clean_Directory): Use GNAT.OS_Lib.Set_Writable instead of rolling our
! 	own.
! 
! 2004-10-26  Eric Botcazou  <ebotcazou@act-europe.fr>
! 
! 	* decl.c (gnat_to_gnu_field): Use the type of the inner object for a
! 	JM type only if its size matches that of the wrapper.  When a size is
! 	prescribed and the field is not aliased, remove the wrapper of a JM
! 	type only if the size is not greater than that of the packed array.
! 	(gnat_to_gnu_entity): Change the extension of packed array wrappers
! 	from LJM to JM.
! 
! 2004-10-26  Geert Bosch  <bosch@gnat.com>
! 
! 	* eval_fat.adb (Eps_Model,Eps_Denorm): Remove, no longer used.
! 	(Succ): Re-implement using Scaling, Exponent and Ceiling attributes.
! 	(Pred): Implement in terms of Succ.
! 
! 2004-10-26  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* exp_aggr.adb (Safe_Component): An aggregate component that is an
! 	unchecked conversion is safe for in-place use if the expression of the
! 	conversion is safe.
! 	(Expand_Array_Aggregate): An aggregate that initializes an allocator may
! 	be expandable in place even if the aggregate does not come from source.
! 	(Convert_Array_Aggr_In_Allocator): New procedure to initialize the
! 	designated object of an allocator in place, rather than building it
! 	first on the stack. The previous scheme forces a full copy of the array,
! 	and may be altogether unsusable if the size of the array is too large
! 	for stack allocation.
! 
! 2004-10-26  Robert Dewar  <dewar@gnat.com>
! 
! 	* exp_ch4.adb (Expand_N_Op_Eq): Make sure we expand a loop for array
! 	compares if the component is atomic.
! 
! 	* exp_ch5.adb (Expand_Assign_Array): Make sure we expand a loop for
! 	array assignment if the component type is atomic.
! 
! 2004-10-26  Ed Schonberg  <schonberg@gnat.com>
! 	    Eric Botcazou  <ebotcazou@act-europe.fr>
! 
! 	* exp_ch6.adb (Expand_Actuals): If the actual for an in-out parameter
! 	is aliased and is a by_reference type, do not pass by copy.
! 	(Expand_N_Function_Call) <Rhs_Of_Assign_Or_Decl>: New function to
! 	detect whether the call is in the right side of an assignment or
! 	the expression of an object declaration.  Recurse on component
! 	association within aggregates.
! 	Call it in the condition that determines whether the temporary is
! 	necessary for correct stack-checking.
! 
! 2004-10-26  Thomas Quinot  <quinot@act-europe.fr>
! 
! 	* exp_dist.adb (Build_General_Calling_Stubs): New formal parameter
! 	RACW_Type, used in the PolyORB version.
! 	Rename RCI_Info to RCI_Locator, for consistency between the PolyORB
! 	version and the GARLIC version.
! 
! 	* snames.ads, snames.adb, s-parint.ads, s-parint.adb:
! 	Rename RCI_Info to RCI_Locator for better consistency between the
! 	GARLIC and PolyORB versions of the distributed systems annex.
! 	(DSA_Implementation_Name): This enumeration lists the possible
! 	implementations of the Partition Communication Subsystem for the
! 	Distributed Systems Annex (DSA). The three available implementations
! 	are the dummy stub implementation (No_DSA), and two versions based on
! 	two different distribution runtime libraries: GARLIC and PolyORB. Both
! 	the GARLIC PCS and the PolyORB PCS are part of the GLADE distribution
! 	technology.
! 	Change the literal GLADE_DSA to GARLIC_DSA to accurately describe
! 	that organization.
! 
! 	* rtsfind.ads: Rename RCI_Info to RCI_Locator for better consistency
! 	between the GARLIC and PolyORB versions of the distributed systems
! 	annex.
! 	Remove RE_Unbounded_Reclaim_Pool since it is unused.
! 
! 2004-10-26  Gary Dismukes  <dismukes@gnat.com>
! 
! 	* gnat1drv.adb: Suppress calling the back end when
! 	Frontend_Layout_On_Target is true.
! 
! 2004-10-26  Thomas Quinot  <quinot@act-europe.fr>
! 
! 	* g-os_lib.ads, g-os_lib.adb (Set_Executable, Set_Writable,
! 	Set_Read_Only): New subprograms.
! 	These new routines allow the user to set or unset the Owner execute
! 	and Owner write permission flags on a file.
! 
! 	* makegpr.adb, mlib.adb, mlib-prj.adb: Use
! 	GNAT.OS_Lib.Set_Executable instead of rolling our own.
! 
! 2004-10-26  Matthew Gingell  <gingell@gnat.com>
! 
! 	* i-cpp.ads, i-cpp.adb: Change layout of VTable for new C++ ABI.
! 
! 2004-10-26  Pascal Obry  <obry@gnat.com>
! 
! 	* init.c (__gnat_error_handler) [Win32]: Instead of trying to read the
! 	memory before the faulting page we properly test the process read
! 	access for this address using appropriate Win32 routine.
! 	(HPUX sections): guard with "__hpux__" instead of "hpux".
! 
! 2004-10-26  Robert Dewar  <dewar@gnat.com>
! 
! 	* lib-xref.adb (Generate_Reference): Don't complain about reference to
! 	entry parameter if pragma Unreferenced set, since we do not properly
! 	handle the case of multiple parameters.
! 
! 2004-10-26  Vincent Celier  <celier@gnat.com>
! 
! 	* prj-env.adb: (Contains_ALI_Files): New Boolean function
! 	(Ada_Objects_Path.Add): For a library project, add to the object path
! 	the library directory only if there is no object directory or if the
! 	library directory contains ALI files.
! 	(Set_Ada_Paths.Add.Recursive_Add): Ditto
! 
! 2004-10-26  Vincent Celier  <celier@gnat.com>
! 
! 	* prj-nmsc.adb (Language_Independent_Check): Do not forbid virtual
! 	extension of library projects.
! 
! 	* prj-part.adb: If env var ADA_PROJECT_PATH is not defined, project
! 	path defaults to ".:<prefix>/lib/gnat".
! 	(Parse): For an extending all project, allow direct import of a project
! 	that is virtually extended.
! 
! 	* prj-proc.adb (Imported_Or_Extended_Project_From): If a project with
! 	the specified name is directly imported, return its ID. Otherwise, if
! 	an extension of this project is imported, return the ID of the
! 	extension.
! 
! 2004-10-26  Robert Dewar  <dewar@gnat.com>
! 
! 	* s-arit64.adb: (Le3): New function, used by Scaled_Divide
! 	(Sub3): New procedure, used by Scaled_Divide
! 	(Scaled_Divide): Substantial rewrite, avoid duplicated code, and also
! 	correct more than one instance of failure to propagate carries
! 	correctly.
! 	(Double_Divide): Handle overflow case of largest negative number
! 	divided by minus one.
! 
! 	* s-arit64.ads (Double_Divide): Document that overflow can occur in
! 	the case of a quotient value out of range.
! 	Fix comments.
! 
! 2004-10-26  Robert Dewar  <dewar@gnat.com>
! 
! 	* s-bitops.adb (Bit_Eq): Remove redundant check.
! 
! 	* s-bitops.ads: Minor comment updates
! 	Change some occurrences of Address to System.Address
! 
! 	* s-carsi8.ads: Fix minor cut-and-paste error in comments
! 
! 2004-10-26  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* sem_attr.adb (Resolve_Attribute, case 'Access): Apply proper
! 	accessibility check to prefix that is a protected operation.
! 
! 2004-10-26  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* sem_ch10.adb (Optional_Subunit): If file of expected subunit is
! 	empty, post message on stub.
! 
! 2004-10-26  Ed Schonberg  <schonberg@gnat.com>
! 	    Javier Miranda  <miranda@gnat.com>
! 
! 	* sem_ch12.adb (In_Main_Context): Predicate to determine whether the
! 	current instance appears within a unit that is directly in the context
! 	of the main unit.
! 	Used to determine whether the body of the instance should be analyzed
! 	immediately after its spec, to make its subprogram bodies available
! 	for front-end inlining.
! 	(Analyze_Formal_Array_Type): Cleanup condition that checks that range
! 	constraint is not allowed on the component type (AARM 12.5.3(3))
! 
! 2004-10-26  Cyrille Comar  <comar@act-europe.fr>
! 
! 	* sem_ch13.adb (Analyze_Attribute_Definition_Clause, case
! 	'Storage_Pool): enhance, document & limit detection of non-sharable
! 	internal pools.
! 
! 	* impunit.adb: Make System.Pool_Global and System.Pool_Local visible.
! 
! 	* s-pooglo.ads: Add more documentation now that this pool is properly
! 	documented.
! 
! 2004-10-26  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* sem_ch3.adb (Complete_Private_Subtype): If the full view is a task
! 	or protected type with discriminants, do not constrain the
! 	corresponding record type if the subtype declaration has no
! 	discriminant constraints. This can be the case in source code, or in
! 	the subtype declaration created to rename an actual type within an
! 	instantiation.
! 
! 2004-10-26  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* sem_ch6.adb (Analyze_Subprogram_Body): If body is a subunit for a
! 	different kind of stub (possibly wrong name for file), do not check
! 	for conformance.
! 	(Uses_Secondary_Stack): New subsidiary to Build_Body_To_Inline. If body
! 	includes call to some function that returns an unconstrained type, do
! 	not inline.
! 
! 2004-10-26  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* sem_elab.adb (Check_Elab_Call): Do not check a call that does not
! 	appear in the code for the main unit. Dependencies among units in the
! 	context of the main unit are established when those other units are
! 	compiled. Otherwise spurious elaboration constraints can generate
! 	incorrect elaboration circularities.
! 
! 2004-10-26  Thomas Quinot  <quinot@act-europe.fr>
! 	    Ed Schonberg   <schonberg@gnat.com>
! 
! 	* sem_util.adb (Is_Aliased_View): Defend against the case where this
! 	subprogram is called with a parameter that is not an object name. This
! 	situation arises for some cases of illegal code, which is diagnosed
! 	later, and in this case it is wrong to call Is_Aliased, as that might
! 	cause a compiler crash.
! 	(Explain_Limited_Type): Refine previous fix to include
! 	inherited components of derived types, to provide complete information.
! 
! 	* exp_ch9.adb (Set_Privals): Set the Ekind of the actual object that
! 	is the prival for a protected object.
! 	It is necessary to mark this entity as a variable, in addition to
! 	flagging it as Aliased, because Sem_Util.Is_Aliased_View has been
! 	modified to avoid checking the Aliased flag on entities that are not
! 	objects. (Checking that flag for non-objects is erroneous and could
! 	lead to a compiler crash).
! 
! 2004-10-26  Robert Dewar  <dewar@gnat.com>
! 
! 	* s-fatgen.adb (Pred): Fix redundant test for X > 0.0, since if
! 	X_Frac = 0.5, then we know that the number X must be positive.
! 	(Succ): Remove the same redundant test, and also fix the primary test
! 	to test for X_Frac = -0.5 (used to be 0.5) which is clearly wrong.
! 	Minor reformatting
! 	(Decompose): Add fuller comments to spec
! 
! 2004-10-26  Pascal Obry  <obry@gnat.com>
! 
! 	* tracebak.c (IS_BAD_PTR): Use IsBadCodePtr on Win32 to check for ptr
! 	validity (process must have read access). Set to 0 in all other cases.
! 	(STOP_FRAME): Now check for ptr validity to avoid a segmentation
! 	violation on Win32.
! 	(VALID_STACK_FRAME): Check for ptr validity on Win32 to avoid a
! 	segmentation violation.
! 
! 2004-10-26  Eric Botcazou  <ebotcazou@act-europe.fr>
! 
! 	* trans.c (call_to_gnu): For an (in-)out parameter passed by reference
! 	whose type is a constructed subtype of an aliased object with an
! 	unconstrained nominal subtype, convert the actual to the constructed
! 	subtype before taking its address.
! 
! 2004-10-26  Vincent Celier  <celier@gnat.com>
! 
! 	* a-dirval.ads, a-dirval.adb, a-dirval-vms.adb, a-dirval-mingw.adb
! 	(Is_Path_Name_Case_Sensitive): New function
! 
! 	* a-direct.adb (To_Lower_If_Case_Insensitive): New procedure
! 	(Base_Name, Simple_Name, Current_Directory, Compose,
! 	Containing_Directory, Full_Name): Call To_Lower_If_Case_Insensitive on
! 	the result.
! 
! 2004-10-26  Cyrille Comar    <comar@act-europe.fr>
! 	    Vasiliy Fofanov  <fofanov@act-europe.fr>
! 	    Vincent Celier   <celier@gnat.com>
! 
! 	* gnat_ugn.texi: Generalize "finding memory problems" section into a
! 	"memory management issues" section and document some of the useful
! 	memory pools provided as part of the GNAT library.
! 	Remove "virtual" from declaration of A::method2 in
! 	the simple example of Ada/C++ mixed system.
! 	Library Projects may be virtually extended: their virtual extensions
! 	are not Library Projects.
! 	Added section on extending project hierarchies.
! 
! 2004-10-19  Aaron W. LaFramboise  <aaronavay62@aaronwl.com>
! 
! 	* adaint.c (__gnat_get_libraries_from_registry): Cast value
! 	to LPBYTE.
! 	(__gnat_portable_spawn): Remove const.
! 
! 	* mingw32.h (MAXPATHLEN): Check for previous definition.
! 
! 2004-10-17  Matthias Klose  <doko@debian.org>
! 
! 	* gnatvsn.ads: Set gnat library version to 4.0.
! 
! 2004-10-05  Vincent Celier  <celier@gnat.com>
! 
!         * mlib-tgt.ads: (Build_Dynamic_Library): New parameter Options_2
! 
! 2004-10-04  Laurent GUERBY <laurent@guerby.net>
! 
! 	PR ada/15156
! 	* Makefile.in: Define and use RANLIB_FLAGS.
! 
! 2004-10-04  Pascal Obry  <obry@gnat.com>
! 
! 	* tracebak.c: Always set LOWEST_ADDR to 0 on Win32 (as done on all
! 	other x86 platforms).
! 
! 2004-10-04  Olivier Hainque  <hainque@act-europe.fr>
! 
! 	* s-tassta.adb (Task_Wrapper): Make it Convention C, which makes sense
! 	in general and triggers stack alignment adjustment for thread entry
! 	points on targets where this is necessary.
! 
! 2004-10-04  Bernard Banner  <banner@gnat.com>
! 
! 	PR ada/13897
! 
! 	* Makefile.in: Add section for powerpc linux
! 	Add variant i-vxwork-x86.ads
! 
! 	* i-vxwork-x86.ads, system-linux-ppc.ads: New files.
! 
! 2004-10-04  Olivier Hainque  <hainque@act-europe.fr>
! 
! 	* init.c (__gnat_initialize): Call an Ada subprogram to perform the
! 	table registration calls when need be. Ensures no reference to the crt
! 	ctors symbol are issued in the SJLJ case, which avoids possible
! 	undefined symbol errors in the case of modules to be statically linked
! 	with the kernel.
! 
! 2004-10-04  Javier Miranda  <miranda@gnat.com>
! 
! 	* sem_ch4.adb (Try_Object_Operation): Reformat the code to expand
! 	in-line the code corresponding to subprogram Analyze_Actuals. In
! 	addition, analyze the actuals only in case of subprogram call.
! 
! 2004-10-04  Ed Falis  <falis@gnat.com>
! 
! 	* s-vxwork-x86.ads: (FP_CONTEXT): Defined to be correct size
! 
! 2004-10-04  Sergey Rybin  <rybin@act-europe.fr>
! 
! 	* g-dirope.ads (Base_Name): Clarify the meaning of the Suffix parameter
! 	in the documentation.
! 
! 2004-10-04  Robert Dewar  <dewar@gnat.com>
! 
! 	* sem_ch5.adb (Unblocked_Exit_Count): Now used for blocks as well as
! 	IF and CASE.
! 	(Analyze_Block_Statement): Add circuitry to detect following dead code
! 	(Check_Unreachable_Code): Handle case of block exit
! 
! 2004-10-04  Robert Dewar  <dewar@gnat.com>
! 
! 	* g-spipat.adb: (XMatch): Avoid warning for Logic_Error call
! 	(XMatchD): Avoid warning for Logic_Error call
! 
! 2004-10-04  Robert Dewar  <dewar@gnat.com>
! 
! 	* exp_ch4.adb (Is_Procedure_Actual): Correct so that this does not
! 	consider expressions buried within a procedure actual to be an actual.
! 	This caused some blowups with uses of packed slices within a procedure
! 	actual.
! 
! 2004-10-04  Robert Dewar  <dewar@gnat.com>
! 
! 	* exp_ch3.adb (Needs_Simple_Initialization): Modular packed arrays no
! 	longer need to be initialized to zero.
! 	(Get_Simple_Init_Val): Modular packed arrays no longer need to be
! 	initialized to zero.
! 
! 	* checks.adb (Expr_Known_Valid): Packed arrays are now always
! 	considered valid, even if the representation is modular. That's correct
! 	now that we no longer initialize packed modular arrays to zero.
! 
! 	* exp_dbug.ads: Clarify documentation on handling of PAD and JM
! 	suffixes. These are now documented as the only cases in which the
! 	debugger ignores outer records.
! 	Previously, the spec allowed arbitrary suffixes for this purpose.
! 	Change name of LJM to JM for packed array pad records
! 	Create separate section on packed array handling, and add a whole new
! 	set of comments to this section describing the situation with packed
! 	modular types and justification requirements depending on endianness.
! 
! 2004-10-04  Robert Dewar  <dewar@gnat.com>
! 
! 	* a-except.adb: Add a comment for last change
! 
! 	* einfo.ads: Minor spelling correction in comment
! 
! 	* exp_pakd.adb, gnatdll.adb, prj-attr.ads: Minor reformatting
! 
! 	* sem_ch11.adb: Fix a case of using | instead of \ for continuation
! 	messages.
! 
! 	* sem_util.ads: Minor comment update
! 
! 2004-10-04  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* sem_ch6.adb (Analyze_Subprogram_Body): Do not treat Inline as
! 	Inline_Always when in Configurable_Run_Time mode.
! 
! 	* sem_prag.adb (Process_Convention): If entity is an inherited
! 	subprogram, apply convention to parent subprogram if in same scope.
! 	(Analyze_Pragma, case Inline): Do not treat Inline as Inline_Always
! 	when in Configurable_Run_Time mode.
! 
! 2004-10-04  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* sem_ch3.adb (Build_Derived_Record_Type): Set First/Last entity of
! 	class_wide type after component list has been inherited.
! 
! 2004-10-04  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* sem_ch12.adb (Check_Generic_Actuals): New predicate
! 	Denotes_Previous_Actual, to handle properly the case of a private
! 	actual that is also the component type of a subsequent array actual.
! 	The visibility status of the first actual is not affected when the
! 	second is installed.
! 	(Process_Nested_Formal): Subsidiary of Instantiate_Formal_Package, to
! 	make fully recursive the treatment of formals of packages declared
! 	with a box.
! 	(Restore_Nested_Formal): Subsidiary of Restore_Private_Views, to undo
! 	the above on exit from an instantiation.
! 	(Denotes_Formal_Package): When called from Restore_Private_Views, ignore
! 	current instantiation which is now complete.
! 	(Analyze_Package_Instantiation): No instantiated body is needed if the
! 	main unit is generic. Efficient, and avoid anomalies when a instance
! 	appears in a package accessed through rtsfind.
! 
! 2004-10-04  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* exp_ch6.adb (Expand_N_Function_Call): If stack checking is enabled,
! 	do not generate a declaration for a temporary if the call is part of a
! 	library-level instantiation.
! 
! 2004-10-04  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* sem_util.adb (Explain_Limited_Type): Ignore internal components when
! 	searching for a limited component to flag.
! 
! 	* exp_attr.adb (Freeze_Stream_Subprogram): Subsidiary procedure to
! 	expansion of Input, to account for the fact that the implicit call
! 	generated by the attribute reference must freeze the user-defined
! 	stream subprogram. This is only relevant to 'Input, because it can
! 	appear in an object declaration, prior to the body of the subprogram.
! 
! 	* sem_ch13.adb (Rep_Item_Too_Late): Make the error non-serious, so that
! 	expansion can proceed and further errors uncovered.
! 	(Minor clean up): Fix cases of using | instead of \ for continuation
! 	messages.
! 
! 2004-10-04  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 
! 	* cuintp.c, decl.c, utils2.c: Use gcc_assert and gcc_unreachable.
! 
! 	* trans.c (assoc_to_constructor): Fix unused var warning if no checking.
! 	(gnat_gimplify_expr, case ADDR_EXPR): Fix error in last change.
! 	Use gcc_assert and gcc_unreachable.
! 
! 	* decl.c (gnat_to_gnu_entity, case object): Check and process a
! 	specified alignment before validating size.
! 	(gnat_to_gnu_entity) <E_Modular_Integer_Subtype>: Create a
! 	stripped-down declaration for the type of the inner field when making
! 	a JM type.
! 
! 	* utils.c (finish_record_type): Do not compute the size in units
! 	incrementally. Instead compute it once for the rep clause case.
! 	Use gcc_assert and gcc_unreachable.
! 
! 2004-10-04  Vincent Celier  <celier@gnat.com>
! 
! 	* a-dirval-mingw.adb (Invalid_Character): Add '\' as invalid character
! 	in file name.
! 	(Is_Valid_Path_Name): Take '/' as a directory separator.
! 
! 2004-10-04  Vincent Celier  <celier@gnat.com>
! 
! 	* prj-part.adb (Parse_Single_Project): Call Is_Extending_All
! 	(Extended_Project) only if Extended_Project is defined, to avoid
! 	assertion error.
! 	(Post_Parse_Context_Clause): Always call Set_Path_Name_Of with a
! 	resolved path.
! 	(Parse_Single_Project): Ditto.
! 
! 	* prj-env.adb (Set_Ada_Paths.Add.Recursive_Add): Do not call
! 	Add_To_Project_Path for virtual projects.
! 
! 2004-10-04  Vincent Celier  <celier@gnat.com>
! 
! 	* mlib-tgt-tru64.adb, mlib-tgt-aix.adb, mlib-tgt-irix.adb,
! 	mlib-tgt-hpux.adb, mlib-tgt-linux.adb, mlib-tgt-solaris.adb,
! 	mlib-tgt-vms-alpha.adb, mlib-tgt-vms-ia64.adb, mlib-tgt-mingw.adb,
! 	mlib-tgt-vxworks.adb, mlib-tgt.adb (Build_Dynamic_Library): New
! 	parameter Options_2.
! 
! 	* mlib-prj.ads, mlib-prj.adb (Build_Library): Call
! 	Build_Dynamic_Library with an empty Options_2.
! 
! 	* mlib-utl.ads, mlib-utl.adb (Gcc): Parameter Options_2 has no
! 	default anymore.
! 
! 	* makegpr.adb (Get_Imported_Directories.add): Remove trailing
! 	directory separator, if any.
! 	(Gprmake): Do not allow mains on the command line for library projects.
! 	Do not attempt to link when the project is a library project.
! 	(Library_Opts): New table to store Library_Options.
! 	(Build_Library): If Library_Options is specified, pass these options
! 	when building a shared library.
! 
! 2004-10-04  Jose Ruiz  <ruiz@act-europe.fr>
! 
! 	* s-tposen.adb (Service_Entry): The object must be always unlocked at
! 	the end of this procedure now that the unlock operation was inserted
! 	by the expander.
! 
! 2004-10-04  Jose Ruiz  <ruiz@act-europe.fr>
! 
! 	* targparm.ads, targparm.adb (Targparm_Tags): Add PAS value
! 	corresponding to the Preallocated_Stacks flags in System.
! 	(Get_Target_Parameters): Including the processing for
! 	Preallocated_Stacks.
! 
! 	* system.ads, system-vxworks-x86.ads, system-darwin-ppc.ads,
! 	system-vms_64.ads, system-unixware.ads, system-linux-ia64.ads,
! 	system-freebsd-x86.ads, system-lynxos-ppc.ads, system-lynxos-x86.ads,
! 	system-linux-x86_64.ads, system-tru64.ads, system-aix.ads,
! 	system-vxworks-sparcv9.ads, system-vxworks-xscale.ads,
! 	system-solaris-x86.ads, system-irix-o32.ads, system-irix-n32.ads,
! 	system-hpux.ads, system-vxworks-m68k.ads, system-linux-x86.ads,
! 	system-vxworks-mips.ads, system-os2.ads, system-interix.ads,
! 	system-solaris-sparc.ads, system-solaris-sparcv9.ads, system-vms.ads,
! 	system-mingw.ads, system-vms-zcx.ads, system-vxworks-ppc.ads,
! 	system-vxworks-alpha.ads: Add the flag Preallocated_Stacks, that is
! 	used to signal whether the compiler creates the required stacks and
! 	descriptors for the different tasks (when True) or it is done by the
! 	underlying operating system at run time (when False).
! 	It is initially set to False in all targets.
! 
! 	* exp_ch9.adb (Expand_N_Task_Type_Declaration): Create the task stack
! 	if it is supported by the target.
! 	(Make_Task_Create_Call): Pass the stack address if it has been
! 	previously created. Otherwise pass a Null_Address.
! 
! 	* snames.adb: Add _stack.
! 
! 	* snames.ads: Add Name_uStack. Required to allow the expander to
! 	statically allocated task stacks.
! 
! 	* s-tarest.ads, s-tarest.adb (Create_Restricted_Task): Add
! 	Stack_Address argument.
! 	Check that its value is equal to Null_Address because this target does
! 	not support the static stack allocation.
! 
! 2004-10-04  Thomas Quinot  <quinot@act-europe.fr>
! 
! 	* usage.adb: Change "pragma inline" to "pragma Inline" in information
! 	and error messages
! 
! 2004-10-04  Thomas Quinot  <quinot@act-europe.fr>
! 
! 	* exp_dist.adb: Split declaration of asynchronous flag out of
! 	Add_RACW_Read_Attribute.
! 	Minor reformatting for better alignment with PolyORB version.
! 	Store the entity for the asynchronous flag of an RACW, rather than the
! 	expression, in the asynchronous flags table. This will allow this flag
! 	to be used in other subprograms beside Add_RACW_Read_Attribute.
! 
! 2004-10-04  Thomas Quinot  <quinot@act-europe.fr>
! 
! 	* g-socket.ads, g-socket.adb, g-socthi.adb, socket.c,
! 	g-soccon-aix.ads, g-soccon-irix.ads, g-soccon-hpux.ads,
! 	g-soccon-interix.ads, g-soccon-solaris.ads, g-soccon-vms.adb,
! 	g-soccon-mingw.ads, g-soccon-vxworks.ads, g-soccon-freebsd.ads,
! 	g-soccon.ads, g-soccon-unixware.ads, g-soccon-tru64.ads:  Add new
! 	sockets constant MSG_NOSIGNAL (Linux-specific).
! 	Add new sockets constant MSG_Forced_Flags, list of flags to be set on
! 	all Send operations.
! 	For Linux, set MSG_NOSIGNAL on all send operations to prevent them
! 	from trigerring SIGPIPE.
! 	Rename components to avoid clash with Ada 2005 possible reserved
! 	word 'interface'.
! 	(Check_Selector): When the select system call returns with an error
! 	condition, propagate Socket_Error to the caller.
! 
! 2004-10-01  Jan Hubicka  <jh@suse.cz>
! 
! 	* misc.c (gnat_expand_body): Update call of tree_rest_of_compilation.
! 
! 2004-09-23  Robert Dewar  <dewar@gnat.com>
! 
! 	PR ada/17540
! 
! 	* sem_prag.adb (Process_Import_Or_Interface): Don't set Is_Public here,
! 	instead do this at freeze time (we won't do it if there is an address
! 	clause).
! 	Change "pragma inline" to "pragma Inline" in information and error
! 	messages.
! 	Minor reformatting.
! 
! 	* freeze.adb (Check_Address_Clause): Remove previous change, not the
! 	right way of doing things after all.
! 	(Freeze_Entity): For object, set Is_Public for imported entities
! 	unless there is an address clause present.
! 
! 2004-09-21  Olivier Hainque  <hainque@act-europe.fr>
! 
! 	* decl.c (gnat_to_gnu_entity) <E_General_Access_Type>: Check for a
! 	dummy designated type via TYPE_MODE instead of COMPLETE_TYPE_P. This
! 	ensures proper handling of types with rep clauses, which might have
! 	their TYPE_SIZE set already.
! 
! 2004-09-21  Robert Dewar  <dewar@gnat.com>
! 
! 	* decl.c (gnat_to_gnu_type, case E_Modular_Integer_Type): Wrap modular
! 	packed array types in both little- and big-endian cases. This change
! 	ensures that we no longer count on the unused bits being initialized
! 	for such types (and in particular ensures that equality testing will
! 	only read the relevant bits).
! 	Change name TYPE_LEFT_JUSTIFIED_MODULAR_P to TYPE_JUSTIFIED_MODULAR_P
! 	These changes mean that we no longer need to initialize small packed
! 	arrays.
! 	(gnat_to_gnu_entity) <E_Record_Subtype>: Apply the same
! 	optimization to an LJM field as to its parent field.
! 
! 	* ada-tree.h, trans.c, utils.c, utils2.c:
! 	Change name TYPE_LEFT_JUSTIFIED_MODULAR_P to TYPE_JUSTIFIED_MODULAR_P
! 
! 2004-09-20  Jan Hubicka  <jh@suse.cz>
! 
! 	* utils.c (gnat_finalize): Remove.
! 	(end_subprog_body): Directly call cgraph_finalize_function;
! 	do not lower the nested functions.
! 
! 2004-09-20  Robert Dewar  <dewar@gnat.com>
! 
! 	PR ada/17540
! 
! 	* freeze.adb (Check_Address_Clause): Reset Is_Imported and Is_Public
! 	if an address clause is present, since that means that the Import
! 	should be ignored.
! 
! 2004-09-20  Arnaud Charlet  <charlet@act-europe.fr>
! 
! 	* 5tsystem.ads: Removed, no longer used.
! 
! 2004-09-17  Jeffrey D. Oldham  <oldham@codesourcery.com>
! 	    Zack Weinberg  <zack@codesourcery.com>
! 
! 	* ada-tree.def: Use tree_code_class enumeration constants
! 	instead of code letters.
! 	* ada-tree.h, decl.c, misc.c, trans.c, utils.c, utils2.c:
! 	Update for new tree-class enumeration constants.
! 
! 2004-09-17  Vincent Celier  <celier@gnat.com>
! 
! 	* prj-attr-pm.ads, prj-attr-pm.adb: New files, to split some private
! 	capabilities of the general project manager.
! 
! 2004-09-09  Vincent Celier  <celier@gnat.com>
! 
! 	* a-direct.ads: Add pragma Ada_05
! 	(Directory_Entry_Type): Give default value to component Kind to avoid
! 	not initialized warnings.
! 
! 	* a-direct.adb (Current_Directory): Remove directory separator at the
! 	end.
! 	(Delete_Directory, Delete_Tree): Raise Name_Error if Directory is not
! 	an existing directory.
! 	(Fetch_Next_Entry): Give default value to variable Kind to avoid warning
! 	(Size (String)): Function C_Size returns Long_Integer, not File_Size.
! 	Convert the result to File_Size.
! 
! 	* prj.ads: (Project_Error): New exception
! 
! 	* prj-attr.adb: Except in procedure Initialize, Fail comes from
! 	Prj.Com, not from Osint.
! 	(Attrs, Package_Attributes): Tables moved to private part of spec
! 	(Add_Attribute, Add_Unknown_Package): Moved to new child package
! 	Prj.Attr.PM.
! 	(Register_New_Package (Name, Attributes), Register_New_Attribute): Raise
! 	Prj.Project_Error after call to Fail.
! 	(Register_New_Package (Name, Id)): Set Id to Empty_Package after calling
! 	Fail. Check that package name is not already in use.
! 
! 	* prj-attr.ads: Comment updates to indicate that all subprograms may be
! 	used by tools, not only by the project manager, and to indicate that
! 	exception Prj.Prj_Error may be raised in case of problem.
! 	(Add_Unknown_Package, Add_Attribute): Moved to new child package
! 	Prj.Attr.PM.
! 	(Attrs, Package_Attributes): Table instantiations moved from the body to
! 	the private part to be accessible from Prj.Attr.PM body.
! 
! 	* prj-dect.adb (Parse_Package_Declaration): Call Add_Unknown_Package
! 	from new package Prj.Attr.PM.
! 	(Parse_Attribute_Declaration): Call Add_Attribute from new package
! 	Prj.Attr.PM.
! 
! 	* Makefile.in: Add prj-attr-pm.o to gnatmake object list
! 
! 	* gnatbind.adb (Gnatbind): Correct warning message (Elaboration_Check
! 	instead of Elaboration_Checks).
! 
! 	* a-calend.adb: Minor reformatting
! 
! 2004-09-09  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 
! 	* gigi.h (maybe_pad_type): New declaration.
! 	(create_subprog_type): New arg RETURNS_BY_TARGET_PTR.
! 
! 	* ada-tree.h: (TYPE_RETURNS_BY_TARGET_PTR_P): New macro.
! 
! 	* cuintp.c: Convert to use buildN.
! 
! 	* decl.c (maybe_pad_type): No longer static.
! 	(gnat_to_gnu_entity, case E_Function): Handle case of returning by
! 	target pointer.
! 	Convert to use buildN.
! 
! 	* trans.c (call_to_gnu): Add arg GNU_TARGET; support
! 	TYPE_RETURNS_BY_TARGET_PTR_P.  All callers changed.
! 	(gnat_to_gnu, case N_Assignment_Statement): Call call_to_gnu if call on
! 	RHS.
! 	(gnat_to_gnu, case N_Return): Handle TYPE_RETURN_BY_TARGET_PTR_P.
! 	(gnat_gimplify_expr, case ADDR_EXPR): New case.
! 	Convert to use buildN.
! 
! 	* utils2.c (gnat_build_constructor): Also set TREE_INVARIANT and
! 	TREE_READONLY for const.
! 	Convert to use buildN.
! 
! 	* utils.c (create_subprog_type): New operand RETURNS_BY_TARGET_PTR.
! 	(create_var_decl): Refine when TREE_STATIC is set.
! 	Convert to use buildN.
! 
! 2004-09-09  Gary Dismukes  <dismukes@gnat.com>
! 
! 	* gnat_ugn.texi: Delete text relating to checking of ali and object
! 	consistency.
! 
! 	* a-except.adb (Rcheck_*): Add pragmas No_Return for each of these
! 	routines.
! 
! 2004-09-09  Jose Ruiz  <ruiz@act-europe.fr>
! 
! 	* gnat_ugn.texi: Add Detect_Blocking to the list of configuration
! 	pragmas recognized by GNAT.
! 
! 	* gnat_rm.texi: Document pragma Detect_Blocking.
! 
! 	* s-solita.adb (Timed_Delay_T): When pragma Detect_Blocking is active,
! 	raise Program_Error if called from a protected operation.
! 
! 	* s-taprob.adb (Lock): When pragma Detect_Blocking is active increase
! 	the protected action nesting level.
! 	(Lock_Read_Only): When pragma Detect_Blocking is active increase the
! 	protected action nesting level.
! 	(Unlock): When pragma Detect_Blocking is active decrease the protected
! 	action nesting level.
! 
! 	* s-taskin.adb (Initialize_ATCB): Initialize to 0 the
! 	Protected_Action_Nesting.
! 
! 	* s-taskin.ads: Adding the field Protected_Action_Nesting to the
! 	Common_ATCB record. It contains the dynamic level of protected action
! 	nesting for each task. It is needed for checking whether potentially
! 	blocking operations are called from protected operations.
! 	(Detect_Blocking): Adding a Boolean constant reflecting whether pragma
! 	Detect_Blocking is active or not in the partition.
! 
! 	* s-tasren.adb (Call_Simple): When pragma Detect_Blocking is active,
! 	raise Program_Error if called from a protected operation.
! 	(Task_Entry_Call): When pragma Detect_Blocking is active, raise
! 	Program_Error if called from a protected operation.
! 	(Timed_Task_Entry_Call): When pragma Detect_Blocking is active, raise
! 	Program_Error if called from a protected operation.
! 
! 	* s-tassta.adb (Abort_Tasks): When pragma Detect_Blocking is active,
! 	raise Program_Error if called from a protected operation.
! 
! 	* s-tpoben.adb (Lock_Entries): When pragma Detect_Blocking is active,
! 	raise Program_Error if called from a protected operation, and increase
! 	the protected action nesting level.
! 	(Lock_Read_Only_Entries): When pragma Detect_Blocking is active, raise
! 	Program_Error if called from a protected operation, and increase the
! 	protected action nesting level.
! 	(Unlock_Entries): When pragma Detect_Blocking is active decrease the
! 	protected action nesting level.
! 
! 	* s-tposen.adb (Lock_Entry): When pragma Detect_Blocking is active,
! 	raise Program_Error if called from a protected operation, and increase
! 	the protected action nesting level.
! 	(Lock_Read_Only_Entry): When pragma Detect_Blocking is active, raise
! 	Program_Error if called from a protected operation, and increase the
! 	protected action nesting level.
! 	(Protected_Single_Entry_Call): When pragma Detect_Blocking is active,
! 	raise Program_Error if called from a protected operation.
! 	(Timed_Protected_Single_Entry_Call): When pragma Detect_Blocking is
! 	active, raise Program_Error if called from a protected operation.
! 	(Unlock_Entry): When pragma Detect_Blocking is active decrease the
! 	protected action nesting level.
! 
! 	* sem_util.adb (Check_Potentially_Blocking_Operation): Remove the
! 	insertion of the statement raising Program_Error. The run time
! 	contains the required machinery for handling that.
! 
! 	* sem_util.ads: Change comment associated to procedure
! 	Check_Potentially_Blocking_Operation.
! 	This procedure does not insert a call for raising the exception because
! 	that is currently done by the run time.
! 
! 	* raise.h (__gnat_set_globals): Pass the detect_blocking parameter.
! 
! 	* init.c: Add the global variable __gl_detect_blocking that indicates
! 	whether pragma Detect_Blocking is active (1) or not (0). Needed for
! 	making the pragma available at run time.
! 	(__gnat_set_globals): Pass and update the detect_blocking parameter.
! 
! 	* lib-writ.adb (Write_ALI): Set the DB flag in the ali file if
! 	pragma Detect_Blocking is active.
! 
! 	* lib-writ.ads: Document the Detect_Blocking flag (DB) in ali files.
! 
! 	* ali.adb (Scan_ALI): Set the Detect_Blocking value to true if the flag
! 	DB is found in the ali file. Any unit compiled with pragma
! 	Detect_Blocking active forces its effect in the whole partition.
! 
! 	* a-retide.adb (Delay_Until): Raise Program_Error if pragma
! 	Detect_Blocking is active and delay is called from a protected
! 	operation.
! 
! 	* bindgen.adb (Gen_Adainit_Ada): When generating the call to
! 	__gnat_set_globals, pass 1 as Detect_Blocking parameter if pragma
! 	Detect_Blocking is active (0 otherwise).
! 	(Gen_Adainit_C): When generating the call to __gnat_set_globals, pass 1
! 	as Detect_Blocking parameter if pragma Detect_Blocking is active (0
! 	otherwise).
! 
! 2004-09-09  Thomas Quinot  <quinot@act-europe.fr>
! 
! 	* gnat_rm.texi: Rename GNAT.Perfect_Hash.Generators to
! 	GNAT.Perfect_Hash_Generators, and remove the empty GNAT.Perfect_Hash
! 	package.
! 
! 	* s-parint.ads, s-parint.adb (Get_RAS_Info): New subprogram.
! 	(Register_Receiving_Stub): Add Subp_Info formal parameter.
! 	Update API in placeholder implemetation of s-parint to reflect changes
! 	in distribution runtime library.
! 
! 	* sem_ch3.adb (Expand_Derived_Record): Rename to
! 	Expand_Record_Extension.
! 
! 	* sem_disp.adb (Check_Controlling_Formals): Improve error message for
! 	primitive operations of potentially distributed object types that have
! 	non-controlling anonymous access formals.
! 
! 	* sem_dist.ads, sem_dist.adb (Build_RAS_Primitive_Specification): New
! 	subprogram.
! 	New implementation of expansion for remote access-to-subprogram types,
! 	based on the RACW infrastructure.
! 	This version of sem_dist is compatible with PolyORB/DSA as well as
! 	GLADE.
! 
! 	* sem_prag.adb (Analyze_Pragma, case Pragma_Asynchronous): For a pragma
! 	Asynchrronous that applies to a remote access-to-subprogram type, mark
! 	the underlying RACW type as asynchronous.
! 
! 	* link.c: FreeBSD uses GNU ld: set __gnat_objlist_file_supported and
! 	 __gnat_using_gnu_linker to 1.
! 
! 	* Makefile.rtl, impunit.adb, g-perhas.ads, g-pehage.ads,
! 	g-pehage.adb: Rename GNAT.Perfect_Hash.Generators to
! 	GNAT.Perfect_Hash_Generators, and remove the empty
! 	GNAT.Perfect_Hash package.
! 
! 	* atree.adb: Minor reformatting
! 
! 	* exp_ch3.adb (Expand_Derived_Record): Rename to
! 	Expand_Record_Extension.
! 	(Build_Record_Init_Proc.Build_Assignment): The default expression in
! 	a component declaration must remain attached at that point in the
! 	tree so New_Copy_Tree copies it if the enclosing record type is derived.
! 	It is therefore necessary to take a copy of the expression when building
! 	the corresponding assignment statement in the init proc.
! 	As a side effect, in the case of a derived record type, we now see the
! 	original expression, without any rewriting that could have occurred
! 	during expansion of the ancestor type's init proc, and we do not need
! 	to go back to Original_Node.
! 
! 	* exp_ch3.ads (Expand_Derived_Record): Rename to
! 	Expand_Record_Extension.
! 
! 	* exp_dist.ads, exp_dist.adb (Underlying_RACW_Type): New subprogram.
! 	Returns the RACW type used to implement a remote access-to-subprogram
! 	type.
! 	(Add_RAS_Proxy_And_Analyze, Build_Remote_Subprogram_Proxy_Type):
! 	New subprograms. Used to create a proxy tagged object for a remote
! 	subprogram. The proxy object is used as the designated object
! 	for RAS values on the same partition (unless All_Calls_Remote applies).
! 	(Build_Get_Unique_RP_Call): New subprogram. Build a call to
! 	System.Partition_Interface.Get_Unique_Remote_Pointer.
! 	(Add_RAS_Access_TSS, Add_RAS_Dereference_TSS):
! 	Renamed from Add_RAS_*_Attribute.
! 	(Add_Receiving_Stubs_To_Declarations): Generate a table of local
! 	subprograms.
! 	New implementation of expansion for remote access-to-subprogram types,
! 	based on the RACW infrastructure.
! 
! 	* exp_dist.ads (Copy_Specification): Update comment to note that this
! 	function can copy the specification from either a subprogram
! 	specification or an access-to-subprogram type definition.
! 
! 2004-09-09  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* sem_type.adb (Disambiguate): Handle properly an accidental ambiguity
! 	in an instance, between an explicit subprogram an one inherited from a
! 	type derived from an actual.
! 
! 	* exp_ch6.adb (Expand_N_Subprogram_Body): If polling is enabled, do not
! 	add a polling call if the subprogram is to be inlined by the back-end,
! 	to avoid repeated calls with multiple inlinings.
! 
! 	* checks.adb (Apply_Alignment_Check): If the expression in the address
! 	clause is a call whose name is not a static entity (e.g. a dispatching
! 	call), treat as dynamic.
! 
! 2004-09-09  Robert Dewar  <dewar@gnat.com>
! 
! 	* g-trasym.ads: Minor reformatting
! 
! 	* exp_ch3.adb (Component_Needs_Simple_Initialization): Don't except
! 	packed arrays, since unused bits are expected to be zero for a
! 	comparison.
! 
! 2004-09-09  Eric Botcazou  <ebotcazou@act-europe.fr>
! 
! 	* exp_pakd.ads: Fix an inacurracy and a couple of typos in the head
! 	comment.
! 
! 2004-09-09  Pascal Obry  <obry@gnat.com>
! 
! 	* mdll.ads, mdll.adb (Build_Dynamic_Library): New parameter Map_File to
! 	enable map file generation. Add the right option to generate the map
! 	file if Map_File is set to True.
! 
! 	* gnatdll.adb (Gen_Map_File): New variable.
! 	(Syntax): Add info about new -m (Map_File) option.
! 	(Parse_Command_Line): Add support for -m option.
! 	(gnatdll): Pass Gen_Map_File to Build_Dynamic_Library calls.
! 	Minor reformatting.
! 
! 2004-09-09  Laurent Pautet  <pautet@act-europe.fr>
! 
! 	* gnatls.adb: Add a very verbose mode -V. Such mode is required by the
! 	new gnatdist implementation.
! 	Define a subpackage isolating the output routines specific to this
! 	verbose mode.
! 
! 2004-09-09  Joel Brobecker  <brobecker@gnat.com>
! 
! 	* Makefile.rtl: (GNATRTL_NONTASKING_OBJS): Add g-dynhta.
! 
! 	* gnat_ugn.texi (Main Subprograms): Fix typo. Deduced, not deducted.
! 
! 2004-09-09  Cyrille Comar  <comar@act-europe.fr>
! 
! 	* opt.adb (Set_Opt_Config_Switches): Use Ada_Version_Runtime to compile
! 	internal unit.
! 
! 	* opt.ads: Add Ada_Version_Runtime constant used to decide which
! 	version of the language is used to compile the run time.
! 
! 2004-09-09  Arnaud Charlet  <charlet@act-europe.fr>
! 
! 	* sem_util.adb (Requires_Transient_Scope): Re-enable handling
! 	of variable length temporaries for function return now that the
! 	back-end and gigi support it.
! 
! 2004-09-01  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 
! 	* misc.c (gnat_print_type): Use TYPE_RM_SIZE_NUM.
! 
! 	* trans.c (struct stmt_group): Delete field GLOBAL.
! 	(gnat_init_stmt_group): Do not initialize it.
! 	(call_to_gnu): Use save_expr, not protect_multiple_eval.
! 	(Exception_Handler_to_gnu_sjlj): Call build_int_cst, not build_int_2
! 	(gnat_to_gnu, case N_Character_Literal, N_String_Literal): Likewise.
! 	(gnat_to_gnu, case N_Compilation_Unit): Do not set GLOBAL in stmt group.
! 	(start_stmt_group): Likewise.
! 	(add_stmt, add_decl_expr): Rework handling of global DECL_EXPRs.
! 
! 	* utils2.c (ggc.h): Include.
! 	(build_call_raise): Call build_int_cst, not build_int_2.
! 
! 	* utils.c (gnat_init_decl_processing): Fix arg to
! 	build_common_tree_nodes.
! 	(create_subprog_type): Do not use SET_TYPE_CI_CO_LIST.
! 	(gnat_define_builtin): Set built_in_decls.
! 	(init_gigi_decls): Call build_int_cst, not build_int_2.
! 
! 	* ada-tree.h (struct lang_decl, struct lang_type): Field is type tree.
! 	(GET_TYPE_LANG_SPECIFIC, SET_TYPE_LANG_SPECIFIC): New macros.
! 	(GET_DECL_LANG_SPECIFIC, SET_DECL_LANG_SPECIFIC): Likewise.
! 	(TYPE_CI_CO_LIST, SET_TYPE_CI_CO_LIST, TYPE_MODULE,
! 	SET_TYPE_MODULE): Use them.
! 	(TYPE_INDEX_TYPE, SET_TYPE_INDEX_TYPE, TYPE_DIGITS_VALUE): Likewise.
! 	(SET_TYPE_DIGITS_VALUE, TYPE_UNCONSTRAINED_ARRAY): Likewise.
! 	(SET_TYPE_UNCONSTRAINED_ARRAY, TYPE_ADA_SIZE,
! 	SET_TYPE_ADA_SIZE): Likewise.
! 	(TYPE_ACTUAL_BOUNDS, SET_TYPE_ACTUAL_BOUNDS): Likewise.
! 	(DECL_CONST_CORRESPONDING_VAR,
! 	SET_DECL_CONST_CORRESPONDING_VAR): Likewise.
! 	(DECL_ORIGINAL_FIELD, SET_DECL_ORIGINAL_FIELD): Likewise.
! 	(TYPE_RM_SIZE_INT, TYPE_RM_SIZE_ENUM, SET_TYPE_RM_SIZE_ENUM): Deleted.
! 	(TYPE_RM_SIZE_NUM): New macro.
! 	(TYPE_RM_SIZE): Modified to use above.
! 
! 	* cuintp.c: (build_cst_from_int): New function.
! 	(UI_To_gnu): Use it.
! 
! 	* decl.c (gnat_to_gnu_entity): Use TYPE_RM_SIZE_NUM.
! 	(make_type_from_size): Avoid changing TYPE_UNSIGNED of a type.
! 	(gnat_substitute_in_type, case ARRAY_TYPE): If old had a
! 	MIN_EXPR for the size, copy it into new.
! 
! 2004-09-01  Robert Dewar  <dewar@gnat.com>
! 
! 	* exp_ch6.adb (Expand_Call): Properly handle validity checks for
! 	packed indexed component where array is an IN OUT formal. This
! 	generated garbage code previously.
! 
! 	* gnat_ugn.texi: Document -fverbose-asm
! 
! 	* gnat-style.texi: Minor updates (note that boolean constants and
! 	variables are joined with AND/OR rather than short circuit forms).
! 
! 2004-09-01  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* exp_util.adb (Safe_Unchecked_Type_Conversion): Conversion is safe if
! 	it is an upward conversion of an untagged type with no representation
! 	change.
! 
! 2004-09-01  Thomas Quinot  <quinot@act-europe.fr>
! 
! 	* rtsfind.ads: Move RCI_Subp_Info and RCI_Subp_Info_Array to
! 	System.Partition_Interface.
! 
! 	* checks.adb (Apply_Access_Checks): Do not generate checks when
! 	expander is not active (but check for unset reference to prefix of
! 	dereference).
! 
! 	* sem_prag.adb (Analyze_Pragma, case Pragma_Debug): Uniformly rewrite
! 	pragma Debug as an if statement with a constant condition, for
! 	consistent treatment of entity references contained within the
! 	enclosed procedure call.
! 
! 2004-09-01  Vincent Celier  <celier@gnat.com>
! 
! 	* bindgen.adb: (Set_EA_Last): New procedure
! 	(Gen_Exception_Table_Ada, Gen_Exception_Table_C): Use new procedure
! 	Set_EA_Last.
! 	(Gen_Adafinal_Ada): If no finalization, adafinal does nothing
! 	(Gen_Output_File_Ada): Always call Gen_Adafinal_Ada, so that SAL can be
! 	linked without errors.
! 	(Gen_Exception_Table_Ada): Correct bugs when generating code for arrays
! 	ST and EA.
! 	(Gen_Exception_Table_C): Correct same bugs
! 
! 	* vms_data.ads: Add new qualifier /VERBOSE_ASM to GCC_Switches
! 
! 	* g-os_lib.adb (Normalize_Pathname.Get_Directory): When Dir is empty,
! 	on Windows, make sure that the drive letter is in upper case.
! 
! 	* g-os_lib.ads (Normalize_Pathname): Add a comment to indicate that on
! 	Windows, when the drive letter is added and Case_Sensitive is True, the
! 	drive letter is forced to upper case.
! 
! 	* mlib-tgt-irix.adb (Build_Dynamic_Library): Transfer all -lxxx options
! 	to Options_2 for the call to MLib.Utl.Gcc.
! 
! 	* bld.adb (Put_Include_Project): Use '/', not '\' on Windows as
! 	directory separator when defining BASE_DIR.
! 
! 2004-09-01  Pascal Obry  <obry@gnat.com>
! 
! 	* gprcmd.adb (Extend): Do not output trailing directory separator. This
! 	is not needed and it confuses Windows GNU/make which does not report
! 	directory terminated by a slash as a directory.
! 	(gprcmd): Idem for "pwd" internal command.
! 
! 	* Makefile.generic: Use __GPRCOLON__ instead of pipe character in
! 	target names rewrite to fix regressions with recent version of
! 	GNU/make. Starting with GNU/make 3.80 the pipe character was not
! 	handled properly anymore.
! 
! 2004-09-01  Andreas Schwab  <schwab@suse.de>
! 
! 	* Make-lang.in (EXTRA_GNATBIND_OBJS): Revert last change.
! 	* raise.c [!IN_RTS]: Undef abort.
! 
! 2004-08-27  Nathan Sidwell  <nathan@codesourcery.com>
! 
! 	* utils2.c (build_allocator): Use ssize_int.
! 
! 	* utils.c (gnat_init_decl_processing): Ada has a signed sizetype.
! 
! 2004-08-27  Andreas Schwab  <schwab@suse.de>
! 
! 	* Make-lang.in (EXTRA_GNATBIND_OBJS): Add errors.o.
! 
! 2004-08-25  Nathan Sidwell  <nathan@codesourcery.com>
! 	    Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 
! 	* ada-tree.h (TYPE_RM_SIZE_INT): Use TYPE_LANG_SLOT_1.
! 
! 2004-08-25  Nathan Sidwell  <nathan@codesourcery.com>
! 
! 	* cuintp.c (UI_To_gnu): Adjust build_int_cst calls.
! 	* trans.c (Exception_Handler_to_gnu_sjlj, gnat_to_gnu): Likewise.
! 	* utils.c (init_gigi_decls): Likewise.
! 	* utils2.c (build_call_raise, build_allocator): Likewise.
! 
! 2004-08-24  Nathan Sidwell  <nathan@codesourcery.com>
! 
! 	* utils.c (gnat_init_decl_processing): Adjust
! 	build_common_tree_nodes call.
! 
! 2004-08-20  Nathan Sidwell  <nathan@codesourcery.com>
! 
! 	* utils2.c (build_allocator): Use build_int_cst for negative
! 	size types.
! 
! 2004-08-18  Richard Henderson  <rth@redhat.com>
! 
! 	* misc.c (LANG_HOOKS_HONOR_READONLY): Remove.
! 
! 2004-08-16  Nathan Sidwell  <nathan@codesourcery.com>
! 
! 	* cuintp.c (UI_To_gnu): Be more conservative with build_int_cst
! 	call.s
! 	* trans.c (Exception_Handler_to_gnu_sjlj): Likewise.
! 	(gnat_to_gnu): Likewise.
! 
! 2004-08-16  Pascal Obry  <obry@gnat.com>
! 
! 	* adaint.c (__gnat_prj_add_obj_files): Set to 0 only on Win32 for GCC
! 	backend prior to GCC 3.4. With GCC 3.4 we are using the GCC's shared
! 	option and not mdll anymore. Update comment.
! 
! 2004-08-16  Pascal Obry  <obry@gnat.com>
! 
! 	* bld.adb (Put_Include_Project): Properly handle directory separators
! 	on Windows.
! 
! 2004-08-16  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* sem_ch4.adb (Try_Object_Operation): Restructure code. Optimize by
! 	decreasing the number of allocated junk nodes while searching for the
! 	appropriate subprogram.
! 
! 2004-08-15  Nathan Sidwell  <nathan@codesourcery.com>
! 
! 	* cuintp.c (UI_To_gnu): Use build_int_cst..
! 	* trans.c (Exception_Handler_to_gnu_sjlj, gnat_to_gnu): Likewise.
! 	* utils.c (init_gigi_decls): Likewise.
! 	* utils2.c (build_call_raise): Likewise.
! 
! 2004-08-13  Olivier Hainque  <hainque@act-europe.fr>
! 
! 	* decl.c (gnat_to_gnu_entity) <E_Variable>: When building an allocator
! 	for a global aliased object with a variable size and an unconstrained
! 	nominal subtype, pretend there is no initializer if the one we have is
! 	incomplete, and avoid referencing an inexistant component in there. The
! 	part we have will be rebuilt anyway and the reference may confuse
! 	further operations.
! 
! 2004-08-13  Thomas Quinot  <quinot@act-europe.fr>
! 
! 	* einfo.ads: Minor reformatting
! 
! 	* lib-writ.adb (Output_Main_Program_Line): Do not set parameter
! 	restrictions in the ALI if we only want to warn about violations.
! 
! 2004-08-13  Vincent Celier  <celier@gnat.com>
! 
! 	* ali.adb (Scan_ALI): Initialize component Body_Needed_For_SAL to False
! 	when creating a new Unit_Record in table Units.
! 
! 	* gnatls.adb (Output_Unit): In verbose mode, output the restrictions
! 	that are violated, if any.
! 
! 	* prj-nmsc.adb (Ada_Check.Get_Path_Names_And_Record_Sources): Do not
! 	add directory separator if path already ends with a directory separator.
! 
! 2004-08-13  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* rtsfind.adb (Entity_Not_Defined): If the error ocurrs in a predefined
! 	unit, this is an attempt to inline a construct that is not available in
! 	the current restricted mode, so abort rather than trying to continue.
! 
! 	* sem_ch3.adb (Build_Underlying_Full_View): If the new type has
! 	discriminants that rename those of the parent, recover names of
! 	original discriminants for the constraint on the full view of the
! 	parent.
! 	(Complete_Private_Subtype): Do not create a subtype declaration if the
! 	subtype is an itype.
! 
! 	* gnat_rm.texi: Added section on implementation of discriminated
! 	records with default values for discriminants.
! 
! 2004-08-13  Ed Schonberg  <schonberg@gnat.com>
! 
! 	PR ada/15601
! 	* sem_res.adb (Make_Call_Into_Operator): Handle properly the case where
! 	the second operand is overloaded.
! 
! 2004-08-10  Richard Henderson  <rth@redhat.com>
! 
! 	* utils.c (gnat_install_builtins): Remove __builtin_stack_alloc,
! 	add __builtin_alloca.
! 
! 2004-08-10  Richard Henderson  <rth@redhat.com>
! 
! 	* config-lang.in (boot_language): Yes.
! 
! 2004-08-09  Thomas Quinot  <quinot@act-europe.fr>
! 
! 	* g-socket.adb (Abort_Selector): Initialize Buf to prevent valgrind
! 	from complaining on potential uninitialized reference.
! 	Change calls to GNAT.Sockets.Thin.Is_Socket_In_Set to account for
! 	new specification and test explicitly for non-zero return value.
! 
! 	* g-socthi.ads (Is_Socket_In_Set): Declare imported function as
! 	returning C.int, to avoid using a derived boolean type.
! 
! 	* exp_ch5.adb (Make_Tag_Ctrl_Assignments): Use
! 	Duplicate_Subexpr_No_Checks in preference to direct use of
! 	Remove_Side_Effects and New_Copy_Tree.
! 	Clear Comes_From_Source on prefix of 'Size attribute reference.
! 
! 	* g-socthi.adb, g-socthi-vms.adb, g-socthi-mingw.adb,
! 	g-socthi-vxworks.adb: Change calls to
! 	GNAT.Sockets.Thin.Is_Socket_In_Set to account for new specification
! 	and test explicitly for non-zero return value.
! 
! 	* g-socthi-vms.ads, g-socthi-mingw.ads, g-socthi-vxworks.ads:
! 	(Is_Socket_In_Set): Declare imported function as returning C.int, to
! 	avoid using a derived boolean type.
! 
! 2004-08-09  Albert Lee  <lee@gnat.com>
! 
! 	* system-irix-n32.ads: Refine tasking priority constants for IRIX.
! 
! 2004-08-09  Pascal Obry  <obry@gnat.com>
! 
! 	* gnat_ugn.texi: Document new way to build DLLs on Windows using
! 	GCC's -shared option.
! 
! 	* mlib-tgt-mingw.adb (Build_Dynamic_Library): Pass GCC's options into
! 	Options_2 parameter (options put after object files).
! 
! 2004-08-09  Olivier Hainque  <hainque@act-europe.fr>
! 
! 	* decl.c (gnat_to_gnu_entity) <E_Array_Subtype>: Adjust condition to
! 	ignore overflows on low and high bounds of an index to also account for
! 	differences in signedness between sizetype and gnu_index_subtype.
! 	These are as legitimate as the ones caused by a lower TYPE_PRECISION
! 	on sizetype.
! 
! 2004-08-09  Robert Dewar  <dewar@gnat.com>
! 
! 	* s-solita.ads, s-solita.adb: Minor reformatting
! 
! 	* gnat_rm.texi: Add documentation for pragma Profile (Restricted)
! 	Move pragma Restricted_Run_Time, No_Run_Time, Ravenscar to new
! 	obsolescent section
! 	Add note that No_Implicit_Conditionals does not suppress
! 	run time constraint checks.
! 
! 	* vms_conv.ads: Minor reformatting
! 
! 	* s-secsta.adb: Use SS_Ptr instead of Mark_Id as stack pointer (cleanup
! 	and necessary for following change).
! 	(Mark): Return new format Mark_Id containing sec stack address
! 	(Release): Use sec stack address from Mark_Id avoiding Self call
! 
! 	* s-secsta.ads: Define SS_Ptr to be used instead of Mark_Id as stack
! 	pointer (cleanup and necessary for following change).
! 	Define Mark_Id as record containing address of secondary stack, that way
! 	Release does not need to find the stack again, decreasing the number of
! 	calls to Self and improving efficiency.
! 
! 	* sem_util.ads: Add a ??? comment for Is_Local_Variable_Reference
! 
! 	* sem_ch5.adb (Analyze_Case_Statement): Add circuitry to track value of
! 	case variable into the individual case branches when possible.
! 
! 	* sem_ch11.adb: Minor reformatting
! 
! 	* prj.ads: Correct spelling of suffixs
! 
! 	* prj-nmsc.adb: Minor reformatting
! 	Correct spelling suffixs throughout (also in identifiers)
! 
! 	* freeze.adb: Minor spelling correction
! 
! 	* exp_ch2.adb: Cleanups to handling of Current_Value
! 	(no functional effect).
! 
! 	* bld.adb: Correct spelling of suffixs
! 
! 	* einfo.adb (Enclosing_Dynamic_Scope): Defend against junk argument
! 
! 2004-08-09  Ed Schonberg  <schonberg@gnat.com>
! 
! 	PR ada/15408
! 
! 	* sem_ch7.adb (Install_Private_Declarations): In the body of the
! 	package or of a child, private entities are both immediately_visible
! 	and not hidden.
! 
! 2004-08-09  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* sem_eval.adb (Eval_Integer_Literal): If the context is Any_Integer,
! 	there are no range checks on the value of the literal.
! 
! 	* exp_ch7.adb (Insert_Actions_In_Scope_Around): If the node being
! 	wrapped is the triggering alternative of an asynchronous select, action
! 	statements mustbe inserted before the select itself.
! 
! 	* sem_attr.adb (Analyze_Attribute, case 'Size): Handle properly the
! 	case where the prefix is a protected function call.
! 	(Resolve_Attribute, case 'Access): The attribute reference on a
! 	subprogram is legal in a generic body if the subprogram is declared
! 	elsewhere.
! 
! 2004-08-09  Vincent Celier  <celier@gnat.com>
! 
! 	* makegpr.adb (Build_Library): Link with g++ if C++ is one of the
! 	languages, otherwise building the library may fail with unresolved
! 	symbols.
! 	(Compile_Sources): Do not build libraries if -c switch is used
! 
! 	* gnatlink.adb (Process_Args): New switches -M and -Mmap
! 	(Write_Usage): If map file creation is supported, output new switches
! 	-M and -Mmap.
! 	(Gnatlink): When -M is specified, add the necessary switch(es) to the
! 	gcc call, when supported.
! 
! 	* Makefile.in: Added indepsw.o to the object list for gnatlink
! 	Specified the AIX, GNU/Linux and Windows versions of indepsw.adb
! 
! 	* indepsw-aix.adb, indepsw-linux.adb, indepsw-mingw.adb,
! 	indepsw.adb, indepsw.ads: New files.
! 
! 2004-08-09  Bernard Banner  <banner@gnat.com>
! 
! 	* system-vxworks-x86.ads, s-vxwork-x86.ads: New files.
! 
! 	* Makefile.in: add section for vxworks x86
! 
! 2004-08-09  Hristian Kirtchev  <kirtchev@gnat.com>
! 
! 	* exp_ch3.adb (Build_Init_Statements): Add extra condition to deal with
! 	per-object constrained components where the discriminant is of an
! 	Access type.
! 	(Build_Record_Init_Proc): Add condition to prevent the inheritance of
! 	the parent initialization procedure for derived Unchecked_Unions.
! 	Instead, derived Unchecked_Unions build their own initialization
! 	procedure.
! 	(Build_Variant_Record_Equality): Implement Unchecked_Union equality.
! 	Check the body of the subprogram for details.
! 	(Freeze_Record_Type): Prevent the inheritance of discriminant checking
! 	functions for derived Unchecked_Union types by introducing a condition.
! 	Allow the creation of TSS equality functions for Unchecked_Unions.
! 	(Make_Eq_Case): Rename formal parameter Node to E in function signature.
! 	Add formal parameter Discr to function signature. Discr is used to
! 	control the generated case statement for Unchecked_Union types.
! 	(Make_Eq_If): Rename formal parameter Node to E in function signature.
! 
! 	* exp_ch4.adb (Build_Equality_Call): Implement equality calls for
! 	Unchecked_Unions.
! 	Check the body of the subprogram for details.
! 	(Expand_Composite_Equality): Augment composite type equality to include
! 	correct handling of Unchecked_Union components.
! 	(Expand_N_In): Add condition to detect illegal membership tests when the
! 	subtype mark is a constrained Unchecked_Union and the expression lacks
! 	inferable discriminants, and build a Raise_Program_Error node.
! 	(Expand_N_Op_Eq): Add function Has_Unconstrained_UU_Component. Used
! 	to detect types that contain components of unconstrained Unchecked_Union
! 	subtype. Add condition to detect equality between types that have an
! 	unconstrained Unchecked_Union component, and build a Raise_Program_Error
! 	node. Add condition to detect equality between Unchecked_Union types
! 	that lack inferable discriminants, and build a Raise_Program_Error node.
! 	Otherwise build a TSS equality function call.
! 	(Expand_N_Type_Conversion): Add condition to detect illegal conversions
! 	from a derived Unchecked_Union to an unconstrained non-Unchecked_Union
! 	with the operand lacking inferable discriminants, and build a Raise_
! 	Program_Error node.
! 	(Expand_Record_Equality): Remove guard that prevents Unchecked_Union
! 	composite equality.
! 	(Has_Inferable_Discriminants): Implement new predicate for objects and
! 	expressions of Unchecked_Union type. Check the body of subprogram for
! 	details.
! 	(Has_Unconstrained_UU_Components): Add function
! 	Component_Is_Unconstrained_UU. It is used to detect whether a single
! 	component is of an unconstrained Unchecked_Union subtype. Add function
! 	Variant_Is_Unconstrained_UU. It is used to detect whether a single
! 	component inside a variant is of an unconstrained Unchecked_Union type.
! 
! 	* exp_ch5.adb (Expand_Assign_Record): Add condition to copy the
! 	inferred discriminant values. Add condition to generate a case
! 	statement with an inferred discriminant as the switch.
! 	(Make_Component_List_Assign): Introduce a Boolean flag that determines
! 	the behaviour of the subprogram in the presence of an Unchecked_Union.
! 	Add condition to trigger the usage of the inferred discriminant value
! 	as the generated case statement switch.
! 	(Make_Field_Assign): Introduce a Boolean flag that determines the
! 	behaviour of the subprogram in the presence of an Unchecked_Union. Add
! 	condition to trigger the usage of the inferred discriminant value as
! 	the right-hand side of the generated assignment.
! 
! 	* exp_ch6.adb (Expand_Call): Add condition to skip extra actual
! 	parameter generation when dealing with Unchecked_Unions.
! 
! 	* checks.adb (Apply_Discriminant_Check): Do not apply discriminant
! 	checks for Unchecked_Unions.
! 
! 	* einfo.ads: Update comment on usage of flag Has_Per_Object_Constraint
! 
! 	* exp_attr.adb (Expand_N_Attribute_Reference): Produce
! 	Raise_Program_Error nodes for the execution of Read and Write
! 	attributes of Unchecked_Union types and the execution of Input and
! 	Output attributes of Unchecked_Union types that lack default
! 	discriminant values.
! 
! 	* sem_prag.adb (Analyze_Pragma): Remodel the analysis of pragma
! 	Unchecked_Union. Add procedure Check_Component. It is used to inspect
! 	per-object constrained components of Unchecked_Unions for being
! 	Unchecked_Unions themselves. Add procedure Check_Variant. It is used to
! 	check individual components withing a variant.
! 
! 	* sem_res.adb (Resolve_Comparison_Op): Remove guard that prevents
! 	comparison of Unchecked_Unions.
! 	(Resolve_Equality_OP): Remove guard that prevents equality between
! 	Unchecked_Unions.
! 
! 	* sem_util.adb (Build_Component_Subtype): Add guard to prevent creation
! 	of component subtypes for Unchecked_Union components.
! 	(Get_Actual_Subtype): Add condition that returs the Unchecked_Union type
! 	since it is the actual subtype.
! 
! 	* sem_ch12.adb (Instantiate_Type): Add condition to detect the correct
! 	pass of Unchecked_Union subtypes as generic actuals to formal types
! 	that lack known_discriminant_parts or that are derived Unchecked_Union
! 	types, and do nothing. In any other case, produce an error message.
! 
! 	* sem_ch3.adb (Analyze_Component_Declaration): Add function
! 	Contains_POC. It determines whether a constraint uses the discriminant
! 	of an enclosing record type.
! 	Add condition to detect per-object constrained component and set the
! 	appropriate flag.
! 	(Derived_Type_Declaration): Remove guard that prevents derivation from
! 	Unchecked_Union types.
! 	(Process_Subtype): Remove quard that prevents the creation of Unchecked_
! 	Union subtypes.
! 
! 	* sem_ch4.adb (Analyze_Selected_Component): Correct the detection of
! 	references to Unchecked_Union discriminants.
! 
! 	* sem_ch6.adb (Create_Extra_Formals): Add condition to skip extra
! 	formal generation when dealing with Unchecked_Unions.
! 	(Set_Actual_Subtypes): Add condition to prevent generation of actual
! 	subtypes for Unchecked_Unions.
! 
! 	* sem_ch7.adb (Analyze_Package_Specification): Add procedure
! 	Inspect_Unchecked_Union_Completion. It is used to detect incorrect
! 	completions of discriminated partial views by Unchecked_Unions and
! 	produce an error message.
! 
! 2004-08-09  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 
! 	* trans.c (struct stmt_group): New field, GLOBAL.
! 	(global_stmt_group, gnu_elab_proc_decl, build_unit_elab): Deleted.
! 	(struct elab_info): New struct.
! 	(elab_info_list, gnu_elab_proc_stack): New variables.
! 	(Compilation_Unit_to_gnu): New procedure.
! 	(gigi): Call it and also handle elaboration procs we've saved.
! 	(gnat_init_stmt_group): Don't set global_stmt_group; instead initialize
! 	global field from parent.
! 	(gnat_to_gnu): Get decl from gnu_elab_proc_stack.
! 	(gnat_to_gnu, case N_Compilation_Unit): Call Compilation_Unit_to_gnu.
! 	(start_stmt_group): Initialize global field from parent.
! 	(add_decl_expr): Set to global for current statement group.
! 	(gnat_gimplify_expr, case NULL_EXPR): Add operand 0 to pre list, not
! 	post.
! 
! 	* utils.c (global_bindings_p): True when no current_function_decl; no
! 	longer check current_binding_level.
! 
! 2004-08-09  Ben Brosgol  <brosgol@gnat.com>
! 
! 	* xgnatugn.adb: Added logic to deal with @ifset/@ifclear for edition
! 	choice.
! 
! 	* gnat_rm.texi, gnat_ugn.texi: Added edition conditionalization logic.
! 
! 2004-08-06  Andreas Schwab  <schwab@suse.de>
! 
! 	* utils.c (gnat_define_builtin): Remove second parameter of
! 	make_decl_rtl.
! 	(begin_subprog_body): Likewise.
! 
! 2004-07-26  Arnaud Charlet  <charlet@act-europe.fr>
! 
! 	* sem_util.adb (Requires_Transient_Scope): Temporarily disable
! 	optimization, not supported by the tree-ssa back-end.
! 
! 2004-07-26  Olivier Hainque  <hainque@act-europe.fr>
! 
! 	* s-mastop-irix.adb: Update comments.
! 
! 	* a-except.adb (Exception_Information): Raise Constraint_Error if
! 	exception Id is Null_Id.
! 	This is required behavior, which is more reliably and clearly checked
! 	at the top level interface level.
! 
! 2004-07-26  Javier Miranda  <miranda@gnat.com>
! 
! 	* exp_aggr.adb (Build_Array_Aggr_Code): Do not build the initialization
! 	call if a component has no default_expression and the box is used.
! 
! 	* sem_aggr.adb (Resolve_Array_Aggregate): If a component has no
! 	default_expression and you use box, it behaves as if you had declared a
! 	stand-alone object.
! 	(Resolve_Record_Aggregate): If a component has no default_expression and
! 	you use box, it behaves as if you had declared a stand-alone object.
! 
! 	* sem_ch10.adb (Install_Siblings): Do not make visible the private
! 	entities of private-with siblings.
! 
! 2004-07-26  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* sem_ch3.adb (Build_Underlying_Full_View): If this is the full view
! 	for a component of an itype, set the parent pointer for analysis,
! 	there is no list in which to insert it.
! 
! 	* sem_res.adb (Resolve): Call Rewrite_Renamed_Operator only for
! 	bona-fide renamings, not for inherited operations.
! 
! 	* exp_ch4.adb (Expand_Allocator_Expression): If the allocator is an
! 	actual for a formal that is an access parameter, create local
! 	finalization list even if the expression is not an aggregate.
! 
! 2004-07-26  Ed Schonberg  <schonberg@gnat.com>
! 
! 	PR ada/16213
! 	* sem_ch8.adb (Attribute_Renaming, Check_Library_Level_Renaming):
! 	Diagnose properly illegal subprogram renamings that are library units.
! 
! 2004-07-26  Ed Schonberg  <schonberg@gnat.com>
! 
! 	PR ada/15588
! 	* sem_util.adb (Is_OK_Variable_For_Out_Formal): If actual is a type
! 	conversion rewritten as an unchecked conversion, check that original
! 	expression is a variable.
! 
! 	* exp_ch4.adb (Expand_N_Type_Conversion): If rewriting as an
! 	unchecked_conversion, create new node rather than rewriting in place,
! 	to preserve original construct.
! 
! 2004-07-26  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 
! 	* gigi.h (gnat_expand_body): Deleted.
! 
! 	* Make-lang.in: (trans.o): Depends on function.h.
! 
! 	* misc.c: (gnat_expand_body): Moved to here.
! 
! 	* trans.c (gnat_expand_body_1): Deleted.
! 	(gnat_expand_body): Moved from here.
! 	(gnat_to_gnu): N_Implicit_Label_Declaration forces being in elab proc.
! 	(add_stmt): Check for marked visited with global_bindings_p.
! 	(gnat_gimplify_expr, case COMPONENT_REF): New case.
! 	(gnat_gimplify_expr, case NULL_EXPR): Set TREE_NO_WARNING for temp.
! 
! 	* utils2.c (build_binary_op, case MODIFY_EXPR): Put LHS in a
! 	VIEW_CONVERT_EXPR if not operation type.
! 
! 	* utils.c (update_pointer_to): Set DECL_ORIGINAL_FIELD for
! 	fat pointer.
! 
! 	* decl.c, cuintp.c, gigi.h, misc.c, trans.c, utils.c, utils2.c: Minor
! 	changes: reformatting of negation operators, removing unneeded
! 	inequality comparison with zero, converting equality comparisons with
! 	zero to negations, changing int/0/1 to bool/false/true, replace calls
! 	to gigi_abort with abort, and various other similar changes.
! 
! 2004-07-26  Vincent Celier  <celier@gnat.com>
! 
! 	* gnatcmd.adb (GNATCmd): Add processing for new built-in command
! 	"setup".
! 
! 	* make.adb (Gnatmake): Fail when a library is not present and there is
! 	no object directory.
! 
! 	* mlib-prj.adb (Check_Library): No need to check if the library needs
! 	to be rebuilt if there is no object directory, hence no object files
! 	to build the library.
! 
! 	* opt.ads (Setup_Projects): New Boolean flag.
! 
! 	* prj-nmsc.adb (Locate_Directory): New parameter Project, Kind and
! 	Location.
! 	Create directory when Kind /= "" and in "gnat setup". Report error if
! 	directory cannot be created.
! 	(Ada_Check): Create library interface copy dir if it does not exist
! 	and we are in "gnat setup".
! 	(Find_Sources): No error if in "gnat setup" and no Ada sources were
! 	found.
! 	(Language_Independent_Check): Create object directory, exec directory
! 	and/or library directory if they do not exist and we are in
! 	"gnat setup".
! 
! 	* vms_conv.ads: (Command_Type): New command Setup.
! 
! 	* vms_conv.adb (Initialize): Add Setup component of Cammand_List.
! 
! 	* vms_data.ads: Add qualifiers/switches for new built-in command
! 	"setup".
! 
! 2004-07-25  Richard Henderson  <rth@redhat.com>
! 
! 	* utils.c (create_subprog_decl): Set DECL_ARTIFICIAL and
! 	DECL_IGNORED_P on RESULT_DECL.
! 
! 2004-07-20  Olivier Hainque  <hainque@act-europe.fr>
! 
! 	* a-elchha.adb (Last_Chance_Handler): Remove the bogus buffer dynamic
! 	allocation and potentially overflowing update with
! 	Tailored_Exception_Information. Use the sec-stack free procedural
! 	interface to output Exception_Information instead.
! 
! 	* a-except.adb (To_Stderr): New subprogram for character, and string
! 	version moved from a-exextr to be visible from other separate units.
! 	(Tailored_Exception_Information): Remove the procedural version,
! 	previously used by the default Last_Chance_Handler and not any more.
! 	Adjust various comments.
! 
! 	* a-exexda.adb: Generalize the exception information procedural
! 	interface, to minimize the use of secondary stack and the need for
! 	local buffers when the info is to be output to stderr:
! 	(Address_Image): Removed.
! 	(Append_Info_Character): New subprogram, checking for overflows and
! 	outputing to stderr if buffer to fill is of length 0.
! 	(Append_Info_String): Output to stderr if buffer to fill is of length 0.
! 	(Append_Info_Address, Append_Info_Exception_Name,
! 	Append_Info_Exception_Message, Append_Info_Basic_Exception_Information,
! 	Append_Info_Basic_Exception_Traceback,
! 	Append_Info_Exception_Information): New subprograms.
! 	(Append_Info_Nat, Append_Info_NL): Use Append_Info_Character.
! 	(Basic_Exception_Info_Maxlength, Basic_Exception_Tback_Maxlength,
! 	Exception_Info_Maxlength, Exception_Name_Length,
! 	Exception_Message_Length): New subprograms.
! 	(Exception_Information): Use Append_Info_Exception_Information.
! 	(Tailored_Exception_Information): Use
! 	Append_Info_Basic_Exception_Information.
! 	Export services for the default Last_Chance_Handler.
! 
! 	* a-exextr.adb (To_Stderr): Remove. Now in a-except to be usable by
! 	other separate units.
! 
! 2004-07-20  Vincent Celier  <celier@gnat.com>
! 
! 	* clean.adb, mlib-utl.adb, osint.adb, makegpr.adb: Minor reformatting.
! 
! 2004-07-20  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* freeze.adb (Freeze_Entity): If entity is a discriminated record type,
! 	emit itype references for the designated types of component types that
! 	are declared outside of the full record declaration, and that may
! 	denote a partial view of that record type.
! 
! 2004-07-20  Ed Schonberg  <schonberg@gnat.com>
! 
! 	PR ada/15607
! 	* sem_ch3.adb (Build_Discriminated_Subtype): Do not attach a subtype
! 	which is the designated type in an access component declaration, to the
! 	list of incomplete dependents of the parent type, to avoid elaboration
! 	issues with out-of-scope subtypes.
! 	(Complete_Private_Subtype): Recompute Has_Unknown_Discriminants from the
! 	full view of the parent.
! 
! 2004-07-20  Ed Schonberg  <schonberg@gnat.com>
! 
! 	PR ada/15610
! 	* sem_ch8.adb (Find_Expanded_Name): If name is overloaded, reject
! 	entities that are hidden, such as references to generic actuals
! 	outside an instance.
! 
! 2004-07-20  Javier Miranda  <miranda@gnat.com>
! 
! 	* sem_ch4.adb (Try_Object_Operation): New subprogram that gives
! 	support to the new notation.
! 	(Analyze_Selected_Component): Add call to Try_Object_Operation.
! 
! 2004-07-20  Jose Ruiz  <ruiz@act-europe.fr>
! 
! 	* s-taprob.adb: Adding the elaboration code required for initializing
! 	the tasking soft links that are common to the full and the restricted
! 	run times.
! 
! 	* s-tarest.adb (Init_RTS): Tasking soft links that are shared with the
! 	restricted run time has been moved to the package
! 	System.Soft_Links.Tasking.
! 
! 	* s-tasini.adb (Init_RTS): Tasking soft links that are shared with the
! 	restricted run time has been moved to the package
! 	System.Soft_Links.Tasking.
! 
! 	* Makefile.rtl: Add entry for s-solita.o in run-time library list.
! 
! 	* s-solita.ads, s-solita.adb: New files.
! 
! 2004-07-20  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 
! 	* trans.c (Identifier_to_gnu, Pragma_to_gnu, Attribute_to_gnu,
! 	Case_Statement_to_gnu): Split off from gnat_to_gnu.
! 	(Loop_Statement_to_gnu, Subprogram_Body_to_gnu, call_to_gnu,
! 	Handled_Sequence_Of_Statements_to_gnu, Exception_Handler_to_gnu_sjlj,
! 	Exception_Handler_to_gnu_zcx): Likewise.
! 
! 2004-07-17  Joseph S. Myers  <jsm@polyomino.org.uk>
! 
! 	* gigi.h (builtin_function): Declare.
! 
! 2004-07-15  Robert Dewar  <dewar@gnat.com>
! 
! 	* makegpr.adb, s-secsta.ads, sem_ch3.adb, sem_case.adb: Minor
! 	reformatting
! 
! 	* gnat_ugn.texi: Add instantiation of direct_io or sequential_io with
! 	access values as an example of a warning.
! 
! 	* gnat_rm.texi: Document new attribute Has_Access_Values
! 
! 	* gnat-style.texi: Document that box comments belong on nested
! 	subprograms
! 
! 	* sem_util.ads (Has_Access_Values): Improved documentation
! 
! 	* s-finimp.ads, s-finimp.adb: Fix spelling error in comment
! 
! 	* sem_prag.adb (Check_Duplicated_Export_Name): New procedure
! 	(Process_Interface_Name): Call to this new procedure
! 	(Set_Extended_Import_Export_External_Name): Call to this new procedure
! 
! 	* s-mastop-x86.adb, 9drpc.adb: Fix spelling error in comment
! 
! 	* a-direio.ads, a-sequio.ads: Warn if Element_Type has access values
! 
! 	* einfo.ads: Minor comment typo fixed
! 
! 2004-07-15  Jose Ruiz  <ruiz@act-europe.fr>
! 
! 	* snames.adb: Add _atcb.
! 
! 	* snames.ads: Add Name_uATCB.
! 
! 	* s-tarest.adb (Create_Restricted_Task): ATCBs are always preallocated
! 	(in the expanded code) when using the restricted run time.
! 
! 	* s-tarest.ads (Create_Restricted_Task): Created_Task transformed into
! 	a in parameter in order to allow ATCBs to be preallocated (in the
! 	expanded code).
! 
! 	* s-taskin.adb (Initialize_ATCB): T converted into a in parameter in
! 	order to allow ATCBs to be preallocated. In case of error, the ATCB is
! 	deallocated in System.Tasking.Stages.
! 
! 	* s-taskin.ads (Initialize_ATCB): T converted into a in parameter in
! 	order to allow ATCBs to be preallocated.
! 
! 	* s-tassta.adb (Create_Task): In case of error the ATCB is deallocated
! 	here. It was previously done in Initialize_ATCB.
! 
! 	* rtsfind.ads: Make the Ada_Task_Control_Block visible.
! 
! 	* exp_ch9.adb: Preallocate the Ada_Task_Control_Block when using the
! 	Restricted run time.
! 
! 	* exp_ch3.adb: When using the Restricted run time, pass the
! 	preallocated Ada_Task_Control_Block when creating a task.
! 
! 2004-07-15  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* sem_util.adb (Normalize_Actuals): If there are no actuals on a
! 	function call that is itself an actual in an enclosing call, diagnose
! 	problem here rather than assuming that resolution will catch it.
! 
! 	* sem_ch7.adb (Analyze_Package_Specification): If the specification is
! 	the local copy of a generic unit for a formal package, and the generic
! 	is a child unit, install private part of ancestors before compiling
! 	private part of spec.
! 
! 	* sem_cat.adb (Validate_Categorization_Dependency): Simplify code to
! 	use scope entities rather than tree structures, to handle properly
! 	parent units that are instances rewritten as bodies for inlining
! 	purposes.
! 
! 	* sem_ch10.adb (Get_Parent_Entity, Implicit_With_On_Parent,
! 	Remove_Parents): Handle properly a parent unit that is an
! 	instantiation, when the unit has been rewritten as a body for inlining
! 	purposes.
! 
! 	* par.adb (Goto_List): Global variable to collect goto statements in a
! 	given unit, for use in detecting natural loops.
! 
! 	* par-ch5.adb (P_Goto_Statement): Add goto to global Goto_List, for
! 	use in detecting natural loops.
! 
! 	* par-labl.adb (Find_Natural_Loops): Recognize loops create by
! 	backwards goto's, and rewrite as a infinite loop, to improve locality
! 	of temporaries.
! 
! 	* exp_util.adb (Force_Evaluation): Recognize a left-hand side
! 	subcomponent that includes an indexed reference, to prevent the
! 	generation of copies that would miscompile the desired assignment
! 	statement.
! 	(Build_Task_Image_Decls): Add a numeric suffix to
! 	generated name for string variable, to avoid spurious conflicts with
! 	the name of the type of a single protected object.
! 
! 	* exp_ch4.adb (Expand_Array_Equality): If indices are distinct, use a
! 	loop with an explicit exit statement, to avoid generating an
! 	out-of-range value with 'Succ leading to spurious constraint_errors
! 	when compiling with -gnatVo.
! 
! 2004-07-15  Thomas Quinot  <quinot@act-europe.fr>
! 
! 	* sem_ch4.adb (Analyze_Slice): Always call Analyze on the prefix: it
! 	might not be analyzed yet, even if its Etype is already set (case of an
! 	unchecked conversion built using Unchecked_Convert_To, for example).
! 	If the prefix has already been analyzed, this will be a nop anyway.
! 
! 	* exp_ch5.adb (Make_Tag_Ctrl_Assignment): For an assignment of a
! 	controller type, or an assignment of a record type with controlled
! 	components, copy only user data, and leave the finalization chain
! 	pointers untouched.
! 
! 2004-07-15  Vincent Celier  <celier@gnat.com>
! 
! 	* make.adb (Collect_Arguments): Improve error message when attempting
! 	to compile a source not part of any project, when -x is not used.
! 
! 	* prj.ads: (Defined_Variable_Kind): New subtype
! 
! 	* prj-attr.adb (Register_New_Package): Two new procedures to register
! 	a package with or without its attributes.
! 	(Register_New_Attribute): Mew procedure to register a new attribute in a
! 	package.
! 	New attribute oriented subprograms: Attribute_Node_Id_Of,
! 	Attribute_Kind_Of, Set_Attribute_Kind_Of, Attribute_Name_Of,
! 	Variable_Kind_Of, Set_Variable_Kind_Of, Optional_Index_Of,
! 	Next_Attribute.
! 	New package oriented subprograms: Package_Node_Id_Of,
! 	Add_Unknown_Package, First_Attribute_Of, Add_Attribute.
! 
! 	* prj-attr.ads (Attribute_Node_Id): Now a private, self initialized
! 	type.
! 	(Package_Node_Id): Now a private, self initialized type
! 	(Register_New_Package): New procedure to register a package with its
! 	attributes.
! 	New attribute oriented subprograms: Attribute_Node_Id_Of,
! 	Attribute_Kind_Of, Set_Attribute_Kind_Of, Attribute_Name_Of,
! 	Variable_Kind_Of, Set_Variable_Kind_Of, Optional_Index_Of,
! 	Next_Attribute.
! 	New package oriented subprograms: Package_Node_Id_Of,
! 	Add_Unknown_Package, First_Attribute_Of, Add_Attribute.
! 
! 	* prj-dect.adb (Parse_Attribute_Declaration,
! 	Parse_Package_Declaration): Adapt to new spec of Prj.Attr.
! 
! 	* prj-makr.adb (Make): Parse existing project file before creating
! 	other files. Fail if there was an error during parsing.
! 
! 	* prj-proc.adb (Add_Attributes, Process_Declarative_Items): Adapt to
! 	new spec of Prj.Attr.
! 
! 	* prj-strt.adb (Attribute_Reference, Parse_Variable_Reference): Adapt
! 	to new spec of Prj.Attr.
! 
! 2004-07-15  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 
! 	* utils2.c: Fix typo in comment.
! 
! 2004-07-14  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 
! 	* trans.c (add_decl_expr): Clear TREE_READONLY if clear DECL_INITIAL.
! 	* utils.c (unchecked_convert): Don't do two VIEW_CONVERT_EXPRs.
! 
! 2004-07-14  Andreas Schwab  <schwab@suse.de>
! 
! 	* trans.c (gnat_init_stmt_group): Remove duplicate definition.
! 
! 2004-07-13  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 
! 	* decl.c: (gnat_to_gnu_entity, object case): Convert initializer to
! 	object type.
! 	(gnat_to_gnu_entity, case E_Record_Subtype): Properly set
! 	TYPE_STUB_DECL.
! 
! 	* misc.c (gnat_types_compatible_p): New function.
! 	(LANG_HOOKS_TYPES_COMPATIBLE_P): New hook, to use it.
! 	(LANG_HOOKS_TYPE_MAX_SIZE, gnat_type_max_size): New.
! 
! 	* trans.c (gigi): Move processing of main N_Compilation_Unit here.
! 	(gnat_to_gnu, case N_Compilation_Unit): Just handle nested case here.
! 	(add_stmt): Force walking of sizes and DECL_INITIAL for DECL_EXPR.
! 	(mark_visited): Don't mark dummy type.
! 	(tree_transform <N_Procedure_Call_Statement>): Unless this is an In
! 	parameter, we must remove any LJM building from GNU_NAME.
! 	(gnat_to_gnu, case N_String_Literal): Fill in indices in CONSTRUCTOR.
! 	(pos_to_constructor): Use int_const_binop.
! 	(gnat_to_gnu, case N_Identifier): Don't reference DECL_INITIAL of
! 	PARM_DECL.
! 
! 	* utils.c (gnat_init_decl_processing): Don't make two "void" decls.
! 	(gnat_pushlevel): Set TREE_USE on BLOCK node.
! 	(gnat_install_builtins): Add __builtin_memset.
! 
! 2004-07-13  Olivier Hainque  <hainque@act-europe.fr>
! 
! 	* decl.c (gnat_to_gnu_entity <E_Variable>): If we are making a pointer
! 	for a renaming, stabilize the initialization expression if we are at a
! 	local level.  At the local level, uses of the renaming may be performed
! 	by a direct dereference of the initializing expression, and we don't
! 	want possible variables there to be evaluated for every use.
! 
! 	* trans.c (gnat_stabilize_reference, gnat_stabilize_reference_1):
! 	Propagate TREE_SIDE_EFFECTS and TREE_THIS_VOLATILE to avoid loosing
! 	them on the way.  Account for the fact that we may introduce side
! 	effects in the process.
! 
! 2004-07-13  Richard Henderson  <rth@redhat.com>
! 
! 	* misc.c (default_pass_by_ref): Use pass_by_reference.
! 
! 2004-07-11  Joseph S. Myers  <jsm@polyomino.org.uk>
! 
! 	* misc.c (LANG_HOOKS_CLEAR_BINDING_STACK, LANG_HOOKS_PUSHLEVEL,
! 	LANG_HOOKS_POPLEVEL, LANG_HOOKS_SET_BLOCK): Remove.
! 
! 2004-07-08  Richard Henderson  <rth@redhat.com>
! 
! 	* trans.c (gnat_to_gnu <N_Handled_Sequence_Of_Statements>): Update
! 	commentary.
! 
! 2004-07-06  Vincent Celier  <celier@gnat.com>
! 
! 	* vms_conv.ads: Minor reformatting.
! 	Alphabetical order for enumerated values of type Command_Type, to have
! 	the command in alphabetical order for the usage.
! 
! 	* vms_conv.adb (Process_Argument): Set Keep_Temporary_Files to True for
! 	the special qualifier /KEEP_TEMPORARY_FILES (minimum 6 characters).
! 
! 	* gnat_ugn.texi: Document new switch -dn for the GNAT driver.
! 
! 	* makegpr.adb (Global_Archive_Exists): New global Boolean variable
! 	(Add_Archive_Path): Only add the global archive if there is one.
! 	(Build_Global_Archive): Set Global_Archive_Exists depending if there is
! 	or not any object file to put in the global archive, and don't build
! 	a global archive if there is none.
! 	(X_Switches): New table
! 	(Compile_Link_With_Gnatmake): Pass to gnatmake the -X switches stored
! 	in the X_Switches table, if any.
! 	(Initialize): Make sure the X_Switches table is empty
! 	(Scan_Arg): Record -X switches in table X_Switches
! 
! 	* opt.ads (Keep_Temporary_Files): New Boolean flag, defaulted to False.
! 
! 	* make.adb: Minor comment fix
! 
! 	* gnatname.adb (Gnatname): When not on VMS, and gnatname has been
! 	invoked with directory information, add the directory in front of the
! 	path.
! 
! 	* gnatchop.adb (Gnatchop): When not on VMS, and gnatchop has been
! 	invoked with directory information, add the directory in front of the
! 	path.
! 
! 	* gnatcmd.adb (Delete_Temp_Config_Files): Only delete temporary files
! 	when Keep_Temporary_Files is False.
! 	(GNATCmd): When not on VMS, and the GNAT driver has been invoked with
! 	directory information, add the directory in front of the path.
! 	When not on VMS, handle new switch -dn before the command to set
! 	Keep_Temporary_Files to True.
! 	(Non_VMS_Usage): Use lower case for the non VMS usage: this is valid
! 	everywhere.
! 
! 	* gnatlink.adb (Gnatlink): When not on VMS, and gnatlink has been
! 	invoked with directory information, add the directory in front of the
! 	path.
! 
! 2004-07-06  Thomas Quinot  <quinot@act-europe.fr>
! 
! 	* snames.ads, snames.adb (Name_Stub): New name for the distributed
! 	systems annex.
! 
! 	* rtsfind.ads: New RTE TC_Object, for DSA/PolyORB.
! 	New RTEs RAS_Proxy_Type and RAS_Proxy_Type_Access, for DSA.
! 
! 	* g-socket.adb (To_Timeval): Fix incorrect conversion of
! 	Selector_Duration to Timeval for the case of 0.0.
! 
! 	* exp_util.ads (Evolve_Or_Else): Fix overenthusiastic copy/paste of
! 	documentation from Evolve_And_Then.
! 
! 2004-07-06  Jose Ruiz  <ruiz@act-europe.fr>
! 
! 	* s-taprop-tru64.adb, s-taprop-os2.adb,
! 	s-taprop-mingw.adb, s-taprop-posix.adb: Update comment.
! 
! 2004-07-06  Robert Dewar  <dewar@gnat.com>
! 
! 	* s-osinte-hpux.ads, s-osinte-freebsd.ads,
! 	s-osinte-lynxos.ads, s-taprop-lynxos.adb, s-osinte-tru64.ads,
! 	s-osinte-aix.ads, s-osinte-irix.ads, s-taprop-irix.adb,
! 	s-interr-sigaction.adb, s-taprop-irix-athread.adb,
! 	s-osinte-hpux-dce.adb, s-taprop-hpux-dce.adb,
! 	s-taprop-linux.adb, s-taprop-dummy.adb, s-taprop-solaris.adb,
! 	s-interr-vms.adb, s-osinte-vms.ads, s-taprop-vms.adb,
! 	s-osinte-vxworks.ads, s-osprim-vxworks.adb, a-numaux-x86.adb,
! 	a-except.adb, a-exexpr.adb, a-intsig.adb, a-tags.adb,
! 	a-tags.ads, bindgen.ads, checks.adb, checks.adb,
! 	csets.ads, einfo.ads, einfo.ads, elists.adb, exp_ch4.adb,
! 	exp_ch7.adb, exp_dist.adb, exp_util.adb, freeze.adb,
! 	g-dynhta.adb, gnatmem.adb, g-regexp.adb, inline.adb,
! 	i-os2thr.ads, osint.adb, prj.adb, scng.adb, sem_cat.adb,
! 	sem_ch10.adb, sem_ch12.adb, sem_ch4.adb, sem_ch7.adb,
! 	sem_ch8.adb, sem_disp.adb, sem_prag.adb, sem_res.adb,
! 	sem_type.adb, sem_type.ads, sem_warn.adb, s-ficobl.ads,
! 	s-finimp.adb, s-htable.adb, sinfo.ads, sinput-l.ads,
! 	s-interr.adb, s-interr.ads, sprint.adb, s-tarest.adb,
! 	s-tasini.ads, s-taskin.ads, s-taskin.ads, uname.adb,
! 	vms_data.ads: Minor reformatting,
! 	Fix bad box comment format.
! 
! 	* gnat_rm.texi: Fix minor grammatical error
! 
! 	* sem_attr.adb, exp_attr.adb: New attribute Has_Access_Values
! 
! 	* sem_util.ads, sem_util.adb (Requires_Transient_Scope): Allow many
! 	more cases of discriminated records to be recognized as not needing a
! 	secondary stack.
! 	(Has_Access_Values): New function.
! 
! 	* snames.h, snames.adb, snames.ads: New attribute Has_Access_Values
! 
! 	* cstand.adb, layout.ads, layout.adb, sem_ch13.ads: Change name
! 	Set_Prim_Alignment to Set_Elem_Alignment (more accurate correspondence
! 	with LRM terminology).
! 	Change terminology in comments primitive type => elementary type.
! 
! 2004-07-06  Ed Schonberg  <schonberg@gnat.com>
! 
! 	PR ada/15602
! 	* sem_ch7.adb (Unit_Requires_Body): For a generic package, the formal
! 	parameters do not impose any requirements on the presence of a body.
! 
! 2004-07-06  Ed Schonberg  <schonberg@gnat.com>
! 
! 	PR ada/15593
! 	* sem_ch12.adb (Analyze_Package_Instantiation): If the generic is not a
! 	compilation unit and is in an open scope at the point of instantiation,
! 	assume that a body may be present later.
! 
! 2004-07-06  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* sem_ch13.adb (Analyze_Attribute_Definition_Clause, case 'Size):
! 	Improve error message when specified size is not supported.
! 
! 	* sem_ch6.adb (Maybe_Primitive_Operation): A library-level subprogram
! 	is never a primitive operation.
! 
! 2004-07-05  Andreas Schwab  <schwab@suse.de>
! 
! 	* ada-tree.h (TYPE_LEFT_JUSTIFIED_MODULAR_P): Use
! 	RECORD_OR_UNION_CHECK.
! 	(TYPE_CONTAINS_TEMPLATE_P): Likewise.
! 
! 2004-07-04  Kelley Cook  <kcook@gcc.gnu.org>
  
  	* Make-lang.in (doc/gnat_ugn_unw.texi): Eliminate explicit
  	dependency on xgnatugn, instead build it via a submake.
  	(ADA_INFOFILES): Add doc/gnat_ugn_unw.texi.
  
! 2004-07-04  Richard Henderson  <rth@redhat.com>
  
! 	* utils2.c (gnat_mark_addressable): Don't put_var_into_stack.
  
! 2004-07-01  Richard Henderson  <rth@redhat.com>
! 
! 	* trans.c (gnat_stabilize_reference): Don't handle RTL_EXPR.
! 	* utils.c (max_size): Likewise.
! 
! 2004-06-28  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 
! 	* decl.c: Remove calls to add_decl_expr, pushdecl, rest_of_compilation,
! 	and rest_of_type_compilation; add arg to create_*_decl.
! 	(annotate_decl_with_node): Deleted.
! 	(gnat_to_gnu_entity, case E_Array_Type): Set location of fields.
! 	* gigi.h (get_decls, block_has_vars, pushdecl): Deleted.
! 	(get_current_block_context, gnat_pushdecl): New declarations.
! 	(gnat_init_stmt_group): Likewise.
! 	(create_var_decl, create_type_decl, create_subprog_decl): Add new arg.
! 	* misc.c (LANG_HOOKS_CLEAR_BINDING_STACK): Deleted.
! 	(LANG_HOOKS_GETDECLS, LANG_HOOKS_PUSHDECL): Deleted.
! 	(gnat_init): Call gnat_init_stmt_group.
! 	* trans.c (global_stmt_group, gnu_elab_proc_decl): New variables.
! 	(gnu_pending_elaboration_list): Deleted.
! 	(mark_visited, mark_unvisited, gnat_init_stmt_group): New functions.
! 	(gigi): Rearrange initialization calls and move some to last above.
! 	(gnat_to_gnu): If statement and not in procedure, go into elab proc.
! 	Delete calls to add_decl_expr; add arg to create_*_decl.
! 	(gnat_to_gnu, case N_Loop): Recalculate side effects on COND_EXPR.
! 	(gnat_to_gnu, case N_Subprogram_Body): Move some code to
! 	begin_subprog_body and call it.
! 	Don't push and pop ggc context.
! 	(gnat_to_gnu, case N_Compilation_Unit): Rework to support elab proc.
! 	(add_stmt): Remove handling of DECL_EXPR from here.
! 	If not in function, mark visited.
! 	(add_decl_expr): Put global at top level.
! 	Check for cases of DECL_INITIAL we have to handle here.
! 	(process_type): Add extra arg to create_type_decl.
! 	(build_unit_elab): Rework to just gimplify.
! 	* utils.c (pending_elaborations, elist_stack, getdecls): Deleted.
! 	(block_has_vars, mark_visited, add_pending_elaborations): Likewise.
! 	(get_pending_elaborations, pending_elaborations_p): Likewise.
! 	(push_pending_elaborations, pop_pending_elaborations): Likewise.
! 	(get_elaboration_location, insert_elaboration_list): Likewise.
! 	(gnat_binding_level): Renamed from ada_binding_level.
! 	(init_gnat_to_gnu): Don't clear pending_elaborations.
! 	(global_bindings_p): Treat as global if no current_binding_level.
! 	(set_current_block_context): New function.
! 	(gnat_pushdecl): Renamed from pushdecl; major rework.
! 	All callers changed.
! 	(create_type_decl, create_var_decl, create_subprog_decl): Add new arg.
! 	(finish_record_type): Call call pushdecl for stub decl.
! 	(function_nesting_depth): Deleted.
! 	(begin_subprog_body): Delete obsolete code.
! 	* utils2.c (build_call_alloc_dealloc): Add new arg to create_var_decl.
! 
! 2004-06-28  Robert Dewar  <dewar@gnat.com>
! 
! 	* mlib-tgt-tru64.adb, mlib-tgt-aix.adb, mlib-tgt-irix.adb,
! 	mlib-tgt-irix.adb, mlib-tgt-hpux.adb, mlib-tgt-linux.adb,
! 	mlib-tgt-linux.adb, mlib-tgt-solaris.adb, mlib-tgt-solaris.adb,
! 	mlib-tgt-vms-alpha.adb, mlib-tgt-vms-alpha.adb, mlib-tgt-vms-ia64.adb,
! 	a-strmap.adb, a-strmap.ads, clean.adb: Minor reformatting
! 
! 	* exp_util.adb (Is_Possibly_Unaligned_Slice): Completely rewritten, to
! 	deal with problem of inefficient slices on machines with strict
! 	alignment, when the slice is a component of a composite.
! 
! 	* checks.adb (Apply_Array_Size_Check): Do not special case 64-bit
! 	machines, we need the check there as well.
! 
! 2004-06-28  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* exp_ch5.adb (Expand_Assign_Array): Use correct condition to
! 	determine safe copying direction for overlapping slice assignments
! 	when component is controlled.
! 
! 	* sem_ch12.adb (Instantiate_Formal_Package): Implicit operations of a
! 	formal derived type in the actual for a formal package are visible in
! 	the enclosing instance.
! 
! 2004-06-28  Ed Schonberg  <schonberg@gnat.com>
! 
! 	PR ada/15600
! 	* sem_util.adb (Trace_Components): Diagnose properly an illegal
! 	circularity involving a private type whose completion includes a
! 	self-referential component.
! 	(Enter_Name): Use Is_Inherited_Operation to distinguish a source
! 	renaming or an instantiation from an implicit derived operation.
! 
! 2004-06-28  Pascal Obry  <obry@gnat.com>
! 
! 	* mlib-tgt-mingw.adb: (Library_Exists_For): Remove "lib" prefix from
! 	DLL.
! 	(Library_File_Name_For): Idem.
! 
! 2004-06-28  Matthew Gingell  <gingell@gnat.com>
! 
! 	* g-traceb.ads: Add explanatory note on the format of addresses
! 	expected by addr2line.
! 
! 2004-06-28  Jerome Guitton  <guitton@act-europe.fr>
! 
! 	* Makefile.in: Force debugging information on s-tasdeb.adb,
! 	a-except.adb and s-assert.adb needed by the debugger.
! 
! 2004-06-28  Vincent Celier  <celier@gnat.com>
! 
! 	* make.adb (Collect_Arguments_And_Compile): Change Flag1 to
! 	Need_To_Build_Lib.
! 	(Gnatmake): Ditto.
! 
! 	* mlib-prj.adb (Check_Library): Replace Flag1 with Need_To_Build_Lib
! 
! 	* prj.adb: Minor reformatting
! 	(Project_Empty): Change Flag1 to Need_To_Build_Lib. Remove Flag2.
! 
! 	* prj.ads: Comment updates
! 	Minor reformatting
! 	(Project_Data): Change Flag1 to Need_To_Build_Lib.
! 	Remove Flag2: not used.
! 
! 	* prj-dect.adb (Parse_Declarative_Items): Accept "null" as a
! 	declaration.
! 
! 	* gnat_ugn.texi: Put a "null;" declaration in one project file example
! 
! 	* gnat_rm.texi: Document Empty declarations "null;".
! 
! 	* makegpr.adb (Compile_Link_With_Gnatmake): Put the global archives in
! 	front of the linker options.
! 	(Link_Foreign): Put the global archives and the libraries in front of
! 	the linker options.
! 
! 2004-06-28  Javier Miranda  <miranda@gnat.com>
! 
! 	* rtsfind.adb: (Get_Unit_Name): Fix typo in comment
! 	(RTU_Loaded): Code cleanup
! 	(Set_RTU_Loaded): New procedure to register as *loaded* explicitly
! 	withed predefined units.
! 
! 	* rtsfind.ads (Set_RTU_Loaded): New procedure to register as *loaded*
! 	explicitly withed predefined units.
! 	Fix typo in comment
! 
! 	* sem_ch10.adb (Analyze_Compilation_Unit): Register as *loaded*
! 	explicitly withed predefined units.
! 
! 2004-06-26  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 
! 	* ada-tree.def (DECL_STMT): Deleted.
! 	* ada-tree.h (IS_ADA_STMT): Now test against STMT_STMT.
! 	(DECL_STMT_VAR): Deleted.
! 	* decl.c: add_decl_stmt now add_decl_expr.
! 	* gigi.h: Likewise.
! 	* trans.c: Likewise.
! 	(gnat_gimplify_type_sizes, gnat_gimplify_one_sizepos): Deleted.
! 	(gnat_to_gnu, case N_Subprogram_Body): Set cfun->function_end_locus.
! 	(add_stmt): Only handle padded type here.
! 	(add_stmt_with_node): Allow gnat_node to not be present.
! 	(gnat_gimplify_stmt, case USE_STMT): Set *STMT_P to null.
! 	(gnat_gimplify_stmt, case DECL_STMT): Deleted.
! 	(gnat_stabilize_reference_1): If COMPONENT_REF of fat pointer,
! 	make a SAVE_EXPR for the entire fat pointer.
! 	* utils.c (pushdecl): Walk a DECL_EXPR in global case.
! 	(create_index_type): Make a DECL_EXPR.
! 	(end_subprog_body): Don't call allocate_struct_function here but
! 	do clear cfun.
! 
! 2004-06-25  Pascal Obry  <obry@gnat.com>
! 
! 	* makegpr.adb (Build_Library): Remove parameter Lib_Address and
! 	Relocatable from Build_Dynamic_Library call.
! 
! 	* gnat_ugn.texi: Change documentation about Library_Kind. Dynamic and
! 	Relocatable are now synonym.
! 
! 	* Makefile.in: Use s-parame-mingw.adb on MingW platform.
! 
! 	* mlib-prj.adb (Build_Library): Remove DLL_Address constant definition.
! 	Remove parameter Lib_Address and Relocatable from Build_Dynamic_Library
! 	call.
! 
! 	* mlib-tgt.ads, mlib-tgt.adb (Build_Dynamic_Library): Remove parameter
! 	Lib_Address and Relocatable.
! 	(Default_DLL_Address): Removed.
! 
! 	* mlib-tgt-tru64.adb, mlib-tgt-aix.adb, mlib-tgt-irix.adb,
! 	mlib-tgt-hpux.adb, mlib-tgt-linux.adb, mlib-tgt-solaris.adb,
! 	mlib-tgt-vms-alpha.adb, mlib-tgt-vms-ia64.adb, mlib-tgt-vxworks.adb:
! 	(Build_Dynamic_Library): Remove parameter Lib_Address and Relocatable.
! 	(Default_DLL_Address): Removed.
! 
! 	* mlib-tgt-mingw.adb: Ditto.
! 	(Build_Dynamic_Library): Do not add "lib" prefix to the DLL name.
! 
! 	* s-taprop-mingw.adb (Create_Task): Use Adjust_Storage_Size to compute
! 	the initial thread stack size.
! 
! 	* a-strmap.ads: Move package L to private part as it is not used in
! 	the spec. Found while reading code.
! 
! 2004-06-25  Olivier Hainque  <hainque@act-europe.fr>
! 
! 	* tracebak.c: Introduce support for a GCC infrastructure based
! 	implementation of __gnat_backtrace.
! 
! 	* raise.c: Don't rely on a C mapping of the GNAT_GCC_Exception record
! 	any more. Use accessors instead. This eases maintenance and relaxes
! 	some alignment constraints.
! 	(_GNAT_Exception structure): Remove the Ada specific fields
! 	(EID_For, Adjust_N_Cleanups_For): New accessors, exported by
! 	a-exexpr.adb.
! 	(is_handled_by, __gnat_eh_personality): Replace component references to
! 	exception structure by use of the new accessors.
! 
! 	* init.c (__gnat_initialize): Adjust comments to match the just
! 	reverted meaning of the -static link-time option.
! 
! 	* adaint.c (convert_addresses): Arrange not to define a stub for
! 	mips-irix any more, as we now want to rely on a real version from a
! 	recent libaddr2line.
! 
! 	* a-exexpr.adb: Provide new accessors to a GNAT_GCC occurrence, so that
! 	the personality routine can use them and not have to rely on a C
! 	counterpart of the record anymore. This simplifies maintenance and
! 	relaxes the constraint of having Standard'Maximum_Alignment match
! 	BIGGEST_ALIGNMENT.
! 	Update comments, and add a section on the common header alignment issue.
! 
! 2004-06-25  Geert Bosch  <bosch@gnat.com>
! 
! 	* a-ngelfu.adb (Tanh): Use full 20 digit precision for constants in
! 	polynomial approximation. Fixes inconsistency with Cody/Waite algorithm.
! 
! 2004-06-25  Robert Dewar  <dewar@gnat.com>
! 
! 	* gnat_rm.texi: Fix section on component clauses to indicate that the
! 	restriction on byte boundary placement still applies for bit packed
! 	arrays.
! 	Add comment on stack usage from Initialize_Scalars
! 
! 	* gnat_ugn.texi: Add documentation for -gnatyLnnn
! 
! 	* stylesw.ads, stylesw.adb: Implement new -gnatyLnnn option for
! 	limiting nesting level.
! 
! 	* usage.adb: Add line for -gnatyLnnn switch
! 
! 	* g-debpoo.ads, xtreeprs.adb, sinput.ads, sem_ch13.ads,
! 	sem_ch13.adb, exp_aggr.adb: Minor reformatting
! 
! 	* sem_prag.adb (Process_Atomic_Shared_Volatile): Set Is_Atomic on base
! 	type as well as on the subtype. This corrects a problem in freeze in
! 	setting alignments of atomic types.
! 
! 	* sem_eval.ads: Minor comment typo fixed
! 
! 	* par-util.adb (Push_Scope_Stack): Check for violation of max nesting
! 	level.  Minor reformatting.
! 
! 	* fname.adb (Is_Predefined_File_Name): Require a letter after the
! 	minus sign. This means that file names like a--b.adb will not be
! 	considered predefined.
! 
! 	* freeze.adb: Propagate new flag Must_Be_On_Byte_Boundary to containing
! 	record Test new flag and give diagnostic for bad component clause.
! 	(Freeze_Entity): Set alignment of array from component alignment in
! 	cases where this is safe to do.
! 
! 	* exp_pakd.adb: Set new flag Must_Be_On_Byte_Boundary for large packed
! 	arrays.
! 
! 	* cstand.adb: (Create_Standard): Set alignment of String to 1
! 
! 	* einfo.ads, einfo.adb: Introduce new flag Must_Be_On_Byte_Boundary
! 
! 	* exp_ch4.adb (Expand_Array_Equality): Improve efficiency of generated
! 	code in the common constrained array cases.
! 
! 	* a-storio.adb: Change implementation to avoid possible alignment
! 	problems on machines requiring strict alignment (data should be moved
! 	as type Buffer, not type Elmt).
! 
! 	* checks.adb (Apply_Array_Size_Check): Improve these checks by
! 	killing the overflow checks which we really do not need (64-bits is
! 	enough).
! 
! 2004-06-25  Vincent Celier  <celier@gnat.com>
! 
! 	* makegpr.adb (Is_Included_In_Global_Archive): New Boolean function
! 	(Add_Archives.Recursive_Add_Archives): Call Add_Archive_Path
! 	inconditionally for the main project.
! 	(Recursive_Add_Archives.Add_Archive_Path): New procedure
! 	(Link_Executables.Check_Time_Stamps): New procedure
! 	(Link_Executables.Link_Foreign): New procedure
! 	Changes made to reduce nesting level of this package
! 	(Check): New procedure
! 	(Add_Switches): When not in quiet output, check that a switch is not
! 	the concatenation of several valid switches. If it is, issue a warning.
! 	(Build_Global_Archive): If the global archive is rebuilt, linking need
! 	to be done.
! 	(Compile_Sources): Rebuilding a library archive does not imply
! 	rebuilding the global archive.
! 	(Build_Global_Archive): New procedure
! 	(Build_Library): New name for Build_Archive, now only for library
! 	project
! 	(Check_Archive_Builder): New procedure
! 	(Create_Global_Archive_Dependency_File): New procedure
! 	(Gprmake): Call Build_Global_Archive before linking
! 	* makegpr.adb: Use Other_Sources_Present instead of Sources_Present
! 	throughout.
! 	(Scan_Arg): Display the Copyright notice when -v is used
! 
! 	* gnat_ugn.texi: Document new switch -files= (VMS qualifier /FILES=)
! 	for gnatls.
! 
! 	* vms_data.ads: Add qualifier /MAX_NESTING=nnn (-gnatyLnnn) for GNAT
! 	COMPILE.
! 	Add new GNAT LIST qualifier /FILES=
! 	Added qualifier /DIRECTORY= to GNAT METRIC
! 	Added qualifier /FILES= to GNAT METRIC
! 	Added qualifier /FILES to GNAT PRETTY
! 
! 	* switch.adb (Is_Front_End_Switch): Refine the test for --RTS or -fRTS,
! 	to take into account both versions of the switch.
! 
! 	* switch-c.adb (Scan_Front_End_Switches): New switch -gnatez. Should
! 	always be the last switch to the gcc driver. Disable switch storing so
! 	that switches automatically added by the gcc driver are not put in the
! 	ALI file.
! 
! 	* prj.adb (Project_Empty): Take into account changes in components of
! 	Project_Data.
! 
! 	* prj.ads (Languages_Processed): New enumaration value All_Languages.
! 
! 	* prj.ads (Project_Data): Remove component Lib_Elaboration: never
! 	used. Split Boolean component Ada_Sources_Present in two Boolean
! 	components Ada_Sources_Present and Other_Sources_Present.
! 	Minor reformatting
! 
! 	* prj-env.adb (For_All_Source_Dirs.Add): Use Ada_Sources_Present
! 	instead of Sources_Present.
! 	(Set_Ada_Paths.Add.Recursive_Add): Ditto
! 
! 	* prj-nmsc.adb: Minor reformatting
! 	(Check_Ada_Naming_Scheme): New name of procedure Check_Naming_Scheme
! 	(Check_Ada_Naming_Scheme_Validity): New name of previous procedure
! 	Check_Ada_Naming_Scheme.
! 	Change Sources_Present to Ada_Sources_Present or Other_Sources_Present
! 	throughout.
! 
! 	* prj-part.adb (Post_Parse_Context_Clause): New Boolean parameter
! 	In_Limited.
! 	Make sure that all cycles where there is at least one "limited with"
! 	are detected.
! 	(Parse_Single_Project): New Boolean parameter In_Limited
! 
! 	* prj-proc.adb (Recursive_Check): When Process_Languages is
! 	All_Languages, call first Prj.Nmsc.Ada_Check, then
! 	Prj.Nmsc.Other_Languages_Check.
! 
! 	* prj-proc.adb (Process): Use Ada_Sources_Present or
! 	Other_Sources_Present (instead of Sources_Present) depending on
! 	Process_Languages.
! 
! 	* lang-specs.h: Keep -g and -m switches in the same order, and as the
! 	last switches.
! 
! 	* lib.adb (Switch_Storing_Enabled): New global Boolean flag
! 	(Disable_Switch_Storing): New procedure. Set Switch_Storing_Enabled to
! 	False.
! 	(Store_Compilation_Switch): Do nothing if Switch_Storing_Enabled is
! 	False.
! 
! 	* lib.ads (Disable_Switch_Storing): New procedure.
! 
! 	* make.adb: Modifications to reduce nesting level of this package.
! 	(Check_Standard_Library): New procedure
! 	(Gnatmake.Check_Mains): New procedure
! 	(Gnatmake.Create_Binder_Mapping_File): New procedure
! 	(Compile_Sources.Compile): Add switch -gnatez as the last option
! 	(Display): Never display -gnatez
! 
! 	* Makefile.generic:
! 	When using $(MAIN_OBJECT), always use $(OBJ_DIR)/$(MAIN_OBJECT)
! 
! 	* gnatcmd.adb (Check_Project): New function
! 	(Process_Link): New procedure to reduce nesting depth
! 	(Check_Files): New procedure to reduce the nesting depth.
! 	For GNAT METRIC, include the inherited sources in extending projects.
! 	(GNATCmd): When GNAT LS is invoked with a project file and no files,
! 	add the list of files from the sources of the project file. If this list
! 	is too long, put it in a temp text files and use switch -files=
! 	(Delete_Temp_Config_Files): Delete the temp text file that contains
! 	a list of source for gnatpp or gnatmetric, if one has been created.
! 	(GNATCmd): For GNAT METRIC and GNAT PRETTY, if the number of sources
! 	in the project file is too large, create a temporary text file that
! 	list them and pass it to the tool with "-files=<temp text file>".
! 	(GNATCmd): For GNAT METRIC add "-d=<abject dir>" as the first switch
! 
! 	* gnatlink.adb (Gnatlink): Do not compile with --RTS= when the
! 	generated file is in not in Ada.
! 
! 	* gnatls.adb: Remove all parameters And_Save that are no longer used.
! 	(Scan_Ls_Arg): Add processing for -files=
! 	(Usage): Add line for -files=
! 
! 	* g-os_lib.adb (On_Windows): New global constant Boolean flag
! 	(Normalize_Pathname): When on Windows and the path starts with a
! 	directory separator, make sure that the resulting path will start with
! 	a drive letter.
! 
! 	* clean.adb (Clean_Archive): New procedure
! 	(Clean_Project): When there is non-Ada code, delete the global archive,
! 	the archive dependency files, the object files and their dependency
! 	files, if they exist.
! 	(Gnatclean): Call Prj.Pars.Parse for All_Languages, not for Ada only.
! 
! 2004-06-25  Thomas Quinot  <quinot@act-europe.fr>
! 
! 	* sinfo.ads: Fix typo in comment.
! 
! 	* sem_dist.adb (Process_Remote_AST_Attribute): Simplify code that uses
! 	the TSS for remote access-to-subprogram types, since these TSS are
! 	always present once the type has been analyzed.
! 	(RAS_E_Dereference): Same.
! 
! 	* sem_attr.adb (Analyze_Attribute): When analysis of an attribute
! 	reference raises Bad_Attribute, mark the reference as analyzed so the
! 	node (and any children resulting from rewrites that could have occurred
! 	during the analysis that ultimately failed) is not analyzed again.
! 
! 	* exp_ch7.ads (Find_Final_List): Fix misaligned comment.
! 
! 	* exp_dist.adb: Minor comment fix.
! 
! 	* exp_ch4.adb (Expand_N_Allocator): For an allocator whose expected
! 	type is an anonymous access type, no unchecked deallocation of the
! 	allocated object can occur. If the object is controlled, attach it with
! 	a count of 1. This allows attachment to the Global_Final_List, if
! 	no other relevant list is available.
! 	(Get_Allocator_Final_List): For an anonymous access type that is
! 	the type of a discriminant or record component, the corresponding
! 	finalisation list is the one of the scope of the type.
! 
! 2004-06-25  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* sem_ch3.adb (Replace_Type): When computing the signature of an
! 	inherited subprogram, use the first subtype if the derived type
! 	declaration has no constraint.
! 
! 	* exp_ch6.adb (Add_Call_By_Copy_Code): Check that formal is an array
! 	before applying previous optimization. Minor code cleanup.
! 
! 	* exp_util.adb (Is_Possibly_Unaligned_Slice): If the component is
! 	placed at the beginning of an unpacked record without explicit
! 	alignment, a slice of it will be aligned and does not need a copy when
! 	used as an actual.
! 
! 2004-06-25  Ed Schonberg  <schonberg@gnat.com>
! 
! 	PR ada/15591
! 	PR ada/15592
! 	* sem_ch8.adb (Attribute_Renaming): Reject renaming if the attribute
! 	reference is written with expressions mimicking parameters.
! 
! 2004-06-25  Hristian Kirtchev  <kirtchev@gnat.com>
! 
! 	PR ada/15589
! 	* sem_ch3.adb (Build_Derived_Record_Type): Add additional check to
! 	STEP 2a. The constraints of a full type declaration of a derived record
! 	type are checked for conformance with those declared in the
! 	corresponding private extension declaration. The message
! 	"not conformant with previous declaration" is emitted if an error is
! 	detected.
! 
! 2004-06-25  Vasiliy Fofanov  <fofanov@act-europe.fr>
! 
! 	* g-traceb.ads: Document the need for -E binder switch in the spec.
! 
! 	* g-trasym.ads: Document the need for -E binder switch in the spec.
! 
! 2004-06-25  Jose Ruiz  <ruiz@act-europe.fr>
! 
! 	* sem_prag.adb: Add handling of pragma Detect_Blocking.
! 
! 	* snames.h, snames.ads, snames.adb: Add entry for pragma
! 	Detect_Blocking.
! 
! 	* s-rident.ads: Change reference to pragma Detect_Blocking.
! 
! 	* targparm.ads, targparm.adb: Allow pragma Detect_Blocking in
! 	system.ads.
! 
! 	* opt.ads (Detect_Blocking): New Boolean variable (defaulted to False)
! 	to indicate whether pragma Detect_Blocking is active.
! 
! 	* par-prag.adb: Add entry for pragma Detect_Blocking.
! 
! 	* rtsfind.adb (RTU_Loaded): Fix the temporary kludge to get past bug
! 	of not handling WITH.
! 	Note that this replaces the previous update which was incorrect.
! 
! 2004-06-25  Javier Miranda  <miranda@gnat.com>
! 
! 	* sem_ch10.adb (Re_Install_Use_Clauses): Force the installation of the
! 	use-clauses to have a clean environment.
! 
! 	* sem_ch8.adb (Install_Use_Clauses): Addition of a new formal to force
! 	the installation of the use-clauses to stablish a clean environment in
! 	case of compilation of a separate unit; otherwise the call to
! 	use_one_package is protected by the barrier Applicable_Use.
! 
! 	* sem_ch8.ads (Install_Use_Clauses): Addition of a new formal to force
! 	the installation of the use-clauses to stablish a clean environment in
! 	case of compilation of a separate unit.
! 	(End_Use_Clauses): Minor comment cleanup.
! 
! 2004-06-25  Sergey Rybin  <rybin@act-europe.fr>
! 
! 	* gnat_ugn.texi: Add description of the gnatpp 'files' switch
! 
! 2004-06-23  Richard Henderson  <rth@redhat.com>
! 
! 	* trans.c (gnat_gimplify_stmt): Update gimplify_type_sizes call.
! 
! 2004-06-20  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 
! 	* decl.c (elaborate_expression, elaborate_expression_1): Arguments
! 	now bool instead of int.
! 	(gnat_to_gnu_entity, elaborate_expression_1): New arg to COMPONENT_REF.
! 	* trans.c (gnu_switch_label_stack): New function.
! 	(gnat_to_gnu, N_Object_Renaming_Declaration): Result is what the
! 	elaboration of renamed entity returns.
! 	(gnat_to_gnu, case N_Case_Statement): Add branches to end label.
! 	(add_decl_stmt): Don't add TYPE_DECL for UNCONSTRAINED_ARRAY_TYPE.
! 	(gnat_gimplify_stmt): Use alloc_stmt_list, not build_empty_stmt.
! 	(gnat_gimplify_stmt, case DECL_STMT): gimplify DECL_SIZE and
! 	DECL_SIZE_UNIT and simplify variable-sized case.
! 	(gnat_gimplify_type_sizes, gnat_gimplify_one_sizepos): Deleted.
! 	Callers changes to call gimplify_type_sizes and gimplify_one_sizepos.
! 	(gnat_stabilize_reference): Add arg to COMPONENT_REF.
! 	(build_unit_elab): Disable for now.
! 	* utils.c (mark_visited): New function.
! 	(pushdecl): Walk tree to call it for global decl.
! 	(update_pointer_to): Update all variants of pointer and ref types.
! 	Add arg to COMPONENT_REF.
! 	(convert): Likewise.
! 	Move check for converting between variants lower down.
! 	* utils2.c (build_simple_component_ref): Add arg to COMPONENT_REF.
! 	(build_allocator): Don't force type of MODIFY_EXPR.
! 	(gnat_mark_addressable, case VAR_DECL): Unconditionally call
! 	put_var_into_stack.
! 
! 2004-06-14  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 
! 	* ada-tree.def (LOOP_STMT, EXIT_STMT): Update documentation.
! 	* ada-tree.h (EXIT_STMT_LABEL): Renamed from EXIT_STMT_LOOP.
! 	* decl.c (gnat_to_gnu_entity): Also set force_global for imported
! 	subprograms.
! 	* trans.c (gnu_loop_label_stack): Renamed from gnu_loop_stmt_stack;
! 	all callers changed.
! 	(gnat_to_gnu, case N_Loop_Statement, case N_Exit_Statement): Change
! 	the way that EXIT_STMT finds the loop label.
! 	(gnat_gimplify_stmt, case LOOP_STMT, EXIT_STMT): Likewise.
! 	(gnat_gimplify_stmt, case DECL_STMT): Handle variable-sized decls here.
! 	(add_stmt): Use annotate_with_locus insted of setting directly.
! 	(pos_to_construct): Set TREE_PURPOSE of each entry to index.
! 	(gnat_stabilize_reference, case ARRAY_RANGE_REF): Merge with ARRAY_REF.
! 	* utils.c (gnat_install_builtins): Install __builtin_memcmp.
! 	(build_vms_descriptor): Add extra args to ARRAY_REF.
! 	(convert): Use VIEW_CONVERT_EXPR between aggregate types.
! 	* utils2.c (gnat_truthvalue_conversion, case INTEGER_CST, REAL_CST):
! 	New cases.
! 	(build_binary_op): Don't make explicit CONVERT_EXPR.
! 	Add extra rgs to ARRAY_REF.
! 
! 2004-06-14  Pascal Obry  <obry@gnat.com>
! 
! 	* gnat_ugn.texi: Document relocatable vs. dynamic Library_Kind on
! 	Windows.  Fix minor typo.
! 
! 	* mlib-tgt-mingw.adb: New implementation using the GCC -shared option
! 	which is now supported on Windows. With this implementation using the
! 	Library Project feature is no different on Windows than on UNIX.
! 
! 2004-06-14  Vincent Celier  <celier@gnat.com>
! 
! 	* makegpr.adb (Compile_Sources): Nothing to do when there are no
! 	non-Ada sources.
! 
! 	* mlib-tgt-vxworks.adb (Library_Exists_For): Remove incorrect comment
! 
! 	* prj-part.adb (Parse_Single_Project): When a duplicate project name is
! 	found, show the project name and the path of the previously parsed
! 	project file.
! 
! 2004-06-14  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* exp_ch6.adb (Add_Call_By_Copy_Code): For an out-parameter that is an
! 	array, avoid copying the actual before the call.
! 
! 2004-06-14  Thomas Quinot  <quinot@act-europe.fr>
! 
! 	* g-debpoo.adb: Remove alignment assumptions from GNAT.Debug_Pools.
! 	Instead, allocate memory on worst-case alignment assumptions, and then
! 	return an aligned address within the allocated zone.
! 
! 2004-06-14  Robert Dewar  <dewar@gnat.com>
! 
! 	* bindgen.adb (Gen_Adainit_Ada): Do not generate external references to
! 	elab entities in predefined units in No_Run_Time_Mode.
! 	(Gen_Adainit_C): Same fix
! 	(Gen_Elab_Calls_Ada): Do not generate calls to elaborate predefined
! 	units in No_Run_Time_Mode
! 	(Gen_Elab_Calls_C): Same fix
! 
! 	* symbols-vms-alpha.adb: Minor reformatting
! 
! 	* g-debpoo.ads: Minor reformatting
! 
! 	* lib.adb (In_Same_Extended_Unit): Version working on node id's
! 
! 	* lib.ads (In_Same_Extended_Unit): Version working on node id's
! 
! 	* lib-xref.adb: Minor cleanup, use new version of In_Same_Extended_Unit
! 	working on nodes.
! 
! 	* make.adb: Minor reformatting
! 
! 	* par-ch12.adb: Minor reformatting
! 
! 	* par-prag.adb: Add dummy entry for pragma Profile_Warnings
! 
! 	* prj-strt.adb: Minor reformatting
! 
! 	* restrict.ads, restrict.adb: Redo handling of profile restrictions to
! 	be more general.
! 
! 	* sem_attr.adb: Minor reformatting
! 
! 	* sem_ch7.adb: Minor reformatting
! 
! 	* sem_elab.adb (Check_A_Call): Deal with problem of calling init proc
! 	for type in the same unit as the object declaration.
! 
! 	* sem_prag.adb (Check_Arg_Is_External_Name): New procedure, allows
! 	static string expressions and not just string literals.
! 	Minor reformatting
! 	(Set_Warning): Reset restriction warning flag for restriction pragma
! 	Implement pragma Profile_Warnings
! 	Implement pragma Profile (Restricted)
! 	Give obolescent messages for old restrictions and pragmas
! 
! 	* snames.h, snames.ads, snames.adb: Add new entry for pragma
! 	Profile_Warnings.
! 
! 	* s-rident.ads: Add declarations for restrictions required by profile
! 	Restricted and profile Ravenscar.
! 
! 	* targparm.ads, targparm.adb: Allow pragma Profile in system.ads
! 
! 	* gnat_ugn.texi: Correct some missing entries in the list of GNAT
! 	configuration pragmas.
! 
! 2004-06-11  Vincent Celier  <celier@gnat.com>
! 
! 	* mlib-tgt-vms-alpha.adb (Build_Dynamic_Library): Issue switch -R to
! 	gnatsym, when symbol policy is Restricted.
! 
! 	* mlib-tgt-vms-ia64.adb (Build_Dynamic_Library): Issue switch -R to
! 	gnatsym, when symbol policy is Restricted.
! 
! 	* symbols-vms-alpha.adb (Initialize): When symbol policy is Restricted,
! 	read the symbol file.
! 	(Finalize): Fail in symbol policy Restricted if a symbol in the original
! 	symbol file is not in the object files. Do not create a new symbol file
! 	when symbol policy is Restricted.
! 
! 	* gnatbind.adb (Gnatbind): Initialize Snames, because Snames is used
! 	in Scng.
! 
! 	* gnatsym.adb (Parse_Vmd_Line): Process new switch -R for symbol policy
! 	Restricted.
! 	(Usage): Line for new switch -R
! 
! 	* make.adb (Initialize): When the platform is not VMS, add the
! 	directory where gnatmake is invoked in the front of the path, if
! 	gnatmake is invoked with directory information.  Change the Scan_Args
! 	while loop to a for loop.
! 	(Recursive_Compute_Depth): Remove parameter Visited. Improve efficiency:
! 	if Depth is equal or greater than the proposed depth, there is nothing
! 	to do.
! 	(Initialize): Call Recursive_Compute_Depth with initial Depth equal to 1
! 	instead of 0.
! 
! 	* prj.ads: Add new symbol policy Restricted.
! 
! 	* prj-dect.adb (Parse_Case_Construction): Call End_Case_Construction
! 	with the new parameters Check_All_Labels and Case_Location.
! 
! 	* prj-nmsc.adb (Ada_Check): Process new symbol policy Restricted
! 	(Library_Symbol_File needs to be defined).
! 
! 	* prj-strt.adb (End_Case_Construction): New parameters Check_All_Labels
! 	and Case_Location If Check_All_Labels is True, check that all values of
! 	the string type are used, and output warning(s) if they are not.
! 
! 	* prj-strt.ads (End_Case_Construction): New parameters Check_All_Labels
! 	and Case_Location.
! 
! 	* gnat_ugn.texi: Reorder subclauses in menus "Switches for gcc"
! 
! 	* gnat_ugn.texi: Update documentation about the library directory in
! 	Library Projects.
! 
! 	* makegpr.adb (Display_Command): In verbose mode, also display the
! 	value of the CPATH env var, when the compiler is gcc.
! 	(Initialize): Change the Scan_Args while loop to a for loop
! 	(Compile_Individual_Sources): Change directory to object directory
! 	before compilations.
! 
! 	* symbols.ads: New symbol policy Restricted.
! 
! 2004-06-11  Olivier Hainque  <hainque@act-europe.fr>
! 
! 	* a-except.adb (Raise_After_Setup family): Remove. The responsibility
! 	is now taken care of internally in the Exception_Propagation package
! 	and does not require clients assistance any more.
! 
! 	* a-exexpr.adb (Is_Setup_And_Not_Propagated,
! 	Set_Setup_And_Not_Propagated, and Clear_Setup_And_Not_Propagated): New
! 	functions. Helpers to maintain a predicate required in the handling of
! 	occurrence transfer between tasks.
! 	This is now handled internally and does not require clients assistance
! 	for the setup/propagate separation anymore.
! 	(Setup_Exception, Propagate_Exception): Simplify the Private_Data
! 	allocation strategy, handle the Setup_And_Not_Propagated predicate and
! 	document.
! 
! 	* s-taenca.adb (Check_Exception): Use raise_with_msg instead of
! 	raise_after_setup, now that everything is handled internally within the
! 	setup/propagation engine.
! 
! 2004-06-11  Hristian Kirtchev  <kirtchev@gnat.com>
! 
! 	* exp_ch6.adb (Expand_Inlined_Call): Add function Formal_Is_Used_Once.
! 	Add additional conditions for the case of an actual being a simple
! 	name or literal. Improve inlining by preventing the generation
! 	of temporaries with a short lifetime (one use).
! 
! 2004-06-11  Hristian Kirtchev  <kirtchev@gnat.com>
! 
! 	PR ada/15587
! 
! 	* einfo.ads: Minor comment updates for Has_Completion and
! 	E_Constant list of flags.
! 
! 	* sem_ch3.adb (Analyze_Object_Declaration): Full constant declarations
! 	and constant redeclarations now set the Has_Completion flag of their
! 	defining identifiers.
! 
! 	* sem_ch7.adb (Analyze_Package_Spec): Add procedure
! 	Inspect_Deferred_Constant_Completion.
! 	Used to detect private deferred constants that have not been completed
! 	either by a constant redeclaration or pragma Import. Emits error message
! 	"constant declaration requires initialization expression".
! 
! 	* sem_prag.adb (Process_Import_Or_Interface): An Import pragma now
! 	completes a deferred constant.
! 
! 2004-06-11  Geert Bosch  <bosch@gnat.com>
! 
! 	* eval_fat.adb (Decompose_Int): Fix rounding of negative numbers.
! 
! 	* s-fatgen.adb (Gradual_Scaling): Correct off-by-one error in
! 	calculating exponent for scaling denormal numbers.
! 	(Leading_Part): Properly raise Constraint_Error for zero or negative
! 	Adjustment.
! 	(Remainder): Properly raise Constraint_Error for zero divisor.
! 
! 2004-06-11  Thomas Quinot  <quinot@act-europe.fr>
! 
! 	* sem_util.adb: Minor reformatting.
! 
! 	* exp_ch2.adb (Expand_Entry_Parameter): Generate an explicit
! 	dereference when accessing the entry parameter record.
! 	(Check_Array_Type): Always check for possible implicit dereference.
! 	(maybe_implicit_dereference): Rename to check_no_implicit_derefence.
! 	Abort if a pointer is still present (denoting that an implicit
! 	dereference was left in the tree by the front-end).
! 
! 	* sem_attr.adb (Expand_Entry_Parameter): Generate an explicit
! 	dereference when accessing the entry parameter record.
! 	(Check_Array_Type): Always check for possible implicit dereference.
! 	(maybe_implicit_dereference): Rename to check_no_implicit_derefence.
! 	Abort if a pointer is still present (denoting that an implicit
! 	dereference was left in the tree by the front-end).
! 
! 2004-06-11  Emmanuel Briot  <briot@act-europe.fr>
! 
! 	* g-debpoo.adb (Deallocate, Dereference): Add prefix "error:" to error
! 	message, like the compiler itself does. Easier to parse the output.
! 
! 	* g-debpoo.ads: (Allocate, Deallocate, Dereference): Add comments.
! 
! 	* gnat_ugn.texi (gnatxref, gnatfind): Clarify that source names should
! 	be base names, and not includes directories.
! 
! 2004-06-11  Arnaud Charlet  <charlet@act-europe.fr>
! 
! 	* Makefile.generic ($(EXEC)): Depend on $(OBJECTS), not $(OBJ_FILES),
! 	so that dependencies are properly taken into account by make.
! 
! 2004-06-11  Arnaud Charlet  <charlet@act-europe.fr>
! 
! 	PR ada/15622
! 	* s-unstyp.ads, s-maccod.ads, sem_ch8.adb, s-auxdec.ads,
! 	exp_intr.adb, s-auxdec-vms_64.ads: Fix typo: instrinsic -> intrinsic
! 
! 2004-06-11  Jerome Guitton  <guitton@act-europe.fr>
! 
! 	* Makefile.in (install-gnatlib): install target-specific run-time files.
! 
! 	* Make-lang.in: Remove obsolete targets.
! 
! 2004-06-11  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* par-ch12.adb (P_Generic): Add scope before analyzing subprogram
! 	specification, to catch misuses of program unit names.
! 
! 	* sem_res.adb (Resolve_Type_Conversion): Do not emit warnings on
! 	superfluous conversions in an instance.
! 
! 2004-06-11  Ed Schonberg  <schonberg@gnat.com>
! 
! 	PR ada/15403
! 
! 	* sem_ch12.adb (Save_References): If operator node has been folded to
! 	enumeration literal, associated_node must be discarded.
! 
! 2004-06-11  Jose Ruiz  <ruiz@act-europe.fr>
! 
! 	* s-stchop-vxworks.adb: Add required pragma Convention to
! 	Task_Descriptor because it is updated by a C function.
! 
! 2004-06-08  Arnaud Charlet  <charlet@act-europe.fr>
! 
! 	PR ada/15568
! 
! 	* Makefile.in: Remove target specific SO_OPT on IRIX
! 
! 2004-06-07  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 
! 	* ada-tree.def (TRANSFORM_EXPR, ALLOCATE_EXPR, USE_EXPR): Deleted.
! 	(GNAT_NOP_EXPR, GNAT_LOOP_ID, EXPR_STMT, NULL_STMT): Likewise.
! 	(BLOCK_STMT, IF_STMT, GOTO_STMT, LABEL_STMT, RETURN_STMT): Likewise.
! 	(ASM_STMT, BREAK_STMT, REGION_STMT,HANDLER_STMT): Likewise.
! 	(STMT_STMT, USE_STMT): New statement codes.
! 	(LOOP_STMT, EXIT_STMT): Make slight semantic changes.
! 	* ada-tree.h: Reflect above changes.
! 	(struct tree_loop_id): Deleted.
! 	(union lang_tree_node, struct lang_decl, struct lang_type):
! 	Now just contains a tree node; update macros using TYPE_LANG_SPECIFIC
! 	and DECL_LANGUAGE_SPECIFIC to reflect these changes.
! 	(DECL_INIT_BY_ASSIGN_P, TRE_LOOP_NODE_ID, TREE_SLOC): Deleted.
! 	(IS_ADA_STMT): New macro.
! 	* decl.c (annotate_decl_with_node): New function.
! 	(gnat_to_gnu_entity): Use it and Sloc_to_locus instead of set_lineno.
! 	(gnat_to_gnu_entity, case object): Remove call to expand CONVERT_EXPR.
! 	Call add_stmt_with_node to do needed assignments.
! 	Add call to update setjmp buffer directly, not via EXPR_STMT.
! 	(maybe_variable): Argment GNAT_NODE deleted.
! 	* gigi.h (maybe_variable): Likewise.
! 	(make_transform, add_stmt_with_node, set_block_for_group): New.
! 	(gnat_gimplify_expr, gnat_expand_body, Sloc_to_locus): Likewise.
! 	(set_block_jmpbuf_decl, get_block_jmpbuf_decl): Likewise.
! 	(discard_file_names, gnu_block_stack, gnat_to_code): Deleted.
! 	(set_lineno, set_lineno_from_sloc): Likewise.
! 	(record_code_position, insert_code_for): Likewise.
! 	(gnat_poplevel): Now returns void.
! 	(end_subprog_body): Now takes argument.
! 	* misc.c (cgraph.h, tree-inline.h): New includes.
! 	(gnat_tree_size, LANG_HOOKS_TREE_SIZE): Deleted.
! 	(gnat_post_options, LANG_HOOKS_POST_OPTIONS): New.
! 	(LANG_HOOKS_CALLGRAPH_EXPAND_FUNCTION): Likewise.
! 	(LANG_HOOKS_RTL_EXPAND_STMT, LANG_HOOKS_GIMPLIFY_EXPR): Likewise.
! 	(gnat_parse_file): Don't set immediate_size_expand.
! 	Call cgraph functions.
! 	(gnat_expand_expr): Remove most cases.
! 	(record_code_position, insert_code_for): Remove from here.
! 	* trans.c (toplev.h, tree-gimple.h): Now included.
! 	(discard_file_names): Deleted.
! 	(gnu_block_stack, gnu_block_stmt_node, gnu_block_stmt_free_list): Del.
! 	(first_nondeleted_insn, make_expr_stmt_from_rtl): Likewise.
! 	(struct stmt_group, current_stmt_group, stmt_group_free_list): New.
! 	(gnu_stack_free_list, record_cost_position, insert_code_for): Likewise.
! 	(add_cleanup, push_stack, gnat_gimplify_stmt, add_cleanup): Likewise.
! 	(gnat_gimplify_type_sizes, gnat_gimplify_one_sizepos): Likewise.
! 	(gnat_expand_body_1, gnat_gimplify_expr, annotate_with_node): Likewise.
! 	(set_block_for_group, add_stmt_list): Likewise.
! 	(start_stmt_group): Renamed from start_block_stmt.
! 	(end_stmt_group): Likewise, from end_block_stmt.
! 	(build_stmt_group): Likewise, from build_block_stmt, also add arg.
! 	(gigi): Don't set discard_file_names or call set_lineno.
! 	Disallow front end ZCX; call gnat_to_gnu, not gnat_to_code.
! 	(tree_transform): Deleted, now renamed to be gnat_to_gnu.
! 	Numerous changes throughout to reflect new names and complete
! 	function-at-a-time implementation.
! 	(gnat_expand_stmt): Delete or comment out all cases.
! 	(process_inlined_subprograms): Use add_stmt.
! 	(process_decls): Use gnat_to_gnu, not gnat_to_code, and don't
! 	call set_lineno; also remove unneeded block handling.
! 	(process_type): Remove unneeded block handling.
! 	(build_unit_elab): Remove calls to deleted functions.
! 	* utils.c (cgraph.h, tree-inline.h, tree-gimple.h): Now include.
! 	(tree-dump.h): Likewise.
! 	(struct ada_binding_level): Add field jmpbuf_decl.
! 	(gnat_define_builtin, gnat_install_builtins): New.
! 	(gnat_gimplify_function, gnat_finalize): Likewise.
! 	(gnat_poplevel): No longer return BLOCK, set it instead.
! 	Remove code dealing with nested functions.
! 	(gnat_init_decl_processing): Also set size_type_node.
! 	Call gnat_install_builtins.
! 	(create_var_decl): Don't set DECL_INIT_BY_ASSIGN.
! 	(create_subprog_decl): Change handling of inline_flag; set TREE_STATIC.
! 	Remove special-case for "main".
! 	(end_subprog_body): Add arg and rework for tree-ssa.
! 	(convert): Don't use GNAT_NOP_EXPR or look for TRANSFORM_EXPR.
! 	Add case for BOOLEAN_TYPE.
! 	* utils2.c (rtl.h): Now include.
! 	(build_call_raise): Test Debug_Flag_NN directly.
! 	(build_call_alloc_dealloc): Don't use local stack allocation for now.
! 	(gnat_mark_addressable, case GNAT_NOP_EXPR): Deleted.
! 	(gnat_mark_addressable, case VAR_DECL): Handle both early & late cases.
! 
! 2004-06-07  Robert Dewar  <dewar@gnat.com>
! 
! 	* a-direct.ads, einfo.ads: Minor comment updates
! 
! 	* s-taprop-lynxos.adb, s-taprop-tru64.adb, s-taprop-irix.adb,
! 	s-taprop-irix-athread.adb, s-taprop-hpux-dce.adb, s-taprop-linux.adb,
! 	s-taprop-dummy.adb, s-taprop-os2.adb, s-taprop-solaris.adb,
! 	s-taprop-vms.adb, s-taprop-mingw.adb, s-taprop-vxworks.adb,
! 	s-taprop-posix.adb, s-taprop.ads, exp_dbug.adb: Minor reformatting.
! 
! 	* s-interr-sigaction.adb: Remove unreferenced variable
! 	(Attached_Interrupts).  Minor reformatting.
! 	Avoid use of variable I (replace by J).
! 
! 	* par-ch10.adb: Fix text of one error message
! 
! 	* checks.adb, checks.ads, cstand.adb, vms_data.ads, errout.ads,
! 	exp_aggr.adb, exp_ch3.adb, exp_ch3.ads, exp_ch5.adb, exp_ch6.adb,
! 	exp_ch9.adb, exp_code.adb, gnat1drv.adb, lib-load.adb, lib-writ.adb,
! 	opt.adb, par.adb, opt.ads, par-ch11.adb, par-ch3.adb, par-ch4.adb,
! 	par-ch5.adb, par-ch6.adb, par-ch8.adb, par-ch9.adb, par-prag.adb,
! 	par-util.adb, scng.adb, sem_aggr.adb, sem_attr.adb, sem_cat.adb,
! 	sem_ch10.adb, sem_ch10.adb, sem_ch11.adb, sem_ch12.adb, sem_ch2.adb,
! 	sem_ch3.adb, sem_ch3.ads, sem_ch4.adb, sem_ch5.adb, sem_ch6.adb,
! 	sem_ch7.adb, sem_ch8.adb, sem_ch9.adb, sem_eval.adb, sem_prag.adb,
! 	sem_res.adb, sem_type.adb, sem_util.adb, sinfo.ads, snames.adb,
! 	snames.ads, snames.h, sprint.adb, switch-c.adb: Modifications for Ada
! 	2005 support.
! 
! 2004-06-07  Doug Rupp  <rupp@gnat.com>
! 
! 	* mlib-tgt-vms.adb: Rename mlib-tgt-vms.adb mlib-tgt-vms-alpha.adb
! 
! 	* s-vaflop-vms.adb: Rename s-vaflop-vms.adb to s-vaflop-vms-alpha.adb
! 
! 	* mlib-tgt-vms-ia64.adb: New file.
! 
! 	* Makefile.in: Rename mlib-tgt-vms.adb to mlib-tgt-vms-alpha.adb
! 	Add mlib-tgt-vms-ia64.adb
! 	Rename s-vaflop-vms.adb to s-vaflop-vms-alpha.adb.
! 	Move to alpha specific ifeq section.
! 	Add VMS specific versions of symbols.adb
! 	Renaming of 5q vms files.
! 
! 	* 5qsystem.ads renamed to system-vms_64.ads.
! 
! 2004-06-07  Vincent Celier  <celier@gnat.com>
! 
! 	* a-calend.ads: Add a GNAT Note comment after function Time_Of to
! 	explain that when a time of day corresponding to the non existing hour
! 	on the day switching to DST is specified, Split may return a different
! 	value for Seconds.
! 
! 	* gnatcmd.adb: Add processing of GNAT METRIC (for gnatmetric), similar
! 	to GNAT PRETTY.
! 
! 	* g-os_lib.adb (OpenVMS): New Boolean value imported from System.
! 	(Normalize_Pathname): Only resolve VMS logical names when on VMS.
! 
! 	* mlib-prj.adb (Build_Library): New flag Gtrasymobj_Needed, initialize
! 	to False.
! 	If Gtrasymobj_Needed is True, add the full path of g-trasym.obj to
! 	the linking options.
! 	(Build_Library.Check_Libs): On VMS, if there is a dependency on
! 	g-trasym.ads, set Gtrasymobj_Needed to True.
! 
! 	* prj-attr.adb: Add new package Metrics for gnatmetric
! 
! 	* prj-nmsc.adb (Record_Other_Sources): Put source file names in
! 	canonical case to take into account files with upper case characters on
! 	Windows.
! 	(Ada_Check): Load the reference symbol file name in the name buffer to
! 	check it, not the symbol file name.
! 
! 	* snames.ads, snames.adb: Add standard name Metrics (name of project
! 	file package for gnatmetric).
! 
! 	* vms_conv.ads: Add Metric to Comment_Type
! 
! 	* vms_conv.adb (Initialize): Add component dor Metric in Command_List
! 
! 	* vms_data.ads: Add qualifiers for GNAT METRIC
! 
! 	* makegpr.adb (Link_Executables): Take into account the switches
! 	specified in package Linker of the main project.
! 
! 2004-06-07  Thomas Quinot  <quinot@act-europe.fr>
! 
! 	* bindgen.adb (Set_Unit_Number): Units is an instance of Table, and so
! 	the index of the last element is Units.Last, not Units.Table'Last
! 	(which is usually not a valid index within the actually allocated
! 	storage for the table).
! 
! 	* exp_ch4.adb (Insert_Dereference_Action): Change predicate that
! 	determines whether to generate a call to a checked storage pool
! 	Dereference action.
! 	Generate such a call only for a dereference that either comes from
! 	source, or is the result of rewriting a dereference that comes from
! 	source.
! 
! 2004-06-07  Romain Berrendonner  <berrendo@act-europe.fr>
! 
! 	* bindgen.adb (Gen_Output_File): Add support for GAP builds.
! 
! 2004-06-07  Eric Botcazou  <ebotcazou@act-europe.fr>
! 
! 	(gnat_to_gnu_entity) <E_Array_Subtype>: For multi-dimensional arrays at
! 	file level, elaborate the stride for inner dimensions in alignment
! 	units, not bytes.
! 
! 	* exp_ch5.adb: Correct wrong reference to Component_May_Be_Bit_Aligned
! 	in a comment.
! 
! 2004-06-07  Javier Miranda  <miranda@gnat.com>
! 
! 	* exp_ch6.adb: Correct wrong modification in previous patch
! 
! 2004-06-07  Vasiliy Fofanov  <fofanov@act-europe.fr>
! 
! 	* g-trasym.ads: Corrected comment to properly reflect level of support
! 	on VMS.
! 
! 2004-06-07  Hristian Kirtchev  <kirtchev@gnat.com>
! 
! 	* lib-xref.adb (Generate_Reference): Add nested function Is_On_LHS. It
! 	includes case of a variable referenced on the left hand side of an
! 	assignment, therefore remove redundant code. Variables and prefixes of
! 	indexed or selected components are now marked as referenced on left
! 	hand side. Warnings are now properly emitted when variables or prefixes
! 	are assigned but not read.
! 
! 	* sem_warn.adb (Output_Unreferenced_Messages): Add additional checks to
! 	left hand side referenced variables. Private access types do not
! 	produce the warning "variable ... is assigned but never read".
! 	Add also additional checks to left hand side referenced variables.
! 	Aliased, renamed objects and access types do not produce the warning
! 	"variable ... is assigned but never read" since other entities may read
! 	the memory location.
! 
! 2004-06-07  Jerome Guitton  <guitton@act-europe.fr>
! 
! 	* Makefile.in: In the powerpc/vxworks-specific section, restore
! 	EXTRA_GNATRTL_NONTASKING_OBJS and EXTRA_GNATRTL_TASKING_OBJS (removed
! 	by mistake).
! 
! 2004-06-07  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* sem_ch4.adb (Remove_Abstract_Operations): Refine the removal of
! 	predefined operators.
! 	Removes spurious type errors from g-trasym-vms.adb.
! 
! 	* sem_res.adb (Rewrite_Renamed_Operator): If intrinsic operator is
! 	distinct from the operator appearing in the source, call appropriate
! 	routine to insert conversions when needed, and complete resolution of
! 	node.
! 	(Resolve_Intrinsic_Operator): Fix cut-and-paste bug on transfer of
! 	interpretations for rewritten right operand.
! 	(Set_Mixed_Mode_Operand): Handle properly a universal real operand when
! 	the other operand is overloaded and the context is a type conversion.
! 
! 2004-06-07  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 
! 	* ada-tree.def (BLOCK_STMT): Now has two operands.
! 	(BREAK_STMT): New.
! 
! 	* ada-tree.h: (BLOCK_STMT_BLOCK): New macro.
! 
! 	* gigi.h: (gnat_poplevel): Now returns a tree.
! 
! 	* trans.c (end_block_stmt): Add arg; all callers changed.
! 	(tree_transform, case N_Case_Statement): Make a BLOCK_STMT for a WHEN.
! 	(start_block_stmt): Clear BLOCK_STMT_BLOCK.
! 	(add_stmt): Set TREE_TYPE.
! 	(gnat_expand_stmt, case BLOCK_STMT): Handle BLOCK_STMT_BLOCK.
! 	(gnat_expand_stmt, case BREAK_STMT): New case.
! 
! 	* utils.c (gnat_poplevel): Return a BLOCK, if we made one.
! 
! 2004-06-07  Jose Ruiz  <ruiz@act-europe.fr>
! 
! 	* s-stchop.adsm s-stchop.adb, s-stchop-vxworks.adb: Remove the
! 	procedure Set_Stack_Size that is not needed.
! 
! 2004-06-07  Sergey Rybin  <rybin@act-europe.fr>
! 
! 	* gnat_ugn.texi: Clarify the case when non-standard naming scheme is
! 	used for gnatpp input file and for the files upon which it depends
! 
! 2004-06-07  Ben Brosgol  <brosgol@gnat.com>
! 
! 	* gnat_ugn.texi: Wordsmithing of "GNAT and Libraries" chapter
! 
! 2004-06-07  Arnaud Charlet  <charlet@act-europe.fr>
! 
! 	* gnatvsn.ads: Bump version numbers appropriately.
! 	Add new build type.
! 
! 2004-06-07  Pascal Obry  <obry@gnat.com>
! 
! 	* gnat_ugn.texi: Improve comments about imported names and link names
! 	on Windows. Add a note about the requirement to use -k gnatdll's option
! 	when working with a DLL which has stripped stdcall symbols (no @nn
! 	suffix).
! 
! 2004-05-27  Vincent Celier  <celier@gnat.com>
! 
! 	* vms_data.ads: Add new GNAT PRETTY qualifiers /NO_BACKUP and
! 	COMMENTS_LAYOUT=UNTOUCHED
! 
! 	* symbols-vms.adb, symbols-vms-alpha.adb: Renamed symbols-vms.adb to
! 	symbols-vms-alpha.adb
! 
! 2004-05-27  Thomas Quinot  <quinot@act-europe.fr>
! 
! 	* sem.ads: Clarify documentation on checks suppression.
! 
! 	* einfo.ads (Is_Known_Non_Null): Minor comment typo fix and rephrasing.
! 
! 2004-05-27  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* sem_util.adb (Is_Descendent_Of): Examine properly all ancestors in
! 	the case of multiple derivations.
! 	(Is_Object_Reference): For a selected component, verify that the prefix
! 	is itself an object and not a value.
! 
! 	* sem_ch12.adb (Same_Instantiated_Constant): New name for
! 	Same_Instantiated_Entity.
! 	(Same_Instantiated_Variable): Subsidiary to
! 	Check_Formal_Package_Instance, to recognize actuals for in-out generic
! 	formals that are obtained from a previous formal package.
! 	(Instantiate_Subprogram_Body): Emit proper error when
! 	generating code and the proper body of a stub is missing.
! 
! 	* sem_ch4.adb (Remove_Address_Interpretations): If the operation still
! 	has a universal interpretation, do the disambiguation here.
! 
! 	* exp_ch4.adb (Expand_N_Type_Conversion,
! 	Expand_N_Unchecked_Type_Conversion): Special handling when target type
! 	is Address, to avoid typing anomalies when Address is a visible integer
! 	type.
! 
! 	* exp_ch6.adb (Expand_N_Subprogram_Body): Use Is_Descendent_Of_Address
! 	to determine whether a subprogram should not be marked Pure, even when
! 	declared in a pure package.
! 
! 2004-05-27  Jose Ruiz  <ruiz@act-europe.fr>
! 
! 	* gnat_ugn.texi: Replace pragma Ravenscar by pragma Profile.
! 
! 	* gnat_rm.texi: Replace Max_Entry_Queue_Depth by Max_Entry_Queue_Length
! 	Document No_Dynamic_Attachment, that supersedes No_Dynamic_Interrupts.
! 	Update the documentation about the Ravenscar profile, following the
! 	definition found in AI-249.
! 
! 	* sem_prag.adb: Use FIFO_Within_Priorities and Ceiling_Locking when
! 	setting the Profile (Ravenscar). This must be done in addition to
! 	setting the required restrictions.
! 
! 	* rtsfind.ads: Add the set of operations defined in package
! 	Ada.Interrupts.
! 
! 	* exp_ch6.adb: Check whether we are violating the No_Dynamic_Attachment
! 	restriction.
! 
! 2004-05-27  Eric Botcazou  <ebotcazou@act-europe.fr>
! 
! 	lang-specs.h: Always require -c or -S and always redirect to /dev/null
! 	if -gnatc or -gnats is passed.
! 
! 2004-05-27  Hristian Kirtchev  <kirtchev@gnat.com>
! 
! 	* sem_prag.adb (Sig_Flags): A Pragma_Unchecked_Union does not count as
! 	a significant reference. Warnings are now properly emitted when a
! 	discriminated type is not referenced.
! 
! 	* lib-xref.adb (Generate_Reference): A deferred constant completion,
! 	record representation clause or record type discriminant does not
! 	produce a reference to its corresponding entity. Warnings are now
! 	properly emitted when deferred constants and record types are not
! 	referenced.
! 
! 2004-05-27  Geert Bosch  <bosch@gnat.com>
! 
! 	* Makefile.in: Use long version of libm routines on ia64 gnu/linux.
! 	Fixes ACATS Annex G tests.
! 
! 2004-05-27  Robert Dewar  <dewar@gnat.com>
! 
! 	* rtsfind.adb (RTU_Loaded): Temporary kludge to get past bug of not
! 	handling WITH
! 
! 2004-05-27  Arnaud Charlet  <charlet@act-europe.fr>
! 
! 	* s-interr.adb (Server_Task): Take into account case of early return
! 	from sigwait under e.g. linux.
! 
! 2004-05-27  Sergey Rybin  <rybin@act-europe.fr>
! 
! 	* gnat_ugn.texi: Add description for the new gnatpp options:
! 	 -rnb - replace the original source without creating its backup copy
! 	 -c0 - do not format comments
! 
! 2004-05-24  Geert Bosch  <bosch@gnat.com>
! 
! 	* a-numaux-x86.adb (Reduce): Reimplement using an approximation of Pi
! 	with 192 bits of precision, sufficient to reduce a double-extended
! 	arguments X with a maximum relative error of T'Machine_Epsilon, for X
! 	in -2.0**32 .. 2.0**32.
! 	(Cos, Sin):  Always reduce arguments of 1/4 Pi or larger, to prevent
! 	reduction by the processor, which only uses a 68-bit approximation of
! 	Pi.
! 	(Tan): Always reduce arguments and compute function either using
! 	the processor's fptan instruction, or by dividing sin and cos as needed.
! 
! 2004-05-24  Doug Rupp  <rupp@gnat.com>
! 
! 	* adaint.c (__gnat_readdir): Cast CRTL function retun value to avoid
! 	gcc error on 32/64 bit VMS.
! 
! 2004-05-24  Olivier Hainque  <hainque@act-europe.fr>
! 
! 	* init.c (__gnat_error_handler): Handle EEXIST as EACCES for SIGSEGVs,
! 	since this is what we get for stack overflows although not documented
! 	as such.
! 	Document the issues which may require adjustments to our signal
! 	handlers.
! 
! 2004-05-24  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* inline.adb (Add_Scope_To_Clean): Do not add cleanup actions to the
! 	enclosing dynamic scope if the instantiation is within a generic unit.
! 
! 2004-05-24  Arnaud Charlet  <charlet@act-europe.fr>
! 
! 	* exp_dbug.ads: Fix typo.
! 
! 	* Makefile.in: s-osinte-linux-ia64.ads was misnamed.
! 	Rename it to its proper name: system-linux-ia64.ads
! 	(stamp-gnatlib1): Remove extra target specific run time files when
! 	setting up the rts directory.
! 
! 2004-05-24  Javier Miranda  <miranda@gnat.com>
! 
! 	* einfo.ads, einfo.adb (Limited_Views): Removed.
! 	(Limited_View): New attribute that replaces the previous one. It is
! 	now a bona fide package with the limited-view list through the
! 	first_entity and first_private attributes.
! 
! 	* sem_ch10.adb (Install_Private_With_Clauses): Give support to
! 	limited-private-with clause.
! 	(Install_Limited_Withed_Unit): Install the private declarations of a
! 	limited-private-withed package. Update the installation of the shadow
! 	entities according to the new structure (see Build_Limited_Views)
! 	(Build_Limited_Views): Replace the previous implementation of the
! 	limited view by a package entity that references the first shadow
! 	entity plus the first shadow private entity (required for limited-
! 	private-with clause)
! 	(New_Internal_Shadow_Entity): Code cleanup.
! 	(Remove_Limited_With_Clause): Update the implementation to undo the
! 	new work carried out by Build_Limited_Views.
! 	(Build_Chain): Complete documentation.
! 	Replace Ada0Y by Ada 0Y in comments
! 	Minor reformating
! 
! 	* sem_ch3.adb (Array_Type_Declaration): In case of anonymous access
! 	types the level of accessibility depends on the enclosing type
! 	declaration.
! 
! 	* sem_ch8.adb (Find_Expanded_Name): Fix condition to detect shadow
! 	entities. Complete documentation of previous change.
! 
! 2004-05-24  Robert Dewar  <dewar@gnat.com>
! 
! 	* namet.adb: Minor reformatting
! 	Avoid use of name I (replace by J)
! 	Minor code restructuring
! 
! 	* sem_ch6.adb: Minor reformatting
! 
! 	* lib-writ.adb: Do not set restriction as active if this is a
! 	Restriction_Warning case.
! 
! 	* sem_prag.adb: Reset restriction warning flag if real pragma
! 	restriction encountered.
! 
! 	* s-htable.adb: Minor reformatting
! 	Change rotate count to 3 in Hash (improves hash for small strings)
! 
! 	* 5qsystem.ads: Add comments for type Address (no literals allowed).
! 
! 	* gnat_ugn.texi: Add new section of documentation "Code Generation
! 	Control", which describes the use of -m switches.
! 
! 2004-05-24  Eric Botcazou  <ebotcazou@act-europe.fr>
! 
! 	trans.c (tree_transform) <N_Identifier>: Do the dereference directly
! 	through the DECL_INITIAL for renamed variables.
! 
! 2004-05-24  Arnaud Charlet  <charlet@act-europe.fr>
! 
! 	* s-osinte-linux-ia64.ads: Renamed system-linux-ia64.ads
! 
! 2004-05-19  Joel Brobecker  <brobecker@gnat.com>
! 
! 	* exp_dbug.ads: Correct comments concerning handling of overloading,
! 	since we no longer use $ anymore.
! 
! 2004-05-19  Sergey Rybin  <rybin@act-europe.fr>
! 
! 	* sem_ch10.adb (Optional_Subunit): When loading a subunit, do not
! 	ignore errors if ASIS_Mode is set. This prevents creating ASIS trees
! 	with illegal subunits.
! 
! 2004-05-19  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* sem_ch6.adb (Check_Following_Pragma): When compiling a subprogram
! 	body with front-end inlining enabled, check whether an inline pragma
! 	appears immediately after the body and applies to it.
! 
! 	* sem_prag.adb (Cannot_Inline): Emit warning if front-end inlining is
! 	enabled and the pragma appears after the body of the subprogram.
! 
! 2004-05-17  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 
! 	Part of function-at-a-time conversion
! 
! 	* misc.c (adjust_decl_rtl): Deleted.
! 	(LANG_HOOKS_PUSHLEVEL, LANG_HOOKS_POPLEVEL, LANG_HOOKS_SET_BLOCK):
! 	Define.
! 
! 	* gigi.h: (adjust_decl_rtl, kept_level_p, set_block): Deleted.
! 	(add_decl_stmt, add_stmt, block_has_vars): New functions.
! 	(gnat_pushlevel, gnat_poplevel): Renamed from pushlevel and poplevel.
! 
! 	* decl.c (elaborate_expression, maybe_pad_type): Call add_decl_stmt
! 	when making a decl.
! 	(gnat_to_gnu_entity): Likewise.
! 	Use add_stmt to update setjmp buffer.
! 	Set TREE_ADDRESSABLE instead of calling put_var_into_stack and
! 	flush_addressof.
! 	No longer call adjust_decl_rtl.
! 	(DECL_INIT_BY_ASSIGN_P): New macro.
! 	(DECL_STMT_VAR): Likewise.
! 
! 	* trans.c (gigi): Call start_block_stmt to make the outermost
! 	BLOCK_STMT.
! 	(gnat_to_code, gnu_to_gnu, tree_transform, process_decls, process_type):
! 	Call start_block_stmt and end_block_stmt temporarily.
! 	Use gnat_expand_stmt instead of expand_expr_stmt.
! 	(add_decl_stmt): New function.
! 	(tree_transform): Call it.
! 	(add_stmt): Also emit initializing assignment for DECL_STMT if needed.
! 	(end_block_stmt): Set type and NULL_STMT.
! 	(gnat_expand_stmt): Make recursize call instead of calling
! 	expand_expr_stmt.
! 	(gnat_expand_stmt, case DECL_STMT): New case.
! 	(set_lineno_from_sloc): Do nothing if global.
! 	(gnu_block_stmt_node, gnu_block_stmt_free_list): New variables.
! 	(start_block_stmt, add_stmt, end_block_stmt): New functions.
! 	(build_block_stmt): Call them.
! 	(gnat_to_code): Don't expand NULL_STMT.
! 	(build_unit_elab): Rename pushlevel and poplevel to gnat_* and change
! 	args.
! 	(tree_transform): Likewise.
! 	(tree_transform, case N_Null_Statement): Return NULL_STMT.
! 	(gnat_expand_stmt, case NULL_STMT): New case.
! 	(gnat_expand_stmt, case IF_STMT): Allow nested IF_STMT to have no
! 	IF_STMT_TRUE.
! 
! 	* utils2.c (gnat_mark_addressable, case VAR_DECL): Do not set
! 	TREE_ADDRESSABLE.
! 
! 	* utils.c (create_var_decl): Do not call expand_decl or
! 	expand_decl_init.
! 	Set TREE_ADDRESSABLE instead of calling gnat_mark_addressable.
! 	Set DECL_INIT_BY_ASSIGN_P when needed and do not generate MODIFY_EXPR
! 	here.
! 	(struct e_stack): Add chain_next to GTY.
! 	(struct binding_level): Deleted.
! 	(struct ada_binding_level): New struct.
! 	(free_block_chain): New.
! 	(global_binding_level, clear_binding_level): Deleted.
! 	(global_bindings_p): Rework to see if no chain.
! 	(kept_level_p, set_block): Deleted.
! 	(gnat_pushlevel): Renamed from pushlevel and extensive reworked to use
! 	new data structure and work directly on BLOCK node.
! 	(gnat_poplevel): Similarly.
! 	(get_decls): Look at BLOCK_VARS.
! 	(insert_block): Work directly on BLOCK node.
! 	(block_has_var): New function.
! 	(pushdecl): Rework for new binding structures.
! 	(gnat_init_decl_processing): Rename and rework calls to pushlevel and
! 	poplevel.
! 	(build_subprog_body): Likewise.
! 	(end_subprog_body): Likewise; also set up BLOCK in DECL_INITIAL.
! 
! 	* ada-tree.def (DECL_STMT, NULL_STMT): New codes.
! 
! 	* ada-tree.h: (DECL_INIT_BY_ASSIGN_P): New macro.
! 	(DECL_STMT_VAR): Likewise.
! 
! 2004-05-17  Robert Dewar  <dewar@gnat.com>
! 
! 	* restrict.ads, restrict.adb (Process_Restriction_Synonym): New
! 	procedure
! 
! 	* sem_prag.adb (Analyze_Pragma, case Restrictions): Cleanup handling
! 	of restriction synonyums by using
! 	Restrict.Process_Restriction_Synonyms.
! 
! 	* snames.ads, snames.adb: Add entries for Process_Restriction_Synonym
! 
! 	* s-restri.ads (Tasking_Allowed): Correct missing comment
! 
! 	* s-rident.ads: Add entries for restriction synonyms
! 
! 	* ali.adb: Fix some problems with badly formatted ALI files that can
! 	result in infinite loops.
! 
! 	* s-taprop-lynxos.adb, s-tpopsp-lynxos.adb, s-taprop-tru64.adb,
! 	s-tpopsp-posix-foreign.adb, s-taprop-irix.adb, s-interr-sigaction.adb,
! 	s-taprop-irix-athread.adb, s-taprop-hpux-dce.adb, s-taprop-linux.adb,
! 	s-taprop-dummy.adb, s-interr-dummy.adb, s-taprop-os2.adb,
! 	s-taprop-solaris.adb, s-tpopsp-solaris.adb, s-asthan-vms.adb,
! 	s-inmaop-vms.adb, s-interr-vms.adb, s-taprop-vms.adb,
! 	s-tpopde-vms.adb, s-taprop-mingw.adb, s-interr-vxworks.adb,
! 	s-taprop-vxworks.adb, s-tpopsp-vxworks.adb, s-taprop-posix.adb,
! 	s-tpopsp-posix.adb, s-tratas-default.adb, a-dynpri.adb,
! 	a-tasatt.adb, a-taside.adb, a-taside.ads, exp_attr.adb,
! 	exp_ch9.adb, g-thread.adb, rtsfind.ads, sem_attr.adb,
! 	s-interr.adb, s-interr.ads, s-soflin.ads, s-taasde.adb,
! 	s-taasde.ads, s-taenca.adb, s-taenca.ads, s-taprop.ads,
! 	s-tarest.adb, s-tarest.ads, s-tasdeb.adb, s-tasdeb.ads,
! 	s-tasini.adb, s-tasini.ads, s-taskin.adb, s-taskin.ads,
! 	s-tasque.adb, s-tasque.ads, s-tasren.adb, s-tasren.ads,
! 	s-tassta.adb, s-tassta.ads, s-tasuti.adb, s-tasuti.ads,
! 	s-tataat.adb, s-tataat.ads, s-tpinop.adb, s-tpinop.ads,
! 	s-tpoben.adb, s-tpobop.adb, s-tpobop.ads, s-tporft.adb,
! 	s-tposen.adb, s-tposen.ads, s-tratas.adb, s-tratas.ads: Change Task_ID
! 	to Task_Id (minor cleanup).
! 
! 2004-05-17  Vincent Celier  <celier@gnat.com>
! 
! 	* g-os_lib.adb (Normalize_Pathname.Final_Value): Remove trailing
! 	directory separator.
! 
! 	* prj-proc.adb (Recursive_Process): Inherit attribute Languages from
! 	project being extended, if Languages is not declared in extending
! 	project.
! 
! 2004-05-17  Javier Miranda  <miranda@gnat.com>
! 
! 	* sem_ch10.adb (Install_Limited_Withed_Unit): Do not install the
! 	limited view of a visible sibling.
! 
! 2004-05-14  Robert Dewar  <dewar@gnat.com>
! 
! 	* gnat_ugn.texi: Minor change to -gnatS documentation
! 
! 	* sprint.adb: Remove some instances of Assert (False) and for this
! 	purpose replace them by output of a ??? string.
! 
! 	* checks.adb, exp_aggr.adb, sem_elim.adb: Remove useless pragma
! 	Assert (False).
! 
! 	* lib-writ.adb, lib-load.adb, lib.ads, lib.adb: Remove Dependent_Unit
! 	flag processing. This was suppressing required dependencies in
! 	No_Run_Time mode and is not needed since the binder does not generate
! 	references for things in libgnat anyway.
! 
! 	* sem_ch3.adb (Access_Type_Declaration): Reorganize code to avoid GCC
! 	warning.
! 
! 2004-05-14  Thomas Quinot  <quinot@act-europe.fr>
! 
! 	* gnat_ugn.texi: Document AIX-specific issue with initialization of
! 	resolver library.
! 
! 	* exp_ch4.adb (Insert_Dereference_Action): Do not generate dereference
! 	action for the case of an actual parameter in an init proc call.
! 
! 2004-05-14  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* sem_ch4.adb (Analyze_Selected_Component): If prefix is a protected
! 	subtype, check visible entities in base type.
! 
! 	* exp_ch7.adb (Clean_Simple_Protected_Objects): Do not generate cleanup
! 	actions if the object is a renaming.
! 
! 	* sem_ch12.adb (Same_Instantiated_Entity): Predicate for
! 	Check_Formal_Package_Instance, to determine more precisely when the
! 	formal and the actual denote the same entity.
! 
! 2004-05-14  Javier Miranda  <miranda@gnat.com>
! 
! 	* par-ch10.adb (P_Context_Clause): Complete documentation on AI-262
! 
! 	* sem_ch10.adb (Analyze_With_Clause): After analyzed, the entity
! 	corresponding to a private_with must be removed from visibility; it
! 	will be made visible later, just before we analyze the private part of
! 	the package.
! 	(Check_Private_Child_Unit): Allow private_with clauses in public
! 	siblings.
! 	(Install_Siblings): Make visible the private entities of private-withed
! 	siblings.
! 	(Install_Withed_Unit): Do not install the private withed unit if we
! 	are compiling a package declaration and the Private_With_OK flag was
! 	not set by the caller. These declarations will be installed later,
! 	just before we analyze the private part of the package.
! 
! 	* sem_ch3.adb (Analyze_Object_Declaration): In case of errors detected
! 	during the evaluation of the expression that initializes the object,
! 	decorate it with the expected type to avoid cascade errors.
! 	Code cleanup.
! 
! 	* sem_ch6.adb (Analyze_Subprogram_Body): If we are compiling a library
! 	subprogram we have to install the private_with clauses after its
! 	specification has been analyzed (as documented in AI-262.TXT).
! 
! 	* sem_ch8.adb (Has_Private_With): New function. Determines if the
! 	current compilation unit has a private with on a given entity.
! 	(Find_Direct_Name): Detect the Beaujolais problem described in
! 	AI-262.TXT
! 
! 	* sem_utils.ads, sem_util.adb (Is_Ancestor_Package): New function. It
! 	provides the functionality of the function Is_Ancestor that was
! 	previously available in sem_ch10. It has been renamed to avoid
! 	overloading.
! 
! 	* sprint.adb (Sprint_Node_Actual): Print limited_with clauses
! 
! 2004-05-14  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 
! 	* utils.c (build_vms_descriptor): Use SImode pointers.
! 
! 2004-05-14  Vasiliy Fofanov  <fofanov@act-europe.fr>
! 
! 	* gnat_ugn.texi: Revised chapter "GNAT and Libraries".
! 
! 2004-05-14  GNAT Script  <nobody@gnat.com>
! 
! 	* Make-lang.in: Makefile automatically updated
! 
! 2004-05-14  Arnaud Charlet  <charlet@act-europe.fr>
! 
! 	Renaming of target specific files for clarity
! 
! 	* Makefile.in: Rename GNAT target specific files.
! 
! 	* 31soccon.ads, 31soliop.ads 35soccon.ads, 3asoccon.ads,
! 	3bsoccon.ads, 3gsoccon.ads, 3hsoccon.ads, 3psoccon.ads,
! 	3ssoccon.ads, 3ssoliop.ads, 3veacodu.adb, 3vexpect.adb,
! 	3vsoccon.ads, 3vsocthi.adb, 3vsocthi.ads, 3vtrasym.adb,
! 	3wsoccon.ads, 3wsocthi.adb, 3wsocthi.ads, 3wsoliop.ads,
! 	3zsoccon.ads, 3zsocthi.adb, 3zsocthi.ads, 41intnam.ads,
! 	42intnam.ads, 45intnam.ads, 4aintnam.ads, 4cintnam.ads,
! 	4gintnam.ads, 4hexcpol.adb, 4hintnam.ads, 4lintnam.ads,
! 	4nintnam.ads, 4ointnam.ads, 4onumaux.ads, 4pintnam.ads,
! 	4sintnam.ads, 4vcaldel.adb, 4vcalend.adb, 4vcalend.ads,
! 	4vintnam.ads, 4wcalend.adb, 4wexcpol.adb, 4wintnam.ads,
! 	4zintnam.ads, 4znumaux.ads, 4zsytaco.adb, 4zsytaco.ads,
! 	51osinte.adb, 51osinte.ads, 51system.ads,
! 	52osinte.adb, 52osinte.ads, 53osinte.ads, 54osinte.ads,
! 	55osinte.adb, 55osinte.ads, 55system.ads, 56osinte.adb,
! 	56osinte.ads, 56system.ads, 56taprop.adb, 56taspri.ads,
! 	56tpopsp.adb, 57system.ads, 58system.ads,
! 	5amastop.adb, 5aml-tgt.adb, 5aosinte.adb, 5aosinte.ads,
! 	5asystem.ads, 5ataprop.adb, 5atasinf.ads, 5ataspri.ads,
! 	5atpopsp.adb, 5avxwork.ads, 5bml-tgt.adb, 5bosinte.adb,
! 	5bosinte.ads, 5bsystem.ads, 5cosinte.ads, 5csystem.ads,
! 	5dsystem.ads, 5esystem.ads, 5fintman.adb, 5fosinte.adb,
! 	5fosinte.ads, 5fsystem.ads, 5ftaprop.adb, 5ftasinf.ads,
! 	5ginterr.adb, 5gintman.adb, 5gmastop.adb, 5gml-tgt.adb,
! 	5gosinte.ads, 5gproinf.adb, 5gproinf.ads, 5gsystem.ads,
! 	5gtaprop.adb, 5gtasinf.adb, 5gtasinf.ads, 5gtpgetc.adb,
! 	5hml-tgt.adb, 5hosinte.adb, 5hosinte.ads, 5hparame.ads,
! 	5hsystem.ads, 5htaprop.adb, 5htaspri.ads, 5htraceb.adb,
! 	5iosinte.adb, 5iosinte.ads, 5itaprop.adb, 5itaspri.ads,
! 	5ksystem.ads, 5kvxwork.ads, 5lml-tgt.adb, 5losinte.ads,
! 	5lparame.adb, 5lsystem.ads, 5msystem.ads, 5mvxwork.ads,
! 	5ninmaop.adb, 5nintman.adb, 5nosinte.ads, 5nsystem.ads,
! 	5ntaprop.adb, 5ntaspri.ads, 5ointerr.adb, 5omastop.adb,
! 	5oosinte.adb, 5oosinte.ads, 5oosprim.adb, 5oparame.adb,
! 	5osystem.ads, 5otaprop.adb, 5otaspri.ads, 5posinte.ads,
! 	5posprim.adb, 5psystem.ads, 5pvxwork.ads, 5sintman.adb,
! 	5sml-tgt.adb, 5sosinte.adb, 5sosinte.ads, 5sosprim.adb,
! 	5sparame.adb, 5ssystem.ads, 5staprop.adb, 5stasinf.adb,
! 	5stasinf.ads, 5staspri.ads, 5stpopsp.adb, 5svxwork.ads,
! 	5tosinte.ads, 5usystem.ads, 5vasthan.adb, 5vdirval.adb,
! 	5vinmaop.adb, 5vinterr.adb, 5vintman.adb, 5vintman.ads,
! 	5vmastop.adb, 5vml-tgt.adb, 5vosinte.adb, 5vosinte.ads,
! 	5vosprim.adb, 5vosprim.ads, 5vparame.ads, 5vsymbol.adb,
! 	5vsystem.ads, 5vtaprop.adb, 5vtaspri.ads, 5vtpopde.adb,
! 	5vtpopde.ads, 5vtraent.adb, 5vtraent.ads, 5vvaflop.adb,
! 	5wdirval.adb, 5wgloloc.adb, 5wintman.adb, 5wmemory.adb,
! 	5wml-tgt.adb, 5wosinte.ads, 5wosprim.adb, 5wsystem.ads,
! 	5wtaprop.adb, 5wtaspri.ads, 5xparame.ads, 5xsystem.ads,
! 	5xvxwork.ads, 5yparame.ads, 5ysystem.ads, 5zinterr.adb,
! 	5zintman.adb, 5zintman.ads, 5zml-tgt.adb, 5zosinte.adb,
! 	5zosinte.ads, 5zosprim.adb, 5zparame.ads, 5zstchop.adb,
! 	5zsystem.ads, 5ztaprop.adb, 5ztaspri.ads, 5ztfsetr.adb,
! 	5ztpopsp.adb, 6vcpp.adb, 6vcstrea.adb, 6vinterf.ads,
! 	7sinmaop.adb, 7sintman.adb, 7sosinte.adb, 7sosprim.adb,
! 	7staprop.adb, 7staspri.ads, 7stfsetr.adb, 7stpopsp.adb,
! 	7straceb.adb, 7straces.adb, 7strafor.adb, 7strafor.ads,
! 	7stratas.adb, 86numaux.adb, 86numaux.ads: Replaced by files below.
! 
! 	* a-caldel-vms.adb, a-calend-mingw.adb, a-calend-vms.adb,
! 	a-calend-vms.ads, a-dirval-mingw.adb, a-dirval-vms.adb,
! 	a-excpol-abort.adb, a-excpol-interix.adb, a-intnam-aix.ads,
! 	a-intnam-dummy.ads, a-intnam-freebsd.ads, a-intnam-hpux.ads,
! 	a-intnam-interix.ads, a-intnam-irix.ads, a-intnam-linux.ads,
! 	a-intnam-lynxos.ads, a-intnam-mingw.ads, a-intnam-os2.ads,
! 	a-intnam-solaris.ads, a-intnam-tru64.ads, a-intnam-unixware.ads,
! 	a-intnam-vms.ads, a-intnam-vxworks.ads, a-numaux-libc-x86.ads,
! 	a-numaux-vxworks.ads, a-numaux-x86.adb, a-numaux-x86.ads,
! 	a-sytaco-vxworks.adb, a-sytaco-vxworks.ads, g-eacodu-vms.adb,
! 	g-expect-vms.adb, g-soccon-aix.ads, g-soccon-freebsd.ads,
! 	g-soccon-hpux.ads, g-soccon-interix.ads, g-soccon-irix.ads,
! 	g-soccon-mingw.ads, g-soccon-solaris.ads, g-soccon-tru64.ads,
! 	g-soccon-unixware.ads, g-soccon-vms.adb, g-soccon-vxworks.ads,
! 	g-socthi-mingw.adb, g-socthi-mingw.ads, g-socthi-vms.adb,
! 	g-socthi-vms.ads, g-socthi-vxworks.adb, g-socthi-vxworks.ads,
! 	g-soliop-mingw.ads, g-soliop-solaris.ads, g-soliop-unixware.ads,
! 	g-trasym-vms.adb, i-cpp-vms.adb, i-cstrea-vms.adb,
! 	interfac-vms.ads, mlib-tgt-aix.adb, mlib-tgt-hpux.adb,
! 	mlib-tgt-irix.adb, mlib-tgt-linux.adb, mlib-tgt-mingw.adb,
! 	mlib-tgt-solaris.adb, mlib-tgt-tru64.adb, mlib-tgt-vms.adb,
! 	mlib-tgt-vxworks.adb, s-asthan-vms.adb, s-gloloc-mingw.adb,
! 	s-inmaop-dummy.adb, s-inmaop-posix.adb, s-inmaop-vms.adb,
! 	s-interr-dummy.adb, s-interr-sigaction.adb, s-interr-vms.adb,
! 	s-interr-vxworks.adb, s-intman-dummy.adb, s-intman-irix.adb,
! 	s-intman-irix-athread.adb, s-intman-mingw.adb, s-intman-posix.adb,
! 	s-intman-solaris.adb, s-intman-vms.adb, s-intman-vms.ads,
! 	s-intman-vxworks.adb, s-intman-vxworks.ads, s-mastop-irix.adb,
! 	s-mastop-tru64.adb, s-mastop-vms.adb, s-mastop-x86.adb,
! 	s-memory-mingw.adb, s-osinte-aix.adb, s-osinte-aix.ads,
! 	s-osinte-aix-fsu.ads, s-osinte-dummy.ads, s-osinte-freebsd.adb,
! 	s-osinte-freebsd.ads, s-osinte-fsu.adb, s-osinte-hpux.ads,
! 	s-osinte-hpux-dce.adb, s-osinte-hpux-dce.ads, s-osinte-interix.ads,
! 	s-osinte-irix.adb, s-osinte-irix.ads, s-osinte-irix-athread.ads,
! 	s-osinte-linux.ads, s-osinte-linux-fsu.ads, s-osinte-linux-ia64.ads,
! 	s-osinte-lynxos-3.adb, s-osinte-lynxos-3.ads, s-osinte-lynxos.adb,
! 	s-osinte-lynxos.ads, s-osinte-mingw.ads, s-osinte-os2.adb,
! 	s-osinte-os2.ads, s-osinte-posix.adb, s-osinte-solaris.adb,
! 	s-osinte-solaris.ads, s-osinte-solaris-fsu.ads,
! 	s-osinte-solaris-posix.ads, s-osinte-tru64.adb, s-osinte-tru64.ads,
! 	s-osinte-unixware.adb, s-osinte-unixware.ads, s-osinte-vms.adb,
! 	s-osinte-vms.ads, s-osinte-vxworks.adb,
! 	s-osinte-vxworks.ads, s-osprim-mingw.adb,
! 	s-osprim-os2.adb, s-osprim-posix.adb, s-osprim-solaris.adb,
! 	s-osprim-unix.adb, s-osprim-vms.adb, s-osprim-vms.ads,
! 	s-osprim-vxworks.adb, s-parame-ae653.ads, s-parame-hpux.ads,
! 	s-parame-linux.adb, s-parame-os2.adb, s-parame-solaris.adb,
! 	s-parame-vms.ads, s-parame-vms-restrict.ads, s-parame-vxworks.ads,
! 	s-proinf-irix-athread.adb, s-proinf-irix-athread.ads,
! 	s-stchop-vxworks.adb, s-taprop-dummy.adb,
! 	s-taprop-hpux-dce.adb, s-taprop-irix.adb,
! 	s-taprop-irix-athread.adb, s-taprop-linux.adb, s-taprop-lynxos.adb,
! 	s-taprop-mingw.adb, s-taprop-os2.adb, s-taprop-posix.adb,
! 	s-taprop-solaris.adb, s-taprop-tru64.adb, s-taprop-vms.adb,
! 	s-taprop-vxworks.adb, s-tasinf-irix.ads, s-tasinf-irix-athread.adb,
! 	s-tasinf-irix-athread.ads, s-tasinf-solaris.adb, s-tasinf-solaris.ads,
! 	s-tasinf-tru64.ads, s-taspri-dummy.ads, s-taspri-hpux-dce.ads,
! 	s-taspri-linux.ads, s-taspri-lynxos.ads, s-taspri-mingw.ads,
! 	s-taspri-os2.ads, s-taspri-posix.ads, s-taspri-solaris.ads,
! 	s-taspri-tru64.ads, s-taspri-vms.ads, s-taspri-vxworks.ads,
! 	s-tfsetr-default.adb, s-tfsetr-vxworks.adb, s-tpopde-vms.adb,
! 	s-tpopde-vms.ads, s-tpopsp-lynxos.adb, s-tpopsp-posix.adb,
! 	s-tpopsp-posix-foreign.adb, s-tpopsp-solaris.adb, s-tpopsp-vxworks.adb,
! 	s-traceb-hpux.adb, s-traceb-mastop.adb, s-traces-default.adb,
! 	s-traent-vms.adb, s-traent-vms.ads, s-trafor-default.adb,
! 	s-trafor-default.ads, s-tratas-default.adb, s-vaflop-vms.adb,
! 	s-vxwork-alpha.ads, s-vxwork-m68k.ads, s-vxwork-mips.ads,
! 	s-vxwork-ppc.ads, s-vxwork-sparcv9.ads, s-vxwork-xscale.ads,
! 	symbols-vms.adb, system-aix.ads, system-freebsd-x86.ads,
! 	system-hpux.ads, system-interix.ads, system-irix-n32.ads,
! 	system-irix-o32.ads, system-linux-x86_64.ads,
! 	system-linux-x86.ads, system-lynxos-ppc.ads, system-lynxos-x86.ads,
! 	system-mingw.ads, system-os2.ads, system-solaris-sparc.ads,
! 	system-solaris-sparcv9.ads, system-solaris-x86.ads, system-tru64.ads,
! 	system-unixware.ads, system-vms.ads, system-vms-zcx.ads,
! 	system-vxworks-alpha.ads, system-vxworks-m68k.ads,
! 	system-vxworks-mips.ads, system-vxworks-ppc.ads,
! 	system-vxworks-sparcv9.ads, system-vxworks-xscale.ads: Replace files
! 	above.
! 
! 2004-05-13  Zack Weinberg  <zack@codesourcery.com>
! 
! 	* trans.c (gnat_stabilize_reference_1): Remove case 'b'.
! 
! 2004-05-13  Diego Novillo  <dnovillo@redhat.com>
! 
! 	Merge from tree-ssa-20020619-branch.
! 
! 	* config-lang.in (boot_language, build_by_default): Set
! 	to no.
! 	* utils.c (unchecked_convert): Use OEP_ONLY_CONST.
! 	(max_size): Add static chain op for call_expr.
! 
! 2004-05-12  Richard Sandiford  <rsandifo@redhat.com>
! 
! 	PR target/15331
! 	* 5gmastop.adb (Roff): Choose between '4' and '0', not '4' and ' '.
! 
! 2004-05-11  Roger Sayle  <roger@eyesopen.com>
! 
! 	* utils.c (max_size): Use MIN_EXPR to find the minimum value of a
! 	COND_EXPR.
! 
! 2004-05-10  Doug Rupp  <rupp@gnat.com>
! 
! 	* 5qsystem.ads: Remove Short_Address subtype declaration. Moved to
! 	system.aux_dec.
! 
! 	* s-auxdec.ads: Add Short_Address subtype (moved here from System).
! 
! 	* Makefile.in: [VMS]: Add translation for 5qauxdec.ads.
! 
! 	* init.c: [VMS] Macroize LIB$ calls for IA64 and Alpha.
! 	Fixes undefined symbols in IA64 gnatlib.
! 
! 	* 5vinmaop.adb: Reference s-auxdec for Short_Address.
! 
! 	* 5xsystem.ads, 5vsystem.ads: Back out last change (addition of subtype
! 	Short_Address). This will be moved to system.auxdec.
! 
! 2004-05-10  Thomas Quinot  <quinot@act-europe.fr>
! 
! 	* sem_util.adb: Replace test for presence of a node that is always
! 	present with a call to Discard_Node.
! 
! 	* sem_ch10.adb (Analyze_Compilation_Unit): Remove superfluous call to
! 	Analyze on the library unit node after generation of distribution stub
! 	constructs.  The call was a no-op because Unit_Node has already been
! 	Analyzed, and the tree fragments for the distribution stubs are
! 	analyzed as they are inserted in Exp_Dist.
! 	Update comment regarding to distribution stubs to reflect that we
! 	do not generate stub in separate files anymore.
! 
! 	* einfo.ads: Clarify the fact that a tagged private type has the
! 	E_Record_Type_With_Private Ekind.
! 
! 	* erroutc.adb: Minor reformatting
! 
! 	* erroutc.ads (Max_Msg_Length): Increase to cover possible larger
! 	values if line length is increased using -gnatyM (noticed during code
! 	reading).
! 
! 	* eval_fat.adb: Minor reformatting
! 	Put spaces around exponentiation operator
! 
! 2004-05-10  Ed Schonberg  <schonberg@gnat.com>
! 
! 	PR ada/15005
! 	* sem_util.adb (Is_Dependent_Component_Of_Mutable_Object): If prefix
! 	has been rewritten as an explicit dereference, retrieve type of
! 	original node to check for possibly unconstrained record type.
! 
! 2004-05-10  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* exp_ch7.adb (Check_Visibly_Controlled): If given operation is not
! 	overriding, use the operation of the parent unconditionally.
! 
! 	* sem_ch4.adb (Remove_Address_Interpretations): Remove address
! 	operation when either operand is a literal, to avoid further
! 	ambiguities.
! 
! 	* sem_ch6.adb (New_Overloaded_Entity): If new entity is inherited and
! 	overridden by a previous explicit declaration, mark the previous entity
! 	as overriding.
! 
! 	* sem_disp.adb (Check_Dispatching_Operation): New predicate
! 	Is_Visibly_Controlled, to determine whether a declaration of a
! 	primitive control operation for a derived type overrides an inherited
! 	one. Add warning if the explicit declaration does not override.
! 
! 2004-05-10  Vincent Celier  <celier@gnat.com>
! 
! 	* gnatls.adb (Gnatls): Initialize Snames, to avoid assertion error in
! 	some cases when the sources are no longer present.
! 
! 	* make.adb (Collect_Arguments): Fail if an external source, not part
! 	of any project need to be compiled, when switch -x has not been
! 	specified.
! 
! 	* makeusg.adb: Document new switch -x
! 
! 	* opt.ads (External_Unit_Compilation_Allowed): New Boolean flag,
! 	defaulted to False.
! 
! 	* switch-m.adb (Scan_Make_Switches): New switch -x
! 
! 	* vms_data.ads: Add VMS qualifier /NON_PROJECT_UNIT_COMPILATION for
! 	gnatmake switch -x.
! 
! 	* gnat_ugn.texi: Document new gnatmake switch -x
! 
! 2004-05-10  Eric Botcazou  <ebotcazou@act-europe.fr>
! 
! 	* misc.c (gnat_init_options): Set flag_zero_initialized_in_bss to 0.
! 
! 	* utils.c (create_var_decl): Do not modify the DECL_COMMON flag.
! 	(process_attributes): Likewise.
! 
! 2004-05-10  Joel Brobecker  <brobecker@gnat.com>
! 
! 	* s-inmaop.ads: Fix spelling mistake in one of the comments.
! 
! 2004-05-10  Robert Dewar  <dewar@gnat.com>
! 
! 	* gnat_ugn.texi: Document that for config pragma files, the maximum
! 	line length is always 32767.
! 
! 	* gnat_rm.texi: For pragma Eliminate, note that concatenation of string
! 	literals is now allowed.
! 
! 	* gnat-style.texi: Remove statement about splitting long lines before
! 	an operator rather than after, since we do not follow this rule at all.
! 	Clarify rule (really lack of rule) for spaces around exponentiation
! 
! 	* sem_elim.adb: Allow concatenation of string literals as well as a
! 	single string literal for pragma arguments.
! 
! 	* sem_prag.ads, sem_prag.adb: (Is_Config_Static_String): New function
! 
! 	* a-textio.adb (Terminate_Line): Do not add line feed if nothing
! 	written for append case.
! 
! 	* frontend.adb: Changes to avoid checking max line length in config
! 	pragma files.
! 
! 	* g-os_lib.ads: Minor reformatting
! 
! 	* mlib-utl.adb: Do not define Max_Line_Length locally (definition was
! 	wrong in any case. Instead use standard value. Noticed during code
! 	reading.
! 
! 	* opt.ads (Max_Line_Length): New field, used to implement removal of
! 	limitation on length of lines when scanning config pragma files.
! 
! 	* osint.ads, prj-dect.adb, prj-strt.adb, prj-tree.adb,
! 	makeutl.ads, makeutl.adb: Minor reformatting
! 
! 	* scn.adb: Do not check line length while scanning config pragma files
! 	Do not check line length while scanning out license information
! 
! 	* scng.adb: Changes to avoid line length checks while parsing config
! 	pragma files.
! 
! 2004-05-10  GNAT Script  <nobody@gnat.com>
! 
! 	* Make-lang.in: Makefile automatically updated
! 
! 2004-05-05  Arnaud Charlet  <charlet@act-europe.fr>
! 
! 	* osint.adb (Find_Program_Name): Fix handling of VMS version
! 	number.
! 
! 2004-05-05  Emmanuel Briot  <briot@act-europe.fr>
! 
! 	* g-os_lib.ads (Invalid_Time): New constant
! 
! 	* adaint.h, adaint.c (__gnat_file_time_name, __gnat_file_time_fd): Now
! 	return OS_Time instead of time_t to match what is imported by Ada.
! 	Now return -1 if the file doesn't exist, instead of a random value
! 
! 2004-05-05  Robert Dewar  <dewar@gnat.com>
! 
! 	* usage.adb: Add line for -gnatR?s switch
! 
! 	* sem_ch13.adb, exp_ch2.adb: Minor reformatting
! 
! 	* g-regpat.ads, g-regpat.adb: Add documentation on handling of Size
! 	and for Match (Data_First, Data_last)
! 
! 	* lib-writ.adb (Write_With_Lines): Ensure that correct index number is
! 	written when we are dealing with multi-unit files.
! 
! 2004-05-05  Jerome Guitton  <guitton@act-europe.fr>
! 
! 	* Makefile.in: Remove unused targets and variables.
! 
! 2004-05-05  Vincent Celier  <celier@gnat.com>
! 
! 	* switch-m.adb: New gnatmake switch -eI
! 
! 	* vms_data.ads: Add VMS equivalents of new gnatclean swith -innn and
! 	of new gnatmake switch -eInnn.
! 
! 	* makegpr.adb: Take into account new parameters Index and Src_Index in
! 	Prj.Util.
! 
! 	* clean.adb: Implement support for multi-unit sources, including new
! 	switch -i.
! 
! 	* gnatcmd.adb (GNATCmd): Call Prj.Util.Value_Of with new parameter
! 	Src_Index.
! 
! 	* make.ads, make.adb (Insert_Q): New parameter Index, defaulted to 0
! 	(Extract_From_Q): New out parameter Index
! 	(Mark, Is_Marked): Subprograms moved to Makeutl
! 	(Switches_Of): New parameter Source_Index
! 	(Add_Switch): New parameter Index
! 	(Check): New parameter Source_Index
! 	(Collect_Arguments): New parameter Source_Index
! 	(Collect_Arguments_And_Compile): New parameter Source_Index
! 	(Compile): New parameter Source_Index
! 	Put subprograms in alphabetical order
! 	Add support for multi-source sources, including in project files.
! 
! 	* makeutl.ads, makeutl.adb (Unit_Index_Of): New function
! 	(Mark, Is_Marked, Delete_All_Marks): New subprograms, moved from
! 	Make.
! 
! 	* makeusg.adb: New gnatmake switch -eInnn
! 
! 	* mlib-prj.adb (Build_Library): Add new parameter Src_Index to call to
! 	Prj.Util.Value_Of.
! 
! 	* opt.ads (Main_Index): New variable, defaulted to 0.
! 
! 	* osint.ads, osinte.adb (Add_File): New parameter Index
! 	(Current_Source_Index): New function
! 
! 	* prj.adb: Take into account new components Index and Src_Index
! 
! 	* prj.ads (String_Element): New component Index
! 	(Variable_Value): New component Index
! 	(Array_Element): New component Src_Index
! 
! 	* prj-attr.adb: Indicate that optional index may be specified for
! 	attributes Main, Executable, Spec, Body and some of Switches.
! 
! 	* prj-attr.ads (Attribute_Kind): New values for optional indexes
! 	(Attribute_Record): New component Optional_Index
! 
! 	* prj-com.ads (File_Name_Data): New component Index
! 
! 	* prj-dect.adb (Parse_Attribute_Declaration): Process optional index
! 
! 	* prj-env.adb (Put): Output optional index
! 
! 	* prj-makr.adb: Put indexes for multi-unit sources in SFN pragmas and
! 	attributes Spec and Body.
! 
! 	* prj-nmsc.adb: Process optional indexes
! 
! 	* prj-pp.adb: Ouput "at" for optional indexes
! 
! 	* prj-proc.adb: Take into account optional indexes
! 
! 	* prj-strt.ads, prj-strt.adb (Terms): New Boolean parameter
! 	Optional_Index. For string literal,
! 	process optional index when Optional_Index is True.
! 	(Parse_Expresion): New Boolean parameter Optional_Index
! 
! 	* prj-tree.ads, prj-tree.adb (Source_Index_Of): New function
! 	(Set_Source_Index_Of): New procedure
! 
! 	* prj-util.adb (Executable_Of, Value_Of): Take into account optional
! 	index.
! 
! 	* prj-util.ads (Executable_Of): New parameter Index
! 	(Value_Of (Name_Id, Array_Element_Id) returning Variable_Value):
! 	New parameter Src_Index, defaulted to 0.
! 
! 2004-05-05  Ed Schonberg  <schonberg@gnat.com>
! 
! 	PR ada/15257
! 	* sem_ch3.adb (Access_Definition): If this is an access parameter
! 	whose designated type is imported through a limited_with clause, do
! 	not add the enclosing subprogram to the list of private dependents of
! 	the type.
! 
! 2004-05-05  Ed Schonberg  <schonberg@gnat.com>
! 
! 	PR ada/15258
! 	* sem_ch6.adb (Base_Types_Match): True if one type is imported through
! 	a limited_with clause, and the other is its non-limited view.
! 
! 2004-05-05  Thomas Quinot  <quinot@act-europe.fr>
! 
! 	* cstand.adb (Create_Standard): Initialize Stand.Boolean_Literals.
! 
! 	* exp_attr.adb, exp_ch5.adb, exp_ch9.adb, exp_disp.adb,
! 	exp_fixd.adb, sem_attr.adb, sem_dist.adb, sem_util.adb: Use
! 	Stand.Boolean_Literals to produce references to entities
! 	Standard_False and Standard_True from compile-time computed boolean
! 	values.
! 
! 	* stand.ads (Boolean_Literals): New variable, provides the entity
! 	values for False and True, for use by the expander.
! 
! 2004-05-05  Doug Rupp  <rupp@gnat.com>
! 
! 	* 5vinmaop.adb, 5[vx]system.ads: Add Short_Address subtype
! 	5vinmaop.adb: Unchecked convert Short_Address vice Address
! 
! 	* adaint.c, raise.c: Caste CRTL function return value
! 	to avoid gcc error on 32/64 bit IVMS.
! 
! 	* Makefile.in [VMS]: Use iar archiver if host = Alpha/VMS and
! 	target = IA64/VMS.
! 
! 	* init.c[VMS]: Only call Alpha specific __gnat_error_prehandler IN_RTS.
! 
! 	* 5qsystem.ads (Address): Declare as Long_Integer
! 	(Short_Address): Declare as 32 bit subtype of Address
! 	Declare  abstract address operations to avoid gratuitous ambiguities.
! 
! 2004-05-05  Jose Ruiz  <ruiz@act-europe.fr>
! 
! 	* gnat_rm.texi: Use the new restriction Simple_Barriers (AI-249)
! 	instead of the old Boolean_Entry_Barriers.
! 	Ditto for No_Task_Attributes_Package instead of No_Task_Attributes.
! 
! 2004-05-05  GNAT Script  <nobody@gnat.com>
! 
! 	* Make-lang.in: Makefile automatically updated
! 
! 2004-05-03  Arnaud Charlet  <charlet@act-europe.fr>
! 
! 	* 50system.ads, 59system.ads, s-thread.ads: Removed, no longer used.
! 
! 2004-05-03  Olivier Hainque  <hainque@act-europe.fr>
! 
! 	PR ada/15152
! 
! 	* exp_ch2.adb (Expand_Current_Value): Leave Machine_Code Asm arguments
! 	alone. Replacing object references by literals is inappropriate in a
! 	so low level context.
! 
! 2004-05-03  Arnaud Charlet  <charlet@act-europe.fr>
! 
! 	* a-exexpr.adb: Add comments
! 
! 2004-05-03  Joel Brobecker  <brobecker@gnat.com>
! 
! 	* a-tags.adb (Tag_Table): Add Index_Check pragma Suppress. Allows us to
! 	declare the Ancestor_Tags array in Type_Specific_Data with a small size
! 	without risking a bounds check error when accessing one of its
! 	components.
! 	(Type_Specific_Data): Define Ancestor_Tags as a small array.
! 	This prevents us from hitting a limitation during the debug info
! 	generation when using stabs.
! 
! 	* a-tags.adb (Dispatch_Table): Define the Prims_Ptr component as a
! 	small array.
! 	This prevents us from hitting a limitation during the debug info
! 	generation when using stabs.
! 
! 2004-05-03  Eric Botcazou  <ebotcazou@act-europe.fr>
! 
! 	lang-specs.h: Remove -gnatz* from specs.
! 
! 2004-05-03  Vincent Celier  <celier@gnat.com>
! 
! 	* gprmake.adb, makegpr.ads, makegpr.adb: New files.
! 
! 	* Make-lang.in, Makefile.in: Add gprmake
! 
! 2004-05-03  Thomas Quinot  <quinot@act-europe.fr>
! 
! 	* sem_aggr.adb: Fix typo in comment.
! 
! 2004-05-03  Robert Dewar  <dewar@gnat.com>
! 
! 	* make.adb: Minor reformatting
! 
! 	* rtsfind.ads, rtsfind.adb: (RTU_Loaded): New function
! 
! 	* sem_attr.adb (Eval_Attribute, case Type_Class): Fix check for address
! 	so that it works when address is not a private type.
! 
! 	* sem_ch13.adb (Check_Expr_Constants, case N_Integer_Literal): Deal
! 	properly with rewritten unchecked conversions. This prevents
! 	order-of-elaboration issues that can otherwise arise.
! 	(Minimum_Size): Don't check size of access types under VMS
! 
! 	* sem_ch4.adb (Remove_Address_Interpretation): New circuit to remove
! 	interpretations of integer literals as type System.Address.
! 
! 	* sem_util.ads, sem_util.adb (Is_Descendent_Of_Address): New function
! 	(Is_Descendent_Of): New function
! 
! 2004-05-03  Jose Ruiz  <ruiz@act-europe.fr>
! 
! 	* sem_prag.adb: Boolean_Entry_Barriers is a synonym of Simple_Barriers.
! 	Max_Entry_Queue_Depth is a synonym of Max_Entry_Queue_Length.
! 	No_Dynamic_Interrupts is a synonym of No_Dynamic_Attachment.
! 
! 	* sem_res.adb: Use the new restriction Max_Entry_Queue_Length instead
! 	of the old Max_Entry_Queue_Depth.
! 
! 	* snames.adb: Boolean_Entry_Barriers is a synonym of Simple_Barriers.
! 	Max_Entry_Queue_Depth is a synonym of Max_Entry_Queue_Length
! 	No_Dynamic_Interrupts is a synonym of No_Dynamic_Attachment
! 
! 	* snames.ads: New entry for proper handling of Boolean_Entry_Barriers.
! 	New entry for proper handling of Max_Entry_Queue_Depth.
! 	New entry for proper handling of No_Dynamic_Interrupts.
! 
! 	* s-rident.ads: Adding restriction Simple_Barriers (AI-00249) that
! 	supersedes the GNAT specific restriction Boolean_Entry_Barriers.
! 	Adding restriction Max_Entry_Queue_Length (AI-00249) that supersedes
! 	the GNAT specific restriction Max_Entry_Queue_Depth.
! 	Adding restriction No_Dynamic_Attachment (AI-00249) that supersedes
! 	the GNAT specific restriction No_Dynamic_Interrupts.
! 
! 	* restrict.ads, restrict.adb: Use the new restriction Simple_Barriers
! 	instead of the old Boolean_Entry_Barriers.
! 	Use the new restriction No_Dynamic_Attachment instead of the old
! 	No_Dynamic_Interrupts.
! 
! 	* exp_ch9.adb: Check restriction Simple_Barriers (AI-00249) that
! 	supersedes the GNAT specific restriction Boolean_Entry_Barriers.
! 
! 	* gnatbind.adb: Use the new restriction Max_Entry_Queue_Length instead
! 	of the old Max_Entry_Queue_Depth.
! 
! 2004-05-03  GNAT Script  <nobody@gnat.com>
! 
! 	* Make-lang.in: Makefile automatically updated
! 
! 2004-04-29  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* checks.adb (Enable_Range_Check): If the prefix of an index component
! 	is an access to an unconstrained array, perform check unconditionally.
! 
! 2004-04-29  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 
! 	* decl.c (gnat_to_gnu_field): Also call make_packable_type if
! 	Component_Clause.
! 
! 2004-04-29  Olivier Hainque  <hainque@act-europe.fr>
! 
! 	* init.c (__gnat_install_handler, __gnat_error_handler): Remove
! 	alternate stack setting. There was no support for the tasking cases
! 	and the changes eventually caused a number of side-effect failures in
! 	the non-tasking case too.
! 
! 2004-04-29  Eric Botcazou  <ebotcazou@act-europe.fr>
! 
! 	lang-specs.h: Redirect output to /dev/null if -gnatc or -gnatz or
! 	-gnats is passed.
! 
! 2004-04-29  Vincent Celier  <celier@gnat.com>
! 
! 	* make.adb (Gnatmake): Increase max size of argument array for
! 	gnatbind for the potential addition of -F.
! 	If there are Stand-Alone Library projects, invoke gnatbind with -F to
! 	be sure that elaboration flags will be checked.
! 
! 	* switch-c.adb: Correct call to Scan_Pos for -gnateI
! 
! 2004-04-29  Thomas Quinot  <quinot@act-europe.fr>
! 
! 	* sem_warn.adb (Check_References): Move '<access-variable> may be
! 	null' warning out of under Warn_On_No_Value_Assigned.
! 
! 2004-04-29  Ed Falis  <falis@gnat.com>
! 
! 	* gnat_ugn.texi: Fixed texi error
! 
! 2004-04-29  Robert Dewar  <dewar@gnat.com>
! 
! 	* sem_ch4.adb (Remove_Abstract_Operations): Unconditionally remove
! 	abstract operations if they come from predefined files.
! 
! 	* gnat_rm.texi: Fix bad doc for pragma Elaboration_Checks (should be
! 	Dynamic, not RM).
! 
! 	* s-addope.adb: Correct obvious error in mod function
! 
! 2004-04-28  Andrew W. Reynolds  <awreynolds@mac.com>
! 
! 	* Makefile.in: Add target pairs for powerpc darwin*
! 	tasking support.
! 
! 	* a-intnam-darwin.ads, s-osinte-darwin.adb,
! 	s-osinte-darwin.ads, system-darwin-ppc.ads: New files.
! 
! 2004-04-28  Ulrich Weigand  <uweigand@de.ibm.com>
! 
! 	* Makefile.in: Add target macro definitions for s390*-linux*.
! 	* system-linux-s390.ads: New file.
! 	* system-linux-s390x.ads: New file.
! 
! 2004-04-28  Joseph S. Myers  <jsm@polyomino.org.uk>
! 
! 	* gnat_ugn.texi: Correct argument to @setfilename.
! 
! 2004-04-28  Ulrich Weigand  <uweigand@de.ibm.com>
! 
! 	* a-exexpr.adb (Unwind_Word): New data type.
! 	(Unwind_Exception): Use it as type of Private1 and Private2.
! 
! 	* raise.c (db_action_for): Fix debug printf.
! 
! 2004-04-27  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* a-wtmoio.ads: Formal type must be a modular type, not a signed
! 	integer type.
! 
! 2004-04-27  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 
! 	* decl.c (gnat_to_gnu_entity, case object): Call
! 	__builtin_update_setjmp_buf.
! 
! 	* gigi.h (update_setjmp_buf): Deleted.
! 	(ADT_update_setjmp_buf_decl, update_setjmp_buf_decl): New.
! 
! 	* misc.c: (update_setjmp_buf): Deleted.
! 
! 	* trans.c (gnat_to_gnu): Call do_pending_stack_adjust and emit_queue
! 	around block of RTL.
! 
! 	* utils.c (init_gigi_decls): Initialize update_setjmp_buf.
! 
! 2004-04-26  Thomas Quinot  <quinot@act-europe.fr>
! 
! 	* sem_dist.adb, exp_dist.adb: When constructing a RAS value for a local
! 	subprogram for which no pragma All_Calls_Remote applies, store the
! 	address of the real subprogram in the underlying record type, so local
! 	dereferences do not go through the PCS.
! 
! 2004-04-26  Robert Dewar  <dewar@gnat.com>
! 
! 	* i-c.ads: Add some type qualifications to avoid ambiguities when
! 	compiling with s-auxdec.ads and a non-private address type.
! 
! 2004-04-26  Arnaud Charlet  <charlet@act-europe.fr>
! 
! 	* Makefile.rtl: Fix error in previous check-in:
! 	Add s-addope.o to non tasking object list (rather than tasking object
! 	list).
! 
! 2004-04-26  Javier Miranda  <miranda@gnat.com>
! 
! 	* sem_aggr.adb: Fix typo in comments
! 	(Resolve_Aggr_Expr): Propagate the type to the nested aggregate.
! 	Required to check the null-exclusion attribute.
! 
! 	* sem_attr.adb (Resolve_Attribute): Check the accessibility level in
! 	case of anonymous access types in record and array components. For a
! 	component definition the level is the same of the enclosing composite
! 	type.
! 
! 	* sem_ch3.adb (Analyze_Component_Declaration): In case of components
! 	that are anonymous access types the level of accessibility depends on
! 	the enclosing type declaration. In order to have this information, set
! 	the scope of the anonymous access type to the enclosing record type
! 	declaration.
! 	(Array_Type_Declaration): In case of components that are anonymous
! 	access types the level of accessibility depends on the enclosing type
! 	declaration. In order to have this information, set the scope of the
! 	anonymous access type to the enclosing array type declaration.
! 
! 	* sem_ch3.adb (Array_Type_Declaration): Set the scope of the anonymous
! 	access type.
! 
! 	* sem_ch8.adb (Analyze_Object_Renaming): Add check to verify that
! 	renaming of anonymous access-to-constant types allowed if and only if
! 	the renamed object is access-to-constant.
! 
! 	* sem_util.adb (Type_Access_Level): In case of anonymous access types
! 	that are component_definition or discriminants of a nonlimited type,
! 	the level is the same as that of the enclosing component type.
! 
! 2004-04-26  Sergey Rybin  <rybin@act-europe.fr>
! 
! 	* sem_elim.adb: Some minor code reorganization from code reading. Fix
! 	misprint in the function name (File_Name_Match).
! 
! 2004-04-23  Laurent GUERBY <laurent@guerby.net>
! 
! 	* Makefile.in: Remove RANLIB_TEST, use -$(RANLIB) including after
! 	install.
! 
! 2004-04-23  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
! 
! 	* Make-lang.in (GNATBIND_OBJS): Add s-addope.o.
! 
! 2004-04-23  Emmanuel Briot  <briot@act-europe.fr>
! 
! 	* adaint.c (__gnat_try_lock): No longer requires that the parent
! 	directory be writable, the directory itself is enough.
! 	(gnat_is_absolute_path): Change profile, so that the call from
! 	GNAT.OS_Lib can be made more efficient.
! 
! 	* adaint.h (gnat_is_absolute_path): Change profile, so that the call
! 	from GNAT.OS_Lib can be made more efficient.
! 
! 	* g-os_lib.adb (Is_Absolute_Path): More efficient implementation, avoid
! 	one copy of the file name. Found by code reading.
! 
! 2004-04-23  Vincent Celier  <celier@gnat.com>
! 
! 	* gnat_ugn.texi: Add documentation for gnatmake switch -eL
! 	Correct documentation on gnatmake switches transmitted to the compiler
! 
! 	* ali.ads: Minor comment fix
! 
! 2004-04-23  Javier Miranda  <miranda@gnat.com>
! 
! 	* sem_ch6.adb: (Confirming Types): Code cleanup
! 
! 	* decl.c (gnat_to_gnu_entity): Give support to anonymous access to
! 	subprogram types: E_Anonymous_Access_Subprogram_Type and
! 	E_Anonymous_Access_Protected_Subprogram_Type.
! 
! 2004-04-23  Thomas Quinot  <quinot@act-europe.fr>
! 
! 	* sem_dist.adb: Add a new paramter to the RAS_Access TSS indicating
! 	whether a pragma All_Calls_Remote applies to the subprogram on which
! 	'Access is taken.
! 	No functional change is introduced by this revision; the new parameter
! 	will be used to allow calls to local RCI subprograms to be optimized
! 	to not use the PCS in the case where no pragma All_Calls_Remote applies,
! 	as is already done in the PolyORB implementation of the DSA.
! 
! 	* exp_dist.adb: Add a new paramter to the RAS_Access TSS indicating
! 	whether a pragma All_Calls_Remote applies to the subprogram on which
! 	'Access is taken.
! 	No functional change is introduced by this revision; the new parameter
! 	will be used to allow calls to local RCI subprograms to be optimized
! 	to not use the PCS in the case where no pragma All_Calls_Remote applies,
! 	as is already done in the PolyORB implementation of the DSA.
! 
! 2004-04-23  Robert Dewar  <dewar@gnat.com>
! 
! 	* Makefile.rtl: Add entry for s-addope.o in run time library list
! 	* Make-lang.in: Add entry for s-addope.o to GNAT1 objects
! 	* s-addope.ads, s-addope.adb: New files.
! 
! 	* s-carsi8.adb, s-carun8.adb, s-casi16.adb, s-casi32.adb,
! 	s-casi64.adb, s-caun16.adb, s-caun32.adb, s-caun64.adb,
! 	s-finimp.adb, s-geveop.adb, s-stoele.adb: Modifications to allow
! 	System.Address to be non-private and signed.
! 
! 	* sem_elim.adb: Minor reformatting (fairly extensive)
! 	Some minor code reorganization from code reading
! 	Add a couple of ??? comments
! 
! 2004-04-23  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 
! 	* trans.c (tree_transform, build_unit_elab): Don't call getdecls.
! 	(tree_transform, case N_If_Statement): Remove non-determinism.
! 
! 	* utils.c (begin_subprog_body): Just set DECL_CONTEXT in PARM_DECL.
! 
! 2004-04-23  Sergey Rybin  <rybin@act-europe.fr>
! 
! 	* gnat_rm.texi: Small fixes in the changes made in the 'pragma
! 	Eliminate' section.
! 
! 	* snames.ads, snames.adb: Remove Name_Homonym_Number (Homonym_Number is
! 	no longer used as a parameter name for Eliminate pragma).
! 
! 2004-04-22  Laurent GUERBY <laurent@guerby.net>
! 
! 	PR optimization/14984
! 	PR optimization/14985
! 	* trans.c (gigi): Fix non determinism leading to bootstrap
! 	comparison failures.
! 
! 2004-04-21  Pascal Obry  <obry@gnat.com>
! 
! 	* adaint.c (__gnat_portable_spawn): Quote first argument (argv[0])
! 	passed to spawnvp() to properly handle program pathname with spaces on
! 	Win32.
! 
! 2004-04-21  Emmanuel Briot  <briot@act-europe.fr>
! 
! 	* g-debpoo.adb (Print_Info): Avoid extra work if Display_Slots is False.
! 	(Allocate, Deallocate, Free_Physically): Make sure the tasks are
! 	unlocked in case of exceptions.
! 
! 2004-04-21  Joel Brobecker  <brobecker@gnat.com>
! 
! 	* gigi.h (get_target_no_dollar_in_label): Remove extern declaration.
! 	This function does not exist anymore.
! 
! 2004-04-21  Thomas Quinot  <quinot@act-europe.fr>
! 
! 	* gnatbind.adb, gnatlink.adb: Update name of imported C symbol.
! 
! 	* link.c: Move variables to the __gnat name space.
! 
! 	* Makefile.in: list link.o explicitly when needed.
! 
! 	* mlib.adb: Remove pragma Linker_Option for "link.o" from mlib.
! 
! 2004-04-21  Javier Miranda  <miranda@gnat.com>
! 
! 	* einfo.adb (Original_Access_Type): New subprogram
! 	(Set_Original_Access_Type): New subprogram
! 	(Write_Field21_Name): Write the name of the new field
! 
! 	* einfo.ads (Original_Access_Type): New field present in access to
! 	subprogram types.
! 	Addition of two new entities: E_Anonymous_Access_Subprogram_Type, and
! 	E_Anonymous_Access_Protected_Subprogram_Type.
! 
! 	* lib-xref.adb (Output_One_Ref): Give support to anonymous access to
! 	subprogram types.
! 
! 	* lib-xref.ads (Xref_Entity_Letters): Initialize values corresponding
! 	to anonymous access to subprogram types.
! 
! 	* sem_attr.adb (Resolve_Attribute): Give support to anonymous access
! 	to subprogram types.
! 
! 	* sem_ch3.adb (Access_Definition): Complete decoration of entities
! 	corresponding to anonymous access to subprogram types.
! 	(Analyze_Component_Declaration): Add new actual to the call to
! 	subprogram replace_anonymous_access_to_protected_subprogram.
! 	(Array_Type_Declaration): Add new actual to the call to subprogram
! 	replace_anonymous_access_to_protected_subprogram.
! 	(Process_Discriminants): Add new actual to the call to subprogram
! 	replace_anonymous_access_to_protected_subprogram.
! 	(Replace_Anonymous_Access_To_Protected_Subprogram): New formal.
! 
! 	* sem_ch3.ads (Replace_Anonymous_Access_To_Protected_Subprogram): New
! 	formal.
! 
! 	* sem_ch6.adb, sem_type.adb, sem_res.adb: Give support to anonymous
! 	access to subprogram types.
! 
! 	* sem_util.adb (Has_Declarations): Addition of package_specification
! 	nodes.
! 
! 2004-04-21  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* sem_prag.adb (Make_Inline): If subprogram is a renaming, propagate
! 	inlined flags to renamed entity only if in current unit.
! 
! 2004-04-21  Thomas Quinot  <quinot@act-europe.fr>
! 
! 	* s-parint.ads: Add DSA implementation marker.
! 
! 	* rtsfind.ads, rtsfind.adb, snames.ads, snames.adb, s-rpc.adb: Use the
! 	value of System.Partition_Interface.DSA_Implementation to determine
! 	what version of the distributed systems annex is available (no
! 	implementation, GLADE, or PolyORB).
! 
! 2004-04-21  Joel Brobecker  <brobecker@gnat.com>
! 
! 	* targtyps.c (get_target_no_dollar_in_label): Remove, no longer used.
! 
! 2004-04-21  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 
! 	* utils.c (convert, case CONSTRUCTOR, COMPONENT_REF): Do not make node
! 	with new type if alias sets differ.
! 	Fixes ACATS c41103b.
! 
! 2004-04-21  Vincent Celier  <celier@gnat.com>
! 
! 	* prj.ads: Remove FORTRAN as an accepted language: not tested yet.
! 	Add array Lang_Args for the language specific compiling argument
! 	switches.
! 
! 	* gnat_ugn.texi: Explain in more details when a library is rebuilt.
! 
! 2004-04-21  Sergey Rybin  <rybin@act-europe.fr>
! 
! 	* gnat_rm.texi: Update the descripton of the Eliminate pragma
! 	according to the recent changes in the format of the parameters of the
! 	pragma (replacing Homonym_Number with Source_Location).
! 
! 2004-04-19  Arnaud Charlet  <charlet@act-europe.fr>
! 
! 	* 5isystem.ads: Removed, unused.
! 
! 	* gnat_rm.texi: Redo 1.13 change.
! 
! 2004-04-19  Robert Dewar  <dewar@gnat.com>
! 
! 	* s-stoele.ads: Clean up definition of Storage_Offset (the new
! 	definition is cleaner, avoids the kludge of explicit Standard operator
! 	references, and also is consistent with a visible System.Address with
! 	no visible operations.
! 
! 	* s-geveop.adb: Add declarations to avoid assumption of visible
! 	operations on type System.Address (since these might not be available
! 	if Address is a non-private type for which the operations
! 	are made abstract).
! 
! 	* sem_eval.adb: Minor reformatting
! 
! 	* s-carsi8.ads, s-carun8.ads, s-casi16.ads, s-casi32.ads,
! 	s-casi64.ads, s-caun16.ads, s-caun32.ads, s-caun64.ads: Minor
! 	reformatting (new function spec format).
! 
! 	* s-auxdec.adb, s-carsi8.adb, s-carun8.adb, s-casi16.adb,
! 	s-casi32.adb, s-casi64.adb, s-caun16.adb, s-caun32.adb,
! 	s-caun64.adb: Add declarations to avoid assumption of visible
! 	operations on type System.Address (since these might not be available
! 	if Address is a non-private type for which the operations are made
! 	abstract).
! 
! 	* lib.ads, lib.adb (Synchronize_Serial_Number): New procedure.
! 
! 	* exp_intr.adb: Minor comment update
! 
! 	* exp_aggr.adb, exp_attr.adb, exp_ch13.adb: Minor reformatting.
! 
! 	* 5omastop.adb: Add declarations to avoid assumption of visible
! 	operations on type System.Address (since these might not be available
! 	if Address is a non-private type for which the operations
! 	are made abstract).
! 
! 2004-04-19  Vincent Celier  <celier@gnat.com>
! 
! 	* switch-m.adb: (Scan_Make_Switches): Process new switch -eL
! 
! 	* prj-pars.ads (Parse): New Boolean parameter Process_Languages,
! 	defaulted to Ada.
! 
! 	* prj-proc.adb (Process): New Boolean parameter Process_Languages,
! 	defaulted to Ada.
! 	Call Check with Process_Languages.
! 	(Check): New Boolean parameter Process_Languages. Call Recursive_Check
! 	with Process_Languages.
! 	(Recursive_Check): New Boolean parameter Process_Languages. Call
! 	Nmsc.Ada_Check or Nmsc.Other_Languages_Check according to
! 	Process_Languages.
! 
! 	* prj-proc.ads (Process): New Boolean parameter Process_Languages,
! 
! 	* prj-util.ads, prj-util.adb (Executable_Of): New Boolean
! 	parameter Ada_Main, defaulted to True.
! 	Check for Ada specific characteristics only when Ada_Main is True.
! 
! 	* opt.ads: (Follow_Links): New Boolean flag for gnatmake
! 
! 	* prj.adb: (Project_Empty): Add new Project_Data components.
! 
! 	* prj.ads: New types and tables for non Ada languages.
! 	(Project_Data): New components Languages, Impl_Suffixes,
! 	First_Other_Source, Last_Other_Source, Imported_Directories_Switches,
! 	Include_Path, Include_Data_Set.
! 
! 	* prj-env.ads, prj-env.adb: Minor reformatting
! 
! 	* prj-nmsc.ads, prj-nmsc.adb: (Other_Languages_Check): New procedure
! 	Put subprograms in alphabetical order
! 
! 	* prj-pars.adb (Parse): New Boolean parameter Process_Languages,
! 	defaulted to Ada; Call Prj.Proc.Process with Process_Languages and
! 	Opt.Follow_Links.
! 
! 	* mlib-prj.adb: Back out modification in last version, as they are
! 	incorrect.
! 	(Build_Library.Check_Libs): Remove useless pragma Warnings (Off)
! 
! 	* make.adb: (Mains): Moved to package Makeutl
! 	(Linker_Opts): Moved to package Makeutl
! 	(Is_External_Assignment): Moved to package Makeutl
! 	(Test_If_Relative_Path): Moved to package Makeutl
! 	(Gnatmake): Move sorting of linker options to function
! 	Makeutl.Linker_Options_Switches.
! 
! 	* makeutl.ads, makeutl.adb: New files.
! 
! 	* Makefile.in: Add makeutl.o to the object files for gnatmake
! 
! 	* makeusg.adb: Add line for new switch -eL.
! 
! 	* gnatls.adb (Image): New function.
! 	(Output_Unit): If in verbose mode, output the list of restrictions
! 	specified by pragmas Restrictions.
! 
! 	* 5bml-tgt.adb, 5vml-tgt.adb (Build_Dynamic_Library): Do not use
! 	Text_IO.
! 
! 	* a-calend.adb (Split): Shift the date by multiple of 56 years, if
! 	needed, to put it in the range 1970 (included) - 2026 (excluded).
! 	(Time_Of): Do not shift Unix_Min_Year (1970).
! 	Shift the date by multiple of 56 years, if needed, to put it in the
! 	range 1970 (included) - 2026 (excluded).
! 
! 	* adaint.h, adaint.c (__gnat_set_executable): New function.
! 
! 2004-04-19  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 
! 	* trans.c (tree_transform, case N_Subprogram_Body): Temporarily push
! 	and pop GC context.
! 	(tree_transform, case N_Procedure_Call): Fix typo in setting TREE_TYPE.
! 	(tree_transform, case N_Label): Don't set LABEL_STMT_FIRST_IN_EH.
! 	(tree_transform, case N_Procedure_Call_Statement): Build a tree.
! 	(tree_transform, case N_Code_Statement): Likewise.
! 	(gnat_expand_stmt, case LABEL_STMT): Don't look at
! 	LABEL_STMT_FIRST_IN_EH.
! 	(gnat_expand_stmt, case ASM_STMT): New case.
! 
! 	* utils2.c (build_unary_op): Properly set TREE_READONLY of
! 	UNCONSTRAINED_ARRAY_REF.
! 
! 	* utils.c (poplevel): Temporarily push/pop GC context around inline
! 	function expansion.
! 
! 	* decl.c (maybe_variable): Properly set TREE_READONLY of
! 	UNCONSTRAINED_ARRAY_REF.
! 	(make_packable_type): Only reference TYPE_IS_PADDING_P for RECORD_TYPE.
! 
! 	* ada-tree.def: (ASM_STMT): New.
! 
! 	* ada-tree.h: (LABEL_STMT_FIRST_IN_EH): Deleted.
! 	(ASM_STMT_TEMPLATE, ASM_STMT_OUTPUT, ASM_STMT_ORIG_OUT,
! 	ASM_STMT_INPUT): New.
! 	(ASM_STMT_CLOBBER): Likewise.
! 
! 2004-04-19  Thomas Quinot  <quinot@act-europe.fr>
! 
! 	* a-except.adb, s-parint.ads, s-parint.adb, types.ads, types.h: Use
! 	general rcheck mechanism to raise Program_Error for E.4(18), instead
! 	of a custom raiser in System.Partition_Interface.
! 	Part of general cleanup work before PolyORB integration.
! 
! 	* snames.ads, snames.adb: Add new runtime library entities and names
! 	for PolyORB DSA.
! 
! 	* sem_dist.ads, sem_dist.adb (Get_Subprogram_Id): Move from sem_dist to
! 	exp_dist.
! 	(Build_Subprogram_Id): New subprogram provided by exp_dist
! 	Code reorganisation in preparation for PolyORB integration.
! 
! 	* exp_dist.ads, exp_dist.adb (Get_Subprogram_Id): Move from sem_dist to
! 	exp_dist.
! 	(Build_Subprogram_Id): New subprogram provided by exp_dist
! 
! 	* sem_ch4.adb (Analyze_One_Call): Fix error message for mismatch in
! 	actual parameter types for call to dereference of an
! 	access-to-subprogram type.
! 
! 	* rtsfind.ads: Add new runtime library entities and names for PolyORB
! 	DSA.
! 
! 	* gnatlink.adb (Value): Remove. Use Interfaces.C.Strings.Value
! 	instead, which has the same behaviour here since we never pass it a
! 	NULL pointer.
! 
! 	* link.c (run_path_option, Solaris case): Use -Wl, as for other
! 	platforms.
! 
! 	* Makefile.in: adjust object file lists for gnatlink and gnatmake
! 	to account for new dependency upon Interfaces.C.Strings + link.o
! 	For x86 FreeBSD, use 86numaux.
! 
! 	* make.adb, gnatcmd.adb: Linker_Library_Path_Option has been moved up
! 	from Mlib.Tgt to Mlib.
! 
! 	* mlib.ads, mlib.adb (Linker_Library_Path_Option): New subprogram, now
! 	target-independent.
! 
! 	* mlib-tgt.ads, mlib-tgt.adb (Linker_Library_Path_Option): Remove
! 	target-specific versions of this subprogram, now implemented as a
! 	target-independent function in Mlib.
! 
! 	* 5aml-tgt.adb, 5bml-tgt.adb, 5gml-tgt.adb, 5hml-tgt.adb, 5lml-tgt.adb,
! 	5sml-tgt.adb, 5vml-tgt.adb, 5zml-tgt.adb, 5wml-tgt.adb
! 	(Linker_Library_Path_Option): Remove target-specific versions of this
! 	subprogram, now implemented as a target-independent function in Mlib.
! 
! 	* atree.adb: (Allocate_Initialize_Node): New subprogram.
! 	Factors out node table slots allocation.
! 	(Fix_Parents): New subprogram.
! 	Encapsulate the pattern of fixing up parent pointers for syntactic
! 	children of a rewritten node.
! 	(New_Copy_Tree): Use New_Copy to copy non-entity nodes.
! 	(Rewrite): Use New_Copy when creating saved copy of original node.
! 	(Replace): Use Copy_Node to copy nodes.
! 
! 2004-04-19  Javier Miranda  <miranda@gnat.com>
! 
! 	* sprint.adb (Sprint_Node_Actual): Give support to the new
! 	Access_To_Subprogram node available in Access_Definition nodes. In
! 	addition, give support to the AI-231 node fields: null-exclusion,
! 	all-present, constant-present.
! 
! 	* sem_util.ads, sem_util.adb: (Has_Declarations): New subprogram
! 
! 	* sinfo.ads, sinfo.adb:
! 	New field Access_To_Subprogram_Definition in Access_Definition nodes
! 
! 	* sem_ch6.adb (Process_Formals): Move here the code that creates and
! 	decorates internal subtype declaration corresponding to the
! 	null-excluding formal. This code was previously in Set_Actual_Subtypes.
! 	In addition, carry out some code cleanup on this code. In case of
! 	access to protected subprogram call
! 	Replace_Anonymous_Access_To_Protected_Subprogram.
! 	(Set_Actual_Subtypes): Code cleanup.
! 
! 	* sem_ch8.adb (Analyze_Object_Renaming): Remove un-necessary call to
! 	Find_Type in case of anonymous access renamings. Add warning in case of
! 	null-excluding attribute used in anonymous access renaming.
! 
! 	* sem_ch3.ads (Replace_Anonymous_Access_To_Protected_Subprogram): New
! 	subprogram
! 
! 	* sem_ch3.adb (Replace_Anonymous_Access_To_Protected_Subprogram): New
! 	subprogram.
! 	(Access_Definition): In case of anonymous access to subprograms call
! 	the corresponding semantic routine to decorate the node.
! 	(Access_Subprogram_Declaration): Addition of some comments indicating
! 	some code that probably should be added here. Detected by comparison
! 	with the access_definition subprogram.
! 	(Analyze_Component_Declaration): In case of access to protected
! 	subprogram call Replace_Anonymous_Access_To_Protected.
! 	(Array_Type_Declaration): In case of access to protected subprogram call
! 	Replace_Anonymous_Access_To_Protected_Subprogram.
! 	(Process_Discriminants): In case of access to protected subprogram call
! 	Replace_Anonymous_Access_To_Protected_Subprogram.
! 
! 	* par.adb (P_Access_Definition): New formal that indicates if the
! 	null-exclusion part was present.
! 	(P_Access_Type_Definition): New formal that indicates if the caller has
! 	already parsed the null-excluding part.
! 
! 	* par-ch3.adb (P_Subtype_Declaration): Code cleanup.
! 	(P_Identifier_Declarations): Code cleanup and give support to renamings
! 	of anonymous access to subprogram types.
! 	(P_Derived_Type_Def_Or_Private_Ext_Decl): Code cleanup.
! 	(P_Array_Type_Definition): Give support to AI-254.
! 	(P_Component_Items): Give support to AI-254.
! 	(P_Access_Definition): New formal that indicates if the header was
! 	already parsed by the caller.
! 	(P_Access_Type_Definition): New formal that indicates if the caller has
! 	already parsed the null-excluding part.
! 
! 	* par-ch6.adb (P_Formal_Part): Add the null-excluding parameter to the
! 	call to P_Access_Definition.
! 
! 2004-04-19  Geert Bosch  <bosch@gnat.com>
! 
! 	* checks.adb (Apply_Float_Conversion_Check): New procedure to implement
! 	the delicate semantics of floating-point to integer conversion.
! 	(Apply_Type_Conversion_Checks): Use Apply_Float_Conversion_Check.
! 
! 	* eval_fat.adb (Machine_Mantissa): Moved to spec.
! 	(Machine_Radix): New function.
! 
! 	* eval_fat.ads (Machine_Mantissa): Moved from body for use in
! 	conversion checks.
! 	(Machine_Radix): New function also for use in conversion checks.
! 
! 2004-04-19  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* par-prag.adb (Source_File_Name_Project): Fix typo in error message.
! 
! 	* exp_ch9.adb (Expand_Access_Protected_Subprogram_Type): Call analyze
! 	to decorate the access-to-protected subprogram and the equivalent type.
! 
! 	* checks.adb (Null_Exclusion_Static_Checks): Code cleanup. Give support
! 	to anonymous access to subprogram types.
! 
! 	* exp_ch4.adb (Expand_N_In): Preserve Static flag before
! 	constant-folding, for legality checks in contexts that require an RM
! 	static expression.
! 
! 	* exp_ch6.adb (Expand_N_Function_Call): If call may generate large
! 	temporary but stack checking is not enabled, increment serial number
! 	to so that symbol generation is consistent with and without stack
! 	checking.
! 
! 	* exp_util.ads, exp_util.adb (May_Generate_Large_Temp): Predicate is
! 	independent on whether stack checking is enabled, caller must check
! 	the corresponding flag.
! 
! 	* sem_ch3.adb (Constrain_Index): Index bounds given by attributes need
! 	range checks.
! 	(Build_Derived_Concurrent_Type): Inherit Is_Constrained flag from
! 	parent if it has discriminants.
! 	(Build_Derived_Private_Type): Constructed full view does
! 	not come from source.
! 	(Process_Discriminants): Default discriminants on a tagged type are
! 	legal if this is the internal completion of a private untagged
! 	derivation.
! 
! 	* sem_ch6.adb (Set_Actual_Subtypes): The generated declaration needs
! 	no constraint checks, because it corresponds to an existing object.
! 
! 	* sem_prag.adb (Process_Convention): Pragma applies
! 	only to subprograms in the same declarative part, i.e. the same unit,
! 	not the same scope.
! 
! 	* sem_res.adb (Valid_Conversion): In an instance or inlined body,
! 	ignore type mismatch on a numeric conversion if expression comes from
! 	expansion.
! 
! 2004-04-19  Sergey Rybin  <rybin@act-europe.fr>
! 
! 	* sem_elim.adb (Process_Eliminate_Pragma): Remove the processing for
! 	Homonym_Number parameter, add processing for Source_Location parameter
! 	corresponding.
! 	(Check_Eliminated): Remove the check for homonym numbers, add the check
! 	for source location traces.
! 
! 	* sem_elim.ads (Process_Eliminate_Pragma): Replace Arg_Homonym_Number
! 	with Arg_Source_Location corresponding to the changes in the format of
! 	the pragma.
! 
! 	* sem_prag.adb: (Analyze_Pragma): Changes in the processing of
! 	Eliminate pragma corresponding to the changes in the format of the
! 	pragma: Homonym_Number is replaced with Source_Location, two ways of
! 	distinguishing homonyms are mutially-exclusive.
! 
! 2004-04-19  Joel Brobecker  <brobecker@gnat.com>
! 
! 	* get_targ.ads (Get_No_Dollar_In_Label): Remove.
! 
! 	* exp_dbug.adb (Output_Homonym_Numbers_Suffix): Remove use of
! 	No_Dollar_In_Label, no longer necessary, as it is always True.
! 	(Strip_Suffixes): Likewise.
! 
! 2004-04-19  Gary Dismukes  <dismukes@gnat.com>
! 
! 	* s-stalib.ads (type Exception_Code): Use Integer'Size for exponent of
! 	modulus for compatibility with size clause on targets with 16-bit
! 	Integer.
! 
! 	* layout.adb (Discrimify): In the case of private types, set Vtyp to
! 	full type to fix type mismatches on calls to size functions for
! 	discriminant-dependent array components.
! 
! 2004-04-19  Jerome Guitton  <guitton@act-europe.fr>
! 
! 	* Makefile.in (gnatlib-zcx): New target, for building a ZCX run-time
! 	lib.
! 
! 2004-04-19  Pascal Obry  <obry@gnat.com>
! 
! 	* mdll-utl.adb (Locate): New version is idempotent.
! 
! 2004-04-17  Laurent Guerby <laurent@guerby.net>
! 
! 	PR ada/14988 (partial)
! 	* impunit.adb: Fix typo.
! 
! 2004-04-14  Nathanael Nerode  <neroden@gcc.gnu.org>
! 
! 	* Make-lang.in: Remove obsolete rts-none, rts-cert, install-rts-none,
! 	and install-rts-cert targets.  Remove all gnatlib and gnattools
! 	targets and all other rts-* targets (moved to libada).  Remove (now)
! 	unused Make variables CHMOD, CHMOD_AX_FLAGS, shext, THREAD_KIND,
! 	TRACE, GNATLIBFLAGS, GNATLIBCFLAGS.
! 
! 2004-04-08  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 
! 	* trans.c (tree_transform): Shortcut returning error_mark_node for
! 	statements in annotate_only_mode.
! 	(tree_transform, case N_Label, case N_Return_Statement,
! 	N_Goto_Statement): Make statement tree instead of generating code.
! 	(tree_transform, case N_Assignment_Statement): No longer check
! 	type_annotate_only.
! 	(gnat_expand_stmt, case GOTO_STMT, case LABEL_STMT, case
! 	RETURN_STMT): New.
! 	(first_nondeleted_insn, build_block_stmt, make_expr_stmt_from_rtl):
! 	New fcns.
! 	(gnat_to_gnu): Collect any RTL generated and deal with it.
! 	(tree_transform, case N_And_Then): Refine when have non-null RTL_EXPR.
! 	(tree_transform case N_If_Statement): Rewrite to make IF_STMT.
! 	(gnat_expand_stmt, case BLOCK_STMT, IF_STMT): New cases.
! 
! 	* ada-tree.def (GOTO_STMT, LABEL_STMT, RETURN_STMT): New tree nodes.
! 
! 	* ada-tree.def (EXPR_STMT): Fix typo in name.
! 	(BLOCK_STMT, IF_STMT): New nodes.
! 
! 	* ada-tree.h (GOTO_STMT_LABEL, LABEL_STMT_LABEL,
! 	LABEL_STMT_FIRST_IN_EH): New macros.
! 	(RETURN_STMT_EXPR): Likewise.
! 
! 	* ada-tree.h: (BLOCK_STMT_LIST, IF_STMT_COND, IF_STMT_TRUE,
! 	IF_STMT_ELSEIF, IF_STMT_ELSE): New macros.
! 
! 2004-04-08  Thomas Quinot  <quinot@act-europe.fr>
! 
! 	* atree.ads: Correct documentation on extended nodes.
! 
! 	* link.c: Set run_path_option for FreeBSD.
! 
! 2004-04-08  Vincent Celier  <celier@gnat.com>
! 
! 	* mlib-prj.adb (Build_Library.Check_Libs): On OpenVMS, if dec.ali is
! 	one of the ALI file, do not link with DEC lib.
! 
! 	* par.adb Remove the last two characters ("%s" or "%b") when checking
! 	if a language defined unit may be recompiled.
! 
! 2004-04-08  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* sem_ch4.adb (Remove_Abstract_Operations): Improve error message when
! 	removal of abstract operation leaves no possible interpretation for
! 	expression.
! 
! 	* sem_eval.adb (Eval_Qualified_Expression): Use
! 	Set_Raises_Constraint_Error on node when needed, so that it does not
! 	get optimized away by subsequent optimizations.
! 
! 	* sem_res.adb (Resolve_Intrinsic_Operator): Save interpretations of
! 	operands even when they are not wrapped in a type conversion.
! 
! 2004-04-08  Olivier Hainque  <hainque@act-europe.fr>
! 
! 	* sem_prag.adb (Set_Exported): Warn about making static as result of
! 	export only when the export is coming from source. This may be not
! 	be true e.g. on VMS where we expand export pragmas for exception codes
! 	together with imported or exported exceptions, and we don't want the
! 	user to be warned about something he didn't write.
! 
! 2004-04-08  Thomas Quinot  <quinot@act-europe.fr>
! 
! 	* sem_util.adb (Note_Possible_Modification): Reorganize to remove code
! 	duplication between normal entities and those declared as renamings.
! 	No functional change.
! 
! 	* s-fileio.ads (Form): Remove pragma Inline, as we cannot currently
! 	inline functions returning an unconstrained result.
! 
! 2004-04-08  Eric Botcazou  <ebotcazou@act-europe.fr>
! 
! 	* utils.c (type_for_mode): Handle BLKmode and VOIDmode properly, to
! 	conform to what other front-ends do.
! 
! 2004-04-08  Doug Rupp  <rupp@gnat.com>
! 
! 	* 5vml-tgt.adb: Use Gas instead of VMS Macro to build auto init shared
! 	libraries.
! 
! 2004-04-06  Pascal Obry  <obry@gnat.com>
! 
! 	* adaint.c (DIR_SEPARATOR): Properly set DIR_SEPARATOR on Win32.
! 
! 	* osint.adb (Program_Name): Do not look past a directory separator.
! 
! 2004-04-06  Thomas Quinot  <quinot@act-europe.fr>
! 
! 	* atree.adb: Update comment (Rewrite_Substitute_Node no longer exists).
! 
! 	* exp_ch6.adb (Rewrite_Function_Call): Clarify documentation of
! 	requirement for preserving a copy of the original assignment node.
! 
! 	* sinfo.ads: Update comment (Original_Tree -> Original_Node).
! 
! 2004-04-06  Olivier Hainque  <hainque@act-europe.fr>
! 
! 	(__gnat_initialize [Vxworks]): Enable references to the crtstuff bits
! 	when supported.
! 
! 2004-04-06  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* sem_ch4.adb (Remove_Abstract_Operations): Extend previous changes to
! 	operator calls in functional notation, and apply
! 	Universal_Interpretation to operands, not to their type.
! 
! 2004-04-06  Robert Dewar  <dewar@gnat.com>
! 
! 	* 5wdirval.adb: Minor reformatting
! 
! 2004-04-06  Ed Falis  <falis@gnat.com>
! 
! 	* gnat_rm.texi: Improve a reference to the GCC manual
! 
! 2004-04-05  Vincent Celier  <celier@gnat.com>
! 
! 	* adaint.h, adaint.c: Add function __gnat_named_file_length
! 
! 	* impunit.adb: Add Ada.Directories to the list
! 
! 	* Makefile.in: Add VMS and Windows versions of
! 	Ada.Directories.Validity package body.
! 
! 	* Makefile.rtl: Add a-direct and a-dirval
! 
! 	* mlib-tgt.ads: Minor comment update.
! 
! 	* a-dirval.ads, a-dirval.adb, 5vdirval.adb, 5wdirval.adb,
! 	a-direct.ads, a-direct.adb: New files.
! 
! 2004-04-05  Vincent Celier  <celier@gnat.com>
! 
! 	PR ada/13620
! 	* make.adb (Scan_Make_Arg): Pass any -fxxx switches to gnatlink, not
! 	just to the compiler.
! 
! 2004-04-05  Robert Dewar  <dewar@gnat.com>
! 
! 	* a-except.adb (Exception_Name_Simple): Make sure lower bound of
! 	returned string is 1.
! 
! 	* ali-util.adb: Use proper specific form for Warnings (Off, entity)
! 
! 	* eval_fat.ads: Minor reformatting
! 
! 	* g-curexc.ads: Document that lower bound of returned string values
! 	is always one.
! 
! 	* gnatlink.adb: Add ??? comment for previous change
! 	(need to document why this is VMS specific)
! 
! 	* s-stoele.ads: Minor reformatting
! 
! 	* tbuild.ads: Minor reformatting throughout (new function specs)
! 
! 	* par-ch10.adb (P_Context_Clause): Handle comma instead of semicolon
! 	after WITH.
! 
! 	* scng.adb: Minor reformatting
! 
! 2004-04-05  Geert Bosch  <bosch@gnat.com>
! 
! 	* eval_fat.adb (Machine): Remove unnecessary suppression of warning.
! 	(Leading_Part): Still perform truncation to machine number if the
! 	specified radix_digits is greater or equal to machine_mantissa.
! 
! 2004-04-05  Javier Miranda  <miranda@gnat.com>
! 
! 	* par-ch3.adb: Complete documentation of previous change
! 	Correct wrong syntax documentation of the OBJECT_DECLARATION rule
! 	(aliased must appear before constant).
! 
! 	* par-ch4.adb: Complete documentation of previous change.
! 
! 	* par-ch6.adb: Complete documentation of previous change.
! 
! 	* sinfo.ads: Fix typo in commment.
! 
! 2004-04-05  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* sem_ch3.adb (Inherit_Components): If derived type is private and has
! 	stored discriminants, use its discriminants to constrain parent type,
! 	as is done for non-private derived record types.
! 
! 	* sem_ch4.adb (Remove_Abstract_Operations): New subprogram to implement
! 	Ada 2005 AI-310: an abstract non-dispatching operation is not a
! 	candidate interpretation in an overloaded call.
! 
! 	* tbuild.adb (Unchecked_Convert_To): Preserve conversion node if
! 	expression is Null and target type is not an access type (e.g. a
! 	non-private address type).
! 
! 2004-04-05  Thomas Quinot  <quinot@act-europe.fr>
! 
! 	* exp_ch6.adb (Rewrite_Function_Call): When rewriting an assignment
! 	statement whose right-hand side is an inlined call, save a copy of the
! 	original assignment subtree to preserve enough consistency for
! 	Analyze_Assignment to proceed.
! 
! 	* sem_ch5.adb (Analyze_Assignment): Remove a costly copy of the
! 	complete assignment subtree which is now unnecessary, as the expansion
! 	of inlined call has been improved to preserve a consistent assignment
! 	tree.  Note_Possible_Modification must be called only
! 	after checks have been applied, or else unnecessary checks will
! 	be generated.
! 
! 	* sem_util.adb (Note_Possible_Modification): Reorganise the handling
! 	of explicit dereferences that do not Come_From_Source:
! 	 - be selective on cases where we must go back to the dereferenced
! 	   pointer (an assignment to an implicit dereference must not be
! 	   recorded as modifying the pointer);
! 	 - do not rely on Original_Node being present (Analyze_Assignment
! 	   calls Note_Possible_Modification on a copied tree).
! 
! 	* sem_warn.adb (Check_References): When an unset reference to a pointer
! 	that is never assigned is encountered, prefer '<pointer> may be null'
! 	warning over '<pointer> is never assigned a value'.
! 
! 2004-04-05  Ramon Fernandez  <fernandez@gnat.com>
! 
! 	* tracebak.c: Change STOP_FRAME in ppc vxworks to be compliant with
! 	the ABI.
! 
! 2004-04-05  Olivier Hainque  <hainque@act-europe.fr>
! 
! 	* 5gmastop.adb (Pop_Frame): Comment out the pragma Linker_Option for
! 	libexc. We currently don't reference anything in this library and
! 	linking it in triggers linker warnings we don't want to see.
! 
! 	* init.c: Update comments.
! 
! 2004-04-05  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 
! 	* decl.c (gnat_to_gnu_entity): Use TYPE_READONLY.
! 	* utils.c (create_field_decl): Likewise.
! 	* utils2.c (build_unary_op, gnat_build_constructor): Likewise.
! 
! 2004-04-02  Arnaud Charlet  <charlet@act-europe.fr>
! 
! 	* gnat-style.texi, gnat_rm.texi, gnat_ugn.texi: Remove RCS tags.
! 	Replace ifinfo by ifnottex, to make makeinfo --html happy again.
! 	Add info directory entry and category.
! 
! 2004-04-02  Jan Hubicka  <jh@suse.cz>
! 
! 	* utils.c: Include function.h
! 	(end_subprog_body): Clear DECL_STRUCT_FUNCTION.
! 
! 2004-04-01  Arnaud Charlet  <charlet@act-europe.fr>
  
  	PR ada/14150
  	* Make-lang.in: Clean up generation of documentation
***************
*** 46,59 ****
  	* gnat_ug_unx.texi, gnat_ug_vms.texi, gnat_ug_vxw.texi,
  	gnat_ug_wnt.texi: Removed.
  
! 2004-05-12  Richard Sandiford  <rsandifo@redhat.com>
  
! 	PR target/15331
! 	* 5gmastop.adb (Roff): Choose between '4' and '0', not '4' and ' '.
  
! 2004-04-18  Release Manager
  
! 	* GCC 3.4.0 released.
  
  2004-03-20  Joseph S. Myers  <jsm@polyomino.org.uk>
  
--- 7445,7829 ----
  	* gnat_ug_unx.texi, gnat_ug_vms.texi, gnat_ug_vxw.texi,
  	gnat_ug_wnt.texi: Removed.
  
! 2004-04-01  Arnaud Charlet  <charlet@act-europe.fr>
  
! 	* utils2.c: Update copyright notice.
  
! 2004-04-01  Robert Dewar  <dewar@gnat.com>
  
! 	* checks.adb: Minor reformatting throughout
! 	Note that prev checkin added RM reference to alignment warning
! 
! 2004-04-01  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* exp_aggr.adb (Get_Component_Val): Treat a string literal as
! 	non-static when building aggregate for bit-packed array.
! 
! 	* exp_ch4.adb (Expand_N_Slice): If a packed slice is an actual of a
! 	function call that is itself the actual in a procedure call, build
! 	temporary for it.
! 
! 	* exp_pakd.adb (Expand_Bit_Packed_Element_Set): If right-hand side is
! 	a string literal, create a temporary for it, constant folding only
! 	handles scalars here.
! 
! 2004-04-01  Vincent Celier  <celier@gnat.com>
! 
! 	* ali-util.adb (Post_Scan, Error_Msg, Error_Msg_S, Error_Msg_SC,
! 	Error_Msg_SP): New empty procedures to instantiate the Scanner.
! 	(Style, Scanner): Instantiations of Styleg and Scng to be able to scan
! 	tokens.
! 	(Accumulate_Checksum, Initialize_Checksum): Remove procedures.
! 	(Get_File_Checksum): Use the instantiated scanner to scan all the tokens
! 	and get the checksum.
! 
! 	* make.adb (Gnatmake): Do not insert into Q the Main_Source if it is
! 	already in the Q.
! 	Increase the Marking_Label at the end of the Multiple_Main_Loop,
! 	instead of at the beginning.
! 
! 	* osint.adb (Lib_File_Name): Use Multi_Unit_Index_Character, not '~'
! 	directly.
! 	(Osint package elaboration): Change Multi_Unit_Index_Character to '$' if
! 	on VMS.
! 
! 	* osint.ads (Multi_Unit_Index_Character): New Character global variable
! 
! 	* osint-c.adb (Set_Library_Info_Name): Use Multi_Unit_Index_Character,
! 	not '~' directly.
! 
! 	* par.adb: Remove test on file name to detect language defined units.
! 	Add test on unit name, after parsing, to detect language defined units
! 	that are not compiled with -gnatg (except System.RPC and its children)
! 
! 	* par-ch10.adb (P_Compilation_Unit): In multi-unit sources, scan the
! 	following units without style checking.
! 
! 	* switch-c.adb: Change -gnatC to -gnateI
! 
! 	* usage.adb: Document new switch -gnateInnn
! 
! 	* scng.adb (Accumulate_Token_Checksum): New procedure
! 	(Scan): Call Accumulate_Token_Checksum after each identifier, reserved
! 	word or literal number.
! 	(Scan.Nlit.Scan_Integer): Do not accumulate internal '_' in litteral
! 	numbers.
! 
! 2004-04-01  Thomas Quinot  <quinot@act-europe.fr>
! 
! 	* a-tasatt.adb,
! 	g-comlin.adb, sinput-c.adb, s-secsta.adb, s-tpobop.adb,
! 	switch-m.adb, 56taprop.adb, 5ginterr.adb, 5gmastop.adb,
! 	5staprop.adb, 5vinterr.adb, 5vtaprop.adb, 5vtpopde.adb,
! 	5vtpopde.adb: Add missing 'constant' keywords.
! 
! 2004-04-01  Javier Miranda  <miranda@gnat.com>
! 
! 	* par-ch4.adb: (P_Allocator): Code cleanup
! 
! 	* sem_ch3.adb (Access_Definition): Properly set the null-excluding
! 	attribute.
! 
! 	* sinfo.ads: Complete documentation of previous change
! 
! 2004-04-01  Pascal Obry  <obry@gnat.com>
! 
! 	* gnatlink.adb (Process_Binder_File): Remove duplicate linker options
! 	only on VMS.  This special handling was done because an old GNU/ld bug
! 	on Windows which has been fixed.
! 
! 2004-04-01  GNAT Script  <nobody@gnat.com>
! 
! 	* Make-lang.in: Makefile automatically updated
! 
! 2004-03-31  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 
! 	* decl.c (gnat_to_gnu_entity, make_type_from_size):
! 	Use TYPE_UNSIGNED, not TREE_UNSIGNED.
! 	* trans.c (tree_transform, convert_with_check): Likewise.
! 	* utils.c (gnat_signed_or_unsigned_type): Likewise.
! 	(build_vms_descriptor, unchecked_convert): Likewise.
! 	* utils2.c (nonbinary_modular_operation): Likewise.
! 
! 2004-03-29  Javier Miranda  <miranda@gnat.com>
! 
! 	* checks.adb (Null_Exclusion_Static_Checks): New subprogram
! 	(Install_Null_Excluding_Check): Local subprogram that determines whether
! 	an access node requires a runtime access check and if so inserts the
! 	appropriate run-time check.
! 	(Apply_Access_Check): Call Install_Null_Excluding check if required
! 	(Apply_Constraint_Check): Call Install_Null_Excluding check if required
! 
! 	* checks.ads: (Null_Exclusion_Static_Checks): New subprogram
! 
! 	* einfo.ads: Fix typo in comment
! 
! 	* exp_ch3.adb (Build_Assignment): Generate conversion to the
! 	null-excluding type to force the corresponding run-time check.
! 	(Expand_N_Object_Declaration): Generate conversion to the null-excluding
! 	type to force the corresponding run-time check.
! 
! 	* exp_ch5.adb (Expand_N_Assignment_Statement): Generate conversion to
! 	the null-excluding type to force the corresponding run-time check.
! 
! 	* exp_ch6.adb (Expand_Call): Do not generate the run-time check in
! 	case of access types unless they have the null-excluding attribute.
! 
! 	* sprint.adb (Sprint_Node_Actual): Give support to the null-exclusing
! 	part.
! 
! 	* exp_util.ads: Fix typo in comment
! 
! 	* par.adb (P_Null_Exclusion): New subprogram
! 	(P_Subtype_Indication): New formal that indicates if the null-excluding
! 	part has been scanned-out and it was present
! 
! 	* par-ch3.adb, par-ch4.adb, par-ch6.adb: Give support to AI-231
! 
! 	* sem_aggr.adb: (Check_Can_Never_Be_Null): New subprogram
! 	(Aggregate_Constraint_Checks): Generate conversion to the null-excluding
! 	type to force the corresponding run-time check
! 	(Resolve_Aggregate): Propagate the null-excluding attribute to the array
! 	components
! 	(Resolve_Array_Aggregate): Carry out some static checks
! 	(Resolve_Record_Aggregate.Get_Value): Carry out some static check
! 
! 	* sem_ch3.adb (Access_Definition): In Ada 0Y the Can_Never_Be_Null
! 	attribute must be set only if specified by means of the null-excluding
! 	part. In addition, we must also propagate the access-constant attribute
! 	if present.
! 	(Access_Subprogram_Declaration, Access_Type_Declaration,
! 	Analyze_Component_Declaration, Analyze_Object_Declaration,
! 	Array_Type_Declaration, Process_Discriminants,
! 	Analyze_Subtype_Declaration): Propagate the null-excluding attribute
! 	and carry out some static checks.
! 	(Build_Derived_Access_Type): Set the null-excluding attribute
! 	(Derived_Type_Declaration, Process_Subtype): Carry out some static
! 	checks.
! 
! 	* sem_ch4.adb (Analyze_Allocator): Carry out some static checks
! 
! 	* sem_ch5.adb (Analyze_Assignment): Carry out some static checks
! 
! 	* sem_ch6.adb (Process_Formals): Carry out some static checks.
! 	(Set_Actual_Subtypes): Generate null-excluding subtype if the
! 	null-excluding part was present; it is not required to be done here in
! 	case of anonymous access types.
! 	(Set_Formal_Mode): Ada 0Y allows anonymous access to have the null
! 	value.
! 
! 	* sem_res.adb (Resolve_Actuals): Carry out some static check
! 	(Resolve_Null): Allow null in anonymous access
! 
! 	* sinfo.adb: New subprogram Null_Exclusion_Present
! 	All_Present and Constant_Present available on access_definition nodes
! 
! 	* sinfo.ads: New flag Null_Exclusion_Present on subtype_declaration,
! 	object_declaration, derived_type_definition, component_definition,
! 	discriminant_specification, access_to_object_definition,
! 	access_function_definition, allocator, access_procedure_definition,
! 	access_definition, parameter_specification, All_Present and
! 	Constant_Present flags available on access_definition nodes.
! 
! 2004-03-29  Robert Dewar  <dewar@gnat.com>
! 
! 	* fname.adb, fname.ads, fname-sf.adb, fname-uf.adb, fname-uf.ads,
! 	gnat1drv.adb, lib.adb, lib.ads, lib-load.adb, lib-writ.adb,
! 	opt.ads, osint.adb, osint.ads, osint-c.adb, par.adb,
! 	par-ch10.adb, par-load.adb, par-prag.adb, sfn_scan.adb,
! 	sfn_scan.ads, sinput-l.adb, sinput-l.ads, switch-c.adb,
! 	sem_prag.adb: Updates to handle multiple units/file
! 
! 	* par.adb: Change test for s-rpc to s-rp for detecting rpc and children
! 
! 	* par.adb, memtrack.adb, prj-makr.adb, prj-part.adb,
! 	sem_util.adb: Minor reformatting
! 
! 	* sem_ch12.adb: Add comment for previous change
! 
! 2004-03-29  Laurent Pautet  <pautet@act-europe.fr>
! 
! 	* osint.adb (Executable_Prefix): Set Exec_Name to the current
! 	executable name when not initialized. Otherwise, use its current value.
! 
! 	* osint.ads (Exec_Name): Move Exec_Name from body to spec in order to
! 	initialize it to another executable name than the current one. This
! 	allows to configure paths for an executable name (gnatmake) different
! 	from the current one (gnatdist).
! 
! 2004-03-29  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* exp_ch6.adb (Expand_Call): A call to a function declared in the
! 	current unit cannot be inlined if it appears in the body of a withed
! 	unit, to avoid order of elaboration problems in gigi.
! 
! 	* exp_ch9.adb (Build_Protected_Sub_Specification): Generate debugging
! 	information for protected (wrapper) operation as well, to simplify gdb
! 	use.
! 
! 	* sem_ch6.adb (Analyze_Subprogram_Body): For a private operation in a
! 	protected body, indicate that the entity for the generated spec comes
! 	from source, to ensure that references are properly generated for it.
! 	(Build_Body_To_Inline): Do not inline a function that returns a
! 	controlled type.
! 
! 	* sem_prag.adb (Process_Convention): If subprogram is overloaded, only
! 	apply convention to homonyms that are declared explicitly.
! 
! 	* sem_res.adb (Make_Call_Into_Operator): If the operation is a function
! 	that renames an equality operator and the operands are overloaded,
! 	resolve them with the declared formal types, before rewriting as an
! 	operator.
! 
! 2004-03-29  GNAT Script  <nobody@gnat.com>
! 
! 	* Make-lang.in: Makefile automatically updated
! 
! 2004-03-25  Vasiliy Fofanov  <fofanov@act-europe.fr>
! 
! 	* memtrack.adb: Log realloc calls, which are treated as free followed
! 	by alloc.
! 
! 2004-03-25  Vincent Celier  <celier@gnat.com>
! 
! 	* prj-makr.adb (Process_Directories): Detect when a file contains
! 	several units. Do not include such files in the config pragmas or
! 	in the naming scheme.
! 
! 	* prj-nmsc.adb (Record_Source): New parameter Trusted_Mode.
! 	Resolve links only when not in Trusted_Mode.
! 	(Find_Sources, Recursive_Find_Dirs, Find_Source_Dirs, Locate_Directory):
! 	Do not resolve links for the display names.
! 
! 	* prj-part.adb (Parse_Single_Project, Project_Path_Name_Of): Do not
! 	resolve links when computing the display names.
! 
! 2004-03-25  Thomas Quinot  <quinot@act-europe.fr>
! 
! 	* sem_attr.adb (Check_Dereference): When the prefix of a 'Tag
! 	attribute reference does not denote a subtype, it can be any
! 	expression that has a classwide type, potentially after an implicit
! 	dereference.  In particular, the prefix can be a view conversion for
! 	a classwide type (for which Is_Object_Reference holds), but it can
! 	also be a value conversion for an access-to-classwide type. In the
! 	latter case, there is an implicit dereference, and the original node
! 	for the prefix does not verify Is_Object_Reference.
! 
! 	* sem_util.adb (Is_Dependent_Component_Of_Mutable_Object): A view
! 	conversion of a discriminant-dependent component of a mutable object
! 	is one itself.
! 
! 2004-03-25  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* freeze.adb (Freeze_Entity): When an inherited subprogram is
! 	inherited, has convention C, and has unconstrained array parameters,
! 	place the corresponding warning on the derived type declaration rather
! 	than the original subprogram.
! 
! 	* sem_ch12.adb (Instantiate_Formal_Subprogram): Set From_Default
! 	indication on renaming declaration, if formal has a box and actual
! 	is absent.
! 
! 	* sem_ch8.adb (Analyze_Subprogram_Renaming): Use From_Default flag to
! 	determine whether to generate an implicit or explicit reference to
! 	the renamed entity.
! 
! 	* sinfo.ads, sinfo.adb: New flag From_Default, to indicate that a
! 	subprogram renaming comes from a defaulted formal subprogram in an
! 	instance.
! 
! 2004-03-25  Gary Dismukes  <dismukes@gnat.com>
! 
! 	* sem_elab.adb (Check_Elab_Call): Refine loop that checks for default
! 	value expressions to ensure that calls within a component definition
! 	will be checked (since those are evaluated during the record type's
! 	elaboration).
! 
! 2004-03-25  Arnaud Charlet  <charlet@act-europe.fr>
! 
! 	* s-tpobop.adb: Code clean up:
! 	(Requeue_Call): Extract from PO_Service_Entries to remove duplicated
! 	code.
! 	(PO_Do_Or_Queue): Remove duplicated code and use Requeue_Call.
! 
! 2004-03-25  Jose Ruiz  <ruiz@act-europe.fr>
! 
! 	* Makefile.in: Clean up in the ravenscar run time.
! 
! 2004-03-23  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 
! 	* decl.c (gnat_to_gnu_entity, case E_Access_Type): Pass value
! 	of No_Strict_Aliasing to build_pointer_type_for_mode.
! 	* utils.c (update_pointer_to): Walk pointer and ref chains.
! 
! 2004-03-22  Cyrille Comar  <comar@act-europe.fr>
! 
! 	* ali.ads: Fix Comment about Dynamic_Elab.
! 
! 	* gnatls.adb (Output_Unit): Add output of many flags (Dynamic_Elab,
! 	Has_RACW, Is_Generic, etc.)
! 	(Output_Object, Gnatls): Take into account ALI files not attached to
! 	an object.
! 
! 2004-03-22  Vincent Celier  <celier@gnat.com>
! 
! 	* gprep.adb: Change all String_Access to Name_Id
! 	(Is_ASCII_Letter): new function
! 	(Double_File_Name_Buffer): New procedure
! 	(Preprocess_Infile_Name): New procedure
! 	(Process_Files): New procedure
! 	(Gnatprep): Check if output and input are existing directories.
! 	Call Process_Files to do the real job.
! 
! 2004-03-22  Robert Dewar  <dewar@gnat.com>
! 
! 	* prj-env.adb, prj-nmsc.ads, prj-proc.ads,
! 	s-stache.ads, s-stache.adb: Comment updates. Minor reformatting.
! 
! 2004-03-22  Sergey Rybin  <rybin@act-europe.fr>
! 
! 	* scn.adb (Contains): Add check for EOF, is needed for a degenerated
! 	case when the source contains only comments.
! 
! 2004-03-22  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* sem_ch10.adb (Analyze_Compilation_Unit): When generating a
! 	declaration for a child subprogram body that acts as a spec, indicate
! 	that the entity in the declaration needs debugging information.
! 
! 	* sem_ch3.adb (Complete_Private_Subtype): Do not build an underlying
! 	full view if the subtype is created for a constrained record component;
! 	gigi has enough information to construct the record, and there is no
! 	place in the tree for the declaration.
! 
! 	* sem_ch6.adb (Build_Body_To_Inline): Use an internal name without
! 	serial number for the dummy body that is built for analysis, to avoid
! 	inconsistencies in the generation of internal names when compiling
! 	with -gnatN.
! 
! 2004-03-22  Thomas Quinot  <quinot@act-europe.fr>
! 
! 	* sem_util.adb (Is_Object_Reference): A view conversion denotes an
! 	object.
! 
! 2004-03-22  GNAT Script  <nobody@gnat.com>
! 
! 	* Make-lang.in: Makefile automatically updated
! 
! 2004-03-21  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 
! 	* decl.c (gnat_to_gnu_entity): Use SUBSTITUTE_PLACEHOLDER_IN_EXPR.
! 	* trans.c (tree_transform, emit_index_check): Likewise.
! 	* utils.c (build_template): Likewise.
! 	(max_size, convert): Remove handling of WITH_RECORD_EXPR.
! 	(maybe_unconstrained_array, unchecked_convert): Likewise.
! 	* utils2.c (gnat_truthvalue_conversion, build_binary_op): Likewise.
! 	(build_unary_op): Likewise.
! 	(compare_arrays, build_allocator): Use SUBSTITUTE_PLACEHOLDER_IN_EXPR.
! 	(fill_vms_descriptor): Likewise.
! 	(build_call_alloc_dealloc): Likewise.
! 	ALIGN is unsigned.
! 	* gigi.h (build_call_alloc_dealloc): Alignment is unsigned.
  
  2004-03-20  Joseph S. Myers  <jsm@polyomino.org.uk>
  
***************
*** 62,79 ****
  	* gnat_ug_unx.texi, gnat_ug_vms.texi, gnat_ug_vxw.texi,
  	gnat_ug_wnt.texi: Regenerate.
  
! 2004-03-19  Laurent GUERBY <laurent@guerby.net>
  
! 	* sem_prag.adb (Suppress_Unsuppress_Echeck): use loop instead of 
  	aggregate, allows bootstrap from 3.3 on powerpc-darwin.
  
! 2004-03-09  Alan Modra  <amodra@bigpond.net.au>
  
  	* misc.c (default_pass_by_ref): Update INIT_CUMULATIVE_ARGS call.
  
  2004-01-30  Kelley Cook  <kcook@gcc.gnu.org>
  
! 	* Make-lang.in (doc/gnat_ug_unx.dvi): Use $(abs_docdir). 
  	(doc/gnat_ug_vms.dvi, doc/gnat_ug_unx.dvi): Likewise.
  	(doc/gnat_ug_unx.dvi, doc/gnat-style.dvi): Likewise.
  
--- 7832,9046 ----
  	* gnat_ug_unx.texi, gnat_ug_vms.texi, gnat_ug_vxw.texi,
  	gnat_ug_wnt.texi: Regenerate.
  
! 2004-03-19  Arnaud Charlet  <charlet@act-europe.fr>
  
! 	* ada-tree.h: Update copyright notice.
! 	Minor reformatting.
! 
! 2004-03-19  Olivier Hainque  <hainque@act-europe.fr>
! 
! 	* decl.c (gnat_to_gnu_entity, case E_Exception): Handle VMS exceptions
! 	as regular exception objects and not as mere integers representing the
! 	condition code.  The latter approach required some dynamics to mask off
! 	severity bits, which did not fit well into the GCC table based model.
! 	(gnat_to_gnu_entity, objects): Don't supply an external name for VMS
! 	exception data objects. We don't it and it would conflict with the other
! 	external symbol we have to generate for such exceptions.
! 
! 	* trans.c (tree_transform, case N_Exception_Handler): Remove part of
! 	the special code for VMS exceptions, since these are now represented
! 	as regular exceptions objects.
! 
! 2004-03-19 Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 
! 	* decl.c (debug_no_type_hash): Remove.
! 	(gnat_to_gnu_entity, case E_Array_Type): Don't set and clear it.
! 	* misc.c (LANG_HOOK_HASH_TYPE): Redefine.
! 
! 2004-03-19  Laurent Guerby <laurent@guerby.net>
! 
! 	* sem_prag.adb (Suppress_Unsuppress_Echeck): use loop instead of
  	aggregate, allows bootstrap from 3.3 on powerpc-darwin.
  
! 2004-03-18  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 
! 	* ada-tree.h (TYPE_LEFT_JUSTIFIED_MODULAR_P): Add checking.
! 	(TYPE_CONTAINS_TEMPLATE_P, TYPE_OBJECT_RECORD_TYPE): Likewise.
! 	(TYPE_RM_SIZE_INT): Directly use type.values.
! 	(TREE_LOOP_ID): Clean up check.
! 	* decl.c (gnat_to_gnu_entity, case E_Enumeration_Type): Use
! 	TYPE_VALUES, not TYPE_FIELDS.
! 	* trans.c (convert_with_check): Delay access of bounds of basetype
! 	until sure is numeric.
! 
! 2004-03-18  Arnaud Charlet  <charlet@act-europe.fr>
! 
! 	* 5atpopsp.adb: Remove RTEMS from list of platforms using this file.
! 
! 	Code clean up:
! 	* 5ataprop.adb, 5ftaprop.adb, 5htaprop.adb, 5itaprop.adb, 5staprop.adb,
! 	5vtaprop.adb, 5wtaprop.adb, 7staprop.adb (Finalize_TCB): Use
! 	Specific.Set instead of direct call to e.g pthread_setspecific.
! 
! 2004-03-18  Thomas Quinot  <quinot@act-europe.fr>
! 
! 	* adaint.c: Update comments.
! 
! 	* Makefile.in: set PREFIX_OBJS, SYMLIB, THREADSLIB, and
! 	GNATLIB_SHARED for FreeBSD.
! 
! 2004-03-18  Jose Ruiz  <ruiz@act-europe.fr>
! 
! 	* init.c [VxWorks]: Do not fix the stack size for the environment task.
! 	When needed (stack checking) the stack size is retrieved
! 	from the VxWorks kernel.
! 
! 	* Makefile.in: Flag -nostdinc is required when building the run time
! 	for avoiding looking for files in the base compiler.
! 	Add the VxWorks specific version of the package body for
! 	System.Stack_checking.Operations (5zstchop.adb).
! 
! 	* Make-lang.in: Add the object file for
! 	System.Stack_Checking.Operations.
! 
! 	* Makefile.rtl: Add object file for the package
! 	System.Stack_Checking.Operations.
! 
! 	* s-stchop.ads, s-stchop.adb, 5zstchop.adb: New files.
! 
! 	* s-stache.ads, s-stache.adb: Move the operations related to stack
! 	checking from this package to package System.Stack_Checking.Operations.
! 	This way, stack checking operations are only linked in the final
! 	executable when using the -fstack-check flag.
! 
! 2004-03-18  Doug Rupp  <rupp@gnat.com>
! 
! 	* Makefile.in [VMS]: Handle 64 bit specs (5qsystem.ads, 5xcrtl.ads).
! 	Reorganize ifeq's.
! 
! 	* 5qsystem.ads, 5xcrtl.ads: New files.
! 
! 2004-03-18  Vincent Celier  <celier@gnat.com>
! 
! 	* prj.adb (Reset): Reset hash table Files_Htable
! 
! 	* prj-env.adb (Source_Paths, Object_Paths): New tables.
! 	(Add_To_Source_Path, Add_To_Object_Path): New procedures, to replace
! 	the procedures Add_To_Path_File.
! 	(Set_Ada_Paths): Accumulate source and object dirs in the tables,
! 	making sure that each directory is present only once and, for object
! 	dirs, when a directory already present is added, the duplicate is
! 	removed and the directory is always put as the last in the table.
! 	Write the path files at the end of these accumulations.
! 
! 	* prj-nmsc.adb (Record_Source): Add source file name in hash table
! 	Files_Htable for all sources.
! 
! 	* prj-proc.adb (Process): Remove restrictions between not directly
! 	related extending projects.
! 
! 2004-03-18  Emmanuel Briot  <briot@act-europe.fr>
! 
! 	* prj-nmsc.ads, prj-nmsc.adb (Ada_Check): New parameter Trusted_Mode.
! 	(Find_Sources): Minor speed optimization.
! 
! 	* prj-proc.ads, prj-proc.adb (Check, Recursive_Check, Process): New
! 	parameter Trusted_Mode.
! 
! 2004-03-18  Sergey Rybin  <rybin@act-europe.fr>
! 
! 	* scn.adb (Determine_License): Take into account a degenerated case
! 	when the source contains only comments.
! 
! 2004-03-18  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* sem_warn.adb (Check_References): For a warning on a selected
! 	component that does not come from source, locate an uninitialized
! 	component of the record type to produce a more precise error message.
! 
! 2004-03-15  Jerome Guitton  <guitton@act-europe.fr>
! 
! 	* 3zsoccon.ads: Fix multicast options.
! 
! 	* s-thread.ads: Move unchecked conversion from ATSD_Access to Address
! 	in the spec.
! 
! 2004-03-15  Robert Dewar  <dewar@gnat.com>
! 
! 	* sem_prag.adb: Make sure No_Strict_Aliasing flag is set right when
! 	pragma used for a private type.
! 
! 	* lib-xref.adb (Generate_Reference): Do not generate warning if
! 	reference is in a different unit from the pragma Unreferenced.
! 
! 	* 5vtpopde.adb: Minor reformatting
! 	Fix casing of To_Task_ID
! 
! 	* sem_ch13.adb (Validate_Unchecked_Conversion): Set No_Strict_Aliasing
! 	flag if we have an unchecked conversion to an access type in the same
! 	unit.
! 
! 2004-03-15  Geert Bosch  <bosch@gnat.com>
! 
! 	* a-ngcoty.adb (Modulus): In alternate formula for large real or
! 	imaginary parts, use Double precision throughout.
! 
! 	* a-tifiio.adb (Put_Scaled): Remove remaining pragma Debug. Not only
! 	we want to be able to compile run-time with -gnata for testing, but
! 	this may also be instantiated in user code that is compiled with -gnata.
! 
! 2004-03-15  Olivier Hainque  <hainque@act-europe.fr>
! 
! 	* s-stalib.ads (Exception_Code): New type, to represent Import/Export
! 	codes. Having a separate type for this is useful to enforce consistency
! 	throughout the various run-time units.
! 	(Exception_Data): Use Exception_Code for Import_Code.
! 
! 	* s-vmextra.ads, s-vmexta.adb: Use Exception_Code instead of a mix of
! 	Natural and Integer in various places.
! 	(Register_VMS_Exception): Use Base_Code_In to compute the exception code
! 	with the severity bits masked off.
! 	(Register_VMS_Exception): Handle the additional exception data pointer
! 	argument.
! 
! 	* raise.c (_GNAT_Exception structure): Remove the handled_by_others
! 	component, now reflected by an exported accessor.
! 	(is_handled_by): New routine to compute whether the propagated
! 	occurrence matches some handler choice specification. Extracted out of
! 	get_action_description_for, and expanded to take care of the VMS
! 	specifities.
! 	(get_action_description_for): Use is_handled_by instead of an explicit
! 	complex condition to decide if the current choice at hand catches the
! 	propagated occurrence.
! 
! 	* raise.h (Exception_Code): New type for C.
! 
! 	* rtsfind.ads (RE_Id, RE_Unit_Table): Add
! 	System.Standard_Library.Exception_Code, to allow references from the
! 	pragma import/export expander.
! 
! 	* a-exexpr.adb (Is_Handled_By_Others, Language_For, Import_Code_For):
! 	New accessors to allow easy access to GNAT exception data
! 	characteristics.
! 	(GNAT_GCC_Exception record, Propagate_Exception): Get rid of the
! 	redundant Handled_By_Others component, helper for the personality
! 	routine which will now be able to call the appropriate exception data
! 	accessor instead.
! 
! 	* cstand.adb (Create_Standard): Adjust the type of the Import_Code
! 	component of Standard_Exception_Type to be the closest possible to
! 	Exception_Code in System.Standard_Library, that we cannot get at this
! 	point. Expand a ??? comment to notify that this type node should
! 	probably be rewritten later on.
! 
! 	* exp_prag.adb (Expand_Pragma_Import_Export_Exception): Adjust the
! 	registration call to include a pointer to the exception object in the
! 	arguments.
! 
! 	* init.c (__gnat_error_handler): Use Exception_Code and Base_Code_In
! 	instead of int and explicit bitmasks.
! 
! 2004-03-15  Vincent Celier  <celier@gnat.com>
! 
! 	* vms_data.ads: Add new GNAT BIND qualifier /STATIC. Makes /NOSHARED
! 	equivalent to /STATIC and /NOSTATIC equivalent to /SHARED.
! 
! 	* a-tasatt.adb (To_Access_Code): Remove this UC instantiation, no
! 	longer needed now that it is in the spec of
! 	System.Tasking.Task_Attributes.
! 
! 	* adaint.h, adaint.c: (__gnat_create_output_file): New function
! 
! 	* gnatcmd.adb: Fix bug introduced in previous rev: /= instead of =
! 
! 	* g-os_lib.ads, g-os_lib.adb (Create_Output_Text_File): New function.
! 
! 	* make.adb (Gnatmake): Do not check the executable suffix; it is being
! 	taken care of in Scan_Make_Arg.
! 	(Scan_Make_Arg): Add the executable suffix only if the argument
! 	following -o, in canonical case, does not end with the executable
! 	suffix.  When in verbose mode and executable file name does not end
! 	with executable suffix, output the executable name, in canonical case.
! 
! 	* s-tataat.ads (Access_Dummy_Wrapper): Add pragma No_Strict_Aliasing
! 	to avoid warnings when instantiating Ada.Task_Attributes.
! 	Minor reformating.
! 
! 	* mlib-prj.adb (Process_Imported_Libraries): Get the imported libraries
! 	in the correct order.
! 
! 	* prj-makr.adb (Process_Directory): No longer use GNAT.Expect, but
! 	redirect standard output and error to a file for the invocation of the
! 	compiler, then read the file.
! 
! 	* prj-nmsc.adb (Find_Sources): Use the Display_Value for each
! 	directory, instead of the Value.
! 	(Find_Source_Dirs): Remove useless code & comments.
! 
! 2004-03-15  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* exp_ch3.adb (Freeze_Record_Type): If a primitive operation of a
! 	tagged type is inherited, and the parent operation is not frozen yet,
! 	force generation of a freeze node for the inherited operation, so the
! 	corresponding dispatch entry is properly initialized.
! 	(Make_Predefined_Primitive_Specs): Check that return type is Boolean
! 	when looking for user-defined equality operation.
! 
! 	* exp_ch4.adb (Expand_Composite_Equality): Check that return type is
! 	boolean when locating primitive equality of tagged component.
! 
! 	* exp_ch5.adb (Expand_Assign_Array): If the left-hand side is a
! 	bit-aligned field and the right-hand side a string literal, introduce
! 	a temporary before expanding assignment into a loop.
! 
! 	* exp_ch9.adb (Expand_N_Task_Type_Declaration): Copy expression for
! 	priority in full, to ensure that any expanded subepxressions of it are
! 	elaborated in the scope of the init_proc.
! 
! 	* exp_prag.adb (Expand_Pragma_Import): Search for initialization call
! 	after object declaration, skipping over code that may have been
! 	generated for validity checks.
! 
! 	* sem_ch12.adb (Validate_Private_Type_Instance): If type has unknown
! 	discriminants, ignore the known discriminants of its full view, if
! 	any, to check legality.
! 
! 	* sem_ch3.adb (Complete_Private_Subtype): Do not create constrained
! 	component if type has unknown discriminants.
! 	(Analyze_Private_Extension_Declaration): Discriminant constraint is
! 	null if type has unknown discriminants.
! 
! 	* sem_ch6.adb (Analyze_Generic_Subprogram_Body): Generate reference
! 	for end label when present.
! 
! 	* s-fileio.adb (Open): When called with a C_Stream, use given name for
! 	temporary file, rather than an empty string.
! 
! 2004-03-15  Ed Falis  <falis@gnat.com>
! 
! 	* s-thread.adb: Removed, no longer used.
! 
! 2004-03-15  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 
! 	* decl.c (target.h): Now include.
! 	(gnat_to_gnu_entity, case E_Access_Type): Use mode derived from ESIZE
! 	in new build_pointer_from_mode calls for non-fat/non-thin pointer.
! 	(validate_size): For POINTER_TYPE, get smallest size permitted on
! 	machine.
! 
! 	* fe.h: Sort Einfo decls and add Set_Mechanism.
! 
! 	* Makefile.in: (LIBGNAT_SRCS): Remove types.h.
! 	(ada/decl.o): Depends on target.h.
! 
! 	* trans.c (tree_transform, N_Unchecked_Type_Conversion): Do not use
! 	FUNCTION_BOUNDARY; always use TYPE_ALIGN.
! 
! 2004-03-15  Thomas Quinot  <quinot@act-europe.fr>
! 
! 	* 5ztpopsp.adb, 56tpopsp.adb: Fix spelling of Task_ID.
! 
! 	* exp_ch4.adb (Expand_N_Indexed_Component): Do not call
! 	Insert_Dereference_Action when rewriting an implicit dereference into
! 	an explicit one, this will be taken care of during expansion of the
! 	explicit dereference.
! 	(Expand_N_Slice): Same. Always do the rewriting, even for the case
! 	of non-packed slices, since the dereference action generated by
! 	expansion of the explicit dereference is needed in any case.
! 	(Expand_N_Selected_Component): When rewriting an implicit dereference,
! 	analyze and resolve the rewritten explicit dereference so it is seen
! 	by the expander.
! 	(Insert_Dereference_Action): This procedure is now called only for the
! 	expansion of an N_Explcit_Dereference_Node. Do insert a check even for
! 	dereferences that do not come from source (including explicit
! 	dereferences resulting from rewriting implicit ones), but do not
! 	recursively insert a check for the dereference nodes contained within
! 	the check.
! 	(Insert_Dereference_Action): Clarify and correct comment.
! 
! 2004-03-08  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	PR ada/14131
! 	Move language detection to the top level.
! 	* config-lang.in: Build by default.
! 
! 2004-03-05  Robert Dewar  <dewar@gnat.com>
! 
! 	* 56taprop.adb, 5ataprop.adb: Remove unneeded unchecked conversions
! 
! 	* a-tags.adb, a-tags.ads, s-finimp.adb, s-finroo.ads,
! 	i-cpoint.ads, i-cpoint.adb, i-cstrin.adb, i-cstrin.ads,
! 	5iosinte.ads, 5sosinte.ads, 5staspri.ads, 5itaprop.adb,
! 	5staprop.adb, 5wtaprop.adb, s-tataat.ads, s-tataat.adb: Move
! 	unchecked conversion to spec to avoid warnings.
! 
! 	* s-tasini.adb, s-taskin.ads, 5atpopsp.adb: Correct spelling Task_Id
! 	to Task_ID
! 
! 	* 7stpopsp.adb: Correct casing in To_Task_ID call
! 
! 	* a-strsea.ads, a-strsea.adb: Minor reformatting
! 
! 	* einfo.ads, einfo.adb: Define new flag No_Strict_Aliasing
! 
! 	* errout.ads: Switch for VMS is now NO_STRICT_ALIASING.
! 	Adjust Max_Msg_Length to be clearly large enough.
! 
! 	* fe.h: Define In_Same_Source_Unit
! 
! 	* osint.adb: Add pragma Warnings Off to suppress warnings
! 	* g-dyntab.adb, g-table.adb, g-thread.adb: Add Warnings (Off) to kill
! 	aliasing warnings.
! 
! 	* opt.ads: Put entries in alpha order. Add entry for No_Strict_Aliasing
! 
! 	* par-prag.adb: Add dummy entry for No_Strict_Aliasing pragma
! 
! 	* sem_ch13.adb: Generate validate unchecked conversion nodes for gcc.
! 
! 	* sem_ch3.adb: Set No_Strict_Aliasing flag if config pragma set.
! 
! 	* sem_prag.adb: Implement pragma No_Strict_Aliasing.
! 
! 	* sinfo.ads: Remove obsolete comment on validate unchecked conversion
! 	node. We now do generate them for gcc back end.
! 
! 	* table.adb, sinput.adb: Add pragma Warnings Off to suppress aliasing
! 	warning.
! 
! 	* sinput-c.adb: Fix bad name in header.
! 	Add pragma Warnings Off to suppress aliasing warning.
! 
! 	* sinput-l.adb: Add pragma Warnings Off to suppress aliasing warning.
! 
! 	* snames.h, snames.ads, snames.adb: Add entry for pragma
! 	No_Strict_Aliasing.
! 
! 2004-03-05  Vincent Celier  <celier@gnat.com>
! 
! 	* prj-com.ads: Add hash table Files_Htable to check when a file name
! 	is already a source of another project.
! 
! 	* prj-nmsc.adb (Record_Source): Before recording a new source, check
! 	if its file name is not already a source of another project. Report an
! 	error if it is.
! 
! 	* gnatcmd.adb: When GNAT PRETTY is invoked with a project file and no
! 	source file name, call gnatpp with all the sources of the main project.
! 
! 	* vms_conv.adb (Initialize): GNAT PRETTY may be called with any number
! 	of file names.
! 
! 	* vms_data.ads: Correct documentation of new /OPTIMIZE keyword
! 	NO_STRICT_ALIASING. Add new qualifier for GNAT PRETTY:
! 	/RUNTIME_SYSTEM=, converted to --RTS=
! 	/NOTABS, converted to -notabs
! 
! 2004-03-05  Pascal Obry  <obry@gnat.com>
! 
! 	* make.adb: Minor reformatting.
! 
! 2004-03-05  Ed Schonberg  <schonberg@gnat.com>
! 
! 	Part of implemention of AI-262.
! 	* par-ch10.adb (P_Context_Clause): Recognize private with_clauses.
! 
! 	* sem_ch10.ads, sem_ch10.adb: (Install_Private_With_Clauses): New
! 	procedure.
! 
! 	* sem_ch3.adb (Analyze_Component_Declaration): Improve error message
! 	when component type is a partially constrained class-wide subtype.
! 	(Constrain_Discriminated_Type): If parent type has unknown
! 	discriminants, a constraint is illegal, even if full view has
! 	discriminants.
! 	(Build_Derived_Record_Type): Inherit discriminants when deriving a type
! 	with unknown discriminants whose full view is a discriminated record.
! 
! 	* sem_ch7.adb (Preserve_Full_Attributes): Preserve Has_Discriminants
! 	flag, to handle properly derivations of tagged types with unknown
! 	discriminants.
! 	(Analyze_Package_Spec, Analyze_Package_Body): Install
! 	Private_With_Clauses before analyzing private part or body.
! 
! 	* einfo.ads: Indicate that both Has_Unknown_Discriminants and
! 	Has_Discriminants can be true for a given type (documentation).
! 
! 2004-03-05  Arnaud Charlet  <charlet@act-europe.fr>
! 
! 	* s-restri.ads: Fix license (GPL->GMGPL).
! 
! 	* s-tassta.adb: Minor reformatting.
! 
! 	* s-tasren.adb: Replace manual handling of Self_Id.ATC_Nesting_Level
! 	by calls to Exit_One_ATC_Level, since additional clean up is performed
! 	by this function.
! 
! 	* s-tpobop.adb: Replace manual handling of Self_Id.ATC_Nesting_Level
! 	by calls to Exit_One_ATC_Level, since additional clean up is performed
! 	by this function.
! 
! 2004-03-05  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 
! 	* trans.c: Reflect GCC changes to fix bootstrap problem.
! 	Add warning for suspicious aliasing unchecked conversion.
! 
! 2004-03-05  GNAT Script  <nobody@gnat.com>
! 
! 	* Make-lang.in: Makefile automatically updated
! 
! 2004-03-02  Emmanuel Briot  <briot@act-europe.fr>
! 
! 	* ali.adb (Read_Instantiation_Instance): Do not modify the
! 	current_file_num when reading information about instantiations, since
! 	this corrupts files in later references.
! 
! 2004-03-02  Vincent Celier  <celier@gnat.com>
! 
! 	* bcheck.adb (Check_Consistency): Get the full path of an ALI file
! 	before checking if it is read-only.
! 
! 	* bld.adb (Recursive_Process): Concatenate <PROJECT>.src_dirs in front
! 	of SRC_DIRS and eliminate duplicates.
! 
! 	* gprcmd.adb: Replace command "path" with command "path_sep" to return
! 	the path separator.
! 	(Usage): Document path_sep
! 
! 	* Makefile.generic: For Ada and GNU C++ cases, link directly with the
! 	C++ compiler. No need for a script.
! 	Replace use of C*_INCLUDE_PATH env var for GCC compilers with CPATH.
! 	Do not call gprcmd to build the C*_INCLUDE_PATHs, do it with function
! 	subst.
! 
! 	* prj-env.adb (For_All_Source_Dirs): Only add source dirs in project
! 	where there are Ada sources.
! 	(Set_Ada_Paths): Only add to the include path the source dirs of project
! 	with Ada sources.
! 	(Add_To_Path): Add the Display_Values of the directories, not their
! 	Values.
! 
! 	* prj-nmsc.adb (Find_Sources): Set flag Sources_Present in the project
! 	data.
! 
! 	* prj-nmsc.adb (Add_ALI_For): Make sure that the element Display_Value
! 	is not No_Name.
! 	(Find_Source_Dirs): Set Display_Value to a non canonicalized value, only
! 	Value is canonicalized.
! 	(Language_Independent_Check): Do not copy Value to Display_Value when
! 	canonicalizing Value.
! 
! 	* prj-part.adb (Post_Parse_Context_Clause): Compare canonical cased
! 	path to find limited with cycles.
! 	(Parse_Single_Project): Use canonical cased path to find the end of a
! 	with cycle.
! 
! 2004-03-02  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* sem_ch10.adb (Optional_Subunit): Verify that unit contains a subunit
! 	and not a child unit.
! 
! 	* sinfo.ads, sinfo.adb: Rearrange flags so that Private_Present can
! 	appear in a with_clause.
! 
! 	* decl.c (gnat_to_gnu_type): If entity is a generic type, which can
! 	only happen in type_annotate mode, do not try to elaborate it.
! 
! 	* exp_util.adb (Force_Evaluation): If expression is a selected
! 	component on the left of an assignment, use a renaming rather than a
! 	temporary to remove side effects.
! 
! 	* freeze.adb (Freeze_Entity): Do not freeze a global entity within an
! 	inlined instance body, which is analyzed before the end of the
! 	enclosing scope.
! 
! 2004-03-02  Robert Dewar  <dewar@gnat.com>
! 
! 	* par-ch10.adb, par-ch3.adb, par-ch4.adb, scng.adb,
! 	sem_ch4.adb: Use new feature for substitution of keywords in VMS
! 
! 	* errout.ads, errout.adb: Implement new circuit for substitution of
! 	keywords in VMS.
! 
! 	* sem_case.adb (Analyze_Choices): Place message properly when case is
! 	a subtype reference rather than an explicit range.
! 
! 	* sem_elim.adb, s-tpobop.ads, exp_ch2.adb: Minor reformatting
! 
! 2004-03-02  Doug Rupp  <rupp@gnat.com>
! 
! 	* init.c (__gnat_initialize)[VMS]: Resignal RDB-E-STREAM_EOF.
! 
! 2004-03-02  Thomas Quinot  <quinot@act-europe.fr>
! 
! 	* s-tporft.adb: Add missing locking around call to Initialize_ATCB.
! 
! 2004-03-02  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 
! 	* utils.c (finish_record_type): Do not set DECL_NONADDRESSABLE for a
! 	BLKmode bitfield.
! 
! 2004-02-25  Robert Dewar  <dewar@gnat.com>
! 
! 	* 51osinte.ads, 52osinte.ads, 53osinte.ads, 54osinte.ads,
! 	55osinte.ads, 56osinte.ads, 5aosinte.ads, 5bosinte.ads,
! 	5cosinte.ads, 5fosinte.ads, 5gosinte.ads, 5hosinte.ads,
! 	5iosinte.ads, 5losinte.ads, 5nosinte.ads, 5oosinte.ads,
! 	5posinte.ads, 5sosinte.ads, 5tosinte.ads, 5vosinte.ads,
! 	5wosinte.ads, 5zosinte.ads: Move instances of Unchecked_Conversion to
! 	the defining instance of the type to avoid aliasing problems.
! 	Fix copyright header.  Fix bad comments in package header.
! 
! 	* exp_util.adb, prj-part.adb, prj-part.adb: Minor reformatting
! 
! 2004-02-25  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* exp_ch2.adb (Param_Entity): Handle properly formals that have been
! 	rewritten as references when aliased through an address clause.
! 
! 	* sem_ch4.adb (Try_Indirect_Call): Normalize actuals before checking
! 	whether call can be interpreted as an indirect call to the result of a
! 	parameterless function call returning an access subprogram.
! 
! 2004-02-25  Arnaud Charlet  <charlet@act-europe.fr>
! 
! 	Code clean up:
! 	* exp_ch7.adb (Make_Clean): Remove generation of calls to
! 	Unlock[_Entries], since this is now done by Service_Entries directly.
! 
! 	* exp_ch9.adb (Build_Protected_Subprogram_Body): ditto.
! 
! 	* s-tpobop.ads, s-tpobop.adb (PO_Service_Entries): New nested procedure
! 	Requeue_Call for better code readability. Change spec and update calls:
! 	PO_Service_Entries now unlock the PO on exit.
! 	(Protected_Entry_Call, Timed_Protected_Entry_Call): Update calls to
! 	PO_Service_Entries.
! 
! 	* s-tposen.ads, s-tposen.adb (Service_Entry): Now unlock the PO on exit.
! 
! 	* s-taenca.adb, s-tasren.adb: Update calls to PO_Service_Entries.
! 
! 2004-02-25  Sergey Rybin  <rybin@act-europe.fr>
! 
! 	* exp_ch9.adb (Build_Simple_Entry_Call): Prevent expanding the
! 	protected subprogram call and analyzing the result of such expanding
! 	in case when the called protected subprogram is eliminated.
! 
! 	* sem_elim.adb (Check_Eliminated): Skip blocks when comparing scope
! 	names.
! 
! 2004-02-25  Jerome Guitton  <guitton@act-europe.fr>
! 
! 	* Makefile.in: Clean ups.
! 
! 2004-02-23  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* exp_ch6.adb (Expand_N_Subprogram_Declaration): Do not create
! 	protected operations if original subprogram is flagged as eliminated.
! 	(Expand_N_Subprogram_Body): For a protected operation, create
! 	discriminals for next operation before checking whether the operation
! 	is eliminated.
! 
! 	* exp_ch9.adb (Expand_N_Protected_Body,
! 	Expand_N_Protected_Type_Declaration): Do not generate specs and bodies
! 	for internal protected operations if the original subprogram is
! 	eliminated.
! 
! 	* sem_elim.adb (Check_Eliminated): Handle properly protected operations
! 	declared in a single protected object.
! 
! 2004-02-23  Vincent Celier  <celier@gnat.com>
! 
! 	* prj-attr.adb: Make attribute Builder'Executable an associative array,
! 	case insensitive if file names are case insensitive, instead of a
! 	standard associative array.
! 
! 	* prj-attr.adb (Initialize): For 'b' associative arrays, do not set
! 	them as case insensitive on platforms where the file names are case
! 	sensitive.
! 
! 	* prj-part.adb (Parse_Single_Project): Make sure, when checking if
! 	project file has already been parsed that canonical path are compared.
! 
! 2004-02-23  Robert Dewar  <dewar@gnat.com>
! 
! 	* sinput-c.ads: Correct bad unit title in header
! 
! 	* freeze.adb: Minor reformatting
! 
! 2004-02-23  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 
! 	* trans.c (tree_transform, case N_Procedure_Call_Statement): For
! 	nonaddressable COMPONENT_REF that is removing padding that we are
! 	taking the address of, take the address of the padded record instead
! 	if item is variable size.
! 
! 2004-02-20  Robert Dewar  <dewar@gnat.com>
! 
! 	* bld.adb, exp_util.adb, gprcmd.adb: Minor reformatting
! 
! 2004-02-20  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* freeze.adb (Freeze_Record_Type): Generalize mechanism that generates
! 	itype references for the constrained designated type of a component
! 	whose base type is already frozen.
! 
! 2004-02-20  Arnaud Charlet  <charlet@act-europe.fr>
! 
! 	* init.c (__gnat_error_handler [tru64]): Rewrite previous change to
! 	avoid GCC warnings.
! 
! 2004-02-20  Sergey Rybin  <rybin@act-europe.fr>
! 
! 	* sem_ch12.adb (Analyze_Formal_Package): Create a new defining
! 	identifier for a phantom package that rewrites the formal package
! 	declaration with a box. The Add semantic decorations for the defining
! 	identifier from the original node (that represents the formal package).
! 
! 2004-02-19  Matt Kraai  <kraai@alumni.cmu.edu>
! 
! 	* Make-lang.in (ada/stamp-sdefault): Use the top level
! 	move-if-change.
! 
! 2004-02-19  Richard Henderson  <rth@redhat.com>
! 
! 	* misc.c (record_code_position): Add third build arg for RTL_EXPR.
! 
! 2004-02-18  Emmanuel Briot  <briot@act-europe.fr>
! 
! 	* ali.ads, ali.adb (First_Sdep_Entry): No longer a constant, so that
! 	Scan_ALI can be used for multiple ALI files without reinitializing
! 	between calls.
! 
! 2004-02-18  Robert Dewar  <dewar@gnat.com>
! 
! 	* debug.adb: Minor reformatting.
! 
! 2004-02-18  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
! 
! 	* decl.c (gnat_to_gnu_entity, case object): Set DECL_POINTER_ALIAS_SET
! 	to zero if there is an address clause.
! 
! 2004-02-18  Thomas Quinot  <quinot@act-europe.fr>
! 
! 	* exp_util.adb (Side_Effect_Free): Any literal is side effects free.
! 
! 2004-02-18  Gary Dismukes  <dismukes@gnat.com>
! 
! 	* layout.adb (Layout_Component_List): Revise generation of call to
! 	discriminant-checking function to pass selections of all of the type's
! 	discriminants rather than just the variant-controlling discriminant.
! 
! 2004-02-18  Olivier Hainque  <hainque@act-europe.fr>
! 
! 	* 5gmastop.adb (Pop_Frame): Do not call exc_unwind, which is bound to
! 	fail in the current setup and triggers spurious system error messages.
! 	Pretend it occurred and failed instead.
! 
! 2004-02-18  Vincent Celier  <celier@gnat.com>
! 
! 	* bld.adb: Mark FLDFLAGS as saved
! 	(Process_Declarative_Items): Add Linker'Linker_Options to FLDFLAGS when
! 	it is not the root project.  Put each directory to be
! 	extended between double quotes to prevent it to be expanded on Windows.
! 	(Recursive_Process): Reset CFLAGS/CXXFLAGS to nothing before processing
! 	the project file. Set them back to their initial values if they have not
! 	been set in the project file.
! 
! 	* gprcmd.adb: (Gprdebug, Debug): New global variables
! 	(Display_Command): New procedure
! 	(Usage): Document new command "linkopts"
! 	Call Display_Command when env var GPRDEBUG has the value "TRUE"
! 	Implement new command "linkopts"
! 	Remove quotes that may be around arguments for "extend"
! 	Always call Normalize_Pathname with arguments formatted for the platform
! 
! 	* Makefile.generic: Link C/C++ mains with $(FLDFLAGS)
! 	Change @echo to @$(display) in target clean to be able to clean silently
! 
! 	* Makefile.prolog: Save FLDFLAGS and give it an initial empty value
! 
! 	* prj-part.adb (Project_Path_Name_Of): Do not put final result in
! 	canonical case.
! 
! 	* prj-part.adb (Parse_Single_Project): Always call with From_Extended
! 	= Extending_All when current project is an extending all project.
! 
! 	* vms_conv.adb (Output_File_Expected): New Boolean global variable,
! 	set to True only for LINK command, after Unix switch -o.
! 	(Process_Arguments): Set Output_File_Expected to True for LINK command
! 	after Unix switch -o. When Output_File_Expected is True, never add an
! 	extension to a file name.
! 
! 	* 5vml-tgt.adb (Build_Dynamic_Library): Do not append "/OPTIONS" to the
! 	option file name, only to the --for-linker= switch.
! 	(Option_File_Name): If option file name do not end with ".opt", append
! 	"/OPTIONS".
! 
! 2004-02-18  GNAT Script  <nobody@gnat.com>
! 
! 	* Make-lang.in: Makefile automatically updated
! 
! 2004-02-17  Matt Kraai  <kraai@alumni.cmu.edu>
! 
! 	* Make-lang.in (stamp-sdefault): Do not depend on
! 	move-if-change.
! 
! 2004-02-12  Zack Weinberg  <zack@codesourcery.com>
! 
! 	* config-lang.in: Disable Ada by default until probe logic for
! 	a bootstrap Ada compiler can be moved to the top level configure
! 	script.
! 
! 2004-02-12  Olivier Hainque  <hainque@act-europe.fr>
! 
! 	* decl.c (components_to_record): Don't claim that the internal fields
! 	we make to hold the variant parts are semantically addressable, because
! 	they are not.
! 
! 	* exp_pakd.adb (Create_Packed_Array_Type): Rename Esiz into PASize and
! 	adjust the comment describing the modular type form when we can use it.
! 	(Install_PAT): Account for the Esiz renaming.
! 
! 	* init.c (__gnat_error_handler for alpha-tru64): Arrange to clear the
! 	sc_onstack context indication before raising the exception to which
! 	the signal is mapped. Allows better handling of later signals possibly
! 	triggered by the resumed user code if the exception is handled.
! 
! 2004-02-12  Arnaud Charlet  <charlet@act-europe.fr>
! 
! 	* 5zinit.adb: Removed, no longer used.
! 
! 2004-02-12  Robert Dewar  <dewar@gnat.com>
! 
! 	* ali.adb: Remove separating space between parameters on R line. Makes
! 	format consistent with format used by the binder for Set_Globals call.
! 
! 	* atree.ads, atree.adb: Minor reformatting (new function header format)
! 
! 	* bindgen.adb: Add Run-Time Globals documentation section containing
! 	detailed documentation of the globals passed from the binder file to
! 	the run time.
! 
! 	* gnatls.adb: Minor reformatting
! 
! 	* init.c (__gnat_set_globals): Add note pointing to documentation in
! 	bindgen.
! 
! 	* lib-writ.ads, lib-writ.adb: Remove separating space between
! 	parameters on R line.
! 	Makes format consistent with format used by the binder for Set_Globals
! 	call.
! 
! 	* osint.ads: Add 2004 to copyright notice
! 	Minor reformatting
! 
! 	* snames.ads: Correct capitalization of FIFO_Within_Priorities
! 	Noticed during code reading, documentation issue only
! 
! 	* usage.adb: Remove junk line for obsolete C switch
! 	Noticed during code reading
! 
! 2004-02-12  Vincent Celier  <celier@gnat.com>
! 
! 	* bld.adb (Process_Declarative_Items): For Source_Dirs call gprcmd
! 	extend for each directory, so that multiple /** directories are
! 	extended individually.
! 	(Recursive_Process): Set the default for LANGUAGES to ada
! 
! 	* gprcmd.adb: Define new command "ignore", to do nothing.
! 	Implement new comment "path".
! 
! 	* Makefile.generic: Suppress output when SILENT is set
! 	Make sure that when compiler for C/C++ is gcc, the correct -x switch is
! 	used, so that the correct compiler is invoked.
! 	When compiler is gcc/g++, put search path in env vars C_INCLUDE_PATH/
! 	CXX_INCLUDE_PATH, to avoid failure with too long command lines.
! 
! 2004-02-12  Jerome Guitton  <guitton@act-europe.fr>
! 
! 	* Makefile.in: Clean ups and remove obsolete targets.
! 
! 2004-02-12  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* exp_ch5.adb: Remove Possible_Unligned_Slice, in favor of the similar
! 	predicate declared in exp_util.
! 
! 	* exp_util.adb: Add comments.
! 
! 	* sem_ch10.adb (Analyze_Subunit): Remove ultimate parent unit from
! 	visibility before compiling context of the subunit.
! 
! 	* sem_res.adb (Check_Parameterless_Call): If the context expects a
! 	value but the name is a procedure, do not attempt to analyze as a call,
! 	in order to obtain more telling diagnostics.
! 
! 	* sem_util.adb (Wrong_Type): Further enhancement to diagnose missing
! 	'Access on parameterless function calls.
! 	(Normalize_Actuals): For a parameterless function call with missing
! 	actuals, defer diagnostic until resolution of enclosing call.
! 
! 	* sem_util.adb (Wrong_Type): If the context type is an access to
! 	subprogram and the expression is a procedure name, suggest a missing
! 	'attribute.
! 
! 2004-02-10  Arnaud Charlet  <charlet@act-europe.fr>,
! 	    Nathanael Nerode  <neroden@gcc.gnu.org>
! 
! 	PR ada/6637, PR ada/5911
! 	Merge with libada-branch:
! 	* config-lang.in: Build libada only when ada is built.
! 
! 2004-02-09  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* exp_ch4.adb (Expand_N_Op_Eq): When looking for the primitive equality
! 	for a tagged type, verify that both formals have the same type.
! 
! 	* exp_ch6.adb (Add_Call_By_Copy_Code): Initialize properly the
! 	temporary when the formal is an in-parameter and the actual a possibly
! 	unaligned slice.
! 
! 	* exp_ch9.adb (Expand_Entry_Barrier): Resolve barrier expression even
! 	when expansion is disabled, to ensure proper name capture with
! 	overloaded literals.  Condition can be of any boolean type, resolve
! 	accordingly.
! 
! 	* sem_ch8.adb (Analyze_Subprogram_Renaming): Emit warning if the
! 	renaming is for a formal subprogram with a default operator name, and
! 	there is a usable operator that is visible at the point of
! 	instantiation.
! 
! 2004-02-09  Robert Dewar  <dewar@gnat.com>
! 
! 	* ali.adb (Scan_Ali) Add Ignore_Errors argument. This is a major
! 	rewrite to ignore errors in ali files, intended to allow tools downward
! 	compatibility with new versions of ali files.
! 
! 	* ali.ads: Add new parameter Ignore_Errors
! 
! 	* bcheck.adb (Check_Consistent_Restrictions): Fix error of sometimes
! 	duplicating the error message giving the file with restrictions.
! 
! 	* debug.adb: Add debug flag I for gnatbind
! 
! 	* errout.adb (Set_Msg_Insertion_Node): Suppress extra quotes around
! 	operators for the case where the operator is a defining operator.
! 
! 	* exp_ch3.adb: Minor reformatting (new function spec format).
! 
! 	* exp_ch4.adb: Add comment for previous change, and make minor
! 	adjustment to loop to always check for improper loop termination.
! 	Minor reformatting throughout (new function spec format).
! 
! 	* gnatbind.adb: Implement -di debug flag for gnatbind
! 
! 	* gnatlink.adb: Call Scan_ALI with Ignore_Errors set to True
! 
! 	* gnatls.adb: Call Scan_ALI with Ignore_Errors set to True
! 
! 	* lib-load.adb: Fix bad assertion.
! 	Found by testing and code reading.
! 	Minor reformatting.
! 
! 	* lib-load.ads: Minor reformatting.
! 
! 	* lib-writ.adb: There is only one R line now.
! 
! 	* lib-writ.ads: Add documentation on making downward compatible changes
! 	to ali files so old tools work with new ali files.
! 	There is only one R line now.
! 	Add documentation on format incompatibilities (with special GPS note)
! 
! 	* namet.ads, namet.adb: (Is_Operator_Name): New procedure
! 
! 	* par-load.adb: Minor reformatting
! 
! 	* sem_ch8.adb: Fix to error message from last update
! 	Minor reformatting and restructuring of code from last update
! 
! 	* par-prag.adb, snames.adb, snames.ads, snames.h,
! 	sem_prag.adb: Implement pragma Profile.
! 
! 	* stylesw.adb: Implement -gnatyN switch to turn off all style check
! 	options.
! 
! 	* usage.adb: Add line for -gnatyN switch
! 
! 	* vms_data.ads: Add entry STYLE_CHECKS=NONE for -gnatyN
! 
! 2004-02-09  Albert Lee  <lee@gnat.com>
! 
! 	* errno.c: define _SGI_MP_SOURCE for task-safe errno on IRIX
! 
! 2004-02-09  Ed Schonberg  <schonberg@gnat.com>
! 
! 	* exp_ch3.adb (Build_Slice_Assignment): Handle properly case of null
! 	slices.
! 
! 	* exp_ch6.adb (Expand_Call): Do not inline a call when the subprogram
! 	is nested in an instance that is not frozen yet, to avoid
! 	order-of-elaboration problems in gigi.
! 
! 	* sem_attr.adb (Analyze_Attribute, case 'Access): Within an inlined
! 	body the attribute is legal.
! 
! 2004-02-09  Robert Dewar  <dewar@gnat.com>
! 
! 	* s-rident.ads: Minor comment correction
! 
! 	* targparm.adb: Remove dependence on uintp completely. There was
! 	always a bug in Make in that it called Targparm before initializing
! 	the Uint package. The old code appeared to get away with this, but
! 	the new code did not! This caused an assertion error in gnatmake.
! 
! 	* targparm.ads: Fix bad comment, restriction pragmas with parameters
! 	are indeed fully supported.
! 
! 2004-02-06  Alan Modra  <amodra@bigpond.net.au>
  
  	* misc.c (default_pass_by_ref): Update INIT_CUMULATIVE_ARGS call.
  
+ 2004-02-05  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* ada/utils.c (create_param_decl): Replace PROMOTE_PROTOTYPES
+ 	with targetm.calls.promote_prototypes.
+ 
+ 2004-02-04  Robert Dewar  <dewar@gnat.com>
+ 
+ 	* 5gtasinf.adb, 5gtasinf.ads, 5gtaprop.adb, ali.adb,
+ 	ali.ads, gprcmd.adb: Minor reformatting
+ 
+ 	* bindgen.adb: Output restrictions string for new style restrictions
+ 	handling
+ 
+ 	* impunit.adb: Add s-rident.ads (System.Rident) and
+ 	s-restri (System.Restrictions)
+ 
+ 	* lib-writ.adb: Fix bug in writing restrictions string (last few
+ 	entries wrong)
+ 
+ 	* s-restri.ads, s-restri.adb: Change name Restrictions to
+ 	Run_Time_Restrictions to avoid conflict with package name.
+ 	Add circuit to read and acquire run time restrictions.
+ 
+ 2004-02-04  Jose Ruiz  <ruiz@act-europe.fr>
+ 
+ 	* restrict.ads, restrict.adb: Use the new restriction
+ 	No_Task_Attributes_Package instead of the old No_Task_Attributes.
+ 
+ 	* sem_prag.adb: No_Task_Attributes is a synonym of
+ 	No_Task_Attributes_Package.
+ 
+ 	* snames.ads, snames.adb: New entry for proper handling of
+ 	No_Task_Attributes.
+ 
+ 	* s-rident.ads: Adding restriction No_Task_Attributes_Package
+ 	(AI-00249) that supersedes the GNAT specific restriction
+ 	No_Task_Attributes.
+ 
+ 2004-02-04  Ed Schonberg  <schonberg@gnat.com>
+ 
+ 	* sem_prag.adb:
+ 	(Analyze_Pragma, case Warnings): In an inlined body, as in an instance
+ 	 body, an identifier may be wrapped in an unchecked conversion.
+ 
+ 2004-02-04  Vincent Celier  <celier@gnat.com>
+ 
+ 	* lib-writ.ads: Comment update for the W lines
+ 
+ 	* bld.adb: (Expression): An empty string list is static
+ 
+ 	* fname-uf.adb: Minor comment update
+ 
+ 	* fname-uf.ads: (Get_File_Name): Document new parameter May_Fail
+ 
+ 	* gnatbind.adb: Initialize Cumulative_Restrictions with the
+ 	restrictions on the target.
+ 
+ 2004-02-03  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* ada/trans.c (gigi): Use gen_rtx_SYMBOL_REF instead of
+ 	gen_rtx.
+ 
+ 2004-02-02  Arnaud Charlet  <charlet@gnat.com>
+ 
+ 	* Makefile.in: Remove setting of THREADSLIB on mips o32, unneeded.
+ 
+ 2004-02-02  Vincent Celier  <celier@gnat.com>
+ 
+ 	* gprcmd.adb (Check_Args): If condition is false, print the invoked
+ 	comment before the usage.
+ 	Gprcmd: Fail when command is not recognized.
+ 	(Usage): Document command "prefix"
+ 
+ 	* g-md5.adb (Digest): Process last block.
+ 	(Update): Do not process last block. Store remaining characters and
+ 	length in Context.
+ 
+ 	* g-md5.ads (Update): Document that several call to update are
+ 	equivalent to one call with the concatenated string.
+ 	(Context): Add fields to allow new Update behaviour.
+ 
+ 	* fname-uf.ads/adb (Get_File_Name): New Boolean parameter May_Fail,
+ 	defaulted to False.
+ 	When May_Fail is True and no existing file can be found, return No_File.
+ 
+ 	* 6vcstrea.adb: Inlined functions are now wrappers to implementation
+ 	functions.
+ 
+ 	* lib-writ.adb (Write_With_Lines): When body file does not exist, use
+ 	spec file name instead on the W line.
+ 
+ 2004-02-02  Robert Dewar  <dewar@gnat.com>
+ 
+ 	* ali.adb: Read and acquire info from new format restrictions lines
+ 
+ 	* bcheck.adb: Add circuits for checking restrictions with parameters
+ 
+ 	* bindgen.adb: Output dummy restrictions data
+ 	To be changed later
+ 
+ 	* ali.ads, checks.adb, exp_aggr.adb, exp_attr.adb, exp_ch11.adb,
+ 	exp_ch3.adb, exp_ch5.adb, exp_ch6.adb, exp_ch7.adb, exp_util.adb,
+ 	freeze.adb, gnat1drv.adb, sem_attr.adb, sem_ch10.adb, sem_ch11.adb,
+ 	sem_ch12.adb, targparm.adb, targparm.ads, tbuild.adb, sem_ch2.adb,
+ 	sem_elab.adb, sem_res.adb: Minor changes for new restrictions handling.
+ 
+ 	* exp_ch9.adb (Build_Master_Entity): Cleanup the code (also suppresses
+ 	the warning message on access to possibly uninitialized variable S)
+ 	Minor changes for new restrictions handling.
+ 
+ 	* gnatbind.adb: Minor reformatting
+ 	Minor changes for new restrictions handling
+ 	Move circuit for -r processing here from bcheck (cleaner)
+ 
+ 	* gnatcmd.adb, gnatlink.adb: Minor reformatting
+ 
+ 	* lib-writ.adb: Output new format restrictions lines
+ 
+ 	* lib-writ.ads: Document new R format lines for new restrictions
+ 	handling.
+ 
+ 	* s-restri.ads/adb: New files
+ 
+ 	* Makefile.rtl: Add entry for s-restri.ads/adb
+ 
+ 	* par-ch3.adb: Fix bad error messages starting with upper case letter
+ 	Minor reformatting
+ 
+ 	* restrict.adb: Major rewrite throughout for new restrictions handling
+ 	Major point is to handle restrictions with parameters
+ 
+ 	* restrict.ads: Major changes in interface to handle restrictions with
+ 	parameters. Also generally simplifies setting of restrictions.
+ 
+ 	* snames.ads/adb: New entry for proper handling of No_Requeue
+ 
+ 	* sem_ch3.adb (Count_Tasks): New circuitry for implementing Max_Tasks
+ 	restriction counting.
+ 	Other minor changes for new restrictions handling
+ 
+ 	* sem_prag.adb: No_Requeue is a synonym for No_Requeue_Statements.
+ 	Restriction_Warnings now allows full parameter notation
+ 	Major rewrite of Restrictions for new restrictions handling
+ 
+ 2004-02-02  Javier Miranda  <miranda@gnat.com>
+ 
+ 	* par-ch3.adb (P_Identifier_Declarations): Give support to the Ada 0Y
+ 	syntax rule for object renaming declarations.
+ 	(P_Array_Type_Definition): Give support for the Ada 0Y syntax rule for
+ 	component definitions.
+ 
+ 	* sem_ch3.adb (Analyze_Component_Declaration): Give support to access
+ 	components.
+ 	(Array_Type_Declaration): Give support to access components. In addition
+ 	it was also modified to reflect the name of the object in anonymous
+ 	array types. The old code did not take into account that it is possible
+ 	to have an unconstrained anonymous array with an initial value.
+ 	(Check_Or_Process_Discriminants): Allow access discriminant in
+ 	non-limited types.
+ 	(Process_Discriminants): Allow access discriminant in non-limited types
+ 	Initialize the new Access_Definition field in N_Object_Renaming_Decl
+ 	node.  Change Ada0Y to Ada 0Y in comments
+ 
+ 	* sem_ch4.adb (Find_Equality_Types): Allow anonymous access types in
+ 	equality operators.
+ 	Change Ada0Y to Ada 0Y in comments
+ 
+ 	* sem_ch8.adb (Analyze_Object_Renaming): Give support to access
+ 	renamings Change Ada0Y to Ada 0Y in comments
+ 
+ 	* sem_type.adb (Find_Unique_Type): Give support to the equality
+ 	operators for universal access types
+ 	Change Ada0Y to Ada 0Y in comments
+ 
+ 	* sinfo.adb (Access_Definition, Set_Access_Definition): New subprograms
+ 
+ 	* sinfo.ads (N_Component_Definition): Addition of Access_Definition
+ 	field.
+ 	(N_Object_Renaming_Declaration): Addition of Access_Definition field
+ 	Change Ada0Y to Ada 0Y in comments
+ 
+ 	* sprint.adb (Sprint_Node_Actual): Give support to the new syntax for
+ 	component definition and object renaming nodes
+ 	Change Ada0Y to Ada 0Y in comments
+ 
+ 2004-02-02  Jose Ruiz  <ruiz@act-europe.fr>
+ 
+ 	* restrict.adb: Use the new restriction identifier
+ 	No_Requeue_Statements instead of the old No_Requeue for defining the
+ 	restricted profile.
+ 
+ 	* sem_ch9.adb (Analyze_Requeue): Check the new restriction
+ 	No_Requeue_Statements.
+ 
+ 	* s-rident.ads: Adding restriction No_Requeue_Statements (AI-00249)
+ 	that supersedes the GNAT specific restriction No_Requeue. The later is
+ 	kept for backward compatibility.
+ 
+ 2004-02-02  Ed Schonberg  <schonberg@gnat.com>
+ 
+ 	* lib.ads, i-cobol.ads, * s-stoele.ads, s-thread.ads, style.ads,
+ 	5staprop.adb, atree.adb, atree.ads, g-crc32.ads: Remove redundant
+ 	pragma and fix incorrect ones.
+ 
+ 	* sem_prag.adb For pragma Inline and pragma Pure_Function, emit a
+ 	warning if the pragma is redundant.
+ 
+ 2004-02-02  Thomas Quinot  <quinot@act-europe.fr>
+ 
+ 	* 5staprop.adb: Add missing 'constant' keywords.
+ 
+ 	* Makefile.in: use consistent value for SYMLIB on
+ 	platforms where libaddr2line is supported.
+ 
+ 2004-02-02  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* utils.c (end_subprog_body): Do not call rest_of_compilation if just
+ 	annotating types.
+ 
+ 2004-02-02  Olivier Hainque  <hainque@act-europe.fr>
+ 
+ 	* init.c (__gnat_install_handler): Setup an alternate stack for signal
+ 	handlers in the environment thread. This allows proper propagation of
+ 	an exception on stack overflows in this thread even when the builtin
+ 	ABI stack-checking scheme is used without support for a stack reserve
+ 	region.
+ 
+ 	* utils.c (create_field_decl): Augment the head comment about bitfield
+ 	creation, and don't account for DECL_BIT_FIELD in DECL_NONADDRESSABLE_P
+ 	here, because the former is not accurate enough at this point.
+ 	Let finish_record_type decide instead.
+ 	Don't make a bitfield if the field is to be addressable.
+ 	Always set a size for the field if the record is packed, to ensure the
+ 	checks for bitfield creation are triggered.
+ 	(finish_record_type): During last pass over the fields, clear
+ 	DECL_BIT_FIELD when possible in the !STRICT_ALIGNMENT case, as this is
+ 	not covered by the calls to layout_decl.  Adjust DECL_NONADDRESSABLE_P
+ 	from DECL_BIT_FIELD.
+ 
  2004-01-30  Kelley Cook  <kcook@gcc.gnu.org>
  
! 	* Make-lang.in (doc/gnat_ug_unx.dvi): Use $(abs_docdir).
  	(doc/gnat_ug_vms.dvi, doc/gnat_ug_unx.dvi): Likewise.
  	(doc/gnat_ug_unx.dvi, doc/gnat-style.dvi): Likewise.
  
***************
*** 92,102 ****
  	(Wakeup): Likewise.
  	(Exit_Task): Use Result.
  	(Check_No_Locks): Mark Self_ID unreferenced.
! 	
  	* 5gtasinf.adb (New_Sproc): Make Attr constant.
  	(Bound_Thread_Attributes): Make Sproc constant.
  	(New_Bound_Thread_Attributes): Likewise.
  
  2004-01-20  Kelley Cook  <kcook@gcc.gnu.org>
  
  	* Make-lang.in: Replace $(docdir) with doc.
--- 9059,9217 ----
  	(Wakeup): Likewise.
  	(Exit_Task): Use Result.
  	(Check_No_Locks): Mark Self_ID unreferenced.
! 
  	* 5gtasinf.adb (New_Sproc): Make Attr constant.
  	(Bound_Thread_Attributes): Make Sproc constant.
  	(New_Bound_Thread_Attributes): Likewise.
  
+ 2004-01-26  Ed Schonberg  <schonberg@gnat.com>
+ 
+ 	* exp_ch3.adb (Build_Slice_Assignment): New TSS procedure for
+ 	one-dimensional array an slice assignments, when component type is
+ 	controlled.
+ 
+ 	* exp_ch5.adb (Expand_Assign_Array): If array is one-dimensional,
+ 	component type is controlled, and control_actions are in effect, use
+ 	TSS procedure rather than generating inline code.
+ 
+ 	* exp_tss.ads (TSS_Slice_Assign): New TSS procedure for one-dimensional
+ 	arrays with controlled components.
+ 
+ 2004-01-26  Vincent Celier  <celier@gnat.com>
+ 
+ 	* gnatcmd.adb (GNATCmd): Add specification of argument file on the
+ 	command line for the non VMS case.
+ 
+ 	* gnatlink.adb (Process_Binder_File): When building object file, if
+ 	GNU linker is used, put all object paths between quotes, to prevent ld
+ 	error when there are unusual characters (such as '!') in the paths.
+ 
+ 	* Makefile.generic: When there are sources in Ada and the main is in
+ 	C/C++, invoke gnatmake with -B, instead of -z.
+ 
+ 	* vms_conv.adb (Preprocess_Command_Data): New procedure, extracted
+ 	from VMS_Conversion.
+ 	(Process_Argument): New procedure, extracted from VMS_Conversion. Add
+ 	specification of argument file on the command line.
+ 
+ 2004-01-26  Bernard Banner  <banner@gnat.com>
+ 
+ 	* Makefile.in: Enable GMEM_LIB and SYMLIB for x86_64
+ 
+ 2004-01-26  Ed Schonberg  <schonberg@gnat.com>
+ 
+ 	* snames.adb: Update copyright notice.
+ 	Add info on slice assignment for controlled arrays.
+ 
+ 2004-01-23  Robert Dewar  <dewar@gnat.com>
+ 
+ 	* exp_aggr.adb: Minor reformatting
+ 
+ 	* exp_ch9.adb: Minor code clean up
+ 	Minor reformatting
+ 	Fix bad character in comment
+ 
+ 	PR ada/13471
+ 	* targparm.adb (Get_Target_Parameters): Give clean abort error on
+ 	unexpected end of file, along with more detailed message.
+ 
+ 2004-01-23  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* exp_pakd.adb (Install_PAT): Clear Freeze_Node for PAT and Etype of
+ 	PAT.
+ 
+ 	* decl.c (copy_alias_set): New function.
+ 	(gnat_to_gnu_entity, make_aligning_type, make_packable_type): Use it.
+ 
+ 2004-01-23  Doug Rupp  <rupp@gnat.com>
+ 
+ 	* Makefile.in (install-gnatlib): Change occurrences of lib$$file to
+ 	lib$${file} in case subsequent character is not a separator.
+ 
+ 2004-01-23  Vincent Celier  <celier@gnat.com>
+ 
+ 	* 5vml-tgt.adb (Build_Dynamic_Library): Invoke gcc with -shared-libgcc
+ 	when the GCC version is at least 3.
+ 
+ 	* make.adb: (Scan_Make_Arg): Pass -B to Scan_Make_Switches
+ 	Remove all "Opt.", to prepare for opt split
+ 
+ 	* prj-part.adb (Parse_Single_Project): New Boolean out parameter
+ 	Extends_All. Set to True when the project parsed is an extending all
+ 	project. Fails for importing an extending all project only when the
+ 	imported project is an extending all project.
+ 	(Post_Parse_Context_Clause): Set Is_Extending_All to the with clause,
+ 	depending on the value of Extends_All returned.
+ 
+ 	* prj-proc.adb (Process): Check that no project shares its object
+ 	directory with a project that extends it, directly or indirectly,
+ 	including a virtual project.
+ 	Check that no project extended by another project shares its object
+ 	directory with another also extended project.
+ 
+ 	* prj-tree.adb (Is_Extending_All, Set_Is_Extending_All): Allow for
+ 	Kind = N_With_Clause
+ 
+ 	* prj-tree.ads: Minor reformatting
+ 	Indicate that Flag2 also applies to N_With_Clause (Is_Extending_All).
+ 
+ 2004-01-23  Ed Schonberg  <schonberg@gnat.com>
+ 
+ 	* sem_ch13.adb (Analyze_Attribute_Definition_Clause): If the attribute
+ 	applies to a type with an incomplete view, use full view in Name of
+ 	clause, for consistency with uses of Get_Attribute_Definition_Clause.
+ 
+ 2004-01-23  Arnaud Charlet  <charlet@act-europe.fr>
+ 
+ 	* 5itaprop.adb (Set_Priority): Reset the priority to 0 when using
+ 	SCHED_RR, since other values are not supported by this policy.
+ 	(Initialize): Move initialization of mutex attribute to package
+ 	elaboration, to prevent early access to this variable.
+ 
+ 	* Makefile.in: Remove mention of Makefile.adalib, unused.
+ 
+ 	* Makefile.adalib, 1aexcept.adb, 1aexcept.ads, 1ic.ads, 1ssecsta.adb,
+ 	1ssecsta.ads: Removed, unused.
+ 
+ 2004-01-21  Javier Miranda  <miranda@gnat.com>
+ 
+ 	* exp_aggr.adb (Build_Record_Aggr_Code): Do not build the master
+ 	entity if already built in the current scope.
+ 
+ 	* exp_ch9.adb (Build_Master_Entity): Do not set the has_master_entity
+ 	reminder in internal scopes. Required for nested limited aggregates.
+ 
+ 2004-01-21  Doug Rupp  <rupp@gnat.com>
+ 
+ 	* Makefile.in (hyphen): New variable, default value '-'. Set to '_' on
+ 	VMS. Replace all occurences of libgnat- and libgnarl- with
+ 	libgnat$(hyphen) and libgnarl$(hyphen).
+ 	Fixed shared library build problem on VMS.
+ 
+ 2004-01-21  Robert Dewar  <dewar@gnat.com>
+ 
+ 	* mlib-prj.adb: Minor reformatting
+ 
+ 2004-01-21  Thomas Quinot  <quinot@act-europe.fr>
+ 
+ 	* prj-tree.adb, 7staprop.adb, vms_conv.adb, xr_tabls.adb: Add missing
+ 	'constant' keywords for declaration of pointers that are not modified.
+ 
+ 	* exp_pakd.adb: Fix English in comment.
+ 
+ 2004-01-21  Ed Schonberg  <schonberg@gnat.com>
+ 
+ 	PR ada/10889
+ 	* sem_ch3.adb (Analyze_Subtype_Declaration): For an array subtype,
+ 	copy all attributes of the parent, including the foreign language
+ 	convention.
+ 
+ 2004-01-21  Sergey Rybin  <rybin@act-europe.fr>
+ 
+ 	PR ada/10565
+ 	* sem_ch9.adb (Analyze_Delay_Alternative): Add expression type check
+ 	for 'delay until' statement.
+ 
  2004-01-20  Kelley Cook  <kcook@gcc.gnu.org>
  
  	* Make-lang.in: Replace $(docdir) with doc.
***************
*** 107,112 ****
--- 9222,9261 ----
  	(ADA_INFOFILES): Define.
  	(ada.info, ada.srcinfo): New rules.
  
+ 2004-01-19  Arnaud Charlet  <charlet@act-europe.fr>
+ 
+ 	* utils.c: Update copyright notice, missed in previous change.
+ 
+ 2004-01-19  Vincent Celier  <celier@gnat.com>
+ 
+ 	* mlib-prj.adb (Build_Library.Add_ALI_For): Only add the ALI to the
+ 	args if Bind is True. Set First_ALI, if not already done.
+ 	(Build_Library): For Stand Alone Libraries, extract from one ALI file
+ 	an eventual --RTS switch, for gnatbind, and all backend switches +
+ 	--RTS, for linking.
+ 
+ 2004-01-19  Robert Dewar  <dewar@gnat.com>
+ 
+ 	* sem_attr.adb, memtrack.adb: Minor reformatting
+ 
+ 2004-01-19  Ed Schonberg  <schonberg@gnat.com>
+ 
+ 	* exp_ch6.adb (Expand_Call): Remove code to fold calls to functions
+ 	that rename enumeration literals. This is properly done in sem_eval.
+ 
+ 	* sem_eval.ads, sem_eval.adb (Eval_Call): New procedure to fold calls
+ 	to functions that rename enumeration literals.
+ 
+ 	* sem_res.adb (Resolve_Call): Use Eval_Call to fold static calls to
+ 	functions that rename enumeration literals.
+ 
+ 2004-01-16  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* Make-lang.in (utils.o): Depend on target.h.
+ 	* utils.c: Include target.h.
+ 	(process_attributes): Use targetm.have_named_sections instead
+ 	of ASM_OUTPUT_SECTION_NAME.
+ 
  2004-01-16  Andreas Jaeger  <aj@suse.de>
  
  	* Makefile.in: Add $(DESTDIR).
diff -Nrcpad gcc-3.4.3/gcc/ada/ChangeLog.tree-ssa gcc-4.0.0/gcc/ada/ChangeLog.tree-ssa
*** gcc-3.4.3/gcc/ada/ChangeLog.tree-ssa	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/ChangeLog.tree-ssa	Thu May 13 06:39:53 2004
***************
*** 0 ****
--- 1,29 ----
+ 2004-05-05  Richard Henderson  <rth@redhat.com>
+ 
+ 	* utils.c (unchecked_convert): Use OEP_ONLY_CONST.
+ 
+ 2004-03-25  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* config-lang.in: Disable Ada by default.
+ 
+ 2004-02-16  Richard Henderson  <rth@redhat.com>
+ 
+ 	* utils.c (max_size): Add static chain op for call_expr.
+ 
+ 2003-09-25  Jason Merrill  <jason@redhat.com>
+ 
+ 	* trans.c, utils.c: Revert 2003-01-15 change.
+ 
+ 2003-01-15  Jeff Law <law@redhat.com>
+ 
+ 	* trans.c (tree_transform): Use annotate_with_file_line to add
+ 	file/line information to nodes.
+ 	(build_unit_elab): Use TREE_FILENAME and TREE_LINENO to 
+ 	retrieve file/line information from a node.
+ 	* utils.c (create_label_decl): Use annotate_with_file_line to
+ 	add file/line information to nodes.
+ 
+ Local Variables:
+ mode: change-log
+ change-log-default-name: "ChangeLog.tree-ssa"
+ End:
diff -Nrcpad gcc-3.4.3/gcc/ada/Make-lang.in gcc-4.0.0/gcc/ada/Make-lang.in
*** gcc-3.4.3/gcc/ada/Make-lang.in	Wed Sep  1 20:07:42 2004
--- gcc-4.0.0/gcc/ada/Make-lang.in	Tue Mar 15 20:52:43 2005
***************
*** 35,50 ****
  # - the compiler proper (eg: cc1plus)
  # - define the names for selecting the language in LANGUAGES.
  # tool definitions
- CHMOD = chmod
- CHMOD_AX_FLAGS = a+x
  CP = cp -p
  ECHO = echo
  MV = mv
  MKDIR = mkdir -p
  RM = rm -f
  RMDIR = rm -rf
- # default extensions
- shext  =
  
  
  # Extra flags to pass to recursive makes.
--- 35,46 ----
*************** FORCE_DEBUG_ADAFLAGS = -g
*** 56,67 ****
  ADA_CFLAGS =
  ALL_ADA_CFLAGS = $(X_ADA_CFLAGS) $(T_ADA_CFLAGS) $(ADA_CFLAGS)
  ADA_INCLUDES = -I- -I. -Iada -I$(srcdir)/ada
- GNATLIBFLAGS= -W -Wall -gnatpg
- GNATLIBCFLAGS= -g -O2
  ADA_INCLUDE_DIR = $(libsubdir)/adainclude
  ADA_RTL_OBJ_DIR = $(libsubdir)/adalib
- THREAD_KIND=native
- TRACE=no
  GNATBIND = $(STAGE_PREFIX)gnatbind
  ADA_FLAGS_TO_PASS = \
  	"ADA_FOR_BUILD=$(ADA_FOR_BUILD)"	\
--- 52,59 ----
*************** GNAT_ADA_OBJS = ada/ada.o ada/a-charac.o
*** 137,143 ****
   ada/lib-util.o ada/lib-xref.o ada/lib-writ.o ada/live.o ada/namet.o \
   ada/nlists.o ada/nmake.o ada/opt.o ada/osint.o ada/osint-c.o ada/output.o \
   ada/par.o ada/prep.o ada/prepcomp.o ada/repinfo.o ada/restrict.o \
!  ada/rident.o ada/rtsfind.o ada/s-assert.o ada/s-parame.o ada/s-stache.o \
   ada/s-stalib.o ada/s-imgenu.o ada/s-stoele.o ada/s-soflin.o ada/s-exctab.o \
   ada/s-secsta.o ada/s-traent.o ada/s-wchcnv.o ada/s-wchcon.o ada/s-wchjis.o \
   ada/s-unstyp.o ada/scans.o ada/scng.o ada/scn.o ada/sdefault.o ada/sem.o \
--- 129,136 ----
   ada/lib-util.o ada/lib-xref.o ada/lib-writ.o ada/live.o ada/namet.o \
   ada/nlists.o ada/nmake.o ada/opt.o ada/osint.o ada/osint-c.o ada/output.o \
   ada/par.o ada/prep.o ada/prepcomp.o ada/repinfo.o ada/restrict.o \
!  ada/rident.o ada/rtsfind.o \
!  ada/s-addope.o ada/s-assert.o ada/s-parame.o ada/s-stache.o \
   ada/s-stalib.o ada/s-imgenu.o ada/s-stoele.o ada/s-soflin.o ada/s-exctab.o \
   ada/s-secsta.o ada/s-traent.o ada/s-wchcnv.o ada/s-wchcon.o ada/s-wchjis.o \
   ada/s-unstyp.o ada/scans.o ada/scng.o ada/scn.o ada/sdefault.o ada/sem.o \
*************** GNAT_ADA_OBJS = ada/ada.o ada/a-charac.o
*** 153,159 ****
   ada/stylesw.o ada/validsw.o ada/system.o ada/table.o ada/targparm.o \
   ada/tbuild.o ada/tree_gen.o ada/tree_io.o ada/treepr.o ada/treeprs.o \
   ada/ttypef.o ada/ttypes.o ada/types.o ada/uintp.o ada/uname.o ada/urealp.o \
!  ada/usage.o ada/widechar.o ada/s-crtl.o
  
  # Object files for gnat executables
  GNAT1_ADA_OBJS = $(GNAT_ADA_OBJS) ada/back_end.o ada/gnat1drv.o
--- 146,152 ----
   ada/stylesw.o ada/validsw.o ada/system.o ada/table.o ada/targparm.o \
   ada/tbuild.o ada/tree_gen.o ada/tree_io.o ada/treepr.o ada/treeprs.o \
   ada/ttypef.o ada/ttypes.o ada/types.o ada/uintp.o ada/uname.o ada/urealp.o \
!  ada/usage.o ada/widechar.o ada/s-crtl.o ada/seh_init.o
  
  # Object files for gnat executables
  GNAT1_ADA_OBJS = $(GNAT_ADA_OBJS) ada/back_end.o ada/gnat1drv.o
*************** GNATBIND_OBJS = \
*** 168,173 ****
--- 161,167 ----
   ada/cstreams.o   \
   ada/final.o      \
   ada/init.o       \
+  ada/seh_init.o   \
   ada/link.o       \
   ada/raise.o      \
   ada/tracebak.o   \
*************** GNATBIND_OBJS = \
*** 189,194 ****
--- 183,191 ----
   ada/debug.o      \
   ada/einfo.o      \
   ada/elists.o     \
+  ada/err_vars.o   \
+  ada/errout.o     \
+  ada/erroutc.o    \
   ada/fmap.o       \
   ada/fname.o      \
   ada/g-hesora.o   \
*************** GNATBIND_OBJS = \
*** 208,213 ****
--- 205,211 ----
   ada/osint.o      \
   ada/output.o     \
   ada/rident.o     \
+  ada/s-addope.o   \
   ada/s-assert.o   \
   ada/s-carun8.o   \
   ada/s-casuti.o   \
*************** GNATBIND_OBJS = \
*** 235,248 ****
--- 233,252 ----
   ada/s-wchcnv.o   \
   ada/s-wchcon.o   \
   ada/s-wchjis.o   \
+  ada/scng.o       \
+  ada/scans.o      \
   ada/sdefault.o   \
   ada/sinfo.o      \
   ada/sinput.o     \
+  ada/sinput-c.o   \
   ada/snames.o     \
   ada/stand.o      \
   ada/stringt.o    \
   ada/switch-b.o   \
   ada/switch.o     \
+  ada/style.o      \
+  ada/styleg.o     \
+  ada/stylesw.o    \
   ada/system.o     \
   ada/table.o      \
   ada/targparm.o   \
*************** gnatbind$(exeext): ada/b_gnatb.o $(CONFI
*** 276,356 ****
  	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ ada/b_gnatb.o $(GNATBIND_OBJS) \
  	     $(LIBS) $(SYSLIBS)
  
- # use target-gcc target-gnatmake target-gnatbind target-gnatlink 
- gnattools: $(GCC_PARTS) $(CONFIG_H) prefix.o force
- 	$(MAKE) -C ada $(FLAGS_TO_PASS) $(ADA_FLAGS_TO_PASS) \
- 	  ADA_INCLUDES="-I- -I../rts"\
- 	  CC="../../xgcc -B../../" STAGE_PREFIX=../../  gnattools1
- 	$(MAKE) -C ada $(ADA_TOOLS_FLAGS_TO_PASS) gnattools2
- 	$(MAKE) -C ada $(ADA_TOOLS_FLAGS_TO_PASS) gnattools3
- 
- regnattools: 
- 	$(MAKE) -C ada $(ADA_TOOLS_FLAGS_TO_PASS) gnattools1-re
- 	$(MAKE) -C ada $(ADA_TOOLS_FLAGS_TO_PASS) gnattools2
- 	$(MAKE) -C ada $(ADA_TOOLS_FLAGS_TO_PASS) gnattools3
- 
- # use host-gcc host-gnatmake host-gnatbind host-gnatlink
- # put the host RTS dir first in the PATH to hide the default runtime
- # files that are among the sources
- RTS_DIR:=$(strip $(subst \,/,$(shell gnatls -v | grep adalib )))
- cross-gnattools: force
- 	$(MAKE)  -C ada $(FLAGS_TO_PASS) $(ADA_FLAGS_TO_PASS)\
- 	   ADA_INCLUDES="-I$(RTS_DIR)../adainclude -I$(RTS_DIR)" \
- 	   GNATMAKE="gnatmake" \
- 	   GNATBIND="gnatbind" \
- 	   GNATLINK="gnatlink" \
- 	   LIBGNAT="" \
- 	   gnattools1-re gnattools2 gnattools4
-   
- rts-zfp: force
- 	$(MAKE) -C ada  $(FLAGS_TO_PASS) GNATMAKE=../gnatmake-cross rts-zfp
- 
- install-rts-zfp: force
- 	$(MAKE) -C ada  $(FLAGS_TO_PASS) install-rts RTS_NAME=zfp
- 
- rts-none: force
- 	$(MAKE) -C ada  $(FLAGS_TO_PASS) GNATMAKE=../gnatmake-cross rts-none
- 
- install-rts-none: force
- 	$(MAKE) -C ada  $(FLAGS_TO_PASS) install-rts RTS_NAME=none
- 
- rts-ravenscar: force
- 	$(MAKE) -C ada  $(FLAGS_TO_PASS) GNATMAKE=../gnatmake-cross rts-ravenscar
- 
- install-rts-ravenscar: force
- 	$(MAKE) -C ada  $(FLAGS_TO_PASS) install-rts RTS_NAME=ravenscar
- 
- gnatlib: force
- 	$(MAKE) -C ada $(FLAGS_TO_PASS)  \
- 	   GNATLIBFLAGS="$(GNATLIBFLAGS)" \
- 	   GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
- 	   TARGET_LIBGCC2_CFLAGS="$(TARGET_LIBGCC2_CFLAGS)" \
- 	   THREAD_KIND="$(THREAD_KIND)" \
- 	   TRACE="$(TRACE)" \
- 	   gnatlib
- 
- gnatlib-sjlj: force
- 	$(MAKE) -C ada $(FLAGS_TO_PASS)  \
- 	   GNATLIBFLAGS="$(GNATLIBFLAGS)" \
- 	   GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
- 	   TARGET_LIBGCC2_CFLAGS="$(TARGET_LIBGCC2_CFLAGS)" \
- 	   THREAD_KIND="$(THREAD_KIND)" \
- 	   TRACE="$(TRACE)" \
- 	   gnatlib-sjlj
- 
- gnatlib-shared: force
- 	$(MAKE) -C ada $(FLAGS_TO_PASS)  \
- 	   GNATLIBFLAGS="$(GNATLIBFLAGS)" \
- 	   GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
- 	   GNATLIBLDFLAGS="$(GNATLIBLDFLAGS)" \
- 	   TARGET_LIBGCC2_CFLAGS="$(TARGET_LIBGCC2_CFLAGS)" \
- 	   THREAD_KIND="$(THREAD_KIND)" \
- 	   TRACE="$(TRACE)" \
- 	   gnatlib-shared
- 
- # use only for native compiler
- gnatlib_and_tools: gnatlib gnattools
- 
  # use cross-gcc
  gnat-cross: force
  	make $(GNAT1_ADA_OBJS) CC="gcc -B../stage1/" CFLAGS="-S -gnatp" \
--- 280,285 ----
*************** ada.all.cross:
*** 393,402 ****
  	then \
  	   $(MV) gnatmake$(exeext)  gnatmake-cross$(exeext); \
  	fi
- 	-if [ -f gnatmem$(exeext) ] ; \
- 	then \
- 	   $(MV) gnatmem$(exeext)  gnatmem-cross$(exeext); \
- 	fi
  	-if [ -f gnatname$(exeext) ] ; \
  	then \
  	   $(MV) gnatname$(exeext)  gnatname-cross$(exeext); \
--- 322,327 ----
*************** ada.all.cross:
*** 421,437 ****
  	then \
  	   $(MV) gnatsym$(exeext)  gnatsym-cross$(exeext); \
  	fi
! 	-if [ -f gpr2make$(exeext) ] ; \
! 	then \
! 	   $(MV) gpr2make$(exeext)  gpr2make-cross$(exeext); \
! 	fi
! 	-if [ -f gprcmd$(exeext) ] ; \
  	then \
! 	   $(MV) gprcmd$(exeext)  gprcmd-cross$(exeext); \
  	fi
  
! ada.start.encap: 
! ada.rest.encap: 
  ada.man:
  ada.srcextra:
  ada.srcman:
--- 346,358 ----
  	then \
  	   $(MV) gnatsym$(exeext)  gnatsym-cross$(exeext); \
  	fi
! 	-if [ -f gprmake$(exeext) ] ; \
  	then \
! 	   $(MV) gprmake$(exeext)  gprmake-cross$(exeext); \
  	fi
  
! ada.start.encap:
! ada.rest.encap:
  ada.man:
  ada.srcextra:
  ada.srcman:
*************** doc/gnat_ugn_unw.info: doc/gnat_ugn_unw.
*** 463,469 ****
  	  $(MAKEINFO) $(MAKEINFOFLAGS) -I$(docdir)/include \
              -I$(srcdir)/ada -o $@ $<; \
  	else true; fi
! 	
  doc/gnat_rm.info: ada/gnat_rm.texi $(docdir)/include/fdl.texi \
     $(docdir)/include/gcc-common.texi
  	if [ x$(BUILD_INFO) = xinfo ]; then \
--- 384,390 ----
  	  $(MAKEINFO) $(MAKEINFOFLAGS) -I$(docdir)/include \
              -I$(srcdir)/ada -o $@ $<; \
  	else true; fi
! 
  doc/gnat_rm.info: ada/gnat_rm.texi $(docdir)/include/fdl.texi \
     $(docdir)/include/gcc-common.texi
  	if [ x$(BUILD_INFO) = xinfo ]; then \
*************** ada.install-normal:
*** 515,521 ****
  # and also as either gnatbind (if native) or $(tooldir)/bin/gnatbind
  # likewise for gnatf, gnatchop, and gnatlink, gnatkr, gnatmake, gnat,
  # gnatprep, gnatbl, gnatls, gnatxref, gnatfind, gnatname, gnatclean,
! # gnatsym
  ada.install-common:
  	$(MKDIR) $(DESTDIR)$(bindir)
  	-if [ -f gnat1$(exeext) ] ; \
--- 436,442 ----
  # and also as either gnatbind (if native) or $(tooldir)/bin/gnatbind
  # likewise for gnatf, gnatchop, and gnatlink, gnatkr, gnatmake, gnat,
  # gnatprep, gnatbl, gnatls, gnatxref, gnatfind, gnatname, gnatclean,
! # gnatsym, gprmake
  ada.install-common:
  	$(MKDIR) $(DESTDIR)$(bindir)
  	-if [ -f gnat1$(exeext) ] ; \
*************** ada.install-common:
*** 640,656 ****
  	fi
  	-if [ -f gnat1$(exeext) ] ; \
  	then \
- 	  if [ -f gnatmem-cross$(exeext) ] ; \
- 	  then \
- 	    $(RM) $(DESTDIR)$(bindir)/$(target_noncanonical)-gnatmem$(exeext); \
- 	    $(INSTALL_PROGRAM) gnatmem-cross$(exeext) $(DESTDIR)$(bindir)/$(target_noncanonical)-gnatmem$(exeext); \
- 	  else \
- 	    $(RM) $(DESTDIR)$(bindir)/gnatmem$(exeext); \
- 	    $(INSTALL_PROGRAM) gnatmem$(exeext) $(DESTDIR)$(bindir)/gnatmem$(exeext); \
- 	  fi ; \
- 	fi
- 	-if [ -f gnat1$(exeext) ] ; \
- 	then \
  	  if [ -f gnatname-cross$(exeext) ] ; \
  	  then \
  	    $(RM) $(DESTDIR)$(bindir)/$(target_noncanonical)-gnatname$(exeext); \
--- 561,566 ----
*************** ada.install-common:
*** 710,727 ****
  	fi
  	-if [ -f gnat1$(exeext) ] ; \
  	then \
! 	  if [ -f gpr2make$(exeext) ] ; \
! 	  then \
! 	    $(RM) $(DESTDIR)$(bindir)/gpr2make$(exeext); \
! 	    $(INSTALL_PROGRAM) gpr2make$(exeext) $(DESTDIR)$(bindir)/gpr2make$(exeext); \
! 	  fi ; \
! 	fi
! 	-if [ -f gnat1$(exeext) ] ; \
! 	then \
! 	  if [ -f gprcmd$(exeext) ] ; \
  	  then \
! 	    $(RM) $(DESTDIR)$(bindir)/gprcmd$(exeext); \
! 	    $(INSTALL_PROGRAM) gprcmd$(exeext) $(DESTDIR)$(bindir)/gprcmd$(exeext); \
  	  fi ; \
  	fi
  #
--- 620,632 ----
  	fi
  	-if [ -f gnat1$(exeext) ] ; \
  	then \
! 	  if [ -f gprmake-cross$(exeext) ] ; \
  	  then \
! 	    $(RM) $(DESTDIR)$(bindir)/$(target_noncanonical)-gprmake$(exeext); \
! 	    $(INSTALL_PROGRAM) gprmake-cross$(exeext) $(DESTDIR)$(bindir)/$(target_noncanonical)-gprmake$(exeext); \
! 	  else \
! 	    $(RM) $(bindir)/gprmake$(exeext); \
! 	    $(INSTALL_PROGRAM) gprmake$(exeext) $(DESTDIR)$(bindir)/gprmake$(exeext); \
  	  fi ; \
  	fi
  #
*************** install-gnatlib:
*** 781,796 ****
  install-gnatlib-obj:
  	$(MAKE) -C ada $(FLAGS_TO_PASS) $(ADA_FLAGS_TO_PASS) install-gnatlib-obj
  
- 
- rts-cert: force
- 	$(MAKE) -C ada  $(FLAGS_TO_PASS) \
- 	   GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
- 	   TARGET_LIBGCC2_CFLAGS="$(TARGET_LIBGCC2_CFLAGS)" \
-            GNATMAKE=../gnatmake-cross rts-cert RTS_NAME=cert
- 
- install-rts-cert: force
- 	$(MAKE) -C ada  $(FLAGS_TO_PASS) install-rts RTS_NAME=none
- 
  ada.install-man:
  
  ada.uninstall:
--- 686,691 ----
*************** ada.uninstall:
*** 805,811 ****
  	-$(RM) $(DESTDIR)$(bindir)/gnatlink$(exeext)
  	-$(RM) $(DESTDIR)$(bindir)/gnatls$(exeext)
  	-$(RM) $(DESTDIR)$(bindir)/gnatmake$(exeext)
- 	-$(RM) $(DESTDIR)$(bindir)/gnatmem$(exeext)
  	-$(RM) $(DESTDIR)$(bindir)/gnatname$(exeext)
  	-$(RM) $(DESTDIR)$(bindir)/gnatprep$(exeext)
  	-$(RM) $(DESTDIR)$(bindir)/gnatxref$(exeext)
--- 700,705 ----
*************** ada.uninstall:
*** 822,828 ****
  	-$(RM) $(DESTDIR)$(bindir)/$(target_noncanonical)-gnatlink$(exeext)
  	-$(RM) $(DESTDIR)$(bindir)/$(target_noncanonical)-gnatls$(exeext)
  	-$(RM) $(DESTDIR)$(bindir)/$(target_noncanonical)-gnatmake$(exeext)
- 	-$(RM) $(DESTDIR)$(bindir)/$(target_noncanonical)-gnatmem$(exeext)
  	-$(RM) $(DESTDIR)$(bindir)/$(target_noncanonical)-gnatname$(exeext)
  	-$(RM) $(DESTDIR)$(bindir)/$(target_noncanonical)-gnatprep$(exeext)
  	-$(RM) $(DESTDIR)$(bindir)/$(target_noncanonical)-gnatxref$(exeext)
--- 716,721 ----
*************** ada.uninstall:
*** 839,845 ****
  	-$(RM) $(DESTDIR)$(tooldir)/bin/gnatlink$(exeext)
  	-$(RM) $(DESTDIR)$(tooldir)/bin/gnatls$(exeext)
  	-$(RM) $(DESTDIR)$(tooldir)/bin/gnatmake$(exeext)
- 	-$(RM) $(DESTDIR)$(tooldir)/bin/gnatmem$(exeext)
  	-$(RM) $(DESTDIR)$(tooldir)/bin/gnatname$(exeext)
  	-$(RM) $(DESTDIR)$(tooldir)/bin/gnatprep$(exeext)
  	-$(RM) $(DESTDIR)$(tooldir)/bin/gnatxref$(exeext)
--- 732,737 ----
*************** ada.distclean:
*** 868,880 ****
  	-$(RM) gnatlink$(exeext)
  	-$(RM) gnatls$(exeext)
  	-$(RM) gnatmake$(exeext)
- 	-$(RM) gnatmem$(exeext)
  	-$(RM) gnatname$(exeext)
  	-$(RM) gnatprep$(exeext)
  	-$(RM) gnatfind$(exeext)
  	-$(RM) gnatxref$(exeext)
  	-$(RM) gnatclean$(exeext)
  	-$(RM) gnatsym$(exeext)
  # Gnatlbr is only used on VMS
  	-$(RM) gnatlbr$(exeext)
  	-$(RM) ada/rts/*
--- 760,772 ----
  	-$(RM) gnatlink$(exeext)
  	-$(RM) gnatls$(exeext)
  	-$(RM) gnatmake$(exeext)
  	-$(RM) gnatname$(exeext)
  	-$(RM) gnatprep$(exeext)
  	-$(RM) gnatfind$(exeext)
  	-$(RM) gnatxref$(exeext)
  	-$(RM) gnatclean$(exeext)
  	-$(RM) gnatsym$(exeext)
+ 	-$(RM) gprmake$(exeext)
  # Gnatlbr is only used on VMS
  	-$(RM) gnatlbr$(exeext)
  	-$(RM) ada/rts/*
*************** ada/b_gnatb.c : $(GNATBIND_OBJS) ada/gna
*** 986,1022 ****
  ada/b_gnatb.o : ada/b_gnatb.c
  
  ada/treeprs.ads : ada/treeprs.adt ada/sinfo.ads ada/xtreeprs.adb
! 	-$(MKDIR) ada/bldtools
! 	$(CP) $^ ada/bldtools
! 	(cd ada/bldtools; gnatmake -q xtreeprs ; ./xtreeprs ../treeprs.ads )
  
  ada/einfo.h : ada/einfo.ads ada/einfo.adb ada/xeinfo.adb
! 	-$(MKDIR) ada/bldtools
! 	$(CP) $^ ada/bldtools
! 	(cd ada/bldtools; gnatmake -q xeinfo ; ./xeinfo ../einfo.h )
  
  ada/sinfo.h : ada/sinfo.ads ada/xsinfo.adb
! 	-$(MKDIR) ada/bldtools
! 	$(CP) $^ ada/bldtools
! 	(cd ada/bldtools; gnatmake -q xsinfo ; ./xsinfo ../sinfo.h )
  
  ada/nmake.adb : ada/sinfo.ads ada/nmake.adt ada/xnmake.adb
! 	-$(MKDIR) ada/bldtools
! 	$(CP) $^ ada/bldtools
! 	(cd ada/bldtools; gnatmake -q xnmake ; ./xnmake -b ../nmake.adb )
  
  ada/nmake.ads :  ada/sinfo.ads ada/nmake.adt ada/xnmake.adb ada/nmake.adb
! 	-$(MKDIR) ada/bldtools
! 	$(CP) $^ ada/bldtools
! 	(cd ada/bldtools; gnatmake -q xnmake ; ./xnmake -s ../nmake.ads )
  
  update-sources : ada/treeprs.ads ada/einfo.h ada/sinfo.h ada/nmake.adb \
  	ada/nmake.ads
  	$(CP) $^ $(srcdir)/ada
  
  ada/sdefault.adb: ada/stamp-sdefault ; @true
! ada/stamp-sdefault : $(srcdir)/version.c $(srcdir)/move-if-change \
!  Makefile
  	$(ECHO) "pragma Style_Checks (Off);" >tmp-sdefault.adb
  	$(ECHO) "with Osint; use Osint;" >>tmp-sdefault.adb
  	$(ECHO) "package body Sdefault is" >>tmp-sdefault.adb
--- 878,913 ----
  ada/b_gnatb.o : ada/b_gnatb.c
  
  ada/treeprs.ads : ada/treeprs.adt ada/sinfo.ads ada/xtreeprs.adb
! 	-$(MKDIR) ada/bldtools/treeprs
! 	$(CP) $^ ada/bldtools/treeprs
! 	(cd ada/bldtools/treeprs; gnatmake -q xtreeprs ; ./xtreeprs ../../treeprs.ads )
  
  ada/einfo.h : ada/einfo.ads ada/einfo.adb ada/xeinfo.adb
! 	-$(MKDIR) ada/bldtools/einfo
! 	$(CP) $^ ada/bldtools/einfo
! 	(cd ada/bldtools/einfo; gnatmake -q xeinfo ; ./xeinfo ../../einfo.h )
  
  ada/sinfo.h : ada/sinfo.ads ada/xsinfo.adb
! 	-$(MKDIR) ada/bldtools/sinfo
! 	$(CP) $^ ada/bldtools/sinfo
! 	(cd ada/bldtools/sinfo; gnatmake -q xsinfo ; ./xsinfo ../../sinfo.h )
  
  ada/nmake.adb : ada/sinfo.ads ada/nmake.adt ada/xnmake.adb
! 	-$(MKDIR) ada/bldtools/nmake_b
! 	$(CP) $^ ada/bldtools/nmake_b
! 	(cd ada/bldtools/nmake_b; gnatmake -q xnmake ; ./xnmake -b ../../nmake.adb )
  
  ada/nmake.ads :  ada/sinfo.ads ada/nmake.adt ada/xnmake.adb ada/nmake.adb
! 	-$(MKDIR) ada/bldtools/nmake_s
! 	$(CP) $^ ada/bldtools/nmake_s
! 	(cd ada/bldtools/nmake_s; gnatmake -q xnmake ; ./xnmake -s ../../nmake.ads )
  
  update-sources : ada/treeprs.ads ada/einfo.h ada/sinfo.h ada/nmake.adb \
  	ada/nmake.ads
  	$(CP) $^ $(srcdir)/ada
  
  ada/sdefault.adb: ada/stamp-sdefault ; @true
! ada/stamp-sdefault : $(srcdir)/version.c Makefile
  	$(ECHO) "pragma Style_Checks (Off);" >tmp-sdefault.adb
  	$(ECHO) "with Osint; use Osint;" >>tmp-sdefault.adb
  	$(ECHO) "package body Sdefault is" >>tmp-sdefault.adb
*************** ada/stamp-sdefault : $(srcdir)/version.c
*** 1035,1048 ****
  	$(ECHO) "   end Object_Dir_Default_Name;" >>tmp-sdefault.adb
  	$(ECHO) "   function Target_Name return String_Ptr is" >>tmp-sdefault.adb
  	$(ECHO) "   begin" >>tmp-sdefault.adb
! 	$(ECHO) "      return Relocate_Path (S0, S3);" >>tmp-sdefault.adb
  	$(ECHO) "   end Target_Name;" >>tmp-sdefault.adb
  	$(ECHO) "   function Search_Dir_Prefix return String_Ptr is" >>tmp-sdefault.adb
  	$(ECHO) "   begin" >>tmp-sdefault.adb
  	$(ECHO) "      return Relocate_Path (S0, S4);" >>tmp-sdefault.adb
  	$(ECHO) "   end Search_Dir_Prefix;" >>tmp-sdefault.adb
  	$(ECHO) "end Sdefault;" >> tmp-sdefault.adb
! 	$(srcdir)/move-if-change tmp-sdefault.adb ada/sdefault.adb
  	touch ada/stamp-sdefault
  
  ada/sdefault.o : ada/sdefault.ads ada/sdefault.adb ada/types.ads \
--- 926,939 ----
  	$(ECHO) "   end Object_Dir_Default_Name;" >>tmp-sdefault.adb
  	$(ECHO) "   function Target_Name return String_Ptr is" >>tmp-sdefault.adb
  	$(ECHO) "   begin" >>tmp-sdefault.adb
! 	$(ECHO) "      return new String'(S3);" >>tmp-sdefault.adb
  	$(ECHO) "   end Target_Name;" >>tmp-sdefault.adb
  	$(ECHO) "   function Search_Dir_Prefix return String_Ptr is" >>tmp-sdefault.adb
  	$(ECHO) "   begin" >>tmp-sdefault.adb
  	$(ECHO) "      return Relocate_Path (S0, S4);" >>tmp-sdefault.adb
  	$(ECHO) "   end Search_Dir_Prefix;" >>tmp-sdefault.adb
  	$(ECHO) "end Sdefault;" >> tmp-sdefault.adb
! 	$(srcdir)/../move-if-change tmp-sdefault.adb ada/sdefault.adb
  	touch ada/stamp-sdefault
  
  ada/sdefault.o : ada/sdefault.ads ada/sdefault.adb ada/types.ads \
*************** ada/mdll-fil.o : ada/mdll-fil.adb ada/md
*** 1092,1144 ****
  ada/mdll-utl.o : ada/mdll-utl.adb ada/mdll.ads ada/mdll-utl.ads ada/sdefault.ads ada/types.ads
  	$(CC) -c $(ALL_ADAFLAGS) $(ADA_INCLUDES) $< $(OUTPUT_OPTION)
  
! # force debugging information and no optimization on s-memory.o so that it 
  # is always possible to set breakpoint on __gnat_malloc and __gnat_free
  # this is important for gnatmem using GDB. memtrack.o is built from
  # memtrack.adb, and used by the post-mortem analysis with gnatmem.
  
  ada/s-memory.o  : ada/s-memory.adb ada/s-memory.ads ada/memtrack.o
  	$(CC) -c $(ALL_ADAFLAGS) $(FORCE_DEBUG_ADAFLAGS) -O0 \
! 	 $(ADA_INCLUDES) $< $(OUTPUT_OPTION) 
  
  ada/memtrack.o  : ada/memtrack.adb ada/s-memory.ads
  	$(CC) -c $(ALL_ADAFLAGS) $(FORCE_DEBUG_ADAFLAGS) -O0 \
! 	 $(ADA_INCLUDES) $< $(OUTPUT_OPTION) 
  
  ada/adadecode.o : ada/adadecode.c $(CONFIG_H) $(SYSTEM_H) ada/adadecode.h
  ada/adaint.o   : ada/adaint.c $(CONFIG_H) $(SYSTEM_H) ada/adaint.h
  ada/argv.o     : ada/argv.c $(CONFIG_H) $(SYSTEM_H) ada/adaint.h
  ada/cstreams.o : ada/cstreams.c $(CONFIG_H) $(SYSTEM_H) ada/adaint.h
  ada/exit.o     : ada/exit.c $(CONFIG_H) $(SYSTEM_H) ada/adaint.h
! ada/final.o    : ada/final.c $(CONFIG_H) $(SYSTEM_H) ada/raise.h 
  ada/link.o     : ada/link.c
  
  ada/cio.o     : ada/cio.c $(CONFIG_H) $(SYSTEM_H) ada/adaint.h
  	$(CC) -c $(ALL_CFLAGS) $(ALL_ADA_CFLAGS) $(RT_FLAGS) \
! 	         $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION) 
  
  ada/init.o    : ada/init.c $(CONFIG_H) $(SYSTEM_H) ada/adaint.h ada/raise.h
  	$(CC) -c $(ALL_CFLAGS) $(ALL_ADA_CFLAGS) $(RT_FLAGS) \
! 	         $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION) 
  
  ada/raise.o   : ada/raise.c $(CONFIG_H) $(SYSTEM_H) ada/adaint.h ada/raise.h
  	$(CC) -c $(ALL_CFLAGS) $(ALL_ADA_CFLAGS) $(RT_FLAGS) \
! 		 $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION) 
  
  # Need to keep the frame pointer in this file to pop the stack properly on
  # some targets.
  ada/tracebak.o  : ada/tracebak.c $(CONFIG_H) $(SYSTEM_H)
  	$(CC) -c $(ALL_CFLAGS) $(ALL_ADA_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
! 	      -fno-omit-frame-pointer $< $(OUTPUT_OPTION) 
  
  ada/cuintp.o : ada/cuintp.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
     $(TREE_H) ada/ada.h ada/types.h ada/uintp.h ada/atree.h ada/stringt.h \
     ada/elists.h ada/nlists.h ada/fe.h ada/gigi.h
  
  ada/decl.o : ada/decl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
!    flags.h toplev.h convert.h ada/ada.h ada/types.h ada/atree.h ada/nlists.h \
!    ada/elists.h ada/uintp.h ada/sinfo.h ada/einfo.h ada/snames.h ada/namet.h \
!    ada/stringt.h ada/repinfo.h ada/fe.h $(ADA_TREE_H) ada/gigi.h gt-ada-decl.h
  
  ada/misc.o : ada/misc.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
     $(RTL_H) expr.h insn-codes.h insn-flags.h insn-config.h recog.h flags.h \
--- 983,1036 ----
  ada/mdll-utl.o : ada/mdll-utl.adb ada/mdll.ads ada/mdll-utl.ads ada/sdefault.ads ada/types.ads
  	$(CC) -c $(ALL_ADAFLAGS) $(ADA_INCLUDES) $< $(OUTPUT_OPTION)
  
! # force debugging information and no optimization on s-memory.o so that it
  # is always possible to set breakpoint on __gnat_malloc and __gnat_free
  # this is important for gnatmem using GDB. memtrack.o is built from
  # memtrack.adb, and used by the post-mortem analysis with gnatmem.
  
  ada/s-memory.o  : ada/s-memory.adb ada/s-memory.ads ada/memtrack.o
  	$(CC) -c $(ALL_ADAFLAGS) $(FORCE_DEBUG_ADAFLAGS) -O0 \
! 	 $(ADA_INCLUDES) $< $(OUTPUT_OPTION)
  
  ada/memtrack.o  : ada/memtrack.adb ada/s-memory.ads
  	$(CC) -c $(ALL_ADAFLAGS) $(FORCE_DEBUG_ADAFLAGS) -O0 \
! 	 $(ADA_INCLUDES) $< $(OUTPUT_OPTION)
  
  ada/adadecode.o : ada/adadecode.c $(CONFIG_H) $(SYSTEM_H) ada/adadecode.h
  ada/adaint.o   : ada/adaint.c $(CONFIG_H) $(SYSTEM_H) ada/adaint.h
  ada/argv.o     : ada/argv.c $(CONFIG_H) $(SYSTEM_H) ada/adaint.h
  ada/cstreams.o : ada/cstreams.c $(CONFIG_H) $(SYSTEM_H) ada/adaint.h
  ada/exit.o     : ada/exit.c $(CONFIG_H) $(SYSTEM_H) ada/adaint.h
! ada/final.o    : ada/final.c $(CONFIG_H) $(SYSTEM_H) ada/raise.h
  ada/link.o     : ada/link.c
  
  ada/cio.o     : ada/cio.c $(CONFIG_H) $(SYSTEM_H) ada/adaint.h
  	$(CC) -c $(ALL_CFLAGS) $(ALL_ADA_CFLAGS) $(RT_FLAGS) \
! 	         $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
  
  ada/init.o    : ada/init.c $(CONFIG_H) $(SYSTEM_H) ada/adaint.h ada/raise.h
  	$(CC) -c $(ALL_CFLAGS) $(ALL_ADA_CFLAGS) $(RT_FLAGS) \
! 	         $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
  
  ada/raise.o   : ada/raise.c $(CONFIG_H) $(SYSTEM_H) ada/adaint.h ada/raise.h
  	$(CC) -c $(ALL_CFLAGS) $(ALL_ADA_CFLAGS) $(RT_FLAGS) \
! 		 $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
  
  # Need to keep the frame pointer in this file to pop the stack properly on
  # some targets.
  ada/tracebak.o  : ada/tracebak.c $(CONFIG_H) $(SYSTEM_H)
  	$(CC) -c $(ALL_CFLAGS) $(ALL_ADA_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
! 	      -fno-omit-frame-pointer $< $(OUTPUT_OPTION)
  
  ada/cuintp.o : ada/cuintp.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
     $(TREE_H) ada/ada.h ada/types.h ada/uintp.h ada/atree.h ada/stringt.h \
     ada/elists.h ada/nlists.h ada/fe.h ada/gigi.h
  
  ada/decl.o : ada/decl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
!    flags.h toplev.h convert.h target.h ada/ada.h ada/types.h ada/atree.h \
!    ada/nlists.h ada/elists.h ada/uintp.h ada/sinfo.h ada/einfo.h ada/snames.h \
!    ada/namet.h ada/stringt.h ada/repinfo.h ada/fe.h $(ADA_TREE_H) ada/gigi.h \
!    gt-ada-decl.h
  
  ada/misc.o : ada/misc.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
     $(RTL_H) expr.h insn-codes.h insn-flags.h insn-config.h recog.h flags.h \
*************** ada/targtyps.o : ada/targtyps.c $(CONFIG
*** 1154,1169 ****
     ada/urealp.h ada/fe.h $(ADA_TREE_H) ada/gigi.h
  
  ada/trans.o : ada/trans.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
!    $(TREE_H) $(RTL_H) flags.h ada/ada.h except.h ada/types.h ada/atree.h \
!    ada/nlists.h ada/elists.h ada/uintp.h ada/sinfo.h ada/einfo.h ada/namet.h \
!    ada/snames.h ada/stringt.h ada/urealp.h ada/fe.h $(ADA_TREE_H) ada/gigi.h \
!    gt-ada-trans.h
  
  ada/utils.o : ada/utils.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
     $(TREE_H) flags.h expr.h convert.h defaults.h ada/ada.h ada/types.h \
     ada/atree.h ada/nlists.h ada/elists.h ada/sinfo.h ada/einfo.h ada/namet.h \
     ada/stringt.h ada/uintp.h ada/fe.h $(ADA_TREE_H) ada/gigi.h gt-ada-utils.h \
!    gtype-ada.h
  
  ada/utils2.o : ada/utils2.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
     $(TREE_H) flags.h ada/ada.h ada/types.h ada/atree.h ada/nlists.h \
--- 1046,1061 ----
     ada/urealp.h ada/fe.h $(ADA_TREE_H) ada/gigi.h
  
  ada/trans.o : ada/trans.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
!    $(TREE_H) $(RTL_H) $(EXPR_H) flags.h function.h ada/ada.h except.h \
!    ada/types.h ada/atree.h ada/nlists.h ada/elists.h ada/uintp.h ada/sinfo.h \
!    ada/einfo.h ada/namet.h ada/snames.h ada/stringt.h ada/urealp.h ada/fe.h \
!    $(ADA_TREE_H) ada/gigi.h gt-ada-trans.h
  
  ada/utils.o : ada/utils.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
     $(TREE_H) flags.h expr.h convert.h defaults.h ada/ada.h ada/types.h \
     ada/atree.h ada/nlists.h ada/elists.h ada/sinfo.h ada/einfo.h ada/namet.h \
     ada/stringt.h ada/uintp.h ada/fe.h $(ADA_TREE_H) ada/gigi.h gt-ada-utils.h \
!    gtype-ada.h target.h
  
  ada/utils2.o : ada/utils2.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
     $(TREE_H) flags.h ada/ada.h ada/types.h ada/atree.h ada/nlists.h \
*************** ada/ada.o : ada/ada.ads ada/system.ads 
*** 1203,1218 ****
  
  ada/ali-util.o : ada/ada.ads ada/a-except.ads ada/a-uncdea.ads ada/ali.ads \
     ada/ali-util.ads ada/ali-util.adb ada/alloc.ads ada/binderr.ads \
!    ada/casing.ads ada/debug.ads ada/gnat.ads ada/g-htable.ads \
!    ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads \
!    ada/interfac.ads ada/lib.ads ada/namet.ads ada/namet.adb ada/opt.ads \
!    ada/osint.ads ada/output.ads ada/rident.ads ada/system.ads \
!    ada/s-crc32.ads ada/s-crc32.adb ada/s-exctab.ads ada/s-exctab.adb \
!    ada/s-htable.ads ada/s-htable.adb ada/s-memory.ads ada/s-rident.ads \
!    ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
!    ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \
!    ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \
!    ada/types.ads ada/unchconv.ads ada/unchdeal.ads ada/widechar.ads 
  
  ada/ali.o : ada/ada.ads ada/a-except.ads ada/a-uncdea.ads ada/ali.ads \
     ada/ali.adb ada/alloc.ads ada/butil.ads ada/casing.ads ada/debug.ads \
--- 1095,1115 ----
  
  ada/ali-util.o : ada/ada.ads ada/a-except.ads ada/a-uncdea.ads ada/ali.ads \
     ada/ali-util.ads ada/ali-util.adb ada/alloc.ads ada/binderr.ads \
!    ada/casing.ads ada/csets.ads ada/debug.ads ada/err_vars.ads \
!    ada/gnat.ads ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads \
!    ada/gnatvsn.ads ada/hostparm.ads ada/interfac.ads ada/lib.ads \
!    ada/namet.ads ada/namet.adb ada/opt.ads ada/osint.ads ada/output.ads \
!    ada/rident.ads ada/scans.ads ada/scng.ads ada/scng.adb ada/sinput.ads \
!    ada/sinput.adb ada/sinput-c.ads ada/snames.ads ada/stringt.ads \
!    ada/stringt.adb ada/styleg.ads ada/styleg.adb ada/stylesw.ads \
!    ada/system.ads ada/s-carun8.ads ada/s-crc32.ads ada/s-crc32.adb \
!    ada/s-exctab.ads ada/s-htable.ads ada/s-htable.adb ada/s-memory.ads \
!    ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \
!    ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \
!    ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \
!    ada/tree_io.ads ada/types.ads ada/types.adb ada/uintp.ads ada/uintp.adb \
!    ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/urealp.adb \
!    ada/widechar.ads 
  
  ada/ali.o : ada/ada.ads ada/a-except.ads ada/a-uncdea.ads ada/ali.ads \
     ada/ali.adb ada/alloc.ads ada/butil.ads ada/casing.ads ada/debug.ads \
*************** ada/back_end.o : ada/ada.ads ada/a-excep
*** 1261,1277 ****
  
  ada/bcheck.o : ada/ada.ads ada/a-except.ads ada/ali.ads ada/ali-util.ads \
     ada/ali-util.adb ada/alloc.ads ada/bcheck.ads ada/bcheck.adb \
!    ada/binderr.ads ada/butil.ads ada/casing.ads ada/debug.ads \
!    ada/fname.ads ada/gnat.ads ada/g-htable.ads ada/g-os_lib.ads \
!    ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads ada/interfac.ads \
!    ada/lib.ads ada/namet.ads ada/namet.adb ada/opt.ads ada/osint.ads \
!    ada/output.ads ada/rident.ads ada/system.ads ada/s-crc32.ads \
!    ada/s-crc32.adb ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads \
!    ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \
!    ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \
!    ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \
!    ada/table.adb ada/tree_io.ads ada/types.ads ada/unchconv.ads \
!    ada/unchdeal.ads ada/widechar.ads 
  
  ada/binde.o : ada/ada.ads ada/a-except.ads ada/ali.ads ada/alloc.ads \
     ada/binde.ads ada/binde.adb ada/binderr.ads ada/butil.ads \
--- 1158,1177 ----
  
  ada/bcheck.o : ada/ada.ads ada/a-except.ads ada/ali.ads ada/ali-util.ads \
     ada/ali-util.adb ada/alloc.ads ada/bcheck.ads ada/bcheck.adb \
!    ada/binderr.ads ada/butil.ads ada/casing.ads ada/csets.ads \
!    ada/debug.ads ada/err_vars.ads ada/fname.ads ada/gnat.ads \
!    ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \
!    ada/hostparm.ads ada/interfac.ads ada/lib.ads ada/namet.ads \
!    ada/namet.adb ada/opt.ads ada/osint.ads ada/output.ads ada/rident.ads \
!    ada/scans.ads ada/scng.ads ada/scng.adb ada/sinput.ads ada/sinput-c.ads \
!    ada/snames.ads ada/stringt.ads ada/styleg.ads ada/styleg.adb \
!    ada/stylesw.ads ada/system.ads ada/s-crc32.ads ada/s-exctab.ads \
!    ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads \
!    ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
!    ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \
!    ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \
!    ada/types.ads ada/uintp.ads ada/unchconv.ads ada/unchdeal.ads \
!    ada/urealp.ads ada/widechar.ads 
  
  ada/binde.o : ada/ada.ads ada/a-except.ads ada/ali.ads ada/alloc.ads \
     ada/binde.ads ada/binde.adb ada/binderr.ads ada/butil.ads \
*************** ada/bindgen.o : ada/ada.ads ada/a-except
*** 1304,1311 ****
     ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-strops.ads \
     ada/s-sopco3.ads ada/s-sopco4.ads ada/s-sopco5.ads ada/s-traent.ads \
     ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \
!    ada/targparm.ads ada/tree_io.ads ada/types.ads ada/uintp.ads \
!    ada/unchconv.ads ada/unchdeal.ads 
  
  ada/bindusg.o : ada/bindusg.ads ada/bindusg.adb ada/gnat.ads \
     ada/g-os_lib.ads ada/g-string.ads ada/osint.ads ada/output.ads \
--- 1204,1211 ----
     ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-strops.ads \
     ada/s-sopco3.ads ada/s-sopco4.ads ada/s-sopco5.ads ada/s-traent.ads \
     ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \
!    ada/targparm.ads ada/tree_io.ads ada/types.ads ada/unchconv.ads \
!    ada/unchdeal.ads 
  
  ada/bindusg.o : ada/bindusg.ads ada/bindusg.adb ada/gnat.ads \
     ada/g-os_lib.ads ada/g-string.ads ada/osint.ads ada/output.ads \
*************** ada/checks.o : ada/ada.ads ada/a-except.
*** 1341,1359 ****
     ada/lib.ads ada/lib.adb ada/lib-list.adb ada/lib-load.ads \
     ada/lib-sort.adb ada/namet.ads ada/nlists.ads ada/nlists.adb \
     ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \
!    ada/rident.ads ada/rtsfind.ads ada/rtsfind.adb ada/sem.ads \
!    ada/sem_cat.ads ada/sem_ch7.ads ada/sem_ch8.ads ada/sem_eval.ads \
!    ada/sem_eval.adb ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads \
!    ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \
!    ada/snames.ads ada/sprint.ads ada/stand.ads ada/stringt.ads \
!    ada/stringt.adb ada/system.ads ada/s-exctab.ads ada/s-htable.ads \
!    ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads \
!    ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \
!    ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \
!    ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \
!    ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads ada/types.ads \
!    ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \
!    ada/unchdeal.ads ada/urealp.ads ada/validsw.ads 
  
  ada/comperr.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \
     ada/atree.adb ada/casing.ads ada/comperr.ads ada/comperr.adb \
--- 1241,1260 ----
     ada/lib.ads ada/lib.adb ada/lib-list.adb ada/lib-load.ads \
     ada/lib-sort.adb ada/namet.ads ada/nlists.ads ada/nlists.adb \
     ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \
!    ada/restrict.adb ada/rident.ads ada/rtsfind.ads ada/rtsfind.adb \
!    ada/sem.ads ada/sem_cat.ads ada/sem_ch7.ads ada/sem_ch8.ads \
!    ada/sem_eval.ads ada/sem_eval.adb ada/sem_res.ads ada/sem_type.ads \
!    ada/sem_util.ads ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb \
!    ada/sinput.ads ada/snames.ads ada/sprint.ads ada/stand.ads \
!    ada/stringt.ads ada/stringt.adb ada/system.ads ada/s-exctab.ads \
!    ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads \
!    ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
!    ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \
!    ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \
!    ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads \
!    ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \
!    ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/urealp.adb \
!    ada/validsw.ads 
  
  ada/comperr.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \
     ada/atree.adb ada/casing.ads ada/comperr.ads ada/comperr.adb \
*************** ada/exp_aggr.o : ada/ada.ads ada/a-excep
*** 1500,1523 ****
     ada/exp_aggr.ads ada/exp_aggr.adb ada/exp_ch11.ads ada/exp_ch2.ads \
     ada/exp_ch3.ads ada/exp_ch7.ads ada/exp_ch9.ads ada/exp_tss.ads \
     ada/exp_util.ads ada/exp_util.adb ada/expander.ads ada/fname.ads \
!    ada/freeze.ads ada/get_targ.ads ada/gnat.ads ada/g-hesora.ads \
!    ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \
!    ada/hostparm.ads ada/inline.ads ada/itypes.ads ada/lib.ads ada/lib.adb \
!    ada/lib-list.adb ada/lib-sort.adb ada/namet.ads ada/nlists.ads \
!    ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \
!    ada/restrict.ads ada/rident.ads ada/rtsfind.ads ada/sem.ads \
!    ada/sem_cat.ads ada/sem_ch3.ads ada/sem_ch8.ads ada/sem_eval.ads \
!    ada/sem_eval.adb ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads \
!    ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \
!    ada/snames.ads ada/sprint.ads ada/stand.ads ada/stringt.ads \
!    ada/stringt.adb ada/system.ads ada/s-exctab.ads ada/s-exctab.adb \
!    ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads \
!    ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
!    ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \
!    ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \
!    ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads \
!    ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \
!    ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/validsw.ads 
  
  ada/exp_attr.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \
     ada/atree.adb ada/casing.ads ada/checks.ads ada/csets.ads ada/debug.ads \
--- 1401,1425 ----
     ada/exp_aggr.ads ada/exp_aggr.adb ada/exp_ch11.ads ada/exp_ch2.ads \
     ada/exp_ch3.ads ada/exp_ch7.ads ada/exp_ch9.ads ada/exp_tss.ads \
     ada/exp_util.ads ada/exp_util.adb ada/expander.ads ada/fname.ads \
!    ada/fname-uf.ads ada/freeze.ads ada/get_targ.ads ada/gnat.ads \
!    ada/g-hesora.ads ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads \
!    ada/gnatvsn.ads ada/hostparm.ads ada/inline.ads ada/itypes.ads \
!    ada/lib.ads ada/lib.adb ada/lib-list.adb ada/lib-sort.adb ada/namet.ads \
!    ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads \
!    ada/output.ads ada/restrict.ads ada/restrict.adb ada/rident.ads \
!    ada/rtsfind.ads ada/sem.ads ada/sem_cat.ads ada/sem_ch3.ads \
!    ada/sem_ch8.ads ada/sem_eval.ads ada/sem_eval.adb ada/sem_res.ads \
!    ada/sem_type.ads ada/sem_util.ads ada/sem_warn.ads ada/sinfo.ads \
!    ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/sprint.ads \
!    ada/stand.ads ada/stringt.ads ada/stringt.adb ada/system.ads \
!    ada/s-exctab.ads ada/s-exctab.adb ada/s-htable.ads ada/s-imgenu.ads \
!    ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \
!    ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \
!    ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \
!    ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tbuild.adb \
!    ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/uintp.ads \
!    ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \
!    ada/urealp.ads ada/validsw.ads 
  
  ada/exp_attr.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \
     ada/atree.adb ada/casing.ads ada/checks.ads ada/csets.ads ada/debug.ads \
*************** ada/exp_ch2.o : ada/ada.ads ada/a-except
*** 1635,1699 ****
  ada/exp_ch3.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \
     ada/atree.adb ada/casing.ads ada/checks.ads ada/checks.adb \
     ada/debug.ads ada/einfo.ads ada/einfo.adb ada/elists.ads ada/elists.adb \
!    ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/exp_aggr.ads \
!    ada/exp_ch11.ads ada/exp_ch2.ads ada/exp_ch3.ads ada/exp_ch3.adb \
!    ada/exp_ch4.ads ada/exp_ch7.ads ada/exp_ch9.ads ada/exp_disp.ads \
!    ada/exp_dist.ads ada/exp_smem.ads ada/exp_strm.ads ada/exp_tss.ads \
!    ada/exp_tss.adb ada/exp_util.ads ada/fname.ads ada/fname-uf.ads \
!    ada/freeze.ads ada/get_targ.ads ada/gnat.ads ada/g-htable.ads \
!    ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads \
!    ada/lib.ads ada/namet.ads ada/nlists.ads ada/nlists.adb ada/nmake.ads \
!    ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \
!    ada/restrict.adb ada/rident.ads ada/rtsfind.ads ada/sem.ads \
!    ada/sem_ch3.ads ada/sem_ch8.ads ada/sem_eval.ads ada/sem_mech.ads \
!    ada/sem_res.ads ada/sem_util.ads ada/sem_warn.ads ada/sinfo.ads \
!    ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/sprint.ads \
!    ada/stand.ads ada/stringt.ads ada/stringt.adb ada/system.ads \
!    ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads \
!    ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \
!    ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \
!    ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \
!    ada/targparm.ads ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads \
!    ada/ttypes.ads ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \
!    ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/validsw.ads 
  
  ada/exp_ch4.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \
     ada/atree.adb ada/casing.ads ada/checks.ads ada/checks.adb \
     ada/debug.ads ada/einfo.ads ada/einfo.adb ada/elists.ads ada/elists.adb \
!    ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/exp_aggr.ads \
!    ada/exp_ch11.ads ada/exp_ch2.ads ada/exp_ch3.ads ada/exp_ch4.ads \
!    ada/exp_ch4.adb ada/exp_ch7.ads ada/exp_ch9.ads ada/exp_disp.ads \
!    ada/exp_fixd.ads ada/exp_pakd.ads ada/exp_tss.ads ada/exp_util.ads \
!    ada/exp_util.adb ada/exp_vfpt.ads ada/freeze.ads ada/get_targ.ads \
!    ada/gnat.ads ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads \
!    ada/gnatvsn.ads ada/hostparm.ads ada/inline.ads ada/itypes.ads \
!    ada/lib.ads ada/namet.ads ada/nlists.ads ada/nlists.adb ada/nmake.ads \
!    ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \
     ada/rident.ads ada/rtsfind.ads ada/sem.ads ada/sem_cat.ads \
!    ada/sem_ch13.ads ada/sem_ch8.ads ada/sem_eval.ads ada/sem_res.ads \
!    ada/sem_type.ads ada/sem_util.ads ada/sem_warn.ads ada/sinfo.ads \
!    ada/sinfo.adb ada/sinfo-cn.ads ada/sinput.ads ada/snames.ads \
!    ada/sprint.ads ada/stand.ads ada/stringt.ads ada/system.ads \
!    ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads \
!    ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \
!    ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \
!    ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \
!    ada/targparm.ads ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads \
!    ada/ttypes.ads ada/types.ads ada/uintp.ads ada/uintp.adb \
!    ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/urealp.adb \
!    ada/validsw.ads 
  
  ada/exp_ch5.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \
     ada/atree.adb ada/casing.ads ada/checks.ads ada/checks.adb \
     ada/csets.ads ada/debug.ads ada/einfo.ads ada/einfo.adb ada/elists.ads \
!    ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/exp_aggr.ads \
!    ada/exp_ch11.ads ada/exp_ch2.ads ada/exp_ch5.ads ada/exp_ch5.adb \
!    ada/exp_ch7.ads ada/exp_dbug.ads ada/exp_pakd.ads ada/exp_tss.ads \
!    ada/exp_util.ads ada/exp_util.adb ada/fname.ads ada/fname-uf.ads \
!    ada/freeze.ads ada/get_targ.ads ada/gnat.ads ada/g-htable.ads \
!    ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads \
!    ada/inline.ads ada/interfac.ads ada/itypes.ads ada/lib.ads \
!    ada/lib-xref.ads ada/namet.ads ada/namet.adb ada/nlists.ads \
     ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \
     ada/restrict.ads ada/restrict.adb ada/rident.ads ada/rtsfind.ads \
     ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads \
--- 1537,1602 ----
  ada/exp_ch3.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \
     ada/atree.adb ada/casing.ads ada/checks.ads ada/checks.adb \
     ada/debug.ads ada/einfo.ads ada/einfo.adb ada/elists.ads ada/elists.adb \
!    ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/eval_fat.ads \
!    ada/exp_aggr.ads ada/exp_ch11.ads ada/exp_ch2.ads ada/exp_ch3.ads \
!    ada/exp_ch3.adb ada/exp_ch4.ads ada/exp_ch7.ads ada/exp_ch9.ads \
!    ada/exp_disp.ads ada/exp_dist.ads ada/exp_smem.ads ada/exp_strm.ads \
!    ada/exp_tss.ads ada/exp_tss.adb ada/exp_util.ads ada/fname.ads \
!    ada/fname-uf.ads ada/freeze.ads ada/get_targ.ads ada/gnat.ads \
!    ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \
!    ada/hostparm.ads ada/lib.ads ada/namet.ads ada/nlists.ads \
!    ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \
!    ada/restrict.ads ada/restrict.adb ada/rident.ads ada/rtsfind.ads \
!    ada/sem.ads ada/sem_ch3.ads ada/sem_ch8.ads ada/sem_eval.ads \
!    ada/sem_mech.ads ada/sem_res.ads ada/sem_util.ads ada/sem_warn.ads \
!    ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/snames.ads \
!    ada/sprint.ads ada/stand.ads ada/stringt.ads ada/stringt.adb \
!    ada/system.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads \
!    ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \
!    ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \
!    ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \
!    ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tbuild.adb \
!    ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/uintp.ads \
!    ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \
!    ada/urealp.ads ada/validsw.ads 
  
  ada/exp_ch4.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \
     ada/atree.adb ada/casing.ads ada/checks.ads ada/checks.adb \
     ada/debug.ads ada/einfo.ads ada/einfo.adb ada/elists.ads ada/elists.adb \
!    ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/eval_fat.ads \
!    ada/exp_aggr.ads ada/exp_ch11.ads ada/exp_ch2.ads ada/exp_ch3.ads \
!    ada/exp_ch4.ads ada/exp_ch4.adb ada/exp_ch7.ads ada/exp_ch9.ads \
!    ada/exp_disp.ads ada/exp_fixd.ads ada/exp_pakd.ads ada/exp_tss.ads \
!    ada/exp_util.ads ada/exp_util.adb ada/exp_vfpt.ads ada/freeze.ads \
!    ada/get_targ.ads ada/gnat.ads ada/g-htable.ads ada/g-os_lib.ads \
!    ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads ada/inline.ads \
!    ada/itypes.ads ada/lib.ads ada/namet.ads ada/nlists.ads ada/nlists.adb \
!    ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \
     ada/rident.ads ada/rtsfind.ads ada/sem.ads ada/sem_cat.ads \
!    ada/sem_ch13.ads ada/sem_ch8.ads ada/sem_eval.ads ada/sem_eval.adb \
!    ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads ada/sem_warn.ads \
!    ada/sinfo.ads ada/sinfo.adb ada/sinfo-cn.ads ada/sinput.ads \
!    ada/snames.ads ada/sprint.ads ada/stand.ads ada/stringt.ads \
!    ada/stringt.adb ada/system.ads ada/s-exctab.ads ada/s-htable.ads \
!    ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads \
!    ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \
!    ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \
!    ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \
!    ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads ada/types.ads \
!    ada/uintp.ads ada/uintp.adb ada/unchconv.ads ada/unchdeal.ads \
!    ada/urealp.ads ada/urealp.adb ada/validsw.ads 
  
  ada/exp_ch5.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \
     ada/atree.adb ada/casing.ads ada/checks.ads ada/checks.adb \
     ada/csets.ads ada/debug.ads ada/einfo.ads ada/einfo.adb ada/elists.ads \
!    ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/eval_fat.ads \
!    ada/exp_aggr.ads ada/exp_ch11.ads ada/exp_ch2.ads ada/exp_ch5.ads \
!    ada/exp_ch5.adb ada/exp_ch7.ads ada/exp_dbug.ads ada/exp_pakd.ads \
!    ada/exp_tss.ads ada/exp_util.ads ada/exp_util.adb ada/fname.ads \
!    ada/fname-uf.ads ada/freeze.ads ada/get_targ.ads ada/gnat.ads \
!    ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \
!    ada/hostparm.ads ada/inline.ads ada/interfac.ads ada/itypes.ads \
!    ada/lib.ads ada/lib-xref.ads ada/namet.ads ada/namet.adb ada/nlists.ads \
     ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \
     ada/restrict.ads ada/restrict.adb ada/rident.ads ada/rtsfind.ads \
     ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads \
*************** ada/exp_ch5.o : ada/ada.ads ada/a-except
*** 1714,1749 ****
  
  ada/exp_ch6.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \
     ada/atree.adb ada/casing.ads ada/checks.ads ada/checks.adb \
!    ada/csets.ads ada/debug.ads ada/debug_a.ads ada/einfo.ads ada/einfo.adb \
!    ada/elists.ads ada/elists.adb ada/err_vars.ads ada/errout.ads \
!    ada/erroutc.ads ada/exp_ch11.ads ada/exp_ch2.ads ada/exp_ch3.ads \
     ada/exp_ch6.ads ada/exp_ch6.adb ada/exp_ch7.ads ada/exp_ch9.ads \
     ada/exp_dbug.ads ada/exp_disp.ads ada/exp_dist.ads ada/exp_intr.ads \
     ada/exp_pakd.ads ada/exp_tss.ads ada/exp_util.ads ada/exp_util.adb \
!    ada/expander.ads ada/fname.ads ada/freeze.ads ada/get_targ.ads \
     ada/gnat.ads ada/g-hesora.ads ada/g-htable.ads ada/g-os_lib.ads \
     ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads ada/inline.ads \
     ada/interfac.ads ada/itypes.ads ada/lib.ads ada/lib.adb \
     ada/lib-list.adb ada/lib-sort.adb ada/lib-xref.ads ada/namet.ads \
     ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb \
!    ada/opt.ads ada/output.ads ada/restrict.ads ada/rident.ads \
!    ada/rtsfind.ads ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb \
!    ada/sem.ads ada/sem_aggr.ads ada/sem_attr.ads ada/sem_cat.ads \
!    ada/sem_ch12.ads ada/sem_ch13.ads ada/sem_ch4.ads ada/sem_ch6.ads \
!    ada/sem_ch8.ads ada/sem_disp.ads ada/sem_dist.ads ada/sem_elab.ads \
!    ada/sem_eval.ads ada/sem_intr.ads ada/sem_res.ads ada/sem_res.adb \
!    ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads \
!    ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/snames.ads \
!    ada/sprint.ads ada/stand.ads ada/stringt.ads ada/style.ads \
!    ada/styleg.ads ada/styleg.adb ada/styleg-c.ads ada/stylesw.ads \
!    ada/system.ads ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads \
!    ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads \
!    ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \
!    ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \
!    ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \
!    ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads ada/types.ads \
!    ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \
!    ada/unchdeal.ads ada/urealp.ads ada/validsw.ads ada/widechar.ads 
  
  ada/exp_ch7.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \
     ada/atree.adb ada/casing.ads ada/checks.ads ada/debug.ads ada/einfo.ads \
--- 1617,1651 ----
  
  ada/exp_ch6.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \
     ada/atree.adb ada/casing.ads ada/checks.ads ada/checks.adb \
!    ada/csets.ads ada/debug.ads ada/einfo.ads ada/einfo.adb ada/elists.ads \
!    ada/elists.adb ada/err_vars.ads ada/errout.ads ada/erroutc.ads \
!    ada/eval_fat.ads ada/exp_ch11.ads ada/exp_ch2.ads ada/exp_ch3.ads \
     ada/exp_ch6.ads ada/exp_ch6.adb ada/exp_ch7.ads ada/exp_ch9.ads \
     ada/exp_dbug.ads ada/exp_disp.ads ada/exp_dist.ads ada/exp_intr.ads \
     ada/exp_pakd.ads ada/exp_tss.ads ada/exp_util.ads ada/exp_util.adb \
!    ada/fname.ads ada/fname-uf.ads ada/freeze.ads ada/get_targ.ads \
     ada/gnat.ads ada/g-hesora.ads ada/g-htable.ads ada/g-os_lib.ads \
     ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads ada/inline.ads \
     ada/interfac.ads ada/itypes.ads ada/lib.ads ada/lib.adb \
     ada/lib-list.adb ada/lib-sort.adb ada/lib-xref.ads ada/namet.ads \
     ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb \
!    ada/opt.ads ada/output.ads ada/restrict.ads ada/restrict.adb \
!    ada/rident.ads ada/rtsfind.ads ada/scans.ads ada/scn.ads ada/scng.ads \
!    ada/scng.adb ada/sem.ads ada/sem_ch12.ads ada/sem_ch13.ads \
!    ada/sem_ch6.ads ada/sem_ch8.ads ada/sem_disp.ads ada/sem_dist.ads \
!    ada/sem_eval.ads ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads \
!    ada/sem_util.adb ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb \
!    ada/sinput.ads ada/snames.ads ada/sprint.ads ada/stand.ads \
!    ada/stringt.ads ada/style.ads ada/styleg.ads ada/styleg.adb \
!    ada/styleg-c.ads ada/stylesw.ads ada/system.ads ada/s-crc32.ads \
!    ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads \
!    ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \
!    ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \
!    ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \
!    ada/targparm.ads ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads \
!    ada/ttypes.ads ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \
!    ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/validsw.ads \
!    ada/widechar.ads 
  
  ada/exp_ch7.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \
     ada/atree.adb ada/casing.ads ada/checks.ads ada/debug.ads ada/einfo.ads \
*************** ada/exp_ch7.o : ada/ada.ads ada/a-except
*** 1751,1760 ****
     ada/erroutc.ads ada/exp_ch11.ads ada/exp_ch7.ads ada/exp_ch7.adb \
     ada/exp_ch9.ads ada/exp_dbug.ads ada/exp_tss.ads ada/exp_util.ads \
     ada/exp_util.adb ada/fname.ads ada/fname-uf.ads ada/freeze.ads \
!    ada/get_targ.ads ada/gnat.ads ada/g-hesora.ads ada/g-htable.ads \
!    ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads \
!    ada/inline.ads ada/itypes.ads ada/lib.ads ada/lib.adb ada/lib-list.adb \
!    ada/lib-sort.adb ada/namet.ads ada/nlists.ads ada/nlists.adb \
     ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \
     ada/restrict.adb ada/rident.ads ada/rtsfind.ads ada/sem.ads \
     ada/sem_ch3.ads ada/sem_ch7.ads ada/sem_ch8.ads ada/sem_eval.ads \
--- 1653,1661 ----
     ada/erroutc.ads ada/exp_ch11.ads ada/exp_ch7.ads ada/exp_ch7.adb \
     ada/exp_ch9.ads ada/exp_dbug.ads ada/exp_tss.ads ada/exp_util.ads \
     ada/exp_util.adb ada/fname.ads ada/fname-uf.ads ada/freeze.ads \
!    ada/get_targ.ads ada/gnat.ads ada/g-htable.ads ada/g-os_lib.ads \
!    ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads ada/inline.ads \
!    ada/itypes.ads ada/lib.ads ada/namet.ads ada/nlists.ads ada/nlists.adb \
     ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \
     ada/restrict.adb ada/rident.ads ada/rtsfind.ads ada/sem.ads \
     ada/sem_ch3.ads ada/sem_ch7.ads ada/sem_ch8.ads ada/sem_eval.ads \
*************** ada/exp_intr.o : ada/ada.ads ada/a-excep
*** 1978,2002 ****
  ada/exp_pakd.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \
     ada/atree.adb ada/casing.ads ada/checks.ads ada/checks.adb \
     ada/debug.ads ada/einfo.ads ada/einfo.adb ada/elists.ads \
!    ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/exp_ch11.ads \
!    ada/exp_ch2.ads ada/exp_ch7.ads ada/exp_dbug.ads ada/exp_pakd.ads \
!    ada/exp_pakd.adb ada/exp_tss.ads ada/exp_util.ads ada/exp_util.adb \
!    ada/freeze.ads ada/get_targ.ads ada/gnat.ads ada/g-htable.ads \
!    ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads \
!    ada/inline.ads ada/itypes.ads ada/lib.ads ada/namet.ads ada/nlists.ads \
!    ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \
!    ada/restrict.ads ada/rident.ads ada/rtsfind.ads ada/sem.ads \
!    ada/sem_ch13.ads ada/sem_ch3.ads ada/sem_ch8.ads ada/sem_eval.ads \
!    ada/sem_res.ads ada/sem_util.ads ada/sem_warn.ads ada/sinfo.ads \
!    ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/sprint.ads \
!    ada/stand.ads ada/stringt.ads ada/system.ads ada/s-exctab.ads \
!    ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads \
!    ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
!    ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \
!    ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \
!    ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads \
!    ada/types.ads ada/uintp.ads ada/uintp.adb ada/unchconv.ads \
!    ada/unchdeal.ads ada/urealp.ads ada/validsw.ads 
  
  ada/exp_prag.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \
     ada/atree.adb ada/casing.ads ada/casing.adb ada/csets.ads ada/debug.ads \
--- 1879,1904 ----
  ada/exp_pakd.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \
     ada/atree.adb ada/casing.ads ada/checks.ads ada/checks.adb \
     ada/debug.ads ada/einfo.ads ada/einfo.adb ada/elists.ads \
!    ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/eval_fat.ads \
!    ada/exp_ch11.ads ada/exp_ch2.ads ada/exp_ch7.ads ada/exp_dbug.ads \
!    ada/exp_pakd.ads ada/exp_pakd.adb ada/exp_tss.ads ada/exp_util.ads \
!    ada/exp_util.adb ada/freeze.ads ada/get_targ.ads ada/gnat.ads \
!    ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \
!    ada/hostparm.ads ada/inline.ads ada/itypes.ads ada/lib.ads \
!    ada/namet.ads ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb \
!    ada/opt.ads ada/output.ads ada/restrict.ads ada/rident.ads \
!    ada/rtsfind.ads ada/sem.ads ada/sem_ch13.ads ada/sem_ch3.ads \
!    ada/sem_ch8.ads ada/sem_eval.ads ada/sem_res.ads ada/sem_util.ads \
!    ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \
!    ada/snames.ads ada/sprint.ads ada/stand.ads ada/stringt.ads \
!    ada/system.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads \
!    ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \
!    ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \
!    ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \
!    ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tbuild.adb \
!    ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/uintp.ads \
!    ada/uintp.adb ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads \
!    ada/validsw.ads 
  
  ada/exp_prag.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \
     ada/atree.adb ada/casing.ads ada/casing.adb ada/csets.ads ada/debug.ads \
*************** ada/fname-uf.o : ada/ada.ads ada/a-excep
*** 2145,2152 ****
     ada/system.ads ada/s-exctab.ads ada/s-htable.ads ada/s-htable.adb \
     ada/s-memory.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \
     ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \
!    ada/table.adb ada/tree_io.ads ada/types.ads ada/unchconv.ads \
!    ada/unchdeal.ads ada/widechar.ads 
  
  ada/fname.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/debug.ads \
     ada/fname.ads ada/fname.adb ada/gnat.ads ada/g-os_lib.ads \
--- 2047,2054 ----
     ada/system.ads ada/s-exctab.ads ada/s-htable.ads ada/s-htable.adb \
     ada/s-memory.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \
     ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \
!    ada/table.adb ada/tree_io.ads ada/types.ads ada/uname.ads \
!    ada/unchconv.ads ada/unchdeal.ads ada/widechar.ads 
  
  ada/fname.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/debug.ads \
     ada/fname.ads ada/fname.adb ada/gnat.ads ada/g-os_lib.ads \
*************** ada/gnatbind.o : ada/ada.ads ada/a-excep
*** 2268,2279 ****
     ada/gnatvsn.ads ada/hostparm.ads ada/namet.ads ada/opt.ads \
     ada/osint.ads ada/osint-b.ads ada/output.ads ada/rident.ads \
     ada/switch.ads ada/switch-b.ads ada/system.ads ada/s-casuti.ads \
!    ada/s-exctab.ads ada/s-htable.ads ada/s-memory.ads ada/s-rident.ads \
!    ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
!    ada/s-stoele.ads ada/s-stoele.adb ada/s-strops.ads ada/s-sopco3.ads \
!    ada/s-sopco4.ads ada/s-sopco5.ads ada/s-traent.ads ada/s-unstyp.ads \
!    ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \
!    ada/tree_io.ads ada/types.ads ada/uintp.ads ada/unchconv.ads \
     ada/unchdeal.ads 
  
  ada/gnatvsn.o : ada/gnatvsn.ads ada/gnatvsn.adb ada/system.ads \
--- 2170,2181 ----
     ada/gnatvsn.ads ada/hostparm.ads ada/namet.ads ada/opt.ads \
     ada/osint.ads ada/osint-b.ads ada/output.ads ada/rident.ads \
     ada/switch.ads ada/switch-b.ads ada/system.ads ada/s-casuti.ads \
!    ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads \
!    ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \
!    ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-strops.ads \
!    ada/s-sopco3.ads ada/s-sopco4.ads ada/s-sopco5.ads ada/s-traent.ads \
!    ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \
!    ada/targparm.ads ada/tree_io.ads ada/types.ads ada/unchconv.ads \
     ada/unchdeal.ads 
  
  ada/gnatvsn.o : ada/gnatvsn.ads ada/gnatvsn.adb ada/system.ads \
*************** ada/lib-load.o : ada/ada.ads ada/a-excep
*** 2381,2390 ****
     ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads \
     ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
     ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \
!    ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \
!    ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/types.ads \
!    ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \
!    ada/unchdeal.ads ada/urealp.ads ada/widechar.ads 
  
  ada/lib-util.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/debug.ads \
     ada/gnat.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \
--- 2283,2292 ----
     ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads \
     ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
     ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \
!    ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tbuild.ads \
!    ada/tbuild.adb ada/tree_io.ads ada/types.ads ada/uintp.ads \
!    ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \
!    ada/urealp.ads ada/widechar.ads 
  
  ada/lib-util.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/debug.ads \
     ada/gnat.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \
*************** ada/osint-b.o : ada/ada.ads ada/a-except
*** 2524,2548 ****
  
  ada/osint-c.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/debug.ads \
     ada/gnat.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \
!    ada/hostparm.ads ada/namet.ads ada/opt.ads ada/osint.ads \
     ada/osint-c.ads ada/osint-c.adb ada/output.ads ada/system.ads \
     ada/s-exctab.ads ada/s-memory.ads ada/s-secsta.ads ada/s-soflin.ads \
     ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \
     ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \
     ada/table.adb ada/tree_io.ads ada/types.ads ada/unchconv.ads \
!    ada/unchdeal.ads 
  
  ada/osint.o : ada/ada.ads ada/a-except.ads ada/a-uncdea.ads ada/alloc.ads \
     ada/debug.ads ada/fmap.ads ada/gnat.ads ada/g-htable.ads \
     ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads \
!    ada/namet.ads ada/opt.ads ada/osint.ads ada/osint.adb ada/output.ads \
!    ada/sdefault.ads ada/system.ads ada/s-casuti.ads ada/s-exctab.ads \
!    ada/s-htable.ads ada/s-htable.adb ada/s-memory.ads ada/s-secsta.ads \
!    ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \
!    ada/s-stoele.adb ada/s-strops.ads ada/s-sopco3.ads ada/s-sopco4.ads \
!    ada/s-sopco5.ads ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \
!    ada/table.ads ada/table.adb ada/tree_io.ads ada/types.ads \
!    ada/unchconv.ads ada/unchdeal.ads 
  
  ada/output.o : ada/gnat.ads ada/g-os_lib.ads ada/g-string.ads \
     ada/output.ads ada/output.adb ada/system.ads ada/s-exctab.ads \
--- 2426,2450 ----
  
  ada/osint-c.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/debug.ads \
     ada/gnat.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \
!    ada/hostparm.ads ada/namet.ads ada/namet.adb ada/opt.ads ada/osint.ads \
     ada/osint-c.ads ada/osint-c.adb ada/output.ads ada/system.ads \
     ada/s-exctab.ads ada/s-memory.ads ada/s-secsta.ads ada/s-soflin.ads \
     ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \
     ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \
     ada/table.adb ada/tree_io.ads ada/types.ads ada/unchconv.ads \
!    ada/unchdeal.ads ada/widechar.ads 
  
  ada/osint.o : ada/ada.ads ada/a-except.ads ada/a-uncdea.ads ada/alloc.ads \
     ada/debug.ads ada/fmap.ads ada/gnat.ads ada/g-htable.ads \
     ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads \
!    ada/namet.ads ada/namet.adb ada/opt.ads ada/osint.ads ada/osint.adb \
!    ada/output.ads ada/sdefault.ads ada/system.ads ada/s-casuti.ads \
!    ada/s-exctab.ads ada/s-htable.ads ada/s-htable.adb ada/s-memory.ads \
!    ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
!    ada/s-stoele.ads ada/s-stoele.adb ada/s-strops.ads ada/s-sopco3.ads \
!    ada/s-sopco4.ads ada/s-sopco5.ads ada/s-traent.ads ada/s-unstyp.ads \
!    ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \
!    ada/types.ads ada/unchconv.ads ada/unchdeal.ads ada/widechar.ads 
  
  ada/output.o : ada/gnat.ads ada/g-os_lib.ads ada/g-string.ads \
     ada/output.ads ada/output.adb ada/system.ads ada/s-exctab.ads \
*************** ada/rtsfind.o : ada/ada.ads ada/a-except
*** 2663,2674 ****
     ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \
     ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/widechar.ads 
  
  ada/s-assert.o : ada/ada.ads ada/a-except.ads ada/system.ads \
     ada/s-assert.ads ada/s-assert.adb ada/s-exctab.ads ada/s-exctab.adb \
     ada/s-htable.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
     ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/unchconv.ads 
  
! ada/s-carun8.o : ada/system.ads ada/s-carun8.ads ada/s-carun8.adb \
     ada/unchconv.ads 
  
  ada/s-casuti.o : ada/system.ads ada/s-casuti.ads ada/s-casuti.adb 
--- 2565,2580 ----
     ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \
     ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/widechar.ads 
  
+ ada/s-addope.o : ada/system.ads ada/s-addope.ads ada/s-addope.adb \
+    ada/unchconv.ads 
+ 
  ada/s-assert.o : ada/ada.ads ada/a-except.ads ada/system.ads \
     ada/s-assert.ads ada/s-assert.adb ada/s-exctab.ads ada/s-exctab.adb \
     ada/s-htable.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
     ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/unchconv.ads 
  
! ada/s-carun8.o : ada/system.ads ada/s-addope.ads ada/s-addope.adb \
!    ada/s-carun8.ads ada/s-carun8.adb ada/s-stoele.ads ada/s-stoele.adb \
     ada/unchconv.ads 
  
  ada/s-casuti.o : ada/system.ads ada/s-casuti.ads ada/s-casuti.adb 
*************** ada/s-sopco5.o : ada/system.ads ada/s-se
*** 2727,2736 ****
     ada/s-stoele.adb ada/s-strops.ads ada/s-sopco3.ads ada/s-sopco4.ads \
     ada/s-sopco5.ads ada/s-sopco5.adb ada/unchconv.ads 
  
! ada/s-stache.o : ada/ada.ads ada/a-except.ads ada/system.ads \
!    ada/s-crtl.ads ada/s-parame.ads ada/s-soflin.ads ada/s-stache.ads \
!    ada/s-stache.adb ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \
!    ada/s-traent.ads ada/unchconv.ads 
  
  ada/s-stalib.o : ada/ada.ads ada/a-except.ads ada/system.ads \
     ada/s-memory.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
--- 2633,2640 ----
     ada/s-stoele.adb ada/s-strops.ads ada/s-sopco3.ads ada/s-sopco4.ads \
     ada/s-sopco5.ads ada/s-sopco5.adb ada/unchconv.ads 
  
! ada/s-stache.o : ada/system.ads ada/s-stache.ads ada/s-stache.adb \
!    ada/s-stoele.ads ada/s-stoele.adb ada/unchconv.ads 
  
  ada/s-stalib.o : ada/ada.ads ada/a-except.ads ada/system.ads \
     ada/s-memory.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
*************** ada/sem_ch13.o : ada/ada.ads ada/a-excep
*** 3003,3012 ****
     ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads \
     ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \
     ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \
!    ada/table.ads ada/table.adb ada/tbuild.ads ada/tbuild.adb \
!    ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/uintp.ads \
!    ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \
!    ada/urealp.ads ada/urealp.adb 
  
  ada/sem_ch2.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \
     ada/atree.adb ada/casing.ads ada/debug.ads ada/einfo.ads ada/elists.ads \
--- 2907,2916 ----
     ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads \
     ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \
     ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \
!    ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \
!    ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads ada/types.ads \
!    ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \
!    ada/unchdeal.ads ada/urealp.ads ada/urealp.adb 
  
  ada/sem_ch2.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \
     ada/atree.adb ada/casing.ads ada/debug.ads ada/einfo.ads ada/elists.ads \
*************** ada/sem_ch4.o : ada/ada.ads ada/a-except
*** 3063,3071 ****
     ada/debug_a.ads ada/einfo.ads ada/einfo.adb ada/elists.ads \
     ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/exp_ch7.ads \
     ada/exp_tss.ads ada/exp_util.ads ada/expander.ads ada/fname.ads \
!    ada/freeze.ads ada/get_targ.ads ada/gnat.ads ada/g-htable.ads \
!    ada/g-os_lib.ads ada/g-speche.ads ada/g-string.ads ada/gnatvsn.ads \
!    ada/hostparm.ads ada/interfac.ads ada/itypes.ads ada/lib.ads \
     ada/lib-xref.ads ada/namet.ads ada/namet.adb ada/nlists.ads \
     ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \
     ada/restrict.ads ada/rident.ads ada/rtsfind.ads ada/scans.ads \
--- 2967,2976 ----
     ada/debug_a.ads ada/einfo.ads ada/einfo.adb ada/elists.ads \
     ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/exp_ch7.ads \
     ada/exp_tss.ads ada/exp_util.ads ada/expander.ads ada/fname.ads \
!    ada/freeze.ads ada/get_targ.ads ada/gnat.ads ada/g-hesora.ads \
!    ada/g-htable.ads ada/g-os_lib.ads ada/g-speche.ads ada/g-string.ads \
!    ada/gnatvsn.ads ada/hostparm.ads ada/interfac.ads ada/itypes.ads \
!    ada/lib.ads ada/lib.adb ada/lib-list.adb ada/lib-sort.adb \
     ada/lib-xref.ads ada/namet.ads ada/namet.adb ada/nlists.ads \
     ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \
     ada/restrict.ads ada/rident.ads ada/rtsfind.ads ada/scans.ads \
*************** ada/sem_ch4.o : ada/ada.ads ada/a-except
*** 3083,3090 ****
     ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \
     ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \
     ada/tbuild.ads ada/tree_io.ads ada/ttypes.ads ada/types.ads \
!    ada/uintp.ads ada/uintp.adb ada/unchconv.ads ada/unchdeal.ads \
!    ada/urealp.ads ada/widechar.ads 
  
  ada/sem_ch5.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \
     ada/atree.adb ada/casing.ads ada/checks.ads ada/checks.adb \
--- 2988,2995 ----
     ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \
     ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \
     ada/tbuild.ads ada/tree_io.ads ada/ttypes.ads ada/types.ads \
!    ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \
!    ada/unchdeal.ads ada/urealp.ads ada/widechar.ads 
  
  ada/sem_ch5.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \
     ada/atree.adb ada/casing.ads ada/checks.ads ada/checks.adb \
*************** ada/sem_ch7.o : ada/ada.ads ada/a-except
*** 3156,3176 ****
     ada/namet.ads ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads \
     ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \
     ada/rident.ads ada/rtsfind.ads ada/scans.ads ada/scn.ads ada/scng.ads \
!    ada/scng.adb ada/sem.ads ada/sem_cat.ads ada/sem_ch12.ads \
!    ada/sem_ch3.ads ada/sem_ch6.ads ada/sem_ch7.ads ada/sem_ch7.adb \
!    ada/sem_ch8.ads ada/sem_eval.ads ada/sem_res.ads ada/sem_type.ads \
!    ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads ada/sinfo.ads \
!    ada/sinfo.adb ada/sinput.ads ada/sinput.adb ada/snames.ads \
!    ada/snames.adb ada/stand.ads ada/stringt.ads ada/style.ads \
!    ada/styleg.ads ada/styleg.adb ada/styleg-c.ads ada/stylesw.ads \
!    ada/system.ads ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads \
!    ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads \
!    ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \
!    ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \
!    ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \
!    ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/uintp.ads \
!    ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \
!    ada/urealp.ads ada/widechar.ads 
  
  ada/sem_ch8.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \
     ada/atree.adb ada/casing.ads ada/checks.ads ada/csets.ads ada/debug.ads \
--- 3061,3081 ----
     ada/namet.ads ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads \
     ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \
     ada/rident.ads ada/rtsfind.ads ada/scans.ads ada/scn.ads ada/scng.ads \
!    ada/scng.adb ada/sem.ads ada/sem_cat.ads ada/sem_ch10.ads \
!    ada/sem_ch12.ads ada/sem_ch3.ads ada/sem_ch6.ads ada/sem_ch7.ads \
!    ada/sem_ch7.adb ada/sem_ch8.ads ada/sem_eval.ads ada/sem_res.ads \
!    ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads \
!    ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/sinput.adb \
!    ada/snames.ads ada/snames.adb ada/stand.ads ada/stringt.ads \
!    ada/style.ads ada/styleg.ads ada/styleg.adb ada/styleg-c.ads \
!    ada/stylesw.ads ada/system.ads ada/s-crc32.ads ada/s-exctab.ads \
!    ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads \
!    ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
!    ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \
!    ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \
!    ada/tbuild.ads ada/tree_io.ads ada/ttypes.ads ada/types.ads \
!    ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \
!    ada/unchdeal.ads ada/urealp.ads ada/widechar.ads 
  
  ada/sem_ch8.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \
     ada/atree.adb ada/casing.ads ada/checks.ads ada/csets.ads ada/debug.ads \
*************** ada/sem_ch9.o : ada/ada.ads ada/a-except
*** 3206,3236 ****
     ada/atree.adb ada/casing.ads ada/checks.ads ada/checks.adb \
     ada/csets.ads ada/debug.ads ada/debug_a.ads ada/einfo.ads ada/einfo.adb \
     ada/elists.ads ada/err_vars.ads ada/errout.ads ada/erroutc.ads \
!    ada/exp_ch2.ads ada/exp_ch7.ads ada/exp_ch9.ads ada/exp_tss.ads \
!    ada/exp_util.ads ada/expander.ads ada/fname.ads ada/fname-uf.ads \
!    ada/freeze.ads ada/get_targ.ads ada/gnat.ads ada/g-htable.ads \
!    ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads \
!    ada/interfac.ads ada/itypes.ads ada/lib.ads ada/lib-xref.ads \
!    ada/namet.ads ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads \
!    ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \
!    ada/restrict.adb ada/rident.ads ada/rtsfind.ads ada/scans.ads \
!    ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads ada/sem_aggr.ads \
!    ada/sem_attr.ads ada/sem_cat.ads ada/sem_ch3.ads ada/sem_ch4.ads \
!    ada/sem_ch5.ads ada/sem_ch6.ads ada/sem_ch8.ads ada/sem_ch9.ads \
!    ada/sem_ch9.adb ada/sem_disp.ads ada/sem_dist.ads ada/sem_elab.ads \
!    ada/sem_eval.ads ada/sem_intr.ads ada/sem_res.ads ada/sem_res.adb \
!    ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads \
!    ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/sinput.adb \
!    ada/snames.ads ada/sprint.ads ada/stand.ads ada/stringt.ads \
!    ada/style.ads ada/styleg.ads ada/styleg.adb ada/styleg-c.ads \
!    ada/stylesw.ads ada/system.ads ada/s-crc32.ads ada/s-exctab.ads \
!    ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads \
!    ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
!    ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \
!    ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \
!    ada/tbuild.ads ada/tree_io.ads ada/ttypes.ads ada/types.ads \
!    ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \
!    ada/unchdeal.ads ada/urealp.ads ada/validsw.ads ada/widechar.ads 
  
  ada/sem_disp.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \
     ada/atree.adb ada/casing.ads ada/checks.ads ada/csets.ads ada/debug.ads \
--- 3111,3142 ----
     ada/atree.adb ada/casing.ads ada/checks.ads ada/checks.adb \
     ada/csets.ads ada/debug.ads ada/debug_a.ads ada/einfo.ads ada/einfo.adb \
     ada/elists.ads ada/err_vars.ads ada/errout.ads ada/erroutc.ads \
!    ada/eval_fat.ads ada/exp_ch2.ads ada/exp_ch7.ads ada/exp_ch9.ads \
!    ada/exp_tss.ads ada/exp_util.ads ada/expander.ads ada/fname.ads \
!    ada/fname-uf.ads ada/freeze.ads ada/get_targ.ads ada/gnat.ads \
!    ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \
!    ada/hostparm.ads ada/interfac.ads ada/itypes.ads ada/lib.ads \
!    ada/lib-xref.ads ada/namet.ads ada/namet.adb ada/nlists.ads \
!    ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \
!    ada/restrict.ads ada/restrict.adb ada/rident.ads ada/rtsfind.ads \
!    ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads \
!    ada/sem_aggr.ads ada/sem_attr.ads ada/sem_cat.ads ada/sem_ch3.ads \
!    ada/sem_ch4.ads ada/sem_ch5.ads ada/sem_ch6.ads ada/sem_ch8.ads \
!    ada/sem_ch9.ads ada/sem_ch9.adb ada/sem_disp.ads ada/sem_dist.ads \
!    ada/sem_elab.ads ada/sem_eval.ads ada/sem_intr.ads ada/sem_res.ads \
!    ada/sem_res.adb ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb \
!    ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \
!    ada/sinput.adb ada/snames.ads ada/sprint.ads ada/stand.ads \
!    ada/stringt.ads ada/style.ads ada/styleg.ads ada/styleg.adb \
!    ada/styleg-c.ads ada/stylesw.ads ada/system.ads ada/s-crc32.ads \
!    ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads \
!    ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \
!    ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \
!    ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \
!    ada/targparm.ads ada/tbuild.ads ada/tree_io.ads ada/ttypes.ads \
!    ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \
!    ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/validsw.ads \
!    ada/widechar.ads 
  
  ada/sem_disp.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \
     ada/atree.adb ada/casing.ads ada/checks.ads ada/csets.ads ada/debug.ads \
*************** ada/sem_elab.o : ada/ada.ads ada/a-excep
*** 3280,3307 ****
     ada/atree.adb ada/casing.ads ada/checks.ads ada/csets.ads ada/debug.ads \
     ada/einfo.ads ada/einfo.adb ada/elists.ads ada/elists.adb \
     ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/exp_tss.ads \
!    ada/exp_util.ads ada/expander.ads ada/fname.ads ada/freeze.ads \
!    ada/get_targ.ads ada/gnat.ads ada/g-hesora.ads ada/g-htable.ads \
!    ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads \
!    ada/interfac.ads ada/lib.ads ada/lib.adb ada/lib-list.adb \
!    ada/lib-load.ads ada/lib-sort.adb ada/lib-xref.ads ada/namet.ads \
!    ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb \
!    ada/opt.ads ada/output.ads ada/restrict.ads ada/rident.ads \
!    ada/rtsfind.ads ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb \
!    ada/sem.ads ada/sem_cat.ads ada/sem_ch7.ads ada/sem_ch8.ads \
!    ada/sem_elab.ads ada/sem_elab.adb ada/sem_eval.ads ada/sem_res.ads \
!    ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb ada/sinfo.ads \
!    ada/sinfo.adb ada/sinput.ads ada/sinput.adb ada/snames.ads \
!    ada/stand.ads ada/stringt.ads ada/style.ads ada/styleg.ads \
!    ada/styleg.adb ada/styleg-c.ads ada/stylesw.ads ada/system.ads \
!    ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads \
!    ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \
!    ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \
!    ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \
!    ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tbuild.adb \
!    ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/uintp.ads \
!    ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \
!    ada/urealp.ads ada/widechar.ads 
  
  ada/sem_elim.o : ada/ada.ads ada/a-except.ads ada/a-uncdea.ads \
     ada/alloc.ads ada/atree.ads ada/atree.adb ada/casing.ads ada/debug.ads \
--- 3186,3213 ----
     ada/atree.adb ada/casing.ads ada/checks.ads ada/csets.ads ada/debug.ads \
     ada/einfo.ads ada/einfo.adb ada/elists.ads ada/elists.adb \
     ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/exp_tss.ads \
!    ada/exp_util.ads ada/expander.ads ada/fname.ads ada/fname-uf.ads \
!    ada/freeze.ads ada/get_targ.ads ada/gnat.ads ada/g-hesora.ads \
!    ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \
!    ada/hostparm.ads ada/interfac.ads ada/lib.ads ada/lib.adb \
!    ada/lib-list.adb ada/lib-load.ads ada/lib-sort.adb ada/lib-xref.ads \
!    ada/namet.ads ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads \
!    ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \
!    ada/restrict.adb ada/rident.ads ada/rtsfind.ads ada/scans.ads \
!    ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads ada/sem_cat.ads \
!    ada/sem_ch7.ads ada/sem_ch8.ads ada/sem_elab.ads ada/sem_elab.adb \
!    ada/sem_eval.ads ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads \
!    ada/sem_util.adb ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \
!    ada/sinput.adb ada/snames.ads ada/stand.ads ada/stringt.ads \
!    ada/style.ads ada/styleg.ads ada/styleg.adb ada/styleg-c.ads \
!    ada/stylesw.ads ada/system.ads ada/s-crc32.ads ada/s-exctab.ads \
!    ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads \
!    ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
!    ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \
!    ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \
!    ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads \
!    ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \
!    ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/widechar.ads 
  
  ada/sem_elim.o : ada/ada.ads ada/a-except.ads ada/a-uncdea.ads \
     ada/alloc.ads ada/atree.ads ada/atree.adb ada/casing.ads ada/debug.ads \
*************** ada/sem_elim.o : ada/ada.ads ada/a-excep
*** 3309,3322 ****
     ada/errout.ads ada/erroutc.ads ada/gnat.ads ada/g-htable.ads \
     ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads \
     ada/namet.ads ada/nlists.ads ada/nlists.adb ada/opt.ads ada/output.ads \
!    ada/sem_elim.ads ada/sem_elim.adb ada/sinfo.ads ada/sinfo.adb \
!    ada/sinput.ads ada/snames.ads ada/stand.ads ada/stringt.ads \
!    ada/system.ads ada/s-exctab.ads ada/s-htable.ads ada/s-htable.adb \
!    ada/s-imgenu.ads ada/s-memory.ads ada/s-secsta.ads ada/s-soflin.ads \
!    ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \
!    ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \
!    ada/table.adb ada/tree_io.ads ada/types.ads ada/uintp.ads ada/uintp.adb \
!    ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads 
  
  ada/sem_eval.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \
     ada/atree.adb ada/casing.ads ada/checks.ads ada/csets.ads ada/debug.ads \
--- 3215,3229 ----
     ada/errout.ads ada/erroutc.ads ada/gnat.ads ada/g-htable.ads \
     ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads \
     ada/namet.ads ada/nlists.ads ada/nlists.adb ada/opt.ads ada/output.ads \
!    ada/sem_elim.ads ada/sem_elim.adb ada/sem_prag.ads ada/sinfo.ads \
!    ada/sinfo.adb ada/sinput.ads ada/sinput.adb ada/snames.ads \
!    ada/stand.ads ada/stringt.ads ada/system.ads ada/s-exctab.ads \
!    ada/s-htable.ads ada/s-htable.adb ada/s-imgenu.ads ada/s-memory.ads \
!    ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
!    ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \
!    ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \
!    ada/types.ads ada/uintp.ads ada/uintp.adb ada/unchconv.ads \
!    ada/unchdeal.ads ada/urealp.ads 
  
  ada/sem_eval.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \
     ada/atree.adb ada/casing.ads ada/checks.ads ada/csets.ads ada/debug.ads \
*************** ada/sem_prag.o : ada/ada.ads ada/a-excep
*** 3399,3431 ****
     ada/elists.ads ada/elists.adb ada/err_vars.ads ada/errout.ads \
     ada/erroutc.ads ada/eval_fat.ads ada/exp_ch7.ads ada/exp_dist.ads \
     ada/exp_tss.ads ada/exp_util.ads ada/expander.ads ada/fname.ads \
!    ada/freeze.ads ada/get_targ.ads ada/gnat.ads ada/g-hesora.ads \
!    ada/g-htable.ads ada/g-os_lib.ads ada/g-speche.ads ada/g-string.ads \
!    ada/gnatvsn.ads ada/hostparm.ads ada/interfac.ads ada/itypes.ads \
!    ada/lib.ads ada/lib.adb ada/lib-list.adb ada/lib-sort.adb \
!    ada/lib-writ.ads ada/lib-xref.ads ada/namet.ads ada/namet.adb \
!    ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads \
!    ada/output.ads ada/restrict.ads ada/rident.ads ada/rtsfind.ads \
!    ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads \
!    ada/sem_aggr.ads ada/sem_attr.ads ada/sem_cat.ads ada/sem_ch13.ads \
!    ada/sem_ch3.ads ada/sem_ch4.ads ada/sem_ch6.ads ada/sem_ch8.ads \
!    ada/sem_disp.ads ada/sem_dist.ads ada/sem_elab.ads ada/sem_elim.ads \
!    ada/sem_eval.ads ada/sem_eval.adb ada/sem_intr.ads ada/sem_mech.ads \
!    ada/sem_prag.ads ada/sem_prag.adb ada/sem_res.ads ada/sem_res.adb \
!    ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb ada/sem_vfpt.ads \
!    ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb ada/sinfo-cn.ads \
!    ada/sinput.ads ada/sinput.adb ada/snames.ads ada/snames.adb \
!    ada/stand.ads ada/stringt.ads ada/stringt.adb ada/style.ads \
!    ada/styleg.ads ada/styleg.adb ada/styleg-c.ads ada/stylesw.ads \
!    ada/system.ads ada/s-carun8.ads ada/s-crc32.ads ada/s-exctab.ads \
!    ada/s-exctab.adb ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads \
!    ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \
!    ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \
!    ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \
!    ada/targparm.ads ada/tbuild.ads ada/tree_io.ads ada/ttypes.ads \
!    ada/types.ads ada/types.adb ada/uintp.ads ada/uintp.adb ada/uname.ads \
!    ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/urealp.adb \
!    ada/validsw.ads ada/widechar.ads 
  
  ada/sem_res.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \
     ada/atree.adb ada/casing.ads ada/checks.ads ada/checks.adb \
--- 3306,3339 ----
     ada/elists.ads ada/elists.adb ada/err_vars.ads ada/errout.ads \
     ada/erroutc.ads ada/eval_fat.ads ada/exp_ch7.ads ada/exp_dist.ads \
     ada/exp_tss.ads ada/exp_util.ads ada/expander.ads ada/fname.ads \
!    ada/fname-uf.ads ada/freeze.ads ada/get_targ.ads ada/gnat.ads \
!    ada/g-hesora.ads ada/g-htable.ads ada/g-os_lib.ads ada/g-speche.ads \
!    ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads ada/interfac.ads \
!    ada/itypes.ads ada/lib.ads ada/lib.adb ada/lib-list.adb \
!    ada/lib-sort.adb ada/lib-writ.ads ada/lib-xref.ads ada/namet.ads \
!    ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb \
!    ada/opt.ads ada/output.ads ada/restrict.ads ada/restrict.adb \
!    ada/rident.ads ada/rtsfind.ads ada/scans.ads ada/scn.ads ada/scng.ads \
!    ada/scng.adb ada/sem.ads ada/sem_aggr.ads ada/sem_attr.ads \
!    ada/sem_cat.ads ada/sem_ch13.ads ada/sem_ch3.ads ada/sem_ch4.ads \
!    ada/sem_ch6.ads ada/sem_ch8.ads ada/sem_disp.ads ada/sem_dist.ads \
!    ada/sem_elab.ads ada/sem_elim.ads ada/sem_eval.ads ada/sem_eval.adb \
!    ada/sem_intr.ads ada/sem_mech.ads ada/sem_prag.ads ada/sem_prag.adb \
!    ada/sem_res.ads ada/sem_res.adb ada/sem_type.ads ada/sem_util.ads \
!    ada/sem_util.adb ada/sem_vfpt.ads ada/sem_warn.ads ada/sinfo.ads \
!    ada/sinfo.adb ada/sinfo-cn.ads ada/sinput.ads ada/sinput.adb \
!    ada/snames.ads ada/snames.adb ada/stand.ads ada/stringt.ads \
!    ada/stringt.adb ada/style.ads ada/styleg.ads ada/styleg.adb \
!    ada/styleg-c.ads ada/stylesw.ads ada/system.ads ada/s-carun8.ads \
!    ada/s-crc32.ads ada/s-exctab.ads ada/s-exctab.adb ada/s-htable.ads \
!    ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads \
!    ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \
!    ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \
!    ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \
!    ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/types.adb \
!    ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \
!    ada/unchdeal.ads ada/urealp.ads ada/urealp.adb ada/validsw.ads \
!    ada/widechar.ads 
  
  ada/sem_res.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \
     ada/atree.adb ada/casing.ads ada/checks.ads ada/checks.adb \
*************** ada/sem_res.o : ada/ada.ads ada/a-except
*** 3433,3461 ****
     ada/einfo.ads ada/einfo.adb ada/elists.ads ada/err_vars.ads \
     ada/errout.ads ada/erroutc.ads ada/eval_fat.ads ada/exp_ch11.ads \
     ada/exp_ch2.ads ada/exp_ch7.ads ada/exp_tss.ads ada/exp_util.ads \
!    ada/exp_util.adb ada/expander.ads ada/fname.ads ada/freeze.ads \
!    ada/get_targ.ads ada/gnat.ads ada/g-hesora.ads ada/g-htable.ads \
!    ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads \
!    ada/inline.ads ada/interfac.ads ada/itypes.ads ada/lib.ads ada/lib.adb \
!    ada/lib-list.adb ada/lib-sort.adb ada/lib-xref.ads ada/namet.ads \
!    ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb \
!    ada/opt.ads ada/output.ads ada/restrict.ads ada/rident.ads \
!    ada/rtsfind.ads ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb \
!    ada/sem.ads ada/sem_aggr.ads ada/sem_attr.ads ada/sem_cat.ads \
!    ada/sem_ch4.ads ada/sem_ch6.ads ada/sem_ch8.ads ada/sem_disp.ads \
!    ada/sem_dist.ads ada/sem_elab.ads ada/sem_eval.ads ada/sem_eval.adb \
!    ada/sem_intr.ads ada/sem_res.ads ada/sem_res.adb ada/sem_type.ads \
!    ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads ada/sinfo.ads \
!    ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/sprint.ads \
!    ada/stand.ads ada/stringt.ads ada/stringt.adb ada/style.ads \
!    ada/styleg.ads ada/styleg.adb ada/styleg-c.ads ada/stylesw.ads \
!    ada/system.ads ada/s-carun8.ads ada/s-crc32.ads ada/s-exctab.ads \
!    ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads \
!    ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
!    ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \
!    ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \
!    ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads \
!    ada/types.ads ada/types.adb ada/uintp.ads ada/uintp.adb ada/uname.ads \
     ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/urealp.adb \
     ada/validsw.ads ada/widechar.ads 
  
--- 3341,3370 ----
     ada/einfo.ads ada/einfo.adb ada/elists.ads ada/err_vars.ads \
     ada/errout.ads ada/erroutc.ads ada/eval_fat.ads ada/exp_ch11.ads \
     ada/exp_ch2.ads ada/exp_ch7.ads ada/exp_tss.ads ada/exp_util.ads \
!    ada/exp_util.adb ada/expander.ads ada/fname.ads ada/fname-uf.ads \
!    ada/freeze.ads ada/get_targ.ads ada/gnat.ads ada/g-hesora.ads \
!    ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \
!    ada/hostparm.ads ada/inline.ads ada/interfac.ads ada/itypes.ads \
!    ada/lib.ads ada/lib.adb ada/lib-list.adb ada/lib-sort.adb \
!    ada/lib-xref.ads ada/namet.ads ada/namet.adb ada/nlists.ads \
!    ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \
!    ada/restrict.ads ada/restrict.adb ada/rident.ads ada/rtsfind.ads \
!    ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads \
!    ada/sem_aggr.ads ada/sem_attr.ads ada/sem_cat.ads ada/sem_ch4.ads \
!    ada/sem_ch6.ads ada/sem_ch8.ads ada/sem_disp.ads ada/sem_dist.ads \
!    ada/sem_elab.ads ada/sem_eval.ads ada/sem_eval.adb ada/sem_intr.ads \
!    ada/sem_res.ads ada/sem_res.adb ada/sem_type.ads ada/sem_util.ads \
!    ada/sem_util.adb ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb \
!    ada/sinput.ads ada/snames.ads ada/sprint.ads ada/stand.ads \
!    ada/stringt.ads ada/stringt.adb ada/style.ads ada/styleg.ads \
!    ada/styleg.adb ada/styleg-c.ads ada/stylesw.ads ada/system.ads \
!    ada/s-carun8.ads ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads \
!    ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads \
!    ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \
!    ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \
!    ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \
!    ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads ada/types.ads \
!    ada/types.adb ada/uintp.ads ada/uintp.adb ada/uname.ads \
     ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/urealp.adb \
     ada/validsw.ads ada/widechar.ads 
  
*************** ada/sem_util.o : ada/ada.ads ada/a-excep
*** 3503,3516 ****
     ada/csets.ads ada/debug.ads ada/einfo.ads ada/einfo.adb ada/elists.ads \
     ada/elists.adb ada/err_vars.ads ada/errout.ads ada/erroutc.ads \
     ada/eval_fat.ads ada/exp_tss.ads ada/exp_util.ads ada/fname.ads \
!    ada/freeze.ads ada/get_targ.ads ada/gnat.ads ada/g-hesora.ads \
!    ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \
!    ada/hostparm.ads ada/interfac.ads ada/lib.ads ada/lib.adb \
!    ada/lib-list.adb ada/lib-sort.adb ada/lib-xref.ads ada/namet.ads \
!    ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb \
!    ada/opt.ads ada/output.ads ada/restrict.ads ada/rident.ads \
!    ada/rtsfind.ads ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb \
!    ada/sem.ads ada/sem_cat.ads ada/sem_ch8.ads ada/sem_eval.ads \
     ada/sem_eval.adb ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads \
     ada/sem_util.adb ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb \
     ada/sinput.ads ada/sinput.adb ada/snames.ads ada/stand.ads \
--- 3412,3426 ----
     ada/csets.ads ada/debug.ads ada/einfo.ads ada/einfo.adb ada/elists.ads \
     ada/elists.adb ada/err_vars.ads ada/errout.ads ada/erroutc.ads \
     ada/eval_fat.ads ada/exp_tss.ads ada/exp_util.ads ada/fname.ads \
!    ada/fname-uf.ads ada/freeze.ads ada/get_targ.ads ada/gnat.ads \
!    ada/g-hesora.ads ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads \
!    ada/gnatvsn.ads ada/hostparm.ads ada/interfac.ads ada/lib.ads \
!    ada/lib.adb ada/lib-list.adb ada/lib-load.ads ada/lib-sort.adb \
!    ada/lib-xref.ads ada/namet.ads ada/namet.adb ada/nlists.ads \
!    ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \
!    ada/restrict.ads ada/rident.ads ada/rtsfind.ads ada/rtsfind.adb \
!    ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads \
!    ada/sem_cat.ads ada/sem_ch7.ads ada/sem_ch8.ads ada/sem_eval.ads \
     ada/sem_eval.adb ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads \
     ada/sem_util.adb ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb \
     ada/sinput.ads ada/sinput.adb ada/snames.ads ada/stand.ads \
*************** ada/sinfo.o : ada/ada.ads ada/a-except.a
*** 3591,3596 ****
--- 3501,3516 ----
     ada/table.adb ada/tree_io.ads ada/types.ads ada/uintp.ads ada/uintp.adb \
     ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads 
  
+ ada/sinput-c.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
+    ada/alloc.ads ada/casing.ads ada/debug.ads ada/gnat.ads \
+    ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads \
+    ada/namet.ads ada/opt.ads ada/output.ads ada/sinput.ads \
+    ada/sinput-c.ads ada/sinput-c.adb ada/system.ads ada/s-exctab.ads \
+    ada/s-memory.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \
+    ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \
+    ada/table.adb ada/tree_io.ads ada/types.ads ada/unchconv.ads \
+    ada/unchdeal.ads 
+ 
  ada/sinput-d.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/casing.ads \
     ada/debug.ads ada/gnat.ads ada/g-os_lib.ads ada/g-string.ads \
     ada/gnatvsn.ads ada/hostparm.ads ada/opt.ads ada/osint.ads \
*************** ada/table.o : ada/debug.ads ada/gnat.ads
*** 3744,3758 ****
     ada/tree_io.ads ada/types.ads ada/unchconv.ads ada/unchdeal.ads 
  
  ada/targparm.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/csets.ads \
!    ada/debug.ads ada/gnat.ads ada/g-htable.ads ada/g-os_lib.ads \
!    ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads ada/namet.ads \
!    ada/namet.adb ada/opt.ads ada/osint.ads ada/output.ads ada/rident.ads \
!    ada/system.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads \
!    ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \
!    ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \
!    ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \
!    ada/table.adb ada/targparm.ads ada/targparm.adb ada/tree_io.ads \
!    ada/types.ads ada/uintp.ads ada/uintp.adb ada/unchconv.ads \
     ada/unchdeal.ads ada/widechar.ads 
  
  ada/tbuild.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \
--- 3664,3677 ----
     ada/tree_io.ads ada/types.ads ada/unchconv.ads ada/unchdeal.ads 
  
  ada/targparm.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/csets.ads \
!    ada/debug.ads ada/gnat.ads ada/g-os_lib.ads ada/g-string.ads \
!    ada/gnatvsn.ads ada/hostparm.ads ada/namet.ads ada/namet.adb \
!    ada/opt.ads ada/osint.ads ada/output.ads ada/rident.ads ada/system.ads \
!    ada/s-exctab.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads \
!    ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
!    ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \
!    ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \
!    ada/targparm.adb ada/tree_io.ads ada/types.ads ada/unchconv.ads \
     ada/unchdeal.ads ada/widechar.ads 
  
  ada/tbuild.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \
diff -Nrcpad gcc-3.4.3/gcc/ada/Makefile.adalib gcc-4.0.0/gcc/ada/Makefile.adalib
*** gcc-3.4.3/gcc/ada/Makefile.adalib	Tue Oct 21 13:41:53 2003
--- gcc-4.0.0/gcc/ada/Makefile.adalib	Thu Jan  1 00:00:00 1970
***************
*** 1,122 ****
- # This is the Unix/NT makefile used to build an alternate GNAT run-time.
- # Note that no files in the original GNAT library dirctory will be
- # modified by this procedure
- #
- # This Makefile requires Gnu make.
- # Here is how to use this Makefile
- #
- # 1. Create a new directory (say adalib)
- #    e.g.  $ mkdir adalib
- #          $ cd adalib           
- #
- # 2. Copy this Makefile from the standard Adalib directory, e.g.
- #    $ cp /usr/local/gnat/lib/gcc-lib/<target>/<version>/adalib/Makefile.adalib .
- #
- # 3. If needed (e.g for pragma Normalize_Scalars), create a gnat.adc
- #    containing the configuration pragmas you want to use to build the library
- #    e.g. $ echo pragma Normalize_Scalars; > gnat.adc
- #    Note that this step is usually not needed, and most pragmas are not
- #    relevant to the GNAT run time. 
- #          
- # 4. Determine the values of the following MACROS
- #      ROOT   (location of GNAT installation, e.g /usr/local/gnat)
- #    and optionnally
- #      CFLAGS (back end compilation flags such as -g -O2)
- #      ADAFLAGS (front end compilation flags such as -gnatpgn)
- #                *beware* the minimum value for this MACRO is -gnatpg 
- #                for proper compilation of the GNAT library
- # 5a. If you are using a native compile, call make
- #   e.g.  $ make -f Makefile.adalib ROOT=/usr/local/gnat CFLAGS="-g -O0"
- #
- # 5b. If you are using a cross compiler, you need to define two additional
- #     MACROS:
- #       CC    (name of the cross compiler)
- #       AR    (name of the cross ar)
- #
- #   e.g.  $ make -f Makefile.adalib ROOT=/opt/gnu/gnat \
- #     CFLAGS="-O2 -g -I/usr/wind/target/h" CC=powerpc-wrs-vxworks-gcc \
- #     AR=arppc
- #
- # 6. put this new library on your Object PATH where you want to use it
- # in place of the original one. This can be achieved for instance by
- # updating the value of the environment variable ADA_OBJECTS_PATH
- 
- PWD_COMMAND=$${PWDCMD-pwd}
- CC = gcc
- AR = ar
- 
- ifeq ($(strip $(filter-out %sh,$(SHELL))),)
-    GNAT_ROOT = $(shell cd $(ROOT);${PWD_COMMAND})/
- else
-    GNAT_ROOT = $(ROOT)/
- endif
- 
- target = $(shell $(CC) -dumpmachine)
- version = $(shell $(CC) -dumpversion)
- ADA_INCLUDE_PATH = $(GNAT_ROOT)lib/gcc-lib/$(target)/$(version)/adainclude/
- GCC_INCLUDE_PATH = $(GNAT_ROOT)lib/gcc-lib/$(target)/$(version)/gcc-include/
- ADA_OBJECTS_PATH = $(GNAT_ROOT)lib/gcc-lib/$(target)/$(version)/adalib/
- 
- vpath %.adb $(ADA_INCLUDE_PATH)
- vpath %.ads $(ADA_INCLUDE_PATH)
- vpath %.c $(ADA_INCLUDE_PATH)
- vpath %.h $(ADA_INCLUDE_PATH)
- 
- CFLAGS = -O2
- GNATLIBCFLAGS = -DIN_RTS=1 -DIN_GCC=1 -fexceptions
- ADAFLAGS = -gnatpgn
- ALL_ADAFLAGS = $(CFLAGS) $(ADAFLAGS) -I. 
- FORCE_DEBUG_ADAFLAGS = -g
- INCLUDES = -I$(ADA_INCLUDE_PATH) -I$(GCC_INCLUDE_PATH)/include   \
- -I$(GCC_INCLUDE_PATH)/gcc/config -I$(GCC_INCLUDE_PATH)/gcc       \
- -I$(GCC_INCLUDE_PATH)/gcc/ada    -I$(GCC_INCLUDE_PATH)
- 
- # Say how to compile Ada programs.
- .SUFFIXES: .ada .adb .ads
- 
- .c.o:
- 	$(CC) -c $(CFLAGS) $(GNATLIBCFLAGS) $(INCLUDES) $<
- .adb.o:
- 	$(CC) -c $(ALL_ADAFLAGS) $<
- .ads.o:
- 	$(CC) -c $(ALL_ADAFLAGS) $<
- 
- GNAT_OBJS :=$(filter-out __%,$(shell $(AR) t $(ADA_OBJECTS_PATH)libgnat.a))
- GNARL_OBJS:=$(filter-out __%,$(shell $(AR) t $(ADA_OBJECTS_PATH)libgnarl.a))
- OBJS := $(GNAT_OBJS) $(GNARL_OBJS)
- 
- all: libgnat.a libgnarl.a delete_objects g-trasym.o
- 	chmod 0444 *.ali *.a
- 
- delete_objects:
- 	rm *.o
- 
- libgnat.a: $(GNAT_OBJS)
- 	$(AR) r libgnat.a $(GNAT_OBJS)
- 
- libgnarl.a: $(GNARL_OBJS)
- 	$(AR) r libgnarl.a $(GNARL_OBJS)
- 
- a-except.o: a-except.adb a-except.ads
- 	$(CC) -c $(FORCE_DEBUG_ADAFLAGS) $(ALL_ADAFLAGS) -O0 -fno-inline $<
- 
- s-assert.o: s-assert.adb s-assert.ads a-except.ads
- 	$(CC) -c $(FORCE_DEBUG_ADAFLAGS) $(ALL_ADAFLAGS) $<
- 
- s-tasdeb.o: s-tasdeb.adb
- 	$(CC) -c $(FORCE_DEBUG_ADAFLAGS) $(ALL_ADAFLAGS) $<
- 
- s-vaflop.o: s-vaflop.adb
- 	$(CC) -c $(FORCE_DEBUG_ADAFLAGS) -O $(ALL_ADAFLAGS) $<
- 
- s-memory.o: s-memory.adb s-memory.ads
- 	$(CC) -c $(ALL_ADAFLAGS) $(FORCE_DEBUG_ADAFLAGS) -O0 $(ADA_INCLUDES) $<
- 
- s-traceb.o: s-traceb.adb
- 	$(CC) -c $(ALL_ADAFLAGS) $(FORCE_DEBUG_ADAFLAGS) -fno-optimize-sibling-calls $(ADA_INCLUDES) $<
- 
- tracebak.o: tracebak.c
- 	$(CC) -c $(CFLAGS) $(GNATLIBCFLAGS) \
- 		$(ALL_CPPFLAGS) $(INCLUDES) -fno-omit-frame-pointer $<
- 
- .PHONY: delete_objects
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/Makefile.generic gcc-4.0.0/gcc/ada/Makefile.generic
*** gcc-3.4.3/gcc/ada/Makefile.generic	Mon Jan 12 11:36:13 2004
--- gcc-4.0.0/gcc/ada/Makefile.generic	Wed Sep  1 11:51:48 2004
***************
*** 9,20 ****
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 2, or (at your option)
  # any later version.
!  
  # GCC is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
!  
  # You should have received a copy of the GNU General Public License
  # along with GCC; see the file COPYING.  If not, write to
  # the Free Software Foundation, 59 Temple Place - Suite 330,
--- 9,20 ----
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 2, or (at your option)
  # any later version.
! 
  # GCC is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
! 
  # You should have received a copy of the GNU General Public License
  # along with GCC; see the file COPYING.  If not, write to
  # the Free Software Foundation, 59 Temple Place - Suite 330,
***************
*** 64,70 ****
  # CXX              name of the C++ compiler (optional, default to gcc)
  # AR_CMD           command to create an archive (optional, default to "ar rc")
  # AR_EXT           file extension of an archive (optional, default to ".a")
! # RANLIB        command to generate an index (optional, default to "ranlib")
  # GNATMAKE         name of the GNAT builder (optional, default to "gnatmake")
  # ADAFLAGS         additional Ada compilation switches, e.g "-gnatf" (optional)
  # CFLAGS           default C compilation switches, e.g "-O2 -g" (optional)
--- 64,70 ----
  # CXX              name of the C++ compiler (optional, default to gcc)
  # AR_CMD           command to create an archive (optional, default to "ar rc")
  # AR_EXT           file extension of an archive (optional, default to ".a")
! # RANLIB           command to generate an index (optional, default to "ranlib")
  # GNATMAKE         name of the GNAT builder (optional, default to "gnatmake")
  # ADAFLAGS         additional Ada compilation switches, e.g "-gnatf" (optional)
  # CFLAGS           default C compilation switches, e.g "-O2 -g" (optional)
***************
*** 78,83 ****
--- 78,86 ----
  # PROJECT_FILE     name of the project file, without the .gpr extension
  # DEPS_PROJECTS    list of project dependencies (optional)
  
+ # SILENT           (optional) when defined, make -s will not output anything
+ #                  when all commands are successful.
+ 
  # Set the source search path for C and C++ if needed
  
  ifndef MAIN
*************** ifndef RANLIB
*** 124,130 ****
  endif
  
  ifndef GNATMAKE
!    GNATMAKE=gnatmake
  endif
  
  ifndef ARCHIVE
--- 127,133 ----
  endif
  
  ifndef GNATMAKE
!    GNATMAKE:=gnatmake
  endif
  
  ifndef ARCHIVE
*************** ifeq ($(EXEC_DIR),)
*** 135,140 ****
--- 138,176 ----
     EXEC_DIR=$(OBJ_DIR)
  endif
  
+ # Define display to echo only when SILENT is not defined
+ 
+ ifdef SILENT
+ define display
+    @gprcmd ignore
+ endef
+ 
+ else
+ define display
+    @echo
+ endef
+ endif
+ 
+ # Make sure gnatmake is called silently when SILENT is set
+ ifdef SILENT
+    GNATMAKE:=$(GNATMAKE) -q
+ endif
+ 
+ # If C/C++ compiler is gcc, make sure gcc is called with the switch indicating
+ # the language, in case the extension is not standard.
+ 
+ ifeq ($(strip $(filter-out %gcc,$(CC))),)
+    C_Compiler=$(CC) -x c
+ else
+    C_Compiler=$(CC)
+ endif
+ 
+ ifeq ($(strip $(filter-out %gcc %g++,$(CXX))),)
+    CXX_Compiler=$(CXX) -x c++
+ else
+    CXX_Compiler=$(CXX)
+ endif
+ 
  # Set the object search path
  
  vpath %$(OBJ_EXT) $(OBJ_DIR)
*************** vpath %$(AR_EXT) $(OBJ_DIR)
*** 145,156 ****
  # character be part of a pathname on UNIX and this character can't be used in
  # a pathname on Windows.
  
! clean_deps = $(subst :,|,$(DEPS_PROJECTS:%=clean_%))
! compile_deps = $(subst :,|,$(DEPS_PROJECTS:%=compile_%))
! object_deps = $(subst :,|,$(DEPS_PROJECTS:%=object_%))
! ada_deps = $(subst :,|,$(DEPS_PROJECTS:%=ada_%))
! c_deps = $(subst :,|,$(DEPS_PROJECTS:%=c_%))
! c++_deps = $(subst :,|,$(DEPS_PROJECTS:%=c++_%))
  
  # Default target is to build (compile/bind/link)
  all: build
--- 181,192 ----
  # character be part of a pathname on UNIX and this character can't be used in
  # a pathname on Windows.
  
! clean_deps = $(subst :,__GPRCOLON__,$(DEPS_PROJECTS:%=clean_%))
! compile_deps = $(subst :,__GPRCOLON__,$(DEPS_PROJECTS:%=compile_%))
! object_deps = $(subst :,__GPRCOLON__,$(DEPS_PROJECTS:%=object_%))
! ada_deps = $(subst :,__GPRCOLON__,$(DEPS_PROJECTS:%=ada_%))
! c_deps = $(subst :,__GPRCOLON__,$(DEPS_PROJECTS:%=c_%))
! c++_deps = $(subst :,__GPRCOLON__,$(DEPS_PROJECTS:%=c++_%))
  
  # Default target is to build (compile/bind/link)
  all: build
*************** c: $(c_deps) internal-c
*** 164,185 ****
  c++: $(c++deps) internal-c++
  
  $(clean_deps): force
! 	@$(MAKE) -C $(dir $(subst |,:,$(@:clean_%=%))) -f Makefile.$(notdir $@) internal-clean
  
  $(compile_deps): force
! 	@$(MAKE) -C $(dir $(subst |,:,$(@:compile_%=%))) -f Makefile.$(notdir $@) internal-compile
  
  $(object_deps): force
! 	@$(MAKE) -C $(dir $(subst |,:,$(@:object_%=%))) -f Makefile.$(notdir $@) internal-archive-objects ARCHIVE=$(ARCHIVE)
  
  $(ada_deps): force
! 	@$(MAKE) -C $(dir $(subst |,:,$(@:ada_%=%))) -f Makefile.$(notdir $@) internal-ada
  
  $(c_deps): force
! 	@$(MAKE) -C $(dir $(subst |,:,$(@:c_%=%))) -f Makefile.$(notdir $@) internal-c
  
  $(c++_deps): force
! 	@$(MAKE) -C $(dir $(subst |,:,$(@:c++_%=%))) -f Makefile.$(notdir $@) internal-c++
  
  ifneq ($(EXEC),)
     EXEC_RULE=-o $(EXEC)
--- 200,221 ----
  c++: $(c++deps) internal-c++
  
  $(clean_deps): force
! 	@$(MAKE) -C $(dir $(subst __GPRCOLON__,:,$(@:clean_%=%))) -f Makefile.$(notdir $@) internal-clean
  
  $(compile_deps): force
! 	@$(MAKE) -C $(dir $(subst __GPRCOLON__,:,$(@:compile_%=%))) -f Makefile.$(notdir $@) internal-compile
  
  $(object_deps): force
! 	@$(MAKE) -C $(dir $(subst __GPRCOLON__,:,$(@:object_%=%))) -f Makefile.$(notdir $@) internal-archive-objects ARCHIVE=$(ARCHIVE)
  
  $(ada_deps): force
! 	@$(MAKE) -C $(dir $(subst __GPRCOLON__,:,$(@:ada_%=%))) -f Makefile.$(notdir $@) internal-ada
  
  $(c_deps): force
! 	@$(MAKE) -C $(dir $(subst __GPRCOLON__,:,$(@:c_%=%))) -f Makefile.$(notdir $@) internal-c
  
  $(c++_deps): force
! 	@$(MAKE) -C $(dir $(subst __GPRCOLON__,:,$(@:c++_%=%))) -f Makefile.$(notdir $@) internal-c++
  
  ifneq ($(EXEC),)
     EXEC_RULE=-o $(EXEC)
*************** ifeq ($(filter c++,$(LANGUAGES)),c++)
*** 194,213 ****
  
     ifeq ($(filter ada,$(LANGUAGES)),ada)
        # C++ and Ada mixed
-       LINKER = $(OBJ_DIR)/c++linker
        LARGS = --LINK=$(LINKER)
  
        ifeq ($(strip $(filter-out %gcc %g++,$(CXX))),)
!          # Case of GNU C++ and GNAT
! 
! $(LINKER): Makefile.$(PROJECT_BASE)
! 	@echo \#!/bin/sh > $(LINKER)
! 	@echo unset BINUTILS_ROOT >> $(LINKER)
! 	@echo unset GCC_ROOT >> $(LINKER)
! 	@echo $(CXX) $$\* >> $(LINKER)
! 	@chmod +x $(LINKER)
  
        else
  $(LINKER): Makefile.$(PROJECT_BASE)
  	@echo \#!/bin/sh > $(LINKER)
  	@echo $(CXX) $$\* $(shell gcc -print-libgcc-file-name) >> $(LINKER)
--- 230,245 ----
  
     ifeq ($(filter ada,$(LANGUAGES)),ada)
        # C++ and Ada mixed
        LARGS = --LINK=$(LINKER)
  
        ifeq ($(strip $(filter-out %gcc %g++,$(CXX))),)
!          # Case of GNAT and a GNU C++ compiler
! $(LINKER):
  
        else
+          # Case of GNAT and a non GNU C++ compiler
+          LINKER = $(OBJ_DIR)/c++linker
+ 
  $(LINKER): Makefile.$(PROJECT_BASE)
  	@echo \#!/bin/sh > $(LINKER)
  	@echo $(CXX) $$\* $(shell gcc -print-libgcc-file-name) >> $(LINKER)
*************** else
*** 222,229 ****
  endif
  
  C_INCLUDES := $(foreach name,$(SRC_DIRS),-I$(name))
! ALL_CFLAGS = $(CFLAGS) $(C_INCLUDES) $(DEP_CFLAGS)
! ALL_CXXFLAGS = $(CXXFLAGS) $(C_INCLUDES) $(DEP_CFLAGS)
  LDFLAGS := $(LIBS) $(LDFLAGS)
  
  # Compute list of objects based on languages
--- 254,261 ----
  endif
  
  C_INCLUDES := $(foreach name,$(SRC_DIRS),-I$(name))
! ALL_CFLAGS = $(CFLAGS) $(DEP_CFLAGS)
! ALL_CXXFLAGS = $(CXXFLAGS) $(DEP_CFLAGS)
  LDFLAGS := $(LIBS) $(LDFLAGS)
  
  # Compute list of objects based on languages
*************** else
*** 276,282 ****
  internal-compile: lib$(PROJECT_BASE)$(AR_EXT)
  
  lib$(PROJECT_BASE)$(AR_EXT): $(OBJECTS)
! 	@echo creating archive file for $(PROJECT_BASE)
  	cd $(OBJ_DIR); $(AR_CMD) $@ $(strip $(OBJECTS))
  	-$(RANLIB) $(OBJ_DIR)/$@
  
--- 308,314 ----
  internal-compile: lib$(PROJECT_BASE)$(AR_EXT)
  
  lib$(PROJECT_BASE)$(AR_EXT): $(OBJECTS)
! 	@$(display) creating archive file for $(PROJECT_BASE)
  	cd $(OBJ_DIR); $(AR_CMD) $@ $(strip $(OBJECTS))
  	-$(RANLIB) $(OBJ_DIR)/$@
  
*************** link:
*** 312,320 ****
  else
  
  link: $(EXEC_DIR)/$(EXEC) archive-objects
! $(EXEC_DIR)/$(EXEC): $(OBJ_FILES)
! 	@echo $(LINKER) -o $(EXEC_DIR)/$(EXEC) $(OBJ_DIR)/$(MAIN_OBJECT) $(LDFLAGS)
! 	$(LINKER) -o $(EXEC_DIR)/$(EXEC) $(OBJ_DIR)/$(MAIN_OBJECT) $(LDFLAGS)
  endif
  endif
  
--- 344,352 ----
  else
  
  link: $(EXEC_DIR)/$(EXEC) archive-objects
! $(EXEC_DIR)/$(EXEC): $(OBJECTS)
! 	@$(display) $(LINKER) -o $(EXEC_DIR)/$(EXEC) $(OBJ_DIR)/$(MAIN_OBJECT) $(LDFLAGS) $(FLDFLAGS)
! 	@$(LINKER) -o $(EXEC_DIR)/$(EXEC) $(OBJ_DIR)/$(MAIN_OBJECT) $(LDFLAGS) $(FLDFLAGS)
  endif
  endif
  
*************** ifeq ($(strip $(filter-out c c++ ada,$(L
*** 327,357 ****
  ifeq ($(MAIN),ada)
  # Ada main
  link: $(LINKER) archive-objects force
! 	$(GNATMAKE) -b -l -P$(PROJECT_FILE) $(ADA_SOURCES) \
  		 -largs $(LARGS) $(LDFLAGS)
  
  internal-build: $(LINKER) archive-objects force
! 	@echo $(GNATMAKE) -P$(PROJECT_FILE) $(ADA_SOURCES) $(EXEC_RULE) $(ADAFLAGS)
  	@$(GNATMAKE) -P$(PROJECT_FILE) $(EXEC_RULE) $(ADA_SOURCES) $(ADAFLAGS) \
  	 -largs $(LARGS) $(LDFLAGS)
  
  else
  # C/C++ main
- # The trick here is to force gnatmake to bind/link, even if there is no
- # Ada main program. To achieve this effect, we use the -z switch, which is
- # close enough to our needs, and the usual -n gnatbind switch and --LINK=
- # gnatlink switch.
  
  link: $(LINKER) archive-objects force
! 	$(GNATMAKE) $(EXEC_RULE) -z -P$(PROJECT_FILE) $(ADA_SOURCES) \
! 		 -bargs -n -largs $(LARGS) $(LDFLAGS)
  
  internal-build: $(LINKER) archive-objects force
! 	@echo $(GNATMAKE) -z -P$(PROJECT_FILE) $(ADA_SOURCES) $(EXEC_RULE) $(ADAFLAGS)
! 	@$(GNATMAKE) $(EXEC_RULE) -z \
! 		 -P$(PROJECT_FILE) $(ADA_SOURCES) $(ADAFLAGS) \
! 		 -bargs -n \
! 		 -largs $(LARGS) $(LDFLAGS)
  endif
  
  else
--- 359,386 ----
  ifeq ($(MAIN),ada)
  # Ada main
  link: $(LINKER) archive-objects force
! 	@$(display) $(GNATMAKE) -b -l -P$(PROJECT_FILE) $(ADA_SOURCES)
! 	@$(GNATMAKE) -b -l -P$(PROJECT_FILE) $(ADA_SOURCES) \
  		 -largs $(LARGS) $(LDFLAGS)
  
  internal-build: $(LINKER) archive-objects force
! 	@$(display) $(GNATMAKE) -P$(PROJECT_FILE) $(ADA_SOURCES) $(EXEC_RULE) $(ADAFLAGS)
  	@$(GNATMAKE) -P$(PROJECT_FILE) $(EXEC_RULE) $(ADA_SOURCES) $(ADAFLAGS) \
  	 -largs $(LARGS) $(LDFLAGS)
  
  else
  # C/C++ main
  
  link: $(LINKER) archive-objects force
! 	@$(display) $(GNATMAKE) $(EXEC_RULE) -B -P$(PROJECT_FILE) $(ADA_SOURCES)
! 	@$(GNATMAKE) $(EXEC_RULE) -B -P$(PROJECT_FILE) $(ADA_SOURCES) \
! 		 -largs $(OBJ_DIR)/$(MAIN_OBJECT) $(LARGS) $(LDFLAGS) $(FLDFLAGS)
  
  internal-build: $(LINKER) archive-objects force
! 	@$(display) $(GNATMAKE) $(EXEC_RULE) -B -P$(PROJECT_FILE) $(ADA_SOURCES) $(ADAFLAGS)
! 	@$(GNATMAKE) $(EXEC_RULE) \
! 		 -B -P$(PROJECT_FILE) $(ADA_SOURCES) $(ADAFLAGS) \
! 		 -largs $(OBJ_DIR)/$(MAIN_OBJECT) $(LARGS) $(LDFLAGS) $(FLDFLAGS)
  endif
  
  else
*************** endif
*** 365,371 ****
  # Automatic handling of dependencies
  
  ifeq ($(strip $(filter-out %gcc %g++,$(CC) $(CXX))),)
! # Compiler is GCC, take avantage of the preprocessor option -MD
  DEP_CFLAGS = -Wp,-MD,$(OBJ_DIR)/$(*F).d
  
  define post-compile
--- 394,408 ----
  # Automatic handling of dependencies
  
  ifeq ($(strip $(filter-out %gcc %g++,$(CC) $(CXX))),)
! # Compiler is GCC, take avantage of the preprocessor option -MD and
! # the CPATH environment variable
! 
! empty:=
! space:=$(empty) $(empty)
! path_sep:=$(shell gprcmd path_sep)
! SRC_DIRS_PATH:= $(subst $(space),$(path_sep),$(SRC_DIRS))
! export CPATH:=$(SRC_DIRS_PATH)$(path_sep)$(CPATH)
! 
  DEP_CFLAGS = -Wp,-MD,$(OBJ_DIR)/$(*F).d
  
  define post-compile
*************** $(OBJ_DIR)/%.d:
*** 380,385 ****
--- 417,425 ----
  else
  # Compiler unknown, use a more general approach based on the output of $(CC) -M
  
+ ALL_CFLAGS := $(ALL_CFLAGS) $(C_INCLUDES)
+ ALL_CXXFLAGS := $(ALL_CXXFLAGS) $(C_INCLUDES)
+ 
  DEP_FLAGS  = -M
  DEP_CFLAGS =
  
*************** endif
*** 405,421 ****
  
  # Compile C files individually
  %$(OBJ_EXT) : %$(C_EXT)
! 	@echo $(CC) -c $(CFLAGS) $< -o $(OBJ_DIR)/$@
  ifndef FAKE_COMPILE
! 	@$(CC) -c $(ALL_CFLAGS) $< -o $(OBJ_DIR)/$@
  	@$(post-compile)
  endif
  
  # Compile C++ files individually
  %$(OBJ_EXT) : %$(CXX_EXT)
! 	@echo $(CXX) -c $(CXXFLAGS) $< -o $(OBJ_DIR)/$@
  ifndef FAKE_COMPILE
! 	@$(CXX) -c $(ALL_CXXFLAGS) $< -o $(OBJ_DIR)/$@
  	@$(post-compile)
  endif
  
--- 445,461 ----
  
  # Compile C files individually
  %$(OBJ_EXT) : %$(C_EXT)
! 	@$(display) $(C_Compiler) -c $(CFLAGS) $< -o $(OBJ_DIR)/$@
  ifndef FAKE_COMPILE
! 	@$(C_Compiler) -c $(ALL_CFLAGS) $< -o $(OBJ_DIR)/$@
  	@$(post-compile)
  endif
  
  # Compile C++ files individually
  %$(OBJ_EXT) : %$(CXX_EXT)
! 	@$(display) $(CXX_Compiler) -c $(CXXFLAGS) $< -o $(OBJ_DIR)/$@
  ifndef FAKE_COMPILE
! 	@$(CXX_Compiler) -c $(ALL_CXXFLAGS) $< -o $(OBJ_DIR)/$@
  	@$(post-compile)
  endif
  
*************** internal-c++ : $(CXX_OBJECTS)
*** 442,461 ****
  .PHONY: force internal-clean internal-archive internal-build internal-compile internal-ada internal-c internal-c++ build compile clean ada c c++
  
  internal-clean:
! 	@echo $(RM) $(OBJ_DIR)/*$(OBJ_EXT)
  	@$(RM) $(OBJ_DIR)/*$(OBJ_EXT)
! 	@echo $(RM) $(OBJ_DIR)/*.ali
  	@$(RM) $(OBJ_DIR)/*.ali
! 	@echo $(RM) $(OBJ_DIR)/b~*
  	@$(RM) $(OBJ_DIR)/b~*
! 	@echo $(RM) $(OBJ_DIR)/b_*
  	@$(RM) $(OBJ_DIR)/b_*
! 	@echo $(RM) $(OBJ_DIR)/*$(AR_EXT)
  	@$(RM) $(OBJ_DIR)/*$(AR_EXT)
! 	@echo $(RM) $(OBJ_DIR)/*.d
  	@$(RM) $(OBJ_DIR)/*.d
  ifneq ($(EXEC),)
! 	@echo $(RM) $(EXEC_DIR)/$(EXEC)
  	@$(RM) $(EXEC_DIR)/$(EXEC)
  endif
  
--- 482,501 ----
  .PHONY: force internal-clean internal-archive internal-build internal-compile internal-ada internal-c internal-c++ build compile clean ada c c++
  
  internal-clean:
! 	@$(display) $(RM) $(OBJ_DIR)/*$(OBJ_EXT)
  	@$(RM) $(OBJ_DIR)/*$(OBJ_EXT)
! 	@$(display) $(RM) $(OBJ_DIR)/*.ali
  	@$(RM) $(OBJ_DIR)/*.ali
! 	@$(display) $(RM) $(OBJ_DIR)/b~*
  	@$(RM) $(OBJ_DIR)/b~*
! 	@$(display) $(RM) $(OBJ_DIR)/b_*
  	@$(RM) $(OBJ_DIR)/b_*
! 	@$(display) $(RM) $(OBJ_DIR)/*$(AR_EXT)
  	@$(RM) $(OBJ_DIR)/*$(AR_EXT)
! 	@$(display) $(RM) $(OBJ_DIR)/*.d
  	@$(RM) $(OBJ_DIR)/*.d
  ifneq ($(EXEC),)
! 	@$(display) $(RM) $(EXEC_DIR)/$(EXEC)
  	@$(RM) $(EXEC_DIR)/$(EXEC)
  endif
  
diff -Nrcpad gcc-3.4.3/gcc/ada/Makefile.in gcc-4.0.0/gcc/ada/Makefile.in
*** gcc-3.4.3/gcc/ada/Makefile.in	Mon Jan 26 21:57:32 2004
--- gcc-4.0.0/gcc/ada/Makefile.in	Thu Apr  7 20:03:50 2005
***************
*** 1,5 ****
  # Makefile for GNU Ada Compiler (GNAT).
! #   Copyright (C) 1994-2004 Free Software Foundation, Inc.
  
  #This file is part of GCC.
  
--- 1,5 ----
  # Makefile for GNU Ada Compiler (GNAT).
! #   Copyright (C) 1994-2005 Free Software Foundation, Inc.
  
  #This file is part of GCC.
  
*************** MKDIR = mkdir -p
*** 105,114 ****
  AR = ar
  AR_FLAGS = rc
  LS = ls
! # How to invoke ranlib.
! RANLIB = ranlib
! # Test to use to see whether ranlib exists on the system.
! RANLIB_TEST = [ -f /usr/bin/ranlib -o -f /bin/ranlib ]
  
  SHELL = @SHELL@
  PWD_COMMAND = $${PWDCMD-pwd}
--- 105,112 ----
  AR = ar
  AR_FLAGS = rc
  LS = ls
! RANLIB = @RANLIB@
! RANLIB_FLAGS = @ranlib_flags@
  
  SHELL = @SHELL@
  PWD_COMMAND = $${PWDCMD-pwd}
*************** ADA_CFLAGS =
*** 122,128 ****
  ADAFLAGS = -W -Wall -gnatpg -gnata
  SOME_ADAFLAGS =-gnata
  FORCE_DEBUG_ADAFLAGS = -g
! GNATLIBFLAGS = -gnatpg
  GNATLIBCFLAGS = -g -O2
  GNATLIBCFLAGS_FOR_C = $(GNATLIBCFLAGS) $(TARGET_LIBGCC2_CFLAGS) -fexceptions \
  	-DIN_RTS
--- 120,126 ----
  ADAFLAGS = -W -Wall -gnatpg -gnata
  SOME_ADAFLAGS =-gnata
  FORCE_DEBUG_ADAFLAGS = -g
! GNATLIBFLAGS = -gnatpg -nostdinc
  GNATLIBCFLAGS = -g -O2
  GNATLIBCFLAGS_FOR_C = $(GNATLIBCFLAGS) $(TARGET_LIBGCC2_CFLAGS) -fexceptions \
  	-DIN_RTS
*************** THREAD_KIND = native
*** 135,141 ****
  THREADSLIB =
  GMEM_LIB =
  MISCLIB =
- SYMLIB =
  SYMDEPS = $(LIBINTL_DEP)
  OUTPUT_OPTION = @OUTPUT_OPTION@
  
--- 133,138 ----
*************** exeext =
*** 144,149 ****
--- 141,147 ----
  arext  = .a
  soext  = .so
  shext  =
+ hyphen = -
  
  # Define this as & to perform parallel make on a Sequent.
  # Note that this has some bugs, and it seems currently necessary 
*************** GCC_CFLAGS = $(INTERNAL_CFLAGS) $(X_CFLA
*** 165,170 ****
--- 163,169 ----
  program_transform_name =
  objdir = .
  
+ target_alias=@target_alias@
  target=@target@
  xmake_file = @xmake_file@
  tmake_file = @tmake_file@
*************** LIBIBERTY = ../../libiberty/libiberty.a
*** 249,255 ****
  # and the system's installed libraries.
  LIBS = $(LIBINTL) $(LIBIBERTY) $(SYSLIBS)
  LIBDEPS = $(LIBINTL_DEP) $(LIBIBERTY)
! TOOLS_LIBS = $(LIBGNAT) $(EXTRA_GNATTOOLS_OBJS) ../../../libiberty/libiberty.a $(SYSLIBS)
  
  # Specify the directories to be searched for header files.
  # Both . and srcdir are used, in that order,
--- 248,254 ----
  # and the system's installed libraries.
  LIBS = $(LIBINTL) $(LIBIBERTY) $(SYSLIBS)
  LIBDEPS = $(LIBINTL_DEP) $(LIBIBERTY)
! TOOLS_LIBS = $(LIBGNAT) $(EXTRA_GNATTOOLS_OBJS) link.o ../../../libiberty/libiberty.a $(SYSLIBS)
  
  # Specify the directories to be searched for header files.
  # Both . and srcdir are used, in that order,
*************** Makefile: ../config.status $(srcdir)/Mak
*** 297,318 ****
  
  # Lists of files for various purposes.
  
! GNATLINK_OBJS = gnatlink.o link.o \
!  ali.o alloc.o butil.o casing.o csets.o debug.o fmap.o fname.o gnatvsn.o \
!  hostparm.o namet.o opt.o osint.o output.o rident.o sdefault.o \
!  stylesw.o switch.o table.o tree_io.o types.o validsw.o widechar.o
  
! GNATMAKE_OBJS = ctrl_c.o ali.o ali-util.o s-casuti.o \
   alloc.o atree.o binderr.o butil.o casing.o csets.o debug.o elists.o einfo.o\
   erroutc.o errutil.o err_vars.o fmap.o fname.o fname-uf.o fname-sf.o \
!  gnatmake.o gnatvsn.o hostparm.o krunch.o lib.o make.o makeusg.o \
!  mlib.o mlib-fil.o mlib-prj.o mlib-tgt.o mlib-utl.o \
   namet.o nlists.o opt.o osint.o osint-m.o output.o \
!  prj.o prj-attr.o prj-com.o prj-dect.o prj-env.o prj-err.o prj-ext.o prj-nmsc.o \
   prj-pars.o prj-part.o prj-proc.o prj-strt.o prj-tree.o prj-util.o \
!  rident.o scans.o scng.o sdefault.o sfn_scan.o s-purexc.o s-htable.o \
   sinfo.o sinput.o sinput-c.o sinput-p.o \
!  snames.o stand.o stringt.o styleg.o stylesw.o validsw.o switch.o switch-m.o \
   table.o targparm.o tempdir.o tree_io.o types.o \
   uintp.o  uname.o urealp.o usage.o widechar.o \
   $(EXTRA_GNATMAKE_OBJS)
--- 296,319 ----
  
  # Lists of files for various purposes.
  
! GNATLINK_OBJS = gnatlink.o \
!  a-except.o ali.o alloc.o butil.o casing.o csets.o debug.o fmap.o fname.o gnatvsn.o \
!  hostparm.o indepsw.o interfac.o i-c.o i-cstrin.o namet.o opt.o osint.o output.o rident.o \
!  s-exctab.o s-secsta.o s-stalib.o s-stoele.o sdefault.o stylesw.o switch.o system.o \
!  table.o tree_io.o types.o validsw.o widechar.o
  
! GNATMAKE_OBJS = a-except.o ctrl_c.o ali.o ali-util.o s-casuti.o \
   alloc.o atree.o binderr.o butil.o casing.o csets.o debug.o elists.o einfo.o\
   erroutc.o errutil.o err_vars.o fmap.o fname.o fname-uf.o fname-sf.o \
!  gnatmake.o gnatvsn.o hostparm.o interfac.o i-c.o i-cstrin.o krunch.o lib.o \
!  make.o makeusg.o makeutl.o mlib.o mlib-fil.o mlib-prj.o mlib-tgt.o mlib-utl.o \
   namet.o nlists.o opt.o osint.o osint-m.o output.o \
!  prj.o prj-attr.o prj-attr-pm.o prj-com.o prj-dect.o prj-env.o prj-err.o prj-ext.o prj-nmsc.o \
   prj-pars.o prj-part.o prj-proc.o prj-strt.o prj-tree.o prj-util.o \
!  rident.o s-exctab.o s-secsta.o s-stalib.o s-stoele.o \
!  scans.o scng.o sdefault.o sfn_scan.o s-purexc.o s-htable.o \
   sinfo.o sinput.o sinput-c.o sinput-p.o \
!  snames.o stand.o stringt.o styleg.o stylesw.o system.o validsw.o switch.o switch-m.o \
   table.o targparm.o tempdir.o tree_io.o types.o \
   uintp.o  uname.o urealp.o usage.o widechar.o \
   $(EXTRA_GNATMAKE_OBJS)
*************** endif
*** 340,352 ****
  # Non-tasking case:
  
  LIBGNAT_TARGET_PAIRS = \
! a-intnam.ads<4nintnam.ads \
! s-inmaop.adb<5ninmaop.adb \
! s-intman.adb<5nintman.adb \
! s-osinte.ads<5nosinte.ads \
! s-osprim.adb<7sosprim.adb \
! s-taprop.adb<5ntaprop.adb \
! s-taspri.ads<5ntaspri.ads
  
  # Default shared object option. Note that we rely on the fact that the "soname"
  # option will always be present and last in this flag, so that we can have
--- 341,353 ----
  # Non-tasking case:
  
  LIBGNAT_TARGET_PAIRS = \
! a-intnam.ads<a-intnam-dummy.ads \
! s-inmaop.adb<s-inmaop-dummy.adb \
! s-intman.adb<s-intman-dummy.adb \
! s-osinte.ads<s-osinte-dummy.ads \
! s-osprim.adb<s-osprim-posix.adb \
! s-taprop.adb<s-taprop-dummy.adb \
! s-taspri.ads<s-taspri-dummy.ads
  
  # Default shared object option. Note that we rely on the fact that the "soname"
  # option will always be present and last in this flag, so that we can have
*************** LIB_VERSION = $(strip $(shell grep ' Lib
*** 383,403 ****
  
  ifeq ($(strip $(filter-out %86 os2 OS2 os2_emx,$(arch) $(osys))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-excpol.adb<4wexcpol.adb \
!   a-intnam.ads<4nintnam.ads \
!   a-numaux.adb<86numaux.adb \
!   a-numaux.ads<86numaux.ads \
!   s-inmaop.adb<5ninmaop.adb \
!   s-interr.adb<5ointerr.adb \
!   s-intman.adb<5nintman.adb \
!   s-mastop.adb<5omastop.adb \
!   s-osinte.adb<5oosinte.adb \
!   s-osinte.ads<5oosinte.ads \
!   s-osprim.adb<5oosprim.adb \
!   s-parame.adb<5oparame.adb \
!   system.ads<5osystem.ads \
!   s-taprop.adb<5otaprop.adb \
!   s-taspri.ads<5otaspri.ads
  
    EXTRA_GNATRTL_NONTASKING_OBJS = \
    i-os2err.o \
--- 384,404 ----
  
  ifeq ($(strip $(filter-out %86 os2 OS2 os2_emx,$(arch) $(osys))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-excpol.adb<a-excpol-abort.adb \
!   a-intnam.ads<a-intnam-dummy.ads \
!   a-numaux.adb<a-numaux-x86.adb \
!   a-numaux.ads<a-numaux-x86.ads \
!   s-inmaop.adb<s-inmaop-dummy.adb \
!   s-interr.adb<s-interr-dummy.adb \
!   s-intman.adb<s-intman-dummy.adb \
!   s-mastop.adb<s-mastop-x86.adb \
!   s-osinte.adb<s-osinte-os2.adb \
!   s-osinte.ads<s-osinte-os2.ads \
!   s-osprim.adb<s-osprim-os2.adb \
!   s-parame.adb<s-parame-os2.adb \
!   system.ads<system-os2.ads \
!   s-taprop.adb<s-taprop-os2.adb \
!   s-taspri.ads<s-taspri-os2.ads
  
    EXTRA_GNATRTL_NONTASKING_OBJS = \
    i-os2err.o \
*************** endif
*** 408,428 ****
  
  ifeq ($(strip $(filter-out %86 interix%,$(arch) $(osys))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-excpol.adb<4hexcpol.adb \
!   a-intnam.ads<4pintnam.ads \
!   a-numaux.adb<86numaux.adb \
!   a-numaux.ads<86numaux.ads \
!   g-soccon.ads<3psoccon.ads \
!   s-inmaop.adb<7sinmaop.adb \
!   s-intman.adb<7sintman.adb \
!   s-mastop.adb<5omastop.adb \
!   s-osinte.adb<7sosinte.adb \
!   s-osinte.ads<5posinte.ads \
!   s-osprim.adb<5posprim.adb \
!   s-taprop.adb<7staprop.adb \
!   system.ads<5psystem.ads \
!   s-taspri.ads<7staspri.ads \
!   s-tpopsp.adb<7stpopsp.adb
  
    THREADSLIB = -lgthreads -lmalloc
    PREFIX_OBJS=$(PREFIX_REAL_OBJS)
--- 409,429 ----
  
  ifeq ($(strip $(filter-out %86 interix%,$(arch) $(osys))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-excpol.adb<a-excpol-interix.adb \
!   a-intnam.ads<a-intnam-interix.ads \
!   a-numaux.adb<a-numaux-x86.adb \
!   a-numaux.ads<a-numaux-x86.ads \
!   g-soccon.ads<g-soccon-interix.ads \
!   s-inmaop.adb<s-inmaop-posix.adb \
!   s-intman.adb<s-intman-posix.adb \
!   s-mastop.adb<s-mastop-x86.adb \
!   s-osinte.adb<s-osinte-fsu.adb \
!   s-osinte.ads<s-osinte-interix.ads \
!   s-osprim.adb<s-osprim-unix.adb \
!   s-taprop.adb<s-taprop-posix.adb \
!   system.ads<system-interix.ads \
!   s-taspri.ads<s-taspri-posix.ads \
!   s-tpopsp.adb<s-tpopsp-posix.adb
  
    THREADSLIB = -lgthreads -lmalloc
    PREFIX_OBJS=$(PREFIX_REAL_OBJS)
*************** endif
*** 431,452 ****
  # sysv5uw is SCO UnixWare 7
  ifeq ($(strip $(filter-out %86 sysv5uw%,$(arch) $(osys))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-excpol.adb<4wexcpol.adb \
!   a-intnam.ads<41intnam.ads \
!   a-numaux.adb<86numaux.adb \
!   a-numaux.ads<86numaux.ads \
!   s-inmaop.adb<7sinmaop.adb \
!   s-intman.adb<7sintman.adb \
!   s-mastop.adb<5omastop.adb \
!   s-osinte.ads<51osinte.ads \
!   s-osinte.adb<51osinte.adb \
!   s-osprim.adb<5posprim.adb \
!   s-taprop.adb<7staprop.adb \
!   s-taspri.ads<7staspri.ads \
!   s-tpopsp.adb<5atpopsp.adb \
!   system.ads<51system.ads \
!   g-soccon.ads<31soccon.ads \
!   g-soliop.ads<31soliop.ads
  
    THREADSLIB = -lthread
    PREFIX_OBJS=$(PREFIX_REAL_OBJS)
--- 432,453 ----
  # sysv5uw is SCO UnixWare 7
  ifeq ($(strip $(filter-out %86 sysv5uw%,$(arch) $(osys))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-excpol.adb<a-excpol-abort.adb \
!   a-intnam.ads<a-intnam-unixware.ads \
!   a-numaux.adb<a-numaux-x86.adb \
!   a-numaux.ads<a-numaux-x86.ads \
!   s-inmaop.adb<s-inmaop-posix.adb \
!   s-intman.adb<s-intman-posix.adb \
!   s-mastop.adb<s-mastop-x86.adb \
!   s-osinte.ads<s-osinte-unixware.ads \
!   s-osinte.adb<s-osinte-unixware.adb \
!   s-osprim.adb<s-osprim-unix.adb \
!   s-taprop.adb<s-taprop-posix.adb \
!   s-taspri.ads<s-taspri-posix.ads \
!   s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
!   system.ads<system-unixware.ads \
!   g-soccon.ads<g-soccon-unixware.ads \
!   g-soliop.ads<g-soliop-unixware.ads
  
    THREADSLIB = -lthread
    PREFIX_OBJS=$(PREFIX_REAL_OBJS)
*************** endif
*** 457,482 ****
  
  ifeq ($(strip $(filter-out alpha% dec vx%,$(targ))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-sytaco.ads<4zsytaco.ads \
!   a-sytaco.adb<4zsytaco.adb \
!   a-intnam.ads<4zintnam.ads \
!   a-numaux.ads<4znumaux.ads \
!   s-inmaop.adb<7sinmaop.adb \
!   s-interr.adb<5zinterr.adb \
!   s-intman.ads<5zintman.ads \
!   s-intman.adb<5zintman.adb \
!   s-osinte.adb<5zosinte.adb \
!   s-osinte.ads<5zosinte.ads \
!   s-osprim.adb<5zosprim.adb \
!   s-parame.ads<5zparame.ads \
!   s-taprop.adb<5ztaprop.adb \
!   s-tpopsp.adb<5ztpopsp.adb \
!   s-taspri.ads<5ztaspri.ads \
!   s-vxwork.ads<5avxwork.ads \
!   g-soccon.ads<3zsoccon.ads \
!   g-socthi.ads<3zsocthi.ads \
!   g-socthi.adb<3zsocthi.adb \
!   system.ads<5zsystem.ads
  
    EXTRA_GNATRTL_NONTASKING_OBJS=i-vxwork.o i-vxwoio.o
    EXTRA_GNATRTL_TASKING_OBJS=s-vxwork.o
--- 458,484 ----
  
  ifeq ($(strip $(filter-out alpha% dec vx%,$(targ))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-sytaco.ads<a-sytaco-vxworks.ads \
!   a-sytaco.adb<a-sytaco-vxworks.adb \
!   a-intnam.ads<a-intnam-vxworks.ads \
!   a-numaux.ads<a-numaux-vxworks.ads \
!   s-inmaop.adb<s-inmaop-posix.adb \
!   s-interr.adb<s-interr-vxworks.adb \
!   s-intman.ads<s-intman-vxworks.ads \
!   s-intman.adb<s-intman-vxworks.adb \
!   s-osinte.adb<s-osinte-vxworks.adb \
!   s-osinte.ads<s-osinte-vxworks.ads \
!   s-osprim.adb<s-osprim-vxworks.adb \
!   s-parame.ads<s-parame-vxworks.ads \
!   s-stchop.adb<s-stchop-vxworks.adb \
!   s-taprop.adb<s-taprop-vxworks.adb \
!   s-tpopsp.adb<s-tpopsp-vxworks.adb \
!   s-taspri.ads<s-taspri-vxworks.ads \
!   s-vxwork.ads<s-vxwork-alpha.ads \
!   g-soccon.ads<g-soccon-vxworks.ads \
!   g-socthi.ads<g-socthi-vxworks.ads \
!   g-socthi.adb<g-socthi-vxworks.adb \
!   system.ads<system-vxworks-alpha.ads
  
    EXTRA_GNATRTL_NONTASKING_OBJS=i-vxwork.o i-vxwoio.o
    EXTRA_GNATRTL_TASKING_OBJS=s-vxwork.o
*************** endif
*** 484,634 ****
  
  ifeq ($(strip $(filter-out m68k% wrs vx%,$(targ))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-sytaco.ads<4zsytaco.ads \
!   a-sytaco.adb<4zsytaco.adb \
!   a-intnam.ads<4zintnam.ads \
!   a-numaux.ads<4znumaux.ads \
!   s-inmaop.adb<7sinmaop.adb \
!   s-interr.adb<5zinterr.adb \
!   s-intman.ads<5zintman.ads \
!   s-intman.adb<5zintman.adb \
!   s-osinte.adb<5zosinte.adb \
!   s-osinte.ads<5zosinte.ads \
!   s-osprim.adb<5zosprim.adb \
!   s-parame.ads<5zparame.ads \
!   s-taprop.adb<5ztaprop.adb \
!   s-taspri.ads<5ztaspri.ads \
!   s-tpopsp.adb<5ztpopsp.adb \
!   s-vxwork.ads<5kvxwork.ads \
!   g-soccon.ads<3zsoccon.ads \
!   g-socthi.ads<3zsocthi.ads \
!   g-socthi.adb<3zsocthi.adb \
!   system.ads<5ksystem.ads
  
!   TOOLS_TARGET_PAIRS=mlib-tgt.adb<5zml-tgt.adb
  
    EXTRA_GNATRTL_NONTASKING_OBJS=i-vxwork.o i-vxwoio.o
    EXTRA_GNATRTL_TASKING_OBJS=s-vxwork.o
  
    ifeq ($(strip $(filter-out yes,$(TRACE))),)
      LIBGNAT_TARGET_PAIRS += \
!     s-traces.adb<7straces.adb \
!     s-tratas.adb<7stratas.adb \
!     s-trafor.adb<7strafor.adb \
!     s-trafor.ads<7strafor.ads \
!     s-tfsetr.adb<5ztfsetr.adb 
    endif
  endif
  
  ifeq ($(strip $(filter-out powerpc% wrs vxworks,$(targ))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-sytaco.ads<4zsytaco.ads \
!   a-sytaco.adb<4zsytaco.adb \
!   a-intnam.ads<4zintnam.ads \
!   a-numaux.ads<4znumaux.ads \
!   s-inmaop.adb<7sinmaop.adb \
!   s-interr.adb<5zinterr.adb \
!   s-intman.ads<5zintman.ads \
!   s-intman.adb<5zintman.adb \
!   s-osinte.adb<5zosinte.adb \
!   s-osinte.ads<5zosinte.ads \
!   s-osprim.adb<5zosprim.adb \
!   s-parame.ads<5zparame.ads \
!   s-taprop.adb<5ztaprop.adb \
!   s-taspri.ads<5ztaspri.ads \
!   s-tpopsp.adb<5ztpopsp.adb \
!   s-vxwork.ads<5pvxwork.ads \
!   g-soccon.ads<3zsoccon.ads \
!   g-socthi.ads<3zsocthi.ads \
!   g-socthi.adb<3zsocthi.adb \
!   system.ads<5ysystem.ads
! 
!   TOOLS_TARGET_PAIRS=mlib-tgt.adb<5zml-tgt.adb
! 
!   EXTRA_HIE_NONE_TARGET_PAIRS= \
!   system.ads<50system.ads
  
!   EXTRA_RAVEN_SOURCES=i-vxwork.ads s-vxwork.ads
!   EXTRA_RAVEN_OBJS=i-vxwork.o s-vxwork.o
!   EXTRA_GNATRTL_NONTASKING_OBJS=i-vxwork.o i-vxwoio.o
!   EXTRA_GNATRTL_TASKING_OBJS=s-vxwork.o
!   HIE_RAVEN_TARGET_PAIRS=\
!   $(HIE_NONE_TARGET_PAIRS) \
!   a-reatim.ads<1areatim.ads \
!   a-reatim.adb<1areatim.adb \
!   a-retide.adb<1aretide.adb \
!   a-interr.adb<1ainterr.adb \
!   s-interr.ads<1sinterr.ads \
!   s-interr.adb<1sinterr.adb \
!   s-taskin.ads<1staskin.ads \
!   s-taskin.adb<1staskin.adb \
!   s-tarest.adb<1starest.adb \
!   s-tposen.ads<1stposen.ads \
!   s-tposen.adb<1stposen.adb \
!   s-osinte.adb<1sosinte.adb \
!   s-taprop.ads<1staprop.ads \
!   s-taprop.adb<1staprop.adb \
!   s-taprob.ads<1staprob.ads \
!   s-taprob.adb<1staprob.adb \
!   a-sytaco.ads<1asytaco.ads \
!   a-sytaco.adb<1asytaco.adb \
!   a-intnam.ads<4zintnam.ads \
!   s-osinte.ads<5zosinte.ads \
!   s-parame.ads<5zparame.ads \
!   s-taspri.ads<5ztaspri.ads \
!   s-vxwork.ads<5pvxwork.ads \
!   a-taside.adb<1ataside.adb \
  
    ifeq ($(strip $(filter-out yes,$(TRACE))),)
      LIBGNAT_TARGET_PAIRS += \
!     s-traces.adb<7straces.adb \
!     s-trafor.adb<7strafor.adb \
!     s-trafor.ads<7strafor.ads \
!     s-tratas.adb<7stratas.adb \
!     s-tfsetr.adb<5ztfsetr.adb 
    endif
- endif
  
! ifeq ($(strip $(filter-out powerpc% unknown elf,$(targ))),)
!   EXTRA_HIE_NONE_TARGET_PAIRS= \
!   system.ads<59system.ads
  
    LIBGNAT_TARGET_PAIRS = \
!   $(HIE_NONE_TARGET_PAIRS)
! endif
  
! ifeq ($(strip $(filter-out sparc% unknown elf,$(targ))),)
!   EXTRA_HIE_NONE_TARGET_PAIRS= \
!   system.ads<5rsystem.ads
  
!   LIBGNAT_TARGET_PAIRS = \
!   $(HIE_NONE_TARGET_PAIRS)
  endif
  
! ifeq ($(strip $(filter-out sparc% wrs vx%,$(targ))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-sytaco.ads<4zsytaco.ads \
!   a-sytaco.adb<4zsytaco.adb \
!   a-intnam.ads<4zintnam.ads \
!   a-numaux.ads<4znumaux.ads \
!   s-inmaop.adb<7sinmaop.adb \
!   s-interr.adb<5zinterr.adb \
!   s-intman.ads<5zintman.ads \
!   s-intman.adb<5zintman.adb \
!   s-osinte.adb<5zosinte.adb \
!   s-osinte.ads<5zosinte.ads \
!   s-osprim.adb<5zosprim.adb \
!   s-parame.ads<5zparame.ads \
!   s-taprop.adb<5ztaprop.adb \
!   s-taspri.ads<5ztaspri.ads \
!   s-tpopsp.adb<5ztpopsp.adb \
!   s-vxwork.ads<5svxwork.ads \
!   g-soccon.ads<3zsoccon.ads \
!   g-socthi.ads<3zsocthi.ads \
!   g-socthi.adb<3zsocthi.adb \
!   system.ads<5csystem.ads   \
  
!   TOOLS_TARGET_PAIRS=mlib-tgt.adb<5zml-tgt.adb
  
    EXTRA_GNATRTL_NONTASKING_OBJS=i-vxwork.o i-vxwoio.o
    EXTRA_GNATRTL_TASKING_OBJS=s-vxwork.o
--- 486,633 ----
  
  ifeq ($(strip $(filter-out m68k% wrs vx%,$(targ))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-sytaco.ads<a-sytaco-vxworks.ads \
!   a-sytaco.adb<a-sytaco-vxworks.adb \
!   a-intnam.ads<a-intnam-vxworks.ads \
!   a-numaux.ads<a-numaux-vxworks.ads \
!   s-inmaop.adb<s-inmaop-posix.adb \
!   s-interr.adb<s-interr-vxworks.adb \
!   s-intman.ads<s-intman-vxworks.ads \
!   s-intman.adb<s-intman-vxworks.adb \
!   s-osinte.adb<s-osinte-vxworks.adb \
!   s-osinte.ads<s-osinte-vxworks.ads \
!   s-osprim.adb<s-osprim-vxworks.adb \
!   s-parame.ads<s-parame-vxworks.ads \
!   s-stchop.adb<s-stchop-vxworks.adb \
!   s-taprop.adb<s-taprop-vxworks.adb \
!   s-taspri.ads<s-taspri-vxworks.ads \
!   s-tpopsp.adb<s-tpopsp-vxworks.adb \
!   s-vxwork.ads<s-vxwork-m68k.ads \
!   g-soccon.ads<g-soccon-vxworks.ads \
!   g-socthi.ads<g-socthi-vxworks.ads \
!   g-socthi.adb<g-socthi-vxworks.adb \
!   system.ads<system-vxworks-m68k.ads
  
!   TOOLS_TARGET_PAIRS=mlib-tgt.adb<mlib-tgt-vxworks.adb
  
    EXTRA_GNATRTL_NONTASKING_OBJS=i-vxwork.o i-vxwoio.o
    EXTRA_GNATRTL_TASKING_OBJS=s-vxwork.o
  
    ifeq ($(strip $(filter-out yes,$(TRACE))),)
      LIBGNAT_TARGET_PAIRS += \
!     s-traces.adb<s-traces-default.adb \
!     s-tratas.adb<s-tratas-default.adb \
!     s-trafor.adb<s-trafor-default.adb \
!     s-trafor.ads<s-trafor-default.ads \
!     s-tfsetr.adb<s-tfsetr-vxworks.adb 
    endif
  endif
  
  ifeq ($(strip $(filter-out powerpc% wrs vxworks,$(targ))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-sytaco.ads<a-sytaco-vxworks.ads \
!   a-sytaco.adb<a-sytaco-vxworks.adb \
!   a-intnam.ads<a-intnam-vxworks.ads \
!   a-numaux.ads<a-numaux-vxworks.ads \
!   s-inmaop.adb<s-inmaop-posix.adb \
!   s-interr.adb<s-interr-vxworks.adb \
!   s-intman.ads<s-intman-vxworks.ads \
!   s-intman.adb<s-intman-vxworks.adb \
!   s-osinte.adb<s-osinte-vxworks.adb \
!   s-osinte.ads<s-osinte-vxworks.ads \
!   s-osprim.adb<s-osprim-vxworks.adb \
!   s-parame.ads<s-parame-vxworks.ads \
!   s-stchop.adb<s-stchop-vxworks.adb \
!   s-taprop.adb<s-taprop-vxworks.adb \
!   s-taspri.ads<s-taspri-vxworks.ads \
!   s-tpopsp.adb<s-tpopsp-vxworks.adb \
!   s-vxwork.ads<s-vxwork-ppc.ads \
!   g-soccon.ads<g-soccon-vxworks.ads \
!   g-socthi.ads<g-socthi-vxworks.ads \
!   g-socthi.adb<g-socthi-vxworks.adb \
!   system.ads<system-vxworks-ppc.ads
  
!   TOOLS_TARGET_PAIRS=mlib-tgt.adb<mlib-tgt-vxworks.adb
  
    ifeq ($(strip $(filter-out yes,$(TRACE))),)
      LIBGNAT_TARGET_PAIRS += \
!     s-traces.adb<s-traces-default.adb \
!     s-trafor.adb<s-trafor-default.adb \
!     s-trafor.ads<s-trafor-default.ads \
!     s-tratas.adb<s-tratas-default.adb \
!     s-tfsetr.adb<s-tfsetr-vxworks.adb 
    endif
  
!   EXTRA_GNATRTL_NONTASKING_OBJS=i-vxwork.o i-vxwoio.o s-vxwexc.o
!   EXTRA_GNATRTL_TASKING_OBJS=s-vxwork.o
! endif
  
+ ifeq ($(strip $(filter-out sparc% wrs vx%,$(targ))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-sytaco.ads<a-sytaco-vxworks.ads \
!   a-sytaco.adb<a-sytaco-vxworks.adb \
!   a-intnam.ads<a-intnam-vxworks.ads \
!   a-numaux.ads<a-numaux-vxworks.ads \
!   s-inmaop.adb<s-inmaop-posix.adb \
!   s-interr.adb<s-interr-vxworks.adb \
!   s-intman.ads<s-intman-vxworks.ads \
!   s-intman.adb<s-intman-vxworks.adb \
!   s-osinte.adb<s-osinte-vxworks.adb \
!   s-osinte.ads<s-osinte-vxworks.ads \
!   s-osprim.adb<s-osprim-vxworks.adb \
!   s-parame.ads<s-parame-vxworks.ads \
!   s-stchop.adb<s-stchop-vxworks.adb \
!   s-taprop.adb<s-taprop-vxworks.adb \
!   s-taspri.ads<s-taspri-vxworks.ads \
!   s-tpopsp.adb<s-tpopsp-vxworks.adb \
!   s-vxwork.ads<s-vxwork-sparcv9.ads \
!   g-soccon.ads<g-soccon-vxworks.ads \
!   g-socthi.ads<g-socthi-vxworks.ads \
!   g-socthi.adb<g-socthi-vxworks.adb \
!   system.ads<system-vxworks-sparcv9.ads   \
  
!   TOOLS_TARGET_PAIRS=mlib-tgt.adb<mlib-tgt-vxworks.adb
  
!   EXTRA_GNATRTL_NONTASKING_OBJS=i-vxwork.o i-vxwoio.o
!   EXTRA_GNATRTL_TASKING_OBJS=s-vxwork.o
  endif
  
! ifeq ($(strip $(filter-out %86 wrs vxworks,$(targ))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-sytaco.ads<a-sytaco-vxworks.ads \
!   a-sytaco.adb<a-sytaco-vxworks.adb \
!   a-intnam.ads<a-intnam-vxworks.ads \
!   i-vxwork.ads<i-vxwork-x86.ads \
!   s-inmaop.adb<s-inmaop-posix.adb \
!   s-interr.adb<s-interr-vxworks.adb \
!   s-intman.ads<s-intman-vxworks.ads \
!   s-intman.adb<s-intman-vxworks.adb \
!   a-numaux.adb<a-numaux-x86.adb \
!   a-numaux.ads<a-numaux-x86.ads \
!   s-osinte.adb<s-osinte-vxworks.adb \
!   s-osinte.ads<s-osinte-vxworks.ads \
!   s-osprim.adb<s-osprim-vxworks.adb \
!   s-parame.ads<s-parame-vxworks.ads \
!   s-stchop.adb<s-stchop-vxworks.adb \
!   s-taprop.adb<s-taprop-vxworks.adb \
!   s-taspri.ads<s-taspri-vxworks.ads \
!   s-tpopsp.adb<s-tpopsp-vxworks.adb \
!   s-vxwork.ads<s-vxwork-x86.ads \
!   g-soccon.ads<g-soccon-vxworks.ads \
!   g-socthi.ads<g-socthi-vxworks.ads \
!   g-socthi.adb<g-socthi-vxworks.adb \
!   system.ads<system-vxworks-x86.ads
  
!   TOOLS_TARGET_PAIRS=mlib-tgt.adb<mlib-tgt-vxworks.adb
! 
!   ifeq ($(strip $(filter-out yes,$(TRACE))),)
!     LIBGNAT_TARGET_PAIRS += \
!     s-traces.adb<s-traces-default.adb \
!     s-trafor.adb<s-trafor-default.adb \
!     s-trafor.ads<s-trafor-default.ads \
!     s-tratas.adb<s-tratas-default.adb \
!     s-tfsetr.adb<s-tfsetr-vxworks.adb
!   endif
  
    EXTRA_GNATRTL_NONTASKING_OBJS=i-vxwork.o i-vxwoio.o
    EXTRA_GNATRTL_TASKING_OBJS=s-vxwork.o
*************** endif
*** 636,663 ****
  
  ifeq ($(strip $(filter-out xscale% coff wrs vx%,$(targ))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-sytaco.ads<4zsytaco.ads \
!   a-sytaco.adb<4zsytaco.adb \
!   a-intnam.ads<4zintnam.ads \
!   a-numaux.ads<4znumaux.ads \
!   s-inmaop.adb<7sinmaop.adb \
!   s-interr.adb<5zinterr.adb \
!   s-intman.ads<5zintman.ads \
!   s-intman.adb<5zintman.adb \
!   s-osinte.adb<5zosinte.adb \
!   s-osinte.ads<5zosinte.ads \
!   s-osprim.adb<5zosprim.adb \
!   s-parame.ads<5zparame.ads \
!   s-taprop.adb<5ztaprop.adb \
!   s-taspri.ads<5ztaspri.ads \
!   s-tpopsp.adb<5ztpopsp.adb \
!   s-vxwork.ads<5xvxwork.ads \
!   g-soccon.ads<3zsoccon.ads \
!   g-socthi.ads<3zsocthi.ads \
!   g-socthi.adb<3zsocthi.adb \
!   system.ads<5rsystem.ads
  
!   TOOLS_TARGET_PAIRS=mlib-tgt.adb<5zml-tgt.adb
  
    EXTRA_GNATRTL_NONTASKING_OBJS=i-vxwork.o i-vxwoio.o
    EXTRA_GNATRTL_TASKING_OBJS=s-vxwork.o
--- 635,663 ----
  
  ifeq ($(strip $(filter-out xscale% coff wrs vx%,$(targ))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-sytaco.ads<a-sytaco-vxworks.ads \
!   a-sytaco.adb<a-sytaco-vxworks.adb \
!   a-intnam.ads<a-intnam-vxworks.ads \
!   a-numaux.ads<a-numaux-vxworks.ads \
!   s-inmaop.adb<s-inmaop-posix.adb \
!   s-interr.adb<s-interr-vxworks.adb \
!   s-intman.ads<s-intman-vxworks.ads \
!   s-intman.adb<s-intman-vxworks.adb \
!   s-osinte.adb<s-osinte-vxworks.adb \
!   s-osinte.ads<s-osinte-vxworks.ads \
!   s-osprim.adb<s-osprim-vxworks.adb \
!   s-parame.ads<s-parame-vxworks.ads \
!   s-stchop.adb<s-stchop-vxworks.adb \
!   s-taprop.adb<s-taprop-vxworks.adb \
!   s-taspri.ads<s-taspri-vxworks.ads \
!   s-tpopsp.adb<s-tpopsp-vxworks.adb \
!   s-vxwork.ads<s-vxwork-xscale.ads \
!   g-soccon.ads<g-soccon-vxworks.ads \
!   g-socthi.ads<g-socthi-vxworks.ads \
!   g-socthi.adb<g-socthi-vxworks.adb \
!   system.ads<system-elf-sparc.ads
  
!   TOOLS_TARGET_PAIRS=mlib-tgt.adb<mlib-tgt-vxworks.adb
  
    EXTRA_GNATRTL_NONTASKING_OBJS=i-vxwork.o i-vxwoio.o
    EXTRA_GNATRTL_TASKING_OBJS=s-vxwork.o
*************** endif
*** 665,692 ****
  
  ifeq ($(strip $(filter-out mips% wrs vx%,$(targ))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-sytaco.ads<4zsytaco.ads \
!   a-sytaco.adb<4zsytaco.adb \
!   a-intnam.ads<4zintnam.ads \
!   a-numaux.ads<4znumaux.ads \
!   s-inmaop.adb<7sinmaop.adb \
!   s-interr.adb<5zinterr.adb \
!   s-intman.ads<5zintman.ads \
!   s-intman.adb<5zintman.adb \
!   s-osinte.adb<5zosinte.adb \
!   s-osinte.ads<5zosinte.ads \
!   s-osprim.adb<5zosprim.adb \
!   s-parame.ads<5zparame.ads \
!   s-taprop.adb<5ztaprop.adb \
!   s-taspri.ads<5ztaspri.ads \
!   s-tpopsp.adb<5ztpopsp.adb \
!   s-vxwork.ads<5mvxwork.ads \
!   g-soccon.ads<3zsoccon.ads \
!   g-socthi.ads<3zsocthi.ads \
!   g-socthi.adb<3zsocthi.adb \
!   system.ads<5msystem.ads
  
!   TOOLS_TARGET_PAIRS=mlib-tgt.adb<5zml-tgt.adb
  
    EXTRA_GNATRTL_NONTASKING_OBJS=i-vxwork.o i-vxwoio.o
    EXTRA_GNATRTL_TASKING_OBJS=s-vxwork.o
--- 665,693 ----
  
  ifeq ($(strip $(filter-out mips% wrs vx%,$(targ))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-sytaco.ads<a-sytaco-vxworks.ads \
!   a-sytaco.adb<a-sytaco-vxworks.adb \
!   a-intnam.ads<a-intnam-vxworks.ads \
!   a-numaux.ads<a-numaux-vxworks.ads \
!   s-inmaop.adb<s-inmaop-posix.adb \
!   s-interr.adb<s-interr-vxworks.adb \
!   s-intman.ads<s-intman-vxworks.ads \
!   s-intman.adb<s-intman-vxworks.adb \
!   s-osinte.adb<s-osinte-vxworks.adb \
!   s-osinte.ads<s-osinte-vxworks.ads \
!   s-osprim.adb<s-osprim-vxworks.adb \
!   s-parame.ads<s-parame-vxworks.ads \
!   s-stchop.adb<s-stchop-vxworks.adb \
!   s-taprop.adb<s-taprop-vxworks.adb \
!   s-taspri.ads<s-taspri-vxworks.ads \
!   s-tpopsp.adb<s-tpopsp-vxworks.adb \
!   s-vxwork.ads<s-vxwork-mips.ads \
!   g-soccon.ads<g-soccon-vxworks.ads \
!   g-socthi.ads<g-socthi-vxworks.ads \
!   g-socthi.adb<g-socthi-vxworks.adb \
!   system.ads<system-vxworks-mips.ads
  
!   TOOLS_TARGET_PAIRS=mlib-tgt.adb<mlib-tgt-vxworks.adb
  
    EXTRA_GNATRTL_NONTASKING_OBJS=i-vxwork.o i-vxwoio.o
    EXTRA_GNATRTL_TASKING_OBJS=s-vxwork.o
*************** endif
*** 694,720 ****
  
  ifeq ($(strip $(filter-out sparc sun solaris%,$(targ))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-intnam.ads<4sintnam.ads \
!   s-inmaop.adb<7sinmaop.adb \
!   s-intman.adb<5sintman.adb \
!   s-osinte.adb<5sosinte.adb \
!   s-osinte.ads<5sosinte.ads \
!   s-osprim.adb<5sosprim.adb \
!   s-parame.adb<5sparame.adb \
!   s-taprop.adb<5staprop.adb \
!   s-tasinf.adb<5stasinf.adb \
!   s-tasinf.ads<5stasinf.ads \
!   s-taspri.ads<5staspri.ads \
!   s-tpopsp.adb<5stpopsp.adb \
!   g-soccon.ads<3ssoccon.ads \
!   g-soliop.ads<3ssoliop.ads \
!   system.ads<5ssystem.ads
  
!   TOOLS_TARGET_PAIRS=mlib-tgt.adb<5sml-tgt.adb
  
    THREADSLIB = -lposix4 -lthread
    MISCLIB = -lposix4 -lnsl -lsocket
-   SYMLIB = -laddr2line -lbfd $(LIBINTL)
    SO_OPTS = -Wl,-h,
    GNATLIB_SHARED = gnatlib-shared-dual
    GMEM_LIB = gmemlib
--- 695,720 ----
  
  ifeq ($(strip $(filter-out sparc sun solaris%,$(targ))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-intnam.ads<a-intnam-solaris.ads \
!   s-inmaop.adb<s-inmaop-posix.adb \
!   s-intman.adb<s-intman-solaris.adb \
!   s-osinte.adb<s-osinte-solaris.adb \
!   s-osinte.ads<s-osinte-solaris.ads \
!   s-osprim.adb<s-osprim-solaris.adb \
!   s-parame.adb<s-parame-solaris.adb \
!   s-taprop.adb<s-taprop-solaris.adb \
!   s-tasinf.adb<s-tasinf-solaris.adb \
!   s-tasinf.ads<s-tasinf-solaris.ads \
!   s-taspri.ads<s-taspri-solaris.ads \
!   s-tpopsp.adb<s-tpopsp-solaris.adb \
!   g-soccon.ads<g-soccon-solaris.ads \
!   g-soliop.ads<g-soliop-solaris.ads \
!   system.ads<system-solaris-sparc.ads
  
!   TOOLS_TARGET_PAIRS=mlib-tgt.adb<mlib-tgt-solaris.adb
  
    THREADSLIB = -lposix4 -lthread
    MISCLIB = -lposix4 -lnsl -lsocket
    SO_OPTS = -Wl,-h,
    GNATLIB_SHARED = gnatlib-shared-dual
    GMEM_LIB = gmemlib
*************** ifeq ($(strip $(filter-out sparc sun sol
*** 723,830 ****
  
    ifeq ($(strip $(filter-out fsu FSU,$(THREAD_KIND))),)
      LIBGNAT_TARGET_PAIRS = \
!     a-intnam.ads<4sintnam.ads \
!     s-inmaop.adb<7sinmaop.adb \
!     s-intman.adb<5sintman.adb \
!     s-osinte.adb<7sosinte.adb \
!     s-osinte.ads<5tosinte.ads \
!     s-osprim.adb<5sosprim.adb \
!     s-taprop.adb<7staprop.adb \
!     s-taspri.ads<7staspri.ads \
!     s-tpopsp.adb<7stpopsp.adb \
!     g-soccon.ads<3ssoccon.ads \
!     g-soliop.ads<3ssoliop.ads \
!     system.ads<5ssystem.ads
  
      THREADSLIB = -lgthreads -lmalloc
    endif
  
    ifeq ($(strip $(filter-out pthread PTHREAD,$(THREAD_KIND))),)
      LIBGNAT_TARGET_PAIRS = \
!     a-intnam.ads<4sintnam.ads \
!     s-inmaop.adb<7sinmaop.adb \
!     s-intman.adb<7sintman.adb \
!     s-osinte.adb<5iosinte.adb \
!     s-osinte.ads<54osinte.ads \
!     s-osprim.adb<5sosprim.adb \
!     s-taprop.adb<7staprop.adb \
!     s-taspri.ads<7staspri.ads \
!     s-tpopsp.adb<5atpopsp.adb \
!     g-soccon.ads<3ssoccon.ads \
!     g-soliop.ads<3ssoliop.ads \
!     system.ads<5ssystem.ads
  
      THREADSLIB = -lposix4 -lpthread
    endif
  
    ifeq ($(strip $(filter-out m64,$(THREAD_KIND))),)
      LIBGNAT_TARGET_PAIRS = \
!     a-intnam.ads<4sintnam.ads \
!     s-inmaop.adb<7sinmaop.adb \
!     s-intman.adb<5sintman.adb \
!     s-osinte.adb<5sosinte.adb \
!     s-osinte.ads<5sosinte.ads \
!     s-osprim.adb<5sosprim.adb \
!     s-parame.adb<5sparame.adb \
!     s-taprop.adb<5staprop.adb \
!     s-tasinf.adb<5stasinf.adb \
!     s-tasinf.ads<5stasinf.ads \
!     s-taspri.ads<5staspri.ads \
!     s-tpopsp.adb<5stpopsp.adb \
!     g-soccon.ads<3ssoccon.ads \
!     g-soliop.ads<3ssoliop.ads \
!     system.ads<5usystem.ads
    endif
  endif
  
  ifeq ($(strip $(filter-out %86 solaris2%,$(arch) $(osys))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-numaux.adb<86numaux.adb \
!   a-numaux.ads<86numaux.ads \
!   a-intnam.ads<4sintnam.ads \
!   s-inmaop.adb<7sinmaop.adb \
!   s-intman.adb<5sintman.adb \
!   s-mastop.adb<5omastop.adb \
!   s-osinte.adb<5sosinte.adb \
!   s-osinte.ads<5sosinte.ads \
!   s-osprim.adb<5sosprim.adb \
!   s-parame.adb<5sparame.adb \
!   s-taprop.adb<5staprop.adb \
!   s-tasinf.adb<5stasinf.adb \
!   s-tasinf.ads<5stasinf.ads \
!   s-taspri.ads<5staspri.ads \
!   s-tpopsp.adb<5stpopsp.adb \
!   g-soccon.ads<3ssoccon.ads \
!   g-soliop.ads<3ssoliop.ads \
!   system.ads<5esystem.ads
  
    THREADSLIB = -lposix4 -lthread
    MISCLIB = -lposix4 -lnsl -lsocket
    SO_OPTS = -Wl,-h,
    GNATLIB_SHARED = gnatlib-shared-dual
    PREFIX_OBJS = $(PREFIX_REAL_OBJS)
    LIBRARY_VERSION := $(LIB_VERSION)
  endif
  
  ifeq ($(strip $(filter-out %86 linux%,$(arch) $(osys))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-intnam.ads<4lintnam.ads \
!   a-numaux.adb<86numaux.adb \
!   a-numaux.ads<86numaux.ads \
!   s-inmaop.adb<7sinmaop.adb \
!   s-intman.adb<7sintman.adb \
!   s-mastop.adb<5omastop.adb \
!   s-osinte.adb<5iosinte.adb \
!   s-osinte.ads<5iosinte.ads \
!   s-osprim.adb<7sosprim.adb \
!   s-taprop.adb<5itaprop.adb \
!   s-taspri.ads<5itaspri.ads \
!   s-tpopsp.adb<5atpopsp.adb \
!   s-parame.adb<5lparame.adb \
!   system.ads<5lsystem.ads
  
-   TOOLS_TARGET_PAIRS = mlib-tgt.adb<5lml-tgt.adb
-   SYMLIB = -laddr2line -lbfd -liberty $(LIBINTL)
    THREADSLIB = -lpthread
    GNATLIB_SHARED = gnatlib-shared-dual
    GMEM_LIB = gmemlib
--- 723,835 ----
  
    ifeq ($(strip $(filter-out fsu FSU,$(THREAD_KIND))),)
      LIBGNAT_TARGET_PAIRS = \
!     a-intnam.ads<a-intnam-solaris.ads \
!     s-inmaop.adb<s-inmaop-posix.adb \
!     s-intman.adb<s-intman-solaris.adb \
!     s-osinte.adb<s-osinte-fsu.adb \
!     s-osinte.ads<s-osinte-solaris-fsu.ads \
!     s-osprim.adb<s-osprim-solaris.adb \
!     s-taprop.adb<s-taprop-posix.adb \
!     s-taspri.ads<s-taspri-posix.ads \
!     s-tpopsp.adb<s-tpopsp-posix.adb \
!     g-soccon.ads<g-soccon-solaris.ads \
!     g-soliop.ads<g-soliop-solaris.ads \
!     system.ads<system-solaris-sparc.ads
  
      THREADSLIB = -lgthreads -lmalloc
    endif
  
    ifeq ($(strip $(filter-out pthread PTHREAD,$(THREAD_KIND))),)
      LIBGNAT_TARGET_PAIRS = \
!     a-intnam.ads<a-intnam-solaris.ads \
!     s-inmaop.adb<s-inmaop-posix.adb \
!     s-intman.adb<s-intman-posix.adb \
!     s-osinte.adb<s-osinte-posix.adb \
!     s-osinte.ads<s-osinte-solaris-posix.ads \
!     s-osprim.adb<s-osprim-solaris.adb \
!     s-taprop.adb<s-taprop-posix.adb \
!     s-taspri.ads<s-taspri-posix.ads \
!     s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
!     g-soccon.ads<g-soccon-solaris.ads \
!     g-soliop.ads<g-soliop-solaris.ads \
!     system.ads<system-solaris-sparc.ads
  
      THREADSLIB = -lposix4 -lpthread
    endif
  
    ifeq ($(strip $(filter-out m64,$(THREAD_KIND))),)
      LIBGNAT_TARGET_PAIRS = \
!     a-intnam.ads<a-intnam-solaris.ads \
!     s-inmaop.adb<s-inmaop-posix.adb \
!     s-intman.adb<s-intman-solaris.adb \
!     s-osinte.adb<s-osinte-solaris.adb \
!     s-osinte.ads<s-osinte-solaris.ads \
!     s-osprim.adb<s-osprim-solaris.adb \
!     s-parame.adb<s-parame-solaris.adb \
!     s-taprop.adb<s-taprop-solaris.adb \
!     s-tasinf.adb<s-tasinf-solaris.adb \
!     s-tasinf.ads<s-tasinf-solaris.ads \
!     s-taspri.ads<s-taspri-solaris.ads \
!     s-tpopsp.adb<s-tpopsp-solaris.adb \
!     g-soccon.ads<g-soccon-solaris.ads \
!     g-soliop.ads<g-soliop-solaris.ads \
!     system.ads<system-solaris-sparcv9.ads
    endif
  endif
  
  ifeq ($(strip $(filter-out %86 solaris2%,$(arch) $(osys))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-numaux.adb<a-numaux-x86.adb \
!   a-numaux.ads<a-numaux-x86.ads \
!   a-intnam.ads<a-intnam-solaris.ads \
!   s-inmaop.adb<s-inmaop-posix.adb \
!   s-intman.adb<s-intman-solaris.adb \
!   s-mastop.adb<s-mastop-x86.adb \
!   s-osinte.adb<s-osinte-solaris.adb \
!   s-osinte.ads<s-osinte-solaris.ads \
!   s-osprim.adb<s-osprim-solaris.adb \
!   s-parame.adb<s-parame-solaris.adb \
!   s-taprop.adb<s-taprop-solaris.adb \
!   s-tasinf.adb<s-tasinf-solaris.adb \
!   s-tasinf.ads<s-tasinf-solaris.ads \
!   s-taspri.ads<s-taspri-solaris.ads \
!   s-tpopsp.adb<s-tpopsp-solaris.adb \
!   g-soccon.ads<g-soccon-solaris.ads \
!   g-soliop.ads<g-soliop-solaris.ads \
!   system.ads<system-solaris-x86.ads
! 
!   TOOLS_TARGET_PAIRS=mlib-tgt.adb<mlib-tgt-solaris.adb
  
    THREADSLIB = -lposix4 -lthread
    MISCLIB = -lposix4 -lnsl -lsocket
    SO_OPTS = -Wl,-h,
    GNATLIB_SHARED = gnatlib-shared-dual
+   GMEM_LIB = gmemlib
    PREFIX_OBJS = $(PREFIX_REAL_OBJS)
    LIBRARY_VERSION := $(LIB_VERSION)
  endif
  
  ifeq ($(strip $(filter-out %86 linux%,$(arch) $(osys))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-intnam.ads<a-intnam-linux.ads \
!   a-numaux.adb<a-numaux-x86.adb \
!   a-numaux.ads<a-numaux-x86.ads \
!   s-inmaop.adb<s-inmaop-posix.adb \
!   s-intman.adb<s-intman-posix.adb \
!   s-mastop.adb<s-mastop-x86.adb \
!   s-osinte.adb<s-osinte-posix.adb \
!   s-osinte.ads<s-osinte-linux.ads \
!   s-osprim.adb<s-osprim-posix.adb \
!   s-taprop.adb<s-taprop-linux.adb \
!   s-taspri.ads<s-taspri-linux.ads \
!   s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
!   s-parame.adb<s-parame-linux.adb \
!   system.ads<system-linux-x86.ads
! 
!   TOOLS_TARGET_PAIRS =  \
!     mlib-tgt.adb<mlib-tgt-linux.adb \
!     indepsw.adb<indepsw-linux.adb
  
    THREADSLIB = -lpthread
    GNATLIB_SHARED = gnatlib-shared-dual
    GMEM_LIB = gmemlib
*************** ifeq ($(strip $(filter-out %86 linux%,$(
*** 833,851 ****
  
    ifeq ($(strip $(filter-out fsu FSU,$(THREAD_KIND))),)
      LIBGNAT_TARGET_PAIRS = \
!     a-intnam.ads<4lintnam.ads \
!     a-numaux.adb<86numaux.adb \
!     a-numaux.ads<86numaux.ads \
!     s-inmaop.adb<7sinmaop.adb \
!     s-intman.adb<7sintman.adb \
!     s-mastop.adb<5omastop.adb \
!     s-osinte.adb<7sosinte.adb \
!     s-osinte.ads<5losinte.ads \
!     s-osprim.adb<7sosprim.adb \
!     s-taprop.adb<7staprop.adb \
!     s-taspri.ads<7staspri.ads \
!     s-tpopsp.adb<7stpopsp.adb \
!     system.ads<5lsystem.ads
  
      THREADSLIB = -lgthreads -lmalloc
    endif
--- 838,856 ----
  
    ifeq ($(strip $(filter-out fsu FSU,$(THREAD_KIND))),)
      LIBGNAT_TARGET_PAIRS = \
!     a-intnam.ads<a-intnam-linux.ads \
!     a-numaux.adb<a-numaux-x86.adb \
!     a-numaux.ads<a-numaux-x86.ads \
!     s-inmaop.adb<s-inmaop-posix.adb \
!     s-intman.adb<s-intman-posix.adb \
!     s-mastop.adb<s-mastop-x86.adb \
!     s-osinte.adb<s-osinte-fsu.adb \
!     s-osinte.ads<s-osinte-linux-fsu.ads \
!     s-osprim.adb<s-osprim-posix.adb \
!     s-taprop.adb<s-taprop-posix.adb \
!     s-taspri.ads<s-taspri-posix.ads \
!     s-tpopsp.adb<s-tpopsp-posix.adb \
!     system.ads<system-linux-x86.ads
  
      THREADSLIB = -lgthreads -lmalloc
    endif
*************** endif
*** 853,969 ****
  
  ifeq ($(strip $(filter-out %86 freebsd%,$(arch) $(osys))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-intnam.ads<45intnam.ads \
!   g-soccon.ads<35soccon.ads \
!   s-inmaop.adb<7sinmaop.adb \
!   s-intman.adb<7sintman.adb \
!   s-mastop.adb<5omastop.adb \
!   s-osinte.adb<55osinte.adb \
!   s-osinte.ads<55osinte.ads \
!   s-osprim.adb<7sosprim.adb \
!   s-taprop.adb<7staprop.adb \
!   s-taspri.ads<7staspri.ads \
!   s-tpopsp.adb<7stpopsp.adb \
!   system.ads<56system.ads
  
!   THREADSLIB=
    LIBRARY_VERSION := $(LIB_VERSION)
  endif
  
  ifeq ($(strip $(filter-out mips sgi irix%,$(targ))),)
    ifeq ($(strip $(filter-out mips sgi irix6%,$(targ))),)
      LIBGNAT_TARGET_PAIRS = \
!     a-intnam.ads<4gintnam.ads \
!     s-inmaop.adb<7sinmaop.adb \
!     s-intman.adb<5fintman.adb \
!     s-mastop.adb<5gmastop.adb \
!     s-osinte.adb<5fosinte.adb \
!     s-osinte.ads<5fosinte.ads \
!     s-osprim.adb<7sosprim.adb \
!     s-proinf.adb<5gproinf.adb \
!     s-proinf.ads<5gproinf.ads \
!     s-taprop.adb<5ftaprop.adb \
!     s-tasinf.ads<5ftasinf.ads \
!     s-taspri.ads<7staspri.ads \
!     s-tpopsp.adb<7stpopsp.adb \
!     s-traceb.adb<7straceb.adb \
!     g-soccon.ads<3gsoccon.ads \
!     system.ads<5gsystem.ads
  
      THREADSLIB = -lpthread
      GNATLIB_SHARED = gnatlib-shared-default
  
    else
      LIBGNAT_TARGET_PAIRS = \
!     a-intnam.ads<4gintnam.ads \
!     s-inmaop.adb<5ninmaop.adb \
!     s-interr.adb<5ginterr.adb \
!     s-intman.adb<5gintman.adb \
!     s-mastop.adb<5gmastop.adb \
!     s-osinte.adb<5fosinte.adb \
!     s-osinte.ads<5gosinte.ads \
!     s-osprim.adb<7sosprim.adb \
!     s-proinf.adb<5gproinf.adb \
!     s-proinf.ads<5gproinf.ads \
!     s-taprop.adb<5gtaprop.adb \
!     s-tasinf.adb<5gtasinf.adb \
!     s-tasinf.ads<5gtasinf.ads \
!     s-taspri.ads<7staspri.ads \
!     s-traceb.adb<7straceb.adb \
!     g-soccon.ads<3gsoccon.ads \
!     system.ads<5fsystem.ads
! 
!     THREADSLIB =
    endif
  
!   TOOLS_TARGET_PAIRS = mlib-tgt.adb<5gml-tgt.adb
    TGT_LIB = -lexc
    MISCLIB = -lexc
-   SO_OPTS = -Wl,-all,-set_version,sgi1.0,-update_registry,../so_locations,-soname,
    PREFIX_OBJS = $(PREFIX_REAL_OBJS)
    LIBRARY_VERSION := $(LIB_VERSION)
  endif
  
  ifeq ($(strip $(filter-out hppa% hp hpux10%,$(targ))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-excpol.adb<4wexcpol.adb \
!   a-intnam.ads<4hintnam.ads \
!   s-inmaop.adb<7sinmaop.adb \
!   s-interr.adb<5ginterr.adb \
!   s-intman.adb<7sintman.adb \
!   s-osinte.adb<5hosinte.adb \
!   s-osinte.ads<5hosinte.ads \
!   s-parame.ads<5hparame.ads \
!   s-osprim.adb<7sosprim.adb \
!   s-taprop.adb<5htaprop.adb \
!   s-taspri.ads<5htaspri.ads \
!   s-tpopsp.adb<7stpopsp.adb \
!   g-soccon.ads<3hsoccon.ads \
!   system.ads<5hsystem.ads
  
    PREFIX_OBJS = $(PREFIX_REAL_OBJS)
  endif
  
  ifeq ($(strip $(filter-out hppa% hp hpux11%,$(targ))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-intnam.ads<4hintnam.ads \
!   s-inmaop.adb<7sinmaop.adb \
!   s-intman.adb<7sintman.adb \
!   s-osinte.adb<5iosinte.adb \
!   s-osinte.ads<53osinte.ads \
!   s-parame.ads<5hparame.ads \
!   s-osprim.adb<7sosprim.adb \
!   s-traceb.adb<5htraceb.adb \
!   s-taprop.adb<7staprop.adb \
!   s-taspri.ads<7staspri.ads \
!   s-tpopsp.adb<5atpopsp.adb \
!   g-soccon.ads<3hsoccon.ads \
!   system.ads<5hsystem.ads
  
!   TOOLS_TARGET_PAIRS = mlib-tgt.adb<5hml-tgt.adb
    TGT_LIB = /usr/lib/libcl.a
    THREADSLIB = -lpthread
-   SYMLIB = -laddr2line -lbfd $(LIBINTL)
    GMEM_LIB = gmemlib
    soext = .sl
    SO_OPTS = -Wl,+h,
--- 858,1016 ----
  
  ifeq ($(strip $(filter-out %86 freebsd%,$(arch) $(osys))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-intnam.ads<a-intnam-freebsd.ads \
!   a-numaux.adb<a-numaux-x86.adb \
!   a-numaux.ads<a-numaux-x86.ads \
!   g-soccon.ads<g-soccon-freebsd.ads \
!   s-inmaop.adb<s-inmaop-posix.adb \
!   s-intman.adb<s-intman-posix.adb \
!   s-mastop.adb<s-mastop-x86.adb \
!   s-osinte.adb<s-osinte-freebsd.adb \
!   s-osinte.ads<s-osinte-freebsd.ads \
!   s-osprim.adb<s-osprim-posix.adb \
!   s-taprop.adb<s-taprop-posix.adb \
!   s-taspri.ads<s-taspri-posix.ads \
!   s-tpopsp.adb<s-tpopsp-posix.adb \
!   system.ads<system-freebsd-x86.ads
  
!   TOOLS_TARGET_PAIRS = \
!   mlib-tgt.adb<mlib-tgt-linux.adb
!   GNATLIB_SHARED = gnatlib-shared-dual
! 
!   THREADSLIB= -lc_r
!   GMEM_LIB = gmemlib
!   PREFIX_OBJS = $(PREFIX_REAL_OBJS)
!   LIBRARY_VERSION := $(LIB_VERSION)
! endif
! 
! ifeq ($(strip $(filter-out s390% linux%,$(arch) $(osys))),)
!   ifeq ($(strip $(filter-out s390x,$(arch))),)
!     LIBGNAT_TARGET_PAIRS = \
!     a-intnam.ads<a-intnam-linux.ads \
!     s-inmaop.adb<s-inmaop-posix.adb \
!     s-intman.adb<s-intman-posix.adb \
!     s-osinte.adb<s-osinte-posix.adb \
!     s-osinte.ads<s-osinte-linux.ads \
!     s-osprim.adb<s-osprim-posix.adb \
!     s-taprop.adb<s-taprop-linux.adb \
!     s-taspri.ads<s-taspri-linux.ads \
!     s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
!     s-parame.adb<s-parame-linux.adb \
!     system.ads<system-linux-s390x.ads
!   else
!     LIBGNAT_TARGET_PAIRS = \
!     a-intnam.ads<a-intnam-linux.ads \
!     s-inmaop.adb<s-inmaop-posix.adb \
!     s-intman.adb<s-intman-posix.adb \
!     s-osinte.adb<s-osinte-posix.adb \
!     s-osinte.ads<s-osinte-linux.ads \
!     s-osprim.adb<s-osprim-posix.adb \
!     s-taprop.adb<s-taprop-linux.adb \
!     s-taspri.ads<s-taspri-linux.ads \
!     s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
!     s-parame.adb<s-parame-linux.adb \
!     system.ads<system-linux-s390.ads
!   endif
! 
!   TOOLS_TARGET_PAIRS =  \
!     mlib-tgt.adb<mlib-tgt-linux.adb
! 
!   THREADSLIB = -lpthread
!   GNATLIB_SHARED = gnatlib-shared-dual
!   PREFIX_OBJS = $(PREFIX_REAL_OBJS)
    LIBRARY_VERSION := $(LIB_VERSION)
  endif
  
  ifeq ($(strip $(filter-out mips sgi irix%,$(targ))),)
    ifeq ($(strip $(filter-out mips sgi irix6%,$(targ))),)
      LIBGNAT_TARGET_PAIRS = \
!     a-intnam.ads<a-intnam-irix.ads \
!     s-inmaop.adb<s-inmaop-posix.adb \
!     s-intman.adb<s-intman-irix.adb \
!     s-mastop.adb<s-mastop-irix.adb \
!     s-osinte.adb<s-osinte-irix.adb \
!     s-osinte.ads<s-osinte-irix.ads \
!     s-osprim.adb<s-osprim-posix.adb \
!     s-proinf.adb<s-proinf-irix-athread.adb \
!     s-proinf.ads<s-proinf-irix-athread.ads \
!     s-taprop.adb<s-taprop-irix.adb \
!     s-tasinf.ads<s-tasinf-irix.ads \
!     s-taspri.ads<s-taspri-posix.ads \
!     s-tpopsp.adb<s-tpopsp-posix.adb \
!     s-traceb.adb<s-traceb-mastop.adb \
!     g-soccon.ads<g-soccon-irix.ads \
!     system.ads<system-irix-n32.ads
  
      THREADSLIB = -lpthread
      GNATLIB_SHARED = gnatlib-shared-default
  
    else
      LIBGNAT_TARGET_PAIRS = \
!     a-intnam.ads<a-intnam-irix.ads \
!     s-inmaop.adb<s-inmaop-dummy.adb \
!     s-interr.adb<s-interr-sigaction.adb \
!     s-intman.adb<s-intman-irix-athread.adb \
!     s-mastop.adb<s-mastop-irix.adb \
!     s-osinte.adb<s-osinte-irix.adb \
!     s-osinte.ads<s-osinte-irix-athread.ads \
!     s-osprim.adb<s-osprim-posix.adb \
!     s-proinf.adb<s-proinf-irix-athread.adb \
!     s-proinf.ads<s-proinf-irix-athread.ads \
!     s-taprop.adb<s-taprop-irix-athread.adb \
!     s-tasinf.adb<s-tasinf-irix-athread.adb \
!     s-tasinf.ads<s-tasinf-irix-athread.ads \
!     s-taspri.ads<s-taspri-posix.ads \
!     s-traceb.adb<s-traceb-mastop.adb \
!     g-soccon.ads<g-soccon-irix.ads \
!     system.ads<system-irix-o32.ads
    endif
  
!   TOOLS_TARGET_PAIRS = mlib-tgt.adb<mlib-tgt-irix.adb
    TGT_LIB = -lexc
    MISCLIB = -lexc
    PREFIX_OBJS = $(PREFIX_REAL_OBJS)
    LIBRARY_VERSION := $(LIB_VERSION)
  endif
  
  ifeq ($(strip $(filter-out hppa% hp hpux10%,$(targ))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-excpol.adb<a-excpol-abort.adb \
!   a-intnam.ads<a-intnam-hpux.ads \
!   s-inmaop.adb<s-inmaop-posix.adb \
!   s-interr.adb<s-interr-sigaction.adb \
!   s-intman.adb<s-intman-posix.adb \
!   s-osinte.adb<s-osinte-hpux-dce.adb \
!   s-osinte.ads<s-osinte-hpux-dce.ads \
!   s-parame.ads<s-parame-hpux.ads \
!   s-osprim.adb<s-osprim-posix.adb \
!   s-taprop.adb<s-taprop-hpux-dce.adb \
!   s-taspri.ads<s-taspri-hpux-dce.ads \
!   s-tpopsp.adb<s-tpopsp-posix.adb \
!   g-soccon.ads<g-soccon-hpux.ads \
!   system.ads<system-hpux.ads
  
    PREFIX_OBJS = $(PREFIX_REAL_OBJS)
  endif
  
  ifeq ($(strip $(filter-out hppa% hp hpux11%,$(targ))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-intnam.ads<a-intnam-hpux.ads \
!   s-inmaop.adb<s-inmaop-posix.adb \
!   s-intman.adb<s-intman-posix.adb \
!   s-osinte.adb<s-osinte-posix.adb \
!   s-osinte.ads<s-osinte-hpux.ads \
!   s-parame.ads<s-parame-hpux.ads \
!   s-osprim.adb<s-osprim-posix.adb \
!   s-traceb.adb<s-traceb-hpux.adb \
!   s-taprop.adb<s-taprop-posix.adb \
!   s-taspri.ads<s-taspri-posix.ads \
!   s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
!   g-soccon.ads<g-soccon-hpux.ads \
!   system.ads<system-hpux.ads
  
!   TOOLS_TARGET_PAIRS = mlib-tgt.adb<mlib-tgt-hpux.adb
    TGT_LIB = /usr/lib/libcl.a
    THREADSLIB = -lpthread
    GMEM_LIB = gmemlib
    soext = .sl
    SO_OPTS = -Wl,+h,
*************** ifeq ($(strip $(filter-out hppa% hp hpux
*** 973,992 ****
  
    ifeq ($(strip $(filter-out dce DCE,$(THREAD_KIND))),)
      LIBGNAT_TARGET_PAIRS = \
!     a-excpol.adb<4wexcpol.adb \
!     a-intnam.ads<4hintnam.ads \
!     s-inmaop.adb<7sinmaop.adb \
!     s-interr.adb<5ginterr.adb \
!     s-intman.adb<7sintman.adb \
!     s-osinte.adb<5hosinte.adb \
!     s-osinte.ads<5hosinte.ads \
!     s-parame.ads<5hparame.ads \
!     s-osprim.adb<7sosprim.adb \
!     s-taprop.adb<5htaprop.adb \
!     s-taspri.ads<5htaspri.ads \
!     s-tpopsp.adb<7stpopsp.adb \
!     g-soccon.ads<3hsoccon.ads \
!     system.ads<5hsystem.ads
  
      TGT_LIB =
      THREADSLIB = -lcma
--- 1020,1039 ----
  
    ifeq ($(strip $(filter-out dce DCE,$(THREAD_KIND))),)
      LIBGNAT_TARGET_PAIRS = \
!     a-excpol.adb<a-excpol-abort.adb \
!     a-intnam.ads<a-intnam-hpux.ads \
!     s-inmaop.adb<s-inmaop-posix.adb \
!     s-interr.adb<s-interr-sigaction.adb \
!     s-intman.adb<s-intman-posix.adb \
!     s-osinte.adb<s-osinte-hpux-dce.adb \
!     s-osinte.ads<s-osinte-hpux-dce.ads \
!     s-parame.ads<s-parame-hpux.ads \
!     s-osprim.adb<s-osprim-posix.adb \
!     s-taprop.adb<s-taprop-hpux-dce.adb \
!     s-taspri.ads<s-taspri-hpux-dce.ads \
!     s-tpopsp.adb<s-tpopsp-posix.adb \
!     g-soccon.ads<g-soccon-hpux.ads \
!     system.ads<system-hpux.ads
  
      TGT_LIB =
      THREADSLIB = -lcma
*************** endif
*** 995,1131 ****
  
  ifeq ($(strip $(filter-out ibm aix%,$(manu) $(osys))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-intnam.ads<4cintnam.ads \
!   s-inmaop.adb<7sinmaop.adb \
!   s-intman.adb<7sintman.adb \
!   s-osinte.adb<5bosinte.adb \
!   s-osinte.ads<5bosinte.ads \
!   s-osprim.adb<7sosprim.adb \
!   s-taprop.adb<7staprop.adb \
!   s-taspri.ads<7staspri.ads \
!   s-tpopsp.adb<7stpopsp.adb \
!   g-soccon.ads<3bsoccon.ads \
!   system.ads<5bsystem.ads
  
    THREADSLIB = -lpthreads
    PREFIX_OBJS=$(PREFIX_REAL_OBJS)
  
    ifeq ($(strip $(filter-out fsu FSU,$(THREAD_KIND))),)
      LIBGNAT_TARGET_PAIRS = \
!     a-intnam.ads<4cintnam.ads \
!     s-inmaop.adb<7sinmaop.adb \
!     s-intman.adb<7sintman.adb \
!     s-osinte.adb<7sosinte.adb \
!     s-osinte.ads<5cosinte.ads \
!     s-osprim.adb<7sosprim.adb \
!     s-taprop.adb<7staprop.adb \
!     s-taspri.ads<7staspri.ads \
!     s-tpopsp.adb<7stpopsp.adb \
!     g-soccon.ads<3bsoccon.ads \
!     system.ads<5bsystem.ads
  
      THREADSLIB = -lgthreads -lmalloc
    endif
  
!   TOOLS_TARGET_PAIRS = mlib-tgt.adb<5bml-tgt.adb
!   GMEM_LIB = gmemlib
!   SYMLIB = -laddr2line -lbfd -liberty $(LIBINTL)
  
  endif
  
  ifeq ($(strip $(filter-out lynxos,$(osys))),)
    ifeq ($(strip $(filter-out %86 lynxos,$(arch) $(osys))),)
      LIBGNAT_TARGET_PAIRS = \
!     a-numaux.adb<86numaux.adb \
!     a-numaux.ads<86numaux.ads \
!     a-intnam.ads<42intnam.ads \
!     s-mastop.adb<5omastop.adb \
!     s-inmaop.adb<7sinmaop.adb \
!     s-intman.adb<7sintman.adb \
!     s-osinte.adb<56osinte.adb \
!     s-osinte.ads<56osinte.ads \
!     s-osprim.adb<7sosprim.adb \
!     s-taprop.adb<56taprop.adb \
!     s-taspri.ads<56taspri.ads \
!     s-tpopsp.adb<56tpopsp.adb \
!     system.ads<58system.ads
  
      PREFIX_OBJS=$(PREFIX_REAL_OBJS)
  
    else
      LIBGNAT_TARGET_PAIRS = \
!     a-intnam.ads<42intnam.ads \
!     s-inmaop.adb<7sinmaop.adb \
!     s-intman.adb<7sintman.adb \
!     s-osinte.adb<52osinte.adb \
!     s-osinte.ads<52osinte.ads \
!     s-osprim.adb<7sosprim.adb \
!     s-taprop.adb<7staprop.adb \
!     s-taspri.ads<7staspri.ads \
!     s-tpopsp.adb<7stpopsp.adb \
!     system.ads<57system.ads
  
      ifeq ($(strip $(filter-out pthread PTHREAD,$(THREAD_KIND))),)
        LIBGNAT_TARGET_PAIRS = \
!       a-intnam.ads<42intnam.ads \
!       s-inmaop.adb<7sinmaop.adb \
!       s-intman.adb<7sintman.adb \
!       s-osinte.adb<56osinte.adb \
!       s-osinte.ads<56osinte.ads \
!       s-osprim.adb<7sosprim.adb \
!       s-taprop.adb<56taprop.adb \
!       s-taspri.ads<56taspri.ads \
!       s-tpopsp.adb<56tpopsp.adb \
!       system.ads<57system.ads
      endif
- 
    endif
  endif
  
  ifeq ($(strip $(filter-out rtems%,$(osys))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-intnam.ads<4rintnam.ads \
!   s-inmaop.adb<7sinmaop.adb \
!   s-intman.adb<7sintman.adb \
!   s-osinte.adb<5rosinte.adb \
!   s-osinte.ads<5rosinte.ads \
!   s-osprim.adb<7sosprim.adb \
!   s-parame.adb<5rparame.adb \
!   s-taprop.adb<7staprop.adb \
!   s-taspri.ads<7staspri.ads \
!   s-tpopsp.adb<5rtpopsp.adb
  endif
  
  ifeq ($(strip $(filter-out alpha% dec osf%,$(targ))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-intnam.ads<4aintnam.ads \
!   s-inmaop.adb<7sinmaop.adb \
!   s-intman.adb<7sintman.adb \
!   s-mastop.adb<5amastop.adb \
!   s-osinte.adb<5aosinte.adb \
!   s-osinte.ads<5aosinte.ads \
!   s-osprim.adb<5posprim.adb \
!   s-taprop.adb<5ataprop.adb \
!   s-tasinf.ads<5atasinf.ads \
!   s-taspri.ads<5ataspri.ads \
!   s-tpopsp.adb<5atpopsp.adb \
!   s-traceb.adb<7straceb.adb \
!   g-soccon.ads<3asoccon.ads \
!   system.ads<5asystem.ads
  
!   TOOLS_TARGET_PAIRS=mlib-tgt.adb<5aml-tgt.adb
  
    GMEM_LIB=gmemlib
-   SYMLIB = -laddr2line -lbfd $(LIBINTL)
    THREADSLIB = -lpthread -lmach -lexc -lrt
    PREFIX_OBJS = $(PREFIX_REAL_OBJS)
    GNATLIB_SHARED = gnatlib-shared-default
    LIBRARY_VERSION := $(LIB_VERSION)
  endif
  
! ifeq ($(strip $(filter-out alpha% ia64 dec vms% openvms% alphavms%,$(host))),)
  
  soext  = .exe
  
  .SUFFIXES: .sym
  
--- 1042,1186 ----
  
  ifeq ($(strip $(filter-out ibm aix%,$(manu) $(osys))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-intnam.ads<a-intnam-aix.ads \
!   s-inmaop.adb<s-inmaop-posix.adb \
!   s-intman.adb<s-intman-posix.adb \
!   s-osinte.adb<s-osinte-aix.adb \
!   s-osinte.ads<s-osinte-aix.ads \
!   s-osprim.adb<s-osprim-posix.adb \
!   s-taprop.adb<s-taprop-posix.adb \
!   s-taspri.ads<s-taspri-posix.ads \
!   s-tpopsp.adb<s-tpopsp-posix.adb \
!   g-soccon.ads<g-soccon-aix.ads \
!   system.ads<system-aix.ads
  
    THREADSLIB = -lpthreads
    PREFIX_OBJS=$(PREFIX_REAL_OBJS)
  
    ifeq ($(strip $(filter-out fsu FSU,$(THREAD_KIND))),)
      LIBGNAT_TARGET_PAIRS = \
!     a-intnam.ads<a-intnam-aix.ads \
!     s-inmaop.adb<s-inmaop-posix.adb \
!     s-intman.adb<s-intman-posix.adb \
!     s-osinte.adb<s-osinte-fsu.adb \
!     s-osinte.ads<s-osinte-aix-fsu.ads \
!     s-osprim.adb<s-osprim-posix.adb \
!     s-taprop.adb<s-taprop-posix.adb \
!     s-taspri.ads<s-taspri-posix.ads \
!     s-tpopsp.adb<s-tpopsp-posix.adb \
!     g-soccon.ads<g-soccon-aix.ads \
!     system.ads<system-aix.ads
  
      THREADSLIB = -lgthreads -lmalloc
    endif
  
!   TOOLS_TARGET_PAIRS = \
!   mlib-tgt.adb<mlib-tgt-aix.adb \
!   indepsw.adb<indepsw-aix.adb
  
+   GMEM_LIB = gmemlib
  endif
  
  ifeq ($(strip $(filter-out lynxos,$(osys))),)
+   TOOLS_TARGET_PAIRS=mlib-tgt.adb<mlib-tgt-lynxos.adb 
+ 
    ifeq ($(strip $(filter-out %86 lynxos,$(arch) $(osys))),)
      LIBGNAT_TARGET_PAIRS = \
!     a-numaux.adb<a-numaux-x86.adb \
!     a-numaux.ads<a-numaux-x86.ads \
!     a-intnam.ads<a-intnam-lynxos.ads \
!     s-mastop.adb<s-mastop-x86.adb \
!     s-inmaop.adb<s-inmaop-posix.adb \
!     s-intman.adb<s-intman-posix.adb \
!     s-osinte.adb<s-osinte-lynxos.adb \
!     s-osinte.ads<s-osinte-lynxos.ads \
!     s-osprim.adb<s-osprim-posix.adb \
!     s-taprop.adb<s-taprop-lynxos.adb \
!     s-taspri.ads<s-taspri-lynxos.ads \
!     s-tpopsp.adb<s-tpopsp-lynxos.adb \
!     system.ads<system-lynxos-x86.ads
  
      PREFIX_OBJS=$(PREFIX_REAL_OBJS)
  
    else
      LIBGNAT_TARGET_PAIRS = \
!     a-intnam.ads<a-intnam-lynxos.ads \
!     s-inmaop.adb<s-inmaop-posix.adb \
!     s-intman.adb<s-intman-posix.adb \
!     s-osinte.adb<s-osinte-lynxos-3.adb \
!     s-osinte.ads<s-osinte-lynxos-3.ads \
!     s-osprim.adb<s-osprim-posix.adb \
!     s-taprop.adb<s-taprop-posix.adb \
!     s-taspri.ads<s-taspri-posix.ads \
!     s-tpopsp.adb<s-tpopsp-posix.adb \
!     system.ads<system-lynxos-ppc.ads
  
      ifeq ($(strip $(filter-out pthread PTHREAD,$(THREAD_KIND))),)
        LIBGNAT_TARGET_PAIRS = \
!       a-intnam.ads<a-intnam-lynxos.ads \
!       s-inmaop.adb<s-inmaop-posix.adb \
!       s-intman.adb<s-intman-posix.adb \
!       s-osinte.adb<s-osinte-lynxos.adb \
!       s-osinte.ads<s-osinte-lynxos.ads \
!       s-osprim.adb<s-osprim-posix.adb \
!       s-taprop.adb<s-taprop-lynxos.adb \
!       s-taspri.ads<s-taspri-lynxos.ads \
!       s-tpopsp.adb<s-tpopsp-lynxos.adb \
!       system.ads<system-lynxos-ppc.ads
      endif
    endif
  endif
  
  ifeq ($(strip $(filter-out rtems%,$(osys))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-intnam.ads<a-intnam-rtems.ads \
!   s-inmaop.adb<s-inmaop-posix.adb \
!   s-intman.adb<s-intman-posix.adb \
!   s-osinte.adb<s-osinte-rtems.adb \
!   s-osinte.ads<s-osinte-rtems.ads \
!   s-osprim.adb<s-osprim-posix.adb \
!   s-parame.adb<s-parame-rtems.adb \
!   s-taprop.adb<s-taprop-posix.adb \
!   s-taspri.ads<s-taspri-posix.ads \
!   s-tpopsp.adb<s-tpopsp-rtems.adb
  endif
  
  ifeq ($(strip $(filter-out alpha% dec osf%,$(targ))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-intnam.ads<a-intnam-tru64.ads \
!   s-inmaop.adb<s-inmaop-posix.adb \
!   s-intman.adb<s-intman-posix.adb \
!   s-mastop.adb<s-mastop-tru64.adb \
!   s-osinte.adb<s-osinte-tru64.adb \
!   s-osinte.ads<s-osinte-tru64.ads \
!   s-osprim.adb<s-osprim-unix.adb \
!   s-taprop.adb<s-taprop-tru64.adb \
!   s-tasinf.ads<s-tasinf-tru64.ads \
!   s-taspri.ads<s-taspri-tru64.ads \
!   s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
!   s-traceb.adb<s-traceb-mastop.adb \
!   g-soccon.ads<g-soccon-tru64.ads \
!   system.ads<system-tru64.ads
  
!   TOOLS_TARGET_PAIRS=mlib-tgt.adb<mlib-tgt-tru64.adb
  
    GMEM_LIB=gmemlib
    THREADSLIB = -lpthread -lmach -lexc -lrt
    PREFIX_OBJS = $(PREFIX_REAL_OBJS)
    GNATLIB_SHARED = gnatlib-shared-default
    LIBRARY_VERSION := $(LIB_VERSION)
  endif
  
! ifeq ($(strip $(filter-out alpha% ia64 dec hp vms% openvms% alphavms%,$(host))),)
  
  soext  = .exe
+ hyphen = _
+ LN = cp -p
+ LN_S = cp -p
+ 
+ ifeq ($(strip $(filter-out ia64 hp vms% openvms%,$(targ))),)
+ AR = iar
+ endif
  
  .SUFFIXES: .sym
  
*************** soext  = .exe
*** 1134,1209 ****
  endif
  
  ifeq ($(strip $(filter-out alpha% ia64 dec hp vms% openvms% alphavms%,$(targ))),)
! 
! ifeq ($(strip $(filter-out ia64% hp vms% openvms%,$(targ))),)
!   LIBGNAT_TARGET_PAIRS_AUX = \
!   s-osinte.adb<5xosinte.adb \
!   s-osinte.ads<5xosinte.ads \
!   s-parame.ads<5vparame.ads
! else
! ifeq ($(strip $(filter-out alpha64% dec hp vms% openvms% alphavms%,$(targ))),)
!   LIBGNAT_TARGET_PAIRS_AUX = \
!   s-osinte.adb<5vosinte.adb \
!   s-osinte.ads<5vosinte.ads \
!   s-parame.ads<5vparame.ads
! else
! ifeq ($(strip $(filter-out express EXPRESS,$(THREAD_KIND))),)
!   LIBGNAT_TARGET_PAIRS_AUX = \
!   s-osinte.adb<5vosinte.adb \
!   s-osinte.ads<5vosinte.ads \
!   s-parame.ads<5xparame.ads
  else
!   LIBGNAT_TARGET_PAIRS_AUX = \
!   s-osinte.adb<5vosinte.adb \
!   s-osinte.ads<5vosinte.ads \
!   s-parame.ads<5vparame.ads
  endif
  endif
  endif
  
    LIBGNAT_TARGET_PAIRS = \
!   a-caldel.adb<4vcaldel.adb \
!   a-calend.adb<4vcalend.adb \
!   a-calend.ads<4vcalend.ads \
!   a-excpol.adb<4wexcpol.adb \
!   a-intnam.ads<4vintnam.ads \
!   a-numaux.ads<4vnumaux.ads \
!   g-expect.adb<3vexpect.adb \
!   g-soccon.ads<3vsoccon.ads \
!   g-socthi.ads<3vsocthi.ads \
!   g-socthi.adb<3vsocthi.adb \
!   g-trasym.adb<3vtrasym.adb \
!   i-cstrea.adb<6vcstrea.adb \
!   i-cpp.adb<6vcpp.adb \
!   interfac.ads<6vinterf.ads \
!   s-asthan.adb<5vasthan.adb \
!   s-crtl.ads<5vcrtl.ads \
!   s-inmaop.adb<5vinmaop.adb \
!   s-interr.adb<5vinterr.adb \
!   s-intman.adb<5vintman.adb \
!   s-intman.ads<5vintman.ads \
!   s-osprim.adb<5vosprim.adb \
!   s-osprim.ads<5vosprim.ads \
!   s-taprop.adb<5vtaprop.adb \
!   s-taspri.ads<5vtaspri.ads \
!   s-tpopsp.adb<7stpopsp.adb \
!   s-tpopde.adb<5vtpopde.adb \
!   s-tpopde.ads<5vtpopde.ads \
!   s-traent.adb<5vtraent.adb \
!   s-traent.ads<5vtraent.ads \
!   s-vaflop.adb<5vvaflop.adb \
!   system.ads<5xsystem.ads   \
!   $(LIBGNAT_TARGET_PAIRS_AUX)
  
!   TOOLS_TARGET_PAIRS=mlib-tgt.adb<5vml-tgt.adb
  
    GNATLIB_SHARED=gnatlib-shared-vms
    EXTRA_LIBGNAT_SRCS=vmshandler.asm
    EXTRA_LIBGNAT_OBJS=vmshandler.o
    EXTRA_GNATRTL_TASKING_OBJS=s-tpopde.o
    EXTRA_GNATTOOLS = \
       ../../gnatlbr$(exeext) \
!      ,,/../gnatsym$(exeext)
    # This command transforms (YYYYMMDD) into YY,MMDD
    GSMATCH_VERSION := $(shell grep "^ *Gnat_Static_Version_String" $(fsrcpfx)gnatvsn.ads | sed -e 's/.*(\(.*\)).*/\1/' -e 's/\(..\)\(..\)\(....\)/\2,\3/')
    TOOLS_LIBS_LO := --for-linker=sys\\$$\$$library:trace.exe
--- 1189,1273 ----
  endif
  
  ifeq ($(strip $(filter-out alpha% ia64 dec hp vms% openvms% alphavms%,$(targ))),)
! ifeq ($(strip $(filter-out ia64 hp vms% openvms%,$(targ))),)
!   LIBGNAT_TARGET_PAIRS_AUX1 = \
!   g-enblsp.adb<g-enblsp-vms-ia64.adb \
!   s-auxdec.ads<s-auxdec-vms_64.ads \
!   s-crtl.ads<s-crtl-vms.ads \
!   s-osinte.adb<s-osinte-vms-ia64.adb \
!   s-osinte.ads<s-osinte-vms-ia64.ads \
!   system.ads<system-vms_64.ads
  else
! ifeq ($(strip $(filter-out alpha% dec vms% openvms% alphavms%,$(targ))),)
!   LIBGNAT_TARGET_PAIRS_AUX1 = \
!   g-enblsp.adb<g-enblsp-vms-alpha.adb \
!   s-asthan.adb<s-asthan-vms-alpha.adb \
!   s-crtl.ads<s-crtl-vms.ads \
!   s-osinte.adb<s-osinte-vms.adb \
!   s-osinte.ads<s-osinte-vms.ads \
!   s-vaflop.adb<s-vaflop-vms-alpha.adb \
!   system.ads<system-vms-zcx.ads
  endif
  endif
+ ifeq ($(strip $(filter-out express EXPRESS,$(THREAD_KIND))),)
+   LIBGNAT_TARGET_PAIRS_AUX2 = \
+   s-parame.ads<s-parame-vms-restrict.ads
+ else
+   LIBGNAT_TARGET_PAIRS_AUX2 = \
+   s-parame.ads<s-parame-vms.ads
  endif
  
    LIBGNAT_TARGET_PAIRS = \
!   a-caldel.adb<a-caldel-vms.adb \
!   a-calend.adb<a-calend-vms.adb \
!   a-calend.ads<a-calend-vms.ads \
!   a-dirval.adb<a-dirval-vms.adb \
!   a-excpol.adb<a-excpol-abort.adb \
!   a-intnam.ads<a-intnam-vms.ads \
!   a-numaux.ads<a-numaux-vms.ads \
!   g-expect.adb<g-expect-vms.adb \
!   g-soccon.ads<g-soccon-vms.adb \
!   g-socthi.ads<g-socthi-vms.ads \
!   g-socthi.adb<g-socthi-vms.adb \
!   g-trasym.adb<g-trasym-vms.adb \
!   i-cstrea.adb<i-cstrea-vms.adb \
!   i-cpp.adb<i-cpp-vms.adb \
!   interfac.ads<interfac-vms.ads \
!   s-inmaop.adb<s-inmaop-vms.adb \
!   s-interr.adb<s-interr-vms.adb \
!   s-intman.adb<s-intman-vms.adb \
!   s-intman.ads<s-intman-vms.ads \
!   s-osprim.adb<s-osprim-vms.adb \
!   s-osprim.ads<s-osprim-vms.ads \
!   s-taprop.adb<s-taprop-vms.adb \
!   s-taspri.ads<s-taspri-vms.ads \
!   s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
!   s-tpopde.adb<s-tpopde-vms.adb \
!   s-tpopde.ads<s-tpopde-vms.ads \
!   s-traent.adb<s-traent-vms.adb \
!   s-traent.ads<s-traent-vms.ads \
!   $(LIBGNAT_TARGET_PAIRS_AUX1) \
!   $(LIBGNAT_TARGET_PAIRS_AUX2)
  
! ifeq ($(strip $(filter-out ia64 hp vms% openvms%,$(targ))),)
!   TOOLS_TARGET_PAIRS= \
!   mlib-tgt.adb<mlib-tgt-vms-ia64.adb \
!   symbols.adb<symbols-vms-ia64.adb
! else
!   TOOLS_TARGET_PAIRS= \
!   mlib-tgt.adb<mlib-tgt-vms-alpha.adb \
!   symbols.adb<symbols-vms-alpha.adb
! endif
  
    GNATLIB_SHARED=gnatlib-shared-vms
+ ifeq ($(strip $(filter-out alpha% dec vms% openvms% alphavms%,$(targ))),)
    EXTRA_LIBGNAT_SRCS=vmshandler.asm
    EXTRA_LIBGNAT_OBJS=vmshandler.o
+ endif
    EXTRA_GNATRTL_TASKING_OBJS=s-tpopde.o
    EXTRA_GNATTOOLS = \
       ../../gnatlbr$(exeext) \
!      ../../gnatsym$(exeext)
    # This command transforms (YYYYMMDD) into YY,MMDD
    GSMATCH_VERSION := $(shell grep "^ *Gnat_Static_Version_String" $(fsrcpfx)gnatvsn.ads | sed -e 's/.*(\(.*\)).*/\1/' -e 's/\(..\)\(..\)\(....\)/\2,\3/')
    TOOLS_LIBS_LO := --for-linker=sys\\$$\$$library:trace.exe
*************** endif
*** 1212,1241 ****
  
  ifeq ($(strip $(filter-out cygwin32% mingw32% pe,$(osys))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-calend.adb<4wcalend.adb \
!   a-excpol.adb<4wexcpol.adb \
!   a-intnam.ads<4wintnam.ads \
!   a-numaux.adb<86numaux.adb \
!   a-numaux.ads<86numaux.ads \
!   s-gloloc.adb<5wgloloc.adb \
!   s-inmaop.adb<5ninmaop.adb \
!   s-interr.adb<5ginterr.adb \
!   s-intman.adb<5wintman.adb \
!   s-mastop.adb<5omastop.adb \
!   s-memory.adb<5wmemory.adb \
!   s-osinte.ads<5wosinte.ads \
!   s-osprim.adb<5wosprim.adb \
!   s-taprop.adb<5wtaprop.adb \
!   s-taspri.ads<5wtaspri.ads \
!   g-socthi.ads<3wsocthi.ads \
!   g-socthi.adb<3wsocthi.adb \
!   g-soccon.ads<3wsoccon.ads \
!   g-soliop.ads<3wsoliop.ads \
!   system.ads<5wsystem.ads
  
-   TOOLS_TARGET_PAIRS=mlib-tgt.adb<5wml-tgt.adb
    MISCLIB = -lwsock32
-   SYMLIB = -laddr2line -lbfd -liberty $(LIBINTL)
    GMEM_LIB = gmemlib
    PREFIX_OBJS = $(PREFIX_REAL_OBJS)
    EXTRA_GNATTOOLS = ../../gnatdll$(exeext)
--- 1276,1309 ----
  
  ifeq ($(strip $(filter-out cygwin32% mingw32% pe,$(osys))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-calend.adb<a-calend-mingw.adb \
!   a-dirval.adb<a-dirval-mingw.adb \
!   a-excpol.adb<a-excpol-abort.adb \
!   a-intnam.ads<a-intnam-mingw.ads \
!   a-numaux.adb<a-numaux-x86.adb \
!   a-numaux.ads<a-numaux-x86.ads \
!   s-gloloc.adb<s-gloloc-mingw.adb \
!   s-inmaop.adb<s-inmaop-dummy.adb \
!   s-interr.adb<s-interr-sigaction.adb \
!   s-intman.adb<s-intman-mingw.adb \
!   s-mastop.adb<s-mastop-x86.adb \
!   s-memory.adb<s-memory-mingw.adb \
!   s-osinte.ads<s-osinte-mingw.ads \
!   s-osprim.adb<s-osprim-mingw.adb \
!   s-taprop.adb<s-taprop-mingw.adb \
!   s-taspri.ads<s-taspri-mingw.ads \
!   s-parame.adb<s-parame-mingw.adb \
!   g-socthi.ads<g-socthi-mingw.ads \
!   g-socthi.adb<g-socthi-mingw.adb \
!   g-soccon.ads<g-soccon-mingw.ads \
!   g-soliop.ads<g-soliop-mingw.ads \
!   system.ads<system-mingw.ads
! 
!   TOOLS_TARGET_PAIRS= \
!   mlib-tgt.adb<mlib-tgt-mingw.adb \
!   indepsw.adb<indepsw-mingw.adb
  
    MISCLIB = -lwsock32
    GMEM_LIB = gmemlib
    PREFIX_OBJS = $(PREFIX_REAL_OBJS)
    EXTRA_GNATTOOLS = ../../gnatdll$(exeext)
*************** ifeq ($(strip $(filter-out cygwin32% min
*** 1248,1267 ****
    LIBRARY_VERSION := $(LIB_VERSION)
  endif
  
  ifeq ($(strip $(filter-out %ia64 linux%,$(arch) $(osys))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-intnam.ads<4lintnam.ads \
!   s-inmaop.adb<7sinmaop.adb \
!   s-intman.adb<7sintman.adb \
!   s-osinte.ads<5iosinte.ads \
!   s-osinte.adb<5iosinte.adb \
!   s-osprim.adb<7sosprim.adb \
!   s-taprop.adb<5itaprop.adb \
!   s-tpopsp.adb<5atpopsp.adb \
!   s-taspri.ads<5itaspri.ads \
!   system.ads<55system.ads
  
-   TOOLS_TARGET_PAIRS=mlib-tgt.adb<5lml-tgt.adb
    MISCLIB=
    THREADSLIB=-lpthread
    GNATLIB_SHARED=gnatlib-shared-dual
--- 1316,1414 ----
    LIBRARY_VERSION := $(LIB_VERSION)
  endif
  
+ ifeq ($(strip $(filter-out powerpc% linux%,$(arch) $(osys))),)
+   LIBGNAT_TARGET_PAIRS = \
+   a-intnam.ads<a-intnam-linux.ads \
+   s-inmaop.adb<s-inmaop-posix.adb \
+   s-intman.adb<s-intman-posix.adb \
+   s-osinte.adb<s-osinte-posix.adb \
+   s-osinte.ads<s-osinte-linux.ads \
+   s-osprim.adb<s-osprim-posix.adb \
+   s-taprop.adb<s-taprop-linux.adb \
+   s-taspri.ads<s-taspri-linux.ads \
+   s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
+   s-parame.adb<s-parame-linux.adb \
+   system.ads<system-linux-ppc.ads
+ 
+   TOOLS_TARGET_PAIRS =  \
+     mlib-tgt.adb<mlib-tgt-linux.adb \
+     indepsw.adb<indepsw-linux.adb
+ 
+   THREADSLIB = -lpthread
+   GNATLIB_SHARED = gnatlib-shared-dual
+   GMEM_LIB = gmemlib
+   PREFIX_OBJS = $(PREFIX_REAL_OBJS)
+   LIBRARY_VERSION := $(LIB_VERSION)
+ endif
+ 
+ ifeq ($(strip $(filter-out sparc% linux%,$(arch) $(osys))),)
+   LIBGNAT_TARGET_PAIRS = \
+   a-intnam.ads<a-intnam-linux.ads \
+   s-inmaop.adb<s-inmaop-posix.adb \
+   s-intman.adb<s-intman-posix.adb \
+   s-osinte.adb<s-osinte-posix.adb \
+   s-osinte.ads<s-osinte-linux.ads \
+   s-osprim.adb<s-osprim-posix.adb \
+   s-taprop.adb<s-taprop-linux.adb \
+   s-taspri.ads<s-taspri-linux.ads \
+   s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
+   s-parame.adb<s-parame-linux.adb \
+   system.ads<system-linux-sparc.ads
+ 
+   TOOLS_TARGET_PAIRS =  \
+     mlib-tgt.adb<mlib-tgt-linux.adb \
+     indepsw.adb<indepsw-linux.adb
+ 
+   THREADSLIB = -lpthread
+   GNATLIB_SHARED = gnatlib-shared-dual
+   GMEM_LIB = gmemlib
+   PREFIX_OBJS = $(PREFIX_REAL_OBJS)
+   LIBRARY_VERSION := $(LIB_VERSION)
+ endif
+ 
+ ifeq ($(strip $(filter-out hppa% linux%,$(arch) $(osys))),)
+   LIBGNAT_TARGET_PAIRS = \
+   a-intnam.ads<a-intnam-linux.ads \
+   s-inmaop.adb<s-inmaop-posix.adb \
+   s-intman.adb<s-intman-posix.adb \
+   s-osinte.adb<s-osinte-posix.adb \
+   s-osinte.ads<s-osinte-linux-hppa.ads \
+   s-osprim.adb<s-osprim-posix.adb \
+   s-taprop.adb<s-taprop-linux.adb \
+   s-taspri.ads<s-taspri-linux.ads \
+   s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
+   s-parame.adb<s-parame-linux.adb \
+   system.ads<system-linux-hppa.ads
+ 
+   TOOLS_TARGET_PAIRS =  \
+     mlib-tgt.adb<mlib-tgt-linux.adb \
+     indepsw.adb<indepsw-linux.adb
+ 
+   THREADSLIB = -lpthread
+   GNATLIB_SHARED = gnatlib-shared-dual
+   GMEM_LIB = gmemlib
+   PREFIX_OBJS = $(PREFIX_REAL_OBJS)
+   LIBRARY_VERSION := $(LIB_VERSION)
+ endif
+ 
  ifeq ($(strip $(filter-out %ia64 linux%,$(arch) $(osys))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-intnam.ads<a-intnam-linux.ads \
!   a-numaux.ads<a-numaux-libc-x86.ads \
!   s-inmaop.adb<s-inmaop-posix.adb \
!   s-intman.adb<s-intman-posix.adb \
!   s-osinte.ads<s-osinte-linux.ads \
!   s-osinte.adb<s-osinte-posix.adb \
!   s-osprim.adb<s-osprim-posix.adb \
!   s-taprop.adb<s-taprop-linux.adb \
!   s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
!   s-taspri.ads<s-taspri-linux.ads \
!   system.ads<system-linux-ia64.ads
! 
!   TOOLS_TARGET_PAIRS =  \
!     mlib-tgt.adb<mlib-tgt-linux.adb \
!     indepsw.adb<indepsw-linux.adb
  
    MISCLIB=
    THREADSLIB=-lpthread
    GNATLIB_SHARED=gnatlib-shared-dual
*************** ifeq ($(strip $(filter-out %ia64 linux%,
*** 1269,1290 ****
    LIBRARY_VERSION := $(LIB_VERSION)
  endif
  
! ifeq ($(strip $(filter-out %x86_64 linux%,$(arch) $(osys))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-intnam.ads<4lintnam.ads \
!   a-numaux.adb<86numaux.adb \
!   a-numaux.ads<86numaux.ads \
!   s-inmaop.adb<7sinmaop.adb \
!   s-intman.adb<7sintman.adb \
!   s-osinte.ads<5iosinte.ads \
!   s-osinte.adb<5iosinte.adb \
!   s-osprim.adb<7sosprim.adb \
!   s-taprop.adb<5itaprop.adb \
!   s-tpopsp.adb<5atpopsp.adb \
!   s-taspri.ads<5itaspri.ads \
!   system.ads<5nsystem.ads
  
-   TOOLS_TARGET_PAIRS=mlib-tgt.adb<5lml-tgt.adb
    MISCLIB=
    THREADSLIB=-lpthread
    GNATLIB_SHARED=gnatlib-shared-dual
--- 1416,1438 ----
    LIBRARY_VERSION := $(LIB_VERSION)
  endif
  
! ifeq ($(strip $(filter-out alpha% linux%,$(arch) $(osys))),)
    LIBGNAT_TARGET_PAIRS = \
!   a-intnam.ads<a-intnam-linux.ads \
!   s-inmaop.adb<s-inmaop-posix.adb \
!   s-intman.adb<s-intman-posix.adb \
!   s-osinte.ads<s-osinte-linux-alpha.ads \
!   s-osinte.adb<s-osinte-posix.adb \
!   s-osprim.adb<s-osprim-posix.adb \
!   s-taprop.adb<s-taprop-linux.adb \
!   s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
!   s-taspri.ads<s-taspri-linux.ads \
!   system.ads<system-linux-alpha.ads
! 
!   TOOLS_TARGET_PAIRS =  \
!     mlib-tgt.adb<mlib-tgt-linux.adb \
!     indepsw.adb<indepsw-linux.adb
  
    MISCLIB=
    THREADSLIB=-lpthread
    GNATLIB_SHARED=gnatlib-shared-dual
*************** ifeq ($(strip $(filter-out %x86_64 linux
*** 1292,1297 ****
--- 1440,1496 ----
    LIBRARY_VERSION := $(LIB_VERSION)
  endif
  
+ ifeq ($(strip $(filter-out %x86_64 linux%,$(arch) $(osys))),)
+   LIBGNAT_TARGET_PAIRS = \
+   a-intnam.ads<a-intnam-linux.ads \
+   a-numaux.adb<a-numaux-x86.adb \
+   a-numaux.ads<a-numaux-x86.ads \
+   s-inmaop.adb<s-inmaop-posix.adb \
+   s-intman.adb<s-intman-posix.adb \
+   s-osinte.ads<s-osinte-linux.ads \
+   s-osinte.adb<s-osinte-posix.adb \
+   s-osprim.adb<s-osprim-posix.adb \
+   s-taprop.adb<s-taprop-linux.adb \
+   s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
+   s-taspri.ads<s-taspri-linux.ads \
+   system.ads<system-linux-x86_64.ads
+ 
+   TOOLS_TARGET_PAIRS=mlib-tgt.adb<mlib-tgt-linux.adb
+   THREADSLIB=-lpthread
+   GNATLIB_SHARED=gnatlib-shared-dual
+   GMEM_LIB = gmemlib
+   PREFIX_OBJS=$(PREFIX_REAL_OBJS)
+   LIBRARY_VERSION := $(LIB_VERSION)
+ endif
+ 
+ ifeq ($(strip $(filter-out powerpc darwin%,$(arch) $(osys))),)
+   LIBGNAT_TARGET_PAIRS = \
+   a-intnam.ads<a-intnam-darwin.ads \
+   s-inmaop.adb<s-inmaop-posix.adb \
+   s-intman.adb<s-intman-posix.adb \
+   s-osinte.adb<s-osinte-darwin.adb \
+   s-osinte.ads<s-osinte-darwin.ads \
+   s-osprim.adb<s-osprim-posix.adb \
+   s-taprop.adb<s-taprop-posix.adb \
+   s-taspri.ads<s-taspri-posix.ads \
+   s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
+   g-soccon.ads<g-soccon-darwin.ads \
+   a-numaux.ads<a-numaux-darwin.ads \
+   a-numaux.adb<a-numaux-darwin.adb \
+   system.ads<system-darwin-ppc.ads
+ 
+   TOOLS_TARGET_PAIRS =  \
+     mlib-tgt.adb<mlib-tgt-darwin.adb
+ 
+   GNATLIB_SHARED = gnatlib-shared-darwin
+   SO_OPTS = -Wl,-flat_namespace
+   RANLIB = ranlib -c
+   GMEM_LIB = gmemlib
+ 
+   LIBRARY_VERSION := $(LIB_VERSION)
+   soext = .dylib
+ endif
+ 
  # The runtime library for gnat comprises two directories.  One contains the
  # Ada source files that the compiler (gnat1) needs -- these files are listed
  # by ADA_INCLUDE_SRCS -- and the other contains the object files and their
*************** endif
*** 1303,1314 ****
  # subdirectory and copied.
  LIBGNAT_SRCS = ada.h adaint.c adaint.h argv.c cio.c cstreams.c \
    errno.c exit.c cal.c ctrl_c.c \
!   raise.h raise.c sysdep.c types.h aux-io.c init.c \
!   final.c tracebak.c tb-alvms.c tb-alvxw.c expect.c mkdir.c socket.c \
    $(EXTRA_LIBGNAT_SRCS)
  
  LIBGNAT_OBJS = adaint.o argv.o cio.o cstreams.o ctrl_c.o errno.o exit.o \
!   raise.o sysdep.o aux-io.o init.o cal.o final.o \
    tracebak.o expect.o mkdir.o socket.o $(EXTRA_LIBGNAT_OBJS)
  
  # NOTE ??? - when the -I option for compiling Ada code is made to work,
--- 1502,1513 ----
  # subdirectory and copied.
  LIBGNAT_SRCS = ada.h adaint.c adaint.h argv.c cio.c cstreams.c \
    errno.c exit.c cal.c ctrl_c.c \
!   raise.h raise.c sysdep.c aux-io.c init.c seh_init.c \
!   final.c tracebak.c tb-alvms.c tb-alvxw.c expect.c mkdir.c socket.c gsocket.h \
    $(EXTRA_LIBGNAT_SRCS)
  
  LIBGNAT_OBJS = adaint.o argv.o cio.o cstreams.o ctrl_c.o errno.o exit.o \
!   raise.o sysdep.o aux-io.o init.o seh_init.o cal.o final.o \
    tracebak.o expect.o mkdir.o socket.o $(EXTRA_LIBGNAT_OBJS)
  
  # NOTE ??? - when the -I option for compiling Ada code is made to work,
*************** include $(fsrcdir)/Makefile.rtl
*** 1324,1456 ****
  GNATRTL_OBJS = $(GNATRTL_NONTASKING_OBJS) $(GNATRTL_TASKING_OBJS) \
    g-trasym.o memtrack.o
  
- # Files which are suitable in no run time/hi integrity mode
- 
- COMPILABLE_HIE_SOURCES= \
-  system.ads   \
-  ada.ads      \
-  gnat.ads     \
-  g-souinf.ads \
-  interfac.ads \
-  i-c.ads      \
-  s-stoele.ads \
-  s-stoele.adb \
-  s-maccod.ads \
-  s-unstyp.ads \
-  s-fatflt.ads \
-  s-fatlfl.ads \
-  s-fatllf.ads \
-  s-fatsfl.ads \
-  s-secsta.ads \
-  s-secsta.adb \
-  a-tags.ads   \
-  a-tags.adb  \
-  a-except.ads \
-  a-except.adb $(EXTRA_HIE_SOURCES)
- 
- NON_COMPILABLE_HIE_SOURCES= \
-  a-unccon.ads \
-  a-uncdea.ads \
-  s-fatgen.adb \
-  s-fatgen.ads \
-  unchconv.ads \
-  s-atacco.ads \
-  s-atacco.adb \
-  unchdeal.ads
- 
- 
- HIE_SOURCES = $(NON_COMPILABLE_HIE_SOURCES) $(COMPILABLE_HIE_SOURCES)
- 
- # Object to generate for the HI run time
- 
- HIE_OBJS =  \
-  system.o   \
-  ada.o      \
-  a-except.o \
-  gnat.o     \
-  g-souinf.o \
-  interfac.o \
-  i-c.o      \
-  s-stoele.o \
-  s-maccod.o \
-  s-unstyp.o \
-  s-fatflt.o \
-  s-fatlfl.o \
-  s-fatllf.o \
-  s-secsta.o \
-  a-tags.o $(EXTRA_HIE_OBJS)
- 
- # Files which are needed in ravenscar mode
- 
- COMPILABLE_RAVEN_SOURCES = \
- $(COMPILABLE_HIE_SOURCES) \
-  s-parame.ads \
-  s-parame.adb \
-  s-purexc.ads \
-  s-osinte.ads \
-  s-osinte.adb \
-  s-tasinf.ads \
-  s-tasinf.adb \
-  s-taspri.ads \
-  s-taprop.ads \
-  s-taprop.adb \
-  s-taskin.ads \
-  s-taskin.adb \
-  s-interr.ads \
-  s-interr.adb \
-  a-interr.ads \
-  a-interr.adb \
-  a-intnam.ads \
-  a-reatim.ads \
-  a-reatim.adb \
-  a-retide.ads \
-  a-retide.adb \
-  s-taprob.ads \
-  s-taprob.adb \
-  s-tposen.ads \
-  s-tposen.adb \
-  s-tasres.ads \
-  s-tarest.ads \
-  s-tarest.adb \
-  a-sytaco.ads \
-  a-sytaco.adb \
-  a-taside.ads \
-  a-taside.adb $(EXTRA_RAVEN_SOURCES)
- 
- NON_COMPILABLE_RAVEN_SOURCES= $(NON_COMPILABLE_HIE_SOURCES)
- 
- RAVEN_SOURCES = $(NON_COMPILABLE_RAVEN_SOURCES) $(COMPILABLE_RAVEN_SOURCES)
- 
- # Objects to generate for the ravenscar run time
- 
- RAVEN_OBJS = \
-  $(HIE_OBJS) \
-  s-parame.o  \
-  s-purexc.o  \
-  s-osinte.o  \
-  s-tasinf.o  \
-  s-taspri.o  \
-  s-taprop.o  \
-  s-taskin.o  \
-  s-interr.o  \
-  a-interr.o  \
-  a-intnam.o  \
-  a-reatim.o  \
-  a-retide.o  \
-  s-taprob.o  \
-  s-tposen.o  \
-  s-tasres.o  \
-  s-tarest.o  \
-  a-sytaco.o \
-  a-taside.o $(EXTRA_RAVEN_OBJS)
- 
  # Default run time files
  
  ADA_INCLUDE_SRCS =\
   ada.ads calendar.ads directio.ads gnat.ads interfac.ads ioexcept.ads \
   machcode.ads text_io.ads unchconv.ads unchdeal.ads \
!  sequenio.ads system.ads Makefile.adalib Makefile.prolog Makefile.generic \
!  memtrack.adb \
   a-*.adb a-*.ads g-*.ad? i-*.ad? \
   s-[a-o]*.adb s-[p-z]*.adb \
   s-[a-o]*.ads s-[p-z]*.ads
--- 1523,1534 ----
  GNATRTL_OBJS = $(GNATRTL_NONTASKING_OBJS) $(GNATRTL_TASKING_OBJS) \
    g-trasym.o memtrack.o
  
  # Default run time files
  
  ADA_INCLUDE_SRCS =\
   ada.ads calendar.ads directio.ads gnat.ads interfac.ads ioexcept.ads \
   machcode.ads text_io.ads unchconv.ads unchdeal.ads \
!  sequenio.ads system.ads Makefile.adalib memtrack.adb \
   a-*.adb a-*.ads g-*.ad? i-*.ad? \
   s-[a-o]*.adb s-[p-z]*.adb \
   s-[a-o]*.ads s-[p-z]*.ads
*************** TOOLS_FLAGS_TO_PASS=		\
*** 1472,1477 ****
--- 1550,1557 ----
  	"GNATLINK=$(GNATLINK)"	\
  	"GNATBIND=$(GNATBIND)"
  
+ GCC_LINK="$(CC) -static-libgcc $(ADA_INCLUDES)"
+ 
  # Build directory for the tools. Let's copy the target-dependent
  # sources using the same mechanism as for gnatlib. The other sources are 
  # accessed using the vpath directive below
*************** gnattools2: ../stamp-tools
*** 1531,1544 ****
  	  ../../gnatls$(exeext) ../../gnatprep$(exeext) \
  	  ../../gnatxref$(exeext) \
  	  ../../gnatfind$(exeext) ../../gnatname$(exeext) \
! 	  ../../gnatclean$(exeext) \
! 	  ../../gprcmd$(exeext)   ../../gpr2make$(exeext)
  
  # These tools are only built for the native version.
  gnattools3: ../stamp-tools
! #	$(MAKE) -C tools -f ../Makefile $(TOOLS_FLAGS_TO_PASS) \
! #	  TOOLSCASE=native top_builddir=../../.. \
! #	  ../../gnatmem$(exeext) $(EXTRA_GNATTOOLS)
  
  # those tools are only built for the cross version
  gnattools4: ../stamp-tools
--- 1611,1624 ----
  	  ../../gnatls$(exeext) ../../gnatprep$(exeext) \
  	  ../../gnatxref$(exeext) \
  	  ../../gnatfind$(exeext) ../../gnatname$(exeext) \
! 	  ../../gnatclean$(exeext) ../../gprmake$(exeext)
  
  # These tools are only built for the native version.
  gnattools3: ../stamp-tools
! ifneq ($(EXTRA_GNATTOOLS),)
! 	$(MAKE) -C tools -f ../Makefile $(TOOLS_FLAGS_TO_PASS) \
! 	  TOOLSCASE=native top_builddir=../../.. $(EXTRA_GNATTOOLS)
! endif
  
  # those tools are only built for the cross version
  gnattools4: ../stamp-tools
*************** gnattools4: ../stamp-tools
*** 1549,1644 ****
  ../../gnatchop$(exeext): ../stamp-tools
  	$(GNATMAKE) -c $(ADA_INCLUDES) gnatchop --GCC="$(CC) $(ALL_ADAFLAGS)"
  	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatchop 
! 	$(GNATLINK) -v gnatchop -o $@ --GCC="$(CC) $(ADA_INCLUDES)" \
! 		$(TOOLS_LIBS)
  
  ../../gnat$(exeext): ../stamp-tools
  	$(GNATMAKE) -c $(ADA_INCLUDES) gnatcmd --GCC="$(CC) $(ALL_ADAFLAGS)"
  	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatcmd 
! 	$(GNATLINK) -v gnatcmd -o $@ --GCC="$(CC) $(ADA_INCLUDES)" $(TOOLS_LIBS)
  
  ../../gnatkr$(exeext): ../stamp-tools
  	$(GNATMAKE) -c $(ADA_INCLUDES) gnatkr --GCC="$(CC) $(ALL_ADAFLAGS)"
  	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatkr 
! 	$(GNATLINK) -v gnatkr -o $@ --GCC="$(CC) $(ADA_INCLUDES)" $(TOOLS_LIBS)
  
  ../../gnatls$(exeext): ../stamp-tools
  	$(GNATMAKE) -c $(ADA_INCLUDES) gnatls --GCC="$(CC) $(ALL_ADAFLAGS)"
  	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatls 
! 	$(GNATLINK) -v gnatls -o $@ --GCC="$(CC) $(ADA_INCLUDES)" $(TOOLS_LIBS)
  
  ../../gnatname$(exeext): ../stamp-tools
  	$(GNATMAKE) -c $(ADA_INCLUDES) gnatname --GCC="$(CC) $(ALL_ADAFLAGS)"
  	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatname 
! 	$(GNATLINK) -v gnatname -o $@ --GCC="$(CC) $(ADA_INCLUDES)" \
! 		    $(TOOLS_LIBS)
  
! ../../gpr2make$(exeext): ../stamp-tools
! 	$(GNATMAKE) -c $(ADA_INCLUDES) gpr2make --GCC="$(CC) $(ALL_ADAFLAGS)"
! 	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gpr2make 
! 	$(GNATLINK) -v gpr2make -o $@ --GCC="$(CC) $(ADA_INCLUDES)" \
! 		    $(TOOLS_LIBS)
  
  ../../gnatprep$(exeext): ../stamp-tools
  	$(GNATMAKE) -c $(ADA_INCLUDES) gnatprep --GCC="$(CC) $(ALL_ADAFLAGS)"
  	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatprep 
! 	$(GNATLINK) -v gnatprep -o $@ --GCC="$(CC) $(ADA_INCLUDES)" \
! 		    $(TOOLS_LIBS)
  
  ../../gnatxref$(exeext): ../stamp-tools
  	$(GNATMAKE) -c $(ADA_INCLUDES) gnatxref --GCC="$(CC) $(ALL_ADAFLAGS)"
  	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatxref 
! 	$(GNATLINK) -v gnatxref -o $@ --GCC="$(CC) $(ADA_INCLUDES)" \
! 		    $(TOOLS_LIBS)
  
  ../../gnatfind$(exeext): ../stamp-tools
  	$(GNATMAKE) -c $(ADA_INCLUDES) gnatfind --GCC="$(CC) $(ALL_ADAFLAGS)"
  	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatfind 
! 	$(GNATLINK) -v gnatfind -o $@ --GCC="$(CC) $(ADA_INCLUDES)" \
! 		    $(TOOLS_LIBS)
  
  ../../gnatclean$(exeext): ../stamp-tools
  	$(GNATMAKE) -c $(ADA_INCLUDES) gnatclean --GCC="$(CC) $(ALL_ADAFLAGS)"
  	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatclean
! 	$(GNATLINK) -v gnatclean -o $@ --GCC="$(CC) $(ADA_INCLUDES)" \
! 	            $(TOOLS_LIBS)
  
  ../../gnatsym$(exeext): ../stamp-tools
  	$(GNATMAKE) -c $(ADA_INCLUDES) gnatsym --GCC="$(CC) $(ALL_ADAFLAGS)"
  	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatsym
! 	$(GNATLINK) -v gnatsym -o $@ --GCC="$(CC) $(ADA_INCLUDES)" \
!                     $(TOOLS_LIBS)
! 
! ../../gnatmem$(exeext): ../stamp-tools gmem.o $(SYMDEPS)
! ifeq ($(GMEM_LIB),gmemlib)
! 	   $(GNATMAKE) -c $(ADA_INCLUDES) gnatmem --GCC="$(CC) $(ALL_ADAFLAGS)"
! 	   $(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatmem 
! 	   $(GNATLINK) -v gnatmem -o $@ --GCC="$(CC) $(ADA_INCLUDES)" \
! 	            gmem.o $(SYMLIB) $(TOOLS_LIBS)
! endif 
  
  ../../gnatdll$(exeext): ../stamp-tools
  	$(GNATMAKE) -c $(ADA_INCLUDES) gnatdll --GCC="$(CC) $(ALL_ADAFLAGS)"
  	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) $(GNATBIND_FLAGS) gnatdll
! 	$(GNATLINK) -v gnatdll -o $@ --GCC="$(CC) $(ADA_INCLUDES)" \
! 		$(TOOLS_LIBS)
! 
! ../../gprcmd$(exeext): ../stamp-tools
! 	$(GNATMAKE) -c $(ADA_INCLUDES) gprcmd --GCC="$(CC) $(ALL_ADAFLAGS)"
! 	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gprcmd 
! 	$(GNATLINK) -v gprcmd -o $@ --GCC="$(CC) $(ADA_INCLUDES)" $(TOOLS_LIBS)
  
  ../../vxaddr2line$(exeext): ../stamp-tools
  	$(GNATMAKE) -c  $(ADA_INCLUDES) vxaddr2line --GCC="$(CC) $(ALL_ADAFLAGS)"
  	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) vxaddr2line 
! 	$(GNATLINK) -v vxaddr2line -o $@ --GCC="$(CC) $(ADA_INCLUDES)" $(CLIB)
  
! gnatmake-re: ../stamp-tools
  	$(GNATMAKE) $(ADA_INCLUDES) -u sdefault --GCC="$(CC) $(MOST_ADA_FLAGS)"
  	$(GNATMAKE) -c $(ADA_INCLUDES) gnatmake --GCC="$(CC) $(ALL_ADAFLAGS)"
  	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatmake 
  	$(GNATLINK) -v gnatmake -o ../../gnatmake$(exeext) \
! 		--GCC="$(CC) $(ADA_INCLUDES)" $(TOOLS_LIBS)
  
  # Note the use of the "mv" command in order to allow gnatlink to be linked with
  # with the former version of gnatlink itself which cannot override itself.
--- 1629,1702 ----
  ../../gnatchop$(exeext): ../stamp-tools
  	$(GNATMAKE) -c $(ADA_INCLUDES) gnatchop --GCC="$(CC) $(ALL_ADAFLAGS)"
  	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatchop 
! 	$(GNATLINK) -v gnatchop -o $@ --GCC=$(GCC_LINK) $(TOOLS_LIBS)
  
  ../../gnat$(exeext): ../stamp-tools
  	$(GNATMAKE) -c $(ADA_INCLUDES) gnatcmd --GCC="$(CC) $(ALL_ADAFLAGS)"
  	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatcmd 
! 	$(GNATLINK) -v gnatcmd -o $@ --GCC=$(GCC_LINK) $(TOOLS_LIBS)
  
  ../../gnatkr$(exeext): ../stamp-tools
  	$(GNATMAKE) -c $(ADA_INCLUDES) gnatkr --GCC="$(CC) $(ALL_ADAFLAGS)"
  	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatkr 
! 	$(GNATLINK) -v gnatkr -o $@ --GCC=$(GCC_LINK) $(TOOLS_LIBS)
  
  ../../gnatls$(exeext): ../stamp-tools
  	$(GNATMAKE) -c $(ADA_INCLUDES) gnatls --GCC="$(CC) $(ALL_ADAFLAGS)"
  	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatls 
! 	$(GNATLINK) -v gnatls -o $@ --GCC=$(GCC_LINK) $(TOOLS_LIBS)
  
  ../../gnatname$(exeext): ../stamp-tools
  	$(GNATMAKE) -c $(ADA_INCLUDES) gnatname --GCC="$(CC) $(ALL_ADAFLAGS)"
  	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatname 
! 	$(GNATLINK) -v gnatname -o $@ --GCC=$(GCC_LINK) $(TOOLS_LIBS)
  
! ../../gprmake$(exeext): ../stamp-tools
! 	$(GNATMAKE) -c $(ADA_INCLUDES) gprmake --GCC="$(CC) $(ALL_ADAFLAGS)"
! 	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gprmake
! 	$(GNATLINK) -v gprmake -o $@ --GCC=$(GCC_LINK) $(TOOLS_LIBS)
  
  ../../gnatprep$(exeext): ../stamp-tools
  	$(GNATMAKE) -c $(ADA_INCLUDES) gnatprep --GCC="$(CC) $(ALL_ADAFLAGS)"
  	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatprep 
! 	$(GNATLINK) -v gnatprep -o $@ --GCC=$(GCC_LINK) $(TOOLS_LIBS)
  
  ../../gnatxref$(exeext): ../stamp-tools
  	$(GNATMAKE) -c $(ADA_INCLUDES) gnatxref --GCC="$(CC) $(ALL_ADAFLAGS)"
  	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatxref 
! 	$(GNATLINK) -v gnatxref -o $@ --GCC=$(GCC_LINK) $(TOOLS_LIBS)
  
  ../../gnatfind$(exeext): ../stamp-tools
  	$(GNATMAKE) -c $(ADA_INCLUDES) gnatfind --GCC="$(CC) $(ALL_ADAFLAGS)"
  	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatfind 
! 	$(GNATLINK) -v gnatfind -o $@ --GCC=$(GCC_LINK) $(TOOLS_LIBS)
  
  ../../gnatclean$(exeext): ../stamp-tools
  	$(GNATMAKE) -c $(ADA_INCLUDES) gnatclean --GCC="$(CC) $(ALL_ADAFLAGS)"
  	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatclean
! 	$(GNATLINK) -v gnatclean -o $@ --GCC=$(GCC_LINK) $(TOOLS_LIBS)
  
  ../../gnatsym$(exeext): ../stamp-tools
  	$(GNATMAKE) -c $(ADA_INCLUDES) gnatsym --GCC="$(CC) $(ALL_ADAFLAGS)"
  	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatsym
! 	$(GNATLINK) -v gnatsym -o $@ --GCC=$(GCC_LINK) $(TOOLS_LIBS)
  
  ../../gnatdll$(exeext): ../stamp-tools
  	$(GNATMAKE) -c $(ADA_INCLUDES) gnatdll --GCC="$(CC) $(ALL_ADAFLAGS)"
  	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) $(GNATBIND_FLAGS) gnatdll
! 	$(GNATLINK) -v gnatdll -o $@ --GCC=$(GCC_LINK) $(TOOLS_LIBS)
  
  ../../vxaddr2line$(exeext): ../stamp-tools
  	$(GNATMAKE) -c  $(ADA_INCLUDES) vxaddr2line --GCC="$(CC) $(ALL_ADAFLAGS)"
  	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) vxaddr2line 
! 	$(GNATLINK) -v vxaddr2line -o $@ --GCC=$(GCC_LINK) $(CLIB)
  
! gnatmake-re: ../stamp-tools link.o
  	$(GNATMAKE) $(ADA_INCLUDES) -u sdefault --GCC="$(CC) $(MOST_ADA_FLAGS)"
  	$(GNATMAKE) -c $(ADA_INCLUDES) gnatmake --GCC="$(CC) $(ALL_ADAFLAGS)"
  	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatmake 
  	$(GNATLINK) -v gnatmake -o ../../gnatmake$(exeext) \
! 		--GCC=$(GCC_LINK) $(TOOLS_LIBS)
  
  # Note the use of the "mv" command in order to allow gnatlink to be linked with
  # with the former version of gnatlink itself which cannot override itself.
*************** gnatlink-re: ../stamp-tools link.o
*** 1646,1652 ****
  	$(GNATMAKE) -c $(ADA_INCLUDES) gnatlink --GCC="$(CC) $(ALL_ADAFLAGS)"
  	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatlink 
  	$(GNATLINK) -v gnatlink -o ../../gnatlinknew$(exeext) \
! 		    --GCC="$(CC) $(ADA_INCLUDES)" link.o $(TOOLS_LIBS)
  	$(MV)  ../../gnatlinknew$(exeext)  ../../gnatlink$(exeext)
    
  # Needs to be built with CC=gcc
--- 1704,1710 ----
  	$(GNATMAKE) -c $(ADA_INCLUDES) gnatlink --GCC="$(CC) $(ALL_ADAFLAGS)"
  	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatlink 
  	$(GNATLINK) -v gnatlink -o ../../gnatlinknew$(exeext) \
! 		    --GCC=$(GCC_LINK) $(TOOLS_LIBS)
  	$(MV)  ../../gnatlinknew$(exeext)  ../../gnatlink$(exeext)
    
  # Needs to be built with CC=gcc
*************** gnatlink-re: ../stamp-tools link.o
*** 1654,1664 ****
  #  stamp target in the parent directory whenever gnat1 is rebuilt
  
  # Likewise for the tools
! ../../gnatmake$(exeext): $(P) b_gnatm.o $(GNATMAKE_OBJS)
  	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ b_gnatm.o $(GNATMAKE_OBJS) \
  	      $(TOOLS_LIBS)
  
! ../../gnatlink$(exeext): $(P) b_gnatl.o $(GNATLINK_OBJS)
  	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ b_gnatl.o $(GNATLINK_OBJS) \
  	      $(TOOLS_LIBS)
  
--- 1712,1722 ----
  #  stamp target in the parent directory whenever gnat1 is rebuilt
  
  # Likewise for the tools
! ../../gnatmake$(exeext): $(P) b_gnatm.o link.o $(GNATMAKE_OBJS)
  	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ b_gnatm.o $(GNATMAKE_OBJS) \
  	      $(TOOLS_LIBS)
  
! ../../gnatlink$(exeext): $(P) b_gnatl.o link.o $(GNATLINK_OBJS)
  	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ b_gnatl.o $(GNATLINK_OBJS) \
  	      $(TOOLS_LIBS)
  
*************** install-gnatlib: ../stamp-gnatlib
*** 1683,1716 ****
  #	deleting the right one.
  	-$(MKDIR) $(DESTDIR)$(ADA_RTL_OBJ_DIR)
  	-$(MKDIR) $(DESTDIR)$(ADA_INCLUDE_DIR)
- 	-$(MKDIR) $(DESTDIR)$(ADA_SHARE_MAKE_DIR)
  	$(RMDIR) $(DESTDIR)$(ADA_RTL_OBJ_DIR)
  	$(RMDIR) $(DESTDIR)$(ADA_INCLUDE_DIR)
- 	$(RMDIR) $(DESTDIR)$(ADA_SHARE_MAKE_DIR)
  	-$(MKDIR) $(DESTDIR)$(ADA_RTL_OBJ_DIR)
  	-$(MKDIR) $(DESTDIR)$(ADA_INCLUDE_DIR)
- 	-$(MKDIR) $(DESTDIR)$(ADA_SHARE_MAKE_DIR)
- 	-$(INSTALL_DATA) rts/Makefile.prolog $(DESTDIR)$(ADA_SHARE_MAKE_DIR)
- 	-$(INSTALL_DATA) rts/Makefile.generic $(DESTDIR)$(ADA_SHARE_MAKE_DIR)
  	for file in rts/*.ali; do \
  	    $(INSTALL_DATA_DATE) $$file $(DESTDIR)$(ADA_RTL_OBJ_DIR); \
  	done
  	-$(INSTALL_DATA) rts/g-trasym$(objext) $(DESTDIR)$(ADA_RTL_OBJ_DIR)
! 	-for file in rts/*$(arext);do \
  	    $(INSTALL_DATA) $$file $(DESTDIR)$(ADA_RTL_OBJ_DIR); \
  	done
  #     Install the shared libraries, if any, using $(INSTALL) instead
  #     of $(INSTALL_DATA). The latter may force a mode inappropriate
  #     for shared libraries on some targets, e.g. on HP-UX where the x
  #     permission is required.
  	for file in gnat gnarl; do \
! 	   if [ -f rts/lib$$file-$(LIBRARY_VERSION)$(soext) ]; then \
! 	      $(INSTALL) rts/lib$$file-$(LIBRARY_VERSION)$(soext) \
  			 $(DESTDIR)$(ADA_RTL_OBJ_DIR); \
  	   fi; \
! 	   if [ -f rts/lib$$file$(soext) ]; then \
! 	      $(LN_S) lib$$file-$(LIBRARY_VERSION)$(soext) \
! 	      $(DESTDIR)$(ADA_RTL_OBJ_DIR)/lib$$file$(soext); \
  	   fi; \
  	done
  # This copy must be done preserving the date on the original file.
--- 1741,1773 ----
  #	deleting the right one.
  	-$(MKDIR) $(DESTDIR)$(ADA_RTL_OBJ_DIR)
  	-$(MKDIR) $(DESTDIR)$(ADA_INCLUDE_DIR)
  	$(RMDIR) $(DESTDIR)$(ADA_RTL_OBJ_DIR)
  	$(RMDIR) $(DESTDIR)$(ADA_INCLUDE_DIR)
  	-$(MKDIR) $(DESTDIR)$(ADA_RTL_OBJ_DIR)
  	-$(MKDIR) $(DESTDIR)$(ADA_INCLUDE_DIR)
  	for file in rts/*.ali; do \
  	    $(INSTALL_DATA_DATE) $$file $(DESTDIR)$(ADA_RTL_OBJ_DIR); \
  	done
  	-$(INSTALL_DATA) rts/g-trasym$(objext) $(DESTDIR)$(ADA_RTL_OBJ_DIR)
! 	-cd rts; for file in *$(arext);do \
  	    $(INSTALL_DATA) $$file $(DESTDIR)$(ADA_RTL_OBJ_DIR); \
+ 	    $(RANLIB) $(RANLIB_FLAGS) $(DESTDIR)$(ADA_RTL_OBJ_DIR)/$$file; \
  	done
+ 	-$(foreach file, $(EXTRA_ADALIB_FILES), \
+ 	    $(INSTALL_DATA_DATE) rts/$(file) $(DESTDIR)$(ADA_RTL_OBJ_DIR) && \
+ 	) true
  #     Install the shared libraries, if any, using $(INSTALL) instead
  #     of $(INSTALL_DATA). The latter may force a mode inappropriate
  #     for shared libraries on some targets, e.g. on HP-UX where the x
  #     permission is required.
  	for file in gnat gnarl; do \
! 	   if [ -f rts/lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext) ]; then \
! 	      $(INSTALL) rts/lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext) \
  			 $(DESTDIR)$(ADA_RTL_OBJ_DIR); \
  	   fi; \
! 	   if [ -f rts/lib$${file}$(soext) ]; then \
! 	      $(LN_S) lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext) \
! 	      $(DESTDIR)$(ADA_RTL_OBJ_DIR)/lib$${file}$(soext); \
  	   fi; \
  	done
  # This copy must be done preserving the date on the original file.
*************** install-gnatlib: ../stamp-gnatlib
*** 1751,1756 ****
--- 1808,1814 ----
  # Remove files to be replaced by target dependent sources
  	$(RM) $(foreach PAIR,$(LIBGNAT_TARGET_PAIRS), \
  	                rts/$(word 1,$(subst <, ,$(PAIR))))
+ 	$(RM) rts/*-*-*.ads rts/*-*-*.adb
  # Copy new target dependent sources
  	$(foreach PAIR,$(LIBGNAT_TARGET_PAIRS), \
  	          $(LN_S) $(fsrcpfx)$(word 2,$(subst <, ,$(PAIR))) \
*************** gnatlib: ../stamp-gnatlib1 ../stamp-gnat
*** 1785,1888 ****
          ifneq ($(PREFIX_OBJS),)
  		$(AR) $(AR_FLAGS) rts/libgccprefix$(arext) $(PREFIX_OBJS);
          endif
! 	if $(RANLIB_TEST) ; then $(RANLIB) rts/libgnat$(arext); else true; fi
  	$(AR) $(AR_FLAGS) rts/libgnarl$(arext) \
  	   $(addprefix rts/,$(GNATRTL_TASKING_OBJS))
! 	if $(RANLIB_TEST) ; then $(RANLIB) rts/libgnarl$(arext); else true; fi
          ifeq ($(GMEM_LIB),gmemlib)
! 		$(AR) $(AR_FLAGS) rts/libgmem$(arext) rts/memtrack.o;
          endif
  	$(CHMOD) a-wx rts/*.ali
  	touch ../stamp-gnatlib
  
- HIE_NONE_TARGET_PAIRS=\
-  a-except.ads<1aexcept.ads \
-  a-except.adb<1aexcept.adb \
-  a-tags.ads<1atags.ads \
-  a-tags.adb<1atags.adb \
-  s-secsta.ads<1ssecsta.ads \
-  s-secsta.adb<1ssecsta.adb \
-  i-c.ads<1ic.ads $(EXTRA_HIE_NONE_TARGET_PAIRS)
- 
- # This target needs RTS_NAME, RTS_SRCS, RTS_TARGET_PAIRS to be set properly
- # it creates a rts with the proper structure and the right target 
- # dependant srcs
- prepare-rts:
- 	$(RMDIR) rts-$(RTS_NAME)
- 	$(MKDIR) rts-$(RTS_NAME)
- 	$(CHMOD) u+w rts-$(RTS_NAME)
- 	$(MKDIR) rts-$(RTS_NAME)/adalib
- 	$(MKDIR) rts-$(RTS_NAME)/adainclude
- 	$(CHMOD) u+w rts-$(RTS_NAME)/*
- # Generate the project file
- 	$(ECHO) "project $(RTS_NAME) is" > rts-$(RTS_NAME)/$(RTS_NAME).gpr
- 	$(ECHO) "   for Source_Dirs use (\"adainclude\");" \
- 		>> rts-$(RTS_NAME)/$(RTS_NAME).gpr
- 	$(ECHO) "   for Object_Dir use \"adalib\";" \
- 		>> rts-$(RTS_NAME)/$(RTS_NAME).gpr
- 	$(ECHO) "   for Source_List_File use " \
- 		>>rts-$(RTS_NAME)/$(RTS_NAME).gpr
- 	$(ECHO) "      \"rts-$(RTS_NAME)_source_list.txt\";" \
- 		>>rts-$(RTS_NAME)/$(RTS_NAME).gpr
- 	$(ECHO) "   package Builder is" >>rts-$(RTS_NAME)/$(RTS_NAME).gpr
- 	$(ECHO) "     for Default_Switches (\"Ada\") use (\"-a\");" \
- 		 >>rts-$(RTS_NAME)/$(RTS_NAME).gpr
- 	$(ECHO) "  end Builder;" >>rts-$(RTS_NAME)/$(RTS_NAME).gpr
- 	$(ECHO) "  package Compiler is" >> rts-$(RTS_NAME)/$(RTS_NAME).gpr
- 	$(ECHO) "     for Default_Switches (\"Ada\") use (\"-nostdinc\");" \
- 		 >>rts-$(RTS_NAME)/$(RTS_NAME).gpr
- 	$(ECHO) "  end Compiler;" >>rts-$(RTS_NAME)/$(RTS_NAME).gpr
- 	$(ECHO) "end $(RTS_NAME);" >>rts-$(RTS_NAME)/$(RTS_NAME).gpr
- 
- 	$(foreach f, $(COMPILABLE_SOURCES), \
- 		$(ECHO) $(f) >> \
- 			rts-$(RTS_NAME)/rts-$(RTS_NAME)_source_list.txt ;) true
- # Copy target independent sources
- 	$(foreach f,$(RTS_SRCS), \
- 	  $(CP) $(fsrcpfx)$(f) rts-$(RTS_NAME)/adainclude/ ;) true
- # Remove files to be replaced by target dependent sources
- 	$(RM) $(foreach PAIR,$(RTS_TARGET_PAIRS), \
- 	         rts-$(RTS_NAME)/adainclude/$(word 1,$(subst <, ,$(PAIR))))
- # Copy new target dependent sources
- 	$(foreach PAIR,$(RTS_TARGET_PAIRS), \
- 	    $(CP) $(fsrcpfx)$(word 2,$(subst <, ,$(PAIR))) \
- 	            rts-$(RTS_NAME)/adainclude/$(word 1,$(subst <, ,$(PAIR)));)
- 
- install-rts: force
- 	$(CP) -r rts-$(RTS_NAME) $(DESTDIR)$(libsubdir)/
- 
- rts-zfp: force
- 	$(MAKE) $(FLAGS_TO_PASS) prepare-rts \
- 	   RTS_NAME=zfp RTS_SRCS="$(HIE_SOURCES)" \
- 	   RTS_TARGET_PAIRS="$(HIE_NONE_TARGET_PAIRS)" \
- 	   COMPILABLE_SOURCES="$(COMPILABLE_HIE_SOURCES)" 
- 	-$(GNATMAKE) -Prts-zfp/zfp.gpr --GCC="../../../xgcc -B../../../"
- 	cd rts-zfp/adalib/ ; $(AR) r libgnat.a *.o
- 	$(RM) rts-zfp/adalib/*.o
- 	$(CHMOD) a-wx rts-zfp/adalib/*.ali
- 	$(CHMOD) a-wx rts-zfp/adalib/libgnat.a
- 
- rts-none: force
- 	$(MAKE) $(FLAGS_TO_PASS) prepare-rts \
- 	   RTS_NAME=none RTS_SRCS="$(HIE_SOURCES)" \
- 	   RTS_TARGET_PAIRS="$(HIE_NONE_TARGET_PAIRS)" \
- 	   COMPILABLE_SOURCES="$(COMPILABLE_HIE_SOURCES)" 
- 	-$(GNATMAKE) -Prts-none/none.gpr --GCC="../../../xgcc -B../../../"
- 	$(RM) rts-none/adalib/*.o
- 	$(CHMOD) a-wx rts-none/adalib/*.ali
- 
- rts-ravenscar: force
- 	$(MAKE)  $(FLAGS_TO_PASS) prepare-rts \
- 	   RTS_NAME=ravenscar RTS_SRCS="$(RAVEN_SOURCES)" \
- 	   RTS_TARGET_PAIRS="$(HIE_RAVEN_TARGET_PAIRS)" \
- 	   COMPILABLE_SOURCES="$(COMPILABLE_RAVEN_SOURCES)" 
- 	-$(GNATMAKE) -Prts-ravenscar/ravenscar.gpr \
- 	   --GCC="../../../xgcc -B../../../"
- 	cd rts-ravenscar/adalib/ ; $(AR) r libgnat.a *.o
- 	$(RM) rts-ravenscar/adalib/*.o
- 	$(CHMOD) a-wx rts-ravenscar/adalib/*.ali
- 	$(CHMOD) a-wx rts-ravenscar/adalib/libgnat.a
- 
  # Warning: this target assumes that LIBRARY_VERSION has been set correctly.
  gnatlib-shared-default:
  	$(MAKE) $(FLAGS_TO_PASS) \
--- 1843,1859 ----
          ifneq ($(PREFIX_OBJS),)
  		$(AR) $(AR_FLAGS) rts/libgccprefix$(arext) $(PREFIX_OBJS);
          endif
! 	-$(RANLIB) $(RANLIB_FLAGS) rts/libgnat$(arext)
  	$(AR) $(AR_FLAGS) rts/libgnarl$(arext) \
  	   $(addprefix rts/,$(GNATRTL_TASKING_OBJS))
! 	-$(RANLIB) $(RANLIB_FLAGS) rts/libgnarl$(arext)
          ifeq ($(GMEM_LIB),gmemlib)
! 		$(AR) $(AR_FLAGS) rts/libgmem$(arext) rts/memtrack.o
! 		-$(RANLIB) $(RANLIB_FLAGS) rts/libgmem$(arext)
          endif
  	$(CHMOD) a-wx rts/*.ali
  	touch ../stamp-gnatlib
  
  # Warning: this target assumes that LIBRARY_VERSION has been set correctly.
  gnatlib-shared-default:
  	$(MAKE) $(FLAGS_TO_PASS) \
*************** gnatlib-shared-default:
*** 1890,1906 ****
  	     GNATLIBCFLAGS="$(GNATLIBCFLAGS) $(TARGET_LIBGCC2_CFLAGS)" \
  	     THREAD_KIND="$(THREAD_KIND)" \
               gnatlib
! 	$(RM) rts/libgnat$(soext) rts/libgnarl$(soext)
  	cd rts; ../../xgcc -B../../ -shared $(TARGET_LIBGCC2_CFLAGS) \
! 		-o libgnat-$(LIBRARY_VERSION)$(soext) \
  		$(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS) \
! 		$(SO_OPTS)libgnat-$(LIBRARY_VERSION)$(soext) $(MISCLIB) -lm
  	cd rts; ../../xgcc -B../../ -shared $(TARGET_LIBGCC2_CFLAGS) \
! 		-o libgnarl-$(LIBRARY_VERSION)$(soext) \
  		$(GNATRTL_TASKING_OBJS) \
! 		$(SO_OPTS)libgnarl-$(LIBRARY_VERSION)$(soext) $(THREADSLIB)
! 	cd rts; $(LN_S) libgnat-$(LIBRARY_VERSION)$(soext) libgnat$(soext)
! 	cd rts; $(LN_S) libgnarl-$(LIBRARY_VERSION)$(soext) libgnarl$(soext)
  
  gnatlib-shared-dual:
  	$(MAKE) $(FLAGS_TO_PASS) \
--- 1861,1881 ----
  	     GNATLIBCFLAGS="$(GNATLIBCFLAGS) $(TARGET_LIBGCC2_CFLAGS)" \
  	     THREAD_KIND="$(THREAD_KIND)" \
               gnatlib
! 	$(RM) rts/libgna*$(soext)
  	cd rts; ../../xgcc -B../../ -shared $(TARGET_LIBGCC2_CFLAGS) \
! 		-o libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
  		$(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS) \
! 		$(SO_OPTS)libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
! 		$(MISCLIB) -lm
  	cd rts; ../../xgcc -B../../ -shared $(TARGET_LIBGCC2_CFLAGS) \
! 		-o libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
  		$(GNATRTL_TASKING_OBJS) \
! 		$(SO_OPTS)libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
! 		$(THREADSLIB)
! 	cd rts; $(LN_S) libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
! 		libgnat$(soext)
! 	cd rts; $(LN_S) libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
! 		libgnarl$(soext)
  
  gnatlib-shared-dual:
  	$(MAKE) $(FLAGS_TO_PASS) \
*************** gnatlib-shared-win32:
*** 1942,1957 ****
  	     GNATLIBCFLAGS="$(GNATLIBCFLAGS) $(TARGET_LIBGCC2_CFLAGS)" \
  	     THREAD_KIND="$(THREAD_KIND)" \
               gnatlib
! 	$(RM) rts/libgnat$(soext) rts/libgnarl$(soext)
  	cd rts; ../../xgcc -B../../ -shared $(TARGET_LIBGCC2_CFLAGS) \
! 		-o libgnat-$(LIBRARY_VERSION)$(soext) \
  		$(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS) \
! 		$(SO_OPTS)libgnat-$(LIBRARY_VERSION)$(soext) $(MISCLIB)
  	cd rts; ../../xgcc -B../../ -shared $(TARGET_LIBGCC2_CFLAGS) \
! 		-o libgnarl-$(LIBRARY_VERSION)$(soext) \
  		$(GNATRTL_TASKING_OBJS) \
! 		$(SO_OPTS)libgnarl-$(LIBRARY_VERSION)$(soext) \
! 		$(THREADSLIB) -Wl,libgnat-$(LIBRARY_VERSION)$(soext)
  
  gnatlib-shared-vms:
  	$(MAKE) $(FLAGS_TO_PASS) \
--- 1917,1955 ----
  	     GNATLIBCFLAGS="$(GNATLIBCFLAGS) $(TARGET_LIBGCC2_CFLAGS)" \
  	     THREAD_KIND="$(THREAD_KIND)" \
               gnatlib
! 	$(RM) rts/libgna*$(soext)
  	cd rts; ../../xgcc -B../../ -shared $(TARGET_LIBGCC2_CFLAGS) \
! 		-o libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
  		$(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS) \
! 		$(SO_OPTS)libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) $(MISCLIB)
  	cd rts; ../../xgcc -B../../ -shared $(TARGET_LIBGCC2_CFLAGS) \
! 		-o libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
  		$(GNATRTL_TASKING_OBJS) \
! 		$(SO_OPTS)libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
! 		$(THREADSLIB) -Wl,libgnat$(hyphen)$(LIBRARY_VERSION)$(soext)
! 
! gnatlib-shared-darwin:
! 	$(MAKE) $(FLAGS_TO_PASS) \
! 	     GNATLIBFLAGS="$(GNATLIBFLAGS)" \
! 	     GNATLIBCFLAGS="$(GNATLIBCFLAGS) $(TARGET_LIBGCC2_CFLAGS) \
! 	                    -fno-common" \
! 	     THREAD_KIND="$(THREAD_KIND)" \
! 	     gnatlib
! 	$(RM) rts/libgnat$(soext) rts/libgnarl$(soext)
! 	cd rts; ../../xgcc -B../../ -dynamiclib $(TARGET_LIBGCC2_CFLAGS) \
! 		-o libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
! 		$(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS) \
! 		$(SO_OPTS) \
! 		$(MISCLIB) -lm
! 	cd rts; ../../xgcc -B../../ -dynamiclib $(TARGET_LIBGCC2_CFLAGS) \
! 		-o libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
! 		$(GNATRTL_TASKING_OBJS) \
! 		$(SO_OPTS) \
! 		$(THREADSLIB) -Wl,libgnat$(hyphen)$(LIBRARY_VERSION)$(soext)
! 	cd rts; $(LN_S) libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
! 		libgnat$(soext)
! 	cd rts; $(LN_S) libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
! 		libgnarl$(soext)
  
  gnatlib-shared-vms:
  	$(MAKE) $(FLAGS_TO_PASS) \
*************** gnatlib-shared-vms:
*** 1959,1971 ****
  	     GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
  	     THREAD_KIND="$(THREAD_KIND)" \
               gnatlib
! 	$(RM) rts/libgnat*$(soext) rts/libgnarl*$(soext)
  	cd rts && echo "case_sensitive=yes" > SYMVEC_$$$$.opt && \
  	objdump --syms $(LIBGNAT_OBJS) $(GNATRTL_NONTASKING_OBJS) | \
  	$(SHLIB_SYMVEC) >> SYMVEC_$$$$.opt && \
  	echo "case_sensitive=NO" >> SYMVEC_$$$$.opt && \
  	../../xgcc -g -B../../ -nostartfiles -shared -shared-libgcc \
! 	   -o libgnat_$(LIBRARY_VERSION)$(soext) libgnat.a \
  	   sys\$$library:trace.exe \
  	   --for-linker=/noinform \
  	   --for-linker=SYMVEC_$$$$.opt \
--- 1957,1969 ----
  	     GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
  	     THREAD_KIND="$(THREAD_KIND)" \
               gnatlib
! 	$(RM) rts/libgna*$(soext)
  	cd rts && echo "case_sensitive=yes" > SYMVEC_$$$$.opt && \
  	objdump --syms $(LIBGNAT_OBJS) $(GNATRTL_NONTASKING_OBJS) | \
  	$(SHLIB_SYMVEC) >> SYMVEC_$$$$.opt && \
  	echo "case_sensitive=NO" >> SYMVEC_$$$$.opt && \
  	../../xgcc -g -B../../ -nostartfiles -shared -shared-libgcc \
! 	   -o libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) libgnat.a \
  	   sys\$$library:trace.exe \
  	   --for-linker=/noinform \
  	   --for-linker=SYMVEC_$$$$.opt \
*************** gnatlib-shared-vms:
*** 1975,1982 ****
  	$(SHLIB_SYMVEC) >> SYMVEC_$$$$.opt && \
  	echo "case_sensitive=NO" >> SYMVEC_$$$$.opt && \
  	../../xgcc -g -B../../ -nostartfiles -shared -shared-libgcc \
! 	   -o libgnarl_$(LIBRARY_VERSION)$(soext) \
! 	   libgnarl.a libgnat_$(LIBRARY_VERSION)$(soext) \
  	   sys\$$library:trace.exe \
  	   --for-linker=/noinform \
  	   --for-linker=SYMVEC_$$$$.opt \
--- 1973,1980 ----
  	$(SHLIB_SYMVEC) >> SYMVEC_$$$$.opt && \
  	echo "case_sensitive=NO" >> SYMVEC_$$$$.opt && \
  	../../xgcc -g -B../../ -nostartfiles -shared -shared-libgcc \
! 	   -o libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
! 	   libgnarl.a libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
  	   sys\$$library:trace.exe \
  	   --for-linker=/noinform \
  	   --for-linker=SYMVEC_$$$$.opt \
*************** gnatlib-sjlj: ../stamp-gnatlib1
*** 1999,2004 ****
--- 1997,2011 ----
  	     THREAD_KIND="$(THREAD_KIND)" \
  	     TARGET_LIBGCC2_CFLAGS="$(TARGET_LIBGCC2_CFLAGS)" gnatlib
  
+ gnatlib-zcx: ../stamp-gnatlib1
+ 	sed -e 's/ZCX_By_Default.*/ZCX_By_Default            : constant Boolean := True;/' rts/system.ads > rts/s.ads
+ 	$(MV) rts/s.ads rts/system.ads
+ 	$(MAKE) $(FLAGS_TO_PASS) \
+ 	     GNATLIBFLAGS="$(GNATLIBFLAGS)" \
+ 	     GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
+ 	     THREAD_KIND="$(THREAD_KIND)" \
+ 	     TARGET_LIBGCC2_CFLAGS="$(TARGET_LIBGCC2_CFLAGS)" gnatlib
+ 
  # .s files for cross-building
  gnat-cross: force
  	make $(GNAT1_ADA_OBJS) CC="gcc -B../stage1/" CFLAGS="-S -gnatp"
*************** b_gnatm.o : b_gnatm.c
*** 2021,2027 ****
  
  ADA_INCLUDE_DIR = $(libsubdir)/adainclude
  ADA_RTL_OBJ_DIR = $(libsubdir)/adalib
- ADA_SHARE_MAKE_DIR = $(prefix)/share/gnat
  
  # force no sibling call optimization on s-traceb.o so the number of stack
  # frames to be skipped when computing a call chain is not modified by
--- 2028,2033 ----
*************** endif
*** 2038,2043 ****
--- 2044,2071 ----
  s-traceb.o  : s-traceb.adb
  	$(CC) -c $(ALL_ADAFLAGS) $(FORCE_DEBUG_ADAFLAGS) \
  	      $(NO_SIBLING_ADAFLAGS) $(ADA_INCLUDES) \
+       $< $(OUTPUT_OPTION)
+ 
+ # force debugging information on s-tasdeb.o so that it is always
+ # possible to set conditional breakpoints on tasks.
+ 
+ s-tasdeb.o  : s-tasdeb.adb s-tasdeb.ads
+ 	$(CC) -c $(ALL_ADAFLAGS) $(FORCE_DEBUG_ADAFLAGS) -O0 $(ADA_INCLUDES) \
+ 	      $< $(OUTPUT_OPTION)
+ 
+ # force debugging information on a-except.o so that it is always
+ # possible to set conditional breakpoints on exceptions.
+ # use -O1 otherwise gdb isn't able to get a full backtrace on mips targets.
+ 
+ a-except.o  : a-except.adb a-except.ads
+ 	$(CC) -c $(ALL_ADAFLAGS) $(FORCE_DEBUG_ADAFLAGS) -O1 -fno-inline \
+ 	      $(ADA_INCLUDES) $< $(OUTPUT_OPTION)
+ 
+ # force debugging information on s-assert.o so that it is always
+ # possible to set breakpoint on assert failures.
+ 
+ s-assert.o  : s-assert.adb s-assert.ads a-except.ads
+ 	$(CC) -c $(ALL_ADAFLAGS) $(FORCE_DEBUG_ADAFLAGS) -O2 $(ADA_INCLUDES) \
  	      $< $(OUTPUT_OPTION)
  
  adadecode.o : adadecode.c adadecode.h
*************** final.o   : raise.h final.c
*** 2052,2061 ****
  gmem.o    : gmem.c
  link.o    : link.c
  mkdir.o   : mkdir.c
! socket.o  : socket.c
  sysdep.o  : sysdep.c
  
! cio.o     : cio.c 
  	$(CC) -c $(ALL_CFLAGS) $(ADA_CFLAGS) $(RT_FLAGS) \
  	         $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
  
--- 2080,2094 ----
  gmem.o    : gmem.c
  link.o    : link.c
  mkdir.o   : mkdir.c
! socket.o  : socket.c gsocket.h
  sysdep.o  : sysdep.c
  
! gen-soccon: gen-soccon.c gsocket.h
! 	$(CC) $(ALL_CFLAGS) $(ADA_CFLAGS) $(RT_FLAGS) \
! 		$(ALL_CPPFLAGS) $(INCLUDES) -DTARGET=\"$(target_alias)\" \
! 		$< $(OUTPUT_OPTION)
! 
! cio.o     : cio.c
  	$(CC) -c $(ALL_CFLAGS) $(ADA_CFLAGS) $(RT_FLAGS) \
  	         $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
  
*************** init.o    : init.c ada.h types.h raise.h
*** 2063,2068 ****
--- 2096,2107 ----
  	$(CC) -c $(ALL_CFLAGS) $(ADA_CFLAGS) $(RT_FLAGS) \
  	         $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
  
+ # No optimization to compile this file as optimizations (-O1 or above) breaks
+ # the SEH handling on Windows. The reasons are not clear.
+ seh_init.o : seh_init.c raise.h
+ 	$(CC) -c $(ALL_CFLAGS) $(ADA_CFLAGS) $(RT_FLAGS) -O0 \
+ 	         $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
+ 
  raise.o   : raise.c raise.h
  	$(CC) -c $(ALL_CFLAGS) $(ADA_CFLAGS) $(RT_FLAGS) \
  		 $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
*************** force:
*** 2084,2088 ****
  ../../gnatlbr$(exeext): ../../prefix.o
  	$(GNATMAKE) -c $(ADA_INCLUDES) gnatlbr --GCC="$(CC) $(ALL_ADAFLAGS)"
  	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatlbr
! 	$(GNATLINK) -v gnatlbr -o $@ --GCC="$(CC) $(ADA_INCLUDES)" \
! 		$(TOOLS_LIBS)
--- 2123,2126 ----
  ../../gnatlbr$(exeext): ../../prefix.o
  	$(GNATMAKE) -c $(ADA_INCLUDES) gnatlbr --GCC="$(CC) $(ALL_ADAFLAGS)"
  	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatlbr
! 	$(GNATLINK) -v gnatlbr -o $@ --GCC=$(GCC_LINK) $(TOOLS_LIBS)
diff -Nrcpad gcc-3.4.3/gcc/ada/Makefile.prolog gcc-4.0.0/gcc/ada/Makefile.prolog
*** gcc-3.4.3/gcc/ada/Makefile.prolog	Mon Jan 12 11:36:13 2004
--- gcc-4.0.0/gcc/ada/Makefile.prolog	Wed Feb 18 11:52:55 2004
*************** GNATMAKE.saved:=$(GNATMAKE)
*** 40,45 ****
--- 40,46 ----
  ADAFLAGS.saved:=$(ADAFLAGS)
  CFLAGS.saved:=$(CFLAGS)
  CXXFLAGS.saved:=$(CXXFLAGS)
+ FLDFLAGS.saved:=$(FLDFLAGS)
  LIBS.saved:=$(LIBS)
  LDFLAGS.saved:=$(LDFLAGS)
  ADA_SOURCES.saved:=$(ADA_SOURCES)
*************** CXX_EXT:=.cc
*** 57,62 ****
--- 58,64 ----
  AR_EXT=.a
  OBJ_EXT=.o
  CC=gcc
+ FLDFLAGS:=
  
  # Default target is to build (compile/bind/link)
  # Target build is defined in Makefile.generic
diff -Nrcpad gcc-3.4.3/gcc/ada/Makefile.rtl gcc-4.0.0/gcc/ada/Makefile.rtl
*** gcc-3.4.3/gcc/ada/Makefile.rtl	Mon Jan  5 15:20:45 2004
--- gcc-4.0.0/gcc/ada/Makefile.rtl	Thu Feb 10 13:50:14 2005
***************
*** 1,5 ****
  # Makefile.rtl for GNU Ada Compiler (GNAT).
! #   Copyright (C) 2003 Free Software Foundation, Inc.
  
  #This file is part of GCC.
  
--- 1,5 ----
  # Makefile.rtl for GNU Ada Compiler (GNAT).
! #   Copyright (C) 2003, 2004 Free Software Foundation, Inc.
  
  #This file is part of GCC.
  
*************** GNATRTL_TASKING_OBJS= \
*** 46,51 ****
--- 46,52 ----
    s-intman$(objext) \
    s-osinte$(objext) \
    s-proinf$(objext) \
+   s-solita$(objext) \
    s-taenca$(objext) \
    s-taprob$(objext) \
    s-taprop$(objext) \
*************** GNATRTL_TASKING_OBJS= \
*** 74,91 ****
--- 75,121 ----
  GNATRTL_NONTASKING_OBJS= \
    a-caldel$(objext) \
    a-calend$(objext) \
+   a-cdlili$(objext) \
+   a-cgaaso$(objext) \
+   a-cgarso$(objext) \
+   a-cgcaso$(objext) \
    a-chahan$(objext) \
    a-charac$(objext) \
    a-chlat1$(objext) \
    a-chlat9$(objext) \
+   a-chtgke$(objext) \
+   a-chtgop$(objext) \
+   a-chzla1$(objext) \
+   a-chzla9$(objext) \
+   a-cidlli$(objext) \
+   a-cihama$(objext) \
+   a-cihase$(objext) \
+   a-ciorma$(objext) \
+   a-ciormu$(objext) \
+   a-ciorse$(objext) \
+   a-cohama$(objext) \
+   a-cohase$(objext) \
+   a-cohata$(objext) \
+   a-coinve$(objext) \
    a-colien$(objext) \
    a-colire$(objext) \
    a-comlin$(objext) \
+   a-contai$(objext) \
+   a-convec$(objext) \
+   a-coorma$(objext) \
+   a-coormu$(objext) \
+   a-coorse$(objext) \
+   a-coprnu$(objext) \
+   a-crbltr$(objext) \
+   a-crbtgk$(objext) \
+   a-crbtgo$(objext) \
    a-cwila1$(objext) \
    a-cwila9$(objext) \
    a-decima$(objext) \
    a-diocst$(objext) \
+   a-direct$(objext) \
    a-direio$(objext) \
+   a-dirval$(objext) \
    a-einuoc$(objext) \
    a-elchha$(objext) \
    a-except$(objext) \
*************** GNATRTL_NONTASKING_OBJS= \
*** 99,110 ****
--- 129,144 ----
    a-iwteio$(objext) \
    a-lfteio$(objext) \
    a-lfwtio$(objext) \
+   a-lfztio$(objext) \
    a-liteio$(objext) \
    a-liwtio$(objext) \
+   a-liztio$(objext) \
    a-llftio$(objext) \
    a-llfwti$(objext) \
+   a-llfzti$(objext) \
    a-llitio$(objext) \
    a-lliwti$(objext) \
+   a-llizti$(objext) \
    a-ncelfu$(objext) \
    a-ngcefu$(objext) \
    a-ngcoty$(objext) \
*************** GNATRTL_NONTASKING_OBJS= \
*** 124,143 ****
--- 158,185 ----
    a-nuflra$(objext) \
    a-numaux$(objext) \
    a-numeri$(objext) \
+   a-rbtgso$(objext) \
+   a-secain$(objext) \
    a-sequio$(objext) \
    a-sfteio$(objext) \
    a-sfwtio$(objext) \
+   a-sfztio$(objext) \
+   a-shcain$(objext) \
    a-siocst$(objext) \
    a-siteio$(objext) \
    a-siwtio$(objext) \
+   a-siztio$(objext) \
+   a-slcain$(objext) \
    a-ssicst$(objext) \
    a-ssitio$(objext) \
    a-ssiwti$(objext) \
+   a-ssizti$(objext) \
    a-stmaco$(objext) \
    a-storio$(objext) \
    a-strbou$(objext) \
    a-stream$(objext) \
    a-strfix$(objext) \
+   a-strhas$(objext) \
    a-string$(objext) \
    a-strmap$(objext) \
    a-strsea$(objext) \
*************** GNATRTL_NONTASKING_OBJS= \
*** 145,159 ****
    a-strunb$(objext) \
    a-ststio$(objext) \
    a-stunau$(objext) \
    a-stwibo$(objext) \
    a-stwifi$(objext) \
    a-stwima$(objext) \
    a-stwise$(objext) \
    a-stwisu$(objext) \
    a-stwiun$(objext) \
    a-suteio$(objext) \
-   a-swuwti$(objext) \
    a-swmwco$(objext) \
    a-tags$(objext) \
    a-teioed$(objext) \
    a-textio$(objext) \
--- 187,216 ----
    a-strunb$(objext) \
    a-ststio$(objext) \
    a-stunau$(objext) \
+   a-stunha$(objext) \
    a-stwibo$(objext) \
    a-stwifi$(objext) \
+   a-stwiha$(objext) \
    a-stwima$(objext) \
    a-stwise$(objext) \
    a-stwisu$(objext) \
    a-stwiun$(objext) \
+   a-stzbou$(objext) \
+   a-stzfix$(objext) \
+   a-stzhas$(objext) \
+   a-stzmap$(objext) \
+   a-stzsea$(objext) \
+   a-stzsup$(objext) \
+   a-stzunb$(objext) \
    a-suteio$(objext) \
    a-swmwco$(objext) \
+   a-swunau$(objext) \
+   a-swunha$(objext) \
+   a-swuwti$(objext) \
+   a-szmzco$(objext) \
+   a-szunau$(objext) \
+   a-szunha$(objext) \
+   a-szuzti$(objext) \
    a-tags$(objext) \
    a-teioed$(objext) \
    a-textio$(objext) \
*************** GNATRTL_NONTASKING_OBJS= \
*** 173,178 ****
--- 230,236 ----
    a-timoio$(objext) \
    a-tiocst$(objext) \
    a-titest$(objext) \
+   a-tiunio$(objext) \
    a-unccon$(objext) \
    a-uncdea$(objext) \
    a-witeio$(objext) \
*************** GNATRTL_NONTASKING_OBJS= \
*** 193,198 ****
--- 251,276 ----
    a-wtmoau$(objext) \
    a-wtmoio$(objext) \
    a-wttest$(objext) \
+   a-wwunio$(objext) \
+   a-ztcoau$(objext) \
+   a-ztcoio$(objext) \
+   a-ztcstr$(objext) \
+   a-ztdeau$(objext) \
+   a-ztdeio$(objext) \
+   a-ztedit$(objext) \
+   a-ztenau$(objext) \
+   a-ztenio$(objext) \
+   a-ztexio$(objext) \
+   a-ztfiio$(objext) \
+   a-ztflau$(objext) \
+   a-ztflio$(objext) \
+   a-ztgeau$(objext) \
+   a-ztinau$(objext) \
+   a-ztinio$(objext) \
+   a-ztmoau$(objext) \
+   a-ztmoio$(objext) \
+   a-zttest$(objext) \
+   a-zzunio$(objext) \
    ada$(objext) \
    calendar$(objext) \
    g-arrspl$(objext) \
*************** GNATRTL_NONTASKING_OBJS= \
*** 216,221 ****
--- 294,300 ----
    g-diopit$(objext) \
    g-dirope$(objext) \
    g-dyntab$(objext) \
+   g-dynhta$(objext) \
    g-except$(objext) \
    g-excact$(objext) \
    g-exctra$(objext) \
*************** GNATRTL_NONTASKING_OBJS= \
*** 232,238 ****
    g-memdum$(objext) \
    g-moreex$(objext) \
    g-os_lib$(objext) \
-   g-perhas$(objext) \
    g-pehage$(objext) \
    g-regexp$(objext) \
    g-regpat$(objext) \
--- 311,316 ----
*************** GNATRTL_NONTASKING_OBJS= \
*** 253,259 ****
--- 331,339 ----
    g-table$(objext) \
    g-tasloc$(objext) \
    g-traceb$(objext) \
+   g-utf_32$(objext) \
    g-wistsp$(objext) \
+   g-zstspl$(objext) \
    gnat$(objext) \
    i-c$(objext) \
    i-cexten$(objext) \
*************** GNATRTL_NONTASKING_OBJS= \
*** 268,273 ****
--- 348,354 ----
    ioexcept$(objext) \
    machcode$(objext) \
    s-addima$(objext) \
+   s-addope$(objext) \
    s-arit64$(objext) \
    s-assert$(objext) \
    s-atacco$(objext) \
*************** GNATRTL_NONTASKING_OBJS= \
*** 395,402 ****
    s-poosiz$(objext) \
    s-powtab$(objext) \
    s-purexc$(objext) \
    s-rident$(objext) \
!   s-rpc$(objext) \
    s-scaval$(objext) \
    s-secsta$(objext) \
    s-sequio$(objext) \
--- 476,484 ----
    s-poosiz$(objext) \
    s-powtab$(objext) \
    s-purexc$(objext) \
+   s-restri$(objext) \
    s-rident$(objext) \
!   s-rpc$(objext)    \
    s-scaval$(objext) \
    s-secsta$(objext) \
    s-sequio$(objext) \
*************** GNATRTL_NONTASKING_OBJS= \
*** 405,410 ****
--- 487,493 ----
    s-sopco4$(objext) \
    s-sopco5$(objext) \
    s-stache$(objext) \
+   s-stchop$(objext) \
    s-stalib$(objext) \
    s-stoele$(objext) \
    s-stopoo$(objext) \
diff -Nrcpad gcc-3.4.3/gcc/ada/a-caldel-vms.adb gcc-4.0.0/gcc/ada/a-caldel-vms.adb
*** gcc-3.4.3/gcc/ada/a-caldel-vms.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-caldel-vms.adb	Fri May 14 10:01:59 2004
***************
*** 0 ****
--- 1,99 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   A D A . C A L E N D A R . D E L A Y S                  --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2003, Ada Core Technologies               --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the Alpha/VMS version.
+ 
+ with System.OS_Primitives;
+ --  Used for Max_Sensible_Delay
+ 
+ with System.Soft_Links;
+ --  Used for Timed_Delay
+ 
+ package body Ada.Calendar.Delays is
+ 
+    package OSP renames System.OS_Primitives;
+    package TSL renames System.Soft_Links;
+ 
+    use type TSL.Timed_Delay_Call;
+ 
+    ---------------
+    -- Delay_For --
+    ---------------
+ 
+    procedure Delay_For (D : Duration) is
+    begin
+       TSL.Timed_Delay.all
+         (Duration'Min (D, OSP.Max_Sensible_Delay), OSP.Relative);
+    end Delay_For;
+ 
+    -----------------
+    -- Delay_Until --
+    -----------------
+ 
+    procedure Delay_Until (T : Time) is
+    begin
+       TSL.Timed_Delay.all (To_Duration (T), OSP.Absolute_Calendar);
+    end Delay_Until;
+ 
+    -----------------
+    -- To_Duration --
+    -----------------
+ 
+    function To_Duration (T : Time) return Duration is
+    begin
+       return OSP.To_Duration (OSP.OS_Time (T), OSP.Absolute_Calendar);
+    end To_Duration;
+ 
+    --------------------
+    -- Timed_Delay_NT --
+    --------------------
+ 
+    procedure Timed_Delay_NT (Time : Duration; Mode : Integer);
+ 
+    procedure Timed_Delay_NT (Time : Duration; Mode : Integer) is
+    begin
+       OSP.Timed_Delay (Time, Mode);
+    end Timed_Delay_NT;
+ 
+ begin
+    --  Set up the Timed_Delay soft link to the non tasking version if it has
+    --  not been already set.
+    --  If tasking is present, Timed_Delay has already set this soft link, or
+    --  this will be overriden during the elaboration of
+    --  System.Tasking.Initialization
+ 
+    if TSL.Timed_Delay = null then
+       TSL.Timed_Delay := Timed_Delay_NT'Access;
+    end if;
+ end Ada.Calendar.Delays;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-calend-mingw.adb gcc-4.0.0/gcc/ada/a-calend-mingw.adb
*** gcc-3.4.3/gcc/ada/a-calend-mingw.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-calend-mingw.adb	Fri May 14 10:01:59 2004
***************
*** 0 ****
--- 1,394 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --                         A D A . C A L E N D A R                          --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --            Copyright (C) 1997-2002 Free Software Foundation, Inc.        --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the Windows NT/95 version.
+ 
+ with System.OS_Primitives;
+ --  used for Clock
+ 
+ with System.OS_Interface;
+ 
+ package body Ada.Calendar is
+ 
+    use System.OS_Interface;
+ 
+    ------------------------------
+    -- Use of Pragma Unsuppress --
+    ------------------------------
+ 
+    --  This implementation of Calendar takes advantage of the permission in
+    --  Ada 95 of using arithmetic overflow checks to check for out of bounds
+    --  time values. This means that we must catch the constraint error that
+    --  results from arithmetic overflow, so we use pragma Unsuppress to make
+    --  sure that overflow is enabled, using software overflow checking if
+    --  necessary. That way, compiling Calendar with options to suppress this
+    --  checking will not affect its correctness.
+ 
+    ------------------------
+    -- Local Declarations --
+    ------------------------
+ 
+    Ada_Year_Min : constant := 1901;
+    Ada_Year_Max : constant := 2099;
+ 
+    --  Win32 time constants
+ 
+    epoch_1970     : constant := 16#19D_B1DE_D53E_8000#; -- win32 UTC epoch
+    system_time_ns : constant := 100;                    -- 100 ns per tick
+    Sec_Unit       : constant := 10#1#E9;
+ 
+    ---------
+    -- "+" --
+    ---------
+ 
+    function "+" (Left : Time; Right : Duration) return Time is
+       pragma Unsuppress (Overflow_Check);
+    begin
+       return (Left + Time (Right));
+ 
+    exception
+       when Constraint_Error =>
+          raise Time_Error;
+    end "+";
+ 
+    function "+" (Left : Duration; Right : Time) return Time is
+       pragma Unsuppress (Overflow_Check);
+    begin
+       return (Time (Left) + Right);
+ 
+    exception
+       when Constraint_Error =>
+          raise Time_Error;
+    end "+";
+ 
+    ---------
+    -- "-" --
+    ---------
+ 
+    function "-" (Left : Time; Right : Duration)  return Time is
+       pragma Unsuppress (Overflow_Check);
+    begin
+       return Left - Time (Right);
+ 
+    exception
+       when Constraint_Error =>
+          raise Time_Error;
+    end "-";
+ 
+    function "-" (Left : Time; Right : Time) return Duration is
+       pragma Unsuppress (Overflow_Check);
+    begin
+       return Duration (Left) - Duration (Right);
+ 
+    exception
+       when Constraint_Error =>
+          raise Time_Error;
+    end "-";
+ 
+    ---------
+    -- "<" --
+    ---------
+ 
+    function "<" (Left, Right : Time) return Boolean is
+    begin
+       return Duration (Left) < Duration (Right);
+    end "<";
+ 
+    ----------
+    -- "<=" --
+    ----------
+ 
+    function "<=" (Left, Right : Time) return Boolean is
+    begin
+       return Duration (Left) <= Duration (Right);
+    end "<=";
+ 
+    ---------
+    -- ">" --
+    ---------
+ 
+    function ">" (Left, Right : Time) return Boolean is
+    begin
+       return Duration (Left) > Duration (Right);
+    end ">";
+ 
+    ----------
+    -- ">=" --
+    ----------
+ 
+    function ">=" (Left, Right : Time) return Boolean is
+    begin
+       return Duration (Left) >= Duration (Right);
+    end ">=";
+ 
+    -----------
+    -- Clock --
+    -----------
+ 
+    --  The Ada.Calendar.Clock function gets the time from the soft links
+    --  interface which will call the appropriate function depending wether
+    --  tasking is involved or not.
+ 
+    function Clock return Time is
+    begin
+       return Time (System.OS_Primitives.Clock);
+    end Clock;
+ 
+    ---------
+    -- Day --
+    ---------
+ 
+    function Day (Date : Time) return Day_Number is
+       DY : Year_Number;
+       DM : Month_Number;
+       DD : Day_Number;
+       DS : Day_Duration;
+ 
+    begin
+       Split (Date, DY, DM, DD, DS);
+       return DD;
+    end Day;
+ 
+    -----------
+    -- Month --
+    -----------
+ 
+    function Month (Date : Time) return Month_Number is
+       DY : Year_Number;
+       DM : Month_Number;
+       DD : Day_Number;
+       DS : Day_Duration;
+ 
+    begin
+       Split (Date, DY, DM, DD, DS);
+       return DM;
+    end Month;
+ 
+    -------------
+    -- Seconds --
+    -------------
+ 
+    function Seconds (Date : Time) return Day_Duration is
+       DY : Year_Number;
+       DM : Month_Number;
+       DD : Day_Number;
+       DS : Day_Duration;
+ 
+    begin
+       Split (Date, DY, DM, DD, DS);
+       return DS;
+    end Seconds;
+ 
+    -----------
+    -- Split --
+    -----------
+ 
+    procedure Split
+      (Date    : Time;
+       Year    : out Year_Number;
+       Month   : out Month_Number;
+       Day     : out Day_Number;
+       Seconds : out Day_Duration)
+    is
+ 
+       Date_Int    : aliased Long_Long_Integer;
+       Date_Loc    : aliased Long_Long_Integer;
+       Timbuf      : aliased SYSTEMTIME;
+       Int_Date    : Long_Long_Integer;
+       Sub_Seconds : Duration;
+ 
+    begin
+       --  We take the sub-seconds (decimal part) of Date and this is added
+       --  to compute the Seconds. This way we keep the precision of the
+       --  high-precision clock that was lost with the Win32 API calls
+       --  below.
+ 
+       if Date < 0.0 then
+ 
+          --  this is a Date before Epoch (January 1st, 1970)
+ 
+          Sub_Seconds := Duration (Date) -
+            Duration (Long_Long_Integer (Date + Duration'(0.5)));
+ 
+          Int_Date := Long_Long_Integer (Date - Sub_Seconds);
+ 
+          --  For Date = -86400.1 we are 2 days before Epoch at 0.1 seconds
+          --  from day 1 before Epoch. It means that it is 23h 59m 59.9s.
+          --  here we adjust for that.
+ 
+          if Sub_Seconds < 0.0 then
+             Int_Date    := Int_Date - 1;
+             Sub_Seconds := 1.0 + Sub_Seconds;
+          end if;
+ 
+       else
+ 
+          --  this is a Date after Epoch (January 1st, 1970)
+ 
+          Sub_Seconds := Duration (Date) -
+            Duration (Long_Long_Integer (Date - Duration'(0.5)));
+ 
+          Int_Date := Long_Long_Integer (Date - Sub_Seconds);
+ 
+       end if;
+ 
+       --  Date_Int is the number of seconds from Epoch.
+ 
+       Date_Int := Long_Long_Integer
+         (Int_Date * Sec_Unit / system_time_ns) + epoch_1970;
+ 
+       if not FileTimeToLocalFileTime (Date_Int'Access, Date_Loc'Access) then
+          raise Time_Error;
+       end if;
+ 
+       if not FileTimeToSystemTime (Date_Loc'Access, Timbuf'Access) then
+          raise Time_Error;
+       end if;
+ 
+       if Timbuf.wYear not in Ada_Year_Min .. Ada_Year_Max then
+          raise Time_Error;
+       end if;
+ 
+       Seconds :=
+         Duration (Timbuf.wHour) * 3_600.0 +
+         Duration (Timbuf.wMinute) * 60.0 +
+         Duration (Timbuf.wSecond) +
+         Sub_Seconds;
+ 
+       Day       := Integer (Timbuf.wDay);
+       Month     := Integer (Timbuf.wMonth);
+       Year      := Integer (Timbuf.wYear);
+    end Split;
+ 
+    -------------
+    -- Time_Of --
+    -------------
+ 
+    function Time_Of
+      (Year    : Year_Number;
+       Month   : Month_Number;
+       Day     : Day_Number;
+       Seconds : Day_Duration := 0.0)
+       return    Time
+    is
+ 
+       Timbuf      : aliased SYSTEMTIME;
+       Now         : aliased Long_Long_Integer;
+       Loc         : aliased Long_Long_Integer;
+       Int_Secs    : Integer;
+       Secs        : Integer;
+       Add_One_Day : Boolean := False;
+       Date        : Time;
+ 
+    begin
+       --  The following checks are redundant with respect to the constraint
+       --  error checks that should normally be made on parameters, but we
+       --  decide to raise Constraint_Error in any case if bad values come
+       --  in (as a result of checks being off in the caller, or for other
+       --  erroneous or bounded error cases).
+ 
+       if        not Year   'Valid
+         or else not Month  'Valid
+         or else not Day    'Valid
+         or else not Seconds'Valid
+       then
+          raise Constraint_Error;
+       end if;
+ 
+       if Seconds = 0.0 then
+          Int_Secs := 0;
+       else
+          Int_Secs := Integer (Seconds - 0.5);
+       end if;
+ 
+       --  Timbuf.wMillisec is to keep the msec. We can't use that because the
+       --  high-resolution clock has a precision of 1 Microsecond.
+       --  Anyway the sub-seconds part is not needed to compute the number
+       --  of seconds in UTC.
+ 
+       if Int_Secs = 86_400 then
+          Secs := 0;
+          Add_One_Day := True;
+       else
+          Secs := Int_Secs;
+       end if;
+ 
+       Timbuf.wMilliseconds := 0;
+       Timbuf.wSecond       := WORD (Secs mod 60);
+       Timbuf.wMinute       := WORD ((Secs / 60) mod 60);
+       Timbuf.wHour         := WORD (Secs / 3600);
+       Timbuf.wDay          := WORD (Day);
+       Timbuf.wMonth        := WORD (Month);
+       Timbuf.wYear         := WORD (Year);
+ 
+       if not SystemTimeToFileTime (Timbuf'Access, Loc'Access) then
+          raise Time_Error;
+       end if;
+ 
+       if not LocalFileTimeToFileTime (Loc'Access, Now'Access) then
+          raise Time_Error;
+       end if;
+ 
+       --  Here we have the UTC now translate UTC to Epoch time (UNIX style
+       --  time based on 1 january 1970) and add there the sub-seconds part.
+ 
+       declare
+          Sub_Sec : constant Duration := Seconds - Duration (Int_Secs);
+       begin
+          Date := Time ((Now - epoch_1970) * system_time_ns / Sec_Unit) +
+            Sub_Sec;
+       end;
+ 
+       if Add_One_Day then
+          Date := Date + Duration (86400.0);
+       end if;
+ 
+       return Date;
+    end Time_Of;
+ 
+    ----------
+    -- Year --
+    ----------
+ 
+    function Year (Date : Time) return Year_Number is
+       DY : Year_Number;
+       DM : Month_Number;
+       DD : Day_Number;
+       DS : Day_Duration;
+ 
+    begin
+       Split (Date, DY, DM, DD, DS);
+       return DY;
+    end Year;
+ 
+ end Ada.Calendar;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-calend-vms.adb gcc-4.0.0/gcc/ada/a-calend-vms.adb
*** gcc-3.4.3/gcc/ada/a-calend-vms.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-calend-vms.adb	Fri May 14 10:01:59 2004
***************
*** 0 ****
--- 1,361 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --                         A D A . C A L E N D A R                          --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --            Copyright (C) 1992-2003 Free Software Foundation, Inc.        --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the Alpha/VMS version.
+ 
+ with System.Aux_DEC; use System.Aux_DEC;
+ 
+ package body Ada.Calendar is
+ 
+    ------------------------------
+    -- Use of Pragma Unsuppress --
+    ------------------------------
+ 
+    --  This implementation of Calendar takes advantage of the permission in
+    --  Ada 95 of using arithmetic overflow checks to check for out of bounds
+    --  time values. This means that we must catch the constraint error that
+    --  results from arithmetic overflow, so we use pragma Unsuppress to make
+    --  sure that overflow is enabled, using software overflow checking if
+    --  necessary. That way, compiling Calendar with options to suppress this
+    --  checking will not affect its correctness.
+ 
+    ------------------------
+    -- Local Declarations --
+    ------------------------
+ 
+    Ada_Year_Min : constant := 1901;
+    Ada_Year_Max : constant := 2099;
+ 
+    --  Some basic constants used throughout
+ 
+    function To_Relative_Time (D : Duration) return Time;
+ 
+    function To_Relative_Time (D : Duration) return Time is
+    begin
+       return Time (Long_Integer'Integer_Value (D) / 100);
+    end To_Relative_Time;
+ 
+    ---------
+    -- "+" --
+    ---------
+ 
+    function "+" (Left : Time; Right : Duration) return Time is
+       pragma Unsuppress (Overflow_Check);
+    begin
+       return (Left + To_Relative_Time (Right));
+ 
+    exception
+       when Constraint_Error =>
+          raise Time_Error;
+    end "+";
+ 
+    function "+" (Left : Duration; Right : Time) return Time is
+       pragma Unsuppress (Overflow_Check);
+    begin
+       return (To_Relative_Time (Left) + Right);
+ 
+    exception
+       when Constraint_Error =>
+          raise Time_Error;
+    end "+";
+ 
+    ---------
+    -- "-" --
+    ---------
+ 
+    function "-" (Left : Time; Right : Duration)  return Time is
+       pragma Unsuppress (Overflow_Check);
+    begin
+       return Left - To_Relative_Time (Right);
+ 
+    exception
+       when Constraint_Error =>
+          raise Time_Error;
+    end "-";
+ 
+    function "-" (Left : Time; Right : Time) return Duration is
+       pragma Unsuppress (Overflow_Check);
+    begin
+       return Duration'Fixed_Value
+         ((Long_Integer (Left) - Long_Integer (Right)) * 100);
+ 
+    exception
+       when Constraint_Error =>
+          raise Time_Error;
+    end "-";
+ 
+    ---------
+    -- "<" --
+    ---------
+ 
+    function "<" (Left, Right : Time) return Boolean is
+    begin
+       return Long_Integer (Left) < Long_Integer (Right);
+    end "<";
+ 
+    ----------
+    -- "<=" --
+    ----------
+ 
+    function "<=" (Left, Right : Time) return Boolean is
+    begin
+       return Long_Integer (Left) <= Long_Integer (Right);
+    end "<=";
+ 
+    ---------
+    -- ">" --
+    ---------
+ 
+    function ">" (Left, Right : Time) return Boolean is
+    begin
+       return Long_Integer (Left) > Long_Integer (Right);
+    end ">";
+ 
+    ----------
+    -- ">=" --
+    ----------
+ 
+    function ">=" (Left, Right : Time) return Boolean is
+    begin
+       return Long_Integer (Left) >= Long_Integer (Right);
+    end ">=";
+ 
+    -----------
+    -- Clock --
+    -----------
+ 
+    --  The Ada.Calendar.Clock function gets the time.
+    --  Note that on other targets a soft-link is used to get a different clock
+    --  depending whether tasking is used or not. On VMS this isn't needed
+    --  since all clock calls end up using SYS$GETTIM, so call the
+    --  OS_Primitives version for efficiency.
+ 
+    function Clock return Time is
+    begin
+       return Time (OSP.OS_Clock);
+    end Clock;
+ 
+    ---------
+    -- Day --
+    ---------
+ 
+    function Day (Date : Time) return Day_Number is
+       DY : Year_Number;
+       DM : Month_Number;
+       DD : Day_Number;
+       DS : Day_Duration;
+ 
+    begin
+       Split (Date, DY, DM, DD, DS);
+       return DD;
+    end Day;
+ 
+    -----------
+    -- Month --
+    -----------
+ 
+    function Month (Date : Time) return Month_Number is
+       DY : Year_Number;
+       DM : Month_Number;
+       DD : Day_Number;
+       DS : Day_Duration;
+ 
+    begin
+       Split (Date, DY, DM, DD, DS);
+       return DM;
+    end Month;
+ 
+    -------------
+    -- Seconds --
+    -------------
+ 
+    function Seconds (Date : Time) return Day_Duration is
+       DY : Year_Number;
+       DM : Month_Number;
+       DD : Day_Number;
+       DS : Day_Duration;
+ 
+    begin
+       Split (Date, DY, DM, DD, DS);
+       return DS;
+    end Seconds;
+ 
+    -----------
+    -- Split --
+    -----------
+ 
+    procedure Split
+      (Date    : Time;
+       Year    : out Year_Number;
+       Month   : out Month_Number;
+       Day     : out Day_Number;
+       Seconds : out Day_Duration)
+    is
+       procedure Numtim (
+         Status : out Unsigned_Longword;
+         Timbuf : out Unsigned_Word_Array;
+         Timadr : in  Time);
+ 
+       pragma Interface (External, Numtim);
+ 
+       pragma Import_Valued_Procedure (Numtim, "SYS$NUMTIM",
+         (Unsigned_Longword, Unsigned_Word_Array, Time),
+         (Value, Reference, Reference));
+ 
+       Status   : Unsigned_Longword;
+       Timbuf   : Unsigned_Word_Array (1 .. 7);
+ 
+       Subsecs   : constant Time := Date mod 10_000_000;
+       Date_Secs : constant Time := Date - Subsecs;
+ 
+    begin
+       Numtim (Status, Timbuf, Date_Secs);
+ 
+       if Status mod 2 /= 1
+         or else Timbuf (1) not in Ada_Year_Min .. Ada_Year_Max
+       then
+          raise Time_Error;
+       end if;
+ 
+       Seconds := Day_Duration (Timbuf (6)
+                    + 60 * (Timbuf (5) + 60 * Timbuf (4)))
+                    + Duration (Subsecs) / 10_000_000.0;
+ 
+       Day   := Integer (Timbuf (3));
+       Month := Integer (Timbuf (2));
+       Year  := Integer (Timbuf (1));
+    end Split;
+ 
+    -------------
+    -- Time_Of --
+    -------------
+ 
+    function Time_Of
+      (Year    : Year_Number;
+       Month   : Month_Number;
+       Day     : Day_Number;
+       Seconds : Day_Duration := 0.0)
+       return    Time
+    is
+ 
+       procedure Cvt_Vectim (
+         Status         : out Unsigned_Longword;
+         Input_Time     : in  Unsigned_Word_Array;
+         Resultant_Time : out Time);
+ 
+       pragma Interface (External, Cvt_Vectim);
+ 
+       pragma Import_Valued_Procedure (Cvt_Vectim, "LIB$CVT_VECTIM",
+         (Unsigned_Longword, Unsigned_Word_Array, Time),
+         (Value, Reference, Reference));
+ 
+       Status      : Unsigned_Longword;
+       Timbuf      : Unsigned_Word_Array (1 .. 7);
+       Date        : Time;
+       Int_Secs    : Integer;
+       Day_Hack    : Boolean := False;
+       Subsecs     : Day_Duration;
+ 
+    begin
+       --  The following checks are redundant with respect to the constraint
+       --  error checks that should normally be made on parameters, but we
+       --  decide to raise Constraint_Error in any case if bad values come
+       --  in (as a result of checks being off in the caller, or for other
+       --  erroneous or bounded error cases).
+ 
+       if        not Year   'Valid
+         or else not Month  'Valid
+         or else not Day    'Valid
+         or else not Seconds'Valid
+       then
+          raise Constraint_Error;
+       end if;
+ 
+       --  Truncate seconds value by subtracting 0.5 and rounding,
+       --  but be careful with 0.0 since that will give -1.0 unless
+       --  it is treated specially.
+ 
+       if Seconds > 0.0 then
+          Int_Secs := Integer (Seconds - 0.5);
+       else
+          Int_Secs := Integer (Seconds);
+       end if;
+ 
+       Subsecs := Seconds - Day_Duration (Int_Secs);
+ 
+       --  Cvt_Vectim barfs on the largest Day_Duration, so trick it by
+       --  setting it to zero and then adding the difference after conversion.
+ 
+       if Int_Secs = 86_400 then
+          Int_Secs := 0;
+          Day_Hack := True;
+       end if;
+ 
+       Timbuf (7) := 0;
+       Timbuf (6) := Unsigned_Word (Int_Secs mod 60);
+       Timbuf (5) := Unsigned_Word ((Int_Secs / 60) mod 60);
+       Timbuf (4) := Unsigned_Word (Int_Secs / 3600);
+       Timbuf (3) := Unsigned_Word (Day);
+       Timbuf (2) := Unsigned_Word (Month);
+       Timbuf (1) := Unsigned_Word (Year);
+ 
+       Cvt_Vectim (Status, Timbuf, Date);
+ 
+       if Status mod 2 /= 1 then
+          raise Time_Error;
+       end if;
+ 
+       if Day_Hack then
+          Date := Date + 10_000_000 * 86_400;
+       end if;
+ 
+       Date := Date + Time (10_000_000.0 * Subsecs);
+       return Date;
+    end Time_Of;
+ 
+    ----------
+    -- Year --
+    ----------
+ 
+    function Year (Date : Time) return Year_Number is
+       DY : Year_Number;
+       DM : Month_Number;
+       DD : Day_Number;
+       DS : Day_Duration;
+ 
+    begin
+       Split (Date, DY, DM, DD, DS);
+       return DY;
+    end Year;
+ 
+ end Ada.Calendar;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-calend-vms.ads gcc-4.0.0/gcc/ada/a-calend-vms.ads
*** gcc-3.4.3/gcc/ada/a-calend-vms.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-calend-vms.ads	Fri May 14 10:01:59 2004
***************
*** 0 ****
--- 1,121 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --                         A D A . C A L E N D A R                          --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the Alpha/VMS version.
+ 
+ with System.OS_Primitives;
+ package Ada.Calendar is
+ 
+    package OSP renames System.OS_Primitives;
+ 
+    type Time is private;
+ 
+    --  Declarations representing limits of allowed local time values. Note that
+    --  these do NOT constrain the possible stored values of time which may well
+    --  permit a larger range of times (this is explicitly allowed in Ada 95).
+ 
+    subtype Year_Number  is Integer range 1901 .. 2099;
+    subtype Month_Number is Integer range 1 .. 12;
+    subtype Day_Number   is Integer range 1 .. 31;
+ 
+    subtype Day_Duration is Duration range 0.0 .. 86_400.0;
+ 
+    function Clock return Time;
+ 
+    function Year    (Date : Time) return Year_Number;
+    function Month   (Date : Time) return Month_Number;
+    function Day     (Date : Time) return Day_Number;
+    function Seconds (Date : Time) return Day_Duration;
+ 
+    procedure Split
+      (Date    : Time;
+       Year    : out Year_Number;
+       Month   : out Month_Number;
+       Day     : out Day_Number;
+       Seconds : out Day_Duration);
+ 
+    function Time_Of
+      (Year    : Year_Number;
+       Month   : Month_Number;
+       Day     : Day_Number;
+       Seconds : Day_Duration := 0.0)
+       return    Time;
+ 
+    function "+" (Left : Time;     Right : Duration) return Time;
+    function "+" (Left : Duration; Right : Time)     return Time;
+    function "-" (Left : Time;     Right : Duration) return Time;
+    function "-" (Left : Time;     Right : Time)     return Duration;
+ 
+    function "<"  (Left, Right : Time) return Boolean;
+    function "<=" (Left, Right : Time) return Boolean;
+    function ">"  (Left, Right : Time) return Boolean;
+    function ">=" (Left, Right : Time) return Boolean;
+ 
+    Time_Error : exception;
+ 
+ private
+ 
+    pragma Inline (Clock);
+ 
+    pragma Inline (Year);
+    pragma Inline (Month);
+    pragma Inline (Day);
+ 
+    pragma Inline ("+");
+    pragma Inline ("-");
+ 
+    pragma Inline ("<");
+    pragma Inline ("<=");
+    pragma Inline (">");
+    pragma Inline (">=");
+ 
+    --  Time is represented as the number of 100-nanosecond (ns) units offset
+    --  from the system base date and time, which is 00:00 o'clock,
+    --  November 17, 1858 (the Smithsonian base date and time for the
+    --  astronomic calendar).
+ 
+    --  The time value stored is typically a GMT value, as provided in standard
+    --  Unix environments. If this is the case then Split and Time_Of perform
+    --  required conversions to and from local times.
+ 
+    type Time is new OSP.OS_Time;
+ 
+    --  Notwithstanding this definition, Time is not quite the same as OS_Time.
+    --  Relative Time is positive, whereas relative OS_Time is negative,
+    --  but this declaration makes for easier conversion.
+ 
+ end Ada.Calendar;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-calend.adb gcc-4.0.0/gcc/ada/a-calend.adb
*** gcc-3.4.3/gcc/ada/a-calend.adb	Thu Apr 24 17:53:52 2003
--- gcc-4.0.0/gcc/ada/a-calend.adb	Mon Sep 13 10:18:38 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2001 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Ada.Calendar is
*** 89,102 ****
     --  TM.all cannot be represented.
  
     --  The following constants are used in adjusting Ada dates so that they
!    --  fit into the range that can be handled by Unix (1970 - 2038). The trick
!    --  is that the number of days in any four year period in the Ada range of
!    --  years (1901 - 2099) has a constant number of days. This is because we
!    --  have the special case of 2000 which, contrary to the normal exception
!    --  for centuries, is a leap year after all.
  
     Unix_Year_Min : constant := 1970;
!    Unix_Year_Max : constant := 2038;
  
     Ada_Year_Min : constant := 1901;
     Ada_Year_Max : constant := 2099;
--- 89,108 ----
     --  TM.all cannot be represented.
  
     --  The following constants are used in adjusting Ada dates so that they
!    --  fit into a 56 year range that can be handled by Unix (1970 included -
!    --  2026 excluded). Dates that are not in this 56 year range are shifted
!    --  by multiples of 56 years to fit in this range
!    --  The trick is that the number of days in any four year period in the Ada
!    --  range of years (1901 - 2099) has a constant number of days. This is
!    --  because we have the special case of 2000 which, contrary to the normal
!    --  exception for centuries, is a leap year after all.
!    --  56 has been chosen, because it is not only a multiple of 4, but also
!    --  a multiple of 7. Thus two dates 56 years apart fall on the same day of
!    --  the week, and the Daylight Saving Time change dates are usually the same
!    --  for these two years.
  
     Unix_Year_Min : constant := 1970;
!    Unix_Year_Max : constant := 2026;
  
     Ada_Year_Min : constant := 1901;
     Ada_Year_Max : constant := 2099;
*************** package body Ada.Calendar is
*** 106,114 ****
     Days_In_Month : constant array (Month_Number) of Day_Number :=
                       (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
  
!    Days_In_4_Years     : constant := 365 * 3 + 366;
!    Seconds_In_4_Years  : constant := 86_400 * Days_In_4_Years;
!    Seconds_In_4_YearsD : constant Duration := Duration (Seconds_In_4_Years);
  
     ---------
     -- "+" --
--- 112,121 ----
     Days_In_Month : constant array (Month_Number) of Day_Number :=
                       (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
  
!    Days_In_4_Years      : constant := 365 * 3 + 366;
!    Seconds_In_4_Years   : constant := 86_400 * Days_In_4_Years;
!    Seconds_In_56_Years  : constant := Seconds_In_4_Years * 14;
!    Seconds_In_56_YearsD : constant := Duration (Seconds_In_56_Years);
  
     ---------
     -- "+" --
*************** package body Ada.Calendar is
*** 270,284 ****
        LowD  : constant Duration := Duration (Low);
        HighD : constant Duration := Duration (High);
  
-       --  The following declare the maximum duration value that can be
-       --  successfully converted to a 32-bit integer suitable for passing
-       --  to the localtime_r function. Note that we cannot assume that the
-       --  localtime_r function expands to accept 64-bit input on a 64-bit
-       --  machine, but we can count on a 32-bit range on all machines.
- 
-       Max_Time  : constant := 2 ** 31 - 1;
-       Max_TimeD : constant Duration := Duration (Max_Time);
- 
        --  Finally the actual variables used in the computation
  
        D                : Duration;
--- 277,282 ----
*************** package body Ada.Calendar is
*** 309,329 ****
        --  EPOCH through EPOCH + N seconds). N is in practice 2 ** 31 - 1.
  
        --  If we have a value outside this range, then we first adjust it
!       --  to be in the required range by adding multiples of four years.
        --  For the range we are interested in, the number of days in any
!       --  consecutive four year period is constant. Then we do the split
        --  on the adjusted value, and readjust the years value accordingly.
  
        Year_Val := 0;
  
        while D < 0.0 loop
!          D := D + Seconds_In_4_YearsD;
!          Year_Val := Year_Val - 4;
        end loop;
  
!       while D > Max_TimeD loop
!          D := D - Seconds_In_4_YearsD;
!          Year_Val := Year_Val + 4;
        end loop;
  
        --  Now we need to take the value D, which is now non-negative, and
--- 307,327 ----
        --  EPOCH through EPOCH + N seconds). N is in practice 2 ** 31 - 1.
  
        --  If we have a value outside this range, then we first adjust it
!       --  to be in the required range by adding multiples of 56 years.
        --  For the range we are interested in, the number of days in any
!       --  consecutive 56 year period is constant. Then we do the split
        --  on the adjusted value, and readjust the years value accordingly.
  
        Year_Val := 0;
  
        while D < 0.0 loop
!          D := D + Seconds_In_56_YearsD;
!          Year_Val := Year_Val - 56;
        end loop;
  
!       while D >= Seconds_In_56_YearsD loop
!          D := D - Seconds_In_56_YearsD;
!          Year_Val := Year_Val + 56;
        end loop;
  
        --  Now we need to take the value D, which is now non-negative, and
*************** package body Ada.Calendar is
*** 419,425 ****
        end if;
  
        --  Check for Day value too large (one might expect mktime to do this
!       --  check, as well as the basi checks we did with 'Valid, but it seems
        --  that at least on some systems, this built-in check is too weak).
  
        if Day > Days_In_Month (Month)
--- 417,423 ----
        end if;
  
        --  Check for Day value too large (one might expect mktime to do this
!       --  check, as well as the basic checks we did with 'Valid, but it seems
        --  that at least on some systems, this built-in check is too weak).
  
        if Day > Days_In_Month (Month)
*************** package body Ada.Calendar is
*** 435,452 ****
        TM_Val.tm_mon  := Month - 1;
  
        --  For the year, we have to adjust it to a year that Unix can handle.
!       --  We do this in four year steps, since the number of days in four
!       --  years is constant, so the timezone effect on the conversion from
!       --  local time to GMT is unaffected.
  
!       while Year_Val <= Unix_Year_Min loop
!          Year_Val := Year_Val + 4;
!          Duration_Adjust := Duration_Adjust - Seconds_In_4_YearsD;
        end loop;
  
        while Year_Val >= Unix_Year_Max loop
!          Year_Val := Year_Val - 4;
!          Duration_Adjust := Duration_Adjust + Seconds_In_4_YearsD;
        end loop;
  
        TM_Val.tm_year := Year_Val - 1900;
--- 433,451 ----
        TM_Val.tm_mon  := Month - 1;
  
        --  For the year, we have to adjust it to a year that Unix can handle.
!       --  We do this in 56 year steps, since the number of days in 56 years
!       --  is constant, so the timezone effect on the conversion from local
!       --  time to GMT is unaffected; also the DST change dates are usually
!       --  not modified.
  
!       while Year_Val < Unix_Year_Min loop
!          Year_Val := Year_Val + 56;
!          Duration_Adjust := Duration_Adjust - Seconds_In_56_YearsD;
        end loop;
  
        while Year_Val >= Unix_Year_Max loop
!          Year_Val := Year_Val - 56;
!          Duration_Adjust := Duration_Adjust + Seconds_In_56_YearsD;
        end loop;
  
        TM_Val.tm_year := Year_Val - 1900;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-calend.ads gcc-4.0.0/gcc/ada/a-calend.ads
*** gcc-3.4.3/gcc/ada/a-calend.ads	Thu Apr 24 17:53:52 2003
--- gcc-4.0.0/gcc/ada/a-calend.ads	Mon Jun  7 14:16:15 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-1997 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** package Ada.Calendar is
*** 67,74 ****
       (Year    : Year_Number;
        Month   : Month_Number;
        Day     : Day_Number;
!       Seconds : Day_Duration := 0.0)
!       return    Time;
  
     function "+" (Left : Time;     Right : Duration) return Time;
     function "+" (Left : Duration; Right : Time)     return Time;
--- 67,87 ----
       (Year    : Year_Number;
        Month   : Month_Number;
        Day     : Day_Number;
!       Seconds : Day_Duration := 0.0) return Time;
!    --  GNAT Note: Normally when procedure Split is called on a Time value
!    --  result of a call to function Time_Of, the out parameters of procedure
!    --  Split are identical to the in parameters of function Time_Of. However,
!    --  when a non-existent time of day is specified, the values for Seconds
!    --  may or may not be different. This may happen when Daylight Saving Time
!    --  (DST) is in effect, on the day when switching to DST, if Seconds
!    --  specifies a time of day in the hour that does not exist. For example,
!    --  in New York:
!    --
!    --    Time_Of (Year => 1998, Month => 4, Day => 5, Seconds => 10740.0)
!    --
!    --  will return a Time value T. If Split is called on T, the resulting
!    --  Seconds may be 14340.0 (3:59:00) instead of 10740.0 (2:59:00 being
!    --  a time that not exist).
  
     function "+" (Left : Time;     Right : Duration) return Time;
     function "+" (Left : Duration; Right : Time)     return Time;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-cdlili.adb gcc-4.0.0/gcc/ada/a-cdlili.adb
*** gcc-3.4.3/gcc/ada/a-cdlili.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-cdlili.adb	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,1282 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                    ADA.CONTAINERS.DOUBLY_LINKED_LISTS                    --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ 
+ with System;  use type System.Address;
+ with Ada.Unchecked_Deallocation;
+ 
+ package body Ada.Containers.Doubly_Linked_Lists is
+ 
+    procedure Free is
+      new Ada.Unchecked_Deallocation (Node_Type, Node_Access);
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    procedure Delete_Node
+      (Container : in out List;
+       Node      : in out Node_Access);
+ 
+    procedure Insert_Internal
+      (Container : in out List;
+       Before    : Node_Access;
+       New_Node  : Node_Access);
+ 
+    ---------
+    -- "=" --
+    ---------
+ 
+    function "=" (Left, Right : List) return Boolean is
+       L : Node_Access := Left.First;
+       R : Node_Access := Right.First;
+ 
+    begin
+       if Left'Address = Right'Address then
+          return True;
+       end if;
+ 
+       if Left.Length /= Right.Length then
+          return False;
+       end if;
+ 
+       for J in 1 .. Left.Length loop
+          if L.Element /= R.Element then
+             return False;
+          end if;
+ 
+          L := L.Next;
+          R := R.Next;
+       end loop;
+ 
+       return True;
+    end "=";
+ 
+    ------------
+    -- Adjust --
+    ------------
+ 
+    procedure Adjust (Container : in out List) is
+       Src    : Node_Access := Container.First;
+       Length : constant Count_Type := Container.Length;
+ 
+    begin
+       if Src = null then
+          pragma Assert (Container.Last = null);
+          pragma Assert (Length = 0);
+          return;
+       end if;
+ 
+       pragma Assert (Container.First.Prev = null);
+       pragma Assert (Container.Last.Next = null);
+       pragma Assert (Length > 0);
+ 
+       Container.First := null;
+       Container.Last := null;
+       Container.Length := 0;
+ 
+       Container.First := new Node_Type'(Src.Element, null, null);
+ 
+       Container.Last := Container.First;
+       loop
+          Container.Length := Container.Length + 1;
+          Src := Src.Next;
+          exit when Src = null;
+          Container.Last.Next := new Node_Type'(Element => Src.Element,
+                                                Prev    => Container.Last,
+                                                Next    => null);
+          Container.Last := Container.Last.Next;
+       end loop;
+ 
+       pragma Assert (Container.Length = Length);
+    end Adjust;
+ 
+    ------------
+    -- Append --
+    ------------
+ 
+    procedure Append
+      (Container : in out List;
+       New_Item  : Element_Type;
+       Count     : Count_Type := 1)
+    is
+    begin
+       Insert (Container, No_Element, New_Item, Count);
+    end Append;
+ 
+    -----------
+    -- Clear --
+    -----------
+ 
+    procedure Clear (Container : in out List) is
+    begin
+       Delete_Last (Container, Count => Container.Length);
+    end Clear;
+ 
+    --------------
+    -- Continue --
+    --------------
+ 
+    function Contains
+      (Container : List;
+       Item      : Element_Type) return Boolean
+    is
+    begin
+       return Find (Container, Item) /= No_Element;
+    end Contains;
+ 
+    ------------
+    -- Delete --
+    ------------
+ 
+    procedure Delete
+      (Container : in out List;
+       Position  : in out Cursor;
+       Count     : Count_Type := 1)
+    is
+    begin
+       if Position = No_Element then
+          return;
+       end if;
+ 
+       if Position.Container /= List_Access'(Container'Unchecked_Access) then
+          raise Program_Error;
+       end if;
+ 
+       for Index in 1 .. Count loop
+          Delete_Node (Container, Position.Node);
+ 
+          if Position.Node = null then
+             Position.Container := null;
+             return;
+          end if;
+       end loop;
+    end Delete;
+ 
+    ------------------
+    -- Delete_First --
+    ------------------
+ 
+    procedure Delete_First
+      (Container : in out List;
+       Count     : Count_Type := 1)
+    is
+       Node : Node_Access := Container.First;
+    begin
+       for J in 1 .. Count_Type'Min (Count, Container.Length) loop
+          Delete_Node (Container, Node);
+       end loop;
+    end Delete_First;
+ 
+    -----------------
+    -- Delete_Last --
+    -----------------
+ 
+    procedure Delete_Last
+      (Container : in out List;
+       Count     : Count_Type := 1)
+    is
+       Node : Node_Access;
+    begin
+       for J in 1 .. Count_Type'Min (Count, Container.Length) loop
+          Node := Container.Last;
+          Delete_Node (Container, Node);
+       end loop;
+    end Delete_Last;
+ 
+    -----------------
+    -- Delete_Node --
+    -----------------
+ 
+    procedure Delete_Node
+      (Container : in out List;
+       Node      : in out Node_Access)
+    is
+       X : Node_Access := Node;
+ 
+    begin
+       Node := X.Next;
+       Container.Length := Container.Length - 1;
+ 
+       if X = Container.First then
+          Container.First := X.Next;
+ 
+          if X = Container.Last then
+             pragma Assert (Container.First = null);
+             pragma Assert (Container.Length = 0);
+             Container.Last := null;
+          else
+             pragma Assert (Container.Length > 0);
+             Container.First.Prev := null;
+          end if;
+ 
+       elsif X = Container.Last then
+          pragma Assert (Container.Length > 0);
+ 
+          Container.Last := X.Prev;
+          Container.Last.Next := null;
+ 
+       else
+          pragma Assert (Container.Length > 0);
+ 
+          X.Next.Prev := X.Prev;
+          X.Prev.Next := X.Next;
+       end if;
+ 
+       Free (X);
+    end Delete_Node;
+ 
+    -------------
+    -- Element --
+    -------------
+ 
+    function Element (Position : Cursor) return Element_Type is
+    begin
+       return Position.Node.Element;
+    end Element;
+ 
+    ----------
+    -- Find --
+    ----------
+ 
+    function Find
+      (Container : List;
+       Item      : Element_Type;
+       Position  : Cursor := No_Element) return Cursor
+    is
+       Node : Node_Access := Position.Node;
+ 
+    begin
+       if Node = null then
+          Node := Container.First;
+       elsif Position.Container /= List_Access'(Container'Unchecked_Access) then
+          raise Program_Error;
+       end if;
+ 
+       while Node /= null loop
+          if Node.Element = Item then
+             return Cursor'(Container'Unchecked_Access, Node);
+          end if;
+ 
+          Node := Node.Next;
+       end loop;
+ 
+       return No_Element;
+    end Find;
+ 
+    -----------
+    -- First --
+    -----------
+ 
+    function First (Container : List) return Cursor is
+    begin
+       if Container.First = null then
+          return No_Element;
+       end if;
+ 
+       return Cursor'(Container'Unchecked_Access, Container.First);
+    end First;
+ 
+    -------------------
+    -- First_Element --
+    -------------------
+ 
+    function First_Element (Container : List) return Element_Type is
+    begin
+       return Container.First.Element;
+    end First_Element;
+ 
+    -------------------
+    -- Generic_Merge --
+    -------------------
+ 
+    procedure Generic_Merge
+      (Target : in out List;
+       Source : in out List)
+    is
+       LI : Cursor := First (Target);
+       RI : Cursor := First (Source);
+ 
+    begin
+       if Target'Address = Source'Address then
+          return;
+       end if;
+ 
+       while RI.Node /= null loop
+          if LI.Node = null then
+             Splice (Target, No_Element, Source);
+             return;
+          end if;
+ 
+          if RI.Node.Element < LI.Node.Element then
+             declare
+                RJ : constant Cursor := RI;
+             begin
+                RI.Node := RI.Node.Next;
+                Splice (Target, LI, Source, RJ);
+             end;
+ 
+          else
+             LI.Node := LI.Node.Next;
+          end if;
+       end loop;
+    end Generic_Merge;
+ 
+    ------------------
+    -- Generic_Sort --
+    ------------------
+ 
+    procedure Generic_Sort (Container : in out List) is
+ 
+       procedure Partition
+         (Pivot : in Node_Access;
+          Back  : in Node_Access);
+ 
+       procedure Sort (Front, Back : Node_Access);
+ 
+       ---------------
+       -- Partition --
+       ---------------
+ 
+       procedure Partition
+         (Pivot : Node_Access;
+          Back  : Node_Access)
+       is
+          Node : Node_Access := Pivot.Next;
+ 
+       begin
+          while Node /= Back loop
+             if Node.Element < Pivot.Element then
+                declare
+                   Prev : constant Node_Access := Node.Prev;
+                   Next : constant Node_Access := Node.Next;
+ 
+                begin
+                   Prev.Next := Next;
+ 
+                   if Next = null then
+                      Container.Last := Prev;
+                   else
+                      Next.Prev := Prev;
+                   end if;
+ 
+                   Node.Next := Pivot;
+                   Node.Prev := Pivot.Prev;
+ 
+                   Pivot.Prev := Node;
+ 
+                   if Node.Prev = null then
+                      Container.First := Node;
+                   else
+                      Node.Prev.Next := Node;
+                   end if;
+ 
+                   Node := Next;
+                end;
+ 
+             else
+                Node := Node.Next;
+             end if;
+          end loop;
+       end Partition;
+ 
+       ----------
+       -- Sort --
+       ----------
+ 
+       procedure Sort (Front, Back : Node_Access) is
+          Pivot : Node_Access;
+ 
+       begin
+          if Front = null then
+             Pivot := Container.First;
+          else
+             Pivot := Front.Next;
+          end if;
+ 
+          if Pivot /= Back then
+             Partition (Pivot, Back);
+             Sort (Front, Pivot);
+             Sort (Pivot, Back);
+          end if;
+       end Sort;
+ 
+    --  Start of processing for Generic_Sort
+ 
+    begin
+       Sort (Front => null, Back => null);
+ 
+       pragma Assert (Container.Length = 0
+                        or else
+                          (Container.First.Prev = null
+                             and then Container.Last.Next = null));
+    end Generic_Sort;
+ 
+    -----------------
+    -- Has_Element --
+    -----------------
+ 
+    function Has_Element (Position : Cursor) return Boolean is
+    begin
+       return Position.Container /= null and then Position.Node /= null;
+    end Has_Element;
+ 
+    ------------
+    -- Insert --
+    ------------
+ 
+    procedure Insert
+      (Container : in out List;
+       Before    : Cursor;
+       New_Item  : Element_Type;
+       Position  : out Cursor;
+       Count     : Count_Type := 1)
+    is
+       New_Node : Node_Access;
+ 
+    begin
+       if Before.Container /= null
+         and then Before.Container /= List_Access'(Container'Unchecked_Access)
+       then
+          raise Program_Error;
+       end if;
+ 
+       if Count = 0 then
+          Position := Before;
+          return;
+       end if;
+ 
+       New_Node := new Node_Type'(New_Item, null, null);
+       Insert_Internal (Container, Before.Node, New_Node);
+ 
+       Position := Cursor'(Before.Container, New_Node);
+ 
+       for J in Count_Type'(2) .. Count loop
+          New_Node := new Node_Type'(New_Item, null, null);
+          Insert_Internal (Container, Before.Node, New_Node);
+       end loop;
+    end Insert;
+ 
+    procedure Insert
+      (Container : in out List;
+       Before    : Cursor;
+       New_Item  : Element_Type;
+       Count     : Count_Type := 1)
+    is
+       Position : Cursor;
+    begin
+       Insert (Container, Before, New_Item, Position, Count);
+    end Insert;
+ 
+    procedure Insert
+      (Container : in out List;
+       Before    : Cursor;
+       Position  : out Cursor;
+       Count     : Count_Type := 1)
+    is
+       New_Node : Node_Access;
+ 
+    begin
+       if Before.Container /= null
+         and then Before.Container /= List_Access'(Container'Unchecked_Access)
+       then
+          raise Program_Error;
+       end if;
+ 
+       if Count = 0 then
+          Position := Before;
+          return;
+       end if;
+ 
+       New_Node := new Node_Type;
+       Insert_Internal (Container, Before.Node, New_Node);
+ 
+       Position := Cursor'(Before.Container, New_Node);
+ 
+       for J in Count_Type'(2) .. Count loop
+          New_Node := new Node_Type;
+          Insert_Internal (Container, Before.Node, New_Node);
+       end loop;
+    end Insert;
+ 
+    ---------------------
+    -- Insert_Internal --
+    ---------------------
+ 
+    procedure Insert_Internal
+      (Container : in out List;
+       Before    : Node_Access;
+       New_Node  : Node_Access)
+    is
+    begin
+       if Container.Length = 0 then
+          pragma Assert (Before = null);
+          pragma Assert (Container.First = null);
+          pragma Assert (Container.Last = null);
+ 
+          Container.First := New_Node;
+          Container.Last := New_Node;
+ 
+       elsif Before = null then
+          pragma Assert (Container.Last.Next = null);
+ 
+          Container.Last.Next := New_Node;
+          New_Node.Prev := Container.Last;
+ 
+          Container.Last := New_Node;
+ 
+       elsif Before = Container.First then
+          pragma Assert (Container.First.Prev = null);
+ 
+          Container.First.Prev := New_Node;
+          New_Node.Next := Container.First;
+ 
+          Container.First := New_Node;
+ 
+       else
+          pragma Assert (Container.First.Prev = null);
+          pragma Assert (Container.Last.Next = null);
+ 
+          New_Node.Next := Before;
+          New_Node.Prev := Before.Prev;
+ 
+          Before.Prev.Next := New_Node;
+          Before.Prev := New_Node;
+       end if;
+ 
+       Container.Length := Container.Length + 1;
+    end Insert_Internal;
+ 
+    --------------
+    -- Is_Empty --
+    --------------
+ 
+    function Is_Empty (Container : List) return Boolean is
+    begin
+       return Container.Length = 0;
+    end Is_Empty;
+ 
+    -------------
+    -- Iterate --
+    -------------
+ 
+    procedure Iterate
+      (Container : List;
+       Process   : not null access procedure (Position : Cursor))
+    is
+       Node : Node_Access := Container.First;
+    begin
+       while Node /= null loop
+          Process (Cursor'(Container'Unchecked_Access, Node));
+          Node := Node.Next;
+       end loop;
+    end Iterate;
+ 
+    ----------
+    -- Last --
+    ----------
+ 
+    function Last (Container : List) return Cursor is
+    begin
+       if Container.Last = null then
+          return No_Element;
+       end if;
+ 
+       return Cursor'(Container'Unchecked_Access, Container.Last);
+    end Last;
+ 
+    ------------------
+    -- Last_Element --
+    ------------------
+ 
+    function Last_Element (Container : List) return Element_Type is
+    begin
+       return Container.Last.Element;
+    end Last_Element;
+ 
+    ------------
+    -- Length --
+    ------------
+ 
+    function Length (Container : List) return Count_Type is
+    begin
+       return Container.Length;
+    end Length;
+ 
+    ----------
+    -- Move --
+    ----------
+ 
+    procedure Move
+      (Target : in out List;
+       Source : in out List)
+    is
+    begin
+       if Target'Address = Source'Address then
+          return;
+       end if;
+ 
+       if Target.Length > 0 then
+          raise Constraint_Error;
+       end if;
+ 
+       Target.First := Source.First;
+       Source.First := null;
+ 
+       Target.Last := Source.Last;
+       Source.Last := null;
+ 
+       Target.Length := Source.Length;
+       Source.Length := 0;
+    end Move;
+ 
+    ----------
+    -- Next --
+    ----------
+ 
+    procedure Next (Position : in out Cursor) is
+    begin
+       if Position.Node = null then
+          return;
+       end if;
+ 
+       Position.Node := Position.Node.Next;
+ 
+       if Position.Node = null then
+          Position.Container := null;
+       end if;
+    end Next;
+ 
+    function Next (Position : Cursor) return Cursor is
+    begin
+       if Position.Node = null then
+          return No_Element;
+       end if;
+ 
+       declare
+          Next_Node : constant Node_Access := Position.Node.Next;
+       begin
+          if Next_Node = null then
+             return No_Element;
+          end if;
+ 
+          return Cursor'(Position.Container, Next_Node);
+       end;
+    end Next;
+ 
+    -------------
+    -- Prepend --
+    -------------
+ 
+    procedure Prepend
+      (Container : in out List;
+       New_Item  : Element_Type;
+       Count     : Count_Type := 1)
+    is
+    begin
+       Insert (Container, First (Container), New_Item, Count);
+    end Prepend;
+ 
+    --------------
+    -- Previous --
+    --------------
+ 
+    procedure Previous (Position : in out Cursor) is
+    begin
+       if Position.Node = null then
+          return;
+       end if;
+ 
+       Position.Node := Position.Node.Prev;
+ 
+       if Position.Node = null then
+          Position.Container := null;
+       end if;
+    end Previous;
+ 
+    function Previous (Position : Cursor) return Cursor is
+    begin
+       if Position.Node = null then
+          return No_Element;
+       end if;
+ 
+       declare
+          Prev_Node : constant Node_Access := Position.Node.Prev;
+       begin
+          if Prev_Node = null then
+             return No_Element;
+          end if;
+ 
+          return Cursor'(Position.Container, Prev_Node);
+       end;
+    end Previous;
+ 
+    -------------------
+    -- Query_Element --
+    -------------------
+ 
+    procedure Query_Element
+      (Position : Cursor;
+       Process  : not null access procedure (Element : in Element_Type))
+    is
+    begin
+       Process (Position.Node.Element);
+    end Query_Element;
+ 
+    ----------
+    -- Read --
+    ----------
+ 
+    procedure Read
+      (Stream : access Root_Stream_Type'Class;
+       Item   : out List)
+    is
+       N : Count_Type'Base;
+       X : Node_Access;
+ 
+    begin
+       Clear (Item);  --  ???
+       Count_Type'Base'Read (Stream, N);
+ 
+       if N = 0 then
+          return;
+       end if;
+ 
+       X := new Node_Type;
+ 
+       begin
+          Element_Type'Read (Stream, X.Element);
+       exception
+          when others =>
+             Free (X);
+             raise;
+       end;
+ 
+       Item.First := X;
+       Item.Last := X;
+ 
+       loop
+          Item.Length := Item.Length + 1;
+          exit when Item.Length = N;
+ 
+          X := new Node_Type;
+ 
+          begin
+             Element_Type'Read (Stream, X.Element);
+          exception
+             when others =>
+                Free (X);
+                raise;
+          end;
+ 
+          X.Prev := Item.Last;
+          Item.Last.Next := X;
+          Item.Last := X;
+       end loop;
+    end Read;
+ 
+    ---------------------
+    -- Replace_Element --
+    ---------------------
+ 
+    procedure Replace_Element
+      (Position : Cursor;
+       By       : Element_Type)
+    is
+    begin
+       Position.Node.Element := By;
+    end Replace_Element;
+ 
+    ------------------
+    -- Reverse_Find --
+    ------------------
+ 
+    function Reverse_Find
+      (Container : List;
+       Item      : Element_Type;
+       Position  : Cursor := No_Element) return Cursor
+    is
+       Node : Node_Access := Position.Node;
+ 
+    begin
+       if Node = null then
+          Node := Container.Last;
+       elsif Position.Container /= List_Access'(Container'Unchecked_Access) then
+          raise Program_Error;
+       end if;
+ 
+       while Node /= null loop
+          if Node.Element = Item then
+             return Cursor'(Container'Unchecked_Access, Node);
+          end if;
+ 
+          Node := Node.Prev;
+       end loop;
+ 
+       return No_Element;
+    end Reverse_Find;
+ 
+    ---------------------
+    -- Reverse_Iterate --
+    ---------------------
+ 
+    procedure Reverse_Iterate
+      (Container : List;
+       Process   : not null access procedure (Position : Cursor))
+    is
+       Node : Node_Access := Container.Last;
+    begin
+       while Node /= null loop
+          Process (Cursor'(Container'Unchecked_Access, Node));
+          Node := Node.Prev;
+       end loop;
+    end Reverse_Iterate;
+ 
+    ------------------
+    -- Reverse_List --
+    ------------------
+ 
+    procedure Reverse_List (Container : in out List) is
+       I : Node_Access := Container.First;
+       J : Node_Access := Container.Last;
+ 
+       procedure Swap (L, R : Node_Access);
+ 
+       ----------
+       -- Swap --
+       ----------
+ 
+       procedure Swap (L, R : Node_Access) is
+          LN : constant Node_Access := L.Next;
+          LP : constant Node_Access := L.Prev;
+ 
+          RN : constant Node_Access := R.Next;
+          RP : constant Node_Access := R.Prev;
+ 
+       begin
+          if LP /= null then
+             LP.Next := R;
+          end if;
+ 
+          if RN /= null then
+             RN.Prev := L;
+          end if;
+ 
+          L.Next := RN;
+          R.Prev := LP;
+ 
+          if LN = R then
+             pragma Assert (RP = L);
+ 
+             L.Prev := R;
+             R.Next := L;
+ 
+          else
+             L.Prev := RP;
+             RP.Next := L;
+ 
+             R.Next := LN;
+             LN.Prev := R;
+          end if;
+       end Swap;
+ 
+    --  Start of processing for Reverse_List
+ 
+    begin
+       if Container.Length <= 1 then
+          return;
+       end if;
+ 
+       Container.First := J;
+       Container.Last := I;
+       loop
+          Swap (L => I, R => J);
+ 
+          J := J.Next;
+          exit when I = J;
+ 
+          I := I.Prev;
+          exit when I = J;
+ 
+          Swap (L => J, R => I);
+ 
+          I := I.Next;
+          exit when I = J;
+ 
+          J := J.Prev;
+          exit when I = J;
+       end loop;
+ 
+       pragma Assert (Container.First.Prev = null);
+       pragma Assert (Container.Last.Next = null);
+    end Reverse_List;
+ 
+    ------------
+    -- Splice --
+    ------------
+ 
+    procedure Splice
+      (Target : in out List;
+       Before : Cursor;
+       Source : in out List)
+    is
+    begin
+       if Before.Container /= null
+         and then Before.Container /= List_Access'(Target'Unchecked_Access)
+       then
+          raise Program_Error;
+       end if;
+ 
+       if Target'Address = Source'Address
+         or else Source.Length = 0
+       then
+          return;
+       end if;
+ 
+       if Target.Length = 0 then
+          pragma Assert (Before = No_Element);
+ 
+          Target.First := Source.First;
+          Target.Last := Source.Last;
+ 
+       elsif Before.Node = null then
+          pragma Assert (Target.Last.Next = null);
+ 
+          Target.Last.Next := Source.First;
+          Source.First.Prev := Target.Last;
+ 
+          Target.Last := Source.Last;
+ 
+       elsif Before.Node = Target.First then
+          pragma Assert (Target.First.Prev = null);
+ 
+          Source.Last.Next := Target.First;
+          Target.First.Prev := Source.Last;
+ 
+          Target.First := Source.First;
+ 
+       else
+          Before.Node.Prev.Next := Source.First;
+          Source.First.Prev := Before.Node.Prev;
+ 
+          Before.Node.Prev := Source.Last;
+          Source.Last.Next := Before.Node;
+       end if;
+ 
+       Source.First := null;
+       Source.Last := null;
+ 
+       Target.Length := Target.Length + Source.Length;
+       Source.Length := 0;
+    end Splice;
+ 
+    procedure Splice
+      (Target   : in out List;
+       Before   : Cursor;
+       Position : Cursor)
+    is
+       X : Node_Access := Position.Node;
+ 
+    begin
+       if Before.Container /= null
+         and then Before.Container /= List_Access'(Target'Unchecked_Access)
+       then
+          raise Program_Error;
+       end if;
+ 
+       if Position.Container /= null
+         and then Position.Container /= List_Access'(Target'Unchecked_Access)
+       then
+          raise Program_Error;
+       end if;
+ 
+       if X = null
+         or else X = Before.Node
+         or else X.Next = Before.Node
+       then
+          return;
+       end if;
+ 
+       pragma Assert (Target.Length > 0);
+ 
+       if Before.Node = null then
+          pragma Assert (X /= Target.Last);
+ 
+          if X = Target.First then
+             Target.First := X.Next;
+             Target.First.Prev := null;
+          else
+             X.Prev.Next := X.Next;
+             X.Next.Prev := X.Prev;
+          end if;
+ 
+          Target.Last.Next := X;
+          X.Prev := Target.Last;
+ 
+          Target.Last := X;
+          Target.Last.Next := null;
+ 
+          return;
+       end if;
+ 
+       if Before.Node = Target.First then
+          pragma Assert (X /= Target.First);
+ 
+          if X = Target.Last then
+             Target.Last := X.Prev;
+             Target.Last.Next := null;
+          else
+             X.Prev.Next := X.Next;
+             X.Next.Prev := X.Prev;
+          end if;
+ 
+          Target.First.Prev := X;
+          X.Next := Target.First;
+ 
+          Target.First := X;
+          Target.First.Prev := null;
+ 
+          return;
+       end if;
+ 
+       if X = Target.First then
+          Target.First := X.Next;
+          Target.First.Prev := null;
+ 
+       elsif X = Target.Last then
+          Target.Last := X.Prev;
+          Target.Last.Next := null;
+ 
+       else
+          X.Prev.Next := X.Next;
+          X.Next.Prev := X.Prev;
+       end if;
+ 
+       Before.Node.Prev.Next := X;
+       X.Prev := Before.Node.Prev;
+ 
+       Before.Node.Prev := X;
+       X.Next := Before.Node;
+    end Splice;
+ 
+    procedure Splice
+      (Target   : in out List;
+       Before   : Cursor;
+       Source   : in out List;
+       Position : Cursor)
+    is
+       X : Node_Access := Position.Node;
+ 
+    begin
+       if Target'Address = Source'Address then
+          Splice (Target, Before, Position);
+          return;
+       end if;
+ 
+       if Before.Container /= null
+         and then Before.Container /= List_Access'(Target'Unchecked_Access)
+       then
+          raise Program_Error;
+       end if;
+ 
+       if Position.Container /= null
+         and then Position.Container /= List_Access'(Source'Unchecked_Access)
+       then
+          raise Program_Error;
+       end if;
+ 
+       if X = null then
+          return;
+       end if;
+ 
+       pragma Assert (Source.Length > 0);
+       pragma Assert (Source.First.Prev = null);
+       pragma Assert (Source.Last.Next = null);
+ 
+       if X = Source.First then
+          Source.First := X.Next;
+          Source.First.Prev := null;
+ 
+          if X = Source.Last then
+             pragma Assert (Source.First = null);
+             pragma Assert (Source.Length = 1);
+             Source.Last := null;
+          end if;
+ 
+       elsif X = Source.Last then
+          Source.Last := X.Prev;
+          Source.Last.Next := null;
+ 
+       else
+          X.Prev.Next := X.Next;
+          X.Next.Prev := X.Prev;
+       end if;
+ 
+       if Target.Length = 0 then
+          pragma Assert (Before = No_Element);
+          pragma Assert (Target.First = null);
+          pragma Assert (Target.Last = null);
+ 
+          Target.First := X;
+          Target.Last := X;
+ 
+       elsif Before.Node = null then
+          Target.Last.Next := X;
+          X.Next := Target.Last;
+ 
+          Target.Last := X;
+          Target.Last.Next := null;
+ 
+       elsif Before.Node = Target.First then
+          Target.First.Prev := X;
+          X.Next := Target.First;
+ 
+          Target.First := X;
+          Target.First.Prev := null;
+ 
+       else
+          Before.Node.Prev.Next := X;
+          X.Prev := Before.Node.Prev;
+ 
+          Before.Node.Prev := X;
+          X.Next := Before.Node;
+       end if;
+ 
+       Target.Length := Target.Length + 1;
+       Source.Length := Source.Length - 1;
+    end Splice;
+ 
+    ----------
+    -- Swap --
+    ----------
+ 
+    --  Is this defined when I and J designate elements in different containers,
+    --  or should it raise an exception (Program_Error)???
+ 
+    procedure Swap (I, J : in Cursor) is
+       EI : constant Element_Type := I.Node.Element;
+    begin
+       I.Node.Element := J.Node.Element;
+       J.Node.Element := EI;
+    end Swap;
+ 
+    ----------------
+    -- Swap_Links --
+    ----------------
+ 
+    procedure Swap_Links
+      (Container : in out List;
+       I, J      : Cursor)
+    is
+    begin
+       if I = No_Element
+         or else J = No_Element
+       then
+          raise Constraint_Error;
+       end if;
+ 
+       if I.Container /= List_Access'(Container'Unchecked_Access) then
+          raise Program_Error;
+       end if;
+ 
+       if J.Container /= I.Container then
+          raise Program_Error;
+       end if;
+ 
+       pragma Assert (Container.Length >= 1);
+ 
+       if I.Node = J.Node then
+          return;
+       end if;
+ 
+       pragma Assert (Container.Length >= 2);
+ 
+       declare
+          I_Next : constant Cursor := Next (I);
+ 
+       begin
+          if I_Next = J then
+             Splice (Container, Before => I, Position => J);
+ 
+          else
+             declare
+                J_Next : constant Cursor := Next (J);
+ 
+             begin
+                if J_Next = I then
+                   Splice (Container, Before => J, Position => I);
+ 
+                else
+                   pragma Assert (Container.Length >= 3);
+ 
+                   Splice (Container, Before => I_Next, Position => J);
+                   Splice (Container, Before => J_Next, Position => I);
+                end if;
+             end;
+          end if;
+       end;
+    end Swap_Links;
+ 
+    --------------------
+    -- Update_Element --
+    --------------------
+ 
+    procedure Update_Element
+      (Position : Cursor;
+       Process  : not null access procedure (Element : in out Element_Type)) is
+    begin
+       Process (Position.Node.Element);
+    end Update_Element;
+ 
+    -----------
+    -- Write --
+    -----------
+ 
+    procedure Write
+      (Stream : access Root_Stream_Type'Class;
+       Item   : List)
+    is
+       Node : Node_Access := Item.First;
+ 
+    begin
+       Count_Type'Base'Write (Stream, Item.Length);
+ 
+       while Node /= null loop
+          Element_Type'Write (Stream, Node.Element);
+          Node := Node.Next;
+       end loop;
+    end Write;
+ 
+ end Ada.Containers.Doubly_Linked_Lists;
+ 
diff -Nrcpad gcc-3.4.3/gcc/ada/a-cdlili.ads gcc-4.0.0/gcc/ada/a-cdlili.ads
*** gcc-3.4.3/gcc/ada/a-cdlili.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-cdlili.ads	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,252 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                    ADA.CONTAINERS.DOUBLY_LINKED_LISTS                    --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Finalization;
+ with Ada.Streams;
+ 
+ generic
+    type Element_Type is private;
+ 
+    with function "=" (Left, Right : Element_Type)
+       return Boolean is <>;
+ 
+ package Ada.Containers.Doubly_Linked_Lists is
+    pragma Preelaborate (Doubly_Linked_Lists);
+ 
+    type List is tagged private;
+ 
+    type Cursor is private;
+ 
+    Empty_List : constant List;
+ 
+    No_Element : constant Cursor;
+ 
+    function "=" (Left, Right : List) return Boolean;
+ 
+    function Length (Container : List) return Count_Type;
+ 
+    function Is_Empty (Container : List) return Boolean;
+ 
+    procedure Clear (Container : in out List);
+ 
+    function Element (Position : Cursor) return Element_Type;
+ 
+    procedure Query_Element
+      (Position : Cursor;
+       Process  : not null access procedure (Element : Element_Type));
+ 
+    procedure Update_Element
+      (Position : Cursor;
+       Process  : not null access procedure (Element : in out Element_Type));
+ 
+    procedure Replace_Element
+      (Position : Cursor;
+       By       : Element_Type);
+ 
+    procedure Move
+      (Target : in out List;
+       Source : in out List);
+ 
+    procedure Prepend
+      (Container : in out List;
+       New_Item  : Element_Type;
+       Count     : Count_Type := 1);
+ 
+    procedure Append
+      (Container : in out List;
+       New_Item  : Element_Type;
+       Count     : Count_Type := 1);
+ 
+    procedure Insert
+      (Container : in out List;
+       Before    : Cursor;
+       New_Item  : Element_Type;
+       Count     : Count_Type := 1);
+ 
+    procedure Insert
+      (Container : in out List;
+       Before    : Cursor;
+       New_Item  : Element_Type;
+       Position  : out Cursor;
+       Count     : Count_Type := 1);
+ 
+    procedure Insert
+      (Container : in out List;
+       Before    : Cursor;
+       Position  : out Cursor;
+       Count     : Count_Type := 1);
+ 
+    procedure Delete
+      (Container : in out List;
+       Position  : in out Cursor;
+       Count     : Count_Type := 1);
+ 
+    procedure Delete_First
+      (Container : in out List;
+       Count     : Count_Type := 1);
+ 
+    procedure Delete_Last
+      (Container : in out List;
+       Count     : Count_Type := 1);
+ 
+    generic
+       with function "<" (Left, Right : Element_Type)
+          return Boolean is <>;
+    procedure Generic_Sort (Container : in out List);
+ 
+    generic
+       with function "<" (Left, Right : Element_Type)
+          return Boolean is <>;
+    procedure Generic_Merge (Target : in out List; Source : in out List);
+ 
+    procedure Reverse_List (Container : in out List);
+ 
+    procedure Swap (I, J : in Cursor);
+ 
+    procedure Swap_Links
+      (Container : in out List;
+       I, J      : Cursor);
+ 
+    procedure Splice
+      (Target : in out List;
+       Before : Cursor;
+       Source : in out List);
+ 
+    procedure Splice
+      (Target   : in out List;
+       Before   : Cursor;
+       Position : Cursor);
+ 
+    procedure Splice
+      (Target   : in out List;
+       Before   : Cursor;
+       Source   : in out List;
+       Position : Cursor);
+ 
+    function First (Container : List) return Cursor;
+ 
+    function First_Element (Container : List) return Element_Type;
+ 
+    function Last (Container : List) return Cursor;
+ 
+    function Last_Element (Container : List) return Element_Type;
+ 
+    function Contains
+      (Container : List;
+       Item      : Element_Type) return Boolean;
+ 
+    function Find
+      (Container : List;
+       Item      : Element_Type;
+       Position  : Cursor := No_Element) return Cursor;
+ 
+    function Reverse_Find
+      (Container : List;
+       Item      : Element_Type;
+       Position  : Cursor := No_Element) return Cursor;
+ 
+    function Next (Position : Cursor) return Cursor;
+ 
+    function Previous (Position : Cursor) return Cursor;
+ 
+    procedure Next (Position : in out Cursor);
+ 
+    procedure Previous (Position : in out Cursor);
+ 
+    function Has_Element (Position : Cursor) return Boolean;
+ 
+    procedure Iterate
+      (Container : List;
+       Process   : not null access procedure (Position : Cursor));
+ 
+    procedure Reverse_Iterate
+      (Container : List;
+       Process   : not null access procedure (Position : Cursor));
+ 
+ private
+    type Node_Type;
+    type Node_Access is access Node_Type;
+ 
+    type Node_Type is
+       record
+          Element : Element_Type;
+          Next    : Node_Access;
+          Prev    : Node_Access;
+       end record;
+ 
+    function "=" (L, R : Node_Type) return Boolean is abstract;
+ 
+    use Ada.Finalization;
+ 
+    type List is
+      new Controlled with record
+         First  : Node_Access;
+         Last   : Node_Access;
+         Length : Count_Type := 0;
+      end record;
+ 
+    procedure Adjust (Container : in out List);
+ 
+    procedure Finalize (Container : in out List) renames Clear;
+ 
+    use Ada.Streams;
+ 
+    procedure Read
+      (Stream : access Root_Stream_Type'Class;
+       Item   : out List);
+ 
+    for List'Read use Read;
+ 
+    procedure Write
+      (Stream : access Root_Stream_Type'Class;
+       Item   : List);
+ 
+    for List'Write use Write;
+ 
+    Empty_List : constant List := List'(Controlled with null, null, 0);
+ 
+    type List_Access is access constant List;
+    for List_Access'Storage_Size use 0;
+ 
+    type Cursor is
+       record
+          Container : List_Access;
+          Node      : Node_Access;
+       end record;
+ 
+    No_Element : constant Cursor := Cursor'(null, null);
+ 
+ end Ada.Containers.Doubly_Linked_Lists;
+ 
diff -Nrcpad gcc-3.4.3/gcc/ada/a-cgaaso.adb gcc-4.0.0/gcc/ada/a-cgaaso.adb
*** gcc-3.4.3/gcc/ada/a-cgaaso.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-cgaaso.adb	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,125 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --               ADA.CONTAINERS.GENERIC_ANONYMOUS_ARRAY_SORT                --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ 
+ procedure Ada.Containers.Generic_Anonymous_Array_Sort
+   (First, Last : Index_Type'Base)
+ is
+    Pivot, Lo, Mid, Hi : Index_Type;
+ 
+ begin
+    if Last <= First then
+       return;
+    end if;
+ 
+    Lo := First;
+    Hi := Last;
+ 
+    if Last = Index_Type'Succ (First) then
+       if not Less (Lo, Hi) then
+          Swap (Lo, Hi);
+       end if;
+ 
+       return;
+    end if;
+ 
+    Mid := Index_Type'Val
+      (Index_Type'Pos (Lo) +
+       (Index_Type'Pos (Hi) - Index_Type'Pos (Lo)) / 2);
+ 
+    --  We need to figure out which case we have:
+    --  x < y < z
+    --  x < z < y
+    --  z < x < y
+    --  y < x < z
+    --  y < z < x
+    --  z < y < x
+ 
+    if Less (Lo, Mid) then
+       if Less (Lo, Hi) then
+          if Less (Mid, Hi) then
+             Swap (Lo, Mid);
+ 
+          else
+             Swap (Lo, Hi);
+ 
+          end if;
+ 
+       else
+          null;  --  lo is median
+       end if;
+ 
+    elsif Less (Lo, Hi) then
+       null; --  lo is median
+ 
+    elsif Less (Mid, Hi) then
+       Swap (Lo, Hi);
+ 
+    else
+       Swap (Lo, Mid);
+    end if;
+ 
+    Pivot := Lo;
+    Outer : loop
+       loop
+          exit Outer when not (Pivot < Hi);
+ 
+          if Less (Hi, Pivot) then
+             Swap (Hi, Pivot);
+             Pivot := Hi;
+             Lo := Index_Type'Succ (Lo);
+             exit;
+          else
+             Hi := Index_Type'Pred (Hi);
+          end if;
+       end loop;
+ 
+       loop
+          exit Outer when not (Lo < Pivot);
+ 
+          if Less (Lo, Pivot) then
+             Lo := Index_Type'Succ (Lo);
+          else
+             Swap (Lo, Pivot);
+             Pivot := Lo;
+             Hi := Index_Type'Pred (Hi);
+             exit;
+          end if;
+       end loop;
+    end loop Outer;
+ 
+    Generic_Anonymous_Array_Sort (First, Index_Type'Pred (Pivot));
+    Generic_Anonymous_Array_Sort (Index_Type'Succ (Pivot), Last);
+ 
+ end Ada.Containers.Generic_Anonymous_Array_Sort;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-cgaaso.ads gcc-4.0.0/gcc/ada/a-cgaaso.ads
*** gcc-3.4.3/gcc/ada/a-cgaaso.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-cgaaso.ads	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,44 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --               ADA.CONTAINERS.GENERIC_ANONYMOUS_ARRAY_SORT                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ 
+ generic
+    type Index_Type is (<>);
+    with function Less (Left, Right : Index_Type) return Boolean is <>;
+    with procedure Swap (Left, Right : Index_Type) is <>;
+ 
+ procedure Ada.Containers.Generic_Anonymous_Array_Sort
+   (First, Last : in Index_Type'Base);
+ 
+ pragma Pure (Ada.Containers.Generic_Anonymous_Array_Sort);
diff -Nrcpad gcc-3.4.3/gcc/ada/a-cgarso.adb gcc-4.0.0/gcc/ada/a-cgarso.adb
*** gcc-3.4.3/gcc/ada/a-cgarso.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-cgarso.adb	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,56 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                    ADA.CONTAINERS.GENERIC_ARRAY_SORT                     --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Containers.Generic_Constrained_Array_Sort;
+ 
+ procedure Ada.Containers.Generic_Array_Sort
+   (Container : in out Array_Type)
+ is
+    subtype Index_Subtype is
+      Index_Type range Container'First .. Container'Last;
+ 
+    subtype Array_Subtype is
+      Array_Type (Index_Subtype);
+ 
+    procedure Sort is
+       new Generic_Constrained_Array_Sort
+        (Index_Type   => Index_Subtype,
+         Element_Type => Element_Type,
+         Array_Type   => Array_Subtype,
+         "<"          => "<");
+ 
+ begin
+    Sort (Container);
+ end Ada.Containers.Generic_Array_Sort;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-cgarso.ads gcc-4.0.0/gcc/ada/a-cgarso.ads
*** gcc-3.4.3/gcc/ada/a-cgarso.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-cgarso.ads	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,28 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                    ADA.CONTAINERS.GENERIC_ARRAY_SORT                     --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ -- This specification is adapted from the Ada Reference Manual for use with --
+ -- GNAT.  In accordance with the copyright of that document, you can freely --
+ -- copy and modify this specification,  provided that if you redistribute a --
+ -- modified version,  any changes that you have made are clearly indicated. --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ generic
+    type Index_Type is (<>);
+    type Element_Type is private;
+    type Array_Type is array (Index_Type range <>) of Element_Type;
+ 
+    with function "<" (Left, Right : Element_Type)
+       return Boolean is <>;
+ 
+ procedure Ada.Containers.Generic_Array_Sort (Container : in out Array_Type);
+ 
+ pragma Pure (Ada.Containers.Generic_Array_Sort);
+ 
+ 
diff -Nrcpad gcc-3.4.3/gcc/ada/a-cgcaso.adb gcc-4.0.0/gcc/ada/a-cgcaso.adb
*** gcc-3.4.3/gcc/ada/a-cgcaso.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-cgcaso.adb	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,162 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --              ADA.CONTAINERS.GENERIC_CONSTRAINED_ARRAY_SORT               --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit has originally being developed by Matthew J Heaney.            --
+ ------------------------------------------------------------------------------
+ 
+ procedure Ada.Containers.Generic_Constrained_Array_Sort
+   (Container : in out Array_Type)
+ is
+    function Is_Less (I, J : Index_Type) return Boolean;
+    pragma Inline (Is_Less);
+ 
+    procedure Swap (I, J : Index_Type);
+    pragma Inline (Swap);
+ 
+    procedure Sort (First, Last : Index_Type'Base);
+ 
+    -------------
+    -- Is_Less --
+    -------------
+ 
+    function Is_Less (I, J : Index_Type) return Boolean is
+    begin
+       return Container (I) < Container (J);
+    end Is_Less;
+ 
+    ----------
+    -- Sort --
+    ----------
+ 
+    procedure Sort (First, Last : Index_Type'Base) is
+       Pivot, Lo, Mid, Hi : Index_Type;
+ 
+    begin
+       if Last <= First then
+          return;
+       end if;
+ 
+       Lo := First;
+       Hi := Last;
+ 
+       if Last = Index_Type'Succ (First) then
+          if not Is_Less (Lo, Hi) then
+             Swap (Lo, Hi);
+          end if;
+ 
+          return;
+       end if;
+ 
+       Mid := Index_Type'Val
+                (Index_Type'Pos (Lo) +
+                 (Index_Type'Pos (Hi) - Index_Type'Pos (Lo)) / 2);
+ 
+       --  We need to figure out which case we have:
+       --  x < y < z
+       --  x < z < y
+       --  z < x < y
+       --  y < x < z
+       --  y < z < x
+       --  z < y < x
+ 
+       if Is_Less (Lo, Mid) then
+          if Is_Less (Lo, Hi) then
+             if Is_Less (Mid, Hi) then
+                Swap (Lo, Mid);
+             else
+                Swap (Lo, Hi);
+             end if;
+ 
+          else
+             null;  --  lo is median
+          end if;
+ 
+       elsif Is_Less (Lo, Hi) then
+          null; --  lo is median
+ 
+       elsif Is_Less (Mid, Hi) then
+          Swap (Lo, Hi);
+ 
+       else
+          Swap (Lo, Mid);
+       end if;
+ 
+       Pivot := Lo;
+ 
+       Outer : loop
+          loop
+             exit Outer when not (Pivot < Hi);
+ 
+             if Is_Less (Hi, Pivot) then
+                Swap (Hi, Pivot);
+                Pivot := Hi;
+                Lo := Index_Type'Succ (Lo);
+                exit;
+             else
+                Hi := Index_Type'Pred (Hi);
+             end if;
+          end loop;
+ 
+          loop
+             exit Outer when not (Lo < Pivot);
+ 
+             if Is_Less (Lo, Pivot) then
+                Lo := Index_Type'Succ (Lo);
+             else
+                Swap (Lo, Pivot);
+                Pivot := Lo;
+                Hi := Index_Type'Pred (Hi);
+                exit;
+             end if;
+          end loop;
+       end loop Outer;
+ 
+       Sort (First, Index_Type'Pred (Pivot));
+       Sort (Index_Type'Succ (Pivot), Last);
+    end Sort;
+ 
+    ----------
+    -- Swap --
+    ----------
+ 
+    procedure Swap (I, J : Index_Type) is
+       EI : constant Element_Type := Container (I);
+    begin
+       Container (I) := Container (J);
+       Container (J) := EI;
+    end Swap;
+ 
+ --  Start of processing for Generic_Constrained_Array_Sort
+ 
+ begin
+    Sort (Container'First, Container'Last);
+ end Ada.Containers.Generic_Constrained_Array_Sort;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-cgcaso.ads gcc-4.0.0/gcc/ada/a-cgcaso.ads
*** gcc-3.4.3/gcc/ada/a-cgcaso.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-cgcaso.ads	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,27 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --              ADA.CONTAINERS.GENERIC_CONSTRAINED_ARRAY_SORT               --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ -- This specification is adapted from the Ada Reference Manual for use with --
+ -- GNAT.  In accordance with the copyright of that document, you can freely --
+ -- copy and modify this specification,  provided that if you redistribute a --
+ -- modified version,  any changes that you have made are clearly indicated. --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ generic
+    type Index_Type is (<>);
+    type Element_Type is private;
+    type Array_Type is array (Index_Type) of Element_Type;
+ 
+    with function "<" (Left, Right : Element_Type)
+      return Boolean is <>;
+ 
+ procedure Ada.Containers.Generic_Constrained_Array_Sort
+   (Container : in out Array_Type);
+ 
+ pragma Pure (Ada.Containers.Generic_Constrained_Array_Sort);
diff -Nrcpad gcc-3.4.3/gcc/ada/a-chahan.adb gcc-4.0.0/gcc/ada/a-chahan.adb
*** gcc-3.4.3/gcc/ada/a-chahan.adb	Thu Apr 24 17:53:52 2003
--- gcc-4.0.0/gcc/ada/a-chahan.adb	Thu Feb 10 13:50:14 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2001 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Ada.Characters.Handling is
*** 281,287 ****
     -- Is_Alphanumeric --
     ---------------------
  
!    function Is_Alphanumeric (Item : in Character) return Boolean is
     begin
        return (Char_Map (Item) and Alphanum) /= 0;
     end Is_Alphanumeric;
--- 281,287 ----
     -- Is_Alphanumeric --
     ---------------------
  
!    function Is_Alphanumeric (Item : Character) return Boolean is
     begin
        return (Char_Map (Item) and Alphanum) /= 0;
     end Is_Alphanumeric;
*************** package body Ada.Characters.Handling is
*** 290,296 ****
     -- Is_Basic --
     --------------
  
!    function Is_Basic (Item : in Character) return Boolean is
     begin
        return (Char_Map (Item) and Basic) /= 0;
     end Is_Basic;
--- 290,296 ----
     -- Is_Basic --
     --------------
  
!    function Is_Basic (Item : Character) return Boolean is
     begin
        return (Char_Map (Item) and Basic) /= 0;
     end Is_Basic;
*************** package body Ada.Characters.Handling is
*** 299,314 ****
     -- Is_Character --
     ------------------
  
!    function Is_Character (Item : in Wide_Character) return Boolean is
     begin
        return Wide_Character'Pos (Item) < 256;
     end Is_Character;
  
     ----------------
     -- Is_Control --
     ----------------
  
!    function Is_Control (Item : in Character) return Boolean is
     begin
        return (Char_Map (Item) and Control) /= 0;
     end Is_Control;
--- 299,319 ----
     -- Is_Character --
     ------------------
  
!    function Is_Character (Item : Wide_Character) return Boolean is
     begin
        return Wide_Character'Pos (Item) < 256;
     end Is_Character;
  
+    function Is_Character (Item : Wide_Wide_Character) return Boolean is
+    begin
+       return Wide_Wide_Character'Pos (Item) < 256;
+    end Is_Character;
+ 
     ----------------
     -- Is_Control --
     ----------------
  
!    function Is_Control (Item : Character) return Boolean is
     begin
        return (Char_Map (Item) and Control) /= 0;
     end Is_Control;
*************** package body Ada.Characters.Handling is
*** 317,323 ****
     -- Is_Digit --
     --------------
  
!    function Is_Digit (Item : in Character) return Boolean is
     begin
        return Item in '0' .. '9';
     end Is_Digit;
--- 322,328 ----
     -- Is_Digit --
     --------------
  
!    function Is_Digit (Item : Character) return Boolean is
     begin
        return Item in '0' .. '9';
     end Is_Digit;
*************** package body Ada.Characters.Handling is
*** 326,332 ****
     -- Is_Graphic --
     ----------------
  
!    function Is_Graphic (Item : in Character) return Boolean is
     begin
        return (Char_Map (Item) and Graphic) /= 0;
     end Is_Graphic;
--- 331,337 ----
     -- Is_Graphic --
     ----------------
  
!    function Is_Graphic (Item : Character) return Boolean is
     begin
        return (Char_Map (Item) and Graphic) /= 0;
     end Is_Graphic;
*************** package body Ada.Characters.Handling is
*** 335,341 ****
     -- Is_Hexadecimal_Digit --
     --------------------------
  
!    function Is_Hexadecimal_Digit (Item : in Character) return Boolean is
     begin
        return (Char_Map (Item) and Hex_Digit) /= 0;
     end Is_Hexadecimal_Digit;
--- 340,346 ----
     -- Is_Hexadecimal_Digit --
     --------------------------
  
!    function Is_Hexadecimal_Digit (Item : Character) return Boolean is
     begin
        return (Char_Map (Item) and Hex_Digit) /= 0;
     end Is_Hexadecimal_Digit;
*************** package body Ada.Characters.Handling is
*** 344,350 ****
     -- Is_ISO_646 --
     ----------------
  
!    function Is_ISO_646 (Item : in Character) return Boolean is
     begin
        return Item in ISO_646;
     end Is_ISO_646;
--- 349,355 ----
     -- Is_ISO_646 --
     ----------------
  
!    function Is_ISO_646 (Item : Character) return Boolean is
     begin
        return Item in ISO_646;
     end Is_ISO_646;
*************** package body Ada.Characters.Handling is
*** 352,358 ****
     --  Note: much more efficient coding of the following function is possible
     --  by testing several 16#80# bits in a complete word in a single operation
  
!    function Is_ISO_646 (Item : in String) return Boolean is
     begin
        for J in Item'Range loop
           if Item (J) not in ISO_646 then
--- 357,363 ----
     --  Note: much more efficient coding of the following function is possible
     --  by testing several 16#80# bits in a complete word in a single operation
  
!    function Is_ISO_646 (Item : String) return Boolean is
     begin
        for J in Item'Range loop
           if Item (J) not in ISO_646 then
*************** package body Ada.Characters.Handling is
*** 367,373 ****
     -- Is_Letter --
     ---------------
  
!    function Is_Letter (Item : in Character) return Boolean is
     begin
        return (Char_Map (Item) and Letter) /= 0;
     end Is_Letter;
--- 372,378 ----
     -- Is_Letter --
     ---------------
  
!    function Is_Letter (Item : Character) return Boolean is
     begin
        return (Char_Map (Item) and Letter) /= 0;
     end Is_Letter;
*************** package body Ada.Characters.Handling is
*** 376,382 ****
     -- Is_Lower --
     --------------
  
!    function Is_Lower (Item : in Character) return Boolean is
     begin
        return (Char_Map (Item) and Lower) /= 0;
     end Is_Lower;
--- 381,387 ----
     -- Is_Lower --
     --------------
  
!    function Is_Lower (Item : Character) return Boolean is
     begin
        return (Char_Map (Item) and Lower) /= 0;
     end Is_Lower;
*************** package body Ada.Characters.Handling is
*** 385,391 ****
     -- Is_Special --
     ----------------
  
!    function Is_Special (Item : in Character) return Boolean is
     begin
        return (Char_Map (Item) and Special) /= 0;
     end Is_Special;
--- 390,396 ----
     -- Is_Special --
     ----------------
  
!    function Is_Special (Item : Character) return Boolean is
     begin
        return (Char_Map (Item) and Special) /= 0;
     end Is_Special;
*************** package body Ada.Characters.Handling is
*** 394,400 ****
     -- Is_String --
     ---------------
  
!    function Is_String (Item : in Wide_String) return Boolean is
     begin
        for J in Item'Range loop
           if Wide_Character'Pos (Item (J)) >= 256 then
--- 399,405 ----
     -- Is_String --
     ---------------
  
!    function Is_String (Item : Wide_String) return Boolean is
     begin
        for J in Item'Range loop
           if Wide_Character'Pos (Item (J)) >= 256 then
*************** package body Ada.Characters.Handling is
*** 405,429 ****
        return True;
     end Is_String;
  
     --------------
     -- Is_Upper --
     --------------
  
!    function Is_Upper (Item : in Character) return Boolean is
     begin
        return (Char_Map (Item) and Upper) /= 0;
     end Is_Upper;
  
     --------------
     -- To_Basic --
     --------------
  
!    function To_Basic (Item : in Character) return Character is
     begin
        return Value (Basic_Map, Item);
     end To_Basic;
  
!    function To_Basic (Item : in String) return String is
        Result : String (1 .. Item'Length);
  
     begin
--- 410,469 ----
        return True;
     end Is_String;
  
+    function Is_String (Item : Wide_Wide_String) return Boolean is
+    begin
+       for J in Item'Range loop
+          if Wide_Wide_Character'Pos (Item (J)) >= 256 then
+             return False;
+          end if;
+       end loop;
+ 
+       return True;
+    end Is_String;
+ 
     --------------
     -- Is_Upper --
     --------------
  
!    function Is_Upper (Item : Character) return Boolean is
     begin
        return (Char_Map (Item) and Upper) /= 0;
     end Is_Upper;
  
+    -----------------------
+    -- Is_Wide_Character --
+    -----------------------
+ 
+    function Is_Wide_Character (Item : Wide_Wide_Character) return Boolean is
+    begin
+       return Wide_Wide_Character'Pos (Item) < 2**16;
+    end Is_Wide_Character;
+ 
+    --------------------
+    -- Is_Wide_String --
+    --------------------
+ 
+    function Is_Wide_String (Item : Wide_Wide_String) return Boolean is
+    begin
+       for J in Item'Range loop
+          if Wide_Wide_Character'Pos (Item (J)) >= 2**16 then
+             return False;
+          end if;
+       end loop;
+ 
+       return True;
+    end Is_Wide_String;
+ 
     --------------
     -- To_Basic --
     --------------
  
!    function To_Basic (Item : Character) return Character is
     begin
        return Value (Basic_Map, Item);
     end To_Basic;
  
!    function To_Basic (Item : String) return String is
        Result : String (1 .. Item'Length);
  
     begin
*************** package body Ada.Characters.Handling is
*** 439,447 ****
     ------------------
  
     function To_Character
!      (Item       : in Wide_Character;
!       Substitute : in Character := ' ')
!       return       Character
     is
     begin
        if Is_Character (Item) then
--- 479,486 ----
     ------------------
  
     function To_Character
!      (Item       : Wide_Character;
!       Substitute : Character := ' ') return Character
     is
     begin
        if Is_Character (Item) then
*************** package body Ada.Characters.Handling is
*** 451,464 ****
        end if;
     end To_Character;
  
     ----------------
     -- To_ISO_646 --
     ----------------
  
     function To_ISO_646
!      (Item       : in Character;
!       Substitute : in ISO_646 := ' ')
!       return       ISO_646
     is
     begin
        if Item in ISO_646 then
--- 490,514 ----
        end if;
     end To_Character;
  
+    function To_Character
+      (Item       : Wide_Wide_Character;
+       Substitute : Character := ' ') return Character
+    is
+    begin
+       if Is_Character (Item) then
+          return Character'Val (Wide_Wide_Character'Pos (Item));
+       else
+          return Substitute;
+       end if;
+    end To_Character;
+ 
     ----------------
     -- To_ISO_646 --
     ----------------
  
     function To_ISO_646
!      (Item       : Character;
!       Substitute : ISO_646 := ' ') return ISO_646
     is
     begin
        if Item in ISO_646 then
*************** package body Ada.Characters.Handling is
*** 469,477 ****
     end To_ISO_646;
  
     function To_ISO_646
!      (Item       : in String;
!       Substitute : in ISO_646 := ' ')
!       return       String
     is
        Result : String (1 .. Item'Length);
  
--- 519,526 ----
     end To_ISO_646;
  
     function To_ISO_646
!      (Item       : String;
!       Substitute : ISO_646 := ' ') return String
     is
        Result : String (1 .. Item'Length);
  
*************** package body Ada.Characters.Handling is
*** 491,502 ****
     -- To_Lower --
     --------------
  
!    function To_Lower (Item : in Character) return Character is
     begin
        return Value (Lower_Case_Map, Item);
     end To_Lower;
  
!    function To_Lower (Item : in String) return String is
        Result : String (1 .. Item'Length);
  
     begin
--- 540,551 ----
     -- To_Lower --
     --------------
  
!    function To_Lower (Item : Character) return Character is
     begin
        return Value (Lower_Case_Map, Item);
     end To_Lower;
  
!    function To_Lower (Item : String) return String is
        Result : String (1 .. Item'Length);
  
     begin
*************** package body Ada.Characters.Handling is
*** 512,520 ****
     ---------------
  
     function To_String
!      (Item       : in Wide_String;
!       Substitute : in Character := ' ')
!      return        String
     is
        Result : String (1 .. Item'Length);
  
--- 561,568 ----
     ---------------
  
     function To_String
!      (Item       : Wide_String;
!       Substitute : Character := ' ') return String
     is
        Result : String (1 .. Item'Length);
  
*************** package body Ada.Characters.Handling is
*** 522,527 ****
--- 570,590 ----
        for J in Item'Range loop
           Result (J - (Item'First - 1)) := To_Character (Item (J), Substitute);
        end loop;
+ 
+       return Result;
+    end To_String;
+ 
+    function To_String
+      (Item       : Wide_Wide_String;
+       Substitute : Character := ' ') return String
+    is
+       Result : String (1 .. Item'Length);
+ 
+    begin
+       for J in Item'Range loop
+          Result (J - (Item'First - 1)) := To_Character (Item (J), Substitute);
+       end loop;
+ 
        return Result;
     end To_String;
  
*************** package body Ada.Characters.Handling is
*** 530,545 ****
     --------------
  
     function To_Upper
!      (Item : in Character)
!      return  Character
     is
     begin
        return Value (Upper_Case_Map, Item);
     end To_Upper;
  
     function To_Upper
!      (Item : in String)
!       return String
     is
        Result : String (1 .. Item'Length);
  
--- 593,606 ----
     --------------
  
     function To_Upper
!      (Item : Character) return Character
     is
     begin
        return Value (Upper_Case_Map, Item);
     end To_Upper;
  
     function To_Upper
!      (Item : String) return String
     is
        Result : String (1 .. Item'Length);
  
*************** package body Ada.Characters.Handling is
*** 556,575 ****
     -----------------------
  
     function To_Wide_Character
!      (Item : in Character)
!       return Wide_Character
     is
     begin
        return Wide_Character'Val (Character'Pos (Item));
     end To_Wide_Character;
  
     --------------------
     -- To_Wide_String --
     --------------------
  
     function To_Wide_String
!      (Item : in String)
!       return Wide_String
     is
        Result : Wide_String (1 .. Item'Length);
  
--- 617,646 ----
     -----------------------
  
     function To_Wide_Character
!      (Item : Character) return Wide_Character
     is
     begin
        return Wide_Character'Val (Character'Pos (Item));
     end To_Wide_Character;
  
+    function To_Wide_Character
+      (Item       : Wide_Wide_Character;
+       Substitute : Wide_Character := ' ') return Wide_Character
+    is
+    begin
+       if Wide_Wide_Character'Pos (Item) < 2**16 then
+          return Wide_Character'Val (Wide_Wide_Character'Pos (Item));
+       else
+          return Substitute;
+       end if;
+    end To_Wide_Character;
+ 
     --------------------
     -- To_Wide_String --
     --------------------
  
     function To_Wide_String
!      (Item : String) return Wide_String
     is
        Result : Wide_String (1 .. Item'Length);
  
*************** package body Ada.Characters.Handling is
*** 580,583 ****
--- 651,718 ----
  
        return Result;
     end To_Wide_String;
+ 
+    function To_Wide_String
+      (Item       : Wide_Wide_String;
+       Substitute : Wide_Character := ' ') return Wide_String
+    is
+       Result : Wide_String (1 .. Item'Length);
+ 
+    begin
+       for J in Item'Range loop
+          Result (J - (Item'First - 1)) :=
+            To_Wide_Character (Item (J), Substitute);
+       end loop;
+ 
+       return Result;
+    end To_Wide_String;
+ 
+    ----------------------------
+    -- To_Wide_Wide_Character --
+    ----------------------------
+ 
+    function To_Wide_Wide_Character
+      (Item : Character) return Wide_Wide_Character
+    is
+    begin
+       return Wide_Wide_Character'Val (Character'Pos (Item));
+    end To_Wide_Wide_Character;
+ 
+    function To_Wide_Wide_Character
+      (Item : Wide_Character) return Wide_Wide_Character
+    is
+    begin
+       return Wide_Wide_Character'Val (Wide_Character'Pos (Item));
+    end To_Wide_Wide_Character;
+ 
+    -------------------------
+    -- To_Wide_Wide_String --
+    -------------------------
+ 
+    function To_Wide_Wide_String
+      (Item : String) return Wide_Wide_String
+    is
+       Result : Wide_Wide_String (1 .. Item'Length);
+ 
+    begin
+       for J in Item'Range loop
+          Result (J - (Item'First - 1)) := To_Wide_Wide_Character (Item (J));
+       end loop;
+ 
+       return Result;
+    end To_Wide_Wide_String;
+ 
+    function To_Wide_Wide_String
+      (Item : Wide_String) return Wide_Wide_String
+    is
+       Result : Wide_Wide_String (1 .. Item'Length);
+ 
+    begin
+       for J in Item'Range loop
+          Result (J - (Item'First - 1)) := To_Wide_Wide_Character (Item (J));
+       end loop;
+ 
+       return Result;
+    end To_Wide_Wide_String;
+ 
  end Ada.Characters.Handling;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-chahan.ads gcc-4.0.0/gcc/ada/a-chahan.ads
*** gcc-3.4.3/gcc/ada/a-chahan.ads	Thu Apr 24 17:53:52 2003
--- gcc-4.0.0/gcc/ada/a-chahan.ads	Thu Feb 10 13:50:14 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-1997 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** pragma Preelaborate (Handling);
*** 43,72 ****
     -- Character Classification Functions --
     ----------------------------------------
  
!    function Is_Control           (Item : in Character) return Boolean;
!    function Is_Graphic           (Item : in Character) return Boolean;
!    function Is_Letter            (Item : in Character) return Boolean;
!    function Is_Lower             (Item : in Character) return Boolean;
!    function Is_Upper             (Item : in Character) return Boolean;
!    function Is_Basic             (Item : in Character) return Boolean;
!    function Is_Digit             (Item : in Character) return Boolean;
!    function Is_Decimal_Digit     (Item : in Character) return Boolean
!                                                           renames Is_Digit;
!    function Is_Hexadecimal_Digit (Item : in Character) return Boolean;
!    function Is_Alphanumeric      (Item : in Character) return Boolean;
!    function Is_Special           (Item : in Character) return Boolean;
  
     ---------------------------------------------------
     -- Conversion Functions for Character and String --
     ---------------------------------------------------
  
!    function To_Lower (Item : in Character) return Character;
!    function To_Upper (Item : in Character) return Character;
!    function To_Basic (Item : in Character) return Character;
  
!    function To_Lower (Item : in String) return String;
!    function To_Upper (Item : in String) return String;
!    function To_Basic (Item : in String) return String;
  
     ----------------------------------------------------------------------
     -- Classifications of and Conversions Between Character and ISO 646 --
--- 43,72 ----
     -- Character Classification Functions --
     ----------------------------------------
  
!    function Is_Control           (Item : Character) return Boolean;
!    function Is_Graphic           (Item : Character) return Boolean;
!    function Is_Letter            (Item : Character) return Boolean;
!    function Is_Lower             (Item : Character) return Boolean;
!    function Is_Upper             (Item : Character) return Boolean;
!    function Is_Basic             (Item : Character) return Boolean;
!    function Is_Digit             (Item : Character) return Boolean;
!    function Is_Decimal_Digit     (Item : Character) return Boolean
!      renames Is_Digit;
!    function Is_Hexadecimal_Digit (Item : Character) return Boolean;
!    function Is_Alphanumeric      (Item : Character) return Boolean;
!    function Is_Special           (Item : Character) return Boolean;
  
     ---------------------------------------------------
     -- Conversion Functions for Character and String --
     ---------------------------------------------------
  
!    function To_Lower (Item : Character) return Character;
!    function To_Upper (Item : Character) return Character;
!    function To_Basic (Item : Character) return Character;
  
!    function To_Lower (Item : String) return String;
!    function To_Upper (Item : String) return String;
!    function To_Basic (Item : String) return String;
  
     ----------------------------------------------------------------------
     -- Classifications of and Conversions Between Character and ISO 646 --
*************** pragma Preelaborate (Handling);
*** 75,116 ****
     subtype ISO_646 is
       Character range Character'Val (0) .. Character'Val (127);
  
!    function Is_ISO_646 (Item : in Character) return Boolean;
!    function Is_ISO_646 (Item : in String)    return Boolean;
  
     function To_ISO_646
!      (Item       : in Character;
!       Substitute : in ISO_646 := ' ')
!       return       ISO_646;
  
     function To_ISO_646
!      (Item      : in String;
!       Substitute : in ISO_646 := ' ')
!       return       String;
  
     ------------------------------------------------------
     -- Classifications of Wide_Character and Characters --
     ------------------------------------------------------
  
!    function Is_Character (Item : in Wide_Character) return Boolean;
!    function Is_String    (Item : in Wide_String)    return Boolean;
  
!    ------------------------------------------------------
!    -- Conversions between Wide_Character and Character --
!    ------------------------------------------------------
  
     function To_Character
!      (Item       : in Wide_Character;
!       Substitute : in Character := ' ')
!       return       Character;
  
     function To_String
!      (Item       : in Wide_String;
!       Substitute : in Character := ' ')
!       return       String;
  
!    function To_Wide_Character (Item : in Character) return Wide_Character;
!    function To_Wide_String    (Item : in String)    return Wide_String;
  
  private
     pragma Inline (Is_Control);
--- 75,143 ----
     subtype ISO_646 is
       Character range Character'Val (0) .. Character'Val (127);
  
!    function Is_ISO_646 (Item : Character) return Boolean;
!    function Is_ISO_646 (Item : String)    return Boolean;
  
     function To_ISO_646
!      (Item       : Character;
!       Substitute : ISO_646 := ' ') return ISO_646;
  
     function To_ISO_646
!      (Item       : String;
!       Substitute : ISO_646 := ' ') return String;
  
     ------------------------------------------------------
     -- Classifications of Wide_Character and Characters --
     ------------------------------------------------------
  
!    function Is_Character (Item : Wide_Character)           return Boolean;
!    function Is_Character (Item : Wide_Wide_Character)      return Boolean;
!    function Is_String    (Item : Wide_String)              return Boolean;
!    function Is_String    (Item : Wide_Wide_String)         return Boolean;
!    function Is_Wide_Character (Item : Wide_Wide_Character) return Boolean;
!    function Is_Wide_String (Item : Wide_Wide_String)       return Boolean;
  
!    ---------------------------------------------------------------------------
!    -- Conversions between Wide_Wide_Character, Wide_Character and Character --
!    ---------------------------------------------------------------------------
  
     function To_Character
!      (Item       : Wide_Character;
!       Substitute : Character := ' ')      return Character;
! 
!    function To_Character
!      (Item       : Wide_Wide_Character;
!       Substitute : Character := ' ')      return Character;
  
     function To_String
!      (Item       : Wide_String;
!       Substitute : Character := ' ')      return String;
  
!    function To_String
!      (Item       : Wide_Wide_String;
!       Substitute : Character := ' ')      return String;
! 
!    function To_Wide_Character
!      (Item : Character)                   return Wide_Character;
!    function To_Wide_Character
!      (Item       : Wide_Wide_Character;
!       Substitute : Wide_Character := ' ') return Wide_Character;
! 
!    function To_Wide_String
!      (Item : String)                      return Wide_String;
!    function To_Wide_String
!      (Item       : Wide_Wide_String;
!       Substitute : Wide_Character := ' ') return Wide_String;
! 
!    function To_Wide_Wide_Character
!      (Item : Character)                   return Wide_Wide_Character;
!    function To_Wide_Wide_Character
!      (Item : Wide_Character)              return Wide_Wide_Character;
! 
!    function To_Wide_Wide_String
!      (Item : String)                      return Wide_Wide_String;
!    function To_Wide_Wide_String
!      (Item : Wide_String)                 return Wide_Wide_String;
  
  private
     pragma Inline (Is_Control);
*************** private
*** 130,134 ****
--- 157,162 ----
     pragma Inline (Is_Character);
     pragma Inline (To_Character);
     pragma Inline (To_Wide_Character);
+    pragma Inline (To_Wide_Wide_Character);
  
  end Ada.Characters.Handling;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-chtgke.adb gcc-4.0.0/gcc/ada/a-chtgke.adb
*** gcc-3.4.3/gcc/ada/a-chtgke.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-chtgke.adb	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,178 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                 ADA.CONTAINERS.HASH_TABLES.GENERIC_KEYS                  --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ 
+ package body Ada.Containers.Hash_Tables.Generic_Keys is
+ 
+    --------------------------
+    -- Delete_Key_Sans_Free --
+    --------------------------
+ 
+    procedure Delete_Key_Sans_Free
+      (HT   : in out HT_Type;
+       Key  : Key_Type;
+       X    : out Node_Access)
+    is
+       Indx : Hash_Type;
+       Prev : Node_Access;
+ 
+    begin
+       if HT.Length = 0 then
+          X := Null_Node;
+          return;
+       end if;
+ 
+       Indx := Index (HT, Key);
+       X := HT.Buckets (Indx);
+ 
+       if X = Null_Node then
+          return;
+       end if;
+ 
+       if Equivalent_Keys (Key, X) then
+          HT.Buckets (Indx) := Next (X);
+          HT.Length := HT.Length - 1;
+          return;
+       end if;
+ 
+       loop
+          Prev := X;
+          X := Next (Prev);
+ 
+          if X = Null_Node then
+             return;
+          end if;
+ 
+          if Equivalent_Keys (Key, X) then
+             Set_Next (Node => Prev, Next => Next (X));
+             HT.Length := HT.Length - 1;
+             return;
+          end if;
+       end loop;
+    end Delete_Key_Sans_Free;
+ 
+    ----------
+    -- Find --
+    ----------
+ 
+    function Find
+      (HT  : HT_Type;
+       Key : Key_Type) return Node_Access is
+ 
+       Indx : Hash_Type;
+       Node : Node_Access;
+ 
+    begin
+       if HT.Length = 0 then
+          return Null_Node;
+       end if;
+ 
+       Indx := Index (HT, Key);
+ 
+       Node := HT.Buckets (Indx);
+       while Node /= Null_Node loop
+          if Equivalent_Keys (Key, Node) then
+             return Node;
+          end if;
+          Node := Next (Node);
+       end loop;
+ 
+       return Null_Node;
+    end Find;
+ 
+    --------------------------------
+    -- Generic_Conditional_Insert --
+    --------------------------------
+ 
+    procedure Generic_Conditional_Insert
+      (HT      : in out HT_Type;
+       Key     : Key_Type;
+       Node    : out Node_Access;
+       Success : out Boolean)
+    is
+       Indx : constant Hash_Type := Index (HT, Key);
+       B    : Node_Access renames HT.Buckets (Indx);
+ 
+       subtype Length_Subtype is Count_Type range 0 .. Count_Type'Last - 1;
+ 
+    begin
+       if B = Null_Node then
+          declare
+             Length : constant Length_Subtype := HT.Length;
+          begin
+             Node := New_Node (Next => Null_Node);
+             Success := True;
+ 
+             B := Node;
+             HT.Length := Length + 1;
+          end;
+ 
+          return;
+       end if;
+ 
+       Node := B;
+       loop
+          if Equivalent_Keys (Key, Node) then
+             Success := False;
+             return;
+          end if;
+ 
+          Node := Next (Node);
+ 
+          exit when Node = Null_Node;
+       end loop;
+ 
+       declare
+          Length : constant Length_Subtype := HT.Length;
+       begin
+          Node := New_Node (Next => B);
+          Success := True;
+ 
+          B := Node;
+          HT.Length := Length + 1;
+       end;
+    end Generic_Conditional_Insert;
+ 
+    -----------
+    -- Index --
+    -----------
+ 
+    function Index
+      (HT  : HT_Type;
+       Key : Key_Type) return Hash_Type is
+    begin
+       return Hash (Key) mod HT.Buckets'Length;
+    end Index;
+ 
+ end Ada.Containers.Hash_Tables.Generic_Keys;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-chtgke.ads gcc-4.0.0/gcc/ada/a-chtgke.ads
*** gcc-3.4.3/gcc/ada/a-chtgke.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-chtgke.ads	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,64 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                 ADA.CONTAINERS.HASH_TABLES.GENERIC_KEYS                  --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ -- This specification is adapted from the Ada Reference Manual for use with --
+ -- GNAT.  In accordance with the copyright of that document, you can freely --
+ -- copy and modify this specification,  provided that if you redistribute a --
+ -- modified version,  any changes that you have made are clearly indicated. --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ generic
+    with package HT_Types is
+      new Generic_Hash_Table_Types (<>);
+ 
+    type HT_Type is new HT_Types.Hash_Table_Type with private;
+ 
+    use HT_Types;
+ 
+    Null_Node : Node_Access;
+ 
+    with function Next (Node : Node_Access) return Node_Access;
+ 
+    with procedure Set_Next
+      (Node : Node_Access;
+       Next : Node_Access);
+ 
+    type Key_Type (<>) is limited private;
+ 
+    with function Hash (Key : Key_Type) return Hash_Type;
+ 
+    with function Equivalent_Keys
+      (Key  : Key_Type;
+       Node : Node_Access) return Boolean;
+ 
+ package Ada.Containers.Hash_Tables.Generic_Keys is
+    pragma Preelaborate;
+ 
+    function Index
+      (HT  : HT_Type;
+       Key : Key_Type) return Hash_Type;
+    pragma Inline (Index);
+ 
+    procedure Delete_Key_Sans_Free
+      (HT   : in out HT_Type;
+       Key  : Key_Type;
+       X    : out Node_Access);
+ 
+    function Find (HT  : HT_Type; Key : Key_Type) return Node_Access;
+ 
+    generic
+       with function New_Node
+         (Next : Node_Access) return Node_Access;
+    procedure Generic_Conditional_Insert
+      (HT      : in out HT_Type;
+       Key     : Key_Type;
+       Node    : out Node_Access;
+       Success : out Boolean);
+ 
+ end Ada.Containers.Hash_Tables.Generic_Keys;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-chtgop.adb gcc-4.0.0/gcc/ada/a-chtgop.adb
*** gcc-3.4.3/gcc/ada/a-chtgop.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-chtgop.adb	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,701 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --              ADA.CONTAINERS.HASH_TABLES.GENERIC_OPERATIONS               --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ 
+ --  This body needs commenting ???
+ 
+ with Ada.Containers.Prime_Numbers;
+ with Ada.Unchecked_Deallocation;
+ 
+ with System;  use type System.Address;
+ 
+ package body Ada.Containers.Hash_Tables.Generic_Operations is
+ 
+    procedure Free is
+      new Ada.Unchecked_Deallocation (Buckets_Type, Buckets_Access);
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    procedure Rehash
+      (HT   : in out Hash_Table_Type;
+       Size : Hash_Type);
+ 
+    ------------
+    -- Adjust --
+    ------------
+ 
+    procedure Adjust (HT : in out Hash_Table_Type) is
+       Src_Buckets : constant Buckets_Access := HT.Buckets;
+       N           : constant Count_Type := HT.Length;
+       Src_Node    : Node_Access;
+       Dst_Prev    : Node_Access;
+ 
+    begin
+       HT.Buckets := null;
+       HT.Length := 0;
+ 
+       if N = 0 then
+          return;
+       end if;
+ 
+       HT.Buckets := new Buckets_Type (Src_Buckets'Range);
+ 
+       --  Probably we have to duplicate the Size (Src), too, in order
+       --  to guarantee that
+ 
+       --    Dst := Src;
+       --    Dst = Src is true
+ 
+       --  The only quirk is that we depend on the hash value of a dst key
+       --  to be the same as the src key from which it was copied.
+       --  If we relax the requirement that the hash value must be the
+       --  same, then of course we can't guarantee that following
+       --  assignment that Dst = Src is true ???
+ 
+       for Src_Index in Src_Buckets'Range loop
+          Src_Node := Src_Buckets (Src_Index);
+ 
+          if Src_Node /= Null_Node then
+             declare
+                Dst_Node : constant Node_Access := Copy_Node (Src_Node);
+ 
+                --   See note above
+ 
+                pragma Assert (Index (HT, Dst_Node) = Src_Index);
+ 
+             begin
+                HT.Buckets (Src_Index) := Dst_Node;
+                HT.Length := HT.Length + 1;
+ 
+                Dst_Prev := Dst_Node;
+             end;
+ 
+             Src_Node := Next (Src_Node);
+             while Src_Node /= Null_Node loop
+                declare
+                   Dst_Node : constant Node_Access := Copy_Node (Src_Node);
+ 
+                   --  See note above
+ 
+                   pragma Assert (Index (HT, Dst_Node) = Src_Index);
+ 
+                begin
+                   Set_Next (Node => Dst_Prev, Next => Dst_Node);
+                   HT.Length := HT.Length + 1;
+ 
+                   Dst_Prev := Dst_Node;
+                end;
+ 
+                Src_Node := Next (Src_Node);
+             end loop;
+          end if;
+       end loop;
+ 
+       pragma Assert (HT.Length = N);
+    end Adjust;
+ 
+    --------------
+    -- Capacity --
+    --------------
+ 
+    function Capacity (HT : Hash_Table_Type) return Count_Type is
+    begin
+       if HT.Buckets = null then
+          return 0;
+       end if;
+ 
+       return HT.Buckets'Length;
+    end Capacity;
+ 
+    -----------
+    -- Clear --
+    -----------
+ 
+    procedure Clear (HT : in out Hash_Table_Type) is
+       Index : Hash_Type := 0;
+       Node  : Node_Access;
+ 
+    begin
+       while HT.Length > 0 loop
+          while HT.Buckets (Index) = Null_Node loop
+             Index := Index + 1;
+          end loop;
+ 
+          declare
+             Bucket : Node_Access renames HT.Buckets (Index);
+          begin
+             loop
+                Node := Bucket;
+                Bucket := Next (Bucket);
+                HT.Length := HT.Length - 1;
+                Free (Node);
+                exit when Bucket = Null_Node;
+             end loop;
+          end;
+       end loop;
+    end Clear;
+ 
+    ---------------------------
+    -- Delete_Node_Sans_Free --
+    ---------------------------
+ 
+    procedure Delete_Node_Sans_Free
+      (HT : in out Hash_Table_Type;
+       X  : Node_Access)
+    is
+       pragma Assert (X /= Null_Node);
+ 
+       Indx : Hash_Type;
+       Prev : Node_Access;
+       Curr : Node_Access;
+ 
+    begin
+       if HT.Length = 0 then
+          raise Program_Error;
+       end if;
+ 
+       Indx := Index (HT, X);
+       Prev := HT.Buckets (Indx);
+ 
+       if Prev = Null_Node then
+          raise Program_Error;
+       end if;
+ 
+       if Prev = X then
+          HT.Buckets (Indx) := Next (Prev);
+          HT.Length := HT.Length - 1;
+          return;
+       end if;
+ 
+       if HT.Length = 1 then
+          raise Program_Error;
+       end if;
+ 
+       loop
+          Curr := Next (Prev);
+ 
+          if Curr = Null_Node then
+             raise Program_Error;
+          end if;
+ 
+          if Curr = X then
+             Set_Next (Node => Prev, Next => Next (Curr));
+             HT.Length := HT.Length - 1;
+             return;
+          end if;
+ 
+          Prev := Curr;
+       end loop;
+    end Delete_Node_Sans_Free;
+ 
+    ---------------------
+    -- Ensure_Capacity --
+    ---------------------
+ 
+    procedure Ensure_Capacity
+      (HT : in out Hash_Table_Type;
+       N  : Count_Type)
+    is
+       NN : Hash_Type;
+ 
+    begin
+       if N = 0 then
+          if HT.Length = 0 then
+             Free (HT.Buckets);
+ 
+          elsif HT.Length < HT.Buckets'Length then
+             NN := Prime_Numbers.To_Prime (HT.Length);
+ 
+             --  ASSERT: NN >= HT.Length
+ 
+             if NN < HT.Buckets'Length then
+                Rehash (HT, Size => NN);
+             end if;
+          end if;
+ 
+          return;
+       end if;
+ 
+       if HT.Buckets = null then
+          NN := Prime_Numbers.To_Prime (N);
+ 
+          --  ASSERT: NN >= N
+ 
+          Rehash (HT, Size => NN);
+          return;
+       end if;
+ 
+       if N <= HT.Length then
+          if HT.Length >= HT.Buckets'Length then
+             return;
+          end if;
+ 
+          NN := Prime_Numbers.To_Prime (HT.Length);
+ 
+          --  ASSERT: NN >= HT.Length
+ 
+          if NN < HT.Buckets'Length then
+             Rehash (HT, Size => NN);
+          end if;
+ 
+          return;
+       end if;
+ 
+       --  ASSERT: N > HT.Length
+ 
+       if N = HT.Buckets'Length then
+          return;
+       end if;
+ 
+       NN := Prime_Numbers.To_Prime (N);
+ 
+       --  ASSERT: NN >= N
+       --  ASSERT: NN > HT.Length
+ 
+       if NN /= HT.Buckets'Length then
+          Rehash (HT, Size => NN);
+       end if;
+    end Ensure_Capacity;
+ 
+    --------------
+    -- Finalize --
+    --------------
+ 
+    procedure Finalize (HT : in out Hash_Table_Type) is
+    begin
+       Clear (HT);
+       Free (HT.Buckets);
+    end Finalize;
+ 
+    -----------
+    -- First --
+    -----------
+ 
+    function First (HT : Hash_Table_Type) return Node_Access is
+       Indx : Hash_Type;
+ 
+    begin
+       if HT.Length = 0 then
+          return Null_Node;
+       end if;
+ 
+       Indx := HT.Buckets'First;
+       loop
+          if HT.Buckets (Indx) /= Null_Node then
+             return HT.Buckets (Indx);
+          end if;
+ 
+          Indx := Indx + 1;
+       end loop;
+    end First;
+ 
+    ---------------------
+    -- Free_Hash_Table --
+    ---------------------
+ 
+    procedure Free_Hash_Table (Buckets : in out Buckets_Access) is
+       Node : Node_Access;
+ 
+    begin
+       if Buckets = null then
+          return;
+       end if;
+ 
+       for J in Buckets'Range loop
+          while Buckets (J) /= Null_Node loop
+             Node := Buckets (J);
+             Buckets (J) := Next (Node);
+             Free (Node);
+          end loop;
+       end loop;
+ 
+       Free (Buckets);
+    end Free_Hash_Table;
+ 
+    -------------------
+    -- Generic_Equal --
+    -------------------
+ 
+    function Generic_Equal
+      (L, R : Hash_Table_Type) return Boolean is
+ 
+       L_Index : Hash_Type;
+       L_Node  : Node_Access;
+ 
+       N : Count_Type;
+ 
+    begin
+       if L'Address = R'Address then
+          return True;
+       end if;
+ 
+       if L.Length /= R.Length then
+          return False;
+       end if;
+ 
+       if L.Length = 0 then
+          return True;
+       end if;
+ 
+       L_Index := 0;
+ 
+       loop
+          L_Node := L.Buckets (L_Index);
+          exit when L_Node /= Null_Node;
+          L_Index := L_Index + 1;
+       end loop;
+ 
+       N := L.Length;
+ 
+       loop
+          if not Find (HT => R, Key => L_Node) then
+             return False;
+          end if;
+ 
+          N := N - 1;
+ 
+          L_Node := Next (L_Node);
+ 
+          if L_Node = Null_Node then
+             if N = 0 then
+                return True;
+             end if;
+ 
+             loop
+                L_Index := L_Index + 1;
+                L_Node := L.Buckets (L_Index);
+                exit when L_Node /= Null_Node;
+             end loop;
+          end if;
+       end loop;
+    end Generic_Equal;
+ 
+    -----------------------
+    -- Generic_Iteration --
+    -----------------------
+ 
+    procedure Generic_Iteration (HT : Hash_Table_Type) is
+       Node : Node_Access;
+ 
+    begin
+       if HT.Buckets = null
+         or else HT.Length = 0
+       then
+          return;
+       end if;
+ 
+       for Indx in HT.Buckets'Range loop
+          Node := HT.Buckets (Indx);
+          while Node /= Null_Node loop
+             Process (Node);
+             Node := Next (Node);
+          end loop;
+       end loop;
+    end Generic_Iteration;
+ 
+    ------------------
+    -- Generic_Read --
+    ------------------
+ 
+    procedure Generic_Read
+      (Stream : access Root_Stream_Type'Class;
+       HT     : out Hash_Table_Type)
+    is
+       X, Y : Node_Access;
+ 
+       Last, I : Hash_Type;
+       N, M    : Count_Type'Base;
+ 
+    begin
+       --  As with the sorted set, it's not clear whether read is allowed to
+       --  have side effect if it fails. For now, we assume side effects are
+       --  allowed since it simplifies the algorithm ???
+       --
+       Clear (HT);
+ 
+       declare
+          B : Buckets_Access := HT.Buckets;
+       begin
+          HT.Buckets := null;
+          HT.Length := 0;
+          Free (B); -- can this fail???
+       end;
+ 
+       Hash_Type'Read (Stream, Last);
+ 
+       if Last /= 0 then
+          HT.Buckets := new Buckets_Type (0 .. Last);
+       end if;
+ 
+       Count_Type'Base'Read (Stream, N);
+       pragma Assert (N >= 0);
+       while N > 0 loop
+          Hash_Type'Read (Stream, I);
+          pragma Assert (I in HT.Buckets'Range);
+          pragma Assert (HT.Buckets (I) = Null_Node);
+ 
+          Count_Type'Base'Read (Stream, M);
+          pragma Assert (M >= 1);
+          pragma Assert (M <= N);
+ 
+          HT.Buckets (I) := New_Node (Stream);
+          pragma Assert (HT.Buckets (I) /= Null_Node);
+          pragma Assert (Next (HT.Buckets (I)) = Null_Node);
+ 
+          Y := HT.Buckets (I);
+ 
+          HT.Length := HT.Length + 1;
+ 
+          for J in Count_Type range 2 .. M loop
+             X := New_Node (Stream);
+             pragma Assert (X /= Null_Node);
+             pragma Assert (Next (X) = Null_Node);
+ 
+             Set_Next (Node => Y, Next => X);
+             Y := X;
+ 
+             HT.Length := HT.Length + 1;
+          end loop;
+ 
+          N := N - M;
+       end loop;
+    end Generic_Read;
+ 
+    -------------------
+    -- Generic_Write --
+    -------------------
+ 
+    procedure Generic_Write
+      (Stream : access Root_Stream_Type'Class;
+       HT     : Hash_Table_Type)
+    is
+       M : Count_Type'Base;
+       X : Node_Access;
+ 
+    begin
+       if HT.Buckets = null then
+          Hash_Type'Write (Stream, 0);
+       else
+          Hash_Type'Write (Stream, HT.Buckets'Last);
+       end if;
+ 
+       Count_Type'Base'Write (Stream, HT.Length);
+ 
+       if HT.Length = 0 then
+          return;
+       end if;
+ 
+       for Indx in HT.Buckets'Range loop
+          X := HT.Buckets (Indx);
+ 
+          if X /= Null_Node then
+             M := 1;
+             loop
+                X := Next (X);
+                exit when X = Null_Node;
+                M := M + 1;
+             end loop;
+ 
+             Hash_Type'Write (Stream, Indx);
+             Count_Type'Base'Write (Stream, M);
+ 
+             X := HT.Buckets (Indx);
+             for J in Count_Type range 1 .. M loop
+                Write (Stream, X);
+                X := Next (X);
+             end loop;
+ 
+             pragma Assert (X = Null_Node);
+          end if;
+       end loop;
+    end Generic_Write;
+ 
+    -----------
+    -- Index --
+    -----------
+ 
+    function Index
+      (Buckets : Buckets_Type;
+       Node    : Node_Access) return Hash_Type is
+    begin
+       return Hash_Node (Node) mod Buckets'Length;
+    end Index;
+ 
+    function Index
+      (Hash_Table : Hash_Table_Type;
+       Node       : Node_Access) return Hash_Type is
+    begin
+       return Index (Hash_Table.Buckets.all, Node);
+    end Index;
+ 
+    ----------
+    -- Move --
+    ----------
+ 
+    procedure Move (Target, Source : in out Hash_Table_Type) is
+    begin
+       if Target'Address = Source'Address then
+          return;
+       end if;
+ 
+       if Target.Length > 0 then
+          raise Constraint_Error;
+       end if;
+ 
+       Free (Target.Buckets);
+ 
+       Target.Buckets := Source.Buckets;
+       Source.Buckets := null;
+ 
+       Target.Length := Source.Length;
+       Source.Length := 0;
+    end Move;
+ 
+    ----------
+    -- Next --
+    ----------
+ 
+    function Next
+      (HT   : Hash_Table_Type;
+       Node : Node_Access) return Node_Access
+    is
+       Result : Node_Access := Next (Node);
+ 
+    begin
+       if Result /= Null_Node then
+          return Result;
+       end if;
+ 
+       for Indx in Index (HT, Node) + 1 .. HT.Buckets'Last loop
+          Result := HT.Buckets (Indx);
+ 
+          if Result /= Null_Node then
+             return Result;
+          end if;
+       end loop;
+ 
+       return Null_Node;
+    end Next;
+ 
+    ------------
+    -- Rehash --
+    ------------
+ 
+    procedure Rehash
+      (HT   : in out Hash_Table_Type;
+       Size : Hash_Type)
+    is
+       subtype Buckets_Range is Hash_Type range 0 .. Size - 1;
+ 
+       Dst_Buckets : Buckets_Access := new Buckets_Type (Buckets_Range);
+       Src_Buckets : Buckets_Access := HT.Buckets;
+ 
+       L  : Count_Type renames HT.Length;
+       LL : constant Count_Type := L;
+ 
+    begin
+       if Src_Buckets = null then
+          pragma Assert (L = 0);
+          HT.Buckets := Dst_Buckets;
+          return;
+       end if;
+ 
+       if L = 0 then
+          HT.Buckets := Dst_Buckets;
+          Free (Src_Buckets);
+          return;
+       end if;
+ 
+       --  We might want to change this to iter from 1 .. L instead ???
+ 
+       for Src_Index in Src_Buckets'Range loop
+ 
+          declare
+             Src_Bucket : Node_Access renames Src_Buckets (Src_Index);
+          begin
+             while Src_Bucket /= Null_Node loop
+                declare
+                   Src_Node   : constant Node_Access := Src_Bucket;
+                   Dst_Index  : constant Hash_Type :=
+                                  Index (Dst_Buckets.all, Src_Node);
+                   Dst_Bucket : Node_Access renames Dst_Buckets (Dst_Index);
+                begin
+                   Src_Bucket := Next (Src_Node);
+                   Set_Next (Src_Node, Dst_Bucket);
+                   Dst_Bucket := Src_Node;
+                end;
+ 
+                pragma Assert (L > 0);
+                L := L - 1;
+ 
+             end loop;
+ 
+          exception
+             when others =>
+ 
+                --  Not clear that we can deallocate the nodes,
+                --  because they may be designated by outstanding
+                --  iterators.  Which means they're now lost... ???
+ 
+                --                 for J in NB'Range loop
+                --                    declare
+                --                       Dst : Node_Access renames NB (J);
+                --                       X   : Node_Access;
+                --                    begin
+                --                       while Dst /= Null_Node loop
+                --                          X := Dst;
+                --                          Dst := Succ (Dst);
+                --                          Free (X);
+                --                       end loop;
+                --                    end;
+                --                 end loop;
+ 
+ 
+                Free (Dst_Buckets);
+                raise;
+          end;
+ 
+          --  exit when L = 0;
+          --  need to bother???
+ 
+       end loop;
+ 
+       pragma Assert (L = 0);
+ 
+       HT.Buckets := Dst_Buckets;
+       HT.Length := LL;
+ 
+       Free (Src_Buckets);
+    end Rehash;
+ 
+ end Ada.Containers.Hash_Tables.Generic_Operations;
+ 
diff -Nrcpad gcc-3.4.3/gcc/ada/a-chtgop.ads gcc-4.0.0/gcc/ada/a-chtgop.ads
*** gcc-3.4.3/gcc/ada/a-chtgop.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-chtgop.ads	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,111 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --              ADA.CONTAINERS.HASH_TABLES.GENERIC_OPERATIONS               --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is adapted from the Ada Reference Manual for use with --
+ -- GNAT.  In accordance with the copyright of that document, you can freely --
+ -- copy and modify this specification,  provided that if you redistribute a --
+ -- modified version,  any changes that you have made are clearly indicated. --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Streams;
+ 
+ generic
+ 
+    with package HT_Types is
+      new Generic_Hash_Table_Types (<>);
+ 
+    type Hash_Table_Type is new HT_Types.Hash_Table_Type with private;
+ 
+    use HT_Types;
+ 
+    Null_Node : in Node_Access;
+ 
+    with function Hash_Node (Node : Node_Access) return Hash_Type;
+ 
+    with function Next (Node : Node_Access) return Node_Access;
+ 
+    with procedure Set_Next
+      (Node : Node_Access;
+       Next : Node_Access);
+ 
+     with function Copy_Node (Source : Node_Access) return Node_Access;
+ 
+    with procedure Free (X : in out Node_Access);
+ 
+ package Ada.Containers.Hash_Tables.Generic_Operations is
+    pragma Preelaborate;
+ 
+    procedure Free_Hash_Table (Buckets : in out Buckets_Access);
+ 
+    function Index
+      (Buckets : Buckets_Type;
+       Node    : Node_Access) return Hash_Type;
+    pragma Inline (Index);
+ 
+    function Index
+      (Hash_Table : Hash_Table_Type;
+       Node       : Node_Access) return Hash_Type;
+    pragma Inline (Index);
+ 
+    procedure Adjust (HT : in out Hash_Table_Type);
+ 
+    procedure Finalize (HT : in out Hash_Table_Type);
+ 
+    generic
+       with function Find
+         (HT  : Hash_Table_Type;
+          Key : Node_Access) return Boolean;
+    function Generic_Equal
+      (L, R : Hash_Table_Type) return Boolean;
+ 
+    procedure Clear (HT : in out Hash_Table_Type);
+ 
+    procedure Move (Target, Source : in out Hash_Table_Type);
+ 
+    function Capacity (HT : Hash_Table_Type) return Count_Type;
+ 
+    procedure Ensure_Capacity
+      (HT : in out Hash_Table_Type;
+       N  : Count_Type);
+ 
+    procedure Delete_Node_Sans_Free
+      (HT : in out Hash_Table_Type;
+       X  : Node_Access);
+ 
+    function First (HT : Hash_Table_Type) return Node_Access;
+ 
+    function Next
+      (HT   : Hash_Table_Type;
+       Node : Node_Access) return Node_Access;
+ 
+    generic
+       with procedure Process (Node : Node_Access);
+    procedure Generic_Iteration (HT : Hash_Table_Type);
+ 
+    generic
+       use Ada.Streams;
+       with procedure Write
+         (Stream : access Root_Stream_Type'Class;
+          Node   : Node_Access);
+    procedure Generic_Write
+      (Stream : access Root_Stream_Type'Class;
+       HT     : Hash_Table_Type);
+ 
+    generic
+       use Ada.Streams;
+       with function New_Node (Stream : access Root_Stream_Type'Class)
+          return Node_Access;
+    procedure Generic_Read
+      (Stream : access Root_Stream_Type'Class;
+       HT     : out Hash_Table_Type);
+ 
+ end Ada.Containers.Hash_Tables.Generic_Operations;
+ 
diff -Nrcpad gcc-3.4.3/gcc/ada/a-chzla1.ads gcc-4.0.0/gcc/ada/a-chzla1.ads
*** gcc-3.4.3/gcc/ada/a-chzla1.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-chzla1.ads	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,378 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --     A D A . C H A R A C T E R S . W I D E _ W I D E _ L A T I N _ 1      --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package provides definitions analogous to those in the RM defined
+ --  package Ada.Characters.Latin_1 except that the type of the constants
+ --  is Wide_Wide_Character instead of Character. The provision of this package
+ --  is in accordance with the implementation permission in RM (A.3.3(27)).
+ 
+ package Ada.Characters.Wide_Wide_Latin_1 is
+ pragma Pure (Wide_Wide_Latin_1);
+ 
+    ------------------------
+    -- Control Characters --
+    ------------------------
+ 
+    NUL  : constant Wide_Wide_Character := Wide_Wide_Character'Val (0);
+    SOH  : constant Wide_Wide_Character := Wide_Wide_Character'Val (1);
+    STX  : constant Wide_Wide_Character := Wide_Wide_Character'Val (2);
+    ETX  : constant Wide_Wide_Character := Wide_Wide_Character'Val (3);
+    EOT  : constant Wide_Wide_Character := Wide_Wide_Character'Val (4);
+    ENQ  : constant Wide_Wide_Character := Wide_Wide_Character'Val (5);
+    ACK  : constant Wide_Wide_Character := Wide_Wide_Character'Val (6);
+    BEL  : constant Wide_Wide_Character := Wide_Wide_Character'Val (7);
+    BS   : constant Wide_Wide_Character := Wide_Wide_Character'Val (8);
+    HT   : constant Wide_Wide_Character := Wide_Wide_Character'Val (9);
+    LF   : constant Wide_Wide_Character := Wide_Wide_Character'Val (10);
+    VT   : constant Wide_Wide_Character := Wide_Wide_Character'Val (11);
+    FF   : constant Wide_Wide_Character := Wide_Wide_Character'Val (12);
+    CR   : constant Wide_Wide_Character := Wide_Wide_Character'Val (13);
+    SO   : constant Wide_Wide_Character := Wide_Wide_Character'Val (14);
+    SI   : constant Wide_Wide_Character := Wide_Wide_Character'Val (15);
+ 
+    DLE  : constant Wide_Wide_Character := Wide_Wide_Character'Val (16);
+    DC1  : constant Wide_Wide_Character := Wide_Wide_Character'Val (17);
+    DC2  : constant Wide_Wide_Character := Wide_Wide_Character'Val (18);
+    DC3  : constant Wide_Wide_Character := Wide_Wide_Character'Val (19);
+    DC4  : constant Wide_Wide_Character := Wide_Wide_Character'Val (20);
+    NAK  : constant Wide_Wide_Character := Wide_Wide_Character'Val (21);
+    SYN  : constant Wide_Wide_Character := Wide_Wide_Character'Val (22);
+    ETB  : constant Wide_Wide_Character := Wide_Wide_Character'Val (23);
+    CAN  : constant Wide_Wide_Character := Wide_Wide_Character'Val (24);
+    EM   : constant Wide_Wide_Character := Wide_Wide_Character'Val (25);
+    SUB  : constant Wide_Wide_Character := Wide_Wide_Character'Val (26);
+    ESC  : constant Wide_Wide_Character := Wide_Wide_Character'Val (27);
+    FS   : constant Wide_Wide_Character := Wide_Wide_Character'Val (28);
+    GS   : constant Wide_Wide_Character := Wide_Wide_Character'Val (29);
+    RS   : constant Wide_Wide_Character := Wide_Wide_Character'Val (30);
+    US   : constant Wide_Wide_Character := Wide_Wide_Character'Val (31);
+ 
+    -------------------------------------
+    -- ISO 646 Graphic Wide_Wide_Characters --
+    -------------------------------------
+ 
+    Space                : constant Wide_Wide_Character := ' ';  -- WC'Val(32)
+    Exclamation          : constant Wide_Wide_Character := '!';  -- WC'Val(33)
+    Quotation            : constant Wide_Wide_Character := '"';  -- WC'Val(34)
+    Number_Sign          : constant Wide_Wide_Character := '#';  -- WC'Val(35)
+    Dollar_Sign          : constant Wide_Wide_Character := '$';  -- WC'Val(36)
+    Percent_Sign         : constant Wide_Wide_Character := '%';  -- WC'Val(37)
+    Ampersand            : constant Wide_Wide_Character := '&';  -- WC'Val(38)
+    Apostrophe           : constant Wide_Wide_Character := ''';  -- WC'Val(39)
+    Left_Parenthesis     : constant Wide_Wide_Character := '(';  -- WC'Val(40)
+    Right_Parenthesis    : constant Wide_Wide_Character := ')';  -- WC'Val(41)
+    Asterisk             : constant Wide_Wide_Character := '*';  -- WC'Val(42)
+    Plus_Sign            : constant Wide_Wide_Character := '+';  -- WC'Val(43)
+    Comma                : constant Wide_Wide_Character := ',';  -- WC'Val(44)
+    Hyphen               : constant Wide_Wide_Character := '-';  -- WC'Val(45)
+    Minus_Sign           : Wide_Wide_Character renames Hyphen;
+    Full_Stop            : constant Wide_Wide_Character := '.';  -- WC'Val(46)
+    Solidus              : constant Wide_Wide_Character := '/';  -- WC'Val(47)
+ 
+    --  Decimal digits '0' though '9' are at positions 48 through 57
+ 
+    Colon                : constant Wide_Wide_Character := ':';  -- WC'Val(58)
+    Semicolon            : constant Wide_Wide_Character := ';';  -- WC'Val(59)
+    Less_Than_Sign       : constant Wide_Wide_Character := '<';  -- WC'Val(60)
+    Equals_Sign          : constant Wide_Wide_Character := '=';  -- WC'Val(61)
+    Greater_Than_Sign    : constant Wide_Wide_Character := '>';  -- WC'Val(62)
+    Question             : constant Wide_Wide_Character := '?';  -- WC'Val(63)
+ 
+    Commercial_At        : constant Wide_Wide_Character := '@';  -- WC'Val(64)
+ 
+    --  Letters 'A' through 'Z' are at positions 65 through 90
+ 
+    Left_Square_Bracket  : constant Wide_Wide_Character := '[';  -- WC'Val (91)
+    Reverse_Solidus      : constant Wide_Wide_Character := '\';  -- WC'Val (92)
+    Right_Square_Bracket : constant Wide_Wide_Character := ']';  -- WC'Val (93)
+    Circumflex           : constant Wide_Wide_Character := '^';  -- WC'Val (94)
+    Low_Line             : constant Wide_Wide_Character := '_';  -- WC'Val (95)
+ 
+    Grave                : constant Wide_Wide_Character := '`';  -- WC'Val (96)
+    LC_A                 : constant Wide_Wide_Character := 'a';  -- WC'Val (97)
+    LC_B                 : constant Wide_Wide_Character := 'b';  -- WC'Val (98)
+    LC_C                 : constant Wide_Wide_Character := 'c';  -- WC'Val (99)
+    LC_D                 : constant Wide_Wide_Character := 'd';  -- WC'Val (100)
+    LC_E                 : constant Wide_Wide_Character := 'e';  -- WC'Val (101)
+    LC_F                 : constant Wide_Wide_Character := 'f';  -- WC'Val (102)
+    LC_G                 : constant Wide_Wide_Character := 'g';  -- WC'Val (103)
+    LC_H                 : constant Wide_Wide_Character := 'h';  -- WC'Val (104)
+    LC_I                 : constant Wide_Wide_Character := 'i';  -- WC'Val (105)
+    LC_J                 : constant Wide_Wide_Character := 'j';  -- WC'Val (106)
+    LC_K                 : constant Wide_Wide_Character := 'k';  -- WC'Val (107)
+    LC_L                 : constant Wide_Wide_Character := 'l';  -- WC'Val (108)
+    LC_M                 : constant Wide_Wide_Character := 'm';  -- WC'Val (109)
+    LC_N                 : constant Wide_Wide_Character := 'n';  -- WC'Val (110)
+    LC_O                 : constant Wide_Wide_Character := 'o';  -- WC'Val (111)
+    LC_P                 : constant Wide_Wide_Character := 'p';  -- WC'Val (112)
+    LC_Q                 : constant Wide_Wide_Character := 'q';  -- WC'Val (113)
+    LC_R                 : constant Wide_Wide_Character := 'r';  -- WC'Val (114)
+    LC_S                 : constant Wide_Wide_Character := 's';  -- WC'Val (115)
+    LC_T                 : constant Wide_Wide_Character := 't';  -- WC'Val (116)
+    LC_U                 : constant Wide_Wide_Character := 'u';  -- WC'Val (117)
+    LC_V                 : constant Wide_Wide_Character := 'v';  -- WC'Val (118)
+    LC_W                 : constant Wide_Wide_Character := 'w';  -- WC'Val (119)
+    LC_X                 : constant Wide_Wide_Character := 'x';  -- WC'Val (120)
+    LC_Y                 : constant Wide_Wide_Character := 'y';  -- WC'Val (121)
+    LC_Z                 : constant Wide_Wide_Character := 'z';  -- WC'Val (122)
+    Left_Curly_Bracket   : constant Wide_Wide_Character := '{';  -- WC'Val (123)
+    Vertical_Line        : constant Wide_Wide_Character := '|';  -- WC'Val (124)
+    Right_Curly_Bracket  : constant Wide_Wide_Character := '}';  -- WC'Val (125)
+    Tilde                : constant Wide_Wide_Character := '~';  -- WC'Val (126)
+    DEL                  : constant Wide_Wide_Character :=
+                             Wide_Wide_Character'Val (127);
+ 
+    --------------------------------------
+    -- ISO 6429 Control Wide_Wide_Characters --
+    --------------------------------------
+ 
+    IS4 : Wide_Wide_Character renames FS;
+    IS3 : Wide_Wide_Character renames GS;
+    IS2 : Wide_Wide_Character renames RS;
+    IS1 : Wide_Wide_Character renames US;
+ 
+    Reserved_128
+         : constant Wide_Wide_Character := Wide_Wide_Character'Val (128);
+    Reserved_129
+         : constant Wide_Wide_Character := Wide_Wide_Character'Val (129);
+    BPH  : constant Wide_Wide_Character := Wide_Wide_Character'Val (130);
+    NBH  : constant Wide_Wide_Character := Wide_Wide_Character'Val (131);
+    Reserved_132
+         : constant Wide_Wide_Character := Wide_Wide_Character'Val (132);
+    NEL  : constant Wide_Wide_Character := Wide_Wide_Character'Val (133);
+    SSA  : constant Wide_Wide_Character := Wide_Wide_Character'Val (134);
+    ESA  : constant Wide_Wide_Character := Wide_Wide_Character'Val (135);
+    HTS  : constant Wide_Wide_Character := Wide_Wide_Character'Val (136);
+    HTJ  : constant Wide_Wide_Character := Wide_Wide_Character'Val (137);
+    VTS  : constant Wide_Wide_Character := Wide_Wide_Character'Val (138);
+    PLD  : constant Wide_Wide_Character := Wide_Wide_Character'Val (139);
+    PLU  : constant Wide_Wide_Character := Wide_Wide_Character'Val (140);
+    RI   : constant Wide_Wide_Character := Wide_Wide_Character'Val (141);
+    SS2  : constant Wide_Wide_Character := Wide_Wide_Character'Val (142);
+    SS3  : constant Wide_Wide_Character := Wide_Wide_Character'Val (143);
+ 
+    DCS  : constant Wide_Wide_Character := Wide_Wide_Character'Val (144);
+    PU1  : constant Wide_Wide_Character := Wide_Wide_Character'Val (145);
+    PU2  : constant Wide_Wide_Character := Wide_Wide_Character'Val (146);
+    STS  : constant Wide_Wide_Character := Wide_Wide_Character'Val (147);
+    CCH  : constant Wide_Wide_Character := Wide_Wide_Character'Val (148);
+    MW   : constant Wide_Wide_Character := Wide_Wide_Character'Val (149);
+    SPA  : constant Wide_Wide_Character := Wide_Wide_Character'Val (150);
+    EPA  : constant Wide_Wide_Character := Wide_Wide_Character'Val (151);
+ 
+    SOS  : constant Wide_Wide_Character := Wide_Wide_Character'Val (152);
+    Reserved_153
+         : constant Wide_Wide_Character := Wide_Wide_Character'Val (153);
+    SCI  : constant Wide_Wide_Character := Wide_Wide_Character'Val (154);
+    CSI  : constant Wide_Wide_Character := Wide_Wide_Character'Val (155);
+    ST   : constant Wide_Wide_Character := Wide_Wide_Character'Val (156);
+    OSC  : constant Wide_Wide_Character := Wide_Wide_Character'Val (157);
+    PM   : constant Wide_Wide_Character := Wide_Wide_Character'Val (158);
+    APC  : constant Wide_Wide_Character := Wide_Wide_Character'Val (159);
+ 
+    -----------------------------------
+    -- Other Graphic Wide_Wide_Characters --
+    -----------------------------------
+ 
+    --  Wide_Wide_Character positions 160 (16#A0#) .. 175 (16#AF#)
+ 
+    No_Break_Space
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (160);
+    NBSP        : Wide_Wide_Character renames No_Break_Space;
+    Inverted_Exclamation
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (161);
+    Cent_Sign   : constant Wide_Wide_Character := Wide_Wide_Character'Val (162);
+    Pound_Sign  : constant Wide_Wide_Character := Wide_Wide_Character'Val (163);
+    Currency_Sign
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (164);
+    Yen_Sign    : constant Wide_Wide_Character := Wide_Wide_Character'Val (165);
+    Broken_Bar  : constant Wide_Wide_Character := Wide_Wide_Character'Val (166);
+    Section_Sign
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (167);
+    Diaeresis   : constant Wide_Wide_Character := Wide_Wide_Character'Val (168);
+    Copyright_Sign
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (169);
+    Feminine_Ordinal_Indicator
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (170);
+    Left_Angle_Quotation
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (171);
+    Not_Sign    : constant Wide_Wide_Character := Wide_Wide_Character'Val (172);
+    Soft_Hyphen : constant Wide_Wide_Character := Wide_Wide_Character'Val (173);
+    Registered_Trade_Mark_Sign
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (174);
+    Macron      : constant Wide_Wide_Character := Wide_Wide_Character'Val (175);
+ 
+    --  Wide_Wide_Character positions 176 (16#B0#) .. 191 (16#BF#)
+ 
+    Degree_Sign : constant Wide_Wide_Character := Wide_Wide_Character'Val (176);
+    Ring_Above  : Wide_Wide_Character renames Degree_Sign;
+    Plus_Minus_Sign
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (177);
+    Superscript_Two
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (178);
+    Superscript_Three
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (179);
+    Acute       : constant Wide_Wide_Character := Wide_Wide_Character'Val (180);
+    Micro_Sign  : constant Wide_Wide_Character := Wide_Wide_Character'Val (181);
+    Pilcrow_Sign
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (182);
+    Paragraph_Sign
+                : Wide_Wide_Character renames Pilcrow_Sign;
+    Middle_Dot  : constant Wide_Wide_Character := Wide_Wide_Character'Val (183);
+    Cedilla     : constant Wide_Wide_Character := Wide_Wide_Character'Val (184);
+    Superscript_One
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (185);
+    Masculine_Ordinal_Indicator
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (186);
+    Right_Angle_Quotation
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (187);
+    Fraction_One_Quarter
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (188);
+    Fraction_One_Half
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (189);
+    Fraction_Three_Quarters
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (190);
+    Inverted_Question
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (191);
+ 
+    --  Wide_Wide_Character positions 192 (16#C0#) .. 207 (16#CF#)
+ 
+    UC_A_Grave  : constant Wide_Wide_Character := Wide_Wide_Character'Val (192);
+    UC_A_Acute  : constant Wide_Wide_Character := Wide_Wide_Character'Val (193);
+    UC_A_Circumflex
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (194);
+    UC_A_Tilde  : constant Wide_Wide_Character := Wide_Wide_Character'Val (195);
+    UC_A_Diaeresis
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (196);
+    UC_A_Ring   : constant Wide_Wide_Character := Wide_Wide_Character'Val (197);
+    UC_AE_Diphthong
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (198);
+    UC_C_Cedilla
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (199);
+    UC_E_Grave  : constant Wide_Wide_Character := Wide_Wide_Character'Val (200);
+    UC_E_Acute  : constant Wide_Wide_Character := Wide_Wide_Character'Val (201);
+    UC_E_Circumflex
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (202);
+    UC_E_Diaeresis
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (203);
+    UC_I_Grave  : constant Wide_Wide_Character := Wide_Wide_Character'Val (204);
+    UC_I_Acute  : constant Wide_Wide_Character := Wide_Wide_Character'Val (205);
+    UC_I_Circumflex
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (206);
+    UC_I_Diaeresis
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (207);
+ 
+    --  Wide_Wide_Character positions 208 (16#D0#) .. 223 (16#DF#)
+ 
+    UC_Icelandic_Eth
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (208);
+    UC_N_Tilde  : constant Wide_Wide_Character := Wide_Wide_Character'Val (209);
+    UC_O_Grave  : constant Wide_Wide_Character := Wide_Wide_Character'Val (210);
+    UC_O_Acute  : constant Wide_Wide_Character := Wide_Wide_Character'Val (211);
+    UC_O_Circumflex
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (212);
+    UC_O_Tilde  : constant Wide_Wide_Character := Wide_Wide_Character'Val (213);
+    UC_O_Diaeresis
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (214);
+    Multiplication_Sign
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (215);
+    UC_O_Oblique_Stroke
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (216);
+    UC_U_Grave  : constant Wide_Wide_Character := Wide_Wide_Character'Val (217);
+    UC_U_Acute  : constant Wide_Wide_Character := Wide_Wide_Character'Val (218);
+    UC_U_Circumflex
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (219);
+    UC_U_Diaeresis
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (220);
+    UC_Y_Acute  : constant Wide_Wide_Character := Wide_Wide_Character'Val (221);
+    UC_Icelandic_Thorn
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (222);
+    LC_German_Sharp_S
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (223);
+ 
+    --  Wide_Wide_Character positions 224 (16#E0#) .. 239 (16#EF#)
+ 
+    LC_A_Grave  : constant Wide_Wide_Character := Wide_Wide_Character'Val (224);
+    LC_A_Acute  : constant Wide_Wide_Character := Wide_Wide_Character'Val (225);
+    LC_A_Circumflex
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (226);
+    LC_A_Tilde  : constant Wide_Wide_Character := Wide_Wide_Character'Val (227);
+    LC_A_Diaeresis
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (228);
+    LC_A_Ring   : constant Wide_Wide_Character := Wide_Wide_Character'Val (229);
+    LC_AE_Diphthong
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (230);
+    LC_C_Cedilla
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (231);
+    LC_E_Grave  : constant Wide_Wide_Character := Wide_Wide_Character'Val (232);
+    LC_E_Acute  : constant Wide_Wide_Character := Wide_Wide_Character'Val (233);
+    LC_E_Circumflex
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (234);
+    LC_E_Diaeresis
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (235);
+    LC_I_Grave  : constant Wide_Wide_Character := Wide_Wide_Character'Val (236);
+    LC_I_Acute  : constant Wide_Wide_Character := Wide_Wide_Character'Val (237);
+    LC_I_Circumflex
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (238);
+    LC_I_Diaeresis
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (239);
+ 
+    --  Wide_Wide_Character positions 240 (16#F0#) .. 255 (16#FF)
+ 
+    LC_Icelandic_Eth
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (240);
+    LC_N_Tilde  : constant Wide_Wide_Character := Wide_Wide_Character'Val (241);
+    LC_O_Grave  : constant Wide_Wide_Character := Wide_Wide_Character'Val (242);
+    LC_O_Acute  : constant Wide_Wide_Character := Wide_Wide_Character'Val (243);
+    LC_O_Circumflex
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (244);
+    LC_O_Tilde  : constant Wide_Wide_Character := Wide_Wide_Character'Val (245);
+    LC_O_Diaeresis
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (246);
+    Division_Sign
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (247);
+    LC_O_Oblique_Stroke
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (248);
+    LC_U_Grave  : constant Wide_Wide_Character := Wide_Wide_Character'Val (249);
+    LC_U_Acute  : constant Wide_Wide_Character := Wide_Wide_Character'Val (250);
+    LC_U_Circumflex
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (251);
+    LC_U_Diaeresis
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (252);
+    LC_Y_Acute  : constant Wide_Wide_Character := Wide_Wide_Character'Val (253);
+    LC_Icelandic_Thorn
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (254);
+    LC_Y_Diaeresis
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (255);
+ 
+ end Ada.Characters.Wide_Wide_Latin_1;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-chzla9.ads gcc-4.0.0/gcc/ada/a-chzla9.ads
*** gcc-3.4.3/gcc/ada/a-chzla9.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-chzla9.ads	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,390 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --     A D A . C H A R A C T E R S . W I D E _ W I D E _ L A T I N _ 9      --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package provides definitions analogous to those in the GNAT package
+ --  Ada.Characters.Latin_9 except that the type of the various constants is
+ --  Wide_Wide_Character instead of Character. The provision of this package
+ --  is in accordance with the implementation permission in RM (A.3.3(27)).
+ 
+ package Ada.Characters.Wide_Wide_Latin_9 is
+ pragma Pure (Wide_Wide_Latin_9);
+ 
+    ------------------------
+    -- Control Characters --
+    ------------------------
+ 
+    NUL  : constant Wide_Wide_Character := Wide_Wide_Character'Val (0);
+    SOH  : constant Wide_Wide_Character := Wide_Wide_Character'Val (1);
+    STX  : constant Wide_Wide_Character := Wide_Wide_Character'Val (2);
+    ETX  : constant Wide_Wide_Character := Wide_Wide_Character'Val (3);
+    EOT  : constant Wide_Wide_Character := Wide_Wide_Character'Val (4);
+    ENQ  : constant Wide_Wide_Character := Wide_Wide_Character'Val (5);
+    ACK  : constant Wide_Wide_Character := Wide_Wide_Character'Val (6);
+    BEL  : constant Wide_Wide_Character := Wide_Wide_Character'Val (7);
+    BS   : constant Wide_Wide_Character := Wide_Wide_Character'Val (8);
+    HT   : constant Wide_Wide_Character := Wide_Wide_Character'Val (9);
+    LF   : constant Wide_Wide_Character := Wide_Wide_Character'Val (10);
+    VT   : constant Wide_Wide_Character := Wide_Wide_Character'Val (11);
+    FF   : constant Wide_Wide_Character := Wide_Wide_Character'Val (12);
+    CR   : constant Wide_Wide_Character := Wide_Wide_Character'Val (13);
+    SO   : constant Wide_Wide_Character := Wide_Wide_Character'Val (14);
+    SI   : constant Wide_Wide_Character := Wide_Wide_Character'Val (15);
+ 
+    DLE  : constant Wide_Wide_Character := Wide_Wide_Character'Val (16);
+    DC1  : constant Wide_Wide_Character := Wide_Wide_Character'Val (17);
+    DC2  : constant Wide_Wide_Character := Wide_Wide_Character'Val (18);
+    DC3  : constant Wide_Wide_Character := Wide_Wide_Character'Val (19);
+    DC4  : constant Wide_Wide_Character := Wide_Wide_Character'Val (20);
+    NAK  : constant Wide_Wide_Character := Wide_Wide_Character'Val (21);
+    SYN  : constant Wide_Wide_Character := Wide_Wide_Character'Val (22);
+    ETB  : constant Wide_Wide_Character := Wide_Wide_Character'Val (23);
+    CAN  : constant Wide_Wide_Character := Wide_Wide_Character'Val (24);
+    EM   : constant Wide_Wide_Character := Wide_Wide_Character'Val (25);
+    SUB  : constant Wide_Wide_Character := Wide_Wide_Character'Val (26);
+    ESC  : constant Wide_Wide_Character := Wide_Wide_Character'Val (27);
+    FS   : constant Wide_Wide_Character := Wide_Wide_Character'Val (28);
+    GS   : constant Wide_Wide_Character := Wide_Wide_Character'Val (29);
+    RS   : constant Wide_Wide_Character := Wide_Wide_Character'Val (30);
+    US   : constant Wide_Wide_Character := Wide_Wide_Character'Val (31);
+ 
+    -------------------------------------
+    -- ISO 646 Graphic Wide_Wide_Characters --
+    -------------------------------------
+ 
+    Space                : constant Wide_Wide_Character := ' ';  -- WC'Val(32)
+    Exclamation          : constant Wide_Wide_Character := '!';  -- WC'Val(33)
+    Quotation            : constant Wide_Wide_Character := '"';  -- WC'Val(34)
+    Number_Sign          : constant Wide_Wide_Character := '#';  -- WC'Val(35)
+    Dollar_Sign          : constant Wide_Wide_Character := '$';  -- WC'Val(36)
+    Percent_Sign         : constant Wide_Wide_Character := '%';  -- WC'Val(37)
+    Ampersand            : constant Wide_Wide_Character := '&';  -- WC'Val(38)
+    Apostrophe           : constant Wide_Wide_Character := ''';  -- WC'Val(39)
+    Left_Parenthesis     : constant Wide_Wide_Character := '(';  -- WC'Val(40)
+    Right_Parenthesis    : constant Wide_Wide_Character := ')';  -- WC'Val(41)
+    Asterisk             : constant Wide_Wide_Character := '*';  -- WC'Val(42)
+    Plus_Sign            : constant Wide_Wide_Character := '+';  -- WC'Val(43)
+    Comma                : constant Wide_Wide_Character := ',';  -- WC'Val(44)
+    Hyphen               : constant Wide_Wide_Character := '-';  -- WC'Val(45)
+    Minus_Sign           : Wide_Wide_Character renames Hyphen;
+    Full_Stop            : constant Wide_Wide_Character := '.';  -- WC'Val(46)
+    Solidus              : constant Wide_Wide_Character := '/';  -- WC'Val(47)
+ 
+    --  Decimal digits '0' though '9' are at positions 48 through 57
+ 
+    Colon                : constant Wide_Wide_Character := ':';  -- WC'Val(58)
+    Semicolon            : constant Wide_Wide_Character := ';';  -- WC'Val(59)
+    Less_Than_Sign       : constant Wide_Wide_Character := '<';  -- WC'Val(60)
+    Equals_Sign          : constant Wide_Wide_Character := '=';  -- WC'Val(61)
+    Greater_Than_Sign    : constant Wide_Wide_Character := '>';  -- WC'Val(62)
+    Question             : constant Wide_Wide_Character := '?';  -- WC'Val(63)
+ 
+    Commercial_At        : constant Wide_Wide_Character := '@';  -- WC'Val(64)
+ 
+    --  Letters 'A' through 'Z' are at positions 65 through 90
+ 
+    Left_Square_Bracket  : constant Wide_Wide_Character := '[';  -- WC'Val (91)
+    Reverse_Solidus      : constant Wide_Wide_Character := '\';  -- WC'Val (92)
+    Right_Square_Bracket : constant Wide_Wide_Character := ']';  -- WC'Val (93)
+    Circumflex           : constant Wide_Wide_Character := '^';  -- WC'Val (94)
+    Low_Line             : constant Wide_Wide_Character := '_';  -- WC'Val (95)
+ 
+    Grave                : constant Wide_Wide_Character := '`';  -- WC'Val (96)
+    LC_A                 : constant Wide_Wide_Character := 'a';  -- WC'Val (97)
+    LC_B                 : constant Wide_Wide_Character := 'b';  -- WC'Val (98)
+    LC_C                 : constant Wide_Wide_Character := 'c';  -- WC'Val (99)
+    LC_D                 : constant Wide_Wide_Character := 'd';  -- WC'Val (100)
+    LC_E                 : constant Wide_Wide_Character := 'e';  -- WC'Val (101)
+    LC_F                 : constant Wide_Wide_Character := 'f';  -- WC'Val (102)
+    LC_G                 : constant Wide_Wide_Character := 'g';  -- WC'Val (103)
+    LC_H                 : constant Wide_Wide_Character := 'h';  -- WC'Val (104)
+    LC_I                 : constant Wide_Wide_Character := 'i';  -- WC'Val (105)
+    LC_J                 : constant Wide_Wide_Character := 'j';  -- WC'Val (106)
+    LC_K                 : constant Wide_Wide_Character := 'k';  -- WC'Val (107)
+    LC_L                 : constant Wide_Wide_Character := 'l';  -- WC'Val (108)
+    LC_M                 : constant Wide_Wide_Character := 'm';  -- WC'Val (109)
+    LC_N                 : constant Wide_Wide_Character := 'n';  -- WC'Val (110)
+    LC_O                 : constant Wide_Wide_Character := 'o';  -- WC'Val (111)
+    LC_P                 : constant Wide_Wide_Character := 'p';  -- WC'Val (112)
+    LC_Q                 : constant Wide_Wide_Character := 'q';  -- WC'Val (113)
+    LC_R                 : constant Wide_Wide_Character := 'r';  -- WC'Val (114)
+    LC_S                 : constant Wide_Wide_Character := 's';  -- WC'Val (115)
+    LC_T                 : constant Wide_Wide_Character := 't';  -- WC'Val (116)
+    LC_U                 : constant Wide_Wide_Character := 'u';  -- WC'Val (117)
+    LC_V                 : constant Wide_Wide_Character := 'v';  -- WC'Val (118)
+    LC_W                 : constant Wide_Wide_Character := 'w';  -- WC'Val (119)
+    LC_X                 : constant Wide_Wide_Character := 'x';  -- WC'Val (120)
+    LC_Y                 : constant Wide_Wide_Character := 'y';  -- WC'Val (121)
+    LC_Z                 : constant Wide_Wide_Character := 'z';  -- WC'Val (122)
+    Left_Curly_Bracket   : constant Wide_Wide_Character := '{';  -- WC'Val (123)
+    Vertical_Line        : constant Wide_Wide_Character := '|';  -- WC'Val (124)
+    Right_Curly_Bracket  : constant Wide_Wide_Character := '}';  -- WC'Val (125)
+    Tilde                : constant Wide_Wide_Character := '~';  -- WC'Val (126)
+    DEL                  : constant Wide_Wide_Character :=
+                             Wide_Wide_Character'Val (127);
+ 
+    --------------------------------------
+    -- ISO 6429 Control Wide_Wide_Characters --
+    --------------------------------------
+ 
+    IS4 : Wide_Wide_Character renames FS;
+    IS3 : Wide_Wide_Character renames GS;
+    IS2 : Wide_Wide_Character renames RS;
+    IS1 : Wide_Wide_Character renames US;
+ 
+    Reserved_128
+         : constant Wide_Wide_Character := Wide_Wide_Character'Val (128);
+    Reserved_129
+         : constant Wide_Wide_Character := Wide_Wide_Character'Val (129);
+    BPH  : constant Wide_Wide_Character := Wide_Wide_Character'Val (130);
+    NBH  : constant Wide_Wide_Character := Wide_Wide_Character'Val (131);
+    Reserved_132
+         : constant Wide_Wide_Character := Wide_Wide_Character'Val (132);
+    NEL  : constant Wide_Wide_Character := Wide_Wide_Character'Val (133);
+    SSA  : constant Wide_Wide_Character := Wide_Wide_Character'Val (134);
+    ESA  : constant Wide_Wide_Character := Wide_Wide_Character'Val (135);
+    HTS  : constant Wide_Wide_Character := Wide_Wide_Character'Val (136);
+    HTJ  : constant Wide_Wide_Character := Wide_Wide_Character'Val (137);
+    VTS  : constant Wide_Wide_Character := Wide_Wide_Character'Val (138);
+    PLD  : constant Wide_Wide_Character := Wide_Wide_Character'Val (139);
+    PLU  : constant Wide_Wide_Character := Wide_Wide_Character'Val (140);
+    RI   : constant Wide_Wide_Character := Wide_Wide_Character'Val (141);
+    SS2  : constant Wide_Wide_Character := Wide_Wide_Character'Val (142);
+    SS3  : constant Wide_Wide_Character := Wide_Wide_Character'Val (143);
+ 
+    DCS  : constant Wide_Wide_Character := Wide_Wide_Character'Val (144);
+    PU1  : constant Wide_Wide_Character := Wide_Wide_Character'Val (145);
+    PU2  : constant Wide_Wide_Character := Wide_Wide_Character'Val (146);
+    STS  : constant Wide_Wide_Character := Wide_Wide_Character'Val (147);
+    CCH  : constant Wide_Wide_Character := Wide_Wide_Character'Val (148);
+    MW   : constant Wide_Wide_Character := Wide_Wide_Character'Val (149);
+    SPA  : constant Wide_Wide_Character := Wide_Wide_Character'Val (150);
+    EPA  : constant Wide_Wide_Character := Wide_Wide_Character'Val (151);
+ 
+    SOS  : constant Wide_Wide_Character := Wide_Wide_Character'Val (152);
+    Reserved_153
+         : constant Wide_Wide_Character := Wide_Wide_Character'Val (153);
+    SCI  : constant Wide_Wide_Character := Wide_Wide_Character'Val (154);
+    CSI  : constant Wide_Wide_Character := Wide_Wide_Character'Val (155);
+    ST   : constant Wide_Wide_Character := Wide_Wide_Character'Val (156);
+    OSC  : constant Wide_Wide_Character := Wide_Wide_Character'Val (157);
+    PM   : constant Wide_Wide_Character := Wide_Wide_Character'Val (158);
+    APC  : constant Wide_Wide_Character := Wide_Wide_Character'Val (159);
+ 
+    -----------------------------------
+    -- Other Graphic Wide_Wide_Characters --
+    -----------------------------------
+ 
+    --  Wide_Wide_Character positions 160 (16#A0#) .. 175 (16#AF#)
+ 
+    No_Break_Space
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (160);
+    NBSP        : Wide_Wide_Character renames No_Break_Space;
+    Inverted_Exclamation
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (161);
+    Cent_Sign   : constant Wide_Wide_Character := Wide_Wide_Character'Val (162);
+    Pound_Sign  : constant Wide_Wide_Character := Wide_Wide_Character'Val (163);
+    Euro_Sign   : constant Wide_Wide_Character := Wide_Wide_Character'Val (164);
+    Yen_Sign    : constant Wide_Wide_Character := Wide_Wide_Character'Val (165);
+    UC_S_Caron  : constant Wide_Wide_Character := Wide_Wide_Character'Val (166);
+    Section_Sign
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (167);
+    LC_S_Caron  : constant Wide_Wide_Character := Wide_Wide_Character'Val (168);
+    Copyright_Sign
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (169);
+    Feminine_Ordinal_Indicator
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (170);
+    Left_Angle_Quotation
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (171);
+    Not_Sign    : constant Wide_Wide_Character := Wide_Wide_Character'Val (172);
+    Soft_Hyphen : constant Wide_Wide_Character := Wide_Wide_Character'Val (173);
+    Registered_Trade_Mark_Sign
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (174);
+    Macron      : constant Wide_Wide_Character := Wide_Wide_Character'Val (175);
+ 
+    --  Wide_Wide_Character positions 176 (16#B0#) .. 191 (16#BF#)
+ 
+    Degree_Sign : constant Wide_Wide_Character := Wide_Wide_Character'Val (176);
+    Ring_Above  : Wide_Wide_Character renames Degree_Sign;
+    Plus_Minus_Sign
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (177);
+    Superscript_Two
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (178);
+    Superscript_Three
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (179);
+    UC_Z_Caron  : constant Wide_Wide_Character := Wide_Wide_Character'Val (180);
+    Micro_Sign  : constant Wide_Wide_Character := Wide_Wide_Character'Val (181);
+    Pilcrow_Sign
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (182);
+    Paragraph_Sign
+                : Wide_Wide_Character renames Pilcrow_Sign;
+    Middle_Dot  : constant Wide_Wide_Character := Wide_Wide_Character'Val (183);
+    LC_Z_Caron  : constant Wide_Wide_Character := Wide_Wide_Character'Val (184);
+    Superscript_One
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (185);
+    Masculine_Ordinal_Indicator
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (186);
+    Right_Angle_Quotation
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (187);
+    UC_Ligature_OE
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (188);
+    LC_Ligature_OE
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (189);
+    UC_Y_Diaeresis
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (190);
+    Inverted_Question
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (191);
+ 
+    --  Wide_Wide_Character positions 192 (16#C0#) .. 207 (16#CF#)
+ 
+    UC_A_Grave  : constant Wide_Wide_Character := Wide_Wide_Character'Val (192);
+    UC_A_Acute  : constant Wide_Wide_Character := Wide_Wide_Character'Val (193);
+    UC_A_Circumflex
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (194);
+    UC_A_Tilde  : constant Wide_Wide_Character := Wide_Wide_Character'Val (195);
+    UC_A_Diaeresis
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (196);
+    UC_A_Ring   : constant Wide_Wide_Character := Wide_Wide_Character'Val (197);
+    UC_AE_Diphthong
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (198);
+    UC_C_Cedilla
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (199);
+    UC_E_Grave  : constant Wide_Wide_Character := Wide_Wide_Character'Val (200);
+    UC_E_Acute  : constant Wide_Wide_Character := Wide_Wide_Character'Val (201);
+    UC_E_Circumflex
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (202);
+    UC_E_Diaeresis
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (203);
+    UC_I_Grave  : constant Wide_Wide_Character := Wide_Wide_Character'Val (204);
+    UC_I_Acute  : constant Wide_Wide_Character := Wide_Wide_Character'Val (205);
+    UC_I_Circumflex
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (206);
+    UC_I_Diaeresis
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (207);
+ 
+    --  Wide_Wide_Character positions 208 (16#D0#) .. 223 (16#DF#)
+ 
+    UC_Icelandic_Eth
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (208);
+    UC_N_Tilde  : constant Wide_Wide_Character := Wide_Wide_Character'Val (209);
+    UC_O_Grave  : constant Wide_Wide_Character := Wide_Wide_Character'Val (210);
+    UC_O_Acute  : constant Wide_Wide_Character := Wide_Wide_Character'Val (211);
+    UC_O_Circumflex
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (212);
+    UC_O_Tilde  : constant Wide_Wide_Character := Wide_Wide_Character'Val (213);
+    UC_O_Diaeresis
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (214);
+    Multiplication_Sign
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (215);
+    UC_O_Oblique_Stroke
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (216);
+    UC_U_Grave  : constant Wide_Wide_Character := Wide_Wide_Character'Val (217);
+    UC_U_Acute  : constant Wide_Wide_Character := Wide_Wide_Character'Val (218);
+    UC_U_Circumflex
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (219);
+    UC_U_Diaeresis
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (220);
+    UC_Y_Acute  : constant Wide_Wide_Character := Wide_Wide_Character'Val (221);
+    UC_Icelandic_Thorn
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (222);
+    LC_German_Sharp_S
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (223);
+ 
+    --  Wide_Wide_Character positions 224 (16#E0#) .. 239 (16#EF#)
+ 
+    LC_A_Grave  : constant Wide_Wide_Character := Wide_Wide_Character'Val (224);
+    LC_A_Acute  : constant Wide_Wide_Character := Wide_Wide_Character'Val (225);
+    LC_A_Circumflex
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (226);
+    LC_A_Tilde  : constant Wide_Wide_Character := Wide_Wide_Character'Val (227);
+    LC_A_Diaeresis
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (228);
+    LC_A_Ring   : constant Wide_Wide_Character := Wide_Wide_Character'Val (229);
+    LC_AE_Diphthong
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (230);
+    LC_C_Cedilla
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (231);
+    LC_E_Grave  : constant Wide_Wide_Character := Wide_Wide_Character'Val (232);
+    LC_E_Acute  : constant Wide_Wide_Character := Wide_Wide_Character'Val (233);
+    LC_E_Circumflex
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (234);
+    LC_E_Diaeresis
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (235);
+    LC_I_Grave  : constant Wide_Wide_Character := Wide_Wide_Character'Val (236);
+    LC_I_Acute  : constant Wide_Wide_Character := Wide_Wide_Character'Val (237);
+    LC_I_Circumflex
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (238);
+    LC_I_Diaeresis
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (239);
+ 
+    --  Wide_Wide_Character positions 240 (16#F0#) .. 255 (16#FF)
+ 
+    LC_Icelandic_Eth
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (240);
+    LC_N_Tilde  : constant Wide_Wide_Character := Wide_Wide_Character'Val (241);
+    LC_O_Grave  : constant Wide_Wide_Character := Wide_Wide_Character'Val (242);
+    LC_O_Acute  : constant Wide_Wide_Character := Wide_Wide_Character'Val (243);
+    LC_O_Circumflex
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (244);
+    LC_O_Tilde  : constant Wide_Wide_Character := Wide_Wide_Character'Val (245);
+    LC_O_Diaeresis
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (246);
+    Division_Sign
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (247);
+    LC_O_Oblique_Stroke
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (248);
+    LC_U_Grave  : constant Wide_Wide_Character := Wide_Wide_Character'Val (249);
+    LC_U_Acute  : constant Wide_Wide_Character := Wide_Wide_Character'Val (250);
+    LC_U_Circumflex
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (251);
+    LC_U_Diaeresis
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (252);
+    LC_Y_Acute  : constant Wide_Wide_Character := Wide_Wide_Character'Val (253);
+    LC_Icelandic_Thorn
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (254);
+    LC_Y_Diaeresis
+                : constant Wide_Wide_Character := Wide_Wide_Character'Val (255);
+ 
+    ------------------------------------------------
+    -- Summary of Changes from Latin-1 => Latin-9 --
+    ------------------------------------------------
+ 
+    --   164     Currency                => Euro_Sign
+    --   166     Broken_Bar              => UC_S_Caron
+    --   168     Diaeresis               => LC_S_Caron
+    --   180     Acute                   => UC_Z_Caron
+    --   184     Cedilla                 => LC_Z_Caron
+    --   188     Fraction_One_Quarter    => UC_Ligature_OE
+    --   189     Fraction_One_Half       => LC_Ligature_OE
+    --   190     Fraction_Three_Quarters => UC_Y_Diaeresis
+ 
+ end Ada.Characters.Wide_Wide_Latin_9;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-cidlli.adb gcc-4.0.0/gcc/ada/a-cidlli.adb
*** gcc-3.4.3/gcc/ada/a-cidlli.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-cidlli.adb	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,1314 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --              ADA.CONTAINERS.INDEFINITE_DOUBLY_LINKED_LISTS               --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ 
+ with System;  use type System.Address;
+ with Ada.Unchecked_Deallocation;
+ 
+ package body Ada.Containers.Indefinite_Doubly_Linked_Lists is
+ 
+    procedure Free is
+      new Ada.Unchecked_Deallocation (Node_Type, Node_Access);
+ 
+    procedure Free is
+      new Ada.Unchecked_Deallocation (Element_Type, Element_Access);
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    procedure Delete_Node
+      (Container : in out List;
+       Node      : in out Node_Access);
+ 
+    procedure Insert_Internal
+      (Container : in out List;
+       Before    : Node_Access;
+       New_Node  : Node_Access);
+ 
+    ---------
+    -- "=" --
+    ---------
+ 
+    function "=" (Left, Right : List) return Boolean is
+       L : Node_Access;
+       R : Node_Access;
+ 
+    begin
+       if Left'Address = Right'Address then
+          return True;
+       end if;
+ 
+       if Left.Length /= Right.Length then
+          return False;
+       end if;
+ 
+       L := Left.First;
+       R := Right.First;
+       for J in 1 .. Left.Length loop
+          if L.Element = null then
+             if R.Element /= null then
+                return False;
+             end if;
+ 
+          elsif R.Element = null then
+             return False;
+ 
+          elsif L.Element.all /= R.Element.all then
+             return False;
+          end if;
+ 
+          L := L.Next;
+          R := R.Next;
+       end loop;
+ 
+       return True;
+    end "=";
+ 
+    ------------
+    -- Adjust --
+    ------------
+ 
+    procedure Adjust (Container : in out List) is
+       Src : Node_Access := Container.First;
+       Dst : Node_Access;
+ 
+    begin
+       if Src = null then
+          pragma Assert (Container.Last = null);
+          pragma Assert (Container.Length = 0);
+          return;
+       end if;
+ 
+       pragma Assert (Container.First.Prev = null);
+       pragma Assert (Container.Last.Next = null);
+       pragma Assert (Container.Length > 0);
+ 
+       Container.First := null;
+       Container.Last := null;
+       Container.Length := 0;
+ 
+       Dst := new Node_Type'(null, null, null);
+ 
+       if Src.Element /= null then
+          begin
+             Dst.Element := new Element_Type'(Src.Element.all);
+          exception
+             when others =>
+                Free (Dst);
+                raise;
+          end;
+       end if;
+ 
+       Container.First := Dst;
+ 
+       Container.Last := Dst;
+       loop
+          Container.Length := Container.Length + 1;
+          Src := Src.Next;
+          exit when Src = null;
+ 
+          Dst := new Node_Type'(null, Prev => Container.Last, Next => null);
+ 
+          if Src.Element /= null then
+             begin
+                Dst.Element := new Element_Type'(Src.Element.all);
+             exception
+                when others =>
+                   Free (Dst);
+                   raise;
+             end;
+          end if;
+ 
+          Container.Last.Next := Dst;
+          Container.Last := Dst;
+       end loop;
+    end Adjust;
+ 
+    ------------
+    -- Append --
+    ------------
+ 
+    procedure Append
+      (Container : in out List;
+       New_Item  : Element_Type;
+       Count     : Count_Type := 1)
+    is
+    begin
+       Insert (Container, No_Element, New_Item, Count);
+    end Append;
+ 
+    -----------
+    -- Clear --
+    -----------
+ 
+    procedure Clear (Container : in out List) is
+    begin
+       Delete_Last (Container, Count => Container.Length);
+    end Clear;
+ 
+    --------------
+    -- Contains --
+    --------------
+ 
+    function Contains
+      (Container : List;
+       Item      : Element_Type) return Boolean is
+    begin
+       return Find (Container, Item) /= No_Element;
+    end Contains;
+ 
+    ------------
+    -- Delete --
+    ------------
+ 
+    procedure Delete
+      (Container : in out List;
+       Position  : in out Cursor;
+       Count     : Count_Type := 1)
+    is
+    begin
+       if Position = No_Element then
+          return;
+       end if;
+ 
+       if Position.Container /= List_Access'(Container'Unchecked_Access) then
+          raise Program_Error;
+       end if;
+ 
+       for Index in 1 .. Count loop
+          Delete_Node (Container, Position.Node);
+ 
+          if Position.Node = null then
+             Position.Container := null;
+             return;
+          end if;
+       end loop;
+    end Delete;
+ 
+    ------------------
+    -- Delete_First --
+    ------------------
+ 
+    procedure Delete_First
+      (Container : in out List;
+       Count     : Count_Type := 1)
+    is
+       Node : Node_Access := Container.First;
+    begin
+       for J in 1 .. Count_Type'Min (Count, Container.Length) loop
+          Delete_Node (Container, Node);
+       end loop;
+    end Delete_First;
+ 
+    -----------------
+    -- Delete_Last --
+    -----------------
+ 
+    procedure Delete_Last
+      (Container : in out List;
+       Count     : Count_Type := 1)
+    is
+       Node : Node_Access;
+    begin
+       for J in 1 .. Count_Type'Min (Count, Container.Length) loop
+          Node := Container.Last;
+          Delete_Node (Container, Node);
+       end loop;
+    end Delete_Last;
+ 
+    -----------------
+    -- Delete_Node --
+    -----------------
+ 
+    procedure Delete_Node
+      (Container : in out List;
+       Node      : in out Node_Access)
+    is
+       X : Node_Access := Node;
+ 
+    begin
+       Node := X.Next;
+       Container.Length := Container.Length - 1;
+ 
+       if X = Container.First then
+          Container.First := X.Next;
+ 
+          if X = Container.Last then
+             pragma Assert (Container.First = null);
+             pragma Assert (Container.Length = 0);
+             Container.Last := null;
+          else
+             pragma Assert (Container.Length > 0);
+             Container.First.Prev := null;
+          end if;
+ 
+       elsif X = Container.Last then
+          pragma Assert (Container.Length > 0);
+ 
+          Container.Last := X.Prev;
+          Container.Last.Next := null;
+ 
+       else
+          pragma Assert (Container.Length > 0);
+ 
+          X.Next.Prev := X.Prev;
+          X.Prev.Next := X.Next;
+ 
+       end if;
+ 
+       Free (X.Element);
+       Free (X);
+    end Delete_Node;
+ 
+    -------------
+    -- Element --
+    -------------
+ 
+    function Element (Position : Cursor) return Element_Type is
+    begin
+       return Position.Node.Element.all;
+    end Element;
+ 
+    ----------
+    -- Find --
+    ----------
+ 
+    function Find
+      (Container : List;
+       Item      : Element_Type;
+       Position  : Cursor := No_Element) return Cursor
+    is
+       Node : Node_Access := Position.Node;
+ 
+    begin
+       if Node = null then
+          Node := Container.First;
+       elsif Position.Container /= List_Access'(Container'Unchecked_Access) then
+          raise Program_Error;
+       end if;
+ 
+       while Node /= null loop
+          if Node.Element /= null
+            and then Node.Element.all = Item
+          then
+             return Cursor'(Container'Unchecked_Access, Node);
+          end if;
+ 
+          Node := Node.Next;
+       end loop;
+ 
+       return No_Element;
+    end Find;
+ 
+    -----------
+    -- First --
+    -----------
+ 
+    function First (Container : List) return Cursor is
+    begin
+       if Container.First = null then
+          return No_Element;
+       end if;
+ 
+       return Cursor'(Container'Unchecked_Access, Container.First);
+    end First;
+ 
+    -------------------
+    -- First_Element --
+    -------------------
+ 
+    function First_Element (Container : List) return Element_Type is
+    begin
+       return Container.First.Element.all;
+    end First_Element;
+ 
+    -------------------
+    -- Generic_Merge --
+    -------------------
+ 
+    procedure Generic_Merge
+      (Target : in out List;
+       Source : in out List)
+    is
+       LI : Cursor;
+       RI : Cursor;
+ 
+    begin
+       if Target'Address = Source'Address then
+          return;
+       end if;
+ 
+       LI := First (Target);
+       RI := First (Source);
+       while RI.Node /= null loop
+          if LI.Node = null then
+             Splice (Target, No_Element, Source);
+             return;
+          end if;
+ 
+          if LI.Node.Element = null then
+             LI.Node := LI.Node.Next;
+ 
+          elsif RI.Node.Element = null
+            or else RI.Node.Element.all < LI.Node.Element.all
+          then
+             declare
+                RJ : constant Cursor := RI;
+             begin
+                RI.Node := RI.Node.Next;
+                Splice (Target, LI, Source, RJ);
+             end;
+ 
+          else
+             LI.Node := LI.Node.Next;
+          end if;
+       end loop;
+    end Generic_Merge;
+ 
+    ------------------
+    -- Generic_Sort --
+    ------------------
+ 
+    procedure Generic_Sort (Container : in out List) is
+       procedure Partition (Pivot : Node_Access; Back  : Node_Access);
+ 
+       procedure Sort (Front, Back : Node_Access);
+ 
+       ---------------
+       -- Partition --
+       ---------------
+ 
+       procedure Partition (Pivot : Node_Access; Back  : Node_Access) is
+          Node : Node_Access := Pivot.Next;
+ 
+       begin
+          while Node /= Back loop
+             if Pivot.Element = null then
+                Node := Node.Next;
+ 
+             elsif Node.Element = null
+               or else Node.Element.all < Pivot.Element.all
+             then
+                declare
+                   Prev : constant Node_Access := Node.Prev;
+                   Next : constant Node_Access := Node.Next;
+                begin
+                   Prev.Next := Next;
+ 
+                   if Next = null then
+                      Container.Last := Prev;
+                   else
+                      Next.Prev := Prev;
+                   end if;
+ 
+                   Node.Next := Pivot;
+                   Node.Prev := Pivot.Prev;
+ 
+                   Pivot.Prev := Node;
+ 
+                   if Node.Prev = null then
+                      Container.First := Node;
+                   else
+                      Node.Prev.Next := Node;
+                   end if;
+ 
+                   Node := Next;
+                end;
+ 
+             else
+                Node := Node.Next;
+             end if;
+          end loop;
+       end Partition;
+ 
+       ----------
+       -- Sort --
+       ----------
+ 
+       procedure Sort (Front, Back : Node_Access) is
+          Pivot : Node_Access;
+ 
+       begin
+          if Front = null then
+             Pivot := Container.First;
+          else
+             Pivot := Front.Next;
+          end if;
+ 
+          if Pivot /= Back then
+             Partition (Pivot, Back);
+             Sort (Front, Pivot);
+             Sort (Pivot, Back);
+          end if;
+       end Sort;
+ 
+    --  Start of processing for Generic_Sort
+ 
+    begin
+       Sort (Front => null, Back => null);
+ 
+       pragma Assert (Container.Length = 0
+                        or else (Container.First.Prev = null
+                                   and Container.Last.Next = null));
+    end Generic_Sort;
+ 
+    -----------------
+    -- Has_Element --
+    -----------------
+ 
+    function Has_Element (Position : Cursor) return Boolean is
+    begin
+       return Position.Container /= null and then Position.Node /= null;
+    end Has_Element;
+ 
+    ------------
+    -- Insert --
+    ------------
+ 
+    procedure Insert
+      (Container : in out List;
+       Before    : Cursor;
+       New_Item  : Element_Type;
+       Position  : out Cursor;
+       Count     : Count_Type := 1)
+    is
+       New_Node : Node_Access;
+ 
+    begin
+       if Before.Container /= null
+         and then Before.Container /= List_Access'(Container'Unchecked_Access)
+       then
+          raise Program_Error;
+       end if;
+ 
+       if Count = 0 then
+          Position := Before;
+          return;
+       end if;
+ 
+       declare
+          Element : Element_Access := new Element_Type'(New_Item);
+       begin
+          New_Node := new Node_Type'(Element, null, null);
+       exception
+          when others =>
+             Free (Element);
+             raise;
+       end;
+ 
+       Insert_Internal (Container, Before.Node, New_Node);
+       Position := Cursor'(Before.Container, New_Node);
+ 
+       for J in Count_Type'(2) .. Count loop
+ 
+          declare
+             Element : Element_Access := new Element_Type'(New_Item);
+          begin
+             New_Node := new Node_Type'(Element, null, null);
+          exception
+             when others =>
+                Free (Element);
+                raise;
+          end;
+ 
+          Insert_Internal (Container, Before.Node, New_Node);
+       end loop;
+    end Insert;
+ 
+    procedure Insert
+      (Container : in out List;
+       Before    : Cursor;
+       New_Item  : Element_Type;
+       Count     : Count_Type := 1)
+    is
+       Position : Cursor;
+    begin
+       Insert (Container, Before, New_Item, Position, Count);
+    end Insert;
+ 
+    ---------------------
+    -- Insert_Internal --
+    ---------------------
+ 
+    procedure Insert_Internal
+      (Container : in out List;
+       Before    : Node_Access;
+       New_Node  : Node_Access)
+    is
+    begin
+       if Container.Length = 0 then
+          pragma Assert (Before = null);
+          pragma Assert (Container.First = null);
+          pragma Assert (Container.Last = null);
+ 
+          Container.First := New_Node;
+          Container.Last := New_Node;
+ 
+       elsif Before = null then
+          pragma Assert (Container.Last.Next = null);
+ 
+          Container.Last.Next := New_Node;
+          New_Node.Prev := Container.Last;
+ 
+          Container.Last := New_Node;
+ 
+       elsif Before = Container.First then
+          pragma Assert (Container.First.Prev = null);
+ 
+          Container.First.Prev := New_Node;
+          New_Node.Next := Container.First;
+ 
+          Container.First := New_Node;
+ 
+       else
+          pragma Assert (Container.First.Prev = null);
+          pragma Assert (Container.Last.Next = null);
+ 
+          New_Node.Next := Before;
+          New_Node.Prev := Before.Prev;
+ 
+          Before.Prev.Next := New_Node;
+          Before.Prev := New_Node;
+       end if;
+ 
+       Container.Length := Container.Length + 1;
+    end Insert_Internal;
+ 
+    --------------
+    -- Is_Empty --
+    --------------
+ 
+    function Is_Empty (Container : List) return Boolean is
+    begin
+       return Container.Length = 0;
+    end Is_Empty;
+ 
+    -------------
+    -- Iterate --
+    -------------
+ 
+    procedure Iterate
+      (Container : List;
+       Process   : not null access procedure (Position : in Cursor))
+    is
+       Node : Node_Access := Container.First;
+    begin
+       while Node /= null loop
+          Process (Cursor'(Container'Unchecked_Access, Node));
+          Node := Node.Next;
+       end loop;
+    end Iterate;
+ 
+    ----------
+    -- Move --
+    ----------
+ 
+    procedure Move (Target : in out List; Source : in out List) is
+    begin
+       if Target'Address = Source'Address then
+          return;
+       end if;
+ 
+       if Target.Length > 0 then
+          raise Constraint_Error;
+       end if;
+ 
+       Target.First := Source.First;
+       Source.First := null;
+ 
+       Target.Last := Source.Last;
+       Source.Last := null;
+ 
+       Target.Length := Source.Length;
+       Source.Length := 0;
+    end Move;
+ 
+    ----------
+    -- Last --
+    ----------
+ 
+    function Last (Container : List) return Cursor is
+    begin
+       if Container.Last = null then
+          return No_Element;
+       end if;
+ 
+       return Cursor'(Container'Unchecked_Access, Container.Last);
+    end Last;
+ 
+    ------------------
+    -- Last_Element --
+    ------------------
+ 
+    function Last_Element (Container : List) return Element_Type is
+    begin
+       return Container.Last.Element.all;
+    end Last_Element;
+ 
+    ------------
+    -- Length --
+    ------------
+ 
+    function Length (Container : List) return Count_Type is
+    begin
+       return Container.Length;
+    end Length;
+ 
+    ----------
+    -- Next --
+    ----------
+ 
+    procedure Next (Position : in out Cursor) is
+    begin
+       if Position.Node = null then
+          return;
+       end if;
+ 
+       Position.Node := Position.Node.Next;
+ 
+       if Position.Node = null then
+          Position.Container := null;
+       end if;
+    end Next;
+ 
+    function Next (Position : Cursor) return Cursor is
+    begin
+       if Position.Node = null then
+          return No_Element;
+       end if;
+ 
+       declare
+          Next_Node : constant Node_Access := Position.Node.Next;
+       begin
+          if Next_Node = null then
+             return No_Element;
+          end if;
+ 
+          return Cursor'(Position.Container, Next_Node);
+       end;
+    end Next;
+ 
+    -------------
+    -- Prepend --
+    -------------
+ 
+    procedure Prepend
+      (Container : in out List;
+       New_Item  : Element_Type;
+       Count     : Count_Type := 1)
+    is
+    begin
+       Insert (Container, First (Container), New_Item, Count);
+    end Prepend;
+ 
+    --------------
+    -- Previous --
+    --------------
+ 
+    procedure Previous (Position : in out Cursor) is
+    begin
+       if Position.Node = null then
+          return;
+       end if;
+ 
+       Position.Node := Position.Node.Prev;
+ 
+       if Position.Node = null then
+          Position.Container := null;
+       end if;
+    end Previous;
+ 
+    function Previous (Position : Cursor) return Cursor is
+    begin
+       if Position.Node = null then
+          return No_Element;
+       end if;
+ 
+       declare
+          Prev_Node : constant Node_Access := Position.Node.Prev;
+       begin
+          if Prev_Node = null then
+             return No_Element;
+          end if;
+ 
+          return Cursor'(Position.Container, Prev_Node);
+       end;
+    end Previous;
+ 
+    -------------------
+    -- Query_Element --
+    -------------------
+ 
+    procedure Query_Element
+      (Position : Cursor;
+       Process  : not null access procedure (Element : in Element_Type))
+    is
+    begin
+       Process (Position.Node.Element.all);
+    end Query_Element;
+ 
+    ----------
+    -- Read --
+    ----------
+ 
+    procedure Read
+      (Stream : access Root_Stream_Type'Class;
+       Item   : out List)
+    is
+       N : Count_Type'Base;
+       X : Node_Access;
+ 
+    begin
+       Clear (Item);  --  ???
+ 
+       Count_Type'Base'Read (Stream, N);
+ 
+       if N = 0 then
+          return;
+       end if;
+ 
+       X := new Node_Type;
+ 
+       begin
+          X.Element := new Element_Type'(Element_Type'Input (Stream));
+       exception
+          when others =>
+             Free (X);
+             raise;
+       end;
+ 
+       Item.First := X;
+ 
+       Item.Last := X;
+       loop
+          Item.Length := Item.Length + 1;
+          exit when Item.Length = N;
+ 
+          X := new Node_Type;
+ 
+          begin
+             X.Element := new Element_Type'(Element_Type'Input (Stream));
+          exception
+             when others =>
+                Free (X);
+                raise;
+          end;
+ 
+          X.Prev := Item.Last;
+          Item.Last.Next := X;
+          Item.Last := X;
+       end loop;
+    end Read;
+ 
+    ---------------------
+    -- Replace_Element --
+    ---------------------
+ 
+    procedure Replace_Element
+      (Position : Cursor;
+       By       : Element_Type)
+    is
+       X : Element_Access := Position.Node.Element;
+    begin
+       Position.Node.Element := new Element_Type'(By);
+       Free (X);
+    end Replace_Element;
+ 
+    ------------------
+    -- Reverse_Find --
+    ------------------
+ 
+    function Reverse_Find
+      (Container : List;
+       Item      : Element_Type;
+       Position  : Cursor := No_Element) return Cursor
+    is
+       Node : Node_Access := Position.Node;
+ 
+    begin
+       if Node = null then
+          Node := Container.Last;
+       elsif Position.Container /= List_Access'(Container'Unchecked_Access) then
+          raise Program_Error;
+       end if;
+ 
+       while Node /= null loop
+          if Node.Element /= null
+            and then Node.Element.all = Item
+          then
+             return Cursor'(Container'Unchecked_Access, Node);
+          end if;
+ 
+          Node := Node.Prev;
+       end loop;
+ 
+       return No_Element;
+    end Reverse_Find;
+ 
+    ---------------------
+    -- Reverse_Iterate --
+    ---------------------
+ 
+    procedure Reverse_Iterate
+      (Container : List;
+       Process   : not null access procedure (Position : in Cursor))
+    is
+       Node : Node_Access := Container.Last;
+ 
+    begin
+       while Node /= null loop
+          Process (Cursor'(Container'Unchecked_Access, Node));
+          Node := Node.Prev;
+       end loop;
+    end Reverse_Iterate;
+ 
+    ------------------
+    -- Reverse_List --
+    ------------------
+ 
+    procedure Reverse_List (Container : in out List) is
+       I : Node_Access := Container.First;
+       J : Node_Access := Container.Last;
+ 
+       procedure Swap (L, R : Node_Access);
+ 
+       ----------
+       -- Swap --
+       ----------
+ 
+       procedure Swap (L, R : Node_Access) is
+          LN : constant Node_Access := L.Next;
+          LP : constant Node_Access := L.Prev;
+ 
+          RN : constant Node_Access := R.Next;
+          RP : constant Node_Access := R.Prev;
+ 
+       begin
+          if LP /= null then
+             LP.Next := R;
+          end if;
+ 
+          if RN /= null then
+             RN.Prev := L;
+          end if;
+ 
+          L.Next := RN;
+          R.Prev := LP;
+ 
+          if LN = R then
+             pragma Assert (RP = L);
+ 
+             L.Prev := R;
+             R.Next := L;
+ 
+          else
+             L.Prev := RP;
+             RP.Next := L;
+ 
+             R.Next := LN;
+             LN.Prev := R;
+          end if;
+       end Swap;
+ 
+    --  Start of processing for Reverse_List
+ 
+    begin
+       if Container.Length <= 1 then
+          return;
+       end if;
+ 
+       Container.First := J;
+       Container.Last := I;
+       loop
+          Swap (L => I, R => J);
+ 
+          J := J.Next;
+          exit when I = J;
+ 
+          I := I.Prev;
+          exit when I = J;
+ 
+          Swap (L => J, R => I);
+ 
+          I := I.Next;
+          exit when I = J;
+ 
+          J := J.Prev;
+          exit when I = J;
+       end loop;
+ 
+       pragma Assert (Container.First.Prev = null);
+       pragma Assert (Container.Last.Next = null);
+    end Reverse_List;
+ 
+    ------------
+    -- Splice --
+    ------------
+ 
+    procedure Splice
+      (Target : in out List;
+       Before : Cursor;
+       Source : in out List)
+    is
+    begin
+       if Before.Container /= null
+         and then Before.Container /= List_Access'(Target'Unchecked_Access)
+       then
+          raise Program_Error;
+       end if;
+ 
+       if Target'Address = Source'Address
+         or else Source.Length = 0
+       then
+          return;
+       end if;
+ 
+       if Target.Length = 0 then
+          pragma Assert (Before = No_Element);
+ 
+          Target.First := Source.First;
+          Target.Last := Source.Last;
+ 
+       elsif Before.Node = null then
+          pragma Assert (Target.Last.Next = null);
+ 
+          Target.Last.Next := Source.First;
+          Source.First.Prev := Target.Last;
+ 
+          Target.Last := Source.Last;
+ 
+       elsif Before.Node = Target.First then
+          pragma Assert (Target.First.Prev = null);
+ 
+          Source.Last.Next := Target.First;
+          Target.First.Prev := Source.Last;
+ 
+          Target.First := Source.First;
+ 
+       else
+          Before.Node.Prev.Next := Source.First;
+          Source.First.Prev := Before.Node.Prev;
+ 
+          Before.Node.Prev := Source.Last;
+          Source.Last.Next := Before.Node;
+       end if;
+ 
+       Source.First := null;
+       Source.Last := null;
+ 
+       Target.Length := Target.Length + Source.Length;
+       Source.Length := 0;
+    end Splice;
+ 
+    procedure Splice
+      (Target   : in out List;
+       Before   : Cursor;
+       Position : Cursor)
+    is
+       X : Node_Access := Position.Node;
+ 
+    begin
+       if Before.Container /= null
+         and then Before.Container /= List_Access'(Target'Unchecked_Access)
+       then
+          raise Program_Error;
+       end if;
+ 
+       if Position.Container /= null
+         and then Position.Container /= List_Access'(Target'Unchecked_Access)
+       then
+          raise Program_Error;
+       end if;
+ 
+       if X = null
+         or else X = Before.Node
+         or else X.Next = Before.Node
+       then
+          return;
+       end if;
+ 
+       pragma Assert (Target.Length > 0);
+ 
+       if Before.Node = null then
+          pragma Assert (X /= Target.Last);
+ 
+          if X = Target.First then
+             Target.First := X.Next;
+             Target.First.Prev := null;
+          else
+             X.Prev.Next := X.Next;
+             X.Next.Prev := X.Prev;
+          end if;
+ 
+          Target.Last.Next := X;
+          X.Prev := Target.Last;
+ 
+          Target.Last := X;
+          Target.Last.Next := null;
+ 
+          return;
+       end if;
+ 
+       if Before.Node = Target.First then
+          pragma Assert (X /= Target.First);
+ 
+          if X = Target.Last then
+             Target.Last := X.Prev;
+             Target.Last.Next := null;
+          else
+             X.Prev.Next := X.Next;
+             X.Next.Prev := X.Prev;
+          end if;
+ 
+          Target.First.Prev := X;
+          X.Next := Target.First;
+ 
+          Target.First := X;
+          Target.First.Prev := null;
+ 
+          return;
+       end if;
+ 
+       if X = Target.First then
+          Target.First := X.Next;
+          Target.First.Prev := null;
+ 
+       elsif X = Target.Last then
+          Target.Last := X.Prev;
+          Target.Last.Next := null;
+ 
+       else
+          X.Prev.Next := X.Next;
+          X.Next.Prev := X.Prev;
+       end if;
+ 
+       Before.Node.Prev.Next := X;
+       X.Prev := Before.Node.Prev;
+ 
+       Before.Node.Prev := X;
+       X.Next := Before.Node;
+    end Splice;
+ 
+    procedure Splice
+      (Target   : in out List;
+       Before   : Cursor;
+       Source   : in out List;
+       Position : Cursor)
+    is
+       X : Node_Access := Position.Node;
+ 
+    begin
+       if Target'Address = Source'Address then
+          Splice (Target, Before, Position);
+          return;
+       end if;
+ 
+       if Before.Container /= null
+         and then Before.Container /= List_Access'(Target'Unchecked_Access)
+       then
+          raise Program_Error;
+       end if;
+ 
+       if Position.Container /= null
+         and then Position.Container /= List_Access'(Source'Unchecked_Access)
+       then
+          raise Program_Error;
+       end if;
+ 
+       if X = null then
+          return;
+       end if;
+ 
+       pragma Assert (Source.Length > 0);
+       pragma Assert (Source.First.Prev = null);
+       pragma Assert (Source.Last.Next = null);
+ 
+       if X = Source.First then
+          Source.First := X.Next;
+          Source.First.Prev := null;
+ 
+          if X = Source.Last then
+             pragma Assert (Source.First = null);
+             pragma Assert (Source.Length = 1);
+             Source.Last := null;
+          end if;
+ 
+       elsif X = Source.Last then
+          Source.Last := X.Prev;
+          Source.Last.Next := null;
+ 
+       else
+          X.Prev.Next := X.Next;
+          X.Next.Prev := X.Prev;
+       end if;
+ 
+       if Target.Length = 0 then
+          pragma Assert (Before = No_Element);
+          pragma Assert (Target.First = null);
+          pragma Assert (Target.Last = null);
+ 
+          Target.First := X;
+          Target.Last := X;
+ 
+       elsif Before.Node = null then
+          Target.Last.Next := X;
+          X.Next := Target.Last;
+ 
+          Target.Last := X;
+          Target.Last.Next := null;
+ 
+       elsif Before.Node = Target.First then
+          Target.First.Prev := X;
+          X.Next := Target.First;
+ 
+          Target.First := X;
+          Target.First.Prev := null;
+ 
+       else
+          Before.Node.Prev.Next := X;
+          X.Prev := Before.Node.Prev;
+ 
+          Before.Node.Prev := X;
+          X.Next := Before.Node;
+       end if;
+ 
+       Target.Length := Target.Length + 1;
+       Source.Length := Source.Length - 1;
+    end Splice;
+ 
+    ----------
+    -- Swap --
+    ----------
+ 
+    procedure Swap (I, J : Cursor) is
+ 
+       --  Is this op legal when I and J designate elements in different
+       --  containers, or should it raise an exception (e.g. Program_Error).
+ 
+       EI : constant Element_Access := I.Node.Element;
+ 
+    begin
+       I.Node.Element := J.Node.Element;
+       J.Node.Element := EI;
+    end Swap;
+ 
+    ----------------
+    -- Swap_Links --
+    ----------------
+ 
+    procedure Swap_Links
+      (Container : in out List;
+       I, J      : Cursor)
+    is
+    begin
+       if I = No_Element
+         or else J = No_Element
+       then
+          raise Constraint_Error;
+       end if;
+ 
+       if I.Container /= List_Access'(Container'Unchecked_Access) then
+          raise Program_Error;
+       end if;
+ 
+       if J.Container /= I.Container then
+          raise Program_Error;
+       end if;
+ 
+       pragma Assert (Container.Length >= 1);
+ 
+       if I.Node = J.Node then
+          return;
+       end if;
+ 
+       pragma Assert (Container.Length >= 2);
+ 
+       declare
+          I_Next : constant Cursor := Next (I);
+ 
+       begin
+          if I_Next = J then
+             Splice (Container, Before => I, Position => J);
+ 
+          else
+             declare
+                J_Next : constant Cursor := Next (J);
+             begin
+                if J_Next = I then
+                   Splice (Container, Before => J, Position => I);
+ 
+                else
+                   pragma Assert (Container.Length >= 3);
+ 
+                   Splice (Container, Before => I_Next, Position => J);
+                   Splice (Container, Before => J_Next, Position => I);
+                end if;
+             end;
+          end if;
+       end;
+    end Swap_Links;
+ 
+    --------------------
+    -- Update_Element --
+    --------------------
+ 
+    procedure Update_Element
+      (Position : Cursor;
+       Process  : not null access procedure (Element : in out Element_Type))
+    is
+    begin
+       Process (Position.Node.Element.all);
+    end Update_Element;
+ 
+    -----------
+    -- Write --
+    -----------
+ 
+    procedure Write
+      (Stream : access Root_Stream_Type'Class;
+       Item   : List)
+    is
+       Node : Node_Access := Item.First;
+    begin
+       Count_Type'Base'Write (Stream, Item.Length);
+       while Node /= null loop
+          Element_Type'Output (Stream, Node.Element.all);  --  X.all
+          Node := Node.Next;
+       end loop;
+    end Write;
+ 
+ end Ada.Containers.Indefinite_Doubly_Linked_Lists;
+ 
+ 
diff -Nrcpad gcc-3.4.3/gcc/ada/a-cidlli.ads gcc-4.0.0/gcc/ada/a-cidlli.ads
*** gcc-3.4.3/gcc/ada/a-cidlli.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-cidlli.ads	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,251 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --              ADA.CONTAINERS.INDEFINITE_DOUBLY_LINKED_LISTS               --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Finalization;
+ with Ada.Streams;
+ 
+ generic
+ 
+    type Element_Type (<>) is private;
+ 
+    with function "=" (Left, Right : Element_Type)
+       return Boolean is <>;
+ 
+ package Ada.Containers.Indefinite_Doubly_Linked_Lists is
+    pragma Preelaborate (Indefinite_Doubly_Linked_Lists);
+ 
+    type List is tagged private;
+ 
+    type Cursor is private;
+ 
+    Empty_List : constant List;
+ 
+    No_Element : constant Cursor;
+ 
+    function "=" (Left, Right : List) return Boolean;
+ 
+    function Length (Container : List) return Count_Type;
+ 
+    function Is_Empty (Container : List) return Boolean;
+ 
+    procedure Clear (Container : in out List);
+ 
+    function Element (Position : Cursor)
+       return Element_Type;
+ 
+    procedure Query_Element
+      (Position : Cursor;
+       Process  : not null access procedure (Element : Element_Type));
+ 
+    procedure Update_Element
+      (Position : Cursor;
+       Process  : not null access procedure (Element : in out Element_Type));
+ 
+    procedure Replace_Element
+      (Position : Cursor;
+       By       : Element_Type);
+ 
+    procedure Move
+      (Target : in out List;
+       Source : in out List);
+ 
+    procedure Prepend
+      (Container : in out List;
+       New_Item  : Element_Type;
+       Count     : Count_Type := 1);
+ 
+    procedure Append
+      (Container : in out List;
+       New_Item  : Element_Type;
+       Count     : Count_Type := 1);
+ 
+    procedure Insert
+      (Container : in out List;
+       Before    : Cursor;
+       New_Item  : Element_Type;
+       Count     : Count_Type := 1);
+ 
+    procedure Insert
+      (Container : in out List;
+       Before    : Cursor;
+       New_Item  : Element_Type;
+       Position  : out Cursor;
+       Count     : Count_Type := 1);
+ 
+    procedure Delete
+      (Container : in out List;
+       Position  : in out Cursor;
+       Count     : Count_Type := 1);
+ 
+    procedure Delete_First
+      (Container : in out List;
+       Count     : Count_Type := 1);
+ 
+    procedure Delete_Last
+      (Container : in out List;
+       Count     : Count_Type := 1);
+ 
+    generic
+       with function "<" (Left, Right : Element_Type)
+          return Boolean is <>;
+    procedure Generic_Sort (Container : in out List);
+ 
+    generic
+       with function "<" (Left, Right : Element_Type)
+          return Boolean is <>;
+    procedure Generic_Merge
+      (Target : in out List;
+       Source : in out List);
+ 
+    procedure Reverse_List (Container : in out List);
+ 
+    procedure Swap (I, J : Cursor);
+ 
+    procedure Swap_Links (Container : in out List; I, J : Cursor);
+ 
+    procedure Splice
+      (Target : in out List;
+       Before : Cursor;
+       Source : in out List);
+ 
+    procedure Splice
+      (Target   : in out List;
+       Before   : Cursor;
+       Position : Cursor);
+ 
+    procedure Splice
+      (Target   : in out List;
+       Before   : Cursor;
+       Source   : in out List;
+       Position : Cursor);
+ 
+    function First (Container : List) return Cursor;
+ 
+    function First_Element (Container : List) return Element_Type;
+ 
+    function Last (Container : List) return Cursor;
+ 
+    function Last_Element (Container : List) return Element_Type;
+ 
+    function Contains
+      (Container : List;
+       Item      : Element_Type) return Boolean;
+ 
+    function Find
+      (Container : List;
+       Item      : Element_Type;
+       Position  : Cursor := No_Element) return Cursor;
+ 
+    function Reverse_Find
+      (Container : List;
+       Item      : Element_Type;
+       Position  : Cursor := No_Element) return Cursor;
+ 
+    function Next (Position : Cursor) return Cursor;
+ 
+    function Previous (Position : Cursor) return Cursor;
+ 
+    procedure Next (Position : in out Cursor);
+ 
+    procedure Previous (Position : in out Cursor);
+ 
+    function Has_Element (Position : Cursor) return Boolean;
+ 
+    procedure Iterate
+      (Container : List;
+       Process   : not null access procedure (Position : Cursor));
+ 
+    procedure Reverse_Iterate
+      (Container : List;
+       Process   : not null access procedure (Position : Cursor));
+ 
+ private
+    type Node_Type;
+    type Node_Access is access Node_Type;
+ 
+    type Element_Access is access Element_Type;
+ 
+    type Node_Type is
+       record
+          Element : Element_Access;
+          Next    : Node_Access;
+          Prev    : Node_Access;
+       end record;
+ 
+    function "=" (L, R : Node_Type) return Boolean is abstract;
+ 
+    use Ada.Finalization;
+ 
+    type List is
+      new Controlled with record
+         First  : Node_Access;
+         Last   : Node_Access;
+         Length : Count_Type := 0;
+      end record;
+ 
+    procedure Adjust (Container : in out List);
+ 
+    procedure Finalize (Container : in out List) renames Clear;
+ 
+    use Ada.Streams;
+ 
+    procedure Read
+      (Stream : access Root_Stream_Type'Class;
+       Item   : out List);
+ 
+    for List'Read use Read;
+ 
+    procedure Write
+      (Stream : access Root_Stream_Type'Class;
+       Item   : List);
+ 
+    for List'Write use Write;
+ 
+    Empty_List : constant List := List'(Controlled with null, null, 0);
+ 
+    type List_Access is access constant List;
+    for List_Access'Storage_Size use 0;
+ 
+    type Cursor is
+       record
+          Container : List_Access;
+          Node      : Node_Access;
+       end record;
+ 
+    No_Element : constant Cursor := Cursor'(null, null);
+ 
+ end Ada.Containers.Indefinite_Doubly_Linked_Lists;
+ 
+ 
diff -Nrcpad gcc-3.4.3/gcc/ada/a-cihama.adb gcc-4.0.0/gcc/ada/a-cihama.adb
*** gcc-3.4.3/gcc/ada/a-cihama.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-cihama.adb	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,689 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                  ADA.CONTAINERS.INDEFINITE_HASHED_MAPS                   --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit has originally being developed by Matthew J Heaney.            --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Containers.Hash_Tables.Generic_Operations;
+ pragma Elaborate_All (Ada.Containers.Hash_Tables.Generic_Operations);
+ 
+ with Ada.Containers.Hash_Tables.Generic_Keys;
+ pragma Elaborate_All (Ada.Containers.Hash_Tables.Generic_Keys);
+ 
+ with Ada.Unchecked_Deallocation;
+ 
+ package body Ada.Containers.Indefinite_Hashed_Maps is
+ 
+    type Key_Access is access Key_Type;
+    type Element_Access is access Element_Type;
+ 
+    type Node_Type is limited record
+       Key     : Key_Access;
+       Element : Element_Access;
+       Next    : Node_Access;
+    end record;
+ 
+    procedure Free_Key is
+       new Ada.Unchecked_Deallocation (Key_Type, Key_Access);
+ 
+    procedure Free_Element is
+       new Ada.Unchecked_Deallocation (Element_Type, Element_Access);
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    function Copy_Node (Node : Node_Access) return Node_Access;
+    pragma Inline (Copy_Node);
+ 
+    function Equivalent_Keys
+      (Key  : Key_Type;
+       Node : Node_Access) return Boolean;
+    pragma Inline (Equivalent_Keys);
+ 
+    function Find_Equal_Key
+      (R_Map  : Map;
+       L_Node : Node_Access) return Boolean;
+ 
+    procedure Free (X : in out Node_Access);
+    pragma Inline (Free);
+ 
+    function Hash_Node (Node : Node_Access) return Hash_Type;
+    pragma Inline (Hash_Node);
+ 
+    function Next (Node : Node_Access) return Node_Access;
+    pragma Inline (Next);
+ 
+    function Read_Node
+      (Stream : access Root_Stream_Type'Class) return Node_Access;
+ 
+    procedure Set_Next (Node : Node_Access; Next : Node_Access);
+    pragma Inline (Set_Next);
+ 
+    procedure Write_Node
+      (Stream : access Root_Stream_Type'Class;
+       Node   : Node_Access);
+ 
+    --------------------------
+    -- Local Instantiations --
+    --------------------------
+ 
+    package HT_Ops is
+       new Ada.Containers.Hash_Tables.Generic_Operations
+         (HT_Types          => HT_Types,
+          Hash_Table_Type   => Map,
+          Null_Node         => null,
+          Hash_Node         => Hash_Node,
+          Next              => Next,
+          Set_Next          => Set_Next,
+          Copy_Node         => Copy_Node,
+          Free              => Free);
+ 
+    package Key_Ops is
+       new Hash_Tables.Generic_Keys
+        (HT_Types  => HT_Types,
+         HT_Type   => Map,
+         Null_Node => null,
+         Next      => Next,
+         Set_Next  => Set_Next,
+         Key_Type  => Key_Type,
+         Hash      => Hash,
+         Equivalent_Keys => Equivalent_Keys);
+ 
+    ---------
+    -- "=" --
+    ---------
+ 
+    function Is_Equal is new HT_Ops.Generic_Equal (Find_Equal_Key);
+ 
+    function "=" (Left, Right : Map) return Boolean renames Is_Equal;
+ 
+    ------------
+    -- Adjust --
+    ------------
+ 
+    procedure Adjust (Container : in out Map) renames HT_Ops.Adjust;
+ 
+    --------------
+    -- Capacity --
+    --------------
+ 
+    function Capacity (Container : Map)
+      return Count_Type renames HT_Ops.Capacity;
+ 
+    -----------
+    -- Clear --
+    -----------
+ 
+    procedure Clear (Container : in out Map) renames HT_Ops.Clear;
+ 
+    --------------
+    -- Contains --
+    --------------
+ 
+    function Contains (Container : Map; Key : Key_Type) return Boolean is
+    begin
+       return Find (Container, Key) /= No_Element;
+    end Contains;
+ 
+    ---------------
+    -- Copy_Node --
+    ---------------
+ 
+    function Copy_Node (Node : Node_Access) return Node_Access is
+       K : Key_Access := new Key_Type'(Node.Key.all);
+       E : Element_Access;
+ 
+    begin
+       E := new Element_Type'(Node.Element.all);
+       return new Node_Type'(K, E, null);
+ 
+    exception
+       when others =>
+          Free_Key (K);
+          Free_Element (E);
+          raise;
+    end Copy_Node;
+ 
+    ------------
+    -- Delete --
+    ------------
+ 
+    procedure Delete (Container : in out Map; Key : Key_Type) is
+       X : Node_Access;
+ 
+    begin
+       Key_Ops.Delete_Key_Sans_Free (Container, Key, X);
+ 
+       if X = null then
+          raise Constraint_Error;
+       end if;
+ 
+       Free (X);
+    end Delete;
+ 
+    procedure Delete (Container : in out Map; Position : in out Cursor) is
+    begin
+       if Position = No_Element then
+          return;
+       end if;
+ 
+       if Position.Container /= Map_Access'(Container'Unchecked_Access) then
+          raise Program_Error;
+       end if;
+ 
+       HT_Ops.Delete_Node_Sans_Free (Container, Position.Node);
+       Free (Position.Node);
+ 
+       Position.Container := null;
+    end Delete;
+ 
+    -------------
+    -- Element --
+    -------------
+ 
+    function Element (Container : Map; Key : Key_Type) return Element_Type is
+       C : constant Cursor := Find (Container, Key);
+    begin
+       return C.Node.Element.all;
+    end Element;
+ 
+    function Element (Position : Cursor) return Element_Type is
+    begin
+       return Position.Node.Element.all;
+    end Element;
+ 
+    ---------------------
+    -- Equivalent_Keys --
+    ---------------------
+ 
+    function Equivalent_Keys
+      (Key  : Key_Type;
+       Node : Node_Access) return Boolean
+    is
+    begin
+       return Equivalent_Keys (Key, Node.Key.all);
+    end Equivalent_Keys;
+ 
+    function Equivalent_Keys (Left, Right : Cursor) return Boolean is
+    begin
+       return Equivalent_Keys (Left.Node.Key.all, Right.Node.Key.all);
+    end Equivalent_Keys;
+ 
+    function Equivalent_Keys
+      (Left  : Cursor;
+       Right : Key_Type) return Boolean
+    is
+    begin
+       return Equivalent_Keys (Left.Node.Key.all, Right);
+    end Equivalent_Keys;
+ 
+    function Equivalent_Keys
+      (Left  : Key_Type;
+       Right : Cursor) return Boolean
+    is
+    begin
+       return Equivalent_Keys (Left, Right.Node.Key.all);
+    end Equivalent_Keys;
+ 
+    -------------
+    -- Exclude --
+    -------------
+ 
+    procedure Exclude (Container : in out Map; Key : Key_Type) is
+       X : Node_Access;
+    begin
+       Key_Ops.Delete_Key_Sans_Free (Container, Key, X);
+       Free (X);
+    end Exclude;
+ 
+    --------------
+    -- Finalize --
+    --------------
+ 
+    procedure Finalize (Container : in out Map) renames HT_Ops.Finalize;
+ 
+    ----------
+    -- Find --
+    ----------
+ 
+    function Find (Container : Map; Key : Key_Type) return Cursor is
+       Node : constant Node_Access := Key_Ops.Find (Container, Key);
+ 
+    begin
+       if Node = null then
+          return No_Element;
+       end if;
+ 
+       return Cursor'(Container'Unchecked_Access, Node);
+    end Find;
+ 
+    --------------------
+    -- Find_Equal_Key --
+    --------------------
+ 
+    function Find_Equal_Key
+      (R_Map  : Map;
+       L_Node : Node_Access) return Boolean
+    is
+       R_Index : constant Hash_Type := Key_Ops.Index (R_Map, L_Node.Key.all);
+       R_Node  : Node_Access := R_Map.Buckets (R_Index);
+ 
+    begin
+       while R_Node /= null loop
+          if Equivalent_Keys (L_Node.Key.all, R_Node.Key.all) then
+             return L_Node.Element.all = R_Node.Element.all;
+          end if;
+ 
+          R_Node := R_Node.Next;
+       end loop;
+ 
+       return False;
+    end Find_Equal_Key;
+ 
+    -----------
+    -- First --
+    -----------
+ 
+    function First (Container : Map) return Cursor is
+       Node : constant Node_Access := HT_Ops.First (Container);
+    begin
+       if Node = null then
+          return No_Element;
+       end if;
+ 
+       return Cursor'(Container'Unchecked_Access, Node);
+    end First;
+ 
+    ----------
+    -- Free --
+    ----------
+ 
+    procedure Free (X : in out Node_Access) is
+       procedure Deallocate is
+          new Ada.Unchecked_Deallocation (Node_Type, Node_Access);
+    begin
+       if X /= null then
+          Free_Key (X.Key);
+          Free_Element (X.Element);
+          Deallocate (X);
+       end if;
+    end Free;
+ 
+    -----------------
+    -- Has_Element --
+    -----------------
+ 
+    function Has_Element (Position : Cursor) return Boolean is
+    begin
+       return Position /= No_Element;
+    end Has_Element;
+ 
+    ---------------
+    -- Hash_Node --
+    ---------------
+ 
+    function Hash_Node (Node : Node_Access) return Hash_Type is
+    begin
+       return Hash (Node.Key.all);
+    end Hash_Node;
+ 
+    -------------
+    -- Include --
+    -------------
+ 
+    procedure Include
+      (Container : in out Map;
+       Key       : Key_Type;
+       New_Item  : Element_Type)
+    is
+       Position : Cursor;
+       Inserted : Boolean;
+ 
+       K : Key_Access;
+       E : Element_Access;
+ 
+    begin
+       Insert (Container, Key, New_Item, Position, Inserted);
+ 
+       if not Inserted then
+          K := Position.Node.Key;
+          E := Position.Node.Element;
+ 
+          Position.Node.Key := new Key_Type'(Key);
+          Position.Node.Element := new Element_Type'(New_Item);
+ 
+          Free_Key (K);
+          Free_Element (E);
+       end if;
+    end Include;
+ 
+    ------------
+    -- Insert --
+    ------------
+ 
+    procedure Insert
+      (Container : in out Map;
+       Key       : Key_Type;
+       New_Item  : Element_Type;
+       Position  : out Cursor;
+       Inserted  : out Boolean)
+    is
+       function New_Node (Next : Node_Access) return Node_Access;
+ 
+       procedure Insert is
+         new Key_Ops.Generic_Conditional_Insert (New_Node);
+ 
+       --------------
+       -- New_Node --
+       --------------
+ 
+       function New_Node (Next : Node_Access) return Node_Access is
+          K  : Key_Access := new Key_Type'(Key);
+          E  : Element_Access;
+       begin
+          E := new Element_Type'(New_Item);
+          return new Node_Type'(K, E, Next);
+       exception
+          when others =>
+             Free_Key (K);
+             Free_Element (E);
+             raise;
+       end New_Node;
+ 
+    --  Start of processing for Insert
+ 
+    begin
+       HT_Ops.Ensure_Capacity (Container, Container.Length + 1);
+       Insert (Container, Key, Position.Node, Inserted);
+       Position.Container := Container'Unchecked_Access;
+    end Insert;
+ 
+    procedure Insert
+      (Container : in out Map;
+       Key       : Key_Type;
+       New_Item  : Element_Type)
+    is
+       Position : Cursor;
+       Inserted : Boolean;
+ 
+    begin
+       Insert (Container, Key, New_Item, Position, Inserted);
+ 
+       if not Inserted then
+          raise Constraint_Error;
+       end if;
+    end Insert;
+ 
+    --------------
+    -- Is_Empty --
+    --------------
+ 
+    function Is_Empty (Container : Map) return Boolean is
+    begin
+       return Container.Length = 0;
+    end Is_Empty;
+ 
+    -------------
+    -- Iterate --
+    -------------
+ 
+    procedure Iterate
+      (Container : Map;
+       Process   : not null access procedure (Position : Cursor))
+    is
+       procedure Process_Node (Node : Node_Access);
+       pragma Inline (Process_Node);
+ 
+       procedure Iterate is
+          new HT_Ops.Generic_Iteration (Process_Node);
+ 
+       ------------------
+       -- Process_Node --
+       ------------------
+ 
+       procedure Process_Node (Node : Node_Access) is
+       begin
+          Process (Cursor'(Container'Unchecked_Access, Node));
+       end Process_Node;
+ 
+    --  Start of processing Iterate
+ 
+    begin
+       Iterate (Container);
+    end Iterate;
+ 
+    ---------
+    -- Key --
+    ---------
+ 
+    function Key (Position : Cursor) return Key_Type is
+    begin
+       return Position.Node.Key.all;
+    end Key;
+ 
+    ------------
+    -- Length --
+    ------------
+ 
+    function Length (Container : Map) return Count_Type is
+    begin
+       return Container.Length;
+    end Length;
+ 
+    ----------
+    -- Move --
+    ----------
+ 
+    procedure Move
+      (Target : in out Map;
+       Source : in out Map) renames HT_Ops.Move;
+ 
+    ----------
+    -- Next --
+    ----------
+ 
+    function Next (Node : Node_Access) return Node_Access is
+    begin
+       return Node.Next;
+    end Next;
+ 
+    procedure Next (Position : in out Cursor) is
+    begin
+       Position := Next (Position);
+    end Next;
+ 
+    function Next (Position : Cursor) return Cursor is
+    begin
+       if Position = No_Element then
+          return No_Element;
+       end if;
+ 
+       declare
+          M    : Map renames Position.Container.all;
+          Node : constant Node_Access := HT_Ops.Next (M, Position.Node);
+ 
+       begin
+          if Node = null then
+             return No_Element;
+          end if;
+ 
+          return Cursor'(Position.Container, Node);
+       end;
+    end Next;
+ 
+    -------------------
+    -- Query_Element --
+    -------------------
+ 
+    procedure Query_Element
+      (Position : Cursor;
+       Process  : not null access procedure (Element : Element_Type))
+    is
+    begin
+       Process (Position.Node.Key.all, Position.Node.Element.all);
+    end Query_Element;
+ 
+    ----------
+    -- Read --
+    ----------
+ 
+    procedure Read_Nodes is new HT_Ops.Generic_Read (Read_Node);
+ 
+    procedure Read
+      (Stream    : access Root_Stream_Type'Class;
+       Container : out Map) renames Read_Nodes;
+ 
+    ---------------
+    -- Read_Node --
+    ---------------
+ 
+    function Read_Node
+      (Stream : access Root_Stream_Type'Class) return Node_Access
+    is
+       Node : Node_Access := new Node_Type;
+ 
+    begin
+       begin
+          Node.Key := new Key_Type'(Key_Type'Input (Stream));
+       exception
+          when others =>
+             Free (Node);
+             raise;
+       end;
+ 
+       begin
+          Node.Element := new Element_Type'(Element_Type'Input (Stream));
+       exception
+          when others =>
+             Free_Key (Node.Key);
+             Free (Node);
+             raise;
+       end;
+ 
+       return Node;
+    end Read_Node;
+ 
+    -------------
+    -- Replace --
+    -------------
+ 
+    procedure Replace
+      (Container : in out Map;
+       Key       : Key_Type;
+       New_Item  : Element_Type)
+    is
+       Node : constant Node_Access := Key_Ops.Find (Container, Key);
+ 
+       K : Key_Access;
+       E : Element_Access;
+ 
+    begin
+       if Node = null then
+          raise Constraint_Error;
+       end if;
+ 
+       K := Node.Key;
+       E := Node.Element;
+ 
+       Node.Key := new Key_Type'(Key);
+       Node.Element := new Element_Type'(New_Item);
+ 
+       Free_Key (K);
+       Free_Element (E);
+    end Replace;
+ 
+    ---------------------
+    -- Replace_Element --
+    ---------------------
+ 
+    procedure Replace_Element (Position : Cursor; By : Element_Type) is
+       X : Element_Access := Position.Node.Element;
+    begin
+       Position.Node.Element := new Element_Type'(By);
+       Free_Element (X);
+    end Replace_Element;
+ 
+    ----------------------
+    -- Reserve_Capacity --
+    ----------------------
+ 
+    procedure Reserve_Capacity
+      (Container : in out Map;
+       Capacity  : Count_Type) renames HT_Ops.Ensure_Capacity;
+ 
+    --------------
+    -- Set_Next --
+    --------------
+ 
+    procedure Set_Next (Node : Node_Access; Next : Node_Access) is
+    begin
+       Node.Next := Next;
+    end Set_Next;
+ 
+    --------------------
+    -- Update_Element --
+    --------------------
+ 
+    procedure Update_Element
+      (Position : Cursor;
+       Process  : not null access procedure (Element : in out Element_Type))
+    is
+    begin
+       Process (Position.Node.Key.all, Position.Node.Element.all);
+    end Update_Element;
+ 
+    -----------
+    -- Write --
+    -----------
+ 
+    procedure Write_Nodes is new HT_Ops.Generic_Write (Write_Node);
+ 
+    procedure Write
+      (Stream    : access Root_Stream_Type'Class;
+       Container : Map) renames Write_Nodes;
+ 
+    ----------------
+    -- Write_Node --
+    ----------------
+ 
+    procedure Write_Node
+      (Stream : access Root_Stream_Type'Class;
+       Node   : Node_Access)
+    is
+    begin
+       Key_Type'Output (Stream, Node.Key.all);
+       Element_Type'Output (Stream, Node.Element.all);
+    end Write_Node;
+ 
+ end Ada.Containers.Indefinite_Hashed_Maps;
+ 
diff -Nrcpad gcc-3.4.3/gcc/ada/a-cihama.ads gcc-4.0.0/gcc/ada/a-cihama.ads
*** gcc-3.4.3/gcc/ada/a-cihama.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-cihama.ads	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,206 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                  ADA.CONTAINERS.INDEFINITE_HASHED_MAPS                   --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Containers.Hash_Tables;
+ with Ada.Streams;
+ 
+ generic
+    type Key_Type (<>) is private;
+    type Element_Type (<>) is private;
+ 
+    with function Hash (Key : Key_Type) return Hash_Type;
+    with function Equivalent_Keys (Left, Right : Key_Type) return Boolean;
+    with function "=" (Left, Right : Element_Type) return Boolean is <>;
+ 
+ package Ada.Containers.Indefinite_Hashed_Maps is
+    pragma Preelaborate (Indefinite_Hashed_Maps);
+ 
+    type Map is tagged private;
+    type Cursor is private;
+ 
+    Empty_Map  : constant Map;
+    No_Element : constant Cursor;
+ 
+    function "=" (Left, Right : Map) return Boolean;
+ 
+    function Length (Container : Map) return Count_Type;
+ 
+    function Is_Empty (Container : Map) return Boolean;
+ 
+    procedure Clear (Container : in out Map);
+ 
+    function Element (Position : Cursor) return Element_Type;
+ 
+    procedure Query_Element
+      (Position : Cursor;
+       Process  : not null access procedure (Key     : Key_Type;
+                                             Element : Element_Type));
+ 
+    procedure Update_Element
+      (Position : Cursor;
+       Process  : not null access procedure (Key     : Key_Type;
+                                             Element : in out Element_Type));
+ 
+    procedure Replace_Element
+      (Position : Cursor;
+       By       : Element_Type);
+ 
+    procedure Move (Target : in out Map; Source : in out Map);
+ 
+    procedure Insert
+      (Container : in out Map;
+       Key       : Key_Type;
+       New_Item  : Element_Type;
+       Position  : out Cursor;
+       Inserted  : out Boolean);
+ 
+    procedure Insert
+      (Container : in out Map;
+       Key       : Key_Type;
+       New_Item  : Element_Type);
+ 
+    procedure Include
+      (Container : in out Map;
+       Key       : Key_Type;
+       New_Item  : Element_Type);
+ 
+    procedure Replace
+      (Container : in out Map;
+       Key       : Key_Type;
+       New_Item  : Element_Type);
+ 
+    procedure Delete
+      (Container : in out Map;
+       Key       : Key_Type);
+ 
+    procedure Exclude
+      (Container : in out Map;
+       Key       : Key_Type);
+ 
+    procedure Delete
+      (Container : in out Map;
+       Position  : in out Cursor);
+ 
+    function Contains
+      (Container : Map;
+       Key       : Key_Type) return Boolean;
+ 
+    function Find
+      (Container : Map;
+       Key       : Key_Type) return Cursor;
+ 
+    function Element
+      (Container : Map;
+       Key       : Key_Type) return Element_Type;
+ 
+    function Capacity (Container : Map) return Count_Type;
+ 
+    procedure Reserve_Capacity
+      (Container : in out Map;
+       Capacity  : Count_Type);
+ 
+    function First (Container : Map) return Cursor;
+ 
+    function Next (Position : Cursor) return Cursor;
+ 
+    procedure Next (Position : in out Cursor);
+ 
+    function Has_Element (Position : Cursor) return Boolean;
+ 
+    function Key (Position : Cursor) return Key_Type;
+ 
+    function Equivalent_Keys (Left, Right : Cursor)
+      return Boolean;
+ 
+    function Equivalent_Keys
+      (Left  : Cursor;
+       Right : Key_Type) return Boolean;
+ 
+    function Equivalent_Keys
+      (Left  : Key_Type;
+       Right : Cursor) return Boolean;
+ 
+    procedure Iterate
+      (Container : Map;
+       Process   : not null access procedure (Position : Cursor));
+ 
+ private
+    type Node_Type;
+    type Node_Access is access Node_Type;
+ 
+    package HT_Types is
+       new Hash_Tables.Generic_Hash_Table_Types (Node_Access);
+ 
+    use HT_Types;
+ 
+    type Map is new Hash_Table_Type with null record;
+ 
+    procedure Adjust (Container : in out Map);
+ 
+    procedure Finalize (Container : in out Map);
+ 
+    type Map_Access is access constant Map;
+    for Map_Access'Storage_Size use 0;
+ 
+    type Cursor is
+       record
+          Container : Map_Access;
+          Node      : Node_Access;
+       end record;
+ 
+    No_Element : constant Cursor :=
+      (Container => null,
+       Node      => null);
+ 
+    use Ada.Streams;
+ 
+    procedure Write
+      (Stream    : access Root_Stream_Type'Class;
+       Container : Map);
+ 
+    for Map'Write use Write;
+ 
+    procedure Read
+      (Stream    : access Root_Stream_Type'Class;
+       Container : out Map);
+ 
+    for Map'Read use Read;
+ 
+    Empty_Map : constant Map := (Hash_Table_Type with null record);
+ 
+ end Ada.Containers.Indefinite_Hashed_Maps;
+ 
+ 
+ 
diff -Nrcpad gcc-3.4.3/gcc/ada/a-cihase.adb gcc-4.0.0/gcc/ada/a-cihase.adb
*** gcc-3.4.3/gcc/ada/a-cihase.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-cihase.adb	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,1531 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                  ADA.CONTAINERS.INDEFINITE_HASHED_SETS                   --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit has originally being developed by Matthew J Heaney.            --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Unchecked_Deallocation;
+ 
+ with Ada.Containers.Hash_Tables.Generic_Operations;
+ pragma Elaborate_All (Ada.Containers.Hash_Tables.Generic_Operations);
+ 
+ with Ada.Containers.Hash_Tables.Generic_Keys;
+ pragma Elaborate_All (Ada.Containers.Hash_Tables.Generic_Keys);
+ 
+ with System;  use type System.Address;
+ 
+ with Ada.Containers.Prime_Numbers;
+ 
+ with Ada.Finalization;  use Ada.Finalization;
+ 
+ package body Ada.Containers.Indefinite_Hashed_Sets is
+ 
+    type Element_Access is access Element_Type;
+ 
+    type Node_Type is
+       limited record
+          Element : Element_Access;
+          Next    : Node_Access;
+       end record;
+ 
+    function Hash_Node
+      (Node : Node_Access) return Hash_Type;
+    pragma Inline (Hash_Node);
+ 
+    function Hash_Node
+      (Node : Node_Access) return Hash_Type is
+    begin
+       return Hash (Node.Element.all);
+    end Hash_Node;
+ 
+    function Next
+      (Node : Node_Access) return Node_Access;
+    pragma Inline (Next);
+ 
+    function Next
+      (Node : Node_Access) return Node_Access is
+    begin
+       return Node.Next;
+    end Next;
+ 
+    procedure Set_Next
+      (Node : Node_Access;
+       Next : Node_Access);
+    pragma Inline (Set_Next);
+ 
+    procedure Set_Next
+      (Node : Node_Access;
+       Next : Node_Access) is
+    begin
+       Node.Next := Next;
+    end Set_Next;
+ 
+    function Equivalent_Keys
+      (Key  : Element_Type;
+       Node : Node_Access) return Boolean;
+    pragma Inline (Equivalent_Keys);
+ 
+    function Equivalent_Keys
+      (Key  : Element_Type;
+       Node : Node_Access) return Boolean is
+    begin
+       return Equivalent_Keys (Key, Node.Element.all);
+    end Equivalent_Keys;
+ 
+    function Copy_Node
+      (Source : Node_Access) return Node_Access;
+    pragma Inline (Copy_Node);
+ 
+    function Copy_Node
+      (Source : Node_Access) return Node_Access is
+ 
+       Target : constant Node_Access :=
+         new Node_Type'(Element => Source.Element,
+                        Next    => null);
+    begin
+       return Target;
+    end Copy_Node;
+ 
+ 
+    procedure Free_Element is
+       new Ada.Unchecked_Deallocation (Element_Type, Element_Access);
+ 
+    procedure Free (X : in out Node_Access);
+ 
+    procedure Free (X : in out Node_Access) is
+       procedure Deallocate is
+          new Ada.Unchecked_Deallocation (Node_Type, Node_Access);
+    begin
+       if X /= null then
+          Free_Element (X.Element);
+          Deallocate (X);
+       end if;
+    end Free;
+ 
+    package HT_Ops is
+       new Hash_Tables.Generic_Operations
+        (HT_Types          => HT_Types,
+         Hash_Table_Type   => Set,
+         Null_Node         => null,
+         Hash_Node         => Hash_Node,
+         Next              => Next,
+         Set_Next          => Set_Next,
+         Copy_Node         => Copy_Node,
+         Free              => Free);
+ 
+    package Element_Keys is
+       new Hash_Tables.Generic_Keys
+        (HT_Types  => HT_Types,
+         HT_Type   => Set,
+         Null_Node => null,
+         Next      => Next,
+         Set_Next  => Set_Next,
+         Key_Type  => Element_Type,
+         Hash      => Hash,
+         Equivalent_Keys => Equivalent_Keys);
+ 
+ 
+    procedure Adjust (Container : in out Set) renames HT_Ops.Adjust;
+ 
+    procedure Finalize (Container : in out Set) renames HT_Ops.Finalize;
+ 
+ 
+    function Find_Equal_Key
+      (R_Set  : Set;
+       L_Node : Node_Access) return Boolean;
+ 
+    function Find_Equal_Key
+      (R_Set  : Set;
+       L_Node : Node_Access) return Boolean is
+ 
+       R_Index : constant Hash_Type :=
+         Element_Keys.Index (R_Set, L_Node.Element.all);
+ 
+       R_Node  : Node_Access := R_Set.Buckets (R_Index);
+ 
+    begin
+ 
+       loop
+ 
+          if R_Node = null then
+             return False;
+          end if;
+ 
+          if L_Node.Element.all = R_Node.Element.all then
+             return True;
+          end if;
+ 
+          R_Node := Next (R_Node);
+ 
+       end loop;
+ 
+    end Find_Equal_Key;
+ 
+    function Is_Equal is
+       new HT_Ops.Generic_Equal (Find_Equal_Key);
+ 
+    function "=" (Left, Right : Set) return Boolean renames Is_Equal;
+ 
+ 
+    function Length (Container : Set) return Count_Type is
+    begin
+       return Container.Length;
+    end Length;
+ 
+ 
+    function Is_Empty (Container : Set) return Boolean is
+    begin
+       return Container.Length = 0;
+    end Is_Empty;
+ 
+ 
+    procedure Clear (Container : in out Set) renames HT_Ops.Clear;
+ 
+ 
+    function Element (Position : Cursor) return Element_Type is
+    begin
+       return Position.Node.Element.all;
+    end Element;
+ 
+ 
+    procedure Query_Element
+      (Position : in Cursor;
+       Process  : not null access procedure (Element : in Element_Type)) is
+    begin
+       Process (Position.Node.Element.all);
+    end Query_Element;
+ 
+ 
+ --  TODO:
+ --     procedure Replace_Element (Container : in out Set;
+ --                                Position  : in     Node_Access;
+ --                                By        : in     Element_Type);
+ 
+ --     procedure Replace_Element (Container : in out Set;
+ --                                Position  : in     Node_Access;
+ --                                By        : in     Element_Type) is
+ 
+ --        Node : Node_Access := Position;
+ 
+ --     begin
+ 
+ --        if Equivalent_Keys (Node.Element.all, By) then
+ 
+ --           declare
+ --              X : Element_Access := Node.Element;
+ --           begin
+ --              Node.Element := new Element_Type'(By);
+ --              --
+ --              --  NOTE: If there's an exception here, then just
+ --              --  let it propagate.  We haven't modified the
+ --              --  state of the container, so there's nothing else
+ --              --  we need to do.
+ 
+ --              Free_Element (X);
+ --           end;
+ 
+ --           return;
+ 
+ --        end if;
+ 
+ --        HT_Ops.Delete_Node_Sans_Free (Container, Node);
+ 
+ --        begin
+ --           Free_Element (Node.Element);
+ --        exception
+ --           when others =>
+ --              Node.Element := null;  --  don't attempt to dealloc X.E again
+ --              Free (Node);
+ --              raise;
+ --        end;
+ 
+ --        begin
+ --           Node.Element := new Element_Type'(By);
+ --        exception
+ --           when others =>
+ --              Free (Node);
+ --              raise;
+ --        end;
+ 
+ --        declare
+ --           function New_Node (Next : Node_Access) return Node_Access;
+ --           pragma Inline (New_Node);
+ 
+ --           function New_Node (Next : Node_Access) return Node_Access is
+ --           begin
+ --              Node.Next := Next;
+ --              return Node;
+ --           end New_Node;
+ 
+ --           procedure Insert is
+ --              new Element_Keys.Generic_Conditional_Insert (New_Node);
+ 
+ --           Result  : Node_Access;
+ --           Success : Boolean;
+ --        begin
+ --           Insert
+ --             (HT      => Container,
+ --              Key     => Node.Element.all,
+ --              Node    => Result,
+ --              Success => Success);
+ 
+ --           if not Success then
+ --              Free (Node);
+ --              raise Program_Error;
+ --           end if;
+ 
+ --           pragma Assert (Result = Node);
+ --        end;
+ 
+ --     end Replace_Element;
+ 
+ 
+ --     procedure Replace_Element (Container : in out Set;
+ --                                Position  : in     Cursor;
+ --                                By        : in     Element_Type) is
+ --     begin
+ 
+ --        if Position.Container = null then
+ --           raise Constraint_Error;
+ --        end if;
+ 
+ --        if Position.Container /= Set_Access'(Container'Unchecked_Access) then
+ --           raise Program_Error;
+ --        end if;
+ 
+ --        Replace_Element (Container, Position.Node, By);
+ 
+ --     end Replace_Element;
+ 
+ 
+    procedure Move (Target : in out Set;
+                    Source : in out Set) renames HT_Ops.Move;
+ 
+ 
+    procedure Insert (Container : in out Set;
+                      New_Item  : in     Element_Type;
+                      Position  :    out Cursor;
+                      Inserted  :    out Boolean) is
+ 
+       function New_Node (Next : Node_Access) return Node_Access;
+       pragma Inline (New_Node);
+ 
+       function New_Node (Next : Node_Access) return Node_Access is
+          Element : Element_Access := new Element_Type'(New_Item);
+       begin
+          return new Node_Type'(Element, Next);
+       exception
+          when others =>
+             Free_Element (Element);
+             raise;
+       end New_Node;
+ 
+       procedure Insert is
+         new Element_Keys.Generic_Conditional_Insert (New_Node);
+ 
+    begin
+ 
+       HT_Ops.Ensure_Capacity (Container, Container.Length + 1);
+       Insert (Container, New_Item, Position.Node, Inserted);
+       Position.Container := Container'Unchecked_Access;
+ 
+    end Insert;
+ 
+ 
+    procedure Insert (Container : in out Set;
+                      New_Item  : in     Element_Type) is
+ 
+       Position : Cursor;
+       Inserted : Boolean;
+ 
+    begin
+ 
+       Insert (Container, New_Item, Position, Inserted);
+ 
+       if not Inserted then
+          raise Constraint_Error;
+       end if;
+ 
+    end Insert;
+ 
+ 
+    procedure Replace (Container : in out Set;
+                       New_Item  : in     Element_Type) is
+ 
+       Node : constant Node_Access :=
+         Element_Keys.Find (Container, New_Item);
+ 
+       X : Element_Access;
+ 
+    begin
+ 
+       if Node = null then
+          raise Constraint_Error;
+       end if;
+ 
+       X := Node.Element;
+ 
+       Node.Element := new Element_Type'(New_Item);
+ 
+       Free_Element (X);
+ 
+    end Replace;
+ 
+ 
+    procedure Include (Container : in out Set;
+                       New_Item  : in     Element_Type) is
+ 
+       Position : Cursor;
+       Inserted : Boolean;
+ 
+       X : Element_Access;
+ 
+    begin
+ 
+       Insert (Container, New_Item, Position, Inserted);
+ 
+       if not Inserted then
+ 
+          X := Position.Node.Element;
+ 
+          Position.Node.Element := new Element_Type'(New_Item);
+ 
+          Free_Element (X);
+ 
+       end if;
+ 
+    end Include;
+ 
+ 
+    procedure Delete (Container : in out Set;
+                      Item      : in     Element_Type) is
+ 
+       X : Node_Access;
+ 
+    begin
+ 
+       Element_Keys.Delete_Key_Sans_Free (Container, Item, X);
+ 
+       if X = null then
+          raise Constraint_Error;
+       end if;
+ 
+       Free (X);
+ 
+    end Delete;
+ 
+ 
+    procedure Exclude (Container : in out Set;
+                       Item      : in     Element_Type) is
+ 
+       X : Node_Access;
+ 
+    begin
+ 
+       Element_Keys.Delete_Key_Sans_Free (Container, Item, X);
+       Free (X);
+ 
+    end Exclude;
+ 
+ 
+    procedure Delete (Container : in out Set;
+                      Position  : in out Cursor) is
+    begin
+ 
+       if Position = No_Element then
+          return;
+       end if;
+ 
+       if Position.Container /= Set_Access'(Container'Unchecked_Access) then
+          raise Program_Error;
+       end if;
+ 
+       HT_Ops.Delete_Node_Sans_Free (Container, Position.Node);
+       Free (Position.Node);
+ 
+       Position.Container := null;
+ 
+    end Delete;
+ 
+ 
+ 
+    procedure Union (Target : in out Set;
+                     Source : in     Set) is
+ 
+       procedure Process (Src_Node : in Node_Access);
+ 
+       procedure Process (Src_Node : in Node_Access) is
+ 
+          Src : Element_Type renames Src_Node.Element.all;
+ 
+          function New_Node (Next : Node_Access) return Node_Access;
+          pragma Inline (New_Node);
+ 
+          function New_Node (Next : Node_Access) return Node_Access is
+             Tgt : Element_Access := new Element_Type'(Src);
+          begin
+             return new Node_Type'(Tgt, Next);
+          exception
+             when others =>
+                Free_Element (Tgt);
+                raise;
+          end New_Node;
+ 
+          procedure Insert is
+             new Element_Keys.Generic_Conditional_Insert (New_Node);
+ 
+          Tgt_Node : Node_Access;
+          Success  : Boolean;
+ 
+       begin
+ 
+          Insert (Target, Src, Tgt_Node, Success);
+ 
+       end Process;
+ 
+       procedure Iterate is
+          new HT_Ops.Generic_Iteration (Process);
+ 
+    begin
+ 
+       if Target'Address = Source'Address then
+          return;
+       end if;
+ 
+       HT_Ops.Ensure_Capacity (Target, Target.Length + Source.Length);
+ 
+       Iterate (Source);
+ 
+    end Union;
+ 
+ 
+ 
+    function Union (Left, Right : Set) return Set is
+ 
+       Buckets : HT_Types.Buckets_Access;
+       Length  : Count_Type;
+ 
+    begin
+ 
+       if Left'Address = Right'Address then
+          return Left;
+       end if;
+ 
+       if Right.Length = 0 then
+          return Left;
+       end if;
+ 
+       if Left.Length = 0 then
+          return Right;
+       end if;
+ 
+       declare
+          Size : constant Hash_Type :=
+            Prime_Numbers.To_Prime (Left.Length + Right.Length);
+       begin
+          Buckets := new Buckets_Type (0 .. Size - 1);
+       end;
+ 
+       declare
+          procedure Process (L_Node : Node_Access);
+ 
+          procedure Process (L_Node : Node_Access) is
+             I : constant Hash_Type :=
+               Hash (L_Node.Element.all) mod Buckets'Length;
+          begin
+             Buckets (I) := new Node_Type'(L_Node.Element, Buckets (I));
+          end Process;
+ 
+          procedure Iterate is
+             new HT_Ops.Generic_Iteration (Process);
+       begin
+          Iterate (Left);
+       exception
+          when others =>
+             HT_Ops.Free_Hash_Table (Buckets);
+             raise;
+       end;
+ 
+       Length := Left.Length;
+ 
+       declare
+          procedure Process (Src_Node : Node_Access);
+ 
+          procedure Process (Src_Node : Node_Access) is
+ 
+             Src : Element_Type renames Src_Node.Element.all;
+ 
+             I : constant Hash_Type :=
+               Hash (Src) mod Buckets'Length;
+ 
+             Tgt_Node : Node_Access := Buckets (I);
+ 
+          begin
+ 
+             while Tgt_Node /= null loop
+ 
+                if Equivalent_Keys (Src, Tgt_Node.Element.all) then
+                   return;
+                end if;
+ 
+                Tgt_Node := Next (Tgt_Node);
+ 
+             end loop;
+ 
+             declare
+                Tgt : Element_Access := new Element_Type'(Src);
+             begin
+                Buckets (I) := new Node_Type'(Tgt, Buckets (I));
+             exception
+                when others =>
+                   Free_Element (Tgt);
+                   raise;
+             end;
+ 
+             Length := Length + 1;
+ 
+          end Process;
+ 
+          procedure Iterate is
+             new HT_Ops.Generic_Iteration (Process);
+       begin
+          Iterate (Right);
+       exception
+          when others =>
+             HT_Ops.Free_Hash_Table (Buckets);
+             raise;
+       end;
+ 
+       return (Controlled with Buckets, Length);
+ 
+    end Union;
+ 
+ 
+    function Is_In
+      (HT  : Set;
+       Key : Node_Access) return Boolean;
+    pragma Inline (Is_In);
+ 
+    function Is_In
+      (HT  : Set;
+       Key : Node_Access) return Boolean is
+    begin
+       return Element_Keys.Find (HT, Key.Element.all) /= null;
+    end Is_In;
+ 
+ 
+    procedure Intersection (Target : in out Set;
+                            Source : in     Set) is
+ 
+       Tgt_Node : Node_Access;
+ 
+    begin
+ 
+       if Target'Address = Source'Address then
+          return;
+       end if;
+ 
+       if Source.Length = 0 then
+          Clear (Target);
+          return;
+       end if;
+ 
+       --  TODO: optimize this to use an explicit
+       --  loop instead of an active iterator
+       --  (similar to how a passive iterator is
+       --  implemented).
+       --
+       --  Another possibility is to test which
+       --  set is smaller, and iterate over the
+       --  smaller set.
+ 
+       Tgt_Node := HT_Ops.First (Target);
+ 
+       while Tgt_Node /= null loop
+ 
+          if Is_In (Source, Tgt_Node) then
+ 
+             Tgt_Node := HT_Ops.Next (Target, Tgt_Node);
+ 
+          else
+ 
+             declare
+                X : Node_Access := Tgt_Node;
+             begin
+                Tgt_Node := HT_Ops.Next (Target, Tgt_Node);
+                HT_Ops.Delete_Node_Sans_Free (Target, X);
+                Free (X);
+             end;
+ 
+          end if;
+ 
+       end loop;
+ 
+    end Intersection;
+ 
+ 
+    function Intersection (Left, Right : Set) return Set is
+ 
+       Buckets : HT_Types.Buckets_Access;
+       Length  : Count_Type;
+ 
+    begin
+ 
+       if Left'Address = Right'Address then
+          return Left;
+       end if;
+ 
+       Length := Count_Type'Min (Left.Length, Right.Length);
+ 
+       if Length = 0 then
+          return Empty_Set;
+       end if;
+ 
+       declare
+          Size : constant Hash_Type := Prime_Numbers.To_Prime (Length);
+       begin
+          Buckets := new Buckets_Type (0 .. Size - 1);
+       end;
+ 
+       Length := 0;
+ 
+       declare
+          procedure Process (L_Node : Node_Access);
+ 
+          procedure Process (L_Node : Node_Access) is
+          begin
+             if Is_In (Right, L_Node) then
+ 
+                declare
+                   I : constant Hash_Type :=
+                     Hash (L_Node.Element.all) mod Buckets'Length;
+                begin
+                   Buckets (I) := new Node_Type'(L_Node.Element, Buckets (I));
+                end;
+ 
+                Length := Length + 1;
+ 
+             end if;
+          end Process;
+ 
+          procedure Iterate is
+             new HT_Ops.Generic_Iteration (Process);
+       begin
+          Iterate (Left);
+       exception
+          when others =>
+             HT_Ops.Free_Hash_Table (Buckets);
+             raise;
+       end;
+ 
+       return (Controlled with Buckets, Length);
+ 
+    end Intersection;
+ 
+ 
+    procedure Difference (Target : in out Set;
+                          Source : in     Set) is
+ 
+ 
+       Tgt_Node : Node_Access;
+ 
+    begin
+ 
+       if Target'Address = Source'Address then
+          Clear (Target);
+          return;
+       end if;
+ 
+       if Source.Length = 0 then
+          return;
+       end if;
+ 
+       --  TODO: As I noted above, this can be
+       --  written in terms of a loop instead as
+       --  active-iterator style, sort of like a
+       --  passive iterator.
+ 
+       Tgt_Node := HT_Ops.First (Target);
+ 
+       while Tgt_Node /= null loop
+ 
+          if Is_In (Source, Tgt_Node) then
+ 
+             declare
+                X : Node_Access := Tgt_Node;
+             begin
+                Tgt_Node := HT_Ops.Next (Target, Tgt_Node);
+                HT_Ops.Delete_Node_Sans_Free (Target, X);
+                Free (X);
+             end;
+ 
+          else
+ 
+             Tgt_Node := HT_Ops.Next (Target, Tgt_Node);
+ 
+          end if;
+ 
+       end loop;
+ 
+    end Difference;
+ 
+ 
+ 
+    function Difference (Left, Right : Set) return Set is
+ 
+       Buckets : HT_Types.Buckets_Access;
+       Length  : Count_Type;
+ 
+    begin
+ 
+       if Left'Address = Right'Address then
+          return Empty_Set;
+       end if;
+ 
+       if Left.Length = 0 then
+          return Empty_Set;
+       end if;
+ 
+       if Right.Length = 0 then
+          return Left;
+       end if;
+ 
+       declare
+          Size : constant Hash_Type := Prime_Numbers.To_Prime (Left.Length);
+       begin
+          Buckets := new Buckets_Type (0 .. Size - 1);
+       end;
+ 
+       Length := 0;
+ 
+       declare
+          procedure Process (L_Node : Node_Access);
+ 
+          procedure Process (L_Node : Node_Access) is
+          begin
+             if not Is_In (Right, L_Node) then
+ 
+                declare
+                   I : constant Hash_Type :=
+                     Hash (L_Node.Element.all) mod Buckets'Length;
+                begin
+                   Buckets (I) := new Node_Type'(L_Node.Element, Buckets (I));
+                end;
+ 
+                Length := Length + 1;
+ 
+             end if;
+          end Process;
+ 
+          procedure Iterate is
+             new HT_Ops.Generic_Iteration (Process);
+       begin
+          Iterate (Left);
+       exception
+          when others =>
+             HT_Ops.Free_Hash_Table (Buckets);
+             raise;
+       end;
+ 
+       return (Controlled with Buckets, Length);
+ 
+    end Difference;
+ 
+ 
+ 
+    procedure Symmetric_Difference (Target : in out Set;
+                                    Source : in     Set) is
+    begin
+ 
+       if Target'Address = Source'Address then
+          Clear (Target);
+          return;
+       end if;
+ 
+       HT_Ops.Ensure_Capacity (Target, Target.Length + Source.Length);
+ 
+       if Target.Length = 0 then
+ 
+          declare
+             procedure Process (Src_Node : Node_Access);
+ 
+             procedure Process (Src_Node : Node_Access) is
+                E : Element_Type renames Src_Node.Element.all;
+                B : Buckets_Type renames Target.Buckets.all;
+                I : constant Hash_Type := Hash (E) mod B'Length;
+                N : Count_Type renames Target.Length;
+             begin
+                declare
+                   X : Element_Access := new Element_Type'(E);
+                begin
+                   B (I) := new Node_Type'(X, B (I));
+                exception
+                   when others =>
+                      Free_Element (X);
+                      raise;
+                end;
+ 
+                N := N + 1;
+             end Process;
+ 
+             procedure Iterate is
+                new HT_Ops.Generic_Iteration (Process);
+          begin
+             Iterate (Source);
+          end;
+ 
+       else
+ 
+          declare
+             procedure Process (Src_Node : Node_Access);
+ 
+             procedure Process (Src_Node : Node_Access) is
+                E : Element_Type renames Src_Node.Element.all;
+                B : Buckets_Type renames Target.Buckets.all;
+                I : constant Hash_Type := Hash (E) mod B'Length;
+                N : Count_Type renames Target.Length;
+             begin
+                if B (I) = null then
+ 
+                   declare
+                      X : Element_Access := new Element_Type'(E);
+                   begin
+                      B (I) := new Node_Type'(X, null);
+                   exception
+                      when others =>
+                         Free_Element (X);
+                         raise;
+                   end;
+ 
+                   N := N + 1;
+ 
+                elsif Equivalent_Keys (E, B (I).Element.all) then
+ 
+                   declare
+                      X : Node_Access := B (I);
+                   begin
+                      B (I) := B (I).Next;
+                      N := N - 1;
+                      Free (X);
+                   end;
+ 
+                else
+ 
+                   declare
+                      Prev : Node_Access := B (I);
+                      Curr : Node_Access := Prev.Next;
+                   begin
+                      while Curr /= null loop
+                         if Equivalent_Keys (E, Curr.Element.all) then
+                            Prev.Next := Curr.Next;
+                            N := N - 1;
+                            Free (Curr);
+                            return;
+                         end if;
+ 
+                         Prev := Curr;
+                         Curr := Prev.Next;
+                      end loop;
+ 
+                      declare
+                         X : Element_Access := new Element_Type'(E);
+                      begin
+                         B (I) := new Node_Type'(X, B (I));
+                      exception
+                         when others =>
+                            Free_Element (X);
+                            raise;
+                      end;
+ 
+                      N := N + 1;
+                   end;
+ 
+                end if;
+             end Process;
+ 
+             procedure Iterate is
+                new HT_Ops.Generic_Iteration (Process);
+          begin
+             Iterate (Source);
+          end;
+ 
+       end if;
+ 
+    end Symmetric_Difference;
+ 
+ 
+    function Symmetric_Difference (Left, Right : Set) return Set is
+ 
+       Buckets : HT_Types.Buckets_Access;
+       Length  : Count_Type;
+ 
+    begin
+ 
+       if Left'Address = Right'Address then
+          return Empty_Set;
+       end if;
+ 
+       if Right.Length = 0 then
+          return Left;
+       end if;
+ 
+       if Left.Length = 0 then
+          return Right;
+       end if;
+ 
+       declare
+          Size : constant Hash_Type :=
+            Prime_Numbers.To_Prime (Left.Length + Right.Length);
+       begin
+          Buckets := new Buckets_Type (0 .. Size - 1);
+       end;
+ 
+       Length := 0;
+ 
+       declare
+          procedure Process (L_Node : Node_Access);
+ 
+          procedure Process (L_Node : Node_Access) is
+          begin
+             if not Is_In (Right, L_Node) then
+                declare
+                   E : Element_Type renames L_Node.Element.all;
+                   I : constant Hash_Type := Hash (E) mod Buckets'Length;
+                begin
+ 
+                   declare
+                      X : Element_Access := new Element_Type'(E);
+                   begin
+                      Buckets (I) := new Node_Type'(X, Buckets (I));
+                   exception
+                      when others =>
+                         Free_Element (X);
+                         raise;
+                   end;
+ 
+                   Length := Length + 1;
+                end;
+             end if;
+          end Process;
+ 
+          procedure Iterate is
+             new HT_Ops.Generic_Iteration (Process);
+       begin
+          Iterate (Left);
+       exception
+          when others =>
+             HT_Ops.Free_Hash_Table (Buckets);
+             raise;
+       end;
+ 
+       declare
+          procedure Process (R_Node : Node_Access);
+ 
+          procedure Process (R_Node : Node_Access) is
+          begin
+             if not Is_In (Left, R_Node) then
+                declare
+                   E : Element_Type renames R_Node.Element.all;
+                   I : constant Hash_Type := Hash (E) mod Buckets'Length;
+                begin
+ 
+                   declare
+                      X : Element_Access := new Element_Type'(E);
+                   begin
+                      Buckets (I) := new Node_Type'(X, Buckets (I));
+                   exception
+                      when others =>
+                         Free_Element (X);
+                         raise;
+                   end;
+ 
+                   Length := Length + 1;
+ 
+                end;
+             end if;
+          end Process;
+ 
+          procedure Iterate is
+             new HT_Ops.Generic_Iteration (Process);
+       begin
+          Iterate (Right);
+       exception
+          when others =>
+             HT_Ops.Free_Hash_Table (Buckets);
+             raise;
+       end;
+ 
+       return (Controlled with Buckets, Length);
+ 
+    end Symmetric_Difference;
+ 
+ 
+    function Is_Subset (Subset : Set;
+                        Of_Set : Set) return Boolean is
+ 
+       Subset_Node : Node_Access;
+ 
+    begin
+ 
+       if Subset'Address = Of_Set'Address then
+          return True;
+       end if;
+ 
+       if Subset.Length > Of_Set.Length then
+          return False;
+       end if;
+ 
+       --  TODO: rewrite this to loop in the
+       --  style of a passive iterator.
+ 
+       Subset_Node := HT_Ops.First (Subset);
+ 
+       while Subset_Node /= null loop
+          if not Is_In (Of_Set, Subset_Node) then
+             return False;
+          end if;
+ 
+          Subset_Node := HT_Ops.Next (Subset, Subset_Node);
+       end loop;
+ 
+       return True;
+ 
+    end Is_Subset;
+ 
+ 
+    function Overlap (Left, Right : Set) return Boolean is
+ 
+       Left_Node : Node_Access;
+ 
+    begin
+ 
+       if Right.Length = 0 then
+          return False;
+       end if;
+ 
+       if Left'Address = Right'Address then
+          return True;
+       end if;
+ 
+       Left_Node := HT_Ops.First (Left);
+ 
+       while Left_Node /= null loop
+          if Is_In (Right, Left_Node) then
+             return True;
+          end if;
+ 
+          Left_Node := HT_Ops.Next (Left, Left_Node);
+       end loop;
+ 
+       return False;
+ 
+    end Overlap;
+ 
+ 
+    function Find (Container : Set;
+                   Item      : Element_Type) return Cursor is
+ 
+       Node : constant Node_Access := Element_Keys.Find (Container, Item);
+ 
+    begin
+ 
+       if Node = null then
+          return No_Element;
+       end if;
+ 
+       return Cursor'(Container'Unchecked_Access, Node);
+ 
+    end Find;
+ 
+ 
+    function Contains (Container : Set;
+                       Item      : Element_Type) return Boolean is
+    begin
+       return Find (Container, Item) /= No_Element;
+    end Contains;
+ 
+ 
+ 
+    function First (Container : Set) return Cursor is
+       Node : constant Node_Access := HT_Ops.First (Container);
+    begin
+       if Node = null then
+          return No_Element;
+       end if;
+ 
+       return Cursor'(Container'Unchecked_Access, Node);
+    end First;
+ 
+ 
+ --     function First_Element (Container : Set) return Element_Type is
+ --        Node : constant Node_Access := HT_Ops.First (Container);
+ --     begin
+ --        return Node.Element;
+ --     end First_Element;
+ 
+ 
+    function Next (Position : Cursor) return Cursor is
+    begin
+       if Position.Container = null
+         or else Position.Node = null
+       then
+          return No_Element;
+       end if;
+ 
+       declare
+          S : Set renames Position.Container.all;
+          Node : constant Node_Access := HT_Ops.Next (S, Position.Node);
+       begin
+          if Node = null then
+             return No_Element;
+          end if;
+ 
+          return Cursor'(Position.Container, Node);
+       end;
+    end Next;
+ 
+ 
+    procedure Next (Position : in out Cursor) is
+    begin
+       Position := Next (Position);
+    end Next;
+ 
+ 
+    function Has_Element (Position : Cursor) return Boolean is
+    begin
+       if Position.Container = null then
+          return False;
+       end if;
+ 
+       if Position.Node = null then
+          return False;
+       end if;
+ 
+       return True;
+    end Has_Element;
+ 
+ 
+    function Equivalent_Keys (Left, Right : Cursor)
+      return Boolean is
+    begin
+       return Equivalent_Keys (Left.Node.Element.all, Right.Node.Element.all);
+    end Equivalent_Keys;
+ 
+ 
+    function Equivalent_Keys (Left  : Cursor;
+                              Right : Element_Type)
+     return Boolean is
+    begin
+       return Equivalent_Keys (Left.Node.Element.all, Right);
+    end Equivalent_Keys;
+ 
+ 
+    function Equivalent_Keys (Left  : Element_Type;
+                              Right : Cursor)
+     return Boolean is
+    begin
+       return Equivalent_Keys (Left, Right.Node.Element.all);
+    end Equivalent_Keys;
+ 
+ 
+    procedure Iterate
+      (Container : in Set;
+       Process   : not null access procedure (Position : in Cursor)) is
+ 
+       procedure Process_Node (Node : in Node_Access);
+       pragma Inline (Process_Node);
+ 
+       procedure Process_Node (Node : in Node_Access) is
+       begin
+          Process (Cursor'(Container'Unchecked_Access, Node));
+       end Process_Node;
+ 
+       procedure Iterate is
+          new HT_Ops.Generic_Iteration (Process_Node);
+    begin
+       Iterate (Container);
+    end Iterate;
+ 
+ 
+    function Capacity (Container : Set) return Count_Type
+      renames HT_Ops.Capacity;
+ 
+    procedure Reserve_Capacity
+      (Container : in out Set;
+       Capacity  : in     Count_Type)
+      renames HT_Ops.Ensure_Capacity;
+ 
+ 
+    procedure Write_Node
+      (Stream : access Root_Stream_Type'Class;
+       Node   : in     Node_Access);
+    pragma Inline (Write_Node);
+ 
+    procedure Write_Node
+      (Stream : access Root_Stream_Type'Class;
+       Node   : in     Node_Access) is
+    begin
+       Element_Type'Output (Stream, Node.Element.all);
+    end Write_Node;
+ 
+    procedure Write_Nodes is
+       new HT_Ops.Generic_Write (Write_Node);
+ 
+    procedure Write
+      (Stream    : access Root_Stream_Type'Class;
+       Container : in     Set) renames Write_Nodes;
+ 
+ 
+    function Read_Node (Stream : access Root_Stream_Type'Class)
+      return Node_Access;
+    pragma Inline (Read_Node);
+ 
+    function Read_Node (Stream : access Root_Stream_Type'Class)
+      return Node_Access is
+ 
+       X : Element_Access := new Element_Type'(Element_Type'Input (Stream));
+    begin
+       return new Node_Type'(X, null);
+    exception
+       when others =>
+          Free_Element (X);
+          raise;
+    end Read_Node;
+ 
+    procedure Read_Nodes is
+       new HT_Ops.Generic_Read (Read_Node);
+ 
+    procedure Read
+      (Stream    : access Root_Stream_Type'Class;
+       Container :    out Set) renames Read_Nodes;
+ 
+ 
+    package body Generic_Keys is
+ 
+       function Equivalent_Keys (Left  : Cursor;
+                                 Right : Key_Type)
+         return Boolean is
+       begin
+          return Equivalent_Keys (Right, Left.Node.Element.all);
+       end Equivalent_Keys;
+ 
+       function Equivalent_Keys (Left  : Key_Type;
+                                 Right : Cursor)
+         return Boolean is
+       begin
+          return Equivalent_Keys (Left, Right.Node.Element.all);
+       end Equivalent_Keys;
+ 
+       function Equivalent_Keys
+         (Key  : Key_Type;
+          Node : Node_Access) return Boolean;
+       pragma Inline (Equivalent_Keys);
+ 
+       function Equivalent_Keys
+         (Key  : Key_Type;
+          Node : Node_Access) return Boolean is
+       begin
+          return Equivalent_Keys (Key, Node.Element.all);
+       end Equivalent_Keys;
+ 
+       package Key_Keys is
+          new Hash_Tables.Generic_Keys
+           (HT_Types  => HT_Types,
+            HT_Type   => Set,
+            Null_Node => null,
+            Next      => Next,
+            Set_Next  => Set_Next,
+            Key_Type  => Key_Type,
+            Hash      => Hash,
+            Equivalent_Keys => Equivalent_Keys);
+ 
+ 
+       function Find (Container : Set;
+                      Key       : Key_Type)
+          return Cursor is
+ 
+          Node : constant Node_Access :=
+            Key_Keys.Find (Container, Key);
+ 
+       begin
+ 
+          if Node = null then
+             return No_Element;
+          end if;
+ 
+          return Cursor'(Container'Unchecked_Access, Node);
+ 
+       end Find;
+ 
+ 
+       function Contains (Container : Set;
+                          Key       : Key_Type) return Boolean is
+       begin
+          return Find (Container, Key) /= No_Element;
+       end Contains;
+ 
+ 
+       function Element (Container : Set;
+                         Key       : Key_Type)
+         return Element_Type is
+ 
+          Node : constant Node_Access := Key_Keys.Find (Container, Key);
+       begin
+          return Node.Element.all;
+       end Element;
+ 
+ 
+       function Key (Position : Cursor) return Key_Type is
+       begin
+          return Key (Position.Node.Element.all);
+       end Key;
+ 
+ 
+ --  TODO:
+ --        procedure Replace (Container : in out Set;
+ --                           Key       : in     Key_Type;
+ --                           New_Item  : in     Element_Type) is
+ 
+ --           Node : constant Node_Access :=
+ --             Key_Keys.Find (Container, Key);
+ 
+ --        begin
+ 
+ --           if Node = null then
+ --              raise Constraint_Error;
+ --           end if;
+ 
+ --           Replace_Element (Container, Node, New_Item);
+ 
+ --        end Replace;
+ 
+ 
+       procedure Delete (Container : in out Set;
+                         Key       : in     Key_Type) is
+ 
+          X : Node_Access;
+ 
+       begin
+ 
+          Key_Keys.Delete_Key_Sans_Free (Container, Key, X);
+ 
+          if X = null then
+             raise Constraint_Error;
+          end if;
+ 
+          Free (X);
+ 
+       end Delete;
+ 
+ 
+       procedure Exclude (Container : in out Set;
+                          Key       : in     Key_Type) is
+ 
+          X : Node_Access;
+ 
+       begin
+ 
+          Key_Keys.Delete_Key_Sans_Free (Container, Key, X);
+          Free (X);
+ 
+       end Exclude;
+ 
+ 
+       procedure Checked_Update_Element
+         (Container : in out Set;
+          Position  : in     Cursor;
+          Process   : not null access
+            procedure (Element : in out Element_Type)) is
+ 
+       begin
+ 
+          if Position.Container = null then
+             raise Constraint_Error;
+          end if;
+ 
+          if Position.Container /= Set_Access'(Container'Unchecked_Access) then
+             raise Program_Error;
+          end if;
+ 
+          declare
+             Old_Key : Key_Type renames Key (Position.Node.Element.all);
+          begin
+             Process (Position.Node.Element.all);
+ 
+             if Equivalent_Keys (Old_Key, Position.Node.Element.all) then
+                return;
+             end if;
+          end;
+ 
+          declare
+             function New_Node (Next : Node_Access) return Node_Access;
+             pragma Inline (New_Node);
+ 
+             function New_Node (Next : Node_Access) return Node_Access is
+             begin
+                Position.Node.Next := Next;
+                return Position.Node;
+             end New_Node;
+ 
+             procedure Insert is
+                new Key_Keys.Generic_Conditional_Insert (New_Node);
+ 
+             Result  : Node_Access;
+             Success : Boolean;
+          begin
+             HT_Ops.Delete_Node_Sans_Free (Container, Position.Node);
+ 
+             Insert
+               (HT      => Container,
+                Key     => Key (Position.Node.Element.all),
+                Node    => Result,
+                Success => Success);
+ 
+             if not Success then
+                declare
+                   X : Node_Access := Position.Node;
+                begin
+                   Free (X);
+                end;
+ 
+                raise Program_Error;
+             end if;
+ 
+             pragma Assert (Result = Position.Node);
+          end;
+ 
+       end Checked_Update_Element;
+ 
+    end Generic_Keys;
+ 
+ end Ada.Containers.Indefinite_Hashed_Sets;
+ 
diff -Nrcpad gcc-3.4.3/gcc/ada/a-cihase.ads gcc-4.0.0/gcc/ada/a-cihase.ads
*** gcc-3.4.3/gcc/ada/a-cihase.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-cihase.ads	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,255 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                  ADA.CONTAINERS.INDEFINITE_HASHED_SETS                   --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Containers.Hash_Tables;
+ with Ada.Streams;
+ 
+ generic
+    type Element_Type (<>) is private;
+ 
+    with function Hash (Element : Element_Type) return Hash_Type;
+ 
+    --  TODO: get a ruling from ARG in Atlanta re the name and
+    --  order of these declarations ???
+ 
+    with function Equivalent_Keys (Left, Right : Element_Type) return Boolean;
+ 
+    with function "=" (Left, Right : Element_Type) return Boolean is <>;
+ 
+ package Ada.Containers.Indefinite_Hashed_Sets is
+ 
+    pragma Preelaborate (Indefinite_Hashed_Sets);
+ 
+    type Set is tagged private;
+ 
+    type Cursor is private;
+ 
+    Empty_Set : constant Set;
+ 
+    No_Element : constant Cursor;
+ 
+    function "=" (Left, Right : Set) return Boolean;
+ 
+    function Length (Container : Set) return Count_Type;
+ 
+    function Is_Empty (Container : Set) return Boolean;
+ 
+    procedure Clear (Container : in out Set);
+ 
+    function Element (Position : Cursor) return Element_Type;
+ 
+    procedure Query_Element
+      (Position : Cursor;
+       Process  : not null access procedure (Element : Element_Type));
+ 
+ --  TODO: resolve in atlanta ???
+ --   procedure Replace_Element (Container : in out Set;
+ --                              Position  : Cursor;
+ --                              By        : Element_Type);
+ 
+    procedure Move
+      (Target : in out Set;
+       Source : in out Set);
+ 
+    procedure Insert
+      (Container : in out Set;
+       New_Item  : Element_Type;
+       Position  : out Cursor;
+       Inserted  : out Boolean);
+ 
+    procedure Insert  (Container : in out Set; New_Item : Element_Type);
+ 
+    procedure Include (Container : in out Set; New_Item : Element_Type);
+ 
+    procedure Replace (Container : in out Set; New_Item : Element_Type);
+ 
+    procedure Delete  (Container : in out Set; Item : Element_Type);
+ 
+    procedure Exclude (Container : in out Set; Item : Element_Type);
+ 
+    procedure Delete (Container : in out Set; Position  : in out Cursor);
+ 
+    procedure Union (Target : in out Set; Source : Set);
+ 
+    function Union (Left, Right : Set) return Set;
+ 
+    function "or" (Left, Right : Set) return Set renames Union;
+ 
+    procedure Intersection (Target : in out Set; Source : Set);
+ 
+    function Intersection (Left, Right : Set) return Set;
+ 
+    function "and" (Left, Right : Set) return Set renames Intersection;
+ 
+    procedure Difference (Target : in out Set; Source : Set);
+ 
+    function Difference (Left, Right : Set) return Set;
+ 
+    function "-" (Left, Right : Set) return Set renames Difference;
+ 
+    procedure Symmetric_Difference (Target : in out Set; Source : Set);
+ 
+    function Symmetric_Difference (Left, Right : Set) return Set;
+ 
+    function "xor" (Left, Right : Set) return Set
+      renames Symmetric_Difference;
+ 
+    function Is_Subset (Subset : Set; Of_Set : Set) return Boolean;
+ 
+    function Overlap (Left, Right : Set) return Boolean;
+ 
+    function Contains (Container : Set; Item : Element_Type) return Boolean;
+ 
+    function Find (Container : Set; Item : Element_Type) return Cursor;
+ 
+    function Capacity (Container : Set) return Count_Type;
+ 
+    procedure Reserve_Capacity
+      (Container : in out Set;
+       Capacity  : Count_Type);
+ 
+    function First (Container : Set) return Cursor;
+ 
+    function Next (Position : Cursor) return Cursor;
+ 
+    procedure Next (Position : in out Cursor);
+ 
+    function Has_Element (Position : Cursor) return Boolean;
+ 
+    function Equivalent_Keys (Left, Right : Cursor) return Boolean;
+ 
+    function Equivalent_Keys
+      (Left  : Cursor;
+       Right : Element_Type) return Boolean;
+ 
+    function Equivalent_Keys
+      (Left  : Element_Type;
+       Right : Cursor) return Boolean;
+ 
+    procedure Iterate
+      (Container : Set;
+       Process   : not null access procedure (Position : Cursor));
+ 
+    generic
+       type Key_Type (<>) is limited private;
+ 
+       with function Key (Element : Element_Type) return Key_Type;
+ 
+       with function Hash (Key : Key_Type) return Hash_Type;
+ 
+       with function Equivalent_Keys
+         (Key     : Key_Type;
+          Element : Element_Type) return Boolean;
+ 
+    package Generic_Keys is
+ 
+       function Contains (Container : Set; Key : Key_Type) return Boolean;
+ 
+       function Find (Container : Set; Key : Key_Type) return Cursor;
+ 
+       function Key (Position : Cursor) return Key_Type;
+ 
+       function Element (Container : Set; Key : Key_Type) return Element_Type;
+ 
+ --  TODO: resolve in atlanta???
+ --      procedure Replace (Container : in out Set;
+ --                         Key       : Key_Type;
+ --                         New_Item  : Element_Type);
+ 
+       procedure Delete (Container : in out Set; Key : Key_Type);
+ 
+       procedure Exclude (Container : in out Set; Key : Key_Type);
+ 
+       procedure Checked_Update_Element
+         (Container : in out Set;
+          Position  : Cursor;
+          Process   : not null access
+                        procedure (Element : in out Element_Type));
+ 
+       function Equivalent_Keys
+         (Left  : Cursor;
+          Right : Key_Type) return Boolean;
+ 
+       function Equivalent_Keys
+         (Left  : Key_Type;
+          Right : Cursor) return Boolean;
+    end Generic_Keys;
+ 
+ private
+    type Node_Type;
+    type Node_Access is access Node_Type;
+ 
+    package HT_Types is
+       new Hash_Tables.Generic_Hash_Table_Types (Node_Access);
+ 
+    use HT_Types;
+ 
+    type Set is new Hash_Table_Type with null record;
+ 
+    procedure Adjust (Container : in out Set);
+ 
+    procedure Finalize (Container : in out Set);
+ 
+    type Set_Access is access constant Set;
+    for Set_Access'Storage_Size use 0;
+ 
+    type Cursor is
+       record
+          Container : Set_Access;
+          Node      : Node_Access;
+       end record;
+ 
+    No_Element : constant Cursor :=
+                   (Container => null,
+                    Node      => null);
+ 
+    use Ada.Streams;
+ 
+    procedure Write
+      (Stream    : access Root_Stream_Type'Class;
+       Container : Set);
+ 
+    for Set'Write use Write;
+ 
+    procedure Read
+      (Stream    : access Root_Stream_Type'Class;
+       Container : out Set);
+ 
+    for Set'Read use Read;
+ 
+    Empty_Set : constant Set := (Hash_Table_Type with null record);
+ 
+ end Ada.Containers.Indefinite_Hashed_Sets;
+ 
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ciorma.adb gcc-4.0.0/gcc/ada/a-ciorma.adb
*** gcc-3.4.3/gcc/ada/a-ciorma.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-ciorma.adb	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,1031 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                  ADA.CONTAINERS.INDEFINITE_ORDERED_MAPS                  --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Unchecked_Deallocation;
+ 
+ with Ada.Containers.Red_Black_Trees.Generic_Operations;
+ pragma Elaborate_All (Ada.Containers.Red_Black_Trees.Generic_Operations);
+ 
+ with Ada.Containers.Red_Black_Trees.Generic_Keys;
+ pragma Elaborate_All (Ada.Containers.Red_Black_Trees.Generic_Keys);
+ 
+ with System;  use type System.Address;
+ 
+ package body Ada.Containers.Indefinite_Ordered_Maps is
+ 
+    use Red_Black_Trees;
+ 
+    type Key_Access is access Key_Type;
+    type Element_Access is access Element_Type;
+ 
+    type Node_Type is limited record
+       Parent  : Node_Access;
+       Left    : Node_Access;
+       Right   : Node_Access;
+       Color   : Red_Black_Trees.Color_Type := Red;
+       Key     : Key_Access;
+       Element : Element_Access;
+    end record;
+ 
+    -----------------------------
+    -- Node Access Subprograms --
+    -----------------------------
+ 
+    --  These subprograms provide a functional interface to access fields
+    --  of a node, and a procedural interface for modifying these values.
+ 
+    function Color (Node : Node_Access) return Color_Type;
+    pragma Inline (Color);
+ 
+    function Left (Node : Node_Access) return Node_Access;
+    pragma Inline (Left);
+ 
+    function Parent (Node : Node_Access) return Node_Access;
+    pragma Inline (Parent);
+ 
+    function Right (Node : Node_Access) return Node_Access;
+    pragma Inline (Right);
+ 
+    procedure Set_Parent (Node : Node_Access; Parent : Node_Access);
+    pragma Inline (Set_Parent);
+ 
+    procedure Set_Left (Node : Node_Access; Left : Node_Access);
+    pragma Inline (Set_Left);
+ 
+    procedure Set_Right (Node : Node_Access; Right : Node_Access);
+    pragma Inline (Set_Right);
+ 
+    procedure Set_Color (Node : Node_Access; Color : Color_Type);
+    pragma Inline (Set_Color);
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    function Copy_Node (Source : Node_Access) return Node_Access;
+    pragma Inline (Copy_Node);
+ 
+    function Copy_Tree (Source_Root : Node_Access) return Node_Access;
+ 
+    procedure Delete_Tree (X : in out Node_Access);
+ 
+    procedure Free (X : in out Node_Access);
+ 
+    function Is_Equal_Node_Node
+      (L, R : Node_Access) return Boolean;
+    pragma Inline (Is_Equal_Node_Node);
+ 
+    function Is_Greater_Key_Node
+      (Left  : Key_Type;
+       Right : Node_Access) return Boolean;
+    pragma Inline (Is_Greater_Key_Node);
+ 
+    function Is_Less_Key_Node
+      (Left  : Key_Type;
+       Right : Node_Access) return Boolean;
+    pragma Inline (Is_Less_Key_Node);
+ 
+    --------------------------
+    -- Local Instantiations --
+    --------------------------
+ 
+    package Tree_Operations is
+      new Red_Black_Trees.Generic_Operations
+        (Tree_Types => Tree_Types,
+         Null_Node  => Node_Access'(null));
+ 
+    use Tree_Operations;
+ 
+    package Key_Ops is
+      new Red_Black_Trees.Generic_Keys
+        (Tree_Operations     => Tree_Operations,
+         Key_Type            => Key_Type,
+         Is_Less_Key_Node    => Is_Less_Key_Node,
+         Is_Greater_Key_Node => Is_Greater_Key_Node);
+ 
+    procedure Free_Key is
+      new Ada.Unchecked_Deallocation (Key_Type, Key_Access);
+ 
+    procedure Free_Element is
+      new Ada.Unchecked_Deallocation (Element_Type, Element_Access);
+ 
+    function Is_Equal is
+      new Tree_Operations.Generic_Equal (Is_Equal_Node_Node);
+ 
+    ---------
+    -- "<" --
+    ---------
+ 
+    function "<" (Left, Right : Cursor) return Boolean is
+    begin
+       return Left.Node.Key.all < Right.Node.Key.all;
+    end "<";
+ 
+    function "<" (Left : Cursor; Right : Key_Type) return Boolean is
+    begin
+       return Left.Node.Key.all < Right;
+    end "<";
+ 
+    function "<" (Left : Key_Type; Right : Cursor) return Boolean is
+    begin
+       return Left < Right.Node.Key.all;
+    end "<";
+ 
+    ---------
+    -- "=" --
+    ---------
+ 
+    function "=" (Left, Right : Map) return Boolean is
+    begin
+       if Left'Address = Right'Address then
+          return True;
+       end if;
+ 
+       return Is_Equal (Left.Tree, Right.Tree);
+    end "=";
+ 
+    ---------
+    -- ">" --
+    ---------
+ 
+    function ">" (Left, Right : Cursor) return Boolean is
+    begin
+       return Right.Node.Key.all < Left.Node.Key.all;
+    end ">";
+ 
+    function ">" (Left : Cursor; Right : Key_Type) return Boolean is
+    begin
+       return Right < Left.Node.Key.all;
+    end ">";
+ 
+    function ">" (Left : Key_Type; Right : Cursor) return Boolean is
+    begin
+       return Right.Node.Key.all < Left;
+    end ">";
+ 
+    ------------
+    -- Adjust --
+    ------------
+ 
+    procedure Adjust (Container : in out Map) is
+       Tree : Tree_Type renames Container.Tree;
+ 
+       N : constant Count_Type := Tree.Length;
+       X : constant Node_Access := Tree.Root;
+ 
+    begin
+       if N = 0 then
+          pragma Assert (X = null);
+          return;
+       end if;
+ 
+       Tree := (Length => 0, others => null);
+ 
+       Tree.Root := Copy_Tree (X);
+       Tree.First := Min (Tree.Root);
+       Tree.Last := Max (Tree.Root);
+       Tree.Length := N;
+    end Adjust;
+ 
+    -------------
+    -- Ceiling --
+    -------------
+ 
+    function Ceiling (Container : Map; Key : Key_Type) return Cursor is
+       Node : constant Node_Access := Key_Ops.Ceiling (Container.Tree, Key);
+    begin
+       if Node = null then
+          return No_Element;
+       else
+          return Cursor'(Container'Unchecked_Access, Node);
+       end if;
+    end Ceiling;
+ 
+    -----------
+    -- Clear --
+    -----------
+ 
+    procedure Clear (Container : in out Map) is
+       Tree : Tree_Type renames Container.Tree;
+       Root : Node_Access := Tree.Root;
+    begin
+       Tree := (Length => 0, others => null);
+       Delete_Tree (Root);
+    end Clear;
+ 
+    -----------
+    -- Color --
+    -----------
+ 
+    function Color (Node : Node_Access) return Color_Type is
+    begin
+       return Node.Color;
+    end Color;
+ 
+    --------------
+    -- Contains --
+    --------------
+ 
+    function Contains (Container : Map; Key : Key_Type) return Boolean is
+    begin
+       return Find (Container, Key) /= No_Element;
+    end Contains;
+ 
+    ---------------
+    -- Copy_Node --
+    ---------------
+ 
+    function Copy_Node (Source : Node_Access) return Node_Access is
+       Target : constant Node_Access :=
+          new Node_Type'(Parent  => null,
+                         Left    => null,
+                         Right   => null,
+                         Color   => Source.Color,
+                         Key     => Source.Key,
+                         Element => Source.Element);
+    begin
+       return Target;
+    end Copy_Node;
+ 
+    ---------------
+    -- Copy_Tree --
+    ---------------
+ 
+    function Copy_Tree (Source_Root : Node_Access) return Node_Access is
+       Target_Root : Node_Access := Copy_Node (Source_Root);
+ 
+       P, X : Node_Access;
+ 
+    begin
+       if Source_Root.Right /= null then
+          Target_Root.Right := Copy_Tree (Source_Root.Right);
+          Target_Root.Right.Parent := Target_Root;
+       end if;
+ 
+       P := Target_Root;
+       X := Source_Root.Left;
+       while X /= null loop
+          declare
+             Y : Node_Access := Copy_Node (X);
+ 
+          begin
+             P.Left := Y;
+             Y.Parent := P;
+ 
+             if X.Right /= null then
+                Y.Right := Copy_Tree (X.Right);
+                Y.Right.Parent := Y;
+             end if;
+ 
+             P := Y;
+             X := X.Left;
+          end;
+       end loop;
+ 
+       return Target_Root;
+ 
+    exception
+       when others =>
+          Delete_Tree (Target_Root);
+          raise;
+    end Copy_Tree;
+ 
+    ------------
+    -- Delete --
+    ------------
+ 
+    procedure Delete
+      (Container : in out Map;
+       Position  : in out Cursor)
+    is
+    begin
+       if Position = No_Element then
+          return;
+       end if;
+ 
+       if Position.Container /= Map_Access'(Container'Unchecked_Access) then
+          raise Program_Error;
+       end if;
+ 
+       Delete_Node_Sans_Free (Container.Tree, Position.Node);
+       Free (Position.Node);
+ 
+       Position.Container := null;
+    end Delete;
+ 
+    procedure Delete (Container : in out Map; Key : Key_Type) is
+       X : Node_Access := Key_Ops.Find (Container.Tree, Key);
+    begin
+       if X = null then
+          raise Constraint_Error;
+       else
+          Delete_Node_Sans_Free (Container.Tree, X);
+          Free (X);
+       end if;
+    end Delete;
+ 
+    ------------------
+    -- Delete_First --
+    ------------------
+ 
+    procedure Delete_First (Container : in out Map) is
+       Position : Cursor := First (Container);
+    begin
+       Delete (Container, Position);
+    end Delete_First;
+ 
+    -----------------
+    -- Delete_Last --
+    -----------------
+ 
+    procedure Delete_Last (Container : in out Map) is
+       Position : Cursor := Last (Container);
+    begin
+       Delete (Container, Position);
+    end Delete_Last;
+ 
+    -----------------
+    -- Delete_Tree --
+    -----------------
+ 
+    procedure Delete_Tree (X : in out Node_Access) is
+       Y : Node_Access;
+    begin
+       while X /= null loop
+          Y := X.Right;
+          Delete_Tree (Y);
+          Y := X.Left;
+          Free (X);
+          X := Y;
+       end loop;
+    end Delete_Tree;
+ 
+    -------------
+    -- Element --
+    -------------
+ 
+    function Element (Position : Cursor) return Element_Type is
+    begin
+       return Position.Node.Element.all;
+    end Element;
+ 
+    function Element (Container : Map; Key : Key_Type) return Element_Type is
+       Node : constant Node_Access := Key_Ops.Find (Container.Tree, Key);
+    begin
+       return Node.Element.all;
+    end Element;
+ 
+    -------------
+    -- Exclude --
+    -------------
+ 
+    procedure Exclude (Container : in out Map; Key : Key_Type) is
+       X : Node_Access := Key_Ops.Find (Container.Tree, Key);
+ 
+    begin
+       if X /= null then
+          Delete_Node_Sans_Free (Container.Tree, X);
+          Free (X);
+       end if;
+    end Exclude;
+ 
+    ----------
+    -- Find --
+    ----------
+ 
+    function Find (Container : Map; Key : Key_Type) return Cursor is
+       Node : constant Node_Access := Key_Ops.Find (Container.Tree, Key);
+    begin
+       if Node = null then
+          return No_Element;
+       else
+          return Cursor'(Container'Unchecked_Access, Node);
+       end if;
+    end Find;
+ 
+    -----------
+    -- First --
+    -----------
+ 
+    function First (Container : Map) return Cursor is
+    begin
+       if Container.Tree.First = null then
+          return No_Element;
+       else
+          return Cursor'(Container'Unchecked_Access, Container.Tree.First);
+       end if;
+    end First;
+ 
+    -------------------
+    -- First_Element --
+    -------------------
+ 
+    function First_Element (Container : Map) return Element_Type is
+    begin
+       return Container.Tree.First.Element.all;
+    end First_Element;
+ 
+    ---------------
+    -- First_Key --
+    ---------------
+ 
+    function First_Key (Container : Map) return Key_Type is
+    begin
+       return Container.Tree.First.Key.all;
+    end First_Key;
+ 
+    -----------
+    -- Floor --
+    -----------
+ 
+    function Floor (Container : Map; Key : Key_Type) return Cursor is
+       Node : constant Node_Access := Key_Ops.Floor (Container.Tree, Key);
+    begin
+       if Node = null then
+          return No_Element;
+       else
+          return Cursor'(Container'Unchecked_Access, Node);
+       end if;
+    end Floor;
+ 
+    ----------
+    -- Free --
+    ----------
+ 
+    procedure Free (X : in out Node_Access) is
+       procedure Deallocate is
+         new Ada.Unchecked_Deallocation (Node_Type, Node_Access);
+    begin
+       if X /= null then
+          Free_Key (X.Key);
+          Free_Element (X.Element);
+          Deallocate (X);
+       end if;
+    end Free;
+ 
+    -----------------
+    -- Has_Element --
+    -----------------
+ 
+    function Has_Element (Position : Cursor) return Boolean is
+    begin
+       return Position /= No_Element;
+    end Has_Element;
+ 
+    -------------
+    -- Include --
+    -------------
+ 
+    procedure Include
+      (Container : in out Map;
+       Key       : Key_Type;
+       New_Item  : Element_Type)
+    is
+       Position : Cursor;
+       Inserted : Boolean;
+ 
+       K : Key_Access;
+       E : Element_Access;
+ 
+    begin
+       Insert (Container, Key, New_Item, Position, Inserted);
+ 
+       if not Inserted then
+          K := Position.Node.Key;
+          E := Position.Node.Element;
+ 
+          Position.Node.Key := new Key_Type'(Key);
+          Position.Node.Element := new Element_Type'(New_Item);
+ 
+          Free_Key (K);
+          Free_Element (E);
+       end if;
+    end Include;
+ 
+    ------------
+    -- Insert --
+    ------------
+ 
+    procedure Insert
+      (Container : in out Map;
+       Key       : Key_Type;
+       New_Item  : Element_Type;
+       Position  : out Cursor;
+       Inserted  : out Boolean)
+    is
+       function New_Node return Node_Access;
+       pragma Inline (New_Node);
+ 
+       procedure Insert_Post is
+         new Key_Ops.Generic_Insert_Post (New_Node);
+ 
+       procedure Insert_Sans_Hint is
+         new Key_Ops.Generic_Conditional_Insert (Insert_Post);
+ 
+       --------------
+       -- New_Node --
+       --------------
+ 
+       function New_Node return Node_Access is
+          Node : Node_Access := new Node_Type;
+ 
+       begin
+          Node.Key := new Key_Type'(Key);
+          Node.Element := new Element_Type'(New_Item);
+          return Node;
+ 
+       exception
+          when others =>
+ 
+             --  On exception, deallocate key and elem
+ 
+             Free (Node);
+             raise;
+       end New_Node;
+ 
+    --  Start of processing for Insert
+ 
+    begin
+       Insert_Sans_Hint
+         (Container.Tree,
+          Key,
+          Position.Node,
+          Inserted);
+ 
+       Position.Container := Container'Unchecked_Access;
+    end Insert;
+ 
+    procedure Insert
+      (Container : in out Map;
+       Key       : Key_Type;
+       New_Item  : Element_Type)
+    is
+ 
+       Position : Cursor;
+       Inserted : Boolean;
+ 
+    begin
+       Insert (Container, Key, New_Item, Position, Inserted);
+ 
+       if not Inserted then
+          raise Constraint_Error;
+       end if;
+    end Insert;
+ 
+    --------------
+    -- Is_Empty --
+    --------------
+ 
+    function Is_Empty (Container : Map) return Boolean is
+    begin
+       return Container.Tree.Length = 0;
+    end Is_Empty;
+ 
+    ------------------------
+    -- Is_Equal_Node_Node --
+    ------------------------
+ 
+    function Is_Equal_Node_Node
+      (L, R : Node_Access) return Boolean is
+    begin
+       return L.Element.all = R.Element.all;
+    end Is_Equal_Node_Node;
+ 
+    -------------------------
+    -- Is_Greater_Key_Node --
+    -------------------------
+ 
+    function Is_Greater_Key_Node
+      (Left  : Key_Type;
+       Right : Node_Access) return Boolean
+    is
+    begin
+       --  k > node same as node < k
+ 
+       return Right.Key.all < Left;
+    end Is_Greater_Key_Node;
+ 
+    ----------------------
+    -- Is_Less_Key_Node --
+    ----------------------
+ 
+    function Is_Less_Key_Node
+      (Left  : Key_Type;
+       Right : Node_Access) return Boolean is
+    begin
+       return Left < Right.Key.all;
+    end Is_Less_Key_Node;
+ 
+    -------------
+    -- Iterate --
+    -------------
+ 
+    procedure Iterate
+      (Container : Map;
+       Process   : not null access procedure (Position : Cursor))
+    is
+       procedure Process_Node (Node : Node_Access);
+       pragma Inline (Process_Node);
+ 
+       procedure Local_Iterate is
+         new Tree_Operations.Generic_Iteration (Process_Node);
+ 
+       ------------------
+       -- Process_Node --
+       ------------------
+ 
+       procedure Process_Node (Node : Node_Access) is
+       begin
+          Process (Cursor'(Container'Unchecked_Access, Node));
+       end Process_Node;
+ 
+    --  Start of processing for Iterate
+ 
+    begin
+       Local_Iterate (Container.Tree);
+    end Iterate;
+ 
+    ---------
+    -- Key --
+    ---------
+ 
+    function Key (Position : Cursor) return Key_Type is
+    begin
+       return Position.Node.Key.all;
+    end Key;
+ 
+    ----------
+    -- Last --
+    ----------
+ 
+    function Last (Container : Map) return Cursor is
+    begin
+       if Container.Tree.Last = null then
+          return No_Element;
+       else
+          return Cursor'(Container'Unchecked_Access, Container.Tree.Last);
+       end if;
+    end Last;
+ 
+    ------------------
+    -- Last_Element --
+    ------------------
+ 
+    function Last_Element (Container : Map) return Element_Type is
+    begin
+       return Container.Tree.Last.Element.all;
+    end Last_Element;
+ 
+    --------------
+    -- Last_Key --
+    --------------
+ 
+    function Last_Key (Container : Map) return Key_Type is
+    begin
+       return Container.Tree.Last.Key.all;
+    end Last_Key;
+ 
+    ----------
+    -- Left --
+    ----------
+ 
+    function Left (Node : Node_Access) return Node_Access is
+    begin
+       return Node.Left;
+    end Left;
+ 
+    ------------
+    -- Length --
+    ------------
+ 
+    function Length (Container : Map) return Count_Type is
+    begin
+       return Container.Tree.Length;
+    end Length;
+ 
+    ----------
+    -- Move --
+    ----------
+ 
+    procedure Move (Target : in out Map; Source : in out Map) is
+    begin
+       if Target'Address = Source'Address then
+          return;
+       end if;
+ 
+       Move (Target => Target.Tree, Source => Source.Tree);
+    end Move;
+ 
+    ----------
+    -- Next --
+    ----------
+ 
+    function Next (Position : Cursor) return Cursor is
+    begin
+       if Position = No_Element then
+          return No_Element;
+       end if;
+ 
+       declare
+          Node : constant Node_Access := Tree_Operations.Next (Position.Node);
+       begin
+          if Node = null then
+             return No_Element;
+          else
+             return Cursor'(Position.Container, Node);
+          end if;
+       end;
+    end Next;
+ 
+    procedure Next (Position : in out Cursor) is
+    begin
+       Position := Next (Position);
+    end Next;
+ 
+    ------------
+    -- Parent --
+    ------------
+ 
+    function Parent (Node : Node_Access) return Node_Access is
+    begin
+       return Node.Parent;
+    end Parent;
+ 
+    --------------
+    -- Previous --
+    --------------
+ 
+    function Previous (Position : Cursor) return Cursor is
+    begin
+       if Position = No_Element then
+          return No_Element;
+       end if;
+ 
+       declare
+          Node : constant Node_Access :=
+            Tree_Operations.Previous (Position.Node);
+       begin
+          if Node = null then
+             return No_Element;
+          end if;
+ 
+          return Cursor'(Position.Container, Node);
+       end;
+    end Previous;
+ 
+    procedure Previous (Position : in out Cursor) is
+    begin
+       Position := Previous (Position);
+    end Previous;
+ 
+    -------------------
+    -- Query_Element --
+    -------------------
+ 
+    procedure Query_Element
+      (Position : Cursor;
+       Process  : not null access procedure (Element : Element_Type))
+    is
+    begin
+       Process (Position.Node.Key.all, Position.Node.Element.all);
+    end Query_Element;
+ 
+    ----------
+    -- Read --
+    ----------
+ 
+    procedure Read
+      (Stream    : access Root_Stream_Type'Class;
+       Container : out Map)
+    is
+       N : Count_Type'Base;
+ 
+       function New_Node return Node_Access;
+       pragma Inline (New_Node);
+ 
+       procedure Local_Read is new Tree_Operations.Generic_Read (New_Node);
+ 
+       --------------
+       -- New_Node --
+       --------------
+ 
+       function New_Node return Node_Access is
+          Node : Node_Access := new Node_Type;
+ 
+       begin
+          Node.Key := new Key_Type'(Key_Type'Input (Stream));
+          Node.Element := new Element_Type'(Element_Type'Input (Stream));
+          return Node;
+ 
+       exception
+          when others =>
+ 
+             --  Deallocate key and elem too on exception
+ 
+             Free (Node);
+             raise;
+       end New_Node;
+ 
+    --  Start of processing for Read
+ 
+    begin
+       Clear (Container);
+ 
+       Count_Type'Base'Read (Stream, N);
+       pragma Assert (N >= 0);
+ 
+       Local_Read (Container.Tree, N);
+    end Read;
+ 
+    -------------
+    -- Replace --
+    -------------
+ 
+    procedure Replace
+      (Container : in out Map;
+       Key       : Key_Type;
+       New_Item  : Element_Type)
+    is
+       Node : constant Node_Access :=
+                Key_Ops.Find (Container.Tree, Key);
+ 
+       K : Key_Access;
+       E : Element_Access;
+ 
+    begin
+       if Node = null then
+          raise Constraint_Error;
+       end if;
+ 
+       K := Node.Key;
+       E := Node.Element;
+ 
+       Node.Key := new Key_Type'(Key);
+       Node.Element := new Element_Type'(New_Item);
+ 
+       Free_Key (K);
+       Free_Element (E);
+    end Replace;
+ 
+    ---------------------
+    -- Replace_Element --
+    ---------------------
+ 
+    procedure Replace_Element (Position : Cursor; By : Element_Type) is
+       X : Element_Access := Position.Node.Element;
+    begin
+       Position.Node.Element := new Element_Type'(By);
+       Free_Element (X);
+    end Replace_Element;
+ 
+    ---------------------
+    -- Reverse_Iterate --
+    ---------------------
+ 
+    procedure Reverse_Iterate
+      (Container : Map;
+       Process   : not null access procedure (Position : Cursor))
+    is
+       procedure Process_Node (Node : Node_Access);
+       pragma Inline (Process_Node);
+ 
+       procedure Local_Reverse_Iterate is
+         new Tree_Operations.Generic_Reverse_Iteration (Process_Node);
+ 
+       ------------------
+       -- Process_Node --
+       ------------------
+ 
+       procedure Process_Node (Node : Node_Access) is
+       begin
+          Process (Cursor'(Container'Unchecked_Access, Node));
+       end Process_Node;
+ 
+    --  Start of processing for Reverse_Iterate
+ 
+    begin
+       Local_Reverse_Iterate (Container.Tree);
+    end Reverse_Iterate;
+ 
+    -----------
+    -- Right --
+    -----------
+ 
+    function Right (Node : Node_Access) return Node_Access is
+    begin
+       return Node.Right;
+    end Right;
+ 
+    ---------------
+    -- Set_Color --
+    ---------------
+ 
+    procedure Set_Color (Node : Node_Access; Color : Color_Type) is
+    begin
+       Node.Color := Color;
+    end Set_Color;
+ 
+    --------------
+    -- Set_Left --
+    --------------
+ 
+    procedure Set_Left (Node : Node_Access; Left : Node_Access) is
+    begin
+       Node.Left := Left;
+    end Set_Left;
+ 
+    ----------------
+    -- Set_Parent --
+    ----------------
+ 
+    procedure Set_Parent (Node : Node_Access; Parent : Node_Access) is
+    begin
+       Node.Parent := Parent;
+    end Set_Parent;
+ 
+    ---------------
+    -- Set_Right --
+    ---------------
+ 
+    procedure Set_Right (Node : Node_Access; Right : Node_Access) is
+    begin
+       Node.Right := Right;
+    end Set_Right;
+ 
+    --------------------
+    -- Update_Element --
+    --------------------
+ 
+    procedure Update_Element
+      (Position : Cursor;
+       Process  : not null access procedure (Element : in out Element_Type))
+    is
+    begin
+       Process (Position.Node.Key.all, Position.Node.Element.all);
+    end Update_Element;
+ 
+    -----------
+    -- Write --
+    -----------
+ 
+    procedure Write
+      (Stream    : access Root_Stream_Type'Class;
+       Container : Map)
+    is
+       procedure Process (Node : Node_Access);
+       pragma Inline (Process);
+ 
+       procedure Iterate is
+         new Tree_Operations.Generic_Iteration (Process);
+ 
+       -------------
+       -- Process --
+       -------------
+ 
+       procedure Process (Node : Node_Access) is
+       begin
+          Key_Type'Output (Stream, Node.Key.all);
+          Element_Type'Output (Stream, Node.Element.all);
+       end Process;
+ 
+    --  Start of processing for Write
+ 
+    begin
+       Count_Type'Base'Write (Stream, Container.Tree.Length);
+       Iterate (Container.Tree);
+    end Write;
+ 
+ end Ada.Containers.Indefinite_Ordered_Maps;
+ 
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ciorma.ads gcc-4.0.0/gcc/ada/a-ciorma.ads
*** gcc-3.4.3/gcc/ada/a-ciorma.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-ciorma.ads	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,234 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                  ADA.CONTAINERS.INDEFINITE_ORDERED_MAPS                  --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Containers.Red_Black_Trees;
+ with Ada.Finalization;
+ with Ada.Streams;
+ 
+ generic
+ 
+    type Key_Type (<>) is private;
+ 
+    type Element_Type (<>) is private;
+ 
+    with function "<" (Left, Right : Key_Type) return Boolean is <>;
+ 
+    with function "=" (Left, Right : Element_Type) return Boolean is <>;
+ 
+ package Ada.Containers.Indefinite_Ordered_Maps is
+ pragma Preelaborate (Indefinite_Ordered_Maps);
+ 
+    type Map is tagged private;
+ 
+    type Cursor is private;
+ 
+    Empty_Map : constant Map;
+ 
+    No_Element : constant Cursor;
+ 
+    function "=" (Left, Right : Map) return Boolean;
+ 
+    function Length (Container : Map) return Count_Type;
+ 
+    function Is_Empty (Container : Map) return Boolean;
+ 
+    procedure Clear (Container : in out Map);
+ 
+    function Key (Position : Cursor) return Key_Type;
+ 
+    function Element (Position : Cursor) return Element_Type;
+ 
+    procedure Query_Element
+      (Position : Cursor;
+       Process  : not null access procedure (Key     : Key_Type;
+                                             Element : Element_Type));
+ 
+    procedure Update_Element
+      (Position : Cursor;
+       Process  : not null access procedure (Key     : Key_Type;
+                                             Element : in out Element_Type));
+ 
+    procedure Replace_Element (Position : Cursor; By : Element_Type);
+ 
+    procedure Move (Target : in out Map; Source : in out Map);
+ 
+    procedure Insert
+      (Container : in out Map;
+       Key       : Key_Type;
+       New_Item  : Element_Type;
+       Position  : out Cursor;
+       Inserted  : out Boolean);
+ 
+    procedure Insert
+      (Container : in out Map;
+       Key       : Key_Type;
+       New_Item  : Element_Type);
+ 
+    procedure Include
+      (Container : in out Map;
+       Key       : Key_Type;
+       New_Item  : Element_Type);
+ 
+    procedure Replace
+      (Container : in out Map;
+       Key       : Key_Type;
+       New_Item  : Element_Type);
+ 
+    procedure Delete
+      (Container : in out Map;
+       Key       : Key_Type);
+ 
+    procedure Exclude
+      (Container : in out Map;
+       Key       : Key_Type);
+ 
+    procedure Delete
+      (Container : in out Map;
+       Position  : in out Cursor);
+ 
+    procedure Delete_First (Container : in out Map);
+ 
+    procedure Delete_Last (Container : in out Map);
+ 
+    function Contains
+      (Container : Map;
+       Key       : Key_Type) return Boolean;
+ 
+    function Find
+      (Container : Map;
+       Key       : Key_Type) return Cursor;
+ 
+    function Element
+      (Container : Map;
+       Key       : Key_Type) return Element_Type;
+ 
+    function Floor
+      (Container : Map;
+       Key       : Key_Type) return Cursor;
+ 
+    function Ceiling
+      (Container : Map;
+       Key       : Key_Type) return Cursor;
+ 
+    function First (Container : Map) return Cursor;
+ 
+    function First_Key (Container : Map) return Key_Type;
+ 
+    function First_Element (Container : Map) return Element_Type;
+ 
+    function Last (Container : Map) return Cursor;
+ 
+    function Last_Key (Container : Map) return Key_Type;
+ 
+    function Last_Element (Container : Map) return Element_Type;
+ 
+    function Next (Position : Cursor) return Cursor;
+ 
+    function Previous (Position : Cursor) return Cursor;
+ 
+    procedure Next (Position : in out Cursor);
+ 
+    procedure Previous (Position : in out Cursor);
+ 
+    function Has_Element (Position : Cursor) return Boolean;
+ 
+    function "<" (Left, Right : Cursor) return Boolean;
+ 
+    function ">" (Left, Right : Cursor) return Boolean;
+ 
+    function "<" (Left : Cursor; Right : Key_Type) return Boolean;
+ 
+    function ">" (Left : Cursor; Right : Key_Type) return Boolean;
+ 
+    function "<" (Left : Key_Type; Right : Cursor) return Boolean;
+ 
+    function ">" (Left : Key_Type; Right : Cursor) return Boolean;
+ 
+    procedure Iterate
+      (Container : Map;
+       Process   : not null access procedure (Position : Cursor));
+ 
+    procedure Reverse_Iterate
+      (Container : Map;
+       Process   : not null access procedure (Position : Cursor));
+ 
+ private
+ 
+    type Node_Type;
+    type Node_Access is access Node_Type;
+ 
+    package Tree_Types is
+      new Red_Black_Trees.Generic_Tree_Types (Node_Access);
+ 
+    use Tree_Types;
+    use Ada.Finalization;
+ 
+    type Map is new Controlled with record
+       Tree : Tree_Type := (Length => 0, others => null);
+    end record;
+ 
+    procedure Adjust (Container : in out Map);
+ 
+    procedure Finalize (Container : in out Map) renames Clear;
+ 
+    type Map_Access is access constant Map;
+    for Map_Access'Storage_Size use 0;
+ 
+    type Cursor is record
+       Container : Map_Access;
+       Node      : Node_Access;
+    end record;
+ 
+    No_Element : constant Cursor := Cursor'(null, null);
+ 
+    use Ada.Streams;
+ 
+    procedure Write
+      (Stream    : access Root_Stream_Type'Class;
+       Container : Map);
+ 
+    for Map'Write use Write;
+ 
+    procedure Read
+      (Stream    : access Root_Stream_Type'Class;
+       Container : out Map);
+ 
+    for Map'Read use Read;
+ 
+    Empty_Map : constant Map :=
+      (Controlled with Tree => (Length => 0, others => null));
+ 
+ end Ada.Containers.Indefinite_Ordered_Maps;
+ 
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ciormu.adb gcc-4.0.0/gcc/ada/a-ciormu.adb
*** gcc-3.4.3/gcc/ada/a-ciormu.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-ciormu.adb	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,1659 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --               ADA.CONTAINERS.INDEFINITE_ORDERED_MULTISETS                --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Unchecked_Deallocation;
+ 
+ with Ada.Containers.Red_Black_Trees.Generic_Operations;
+ pragma Elaborate_All (Ada.Containers.Red_Black_Trees.Generic_Operations);
+ 
+ with Ada.Containers.Red_Black_Trees.Generic_Keys;
+ pragma Elaborate_All (Ada.Containers.Red_Black_Trees.Generic_Keys);
+ 
+ with Ada.Containers.Red_Black_Trees.Generic_Set_Operations;
+ pragma Elaborate_All (Ada.Containers.Red_Black_Trees.Generic_Set_Operations);
+ 
+ with System;  use type System.Address;
+ 
+ package body Ada.Containers.Indefinite_Ordered_Multisets is
+ 
+    use Red_Black_Trees;
+ 
+    type Element_Access is access Element_Type;
+ 
+    type Node_Type is limited record
+       Parent  : Node_Access;
+       Left    : Node_Access;
+       Right   : Node_Access;
+       Color   : Red_Black_Trees.Color_Type := Red;
+       Element : Element_Access;
+    end record;
+ 
+    -----------------------------
+    -- Node Access Subprograms --
+    -----------------------------
+ 
+    --  These subprograms provide a functional interface to access fields
+    --  of a node, and a procedural interface for modifying these values.
+ 
+    function Color (Node : Node_Access) return Color_Type;
+    pragma Inline (Color);
+ 
+    function Left (Node : Node_Access) return Node_Access;
+    pragma Inline (Left);
+ 
+    function Parent (Node : Node_Access) return Node_Access;
+    pragma Inline (Parent);
+ 
+    function Right (Node : Node_Access) return Node_Access;
+    pragma Inline (Right);
+ 
+    procedure Set_Parent (Node : Node_Access; Parent : Node_Access);
+    pragma Inline (Set_Parent);
+ 
+    procedure Set_Left (Node : Node_Access; Left : Node_Access);
+    pragma Inline (Set_Left);
+ 
+    procedure Set_Right (Node : Node_Access; Right : Node_Access);
+    pragma Inline (Set_Right);
+ 
+    procedure Set_Color (Node : Node_Access; Color : Color_Type);
+    pragma Inline (Set_Color);
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    function Copy_Node (Source : Node_Access) return Node_Access;
+    pragma Inline (Copy_Node);
+ 
+    function Copy_Tree (Source_Root : Node_Access) return Node_Access;
+ 
+    procedure Delete_Tree (X : in out Node_Access);
+ 
+    procedure Free (X : in out Node_Access);
+ 
+    procedure Insert_With_Hint
+      (Dst_Tree : in out Tree_Type;
+       Dst_Hint : Node_Access;
+       Src_Node : Node_Access;
+       Dst_Node : out Node_Access);
+ 
+    function Is_Equal_Node_Node (L, R : Node_Access) return Boolean;
+    pragma Inline (Is_Equal_Node_Node);
+ 
+    function Is_Greater_Element_Node
+      (Left  : Element_Type;
+       Right : Node_Access) return Boolean;
+    pragma Inline (Is_Greater_Element_Node);
+ 
+    function Is_Less_Element_Node
+      (Left  : Element_Type;
+       Right : Node_Access) return Boolean;
+    pragma Inline (Is_Less_Element_Node);
+ 
+    function Is_Less_Node_Node (L, R : Node_Access) return Boolean;
+    pragma Inline (Is_Less_Node_Node);
+ 
+    --------------------------
+    -- Local Instantiations --
+    --------------------------
+ 
+    package Tree_Operations is
+      new Red_Black_Trees.Generic_Operations
+        (Tree_Types => Tree_Types,
+         Null_Node  => Node_Access'(null));
+ 
+    use Tree_Operations;
+ 
+    procedure Free_Element is
+      new Ada.Unchecked_Deallocation (Element_Type, Element_Access);
+ 
+    function Is_Equal is
+      new Tree_Operations.Generic_Equal (Is_Equal_Node_Node);
+ 
+    package Set_Ops is
+      new Generic_Set_Operations
+        (Tree_Operations  => Tree_Operations,
+         Insert_With_Hint => Insert_With_Hint,
+         Copy_Tree        => Copy_Tree,
+         Delete_Tree      => Delete_Tree,
+         Is_Less          => Is_Less_Node_Node,
+         Free             => Free);
+ 
+    package Element_Keys is
+      new Red_Black_Trees.Generic_Keys
+        (Tree_Operations     => Tree_Operations,
+         Key_Type            => Element_Type,
+         Is_Less_Key_Node    => Is_Less_Element_Node,
+         Is_Greater_Key_Node => Is_Greater_Element_Node);
+ 
+    ---------
+    -- "<" --
+    ---------
+ 
+    function "<" (Left, Right : Cursor) return Boolean is
+    begin
+       return Left.Node.Element.all < Right.Node.Element.all;
+    end "<";
+ 
+    function "<" (Left : Cursor; Right : Element_Type) return Boolean is
+    begin
+       return Left.Node.Element.all < Right;
+    end "<";
+ 
+    function "<" (Left : Element_Type; Right : Cursor) return Boolean is
+    begin
+       return Left < Right.Node.Element.all;
+    end "<";
+ 
+    ---------
+    -- "=" --
+    ---------
+ 
+    function "=" (Left, Right : Set) return Boolean is begin
+       if Left'Address = Right'Address then
+          return True;
+       end if;
+ 
+       return Is_Equal (Left.Tree, Right.Tree);
+    end "=";
+ 
+    ---------
+    -- ">" --
+    ---------
+ 
+    function ">" (Left : Cursor; Right : Element_Type) return Boolean is
+    begin
+       return Right < Left.Node.Element.all;
+    end ">";
+ 
+    function ">" (Left, Right : Cursor) return Boolean is
+    begin
+       --  L > R same as R < L
+ 
+       return Right.Node.Element.all < Left.Node.Element.all;
+    end ">";
+ 
+    function ">" (Left : Element_Type; Right : Cursor) return Boolean is
+    begin
+       return Right.Node.Element.all < Left;
+    end ">";
+ 
+    ------------
+    -- Adjust --
+    ------------
+ 
+    procedure Adjust (Container : in out Set) is
+       Tree : Tree_Type renames Container.Tree;
+ 
+       N : constant Count_Type := Tree.Length;
+       X : constant Node_Access := Tree.Root;
+ 
+    begin
+       if N = 0 then
+          pragma Assert (X = null);
+          return;
+       end if;
+ 
+       Tree := (Length => 0, others => null);
+ 
+       Tree.Root := Copy_Tree (X);
+       Tree.First := Min (Tree.Root);
+       Tree.Last := Max (Tree.Root);
+       Tree.Length := N;
+    end Adjust;
+ 
+    -------------
+    -- Ceiling --
+    -------------
+ 
+    function Ceiling (Container : Set; Item : Element_Type) return Cursor is
+       Node : constant Node_Access :=
+                Element_Keys.Ceiling (Container.Tree, Item);
+ 
+    begin
+       if Node = null then
+          return No_Element;
+       end if;
+ 
+       return Cursor'(Container'Unchecked_Access, Node);
+    end Ceiling;
+ 
+    -----------
+    -- Clear --
+    -----------
+ 
+    procedure Clear (Container : in out Set) is
+       Tree : Tree_Type renames Container.Tree;
+       Root : Node_Access := Tree.Root;
+    begin
+       Tree := (Length => 0, others => null);
+       Delete_Tree (Root);
+    end Clear;
+ 
+    -----------
+    -- Color --
+    -----------
+ 
+    function Color (Node : Node_Access) return Color_Type is
+    begin
+       return Node.Color;
+    end Color;
+ 
+    --------------
+    -- Contains --
+    --------------
+ 
+    function Contains (Container : Set; Item : Element_Type) return Boolean is
+    begin
+       return Find (Container, Item) /= No_Element;
+    end Contains;
+ 
+    ---------------
+    -- Copy_Node --
+    ---------------
+ 
+    function Copy_Node (Source : Node_Access) return Node_Access is
+       X : Element_Access := new Element_Type'(Source.Element.all);
+ 
+    begin
+       return new Node_Type'(Parent  => null,
+                             Left    => null,
+                             Right   => null,
+                             Color   => Source.Color,
+                             Element => X);
+ 
+    exception
+       when others =>
+          Free_Element (X);
+          raise;
+    end Copy_Node;
+ 
+    ---------------
+    -- Copy_Tree --
+    ---------------
+ 
+    function Copy_Tree (Source_Root : Node_Access) return Node_Access is
+       Target_Root : Node_Access := Copy_Node (Source_Root);
+ 
+       P, X : Node_Access;
+ 
+    begin
+       if Source_Root.Right /= null then
+          Target_Root.Right := Copy_Tree (Source_Root.Right);
+          Target_Root.Right.Parent := Target_Root;
+       end if;
+ 
+       P := Target_Root;
+       X := Source_Root.Left;
+       while X /= null loop
+          declare
+             Y : Node_Access := Copy_Node (X);
+ 
+          begin
+             P.Left := Y;
+             Y.Parent := P;
+ 
+             if X.Right /= null then
+                Y.Right := Copy_Tree (X.Right);
+                Y.Right.Parent := Y;
+             end if;
+ 
+             P := Y;
+             X := X.Left;
+          end;
+       end loop;
+ 
+       return Target_Root;
+ 
+    exception
+       when others =>
+          Delete_Tree (Target_Root);
+          raise;
+    end Copy_Tree;
+ 
+    ------------
+    -- Delete --
+    ------------
+ 
+    procedure Delete (Container : in out Set; Item : Element_Type) is
+       Tree : Tree_Type renames Container.Tree;
+       Node : Node_Access := Element_Keys.Ceiling (Tree, Item);
+       Done : constant Node_Access := Element_Keys.Upper_Bound (Tree, Item);
+       X    : Node_Access;
+ 
+    begin
+       if Node = Done then
+          raise Constraint_Error;
+       end if;
+ 
+       loop
+          X := Node;
+          Node := Tree_Operations.Next (Node);
+          Tree_Operations.Delete_Node_Sans_Free (Tree, X);
+          Free (X);
+ 
+          exit when Node = Done;
+       end loop;
+    end Delete;
+ 
+    procedure Delete (Container : in out Set; Position : in out Cursor) is
+    begin
+       if Position = No_Element then
+          return;
+       end if;
+ 
+       if Position.Container /= Set_Access'(Container'Unchecked_Access) then
+          raise Program_Error;
+       end if;
+ 
+       Delete_Node_Sans_Free (Container.Tree, Position.Node);
+       Free (Position.Node);
+ 
+       Position.Container := null;
+    end Delete;
+ 
+    ------------------
+    -- Delete_First --
+    ------------------
+ 
+    procedure Delete_First (Container : in out Set) is
+       Tree : Tree_Type renames Container.Tree;
+       X    : Node_Access := Tree.First;
+ 
+    begin
+       if X = null then
+          return;
+       end if;
+ 
+       Tree_Operations.Delete_Node_Sans_Free (Tree, X);
+       Free (X);
+    end Delete_First;
+ 
+    -----------------
+    -- Delete_Last --
+    -----------------
+ 
+    procedure Delete_Last (Container : in out Set) is
+       Tree : Tree_Type renames Container.Tree;
+       X    : Node_Access := Tree.Last;
+ 
+    begin
+       if X = null then
+          return;
+       end if;
+ 
+       Tree_Operations.Delete_Node_Sans_Free (Tree, X);
+       Free (X);
+    end Delete_Last;
+ 
+    -----------------
+    -- Delete_Tree --
+    -----------------
+ 
+    procedure Delete_Tree (X : in out Node_Access) is
+       Y : Node_Access;
+    begin
+       while X /= null loop
+          Y := X.Right;
+          Delete_Tree (Y);
+          Y := X.Left;
+          Free (X);
+          X := Y;
+       end loop;
+    end Delete_Tree;
+ 
+    ----------------
+    -- Difference --
+    ----------------
+ 
+    procedure Difference (Target : in out Set; Source : Set) is
+    begin
+       if Target'Address = Source'Address then
+          Clear (Target);
+          return;
+       end if;
+ 
+       Set_Ops.Difference (Target.Tree, Source.Tree);
+    end Difference;
+ 
+    function Difference (Left, Right : Set) return Set is
+    begin
+       if Left'Address = Right'Address then
+          return Empty_Set;
+       end if;
+ 
+       declare
+          Tree : constant Tree_Type :=
+                   Set_Ops.Difference (Left.Tree, Right.Tree);
+       begin
+          return (Controlled with Tree);
+       end;
+    end Difference;
+ 
+    -------------
+    -- Element --
+    -------------
+ 
+    function Element (Position : Cursor) return Element_Type is
+    begin
+       return Position.Node.Element.all;
+    end Element;
+ 
+    -------------
+    -- Exclude --
+    -------------
+ 
+    procedure Exclude (Container : in out Set; Item : Element_Type) is
+       Tree : Tree_Type renames Container.Tree;
+       Node : Node_Access := Element_Keys.Ceiling (Tree, Item);
+       Done : constant Node_Access := Element_Keys.Upper_Bound (Tree, Item);
+       X    : Node_Access;
+    begin
+       while Node /= Done loop
+          X := Node;
+          Node := Tree_Operations.Next (Node);
+          Tree_Operations.Delete_Node_Sans_Free (Tree, X);
+          Free (X);
+       end loop;
+    end Exclude;
+ 
+    ----------
+    -- Find --
+    ----------
+ 
+    function Find (Container : Set; Item : Element_Type) return Cursor is
+       Node : constant Node_Access :=
+                Element_Keys.Find (Container.Tree, Item);
+ 
+    begin
+       if Node = null then
+          return No_Element;
+       end if;
+ 
+       return Cursor'(Container'Unchecked_Access, Node);
+    end Find;
+ 
+    -----------
+    -- First --
+    -----------
+ 
+    function First (Container : Set) return Cursor is
+    begin
+       if Container.Tree.First = null then
+          return No_Element;
+       end if;
+ 
+       return Cursor'(Container'Unchecked_Access, Container.Tree.First);
+    end First;
+ 
+    -------------------
+    -- First_Element --
+    -------------------
+ 
+    function First_Element (Container : Set) return Element_Type is
+    begin
+       return Container.Tree.First.Element.all;
+    end First_Element;
+ 
+    -----------
+    -- Floor --
+    -----------
+ 
+    function Floor (Container : Set; Item : Element_Type) return Cursor is
+       Node : constant Node_Access :=
+                Element_Keys.Floor (Container.Tree, Item);
+ 
+    begin
+       if Node = null then
+          return No_Element;
+       end if;
+ 
+       return Cursor'(Container'Unchecked_Access, Node);
+    end Floor;
+ 
+    ----------
+    -- Free --
+    ----------
+ 
+    procedure Free (X : in out Node_Access) is
+       procedure Deallocate is
+         new Ada.Unchecked_Deallocation (Node_Type, Node_Access);
+    begin
+       if X /= null then
+          Free_Element (X.Element);
+          Deallocate (X);
+       end if;
+    end Free;
+ 
+    ------------------
+    -- Generic_Keys --
+    ------------------
+ 
+    package body Generic_Keys is
+ 
+       -----------------------
+       -- Local Subprograms --
+       -----------------------
+ 
+       function Is_Less_Key_Node
+         (Left  : Key_Type;
+          Right : Node_Access) return Boolean;
+       pragma Inline (Is_Less_Key_Node);
+ 
+       function Is_Greater_Key_Node
+         (Left  : Key_Type;
+          Right : Node_Access) return Boolean;
+       pragma Inline (Is_Greater_Key_Node);
+ 
+       --------------------------
+       -- Local Instantiations --
+       --------------------------
+ 
+       package Key_Keys is
+         new Red_Black_Trees.Generic_Keys
+           (Tree_Operations     => Tree_Operations,
+            Key_Type            => Key_Type,
+            Is_Less_Key_Node    => Is_Less_Key_Node,
+            Is_Greater_Key_Node => Is_Greater_Key_Node);
+ 
+       ---------
+       -- "<" --
+       ---------
+ 
+       function "<" (Left : Key_Type; Right : Cursor) return Boolean is
+       begin
+          return Left < Right.Node.Element.all;
+       end "<";
+ 
+       function "<" (Left : Cursor; Right : Key_Type) return Boolean is
+       begin
+          return Right > Left.Node.Element.all;
+       end "<";
+ 
+       ---------
+       -- ">" --
+       ---------
+ 
+       function ">" (Left : Key_Type; Right : Cursor) return Boolean is
+       begin
+          return Left > Right.Node.Element.all;
+       end ">";
+ 
+       function ">" (Left : Cursor; Right : Key_Type) return Boolean is
+       begin
+          return Right < Left.Node.Element.all;
+       end ">";
+ 
+       -------------
+       -- Ceiling --
+       -------------
+ 
+       function Ceiling (Container : Set; Key : Key_Type) return Cursor is
+          Node : constant Node_Access :=
+                   Key_Keys.Ceiling (Container.Tree, Key);
+ 
+       begin
+          if Node = null then
+             return No_Element;
+          end if;
+ 
+          return Cursor'(Container'Unchecked_Access, Node);
+       end Ceiling;
+ 
+       ----------------------------
+       -- Checked_Update_Element --
+       ----------------------------
+ 
+       procedure Checked_Update_Element
+         (Container : in out Set;
+          Position  : Cursor;
+          Process   : not null access procedure (Element : in out Element_Type))
+       is
+       begin
+          if Position.Container = null then
+             raise Constraint_Error;
+          end if;
+ 
+          if Position.Container /= Set_Access'(Container'Unchecked_Access) then
+             raise Program_Error;
+          end if;
+ 
+          declare
+             Old_Key : Key_Type renames Key (Position.Node.Element.all);
+ 
+          begin
+             Process (Position.Node.Element.all);
+ 
+             if Old_Key < Position.Node.Element.all
+               or else Old_Key > Position.Node.Element.all
+             then
+                null;
+             else
+                return;
+             end if;
+          end;
+ 
+          Delete_Node_Sans_Free (Container.Tree, Position.Node);
+ 
+          Do_Insert : declare
+             Result : Node_Access;
+ 
+             function New_Node return Node_Access;
+             pragma Inline (New_Node);
+ 
+             procedure Insert_Post is
+               new Key_Keys.Generic_Insert_Post (New_Node);
+ 
+             procedure Insert is
+               new Key_Keys.Generic_Unconditional_Insert (Insert_Post);
+ 
+             --------------
+             -- New_Node --
+             --------------
+ 
+             function New_Node return Node_Access is
+             begin
+                return Position.Node;
+             end New_Node;
+ 
+          --  Start of processing for Do_Insert
+ 
+          begin
+             Insert
+               (Tree    => Container.Tree,
+                Key     => Key (Position.Node.Element.all),
+                Node    => Result);
+ 
+             pragma Assert (Result = Position.Node);
+          end Do_Insert;
+       end Checked_Update_Element;
+ 
+       --------------
+       -- Contains --
+       --------------
+ 
+       function Contains (Container : Set; Key : Key_Type) return Boolean is
+       begin
+          return Find (Container, Key) /= No_Element;
+       end Contains;
+ 
+       ------------
+       -- Delete --
+       ------------
+ 
+       procedure Delete (Container : in out Set; Key : Key_Type) is
+          Tree : Tree_Type renames Container.Tree;
+          Node : Node_Access := Key_Keys.Ceiling (Tree, Key);
+          Done : constant Node_Access := Key_Keys.Upper_Bound (Tree, Key);
+          X    : Node_Access;
+ 
+       begin
+          if Node = Done then
+             raise Constraint_Error;
+          end if;
+ 
+          loop
+             X := Node;
+             Node := Tree_Operations.Next (Node);
+             Tree_Operations.Delete_Node_Sans_Free (Tree, X);
+             Free (X);
+ 
+             exit when Node = Done;
+          end loop;
+       end Delete;
+ 
+       -------------
+       -- Element --
+       -------------
+ 
+       function Element (Container : Set; Key : Key_Type) return Element_Type is
+          Node : constant Node_Access := Key_Keys.Find (Container.Tree, Key);
+       begin
+          return Node.Element.all;
+       end Element;
+ 
+       -------------
+       -- Exclude --
+       -------------
+ 
+       procedure Exclude (Container : in out Set; Key : Key_Type) is
+          Tree : Tree_Type renames Container.Tree;
+          Node : Node_Access := Key_Keys.Ceiling (Tree, Key);
+          Done : constant Node_Access := Key_Keys.Upper_Bound (Tree, Key);
+          X    : Node_Access;
+ 
+       begin
+          while Node /= Done loop
+             X := Node;
+             Node := Tree_Operations.Next (Node);
+             Tree_Operations.Delete_Node_Sans_Free (Tree, X);
+             Free (X);
+          end loop;
+       end Exclude;
+ 
+       ----------
+       -- Find --
+       ----------
+ 
+       function Find (Container : Set; Key : Key_Type) return Cursor is
+          Node : constant Node_Access := Key_Keys.Find (Container.Tree, Key);
+ 
+       begin
+          if Node = null then
+             return No_Element;
+          end if;
+ 
+          return Cursor'(Container'Unchecked_Access, Node);
+       end Find;
+ 
+       -----------
+       -- Floor --
+       -----------
+ 
+       function Floor (Container : Set; Key : Key_Type) return Cursor is
+          Node : constant Node_Access := Key_Keys.Floor (Container.Tree, Key);
+ 
+       begin
+          if Node = null then
+             return No_Element;
+          end if;
+ 
+          return Cursor'(Container'Unchecked_Access, Node);
+       end Floor;
+ 
+       -------------------------
+       -- Is_Greater_Key_Node --
+       -------------------------
+ 
+       function Is_Greater_Key_Node
+         (Left  : Key_Type;
+          Right : Node_Access) return Boolean is
+       begin
+          return Left > Right.Element.all;
+       end Is_Greater_Key_Node;
+ 
+       ----------------------
+       -- Is_Less_Key_Node --
+       ----------------------
+ 
+       function Is_Less_Key_Node
+         (Left  : Key_Type;
+          Right : Node_Access) return Boolean is
+       begin
+          return Left < Right.Element.all;
+       end Is_Less_Key_Node;
+ 
+       -------------
+       -- Iterate --
+       -------------
+ 
+       procedure Iterate
+         (Container : Set;
+          Key       : Key_Type;
+          Process   : not null access procedure (Position : Cursor))
+       is
+          procedure Process_Node (Node : Node_Access);
+          pragma Inline (Process_Node);
+ 
+          procedure Local_Iterate is
+            new Key_Keys.Generic_Iteration (Process_Node);
+ 
+          ------------------
+          -- Process_Node --
+          ------------------
+ 
+          procedure Process_Node (Node : Node_Access) is
+          begin
+             Process (Cursor'(Container'Unchecked_Access, Node));
+          end Process_Node;
+ 
+       --  Start of processing for Iterate
+ 
+       begin
+          Local_Iterate (Container.Tree, Key);
+       end Iterate;
+ 
+       ---------
+       -- Key --
+       ---------
+ 
+       function Key (Position : Cursor) return Key_Type is
+       begin
+          return Key (Position.Node.Element.all);
+       end Key;
+ 
+       -------------
+       -- Replace --
+       -------------
+ 
+       --  In post-madision api: ???
+ 
+ --     procedure Replace
+ --       (Container : in out Set;
+ --        Key       : Key_Type;
+ --        New_Item  : Element_Type)
+ --     is
+ --           Node : Node_Access := Key_Keys.Find (Container.Tree, Key);
+ 
+ --        begin
+ --           if Node = null then
+ --              raise Constraint_Error;
+ --           end if;
+ 
+ --           Replace_Node (Container, Node, New_Item);
+ --        end Replace;
+ 
+       ---------------------
+       -- Reverse_Iterate --
+       ---------------------
+ 
+       procedure Reverse_Iterate
+         (Container : Set;
+          Key       : Key_Type;
+          Process   : not null access procedure (Position : Cursor))
+       is
+          procedure Process_Node (Node : Node_Access);
+          pragma Inline (Process_Node);
+ 
+          -------------
+          -- Iterate --
+          -------------
+ 
+          procedure Local_Reverse_Iterate is
+             new Key_Keys.Generic_Reverse_Iteration (Process_Node);
+ 
+          ------------------
+          -- Process_Node --
+          ------------------
+ 
+          procedure Process_Node (Node : Node_Access) is
+          begin
+             Process (Cursor'(Container'Unchecked_Access, Node));
+          end Process_Node;
+ 
+       --  Start of processing for Reverse_Iterate
+ 
+       begin
+          Local_Reverse_Iterate (Container.Tree, Key);
+       end Reverse_Iterate;
+ 
+    end Generic_Keys;
+ 
+    -----------------
+    -- Has_Element --
+    -----------------
+ 
+    function Has_Element (Position : Cursor) return Boolean is
+    begin
+       return Position /= No_Element;
+    end Has_Element;
+ 
+    ------------
+    -- Insert --
+    ------------
+ 
+    procedure Insert (Container : in out Set; New_Item : Element_Type) is
+       Position : Cursor;
+    begin
+       Insert (Container, New_Item, Position);
+    end Insert;
+ 
+    procedure Insert
+      (Container : in out Set;
+       New_Item  : Element_Type;
+       Position  : out Cursor)
+    is
+       function New_Node return Node_Access;
+       pragma Inline (New_Node);
+ 
+       procedure Insert_Post is
+         new Element_Keys.Generic_Insert_Post (New_Node);
+ 
+       procedure Unconditional_Insert_Sans_Hint is
+         new Element_Keys.Generic_Unconditional_Insert (Insert_Post);
+ 
+       --------------
+       -- New_Node --
+       --------------
+ 
+       function New_Node return Node_Access is
+          X : Element_Access := new Element_Type'(New_Item);
+ 
+       begin
+          return new Node_Type'(Parent  => null,
+                                Left    => null,
+                                Right   => null,
+                                Color   => Red,
+                                Element => X);
+ 
+       exception
+          when others =>
+             Free_Element (X);
+             raise;
+       end New_Node;
+ 
+    --  Start of processing for Insert
+ 
+    begin
+       Unconditional_Insert_Sans_Hint
+         (Container.Tree,
+          New_Item,
+          Position.Node);
+ 
+       Position.Container := Container'Unchecked_Access;
+    end Insert;
+ 
+    ----------------------
+    -- Insert_With_Hint --
+    ----------------------
+ 
+    procedure Insert_With_Hint
+      (Dst_Tree : in out Tree_Type;
+       Dst_Hint : Node_Access;
+       Src_Node : Node_Access;
+       Dst_Node : out Node_Access)
+    is
+       function New_Node return Node_Access;
+       pragma Inline (New_Node);
+ 
+       procedure Insert_Post is
+         new Element_Keys.Generic_Insert_Post (New_Node);
+ 
+       procedure Insert_Sans_Hint is
+         new Element_Keys.Generic_Unconditional_Insert (Insert_Post);
+ 
+       procedure Local_Insert_With_Hint is
+         new Element_Keys.Generic_Unconditional_Insert_With_Hint
+           (Insert_Post,
+            Insert_Sans_Hint);
+ 
+       --------------
+       -- New_Node --
+       --------------
+ 
+       function New_Node return Node_Access is
+          X : Element_Access := new Element_Type'(Src_Node.Element.all);
+ 
+       begin
+          return new Node_Type'(Parent  => null,
+                                Left    => null,
+                                Right   => null,
+                                Color   => Red,
+                                Element => X);
+ 
+       exception
+          when others =>
+             Free_Element (X);
+             raise;
+       end New_Node;
+ 
+    --  Start of processing for Insert_With_Hint
+ 
+    begin
+       Local_Insert_With_Hint
+         (Dst_Tree,
+          Dst_Hint,
+          Src_Node.Element.all,
+          Dst_Node);
+    end Insert_With_Hint;
+ 
+    ------------------
+    -- Intersection --
+    ------------------
+ 
+    procedure Intersection (Target : in out Set; Source : Set) is
+    begin
+       if Target'Address = Source'Address then
+          return;
+       end if;
+ 
+       Set_Ops.Intersection (Target.Tree, Source.Tree);
+    end Intersection;
+ 
+    function Intersection (Left, Right : Set) return Set is
+    begin
+       if Left'Address = Right'Address then
+          return Left;
+       end if;
+ 
+       declare
+          Tree : constant Tree_Type :=
+                   Set_Ops.Intersection (Left.Tree, Right.Tree);
+       begin
+          return (Controlled with Tree);
+       end;
+    end Intersection;
+ 
+    --------------
+    -- Is_Empty --
+    --------------
+ 
+    function Is_Empty (Container : Set) return Boolean is
+    begin
+       return Container.Tree.Length = 0;
+    end Is_Empty;
+ 
+    ------------------------
+    -- Is_Equal_Node_Node --
+    ------------------------
+ 
+    function Is_Equal_Node_Node (L, R : Node_Access) return Boolean is
+    begin
+       return L.Element.all = R.Element.all;
+    end Is_Equal_Node_Node;
+ 
+    -----------------------------
+    -- Is_Greater_Element_Node --
+    -----------------------------
+ 
+    function Is_Greater_Element_Node
+      (Left  : Element_Type;
+       Right : Node_Access) return Boolean
+    is
+    begin
+       --  e > node same as node < e
+ 
+       return Right.Element.all < Left;
+    end Is_Greater_Element_Node;
+ 
+    --------------------------
+    -- Is_Less_Element_Node --
+    --------------------------
+ 
+    function Is_Less_Element_Node
+      (Left  : Element_Type;
+       Right : Node_Access) return Boolean
+    is
+    begin
+       return Left < Right.Element.all;
+    end Is_Less_Element_Node;
+ 
+    -----------------------
+    -- Is_Less_Node_Node --
+    -----------------------
+ 
+    function Is_Less_Node_Node (L, R : Node_Access) return Boolean is
+    begin
+       return L.Element.all < R.Element.all;
+    end Is_Less_Node_Node;
+ 
+    ---------------
+    -- Is_Subset --
+    ---------------
+ 
+    function Is_Subset (Subset : Set; Of_Set : Set) return Boolean is
+    begin
+       if Subset'Address = Of_Set'Address then
+          return True;
+       end if;
+ 
+       return Set_Ops.Is_Subset (Subset => Subset.Tree, Of_Set => Of_Set.Tree);
+    end Is_Subset;
+ 
+    -------------
+    -- Iterate --
+    -------------
+ 
+    procedure Iterate
+      (Container : Set;
+       Item      : Element_Type;
+       Process   : not null access procedure (Position : Cursor))
+    is
+       procedure Process_Node (Node : Node_Access);
+       pragma Inline (Process_Node);
+ 
+       procedure Local_Iterate is
+         new Element_Keys.Generic_Iteration (Process_Node);
+ 
+       ------------------
+       -- Process_Node --
+       ------------------
+ 
+       procedure Process_Node (Node : Node_Access) is
+       begin
+          Process (Cursor'(Container'Unchecked_Access, Node));
+       end Process_Node;
+ 
+    --  Start of processing for Iterate
+ 
+    begin
+       Local_Iterate (Container.Tree, Item);
+    end Iterate;
+ 
+    procedure Iterate
+      (Container : Set;
+       Process   : not null access procedure (Position : Cursor))
+    is
+       procedure Process_Node (Node : Node_Access);
+       pragma Inline (Process_Node);
+ 
+       procedure Local_Iterate is
+         new Tree_Operations.Generic_Iteration (Process_Node);
+ 
+       ------------------
+       -- Process_Node --
+       ------------------
+ 
+       procedure Process_Node (Node : Node_Access) is
+       begin
+          Process (Cursor'(Container'Unchecked_Access, Node));
+       end Process_Node;
+ 
+    --  Start of processing for Iterate
+ 
+    begin
+       Local_Iterate (Container.Tree);
+    end Iterate;
+ 
+    ----------
+    -- Last --
+    ----------
+ 
+    function Last (Container : Set) return Cursor is
+    begin
+       if Container.Tree.Last = null then
+          return No_Element;
+       end if;
+ 
+       return Cursor'(Container'Unchecked_Access, Container.Tree.Last);
+    end Last;
+ 
+    ------------------
+    -- Last_Element --
+    ------------------
+ 
+    function Last_Element (Container : Set) return Element_Type is
+    begin
+       return Container.Tree.Last.Element.all;
+    end Last_Element;
+ 
+    ----------
+    -- Left --
+    ----------
+ 
+    function Left (Node : Node_Access) return Node_Access is
+    begin
+       return Node.Left;
+    end Left;
+ 
+    ------------
+    -- Length --
+    ------------
+ 
+    function Length (Container : Set) return Count_Type is
+    begin
+       return Container.Tree.Length;
+    end Length;
+ 
+    ----------
+    -- Move --
+    ----------
+ 
+    procedure Move (Target : in out Set; Source : in out Set) is
+    begin
+       if Target'Address = Source'Address then
+          return;
+       end if;
+ 
+       Move (Target => Target.Tree, Source => Source.Tree);
+    end Move;
+ 
+    ----------
+    -- Next --
+    ----------
+ 
+    function Next (Position : Cursor) return Cursor is
+    begin
+       if Position = No_Element then
+          return No_Element;
+       end if;
+ 
+       declare
+          Node : constant Node_Access :=
+                   Tree_Operations.Next (Position.Node);
+ 
+       begin
+          if Node = null then
+             return No_Element;
+          end if;
+ 
+          return Cursor'(Position.Container, Node);
+       end;
+    end Next;
+ 
+    procedure Next (Position : in out Cursor) is
+    begin
+       Position := Next (Position);
+    end Next;
+ 
+    -------------
+    -- Overlap --
+    -------------
+ 
+    function Overlap (Left, Right : Set) return Boolean is
+    begin
+       if Left'Address = Right'Address then
+          return Left.Tree.Length /= 0;
+       end if;
+ 
+       return Set_Ops.Overlap (Left.Tree, Right.Tree);
+    end Overlap;
+ 
+    ------------
+    -- Parent --
+    ------------
+ 
+    function Parent (Node : Node_Access) return Node_Access is
+    begin
+       return Node.Parent;
+    end Parent;
+ 
+    --------------
+    -- Previous --
+    --------------
+ 
+    function Previous (Position : Cursor) return Cursor is
+    begin
+       if Position = No_Element then
+          return No_Element;
+       end if;
+ 
+       declare
+          Node : constant Node_Access :=
+                   Tree_Operations.Previous (Position.Node);
+ 
+       begin
+          if Node = null then
+             return No_Element;
+          end if;
+ 
+          return Cursor'(Position.Container, Node);
+       end;
+    end Previous;
+ 
+    procedure Previous (Position : in out Cursor) is
+    begin
+       Position := Previous (Position);
+    end Previous;
+ 
+    -------------------
+    -- Query_Element --
+    -------------------
+ 
+    procedure Query_Element
+      (Position : Cursor;
+       Process  : not null access procedure (Element : Element_Type))
+    is
+    begin
+       Process (Position.Node.Element.all);
+    end Query_Element;
+ 
+    ----------
+    -- Read --
+    ----------
+ 
+    procedure Read
+      (Stream    : access Root_Stream_Type'Class;
+       Container : out Set)
+    is
+       N : Count_Type'Base;
+ 
+       function New_Node return Node_Access;
+       pragma Inline (New_Node);
+ 
+       procedure Local_Read is new Tree_Operations.Generic_Read (New_Node);
+ 
+       --------------
+       -- New_Node --
+       --------------
+ 
+       function New_Node return Node_Access is
+          Node : Node_Access := new Node_Type;
+ 
+       begin
+          begin
+             Node.Element := new Element_Type'(Element_Type'Input (Stream));
+          exception
+             when others =>
+                Free (Node);
+                raise;
+          end;
+ 
+          return Node;
+       end New_Node;
+ 
+    --  Start of processing for Read
+ 
+    begin
+       Clear (Container);
+ 
+       Count_Type'Base'Read (Stream, N);
+       pragma Assert (N >= 0);
+ 
+       Local_Read (Container.Tree, N);
+    end Read;
+ 
+    -------------
+    -- Replace --
+    -------------
+ 
+    --  NOTE: from post-madison api???
+ 
+ --   procedure Replace
+ --     (Container : in out Set;
+ --      Position  : Cursor;
+ --      By        : Element_Type)
+ --   is
+ --   begin
+ --      if Position.Container = null then
+ --         raise Constraint_Error;
+ --      end if;
+ 
+ --      if Position.Container /= Set_Access'(Container'Unchecked_Access) then
+ --         raise Program_Error;
+ --      end if;
+ 
+ --      Replace_Node (Container, Position.Node, By);
+ --   end Replace;
+ 
+    ------------------
+    -- Replace_Node --
+    ------------------
+ 
+    --  NOTE: from post-madison api???
+ 
+ --   procedure Replace_Node
+ --     (Container : in out Set;
+ --      Position  : Node_Access;
+ --      By        : Element_Type);
+ --   is
+ --      Tree : Tree_Type renames Container.Tree;
+ --      Node : Node_Access := Position;
+ 
+ --   begin
+ --      if By < Node.Element
+ --        or else Node.Element < By
+ --      then
+ --         null;
+ 
+ --      else
+ --         begin
+ --            Node.Element := By;
+ 
+ --         exception
+ --            when others =>
+ --               Tree_Operations.Delete_Node_Sans_Free (Tree, Node);
+ --               Free (Node);
+ --               raise;
+ --         end;
+ 
+ --         return;
+ --      end if;
+ 
+ --      Tree_Operations.Delete_Node_Sans_Free (Tree, Node);
+ 
+ --      begin
+ --         Node.Element := By;
+ 
+ --      exception
+ --         when others =>
+ --            Free (Node);
+ --            raise;
+ --      end;
+ 
+ --      declare
+ --         Result  : Node_Access;
+ --         Success : Boolean;
+ 
+ --         function New_Node return Node_Access;
+ --         pragma Inline (New_Node);
+ 
+ --         procedure Insert_Post is
+ --           new Element_Keys.Generic_Insert_Post (New_Node);
+ 
+ --         procedure Insert is
+ --           new Element_Keys.Generic_Conditional_Insert (Insert_Post);
+ 
+ --         --------------
+ --         -- New_Node --
+ --         --------------
+ --
+ --         function New_Node return Node_Access is
+ --         begin
+ --            return Node;
+ --         end New_Node;
+ 
+ --      --  Start of processing for Replace_Node
+ 
+ --      begin
+ --         Insert
+ --           (Tree    => Tree,
+ --            Key     => Node.Element,
+ --            Node    => Result,
+ --            Success => Success);
+ 
+ --         if not Success then
+ --            Free (Node);
+ --            raise Program_Error;
+ --         end if;
+ 
+ --         pragma Assert (Result = Node);
+ --      end;
+ --   end Replace_Node;
+ 
+    ---------------------
+    -- Reverse_Iterate --
+    ---------------------
+ 
+    procedure Reverse_Iterate
+      (Container : Set;
+       Item      : Element_Type;
+       Process   : not null access procedure (Position : Cursor))
+    is
+       procedure Process_Node (Node : Node_Access);
+       pragma Inline (Process_Node);
+ 
+       procedure Local_Reverse_Iterate is
+         new Element_Keys.Generic_Reverse_Iteration (Process_Node);
+ 
+       ------------------
+       -- Process_Node --
+       ------------------
+ 
+       procedure Process_Node (Node : Node_Access) is
+       begin
+          Process (Cursor'(Container'Unchecked_Access, Node));
+       end Process_Node;
+ 
+    --  Start of processing for Reverse_Iterate
+ 
+    begin
+       Local_Reverse_Iterate (Container.Tree, Item);
+    end Reverse_Iterate;
+ 
+    procedure Reverse_Iterate
+      (Container : Set;
+       Process   : not null access procedure (Position : Cursor))
+    is
+       procedure Process_Node (Node : Node_Access);
+       pragma Inline (Process_Node);
+ 
+       procedure Local_Reverse_Iterate is
+         new Tree_Operations.Generic_Reverse_Iteration (Process_Node);
+ 
+       ------------------
+       -- Process_Node --
+       ------------------
+ 
+       procedure Process_Node (Node : Node_Access) is
+       begin
+          Process (Cursor'(Container'Unchecked_Access, Node));
+       end Process_Node;
+ 
+    --  Start of processing for Reverse_Iterate
+ 
+    begin
+       Local_Reverse_Iterate (Container.Tree);
+    end Reverse_Iterate;
+ 
+    -----------
+    -- Right --
+    -----------
+ 
+    function Right (Node : Node_Access) return Node_Access is
+    begin
+       return Node.Right;
+    end Right;
+ 
+    ---------------
+    -- Set_Color --
+    ---------------
+ 
+    procedure Set_Color (Node : Node_Access; Color : Color_Type) is
+    begin
+       Node.Color := Color;
+    end Set_Color;
+ 
+    --------------
+    -- Set_Left --
+    --------------
+ 
+    procedure Set_Left (Node : Node_Access; Left : Node_Access) is
+    begin
+       Node.Left := Left;
+    end Set_Left;
+ 
+    ----------------
+    -- Set_Parent --
+    ----------------
+ 
+    procedure Set_Parent (Node : Node_Access; Parent : Node_Access) is
+    begin
+       Node.Parent := Parent;
+    end Set_Parent;
+ 
+    ---------------
+    -- Set_Right --
+    ---------------
+ 
+    procedure Set_Right (Node : Node_Access; Right : Node_Access) is
+    begin
+       Node.Right := Right;
+    end Set_Right;
+ 
+    --------------------------
+    -- Symmetric_Difference --
+    --------------------------
+ 
+    procedure Symmetric_Difference (Target : in out Set; Source : Set) is
+    begin
+       if Target'Address = Source'Address then
+          Clear (Target);
+          return;
+       end if;
+ 
+       Set_Ops.Symmetric_Difference (Target.Tree, Source.Tree);
+    end Symmetric_Difference;
+ 
+    function Symmetric_Difference (Left, Right : Set) return Set is
+    begin
+       if Left'Address = Right'Address then
+          return Empty_Set;
+       end if;
+ 
+       declare
+          Tree : constant Tree_Type :=
+                   Set_Ops.Symmetric_Difference (Left.Tree, Right.Tree);
+       begin
+          return (Controlled with Tree);
+       end;
+    end Symmetric_Difference;
+ 
+    -----------
+    -- Union --
+    -----------
+ 
+    procedure Union (Target : in out Set; Source : Set) is
+    begin
+       if Target'Address = Source'Address then
+          return;
+       end if;
+ 
+       Set_Ops.Union (Target.Tree, Source.Tree);
+    end Union;
+ 
+    function Union (Left, Right : Set) return Set is begin
+       if Left'Address = Right'Address then
+          return Left;
+       end if;
+ 
+       declare
+          Tree : constant Tree_Type := Set_Ops.Union (Left.Tree, Right.Tree);
+       begin
+          return (Controlled with Tree);
+       end;
+    end Union;
+ 
+    -----------
+    -- Write --
+    -----------
+ 
+    procedure Write
+      (Stream    : access Root_Stream_Type'Class;
+       Container : Set)
+    is
+       procedure Process (Node : Node_Access);
+       pragma Inline (Process);
+ 
+       procedure Iterate is new Tree_Operations.Generic_Iteration (Process);
+ 
+       -------------
+       -- Process --
+       -------------
+ 
+       procedure Process (Node : Node_Access) is
+       begin
+          Element_Type'Output (Stream, Node.Element.all);
+       end Process;
+ 
+    --  Start of processing for Write
+ 
+    begin
+       Count_Type'Base'Write (Stream, Container.Tree.Length);
+       Iterate (Container.Tree);
+    end Write;
+ 
+ end Ada.Containers.Indefinite_Ordered_Multisets;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ciormu.ads gcc-4.0.0/gcc/ada/a-ciormu.ads
*** gcc-3.4.3/gcc/ada/a-ciormu.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-ciormu.ads	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,290 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --               ADA.CONTAINERS.INDEFINITE_ORDERED_MULTISETS                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Containers.Red_Black_Trees;
+ with Ada.Finalization;
+ with Ada.Streams;
+ 
+ generic
+    type Element_Type (<>) is private;
+ 
+    with function "<" (Left, Right : Element_Type) return Boolean is <>;
+    with function "=" (Left, Right : Element_Type) return Boolean is <>;
+ 
+ package Ada.Containers.Indefinite_Ordered_Multisets is
+ pragma Preelaborate (Indefinite_Ordered_Multisets);
+ 
+    type Set is tagged private;
+ 
+    type Cursor is private;
+ 
+    Empty_Set : constant Set;
+ 
+    No_Element : constant Cursor;
+ 
+    function "=" (Left, Right : Set) return Boolean;
+ 
+    function Length (Container : Set) return Count_Type;
+ 
+    function Is_Empty (Container : Set) return Boolean;
+ 
+    procedure Clear (Container : in out Set);
+ 
+    function Element (Position : Cursor) return Element_Type;
+ 
+    procedure Query_Element
+      (Position : Cursor;
+       Process  : not null access procedure (Element : Element_Type));
+ 
+    procedure Move (Target : in out Set; Source : in out Set);
+ 
+    procedure Insert
+      (Container : in out Set;
+       New_Item  : Element_Type;
+       Position  : out Cursor);
+ 
+    procedure Insert (Container : in out Set; New_Item : Element_Type);
+ 
+    procedure Delete (Container : in out Set; Item : Element_Type);
+ 
+    procedure Exclude (Container : in out Set; Item : Element_Type);
+ 
+    procedure Delete (Container : in out Set; Position : in out Cursor);
+ 
+    procedure Delete_First (Container : in out Set);
+ 
+    procedure Delete_Last (Container : in out Set);
+ 
+ 
+    --  NOTE: The following operation is named Replace in the Madison API.
+    --  However, it should be named Replace_Element ???
+    --
+    --   procedure Replace
+    --     (Container : in out Set;
+    --      Position  : Cursor;
+    --      By        : Element_Type);
+ 
+    procedure Union (Target : in out Set;
+                     Source : Set);
+ 
+    function Union (Left, Right : Set) return Set;
+ 
+    function "or" (Left, Right : Set) return Set renames Union;
+ 
+    procedure Intersection (Target : in out Set; Source : Set);
+ 
+    function Intersection (Left, Right : Set) return Set;
+ 
+    function "and" (Left, Right : Set) return Set renames Intersection;
+ 
+    procedure Difference (Target : in out Set; Source : Set);
+ 
+    function Difference (Left, Right : Set) return Set;
+ 
+    function "-" (Left, Right : Set) return Set renames Difference;
+ 
+    procedure Symmetric_Difference (Target : in out Set; Source : Set);
+ 
+    function Symmetric_Difference (Left, Right : Set) return Set;
+ 
+    function "xor" (Left, Right : Set) return Set renames Symmetric_Difference;
+ 
+    function Overlap (Left, Right : Set) return Boolean;
+ 
+    function Is_Subset (Subset : Set; Of_Set : Set) return Boolean;
+ 
+    function Contains (Container : Set; Item : Element_Type) return Boolean;
+ 
+    function Find (Container : Set; Item : Element_Type) return Cursor;
+ 
+    function Floor (Container : Set; Item : Element_Type) return Cursor;
+ 
+    function Ceiling (Container : Set; Item : Element_Type) return Cursor;
+ 
+    function First (Container : Set) return Cursor;
+ 
+    function First_Element (Container : Set) return Element_Type;
+ 
+    function Last (Container : Set) return Cursor;
+ 
+    function Last_Element (Container : Set) return Element_Type;
+ 
+    function Next (Position : Cursor) return Cursor;
+ 
+    function Previous (Position : Cursor) return Cursor;
+ 
+    procedure Next (Position : in out Cursor);
+ 
+    procedure Previous (Position : in out Cursor);
+ 
+    function Has_Element (Position : Cursor) return Boolean;
+ 
+    function "<" (Left, Right : Cursor) return Boolean;
+ 
+    function ">" (Left, Right : Cursor) return Boolean;
+ 
+    function "<" (Left : Cursor; Right : Element_Type) return Boolean;
+ 
+    function ">" (Left : Cursor; Right : Element_Type) return Boolean;
+ 
+    function "<" (Left : Element_Type; Right : Cursor) return Boolean;
+ 
+    function ">" (Left : Element_Type; Right : Cursor) return Boolean;
+ 
+    procedure Iterate
+      (Container : Set;
+       Process   : not null access procedure (Position : Cursor));
+ 
+    procedure Reverse_Iterate
+      (Container : Set;
+       Process   : not null access procedure (Position : Cursor));
+ 
+    procedure Iterate
+      (Container : Set;
+       Item      : Element_Type;
+       Process   : not null access procedure (Position : Cursor));
+ 
+    procedure Reverse_Iterate
+      (Container : Set;
+       Item      : Element_Type;
+       Process   : not null access procedure (Position : Cursor));
+ 
+    generic
+ 
+       type Key_Type (<>) is limited private;
+ 
+       with function Key (Element : Element_Type) return Key_Type;
+ 
+       with function "<" (Left : Key_Type; Right : Element_Type)
+           return Boolean is <>;
+ 
+       with function ">" (Left : Key_Type; Right : Element_Type)
+           return Boolean is <>;
+ 
+    package Generic_Keys is
+ 
+       function Contains (Container : Set; Key : Key_Type) return Boolean;
+ 
+       function Find (Container : Set; Key : Key_Type) return Cursor;
+ 
+       function Floor (Container : Set; Key : Key_Type) return Cursor;
+ 
+       function Ceiling (Container : Set; Key : Key_Type) return Cursor;
+ 
+       function Key (Position : Cursor) return Key_Type;
+ 
+       function Element (Container : Set; Key : Key_Type) return Element_Type;
+ 
+       --  NOTE: in post-madison api ???
+       --      procedure Replace
+       --        (Container : in out Set;
+       --         Key       : Key_Type;
+       --         New_Item  : Element_Type);
+ 
+       procedure Delete (Container : in out Set; Key : Key_Type);
+ 
+       procedure Exclude (Container : in out Set; Key : Key_Type);
+ 
+       function "<" (Left : Cursor; Right : Key_Type) return Boolean;
+ 
+       function ">" (Left : Cursor; Right : Key_Type) return Boolean;
+ 
+       function "<" (Left : Key_Type; Right : Cursor) return Boolean;
+ 
+       function ">" (Left : Key_Type; Right : Cursor) return Boolean;
+ 
+       procedure Checked_Update_Element
+         (Container : in out Set;
+          Position  : Cursor;
+          Process   : not null access
+                        procedure (Element : in out Element_Type));
+ 
+       procedure Iterate
+         (Container : Set;
+          Key       : Key_Type;
+          Process   : not null access procedure (Position : Cursor));
+ 
+       procedure Reverse_Iterate
+         (Container : Set;
+          Key       : Key_Type;
+          Process   : not null access procedure (Position : Cursor));
+ 
+    end Generic_Keys;
+ 
+ private
+ 
+    type Node_Type;
+    type Node_Access is access Node_Type;
+ 
+    package Tree_Types is
+       new Red_Black_Trees.Generic_Tree_Types (Node_Access);
+ 
+    use Tree_Types;
+    use Ada.Finalization;
+ 
+    type Set is new Controlled with record
+       Tree : Tree_Type := (Length => 0, others => null);
+    end record;
+ 
+    procedure Adjust (Container : in out Set);
+ 
+    procedure Finalize (Container : in out Set) renames Clear;
+ 
+    type Set_Access is access constant Set;
+    for Set_Access'Storage_Size use 0;
+ 
+    type Cursor is record
+       Container : Set_Access;
+       Node      : Node_Access;
+    end record;
+ 
+    No_Element : constant Cursor := Cursor'(null, null);
+ 
+    use Ada.Streams;
+ 
+    procedure Write (Stream : access Root_Stream_Type'Class; Container : Set);
+ 
+    for Set'Write use Write;
+ 
+    procedure Read
+      (Stream    : access Root_Stream_Type'Class;
+       Container : out Set);
+ 
+    for Set'Read use Read;
+ 
+    Empty_Set : constant Set :=
+                  (Controlled with Tree => (Length => 0, others => null));
+ 
+ end Ada.Containers.Indefinite_Ordered_Multisets;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ciorse.adb gcc-4.0.0/gcc/ada/a-ciorse.adb
*** gcc-3.4.3/gcc/ada/a-ciorse.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-ciorse.adb	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,1557 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                  ADA.CONTAINERS.INDEFINITE_ORDERED_SETS                  --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Containers.Red_Black_Trees.Generic_Operations;
+ pragma Elaborate_All (Ada.Containers.Red_Black_Trees.Generic_Operations);
+ 
+ with Ada.Containers.Red_Black_Trees.Generic_Keys;
+ pragma Elaborate_All (Ada.Containers.Red_Black_Trees.Generic_Keys);
+ 
+ with Ada.Containers.Red_Black_Trees.Generic_Set_Operations;
+ pragma Elaborate_All (Ada.Containers.Red_Black_Trees.Generic_Set_Operations);
+ 
+ with Ada.Unchecked_Deallocation;
+ 
+ with System;  use type System.Address;
+ 
+ package body Ada.Containers.Indefinite_Ordered_Sets is
+ 
+    type Element_Access is access Element_Type;
+ 
+    use Red_Black_Trees;
+ 
+    type Node_Type is limited record
+       Parent  : Node_Access;
+       Left    : Node_Access;
+       Right   : Node_Access;
+       Color   : Red_Black_Trees.Color_Type := Red;
+       Element : Element_Access;
+    end record;
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    function Color (Node : Node_Access) return Color_Type;
+    pragma Inline (Color);
+ 
+    function Copy_Node (Source : Node_Access) return Node_Access;
+    pragma Inline (Copy_Node);
+ 
+    function Copy_Tree (Source_Root : Node_Access) return Node_Access;
+ 
+    procedure Delete_Tree (X : in out Node_Access);
+ 
+    procedure Free (X : in out Node_Access);
+ 
+    procedure Insert_With_Hint
+      (Dst_Tree : in out Tree_Type;
+       Dst_Hint : Node_Access;
+       Src_Node : Node_Access;
+       Dst_Node : out Node_Access);
+ 
+    function Is_Greater_Element_Node
+      (Left  : Element_Type;
+       Right : Node_Access) return Boolean;
+    pragma Inline (Is_Greater_Element_Node);
+ 
+    function Is_Less_Element_Node
+      (Left  : Element_Type;
+       Right : Node_Access) return Boolean;
+    pragma Inline (Is_Less_Element_Node);
+ 
+    function Is_Less_Node_Node (L, R : Node_Access) return Boolean;
+    pragma Inline (Is_Less_Node_Node);
+ 
+    function Left (Node : Node_Access) return Node_Access;
+    pragma Inline (Left);
+ 
+    function Parent (Node : Node_Access) return Node_Access;
+    pragma Inline (Parent);
+ 
+    function Right (Node : Node_Access) return Node_Access;
+    pragma Inline (Right);
+ 
+    procedure Set_Color (Node : Node_Access; Color : Color_Type);
+    pragma Inline (Set_Color);
+ 
+    procedure Set_Left (Node : Node_Access; Left : Node_Access);
+    pragma Inline (Set_Left);
+ 
+    procedure Set_Parent (Node   : Node_Access; Parent : Node_Access);
+    pragma Inline (Set_Parent);
+ 
+    procedure Set_Right (Node : Node_Access; Right : Node_Access);
+    pragma Inline (Set_Right);
+ 
+    --------------------------
+    -- Local Instantiations --
+    --------------------------
+ 
+    procedure Free_Element is
+      new Ada.Unchecked_Deallocation (Element_Type, Element_Access);
+ 
+    package Tree_Operations is
+      new Red_Black_Trees.Generic_Operations
+        (Tree_Types => Tree_Types,
+         Null_Node  => Node_Access'(null));
+ 
+    use Tree_Operations;
+ 
+    package Element_Keys is
+      new Red_Black_Trees.Generic_Keys
+        (Tree_Operations     => Tree_Operations,
+         Key_Type            => Element_Type,
+         Is_Less_Key_Node    => Is_Less_Element_Node,
+         Is_Greater_Key_Node => Is_Greater_Element_Node);
+ 
+    package Set_Ops is
+       new Generic_Set_Operations
+         (Tree_Operations  => Tree_Operations,
+          Insert_With_Hint => Insert_With_Hint,
+          Copy_Tree        => Copy_Tree,
+          Delete_Tree      => Delete_Tree,
+          Is_Less          => Is_Less_Node_Node,
+          Free             => Free);
+ 
+    ---------
+    -- "<" --
+    ---------
+ 
+    function "<" (Left, Right : Cursor) return Boolean is
+    begin
+       return Left.Node.Element.all < Right.Node.Element.all;
+    end "<";
+ 
+    function "<" (Left : Cursor; Right : Element_Type) return Boolean is
+    begin
+       return Left.Node.Element.all < Right;
+    end "<";
+ 
+    function "<" (Left : Element_Type; Right : Cursor) return Boolean is
+    begin
+       return Left < Right.Node.Element.all;
+    end "<";
+ 
+    ---------
+    -- "=" --
+    ---------
+ 
+    function "=" (Left, Right : Set) return Boolean is
+ 
+       function Is_Equal_Node_Node (L, R : Node_Access) return Boolean;
+       pragma Inline (Is_Equal_Node_Node);
+ 
+       function Is_Equal is
+         new Tree_Operations.Generic_Equal (Is_Equal_Node_Node);
+ 
+       ------------------------
+       -- Is_Equal_Node_Node --
+       ------------------------
+ 
+       function Is_Equal_Node_Node (L, R : Node_Access) return Boolean is
+       begin
+          return L.Element.all = R.Element.all;
+       end Is_Equal_Node_Node;
+ 
+    --  Start of processing for "="
+ 
+    begin
+       if Left'Address = Right'Address then
+          return True;
+       end if;
+ 
+       return Is_Equal (Left.Tree, Right.Tree);
+    end "=";
+ 
+ 
+    ---------
+    -- ">" --
+    ---------
+ 
+    function ">" (Left, Right : Cursor) return Boolean is
+    begin
+       --  L > R same as R < L
+ 
+       return Right.Node.Element.all < Left.Node.Element.all;
+    end ">";
+ 
+    function ">" (Left : Cursor; Right : Element_Type) return Boolean is
+    begin
+       return Right < Left.Node.Element.all;
+    end ">";
+ 
+    function ">" (Left : Element_Type; Right : Cursor) return Boolean is
+    begin
+       return Right.Node.Element.all < Left;
+    end ">";
+ 
+    ------------
+    -- Adjust --
+    ------------
+ 
+    procedure Adjust (Container : in out Set) is
+       Tree : Tree_Type renames Container.Tree;
+ 
+    begin
+       if Tree.Length = 0 then
+          pragma Assert (Tree.Root = null);
+          return;
+       end if;
+ 
+       begin
+          Tree.Root := Copy_Tree (Tree.Root);
+       exception
+          when others =>
+             Tree := (Length => 0, others => null);
+             raise;
+       end;
+ 
+       Tree.First := Min (Tree.Root);
+       Tree.Last := Max (Tree.Root);
+    end Adjust;
+ 
+    -------------
+    -- Ceiling --
+    -------------
+ 
+    function Ceiling (Container : Set; Item : Element_Type) return Cursor is
+       Node : constant Node_Access :=
+                Element_Keys.Ceiling (Container.Tree, Item);
+ 
+    begin
+       if Node = null then
+          return No_Element;
+       end if;
+ 
+       return Cursor'(Container'Unchecked_Access, Node);
+    end Ceiling;
+ 
+    -----------
+    -- Clear --
+    -----------
+ 
+    procedure Clear (Container : in out Set) is
+       Tree : Tree_Type renames Container.Tree;
+       Root : Node_Access := Tree.Root;
+    begin
+       Tree := (Length => 0, others => null);
+       Delete_Tree (Root);
+    end Clear;
+ 
+    -----------
+    -- Color --
+    -----------
+ 
+    function Color (Node : Node_Access) return Color_Type is
+    begin
+       return Node.Color;
+    end Color;
+ 
+    --------------
+    -- Contains --
+    --------------
+ 
+    function Contains (Container : Set; Item : Element_Type) return Boolean is
+    begin
+       return Find (Container, Item) /= No_Element;
+    end Contains;
+ 
+    ---------------
+    -- Copy_Node --
+    ---------------
+ 
+    function Copy_Node (Source : Node_Access) return Node_Access is
+       Element : Element_Access := new Element_Type'(Source.Element.all);
+    begin
+       return new Node_Type'(Parent  => null,
+                             Left    => null,
+                             Right   => null,
+                             Color   => Source.Color,
+                             Element => Element);
+    exception
+       when others =>
+          Free_Element (Element);
+          raise;
+    end Copy_Node;
+ 
+    ---------------
+    -- Copy_Tree --
+    ---------------
+ 
+    function Copy_Tree (Source_Root : Node_Access) return Node_Access is
+       Target_Root : Node_Access := Copy_Node (Source_Root);
+       P, X        : Node_Access;
+ 
+    begin
+       if Source_Root.Right /= null then
+          Target_Root.Right := Copy_Tree (Source_Root.Right);
+          Target_Root.Right.Parent := Target_Root;
+       end if;
+ 
+       P := Target_Root;
+       X := Source_Root.Left;
+ 
+       while X /= null loop
+          declare
+             Y : Node_Access := Copy_Node (X);
+ 
+          begin
+             P.Left := Y;
+             Y.Parent := P;
+ 
+             if X.Right /= null then
+                Y.Right := Copy_Tree (X.Right);
+                Y.Right.Parent := Y;
+             end if;
+ 
+             P := Y;
+             X := X.Left;
+          end;
+       end loop;
+ 
+       return Target_Root;
+ 
+    exception
+       when others =>
+          Delete_Tree (Target_Root);
+          raise;
+    end Copy_Tree;
+ 
+    ------------
+    -- Delete --
+    ------------
+ 
+    procedure Delete (Container : in out Set; Position  : in out Cursor) is
+    begin
+       if Position = No_Element then
+          return;
+       end if;
+ 
+       if Position.Container /= Set_Access'(Container'Unchecked_Access) then
+          raise Program_Error;
+       end if;
+ 
+       Delete_Node_Sans_Free (Container.Tree, Position.Node);
+       Free (Position.Node);
+ 
+       Position.Container := null;
+    end Delete;
+ 
+    procedure Delete (Container : in out Set; Item : Element_Type) is
+       X : Node_Access :=
+             Element_Keys.Find (Container.Tree, Item);
+ 
+    begin
+       if X = null then
+          raise Constraint_Error;
+       end if;
+ 
+       Delete_Node_Sans_Free (Container.Tree, X);
+       Free (X);
+    end Delete;
+ 
+    ------------------
+    -- Delete_First --
+    ------------------
+ 
+    procedure Delete_First (Container : in out Set) is
+       C : Cursor := First (Container);
+    begin
+       Delete (Container, C);
+    end Delete_First;
+ 
+    -----------------
+    -- Delete_Last --
+    -----------------
+ 
+    procedure Delete_Last (Container : in out Set) is
+       C : Cursor := Last (Container);
+    begin
+       Delete (Container, C);
+    end Delete_Last;
+ 
+    -----------------
+    -- Delete_Tree --
+    -----------------
+ 
+    procedure Delete_Tree (X : in out Node_Access) is
+       Y : Node_Access;
+    begin
+       while X /= null loop
+          Y := X.Right;
+          Delete_Tree (Y);
+          Y := X.Left;
+          Free (X);
+          X := Y;
+       end loop;
+    end Delete_Tree;
+ 
+    ----------------
+    -- Difference --
+    ----------------
+ 
+    procedure Difference (Target : in out Set; Source : Set) is
+    begin
+       if Target'Address = Source'Address then
+          Clear (Target);
+          return;
+       end if;
+ 
+       Set_Ops.Difference (Target.Tree, Source.Tree);
+    end Difference;
+ 
+    function Difference (Left, Right : Set) return Set is
+    begin
+       if Left'Address = Right'Address then
+          return Empty_Set;
+       end if;
+ 
+       declare
+          Tree : constant Tree_Type :=
+            Set_Ops.Difference (Left.Tree, Right.Tree);
+       begin
+          return (Controlled with Tree);
+       end;
+    end Difference;
+ 
+    -------------
+    -- Element --
+    -------------
+ 
+    function Element (Position : Cursor) return Element_Type is
+    begin
+       return Position.Node.Element.all;
+    end Element;
+ 
+    -------------
+    -- Exclude --
+    -------------
+ 
+    procedure Exclude (Container : in out Set; Item : Element_Type) is
+       X : Node_Access :=
+             Element_Keys.Find (Container.Tree, Item);
+    begin
+       if X /= null then
+          Delete_Node_Sans_Free (Container.Tree, X);
+          Free (X);
+       end if;
+    end Exclude;
+ 
+    ----------
+    -- Find --
+    ----------
+ 
+    function Find (Container : Set; Item : Element_Type) return Cursor is
+       Node : constant Node_Access :=
+                Element_Keys.Find (Container.Tree, Item);
+ 
+    begin
+       if Node = null then
+          return No_Element;
+       end if;
+ 
+       return Cursor'(Container'Unchecked_Access, Node);
+    end Find;
+ 
+    -----------
+    -- First --
+    -----------
+ 
+    function First (Container : Set) return Cursor is
+    begin
+       if Container.Tree.First = null then
+          return No_Element;
+       end if;
+ 
+       return Cursor'(Container'Unchecked_Access, Container.Tree.First);
+    end First;
+ 
+    -------------------
+    -- First_Element --
+    -------------------
+ 
+    function First_Element (Container : Set) return Element_Type is
+    begin
+       return Container.Tree.First.Element.all;
+    end First_Element;
+ 
+    -----------
+    -- Floor --
+    -----------
+ 
+    function Floor (Container : Set; Item : Element_Type) return Cursor is
+       Node : constant Node_Access :=
+                Element_Keys.Floor (Container.Tree, Item);
+ 
+    begin
+       if Node = null then
+          return No_Element;
+       end if;
+ 
+       return Cursor'(Container'Unchecked_Access, Node);
+    end Floor;
+ 
+    ----------
+    -- Free --
+    ----------
+ 
+    procedure Free (X : in out Node_Access) is
+       procedure Deallocate is
+         new Ada.Unchecked_Deallocation (Node_Type, Node_Access);
+    begin
+       if X /= null then
+          Free_Element (X.Element);
+          Deallocate (X);
+       end if;
+    end Free;
+ 
+    ------------------
+    -- Generic_Keys --
+    ------------------
+ 
+    package body Generic_Keys is
+ 
+       -----------------------
+       -- Local Subprograms --
+       -----------------------
+ 
+       function Is_Greater_Key_Node
+         (Left  : Key_Type;
+          Right : Node_Access) return Boolean;
+       pragma Inline (Is_Greater_Key_Node);
+ 
+       function Is_Less_Key_Node
+         (Left  : Key_Type;
+          Right : Node_Access) return Boolean;
+       pragma Inline (Is_Less_Key_Node);
+ 
+       --------------------------
+       -- Local Instantiations --
+       --------------------------
+ 
+       package Key_Keys is
+         new Red_Black_Trees.Generic_Keys
+           (Tree_Operations     => Tree_Operations,
+            Key_Type            => Key_Type,
+            Is_Less_Key_Node    => Is_Less_Key_Node,
+            Is_Greater_Key_Node => Is_Greater_Key_Node);
+ 
+       ---------
+       -- "<" --
+       ---------
+ 
+       function "<" (Left : Key_Type; Right : Cursor) return Boolean is
+       begin
+          return Left < Right.Node.Element.all;
+       end "<";
+ 
+       function "<" (Left : Cursor; Right : Key_Type) return Boolean is
+       begin
+          return Right > Left.Node.Element.all;
+       end "<";
+ 
+       ---------
+       -- ">" --
+       ---------
+ 
+       function ">" (Left : Key_Type; Right : Cursor) return Boolean is
+       begin
+          return Left > Right.Node.Element.all;
+       end ">";
+ 
+       function ">" (Left : Cursor; Right : Key_Type) return Boolean is
+       begin
+          return Right < Left.Node.Element.all;
+       end ">";
+ 
+       -------------
+       -- Ceiling --
+       -------------
+ 
+       function Ceiling (Container : Set; Key : Key_Type) return Cursor is
+          Node : constant Node_Access :=
+                   Key_Keys.Ceiling (Container.Tree, Key);
+ 
+       begin
+          if Node = null then
+             return No_Element;
+          end if;
+ 
+          return Cursor'(Container'Unchecked_Access, Node);
+       end Ceiling;
+ 
+       ----------------------------
+       -- Checked_Update_Element --
+       ----------------------------
+ 
+       procedure Checked_Update_Element
+         (Container : in out Set;
+          Position  : Cursor;
+          Process   : not null access
+                         procedure (Element : in out Element_Type))
+       is
+       begin
+          if Position.Container = null then
+             raise Constraint_Error;
+          end if;
+ 
+          if Position.Container /= Set_Access'(Container'Unchecked_Access) then
+             raise Program_Error;
+          end if;
+ 
+          declare
+             Old_Key : Key_Type renames Key (Position.Node.Element.all);
+ 
+          begin
+             Process (Position.Node.Element.all);
+ 
+             if Old_Key < Position.Node.Element.all
+               or else Old_Key > Position.Node.Element.all
+             then
+                null;
+             else
+                return;
+             end if;
+          end;
+ 
+          declare
+             Result  : Node_Access;
+             Success : Boolean;
+ 
+             function New_Node return Node_Access;
+             pragma Inline (New_Node);
+ 
+             procedure Insert_Post is
+               new Key_Keys.Generic_Insert_Post (New_Node);
+ 
+             procedure Insert is
+               new Key_Keys.Generic_Conditional_Insert (Insert_Post);
+ 
+             --------------
+             -- New_Node --
+             --------------
+ 
+             function New_Node return Node_Access is
+             begin
+                return Position.Node;
+             end New_Node;
+ 
+          --  Start of processing for Checked_Update_Element
+ 
+          begin
+             Delete_Node_Sans_Free (Container.Tree, Position.Node);
+ 
+             Insert
+               (Tree    => Container.Tree,
+                Key     => Key (Position.Node.Element.all),
+                Node    => Result,
+                Success => Success);
+ 
+             if not Success then
+                declare
+                   X : Node_Access := Position.Node;
+                begin
+                   Free (X);
+                end;
+ 
+                raise Program_Error;
+             end if;
+ 
+             pragma Assert (Result = Position.Node);
+          end;
+       end Checked_Update_Element;
+ 
+       --------------
+       -- Contains --
+       --------------
+ 
+       function Contains (Container : Set; Key : Key_Type) return Boolean is
+       begin
+          return Find (Container, Key) /= No_Element;
+       end Contains;
+ 
+       ------------
+       -- Delete --
+       ------------
+ 
+       procedure Delete (Container : in out Set; Key : Key_Type) is
+          X : Node_Access := Key_Keys.Find (Container.Tree, Key);
+ 
+       begin
+          if X = null then
+             raise Constraint_Error;
+          end if;
+ 
+          Delete_Node_Sans_Free (Container.Tree, X);
+          Free (X);
+       end Delete;
+ 
+       -------------
+       -- Element --
+       -------------
+ 
+       function Element (Container : Set; Key : Key_Type) return Element_Type is
+          C : constant Cursor := Find (Container, Key);
+       begin
+          return C.Node.Element.all;
+       end Element;
+ 
+       -------------
+       -- Exclude --
+       -------------
+ 
+       procedure Exclude (Container : in out Set; Key : Key_Type) is
+          X : Node_Access := Key_Keys.Find (Container.Tree, Key);
+ 
+       begin
+          if X /= null then
+             Delete_Node_Sans_Free (Container.Tree, X);
+             Free (X);
+          end if;
+       end Exclude;
+ 
+       ----------
+       -- Find --
+       ----------
+ 
+       function Find (Container : Set; Key : Key_Type) return Cursor is
+          Node : constant Node_Access :=
+                   Key_Keys.Find (Container.Tree, Key);
+ 
+       begin
+          if Node = null then
+             return No_Element;
+          end if;
+ 
+          return Cursor'(Container'Unchecked_Access, Node);
+       end Find;
+ 
+       -----------
+       -- Floor --
+       -----------
+ 
+       function Floor (Container : Set; Key : Key_Type) return Cursor is
+          Node : constant Node_Access :=
+                   Key_Keys.Floor (Container.Tree, Key);
+ 
+       begin
+          if Node = null then
+             return No_Element;
+          end if;
+ 
+          return Cursor'(Container'Unchecked_Access, Node);
+       end Floor;
+ 
+       -------------------------
+       -- Is_Greater_Key_Node --
+       -------------------------
+ 
+       function Is_Greater_Key_Node
+         (Left  : Key_Type;
+          Right : Node_Access) return Boolean is
+       begin
+          return Left > Right.Element.all;
+       end Is_Greater_Key_Node;
+ 
+       ----------------------
+       -- Is_Less_Key_Node --
+       ----------------------
+ 
+       function Is_Less_Key_Node
+         (Left  : Key_Type;
+          Right : Node_Access) return Boolean is
+       begin
+          return Left < Right.Element.all;
+       end Is_Less_Key_Node;
+ 
+       ---------
+       -- Key --
+       ---------
+ 
+       function Key (Position : Cursor) return Key_Type is
+       begin
+          return Key (Position.Node.Element.all);
+       end Key;
+ 
+    end Generic_Keys;
+ 
+    -----------------
+    -- Has_Element --
+    -----------------
+ 
+    function Has_Element (Position : Cursor) return Boolean is
+    begin
+       return Position /= No_Element;
+    end Has_Element;
+ 
+    -------------
+    -- Include --
+    -------------
+ 
+    procedure Include (Container : in out Set; New_Item  : Element_Type) is
+       Position : Cursor;
+       Inserted : Boolean;
+ 
+       X : Element_Access;
+ 
+    begin
+       Insert (Container, New_Item, Position, Inserted);
+ 
+       if not Inserted then
+          X := Position.Node.Element;
+          Position.Node.Element := new Element_Type'(New_Item);
+          Free_Element (X);
+       end if;
+    end Include;
+ 
+    ------------
+    -- Insert --
+    ------------
+ 
+    procedure Insert
+      (Container : in out Set;
+       New_Item  : Element_Type;
+       Position  : out Cursor;
+       Inserted  : out Boolean)
+    is
+       function New_Node return Node_Access;
+       pragma Inline (New_Node);
+ 
+       procedure Insert_Post is
+         new Element_Keys.Generic_Insert_Post (New_Node);
+ 
+       procedure Insert_Sans_Hint is
+         new Element_Keys.Generic_Conditional_Insert (Insert_Post);
+ 
+       --------------
+       -- New_Node --
+       --------------
+ 
+       function New_Node return Node_Access is
+          Element : Element_Access := new Element_Type'(New_Item);
+       begin
+          return new Node_Type'(Parent  => null,
+                                Left    => null,
+                                Right   => null,
+                                Color   => Red,
+                                Element => Element);
+       exception
+          when others =>
+             Free_Element (Element);
+             raise;
+       end New_Node;
+ 
+    --  Start of processing for Insert
+ 
+    begin
+       Insert_Sans_Hint
+         (Container.Tree,
+          New_Item,
+          Position.Node,
+          Inserted);
+ 
+       Position.Container := Container'Unchecked_Access;
+    end Insert;
+ 
+    procedure Insert (Container : in out Set; New_Item  : Element_Type) is
+       Position : Cursor;
+       Inserted : Boolean;
+    begin
+       Insert (Container, New_Item, Position, Inserted);
+ 
+       if not Inserted then
+          raise Constraint_Error;
+       end if;
+    end Insert;
+ 
+    ----------------------
+    -- Insert_With_Hint --
+    ----------------------
+ 
+    procedure Insert_With_Hint
+      (Dst_Tree : in out Tree_Type;
+       Dst_Hint : Node_Access;
+       Src_Node : Node_Access;
+       Dst_Node : out Node_Access)
+    is
+       Success  : Boolean;
+ 
+       function New_Node return Node_Access;
+ 
+       procedure Insert_Post is
+         new Element_Keys.Generic_Insert_Post (New_Node);
+ 
+       procedure Insert_Sans_Hint is
+         new Element_Keys.Generic_Conditional_Insert (Insert_Post);
+ 
+       procedure Insert_With_Hint is
+          new Element_Keys.Generic_Conditional_Insert_With_Hint
+             (Insert_Post,
+              Insert_Sans_Hint);
+ 
+       --------------
+       -- New_Node --
+       --------------
+ 
+       function New_Node return Node_Access is
+          Element : Element_Access :=
+                      new Element_Type'(Src_Node.Element.all);
+          Node    : Node_Access;
+ 
+       begin
+          begin
+             Node := new Node_Type;
+          exception
+             when others =>
+                Free_Element (Element);
+                raise;
+          end;
+ 
+          Node.Element := Element;
+          return Node;
+       end New_Node;
+ 
+    --  Start of processing for Insert_With_Hint
+ 
+    begin
+       Insert_With_Hint
+         (Dst_Tree,
+          Dst_Hint,
+          Src_Node.Element.all,
+          Dst_Node,
+          Success);
+    end Insert_With_Hint;
+ 
+    ------------------
+    -- Intersection --
+    ------------------
+ 
+    procedure Intersection (Target : in out Set; Source : Set) is
+    begin
+       if Target'Address = Source'Address then
+          return;
+       end if;
+ 
+       Set_Ops.Intersection (Target.Tree, Source.Tree);
+    end Intersection;
+ 
+    function Intersection (Left, Right : Set) return Set is
+    begin
+       if Left'Address = Right'Address then
+          return Left;
+       end if;
+ 
+       declare
+          Tree : constant Tree_Type :=
+                   Set_Ops.Intersection (Left.Tree, Right.Tree);
+       begin
+          return (Controlled with Tree);
+       end;
+    end Intersection;
+ 
+    --------------
+    -- Is_Empty --
+    --------------
+ 
+    function Is_Empty (Container : Set) return Boolean is
+    begin
+       return Length (Container) = 0;
+    end Is_Empty;
+ 
+    -----------------------------
+    -- Is_Greater_Element_Node --
+    -----------------------------
+ 
+    function Is_Greater_Element_Node
+      (Left  : Element_Type;
+       Right : Node_Access) return Boolean is
+    begin
+       --  e > node same as node < e
+ 
+       return Right.Element.all < Left;
+    end Is_Greater_Element_Node;
+ 
+ 
+    --------------------------
+    -- Is_Less_Element_Node --
+    --------------------------
+ 
+    function Is_Less_Element_Node
+      (Left  : Element_Type;
+       Right : Node_Access) return Boolean is
+    begin
+       return Left < Right.Element.all;
+    end Is_Less_Element_Node;
+ 
+    -----------------------
+    -- Is_Less_Node_Node --
+    -----------------------
+ 
+    function Is_Less_Node_Node (L, R : Node_Access) return Boolean is
+    begin
+       return L.Element.all < R.Element.all;
+    end Is_Less_Node_Node;
+ 
+    ---------------
+    -- Is_Subset --
+    ---------------
+ 
+    function Is_Subset (Subset : Set; Of_Set : Set) return Boolean is
+    begin
+       if Subset'Address = Of_Set'Address then
+          return True;
+       end if;
+ 
+       return Set_Ops.Is_Subset (Subset => Subset.Tree, Of_Set => Of_Set.Tree);
+    end Is_Subset;
+ 
+    -------------
+    -- Iterate --
+    -------------
+ 
+    procedure Iterate
+      (Container : Set;
+       Process   : not null access procedure (Position : Cursor))
+    is
+       procedure Process_Node (Node : Node_Access);
+       pragma Inline (Process_Node);
+ 
+       procedure Local_Iterate is
+         new Tree_Operations.Generic_Iteration (Process_Node);
+ 
+       ------------------
+       -- Process_Node --
+       ------------------
+ 
+       procedure Process_Node (Node : Node_Access) is
+       begin
+          Process (Cursor'(Container'Unchecked_Access, Node));
+       end Process_Node;
+ 
+    --  Start of processing for Iterate
+ 
+    begin
+       Local_Iterate (Container.Tree);
+    end Iterate;
+ 
+    ----------
+    -- Last --
+    ----------
+ 
+    function Last (Container : Set) return Cursor is
+    begin
+       if Container.Tree.Last = null then
+          return No_Element;
+       end if;
+ 
+       return Cursor'(Container'Unchecked_Access, Container.Tree.Last);
+    end Last;
+ 
+    ------------------
+    -- Last_Element --
+    ------------------
+ 
+    function Last_Element (Container : Set) return Element_Type is
+    begin
+       return Container.Tree.Last.Element.all;
+    end Last_Element;
+ 
+    ----------
+    -- Left --
+    ----------
+ 
+    function Left (Node : Node_Access) return Node_Access is
+    begin
+       return Node.Left;
+    end Left;
+ 
+    ------------
+    -- Length --
+    ------------
+ 
+    function Length (Container : Set) return Count_Type is
+    begin
+       return Container.Tree.Length;
+    end Length;
+ 
+    ----------
+    -- Move --
+    ----------
+ 
+    procedure Move (Target : in out Set; Source : in out Set) is
+    begin
+       if Target'Address = Source'Address then
+          return;
+       end if;
+ 
+       Move (Target => Target.Tree, Source => Source.Tree);
+    end Move;
+ 
+    ----------
+    -- Next --
+    ----------
+ 
+    procedure Next (Position : in out Cursor) is
+    begin
+       Position := Next (Position);
+    end Next;
+ 
+    function Next (Position : Cursor) return Cursor is
+    begin
+       if Position = No_Element then
+          return No_Element;
+       end if;
+ 
+       declare
+          Node : constant Node_Access :=
+            Tree_Operations.Next (Position.Node);
+       begin
+          if Node = null then
+             return No_Element;
+          end if;
+ 
+          return Cursor'(Position.Container, Node);
+       end;
+    end Next;
+ 
+    -------------
+    -- Overlap --
+    -------------
+ 
+    function Overlap (Left, Right : Set) return Boolean is
+    begin
+       if Left'Address = Right'Address then
+          return Left.Tree.Length /= 0;
+       end if;
+ 
+       return Set_Ops.Overlap (Left.Tree, Right.Tree);
+    end Overlap;
+ 
+    ------------
+    -- Parent --
+    ------------
+ 
+    function Parent (Node : Node_Access) return Node_Access is
+    begin
+       return Node.Parent;
+    end Parent;
+ 
+    --------------
+    -- Previous --
+    --------------
+ 
+    procedure Previous (Position : in out Cursor) is
+    begin
+       Position := Previous (Position);
+    end Previous;
+ 
+    function Previous (Position : Cursor) return Cursor is
+    begin
+       if Position = No_Element then
+          return No_Element;
+       end if;
+ 
+       declare
+          Node : constant Node_Access :=
+            Tree_Operations.Previous (Position.Node);
+       begin
+          if Node = null then
+             return No_Element;
+          end if;
+ 
+          return Cursor'(Position.Container, Node);
+       end;
+    end Previous;
+ 
+    -------------------
+    -- Query_Element --
+    -------------------
+ 
+    procedure Query_Element
+      (Position  : Cursor;
+       Process   : not null access procedure (Element : Element_Type))
+    is
+    begin
+       Process (Position.Node.Element.all);
+    end Query_Element;
+ 
+    ----------
+    -- Read --
+    ----------
+ 
+    procedure Read
+      (Stream    : access Ada.Streams.Root_Stream_Type'Class;
+       Container : out Set)
+    is
+       N : Count_Type'Base;
+ 
+       function New_Node return Node_Access;
+ 
+       procedure Read is
+         new Tree_Operations.Generic_Read (New_Node);
+ 
+       --------------
+       -- New_Node --
+       --------------
+ 
+       function New_Node return Node_Access is
+          Node : Node_Access := new Node_Type;
+ 
+       begin
+          Node.Element := new Element_Type'(Element_Type'Input (Stream));
+          return Node;
+ 
+       exception
+          when others =>
+             Free (Node);
+             raise;
+       end New_Node;
+ 
+    --  Start of processing for Read
+ 
+    begin
+       Clear (Container);
+       Count_Type'Base'Read (Stream, N);
+       pragma Assert (N >= 0);
+       Read (Container.Tree, N);
+    end Read;
+ 
+    -------------
+    -- Replace --
+    -------------
+ 
+    procedure Replace (Container : in out Set; New_Item : Element_Type) is
+       Node : constant Node_Access :=
+                Element_Keys.Find (Container.Tree, New_Item);
+ 
+       X : Element_Access;
+ 
+    begin
+       if Node = null then
+          raise Constraint_Error;
+       end if;
+ 
+       X := Node.Element;
+       Node.Element := new Element_Type'(New_Item);
+       Free_Element (X);
+    end Replace;
+ 
+ --  TODO ???
+ --        procedure Replace
+ --          (Container : in out Set;
+ --           Key       : Key_Type;
+ --           New_Item  : Element_Type)
+ --        is
+ --           Node : Node_Access := Key_Keys.Find (Container.Tree, Key);
+ 
+ --        begin
+ --           if Node = null then
+ --              raise Constraint_Error;
+ --           end if;
+ 
+ --           Replace_Element (Container, Node, New_Item);
+ --        end Replace;
+ 
+    ---------------------
+    -- Replace_Element --
+    ---------------------
+ 
+ --  TODO: ???
+ --     procedure Replace_Element
+ --       (Container : in out Set;
+ --        Position  : Node_Access;
+ --        By        : Element_Type)
+ --   is
+ 
+ --        Node : Node_Access := Position;
+ 
+ --     begin
+ --        if By < Node.Element.all
+ --          or else Node.Element.all < By
+ --        then
+ --           null;
+ 
+ --        else
+ --           declare
+ --              X : Element_Access := Node.Element;
+ 
+ --           begin
+ --              Node.Element := new Element_Type'(By);
+ 
+ --              --  NOTE: If there's an exception here, then just
+ --              --  let it propagate.  We haven't modified the
+ --              --  state of the container, so there's nothing else
+ --              --  we need to do.
+ 
+ --              Free_Element (X);
+ --           end;
+ 
+ --           return;
+ --        end if;
+ 
+ --        Delete_Node_Sans_Free (Container.Tree, Node);
+ 
+ --        begin
+ --           Free_Element (Node.Element);
+ --        exception
+ --           when others =>
+ --              Node.Element := null;  --  don't attempt to dealloc X.E again
+ --              Free (Node);
+ --              raise;
+ --        end;
+ 
+ --        begin
+ --           Node.Element := new Element_Type'(By);
+ --        exception
+ --           when others =>
+ --              Free (Node);
+ --              raise;
+ --        end;
+ 
+ --        declare
+ --           function New_Node return Node_Access;
+ --           pragma Inline (New_Node);
+ 
+ --           function New_Node return Node_Access is
+ --           begin
+ --              return Node;
+ --           end New_Node;
+ 
+ --           procedure Insert_Post is
+ --             new Element_Keys.Generic_Insert_Post (New_Node);
+ 
+ --           procedure Insert is
+ --             new Element_Keys.Generic_Conditional_Insert (Insert_Post);
+ 
+ --           Result  : Node_Access;
+ --           Success : Boolean;
+ 
+ --        begin
+ --           Insert
+ --             (Tree    => Container.Tree,
+ --              Key     => Node.Element.all,
+ --              Node    => Result,
+ --              Success => Success);
+ 
+ --           if not Success then
+ --              Free (Node);
+ --              raise Program_Error;
+ --           end if;
+ 
+ --           pragma Assert (Result = Node);
+ --        end;
+ --     end Replace_Element;
+ 
+ 
+ --     procedure Replace_Element
+ --      (Container : in out Set;
+ --       Position  : Cursor;
+ --       By        : Element_Type)
+ --     is
+ --     begin
+ --        if Position.Container = null then
+ --           raise Constraint_Error;
+ --        end if;
+ 
+ --        if Position.Container /= Set_Access'(Container'Unchecked_Access) then
+ --           raise Program_Error;
+ --        end if;
+ 
+ --        Replace_Element (Container, Position.Node, By);
+ --     end Replace_Element;
+ 
+    ---------------------
+    -- Reverse_Iterate --
+    ---------------------
+ 
+    procedure Reverse_Iterate
+      (Container : Set;
+       Process   : not null access procedure (Position : Cursor))
+    is
+       procedure Process_Node (Node : Node_Access);
+       pragma Inline (Process_Node);
+ 
+       procedure Local_Reverse_Iterate is
+          new Tree_Operations.Generic_Reverse_Iteration (Process_Node);
+ 
+       ------------------
+       -- Process_Node --
+       ------------------
+ 
+       procedure Process_Node (Node : Node_Access) is
+       begin
+          Process (Cursor'(Container'Unchecked_Access, Node));
+       end Process_Node;
+ 
+    --  Start of processing for Reverse_Iterate
+ 
+    begin
+       Local_Reverse_Iterate (Container.Tree);
+    end Reverse_Iterate;
+ 
+    -----------
+    -- Right --
+    -----------
+ 
+    function Right (Node : Node_Access) return Node_Access is
+    begin
+       return Node.Right;
+    end Right;
+ 
+    ---------------
+    -- Set_Color --
+    ---------------
+ 
+    procedure Set_Color (Node : Node_Access; Color : Color_Type) is
+    begin
+       Node.Color := Color;
+    end Set_Color;
+ 
+    --------------
+    -- Set_Left --
+    --------------
+ 
+    procedure Set_Left (Node : Node_Access; Left : Node_Access) is
+    begin
+       Node.Left := Left;
+    end Set_Left;
+ 
+    ----------------
+    -- Set_Parent --
+    ----------------
+ 
+    procedure Set_Parent (Node : Node_Access; Parent : Node_Access) is
+    begin
+       Node.Parent := Parent;
+    end Set_Parent;
+ 
+    ---------------
+    -- Set_Right --
+    ---------------
+ 
+    procedure Set_Right (Node : Node_Access; Right : Node_Access) is
+    begin
+       Node.Right := Right;
+    end Set_Right;
+ 
+    --------------------------
+    -- Symmetric_Difference --
+    --------------------------
+ 
+    procedure Symmetric_Difference (Target : in out Set; Source : Set) is
+    begin
+       if Target'Address = Source'Address then
+          Clear (Target);
+          return;
+       end if;
+ 
+       Set_Ops.Symmetric_Difference (Target.Tree, Source.Tree);
+    end Symmetric_Difference;
+ 
+    function Symmetric_Difference (Left, Right : Set) return Set is
+    begin
+       if Left'Address = Right'Address then
+          return Empty_Set;
+       end if;
+ 
+       declare
+          Tree : constant Tree_Type :=
+                   Set_Ops.Symmetric_Difference (Left.Tree, Right.Tree);
+       begin
+          return (Controlled with Tree);
+       end;
+    end Symmetric_Difference;
+ 
+    -----------
+    -- Union --
+    -----------
+ 
+    procedure Union (Target : in out Set; Source : Set) is
+    begin
+       if Target'Address = Source'Address then
+          return;
+       end if;
+ 
+       Set_Ops.Union (Target.Tree, Source.Tree);
+    end Union;
+ 
+    function Union (Left, Right : Set) return Set is
+    begin
+       if Left'Address = Right'Address then
+          return Left;
+       end if;
+ 
+       declare
+          Tree : constant Tree_Type :=
+                   Set_Ops.Union (Left.Tree, Right.Tree);
+       begin
+          return (Controlled with Tree);
+       end;
+    end Union;
+ 
+    -----------
+    -- Write --
+    -----------
+ 
+    procedure Write
+      (Stream    : access Ada.Streams.Root_Stream_Type'Class;
+       Container : Set)
+    is
+       procedure Process (Node : Node_Access);
+       pragma Inline (Process);
+ 
+       procedure Iterate is
+         new Tree_Operations.Generic_Iteration (Process);
+ 
+       -------------
+       -- Process --
+       -------------
+ 
+       procedure Process (Node : Node_Access) is
+       begin
+          Element_Type'Output (Stream, Node.Element.all);
+       end Process;
+ 
+    --  Start of processing for Write
+ 
+    begin
+       Count_Type'Base'Write (Stream, Container.Tree.Length);
+       Iterate (Container.Tree);
+    end Write;
+ 
+ end Ada.Containers.Indefinite_Ordered_Sets;
+ 
+ 
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ciorse.ads gcc-4.0.0/gcc/ada/a-ciorse.ads
*** gcc-3.4.3/gcc/ada/a-ciorse.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-ciorse.ads	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,296 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                  ADA.CONTAINERS.INDEFINITE_ORDERED_SETS                  --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Containers.Red_Black_Trees;
+ with Ada.Finalization;
+ with Ada.Streams;
+ 
+ generic
+    type Element_Type (<>) is private;
+ 
+    with function "<" (Left, Right : Element_Type) return Boolean is <>;
+    with function "=" (Left, Right : Element_Type) return Boolean is <>;
+ 
+ package Ada.Containers.Indefinite_Ordered_Sets is
+ pragma Preelaborate (Indefinite_Ordered_Sets);
+ 
+    type Set is tagged private;
+ 
+    type Cursor is private;
+ 
+    Empty_Set : constant Set;
+ 
+    No_Element : constant Cursor;
+ 
+    function "=" (Left, Right : Set) return Boolean;
+ 
+    function Length (Container : Set) return Count_Type;
+ 
+    function Is_Empty (Container : Set) return Boolean;
+ 
+    procedure Clear (Container : in out Set);
+ 
+    function Element (Position : Cursor) return Element_Type;
+ 
+    procedure Query_Element
+      (Position : Cursor;
+       Process  : not null access procedure (Element : Element_Type));
+ 
+    --  TODO: resolve in Atlanta???
+    --   procedure Replace_Element
+    --     (Container : in out Set;
+    --      Position  : Cursor;
+    --      By        : Element_Type);
+ 
+    procedure Move (Target : in out Set; Source : in out Set);
+ 
+    procedure Insert
+      (Container : in out Set;
+       New_Item  : Element_Type;
+       Position  : out Cursor;
+       Inserted  : out Boolean);
+ 
+    procedure Insert
+      (Container : in out Set;
+       New_Item  : Element_Type);
+ 
+    procedure Include
+      (Container : in out Set;
+       New_Item  : Element_Type);
+ 
+    procedure Replace
+      (Container : in out Set;
+       New_Item  : Element_Type);
+ 
+    procedure Delete
+      (Container : in out Set;
+       Item      : Element_Type);
+ 
+    procedure Exclude
+      (Container : in out Set;
+       Item      : Element_Type);
+ 
+    procedure Delete
+      (Container : in out Set;
+       Position  : in out Cursor);
+ 
+    procedure Delete_First (Container : in out Set);
+ 
+    procedure Delete_Last (Container : in out Set);
+ 
+    procedure Union (Target : in out Set; Source : Set);
+ 
+    function Union (Left, Right : Set) return Set;
+ 
+    function "or" (Left, Right : Set) return Set renames Union;
+ 
+    procedure Intersection (Target : in out Set; Source : Set);
+ 
+    function Intersection (Left, Right : Set) return Set;
+ 
+    function "and" (Left, Right : Set) return Set renames Intersection;
+ 
+    procedure Difference (Target : in out Set;
+                          Source : Set);
+ 
+    function Difference (Left, Right : Set) return Set;
+ 
+    function "-" (Left, Right : Set) return Set renames Difference;
+ 
+    procedure Symmetric_Difference (Target : in out Set; Source : Set);
+ 
+    function Symmetric_Difference (Left, Right : Set) return Set;
+ 
+    function "xor" (Left, Right : Set) return Set renames Symmetric_Difference;
+ 
+    function Overlap (Left, Right : Set) return Boolean;
+ 
+    function Is_Subset (Subset : Set; Of_Set : Set) return Boolean;
+ 
+    function Contains (Container : Set; Item : Element_Type) return Boolean;
+ 
+    function Find (Container : Set; Item : Element_Type) return Cursor;
+ 
+    function Floor (Container : Set; Item : Element_Type) return Cursor;
+ 
+    function Ceiling (Container : Set; Item : Element_Type) return Cursor;
+ 
+    function First (Container : Set) return Cursor;
+ 
+    function First_Element (Container : Set) return Element_Type;
+ 
+    function Last (Container : Set) return Cursor;
+ 
+    function Last_Element (Container : Set) return Element_Type;
+ 
+    function Next (Position : Cursor) return Cursor;
+ 
+    function Previous (Position : Cursor) return Cursor;
+ 
+    procedure Next (Position : in out Cursor);
+ 
+    procedure Previous (Position : in out Cursor);
+ 
+    function Has_Element (Position : Cursor) return Boolean;
+ 
+    function "<" (Left, Right : Cursor) return Boolean;
+ 
+    function ">" (Left, Right : Cursor) return Boolean;
+ 
+    function "<" (Left : Cursor; Right : Element_Type) return Boolean;
+ 
+    function ">" (Left : Cursor; Right : Element_Type) return Boolean;
+ 
+    function "<" (Left : Element_Type; Right : Cursor) return Boolean;
+ 
+    function ">" (Left : Element_Type; Right : Cursor) return Boolean;
+ 
+    procedure Iterate
+      (Container : Set;
+       Process   : not null access procedure (Position : Cursor));
+ 
+    procedure Reverse_Iterate
+      (Container : Set;
+       Process   : not null access procedure (Position : Cursor));
+ 
+    generic
+       type Key_Type (<>) is limited private;
+ 
+       with function Key (Element : Element_Type) return Key_Type;
+ 
+       with function "<" (Left : Key_Type; Right : Element_Type)
+           return Boolean is <>;
+ 
+       with function ">" (Left : Key_Type; Right : Element_Type)
+           return Boolean is <>;
+ 
+    package Generic_Keys is
+ 
+       function Contains
+         (Container : Set;
+          Key       : Key_Type) return Boolean;
+ 
+       function Find
+         (Container : Set;
+          Key       : Key_Type) return Cursor;
+ 
+       function Floor
+         (Container : Set;
+          Key       : Key_Type) return Cursor;
+ 
+       function Ceiling
+         (Container : Set;
+          Key       : Key_Type) return Cursor;
+ 
+       function Key (Position : Cursor) return Key_Type;
+ 
+       function Element
+         (Container : Set;
+          Key       : Key_Type) return Element_Type;
+ 
+       --  TODO: resolve in Atlanta???
+       --      procedure Replace
+       --        (Container : in out Set;
+       --         Key       : Key_Type;
+       --         New_Item  : Element_Type);
+ 
+       procedure Delete (Container : in out Set; Key : Key_Type);
+ 
+       procedure Exclude (Container : in out Set; Key : Key_Type);
+ 
+       function "<" (Left : Cursor; Right : Key_Type) return Boolean;
+ 
+       function ">" (Left : Cursor; Right : Key_Type) return Boolean;
+ 
+       function "<" (Left : Key_Type; Right : Cursor) return Boolean;
+ 
+       function ">" (Left : Key_Type; Right : Cursor) return Boolean;
+ 
+       --  TODO: resolve name in Atlanta???
+       procedure Checked_Update_Element
+         (Container : in out Set;
+          Position  : Cursor;
+          Process   : not null access
+                        procedure (Element : in out Element_Type));
+ 
+    end Generic_Keys;
+ 
+ private
+ 
+    type Node_Type;
+    type Node_Access is access Node_Type;
+ 
+    package Tree_Types is
+      new Red_Black_Trees.Generic_Tree_Types (Node_Access);
+ 
+    use Tree_Types;
+    use Ada.Finalization;
+ 
+    type Set is new Controlled with record
+       Tree : Tree_Type := (Length => 0, others => null);
+    end record;
+ 
+    procedure Adjust (Container : in out Set);
+ 
+    procedure Finalize (Container : in out Set) renames Clear;
+ 
+    type Set_Access is access constant Set;
+    for Set_Access'Storage_Size use 0;
+ 
+    type Cursor is record
+       Container : Set_Access;
+       Node      : Node_Access;
+    end record;
+ 
+    No_Element : constant Cursor := Cursor'(null, null);
+ 
+    use Ada.Streams;
+ 
+    procedure Write
+      (Stream    : access Root_Stream_Type'Class;
+       Container : Set);
+ 
+    for Set'Write use Write;
+ 
+    procedure Read
+      (Stream    : access Root_Stream_Type'Class;
+       Container : out Set);
+ 
+    for Set'Read use Read;
+ 
+    Empty_Set : constant Set :=
+                  (Controlled with Tree => (Length => 0, others => null));
+ 
+ end Ada.Containers.Indefinite_Ordered_Sets;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-cohama.adb gcc-4.0.0/gcc/ada/a-cohama.adb
*** gcc-3.4.3/gcc/ada/a-cohama.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-cohama.adb	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,663 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                        ADA.CONTAINERS.HASHED_MAPS                        --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Unchecked_Deallocation;
+ 
+ with Ada.Containers.Hash_Tables.Generic_Operations;
+ pragma Elaborate_All (Ada.Containers.Hash_Tables.Generic_Operations);
+ 
+ with Ada.Containers.Hash_Tables.Generic_Keys;
+ pragma Elaborate_All (Ada.Containers.Hash_Tables.Generic_Keys);
+ 
+ package body Ada.Containers.Hashed_Maps is
+ 
+    type Node_Type is limited record
+       Key     : Key_Type;
+       Element : Element_Type;
+       Next    : Node_Access;
+    end record;
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    function Copy_Node
+      (Source : Node_Access) return Node_Access;
+    pragma Inline (Copy_Node);
+ 
+    function Equivalent_Keys
+      (Key  : Key_Type;
+       Node : Node_Access) return Boolean;
+    pragma Inline (Equivalent_Keys);
+ 
+    function Find_Equal_Key
+      (R_Map  : Map;
+       L_Node : Node_Access) return Boolean;
+ 
+    function Hash_Node (Node : Node_Access) return Hash_Type;
+    pragma Inline (Hash_Node);
+ 
+    function Next (Node : Node_Access) return Node_Access;
+    pragma Inline (Next);
+ 
+    function Read_Node
+      (Stream : access Root_Stream_Type'Class) return Node_Access;
+    pragma Inline (Read_Node);
+ 
+    procedure Set_Next (Node : Node_Access; Next : Node_Access);
+    pragma Inline (Set_Next);
+ 
+    procedure Write_Node
+      (Stream : access Root_Stream_Type'Class;
+       Node   : Node_Access);
+    pragma Inline (Write_Node);
+ 
+    --------------------------
+    -- Local Instantiations --
+    --------------------------
+ 
+    procedure Free is
+      new Ada.Unchecked_Deallocation (Node_Type, Node_Access);
+ 
+    package HT_Ops is
+       new Hash_Tables.Generic_Operations
+        (HT_Types          => HT_Types,
+         Hash_Table_Type   => Map,
+         Null_Node         => null,
+         Hash_Node         => Hash_Node,
+         Next              => Next,
+         Set_Next          => Set_Next,
+         Copy_Node         => Copy_Node,
+         Free              => Free);
+ 
+    package Key_Ops is
+       new Hash_Tables.Generic_Keys
+        (HT_Types  => HT_Types,
+         HT_Type   => Map,
+         Null_Node => null,
+         Next      => Next,
+         Set_Next  => Set_Next,
+         Key_Type  => Key_Type,
+         Hash      => Hash,
+         Equivalent_Keys => Equivalent_Keys);
+ 
+    function Is_Equal is new HT_Ops.Generic_Equal (Find_Equal_Key);
+ 
+    procedure Read_Nodes  is new HT_Ops.Generic_Read (Read_Node);
+    procedure Write_Nodes is new HT_Ops.Generic_Write (Write_Node);
+ 
+    ---------
+    -- "=" --
+    ---------
+ 
+    function "=" (Left, Right : Map) return Boolean renames Is_Equal;
+ 
+    ------------
+    -- Adjust --
+    ------------
+ 
+    procedure Adjust (Container : in out Map) renames HT_Ops.Adjust;
+ 
+    --------------
+    -- Capacity --
+    --------------
+ 
+    function Capacity (Container : Map) return Count_Type
+      renames HT_Ops.Capacity;
+ 
+    -----------
+    -- Clear --
+    -----------
+ 
+    procedure Clear (Container : in out Map) renames HT_Ops.Clear;
+ 
+    --------------
+    -- Contains --
+    --------------
+ 
+    function Contains (Container : Map; Key : Key_Type) return Boolean is
+    begin
+       return Find (Container, Key) /= No_Element;
+    end Contains;
+ 
+    ---------------
+    -- Copy_Node --
+    ---------------
+ 
+    function Copy_Node
+      (Source : Node_Access) return Node_Access
+    is
+       Target : constant Node_Access :=
+                  new Node_Type'(Key     => Source.Key,
+                                 Element => Source.Element,
+                                 Next    => null);
+    begin
+       return Target;
+    end Copy_Node;
+ 
+    ------------
+    -- Delete --
+    ------------
+ 
+    procedure Delete (Container : in out Map; Key : Key_Type) is
+       X : Node_Access;
+ 
+    begin
+       Key_Ops.Delete_Key_Sans_Free (Container, Key, X);
+ 
+       if X = null then
+          raise Constraint_Error;
+       end if;
+ 
+       Free (X);
+    end Delete;
+ 
+    procedure Delete (Container : in out Map; Position : in out Cursor) is
+    begin
+       if Position = No_Element then
+          return;
+       end if;
+ 
+       if Position.Container /= Map_Access'(Container'Unchecked_Access) then
+          raise Program_Error;
+       end if;
+ 
+       HT_Ops.Delete_Node_Sans_Free (Container, Position.Node);
+       Free (Position.Node);
+ 
+       Position.Container := null;
+    end Delete;
+ 
+    -------------
+    -- Element --
+    -------------
+ 
+    function Element (Container : Map; Key : Key_Type) return Element_Type is
+       C : constant Cursor := Find (Container, Key);
+    begin
+       return C.Node.Element;
+    end Element;
+ 
+    function Element (Position : Cursor) return Element_Type is
+    begin
+       return Position.Node.Element;
+    end Element;
+ 
+    ---------------------
+    -- Equivalent_Keys --
+    ---------------------
+ 
+    function Equivalent_Keys
+      (Key  : Key_Type;
+       Node : Node_Access) return Boolean is
+    begin
+       return Equivalent_Keys (Key, Node.Key);
+    end Equivalent_Keys;
+ 
+    ---------------------
+    -- Equivalent_Keys --
+    ---------------------
+ 
+    function Equivalent_Keys (Left, Right : Cursor)
+      return Boolean is
+    begin
+       return Equivalent_Keys (Left.Node.Key, Right.Node.Key);
+    end Equivalent_Keys;
+ 
+    function Equivalent_Keys (Left : Cursor; Right : Key_Type) return Boolean is
+    begin
+       return Equivalent_Keys (Left.Node.Key, Right);
+    end Equivalent_Keys;
+ 
+    function Equivalent_Keys (Left : Key_Type; Right : Cursor) return Boolean is
+    begin
+       return Equivalent_Keys (Left, Right.Node.Key);
+    end Equivalent_Keys;
+ 
+    -------------
+    -- Exclude --
+    -------------
+ 
+    procedure Exclude (Container : in out Map; Key : Key_Type) is
+       X : Node_Access;
+    begin
+       Key_Ops.Delete_Key_Sans_Free (Container, Key, X);
+       Free (X);
+    end Exclude;
+ 
+    --------------
+    -- Finalize --
+    --------------
+ 
+    procedure Finalize (Container : in out Map) renames HT_Ops.Finalize;
+ 
+    ----------
+    -- Find --
+    ----------
+ 
+    function Find (Container : Map; Key : Key_Type) return Cursor is
+       Node : constant Node_Access := Key_Ops.Find (Container, Key);
+ 
+    begin
+       if Node = null then
+          return No_Element;
+       end if;
+ 
+       return Cursor'(Container'Unchecked_Access, Node);
+    end Find;
+ 
+    --------------------
+    -- Find_Equal_Key --
+    --------------------
+ 
+    function Find_Equal_Key
+      (R_Map  : Map;
+       L_Node : Node_Access) return Boolean
+    is
+       R_Index : constant Hash_Type := Key_Ops.Index (R_Map, L_Node.Key);
+       R_Node  : Node_Access := R_Map.Buckets (R_Index);
+ 
+    begin
+       while R_Node /= null loop
+          if Equivalent_Keys (L_Node.Key, R_Node.Key) then
+             return L_Node.Element = R_Node.Element;
+          end if;
+ 
+          R_Node := R_Node.Next;
+       end loop;
+ 
+       return False;
+    end Find_Equal_Key;
+ 
+    -----------
+    -- First --
+    -----------
+ 
+    function First (Container : Map) return Cursor is
+       Node : constant Node_Access := HT_Ops.First (Container);
+ 
+    begin
+       if Node = null then
+          return No_Element;
+       end if;
+ 
+       return Cursor'(Container'Unchecked_Access, Node);
+    end First;
+ 
+    -----------------
+    -- Has_Element --
+    -----------------
+ 
+    function Has_Element (Position : Cursor) return Boolean is
+    begin
+       return Position /= No_Element;
+    end Has_Element;
+ 
+    ---------------
+    -- Hash_Node --
+    ---------------
+ 
+    function Hash_Node (Node : Node_Access) return Hash_Type is
+    begin
+       return Hash (Node.Key);
+    end Hash_Node;
+ 
+    -------------
+    -- Include --
+    -------------
+ 
+    procedure Include
+      (Container : in out Map;
+       Key       : Key_Type;
+       New_Item  : Element_Type)
+    is
+       Position : Cursor;
+       Inserted : Boolean;
+ 
+    begin
+       Insert (Container, Key, New_Item, Position, Inserted);
+ 
+       if not Inserted then
+          Position.Node.Key := Key;
+          Position.Node.Element := New_Item;
+       end if;
+    end Include;
+ 
+    ------------
+    -- Insert --
+    ------------
+ 
+    procedure Insert
+      (Container : in out Map;
+       Key       : Key_Type;
+       Position  : out Cursor;
+       Inserted  : out Boolean)
+    is
+       function New_Node (Next : Node_Access) return Node_Access;
+       pragma Inline (New_Node);
+ 
+       procedure Local_Insert is
+         new Key_Ops.Generic_Conditional_Insert (New_Node);
+ 
+       --------------
+       -- New_Node --
+       --------------
+ 
+       function New_Node (Next : Node_Access) return Node_Access is
+          Node : Node_Access := new Node_Type; --  Ada 2005 aggregate possible?
+ 
+       begin
+          Node.Key := Key;
+          Node.Next := Next;
+ 
+          return Node;
+ 
+       exception
+          when others =>
+             Free (Node);
+             raise;
+       end New_Node;
+ 
+    --  Start of processing for Insert
+ 
+    begin
+       HT_Ops.Ensure_Capacity (Container, Container.Length + 1);
+       Local_Insert (Container, Key, Position.Node, Inserted);
+       Position.Container := Container'Unchecked_Access;
+    end Insert;
+ 
+    procedure Insert
+      (Container : in out Map;
+       Key       : Key_Type;
+       New_Item  : Element_Type;
+       Position  : out Cursor;
+       Inserted  : out Boolean)
+    is
+       function New_Node (Next : Node_Access) return Node_Access;
+       pragma Inline (New_Node);
+ 
+       procedure Local_Insert is
+         new Key_Ops.Generic_Conditional_Insert (New_Node);
+ 
+       --------------
+       -- New_Node --
+       --------------
+ 
+       function New_Node (Next : Node_Access) return Node_Access is
+          Node : constant Node_Access := new Node_Type'(Key, New_Item, Next);
+       begin
+          return Node;
+       end New_Node;
+ 
+    --  Start of processing for Insert
+ 
+    begin
+       HT_Ops.Ensure_Capacity (Container, Container.Length + 1);
+       Local_Insert (Container, Key, Position.Node, Inserted);
+       Position.Container := Container'Unchecked_Access;
+    end Insert;
+ 
+    procedure Insert
+      (Container : in out Map;
+       Key       : Key_Type;
+       New_Item  : Element_Type)
+    is
+       Position : Cursor;
+       Inserted : Boolean;
+ 
+    begin
+       Insert (Container, Key, New_Item, Position, Inserted);
+ 
+       if not Inserted then
+          raise Constraint_Error;
+       end if;
+    end Insert;
+ 
+    --------------
+    -- Is_Empty --
+    --------------
+ 
+    function Is_Empty (Container : Map) return Boolean is
+    begin
+       return Container.Length = 0;
+    end Is_Empty;
+ 
+    -------------
+    -- Iterate --
+    -------------
+ 
+    procedure Iterate
+      (Container : Map;
+       Process   : not null access procedure (Position : Cursor))
+    is
+       procedure Process_Node (Node : Node_Access);
+       pragma Inline (Process_Node);
+ 
+       procedure Local_Iterate is new HT_Ops.Generic_Iteration (Process_Node);
+ 
+       ------------------
+       -- Process_Node --
+       ------------------
+ 
+       procedure Process_Node (Node : Node_Access) is
+       begin
+          Process (Cursor'(Container'Unchecked_Access, Node));
+       end Process_Node;
+ 
+    --  Start of processing for Iterate
+ 
+    begin
+       Local_Iterate (Container);
+    end Iterate;
+ 
+    ---------
+    -- Key --
+    ---------
+ 
+    function Key (Position : Cursor) return Key_Type is
+    begin
+       return Position.Node.Key;
+    end Key;
+ 
+    ------------
+    -- Length --
+    ------------
+ 
+    function Length (Container : Map) return Count_Type is
+    begin
+       return Container.Length;
+    end Length;
+ 
+    ----------
+    -- Move --
+    ----------
+ 
+    procedure Move
+      (Target : in out Map;
+       Source : in out Map) renames HT_Ops.Move;
+ 
+    ----------
+    -- Next --
+    ----------
+ 
+    function Next (Node : Node_Access) return Node_Access is
+    begin
+       return Node.Next;
+    end Next;
+ 
+    function Next (Position : Cursor) return Cursor is
+    begin
+       if Position = No_Element then
+          return No_Element;
+       end if;
+ 
+       declare
+          M    : Map renames Position.Container.all;
+          Node : constant Node_Access := HT_Ops.Next (M, Position.Node);
+ 
+       begin
+          if Node = null then
+             return No_Element;
+          end if;
+ 
+          return Cursor'(Position.Container, Node);
+       end;
+    end Next;
+ 
+    procedure Next (Position : in out Cursor) is
+    begin
+       Position := Next (Position);
+    end Next;
+ 
+    -------------------
+    -- Query_Element --
+    -------------------
+ 
+    procedure Query_Element
+      (Position : Cursor;
+       Process  : not null access procedure (Element : Element_Type))
+    is
+    begin
+       Process (Position.Node.Key, Position.Node.Element);
+    end Query_Element;
+ 
+    ----------
+    -- Read --
+    ----------
+ 
+    procedure Read
+      (Stream    : access Root_Stream_Type'Class;
+       Container : out Map) renames Read_Nodes;
+ 
+    ---------------
+    -- Read_Node --
+    ---------------
+ 
+    function Read_Node
+      (Stream : access Root_Stream_Type'Class) return Node_Access
+    is
+       Node : Node_Access := new Node_Type;
+ 
+    begin
+       Key_Type'Read (Stream, Node.Key);
+       Element_Type'Read (Stream, Node.Element);
+       return Node;
+ 
+    exception
+       when others =>
+          Free (Node);
+          raise;
+    end Read_Node;
+ 
+    -------------
+    -- Replace --
+    -------------
+ 
+    procedure Replace
+      (Container : in out Map;
+       Key       : Key_Type;
+       New_Item  : Element_Type)
+    is
+       Node : constant Node_Access := Key_Ops.Find (Container, Key);
+ 
+    begin
+       if Node = null then
+          raise Constraint_Error;
+       end if;
+ 
+       Node.Key := Key;
+       Node.Element := New_Item;
+    end Replace;
+ 
+    ---------------------
+    -- Replace_Element --
+    ---------------------
+ 
+    procedure Replace_Element (Position : Cursor; By : Element_Type) is
+    begin
+       Position.Node.Element := By;
+    end Replace_Element;
+ 
+    ----------------------
+    -- Reserve_Capacity --
+    ----------------------
+ 
+    procedure Reserve_Capacity
+      (Container : in out Map;
+       Capacity  : Count_Type) renames HT_Ops.Ensure_Capacity;
+ 
+    --------------
+    -- Set_Next --
+    --------------
+ 
+    procedure Set_Next (Node : Node_Access; Next : Node_Access) is
+    begin
+       Node.Next := Next;
+    end Set_Next;
+ 
+    --------------------
+    -- Update_Element --
+    --------------------
+ 
+    procedure Update_Element
+      (Position : Cursor;
+       Process  : not null access procedure (Element : in out Element_Type))
+    is
+    begin
+       Process (Position.Node.Key, Position.Node.Element);
+    end Update_Element;
+ 
+    -----------
+    -- Write --
+    -----------
+ 
+    procedure Write
+      (Stream    : access Root_Stream_Type'Class;
+       Container : Map) renames Write_Nodes;
+ 
+    ----------------
+    -- Write_Node --
+    ----------------
+ 
+    procedure Write_Node
+      (Stream : access Root_Stream_Type'Class;
+       Node   : Node_Access)
+    is
+    begin
+       Key_Type'Write (Stream, Node.Key);
+       Element_Type'Write (Stream, Node.Element);
+    end Write_Node;
+ 
+ end Ada.Containers.Hashed_Maps;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-cohama.ads gcc-4.0.0/gcc/ada/a-cohama.ads
*** gcc-3.4.3/gcc/ada/a-cohama.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-cohama.ads	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,193 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                        ADA.CONTAINERS.HASHED_MAPS                        --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Containers.Hash_Tables;
+ with Ada.Streams;
+ 
+ generic
+    type Key_Type is private;
+ 
+    type Element_Type is private;
+ 
+    with function Hash (Key : Key_Type) return Hash_Type;
+ 
+    with function Equivalent_Keys (Left, Right : Key_Type) return Boolean;
+ 
+    with function "=" (Left, Right : Element_Type) return Boolean is <>;
+ 
+ package Ada.Containers.Hashed_Maps is
+ pragma Preelaborate (Hashed_Maps);
+ 
+    type Map is tagged private;
+ 
+    type Cursor is private;
+ 
+    Empty_Map : constant Map;
+ 
+    No_Element : constant Cursor;
+ 
+    function "=" (Left, Right : Map) return Boolean;
+ 
+    function Length (Container : Map) return Count_Type;
+ 
+    function Is_Empty (Container : Map) return Boolean;
+ 
+    procedure Clear (Container : in out Map);
+ 
+    function Element (Position : Cursor)
+       return Element_Type;
+ 
+    procedure Query_Element
+      (Position : Cursor;
+       Process  : not null access
+                    procedure (Key : Key_Type; Element : Element_Type));
+ 
+    procedure Update_Element
+      (Position : Cursor;
+       Process  : not null access
+                    procedure (Key : Key_Type; Element : in out Element_Type));
+ 
+    procedure Replace_Element (Position : Cursor; By : Element_Type);
+ 
+    procedure Move (Target : in out Map; Source : in out Map);
+ 
+    procedure Insert
+      (Container : in out Map;
+       Key       : Key_Type;
+       New_Item  : Element_Type;
+       Position  : out Cursor;
+       Inserted  : out Boolean);
+ 
+    procedure Insert
+      (Container : in out Map;
+       Key       : Key_Type;
+       New_Item  : Element_Type);
+ 
+    procedure Include
+      (Container : in out Map;
+       Key       : Key_Type;
+       New_Item  : Element_Type);
+ 
+    procedure Replace
+      (Container : in out Map;
+       Key       : Key_Type;
+       New_Item  : Element_Type);
+ 
+    procedure Insert
+      (Container : in out Map;
+       Key       : Key_Type;
+       Position  : out Cursor;
+       Inserted  : out Boolean);
+ 
+    procedure Delete (Container : in out Map; Key : Key_Type);
+ 
+    procedure Exclude (Container : in out Map; Key : Key_Type);
+ 
+    procedure Delete (Container : in out Map; Position : in out Cursor);
+ 
+    function Contains (Container : Map; Key : Key_Type) return Boolean;
+ 
+    function Find (Container : Map; Key : Key_Type) return Cursor;
+ 
+    function Element (Container : Map; Key : Key_Type) return Element_Type;
+ 
+    function Capacity (Container : Map) return Count_Type;
+ 
+    procedure Reserve_Capacity (Container : in out Map;
+                                Capacity  : Count_Type);
+ 
+    function First (Container : Map) return Cursor;
+ 
+    function Next (Position : Cursor) return Cursor;
+ 
+    procedure Next (Position : in out Cursor);
+ 
+    function Has_Element (Position : Cursor) return Boolean;
+ 
+    function Key (Position : Cursor) return Key_Type;
+ 
+    function Equivalent_Keys (Left, Right : Cursor) return Boolean;
+ 
+    function Equivalent_Keys (Left : Cursor; Right : Key_Type) return Boolean;
+ 
+    function Equivalent_Keys (Left : Key_Type; Right : Cursor) return Boolean;
+ 
+    procedure Iterate
+      (Container : Map;
+       Process   : not null access procedure (Position : Cursor));
+ 
+ private
+ 
+    type Node_Type;
+    type Node_Access is access Node_Type;
+ 
+    package HT_Types is new Hash_Tables.Generic_Hash_Table_Types (Node_Access);
+ 
+    use HT_Types;
+ 
+    type Map is new Hash_Table_Type with null record;
+ 
+    procedure Adjust (Container : in out Map);
+ 
+    procedure Finalize (Container : in out Map);
+ 
+    use Ada.Streams;
+ 
+    procedure Write
+      (Stream    : access Root_Stream_Type'Class;
+       Container : Map);
+ 
+    for Map'Write use Write;
+ 
+    procedure Read
+      (Stream    : access Root_Stream_Type'Class;
+       Container : out Map);
+ 
+    for Map'Read use Read;
+ 
+    Empty_Map : constant Map := (Hash_Table_Type with null record);
+ 
+    type Map_Access is access constant Map;
+    for Map_Access'Storage_Size use 0;
+ 
+    type Cursor is
+       record
+          Container : Map_Access;
+          Node      : Node_Access;
+       end record;
+ 
+    No_Element : constant Cursor := (Container => null, Node => null);
+ 
+ end Ada.Containers.Hashed_Maps;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-cohase.adb gcc-4.0.0/gcc/ada/a-cohase.adb
*** gcc-3.4.3/gcc/ada/a-cohase.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-cohase.adb	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,1418 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                        ADA.CONTAINERS.HASHED_SETS                        --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit has originally being developed by Matthew J Heaney.            --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Unchecked_Deallocation;
+ 
+ with Ada.Containers.Hash_Tables.Generic_Operations;
+ pragma Elaborate_All (Ada.Containers.Hash_Tables.Generic_Operations);
+ 
+ with Ada.Containers.Hash_Tables.Generic_Keys;
+ pragma Elaborate_All (Ada.Containers.Hash_Tables.Generic_Keys);
+ 
+ with System;  use type System.Address;
+ 
+ with Ada.Containers.Prime_Numbers;
+ 
+ with Ada.Finalization;  use Ada.Finalization;
+ 
+ package body Ada.Containers.Hashed_Sets is
+ 
+    type Node_Type is
+       limited record
+          Element : Element_Type;
+          Next    : Node_Access;
+       end record;
+ 
+    function Hash_Node
+      (Node : Node_Access) return Hash_Type;
+    pragma Inline (Hash_Node);
+ 
+    function Hash_Node
+      (Node : Node_Access) return Hash_Type is
+    begin
+       return Hash (Node.Element);
+    end Hash_Node;
+ 
+    function Next
+      (Node : Node_Access) return Node_Access;
+    pragma Inline (Next);
+ 
+    function Next
+      (Node : Node_Access) return Node_Access is
+    begin
+       return Node.Next;
+    end Next;
+ 
+    procedure Set_Next
+      (Node : Node_Access;
+       Next : Node_Access);
+    pragma Inline (Set_Next);
+ 
+    procedure Set_Next
+      (Node : Node_Access;
+       Next : Node_Access) is
+    begin
+       Node.Next := Next;
+    end Set_Next;
+ 
+    function Equivalent_Keys
+      (Key  : Element_Type;
+       Node : Node_Access) return Boolean;
+    pragma Inline (Equivalent_Keys);
+ 
+    function Equivalent_Keys
+      (Key  : Element_Type;
+       Node : Node_Access) return Boolean is
+    begin
+       return Equivalent_Keys (Key, Node.Element);
+    end Equivalent_Keys;
+ 
+    function Copy_Node
+      (Source : Node_Access) return Node_Access;
+    pragma Inline (Copy_Node);
+ 
+    function Copy_Node
+      (Source : Node_Access) return Node_Access is
+ 
+       Target : constant Node_Access :=
+         new Node_Type'(Element => Source.Element,
+                        Next    => null);
+    begin
+       return Target;
+    end Copy_Node;
+ 
+ 
+    procedure Free is
+       new Ada.Unchecked_Deallocation (Node_Type, Node_Access);
+ 
+    package HT_Ops is
+       new Hash_Tables.Generic_Operations
+        (HT_Types          => HT_Types,
+         Hash_Table_Type   => Set,
+         Null_Node         => null,
+         Hash_Node         => Hash_Node,
+         Next              => Next,
+         Set_Next          => Set_Next,
+         Copy_Node         => Copy_Node,
+         Free              => Free);
+ 
+    package Element_Keys is
+       new Hash_Tables.Generic_Keys
+        (HT_Types  => HT_Types,
+         HT_Type   => Set,
+         Null_Node => null,
+         Next      => Next,
+         Set_Next  => Set_Next,
+         Key_Type  => Element_Type,
+         Hash      => Hash,
+         Equivalent_Keys => Equivalent_Keys);
+ 
+ 
+    procedure Adjust (Container : in out Set) renames HT_Ops.Adjust;
+ 
+    procedure Finalize (Container : in out Set) renames HT_Ops.Finalize;
+ 
+ 
+    function Find_Equal_Key
+      (R_Set  : Set;
+       L_Node : Node_Access) return Boolean;
+ 
+    function Find_Equal_Key
+      (R_Set  : Set;
+       L_Node : Node_Access) return Boolean is
+ 
+       R_Index : constant Hash_Type :=
+         Element_Keys.Index (R_Set, L_Node.Element);
+ 
+       R_Node  : Node_Access := R_Set.Buckets (R_Index);
+ 
+    begin
+ 
+       loop
+ 
+          if R_Node = null then
+             return False;
+          end if;
+ 
+          if L_Node.Element = R_Node.Element then
+             --  pragma Assert (Is_Equal_Key (L_Node.Element, R_Node.Element));
+             return True;
+          end if;
+ 
+          R_Node := Next (R_Node);
+ 
+       end loop;
+ 
+    end Find_Equal_Key;
+ 
+    function Is_Equal is
+       new HT_Ops.Generic_Equal (Find_Equal_Key);
+ 
+    function "=" (Left, Right : Set) return Boolean renames Is_Equal;
+ 
+ 
+    function Length (Container : Set) return Count_Type is
+    begin
+       return Container.Length;
+    end Length;
+ 
+ 
+    function Is_Empty (Container : Set) return Boolean is
+    begin
+       return Container.Length = 0;
+    end Is_Empty;
+ 
+ 
+    procedure Clear (Container : in out Set) renames HT_Ops.Clear;
+ 
+ 
+    function Element (Position : Cursor) return Element_Type is
+    begin
+       return Position.Node.Element;
+    end Element;
+ 
+ 
+    procedure Query_Element
+      (Position : in Cursor;
+       Process  : not null access procedure (Element : in Element_Type)) is
+    begin
+       Process (Position.Node.Element);
+    end Query_Element;
+ 
+ 
+ --  TODO:
+ --     procedure Replace_Element (Container : in out Set;
+ --                                Position  : in     Node_Access;
+ --                                By        : in     Element_Type) is
+ 
+ --        Node : Node_Access := Position;
+ 
+ --     begin
+ 
+ --        if Equivalent_Keys (Node.Element, By) then
+ 
+ --           begin
+ --              Node.Element := By;
+ --           exception
+ --              when others =>
+ --                 HT_Ops.Delete_Node_Sans_Free (Container, Node);
+ --                 Free (Node);
+ --                 raise;
+ --           end;
+ 
+ --           return;
+ 
+ --        end if;
+ 
+ --        HT_Ops.Delete_Node_Sans_Free (Container, Node);
+ 
+ --        begin
+ --           Node.Element := By;
+ --        exception
+ --           when others =>
+ --              Free (Node);
+ --              raise;
+ --        end;
+ 
+ --        declare
+ --           function New_Node (Next : Node_Access) return Node_Access;
+ --           pragma Inline (New_Node);
+ 
+ --           function New_Node (Next : Node_Access) return Node_Access is
+ --           begin
+ --              Node.Next := Next;
+ --              return Node;
+ --           end New_Node;
+ 
+ --           procedure Insert is
+ --              new Element_Keys.Generic_Conditional_Insert (New_Node);
+ 
+ --           Result  : Node_Access;
+ --           Success : Boolean;
+ --        begin
+ --           Insert
+ --             (HT      => Container,
+ --              Key     => Node.Element,
+ --              Node    => Result,
+ --              Success => Success);
+ 
+ --           if not Success then
+ --              Free (Node);
+ --              raise Program_Error;
+ --           end if;
+ 
+ --           pragma Assert (Result = Node);
+ --        end;
+ 
+ --     end Replace_Element;
+ 
+ 
+ --     procedure Replace_Element (Container : in out Set;
+ --                                Position  : in     Cursor;
+ --                                By        : in     Element_Type) is
+ --     begin
+ 
+ --        if Position.Container = null then
+ --           raise Constraint_Error;
+ --        end if;
+ 
+ --        if Position.Container /= Set_Access'(Container'Unchecked_Access) then
+ --           raise Program_Error;
+ --        end if;
+ 
+ --        Replace_Element (Container, Position.Node, By);
+ 
+ --     end Replace_Element;
+ 
+ 
+    procedure Move (Target : in out Set;
+                    Source : in out Set) renames HT_Ops.Move;
+ 
+ 
+    procedure Insert (Container : in out Set;
+                      New_Item  : in     Element_Type;
+                      Position  :    out Cursor;
+                      Inserted  :    out Boolean) is
+ 
+       function New_Node (Next : Node_Access) return Node_Access;
+       pragma Inline (New_Node);
+ 
+       function New_Node (Next : Node_Access) return Node_Access is
+          Node : constant Node_Access := new Node_Type'(New_Item, Next);
+       begin
+          return Node;
+       end New_Node;
+ 
+       procedure Insert is
+         new Element_Keys.Generic_Conditional_Insert (New_Node);
+ 
+    begin
+ 
+       HT_Ops.Ensure_Capacity (Container, Container.Length + 1);
+       Insert (Container, New_Item, Position.Node, Inserted);
+       Position.Container := Container'Unchecked_Access;
+ 
+    end Insert;
+ 
+ 
+    procedure Insert (Container : in out Set;
+                      New_Item  : in     Element_Type) is
+ 
+       Position : Cursor;
+       Inserted : Boolean;
+ 
+    begin
+ 
+       Insert (Container, New_Item, Position, Inserted);
+ 
+       if not Inserted then
+          raise Constraint_Error;
+       end if;
+ 
+    end Insert;
+ 
+ 
+    procedure Replace (Container : in out Set;
+                       New_Item  : in     Element_Type) is
+ 
+       X : Node_Access := Element_Keys.Find (Container, New_Item);
+ 
+    begin
+ 
+       if X = null then
+          raise Constraint_Error;
+       end if;
+ 
+       X.Element := New_Item;
+ 
+    end Replace;
+ 
+ 
+    procedure Include (Container : in out Set;
+                       New_Item  : in     Element_Type) is
+ 
+       Position : Cursor;
+       Inserted : Boolean;
+ 
+    begin
+ 
+       Insert (Container, New_Item, Position, Inserted);
+ 
+       if not Inserted then
+          Position.Node.Element := New_Item;
+       end if;
+ 
+    end Include;
+ 
+ 
+    procedure Delete (Container : in out Set;
+                      Item      : in     Element_Type) is
+ 
+       X : Node_Access;
+ 
+    begin
+ 
+       Element_Keys.Delete_Key_Sans_Free (Container, Item, X);
+ 
+       if X = null then
+          raise Constraint_Error;
+       end if;
+ 
+       Free (X);
+ 
+    end Delete;
+ 
+ 
+    procedure Exclude (Container : in out Set;
+                       Item      : in     Element_Type) is
+ 
+       X : Node_Access;
+ 
+    begin
+ 
+       Element_Keys.Delete_Key_Sans_Free (Container, Item, X);
+       Free (X);
+ 
+    end Exclude;
+ 
+ 
+    procedure Delete (Container : in out Set;
+                      Position  : in out Cursor) is
+    begin
+ 
+       if Position = No_Element then
+          return;
+       end if;
+ 
+       if Position.Container /= Set_Access'(Container'Unchecked_Access) then
+          raise Program_Error;
+       end if;
+ 
+       HT_Ops.Delete_Node_Sans_Free (Container, Position.Node);
+       Free (Position.Node);
+ 
+       Position.Container := null;
+ 
+    end Delete;
+ 
+ 
+ 
+    procedure Union (Target : in out Set;
+                     Source : in     Set) is
+ 
+       procedure Process (Src_Node : in Node_Access);
+ 
+       procedure Process (Src_Node : in Node_Access) is
+ 
+          function New_Node (Next : Node_Access) return Node_Access;
+          pragma Inline (New_Node);
+ 
+          function New_Node (Next : Node_Access) return Node_Access is
+             Node : constant Node_Access :=
+               new Node_Type'(Src_Node.Element, Next);
+          begin
+             return Node;
+          end New_Node;
+ 
+          procedure Insert is
+             new Element_Keys.Generic_Conditional_Insert (New_Node);
+ 
+          Tgt_Node : Node_Access;
+          Success  : Boolean;
+ 
+       begin
+ 
+          Insert (Target, Src_Node.Element, Tgt_Node, Success);
+ 
+       end Process;
+ 
+       procedure Iterate is
+          new HT_Ops.Generic_Iteration (Process);
+ 
+    begin
+ 
+       if Target'Address = Source'Address then
+          return;
+       end if;
+ 
+       HT_Ops.Ensure_Capacity (Target, Target.Length + Source.Length);
+ 
+       Iterate (Source);
+ 
+    end Union;
+ 
+ 
+ 
+    function Union (Left, Right : Set) return Set is
+ 
+       Buckets : HT_Types.Buckets_Access;
+       Length  : Count_Type;
+ 
+    begin
+ 
+       if Left'Address = Right'Address then
+          return Left;
+       end if;
+ 
+       if Right.Length = 0 then
+          return Left;
+       end if;
+ 
+       if Left.Length = 0 then
+          return Right;
+       end if;
+ 
+       declare
+          Size : constant Hash_Type :=
+            Prime_Numbers.To_Prime (Left.Length + Right.Length);
+       begin
+          Buckets := new Buckets_Type (0 .. Size - 1);
+       end;
+ 
+       declare
+          procedure Process (L_Node : Node_Access);
+ 
+          procedure Process (L_Node : Node_Access) is
+             I : constant Hash_Type :=
+               Hash (L_Node.Element) mod Buckets'Length;
+          begin
+             Buckets (I) := new Node_Type'(L_Node.Element, Buckets (I));
+          end Process;
+ 
+          procedure Iterate is
+             new HT_Ops.Generic_Iteration (Process);
+       begin
+          Iterate (Left);
+       exception
+          when others =>
+             HT_Ops.Free_Hash_Table (Buckets);
+             raise;
+       end;
+ 
+       Length := Left.Length;
+ 
+       declare
+          procedure Process (Src_Node : Node_Access);
+ 
+          procedure Process (Src_Node : Node_Access) is
+ 
+             I : constant Hash_Type :=
+               Hash (Src_Node.Element) mod Buckets'Length;
+ 
+             Tgt_Node : Node_Access := Buckets (I);
+ 
+          begin
+ 
+             while Tgt_Node /= null loop
+ 
+                if Equivalent_Keys (Src_Node.Element, Tgt_Node.Element) then
+                   return;
+                end if;
+ 
+                Tgt_Node := Next (Tgt_Node);
+ 
+             end loop;
+ 
+             Buckets (I) := new Node_Type'(Src_Node.Element, Buckets (I));
+             Length := Length + 1;
+ 
+          end Process;
+ 
+          procedure Iterate is
+             new HT_Ops.Generic_Iteration (Process);
+       begin
+          Iterate (Right);
+       exception
+          when others =>
+             HT_Ops.Free_Hash_Table (Buckets);
+             raise;
+       end;
+ 
+       return (Controlled with Buckets, Length);
+ 
+    end Union;
+ 
+ 
+    function Is_In
+      (HT  : Set;
+       Key : Node_Access) return Boolean;
+    pragma Inline (Is_In);
+ 
+    function Is_In
+      (HT  : Set;
+       Key : Node_Access) return Boolean is
+    begin
+       return Element_Keys.Find (HT, Key.Element) /= null;
+    end Is_In;
+ 
+ 
+    procedure Intersection (Target : in out Set;
+                            Source : in     Set) is
+ 
+       Tgt_Node : Node_Access;
+ 
+    begin
+ 
+       if Target'Address = Source'Address then
+          return;
+       end if;
+ 
+       if Source.Length = 0 then
+          Clear (Target);
+          return;
+       end if;
+ 
+       --  TODO: optimize this to use an explicit
+       --  loop instead of an active iterator
+       --  (similar to how a passive iterator is
+       --  implemented).
+       --
+       --  Another possibility is to test which
+       --  set is smaller, and iterate over the
+       --  smaller set.
+ 
+       Tgt_Node := HT_Ops.First (Target);
+ 
+       while Tgt_Node /= null loop
+ 
+          if Is_In (Source, Tgt_Node) then
+ 
+             Tgt_Node := HT_Ops.Next (Target, Tgt_Node);
+ 
+          else
+ 
+             declare
+                X : Node_Access := Tgt_Node;
+             begin
+                Tgt_Node := HT_Ops.Next (Target, Tgt_Node);
+                HT_Ops.Delete_Node_Sans_Free (Target, X);
+                Free (X);
+             end;
+ 
+          end if;
+ 
+       end loop;
+ 
+    end Intersection;
+ 
+ 
+    function Intersection (Left, Right : Set) return Set is
+ 
+       Buckets : HT_Types.Buckets_Access;
+       Length  : Count_Type;
+ 
+    begin
+ 
+       if Left'Address = Right'Address then
+          return Left;
+       end if;
+ 
+       Length := Count_Type'Min (Left.Length, Right.Length);
+ 
+       if Length = 0 then
+          return Empty_Set;
+       end if;
+ 
+       declare
+          Size : constant Hash_Type := Prime_Numbers.To_Prime (Length);
+       begin
+          Buckets := new Buckets_Type (0 .. Size - 1);
+       end;
+ 
+       Length := 0;
+ 
+       declare
+          procedure Process (L_Node : Node_Access);
+ 
+          procedure Process (L_Node : Node_Access) is
+          begin
+             if Is_In (Right, L_Node) then
+ 
+                declare
+                   I : constant Hash_Type :=
+                     Hash (L_Node.Element) mod Buckets'Length;
+                begin
+                   Buckets (I) := new Node_Type'(L_Node.Element, Buckets (I));
+                end;
+ 
+                Length := Length + 1;
+ 
+             end if;
+          end Process;
+ 
+          procedure Iterate is
+             new HT_Ops.Generic_Iteration (Process);
+       begin
+          Iterate (Left);
+       exception
+          when others =>
+             HT_Ops.Free_Hash_Table (Buckets);
+             raise;
+       end;
+ 
+       return (Controlled with Buckets, Length);
+ 
+    end Intersection;
+ 
+ 
+    procedure Difference (Target : in out Set;
+                          Source : in     Set) is
+ 
+ 
+       Tgt_Node : Node_Access;
+ 
+    begin
+ 
+       if Target'Address = Source'Address then
+          Clear (Target);
+          return;
+       end if;
+ 
+       if Source.Length = 0 then
+          return;
+       end if;
+ 
+       --  TODO: As I noted above, this can be
+       --  written in terms of a loop instead as
+       --  active-iterator style, sort of like a
+       --  passive iterator.
+ 
+       Tgt_Node := HT_Ops.First (Target);
+ 
+       while Tgt_Node /= null loop
+ 
+          if Is_In (Source, Tgt_Node) then
+ 
+             declare
+                X : Node_Access := Tgt_Node;
+             begin
+                Tgt_Node := HT_Ops.Next (Target, Tgt_Node);
+                HT_Ops.Delete_Node_Sans_Free (Target, X);
+                Free (X);
+             end;
+ 
+          else
+ 
+             Tgt_Node := HT_Ops.Next (Target, Tgt_Node);
+ 
+          end if;
+ 
+       end loop;
+ 
+    end Difference;
+ 
+ 
+ 
+    function Difference (Left, Right : Set) return Set is
+ 
+       Buckets : HT_Types.Buckets_Access;
+       Length  : Count_Type;
+ 
+    begin
+ 
+       if Left'Address = Right'Address then
+          return Empty_Set;
+       end if;
+ 
+       if Left.Length = 0 then
+          return Empty_Set;
+       end if;
+ 
+       if Right.Length = 0 then
+          return Left;
+       end if;
+ 
+       declare
+          Size : constant Hash_Type := Prime_Numbers.To_Prime (Left.Length);
+       begin
+          Buckets := new Buckets_Type (0 .. Size - 1);
+       end;
+ 
+       Length := 0;
+ 
+       declare
+          procedure Process (L_Node : Node_Access);
+ 
+          procedure Process (L_Node : Node_Access) is
+          begin
+             if not Is_In (Right, L_Node) then
+ 
+                declare
+                   I : constant Hash_Type :=
+                     Hash (L_Node.Element) mod Buckets'Length;
+                begin
+                   Buckets (I) := new Node_Type'(L_Node.Element, Buckets (I));
+                end;
+ 
+                Length := Length + 1;
+ 
+             end if;
+          end Process;
+ 
+          procedure Iterate is
+             new HT_Ops.Generic_Iteration (Process);
+       begin
+          Iterate (Left);
+       exception
+          when others =>
+             HT_Ops.Free_Hash_Table (Buckets);
+             raise;
+       end;
+ 
+       return (Controlled with Buckets, Length);
+ 
+    end Difference;
+ 
+ 
+ 
+    procedure Symmetric_Difference (Target : in out Set;
+                                    Source : in     Set) is
+    begin
+ 
+       if Target'Address = Source'Address then
+          Clear (Target);
+          return;
+       end if;
+ 
+       HT_Ops.Ensure_Capacity (Target, Target.Length + Source.Length);
+ 
+       if Target.Length = 0 then
+ 
+          declare
+             procedure Process (Src_Node : Node_Access);
+ 
+             procedure Process (Src_Node : Node_Access) is
+                E : Element_Type renames Src_Node.Element;
+                B : Buckets_Type renames Target.Buckets.all;
+                I : constant Hash_Type := Hash (E) mod B'Length;
+                N : Count_Type renames Target.Length;
+             begin
+                B (I) := new Node_Type'(E, B (I));
+                N := N + 1;
+             end Process;
+ 
+             procedure Iterate is
+                new HT_Ops.Generic_Iteration (Process);
+          begin
+             Iterate (Source);
+          end;
+ 
+       else
+ 
+          declare
+             procedure Process (Src_Node : Node_Access);
+ 
+             procedure Process (Src_Node : Node_Access) is
+                E : Element_Type renames Src_Node.Element;
+                B : Buckets_Type renames Target.Buckets.all;
+                I : constant Hash_Type := Hash (E) mod B'Length;
+                N : Count_Type renames Target.Length;
+             begin
+                if B (I) = null then
+ 
+                   B (I) := new Node_Type'(E, null);
+                   N := N + 1;
+ 
+                elsif Equivalent_Keys (E, B (I).Element) then
+ 
+                   declare
+                      X : Node_Access := B (I);
+                   begin
+                      B (I) := B (I).Next;
+                      N := N - 1;
+                      Free (X);
+                   end;
+ 
+                else
+ 
+                   declare
+                      Prev : Node_Access := B (I);
+                      Curr : Node_Access := Prev.Next;
+                   begin
+                      while Curr /= null loop
+                         if Equivalent_Keys (E, Curr.Element) then
+                            Prev.Next := Curr.Next;
+                            N := N - 1;
+                            Free (Curr);
+                            return;
+                         end if;
+ 
+                         Prev := Curr;
+                         Curr := Prev.Next;
+                      end loop;
+ 
+                      B (I) := new Node_Type'(E, B (I));
+                      N := N + 1;
+                   end;
+ 
+                end if;
+             end Process;
+ 
+             procedure Iterate is
+                new HT_Ops.Generic_Iteration (Process);
+          begin
+             Iterate (Source);
+          end;
+ 
+       end if;
+ 
+    end Symmetric_Difference;
+ 
+ 
+    function Symmetric_Difference (Left, Right : Set) return Set is
+ 
+       Buckets : HT_Types.Buckets_Access;
+       Length  : Count_Type;
+ 
+    begin
+ 
+       if Left'Address = Right'Address then
+          return Empty_Set;
+       end if;
+ 
+       if Right.Length = 0 then
+          return Left;
+       end if;
+ 
+       if Left.Length = 0 then
+          return Right;
+       end if;
+ 
+       declare
+          Size : constant Hash_Type :=
+            Prime_Numbers.To_Prime (Left.Length + Right.Length);
+       begin
+          Buckets := new Buckets_Type (0 .. Size - 1);
+       end;
+ 
+       Length := 0;
+ 
+       declare
+          procedure Process (L_Node : Node_Access);
+ 
+          procedure Process (L_Node : Node_Access) is
+          begin
+             if not Is_In (Right, L_Node) then
+                declare
+                   E : Element_Type renames L_Node.Element;
+                   I : constant Hash_Type := Hash (E) mod Buckets'Length;
+                begin
+                   Buckets (I) := new Node_Type'(E, Buckets (I));
+                   Length := Length + 1;
+                end;
+             end if;
+          end Process;
+ 
+          procedure Iterate is
+             new HT_Ops.Generic_Iteration (Process);
+       begin
+          Iterate (Left);
+       exception
+          when others =>
+             HT_Ops.Free_Hash_Table (Buckets);
+             raise;
+       end;
+ 
+       declare
+          procedure Process (R_Node : Node_Access);
+ 
+          procedure Process (R_Node : Node_Access) is
+          begin
+             if not Is_In (Left, R_Node) then
+                declare
+                   E : Element_Type renames R_Node.Element;
+                   I : constant Hash_Type := Hash (E) mod Buckets'Length;
+                begin
+                   Buckets (I) := new Node_Type'(E, Buckets (I));
+                   Length := Length + 1;
+                end;
+             end if;
+          end Process;
+ 
+          procedure Iterate is
+             new HT_Ops.Generic_Iteration (Process);
+       begin
+          Iterate (Right);
+       exception
+          when others =>
+             HT_Ops.Free_Hash_Table (Buckets);
+             raise;
+       end;
+ 
+       return (Controlled with Buckets, Length);
+ 
+    end Symmetric_Difference;
+ 
+ 
+    function Is_Subset (Subset : Set;
+                        Of_Set : Set) return Boolean is
+ 
+       Subset_Node : Node_Access;
+ 
+    begin
+ 
+       if Subset'Address = Of_Set'Address then
+          return True;
+       end if;
+ 
+       if Subset.Length > Of_Set.Length then
+          return False;
+       end if;
+ 
+       --  TODO: rewrite this to loop in the
+       --  style of a passive iterator.
+ 
+       Subset_Node := HT_Ops.First (Subset);
+ 
+       while Subset_Node /= null loop
+          if not Is_In (Of_Set, Subset_Node) then
+             return False;
+          end if;
+ 
+          Subset_Node := HT_Ops.Next (Subset, Subset_Node);
+       end loop;
+ 
+       return True;
+ 
+    end Is_Subset;
+ 
+ 
+    function Overlap (Left, Right : Set) return Boolean is
+ 
+       Left_Node : Node_Access;
+ 
+    begin
+ 
+       if Right.Length = 0 then
+          return False;
+       end if;
+ 
+       if Left'Address = Right'Address then
+          return True;
+       end if;
+ 
+       Left_Node := HT_Ops.First (Left);
+ 
+       while Left_Node /= null loop
+          if Is_In (Right, Left_Node) then
+             return True;
+          end if;
+ 
+          Left_Node := HT_Ops.Next (Left, Left_Node);
+       end loop;
+ 
+       return False;
+ 
+    end Overlap;
+ 
+ 
+    function Find (Container : Set;
+                   Item      : Element_Type) return Cursor is
+ 
+       Node : constant Node_Access := Element_Keys.Find (Container, Item);
+ 
+    begin
+ 
+       if Node = null then
+          return No_Element;
+       end if;
+ 
+       return Cursor'(Container'Unchecked_Access, Node);
+ 
+    end Find;
+ 
+ 
+    function Contains (Container : Set;
+                       Item      : Element_Type) return Boolean is
+    begin
+       return Find (Container, Item) /= No_Element;
+    end Contains;
+ 
+ 
+ 
+    function First (Container : Set) return Cursor is
+       Node : constant Node_Access := HT_Ops.First (Container);
+    begin
+       if Node = null then
+          return No_Element;
+       end if;
+ 
+       return Cursor'(Container'Unchecked_Access, Node);
+    end First;
+ 
+ 
+ --     function First_Element (Container : Set) return Element_Type is
+ --        Node : constant Node_Access := HT_Ops.First (Container);
+ --     begin
+ --        return Node.Element;
+ --     end First_Element;
+ 
+ 
+    function Next (Position : Cursor) return Cursor is
+    begin
+       if Position.Container = null
+         or else Position.Node = null
+       then
+          return No_Element;
+       end if;
+ 
+       declare
+          S : Set renames Position.Container.all;
+          Node : constant Node_Access := HT_Ops.Next (S, Position.Node);
+       begin
+          if Node = null then
+             return No_Element;
+          end if;
+ 
+          return Cursor'(Position.Container, Node);
+       end;
+    end Next;
+ 
+ 
+    procedure Next (Position : in out Cursor) is
+    begin
+       Position := Next (Position);
+    end Next;
+ 
+ 
+    function Has_Element (Position : Cursor) return Boolean is
+    begin
+       if Position.Container = null then
+          return False;
+       end if;
+ 
+       if Position.Node = null then
+          return False;
+       end if;
+ 
+       return True;
+    end Has_Element;
+ 
+ 
+    function Equivalent_Keys (Left, Right : Cursor)
+      return Boolean is
+    begin
+       return Equivalent_Keys (Left.Node.Element, Right.Node.Element);
+    end Equivalent_Keys;
+ 
+ 
+    function Equivalent_Keys (Left  : Cursor;
+                              Right : Element_Type)
+     return Boolean is
+    begin
+       return Equivalent_Keys (Left.Node.Element, Right);
+    end Equivalent_Keys;
+ 
+ 
+    function Equivalent_Keys (Left  : Element_Type;
+                              Right : Cursor)
+     return Boolean is
+    begin
+       return Equivalent_Keys (Left, Right.Node.Element);
+    end Equivalent_Keys;
+ 
+ 
+    procedure Iterate
+      (Container : in Set;
+       Process   : not null access procedure (Position : in Cursor)) is
+ 
+       procedure Process_Node (Node : in Node_Access);
+       pragma Inline (Process_Node);
+ 
+       procedure Process_Node (Node : in Node_Access) is
+       begin
+          Process (Cursor'(Container'Unchecked_Access, Node));
+       end Process_Node;
+ 
+       procedure Iterate is
+          new HT_Ops.Generic_Iteration (Process_Node);
+    begin
+       Iterate (Container);
+    end Iterate;
+ 
+ 
+    function Capacity (Container : Set) return Count_Type
+      renames HT_Ops.Capacity;
+ 
+    procedure Reserve_Capacity
+      (Container : in out Set;
+       Capacity  : in     Count_Type)
+      renames HT_Ops.Ensure_Capacity;
+ 
+ 
+    procedure Write_Node
+      (Stream : access Root_Stream_Type'Class;
+       Node   : in     Node_Access);
+    pragma Inline (Write_Node);
+ 
+    procedure Write_Node
+      (Stream : access Root_Stream_Type'Class;
+       Node   : in     Node_Access) is
+    begin
+       Element_Type'Write (Stream, Node.Element);
+    end Write_Node;
+ 
+    procedure Write_Nodes is
+       new HT_Ops.Generic_Write (Write_Node);
+ 
+    procedure Write
+      (Stream    : access Root_Stream_Type'Class;
+       Container : in     Set) renames Write_Nodes;
+ 
+ 
+    function Read_Node (Stream : access Root_Stream_Type'Class)
+      return Node_Access;
+    pragma Inline (Read_Node);
+ 
+    function Read_Node (Stream : access Root_Stream_Type'Class)
+      return Node_Access is
+ 
+       Node : Node_Access := new Node_Type;
+    begin
+       Element_Type'Read (Stream, Node.Element);
+       return Node;
+    exception
+       when others =>
+          Free (Node);
+          raise;
+    end Read_Node;
+ 
+    procedure Read_Nodes is
+       new HT_Ops.Generic_Read (Read_Node);
+ 
+    procedure Read
+      (Stream    : access Root_Stream_Type'Class;
+       Container :    out Set) renames Read_Nodes;
+ 
+ 
+    package body Generic_Keys is
+ 
+       function Equivalent_Keys (Left  : Cursor;
+                                 Right : Key_Type)
+         return Boolean is
+       begin
+          return Equivalent_Keys (Right, Left.Node.Element);
+       end Equivalent_Keys;
+ 
+       function Equivalent_Keys (Left  : Key_Type;
+                                 Right : Cursor)
+         return Boolean is
+       begin
+          return Equivalent_Keys (Left, Right.Node.Element);
+       end Equivalent_Keys;
+ 
+       function Equivalent_Keys
+         (Key  : Key_Type;
+          Node : Node_Access) return Boolean;
+       pragma Inline (Equivalent_Keys);
+ 
+       function Equivalent_Keys
+         (Key  : Key_Type;
+          Node : Node_Access) return Boolean is
+       begin
+          return Equivalent_Keys (Key, Node.Element);
+       end Equivalent_Keys;
+ 
+       package Key_Keys is
+          new Hash_Tables.Generic_Keys
+           (HT_Types  => HT_Types,
+            HT_Type   => Set,
+            Null_Node => null,
+            Next      => Next,
+            Set_Next  => Set_Next,
+            Key_Type  => Key_Type,
+            Hash      => Hash,
+            Equivalent_Keys => Equivalent_Keys);
+ 
+ 
+       function Find (Container : Set;
+                      Key       : Key_Type)
+          return Cursor is
+ 
+          Node : constant Node_Access :=
+            Key_Keys.Find (Container, Key);
+ 
+       begin
+ 
+          if Node = null then
+             return No_Element;
+          end if;
+ 
+          return Cursor'(Container'Unchecked_Access, Node);
+ 
+       end Find;
+ 
+ 
+       function Contains (Container : Set;
+                          Key       : Key_Type) return Boolean is
+       begin
+          return Find (Container, Key) /= No_Element;
+       end Contains;
+ 
+ 
+       function Element (Container : Set;
+                         Key       : Key_Type)
+         return Element_Type is
+ 
+          Node : constant Node_Access := Key_Keys.Find (Container, Key);
+       begin
+          return Node.Element;
+       end Element;
+ 
+ 
+       function Key (Position : Cursor) return Key_Type is
+       begin
+          return Key (Position.Node.Element);
+       end Key;
+ 
+ 
+ --  TODO:
+ --        procedure Replace (Container : in out Set;
+ --                           Key       : in     Key_Type;
+ --                           New_Item  : in     Element_Type) is
+ 
+ --           Node : constant Node_Access :=
+ --             Key_Keys.Find (Container, Key);
+ 
+ --        begin
+ 
+ --           if Node = null then
+ --              raise Constraint_Error;
+ --           end if;
+ 
+ --           Replace_Element (Container, Node, New_Item);
+ 
+ --        end Replace;
+ 
+ 
+       procedure Delete (Container : in out Set;
+                         Key       : in     Key_Type) is
+ 
+          X : Node_Access;
+ 
+       begin
+ 
+          Key_Keys.Delete_Key_Sans_Free (Container, Key, X);
+ 
+          if X = null then
+             raise Constraint_Error;
+          end if;
+ 
+          Free (X);
+ 
+       end Delete;
+ 
+ 
+       procedure Exclude (Container : in out Set;
+                          Key       : in     Key_Type) is
+ 
+          X : Node_Access;
+ 
+       begin
+ 
+          Key_Keys.Delete_Key_Sans_Free (Container, Key, X);
+          Free (X);
+ 
+       end Exclude;
+ 
+ 
+       procedure Checked_Update_Element
+         (Container : in out Set;
+          Position  : in     Cursor;
+          Process   : not null access
+            procedure (Element : in out Element_Type)) is
+ 
+       begin
+ 
+          if Position.Container = null then
+             raise Constraint_Error;
+          end if;
+ 
+          if Position.Container /= Set_Access'(Container'Unchecked_Access) then
+             raise Program_Error;
+          end if;
+ 
+          declare
+             Old_Key : Key_Type renames Key (Position.Node.Element);
+          begin
+             Process (Position.Node.Element);
+ 
+             if Equivalent_Keys (Old_Key, Position.Node.Element) then
+                return;
+             end if;
+          end;
+ 
+          declare
+             function New_Node (Next : Node_Access) return Node_Access;
+             pragma Inline (New_Node);
+ 
+             function New_Node (Next : Node_Access) return Node_Access is
+             begin
+                Position.Node.Next := Next;
+                return Position.Node;
+             end New_Node;
+ 
+             procedure Insert is
+                new Key_Keys.Generic_Conditional_Insert (New_Node);
+ 
+             Result  : Node_Access;
+             Success : Boolean;
+          begin
+             HT_Ops.Delete_Node_Sans_Free (Container, Position.Node);
+ 
+             Insert
+               (HT      => Container,
+                Key     => Key (Position.Node.Element),
+                Node    => Result,
+                Success => Success);
+ 
+             if not Success then
+                declare
+                   X : Node_Access := Position.Node;
+                begin
+                   Free (X);
+                end;
+ 
+                raise Program_Error;
+             end if;
+ 
+             pragma Assert (Result = Position.Node);
+          end;
+ 
+       end Checked_Update_Element;
+ 
+    end Generic_Keys;
+ 
+ end Ada.Containers.Hashed_Sets;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-cohase.ads gcc-4.0.0/gcc/ada/a-cohase.ads
*** gcc-3.4.3/gcc/ada/a-cohase.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-cohase.ads	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,255 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                        ADA.CONTAINERS.HASHED_SETS                        --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Containers.Hash_Tables;
+ with Ada.Streams;
+ 
+ generic
+    type Element_Type is private;
+ 
+    with function Hash (Element : Element_Type) return Hash_Type;
+ 
+    --  TODO: get a ruling from ARG in Atlanta re the name and
+    --  order of these declarations. ???
+    --
+    with function Equivalent_Keys (Left, Right : Element_Type) return Boolean;
+ 
+    with function "=" (Left, Right : Element_Type) return Boolean is <>;
+ 
+ package Ada.Containers.Hashed_Sets is
+ pragma Preelaborate (Hashed_Sets);
+ 
+    type Set is tagged private;
+ 
+    type Cursor is private;
+ 
+    Empty_Set : constant Set;
+ 
+    No_Element : constant Cursor;
+ 
+    function "=" (Left, Right : Set) return Boolean;
+ 
+    function Length (Container : Set) return Count_Type;
+ 
+    function Is_Empty (Container : Set) return Boolean;
+ 
+    procedure Clear (Container : in out Set);
+ 
+    function Element (Position : Cursor) return Element_Type;
+ 
+    procedure Query_Element
+      (Position : Cursor;
+       Process  : not null access procedure (Element : Element_Type));
+ 
+    --  TODO: resolve in atlanta
+    --   procedure Replace_Element
+    --     (Container : in out Set;
+    --      Position  : Cursor;
+    --      By        : Element_Type);
+ 
+    procedure Move (Target : in out Set; Source : in out Set);
+ 
+    procedure Insert
+      (Container : in out Set;
+       New_Item  : Element_Type;
+       Position  : out Cursor;
+       Inserted  : out Boolean);
+ 
+    procedure Insert  (Container : in out Set; New_Item : Element_Type);
+ 
+    procedure Include (Container : in out Set; New_Item : Element_Type);
+ 
+    procedure Replace (Container : in out Set; New_Item : Element_Type);
+ 
+    procedure Delete  (Container : in out Set; Item     : Element_Type);
+ 
+    procedure Exclude (Container : in out Set; Item     : Element_Type);
+ 
+    procedure Delete (Container : in out Set; Position  : in out Cursor);
+ 
+    procedure Union (Target : in out Set; Source : Set);
+ 
+    function Union (Left, Right : Set) return Set;
+ 
+    function "or" (Left, Right : Set) return Set renames Union;
+ 
+    procedure Intersection (Target : in out Set; Source : Set);
+ 
+    function Intersection (Left, Right : Set) return Set;
+ 
+    function "and" (Left, Right : Set) return Set renames Intersection;
+ 
+    procedure Difference (Target : in out Set; Source : Set);
+ 
+    function Difference (Left, Right : Set) return Set;
+ 
+    function "-" (Left, Right : Set) return Set renames Difference;
+ 
+    procedure Symmetric_Difference (Target : in out Set; Source : Set);
+ 
+    function Symmetric_Difference (Left, Right : Set) return Set;
+ 
+    function "xor" (Left, Right : Set) return Set
+      renames Symmetric_Difference;
+ 
+    function Overlap (Left, Right : Set) return Boolean;
+ 
+    function Is_Subset (Subset : Set; Of_Set : Set) return Boolean;
+ 
+    function Contains (Container : Set; Item : Element_Type) return Boolean;
+ 
+    function Find
+      (Container : Set;
+       Item      : Element_Type) return Cursor;
+ 
+    function Capacity (Container : Set) return Count_Type;
+ 
+    procedure Reserve_Capacity
+      (Container : in out Set;
+       Capacity  : Count_Type);
+ 
+    function First (Container : Set) return Cursor;
+ 
+    function Next (Position : Cursor) return Cursor;
+ 
+    procedure Next (Position : in out Cursor);
+ 
+    function Has_Element (Position : Cursor) return Boolean;
+ 
+    function Equivalent_Keys (Left, Right : Cursor) return Boolean;
+ 
+    function Equivalent_Keys
+      (Left  : Cursor;
+       Right : Element_Type) return Boolean;
+ 
+    function Equivalent_Keys
+      (Left  : Element_Type;
+       Right : Cursor) return Boolean;
+ 
+    procedure Iterate
+      (Container : Set;
+       Process   : not null access procedure (Position : Cursor));
+ 
+    generic
+       type Key_Type (<>) is limited private;
+ 
+       with function Key (Element : Element_Type) return Key_Type;
+ 
+       with function Hash (Key : Key_Type) return Hash_Type;
+ 
+       with function Equivalent_Keys
+         (Key     : Key_Type;
+          Element : Element_Type) return Boolean;
+ 
+    package Generic_Keys is
+ 
+       function Contains (Container : Set; Key : Key_Type) return Boolean;
+ 
+       function Find (Container : Set; Key : Key_Type) return Cursor;
+ 
+       function Key (Position : Cursor) return Key_Type;
+ 
+       function Element (Container : Set; Key : Key_Type) return Element_Type;
+ 
+       --  TODO: resolve in atlanta
+       --      procedure Replace
+       --        (Container : in out Set;
+       --         Key       : Key_Type;
+       --         New_Item  : Element_Type);
+ 
+       procedure Delete (Container : in out Set; Key : Key_Type);
+ 
+       procedure Exclude (Container : in out Set; Key : Key_Type);
+ 
+       --  TODO: resolve name in atlanta: ???
+       procedure Checked_Update_Element
+         (Container : in out Set;
+          Position  : Cursor;
+          Process   : not null access
+                        procedure (Element : in out Element_Type));
+ 
+       function Equivalent_Keys
+         (Left  : Cursor;
+          Right : Key_Type) return Boolean;
+ 
+       function Equivalent_Keys
+         (Left  : Key_Type;
+          Right : Cursor) return Boolean;
+ 
+    end Generic_Keys;
+ 
+ private
+ 
+    type Node_Type;
+    type Node_Access is access Node_Type;
+ 
+    package HT_Types is
+      new Hash_Tables.Generic_Hash_Table_Types (Node_Access);
+ 
+    use HT_Types;
+ 
+    type Set is new Hash_Table_Type with null record;
+ 
+    procedure Adjust (Container : in out Set);
+ 
+    procedure Finalize (Container : in out Set);
+ 
+    type Set_Access is access constant Set;
+    for Set_Access'Storage_Size use 0;
+ 
+    type Cursor is record
+       Container : Set_Access;
+       Node      : Node_Access;
+    end record;
+ 
+    No_Element : constant Cursor := (Container => null, Node => null);
+ 
+    use Ada.Streams;
+ 
+    procedure Write
+      (Stream    : access Root_Stream_Type'Class;
+       Container : Set);
+ 
+    for Set'Write use Write;
+ 
+    procedure Read
+      (Stream    : access Root_Stream_Type'Class;
+       Container : out Set);
+ 
+    for Set'Read use Read;
+ 
+    Empty_Set : constant Set := (Hash_Table_Type with null record);
+ 
+ end Ada.Containers.Hashed_Sets;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-cohata.ads gcc-4.0.0/gcc/ada/a-cohata.ads
*** gcc-3.4.3/gcc/ada/a-cohata.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-cohata.ads	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,35 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                        ADA.CONTAINERS.HASH_TABLES                        --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ -- This specification is adapted from the Ada Reference Manual for use with --
+ -- GNAT.  In accordance with the copyright of that document, you can freely --
+ -- copy and modify this specification,  provided that if you redistribute a --
+ -- modified version,  any changes that you have made are clearly indicated. --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Finalization;
+ 
+ package Ada.Containers.Hash_Tables is
+ pragma Preelaborate;
+ 
+    generic
+       type Node_Access is private;
+ 
+    package Generic_Hash_Table_Types is
+       type Buckets_Type is array (Hash_Type range <>) of Node_Access;
+ 
+       type Buckets_Access is access Buckets_Type;
+ 
+       type Hash_Table_Type is new Ada.Finalization.Controlled with record
+          Buckets : Buckets_Access;
+          Length  : Count_Type := 0;
+       end record;
+    end Generic_Hash_Table_Types;
+ 
+ end Ada.Containers.Hash_Tables;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-coinve.adb gcc-4.0.0/gcc/ada/a-coinve.adb
*** gcc-3.4.3/gcc/ada/a-coinve.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-coinve.adb	Wed Feb  9 11:14:39 2005
***************
*** 0 ****
--- 1,2171 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                    ADA.CONTAINERS.INDEFINITE_VECTORS                     --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit has originally being developed by Matthew J Heaney.            --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Containers.Generic_Array_Sort;
+ with Ada.Unchecked_Deallocation;
+ with System;  use type System.Address;
+ 
+ package body Ada.Containers.Indefinite_Vectors is
+ 
+ 
+    type Int is range System.Min_Int .. System.Max_Int;
+ 
+    procedure Free is
+       new Ada.Unchecked_Deallocation (Elements_Type, Elements_Access);
+ 
+    procedure Free is
+       new Ada.Unchecked_Deallocation (Element_Type, Element_Access);
+ 
+ 
+    procedure Adjust (Container : in out Vector) is
+    begin
+ 
+       if Container.Elements = null then
+          return;
+       end if;
+ 
+       if Container.Elements'Length = 0
+         or else Container.Last < Index_Type'First
+       then
+          Container.Elements := null;
+          return;
+       end if;
+ 
+       declare
+          E : Elements_Type renames Container.Elements.all;
+          L : constant Index_Type := Container.Last;
+       begin
+ 
+          Container.Elements := null;
+          Container.Last := Index_Type'Pred (Index_Type'First);
+ 
+          Container.Elements := new Elements_Type (Index_Type'First .. L);
+ 
+          for I in Container.Elements'Range loop
+ 
+             if E (I) /= null then
+                Container.Elements (I) := new Element_Type'(E (I).all);
+             end if;
+ 
+             Container.Last := I;
+ 
+          end loop;
+ 
+       end;
+ 
+    end Adjust;
+ 
+ 
+    procedure Finalize (Container : in out Vector) is
+ 
+       E : Elements_Access := Container.Elements;
+       L : constant Index_Type'Base := Container.Last;
+ 
+    begin
+ 
+       Container.Elements := null;
+       Container.Last := Index_Type'Pred (Index_Type'First);
+ 
+       for I in Index_Type'First .. L loop
+          Free (E (I));
+       end loop;
+ 
+       Free (E);
+ 
+    end Finalize;
+ 
+ 
+    procedure Write
+      (Stream    : access Root_Stream_Type'Class;
+       Container : in     Vector) is
+ 
+       N : constant Count_Type := Length (Container);
+ 
+    begin
+ 
+       Count_Type'Base'Write (Stream, N);
+ 
+       if N = 0 then
+          return;
+       end if;
+ 
+       declare
+          E : Elements_Type renames Container.Elements.all;
+       begin
+          for I in Index_Type'First .. Container.Last loop
+ 
+             --  There's another way to do this.  Instead a separate
+             --  Boolean for each element, you could write a Boolean
+             --  followed by a count of how many nulls or non-nulls
+             --  follow in the array.  Alternately you could use a
+             --  signed integer, and use the sign as the indicator
+             --  or null-ness.
+ 
+             if E (I) = null then
+                Boolean'Write (Stream, False);
+             else
+                Boolean'Write (Stream, True);
+                Element_Type'Output (Stream, E (I).all);
+             end if;
+ 
+          end loop;
+       end;
+ 
+    end Write;
+ 
+ 
+    procedure Read
+      (Stream    : access Root_Stream_Type'Class;
+       Container :    out Vector) is
+ 
+       Length : Count_Type'Base;
+       Last   : Index_Type'Base := Index_Type'Pred (Index_Type'First);
+ 
+       B : Boolean;
+ 
+    begin
+ 
+       Clear (Container);
+ 
+       Count_Type'Base'Read (Stream, Length);
+ 
+       if Length > Capacity (Container) then
+          Reserve_Capacity (Container, Capacity => Length);
+       end if;
+ 
+       for I in Count_Type range 1 .. Length loop
+ 
+          Last := Index_Type'Succ (Last);
+ 
+          Boolean'Read (Stream, B);
+ 
+          if B then
+             Container.Elements (Last) :=
+               new Element_Type'(Element_Type'Input (Stream));
+          end if;
+ 
+          Container.Last := Last;
+ 
+       end loop;
+ 
+    end Read;
+ 
+ 
+    function To_Vector (Length : Count_Type) return Vector is
+    begin
+ 
+       if Length = 0 then
+          return Empty_Vector;
+       end if;
+ 
+       declare
+ 
+          First : constant Int := Int (Index_Type'First);
+ 
+          Last_As_Int : constant Int'Base :=
+            First + Int (Length) - 1;
+ 
+          Last : constant Index_Type :=
+            Index_Type (Last_As_Int);
+ 
+          Elements : constant Elements_Access :=
+            new Elements_Type (Index_Type'First .. Last);
+ 
+       begin
+ 
+          return (Controlled with Elements, Last);
+ 
+       end;
+ 
+    end To_Vector;
+ 
+ 
+ 
+    function To_Vector
+      (New_Item : Element_Type;
+       Length   : Count_Type) return Vector is
+ 
+    begin
+ 
+       if Length = 0 then
+          return Empty_Vector;
+       end if;
+ 
+       declare
+ 
+          First : constant Int := Int (Index_Type'First);
+ 
+          Last_As_Int : constant Int'Base :=
+            First + Int (Length) - 1;
+ 
+          Last : constant Index_Type :=
+            Index_Type (Last_As_Int);
+ 
+          Elements : Elements_Access :=
+            new Elements_Type (Index_Type'First .. Last);
+ 
+       begin
+ 
+          for I in Elements'Range loop
+ 
+             begin
+                Elements (I) := new Element_Type'(New_Item);
+             exception
+                when others =>
+                   for J in Index_Type'First .. Index_Type'Pred (I) loop
+                      Free (Elements (J));
+                   end loop;
+ 
+                   Free (Elements);
+                   raise;
+             end;
+ 
+          end loop;
+ 
+          return (Controlled with Elements, Last);
+ 
+       end;
+ 
+    end To_Vector;
+ 
+ 
+    function "=" (Left, Right : Vector) return Boolean is
+    begin
+ 
+       if Left'Address = Right'Address then
+          return True;
+       end if;
+ 
+       if Left.Last /= Right.Last then
+          return False;
+       end if;
+ 
+       for I in Index_Type'First .. Left.Last loop
+ 
+          --  NOTE:
+          --  I think it's a bounded error to read or otherwise manipulate
+          --  an "empty" element, which here means that it has the value
+          --  null.  If it's a bounded error then an exception might
+          --  propagate, or it might not.  We take advantage of that
+          --  permission here to allow empty elements to be compared.
+          --
+          --  Whether this is the right decision I'm not really sure.  If
+          --  you have a contrary argument then let me know.
+          --  END NOTE.
+ 
+          if Left.Elements (I) = null then
+ 
+             if Right.Elements (I) /= null then
+                return False;
+             end if;
+ 
+          elsif Right.Elements (I) = null then
+ 
+             return False;
+ 
+          elsif Left.Elements (I).all /= Right.Elements (I).all then
+ 
+             return False;
+ 
+          end if;
+ 
+       end loop;
+ 
+       return True;
+ 
+    end "=";
+ 
+ 
+    function Length (Container : Vector) return Count_Type is
+ 
+       L : constant Int := Int (Container.Last);
+       F : constant Int := Int (Index_Type'First);
+ 
+       N : constant Int'Base := L - F + 1;
+    begin
+       return Count_Type (N);
+    end Length;
+ 
+ 
+    function Is_Empty (Container : Vector) return Boolean is
+    begin
+       return Container.Last < Index_Type'First;
+    end Is_Empty;
+ 
+ 
+    procedure Set_Length
+      (Container : in out Vector;
+       Length    : in     Count_Type) is
+ 
+       N : constant Count_Type := Indefinite_Vectors.Length (Container);
+ 
+    begin
+ 
+       if Length = N then
+          return;
+       end if;
+ 
+       if Length = 0 then
+          Clear (Container);
+          return;
+       end if;
+ 
+       declare
+          Last_As_Int : constant Int'Base :=
+            Int (Index_Type'First) + Int (Length) - 1;
+ 
+          Last : constant Index_Type :=
+            Index_Type (Last_As_Int);
+       begin
+ 
+          if Length > N then
+ 
+             if Length > Capacity (Container) then
+                Reserve_Capacity (Container, Capacity => Length);
+             end if;
+ 
+             Container.Last := Last;
+ 
+             return;
+ 
+          end if;
+ 
+          for I in reverse Index_Type'Succ (Last) .. Container.Last loop
+ 
+             declare
+                X : Element_Access := Container.Elements (I);
+             begin
+                Container.Elements (I) := null;
+                Container.Last := Index_Type'Pred (Container.Last);
+                Free (X);
+             end;
+ 
+          end loop;
+ 
+       end;
+ 
+    end Set_Length;
+ 
+ 
+    procedure Clear (Container : in out Vector) is
+    begin
+ 
+       for I in reverse Index_Type'First .. Container.Last loop
+ 
+          declare
+             X : Element_Access := Container.Elements (I);
+          begin
+             Container.Elements (I) := null;
+             Container.Last := Index_Type'Pred (I);
+             Free (X);
+          end;
+ 
+       end loop;
+ 
+    end Clear;
+ 
+ 
+    procedure Append (Container : in out Vector;
+                      New_Item  : in     Element_Type;
+                      Count     : in     Count_Type := 1) is
+    begin
+       if Count = 0 then
+          return;
+       end if;
+ 
+       Insert
+         (Container,
+          Index_Type'Succ (Container.Last),
+          New_Item,
+          Count);
+    end Append;
+ 
+ 
+    procedure Insert
+      (Container : in out Vector;
+       Before    : in     Extended_Index;
+       New_Item  : in     Element_Type;
+       Count     : in     Count_Type := 1) is
+ 
+       Old_Last_As_Int : constant Int := Int (Container.Last);
+ 
+       N : constant Int := Int (Count);
+ 
+       New_Last_As_Int : constant Int'Base := Old_Last_As_Int + N;
+ 
+       New_Last : constant Extended_Index := Extended_Index (New_Last_As_Int);
+ 
+       Index : Index_Type;
+ 
+       Dst_Last : Index_Type;
+       Dst      : Elements_Access;
+ 
+    begin
+ 
+       if Count = 0 then
+          return;
+       end if;
+ 
+       declare
+          subtype Before_Subtype is Index_Type'Base range
+            Index_Type'First .. Index_Type'Succ (Container.Last);
+ 
+          Old_First : constant Before_Subtype := Before;
+ 
+          Old_First_As_Int : constant Int := Int (Old_First);
+ 
+          New_First_As_Int : constant Int'Base := Old_First_As_Int + N;
+       begin
+          Index := Index_Type (New_First_As_Int);
+       end;
+ 
+       if Container.Elements = null then
+ 
+          declare
+             subtype Elements_Subtype is
+               Elements_Type (Index_Type'First .. New_Last);
+          begin
+             Container.Elements := new Elements_Subtype;
+             Container.Last := Index_Type'Pred (Index_Type'First);
+ 
+             for I in Container.Elements'Range loop
+                Container.Elements (I) := new Element_Type'(New_Item);
+                Container.Last := I;
+             end loop;
+          end;
+ 
+          return;
+ 
+       end if;
+ 
+       if New_Last <= Container.Elements'Last then
+ 
+          declare
+             E : Elements_Type renames Container.Elements.all;
+          begin
+             E (Index .. New_Last) := E (Before .. Container.Last);
+             Container.Last := New_Last;
+ 
+             --  NOTE:
+             --  Now we do the allocation.  If it fails, we can propagate the
+             --  exception and invariants are more or less satisfied.  The
+             --  issue is that we have some slots still null, and the client
+             --  has no way of detecting whether the slot is null (unless we
+             --  give him a way).
+             --
+             --  Another way is to allocate a subarray on the stack, do the
+             --  allocation into that array, and if that success then do
+             --  the insertion proper.  The issue there is that you have to
+             --  allocate the subarray on the stack, and that may fail if the
+             --  subarray is long.
+             --
+             --  Or we could try to roll-back the changes: deallocate the
+             --  elements we have successfully deallocated, and then copy
+             --  the elements ptrs back to their original posns.
+             --  END NOTE.
+ 
+             --  NOTE: I have written the loop manually here.  I could
+             --  have done it this way too:
+             --    E (Before .. Index_Type'Pred (Index)) :=
+             --      (others => new Element_Type'New_Item);
+             --  END NOTE.
+ 
+             for I in Before .. Index_Type'Pred (Index) loop
+ 
+                begin
+                   E (I) := new Element_Type'(New_Item);
+                exception
+                   when others =>
+                      E (I .. Index_Type'Pred (Index)) := (others => null);
+                      raise;
+                end;
+ 
+             end loop;
+          end;
+ 
+          return;
+ 
+       end if;
+ 
+       declare
+ 
+          First : constant Int := Int (Index_Type'First);
+ 
+          New_Size : constant Int'Base :=
+            New_Last_As_Int - First + 1;
+ 
+          Max_Size : constant Int'Base :=
+            Int (Index_Type'Last) - First + 1;
+ 
+          Size, Dst_Last_As_Int : Int'Base;
+ 
+       begin
+ 
+          if New_Size >= Max_Size / 2 then
+ 
+             Dst_Last := Index_Type'Last;
+ 
+          else
+ 
+             Size := Container.Elements'Length;
+ 
+             if Size = 0 then
+                Size := 1;
+             end if;
+ 
+             while Size < New_Size loop
+                Size := 2 * Size;
+             end loop;
+ 
+             Dst_Last_As_Int := First + Size - 1;
+             Dst_Last := Index_Type (Dst_Last_As_Int);
+ 
+          end if;
+ 
+       end;
+ 
+       Dst := new Elements_Type (Index_Type'First .. Dst_Last);
+ 
+       declare
+          Src : Elements_Type renames Container.Elements.all;
+       begin
+          Dst (Index_Type'First .. Index_Type'Pred (Before)) :=
+            Src (Index_Type'First .. Index_Type'Pred (Before));
+ 
+          Dst (Index .. New_Last) := Src (Before .. Container.Last);
+       end;
+ 
+       declare
+          X : Elements_Access := Container.Elements;
+       begin
+          Container.Elements := Dst;
+          Container.Last := New_Last;
+ 
+          Free (X);
+       end;
+ 
+       --  NOTE:
+       --  Now do the allocation.  If the allocation fails,
+       --  then the worst thing is that we have a few null slots.
+       --  Our invariants are otherwise satisfied.
+       --  END NOTE.
+ 
+       for I in Before .. Index_Type'Pred (Index) loop
+          Dst (I) := new Element_Type'(New_Item);
+       end loop;
+ 
+    end Insert;
+ 
+ 
+    procedure Insert_Space
+      (Container : in out Vector;
+       Before    : in     Extended_Index;
+       Count     : in     Count_Type := 1) is
+ 
+       Old_Last_As_Int : constant Int := Int (Container.Last);
+ 
+       N : constant Int := Int (Count);
+ 
+       New_Last_As_Int : constant Int'Base := Old_Last_As_Int + N;
+ 
+       New_Last : constant Extended_Index := Extended_Index (New_Last_As_Int);
+ 
+       Index : Index_Type;
+ 
+       Dst_Last : Index_Type;
+       Dst      : Elements_Access;
+ 
+    begin
+ 
+       if Count = 0 then
+          return;
+       end if;
+ 
+       declare
+          subtype Before_Subtype is Index_Type'Base range
+            Index_Type'First .. Index_Type'Succ (Container.Last);
+ 
+          Old_First : constant Before_Subtype := Before;
+ 
+          Old_First_As_Int : constant Int := Int (Old_First);
+ 
+          New_First_As_Int : constant Int'Base := Old_First_As_Int + N;
+       begin
+          Index := Index_Type (New_First_As_Int);
+       end;
+ 
+       if Container.Elements = null then
+ 
+          declare
+             subtype Elements_Subtype is
+               Elements_Type (Index_Type'First .. New_Last);
+          begin
+             Container.Elements := new Elements_Subtype;
+             Container.Last := New_Last;
+          end;
+ 
+          return;
+ 
+       end if;
+ 
+       if New_Last <= Container.Elements'Last then
+ 
+          declare
+             E : Elements_Type renames Container.Elements.all;
+          begin
+             E (Index .. New_Last) := E (Before .. Container.Last);
+             E (Before .. Index_Type'Pred (Index)) := (others => null);
+ 
+             Container.Last := New_Last;
+          end;
+ 
+          return;
+ 
+       end if;
+ 
+       declare
+ 
+          First : constant Int := Int (Index_Type'First);
+ 
+          New_Size : constant Int'Base :=
+            Int (New_Last_As_Int) - First + 1;
+ 
+          Max_Size : constant Int'Base :=
+            Int (Index_Type'Last) - First + 1;
+ 
+          Size, Dst_Last_As_Int : Int'Base;
+ 
+       begin
+ 
+          if New_Size >= Max_Size / 2 then
+ 
+             Dst_Last := Index_Type'Last;
+ 
+          else
+ 
+             Size := Container.Elements'Length;
+ 
+             if Size = 0 then
+                Size := 1;
+             end if;
+ 
+             while Size < New_Size loop
+                Size := 2 * Size;
+             end loop;
+ 
+             Dst_Last_As_Int := First + Size - 1;
+             Dst_Last := Index_Type (Dst_Last_As_Int);
+ 
+          end if;
+ 
+       end;
+ 
+       Dst := new Elements_Type (Index_Type'First .. Dst_Last);
+ 
+       declare
+          Src : Elements_Type renames Container.Elements.all;
+       begin
+          Dst (Index_Type'First .. Index_Type'Pred (Before)) :=
+            Src (Index_Type'First .. Index_Type'Pred (Before));
+ 
+          Dst (Index .. New_Last) := Src (Before .. Container.Last);
+       end;
+ 
+       declare
+          X : Elements_Access := Container.Elements;
+       begin
+          Container.Elements := Dst;
+          Container.Last := New_Last;
+ 
+          Free (X);
+       end;
+ 
+    end Insert_Space;
+ 
+ 
+    procedure Delete_First (Container : in out Vector;
+                            Count     : in     Count_Type := 1) is
+    begin
+ 
+       if Count = 0 then
+          return;
+       end if;
+ 
+       if Count >= Length (Container) then
+          Clear (Container);
+          return;
+       end if;
+ 
+       Delete (Container, Index_Type'First, Count);
+ 
+    end Delete_First;
+ 
+ 
+    procedure Delete_Last (Container : in out Vector;
+                           Count     : in     Count_Type := 1) is
+ 
+       Index : Int'Base;
+ 
+    begin
+ 
+       if Count = 0 then
+          return;
+       end if;
+ 
+       if Count >= Length (Container) then
+          Clear (Container);
+          return;
+       end if;
+ 
+       Index := Int'Base (Container.Last) - Int'Base (Count) + 1;
+ 
+       Delete (Container, Index_Type'Base (Index), Count);
+ 
+    end Delete_Last;
+ 
+ 
+    procedure Delete
+      (Container : in out Vector;
+       Index     : in     Extended_Index;  --  TODO: verify in Atlanta
+       Count     : in     Count_Type := 1) is
+ 
+    begin
+ 
+       if Count = 0 then
+          return;
+       end if;
+ 
+       declare
+ 
+          subtype I_Subtype is Index_Type'Base range
+            Index_Type'First .. Container.Last;
+ 
+          I : constant I_Subtype := Index;
+          I_As_Int : constant Int := Int (I);
+ 
+          Old_Last_As_Int : constant Int := Int (Container.Last);
+ 
+          Count1 : constant Int'Base := Int (Count);
+          Count2 : constant Int'Base := Old_Last_As_Int - I_As_Int + 1;
+ 
+          N : constant Int'Base := Int'Min (Count1, Count2);
+ 
+          J_As_Int : constant Int'Base := I_As_Int + N;
+          J : constant Index_Type'Base := Index_Type'Base (J_As_Int);
+ 
+          E : Elements_Type renames Container.Elements.all;
+ 
+          New_Last_As_Int : constant Int'Base := Old_Last_As_Int - N;
+ 
+          New_Last : constant Extended_Index :=
+            Extended_Index (New_Last_As_Int);
+ 
+       begin
+ 
+          for K in I .. Index_Type'Pred (J) loop
+ 
+             begin
+                Free (E (K));
+             exception
+                when others =>
+                   E (K) := null;
+                   raise;
+             end;
+ 
+          end loop;
+ 
+          E (I .. New_Last) := E (J .. Container.Last);
+          Container.Last := New_Last;
+ 
+       end;
+ 
+    end Delete;
+ 
+ 
+    function Capacity (Container : Vector) return Count_Type is
+    begin
+       if Container.Elements = null then
+          return 0;
+       end if;
+ 
+       return Container.Elements'Length;
+    end Capacity;
+ 
+ 
+    procedure Reserve_Capacity (Container : in out Vector;
+                                Capacity  : in     Count_Type) is
+ 
+       N : constant Count_Type := Length (Container);
+ 
+    begin
+ 
+       if Capacity = 0 then
+ 
+          if N = 0 then
+ 
+             declare
+                X : Elements_Access := Container.Elements;
+             begin
+                Container.Elements := null;
+                Free (X);
+             end;
+ 
+          elsif N < Container.Elements'Length then
+ 
+             declare
+                subtype Array_Index_Subtype is Index_Type'Base range
+                  Index_Type'First .. Container.Last;
+ 
+                Src : Elements_Type renames
+                  Container.Elements (Array_Index_Subtype);
+ 
+                subtype Array_Subtype is
+                  Elements_Type (Array_Index_Subtype);
+ 
+                X : Elements_Access := Container.Elements;
+             begin
+                Container.Elements := new Array_Subtype'(Src);
+                Free (X);
+             end;
+ 
+          end if;
+ 
+          return;
+ 
+       end if;
+ 
+       if Container.Elements = null then
+ 
+          declare
+             Last_As_Int : constant Int'Base :=
+               Int (Index_Type'First) + Int (Capacity) - 1;
+ 
+             Last : constant Index_Type :=
+               Index_Type (Last_As_Int);
+ 
+             subtype Array_Subtype is
+               Elements_Type (Index_Type'First .. Last);
+          begin
+             Container.Elements := new Array_Subtype;
+          end;
+ 
+          return;
+ 
+       end if;
+ 
+       if Capacity <= N then
+ 
+          if N < Container.Elements'Length then
+ 
+             declare
+                subtype Array_Index_Subtype is Index_Type'Base range
+                  Index_Type'First .. Container.Last;
+ 
+                Src : Elements_Type renames
+                  Container.Elements (Array_Index_Subtype);
+ 
+                subtype Array_Subtype is
+                  Elements_Type (Array_Index_Subtype);
+ 
+                X : Elements_Access := Container.Elements;
+             begin
+                Container.Elements := new Array_Subtype'(Src);
+                Free (X);
+             end;
+ 
+          end if;
+ 
+          return;
+ 
+       end if;
+ 
+       if Capacity = Container.Elements'Length then
+          return;
+       end if;
+ 
+       declare
+          Last_As_Int : constant Int'Base :=
+            Int (Index_Type'First) + Int (Capacity) - 1;
+ 
+          Last : constant Index_Type :=
+            Index_Type (Last_As_Int);
+ 
+          subtype Array_Subtype is
+            Elements_Type (Index_Type'First .. Last);
+ 
+          X : Elements_Access := Container.Elements;
+       begin
+          Container.Elements := new Array_Subtype;
+ 
+          declare
+             Src : Elements_Type renames
+               X (Index_Type'First .. Container.Last);
+ 
+             Tgt : Elements_Type renames
+               Container.Elements (Index_Type'First .. Container.Last);
+          begin
+             Tgt := Src;
+          end;
+ 
+          Free (X);
+       end;
+ 
+    end Reserve_Capacity;
+ 
+ 
+    function First_Index (Container : Vector) return Index_Type is
+       pragma Warnings (Off, Container);
+    begin
+       return Index_Type'First;
+    end First_Index;
+ 
+ 
+    function First_Element (Container : Vector) return Element_Type is
+    begin
+       return Element (Container, Index_Type'First);
+    end First_Element;
+ 
+ 
+    function Last_Index (Container : Vector) return Extended_Index is
+    begin
+       return Container.Last;
+    end Last_Index;
+ 
+ 
+    function Last_Element (Container : Vector) return Element_Type is
+    begin
+       return Element (Container, Container.Last);
+    end Last_Element;
+ 
+ 
+    function Element (Container : Vector;
+                      Index     : Index_Type)
+       return Element_Type is
+ 
+       subtype T is Index_Type'Base range
+         Index_Type'First .. Container.Last;
+    begin
+       return Container.Elements (T'(Index)).all;
+    end Element;
+ 
+ 
+    procedure Replace_Element (Container : in Vector;
+                               Index     : in Index_Type;
+                               By        : in Element_Type) is
+ 
+       subtype T is Index_Type'Base range
+         Index_Type'First .. Container.Last;
+ 
+       X : Element_Access := Container.Elements (T'(Index));
+    begin
+       Container.Elements (T'(Index)) := new Element_Type'(By);
+       Free (X);
+    end Replace_Element;
+ 
+ 
+    procedure Generic_Sort (Container : in Vector) is
+ 
+       function Is_Less (L, R : Element_Access) return Boolean;
+       pragma Inline (Is_Less);
+ 
+       function Is_Less (L, R : Element_Access) return Boolean is
+       begin
+          if L = null then
+             return R /= null;
+          elsif R = null then
+             return False;
+          else
+             return L.all < R.all;
+          end if;
+       end Is_Less;
+ 
+       procedure Sort is
+          new Generic_Array_Sort
+           (Index_Type,
+            Element_Access,
+            Elements_Type,
+            "<" => Is_Less);
+ 
+    begin
+ 
+       if Container.Elements = null then
+          return;
+       end if;
+ 
+       Sort (Container.Elements (Index_Type'First .. Container.Last));
+ 
+    end Generic_Sort;
+ 
+ 
+    function Find_Index
+      (Container : Vector;
+       Item      : Element_Type;
+       Index     : Index_Type := Index_Type'First)
+      return Extended_Index is
+ 
+    begin
+ 
+       for I in Index .. Container.Last loop
+          if Container.Elements (I) /= null
+            and then Container.Elements (I).all = Item
+          then
+             return I;
+          end if;
+       end loop;
+ 
+       return No_Index;
+ 
+    end Find_Index;
+ 
+ 
+    function Reverse_Find_Index
+      (Container : Vector;
+       Item      : Element_Type;
+       Index     : Index_Type := Index_Type'Last)
+      return Extended_Index is
+ 
+       Last : Index_Type'Base;
+ 
+    begin
+ 
+       if Index > Container.Last then
+          Last := Container.Last;
+       else
+          Last := Index;
+       end if;
+ 
+       for I in reverse Index_Type'First .. Last loop
+          if Container.Elements (I) /= null
+            and then Container.Elements (I).all = Item
+          then
+             return I;
+          end if;
+       end loop;
+ 
+       return No_Index;
+ 
+    end Reverse_Find_Index;
+ 
+ 
+    function Contains (Container : Vector;
+                       Item      : Element_Type) return Boolean is
+    begin
+       return Find_Index (Container, Item) /= No_Index;
+    end Contains;
+ 
+ 
+ 
+    procedure Assign
+      (Target : in out Vector;
+       Source : in     Vector) is
+ 
+       N : constant Count_Type := Length (Source);
+ 
+    begin
+ 
+       if Target'Address = Source'Address then
+          return;
+       end if;
+ 
+       Clear (Target);
+ 
+       if N = 0 then
+          return;
+       end if;
+ 
+       if N > Capacity (Target) then
+          Reserve_Capacity (Target, Capacity => N);
+       end if;
+ 
+       for I in Index_Type'First .. Source.Last loop
+ 
+          declare
+             EA : constant Element_Access := Source.Elements (I);
+          begin
+             if EA /= null then
+                Target.Elements (I) := new Element_Type'(EA.all);
+             end if;
+          end;
+ 
+          Target.Last := I;
+ 
+       end loop;
+ 
+    end Assign;
+ 
+ 
+    procedure Move
+      (Target : in out Vector;
+       Source : in out Vector) is
+ 
+       X : Elements_Access := Target.Elements;
+ 
+    begin
+ 
+       if Target'Address = Source'Address then
+          return;
+       end if;
+ 
+       if Target.Last >= Index_Type'First then
+          raise Constraint_Error;
+       end if;
+ 
+       Target.Elements := null;
+       Free (X);  --  shouldn't fail
+ 
+       Target.Elements := Source.Elements;
+       Target.Last := Source.Last;
+ 
+       Source.Elements := null;
+       Source.Last := Index_Type'Pred (Index_Type'First);
+ 
+    end Move;
+ 
+ 
+    procedure Query_Element
+      (Container : in Vector;
+       Index     : in Index_Type;
+       Process   : not null access procedure (Element : in Element_Type)) is
+ 
+       subtype T is Index_Type'Base range
+         Index_Type'First .. Container.Last;
+    begin
+       Process (Container.Elements (T'(Index)).all);
+    end Query_Element;
+ 
+ 
+    procedure Update_Element
+      (Container : in Vector;
+       Index     : in Index_Type;
+       Process   : not null access procedure (Element : in out Element_Type)) is
+ 
+       subtype T is Index_Type'Base range
+         Index_Type'First .. Container.Last;
+    begin
+       Process (Container.Elements (T'(Index)).all);
+    end Update_Element;
+ 
+ 
+    procedure Prepend (Container : in out Vector;
+                       New_Item  : in     Element_Type;
+                       Count     : in     Count_Type := 1) is
+    begin
+       Insert (Container,
+               Index_Type'First,
+               New_Item,
+               Count);
+    end Prepend;
+ 
+ 
+    procedure Swap
+      (Container : in Vector;
+       I, J      : in Index_Type) is
+ 
+       subtype T is Index_Type'Base range
+         Index_Type'First .. Container.Last;
+ 
+       EI : constant Element_Access := Container.Elements (T'(I));
+ 
+    begin
+ 
+       Container.Elements (T'(I)) := Container.Elements (T'(J));
+       Container.Elements (T'(J)) := EI;
+ 
+    end Swap;
+ 
+ 
+    function "&" (Left, Right : Vector) return Vector is
+ 
+       LN : constant Count_Type := Length (Left);
+       RN : constant Count_Type := Length (Right);
+ 
+    begin
+ 
+       if LN = 0 then
+ 
+          if RN = 0 then
+             return Empty_Vector;
+          end if;
+ 
+          declare
+             RE : Elements_Type renames
+               Right.Elements (Index_Type'First .. Right.Last);
+ 
+             Elements : Elements_Access :=
+               new Elements_Type (RE'Range);
+          begin
+             for I in Elements'Range loop
+                begin
+                   if RE (I) /= null then
+                      Elements (I) := new Element_Type'(RE (I).all);
+                   end if;
+                exception
+                   when others =>
+                      for J in Index_Type'First .. Index_Type'Pred (I) loop
+                         Free (Elements (J));
+                      end loop;
+ 
+                      Free (Elements);
+                      raise;
+                end;
+             end loop;
+ 
+             return (Controlled with Elements, Right.Last);
+          end;
+ 
+       end if;
+ 
+       if RN = 0 then
+ 
+          declare
+             LE : Elements_Type renames
+               Left.Elements (Index_Type'First .. Left.Last);
+ 
+             Elements : Elements_Access :=
+               new Elements_Type (LE'Range);
+          begin
+             for I in Elements'Range loop
+                begin
+                   if LE (I) /= null then
+                      Elements (I) := new Element_Type'(LE (I).all);
+                   end if;
+                exception
+                   when others =>
+                      for J in Index_Type'First .. Index_Type'Pred (I) loop
+                         Free (Elements (J));
+                      end loop;
+ 
+                      Free (Elements);
+                      raise;
+                end;
+             end loop;
+ 
+             return (Controlled with Elements, Left.Last);
+          end;
+ 
+       end if;
+ 
+       declare
+ 
+          Last_As_Int : constant Int'Base :=
+             Int (Index_Type'First) + Int (LN) + Int (RN) - 1;
+ 
+          Last : constant Index_Type := Index_Type (Last_As_Int);
+ 
+          LE : Elements_Type renames
+            Left.Elements (Index_Type'First .. Left.Last);
+ 
+          RE : Elements_Type renames
+            Right.Elements (Index_Type'First .. Right.Last);
+ 
+          Elements : Elements_Access :=
+            new Elements_Type (Index_Type'First .. Last);
+ 
+          I : Index_Type'Base := Index_Type'Pred (Index_Type'First);
+ 
+       begin
+ 
+          for LI in LE'Range loop
+ 
+             I := Index_Type'Succ (I);
+ 
+             begin
+                if LE (LI) /= null then
+                   Elements (I) := new Element_Type'(LE (LI).all);
+                end if;
+             exception
+                when others =>
+                   for J in Index_Type'First .. Index_Type'Pred (I) loop
+                      Free (Elements (J));
+                   end loop;
+ 
+                   Free (Elements);
+                   raise;
+             end;
+ 
+          end loop;
+ 
+          for RI in RE'Range loop
+ 
+             I := Index_Type'Succ (I);
+ 
+             begin
+                if RE (RI) /= null then
+                   Elements (I) := new Element_Type'(RE (RI).all);
+                end if;
+             exception
+                when others =>
+                   for J in Index_Type'First .. Index_Type'Pred (I) loop
+                      Free (Elements (J));
+                   end loop;
+ 
+                   Free (Elements);
+                   raise;
+             end;
+ 
+          end loop;
+ 
+          return (Controlled with Elements, Last);
+       end;
+ 
+    end "&";
+ 
+ 
+    function "&" (Left  : Vector;
+                  Right : Element_Type) return Vector is
+ 
+       LN : constant Count_Type := Length (Left);
+ 
+    begin
+ 
+       if LN = 0 then
+ 
+          declare
+             Elements : Elements_Access :=
+               new Elements_Type (Index_Type'First .. Index_Type'First);
+          begin
+ 
+             begin
+                Elements (Elements'First) := new Element_Type'(Right);
+             exception
+                when others =>
+                   Free (Elements);
+                   raise;
+             end;
+ 
+             return (Controlled with Elements, Index_Type'First);
+ 
+          end;
+ 
+       end if;
+ 
+       declare
+ 
+          Last_As_Int : constant Int'Base :=
+             Int (Index_Type'First) + Int (LN);
+ 
+          Last : constant Index_Type := Index_Type (Last_As_Int);
+ 
+          LE : Elements_Type renames
+            Left.Elements (Index_Type'First .. Left.Last);
+ 
+          Elements : Elements_Access :=
+            new Elements_Type (Index_Type'First .. Last);
+ 
+       begin
+ 
+          for I in LE'Range loop
+ 
+             begin
+                if LE (I) /= null then
+                   Elements (I) := new Element_Type'(LE (I).all);
+                end if;
+             exception
+                when others =>
+                   for J in Index_Type'First .. Index_Type'Pred (I) loop
+                      Free (Elements (J));
+                   end loop;
+ 
+                   Free (Elements);
+                   raise;
+             end;
+ 
+          end loop;
+ 
+          begin
+             Elements (Elements'Last) := new Element_Type'(Right);
+          exception
+             when others =>
+ 
+                declare
+                   subtype J_Subtype is Index_Type'Base range
+                     Index_Type'First .. Index_Type'Pred (Elements'Last);
+                begin
+                   for J in J_Subtype loop
+                      Free (Elements (J));
+                   end loop;
+                end;
+ 
+                Free (Elements);
+                raise;
+          end;
+ 
+          return (Controlled with Elements, Last);
+       end;
+ 
+    end "&";
+ 
+ 
+ 
+    function "&" (Left  : Element_Type;
+                  Right : Vector) return Vector is
+ 
+       RN : constant Count_Type := Length (Right);
+ 
+    begin
+ 
+       if RN = 0 then
+ 
+          declare
+             Elements : Elements_Access :=
+               new Elements_Type (Index_Type'First .. Index_Type'First);
+          begin
+ 
+             begin
+                Elements (Elements'First) := new Element_Type'(Left);
+             exception
+                when others =>
+                   Free (Elements);
+                   raise;
+             end;
+ 
+             return (Controlled with Elements, Index_Type'First);
+ 
+          end;
+ 
+       end if;
+ 
+       declare
+ 
+          Last_As_Int : constant Int'Base :=
+             Int (Index_Type'First) + Int (RN);
+ 
+          Last : constant Index_Type := Index_Type (Last_As_Int);
+ 
+          RE : Elements_Type renames
+            Right.Elements (Index_Type'First .. Right.Last);
+ 
+          Elements : Elements_Access :=
+            new Elements_Type (Index_Type'First .. Last);
+ 
+          I : Index_Type'Base := Index_Type'First;
+ 
+       begin
+ 
+          begin
+             Elements (I) := new Element_Type'(Left);
+          exception
+             when others =>
+                Free (Elements);
+                raise;
+          end;
+ 
+          for RI in RE'Range loop
+ 
+             I := Index_Type'Succ (I);
+ 
+             begin
+                if RE (RI) /= null then
+                   Elements (I) := new Element_Type'(RE (RI).all);
+                end if;
+             exception
+                when others =>
+                   for J in Index_Type'First .. Index_Type'Pred (I) loop
+                      Free (Elements (J));
+                   end loop;
+ 
+                   Free (Elements);
+                   raise;
+             end;
+ 
+          end loop;
+ 
+          return (Controlled with Elements, Last);
+       end;
+ 
+    end "&";
+ 
+ 
+    function "&" (Left, Right  : Element_Type) return Vector is
+ 
+       subtype IT is Index_Type'Base range
+         Index_Type'First .. Index_Type'Succ (Index_Type'First);
+ 
+       Elements : Elements_Access := new Elements_Type (IT);
+ 
+    begin
+ 
+       begin
+          Elements (Elements'First) := new Element_Type'(Left);
+       exception
+          when others =>
+             Free (Elements);
+             raise;
+       end;
+ 
+       begin
+          Elements (Elements'Last) := new Element_Type'(Right);
+       exception
+          when others =>
+             Free (Elements (Elements'First));
+             Free (Elements);
+             raise;
+       end;
+ 
+       return (Controlled with Elements, Elements'Last);
+ 
+    end "&";
+ 
+ 
+    function To_Cursor (Container : Vector;
+                        Index     : Extended_Index)
+       return Cursor is
+    begin
+       if Index not in Index_Type'First .. Container.Last then
+          return No_Element;
+       end if;
+ 
+       return Cursor'(Container'Unchecked_Access, Index);
+    end To_Cursor;
+ 
+ 
+    function To_Index (Position : Cursor) return Extended_Index is
+    begin
+       if Position.Container = null then
+          return No_Index;
+       end if;
+ 
+       if Position.Index <= Position.Container.Last then
+          return Position.Index;
+       end if;
+ 
+       return No_Index;
+    end To_Index;
+ 
+ 
+    function Element (Position : Cursor) return Element_Type is
+    begin
+       return Element (Position.Container.all, Position.Index);
+    end Element;
+ 
+ 
+    function Next (Position : Cursor) return Cursor is
+    begin
+ 
+       if Position.Container = null then
+          return No_Element;
+       end if;
+ 
+       if Position.Index < Position.Container.Last then
+          return (Position.Container, Index_Type'Succ (Position.Index));
+       end if;
+ 
+       return No_Element;
+ 
+    end Next;
+ 
+ 
+    function Previous (Position : Cursor) return Cursor is
+    begin
+ 
+       if Position.Container = null then
+          return No_Element;
+       end if;
+ 
+       if Position.Index > Index_Type'First then
+          return (Position.Container, Index_Type'Pred (Position.Index));
+       end if;
+ 
+       return No_Element;
+ 
+    end Previous;
+ 
+ 
+    procedure Next (Position : in out Cursor) is
+    begin
+ 
+       if Position.Container = null then
+          return;
+       end if;
+ 
+       if Position.Index < Position.Container.Last then
+          Position.Index := Index_Type'Succ (Position.Index);
+       else
+          Position := No_Element;
+       end if;
+ 
+    end Next;
+ 
+ 
+    procedure Previous (Position : in out Cursor) is
+    begin
+ 
+       if Position.Container = null then
+          return;
+       end if;
+ 
+       if Position.Index > Index_Type'First then
+          Position.Index := Index_Type'Pred (Position.Index);
+       else
+          Position := No_Element;
+       end if;
+ 
+    end Previous;
+ 
+ 
+    function Has_Element (Position : Cursor) return Boolean is
+    begin
+ 
+       if Position.Container = null then
+          return False;
+       end if;
+ 
+       return Position.Index <= Position.Container.Last;
+ 
+    end Has_Element;
+ 
+ 
+    procedure Iterate
+      (Container : in Vector;
+       Process   : not null access procedure (Position : in Cursor)) is
+    begin
+ 
+       for I in Index_Type'First .. Container.Last loop
+          Process (Cursor'(Container'Unchecked_Access, I));
+       end loop;
+ 
+    end Iterate;
+ 
+ 
+    procedure Reverse_Iterate
+      (Container : in Vector;
+       Process   : not null access procedure (Position : in Cursor)) is
+    begin
+ 
+       for I in reverse Index_Type'First .. Container.Last loop
+          Process (Cursor'(Container'Unchecked_Access, I));
+       end loop;
+ 
+    end Reverse_Iterate;
+ 
+ 
+    procedure Query_Element
+      (Position : in Cursor;
+       Process  : not null access procedure (Element : in Element_Type)) is
+ 
+       C : Vector renames Position.Container.all;
+       E : Elements_Type renames C.Elements.all;
+ 
+       subtype T is Index_Type'Base range
+         Index_Type'First .. C.Last;
+    begin
+       Process (E (T'(Position.Index)).all);
+    end Query_Element;
+ 
+ 
+    procedure Update_Element
+      (Position : in Cursor;
+       Process  : not null access procedure (Element : in out Element_Type)) is
+ 
+       C : Vector renames Position.Container.all;
+       E : Elements_Type renames C.Elements.all;
+ 
+       subtype T is Index_Type'Base range
+         Index_Type'First .. C.Last;
+    begin
+       Process (E (T'(Position.Index)).all);
+    end Update_Element;
+ 
+ 
+    procedure Replace_Element (Position : in Cursor;
+                               By       : in Element_Type) is
+ 
+       C : Vector renames Position.Container.all;
+       E : Elements_Type renames C.Elements.all;
+ 
+       subtype T is Index_Type'Base range
+         Index_Type'First .. C.Last;
+ 
+       X : Element_Access := E (T'(Position.Index));
+    begin
+       E (T'(Position.Index)) := new Element_Type'(By);
+       Free (X);
+    end Replace_Element;
+ 
+ 
+    procedure Insert (Container : in out Vector;
+                      Before    : in     Extended_Index;
+                      New_Item  : in     Vector) is
+ 
+       N : constant Count_Type := Length (New_Item);
+ 
+    begin
+ 
+       if N = 0 then
+          return;
+       end if;
+ 
+       Insert_Space (Container, Before, Count => N);
+ 
+       if Container'Address = New_Item'Address then
+ 
+          declare
+             Dst_Last_As_Int : constant Int'Base :=
+               Int'Base (Before) + Int'Base (N) - 1;
+ 
+             Dst_Last : constant Index_Type := Index_Type (Dst_Last_As_Int);
+ 
+             Dst_Index : Index_Type'Base := Index_Type'Pred (Before);
+ 
+             Dst : Elements_Type renames
+               Container.Elements (Before .. Dst_Last);
+          begin
+ 
+             declare
+                subtype Src_Index_Subtype is Index_Type'Base range
+                  Index_Type'First .. Index_Type'Pred (Before);
+ 
+                Src : Elements_Type renames
+                  Container.Elements (Src_Index_Subtype);
+             begin
+                for Src_Index in Src'Range loop
+                   Dst_Index := Index_Type'Succ (Dst_Index);
+ 
+                   if Src (Src_Index) /= null then
+                      Dst (Dst_Index) := new Element_Type'(Src (Src_Index).all);
+                   end if;
+                end loop;
+             end;
+ 
+             declare
+                subtype Src_Index_Subtype is Index_Type'Base range
+                  Index_Type'Succ (Dst_Last) .. Container.Last;
+ 
+                Src : Elements_Type renames
+                  Container.Elements (Src_Index_Subtype);
+             begin
+                for Src_Index in Src'Range loop
+                   Dst_Index := Index_Type'Succ (Dst_Index);
+ 
+                   if Src (Src_Index) /= null then
+                      Dst (Dst_Index) := new Element_Type'(Src (Src_Index).all);
+                   end if;
+                end loop;
+             end;
+ 
+          end;
+ 
+       else
+ 
+          declare
+             Dst_Last_As_Int : constant Int'Base :=
+               Int'Base (Before) + Int'Base (N) - 1;
+ 
+             Dst_Last : constant Index_Type := Index_Type (Dst_Last_As_Int);
+ 
+             Dst_Index : Index_Type'Base := Index_Type'Pred (Before);
+ 
+             Src : Elements_Type renames
+               New_Item.Elements (Index_Type'First .. New_Item.Last);
+ 
+             Dst : Elements_Type renames
+               Container.Elements (Before .. Dst_Last);
+          begin
+             for Src_Index in Src'Range loop
+                Dst_Index := Index_Type'Succ (Dst_Index);
+ 
+                if Src (Src_Index) /= null then
+                   Dst (Dst_Index) := new Element_Type'(Src (Src_Index).all);
+                end if;
+             end loop;
+          end;
+ 
+       end if;
+ 
+    end Insert;
+ 
+ 
+    procedure Insert (Container : in out Vector;
+                      Before    : in     Cursor;
+                      New_Item  : in     Vector) is
+ 
+       Index : Index_Type'Base;
+ 
+    begin
+ 
+       if Before.Container /= null
+         and then Before.Container /= Vector_Access'(Container'Unchecked_Access)
+       then
+          raise Program_Error;
+       end if;
+ 
+       if Is_Empty (New_Item) then
+          return;
+       end if;
+ 
+       if Before.Container = null
+         or else Before.Index > Container.Last
+       then
+          Index := Index_Type'Succ (Container.Last);
+       else
+          Index := Before.Index;
+       end if;
+ 
+       Insert (Container, Index, New_Item);
+ 
+    end Insert;
+ 
+ 
+ 
+    procedure Insert (Container : in out Vector;
+                      Before    : in     Cursor;
+                      New_Item  : in     Vector;
+                      Position  :    out Cursor) is
+ 
+       Index : Index_Type'Base;
+ 
+    begin
+ 
+       if Before.Container /= null
+         and then Before.Container /= Vector_Access'(Container'Unchecked_Access)
+       then
+          raise Program_Error;
+       end if;
+ 
+       if Is_Empty (New_Item) then
+ 
+          if Before.Container = null
+            or else Before.Index > Container.Last
+          then
+             Position := No_Element;
+          else
+             Position := (Container'Unchecked_Access, Before.Index);
+          end if;
+ 
+          return;
+ 
+       end if;
+ 
+       if Before.Container = null
+         or else Before.Index > Container.Last
+       then
+          Index := Index_Type'Succ (Container.Last);
+       else
+          Index := Before.Index;
+       end if;
+ 
+       Insert (Container, Index, New_Item);
+ 
+       Position := (Container'Unchecked_Access, Index);
+ 
+    end Insert;
+ 
+ 
+    procedure Insert (Container : in out Vector;
+                      Before    : in     Cursor;
+                      New_Item  : in     Element_Type;
+                      Count     : in     Count_Type := 1) is
+ 
+       Index : Index_Type'Base;
+ 
+    begin
+ 
+       if Before.Container /= null
+         and then Before.Container /= Vector_Access'(Container'Unchecked_Access)
+       then
+          raise Program_Error;
+       end if;
+ 
+       if Count = 0 then
+          return;
+       end if;
+ 
+       if Before.Container = null
+         or else Before.Index > Container.Last
+       then
+          Index := Index_Type'Succ (Container.Last);
+       else
+          Index := Before.Index;
+       end if;
+ 
+       Insert (Container, Index, New_Item, Count);
+ 
+    end Insert;
+ 
+ 
+    procedure Insert (Container : in out Vector;
+                      Before    : in     Cursor;
+                      New_Item  : in     Element_Type;
+                      Position  :    out Cursor;
+                      Count     : in     Count_Type := 1) is
+ 
+       Index : Index_Type'Base;
+ 
+    begin
+ 
+       if Before.Container /= null
+         and then Before.Container /= Vector_Access'(Container'Unchecked_Access)
+       then
+          raise Program_Error;
+       end if;
+ 
+       if Count = 0 then
+ 
+          if Before.Container = null
+            or else Before.Index > Container.Last
+          then
+             Position := No_Element;
+          else
+             Position := (Container'Unchecked_Access, Before.Index);
+          end if;
+ 
+          return;
+ 
+       end if;
+ 
+       if Before.Container = null
+         or else Before.Index > Container.Last
+       then
+          Index := Index_Type'Succ (Container.Last);
+       else
+          Index := Before.Index;
+       end if;
+ 
+       Insert (Container, Index, New_Item, Count);
+ 
+       Position := (Container'Unchecked_Access, Index);
+ 
+    end Insert;
+ 
+ 
+ 
+    procedure Prepend (Container : in out Vector;
+                       New_Item  : in     Vector) is
+    begin
+       Insert (Container, Index_Type'First, New_Item);
+    end Prepend;
+ 
+ 
+    procedure Append (Container : in out Vector;
+                      New_Item  : in     Vector) is
+    begin
+       if Is_Empty (New_Item) then
+          return;
+       end if;
+ 
+       Insert
+         (Container,
+          Index_Type'Succ (Container.Last),
+          New_Item);
+    end Append;
+ 
+ 
+ 
+    procedure Insert_Space (Container : in out Vector;
+                            Before    : in     Cursor;
+                            Position  :    out Cursor;
+                            Count     : in     Count_Type := 1) is
+ 
+       Index : Index_Type'Base;
+ 
+    begin
+ 
+       if Before.Container /= null
+         and then Before.Container /= Vector_Access'(Container'Unchecked_Access)
+       then
+          raise Program_Error;
+       end if;
+ 
+       if Count = 0 then
+ 
+          if Before.Container = null
+            or else Before.Index > Container.Last
+          then
+             Position := No_Element;
+          else
+             Position := (Container'Unchecked_Access, Before.Index);
+          end if;
+ 
+          return;
+ 
+       end if;
+ 
+       if Before.Container = null
+         or else Before.Index > Container.Last
+       then
+          Index := Index_Type'Succ (Container.Last);
+       else
+          Index := Before.Index;
+       end if;
+ 
+       Insert_Space (Container, Index, Count);
+ 
+       Position := (Container'Unchecked_Access, Index);
+ 
+    end Insert_Space;
+ 
+ 
+    procedure Delete (Container : in out Vector;
+                      Position  : in out Cursor;
+                      Count     : in     Count_Type := 1) is
+    begin
+ 
+       if Position.Container /= null
+         and then Position.Container /=
+                    Vector_Access'(Container'Unchecked_Access)
+       then
+          raise Program_Error;
+       end if;
+ 
+       if Position.Container = null
+         or else Position.Index > Container.Last
+       then
+          Position := No_Element;
+          return;
+       end if;
+ 
+       Delete (Container, Position.Index, Count);
+ 
+       if Position.Index <= Container.Last then
+          Position := (Container'Unchecked_Access, Position.Index);
+       else
+          Position := No_Element;
+       end if;
+ 
+    end Delete;
+ 
+ 
+    function First (Container : Vector) return Cursor is
+    begin
+       if Is_Empty (Container) then
+          return No_Element;
+       end if;
+ 
+       return (Container'Unchecked_Access, Index_Type'First);
+    end First;
+ 
+ 
+    function Last (Container : Vector) return Cursor is
+    begin
+       if Is_Empty (Container) then
+          return No_Element;
+       end if;
+ 
+       return (Container'Unchecked_Access, Container.Last);
+    end Last;
+ 
+ 
+    procedure Swap (I, J : in Cursor) is
+ 
+       --  NOTE: I've liberalized the behavior here, to
+       --  allow I and J to designate different containers.
+       --  TODO: I think this is suppose to raise P_E.
+ 
+       subtype TI is Index_Type'Base range
+         Index_Type'First .. I.Container.Last;
+ 
+       EI : Element_Access renames
+         I.Container.Elements (TI'(I.Index));
+ 
+       EI_Copy : constant Element_Access := EI;
+ 
+       subtype TJ is Index_Type'Base range
+         Index_Type'First .. J.Container.Last;
+ 
+       EJ : Element_Access renames
+         J.Container.Elements (TJ'(J.Index));
+ 
+    begin
+ 
+       EI := EJ;
+       EJ := EI_Copy;
+ 
+    end Swap;
+ 
+ 
+    function Find (Container : Vector;
+                   Item      : Element_Type;
+                   Position  : Cursor := No_Element) return Cursor is
+ 
+    begin
+ 
+       if Position.Container /= null
+         and then Position.Container /=
+                    Vector_Access'(Container'Unchecked_Access)
+       then
+          raise Program_Error;
+       end if;
+ 
+       for I in Position.Index .. Container.Last loop
+          if Container.Elements (I) /= null
+            and then Container.Elements (I).all = Item
+          then
+             return (Container'Unchecked_Access, I);
+          end if;
+       end loop;
+ 
+       return No_Element;
+ 
+    end Find;
+ 
+ 
+    function Reverse_Find (Container : Vector;
+                           Item      : Element_Type;
+                           Position  : Cursor := No_Element) return Cursor is
+ 
+       Last : Index_Type'Base;
+ 
+    begin
+ 
+       if Position.Container /= null
+         and then Position.Container /=
+                    Vector_Access'(Container'Unchecked_Access)
+       then
+          raise Program_Error;
+       end if;
+ 
+       if Position.Container = null
+         or else Position.Index > Container.Last
+       then
+          Last := Container.Last;
+       else
+          Last := Position.Index;
+       end if;
+ 
+       for I in reverse Index_Type'First .. Last loop
+          if Container.Elements (I) /= null
+            and then Container.Elements (I).all = Item
+          then
+             return (Container'Unchecked_Access, I);
+          end if;
+       end loop;
+ 
+       return No_Element;
+ 
+    end Reverse_Find;
+ 
+ 
+ end Ada.Containers.Indefinite_Vectors;
+ 
diff -Nrcpad gcc-3.4.3/gcc/ada/a-coinve.ads gcc-4.0.0/gcc/ada/a-coinve.ads
*** gcc-3.4.3/gcc/ada/a-coinve.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-coinve.ads	Wed Feb  9 11:14:39 2005
***************
*** 0 ****
--- 1,343 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                    ADA.CONTAINERS.INDEFINITE_VECTORS                     --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Finalization;
+ with Ada.Streams;
+ 
+ generic
+    type Index_Type is range <>;
+ 
+    type Element_Type (<>) is private;
+ 
+    with function "=" (Left, Right : Element_Type) return Boolean is <>;
+ 
+ package Ada.Containers.Indefinite_Vectors is
+ pragma Preelaborate (Indefinite_Vectors);
+ 
+    subtype Extended_Index is Index_Type'Base
+      range Index_Type'First - 1 ..
+             Index_Type'Last +
+             Boolean'Pos (Index_Type'Base'Last > Index_Type'Last);
+ 
+    No_Index : constant Extended_Index := Extended_Index'First;
+ 
+    subtype Index_Subtype is Index_Type;
+ 
+    type Vector is tagged private;
+ 
+    type Cursor is private;
+ 
+    Empty_Vector : constant Vector;
+ 
+    No_Element : constant Cursor;
+ 
+    function To_Vector (Length : Count_Type) return Vector;
+ 
+    function To_Vector
+      (New_Item : Element_Type;
+       Length   : Count_Type) return Vector;
+ 
+    function "&" (Left, Right : Vector) return Vector;
+ 
+    function "&" (Left : Vector; Right : Element_Type) return Vector;
+ 
+    function "&" (Left : Element_Type; Right : Vector) return Vector;
+ 
+    function "&" (Left, Right : Element_Type) return Vector;
+ 
+    function "=" (Left, Right : Vector) return Boolean;
+ 
+    function Capacity (Container : Vector) return Count_Type;
+ 
+    procedure Reserve_Capacity
+      (Container : in out Vector;
+       Capacity  : Count_Type);
+ 
+    function Length (Container : Vector) return Count_Type;
+ 
+    function Is_Empty (Container : Vector) return Boolean;
+ 
+    procedure Clear (Container : in out Vector);
+ 
+    function To_Cursor
+      (Container : Vector;
+       Index     : Extended_Index) return Cursor;
+ 
+    function To_Index (Position : Cursor) return Extended_Index;
+ 
+    function Element
+      (Container : Vector;
+       Index     : Index_Type) return Element_Type;
+ 
+    function Element (Position : Cursor) return Element_Type;
+ 
+    procedure Query_Element
+      (Container : Vector;
+       Index     : Index_Type;
+       Process   : not null access procedure (Element : Element_Type));
+ 
+    procedure Query_Element
+      (Position : Cursor;
+       Process  : not null access procedure (Element : Element_Type));
+ 
+    procedure Update_Element
+      (Container : Vector;
+       Index     : Index_Type;
+       Process   : not null access procedure (Element : in out Element_Type));
+ 
+    procedure Update_Element
+      (Position : Cursor;
+       Process  : not null access procedure (Element : in out Element_Type));
+ 
+    procedure Replace_Element
+      (Container : Vector;
+       Index     : Index_Type;
+       By        : Element_Type);
+ 
+    procedure Replace_Element
+      (Position : Cursor;
+       By       : Element_Type);
+ 
+    procedure Assign (Target : in out Vector; Source : Vector);
+ 
+    procedure Move (Target : in out Vector; Source : in out Vector);
+ 
+    procedure Insert
+      (Container : in out Vector;
+       Before    : Extended_Index;
+       New_Item  : Vector);
+ 
+    procedure Insert
+      (Container : in out Vector;
+       Before    : Cursor;
+       New_Item  : Vector);
+ 
+    procedure Insert
+      (Container : in out Vector;
+       Before    : Cursor;
+       New_Item  : Vector;
+       Position  : out Cursor);
+ 
+    procedure Insert
+      (Container : in out Vector;
+       Before    : Extended_Index;
+       New_Item  : Element_Type;
+       Count     : Count_Type := 1);
+ 
+    procedure Insert
+      (Container : in out Vector;
+       Before    : Cursor;
+       New_Item  : Element_Type;
+       Count     : Count_Type := 1);
+ 
+    procedure Insert
+      (Container : in out Vector;
+       Before    : Cursor;
+       New_Item  : Element_Type;
+       Position  : out Cursor;
+       Count     : Count_Type := 1);
+ 
+    procedure Prepend
+      (Container : in out Vector;
+       New_Item  : Vector);
+ 
+    procedure Prepend
+      (Container : in out Vector;
+       New_Item  : Element_Type;
+       Count     : Count_Type := 1);
+ 
+    procedure Append
+      (Container : in out Vector;
+       New_Item  : Vector);
+ 
+    procedure Append
+      (Container : in out Vector;
+       New_Item  : Element_Type;
+       Count     : Count_Type := 1);
+ 
+    procedure Insert_Space
+      (Container : in out Vector;
+       Before    : Extended_Index;
+       Count     : Count_Type := 1);
+ 
+    procedure Insert_Space
+      (Container : in out Vector;
+       Before    : Cursor;
+       Position  : out Cursor;
+       Count     : Count_Type := 1);
+ 
+    procedure Set_Length
+      (Container : in out Vector;
+       Length    : Count_Type);
+ 
+    procedure Delete
+      (Container : in out Vector;
+       Index     : Extended_Index;  --  TODO: verify
+       Count     : Count_Type := 1);
+ 
+    procedure Delete
+      (Container : in out Vector;
+       Position  : in out Cursor;
+       Count     : Count_Type := 1);
+ 
+    procedure Delete_First
+      (Container : in out Vector;
+       Count     : Count_Type := 1);
+ 
+    procedure Delete_Last
+      (Container : in out Vector;
+       Count     : Count_Type := 1);
+ 
+    function First_Index (Container : Vector) return Index_Type;
+ 
+    function First (Container : Vector) return Cursor;
+ 
+    function First_Element (Container : Vector) return Element_Type;
+ 
+    function Last_Index (Container : Vector) return Extended_Index;
+ 
+    function Last (Container : Vector) return Cursor;
+ 
+    function Last_Element (Container : Vector) return Element_Type;
+ 
+    procedure Swap (Container : Vector; I, J : Index_Type);
+ 
+    procedure Swap (I, J : Cursor);
+ 
+    generic
+       with function "<" (Left, Right : Element_Type) return Boolean is <>;
+    procedure Generic_Sort (Container : Vector);
+ 
+    function Find_Index
+      (Container : Vector;
+       Item      : Element_Type;
+       Index     : Index_Type := Index_Type'First) return Extended_Index;
+ 
+    function Find
+      (Container : Vector;
+       Item      : Element_Type;
+        Position  : Cursor := No_Element) return Cursor;
+ 
+    function Reverse_Find_Index
+      (Container : Vector;
+       Item      : Element_Type;
+       Index     : Index_Type := Index_Type'Last) return Extended_Index;
+ 
+    function Reverse_Find (Container : Vector;
+                           Item      : Element_Type;
+                           Position  : Cursor := No_Element)
+       return Cursor;
+ 
+    function Contains
+      (Container : Vector;
+       Item      : Element_Type) return Boolean;
+ 
+    function Next (Position : Cursor) return Cursor;
+ 
+    function Previous (Position : Cursor) return Cursor;
+ 
+    procedure Next (Position : in out Cursor);
+ 
+    procedure Previous (Position : in out Cursor);
+ 
+    function Has_Element (Position : Cursor) return Boolean;
+ 
+    procedure Iterate
+      (Container : Vector;
+       Process   : not null access procedure (Position : Cursor));
+ 
+    procedure Reverse_Iterate
+      (Container : Vector;
+       Process   : not null access procedure (Position : Cursor));
+ 
+ private
+ 
+    pragma Inline (First_Index);
+    pragma Inline (Last_Index);
+    pragma Inline (Element);
+    pragma Inline (First_Element);
+    pragma Inline (Last_Element);
+    pragma Inline (Query_Element);
+    pragma Inline (Update_Element);
+    pragma Inline (Replace_Element);
+    pragma Inline (Contains);
+ 
+    type Element_Access is access Element_Type;
+ 
+    type Elements_Type is array (Index_Type range <>) of Element_Access;
+ 
+    function "=" (L, R : Elements_Type) return Boolean is abstract;
+ 
+    type Elements_Access is access Elements_Type;
+ 
+    use Ada.Finalization;
+ 
+    type Vector is new Controlled with record
+       Elements : Elements_Access;
+       Last     : Extended_Index := No_Index;
+    end record;
+ 
+    procedure Adjust (Container : in out Vector);
+ 
+    procedure Finalize (Container : in out Vector);
+ 
+    use Ada.Streams;
+ 
+    procedure Write
+      (Stream    : access Root_Stream_Type'Class;
+       Container : Vector);
+ 
+    for Vector'Write use Write;
+ 
+    procedure Read
+      (Stream    : access Root_Stream_Type'Class;
+       Container : out Vector);
+ 
+    for Vector'Read use Read;
+ 
+    Empty_Vector : constant Vector := Vector'(Controlled with null, No_Index);
+ 
+    type Vector_Access is access constant Vector;
+    for Vector_Access'Storage_Size use 0;
+ 
+    type Cursor is record
+       Container : Vector_Access;
+       Index     : Index_Type := Index_Type'First;
+    end record;
+ 
+    No_Element : constant Cursor := Cursor'(null, Index_Type'First);
+ 
+ end Ada.Containers.Indefinite_Vectors;
+ 
diff -Nrcpad gcc-3.4.3/gcc/ada/a-contai.ads gcc-4.0.0/gcc/ada/a-contai.ads
*** gcc-3.4.3/gcc/ada/a-contai.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-contai.ads	Wed Feb  9 11:14:39 2005
***************
*** 0 ****
--- 1,22 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                              ADA.CONTAINERS                              --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ -- This specification is adapted from the Ada Reference Manual for use with --
+ -- GNAT.  In accordance with the copyright of that document, you can freely --
+ -- copy and modify this specification,  provided that if you redistribute a --
+ -- modified version,  any changes that you have made are clearly indicated. --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package Ada.Containers is
+ pragma Pure (Containers);
+ 
+    type Hash_Type is mod 2**32;
+    type Count_Type is range 0 .. 2**31 - 1;
+ 
+ end Ada.Containers;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-convec.adb gcc-4.0.0/gcc/ada/a-convec.adb
*** gcc-3.4.3/gcc/ada/a-convec.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-convec.adb	Wed Feb  9 11:14:39 2005
***************
*** 0 ****
--- 1,1741 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                          ADA.CONTAINERS.VECTORS                          --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Containers.Generic_Array_Sort;
+ with Ada.Unchecked_Deallocation;
+ 
+ with System; use type System.Address;
+ 
+ package body Ada.Containers.Vectors is
+ 
+    type Int is range System.Min_Int .. System.Max_Int;
+ 
+    procedure Free is
+      new Ada.Unchecked_Deallocation (Elements_Type, Elements_Access);
+ 
+    ---------
+    -- "&" --
+    ---------
+ 
+    function "&" (Left, Right : Vector) return Vector is
+       LN : constant Count_Type := Length (Left);
+       RN : constant Count_Type := Length (Right);
+ 
+    begin
+       if LN = 0 then
+          if RN = 0 then
+             return Empty_Vector;
+          end if;
+ 
+          declare
+             RE : Elements_Type renames
+                    Right.Elements (Index_Type'First .. Right.Last);
+ 
+             Elements : constant Elements_Access :=
+                          new Elements_Type'(RE);
+ 
+          begin
+             return (Controlled with Elements, Right.Last);
+          end;
+       end if;
+ 
+       if RN = 0 then
+          declare
+             LE : Elements_Type renames
+                    Left.Elements (Index_Type'First .. Left.Last);
+ 
+             Elements : constant Elements_Access :=
+                          new Elements_Type'(LE);
+ 
+          begin
+             return (Controlled with Elements, Left.Last);
+          end;
+ 
+       end if;
+ 
+       declare
+          Last_As_Int : constant Int'Base :=
+                          Int (Index_Type'First) + Int (LN) + Int (RN) - 1;
+ 
+          Last : constant Index_Type := Index_Type (Last_As_Int);
+ 
+          LE : Elements_Type renames
+                 Left.Elements (Index_Type'First .. Left.Last);
+ 
+          RE : Elements_Type renames
+                 Right.Elements (Index_Type'First .. Right.Last);
+ 
+          Elements : constant Elements_Access :=
+                          new Elements_Type'(LE & RE);
+ 
+       begin
+          return (Controlled with Elements, Last);
+       end;
+    end "&";
+ 
+    function "&" (Left  : Vector; Right : Element_Type) return Vector is
+       LN : constant Count_Type := Length (Left);
+ 
+    begin
+       if LN = 0 then
+          declare
+             subtype Elements_Subtype is
+               Elements_Type (Index_Type'First .. Index_Type'First);
+ 
+             Elements : constant Elements_Access :=
+                          new Elements_Subtype'(others => Right);
+ 
+          begin
+             return (Controlled with Elements, Index_Type'First);
+          end;
+       end if;
+ 
+       declare
+          Last_As_Int : constant Int'Base :=
+                          Int (Index_Type'First) + Int (LN);
+ 
+          Last : constant Index_Type := Index_Type (Last_As_Int);
+ 
+          LE : Elements_Type renames
+                 Left.Elements (Index_Type'First .. Left.Last);
+ 
+          subtype ET is Elements_Type (Index_Type'First .. Last);
+ 
+          Elements : constant Elements_Access := new ET'(LE & Right);
+ 
+       begin
+          return (Controlled with Elements, Last);
+       end;
+    end "&";
+ 
+    function "&" (Left  : Element_Type; Right : Vector) return Vector is
+       RN : constant Count_Type := Length (Right);
+ 
+    begin
+       if RN = 0 then
+          declare
+             subtype Elements_Subtype is
+               Elements_Type (Index_Type'First .. Index_Type'First);
+ 
+             Elements : constant Elements_Access :=
+                          new Elements_Subtype'(others => Left);
+ 
+          begin
+             return (Controlled with Elements, Index_Type'First);
+          end;
+       end if;
+ 
+       declare
+          Last_As_Int : constant Int'Base :=
+                          Int (Index_Type'First) + Int (RN);
+ 
+          Last : constant Index_Type := Index_Type (Last_As_Int);
+ 
+          RE : Elements_Type renames
+                 Right.Elements (Index_Type'First .. Right.Last);
+ 
+          subtype ET is Elements_Type (Index_Type'First .. Last);
+ 
+          Elements : constant Elements_Access := new ET'(Left & RE);
+ 
+       begin
+          return (Controlled with Elements, Last);
+       end;
+    end "&";
+ 
+    function "&" (Left, Right  : Element_Type) return Vector is
+       subtype IT is Index_Type'Base range
+         Index_Type'First .. Index_Type'Succ (Index_Type'First);
+ 
+       subtype ET is Elements_Type (IT);
+ 
+       Elements : constant Elements_Access := new ET'(Left, Right);
+ 
+    begin
+       return Vector'(Controlled with Elements, Elements'Last);
+    end "&";
+ 
+    ---------
+    -- "=" --
+    ---------
+ 
+    function "=" (Left, Right : Vector) return Boolean is
+    begin
+       if Left'Address = Right'Address then
+          return True;
+       end if;
+ 
+       if Left.Last /= Right.Last then
+          return False;
+       end if;
+ 
+       for J in Index_Type range Index_Type'First .. Left.Last loop
+          if Left.Elements (J) /= Right.Elements (J) then
+             return False;
+          end if;
+       end loop;
+ 
+       return True;
+    end "=";
+ 
+    ------------
+    -- Adjust --
+    ------------
+ 
+    procedure Adjust (Container : in out Vector) is
+    begin
+       if Container.Elements = null then
+          return;
+       end if;
+ 
+       if Container.Elements'Length = 0
+         or else Container.Last < Index_Type'First
+       then
+          Container.Elements := null;
+          return;
+       end if;
+ 
+       declare
+          X : constant Elements_Access := Container.Elements;
+          L : constant Index_Type'Base := Container.Last;
+          E : Elements_Type renames X (Index_Type'First .. L);
+       begin
+          Container.Elements := null;
+          Container.Last := Index_Type'Pred (Index_Type'First);
+          Container.Elements := new Elements_Type'(E);
+          Container.Last := L;
+       end;
+    end Adjust;
+ 
+    ------------
+    -- Append --
+    ------------
+ 
+    procedure Append (Container : in out Vector; New_Item : Vector) is
+    begin
+       if Is_Empty (New_Item) then
+          return;
+       end if;
+ 
+       Insert
+         (Container,
+          Index_Type'Succ (Container.Last),
+          New_Item);
+    end Append;
+ 
+    procedure Append
+      (Container : in out Vector;
+       New_Item  : Element_Type;
+       Count     : Count_Type := 1)
+    is
+    begin
+       if Count = 0 then
+          return;
+       end if;
+ 
+       Insert
+         (Container,
+          Index_Type'Succ (Container.Last),
+          New_Item,
+          Count);
+    end Append;
+ 
+    ------------
+    -- Assign --
+    ------------
+ 
+    procedure Assign
+      (Target : in out Vector;
+       Source : Vector)
+    is
+       N : constant Count_Type := Length (Source);
+ 
+    begin
+       if Target'Address = Source'Address then
+          return;
+       end if;
+ 
+       Clear (Target);
+ 
+       if N = 0 then
+          return;
+       end if;
+ 
+       if N > Capacity (Target) then
+          Reserve_Capacity (Target, Capacity => N);
+       end if;
+ 
+       Target.Elements (Index_Type'First .. Source.Last) :=
+         Source.Elements (Index_Type'First .. Source.Last);
+ 
+       Target.Last := Source.Last;
+    end Assign;
+ 
+    --------------
+    -- Capacity --
+    --------------
+ 
+    function Capacity (Container : Vector) return Count_Type is
+    begin
+       if Container.Elements = null then
+          return 0;
+       end if;
+ 
+       return Container.Elements'Length;
+    end Capacity;
+ 
+    -----------
+    -- Clear --
+    -----------
+ 
+    procedure Clear (Container : in out Vector) is
+    begin
+       Container.Last := Index_Type'Pred (Index_Type'First);
+    end Clear;
+ 
+    --------------
+    -- Contains --
+    --------------
+ 
+    function Contains
+      (Container : Vector;
+       Item      : Element_Type) return Boolean
+    is
+    begin
+       return Find_Index (Container, Item) /= No_Index;
+    end Contains;
+ 
+    ------------
+    -- Delete --
+    ------------
+ 
+    procedure Delete
+      (Container : in out Vector;
+       Index     : Extended_Index;
+       Count     : Count_Type := 1)
+    is
+    begin
+       if Count = 0 then
+          return;
+       end if;
+ 
+       declare
+          subtype I_Subtype is Index_Type'Base range
+            Index_Type'First .. Container.Last;
+ 
+          I : constant I_Subtype := Index;
+          --  TODO: not sure whether to relax this check ???
+ 
+          I_As_Int : constant Int := Int (I);
+ 
+          Old_Last_As_Int : constant Int := Index_Type'Pos (Container.Last);
+ 
+          Count1 : constant Int'Base := Count_Type'Pos (Count);
+          Count2 : constant Int'Base := Old_Last_As_Int - I_As_Int + 1;
+ 
+          N : constant Int'Base := Int'Min (Count1, Count2);
+ 
+          J_As_Int : constant Int'Base := I_As_Int + N;
+          J        : constant Index_Type'Base := Index_Type'Base (J_As_Int);
+ 
+          E : Elements_Type renames Container.Elements.all;
+ 
+          New_Last_As_Int : constant Int'Base := Old_Last_As_Int - N;
+ 
+          New_Last : constant Extended_Index :=
+                       Extended_Index (New_Last_As_Int);
+ 
+       begin
+          E (I .. New_Last) := E (J .. Container.Last);
+          Container.Last := New_Last;
+       end;
+    end Delete;
+ 
+    procedure Delete
+      (Container : in out Vector;
+       Position  : in out Cursor;
+       Count     : Count_Type := 1)
+    is
+    begin
+ 
+       if Position.Container /= null
+         and then Position.Container /=
+                    Vector_Access'(Container'Unchecked_Access)
+       then
+          raise Program_Error;
+       end if;
+ 
+       if Position.Container = null
+         or else Position.Index > Container.Last
+       then
+          Position := No_Element;
+          return;
+       end if;
+ 
+       Delete (Container, Position.Index, Count);
+ 
+       if Position.Index <= Container.Last then
+          Position := (Container'Unchecked_Access, Position.Index);
+       else
+          Position := No_Element;
+       end if;
+    end Delete;
+ 
+    ------------------
+    -- Delete_First --
+    ------------------
+ 
+    procedure Delete_First
+      (Container : in out Vector;
+       Count     : Count_Type := 1)
+    is
+    begin
+       if Count = 0 then
+          return;
+       end if;
+ 
+       if Count >= Length (Container) then
+          Clear (Container);
+          return;
+       end if;
+ 
+       Delete (Container, Index_Type'First, Count);
+    end Delete_First;
+ 
+    -----------------
+    -- Delete_Last --
+    -----------------
+ 
+    procedure Delete_Last
+      (Container : in out Vector;
+       Count     : Count_Type := 1)
+    is
+       Index : Int'Base;
+ 
+    begin
+       if Count = 0 then
+          return;
+       end if;
+ 
+       if Count >= Length (Container) then
+          Clear (Container);
+          return;
+       end if;
+ 
+       Index := Int'Base (Container.Last) - Int'Base (Count) + 1;
+ 
+       Delete (Container, Index_Type'Base (Index), Count);
+    end Delete_Last;
+ 
+    -------------
+    -- Element --
+    -------------
+ 
+    function Element
+      (Container : Vector;
+       Index     : Index_Type) return Element_Type
+    is
+       subtype T is Index_Type'Base range
+         Index_Type'First .. Container.Last;
+    begin
+       return Container.Elements (T'(Index));
+    end Element;
+ 
+    function Element (Position : Cursor) return Element_Type is
+    begin
+       return Element (Position.Container.all, Position.Index);
+    end Element;
+ 
+    --------------
+    -- Finalize --
+    --------------
+ 
+    procedure Finalize (Container : in out Vector) is
+       X : Elements_Access := Container.Elements;
+    begin
+       Container.Elements := null;
+       Container.Last := Index_Type'Pred (Index_Type'First);
+       Free (X);
+    end Finalize;
+ 
+    ----------
+    -- Find --
+    ----------
+ 
+    function Find
+      (Container : Vector;
+       Item      : Element_Type;
+       Position  : Cursor := No_Element) return Cursor is
+ 
+    begin
+       if Position.Container /= null
+         and then Position.Container /=
+                    Vector_Access'(Container'Unchecked_Access)
+       then
+          raise Program_Error;
+       end if;
+ 
+       for J in Position.Index .. Container.Last loop
+          if Container.Elements (J) = Item then
+             return (Container'Unchecked_Access, J);
+          end if;
+       end loop;
+ 
+       return No_Element;
+    end Find;
+ 
+    ----------------
+    -- Find_Index --
+    ----------------
+ 
+    function Find_Index
+      (Container : Vector;
+       Item      : Element_Type;
+       Index     : Index_Type := Index_Type'First) return Extended_Index is
+    begin
+       for Indx in Index .. Container.Last loop
+          if Container.Elements (Indx) = Item then
+             return Indx;
+          end if;
+       end loop;
+ 
+       return No_Index;
+    end Find_Index;
+ 
+    -----------
+    -- First --
+    -----------
+ 
+    function First (Container : Vector) return Cursor is
+    begin
+       if Is_Empty (Container) then
+          return No_Element;
+       end if;
+ 
+       return (Container'Unchecked_Access, Index_Type'First);
+    end First;
+ 
+    -------------------
+    -- First_Element --
+    -------------------
+ 
+    function First_Element (Container : Vector) return Element_Type is
+    begin
+       return Element (Container, Index_Type'First);
+    end First_Element;
+ 
+    -----------------
+    -- First_Index --
+    -----------------
+ 
+    function First_Index (Container : Vector) return Index_Type is
+       pragma Unreferenced (Container);
+    begin
+       return Index_Type'First;
+    end First_Index;
+ 
+    ------------------
+    -- Generic_Sort --
+    ------------------
+ 
+    procedure Generic_Sort (Container : Vector)
+    is
+       procedure Sort is
+          new Generic_Array_Sort
+           (Index_Type   => Index_Type,
+            Element_Type => Element_Type,
+            Array_Type   => Elements_Type,
+            "<"          => "<");
+ 
+    begin
+       if Container.Elements = null then
+          return;
+       end if;
+ 
+       Sort (Container.Elements (Index_Type'First .. Container.Last));
+    end Generic_Sort;
+ 
+    -----------------
+    -- Has_Element --
+    -----------------
+ 
+    function Has_Element (Position : Cursor) return Boolean is
+    begin
+       if Position.Container = null then
+          return False;
+       end if;
+ 
+       return Position.Index <= Position.Container.Last;
+    end Has_Element;
+ 
+    ------------
+    -- Insert --
+    ------------
+ 
+    procedure Insert
+      (Container : in out Vector;
+       Before    : Extended_Index;
+       New_Item  : Element_Type;
+       Count     : Count_Type := 1)
+    is
+       Old_Last : constant Extended_Index := Container.Last;
+ 
+       Old_Last_As_Int : constant Int := Index_Type'Pos (Old_Last);
+ 
+       N : constant Int := Count_Type'Pos (Count);
+ 
+       New_Last_As_Int : constant Int'Base := Old_Last_As_Int + N;
+ 
+       New_Last : constant Extended_Index := Extended_Index (New_Last_As_Int);
+ 
+       Index : Index_Type;
+ 
+       Dst_Last : Index_Type;
+       Dst      : Elements_Access;
+ 
+    begin
+       if Count = 0 then
+          return;
+       end if;
+ 
+       declare
+          subtype Before_Subtype is Index_Type'Base range
+            Index_Type'First .. Index_Type'Succ (Container.Last);
+ 
+          Old_First : constant Before_Subtype := Before;
+ 
+          Old_First_As_Int : constant Int := Index_Type'Pos (Old_First);
+ 
+          New_First_As_Int : constant Int'Base := Old_First_As_Int + N;
+ 
+       begin
+          Index := Index_Type (New_First_As_Int);
+       end;
+ 
+       if Container.Elements = null then
+          declare
+             subtype Elements_Subtype is
+               Elements_Type (Index_Type'First .. New_Last);
+          begin
+             Container.Elements := new Elements_Subtype'(others => New_Item);
+          end;
+ 
+          Container.Last := New_Last;
+          return;
+       end if;
+ 
+       if New_Last <= Container.Elements'Last then
+          declare
+             E : Elements_Type renames Container.Elements.all;
+          begin
+             E (Index .. New_Last) := E (Before .. Container.Last);
+             E (Before .. Index_Type'Pred (Index)) := (others => New_Item);
+          end;
+ 
+          Container.Last := New_Last;
+          return;
+       end if;
+ 
+       declare
+          First : constant Int := Int (Index_Type'First);
+ 
+          New_Size : constant Int'Base := New_Last_As_Int - First + 1;
+          Max_Size : constant Int'Base := Int (Index_Type'Last) - First + 1;
+ 
+          Size, Dst_Last_As_Int : Int'Base;
+ 
+       begin
+          if New_Size >= Max_Size / 2 then
+             Dst_Last := Index_Type'Last;
+ 
+          else
+             Size := Container.Elements'Length;
+ 
+             if Size = 0 then
+                Size := 1;
+             end if;
+ 
+             while Size < New_Size loop
+                Size := 2 * Size;
+             end loop;
+ 
+             Dst_Last_As_Int := First + Size - 1;
+             Dst_Last := Index_Type (Dst_Last_As_Int);
+          end if;
+       end;
+ 
+       Dst := new Elements_Type (Index_Type'First .. Dst_Last);
+ 
+       declare
+          Src : Elements_Type renames Container.Elements.all;
+ 
+       begin
+          Dst (Index_Type'First .. Index_Type'Pred (Before)) :=
+            Src (Index_Type'First .. Index_Type'Pred (Before));
+ 
+          Dst (Before .. Index_Type'Pred (Index)) :=
+            (others => New_Item);
+ 
+          Dst (Index .. New_Last) :=
+            Src (Before .. Container.Last);
+ 
+       exception
+          when others =>
+             Free (Dst);
+             raise;
+       end;
+ 
+       declare
+          X : Elements_Access := Container.Elements;
+       begin
+          Container.Elements := Dst;
+          Container.Last := New_Last;
+          Free (X);
+       end;
+    end Insert;
+ 
+    procedure Insert
+      (Container : in out Vector;
+       Before    : Extended_Index;
+       New_Item  : Vector)
+    is
+       N : constant Count_Type := Length (New_Item);
+ 
+    begin
+       if N = 0 then
+          return;
+       end if;
+ 
+       Insert_Space (Container, Before, Count => N);
+ 
+       declare
+          Dst_Last_As_Int : constant Int'Base :=
+                              Int'Base (Before) + Int'Base (N) - 1;
+ 
+          Dst_Last : constant Index_Type := Index_Type (Dst_Last_As_Int);
+ 
+       begin
+          if Container'Address = New_Item'Address then
+             declare
+                subtype Src_Index_Subtype is Index_Type'Base range
+                  Index_Type'First .. Index_Type'Pred (Before);
+ 
+                Src : Elements_Type renames
+                        Container.Elements (Src_Index_Subtype);
+ 
+                Index_As_Int : constant Int'Base :=
+                                 Int (Before) + Src'Length - 1;
+ 
+                Index : constant Index_Type'Base :=
+                          Index_Type'Base (Index_As_Int);
+ 
+                Dst : Elements_Type renames
+                        Container.Elements (Before .. Index);
+ 
+             begin
+                Dst := Src;
+             end;
+ 
+             declare
+                subtype Src_Index_Subtype is Index_Type'Base range
+                  Index_Type'Succ (Dst_Last) .. Container.Last;
+ 
+                Src : Elements_Type renames
+                        Container.Elements (Src_Index_Subtype);
+ 
+                Index_As_Int : constant Int'Base :=
+                                 Dst_Last_As_Int - Src'Length + 1;
+ 
+                Index : constant Index_Type'Base :=
+                          Index_Type'Base (Index_As_Int);
+ 
+                Dst : Elements_Type renames
+                        Container.Elements (Index .. Dst_Last);
+ 
+             begin
+                Dst := Src;
+             end;
+ 
+          else
+             Container.Elements (Before .. Dst_Last) :=
+               New_Item.Elements (Index_Type'First .. New_Item.Last);
+          end if;
+       end;
+    end Insert;
+ 
+    procedure Insert
+      (Container : in out Vector;
+       Before    : Cursor;
+       New_Item  : Vector)
+    is
+       Index : Index_Type'Base;
+ 
+    begin
+       if Before.Container /= null
+         and then Before.Container /= Vector_Access'(Container'Unchecked_Access)
+       then
+          raise Program_Error;
+       end if;
+ 
+       if Is_Empty (New_Item) then
+          return;
+       end if;
+ 
+       if Before.Container = null
+         or else Before.Index > Container.Last
+       then
+          Index := Index_Type'Succ (Container.Last);
+       else
+          Index := Before.Index;
+       end if;
+ 
+       Insert (Container, Index, New_Item);
+    end Insert;
+ 
+    procedure Insert
+      (Container : in out Vector;
+       Before    : Cursor;
+       New_Item  : Vector;
+       Position  : out Cursor)
+    is
+       Index : Index_Type'Base;
+ 
+    begin
+       if Before.Container /= null
+         and then Before.Container /= Vector_Access'(Container'Unchecked_Access)
+       then
+          raise Program_Error;
+       end if;
+ 
+       if Is_Empty (New_Item) then
+          if Before.Container = null
+            or else Before.Index > Container.Last
+          then
+             Position := No_Element;
+          else
+             Position := (Container'Unchecked_Access, Before.Index);
+          end if;
+ 
+          return;
+       end if;
+ 
+       if Before.Container = null
+         or else Before.Index > Container.Last
+       then
+          Index := Index_Type'Succ (Container.Last);
+       else
+          Index := Before.Index;
+       end if;
+ 
+       Insert (Container, Index, New_Item);
+ 
+       Position := Cursor'(Container'Unchecked_Access, Index);
+    end Insert;
+ 
+    procedure Insert
+      (Container : in out Vector;
+       Before    : Cursor;
+       New_Item  : Element_Type;
+       Count     : Count_Type := 1)
+    is
+       Index : Index_Type'Base;
+ 
+    begin
+       if Before.Container /= null
+         and then Before.Container /= Vector_Access'(Container'Unchecked_Access)
+       then
+          raise Program_Error;
+       end if;
+ 
+       if Count = 0 then
+          return;
+       end if;
+ 
+       if Before.Container = null
+         or else Before.Index > Container.Last
+       then
+          Index := Index_Type'Succ (Container.Last);
+       else
+          Index := Before.Index;
+       end if;
+ 
+       Insert (Container, Index, New_Item, Count);
+    end Insert;
+ 
+    procedure Insert
+      (Container : in out Vector;
+       Before    : Cursor;
+       New_Item  : Element_Type;
+       Position  : out Cursor;
+       Count     : Count_Type := 1)
+    is
+       Index : Index_Type'Base;
+ 
+    begin
+       if Before.Container /= null
+         and then Before.Container /= Vector_Access'(Container'Unchecked_Access)
+       then
+          raise Program_Error;
+       end if;
+ 
+       if Count = 0 then
+          if Before.Container = null
+            or else Before.Index > Container.Last
+          then
+             Position := No_Element;
+          else
+             Position := (Container'Unchecked_Access, Before.Index);
+          end if;
+ 
+          return;
+       end if;
+ 
+       if Before.Container = null
+         or else Before.Index > Container.Last
+       then
+          Index := Index_Type'Succ (Container.Last);
+       else
+          Index := Before.Index;
+       end if;
+ 
+       Insert (Container, Index, New_Item, Count);
+ 
+       Position := Cursor'(Container'Unchecked_Access, Index);
+    end Insert;
+ 
+    ------------------
+    -- Insert_Space --
+    ------------------
+ 
+    procedure Insert_Space
+      (Container : in out Vector;
+       Before    : Extended_Index;
+       Count     : Count_Type := 1)
+    is
+       Old_Last : constant Extended_Index := Container.Last;
+ 
+       Old_Last_As_Int : constant Int := Index_Type'Pos (Old_Last);
+ 
+       N : constant Int := Count_Type'Pos (Count);
+ 
+       New_Last_As_Int : constant Int'Base := Old_Last_As_Int + N;
+ 
+       New_Last : constant Extended_Index := Extended_Index (New_Last_As_Int);
+ 
+       Index : Index_Type;
+ 
+       Dst_Last : Index_Type;
+       Dst      : Elements_Access;
+ 
+    begin
+       if Count = 0 then
+          return;
+       end if;
+ 
+       declare
+          subtype Before_Subtype is Index_Type'Base range
+            Index_Type'First .. Index_Type'Succ (Container.Last);
+ 
+          Old_First : constant Before_Subtype := Before;
+ 
+          Old_First_As_Int : constant Int := Index_Type'Pos (Old_First);
+ 
+          New_First_As_Int : constant Int'Base := Old_First_As_Int + N;
+ 
+       begin
+          Index := Index_Type (New_First_As_Int);
+       end;
+ 
+       if Container.Elements = null then
+          Container.Elements :=
+            new Elements_Type (Index_Type'First .. New_Last);
+ 
+          Container.Last := New_Last;
+          return;
+       end if;
+ 
+       if New_Last <= Container.Elements'Last then
+          declare
+             E : Elements_Type renames Container.Elements.all;
+          begin
+             E (Index .. New_Last) := E (Before .. Container.Last);
+          end;
+ 
+          Container.Last := New_Last;
+          return;
+       end if;
+ 
+       declare
+          First : constant Int := Int (Index_Type'First);
+ 
+          New_Size : constant Int'Base := New_Last_As_Int - First + 1;
+          Max_Size : constant Int'Base := Int (Index_Type'Last) - First + 1;
+ 
+          Size, Dst_Last_As_Int : Int'Base;
+ 
+       begin
+          if New_Size >= Max_Size / 2 then
+             Dst_Last := Index_Type'Last;
+ 
+          else
+             Size := Container.Elements'Length;
+ 
+             if Size = 0 then
+                Size := 1;
+             end if;
+ 
+             while Size < New_Size loop
+                Size := 2 * Size;
+             end loop;
+ 
+             Dst_Last_As_Int := First + Size - 1;
+             Dst_Last := Index_Type (Dst_Last_As_Int);
+          end if;
+       end;
+ 
+       Dst := new Elements_Type (Index_Type'First .. Dst_Last);
+ 
+       declare
+          Src : Elements_Type renames Container.Elements.all;
+ 
+       begin
+          Dst (Index_Type'First .. Index_Type'Pred (Before)) :=
+            Src (Index_Type'First .. Index_Type'Pred (Before));
+ 
+          Dst (Index .. New_Last) :=
+            Src (Before .. Container.Last);
+ 
+       exception
+          when others =>
+             Free (Dst);
+             raise;
+       end;
+ 
+       declare
+          X : Elements_Access := Container.Elements;
+       begin
+          Container.Elements := Dst;
+          Container.Last := New_Last;
+ 
+          Free (X);
+       end;
+    end Insert_Space;
+ 
+    procedure Insert_Space
+      (Container : in out Vector;
+       Before    : Cursor;
+       Position  : out Cursor;
+       Count     : Count_Type := 1)
+    is
+       Index : Index_Type'Base;
+ 
+    begin
+       if Before.Container /= null
+         and then Before.Container /= Vector_Access'(Container'Unchecked_Access)
+       then
+          raise Program_Error;
+       end if;
+ 
+       if Count = 0 then
+          if Before.Container = null
+            or else Before.Index > Container.Last
+          then
+             Position := No_Element;
+          else
+             Position := (Container'Unchecked_Access, Before.Index);
+          end if;
+ 
+          return;
+       end if;
+ 
+       if Before.Container = null
+         or else Before.Index > Container.Last
+       then
+          Index := Index_Type'Succ (Container.Last);
+       else
+          Index := Before.Index;
+       end if;
+ 
+       Insert_Space (Container, Index, Count);
+ 
+       Position := Cursor'(Container'Unchecked_Access, Index);
+    end Insert_Space;
+ 
+    --------------
+    -- Is_Empty --
+    --------------
+ 
+    function Is_Empty (Container : Vector) return Boolean is
+    begin
+       return Container.Last < Index_Type'First;
+    end Is_Empty;
+ 
+    -------------
+    -- Iterate --
+    -------------
+ 
+    procedure Iterate
+      (Container : Vector;
+       Process   : not null access procedure (Position : Cursor))
+    is
+    begin
+       for Indx in Index_Type'First .. Container.Last loop
+          Process (Cursor'(Container'Unchecked_Access, Indx));
+       end loop;
+    end Iterate;
+ 
+    ----------
+    -- Last --
+    ----------
+ 
+    function Last (Container : Vector) return Cursor is
+    begin
+       if Is_Empty (Container) then
+          return No_Element;
+       end if;
+ 
+       return (Container'Unchecked_Access, Container.Last);
+    end Last;
+ 
+    ------------------
+    -- Last_Element --
+    ------------------
+ 
+    function Last_Element (Container : Vector) return Element_Type is
+    begin
+       return Element (Container, Container.Last);
+    end Last_Element;
+ 
+    ----------------
+    -- Last_Index --
+    ----------------
+ 
+    function Last_Index (Container : Vector) return Extended_Index is
+    begin
+       return Container.Last;
+    end Last_Index;
+ 
+    ------------
+    -- Length --
+    ------------
+ 
+    function Length (Container : Vector) return Count_Type is
+       L : constant Int := Int (Container.Last);
+       F : constant Int := Int (Index_Type'First);
+       N : constant Int'Base := L - F + 1;
+    begin
+       return Count_Type (N);
+    end Length;
+ 
+    ----------
+    -- Move --
+    ----------
+ 
+    procedure Move
+      (Target : in out Vector;
+       Source : in out Vector)
+    is
+       X : Elements_Access := Target.Elements;
+ 
+    begin
+       if Target'Address = Source'Address then
+          return;
+       end if;
+ 
+       if Target.Last >= Index_Type'First then
+          raise Constraint_Error;
+       end if;
+ 
+       Target.Elements := null;
+       Free (X);
+ 
+       Target.Elements := Source.Elements;
+       Target.Last := Source.Last;
+ 
+       Source.Elements := null;
+       Source.Last := Index_Type'Pred (Index_Type'First);
+    end Move;
+ 
+    ----------
+    -- Next --
+    ----------
+ 
+    function Next (Position : Cursor) return Cursor is
+    begin
+       if Position.Container = null then
+          return No_Element;
+       end if;
+ 
+       if Position.Index < Position.Container.Last then
+          return (Position.Container, Index_Type'Succ (Position.Index));
+       end if;
+ 
+       return No_Element;
+    end Next;
+ 
+    ----------
+    -- Next --
+    ----------
+ 
+    procedure Next (Position : in out Cursor) is
+    begin
+       if Position.Container = null then
+          return;
+       end if;
+ 
+       if Position.Index < Position.Container.Last then
+          Position.Index := Index_Type'Succ (Position.Index);
+       else
+          Position := No_Element;
+       end if;
+    end Next;
+ 
+    -------------
+    -- Prepend --
+    -------------
+ 
+    procedure Prepend (Container : in out Vector; New_Item : Vector) is
+    begin
+       Insert (Container, Index_Type'First, New_Item);
+    end Prepend;
+ 
+    procedure Prepend
+      (Container : in out Vector;
+       New_Item  : Element_Type;
+       Count     : Count_Type := 1)
+    is
+    begin
+       Insert (Container,
+               Index_Type'First,
+               New_Item,
+               Count);
+    end Prepend;
+ 
+    --------------
+    -- Previous --
+    --------------
+ 
+    procedure Previous (Position : in out Cursor) is
+    begin
+       if Position.Container = null then
+          return;
+       end if;
+ 
+       if Position.Index > Index_Type'First then
+          Position.Index := Index_Type'Pred (Position.Index);
+       else
+          Position := No_Element;
+       end if;
+    end Previous;
+ 
+    function Previous (Position : Cursor) return Cursor is
+    begin
+       if Position.Container = null then
+          return No_Element;
+       end if;
+ 
+       if Position.Index > Index_Type'First then
+          return (Position.Container, Index_Type'Pred (Position.Index));
+       end if;
+ 
+       return No_Element;
+    end Previous;
+ 
+    -------------------
+    -- Query_Element --
+    -------------------
+ 
+    procedure Query_Element
+      (Container : Vector;
+       Index     : Index_Type;
+       Process   : not null access procedure (Element : Element_Type))
+    is
+       subtype T is Index_Type'Base range
+         Index_Type'First .. Container.Last;
+    begin
+       Process (Container.Elements (T'(Index)));
+    end Query_Element;
+ 
+    procedure Query_Element
+      (Position : Cursor;
+       Process  : not null access procedure (Element : Element_Type))
+    is
+       Container : Vector renames Position.Container.all;
+ 
+       subtype T is Index_Type'Base range
+         Index_Type'First .. Container.Last;
+ 
+    begin
+       Process (Container.Elements (T'(Position.Index)));
+    end Query_Element;
+ 
+    ----------
+    -- Read --
+    ----------
+ 
+    procedure Read
+      (Stream    : access Root_Stream_Type'Class;
+       Container : out Vector)
+    is
+       Length : Count_Type'Base;
+       Last   : Index_Type'Base := Index_Type'Pred (Index_Type'First);
+ 
+    begin
+       Clear (Container);
+ 
+       Count_Type'Base'Read (Stream, Length);
+ 
+       if Length > Capacity (Container) then
+          Reserve_Capacity (Container, Capacity => Length);
+       end if;
+ 
+       for J in Count_Type range 1 .. Length loop
+          Last := Index_Type'Succ (Last);
+          Element_Type'Read (Stream, Container.Elements (Last));
+          Container.Last := Last;
+       end loop;
+    end Read;
+ 
+    ---------------------
+    -- Replace_Element --
+    ---------------------
+ 
+    procedure Replace_Element
+      (Container : Vector;
+       Index     : Index_Type;
+       By        : Element_Type)
+    is
+       subtype T is Index_Type'Base range
+         Index_Type'First .. Container.Last;
+    begin
+       Container.Elements (T'(Index)) := By;
+    end Replace_Element;
+ 
+    procedure Replace_Element (Position : Cursor; By : Element_Type) is
+       subtype T is Index_Type'Base range
+         Index_Type'First .. Position.Container.Last;
+    begin
+       Position.Container.Elements (T'(Position.Index)) := By;
+    end Replace_Element;
+ 
+    ----------------------
+    -- Reserve_Capacity --
+    ----------------------
+ 
+    procedure Reserve_Capacity
+      (Container : in out Vector;
+       Capacity  : Count_Type)
+    is
+       N : constant Count_Type := Length (Container);
+ 
+    begin
+       if Capacity = 0 then
+          if N = 0 then
+             declare
+                X : Elements_Access := Container.Elements;
+             begin
+                Container.Elements := null;
+                Free (X);
+             end;
+ 
+          elsif N < Container.Elements'Length then
+             declare
+                subtype Array_Index_Subtype is Index_Type'Base range
+                  Index_Type'First .. Container.Last;
+ 
+                Src : Elements_Type renames
+                        Container.Elements (Array_Index_Subtype);
+ 
+                subtype Array_Subtype is
+                  Elements_Type (Array_Index_Subtype);
+ 
+                X : Elements_Access := Container.Elements;
+ 
+             begin
+                Container.Elements := new Array_Subtype'(Src);
+                Free (X);
+             end;
+          end if;
+ 
+          return;
+       end if;
+ 
+       if Container.Elements = null then
+          declare
+             Last_As_Int : constant Int'Base :=
+                             Int (Index_Type'First) + Int (Capacity) - 1;
+ 
+             Last : constant Index_Type := Index_Type (Last_As_Int);
+ 
+             subtype Array_Subtype is
+               Elements_Type (Index_Type'First .. Last);
+ 
+          begin
+             Container.Elements := new Array_Subtype;
+          end;
+ 
+          return;
+       end if;
+ 
+       if Capacity <= N then
+          if N < Container.Elements'Length then
+             declare
+                subtype Array_Index_Subtype is Index_Type'Base range
+                  Index_Type'First .. Container.Last;
+ 
+                Src : Elements_Type renames
+                        Container.Elements (Array_Index_Subtype);
+ 
+                subtype Array_Subtype is
+                  Elements_Type (Array_Index_Subtype);
+ 
+                X : Elements_Access := Container.Elements;
+ 
+             begin
+                Container.Elements := new Array_Subtype'(Src);
+                Free (X);
+             end;
+ 
+          end if;
+ 
+          return;
+       end if;
+ 
+       if Capacity = Container.Elements'Length then
+          return;
+       end if;
+ 
+       declare
+          Last_As_Int : constant Int'Base :=
+                          Int (Index_Type'First) + Int (Capacity) - 1;
+ 
+          Last : constant Index_Type := Index_Type (Last_As_Int);
+ 
+          subtype Array_Subtype is
+            Elements_Type (Index_Type'First .. Last);
+ 
+          E : Elements_Access := new Array_Subtype;
+ 
+       begin
+          declare
+             Src : Elements_Type renames
+                     Container.Elements (Index_Type'First .. Container.Last);
+ 
+             Tgt : Elements_Type renames
+                     E (Index_Type'First .. Container.Last);
+ 
+          begin
+             Tgt := Src;
+ 
+          exception
+             when others =>
+                Free (E);
+                raise;
+          end;
+ 
+          declare
+             X : Elements_Access := Container.Elements;
+          begin
+             Container.Elements := E;
+             Free (X);
+          end;
+       end;
+    end Reserve_Capacity;
+ 
+    ------------------
+    -- Reverse_Find --
+    ------------------
+ 
+    function Reverse_Find
+      (Container : Vector;
+       Item      : Element_Type;
+       Position  : Cursor := No_Element) return Cursor
+    is
+       Last : Index_Type'Base;
+ 
+    begin
+       if Position.Container /= null
+         and then Position.Container /=
+                    Vector_Access'(Container'Unchecked_Access)
+       then
+          raise Program_Error;
+       end if;
+ 
+       if Position.Container = null
+         or else Position.Index > Container.Last
+       then
+          Last := Container.Last;
+       else
+          Last := Position.Index;
+       end if;
+ 
+       for Indx in reverse Index_Type'First .. Last loop
+          if Container.Elements (Indx) = Item then
+             return (Container'Unchecked_Access, Indx);
+          end if;
+       end loop;
+ 
+       return No_Element;
+    end Reverse_Find;
+ 
+    ------------------------
+    -- Reverse_Find_Index --
+    ------------------------
+ 
+    function Reverse_Find_Index
+      (Container : Vector;
+       Item      : Element_Type;
+       Index     : Index_Type := Index_Type'Last) return Extended_Index
+    is
+       Last : Index_Type'Base;
+ 
+    begin
+       if Index > Container.Last then
+          Last := Container.Last;
+       else
+          Last := Index;
+       end if;
+ 
+       for Indx in reverse Index_Type'First .. Last loop
+          if Container.Elements (Indx) = Item then
+             return Indx;
+          end if;
+       end loop;
+ 
+       return No_Index;
+    end Reverse_Find_Index;
+ 
+    ---------------------
+    -- Reverse_Iterate --
+    ---------------------
+ 
+    procedure Reverse_Iterate
+      (Container : Vector;
+       Process   : not null access procedure (Position : Cursor))
+    is
+    begin
+       for Indx in reverse Index_Type'First .. Container.Last loop
+          Process (Cursor'(Container'Unchecked_Access, Indx));
+       end loop;
+    end Reverse_Iterate;
+ 
+    ----------------
+    -- Set_Length --
+    ----------------
+ 
+    procedure Set_Length (Container : in out Vector; Length : Count_Type) is
+    begin
+       if Length = 0 then
+          Clear (Container);
+          return;
+       end if;
+ 
+       declare
+          Last_As_Int : constant Int'Base :=
+                          Int (Index_Type'First) + Int (Length) - 1;
+ 
+          Last        : constant Index_Type := Index_Type (Last_As_Int);
+ 
+       begin
+          if Length > Capacity (Container) then
+             Reserve_Capacity (Container, Capacity => Length);
+          end if;
+ 
+          Container.Last := Last;
+       end;
+    end Set_Length;
+ 
+    ----------
+    -- Swap --
+    ----------
+ 
+    procedure Swap
+      (Container : Vector;
+       I, J      : Index_Type)
+    is
+ 
+       subtype T is Index_Type'Base range
+         Index_Type'First .. Container.Last;
+ 
+       EI : constant Element_Type := Container.Elements (T'(I));
+ 
+    begin
+ 
+       Container.Elements (T'(I)) := Container.Elements (T'(J));
+       Container.Elements (T'(J)) := EI;
+ 
+    end Swap;
+ 
+    procedure Swap (I, J : Cursor) is
+ 
+       --  NOTE: The behavior has been liberalized here to
+       --  allow I and J to designate different containers.
+       --  TODO: Probably this is supposed to raise P_E ???
+ 
+       subtype TI is Index_Type'Base range
+         Index_Type'First .. I.Container.Last;
+ 
+       EI : Element_Type renames I.Container.Elements (TI'(I.Index));
+ 
+       EI_Copy : constant Element_Type := EI;
+ 
+       subtype TJ is Index_Type'Base range
+         Index_Type'First .. J.Container.Last;
+ 
+       EJ : Element_Type renames J.Container.Elements (TJ'(J.Index));
+ 
+    begin
+       EI := EJ;
+       EJ := EI_Copy;
+    end Swap;
+ 
+    ---------------
+    -- To_Cursor --
+    ---------------
+ 
+    function To_Cursor
+      (Container : Vector;
+       Index     : Extended_Index) return Cursor
+    is
+    begin
+       if Index not in Index_Type'First .. Container.Last then
+          return No_Element;
+       end if;
+ 
+       return Cursor'(Container'Unchecked_Access, Index);
+    end To_Cursor;
+ 
+    --------------
+    -- To_Index --
+    --------------
+ 
+    function To_Index (Position : Cursor) return Extended_Index is
+    begin
+       if Position.Container = null then
+          return No_Index;
+       end if;
+ 
+       if Position.Index <= Position.Container.Last then
+          return Position.Index;
+       end if;
+ 
+       return No_Index;
+    end To_Index;
+ 
+    ---------------
+    -- To_Vector --
+    ---------------
+ 
+    function To_Vector (Length : Count_Type) return Vector is
+    begin
+       if Length = 0 then
+          return Empty_Vector;
+       end if;
+ 
+       declare
+          First       : constant Int := Int (Index_Type'First);
+          Last_As_Int : constant Int'Base := First + Int (Length) - 1;
+          Last        : constant Index_Type := Index_Type (Last_As_Int);
+          Elements    : constant Elements_Access :=
+                          new Elements_Type (Index_Type'First .. Last);
+       begin
+          return (Controlled with Elements, Last);
+       end;
+    end To_Vector;
+ 
+    function To_Vector
+      (New_Item : Element_Type;
+       Length   : Count_Type) return Vector
+    is
+    begin
+       if Length = 0 then
+          return Empty_Vector;
+       end if;
+ 
+       declare
+          First       : constant Int := Int (Index_Type'First);
+          Last_As_Int : constant Int'Base := First + Int (Length) - 1;
+          Last        : constant Index_Type := Index_Type (Last_As_Int);
+          Elements    : constant Elements_Access :=
+                          new Elements_Type'
+                                    (Index_Type'First .. Last => New_Item);
+       begin
+          return (Controlled with Elements, Last);
+       end;
+    end To_Vector;
+ 
+    --------------------
+    -- Update_Element --
+    --------------------
+ 
+    procedure Update_Element
+      (Container : Vector;
+       Index     : Index_Type;
+       Process   : not null access procedure (Element : in out Element_Type))
+    is
+       subtype T is Index_Type'Base range
+         Index_Type'First .. Container.Last;
+    begin
+       Process (Container.Elements (T'(Index)));
+    end Update_Element;
+ 
+    procedure Update_Element
+      (Position : Cursor;
+       Process  : not null access procedure (Element : in out Element_Type))
+    is
+       subtype T is Index_Type'Base range
+         Index_Type'First .. Position.Container.Last;
+    begin
+       Process (Position.Container.Elements (T'(Position.Index)));
+    end Update_Element;
+ 
+    -----------
+    -- Write --
+    -----------
+ 
+    procedure Write
+      (Stream    : access Root_Stream_Type'Class;
+       Container : Vector)
+    is
+    begin
+       Count_Type'Base'Write (Stream, Length (Container));
+ 
+       for J in Index_Type'First .. Container.Last loop
+          Element_Type'Write (Stream, Container.Elements (J));
+       end loop;
+    end Write;
+ 
+ end Ada.Containers.Vectors;
+ 
diff -Nrcpad gcc-3.4.3/gcc/ada/a-convec.ads gcc-4.0.0/gcc/ada/a-convec.ads
*** gcc-3.4.3/gcc/ada/a-convec.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-convec.ads	Wed Feb  9 11:14:39 2005
***************
*** 0 ****
--- 1,336 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                          ADA.CONTAINERS.VECTORS                          --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ with Ada.Finalization;
+ with Ada.Streams;
+ 
+ generic
+    type Index_Type is range <>;
+    type Element_Type is private;
+ 
+    with function "=" (Left, Right : Element_Type) return Boolean is <>;
+ 
+ package Ada.Containers.Vectors is
+ pragma Preelaborate (Vectors);
+ 
+    subtype Extended_Index is Index_Type'Base
+      range Index_Type'First - 1 ..
+            Index_Type'Last +
+               Boolean'Pos (Index_Type'Base'Last > Index_Type'Last);
+ 
+    No_Index : constant Extended_Index := Extended_Index'First;
+ 
+    subtype Index_Subtype is Index_Type;
+ 
+    type Vector is tagged private;
+ 
+    type Cursor is private;
+ 
+    Empty_Vector : constant Vector;
+ 
+    No_Element : constant Cursor;
+ 
+    function To_Vector (Length : Count_Type) return Vector;
+ 
+    function To_Vector
+      (New_Item : Element_Type;
+       Length   : Count_Type) return Vector;
+ 
+    function "&" (Left, Right : Vector) return Vector;
+ 
+    function "&" (Left : Vector; Right : Element_Type) return Vector;
+ 
+    function "&" (Left : Element_Type; Right : Vector) return Vector;
+ 
+    function "&" (Left, Right : Element_Type) return Vector;
+ 
+    function "=" (Left, Right : Vector) return Boolean;
+ 
+    function Capacity (Container : Vector) return Count_Type;
+ 
+    procedure Reserve_Capacity
+      (Container : in out Vector;
+       Capacity  : Count_Type);
+ 
+    function Length (Container : Vector) return Count_Type;
+ 
+    function Is_Empty (Container : Vector) return Boolean;
+ 
+    procedure Clear (Container : in out Vector);
+ 
+    function To_Cursor
+      (Container : Vector;
+       Index     : Extended_Index) return Cursor;
+ 
+    function To_Index (Position : Cursor) return Extended_Index;
+ 
+    function Element
+      (Container : Vector;
+       Index     : Index_Type) return Element_Type;
+ 
+    function Element (Position : Cursor) return Element_Type;
+ 
+    procedure Query_Element
+      (Container : Vector;
+       Index     : Index_Type;
+       Process   : not null access procedure (Element : Element_Type));
+ 
+    procedure Query_Element
+      (Position : Cursor;
+       Process  : not null access procedure (Element : Element_Type));
+ 
+    procedure Update_Element
+      (Container : Vector;
+       Index     : Index_Type;
+       Process   : not null access procedure (Element : in out Element_Type));
+ 
+    procedure Update_Element
+      (Position : Cursor;
+       Process  : not null access procedure (Element : in out Element_Type));
+ 
+    procedure Replace_Element
+      (Container : Vector;
+       Index     : Index_Type;
+       By        : Element_Type);
+ 
+    procedure Replace_Element (Position : Cursor; By : Element_Type);
+ 
+    procedure Assign (Target : in out Vector; Source : Vector);
+ 
+    procedure Move (Target : in out Vector; Source : in out Vector);
+ 
+    procedure Insert
+      (Container : in out Vector;
+       Before    : Extended_Index;
+       New_Item  : Vector);
+ 
+    procedure Insert
+      (Container : in out Vector;
+       Before    : Cursor;
+       New_Item  : Vector);
+ 
+    procedure Insert
+      (Container : in out Vector;
+       Before    : Cursor;
+       New_Item  : Vector;
+       Position  : out Cursor);
+ 
+    procedure Insert
+      (Container : in out Vector;
+       Before    : Extended_Index;
+       New_Item  : Element_Type;
+       Count     : Count_Type := 1);
+ 
+    procedure Insert
+      (Container : in out Vector;
+       Before    : Cursor;
+       New_Item  : Element_Type;
+       Count     : Count_Type := 1);
+ 
+    procedure Insert
+      (Container : in out Vector;
+       Before    : Cursor;
+       New_Item  : Element_Type;
+       Position  : out Cursor;
+       Count     : Count_Type := 1);
+ 
+    procedure Prepend
+      (Container : in out Vector;
+       New_Item  : Vector);
+ 
+    procedure Prepend
+      (Container : in out Vector;
+       New_Item  : Element_Type;
+       Count     : Count_Type := 1);
+ 
+    procedure Append
+      (Container : in out Vector;
+       New_Item  : Vector);
+ 
+    procedure Append
+      (Container : in out Vector;
+       New_Item  : Element_Type;
+       Count     : Count_Type := 1);
+ 
+    procedure Insert_Space
+      (Container : in out Vector;
+       Before    : Extended_Index;
+       Count     : Count_Type := 1);
+ 
+    procedure Insert_Space
+      (Container : in out Vector;
+       Before    : Cursor;
+       Position  : out Cursor;
+       Count     : Count_Type := 1);
+ 
+    procedure Set_Length
+      (Container : in out Vector;
+       Length    : Count_Type);
+ 
+    procedure Delete
+      (Container : in out Vector;
+       Index     : Extended_Index;  --  TODO: verify
+       Count     : Count_Type := 1);
+ 
+    procedure Delete
+      (Container : in out Vector;
+       Position  : in out Cursor;
+       Count     : Count_Type := 1);
+ 
+    procedure Delete_First
+      (Container : in out Vector;
+       Count     : Count_Type := 1);
+ 
+    procedure Delete_Last
+      (Container : in out Vector;
+       Count     : Count_Type := 1);
+ 
+    function First_Index (Container : Vector) return Index_Type;
+ 
+    function First (Container : Vector) return Cursor;
+ 
+    function First_Element (Container : Vector) return Element_Type;
+ 
+    function Last_Index (Container : Vector) return Extended_Index;
+ 
+    function Last (Container : Vector) return Cursor;
+ 
+    function Last_Element (Container : Vector) return Element_Type;
+ 
+    procedure Swap (Container : Vector; I, J : Index_Type);
+ 
+    procedure Swap (I, J : Cursor);
+ 
+    generic
+       with function "<" (Left, Right : Element_Type) return Boolean is <>;
+    procedure Generic_Sort (Container : Vector);
+ 
+    function Find_Index
+      (Container : Vector;
+       Item      : Element_Type;
+       Index     : Index_Type := Index_Type'First) return Extended_Index;
+ 
+    function Find
+      (Container : Vector;
+       Item      : Element_Type;
+       Position  : Cursor := No_Element) return Cursor;
+ 
+    function Reverse_Find_Index
+      (Container : Vector;
+       Item      : Element_Type;
+       Index     : Index_Type := Index_Type'Last) return Extended_Index;
+ 
+    function Reverse_Find
+      (Container : Vector;
+       Item      : Element_Type;
+       Position  : Cursor := No_Element) return Cursor;
+ 
+    function Contains
+      (Container : Vector;
+       Item      : Element_Type) return Boolean;
+ 
+    function Next (Position : Cursor) return Cursor;
+ 
+    function Previous (Position : Cursor) return Cursor;
+ 
+    procedure Next (Position : in out Cursor);
+ 
+    procedure Previous (Position : in out Cursor);
+ 
+    function Has_Element (Position : Cursor) return Boolean;
+ 
+    procedure Iterate
+      (Container : Vector;
+       Process   : not null access procedure (Position : Cursor));
+ 
+    procedure Reverse_Iterate
+      (Container : Vector;
+       Process   : not null access procedure (Position : Cursor));
+ 
+ private
+ 
+    pragma Inline (First_Index);
+    pragma Inline (Last_Index);
+    pragma Inline (Element);
+    pragma Inline (First_Element);
+    pragma Inline (Last_Element);
+    pragma Inline (Query_Element);
+    pragma Inline (Update_Element);
+    pragma Inline (Replace_Element);
+    pragma Inline (Contains);
+ 
+    type Elements_Type is array (Index_Type range <>) of Element_Type;
+ 
+    function "=" (L, R : Elements_Type) return Boolean is abstract;
+ 
+    type Elements_Access is access Elements_Type;
+ 
+    use Ada.Finalization;
+ 
+    type Vector is new Controlled with record
+       Elements : Elements_Access;
+       Last     : Extended_Index := No_Index;
+    end record;
+ 
+    procedure Adjust (Container : in out Vector);
+ 
+    procedure Finalize (Container : in out Vector);
+ 
+    use Ada.Streams;
+ 
+    procedure Write
+      (Stream    : access Root_Stream_Type'Class;
+       Container : Vector);
+ 
+    for Vector'Write use Write;
+ 
+    procedure Read
+      (Stream    : access Root_Stream_Type'Class;
+       Container : out Vector);
+ 
+    for Vector'Read use Read;
+ 
+    Empty_Vector : constant Vector := (Controlled with null, No_Index);
+ 
+    type Vector_Access is access constant Vector;
+    for Vector_Access'Storage_Size use 0;
+ 
+    type Cursor is record
+       Container : Vector_Access;
+       Index     : Index_Type := Index_Type'First;
+    end record;
+ 
+    No_Element : constant Cursor := Cursor'(null, Index_Type'First);
+ 
+ end Ada.Containers.Vectors;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-coorma.adb gcc-4.0.0/gcc/ada/a-coorma.adb
*** gcc-3.4.3/gcc/ada/a-coorma.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-coorma.adb	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,1031 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                       ADA.CONTAINERS.ORDERED_MAPS                        --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Unchecked_Deallocation;
+ 
+ with Ada.Containers.Red_Black_Trees.Generic_Operations;
+ pragma Elaborate_All (Ada.Containers.Red_Black_Trees.Generic_Operations);
+ 
+ with Ada.Containers.Red_Black_Trees.Generic_Keys;
+ pragma Elaborate_All (Ada.Containers.Red_Black_Trees.Generic_Keys);
+ 
+ with System;  use type System.Address;
+ 
+ package body Ada.Containers.Ordered_Maps is
+ 
+    use Red_Black_Trees;
+ 
+    type Node_Type is limited record
+       Parent  : Node_Access;
+       Left    : Node_Access;
+       Right   : Node_Access;
+       Color   : Red_Black_Trees.Color_Type := Red;
+       Key     : Key_Type;
+       Element : Element_Type;
+    end record;
+ 
+    -----------------------------
+    -- Node Access Subprograms --
+    -----------------------------
+ 
+    --  These subprograms provide a functional interface to access fields
+    --  of a node, and a procedural interface for modifying these values.
+ 
+    function Color (Node : Node_Access) return Color_Type;
+    pragma Inline (Color);
+ 
+    function Left (Node : Node_Access) return Node_Access;
+    pragma Inline (Left);
+ 
+    function Parent (Node : Node_Access) return Node_Access;
+    pragma Inline (Parent);
+ 
+    function Right (Node : Node_Access) return Node_Access;
+    pragma Inline (Right);
+ 
+    procedure Set_Parent (Node : Node_Access; Parent : Node_Access);
+    pragma Inline (Set_Parent);
+ 
+    procedure Set_Left (Node : Node_Access; Left : Node_Access);
+    pragma Inline (Set_Left);
+ 
+    procedure Set_Right (Node : Node_Access; Right : Node_Access);
+    pragma Inline (Set_Right);
+ 
+    procedure Set_Color (Node : Node_Access; Color : Color_Type);
+    pragma Inline (Set_Color);
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    function Copy_Node (Source : Node_Access) return Node_Access;
+    pragma Inline (Copy_Node);
+ 
+    function Copy_Tree (Source_Root : Node_Access) return Node_Access;
+ 
+    procedure Delete_Tree (X : in out Node_Access);
+ 
+    function Is_Equal_Node_Node (L, R : Node_Access) return Boolean;
+    pragma Inline (Is_Equal_Node_Node);
+ 
+    function Is_Greater_Key_Node
+      (Left  : Key_Type;
+       Right : Node_Access) return Boolean;
+    pragma Inline (Is_Greater_Key_Node);
+ 
+    function Is_Less_Key_Node
+      (Left  : Key_Type;
+       Right : Node_Access) return Boolean;
+    pragma Inline (Is_Less_Key_Node);
+ 
+    --------------------------
+    -- Local Instantiations --
+    --------------------------
+ 
+    procedure Free is new Ada.Unchecked_Deallocation (Node_Type, Node_Access);
+ 
+    package Tree_Operations is
+      new Red_Black_Trees.Generic_Operations
+        (Tree_Types => Tree_Types,
+         Null_Node  => Node_Access'(null));
+ 
+    use Tree_Operations;
+ 
+    package Key_Ops is
+      new Red_Black_Trees.Generic_Keys
+        (Tree_Operations     => Tree_Operations,
+         Key_Type            => Key_Type,
+         Is_Less_Key_Node    => Is_Less_Key_Node,
+         Is_Greater_Key_Node => Is_Greater_Key_Node);
+ 
+    function Is_Equal is
+      new Tree_Operations.Generic_Equal (Is_Equal_Node_Node);
+ 
+    ---------
+    -- "<" --
+    ---------
+ 
+    function "<" (Left, Right : Cursor) return Boolean is
+    begin
+       return Left.Node.Key < Right.Node.Key;
+    end "<";
+ 
+    function "<" (Left : Cursor; Right : Key_Type) return Boolean is
+    begin
+       return Left.Node.Key < Right;
+    end "<";
+ 
+    function "<" (Left : Key_Type; Right : Cursor) return Boolean is
+    begin
+       return Left < Right.Node.Key;
+    end "<";
+ 
+    ---------
+    -- "=" --
+    ---------
+ 
+    function "=" (Left, Right : Map) return Boolean is
+    begin
+       if Left'Address = Right'Address then
+          return True;
+       end if;
+ 
+       return Is_Equal (Left.Tree, Right.Tree);
+    end "=";
+ 
+    ---------
+    -- ">" --
+    ---------
+ 
+    function ">" (Left, Right : Cursor) return Boolean is
+    begin
+       return Right.Node.Key < Left.Node.Key;
+    end ">";
+ 
+    function ">" (Left : Cursor; Right : Key_Type) return Boolean is
+    begin
+       return Right < Left.Node.Key;
+    end ">";
+ 
+    function ">" (Left : Key_Type; Right : Cursor) return Boolean is
+    begin
+       return Right.Node.Key < Left;
+    end ">";
+ 
+    ------------
+    -- Adjust --
+    ------------
+ 
+    procedure Adjust (Container : in out Map) is
+       Tree : Tree_Type renames Container.Tree;
+ 
+       N : constant Count_Type := Tree.Length;
+       X : constant Node_Access := Tree.Root;
+ 
+    begin
+       if N = 0 then
+          pragma Assert (X = null);
+          return;
+       end if;
+ 
+       Tree := (Length => 0, others => null);
+ 
+       Tree.Root := Copy_Tree (X);
+       Tree.First := Min (Tree.Root);
+       Tree.Last := Max (Tree.Root);
+       Tree.Length := N;
+    end Adjust;
+ 
+    -------------
+    -- Ceiling --
+    -------------
+ 
+    function Ceiling (Container : Map; Key : Key_Type) return Cursor is
+       Node : constant Node_Access := Key_Ops.Ceiling (Container.Tree, Key);
+ 
+    begin
+       if Node = null then
+          return No_Element;
+       end if;
+ 
+       return Cursor'(Container'Unchecked_Access, Node);
+    end Ceiling;
+ 
+    -----------
+    -- Clear --
+    -----------
+ 
+    procedure Clear (Container : in out Map) is
+       Tree : Tree_Type renames Container.Tree;
+       Root : Node_Access := Tree.Root;
+    begin
+       Tree := (Length => 0, others => null);
+       Delete_Tree (Root);
+    end Clear;
+ 
+    -----------
+    -- Color --
+    -----------
+ 
+    function Color (Node : Node_Access) return Color_Type is
+    begin
+       return Node.Color;
+    end Color;
+ 
+    --------------
+    -- Contains --
+    --------------
+ 
+    function Contains (Container : Map; Key : Key_Type) return Boolean is
+    begin
+       return Find (Container, Key) /= No_Element;
+    end Contains;
+ 
+    ---------------
+    -- Copy_Node --
+    ---------------
+ 
+    function Copy_Node (Source : Node_Access) return Node_Access is
+       Target : constant Node_Access :=
+                  new Node_Type'(Parent  => null,
+                                 Left    => null,
+                                 Right   => null,
+                                 Color   => Source.Color,
+                                 Key     => Source.Key,
+                                 Element => Source.Element);
+    begin
+       return Target;
+    end Copy_Node;
+ 
+    ---------------
+    -- Copy_Tree --
+    ---------------
+ 
+    function Copy_Tree (Source_Root : Node_Access) return Node_Access is
+       Target_Root : Node_Access := Copy_Node (Source_Root);
+       P, X : Node_Access;
+ 
+    begin
+       if Source_Root.Right /= null then
+          Target_Root.Right := Copy_Tree (Source_Root.Right);
+          Target_Root.Right.Parent := Target_Root;
+       end if;
+ 
+       P := Target_Root;
+       X := Source_Root.Left;
+ 
+       while X /= null loop
+          declare
+             Y : Node_Access := Copy_Node (X);
+ 
+          begin
+             P.Left := Y;
+             Y.Parent := P;
+ 
+             if X.Right /= null then
+                Y.Right := Copy_Tree (X.Right);
+                Y.Right.Parent := Y;
+             end if;
+ 
+             P := Y;
+             X := X.Left;
+          end;
+       end loop;
+ 
+       return Target_Root;
+ 
+    exception
+       when others =>
+          Delete_Tree (Target_Root);
+          raise;
+    end Copy_Tree;
+ 
+    ------------
+    -- Delete --
+    ------------
+ 
+    procedure Delete (Container : in out Map; Position : in out Cursor) is
+    begin
+       if Position = No_Element then
+          return;
+       end if;
+ 
+       if Position.Container /= Map_Access'(Container'Unchecked_Access) then
+          raise Program_Error;
+       end if;
+ 
+       Delete_Node_Sans_Free (Container.Tree, Position.Node);
+       Free (Position.Node);
+ 
+       Position.Container := null;
+    end Delete;
+ 
+    procedure Delete (Container : in out Map; Key : Key_Type) is
+       X : Node_Access := Key_Ops.Find (Container.Tree, Key);
+ 
+    begin
+       if X = null then
+          raise Constraint_Error;
+       end if;
+ 
+       Delete_Node_Sans_Free (Container.Tree, X);
+       Free (X);
+    end Delete;
+ 
+    ------------------
+    -- Delete_First --
+    ------------------
+ 
+    procedure Delete_First (Container : in out Map) is
+       Position : Cursor := First (Container);
+    begin
+       Delete (Container, Position);
+    end Delete_First;
+ 
+    -----------------
+    -- Delete_Last --
+    -----------------
+ 
+    procedure Delete_Last (Container : in out Map) is
+       Position : Cursor := Last (Container);
+    begin
+       Delete (Container, Position);
+    end Delete_Last;
+ 
+ 
+    -----------------
+    -- Delete_Tree --
+    -----------------
+ 
+    procedure Delete_Tree (X : in out Node_Access) is
+       Y : Node_Access;
+    begin
+       while X /= null loop
+          Y := X.Right;
+          Delete_Tree (Y);
+          Y := X.Left;
+          Free (X);
+          X := Y;
+       end loop;
+    end Delete_Tree;
+ 
+    -------------
+    -- Element --
+    -------------
+ 
+    function Element (Position : Cursor) return Element_Type is
+    begin
+       return Position.Node.Element;
+    end Element;
+ 
+    function Element (Container : Map; Key : Key_Type) return Element_Type is
+       Node : constant Node_Access := Key_Ops.Find (Container.Tree, Key);
+    begin
+       return Node.Element;
+    end Element;
+ 
+    -------------
+    -- Exclude --
+    -------------
+ 
+    procedure Exclude (Container : in out Map; Key : Key_Type) is
+       X : Node_Access := Key_Ops.Find (Container.Tree, Key);
+ 
+    begin
+       if X /= null then
+          Delete_Node_Sans_Free (Container.Tree, X);
+          Free (X);
+       end if;
+    end Exclude;
+ 
+    ----------
+    -- Find --
+    ----------
+ 
+    function Find (Container : Map; Key : Key_Type) return Cursor is
+       Node : constant Node_Access := Key_Ops.Find (Container.Tree, Key);
+ 
+    begin
+       if Node = null then
+          return No_Element;
+       end if;
+ 
+       return Cursor'(Container'Unchecked_Access, Node);
+    end Find;
+ 
+    -----------
+    -- First --
+    -----------
+ 
+    function First (Container : Map) return Cursor is
+    begin
+       if Container.Tree.First = null then
+          return No_Element;
+       end if;
+ 
+       return Cursor'(Container'Unchecked_Access, Container.Tree.First);
+    end First;
+ 
+    -------------------
+    -- First_Element --
+    -------------------
+ 
+    function First_Element (Container : Map) return Element_Type is
+    begin
+       return Container.Tree.First.Element;
+    end First_Element;
+ 
+    ---------------
+    -- First_Key --
+    ---------------
+ 
+    function First_Key (Container : Map) return Key_Type is
+    begin
+       return Container.Tree.First.Key;
+    end First_Key;
+ 
+    -----------
+    -- Floor --
+    -----------
+ 
+    function Floor (Container : Map; Key : Key_Type) return Cursor is
+       Node : constant Node_Access := Key_Ops.Floor (Container.Tree, Key);
+ 
+    begin
+       if Node = null then
+          return No_Element;
+       end if;
+ 
+       return Cursor'(Container'Unchecked_Access, Node);
+    end Floor;
+ 
+    -----------------
+    -- Has_Element --
+    -----------------
+ 
+    function Has_Element (Position : Cursor) return Boolean is
+    begin
+       return Position /= No_Element;
+    end Has_Element;
+ 
+    -------------
+    -- Include --
+    -------------
+ 
+    procedure Include
+      (Container : in out Map;
+       Key       : Key_Type;
+       New_Item  : Element_Type)
+    is
+       Position : Cursor;
+       Inserted : Boolean;
+ 
+    begin
+       Insert (Container, Key, New_Item, Position, Inserted);
+ 
+       if not Inserted then
+          Position.Node.Key := Key;
+          Position.Node.Element := New_Item;
+       end if;
+    end Include;
+ 
+    procedure Insert
+      (Container : in out Map;
+       Key       : Key_Type;
+       New_Item  : Element_Type;
+       Position  : out Cursor;
+       Inserted  : out Boolean)
+    is
+       function New_Node return Node_Access;
+       pragma Inline (New_Node);
+ 
+       procedure Insert_Post is
+         new Key_Ops.Generic_Insert_Post (New_Node);
+ 
+       procedure Insert_Sans_Hint is
+         new Key_Ops.Generic_Conditional_Insert (Insert_Post);
+ 
+       --------------
+       -- New_Node --
+       --------------
+ 
+       function New_Node return Node_Access is
+          Node : constant Node_Access :=
+                   new Node_Type'(Parent  => null,
+                                  Left    => null,
+                                  Right   => null,
+                                  Color   => Red,
+                                  Key     => Key,
+                                  Element => New_Item);
+       begin
+          return Node;
+       end New_Node;
+ 
+    --  Start of processing for Insert
+ 
+    begin
+       Insert_Sans_Hint
+         (Container.Tree,
+          Key,
+          Position.Node,
+          Inserted);
+ 
+       Position.Container := Container'Unchecked_Access;
+    end Insert;
+ 
+    procedure Insert
+      (Container : in out Map;
+       Key       : Key_Type;
+       New_Item  : Element_Type)
+    is
+       Position : Cursor;
+       Inserted : Boolean;
+ 
+    begin
+       Insert (Container, Key, New_Item, Position, Inserted);
+ 
+       if not Inserted then
+          raise Constraint_Error;
+       end if;
+    end Insert;
+ 
+    ------------
+    -- Insert --
+    ------------
+ 
+    procedure Insert
+      (Container : in out Map;
+       Key       : Key_Type;
+       Position  : out Cursor;
+       Inserted  : out Boolean)
+    is
+       function New_Node return Node_Access;
+       pragma Inline (New_Node);
+ 
+       procedure Insert_Post is
+         new Key_Ops.Generic_Insert_Post (New_Node);
+ 
+       procedure Insert_Sans_Hint is
+         new Key_Ops.Generic_Conditional_Insert (Insert_Post);
+ 
+       --------------
+       -- New_Node --
+       --------------
+ 
+       function New_Node return Node_Access is
+          Node : Node_Access := new Node_Type;
+ 
+       begin
+          begin
+             Node.Key := Key;
+          exception
+             when others =>
+                Free (Node);
+                raise;
+          end;
+ 
+          return Node;
+       end New_Node;
+ 
+    --  Start of processing for Insert
+ 
+    begin
+       Insert_Sans_Hint
+         (Container.Tree,
+          Key,
+          Position.Node,
+          Inserted);
+ 
+       Position.Container := Container'Unchecked_Access;
+    end Insert;
+ 
+    --------------
+    -- Is_Empty --
+    --------------
+ 
+    function Is_Empty (Container : Map) return Boolean is
+    begin
+       return Container.Tree.Length = 0;
+    end Is_Empty;
+ 
+    ------------------------
+    -- Is_Equal_Node_Node --
+    ------------------------
+ 
+    function Is_Equal_Node_Node
+      (L, R : Node_Access) return Boolean is
+    begin
+       return L.Element = R.Element;
+    end Is_Equal_Node_Node;
+ 
+    -------------------------
+    -- Is_Greater_Key_Node --
+    -------------------------
+ 
+    function Is_Greater_Key_Node
+      (Left  : Key_Type;
+       Right : Node_Access) return Boolean
+    is
+    begin
+       --  k > node same as node < k
+ 
+       return Right.Key < Left;
+    end Is_Greater_Key_Node;
+ 
+    ----------------------
+    -- Is_Less_Key_Node --
+    ----------------------
+ 
+    function Is_Less_Key_Node
+      (Left  : Key_Type;
+       Right : Node_Access) return Boolean
+    is
+    begin
+       return Left < Right.Key;
+    end Is_Less_Key_Node;
+ 
+    -------------
+    -- Iterate --
+    -------------
+ 
+    procedure Iterate
+      (Container : Map;
+       Process   : not null access procedure (Position : Cursor))
+    is
+       procedure Process_Node (Node : Node_Access);
+       pragma Inline (Process_Node);
+ 
+       procedure Local_Iterate is
+          new Tree_Operations.Generic_Iteration (Process_Node);
+ 
+       ------------------
+       -- Process_Node --
+       ------------------
+ 
+       procedure Process_Node (Node : Node_Access) is
+       begin
+          Process (Cursor'(Container'Unchecked_Access, Node));
+       end Process_Node;
+ 
+    --  Start of processing for Iterate
+ 
+    begin
+       Local_Iterate (Container.Tree);
+    end Iterate;
+ 
+    ---------
+    -- Key --
+    ---------
+ 
+    function Key (Position : Cursor) return Key_Type is
+    begin
+       return Position.Node.Key;
+    end Key;
+ 
+    ----------
+    -- Last --
+    ----------
+ 
+    function Last (Container : Map) return Cursor is
+    begin
+       if Container.Tree.Last = null then
+          return No_Element;
+       end if;
+ 
+       return Cursor'(Container'Unchecked_Access, Container.Tree.Last);
+    end Last;
+ 
+    ------------------
+    -- Last_Element --
+    ------------------
+ 
+    function Last_Element (Container : Map) return Element_Type is
+    begin
+       return Container.Tree.Last.Element;
+    end Last_Element;
+ 
+    --------------
+    -- Last_Key --
+    --------------
+ 
+    function Last_Key (Container : Map) return Key_Type is
+    begin
+       return Container.Tree.Last.Key;
+    end Last_Key;
+ 
+    ----------
+    -- Left --
+    ----------
+ 
+    function Left (Node : Node_Access) return Node_Access is
+    begin
+       return Node.Left;
+    end Left;
+ 
+    ------------
+    -- Length --
+    ------------
+ 
+    function Length (Container : Map) return Count_Type is
+    begin
+       return Container.Tree.Length;
+    end Length;
+ 
+    ----------
+    -- Move --
+    ----------
+ 
+    procedure Move (Target : in out Map; Source : in out Map) is
+    begin
+       if Target'Address = Source'Address then
+          return;
+       end if;
+ 
+       Move (Target => Target.Tree, Source => Source.Tree);
+    end Move;
+ 
+    ----------
+    -- Next --
+    ----------
+ 
+    procedure Next (Position : in out Cursor) is
+    begin
+       Position := Next (Position);
+    end Next;
+ 
+    function Next (Position : Cursor) return Cursor is
+    begin
+       if Position = No_Element then
+          return No_Element;
+       end if;
+ 
+       declare
+          Node : constant Node_Access :=
+                   Tree_Operations.Next (Position.Node);
+ 
+       begin
+          if Node = null then
+             return No_Element;
+          end if;
+ 
+          return Cursor'(Position.Container, Node);
+       end;
+    end Next;
+ 
+    ------------
+    -- Parent --
+    ------------
+ 
+    function Parent (Node : Node_Access) return Node_Access is
+    begin
+       return Node.Parent;
+    end Parent;
+ 
+    --------------
+    -- Previous --
+    --------------
+ 
+    procedure Previous (Position : in out Cursor) is
+    begin
+       Position := Previous (Position);
+    end Previous;
+ 
+    function Previous (Position : Cursor) return Cursor is
+    begin
+       if Position = No_Element then
+          return No_Element;
+       end if;
+ 
+       declare
+          Node : constant Node_Access :=
+                   Tree_Operations.Previous (Position.Node);
+ 
+       begin
+          if Node = null then
+             return No_Element;
+          end if;
+ 
+          return Cursor'(Position.Container, Node);
+       end;
+    end Previous;
+ 
+    -------------------
+    -- Query_Element --
+    -------------------
+ 
+    procedure Query_Element
+      (Position : Cursor;
+       Process  : not null access procedure (Element : Element_Type))
+    is
+    begin
+       Process (Position.Node.Key, Position.Node.Element);
+    end Query_Element;
+ 
+    ----------
+    -- Read --
+    ----------
+ 
+    procedure Read
+      (Stream    : access Root_Stream_Type'Class;
+       Container : out Map)
+    is
+       N : Count_Type'Base;
+ 
+       function New_Node return Node_Access;
+       pragma Inline (New_Node);
+ 
+       procedure Local_Read is new Tree_Operations.Generic_Read (New_Node);
+ 
+       --------------
+       -- New_Node --
+       --------------
+ 
+       function New_Node return Node_Access is
+          Node : Node_Access := new Node_Type;
+ 
+       begin
+          begin
+             Key_Type'Read (Stream, Node.Key);
+             Element_Type'Read (Stream, Node.Element);
+          exception
+             when others =>
+                Free (Node);
+                raise;
+          end;
+ 
+          return Node;
+       end New_Node;
+ 
+    --  Start of processing for Read
+ 
+    begin
+       Clear (Container);
+       Count_Type'Base'Read (Stream, N);
+       pragma Assert (N >= 0);
+ 
+       Local_Read (Container.Tree, N);
+    end Read;
+ 
+    -------------
+    -- Replace --
+    -------------
+ 
+    procedure Replace
+      (Container : in out Map;
+       Key       : Key_Type;
+       New_Item  : Element_Type)
+    is
+       Node : constant Node_Access := Key_Ops.Find (Container.Tree, Key);
+ 
+    begin
+       if Node = null then
+          raise Constraint_Error;
+       end if;
+ 
+       Node.Key := Key;
+       Node.Element := New_Item;
+    end Replace;
+ 
+    ---------------------
+    -- Replace_Element --
+    ---------------------
+ 
+    procedure Replace_Element (Position : Cursor; By : Element_Type) is
+    begin
+       Position.Node.Element := By;
+    end Replace_Element;
+ 
+    ---------------------
+    -- Reverse_Iterate --
+    ---------------------
+ 
+    procedure Reverse_Iterate
+      (Container : Map;
+       Process   : not null access procedure (Position : Cursor))
+    is
+       procedure Process_Node (Node : Node_Access);
+       pragma Inline (Process_Node);
+ 
+       procedure Local_Reverse_Iterate is
+          new Tree_Operations.Generic_Reverse_Iteration (Process_Node);
+ 
+       ------------------
+       -- Process_Node --
+       ------------------
+ 
+       procedure Process_Node (Node : Node_Access) is
+       begin
+          Process (Cursor'(Container'Unchecked_Access, Node));
+       end Process_Node;
+ 
+       --  Start of processing for Reverse_Iterate
+ 
+    begin
+       Local_Reverse_Iterate (Container.Tree);
+    end Reverse_Iterate;
+ 
+    -----------
+    -- Right --
+    -----------
+ 
+    function Right (Node : Node_Access) return Node_Access is
+    begin
+       return Node.Right;
+    end Right;
+ 
+    ---------------
+    -- Set_Color --
+    ---------------
+ 
+    procedure Set_Color
+      (Node  : Node_Access;
+       Color : Color_Type)
+    is
+    begin
+       Node.Color := Color;
+    end Set_Color;
+ 
+    --------------
+    -- Set_Left --
+    --------------
+ 
+    procedure Set_Left (Node : Node_Access; Left : Node_Access) is
+    begin
+       Node.Left := Left;
+    end Set_Left;
+ 
+    ----------------
+    -- Set_Parent --
+    ----------------
+ 
+    procedure Set_Parent (Node : Node_Access; Parent : Node_Access) is
+    begin
+       Node.Parent := Parent;
+    end Set_Parent;
+ 
+ 
+    ---------------
+    -- Set_Right --
+    ---------------
+ 
+    procedure Set_Right (Node : Node_Access; Right : Node_Access) is
+    begin
+       Node.Right := Right;
+    end Set_Right;
+ 
+    --------------------
+    -- Update_Element --
+    --------------------
+ 
+    procedure Update_Element
+      (Position : Cursor;
+       Process  : not null access procedure (Element : in out Element_Type))
+    is
+    begin
+       Process (Position.Node.Key, Position.Node.Element);
+    end Update_Element;
+ 
+    -----------
+    -- Write --
+    -----------
+ 
+    procedure Write
+      (Stream    : access Root_Stream_Type'Class;
+       Container : Map)
+    is
+       procedure Process (Node : Node_Access);
+       pragma Inline (Process);
+ 
+       procedure Iterate is new Tree_Operations.Generic_Iteration (Process);
+ 
+       -------------
+       -- Process --
+       -------------
+ 
+       procedure Process (Node : Node_Access) is
+       begin
+          Key_Type'Write (Stream, Node.Key);
+          Element_Type'Write (Stream, Node.Element);
+       end Process;
+ 
+    --  Start of processing for Write
+ 
+    begin
+       Count_Type'Base'Write (Stream, Container.Tree.Length);
+       Iterate (Container.Tree);
+    end Write;
+ 
+ end Ada.Containers.Ordered_Maps;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-coorma.ads gcc-4.0.0/gcc/ada/a-coorma.ads
*** gcc-3.4.3/gcc/ada/a-coorma.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-coorma.ads	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,223 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                       ADA.CONTAINERS.ORDERED_MAPS                        --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Containers.Red_Black_Trees;
+ with Ada.Finalization;
+ with Ada.Streams;
+ 
+ generic
+ 
+    type Key_Type is private;
+ 
+    type Element_Type is private;
+ 
+    with function "<" (Left, Right : Key_Type) return Boolean is <>;
+    with function "=" (Left, Right : Element_Type) return Boolean is <>;
+ 
+ package Ada.Containers.Ordered_Maps is
+ pragma Preelaborate (Ordered_Maps);
+ 
+    type Map is tagged private;
+ 
+    type Cursor is private;
+ 
+    Empty_Map : constant Map;
+ 
+    No_Element : constant Cursor;
+ 
+    function "=" (Left, Right : Map) return Boolean;
+ 
+    function Length (Container : Map) return Count_Type;
+ 
+    function Is_Empty (Container : Map) return Boolean;
+ 
+    procedure Clear (Container : in out Map);
+ 
+    function Key (Position : Cursor) return Key_Type;
+ 
+    function Element (Position : Cursor) return Element_Type;
+ 
+    procedure Query_Element
+      (Position : Cursor;
+       Process  : not null access
+                    procedure (Key : Key_Type; Element : Element_Type));
+ 
+    procedure Update_Element
+      (Position : Cursor;
+       Process  : not null access
+                    procedure (Key : Key_Type; Element : in out Element_Type));
+ 
+    procedure Replace_Element (Position : Cursor; By : in Element_Type);
+ 
+    procedure Move (Target : in out Map; Source : in out Map);
+ 
+    procedure Insert
+      (Container : in out Map;
+       Key       : Key_Type;
+       New_Item  : Element_Type;
+       Position  : out Cursor;
+       Inserted  : out Boolean);
+ 
+    procedure Insert
+      (Container : in out Map;
+       Key       : Key_Type;
+       New_Item  : Element_Type);
+ 
+    procedure Include
+      (Container : in out Map;
+       Key       : Key_Type;
+       New_Item  : Element_Type);
+ 
+    procedure Replace
+      (Container : in out Map;
+       Key       : Key_Type;
+       New_Item  : Element_Type);
+ 
+    procedure Insert
+      (Container : in out Map;
+       Key       : Key_Type;
+       Position  : out Cursor;
+       Inserted  : out Boolean);
+ 
+    procedure Delete (Container : in out Map; Key : Key_Type);
+ 
+    procedure Exclude (Container : in out Map; Key : Key_Type);
+ 
+    procedure Delete (Container : in out Map; Position : in out Cursor);
+ 
+    procedure Delete_First (Container : in out Map);
+ 
+    procedure Delete_Last (Container : in out Map);
+ 
+    function Contains (Container : Map; Key : Key_Type) return Boolean;
+ 
+    function Find (Container : Map; Key : Key_Type) return Cursor;
+ 
+    function Element (Container : Map; Key : Key_Type) return Element_Type;
+ 
+    function Floor (Container : Map; Key : Key_Type) return Cursor;
+ 
+    function Ceiling (Container : Map; Key : Key_Type) return Cursor;
+ 
+    function First (Container : Map) return Cursor;
+ 
+    function First_Key (Container : Map) return Key_Type;
+ 
+    function First_Element (Container : Map) return Element_Type;
+ 
+    function Last (Container : Map) return Cursor;
+ 
+    function Last_Key (Container : Map) return Key_Type;
+ 
+    function Last_Element (Container : Map) return Element_Type;
+ 
+    function Next (Position : Cursor) return Cursor;
+ 
+    function Previous (Position : Cursor) return Cursor;
+ 
+    procedure Next (Position : in out Cursor);
+ 
+    procedure Previous (Position : in out Cursor);
+ 
+    function Has_Element (Position : Cursor) return Boolean;
+ 
+    function "<" (Left, Right : Cursor) return Boolean;
+ 
+    function ">" (Left, Right : Cursor) return Boolean;
+ 
+    function "<" (Left : Cursor; Right : Key_Type) return Boolean;
+ 
+    function ">" (Left : Cursor; Right : Key_Type) return Boolean;
+ 
+    function "<" (Left : Key_Type; Right : Cursor) return Boolean;
+ 
+    function ">" (Left : Key_Type; Right : Cursor) return Boolean;
+ 
+    procedure Iterate
+      (Container : Map;
+       Process   : not null access procedure (Position : Cursor));
+ 
+    procedure Reverse_Iterate
+      (Container : Map;
+       Process   : not null access procedure (Position : Cursor));
+ 
+ private
+ 
+    type Node_Type;
+    type Node_Access is access Node_Type;
+ 
+    package Tree_Types is
+      new Red_Black_Trees.Generic_Tree_Types (Node_Access);
+ 
+    use Tree_Types;
+    use Ada.Finalization;
+ 
+    type Map is new Controlled with record
+       Tree : Tree_Type := (Length => 0, others => null);
+    end record;
+ 
+    procedure Adjust (Container : in out Map);
+ 
+    procedure Finalize (Container : in out Map) renames Clear;
+ 
+    type Map_Access is access constant Map;
+    for Map_Access'Storage_Size use 0;
+ 
+    type Cursor is record
+       Container : Map_Access;
+       Node      : Node_Access;
+    end record;
+ 
+    No_Element : constant Cursor := Cursor'(null, null);
+ 
+    use Ada.Streams;
+ 
+    procedure Write
+      (Stream    : access Root_Stream_Type'Class;
+       Container : Map);
+ 
+    for Map'Write use Write;
+ 
+ 
+    procedure Read
+      (Stream    : access Root_Stream_Type'Class;
+       Container : out Map);
+ 
+    for Map'Read use Read;
+ 
+    Empty_Map : constant Map :=
+                  (Controlled with Tree => (Length => 0, others => null));
+ 
+ end Ada.Containers.Ordered_Maps;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-coormu.adb gcc-4.0.0/gcc/ada/a-coormu.adb
*** gcc-3.4.3/gcc/ada/a-coormu.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-coormu.adb	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,1635 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                     ADA.CONTAINERS.ORDERED_MULTISETS                     --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Unchecked_Deallocation;
+ 
+ with Ada.Containers.Red_Black_Trees.Generic_Operations;
+ pragma Elaborate_All (Ada.Containers.Red_Black_Trees.Generic_Operations);
+ 
+ with Ada.Containers.Red_Black_Trees.Generic_Keys;
+ pragma Elaborate_All (Ada.Containers.Red_Black_Trees.Generic_Keys);
+ 
+ with Ada.Containers.Red_Black_Trees.Generic_Set_Operations;
+ pragma Elaborate_All (Ada.Containers.Red_Black_Trees.Generic_Set_Operations);
+ 
+ with System;  use type System.Address;
+ 
+ package body Ada.Containers.Ordered_Multisets is
+ 
+    use Red_Black_Trees;
+ 
+    type Node_Type is limited record
+       Parent  : Node_Access;
+       Left    : Node_Access;
+       Right   : Node_Access;
+       Color   : Red_Black_Trees.Color_Type := Red;
+       Element : Element_Type;
+    end record;
+ 
+    -----------------------------
+    -- Node Access Subprograms --
+    -----------------------------
+ 
+    --  These subprograms provide a functional interface to access fields
+    --  of a node, and a procedural interface for modifying these values.
+ 
+    function Color (Node : Node_Access) return Color_Type;
+    pragma Inline (Color);
+ 
+    function Left (Node : Node_Access) return Node_Access;
+    pragma Inline (Left);
+ 
+    function Parent (Node : Node_Access) return Node_Access;
+    pragma Inline (Parent);
+ 
+    function Right (Node : Node_Access) return Node_Access;
+    pragma Inline (Right);
+ 
+    procedure Set_Parent (Node : Node_Access; Parent : Node_Access);
+    pragma Inline (Set_Parent);
+ 
+    procedure Set_Left (Node : Node_Access; Left : Node_Access);
+    pragma Inline (Set_Left);
+ 
+    procedure Set_Right (Node : Node_Access; Right : Node_Access);
+    pragma Inline (Set_Right);
+ 
+    procedure Set_Color (Node : Node_Access; Color : Color_Type);
+    pragma Inline (Set_Color);
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    function Copy_Node (Source : Node_Access) return Node_Access;
+    pragma Inline (Copy_Node);
+ 
+    function Copy_Tree (Source_Root : Node_Access) return Node_Access;
+ 
+    procedure Delete_Tree (X : in out Node_Access);
+ 
+    procedure Insert_With_Hint
+      (Dst_Tree : in out Tree_Type;
+       Dst_Hint : Node_Access;
+       Src_Node : Node_Access;
+       Dst_Node : out Node_Access);
+ 
+    function Is_Equal_Node_Node (L, R : Node_Access) return Boolean;
+    pragma Inline (Is_Equal_Node_Node);
+ 
+    function Is_Greater_Element_Node
+      (Left  : Element_Type;
+       Right : Node_Access) return Boolean;
+    pragma Inline (Is_Greater_Element_Node);
+ 
+    function Is_Less_Element_Node
+      (Left  : Element_Type;
+       Right : Node_Access) return Boolean;
+    pragma Inline (Is_Less_Element_Node);
+ 
+    function Is_Less_Node_Node (L, R : Node_Access) return Boolean;
+    pragma Inline (Is_Less_Node_Node);
+ 
+    --------------------------
+    -- Local Instantiations --
+    --------------------------
+ 
+    package Tree_Operations is
+      new Red_Black_Trees.Generic_Operations
+        (Tree_Types => Tree_Types,
+         Null_Node  => Node_Access'(null));
+ 
+    use Tree_Operations;
+ 
+    procedure Free is
+      new Ada.Unchecked_Deallocation (Node_Type, Node_Access);
+ 
+    function Is_Equal is
+      new Tree_Operations.Generic_Equal (Is_Equal_Node_Node);
+ 
+    package Element_Keys is
+      new Red_Black_Trees.Generic_Keys
+        (Tree_Operations     => Tree_Operations,
+         Key_Type            => Element_Type,
+         Is_Less_Key_Node    => Is_Less_Element_Node,
+         Is_Greater_Key_Node => Is_Greater_Element_Node);
+ 
+    package Set_Ops is
+      new Generic_Set_Operations
+        (Tree_Operations  => Tree_Operations,
+         Insert_With_Hint => Insert_With_Hint,
+         Copy_Tree        => Copy_Tree,
+         Delete_Tree      => Delete_Tree,
+         Is_Less          => Is_Less_Node_Node,
+         Free             => Free);
+ 
+    ---------
+    -- "<" --
+    ---------
+ 
+    function "<" (Left, Right : Cursor) return Boolean is
+    begin
+       return Left.Node.Element < Right.Node.Element;
+    end "<";
+ 
+    function "<" (Left : Cursor; Right : Element_Type)
+       return Boolean is
+    begin
+       return Left.Node.Element < Right;
+    end "<";
+ 
+    function "<" (Left : Element_Type; Right : Cursor)
+       return Boolean is
+    begin
+       return Left < Right.Node.Element;
+    end "<";
+ 
+    ---------
+    -- "=" --
+    ---------
+ 
+    function "=" (Left, Right : Set) return Boolean is
+    begin
+       if Left'Address = Right'Address then
+          return True;
+       end if;
+ 
+       return Is_Equal (Left.Tree, Right.Tree);
+    end "=";
+ 
+    ---------
+    -- ">" --
+    ---------
+ 
+    function ">" (Left, Right : Cursor) return Boolean is
+    begin
+       --  L > R same as R < L
+ 
+       return Right.Node.Element < Left.Node.Element;
+    end ">";
+ 
+    function ">" (Left : Cursor; Right : Element_Type)
+       return Boolean is
+    begin
+       return Right < Left.Node.Element;
+    end ">";
+ 
+    function ">" (Left : Element_Type; Right : Cursor)
+       return Boolean is
+    begin
+       return Right.Node.Element < Left;
+    end ">";
+ 
+    ------------
+    -- Adjust --
+    ------------
+ 
+    procedure Adjust (Container : in out Set) is
+       Tree : Tree_Type renames Container.Tree;
+ 
+       N : constant Count_Type := Tree.Length;
+       X : constant Node_Access := Tree.Root;
+ 
+    begin
+       if N = 0 then
+          pragma Assert (X = null);
+          return;
+       end if;
+ 
+       Tree := (Length => 0, others => null);
+ 
+       Tree.Root := Copy_Tree (X);
+       Tree.First := Min (Tree.Root);
+       Tree.Last := Max (Tree.Root);
+       Tree.Length := N;
+    end Adjust;
+ 
+    -------------
+    -- Ceiling --
+    -------------
+ 
+    function Ceiling (Container : Set; Item : Element_Type) return Cursor is
+       Node : constant Node_Access :=
+                Element_Keys.Ceiling (Container.Tree, Item);
+ 
+    begin
+       if Node = null then
+          return No_Element;
+       end if;
+ 
+       return Cursor'(Container'Unchecked_Access, Node);
+    end Ceiling;
+ 
+    -----------
+    -- Clear --
+    -----------
+ 
+    procedure Clear (Container : in out Set) is
+       Tree : Tree_Type renames Container.Tree;
+       Root : Node_Access := Tree.Root;
+    begin
+       Tree := (Length => 0, others => null);
+       Delete_Tree (Root);
+    end Clear;
+ 
+    -----------
+    -- Color --
+    -----------
+ 
+    function Color (Node : Node_Access) return Color_Type is
+    begin
+       return Node.Color;
+    end Color;
+ 
+    --------------
+    -- Contains --
+    --------------
+ 
+    function Contains (Container : Set; Item : Element_Type) return Boolean is
+    begin
+       return Find (Container, Item) /= No_Element;
+    end Contains;
+ 
+    ---------------
+    -- Copy_Node --
+    ---------------
+ 
+    function Copy_Node (Source : Node_Access) return Node_Access is
+       Target : constant Node_Access :=
+                  new Node_Type'(Parent  => null,
+                                 Left    => null,
+                                 Right   => null,
+                                 Color   => Source.Color,
+                                 Element => Source.Element);
+    begin
+       return Target;
+    end Copy_Node;
+ 
+    ---------------
+    -- Copy_Tree --
+    ---------------
+ 
+    function Copy_Tree (Source_Root : Node_Access) return Node_Access is
+       Target_Root : Node_Access := Copy_Node (Source_Root);
+ 
+       P, X : Node_Access;
+ 
+    begin
+       if Source_Root.Right /= null then
+          Target_Root.Right := Copy_Tree (Source_Root.Right);
+          Target_Root.Right.Parent := Target_Root;
+       end if;
+ 
+       P := Target_Root;
+       X := Source_Root.Left;
+       while X /= null loop
+          declare
+             Y : Node_Access := Copy_Node (X);
+ 
+          begin
+             P.Left := Y;
+             Y.Parent := P;
+ 
+             if X.Right /= null then
+                Y.Right := Copy_Tree (X.Right);
+                Y.Right.Parent := Y;
+             end if;
+ 
+             P := Y;
+             X := X.Left;
+          end;
+       end loop;
+ 
+       return Target_Root;
+ 
+    exception
+       when others =>
+          Delete_Tree (Target_Root);
+          raise;
+    end Copy_Tree;
+ 
+    ------------
+    -- Delete --
+    ------------
+ 
+    procedure Delete (Container : in out Set; Item : Element_Type) is
+       Tree : Tree_Type renames Container.Tree;
+       Node : Node_Access := Element_Keys.Ceiling (Tree, Item);
+       Done : constant Node_Access := Element_Keys.Upper_Bound (Tree, Item);
+       X    : Node_Access;
+ 
+    begin
+       if Node = Done then
+          raise Constraint_Error;
+       end if;
+ 
+       loop
+          X := Node;
+          Node := Tree_Operations.Next (Node);
+          Tree_Operations.Delete_Node_Sans_Free (Tree, X);
+          Free (X);
+ 
+          exit when Node = Done;
+       end loop;
+    end Delete;
+ 
+    procedure Delete (Container : in out Set; Position  : in out Cursor) is
+    begin
+       if Position = No_Element then
+          return;
+       end if;
+ 
+       if Position.Container /= Set_Access'(Container'Unchecked_Access) then
+          raise Program_Error;
+       end if;
+ 
+       Delete_Node_Sans_Free (Container.Tree, Position.Node);
+       Free (Position.Node);
+ 
+       Position.Container := null;
+    end Delete;
+ 
+    ------------------
+    -- Delete_First --
+    ------------------
+ 
+    procedure Delete_First (Container : in out Set) is
+       Tree : Tree_Type renames Container.Tree;
+       X    : Node_Access := Tree.First;
+ 
+    begin
+       if X = null then
+          return;
+       end if;
+ 
+       Tree_Operations.Delete_Node_Sans_Free (Tree, X);
+       Free (X);
+    end Delete_First;
+ 
+    -----------------
+    -- Delete_Last --
+    -----------------
+ 
+    procedure Delete_Last (Container : in out Set) is
+       Tree : Tree_Type renames Container.Tree;
+       X    : Node_Access := Tree.Last;
+ 
+    begin
+       if X = null then
+          return;
+       end if;
+ 
+       Tree_Operations.Delete_Node_Sans_Free (Tree, X);
+       Free (X);
+    end Delete_Last;
+ 
+    -----------------
+    -- Delete_Tree --
+    -----------------
+ 
+    procedure Delete_Tree (X : in out Node_Access) is
+       Y : Node_Access;
+    begin
+       while X /= null loop
+          Y := X.Right;
+          Delete_Tree (Y);
+          Y := X.Left;
+          Free (X);
+          X := Y;
+       end loop;
+    end Delete_Tree;
+ 
+    ----------------
+    -- Difference --
+    ----------------
+ 
+    procedure Difference (Target : in out Set; Source : Set) is
+    begin
+       if Target'Address = Source'Address then
+          Clear (Target);
+          return;
+       end if;
+ 
+       Set_Ops.Difference (Target.Tree, Source.Tree);
+    end Difference;
+ 
+    function Difference (Left, Right : Set) return Set is
+    begin
+       if Left'Address = Right'Address then
+          return Empty_Set;
+       end if;
+ 
+       declare
+          Tree : constant Tree_Type :=
+                   Set_Ops.Difference (Left.Tree, Right.Tree);
+       begin
+          return (Controlled with Tree);
+       end;
+    end Difference;
+ 
+    -------------
+    -- Element --
+    -------------
+ 
+    function Element (Position : Cursor) return Element_Type is
+    begin
+       return Position.Node.Element;
+    end Element;
+ 
+    -------------
+    -- Exclude --
+    -------------
+ 
+    procedure Exclude (Container : in out Set; Item : Element_Type) is
+       Tree : Tree_Type renames Container.Tree;
+       Node : Node_Access := Element_Keys.Ceiling (Tree, Item);
+       Done : constant Node_Access := Element_Keys.Upper_Bound (Tree, Item);
+       X    : Node_Access;
+    begin
+       while Node /= Done loop
+          X := Node;
+          Node := Tree_Operations.Next (Node);
+          Tree_Operations.Delete_Node_Sans_Free (Tree, X);
+          Free (X);
+       end loop;
+    end Exclude;
+ 
+    ----------
+    -- Find --
+    ----------
+ 
+    function Find (Container : Set; Item : Element_Type) return Cursor is
+       Node : constant Node_Access :=
+                Element_Keys.Find (Container.Tree, Item);
+ 
+    begin
+       if Node = null then
+          return No_Element;
+       end if;
+ 
+       return Cursor'(Container'Unchecked_Access, Node);
+    end Find;
+ 
+    -----------
+    -- First --
+    -----------
+ 
+    function First (Container : Set) return Cursor is
+    begin
+       if Container.Tree.First = null then
+          return No_Element;
+       end if;
+ 
+       return Cursor'(Container'Unchecked_Access, Container.Tree.First);
+    end First;
+ 
+    -------------------
+    -- First_Element --
+    -------------------
+ 
+    function First_Element (Container : Set) return Element_Type is
+    begin
+       return Container.Tree.First.Element;
+    end First_Element;
+ 
+    -----------
+    -- Floor --
+    -----------
+ 
+    function Floor (Container : Set; Item : Element_Type) return Cursor is
+       Node : constant Node_Access :=
+                Element_Keys.Floor (Container.Tree, Item);
+ 
+    begin
+       if Node = null then
+          return No_Element;
+       end if;
+ 
+       return Cursor'(Container'Unchecked_Access, Node);
+    end Floor;
+ 
+    ------------------
+    -- Generic_Keys --
+    ------------------
+ 
+    package body Generic_Keys is
+ 
+       -----------------------
+       -- Local Subprograms --
+       -----------------------
+ 
+       function Is_Greater_Key_Node
+         (Left  : Key_Type;
+          Right : Node_Access) return Boolean;
+       pragma Inline (Is_Greater_Key_Node);
+ 
+       function Is_Less_Key_Node
+         (Left  : Key_Type;
+          Right : Node_Access) return Boolean;
+       pragma Inline (Is_Less_Key_Node);
+ 
+       --------------------------
+       -- Local_Instantiations --
+       --------------------------
+ 
+       package Key_Keys is
+          new Red_Black_Trees.Generic_Keys
+           (Tree_Operations     => Tree_Operations,
+            Key_Type            => Key_Type,
+            Is_Less_Key_Node    => Is_Less_Key_Node,
+            Is_Greater_Key_Node => Is_Greater_Key_Node);
+ 
+       ---------
+       -- "<" --
+       ---------
+ 
+       function "<" (Left : Key_Type; Right : Cursor) return Boolean is
+       begin
+          return Left < Right.Node.Element;
+       end "<";
+ 
+       function "<" (Left : Cursor; Right : Key_Type) return Boolean is
+       begin
+          return Right > Left.Node.Element;
+       end "<";
+ 
+       ---------
+       -- ">" --
+       ---------
+ 
+       function ">" (Left : Cursor; Right : Key_Type) return Boolean is
+       begin
+          return Right < Left.Node.Element;
+       end ">";
+ 
+       function ">" (Left : Key_Type; Right : Cursor) return Boolean is
+       begin
+          return Left > Right.Node.Element;
+       end ">";
+ 
+       -------------
+       -- Ceiling --
+       -------------
+ 
+       function Ceiling (Container : Set; Key : Key_Type) return Cursor is
+          Node : constant Node_Access :=
+                   Key_Keys.Ceiling (Container.Tree, Key);
+ 
+       begin
+          if Node = null then
+             return No_Element;
+          end if;
+ 
+          return Cursor'(Container'Unchecked_Access, Node);
+       end Ceiling;
+ 
+       ----------------------------
+       -- Checked_Update_Element --
+       ----------------------------
+ 
+       procedure Checked_Update_Element
+         (Container : in out Set;
+          Position  : Cursor;
+          Process   : not null access procedure (Element : in out Element_Type))
+       is
+       begin
+          if Position.Container = null then
+             raise Constraint_Error;
+          end if;
+ 
+          if Position.Container /= Set_Access'(Container'Unchecked_Access) then
+             raise Program_Error;
+          end if;
+ 
+          declare
+             Old_Key : Key_Type renames Key (Position.Node.Element);
+ 
+          begin
+             Process (Position.Node.Element);
+ 
+             if Old_Key < Position.Node.Element
+               or else Old_Key > Position.Node.Element
+             then
+                null;
+             else
+                return;
+             end if;
+          end;
+ 
+          Delete_Node_Sans_Free (Container.Tree, Position.Node);
+ 
+          Do_Insert : declare
+             Result  : Node_Access;
+ 
+             function New_Node return Node_Access;
+             pragma Inline (New_Node);
+ 
+             procedure Insert_Post is
+               new Key_Keys.Generic_Insert_Post (New_Node);
+ 
+             procedure Insert is
+               new Key_Keys.Generic_Unconditional_Insert (Insert_Post);
+ 
+             --------------
+             -- New_Node --
+             --------------
+ 
+             function New_Node return Node_Access is
+             begin
+                return Position.Node;
+             end New_Node;
+ 
+          --  Start of processing for Do_Insert
+ 
+          begin
+             Insert
+               (Tree    => Container.Tree,
+                Key     => Key (Position.Node.Element),
+                Node    => Result);
+ 
+             pragma Assert (Result = Position.Node);
+          end Do_Insert;
+       end Checked_Update_Element;
+ 
+       --------------
+       -- Contains --
+       --------------
+ 
+       function Contains (Container : Set; Key : Key_Type) return Boolean is
+       begin
+          return Find (Container, Key) /= No_Element;
+       end Contains;
+ 
+       ------------
+       -- Delete --
+       ------------
+ 
+       procedure Delete (Container : in out Set; Key : Key_Type) is
+          Tree : Tree_Type renames Container.Tree;
+          Node : Node_Access := Key_Keys.Ceiling (Tree, Key);
+          Done : constant Node_Access := Key_Keys.Upper_Bound (Tree, Key);
+          X    : Node_Access;
+ 
+       begin
+          if Node = Done then
+             raise Constraint_Error;
+          end if;
+ 
+          loop
+             X := Node;
+             Node := Tree_Operations.Next (Node);
+             Tree_Operations.Delete_Node_Sans_Free (Tree, X);
+             Free (X);
+ 
+             exit when Node = Done;
+          end loop;
+       end Delete;
+ 
+       -------------
+       -- Element --
+       -------------
+ 
+       function Element (Container : Set; Key : Key_Type) return Element_Type is
+          Node : constant Node_Access :=
+                   Key_Keys.Find (Container.Tree, Key);
+       begin
+          return Node.Element;
+       end Element;
+ 
+       -------------
+       -- Exclude --
+       -------------
+ 
+       procedure Exclude (Container : in out Set; Key : Key_Type) is
+          Tree : Tree_Type renames Container.Tree;
+          Node : Node_Access := Key_Keys.Ceiling (Tree, Key);
+          Done : constant Node_Access := Key_Keys.Upper_Bound (Tree, Key);
+          X    : Node_Access;
+       begin
+          while Node /= Done loop
+             X := Node;
+             Node := Tree_Operations.Next (Node);
+             Tree_Operations.Delete_Node_Sans_Free (Tree, X);
+             Free (X);
+          end loop;
+       end Exclude;
+ 
+       ----------
+       -- Find --
+       ----------
+ 
+       function Find (Container : Set; Key : Key_Type) return Cursor is
+          Node : constant Node_Access :=
+                   Key_Keys.Find (Container.Tree, Key);
+ 
+       begin
+          if Node = null then
+             return No_Element;
+          end if;
+ 
+          return Cursor'(Container'Unchecked_Access, Node);
+       end Find;
+ 
+       -----------
+       -- Floor --
+       -----------
+ 
+       function Floor (Container : Set; Key : Key_Type) return Cursor is
+          Node : constant Node_Access :=
+                   Key_Keys.Floor (Container.Tree, Key);
+ 
+       begin
+          if Node = null then
+             return No_Element;
+          end if;
+ 
+          return Cursor'(Container'Unchecked_Access, Node);
+       end Floor;
+ 
+       -------------------------
+       -- Is_Greater_Key_Node --
+       -------------------------
+ 
+       function Is_Greater_Key_Node
+         (Left  : Key_Type;
+          Right : Node_Access) return Boolean is
+       begin
+          return Left > Right.Element;
+       end Is_Greater_Key_Node;
+ 
+       ----------------------
+       -- Is_Less_Key_Node --
+       ----------------------
+ 
+       function Is_Less_Key_Node
+         (Left  : Key_Type;
+          Right : Node_Access) return Boolean is
+       begin
+          return Left < Right.Element;
+       end Is_Less_Key_Node;
+ 
+       -------------
+       -- Iterate --
+       -------------
+ 
+       procedure Iterate
+         (Container : Set;
+          Key       : Key_Type;
+          Process   : not null access procedure (Position : Cursor))
+       is
+          procedure Process_Node (Node : Node_Access);
+          pragma Inline (Process_Node);
+ 
+          procedure Local_Iterate is
+            new Key_Keys.Generic_Iteration (Process_Node);
+ 
+          ------------------
+          -- Process_Node --
+          ------------------
+ 
+          procedure Process_Node (Node : Node_Access) is
+          begin
+             Process (Cursor'(Container'Unchecked_Access, Node));
+          end Process_Node;
+ 
+       --  Start of processing for Iterate
+ 
+       begin
+          Local_Iterate (Container.Tree, Key);
+       end Iterate;
+ 
+       ---------
+       -- Key --
+       ---------
+ 
+       function Key (Position : Cursor) return Key_Type is
+       begin
+          return Key (Position.Node.Element);
+       end Key;
+ 
+       -------------
+       -- Replace --
+       -------------
+ 
+       --  In post-madision api:???
+ 
+ --    procedure Replace
+ --      (Container : in out Set;
+ --       Key       : Key_Type;
+ --       New_Item  : Element_Type)
+ --    is
+ --       Node : Node_Access := Key_Keys.Find (Container.Tree, Key);
+ 
+ --    begin
+ --       if Node = null then
+ --          raise Constraint_Error;
+ --       end if;
+ 
+ --       Replace_Node (Container, Node, New_Item);
+ --    end Replace;
+ 
+       ---------------------
+       -- Reverse_Iterate --
+       ---------------------
+ 
+       procedure Reverse_Iterate
+         (Container : Set;
+          Key       : Key_Type;
+          Process   : not null access procedure (Position : Cursor))
+       is
+          procedure Process_Node (Node : Node_Access);
+          pragma Inline (Process_Node);
+ 
+          procedure Local_Reverse_Iterate is
+            new Key_Keys.Generic_Reverse_Iteration (Process_Node);
+ 
+          ------------------
+          -- Process_Node --
+          ------------------
+ 
+          procedure Process_Node (Node : Node_Access) is
+          begin
+             Process (Cursor'(Container'Unchecked_Access, Node));
+          end Process_Node;
+ 
+       --  Start of processing for Reverse_Iterate
+ 
+       begin
+          Local_Reverse_Iterate (Container.Tree, Key);
+       end Reverse_Iterate;
+ 
+    end Generic_Keys;
+ 
+    -----------------
+    -- Has_Element --
+    -----------------
+ 
+    function Has_Element (Position : Cursor) return Boolean is
+    begin
+       return Position /= No_Element;
+    end Has_Element;
+ 
+    ------------
+    -- Insert --
+    ------------
+ 
+    procedure Insert (Container : in out Set; New_Item  : Element_Type) is
+       Position : Cursor;
+    begin
+       Insert (Container, New_Item, Position);
+    end Insert;
+ 
+    procedure Insert
+      (Container : in out Set;
+       New_Item  : Element_Type;
+       Position  : out Cursor)
+    is
+       function New_Node return Node_Access;
+       pragma Inline (New_Node);
+ 
+       procedure Insert_Post is
+         new Element_Keys.Generic_Insert_Post (New_Node);
+ 
+       procedure Unconditional_Insert_Sans_Hint is
+         new Element_Keys.Generic_Unconditional_Insert (Insert_Post);
+ 
+       --------------
+       -- New_Node --
+       --------------
+ 
+       function New_Node return Node_Access is
+          Node : constant Node_Access :=
+                   new Node_Type'(Parent => null,
+                                  Left   => null,
+                                  Right  => null,
+                                  Color  => Red,
+                                  Element => New_Item);
+       begin
+          return Node;
+       end New_Node;
+ 
+    --  Start of processing for Insert
+ 
+    begin
+       Unconditional_Insert_Sans_Hint
+         (Container.Tree,
+          New_Item,
+          Position.Node);
+ 
+       Position.Container := Container'Unchecked_Access;
+    end Insert;
+ 
+    ----------------------
+    -- Insert_With_Hint --
+    ----------------------
+ 
+    procedure Insert_With_Hint
+      (Dst_Tree : in out Tree_Type;
+       Dst_Hint : Node_Access;
+       Src_Node : Node_Access;
+       Dst_Node : out Node_Access)
+    is
+       function New_Node return Node_Access;
+       pragma Inline (New_Node);
+ 
+       procedure Insert_Post is
+         new Element_Keys.Generic_Insert_Post (New_Node);
+ 
+       procedure Insert_Sans_Hint is
+         new Element_Keys.Generic_Unconditional_Insert (Insert_Post);
+ 
+       procedure Local_Insert_With_Hint is
+         new Element_Keys.Generic_Unconditional_Insert_With_Hint
+           (Insert_Post,
+            Insert_Sans_Hint);
+ 
+       --------------
+       -- New_Node --
+       --------------
+ 
+       function New_Node return Node_Access is
+          Node : constant Node_Access :=
+                   new Node_Type'(Parent  => null,
+                                  Left    => null,
+                                  Right   => null,
+                                  Color   => Red,
+                                  Element => Src_Node.Element);
+       begin
+          return Node;
+       end New_Node;
+ 
+    --  Start of processing for Insert_With_Hint
+ 
+    begin
+       Local_Insert_With_Hint
+         (Dst_Tree,
+          Dst_Hint,
+          Src_Node.Element,
+          Dst_Node);
+    end Insert_With_Hint;
+ 
+    ------------------
+    -- Intersection --
+    ------------------
+ 
+    procedure Intersection (Target : in out Set; Source : Set) is
+    begin
+       if Target'Address = Source'Address then
+          return;
+       end if;
+ 
+       Set_Ops.Intersection (Target.Tree, Source.Tree);
+    end Intersection;
+ 
+    function Intersection (Left, Right : Set) return Set is
+    begin
+       if Left'Address = Right'Address then
+          return Left;
+       end if;
+ 
+       declare
+          Tree : constant Tree_Type :=
+                   Set_Ops.Intersection (Left.Tree, Right.Tree);
+       begin
+          return (Controlled with Tree);
+       end;
+    end Intersection;
+ 
+    --------------
+    -- Is_Empty --
+    --------------
+ 
+    function Is_Empty (Container : Set) return Boolean is
+    begin
+       return Container.Tree.Length = 0;
+    end Is_Empty;
+ 
+    ------------------------
+    -- Is_Equal_Node_Node --
+    ------------------------
+ 
+    function Is_Equal_Node_Node (L, R : Node_Access) return Boolean is
+    begin
+       return L.Element = R.Element;
+    end Is_Equal_Node_Node;
+ 
+    -----------------------------
+    -- Is_Greater_Element_Node --
+    -----------------------------
+ 
+    function Is_Greater_Element_Node
+      (Left  : Element_Type;
+       Right : Node_Access) return Boolean
+    is
+    begin
+       --  e > node same as node < e
+ 
+       return Right.Element < Left;
+    end Is_Greater_Element_Node;
+ 
+    --------------------------
+    -- Is_Less_Element_Node --
+    --------------------------
+ 
+    function Is_Less_Element_Node
+      (Left  : Element_Type;
+       Right : Node_Access) return Boolean
+    is
+    begin
+       return Left < Right.Element;
+    end Is_Less_Element_Node;
+ 
+    -----------------------
+    -- Is_Less_Node_Node --
+    -----------------------
+ 
+    function Is_Less_Node_Node (L, R : Node_Access) return Boolean is
+    begin
+       return L.Element < R.Element;
+    end Is_Less_Node_Node;
+ 
+    ---------------
+    -- Is_Subset --
+    ---------------
+ 
+    function Is_Subset (Subset : Set; Of_Set : Set) return Boolean is
+    begin
+       if Subset'Address = Of_Set'Address then
+          return True;
+       end if;
+ 
+       return Set_Ops.Is_Subset (Subset => Subset.Tree, Of_Set => Of_Set.Tree);
+    end Is_Subset;
+ 
+    -------------
+    -- Iterate --
+    -------------
+ 
+    procedure Iterate
+      (Container : Set;
+       Process   : not null access procedure (Position : Cursor))
+    is
+       procedure Process_Node (Node : Node_Access);
+       pragma Inline (Process_Node);
+ 
+       procedure Local_Iterate is
+         new Tree_Operations.Generic_Iteration (Process_Node);
+ 
+       ------------------
+       -- Process_Node --
+       ------------------
+ 
+       procedure Process_Node (Node : Node_Access) is
+       begin
+          Process (Cursor'(Container'Unchecked_Access, Node));
+       end Process_Node;
+ 
+    --  Start of processing for Iterate
+ 
+    begin
+       Local_Iterate (Container.Tree);
+    end Iterate;
+ 
+    procedure Iterate
+      (Container : Set;
+       Item      : Element_Type;
+       Process   : not null access procedure (Position : Cursor))
+    is
+       procedure Process_Node (Node : Node_Access);
+       pragma Inline (Process_Node);
+ 
+       procedure Local_Iterate is
+         new Element_Keys.Generic_Iteration (Process_Node);
+ 
+       ------------------
+       -- Process_Node --
+       ------------------
+ 
+       procedure Process_Node (Node : Node_Access) is
+       begin
+          Process (Cursor'(Container'Unchecked_Access, Node));
+       end Process_Node;
+ 
+    --  Start of processing for Iterate
+ 
+    begin
+       Local_Iterate (Container.Tree, Item);
+    end Iterate;
+ 
+    ----------
+    -- Last --
+    ----------
+ 
+    function Last (Container : Set) return Cursor is
+    begin
+       if Container.Tree.Last = null then
+          return No_Element;
+       end if;
+ 
+       return Cursor'(Container'Unchecked_Access, Container.Tree.Last);
+    end Last;
+ 
+    ------------------
+    -- Last_Element --
+    ------------------
+ 
+    function Last_Element (Container : Set) return Element_Type is
+    begin
+       return Container.Tree.Last.Element;
+    end Last_Element;
+ 
+    ----------
+    -- Left --
+    ----------
+ 
+    function Left (Node : Node_Access) return Node_Access is
+    begin
+       return Node.Left;
+    end Left;
+ 
+    ------------
+    -- Length --
+    ------------
+ 
+    function Length (Container : Set) return Count_Type is
+    begin
+       return Container.Tree.Length;
+    end Length;
+ 
+    ----------
+    -- Move --
+    ----------
+ 
+    procedure Move (Target : in out Set; Source : in out Set) is
+    begin
+       if Target'Address = Source'Address then
+          return;
+       end if;
+ 
+       Move (Target => Target.Tree, Source => Source.Tree);
+    end Move;
+ 
+    ----------
+    -- Next --
+    ----------
+ 
+    procedure Next (Position : in out Cursor)
+    is
+    begin
+       Position := Next (Position);
+    end Next;
+ 
+    function Next (Position : Cursor) return Cursor is
+    begin
+       if Position = No_Element then
+          return No_Element;
+       end if;
+ 
+       declare
+          Node : constant Node_Access :=
+            Tree_Operations.Next (Position.Node);
+       begin
+          if Node = null then
+             return No_Element;
+          end if;
+ 
+          return Cursor'(Position.Container, Node);
+       end;
+    end Next;
+ 
+    -------------
+    -- Overlap --
+    -------------
+ 
+    function Overlap (Left, Right : Set) return Boolean is
+    begin
+       if Left'Address = Right'Address then
+          return Left.Tree.Length /= 0;
+       end if;
+ 
+       return Set_Ops.Overlap (Left.Tree, Right.Tree);
+    end Overlap;
+ 
+    ------------
+    -- Parent --
+    ------------
+ 
+    function Parent (Node : Node_Access) return Node_Access is
+    begin
+       return Node.Parent;
+    end Parent;
+ 
+    --------------
+    -- Previous --
+    --------------
+ 
+    procedure Previous (Position : in out Cursor)
+    is
+    begin
+       Position := Previous (Position);
+    end Previous;
+ 
+    function Previous (Position : Cursor) return Cursor is
+    begin
+       if Position = No_Element then
+          return No_Element;
+       end if;
+ 
+       declare
+          Node : constant Node_Access :=
+            Tree_Operations.Previous (Position.Node);
+       begin
+          if Node = null then
+             return No_Element;
+          end if;
+ 
+          return Cursor'(Position.Container, Node);
+       end;
+    end Previous;
+ 
+    -------------------
+    -- Query_Element --
+    -------------------
+ 
+    procedure Query_Element
+      (Position : Cursor;
+       Process  : not null access procedure (Element : Element_Type))
+    is
+    begin
+       Process (Position.Node.Element);
+    end Query_Element;
+ 
+    ----------
+    -- Read --
+    ----------
+ 
+    procedure Read
+      (Stream    : access Root_Stream_Type'Class;
+       Container : out Set)
+    is
+       N : Count_Type'Base;
+ 
+       function New_Node return Node_Access;
+       pragma Inline (New_Node);
+ 
+       procedure Local_Read is new Tree_Operations.Generic_Read (New_Node);
+ 
+       --------------
+       -- New_Node --
+       --------------
+ 
+       function New_Node return Node_Access is
+          Node : Node_Access := new Node_Type;
+ 
+       begin
+          begin
+             Element_Type'Read (Stream, Node.Element);
+ 
+          exception
+             when others =>
+                Free (Node);
+                raise;
+          end;
+ 
+          return Node;
+       end New_Node;
+ 
+    --  Start of processing for Read
+ 
+    begin
+       Clear (Container);
+ 
+       Count_Type'Base'Read (Stream, N);
+       pragma Assert (N >= 0);
+ 
+       Local_Read (Container.Tree, N);
+    end Read;
+ 
+    -------------
+    -- Replace --
+    -------------
+ 
+    --  NOTE: from post-madison api ???
+ 
+ --   procedure Replace
+ --     (Container : in out Set;
+ --      Position  : Cursor;
+ --      By        : Element_Type)
+ --   is
+ --   begin
+ --      if Position.Container = null then
+ --         raise Constraint_Error;
+ --      end if;
+ 
+ --      if Position.Container /= Set_Access'(Container'Unchecked_Access) then
+ --         raise Program_Error;
+ --      end if;
+ 
+ --      Replace_Node (Container, Position.Node, By);
+ --   end Replace;
+ 
+    ------------------
+    -- Replace_Node --
+    ------------------
+ 
+    --  NOTE: from post-madison api ???
+ 
+ --   procedure Replace_Node
+ --     (Container : in out Set;
+ --      Position  : Node_Access;
+ --      By        : Element_Type)
+ --   is
+ --      Tree : Tree_Type renames Container.Tree;
+ --      Node : Node_Access := Position;
+ 
+ --   begin
+ --      if By < Node.Element
+ --        or else Node.Element < By
+ --      then
+ --         null;
+ 
+ --      else
+ --         begin
+ --            Node.Element := By;
+ 
+ --         exception
+ --            when others =>
+ --               Tree_Operations.Delete_Node_Sans_Free (Tree, Node);
+ --               Free (Node);
+ --               raise;
+ --         end;
+ 
+ --         return;
+ --      end if;
+ 
+ --      Tree_Operations.Delete_Node_Sans_Free (Tree, Node);
+ 
+ --      begin
+ --         Node.Element := By;
+ 
+ --      exception
+ --         when others =>
+ --            Free (Node);
+ --            raise;
+ --      end;
+ --
+ --      Do_Insert : declare
+ --         Result  : Node_Access;
+ --         Success : Boolean;
+ 
+ --         function New_Node return Node_Access;
+ --         pragma Inline (New_Node);
+ 
+ --         procedure Insert_Post is
+ --           new Element_Keys.Generic_Insert_Post (New_Node);
+ --
+ --         procedure Insert is
+ --           new Element_Keys.Generic_Conditional_Insert (Insert_Post);
+ 
+ --         --------------
+ --         -- New_Node --
+ --         --------------
+ 
+ --         function New_Node return Node_Access is
+ --         begin
+ --            return Node;
+ --         end New_Node;
+ 
+ --      --  Start of processing for Do_Insert
+ 
+ --      begin
+ --         Insert
+ --           (Tree    => Tree,
+ --            Key     => Node.Element,
+ --            Node    => Result,
+ --            Success => Success);
+ --
+ --         if not Success then
+ --            Free (Node);
+ --            raise Program_Error;
+ --         end if;
+ --
+ --         pragma Assert (Result = Node);
+ --      end Do_Insert;
+ --   end Replace_Node;
+ 
+    ---------------------
+    -- Reverse_Iterate --
+    ---------------------
+ 
+    procedure Reverse_Iterate
+      (Container : Set;
+       Process   : not null access procedure (Position : Cursor))
+    is
+       procedure Process_Node (Node : Node_Access);
+       pragma Inline (Process_Node);
+ 
+       procedure Local_Reverse_Iterate is
+         new Tree_Operations.Generic_Reverse_Iteration (Process_Node);
+ 
+       ------------------
+       -- Process_Node --
+       ------------------
+ 
+       procedure Process_Node (Node : Node_Access) is
+       begin
+          Process (Cursor'(Container'Unchecked_Access, Node));
+       end Process_Node;
+ 
+    --  Start of processing for Reverse_Iterate
+ 
+    begin
+       Local_Reverse_Iterate (Container.Tree);
+    end Reverse_Iterate;
+ 
+    procedure Reverse_Iterate
+      (Container : Set;
+       Item      : Element_Type;
+       Process   : not null access procedure (Position : Cursor))
+    is
+       procedure Process_Node (Node : Node_Access);
+       pragma Inline (Process_Node);
+ 
+       procedure Local_Reverse_Iterate is
+          new Element_Keys.Generic_Reverse_Iteration (Process_Node);
+ 
+       ------------------
+       -- Process_Node --
+       ------------------
+ 
+       procedure Process_Node (Node : Node_Access) is
+       begin
+          Process (Cursor'(Container'Unchecked_Access, Node));
+       end Process_Node;
+ 
+    --  Start of processing for Reverse_Iterate
+ 
+    begin
+       Local_Reverse_Iterate (Container.Tree, Item);
+    end Reverse_Iterate;
+ 
+    -----------
+    -- Right --
+    -----------
+ 
+    function Right (Node : Node_Access) return Node_Access is
+    begin
+       return Node.Right;
+    end Right;
+ 
+    ---------------
+    -- Set_Color --
+    ---------------
+ 
+    procedure Set_Color (Node : Node_Access; Color : Color_Type) is
+    begin
+       Node.Color := Color;
+    end Set_Color;
+ 
+    --------------
+    -- Set_Left --
+    --------------
+ 
+    procedure Set_Left (Node : Node_Access; Left : Node_Access) is
+    begin
+       Node.Left := Left;
+    end Set_Left;
+ 
+    ----------------
+    -- Set_Parent --
+    ----------------
+ 
+    procedure Set_Parent (Node : Node_Access; Parent : Node_Access) is
+    begin
+       Node.Parent := Parent;
+    end Set_Parent;
+ 
+    ---------------
+    -- Set_Right --
+    ---------------
+ 
+    procedure Set_Right (Node : Node_Access; Right : Node_Access) is
+    begin
+       Node.Right := Right;
+    end Set_Right;
+ 
+    --------------------------
+    -- Symmetric_Difference --
+    --------------------------
+ 
+    procedure Symmetric_Difference (Target : in out Set; Source : Set) is
+    begin
+       if Target'Address = Source'Address then
+          Clear (Target);
+          return;
+       end if;
+ 
+       Set_Ops.Symmetric_Difference (Target.Tree, Source.Tree);
+    end Symmetric_Difference;
+ 
+    function Symmetric_Difference (Left, Right : Set) return Set is
+    begin
+       if Left'Address = Right'Address then
+          return Empty_Set;
+       end if;
+ 
+       declare
+          Tree : constant Tree_Type :=
+                   Set_Ops.Symmetric_Difference (Left.Tree, Right.Tree);
+       begin
+          return (Controlled with Tree);
+       end;
+    end Symmetric_Difference;
+ 
+    -----------
+    -- Union --
+    -----------
+ 
+    procedure Union (Target : in out Set; Source : Set) is
+    begin
+       if Target'Address = Source'Address then
+          return;
+       end if;
+ 
+       Set_Ops.Union (Target.Tree, Source.Tree);
+    end Union;
+ 
+    function Union (Left, Right : Set) return Set is
+    begin
+       if Left'Address = Right'Address then
+          return Left;
+       end if;
+ 
+       declare
+          Tree : constant Tree_Type :=
+                   Set_Ops.Union (Left.Tree, Right.Tree);
+       begin
+          return (Controlled with Tree);
+       end;
+    end Union;
+ 
+    -----------
+    -- Write --
+    -----------
+ 
+    procedure Write
+      (Stream    : access Root_Stream_Type'Class;
+       Container : Set)
+    is
+       procedure Process (Node : Node_Access);
+       pragma Inline (Process);
+ 
+       procedure Iterate is
+         new Tree_Operations.Generic_Iteration (Process);
+ 
+       -------------
+       -- Process --
+       -------------
+ 
+       procedure Process (Node : Node_Access) is
+       begin
+          Element_Type'Write (Stream, Node.Element);
+       end Process;
+ 
+    --  Start of processing for Write
+ 
+    begin
+       Count_Type'Base'Write (Stream, Container.Tree.Length);
+       Iterate (Container.Tree);
+    end Write;
+ 
+ end Ada.Containers.Ordered_Multisets;
+ 
+ 
diff -Nrcpad gcc-3.4.3/gcc/ada/a-coormu.ads gcc-4.0.0/gcc/ada/a-coormu.ads
*** gcc-3.4.3/gcc/ada/a-coormu.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-coormu.ads	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,301 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                     ADA.CONTAINERS.ORDERED_MULTISETS                     --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Containers.Red_Black_Trees;
+ with Ada.Finalization;
+ with Ada.Streams;
+ 
+ generic
+    type Element_Type is private;
+ 
+    with function "<" (Left, Right : Element_Type) return Boolean is <>;
+    with function "=" (Left, Right : Element_Type) return Boolean is <>;
+ 
+ package Ada.Containers.Ordered_Multisets is
+ pragma Preelaborate (Ordered_Multisets);
+ 
+    type Set is tagged private;
+ 
+    type Cursor is private;
+ 
+    Empty_Set : constant Set;
+ 
+    No_Element : constant Cursor;
+ 
+    function "=" (Left, Right : Set) return Boolean;
+ 
+    function Length (Container : Set) return Count_Type;
+ 
+    function Is_Empty (Container : Set) return Boolean;
+ 
+    procedure Clear (Container : in out Set);
+ 
+    function Element (Position : Cursor) return Element_Type;
+ 
+    procedure Query_Element
+      (Position : Cursor;
+       Process  : not null access procedure (Element : Element_Type));
+ 
+    procedure Move
+      (Target : in out Set;
+       Source : in out Set);
+ 
+    procedure Insert
+      (Container : in out Set;
+       New_Item  : Element_Type;
+       Position  : out Cursor);
+ 
+    procedure Insert
+      (Container : in out Set;
+       New_Item  : Element_Type);
+ 
+    procedure Delete
+      (Container : in out Set;
+       Item      : Element_Type);
+ 
+    procedure Exclude
+      (Container : in out Set;
+       Item      : Element_Type);
+ 
+    procedure Delete
+      (Container : in out Set;
+       Position  : in out Cursor);
+ 
+    procedure Delete_First (Container : in out Set);
+ 
+    procedure Delete_Last (Container : in out Set);
+ 
+    --  NOTE: The following operation is named Replace in the Madison API.
+    --  However, it should be named Replace_Element. ???
+    --
+    --   procedure Replace
+    --     (Container : in out Set;
+    --      Position  : Cursor;
+    --      By        : Element_Type);
+ 
+    procedure Union (Target : in out Set; Source : Set);
+ 
+    function Union (Left, Right : Set) return Set;
+ 
+    function "or" (Left, Right : Set) return Set renames Union;
+ 
+    procedure Intersection (Target : in out Set; Source : Set);
+ 
+    function Intersection (Left, Right : Set) return Set;
+ 
+    function "and" (Left, Right : Set) return Set renames Intersection;
+ 
+    procedure Difference (Target : in out Set; Source : Set);
+ 
+    function Difference (Left, Right : Set) return Set;
+ 
+    function "-" (Left, Right : Set) return Set renames Difference;
+ 
+    procedure Symmetric_Difference (Target : in out Set; Source : Set);
+ 
+    function Symmetric_Difference (Left, Right : Set) return Set;
+ 
+    function "xor" (Left, Right : Set) return Set renames Symmetric_Difference;
+ 
+    function Overlap (Left, Right : Set) return Boolean;
+ 
+    function Is_Subset (Subset : Set; Of_Set : Set) return Boolean;
+ 
+    function Contains (Container : Set; Item : Element_Type) return Boolean;
+ 
+    function Find (Container : Set; Item : Element_Type) return Cursor;
+ 
+    function Floor (Container : Set; Item : Element_Type) return Cursor;
+ 
+    function Ceiling (Container : Set; Item : Element_Type) return Cursor;
+ 
+    function First (Container : Set) return Cursor;
+ 
+    function First_Element (Container : Set) return Element_Type;
+ 
+    function Last (Container : Set) return Cursor;
+ 
+    function Last_Element (Container : Set) return Element_Type;
+ 
+    function Next (Position : Cursor) return Cursor;
+ 
+    function Previous (Position : Cursor) return Cursor;
+ 
+    procedure Next (Position : in out Cursor);
+ 
+    procedure Previous (Position : in out Cursor);
+ 
+    function Has_Element (Position : Cursor) return Boolean;
+ 
+    function "<" (Left, Right : Cursor) return Boolean;
+ 
+    function ">" (Left, Right : Cursor) return Boolean;
+ 
+    function "<" (Left : Cursor; Right : Element_Type) return Boolean;
+ 
+    function ">" (Left : Cursor; Right : Element_Type) return Boolean;
+ 
+    function "<" (Left : Element_Type; Right : Cursor) return Boolean;
+ 
+    function ">" (Left : Element_Type; Right : Cursor) return Boolean;
+ 
+    procedure Iterate
+      (Container : Set;
+       Process   : not null access procedure (Position : Cursor));
+ 
+    procedure Reverse_Iterate
+      (Container : Set;
+       Process   : not null access procedure (Position : Cursor));
+ 
+    procedure Iterate
+      (Container : Set;
+       Item      : Element_Type;
+       Process   : not null access procedure (Position : Cursor));
+ 
+    procedure Reverse_Iterate
+      (Container : Set;
+       Item      : Element_Type;
+       Process   : not null access procedure (Position : Cursor));
+ 
+    generic
+       type Key_Type (<>) is limited private;
+ 
+       with function Key (Element : Element_Type) return Key_Type;
+ 
+       with function "<" (Left : Key_Type; Right : Element_Type)
+         return Boolean is <>;
+ 
+       with function ">" (Left : Key_Type; Right : Element_Type)
+         return Boolean is <>;
+ 
+    package Generic_Keys is
+ 
+       function Contains (Container : Set; Key : Key_Type) return Boolean;
+ 
+       function Find (Container : Set; Key : Key_Type) return Cursor;
+ 
+       function Floor (Container : Set; Key : Key_Type) return Cursor;
+ 
+       function Ceiling (Container : Set; Key : Key_Type) return Cursor;
+ 
+       function Key (Position : Cursor) return Key_Type;
+ 
+       function Element (Container : Set; Key : Key_Type) return Element_Type;
+ 
+       --  NOTE: in post-madison api ???
+       --      procedure Replace
+       --        (Container : in out Set;
+       --         Key       : Key_Type;
+       --         New_Item  : Element_Type);
+ 
+       procedure Delete (Container : in out Set; Key : Key_Type);
+ 
+       procedure Exclude (Container : in out Set; Key : Key_Type);
+ 
+       function "<" (Left : Cursor; Right : Key_Type) return Boolean;
+ 
+       function ">" (Left : Cursor; Right : Key_Type) return Boolean;
+ 
+       function "<" (Left : Key_Type; Right : Cursor) return Boolean;
+ 
+       function ">" (Left : Key_Type; Right : Cursor) return Boolean;
+ 
+       --  Should name of following be "Update_Element" ???
+ 
+       procedure Checked_Update_Element
+         (Container : in out Set;
+          Position  : Cursor;
+          Process   : not null access
+            procedure (Element : in out Element_Type));
+ 
+       procedure Iterate
+         (Container : Set;
+          Key       : Key_Type;
+          Process   : not null access procedure (Position : Cursor));
+ 
+       procedure Reverse_Iterate
+         (Container : Set;
+          Key       : Key_Type;
+          Process   : not null access procedure (Position : Cursor));
+ 
+    end Generic_Keys;
+ 
+ private
+ 
+    type Node_Type;
+    type Node_Access is access Node_Type;
+ 
+    package Tree_Types is
+      new Red_Black_Trees.Generic_Tree_Types (Node_Access);
+ 
+    use Tree_Types;
+    use Ada.Finalization;
+ 
+    type Set is new Controlled with record
+       Tree : Tree_Type := (Length => 0, others => null);
+    end record;
+ 
+    procedure Adjust (Container : in out Set);
+ 
+    procedure Finalize (Container : in out Set) renames Clear;
+ 
+    type Set_Access is access constant Set;
+    for Set_Access'Storage_Size use 0;
+ 
+    type Cursor is record
+       Container : Set_Access;
+       Node      : Node_Access;
+    end record;
+ 
+    No_Element : constant Cursor := Cursor'(null, null);
+ 
+    use Ada.Streams;
+ 
+    procedure Write
+      (Stream    : access Root_Stream_Type'Class;
+       Container : Set);
+ 
+    for Set'Write use Write;
+ 
+    procedure Read
+      (Stream    : access Root_Stream_Type'Class;
+       Container : out Set);
+ 
+    for Set'Read use Read;
+ 
+    Empty_Set : constant Set :=
+                  (Controlled with Tree => (Length => 0, others => null));
+ 
+ end Ada.Containers.Ordered_Multisets;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-coorse.adb gcc-4.0.0/gcc/ada/a-coorse.adb
*** gcc-3.4.3/gcc/ada/a-coorse.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-coorse.adb	Wed Feb  9 11:14:39 2005
***************
*** 0 ****
--- 1,1529 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                       ADA.CONTAINERS.ORDERED_SETS                        --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Unchecked_Deallocation;
+ 
+ with Ada.Containers.Red_Black_Trees.Generic_Operations;
+ pragma Elaborate_All (Ada.Containers.Red_Black_Trees.Generic_Operations);
+ 
+ with Ada.Containers.Red_Black_Trees.Generic_Keys;
+ pragma Elaborate_All (Ada.Containers.Red_Black_Trees.Generic_Keys);
+ 
+ with Ada.Containers.Red_Black_Trees.Generic_Set_Operations;
+ pragma Elaborate_All (Ada.Containers.Red_Black_Trees.Generic_Set_Operations);
+ 
+ with System;  use type System.Address;
+ 
+ package body Ada.Containers.Ordered_Sets is
+ 
+    use Red_Black_Trees;
+ 
+    type Node_Type is limited record
+       Parent  : Node_Access;
+       Left    : Node_Access;
+       Right   : Node_Access;
+       Color   : Red_Black_Trees.Color_Type := Red;
+       Element : Element_Type;
+    end record;
+ 
+    ------------------------------
+    -- Access to Fields of Node --
+    ------------------------------
+ 
+    --  These subprograms provide functional notation for access to fields
+    --  of a node, and procedural notation for modifiying these fields.
+ 
+    function Color (Node : Node_Access) return Color_Type;
+    pragma Inline (Color);
+ 
+    function Left (Node : Node_Access) return Node_Access;
+    pragma Inline (Left);
+ 
+    function Parent (Node : Node_Access) return Node_Access;
+    pragma Inline (Parent);
+ 
+    function Right (Node : Node_Access) return Node_Access;
+    pragma Inline (Right);
+ 
+    procedure Set_Color (Node : Node_Access; Color : Color_Type);
+    pragma Inline (Set_Color);
+ 
+    procedure Set_Left (Node : Node_Access; Left : Node_Access);
+    pragma Inline (Set_Left);
+ 
+    procedure Set_Right (Node : Node_Access; Right : Node_Access);
+    pragma Inline (Set_Right);
+ 
+    procedure Set_Parent (Node : Node_Access; Parent : Node_Access);
+    pragma Inline (Set_Parent);
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    function Copy_Node (Source : Node_Access) return Node_Access;
+    pragma Inline (Copy_Node);
+ 
+    function Copy_Tree (Source_Root : Node_Access) return Node_Access;
+ 
+    procedure Delete_Tree (X : in out Node_Access);
+ 
+    procedure Insert_With_Hint
+      (Dst_Tree : in out Tree_Type;
+       Dst_Hint : Node_Access;
+       Src_Node : Node_Access;
+       Dst_Node : out Node_Access);
+ 
+    function Is_Equal_Node_Node (L, R : Node_Access) return Boolean;
+    pragma Inline (Is_Equal_Node_Node);
+ 
+    function Is_Greater_Element_Node
+      (Left  : Element_Type;
+       Right : Node_Access) return Boolean;
+    pragma Inline (Is_Greater_Element_Node);
+ 
+    function Is_Less_Element_Node
+      (Left  : Element_Type;
+       Right : Node_Access) return Boolean;
+    pragma Inline (Is_Less_Element_Node);
+ 
+    function Is_Less_Node_Node (L, R : Node_Access) return Boolean;
+    pragma Inline (Is_Less_Node_Node);
+ 
+    --------------------------
+    -- Local Instantiations --
+    --------------------------
+ 
+    package Tree_Operations is
+      new Red_Black_Trees.Generic_Operations
+       (Tree_Types => Tree_Types,
+        Null_Node  => Node_Access'(null));
+ 
+    use Tree_Operations;
+ 
+    procedure Free is
+      new Ada.Unchecked_Deallocation (Node_Type, Node_Access);
+ 
+    function Is_Equal is
+      new Tree_Operations.Generic_Equal (Is_Equal_Node_Node);
+ 
+    package Element_Keys is
+      new Red_Black_Trees.Generic_Keys
+       (Tree_Operations     => Tree_Operations,
+        Key_Type            => Element_Type,
+        Is_Less_Key_Node    => Is_Less_Element_Node,
+        Is_Greater_Key_Node => Is_Greater_Element_Node);
+ 
+    package Set_Ops is
+      new Generic_Set_Operations
+       (Tree_Operations  => Tree_Operations,
+        Insert_With_Hint => Insert_With_Hint,
+        Copy_Tree        => Copy_Tree,
+        Delete_Tree      => Delete_Tree,
+        Is_Less          => Is_Less_Node_Node,
+        Free             => Free);
+ 
+    ---------
+    -- "<" --
+    ---------
+ 
+    function "<" (Left, Right : Cursor) return Boolean is
+    begin
+       return Left.Node.Element < Right.Node.Element;
+    end "<";
+ 
+    function "<" (Left : Cursor; Right : Element_Type) return Boolean is
+    begin
+       return Left.Node.Element < Right;
+    end "<";
+ 
+    function "<" (Left : Element_Type; Right : Cursor) return Boolean is
+    begin
+       return Left < Right.Node.Element;
+    end "<";
+ 
+    ---------
+    -- "=" --
+    ---------
+ 
+    function "=" (Left, Right : Set) return Boolean is
+    begin
+       if Left'Address = Right'Address then
+          return True;
+       end if;
+ 
+       return Is_Equal (Left.Tree, Right.Tree);
+    end "=";
+ 
+    ---------
+    -- ">" --
+    ---------
+ 
+    function ">" (Left, Right : Cursor) return Boolean is
+    begin
+       --  L > R same as R < L
+ 
+       return Right.Node.Element < Left.Node.Element;
+    end ">";
+ 
+    function ">" (Left : Element_Type; Right : Cursor) return Boolean is
+    begin
+       return Right.Node.Element < Left;
+    end ">";
+ 
+    function ">" (Left : Cursor; Right : Element_Type) return Boolean is
+    begin
+       return Right < Left.Node.Element;
+    end ">";
+ 
+    ------------
+    -- Adjust --
+    ------------
+ 
+    procedure Adjust (Container : in out Set) is
+       Tree : Tree_Type renames Container.Tree;
+ 
+       N : constant Count_Type := Tree.Length;
+       X : constant Node_Access := Tree.Root;
+ 
+    begin
+       if N = 0 then
+          pragma Assert (X = null);
+          return;
+       end if;
+ 
+       Tree := (Length => 0, others => null);
+ 
+       Tree.Root := Copy_Tree (X);
+       Tree.First := Min (Tree.Root);
+       Tree.Last := Max (Tree.Root);
+       Tree.Length := N;
+    end Adjust;
+ 
+    -------------
+    -- Ceiling --
+    -------------
+ 
+    function Ceiling (Container : Set; Item : Element_Type) return Cursor is
+       Node : constant Node_Access :=
+                Element_Keys.Ceiling (Container.Tree, Item);
+ 
+    begin
+       if Node = null then
+          return No_Element;
+       end if;
+ 
+       return Cursor'(Container'Unchecked_Access, Node);
+    end Ceiling;
+ 
+    -----------
+    -- Clear --
+    -----------
+ 
+    procedure Clear (Container : in out Set) is
+       Tree : Tree_Type renames Container.Tree;
+       Root : Node_Access := Tree.Root;
+    begin
+       Tree := (Length => 0, others => null);
+       Delete_Tree (Root);
+    end Clear;
+ 
+    -----------
+    -- Color --
+    -----------
+ 
+    function Color (Node : Node_Access) return Color_Type is
+    begin
+       return Node.Color;
+    end Color;
+ 
+    --------------
+    -- Contains --
+    --------------
+ 
+    function Contains
+      (Container : Set;
+       Item      : Element_Type) return Boolean
+    is
+    begin
+       return Find (Container, Item) /= No_Element;
+    end Contains;
+ 
+    ---------------
+    -- Copy_Node --
+    ---------------
+ 
+    function Copy_Node (Source : Node_Access) return Node_Access is
+       Target : constant Node_Access :=
+                  new Node_Type'(Parent  => null,
+                                 Left    => null,
+                                 Right   => null,
+                                 Color   => Source.Color,
+                                 Element => Source.Element);
+    begin
+       return Target;
+    end Copy_Node;
+ 
+    ---------------
+    -- Copy_Tree --
+    ---------------
+ 
+    function Copy_Tree (Source_Root : Node_Access) return Node_Access is
+       Target_Root : Node_Access := Copy_Node (Source_Root);
+ 
+       P, X : Node_Access;
+ 
+    begin
+       if Source_Root.Right /= null then
+          Target_Root.Right := Copy_Tree (Source_Root.Right);
+          Target_Root.Right.Parent := Target_Root;
+       end if;
+ 
+       P := Target_Root;
+       X := Source_Root.Left;
+       while X /= null loop
+          declare
+             Y : Node_Access := Copy_Node (X);
+ 
+          begin
+             P.Left := Y;
+             Y.Parent := P;
+ 
+             if X.Right /= null then
+                Y.Right := Copy_Tree (X.Right);
+                Y.Right.Parent := Y;
+             end if;
+ 
+             P := Y;
+             X := X.Left;
+          end;
+       end loop;
+ 
+       return Target_Root;
+ 
+    exception
+       when others =>
+ 
+          Delete_Tree (Target_Root);
+          raise;
+    end Copy_Tree;
+ 
+    ------------
+    -- Delete --
+    ------------
+ 
+    procedure Delete (Container : in out Set; Position : in out Cursor) is
+    begin
+       if Position = No_Element then
+          return;
+       end if;
+ 
+       if Position.Container /= Set_Access'(Container'Unchecked_Access) then
+          raise Program_Error;
+       end if;
+ 
+       Delete_Node_Sans_Free (Container.Tree, Position.Node);
+       Free (Position.Node);
+       Position.Container := null;
+    end Delete;
+ 
+    procedure Delete (Container : in out Set; Item : Element_Type) is
+       X : Node_Access := Element_Keys.Find (Container.Tree, Item);
+ 
+    begin
+       if X = null then
+          raise Constraint_Error;
+       end if;
+ 
+       Delete_Node_Sans_Free (Container.Tree, X);
+       Free (X);
+    end Delete;
+ 
+    ------------------
+    -- Delete_First --
+    ------------------
+ 
+    procedure Delete_First (Container : in out Set) is
+       C : Cursor := First (Container);
+    begin
+       Delete (Container, C);
+    end Delete_First;
+ 
+    -----------------
+    -- Delete_Last --
+    -----------------
+ 
+    procedure Delete_Last (Container : in out Set) is
+       C : Cursor := Last (Container);
+    begin
+       Delete (Container, C);
+    end Delete_Last;
+ 
+    -----------------
+    -- Delete_Tree --
+    -----------------
+ 
+    procedure Delete_Tree (X : in out Node_Access) is
+       Y : Node_Access;
+    begin
+       while X /= null loop
+          Y := X.Right;
+          Delete_Tree (Y);
+          Y := X.Left;
+          Free (X);
+          X := Y;
+       end loop;
+    end Delete_Tree;
+ 
+    ----------------
+    -- Difference --
+    ----------------
+ 
+    procedure Difference (Target : in out Set; Source : Set) is
+    begin
+       if Target'Address = Source'Address then
+          Clear (Target);
+          return;
+       end if;
+ 
+       Set_Ops.Difference (Target.Tree, Source.Tree);
+    end Difference;
+ 
+    function Difference (Left, Right : Set) return Set is
+    begin
+       if Left'Address = Right'Address then
+          return Empty_Set;
+       end if;
+ 
+       declare
+          Tree : constant Tree_Type :=
+                   Set_Ops.Difference (Left.Tree, Right.Tree);
+       begin
+          return (Controlled with Tree);
+       end;
+    end Difference;
+ 
+    -------------
+    -- Element --
+    -------------
+ 
+    function Element (Position : Cursor) return Element_Type is
+    begin
+       return Position.Node.Element;
+    end Element;
+ 
+    -------------
+    -- Exclude --
+    -------------
+ 
+    procedure Exclude (Container : in out Set; Item : Element_Type) is
+       X : Node_Access := Element_Keys.Find (Container.Tree, Item);
+ 
+    begin
+       if X /= null then
+          Delete_Node_Sans_Free (Container.Tree, X);
+          Free (X);
+       end if;
+    end Exclude;
+ 
+    ----------
+    -- Find --
+    ----------
+ 
+    function Find (Container : Set; Item : Element_Type) return Cursor is
+       Node : constant Node_Access :=
+                Element_Keys.Find (Container.Tree, Item);
+ 
+    begin
+       if Node = null then
+          return No_Element;
+       end if;
+ 
+       return Cursor'(Container'Unchecked_Access, Node);
+    end Find;
+ 
+    -----------
+    -- First --
+    -----------
+ 
+    function First (Container : Set) return Cursor is
+    begin
+       if Container.Tree.First = null then
+          return No_Element;
+       end if;
+ 
+       return Cursor'(Container'Unchecked_Access, Container.Tree.First);
+    end First;
+ 
+    -------------------
+    -- First_Element --
+    -------------------
+ 
+    function First_Element (Container : Set) return Element_Type is
+    begin
+       return Container.Tree.First.Element;
+    end First_Element;
+ 
+    -----------
+    -- Floor --
+    -----------
+ 
+    function Floor (Container : Set; Item : Element_Type) return Cursor is
+       Node : constant Node_Access :=
+                Element_Keys.Floor (Container.Tree, Item);
+ 
+    begin
+       if Node = null then
+          return No_Element;
+       end if;
+ 
+       return Cursor'(Container'Unchecked_Access, Node);
+    end Floor;
+ 
+    ------------------
+    -- Generic_Keys --
+    ------------------
+ 
+    package body Generic_Keys is
+ 
+       -----------------------
+       -- Local Subprograms --
+       -----------------------
+ 
+       function Is_Greater_Key_Node
+         (Left  : Key_Type;
+          Right : Node_Access) return Boolean;
+       pragma Inline (Is_Greater_Key_Node);
+ 
+       function Is_Less_Key_Node
+         (Left  : Key_Type;
+          Right : Node_Access) return Boolean;
+       pragma Inline (Is_Less_Key_Node);
+ 
+       --------------------------
+       -- Local Instantiations --
+       --------------------------
+ 
+       package Key_Keys is
+         new Red_Black_Trees.Generic_Keys
+           (Tree_Operations     => Tree_Operations,
+            Key_Type            => Key_Type,
+            Is_Less_Key_Node    => Is_Less_Key_Node,
+            Is_Greater_Key_Node => Is_Greater_Key_Node);
+ 
+       ---------
+       -- "<" --
+       ---------
+ 
+       function "<" (Left : Key_Type; Right : Cursor) return Boolean is
+       begin
+          return Left < Right.Node.Element;
+       end "<";
+ 
+       function "<" (Left : Cursor; Right : Key_Type) return Boolean is
+       begin
+          return Right > Left.Node.Element;
+       end "<";
+ 
+       ---------
+       -- ">" --
+       ---------
+ 
+       function ">" (Left : Key_Type; Right : Cursor) return Boolean is
+       begin
+          return Left > Right.Node.Element;
+       end ">";
+ 
+       function ">" (Left : Cursor; Right : Key_Type) return Boolean is
+       begin
+          return Right < Left.Node.Element;
+       end ">";
+ 
+       -------------
+       -- Ceiling --
+       -------------
+ 
+       function Ceiling (Container : Set; Key : Key_Type) return Cursor is
+          Node : constant Node_Access :=
+                   Key_Keys.Ceiling (Container.Tree, Key);
+ 
+       begin
+          if Node = null then
+             return No_Element;
+          end if;
+ 
+          return Cursor'(Container'Unchecked_Access, Node);
+       end Ceiling;
+ 
+       ----------------------------
+       -- Checked_Update_Element --
+       ----------------------------
+ 
+       procedure Checked_Update_Element
+         (Container : in out Set;
+          Position  : Cursor;
+          Process   : not null access procedure (Element : in out Element_Type))
+       is
+       begin
+          if Position.Container = null then
+             raise Constraint_Error;
+          end if;
+ 
+          if Position.Container /= Set_Access'(Container'Unchecked_Access) then
+             raise Program_Error;
+          end if;
+ 
+          declare
+             Old_Key : Key_Type renames Key (Position.Node.Element);
+ 
+          begin
+             Process (Position.Node.Element);
+ 
+             if Old_Key < Position.Node.Element
+               or else Old_Key > Position.Node.Element
+             then
+                null;
+             else
+                return;
+             end if;
+          end;
+ 
+          Delete_Node_Sans_Free (Container.Tree, Position.Node);
+ 
+          declare
+             Result  : Node_Access;
+             Success : Boolean;
+ 
+             function New_Node return Node_Access;
+             pragma Inline (New_Node);
+ 
+             procedure Local_Insert_Post is
+               new Key_Keys.Generic_Insert_Post (New_Node);
+ 
+             procedure Local_Conditional_Insert is
+                new Key_Keys.Generic_Conditional_Insert (Local_Insert_Post);
+ 
+             --------------
+             -- New_Node --
+             --------------
+ 
+             function New_Node return Node_Access is
+             begin
+                return Position.Node;
+             end New_Node;
+ 
+ 
+          begin
+             Local_Conditional_Insert
+               (Tree    => Container.Tree,
+                Key     => Key (Position.Node.Element),
+                Node    => Result,
+                Success => Success);
+ 
+             if not Success then
+                declare
+                   X : Node_Access := Position.Node;
+                begin
+                   Free (X);
+                end;
+ 
+                raise Program_Error;
+             end if;
+ 
+             pragma Assert (Result = Position.Node);
+          end;
+       end Checked_Update_Element;
+ 
+       --------------
+       -- Contains --
+       --------------
+ 
+       function Contains (Container : Set; Key : Key_Type) return Boolean is
+       begin
+          return Find (Container, Key) /= No_Element;
+       end Contains;
+ 
+       ------------
+       -- Delete --
+       ------------
+ 
+       procedure Delete (Container : in out Set; Key : Key_Type) is
+          X : Node_Access := Key_Keys.Find (Container.Tree, Key);
+ 
+       begin
+          if X = null then
+             raise Constraint_Error;
+          end if;
+ 
+          Delete_Node_Sans_Free (Container.Tree, X);
+          Free (X);
+       end Delete;
+ 
+       -------------
+       -- Element --
+       -------------
+ 
+       function Element
+         (Container : Set;
+          Key       : Key_Type) return Element_Type
+       is
+          Node : constant Node_Access := Key_Keys.Find (Container.Tree, Key);
+       begin
+          return Node.Element;
+       end Element;
+ 
+       -------------
+       -- Exclude --
+       -------------
+ 
+       procedure Exclude (Container : in out Set; Key : Key_Type) is
+          X : Node_Access := Key_Keys.Find (Container.Tree, Key);
+       begin
+          if X /= null then
+             Delete_Node_Sans_Free (Container.Tree, X);
+             Free (X);
+          end if;
+       end Exclude;
+ 
+       ----------
+       -- Find --
+       ----------
+ 
+       function Find (Container : Set; Key : Key_Type) return Cursor is
+          Node : constant Node_Access := Key_Keys.Find (Container.Tree, Key);
+ 
+       begin
+          if Node = null then
+             return No_Element;
+          end if;
+ 
+          return Cursor'(Container'Unchecked_Access, Node);
+       end Find;
+ 
+       -----------
+       -- Floor --
+       -----------
+ 
+       function Floor (Container : Set; Key : Key_Type) return Cursor is
+          Node : constant Node_Access := Key_Keys.Floor (Container.Tree, Key);
+ 
+       begin
+          if Node = null then
+             return No_Element;
+          end if;
+ 
+          return Cursor'(Container'Unchecked_Access, Node);
+       end Floor;
+ 
+       -------------------------
+       -- Is_Greater_Key_Node --
+       -------------------------
+ 
+       function Is_Greater_Key_Node
+         (Left  : Key_Type;
+          Right : Node_Access) return Boolean
+       is
+       begin
+          return Left > Right.Element;
+       end Is_Greater_Key_Node;
+ 
+       ----------------------
+       -- Is_Less_Key_Node --
+       ----------------------
+ 
+       function Is_Less_Key_Node
+         (Left  : Key_Type;
+          Right : Node_Access) return Boolean
+       is
+       begin
+          return Left < Right.Element;
+       end Is_Less_Key_Node;
+ 
+       ---------
+       -- Key --
+       ---------
+ 
+       function Key (Position : Cursor) return Key_Type is
+       begin
+          return Key (Position.Node.Element);
+       end Key;
+ 
+       -------------
+       -- Replace --
+       -------------
+ 
+ --    TODO???
+ 
+ --    procedure Replace
+ --      (Container : in out Set;
+ --        Key       : Key_Type;
+ --        New_Item  : Element_Type)
+ --    is
+ --       Node : Node_Access := Key_Keys.Find (Container.Tree, Key);
+ 
+ --    begin
+ --       if Node = null then
+ --          raise Constraint_Error;
+ --       end if;
+ 
+ --        Replace_Element (Container, Node, New_Item);
+ --     end Replace;
+ 
+    end Generic_Keys;
+ 
+    -----------------
+    -- Has_Element --
+    -----------------
+ 
+    function Has_Element (Position : Cursor) return Boolean is
+    begin
+       return Position /= No_Element;
+    end Has_Element;
+ 
+    -------------
+    -- Include --
+    -------------
+ 
+    procedure Include (Container : in out Set; New_Item : Element_Type) is
+       Position : Cursor;
+       Inserted : Boolean;
+ 
+    begin
+       Insert (Container, New_Item, Position, Inserted);
+ 
+       if not Inserted then
+          Position.Node.Element := New_Item;
+       end if;
+    end Include;
+ 
+    ------------
+    -- Insert --
+    ------------
+ 
+    procedure Insert
+      (Container : in out Set;
+       New_Item  : Element_Type;
+       Position  : out Cursor;
+       Inserted  : out Boolean)
+    is
+       function New_Node return Node_Access;
+       pragma Inline (New_Node);
+ 
+       procedure Insert_Post is
+         new Element_Keys.Generic_Insert_Post (New_Node);
+ 
+       procedure Insert_Sans_Hint is
+         new Element_Keys.Generic_Conditional_Insert (Insert_Post);
+ 
+       --------------
+       -- New_Node --
+       --------------
+ 
+       function New_Node return Node_Access is
+          Node : constant Node_Access :=
+                   new Node_Type'(Parent => null,
+                                  Left   => null,
+                                  Right  => null,
+                                  Color  => Red,
+                                  Element => New_Item);
+       begin
+          return Node;
+       end New_Node;
+ 
+    --  Start of processing for Insert
+ 
+    begin
+       Insert_Sans_Hint
+         (Container.Tree,
+          New_Item,
+          Position.Node,
+          Inserted);
+ 
+       Position.Container := Container'Unchecked_Access;
+    end Insert;
+ 
+    procedure Insert
+      (Container : in out Set;
+       New_Item  : Element_Type)
+    is
+ 
+       Position : Cursor;
+       Inserted : Boolean;
+ 
+    begin
+       Insert (Container, New_Item, Position, Inserted);
+ 
+       if not Inserted then
+          raise Constraint_Error;
+       end if;
+    end Insert;
+ 
+    ----------------------
+    -- Insert_With_Hint --
+    ----------------------
+ 
+    procedure Insert_With_Hint
+      (Dst_Tree : in out Tree_Type;
+       Dst_Hint : Node_Access;
+       Src_Node : Node_Access;
+       Dst_Node : out Node_Access)
+    is
+       Success : Boolean;
+ 
+       function New_Node return Node_Access;
+       pragma Inline (New_Node);
+ 
+       procedure Insert_Post is
+         new Element_Keys.Generic_Insert_Post (New_Node);
+ 
+       procedure Insert_Sans_Hint is
+         new Element_Keys.Generic_Conditional_Insert (Insert_Post);
+ 
+       procedure Local_Insert_With_Hint is
+         new Element_Keys.Generic_Conditional_Insert_With_Hint
+           (Insert_Post,
+            Insert_Sans_Hint);
+ 
+       --------------
+       -- New_Node --
+       --------------
+ 
+       function New_Node return Node_Access is
+          Node : constant Node_Access :=
+            new Node_Type'(Parent  => null,
+                           Left    => null,
+                           Right   => null,
+                           Color   => Red,
+                           Element => Src_Node.Element);
+       begin
+          return Node;
+       end New_Node;
+ 
+    --  Start of processing for Insert_With_Hint
+ 
+    begin
+       Local_Insert_With_Hint
+         (Dst_Tree,
+          Dst_Hint,
+          Src_Node.Element,
+          Dst_Node,
+          Success);
+    end Insert_With_Hint;
+ 
+    ------------------
+    -- Intersection --
+    ------------------
+ 
+    procedure Intersection (Target : in out Set; Source : Set) is
+    begin
+       if Target'Address = Source'Address then
+          return;
+       end if;
+ 
+       Set_Ops.Intersection (Target.Tree, Source.Tree);
+    end Intersection;
+ 
+    function Intersection (Left, Right : Set) return Set is
+    begin
+       if Left'Address = Right'Address then
+          return Left;
+       end if;
+ 
+       declare
+          Tree : constant Tree_Type :=
+                   Set_Ops.Intersection (Left.Tree, Right.Tree);
+       begin
+          return (Controlled with Tree);
+       end;
+    end Intersection;
+ 
+    --------------
+    -- Is_Empty --
+    --------------
+ 
+    function Is_Empty (Container : Set) return Boolean is
+    begin
+       return Length (Container) = 0;
+    end Is_Empty;
+ 
+    ------------------------
+    -- Is_Equal_Node_Node --
+    ------------------------
+ 
+    function Is_Equal_Node_Node (L, R : Node_Access) return Boolean is
+    begin
+       return L.Element = R.Element;
+    end Is_Equal_Node_Node;
+ 
+    -----------------------------
+    -- Is_Greater_Element_Node --
+    -----------------------------
+ 
+    function Is_Greater_Element_Node
+      (Left  : Element_Type;
+       Right : Node_Access) return Boolean
+    is
+    begin
+       --  Compute e > node same as node < e
+ 
+       return Right.Element < Left;
+    end Is_Greater_Element_Node;
+ 
+    --------------------------
+    -- Is_Less_Element_Node --
+    --------------------------
+ 
+    function Is_Less_Element_Node
+      (Left  : Element_Type;
+       Right : Node_Access) return Boolean
+    is
+    begin
+       return Left < Right.Element;
+    end Is_Less_Element_Node;
+ 
+    -----------------------
+    -- Is_Less_Node_Node --
+    -----------------------
+ 
+    function Is_Less_Node_Node (L, R : Node_Access) return Boolean is
+    begin
+       return L.Element < R.Element;
+    end Is_Less_Node_Node;
+ 
+    ---------------
+    -- Is_Subset --
+    ---------------
+ 
+    function Is_Subset (Subset : Set; Of_Set : Set) return Boolean is
+    begin
+       if Subset'Address = Of_Set'Address then
+          return True;
+       end if;
+ 
+       return Set_Ops.Is_Subset (Subset => Subset.Tree, Of_Set => Of_Set.Tree);
+    end Is_Subset;
+ 
+    -------------
+    -- Iterate --
+    -------------
+ 
+    procedure Iterate
+      (Container : Set;
+       Process   : not null access procedure (Position : Cursor))
+    is
+       procedure Process_Node (Node : Node_Access);
+       pragma Inline (Process_Node);
+ 
+       procedure Local_Iterate is
+         new Tree_Operations.Generic_Iteration (Process_Node);
+ 
+       ------------------
+       -- Process_Node --
+       ------------------
+ 
+       procedure Process_Node (Node : Node_Access) is
+       begin
+          Process (Cursor'(Container'Unchecked_Access, Node));
+       end Process_Node;
+ 
+    --  Start of prccessing for Iterate
+ 
+    begin
+       Local_Iterate (Container.Tree);
+    end Iterate;
+ 
+    ----------
+    -- Last --
+    ----------
+ 
+    function Last (Container : Set) return Cursor is
+    begin
+       if Container.Tree.Last = null then
+          return No_Element;
+       end if;
+ 
+       return Cursor'(Container'Unchecked_Access, Container.Tree.Last);
+    end Last;
+ 
+    ------------------
+    -- Last_Element --
+    ------------------
+ 
+    function Last_Element (Container : Set) return Element_Type is
+    begin
+       return Container.Tree.Last.Element;
+    end Last_Element;
+ 
+    ----------
+    -- Left --
+    ----------
+ 
+    function Left (Node : Node_Access) return Node_Access is
+    begin
+       return Node.Left;
+    end Left;
+ 
+    ------------
+    -- Length --
+    ------------
+ 
+    function Length (Container : Set) return Count_Type is
+    begin
+       return Container.Tree.Length;
+    end Length;
+ 
+    ----------
+    -- Move --
+    ----------
+ 
+    procedure Move (Target : in out Set; Source : in out Set) is
+    begin
+       if Target'Address = Source'Address then
+          return;
+       end if;
+ 
+       Move (Target => Target.Tree, Source => Source.Tree);
+    end Move;
+ 
+    ----------
+    -- Next --
+    ----------
+ 
+    function Next (Position : Cursor) return Cursor is
+    begin
+       if Position = No_Element then
+          return No_Element;
+       end if;
+ 
+       declare
+          Node : constant Node_Access :=
+            Tree_Operations.Next (Position.Node);
+       begin
+          if Node = null then
+             return No_Element;
+          end if;
+ 
+          return Cursor'(Position.Container, Node);
+       end;
+    end Next;
+ 
+    procedure Next (Position : in out Cursor) is
+    begin
+       Position := Next (Position);
+    end Next;
+ 
+    -------------
+    -- Overlap --
+    -------------
+ 
+    function Overlap (Left, Right : Set) return Boolean is
+    begin
+       if Left'Address = Right'Address then
+          return Left.Tree.Length /= 0;
+       end if;
+ 
+       return Set_Ops.Overlap (Left.Tree, Right.Tree);
+    end Overlap;
+ 
+    ------------
+    -- Parent --
+    ------------
+ 
+    function Parent (Node : Node_Access) return Node_Access is
+    begin
+       return Node.Parent;
+    end Parent;
+ 
+    --------------
+    -- Previous --
+    --------------
+ 
+    function Previous (Position : Cursor) return Cursor is
+    begin
+       if Position = No_Element then
+          return No_Element;
+       end if;
+ 
+       declare
+          Node : constant Node_Access :=
+                   Tree_Operations.Previous (Position.Node);
+ 
+       begin
+          if Node = null then
+             return No_Element;
+          end if;
+ 
+          return Cursor'(Position.Container, Node);
+       end;
+    end Previous;
+ 
+    procedure Previous (Position : in out Cursor) is
+    begin
+       Position := Previous (Position);
+    end Previous;
+ 
+    -------------------
+    -- Query_Element --
+    -------------------
+ 
+    procedure Query_Element
+      (Position : Cursor;
+       Process  : not null access procedure (Element : Element_Type))
+    is
+    begin
+       Process (Position.Node.Element);
+    end Query_Element;
+ 
+    ----------
+    -- Read --
+    ----------
+ 
+    procedure Read
+      (Stream    : access Root_Stream_Type'Class;
+       Container : out Set)
+    is
+       N : Count_Type'Base;
+ 
+       function New_Node return Node_Access;
+       pragma Inline (New_Node);
+ 
+       procedure Local_Read is new Tree_Operations.Generic_Read (New_Node);
+ 
+       --------------
+       -- New_Node --
+       --------------
+ 
+       function New_Node return Node_Access is
+          Node : Node_Access := new Node_Type;
+ 
+       begin
+          begin
+             Element_Type'Read (Stream, Node.Element);
+ 
+          exception
+             when others =>
+                Free (Node);
+                raise;
+          end;
+ 
+          return Node;
+       end New_Node;
+ 
+    --  Start of processing for Read
+ 
+    begin
+       Clear (Container);
+ 
+       Count_Type'Base'Read (Stream, N);
+       pragma Assert (N >= 0);
+ 
+       Local_Read (Container.Tree, N);
+    end Read;
+ 
+    -------------
+    -- Replace --
+    -------------
+ 
+    procedure Replace (Container : in out Set; New_Item : Element_Type) is
+       Node : constant Node_Access :=
+                Element_Keys.Find (Container.Tree, New_Item);
+ 
+    begin
+       if Node = null then
+          raise Constraint_Error;
+       end if;
+ 
+       Node.Element := New_Item;
+    end Replace;
+ 
+    ---------------------
+    -- Replace_Element --
+    ---------------------
+ 
+ --  TODO: ???
+ --     procedure Replace_Element
+ --       (Container : in out Set;
+ --        Position  : Node_Access;
+ --        By        : Element_Type)
+ --     is
+ --        Node : Node_Access := Position;
+ 
+ --     begin
+ --        if By < Node.Element
+ --          or else Node.Element < By
+ --        then
+ --           null;
+ 
+ --        else
+ --           begin
+ --              Node.Element := By;
+ 
+ --           exception
+ --              when others =>
+ --                 Delete_Node_Sans_Free (Container.Tree, Node);
+ --                 Free (Node);
+ --                 raise;
+ --           end;
+ 
+ --           return;
+ --        end if;
+ 
+ --        Delete_Node_Sans_Free (Container.Tree, Node);
+ 
+ --        begin
+ --           Node.Element := By;
+ --        exception
+ --           when others =>
+ --              Free (Node);
+ --              raise;
+ --        end;
+ 
+ --        declare
+ --           function New_Node return Node_Access;
+ --           pragma Inline (New_Node);
+ 
+ --           function New_Node return Node_Access is
+ --           begin
+ --              return Node;
+ --           end New_Node;
+ 
+ --           procedure Insert_Post is
+ --              new Element_Keys.Generic_Insert_Post (New_Node);
+ 
+ --           procedure Insert is
+ --              new Element_Keys.Generic_Conditional_Insert (Insert_Post);
+ 
+ --           Result  : Node_Access;
+ --           Success : Boolean;
+ 
+ --        begin
+ --           Insert
+ --             (Tree    => Container.Tree,
+ --              Key     => Node.Element,
+ --              Node    => Result,
+ --              Success => Success);
+ 
+ --           if not Success then
+ --              Free (Node);
+ --              raise Program_Error;
+ --           end if;
+ 
+ --           pragma Assert (Result = Node);
+ --        end;
+ --     end Replace_Element;
+ 
+ 
+ --     procedure Replace_Element
+ --       (Container : in out Set;
+ --        Position  : Cursor;
+ --        By        : Element_Type)
+ --     is
+ --     begin
+ --        if Position.Container = null then
+ --           raise Constraint_Error;
+ --        end if;
+ 
+ --        if Position.Container /= Set_Access'(Container'Unchecked_Access) then
+ --           raise Program_Error;
+ --        end if;
+ 
+ --        Replace_Element (Container, Position.Node, By);
+ --     end Replace_Element;
+ 
+    ---------------------
+    -- Reverse_Iterate --
+    ---------------------
+ 
+    procedure Reverse_Iterate
+      (Container : Set;
+       Process   : not null access procedure (Position : Cursor))
+    is
+       procedure Process_Node (Node : Node_Access);
+       pragma Inline (Process_Node);
+ 
+       procedure Local_Reverse_Iterate is
+          new Tree_Operations.Generic_Reverse_Iteration (Process_Node);
+ 
+       ------------------
+       -- Process_Node --
+       ------------------
+ 
+       procedure Process_Node (Node : Node_Access) is
+       begin
+          Process (Cursor'(Container'Unchecked_Access, Node));
+       end Process_Node;
+ 
+    --  Start of processing for Reverse_Iterate
+ 
+    begin
+       Local_Reverse_Iterate (Container.Tree);
+    end Reverse_Iterate;
+ 
+    -----------
+    -- Right --
+    -----------
+ 
+    function Right (Node : Node_Access) return Node_Access is
+    begin
+       return Node.Right;
+    end Right;
+ 
+    ---------------
+    -- Set_Color --
+    ---------------
+ 
+    procedure Set_Color (Node : Node_Access; Color : Color_Type) is
+    begin
+       Node.Color := Color;
+    end Set_Color;
+ 
+    --------------
+    -- Set_Left --
+    --------------
+ 
+    procedure Set_Left (Node : Node_Access; Left : Node_Access) is
+    begin
+       Node.Left := Left;
+    end Set_Left;
+ 
+    ----------------
+    -- Set_Parent --
+    ----------------
+ 
+    procedure Set_Parent (Node : Node_Access; Parent : Node_Access) is
+    begin
+       Node.Parent := Parent;
+    end Set_Parent;
+ 
+    ---------------
+    -- Set_Right --
+    ---------------
+ 
+    procedure Set_Right (Node : Node_Access; Right : Node_Access) is
+    begin
+       Node.Right := Right;
+    end Set_Right;
+ 
+    --------------------------
+    -- Symmetric_Difference --
+    --------------------------
+ 
+    procedure Symmetric_Difference (Target : in out Set; Source : Set) is
+    begin
+       if Target'Address = Source'Address then
+          Clear (Target);
+          return;
+       end if;
+ 
+       Set_Ops.Symmetric_Difference (Target.Tree, Source.Tree);
+    end Symmetric_Difference;
+ 
+    function Symmetric_Difference (Left, Right : Set) return Set is
+    begin
+       if Left'Address = Right'Address then
+          return Empty_Set;
+       end if;
+ 
+       declare
+          Tree : constant Tree_Type :=
+                   Set_Ops.Symmetric_Difference (Left.Tree, Right.Tree);
+       begin
+          return (Controlled with Tree);
+       end;
+    end Symmetric_Difference;
+ 
+    -----------
+    -- Union --
+    -----------
+ 
+    procedure Union (Target : in out Set; Source : Set) is
+    begin
+ 
+       if Target'Address = Source'Address then
+          return;
+       end if;
+ 
+       Set_Ops.Union (Target.Tree, Source.Tree);
+    end Union;
+ 
+    function Union (Left, Right : Set) return Set is
+    begin
+       if Left'Address = Right'Address then
+          return Left;
+       end if;
+ 
+       declare
+          Tree : constant Tree_Type := Set_Ops.Union (Left.Tree, Right.Tree);
+       begin
+          return (Controlled with Tree);
+       end;
+    end Union;
+ 
+    -----------
+    -- Write --
+    -----------
+ 
+    procedure Write
+      (Stream    : access Root_Stream_Type'Class;
+       Container : Set)
+    is
+       procedure Process (Node : Node_Access);
+       pragma Inline (Process);
+ 
+       procedure Iterate is
+         new Tree_Operations.Generic_Iteration (Process);
+ 
+       -------------
+       -- Process --
+       -------------
+ 
+       procedure Process (Node : Node_Access) is
+       begin
+          Element_Type'Write (Stream, Node.Element);
+       end Process;
+ 
+    --  Start of processing for Write
+ 
+    begin
+       Count_Type'Base'Write (Stream, Container.Tree.Length);
+       Iterate (Container.Tree);
+    end Write;
+ 
+ 
+ 
+ 
+ end Ada.Containers.Ordered_Sets;
+ 
+ 
diff -Nrcpad gcc-3.4.3/gcc/ada/a-coorse.ads gcc-4.0.0/gcc/ada/a-coorse.ads
*** gcc-3.4.3/gcc/ada/a-coorse.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-coorse.ads	Wed Feb  9 11:14:39 2005
***************
*** 0 ****
--- 1,290 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                       ADA.CONTAINERS.ORDERED_SETS                        --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Containers.Red_Black_Trees;
+ with Ada.Finalization;
+ with Ada.Streams;
+ 
+ generic
+ 
+    type Element_Type is private;
+ 
+    with function "<" (Left, Right : Element_Type) return Boolean is <>;
+    with function "=" (Left, Right : Element_Type) return Boolean is <>;
+ 
+ package Ada.Containers.Ordered_Sets is
+ pragma Preelaborate (Ordered_Sets);
+ 
+    type Set is tagged private;
+ 
+    type Cursor is private;
+ 
+    Empty_Set : constant Set;
+ 
+    No_Element : constant Cursor;
+ 
+    function "=" (Left, Right : Set) return Boolean;
+ 
+    function Length (Container : Set) return Count_Type;
+ 
+    function Is_Empty (Container : Set) return Boolean;
+ 
+    procedure Clear (Container : in out Set);
+ 
+    function Element (Position : Cursor) return Element_Type;
+ 
+    procedure Query_Element
+      (Position : Cursor;
+       Process  : not null access procedure (Element : Element_Type));
+ 
+ --  TODO: resolve in Atlanta. ???
+ --   procedure Replace_Element
+ --     (Container : in out Set;
+ --      Position  : Cursor;
+ --      By        : Element_Type);
+ 
+    procedure Move
+      (Target : in out Set;
+       Source : in out Set);
+ 
+    procedure Insert
+      (Container : in out Set;
+       New_Item  : Element_Type;
+       Position  : out Cursor;
+       Inserted  : out Boolean);
+ 
+    procedure Insert
+      (Container : in out Set;
+       New_Item  : Element_Type);
+ 
+    procedure Include
+      (Container : in out Set;
+       New_Item  : Element_Type);
+ 
+    procedure Replace
+      (Container : in out Set;
+       New_Item  : Element_Type);
+ 
+    procedure Delete
+      (Container : in out Set;
+       Item      : Element_Type);
+ 
+    procedure Exclude
+      (Container : in out Set;
+       Item      : Element_Type);
+ 
+    procedure Delete
+      (Container : in out Set;
+       Position  : in out Cursor);
+ 
+    procedure Delete_First (Container : in out Set);
+ 
+    procedure Delete_Last (Container : in out Set);
+ 
+    procedure Union (Target : in out Set; Source : Set);
+ 
+    function Union (Left, Right : Set) return Set;
+ 
+    function "or" (Left, Right : Set) return Set renames Union;
+ 
+    procedure Intersection (Target : in out Set; Source : Set);
+ 
+    function Intersection (Left, Right : Set) return Set;
+ 
+    function "and" (Left, Right : Set) return Set renames Intersection;
+ 
+    procedure Difference (Target : in out Set;
+                          Source : Set);
+ 
+    function Difference (Left, Right : Set) return Set;
+ 
+    function "-" (Left, Right : Set) return Set renames Difference;
+ 
+    procedure Symmetric_Difference (Target : in out Set; Source : Set);
+ 
+    function Symmetric_Difference (Left, Right : Set) return Set;
+ 
+    function "xor" (Left, Right : Set) return Set renames Symmetric_Difference;
+ 
+    function Overlap (Left, Right : Set) return Boolean;
+ 
+    function Is_Subset (Subset : Set; Of_Set : Set) return Boolean;
+ 
+    function Contains (Container : Set; Item : Element_Type) return Boolean;
+ 
+    function Find (Container : Set; Item : Element_Type) return Cursor;
+ 
+    function Floor (Container : Set; Item : Element_Type) return Cursor;
+ 
+    function Ceiling (Container : Set; Item : Element_Type) return Cursor;
+ 
+    function First (Container : Set) return Cursor;
+ 
+    function First_Element (Container : Set) return Element_Type;
+ 
+    function Last (Container : Set) return Cursor;
+ 
+    function Last_Element (Container : Set) return Element_Type;
+ 
+    function Next (Position : Cursor) return Cursor;
+ 
+    function Previous (Position : Cursor) return Cursor;
+ 
+    procedure Next (Position : in out Cursor);
+ 
+    procedure Previous (Position : in out Cursor);
+ 
+    function Has_Element (Position : Cursor) return Boolean;
+ 
+    function "<" (Left, Right : Cursor) return Boolean;
+ 
+    function ">" (Left, Right : Cursor) return Boolean;
+ 
+    function "<" (Left : Cursor; Right : Element_Type) return Boolean;
+ 
+    function ">" (Left : Cursor; Right : Element_Type) return Boolean;
+ 
+    function "<" (Left : Element_Type; Right : Cursor) return Boolean;
+ 
+    function ">" (Left : Element_Type; Right : Cursor) return Boolean;
+ 
+    procedure Iterate
+      (Container : Set;
+       Process   : not null access procedure (Position : Cursor));
+ 
+    procedure Reverse_Iterate
+      (Container : Set;
+       Process   : not null access procedure (Position : Cursor));
+ 
+    generic
+       type Key_Type (<>) is limited private;
+ 
+       with function Key (Element : Element_Type) return Key_Type;
+ 
+       with function "<"
+         (Left  : Key_Type;
+          Right : Element_Type) return Boolean is <>;
+ 
+       with function ">"
+         (Left  : Key_Type;
+          Right : Element_Type) return Boolean is <>;
+ 
+    package Generic_Keys is
+ 
+       function Contains (Container : Set; Key : Key_Type) return Boolean;
+ 
+       function Find (Container : Set; Key : Key_Type) return Cursor;
+ 
+       function Floor (Container : Set; Key : Key_Type) return Cursor;
+ 
+       function Ceiling (Container : Set; Key : Key_Type) return Cursor;
+ 
+       function Key (Position : Cursor) return Key_Type;
+ 
+       function Element (Container : Set; Key : Key_Type) return Element_Type;
+ 
+ --  TODO: resolve in Atlanta ???
+ --      procedure Replace
+ --        (Container : in out Set;
+ --         Key       : Key_Type;
+ --         New_Item  : Element_Type);
+ 
+       procedure Delete (Container : in out Set; Key : Key_Type);
+ 
+       procedure Exclude (Container : in out Set; Key : Key_Type);
+ 
+       function "<" (Left : Cursor; Right : Key_Type) return Boolean;
+ 
+       function ">" (Left : Cursor; Right : Key_Type) return Boolean;
+ 
+       function "<" (Left : Key_Type; Right : Cursor) return Boolean;
+ 
+       function ">" (Left : Key_Type; Right : Cursor) return Boolean;
+ 
+ --  TODO: resolve name in Atlanta. Should name be just "Update_Element" ???
+       procedure Checked_Update_Element
+         (Container : in out Set;
+          Position  : Cursor;
+          Process   : not null access
+                        procedure (Element : in out Element_Type));
+ 
+    end Generic_Keys;
+ 
+ private
+ 
+    type Node_Type;
+    type Node_Access is access Node_Type;
+ 
+    package Tree_Types is
+      new Red_Black_Trees.Generic_Tree_Types (Node_Access);
+ 
+    use Tree_Types;
+    use Ada.Finalization;
+ 
+    type Set is new Controlled with record
+       Tree : Tree_Type := (Length => 0, others => null);
+    end record;
+ 
+    procedure Adjust (Container : in out Set);
+ 
+    procedure Finalize (Container : in out Set) renames Clear;
+ 
+    type Set_Access is access constant Set;
+ 
+    type Cursor is record
+       Container : Set_Access;
+       Node      : Node_Access;
+    end record;
+ 
+    No_Element : constant Cursor := Cursor'(null, null);
+ 
+    use Ada.Streams;
+ 
+    procedure Write
+      (Stream    : access Root_Stream_Type'Class;
+       Container : Set);
+ 
+    for Set'Write use Write;
+ 
+    procedure Read
+      (Stream    : access Root_Stream_Type'Class;
+       Container : out Set);
+ 
+    for Set'Read use Read;
+ 
+    Empty_Set : constant Set :=
+                  (Controlled with Tree => (Length => 0, others => null));
+ 
+ end Ada.Containers.Ordered_Sets;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-coprnu.adb gcc-4.0.0/gcc/ada/a-coprnu.adb
*** gcc-3.4.3/gcc/ada/a-coprnu.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-coprnu.adb	Wed Feb  9 11:14:39 2005
***************
*** 0 ****
--- 1,64 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                       ADA.CONTAINERS.PRIME_NUMBERS                       --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ 
+ package body Ada.Containers.Prime_Numbers is
+ 
+    --------------
+    -- To_Prime --
+    --------------
+ 
+    function To_Prime (Length : Count_Type) return Hash_Type is
+       I, J, K : Integer'Base;
+       Index   : Integer'Base;
+ 
+    begin
+       I := Primes'Last - Primes'First;
+       Index := Primes'First;
+       while I > 0 loop
+          J := I / 2;
+          K := Index + J;
+ 
+          if Primes (K) < Hash_Type (Length) then
+             Index := K + 1;
+             I := I - J - 1;
+          else
+             I := J;
+          end if;
+       end loop;
+ 
+       return Primes (Index);
+    end To_Prime;
+ 
+ end Ada.Containers.Prime_Numbers;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-coprnu.ads gcc-4.0.0/gcc/ada/a-coprnu.ads
*** gcc-3.4.3/gcc/ada/a-coprnu.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-coprnu.ads	Wed Feb  9 11:14:39 2005
***************
*** 0 ****
--- 1,31 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                       ADA.CONTAINERS.PRIME_NUMBERS                       --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ -- This specification is adapted from the Ada Reference Manual for use with --
+ -- GNAT.  In accordance with the copyright of that document, you can freely --
+ -- copy and modify this specification,  provided that if you redistribute a --
+ -- modified version,  any changes that you have made are clearly indicated. --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package Ada.Containers.Prime_Numbers is
+ pragma Pure (Prime_Numbers);
+ 
+    type Primes_Type is array (Positive range <>) of Hash_Type;
+ 
+    Primes : constant Primes_Type :=
+      (53,         97,         193,       389,       769,
+       1543,       3079,       6151,      12289,     24593,
+       49157,      98317,      196613,    393241,    786433,
+       1572869,    3145739,    6291469,   12582917,  25165843,
+       50331653,   100663319,  201326611, 402653189, 805306457,
+       1610612741, 3221225473, 4294967291);
+ 
+    function To_Prime (Length : Count_Type) return Hash_Type;
+ 
+ end Ada.Containers.Prime_Numbers;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-crbltr.ads gcc-4.0.0/gcc/ada/a-crbltr.ads
*** gcc-3.4.3/gcc/ada/a-crbltr.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-crbltr.ads	Wed Feb  9 11:14:39 2005
***************
*** 0 ****
--- 1,31 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                      ADA.CONTAINERS.RED_BLACK_TREES                      --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ -- This specification is adapted from the Ada Reference Manual for use with --
+ -- GNAT.  In accordance with the copyright of that document, you can freely --
+ -- copy and modify this specification,  provided that if you redistribute a --
+ -- modified version,  any changes that you have made are clearly indicated. --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package Ada.Containers.Red_Black_Trees is
+ pragma Pure (Red_Black_Trees);
+ 
+    type Color_Type is (Red, Black);
+ 
+    generic
+       type Node_Access is private;
+    package Generic_Tree_Types is
+       type Tree_Type is record
+          First  : Node_Access;
+          Last   : Node_Access;
+          Root   : Node_Access;
+          Length : Count_Type;
+       end record;
+    end Generic_Tree_Types;
+ end Ada.Containers.Red_Black_Trees;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-crbtgk.adb gcc-4.0.0/gcc/ada/a-crbtgk.adb
*** gcc-3.4.3/gcc/ada/a-crbtgk.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-crbtgk.adb	Wed Feb  9 11:14:39 2005
***************
*** 0 ****
--- 1,523 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --               ADA.CONTAINERS.RED_BLACK_TREES.GENERIC_KEYS                --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ 
+ package body Ada.Containers.Red_Black_Trees.Generic_Keys is
+ 
+    package Ops renames Tree_Operations;
+ 
+    -------------
+    -- Ceiling --
+    -------------
+ 
+    --  AKA Lower_Bound
+ 
+    function Ceiling (Tree : Tree_Type; Key  : Key_Type) return Node_Access is
+       Y : Node_Access;
+       X : Node_Access := Tree.Root;
+ 
+    begin
+       while X /= Ops.Null_Node loop
+          if Is_Greater_Key_Node (Key, X) then
+             X := Ops.Right (X);
+          else
+             Y := X;
+             X := Ops.Left (X);
+          end if;
+       end loop;
+ 
+       return Y;
+    end Ceiling;
+ 
+    ----------
+    -- Find --
+    ----------
+ 
+    function Find (Tree : Tree_Type; Key  : Key_Type) return Node_Access is
+       Y : Node_Access;
+       X : Node_Access := Tree.Root;
+ 
+    begin
+       while X /= Ops.Null_Node loop
+          if Is_Greater_Key_Node (Key, X) then
+             X := Ops.Right (X);
+          else
+             Y := X;
+             X := Ops.Left (X);
+          end if;
+       end loop;
+ 
+       if Y = Ops.Null_Node then
+          return Ops.Null_Node;
+       end if;
+ 
+       if Is_Less_Key_Node (Key, Y) then
+          return Ops.Null_Node;
+       end if;
+ 
+       return Y;
+    end Find;
+ 
+    -----------
+    -- Floor --
+    -----------
+ 
+    function Floor (Tree : Tree_Type; Key  : Key_Type) return Node_Access is
+       Y : Node_Access;
+       X : Node_Access := Tree.Root;
+ 
+    begin
+       while X /= Ops.Null_Node loop
+          if Is_Less_Key_Node (Key, X) then
+             X := Ops.Left (X);
+          else
+             Y := X;
+             X := Ops.Right (X);
+          end if;
+       end loop;
+ 
+       return Y;
+    end Floor;
+ 
+    --------------------------------
+    -- Generic_Conditional_Insert --
+    --------------------------------
+ 
+    procedure Generic_Conditional_Insert
+      (Tree    : in out Tree_Type;
+       Key     : Key_Type;
+       Node    : out Node_Access;
+       Success : out Boolean)
+    is
+       Y : Node_Access := Ops.Null_Node;
+       X : Node_Access := Tree.Root;
+ 
+    begin
+       Success := True;
+       while X /= Ops.Null_Node loop
+          Y := X;
+          Success := Is_Less_Key_Node (Key, X);
+ 
+          if Success then
+             X := Ops.Left (X);
+          else
+             X := Ops.Right (X);
+          end if;
+       end loop;
+ 
+       Node := Y;
+ 
+       if Success then
+          if Node = Tree.First then
+             Insert_Post (Tree, X, Y, Key, Node);
+             return;
+          end if;
+ 
+          Node := Ops.Previous (Node);
+       end if;
+ 
+       if Is_Greater_Key_Node (Key, Node) then
+          Insert_Post (Tree, X, Y, Key, Node);
+          Success := True;
+          return;
+       end if;
+ 
+       Success := False;
+    end Generic_Conditional_Insert;
+ 
+    ------------------------------------------
+    -- Generic_Conditional_Insert_With_Hint --
+    ------------------------------------------
+ 
+    procedure Generic_Conditional_Insert_With_Hint
+      (Tree     : in out Tree_Type;
+       Position : Node_Access;
+       Key      : Key_Type;
+       Node     : out Node_Access;
+       Success  : out Boolean)
+    is
+    begin
+       if Position = Ops.Null_Node then  -- largest
+          if Tree.Length > 0
+            and then Is_Greater_Key_Node (Key, Tree.Last)
+          then
+             Insert_Post (Tree, Ops.Null_Node, Tree.Last, Key, Node);
+             Success := True;
+          else
+             Conditional_Insert_Sans_Hint (Tree, Key, Node, Success);
+          end if;
+ 
+          return;
+       end if;
+ 
+       pragma Assert (Tree.Length > 0);
+ 
+       if Is_Less_Key_Node (Key, Position) then
+          if Position = Tree.First then
+             Insert_Post (Tree, Position, Position, Key, Node);
+             Success := True;
+             return;
+          end if;
+ 
+          declare
+             Before : constant Node_Access := Ops.Previous (Position);
+ 
+          begin
+             if Is_Greater_Key_Node (Key, Before) then
+                if Ops.Right (Before) = Ops.Null_Node then
+                   Insert_Post (Tree, Ops.Null_Node, Before, Key, Node);
+                else
+                   Insert_Post (Tree, Position, Position, Key, Node);
+                end if;
+ 
+                Success := True;
+ 
+             else
+                Conditional_Insert_Sans_Hint (Tree, Key, Node, Success);
+             end if;
+          end;
+ 
+          return;
+       end if;
+ 
+       if Is_Greater_Key_Node (Key, Position) then
+          if Position = Tree.Last then
+             Insert_Post (Tree, Ops.Null_Node, Tree.Last, Key, Node);
+             Success := True;
+             return;
+          end if;
+ 
+          declare
+             After : constant Node_Access := Ops.Next (Position);
+ 
+          begin
+             if Is_Less_Key_Node (Key, After) then
+                if Ops.Right (Position) = Ops.Null_Node then
+                   Insert_Post (Tree, Ops.Null_Node, Position, Key, Node);
+                else
+                   Insert_Post (Tree, After, After, Key, Node);
+                end if;
+ 
+                Success := True;
+ 
+             else
+                Conditional_Insert_Sans_Hint (Tree, Key, Node, Success);
+             end if;
+          end;
+ 
+          return;
+       end if;
+ 
+       Node := Position;
+       Success := False;
+    end Generic_Conditional_Insert_With_Hint;
+ 
+    -------------------------
+    -- Generic_Insert_Post --
+    -------------------------
+ 
+    procedure Generic_Insert_Post
+      (Tree : in out Tree_Type;
+       X, Y : Node_Access;
+       Key  : Key_Type;
+       Z    : out Node_Access)
+    is
+       subtype Length_Subtype is Count_Type range 0 .. Count_Type'Last - 1;
+ 
+       New_Length : constant Count_Type := Length_Subtype'(Tree.Length) + 1;
+ 
+    begin
+       if Y = Ops.Null_Node
+         or else X /= Ops.Null_Node
+         or else Is_Less_Key_Node (Key, Y)
+       then
+          pragma Assert (Y = Ops.Null_Node
+                           or else Ops.Left (Y) = Ops.Null_Node);
+ 
+          --  Delay allocation as long as we can, in order to defend
+          --  against exceptions propagated by relational operators.
+ 
+          Z := New_Node;
+ 
+          pragma Assert (Z /= Ops.Null_Node);
+          pragma Assert (Ops.Color (Z) = Red);
+ 
+          if Y = Ops.Null_Node then
+             pragma Assert (Tree.Length = 0);
+             pragma Assert (Tree.Root = Ops.Null_Node);
+             pragma Assert (Tree.First = Ops.Null_Node);
+             pragma Assert (Tree.Last = Ops.Null_Node);
+ 
+             Tree.Root := Z;
+             Tree.First := Z;
+             Tree.Last := Z;
+ 
+          else
+             Ops.Set_Left (Y, Z);
+ 
+             if Y = Tree.First then
+                Tree.First := Z;
+             end if;
+          end if;
+ 
+       else
+          pragma Assert (Ops.Right (Y) = Ops.Null_Node);
+ 
+          --  Delay allocation as long as we can, in order to defend
+          --  against exceptions propagated by relational operators.
+ 
+          Z := New_Node;
+ 
+          pragma Assert (Z /= Ops.Null_Node);
+          pragma Assert (Ops.Color (Z) = Red);
+ 
+          Ops.Set_Right (Y, Z);
+ 
+          if Y = Tree.Last then
+             Tree.Last := Z;
+          end if;
+       end if;
+ 
+       Ops.Set_Parent (Z, Y);
+       Ops.Rebalance_For_Insert (Tree, Z);
+       Tree.Length := New_Length;
+    end Generic_Insert_Post;
+ 
+    -----------------------
+    -- Generic_Iteration --
+    -----------------------
+ 
+    procedure Generic_Iteration
+      (Tree : Tree_Type;
+       Key  : Key_Type)
+    is
+       procedure Iterate (Node : Node_Access);
+ 
+       -------------
+       -- Iterate --
+       -------------
+ 
+       procedure Iterate (Node : Node_Access) is
+          N : Node_Access := Node;
+       begin
+          while N /= Ops.Null_Node loop
+             if Is_Less_Key_Node (Key, N) then
+                N := Ops.Left (N);
+             elsif Is_Greater_Key_Node (Key, N) then
+                N := Ops.Right (N);
+             else
+                Iterate (Ops.Left (N));
+                Process (N);
+                N := Ops.Right (N);
+             end if;
+          end loop;
+       end Iterate;
+ 
+    --  Start of processing for Generic_Iteration
+ 
+    begin
+       Iterate (Tree.Root);
+    end Generic_Iteration;
+ 
+    -------------------------------
+    -- Generic_Reverse_Iteration --
+    -------------------------------
+ 
+    procedure Generic_Reverse_Iteration
+      (Tree : Tree_Type;
+       Key  : Key_Type)
+    is
+       procedure Iterate (Node : Node_Access);
+ 
+       -------------
+       -- Iterate --
+       -------------
+ 
+       procedure Iterate (Node : Node_Access) is
+          N : Node_Access := Node;
+       begin
+          while N /= Ops.Null_Node loop
+             if Is_Less_Key_Node (Key, N) then
+                N := Ops.Left (N);
+             elsif Is_Greater_Key_Node (Key, N) then
+                N := Ops.Right (N);
+             else
+                Iterate (Ops.Right (N));
+                Process (N);
+                N := Ops.Left (N);
+             end if;
+          end loop;
+       end Iterate;
+ 
+    --  Start of processing for Generic_Reverse_Iteration
+ 
+    begin
+       Iterate (Tree.Root);
+    end Generic_Reverse_Iteration;
+ 
+    ----------------------------------
+    -- Generic_Unconditional_Insert --
+    ----------------------------------
+ 
+    procedure Generic_Unconditional_Insert
+      (Tree : in out Tree_Type;
+       Key  : Key_Type;
+       Node : out Node_Access)
+    is
+       Y : Node_Access := Ops.Null_Node;
+       X : Node_Access := Tree.Root;
+ 
+    begin
+       while X /= Ops.Null_Node loop
+          Y := X;
+ 
+          if Is_Less_Key_Node (Key, X) then
+             X := Ops.Left (X);
+          else
+             X := Ops.Right (X);
+          end if;
+       end loop;
+ 
+       Insert_Post (Tree, X, Y, Key, Node);
+    end Generic_Unconditional_Insert;
+ 
+    --------------------------------------------
+    -- Generic_Unconditional_Insert_With_Hint --
+    --------------------------------------------
+ 
+    procedure Generic_Unconditional_Insert_With_Hint
+      (Tree : in out Tree_Type;
+       Hint : Node_Access;
+       Key  : Key_Type;
+       Node : out Node_Access)
+    is
+       --  TODO: verify this algorithm.  It was (quickly) adapted it from the
+       --  same algorithm for conditional_with_hint. It may be that the test
+       --  Key > Hint should be something like a Key >= Hint, to handle the
+       --  case when Hint is The Last Item of A (Contiguous) sequence of
+       --  Equivalent Items.  (The Key < Hint Test is probably OK. It is not
+       --  clear that you can use Key <= Hint, since new items are always
+       --  inserted last in the sequence of equivalent items.) ???
+ 
+    begin
+       if Hint = Ops.Null_Node then  -- largest
+          if Tree.Length > 0
+            and then Is_Greater_Key_Node (Key, Tree.Last)
+          then
+             Insert_Post (Tree, Ops.Null_Node, Tree.Last, Key, Node);
+          else
+             Unconditional_Insert_Sans_Hint (Tree, Key, Node);
+          end if;
+ 
+          return;
+       end if;
+ 
+       pragma Assert (Tree.Length > 0);
+ 
+       if Is_Less_Key_Node (Key, Hint) then
+          if Hint = Tree.First then
+             Insert_Post (Tree, Hint, Hint, Key, Node);
+             return;
+          end if;
+ 
+          declare
+             Before : constant Node_Access := Ops.Previous (Hint);
+          begin
+             if Is_Greater_Key_Node (Key, Before) then
+                if Ops.Right (Before) = Ops.Null_Node then
+                   Insert_Post (Tree, Ops.Null_Node, Before, Key, Node);
+                else
+                   Insert_Post (Tree, Hint, Hint, Key, Node);
+                end if;
+             else
+                Unconditional_Insert_Sans_Hint (Tree, Key, Node);
+             end if;
+          end;
+ 
+          return;
+       end if;
+ 
+       if Is_Greater_Key_Node (Key, Hint) then
+          if Hint = Tree.Last then
+             Insert_Post (Tree, Ops.Null_Node, Tree.Last, Key, Node);
+             return;
+          end if;
+ 
+          declare
+             After : constant Node_Access := Ops.Next (Hint);
+          begin
+             if Is_Less_Key_Node (Key, After) then
+                if Ops.Right (Hint) = Ops.Null_Node then
+                   Insert_Post (Tree, Ops.Null_Node, Hint, Key, Node);
+                else
+                   Insert_Post (Tree, After, After, Key, Node);
+                end if;
+             else
+                Unconditional_Insert_Sans_Hint (Tree, Key, Node);
+             end if;
+          end;
+ 
+          return;
+       end if;
+ 
+       Unconditional_Insert_Sans_Hint (Tree, Key, Node);
+    end Generic_Unconditional_Insert_With_Hint;
+ 
+    -----------------
+    -- Upper_Bound --
+    -----------------
+ 
+    function Upper_Bound
+      (Tree : Tree_Type;
+       Key  : Key_Type) return Node_Access
+    is
+       Y : Node_Access;
+       X : Node_Access := Tree.Root;
+ 
+    begin
+       while X /= Ops.Null_Node loop
+          if Is_Less_Key_Node (Key, X) then
+             Y := X;
+             X := Ops.Left (X);
+          else
+             X := Ops.Right (X);
+          end if;
+       end loop;
+ 
+       return Y;
+    end Upper_Bound;
+ 
+ end Ada.Containers.Red_Black_Trees.Generic_Keys;
+ 
+ 
diff -Nrcpad gcc-3.4.3/gcc/ada/a-crbtgk.ads gcc-4.0.0/gcc/ada/a-crbtgk.ads
*** gcc-3.4.3/gcc/ada/a-crbtgk.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-crbtgk.ads	Wed Feb  9 11:14:39 2005
***************
*** 0 ****
--- 1,138 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --               ADA.CONTAINERS.RED_BLACK_TREES.GENERIC_KEYS                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ -- This specification is adapted from the Ada Reference Manual for use with --
+ -- GNAT.  In accordance with the copyright of that document, you can freely --
+ -- copy and modify this specification,  provided that if you redistribute a --
+ -- modified version,  any changes that you have made are clearly indicated. --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Containers.Red_Black_Trees.Generic_Operations;
+ 
+ generic
+    with package Tree_Operations is new Generic_Operations (<>);
+ 
+    use Tree_Operations.Tree_Types;
+ 
+    type Key_Type (<>) is limited private;
+ 
+    with function Is_Less_Key_Node
+      (L : Key_Type;
+       R : Node_Access) return Boolean;
+ 
+    with function Is_Greater_Key_Node
+      (L : Key_Type;
+       R : Node_Access) return Boolean;
+ 
+ package Ada.Containers.Red_Black_Trees.Generic_Keys is
+ pragma Pure (Generic_Keys);
+ 
+    generic
+       with function New_Node return Node_Access;
+    procedure Generic_Insert_Post
+      (Tree : in out Tree_Type;
+       X, Y : Node_Access;
+       Key  : Key_Type;
+       Z    : out Node_Access);
+ 
+    generic
+       with procedure Insert_Post
+         (Tree : in out Tree_Type;
+          X, Y : Node_Access;
+          Key  : Key_Type;
+          Z    : out Node_Access);
+ 
+    procedure Generic_Conditional_Insert
+      (Tree    : in out Tree_Type;
+       Key     : Key_Type;
+       Node    : out Node_Access;
+       Success : out Boolean);
+ 
+    generic
+       with procedure Insert_Post
+         (Tree : in out Tree_Type;
+          X, Y : Node_Access;
+          Key  : Key_Type;
+          Z    : out Node_Access);
+ 
+    procedure Generic_Unconditional_Insert
+      (Tree : in out Tree_Type;
+       Key  : Key_Type;
+       Node : out Node_Access);
+ 
+    generic
+       with procedure Insert_Post
+         (Tree : in out Tree_Type;
+          X, Y : Node_Access;
+          Key  : Key_Type;
+          Z    : out Node_Access);
+ 
+       with procedure Unconditional_Insert_Sans_Hint
+         (Tree    : in out Tree_Type;
+          Key     : Key_Type;
+          Node    : out Node_Access);
+ 
+    procedure Generic_Unconditional_Insert_With_Hint
+      (Tree : in out Tree_Type;
+       Hint : Node_Access;
+       Key  : Key_Type;
+       Node : out Node_Access);
+ 
+    generic
+       with procedure Insert_Post
+         (Tree : in out Tree_Type;
+          X, Y : Node_Access;
+          Key  : Key_Type;
+          Z    : out Node_Access);
+ 
+       with procedure Conditional_Insert_Sans_Hint
+         (Tree    : in out Tree_Type;
+          Key     : Key_Type;
+          Node    : out Node_Access;
+          Success : out Boolean);
+ 
+    procedure Generic_Conditional_Insert_With_Hint
+      (Tree     : in out Tree_Type;
+       Position : Node_Access;
+       Key      : Key_Type;
+       Node     : out Node_Access;
+       Success  : out Boolean);
+ 
+    function Find
+      (Tree : Tree_Type;
+       Key  : Key_Type) return Node_Access;
+ 
+    function Ceiling
+      (Tree : Tree_Type;
+       Key  : Key_Type) return Node_Access;
+ 
+    function Floor
+      (Tree : Tree_Type;
+       Key  : Key_Type) return Node_Access;
+ 
+    function Upper_Bound
+      (Tree : Tree_Type;
+       Key  : Key_Type) return Node_Access;
+ 
+    generic
+       with procedure Process (Node : Node_Access);
+    procedure Generic_Iteration
+      (Tree : Tree_Type;
+       Key  : Key_Type);
+ 
+    generic
+       with procedure Process (Node : Node_Access);
+    procedure Generic_Reverse_Iteration
+      (Tree : Tree_Type;
+       Key  : Key_Type);
+ 
+ end Ada.Containers.Red_Black_Trees.Generic_Keys;
+ 
+ 
+ 
diff -Nrcpad gcc-3.4.3/gcc/ada/a-crbtgo.adb gcc-4.0.0/gcc/ada/a-crbtgo.adb
*** gcc-3.4.3/gcc/ada/a-crbtgo.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-crbtgo.adb	Wed Feb  9 11:14:39 2005
***************
*** 0 ****
--- 1,879 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --            ADA.CONTAINERS.RED_BLACK_TREES.GENERIC_OPERATIONS             --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ 
+ package body Ada.Containers.Red_Black_Trees.Generic_Operations is
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    procedure Delete_Fixup (Tree : in out Tree_Type; Node : Node_Access);
+ 
+    procedure Delete_Swap (Tree : in out Tree_Type; Z, Y : Node_Access);
+ 
+    procedure Left_Rotate  (Tree : in out Tree_Type; X : Node_Access);
+    procedure Right_Rotate (Tree : in out Tree_Type; Y : Node_Access);
+ 
+    ---------------------
+    -- Check_Invariant --
+    ---------------------
+ 
+    procedure Check_Invariant (Tree : Tree_Type) is
+       Root : constant Node_Access := Tree.Root;
+ 
+       function Check (Node : Node_Access) return Natural;
+ 
+       -----------
+       -- Check --
+       -----------
+ 
+       function Check (Node : Node_Access) return Natural is
+       begin
+          if Node = Null_Node then
+             return 0;
+          end if;
+ 
+          if Color (Node) = Red then
+             declare
+                L : constant Node_Access := Left (Node);
+             begin
+                pragma Assert (L = Null_Node or else Color (L) = Black);
+                null;
+             end;
+ 
+             declare
+                R : constant Node_Access := Right (Node);
+             begin
+                pragma Assert (R = Null_Node or else Color (R) = Black);
+                null;
+             end;
+ 
+             declare
+                NL : constant Natural := Check (Left (Node));
+                NR : constant Natural := Check (Right (Node));
+             begin
+                pragma Assert (NL = NR);
+                return NL;
+             end;
+          end if;
+ 
+          declare
+             NL : constant Natural := Check (Left (Node));
+             NR : constant Natural := Check (Right (Node));
+          begin
+             pragma Assert (NL = NR);
+             return NL + 1;
+          end;
+       end Check;
+ 
+    --  Start of processing for Check_Invariant
+ 
+    begin
+       if Root = Null_Node then
+          pragma Assert (Tree.First = Null_Node);
+          pragma Assert (Tree.Last = Null_Node);
+          pragma Assert (Tree.Length = 0);
+          null;
+ 
+       else
+          pragma Assert (Color (Root) = Black);
+          pragma Assert (Tree.Length > 0);
+          pragma Assert (Tree.Root /= Null_Node);
+          pragma Assert (Tree.First /= Null_Node);
+          pragma Assert (Tree.Last /= Null_Node);
+          pragma Assert (Parent (Tree.Root) = Null_Node);
+          pragma Assert ((Tree.Length > 1)
+                            or else (Tree.First = Tree.Last
+                                       and Tree.First = Tree.Root));
+          pragma Assert (Left (Tree.First) = Null_Node);
+          pragma Assert (Right (Tree.Last) = Null_Node);
+ 
+          declare
+             L  : constant Node_Access := Left (Root);
+             R  : constant Node_Access := Right (Root);
+             NL : constant Natural := Check (L);
+             NR : constant Natural := Check (R);
+          begin
+             pragma Assert (NL = NR);
+             null;
+          end;
+       end if;
+    end Check_Invariant;
+ 
+    ------------------
+    -- Delete_Fixup --
+    ------------------
+ 
+    procedure Delete_Fixup (Tree : in out Tree_Type; Node : Node_Access) is
+ 
+       --  CLR p274 ???
+ 
+       X : Node_Access := Node;
+       W : Node_Access;
+ 
+    begin
+       while X /= Tree.Root
+         and then Color (X) = Black
+       loop
+          if X = Left (Parent (X)) then
+             W :=  Right (Parent (X));
+ 
+             if Color (W) = Red then
+                Set_Color (W, Black);
+                Set_Color (Parent (X), Red);
+                Left_Rotate (Tree, Parent (X));
+                W := Right (Parent (X));
+             end if;
+ 
+             if (Left (W)  = Null_Node or else Color (Left (W)) = Black)
+               and then
+                (Right (W) = Null_Node or else Color (Right (W)) = Black)
+             then
+                Set_Color (W, Red);
+                X := Parent (X);
+ 
+             else
+                if Right (W) = Null_Node
+                  or else Color (Right (W)) = Black
+                then
+                   if Left (W) /= Null_Node then
+                      Set_Color (Left (W), Black);
+                   end if;
+ 
+                   Set_Color (W, Red);
+                   Right_Rotate (Tree, W);
+                   W := Right (Parent (X));
+                end if;
+ 
+                Set_Color (W, Color (Parent (X)));
+                Set_Color (Parent (X), Black);
+                Set_Color (Right (W), Black);
+                Left_Rotate  (Tree, Parent (X));
+                X := Tree.Root;
+             end if;
+ 
+          else
+             pragma Assert (X = Right (Parent (X)));
+ 
+             W :=  Left (Parent (X));
+ 
+             if Color (W) = Red then
+                Set_Color (W, Black);
+                Set_Color (Parent (X), Red);
+                Right_Rotate (Tree, Parent (X));
+                W := Left (Parent (X));
+             end if;
+ 
+             if (Left (W)  = Null_Node or else Color (Left (W)) = Black)
+                   and then
+                (Right (W) = Null_Node or else Color (Right (W)) = Black)
+             then
+                Set_Color (W, Red);
+                X := Parent (X);
+ 
+             else
+                if Left (W) = Null_Node or else Color (Left (W)) = Black then
+                   if Right (W) /= Null_Node then
+                      Set_Color (Right (W), Black);
+                   end if;
+ 
+                   Set_Color (W, Red);
+                   Left_Rotate (Tree, W);
+                   W := Left (Parent (X));
+                end if;
+ 
+                Set_Color (W, Color (Parent (X)));
+                Set_Color (Parent (X), Black);
+                Set_Color (Left (W), Black);
+                Right_Rotate (Tree, Parent (X));
+                X := Tree.Root;
+             end if;
+          end if;
+       end loop;
+ 
+       Set_Color (X, Black);
+    end Delete_Fixup;
+ 
+    ---------------------------
+    -- Delete_Node_Sans_Free --
+    ---------------------------
+ 
+    procedure Delete_Node_Sans_Free
+      (Tree : in out Tree_Type;
+       Node : Node_Access)
+    is
+       --  CLR p273 ???
+ 
+       X, Y : Node_Access;
+ 
+       Z : constant Node_Access := Node;
+       pragma Assert (Z /= Null_Node);
+ 
+    begin
+       pragma Assert (Tree.Length > 0);
+       pragma Assert (Tree.Root /= Null_Node);
+       pragma Assert (Tree.First /= Null_Node);
+       pragma Assert (Tree.Last /= Null_Node);
+       pragma Assert (Parent (Tree.Root) = Null_Node);
+       pragma Assert ((Tree.Length > 1)
+                         or else (Tree.First = Tree.Last
+                                    and then Tree.First = Tree.Root));
+       pragma Assert ((Left (Node) = Null_Node)
+                         or else (Parent (Left (Node)) = Node));
+       pragma Assert ((Right (Node) = Null_Node)
+                         or else (Parent (Right (Node)) = Node));
+       pragma Assert (((Parent (Node) = Null_Node) and then (Tree.Root = Node))
+                         or else ((Parent (Node) /= Null_Node) and then
+                                   ((Left (Parent (Node)) = Node)
+                                      or else (Right (Parent (Node)) = Node))));
+ 
+       if Left (Z) = Null_Node then
+          if Right (Z) = Null_Node then
+             if Z = Tree.First then
+                Tree.First := Parent (Z);
+             end if;
+ 
+             if Z = Tree.Last then
+                Tree.Last := Parent (Z);
+             end if;
+ 
+             if Color (Z) = Black then
+                Delete_Fixup (Tree, Z);
+             end if;
+ 
+             pragma Assert (Left (Z) = Null_Node);
+             pragma Assert (Right (Z) = Null_Node);
+ 
+             if Z = Tree.Root then
+                pragma Assert (Tree.Length = 1);
+                pragma Assert (Parent (Z) = Null_Node);
+                Tree.Root := Null_Node;
+             elsif Z = Left (Parent (Z)) then
+                Set_Left (Parent (Z), Null_Node);
+             else
+                pragma Assert (Z = Right (Parent (Z)));
+                Set_Right (Parent (Z), Null_Node);
+             end if;
+ 
+          else
+             pragma Assert (Z /= Tree.Last);
+ 
+             X := Right (Z);
+ 
+             if Z = Tree.First then
+                Tree.First := Min (X);
+             end if;
+ 
+             if Z = Tree.Root then
+                Tree.Root := X;
+             elsif Z = Left (Parent (Z)) then
+                Set_Left (Parent (Z), X);
+             else
+                pragma Assert (Z = Right (Parent (Z)));
+                Set_Right (Parent (Z), X);
+             end if;
+ 
+             Set_Parent (X, Parent (Z));
+ 
+             if Color (Z) = Black then
+                Delete_Fixup (Tree, X);
+             end if;
+          end if;
+ 
+       elsif Right (Z) = Null_Node then
+          pragma Assert (Z /= Tree.First);
+ 
+          X := Left (Z);
+ 
+          if Z = Tree.Last then
+             Tree.Last := Max (X);
+          end if;
+ 
+          if Z = Tree.Root then
+             Tree.Root := X;
+          elsif Z = Left (Parent (Z)) then
+             Set_Left (Parent (Z), X);
+          else
+             pragma Assert (Z = Right (Parent (Z)));
+             Set_Right (Parent (Z), X);
+          end if;
+ 
+          Set_Parent (X, Parent (Z));
+ 
+          if Color (Z) = Black then
+             Delete_Fixup (Tree, X);
+          end if;
+ 
+       else
+          pragma Assert (Z /= Tree.First);
+          pragma Assert (Z /= Tree.Last);
+ 
+          Y := Next (Z);
+          pragma Assert (Left (Y) = Null_Node);
+ 
+          X := Right (Y);
+ 
+          if X = Null_Node then
+             if Y = Left (Parent (Y)) then
+                pragma Assert (Parent (Y) /= Z);
+                Delete_Swap (Tree, Z, Y);
+                Set_Left (Parent (Z), Z);
+ 
+             else
+                pragma Assert (Y = Right (Parent (Y)));
+                pragma Assert (Parent (Y) = Z);
+                Set_Parent (Y, Parent (Z));
+ 
+                if Z = Tree.Root then
+                   Tree.Root := Y;
+                elsif Z = Left (Parent (Z)) then
+                   Set_Left (Parent (Z), Y);
+                else
+                   pragma Assert (Z = Right (Parent (Z)));
+                   Set_Right (Parent (Z), Y);
+                end if;
+ 
+                Set_Left (Y, Left (Z));
+                Set_Parent (Left (Y), Y);
+                Set_Right (Y, Z);
+                Set_Parent (Z, Y);
+                Set_Left (Z, Null_Node);
+                Set_Right (Z, Null_Node);
+ 
+                declare
+                   Y_Color : constant Color_Type := Color (Y);
+                begin
+                   Set_Color (Y, Color (Z));
+                   Set_Color (Z, Y_Color);
+                end;
+             end if;
+ 
+             if Color (Z) = Black then
+                Delete_Fixup (Tree, Z);
+             end if;
+ 
+             pragma Assert (Left (Z) = Null_Node);
+             pragma Assert (Right (Z) = Null_Node);
+ 
+             if Z = Right (Parent (Z)) then
+                Set_Right (Parent (Z), Null_Node);
+             else
+                pragma Assert (Z = Left (Parent (Z)));
+                Set_Left (Parent (Z), Null_Node);
+             end if;
+ 
+          else
+             if Y = Left (Parent (Y)) then
+                pragma Assert (Parent (Y) /= Z);
+ 
+                Delete_Swap (Tree, Z, Y);
+ 
+                Set_Left (Parent (Z), X);
+                Set_Parent (X, Parent (Z));
+ 
+             else
+                pragma Assert (Y = Right (Parent (Y)));
+                pragma Assert (Parent (Y) = Z);
+ 
+                Set_Parent (Y, Parent (Z));
+ 
+                if Z = Tree.Root then
+                   Tree.Root := Y;
+                elsif Z = Left (Parent (Z)) then
+                   Set_Left (Parent (Z), Y);
+                else
+                   pragma Assert (Z = Right (Parent (Z)));
+                   Set_Right (Parent (Z), Y);
+                end if;
+ 
+                Set_Left (Y, Left (Z));
+                Set_Parent (Left (Y), Y);
+ 
+                declare
+                   Y_Color : constant Color_Type := Color (Y);
+                begin
+                   Set_Color (Y, Color (Z));
+                   Set_Color (Z, Y_Color);
+                end;
+             end if;
+ 
+             if Color (Z) = Black then
+                Delete_Fixup (Tree, X);
+             end if;
+          end if;
+       end if;
+ 
+       Tree.Length := Tree.Length - 1;
+    end Delete_Node_Sans_Free;
+ 
+    -----------------
+    -- Delete_Swap --
+    -----------------
+ 
+    procedure Delete_Swap
+      (Tree : in out Tree_Type;
+       Z, Y : Node_Access)
+    is
+       pragma Assert (Z /= Y);
+       pragma Assert (Parent (Y) /= Z);
+ 
+       Y_Parent : constant Node_Access := Parent (Y);
+       Y_Color  : constant Color_Type  := Color (Y);
+ 
+    begin
+       Set_Parent (Y, Parent (Z));
+       Set_Left (Y, Left (Z));
+       Set_Right (Y, Right (Z));
+       Set_Color (Y, Color (Z));
+ 
+       if Tree.Root = Z then
+          Tree.Root := Y;
+       elsif Right (Parent (Y)) = Z then
+          Set_Right (Parent (Y), Y);
+       else
+          pragma Assert (Left (Parent (Y)) = Z);
+          Set_Left (Parent (Y), Y);
+       end if;
+ 
+       if Right (Y) /= Null_Node then
+          Set_Parent (Right (Y), Y);
+       end if;
+ 
+       if Left (Y) /= Null_Node then
+          Set_Parent (Left (Y), Y);
+       end if;
+ 
+       Set_Parent (Z, Y_Parent);
+       Set_Color (Z, Y_Color);
+       Set_Left (Z, Null_Node);
+       Set_Right (Z, Null_Node);
+    end Delete_Swap;
+ 
+    -------------------
+    -- Generic_Equal --
+    -------------------
+ 
+    function Generic_Equal (Left, Right : Tree_Type) return Boolean is
+       L_Node : Node_Access;
+       R_Node : Node_Access;
+ 
+    begin
+       if Left.Length /= Right.Length then
+          return False;
+       end if;
+ 
+       L_Node := Left.First;
+       R_Node := Right.First;
+       while L_Node /= Null_Node loop
+          if not Is_Equal (L_Node, R_Node) then
+             return False;
+          end if;
+ 
+          L_Node := Next (L_Node);
+          R_Node := Next (R_Node);
+       end loop;
+ 
+       return True;
+    end Generic_Equal;
+ 
+    -----------------------
+    -- Generic_Iteration --
+    -----------------------
+ 
+    procedure Generic_Iteration (Tree : Tree_Type) is
+       procedure Iterate (P : Node_Access);
+ 
+       -------------
+       -- Iterate --
+       -------------
+ 
+       procedure Iterate (P : Node_Access) is
+          X : Node_Access := P;
+       begin
+          while X /= Null_Node loop
+             Iterate (Left (X));
+             Process (X);
+             X := Right (X);
+          end loop;
+       end Iterate;
+ 
+    --  Start of processing for Generic_Iteration
+ 
+    begin
+       Iterate (Tree.Root);
+    end Generic_Iteration;
+ 
+    ------------------
+    -- Generic_Read --
+    ------------------
+ 
+    procedure Generic_Read (Tree : in out Tree_Type; N : Count_Type) is
+ 
+       pragma Assert (Tree.Length = 0);
+       --  Clear and back node reinit was done by caller
+ 
+       Node, Last_Node : Node_Access;
+ 
+    begin
+       if N = 0 then
+          return;
+       end if;
+ 
+       Node := New_Node;
+       pragma Assert (Node /= Null_Node);
+       pragma Assert (Color (Node) = Red);
+ 
+       Set_Color (Node, Black);
+ 
+       Tree.Root := Node;
+       Tree.First := Node;
+       Tree.Last := Node;
+ 
+       Tree.Length := 1;
+ 
+       for J in Count_Type range 2 .. N loop
+          Last_Node := Node;
+          pragma Assert (Last_Node = Tree.Last);
+ 
+          Node := New_Node;
+          pragma Assert (Node /= Null_Node);
+          pragma Assert (Color (Node) = Red);
+ 
+          Set_Right (Node => Last_Node, Right => Node);
+          Tree.Last := Node;
+          Set_Parent (Node => Node, Parent => Last_Node);
+          Rebalance_For_Insert (Tree, Node);
+          Tree.Length := Tree.Length + 1;
+       end loop;
+    end Generic_Read;
+ 
+    -------------------------------
+    -- Generic_Reverse_Iteration --
+    -------------------------------
+ 
+    procedure Generic_Reverse_Iteration (Tree : Tree_Type)
+    is
+       procedure Iterate (P : Node_Access);
+ 
+       -------------
+       -- Iterate --
+       -------------
+ 
+       procedure Iterate (P : Node_Access) is
+          X : Node_Access := P;
+       begin
+          while X /= Null_Node loop
+             Iterate (Right (X));
+             Process (X);
+             X := Left (X);
+          end loop;
+       end Iterate;
+ 
+    --  Start of processing for Generic_Reverse_Iteration
+ 
+    begin
+       Iterate (Tree.Root);
+    end Generic_Reverse_Iteration;
+ 
+    -----------------
+    -- Left_Rotate --
+    -----------------
+ 
+    procedure Left_Rotate (Tree : in out Tree_Type; X : Node_Access) is
+ 
+       --  CLR p266 ???
+ 
+       Y : constant Node_Access := Right (X);
+       pragma Assert (Y /= Null_Node);
+ 
+    begin
+       Set_Right (X, Left (Y));
+ 
+       if Left (Y) /= Null_Node then
+          Set_Parent (Left (Y), X);
+       end if;
+ 
+       Set_Parent (Y, Parent (X));
+ 
+       if X = Tree.Root then
+          Tree.Root := Y;
+       elsif X = Left (Parent (X)) then
+          Set_Left (Parent (X), Y);
+       else
+          pragma Assert (X = Right (Parent (X)));
+          Set_Right (Parent (X), Y);
+       end if;
+ 
+       Set_Left (Y, X);
+       Set_Parent (X, Y);
+    end Left_Rotate;
+ 
+    ---------
+    -- Max --
+    ---------
+ 
+    function Max (Node : Node_Access) return Node_Access is
+ 
+       --  CLR p248 ???
+ 
+       X : Node_Access := Node;
+       Y : Node_Access;
+ 
+    begin
+       loop
+          Y := Right (X);
+ 
+          if Y = Null_Node then
+             return X;
+          end if;
+ 
+          X := Y;
+       end loop;
+    end Max;
+ 
+    ---------
+    -- Min --
+    ---------
+ 
+    function Min (Node : Node_Access) return Node_Access is
+ 
+       --  CLR p248 ???
+ 
+       X : Node_Access := Node;
+       Y : Node_Access;
+ 
+    begin
+       loop
+          Y := Left (X);
+ 
+          if Y = Null_Node then
+             return X;
+          end if;
+ 
+          X := Y;
+       end loop;
+    end Min;
+ 
+    ----------
+    -- Move --
+    ----------
+ 
+    procedure Move (Target, Source : in out Tree_Type) is
+    begin
+       if Target.Length > 0 then
+          raise Constraint_Error;
+       end if;
+ 
+       Target := Source;
+       Source := (First => Null_Node,
+                  Last  => Null_Node,
+                  Root  => Null_Node,
+                  Length => 0);
+    end Move;
+ 
+    ----------
+    -- Next --
+    ----------
+ 
+    function Next (Node : Node_Access) return Node_Access is
+    begin
+       --  CLR p249 ???
+ 
+       if Node = Null_Node then
+          return Null_Node;
+       end if;
+ 
+       if Right (Node) /= Null_Node then
+          return Min (Right (Node));
+       end if;
+ 
+       declare
+          X : Node_Access := Node;
+          Y : Node_Access := Parent (Node);
+ 
+       begin
+          while Y /= Null_Node
+            and then X = Right (Y)
+          loop
+             X := Y;
+             Y := Parent (Y);
+          end loop;
+ 
+          --  Why is this code commented out ???
+ 
+ --           if Right (X) /= Y then
+ --              return Y;
+ --           else
+ --              return X;
+ --           end if;
+ 
+          return Y;
+       end;
+    end Next;
+ 
+    --------------
+    -- Previous --
+    --------------
+ 
+    function Previous (Node : Node_Access) return Node_Access is
+    begin
+       if Node = Null_Node then
+          return Null_Node;
+       end if;
+ 
+       if Left (Node) /= Null_Node then
+          return Max (Left (Node));
+       end if;
+ 
+       declare
+          X : Node_Access := Node;
+          Y : Node_Access := Parent (Node);
+ 
+       begin
+          while Y /= Null_Node
+            and then X = Left (Y)
+          loop
+             X := Y;
+             Y := Parent (Y);
+          end loop;
+ 
+          --  Why is this code commented out ???
+ 
+ --           if Left (X) /= Y then
+ --              return Y;
+ --           else
+ --              return X;
+ --           end if;
+ 
+          return Y;
+       end;
+    end Previous;
+ 
+    --------------------------
+    -- Rebalance_For_Insert --
+    --------------------------
+ 
+    procedure Rebalance_For_Insert
+      (Tree : in out Tree_Type;
+       Node : Node_Access)
+    is
+       --  CLR p.268 ???
+ 
+       X : Node_Access := Node;
+       pragma Assert (X /= Null_Node);
+       pragma Assert (Color (X) = Red);
+ 
+       Y : Node_Access;
+ 
+    begin
+       while X /= Tree.Root and then Color (Parent (X)) = Red loop
+          if Parent (X) = Left (Parent (Parent (X))) then
+             Y := Right (Parent (Parent (X)));
+ 
+             if Y /= Null_Node and then Color (Y) = Red then
+                Set_Color (Parent (X), Black);
+                Set_Color (Y, Black);
+                Set_Color (Parent (Parent (X)), Red);
+                X := Parent (Parent (X));
+ 
+             else
+                if X = Right (Parent (X)) then
+                   X := Parent (X);
+                   Left_Rotate (Tree, X);
+                end if;
+ 
+                Set_Color (Parent (X), Black);
+                Set_Color (Parent (Parent (X)), Red);
+                Right_Rotate (Tree, Parent (Parent (X)));
+             end if;
+ 
+          else
+             pragma Assert (Parent (X) = Right (Parent (Parent (X))));
+ 
+             Y := Left (Parent (Parent (X)));
+ 
+             if Y /= Null_Node and then Color (Y) = Red then
+                Set_Color (Parent (X), Black);
+                Set_Color (Y, Black);
+                Set_Color (Parent (Parent (X)), Red);
+                X := Parent (Parent (X));
+ 
+             else
+                if X = Left (Parent (X)) then
+                   X := Parent (X);
+                   Right_Rotate (Tree, X);
+                end if;
+ 
+                Set_Color (Parent (X), Black);
+                Set_Color (Parent (Parent (X)), Red);
+                Left_Rotate (Tree, Parent (Parent (X)));
+             end if;
+          end if;
+       end loop;
+ 
+       Set_Color (Tree.Root, Black);
+    end Rebalance_For_Insert;
+ 
+    ------------------
+    -- Right_Rotate --
+    ------------------
+ 
+    procedure Right_Rotate (Tree : in out Tree_Type; Y : Node_Access) is
+       X : constant Node_Access := Left (Y);
+       pragma Assert (X /= Null_Node);
+ 
+    begin
+       Set_Left (Y, Right (X));
+ 
+       if Right (X) /= Null_Node then
+          Set_Parent (Right (X), Y);
+       end if;
+ 
+       Set_Parent (X, Parent (Y));
+ 
+       if Y = Tree.Root then
+          Tree.Root := X;
+       elsif Y = Left (Parent (Y)) then
+          Set_Left (Parent (Y), X);
+       else
+          pragma Assert (Y = Right (Parent (Y)));
+          Set_Right (Parent (Y), X);
+       end if;
+ 
+       Set_Right (X, Y);
+       Set_Parent (Y, X);
+    end Right_Rotate;
+ 
+ end Ada.Containers.Red_Black_Trees.Generic_Operations;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-crbtgo.ads gcc-4.0.0/gcc/ada/a-crbtgo.ads
*** gcc-3.4.3/gcc/ada/a-crbtgo.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-crbtgo.ads	Wed Feb  9 11:14:39 2005
***************
*** 0 ****
--- 1,70 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --            ADA.CONTAINERS.RED_BLACK_TREES.GENERIC_OPERATIONS             --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ -- This specification is adapted from the Ada Reference Manual for use with --
+ -- GNAT.  In accordance with the copyright of that document, you can freely --
+ -- copy and modify this specification,  provided that if you redistribute a --
+ -- modified version,  any changes that you have made are clearly indicated. --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ generic
+    with package Tree_Types is new Generic_Tree_Types (<>);
+    use Tree_Types;
+ 
+    Null_Node : Node_Access;
+ 
+    with function  Parent (Node : Node_Access) return Node_Access is <>;
+    with procedure Set_Parent (Node : Node_Access; Parent : Node_Access) is <>;
+    with function  Left (Node : Node_Access) return Node_Access is <>;
+    with procedure Set_Left (Node : Node_Access; Left : Node_Access) is <>;
+    with function  Right (Node : Node_Access) return Node_Access is <>;
+    with procedure Set_Right (Node : Node_Access; Right : Node_Access) is <>;
+    with function  Color (Node : Node_Access) return Color_Type is <>;
+    with procedure Set_Color (Node : Node_Access; Color : Color_Type) is <>;
+ 
+ package Ada.Containers.Red_Black_Trees.Generic_Operations is
+ pragma Pure;
+ 
+    function Min (Node : Node_Access) return Node_Access;
+ 
+    function Max (Node : Node_Access) return Node_Access;
+ 
+    procedure Check_Invariant (Tree : Tree_Type);
+ 
+    function Next (Node : Node_Access) return Node_Access;
+ 
+    function Previous (Node : Node_Access) return Node_Access;
+ 
+    procedure Move (Target, Source : in out Tree_Type);
+ 
+    generic
+       with function Is_Equal (L, R : Node_Access) return Boolean;
+    function Generic_Equal (Left, Right : Tree_Type) return Boolean;
+ 
+    procedure Delete_Node_Sans_Free
+      (Tree : in out Tree_Type;
+       Node : Node_Access);
+ 
+    generic
+       with procedure Process (Node : Node_Access) is <>;
+    procedure Generic_Iteration (Tree : Tree_Type);
+ 
+    generic
+       with procedure Process (Node : Node_Access) is <>;
+    procedure Generic_Reverse_Iteration (Tree : Tree_Type);
+ 
+    generic
+       with function New_Node return Node_Access is <>;
+    procedure Generic_Read (Tree : in out Tree_Type; N : Count_Type);
+ 
+    procedure Rebalance_For_Insert
+      (Tree : in out Tree_Type;
+       Node : Node_Access);
+ 
+ end Ada.Containers.Red_Black_Trees.Generic_Operations;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-direct.adb gcc-4.0.0/gcc/ada/a-direct.adb
*** gcc-3.4.3/gcc/ada/a-direct.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-direct.adb	Wed Oct 27 13:56:03 2004
***************
*** 0 ****
--- 1,965 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --                      A D A . D I R E C T O R I E S                       --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 2004 Free Software Foundation, Inc.               --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Directories.Validity; use Ada.Directories.Validity;
+ with Ada.Strings.Unbounded;    use Ada.Strings.Unbounded;
+ with Ada.Unchecked_Deallocation;
+ with Ada.Characters.Handling;  use Ada.Characters.Handling;
+ 
+ with GNAT.Directory_Operations; use GNAT.Directory_Operations;
+ with GNAT.OS_Lib;               use GNAT.OS_Lib;
+ with GNAT.Regexp;               use GNAT.Regexp;
+ --  ??? Ada units cannot depend on GNAT units
+ 
+ with System;
+ 
+ package body Ada.Directories is
+ 
+    type Search_Data is record
+       Is_Valid      : Boolean := False;
+       Name          : Ada.Strings.Unbounded.Unbounded_String;
+       Pattern       : Regexp;
+       Filter        : Filter_Type;
+       Dir           : Dir_Type;
+       Entry_Fetched : Boolean := False;
+       Dir_Entry     : Directory_Entry_Type;
+    end record;
+    --  Comment required ???
+ 
+    Empty_String : constant String := (1 .. 0 => ASCII.NUL);
+    --  Comment required ???
+ 
+    procedure Free is new Ada.Unchecked_Deallocation (Search_Data, Search_Ptr);
+ 
+    function File_Exists (Name : String) return Boolean;
+    --  Returns True if the named file exists.
+ 
+    procedure Fetch_Next_Entry (Search : Search_Type);
+    --  Get the next entry in a directory, setting Entry_Fetched if successful
+    --  or resetting Is_Valid if not.
+ 
+    procedure To_Lower_If_Case_Insensitive (S : in out String);
+    --  Put S in lower case if file and path names are case-insensitive
+ 
+    ---------------
+    -- Base_Name --
+    ---------------
+ 
+    function Base_Name (Name : String) return String is
+       Simple : String := Simple_Name (Name);
+       --  Simple'First is guaranteed to be 1
+ 
+    begin
+       To_Lower_If_Case_Insensitive (Simple);
+ 
+       --  Look for the last dot in the file name and return the part of the
+       --  file name preceding this last dot. If the first dot is the first
+       --  character of the file name, the base name is the empty string.
+ 
+       for Pos in reverse Simple'Range loop
+          if Simple (Pos) = '.' then
+             return Simple (1 .. Pos - 1);
+          end if;
+       end loop;
+ 
+       --  If there is no dot, return the complete file name
+ 
+       return Simple;
+    end Base_Name;
+ 
+    -------------
+    -- Compose --
+    -------------
+ 
+    function Compose
+      (Containing_Directory : String := "";
+       Name                 : String;
+       Extension            : String := "") return String
+    is
+       Result : String (1 .. Containing_Directory'Length +
+                               Name'Length + Extension'Length + 2);
+       Last   : Natural;
+ 
+    begin
+       --  First, deal with the invalid cases
+ 
+       if not Is_Valid_Path_Name (Containing_Directory) then
+          raise Name_Error;
+ 
+       elsif
+         Extension'Length = 0 and then (not Is_Valid_Simple_Name (Name))
+       then
+          raise Name_Error;
+ 
+       elsif Extension'Length /= 0 and then
+         (not Is_Valid_Simple_Name (Name & '.' & Extension))
+       then
+          raise Name_Error;
+ 
+          --  This is not an invalid case. Build the path name.
+ 
+       else
+          Last := Containing_Directory'Length;
+          Result (1 .. Last) := Containing_Directory;
+ 
+          --  Add a directory separator if needed
+ 
+          if Result (Last) /= Dir_Separator then
+             Last := Last + 1;
+             Result (Last) := Dir_Separator;
+          end if;
+ 
+          --  Add the file name
+ 
+          Result (Last + 1 .. Last + Name'Length) := Name;
+          Last := Last + Name'Length;
+ 
+          --  If extension was specified, add dot followed by this extension
+ 
+          if Extension'Length /= 0 then
+             Last := Last + 1;
+             Result (Last) := '.';
+             Result (Last + 1 .. Last + Extension'Length) := Extension;
+             Last := Last + Extension'Length;
+          end if;
+ 
+          To_Lower_If_Case_Insensitive (Result (1 .. Last));
+          return Result (1 .. Last);
+       end if;
+    end Compose;
+ 
+    --------------------------
+    -- Containing_Directory --
+    --------------------------
+ 
+    function Containing_Directory (Name : String) return String is
+    begin
+       --  First, the invalid case
+ 
+       if not Is_Valid_Path_Name (Name) then
+          raise Name_Error;
+ 
+       else
+          --  Get the directory name using GNAT.Directory_Operations.Dir_Name
+ 
+          declare
+             Value : constant String := Dir_Name (Path => Name);
+             Result : String (1 .. Value'Length);
+             Last : Natural := Result'Last;
+ 
+          begin
+             Result := Value;
+ 
+             --  Remove any trailing directory separator, except as the first
+             --  character.
+ 
+             while Last > 1 and then Result (Last) = Dir_Separator loop
+                Last := Last - 1;
+             end loop;
+ 
+             --  Special case of current directory, identified by "."
+ 
+             if Last = 1 and then Result (1) = '.' then
+                return Get_Current_Dir;
+ 
+             else
+                To_Lower_If_Case_Insensitive (Result (1 .. Last));
+                return Result (1 .. Last);
+             end if;
+          end;
+       end if;
+    end Containing_Directory;
+ 
+    ---------------
+    -- Copy_File --
+    ---------------
+ 
+    procedure Copy_File
+      (Source_Name   : String;
+       Target_Name   : String;
+       Form          : String := "")
+    is
+       pragma Unreferenced (Form);
+       Success : Boolean;
+ 
+    begin
+       --  First, the invalid cases
+ 
+       if not Is_Valid_Path_Name (Source_Name)
+         or else not Is_Valid_Path_Name (Target_Name)
+         or else not Is_Regular_File (Source_Name)
+       then
+          raise Name_Error;
+ 
+       elsif Is_Directory (Target_Name) then
+          raise Use_Error;
+ 
+       else
+          --  The implementation uses GNAT.OS_Lib.Copy_File, with parameters
+          --  suitable for all platforms.
+ 
+          Copy_File
+            (Source_Name, Target_Name, Success, Overwrite, None);
+ 
+          if not Success then
+             raise Use_Error;
+          end if;
+       end if;
+    end Copy_File;
+ 
+    ----------------------
+    -- Create_Directory --
+    ----------------------
+ 
+    procedure Create_Directory
+      (New_Directory : String;
+       Form          : String := "")
+    is
+       pragma Unreferenced (Form);
+ 
+    begin
+       --  First, the invalid case
+ 
+       if not Is_Valid_Path_Name (New_Directory) then
+          raise Name_Error;
+ 
+       else
+          --  The implementation uses GNAT.Directory_Operations.Make_Dir
+ 
+          begin
+             Make_Dir (Dir_Name => New_Directory);
+ 
+          exception
+             when Directory_Error =>
+                raise Use_Error;
+          end;
+       end if;
+    end Create_Directory;
+ 
+    -----------------
+    -- Create_Path --
+    -----------------
+ 
+    procedure Create_Path
+      (New_Directory : String;
+       Form          : String := "")
+    is
+       pragma Unreferenced (Form);
+ 
+       New_Dir : String (1 .. New_Directory'Length + 1);
+       Last    : Positive := 1;
+ 
+    begin
+       --  First, the invalid case
+ 
+       if not Is_Valid_Path_Name (New_Directory) then
+          raise Name_Error;
+ 
+       else
+          --  Build New_Dir with a directory separator at the end, so that the
+          --  complete path will be found in the loop below.
+ 
+          New_Dir (1 .. New_Directory'Length) := New_Directory;
+          New_Dir (New_Dir'Last) := Directory_Separator;
+ 
+          --  Create, if necessary, each directory in the path
+ 
+          for J in 2 .. New_Dir'Last loop
+ 
+             --  Look for the end of an intermediate directory
+ 
+             if New_Dir (J) /= Dir_Separator then
+                Last := J;
+ 
+             --  We have found a new intermediate directory each time we find
+             --  a first directory separator.
+ 
+             elsif New_Dir (J - 1) /= Dir_Separator then
+ 
+                --  No need to create the directory if it already exists
+ 
+                if Is_Directory (New_Dir (1 .. Last)) then
+                   null;
+ 
+                --  It is an error if a file with such a name already exists
+ 
+                elsif Is_Regular_File (New_Dir (1 .. Last)) then
+                   raise Use_Error;
+ 
+                else
+                   --  The implementation uses
+                   --  GNAT.Directory_Operations.Make_Dir.
+ 
+                   begin
+                      Make_Dir (Dir_Name => New_Dir (1 .. Last));
+ 
+                   exception
+                      when Directory_Error =>
+                         raise Use_Error;
+                   end;
+                end if;
+             end if;
+          end loop;
+       end if;
+    end Create_Path;
+ 
+    -----------------------
+    -- Current_Directory --
+    -----------------------
+ 
+    function Current_Directory return String is
+ 
+       --  The implementation uses GNAT.Directory_Operations.Get_Current_Dir
+ 
+       Cur : String := Normalize_Pathname (Get_Current_Dir);
+ 
+    begin
+       To_Lower_If_Case_Insensitive (Cur);
+ 
+       if Cur'Length > 1 and then Cur (Cur'Last) = Dir_Separator then
+          return Cur (1 .. Cur'Last - 1);
+       else
+          return Cur;
+       end if;
+    end Current_Directory;
+ 
+    ----------------------
+    -- Delete_Directory --
+    ----------------------
+ 
+    procedure Delete_Directory (Directory : String) is
+    begin
+       --  First, the invalid cases
+ 
+       if not Is_Valid_Path_Name (Directory) then
+          raise Name_Error;
+ 
+       elsif not Is_Directory (Directory) then
+          raise Name_Error;
+ 
+       else
+          --  The implementation uses GNAT.Directory_Operations.Remove_Dir
+ 
+          begin
+             Remove_Dir (Dir_Name => Directory, Recursive => False);
+ 
+          exception
+             when Directory_Error =>
+                raise Use_Error;
+          end;
+       end if;
+    end Delete_Directory;
+ 
+    -----------------
+    -- Delete_File --
+    -----------------
+ 
+    procedure Delete_File (Name : String) is
+       Success : Boolean;
+ 
+    begin
+       --  First, the invalid cases
+ 
+       if not Is_Valid_Path_Name (Name) then
+          raise Name_Error;
+ 
+       elsif not Is_Regular_File (Name) then
+          raise Name_Error;
+ 
+       else
+          --  The implementation uses GNAT.OS_Lib.Delete_File
+ 
+          Delete_File (Name, Success);
+ 
+          if not Success then
+             raise Use_Error;
+          end if;
+       end if;
+    end Delete_File;
+ 
+    -----------------
+    -- Delete_Tree --
+    -----------------
+ 
+    procedure Delete_Tree (Directory : String) is
+    begin
+       --  First, the invalid cases
+ 
+       if not Is_Valid_Path_Name (Directory) then
+          raise Name_Error;
+ 
+       elsif not Is_Directory (Directory) then
+          raise Name_Error;
+ 
+       else
+          --  The implementation uses GNAT.Directory_Operations.Remove_Dir
+ 
+          begin
+             Remove_Dir (Directory, Recursive => True);
+ 
+          exception
+             when Directory_Error =>
+                raise Use_Error;
+          end;
+       end if;
+    end Delete_Tree;
+ 
+    ------------
+    -- Exists --
+    ------------
+ 
+    function Exists (Name : String) return Boolean is
+    begin
+       --  First, the invalid case
+ 
+       if not Is_Valid_Path_Name (Name) then
+          raise Name_Error;
+ 
+       else
+          --  The implementation is in File_Exists
+ 
+          return File_Exists (Name);
+       end if;
+    end Exists;
+ 
+    ---------------
+    -- Extension --
+    ---------------
+ 
+    function Extension (Name : String) return String is
+    begin
+       --  First, the invalid case
+ 
+       if not Is_Valid_Path_Name (Name) then
+          raise Name_Error;
+ 
+       else
+          --  Look for first dot that is not followed by a directory separator
+ 
+          for Pos in reverse Name'Range loop
+ 
+             --  If a directory separator is found before a dot, there
+             --  is no extension.
+ 
+             if Name (Pos) = Dir_Separator then
+                return Empty_String;
+ 
+             elsif Name (Pos) = '.' then
+ 
+                --  We found a dot, build the return value with lower bound 1
+ 
+                declare
+                   Result : String (1 .. Name'Last - Pos);
+                begin
+                   Result := Name (Pos + 1 .. Name'Last);
+                   return Result;
+                   --  This should be done with a subtype conversion, avoiding
+                   --  the unnecessary junk copy ???
+                end;
+             end if;
+          end loop;
+ 
+          --  No dot were found, there is no extension
+ 
+          return Empty_String;
+       end if;
+    end Extension;
+ 
+    ----------------------
+    -- Fetch_Next_Entry --
+    ----------------------
+ 
+    procedure Fetch_Next_Entry (Search : Search_Type) is
+       Name : String (1 .. 255);
+       Last : Natural;
+ 
+       Kind : File_Kind := Ordinary_File;
+       --  Initialized to avoid a compilation warning
+ 
+    begin
+       --  Search.Value.Is_Valid is always True when Fetch_Next_Entry is called
+ 
+       loop
+          Read (Search.Value.Dir, Name, Last);
+ 
+          --  If no matching entry is found, set Is_Valid to False
+ 
+          if Last = 0 then
+             Search.Value.Is_Valid := False;
+             exit;
+          end if;
+ 
+          --  Check if the entry matches the pattern
+ 
+          if Match (Name (1 .. Last), Search.Value.Pattern) then
+             declare
+                Full_Name : constant String :=
+                              Compose
+                                (To_String
+                                   (Search.Value.Name), Name (1 .. Last));
+                Found     : Boolean := False;
+ 
+             begin
+                if File_Exists (Full_Name) then
+ 
+                   --  Now check if the file kind matches the filter
+ 
+                   if Is_Regular_File (Full_Name) then
+                      if Search.Value.Filter (Ordinary_File) then
+                         Kind := Ordinary_File;
+                         Found := True;
+                      end if;
+ 
+                   elsif Is_Directory (Full_Name) then
+                      if Search.Value.Filter (Directory) then
+                         Kind := Directory;
+                         Found := True;
+                      end if;
+ 
+                   elsif Search.Value.Filter (Special_File) then
+                      Kind := Special_File;
+                      Found := True;
+                   end if;
+ 
+                   --  If it does, update Search and return
+ 
+                   if Found then
+                      Search.Value.Entry_Fetched := True;
+                      Search.Value.Dir_Entry :=
+                        (Is_Valid => True,
+                         Simple   => To_Unbounded_String (Name (1 .. Last)),
+                         Full     => To_Unbounded_String (Full_Name),
+                         Kind     => Kind);
+                      exit;
+                   end if;
+                end if;
+             end;
+          end if;
+       end loop;
+    end Fetch_Next_Entry;
+ 
+    -----------------
+    -- File_Exists --
+    -----------------
+ 
+    function File_Exists (Name : String) return Boolean is
+       function C_File_Exists (A : System.Address) return Integer;
+       pragma Import (C, C_File_Exists, "__gnat_file_exists");
+ 
+       C_Name : String (1 .. Name'Length + 1);
+ 
+    begin
+       C_Name (1 .. Name'Length) := Name;
+       C_Name (C_Name'Last) := ASCII.NUL;
+       return C_File_Exists (C_Name (1)'Address) = 1;
+    end File_Exists;
+ 
+    --------------
+    -- Finalize --
+    --------------
+ 
+    procedure Finalize (Search : in out Search_Type) is
+    begin
+       if Search.Value /= null then
+ 
+          --  Close the directory, if one is open
+ 
+          if Is_Open (Search.Value.Dir) then
+             Close (Search.Value.Dir);
+          end if;
+ 
+          Free (Search.Value);
+       end if;
+    end Finalize;
+ 
+    ---------------
+    -- Full_Name --
+    ---------------
+ 
+    function Full_Name (Name : String) return String is
+    begin
+       --  First, the invalid case
+ 
+       if not Is_Valid_Path_Name (Name) then
+          raise Name_Error;
+ 
+       else
+          --  Build the return value with lower bound 1
+ 
+          --  Use GNAT.OS_Lib.Normalize_Pathname
+ 
+          declare
+             Value : String := Normalize_Pathname (Name);
+             subtype Result is String (1 .. Value'Length);
+          begin
+             To_Lower_If_Case_Insensitive (Value);
+             return Result (Value);
+          end;
+       end if;
+    end Full_Name;
+ 
+    function Full_Name (Directory_Entry : Directory_Entry_Type) return String is
+    begin
+       --  First, the invalid case
+ 
+       if not Directory_Entry.Is_Valid then
+          raise Status_Error;
+ 
+       else
+          --  The value to return has already been computed
+ 
+          return To_String (Directory_Entry.Full);
+       end if;
+    end Full_Name;
+ 
+    --------------------
+    -- Get_Next_Entry --
+    --------------------
+ 
+    procedure Get_Next_Entry
+      (Search          : in out Search_Type;
+       Directory_Entry : out Directory_Entry_Type)
+    is
+    begin
+       --  First, the invalid case
+ 
+       if Search.Value = null or else not Search.Value.Is_Valid then
+          raise Status_Error;
+       end if;
+ 
+       --  Fetch the next entry, if needed
+ 
+       if not Search.Value.Entry_Fetched then
+          Fetch_Next_Entry (Search);
+       end if;
+ 
+       --  It is an error if no valid entry is found
+ 
+       if not Search.Value.Is_Valid then
+          raise Status_Error;
+ 
+       else
+          --  Reset Entry_Fatched and return the entry
+ 
+          Search.Value.Entry_Fetched := False;
+          Directory_Entry := Search.Value.Dir_Entry;
+       end if;
+    end Get_Next_Entry;
+ 
+    ----------
+    -- Kind --
+    ----------
+ 
+    function Kind (Name : String) return File_Kind is
+    begin
+       --  First, the invalid case
+ 
+       if not File_Exists (Name) then
+          raise Name_Error;
+ 
+       elsif Is_Regular_File (Name) then
+          return Ordinary_File;
+ 
+       elsif Is_Directory (Name) then
+          return Directory;
+ 
+       else
+          return Special_File;
+       end if;
+    end Kind;
+ 
+    function Kind (Directory_Entry : Directory_Entry_Type) return File_Kind is
+    begin
+       --  First, the invalid case
+ 
+       if not Directory_Entry.Is_Valid then
+          raise Status_Error;
+ 
+       else
+          --  The value to return has already be computed
+ 
+          return Directory_Entry.Kind;
+       end if;
+    end Kind;
+ 
+    -----------------------
+    -- Modification_Time --
+    -----------------------
+ 
+    function Modification_Time (Name : String) return Ada.Calendar.Time is
+       Date   : OS_Time;
+       Year   : Year_Type;
+       Month  : Month_Type;
+       Day    : Day_Type;
+       Hour   : Hour_Type;
+       Minute : Minute_Type;
+       Second : Second_Type;
+ 
+    begin
+       --  First, the invalid cases
+ 
+       if not (Is_Regular_File (Name) or else Is_Directory (Name)) then
+          raise Name_Error;
+ 
+       else
+          Date := File_Time_Stamp (Name);
+          --  ???? We need to be able to convert OS_Time to Ada.Calendar.Time
+          --  For now, use the component of the OS_Time to create the
+          --  Calendar.Time value.
+ 
+          GM_Split (Date, Year, Month, Day, Hour, Minute, Second);
+ 
+          return Ada.Calendar.Time_Of
+            (Year, Month, Day, Duration (Second + 60 * (Minute + 60 * Hour)));
+       end if;
+    end Modification_Time;
+ 
+    function Modification_Time
+      (Directory_Entry : Directory_Entry_Type) return Ada.Calendar.Time
+    is
+    begin
+       --  First, the invalid case
+ 
+       if not Directory_Entry.Is_Valid then
+          raise Status_Error;
+ 
+       else
+          --  The value to return has already be computed
+ 
+          return Modification_Time (To_String (Directory_Entry.Full));
+       end if;
+    end Modification_Time;
+ 
+    ------------------
+    -- More_Entries --
+    ------------------
+ 
+    function More_Entries (Search : Search_Type) return Boolean is
+    begin
+       if Search.Value = null then
+          return False;
+ 
+       elsif Search.Value.Is_Valid then
+ 
+          --  Fetch the next entry, if needed
+ 
+          if not Search.Value.Entry_Fetched then
+             Fetch_Next_Entry (Search);
+          end if;
+       end if;
+ 
+       return Search.Value.Is_Valid;
+    end More_Entries;
+ 
+    ------------
+    -- Rename --
+    ------------
+ 
+    procedure Rename (Old_Name, New_Name : String) is
+       Success : Boolean;
+ 
+    begin
+       --  First, the invalid cases
+ 
+       if not Is_Valid_Path_Name (Old_Name)
+         or else not Is_Valid_Path_Name (New_Name)
+         or else (not Is_Regular_File (Old_Name)
+                    and then not Is_Directory (Old_Name))
+       then
+          raise Name_Error;
+ 
+       elsif Is_Regular_File (New_Name) or Is_Directory (New_Name) then
+          raise Use_Error;
+ 
+       else
+          --  The implementation uses GNAT.OS_Lib.Rename_File
+ 
+          Rename_File (Old_Name, New_Name, Success);
+ 
+          if not Success then
+             raise Use_Error;
+          end if;
+       end if;
+    end Rename;
+ 
+    -------------------
+    -- Set_Directory --
+    -------------------
+ 
+    procedure Set_Directory (Directory : String) is
+    begin
+       --  The implementation uses GNAT.Directory_Operations.Change_Dir
+ 
+       Change_Dir (Dir_Name => Directory);
+ 
+    exception
+       when Directory_Error =>
+          raise Name_Error;
+    end Set_Directory;
+ 
+    -----------------
+    -- Simple_Name --
+    -----------------
+ 
+    function Simple_Name (Name : String) return String is
+    begin
+       --  First, the invalid case
+ 
+       if not Is_Valid_Path_Name (Name) then
+          raise Name_Error;
+ 
+       else
+          --  Build the value to return with lower bound 1
+ 
+          --  The implementation uses GNAT.Directory_Operations.Base_Name
+ 
+          declare
+             Value  : String := GNAT.Directory_Operations.Base_Name (Name);
+             subtype Result is String (1 .. Value'Length);
+          begin
+             To_Lower_If_Case_Insensitive (Value);
+             return Result (Value);
+          end;
+       end if;
+    end Simple_Name;
+ 
+    function Simple_Name
+      (Directory_Entry : Directory_Entry_Type) return String
+    is
+    begin
+       --  First, the invalid case
+ 
+       if not Directory_Entry.Is_Valid then
+          raise Status_Error;
+ 
+       else
+          --  The value to return has already be computed
+ 
+          return To_String (Directory_Entry.Simple);
+       end if;
+    end Simple_Name;
+ 
+    ----------
+    -- Size --
+    ----------
+ 
+    function Size (Name : String) return File_Size is
+       C_Name : String (1 .. Name'Length + 1);
+ 
+       function C_Size (Name : System.Address) return Long_Integer;
+       pragma Import (C, C_Size, "__gnat_named_file_length");
+ 
+    begin
+       --  First, the invalid case
+ 
+       if not Is_Regular_File (Name) then
+          raise Name_Error;
+ 
+       else
+          C_Name (1 .. Name'Length) := Name;
+          C_Name (C_Name'Last) := ASCII.NUL;
+          return File_Size (C_Size (C_Name'Address));
+       end if;
+    end Size;
+ 
+    function Size (Directory_Entry : Directory_Entry_Type) return File_Size is
+    begin
+       --  First, the invalid case
+ 
+       if not Directory_Entry.Is_Valid then
+          raise Status_Error;
+ 
+       else
+          --  The value to return has already be computed
+ 
+          return Size (To_String (Directory_Entry.Full));
+       end if;
+    end Size;
+ 
+    ------------------
+    -- Start_Search --
+    ------------------
+ 
+    procedure Start_Search
+      (Search    : in out Search_Type;
+       Directory : String;
+       Pattern   : String;
+       Filter    : Filter_Type := (others => True))
+    is
+    begin
+       --  First, the invalid case
+ 
+       if not Is_Directory (Directory) then
+          raise Name_Error;
+       end if;
+ 
+       --  If needed, finalize Search
+ 
+       Finalize (Search);
+ 
+       --  Allocate the default data
+ 
+       Search.Value := new Search_Data;
+ 
+       begin
+          --  Check the pattern
+ 
+          Search.Value.Pattern := Compile (Pattern, Glob => True);
+ 
+       exception
+          when Error_In_Regexp =>
+             raise Name_Error;
+       end;
+ 
+       --  Initialize some Search components
+ 
+       Search.Value.Filter := Filter;
+       Search.Value.Name := To_Unbounded_String (Full_Name (Directory));
+       Open (Search.Value.Dir, Directory);
+       Search.Value.Is_Valid := True;
+    end Start_Search;
+ 
+    ----------------------------------
+    -- To_Lower_If_Case_Insensitive --
+    ----------------------------------
+ 
+    procedure To_Lower_If_Case_Insensitive (S : in out String) is
+    begin
+       if not Is_Path_Name_Case_Sensitive then
+          for J in S'Range loop
+             S (J) := To_Lower (S (J));
+          end loop;
+       end if;
+    end To_Lower_If_Case_Insensitive;
+ 
+ end Ada.Directories;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-direct.ads gcc-4.0.0/gcc/ada/a-direct.ads
*** gcc-3.4.3/gcc/ada/a-direct.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-direct.ads	Mon Sep 13 10:18:41 2004
***************
*** 0 ****
--- 1,418 ----
+ ------------------------------------------------------------------------------
+ --                                                                        --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --                      A D A . D I R E C T O R I E S                       --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 2004 Free Software Foundation, Inc.               --
+ --                                                                          --
+ -- This specification is derived for use with GNAT from AI-00248,  which is --
+ -- expected to be a part of a future expected revised Ada Reference Manual. --
+ -- The copyright notice above, and the license provisions that follow apply --
+ -- solely to the  contents of the part following the private keyword.       --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  Ada 2005: Implementation of Ada.Directories (AI95-00248). Note that this
+ --  unit is available without -gnat05. That seems reasonable, since you only
+ --  get it if you explicitly ask for it.
+ 
+ --  External files may be classified as directories, special files, or ordinary
+ --  files. A directory is an external file that is a container for files on
+ --  the target system. A special file is an external file that cannot be
+ --  created or read by a predefined Ada Input-Output package. External files
+ --  that are not special files or directories are called ordinary files.
+ 
+ --  A file name is a string identifying an external file. Similarly, a
+ --  directory name is a string identifying a directory. The interpretation of
+ --  file names and directory names is implementation-defined.
+ 
+ --  The full name of an external file is a full specification of the name of
+ --  the file. If the external environment allows alternative specifications of
+ --  the name (for example, abbreviations), the full name should not use such
+ --  alternatives. A full name typically will include the names of all of
+ --  directories that contain the item. The simple name of an external file is
+ --  the name of the item, not including any containing directory names. Unless
+ --  otherwise specified, a file name or directory name parameter to a
+ --  predefined Ada input-output subprogram can be a full name, a simple name,
+ --  or any other form of name supported by the implementation.
+ 
+ --  The default directory is the directory that is used if a directory or
+ --  file name is not a full name (that is, when the name does not fully
+ --  identify all of the containing directories).
+ 
+ --  A directory entry is a single item in a directory, identifying a single
+ --  external file (including directories and special files).
+ 
+ --  For each function that returns a string, the lower bound of the returned
+ --  value is 1.
+ 
+ with Ada.Calendar;
+ with Ada.Finalization;
+ with Ada.IO_Exceptions;
+ with Ada.Strings.Unbounded;
+ 
+ package Ada.Directories is
+ 
+    pragma Ada_05;
+    --  To be removed later ???
+ 
+    -----------------------------------
+    -- Directory and File Operations --
+    -----------------------------------
+ 
+    function Current_Directory return String;
+    --  Returns the full directory name for the current default directory. The
+    --  name returned shall be suitable for a future call to Set_Directory.
+    --  The exception Use_Error is propagated if a default directory is not
+    --  supported by the external environment.
+ 
+    procedure Set_Directory (Directory : String);
+    --  Sets the current default directory. The exception Name_Error is
+    --  propagated if the string given as Directory does not identify an
+    --  existing directory. The exception Use_Error is propagated if the
+    --  external environment does not support making Directory (in the absence
+    --  of Name_Error) a default directory.
+ 
+    procedure Create_Directory
+      (New_Directory : String;
+       Form          : String := "");
+    --  Creates a directory with name New_Directory. The Form parameter can be
+    --  used to give system-dependent characteristics of the directory; the
+    --  interpretation of the Form parameter is implementation-defined. A null
+    --  string for Form specifies the use of the default options of the
+    --  implementation of the new directory. The exception Name_Error is
+    --  propagated if the string given as New_Directory does not allow the
+    --  identification of a directory. The exception Use_Error is propagated if
+    --  the external environment does not support the creation of a directory
+    --  with the given name (in the absence of Name_Error) and form.
+ 
+    procedure Delete_Directory (Directory : String);
+    --  Deletes an existing empty directory with name Directory. The exception
+    --  Name_Error is propagated if the string given as Directory does not
+    --  identify an existing directory. The exception Use_Error is propagated
+    --  if the external environment does not support the deletion of the
+    --  directory (or some portion of its contents) with the given name (in the
+    --  absence of Name_Error).
+ 
+    procedure Create_Path
+      (New_Directory : String;
+       Form          : String := "");
+    --  Creates zero or more directories with name New_Directory. Each
+    --  non-existent directory named by New_Directory is created. For example,
+    --  on a typical Unix system, Create_Path ("/usr/me/my"); would create
+    --  directory "me" in directory "usr", then create directory "my" in
+    --  directory "me". The Form can be used to give system-dependent
+    --  characteristics of the directory; the interpretation of the Form
+    --  parameter is implementation-defined. A null string for Form specifies
+    --  the use of the default options of the implementation of the new
+    --  directory. The exception Name_Error is propagated if the string given
+    --  as New_Directory does not allow the identification of any directory.
+    --  The exception Use_Error is propagated if the external environment does
+    --  not support the creation of any directories with the given name (in the
+    --  absence of Name_Error) and form.
+ 
+    procedure Delete_Tree (Directory : String);
+    --  Deletes an existing directory with name Directory. The directory and
+    --  all of its contents (possibly including other directories) are deleted.
+    --  The exception Name_Error is propagated if the string given as Directory
+    --  does not identify an existing directory. The exception Use_Error is
+    --  propagated if the external environment does not support the deletion of
+    --  the directory or some portion of its contents with the given name (in
+    --  the absence of Name_Error). If Use_Error is propagated, it is
+    --  unspecified if a portion of the contents of the directory are deleted.
+ 
+    procedure Delete_File (Name : String);
+    --  Deletes an existing ordinary or special file with Name. The exception
+    --  Name_Error is propagated if the string given as Name does not identify
+    --  an existing ordinary or special external file. The exception Use_Error
+    --  is propagated if the external environment does not support the deletion
+    --  of the file with the given name (in the absence of Name_Error).
+ 
+    procedure Rename (Old_Name, New_Name : String);
+    --  Renames an existing external file (including directories) with Old_Name
+    --  to New_Name. The exception Name_Error is propagated if the string given
+    --  as Old_Name does not identify an existing external file. The exception
+    --  Use_Error is propagated if the external environment does not support the
+    --  renaming of the file with the given name (in the absence of Name_Error).
+    --  In particular, Use_Error is propagated if a file or directory already
+    --  exists with New_Name.
+ 
+    procedure Copy_File
+      (Source_Name   : String;
+       Target_Name   : String;
+       Form          : String := "");
+    --  Copies the contents of the existing external file with Source_Name
+    --  to Target_Name. The resulting external file is a duplicate of the source
+    --  external file. The Form can be used to give system-dependent
+    --  characteristics of the resulting external file; the interpretation of
+    --  the Form parameter is implementation-defined. Exception Name_Error is
+    --  propagated if the string given as Source_Name does not identify an
+    --  existing external ordinary or special file or if the string given as
+    --  Target_Name does not allow the identification of an external file.
+    --  The exception Use_Error is propagated if the external environment does
+    --  not support the creating of the file with the name given by Target_Name
+    --  and form given by Form, or copying of the file with the name given by
+    --  Source_Name (in the absence of Name_Error).
+ 
+ 
+    --  File and directory name operations:
+ 
+    function Full_Name (Name : String) return String;
+    --  Returns the full name corresponding to the file name specified by Name.
+    --  The exception Name_Error is propagated if the string given as Name does
+    --  not allow the identification of an external file (including directories
+    --  and special files).
+ 
+    function Simple_Name (Name : String) return String;
+    --  Returns the simple name portion of the file name specified by Name. The
+    --  exception Name_Error is propagated if the string given as Name does not
+    --  allow the identification of an external file (including directories and
+    --  special files).
+ 
+    function Containing_Directory (Name : String) return String;
+    --  Returns the name of the containing directory of the external file
+    --  (including directories) identified by Name. If more than one directory
+    --  can contain Name, the directory name returned is implementation-defined.
+    --  The exception Name_Error is propagated if the string given as Name does
+    --  not allow the identification of an external file. The exception
+    --  Use_Error is propagated if the external file does not have a containing
+    --  directory.
+ 
+    function Extension (Name : String) return String;
+    --  Returns the extension name corresponding to Name. The extension name is
+    --  a portion of a simple name (not including any separator characters),
+    --  typically used to identify the file class. If the external environment
+    --  does not have extension names, then the null string is returned.
+    --  The exception Name_Error is propagated if the string given as Name does
+    --  not allow the identification of an external file.
+ 
+    function Base_Name (Name : String) return String;
+    --  Returns the base name corresponding to Name. The base name is the
+    --  remainder of a simple name after removing any extension and extension
+    --  separators. The exception Name_Error is propagated if the string given
+    --  as Name does not allow the identification of an external file
+    --  (including directories and special files).
+ 
+    function Compose
+      (Containing_Directory : String := "";
+       Name                 : String;
+       Extension            : String := "") return String;
+    --  Returns the name of the external file with the specified
+    --  Containing_Directory, Name, and Extension. If Extension is the null
+    --  string, then Name is interpreted as a simple name; otherwise Name is
+    --  interpreted as a base name. The exception Name_Error is propagated if
+    --  the string given as Containing_Directory is not null and does not allow
+    --  the identification of a directory, or if the string given as Extension
+    --  is not null and is not a possible extension, or if the string given as
+    --  Name is not a possible simple name (if Extension is null) or base name
+    --  (if Extension is non-null).
+ 
+ 
+    --  File and directory queries:
+ 
+    type File_Kind is (Directory, Ordinary_File, Special_File);
+    --  The type File_Kind represents the kind of file represented by an
+    --  external file or directory.
+ 
+    type File_Size is range 0 .. Long_Long_Integer'Last;
+    --  The type File_Size represents the size of an external file.
+ 
+    function Exists (Name : String) return Boolean;
+    --  Returns True if external file represented by Name exists, and False
+    --  otherwise. The exception Name_Error is propagated if the string given as
+    --  Name does not allow the identification of an external file (including
+    --  directories and special files).
+ 
+    function Kind (Name : String) return File_Kind;
+    --  Returns the kind of external file represented by Name. The exception
+    --  Name_Error is propagated if the string given as Name does not allow the
+    --  identification of an existing external file.
+ 
+    function Size (Name : String) return File_Size;
+    --  Returns the size of the external file represented by Name. The size of
+    --  an external file is the number of stream elements contained in the file.
+    --  If the external file is discontiguous (not all elements exist), the
+    --  result is implementation-defined. If the external file is not an
+    --  ordinary file, the result is implementation-defined. The exception
+    --  Name_Error is propagated if the string given as Name does not allow the
+    --  identification of an existing external file. The exception
+    --  Constraint_Error is propagated if the file size is not a value of type
+    --  File_Size.
+ 
+    function Modification_Time (Name : String) return Ada.Calendar.Time;
+    --  Returns the time that the external file represented by Name was most
+    --  recently modified. If the external file is not an ordinary file, the
+    --  result is implementation-defined. The exception Name_Error is propagated
+    --  if the string given as Name does not allow the identification of an
+    --  existing external file. The exception Use_Error is propagated if the
+    --  external environment does not support the reading the modification time
+    --  of the file with the name given by Name (in the absence of Name_Error).
+ 
+    -------------------------
+    -- Directory Searching --
+    -------------------------
+ 
+    type Directory_Entry_Type is limited private;
+    --  The type Directory_Entry_Type represents a single item in a directory.
+    --  These items can only be created by the Get_Next_Entry procedure in this
+    --  package. Information about the item can be obtained from the functions
+    --  declared in this package. A default initialized object of this type is
+    --  invalid; objects returned from Get_Next_Entry are valid.
+ 
+    type Filter_Type is array (File_Kind) of Boolean;
+    --  The type Filter_Type specifies which directory entries are provided from
+    --  a search operation. If the Directory component is True, directory
+    --  entries representing directories are provided. If the Ordinary_File
+    --  component is True, directory entries representing ordinary files are
+    --  provided. If the Special_File component is True, directory entries
+    --  representing special files are provided.
+ 
+    type Search_Type is limited private;
+    --  The type Search_Type contains the state of a directory search. A
+    --  default-initialized Search_Type object has no entries available
+    --  (More_Entries returns False).
+ 
+    procedure Start_Search
+      (Search    : in out Search_Type;
+       Directory : String;
+       Pattern   : String;
+       Filter    : Filter_Type := (others => True));
+    --  Starts a search in the directory entry in the directory named by
+    --  Directory for entries matching Pattern. Pattern represents a file name
+    --  matching pattern. If Pattern is null, all items in the directory are
+    --  matched; otherwise, the interpretation of Pattern is
+    --  implementation-defined. Only items which match Filter will be returned.
+    --  After a successful call on Start_Search, the object Search may have
+    --  entries available, but it may have no entries available if no files or
+    --  directories match Pattern and Filter. The exception Name_Error is
+    --  propagated if the string given by Directory does not identify an
+    --  existing directory, or if Pattern does not allow the identification of
+    --  any possible external file or directory. The exception Use_Error is
+    --  propagated if the external environment does not support the searching
+    --  of the directory with the given name (in the absence of Name_Error).
+ 
+    procedure End_Search (Search : in out Search_Type);
+    --  Ends the search represented by Search. After a successful call on
+    --  End_Search, the object Search will have no entries available.
+ 
+    function More_Entries (Search : Search_Type) return Boolean;
+    --  Returns True if more entries are available to be returned by a call
+    --  to Get_Next_Entry for the specified search object, and False otherwise.
+ 
+    procedure Get_Next_Entry
+      (Search          : in out Search_Type;
+       Directory_Entry : out Directory_Entry_Type);
+    --  Returns the next Directory_Entry for the search described by Search that
+    --  matches the pattern and filter. If no further matches are available,
+    --  Status_Error is raised. It is implementation-defined as to whether the
+    --  results returned by this routine are altered if the contents of the
+    --  directory are altered while the Search object is valid (for example, by
+    --  another program). The exception Use_Error is propagated if the external
+    --  environment does not support continued searching of the directory
+    --  represented by Search.
+ 
+    -------------------------------------
+    -- Operations on Directory Entries --
+    -------------------------------------
+ 
+    function Simple_Name (Directory_Entry : Directory_Entry_Type) return String;
+    --  Returns the simple external name of the external file (including
+    --  directories) represented by Directory_Entry. The format of the name
+    --  returned is implementation-defined. The exception Status_Error is
+    --  propagated if Directory_Entry is invalid.
+ 
+    function Full_Name (Directory_Entry : Directory_Entry_Type) return String;
+    --  Returns the full external name of the external file (including
+    --  directories) represented by Directory_Entry. The format of the name
+    --  returned is implementation-defined. The exception Status_Error is
+    --  propagated if Directory_Entry is invalid.
+ 
+    function Kind (Directory_Entry : Directory_Entry_Type) return File_Kind;
+    --  Returns the kind of external file represented by Directory_Entry. The
+    --  exception Status_Error is propagated if Directory_Entry is invalid.
+ 
+    function Size (Directory_Entry : Directory_Entry_Type) return File_Size;
+    --  Returns the size of the external file represented by Directory_Entry.
+    --  The size of an external file is the number of stream elements contained
+    --  in the file. If the external file is discontiguous (not all elements
+    --  exist), the result is implementation-defined. If the external file
+    --  represented by Directory_Entry is not an ordinary file, the result is
+    --  implementation-defined. The exception Status_Error is propagated if
+    --  Directory_Entry is invalid. The exception Constraint_Error is propagated
+    --  if the file size is not a value of type File_Size.
+ 
+    function Modification_Time
+      (Directory_Entry : Directory_Entry_Type) return Ada.Calendar.Time;
+    --  Returns the time that the external file represented by Directory_Entry
+    --  was most recently modified. If the external file represented by
+    --  Directory_Entry is not an ordinary file, the result is
+    --  implementation-defined. The exception Status_Error is propagated if
+    --  Directory_Entry is invalid. The exception Use_Error is propagated if
+    --  the external environment does not support the reading the modification
+    --  time of the file represented by Directory_Entry.
+ 
+    ----------------
+    -- Exceptions --
+    ----------------
+ 
+    Status_Error : exception renames Ada.IO_Exceptions.Status_Error;
+    Name_Error   : exception renames Ada.IO_Exceptions.Name_Error;
+    Use_Error    : exception renames Ada.IO_Exceptions.Use_Error;
+    Device_Error : exception renames Ada.IO_Exceptions.Device_Error;
+ 
+ private
+    type Directory_Entry_Type is record
+       Is_Valid : Boolean := False;
+       Simple   : Ada.Strings.Unbounded.Unbounded_String;
+       Full     : Ada.Strings.Unbounded.Unbounded_String;
+       Kind     : File_Kind := Ordinary_File;
+    end record;
+ 
+    --  The type Search_Data is defined in the body, so that the spec does not
+    --  depend on packages of the GNAT hierarchy.
+ 
+    type Search_Data;
+    type Search_Ptr is access Search_Data;
+ 
+    --  Search_Type need to be a controlled type, because it includes component
+    --  of type Dir_Type (in GNAT.Directory_Operations) that need to be closed
+    --  (if opened) during finalization.
+    --  The component need to be an access value, because Search_Data is not
+    --  fully defined in the spec.
+ 
+    type Search_Type is new Ada.Finalization.Controlled with record
+       Value : Search_Ptr;
+    end record;
+ 
+    procedure Finalize (Search : in out Search_Type);
+    --  Close the directory, if opened, and deallocate Value.
+ 
+    procedure End_Search (Search : in out Search_Type) renames Finalize;
+ 
+ end Ada.Directories;
+ 
+ 
diff -Nrcpad gcc-3.4.3/gcc/ada/a-direio.adb gcc-4.0.0/gcc/ada/a-direio.adb
*** gcc-3.4.3/gcc/ada/a-direio.adb	Mon Dec 15 11:51:00 2003
--- gcc-4.0.0/gcc/ada/a-direio.adb	Mon Jan  3 15:32:14 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Ada.Direct_IO is
*** 183,191 ****
        --  For a non-constrained variant record type, we read into an
        --  intermediate buffer, since we may have the case of discriminated
        --  records where a discriminant check is required, and we may need
!       --  to assign only part of the record buffer originally written
  
        if not Element_Type'Constrained then
           declare
              Buf : Element_Type;
  
--- 183,197 ----
        --  For a non-constrained variant record type, we read into an
        --  intermediate buffer, since we may have the case of discriminated
        --  records where a discriminant check is required, and we may need
!       --  to assign only part of the record buffer originally written.
  
+       --  Note: we have to turn warnings on/off because this use of
+       --  the Constrained attribute is an obsolescent feature.
+ 
+       pragma Warnings (Off);
        if not Element_Type'Constrained then
+          pragma Warnings (On);
+ 
           declare
              Buf : Element_Type;
  
*************** package body Ada.Direct_IO is
*** 205,211 ****
--- 211,223 ----
     begin
        --  Same processing for unconstrained case as above
  
+       --  Note: we have to turn warnings on/off because this use of
+       --  the Constrained attribute is an obsolescent feature.
+ 
+       pragma Warnings (Off);
        if not Element_Type'Constrained then
+          pragma Warnings (On);
+ 
           declare
              Buf : Element_Type;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/a-direio.ads gcc-4.0.0/gcc/ada/a-direio.ads
*** gcc-3.4.3/gcc/ada/a-direio.ads	Thu Apr 24 17:53:53 2003
--- gcc-4.0.0/gcc/ada/a-direio.ads	Thu Jul 15 20:34:34 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-1999 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** generic
*** 45,50 ****
--- 45,54 ----
  
  package Ada.Direct_IO is
  
+    pragma Compile_Time_Warning
+      (Element_Type'Has_Access_Values,
+       "?Element_Type for Direct_'I'O instance has access values");
+ 
     type File_Type is limited private;
  
     type File_Mode is (In_File, Inout_File, Out_File);
*************** package Ada.Direct_IO is
*** 54,62 ****
     --  used in this package and System.File_IO.
  
     for File_Mode use
!      (In_File     => 0,   -- System.File_IO.File_Mode'Pos (In_File)
!       Inout_File  => 1,   -- System.File_IO.File_Mode'Pos (Inout_File);
!       Out_File    => 2);  -- System.File_IO.File_Mode'Pos (Out_File)
  
     type Count is range 0 .. System.Direct_IO.Count'Last;
  
--- 58,66 ----
     --  used in this package and System.File_IO.
  
     for File_Mode use
!      (In_File    => 0,   -- System.File_IO.File_Mode'Pos (In_File)
!       Inout_File => 1,   -- System.File_IO.File_Mode'Pos (Inout_File);
!       Out_File   => 2);  -- System.File_IO.File_Mode'Pos (Out_File)
  
     type Count is range 0 .. System.Direct_IO.Count'Last;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/a-dirval-mingw.adb gcc-4.0.0/gcc/ada/a-dirval-mingw.adb
*** gcc-3.4.3/gcc/ada/a-dirval-mingw.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-dirval-mingw.adb	Wed Oct 27 13:56:03 2004
***************
*** 0 ****
--- 1,156 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --             A D A . D I R E C T O R I E S . V A L I D I T Y              --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                            (Windows Version)                             --
+ --                                                                          --
+ --          Copyright (C) 2004 Free Software Foundation, Inc.               --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the Windows version of this package
+ 
+ with Ada.Characters.Latin_1; use Ada.Characters.Latin_1;
+ 
+ package body Ada.Directories.Validity is
+ 
+    Invalid_Character : constant array (Character) of Boolean :=
+                          (NUL .. US | '\'       => True,
+                           '/' | ':' | '*' | '?' => True,
+                           '"' | '<' | '>' | '|' => True,
+                           DEL .. NBSP           => True,
+                           others                => False);
+ 
+    ---------------------------------
+    -- Is_Path_Name_Case_Sensitive --
+    ---------------------------------
+ 
+    function Is_Path_Name_Case_Sensitive return Boolean is
+    begin
+       return False;
+    end Is_Path_Name_Case_Sensitive;
+ 
+    ------------------------
+    -- Is_Valid_Path_Name --
+    ------------------------
+ 
+    function Is_Valid_Path_Name (Name : String) return Boolean is
+       Start : Positive := Name'First;
+       Last  : Natural;
+ 
+    begin
+       --  A path name cannot be empty, cannot contain more than 256 characters,
+       --  cannot contain invalid characters and each directory/file name need
+       --  to be valid.
+ 
+       if Name'Length = 0 or else Name'Length > 256 then
+          return False;
+ 
+       else
+          --  A drive letter may be specified at the beginning
+ 
+          if Name'Length >= 2
+            and then  Name (Start + 1) = ':'
+            and then
+             (Name (Start) in 'A' .. 'Z' or else
+              Name (Start) in 'a' .. 'z')
+          then
+             Start := Start + 2;
+          end if;
+ 
+          loop
+             --  Look for the start of the next directory or file name
+ 
+             while Start <= Name'Last and then
+               (Name (Start) = '\' or Name (Start) = '/')
+             loop
+                Start := Start + 1;
+             end loop;
+ 
+             --  If all directories/file names are OK, return True
+ 
+             exit when Start > Name'Last;
+ 
+             Last := Start;
+ 
+             --  Look for the end of the directory/file name
+ 
+             while Last < Name'Last loop
+                exit when Name (Last + 1) = '\' or Name (Last + 1) = '/';
+                Last := Last + 1;
+             end loop;
+ 
+             --  Check if the directory/file name is valid
+ 
+             if not Is_Valid_Simple_Name (Name (Start .. Last)) then
+                   return False;
+             end if;
+ 
+             --  Move to the next name
+ 
+             Start := Last + 1;
+          end loop;
+       end if;
+ 
+       --  If Name follows the rules, it is valid
+ 
+       return True;
+    end Is_Valid_Path_Name;
+ 
+    --------------------------
+    -- Is_Valid_Simple_Name --
+    --------------------------
+ 
+    function Is_Valid_Simple_Name (Name : String) return Boolean is
+       Only_Spaces : Boolean;
+ 
+    begin
+       --  A file name cannot be empty, cannot contain more than 256 characters,
+       --  and cannot contain invalid characters.
+ 
+       if Name'Length = 0 or else Name'Length > 256 then
+          return False;
+ 
+       --  Name length is OK
+ 
+       else
+          Only_Spaces := True;
+          for J in Name'Range loop
+             if Invalid_Character (Name (J)) then
+                return False;
+             elsif Name (J) /= ' ' then
+                Only_Spaces := False;
+             end if;
+          end loop;
+ 
+          --  If no invalid chars, and not all spaces, file name is valid.
+ 
+          return not Only_Spaces;
+       end if;
+    end Is_Valid_Simple_Name;
+ 
+ end Ada.Directories.Validity;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-dirval-vms.adb gcc-4.0.0/gcc/ada/a-dirval-vms.adb
*** gcc-3.4.3/gcc/ada/a-dirval-vms.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-dirval-vms.adb	Wed Oct 27 13:56:03 2004
***************
*** 0 ****
--- 1,183 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --             A D A . D I R E C T O R I E S . V A L I D I T Y              --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                              (VMS Version)                               --
+ --                                                                          --
+ --          Copyright (C) 2004 Free Software Foundation, Inc.               --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the OpenVMS version of this package
+ 
+ package body Ada.Directories.Validity is
+ 
+    Max_Number_Of_Characters : constant := 39;
+    Max_Path_Length          : constant := 1_024;
+ 
+    Invalid_Character : constant array (Character) of Boolean :=
+                          ('a' .. 'z' => False,
+                           'A' .. 'Z' => False,
+                           '_' | '$' | '-' | '.' => False,
+                           others => True);
+ 
+    ---------------------------------
+    -- Is_Path_Name_Case_Sensitive --
+    ---------------------------------
+ 
+    function Is_Path_Name_Case_Sensitive return Boolean is
+    begin
+       return False;
+    end Is_Path_Name_Case_Sensitive;
+ 
+    ------------------------
+    -- Is_Valid_Path_Name --
+    ------------------------
+ 
+    function Is_Valid_Path_Name (Name : String) return Boolean is
+       First     : Positive := Name'First;
+       Last      : Positive;
+       Dot_Found : Boolean := False;
+ 
+    begin
+       --  A valid path (directory) name cannot be empty, and cannot contain
+       --  more than 1024 characters. Directories can be ".", ".." or be simple
+       --  name without extensions.
+ 
+       if Name'Length = 0 or else Name'Length > Max_Path_Length then
+          return False;
+ 
+       else
+          loop
+             --  Look for the start of the next directory or file name
+ 
+             while First <= Name'Last and then Name (First) = '/' loop
+                First := First + 1;
+             end loop;
+ 
+             --  If all directories/file names are OK, return True
+ 
+             exit when First > Name'Last;
+ 
+             Last := First;
+             Dot_Found := False;
+ 
+             --  Look for the end of the directory/file name
+ 
+             while Last < Name'Last loop
+                exit when Name (Last + 1) = '/';
+                Last := Last + 1;
+ 
+                if Name (Last) = '.' then
+                   Dot_Found := True;
+                end if;
+             end loop;
+ 
+             --  If name include a dot, it can only be ".", ".." or a the last
+             --  file name.
+ 
+             if Dot_Found then
+                if Name (First .. Last) /= "." and then
+                   Name (First .. Last) /= ".."
+                then
+                   return Last = Name'Last
+                     and then Is_Valid_Simple_Name (Name (First .. Last));
+ 
+                end if;
+ 
+             --  Check if the directory/file name is valid
+ 
+             elsif not Is_Valid_Simple_Name (Name (First .. Last)) then
+                   return False;
+             end if;
+ 
+             --  Move to the next name
+ 
+             First := Last + 1;
+          end loop;
+       end if;
+ 
+       --  If Name follows the rules, then it is valid
+ 
+       return True;
+    end Is_Valid_Path_Name;
+ 
+    --------------------------
+    -- Is_Valid_Simple_Name --
+    --------------------------
+ 
+    function Is_Valid_Simple_Name (Name : String) return Boolean is
+       In_Extension         : Boolean := False;
+       Number_Of_Characters : Natural := 0;
+ 
+    begin
+       --  A file name cannot be empty, and cannot have more than 39 characters
+       --  before or after a single '.'.
+ 
+       if Name'Length = 0 then
+          return False;
+ 
+       else
+          --  Check each character for validity
+ 
+          for J in Name'Range loop
+             if Invalid_Character (Name (J)) then
+                return False;
+ 
+             elsif Name (J) = '.' then
+ 
+                --  Name cannot contain several dots
+ 
+                if In_Extension then
+                   return False;
+ 
+                else
+                   --  Reset the number of characters to count the characters
+                   --  of the extension.
+ 
+                   In_Extension := True;
+                   Number_Of_Characters := 0;
+                end if;
+ 
+             else
+                --  Check that the number of character is not too large
+ 
+                Number_Of_Characters := Number_Of_Characters + 1;
+ 
+                if Number_Of_Characters > Max_Number_Of_Characters then
+                   return False;
+                end if;
+             end if;
+          end loop;
+       end if;
+ 
+       --  If the rules are followed, then it is valid
+ 
+       return True;
+    end Is_Valid_Simple_Name;
+ 
+ end Ada.Directories.Validity;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-dirval.adb gcc-4.0.0/gcc/ada/a-dirval.adb
*** gcc-3.4.3/gcc/ada/a-dirval.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-dirval.adb	Wed Oct 27 13:56:03 2004
***************
*** 0 ****
--- 1,97 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --             A D A . D I R E C T O R I E S . V A L I D I T Y              --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                             (POSIX Version)                              --
+ --                                                                          --
+ --          Copyright (C) 2004 Free Software Foundation, Inc.               --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the POSIX version of this package
+ 
+ package body Ada.Directories.Validity is
+ 
+    ---------------------------------
+    -- Is_Path_Name_Case_Sensitive --
+    ---------------------------------
+ 
+    function Is_Path_Name_Case_Sensitive return Boolean is
+    begin
+       return True;
+    end Is_Path_Name_Case_Sensitive;
+ 
+    ------------------------
+    -- Is_Valid_Path_Name --
+    ------------------------
+ 
+    function Is_Valid_Path_Name   (Name : String) return Boolean is
+    begin
+       --  A path name cannot be empty and cannot contain any NUL character
+ 
+       if Name'Length = 0 then
+          return False;
+ 
+       else
+          for J in Name'Range loop
+             if Name (J) = ASCII.NUL then
+                return False;
+             end if;
+          end loop;
+       end if;
+ 
+       --  If Name does not contain any NUL character, it is valid
+ 
+       return True;
+    end Is_Valid_Path_Name;
+ 
+    --------------------------
+    -- Is_Valid_Simple_Name --
+    --------------------------
+ 
+    function Is_Valid_Simple_Name (Name : String) return Boolean is
+    begin
+       --  A file name cannot be empty and cannot contain a slash ('/') or
+       --  the NUL character.
+ 
+       if Name'Length = 0 then
+          return False;
+ 
+       else
+          for J in Name'Range loop
+             if Name (J) = '/' or else Name (J) = ASCII.NUL then
+                return False;
+             end if;
+          end loop;
+       end if;
+ 
+       --  If Name does not contain any slash or NUL, it is valid
+ 
+       return True;
+    end Is_Valid_Simple_Name;
+ 
+ end Ada.Directories.Validity;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-dirval.ads gcc-4.0.0/gcc/ada/a-dirval.ads
*** gcc-3.4.3/gcc/ada/a-dirval.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-dirval.ads	Wed Oct 27 13:56:03 2004
***************
*** 0 ****
--- 1,48 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --             A D A . D I R E C T O R I E S . V A L I D I T Y              --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 2004 Free Software Foundation, Inc.               --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This private child package is used in the body of Ada.Directories.
+ --  It has several bodies, for different platforms.
+ 
+ private package Ada.Directories.Validity is
+ 
+    function Is_Valid_Simple_Name (Name : String) return Boolean;
+    --  Returns True if Name is a valid file name
+ 
+    function Is_Valid_Path_Name (Name : String) return Boolean;
+    --  Returns True if Name is a valid path name
+ 
+    function Is_Path_Name_Case_Sensitive return Boolean;
+    --  Returns True if file and path names are case-sensitive
+ 
+ end Ada.Directories.Validity;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-dynpri.adb gcc-4.0.0/gcc/ada/a-dynpri.adb
*** gcc-3.4.3/gcc/ada/a-dynpri.adb	Thu Apr 24 17:53:53 2003
--- gcc-4.0.0/gcc/ada/a-dynpri.adb	Mon May 17 13:20:42 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1992-2001, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with System.Task_Primitives.Operations;
*** 45,51 ****
  --           Self
  
  with System.Tasking;
! --  used for Task_ID
  
  with Ada.Exceptions;
  --  used for Raise_Exception
--- 45,51 ----
  --           Self
  
  with System.Tasking;
! --  used for Task_Id
  
  with Ada.Exceptions;
  --  used for Raise_Exception
*************** package body Ada.Dynamic_Priorities is
*** 68,74 ****
  
     function Convert_Ids is new
       Unchecked_Conversion
!        (Task_Identification.Task_Id, System.Tasking.Task_ID);
  
     ------------------
     -- Get_Priority --
--- 68,74 ----
  
     function Convert_Ids is new
       Unchecked_Conversion
!        (Task_Identification.Task_Id, System.Tasking.Task_Id);
  
     ------------------
     -- Get_Priority --
*************** package body Ada.Dynamic_Priorities is
*** 78,87 ****
  
     function Get_Priority
       (T : Ada.Task_Identification.Task_Id :=
!           Ada.Task_Identification.Current_Task)
!       return System.Any_Priority is
! 
!       Target : constant Task_ID := Convert_Ids (T);
        Error_Message : constant String := "Trying to get the priority of a ";
  
     begin
--- 78,86 ----
  
     function Get_Priority
       (T : Ada.Task_Identification.Task_Id :=
!         Ada.Task_Identification.Current_Task) return System.Any_Priority
!    is
!       Target : constant Task_Id := Convert_Ids (T);
        Error_Message : constant String := "Trying to get the priority of a ";
  
     begin
*************** package body Ada.Dynamic_Priorities is
*** 106,116 ****
  
     procedure Set_Priority
       (Priority : System.Any_Priority;
!       T : Ada.Task_Identification.Task_Id :=
!           Ada.Task_Identification.Current_Task)
     is
!       Target  : constant Task_ID := Convert_Ids (T);
!       Self_ID : constant Task_ID := STPO.Self;
        Error_Message : constant String := "Trying to set the priority of a ";
  
     begin
--- 105,115 ----
  
     procedure Set_Priority
       (Priority : System.Any_Priority;
!       T        : Ada.Task_Identification.Task_Id :=
!                    Ada.Task_Identification.Current_Task)
     is
!       Target  : constant Task_Id := Convert_Ids (T);
!       Self_ID : constant Task_Id := STPO.Self;
        Error_Message : constant String := "Trying to set the priority of a ";
  
     begin
*************** package body Ada.Dynamic_Priorities is
*** 142,161 ****
              STPO.Unlock_RTS;
           end if;
  
-          STPO.Yield;
           --  Yield is needed to enforce FIFO task dispatching.
!          --  LL Set_Priority is made while holding the RTS lock so that
!          --  it is inheriting high priority until it release all the RTS
!          --  locks.
           --  If this is used in a system where Ceiling Locking is
           --  not enforced we may end up getting two Yield effects.
  
        else
           Target.New_Base_Priority := Priority;
           Target.Pending_Priority_Change := True;
           Target.Pending_Action := True;
  
           STPO.Wakeup (Target, Target.Common.State);
           --  If the task is suspended, wake it up to perform the change.
           --  check for ceiling violations ???
  
--- 141,163 ----
              STPO.Unlock_RTS;
           end if;
  
           --  Yield is needed to enforce FIFO task dispatching.
! 
!          --  LL Set_Priority is made while holding the RTS lock so that it
!          --  is inheriting high priority until it release all the RTS locks.
! 
           --  If this is used in a system where Ceiling Locking is
           --  not enforced we may end up getting two Yield effects.
  
+          STPO.Yield;
+ 
        else
           Target.New_Base_Priority := Priority;
           Target.Pending_Priority_Change := True;
           Target.Pending_Action := True;
  
           STPO.Wakeup (Target, Target.Common.State);
+ 
           --  If the task is suspended, wake it up to perform the change.
           --  check for ceiling violations ???
  
diff -Nrcpad gcc-3.4.3/gcc/ada/a-elchha.adb gcc-4.0.0/gcc/ada/a-elchha.adb
*** gcc-3.4.3/gcc/ada/a-elchha.adb	Wed Dec 17 13:37:03 2003
--- gcc-4.0.0/gcc/ada/a-elchha.adb	Tue Jul 20 10:26:51 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2003 Free Software Foundation, Inc.            --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 2003-2004 Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** is
*** 45,127 ****
     pragma Import (C, Unhandled_Terminate, "__gnat_unhandled_terminate");
     --  Perform system dependent shutdown code
  
!    function Tailored_Exception_Information
!      (X : Exception_Occurrence) return String;
!    --  Exception information to be output in the case of automatic tracing
!    --  requested through GNAT.Exception_Traces.
!    --
!    --  This is the same as Exception_Information if no backtrace decorator
!    --  is currently in place. Otherwise, this is Exception_Information with
!    --  the call chain raw addresses replaced by the result of a call to the
!    --  current decorator provided with the call chain addresses.
  
     pragma Import
!      (Ada, Tailored_Exception_Information,
!         "__gnat_tailored_exception_information");
  
!    procedure Tailored_Exception_Information
!      (X    : Exception_Occurrence;
!       Buff : in out String;
!       Last : in out Integer);
!    --  Procedural version of the above function. Instead of returning the
!    --  result, this one is put in Buff (Buff'first .. Buff'first + Last)
  
     procedure To_Stderr (S : String);
     pragma Import (Ada, To_Stderr, "__gnat_to_stderr");
     --  Little routine to output string to stderr
  
     Nline : constant String := String'(1 => ASCII.LF);
     --  Convenient shortcut
  
-    Msg : constant String := Except.Msg (1 .. Except.Msg_Length);
- 
-    Max_Static_Exc_Info : constant := 1024;
-    --  This should be enough for most exception information cases
-    --  even though tailoring introduces some uncertainty.  The
-    --  name+message should not exceed 320 chars, so that leaves at
-    --  least 35 backtrace slots (each slot needs 19 chars for
-    --  representing a 64 bit address).
- 
-    subtype Exc_Info_Type is String (1 .. Max_Static_Exc_Info);
-    type Str_Ptr is access Exc_Info_Type;
-    Exc_Info : Str_Ptr;
-    Exc_Info_Last : Natural := 0;
-    --  Buffer that is allocated to store the tailored exception
-    --  information while Adafinal is run. This buffer is allocated
-    --  on the heap only when it is needed. It is better to allocate
-    --  on the heap than on the stack since stack overflows are more
-    --  common than heap overflows.
- 
-    procedure Tailored_Exception_Information
-      (X    : Exception_Occurrence;
-       Buff : in out String;
-       Last : in out Integer)
-    is
-       Info : constant String := Tailored_Exception_Information (X);
-    begin
-       Last := Info'Last;
-       Buff (1 .. Last) := Info;
-    end Tailored_Exception_Information;
- 
  begin
!    --  First allocate & store the exception info in a buffer when
!    --  we know it will be needed. This needs to be done before
!    --  Adafinal because it implicitly uses the secondary stack.
! 
!    if Except.Id.Full_Name.all (1) /= '_'
!      and then Except.Num_Tracebacks /= 0
!    then
!       Exc_Info := new Exc_Info_Type;
!       if Exc_Info /= null then
!          Tailored_Exception_Information
!            (Except, Exc_Info.all, Exc_Info_Last);
!       end if;
!    end if;
  
-    --  Let's shutdown the runtime now. The rest of the procedure
-    --  needs to be careful not to use anything that would require
-    --  runtime support. In particular, functions returning strings
-    --  are banned since the sec stack is no longer functional.
     System.Standard_Library.Adafinal;
  
     --  Check for special case of raising _ABORT_SIGNAL, which is not
--- 45,87 ----
     pragma Import (C, Unhandled_Terminate, "__gnat_unhandled_terminate");
     --  Perform system dependent shutdown code
  
!    function Exception_Message_Length
!      (X : Exception_Occurrence) return Natural;
!    pragma Import (Ada, Exception_Message_Length, "__gnat_exception_msg_len");
  
+    procedure Append_Info_Exception_Message
+      (X : Exception_Occurrence; Info : in out String; Ptr : in out Natural);
     pragma Import
!      (Ada, Append_Info_Exception_Message, "__gnat_append_info_e_msg");
  
!    procedure Append_Info_Exception_Information
!      (X : Exception_Occurrence; Info : in out String; Ptr : in out Natural);
!    pragma Import
!      (Ada, Append_Info_Exception_Information, "__gnat_append_info_e_info");
  
     procedure To_Stderr (S : String);
     pragma Import (Ada, To_Stderr, "__gnat_to_stderr");
     --  Little routine to output string to stderr
  
+    Ptr   : Natural := 0;
+    Nobuf : String (1 .. 0);
+ 
     Nline : constant String := String'(1 => ASCII.LF);
     --  Convenient shortcut
  
  begin
!    --  Let's shutdown the runtime now. The rest of the procedure needs to be
!    --  careful not to use anything that would require runtime support. In
!    --  particular, functions returning strings are banned since the sec stack
!    --  is no longer functional. This is particularly important to note for the
!    --  Exception_Information output. We used to allow the tailored version to
!    --  show up here, which turned out to be a bad idea as it might involve a
!    --  traceback decorator the length of which we don't control. Potentially
!    --  heavy primary/secondary stack use or dynamic allocations right before
!    --  this point are not welcome, moving the output before the finalization
!    --  raises order of outputs concerns, and decorators are intended to only
!    --  be used with exception traces, which should have been issued already.
  
     System.Standard_Library.Adafinal;
  
     --  Check for special case of raising _ABORT_SIGNAL, which is not
*************** begin
*** 142,150 ****
        To_Stderr ("raised ");
        To_Stderr (Except.Id.Full_Name.all (1 .. Except.Id.Name_Length - 1));
  
!       if Msg'Length /= 0 then
           To_Stderr (" : ");
!          To_Stderr (Msg);
        end if;
  
        To_Stderr (Nline);
--- 102,110 ----
        To_Stderr ("raised ");
        To_Stderr (Except.Id.Full_Name.all (1 .. Except.Id.Name_Length - 1));
  
!       if Exception_Message_Length (Except) /= 0 then
           To_Stderr (" : ");
!          Append_Info_Exception_Message (Except, Nobuf, Ptr);
        end if;
  
        To_Stderr (Nline);
*************** begin
*** 152,164 ****
     --  Traceback exists
  
     else
-       --  Note we can have this whole information output twice if
-       --  this occurrence gets reraised up to here.
- 
        To_Stderr (Nline);
        To_Stderr ("Execution terminated by unhandled exception");
        To_Stderr (Nline);
!       To_Stderr (Exc_Info (1 .. Exc_Info_Last));
     end if;
  
     Unhandled_Terminate;
--- 112,122 ----
     --  Traceback exists
  
     else
        To_Stderr (Nline);
        To_Stderr ("Execution terminated by unhandled exception");
        To_Stderr (Nline);
! 
!       Append_Info_Exception_Information (Except, Nobuf, Ptr);
     end if;
  
     Unhandled_Terminate;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-except.adb gcc-4.0.0/gcc/ada/a-except.adb
*** gcc-3.4.3/gcc/ada/a-except.adb	Mon Dec  1 13:29:27 2003
--- gcc-4.0.0/gcc/ada/a-except.adb	Thu Feb 10 13:50:40 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Ada.Exceptions is
*** 120,130 ****
     --  Raise_From_Signal_Handler. The origin of the call is indicated by the
     --  From_Signal_Handler argument.
  
     package Exception_Data is
  
!       ----------------------------------
!       --  Exception messages routines --
!       ----------------------------------
  
        procedure Set_Exception_C_Msg
          (Id   : Exception_Id;
--- 120,141 ----
     --  Raise_From_Signal_Handler. The origin of the call is indicated by the
     --  From_Signal_Handler argument.
  
+    procedure To_Stderr (S : String);
+    pragma Export (Ada, To_Stderr, "__gnat_to_stderr");
+    --  Little routine to output string to stderr that is also used
+    --  in the tasking run time.
+ 
+    procedure To_Stderr (C : Character);
+    pragma Inline (To_Stderr);
+    pragma Export (Ada, To_Stderr, "__gnat_to_stderr_char");
+    --  Little routine to output a character to stderr, used by some of
+    --  the separate units below.
+ 
     package Exception_Data is
  
!       ---------------------------------
!       -- Exception messages routines --
!       ---------------------------------
  
        procedure Set_Exception_C_Msg
          (Id   : Exception_Id;
*************** package body Ada.Exceptions is
*** 154,187 ****
        function Exception_Information (X : Exception_Occurrence) return String;
        --  The format of the exception information is as follows:
        --
!       --    exception name (as in Exception_Name)
!       --    message (or a null line if no message)
!       --    PID=nnnn
!       --    0xyyyyyyyy 0xyyyyyyyy ...
        --
!       --  The lines are separated by a ASCII.LF character
        --  The nnnn is the partition Id given as decimal digits.
!       --  The 0x... line represents traceback program counter locations,
!       --  in order with the first one being the exception location.
  
        ---------------------------------------
        -- Exception backtracing subprograms --
        ---------------------------------------
  
!       --  What is automatically output when exception tracing is on basically
!       --  corresponds to the usual exception information, but with the call
!       --  chain backtrace possibly tailored by a backtrace decorator. Modifying
!       --  Exception_Information itself is not a good idea because the decorated
!       --  output is completely out of control and would break all our code
!       --  related to the streaming of exceptions.
!       --
!       --  We then provide an alternative function to Exception_Information to
!       --  compute the possibly tailored output, which is equivalent if no
!       --  decorator is currently set.
  
        function Tailored_Exception_Information
!         (X    : Exception_Occurrence)
!         return String;
        --  Exception information to be output in the case of automatic tracing
        --  requested through GNAT.Exception_Traces.
        --
--- 165,204 ----
        function Exception_Information (X : Exception_Occurrence) return String;
        --  The format of the exception information is as follows:
        --
!       --    Exception_Name: <exception name> (as in Exception_Name)
!       --    Message: <message> (only if Exception_Message is empty)
!       --    PID=nnnn (only if != 0)
!       --    Call stack traceback locations:  (only if at least one location)
!       --    <0xyyyyyyyy 0xyyyyyyyy ...>      (is recorded)
        --
!       --  The lines are separated by a ASCII.LF character.
        --  The nnnn is the partition Id given as decimal digits.
!       --  The 0x... line represents traceback program counter locations, in
!       --  execution order with the first one being the exception location. It
!       --  is present only
!       --
!       --  The Exception_Name and Message lines are omitted in the abort
!       --  signal case, since this is not really an exception.
! 
!       --  !! If the format of the generated string is changed, please note
!       --  !! that an equivalent modification to the routine String_To_EO must
!       --  !! be made to preserve proper functioning of the stream attributes.
  
        ---------------------------------------
        -- Exception backtracing subprograms --
        ---------------------------------------
  
!       --  What is automatically output when exception tracing is on is the
!       --  usual exception information with the call chain backtrace possibly
!       --  tailored by a backtrace decorator. Modifying Exception_Information
!       --  itself is not a good idea because the decorated output is completely
!       --  out of control and would break all our code related to the streaming
!       --  of exceptions.  We then provide an alternative function to compute
!       --  the possibly tailored output, which is equivalent if no decorator is
!       --  currently set:
  
        function Tailored_Exception_Information
!         (X : Exception_Occurrence) return String;
        --  Exception information to be output in the case of automatic tracing
        --  requested through GNAT.Exception_Traces.
        --
*************** package body Ada.Exceptions is
*** 193,220 ****
        pragma Export
          (Ada, Tailored_Exception_Information,
             "__gnat_tailored_exception_information");
!       --  This function is used within this package but also from within
!       --  System.Tasking.Stages.
!       --
!       --  The output of Exception_Information and
!       --  Tailored_Exception_Information share a common part which was
!       --  formerly built using local procedures within
!       --  Exception_Information. These procedures have been extracted
!       --  from their original place to be available to
!       --  Tailored_Exception_Information also.
!       --
!       --  Each of these procedures appends some input to an
!       --  information string currently being built. The Ptr argument
!       --  represents the last position in this string at which a
!       --  character has been written.
! 
!       procedure Tailored_Exception_Information
!         (X    : Exception_Occurrence;
!          Buff : in out String;
!          Last : in out Integer);
!       --  Procedural version of the above function. Instead of returning the
!       --  result, this one is put in Buff (Buff'first .. Buff'first + Last)
!       --  And what happens on overflow ???
  
     end Exception_Data;
  
--- 210,216 ----
        pragma Export
          (Ada, Tailored_Exception_Information,
             "__gnat_tailored_exception_information");
!       --  This is currently used by System.Tasking.Stages.
  
     end Exception_Data;
  
*************** package body Ada.Exceptions is
*** 234,247 ****
        --  routine when the GCC 3 mechanism is used.
  
        procedure Notify_Handled_Exception;
!       pragma Export (C, Notify_Handled_Exception,
!                        "__gnat_notify_handled_exception");
        --  This routine is called for a handled occurrence is about to be
        --  propagated.
  
        procedure Notify_Unhandled_Exception;
!       pragma Export (C, Notify_Unhandled_Exception,
!                        "__gnat_notify_unhandled_exception");
        --  This routine is called when an unhandled occurrence is about to be
        --  propagated.
  
--- 230,243 ----
        --  routine when the GCC 3 mechanism is used.
  
        procedure Notify_Handled_Exception;
!       pragma Export
!         (C, Notify_Handled_Exception, "__gnat_notify_handled_exception");
        --  This routine is called for a handled occurrence is about to be
        --  propagated.
  
        procedure Notify_Unhandled_Exception;
!       pragma Export
!         (C, Notify_Unhandled_Exception, "__gnat_notify_unhandled_exception");
        --  This routine is called when an unhandled occurrence is about to be
        --  propagated.
  
*************** package body Ada.Exceptions is
*** 331,350 ****
     --  exception occurrence referenced by the Current_Excep in the TSD.
     --  Abort is deferred before the raise call.
  
-    procedure Raise_With_Msg (E : Exception_Id; Setup : Boolean);
-    pragma No_Return (Raise_With_Msg);
-    --  Similar to above, with an extra parameter to indicate wether
-    --  Setup_Exception has been called already.
- 
-    procedure Raise_After_Setup (E : Exception_Id);
-    pragma No_Return (Raise_After_Setup);
-    pragma Export (C, Raise_After_Setup, "__gnat_raise_after_setup");
-    --  Wrapper to Raise_With_Msg and Setup set to True.
-    --
-    --  This is called by System.Tasking.Entry_Calls.Check_Exception when an
-    --  exception has occured during an entry call. The exception to propagate
-    --  has been setup and initialized via Transfer_Occurrence in this case.
- 
     procedure Raise_With_Location_And_Msg
       (E : Exception_Id;
        F : Big_String_Ptr;
--- 327,332 ----
*************** package body Ada.Exceptions is
*** 501,506 ****
--- 483,490 ----
     procedure Rcheck_26 (File : Big_String_Ptr; Line : Integer);
     procedure Rcheck_27 (File : Big_String_Ptr; Line : Integer);
     procedure Rcheck_28 (File : Big_String_Ptr; Line : Integer);
+    procedure Rcheck_29 (File : Big_String_Ptr; Line : Integer);
+    procedure Rcheck_30 (File : Big_String_Ptr; Line : Integer);
  
     pragma Export (C, Rcheck_00, "__gnat_rcheck_00");
     pragma Export (C, Rcheck_01, "__gnat_rcheck_01");
*************** package body Ada.Exceptions is
*** 531,536 ****
--- 515,558 ----
     pragma Export (C, Rcheck_26, "__gnat_rcheck_26");
     pragma Export (C, Rcheck_27, "__gnat_rcheck_27");
     pragma Export (C, Rcheck_28, "__gnat_rcheck_28");
+    pragma Export (C, Rcheck_29, "__gnat_rcheck_29");
+    pragma Export (C, Rcheck_30, "__gnat_rcheck_30");
+ 
+    --  None of these procedures ever returns (they raise an exception!). By
+    --  using pragma No_Return, we ensure that any junk code after the call,
+    --  such as normal return epilog stuff, can be eliminated).
+ 
+    pragma No_Return (Rcheck_00);
+    pragma No_Return (Rcheck_01);
+    pragma No_Return (Rcheck_02);
+    pragma No_Return (Rcheck_03);
+    pragma No_Return (Rcheck_04);
+    pragma No_Return (Rcheck_05);
+    pragma No_Return (Rcheck_06);
+    pragma No_Return (Rcheck_07);
+    pragma No_Return (Rcheck_08);
+    pragma No_Return (Rcheck_09);
+    pragma No_Return (Rcheck_10);
+    pragma No_Return (Rcheck_11);
+    pragma No_Return (Rcheck_12);
+    pragma No_Return (Rcheck_13);
+    pragma No_Return (Rcheck_14);
+    pragma No_Return (Rcheck_15);
+    pragma No_Return (Rcheck_16);
+    pragma No_Return (Rcheck_17);
+    pragma No_Return (Rcheck_18);
+    pragma No_Return (Rcheck_19);
+    pragma No_Return (Rcheck_20);
+    pragma No_Return (Rcheck_21);
+    pragma No_Return (Rcheck_22);
+    pragma No_Return (Rcheck_23);
+    pragma No_Return (Rcheck_24);
+    pragma No_Return (Rcheck_25);
+    pragma No_Return (Rcheck_26);
+    pragma No_Return (Rcheck_27);
+    pragma No_Return (Rcheck_28);
+    pragma No_Return (Rcheck_29);
+    pragma No_Return (Rcheck_30);
  
     ---------------------------------------------
     -- Reason Strings for Run-Time Check Calls --
*************** package body Ada.Exceptions is
*** 549,575 ****
     Rmsg_05 : constant String := "index check failed"               & NUL;
     Rmsg_06 : constant String := "invalid data"                     & NUL;
     Rmsg_07 : constant String := "length check failed"              & NUL;
!    Rmsg_08 : constant String := "overflow check failed"            & NUL;
!    Rmsg_09 : constant String := "partition check failed"           & NUL;
!    Rmsg_10 : constant String := "range check failed"               & NUL;
!    Rmsg_11 : constant String := "tag check failed"                 & NUL;
!    Rmsg_12 : constant String := "access before elaboration"        & NUL;
!    Rmsg_13 : constant String := "accessibility check failed"       & NUL;
!    Rmsg_14 : constant String := "all guards closed"                & NUL;
!    Rmsg_15 : constant String := "duplicated entry address"         & NUL;
!    Rmsg_16 : constant String := "explicit raise"                   & NUL;
!    Rmsg_17 : constant String := "finalize/adjust raised exception" & NUL;
!    Rmsg_18 : constant String := "misaligned address value"         & NUL;
!    Rmsg_19 : constant String := "missing return"                   & NUL;
!    Rmsg_20 : constant String := "overlaid controlled object"       & NUL;
!    Rmsg_21 : constant String := "potentially blocking operation"   & NUL;
!    Rmsg_22 : constant String := "stubbed subprogram called"        & NUL;
!    Rmsg_23 : constant String := "unchecked union restriction"      & NUL;
!    Rmsg_24 : constant String := "empty storage pool"               & NUL;
!    Rmsg_25 : constant String := "explicit raise"                   & NUL;
!    Rmsg_26 : constant String := "infinite recursion"               & NUL;
!    Rmsg_27 : constant String := "object too large"                 & NUL;
!    Rmsg_28 : constant String := "restriction violation"            & NUL;
  
     -----------------------
     -- Polling Interface --
--- 571,600 ----
     Rmsg_05 : constant String := "index check failed"               & NUL;
     Rmsg_06 : constant String := "invalid data"                     & NUL;
     Rmsg_07 : constant String := "length check failed"              & NUL;
!    Rmsg_08 : constant String := "null-exclusion check failed"      & NUL;
!    Rmsg_09 : constant String := "overflow check failed"            & NUL;
!    Rmsg_10 : constant String := "partition check failed"           & NUL;
!    Rmsg_11 : constant String := "range check failed"               & NUL;
!    Rmsg_12 : constant String := "tag check failed"                 & NUL;
!    Rmsg_13 : constant String := "access before elaboration"        & NUL;
!    Rmsg_14 : constant String := "accessibility check failed"       & NUL;
!    Rmsg_15 : constant String := "all guards closed"                & NUL;
!    Rmsg_16 : constant String := "duplicated entry address"         & NUL;
!    Rmsg_17 : constant String := "explicit raise"                   & NUL;
!    Rmsg_18 : constant String := "finalize/adjust raised exception" & NUL;
!    Rmsg_19 : constant String := "misaligned address value"         & NUL;
!    Rmsg_20 : constant String := "missing return"                   & NUL;
!    Rmsg_21 : constant String := "overlaid controlled object"       & NUL;
!    Rmsg_22 : constant String := "potentially blocking operation"   & NUL;
!    Rmsg_23 : constant String := "stubbed subprogram called"        & NUL;
!    Rmsg_24 : constant String := "unchecked union restriction"      & NUL;
!    Rmsg_25 : constant String := "illegal use of"
!              & " remote access-to-class-wide type, see RM E.4(18)" & NUL;
!    Rmsg_26 : constant String := "empty storage pool"               & NUL;
!    Rmsg_27 : constant String := "explicit raise"                   & NUL;
!    Rmsg_28 : constant String := "infinite recursion"               & NUL;
!    Rmsg_29 : constant String := "object too large"                 & NUL;
!    Rmsg_30 : constant String := "restriction violation"            & NUL;
  
     -----------------------
     -- Polling Interface --
*************** package body Ada.Exceptions is
*** 654,661 ****
     -- Exception_Information --
     ---------------------------
  
!    function Exception_Information (X : Exception_Occurrence) return String
!      renames Exception_Data.Exception_Information;
  
     -----------------------
     -- Exception_Message --
--- 679,692 ----
     -- Exception_Information --
     ---------------------------
  
!    function Exception_Information (X : Exception_Occurrence) return String is
!    begin
!       if X.Id = Null_Id then
!          raise Constraint_Error;
!       end if;
! 
!       return Exception_Data.Exception_Information (X);
!    end Exception_Information;
  
     -----------------------
     -- Exception_Message --
*************** package body Ada.Exceptions is
*** 703,709 ****
           P := P - 1;
        end loop;
  
!       return Name (P .. Name'Length);
     end Exception_Name_Simple;
  
     --------------------
--- 734,746 ----
           P := P - 1;
        end loop;
  
!       --  Return result making sure lower bound is 1
! 
!       declare
!          subtype Rname is String (1 .. Name'Length - P + 1);
!       begin
!          return Rname (Name (P .. Name'Length));
!       end;
     end Exception_Name_Simple;
  
     --------------------
*************** package body Ada.Exceptions is
*** 983,995 ****
     -- Raise_With_Msg --
     --------------------
  
!    procedure Raise_With_Msg (E : Exception_Id; Setup : Boolean) is
        Excep : constant EOA := Get_Current_Excep.all;
  
     begin
!       if not Setup then
!          Exception_Propagation.Setup_Exception (Excep, Excep);
!       end if;
  
        Excep.Exception_Raised := False;
        Excep.Id               := E;
--- 1020,1030 ----
     -- Raise_With_Msg --
     --------------------
  
!    procedure Raise_With_Msg (E : Exception_Id) is
        Excep : constant EOA := Get_Current_Excep.all;
  
     begin
!       Exception_Propagation.Setup_Exception (Excep, Excep);
  
        Excep.Exception_Raised := False;
        Excep.Id               := E;
*************** package body Ada.Exceptions is
*** 1000,1019 ****
        Raise_Current_Excep (E);
     end Raise_With_Msg;
  
-    procedure Raise_With_Msg (E : Exception_Id) is
-    begin
-       Raise_With_Msg (E, Setup => False);
-    end Raise_With_Msg;
- 
-    -----------------------
-    -- Raise_After_Setup --
-    -----------------------
- 
-    procedure Raise_After_Setup (E : Exception_Id) is
-    begin
-       Raise_With_Msg (E, Setup => True);
-    end Raise_After_Setup;
- 
     --------------------------------------
     -- Calls to Run-Time Check Routines --
     --------------------------------------
--- 1035,1040 ----
*************** package body Ada.Exceptions is
*** 1080,1086 ****
  
     procedure Rcheck_12 (File : Big_String_Ptr; Line : Integer) is
     begin
!       Raise_Program_Error_Msg (File, Line, To_Ptr (Rmsg_12'Address));
     end Rcheck_12;
  
     procedure Rcheck_13 (File : Big_String_Ptr; Line : Integer) is
--- 1101,1107 ----
  
     procedure Rcheck_12 (File : Big_String_Ptr; Line : Integer) is
     begin
!       Raise_Constraint_Error_Msg (File, Line, To_Ptr (Rmsg_12'Address));
     end Rcheck_12;
  
     procedure Rcheck_13 (File : Big_String_Ptr; Line : Integer) is
*************** package body Ada.Exceptions is
*** 1140,1151 ****
  
     procedure Rcheck_24 (File : Big_String_Ptr; Line : Integer) is
     begin
!       Raise_Storage_Error_Msg (File, Line, To_Ptr (Rmsg_24'Address));
     end Rcheck_24;
  
     procedure Rcheck_25 (File : Big_String_Ptr; Line : Integer) is
     begin
!       Raise_Storage_Error_Msg (File, Line, To_Ptr (Rmsg_25'Address));
     end Rcheck_25;
  
     procedure Rcheck_26 (File : Big_String_Ptr; Line : Integer) is
--- 1161,1172 ----
  
     procedure Rcheck_24 (File : Big_String_Ptr; Line : Integer) is
     begin
!       Raise_Program_Error_Msg (File, Line, To_Ptr (Rmsg_24'Address));
     end Rcheck_24;
  
     procedure Rcheck_25 (File : Big_String_Ptr; Line : Integer) is
     begin
!       Raise_Program_Error_Msg (File, Line, To_Ptr (Rmsg_25'Address));
     end Rcheck_25;
  
     procedure Rcheck_26 (File : Big_String_Ptr; Line : Integer) is
*************** package body Ada.Exceptions is
*** 1163,1168 ****
--- 1184,1199 ----
        Raise_Storage_Error_Msg (File, Line, To_Ptr (Rmsg_28'Address));
     end Rcheck_28;
  
+    procedure Rcheck_29 (File : Big_String_Ptr; Line : Integer) is
+    begin
+       Raise_Storage_Error_Msg (File, Line, To_Ptr (Rmsg_29'Address));
+    end Rcheck_29;
+ 
+    procedure Rcheck_30 (File : Big_String_Ptr; Line : Integer) is
+    begin
+       Raise_Storage_Error_Msg (File, Line, To_Ptr (Rmsg_30'Address));
+    end Rcheck_30;
+ 
     -------------
     -- Reraise --
     -------------
*************** package body Ada.Exceptions is
*** 1324,1329 ****
--- 1355,1384 ----
        Raise_Current_Excep (E);
     end Raise_Exception_No_Defer;
  
+    ---------------
+    -- To_Stderr --
+    ---------------
+ 
+    procedure To_Stderr (C : Character) is
+ 
+       type int is new Integer;
+ 
+       procedure put_char_stderr (C : int);
+       pragma Import (C, put_char_stderr, "put_char_stderr");
+ 
+    begin
+       put_char_stderr (Character'Pos (C));
+    end To_Stderr;
+ 
+    procedure To_Stderr (S : String) is
+    begin
+       for J in S'Range loop
+          if S (J) /= ASCII.CR then
+             To_Stderr (S (J));
+          end if;
+       end loop;
+    end To_Stderr;
+ 
     ---------
     -- ZZZ --
     ---------
diff -Nrcpad gcc-3.4.3/gcc/ada/a-excpol-abort.adb gcc-4.0.0/gcc/ada/a-excpol-abort.adb
*** gcc-3.4.3/gcc/ada/a-excpol-abort.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-excpol-abort.adb	Fri May 14 10:01:59 2004
***************
*** 0 ****
--- 1,58 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   A D A . E X C E P T I O N S . P O L L                  --
+ --                (version supporting asynchronous abort test)              --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --          Copyright (C) 1992-2000, Free Software Foundation, Inc.         --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This version is for targets that do not support per-thread asynchronous
+ --  signals. On such targets, we require compilation with the -gnatP switch
+ --  that activates periodic polling. Then in the body of the polling routine
+ --  we test for asynchronous abort.
+ 
+ --  NT, OS/2, HPUX/DCE and SCO currently use this file
+ 
+ with System.Soft_Links;
+ --  used for Check_Abort_Status
+ 
+ separate (Ada.Exceptions)
+ 
+ ----------
+ -- Poll --
+ ----------
+ 
+ procedure Poll is
+ begin
+    --  Test for asynchronous abort on each poll
+ 
+    if System.Soft_Links.Check_Abort_Status.all /= 0 then
+       raise Standard'Abort_Signal;
+    end if;
+ end Poll;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-excpol-interix.adb gcc-4.0.0/gcc/ada/a-excpol-interix.adb
*** gcc-3.4.3/gcc/ada/a-excpol-interix.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-excpol-interix.adb	Fri May 14 10:01:59 2004
***************
*** 0 ****
--- 1,66 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   A D A . E X C E P T I O N S . P O L L                  --
+ --       (version supporting asynchronous abort test and time slicing)      --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --          Copyright (C) 1992-2000, Free Software Foundation, Inc.         --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This version is for targets that do not support per-thread asynchronous
+ --  signals or that do not handle async timers properly. On such targets, we
+ --  require compilation with the -gnatP switch that activates periodic polling.
+ --  Then in the body of the polling routine we test for asynchronous abort and
+ --  yield periodically.
+ 
+ --  HP-UX and SCO currently use this file
+ 
+ with System.Soft_Links;
+ --  used for Check_Abort_Status
+ 
+ separate (Ada.Exceptions)
+ 
+ ----------
+ -- Poll --
+ ----------
+ 
+ procedure Poll is
+ begin
+    if Counter = 10000 then
+       Counter := 0;
+       delay 0.0;
+    else
+       Counter := Counter + 1;
+    end if;
+ 
+    --  Test for asynchronous abort on each poll
+ 
+    if System.Soft_Links.Check_Abort_Status.all /= 0 then
+       raise Standard'Abort_Signal;
+    end if;
+ end Poll;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-exexda.adb gcc-4.0.0/gcc/ada/a-exexda.adb
*** gcc-3.4.3/gcc/ada/a-exexda.adb	Mon Nov 17 14:58:14 2003
--- gcc-4.0.0/gcc/ada/a-exexda.adb	Tue Jul 20 10:26:51 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with System.Storage_Elements; use System
*** 36,74 ****
  separate (Ada.Exceptions)
  package body Exception_Data is
  
!    -----------------------
!    -- Local Subprograms --
!    -----------------------
  
!    function Address_Image (A : System.Address) return String;
!    --  Returns at string of the form 0xhhhhhhhhh for an address, with
!    --  leading zeros suppressed. Hex characters a-f are in lower case.
  
     procedure Append_Info_Nat
       (N    : Natural;
        Info : in out String;
        Ptr  : in out Natural);
-    --  Append the image of N at the end of the provided information string
  
     procedure Append_Info_NL
       (Info : in out String;
        Ptr  : in out Natural);
!    --  Append a LF at the end of the provided information string
  
     procedure Append_Info_String
       (S    : String;
        Info : in out String;
        Ptr  : in out Natural);
-    --  Append a string at the end of the provided information string
  
!    --  To build Exception_Information and Tailored_Exception_Information,
!    --  we then use three intermediate functions :
  
!    function Basic_Exception_Information
!      (X : Exception_Occurrence) return String;
!    --  Returns the basic exception information string associated with a
!    --  given exception occurrence. This is the common part shared by both
!    --  Exception_Information and Tailored_Exception_Infomation.
  
     function Basic_Exception_Traceback
       (X : Exception_Occurrence) return String;
--- 36,188 ----
  separate (Ada.Exceptions)
  package body Exception_Data is
  
!    --  This unit implements the Exception_Information related services for
!    --  both the Ada standard requirements and the GNAT.Exception_Traces
!    --  facility.
  
!    --  There are common parts between the contents of Exception_Information
!    --  (the regular Ada interface) and Tailored_Exception_Information (what
!    --  the automatic backtracing output includes). The overall structure is
!    --  sketched below:
! 
!    --
!    --                      Exception_Information
!    --                               |
!    --                       +-------+--------+
!    --                       |                |
!    --                Basic_Exc_Info & Basic_Exc_Tback
!    --                    (B_E_I)          (B_E_TB)
! 
!    --           o--
!    --  (B_E_I)  |  Exception_Name: <exception name> (as in Exception_Name)
!    --           |  Message: <message> (or a null line if no message)
!    --           |  PID=nnnn (if != 0)
!    --           o--
!    --  (B_E_TB) |  Call stack traceback locations:
!    --           |  <0xyyyyyyyy 0xyyyyyyyy ...>
!    --           o--
! 
!    --                  Tailored_Exception_Information
!    --                               |
!    --                    +----------+----------+
!    --                    |                     |
!    --             Basic_Exc_Info    &  Tailored_Exc_Tback
!    --                                          |
!    --                              +-----------+------------+
!    --                              |                        |
!    --                       Basic_Exc_Tback    Or    Tback_Decorator
!    --                     if no decorator set           otherwise
! 
!    --  Functions returning String imply secondary stack use, which is a heavy
!    --  mechanism requiring run-time support. Besides, some of the routines we
!    --  provide here are to be used by the default Last_Chance_Handler, at the
!    --  critical point where the runtime is about to be finalized. Since most
!    --  of the items we have at hand are of bounded length, we also provide a
!    --  procedural interface able to incrementally append the necessary bits to
!    --  a preallocated buffer or output them straight to stderr.
! 
!    --  The procedural interface is composed of two major sections: a neutral
!    --  section for basic types like Address, Character, Natural or String, and
!    --  an exception oriented section for the e.g. Basic_Exception_Information.
!    --  This is the Append_Info family of procedures below.
! 
!    --  Output to stderr is commanded by passing an empty buffer to update, and
!    --  care is taken not to overflow otherwise.
! 
!    --------------------------------------------
!    -- Procedural Interface - Neutral section --
!    --------------------------------------------
! 
!    procedure Append_Info_Address
!      (A    : Address;
!       Info : in out String;
!       Ptr  : in out Natural);
! 
!    procedure Append_Info_Character
!      (C    : Character;
!       Info : in out String;
!       Ptr  : in out Natural);
  
     procedure Append_Info_Nat
       (N    : Natural;
        Info : in out String;
        Ptr  : in out Natural);
  
     procedure Append_Info_NL
       (Info : in out String;
        Ptr  : in out Natural);
!    pragma Inline (Append_Info_NL);
  
     procedure Append_Info_String
       (S    : String;
        Info : in out String;
        Ptr  : in out Natural);
  
!    -------------------------------------------------------
!    -- Procedural Interface - Exception oriented section --
!    -------------------------------------------------------
  
!    procedure Append_Info_Exception_Name
!      (Id   : Exception_Id;
!       Info : in out String;
!       Ptr  : in out Natural);
! 
!    procedure Append_Info_Exception_Name
!      (X    : Exception_Occurrence;
!       Info : in out String;
!       Ptr  : in out Natural);
! 
!    procedure Append_Info_Exception_Message
!      (X    : Exception_Occurrence;
!       Info : in out String;
!       Ptr  : in out Natural);
! 
!    procedure Append_Info_Basic_Exception_Information
!      (X    : Exception_Occurrence;
!       Info : in out String;
!       Ptr  : in out Natural);
! 
!    procedure Append_Info_Basic_Exception_Traceback
!      (X    : Exception_Occurrence;
!       Info : in out String;
!       Ptr  : in out Natural);
! 
!    procedure Append_Info_Exception_Information
!      (X    : Exception_Occurrence;
!       Info : in out String;
!       Ptr  : in out Natural);
! 
! 
!    --  The "functional" interface to the exception information not involving
!    --  a traceback decorator uses preallocated intermediate buffers to avoid
!    --  the use of secondary stack. Preallocation requires preliminary length
!    --  computation, for which a series of functions are introduced:
! 
!    ---------------------------------
!    -- Length evaluation utilities --
!    ---------------------------------
! 
!    function Basic_Exception_Info_Maxlength
!      (X : Exception_Occurrence) return Natural;
! 
!    function Basic_Exception_Tback_Maxlength
!      (X : Exception_Occurrence) return Natural;
! 
!    function Exception_Info_Maxlength
!      (X : Exception_Occurrence) return Natural;
! 
!    function Exception_Name_Length
!      (Id : Exception_Id) return Natural;
! 
!    function Exception_Name_Length
!      (X : Exception_Occurrence) return Natural;
! 
!    function Exception_Message_Length
!      (X : Exception_Occurrence) return Natural;
! 
!    --------------------------
!    -- Functional Interface --
!    --------------------------
  
     function Basic_Exception_Traceback
       (X : Exception_Occurrence) return String;
*************** package body Exception_Data is
*** 82,113 ****
     --  exception occurrence, either in its basic form if no decorator is
     --  in place, or as formatted by the decorator otherwise.
  
!    --  The overall organization of the exception information related code
!    --  is summarized below :
!    --
!    --           Exception_Information
!    --                    |
!    --            +-------+--------+
!    --            |                |
!    --     Basic_Exc_Info & Basic_Exc_Tback
!    --
!    --
!    --       Tailored_Exception_Information
!    --                    |
!    --         +----------+----------+
!    --         |                     |
!    --  Basic_Exc_Info    &  Tailored_Exc_Tback
!    --                               |
!    --                   +-----------+------------+
!    --                   |                        |
!    --            Basic_Exc_Tback    Or    Tback_Decorator
!    --          if no decorator set           otherwise
  
!    -------------------
!    -- Address_Image --
!    -------------------
  
!    function Address_Image (A : Address) return String is
        S : String (1 .. 18);
        P : Natural;
        N : Integer_Address;
--- 196,223 ----
     --  exception occurrence, either in its basic form if no decorator is
     --  in place, or as formatted by the decorator otherwise.
  
!    -----------------------------------------------------------------------
!    -- Services for the default Last_Chance_Handler and the task wrapper --
!    -----------------------------------------------------------------------
  
!    pragma Export
!      (Ada, Append_Info_Exception_Message, "__gnat_append_info_e_msg");
  
!    pragma Export
!      (Ada, Append_Info_Exception_Information, "__gnat_append_info_e_info");
! 
!    pragma Export
!      (Ada, Exception_Message_Length, "__gnat_exception_msg_len");
! 
!    -------------------------
!    -- Append_Info_Address --
!    -------------------------
! 
!    procedure Append_Info_Address
!      (A    : Address;
!       Info : in out String;
!       Ptr  : in out Natural)
!    is
        S : String (1 .. 18);
        P : Natural;
        N : Integer_Address;
*************** package body Exception_Data is
*** 126,133 ****
  
        S (P - 1) := '0';
        S (P) := 'x';
!       return S (P - 1 .. S'Last);
!    end Address_Image;
  
     ---------------------
     -- Append_Info_Nat --
--- 236,262 ----
  
        S (P - 1) := '0';
        S (P) := 'x';
! 
!       Append_Info_String (S (P - 1 .. S'Last), Info, Ptr);
!    end Append_Info_Address;
! 
!    ---------------------------
!    -- Append_Info_Character --
!    ---------------------------
! 
!    procedure Append_Info_Character
!      (C    : Character;
!       Info : in out String;
!       Ptr  : in out Natural)
!    is
!    begin
!       if Info'Length = 0 then
!          To_Stderr (C);
!       elsif Ptr < Info'Last then
!          Ptr := Ptr + 1;
!          Info (Ptr) := C;
!       end if;
!    end Append_Info_Character;
  
     ---------------------
     -- Append_Info_Nat --
*************** package body Exception_Data is
*** 143,150 ****
           Append_Info_Nat (N / 10, Info, Ptr);
        end if;
  
!       Ptr := Ptr + 1;
!       Info (Ptr) := Character'Val (Character'Pos ('0') + N mod 10);
     end Append_Info_Nat;
  
     --------------------
--- 272,279 ----
           Append_Info_Nat (N / 10, Info, Ptr);
        end if;
  
!       Append_Info_Character
!         (Character'Val (Character'Pos ('0') + N mod 10), Info, Ptr);
     end Append_Info_Nat;
  
     --------------------
*************** package body Exception_Data is
*** 156,163 ****
        Ptr  : in out Natural)
     is
     begin
!       Ptr := Ptr + 1;
!       Info (Ptr) := ASCII.LF;
     end Append_Info_NL;
  
     ------------------------
--- 285,291 ----
        Ptr  : in out Natural)
     is
     begin
!       Append_Info_Character (ASCII.LF, Info, Ptr);
     end Append_Info_NL;
  
     ------------------------
*************** package body Exception_Data is
*** 169,232 ****
        Info : in out String;
        Ptr  : in out Natural)
     is
-       Last : constant Natural := Integer'Min (Ptr + S'Length, Info'Last);
- 
     begin
!       Info (Ptr + 1 .. Last) := S;
!       Ptr := Last;
     end Append_Info_String;
  
!    ---------------------------------
!    -- Basic_Exception_Information --
!    ---------------------------------
! 
!    function Basic_Exception_Information
!      (X : Exception_Occurrence) return String
!    is
!       Name : constant String := Exception_Name (X);
!       Msg  : constant String := Exception_Message (X);
!       --  Exception name and message that are going to be included in the
!       --  information to return, if not empty.
  
!       Name_Len : constant Natural := Name'Length;
!       Msg_Len  : constant Natural := Msg'Length;
!       --  Length of these strings, useful to compute the size of the string
!       --  we have to allocate for the complete result as well as in the body
!       --  of this procedure.
  
!       Info_Maxlen : constant Natural := 50 + Name_Len + Msg_Len;
!       --  Maximum length of the information string we will build, with :
!       --
!       --  50 =    16 + 2   for the text associated with the name
!       --        +  9 + 2   for the text associated with the message
!       --        +  5 + 2   for the text associated with the pid
!       --        + 14       for the text image of the pid itself and a margin.
!       --
!       --  This is indeed a maximum since some data may not appear at all if
!       --  not relevant. For example, nothing related to the exception message
!       --  will be there if this message is empty.
!       --
!       --  WARNING : Do not forget to update these numbers if anything
!       --  involved in the computation changes.
  
!       Info : String (1 .. Info_Maxlen);
!       --  Information string we are going to build, containing the common
!       --  part shared by Exc_Info and Tailored_Exc_Info.
  
!       Ptr  : Natural := 0;
  
     begin
        --  Output exception name and message except for _ABORT_SIGNAL, where
!       --  these two lines are omitted (see discussion above).
  
!       if Name (1) /= '_' then
!          Append_Info_String ("Exception name: ", Info, Ptr);
           Append_Info_String (Name, Info, Ptr);
           Append_Info_NL (Info, Ptr);
  
!          if Msg_Len /= 0 then
!             Append_Info_String ("Message: ", Info, Ptr);
!             Append_Info_String (Msg, Info, Ptr);
              Append_Info_NL (Info, Ptr);
           end if;
        end if;
--- 297,352 ----
        Info : in out String;
        Ptr  : in out Natural)
     is
     begin
!       if Info'Length = 0 then
!          To_Stderr (S);
!       else
!          declare
!             Last : constant Natural :=
!               Integer'Min (Ptr + S'Length, Info'Last);
!          begin
!             Info (Ptr + 1 .. Last) := S;
!             Ptr := Last;
!          end;
!       end if;
     end Append_Info_String;
  
!    ---------------------------------------------
!    -- Append_Info_Basic_Exception_Information --
!    ---------------------------------------------
  
!    --  To ease the maximum length computation, we define and pull out a couple
!    --  of string constants:
  
!    BEI_Name_Header : constant String := "Exception name: ";
!    BEI_Msg_Header  : constant String := "Message: ";
!    BEI_PID_Header  : constant String := "PID: ";
  
!    procedure Append_Info_Basic_Exception_Information
!      (X    : Exception_Occurrence;
!       Info : in out String;
!       Ptr  : in out Natural)
!    is
!       Name : String (1 .. Exception_Name_Length (X));
!       --  Bufer in which to fetch the exception name, in order to check
!       --  whether this is an internal _ABORT_SIGNAL or a regular occurrence.
  
!       Name_Ptr : Natural := Name'First - 1;
  
     begin
        --  Output exception name and message except for _ABORT_SIGNAL, where
!       --  these two lines are omitted.
  
!       Append_Info_Exception_Name (X, Name, Name_Ptr);
! 
!       if Name (Name'First) /= '_' then
!          Append_Info_String (BEI_Name_Header, Info, Ptr);
           Append_Info_String (Name, Info, Ptr);
           Append_Info_NL (Info, Ptr);
  
!          if Exception_Message_Length (X) /= 0 then
!             Append_Info_String (BEI_Msg_Header, Info, Ptr);
!             Append_Info_Exception_Message  (X, Info, Ptr);
              Append_Info_NL (Info, Ptr);
           end if;
        end if;
*************** package body Exception_Data is
*** 234,349 ****
        --  Output PID line if non-zero
  
        if X.Pid /= 0 then
!          Append_Info_String ("PID: ", Info, Ptr);
           Append_Info_Nat (X.Pid, Info, Ptr);
           Append_Info_NL (Info, Ptr);
        end if;
  
!       return Info (1 .. Ptr);
!    end Basic_Exception_Information;
  
!    -------------------------------
!    -- Basic_Exception_Traceback --
!    -------------------------------
  
!    function Basic_Exception_Traceback
!      (X : Exception_Occurrence) return String
     is
!       Info_Maxlen : constant Natural := 35 + X.Num_Tracebacks * 19;
!       --  Maximum length of the information string we are building, with :
!       --  33 = 31 + 4      for the text before and after the traceback, and
!       --  19 =  2 + 16 + 1 for each address ("0x" + HHHH + " ")
!       --
!       --  WARNING : Do not forget to update these numbers if anything
!       --  involved in the computation changes.
  
!       Info : String (1 .. Info_Maxlen);
!       --  Information string we are going to build, containing an image
!       --  of the call chain associated with the exception occurrence in its
!       --  most basic form, that is as a sequence of binary addresses.
  
!       Ptr  : Natural := 0;
  
     begin
!       if X.Num_Tracebacks > 0 then
!          Append_Info_String ("Call stack traceback locations:", Info, Ptr);
!          Append_Info_NL (Info, Ptr);
  
!          for J in 1 .. X.Num_Tracebacks loop
!             Append_Info_String
!               (Address_Image (TBE.PC_For (X.Tracebacks (J))), Info, Ptr);
!             exit when J = X.Num_Tracebacks;
!             Append_Info_String (" ", Info, Ptr);
!          end loop;
  
!          Append_Info_NL (Info, Ptr);
!       end if;
  
!       return Info (1 .. Ptr);
!    end Basic_Exception_Traceback;
  
!    ---------------------------
!    -- Exception_Information --
!    ---------------------------
  
!    --  The format of the string is:
  
!    --    Exception_Name: nnnnn
!    --    Message: mmmmm
!    --    PID: ppp
!    --    Call stack traceback locations:
!    --    0xhhhh 0xhhhh 0xhhhh ... 0xhhh
  
!    --  where
  
!    --    nnnn is the fully qualified name of the exception in all upper
!    --    case letters. This line is always present.
  
!    --    mmmm is the message (this line present only if message is non-null)
  
!    --    ppp is the Process Id value as a decimal integer (this line is
!    --    present only if the Process Id is non-zero). Currently we are
!    --    not making use of this field.
  
!    --    The Call stack traceback locations line and the following values
!    --    are present only if at least one traceback location was recorded.
!    --    the values are given in C style format, with lower case letters
!    --    for a-f, and only as many digits present as are necessary.
  
!    --  The line terminator sequence at the end of each line, including the
!    --  last line is a CR-LF sequence (16#0D# followed by 16#0A#).
  
!    --  The Exception_Name and Message lines are omitted in the abort
!    --  signal case, since this is not really an exception, and the only
!    --  use of this routine is internal for printing termination output.
  
!    --  WARNING: if the format of the generated string is changed, please note
!    --  that an equivalent modification to the routine String_To_EO must be
!    --  made to preserve proper functioning of the stream attributes.
  
!    function Exception_Information (X : Exception_Occurrence) return String is
  
!       --  This information is now built using the circuitry introduced in
!       --  association with the support of traceback decorators, as the
!       --  catenation of the exception basic information and the call chain
!       --  backtrace in its basic form.
  
!       Basic_Info : constant String  := Basic_Exception_Information (X);
!       Tback_Info : constant String  := Basic_Exception_Traceback (X);
  
!       Basic_Len  : constant Natural := Basic_Info'Length;
!       Tback_Len  : constant Natural := Tback_Info'Length;
  
!       Info : String (1 .. Basic_Len + Tback_Len);
!       Ptr  : Natural := 0;
  
     begin
!       Append_Info_String (Basic_Info, Info, Ptr);
!       Append_Info_String (Tback_Info, Info, Ptr);
  
!       return Info;
!    end Exception_Information;
  
  
     -------------------------
     -- Set_Exception_C_Msg --
--- 354,555 ----
        --  Output PID line if non-zero
  
        if X.Pid /= 0 then
!          Append_Info_String (BEI_PID_Header, Info, Ptr);
           Append_Info_Nat (X.Pid, Info, Ptr);
           Append_Info_NL (Info, Ptr);
        end if;
+    end Append_Info_Basic_Exception_Information;
  
!    -------------------------------------------
!    -- Basic_Exception_Information_Maxlength --
!    -------------------------------------------
  
!    function Basic_Exception_Info_Maxlength
!      (X : Exception_Occurrence) return Natural is
!    begin
!       return
!         BEI_Name_Header'Length + Exception_Name_Length (X) + 1
!         + BEI_Msg_Header'Length + Exception_Message_Length (X) + 1
!         + BEI_PID_Header'Length + 15;
!    end Basic_Exception_Info_Maxlength;
  
!    -------------------------------------------
!    -- Append_Info_Basic_Exception_Traceback --
!    -------------------------------------------
! 
!    --  As for Basic_Exception_Information:
! 
!    BETB_Header : constant String := "Call stack traceback locations:";
! 
!    procedure Append_Info_Basic_Exception_Traceback
!      (X    : Exception_Occurrence;
!       Info : in out String;
!       Ptr  : in out Natural)
     is
!    begin
!       if X.Num_Tracebacks <= 0 then
!          return;
!       end if;
  
!       Append_Info_String (BETB_Header, Info, Ptr);
!       Append_Info_NL (Info, Ptr);
  
!       for J in 1 .. X.Num_Tracebacks loop
!          Append_Info_Address (TBE.PC_For (X.Tracebacks (J)), Info, Ptr);
!          exit when J = X.Num_Tracebacks;
!          Append_Info_Character (' ', Info, Ptr);
!       end loop;
  
+       Append_Info_NL (Info, Ptr);
+    end Append_Info_Basic_Exception_Traceback;
+ 
+    -----------------------------------------
+    -- Basic_Exception_Traceback_Maxlength --
+    -----------------------------------------
+ 
+    function Basic_Exception_Tback_Maxlength
+      (X : Exception_Occurrence) return Natural is
     begin
!       return BETB_Header'Length + 1 + X.Num_Tracebacks * 19 + 1;
!       --  19 =  2 + 16 + 1 for each address ("0x" + HHHH + " ")
!    end Basic_Exception_Tback_Maxlength;
  
!    ---------------------------------------
!    -- Append_Info_Exception_Information --
!    ---------------------------------------
  
!    procedure Append_Info_Exception_Information
!      (X    : Exception_Occurrence;
!       Info : in out String;
!       Ptr  : in out Natural)
!    is
!    begin
!       Append_Info_Basic_Exception_Information (X, Info, Ptr);
!       Append_Info_Basic_Exception_Traceback   (X, Info, Ptr);
!    end Append_Info_Exception_Information;
  
!    ------------------------------
!    -- Exception_Info_Maxlength --
!    ------------------------------
  
!    function Exception_Info_Maxlength
!      (X : Exception_Occurrence) return Natural is
!    begin
!       return
!         Basic_Exception_Info_Maxlength (X)
!         + Basic_Exception_Tback_Maxlength (X);
!    end Exception_Info_Maxlength;
  
!    -----------------------------------
!    -- Append_Info_Exception_Message --
!    -----------------------------------
  
!    procedure Append_Info_Exception_Message
!      (X    : Exception_Occurrence;
!       Info : in out String;
!       Ptr  : in out Natural) is
!    begin
!       if X.Id = Null_Id then
!          raise Constraint_Error;
!       end if;
  
!       declare
!          Len : constant Natural := Exception_Message_Length (X);
!          Msg : constant String (1 .. Len) := X.Msg (1 .. Len);
!       begin
!          Append_Info_String (Msg, Info, Ptr);
!       end;
!    end Append_Info_Exception_Message;
  
!    --------------------------------
!    -- Append_Info_Exception_Name --
!    --------------------------------
  
!    procedure Append_Info_Exception_Name
!      (Id   : Exception_Id;
!       Info : in out String;
!       Ptr  : in out Natural)
!    is
!    begin
!       if Id = Null_Id then
!          raise Constraint_Error;
!       end if;
  
!       declare
!          Len  : constant Natural := Exception_Name_Length (Id);
!          Name : constant String (1 .. Len) := Id.Full_Name (1 .. Len);
!       begin
!          Append_Info_String (Name, Info, Ptr);
!       end;
!    end Append_Info_Exception_Name;
  
!    procedure Append_Info_Exception_Name
!      (X    : Exception_Occurrence;
!       Info : in out String;
!       Ptr  : in out Natural)
!    is
!    begin
!       Append_Info_Exception_Name (X.Id, Info, Ptr);
!    end Append_Info_Exception_Name;
  
!    ---------------------------
!    -- Exception_Name_Length --
!    ---------------------------
  
!    function Exception_Name_Length
!      (Id : Exception_Id) return Natural is
!    begin
!       --  What is stored in the internal Name buffer includes a terminating
!       --  null character that we never care about.
  
!       return Id.Name_Length - 1;
!    end Exception_Name_Length;
  
!    function Exception_Name_Length
!      (X : Exception_Occurrence) return Natural is
!    begin
!       return Exception_Name_Length (X.Id);
!    end Exception_Name_Length;
  
!    ------------------------------
!    -- Exception_Message_Length --
!    ------------------------------
  
!    function Exception_Message_Length
!      (X : Exception_Occurrence) return Natural is
!    begin
!       return X.Msg_Length;
!    end Exception_Message_Length;
  
!    -------------------------------
!    -- Basic_Exception_Traceback --
!    -------------------------------
  
!    function Basic_Exception_Traceback
!      (X : Exception_Occurrence) return String
!    is
!       Info : aliased String (1 .. Basic_Exception_Tback_Maxlength (X));
!       Ptr  : Natural := Info'First - 1;
  
     begin
!       Append_Info_Basic_Exception_Traceback (X, Info, Ptr);
!       return Info (Info'First .. Ptr);
!    end Basic_Exception_Traceback;
  
!    ---------------------------
!    -- Exception_Information --
!    ---------------------------
  
+    function Exception_Information
+      (X : Exception_Occurrence) return String
+    is
+       Info : String (1 .. Exception_Info_Maxlength (X));
+       Ptr  : Natural := Info'First - 1;
+ 
+    begin
+       Append_Info_Exception_Information (X, Info, Ptr);
+       return Info (Info'First .. Ptr);
+    end Exception_Information;
  
     -------------------------
     -- Set_Exception_C_Msg --
*************** package body Exception_Data is
*** 457,467 ****
     function Tailored_Exception_Traceback
       (X : Exception_Occurrence) return String
     is
!       --  We indeed reference the decorator *wrapper* from here and not the
!       --  decorator itself. The purpose of the local variable Wrapper is to
!       --  prevent a potential crash by race condition in the code below. The
!       --  atomicity of this assignment is enforced by pragma Atomic in
!       --  System.Soft_Links.
  
        --  The potential race condition here, if no local variable was used,
        --  relates to the test upon the wrapper's value and the call, which
--- 663,672 ----
     function Tailored_Exception_Traceback
       (X : Exception_Occurrence) return String
     is
!       --  We reference the decorator *wrapper* here and not the decorator
!       --  itself. The purpose of the local variable Wrapper is to prevent a
!       --  potential race condition in the code below. The atomicity of this
!       --  assignment is enforced by pragma Atomic in System.Soft_Links.
  
        --  The potential race condition here, if no local variable was used,
        --  relates to the test upon the wrapper's value and the call, which
*************** package body Exception_Data is
*** 487,519 ****
     function Tailored_Exception_Information
       (X : Exception_Occurrence) return String
     is
!       --  The tailored exception information is simply the basic information
        --  associated with the tailored call chain backtrace.
  
-       Basic_Info : constant String  := Basic_Exception_Information (X);
        Tback_Info : constant String  := Tailored_Exception_Traceback (X);
- 
-       Basic_Len  : constant Natural := Basic_Info'Length;
        Tback_Len  : constant Natural := Tback_Info'Length;
  
!       Info : String (1 .. Basic_Len + Tback_Len);
!       Ptr  : Natural := 0;
  
     begin
!       Append_Info_String (Basic_Info, Info, Ptr);
        Append_Info_String (Tback_Info, Info, Ptr);
! 
!       return Info;
!    end Tailored_Exception_Information;
! 
!    procedure Tailored_Exception_Information
!      (X    : Exception_Occurrence;
!       Buff : in out String;
!       Last : in out Integer)
!    is
!    begin
!       Append_Info_String (Basic_Exception_Information (X), Buff, Last);
!       Append_Info_String (Tailored_Exception_Traceback (X), Buff, Last);
     end Tailored_Exception_Information;
  
  end Exception_Data;
--- 692,710 ----
     function Tailored_Exception_Information
       (X : Exception_Occurrence) return String
     is
!       --  The tailored exception information is the basic information
        --  associated with the tailored call chain backtrace.
  
        Tback_Info : constant String  := Tailored_Exception_Traceback (X);
        Tback_Len  : constant Natural := Tback_Info'Length;
  
!       Info : String (1 .. Basic_Exception_Info_Maxlength (X) + Tback_Len);
!       Ptr  : Natural := Info'First - 1;
  
     begin
!       Append_Info_Basic_Exception_Information (X, Info, Ptr);
        Append_Info_String (Tback_Info, Info, Ptr);
!       return Info (Info'First .. Ptr);
     end Tailored_Exception_Information;
  
  end Exception_Data;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-exexpr.adb gcc-4.0.0/gcc/ada/a-exexpr.adb
*** gcc-3.4.3/gcc/ada/a-exexpr.adb	Tue Oct 21 13:41:53 2003
--- gcc-4.0.0/gcc/ada/a-exexpr.adb	Wed Dec  8 11:24:50 2004
***************
*** 2,12 ****
  --                                                                          --
  --                         GNAT COMPILER COMPONENTS                         --
  --                                                                          --
! --                     ADA.EXCEPTIONS.EXCEPTION_PROPAGATION                 --
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 2,12 ----
  --                                                                          --
  --                         GNAT COMPILER COMPONENTS                         --
  --                                                                          --
! --  A D A . E X C E P T I O N S . E X C E P T I O N _ P R O P A G A T I O N --
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Interfaces;
*** 36,41 ****
--- 36,43 ----
  with Ada.Unchecked_Conversion;
  with Ada.Unchecked_Deallocation;
  
+ with System.Storage_Elements;  use System.Storage_Elements;
+ 
  pragma Warnings (Off);
  --  Since several constructs give warnings in 3.14a1, including unreferenced
  --  variables and pragma Unreferenced itself.
*************** package body Exception_Propagation is
*** 102,166 ****
     GNAT_Exception_Class : constant Exception_Class := 16#474e552d41646100#;
     --  "GNU-Ada\0"
  
     type Unwind_Exception is record
        Class    : Exception_Class := GNAT_Exception_Class;
        Cleanup  : System.Address  := System.Null_Address;
!       Private1 : Integer;
!       Private2 : Integer;
     end record;
! 
!    pragma Convention (C, Unwind_Exception);
  
     for Unwind_Exception'Alignment use Standard'Maximum_Alignment;
     --  The C++ ABI mandates the common exception header to be at least
     --  doubleword aligned, and the libGCC implementation actually makes it
!    --  maximally aligned (see unwind.h). We need to match this because:
! 
!    --  1/ We pass pointers to such headers down to the underlying
!    --     libGCC unwinder,
! 
!    --  and
! 
!    --  2/ The GNAT_GCC_Exception record below starts with this common
!    --     common header and has a C counterpart which needs to be laid
!    --     out identically in raise.c. If the alignment of the C and Ada
!    --     common headers mismatch, their size may also differ, and the
!    --     layouts may not match anymore.
  
!    ---------------------------------------------------------------
!    --  GNAT specific entities to deal with the GCC eh circuitry --
!    ---------------------------------------------------------------
  
     --  A GNAT exception object to be dealt with by the personality routine
!    --  called by the GCC unwinding runtime. This structure shall match the
!    --  one in raise.c and is currently experimental as it might be merged
!    --  with the GNAT runtime definition some day.
  
     type GNAT_GCC_Exception is record
        Header : Unwind_Exception;
!       --  ABI Exception header first.
  
        Id : Exception_Id;
!       --  GNAT Exception identifier. This is used by the personality
!       --  routine to determine if the context it examines contains a
!       --  handler for the exception beeing propagated.
! 
!       Handled_By_Others : Boolean;
!       --  Is this exception handled by "when others" ? This is used by the
!       --  personality routine to determine if an "others" handler in the
!       --  context it examines may catch the exception beeing propagated.
  
        N_Cleanups_To_Trigger : Integer;
!       --  Number of cleanup only frames encountered in SEARCH phase.
!       --  This is used to control the forced unwinding triggered when
!       --  no handler has been found.
  
        Next_Exception : EOA;
!       --  Used to create a linked list of exception occurrences.
     end record;
  
     pragma Convention (C, GNAT_GCC_Exception);
  
     type GNAT_GCC_Exception_Access is access all GNAT_GCC_Exception;
  
     function To_GNAT_GCC_Exception is new
--- 104,173 ----
     GNAT_Exception_Class : constant Exception_Class := 16#474e552d41646100#;
     --  "GNU-Ada\0"
  
+    type Unwind_Word is mod 2 ** System.Word_Size;
+    for Unwind_Word'Size use System.Word_Size;
+    --  Map the corresponding C type used in Unwind_Exception below
+ 
     type Unwind_Exception is record
        Class    : Exception_Class := GNAT_Exception_Class;
        Cleanup  : System.Address  := System.Null_Address;
!       Private1 : Unwind_Word;
!       Private2 : Unwind_Word;
     end record;
!    --  Map the GCC struct used for exception handling
  
     for Unwind_Exception'Alignment use Standard'Maximum_Alignment;
     --  The C++ ABI mandates the common exception header to be at least
     --  doubleword aligned, and the libGCC implementation actually makes it
!    --  maximally aligned (see unwind.h). See additional comments on the
!    --  alignment below.
  
!    --------------------------------------------------------------
!    -- GNAT Specific Entities To Deal With The GCC EH Circuitry --
!    --------------------------------------------------------------
  
     --  A GNAT exception object to be dealt with by the personality routine
!    --  called by the GCC unwinding runtime.
  
     type GNAT_GCC_Exception is record
        Header : Unwind_Exception;
!       --  ABI Exception header first
  
        Id : Exception_Id;
!       --  GNAT Exception identifier.  This is filled by Propagate_Exception
!       --  and then used by the personality routine to determine if the context
!       --  it examines contains a handler for the exception beeing propagated.
  
        N_Cleanups_To_Trigger : Integer;
!       --  Number of cleanup only frames encountered in SEARCH phase.  This is
!       --  initialized to 0 by Propagate_Exception and maintained by the
!       --  personality routine to control a forced unwinding phase triggering
!       --  all the cleanups before calling Unhandled_Exception_Terminate when
!       --  an exception is not handled.
  
        Next_Exception : EOA;
!       --  Used to create a linked list of exception occurrences
     end record;
  
     pragma Convention (C, GNAT_GCC_Exception);
  
+    --  There is a subtle issue with the common header alignment, since the C
+    --  version is aligned on BIGGEST_ALIGNMENT, the Ada version is aligned on
+    --  Standard'Maximum_Alignment, and those two values don't quite represent
+    --  the same concepts and so may be decoupled someday. One typical reason
+    --  is that BIGGEST_ALIGNMENT may be larger than what the underlying system
+    --  allocator guarantees, and there are extra costs involved in allocating
+    --  objects aligned to such factors.
+ 
+    --  To deal with the potential alignment differences between the C and Ada
+    --  representations, the Ada part of the whole structure is only accessed
+    --  by the personality routine through the accessors declared below.  Ada
+    --  specific fields are thus always accessed through consistent layout, and
+    --  we expect the actual alignment to always be large enough to avoid traps
+    --  from the C accesses to the common header. Besides, accessors aleviate
+    --  the need for a C struct whole conterpart, both painful and errorprone
+    --  to maintain anyway.
+ 
     type GNAT_GCC_Exception_Access is access all GNAT_GCC_Exception;
  
     function To_GNAT_GCC_Exception is new
*************** package body Exception_Propagation is
*** 172,202 ****
     procedure Free is new Unchecked_Deallocation
       (Exception_Occurrence, EOA);
  
-    function Remove
-      (Top   : EOA;
-       Excep : GNAT_GCC_Exception_Access)
-       return  Boolean;
-    --  Remove Excep from the stack starting at Top.
-    --  Return True if Excep was found and removed, false otherwise.
- 
-    --  Hooks called when entering/leaving an exception handler for a given
-    --  occurrence, aimed at handling the stack of active occurrences. The
-    --  calls are generated by gigi in tree_transform/N_Exception_Handler.
- 
-    procedure Begin_Handler (GCC_Exception : GNAT_GCC_Exception_Access);
-    pragma Export (C, Begin_Handler, "__gnat_begin_handler");
- 
-    procedure End_Handler (GCC_Exception : GNAT_GCC_Exception_Access);
-    pragma Export (C, End_Handler, "__gnat_end_handler");
- 
     function CleanupUnwind_Handler
       (UW_Version   : Integer;
        UW_Phases    : Unwind_Action;
        UW_Eclass    : Exception_Class;
        UW_Exception : access GNAT_GCC_Exception;
        UW_Context   : System.Address;
!       UW_Argument  : System.Address)
!       return         Unwind_Reason_Code;
     --  Hook called at each step of the forced unwinding we perform to
     --  trigger cleanups found during the propagation of an unhandled
     --  exception.
--- 179,191 ----
     procedure Free is new Unchecked_Deallocation
       (Exception_Occurrence, EOA);
  
     function CleanupUnwind_Handler
       (UW_Version   : Integer;
        UW_Phases    : Unwind_Action;
        UW_Eclass    : Exception_Class;
        UW_Exception : access GNAT_GCC_Exception;
        UW_Context   : System.Address;
!       UW_Argument  : System.Address) return Unwind_Reason_Code;
     --  Hook called at each step of the forced unwinding we perform to
     --  trigger cleanups found during the propagation of an unhandled
     --  exception.
*************** package body Exception_Propagation is
*** 215,228 ****
        UW_Argument  : System.Address);
     pragma Import (C, Unwind_ForcedUnwind, "__gnat_Unwind_ForcedUnwind");
  
     ------------
     -- Remove --
     ------------
  
     function Remove
       (Top   : EOA;
!       Excep : GNAT_GCC_Exception_Access)
!       return  Boolean
     is
        Prev          : GNAT_GCC_Exception_Access := null;
        Iter          : EOA := Top;
--- 204,296 ----
        UW_Argument  : System.Address);
     pragma Import (C, Unwind_ForcedUnwind, "__gnat_Unwind_ForcedUnwind");
  
+    ------------------------------------------------------------------
+    -- Occurrence Stack Management Facilities for the GCC-EH Scheme --
+    ------------------------------------------------------------------
+ 
+    function Remove
+      (Top   : EOA;
+       Excep : GNAT_GCC_Exception_Access) return Boolean;
+    --  Remove Excep from the stack starting at Top.
+    --  Return True if Excep was found and removed, false otherwise.
+ 
+    --  Hooks called when entering/leaving an exception handler for a given
+    --  occurrence, aimed at handling the stack of active occurrences. The
+    --  calls are generated by gigi in tree_transform/N_Exception_Handler.
+ 
+    procedure Begin_Handler (GCC_Exception : GNAT_GCC_Exception_Access);
+    pragma Export (C, Begin_Handler, "__gnat_begin_handler");
+ 
+    procedure End_Handler (GCC_Exception : GNAT_GCC_Exception_Access);
+    pragma Export (C, End_Handler, "__gnat_end_handler");
+ 
+    Setup_Key : constant := 16#DEAD#;
+    --  To handle the case of a task "transferring" an exception occurrence to
+    --  another task, for instance via Exceptional_Complete_Rendezvous, we need
+    --  to be able to identify occurrences which have been Setup and not yet
+    --  Propagated. We hijack one of the common header fields for that purpose,
+    --  setting it to a special key value during the setup process, clearing it
+    --  at the very beginning of the propagation phase, and expecting it never
+    --  to be reset to the special value later on. A 16-bit value is used rather
+    --  than a 32-bit value for static compatibility with 16-bit targets such as
+    --  AAMP (where type Unwind_Word will be 16 bits).
+ 
+    function Is_Setup_And_Not_Propagated (E : EOA) return Boolean;
+ 
+    procedure Set_Setup_And_Not_Propagated (E : EOA);
+    procedure Clear_Setup_And_Not_Propagated (E : EOA);
+ 
+    ------------------------------------------------------------
+    -- Accessors to basic components of a GNAT exception data --
+    ------------------------------------------------------------
+ 
+    --  As of today, these are only used by the C implementation of the
+    --  GCC propagation personality routine to avoid having to rely on a C
+    --  counterpart of the whole exception_data structure, which is both
+    --  painful and error prone. These subprograms could be moved to a
+    --  more widely visible location if need be.
+ 
+    function Is_Handled_By_Others (E : Exception_Data_Ptr) return Boolean;
+    pragma Export (C, Is_Handled_By_Others, "__gnat_is_handled_by_others");
+ 
+    function Language_For (E : Exception_Data_Ptr) return Character;
+    pragma Export (C, Language_For, "__gnat_language_for");
+ 
+    function Import_Code_For (E : Exception_Data_Ptr) return Exception_Code;
+    pragma Export (C, Import_Code_For, "__gnat_import_code_for");
+ 
+    function EID_For (GNAT_Exception : GNAT_GCC_Exception_Access)
+      return Exception_Id;
+    pragma Export (C, EID_For, "__gnat_eid_for");
+ 
+    procedure Adjust_N_Cleanups_For
+      (GNAT_Exception : GNAT_GCC_Exception_Access;
+       Adjustment     : Integer);
+    pragma Export (C, Adjust_N_Cleanups_For, "__gnat_adjust_n_cleanups_for");
+ 
+    ---------------------------------------------------------------------------
+    -- Objects to materialize "others" and "all others" in the GCC EH tables --
+    ---------------------------------------------------------------------------
+ 
+    --  Currently, these only have their address taken and compared so there is
+    --  no real point having whole exception data blocks allocated. In any case
+    --  the types should match what gigi and the personality routine expect.
+    --  The initial value is an arbitrary value that will not exceed the range
+    --  of Integer on 16-bit targets (such as AAMP).
+ 
+    Others_Value : constant Integer := 16#7FFF#;
+    pragma Export (C, Others_Value, "__gnat_others_value");
+ 
+    All_Others_Value : constant Integer := 16#7FFF#;
+    pragma Export (C, All_Others_Value, "__gnat_all_others_value");
+ 
     ------------
     -- Remove --
     ------------
  
     function Remove
       (Top   : EOA;
!       Excep : GNAT_GCC_Exception_Access) return Boolean
     is
        Prev          : GNAT_GCC_Exception_Access := null;
        Iter          : EOA := Top;
*************** package body Exception_Propagation is
*** 285,292 ****
        UW_Eclass    : Exception_Class;
        UW_Exception : access GNAT_GCC_Exception;
        UW_Context   : System.Address;
!       UW_Argument  : System.Address)
!       return         Unwind_Reason_Code
     is
     begin
        --  Terminate as soon as we know there is nothing more to run. The
--- 353,359 ----
        UW_Eclass    : Exception_Class;
        UW_Exception : access GNAT_GCC_Exception;
        UW_Context   : System.Address;
!       UW_Argument  : System.Address) return Unwind_Reason_Code
     is
     begin
        --  Terminate as soon as we know there is nothing more to run. The
*************** package body Exception_Propagation is
*** 303,313 ****
        return URC_NO_REASON;
     end CleanupUnwind_Handler;
  
     ---------------------
     -- Setup_Exception --
     ---------------------
  
!    --  Push the current exception occurrence on the stack before overriding it.
  
     procedure Setup_Exception
       (Excep    : EOA;
--- 370,424 ----
        return URC_NO_REASON;
     end CleanupUnwind_Handler;
  
+    ---------------------------------
+    -- Is_Setup_And_Not_Propagated --
+    ---------------------------------
+ 
+    function Is_Setup_And_Not_Propagated (E : EOA) return Boolean is
+       GCC_E : GNAT_GCC_Exception_Access :=
+                 To_GNAT_GCC_Exception (E.Private_Data);
+    begin
+       return GCC_E /= null and then GCC_E.Header.Private1 = Setup_Key;
+    end Is_Setup_And_Not_Propagated;
+ 
+    ------------------------------------
+    -- Clear_Setup_And_Not_Propagated --
+    ------------------------------------
+ 
+    procedure Clear_Setup_And_Not_Propagated (E : EOA) is
+       GCC_E : GNAT_GCC_Exception_Access :=
+                 To_GNAT_GCC_Exception (E.Private_Data);
+    begin
+       pragma Assert (GCC_E /= null);
+       GCC_E.Header.Private1 := 0;
+    end Clear_Setup_And_Not_Propagated;
+ 
+    ----------------------------------
+    -- Set_Setup_And_Not_Propagated --
+    ----------------------------------
+ 
+    procedure Set_Setup_And_Not_Propagated (E : EOA) is
+       GCC_E : GNAT_GCC_Exception_Access :=
+                 To_GNAT_GCC_Exception (E.Private_Data);
+    begin
+       pragma Assert (GCC_E /= null);
+       GCC_E.Header.Private1 := Setup_Key;
+    end Set_Setup_And_Not_Propagated;
+ 
     ---------------------
     -- Setup_Exception --
     ---------------------
  
!    --  In the GCC-EH implementation of the propagation scheme, this
!    --  subprogram should be understood as : Setup the exception occurrence
!    --  stack headed at Current for a forthcoming raise of Excep.
! 
!    --  In the GNAT-SJLJ case this "stack" only exists implicitely, by way of
!    --  local occurrence declarations together with save/restore operations
!    --  generated by the front-end, and this routine has nothing to do.
! 
!    --  The differenciation is done here and not in the callers to avoid having
!    --  to spread out the test in numerous places.
  
     procedure Setup_Exception
       (Excep    : EOA;
*************** package body Exception_Propagation is
*** 318,355 ****
        Next          : EOA;
        GCC_Exception : GNAT_GCC_Exception_Access;
  
-       --  Note that we make no use of the Reraised indication at this point.
- 
-       --  The information is still passed around just in case of future needs,
-       --  since we've already switched between using/not-using it a number of
-       --  times.
- 
     begin
!       --  If the current exception is not live, the stack is empty and there
!       --  is nothing to do. Note that the stack always appears empty for
!       --  mechanisms that do not require one. For the mechanism we implement
!       --  in this unit, the initial Private_Data allocation for an occurrence
!       --  is issued by Propagate_Exception.
  
!       if Top.Private_Data = System.Null_Address then
           return;
        end if;
  
!       --  Shift the contents of the Top of the stack in a freshly allocated
!       --  entry, which leaves the room in the fixed Top entry available for the
!       --  occurrence about to be propagated.
  
!       Next := new Exception_Occurrence;
!       Save_Occurrence_And_Private (Next.all, Top.all);
  
!       --  Allocate Private_Data for the occurrence about to be propagated
!       --  and link everything together.
  
        GCC_Exception := new GNAT_GCC_Exception;
!       GCC_Exception.Next_Exception := Next;
  
        Top.Private_Data := GCC_Exception.all'Address;
  
     end Setup_Exception;
  
     -------------------
--- 429,499 ----
        Next          : EOA;
        GCC_Exception : GNAT_GCC_Exception_Access;
  
     begin
!       --  Just return if we're not in the GCC-EH case. What is otherwise
!       --  performed is useless and even harmful since it potentially involves
!       --  dynamic allocations that would never be released, and participates
!       --  in the Setup_And_Not_Propagated predicate management, only properly
!       --  handled by the rest of the GCC-EH scheme.
  
!       if Zero_Cost_Exceptions = 0 then
           return;
        end if;
  
!       --  Otherwise, the exception Excep is soon to be propagated, and the
!       --  storage used for that will be the occurrence statically allocated
!       --  for the current thread. This storage might currently be used for a
!       --  still active occurrence, so we need to push it on the thread's
!       --  occurrence stack (headed at that static occurrence) before it gets
!       --  clobbered.
  
!       --  What we do here is to trigger this push when need be, and allocate a
!       --  Private_Data block for the forthcoming Propagation.
  
!       --  Some tasking rendez-vous attempts lead to an occurrence transfer
!       --  from the server to the client (see Exceptional_Complete_Rendezvous).
!       --  In those cases Setup is called twice for the very same occurrence
!       --  before it gets propagated: once from the server, because this is
!       --  where the occurrence contents is elaborated and known, and then
!       --  once from the client when it detects the case and actually raises
!       --  the exception in its own context.
! 
!       --  The Is_Setup_And_Not_Propagated predicate tells us when we are in
!       --  the second call to Setup for a Transferred occurrence, and there is
!       --  nothing to be done here in this situation. This predicate cannot be
!       --  True if we are dealing with a Reraise, and we may even be called
!       --  with a raw uninitialized Excep occurrence in this case so we should
!       --  not check anyway. Observe the front-end expansion for a "raise;" to
!       --  see that happening. We get a local occurrence and a direct call to
!       --  Save_Occurrence without the intermediate init-proc call.
! 
!       if not Reraised and then Is_Setup_And_Not_Propagated (Excep) then
!          return;
!       end if;
! 
!       --  Allocate what will be the Private_Data block for the exception
!       --  to be propagated.
  
        GCC_Exception := new GNAT_GCC_Exception;
! 
!       --  If the Top of the occurrence stack is not currently used for an
!       --  active exception (the stack is empty) we just need to setup the
!       --  Private_Data pointer.
! 
!       --  Otherwise, we also need to shift the contents of the Top of the
!       --  stack in a freshly allocated entry and link everything together.
! 
!       if Top.Private_Data /= System.Null_Address then
!          Next := new Exception_Occurrence;
!          Save_Occurrence_And_Private (Next.all, Top.all);
! 
!          GCC_Exception.Next_Exception := Next;
!          Top.Private_Data := GCC_Exception.all'Address;
!       end if;
  
        Top.Private_Data := GCC_Exception.all'Address;
  
+       Set_Setup_And_Not_Propagated (Top);
     end Setup_Exception;
  
     -------------------
*************** package body Exception_Propagation is
*** 362,367 ****
--- 506,512 ----
        --  already been performed by Propagate_Exception. This hook remains for
        --  potential future necessity in optimizing the overall scheme, as well
        --  a useful debugging tool.
+ 
        null;
     end Begin_Handler;
  
*************** package body Exception_Propagation is
*** 371,377 ****
  
     procedure End_Handler (GCC_Exception : GNAT_GCC_Exception_Access) is
        Removed : Boolean;
- 
     begin
        Removed := Remove (Get_Current_Excep.all, GCC_Exception);
        pragma Assert (Removed);
--- 516,521 ----
*************** package body Exception_Propagation is
*** 390,407 ****
        GCC_Exception : GNAT_GCC_Exception_Access;
  
     begin
!       if Excep.Private_Data = System.Null_Address then
!          GCC_Exception := new GNAT_GCC_Exception;
!          Excep.Private_Data := GCC_Exception.all'Address;
!       else
!          GCC_Exception := To_GNAT_GCC_Exception (Excep.Private_Data);
!       end if;
  
!       --  Fill in the useful flags for the personality routine called for each
        --  frame via Unwind_RaiseException below.
  
        GCC_Exception.Id := Excep.Id;
-       GCC_Exception.Handled_By_Others := not Excep.Id.Not_Handled_By_Others;
        GCC_Exception.N_Cleanups_To_Trigger := 0;
  
        --  Compute the backtrace for this occurrence if the corresponding
--- 534,550 ----
        GCC_Exception : GNAT_GCC_Exception_Access;
  
     begin
!       pragma Assert (Excep.Private_Data /= System.Null_Address);
  
!       --  Retrieve the Private_Data for this occurrence and set the useful
!       --  flags for the personality routine, which will be called for each
        --  frame via Unwind_RaiseException below.
  
+       GCC_Exception := To_GNAT_GCC_Exception (Excep.Private_Data);
+ 
+       Clear_Setup_And_Not_Propagated (Excep);
+ 
        GCC_Exception.Id := Excep.Id;
        GCC_Exception.N_Cleanups_To_Trigger := 0;
  
        --  Compute the backtrace for this occurrence if the corresponding
*************** package body Exception_Propagation is
*** 459,464 ****
--- 602,664 ----
        Unhandled_Exception_Terminate;
     end Propagate_Exception;
  
+    ---------------------------
+    -- Adjust_N_Cleanups_For --
+    ---------------------------
+ 
+    procedure Adjust_N_Cleanups_For
+      (GNAT_Exception : GNAT_GCC_Exception_Access;
+       Adjustment     : Integer)
+    is
+    begin
+       GNAT_Exception.N_Cleanups_To_Trigger :=
+         GNAT_Exception.N_Cleanups_To_Trigger + Adjustment;
+    end Adjust_N_Cleanups_For;
+ 
+    -------------
+    -- EID_For --
+    -------------
+ 
+    function EID_For
+      (GNAT_Exception : GNAT_GCC_Exception_Access) return Exception_Id
+    is
+    begin
+       return GNAT_Exception.Id;
+    end EID_For;
+ 
+    ---------------------
+    -- Import_Code_For --
+    ---------------------
+ 
+    function Import_Code_For
+      (E : SSL.Exception_Data_Ptr) return Exception_Code
+    is
+    begin
+       return E.all.Import_Code;
+    end Import_Code_For;
+ 
+    --------------------------
+    -- Is_Handled_By_Others --
+    --------------------------
+ 
+    function Is_Handled_By_Others
+      (E : SSL.Exception_Data_Ptr) return Boolean
+    is
+    begin
+       return not E.all.Not_Handled_By_Others;
+    end Is_Handled_By_Others;
+ 
+    ------------------
+    -- Language_For --
+    ------------------
+ 
+    function Language_For
+      (E : SSL.Exception_Data_Ptr) return Character
+    is
+    begin
+       return E.all.Lang;
+    end Language_For;
+ 
     -----------
     -- Notes --
     -----------
*************** package body Exception_Propagation is
*** 485,513 ****
     --  An attempt was made to use the Private_Data pointer for this purpose.
     --  It did not work because:
  
!    --  1/ The Private_Data has to be saved by Save_Occurrence to be usable
     --     as a key in case of a later reraise,
  
!    --  2/ There is no easy way to synchronize End_Handler for an occurrence
     --     and the data attached to potential copies, so these copies may end
     --     up pointing to stale data. Moreover ...
  
!    --  3/ The same address may be reused for different occurrences, which
     --     defeats the idea of using it as a key.
  
     --  The example below illustrates:
  
     --  Saved_CE : Exception_Occurrence;
!    --
     --  begin
     --    raise Constraint_Error;
     --  exception
     --    when CE: others =>
     --      Save_Occurrence (Saved_CE, CE);      <= Saved_CE.PDA = CE.PDA
     --  end;
!    --
     --                                           <= Saved_CE.PDA is stale (!)
!    --
     --  begin
     --    raise Program_Error;                   <= Saved_CE.PDA = PE.PDA (!!)
     --  exception
--- 685,713 ----
     --  An attempt was made to use the Private_Data pointer for this purpose.
     --  It did not work because:
  
!    --  1) The Private_Data has to be saved by Save_Occurrence to be usable
     --     as a key in case of a later reraise,
  
!    --  2) There is no easy way to synchronize End_Handler for an occurrence
     --     and the data attached to potential copies, so these copies may end
     --     up pointing to stale data. Moreover ...
  
!    --  3) The same address may be reused for different occurrences, which
     --     defeats the idea of using it as a key.
  
     --  The example below illustrates:
  
     --  Saved_CE : Exception_Occurrence;
! 
     --  begin
     --    raise Constraint_Error;
     --  exception
     --    when CE: others =>
     --      Save_Occurrence (Saved_CE, CE);      <= Saved_CE.PDA = CE.PDA
     --  end;
! 
     --                                           <= Saved_CE.PDA is stale (!)
! 
     --  begin
     --    raise Program_Error;                   <= Saved_CE.PDA = PE.PDA (!!)
     --  exception
diff -Nrcpad gcc-3.4.3/gcc/ada/a-exextr.adb gcc-4.0.0/gcc/ada/a-exextr.adb
*** gcc-3.4.3/gcc/ada/a-exextr.adb	Wed Dec 17 13:37:03 2003
--- gcc-4.0.0/gcc/ada/a-exextr.adb	Tue Jul 20 10:26:51 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Exception_Traces is
*** 57,64 ****
  
     procedure Last_Chance_Handler
       (Except :  Exception_Occurrence);
!    pragma Import
!      (C, Last_Chance_Handler, "__gnat_last_chance_handler");
     pragma No_Return (Last_Chance_Handler);
     --  Users can replace the default version of this routine,
     --  Ada.Exceptions.Last_Chance_Handler.
--- 57,63 ----
  
     procedure Last_Chance_Handler
       (Except :  Exception_Occurrence);
!    pragma Import (C, Last_Chance_Handler, "__gnat_last_chance_handler");
     pragma No_Return (Last_Chance_Handler);
     --  Users can replace the default version of this routine,
     --  Ada.Exceptions.Last_Chance_Handler.
*************** package body Exception_Traces is
*** 76,86 ****
     --  latter case because Notify_Handled_Exception may be called for an
     --  actually unhandled occurrence in the Front-End-SJLJ case.
  
-    procedure To_Stderr (S : String);
-    pragma Export (Ada, To_Stderr, "__gnat_to_stderr");
-    --  Little routine to output string to stderr that is also used
-    --  in the tasking run time.
- 
     ---------------------------------
     -- Debugger Interface Routines --
     ---------------------------------
--- 75,80 ----
*************** package body Exception_Traces is
*** 185,192 ****
     -- Unhandled_Exception_Terminate --
     -----------------------------------
  
-    type int is new Integer;
- 
     procedure Unhandled_Exception_Terminate is
        Excep : constant EOA := Save_Occurrence (Get_Current_Excep.all.all);
        --  This occurrence will be used to display a message after finalization.
--- 179,184 ----
*************** package body Exception_Traces is
*** 198,219 ****
        Last_Chance_Handler (Excep.all);
     end Unhandled_Exception_Terminate;
  
-    ---------------
-    -- To_Stderr --
-    ---------------
- 
-    procedure To_Stderr (S : String) is
-       procedure put_char_stderr (C : int);
-       pragma Import (C, put_char_stderr, "put_char_stderr");
- 
-    begin
-       for J in 1 .. S'Length loop
-          if S (J) /= ASCII.CR then
-             put_char_stderr (Character'Pos (S (J)));
-          end if;
-       end loop;
-    end To_Stderr;
- 
  
     ------------------------------------
     -- Handling GNAT.Exception_Traces --
--- 190,195 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/a-filico.adb gcc-4.0.0/gcc/ada/a-filico.adb
*** gcc-3.4.3/gcc/ada/a-filico.adb	Tue Oct 21 13:41:53 2003
--- gcc-4.0.0/gcc/ada/a-filico.adb	Wed Oct 27 12:29:19 2004
***************
*** 2,12 ****
  --                                                                          --
  --                         GNAT COMPILER COMPONENTS                         --
  --                                                                          --
! --                S Y S T E M . L I S T _ F I N A L I Z A T I O N           --
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 2,12 ----
  --                                                                          --
  --                         GNAT COMPILER COMPONENTS                         --
  --                                                                          --
! --     A D A . F I N A L I Z A T I O N . L I S T _ C O N T R O L L E R      --
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
diff -Nrcpad gcc-3.4.3/gcc/ada/a-filico.ads gcc-4.0.0/gcc/ada/a-filico.ads
*** gcc-3.4.3/gcc/ada/a-filico.ads	Thu Apr 24 17:53:53 2003
--- gcc-4.0.0/gcc/ada/a-filico.ads	Wed Oct 27 12:29:19 2004
***************
*** 4,12 ****
  --                                                                          --
  --     A D A . F I N A L I Z A T I O N . L I S T _ C O N T R O L L E R      --
  --                                                                          --
! --                                B o d y                                   --
  --                                                                          --
! --          Copyright (C) 1992-1997 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 4,12 ----
  --                                                                          --
  --     A D A . F I N A L I Z A T I O N . L I S T _ C O N T R O L L E R      --
  --                                                                          --
! --                                S p e c                                   --
  --                                                                          --
! --          Copyright (C) 1992-1997, 2004 Free Software Foundation, Inc.    --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
diff -Nrcpad gcc-3.4.3/gcc/ada/a-intnam-aix.ads gcc-4.0.0/gcc/ada/a-intnam-aix.ads
*** gcc-3.4.3/gcc/ada/a-intnam-aix.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-intnam-aix.ads	Fri May 14 10:01:59 2004
***************
*** 0 ****
--- 1,201 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   A D A . I N T E R R U P T S . N A M E S                --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --           Copyright (C) 1991-2002 Free Software Foundation, Inc.         --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a AIX version of this package.
+ --
+ --  The following signals are reserved by the run time (native threads):
+ --
+ --  SIGFPE, SIGILL, SIGSEGV, SIGBUS, SIGABRT, SIGTRAP, SIGINT, SIGTERM,
+ --  SIGSTOP, SIGKILL
+ --
+ --  The following signals are reserved by the run time (FSU threads):
+ --
+ --  SIGFPE, SIGILL, SIGSEGV, SIGBUS, SIGABRT, SIGTRAP, SIGINT, SIGALRM,
+ --  SIGWAITING, SIGSTOP, SIGKILL
+ --
+ --  The pragma Unreserve_All_Interrupts affects the following signal(s):
+ --
+ --  SIGINT: made available for Ada handler
+ 
+ --  This target-dependent package spec contains names of interrupts
+ --  supported by the local system.
+ 
+ with System.OS_Interface;
+ --  used for names of interrupts
+ 
+ package Ada.Interrupts.Names is
+ 
+    --  Beware that the mapping of names to signals may be
+    --  many-to-one.  There may be aliases.  Also, for all
+    --  signal names that are not supported on the current system
+    --  the value of the corresponding constant will be zero.
+ 
+    SIGHUP : constant Interrupt_ID :=
+      System.OS_Interface.SIGHUP;      --  hangup
+ 
+    SIGINT : constant Interrupt_ID :=
+      System.OS_Interface.SIGINT;      --  interrupt (rubout)
+ 
+    SIGQUIT : constant Interrupt_ID :=
+      System.OS_Interface.SIGQUIT;     --  quit (ASCD FS)
+ 
+    SIGILL : constant Interrupt_ID :=
+      System.OS_Interface.SIGILL;      --  illegal instruction (not reset)
+ 
+    SIGTRAP : constant Interrupt_ID :=
+      System.OS_Interface.SIGTRAP;     --  trace trap (not reset)
+ 
+    SIGIOT : constant Interrupt_ID :=
+      System.OS_Interface.SIGIOT;      --  IOT instruction
+ 
+    SIGABRT : constant Interrupt_ID := --  used by abort,
+      System.OS_Interface.SIGABRT;     --  replace SIGIOT in the  future
+ 
+    SIGEMT : constant Interrupt_ID :=
+      System.OS_Interface.SIGEMT;      --  EMT instruction
+ 
+    SIGFPE : constant Interrupt_ID :=
+      System.OS_Interface.SIGFPE;      --  floating point exception
+ 
+    SIGKILL : constant Interrupt_ID :=
+      System.OS_Interface.SIGKILL;     --  kill (cannot be caught or ignored)
+ 
+    SIGBUS : constant Interrupt_ID :=
+      System.OS_Interface.SIGBUS;      --  bus error
+ 
+    SIGSEGV : constant Interrupt_ID :=
+      System.OS_Interface.SIGSEGV;     --  segmentation violation
+ 
+    SIGSYS : constant Interrupt_ID :=
+      System.OS_Interface.SIGSYS;      --  bad argument to system call
+ 
+    SIGPIPE : constant Interrupt_ID := --  write on a pipe with
+      System.OS_Interface.SIGPIPE;     --  no one to read it
+ 
+    SIGALRM : constant Interrupt_ID :=
+      System.OS_Interface.SIGALRM;     --  alarm clock
+ 
+    SIGTERM : constant Interrupt_ID :=
+      System.OS_Interface.SIGTERM;     --  software termination signal from kill
+ 
+    SIGUSR1 : constant Interrupt_ID :=
+      System.OS_Interface.SIGUSR1;     --  user defined signal 1
+ 
+    SIGUSR2 : constant Interrupt_ID :=
+      System.OS_Interface.SIGUSR2;     --  user defined signal 2
+ 
+    SIGCLD : constant Interrupt_ID :=
+      System.OS_Interface.SIGCLD;      --  child status change
+ 
+    SIGCHLD : constant Interrupt_ID :=
+      System.OS_Interface.SIGCHLD;     --  4.3BSD's/POSIX name for SIGCLD
+ 
+    SIGPWR : constant Interrupt_ID :=
+      System.OS_Interface.SIGPWR;        --  power-fail restart
+ 
+    SIGWINCH : constant Interrupt_ID :=
+      System.OS_Interface.SIGWINCH;    --  window size change
+ 
+    SIGURG : constant Interrupt_ID :=
+      System.OS_Interface.SIGURG;      --  urgent condition on IO channel
+ 
+    SIGPOLL : constant Interrupt_ID :=
+      System.OS_Interface.SIGPOLL;     --  pollable event occurred
+ 
+    SIGIO : constant Interrupt_ID :=   --  input/output possible,
+      System.OS_Interface.SIGIO;       --  SIGPOLL alias (Solaris)
+ 
+    SIGSTOP : constant Interrupt_ID :=
+      System.OS_Interface.SIGSTOP;     --  stop (cannot be caught or ignored)
+ 
+    SIGTSTP : constant Interrupt_ID :=
+      System.OS_Interface.SIGTSTP;     --  user stop requested from tty
+ 
+    SIGCONT : constant Interrupt_ID :=
+      System.OS_Interface.SIGCONT;     --  stopped process has been continued
+ 
+    SIGTTIN : constant Interrupt_ID :=
+      System.OS_Interface.SIGTTIN;     --  background tty read attempted
+ 
+    SIGTTOU : constant Interrupt_ID :=
+      System.OS_Interface.SIGTTOU;     --  background tty write attempted
+ 
+    SIGVTALRM : constant Interrupt_ID :=
+      System.OS_Interface.SIGVTALRM;   --  virtual timer expired
+ 
+    SIGPROF : constant Interrupt_ID :=
+      System.OS_Interface.SIGPROF;     --  profiling timer expired
+ 
+    SIGXCPU : constant Interrupt_ID :=
+      System.OS_Interface.SIGXCPU;     --  CPU time limit exceeded
+ 
+    SIGXFSZ : constant Interrupt_ID :=
+      System.OS_Interface.SIGXFSZ;     --  filesize limit exceeded
+ 
+    SIGMSG : constant Interrupt_ID :=
+      System.OS_Interface.SIGMSG;      -- input data is in the ring buffer
+ 
+    SIGDANGER : constant Interrupt_ID :=
+      System.OS_Interface.SIGDANGER;   -- system crash imminent;
+ 
+    SIGMIGRATE : constant Interrupt_ID :=
+      System.OS_Interface.SIGMIGRATE;  -- migrate process
+ 
+    SIGPRE : constant Interrupt_ID :=
+      System.OS_Interface.SIGPRE;      -- programming exception
+ 
+    SIGVIRT : constant Interrupt_ID :=
+      System.OS_Interface.SIGVIRT;     -- AIX virtual time alarm
+ 
+    SIGALRM1 : constant Interrupt_ID :=
+      System.OS_Interface.SIGALRM1;    -- m:n condition variables
+ 
+    SIGWAITING : constant Interrupt_ID :=
+      System.OS_Interface.SIGWAITING;  --  m:n scheduling
+ 
+    SIGKAP : constant Interrupt_ID :=
+      System.OS_Interface.SIGKAP;      -- keep alive poll from native keyboard
+ 
+    SIGGRANT : constant Interrupt_ID :=
+      System.OS_Interface.SIGGRANT;    -- monitor mode granted
+ 
+    SIGRETRACT : constant Interrupt_ID :=
+      System.OS_Interface.SIGRETRACT;  -- monitor mode should be relinguished
+ 
+    SIGSOUND : constant Interrupt_ID :=
+      System.OS_Interface.SIGSOUND;    -- sound control has completed
+ 
+    SIGSAK : constant Interrupt_ID :=
+      System.OS_Interface.SIGSAK;      -- secure attention key
+ 
+ end Ada.Interrupts.Names;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-intnam-darwin.ads gcc-4.0.0/gcc/ada/a-intnam-darwin.ads
*** gcc-3.4.3/gcc/ada/a-intnam-darwin.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-intnam-darwin.ads	Wed Apr 28 09:38:51 2004
***************
*** 0 ****
--- 1,153 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   A D A . I N T E R R U P T S . N A M E S                --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --          Copyright (C) 1991-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the Darwin version of this package.
+ --
+ --  The following signals are reserved by the run time:
+ --
+ --  SIGSTOP, SIGKILL
+ --
+ --  The pragma Unreserve_All_Interrupts affects the following signal(s):
+ --
+ --  SIGINT: made available for Ada handler
+ 
+ --  This target-dependent package spec contains names of interrupts
+ --  supported by the local system.
+ 
+ with System.OS_Interface;
+ --  used for names of interrupts
+ 
+ package Ada.Interrupts.Names is
+ 
+    --  Beware that the mapping of names to signals may be
+    --  many-to-one.  There may be aliases.  Also, for all
+    --  signal names that are not supported on the current system
+    --  the value of the corresponding constant will be zero.
+ 
+    SIGHUP : constant Interrupt_ID :=
+      System.OS_Interface.SIGHUP;      --  hangup
+ 
+    SIGINT : constant Interrupt_ID :=
+      System.OS_Interface.SIGINT;      --  interrupt (rubout)
+ 
+    SIGQUIT : constant Interrupt_ID :=
+      System.OS_Interface.SIGQUIT;     --  quit (ASCD FS)
+ 
+    SIGILL : constant Interrupt_ID :=
+      System.OS_Interface.SIGILL;      --  illegal instruction (not reset)
+ 
+    SIGTRAP : constant Interrupt_ID :=
+      System.OS_Interface.SIGTRAP;     --  trace trap (not reset)
+ 
+    SIGIOT : constant Interrupt_ID :=
+      System.OS_Interface.SIGIOT;      --  IOT instruction
+ 
+    SIGABRT : constant Interrupt_ID := --  used by abort,
+      System.OS_Interface.SIGABRT;     --  replace SIGIOT in the  future
+ 
+    SIGEMT : constant Interrupt_ID :=
+      System.OS_Interface.SIGEMT;      --  EMT instruction
+ 
+    SIGFPE : constant Interrupt_ID :=
+      System.OS_Interface.SIGFPE;      --  floating point exception
+ 
+    SIGKILL : constant Interrupt_ID :=
+      System.OS_Interface.SIGKILL;     --  kill (cannot be caught or ignored)
+ 
+    SIGBUS : constant Interrupt_ID :=
+      System.OS_Interface.SIGBUS;      --  bus error
+ 
+    SIGSEGV : constant Interrupt_ID :=
+      System.OS_Interface.SIGSEGV;     --  segmentation violation
+ 
+    SIGSYS : constant Interrupt_ID :=
+      System.OS_Interface.SIGSYS;      --  bad argument to system call
+ 
+    SIGPIPE : constant Interrupt_ID := --  write on a pipe with
+      System.OS_Interface.SIGPIPE;     --  no one to read it
+ 
+    SIGALRM : constant Interrupt_ID :=
+      System.OS_Interface.SIGALRM;     --  alarm clock
+ 
+    SIGTERM : constant Interrupt_ID :=
+      System.OS_Interface.SIGTERM;     --  software termination signal from kill
+ 
+    SIGURG : constant Interrupt_ID :=
+      System.OS_Interface.SIGURG;      --  urgent condition on IO channel
+ 
+    SIGSTOP : constant Interrupt_ID :=
+      System.OS_Interface.SIGSTOP;     --  stop (cannot be caught or ignored)
+ 
+    SIGTSTP : constant Interrupt_ID :=
+      System.OS_Interface.SIGTSTP;     --  user stop requested from tty
+ 
+    SIGCONT : constant Interrupt_ID :=
+      System.OS_Interface.SIGCONT;     --  stopped process has been continued
+ 
+    SIGCHLD : constant Interrupt_ID :=
+      System.OS_Interface.SIGCHLD;     --  4.3BSD's/POSIX name for SIGCLD
+ 
+    SIGTTIN : constant Interrupt_ID :=
+      System.OS_Interface.SIGTTIN;     --  background tty read attempted
+ 
+    SIGTTOU : constant Interrupt_ID :=
+      System.OS_Interface.SIGTTOU;     --  background tty write attempted
+ 
+    SIGIO : constant Interrupt_ID :=   --  input/output possible,
+      System.OS_Interface.SIGIO;       --  SIGPOLL alias (Solaris)
+ 
+    SIGXCPU : constant Interrupt_ID :=
+      System.OS_Interface.SIGXCPU;     --  CPU time limit exceeded
+ 
+    SIGXFSZ : constant Interrupt_ID :=
+      System.OS_Interface.SIGXFSZ;     --  filesize limit exceeded
+ 
+    SIGVTALRM : constant Interrupt_ID :=
+      System.OS_Interface.SIGVTALRM;   --  virtual timer expired
+ 
+    SIGPROF : constant Interrupt_ID :=
+      System.OS_Interface.SIGPROF;     --  profiling timer expired
+ 
+    SIGWINCH : constant Interrupt_ID :=
+      System.OS_Interface.SIGWINCH;    --  window size change
+ 
+    SIGINFO : constant Interrupt_ID :=
+      System.OS_Interface.SIGINFO;      -- information request
+ 
+    SIGUSR1 : constant Interrupt_ID :=
+      System.OS_Interface.SIGUSR1;     --  user defined signal 1
+ 
+    SIGUSR2 : constant Interrupt_ID :=
+      System.OS_Interface.SIGUSR2;     --  user defined signal 2
+ 
+ end Ada.Interrupts.Names;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-intnam-dummy.ads gcc-4.0.0/gcc/ada/a-intnam-dummy.ads
*** gcc-3.4.3/gcc/ada/a-intnam-dummy.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-intnam-dummy.ads	Fri May 14 10:01:59 2004
***************
*** 0 ****
--- 1,48 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                 GNU ADA RUNTIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   A D A . I N T E R R U P T S . N A M E S                --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                           (No Tasking Version)                           --
+ --                                                                          --
+ --          Copyright (C) 1991-2002 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  The standard implementation of this spec contains only dummy interrupt
+ --  names. These dummy entries permit checking out code for correctness of
+ --  semantics, even if interrupts are not supported.
+ 
+ --  For specific implementations that fully support interrupts, this package
+ --  spec is replaced by an implementation dependent version that defines the
+ --  interrupts available on the system.
+ 
+ package Ada.Interrupts.Names is
+ 
+    DUMMY_INTERRUPT_1 : constant Interrupt_ID := 1;
+    DUMMY_INTERRUPT_2 : constant Interrupt_ID := 2;
+ 
+ end Ada.Interrupts.Names;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-intnam-freebsd.ads gcc-4.0.0/gcc/ada/a-intnam-freebsd.ads
*** gcc-3.4.3/gcc/ada/a-intnam-freebsd.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-intnam-freebsd.ads	Fri May 14 10:01:59 2004
***************
*** 0 ****
--- 1,136 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   A D A . I N T E R R U P T S . N A M E S                --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --          Copyright (C) 1991-2003 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the FreeBSD THREADS version of this package
+ 
+ with System.OS_Interface;
+ --  used for names of interrupts
+ 
+ package Ada.Interrupts.Names is
+ 
+    SIGHUP : constant Interrupt_ID :=
+      System.OS_Interface.SIGHUP;      --  hangup
+ 
+    SIGINT : constant Interrupt_ID :=
+      System.OS_Interface.SIGINT;      --  interrupt (rubout)
+ 
+    SIGQUIT : constant Interrupt_ID :=
+      System.OS_Interface.SIGQUIT;     --  quit (ASCD FS)
+ 
+    SIGILL : constant Interrupt_ID :=
+      System.OS_Interface.SIGILL;      --  illegal instruction (not reset)
+ 
+    SIGTRAP : constant Interrupt_ID :=
+      System.OS_Interface.SIGTRAP;     --  trace trap (not reset)
+ 
+    SIGIOT : constant Interrupt_ID :=
+      System.OS_Interface.SIGIOT;      --  IOT instruction
+ 
+    SIGABRT : constant Interrupt_ID := --  used by abort,
+      System.OS_Interface.SIGABRT;     --  replace SIGIOT in the  future
+ 
+    SIGFPE : constant Interrupt_ID :=
+      System.OS_Interface.SIGFPE;      --  floating point exception
+ 
+    SIGKILL : constant Interrupt_ID :=
+      System.OS_Interface.SIGKILL;     --  kill (cannot be caught or ignored)
+ 
+    SIGBUS : constant Interrupt_ID :=
+      System.OS_Interface.SIGBUS;      --  bus error
+ 
+    SIGSEGV : constant Interrupt_ID :=
+      System.OS_Interface.SIGSEGV;     --  segmentation violation
+ 
+    SIGPIPE : constant Interrupt_ID := --  write on a pipe with
+      System.OS_Interface.SIGPIPE;     --  no one to read it
+ 
+    SIGALRM : constant Interrupt_ID :=
+      System.OS_Interface.SIGALRM;     --  alarm clock
+ 
+    SIGTERM : constant Interrupt_ID :=
+      System.OS_Interface.SIGTERM;     --  software termination signal from kill
+ 
+    SIGURG : constant Interrupt_ID :=
+      System.OS_Interface.SIGURG;      --  urgent condition on IO channel
+ 
+    SIGSTOP : constant Interrupt_ID :=
+      System.OS_Interface.SIGSTOP;     --  stop (cannot be caught or ignored)
+ 
+    SIGTSTP : constant Interrupt_ID :=
+      System.OS_Interface.SIGTSTP;     --  user stop requested from tty
+ 
+    SIGCONT : constant Interrupt_ID :=
+      System.OS_Interface.SIGCONT;     --  stopped process has been continued
+ 
+    SIGCHLD : constant Interrupt_ID :=
+      System.OS_Interface.SIGCHLD;     --  4.3BSD's/POSIX name for SIGCLD
+ 
+    SIGCLD : constant Interrupt_ID :=
+      System.OS_Interface.SIGCLD;      --  child status change
+ 
+    SIGTTIN : constant Interrupt_ID :=
+      System.OS_Interface.SIGTTIN;     --  background tty read attempted
+ 
+    SIGTTOU : constant Interrupt_ID :=
+      System.OS_Interface.SIGTTOU;     --  background tty write attempted
+ 
+    SIGIO : constant Interrupt_ID :=   --  input/output possible,
+      System.OS_Interface.SIGIO;       --  SIGPOLL alias (Solaris)
+ 
+    SIGXCPU : constant Interrupt_ID :=
+      System.OS_Interface.SIGXCPU;     --  CPU time limit exceeded
+ 
+    SIGXFSZ : constant Interrupt_ID :=
+      System.OS_Interface.SIGXFSZ;     --  filesize limit exceeded
+ 
+    SIGVTALRM : constant Interrupt_ID :=
+      System.OS_Interface.SIGVTALRM;   --  virtual timer expired
+ 
+    SIGPROF : constant Interrupt_ID :=
+      System.OS_Interface.SIGPROF;     --  profiling timer expired
+ 
+    SIGWINCH : constant Interrupt_ID :=
+      System.OS_Interface.SIGWINCH;    --  window size change
+ 
+    SIGUSR1 : constant Interrupt_ID :=
+      System.OS_Interface.SIGUSR1;     --  user defined signal 1
+ 
+    SIGUSR2 : constant Interrupt_ID :=
+      System.OS_Interface.SIGUSR2;     --  user defined signal 2
+ 
+    --  Beware that the mapping of names to signals may be
+    --  many-to-one.  There may be aliases.  Also, for all
+    --  signal names that are not supported on the current system
+    --  the value of the corresponding constant will be zero.
+ 
+ end Ada.Interrupts.Names;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-intnam-hpux.ads gcc-4.0.0/gcc/ada/a-intnam-hpux.ads
*** gcc-3.4.3/gcc/ada/a-intnam-hpux.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-intnam-hpux.ads	Fri May 14 10:01:59 2004
***************
*** 0 ****
--- 1,155 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   A D A . I N T E R R U P T S . N A M E S                --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2003, Ada Core Technologies               --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a HP-UX version of this package.
+ 
+ --  The following signals are reserved by the run time:
+ 
+ --  SIGFPE, SIGILL, SIGSEGV, SIGBUS, SIGTRAP, SIGTERM, SIGABRT, SIGINT,
+ --  SIGALRM, SIGSTOP, SIGKILL
+ 
+ --  The pragma Unreserve_All_Interrupts affects the following signal(s):
+ 
+ --  SIGINT: made available for Ada handler
+ 
+ --  This target-dependent package spec contains names of interrupts
+ --  supported by the local system.
+ 
+ with System.OS_Interface;
+ --  used for names of interrupts
+ 
+ package Ada.Interrupts.Names is
+ 
+    --  Beware that the mapping of names to signals may be
+    --  many-to-one.  There may be aliases.  Also, for all
+    --  signal names that are not supported on the current system
+    --  the value of the corresponding constant will be zero.
+ 
+    SIGHUP : constant Interrupt_ID :=
+      System.OS_Interface.SIGHUP;      --  hangup
+ 
+    SIGINT : constant Interrupt_ID :=
+      System.OS_Interface.SIGINT;      --  interrupt (rubout)
+ 
+    SIGQUIT : constant Interrupt_ID :=
+      System.OS_Interface.SIGQUIT;     --  quit (ASCD FS)
+ 
+    SIGILL : constant Interrupt_ID :=
+      System.OS_Interface.SIGILL;      --  illegal instruction (not reset)
+ 
+    SIGTRAP : constant Interrupt_ID :=
+      System.OS_Interface.SIGTRAP;     --  trace trap (not reset)
+ 
+    SIGIOT : constant Interrupt_ID :=
+      System.OS_Interface.SIGIOT;      --  IOT instruction
+ 
+    SIGABRT : constant Interrupt_ID := --  used by abort,
+      System.OS_Interface.SIGABRT;     --  replace SIGIOT in the  future
+ 
+    SIGEMT : constant Interrupt_ID :=
+      System.OS_Interface.SIGEMT;      --  EMT instruction
+ 
+    SIGFPE : constant Interrupt_ID :=
+      System.OS_Interface.SIGFPE;      --  floating point exception
+ 
+    SIGKILL : constant Interrupt_ID :=
+      System.OS_Interface.SIGKILL;     --  kill (cannot be caught or ignored)
+ 
+    SIGBUS : constant Interrupt_ID :=
+      System.OS_Interface.SIGBUS;      --  bus error
+ 
+    SIGSEGV : constant Interrupt_ID :=
+      System.OS_Interface.SIGSEGV;     --  segmentation violation
+ 
+    SIGSYS : constant Interrupt_ID :=
+      System.OS_Interface.SIGSYS;      --  bad argument to system call
+ 
+    SIGPIPE : constant Interrupt_ID := --  write on a pipe with
+      System.OS_Interface.SIGPIPE;     --  no one to read it
+ 
+    SIGALRM : constant Interrupt_ID :=
+      System.OS_Interface.SIGALRM;     --  alarm clock
+ 
+    SIGTERM : constant Interrupt_ID :=
+      System.OS_Interface.SIGTERM;     --  software termination signal from kill
+ 
+    SIGUSR1 : constant Interrupt_ID :=
+      System.OS_Interface.SIGUSR1;     --  user defined signal 1
+ 
+    SIGUSR2 : constant Interrupt_ID :=
+      System.OS_Interface.SIGUSR2;     --  user defined signal 2
+ 
+    SIGCLD : constant Interrupt_ID :=
+      System.OS_Interface.SIGCLD;      --  child status change
+ 
+    SIGCHLD : constant Interrupt_ID :=
+      System.OS_Interface.SIGCHLD;     --  4.3BSD's/POSIX name for SIGCLD
+ 
+    SIGWINCH : constant Interrupt_ID :=
+      System.OS_Interface.SIGWINCH;    --  window size change
+ 
+    SIGURG : constant Interrupt_ID :=
+      System.OS_Interface.SIGURG;      --  urgent condition on IO channel
+ 
+    SIGPOLL : constant Interrupt_ID :=
+      System.OS_Interface.SIGPOLL;     --  pollable event occurred
+ 
+    SIGIO : constant Interrupt_ID :=   --  input/output possible,
+      System.OS_Interface.SIGIO;       --  SIGPOLL alias
+ 
+    SIGSTOP : constant Interrupt_ID :=
+      System.OS_Interface.SIGSTOP;     --  stop (cannot be caught or ignored)
+ 
+    SIGTSTP : constant Interrupt_ID :=
+      System.OS_Interface.SIGTSTP;     --  user stop requested from tty
+ 
+    SIGCONT : constant Interrupt_ID :=
+      System.OS_Interface.SIGCONT;     --  stopped process has been continued
+ 
+    SIGTTIN : constant Interrupt_ID :=
+      System.OS_Interface.SIGTTIN;     --  background tty read attempted
+ 
+    SIGTTOU : constant Interrupt_ID :=
+      System.OS_Interface.SIGTTOU;     --  background tty write attempted
+ 
+    SIGVTALRM : constant Interrupt_ID :=
+      System.OS_Interface.SIGVTALRM;   --  virtual timer expired
+ 
+    SIGPROF : constant Interrupt_ID :=
+      System.OS_Interface.SIGPROF;     --  profiling timer expired
+ 
+    SIGPWR : constant Interrupt_ID :=
+      System.OS_Interface.SIGPWR;      --  power-fail restart
+ 
+ end Ada.Interrupts.Names;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-intnam-interix.ads gcc-4.0.0/gcc/ada/a-intnam-interix.ads
*** gcc-3.4.3/gcc/ada/a-intnam-interix.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-intnam-interix.ads	Fri May 14 10:01:59 2004
***************
*** 0 ****
--- 1,154 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   A D A . I N T E R R U P T S . N A M E S                --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --           Copyright (C) 1991-2002 Free Software Foundation, Inc.         --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a OpenNT (FSU THREAD) version of this package.
+ --
+ --  The following signals are reserved by the run time:
+ --
+ --  SIGFPE, SIGILL, SIGSEGV, SIGBUS, SIGTRAP, SIGABRT, SIGINT,
+ --  SIGALRM, SIGVTALRM, SIGSTOP, SIGKILL
+ --
+ --  The pragma Unreserve_All_Interrupts affects the following signal(s):
+ --
+ --  SIGINT: made available for Ada handlers
+ 
+ --  This target-dependent package spec contains names of interrupts
+ --  supported by the local system.
+ 
+ with System.OS_Interface;
+ --  used for names of interrupts
+ 
+ package Ada.Interrupts.Names is
+ 
+    --  Beware that the mapping of names to signals may be
+    --  many-to-one.  There may be aliases.  Also, for all
+    --  signal names that are not supported on the current system
+    --  the value of the corresponding constant will be zero.
+ 
+    SIGHUP : constant Interrupt_ID :=
+      System.OS_Interface.SIGHUP;      --  hangup
+ 
+    SIGINT : constant Interrupt_ID :=
+      System.OS_Interface.SIGINT;      --  interrupt (rubout)
+ 
+    SIGQUIT : constant Interrupt_ID :=
+      System.OS_Interface.SIGQUIT;     --  quit (ASCD FS)
+ 
+    SIGILL : constant Interrupt_ID :=
+      System.OS_Interface.SIGILL;      --  illegal instruction (not reset)
+ 
+    SIGTRAP : constant Interrupt_ID :=
+      System.OS_Interface.SIGTRAP;     --  trace trap (not reset)
+ 
+    SIGIOT : constant Interrupt_ID :=
+      System.OS_Interface.SIGIOT;      --  IOT instruction
+ 
+    SIGABRT : constant Interrupt_ID := --  used by abort,
+      System.OS_Interface.SIGABRT;     --  replace SIGIOT in the  future
+ 
+    SIGFPE : constant Interrupt_ID :=
+      System.OS_Interface.SIGFPE;      --  floating point exception
+ 
+    SIGKILL : constant Interrupt_ID :=
+      System.OS_Interface.SIGKILL;     --  kill (cannot be caught or ignored)
+ 
+    SIGBUS : constant Interrupt_ID :=
+      System.OS_Interface.SIGBUS;      --  bus error
+ 
+    SIGSEGV : constant Interrupt_ID :=
+      System.OS_Interface.SIGSEGV;     --  segmentation violation
+ 
+    SIGSYS : constant Interrupt_ID :=
+      System.OS_Interface.SIGSYS;      --  bad argument to system call
+ 
+    SIGPIPE : constant Interrupt_ID := --  write on a pipe with
+      System.OS_Interface.SIGPIPE;     --  no one to read it
+ 
+    SIGALRM : constant Interrupt_ID :=
+      System.OS_Interface.SIGALRM;     --  alarm clock
+ 
+    SIGTERM : constant Interrupt_ID :=
+      System.OS_Interface.SIGTERM;     --  software termination signal from kill
+ 
+    SIGUSR1 : constant Interrupt_ID :=
+      System.OS_Interface.SIGUSR1;     --  user defined signal 1
+ 
+    SIGUSR2 : constant Interrupt_ID :=
+      System.OS_Interface.SIGUSR2;     --  user defined signal 2
+ 
+    SIGCLD : constant Interrupt_ID :=
+      System.OS_Interface.SIGCLD;      --  child status change
+ 
+    SIGCHLD : constant Interrupt_ID :=
+      System.OS_Interface.SIGCHLD;     --  4.3BSD's/POSIX name for SIGCLD
+ 
+    SIGWINCH : constant Interrupt_ID :=
+      System.OS_Interface.SIGWINCH;    --  window size change
+ 
+    SIGURG : constant Interrupt_ID :=
+      System.OS_Interface.SIGURG;      --  urgent condition on IO channel
+ 
+    SIGPOLL : constant Interrupt_ID :=
+      System.OS_Interface.SIGPOLL;     --  pollable event occurred
+ 
+    SIGIO : constant Interrupt_ID :=   --  input/output possible,
+      System.OS_Interface.SIGIO;       --  SIGPOLL alias (Solaris)
+ 
+    SIGSTOP : constant Interrupt_ID :=
+      System.OS_Interface.SIGSTOP;     --  stop (cannot be caught or ignored)
+ 
+    SIGTSTP : constant Interrupt_ID :=
+      System.OS_Interface.SIGTSTP;     --  user stop requested from tty
+ 
+    SIGCONT : constant Interrupt_ID :=
+      System.OS_Interface.SIGCONT;     --  stopped process has been continued
+ 
+    SIGTTIN : constant Interrupt_ID :=
+      System.OS_Interface.SIGTTIN;     --  background tty read attempted
+ 
+    SIGTTOU : constant Interrupt_ID :=
+      System.OS_Interface.SIGTTOU;     --  background tty write attempted
+ 
+    SIGVTALRM : constant Interrupt_ID :=
+      System.OS_Interface.SIGVTALRM;   --  virtual timer expired
+ 
+    SIGPROF : constant Interrupt_ID :=
+      System.OS_Interface.SIGPROF;     --  profiling timer expired
+ 
+    SIGXCPU : constant Interrupt_ID :=
+      System.OS_Interface.SIGXCPU;     --  CPU time limit exceeded
+ 
+    SIGXFSZ : constant Interrupt_ID :=
+      System.OS_Interface.SIGXFSZ;     --  filesize limit exceeded
+ 
+ end Ada.Interrupts.Names;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-intnam-irix.ads gcc-4.0.0/gcc/ada/a-intnam-irix.ads
*** gcc-3.4.3/gcc/ada/a-intnam-irix.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-intnam-irix.ads	Fri May 14 10:01:59 2004
***************
*** 0 ****
--- 1,196 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
+ --                                                                          --
+ --                   A D A . I N T E R R U P T S . N A M E S                --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2003, Ada Core Technologies               --
+ --                                                                          --
+ -- GNARL is free software; you can redistribute it  and/or modify it  under --
+ -- terms  of  the  GNU  Library General Public License  as published by the --
+ -- Free Software  Foundation;  either version 2, or (at  your  option)  any --
+ -- later  version.  GNARL is distributed  in the hope that  it will be use- --
+ -- ful, but  WITHOUT ANY WARRANTY;   without even the  implied  warranty of --
+ -- MERCHANTABILITY  or  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Gen- --
+ -- eral Library Public License  for more details.  You should have received --
+ -- a  copy of the GNU Library General Public License along with GNARL;  see --
+ -- file COPYING.LIB.  If not,  write to the  Free Software Foundation,   59 --
+ -- Temple Place - Suite 330, Boston, MA 02111-1307, USA.                    --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the Irix version of this package
+ 
+ --  The following signals are reserved by the run time (Athread library):
+ 
+ --  SIGFPE, SIGILL, SIGSEGV, SIGBUS, SIGTRAP, SIGSTOP, SIGKILL
+ 
+ --  The following signals are reserved by the run time (Pthread library):
+ 
+ --  SIGTSTP, SIGILL, SIGTRAP, SIGEMT, SIGFPE, SIGBUS, SIGSTOP, SIGKILL,
+ --  SIGSEGV, SIGSYS, SIGXCPU, SIGXFSZ, SIGPROF, SIGPTINTR, SIGPTRESCHED,
+ --  SIGABRT, SIGINT
+ 
+ --  The pragma Unreserve_All_Interrupts affects the following signal
+ --  (Pthread library):
+ 
+ --  SIGINT: made available for Ada handler
+ 
+ --  This target-dependent package spec contains names of interrupts
+ --  supported by the local system.
+ 
+ with System.OS_Interface;
+ --  used for names of interrupts
+ 
+ package Ada.Interrupts.Names is
+ 
+    --  Beware that the mapping of names to signals may be
+    --  many-to-one.  There may be aliases.  Also, for all
+    --  signal names that are not supported on the current system
+    --  the value of the corresponding constant will be zero.
+ 
+    SIGHUP : constant Interrupt_ID :=
+      System.OS_Interface.SIGHUP;      --  hangup
+ 
+    SIGINT : constant Interrupt_ID :=
+      System.OS_Interface.SIGINT;      --  interrupt (rubout)
+ 
+    SIGQUIT : constant Interrupt_ID :=
+      System.OS_Interface.SIGQUIT;     --  quit (ASCD FS)
+ 
+    SIGILL : constant Interrupt_ID :=
+      System.OS_Interface.SIGILL;      --  illegal instruction (not reset)
+ 
+    SIGTRAP : constant Interrupt_ID :=
+      System.OS_Interface.SIGTRAP;     --  trace trap (not reset)
+ 
+    SIGIOT : constant Interrupt_ID :=
+      System.OS_Interface.SIGIOT;      --  IOT instruction
+ 
+    SIGABRT : constant Interrupt_ID :=
+      System.OS_Interface.SIGABRT;     --  used by abort, replace SIGIOT in the
+    --                                     future
+ 
+    SIGEMT : constant Interrupt_ID :=
+      System.OS_Interface.SIGEMT;      --  EMT instruction
+ 
+    SIGFPE : constant Interrupt_ID :=
+      System.OS_Interface.SIGFPE;      --  floating point exception
+ 
+    SIGKILL : constant Interrupt_ID :=
+      System.OS_Interface.SIGKILL;     --  kill (cannot be caught or ignored)
+ 
+    SIGBUS : constant Interrupt_ID :=
+      System.OS_Interface.SIGBUS;      --  bus error
+ 
+    SIGSEGV : constant Interrupt_ID :=
+      System.OS_Interface.SIGSEGV;     --  segmentation violation
+ 
+    SIGSYS : constant Interrupt_ID :=
+      System.OS_Interface.SIGSYS;      --  bad argument to system call
+ 
+    SIGPIPE : constant Interrupt_ID :=
+      System.OS_Interface.SIGPIPE;     --  write on pipe with no one to read it
+ 
+    SIGALRM : constant Interrupt_ID :=
+      System.OS_Interface.SIGALRM;     --  alarm clock
+ 
+    SIGTERM : constant Interrupt_ID :=
+      System.OS_Interface.SIGTERM;     --  software termination signal from kill
+ 
+    SIGUSR1 : constant Interrupt_ID :=
+      System.OS_Interface.SIGUSR1;     --  user defined signal 1
+ 
+    SIGUSR2 : constant Interrupt_ID :=
+      System.OS_Interface.SIGUSR2;     --  user defined signal 2
+ 
+    SIGCLD : constant Interrupt_ID :=
+      System.OS_Interface.SIGCLD;      --  alias for SIGCHLD
+ 
+    SIGCHLD : constant Interrupt_ID :=
+      System.OS_Interface.SIGCHLD;     --  child status change
+ 
+    SIGPWR : constant Interrupt_ID :=
+      System.OS_Interface.SIGPWR;      --  power-fail restart
+ 
+    SIGWINCH : constant Interrupt_ID :=
+      System.OS_Interface.SIGWINCH;    --  window size change
+ 
+    SIGURG : constant Interrupt_ID :=
+      System.OS_Interface.SIGURG;      --  urgent condition on IO channel
+ 
+    SIGPOLL : constant Interrupt_ID :=
+      System.OS_Interface.SIGPOLL;     --  pollable event occurred
+ 
+    SIGIO : constant Interrupt_ID :=
+      System.OS_Interface.SIGIO;       --  I/O possible (Solaris SIGPOLL alias)
+ 
+    SIGSTOP : constant Interrupt_ID :=
+      System.OS_Interface.SIGSTOP;     --  stop (cannot be caught or ignored)
+ 
+    SIGTSTP : constant Interrupt_ID :=
+      System.OS_Interface.SIGTSTP;     --  user stop requested from tty
+ 
+    SIGCONT : constant Interrupt_ID :=
+      System.OS_Interface.SIGCONT;     --  stopped process has been continued
+ 
+    SIGTTIN : constant Interrupt_ID :=
+      System.OS_Interface.SIGTTIN;     --  background tty read attempted
+ 
+    SIGTTOU : constant Interrupt_ID :=
+      System.OS_Interface.SIGTTOU;     --  background tty write attempted
+ 
+    SIGVTALRM : constant Interrupt_ID :=
+      System.OS_Interface.SIGVTALRM;   --  virtual timer expired
+ 
+    SIGPROF : constant Interrupt_ID :=
+      System.OS_Interface.SIGPROF;     --  profiling timer expired
+ 
+    SIGXCPU : constant Interrupt_ID :=
+      System.OS_Interface.SIGXCPU;     --  CPU time limit exceeded
+ 
+    SIGXFSZ : constant Interrupt_ID :=
+      System.OS_Interface.SIGXFSZ;     --  filesize limit exceeded
+ 
+    SIGK32 : constant Interrupt_ID :=
+      System.OS_Interface.SIGK32;      --  reserved for kernel (IRIX)
+ 
+    SIGCKPT : constant Interrupt_ID :=
+      System.OS_Interface.SIGCKPT;     --  Checkpoint warning
+ 
+    SIGRESTART : constant Interrupt_ID :=
+      System.OS_Interface.SIGRESTART;  --  Restart warning
+ 
+    SIGUME : constant Interrupt_ID :=
+      System.OS_Interface.SIGUME;      --  Uncorrectable memory error
+ 
+    --  Signals defined for Posix 1003.1c.
+ 
+    SIGPTINTR : constant Interrupt_ID :=
+      System.OS_Interface.SIGPTINTR;    --  Pthread Interrupt Signal
+ 
+    SIGPTRESCHED : constant Interrupt_ID :=
+      System.OS_Interface.SIGPTRESCHED; --  Pthread Rescheduling Signal
+ 
+    --  Posix 1003.1b signals
+ 
+    SIGRTMIN : constant Interrupt_ID :=
+      System.OS_Interface.SIGRTMIN;    --  Posix 1003.1b signals
+ 
+    SIGRTMAX : constant Interrupt_ID :=
+      System.OS_Interface.SIGRTMAX;    --  Posix 1003.1b signals
+ 
+ end Ada.Interrupts.Names;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-intnam-linux.ads gcc-4.0.0/gcc/ada/a-intnam-linux.ads
*** gcc-3.4.3/gcc/ada/a-intnam-linux.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-intnam-linux.ads	Fri May 14 10:01:59 2004
***************
*** 0 ****
--- 1,168 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   A D A . I N T E R R U P T S . N A M E S                --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --           Copyright (C) 1991-2002 Free Software Foundation, Inc.         --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a GNU/Linux version of this package.
+ --
+ --  The following signals are reserved by the run time (FSU threads):
+ --
+ --  SIGFPE, SIGILL, SIGSEGV, SIGBUS, SIGTRAP, SIGABRT, SIGINT,
+ --  SIGALRM, SIGVTALRM, SIGUNUSED, SIGSTOP, SIGKILL
+ --
+ --  The following signals are reserved by the run time (LinuxThreads):
+ --
+ --  SIGFPE, SIGILL, SIGSEGV, SIGBUS, SIGTRAP, SIGABRT, SIGINT,
+ --  SIGUSR1, SIGUSR2, SIGVTALRM, SIGUNUSED, SIGSTOP, SIGKILL
+ --
+ --  The pragma Unreserve_All_Interrupts affects the following signal(s):
+ --
+ --  SIGINT: made available for Ada handler
+ 
+ --  This target-dependent package spec contains names of interrupts
+ --  supported by the local system.
+ 
+ with System.OS_Interface;
+ --  used for names of interrupts
+ 
+ package Ada.Interrupts.Names is
+ 
+    --  Beware that the mapping of names to signals may be
+    --  many-to-one.  There may be aliases.  Also, for all
+    --  signal names that are not supported on the current system
+    --  the value of the corresponding constant will be zero.
+ 
+    SIGHUP : constant Interrupt_ID :=
+      System.OS_Interface.SIGHUP;      --  hangup
+ 
+    SIGINT : constant Interrupt_ID :=
+      System.OS_Interface.SIGINT;      --  interrupt (rubout)
+ 
+    SIGQUIT : constant Interrupt_ID :=
+      System.OS_Interface.SIGQUIT;     --  quit (ASCD FS)
+ 
+    SIGILL : constant Interrupt_ID :=
+      System.OS_Interface.SIGILL;      --  illegal instruction (not reset)
+ 
+    SIGTRAP : constant Interrupt_ID :=
+      System.OS_Interface.SIGTRAP;     --  trace trap (not reset)
+ 
+    SIGIOT : constant Interrupt_ID :=
+      System.OS_Interface.SIGIOT;      --  IOT instruction
+ 
+    SIGABRT : constant Interrupt_ID := --  used by abort,
+      System.OS_Interface.SIGABRT;     --  replace SIGIOT in the  future
+ 
+    SIGFPE : constant Interrupt_ID :=
+      System.OS_Interface.SIGFPE;      --  floating point exception
+ 
+    SIGKILL : constant Interrupt_ID :=
+      System.OS_Interface.SIGKILL;     --  kill (cannot be caught or ignored)
+ 
+    SIGBUS : constant Interrupt_ID :=
+      System.OS_Interface.SIGBUS;      --  bus error
+ 
+    SIGSEGV : constant Interrupt_ID :=
+      System.OS_Interface.SIGSEGV;     --  segmentation violation
+ 
+    SIGPIPE : constant Interrupt_ID := --  write on a pipe with
+      System.OS_Interface.SIGPIPE;     --  no one to read it
+ 
+    SIGALRM : constant Interrupt_ID :=
+      System.OS_Interface.SIGALRM;     --  alarm clock
+ 
+    SIGTERM : constant Interrupt_ID :=
+      System.OS_Interface.SIGTERM;     --  software termination signal from kill
+ 
+    SIGUSR1 : constant Interrupt_ID :=
+      System.OS_Interface.SIGUSR1;     --  user defined signal 1
+ 
+    SIGUSR2 : constant Interrupt_ID :=
+      System.OS_Interface.SIGUSR2;     --  user defined signal 2
+ 
+    SIGCLD : constant Interrupt_ID :=
+      System.OS_Interface.SIGCLD;      --  child status change
+ 
+    SIGCHLD : constant Interrupt_ID :=
+      System.OS_Interface.SIGCHLD;     --  4.3BSD's/POSIX name for SIGCLD
+ 
+    SIGWINCH : constant Interrupt_ID :=
+      System.OS_Interface.SIGWINCH;    --  window size change
+ 
+    SIGURG : constant Interrupt_ID :=
+      System.OS_Interface.SIGURG;      --  urgent condition on IO channel
+ 
+    SIGPOLL : constant Interrupt_ID :=
+      System.OS_Interface.SIGPOLL;     --  pollable event occurred
+ 
+    SIGIO : constant Interrupt_ID :=   --  input/output possible,
+      System.OS_Interface.SIGIO;       --  SIGPOLL alias (Solaris)
+ 
+    SIGSTOP : constant Interrupt_ID :=
+      System.OS_Interface.SIGSTOP;     --  stop (cannot be caught or ignored)
+ 
+    SIGTSTP : constant Interrupt_ID :=
+      System.OS_Interface.SIGTSTP;     --  user stop requested from tty
+ 
+    SIGCONT : constant Interrupt_ID :=
+      System.OS_Interface.SIGCONT;     --  stopped process has been continued
+ 
+    SIGTTIN : constant Interrupt_ID :=
+      System.OS_Interface.SIGTTIN;     --  background tty read attempted
+ 
+    SIGTTOU : constant Interrupt_ID :=
+      System.OS_Interface.SIGTTOU;     --  background tty write attempted
+ 
+    SIGVTALRM : constant Interrupt_ID :=
+      System.OS_Interface.SIGVTALRM;   --  virtual timer expired
+ 
+    SIGPROF : constant Interrupt_ID :=
+      System.OS_Interface.SIGPROF;     --  profiling timer expired
+ 
+    SIGXCPU : constant Interrupt_ID :=
+      System.OS_Interface.SIGXCPU;     --  CPU time limit exceeded
+ 
+    SIGXFSZ : constant Interrupt_ID :=
+      System.OS_Interface.SIGXFSZ;     --  filesize limit exceeded
+ 
+    SIGUNUSED : constant Interrupt_ID :=
+      System.OS_Interface.SIGUNUSED;     --  unused signal
+ 
+    SIGSTKFLT : constant Interrupt_ID :=
+      System.OS_Interface.SIGSTKFLT;     --  stack fault on coprocessor
+ 
+    SIGLOST : constant Interrupt_ID :=
+      System.OS_Interface.SIGLOST;       --  Linux alias for SIGIO
+ 
+    SIGPWR : constant Interrupt_ID :=
+      System.OS_Interface.SIGPWR;        --  Power failure
+ 
+ end Ada.Interrupts.Names;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-intnam-lynxos.ads gcc-4.0.0/gcc/ada/a-intnam-lynxos.ads
*** gcc-3.4.3/gcc/ada/a-intnam-lynxos.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-intnam-lynxos.ads	Fri May 14 10:01:59 2004
***************
*** 0 ****
--- 1,165 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   A D A . I N T E R R U P T S . N A M E S                --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --          Copyright (C) 1991-2002 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a LynxOS version of this package.
+ --
+ --  The following signals are reserved by the run time:
+ --
+ --  SIGFPE, SIGILL, SIGSEGV, SIGBUS, SIGTRAP, SIGABRT, SIGINT,
+ --  SIGWAITING, SIGLWP, SIGTTIN, SIGTTOU, SIGTSTP, SIGPROF, SIGSTOP, SIGKILL
+ --
+ --  The pragma Unreserve_All_Interrupts affects the following signal(s):
+ --
+ --  SIGINT: made available for Ada handler
+ 
+ with System.OS_Interface;
+ --  used for names of interrupts
+ 
+ package Ada.Interrupts.Names is
+ 
+    --  Beware that the mapping of names to signals may be
+    --  many-to-one. There may be aliases.
+ 
+    SIGHUP : constant Interrupt_ID :=
+      System.OS_Interface.SIGHUP;      --  hangup
+ 
+    SIGINT : constant Interrupt_ID :=
+      System.OS_Interface.SIGINT;      --  interrupt (rubout)
+ 
+    SIGQUIT : constant Interrupt_ID :=
+      System.OS_Interface.SIGQUIT;     --  quit (ASCD FS)
+ 
+    SIGILL : constant Interrupt_ID :=
+      System.OS_Interface.SIGILL;      --  illegal instruction (not reset)
+ 
+    SIGTRAP : constant Interrupt_ID :=
+      System.OS_Interface.SIGTRAP;     --  trace trap (not reset)
+ 
+    SIGBRK : constant Interrupt_ID :=
+      System.OS_Interface.SIGBRK;      --  break
+ 
+    SIGIOT : constant Interrupt_ID :=
+      System.OS_Interface.SIGIOT;      --  IOT instruction
+ 
+    SIGABRT : constant Interrupt_ID := --  used by abort,
+      System.OS_Interface.SIGABRT;     --  replace SIGIOT in the  future
+ 
+    SIGCORE : constant Interrupt_ID :=
+      System.OS_Interface.SIGCORE;     --  kill with core dump
+ 
+    SIGEMT : constant Interrupt_ID :=
+      System.OS_Interface.SIGEMT;      --  EMT instruction
+ 
+    SIGFPE : constant Interrupt_ID :=
+      System.OS_Interface.SIGFPE;      --  floating point exception
+ 
+    SIGKILL : constant Interrupt_ID :=
+      System.OS_Interface.SIGKILL;     --  kill (cannot be caught or ignored)
+ 
+    SIGBUS : constant Interrupt_ID :=
+      System.OS_Interface.SIGBUS;      --  bus error
+ 
+    SIGSEGV : constant Interrupt_ID :=
+      System.OS_Interface.SIGSEGV;     --  segmentation violation
+ 
+    SIGSYS : constant Interrupt_ID :=
+      System.OS_Interface.SIGSYS;      --  bad argument to system call
+ 
+    SIGPIPE : constant Interrupt_ID := --  write on a pipe with
+      System.OS_Interface.SIGPIPE;     --  no one to read it
+ 
+    SIGALRM : constant Interrupt_ID :=
+      System.OS_Interface.SIGALRM;     --  alarm clock
+ 
+    SIGTERM : constant Interrupt_ID :=
+      System.OS_Interface.SIGTERM;     --  software termination signal from kill
+ 
+    SIGURG : constant Interrupt_ID :=
+      System.OS_Interface.SIGURG;      --  urgent condition on IO channel
+ 
+    SIGSTOP : constant Interrupt_ID :=
+      System.OS_Interface.SIGSTOP;     --  stop (cannot be caught or ignored)
+ 
+    SIGTSTP : constant Interrupt_ID :=
+      System.OS_Interface.SIGTSTP;     --  user stop requested from tty
+ 
+    SIGCONT : constant Interrupt_ID :=
+      System.OS_Interface.SIGCONT;     --  stopped process has been continued
+ 
+    SIGCLD : constant Interrupt_ID :=
+      System.OS_Interface.SIGCLD;      --  child status change
+ 
+    SIGCHLD : constant Interrupt_ID :=
+      System.OS_Interface.SIGCHLD;     --  4.3BSD's/POSIX name for SIGCLD
+ 
+    SIGTTIN : constant Interrupt_ID :=
+      System.OS_Interface.SIGTTIN;     --  background tty read attempted
+ 
+    SIGTTOU : constant Interrupt_ID :=
+      System.OS_Interface.SIGTTOU;     --  background tty write attempted
+ 
+    SIGPOLL : constant Interrupt_ID :=
+      System.OS_Interface.SIGPOLL;     --  pollable event occurred
+ 
+    SIGIO : constant Interrupt_ID :=   --  input/output possible,
+      System.OS_Interface.SIGIO;       --  SIGPOLL alias (Solaris)
+ 
+    SIGXCPU : constant Interrupt_ID :=
+      System.OS_Interface.SIGXCPU;     --  CPU time limit exceeded
+ 
+    SIGXFSZ : constant Interrupt_ID :=
+      System.OS_Interface.SIGXFSZ;     --  filesize limit exceeded
+ 
+    SIGVTALRM : constant Interrupt_ID :=
+      System.OS_Interface.SIGVTALRM;   --  virtual timer expired
+ 
+    SIGPROF : constant Interrupt_ID :=
+      System.OS_Interface.SIGPROF;     --  profiling timer expired
+ 
+    SIGWINCH : constant Interrupt_ID :=
+      System.OS_Interface.SIGWINCH;    --  window size change
+ 
+    SIGLOST : constant Interrupt_ID :=
+      System.OS_Interface.SIGLOST;     --  SUN 4.1 compatibility
+ 
+    SIGUSR1 : constant Interrupt_ID :=
+      System.OS_Interface.SIGUSR1;     --  user defined signal 1
+ 
+    SIGUSR2 : constant Interrupt_ID :=
+      System.OS_Interface.SIGUSR2;     --  user defined signal 2
+ 
+    SIGPRIO : constant Interrupt_ID :=
+      System.OS_Interface.SIGPRIO;
+    --  sent to a process with its priority
+    --  or group is changed
+ end Ada.Interrupts.Names;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-intnam-mingw.ads gcc-4.0.0/gcc/ada/a-intnam-mingw.ads
*** gcc-3.4.3/gcc/ada/a-intnam-mingw.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-intnam-mingw.ads	Fri May 14 10:01:59 2004
***************
*** 0 ****
--- 1,67 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   A D A . I N T E R R U P T S . N A M E S                --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --          Copyright (C) 1997-2002 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a NT (native) version of this package.
+ 
+ --  This target-dependent package spec contains names of interrupts
+ --  supported by the local system.
+ 
+ with System.OS_Interface;
+ --  used for names of interrupts
+ 
+ package Ada.Interrupts.Names is
+ 
+    --  Beware that the mapping of names to signals may be
+    --  many-to-one.  There may be aliases.  Also, for all
+    --  signal names that are not supported on the current system
+    --  the value of the corresponding constant will be zero.
+ 
+    SIGINT : constant Interrupt_ID :=
+      System.OS_Interface.SIGINT;      --  interrupt (rubout)
+ 
+    SIGILL : constant Interrupt_ID :=
+      System.OS_Interface.SIGILL;      --  illegal instruction (not reset)
+ 
+    SIGABRT : constant Interrupt_ID := --  used by abort,
+      System.OS_Interface.SIGABRT;     --  replace SIGIOT in the  future
+ 
+    SIGFPE : constant Interrupt_ID :=
+      System.OS_Interface.SIGFPE;      --  floating point exception
+ 
+    SIGSEGV : constant Interrupt_ID :=
+      System.OS_Interface.SIGSEGV;     --  segmentation violation
+ 
+    SIGTERM : constant Interrupt_ID :=
+      System.OS_Interface.SIGTERM;     --  software termination signal from kill
+ 
+ end Ada.Interrupts.Names;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-intnam-os2.ads gcc-4.0.0/gcc/ada/a-intnam-os2.ads
*** gcc-3.4.3/gcc/ada/a-intnam-os2.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-intnam-os2.ads	Fri May 14 10:01:59 2004
***************
*** 0 ****
--- 1,43 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
+ --                                                                          --
+ --                   A D A . I N T E R R U P T S . N A M E S                --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2003, Ada Core Technologies               --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is an OS/2 version of this package.
+ 
+ --  This target-dependent package spec contains names of interrupts
+ --  supported by the local system.
+ 
+ --  This is a stub, for systems that do not support interrupts (or signals)
+ 
+ package Ada.Interrupts.Names is
+ end Ada.Interrupts.Names;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-intnam-rtems.ads gcc-4.0.0/gcc/ada/a-intnam-rtems.ads
*** gcc-3.4.3/gcc/ada/a-intnam-rtems.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-intnam-rtems.ads	Thu Jan 27 20:18:26 2005
***************
*** 0 ****
--- 1,116 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   A D A . I N T E R R U P T S . N A M E S                --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --             Copyright (C) 1991-2002 Free Software Foundation, Inc.       --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ -- The GNARL files that were developed for RTEMS are maintained by  On-Line --
+ -- Applications Research Corporation (http://www.oarcorp.com)  in  coopera- --
+ -- tion with Ada Core Technologies Inc. and Florida State University.       --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a RTEMS version of this package
+ --
+ --  The following signals are reserved by the run time:
+ --
+ --  SIGFPE, SIGILL, SIGSEGV, SIGBUS, SIGTRAP, SIGABRT, SIGINT,
+ --  SIGALRM, SIGEMT, SIGKILL
+ --
+ --  The pragma Unreserve_All_Interrupts affects the following signal(s):
+ --
+ --  SIGINT: made available for Ada handlers
+ 
+ --  This target-dependent package spec contains names of interrupts
+ --  supported by the local system.
+ 
+ with System.OS_Interface;
+ --  used for names of interrupts
+ 
+ package Ada.Interrupts.Names is
+ 
+    --  Beware that the mapping of names to signals may be
+    --  many-to-one.  There may be aliases.  Also, for all
+    --  signal names that are not supported on the current system
+    --  the value of the corresponding constant will be zero.
+ 
+    SIGHUP : constant Interrupt_ID :=
+      System.OS_Interface.SIGHUP;      --  hangup
+ 
+    SIGINT : constant Interrupt_ID :=
+      System.OS_Interface.SIGINT;      --  interrupt (rubout)
+ 
+    SIGQUIT : constant Interrupt_ID :=
+      System.OS_Interface.SIGQUIT;     --  quit (ASCD FS)
+ 
+    SIGILL : constant Interrupt_ID :=
+      System.OS_Interface.SIGILL;      --  illegal instruction (not reset)
+ 
+    SIGTRAP : constant Interrupt_ID :=
+      System.OS_Interface.SIGTRAP;     --  trace trap (not reset)
+ 
+    SIGIOT : constant Interrupt_ID :=
+      System.OS_Interface.SIGIOT;      --  IOT instruction
+ 
+    SIGABRT : constant Interrupt_ID := --  used by abort,
+      System.OS_Interface.SIGABRT;     --  replace SIGIOT in the  future
+ 
+    SIGEMT : constant Interrupt_ID :=
+      System.OS_Interface.SIGEMT;      --  EMT instruction
+ 
+    SIGFPE : constant Interrupt_ID :=
+      System.OS_Interface.SIGFPE;      --  floating point exception
+ 
+    SIGKILL : constant Interrupt_ID :=
+      System.OS_Interface.SIGKILL;     --  kill (cannot be caught or ignored)
+ 
+    SIGBUS : constant Interrupt_ID :=
+      System.OS_Interface.SIGBUS;      --  bus error
+ 
+    SIGSEGV : constant Interrupt_ID :=
+      System.OS_Interface.SIGSEGV;     --  segmentation violation
+ 
+    SIGSYS : constant Interrupt_ID :=
+      System.OS_Interface.SIGSYS;      --  bad argument to system call
+ 
+    SIGPIPE : constant Interrupt_ID := --  write on a pipe with
+      System.OS_Interface.SIGPIPE;     --  no one to read it
+ 
+    SIGALRM : constant Interrupt_ID :=
+      System.OS_Interface.SIGALRM;     --  alarm clock
+ 
+    SIGTERM : constant Interrupt_ID :=
+      System.OS_Interface.SIGTERM;     --  software termination signal from kill
+ 
+    SIGUSR1 : constant Interrupt_ID :=
+      System.OS_Interface.SIGUSR1;     --  user defined signal 1
+ 
+    SIGUSR2 : constant Interrupt_ID :=
+      System.OS_Interface.SIGUSR2;     --  user defined signal 2
+ 
+ end Ada.Interrupts.Names;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-intnam-solaris.ads gcc-4.0.0/gcc/ada/a-intnam-solaris.ads
*** gcc-3.4.3/gcc/ada/a-intnam-solaris.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-intnam-solaris.ads	Fri May 14 10:01:59 2004
***************
*** 0 ****
--- 1,179 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   A D A . I N T E R R U P T S . N A M E S                --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --             Copyright (C) 1991-2002 Free Software Foundation, Inc.       --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a Solaris version of this package.
+ --
+ --  The following signals are reserved by the run time (native threads):
+ --
+ --  SIGFPE, SIGILL, SIGSEGV, SIGBUS, SIGTRAP, SIGABRT, SIGINT,
+ --  SIGLWP, SIGWAITING, SIGCANCEL, SIGSTOP, SIGKILL
+ --
+ --  The following signals are reserved by the run time (FSU threads):
+ --
+ --  SIGFPE, SIGILL, SIGSEGV, SIGBUS, SIGTRAP, SIGTERM, SIGABRT, SIGINT,
+ --  SIGLWP, SIGALRM, SIGVTALRM, SIGAITING, SIGSTOP, SIGKILL
+ --
+ --  The pragma Unreserve_All_Interrupts affects the following signal(s):
+ --
+ --  SIGINT: made available for Ada handlers
+ 
+ with System.OS_Interface;
+ --  used for names of interrupts
+ 
+ package Ada.Interrupts.Names is
+ 
+    --  Beware that the mapping of names to signals may be
+    --  many-to-one.  There may be aliases.  Also, for all
+    --  signal names that are not supported on the current system
+    --  the value of the corresponding constant will be zero.
+ 
+    SIGHUP : constant Interrupt_ID :=
+      System.OS_Interface.SIGHUP;      --  hangup
+ 
+    SIGINT : constant Interrupt_ID :=
+      System.OS_Interface.SIGINT;      --  interrupt (rubout)
+ 
+    SIGQUIT : constant Interrupt_ID :=
+      System.OS_Interface.SIGQUIT;     --  quit (ASCD FS)
+ 
+    SIGILL : constant Interrupt_ID :=
+      System.OS_Interface.SIGILL;      --  illegal instruction (not reset)
+ 
+    SIGTRAP : constant Interrupt_ID :=
+      System.OS_Interface.SIGTRAP;     --  trace trap (not reset)
+ 
+    SIGIOT : constant Interrupt_ID :=
+      System.OS_Interface.SIGIOT;      --  IOT instruction
+ 
+    SIGABRT : constant Interrupt_ID := --  used by abort,
+      System.OS_Interface.SIGABRT;     --  replace SIGIOT in the  future
+ 
+    SIGEMT : constant Interrupt_ID :=
+      System.OS_Interface.SIGEMT;      --  EMT instruction
+ 
+    SIGFPE : constant Interrupt_ID :=
+      System.OS_Interface.SIGFPE;      --  floating point exception
+ 
+    SIGKILL : constant Interrupt_ID :=
+      System.OS_Interface.SIGKILL;     --  kill (cannot be caught or ignored)
+ 
+    SIGBUS : constant Interrupt_ID :=
+      System.OS_Interface.SIGBUS;      --  bus error
+ 
+    SIGSEGV : constant Interrupt_ID :=
+      System.OS_Interface.SIGSEGV;     --  segmentation violation
+ 
+    SIGSYS : constant Interrupt_ID :=
+      System.OS_Interface.SIGSYS;      --  bad argument to system call
+ 
+    SIGPIPE : constant Interrupt_ID := --  write on a pipe with
+      System.OS_Interface.SIGPIPE;     --  no one to read it
+ 
+    SIGALRM : constant Interrupt_ID :=
+      System.OS_Interface.SIGALRM;     --  alarm clock
+ 
+    SIGTERM : constant Interrupt_ID :=
+      System.OS_Interface.SIGTERM;     --  software termination signal from kill
+ 
+    SIGUSR1 : constant Interrupt_ID :=
+      System.OS_Interface.SIGUSR1;     --  user defined signal 1
+ 
+    SIGUSR2 : constant Interrupt_ID :=
+      System.OS_Interface.SIGUSR2;     --  user defined signal 2
+ 
+    SIGCLD : constant Interrupt_ID :=
+      System.OS_Interface.SIGCLD;      --  child status change
+ 
+    SIGCHLD : constant Interrupt_ID :=
+      System.OS_Interface.SIGCHLD;     --  4.3BSD's/POSIX name for SIGCLD
+ 
+    SIGWINCH : constant Interrupt_ID :=
+      System.OS_Interface.SIGWINCH;    --  window size change
+ 
+    SIGURG : constant Interrupt_ID :=
+      System.OS_Interface.SIGURG;      --  urgent condition on IO channel
+ 
+    SIGPOLL : constant Interrupt_ID :=
+      System.OS_Interface.SIGPOLL;     --  pollable event occurred
+ 
+    SIGIO : constant Interrupt_ID :=   --  input/output possible,
+      System.OS_Interface.SIGIO;       --  SIGPOLL alias (Solaris)
+ 
+    SIGSTOP : constant Interrupt_ID :=
+      System.OS_Interface.SIGSTOP;     --  stop (cannot be caught or ignored)
+ 
+    SIGTSTP : constant Interrupt_ID :=
+      System.OS_Interface.SIGTSTP;     --  user stop requested from tty
+ 
+    SIGCONT : constant Interrupt_ID :=
+      System.OS_Interface.SIGCONT;     --  stopped process has been continued
+ 
+    SIGTTIN : constant Interrupt_ID :=
+      System.OS_Interface.SIGTTIN;     --  background tty read attempted
+ 
+    SIGTTOU : constant Interrupt_ID :=
+      System.OS_Interface.SIGTTOU;     --  background tty write attempted
+ 
+    SIGVTALRM : constant Interrupt_ID :=
+      System.OS_Interface.SIGVTALRM;   --  virtual timer expired
+ 
+    SIGPROF : constant Interrupt_ID :=
+      System.OS_Interface.SIGPROF;     --  profiling timer expired
+ 
+    SIGXCPU : constant Interrupt_ID :=
+      System.OS_Interface.SIGXCPU;     --  CPU time limit exceeded
+ 
+    SIGXFSZ : constant Interrupt_ID :=
+      System.OS_Interface.SIGXFSZ;     --  filesize limit exceeded
+ 
+    SIGPWR : constant Interrupt_ID :=
+      System.OS_Interface.SIGPWR;      --  power-fail restart
+ 
+    SIGWAITING : constant Interrupt_ID :=
+      System.OS_Interface.SIGWAITING;  --  process's lwps blocked (Solaris)
+ 
+    SIGLWP : constant Interrupt_ID :=
+      System.OS_Interface.SIGLWP;      --  used by thread library (Solaris)
+ 
+    SIGFREEZE : constant Interrupt_ID :=
+      System.OS_Interface.SIGFREEZE;   --  used by CPR (Solaris)
+ 
+ --  what is CPR????
+ 
+    SIGTHAW : constant Interrupt_ID :=
+      System.OS_Interface.SIGTHAW;     --  used by CPR (Solaris)
+ 
+    SIGCANCEL : constant Interrupt_ID :=
+      System.OS_Interface.SIGCANCEL;     --  used for thread cancel (Solaris)
+ 
+ end Ada.Interrupts.Names;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-intnam-tru64.ads gcc-4.0.0/gcc/ada/a-intnam-tru64.ads
*** gcc-3.4.3/gcc/ada/a-intnam-tru64.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-intnam-tru64.ads	Fri May 14 10:01:59 2004
***************
*** 0 ****
--- 1,151 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   A D A . I N T E R R U P T S . N A M E S                --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --          Copyright (C) 1991-2002 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the DEC Unix 4.0 version of this package.
+ --
+ --  The following signals are reserved by the run time:
+ --
+ --  SIGFPE, SIGILL, SIGSEGV, SIGBUS, SIGABRT, SIGTRAP, SIGINT, SIGALRM,
+ --  SIGSTOP, SIGKILL
+ --
+ --  The pragma Unreserve_All_Interrupts affects the following signal(s):
+ --
+ --  SIGINT: made available for Ada handler
+ 
+ with System.OS_Interface;
+ --  used for names of interrupts
+ 
+ package Ada.Interrupts.Names is
+ 
+    --  Beware that the mapping of names to signals may be
+    --  many-to-one.  There may be aliases.  Also, for all
+    --  signal names that are not supported on the current system
+    --  the value of the corresponding constant will be zero.
+ 
+    SIGHUP : constant Interrupt_ID :=
+      System.OS_Interface.SIGHUP;      --  hangup
+ 
+    SIGINT : constant Interrupt_ID :=
+      System.OS_Interface.SIGINT;      --  interrupt (rubout)
+ 
+    SIGQUIT : constant Interrupt_ID :=
+      System.OS_Interface.SIGQUIT;     --  quit (ASCD FS)
+ 
+    SIGILL : constant Interrupt_ID :=
+      System.OS_Interface.SIGILL;      --  illegal instruction (not reset)
+ 
+    SIGTRAP : constant Interrupt_ID :=
+      System.OS_Interface.SIGTRAP;     --  trace trap (not reset)
+ 
+    SIGIOT : constant Interrupt_ID :=
+      System.OS_Interface.SIGIOT;      --  IOT instruction
+ 
+    SIGABRT : constant Interrupt_ID := --  used by abort,
+      System.OS_Interface.SIGABRT;     --  replace SIGIOT in the  future
+ 
+    SIGEMT : constant Interrupt_ID :=
+      System.OS_Interface.SIGEMT;      --  EMT instruction
+ 
+    SIGFPE : constant Interrupt_ID :=
+      System.OS_Interface.SIGFPE;      --  floating point exception
+ 
+    SIGKILL : constant Interrupt_ID :=
+      System.OS_Interface.SIGKILL;     --  kill (cannot be caught or ignored)
+ 
+    SIGBUS : constant Interrupt_ID :=
+      System.OS_Interface.SIGBUS;      --  bus error
+ 
+    SIGSEGV : constant Interrupt_ID :=
+      System.OS_Interface.SIGSEGV;     --  segmentation violation
+ 
+    SIGSYS : constant Interrupt_ID :=
+      System.OS_Interface.SIGSYS;      --  bad argument to system call
+ 
+    SIGPIPE : constant Interrupt_ID := --  write on a pipe with
+      System.OS_Interface.SIGPIPE;     --  no one to read it
+ 
+    SIGALRM : constant Interrupt_ID :=
+      System.OS_Interface.SIGALRM;     --  alarm clock
+ 
+    SIGTERM : constant Interrupt_ID :=
+      System.OS_Interface.SIGTERM;     --  software termination signal from kill
+ 
+    SIGUSR1 : constant Interrupt_ID :=
+      System.OS_Interface.SIGUSR1;     --  user defined signal 1
+ 
+    SIGUSR2 : constant Interrupt_ID :=
+      System.OS_Interface.SIGUSR2;     --  user defined signal 2
+ 
+    SIGCHLD : constant Interrupt_ID :=
+      System.OS_Interface.SIGCHLD;     --  4.3BSD's/POSIX name for SIGCLD
+ 
+    SIGWINCH : constant Interrupt_ID :=
+      System.OS_Interface.SIGWINCH;    --  window size change
+ 
+    SIGURG : constant Interrupt_ID :=
+      System.OS_Interface.SIGURG;      --  urgent condition on IO channel
+ 
+    SIGPOLL : constant Interrupt_ID :=
+      System.OS_Interface.SIGPOLL;     --  pollable event occurred
+ 
+    SIGIO : constant Interrupt_ID :=   --  input/output possible,
+      System.OS_Interface.SIGIO;       --  SIGPOLL alias (Solaris)
+ 
+    SIGSTOP : constant Interrupt_ID :=
+      System.OS_Interface.SIGSTOP;     --  stop (cannot be caught or ignored)
+ 
+    SIGTSTP : constant Interrupt_ID :=
+      System.OS_Interface.SIGTSTP;     --  user stop requested from tty
+ 
+    SIGCONT : constant Interrupt_ID :=
+      System.OS_Interface.SIGCONT;     --  stopped process has been continued
+ 
+    SIGTTIN : constant Interrupt_ID :=
+      System.OS_Interface.SIGTTIN;     --  background tty read attempted
+ 
+    SIGTTOU : constant Interrupt_ID :=
+      System.OS_Interface.SIGTTOU;     --  background tty write attempted
+ 
+    SIGVTALRM : constant Interrupt_ID :=
+      System.OS_Interface.SIGVTALRM;   --  virtual timer expired
+ 
+    SIGPROF : constant Interrupt_ID :=
+      System.OS_Interface.SIGPROF;     --  profiling timer expired
+ 
+    SIGXCPU : constant Interrupt_ID :=
+      System.OS_Interface.SIGXCPU;     --  CPU time limit exceeded
+ 
+    SIGXFSZ : constant Interrupt_ID :=
+      System.OS_Interface.SIGXFSZ;     --  filesize limit exceeded
+ 
+ end Ada.Interrupts.Names;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-intnam-unixware.ads gcc-4.0.0/gcc/ada/a-intnam-unixware.ads
*** gcc-3.4.3/gcc/ada/a-intnam-unixware.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-intnam-unixware.ads	Fri May 14 10:01:59 2004
***************
*** 0 ****
--- 1,164 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   A D A . I N T E R R U P T S . N A M E S                --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --          Copyright (C) 1991-2002 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a SCO UnixWare version of this package.
+ --
+ --  The following signals are reserved by the run time:
+ --
+ --  SIGFPE, SIGILL, SIGSEGV, SIGBUS, SIGTRAP, SIGABRT, SIGINT,
+ --  SIGWAITING, SIGLWP, SIGTTIN, SIGTTOU, SIGTSTP, SIGPROF, SIGSTOP, SIGKILL
+ --
+ --  The pragma Unreserve_All_Interrupts affects the following signal(s):
+ --
+ --  SIGINT: made available for Ada handler
+ 
+ with System.OS_Interface;
+ --  used for names of interrupts
+ 
+ package Ada.Interrupts.Names is
+ 
+    --  Beware that the mapping of names to signals may be
+    --  many-to-one. There may be aliases.
+ 
+    SIGHUP : constant Interrupt_ID :=
+      System.OS_Interface.SIGHUP;      --  hangup
+ 
+    SIGINT : constant Interrupt_ID :=
+      System.OS_Interface.SIGINT;      --  interrupt (rubout)
+ 
+    SIGQUIT : constant Interrupt_ID :=
+      System.OS_Interface.SIGQUIT;     --  quit (ASCD FS)
+ 
+    SIGILL : constant Interrupt_ID :=
+      System.OS_Interface.SIGILL;      --  illegal instruction (not reset)
+ 
+    SIGTRAP : constant Interrupt_ID :=
+      System.OS_Interface.SIGTRAP;     --  trace trap (not reset)
+ 
+    SIGIOT : constant Interrupt_ID :=
+      System.OS_Interface.SIGIOT;      --  IOT instruction
+ 
+    SIGABRT : constant Interrupt_ID := --  used by abort,
+      System.OS_Interface.SIGABRT;     --  replace SIGIOT in the  future
+ 
+    SIGEMT : constant Interrupt_ID :=
+      System.OS_Interface.SIGEMT;      --  EMT instruction
+ 
+    SIGFPE : constant Interrupt_ID :=
+      System.OS_Interface.SIGFPE;      --  floating point exception
+ 
+    SIGKILL : constant Interrupt_ID :=
+      System.OS_Interface.SIGKILL;     --  kill (cannot be caught or ignored)
+ 
+    SIGBUS : constant Interrupt_ID :=
+      System.OS_Interface.SIGBUS;      --  bus error
+ 
+    SIGSEGV : constant Interrupt_ID :=
+      System.OS_Interface.SIGSEGV;     --  segmentation violation
+ 
+    SIGSYS : constant Interrupt_ID :=
+      System.OS_Interface.SIGSYS;      --  bad argument to system call
+ 
+    SIGPIPE : constant Interrupt_ID := --  write on a pipe with
+      System.OS_Interface.SIGPIPE;     --  no one to read it
+ 
+    SIGALRM : constant Interrupt_ID :=
+      System.OS_Interface.SIGALRM;     --  alarm clock
+ 
+    SIGTERM : constant Interrupt_ID :=
+      System.OS_Interface.SIGTERM;     --  software termination signal from kill
+ 
+    SIGUSR1 : constant Interrupt_ID :=
+      System.OS_Interface.SIGUSR1;     --  user defined signal 1
+ 
+    SIGUSR2 : constant Interrupt_ID :=
+      System.OS_Interface.SIGUSR2;     --  user defined signal 2
+ 
+    SIGCLD : constant Interrupt_ID :=
+      System.OS_Interface.SIGCLD;      --  child status change
+ 
+    SIGCHLD : constant Interrupt_ID :=
+      System.OS_Interface.SIGCHLD;     --  4.3BSD's/POSIX name for SIGCLD
+ 
+    SIGPWR : constant Interrupt_ID :=
+      System.OS_Interface.SIGPWR;      --  power-fail restart
+ 
+    SIGWINCH : constant Interrupt_ID :=
+      System.OS_Interface.SIGWINCH;    --  window size change
+ 
+    SIGURG : constant Interrupt_ID :=
+      System.OS_Interface.SIGURG;      --  urgent condition on IO channel
+ 
+    SIGPOLL : constant Interrupt_ID :=
+      System.OS_Interface.SIGPOLL;     --  pollable event occurred
+ 
+    SIGIO : constant Interrupt_ID :=   --  input/output possible,
+      System.OS_Interface.SIGIO;       --  SIGPOLL alias (Solaris)
+ 
+    SIGSTOP : constant Interrupt_ID :=
+      System.OS_Interface.SIGSTOP;     --  stop (cannot be caught or ignored)
+ 
+    SIGTSTP : constant Interrupt_ID :=
+      System.OS_Interface.SIGTSTP;     --  user stop requested from tty
+ 
+    SIGCONT : constant Interrupt_ID :=
+      System.OS_Interface.SIGCONT;     --  stopped process has been continued
+ 
+    SIGTTIN : constant Interrupt_ID :=
+      System.OS_Interface.SIGTTIN;     --  background tty read attempted
+ 
+    SIGTTOU : constant Interrupt_ID :=
+      System.OS_Interface.SIGTTOU;     --  background tty write attempted
+ 
+    SIGVTALRM : constant Interrupt_ID :=
+      System.OS_Interface.SIGVTALRM;   --  virtual timer expired
+ 
+    SIGPROF : constant Interrupt_ID :=
+      System.OS_Interface.SIGPROF;     --  profiling timer expired
+ 
+    SIGXCPU : constant Interrupt_ID :=
+      System.OS_Interface.SIGXCPU;     --  CPU time limit exceeded
+ 
+    SIGXFSZ : constant Interrupt_ID :=
+      System.OS_Interface.SIGXFSZ;     --  filesize limit exceeded
+ 
+    SIGWAITING : constant Interrupt_ID :=
+      System.OS_Interface.SIGWAITING;  --  process's lwps blocked (Solaris)
+ 
+    SIGLWP : constant Interrupt_ID :=
+      System.OS_Interface.SIGLWP;      --  used by thread library (Solaris)
+ 
+    SIGAIO : constant Interrupt_ID :=
+      System.OS_Interface.SIGAIO;      --  Asynchronous I/O signal
+ 
+ end Ada.Interrupts.Names;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-intnam-vms.ads gcc-4.0.0/gcc/ada/a-intnam-vms.ads
*** gcc-3.4.3/gcc/ada/a-intnam-vms.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-intnam-vms.ads	Fri May 14 10:01:59 2004
***************
*** 0 ****
--- 1,77 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   A D A . I N T E R R U P T S . N A M E S                --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --          Copyright (C) 1991-2002 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a OpenVMS/Alpha version of this package.
+ --
+ --  This target-dependent package spec contains names of interrupts
+ --  supported by the local system.
+ 
+ with System.OS_Interface;
+ package Ada.Interrupts.Names is
+ 
+    package OS renames System.OS_Interface;
+ 
+    Interrupt_ID_0   : constant Interrupt_ID := OS.Interrupt_ID_0;
+    Interrupt_ID_1   : constant Interrupt_ID := OS.Interrupt_ID_1;
+    Interrupt_ID_2   : constant Interrupt_ID := OS.Interrupt_ID_2;
+    Interrupt_ID_3   : constant Interrupt_ID := OS.Interrupt_ID_3;
+    Interrupt_ID_4   : constant Interrupt_ID := OS.Interrupt_ID_4;
+    Interrupt_ID_5   : constant Interrupt_ID := OS.Interrupt_ID_5;
+    Interrupt_ID_6   : constant Interrupt_ID := OS.Interrupt_ID_6;
+    Interrupt_ID_7   : constant Interrupt_ID := OS.Interrupt_ID_7;
+    Interrupt_ID_8   : constant Interrupt_ID := OS.Interrupt_ID_8;
+    Interrupt_ID_9   : constant Interrupt_ID := OS.Interrupt_ID_9;
+    Interrupt_ID_10  : constant Interrupt_ID := OS.Interrupt_ID_10;
+    Interrupt_ID_11  : constant Interrupt_ID := OS.Interrupt_ID_11;
+    Interrupt_ID_12  : constant Interrupt_ID := OS.Interrupt_ID_12;
+    Interrupt_ID_13  : constant Interrupt_ID := OS.Interrupt_ID_13;
+    Interrupt_ID_14  : constant Interrupt_ID := OS.Interrupt_ID_14;
+    Interrupt_ID_15  : constant Interrupt_ID := OS.Interrupt_ID_15;
+    Interrupt_ID_16  : constant Interrupt_ID := OS.Interrupt_ID_16;
+    Interrupt_ID_17  : constant Interrupt_ID := OS.Interrupt_ID_17;
+    Interrupt_ID_18  : constant Interrupt_ID := OS.Interrupt_ID_18;
+    Interrupt_ID_19  : constant Interrupt_ID := OS.Interrupt_ID_19;
+    Interrupt_ID_20  : constant Interrupt_ID := OS.Interrupt_ID_20;
+    Interrupt_ID_21  : constant Interrupt_ID := OS.Interrupt_ID_21;
+    Interrupt_ID_22  : constant Interrupt_ID := OS.Interrupt_ID_22;
+    Interrupt_ID_23  : constant Interrupt_ID := OS.Interrupt_ID_23;
+    Interrupt_ID_24  : constant Interrupt_ID := OS.Interrupt_ID_24;
+    Interrupt_ID_25  : constant Interrupt_ID := OS.Interrupt_ID_25;
+    Interrupt_ID_26  : constant Interrupt_ID := OS.Interrupt_ID_26;
+    Interrupt_ID_27  : constant Interrupt_ID := OS.Interrupt_ID_27;
+    Interrupt_ID_28  : constant Interrupt_ID := OS.Interrupt_ID_28;
+    Interrupt_ID_29  : constant Interrupt_ID := OS.Interrupt_ID_29;
+    Interrupt_ID_30  : constant Interrupt_ID := OS.Interrupt_ID_30;
+    Interrupt_ID_31  : constant Interrupt_ID := OS.Interrupt_ID_31;
+ 
+ end Ada.Interrupts.Names;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-intnam-vxworks.ads gcc-4.0.0/gcc/ada/a-intnam-vxworks.ads
*** gcc-3.4.3/gcc/ada/a-intnam-vxworks.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-intnam-vxworks.ads	Fri May 14 10:01:59 2004
***************
*** 0 ****
--- 1,44 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
+ --                                                                          --
+ --                   A D A . I N T E R R U P T S . N A M E S                --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --           Copyright (C) 1998-2001 Free Software Foundation, Inc.         --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the VxWorks version of this package.
+ 
+ with System.OS_Interface;
+ 
+ package Ada.Interrupts.Names is
+ 
+    subtype Hardware_Interrupts is Interrupt_ID
+      range Interrupt_ID'First .. System.OS_Interface.Max_HW_Interrupt;
+    --  Range of values that can be used for hardware interrupts.
+ 
+ end Ada.Interrupts.Names;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-intsig.adb gcc-4.0.0/gcc/ada/a-intsig.adb
*** gcc-3.4.3/gcc/ada/a-intsig.adb	Tue Oct 21 13:41:53 2003
--- gcc-4.0.0/gcc/ada/a-intsig.adb	Tue Jul  6 13:57:30 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --           Copyright (C) 2000-2003 Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --           Copyright (C) 2000-2004 Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 34,42 ****
  with System.Interrupt_Management.Operations;
  package body Ada.Interrupts.Signal is
  
!    -------------------------
!    --  Generate_Interrupt --
!    -------------------------
  
     procedure Generate_Interrupt (Interrupt : Interrupt_ID) is
     begin
--- 34,42 ----
  with System.Interrupt_Management.Operations;
  package body Ada.Interrupts.Signal is
  
!    ------------------------
!    -- Generate_Interrupt --
!    ------------------------
  
     procedure Generate_Interrupt (Interrupt : Interrupt_ID) is
     begin
diff -Nrcpad gcc-3.4.3/gcc/ada/a-lfztio.ads gcc-4.0.0/gcc/ada/a-lfztio.ads
*** gcc-3.4.3/gcc/ada/a-lfztio.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-lfztio.ads	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,19 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --     A D A . L O N G _ F L O A T _ W I D E _ W I D E _ T E X T _ I O      --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ -- This specification is adapted from the Ada Reference Manual for use with --
+ -- GNAT.  In accordance with the copyright of that document, you can freely --
+ -- copy and modify this specification,  provided that if you redistribute a --
+ -- modified version,  any changes that you have made are clearly indicated. --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Wide_Wide_Text_IO;
+ 
+ package Ada.Long_Float_Wide_Wide_Text_IO is
+   new Ada.Wide_Wide_Text_IO.Float_IO (Long_Float);
diff -Nrcpad gcc-3.4.3/gcc/ada/a-liztio.ads gcc-4.0.0/gcc/ada/a-liztio.ads
*** gcc-3.4.3/gcc/ada/a-liztio.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-liztio.ads	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,19 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --   A D A . L O N G _ I N T E G E R _ W I D E _ W I D E _ T E X T _ I O    --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ -- This specification is adapted from the Ada Reference Manual for use with --
+ -- GNAT.  In accordance with the copyright of that document, you can freely --
+ -- copy and modify this specification,  provided that if you redistribute a --
+ -- modified version,  any changes that you have made are clearly indicated. --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Wide_Wide_Text_IO;
+ 
+ package Ada.Long_Integer_Wide_Wide_Text_IO is
+   new Ada.Wide_Wide_Text_IO.Integer_IO (Long_Integer);
diff -Nrcpad gcc-3.4.3/gcc/ada/a-llfzti.ads gcc-4.0.0/gcc/ada/a-llfzti.ads
*** gcc-3.4.3/gcc/ada/a-llfzti.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-llfzti.ads	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,19 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --A D A . L O N G _ L O N G _ F L O A T _ W I D E _ W I D E _ T E X T _ I O --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ -- This specification is adapted from the Ada Reference Manual for use with --
+ -- GNAT.  In accordance with the copyright of that document, you can freely --
+ -- copy and modify this specification,  provided that if you redistribute a --
+ -- modified version,  any changes that you have made are clearly indicated. --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Wide_Wide_Text_IO;
+ 
+ package Ada.Long_Long_Float_Wide_Wide_Text_IO is
+   new Ada.Wide_Wide_Text_IO.Float_IO (Long_Long_Float);
diff -Nrcpad gcc-3.4.3/gcc/ada/a-llizti.ads gcc-4.0.0/gcc/ada/a-llizti.ads
*** gcc-3.4.3/gcc/ada/a-llizti.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-llizti.ads	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,19 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --   A D A . L O N G _ L O N G _ I N T E G E R _ W I D E _ T E X T _ I O    --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ -- This specification is adapted from the Ada Reference Manual for use with --
+ -- GNAT.  In accordance with the copyright of that document, you can freely --
+ -- copy and modify this specification,  provided that if you redistribute a --
+ -- modified version,  any changes that you have made are clearly indicated. --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Wide_Wide_Text_IO;
+ 
+ package Ada.Long_Long_Integer_Wide_Wide_Text_IO is
+   new Ada.Wide_Wide_Text_IO.Integer_IO (Long_Long_Integer);
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ngcoty.adb gcc-4.0.0/gcc/ada/a-ngcoty.adb
*** gcc-3.4.3/gcc/ada/a-ngcoty.adb	Tue Oct 21 13:41:53 2003
--- gcc-4.0.0/gcc/ada/a-ngcoty.adb	Mon Mar 15 14:50:55 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Ada.Numerics.Generic_Comple
*** 566,579 ****
           --  we can use an explicit comparison to determine whether to use
           --  the scaling expression.
  
           if Re2 > R'Last then
              raise Constraint_Error;
           end if;
  
        exception
           when Constraint_Error =>
!             return abs (X.Re)
!               * R (Sqrt (Double (R (1.0) + (X.Im / X.Re) ** 2)));
        end;
  
        begin
--- 566,583 ----
           --  we can use an explicit comparison to determine whether to use
           --  the scaling expression.
  
+          --  The scaling expression is computed in double format throughout
+          --  in order to prevent inaccuracies on machines where not all
+          --  immediate expressions are rounded, such as PowerPC.
+ 
           if Re2 > R'Last then
              raise Constraint_Error;
           end if;
  
        exception
           when Constraint_Error =>
!             return R (Double (abs (X.Re))
!               * Sqrt (1.0 + (Double (X.Im) / Double (X.Re)) ** 2));
        end;
  
        begin
*************** package body Ada.Numerics.Generic_Comple
*** 585,592 ****
  
        exception
           when Constraint_Error =>
!             return abs (X.Im)
!               * R (Sqrt (Double (R (1.0) + (X.Re / X.Im) ** 2)));
        end;
  
        --  Now deal with cases of underflow. If only one of the squares
--- 589,596 ----
  
        exception
           when Constraint_Error =>
!             return R (Double (abs (X.Im))
!               * Sqrt (1.0 + (Double (X.Re) / Double (X.Im)) ** 2));
        end;
  
        --  Now deal with cases of underflow. If only one of the squares
*************** package body Ada.Numerics.Generic_Comple
*** 606,617 ****
              else
                 if abs (X.Re) > abs (X.Im) then
                    return
!                     abs (X.Re)
!                       * R (Sqrt (Double (R (1.0) + (X.Im / X.Re) ** 2)));
                 else
                    return
!                     abs (X.Im)
!                       * R (Sqrt (Double (R (1.0) + (X.Re / X.Im) ** 2)));
                 end if;
              end if;
  
--- 610,621 ----
              else
                 if abs (X.Re) > abs (X.Im) then
                    return
!                     R (Double (abs (X.Re))
!                       * Sqrt (1.0 + (Double (X.Im) / Double (X.Re)) ** 2));
                 else
                    return
!                     R (Double (abs (X.Im))
!                       * Sqrt (1.0 + (Double (X.Re) / Double (X.Im)) ** 2));
                 end if;
              end if;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ngelfu.adb gcc-4.0.0/gcc/ada/a-ngelfu.adb
*** gcc-3.4.3/gcc/ada/a-ngelfu.adb	Tue Oct 21 13:41:53 2003
--- gcc-4.0.0/gcc/ada/a-ngelfu.adb	Fri Jun 25 16:39:24 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Ada.Numerics.Generic_Elemen
*** 992,1007 ****
     ----------
  
     function Tanh (X : Float_Type'Base) return Float_Type'Base is
!       P0 : constant Float_Type'Base := -0.16134_11902E4;
!       P1 : constant Float_Type'Base := -0.99225_92967E2;
!       P2 : constant Float_Type'Base := -0.96437_49299E0;
  
!       Q0 : constant Float_Type'Base :=  0.48402_35707E4;
!       Q1 : constant Float_Type'Base :=  0.22337_72071E4;
!       Q2 : constant Float_Type'Base :=  0.11274_47438E3;
!       Q3 : constant Float_Type'Base :=  0.10000000000E1;
  
!       Half_Ln3 : constant Float_Type'Base := 0.54930_61443;
  
        P, Q, R : Float_Type'Base;
        Y : constant Float_Type'Base := abs X;
--- 992,1007 ----
     ----------
  
     function Tanh (X : Float_Type'Base) return Float_Type'Base is
!       P0 : constant Float_Type'Base := -0.16134_11902_39962_28053E+4;
!       P1 : constant Float_Type'Base := -0.99225_92967_22360_83313E+2;
!       P2 : constant Float_Type'Base := -0.96437_49277_72254_69787E+0;
  
!       Q0 : constant Float_Type'Base :=  0.48402_35707_19886_88686E+4;
!       Q1 : constant Float_Type'Base :=  0.22337_72071_89623_12926E+4;
!       Q2 : constant Float_Type'Base :=  0.11274_47438_05349_49335E+3;
!       Q3 : constant Float_Type'Base :=  0.10000_00000_00000_00000E+1;
  
!       Half_Ln3 : constant Float_Type'Base := 0.54930_61443_34054_84570;
  
        P, Q, R : Float_Type'Base;
        Y : constant Float_Type'Base := abs X;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-numaux-darwin.adb gcc-4.0.0/gcc/ada/a-numaux-darwin.adb
*** gcc-3.4.3/gcc/ada/a-numaux-darwin.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-numaux-darwin.adb	Mon Jan  3 15:34:18 2005
***************
*** 0 ****
--- 1,186 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --                     A D A . N U M E R I C S . A U X                      --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                          (Apple OS X Version)                            --
+ --                                                                          --
+ --          Copyright (C) 1998-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  File a-numaux.adb <- a-numaux-darwin.adb
+ 
+ package body Ada.Numerics.Aux is
+ 
+    -----------------------
+    -- Local subprograms --
+    -----------------------
+ 
+    procedure Reduce (X : in out Double; Q : out Natural);
+    --  Implements reduction of X by Pi/2. Q is the quadrant of the final
+    --  result in the range 0 .. 3. The absolute value of X is at most Pi/4.
+ 
+    --  The following three functions implement Chebishev approximations
+    --  of the trigoniometric functions in their reduced domain.
+    --  These approximations have been computed using Maple.
+ 
+    function Sine_Approx (X : Double) return Double;
+    function Cosine_Approx (X : Double) return Double;
+ 
+    pragma Inline (Reduce);
+    pragma Inline (Sine_Approx);
+    pragma Inline (Cosine_Approx);
+ 
+    function Cosine_Approx (X : Double) return Double is
+       XX : constant Double := X * X;
+    begin
+       return (((((16#8.DC57FBD05F640#E-08 * XX
+               - 16#4.9F7D00BF25D80#E-06) * XX
+               + 16#1.A019F7FDEFCC2#E-04) * XX
+               - 16#5.B05B058F18B20#E-03) * XX
+               + 16#A.AAAAAAAA73FA8#E-02) * XX
+               - 16#7.FFFFFFFFFFDE4#E-01) * XX
+               - 16#3.655E64869ECCE#E-14 + 1.0;
+    end Cosine_Approx;
+ 
+    function Sine_Approx (X : Double) return Double is
+       XX : constant Double := X * X;
+    begin
+       return (((((16#A.EA2D4ABE41808#E-09 * XX
+               - 16#6.B974C10F9D078#E-07) * XX
+               + 16#2.E3BC673425B0E#E-05) * XX
+               - 16#D.00D00CCA7AF00#E-04) * XX
+               + 16#2.222222221B190#E-02) * XX
+               - 16#2.AAAAAAAAAAA44#E-01) * (XX * X) + X;
+    end Sine_Approx;
+ 
+    ------------
+    -- Reduce --
+    ------------
+ 
+    procedure Reduce (X : in out Double; Q : out Natural) is
+       Half_Pi     : constant := Pi / 2.0;
+       Two_Over_Pi : constant := 2.0 / Pi;
+ 
+       HM : constant := Integer'Min (Double'Machine_Mantissa / 2, Natural'Size);
+       M  : constant Double := 0.5 + 2.0**(1 - HM); -- Splitting constant
+       P1 : constant Double := Double'Leading_Part (Half_Pi, HM);
+       P2 : constant Double := Double'Leading_Part (Half_Pi - P1, HM);
+       P3 : constant Double := Double'Leading_Part (Half_Pi - P1 - P2, HM);
+       P4 : constant Double := Double'Leading_Part (Half_Pi - P1 - P2 - P3, HM);
+       P5 : constant Double := Double'Leading_Part (Half_Pi - P1 - P2 - P3
+                                                                  - P4, HM);
+       P6 : constant Double := Double'Model (Half_Pi - P1 - P2 - P3 - P4 - P5);
+       K  : Double := X * Two_Over_Pi;
+    begin
+       --  For X < 2.0**HM, all products below are computed exactly.
+       --  Due to cancellation effects all subtractions are exact as well.
+       --  As no double extended floating-point number has more than 75
+       --  zeros after the binary point, the result will be the correctly
+       --  rounded result of X - K * (Pi / 2.0).
+ 
+       while abs K >= 2.0**HM loop
+          K := K * M - (K * M - K);
+          X := (((((X - K * P1) - K * P2) - K * P3)
+                      - K * P4) - K * P5) - K * P6;
+          K := X * Two_Over_Pi;
+       end loop;
+ 
+       if K /= K then
+ 
+          --  K is not a number, because X was not finite
+ 
+          raise Constraint_Error;
+       end if;
+ 
+       K := Double'Rounding (K);
+       Q := Integer (K) mod 4;
+       X := (((((X - K * P1) - K * P2) - K * P3)
+                   - K * P4) - K * P5) - K * P6;
+    end Reduce;
+ 
+    ---------
+    -- Cos --
+    ---------
+ 
+    function Cos (X : Double) return Double is
+       Reduced_X : Double := abs X;
+       Quadrant  : Natural range 0 .. 3;
+ 
+    begin
+       if Reduced_X > Pi / 4.0 then
+          Reduce (Reduced_X, Quadrant);
+ 
+          case Quadrant is
+             when 0 =>
+                return Cosine_Approx (Reduced_X);
+ 
+             when 1 =>
+                return Sine_Approx (-Reduced_X);
+ 
+             when 2 =>
+                return -Cosine_Approx (Reduced_X);
+ 
+             when 3 =>
+                return Sine_Approx (Reduced_X);
+          end case;
+       end if;
+ 
+       return Cosine_Approx (Reduced_X);
+    end Cos;
+ 
+    ---------
+    -- Sin --
+    ---------
+ 
+    function Sin (X : Double) return Double is
+       Reduced_X : Double := X;
+       Quadrant  : Natural range 0 .. 3;
+ 
+    begin
+       if abs X > Pi / 4.0 then
+          Reduce (Reduced_X, Quadrant);
+ 
+          case Quadrant is
+             when 0 =>
+                return Sine_Approx (Reduced_X);
+ 
+             when 1 =>
+                return Cosine_Approx (Reduced_X);
+ 
+             when 2 =>
+                return Sine_Approx (-Reduced_X);
+ 
+             when 3 =>
+                return -Cosine_Approx (Reduced_X);
+          end case;
+       end if;
+ 
+       return Sine_Approx (Reduced_X);
+    end Sin;
+ 
+ end Ada.Numerics.Aux;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-numaux-darwin.ads gcc-4.0.0/gcc/ada/a-numaux-darwin.ads
*** gcc-3.4.3/gcc/ada/a-numaux-darwin.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-numaux-darwin.ads	Mon Jan  3 15:34:18 2005
***************
*** 0 ****
--- 1,109 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --                     A D A . N U M E R I C S . A U X                      --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                          (Apple OS X Version)                            --
+ --                                                                          --
+ --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This version is for use with normal Unix math functions, except for
+ --  sine/cosine which have been implemented directly in Ada to get
+ --  the required accuracy in OS X.  Alternative packages are used
+ --  on OpenVMS (different import names), VxWorks (no need for the
+ --  -lm Linker_Options), and on the x86 (where we have two
+ --  versions one using inline ASM, and one importing from the C long
+ --  routines that take 80-bit arguments).
+ 
+ package Ada.Numerics.Aux is
+ pragma Pure (Aux);
+ 
+    pragma Linker_Options ("-lm");
+ 
+    type Double is digits 15;
+    --  Type Double is the type used to call the C routines
+ 
+    --  The following functions have been implemented in Ada, since
+    --  the OS X math library didn't meet accuracy requirements for
+    --  argument reduction. The implementation here has been tailored
+    --  to match Ada strict mode Numerics requirements while maintaining
+    --  maximum efficiency.
+    function Sin (X : Double) return Double;
+    pragma Inline (Sin);
+ 
+    function Cos (X : Double) return Double;
+    pragma Inline (Cos);
+ 
+    --  We import these functions directly from C. Note that we label them
+    --  all as pure functions, because indeed all of them are in fact pure!
+ 
+    function Tan (X : Double) return Double;
+    pragma Import (C, Tan, "tan");
+    pragma Pure_Function (Tan);
+ 
+    function Exp (X : Double) return Double;
+    pragma Import (C, Exp, "exp");
+    pragma Pure_Function (Exp);
+ 
+    function Sqrt (X : Double) return Double;
+    pragma Import (C, Sqrt, "sqrt");
+    pragma Pure_Function (Sqrt);
+ 
+    function Log (X : Double) return Double;
+    pragma Import (C, Log, "log");
+    pragma Pure_Function (Log);
+ 
+    function Acos (X : Double) return Double;
+    pragma Import (C, Acos, "acos");
+    pragma Pure_Function (Acos);
+ 
+    function Asin (X : Double) return Double;
+    pragma Import (C, Asin, "asin");
+    pragma Pure_Function (Asin);
+ 
+    function Atan (X : Double) return Double;
+    pragma Import (C, Atan, "atan");
+    pragma Pure_Function (Atan);
+ 
+    function Sinh (X : Double) return Double;
+    pragma Import (C, Sinh, "sinh");
+    pragma Pure_Function (Sinh);
+ 
+    function Cosh (X : Double) return Double;
+    pragma Import (C, Cosh, "cosh");
+    pragma Pure_Function (Cosh);
+ 
+    function Tanh (X : Double) return Double;
+    pragma Import (C, Tanh, "tanh");
+    pragma Pure_Function (Tanh);
+ 
+    function Pow (X, Y : Double) return Double;
+    pragma Import (C, Pow, "pow");
+    pragma Pure_Function (Pow);
+ 
+ end Ada.Numerics.Aux;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-numaux-libc-x86.ads gcc-4.0.0/gcc/ada/a-numaux-libc-x86.ads
*** gcc-3.4.3/gcc/ada/a-numaux-libc-x86.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-numaux-libc-x86.ads	Fri May 14 10:01:59 2004
***************
*** 0 ****
--- 1,108 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --                     A D A . N U M E R I C S . A U X                      --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                       (C Library Version for x86)                        --
+ --                                                                          --
+ --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package provides the basic computational interface for the generic
+ --  elementary functions. The C library version interfaces with the routines
+ --  in the C mathematical library, and is thus quite portable, although it may
+ --  not necessarily meet the requirements for accuracy in the numerics annex.
+ --  One advantage of using this package is that it will interface directly to
+ --  hardware instructions, such as the those provided on the Intel x86.
+ 
+ --  Note: there are two versions of this package. One using the 80-bit x86
+ --  long double format (which is this version), and one using 64-bit IEEE
+ --  double (see file a-numaux.ads).
+ 
+ package Ada.Numerics.Aux is
+ pragma Pure (Aux);
+ 
+    pragma Linker_Options ("-lm");
+ 
+    type Double is digits 18;
+ 
+    --  We import these functions directly from C. Note that we label them
+    --  all as pure functions, because indeed all of them are in fact pure!
+ 
+    function Sin (X : Double) return Double;
+    pragma Import (C, Sin, "sinl");
+    pragma Pure_Function (Sin);
+ 
+    function Cos (X : Double) return Double;
+    pragma Import (C, Cos, "cosl");
+    pragma Pure_Function (Cos);
+ 
+    function Tan (X : Double) return Double;
+    pragma Import (C, Tan, "tanl");
+    pragma Pure_Function (Tan);
+ 
+    function Exp (X : Double) return Double;
+    pragma Import (C, Exp, "expl");
+    pragma Pure_Function (Exp);
+ 
+    function Sqrt (X : Double) return Double;
+    pragma Import (C, Sqrt, "sqrtl");
+    pragma Pure_Function (Sqrt);
+ 
+    function Log (X : Double) return Double;
+    pragma Import (C, Log, "logl");
+    pragma Pure_Function (Log);
+ 
+    function Acos (X : Double) return Double;
+    pragma Import (C, Acos, "acosl");
+    pragma Pure_Function (Acos);
+ 
+    function Asin (X : Double) return Double;
+    pragma Import (C, Asin, "asinl");
+    pragma Pure_Function (Asin);
+ 
+    function Atan (X : Double) return Double;
+    pragma Import (C, Atan, "atanl");
+    pragma Pure_Function (Atan);
+ 
+    function Sinh (X : Double) return Double;
+    pragma Import (C, Sinh, "sinhl");
+    pragma Pure_Function (Sinh);
+ 
+    function Cosh (X : Double) return Double;
+    pragma Import (C, Cosh, "coshl");
+    pragma Pure_Function (Cosh);
+ 
+    function Tanh (X : Double) return Double;
+    pragma Import (C, Tanh, "tanhl");
+    pragma Pure_Function (Tanh);
+ 
+    function Pow (X, Y : Double) return Double;
+    pragma Import (C, Pow, "powl");
+    pragma Pure_Function (Pow);
+ 
+ end Ada.Numerics.Aux;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-numaux-vxworks.ads gcc-4.0.0/gcc/ada/a-numaux-vxworks.ads
*** gcc-3.4.3/gcc/ada/a-numaux-vxworks.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-numaux-vxworks.ads	Fri May 14 10:01:59 2004
***************
*** 0 ****
--- 1,110 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --                     A D A . N U M E R I C S . A U X                      --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                       (C Library Version, VxWorks)                       --
+ --                                                                          --
+ --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package provides the basic computational interface for the generic
+ --  elementary functions. The C library version interfaces with the routines
+ --  in the C mathematical library, and is thus quite portable, although it may
+ --  not necessarily meet the requirements for accuracy in the numerics annex.
+ --  One advantage of using this package is that it will interface directly to
+ --  hardware instructions, such as the those provided on the Intel x86.
+ 
+ --  Note: there are two versions of this package. One using the normal IEEE
+ --  64-bit double format (which is this version), and one using 80-bit x86
+ --  long double (see file 4onumaux.ads).
+ 
+ package Ada.Numerics.Aux is
+ pragma Pure (Aux);
+ 
+    --  This version omits the pragma linker_options ("-lm") since there is
+    --  no libm.a library for VxWorks.
+ 
+    type Double is digits 15;
+    --  Type Double is the type used to call the C routines
+ 
+    --  We import these functions directly from C. Note that we label them
+    --  all as pure functions, because indeed all of them are in fact pure!
+ 
+    function Sin (X : Double) return Double;
+    pragma Import (C, Sin, "sin");
+    pragma Pure_Function (Sin);
+ 
+    function Cos (X : Double) return Double;
+    pragma Import (C, Cos, "cos");
+    pragma Pure_Function (Cos);
+ 
+    function Tan (X : Double) return Double;
+    pragma Import (C, Tan, "tan");
+    pragma Pure_Function (Tan);
+ 
+    function Exp (X : Double) return Double;
+    pragma Import (C, Exp, "exp");
+    pragma Pure_Function (Exp);
+ 
+    function Sqrt (X : Double) return Double;
+    pragma Import (C, Sqrt, "sqrt");
+    pragma Pure_Function (Sqrt);
+ 
+    function Log (X : Double) return Double;
+    pragma Import (C, Log, "log");
+    pragma Pure_Function (Log);
+ 
+    function Acos (X : Double) return Double;
+    pragma Import (C, Acos, "acos");
+    pragma Pure_Function (Acos);
+ 
+    function Asin (X : Double) return Double;
+    pragma Import (C, Asin, "asin");
+    pragma Pure_Function (Asin);
+ 
+    function Atan (X : Double) return Double;
+    pragma Import (C, Atan, "atan");
+    pragma Pure_Function (Atan);
+ 
+    function Sinh (X : Double) return Double;
+    pragma Import (C, Sinh, "sinh");
+    pragma Pure_Function (Sinh);
+ 
+    function Cosh (X : Double) return Double;
+    pragma Import (C, Cosh, "cosh");
+    pragma Pure_Function (Cosh);
+ 
+    function Tanh (X : Double) return Double;
+    pragma Import (C, Tanh, "tanh");
+    pragma Pure_Function (Tanh);
+ 
+    function Pow (X, Y : Double) return Double;
+    pragma Import (C, Pow, "pow");
+    pragma Pure_Function (Pow);
+ 
+ end Ada.Numerics.Aux;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-numaux-x86.adb gcc-4.0.0/gcc/ada/a-numaux-x86.adb
*** gcc-3.4.3/gcc/ada/a-numaux-x86.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-numaux-x86.adb	Mon Nov  8 14:03:44 2004
***************
*** 0 ****
--- 1,572 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --                     A D A . N U M E R I C S . A U X                      --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                        (Machine Version for x86)                         --
+ --                                                                          --
+ --          Copyright (C) 1998-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  File a-numaux.adb <- 86numaux.adb
+ 
+ --  This version of Numerics.Aux is for the IEEE Double Extended floating
+ --  point format on x86.
+ 
+ with System.Machine_Code; use System.Machine_Code;
+ 
+ package body Ada.Numerics.Aux is
+ 
+    NL : constant String := ASCII.LF & ASCII.HT;
+ 
+    -----------------------
+    -- Local subprograms --
+    -----------------------
+ 
+    function Is_Nan (X : Double) return Boolean;
+    --  Return True iff X is a IEEE NaN value
+ 
+    function Logarithmic_Pow (X, Y : Double) return Double;
+    --  Implementation of X**Y using Exp and Log functions (binary base)
+    --  to calculate the exponentiation. This is used by Pow for values
+    --  for values of Y in the open interval (-0.25, 0.25)
+ 
+    procedure Reduce (X : in out Double; Q : out Natural);
+    --  Implements reduction of X by Pi/2. Q is the quadrant of the final
+    --  result in the range 0 .. 3. The absolute value of X is at most Pi.
+ 
+    pragma Inline (Is_Nan);
+    pragma Inline (Reduce);
+ 
+    --------------------------------
+    -- Basic Elementary Functions --
+    --------------------------------
+ 
+    --  This section implements a few elementary functions that are used to
+    --  build the more complex ones. This ordering enables better inlining.
+ 
+    ----------
+    -- Atan --
+    ----------
+ 
+    function Atan (X : Double) return Double is
+       Result  : Double;
+ 
+    begin
+       Asm (Template =>
+            "fld1" & NL
+          & "fpatan",
+          Outputs  => Double'Asm_Output ("=t", Result),
+          Inputs   => Double'Asm_Input  ("0", X));
+ 
+       --  The result value is NaN iff input was invalid
+ 
+       if not (Result = Result) then
+          raise Argument_Error;
+       end if;
+ 
+       return Result;
+    end Atan;
+ 
+    ---------
+    -- Exp --
+    ---------
+ 
+    function Exp (X : Double) return Double is
+       Result : Double;
+    begin
+       Asm (Template =>
+          "fldl2e               " & NL
+        & "fmulp   %%st, %%st(1)" & NL -- X * log2 (E)
+        & "fld     %%st(0)      " & NL
+        & "frndint              " & NL -- Integer (X * Log2 (E))
+        & "fsubr   %%st, %%st(1)" & NL -- Fraction (X * Log2 (E))
+        & "fxch                 " & NL
+        & "f2xm1                " & NL -- 2**(...) - 1
+        & "fld1                 " & NL
+        & "faddp   %%st, %%st(1)" & NL -- 2**(Fraction (X * Log2 (E)))
+        & "fscale               " & NL -- E ** X
+        & "fstp    %%st(1)      ",
+          Outputs  => Double'Asm_Output ("=t", Result),
+          Inputs   => Double'Asm_Input  ("0", X));
+       return Result;
+    end Exp;
+ 
+    ------------
+    -- Is_Nan --
+    ------------
+ 
+    function Is_Nan (X : Double) return Boolean is
+    begin
+       --  The IEEE NaN values are the only ones that do not equal themselves
+ 
+       return not (X = X);
+    end Is_Nan;
+ 
+    ---------
+    -- Log --
+    ---------
+ 
+    function Log (X : Double) return Double is
+       Result : Double;
+ 
+    begin
+       Asm (Template =>
+          "fldln2               " & NL
+        & "fxch                 " & NL
+        & "fyl2x                " & NL,
+          Outputs  => Double'Asm_Output ("=t", Result),
+          Inputs   => Double'Asm_Input  ("0", X));
+       return Result;
+    end Log;
+ 
+    ------------
+    -- Reduce --
+    ------------
+ 
+    procedure Reduce (X : in out Double; Q : out Natural) is
+       Half_Pi     : constant := Pi / 2.0;
+       Two_Over_Pi : constant := 2.0 / Pi;
+ 
+       HM : constant := Integer'Min (Double'Machine_Mantissa / 2, Natural'Size);
+       M  : constant Double := 0.5 + 2.0**(1 - HM); -- Splitting constant
+       P1 : constant Double := Double'Leading_Part (Half_Pi, HM);
+       P2 : constant Double := Double'Leading_Part (Half_Pi - P1, HM);
+       P3 : constant Double := Double'Leading_Part (Half_Pi - P1 - P2, HM);
+       P4 : constant Double := Double'Leading_Part (Half_Pi - P1 - P2 - P3, HM);
+       P5 : constant Double := Double'Leading_Part (Half_Pi - P1 - P2 - P3
+                                                                  - P4, HM);
+       P6 : constant Double := Double'Model (Half_Pi - P1 - P2 - P3 - P4 - P5);
+       K  : Double := X * Two_Over_Pi;
+    begin
+       --  For X < 2.0**32, all products below are computed exactly.
+       --  Due to cancellation effects all subtractions are exact as well.
+       --  As no double extended floating-point number has more than 75
+       --  zeros after the binary point, the result will be the correctly
+       --  rounded result of X - K * (Pi / 2.0).
+ 
+       while abs K >= 2.0**HM loop
+          K := K * M - (K * M - K);
+          X := (((((X - K * P1) - K * P2) - K * P3)
+                      - K * P4) - K * P5) - K * P6;
+          K := X * Two_Over_Pi;
+       end loop;
+ 
+       if K /= K then
+ 
+          --  K is not a number, because X was not finite
+ 
+          raise Constraint_Error;
+       end if;
+ 
+       K := Double'Rounding (K);
+       Q := Integer (K) mod 4;
+       X := (((((X - K * P1) - K * P2) - K * P3)
+                   - K * P4) - K * P5) - K * P6;
+    end Reduce;
+ 
+    ----------
+    -- Sqrt --
+    ----------
+ 
+    function Sqrt (X : Double) return Double is
+       Result  : Double;
+ 
+    begin
+       if X < 0.0 then
+          raise Argument_Error;
+       end if;
+ 
+       Asm (Template => "fsqrt",
+            Outputs  => Double'Asm_Output ("=t", Result),
+            Inputs   => Double'Asm_Input  ("0", X));
+ 
+       return Result;
+    end Sqrt;
+ 
+    --------------------------------
+    -- Other Elementary Functions --
+    --------------------------------
+ 
+    --  These are built using the previously implemented basic functions
+ 
+    ----------
+    -- Acos --
+    ----------
+ 
+    function Acos (X : Double) return Double is
+       Result  : Double;
+ 
+    begin
+       Result := 2.0 * Atan (Sqrt ((1.0 - X) / (1.0 + X)));
+ 
+       --  The result value is NaN iff input was invalid
+ 
+       if Is_Nan (Result) then
+          raise Argument_Error;
+       end if;
+ 
+       return Result;
+    end Acos;
+ 
+    ----------
+    -- Asin --
+    ----------
+ 
+    function Asin (X : Double) return Double is
+       Result  : Double;
+ 
+    begin
+       Result := Atan (X / Sqrt ((1.0 - X) * (1.0 + X)));
+ 
+       --  The result value is NaN iff input was invalid
+ 
+       if Is_Nan (Result) then
+          raise Argument_Error;
+       end if;
+ 
+       return Result;
+    end Asin;
+ 
+    ---------
+    -- Cos --
+    ---------
+ 
+    function Cos (X : Double) return Double is
+       Reduced_X : Double := abs X;
+       Result    : Double;
+       Quadrant  : Natural range 0 .. 3;
+ 
+    begin
+       if Reduced_X > Pi / 4.0 then
+          Reduce (Reduced_X, Quadrant);
+ 
+          case Quadrant is
+             when 0 =>
+                Asm (Template  => "fcos",
+                   Outputs  => Double'Asm_Output ("=t", Result),
+                   Inputs   => Double'Asm_Input  ("0", Reduced_X));
+             when 1 =>
+                Asm (Template  => "fsin",
+                   Outputs  => Double'Asm_Output ("=t", Result),
+                   Inputs   => Double'Asm_Input  ("0", -Reduced_X));
+             when 2 =>
+                Asm (Template  => "fcos ; fchs",
+                   Outputs  => Double'Asm_Output ("=t", Result),
+                   Inputs   => Double'Asm_Input  ("0", Reduced_X));
+             when 3 =>
+                Asm (Template  => "fsin",
+                   Outputs  => Double'Asm_Output ("=t", Result),
+                   Inputs   => Double'Asm_Input  ("0", Reduced_X));
+          end case;
+ 
+       else
+          Asm (Template  => "fcos",
+               Outputs  => Double'Asm_Output ("=t", Result),
+               Inputs   => Double'Asm_Input  ("0", Reduced_X));
+       end if;
+ 
+       return Result;
+    end Cos;
+ 
+    ---------------------
+    -- Logarithmic_Pow --
+    ---------------------
+ 
+    function Logarithmic_Pow (X, Y : Double) return Double is
+       Result  : Double;
+    begin
+       Asm (Template => ""             --  X                  : Y
+        & "fyl2x                " & NL --  Y * Log2 (X)
+        & "fst     %%st(1)      " & NL --  Y * Log2 (X)       : Y * Log2 (X)
+        & "frndint              " & NL --  Int (...)          : Y * Log2 (X)
+        & "fsubr   %%st, %%st(1)" & NL --  Int (...)          : Fract (...)
+        & "fxch                 " & NL --  Fract (...)        : Int (...)
+        & "f2xm1                " & NL --  2**Fract (...) - 1 : Int (...)
+        & "fld1                 " & NL --  1 : 2**Fract (...) - 1 : Int (...)
+        & "faddp   %%st, %%st(1)" & NL --  2**Fract (...)     : Int (...)
+        & "fscale               " & NL --  2**(Fract (...) + Int (...))
+        & "fstp    %%st(1)      ",
+          Outputs  => Double'Asm_Output ("=t", Result),
+          Inputs   =>
+            (Double'Asm_Input  ("0", X),
+             Double'Asm_Input  ("u", Y)));
+       return Result;
+    end Logarithmic_Pow;
+ 
+    ---------
+    -- Pow --
+    ---------
+ 
+    function Pow (X, Y : Double) return Double is
+       type Mantissa_Type is mod 2**Double'Machine_Mantissa;
+       --  Modular type that can hold all bits of the mantissa of Double
+ 
+       --  For negative exponents, do divide at the end of the processing
+ 
+       Negative_Y : constant Boolean := Y < 0.0;
+       Abs_Y      : constant Double := abs Y;
+ 
+       --  During this function the following invariant is kept:
+       --  X ** (abs Y) = Base**(Exp_High + Exp_Mid + Exp_Low) * Factor
+ 
+       Base : Double := X;
+ 
+       Exp_High : Double := Double'Floor (Abs_Y);
+       Exp_Mid  : Double;
+       Exp_Low  : Double;
+       Exp_Int  : Mantissa_Type;
+ 
+       Factor : Double := 1.0;
+ 
+    begin
+       --  Select algorithm for calculating Pow (integer cases fall through)
+ 
+       if Exp_High >= 2.0**Double'Machine_Mantissa then
+ 
+          --  In case of Y that is IEEE infinity, just raise constraint error
+ 
+          if Exp_High > Double'Safe_Last then
+             raise Constraint_Error;
+          end if;
+ 
+          --  Large values of Y are even integers and will stay integer
+          --  after division by two.
+ 
+          loop
+             --  Exp_Mid and Exp_Low are zero, so
+             --    X**(abs Y) = Base ** Exp_High = (Base**2) ** (Exp_High / 2)
+ 
+             Exp_High := Exp_High / 2.0;
+             Base := Base * Base;
+             exit when Exp_High < 2.0**Double'Machine_Mantissa;
+          end loop;
+ 
+       elsif Exp_High /= Abs_Y then
+          Exp_Low := Abs_Y - Exp_High;
+          Factor := 1.0;
+ 
+          if Exp_Low /= 0.0 then
+ 
+             --  Exp_Low now is in interval (0.0, 1.0)
+             --  Exp_Mid := Double'Floor (Exp_Low * 4.0) / 4.0;
+ 
+             Exp_Mid := 0.0;
+             Exp_Low := Exp_Low - Exp_Mid;
+ 
+             if Exp_Low >= 0.5 then
+                Factor := Sqrt (X);
+                Exp_Low := Exp_Low - 0.5;  -- exact
+ 
+                if Exp_Low >= 0.25 then
+                   Factor := Factor * Sqrt (Factor);
+                   Exp_Low := Exp_Low - 0.25; --  exact
+                end if;
+ 
+             elsif Exp_Low >= 0.25 then
+                Factor := Sqrt (Sqrt (X));
+                Exp_Low := Exp_Low - 0.25; --  exact
+             end if;
+ 
+             --  Exp_Low now is in interval (0.0, 0.25)
+ 
+             --  This means it is safe to call Logarithmic_Pow
+             --  for the remaining part.
+ 
+             Factor := Factor * Logarithmic_Pow (X, Exp_Low);
+          end if;
+ 
+       elsif X = 0.0 then
+          return 0.0;
+       end if;
+ 
+       --  Exp_High is non-zero integer smaller than 2**Double'Machine_Mantissa
+ 
+       Exp_Int := Mantissa_Type (Exp_High);
+ 
+       --  Standard way for processing integer powers > 0
+ 
+       while Exp_Int > 1 loop
+          if (Exp_Int and 1) = 1 then
+ 
+             --  Base**Y = Base**(Exp_Int - 1) * Exp_Int for Exp_Int > 0
+ 
+             Factor := Factor * Base;
+          end if;
+ 
+          --  Exp_Int is even and Exp_Int > 0, so
+          --    Base**Y = (Base**2)**(Exp_Int / 2)
+ 
+          Base := Base * Base;
+          Exp_Int := Exp_Int / 2;
+       end loop;
+ 
+       --  Exp_Int = 1 or Exp_Int = 0
+ 
+       if Exp_Int = 1 then
+          Factor := Base * Factor;
+       end if;
+ 
+       if Negative_Y then
+          Factor := 1.0 / Factor;
+       end if;
+ 
+       return Factor;
+    end Pow;
+ 
+    ---------
+    -- Sin --
+    ---------
+ 
+    function Sin (X : Double) return Double is
+       Reduced_X : Double := X;
+       Result    : Double;
+       Quadrant  : Natural range 0 .. 3;
+ 
+    begin
+       if abs X > Pi / 4.0 then
+          Reduce (Reduced_X, Quadrant);
+ 
+          case Quadrant is
+             when 0 =>
+                Asm (Template  => "fsin",
+                   Outputs  => Double'Asm_Output ("=t", Result),
+                   Inputs   => Double'Asm_Input  ("0", Reduced_X));
+             when 1 =>
+                Asm (Template  => "fcos",
+                   Outputs  => Double'Asm_Output ("=t", Result),
+                   Inputs   => Double'Asm_Input  ("0", Reduced_X));
+             when 2 =>
+                Asm (Template  => "fsin",
+                   Outputs  => Double'Asm_Output ("=t", Result),
+                   Inputs   => Double'Asm_Input  ("0", -Reduced_X));
+             when 3 =>
+                Asm (Template  => "fcos ; fchs",
+                   Outputs  => Double'Asm_Output ("=t", Result),
+                   Inputs   => Double'Asm_Input  ("0", Reduced_X));
+          end case;
+ 
+       else
+          Asm (Template  => "fsin",
+             Outputs  => Double'Asm_Output ("=t", Result),
+             Inputs   => Double'Asm_Input  ("0", Reduced_X));
+       end if;
+ 
+       return Result;
+    end Sin;
+ 
+    ---------
+    -- Tan --
+    ---------
+ 
+    function Tan (X : Double) return Double is
+       Reduced_X : Double := X;
+       Result    : Double;
+       Quadrant  : Natural range 0 .. 3;
+ 
+    begin
+       if abs X > Pi / 4.0 then
+          Reduce (Reduced_X, Quadrant);
+ 
+          if Quadrant mod 2 = 0 then
+             Asm (Template  => "fptan" & NL
+                             & "ffree   %%st(0)"  & NL
+                             & "fincstp",
+                   Outputs  => Double'Asm_Output ("=t", Result),
+                   Inputs   => Double'Asm_Input  ("0", Reduced_X));
+          else
+             Asm (Template  => "fsincos" & NL
+                             & "fdivp   %%st, %%st(1)" & NL
+                             & "fchs",
+                   Outputs  => Double'Asm_Output ("=t", Result),
+                   Inputs   => Double'Asm_Input  ("0", Reduced_X));
+          end if;
+ 
+       else
+          Asm (Template  =>
+                "fptan                 " & NL
+              & "ffree   %%st(0)      " & NL
+              & "fincstp              ",
+                Outputs  => Double'Asm_Output ("=t", Result),
+                Inputs   => Double'Asm_Input  ("0", Reduced_X));
+       end if;
+ 
+       return Result;
+    end Tan;
+ 
+    ----------
+    -- Sinh --
+    ----------
+ 
+    function Sinh (X : Double) return Double is
+    begin
+       --  Mathematically Sinh (x) is defined to be (Exp (X) - Exp (-X)) / 2.0
+ 
+       if abs X < 25.0 then
+          return (Exp (X) - Exp (-X)) / 2.0;
+       else
+          return Exp (X) / 2.0;
+       end if;
+    end Sinh;
+ 
+    ----------
+    -- Cosh --
+    ----------
+ 
+    function Cosh (X : Double) return Double is
+    begin
+       --  Mathematically Cosh (X) is defined to be (Exp (X) + Exp (-X)) / 2.0
+ 
+       if abs X < 22.0 then
+          return (Exp (X) + Exp (-X)) / 2.0;
+       else
+          return Exp (X) / 2.0;
+       end if;
+    end Cosh;
+ 
+    ----------
+    -- Tanh --
+    ----------
+ 
+    function Tanh (X : Double) return Double is
+    begin
+       --  Return the Hyperbolic Tangent of x
+ 
+       --                                    x    -x
+       --                                   e  - e        Sinh (X)
+       --       Tanh (X) is defined to be -----------   = --------
+       --                                    x    -x      Cosh (X)
+       --                                   e  + e
+ 
+       if abs X > 23.0 then
+          return Double'Copy_Sign (1.0, X);
+       end if;
+ 
+       return 1.0 / (1.0 + Exp (-2.0 * X)) - 1.0 / (1.0 + Exp (2.0 * X));
+    end Tanh;
+ 
+ end Ada.Numerics.Aux;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-numaux-x86.ads gcc-4.0.0/gcc/ada/a-numaux-x86.ads
*** gcc-3.4.3/gcc/ada/a-numaux-x86.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-numaux-x86.ads	Fri May 14 10:01:59 2004
***************
*** 0 ****
--- 1,84 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --                     A D A . N U M E R I C S . A U X                      --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                        (Machine Version for x86)                         --
+ --                                                                          --
+ --          Copyright (C) 1992-1998 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package provides the basic computational interface for the generic
+ --  elementary functions. This implementation is based on the glibc assembly
+ --  sources for the x86 glibc math library.
+ 
+ --  Note: there are two versions of this package. One using the 80-bit x86
+ --  long double format (which is this version), and one using 64-bit IEEE
+ --  double (see file a-numaux.ads). The latter version imports the C
+ --  routines directly.
+ 
+ package Ada.Numerics.Aux is
+ pragma Pure (Aux);
+ 
+    type Double is new Long_Long_Float;
+ 
+    function Sin (X : Double) return Double;
+ 
+    function Cos (X : Double) return Double;
+ 
+    function Tan (X : Double) return Double;
+ 
+    function Exp (X : Double) return Double;
+ 
+    function Sqrt (X : Double) return Double;
+ 
+    function Log (X : Double) return Double;
+ 
+    function Atan (X : Double) return Double;
+ 
+    function Acos (X : Double) return Double;
+ 
+    function Asin (X : Double) return Double;
+ 
+    function Sinh (X : Double) return Double;
+ 
+    function Cosh (X : Double) return Double;
+ 
+    function Tanh (X : Double) return Double;
+ 
+    function Pow (X, Y : Double) return Double;
+ 
+ private
+    pragma Inline (Atan);
+    pragma Inline (Cos);
+    pragma Inline (Tan);
+    pragma Inline (Exp);
+    pragma Inline (Log);
+    pragma Inline (Sin);
+    pragma Inline (Sqrt);
+ 
+ end Ada.Numerics.Aux;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-numeri.ads gcc-4.0.0/gcc/ada/a-numeri.ads
*** gcc-3.4.3/gcc/ada/a-numeri.ads	Thu Apr 24 17:53:53 2003
--- gcc-4.0.0/gcc/ada/a-numeri.ads	Thu Feb 10 13:57:00 2005
*************** pragma Pure (Numerics);
*** 22,28 ****
     Pi : constant :=
            3.14159_26535_89793_23846_26433_83279_50288_41971_69399_37511;
  
     e : constant :=
!           2.71828_18284_59045_23536_02874_71352_66249_77572_47093_69996;
  
  end Ada.Numerics;
--- 22,33 ----
     Pi : constant :=
            3.14159_26535_89793_23846_26433_83279_50288_41971_69399_37511;
  
+    ["03C0"] : constant := Pi;
+    --  This is the greek letter Pi (for Ada 2005 AI-388). Note that it is
+    --  conforming to have this present even in Ada 95 mode, because there is
+    --  no way for a normal mode Ada 95 program to reference this identifier.
+ 
     e : constant :=
!          2.71828_18284_59045_23536_02874_71352_66249_77572_47093_69996;
  
  end Ada.Numerics;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-rbtgso.adb gcc-4.0.0/gcc/ada/a-rbtgso.adb
*** gcc-3.4.3/gcc/ada/a-rbtgso.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-rbtgso.adb	Wed Feb  9 11:14:39 2005
***************
*** 0 ****
--- 1,534 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --          ADA.CONTAINERS.RED_BLACK_TREES.GENERIC_SET_OPERATIONS           --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ 
+ package body Ada.Containers.Red_Black_Trees.Generic_Set_Operations is
+ 
+    ----------------
+    -- Difference --
+    ----------------
+ 
+    procedure Difference (Target : in out Tree_Type; Source : Tree_Type) is
+       Tgt : Node_Access := Target.First;
+       Src : Node_Access := Source.First;
+ 
+    begin
+ 
+       --  NOTE: must be done by client:
+       --      if Target'Address = Source'Address then
+       --         Clear (Target);
+       --         return;
+       --      end if;
+ 
+       loop
+          if Tgt = Tree_Operations.Null_Node then
+             return;
+          end if;
+ 
+          if Src = Tree_Operations.Null_Node then
+             return;
+          end if;
+ 
+          if Is_Less (Tgt, Src) then
+             Tgt := Tree_Operations.Next (Tgt);
+ 
+          elsif Is_Less (Src, Tgt) then
+             Src := Tree_Operations.Next (Src);
+ 
+          else
+             declare
+                X : Node_Access := Tgt;
+             begin
+                Tgt := Tree_Operations.Next (Tgt);
+                Tree_Operations.Delete_Node_Sans_Free (Target, X);
+                Free (X);
+             end;
+ 
+             Src := Tree_Operations.Next (Src);
+          end if;
+       end loop;
+    end Difference;
+ 
+    function Difference (Left, Right : Tree_Type) return Tree_Type is
+       Tree : Tree_Type := (Length => 0, others => Tree_Operations.Null_Node);
+ 
+       L_Node : Node_Access := Left.First;
+       R_Node : Node_Access := Right.First;
+ 
+       Dst_Node : Node_Access;
+ 
+    begin
+       --  NOTE: must by done by client:
+       --      if Left'Address = Right'Address then
+       --         return Empty_Set;
+       --      end if;
+ 
+       loop
+          if L_Node = Tree_Operations.Null_Node then
+             return Tree;
+          end if;
+ 
+          if R_Node = Tree_Operations.Null_Node then
+             while L_Node /= Tree_Operations.Null_Node loop
+                Insert_With_Hint
+                  (Dst_Tree => Tree,
+                   Dst_Hint => Tree_Operations.Null_Node,
+                   Src_Node => L_Node,
+                   Dst_Node => Dst_Node);
+ 
+                L_Node := Tree_Operations.Next (L_Node);
+ 
+             end loop;
+ 
+             return Tree;
+          end if;
+ 
+          if Is_Less (L_Node, R_Node) then
+             Insert_With_Hint
+               (Dst_Tree => Tree,
+                Dst_Hint => Tree_Operations.Null_Node,
+                Src_Node => L_Node,
+                Dst_Node => Dst_Node);
+ 
+             L_Node := Tree_Operations.Next (L_Node);
+ 
+          elsif Is_Less (R_Node, L_Node) then
+             R_Node := Tree_Operations.Next (R_Node);
+ 
+          else
+             L_Node := Tree_Operations.Next (L_Node);
+             R_Node := Tree_Operations.Next (R_Node);
+          end if;
+       end loop;
+ 
+    exception
+       when others =>
+          Delete_Tree (Tree.Root);
+          raise;
+    end Difference;
+ 
+    ------------------
+    -- Intersection --
+    ------------------
+ 
+    procedure Intersection
+      (Target : in out Tree_Type;
+       Source : Tree_Type)
+    is
+       Tgt : Node_Access := Target.First;
+       Src : Node_Access := Source.First;
+ 
+    begin
+       --  NOTE: must be done by caller: ???
+       --      if Target'Address = Source'Address then
+       --         return;
+       --      end if;
+ 
+       while Tgt /= Tree_Operations.Null_Node
+         and then Src /= Tree_Operations.Null_Node
+       loop
+          if Is_Less (Tgt, Src) then
+             declare
+                X : Node_Access := Tgt;
+             begin
+                Tgt := Tree_Operations.Next (Tgt);
+                Tree_Operations.Delete_Node_Sans_Free (Target, X);
+                Free (X);
+             end;
+ 
+          elsif Is_Less (Src, Tgt) then
+             Src := Tree_Operations.Next (Src);
+ 
+          else
+             Tgt := Tree_Operations.Next (Tgt);
+             Src := Tree_Operations.Next (Src);
+          end if;
+       end loop;
+    end Intersection;
+ 
+    function Intersection (Left, Right : Tree_Type) return Tree_Type is
+       Tree : Tree_Type := (Length => 0, others => Tree_Operations.Null_Node);
+ 
+       L_Node : Node_Access := Left.First;
+       R_Node : Node_Access := Right.First;
+ 
+       Dst_Node : Node_Access;
+ 
+    begin
+       --  NOTE: must be done by caller: ???
+       --      if Left'Address = Right'Address then
+       --         return Left;
+       --      end if;
+ 
+       loop
+          if L_Node = Tree_Operations.Null_Node then
+             return Tree;
+          end if;
+ 
+          if R_Node = Tree_Operations.Null_Node then
+             return Tree;
+          end if;
+ 
+          if Is_Less (L_Node, R_Node) then
+             L_Node := Tree_Operations.Next (L_Node);
+ 
+          elsif Is_Less (R_Node, L_Node) then
+             R_Node := Tree_Operations.Next (R_Node);
+ 
+          else
+             Insert_With_Hint
+               (Dst_Tree => Tree,
+                Dst_Hint => Tree_Operations.Null_Node,
+                Src_Node => L_Node,
+                Dst_Node => Dst_Node);
+ 
+             L_Node := Tree_Operations.Next (L_Node);
+             R_Node := Tree_Operations.Next (R_Node);
+          end if;
+       end loop;
+ 
+    exception
+       when others =>
+          Delete_Tree (Tree.Root);
+          raise;
+    end Intersection;
+ 
+    ---------------
+    -- Is_Subset --
+    ---------------
+ 
+    function Is_Subset
+      (Subset : Tree_Type;
+       Of_Set : Tree_Type) return Boolean
+    is
+    begin
+       --  NOTE: must by done by caller:
+       --      if Subset'Address = Of_Set'Address then
+       --         return True;
+       --      end if;
+ 
+       if Subset.Length > Of_Set.Length then
+          return False;
+       end if;
+ 
+       declare
+          Subset_Node : Node_Access := Subset.First;
+          Set_Node : Node_Access := Of_Set.First;
+ 
+       begin
+          loop
+             if Set_Node = Tree_Operations.Null_Node then
+                return Subset_Node = Tree_Operations.Null_Node;
+             end if;
+ 
+             if Subset_Node = Tree_Operations.Null_Node then
+                return True;
+             end if;
+ 
+             if Is_Less (Subset_Node, Set_Node) then
+                return False;
+             end if;
+ 
+             if Is_Less (Set_Node, Subset_Node) then
+                Set_Node := Tree_Operations.Next (Set_Node);
+             else
+                Set_Node := Tree_Operations.Next (Set_Node);
+                Subset_Node := Tree_Operations.Next (Subset_Node);
+             end if;
+          end loop;
+       end;
+    end Is_Subset;
+ 
+    -------------
+    -- Overlap --
+    -------------
+ 
+    function Overlap (Left, Right : Tree_Type) return Boolean is
+       L_Node : Node_Access := Left.First;
+       R_Node : Node_Access := Right.First;
+ 
+    begin
+       --  NOTE: must be done by caller: ???
+       --      if Left'Address = Right'Address then
+       --         return Left.Tree.Length /= 0;
+       --      end if;
+ 
+       loop
+          if L_Node = Tree_Operations.Null_Node
+            or else R_Node = Tree_Operations.Null_Node
+          then
+             return False;
+          end if;
+ 
+          if Is_Less (L_Node, R_Node) then
+             L_Node := Tree_Operations.Next (L_Node);
+ 
+          elsif Is_Less (R_Node, L_Node) then
+             R_Node := Tree_Operations.Next (R_Node);
+ 
+          else
+             return True;
+          end if;
+       end loop;
+    end Overlap;
+ 
+    --------------------------
+    -- Symmetric_Difference --
+    --------------------------
+ 
+    procedure Symmetric_Difference
+      (Target : in out Tree_Type;
+       Source : Tree_Type)
+    is
+       Tgt : Node_Access := Target.First;
+       Src : Node_Access := Source.First;
+ 
+       New_Tgt_Node : Node_Access;
+ 
+    begin
+       --  NOTE: must by done by client: ???
+       --      if Target'Address = Source'Address then
+       --         Clear (Target);
+       --         return;
+       --      end if;
+ 
+       loop
+          if Tgt = Tree_Operations.Null_Node then
+             while Src /= Tree_Operations.Null_Node loop
+                Insert_With_Hint
+                  (Dst_Tree => Target,
+                   Dst_Hint => Tree_Operations.Null_Node,
+                   Src_Node => Src,
+                   Dst_Node => New_Tgt_Node);
+ 
+                Src := Tree_Operations.Next (Src);
+             end loop;
+ 
+             return;
+          end if;
+ 
+          if Src = Tree_Operations.Null_Node then
+             return;
+          end if;
+ 
+          if Is_Less (Tgt, Src) then
+             Tgt := Tree_Operations.Next (Tgt);
+ 
+          elsif Is_Less (Src, Tgt) then
+             Insert_With_Hint
+               (Dst_Tree => Target,
+                Dst_Hint => Tgt,
+                Src_Node => Src,
+                Dst_Node => New_Tgt_Node);
+ 
+             Src := Tree_Operations.Next (Src);
+ 
+          else
+             declare
+                X : Node_Access := Tgt;
+             begin
+                Tgt := Tree_Operations.Next (Tgt);
+                Tree_Operations.Delete_Node_Sans_Free (Target, X);
+                Free (X);
+             end;
+ 
+             Src := Tree_Operations.Next (Src);
+          end if;
+       end loop;
+    end Symmetric_Difference;
+ 
+    function Symmetric_Difference (Left, Right : Tree_Type) return Tree_Type is
+       Tree : Tree_Type := (Length => 0, others => Tree_Operations.Null_Node);
+ 
+       L_Node : Node_Access := Left.First;
+       R_Node : Node_Access := Right.First;
+ 
+       Dst_Node : Node_Access;
+ 
+    begin
+       --  NOTE: must by done by caller ???
+       --      if Left'Address = Right'Address then
+       --         return Empty_Set;
+       --      end if;
+ 
+       loop
+          if L_Node = Tree_Operations.Null_Node then
+             while R_Node /= Tree_Operations.Null_Node loop
+                Insert_With_Hint
+                  (Dst_Tree => Tree,
+                   Dst_Hint => Tree_Operations.Null_Node,
+                   Src_Node => R_Node,
+                   Dst_Node => Dst_Node);
+                R_Node := Tree_Operations.Next (R_Node);
+             end loop;
+ 
+             return Tree;
+          end if;
+ 
+          if R_Node = Tree_Operations.Null_Node then
+             while L_Node /= Tree_Operations.Null_Node loop
+                Insert_With_Hint
+                  (Dst_Tree => Tree,
+                   Dst_Hint => Tree_Operations.Null_Node,
+                   Src_Node => L_Node,
+                   Dst_Node => Dst_Node);
+ 
+                L_Node := Tree_Operations.Next (L_Node);
+             end loop;
+ 
+             return Tree;
+          end if;
+ 
+          if Is_Less (L_Node, R_Node) then
+             Insert_With_Hint
+               (Dst_Tree => Tree,
+                Dst_Hint => Tree_Operations.Null_Node,
+                Src_Node => L_Node,
+                Dst_Node => Dst_Node);
+ 
+             L_Node := Tree_Operations.Next (L_Node);
+ 
+          elsif Is_Less (R_Node, L_Node) then
+             Insert_With_Hint
+               (Dst_Tree => Tree,
+                Dst_Hint => Tree_Operations.Null_Node,
+                Src_Node => R_Node,
+                Dst_Node => Dst_Node);
+ 
+             R_Node := Tree_Operations.Next (R_Node);
+ 
+          else
+             L_Node := Tree_Operations.Next (L_Node);
+             R_Node := Tree_Operations.Next (R_Node);
+          end if;
+       end loop;
+ 
+    exception
+       when others =>
+          Delete_Tree (Tree.Root);
+          raise;
+    end Symmetric_Difference;
+ 
+    -----------
+    -- Union --
+    -----------
+ 
+    procedure Union (Target : in out Tree_Type; Source : Tree_Type)
+    is
+       Hint : Node_Access;
+ 
+       procedure Process (Node : Node_Access);
+       pragma Inline (Process);
+ 
+       procedure Iterate is new Tree_Operations.Generic_Iteration (Process);
+ 
+       -------------
+       -- Process --
+       -------------
+ 
+       procedure Process (Node : Node_Access) is
+       begin
+          Insert_With_Hint
+            (Dst_Tree => Target,
+             Dst_Hint => Hint,
+             Src_Node => Node,
+             Dst_Node => Hint);
+       end Process;
+ 
+    --  Start of processing for Union
+ 
+    begin
+       --  NOTE: must be done by caller: ???
+       --      if Target'Address = Source'Address then
+       --         return;
+       --      end if;
+ 
+       Iterate (Source);
+    end Union;
+ 
+    function Union (Left, Right : Tree_Type) return Tree_Type is
+       Tree : Tree_Type;
+ 
+    begin
+       --  NOTE: must be done by caller:
+       --      if Left'Address = Right'Address then
+       --         return Left;
+       --      end if;
+ 
+       declare
+          Root : constant Node_Access := Copy_Tree (Left.Root);
+       begin
+          Tree := (Root   => Root,
+                   First  => Tree_Operations.Min (Root),
+                   Last   => Tree_Operations.Max (Root),
+                   Length => Left.Length);
+       end;
+ 
+       declare
+          Hint : Node_Access;
+ 
+          procedure Process (Node : Node_Access);
+          pragma Inline (Process);
+ 
+          procedure Iterate is
+            new Tree_Operations.Generic_Iteration (Process);
+ 
+          -------------
+          -- Process --
+          -------------
+ 
+          procedure Process (Node : Node_Access) is
+          begin
+             Insert_With_Hint
+               (Dst_Tree => Tree,
+                Dst_Hint => Hint,
+                Src_Node => Node,
+                Dst_Node => Hint);
+          end Process;
+ 
+       --  Start of processing for Union
+ 
+       begin
+          Iterate (Right);
+ 
+       exception
+          when others =>
+             Delete_Tree (Tree.Root);
+             raise;
+       end;
+ 
+       return Tree;
+    end Union;
+ 
+ end Ada.Containers.Red_Black_Trees.Generic_Set_Operations;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-rbtgso.ads gcc-4.0.0/gcc/ada/a-rbtgso.ads
*** gcc-3.4.3/gcc/ada/a-rbtgso.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-rbtgso.ads	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,63 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --          ADA.CONTAINERS.RED_BLACK_TREES.GENERIC_SET_OPERATIONS           --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ -- This specification is adapted from the Ada Reference Manual for use with --
+ -- GNAT.  In accordance with the copyright of that document, you can freely --
+ -- copy and modify this specification,  provided that if you redistribute a --
+ -- modified version,  any changes that you have made are clearly indicated. --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Containers.Red_Black_Trees.Generic_Operations;
+ 
+ generic
+    with package Tree_Operations is new Generic_Operations (<>);
+ 
+    use Tree_Operations.Tree_Types;
+ 
+    with procedure Insert_With_Hint
+      (Dst_Tree : in out Tree_Type;
+       Dst_Hint : Node_Access;
+       Src_Node : Node_Access;
+       Dst_Node : out Node_Access);
+ 
+    with function Copy_Tree (Source_Root : Node_Access)
+        return Node_Access;
+ 
+    with procedure Delete_Tree (X : in out Node_Access);
+ 
+    with function Is_Less (Left, Right : Node_Access) return Boolean;
+ 
+    with procedure Free (X : in out Node_Access);
+ 
+ package Ada.Containers.Red_Black_Trees.Generic_Set_Operations is
+ pragma Pure (Generic_Set_Operations);
+ 
+    procedure Union (Target : in out Tree_Type; Source : Tree_Type);
+ 
+    function Union (Left, Right : Tree_Type) return Tree_Type;
+ 
+    procedure Intersection (Target : in out Tree_Type; Source : Tree_Type);
+ 
+    function Intersection (Left, Right : Tree_Type) return Tree_Type;
+ 
+    procedure Difference (Target : in out Tree_Type; Source : Tree_Type);
+ 
+    function Difference (Left, Right : Tree_Type) return Tree_Type;
+ 
+    procedure Symmetric_Difference
+      (Target : in out Tree_Type;
+       Source : Tree_Type);
+ 
+    function Symmetric_Difference (Left, Right : Tree_Type) return Tree_Type;
+ 
+    function Is_Subset (Subset : Tree_Type; Of_Set : Tree_Type) return Boolean;
+ 
+    function Overlap (Left, Right : Tree_Type) return Boolean;
+ 
+ end Ada.Containers.Red_Black_Trees.Generic_Set_Operations;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-retide.adb gcc-4.0.0/gcc/ada/a-retide.adb
*** gcc-3.4.3/gcc/ada/a-retide.adb	Thu Apr 24 17:53:53 2003
--- gcc-4.0.0/gcc/ada/a-retide.adb	Mon Sep 13 10:18:38 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2001, Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2004, Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 31,43 ****
--- 31,54 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
+ with Ada.Exceptions;
+ --  Used for Raise_Exception
+ 
+ with System.Tasking;
+ --  Used for Task_Id
+ 
  with System.Task_Primitives.Operations;
  --  Used for Timed_Delay
+ --           Self
  
  package body Ada.Real_Time.Delays is
  
     package STPO renames System.Task_Primitives.Operations;
  
+    ----------------
+    -- Local Data --
+    ----------------
+ 
     Absolute_RT : constant := 2;
  
     -----------------
*************** package body Ada.Real_Time.Delays is
*** 45,52 ****
     -----------------
  
     procedure Delay_Until (T : Time) is
     begin
!       STPO.Timed_Delay (STPO.Self, To_Duration (T), Absolute_RT);
     end Delay_Until;
  
     -----------------
--- 56,76 ----
     -----------------
  
     procedure Delay_Until (T : Time) is
+       Self_Id : constant System.Tasking.Task_Id := STPO.Self;
+ 
     begin
!       --  If pragma Detect_Blocking is active, Program_Error must be
!       --  raised if this potentially blocking operation is called from a
!       --  protected action.
! 
!       if System.Tasking.Detect_Blocking
!         and then Self_Id.Common.Protected_Action_Nesting > 0
!       then
!          Ada.Exceptions.Raise_Exception
!            (Program_Error'Identity, "potentially blocking operation");
!       else
!          STPO.Timed_Delay (Self_Id, To_Duration (T), Absolute_RT);
!       end if;
     end Delay_Until;
  
     -----------------
diff -Nrcpad gcc-3.4.3/gcc/ada/a-secain.adb gcc-4.0.0/gcc/ada/a-secain.adb
*** gcc-3.4.3/gcc/ada/a-secain.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-secain.adb	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,70 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                    ADA.STRINGS.EQUAL_CASE_INSENSITIVE                    --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Characters.Handling;  use Ada.Characters.Handling;
+ 
+ function Ada.Strings.Equal_Case_Insensitive
+   (Left, Right : String) return Boolean
+ is
+    LI : Integer := Left'First;
+    RI : Integer := Right'First;
+ 
+ begin
+    if Left'Length /= Right'Length then
+       return False;
+    end if;
+ 
+    if Left'Length = 0 then
+       return True;
+    end if;
+ 
+    loop
+       if To_Lower (Left (LI)) /= To_Lower (Right (RI)) then
+          return False;
+       end if;
+ 
+       if LI = Left'Last then
+          return True;
+       end if;
+ 
+       LI := LI + 1;
+       RI := RI + 1;
+    end loop;
+ end Ada.Strings.Equal_Case_Insensitive;
+ 
+ 
+ 
+ 
+ 
diff -Nrcpad gcc-3.4.3/gcc/ada/a-secain.ads gcc-4.0.0/gcc/ada/a-secain.ads
*** gcc-3.4.3/gcc/ada/a-secain.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-secain.ads	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,20 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                    ADA.STRINGS.EQUAL_CASE_INSENSITIVE                    --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ -- This specification is adapted from the Ada Reference Manual for use with --
+ -- GNAT.  In accordance with the copyright of that document, you can freely --
+ -- copy and modify this specification,  provided that if you redistribute a --
+ -- modified version,  any changes that you have made are clearly indicated. --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ function Ada.Strings.Equal_Case_Insensitive
+   (Left, Right : String) return Boolean;
+ 
+ pragma Pure (Ada.Strings.Equal_Case_Insensitive);
+ 
diff -Nrcpad gcc-3.4.3/gcc/ada/a-sequio.ads gcc-4.0.0/gcc/ada/a-sequio.ads
*** gcc-3.4.3/gcc/ada/a-sequio.ads	Thu Apr 24 17:53:53 2003
--- gcc-4.0.0/gcc/ada/a-sequio.ads	Thu Jul 15 20:34:34 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-1997 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** generic
*** 44,49 ****
--- 44,53 ----
  
  package Ada.Sequential_IO is
  
+    pragma Compile_Time_Warning
+      (Element_Type'Has_Access_Values,
+       "?Element_Type for Sequential_'I'O instance has access values");
+ 
     type File_Type is limited private;
  
     type File_Mode is (In_File, Out_File, Append_File);
diff -Nrcpad gcc-3.4.3/gcc/ada/a-sfztio.ads gcc-4.0.0/gcc/ada/a-sfztio.ads
*** gcc-3.4.3/gcc/ada/a-sfztio.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-sfztio.ads	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,19 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --    A D A . S H O R T _ F L O A T _ W I D E _ W I D E _ T E X T _ I O     --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ -- This specification is adapted from the Ada Reference Manual for use with --
+ -- GNAT.  In accordance with the copyright of that document, you can freely --
+ -- copy and modify this specification,  provided that if you redistribute a --
+ -- modified version,  any changes that you have made are clearly indicated. --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Wide_Wide_Text_IO;
+ 
+ package Ada.Short_Float_Wide_Wide_Text_IO is
+   new Ada.Wide_Wide_Text_IO.Float_IO (Short_Float);
diff -Nrcpad gcc-3.4.3/gcc/ada/a-shcain.adb gcc-4.0.0/gcc/ada/a-shcain.adb
*** gcc-3.4.3/gcc/ada/a-shcain.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-shcain.adb	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,68 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                    ADA.STRINGS.HASH_CASE_INSENSITIVE                     --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Characters.Handling;  use Ada.Characters.Handling;
+ 
+ --  Note: source of this algorithm: GNAT.HTable.Hash (g-htable.adb)
+ 
+ function Ada.Strings.Hash_Case_Insensitive
+   (Key : String) return Containers.Hash_Type
+ is
+    use Ada.Containers;
+ 
+    Tmp : Hash_Type;
+ 
+    function Rotate_Left
+      (Value  : Hash_Type;
+       Amount : Natural) return Hash_Type;
+    pragma Import (Intrinsic, Rotate_Left);
+ 
+ begin
+    Tmp := 0;
+    for J in Key'Range loop
+       Tmp := Rotate_Left (Tmp, 1) + Character'Pos (To_Lower (Key (J)));
+    end loop;
+ 
+    return Tmp;
+ end Ada.Strings.Hash_Case_Insensitive;
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
diff -Nrcpad gcc-3.4.3/gcc/ada/a-shcain.ads gcc-4.0.0/gcc/ada/a-shcain.ads
*** gcc-3.4.3/gcc/ada/a-shcain.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-shcain.ads	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,21 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                    ADA.STRINGS.HASH_CASE_INSENSITIVE                     --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ -- This specification is adapted from the Ada Reference Manual for use with --
+ -- GNAT.  In accordance with the copyright of that document, you can freely --
+ -- copy and modify this specification,  provided that if you redistribute a --
+ -- modified version,  any changes that you have made are clearly indicated. --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Containers;
+ 
+ function Ada.Strings.Hash_Case_Insensitive
+   (Key : String) return Containers.Hash_Type;
+ 
+ pragma Pure (Ada.Strings.Hash_Case_Insensitive);
diff -Nrcpad gcc-3.4.3/gcc/ada/a-siztio.ads gcc-4.0.0/gcc/ada/a-siztio.ads
*** gcc-3.4.3/gcc/ada/a-siztio.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-siztio.ads	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,19 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --  A D A . S H O R T _ I N T E G E R _ W I D E _ W I D E _ T E X T _ I O   --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ -- This specification is adapted from the Ada Reference Manual for use with --
+ -- GNAT.  In accordance with the copyright of that document, you can freely --
+ -- copy and modify this specification,  provided that if you redistribute a --
+ -- modified version,  any changes that you have made are clearly indicated. --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Wide_Wide_Text_IO;
+ 
+ package Ada.Short_Integer_Wide_Wide_Text_IO is
+   new Ada.Wide_Wide_Text_IO.Integer_IO (Short_Integer);
diff -Nrcpad gcc-3.4.3/gcc/ada/a-slcain.adb gcc-4.0.0/gcc/ada/a-slcain.adb
*** gcc-3.4.3/gcc/ada/a-slcain.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-slcain.adb	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,80 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                    ADA.STRINGS.LESS_CASE_INSENSITIVE                     --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Characters.Handling;  use Ada.Characters.Handling;
+ 
+ function Ada.Strings.Less_Case_Insensitive
+   (Left, Right : String) return Boolean
+ is
+    LI : Integer := Left'First;
+    RI : Integer := Right'First;
+ 
+    LC, RC : Character;
+ 
+ begin
+    if LI > Left'Last then
+       return RI <= Right'Last;
+    end if;
+ 
+    if RI > Right'Last then
+       return False;
+    end if;
+ 
+    loop
+       LC := To_Lower (Left (LI));
+       RC := To_Lower (Right (RI));
+ 
+       if LC < RC then
+          return True;
+       end if;
+ 
+       if LC > RC then
+          return False;
+       end if;
+ 
+       if LI = Left'Last then
+          return RI < Right'Last;
+       end if;
+ 
+       if RI = Right'Last then
+          return False;
+       end if;
+ 
+       LI := LI + 1;
+       RI := RI + 1;
+    end loop;
+ end Ada.Strings.Less_Case_Insensitive;
+ 
+ 
diff -Nrcpad gcc-3.4.3/gcc/ada/a-slcain.ads gcc-4.0.0/gcc/ada/a-slcain.ads
*** gcc-3.4.3/gcc/ada/a-slcain.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-slcain.ads	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,19 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                    ADA.STRINGS.LESS_CASE_INSENSITIVE                     --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ -- This specification is adapted from the Ada Reference Manual for use with --
+ -- GNAT.  In accordance with the copyright of that document, you can freely --
+ -- copy and modify this specification,  provided that if you redistribute a --
+ -- modified version,  any changes that you have made are clearly indicated. --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ function Ada.Strings.Less_Case_Insensitive
+   (Left, Right : String) return Boolean;
+ 
+ pragma Pure (Ada.Strings.Less_Case_Insensitive);
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ssizti.ads gcc-4.0.0/gcc/ada/a-ssizti.ads
*** gcc-3.4.3/gcc/ada/a-ssizti.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-ssizti.ads	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,19 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ -- A D A . S H O R T _ S H O R T _ I N T E G E R _ W I D E _ T E X T _ I O  --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ -- This specification is adapted from the Ada Reference Manual for use with --
+ -- GNAT.  In accordance with the copyright of that document, you can freely --
+ -- copy and modify this specification,  provided that if you redistribute a --
+ -- modified version,  any changes that you have made are clearly indicated. --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Wide_Wide_Text_IO;
+ 
+ package Ada.Short_Short_Integer_Wide_Wide_Text_IO is
+   new Ada.Wide_Wide_Text_IO.Integer_IO (Short_Short_Integer);
diff -Nrcpad gcc-3.4.3/gcc/ada/a-stmaco.ads gcc-4.0.0/gcc/ada/a-stmaco.ads
*** gcc-3.4.3/gcc/ada/a-stmaco.ads	Thu Apr 24 17:53:54 2003
--- gcc-4.0.0/gcc/ada/a-stmaco.ads	Fri Nov 19 10:55:09 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2001 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** private
*** 70,76 ****
        others                                           => False);
  
     Graphic_Set               : constant Character_Set :=
!      (L.Space                  ..  L.Tilde             => True,
        L.No_Break_Space       ..  L.LC_Y_Diaeresis      => True,
        others                                           => False);
  
--- 70,76 ----
        others                                           => False);
  
     Graphic_Set               : constant Character_Set :=
!      (L.Space                ..  L.Tilde               => True,
        L.No_Break_Space       ..  L.LC_Y_Diaeresis      => True,
        others                                           => False);
  
*************** private
*** 107,113 ****
        others                                           => False);
  
     Decimal_Digit_Set         : constant Character_Set :=
!      ('0'                  ..  '9'                     => True,
        others                                           => False);
  
     Hexadecimal_Digit_Set     : constant Character_Set :=
--- 107,113 ----
        others                                           => False);
  
     Decimal_Digit_Set         : constant Character_Set :=
!      ('0'                    ..  '9'                   => True,
        others                                           => False);
  
     Hexadecimal_Digit_Set     : constant Character_Set :=
diff -Nrcpad gcc-3.4.3/gcc/ada/a-storio.adb gcc-4.0.0/gcc/ada/a-storio.adb
*** gcc-3.4.3/gcc/ada/a-storio.adb	Thu Apr 24 17:53:54 2003
--- gcc-4.0.0/gcc/ada/a-storio.adb	Fri Jun 25 16:39:24 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --        Copyright (C) 1992,1993,1994 Free Software Foundation, Inc.       --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 31,62 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with System.Address_To_Access_Conversions;
  
  package body Ada.Storage_IO is
  
!    package Element_Ops is new
!      System.Address_To_Access_Conversions (Element_Type);
  
     ----------
     -- Read --
     ----------
  
!    procedure Read (Buffer : in  Buffer_Type; Item : out Element_Type) is
     begin
!       Element_Ops.To_Pointer (Item'Address).all :=
!         Element_Ops.To_Pointer (Buffer'Address).all;
     end Read;
  
- 
     -----------
     -- Write --
     -----------
  
!    procedure Write (Buffer : out Buffer_Type; Item : in  Element_Type) is
     begin
!       Element_Ops.To_Pointer (Buffer'Address).all :=
!         Element_Ops.To_Pointer (Item'Address).all;
     end Write;
  
  end Ada.Storage_IO;
--- 31,61 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Unchecked_Conversion;
  
  package body Ada.Storage_IO is
  
!    type Buffer_Ptr is access all Buffer_Type;
!    type Elmt_Ptr   is access all Element_Type;
! 
!    function To_Buffer_Ptr is new Unchecked_Conversion (Elmt_Ptr, Buffer_Ptr);
  
     ----------
     -- Read --
     ----------
  
!    procedure Read (Buffer : Buffer_Type; Item : out Element_Type) is
     begin
!       To_Buffer_Ptr (Item'Unrestricted_Access).all := Buffer;
     end Read;
  
     -----------
     -- Write --
     -----------
  
!    procedure Write (Buffer : out Buffer_Type; Item : Element_Type) is
     begin
!       Buffer := To_Buffer_Ptr (Item'Unrestricted_Access).all;
     end Write;
  
  end Ada.Storage_IO;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-strbou.adb gcc-4.0.0/gcc/ada/a-strbou.adb
*** gcc-3.4.3/gcc/ada/a-strbou.adb	Tue Oct 21 13:41:54 2003
--- gcc-4.0.0/gcc/ada/a-strbou.adb	Thu Feb 10 13:50:14 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Ada.Strings.Bounded is
*** 35,57 ****
  
     package body Generic_Bounded_Length is
  
        ---------
        -- "*" --
        ---------
  
        function "*"
!         (Left  : in Natural;
!          Right : in Character)
!          return  Bounded_String
        is
        begin
           return Times (Left, Right, Max_Length);
        end "*";
  
        function "*"
!         (Left  : in Natural;
!          Right : in String)
!          return  Bounded_String
        is
        begin
           return Times (Left, Right, Max_Length);
--- 35,60 ----
  
     package body Generic_Bounded_Length is
  
+       --  The subprograms in this body are those for which there is no
+       --  Bounded_String input, and hence no implicit information on the
+       --  maximum size. This means that the maximum size has to be passed
+       --  explicitly to the routine in Superbounded.
+ 
        ---------
        -- "*" --
        ---------
  
        function "*"
!         (Left  : Natural;
!          Right : Character) return Bounded_String
        is
        begin
           return Times (Left, Right, Max_Length);
        end "*";
  
        function "*"
!         (Left  : Natural;
!          Right : String) return Bounded_String
        is
        begin
           return Times (Left, Right, Max_Length);
*************** package body Ada.Strings.Bounded is
*** 62,95 ****
        ---------------
  
        function Replicate
!         (Count : in Natural;
!          Item  : in Character;
!          Drop  : in Strings.Truncation := Strings.Error)
!          return  Bounded_String
        is
        begin
           return Super_Replicate (Count, Item, Drop, Max_Length);
        end Replicate;
  
        function Replicate
!         (Count : in Natural;
!          Item  : in String;
!          Drop  : in Strings.Truncation := Strings.Error)
!          return  Bounded_String
        is
        begin
           return Super_Replicate (Count, Item, Drop, Max_Length);
        end Replicate;
  
- 
        -----------------------
        -- To_Bounded_String --
        -----------------------
  
        function To_Bounded_String
!         (Source : in String;
!          Drop   : in Strings.Truncation := Strings.Error)
!          return   Bounded_String
        is
        begin
           return To_Super_String (Source, Max_Length, Drop);
--- 65,94 ----
        ---------------
  
        function Replicate
!         (Count : Natural;
!          Item  : Character;
!          Drop  : Strings.Truncation := Strings.Error) return Bounded_String
        is
        begin
           return Super_Replicate (Count, Item, Drop, Max_Length);
        end Replicate;
  
        function Replicate
!         (Count : Natural;
!          Item  : String;
!          Drop  : Strings.Truncation := Strings.Error) return Bounded_String
        is
        begin
           return Super_Replicate (Count, Item, Drop, Max_Length);
        end Replicate;
  
        -----------------------
        -- To_Bounded_String --
        -----------------------
  
        function To_Bounded_String
!         (Source : String;
!          Drop   : Strings.Truncation := Strings.Error) return Bounded_String
        is
        begin
           return To_Super_String (Source, Max_Length, Drop);
diff -Nrcpad gcc-3.4.3/gcc/ada/a-strbou.ads gcc-4.0.0/gcc/ada/a-strbou.ads
*** gcc-3.4.3/gcc/ada/a-strbou.ads	Tue Oct 21 13:41:54 2003
--- gcc-4.0.0/gcc/ada/a-strbou.ads	Thu Feb 10 13:50:15 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** pragma Preelaborate (Bounded);
*** 55,268 ****
  
        subtype Length_Range is Natural range 0 .. Max_Length;
  
!       function Length (Source : in Bounded_String) return Length_Range;
  
        --------------------------------------------------------
        -- Conversion, Concatenation, and Selection Functions --
        --------------------------------------------------------
  
        function To_Bounded_String
!         (Source : in String;
!          Drop   : in Truncation := Error)
!          return   Bounded_String;
  
!       function To_String (Source : in Bounded_String) return String;
  
        function Append
!         (Left, Right : in Bounded_String;
!          Drop        : in Truncation  := Error)
!          return        Bounded_String;
  
        function Append
!         (Left  : in Bounded_String;
!          Right : in String;
!          Drop  : in Truncation := Error)
!          return  Bounded_String;
  
        function Append
!         (Left  : in String;
!          Right : in Bounded_String;
!          Drop  : in Truncation := Error)
!          return  Bounded_String;
  
        function Append
!         (Left  : in Bounded_String;
!          Right : in Character;
!          Drop  : in Truncation := Error)
!          return  Bounded_String;
  
        function Append
!         (Left  : in Character;
!          Right : in Bounded_String;
!          Drop  : in Truncation := Error)
!          return  Bounded_String;
  
        procedure Append
          (Source   : in out Bounded_String;
!          New_Item : in Bounded_String;
!          Drop     : in Truncation  := Error);
  
        procedure Append
          (Source   : in out Bounded_String;
!          New_Item : in String;
!          Drop     : in Truncation  := Error);
  
        procedure Append
          (Source   : in out Bounded_String;
!          New_Item : in Character;
!          Drop     : in Truncation  := Error);
  
        function "&"
!         (Left, Right : in Bounded_String)
!          return        Bounded_String;
  
        function "&"
!         (Left  : in Bounded_String;
!          Right : in String)
!          return  Bounded_String;
  
        function "&"
!         (Left  : in String;
!          Right : in Bounded_String)
!          return  Bounded_String;
  
        function "&"
!         (Left  : in Bounded_String;
!          Right : in Character)
!          return  Bounded_String;
  
        function "&"
!         (Left  : in Character;
!          Right : in Bounded_String)
!          return  Bounded_String;
  
        function Element
!         (Source : in Bounded_String;
!          Index  : in Positive)
!          return   Character;
  
        procedure Replace_Element
          (Source : in out Bounded_String;
!          Index  : in Positive;
!          By     : in Character);
  
        function Slice
!         (Source : in Bounded_String;
!          Low    : in Positive;
!          High   : in Natural)
!          return   String;
  
!       function "="  (Left, Right : in Bounded_String) return Boolean;
  
        function "="
!         (Left  : in Bounded_String;
!          Right : in String)
!          return  Boolean;
  
        function "="
!         (Left  : in String;
!          Right : in Bounded_String)
!          return  Boolean;
  
!       function "<"  (Left, Right : in Bounded_String) return Boolean;
  
        function "<"
!         (Left  : in Bounded_String;
!          Right : in String)
!          return  Boolean;
  
        function "<"
!         (Left  : in String;
!          Right : in Bounded_String)
!          return  Boolean;
  
!       function "<=" (Left, Right : in Bounded_String) return Boolean;
  
        function "<="
!         (Left  : in Bounded_String;
!          Right : in String)
!          return  Boolean;
  
        function "<="
!         (Left  : in String;
!          Right : in Bounded_String)
!          return  Boolean;
  
!       function ">"  (Left, Right : in Bounded_String) return Boolean;
  
        function ">"
!         (Left  : in Bounded_String;
!          Right : in String)
!          return  Boolean;
  
        function ">"
!         (Left  : in String;
!          Right : in Bounded_String)
!          return  Boolean;
  
!       function ">=" (Left, Right : in Bounded_String) return Boolean;
  
        function ">="
!         (Left  : in Bounded_String;
!          Right : in String)
!          return  Boolean;
  
        function ">="
!         (Left  : in String;
!          Right : in Bounded_String)
!          return  Boolean;
  
        ----------------------
        -- Search Functions --
        ----------------------
  
        function Index
!         (Source  : in Bounded_String;
!          Pattern : in String;
!          Going   : in Direction := Forward;
!          Mapping : in Maps.Character_Mapping := Maps.Identity)
!          return    Natural;
  
        function Index
!         (Source  : in Bounded_String;
!          Pattern : in String;
!          Going   : in Direction := Forward;
!          Mapping : in Maps.Character_Mapping_Function)
!          return    Natural;
  
        function Index
!         (Source : in Bounded_String;
!          Set    : in Maps.Character_Set;
!          Test   : in Membership := Inside;
!          Going  : in Direction  := Forward)
!          return   Natural;
  
        function Index_Non_Blank
!         (Source : in Bounded_String;
!          Going  : in Direction := Forward)
!          return   Natural;
  
        function Count
!         (Source  : in Bounded_String;
!          Pattern : in String;
!          Mapping : in Maps.Character_Mapping := Maps.Identity)
!          return    Natural;
  
        function Count
!         (Source  : in Bounded_String;
!          Pattern : in String;
!          Mapping : in Maps.Character_Mapping_Function)
!          return    Natural;
  
        function Count
!         (Source : in Bounded_String;
!          Set    : in Maps.Character_Set)
!          return   Natural;
  
        procedure Find_Token
!         (Source : in Bounded_String;
!          Set    : in Maps.Character_Set;
!          Test   : in Membership;
           First  : out Positive;
           Last   : out Natural);
  
--- 55,299 ----
  
        subtype Length_Range is Natural range 0 .. Max_Length;
  
!       function Length (Source : Bounded_String) return Length_Range;
  
        --------------------------------------------------------
        -- Conversion, Concatenation, and Selection Functions --
        --------------------------------------------------------
  
        function To_Bounded_String
!         (Source : String;
!          Drop   : Truncation := Error) return Bounded_String;
  
!       function To_String (Source : Bounded_String) return String;
! 
!       procedure Set_Bounded_String
!         (Target : out Bounded_String;
!          Source : String;
!          Drop   : Truncation := Error);
!       pragma Ada_05 (Set_Bounded_String);
  
        function Append
!         (Left  : Bounded_String;
!          Right : Bounded_String;
!          Drop  : Truncation  := Error) return Bounded_String;
  
        function Append
!         (Left  : Bounded_String;
!          Right : String;
!          Drop  : Truncation := Error) return Bounded_String;
  
        function Append
!         (Left  : String;
!          Right : Bounded_String;
!          Drop  : Truncation := Error) return Bounded_String;
  
        function Append
!         (Left  : Bounded_String;
!          Right : Character;
!          Drop  : Truncation := Error) return Bounded_String;
  
        function Append
!         (Left  : Character;
!          Right : Bounded_String;
!          Drop  : Truncation := Error) return Bounded_String;
  
        procedure Append
          (Source   : in out Bounded_String;
!          New_Item : Bounded_String;
!          Drop     : Truncation  := Error);
  
        procedure Append
          (Source   : in out Bounded_String;
!          New_Item : String;
!          Drop     : Truncation  := Error);
  
        procedure Append
          (Source   : in out Bounded_String;
!          New_Item : Character;
!          Drop     : Truncation  := Error);
  
        function "&"
!         (Left  : Bounded_String;
!          Right : Bounded_String) return Bounded_String;
  
        function "&"
!         (Left  : Bounded_String;
!          Right : String) return Bounded_String;
  
        function "&"
!         (Left  : String;
!          Right : Bounded_String) return Bounded_String;
  
        function "&"
!         (Left  : Bounded_String;
!          Right : Character) return Bounded_String;
  
        function "&"
!         (Left  : Character;
!          Right : Bounded_String) return Bounded_String;
  
        function Element
!         (Source : Bounded_String;
!          Index  : Positive) return Character;
  
        procedure Replace_Element
          (Source : in out Bounded_String;
!          Index  : Positive;
!          By     : Character);
  
        function Slice
!         (Source : Bounded_String;
!          Low    : Positive;
!          High   : Natural) return String;
  
!       function Bounded_Slice
!         (Source : Bounded_String;
!          Low    : Positive;
!          High   : Natural) return Bounded_String;
!       pragma Ada_05 (Bounded_Slice);
! 
!       procedure Bounded_Slice
!         (Source : Bounded_String;
!          Target : out Bounded_String;
!          Low    : Positive;
!          High   : Natural);
!       pragma Ada_05 (Bounded_Slice);
  
        function "="
!         (Left  : Bounded_String;
!          Right : Bounded_String) return Boolean;
  
        function "="
!         (Left  : Bounded_String;
!          Right : String) return Boolean;
  
!       function "="
!         (Left  : String;
!          Right : Bounded_String) return Boolean;
  
        function "<"
!         (Left  : Bounded_String;
!          Right : Bounded_String) return Boolean;
  
        function "<"
!         (Left  : Bounded_String;
!          Right : String) return Boolean;
  
!       function "<"
!         (Left  : String;
!          Right : Bounded_String) return Boolean;
  
        function "<="
!         (Left  : Bounded_String;
!          Right : Bounded_String) return Boolean;
  
        function "<="
!         (Left  : Bounded_String;
!          Right : String) return Boolean;
  
!       function "<="
!         (Left  : String;
!          Right : Bounded_String) return Boolean;
  
        function ">"
!         (Left  : Bounded_String;
!          Right : Bounded_String) return Boolean;
  
        function ">"
!         (Left  : Bounded_String;
!          Right : String) return Boolean;
  
!       function ">"
!         (Left  : String;
!          Right : Bounded_String) return Boolean;
  
        function ">="
!         (Left  : Bounded_String;
!          Right : Bounded_String) return Boolean;
  
        function ">="
!         (Left  : Bounded_String;
!          Right : String) return Boolean;
! 
!       function ">="
!         (Left  : String;
!          Right : Bounded_String) return Boolean;
  
        ----------------------
        -- Search Functions --
        ----------------------
  
        function Index
!         (Source  : Bounded_String;
!          Pattern : String;
!          Going   : Direction := Forward;
!          Mapping : Maps.Character_Mapping := Maps.Identity) return Natural;
  
        function Index
!         (Source  : Bounded_String;
!          Pattern : String;
!          Going   : Direction := Forward;
!          Mapping : Maps.Character_Mapping_Function) return Natural;
  
        function Index
!         (Source : Bounded_String;
!          Set    : Maps.Character_Set;
!          Test   : Membership := Inside;
!          Going  : Direction  := Forward) return Natural;
! 
!       function Index
!         (Source  : Bounded_String;
!          Pattern : String;
!          From    : Positive;
!          Going   : Direction := Forward;
!          Mapping : Maps.Character_Mapping := Maps.Identity) return Natural;
!       pragma Ada_05 (Index);
! 
!       function Index
!         (Source  : Bounded_String;
!          Pattern : String;
!          From    : Positive;
!          Going   : Direction := Forward;
!          Mapping : Maps.Character_Mapping_Function) return Natural;
!       pragma Ada_05 (Index);
! 
!       function Index
!         (Source  : Bounded_String;
!          Set     : Maps.Character_Set;
!          From    : Positive;
!          Test    : Membership := Inside;
!          Going   : Direction := Forward) return Natural;
!       pragma Ada_05 (Index);
  
        function Index_Non_Blank
!         (Source : Bounded_String;
!          Going  : Direction := Forward) return Natural;
! 
!       function Index_Non_Blank
!         (Source : Bounded_String;
!          From   : Positive;
!          Going  : Direction := Forward) return Natural;
!       pragma Ada_05 (Index_Non_Blank);
  
        function Count
!         (Source  : Bounded_String;
!          Pattern : String;
!          Mapping : Maps.Character_Mapping := Maps.Identity) return Natural;
  
        function Count
!         (Source  : Bounded_String;
!          Pattern : String;
!          Mapping : Maps.Character_Mapping_Function) return Natural;
  
        function Count
!         (Source : Bounded_String;
!          Set    : Maps.Character_Set) return Natural;
  
        procedure Find_Token
!         (Source : Bounded_String;
!          Set    : Maps.Character_Set;
!          Test   : Membership;
           First  : out Positive;
           Last   : out Natural);
  
*************** pragma Preelaborate (Bounded);
*** 271,839 ****
        ------------------------------------
  
        function Translate
!         (Source   : in Bounded_String;
!          Mapping  : in Maps.Character_Mapping)
!          return     Bounded_String;
  
        procedure Translate
          (Source   : in out Bounded_String;
!          Mapping  : in Maps.Character_Mapping);
  
        function Translate
!         (Source  : in Bounded_String;
!          Mapping : in Maps.Character_Mapping_Function)
!          return    Bounded_String;
  
        procedure Translate
          (Source  : in out Bounded_String;
!          Mapping : in Maps.Character_Mapping_Function);
  
        ---------------------------------------
        -- String Transformation Subprograms --
        ---------------------------------------
  
        function Replace_Slice
!         (Source   : in Bounded_String;
!          Low      : in Positive;
!          High     : in Natural;
!          By       : in String;
!          Drop     : in Truncation := Error)
!          return     Bounded_String;
  
        procedure Replace_Slice
          (Source   : in out Bounded_String;
!          Low      : in Positive;
!          High     : in Natural;
!          By       : in String;
!          Drop     : in Truncation := Error);
  
        function Insert
!         (Source   : in Bounded_String;
!          Before   : in Positive;
!          New_Item : in String;
!          Drop     : in Truncation := Error)
!          return     Bounded_String;
  
        procedure Insert
          (Source   : in out Bounded_String;
!          Before   : in Positive;
!          New_Item : in String;
!          Drop     : in Truncation := Error);
  
        function Overwrite
!         (Source    : in Bounded_String;
!          Position  : in Positive;
!          New_Item  : in String;
!          Drop      : in Truncation := Error)
!          return      Bounded_String;
  
        procedure Overwrite
          (Source    : in out Bounded_String;
!          Position  : in Positive;
!          New_Item  : in String;
!          Drop      : in Truncation := Error);
  
        function Delete
!         (Source  : in Bounded_String;
!          From    : in Positive;
!          Through : in Natural)
!          return    Bounded_String;
  
        procedure Delete
          (Source  : in out Bounded_String;
!          From    : in Positive;
!          Through : in Natural);
  
        ---------------------------------
        -- String Selector Subprograms --
        ---------------------------------
  
        function Trim
!         (Source : in Bounded_String;
!          Side   : in Trim_End)
!          return   Bounded_String;
  
        procedure Trim
          (Source : in out Bounded_String;
!          Side   : in Trim_End);
  
        function Trim
!         (Source  : in Bounded_String;
!           Left   : in Maps.Character_Set;
!           Right  : in Maps.Character_Set)
!           return   Bounded_String;
  
        procedure Trim
          (Source : in out Bounded_String;
!          Left   : in Maps.Character_Set;
!          Right  : in Maps.Character_Set);
  
        function Head
!         (Source : in Bounded_String;
!          Count  : in Natural;
!          Pad    : in Character := Space;
!          Drop   : in Truncation := Error)
!          return   Bounded_String;
  
        procedure Head
          (Source : in out Bounded_String;
!          Count  : in Natural;
!          Pad    : in Character  := Space;
!          Drop   : in Truncation := Error);
  
        function Tail
!         (Source : in Bounded_String;
!          Count  : in Natural;
!          Pad    : in Character  := Space;
!          Drop   : in Truncation := Error)
!          return Bounded_String;
  
        procedure Tail
          (Source : in out Bounded_String;
!          Count  : in Natural;
!          Pad    : in Character  := Space;
!          Drop   : in Truncation := Error);
  
        ------------------------------------
        -- String Constructor Subprograms --
        ------------------------------------
  
        function "*"
!         (Left  : in Natural;
!          Right : in Character)
!          return  Bounded_String;
  
        function "*"
!         (Left  : in Natural;
!          Right : in String)
!          return  Bounded_String;
  
        function "*"
!         (Left  : in Natural;
!          Right : in Bounded_String)
!          return  Bounded_String;
  
        function Replicate
!         (Count : in Natural;
!          Item  : in Character;
!          Drop  : in Truncation := Error)
!          return  Bounded_String;
  
        function Replicate
!         (Count : in Natural;
!          Item  : in String;
!          Drop  : in Truncation := Error)
!          return  Bounded_String;
  
        function Replicate
!         (Count : in Natural;
!          Item  : in Bounded_String;
!          Drop  : in Truncation := Error)
!          return  Bounded_String;
  
     private
! 
!       --  Most of the implementation is in the non generic package
        --  Ada.Strings.Superbounded. Type Bounded_String is derived from type
!       --  Superbounded.Super_String with the maximum length constraint.
!       --  Except for five, all subprograms are renames of subprograms that
!       --  are inherited from Superbounded.Super_String.
  
        type Bounded_String is new Superbounded.Super_String (Max_Length);
  
        Null_Bounded_String : constant Bounded_String :=
!         (Max_Length     => Max_Length,
!          Current_Length => 0,
!          Data           => (1 .. Max_Length => ASCII.NUL));
  
        pragma Inline (To_Bounded_String);
  
!       function Length (Source : in Bounded_String) return Length_Range
!         renames Super_Length;
  
!       function To_String (Source : in Bounded_String) return String
!         renames Super_To_String;
  
        function Append
!         (Left, Right : in Bounded_String;
!          Drop        : in Truncation  := Error)
!          return        Bounded_String
!         renames Super_Append;
  
        function Append
!         (Left  : in Bounded_String;
!          Right : in String;
!          Drop  : in Truncation := Error)
!          return  Bounded_String
!         renames Super_Append;
  
        function Append
!         (Left  : in String;
!          Right : in Bounded_String;
!          Drop  : in Truncation := Error)
!          return  Bounded_String
!         renames Super_Append;
  
        function Append
!         (Left  : in Bounded_String;
!          Right : in Character;
!          Drop  : in Truncation := Error)
!          return  Bounded_String
!         renames Super_Append;
  
        function Append
!         (Left  : in Character;
!          Right : in Bounded_String;
!          Drop  : in Truncation := Error)
!          return  Bounded_String
!         renames Super_Append;
  
        procedure Append
          (Source   : in out Bounded_String;
!          New_Item : in Bounded_String;
!          Drop     : in Truncation  := Error)
!         renames Super_Append;
  
        procedure Append
          (Source   : in out Bounded_String;
!          New_Item : in String;
!          Drop     : in Truncation  := Error)
!         renames Super_Append;
  
        procedure Append
          (Source   : in out Bounded_String;
!          New_Item : in Character;
!          Drop     : in Truncation  := Error)
!         renames Super_Append;
  
        function "&"
!         (Left, Right : in Bounded_String)
!          return        Bounded_String
!         renames Concat;
  
        function "&"
!         (Left  : in Bounded_String;
!          Right : in String)
!          return  Bounded_String
!         renames Concat;
  
        function "&"
!         (Left  : in String;
!          Right : in Bounded_String)
!          return  Bounded_String
!         renames Concat;
  
        function "&"
!         (Left  : in Bounded_String;
!          Right : in Character)
!          return  Bounded_String
!         renames Concat;
  
        function "&"
!         (Left  : in Character;
!          Right : in Bounded_String)
!          return  Bounded_String
!         renames Concat;
  
        function Element
!         (Source : in Bounded_String;
!          Index  : in Positive)
!          return   Character
!         renames Super_Element;
  
        procedure Replace_Element
          (Source : in out Bounded_String;
!          Index  : in Positive;
!          By     : in Character)
!         renames Super_Replace_Element;
  
        function Slice
!         (Source : in Bounded_String;
!          Low    : in Positive;
!          High   : in Natural)
!          return   String
!         renames Super_Slice;
  
!       function "="  (Left, Right : in Bounded_String) return Boolean
!         renames Equal;
  
        function "="
!         (Left  : in Bounded_String;
!          Right : in String)
!          return  Boolean
!         renames Equal;
  
        function "="
!         (Left  : in String;
!          Right : in Bounded_String)
!          return  Boolean
!         renames Equal;
  
!       function "<"  (Left, Right : in Bounded_String) return Boolean
!         renames Less;
  
        function "<"
!         (Left  : in Bounded_String;
!          Right : in String)
!          return  Boolean
!         renames Less;
  
        function "<"
!         (Left  : in String;
!          Right : in Bounded_String)
!          return  Boolean
!         renames Less;
  
!       function "<=" (Left, Right : in Bounded_String) return Boolean
!         renames Less_Or_Equal;
  
        function "<="
!         (Left  : in Bounded_String;
!          Right : in String)
!          return  Boolean
!         renames Less_Or_Equal;
  
        function "<="
!         (Left  : in String;
!          Right : in Bounded_String)
!          return  Boolean
!         renames Less_Or_Equal;
  
!       function ">"  (Left, Right : in Bounded_String) return Boolean
!         renames Greater;
  
        function ">"
!         (Left  : in Bounded_String;
!          Right : in String)
!          return  Boolean
!         renames Greater;
  
        function ">"
!         (Left  : in String;
!          Right : in Bounded_String)
!          return  Boolean
!         renames Greater;
  
!       function ">=" (Left, Right : in Bounded_String) return Boolean
!         renames Greater_Or_Equal;
  
        function ">="
!         (Left  : in Bounded_String;
!          Right : in String)
!          return  Boolean
!         renames Greater_Or_Equal;
  
        function ">="
!         (Left  : in String;
!          Right : in Bounded_String)
!          return  Boolean
!         renames Greater_Or_Equal;
  
        function Index
!         (Source  : in Bounded_String;
!          Pattern : in String;
!          Going   : in Direction := Forward;
!          Mapping : in Maps.Character_Mapping := Maps.Identity)
!          return    Natural
!         renames Super_Index;
  
        function Index
!         (Source  : in Bounded_String;
!          Pattern : in String;
!          Going   : in Direction := Forward;
!          Mapping : in Maps.Character_Mapping_Function)
!          return    Natural
!         renames Super_Index;
  
        function Index
!         (Source : in Bounded_String;
!          Set    : in Maps.Character_Set;
!          Test   : in Membership := Inside;
!          Going  : in Direction  := Forward)
!          return   Natural
!         renames Super_Index;
  
        function Index_Non_Blank
!         (Source : in Bounded_String;
!          Going  : in Direction := Forward)
!          return   Natural
!         renames Super_Index_Non_Blank;
  
        function Count
!         (Source  : in Bounded_String;
!          Pattern : in String;
!          Mapping : in Maps.Character_Mapping := Maps.Identity)
!          return    Natural
!         renames Super_Count;
  
        function Count
!         (Source  : in Bounded_String;
!          Pattern : in String;
!          Mapping : in Maps.Character_Mapping_Function)
!          return    Natural
!         renames Super_Count;
  
        function Count
!         (Source : in Bounded_String;
!          Set    : in Maps.Character_Set)
!          return   Natural
!         renames Super_Count;
  
        procedure Find_Token
!         (Source : in Bounded_String;
!          Set    : in Maps.Character_Set;
!          Test   : in Membership;
           First  : out Positive;
           Last   : out Natural)
!         renames Super_Find_Token;
  
        function Translate
!         (Source   : in Bounded_String;
!          Mapping  : in Maps.Character_Mapping)
!          return     Bounded_String
!         renames Super_Translate;
  
        procedure Translate
          (Source   : in out Bounded_String;
!          Mapping  : in Maps.Character_Mapping)
!         renames Super_Translate;
  
        function Translate
!         (Source  : in Bounded_String;
!          Mapping : in Maps.Character_Mapping_Function)
!          return    Bounded_String
!         renames Super_Translate;
  
        procedure Translate
          (Source  : in out Bounded_String;
!          Mapping : in Maps.Character_Mapping_Function)
!         renames Super_Translate;
  
        function Replace_Slice
!         (Source   : in Bounded_String;
!          Low      : in Positive;
!          High     : in Natural;
!          By       : in String;
!          Drop     : in Truncation := Error)
!          return     Bounded_String
!         renames Super_Replace_Slice;
  
        procedure Replace_Slice
          (Source   : in out Bounded_String;
!          Low      : in Positive;
!          High     : in Natural;
!          By       : in String;
!          Drop     : in Truncation := Error)
!         renames Super_Replace_Slice;
  
        function Insert
!         (Source   : in Bounded_String;
!          Before   : in Positive;
!          New_Item : in String;
!          Drop     : in Truncation := Error)
!          return     Bounded_String
!         renames Super_Insert;
  
        procedure Insert
          (Source   : in out Bounded_String;
!          Before   : in Positive;
!          New_Item : in String;
!          Drop     : in Truncation := Error)
!         renames Super_Insert;
  
        function Overwrite
!         (Source    : in Bounded_String;
!          Position  : in Positive;
!          New_Item  : in String;
!          Drop      : in Truncation := Error)
!          return      Bounded_String
!         renames Super_Overwrite;
  
        procedure Overwrite
          (Source    : in out Bounded_String;
!          Position  : in Positive;
!          New_Item  : in String;
!          Drop      : in Truncation := Error)
!         renames Super_Overwrite;
  
        function Delete
!         (Source  : in Bounded_String;
!          From    : in Positive;
!          Through : in Natural)
!          return    Bounded_String
!         renames Super_Delete;
  
        procedure Delete
          (Source  : in out Bounded_String;
!          From    : in Positive;
!          Through : in Natural)
!         renames Super_Delete;
  
        function Trim
!         (Source : in Bounded_String;
!          Side   : in Trim_End)
!          return   Bounded_String
!         renames Super_Trim;
  
        procedure Trim
          (Source : in out Bounded_String;
!          Side   : in Trim_End)
!         renames Super_Trim;
  
        function Trim
!         (Source  : in Bounded_String;
!           Left   : in Maps.Character_Set;
!           Right  : in Maps.Character_Set)
!           return   Bounded_String
!         renames Super_Trim;
  
        procedure Trim
          (Source : in out Bounded_String;
!          Left   : in Maps.Character_Set;
!          Right  : in Maps.Character_Set)
!         renames Super_Trim;
  
        function Head
!         (Source : in Bounded_String;
!          Count  : in Natural;
!          Pad    : in Character := Space;
!          Drop   : in Truncation := Error)
!          return   Bounded_String
!         renames Super_Head;
  
        procedure Head
          (Source : in out Bounded_String;
!          Count  : in Natural;
!          Pad    : in Character  := Space;
!          Drop   : in Truncation := Error)
!         renames Super_Head;
  
        function Tail
!         (Source : in Bounded_String;
!          Count  : in Natural;
!          Pad    : in Character  := Space;
!          Drop   : in Truncation := Error)
!          return Bounded_String
!         renames Super_Tail;
  
        procedure Tail
          (Source : in out Bounded_String;
!          Count  : in Natural;
!          Pad    : in Character  := Space;
!          Drop   : in Truncation := Error)
!         renames Super_Tail;
  
        function "*"
!         (Left  : in Natural;
!          Right : in Bounded_String)
!          return  Bounded_String
!         renames Times;
  
        function Replicate
!         (Count : in Natural;
!          Item  : in Bounded_String;
!          Drop  : in Truncation := Error)
!          return  Bounded_String
           renames Super_Replicate;
  
     end Generic_Bounded_Length;
--- 302,889 ----
        ------------------------------------
  
        function Translate
!         (Source  : Bounded_String;
!          Mapping : Maps.Character_Mapping) return Bounded_String;
  
        procedure Translate
          (Source   : in out Bounded_String;
!          Mapping  : Maps.Character_Mapping);
  
        function Translate
!         (Source  : Bounded_String;
!          Mapping : Maps.Character_Mapping_Function) return Bounded_String;
  
        procedure Translate
          (Source  : in out Bounded_String;
!          Mapping : Maps.Character_Mapping_Function);
  
        ---------------------------------------
        -- String Transformation Subprograms --
        ---------------------------------------
  
        function Replace_Slice
!         (Source : Bounded_String;
!          Low    : Positive;
!          High   : Natural;
!          By     : String;
!          Drop   : Truncation := Error) return Bounded_String;
  
        procedure Replace_Slice
          (Source   : in out Bounded_String;
!          Low      : Positive;
!          High     : Natural;
!          By       : String;
!          Drop     : Truncation := Error);
  
        function Insert
!         (Source   : Bounded_String;
!          Before   : Positive;
!          New_Item : String;
!          Drop     : Truncation := Error) return Bounded_String;
  
        procedure Insert
          (Source   : in out Bounded_String;
!          Before   : Positive;
!          New_Item : String;
!          Drop     : Truncation := Error);
  
        function Overwrite
!         (Source   : Bounded_String;
!          Position : Positive;
!          New_Item : String;
!          Drop     : Truncation := Error) return Bounded_String;
  
        procedure Overwrite
          (Source    : in out Bounded_String;
!          Position  : Positive;
!          New_Item  : String;
!          Drop      : Truncation := Error);
  
        function Delete
!         (Source  : Bounded_String;
!          From    : Positive;
!          Through : Natural) return Bounded_String;
  
        procedure Delete
          (Source  : in out Bounded_String;
!          From    : Positive;
!          Through : Natural);
  
        ---------------------------------
        -- String Selector Subprograms --
        ---------------------------------
  
        function Trim
!         (Source : Bounded_String;
!          Side   : Trim_End) return Bounded_String;
  
        procedure Trim
          (Source : in out Bounded_String;
!          Side   : Trim_End);
  
        function Trim
!         (Source : Bounded_String;
!           Left  : Maps.Character_Set;
!           Right : Maps.Character_Set) return Bounded_String;
  
        procedure Trim
          (Source : in out Bounded_String;
!          Left   : Maps.Character_Set;
!          Right  : Maps.Character_Set);
  
        function Head
!         (Source : Bounded_String;
!          Count  : Natural;
!          Pad    : Character := Space;
!          Drop   : Truncation := Error) return Bounded_String;
  
        procedure Head
          (Source : in out Bounded_String;
!          Count  : Natural;
!          Pad    : Character  := Space;
!          Drop   : Truncation := Error);
  
        function Tail
!         (Source : Bounded_String;
!          Count  : Natural;
!          Pad    : Character  := Space;
!          Drop   : Truncation := Error) return Bounded_String;
  
        procedure Tail
          (Source : in out Bounded_String;
!          Count  : Natural;
!          Pad    : Character  := Space;
!          Drop   : Truncation := Error);
  
        ------------------------------------
        -- String Constructor Subprograms --
        ------------------------------------
  
        function "*"
!         (Left  : Natural;
!          Right : Character) return Bounded_String;
  
        function "*"
!         (Left  : Natural;
!          Right : String) return Bounded_String;
  
        function "*"
!         (Left  : Natural;
!          Right : Bounded_String) return Bounded_String;
  
        function Replicate
!         (Count : Natural;
!          Item  : Character;
!          Drop  : Truncation := Error) return Bounded_String;
  
        function Replicate
!         (Count : Natural;
!          Item  : String;
!          Drop  : Truncation := Error) return Bounded_String;
  
        function Replicate
!         (Count : Natural;
!          Item  : Bounded_String;
!          Drop  : Truncation := Error) return Bounded_String;
  
     private
!       --  Most of the implementation is in the separate non generic package
        --  Ada.Strings.Superbounded. Type Bounded_String is derived from type
!       --  Superbounded.Super_String with the maximum length constraint. In
!       --  almost all cases, the routines in Superbounded can be called with
!       --  no requirement to pass the maximum length explicitly, since there
!       --  is at least one Bounded_String argument from which the maximum
!       --  length can be obtained. For all such routines, the implementation
!       --  in this private part is simply a renaming of the corresponding
!       --  routine in the super bouded package.
! 
!       --  The five exceptions are the * and Replicate routines operating on
!       --  character values. For these cases, we have a routine in the body
!       --  that calls the superbounded routine passing the maximum length
!       --  explicitly as an extra parameter.
  
        type Bounded_String is new Superbounded.Super_String (Max_Length);
+       --  Deriving Bounded_String from Superbounded.Super_String is the
+       --  real trick, it ensures that the type Bounded_String declared in
+       --  the generic instantiation is compatible with the Super_String
+       --  type declared in the Superbounded package.
  
        Null_Bounded_String : constant Bounded_String :=
!                               (Max_Length     => Max_Length,
!                                Current_Length => 0,
!                                Data           =>
!                                  (1 .. Max_Length => ASCII.NUL));
  
        pragma Inline (To_Bounded_String);
  
!       procedure Set_Bounded_String
!         (Target : out Bounded_String;
!          Source : String;
!          Drop   : Truncation := Error)
!          renames Set_Super_String;
  
!       function Length
!         (Source : Bounded_String) return Length_Range
!          renames Super_Length;
! 
!       function To_String
!         (Source : Bounded_String) return String
!          renames Super_To_String;
  
        function Append
!         (Left  : Bounded_String;
!          Right : Bounded_String;
!          Drop  : Truncation  := Error) return Bounded_String
!          renames Super_Append;
  
        function Append
!         (Left  : Bounded_String;
!          Right : String;
!          Drop  : Truncation := Error) return Bounded_String
!          renames Super_Append;
  
        function Append
!         (Left  : String;
!          Right : Bounded_String;
!          Drop  : Truncation := Error) return Bounded_String
!          renames Super_Append;
  
        function Append
!         (Left  : Bounded_String;
!          Right : Character;
!          Drop  : Truncation := Error) return Bounded_String
!          renames Super_Append;
  
        function Append
!         (Left  : Character;
!          Right : Bounded_String;
!          Drop  : Truncation := Error) return Bounded_String
!          renames Super_Append;
  
        procedure Append
          (Source   : in out Bounded_String;
!          New_Item : Bounded_String;
!          Drop     : Truncation  := Error)
!          renames Super_Append;
  
        procedure Append
          (Source   : in out Bounded_String;
!          New_Item : String;
!          Drop     : Truncation  := Error)
!          renames Super_Append;
  
        procedure Append
          (Source   : in out Bounded_String;
!          New_Item : Character;
!          Drop     : Truncation  := Error)
!          renames Super_Append;
  
        function "&"
!         (Left  : Bounded_String;
!          Right : Bounded_String) return Bounded_String
!          renames Concat;
  
        function "&"
!         (Left  : Bounded_String;
!          Right : String) return Bounded_String
!          renames Concat;
  
        function "&"
!         (Left  : String;
!          Right : Bounded_String) return Bounded_String
!          renames Concat;
  
        function "&"
!         (Left  : Bounded_String;
!          Right : Character) return Bounded_String
!          renames Concat;
  
        function "&"
!         (Left  : Character;
!          Right : Bounded_String) return Bounded_String
!          renames Concat;
  
        function Element
!         (Source : Bounded_String;
!          Index  : Positive) return Character
!          renames Super_Element;
  
        procedure Replace_Element
          (Source : in out Bounded_String;
!          Index  : Positive;
!          By     : Character)
!          renames Super_Replace_Element;
  
        function Slice
!         (Source : Bounded_String;
!          Low    : Positive;
!          High   : Natural) return String
!          renames Super_Slice;
  
!       function Bounded_Slice
!         (Source : Bounded_String;
!          Low    : Positive;
!          High   : Natural) return Bounded_String
!          renames Super_Slice;
! 
!       procedure Bounded_Slice
!         (Source : Bounded_String;
!          Target : out Bounded_String;
!          Low    : Positive;
!          High   : Natural)
!          renames Super_Slice;
  
        function "="
!         (Left  : Bounded_String;
!          Right : Bounded_String) return Boolean
!          renames Equal;
  
        function "="
!         (Left  : Bounded_String;
!          Right : String) return Boolean
!          renames Equal;
  
!       function "="
!         (Left  : String;
!          Right : Bounded_String) return Boolean
!          renames Equal;
  
        function "<"
!         (Left  : Bounded_String;
!          Right : Bounded_String) return Boolean
!          renames Less;
  
        function "<"
!         (Left  : Bounded_String;
!          Right : String) return Boolean
!          renames Less;
  
!       function "<"
!         (Left  : String;
!          Right : Bounded_String) return Boolean
!          renames Less;
  
        function "<="
!         (Left  : Bounded_String;
!          Right : Bounded_String) return Boolean
!          renames Less_Or_Equal;
  
        function "<="
!         (Left  : Bounded_String;
!          Right : String) return Boolean
!          renames Less_Or_Equal;
  
!       function "<="
!         (Left  : String;
!          Right : Bounded_String) return Boolean
!          renames Less_Or_Equal;
  
        function ">"
!         (Left  : Bounded_String;
!          Right : Bounded_String) return Boolean
!          renames Greater;
  
        function ">"
!         (Left  : Bounded_String;
!          Right : String) return Boolean
!          renames Greater;
  
!       function ">"
!         (Left  : String;
!          Right : Bounded_String) return Boolean
!          renames Greater;
  
        function ">="
!         (Left  : Bounded_String;
!          Right : Bounded_String) return Boolean
!          renames Greater_Or_Equal;
  
        function ">="
!         (Left  : Bounded_String;
!          Right : String) return Boolean
!          renames Greater_Or_Equal;
! 
!       function ">="
!         (Left  : String;
!          Right : Bounded_String) return Boolean
!          renames Greater_Or_Equal;
  
        function Index
!         (Source  : Bounded_String;
!          Pattern : String;
!          Going   : Direction := Forward;
!          Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
!          renames Super_Index;
  
        function Index
!         (Source  : Bounded_String;
!          Pattern : String;
!          Going   : Direction := Forward;
!          Mapping : Maps.Character_Mapping_Function) return Natural
!          renames Super_Index;
  
        function Index
!         (Source : Bounded_String;
!          Set    : Maps.Character_Set;
!          Test   : Membership := Inside;
!          Going  : Direction  := Forward) return Natural
!          renames Super_Index;
! 
!       function Index
!         (Source  : Bounded_String;
!          Pattern : String;
!          From    : Positive;
!          Going   : Direction := Forward;
!          Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
!          renames Super_Index;
! 
!       function Index
!         (Source  : Bounded_String;
!          Pattern : String;
!          From    : Positive;
!          Going   : Direction := Forward;
!          Mapping : Maps.Character_Mapping_Function) return Natural
!       renames Super_Index;
! 
!       function Index
!         (Source  : Bounded_String;
!          Set     : Maps.Character_Set;
!          From    : Positive;
!          Test    : Membership := Inside;
!          Going   : Direction := Forward) return Natural
!       renames Super_Index;
  
        function Index_Non_Blank
!         (Source : Bounded_String;
!          Going  : Direction := Forward) return Natural
!          renames Super_Index_Non_Blank;
! 
!       function Index_Non_Blank
!         (Source : Bounded_String;
!          From   : Positive;
!          Going  : Direction := Forward) return Natural
!          renames Super_Index_Non_Blank;
  
        function Count
!         (Source  : Bounded_String;
!          Pattern : String;
!          Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
!          renames Super_Count;
  
        function Count
!         (Source  : Bounded_String;
!          Pattern : String;
!          Mapping : Maps.Character_Mapping_Function) return Natural
!          renames Super_Count;
  
        function Count
!         (Source : Bounded_String;
!          Set    : Maps.Character_Set) return Natural
!          renames Super_Count;
  
        procedure Find_Token
!         (Source : Bounded_String;
!          Set    : Maps.Character_Set;
!          Test   : Membership;
           First  : out Positive;
           Last   : out Natural)
!          renames Super_Find_Token;
  
        function Translate
!         (Source  : Bounded_String;
!          Mapping : Maps.Character_Mapping) return Bounded_String
!          renames Super_Translate;
  
        procedure Translate
          (Source   : in out Bounded_String;
!          Mapping  : Maps.Character_Mapping)
!          renames Super_Translate;
  
        function Translate
!         (Source  : Bounded_String;
!          Mapping : Maps.Character_Mapping_Function) return Bounded_String
!          renames Super_Translate;
  
        procedure Translate
          (Source  : in out Bounded_String;
!          Mapping : Maps.Character_Mapping_Function)
!          renames Super_Translate;
  
        function Replace_Slice
!         (Source : Bounded_String;
!          Low    : Positive;
!          High   : Natural;
!          By     : String;
!          Drop   : Truncation := Error) return Bounded_String
!          renames Super_Replace_Slice;
  
        procedure Replace_Slice
          (Source   : in out Bounded_String;
!          Low      : Positive;
!          High     : Natural;
!          By       : String;
!          Drop     : Truncation := Error)
!          renames Super_Replace_Slice;
  
        function Insert
!         (Source   : Bounded_String;
!          Before   : Positive;
!          New_Item : String;
!          Drop     : Truncation := Error) return Bounded_String
!          renames Super_Insert;
  
        procedure Insert
          (Source   : in out Bounded_String;
!          Before   : Positive;
!          New_Item : String;
!          Drop     : Truncation := Error)
!          renames Super_Insert;
  
        function Overwrite
!         (Source   : Bounded_String;
!          Position : Positive;
!          New_Item : String;
!          Drop     : Truncation := Error) return Bounded_String
!          renames Super_Overwrite;
  
        procedure Overwrite
          (Source    : in out Bounded_String;
!          Position  : Positive;
!          New_Item  : String;
!          Drop      : Truncation := Error)
!          renames Super_Overwrite;
  
        function Delete
!         (Source  : Bounded_String;
!          From    : Positive;
!          Through : Natural) return Bounded_String
!          renames Super_Delete;
  
        procedure Delete
          (Source  : in out Bounded_String;
!          From    : Positive;
!          Through : Natural)
!          renames Super_Delete;
  
        function Trim
!         (Source : Bounded_String;
!          Side   : Trim_End) return Bounded_String
!          renames Super_Trim;
  
        procedure Trim
          (Source : in out Bounded_String;
!          Side   : Trim_End)
!          renames Super_Trim;
  
        function Trim
!         (Source : Bounded_String;
!          Left   : Maps.Character_Set;
!          Right  : Maps.Character_Set) return Bounded_String
!          renames Super_Trim;
  
        procedure Trim
          (Source : in out Bounded_String;
!          Left   : Maps.Character_Set;
!          Right  : Maps.Character_Set)
!          renames Super_Trim;
  
        function Head
!         (Source : Bounded_String;
!          Count  : Natural;
!          Pad    : Character := Space;
!          Drop   : Truncation := Error) return Bounded_String
!          renames Super_Head;
  
        procedure Head
          (Source : in out Bounded_String;
!          Count  : Natural;
!          Pad    : Character  := Space;
!          Drop   : Truncation := Error)
!          renames Super_Head;
  
        function Tail
!         (Source : Bounded_String;
!          Count  : Natural;
!          Pad    : Character  := Space;
!          Drop   : Truncation := Error) return Bounded_String
!          renames Super_Tail;
  
        procedure Tail
          (Source : in out Bounded_String;
!          Count  : Natural;
!          Pad    : Character  := Space;
!          Drop   : Truncation := Error)
!          renames Super_Tail;
  
        function "*"
!         (Left  : Natural;
!          Right : Bounded_String) return Bounded_String
!          renames Times;
  
        function Replicate
!         (Count : Natural;
!          Item  : Bounded_String;
!          Drop  : Truncation := Error) return Bounded_String
           renames Super_Replicate;
  
     end Generic_Bounded_Length;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-strfix.adb gcc-4.0.0/gcc/ada/a-strfix.adb
*** gcc-3.4.3/gcc/ada/a-strfix.adb	Tue Oct 21 13:41:54 2003
--- gcc-4.0.0/gcc/ada/a-strfix.adb	Thu Feb 10 13:51:38 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Ada.Strings.Fixed is
*** 50,108 ****
     ------------------------
  
     function Index
!      (Source   : in String;
!       Pattern  : in String;
!       Going    : in Direction := Forward;
!       Mapping  : in Maps.Character_Mapping := Maps.Identity)
!       return     Natural
     renames Ada.Strings.Search.Index;
  
     function Index
!      (Source   : in String;
!       Pattern  : in String;
!       Going    : in Direction := Forward;
!       Mapping  : in Maps.Character_Mapping_Function)
!       return     Natural
     renames Ada.Strings.Search.Index;
  
     function Index
!      (Source : in String;
!       Set    : in Maps.Character_Set;
!       Test   : in Membership := Inside;
!       Going  : in Direction  := Forward)
!       return   Natural
     renames Ada.Strings.Search.Index;
  
     function Index_Non_Blank
!      (Source : in String;
!       Going  : in Direction := Forward)
!       return   Natural
     renames Ada.Strings.Search.Index_Non_Blank;
  
     function Count
!      (Source   : in String;
!       Pattern  : in String;
!       Mapping  : in Maps.Character_Mapping := Maps.Identity)
!       return     Natural
     renames Ada.Strings.Search.Count;
  
     function Count
!      (Source   : in String;
!       Pattern  : in String;
!       Mapping  : in Maps.Character_Mapping_Function)
!       return     Natural
     renames Ada.Strings.Search.Count;
  
     function Count
!      (Source   : in String;
!       Set      : in Maps.Character_Set)
!       return     Natural
     renames Ada.Strings.Search.Count;
  
     procedure Find_Token
!      (Source : in String;
!       Set    : in Maps.Character_Set;
!       Test   : in Membership;
        First  : out Positive;
        Last   : out Natural)
     renames Ada.Strings.Search.Find_Token;
--- 50,131 ----
     ------------------------
  
     function Index
!      (Source  : String;
!       Pattern : String;
!       Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
     renames Ada.Strings.Search.Index;
  
     function Index
!      (Source  : String;
!       Pattern : String;
!       Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping_Function) return Natural
     renames Ada.Strings.Search.Index;
  
     function Index
!      (Source : String;
!       Set    : Maps.Character_Set;
!       Test   : Membership := Inside;
!       Going  : Direction  := Forward) return Natural
!    renames Ada.Strings.Search.Index;
! 
!    function Index
!      (Source  : String;
!       Pattern : String;
!       From    : Positive;
!       Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
!    renames Ada.Strings.Search.Index;
! 
!    function Index
!      (Source  : String;
!       Pattern : String;
!       From    : Positive;
!       Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping_Function) return Natural
!    renames Ada.Strings.Search.Index;
! 
!    function Index
!      (Source  : String;
!       Set     : Maps.Character_Set;
!       From    : Positive;
!       Test    : Membership := Inside;
!       Going   : Direction := Forward) return Natural
     renames Ada.Strings.Search.Index;
  
     function Index_Non_Blank
!      (Source : String;
!       Going  : Direction := Forward) return Natural
!    renames Ada.Strings.Search.Index_Non_Blank;
! 
!    function Index_Non_Blank
!      (Source : String;
!       From   : Positive;
!       Going  : Direction := Forward) return Natural
     renames Ada.Strings.Search.Index_Non_Blank;
  
     function Count
!      (Source  : String;
!       Pattern : String;
!       Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
     renames Ada.Strings.Search.Count;
  
     function Count
!      (Source  : String;
!       Pattern : String;
!       Mapping : Maps.Character_Mapping_Function) return Natural
     renames Ada.Strings.Search.Count;
  
     function Count
!      (Source : String;
!       Set    : Maps.Character_Set) return Natural
     renames Ada.Strings.Search.Count;
  
     procedure Find_Token
!      (Source : String;
!       Set    : Maps.Character_Set;
!       Test   : Membership;
        First  : out Positive;
        Last   : out Natural)
     renames Ada.Strings.Search.Find_Token;
*************** package body Ada.Strings.Fixed is
*** 112,120 ****
     ---------
  
     function "*"
!      (Left  : in Natural;
!       Right : in Character)
!       return  String
     is
        Result : String (1 .. Left);
  
--- 135,142 ----
     ---------
  
     function "*"
!      (Left  : Natural;
!       Right : Character) return String
     is
        Result : String (1 .. Left);
  
*************** package body Ada.Strings.Fixed is
*** 127,135 ****
     end "*";
  
     function "*"
!      (Left  : in Natural;
!       Right : in String)
!       return  String
     is
        Result : String (1 .. Left * Right'Length);
        Ptr    : Integer := 1;
--- 149,156 ----
     end "*";
  
     function "*"
!      (Left  : Natural;
!       Right : String) return String
     is
        Result : String (1 .. Left * Right'Length);
        Ptr    : Integer := 1;
*************** package body Ada.Strings.Fixed is
*** 148,157 ****
     ------------
  
     function Delete
!      (Source  : in String;
!       From    : in Positive;
!       Through : in Natural)
!       return    String
     is
     begin
        if From > Through then
--- 169,177 ----
     ------------
  
     function Delete
!      (Source  : String;
!       From    : Positive;
!       Through : Natural) return String
     is
     begin
        if From > Through then
*************** package body Ada.Strings.Fixed is
*** 185,194 ****
  
     procedure Delete
       (Source  : in out String;
!       From    : in Positive;
!       Through : in Natural;
!       Justify : in Alignment := Left;
!       Pad     : in Character := Space)
     is
     begin
        Move (Source  => Delete (Source, From, Through),
--- 205,214 ----
  
     procedure Delete
       (Source  : in out String;
!       From    : Positive;
!       Through : Natural;
!       Justify : Alignment := Left;
!       Pad     : Character := Space)
     is
     begin
        Move (Source  => Delete (Source, From, Through),
*************** package body Ada.Strings.Fixed is
*** 202,211 ****
     ----------
  
     function Head
!      (Source : in String;
!       Count  : in Natural;
!       Pad    : in Character := Space)
!       return   String
     is
        subtype Result_Type is String (1 .. Count);
  
--- 222,230 ----
     ----------
  
     function Head
!      (Source : String;
!       Count  : Natural;
!       Pad    : Character := Space) return String
     is
        subtype Result_Type is String (1 .. Count);
  
*************** package body Ada.Strings.Fixed is
*** 232,240 ****
  
     procedure Head
       (Source  : in out String;
!       Count   : in Natural;
!       Justify : in Alignment := Left;
!       Pad     : in Character := Space)
     is
     begin
        Move (Source  => Head (Source, Count, Pad),
--- 251,259 ----
  
     procedure Head
       (Source  : in out String;
!       Count   : Natural;
!       Justify : Alignment := Left;
!       Pad     : Character := Space)
     is
     begin
        Move (Source  => Head (Source, Count, Pad),
*************** package body Ada.Strings.Fixed is
*** 249,258 ****
     ------------
  
     function Insert
!      (Source   : in String;
!       Before   : in Positive;
!       New_Item : in String)
!       return     String
     is
        Result : String (1 .. Source'Length + New_Item'Length);
        Front  : constant Integer := Before - Source'First;
--- 268,276 ----
     ------------
  
     function Insert
!      (Source   : String;
!       Before   : Positive;
!       New_Item : String) return String
     is
        Result : String (1 .. Source'Length + New_Item'Length);
        Front  : constant Integer := Before - Source'First;
*************** package body Ada.Strings.Fixed is
*** 274,282 ****
  
     procedure Insert
       (Source   : in out String;
!       Before   : in Positive;
!       New_Item : in String;
!       Drop     : in Truncation := Error)
     is
     begin
        Move (Source => Insert (Source, Before, New_Item),
--- 292,300 ----
  
     procedure Insert
       (Source   : in out String;
!       Before   : Positive;
!       New_Item : String;
!       Drop     : Truncation := Error)
     is
     begin
        Move (Source => Insert (Source, Before, New_Item),
*************** package body Ada.Strings.Fixed is
*** 289,299 ****
     ----------
  
     procedure Move
!      (Source  : in  String;
        Target  : out String;
!       Drop    : in  Truncation := Error;
!       Justify : in  Alignment  := Left;
!       Pad     : in  Character  := Space)
     is
        Sfirst  : constant Integer := Source'First;
        Slast   : constant Integer := Source'Last;
--- 307,317 ----
     ----------
  
     procedure Move
!      (Source  : String;
        Target  : out String;
!       Drop    : Truncation := Error;
!       Justify : Alignment  := Left;
!       Pad     : Character  := Space)
     is
        Sfirst  : constant Integer := Source'First;
        Slast   : constant Integer := Source'Last;
*************** package body Ada.Strings.Fixed is
*** 398,407 ****
     ---------------
  
     function Overwrite
!      (Source   : in String;
!       Position : in Positive;
!       New_Item : in String)
!       return     String
     is
     begin
        if Position not in Source'First .. Source'Last + 1 then
--- 416,424 ----
     ---------------
  
     function Overwrite
!      (Source   : String;
!       Position : Positive;
!       New_Item : String) return String
     is
     begin
        if Position not in Source'First .. Source'Last + 1 then
*************** package body Ada.Strings.Fixed is
*** 430,438 ****
  
     procedure Overwrite
       (Source   : in out String;
!       Position : in Positive;
!       New_Item : in String;
!       Drop     : in Truncation := Right)
     is
     begin
        Move (Source => Overwrite (Source, Position, New_Item),
--- 447,455 ----
  
     procedure Overwrite
       (Source   : in out String;
!       Position : Positive;
!       New_Item : String;
!       Drop     : Truncation := Right)
     is
     begin
        Move (Source => Overwrite (Source, Position, New_Item),
*************** package body Ada.Strings.Fixed is
*** 445,455 ****
     -------------------
  
     function Replace_Slice
!      (Source   : in String;
!       Low      : in Positive;
!       High     : in Natural;
!       By       : in String)
!       return     String
     is
     begin
        if Low > Source'Last + 1 or High < Source'First - 1 then
--- 462,471 ----
     -------------------
  
     function Replace_Slice
!      (Source : String;
!       Low    : Positive;
!       High   : Natural;
!       By     : String) return String
     is
     begin
        if Low > Source'Last + 1 or High < Source'First - 1 then
*************** package body Ada.Strings.Fixed is
*** 490,501 ****
  
     procedure Replace_Slice
       (Source   : in out String;
!       Low      : in Positive;
!       High     : in Natural;
!       By       : in String;
!       Drop     : in Truncation := Error;
!       Justify  : in Alignment  := Left;
!       Pad      : in Character  := Space)
     is
     begin
        Move (Replace_Slice (Source, Low, High, By), Source, Drop, Justify, Pad);
--- 506,517 ----
  
     procedure Replace_Slice
       (Source   : in out String;
!       Low      : Positive;
!       High     : Natural;
!       By       : String;
!       Drop     : Truncation := Error;
!       Justify  : Alignment  := Left;
!       Pad      : Character  := Space)
     is
     begin
        Move (Replace_Slice (Source, Low, High, By), Source, Drop, Justify, Pad);
*************** package body Ada.Strings.Fixed is
*** 506,515 ****
     ----------
  
     function Tail
!      (Source : in String;
!       Count  : in Natural;
!       Pad    : in Character := Space)
!       return   String
     is
        subtype Result_Type is String (1 .. Count);
  
--- 522,530 ----
     ----------
  
     function Tail
!      (Source : String;
!       Count  : Natural;
!       Pad    : Character := Space) return String
     is
        subtype Result_Type is String (1 .. Count);
  
*************** package body Ada.Strings.Fixed is
*** 536,544 ****
  
     procedure Tail
       (Source  : in out String;
!       Count   : in Natural;
!       Justify : in Alignment := Left;
!       Pad     : in Character := Space)
     is
     begin
        Move (Source  => Tail (Source, Count, Pad),
--- 551,559 ----
  
     procedure Tail
       (Source  : in out String;
!       Count   : Natural;
!       Justify : Alignment := Left;
!       Pad     : Character := Space)
     is
     begin
        Move (Source  => Tail (Source, Count, Pad),
*************** package body Ada.Strings.Fixed is
*** 553,561 ****
     ---------------
  
     function Translate
!      (Source  : in String;
!       Mapping : in Maps.Character_Mapping)
!       return    String
     is
        Result : String (1 .. Source'Length);
  
--- 568,575 ----
     ---------------
  
     function Translate
!      (Source  : String;
!       Mapping : Maps.Character_Mapping) return String
     is
        Result : String (1 .. Source'Length);
  
*************** package body Ada.Strings.Fixed is
*** 569,575 ****
  
     procedure Translate
       (Source  : in out String;
!       Mapping : in Maps.Character_Mapping)
     is
     begin
        for J in Source'Range loop
--- 583,589 ----
  
     procedure Translate
       (Source  : in out String;
!       Mapping : Maps.Character_Mapping)
     is
     begin
        for J in Source'Range loop
*************** package body Ada.Strings.Fixed is
*** 578,586 ****
     end Translate;
  
     function Translate
!      (Source  : in String;
!       Mapping : in Maps.Character_Mapping_Function)
!       return    String
     is
        Result : String (1 .. Source'Length);
        pragma Unsuppress (Access_Check);
--- 592,599 ----
     end Translate;
  
     function Translate
!      (Source  : String;
!       Mapping : Maps.Character_Mapping_Function) return String
     is
        Result : String (1 .. Source'Length);
        pragma Unsuppress (Access_Check);
*************** package body Ada.Strings.Fixed is
*** 595,601 ****
  
     procedure Translate
       (Source  : in out String;
!       Mapping : in Maps.Character_Mapping_Function)
     is
        pragma Unsuppress (Access_Check);
     begin
--- 608,614 ----
  
     procedure Translate
       (Source  : in out String;
!       Mapping : Maps.Character_Mapping_Function)
     is
        pragma Unsuppress (Access_Check);
     begin
*************** package body Ada.Strings.Fixed is
*** 609,617 ****
     ----------
  
     function Trim
!      (Source : in String;
!       Side   : in Trim_End)
!       return   String
     is
        Low, High : Integer;
  
--- 622,629 ----
     ----------
  
     function Trim
!      (Source : String;
!       Side   : Trim_End) return String
     is
        Low, High : Integer;
  
*************** package body Ada.Strings.Fixed is
*** 658,666 ****
  
     procedure Trim
       (Source  : in out String;
!       Side    : in Trim_End;
!       Justify : in Alignment := Left;
!       Pad     : in Character := Space)
     is
     begin
        Move (Trim (Source, Side),
--- 670,678 ----
  
     procedure Trim
       (Source  : in out String;
!       Side    : Trim_End;
!       Justify : Alignment := Left;
!       Pad     : Character := Space)
     is
     begin
        Move (Trim (Source, Side),
*************** package body Ada.Strings.Fixed is
*** 670,679 ****
     end Trim;
  
     function Trim
!      (Source : in String;
!       Left   : in Maps.Character_Set;
!       Right  : in Maps.Character_Set)
!       return   String
     is
        High, Low : Integer;
  
--- 682,690 ----
     end Trim;
  
     function Trim
!      (Source : String;
!       Left   : Maps.Character_Set;
!       Right  : Maps.Character_Set) return String
     is
        High, Low : Integer;
  
*************** package body Ada.Strings.Fixed is
*** 705,714 ****
  
     procedure Trim
       (Source  : in out String;
!       Left    : in Maps.Character_Set;
!       Right   : in Maps.Character_Set;
!       Justify : in Alignment := Strings.Left;
!       Pad     : in Character := Space)
     is
     begin
        Move (Source  => Trim (Source, Left, Right),
--- 716,725 ----
  
     procedure Trim
       (Source  : in out String;
!       Left    : Maps.Character_Set;
!       Right   : Maps.Character_Set;
!       Justify : Alignment := Strings.Left;
!       Pad     : Character := Space)
     is
     begin
        Move (Source  => Trim (Source, Left, Right),
diff -Nrcpad gcc-3.4.3/gcc/ada/a-strfix.ads gcc-4.0.0/gcc/ada/a-strfix.ads
*** gcc-3.4.3/gcc/ada/a-strfix.ads	Thu Apr 24 17:53:54 2003
--- gcc-4.0.0/gcc/ada/a-strfix.ads	Thu Feb 10 13:51:38 2005
***************
*** 6,37 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-1997 Free Software Foundation, Inc.          --
! --                                                                          --
! -- This specification is derived from the Ada Reference Manual for use with --
! -- GNAT. The copyright notice above, and the license provisions that follow --
! -- apply solely to the  contents of the part following the private keyword. --
! --                                                                          --
! -- GNAT is free software;  you can  redistribute it  and/or modify it under --
! -- terms of the  GNU General Public License as published  by the Free Soft- --
! -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
! -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
! -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
! -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
! -- for  more details.  You should have  received  a copy of the GNU General --
! -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
! -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
! -- MA 02111-1307, USA.                                                      --
! --                                                                          --
! -- As a special exception,  if other files  instantiate  generics from this --
! -- unit, or you link  this unit with other files  to produce an executable, --
! -- this  unit  does not  by itself cause  the resulting  executable  to  be --
! -- covered  by the  GNU  General  Public  License.  This exception does not --
! -- however invalidate  any other reasons why  the executable file  might be --
! -- covered by the  GNU Public License.                                      --
! --                                                                          --
! -- GNAT was originally developed  by the GNAT team at  New York University. --
! -- Extensive contributions were provided by Ada Core Technologies Inc.      --
  --                                                                          --
  ------------------------------------------------------------------------------
  
--- 6,15 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! -- This specification is adapted from the Ada Reference Manual for use with --
! -- GNAT.  In accordance with the copyright of that document, you can freely --
! -- copy and modify this specification,  provided that if you redistribute a --
! -- modified version,  any changes that you have made are clearly indicated. --
  --                                                                          --
  ------------------------------------------------------------------------------
  
*************** pragma Preelaborate (Fixed);
*** 46,108 ****
     --------------------------------------------------------------
  
     procedure Move
!      (Source  : in  String;
        Target  : out String;
!       Drop    : in  Truncation := Error;
!       Justify : in  Alignment  := Left;
!       Pad     : in  Character  := Space);
  
     ------------------------
     -- Search Subprograms --
     ------------------------
  
     function Index
!      (Source   : in String;
!       Pattern  : in String;
!       Going    : in Direction := Forward;
!       Mapping  : in Maps.Character_Mapping := Maps.Identity)
!       return     Natural;
  
     function Index
!      (Source   : in String;
!       Pattern  : in String;
!       Going    : in Direction := Forward;
!       Mapping  : in Maps.Character_Mapping_Function)
!       return     Natural;
  
     function Index
!      (Source : in String;
!       Set    : in Maps.Character_Set;
!       Test   : in Membership := Inside;
!       Going  : in Direction  := Forward)
!       return   Natural;
  
     function Index_Non_Blank
!      (Source : in String;
!       Going  : in Direction := Forward)
!       return   Natural;
  
     function Count
!      (Source   : in String;
!       Pattern  : in String;
!       Mapping  : in Maps.Character_Mapping := Maps.Identity)
!       return     Natural;
  
     function Count
!      (Source   : in String;
!       Pattern  : in String;
!       Mapping  : in Maps.Character_Mapping_Function)
!       return     Natural;
  
     function Count
!      (Source   : in String;
!       Set      : in Maps.Character_Set)
!       return     Natural;
  
     procedure Find_Token
!      (Source : in String;
!       Set    : in Maps.Character_Set;
!       Test   : in Membership;
        First  : out Positive;
        Last   : out Natural);
  
--- 24,109 ----
     --------------------------------------------------------------
  
     procedure Move
!      (Source  : String;
        Target  : out String;
!       Drop    : Truncation := Error;
!       Justify : Alignment  := Left;
!       Pad     : Character  := Space);
  
     ------------------------
     -- Search Subprograms --
     ------------------------
  
     function Index
!      (Source  : String;
!       Pattern : String;
!       Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping := Maps.Identity) return Natural;
  
     function Index
!      (Source  : String;
!       Pattern : String;
!       Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping_Function) return Natural;
  
     function Index
!      (Source : String;
!       Set    : Maps.Character_Set;
!       Test   : Membership := Inside;
!       Going  : Direction  := Forward) return Natural;
! 
!    function Index
!      (Source  : String;
!       Pattern : String;
!       From    : Positive;
!       Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping := Maps.Identity) return Natural;
!    pragma Ada_05 (Index);
! 
!    function Index
!      (Source  : String;
!       Pattern : String;
!       From    : Positive;
!       Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping_Function) return Natural;
!    pragma Ada_05 (Index);
! 
!    function Index
!      (Source  : String;
!       Set     : Maps.Character_Set;
!       From    : Positive;
!       Test    : Membership := Inside;
!       Going   : Direction := Forward) return Natural;
!    pragma Ada_05 (Index);
  
     function Index_Non_Blank
!      (Source : String;
!       Going  : Direction := Forward) return Natural;
! 
!    function Index_Non_Blank
!      (Source : String;
!       From   : Positive;
!       Going  : Direction := Forward) return Natural;
!    pragma Ada_05 (Index_Non_Blank);
  
     function Count
!      (Source  : String;
!       Pattern : String;
!       Mapping : Maps.Character_Mapping := Maps.Identity) return Natural;
  
     function Count
!      (Source  : String;
!       Pattern : String;
!       Mapping : Maps.Character_Mapping_Function) return Natural;
  
     function Count
!      (Source : String;
!       Set    : Maps.Character_Set) return Natural;
  
     procedure Find_Token
!      (Source : String;
!       Set    : Maps.Character_Set;
!       Test   : Membership;
        First  : out Positive;
        Last   : out Natural);
  
*************** pragma Preelaborate (Fixed);
*** 111,254 ****
     ------------------------------------
  
     function Translate
!      (Source  : in String;
!       Mapping : in Maps.Character_Mapping)
!       return    String;
  
     procedure Translate
       (Source  : in out String;
!       Mapping : in Maps.Character_Mapping);
  
     function Translate
!      (Source  : in String;
!       Mapping : in Maps.Character_Mapping_Function)
!       return    String;
  
     procedure Translate
       (Source  : in out String;
!       Mapping : in Maps.Character_Mapping_Function);
  
     ---------------------------------------
     -- String Transformation Subprograms --
     ---------------------------------------
  
     function Replace_Slice
!      (Source : in String;
!       Low    : in Positive;
!       High   : in Natural;
!       By     : in String)
!       return   String;
  
     procedure Replace_Slice
       (Source  : in out String;
!       Low     : in Positive;
!       High    : in Natural;
!       By      : in String;
!       Drop    : in Truncation := Error;
!       Justify : in Alignment  := Left;
!       Pad     : in Character  := Space);
  
     function Insert
!      (Source   : in String;
!       Before   : in Positive;
!       New_Item : in String)
!       return     String;
  
     procedure Insert
       (Source   : in out String;
!       Before   : in Positive;
!       New_Item : in String;
!       Drop     : in Truncation := Error);
  
     function Overwrite
!      (Source   : in String;
!       Position : in Positive;
!       New_Item : in String)
!       return     String;
  
     procedure Overwrite
       (Source   : in out String;
!       Position : in Positive;
!       New_Item : in String;
!       Drop     : in Truncation := Right);
  
     function Delete
!      (Source  : in String;
!       From    : in Positive;
!       Through : in Natural)
!       return    String;
  
     procedure Delete
       (Source  : in out String;
!       From    : in Positive;
!       Through : in Natural;
!       Justify : in Alignment := Left;
!       Pad     : in Character := Space);
  
     ---------------------------------
     -- String Selector Subprograms --
     ---------------------------------
  
     function Trim
!      (Source : in String;
!       Side   : in Trim_End)
!       return   String;
  
     procedure Trim
       (Source  : in out String;
!       Side    : in Trim_End;
!       Justify : in Alignment := Left;
!       Pad     : in Character := Space);
  
     function Trim
!      (Source : in String;
!       Left   : in Maps.Character_Set;
!       Right  : in Maps.Character_Set)
!       return   String;
  
     procedure Trim
       (Source  : in out String;
!       Left    : in Maps.Character_Set;
!       Right   : in Maps.Character_Set;
!       Justify : in Alignment := Strings.Left;
!       Pad     : in Character := Space);
  
     function Head
!      (Source : in String;
!       Count  : in Natural;
!       Pad    : in Character := Space)
!       return   String;
  
     procedure Head
       (Source  : in out String;
!       Count   : in Natural;
!       Justify : in Alignment := Left;
!       Pad     : in Character := Space);
  
     function Tail
!      (Source : in String;
!       Count  : in Natural;
!       Pad    : in Character := Space)
!       return   String;
  
     procedure Tail
       (Source  : in out String;
!       Count   : in Natural;
!       Justify : in Alignment := Left;
!       Pad     : in Character := Space);
  
     ----------------------------------
     -- String Constructor Functions --
     ----------------------------------
  
     function "*"
!      (Left  : in Natural;
!       Right : in Character)
!       return  String;
  
     function "*"
!      (Left  : in Natural;
!       Right : in String)
!       return  String;
  
  end Ada.Strings.Fixed;
--- 112,243 ----
     ------------------------------------
  
     function Translate
!      (Source  : String;
!       Mapping : Maps.Character_Mapping) return String;
  
     procedure Translate
       (Source  : in out String;
!       Mapping : Maps.Character_Mapping);
  
     function Translate
!      (Source  : String;
!       Mapping : Maps.Character_Mapping_Function) return String;
  
     procedure Translate
       (Source  : in out String;
!       Mapping : Maps.Character_Mapping_Function);
  
     ---------------------------------------
     -- String Transformation Subprograms --
     ---------------------------------------
  
     function Replace_Slice
!      (Source : String;
!       Low    : Positive;
!       High   : Natural;
!       By     : String) return String;
  
     procedure Replace_Slice
       (Source  : in out String;
!       Low     : Positive;
!       High    : Natural;
!       By      : String;
!       Drop    : Truncation := Error;
!       Justify : Alignment  := Left;
!       Pad     : Character  := Space);
  
     function Insert
!      (Source   : String;
!       Before   : Positive;
!       New_Item : String) return String;
  
     procedure Insert
       (Source   : in out String;
!       Before   : Positive;
!       New_Item : String;
!       Drop     : Truncation := Error);
  
     function Overwrite
!      (Source   : String;
!       Position : Positive;
!       New_Item : String) return String;
  
     procedure Overwrite
       (Source   : in out String;
!       Position : Positive;
!       New_Item : String;
!       Drop     : Truncation := Right);
  
     function Delete
!      (Source  : String;
!       From    : Positive;
!       Through : Natural) return String;
  
     procedure Delete
       (Source  : in out String;
!       From    : Positive;
!       Through : Natural;
!       Justify : Alignment := Left;
!       Pad     : Character := Space);
  
     ---------------------------------
     -- String Selector Subprograms --
     ---------------------------------
  
     function Trim
!      (Source : String;
!       Side   : Trim_End) return String;
  
     procedure Trim
       (Source  : in out String;
!       Side    : Trim_End;
!       Justify : Alignment := Left;
!       Pad     : Character := Space);
  
     function Trim
!      (Source : String;
!       Left   : Maps.Character_Set;
!       Right  : Maps.Character_Set) return String;
  
     procedure Trim
       (Source  : in out String;
!       Left    : Maps.Character_Set;
!       Right   : Maps.Character_Set;
!       Justify : Alignment := Strings.Left;
!       Pad     : Character := Space);
  
     function Head
!      (Source : String;
!       Count  : Natural;
!       Pad    : Character := Space) return String;
  
     procedure Head
       (Source  : in out String;
!       Count   : Natural;
!       Justify : Alignment := Left;
!       Pad     : Character := Space);
  
     function Tail
!      (Source : String;
!       Count  : Natural;
!       Pad    : Character := Space) return String;
  
     procedure Tail
       (Source  : in out String;
!       Count   : Natural;
!       Justify : Alignment := Left;
!       Pad     : Character := Space);
  
     ----------------------------------
     -- String Constructor Functions --
     ----------------------------------
  
     function "*"
!      (Left  : Natural;
!       Right : Character) return String;
  
     function "*"
!      (Left  : Natural;
!       Right : String) return String;
  
  end Ada.Strings.Fixed;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-strhas.adb gcc-4.0.0/gcc/ada/a-strhas.adb
*** gcc-3.4.3/gcc/ada/a-strhas.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-strhas.adb	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,63 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                             ADA.STRINGS.HASH                             --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ 
+ --  Note: source of this algorithm: GNAT.HTable.Hash (g-htable.adb)
+ 
+ function Ada.Strings.Hash (Key : String) return Containers.Hash_Type is
+    use Ada.Containers;
+ 
+    function Rotate_Left
+      (Value  : Hash_Type;
+       Amount : Natural) return Hash_Type;
+    pragma Import (Intrinsic, Rotate_Left);
+ 
+    Tmp : Hash_Type;
+ 
+ begin
+    Tmp := 0;
+    for J in Key'Range loop
+       Tmp := Rotate_Left (Tmp, 1) + Character'Pos (Key (J));
+    end loop;
+ 
+    return Tmp;
+ end Ada.Strings.Hash;
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
diff -Nrcpad gcc-3.4.3/gcc/ada/a-strhas.ads gcc-4.0.0/gcc/ada/a-strhas.ads
*** gcc-3.4.3/gcc/ada/a-strhas.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-strhas.ads	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,22 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                             ADA.STRINGS.HASH                             --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ -- This specification is adapted from the Ada Reference Manual for use with --
+ -- GNAT.  In accordance with the copyright of that document, you can freely --
+ -- copy and modify this specification,  provided that if you redistribute a --
+ -- modified version,  any changes that you have made are clearly indicated. --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Containers;
+ 
+ function Ada.Strings.Hash (Key : String) return Containers.Hash_Type;
+ 
+ pragma Pure (Ada.Strings.Hash);
+ 
+ 
diff -Nrcpad gcc-3.4.3/gcc/ada/a-string.ads gcc-4.0.0/gcc/ada/a-string.ads
*** gcc-3.4.3/gcc/ada/a-string.ads	Thu Apr 24 17:53:54 2003
--- gcc-4.0.0/gcc/ada/a-string.ads	Thu Feb 10 13:50:14 2005
***************
*** 16,23 ****
  package Ada.Strings is
  pragma Pure (Strings);
  
!    Space      : constant Character      := ' ';
!    Wide_Space : constant Wide_Character := ' ';
  
     Length_Error, Pattern_Error, Index_Error, Translation_Error : exception;
  
--- 16,28 ----
  package Ada.Strings is
  pragma Pure (Strings);
  
!    Space           : constant Character           := ' ';
!    Wide_Space      : constant Wide_Character      := ' ';
! 
!    --  The following declaration is for Ada 2005 (AI-285)
! 
!    Wide_Wide_Space : constant Wide_Wide_Character := ' ';
!    pragma Ada_05 (Wide_Wide_Space);
  
     Length_Error, Pattern_Error, Index_Error, Translation_Error : exception;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/a-strmap.adb gcc-4.0.0/gcc/ada/a-strmap.adb
*** gcc-3.4.3/gcc/ada/a-strmap.adb	Tue Oct 21 13:41:54 2003
--- gcc-4.0.0/gcc/ada/a-strmap.adb	Thu Feb 10 13:51:39 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Ada.Strings.Maps is
*** 54,60 ****
     -- "=" --
     ---------
  
!    function "=" (Left, Right : in Character_Set) return Boolean is
     begin
        return Character_Set_Internal (Left) = Character_Set_Internal (Right);
     end "=";
--- 54,60 ----
     -- "=" --
     ---------
  
!    function "=" (Left, Right : Character_Set) return Boolean is
     begin
        return Character_Set_Internal (Left) = Character_Set_Internal (Right);
     end "=";
*************** package body Ada.Strings.Maps is
*** 63,69 ****
     -- "and" --
     -----------
  
!    function "and" (Left, Right : in Character_Set) return Character_Set is
     begin
        return Character_Set
          (Character_Set_Internal (Left) and Character_Set_Internal (Right));
--- 63,69 ----
     -- "and" --
     -----------
  
!    function "and" (Left, Right : Character_Set) return Character_Set is
     begin
        return Character_Set
          (Character_Set_Internal (Left) and Character_Set_Internal (Right));
*************** package body Ada.Strings.Maps is
*** 73,79 ****
     -- "not" --
     -----------
  
!    function "not" (Right : in Character_Set) return Character_Set is
     begin
        return Character_Set (not Character_Set_Internal (Right));
     end "not";
--- 73,79 ----
     -- "not" --
     -----------
  
!    function "not" (Right : Character_Set) return Character_Set is
     begin
        return Character_Set (not Character_Set_Internal (Right));
     end "not";
*************** package body Ada.Strings.Maps is
*** 82,88 ****
     -- "or" --
     ----------
  
!    function "or" (Left, Right : in Character_Set) return Character_Set is
     begin
        return Character_Set
          (Character_Set_Internal (Left) or Character_Set_Internal (Right));
--- 82,88 ----
     -- "or" --
     ----------
  
!    function "or" (Left, Right : Character_Set) return Character_Set is
     begin
        return Character_Set
          (Character_Set_Internal (Left) or Character_Set_Internal (Right));
*************** package body Ada.Strings.Maps is
*** 92,98 ****
     -- "xor" --
     -----------
  
!    function "xor" (Left, Right : in Character_Set) return Character_Set is
     begin
        return Character_Set
          (Character_Set_Internal (Left) xor Character_Set_Internal (Right));
--- 92,98 ----
     -- "xor" --
     -----------
  
!    function "xor" (Left, Right : Character_Set) return Character_Set is
     begin
        return Character_Set
          (Character_Set_Internal (Left) xor Character_Set_Internal (Right));
*************** package body Ada.Strings.Maps is
*** 104,111 ****
  
     function Is_In
       (Element : Character;
!       Set     : Character_Set)
!       return    Boolean
     is
     begin
        return Set (Element);
--- 104,110 ----
  
     function Is_In
       (Element : Character;
!       Set     : Character_Set) return Boolean
     is
     begin
        return Set (Element);
*************** package body Ada.Strings.Maps is
*** 117,124 ****
  
     function Is_Subset
       (Elements : Character_Set;
!       Set      : Character_Set)
!       return     Boolean
     is
     begin
        return (Elements and Set) = Elements;
--- 116,122 ----
  
     function Is_Subset
       (Elements : Character_Set;
!       Set      : Character_Set) return Boolean
     is
     begin
        return (Elements and Set) = Elements;
*************** package body Ada.Strings.Maps is
*** 128,134 ****
     -- To_Domain --
     ---------------
  
!    function To_Domain (Map : in Character_Mapping) return Character_Sequence
     is
        Result : String (1 .. Map'Length);
        J      : Natural;
--- 126,132 ----
     -- To_Domain --
     ---------------
  
!    function To_Domain (Map : Character_Mapping) return Character_Sequence
     is
        Result : String (1 .. Map'Length);
        J      : Natural;
*************** package body Ada.Strings.Maps is
*** 150,157 ****
     ----------------
  
     function To_Mapping
!      (From, To : in Character_Sequence)
!       return     Character_Mapping
     is
        Result   : Character_Mapping;
        Inserted : Character_Set := Null_Set;
--- 148,154 ----
     ----------------
  
     function To_Mapping
!      (From, To : Character_Sequence) return Character_Mapping
     is
        Result   : Character_Mapping;
        Inserted : Character_Set := Null_Set;
*************** package body Ada.Strings.Maps is
*** 183,193 ****
     -- To_Range --
     --------------
  
!    function To_Range (Map : in Character_Mapping) return Character_Sequence
     is
        Result : String (1 .. Map'Length);
        J      : Natural;
- 
     begin
        J := 0;
        for C in Map'Range loop
--- 180,189 ----
     -- To_Range --
     --------------
  
!    function To_Range (Map : Character_Mapping) return Character_Sequence
     is
        Result : String (1 .. Map'Length);
        J      : Natural;
     begin
        J := 0;
        for C in Map'Range loop
*************** package body Ada.Strings.Maps is
*** 204,210 ****
     -- To_Ranges --
     ---------------
  
!    function To_Ranges (Set : in Character_Set) return Character_Ranges is
        Max_Ranges : Character_Ranges (1 .. Set'Length / 2 + 1);
        Range_Num  : Natural;
        C          : Character;
--- 200,206 ----
     -- To_Ranges --
     ---------------
  
!    function To_Ranges (Set : Character_Set) return Character_Ranges is
        Max_Ranges : Character_Ranges (1 .. Set'Length / 2 + 1);
        Range_Num  : Natural;
        C          : Character;
*************** package body Ada.Strings.Maps is
*** 214,220 ****
        Range_Num := 0;
  
        loop
!          --  Skip gap between subsets.
  
           while not Set (C) loop
              exit when C = Character'Last;
--- 210,216 ----
        Range_Num := 0;
  
        loop
!          --  Skip gap between subsets
  
           while not Set (C) loop
              exit when C = Character'Last;
*************** package body Ada.Strings.Maps is
*** 226,232 ****
           Range_Num := Range_Num + 1;
           Max_Ranges (Range_Num).Low := C;
  
!          --  Span a subset.
  
           loop
              exit when not Set (C) or else C = Character'Last;
--- 222,228 ----
           Range_Num := Range_Num + 1;
           Max_Ranges (Range_Num).Low := C;
  
!          --  Span a subset
  
           loop
              exit when not Set (C) or else C = Character'Last;
*************** package body Ada.Strings.Maps is
*** 248,260 ****
     -- To_Sequence --
     -----------------
  
!    function To_Sequence
!      (Set  : Character_Set)
!       return Character_Sequence
!    is
        Result : String (1 .. Character'Pos (Character'Last) + 1);
        Count  : Natural := 0;
- 
     begin
        for Char in Set'Range loop
           if Set (Char) then
--- 244,252 ----
     -- To_Sequence --
     -----------------
  
!    function To_Sequence (Set : Character_Set) return Character_Sequence is
        Result : String (1 .. Character'Pos (Character'Last) + 1);
        Count  : Natural := 0;
     begin
        for Char in Set'Range loop
           if Set (Char) then
*************** package body Ada.Strings.Maps is
*** 270,278 ****
     -- To_Set --
     ------------
  
!    function To_Set (Ranges : in Character_Ranges) return Character_Set is
        Result : Character_Set;
- 
     begin
        for C in Result'Range loop
           Result (C) := False;
--- 262,269 ----
     -- To_Set --
     ------------
  
!    function To_Set (Ranges : Character_Ranges) return Character_Set is
        Result : Character_Set;
     begin
        for C in Result'Range loop
           Result (C) := False;
*************** package body Ada.Strings.Maps is
*** 287,295 ****
        return Result;
     end To_Set;
  
!    function To_Set (Span   : in Character_Range) return Character_Set is
        Result : Character_Set;
- 
     begin
        for C in Result'Range loop
           Result (C) := False;
--- 278,285 ----
        return Result;
     end To_Set;
  
!    function To_Set (Span : Character_Range) return Character_Set is
        Result : Character_Set;
     begin
        for C in Result'Range loop
           Result (C) := False;
*************** package body Ada.Strings.Maps is
*** 304,310 ****
  
     function To_Set (Sequence : Character_Sequence) return Character_Set is
        Result : Character_Set := Null_Set;
- 
     begin
        for J in Sequence'Range loop
           Result (Sequence (J)) := True;
--- 294,299 ----
*************** package body Ada.Strings.Maps is
*** 315,321 ****
  
     function To_Set (Singleton : Character) return Character_Set is
        Result : Character_Set := Null_Set;
- 
     begin
        Result (Singleton) := True;
        return Result;
--- 304,309 ----
*************** package body Ada.Strings.Maps is
*** 325,333 ****
     -- Value --
     -----------
  
!    function Value (Map : in Character_Mapping; Element : in Character)
!       return Character is
! 
     begin
        return Map (Element);
     end Value;
--- 313,322 ----
     -- Value --
     -----------
  
!    function Value
!      (Map     : Character_Mapping;
!       Element : Character) return Character
!    is
     begin
        return Map (Element);
     end Value;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-strmap.ads gcc-4.0.0/gcc/ada/a-strmap.ads
*** gcc-3.4.3/gcc/ada/a-strmap.ads	Thu Apr 24 17:53:54 2003
--- gcc-4.0.0/gcc/ada/a-strmap.ads	Thu Feb 10 13:51:39 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2001 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** with Ada.Characters.Latin_1;
*** 40,47 ****
  package Ada.Strings.Maps is
  pragma Preelaborate (Maps);
  
-    package L renames Ada.Characters.Latin_1;
- 
     --------------------------------
     -- Character Set Declarations --
     --------------------------------
--- 40,45 ----
*************** pragma Preelaborate (Maps);
*** 63,110 ****
  
     type Character_Ranges is array (Positive range <>) of Character_Range;
  
!    function To_Set    (Ranges : in Character_Ranges) return Character_Set;
  
!    function To_Set    (Span   : in Character_Range)  return Character_Set;
  
!    function To_Ranges (Set    : in Character_Set)    return Character_Ranges;
  
     ----------------------------------
     -- Operations on Character Sets --
     ----------------------------------
  
!    function "="   (Left, Right : in Character_Set) return Boolean;
  
!    function "not" (Right       : in Character_Set) return Character_Set;
!    function "and" (Left, Right : in Character_Set) return Character_Set;
!    function "or"  (Left, Right : in Character_Set) return Character_Set;
!    function "xor" (Left, Right : in Character_Set) return Character_Set;
!    function "-"   (Left, Right : in Character_Set) return Character_Set;
  
     function Is_In
!      (Element : in Character;
!       Set     : in Character_Set)
!       return    Boolean;
  
     function Is_Subset
!      (Elements : in Character_Set;
!       Set      : in Character_Set)
!       return     Boolean;
  
     function "<="
!      (Left  : in Character_Set;
!       Right : in Character_Set)
!       return  Boolean
     renames Is_Subset;
  
     subtype Character_Sequence is String;
     --  Alternative representation for a set of character values
  
!    function To_Set (Sequence  : in Character_Sequence) return Character_Set;
! 
!    function To_Set (Singleton : in Character)          return Character_Set;
  
!    function To_Sequence (Set : in Character_Set) return Character_Sequence;
  
     ------------------------------------
     -- Character Mapping Declarations --
--- 61,104 ----
  
     type Character_Ranges is array (Positive range <>) of Character_Range;
  
!    function To_Set    (Ranges : Character_Ranges) return Character_Set;
  
!    function To_Set    (Span   : Character_Range)  return Character_Set;
  
!    function To_Ranges (Set    : Character_Set)    return Character_Ranges;
  
     ----------------------------------
     -- Operations on Character Sets --
     ----------------------------------
  
!    function "="   (Left, Right : Character_Set) return Boolean;
  
!    function "not" (Right       : Character_Set) return Character_Set;
!    function "and" (Left, Right : Character_Set) return Character_Set;
!    function "or"  (Left, Right : Character_Set) return Character_Set;
!    function "xor" (Left, Right : Character_Set) return Character_Set;
!    function "-"   (Left, Right : Character_Set) return Character_Set;
  
     function Is_In
!      (Element : Character;
!       Set     : Character_Set) return Boolean;
  
     function Is_Subset
!      (Elements : Character_Set;
!       Set      : Character_Set) return     Boolean;
  
     function "<="
!      (Left  : Character_Set;
!       Right : Character_Set) return  Boolean
     renames Is_Subset;
  
     subtype Character_Sequence is String;
     --  Alternative representation for a set of character values
  
!    function To_Set (Sequence  : Character_Sequence) return Character_Set;
!    function To_Set (Singleton : Character)          return Character_Set;
  
!    function To_Sequence (Set : Character_Set) return Character_Sequence;
  
     ------------------------------------
     -- Character Mapping Declarations --
*************** pragma Preelaborate (Maps);
*** 114,122 ****
     --  Representation for a character to character mapping:
  
     function Value
!      (Map     : in Character_Mapping;
!       Element : in Character)
!       return    Character;
  
     Identity : constant Character_Mapping;
  
--- 108,115 ----
     --  Representation for a character to character mapping:
  
     function Value
!      (Map     : Character_Mapping;
!       Element : Character) return Character;
  
     Identity : constant Character_Mapping;
  
*************** pragma Preelaborate (Maps);
*** 125,147 ****
     ----------------------------
  
     function To_Mapping
!      (From, To : in Character_Sequence)
!       return     Character_Mapping;
  
     function To_Domain
!      (Map  : in Character_Mapping)
!       return Character_Sequence;
  
     function To_Range
!      (Map  : in Character_Mapping)
!       return Character_Sequence;
  
     type Character_Mapping_Function is
!       access function (From : in Character) return Character;
! 
!    ------------------
!    -- Private Part --
!    ------------------
  
  private
     pragma Inline (Is_In);
--- 118,133 ----
     ----------------------------
  
     function To_Mapping
!      (From, To : Character_Sequence) return Character_Mapping;
  
     function To_Domain
!      (Map : Character_Mapping) return Character_Sequence;
  
     function To_Range
!      (Map : Character_Mapping) return Character_Sequence;
  
     type Character_Mapping_Function is
!       access function (From : Character) return Character;
  
  private
     pragma Inline (Is_In);
*************** private
*** 161,166 ****
--- 147,154 ----
  
     type Character_Mapping is array (Character) of Character;
  
+    package L renames Ada.Characters.Latin_1;
+ 
     Identity : constant Character_Mapping :=
       (L.NUL                         &  -- NUL                             0
        L.SOH                         &  -- SOH                             1
diff -Nrcpad gcc-3.4.3/gcc/ada/a-strsea.adb gcc-4.0.0/gcc/ada/a-strsea.adb
*** gcc-3.4.3/gcc/ada/a-strsea.adb	Thu Apr 24 17:53:54 2003
--- gcc-4.0.0/gcc/ada/a-strsea.adb	Thu Feb 10 13:51:38 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --   Copyright (C) 1992,1993,1994,1995,1996 Free Software Foundation, Inc.  --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Ada.Strings.Search is
*** 49,56 ****
     function Belongs
       (Element : Character;
        Set     : Maps.Character_Set;
!       Test    : Membership)
!       return    Boolean;
     pragma Inline (Belongs);
     --  Determines if the given element is in (Test = Inside) or not in
     --  (Test = Outside) the given character set.
--- 49,55 ----
     function Belongs
       (Element : Character;
        Set     : Maps.Character_Set;
!       Test    : Membership) return Boolean;
     pragma Inline (Belongs);
     --  Determines if the given element is in (Test = Inside) or not in
     --  (Test = Outside) the given character set.
*************** package body Ada.Strings.Search is
*** 62,69 ****
     function Belongs
       (Element : Character;
        Set     : Maps.Character_Set;
!       Test    : Membership)
!       return    Boolean
     is
     begin
        if Test = Inside then
--- 61,67 ----
     function Belongs
       (Element : Character;
        Set     : Maps.Character_Set;
!       Test    : Membership) return Boolean
     is
     begin
        if Test = Inside then
*************** package body Ada.Strings.Search is
*** 78,87 ****
     -----------
  
     function Count
!      (Source   : in String;
!       Pattern  : in String;
!       Mapping  : in Maps.Character_Mapping := Maps.Identity)
!       return     Natural
     is
        N : Natural;
        J : Natural;
--- 76,84 ----
     -----------
  
     function Count
!      (Source  : String;
!       Pattern : String;
!       Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
     is
        N : Natural;
        J : Natural;
*************** package body Ada.Strings.Search is
*** 113,122 ****
     end Count;
  
     function Count
!      (Source   : in String;
!       Pattern  : in String;
!       Mapping  : in Maps.Character_Mapping_Function)
!       return     Natural
     is
        Mapped_Source : String (Source'Range);
        N             : Natural;
--- 110,118 ----
     end Count;
  
     function Count
!      (Source  : String;
!       Pattern : String;
!       Mapping : Maps.Character_Mapping_Function) return Natural
     is
        Mapped_Source : String (Source'Range);
        N             : Natural;
*************** package body Ada.Strings.Search is
*** 156,164 ****
     end Count;
  
     function Count
!      (Source : in String;
!       Set    : in Maps.Character_Set)
!       return   Natural
     is
        N : Natural := 0;
  
--- 152,159 ----
     end Count;
  
     function Count
!      (Source : String;
!       Set    : Maps.Character_Set) return Natural
     is
        N : Natural := 0;
  
*************** package body Ada.Strings.Search is
*** 177,185 ****
     ----------------
  
     procedure Find_Token
!      (Source : in String;
!       Set    : in Maps.Character_Set;
!       Test   : in Membership;
        First  : out Positive;
        Last   : out Natural)
     is
--- 172,180 ----
     ----------------
  
     procedure Find_Token
!      (Source : String;
!       Set    : Maps.Character_Set;
!       Test   : Membership;
        First  : out Positive;
        Last   : out Natural)
     is
*************** package body Ada.Strings.Search is
*** 214,224 ****
     -----------
  
     function Index
!      (Source   : in String;
!       Pattern  : in String;
!       Going    : in Direction := Forward;
!       Mapping  : in Maps.Character_Mapping := Maps.Identity)
!       return     Natural
     is
        Cur_Index     : Natural;
        Mapped_Source : String (Source'Range);
--- 209,218 ----
     -----------
  
     function Index
!      (Source  : String;
!       Pattern : String;
!       Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
     is
        Cur_Index     : Natural;
        Mapped_Source : String (Source'Range);
*************** package body Ada.Strings.Search is
*** 266,276 ****
        return 0;
     end Index;
  
!    function Index (Source   : in String;
!                    Pattern  : in String;
!                    Going    : in Direction := Forward;
!                    Mapping  : in Maps.Character_Mapping_Function)
!       return Natural
     is
        Mapped_Source : String (Source'Range);
        Cur_Index     : Natural;
--- 260,270 ----
        return 0;
     end Index;
  
!    function Index
!      (Source  : String;
!       Pattern : String;
!       Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping_Function) return Natural
     is
        Mapped_Source : String (Source'Range);
        Cur_Index     : Natural;
*************** package body Ada.Strings.Search is
*** 286,292 ****
  
        declare
           pragma Unsuppress (Access_Check);
- 
        begin
           for J in Source'Range loop
              Mapped_Source (J) := Mapping.all (Source (J));
--- 280,285 ----
*************** package body Ada.Strings.Search is
*** 324,334 ****
     end Index;
  
     function Index
!      (Source : in String;
!       Set    : in Maps.Character_Set;
!       Test   : in Membership := Inside;
!       Going  : in Direction  := Forward)
!       return   Natural
     is
     begin
        --  Forwards case
--- 317,326 ----
     end Index;
  
     function Index
!      (Source : String;
!       Set    : Maps.Character_Set;
!       Test   : Membership := Inside;
!       Going  : Direction  := Forward) return Natural
     is
     begin
        --  Forwards case
*************** package body Ada.Strings.Search is
*** 355,368 ****
        return 0;
     end Index;
  
     ---------------------
     -- Index_Non_Blank --
     ---------------------
  
     function Index_Non_Blank
!      (Source : in String;
!       Going  : in Direction := Forward)
!       return   Natural
     is
     begin
        if Going = Forward then
--- 347,437 ----
        return 0;
     end Index;
  
+    function Index
+      (Source  : String;
+       Pattern : String;
+       From    : Positive;
+       Going   : Direction := Forward;
+       Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
+    is
+    begin
+       if Going = Forward then
+          if From < Source'First then
+             raise Index_Error;
+          end if;
+ 
+          return
+            Index (Source (From .. Source'Last), Pattern, Forward, Mapping);
+ 
+       else
+          if From > Source'Last then
+             raise Index_Error;
+          end if;
+ 
+          return
+            Index (Source (Source'First .. From), Pattern, Backward, Mapping);
+       end if;
+    end Index;
+ 
+    function Index
+      (Source  : String;
+       Pattern : String;
+       From    : Positive;
+       Going   : Direction := Forward;
+       Mapping : Maps.Character_Mapping_Function) return Natural
+    is
+    begin
+       if Going = Forward then
+          if From < Source'First then
+             raise Index_Error;
+          end if;
+ 
+          return Index
+            (Source (From .. Source'Last), Pattern, Forward, Mapping);
+ 
+       else
+          if From > Source'Last then
+             raise Index_Error;
+          end if;
+ 
+          return Index
+            (Source (Source'First .. From), Pattern, Backward, Mapping);
+       end if;
+    end Index;
+ 
+    function Index
+      (Source  : String;
+       Set     : Maps.Character_Set;
+       From    : Positive;
+       Test    : Membership := Inside;
+       Going   : Direction := Forward) return Natural
+    is
+    begin
+       if Going = Forward then
+          if From < Source'First then
+             raise Index_Error;
+          end if;
+ 
+          return
+            Index (Source (From .. Source'Last), Set, Test, Forward);
+ 
+       else
+          if From > Source'Last then
+             raise Index_Error;
+          end if;
+ 
+          return
+            Index (Source (Source'First .. From), Set, Test, Backward);
+       end if;
+    end Index;
+ 
     ---------------------
     -- Index_Non_Blank --
     ---------------------
  
     function Index_Non_Blank
!      (Source : String;
!       Going  : Direction := Forward) return Natural
     is
     begin
        if Going = Forward then
*************** package body Ada.Strings.Search is
*** 383,389 ****
--- 452,481 ----
        --  Fall through if no match
  
        return 0;
+    end Index_Non_Blank;
+ 
+    function Index_Non_Blank
+      (Source : String;
+       From   : Positive;
+       Going  : Direction := Forward) return Natural
+    is
+    begin
+       if Going = Forward then
+          if From < Source'First then
+             raise Index_Error;
+          end if;
  
+          return
+            Index_Non_Blank (Source (From .. Source'Last), Forward);
+ 
+       else
+          if From > Source'Last then
+             raise Index_Error;
+          end if;
+ 
+          return
+            Index_Non_Blank (Source (Source'First .. From), Backward);
+       end if;
     end Index_Non_Blank;
  
  end Ada.Strings.Search;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-strsea.ads gcc-4.0.0/gcc/ada/a-strsea.ads
*** gcc-3.4.3/gcc/ada/a-strsea.ads	Tue Oct 21 13:41:54 2003
--- gcc-4.0.0/gcc/ada/a-strsea.ads	Thu Feb 10 13:51:38 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** private package Ada.Strings.Search is
*** 44,96 ****
  pragma Preelaborate (Search);
  
     function Index
!      (Source   : in String;
!       Pattern  : in String;
!       Going    : in Direction := Forward;
!       Mapping  : in Maps.Character_Mapping := Maps.Identity)
!       return     Natural;
  
     function Index
!      (Source   : in String;
!       Pattern  : in String;
!       Going    : in Direction := Forward;
!       Mapping  : in Maps.Character_Mapping_Function)
!       return     Natural;
  
     function Index
!      (Source : in String;
!       Set    : in Maps.Character_Set;
!       Test   : in Membership := Inside;
!       Going  : in Direction  := Forward)
!       return   Natural;
  
     function Index_Non_Blank
!      (Source : in String;
!       Going  : in Direction := Forward)
!       return   Natural;
  
!    function Count
!      (Source   : in String;
!       Pattern  : in String;
!       Mapping  : in Maps.Character_Mapping := Maps.Identity)
!       return     Natural;
  
     function Count
!      (Source   : in String;
!       Pattern  : in String;
!       Mapping  : in Maps.Character_Mapping_Function)
!       return     Natural;
  
     function Count
!      (Source   : in String;
!       Set      : in Maps.Character_Set)
!       return     Natural;
  
  
     procedure Find_Token
!      (Source : in String;
!       Set    : in Maps.Character_Set;
!       Test   : in Membership;
        First  : out Positive;
        Last   : out Natural);
  
--- 44,114 ----
  pragma Preelaborate (Search);
  
     function Index
!      (Source  : String;
!       Pattern : String;
!       Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping := Maps.Identity) return Natural;
  
     function Index
!      (Source  : String;
!       Pattern : String;
!       Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping_Function) return Natural;
  
     function Index
!      (Source : String;
!       Set    : Maps.Character_Set;
!       Test   : Membership := Inside;
!       Going  : Direction  := Forward) return Natural;
! 
!    function Index
!      (Source  : String;
!       Pattern : String;
!       From    : Positive;
!       Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping := Maps.Identity) return Natural;
! 
!    function Index
!      (Source  : String;
!       Pattern : String;
!       From    : Positive;
!       Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping_Function) return Natural;
! 
!    function Index
!      (Source  : String;
!       Set     : Maps.Character_Set;
!       From    : Positive;
!       Test    : Membership := Inside;
!       Going   : Direction := Forward) return Natural;
  
     function Index_Non_Blank
!      (Source : String;
!       Going  : Direction := Forward) return Natural;
  
!    function Index_Non_Blank
!      (Source : String;
!       From   : Positive;
!       Going  : Direction := Forward) return Natural;
  
     function Count
!      (Source  : String;
!       Pattern : String;
!       Mapping : Maps.Character_Mapping := Maps.Identity) return Natural;
  
     function Count
!      (Source  : String;
!       Pattern : String;
!       Mapping : Maps.Character_Mapping_Function) return Natural;
  
+    function Count
+      (Source : String;
+       Set    : Maps.Character_Set) return Natural;
  
     procedure Find_Token
!      (Source : String;
!       Set    : Maps.Character_Set;
!       Test   : Membership;
        First  : out Positive;
        Last   : out Natural);
  
diff -Nrcpad gcc-3.4.3/gcc/ada/a-strsup.adb gcc-4.0.0/gcc/ada/a-strsup.adb
*** gcc-3.4.3/gcc/ada/a-strsup.adb	Tue Oct 21 13:41:54 2003
--- gcc-4.0.0/gcc/ada/a-strsup.adb	Thu Feb 10 13:50:15 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2003 Free Software Foundation, Inc.               --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2003-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Ada.Strings.Superbounded is
*** 42,49 ****
  
     function Concat
       (Left  : Super_String;
!       Right : Super_String)
!       return  Super_String
     is
        Result : Super_String (Left.Max_Length);
        Llen   : constant Natural := Left.Current_Length;
--- 42,48 ----
  
     function Concat
       (Left  : Super_String;
!       Right : Super_String) return Super_String
     is
        Result : Super_String (Left.Max_Length);
        Llen   : constant Natural := Left.Current_Length;
*************** package body Ada.Strings.Superbounded is
*** 64,71 ****
  
     function Concat
       (Left  : Super_String;
!       Right : String)
!       return  Super_String
     is
        Result : Super_String (Left.Max_Length);
        Llen   : constant Natural := Left.Current_Length;
--- 63,69 ----
  
     function Concat
       (Left  : Super_String;
!       Right : String) return Super_String
     is
        Result : Super_String (Left.Max_Length);
        Llen   : constant Natural := Left.Current_Length;
*************** package body Ada.Strings.Superbounded is
*** 85,92 ****
  
     function Concat
       (Left  : String;
!       Right : Super_String)
!       return  Super_String
     is
        Result : Super_String (Right.Max_Length);
        Llen   : constant Natural := Left'Length;
--- 83,89 ----
  
     function Concat
       (Left  : String;
!       Right : Super_String) return Super_String
     is
        Result : Super_String (Right.Max_Length);
        Llen   : constant Natural := Left'Length;
*************** package body Ada.Strings.Superbounded is
*** 107,114 ****
  
     function Concat
       (Left  : Super_String;
!       Right : Character)
!       return  Super_String
     is
        Result : Super_String (Left.Max_Length);
        Llen   : constant Natural := Left.Current_Length;
--- 104,110 ----
  
     function Concat
       (Left  : Super_String;
!       Right : Character) return Super_String
     is
        Result : Super_String (Left.Max_Length);
        Llen   : constant Natural := Left.Current_Length;
*************** package body Ada.Strings.Superbounded is
*** 127,134 ****
  
     function Concat
       (Left  : Character;
!       Right : Super_String)
!       return  Super_String
     is
        Result : Super_String (Right.Max_Length);
        Rlen   : constant Natural := Right.Current_Length;
--- 123,129 ----
  
     function Concat
       (Left  : Character;
!       Right : Super_String) return Super_String
     is
        Result : Super_String (Right.Max_Length);
        Rlen   : constant Natural := Right.Current_Length;
*************** package body Ada.Strings.Superbounded is
*** 149,170 ****
     -- Equal --
     -----------
  
!    function "=" (Left, Right : Super_String) return Boolean is
     begin
        return Left.Current_Length = Right.Current_Length
          and then Left.Data (1 .. Left.Current_Length) =
                     Right.Data (1 .. Right.Current_Length);
     end "=";
  
!    function Equal (Left : Super_String; Right : String)
!                    return Boolean is
     begin
        return Left.Current_Length = Right'Length
          and then Left.Data (1 .. Left.Current_Length) = Right;
     end Equal;
  
!    function Equal (Left : String; Right : Super_String)
!                    return Boolean is
     begin
        return Left'Length = Right.Current_Length
          and then Left = Right.Data (1 .. Right.Current_Length);
--- 144,172 ----
     -- Equal --
     -----------
  
!    function "="
!      (Left  : Super_String;
!       Right : Super_String) return Boolean
!    is
     begin
        return Left.Current_Length = Right.Current_Length
          and then Left.Data (1 .. Left.Current_Length) =
                     Right.Data (1 .. Right.Current_Length);
     end "=";
  
!    function Equal
!      (Left  : Super_String;
!       Right : String) return Boolean
!    is
     begin
        return Left.Current_Length = Right'Length
          and then Left.Data (1 .. Left.Current_Length) = Right;
     end Equal;
  
!    function Equal
!      (Left  : String;
!       Right : Super_String) return Boolean
!    is
     begin
        return Left'Length = Right.Current_Length
          and then Left = Right.Data (1 .. Right.Current_Length);
*************** package body Ada.Strings.Superbounded is
*** 174,180 ****
     -- Greater --
     -------------
  
!    function Greater (Left, Right : Super_String) return Boolean is
     begin
        return Left.Data (1 .. Left.Current_Length) >
                 Right.Data (1 .. Right.Current_Length);
--- 176,185 ----
     -- Greater --
     -------------
  
!    function Greater
!      (Left  : Super_String;
!       Right : Super_String) return Boolean
!    is
     begin
        return Left.Data (1 .. Left.Current_Length) >
                 Right.Data (1 .. Right.Current_Length);
*************** package body Ada.Strings.Superbounded is
*** 182,189 ****
  
     function Greater
       (Left  : Super_String;
!       Right : String)
!       return  Boolean
     is
     begin
        return Left.Data (1 .. Left.Current_Length) > Right;
--- 187,193 ----
  
     function Greater
       (Left  : Super_String;
!       Right : String) return Boolean
     is
     begin
        return Left.Data (1 .. Left.Current_Length) > Right;
*************** package body Ada.Strings.Superbounded is
*** 191,198 ****
  
     function Greater
       (Left  : String;
!       Right : Super_String)
!       return  Boolean
     is
     begin
        return Left > Right.Data (1 .. Right.Current_Length);
--- 195,201 ----
  
     function Greater
       (Left  : String;
!       Right : Super_String) return Boolean
     is
     begin
        return Left > Right.Data (1 .. Right.Current_Length);
*************** package body Ada.Strings.Superbounded is
*** 202,208 ****
     -- Greater_Or_Equal --
     ----------------------
  
!    function Greater_Or_Equal (Left, Right : Super_String) return Boolean is
     begin
        return Left.Data (1 .. Left.Current_Length) >=
                 Right.Data (1 .. Right.Current_Length);
--- 205,214 ----
     -- Greater_Or_Equal --
     ----------------------
  
!    function Greater_Or_Equal
!      (Left  : Super_String;
!       Right : Super_String) return Boolean
!    is
     begin
        return Left.Data (1 .. Left.Current_Length) >=
                 Right.Data (1 .. Right.Current_Length);
*************** package body Ada.Strings.Superbounded is
*** 210,217 ****
  
     function Greater_Or_Equal
       (Left  : Super_String;
!       Right : String)
!       return  Boolean
     is
     begin
        return Left.Data (1 .. Left.Current_Length) >= Right;
--- 216,222 ----
  
     function Greater_Or_Equal
       (Left  : Super_String;
!       Right : String) return Boolean
     is
     begin
        return Left.Data (1 .. Left.Current_Length) >= Right;
*************** package body Ada.Strings.Superbounded is
*** 219,226 ****
  
     function Greater_Or_Equal
       (Left  : String;
!       Right : Super_String)
!       return  Boolean
     is
     begin
        return Left >= Right.Data (1 .. Right.Current_Length);
--- 224,230 ----
  
     function Greater_Or_Equal
       (Left  : String;
!       Right : Super_String) return Boolean
     is
     begin
        return Left >= Right.Data (1 .. Right.Current_Length);
*************** package body Ada.Strings.Superbounded is
*** 230,236 ****
     -- Less --
     ----------
  
!    function Less (Left, Right : Super_String) return Boolean is
     begin
        return Left.Data (1 .. Left.Current_Length) <
                 Right.Data (1 .. Right.Current_Length);
--- 234,243 ----
     -- Less --
     ----------
  
!    function Less
!      (Left  : Super_String;
!       Right : Super_String) return Boolean
!    is
     begin
        return Left.Data (1 .. Left.Current_Length) <
                 Right.Data (1 .. Right.Current_Length);
*************** package body Ada.Strings.Superbounded is
*** 238,245 ****
  
     function Less
       (Left  : Super_String;
!       Right : String)
!       return  Boolean
     is
     begin
        return Left.Data (1 .. Left.Current_Length) < Right;
--- 245,251 ----
  
     function Less
       (Left  : Super_String;
!       Right : String) return Boolean
     is
     begin
        return Left.Data (1 .. Left.Current_Length) < Right;
*************** package body Ada.Strings.Superbounded is
*** 247,254 ****
  
     function Less
       (Left  : String;
!       Right : Super_String)
!       return  Boolean
     is
     begin
        return Left < Right.Data (1 .. Right.Current_Length);
--- 253,259 ----
  
     function Less
       (Left  : String;
!       Right : Super_String) return Boolean
     is
     begin
        return Left < Right.Data (1 .. Right.Current_Length);
*************** package body Ada.Strings.Superbounded is
*** 258,264 ****
     -- Less_Or_Equal --
     -------------------
  
!    function Less_Or_Equal (Left, Right : Super_String) return Boolean is
     begin
        return Left.Data (1 .. Left.Current_Length) <=
                 Right.Data (1 .. Right.Current_Length);
--- 263,272 ----
     -- Less_Or_Equal --
     -------------------
  
!    function Less_Or_Equal
!      (Left  : Super_String;
!       Right : Super_String) return Boolean
!    is
     begin
        return Left.Data (1 .. Left.Current_Length) <=
                 Right.Data (1 .. Right.Current_Length);
*************** package body Ada.Strings.Superbounded is
*** 266,273 ****
  
     function Less_Or_Equal
       (Left  : Super_String;
!       Right : String)
!       return  Boolean
     is
     begin
        return Left.Data (1 .. Left.Current_Length) <= Right;
--- 274,280 ----
  
     function Less_Or_Equal
       (Left  : Super_String;
!       Right : String) return Boolean
     is
     begin
        return Left.Data (1 .. Left.Current_Length) <= Right;
*************** package body Ada.Strings.Superbounded is
*** 275,287 ****
  
     function Less_Or_Equal
       (Left  : String;
!       Right : Super_String)
!       return  Boolean
     is
     begin
        return Left <= Right.Data (1 .. Right.Current_Length);
     end Less_Or_Equal;
  
     ------------------
     -- Super_Append --
     ------------------
--- 282,328 ----
  
     function Less_Or_Equal
       (Left  : String;
!       Right : Super_String) return Boolean
     is
     begin
        return Left <= Right.Data (1 .. Right.Current_Length);
     end Less_Or_Equal;
  
+    ----------------------
+    -- Set_Super_String --
+    ----------------------
+ 
+    procedure Set_Super_String
+      (Target : out Super_String;
+       Source : String;
+       Drop   : Truncation := Error)
+    is
+       Slen       : constant Natural := Source'Length;
+       Max_Length : constant Positive := Target.Max_Length;
+ 
+    begin
+       if Slen <= Max_Length then
+          Target.Current_Length := Slen;
+          Target.Data (1 .. Slen) := Source;
+ 
+       else
+          case Drop is
+             when Strings.Right =>
+                Target.Current_Length := Max_Length;
+                Target.Data (1 .. Max_Length) :=
+                  Source (Source'First .. Source'First - 1 + Max_Length);
+ 
+             when Strings.Left =>
+                Target.Current_Length := Max_Length;
+                Target.Data (1 .. Max_Length) :=
+                  Source (Source'Last - (Max_Length - 1) .. Source'Last);
+ 
+             when Strings.Error =>
+                raise Ada.Strings.Length_Error;
+          end case;
+       end if;
+    end Set_Super_String;
+ 
     ------------------
     -- Super_Append --
     ------------------
*************** package body Ada.Strings.Superbounded is
*** 289,297 ****
     --  Case of Super_String and Super_String
  
     function Super_Append
!      (Left, Right : Super_String;
!       Drop        : Strings.Truncation  := Strings.Error)
!       return        Super_String
     is
        Max_Length : constant Positive := Left.Max_Length;
        Result : Super_String (Max_Length);
--- 330,338 ----
     --  Case of Super_String and Super_String
  
     function Super_Append
!      (Left  : Super_String;
!       Right : Super_String;
!       Drop  : Truncation := Error) return Super_String
     is
        Max_Length : constant Positive := Left.Max_Length;
        Result : Super_String (Max_Length);
*************** package body Ada.Strings.Superbounded is
*** 341,347 ****
     procedure Super_Append
       (Source   : in out Super_String;
        New_Item : Super_String;
!       Drop     : Truncation  := Error)
     is
        Max_Length : constant Positive := Source.Max_Length;
        Llen       : constant Natural := Source.Current_Length;
--- 382,388 ----
     procedure Super_Append
       (Source   : in out Super_String;
        New_Item : Super_String;
!       Drop     : Truncation := Error)
     is
        Max_Length : constant Positive := Source.Max_Length;
        Llen       : constant Natural := Source.Current_Length;
*************** package body Ada.Strings.Superbounded is
*** 386,393 ****
     function Super_Append
       (Left  : Super_String;
        Right : String;
!       Drop  : Strings.Truncation := Strings.Error)
!       return  Super_String
     is
        Max_Length : constant Positive := Left.Max_Length;
        Result : Super_String (Max_Length);
--- 427,433 ----
     function Super_Append
       (Left  : Super_String;
        Right : String;
!       Drop  : Strings.Truncation := Strings.Error) return Super_String
     is
        Max_Length : constant Positive := Left.Max_Length;
        Result : Super_String (Max_Length);
*************** package body Ada.Strings.Superbounded is
*** 440,446 ****
     procedure Super_Append
       (Source   : in out Super_String;
        New_Item : String;
!       Drop     : Truncation  := Error)
     is
        Max_Length : constant Positive := Source.Max_Length;
        Llen   : constant Natural := Source.Current_Length;
--- 480,486 ----
     procedure Super_Append
       (Source   : in out Super_String;
        New_Item : String;
!       Drop     : Truncation := Error)
     is
        Max_Length : constant Positive := Source.Max_Length;
        Llen   : constant Natural := Source.Current_Length;
*************** package body Ada.Strings.Superbounded is
*** 488,495 ****
     function Super_Append
       (Left  : String;
        Right : Super_String;
!       Drop  : Strings.Truncation := Strings.Error)
!       return  Super_String
     is
        Max_Length : constant Positive := Right.Max_Length;
        Result     : Super_String (Max_Length);
--- 528,534 ----
     function Super_Append
       (Left  : String;
        Right : Super_String;
!       Drop  : Strings.Truncation := Strings.Error) return Super_String
     is
        Max_Length : constant Positive := Right.Max_Length;
        Result     : Super_String (Max_Length);
*************** package body Ada.Strings.Superbounded is
*** 543,550 ****
     function Super_Append
       (Left  : Super_String;
        Right : Character;
!       Drop  : Strings.Truncation := Strings.Error)
!       return  Super_String
     is
        Max_Length : constant Positive := Left.Max_Length;
        Result     : Super_String (Max_Length);
--- 582,588 ----
     function Super_Append
       (Left  : Super_String;
        Right : Character;
!       Drop  : Strings.Truncation := Strings.Error) return Super_String
     is
        Max_Length : constant Positive := Left.Max_Length;
        Result     : Super_String (Max_Length);
*************** package body Ada.Strings.Superbounded is
*** 578,584 ****
     procedure Super_Append
       (Source   : in out Super_String;
        New_Item : Character;
!       Drop     : Truncation  := Error)
     is
        Max_Length : constant Positive := Source.Max_Length;
        Llen       : constant Natural  := Source.Current_Length;
--- 616,622 ----
     procedure Super_Append
       (Source   : in out Super_String;
        New_Item : Character;
!       Drop     : Truncation := Error)
     is
        Max_Length : constant Positive := Source.Max_Length;
        Llen       : constant Natural  := Source.Current_Length;
*************** package body Ada.Strings.Superbounded is
*** 612,619 ****
     function Super_Append
       (Left  : Character;
        Right : Super_String;
!       Drop  : Strings.Truncation := Strings.Error)
!       return  Super_String
     is
        Max_Length : constant Positive := Right.Max_Length;
        Result : Super_String (Max_Length);
--- 650,656 ----
     function Super_Append
       (Left  : Character;
        Right : Super_String;
!       Drop  : Strings.Truncation := Strings.Error) return Super_String
     is
        Max_Length : constant Positive := Right.Max_Length;
        Result : Super_String (Max_Length);
*************** package body Ada.Strings.Superbounded is
*** 649,658 ****
     -----------------
  
     function Super_Count
!      (Source   : Super_String;
!       Pattern  : String;
!       Mapping  : Maps.Character_Mapping := Maps.Identity)
!       return     Natural
     is
     begin
        return
--- 686,694 ----
     -----------------
  
     function Super_Count
!      (Source  : Super_String;
!       Pattern : String;
!       Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
     is
     begin
        return
*************** package body Ada.Strings.Superbounded is
*** 661,670 ****
     end Super_Count;
  
     function Super_Count
!      (Source   : Super_String;
!       Pattern  : String;
!       Mapping  : Maps.Character_Mapping_Function)
!       return     Natural
     is
     begin
        return
--- 697,705 ----
     end Super_Count;
  
     function Super_Count
!      (Source  : Super_String;
!       Pattern : String;
!       Mapping : Maps.Character_Mapping_Function) return Natural
     is
     begin
        return
*************** package body Ada.Strings.Superbounded is
*** 674,681 ****
  
     function Super_Count
       (Source : Super_String;
!       Set    : Maps.Character_Set)
!       return   Natural
     is
     begin
        return Search.Count (Source.Data (1 .. Source.Current_Length), Set);
--- 709,715 ----
  
     function Super_Count
       (Source : Super_String;
!       Set    : Maps.Character_Set) return Natural
     is
     begin
        return Search.Count (Source.Data (1 .. Source.Current_Length), Set);
*************** package body Ada.Strings.Superbounded is
*** 688,695 ****
     function Super_Delete
       (Source  : Super_String;
        From    : Positive;
!       Through : Natural)
!       return    Super_String
     is
        Result     : Super_String (Source.Max_Length);
        Slen       : constant Natural := Source.Current_Length;
--- 722,728 ----
     function Super_Delete
       (Source  : Super_String;
        From    : Positive;
!       Through : Natural) return Super_String
     is
        Result     : Super_String (Source.Max_Length);
        Slen       : constant Natural := Source.Current_Length;
*************** package body Ada.Strings.Superbounded is
*** 747,754 ****
  
     function Super_Element
       (Source : Super_String;
!       Index  : Positive)
!       return   Character
     is
     begin
        if Index in 1 .. Source.Current_Length then
--- 780,786 ----
  
     function Super_Element
       (Source : Super_String;
!       Index  : Positive) return Character
     is
     begin
        if Index in 1 .. Source.Current_Length then
*************** package body Ada.Strings.Superbounded is
*** 782,789 ****
       (Source : Super_String;
        Count  : Natural;
        Pad    : Character := Space;
!       Drop   : Strings.Truncation := Strings.Error)
!       return   Super_String
     is
        Max_Length : constant Positive := Source.Max_Length;
        Result     : Super_String (Max_Length);
--- 814,820 ----
       (Source : Super_String;
        Count  : Natural;
        Pad    : Character := Space;
!       Drop   : Strings.Truncation := Strings.Error) return Super_String
     is
        Max_Length : constant Positive := Source.Max_Length;
        Result     : Super_String (Max_Length);
*************** package body Ada.Strings.Superbounded is
*** 830,836 ****
     procedure Super_Head
       (Source : in out Super_String;
        Count  : Natural;
!       Pad    : Character  := Space;
        Drop   : Truncation := Error)
     is
        Max_Length : constant Positive := Source.Max_Length;
--- 861,867 ----
     procedure Super_Head
       (Source : in out Super_String;
        Count  : Natural;
!       Pad    : Character := Space;
        Drop   : Truncation := Error)
     is
        Max_Length : constant Positive := Source.Max_Length;
*************** package body Ada.Strings.Superbounded is
*** 878,888 ****
     -----------------
  
     function Super_Index
!      (Source   : Super_String;
!       Pattern  : String;
!       Going    : Strings.Direction := Strings.Forward;
!       Mapping  : Maps.Character_Mapping := Maps.Identity)
!       return     Natural
     is
     begin
        return Search.Index
--- 909,918 ----
     -----------------
  
     function Super_Index
!      (Source  : Super_String;
!       Pattern : String;
!       Going   : Strings.Direction := Strings.Forward;
!       Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
     is
     begin
        return Search.Index
*************** package body Ada.Strings.Superbounded is
*** 890,900 ****
     end Super_Index;
  
     function Super_Index
!      (Source   : Super_String;
!       Pattern  : String;
!       Going    : Direction := Forward;
!       Mapping  : Maps.Character_Mapping_Function)
!       return     Natural
     is
     begin
        return Search.Index
--- 920,929 ----
     end Super_Index;
  
     function Super_Index
!      (Source  : Super_String;
!       Pattern : String;
!       Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping_Function) return Natural
     is
     begin
        return Search.Index
*************** package body Ada.Strings.Superbounded is
*** 905,926 ****
       (Source : Super_String;
        Set    : Maps.Character_Set;
        Test   : Strings.Membership := Strings.Inside;
!       Going  : Strings.Direction  := Strings.Forward)
!       return   Natural
     is
     begin
        return Search.Index
          (Source.Data (1 .. Source.Current_Length), Set, Test, Going);
     end Super_Index;
  
     ---------------------------
     -- Super_Index_Non_Blank --
     ---------------------------
  
     function Super_Index_Non_Blank
       (Source : Super_String;
!       Going  : Strings.Direction := Strings.Forward)
!       return   Natural
     is
     begin
        return
--- 934,991 ----
       (Source : Super_String;
        Set    : Maps.Character_Set;
        Test   : Strings.Membership := Strings.Inside;
!       Going  : Strings.Direction  := Strings.Forward) return Natural
     is
     begin
        return Search.Index
          (Source.Data (1 .. Source.Current_Length), Set, Test, Going);
     end Super_Index;
  
+    function Super_Index
+      (Source  : Super_String;
+       Pattern : String;
+       From    : Positive;
+       Going   : Direction := Forward;
+       Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
+    is
+    begin
+       return Search.Index
+         (Source.Data (1 .. Source.Current_Length),
+          Pattern, From, Going, Mapping);
+    end Super_Index;
+ 
+    function Super_Index
+      (Source  : Super_String;
+       Pattern : String;
+       From    : Positive;
+       Going   : Direction := Forward;
+       Mapping : Maps.Character_Mapping_Function) return Natural
+    is
+    begin
+       return Search.Index
+         (Source.Data (1 .. Source.Current_Length),
+          Pattern, From, Going, Mapping);
+    end Super_Index;
+ 
+    function Super_Index
+      (Source : Super_String;
+       Set    : Maps.Character_Set;
+       From   : Positive;
+       Test   : Membership := Inside;
+       Going  : Direction := Forward) return Natural
+    is
+    begin
+       return Search.Index
+         (Source.Data (1 .. Source.Current_Length), Set, From, Test, Going);
+    end Super_Index;
+ 
     ---------------------------
     -- Super_Index_Non_Blank --
     ---------------------------
  
     function Super_Index_Non_Blank
       (Source : Super_String;
!       Going  : Strings.Direction := Strings.Forward) return Natural
     is
     begin
        return
*************** package body Ada.Strings.Superbounded is
*** 928,933 ****
--- 993,1009 ----
            (Source.Data (1 .. Source.Current_Length), Going);
     end Super_Index_Non_Blank;
  
+    function Super_Index_Non_Blank
+      (Source : Super_String;
+       From   : Positive;
+       Going  : Direction := Forward) return Natural
+    is
+    begin
+       return
+         Search.Index_Non_Blank
+           (Source.Data (1 .. Source.Current_Length), From, Going);
+    end Super_Index_Non_Blank;
+ 
     ------------------
     -- Super_Insert --
     ------------------
*************** package body Ada.Strings.Superbounded is
*** 936,943 ****
       (Source   : Super_String;
        Before   : Positive;
        New_Item : String;
!       Drop     : Strings.Truncation := Strings.Error)
!       return     Super_String
     is
        Max_Length : constant Positive := Source.Max_Length;
        Result     : Super_String (Max_Length);
--- 1012,1018 ----
       (Source   : Super_String;
        Before   : Positive;
        New_Item : String;
!       Drop     : Strings.Truncation := Strings.Error) return Super_String
     is
        Max_Length : constant Positive := Source.Max_Length;
        Result     : Super_String (Max_Length);
*************** package body Ada.Strings.Superbounded is
*** 1032,1042 ****
     ---------------------
  
     function Super_Overwrite
!      (Source    : Super_String;
!       Position  : Positive;
!       New_Item  : String;
!       Drop      : Strings.Truncation := Strings.Error)
!       return      Super_String
     is
        Max_Length : constant Positive := Source.Max_Length;
        Result     : Super_String (Max_Length);
--- 1107,1116 ----
     ---------------------
  
     function Super_Overwrite
!      (Source   : Super_String;
!       Position : Positive;
!       New_Item : String;
!       Drop     : Strings.Truncation := Strings.Error) return Super_String
     is
        Max_Length : constant Positive := Source.Max_Length;
        Result     : Super_String (Max_Length);
*************** package body Ada.Strings.Superbounded is
*** 1172,1183 ****
     -------------------------
  
     function Super_Replace_Slice
!      (Source   : Super_String;
!       Low      : Positive;
!       High     : Natural;
!       By       : String;
!       Drop     : Strings.Truncation := Strings.Error)
!       return     Super_String
     is
        Max_Length : constant Positive := Source.Max_Length;
        Slen       : constant Natural  := Source.Current_Length;
--- 1246,1256 ----
     -------------------------
  
     function Super_Replace_Slice
!      (Source : Super_String;
!       Low    : Positive;
!       High   : Natural;
!       By     : String;
!       Drop   : Strings.Truncation := Strings.Error) return Super_String
     is
        Max_Length : constant Positive := Source.Max_Length;
        Slen       : constant Natural  := Source.Current_Length;
*************** package body Ada.Strings.Superbounded is
*** 1273,1280 ****
       (Count      : Natural;
        Item       : Character;
        Drop       : Truncation := Error;
!       Max_Length : Positive)
!       return       Super_String
     is
        Result : Super_String (Max_Length);
  
--- 1346,1352 ----
       (Count      : Natural;
        Item       : Character;
        Drop       : Truncation := Error;
!       Max_Length : Positive) return Super_String
     is
        Result : Super_String (Max_Length);
  
*************** package body Ada.Strings.Superbounded is
*** 1297,1304 ****
       (Count      : Natural;
        Item       : String;
        Drop       : Truncation := Error;
!       Max_Length : Positive)
!       return       Super_String
     is
        Length : constant Integer := Count * Item'Length;
        Result : Super_String (Max_Length);
--- 1369,1375 ----
       (Count      : Natural;
        Item       : String;
        Drop       : Truncation := Error;
!       Max_Length : Positive) return Super_String
     is
        Length : constant Integer := Count * Item'Length;
        Result : Super_String (Max_Length);
*************** package body Ada.Strings.Superbounded is
*** 1354,1361 ****
     function Super_Replicate
       (Count : Natural;
        Item  : Super_String;
!       Drop  : Strings.Truncation := Strings.Error)
!       return  Super_String
     is
     begin
        return
--- 1425,1431 ----
     function Super_Replicate
       (Count : Natural;
        Item  : Super_String;
!       Drop  : Strings.Truncation := Strings.Error) return Super_String
     is
     begin
        return
*************** package body Ada.Strings.Superbounded is
*** 1373,1380 ****
     function Super_Slice
       (Source : Super_String;
        Low    : Positive;
!       High   : Natural)
!       return   String
     is
     begin
        --  Note: test of High > Length is in accordance with AI95-00128
--- 1443,1449 ----
     function Super_Slice
       (Source : Super_String;
        Low    : Positive;
!       High   : Natural) return String
     is
     begin
        --  Note: test of High > Length is in accordance with AI95-00128
*************** package body Ada.Strings.Superbounded is
*** 1388,1393 ****
--- 1457,1499 ----
        end if;
     end Super_Slice;
  
+    function Super_Slice
+      (Source : Super_String;
+       Low    : Positive;
+       High   : Natural) return Super_String
+    is
+       Result : Super_String (Source.Max_Length);
+ 
+    begin
+       if Low > Source.Current_Length + 1
+         or else High > Source.Current_Length
+       then
+          raise Index_Error;
+       else
+          Result.Current_Length := High - Low + 1;
+          Result.Data (1 .. Source.Current_Length) := Source.Data (Low .. High);
+       end if;
+ 
+       return Result;
+    end Super_Slice;
+ 
+    procedure Super_Slice
+      (Source : Super_String;
+       Target : out Super_String;
+       Low    : Positive;
+       High   : Natural)
+    is
+    begin
+       if Low > Source.Current_Length + 1
+         or else High > Source.Current_Length
+       then
+          raise Index_Error;
+       else
+          Target.Current_Length := High - Low + 1;
+          Target.Data (1 .. Source.Current_Length) := Source.Data (Low .. High);
+       end if;
+    end Super_Slice;
+ 
     ----------------
     -- Super_Tail --
     ----------------
*************** package body Ada.Strings.Superbounded is
*** 1396,1403 ****
       (Source : Super_String;
        Count  : Natural;
        Pad    : Character := Space;
!       Drop   : Strings.Truncation := Strings.Error)
!       return   Super_String
     is
        Max_Length : constant Positive := Source.Max_Length;
        Result     : Super_String (Max_Length);
--- 1502,1508 ----
       (Source : Super_String;
        Count  : Natural;
        Pad    : Character := Space;
!       Drop   : Strings.Truncation := Strings.Error) return Super_String
     is
        Max_Length : constant Positive := Source.Max_Length;
        Result     : Super_String (Max_Length);
*************** package body Ada.Strings.Superbounded is
*** 1445,1451 ****
     procedure Super_Tail
       (Source : in out Super_String;
        Count  : Natural;
!       Pad    : Character  := Space;
        Drop   : Truncation := Error)
     is
        Max_Length : constant Positive := Source.Max_Length;
--- 1550,1556 ----
     procedure Super_Tail
       (Source : in out Super_String;
        Count  : Natural;
!       Pad    : Character := Space;
        Drop   : Truncation := Error)
     is
        Max_Length : constant Positive := Source.Max_Length;
*************** package body Ada.Strings.Superbounded is
*** 1497,1503 ****
     -- Super_To_String --
     ---------------------
  
!    function Super_To_String (Source : in Super_String) return String is
     begin
        return Source.Data (1 .. Source.Current_Length);
     end Super_To_String;
--- 1602,1608 ----
     -- Super_To_String --
     ---------------------
  
!    function Super_To_String (Source : Super_String) return String is
     begin
        return Source.Data (1 .. Source.Current_Length);
     end Super_To_String;
*************** package body Ada.Strings.Superbounded is
*** 1508,1515 ****
  
     function Super_Translate
       (Source  : Super_String;
!       Mapping : Maps.Character_Mapping)
!       return    Super_String
     is
        Result : Super_String (Source.Max_Length);
  
--- 1613,1619 ----
  
     function Super_Translate
       (Source  : Super_String;
!       Mapping : Maps.Character_Mapping) return Super_String
     is
        Result : Super_String (Source.Max_Length);
  
*************** package body Ada.Strings.Superbounded is
*** 1535,1542 ****
  
     function Super_Translate
       (Source  : Super_String;
!       Mapping : Maps.Character_Mapping_Function)
!       return    Super_String
     is
        Result : Super_String (Source.Max_Length);
  
--- 1639,1645 ----
  
     function Super_Translate
       (Source  : Super_String;
!       Mapping : Maps.Character_Mapping_Function) return Super_String
     is
        Result : Super_String (Source.Max_Length);
  
*************** package body Ada.Strings.Superbounded is
*** 1564,1571 ****
     -- Super_Trim --
     ----------------
  
!    function Super_Trim (Source : Super_String; Side : Trim_End)
!                         return   Super_String
     is
        Result : Super_String (Source.Max_Length);
        Last   : Natural := Source.Current_Length;
--- 1667,1675 ----
     -- Super_Trim --
     ----------------
  
!    function Super_Trim
!      (Source : Super_String;
!       Side   : Trim_End) return Super_String
     is
        Result : Super_String (Source.Max_Length);
        Last   : Natural := Source.Current_Length;
*************** package body Ada.Strings.Superbounded is
*** 1621,1628 ****
     function Super_Trim
       (Source : Super_String;
        Left   : Maps.Character_Set;
!       Right  : Maps.Character_Set)
!       return   Super_String
     is
        Result : Super_String (Source.Max_Length);
  
--- 1725,1731 ----
     function Super_Trim
       (Source : Super_String;
        Left   : Maps.Character_Set;
!       Right  : Maps.Character_Set) return Super_String
     is
        Result : Super_String (Source.Max_Length);
  
*************** package body Ada.Strings.Superbounded is
*** 1688,1695 ****
     function Times
       (Left       : Natural;
        Right      : Character;
!       Max_Length : Positive)
!       return  Super_String
     is
        Result : Super_String (Max_Length);
  
--- 1791,1797 ----
     function Times
       (Left       : Natural;
        Right      : Character;
!       Max_Length : Positive) return Super_String
     is
        Result : Super_String (Max_Length);
  
*************** package body Ada.Strings.Superbounded is
*** 1711,1718 ****
     function Times
       (Left       : Natural;
        Right      : String;
!       Max_Length : Positive)
!       return  Super_String
     is
        Result : Super_String (Max_Length);
        Pos    : Positive         := 1;
--- 1813,1819 ----
     function Times
       (Left       : Natural;
        Right      : String;
!       Max_Length : Positive) return Super_String
     is
        Result : Super_String (Max_Length);
        Pos    : Positive         := 1;
*************** package body Ada.Strings.Superbounded is
*** 1739,1746 ****
  
     function Times
       (Left  : Natural;
!       Right : Super_String)
!       return  Super_String
     is
        Result : Super_String (Right.Max_Length);
        Pos    : Positive := 1;
--- 1840,1846 ----
  
     function Times
       (Left  : Natural;
!       Right : Super_String) return Super_String
     is
        Result : Super_String (Right.Max_Length);
        Pos    : Positive := 1;
*************** package body Ada.Strings.Superbounded is
*** 1773,1780 ****
     function To_Super_String
       (Source     : String;
        Max_Length : Natural;
!       Drop       : Truncation := Error)
!       return       Super_String
     is
        Result : Super_String (Max_Length);
        Slen   : constant Natural := Source'Length;
--- 1873,1879 ----
     function To_Super_String
       (Source     : String;
        Max_Length : Natural;
!       Drop       : Truncation := Error) return Super_String
     is
        Result : Super_String (Max_Length);
        Slen   : constant Natural := Source'Length;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-strsup.ads gcc-4.0.0/gcc/ada/a-strsup.ads
*** gcc-3.4.3/gcc/ada/a-strsup.ads	Tue Oct 21 13:41:54 2003
--- gcc-4.0.0/gcc/ada/a-strsup.ads	Thu Feb 10 13:50:15 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2003 Free Software Foundation, Inc.               --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2003-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** pragma Preelaborate (Superbounded);
*** 63,70 ****
     function To_Super_String
       (Source     : String;
        Max_Length : Natural;
!       Drop       : Truncation := Error)
!       return       Super_String;
     --  Note the additional parameter Max_Length, which specifies the maximum
     --  length setting of the resulting Super_String value.
  
--- 63,69 ----
     function To_Super_String
       (Source     : String;
        Max_Length : Natural;
!       Drop       : Truncation := Error) return Super_String;
     --  Note the additional parameter Max_Length, which specifies the maximum
     --  length setting of the resulting Super_String value.
  
*************** pragma Preelaborate (Superbounded);
*** 73,106 ****
  
     function Super_To_String (Source : Super_String) return String;
  
     function Super_Append
!      (Left, Right : Super_String;
!       Drop        : Truncation  := Error)
!       return        Super_String;
  
     function Super_Append
       (Left  : Super_String;
        Right : String;
!       Drop  : Truncation := Error)
!       return  Super_String;
  
     function Super_Append
       (Left  : String;
        Right : Super_String;
!       Drop  : Truncation := Error)
!       return  Super_String;
  
     function Super_Append
       (Left  : Super_String;
        Right : Character;
!       Drop  : Truncation := Error)
!       return  Super_String;
  
     function Super_Append
       (Left  : Character;
        Right : Super_String;
!       Drop  : Truncation := Error)
!       return  Super_String;
  
     procedure Super_Append
       (Source   : in out Super_String;
--- 72,106 ----
  
     function Super_To_String (Source : Super_String) return String;
  
+    procedure Set_Super_String
+      (Target : out Super_String;
+       Source : String;
+       Drop   : Truncation := Error);
+ 
     function Super_Append
!      (Left  : Super_String;
!       Right : Super_String;
!       Drop  : Truncation  := Error) return Super_String;
  
     function Super_Append
       (Left  : Super_String;
        Right : String;
!       Drop  : Truncation := Error) return Super_String;
  
     function Super_Append
       (Left  : String;
        Right : Super_String;
!       Drop  : Truncation := Error) return Super_String;
  
     function Super_Append
       (Left  : Super_String;
        Right : Character;
!       Drop  : Truncation := Error) return Super_String;
  
     function Super_Append
       (Left  : Character;
        Right : Super_String;
!       Drop  : Truncation := Error) return Super_String;
  
     procedure Super_Append
       (Source   : in out Super_String;
*************** pragma Preelaborate (Superbounded);
*** 118,150 ****
        Drop     : Truncation  := Error);
  
     function Concat
!      (Left, Right : Super_String)
!       return        Super_String;
  
     function Concat
       (Left  : Super_String;
!       Right : String)
!       return  Super_String;
  
     function Concat
       (Left  : String;
!       Right : Super_String)
!       return  Super_String;
  
     function Concat
       (Left  : Super_String;
!       Right : Character)
!       return  Super_String;
  
     function Concat
       (Left  : Character;
!       Right : Super_String)
!       return  Super_String;
  
     function Super_Element
       (Source : Super_String;
!       Index  : Positive)
!       return   Character;
  
     procedure Super_Replace_Element
       (Source : in out Super_String;
--- 118,145 ----
        Drop     : Truncation  := Error);
  
     function Concat
!      (Left  : Super_String;
!       Right : Super_String) return Super_String;
  
     function Concat
       (Left  : Super_String;
!       Right : String) return Super_String;
  
     function Concat
       (Left  : String;
!       Right : Super_String) return Super_String;
  
     function Concat
       (Left  : Super_String;
!       Right : Character) return Super_String;
  
     function Concat
       (Left  : Character;
!       Right : Super_String) return Super_String;
  
     function Super_Element
       (Source : Super_String;
!       Index  : Positive) return Character;
  
     procedure Super_Replace_Element
       (Source : in out Super_String;
*************** pragma Preelaborate (Superbounded);
*** 154,223 ****
     function Super_Slice
       (Source : Super_String;
        Low    : Positive;
!       High   : Natural)
!       return   String;
  
!    function "="  (Left, Right : Super_String) return Boolean;
  
!    function Equal (Left, Right : Super_String) return Boolean renames "=";
  
     function Equal
       (Left  : Super_String;
!       Right : String)
!       return  Boolean;
  
     function Equal
       (Left  : String;
!       Right : Super_String)
!       return  Boolean;
  
!    function Less (Left, Right : Super_String) return Boolean;
  
     function Less
       (Left  : Super_String;
!       Right : String)
!       return  Boolean;
  
     function Less
       (Left  : String;
!       Right : Super_String)
!       return  Boolean;
  
!    function Less_Or_Equal (Left, Right : Super_String) return Boolean;
  
     function Less_Or_Equal
       (Left  : Super_String;
!       Right : String)
!       return  Boolean;
  
     function Less_Or_Equal
       (Left  : String;
!       Right : Super_String)
!       return  Boolean;
  
!    function Greater  (Left, Right : Super_String) return Boolean;
  
     function Greater
       (Left  : Super_String;
!       Right : String)
!       return  Boolean;
  
     function Greater
       (Left  : String;
!       Right : Super_String)
!       return  Boolean;
  
!    function Greater_Or_Equal (Left, Right : Super_String) return Boolean;
  
     function Greater_Or_Equal
       (Left  : Super_String;
!       Right : String)
!       return  Boolean;
  
     function Greater_Or_Equal
       (Left  : String;
!       Right : Super_String)
!       return  Boolean;
  
     ----------------------
     -- Search Functions --
--- 149,230 ----
     function Super_Slice
       (Source : Super_String;
        Low    : Positive;
!       High   : Natural) return String;
  
!    function Super_Slice
!      (Source : Super_String;
!       Low    : Positive;
!       High   : Natural) return Super_String;
  
!    procedure Super_Slice
!      (Source : Super_String;
!       Target : out Super_String;
!       Low    : Positive;
!       High   : Natural);
! 
!    function "="
!      (Left  : Super_String;
!       Right : Super_String) return Boolean;
  
     function Equal
       (Left  : Super_String;
!       Right : Super_String) return Boolean renames "=";
! 
!    function Equal
!      (Left  : Super_String;
!       Right : String) return Boolean;
  
     function Equal
       (Left  : String;
!       Right : Super_String) return Boolean;
  
!    function Less
!      (Left  : Super_String;
!       Right : Super_String) return Boolean;
  
     function Less
       (Left  : Super_String;
!       Right : String) return Boolean;
  
     function Less
       (Left  : String;
!       Right : Super_String) return Boolean;
  
!    function Less_Or_Equal
!      (Left  : Super_String;
!       Right : Super_String) return Boolean;
  
     function Less_Or_Equal
       (Left  : Super_String;
!       Right : String) return Boolean;
  
     function Less_Or_Equal
       (Left  : String;
!       Right : Super_String) return Boolean;
  
!    function Greater
!      (Left  : Super_String;
!       Right : Super_String) return Boolean;
  
     function Greater
       (Left  : Super_String;
!       Right : String) return Boolean;
  
     function Greater
       (Left  : String;
!       Right : Super_String) return Boolean;
  
!    function Greater_Or_Equal
!      (Left  : Super_String;
!       Right : Super_String) return Boolean;
  
     function Greater_Or_Equal
       (Left  : Super_String;
!       Right : String) return Boolean;
  
     function Greater_Or_Equal
       (Left  : String;
!       Right : Super_String) return Boolean;
  
     ----------------------
     -- Search Functions --
*************** pragma Preelaborate (Superbounded);
*** 227,270 ****
       (Source  : Super_String;
        Pattern : String;
        Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping := Maps.Identity)
!       return    Natural;
  
     function Super_Index
       (Source  : Super_String;
        Pattern : String;
        Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping_Function)
!       return    Natural;
  
     function Super_Index
       (Source : Super_String;
        Set    : Maps.Character_Set;
        Test   : Membership := Inside;
!       Going  : Direction  := Forward)
!       return   Natural;
  
     function Super_Index_Non_Blank
       (Source : Super_String;
!       Going  : Direction := Forward)
!       return   Natural;
  
     function Super_Count
       (Source  : Super_String;
        Pattern : String;
!       Mapping : Maps.Character_Mapping := Maps.Identity)
!       return    Natural;
  
     function Super_Count
       (Source  : Super_String;
        Pattern : String;
!       Mapping : Maps.Character_Mapping_Function)
!       return    Natural;
  
     function Super_Count
       (Source : Super_String;
!       Set    : Maps.Character_Set)
!       return   Natural;
  
     procedure Super_Find_Token
       (Source : Super_String;
--- 234,296 ----
       (Source  : Super_String;
        Pattern : String;
        Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping := Maps.Identity) return Natural;
  
     function Super_Index
       (Source  : Super_String;
        Pattern : String;
        Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping_Function) return Natural;
  
     function Super_Index
       (Source : Super_String;
        Set    : Maps.Character_Set;
        Test   : Membership := Inside;
!       Going  : Direction  := Forward) return Natural;
! 
!    function Super_Index
!      (Source  : Super_String;
!       Pattern : String;
!       From    : Positive;
!       Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping := Maps.Identity) return Natural;
! 
!    function Super_Index
!      (Source  : Super_String;
!       Pattern : String;
!       From    : Positive;
!       Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping_Function) return Natural;
! 
!    function Super_Index
!      (Source : Super_String;
!       Set    : Maps.Character_Set;
!       From   : Positive;
!       Test   : Membership := Inside;
!       Going  : Direction := Forward) return Natural;
  
     function Super_Index_Non_Blank
       (Source : Super_String;
!       Going  : Direction := Forward) return Natural;
! 
!    function Super_Index_Non_Blank
!      (Source : Super_String;
!       From   : Positive;
!       Going  : Direction := Forward) return Natural;
  
     function Super_Count
       (Source  : Super_String;
        Pattern : String;
!       Mapping : Maps.Character_Mapping := Maps.Identity) return Natural;
  
     function Super_Count
       (Source  : Super_String;
        Pattern : String;
!       Mapping : Maps.Character_Mapping_Function) return Natural;
  
     function Super_Count
       (Source : Super_String;
!       Set    : Maps.Character_Set) return Natural;
  
     procedure Super_Find_Token
       (Source : Super_String;
*************** pragma Preelaborate (Superbounded);
*** 278,286 ****
     ------------------------------------
  
     function Super_Translate
!      (Source   : Super_String;
!       Mapping  : Maps.Character_Mapping)
!       return     Super_String;
  
     procedure Super_Translate
       (Source   : in out Super_String;
--- 304,311 ----
     ------------------------------------
  
     function Super_Translate
!      (Source  : Super_String;
!       Mapping : Maps.Character_Mapping) return Super_String;
  
     procedure Super_Translate
       (Source   : in out Super_String;
*************** pragma Preelaborate (Superbounded);
*** 288,295 ****
  
     function Super_Translate
       (Source  : Super_String;
!       Mapping : Maps.Character_Mapping_Function)
!       return    Super_String;
  
     procedure Super_Translate
       (Source  : in out Super_String;
--- 313,319 ----
  
     function Super_Translate
       (Source  : Super_String;
!       Mapping : Maps.Character_Mapping_Function) return Super_String;
  
     procedure Super_Translate
       (Source  : in out Super_String;
*************** pragma Preelaborate (Superbounded);
*** 300,325 ****
     ---------------------------------------
  
     function Super_Replace_Slice
!      (Source   : Super_String;
!       Low      : Positive;
!       High     : Natural;
!       By       : String;
!       Drop     : Truncation := Error)
!       return     Super_String;
  
     procedure Super_Replace_Slice
!      (Source   : in out Super_String;
!       Low      : Positive;
!       High     : Natural;
!       By       : String;
!       Drop     : Truncation := Error);
  
     function Super_Insert
       (Source   : Super_String;
        Before   : Positive;
        New_Item : String;
!       Drop     : Truncation := Error)
!       return     Super_String;
  
     procedure Super_Insert
       (Source   : in out Super_String;
--- 324,347 ----
     ---------------------------------------
  
     function Super_Replace_Slice
!      (Source : Super_String;
!       Low    : Positive;
!       High   : Natural;
!       By     : String;
!       Drop   : Truncation := Error) return Super_String;
  
     procedure Super_Replace_Slice
!      (Source  : in out Super_String;
!       Low     : Positive;
!       High    : Natural;
!       By      : String;
!       Drop    : Truncation := Error);
  
     function Super_Insert
       (Source   : Super_String;
        Before   : Positive;
        New_Item : String;
!       Drop     : Truncation := Error) return Super_String;
  
     procedure Super_Insert
       (Source   : in out Super_String;
*************** pragma Preelaborate (Superbounded);
*** 328,338 ****
        Drop     : Truncation := Error);
  
     function Super_Overwrite
!      (Source    : Super_String;
!       Position  : Positive;
!       New_Item  : String;
!       Drop      : Truncation := Error)
!       return      Super_String;
  
     procedure Super_Overwrite
       (Source    : in out Super_String;
--- 350,359 ----
        Drop     : Truncation := Error);
  
     function Super_Overwrite
!      (Source   : Super_String;
!       Position : Positive;
!       New_Item : String;
!       Drop     : Truncation := Error) return Super_String;
  
     procedure Super_Overwrite
       (Source    : in out Super_String;
*************** pragma Preelaborate (Superbounded);
*** 343,350 ****
     function Super_Delete
       (Source  : Super_String;
        From    : Positive;
!       Through : Natural)
!       return    Super_String;
  
     procedure Super_Delete
       (Source  : in out Super_String;
--- 364,370 ----
     function Super_Delete
       (Source  : Super_String;
        From    : Positive;
!       Through : Natural) return Super_String;
  
     procedure Super_Delete
       (Source  : in out Super_String;
*************** pragma Preelaborate (Superbounded);
*** 357,374 ****
  
     function Super_Trim
       (Source : Super_String;
!       Side   : Trim_End)
!       return   Super_String;
  
     procedure Super_Trim
       (Source : in out Super_String;
        Side   : Trim_End);
  
     function Super_Trim
!      (Source  : Super_String;
        Left   : Maps.Character_Set;
!       Right  : Maps.Character_Set)
!       return   Super_String;
  
     procedure Super_Trim
       (Source : in out Super_String;
--- 377,392 ----
  
     function Super_Trim
       (Source : Super_String;
!       Side   : Trim_End) return Super_String;
  
     procedure Super_Trim
       (Source : in out Super_String;
        Side   : Trim_End);
  
     function Super_Trim
!      (Source : Super_String;
        Left   : Maps.Character_Set;
!       Right  : Maps.Character_Set) return Super_String;
  
     procedure Super_Trim
       (Source : in out Super_String;
*************** pragma Preelaborate (Superbounded);
*** 379,404 ****
       (Source : Super_String;
        Count  : Natural;
        Pad    : Character := Space;
!       Drop   : Truncation := Error)
!       return   Super_String;
  
     procedure Super_Head
       (Source : in out Super_String;
        Count  : Natural;
!       Pad    : Character  := Space;
        Drop   : Truncation := Error);
  
     function Super_Tail
       (Source : Super_String;
        Count  : Natural;
!       Pad    : Character  := Space;
!       Drop   : Truncation := Error)
!       return Super_String;
  
     procedure Super_Tail
       (Source : in out Super_String;
        Count  : Natural;
!       Pad    : Character  := Space;
        Drop   : Truncation := Error);
  
     ------------------------------------
--- 397,420 ----
       (Source : Super_String;
        Count  : Natural;
        Pad    : Character := Space;
!       Drop   : Truncation := Error) return Super_String;
  
     procedure Super_Head
       (Source : in out Super_String;
        Count  : Natural;
!       Pad    : Character := Space;
        Drop   : Truncation := Error);
  
     function Super_Tail
       (Source : Super_String;
        Count  : Natural;
!       Pad    : Character := Space;
!       Drop   : Truncation := Error) return Super_String;
  
     procedure Super_Tail
       (Source : in out Super_String;
        Count  : Natural;
!       Pad    : Character := Space;
        Drop   : Truncation := Error);
  
     ------------------------------------
*************** pragma Preelaborate (Superbounded);
*** 412,457 ****
     function Times
       (Left       : Natural;
        Right      : Character;
!       Max_Length : Positive)
!       return       Super_String;
     --  Note the additional parameter Max_Length
  
     function Times
       (Left       : Natural;
        Right      : String;
!       Max_Length : Positive)
!       return       Super_String;
     --  Note the additional parameter Max_Length
  
     function Times
       (Left  : Natural;
!       Right : Super_String)
!       return  Super_String;
  
     function Super_Replicate
       (Count      : Natural;
        Item       : Character;
        Drop       : Truncation := Error;
!       Max_Length : Positive)
!       return       Super_String;
     --  Note the additional parameter Max_Length
  
     function Super_Replicate
       (Count      : Natural;
        Item       : String;
        Drop       : Truncation := Error;
!       Max_Length : Positive)
!       return       Super_String;
     --  Note the additional parameter Max_Length
  
     function Super_Replicate
       (Count : Natural;
        Item  : Super_String;
!       Drop  : Truncation := Error)
!       return  Super_String;
  
  private
- 
        --  Pragma Inline declarations
  
        pragma Inline ("=");
--- 428,466 ----
     function Times
       (Left       : Natural;
        Right      : Character;
!       Max_Length : Positive) return Super_String;
     --  Note the additional parameter Max_Length
  
     function Times
       (Left       : Natural;
        Right      : String;
!       Max_Length : Positive) return Super_String;
     --  Note the additional parameter Max_Length
  
     function Times
       (Left  : Natural;
!       Right : Super_String) return Super_String;
  
     function Super_Replicate
       (Count      : Natural;
        Item       : Character;
        Drop       : Truncation := Error;
!       Max_Length : Positive) return Super_String;
     --  Note the additional parameter Max_Length
  
     function Super_Replicate
       (Count      : Natural;
        Item       : String;
        Drop       : Truncation := Error;
!       Max_Length : Positive) return Super_String;
     --  Note the additional parameter Max_Length
  
     function Super_Replicate
       (Count : Natural;
        Item  : Super_String;
!       Drop  : Truncation := Error) return Super_String;
  
  private
        --  Pragma Inline declarations
  
        pragma Inline ("=");
diff -Nrcpad gcc-3.4.3/gcc/ada/a-strunb.adb gcc-4.0.0/gcc/ada/a-strunb.adb
*** gcc-3.4.3/gcc/ada/a-strunb.adb	Tue Oct 21 13:41:54 2003
--- gcc-4.0.0/gcc/ada/a-strunb.adb	Thu Feb 10 13:51:37 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Ada.Strings.Unbounded is
*** 44,59 ****
        Chunk_Size : Natural);
     pragma Inline (Realloc_For_Chunk);
     --  Adjust the size allocated for the string. Add at least Chunk_Size so it
!    --  is safe to add a string of this size at the end of the current
!    --  content. The real size allocated for the string is Chunk_Size + x %
!    --  of the current string size. This buffered handling makes the Append
!    --  unbounded string routines very fast.
  
     ---------
     -- "&" --
     ---------
  
!    function "&" (Left, Right : Unbounded_String) return Unbounded_String is
        L_Length : constant Natural := Left.Last;
        R_Length : constant Natural := Right.Last;
        Result   : Unbounded_String;
--- 44,62 ----
        Chunk_Size : Natural);
     pragma Inline (Realloc_For_Chunk);
     --  Adjust the size allocated for the string. Add at least Chunk_Size so it
!    --  is safe to add a string of this size at the end of the current content.
!    --  The real size allocated for the string is Chunk_Size + x of the current
!    --  string size. This buffered handling makes the Append unbounded string
!    --  routines very fast.
  
     ---------
     -- "&" --
     ---------
  
!    function "&"
!      (Left  : Unbounded_String;
!       Right : Unbounded_String) return Unbounded_String
!    is
        L_Length : constant Natural := Left.Last;
        R_Length : constant Natural := Right.Last;
        Result   : Unbounded_String;
*************** package body Ada.Strings.Unbounded is
*** 73,80 ****
  
     function "&"
       (Left  : Unbounded_String;
!       Right : String)
!       return  Unbounded_String
     is
        L_Length : constant Natural := Left.Last;
        Result   : Unbounded_String;
--- 76,82 ----
  
     function "&"
       (Left  : Unbounded_String;
!       Right : String) return Unbounded_String
     is
        L_Length : constant Natural := Left.Last;
        Result   : Unbounded_String;
*************** package body Ada.Strings.Unbounded is
*** 92,99 ****
  
     function "&"
       (Left  : String;
!       Right : Unbounded_String)
!       return  Unbounded_String
     is
        R_Length : constant Natural := Right.Last;
        Result   : Unbounded_String;
--- 94,100 ----
  
     function "&"
       (Left  : String;
!       Right : Unbounded_String) return Unbounded_String
     is
        R_Length : constant Natural := Right.Last;
        Result   : Unbounded_String;
*************** package body Ada.Strings.Unbounded is
*** 112,119 ****
  
     function "&"
       (Left  : Unbounded_String;
!       Right : Character)
!       return  Unbounded_String
     is
        Result : Unbounded_String;
  
--- 113,119 ----
  
     function "&"
       (Left  : Unbounded_String;
!       Right : Character) return Unbounded_String
     is
        Result : Unbounded_String;
  
*************** package body Ada.Strings.Unbounded is
*** 131,138 ****
  
     function "&"
       (Left  : Character;
!       Right : Unbounded_String)
!       return  Unbounded_String
     is
        Result : Unbounded_String;
  
--- 131,137 ----
  
     function "&"
       (Left  : Character;
!       Right : Unbounded_String) return Unbounded_String
     is
        Result : Unbounded_String;
  
*************** package body Ada.Strings.Unbounded is
*** 152,159 ****
  
     function "*"
       (Left  : Natural;
!       Right : Character)
!       return  Unbounded_String
     is
        Result : Unbounded_String;
  
--- 151,157 ----
  
     function "*"
       (Left  : Natural;
!       Right : Character) return Unbounded_String
     is
        Result : Unbounded_String;
  
*************** package body Ada.Strings.Unbounded is
*** 170,177 ****
  
     function "*"
       (Left  : Natural;
!       Right : String)
!      return   Unbounded_String
     is
        Len    : constant Natural := Right'Length;
        K      : Positive;
--- 168,174 ----
  
     function "*"
       (Left  : Natural;
!       Right : String) return Unbounded_String
     is
        Len    : constant Natural := Right'Length;
        K      : Positive;
*************** package body Ada.Strings.Unbounded is
*** 193,200 ****
  
     function "*"
       (Left  : Natural;
!       Right : Unbounded_String)
!       return  Unbounded_String
     is
        Len    : constant Natural := Right.Last;
        K      : Positive;
--- 190,196 ----
  
     function "*"
       (Left  : Natural;
!       Right : Unbounded_String) return Unbounded_String
     is
        Len    : constant Natural := Right.Last;
        K      : Positive;
*************** package body Ada.Strings.Unbounded is
*** 219,225 ****
     -- "<" --
     ---------
  
!    function "<" (Left, Right : Unbounded_String) return Boolean is
     begin
        return
          Left.Reference (1 .. Left.Last) < Right.Reference (1 .. Right.Last);
--- 215,224 ----
     -- "<" --
     ---------
  
!    function "<"
!      (Left  : Unbounded_String;
!       Right : Unbounded_String) return Boolean
!    is
     begin
        return
          Left.Reference (1 .. Left.Last) < Right.Reference (1 .. Right.Last);
*************** package body Ada.Strings.Unbounded is
*** 227,234 ****
  
     function "<"
       (Left  : Unbounded_String;
!       Right : String)
!       return  Boolean
     is
     begin
        return Left.Reference (1 .. Left.Last) < Right;
--- 226,232 ----
  
     function "<"
       (Left  : Unbounded_String;
!       Right : String) return Boolean
     is
     begin
        return Left.Reference (1 .. Left.Last) < Right;
*************** package body Ada.Strings.Unbounded is
*** 236,243 ****
  
     function "<"
       (Left  : String;
!       Right : Unbounded_String)
!       return  Boolean
     is
     begin
        return Left < Right.Reference (1 .. Right.Last);
--- 234,240 ----
  
     function "<"
       (Left  : String;
!       Right : Unbounded_String) return Boolean
     is
     begin
        return Left < Right.Reference (1 .. Right.Last);
*************** package body Ada.Strings.Unbounded is
*** 247,253 ****
     -- "<=" --
     ----------
  
!    function "<=" (Left, Right : Unbounded_String) return Boolean is
     begin
        return
          Left.Reference (1 .. Left.Last) <= Right.Reference (1 .. Right.Last);
--- 244,253 ----
     -- "<=" --
     ----------
  
!    function "<="
!      (Left  : Unbounded_String;
!       Right : Unbounded_String) return Boolean
!    is
     begin
        return
          Left.Reference (1 .. Left.Last) <= Right.Reference (1 .. Right.Last);
*************** package body Ada.Strings.Unbounded is
*** 255,262 ****
  
     function "<="
       (Left  : Unbounded_String;
!       Right : String)
!       return  Boolean
     is
     begin
        return Left.Reference (1 .. Left.Last) <= Right;
--- 255,261 ----
  
     function "<="
       (Left  : Unbounded_String;
!       Right : String) return Boolean
     is
     begin
        return Left.Reference (1 .. Left.Last) <= Right;
*************** package body Ada.Strings.Unbounded is
*** 264,271 ****
  
     function "<="
       (Left  : String;
!       Right : Unbounded_String)
!       return  Boolean
     is
     begin
        return Left <= Right.Reference (1 .. Right.Last);
--- 263,269 ----
  
     function "<="
       (Left  : String;
!       Right : Unbounded_String) return Boolean
     is
     begin
        return Left <= Right.Reference (1 .. Right.Last);
*************** package body Ada.Strings.Unbounded is
*** 275,281 ****
     -- "=" --
     ---------
  
!    function "=" (Left, Right : Unbounded_String) return Boolean is
     begin
        return
          Left.Reference (1 .. Left.Last) = Right.Reference (1 .. Right.Last);
--- 273,282 ----
     -- "=" --
     ---------
  
!    function "="
!      (Left  : Unbounded_String;
!       Right : Unbounded_String) return Boolean
!    is
     begin
        return
          Left.Reference (1 .. Left.Last) = Right.Reference (1 .. Right.Last);
*************** package body Ada.Strings.Unbounded is
*** 283,290 ****
  
     function "="
       (Left  : Unbounded_String;
!       Right : String)
!       return  Boolean
     is
     begin
        return Left.Reference (1 .. Left.Last) = Right;
--- 284,290 ----
  
     function "="
       (Left  : Unbounded_String;
!       Right : String) return Boolean
     is
     begin
        return Left.Reference (1 .. Left.Last) = Right;
*************** package body Ada.Strings.Unbounded is
*** 292,299 ****
  
     function "="
       (Left  : String;
!       Right : Unbounded_String)
!       return  Boolean
     is
     begin
        return Left = Right.Reference (1 .. Right.Last);
--- 292,298 ----
  
     function "="
       (Left  : String;
!       Right : Unbounded_String) return Boolean
     is
     begin
        return Left = Right.Reference (1 .. Right.Last);
*************** package body Ada.Strings.Unbounded is
*** 303,309 ****
     -- ">" --
     ---------
  
!    function ">"  (Left, Right : Unbounded_String) return Boolean is
     begin
        return
          Left.Reference (1 .. Left.Last) > Right.Reference (1 .. Right.Last);
--- 302,311 ----
     -- ">" --
     ---------
  
!    function ">"
!      (Left  : Unbounded_String;
!       Right : Unbounded_String) return Boolean
!    is
     begin
        return
          Left.Reference (1 .. Left.Last) > Right.Reference (1 .. Right.Last);
*************** package body Ada.Strings.Unbounded is
*** 311,318 ****
  
     function ">"
       (Left  : Unbounded_String;
!       Right : String)
!       return  Boolean
     is
     begin
        return Left.Reference (1 .. Left.Last) > Right;
--- 313,319 ----
  
     function ">"
       (Left  : Unbounded_String;
!       Right : String) return Boolean
     is
     begin
        return Left.Reference (1 .. Left.Last) > Right;
*************** package body Ada.Strings.Unbounded is
*** 320,327 ****
  
     function ">"
       (Left  : String;
!       Right : Unbounded_String)
!       return  Boolean
     is
     begin
        return Left > Right.Reference (1 .. Right.Last);
--- 321,327 ----
  
     function ">"
       (Left  : String;
!       Right : Unbounded_String) return Boolean
     is
     begin
        return Left > Right.Reference (1 .. Right.Last);
*************** package body Ada.Strings.Unbounded is
*** 331,337 ****
     -- ">=" --
     ----------
  
!    function ">=" (Left, Right : Unbounded_String) return Boolean is
     begin
        return
          Left.Reference (1 .. Left.Last) >= Right.Reference (1 .. Right.Last);
--- 331,340 ----
     -- ">=" --
     ----------
  
!    function ">="
!      (Left  : Unbounded_String;
!       Right : Unbounded_String) return Boolean
!    is
     begin
        return
          Left.Reference (1 .. Left.Last) >= Right.Reference (1 .. Right.Last);
*************** package body Ada.Strings.Unbounded is
*** 339,346 ****
  
     function ">="
       (Left  : Unbounded_String;
!       Right : String)
!       return  Boolean
     is
     begin
        return Left.Reference (1 .. Left.Last) >= Right;
--- 342,348 ----
  
     function ">="
       (Left  : Unbounded_String;
!       Right : String) return Boolean
     is
     begin
        return Left.Reference (1 .. Left.Last) >= Right;
*************** package body Ada.Strings.Unbounded is
*** 348,355 ****
  
     function ">="
       (Left  : String;
!       Right : Unbounded_String)
!       return  Boolean
     is
     begin
        return Left >= Right.Reference (1 .. Right.Last);
--- 350,356 ----
  
     function ">="
       (Left  : String;
!       Right : Unbounded_String) return Boolean
     is
     begin
        return Left >= Right.Reference (1 .. Right.Last);
*************** package body Ada.Strings.Unbounded is
*** 362,370 ****
     procedure Adjust (Object : in out Unbounded_String) is
     begin
        --  Copy string, except we do not copy the statically allocated null
!       --  string, since it can never be deallocated.
!       --  Note that we do not copy extra string room here to avoid dragging
!       --  unused allocated memory.
  
        if Object.Reference /= Null_String'Access then
           Object.Reference := new String'(Object.Reference (1 .. Object.Last));
--- 363,370 ----
     procedure Adjust (Object : in out Unbounded_String) is
     begin
        --  Copy string, except we do not copy the statically allocated null
!       --  string, since it can never be deallocated. Note that we do not copy
!       --  extra string room here to avoid dragging unused allocated memory.
  
        if Object.Reference /= Null_String'Access then
           Object.Reference := new String'(Object.Reference (1 .. Object.Last));
*************** package body Ada.Strings.Unbounded is
*** 412,421 ****
     -----------
  
     function Count
!      (Source   : Unbounded_String;
!       Pattern  : String;
!       Mapping  : Maps.Character_Mapping := Maps.Identity)
!       return     Natural
     is
     begin
        return
--- 412,420 ----
     -----------
  
     function Count
!      (Source  : Unbounded_String;
!       Pattern : String;
!       Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
     is
     begin
        return
*************** package body Ada.Strings.Unbounded is
*** 423,432 ****
     end Count;
  
     function Count
!      (Source   : Unbounded_String;
!       Pattern  : String;
!       Mapping  : Maps.Character_Mapping_Function)
!       return     Natural
     is
     begin
        return
--- 422,430 ----
     end Count;
  
     function Count
!      (Source  : Unbounded_String;
!       Pattern : String;
!       Mapping : Maps.Character_Mapping_Function) return Natural
     is
     begin
        return
*************** package body Ada.Strings.Unbounded is
*** 434,442 ****
     end Count;
  
     function Count
!      (Source   : Unbounded_String;
!       Set      : Maps.Character_Set)
!       return     Natural
     is
     begin
        return Search.Count (Source.Reference (1 .. Source.Last), Set);
--- 432,439 ----
     end Count;
  
     function Count
!      (Source : Unbounded_String;
!       Set    : Maps.Character_Set) return Natural
     is
     begin
        return Search.Count (Source.Reference (1 .. Source.Last), Set);
*************** package body Ada.Strings.Unbounded is
*** 449,456 ****
     function Delete
       (Source  : Unbounded_String;
        From    : Positive;
!       Through : Natural)
!       return    Unbounded_String
     is
     begin
        return
--- 446,452 ----
     function Delete
       (Source  : Unbounded_String;
        From    : Positive;
!       Through : Natural) return Unbounded_String
     is
     begin
        return
*************** package body Ada.Strings.Unbounded is
*** 488,495 ****
  
     function Element
       (Source : Unbounded_String;
!       Index  : Positive)
!       return   Character
     is
     begin
        if Index <= Source.Last then
--- 484,490 ----
  
     function Element
       (Source : Unbounded_String;
!       Index  : Positive) return Character
     is
     begin
        if Index <= Source.Last then
*************** package body Ada.Strings.Unbounded is
*** 556,563 ****
     function Head
       (Source : Unbounded_String;
        Count  : Natural;
!       Pad    : Character := Space)
!       return   Unbounded_String
     is
     begin
        return To_Unbounded_String
--- 551,557 ----
     function Head
       (Source : Unbounded_String;
        Count  : Natural;
!       Pad    : Character := Space) return Unbounded_String
     is
     begin
        return To_Unbounded_String
*************** package body Ada.Strings.Unbounded is
*** 570,576 ****
        Pad    : Character := Space)
     is
        Old : String_Access := Source.Reference;
- 
     begin
        Source.Reference :=
          new String'(Fixed.Head (Source.Reference (1 .. Source.Last),
--- 564,569 ----
*************** package body Ada.Strings.Unbounded is
*** 584,594 ****
     -----------
  
     function Index
!      (Source   : Unbounded_String;
!       Pattern  : String;
!       Going    : Strings.Direction := Strings.Forward;
!       Mapping  : Maps.Character_Mapping := Maps.Identity)
!       return     Natural
     is
     begin
        return Search.Index
--- 577,586 ----
     -----------
  
     function Index
!      (Source  : Unbounded_String;
!       Pattern : String;
!       Going   : Strings.Direction := Strings.Forward;
!       Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
     is
     begin
        return Search.Index
*************** package body Ada.Strings.Unbounded is
*** 596,606 ****
     end Index;
  
     function Index
!      (Source   : Unbounded_String;
!       Pattern  : String;
!       Going    : Direction := Forward;
!       Mapping  : Maps.Character_Mapping_Function)
!       return     Natural
     is
     begin
        return Search.Index
--- 588,597 ----
     end Index;
  
     function Index
!      (Source  : Unbounded_String;
!       Pattern : String;
!       Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping_Function) return Natural
     is
     begin
        return Search.Index
*************** package body Ada.Strings.Unbounded is
*** 611,632 ****
       (Source : Unbounded_String;
        Set    : Maps.Character_Set;
        Test   : Strings.Membership := Strings.Inside;
!       Going  : Strings.Direction  := Strings.Forward)
!       return   Natural
     is
     begin
        return Search.Index
          (Source.Reference (1 .. Source.Last), Set, Test, Going);
     end Index;
  
     function Index_Non_Blank
       (Source : Unbounded_String;
!       Going  : Strings.Direction := Strings.Forward)
!       return   Natural
     is
     begin
        return
!         Search.Index_Non_Blank (Source.Reference (1 .. Source.Last), Going);
     end Index_Non_Blank;
  
     ----------------
--- 602,670 ----
       (Source : Unbounded_String;
        Set    : Maps.Character_Set;
        Test   : Strings.Membership := Strings.Inside;
!       Going  : Strings.Direction  := Strings.Forward) return Natural
     is
     begin
        return Search.Index
          (Source.Reference (1 .. Source.Last), Set, Test, Going);
     end Index;
  
+    function Index
+      (Source  : Unbounded_String;
+       Pattern : String;
+       From    : Positive;
+       Going   : Direction := Forward;
+       Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
+    is
+    begin
+       return Search.Index
+         (Source.Reference (1 .. Source.Last), Pattern, From, Going, Mapping);
+    end Index;
+ 
+    function Index
+      (Source  : Unbounded_String;
+       Pattern : String;
+       From    : Positive;
+       Going   : Direction := Forward;
+       Mapping : Maps.Character_Mapping_Function) return Natural
+    is
+    begin
+       return Search.Index
+         (Source.Reference (1 .. Source.Last), Pattern, From, Going, Mapping);
+    end Index;
+ 
+ 
+    function Index
+      (Source  : Unbounded_String;
+       Set     : Maps.Character_Set;
+       From    : Positive;
+       Test    : Membership := Inside;
+       Going   : Direction := Forward) return Natural
+    is
+    begin
+       return Search.Index
+         (Source.Reference (1 .. Source.Last), Set, From, Test, Going);
+    end Index;
+ 
     function Index_Non_Blank
       (Source : Unbounded_String;
!       Going  : Strings.Direction := Strings.Forward) return Natural
     is
     begin
        return
!         Search.Index_Non_Blank
!           (Source.Reference (1 .. Source.Last), Going);
!    end Index_Non_Blank;
! 
!    function Index_Non_Blank
!      (Source : Unbounded_String;
!       From   : Positive;
!       Going  : Direction := Forward) return Natural
!    is
!    begin
!       return
!         Search.Index_Non_Blank
!           (Source.Reference (1 .. Source.Last), From, Going);
     end Index_Non_Blank;
  
     ----------------
*************** package body Ada.Strings.Unbounded is
*** 646,653 ****
     function Insert
       (Source   : Unbounded_String;
        Before   : Positive;
!       New_Item : String)
!       return     Unbounded_String
     is
     begin
        return To_Unbounded_String
--- 684,690 ----
     function Insert
       (Source   : Unbounded_String;
        Before   : Positive;
!       New_Item : String) return Unbounded_String
     is
     begin
        return To_Unbounded_String
*************** package body Ada.Strings.Unbounded is
*** 688,698 ****
     ---------------
  
     function Overwrite
!      (Source    : Unbounded_String;
!       Position  : Positive;
!       New_Item  : String)
!       return      Unbounded_String is
! 
     begin
        return To_Unbounded_String
          (Fixed.Overwrite
--- 725,734 ----
     ---------------
  
     function Overwrite
!      (Source   : Unbounded_String;
!       Position : Positive;
!       New_Item : String) return Unbounded_String
!    is
     begin
        return To_Unbounded_String
          (Fixed.Overwrite
*************** package body Ada.Strings.Unbounded is
*** 705,719 ****
        New_Item  : String)
     is
        NL : constant Natural := New_Item'Length;
- 
     begin
        if Position <= Source.Last - NL + 1 then
           Source.Reference (Position .. Position + NL - 1) := New_Item;
- 
        else
           declare
              Old : String_Access := Source.Reference;
- 
           begin
              Source.Reference := new String'
                (Fixed.Overwrite
--- 741,752 ----
*************** package body Ada.Strings.Unbounded is
*** 741,747 ****
              Alloc_Chunk_Size : constant Positive :=
                                   Chunk_Size + (S_Length / Growth_Factor);
              Tmp : String_Access;
- 
           begin
              Tmp := new String (1 .. S_Length + Alloc_Chunk_Size);
              Tmp (1 .. Source.Last) := Source.Reference (1 .. Source.Last);
--- 774,779 ----
*************** package body Ada.Strings.Unbounded is
*** 773,783 ****
     -------------------
  
     function Replace_Slice
!      (Source   : Unbounded_String;
!       Low      : Positive;
!       High     : Natural;
!       By       : String)
!       return     Unbounded_String
     is
     begin
        return To_Unbounded_String
--- 805,814 ----
     -------------------
  
     function Replace_Slice
!      (Source : Unbounded_String;
!       Low    : Positive;
!       High   : Natural;
!       By     : String) return Unbounded_String
     is
     begin
        return To_Unbounded_String
*************** package body Ada.Strings.Unbounded is
*** 786,798 ****
     end Replace_Slice;
  
     procedure Replace_Slice
!      (Source   : in out Unbounded_String;
!       Low      : Positive;
!       High     : Natural;
!       By       : String)
     is
        Old : String_Access := Source.Reference;
- 
     begin
        Source.Reference := new String'
          (Fixed.Replace_Slice
--- 817,828 ----
     end Replace_Slice;
  
     procedure Replace_Slice
!      (Source : in out Unbounded_String;
!       Low    : Positive;
!       High   : Natural;
!       By     : String)
     is
        Old : String_Access := Source.Reference;
     begin
        Source.Reference := new String'
          (Fixed.Replace_Slice
*************** package body Ada.Strings.Unbounded is
*** 801,806 ****
--- 831,850 ----
        Free (Old);
     end Replace_Slice;
  
+    --------------------------
+    -- Set_Unbounded_String --
+    --------------------------
+ 
+    procedure Set_Unbounded_String
+      (Target : out Unbounded_String;
+       Source : String)
+    is
+    begin
+       Target.Last          := Source'Length;
+       Target.Reference     := new String (1 .. Source'Length);
+       Target.Reference.all := Source;
+    end Set_Unbounded_String;
+ 
     -----------
     -- Slice --
     -----------
*************** package body Ada.Strings.Unbounded is
*** 808,815 ****
     function Slice
       (Source : Unbounded_String;
        Low    : Positive;
!       High   : Natural)
!       return   String
     is
     begin
        --  Note: test of High > Length is in accordance with AI95-00128
--- 852,858 ----
     function Slice
       (Source : Unbounded_String;
        Low    : Positive;
!       High   : Natural) return String
     is
     begin
        --  Note: test of High > Length is in accordance with AI95-00128
*************** package body Ada.Strings.Unbounded is
*** 828,836 ****
     function Tail
       (Source : Unbounded_String;
        Count  : Natural;
!       Pad    : Character := Space)
!       return   Unbounded_String is
! 
     begin
        return To_Unbounded_String
          (Fixed.Tail (Source.Reference (1 .. Source.Last), Count, Pad));
--- 871,877 ----
     function Tail
       (Source : Unbounded_String;
        Count  : Natural;
!       Pad    : Character := Space) return Unbounded_String is
     begin
        return To_Unbounded_String
          (Fixed.Tail (Source.Reference (1 .. Source.Last), Count, Pad));
*************** package body Ada.Strings.Unbounded is
*** 842,848 ****
        Pad    : Character := Space)
     is
        Old : String_Access := Source.Reference;
- 
     begin
        Source.Reference := new String'
          (Fixed.Tail (Source.Reference (1 .. Source.Last), Count, Pad));
--- 883,888 ----
*************** package body Ada.Strings.Unbounded is
*** 865,871 ****
  
     function To_Unbounded_String (Source : String) return Unbounded_String is
        Result : Unbounded_String;
- 
     begin
        Result.Last          := Source'Length;
        Result.Reference     := new String (1 .. Source'Length);
--- 905,910 ----
*************** package body Ada.Strings.Unbounded is
*** 874,884 ****
     end To_Unbounded_String;
  
     function To_Unbounded_String
!      (Length : Natural)
!       return   Unbounded_String
     is
        Result : Unbounded_String;
- 
     begin
        Result.Last      := Length;
        Result.Reference := new String (1 .. Length);
--- 913,921 ----
     end To_Unbounded_String;
  
     function To_Unbounded_String
!      (Length : Natural) return Unbounded_String
     is
        Result : Unbounded_String;
     begin
        Result.Last      := Length;
        Result.Reference := new String (1 .. Length);
*************** package body Ada.Strings.Unbounded is
*** 891,898 ****
  
     function Translate
       (Source  : Unbounded_String;
!       Mapping : Maps.Character_Mapping)
!       return    Unbounded_String
     is
     begin
        return To_Unbounded_String
--- 928,934 ----
  
     function Translate
       (Source  : Unbounded_String;
!       Mapping : Maps.Character_Mapping) return Unbounded_String
     is
     begin
        return To_Unbounded_String
*************** package body Ada.Strings.Unbounded is
*** 909,916 ****
  
     function Translate
       (Source  : Unbounded_String;
!       Mapping : Maps.Character_Mapping_Function)
!       return    Unbounded_String
     is
     begin
        return To_Unbounded_String
--- 945,951 ----
  
     function Translate
       (Source  : Unbounded_String;
!       Mapping : Maps.Character_Mapping_Function) return Unbounded_String
     is
     begin
        return To_Unbounded_String
*************** package body Ada.Strings.Unbounded is
*** 931,938 ****
  
     function Trim
       (Source : Unbounded_String;
!       Side   : Trim_End)
!       return   Unbounded_String
     is
     begin
        return To_Unbounded_String
--- 966,972 ----
  
     function Trim
       (Source : Unbounded_String;
!       Side   : Trim_End) return Unbounded_String
     is
     begin
        return To_Unbounded_String
*************** package body Ada.Strings.Unbounded is
*** 944,950 ****
        Side   : Trim_End)
     is
        Old : String_Access := Source.Reference;
- 
     begin
        Source.Reference := new String'
          (Fixed.Trim (Source.Reference (1 .. Source.Last), Side));
--- 978,983 ----
*************** package body Ada.Strings.Unbounded is
*** 955,962 ****
     function Trim
       (Source : Unbounded_String;
        Left   : Maps.Character_Set;
!       Right  : Maps.Character_Set)
!       return   Unbounded_String
     is
     begin
        return To_Unbounded_String
--- 988,994 ----
     function Trim
       (Source : Unbounded_String;
        Left   : Maps.Character_Set;
!       Right  : Maps.Character_Set) return Unbounded_String
     is
     begin
        return To_Unbounded_String
*************** package body Ada.Strings.Unbounded is
*** 969,975 ****
        Right  : Maps.Character_Set)
     is
        Old : String_Access := Source.Reference;
- 
     begin
        Source.Reference := new String'
          (Fixed.Trim (Source.Reference (1 .. Source.Last), Left, Right));
--- 1001,1006 ----
*************** package body Ada.Strings.Unbounded is
*** 977,980 ****
--- 1008,1042 ----
        Free (Old);
     end Trim;
  
+    ---------------------
+    -- Unbounded_Slice --
+    ---------------------
+ 
+    function Unbounded_Slice
+      (Source : Unbounded_String;
+       Low    : Positive;
+       High   : Natural) return Unbounded_String
+    is
+    begin
+       if Low > Source.Last + 1 or else High > Source.Last then
+          raise Index_Error;
+       else
+          return To_Unbounded_String (Source.Reference.all (Low .. High));
+       end if;
+    end Unbounded_Slice;
+ 
+    procedure Unbounded_Slice
+      (Source : Unbounded_String;
+       Target : out Unbounded_String;
+       Low    : Positive;
+       High   : Natural)
+    is
+    begin
+       if Low > Source.Last + 1 or else High > Source.Last then
+          raise Index_Error;
+       else
+          Target := To_Unbounded_String (Source.Reference.all (Low .. High));
+       end if;
+    end Unbounded_Slice;
+ 
  end Ada.Strings.Unbounded;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-strunb.ads gcc-4.0.0/gcc/ada/a-strunb.ads
*** gcc-3.4.3/gcc/ada/a-strunb.ads	Tue Oct 21 13:41:54 2003
--- gcc-4.0.0/gcc/ada/a-strunb.ads	Thu Feb 10 13:51:38 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** pragma Preelaborate (Unbounded);
*** 55,226 ****
     -- Conversion, Concatenation, and Selection Functions --
     --------------------------------------------------------
  
!    function To_Unbounded_String (Source : String)     return Unbounded_String;
!    function To_Unbounded_String (Length : in Natural) return Unbounded_String;
  
     function To_String (Source : Unbounded_String) return String;
  
     procedure Append
       (Source   : in out Unbounded_String;
!       New_Item : in Unbounded_String);
  
     procedure Append
       (Source   : in out Unbounded_String;
!       New_Item : in String);
  
     procedure Append
       (Source   : in out Unbounded_String;
!       New_Item : in Character);
  
!    function "&" (Left, Right : Unbounded_String) return Unbounded_String;
  
     function "&"
!      (Left  : in Unbounded_String;
!       Right : in String)
!       return  Unbounded_String;
  
     function "&"
!      (Left  : in String;
!       Right : in Unbounded_String)
!       return  Unbounded_String;
  
     function "&"
!      (Left  : in Unbounded_String;
!       Right : in Character)
!       return  Unbounded_String;
  
     function "&"
!      (Left  : in Character;
!       Right : in Unbounded_String)
!       return  Unbounded_String;
  
     function Element
!      (Source : in Unbounded_String;
!       Index  : in Positive)
!       return   Character;
  
     procedure Replace_Element
       (Source : in out Unbounded_String;
!       Index  : in Positive;
        By     : Character);
  
     function Slice
!      (Source : in Unbounded_String;
!       Low    : in Positive;
!       High   : in Natural)
!       return   String;
  
!    function "=" (Left, Right : in Unbounded_String) return Boolean;
  
     function "="
!      (Left  : in Unbounded_String;
!       Right : in String)
!       return  Boolean;
  
     function "="
!      (Left  : in String;
!       Right : in Unbounded_String)
!       return  Boolean;
  
!    function "<" (Left, Right : in Unbounded_String) return Boolean;
  
     function "<"
!      (Left  : in Unbounded_String;
!       Right : in String)
!       return  Boolean;
  
     function "<"
!      (Left  : in String;
!       Right : in Unbounded_String)
!       return  Boolean;
  
!    function "<=" (Left, Right : in Unbounded_String) return Boolean;
  
     function "<="
!      (Left  : in Unbounded_String;
!       Right : in String)
!       return  Boolean;
  
     function "<="
!      (Left  : in String;
!       Right : in Unbounded_String)
!       return  Boolean;
  
!    function ">" (Left, Right : in Unbounded_String) return Boolean;
  
     function ">"
!      (Left  : in Unbounded_String;
!       Right : in String)
!       return  Boolean;
  
     function ">"
!      (Left  : in String;
!       Right : in Unbounded_String)
!       return  Boolean;
  
!    function ">=" (Left, Right : in Unbounded_String) return Boolean;
  
     function ">="
!      (Left  : in Unbounded_String;
!       Right : in String)
!       return  Boolean;
  
     function ">="
!      (Left  : in String;
!       Right : in Unbounded_String)
!       return  Boolean;
  
     ------------------------
     -- Search Subprograms --
     ------------------------
  
     function Index
!      (Source   : in Unbounded_String;
!       Pattern  : in String;
!       Going    : in Direction := Forward;
!       Mapping  : in Maps.Character_Mapping := Maps.Identity)
!       return     Natural;
  
     function Index
!      (Source   : in Unbounded_String;
!       Pattern  : in String;
!       Going    : in Direction := Forward;
!       Mapping  : in Maps.Character_Mapping_Function)
!       return     Natural;
  
     function Index
!      (Source : in Unbounded_String;
!       Set    : in Maps.Character_Set;
!       Test   : in Membership := Inside;
!       Going  : in Direction  := Forward)
!       return   Natural;
  
     function Index_Non_Blank
!      (Source : in Unbounded_String;
!       Going  : in Direction := Forward)
!       return   Natural;
  
     function Count
!      (Source  : in Unbounded_String;
!       Pattern : in String;
!       Mapping : in Maps.Character_Mapping := Maps.Identity)
!       return    Natural;
  
     function Count
!      (Source   : in Unbounded_String;
!       Pattern  : in String;
!       Mapping  : in Maps.Character_Mapping_Function)
!       return     Natural;
  
     function Count
!      (Source : in Unbounded_String;
!       Set    : in Maps.Character_Set)
!       return   Natural;
  
     procedure Find_Token
!      (Source : in Unbounded_String;
!       Set    : in Maps.Character_Set;
!       Test   : in Membership;
        First  : out Positive;
        Last   : out Natural);
  
--- 55,266 ----
     -- Conversion, Concatenation, and Selection Functions --
     --------------------------------------------------------
  
!    function To_Unbounded_String
!      (Source : String)  return Unbounded_String;
! 
!    function To_Unbounded_String
!      (Length : Natural) return Unbounded_String;
  
     function To_String (Source : Unbounded_String) return String;
  
+    procedure Set_Unbounded_String
+      (Target : out Unbounded_String;
+       Source : String);
+    pragma Ada_05 (Set_Unbounded_String);
+ 
     procedure Append
       (Source   : in out Unbounded_String;
!       New_Item : Unbounded_String);
  
     procedure Append
       (Source   : in out Unbounded_String;
!       New_Item : String);
  
     procedure Append
       (Source   : in out Unbounded_String;
!       New_Item : Character);
  
!    function "&"
!      (Left  : Unbounded_String;
!       Right : Unbounded_String) return Unbounded_String;
  
     function "&"
!      (Left  : Unbounded_String;
!       Right : String) return Unbounded_String;
  
     function "&"
!      (Left  : String;
!       Right : Unbounded_String) return Unbounded_String;
  
     function "&"
!      (Left  : Unbounded_String;
!       Right : Character) return Unbounded_String;
  
     function "&"
!      (Left  : Character;
!       Right : Unbounded_String) return Unbounded_String;
  
     function Element
!      (Source : Unbounded_String;
!       Index  : Positive) return Character;
  
     procedure Replace_Element
       (Source : in out Unbounded_String;
!       Index  : Positive;
        By     : Character);
  
     function Slice
!      (Source : Unbounded_String;
!       Low    : Positive;
!       High   : Natural) return String;
  
!    function Unbounded_Slice
!      (Source : Unbounded_String;
!       Low    : Positive;
!       High   : Natural) return Unbounded_String;
!    pragma Ada_05 (Unbounded_Slice);
! 
!    procedure Unbounded_Slice
!      (Source : Unbounded_String;
!       Target : out Unbounded_String;
!       Low    : Positive;
!       High   : Natural);
!    pragma Ada_05 (Unbounded_Slice);
  
     function "="
!      (Left  : Unbounded_String;
!       Right : Unbounded_String) return Boolean;
  
     function "="
!      (Left  : Unbounded_String;
!       Right : String) return Boolean;
  
!    function "="
!      (Left  : String;
!       Right : Unbounded_String) return Boolean;
  
     function "<"
!      (Left  : Unbounded_String;
!       Right : Unbounded_String) return Boolean;
  
     function "<"
!      (Left  : Unbounded_String;
!       Right : String) return Boolean;
  
!    function "<"
!      (Left  : String;
!       Right : Unbounded_String) return Boolean;
  
     function "<="
!      (Left  : Unbounded_String;
!       Right : Unbounded_String) return Boolean;
  
     function "<="
!      (Left  : Unbounded_String;
!       Right : String) return Boolean;
  
!    function "<="
!      (Left  : String;
!       Right : Unbounded_String) return Boolean;
  
     function ">"
!      (Left  : Unbounded_String;
!       Right : Unbounded_String) return Boolean;
  
     function ">"
!      (Left  : Unbounded_String;
!       Right : String) return Boolean;
  
!    function ">"
!      (Left  : String;
!       Right : Unbounded_String) return Boolean;
  
     function ">="
!      (Left  : Unbounded_String;
!       Right : Unbounded_String) return Boolean;
  
     function ">="
!      (Left  : Unbounded_String;
!       Right : String) return Boolean;
! 
!    function ">="
!      (Left  : String;
!       Right : Unbounded_String) return Boolean;
  
     ------------------------
     -- Search Subprograms --
     ------------------------
  
     function Index
!      (Source  : Unbounded_String;
!       Pattern : String;
!       Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping := Maps.Identity) return Natural;
  
     function Index
!      (Source  : Unbounded_String;
!       Pattern : String;
!       Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping_Function) return Natural;
  
     function Index
!      (Source : Unbounded_String;
!       Set    : Maps.Character_Set;
!       Test   : Membership := Inside;
!       Going  : Direction  := Forward) return Natural;
! 
!    function Index
!      (Source  : Unbounded_String;
!       Pattern : String;
!       From    : Positive;
!       Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping := Maps.Identity) return Natural;
!    pragma Ada_05 (Index);
! 
!    function Index
!      (Source  : Unbounded_String;
!       Pattern : String;
!       From    : Positive;
!       Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping_Function) return Natural;
!    pragma Ada_05 (Index);
! 
!    function Index
!      (Source  : Unbounded_String;
!       Set     : Maps.Character_Set;
!       From    : Positive;
!       Test    : Membership := Inside;
!       Going   : Direction := Forward) return Natural;
!    pragma Ada_05 (Index);
  
     function Index_Non_Blank
!      (Source : Unbounded_String;
!       Going  : Direction := Forward) return Natural;
! 
!    function Index_Non_Blank
!      (Source : Unbounded_String;
!       From   : Positive;
!       Going  : Direction := Forward) return Natural;
!    pragma Ada_05 (Index_Non_Blank);
  
     function Count
!      (Source  : Unbounded_String;
!       Pattern : String;
!       Mapping : Maps.Character_Mapping := Maps.Identity) return Natural;
  
     function Count
!      (Source  : Unbounded_String;
!       Pattern : String;
!       Mapping : Maps.Character_Mapping_Function) return Natural;
  
     function Count
!      (Source : Unbounded_String;
!       Set    : Maps.Character_Set) return Natural;
  
     procedure Find_Token
!      (Source : Unbounded_String;
!       Set    : Maps.Character_Set;
!       Test   : Membership;
        First  : out Positive;
        Last   : out Natural);
  
*************** pragma Preelaborate (Unbounded);
*** 229,357 ****
     ------------------------------------
  
     function Translate
!      (Source  : in Unbounded_String;
!       Mapping : in Maps.Character_Mapping)
!       return    Unbounded_String;
  
     procedure Translate
       (Source  : in out Unbounded_String;
        Mapping : Maps.Character_Mapping);
  
     function Translate
!      (Source  : in Unbounded_String;
!       Mapping : in Maps.Character_Mapping_Function)
!       return    Unbounded_String;
  
     procedure Translate
       (Source  : in out Unbounded_String;
!       Mapping : in Maps.Character_Mapping_Function);
  
     ---------------------------------------
     -- String Transformation Subprograms --
     ---------------------------------------
  
     function Replace_Slice
!      (Source : in Unbounded_String;
!       Low    : in Positive;
!       High   : in Natural;
!       By     : in String)
!       return   Unbounded_String;
  
     procedure Replace_Slice
!      (Source   : in out Unbounded_String;
!       Low      : in Positive;
!       High     : in Natural;
!       By       : in String);
  
     function Insert
!      (Source   : in Unbounded_String;
!       Before   : in Positive;
!       New_Item : in String)
!       return     Unbounded_String;
  
     procedure Insert
       (Source   : in out Unbounded_String;
!       Before   : in Positive;
!       New_Item : in String);
  
     function Overwrite
!      (Source   : in Unbounded_String;
!       Position : in Positive;
!       New_Item : in String)
!       return     Unbounded_String;
  
     procedure Overwrite
!      (Source    : in out Unbounded_String;
!       Position  : in Positive;
!       New_Item  : in String);
  
     function Delete
!      (Source  : in Unbounded_String;
!       From    : in Positive;
!       Through : in Natural)
!       return    Unbounded_String;
  
     procedure Delete
       (Source  : in out Unbounded_String;
!       From    : in Positive;
!       Through : in Natural);
  
     function Trim
!      (Source : in Unbounded_String;
!       Side   : in Trim_End)
!       return   Unbounded_String;
  
     procedure Trim
       (Source : in out Unbounded_String;
!       Side   : in Trim_End);
  
     function Trim
!      (Source : in Unbounded_String;
!       Left   : in Maps.Character_Set;
!       Right  : in Maps.Character_Set)
!       return   Unbounded_String;
  
     procedure Trim
       (Source : in out Unbounded_String;
!       Left   : in Maps.Character_Set;
!       Right  : in Maps.Character_Set);
  
     function Head
!      (Source : in Unbounded_String;
!       Count  : in Natural;
!       Pad    : in Character := Space)
!       return   Unbounded_String;
  
     procedure Head
       (Source : in out Unbounded_String;
!       Count  : in Natural;
!       Pad    : in Character := Space);
  
     function Tail
!      (Source : in Unbounded_String;
!       Count  : in Natural;
!       Pad    : in Character := Space)
!       return   Unbounded_String;
  
     procedure Tail
       (Source : in out Unbounded_String;
!       Count  : in Natural;
!       Pad    : in Character := Space);
  
     function "*"
!      (Left  : in Natural;
!       Right : in Character)
!       return  Unbounded_String;
  
     function "*"
!      (Left  : in Natural;
!       Right : in String)
!       return  Unbounded_String;
  
     function "*"
!      (Left  : in Natural;
!       Right : in Unbounded_String)
!       return  Unbounded_String;
  
  private
     pragma Inline (Length);
--- 269,384 ----
     ------------------------------------
  
     function Translate
!      (Source  : Unbounded_String;
!       Mapping : Maps.Character_Mapping) return Unbounded_String;
  
     procedure Translate
       (Source  : in out Unbounded_String;
        Mapping : Maps.Character_Mapping);
  
     function Translate
!      (Source  : Unbounded_String;
!       Mapping : Maps.Character_Mapping_Function) return Unbounded_String;
  
     procedure Translate
       (Source  : in out Unbounded_String;
!       Mapping : Maps.Character_Mapping_Function);
  
     ---------------------------------------
     -- String Transformation Subprograms --
     ---------------------------------------
  
     function Replace_Slice
!      (Source : Unbounded_String;
!       Low    : Positive;
!       High   : Natural;
!       By     : String) return Unbounded_String;
  
     procedure Replace_Slice
!      (Source : in out Unbounded_String;
!       Low    : Positive;
!       High   : Natural;
!       By     : String);
  
     function Insert
!      (Source   : Unbounded_String;
!       Before   : Positive;
!       New_Item : String) return Unbounded_String;
  
     procedure Insert
       (Source   : in out Unbounded_String;
!       Before   : Positive;
!       New_Item : String);
  
     function Overwrite
!      (Source   : Unbounded_String;
!       Position : Positive;
!       New_Item : String) return Unbounded_String;
  
     procedure Overwrite
!      (Source   : in out Unbounded_String;
!       Position : Positive;
!       New_Item : String);
  
     function Delete
!      (Source  : Unbounded_String;
!       From    : Positive;
!       Through : Natural) return Unbounded_String;
  
     procedure Delete
       (Source  : in out Unbounded_String;
!       From    : Positive;
!       Through : Natural);
  
     function Trim
!      (Source : Unbounded_String;
!       Side   : Trim_End) return Unbounded_String;
  
     procedure Trim
       (Source : in out Unbounded_String;
!       Side   : Trim_End);
  
     function Trim
!      (Source : Unbounded_String;
!       Left   : Maps.Character_Set;
!       Right  : Maps.Character_Set) return Unbounded_String;
  
     procedure Trim
       (Source : in out Unbounded_String;
!       Left   : Maps.Character_Set;
!       Right  : Maps.Character_Set);
  
     function Head
!      (Source : Unbounded_String;
!       Count  : Natural;
!       Pad    : Character := Space) return Unbounded_String;
  
     procedure Head
       (Source : in out Unbounded_String;
!       Count  : Natural;
!       Pad    : Character := Space);
  
     function Tail
!      (Source : Unbounded_String;
!       Count  : Natural;
!       Pad    : Character := Space) return Unbounded_String;
  
     procedure Tail
       (Source : in out Unbounded_String;
!       Count  : Natural;
!       Pad    : Character := Space);
  
     function "*"
!      (Left  : Natural;
!       Right : Character) return Unbounded_String;
  
     function "*"
!      (Left  : Natural;
!       Right : String) return Unbounded_String;
  
     function "*"
!      (Left  : Natural;
!       Right : Unbounded_String) return Unbounded_String;
  
  private
     pragma Inline (Length);
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ststio.ads gcc-4.0.0/gcc/ada/a-ststio.ads
*** gcc-3.4.3/gcc/ada/a-ststio.ads	Thu Apr 24 17:53:54 2003
--- gcc-4.0.0/gcc/ada/a-ststio.ads	Wed Oct 27 12:29:19 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2001 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** package Ada.Streams.Stream_IO is
*** 51,57 ****
     --  used in this package and System.File_IO.
  
     for File_Mode use
!      (In_File     => 0,  -- System.FIle_IO.File_Mode'Pos (In_File)
        Out_File    => 2,  -- System.File_IO.File_Mode'Pos (Out_File)
        Append_File => 3); -- System.File_IO.File_Mode'Pos (Append_File)
  
--- 51,57 ----
     --  used in this package and System.File_IO.
  
     for File_Mode use
!      (In_File     => 0,  -- System.File_IO.File_Mode'Pos (In_File)
        Out_File    => 2,  -- System.File_IO.File_Mode'Pos (Out_File)
        Append_File => 3); -- System.File_IO.File_Mode'Pos (Append_File)
  
diff -Nrcpad gcc-3.4.3/gcc/ada/a-stunau.adb gcc-4.0.0/gcc/ada/a-stunau.adb
*** gcc-3.4.3/gcc/ada/a-stunau.adb	Tue Oct 21 13:41:54 2003
--- gcc-4.0.0/gcc/ada/a-stunau.adb	Tue Jan 18 22:00:12 2005
*************** package body Ada.Strings.Unbounded.Aux i
*** 48,63 ****
  
              U_Ptr : constant Unbounded_String_Access := U'Unrestricted_Access;
              --  Unbounded_String is a controlled type which is always passed
!             --  by copy it is always safe to take the pointer to such object
!             --  here. This pointer is used to set the U.Reference value which
!             --  would not be possible otherwise as U is read-only.
  
              Old : String_Access := U.Reference;
  
           begin
!             U_Ptr.Reference := new String'(U.Reference (1 .. U.Last));
              Free (Old);
!             return U.Reference;
           end;
        end if;
     end Get_String;
--- 48,65 ----
  
              U_Ptr : constant Unbounded_String_Access := U'Unrestricted_Access;
              --  Unbounded_String is a controlled type which is always passed
!             --  by reference.  It is always safe to take the pointer to such
!             --  object here.  This pointer is used to set the U.Reference
!             --  value which would not be possible otherwise as U is read-only.
  
              Old : String_Access := U.Reference;
+             Ret : String_Access;
  
           begin
!             Ret := new String'(U.Reference (1 .. U.Last));
!             U_Ptr.Reference := Ret;
              Free (Old);
!             return Ret;
           end;
        end if;
     end Get_String;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-stunau.ads gcc-4.0.0/gcc/ada/a-stunau.ads
*** gcc-3.4.3/gcc/ada/a-stunau.ads	Tue Oct 21 13:41:54 2003
--- gcc-4.0.0/gcc/ada/a-stunau.ads	Thu Feb 10 13:50:15 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 34,40 ****
  --  This child package of Ada.Strings.Unbounded provides some specialized
  --  access functions which are intended to allow more efficient use of the
  --  facilities of Ada.Strings.Unbounded, particularly by other layered
! --  utilities (such as GNAT.Patterns).
  
  package Ada.Strings.Unbounded.Aux is
  pragma Preelaborate (Aux);
--- 34,40 ----
  --  This child package of Ada.Strings.Unbounded provides some specialized
  --  access functions which are intended to allow more efficient use of the
  --  facilities of Ada.Strings.Unbounded, particularly by other layered
! --  utilities (such as GNAT.SPITBOL.Patterns).
  
  package Ada.Strings.Unbounded.Aux is
  pragma Preelaborate (Aux);
diff -Nrcpad gcc-3.4.3/gcc/ada/a-stunha.adb gcc-4.0.0/gcc/ada/a-stunha.adb
*** gcc-3.4.3/gcc/ada/a-stunha.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-stunha.adb	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,57 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                        ADA.STRINGS.UNBOUNDED.HASH                        --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ 
+ --  Note: source of this algorithm: GNAT.HTable.Hash (g-htable.adb)
+ 
+ function Ada.Strings.Unbounded.Hash
+   (Key : Unbounded_String) return Containers.Hash_Type
+ is
+    use Ada.Containers;
+ 
+    function Rotate_Left
+      (Value  : Hash_Type;
+       Amount : Natural) return Hash_Type;
+    pragma Import (Intrinsic, Rotate_Left);
+ 
+    Tmp : Hash_Type;
+ 
+ begin
+    Tmp := 0;
+    for J in 1 .. Key.Last loop
+       Tmp := Rotate_Left (Tmp, 1) + Character'Pos (Key.Reference (J));
+    end loop;
+ 
+    return Tmp;
+ end Ada.Strings.Unbounded.Hash;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-stunha.ads gcc-4.0.0/gcc/ada/a-stunha.ads
*** gcc-3.4.3/gcc/ada/a-stunha.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-stunha.ads	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,23 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                        ADA.STRINGS.UNBOUNDED.HASH                        --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is adapted from the Ada Reference Manual for use with --
+ -- GNAT.  In accordance with the copyright of that document, you can freely --
+ -- copy and modify this specification,  provided that if you redistribute a --
+ -- modified version,  any changes that you have made are clearly indicated. --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Containers;
+ 
+ function Ada.Strings.Unbounded.Hash
+   (Key : Unbounded_String) return Containers.Hash_Type;
+ 
+ pragma Preelaborate (Ada.Strings.Unbounded.Hash);
diff -Nrcpad gcc-3.4.3/gcc/ada/a-stwibo.adb gcc-4.0.0/gcc/ada/a-stwibo.adb
*** gcc-3.4.3/gcc/ada/a-stwibo.adb	Tue Oct 21 13:41:54 2003
--- gcc-4.0.0/gcc/ada/a-stwibo.adb	Thu Feb 10 13:50:15 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Ada.Strings.Wide_Bounded is
*** 40,57 ****
        ---------
  
        function "*"
!         (Left  : in Natural;
!          Right : in Wide_Character)
!          return  Bounded_Wide_String
        is
        begin
           return Times (Left, Right, Max_Length);
        end "*";
  
        function "*"
!         (Left  : in Natural;
!          Right : in Wide_String)
!          return  Bounded_Wide_String
        is
        begin
           return Times (Left, Right, Max_Length);
--- 40,55 ----
        ---------
  
        function "*"
!         (Left  : Natural;
!          Right : Wide_Character) return Bounded_Wide_String
        is
        begin
           return Times (Left, Right, Max_Length);
        end "*";
  
        function "*"
!         (Left  : Natural;
!          Right : Wide_String) return Bounded_Wide_String
        is
        begin
           return Times (Left, Right, Max_Length);
*************** package body Ada.Strings.Wide_Bounded is
*** 62,100 ****
        ---------------
  
        function Replicate
!         (Count : in Natural;
!          Item  : in Wide_Character;
!          Drop  : in Strings.Truncation := Strings.Error)
!          return  Bounded_Wide_String
        is
        begin
           return Super_Replicate (Count, Item, Drop, Max_Length);
        end Replicate;
  
        function Replicate
!         (Count : in Natural;
!          Item  : in Wide_String;
!          Drop  : in Strings.Truncation := Strings.Error)
!          return  Bounded_Wide_String
        is
        begin
           return Super_Replicate (Count, Item, Drop, Max_Length);
        end Replicate;
  
! 
!       -----------------------
!       -- To_Bounded_String --
!       -----------------------
  
        function To_Bounded_Wide_String
!         (Source : in Wide_String;
!          Drop   : in Strings.Truncation := Strings.Error)
!          return   Bounded_Wide_String
        is
        begin
           return To_Super_String (Source, Max_Length, Drop);
        end To_Bounded_Wide_String;
  
     end Generic_Bounded_Length;
- 
  end Ada.Strings.Wide_Bounded;
--- 60,96 ----
        ---------------
  
        function Replicate
!         (Count : Natural;
!          Item  : Wide_Character;
!          Drop  : Strings.Truncation := Strings.Error)
!          return Bounded_Wide_String
        is
        begin
           return Super_Replicate (Count, Item, Drop, Max_Length);
        end Replicate;
  
        function Replicate
!         (Count : Natural;
!          Item  : Wide_String;
!          Drop  : Strings.Truncation := Strings.Error)
!          return Bounded_Wide_String
        is
        begin
           return Super_Replicate (Count, Item, Drop, Max_Length);
        end Replicate;
  
!       ----------------------------
!       -- To_Bounded_Wide_String --
!       ----------------------------
  
        function To_Bounded_Wide_String
!         (Source : Wide_String;
!          Drop   : Strings.Truncation := Strings.Error)
!          return Bounded_Wide_String
        is
        begin
           return To_Super_String (Source, Max_Length, Drop);
        end To_Bounded_Wide_String;
  
     end Generic_Bounded_Length;
  end Ada.Strings.Wide_Bounded;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-stwibo.ads gcc-4.0.0/gcc/ada/a-stwibo.ads
*** gcc-3.4.3/gcc/ada/a-stwibo.ads	Tue Oct 21 13:41:54 2003
--- gcc-4.0.0/gcc/ada/a-stwibo.ads	Thu Feb 10 13:50:15 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** pragma Preelaborate (Wide_Bounded);
*** 55,859 ****
  
        subtype Length_Range is Natural range 0 .. Max_Length;
  
!       function Length (Source : in Bounded_Wide_String) return Length_Range;
  
        --------------------------------------------------------
        -- Conversion, Concatenation, and Selection Functions --
        --------------------------------------------------------
  
        function To_Bounded_Wide_String
!         (Source : in Wide_String;
!          Drop   : in Truncation := Error)
!          return   Bounded_Wide_String;
  
        function To_Wide_String
!         (Source : in Bounded_Wide_String)
!          return   Wide_String;
  
        function Append
!         (Left, Right : in Bounded_Wide_String;
!          Drop        : in Truncation  := Error)
!          return        Bounded_Wide_String;
  
        function Append
!         (Left  : in Bounded_Wide_String;
!          Right : in Wide_String;
!          Drop  : in Truncation := Error)
!          return  Bounded_Wide_String;
  
        function Append
!         (Left  : in Wide_String;
!          Right : in Bounded_Wide_String;
!          Drop  : in Truncation := Error)
!          return  Bounded_Wide_String;
  
        function Append
!         (Left  : in Bounded_Wide_String;
!          Right : in Wide_Character;
!          Drop  : in Truncation := Error)
!          return  Bounded_Wide_String;
  
        function Append
!         (Left  : in Wide_Character;
!          Right : in Bounded_Wide_String;
!          Drop  : in Truncation := Error)
!          return  Bounded_Wide_String;
  
        procedure Append
          (Source   : in out Bounded_Wide_String;
!          New_Item : in Bounded_Wide_String;
!          Drop     : in Truncation  := Error);
  
        procedure Append
          (Source   : in out Bounded_Wide_String;
!          New_Item : in Wide_String;
!          Drop     : in Truncation  := Error);
  
        procedure Append
          (Source   : in out Bounded_Wide_String;
!          New_Item : in Wide_Character;
!          Drop     : in Truncation  := Error);
  
        function "&"
!         (Left, Right : in Bounded_Wide_String)
!          return        Bounded_Wide_String;
  
        function "&"
!         (Left  : in Bounded_Wide_String;
!          Right : in Wide_String)
!          return  Bounded_Wide_String;
  
        function "&"
!         (Left  : in Wide_String;
!          Right : in Bounded_Wide_String)
!          return  Bounded_Wide_String;
  
        function "&"
!         (Left  : in Bounded_Wide_String;
!          Right : in Wide_Character)
!          return  Bounded_Wide_String;
  
        function "&"
!         (Left  : in Wide_Character;
!          Right : in Bounded_Wide_String)
!          return  Bounded_Wide_String;
  
        function Element
!         (Source : in Bounded_Wide_String;
!          Index  : in Positive)
!          return   Wide_Character;
  
        procedure Replace_Element
          (Source : in out Bounded_Wide_String;
!          Index  : in Positive;
!          By     : in Wide_Character);
  
        function Slice
!         (Source : in Bounded_Wide_String;
!          Low    : in Positive;
!          High   : in Natural)
!          return   Wide_String;
  
        function "="
!         (Left  : in Bounded_Wide_String;
!          Right : in Bounded_Wide_String)
!          return  Boolean;
  
        function "="
!         (Left  : in Bounded_Wide_String;
!          Right : in Wide_String)
!          return  Boolean;
  
        function "="
!         (Left  : in Wide_String;
!          Right : in Bounded_Wide_String)
!          return  Boolean;
  
        function "<"
!         (Left  : in Bounded_Wide_String;
!          Right : in Bounded_Wide_String)
!          return  Boolean;
  
        function "<"
!         (Left  : in Bounded_Wide_String;
!          Right : in Wide_String)
!          return  Boolean;
  
        function "<"
!         (Left  : in Wide_String;
!          Right : in Bounded_Wide_String)
!          return  Boolean;
  
        function "<="
!         (Left  : in Bounded_Wide_String;
!          Right : in Bounded_Wide_String)
!          return  Boolean;
  
        function "<="
!         (Left  : in Bounded_Wide_String;
!          Right : in Wide_String)
!          return  Boolean;
  
        function "<="
!         (Left  : in Wide_String;
!          Right : in Bounded_Wide_String)
!          return  Boolean;
  
        function ">"
!         (Left  : in Bounded_Wide_String;
!          Right : in Bounded_Wide_String)
!          return  Boolean;
  
        function ">"
!         (Left  : in Bounded_Wide_String;
!          Right : in Wide_String)
!          return  Boolean;
  
        function ">"
!         (Left  : in Wide_String;
!          Right : in Bounded_Wide_String)
!          return  Boolean;
  
        function ">="
!         (Left  : in Bounded_Wide_String;
!          Right : in Bounded_Wide_String)
!          return  Boolean;
  
        function ">="
!         (Left  : in Bounded_Wide_String;
!          Right : in Wide_String)
!          return  Boolean;
  
        function ">="
!         (Left  : in Wide_String;
!          Right : in Bounded_Wide_String)
!          return  Boolean;
  
        ----------------------
        -- Search Functions --
        ----------------------
  
        function Index
!         (Source  : in Bounded_Wide_String;
!          Pattern : in Wide_String;
!          Going   : in Direction := Forward;
!          Mapping : in Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
!          return    Natural;
  
        function Index
!         (Source  : in Bounded_Wide_String;
!          Pattern : in Wide_String;
!          Going   : in Direction := Forward;
!          Mapping : in Wide_Maps.Wide_Character_Mapping_Function)
!          return    Natural;
  
        function Index
!         (Source : in Bounded_Wide_String;
!          Set    : in Wide_Maps.Wide_Character_Set;
!          Test   : in Membership := Inside;
!          Going  : in Direction  := Forward)
!          return   Natural;
  
        function Index_Non_Blank
!         (Source : in Bounded_Wide_String;
!          Going  : in Direction := Forward)
!          return   Natural;
  
        function Count
!         (Source  : in Bounded_Wide_String;
!          Pattern : in Wide_String;
!          Mapping : in Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
!          return    Natural;
  
        function Count
!         (Source  : in Bounded_Wide_String;
!          Pattern : in Wide_String;
!          Mapping : in Wide_Maps.Wide_Character_Mapping_Function)
!          return    Natural;
  
        function Count
!         (Source : in Bounded_Wide_String;
!          Set    : in Wide_Maps.Wide_Character_Set)
!          return   Natural;
  
        procedure Find_Token
!         (Source : in Bounded_Wide_String;
!          Set    : in Wide_Maps.Wide_Character_Set;
!          Test   : in Membership;
           First  : out Positive;
           Last   : out Natural);
  
        ------------------------------------
!       -- Wide_String Translation Subprograms --
        ------------------------------------
  
        function Translate
!         (Source   : in Bounded_Wide_String;
!          Mapping  : in Wide_Maps.Wide_Character_Mapping)
!          return     Bounded_Wide_String;
  
        procedure Translate
!         (Source   : in out Bounded_Wide_String;
!          Mapping  : in Wide_Maps.Wide_Character_Mapping);
  
        function Translate
!         (Source  : in Bounded_Wide_String;
!          Mapping : in Wide_Maps.Wide_Character_Mapping_Function)
!          return    Bounded_Wide_String;
  
        procedure Translate
          (Source  : in out Bounded_Wide_String;
!          Mapping : in Wide_Maps.Wide_Character_Mapping_Function);
  
        ---------------------------------------
!       -- Wide_String Transformation Subprograms --
        ---------------------------------------
  
        function Replace_Slice
!         (Source   : in Bounded_Wide_String;
!          Low      : in Positive;
!          High     : in Natural;
!          By       : in Wide_String;
!          Drop     : in Truncation := Error)
!          return     Bounded_Wide_String;
  
        procedure Replace_Slice
          (Source   : in out Bounded_Wide_String;
!          Low      : in Positive;
!          High     : in Natural;
!          By       : in Wide_String;
!          Drop     : in Truncation := Error);
  
        function Insert
!         (Source   : in Bounded_Wide_String;
!          Before   : in Positive;
!          New_Item : in Wide_String;
!          Drop     : in Truncation := Error)
!          return     Bounded_Wide_String;
  
        procedure Insert
          (Source   : in out Bounded_Wide_String;
!          Before   : in Positive;
!          New_Item : in Wide_String;
!          Drop     : in Truncation := Error);
  
        function Overwrite
!         (Source    : in Bounded_Wide_String;
!          Position  : in Positive;
!          New_Item  : in Wide_String;
!          Drop      : in Truncation := Error)
!          return      Bounded_Wide_String;
  
        procedure Overwrite
          (Source    : in out Bounded_Wide_String;
!          Position  : in Positive;
!          New_Item  : in Wide_String;
!          Drop      : in Truncation := Error);
  
        function Delete
!         (Source  : in Bounded_Wide_String;
!          From    : in Positive;
!          Through : in Natural)
!          return    Bounded_Wide_String;
  
        procedure Delete
          (Source  : in out Bounded_Wide_String;
!          From    : in Positive;
!          Through : in Natural);
  
        ---------------------------------
!       -- Wide_String Selector Subprograms --
        ---------------------------------
  
        function Trim
!         (Source : in Bounded_Wide_String;
!          Side   : in Trim_End)
!          return   Bounded_Wide_String;
  
        procedure Trim
          (Source : in out Bounded_Wide_String;
!          Side   : in Trim_End);
  
        function Trim
!         (Source  : in Bounded_Wide_String;
!           Left   : in Wide_Maps.Wide_Character_Set;
!           Right  : in Wide_Maps.Wide_Character_Set)
!           return   Bounded_Wide_String;
  
        procedure Trim
          (Source : in out Bounded_Wide_String;
!          Left   : in Wide_Maps.Wide_Character_Set;
!          Right  : in Wide_Maps.Wide_Character_Set);
  
        function Head
!         (Source : in Bounded_Wide_String;
!          Count  : in Natural;
!          Pad    : in Wide_Character := Wide_Space;
!          Drop   : in Truncation := Error)
!          return   Bounded_Wide_String;
  
        procedure Head
          (Source : in out Bounded_Wide_String;
!          Count  : in Natural;
!          Pad    : in Wide_Character  := Wide_Space;
!          Drop   : in Truncation := Error);
  
        function Tail
!         (Source : in Bounded_Wide_String;
!          Count  : in Natural;
!          Pad    : in Wide_Character  := Wide_Space;
!          Drop   : in Truncation := Error)
!          return Bounded_Wide_String;
  
        procedure Tail
          (Source : in out Bounded_Wide_String;
!          Count  : in Natural;
!          Pad    : in Wide_Character  := Wide_Space;
!          Drop   : in Truncation := Error);
  
        ------------------------------------
!       -- Wide_String Constructor Subprograms --
        ------------------------------------
  
        function "*"
!         (Left  : in Natural;
!          Right : in Wide_Character)
!          return  Bounded_Wide_String;
  
        function "*"
!         (Left  : in Natural;
!          Right : in Wide_String)
!          return  Bounded_Wide_String;
  
        function "*"
!         (Left  : in Natural;
!          Right : in Bounded_Wide_String)
!          return  Bounded_Wide_String;
  
        function Replicate
!         (Count : in Natural;
!          Item  : in Wide_Character;
!          Drop  : in Truncation := Error)
!          return  Bounded_Wide_String;
  
        function Replicate
!         (Count : in Natural;
!          Item  : in Wide_String;
!          Drop  : in Truncation := Error)
!          return  Bounded_Wide_String;
  
        function Replicate
!         (Count : in Natural;
!          Item  : in Bounded_Wide_String;
!          Drop  : in Truncation := Error)
!          return  Bounded_Wide_String;
  
     private
  
!       --  Most of the implementation is in the non generic package
!       --  Ada.Strings.Superbounded. Type Bounded_Wide_String is derived from
!       --  type Wide_Superbounded.Super_String with the maximum length
!       --  constraint. Except for five, all subprograms are renames of
!       --  subprograms that are inherited from Wide_Superbounded.Super_String.
  
        type Bounded_Wide_String is
          new Wide_Superbounded.Super_String (Max_Length);
  
        Null_Bounded_Wide_String : constant Bounded_Wide_String :=
!         (Max_Length     => Max_Length,
!          Current_Length => 0,
!          Data           => (1 .. Max_Length => Wide_Superbounded.Wide_NUL));
  
        pragma Inline (To_Bounded_Wide_String);
  
!       function Length (Source : in Bounded_Wide_String) return Length_Range
!         renames Super_Length;
  
        function To_Wide_String
!         (Source : in Bounded_Wide_String)
!          return    Wide_String
!         renames Super_To_String;
  
        function Append
!         (Left, Right : in Bounded_Wide_String;
!          Drop        : in Truncation  := Error)
!          return        Bounded_Wide_String
!         renames Super_Append;
  
        function Append
!         (Left  : in Bounded_Wide_String;
!          Right : in Wide_String;
!          Drop  : in Truncation := Error)
!          return  Bounded_Wide_String
!         renames Super_Append;
  
        function Append
!         (Left  : in Wide_String;
!          Right : in Bounded_Wide_String;
!          Drop  : in Truncation := Error)
!          return  Bounded_Wide_String
!         renames Super_Append;
  
        function Append
!         (Left  : in Bounded_Wide_String;
!          Right : in Wide_Character;
!          Drop  : in Truncation := Error)
!          return  Bounded_Wide_String
!         renames Super_Append;
  
        function Append
!         (Left  : in Wide_Character;
!          Right : in Bounded_Wide_String;
!          Drop  : in Truncation := Error)
!          return  Bounded_Wide_String
!         renames Super_Append;
  
        procedure Append
          (Source   : in out Bounded_Wide_String;
!          New_Item : in Bounded_Wide_String;
!          Drop     : in Truncation  := Error)
!         renames Super_Append;
  
        procedure Append
          (Source   : in out Bounded_Wide_String;
!          New_Item : in Wide_String;
!          Drop     : in Truncation  := Error)
!         renames Super_Append;
  
        procedure Append
          (Source   : in out Bounded_Wide_String;
!          New_Item : in Wide_Character;
!          Drop     : in Truncation  := Error)
!         renames Super_Append;
  
        function "&"
!         (Left, Right : in Bounded_Wide_String)
!          return        Bounded_Wide_String
!         renames Concat;
  
        function "&"
!         (Left  : in Bounded_Wide_String;
!          Right : in Wide_String)
!          return  Bounded_Wide_String
!         renames Concat;
  
        function "&"
!         (Left  : in Wide_String;
!          Right : in Bounded_Wide_String)
!          return  Bounded_Wide_String
!         renames Concat;
  
        function "&"
!         (Left  : in Bounded_Wide_String;
!          Right : in Wide_Character)
!          return  Bounded_Wide_String
!         renames Concat;
  
        function "&"
!         (Left  : in Wide_Character;
!          Right : in Bounded_Wide_String)
!          return  Bounded_Wide_String
!         renames Concat;
  
        function Element
!         (Source : in Bounded_Wide_String;
!          Index  : in Positive)
!          return   Wide_Character
!         renames Super_Element;
  
        procedure Replace_Element
          (Source : in out Bounded_Wide_String;
!          Index  : in Positive;
!          By     : in Wide_Character)
!         renames Super_Replace_Element;
  
        function Slice
!         (Source : in Bounded_Wide_String;
!          Low    : in Positive;
!          High   : in Natural)
!          return   Wide_String
!         renames Super_Slice;
  
!       function "="  (Left, Right : in Bounded_Wide_String) return Boolean
!         renames Equal;
  
        function "="
!         (Left  : in Bounded_Wide_String;
!          Right : in Wide_String)
!          return  Boolean
!         renames Equal;
  
        function "="
!         (Left  : in Wide_String;
!          Right : in Bounded_Wide_String)
!          return  Boolean
!         renames Equal;
  
!       function "<"  (Left, Right : in Bounded_Wide_String) return Boolean
!         renames Less;
  
        function "<"
!         (Left  : in Bounded_Wide_String;
!          Right : in Wide_String)
!          return  Boolean
!         renames Less;
  
        function "<"
!         (Left  : in Wide_String;
!          Right : in Bounded_Wide_String)
!          return  Boolean
!         renames Less;
  
!       function "<=" (Left, Right : in Bounded_Wide_String) return Boolean
!         renames Less_Or_Equal;
  
        function "<="
!         (Left  : in Bounded_Wide_String;
!          Right : in Wide_String)
!          return  Boolean
!         renames Less_Or_Equal;
  
        function "<="
!         (Left  : in Wide_String;
!          Right : in Bounded_Wide_String)
!          return  Boolean
!         renames Less_Or_Equal;
  
!       function ">"  (Left, Right : in Bounded_Wide_String) return Boolean
!         renames Greater;
  
        function ">"
!         (Left  : in Bounded_Wide_String;
!          Right : in Wide_String)
!          return  Boolean
!         renames Greater;
  
        function ">"
!         (Left  : in Wide_String;
!          Right : in Bounded_Wide_String)
!          return  Boolean
!         renames Greater;
  
!       function ">=" (Left, Right : in Bounded_Wide_String) return Boolean
!         renames Greater_Or_Equal;
  
        function ">="
!         (Left  : in Bounded_Wide_String;
!          Right : in Wide_String)
!          return  Boolean
!         renames Greater_Or_Equal;
  
        function ">="
!         (Left  : in Wide_String;
!          Right : in Bounded_Wide_String)
!          return  Boolean
!         renames Greater_Or_Equal;
  
        function Index
!         (Source  : in Bounded_Wide_String;
!          Pattern : in Wide_String;
!          Going   : in Direction := Forward;
!          Mapping : in Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
!          return    Natural
!         renames Super_Index;
  
        function Index
!         (Source  : in Bounded_Wide_String;
!          Pattern : in Wide_String;
!          Going   : in Direction := Forward;
!          Mapping : in Wide_Maps.Wide_Character_Mapping_Function)
!          return    Natural
!         renames Super_Index;
  
        function Index
!         (Source : in Bounded_Wide_String;
!          Set    : in Wide_Maps.Wide_Character_Set;
!          Test   : in Membership := Inside;
!          Going  : in Direction  := Forward)
!          return   Natural
!         renames Super_Index;
  
        function Index_Non_Blank
!         (Source : in Bounded_Wide_String;
!          Going  : in Direction := Forward)
!          return   Natural
!         renames Super_Index_Non_Blank;
  
        function Count
!         (Source  : in Bounded_Wide_String;
!          Pattern : in Wide_String;
!          Mapping : in Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
!          return    Natural
!         renames Super_Count;
  
        function Count
!         (Source  : in Bounded_Wide_String;
!          Pattern : in Wide_String;
!          Mapping : in Wide_Maps.Wide_Character_Mapping_Function)
!          return    Natural
!         renames Super_Count;
  
        function Count
!         (Source : in Bounded_Wide_String;
!          Set    : in Wide_Maps.Wide_Character_Set)
!          return   Natural
!         renames Super_Count;
  
        procedure Find_Token
!         (Source : in Bounded_Wide_String;
!          Set    : in Wide_Maps.Wide_Character_Set;
!          Test   : in Membership;
           First  : out Positive;
           Last   : out Natural)
!         renames Super_Find_Token;
  
        function Translate
!         (Source   : in Bounded_Wide_String;
!          Mapping  : in Wide_Maps.Wide_Character_Mapping)
!          return     Bounded_Wide_String
!         renames Super_Translate;
  
        procedure Translate
          (Source   : in out Bounded_Wide_String;
!          Mapping  : in Wide_Maps.Wide_Character_Mapping)
!         renames Super_Translate;
  
        function Translate
!         (Source  : in Bounded_Wide_String;
!          Mapping : in Wide_Maps.Wide_Character_Mapping_Function)
!          return    Bounded_Wide_String
!         renames Super_Translate;
  
        procedure Translate
          (Source  : in out Bounded_Wide_String;
!          Mapping : in Wide_Maps.Wide_Character_Mapping_Function)
!         renames Super_Translate;
  
        function Replace_Slice
!         (Source   : in Bounded_Wide_String;
!          Low      : in Positive;
!          High     : in Natural;
!          By       : in Wide_String;
!          Drop     : in Truncation := Error)
!          return     Bounded_Wide_String
!         renames Super_Replace_Slice;
  
        procedure Replace_Slice
          (Source   : in out Bounded_Wide_String;
!          Low      : in Positive;
!          High     : in Natural;
!          By       : in Wide_String;
!          Drop     : in Truncation := Error)
!         renames Super_Replace_Slice;
  
        function Insert
!         (Source   : in Bounded_Wide_String;
!          Before   : in Positive;
!          New_Item : in Wide_String;
!          Drop     : in Truncation := Error)
!          return     Bounded_Wide_String
!         renames Super_Insert;
  
        procedure Insert
          (Source   : in out Bounded_Wide_String;
!          Before   : in Positive;
!          New_Item : in Wide_String;
!          Drop     : in Truncation := Error)
!         renames Super_Insert;
  
        function Overwrite
!         (Source    : in Bounded_Wide_String;
!          Position  : in Positive;
!          New_Item  : in Wide_String;
!          Drop      : in Truncation := Error)
!          return      Bounded_Wide_String
!         renames Super_Overwrite;
  
        procedure Overwrite
          (Source    : in out Bounded_Wide_String;
!          Position  : in Positive;
!          New_Item  : in Wide_String;
!          Drop      : in Truncation := Error)
!         renames Super_Overwrite;
  
        function Delete
!         (Source  : in Bounded_Wide_String;
!          From    : in Positive;
!          Through : in Natural)
!          return    Bounded_Wide_String
!         renames Super_Delete;
  
        procedure Delete
          (Source  : in out Bounded_Wide_String;
!          From    : in Positive;
!          Through : in Natural)
!         renames Super_Delete;
  
        function Trim
!         (Source : in Bounded_Wide_String;
!          Side   : in Trim_End)
!          return   Bounded_Wide_String
!         renames Super_Trim;
  
        procedure Trim
          (Source : in out Bounded_Wide_String;
!          Side   : in Trim_End)
!         renames Super_Trim;
  
        function Trim
!         (Source  : in Bounded_Wide_String;
!           Left   : in Wide_Maps.Wide_Character_Set;
!           Right  : in Wide_Maps.Wide_Character_Set)
!           return   Bounded_Wide_String
!         renames Super_Trim;
  
        procedure Trim
          (Source : in out Bounded_Wide_String;
!          Left   : in Wide_Maps.Wide_Character_Set;
!          Right  : in Wide_Maps.Wide_Character_Set)
!         renames Super_Trim;
  
        function Head
!         (Source : in Bounded_Wide_String;
!          Count  : in Natural;
!          Pad    : in Wide_Character := Wide_Space;
!          Drop   : in Truncation := Error)
!          return   Bounded_Wide_String
!         renames Super_Head;
  
        procedure Head
          (Source : in out Bounded_Wide_String;
!          Count  : in Natural;
!          Pad    : in Wide_Character  := Wide_Space;
!          Drop   : in Truncation := Error)
!         renames Super_Head;
  
        function Tail
!         (Source : in Bounded_Wide_String;
!          Count  : in Natural;
!          Pad    : in Wide_Character  := Wide_Space;
!          Drop   : in Truncation := Error)
!          return Bounded_Wide_String
!         renames Super_Tail;
  
        procedure Tail
          (Source : in out Bounded_Wide_String;
!          Count  : in Natural;
!          Pad    : in Wide_Character  := Wide_Space;
!          Drop   : in Truncation := Error)
!         renames Super_Tail;
  
        function "*"
!         (Left  : in Natural;
!          Right : in Bounded_Wide_String)
!          return  Bounded_Wide_String
!         renames Times;
  
        function Replicate
!         (Count : in Natural;
!          Item  : in Bounded_Wide_String;
!          Drop  : in Truncation := Error)
!          return  Bounded_Wide_String
           renames Super_Replicate;
  
     end Generic_Bounded_Length;
--- 55,902 ----
  
        subtype Length_Range is Natural range 0 .. Max_Length;
  
!       function Length (Source : Bounded_Wide_String) return Length_Range;
  
        --------------------------------------------------------
        -- Conversion, Concatenation, and Selection Functions --
        --------------------------------------------------------
  
        function To_Bounded_Wide_String
!         (Source : Wide_String;
!          Drop   : Truncation := Error) return Bounded_Wide_String;
  
        function To_Wide_String
!         (Source : Bounded_Wide_String) return Wide_String;
! 
!       procedure Set_Bounded_Wide_String
!         (Target : out Bounded_Wide_String;
!          Source : Wide_String;
!          Drop   : Truncation := Error);
!       pragma Ada_05 (Set_Bounded_Wide_String);
  
        function Append
!         (Left  : Bounded_Wide_String;
!          Right : Bounded_Wide_String;
!          Drop  : Truncation  := Error) return Bounded_Wide_String;
  
        function Append
!         (Left  : Bounded_Wide_String;
!          Right : Wide_String;
!          Drop  : Truncation := Error) return Bounded_Wide_String;
  
        function Append
!         (Left  : Wide_String;
!          Right : Bounded_Wide_String;
!          Drop  : Truncation := Error) return Bounded_Wide_String;
  
        function Append
!         (Left  : Bounded_Wide_String;
!          Right : Wide_Character;
!          Drop  : Truncation := Error) return Bounded_Wide_String;
  
        function Append
!         (Left  : Wide_Character;
!          Right : Bounded_Wide_String;
!          Drop  : Truncation := Error) return Bounded_Wide_String;
  
        procedure Append
          (Source   : in out Bounded_Wide_String;
!          New_Item : Bounded_Wide_String;
!          Drop     : Truncation  := Error);
  
        procedure Append
          (Source   : in out Bounded_Wide_String;
!          New_Item : Wide_String;
!          Drop     : Truncation  := Error);
  
        procedure Append
          (Source   : in out Bounded_Wide_String;
!          New_Item : Wide_Character;
!          Drop     : Truncation  := Error);
  
        function "&"
!         (Left  : Bounded_Wide_String;
!          Right : Bounded_Wide_String) return Bounded_Wide_String;
  
        function "&"
!         (Left  : Bounded_Wide_String;
!          Right : Wide_String) return Bounded_Wide_String;
  
        function "&"
!         (Left  : Wide_String;
!          Right : Bounded_Wide_String) return Bounded_Wide_String;
  
        function "&"
!         (Left  : Bounded_Wide_String;
!          Right : Wide_Character) return Bounded_Wide_String;
  
        function "&"
!         (Left  : Wide_Character;
!          Right : Bounded_Wide_String) return Bounded_Wide_String;
  
        function Element
!         (Source : Bounded_Wide_String;
!          Index  : Positive) return Wide_Character;
  
        procedure Replace_Element
          (Source : in out Bounded_Wide_String;
!          Index  : Positive;
!          By     : Wide_Character);
  
        function Slice
!         (Source : Bounded_Wide_String;
!          Low    : Positive;
!          High   : Natural) return Wide_String;
! 
!       function Bounded_Slice
!         (Source : Bounded_Wide_String;
!          Low    : Positive;
!          High   : Natural) return Bounded_Wide_String;
!       pragma Ada_05 (Bounded_Slice);
! 
!       procedure Bounded_Slice
!         (Source : Bounded_Wide_String;
!          Target : out Bounded_Wide_String;
!          Low    : Positive;
!          High   : Natural);
!       pragma Ada_05 (Bounded_Slice);
  
        function "="
!         (Left  : Bounded_Wide_String;
!          Right : Bounded_Wide_String) return Boolean;
  
        function "="
!         (Left  : Bounded_Wide_String;
!          Right : Wide_String) return Boolean;
  
        function "="
!         (Left  : Wide_String;
!          Right : Bounded_Wide_String) return Boolean;
  
        function "<"
!         (Left  : Bounded_Wide_String;
!          Right : Bounded_Wide_String) return Boolean;
  
        function "<"
!         (Left  : Bounded_Wide_String;
!          Right : Wide_String) return Boolean;
  
        function "<"
!         (Left  : Wide_String;
!          Right : Bounded_Wide_String) return Boolean;
  
        function "<="
!         (Left  : Bounded_Wide_String;
!          Right : Bounded_Wide_String) return Boolean;
  
        function "<="
!         (Left  : Bounded_Wide_String;
!          Right : Wide_String) return Boolean;
  
        function "<="
!         (Left  : Wide_String;
!          Right : Bounded_Wide_String) return Boolean;
  
        function ">"
!         (Left  : Bounded_Wide_String;
!          Right : Bounded_Wide_String) return Boolean;
  
        function ">"
!         (Left  : Bounded_Wide_String;
!          Right : Wide_String) return Boolean;
  
        function ">"
!         (Left  : Wide_String;
!          Right : Bounded_Wide_String) return Boolean;
  
        function ">="
!         (Left  : Bounded_Wide_String;
!          Right : Bounded_Wide_String) return Boolean;
  
        function ">="
!         (Left  : Bounded_Wide_String;
!          Right : Wide_String) return Boolean;
  
        function ">="
!         (Left  : Wide_String;
!          Right : Bounded_Wide_String) return Boolean;
  
        ----------------------
        -- Search Functions --
        ----------------------
  
        function Index
!         (Source  : Bounded_Wide_String;
!          Pattern : Wide_String;
!          Going   : Direction := Forward;
!          Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
!          return Natural;
  
        function Index
!         (Source  : Bounded_Wide_String;
!          Pattern : Wide_String;
!          Going   : Direction := Forward;
!          Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural;
  
        function Index
!         (Source : Bounded_Wide_String;
!          Set    : Wide_Maps.Wide_Character_Set;
!          Test   : Membership := Inside;
!          Going  : Direction  := Forward) return Natural;
! 
!       function Index
!         (Source  : Bounded_Wide_String;
!          Pattern : Wide_String;
!          From    : Positive;
!          Going   : Direction := Forward;
!          Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
!          return Natural;
!       pragma Ada_05 (Index);
! 
!       function Index
!         (Source  : Bounded_Wide_String;
!          Pattern : Wide_String;
!          From    : Positive;
!          Going   : Direction := Forward;
!          Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural;
!       pragma Ada_05 (Index);
! 
!       function Index
!         (Source  : Bounded_Wide_String;
!          Set     : Wide_Maps.Wide_Character_Set;
!          From    : Positive;
!          Test    : Membership := Inside;
!          Going   : Direction := Forward) return Natural;
!       pragma Ada_05 (Index);
  
        function Index_Non_Blank
!         (Source : Bounded_Wide_String;
!          Going  : Direction := Forward) return Natural;
! 
!       function Index_Non_Blank
!         (Source : Bounded_Wide_String;
!          From   : Positive;
!          Going  : Direction := Forward) return Natural;
!       pragma Ada_05 (Index_Non_Blank);
  
        function Count
!         (Source  : Bounded_Wide_String;
!          Pattern : Wide_String;
!          Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
!          return Natural;
  
        function Count
!         (Source  : Bounded_Wide_String;
!          Pattern : Wide_String;
!          Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural;
  
        function Count
!         (Source : Bounded_Wide_String;
!          Set    : Wide_Maps.Wide_Character_Set) return Natural;
  
        procedure Find_Token
!         (Source : Bounded_Wide_String;
!          Set    : Wide_Maps.Wide_Character_Set;
!          Test   : Membership;
           First  : out Positive;
           Last   : out Natural);
  
        ------------------------------------
!       -- String Translation Subprograms --
        ------------------------------------
  
        function Translate
!         (Source  : Bounded_Wide_String;
!          Mapping : Wide_Maps.Wide_Character_Mapping)
!          return Bounded_Wide_String;
  
        procedure Translate
!         (Source  : in out Bounded_Wide_String;
!          Mapping : Wide_Maps.Wide_Character_Mapping);
  
        function Translate
!         (Source  : Bounded_Wide_String;
!          Mapping : Wide_Maps.Wide_Character_Mapping_Function)
!          return Bounded_Wide_String;
  
        procedure Translate
          (Source  : in out Bounded_Wide_String;
!          Mapping : Wide_Maps.Wide_Character_Mapping_Function);
  
        ---------------------------------------
!       -- String Transformation Subprograms --
        ---------------------------------------
  
        function Replace_Slice
!         (Source : Bounded_Wide_String;
!          Low    : Positive;
!          High   : Natural;
!          By     : Wide_String;
!          Drop   : Truncation := Error) return Bounded_Wide_String;
  
        procedure Replace_Slice
          (Source   : in out Bounded_Wide_String;
!          Low      : Positive;
!          High     : Natural;
!          By       : Wide_String;
!          Drop     : Truncation := Error);
  
        function Insert
!         (Source   : Bounded_Wide_String;
!          Before   : Positive;
!          New_Item : Wide_String;
!          Drop     : Truncation := Error) return Bounded_Wide_String;
  
        procedure Insert
          (Source   : in out Bounded_Wide_String;
!          Before   : Positive;
!          New_Item : Wide_String;
!          Drop     : Truncation := Error);
  
        function Overwrite
!         (Source   : Bounded_Wide_String;
!          Position : Positive;
!          New_Item : Wide_String;
!          Drop     : Truncation := Error) return Bounded_Wide_String;
  
        procedure Overwrite
          (Source    : in out Bounded_Wide_String;
!          Position  : Positive;
!          New_Item  : Wide_String;
!          Drop      : Truncation := Error);
  
        function Delete
!         (Source  : Bounded_Wide_String;
!          From    : Positive;
!          Through : Natural) return Bounded_Wide_String;
  
        procedure Delete
          (Source  : in out Bounded_Wide_String;
!          From    : Positive;
!          Through : Natural);
  
        ---------------------------------
!       -- String Selector Subprograms --
        ---------------------------------
  
        function Trim
!         (Source : Bounded_Wide_String;
!          Side   : Trim_End) return Bounded_Wide_String;
  
        procedure Trim
          (Source : in out Bounded_Wide_String;
!          Side   : Trim_End);
  
        function Trim
!         (Source : Bounded_Wide_String;
!           Left  : Wide_Maps.Wide_Character_Set;
!           Right : Wide_Maps.Wide_Character_Set) return Bounded_Wide_String;
  
        procedure Trim
          (Source : in out Bounded_Wide_String;
!          Left   : Wide_Maps.Wide_Character_Set;
!          Right  : Wide_Maps.Wide_Character_Set);
  
        function Head
!         (Source : Bounded_Wide_String;
!          Count  : Natural;
!          Pad    : Wide_Character := Wide_Space;
!          Drop   : Truncation := Error) return Bounded_Wide_String;
  
        procedure Head
          (Source : in out Bounded_Wide_String;
!          Count  : Natural;
!          Pad    : Wide_Character  := Wide_Space;
!          Drop   : Truncation := Error);
  
        function Tail
!         (Source : Bounded_Wide_String;
!          Count  : Natural;
!          Pad    : Wide_Character := Wide_Space;
!          Drop   : Truncation     := Error) return Bounded_Wide_String;
  
        procedure Tail
          (Source : in out Bounded_Wide_String;
!          Count  : Natural;
!          Pad    : Wide_Character := Wide_Space;
!          Drop   : Truncation     := Error);
  
        ------------------------------------
!       -- String Constructor Subprograms --
        ------------------------------------
  
        function "*"
!         (Left  : Natural;
!          Right : Wide_Character) return Bounded_Wide_String;
  
        function "*"
!         (Left  : Natural;
!          Right : Wide_String) return Bounded_Wide_String;
  
        function "*"
!         (Left  : Natural;
!          Right : Bounded_Wide_String) return Bounded_Wide_String;
  
        function Replicate
!         (Count : Natural;
!          Item  : Wide_Character;
!          Drop  : Truncation := Error) return Bounded_Wide_String;
  
        function Replicate
!         (Count : Natural;
!          Item  : Wide_String;
!          Drop  : Truncation := Error) return Bounded_Wide_String;
  
        function Replicate
!         (Count : Natural;
!          Item  : Bounded_Wide_String;
!          Drop  : Truncation := Error) return Bounded_Wide_String;
  
     private
+       --  Most of the implementation is in the separate non generic package
+       --  Ada.Strings.Wide_Superbounded. Type Bounded_Wide_String is derived
+       --  from type Wide_Superbounded.Super_String with the maximum length
+       --  constraint. In almost all cases, the routines in Wide_Superbounded
+       --  can be called with no requirement to pass the maximum length
+       --  explicitly, since there is at least one Bounded_Wide_String argument
+       --  from which the maximum length can be obtained. For all such
+       --  routines, the implementation in this private part is simply a
+       --  renaming of the corresponding routine in the super bouded package.
  
!       --  The five exceptions are the * and Replicate routines operating on
!       --  character values. For these cases, we have a routine in the body
!       --  that calls the superbounded routine passing the maximum length
!       --  explicitly as an extra parameter.
  
        type Bounded_Wide_String is
          new Wide_Superbounded.Super_String (Max_Length);
+       --  Deriving Bounded_Wide_String from Wide_Superbounded.Super_String is
+       --  the real trick, it ensures that the type Bounded_Wide_String
+       --  declared in the generic instantiation is compatible with the
+       --  Super_String type declared in the Wide_Superbounded package.
  
        Null_Bounded_Wide_String : constant Bounded_Wide_String :=
!                                    (Max_Length         => Max_Length,
!                                     Current_Length     => 0,
!                                     Data               =>
!                                       (1 .. Max_Length =>
!                                          Wide_Superbounded.Wide_NUL));
  
        pragma Inline (To_Bounded_Wide_String);
  
!       procedure Set_Bounded_Wide_String
!         (Target : out Bounded_Wide_String;
!          Source : Wide_String;
!          Drop   : Truncation := Error)
!          renames Set_Super_String;
! 
!       function Length
!         (Source : Bounded_Wide_String) return Length_Range
!          renames Super_Length;
  
        function To_Wide_String
!         (Source : Bounded_Wide_String) return Wide_String
!          renames Super_To_String;
  
        function Append
!         (Left  : Bounded_Wide_String;
!          Right : Bounded_Wide_String;
!          Drop  : Truncation  := Error) return Bounded_Wide_String
!          renames Super_Append;
  
        function Append
!         (Left  : Bounded_Wide_String;
!          Right : Wide_String;
!          Drop  : Truncation := Error) return Bounded_Wide_String
!          renames Super_Append;
  
        function Append
!         (Left  : Wide_String;
!          Right : Bounded_Wide_String;
!          Drop  : Truncation := Error) return Bounded_Wide_String
!          renames Super_Append;
  
        function Append
!         (Left  : Bounded_Wide_String;
!          Right : Wide_Character;
!          Drop  : Truncation := Error) return Bounded_Wide_String
!          renames Super_Append;
  
        function Append
!         (Left  : Wide_Character;
!          Right : Bounded_Wide_String;
!          Drop  : Truncation := Error) return Bounded_Wide_String
!          renames Super_Append;
  
        procedure Append
          (Source   : in out Bounded_Wide_String;
!          New_Item : Bounded_Wide_String;
!          Drop     : Truncation  := Error)
!          renames Super_Append;
  
        procedure Append
          (Source   : in out Bounded_Wide_String;
!          New_Item : Wide_String;
!          Drop     : Truncation  := Error)
!          renames Super_Append;
  
        procedure Append
          (Source   : in out Bounded_Wide_String;
!          New_Item : Wide_Character;
!          Drop     : Truncation  := Error)
!          renames Super_Append;
  
        function "&"
!         (Left  : Bounded_Wide_String;
!          Right : Bounded_Wide_String) return Bounded_Wide_String
!          renames Concat;
  
        function "&"
!         (Left  : Bounded_Wide_String;
!          Right : Wide_String) return Bounded_Wide_String
!          renames Concat;
  
        function "&"
!         (Left  : Wide_String;
!          Right : Bounded_Wide_String) return Bounded_Wide_String
!          renames Concat;
  
        function "&"
!         (Left  : Bounded_Wide_String;
!          Right : Wide_Character) return Bounded_Wide_String
!          renames Concat;
  
        function "&"
!         (Left  : Wide_Character;
!          Right : Bounded_Wide_String) return Bounded_Wide_String
!          renames Concat;
  
        function Element
!         (Source : Bounded_Wide_String;
!          Index  : Positive) return Wide_Character
!          renames Super_Element;
  
        procedure Replace_Element
          (Source : in out Bounded_Wide_String;
!          Index  : Positive;
!          By     : Wide_Character)
!          renames Super_Replace_Element;
  
        function Slice
!         (Source : Bounded_Wide_String;
!          Low    : Positive;
!          High   : Natural) return Wide_String
!          renames Super_Slice;
  
!       function Bounded_Slice
!         (Source : Bounded_Wide_String;
!          Low    : Positive;
!          High   : Natural) return Bounded_Wide_String
!          renames Super_Slice;
! 
!       procedure Bounded_Slice
!         (Source : Bounded_Wide_String;
!          Target : out Bounded_Wide_String;
!          Low    : Positive;
!          High   : Natural)
!          renames Super_Slice;
  
        function "="
!         (Left  : Bounded_Wide_String;
!          Right : Bounded_Wide_String) return Boolean
!          renames Equal;
  
        function "="
!         (Left  : Bounded_Wide_String;
!          Right : Wide_String) return Boolean
!          renames Equal;
  
!       function "="
!         (Left  : Wide_String;
!          Right : Bounded_Wide_String) return Boolean
!          renames Equal;
  
        function "<"
!         (Left  : Bounded_Wide_String;
!          Right : Bounded_Wide_String) return Boolean
!          renames Less;
  
        function "<"
!         (Left  : Bounded_Wide_String;
!          Right : Wide_String) return Boolean
!          renames Less;
  
!       function "<"
!         (Left  : Wide_String;
!          Right : Bounded_Wide_String) return Boolean
!          renames Less;
  
        function "<="
!         (Left  : Bounded_Wide_String;
!          Right : Bounded_Wide_String) return Boolean
!          renames Less_Or_Equal;
  
        function "<="
!         (Left  : Bounded_Wide_String;
!          Right : Wide_String) return Boolean
!          renames Less_Or_Equal;
  
!       function "<="
!         (Left  : Wide_String;
!          Right : Bounded_Wide_String) return Boolean
!          renames Less_Or_Equal;
  
        function ">"
!         (Left  : Bounded_Wide_String;
!          Right : Bounded_Wide_String) return Boolean
!          renames Greater;
  
        function ">"
!         (Left  : Bounded_Wide_String;
!          Right : Wide_String) return Boolean
!          renames Greater;
  
!       function ">"
!         (Left  : Wide_String;
!          Right : Bounded_Wide_String) return Boolean
!          renames Greater;
  
        function ">="
!         (Left  : Bounded_Wide_String;
!          Right : Bounded_Wide_String) return Boolean
!          renames Greater_Or_Equal;
  
        function ">="
!         (Left  : Bounded_Wide_String;
!          Right : Wide_String) return Boolean
!          renames Greater_Or_Equal;
! 
!       function ">="
!         (Left  : Wide_String;
!          Right : Bounded_Wide_String) return Boolean
!          renames Greater_Or_Equal;
  
        function Index
!         (Source  : Bounded_Wide_String;
!          Pattern : Wide_String;
!          Going   : Direction := Forward;
!          Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
!          return Natural
!          renames Super_Index;
  
        function Index
!         (Source  : Bounded_Wide_String;
!          Pattern : Wide_String;
!          Going   : Direction := Forward;
!          Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural
!          renames Super_Index;
  
        function Index
!         (Source : Bounded_Wide_String;
!          Set    : Wide_Maps.Wide_Character_Set;
!          Test   : Membership := Inside;
!          Going  : Direction  := Forward) return Natural
!          renames Super_Index;
! 
!       function Index
!         (Source  : Bounded_Wide_String;
!          Pattern : Wide_String;
!          From    : Positive;
!          Going   : Direction := Forward;
!          Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
!          return Natural
!          renames Super_Index;
! 
!       function Index
!         (Source  : Bounded_Wide_String;
!          Pattern : Wide_String;
!          From    : Positive;
!          Going   : Direction := Forward;
!          Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural
!       renames Super_Index;
! 
!       function Index
!         (Source  : Bounded_Wide_String;
!          Set     : Wide_Maps.Wide_Character_Set;
!          From    : Positive;
!          Test    : Membership := Inside;
!          Going   : Direction := Forward) return Natural
!       renames Super_Index;
  
        function Index_Non_Blank
!         (Source : Bounded_Wide_String;
!          Going  : Direction := Forward) return Natural
!          renames Super_Index_Non_Blank;
! 
!       function Index_Non_Blank
!         (Source : Bounded_Wide_String;
!          From   : Positive;
!          Going  : Direction := Forward) return Natural
!          renames Super_Index_Non_Blank;
  
        function Count
!         (Source  : Bounded_Wide_String;
!          Pattern : Wide_String;
!          Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
!          return Natural
!          renames Super_Count;
  
        function Count
!         (Source  : Bounded_Wide_String;
!          Pattern : Wide_String;
!          Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural
!          renames Super_Count;
  
        function Count
!         (Source : Bounded_Wide_String;
!          Set    : Wide_Maps.Wide_Character_Set) return Natural
!          renames Super_Count;
  
        procedure Find_Token
!         (Source : Bounded_Wide_String;
!          Set    : Wide_Maps.Wide_Character_Set;
!          Test   : Membership;
           First  : out Positive;
           Last   : out Natural)
!          renames Super_Find_Token;
  
        function Translate
!         (Source  : Bounded_Wide_String;
!          Mapping : Wide_Maps.Wide_Character_Mapping)
!          return Bounded_Wide_String
!          renames Super_Translate;
  
        procedure Translate
          (Source   : in out Bounded_Wide_String;
!          Mapping  : Wide_Maps.Wide_Character_Mapping)
!          renames Super_Translate;
  
        function Translate
!         (Source  : Bounded_Wide_String;
!          Mapping : Wide_Maps.Wide_Character_Mapping_Function)
!          return Bounded_Wide_String
!          renames Super_Translate;
  
        procedure Translate
          (Source  : in out Bounded_Wide_String;
!          Mapping : Wide_Maps.Wide_Character_Mapping_Function)
!          renames Super_Translate;
  
        function Replace_Slice
!         (Source : Bounded_Wide_String;
!          Low    : Positive;
!          High   : Natural;
!          By     : Wide_String;
!          Drop   : Truncation := Error) return Bounded_Wide_String
!          renames Super_Replace_Slice;
  
        procedure Replace_Slice
          (Source   : in out Bounded_Wide_String;
!          Low      : Positive;
!          High     : Natural;
!          By       : Wide_String;
!          Drop     : Truncation := Error)
!          renames Super_Replace_Slice;
  
        function Insert
!         (Source   : Bounded_Wide_String;
!          Before   : Positive;
!          New_Item : Wide_String;
!          Drop     : Truncation := Error) return Bounded_Wide_String
!          renames Super_Insert;
  
        procedure Insert
          (Source   : in out Bounded_Wide_String;
!          Before   : Positive;
!          New_Item : Wide_String;
!          Drop     : Truncation := Error)
!          renames Super_Insert;
  
        function Overwrite
!         (Source   : Bounded_Wide_String;
!          Position : Positive;
!          New_Item : Wide_String;
!          Drop     : Truncation := Error) return Bounded_Wide_String
!          renames Super_Overwrite;
  
        procedure Overwrite
          (Source    : in out Bounded_Wide_String;
!          Position  : Positive;
!          New_Item  : Wide_String;
!          Drop      : Truncation := Error)
!          renames Super_Overwrite;
  
        function Delete
!         (Source  : Bounded_Wide_String;
!          From    : Positive;
!          Through : Natural) return Bounded_Wide_String
!          renames Super_Delete;
  
        procedure Delete
          (Source  : in out Bounded_Wide_String;
!          From    : Positive;
!          Through : Natural)
!          renames Super_Delete;
  
        function Trim
!         (Source : Bounded_Wide_String;
!          Side   : Trim_End) return Bounded_Wide_String
!          renames Super_Trim;
  
        procedure Trim
          (Source : in out Bounded_Wide_String;
!          Side   : Trim_End)
!          renames Super_Trim;
  
        function Trim
!         (Source : Bounded_Wide_String;
!          Left   : Wide_Maps.Wide_Character_Set;
!          Right  : Wide_Maps.Wide_Character_Set) return Bounded_Wide_String
!          renames Super_Trim;
  
        procedure Trim
          (Source : in out Bounded_Wide_String;
!          Left   : Wide_Maps.Wide_Character_Set;
!          Right  : Wide_Maps.Wide_Character_Set)
!          renames Super_Trim;
  
        function Head
!         (Source : Bounded_Wide_String;
!          Count  : Natural;
!          Pad    : Wide_Character := Wide_Space;
!          Drop   : Truncation     := Error) return Bounded_Wide_String
!          renames Super_Head;
  
        procedure Head
          (Source : in out Bounded_Wide_String;
!          Count  : Natural;
!          Pad    : Wide_Character := Wide_Space;
!          Drop   : Truncation     := Error)
!          renames Super_Head;
  
        function Tail
!         (Source : Bounded_Wide_String;
!          Count  : Natural;
!          Pad    : Wide_Character := Wide_Space;
!          Drop   : Truncation     := Error) return Bounded_Wide_String
!          renames Super_Tail;
  
        procedure Tail
          (Source : in out Bounded_Wide_String;
!          Count  : Natural;
!          Pad    : Wide_Character := Wide_Space;
!          Drop   : Truncation := Error)
!          renames Super_Tail;
  
        function "*"
!         (Left  : Natural;
!          Right : Bounded_Wide_String) return Bounded_Wide_String
!          renames Times;
  
        function Replicate
!         (Count : Natural;
!          Item  : Bounded_Wide_String;
!          Drop  : Truncation := Error) return Bounded_Wide_String
           renames Super_Replicate;
  
     end Generic_Bounded_Length;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-stwifi.adb gcc-4.0.0/gcc/ada/a-stwifi.adb
*** gcc-3.4.3/gcc/ada/a-stwifi.adb	Tue Oct 21 13:41:54 2003
--- gcc-4.0.0/gcc/ada/a-stwifi.adb	Thu Feb 10 13:51:38 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Ada.Strings.Wide_Fixed is
*** 41,99 ****
     ------------------------
  
     function Index
!      (Source  : in Wide_String;
!       Pattern : in Wide_String;
!       Going   : in Direction := Forward;
!       Mapping : in Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
!       return    Natural
     renames Ada.Strings.Wide_Search.Index;
  
     function Index
!      (Source  : in Wide_String;
!       Pattern : in Wide_String;
!       Going   : in Direction := Forward;
!       Mapping : in Wide_Maps.Wide_Character_Mapping_Function)
!       return    Natural
     renames Ada.Strings.Wide_Search.Index;
  
     function Index
!      (Source : in Wide_String;
!       Set    : in Wide_Maps.Wide_Character_Set;
!       Test   : in Membership := Inside;
!       Going  : in Direction  := Forward)
!       return   Natural
     renames Ada.Strings.Wide_Search.Index;
  
     function Index_Non_Blank
!      (Source : in Wide_String;
!       Going  : in Direction := Forward)
!       return   Natural
     renames Ada.Strings.Wide_Search.Index_Non_Blank;
  
     function Count
!      (Source  : in Wide_String;
!       Pattern : in Wide_String;
!       Mapping : in Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
!       return    Natural
     renames Ada.Strings.Wide_Search.Count;
  
     function Count
!      (Source   : in Wide_String;
!       Pattern  : in Wide_String;
!       Mapping  : in Wide_Maps.Wide_Character_Mapping_Function)
!       return     Natural
     renames Ada.Strings.Wide_Search.Count;
  
     function Count
!      (Source : in Wide_String;
!       Set    : in Wide_Maps.Wide_Character_Set)
!       return   Natural
     renames Ada.Strings.Wide_Search.Count;
  
     procedure Find_Token
!      (Source : in Wide_String;
!       Set    : in Wide_Maps.Wide_Character_Set;
!       Test   : in Membership;
        First  : out Positive;
        Last   : out Natural)
     renames Ada.Strings.Wide_Search.Find_Token;
--- 41,125 ----
     ------------------------
  
     function Index
!      (Source  : Wide_String;
!       Pattern : Wide_String;
!       Going   : Direction := Forward;
!       Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
!       return Natural
     renames Ada.Strings.Wide_Search.Index;
  
     function Index
!      (Source  : Wide_String;
!       Pattern : Wide_String;
!       Going   : Direction := Forward;
!       Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural
     renames Ada.Strings.Wide_Search.Index;
  
     function Index
!      (Source : Wide_String;
!       Set    : Wide_Maps.Wide_Character_Set;
!       Test   : Membership := Inside;
!       Going  : Direction  := Forward) return Natural
!    renames Ada.Strings.Wide_Search.Index;
! 
!    function Index
!      (Source  : Wide_String;
!       Pattern : Wide_String;
!       From    : Positive;
!       Going   : Direction := Forward;
!       Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
!       return Natural
!    renames Ada.Strings.Wide_Search.Index;
! 
!    function Index
!      (Source  : Wide_String;
!       Pattern : Wide_String;
!       From    : Positive;
!       Going   : Direction := Forward;
!       Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural
!    renames Ada.Strings.Wide_Search.Index;
! 
!    function Index
!      (Source  : Wide_String;
!       Set     : Wide_Maps.Wide_Character_Set;
!       From    : Positive;
!       Test    : Membership := Inside;
!       Going   : Direction := Forward) return Natural
     renames Ada.Strings.Wide_Search.Index;
  
     function Index_Non_Blank
!      (Source : Wide_String;
!       Going  : Direction := Forward) return Natural
!    renames Ada.Strings.Wide_Search.Index_Non_Blank;
! 
!    function Index_Non_Blank
!      (Source : Wide_String;
!       From   : Positive;
!       Going  : Direction := Forward) return Natural
     renames Ada.Strings.Wide_Search.Index_Non_Blank;
  
     function Count
!      (Source  : Wide_String;
!       Pattern : Wide_String;
!       Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
!       return Natural
     renames Ada.Strings.Wide_Search.Count;
  
     function Count
!      (Source  : Wide_String;
!       Pattern : Wide_String;
!       Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural
     renames Ada.Strings.Wide_Search.Count;
  
     function Count
!      (Source : Wide_String;
!       Set    : Wide_Maps.Wide_Character_Set) return Natural
     renames Ada.Strings.Wide_Search.Count;
  
     procedure Find_Token
!      (Source : Wide_String;
!       Set    : Wide_Maps.Wide_Character_Set;
!       Test   : Membership;
        First  : out Positive;
        Last   : out Natural)
     renames Ada.Strings.Wide_Search.Find_Token;
*************** package body Ada.Strings.Wide_Fixed is
*** 103,111 ****
     ---------
  
     function "*"
!      (Left  : in Natural;
!       Right : in Wide_Character)
!       return  Wide_String
     is
        Result : Wide_String (1 .. Left);
  
--- 129,136 ----
     ---------
  
     function "*"
!      (Left  : Natural;
!       Right : Wide_Character) return Wide_String
     is
        Result : Wide_String (1 .. Left);
  
*************** package body Ada.Strings.Wide_Fixed is
*** 118,126 ****
     end "*";
  
     function "*"
!      (Left  : in Natural;
!       Right : in Wide_String)
!       return  Wide_String
     is
        Result : Wide_String (1 .. Left * Right'Length);
        Ptr    : Integer := 1;
--- 143,150 ----
     end "*";
  
     function "*"
!      (Left  : Natural;
!       Right : Wide_String) return Wide_String
     is
        Result : Wide_String (1 .. Left * Right'Length);
        Ptr    : Integer := 1;
*************** package body Ada.Strings.Wide_Fixed is
*** 139,148 ****
     ------------
  
     function Delete
!      (Source  : in Wide_String;
!       From    : in Positive;
!       Through : in Natural)
!       return    Wide_String
     is
     begin
        if From not in Source'Range
--- 163,171 ----
     ------------
  
     function Delete
!      (Source  : Wide_String;
!       From    : Positive;
!       Through : Natural) return Wide_String
     is
     begin
        if From not in Source'Range
*************** package body Ada.Strings.Wide_Fixed is
*** 168,177 ****
  
     procedure Delete
       (Source  : in out Wide_String;
!       From    : in Positive;
!       Through : in Natural;
!       Justify : in Alignment := Left;
!       Pad     : in Wide_Character := Wide_Space)
     is
     begin
        Move (Source  => Delete (Source, From, Through),
--- 191,200 ----
  
     procedure Delete
       (Source  : in out Wide_String;
!       From    : Positive;
!       Through : Natural;
!       Justify : Alignment := Left;
!       Pad     : Wide_Character := Wide_Space)
     is
     begin
        Move (Source  => Delete (Source, From, Through),
*************** package body Ada.Strings.Wide_Fixed is
*** 185,194 ****
     ----------
  
     function Head
!      (Source : in Wide_String;
!       Count  : in Natural;
!       Pad    : in Wide_Character := Wide_Space)
!       return   Wide_String
     is
        Result : Wide_String (1 .. Count);
  
--- 208,216 ----
     ----------
  
     function Head
!      (Source : Wide_String;
!       Count  : Natural;
!       Pad    : Wide_Character := Wide_Space) return Wide_String
     is
        Result : Wide_String (1 .. Count);
  
*************** package body Ada.Strings.Wide_Fixed is
*** 209,217 ****
  
     procedure Head
       (Source  : in out Wide_String;
!       Count   : in Natural;
!       Justify : in Alignment := Left;
!       Pad     : in Wide_Character := Ada.Strings.Wide_Space)
     is
     begin
        Move (Source  => Head (Source, Count, Pad),
--- 231,239 ----
  
     procedure Head
       (Source  : in out Wide_String;
!       Count   : Natural;
!       Justify : Alignment := Left;
!       Pad     : Wide_Character := Ada.Strings.Wide_Space)
     is
     begin
        Move (Source  => Head (Source, Count, Pad),
*************** package body Ada.Strings.Wide_Fixed is
*** 226,235 ****
     ------------
  
     function Insert
!      (Source   : in Wide_String;
!       Before   : in Positive;
!       New_Item : in Wide_String)
!       return     Wide_String
     is
        Result : Wide_String (1 .. Source'Length + New_Item'Length);
  
--- 248,256 ----
     ------------
  
     function Insert
!      (Source   : Wide_String;
!       Before   : Positive;
!       New_Item : Wide_String) return Wide_String
     is
        Result : Wide_String (1 .. Source'Length + New_Item'Length);
  
*************** package body Ada.Strings.Wide_Fixed is
*** 245,253 ****
  
     procedure Insert
       (Source   : in out Wide_String;
!       Before   : in Positive;
!       New_Item : in Wide_String;
!       Drop     : in Truncation := Error)
     is
     begin
        Move (Source => Insert (Source, Before, New_Item),
--- 266,274 ----
  
     procedure Insert
       (Source   : in out Wide_String;
!       Before   : Positive;
!       New_Item : Wide_String;
!       Drop     : Truncation := Error)
     is
     begin
        Move (Source => Insert (Source, Before, New_Item),
*************** package body Ada.Strings.Wide_Fixed is
*** 260,270 ****
     ----------
  
     procedure Move
!      (Source  : in  Wide_String;
        Target  : out Wide_String;
!       Drop    : in  Truncation := Error;
!       Justify : in  Alignment  := Left;
!       Pad     : in  Wide_Character  := Wide_Space)
     is
        Sfirst  : constant Integer := Source'First;
        Slast   : constant Integer := Source'Last;
--- 281,291 ----
     ----------
  
     procedure Move
!      (Source  : Wide_String;
        Target  : out Wide_String;
!       Drop    : Truncation := Error;
!       Justify : Alignment  := Left;
!       Pad     : Wide_Character  := Wide_Space)
     is
        Sfirst  : constant Integer := Source'First;
        Slast   : constant Integer := Source'Last;
*************** package body Ada.Strings.Wide_Fixed is
*** 369,378 ****
     ---------------
  
     function Overwrite
!      (Source   : in Wide_String;
!       Position : in Positive;
!       New_Item : in Wide_String)
!       return     Wide_String
     is
     begin
        if Position not in Source'First .. Source'Last + 1 then
--- 390,398 ----
     ---------------
  
     function Overwrite
!      (Source   : Wide_String;
!       Position : Positive;
!       New_Item : Wide_String) return Wide_String
     is
     begin
        if Position not in Source'First .. Source'Last + 1 then
*************** package body Ada.Strings.Wide_Fixed is
*** 396,404 ****
  
     procedure Overwrite
       (Source   : in out Wide_String;
!       Position : in Positive;
!       New_Item : in Wide_String;
!       Drop     : in Truncation := Right)
     is
     begin
        Move (Source => Overwrite (Source, Position, New_Item),
--- 416,424 ----
  
     procedure Overwrite
       (Source   : in out Wide_String;
!       Position : Positive;
!       New_Item : Wide_String;
!       Drop     : Truncation := Right)
     is
     begin
        Move (Source => Overwrite (Source, Position, New_Item),
*************** package body Ada.Strings.Wide_Fixed is
*** 411,421 ****
     -------------------
  
     function Replace_Slice
!      (Source   : in Wide_String;
!       Low      : in Positive;
!       High     : in Natural;
!       By       : in Wide_String)
!       return     Wide_String
     is
        Result_Length : Natural;
  
--- 431,440 ----
     -------------------
  
     function Replace_Slice
!      (Source : Wide_String;
!       Low    : Positive;
!       High   : Natural;
!       By     : Wide_String) return Wide_String
     is
        Result_Length : Natural;
  
*************** package body Ada.Strings.Wide_Fixed is
*** 446,457 ****
  
     procedure Replace_Slice
       (Source   : in out Wide_String;
!       Low      : in Positive;
!       High     : in Natural;
!       By       : in Wide_String;
!       Drop     : in Truncation := Error;
!       Justify  : in Alignment  := Left;
!       Pad      : in Wide_Character  := Wide_Space)
     is
     begin
        Move (Replace_Slice (Source, Low, High, By), Source, Drop, Justify, Pad);
--- 465,476 ----
  
     procedure Replace_Slice
       (Source   : in out Wide_String;
!       Low      : Positive;
!       High     : Natural;
!       By       : Wide_String;
!       Drop     : Truncation := Error;
!       Justify  : Alignment  := Left;
!       Pad      : Wide_Character  := Wide_Space)
     is
     begin
        Move (Replace_Slice (Source, Low, High, By), Source, Drop, Justify, Pad);
*************** package body Ada.Strings.Wide_Fixed is
*** 462,471 ****
     ----------
  
     function Tail
!      (Source : in Wide_String;
!       Count  : in Natural;
!       Pad    : in Wide_Character := Wide_Space)
!       return   Wide_String
     is
        Result : Wide_String (1 .. Count);
  
--- 481,489 ----
     ----------
  
     function Tail
!      (Source : Wide_String;
!       Count  : Natural;
!       Pad    : Wide_Character := Wide_Space) return Wide_String
     is
        Result : Wide_String (1 .. Count);
  
*************** package body Ada.Strings.Wide_Fixed is
*** 488,496 ****
  
     procedure Tail
       (Source  : in out Wide_String;
!       Count   : in Natural;
!       Justify : in Alignment := Left;
!       Pad     : in Wide_Character := Ada.Strings.Wide_Space)
     is
     begin
        Move (Source  => Tail (Source, Count, Pad),
--- 506,514 ----
  
     procedure Tail
       (Source  : in out Wide_String;
!       Count   : Natural;
!       Justify : Alignment := Left;
!       Pad     : Wide_Character := Ada.Strings.Wide_Space)
     is
     begin
        Move (Source  => Tail (Source, Count, Pad),
*************** package body Ada.Strings.Wide_Fixed is
*** 505,513 ****
     ---------------
  
     function Translate
!      (Source  : in Wide_String;
!       Mapping : in Wide_Maps.Wide_Character_Mapping)
!       return    Wide_String
     is
        Result : Wide_String (1 .. Source'Length);
  
--- 523,530 ----
     ---------------
  
     function Translate
!      (Source  : Wide_String;
!       Mapping : Wide_Maps.Wide_Character_Mapping) return Wide_String
     is
        Result : Wide_String (1 .. Source'Length);
  
*************** package body Ada.Strings.Wide_Fixed is
*** 521,527 ****
  
     procedure Translate
       (Source  : in out Wide_String;
!       Mapping : in Wide_Maps.Wide_Character_Mapping)
     is
     begin
        for J in Source'Range loop
--- 538,544 ----
  
     procedure Translate
       (Source  : in out Wide_String;
!       Mapping : Wide_Maps.Wide_Character_Mapping)
     is
     begin
        for J in Source'Range loop
*************** package body Ada.Strings.Wide_Fixed is
*** 530,538 ****
     end Translate;
  
     function Translate
!      (Source  : in Wide_String;
!       Mapping : in Wide_Maps.Wide_Character_Mapping_Function)
!       return    Wide_String
     is
        Result : Wide_String (1 .. Source'Length);
  
--- 547,554 ----
     end Translate;
  
     function Translate
!      (Source  : Wide_String;
!       Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Wide_String
     is
        Result : Wide_String (1 .. Source'Length);
  
*************** package body Ada.Strings.Wide_Fixed is
*** 546,552 ****
  
     procedure Translate
       (Source  : in out Wide_String;
!       Mapping : in Wide_Maps.Wide_Character_Mapping_Function)
     is
     begin
        for J in Source'Range loop
--- 562,568 ----
  
     procedure Translate
       (Source  : in out Wide_String;
!       Mapping : Wide_Maps.Wide_Character_Mapping_Function)
     is
     begin
        for J in Source'Range loop
*************** package body Ada.Strings.Wide_Fixed is
*** 559,567 ****
     ----------
  
     function Trim
!      (Source : in Wide_String;
!       Side   : in Trim_End)
!       return   Wide_String
     is
        Low  : Natural := Source'First;
        High : Natural := Source'Last;
--- 575,582 ----
     ----------
  
     function Trim
!      (Source : Wide_String;
!       Side   : Trim_End) return Wide_String
     is
        Low  : Natural := Source'First;
        High : Natural := Source'Last;
*************** package body Ada.Strings.Wide_Fixed is
*** 599,607 ****
  
     procedure Trim
       (Source  : in out Wide_String;
!       Side    : in Trim_End;
!       Justify : in Alignment      := Left;
!       Pad     : in Wide_Character := Wide_Space)
     is
     begin
        Move (Source  => Trim (Source, Side),
--- 614,622 ----
  
     procedure Trim
       (Source  : in out Wide_String;
!       Side    : Trim_End;
!       Justify : Alignment      := Left;
!       Pad     : Wide_Character := Wide_Space)
     is
     begin
        Move (Source  => Trim (Source, Side),
*************** package body Ada.Strings.Wide_Fixed is
*** 611,620 ****
     end Trim;
  
     function Trim
!       (Source : in Wide_String;
!        Left   : in Wide_Maps.Wide_Character_Set;
!        Right  : in Wide_Maps.Wide_Character_Set)
!        return   Wide_String
     is
        Low  : Natural := Source'First;
        High : Natural := Source'Last;
--- 626,634 ----
     end Trim;
  
     function Trim
!       (Source : Wide_String;
!        Left   : Wide_Maps.Wide_Character_Set;
!        Right  : Wide_Maps.Wide_Character_Set) return Wide_String
     is
        Low  : Natural := Source'First;
        High : Natural := Source'Last;
*************** package body Ada.Strings.Wide_Fixed is
*** 644,653 ****
  
     procedure Trim
        (Source  : in out Wide_String;
!        Left    : in Wide_Maps.Wide_Character_Set;
!        Right   : in Wide_Maps.Wide_Character_Set;
!        Justify : in Alignment      := Strings.Left;
!        Pad     : in Wide_Character := Wide_Space)
     is
     begin
        Move (Source  => Trim (Source, Left, Right),
--- 658,667 ----
  
     procedure Trim
        (Source  : in out Wide_String;
!        Left    : Wide_Maps.Wide_Character_Set;
!        Right   : Wide_Maps.Wide_Character_Set;
!        Justify : Alignment      := Strings.Left;
!        Pad     : Wide_Character := Wide_Space)
     is
     begin
        Move (Source  => Trim (Source, Left, Right),
diff -Nrcpad gcc-3.4.3/gcc/ada/a-stwifi.ads gcc-4.0.0/gcc/ada/a-stwifi.ads
*** gcc-3.4.3/gcc/ada/a-stwifi.ads	Thu Apr 24 17:53:54 2003
--- gcc-4.0.0/gcc/ada/a-stwifi.ads	Thu Feb 10 13:51:38 2005
*************** pragma Preelaborate (Wide_Fixed);
*** 24,86 ****
     -------------------------------------------------------------------
  
     procedure Move
!      (Source  : in  Wide_String;
        Target  : out Wide_String;
!       Drop    : in  Truncation := Error;
!       Justify : in  Alignment  := Left;
!       Pad     : in  Wide_Character  := Ada.Strings.Wide_Space);
  
     ------------------------
     -- Search Subprograms --
     ------------------------
  
     function Index
!      (Source  : in Wide_String;
!       Pattern : in Wide_String;
!       Going   : in Direction := Forward;
!       Mapping : in Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
!       return    Natural;
  
     function Index
!      (Source  : in Wide_String;
!       Pattern : in Wide_String;
!       Going   : in Direction := Forward;
!       Mapping : in Wide_Maps.Wide_Character_Mapping_Function)
!       return    Natural;
  
     function Index
!      (Source : in Wide_String;
!       Set    : in Wide_Maps.Wide_Character_Set;
!       Test   : in Membership := Inside;
!       Going  : in Direction  := Forward)
!       return   Natural;
  
     function Index_Non_Blank
!      (Source : in Wide_String;
!       Going  : in Direction := Forward)
!       return   Natural;
  
     function Count
!      (Source  : in Wide_String;
!       Pattern : in Wide_String;
!       Mapping : in Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
!       return    Natural;
  
     function Count
!      (Source   : in Wide_String;
!       Pattern  : in Wide_String;
!       Mapping  : in Wide_Maps.Wide_Character_Mapping_Function)
!       return     Natural;
  
     function Count
!      (Source : in Wide_String;
!       Set    : in Wide_Maps.Wide_Character_Set)
!       return   Natural;
  
     procedure Find_Token
!      (Source : in Wide_String;
!       Set    : in Wide_Maps.Wide_Character_Set;
!       Test   : in Membership;
        First  : out Positive;
        Last   : out Natural);
  
--- 24,112 ----
     -------------------------------------------------------------------
  
     procedure Move
!      (Source  : Wide_String;
        Target  : out Wide_String;
!       Drop    : Truncation := Error;
!       Justify : Alignment  := Left;
!       Pad     : Wide_Character  := Ada.Strings.Wide_Space);
  
     ------------------------
     -- Search Subprograms --
     ------------------------
  
     function Index
!      (Source  : Wide_String;
!       Pattern : Wide_String;
!       Going   : Direction := Forward;
!       Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
!       return Natural;
  
     function Index
!      (Source  : Wide_String;
!       Pattern : Wide_String;
!       Going   : Direction := Forward;
!       Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural;
  
     function Index
!      (Source : Wide_String;
!       Set    : Wide_Maps.Wide_Character_Set;
!       Test   : Membership := Inside;
!       Going  : Direction  := Forward) return Natural;
! 
!    function Index
!      (Source  : Wide_String;
!       Pattern : Wide_String;
!       From    : Positive;
!       Going   : Direction := Forward;
!       Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
!       return Natural;
!    pragma Ada_05 (Index);
! 
!    function Index
!      (Source  : Wide_String;
!       Pattern : Wide_String;
!       From    : Positive;
!       Going   : Direction := Forward;
!       Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural;
!    pragma Ada_05 (Index);
! 
!    function Index
!      (Source  : Wide_String;
!       Set     : Wide_Maps.Wide_Character_Set;
!       From    : Positive;
!       Test    : Membership := Inside;
!       Going   : Direction := Forward) return Natural;
!    pragma Ada_05 (Index);
  
     function Index_Non_Blank
!      (Source : Wide_String;
!       Going  : Direction := Forward) return Natural;
! 
!    function Index_Non_Blank
!      (Source : Wide_String;
!       From   : Positive;
!       Going  : Direction := Forward) return Natural;
!    pragma Ada_05 (Index_Non_Blank);
  
     function Count
!      (Source  : Wide_String;
!       Pattern : Wide_String;
!       Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
!       return Natural;
  
     function Count
!      (Source  : Wide_String;
!       Pattern : Wide_String;
!       Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural;
  
     function Count
!      (Source : Wide_String;
!       Set    : Wide_Maps.Wide_Character_Set) return Natural;
  
     procedure Find_Token
!      (Source : Wide_String;
!       Set    : Wide_Maps.Wide_Character_Set;
!       Test   : Membership;
        First  : out Positive;
        Last   : out Natural);
  
*************** pragma Preelaborate (Wide_Fixed);
*** 89,232 ****
     -----------------------------------------
  
     function Translate
!      (Source  : in Wide_String;
!       Mapping : in Wide_Maps.Wide_Character_Mapping)
!       return    Wide_String;
  
     procedure Translate
       (Source  : in out Wide_String;
!       Mapping : in Wide_Maps.Wide_Character_Mapping);
  
     function Translate
!      (Source  : in Wide_String;
!       Mapping : in Wide_Maps.Wide_Character_Mapping_Function)
!       return    Wide_String;
  
     procedure Translate
       (Source  : in out Wide_String;
!       Mapping : in Wide_Maps.Wide_Character_Mapping_Function);
  
     --------------------------------------------
     -- Wide_String Transformation Subprograms --
     --------------------------------------------
  
     function Replace_Slice
!      (Source : in Wide_String;
!       Low    : in Positive;
!       High   : in Natural;
!       By     : in Wide_String)
!       return   Wide_String;
  
     procedure Replace_Slice
       (Source  : in out Wide_String;
!       Low     : in Positive;
!       High    : in Natural;
!       By      : in Wide_String;
!       Drop    : in Truncation := Error;
!       Justify : in Alignment  := Left;
!       Pad     : in Wide_Character  := Ada.Strings.Wide_Space);
  
     function Insert
!      (Source   : in Wide_String;
!       Before   : in Positive;
!       New_Item : in Wide_String)
!       return     Wide_String;
  
     procedure Insert
       (Source   : in out Wide_String;
!       Before   : in Positive;
!       New_Item : in Wide_String;
!       Drop     : in Truncation := Error);
  
     function Overwrite
!      (Source   : in Wide_String;
!       Position : in Positive;
!       New_Item : in Wide_String)
!       return     Wide_String;
  
     procedure Overwrite
       (Source   : in out Wide_String;
!       Position : in Positive;
!       New_Item : in Wide_String;
!       Drop     : in Truncation := Right);
  
     function Delete
!      (Source  : in Wide_String;
!       From    : in Positive;
!       Through : in Natural)
!       return    Wide_String;
  
     procedure Delete
       (Source  : in out Wide_String;
!       From    : in Positive;
!       Through : in Natural;
!       Justify : in Alignment := Left;
!       Pad     : in Wide_Character := Ada.Strings.Wide_Space);
  
     --------------------------------------
     -- Wide_String Selector Subprograms --
     --------------------------------------
  
     function Trim
!      (Source : in Wide_String;
!       Side   : in Trim_End)
!       return   Wide_String;
  
     procedure Trim
       (Source  : in out Wide_String;
!       Side    : in Trim_End;
!       Justify : in Alignment      := Left;
!       Pad     : in Wide_Character := Wide_Space);
  
     function Trim
!      (Source : in Wide_String;
!       Left   : in Wide_Maps.Wide_Character_Set;
!       Right  : in Wide_Maps.Wide_Character_Set)
!       return   Wide_String;
  
     procedure Trim
       (Source  : in out Wide_String;
!       Left    : in Wide_Maps.Wide_Character_Set;
!       Right   : in Wide_Maps.Wide_Character_Set;
!       Justify : in Alignment := Ada.Strings.Left;
!       Pad     : in Wide_Character := Ada.Strings.Wide_Space);
  
     function Head
!      (Source : in Wide_String;
!       Count  : in Natural;
!       Pad    : in Wide_Character := Ada.Strings.Wide_Space)
!       return   Wide_String;
  
     procedure Head
       (Source  : in out Wide_String;
!       Count   : in Natural;
!       Justify : in Alignment := Left;
!       Pad     : in Wide_Character := Ada.Strings.Wide_Space);
  
     function Tail
!      (Source : in Wide_String;
!       Count  : in Natural;
!       Pad    : in Wide_Character := Ada.Strings.Wide_Space)
!       return   Wide_String;
  
     procedure Tail
       (Source : in out Wide_String;
!       Count  : in Natural;
!       Justify : in Alignment := Left;
!       Pad    : in Wide_Character := Ada.Strings.Wide_Space);
  
     ---------------------------------------
     -- Wide_String Constructor Functions --
     ---------------------------------------
  
     function "*"
!      (Left  : in Natural;
!       Right : in Wide_Character)
!       return  Wide_String;
  
     function "*"
!      (Left  : in Natural;
!       Right : in Wide_String)
!       return Wide_String;
  
  end Ada.Strings.Wide_Fixed;
--- 115,246 ----
     -----------------------------------------
  
     function Translate
!      (Source  : Wide_String;
!       Mapping : Wide_Maps.Wide_Character_Mapping) return Wide_String;
  
     procedure Translate
       (Source  : in out Wide_String;
!       Mapping : Wide_Maps.Wide_Character_Mapping);
  
     function Translate
!      (Source  : Wide_String;
!       Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Wide_String;
  
     procedure Translate
       (Source  : in out Wide_String;
!       Mapping : Wide_Maps.Wide_Character_Mapping_Function);
  
     --------------------------------------------
     -- Wide_String Transformation Subprograms --
     --------------------------------------------
  
     function Replace_Slice
!      (Source : Wide_String;
!       Low    : Positive;
!       High   : Natural;
!       By     : Wide_String) return Wide_String;
  
     procedure Replace_Slice
       (Source  : in out Wide_String;
!       Low     : Positive;
!       High    : Natural;
!       By      : Wide_String;
!       Drop    : Truncation := Error;
!       Justify : Alignment  := Left;
!       Pad     : Wide_Character  := Ada.Strings.Wide_Space);
  
     function Insert
!      (Source   : Wide_String;
!       Before   : Positive;
!       New_Item : Wide_String) return Wide_String;
  
     procedure Insert
       (Source   : in out Wide_String;
!       Before   : Positive;
!       New_Item : Wide_String;
!       Drop     : Truncation := Error);
  
     function Overwrite
!      (Source   : Wide_String;
!       Position : Positive;
!       New_Item : Wide_String) return Wide_String;
  
     procedure Overwrite
       (Source   : in out Wide_String;
!       Position : Positive;
!       New_Item : Wide_String;
!       Drop     : Truncation := Right);
  
     function Delete
!      (Source  : Wide_String;
!       From    : Positive;
!       Through : Natural) return Wide_String;
  
     procedure Delete
       (Source  : in out Wide_String;
!       From    : Positive;
!       Through : Natural;
!       Justify : Alignment := Left;
!       Pad     : Wide_Character := Ada.Strings.Wide_Space);
  
     --------------------------------------
     -- Wide_String Selector Subprograms --
     --------------------------------------
  
     function Trim
!      (Source : Wide_String;
!       Side   : Trim_End) return Wide_String;
  
     procedure Trim
       (Source  : in out Wide_String;
!       Side    : Trim_End;
!       Justify : Alignment      := Left;
!       Pad     : Wide_Character := Wide_Space);
  
     function Trim
!      (Source : Wide_String;
!       Left   : Wide_Maps.Wide_Character_Set;
!       Right  : Wide_Maps.Wide_Character_Set) return Wide_String;
  
     procedure Trim
       (Source  : in out Wide_String;
!       Left    : Wide_Maps.Wide_Character_Set;
!       Right   : Wide_Maps.Wide_Character_Set;
!       Justify : Alignment := Ada.Strings.Left;
!       Pad     : Wide_Character := Ada.Strings.Wide_Space);
  
     function Head
!      (Source : Wide_String;
!       Count  : Natural;
!       Pad    : Wide_Character := Ada.Strings.Wide_Space) return Wide_String;
  
     procedure Head
       (Source  : in out Wide_String;
!       Count   : Natural;
!       Justify : Alignment := Left;
!       Pad     : Wide_Character := Ada.Strings.Wide_Space);
  
     function Tail
!      (Source : Wide_String;
!       Count  : Natural;
!       Pad    : Wide_Character := Ada.Strings.Wide_Space) return Wide_String;
  
     procedure Tail
       (Source : in out Wide_String;
!       Count  : Natural;
!       Justify : Alignment := Left;
!       Pad    : Wide_Character := Ada.Strings.Wide_Space);
  
     ---------------------------------------
     -- Wide_String Constructor Functions --
     ---------------------------------------
  
     function "*"
!      (Left  : Natural;
!       Right : Wide_Character) return Wide_String;
  
     function "*"
!      (Left  : Natural;
!       Right : Wide_String) return Wide_String;
  
  end Ada.Strings.Wide_Fixed;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-stwiha.adb gcc-4.0.0/gcc/ada/a-stwiha.adb
*** gcc-3.4.3/gcc/ada/a-stwiha.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-stwiha.adb	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,59 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                          ADA.STRINGS.WIDE_HASH                           --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ 
+ --  Note: source of this algorithm: GNAT.HTable.Hash (g-htable.adb)
+ 
+ function Ada.Strings.Wide_Hash
+   (Key : Wide_String) return Containers.Hash_Type
+ is
+    use Ada.Containers;
+ 
+    function Rotate_Left
+      (Value  : Hash_Type;
+       Amount : Natural) return Hash_Type;
+    pragma Import (Intrinsic, Rotate_Left);
+ 
+    Tmp : Hash_Type;
+ 
+ begin
+    Tmp := 0;
+    for J in Key'Range loop
+       Tmp := Rotate_Left (Tmp, 1) + Wide_Character'Pos (Key (J));
+    end loop;
+ 
+    return Tmp;
+ end Ada.Strings.Wide_Hash;
+ 
+ 
diff -Nrcpad gcc-3.4.3/gcc/ada/a-stwiha.ads gcc-4.0.0/gcc/ada/a-stwiha.ads
*** gcc-3.4.3/gcc/ada/a-stwiha.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-stwiha.ads	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,24 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                          ADA.STRINGS.WIDE_HASH                           --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ -- This specification is adapted from the Ada Reference Manual for use with --
+ -- GNAT.  In accordance with the copyright of that document, you can freely --
+ -- copy and modify this specification,  provided that if you redistribute a --
+ -- modified version,  any changes that you have made are clearly indicated. --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Containers;
+ 
+ function Ada.Strings.Wide_Hash
+   (Key : Wide_String) return Containers.Hash_Type;
+ 
+ pragma Pure (Ada.Strings.Wide_Hash);
+ 
+ 
+ 
diff -Nrcpad gcc-3.4.3/gcc/ada/a-stwima.adb gcc-4.0.0/gcc/ada/a-stwima.adb
*** gcc-3.4.3/gcc/ada/a-stwima.adb	Tue Oct 21 13:41:54 2003
--- gcc-4.0.0/gcc/ada/a-stwima.adb	Thu Feb 10 13:51:38 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Ada.Strings.Wide_Maps is
*** 40,47 ****
     ---------
  
     function "-"
!      (Left, Right : in Wide_Character_Set)
!       return        Wide_Character_Set
     is
        LS : constant Wide_Character_Ranges_Access := Left.Set;
        RS : constant Wide_Character_Ranges_Access := Right.Set;
--- 40,46 ----
     ---------
  
     function "-"
!      (Left, Right : Wide_Character_Set) return Wide_Character_Set
     is
        LS : constant Wide_Character_Ranges_Access := Left.Set;
        RS : constant Wide_Character_Ranges_Access := Right.Set;
*************** package body Ada.Strings.Wide_Maps is
*** 159,166 ****
     -----------
  
     function "and"
!      (Left, Right : in Wide_Character_Set)
!       return        Wide_Character_Set
     is
        LS : constant Wide_Character_Ranges_Access := Left.Set;
        RS : constant Wide_Character_Ranges_Access := Right.Set;
--- 158,164 ----
     -----------
  
     function "and"
!      (Left, Right : Wide_Character_Set) return Wide_Character_Set
     is
        LS : constant Wide_Character_Ranges_Access := Left.Set;
        RS : constant Wide_Character_Ranges_Access := Right.Set;
*************** package body Ada.Strings.Wide_Maps is
*** 210,217 ****
     -----------
  
     function "not"
!      (Right  : in Wide_Character_Set)
!       return Wide_Character_Set
     is
        RS : constant Wide_Character_Ranges_Access := Right.Set;
  
--- 208,214 ----
     -----------
  
     function "not"
!      (Right : Wide_Character_Set) return Wide_Character_Set
     is
        RS : constant Wide_Character_Ranges_Access := Right.Set;
  
*************** package body Ada.Strings.Wide_Maps is
*** 253,260 ****
     ----------
  
     function "or"
!      (Left, Right : in Wide_Character_Set)
!       return        Wide_Character_Set
     is
        LS : constant Wide_Character_Ranges_Access := Left.Set;
        RS : constant Wide_Character_Ranges_Access := Right.Set;
--- 250,256 ----
     ----------
  
     function "or"
!      (Left, Right : Wide_Character_Set) return Wide_Character_Set
     is
        LS : constant Wide_Character_Ranges_Access := Left.Set;
        RS : constant Wide_Character_Ranges_Access := Right.Set;
*************** package body Ada.Strings.Wide_Maps is
*** 341,348 ****
     -----------
  
     function "xor"
!      (Left, Right : in Wide_Character_Set)
!       return        Wide_Character_Set
     is
     begin
        return (Left or Right) - (Left and Right);
--- 337,343 ----
     -----------
  
     function "xor"
!      (Left, Right : Wide_Character_Set) return Wide_Character_Set
     is
     begin
        return (Left or Right) - (Left and Right);
*************** package body Ada.Strings.Wide_Maps is
*** 409,417 ****
     -----------
  
     function Is_In
!      (Element : in Wide_Character;
!       Set     : in Wide_Character_Set)
!       return    Boolean
     is
        L, R, M : Natural;
        SS      : constant Wide_Character_Ranges_Access := Set.Set;
--- 404,411 ----
     -----------
  
     function Is_In
!      (Element : Wide_Character;
!       Set     : Wide_Character_Set) return Boolean
     is
        L, R, M : Natural;
        SS      : constant Wide_Character_Ranges_Access := Set.Set;
*************** package body Ada.Strings.Wide_Maps is
*** 446,454 ****
     ---------------
  
     function Is_Subset
!      (Elements : in Wide_Character_Set;
!       Set      : in Wide_Character_Set)
!       return     Boolean
     is
        ES : constant Wide_Character_Ranges_Access := Elements.Set;
        SS : constant Wide_Character_Ranges_Access := Set.Set;
--- 440,447 ----
     ---------------
  
     function Is_Subset
!      (Elements : Wide_Character_Set;
!       Set      : Wide_Character_Set) return Boolean
     is
        ES : constant Wide_Character_Ranges_Access := Elements.Set;
        SS : constant Wide_Character_Ranges_Access := Set.Set;
*************** package body Ada.Strings.Wide_Maps is
*** 493,500 ****
     ---------------
  
     function To_Domain
!      (Map  : in Wide_Character_Mapping)
!       return Wide_Character_Sequence
     is
     begin
        return Map.Map.Domain;
--- 486,492 ----
     ---------------
  
     function To_Domain
!      (Map : Wide_Character_Mapping) return Wide_Character_Sequence
     is
     begin
        return Map.Map.Domain;
*************** package body Ada.Strings.Wide_Maps is
*** 505,512 ****
     ----------------
  
     function To_Mapping
!      (From, To : in Wide_Character_Sequence)
!       return     Wide_Character_Mapping
     is
        Domain : Wide_Character_Sequence (1 .. From'Length);
        Rangev : Wide_Character_Sequence (1 .. To'Length);
--- 497,503 ----
     ----------------
  
     function To_Mapping
!      (From, To : Wide_Character_Sequence) return Wide_Character_Mapping
     is
        Domain : Wide_Character_Sequence (1 .. From'Length);
        Rangev : Wide_Character_Sequence (1 .. To'Length);
*************** package body Ada.Strings.Wide_Maps is
*** 554,561 ****
     --------------
  
     function To_Range
!      (Map  : in Wide_Character_Mapping)
!       return Wide_Character_Sequence
     is
     begin
        return Map.Map.Rangev;
--- 545,551 ----
     --------------
  
     function To_Range
!      (Map : Wide_Character_Mapping) return Wide_Character_Sequence
     is
     begin
        return Map.Map.Rangev;
*************** package body Ada.Strings.Wide_Maps is
*** 566,573 ****
     ---------------
  
     function To_Ranges
!      (Set :  in Wide_Character_Set)
!       return Wide_Character_Ranges
     is
     begin
        return Set.Set.all;
--- 556,562 ----
     ---------------
  
     function To_Ranges
!      (Set :  in Wide_Character_Set) return Wide_Character_Ranges
     is
     begin
        return Set.Set.all;
*************** package body Ada.Strings.Wide_Maps is
*** 578,585 ****
     -----------------
  
     function To_Sequence
!      (Set  : in Wide_Character_Set)
!       return Wide_Character_Sequence
     is
        SS : constant Wide_Character_Ranges_Access := Set.Set;
  
--- 567,573 ----
     -----------------
  
     function To_Sequence
!      (Set : Wide_Character_Set) return Wide_Character_Sequence
     is
        SS : constant Wide_Character_Ranges_Access := Set.Set;
  
*************** package body Ada.Strings.Wide_Maps is
*** 604,611 ****
     --  Case of multiple range input
  
     function To_Set
!      (Ranges : in Wide_Character_Ranges)
!       return   Wide_Character_Set
     is
        Result : Wide_Character_Ranges (Ranges'Range);
        N      : Natural := 0;
--- 592,598 ----
     --  Case of multiple range input
  
     function To_Set
!      (Ranges : Wide_Character_Ranges) return Wide_Character_Set
     is
        Result : Wide_Character_Ranges (Ranges'Range);
        N      : Natural := 0;
*************** package body Ada.Strings.Wide_Maps is
*** 667,674 ****
     --  Case of single range input
  
     function To_Set
!      (Span : in Wide_Character_Range)
!       return Wide_Character_Set
     is
     begin
        if Span.Low > Span.High then
--- 654,660 ----
     --  Case of single range input
  
     function To_Set
!      (Span : Wide_Character_Range) return Wide_Character_Set
     is
     begin
        if Span.Low > Span.High then
*************** package body Ada.Strings.Wide_Maps is
*** 685,692 ****
     --  Case of wide string input
  
     function To_Set
!      (Sequence : in Wide_Character_Sequence)
!       return     Wide_Character_Set
     is
        R : Wide_Character_Ranges (1 .. Sequence'Length);
  
--- 671,677 ----
     --  Case of wide string input
  
     function To_Set
!      (Sequence : Wide_Character_Sequence) return Wide_Character_Set
     is
        R : Wide_Character_Ranges (1 .. Sequence'Length);
  
*************** package body Ada.Strings.Wide_Maps is
*** 701,708 ****
     --  Case of single wide character input
  
     function To_Set
!      (Singleton : in Wide_Character)
!       return      Wide_Character_Set
     is
     begin
        return
--- 686,692 ----
     --  Case of single wide character input
  
     function To_Set
!      (Singleton : Wide_Character) return Wide_Character_Set
     is
     begin
        return
*************** package body Ada.Strings.Wide_Maps is
*** 715,723 ****
     -----------
  
     function Value
!      (Map     : in Wide_Character_Mapping;
!       Element : in Wide_Character)
!       return    Wide_Character
     is
        L, R, M : Natural;
  
--- 699,706 ----
     -----------
  
     function Value
!      (Map     : Wide_Character_Mapping;
!       Element : Wide_Character) return Wide_Character
     is
        L, R, M : Natural;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/a-stwima.ads gcc-4.0.0/gcc/ada/a-stwima.ads
*** gcc-3.4.3/gcc/ada/a-stwima.ads	Thu Apr 24 17:53:54 2003
--- gcc-4.0.0/gcc/ada/a-stwima.ads	Thu Feb 10 13:51:38 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-1998 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** package Ada.Strings.Wide_Maps is
*** 63,78 ****
       array (Positive range <>) of Wide_Character_Range;
  
     function To_Set
!      (Ranges : in Wide_Character_Ranges)
!       return   Wide_Character_Set;
  
     function To_Set
!      (Span : in Wide_Character_Range)
!       return Wide_Character_Set;
  
     function To_Ranges
!      (Set :  in Wide_Character_Set)
!       return Wide_Character_Ranges;
  
     ---------------------------------------
     -- Operations on Wide Character Sets --
--- 63,75 ----
       array (Positive range <>) of Wide_Character_Range;
  
     function To_Set
!      (Ranges : Wide_Character_Ranges) return Wide_Character_Set;
  
     function To_Set
!      (Span : Wide_Character_Range) return Wide_Character_Set;
  
     function To_Ranges
!      (Set :  in Wide_Character_Set) return Wide_Character_Ranges;
  
     ---------------------------------------
     -- Operations on Wide Character Sets --
*************** package Ada.Strings.Wide_Maps is
*** 81,135 ****
     function "=" (Left, Right : in Wide_Character_Set) return Boolean;
  
     function "not"
!      (Right  : in Wide_Character_Set)
!       return Wide_Character_Set;
  
     function "and"
!      (Left, Right : in Wide_Character_Set)
!       return        Wide_Character_Set;
  
     function "or"
!      (Left, Right : in Wide_Character_Set)
!       return        Wide_Character_Set;
  
     function "xor"
!      (Left, Right : in Wide_Character_Set)
!       return        Wide_Character_Set;
  
     function "-"
!      (Left, Right : in Wide_Character_Set)
!       return        Wide_Character_Set;
  
     function Is_In
!      (Element : in Wide_Character;
!       Set     : in Wide_Character_Set)
!       return    Boolean;
  
     function Is_Subset
!      (Elements : in Wide_Character_Set;
!       Set      : in Wide_Character_Set)
!       return     Boolean;
  
     function "<="
!      (Left  : in Wide_Character_Set;
!       Right : in Wide_Character_Set)
!       return  Boolean
     renames Is_Subset;
  
     subtype Wide_Character_Sequence is Wide_String;
     --  Alternative representation for a set of character values
  
     function To_Set
!      (Sequence  : in Wide_Character_Sequence)
!       return      Wide_Character_Set;
  
     function To_Set
!      (Singleton : in Wide_Character)
!       return      Wide_Character_Set;
  
     function To_Sequence
!      (Set  : in Wide_Character_Set)
!       return Wide_Character_Sequence;
  
     -----------------------------------------
     -- Wide Character Mapping Declarations --
--- 78,121 ----
     function "=" (Left, Right : in Wide_Character_Set) return Boolean;
  
     function "not"
!      (Right : Wide_Character_Set) return Wide_Character_Set;
  
     function "and"
!      (Left, Right : Wide_Character_Set) return Wide_Character_Set;
  
     function "or"
!      (Left, Right : Wide_Character_Set) return Wide_Character_Set;
  
     function "xor"
!      (Left, Right : Wide_Character_Set) return Wide_Character_Set;
  
     function "-"
!      (Left, Right : Wide_Character_Set) return Wide_Character_Set;
  
     function Is_In
!      (Element : Wide_Character;
!       Set     : Wide_Character_Set) return Boolean;
  
     function Is_Subset
!      (Elements : Wide_Character_Set;
!       Set      : Wide_Character_Set) return Boolean;
  
     function "<="
!      (Left  : Wide_Character_Set;
!       Right : Wide_Character_Set) return Boolean
     renames Is_Subset;
  
     subtype Wide_Character_Sequence is Wide_String;
     --  Alternative representation for a set of character values
  
     function To_Set
!      (Sequence : Wide_Character_Sequence) return Wide_Character_Set;
  
     function To_Set
!      (Singleton : Wide_Character) return Wide_Character_Set;
  
     function To_Sequence
!      (Set : Wide_Character_Set) return Wide_Character_Sequence;
  
     -----------------------------------------
     -- Wide Character Mapping Declarations --
*************** package Ada.Strings.Wide_Maps is
*** 139,147 ****
     --  Representation for a wide character to wide character mapping:
  
     function Value
!      (Map     : in Wide_Character_Mapping;
!       Element : in Wide_Character)
!       return    Wide_Character;
  
     Identity : constant Wide_Character_Mapping;
  
--- 125,132 ----
     --  Representation for a wide character to wide character mapping:
  
     function Value
!      (Map     : Wide_Character_Mapping;
!       Element : Wide_Character) return Wide_Character;
  
     Identity : constant Wide_Character_Mapping;
  
*************** package Ada.Strings.Wide_Maps is
*** 150,168 ****
     ---------------------------------
  
     function To_Mapping
!      (From, To : in Wide_Character_Sequence)
!       return     Wide_Character_Mapping;
  
     function To_Domain
!      (Map  : in Wide_Character_Mapping)
!       return Wide_Character_Sequence;
  
     function To_Range
!      (Map  : in Wide_Character_Mapping)
!       return Wide_Character_Sequence;
  
     type Wide_Character_Mapping_Function is
!       access function (From : in Wide_Character) return Wide_Character;
  
  private
     package AF renames Ada.Finalization;
--- 135,150 ----
     ---------------------------------
  
     function To_Mapping
!      (From, To : Wide_Character_Sequence) return Wide_Character_Mapping;
  
     function To_Domain
!      (Map : Wide_Character_Mapping) return Wide_Character_Sequence;
  
     function To_Range
!      (Map : Wide_Character_Mapping) return Wide_Character_Sequence;
  
     type Wide_Character_Mapping_Function is
!       access function (From : Wide_Character) return Wide_Character;
  
  private
     package AF renames Ada.Finalization;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-stwise.adb gcc-4.0.0/gcc/ada/a-stwise.adb
*** gcc-3.4.3/gcc/ada/a-stwise.adb	Thu Apr 24 17:53:54 2003
--- gcc-4.0.0/gcc/ada/a-stwise.adb	Thu Feb 10 13:51:39 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --        Copyright (C) 1992,1993,1994 Free Software Foundation, Inc.       --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Ada.Strings.Wide_Search is
*** 42,49 ****
     function Belongs
       (Element : Wide_Character;
        Set     : Wide_Maps.Wide_Character_Set;
!       Test    : Membership)
!       return    Boolean;
     pragma Inline (Belongs);
     --  Determines if the given element is in (Test = Inside) or not in
     --  (Test = Outside) the given character set.
--- 42,48 ----
     function Belongs
       (Element : Wide_Character;
        Set     : Wide_Maps.Wide_Character_Set;
!       Test    : Membership) return Boolean;
     pragma Inline (Belongs);
     --  Determines if the given element is in (Test = Inside) or not in
     --  (Test = Outside) the given character set.
*************** package body Ada.Strings.Wide_Search is
*** 55,63 ****
     function Belongs
       (Element : Wide_Character;
        Set     : Wide_Maps.Wide_Character_Set;
!       Test    : Membership)
!       return    Boolean is
! 
     begin
        if Test = Inside then
           return Is_In (Element, Set);
--- 54,61 ----
     function Belongs
       (Element : Wide_Character;
        Set     : Wide_Maps.Wide_Character_Set;
!       Test    : Membership) return Boolean
!    is
     begin
        if Test = Inside then
           return Is_In (Element, Set);
*************** package body Ada.Strings.Wide_Search is
*** 71,80 ****
     -----------
  
     function Count
!      (Source   : in Wide_String;
!       Pattern  : in Wide_String;
!       Mapping  : in Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
!       return     Natural
     is
        N : Natural;
        J : Natural;
--- 69,78 ----
     -----------
  
     function Count
!      (Source  : Wide_String;
!       Pattern : Wide_String;
!       Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
!       return Natural
     is
        N : Natural;
        J : Natural;
*************** package body Ada.Strings.Wide_Search is
*** 117,126 ****
     end Count;
  
     function Count
!      (Source   : in Wide_String;
!       Pattern  : in Wide_String;
!       Mapping  : in Wide_Maps.Wide_Character_Mapping_Function)
!       return     Natural
     is
        Mapped_Source : Wide_String (Source'Range);
  
--- 115,123 ----
     end Count;
  
     function Count
!      (Source  : Wide_String;
!       Pattern : Wide_String;
!       Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural
     is
        Mapped_Source : Wide_String (Source'Range);
  
*************** package body Ada.Strings.Wide_Search is
*** 132,140 ****
        return Count (Mapped_Source, Pattern);
     end Count;
  
!    function Count (Source : in Wide_String;
!                    Set    : in Wide_Maps.Wide_Character_Set)
!      return Natural
     is
        N : Natural := 0;
  
--- 129,137 ----
        return Count (Mapped_Source, Pattern);
     end Count;
  
!    function Count
!      (Source : in Wide_String;
!       Set : Wide_Maps.Wide_Character_Set) return Natural
     is
        N : Natural := 0;
  
*************** package body Ada.Strings.Wide_Search is
*** 153,161 ****
     ----------------
  
     procedure Find_Token
!      (Source : in Wide_String;
!       Set    : in Wide_Maps.Wide_Character_Set;
!       Test   : in Membership;
        First  : out Positive;
        Last   : out Natural)
     is
--- 150,158 ----
     ----------------
  
     procedure Find_Token
!      (Source : Wide_String;
!       Set    : Wide_Maps.Wide_Character_Set;
!       Test   : Membership;
        First  : out Positive;
        Last   : out Natural)
     is
*************** package body Ada.Strings.Wide_Search is
*** 190,200 ****
     -----------
  
     function Index
!      (Source   : in Wide_String;
!       Pattern  : in Wide_String;
!       Going    : in Direction := Forward;
!       Mapping  : in Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
!       return     Natural
     is
     begin
        if Pattern = "" then
--- 187,197 ----
     -----------
  
     function Index
!      (Source  : Wide_String;
!       Pattern : Wide_String;
!       Going   : Direction := Forward;
!       Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
!       return Natural
     is
     begin
        if Pattern = "" then
*************** package body Ada.Strings.Wide_Search is
*** 239,254 ****
        return 0;
     end Index;
  
-    -----------
-    -- Index --
-    -----------
- 
     function Index
!      (Source   : in Wide_String;
!       Pattern  : in Wide_String;
!       Going    : in Direction := Forward;
!       Mapping  : in Wide_Maps.Wide_Character_Mapping_Function)
!       return     Natural
     is
        Mapped_Source : Wide_String (Source'Range);
  
--- 236,246 ----
        return 0;
     end Index;
  
     function Index
!      (Source  : Wide_String;
!       Pattern : Wide_String;
!       Going   : Direction := Forward;
!       Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural
     is
        Mapped_Source : Wide_String (Source'Range);
  
*************** package body Ada.Strings.Wide_Search is
*** 261,271 ****
     end Index;
  
     function Index
!      (Source : in Wide_String;
!       Set    : in Wide_Maps.Wide_Character_Set;
!       Test   : in Membership := Inside;
!       Going  : in Direction  := Forward)
!       return   Natural
     is
     begin
        if Going = Forward then
--- 253,262 ----
     end Index;
  
     function Index
!      (Source : Wide_String;
!       Set    : Wide_Maps.Wide_Character_Set;
!       Test   : Membership := Inside;
!       Going  : Direction  := Forward) return Natural
     is
     begin
        if Going = Forward then
*************** package body Ada.Strings.Wide_Search is
*** 288,301 ****
        return 0;
     end Index;
  
     ---------------------
     -- Index_Non_Blank --
     ---------------------
  
     function Index_Non_Blank
!      (Source : in Wide_String;
!       Going  : in Direction := Forward)
!       return   Natural
     is
     begin
        if Going = Forward then
--- 279,370 ----
        return 0;
     end Index;
  
+    function Index
+      (Source  : Wide_String;
+       Pattern : Wide_String;
+       From    : Positive;
+       Going   : Direction := Forward;
+       Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
+       return Natural
+    is
+    begin
+       if Going = Forward then
+          if From < Source'First then
+             raise Index_Error;
+          end if;
+ 
+          return
+            Index (Source (From .. Source'Last), Pattern, Forward, Mapping);
+ 
+       else
+          if From > Source'Last then
+             raise Index_Error;
+          end if;
+ 
+          return
+            Index (Source (Source'First .. From), Pattern, Backward, Mapping);
+       end if;
+    end Index;
+ 
+    function Index
+      (Source  : Wide_String;
+       Pattern : Wide_String;
+       From    : Positive;
+       Going   : Direction := Forward;
+       Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural
+    is
+    begin
+       if Going = Forward then
+          if From < Source'First then
+             raise Index_Error;
+          end if;
+ 
+          return Index
+            (Source (From .. Source'Last), Pattern, Forward, Mapping);
+ 
+       else
+          if From > Source'Last then
+             raise Index_Error;
+          end if;
+ 
+          return Index
+            (Source (Source'First .. From), Pattern, Backward, Mapping);
+       end if;
+    end Index;
+ 
+    function Index
+      (Source  : Wide_String;
+       Set     : Wide_Maps.Wide_Character_Set;
+       From    : Positive;
+       Test    : Membership := Inside;
+       Going   : Direction := Forward) return Natural
+    is
+    begin
+       if Going = Forward then
+          if From < Source'First then
+             raise Index_Error;
+          end if;
+ 
+          return
+            Index (Source (From .. Source'Last), Set, Test, Forward);
+ 
+       else
+          if From > Source'Last then
+             raise Index_Error;
+          end if;
+ 
+          return
+            Index (Source (Source'First .. From), Set, Test, Backward);
+       end if;
+    end Index;
+ 
     ---------------------
     -- Index_Non_Blank --
     ---------------------
  
     function Index_Non_Blank
!      (Source : Wide_String;
!       Going  : Direction := Forward) return Natural
     is
     begin
        if Going = Forward then
*************** package body Ada.Strings.Wide_Search is
*** 316,322 ****
--- 385,414 ----
        --  Fall through if no match
  
        return 0;
+    end Index_Non_Blank;
  
+    function Index_Non_Blank
+      (Source : Wide_String;
+       From   : Positive;
+       Going  : Direction := Forward) return Natural
+    is
+    begin
+       if Going = Forward then
+          if From < Source'First then
+             raise Index_Error;
+          end if;
+ 
+          return
+            Index_Non_Blank (Source (From .. Source'Last), Forward);
+ 
+       else
+          if From > Source'Last then
+             raise Index_Error;
+          end if;
+ 
+          return
+            Index_Non_Blank (Source (Source'First .. From), Backward);
+       end if;
     end Index_Non_Blank;
  
  end Ada.Strings.Wide_Search;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-stwise.ads gcc-4.0.0/gcc/ada/a-stwise.ads
*** gcc-3.4.3/gcc/ada/a-stwise.ads	Thu Apr 24 17:53:54 2003
--- gcc-4.0.0/gcc/ada/a-stwise.ads	Thu Feb 10 13:51:39 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-1997 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Ada.Strings.Wide_Maps;
*** 43,91 ****
  private package Ada.Strings.Wide_Search is
  pragma Preelaborate (Wide_Search);
  
!    function Index (Source   : in Wide_String;
!                    Pattern  : in Wide_String;
!                    Going    : in Direction := Forward;
!                    Mapping  : in Wide_Maps.Wide_Character_Mapping :=
!                                           Wide_Maps.Identity)
!       return Natural;
  
!    function Index (Source   : in Wide_String;
!                    Pattern  : in Wide_String;
!                    Going    : in Direction := Forward;
!                    Mapping  : in Wide_Maps.Wide_Character_Mapping_Function)
!       return Natural;
  
!    function Index (Source : in Wide_String;
!                    Set    : in Wide_Maps.Wide_Character_Set;
!                    Test   : in Membership := Inside;
!                    Going  : in Direction  := Forward)
!       return Natural;
  
!    function Index_Non_Blank (Source : in Wide_String;
!                              Going  : in Direction := Forward)
        return Natural;
  
!    function Count (Source   : in Wide_String;
!                    Pattern  : in Wide_String;
!                    Mapping  : in Wide_Maps.Wide_Character_Mapping :=
!                                           Wide_Maps.Identity)
!       return Natural;
  
!    function Count (Source   : in Wide_String;
!                    Pattern  : in Wide_String;
!                    Mapping  : in Wide_Maps.Wide_Character_Mapping_Function)
!       return Natural;
  
!    function Count (Source   : in Wide_String;
!                    Set      : in Wide_Maps.Wide_Character_Set)
        return Natural;
  
  
!    procedure Find_Token (Source : in Wide_String;
!                          Set    : in Wide_Maps.Wide_Character_Set;
!                          Test   : in Membership;
!                          First  : out Positive;
!                          Last   : out Natural);
  
  end Ada.Strings.Wide_Search;
--- 43,118 ----
  private package Ada.Strings.Wide_Search is
  pragma Preelaborate (Wide_Search);
  
!    function Index
!      (Source  : Wide_String;
!       Pattern : Wide_String;
!       Going   : Direction := Forward;
!       Mapping : Wide_Maps.Wide_Character_Mapping :=
!                   Wide_Maps.Identity) return Natural;
  
!    function Index
!      (Source  : Wide_String;
!       Pattern : Wide_String;
!       Going   : Direction := Forward;
!       Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural;
  
!    function Index
!      (Source : Wide_String;
!       Set    : Wide_Maps.Wide_Character_Set;
!       Test   : Membership := Inside;
!       Going  : Direction  := Forward) return Natural;
  
!    function Index
!      (Source  : Wide_String;
!       Pattern : Wide_String;
!       From    : Positive;
!       Going   : Direction := Forward;
!       Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
        return Natural;
  
!    function Index
!      (Source  : Wide_String;
!       Pattern : Wide_String;
!       From    : Positive;
!       Going   : Direction := Forward;
!       Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural;
  
!    function Index
!      (Source  : Wide_String;
!       Set     : Wide_Maps.Wide_Character_Set;
!       From    : Positive;
!       Test    : Membership := Inside;
!       Going   : Direction := Forward) return Natural;
  
!    function Index_Non_Blank
!      (Source : Wide_String;
!       Going  : Direction := Forward) return Natural;
! 
!    function Index_Non_Blank
!      (Source : Wide_String;
!       From   : Positive;
!       Going  : Direction := Forward) return Natural;
! 
!    function Count
!      (Source  : Wide_String;
!       Pattern : Wide_String;
!       Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
        return Natural;
  
+    function Count
+      (Source  : Wide_String;
+       Pattern : Wide_String;
+       Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural;
  
!    function Count
!      (Source : Wide_String;
!       Set    : Wide_Maps.Wide_Character_Set) return Natural;
! 
!    procedure Find_Token
!      (Source : Wide_String;
!       Set    : Wide_Maps.Wide_Character_Set;
!       Test   : Membership;
!       First  : out Positive;
!       Last   : out Natural);
  
  end Ada.Strings.Wide_Search;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-stwisu.adb gcc-4.0.0/gcc/ada/a-stwisu.adb
*** gcc-3.4.3/gcc/ada/a-stwisu.adb	Tue Oct 21 13:41:54 2003
--- gcc-4.0.0/gcc/ada/a-stwisu.adb	Thu Feb 10 13:50:15 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2003 Free Software Foundation, Inc.               --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2003-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Ada.Strings.Wide_Superbound
*** 42,49 ****
  
     function Concat
       (Left  : Super_String;
!       Right : Super_String)
!       return  Super_String
     is
        Result : Super_String (Left.Max_Length);
        Llen   : constant Natural := Left.Current_Length;
--- 42,48 ----
  
     function Concat
       (Left  : Super_String;
!       Right : Super_String) return Super_String
     is
        Result : Super_String (Left.Max_Length);
        Llen   : constant Natural := Left.Current_Length;
*************** package body Ada.Strings.Wide_Superbound
*** 64,71 ****
  
     function Concat
       (Left  : Super_String;
!       Right : Wide_String)
!       return  Super_String
     is
        Result : Super_String (Left.Max_Length);
        Llen   : constant Natural := Left.Current_Length;
--- 63,69 ----
  
     function Concat
       (Left  : Super_String;
!       Right : Wide_String) return Super_String
     is
        Result : Super_String (Left.Max_Length);
        Llen   : constant Natural := Left.Current_Length;
*************** package body Ada.Strings.Wide_Superbound
*** 85,92 ****
  
     function Concat
       (Left  : Wide_String;
!       Right : Super_String)
!       return  Super_String
     is
        Result : Super_String (Right.Max_Length);
        Llen   : constant Natural := Left'Length;
--- 83,89 ----
  
     function Concat
       (Left  : Wide_String;
!       Right : Super_String) return Super_String
     is
        Result : Super_String (Right.Max_Length);
        Llen   : constant Natural := Left'Length;
*************** package body Ada.Strings.Wide_Superbound
*** 107,114 ****
  
     function Concat
       (Left  : Super_String;
!       Right : Wide_Character)
!       return  Super_String
     is
        Result : Super_String (Left.Max_Length);
        Llen   : constant Natural := Left.Current_Length;
--- 104,110 ----
  
     function Concat
       (Left  : Super_String;
!       Right : Wide_Character) return Super_String
     is
        Result : Super_String (Left.Max_Length);
        Llen   : constant Natural := Left.Current_Length;
*************** package body Ada.Strings.Wide_Superbound
*** 127,134 ****
  
     function Concat
       (Left  : Wide_Character;
!       Right : Super_String)
!       return  Super_String
     is
        Result : Super_String (Right.Max_Length);
        Rlen   : constant Natural := Right.Current_Length;
--- 123,129 ----
  
     function Concat
       (Left  : Wide_Character;
!       Right : Super_String) return Super_String
     is
        Result : Super_String (Right.Max_Length);
        Rlen   : constant Natural := Right.Current_Length;
*************** package body Ada.Strings.Wide_Superbound
*** 149,170 ****
     -- Equal --
     -----------
  
!    function "=" (Left, Right : Super_String) return Boolean is
     begin
        return Left.Current_Length = Right.Current_Length
          and then Left.Data (1 .. Left.Current_Length) =
                     Right.Data (1 .. Right.Current_Length);
     end "=";
  
!    function Equal (Left : Super_String; Right : Wide_String)
!                    return Boolean is
     begin
        return Left.Current_Length = Right'Length
          and then Left.Data (1 .. Left.Current_Length) = Right;
     end Equal;
  
!    function Equal (Left : Wide_String; Right : Super_String)
!                    return Boolean is
     begin
        return Left'Length = Right.Current_Length
          and then Left = Right.Data (1 .. Right.Current_Length);
--- 144,172 ----
     -- Equal --
     -----------
  
!    function "="
!      (Left  : Super_String;
!       Right : Super_String) return Boolean
!    is
     begin
        return Left.Current_Length = Right.Current_Length
          and then Left.Data (1 .. Left.Current_Length) =
                     Right.Data (1 .. Right.Current_Length);
     end "=";
  
!    function Equal
!      (Left  : Super_String;
!       Right : Wide_String) return Boolean
!    is
     begin
        return Left.Current_Length = Right'Length
          and then Left.Data (1 .. Left.Current_Length) = Right;
     end Equal;
  
!    function Equal
!      (Left  : Wide_String;
!       Right : Super_String) return Boolean
!    is
     begin
        return Left'Length = Right.Current_Length
          and then Left = Right.Data (1 .. Right.Current_Length);
*************** package body Ada.Strings.Wide_Superbound
*** 174,180 ****
     -- Greater --
     -------------
  
!    function Greater (Left, Right : Super_String) return Boolean is
     begin
        return Left.Data (1 .. Left.Current_Length) >
                 Right.Data (1 .. Right.Current_Length);
--- 176,185 ----
     -- Greater --
     -------------
  
!    function Greater
!      (Left  : Super_String;
!       Right : Super_String) return Boolean
!    is
     begin
        return Left.Data (1 .. Left.Current_Length) >
                 Right.Data (1 .. Right.Current_Length);
*************** package body Ada.Strings.Wide_Superbound
*** 182,189 ****
  
     function Greater
       (Left  : Super_String;
!       Right : Wide_String)
!       return  Boolean
     is
     begin
        return Left.Data (1 .. Left.Current_Length) > Right;
--- 187,193 ----
  
     function Greater
       (Left  : Super_String;
!       Right : Wide_String) return Boolean
     is
     begin
        return Left.Data (1 .. Left.Current_Length) > Right;
*************** package body Ada.Strings.Wide_Superbound
*** 191,198 ****
  
     function Greater
       (Left  : Wide_String;
!       Right : Super_String)
!       return  Boolean
     is
     begin
        return Left > Right.Data (1 .. Right.Current_Length);
--- 195,201 ----
  
     function Greater
       (Left  : Wide_String;
!       Right : Super_String) return Boolean
     is
     begin
        return Left > Right.Data (1 .. Right.Current_Length);
*************** package body Ada.Strings.Wide_Superbound
*** 202,208 ****
     -- Greater_Or_Equal --
     ----------------------
  
!    function Greater_Or_Equal (Left, Right : Super_String) return Boolean is
     begin
        return Left.Data (1 .. Left.Current_Length) >=
                 Right.Data (1 .. Right.Current_Length);
--- 205,214 ----
     -- Greater_Or_Equal --
     ----------------------
  
!    function Greater_Or_Equal
!      (Left  : Super_String;
!       Right : Super_String) return Boolean
!    is
     begin
        return Left.Data (1 .. Left.Current_Length) >=
                 Right.Data (1 .. Right.Current_Length);
*************** package body Ada.Strings.Wide_Superbound
*** 210,217 ****
  
     function Greater_Or_Equal
       (Left  : Super_String;
!       Right : Wide_String)
!       return  Boolean
     is
     begin
        return Left.Data (1 .. Left.Current_Length) >= Right;
--- 216,222 ----
  
     function Greater_Or_Equal
       (Left  : Super_String;
!       Right : Wide_String) return Boolean
     is
     begin
        return Left.Data (1 .. Left.Current_Length) >= Right;
*************** package body Ada.Strings.Wide_Superbound
*** 219,226 ****
  
     function Greater_Or_Equal
       (Left  : Wide_String;
!       Right : Super_String)
!       return  Boolean
     is
     begin
        return Left >= Right.Data (1 .. Right.Current_Length);
--- 224,230 ----
  
     function Greater_Or_Equal
       (Left  : Wide_String;
!       Right : Super_String) return Boolean
     is
     begin
        return Left >= Right.Data (1 .. Right.Current_Length);
*************** package body Ada.Strings.Wide_Superbound
*** 230,236 ****
     -- Less --
     ----------
  
!    function Less (Left, Right : Super_String) return Boolean is
     begin
        return Left.Data (1 .. Left.Current_Length) <
                 Right.Data (1 .. Right.Current_Length);
--- 234,243 ----
     -- Less --
     ----------
  
!    function Less
!      (Left  : Super_String;
!       Right : Super_String) return Boolean
!    is
     begin
        return Left.Data (1 .. Left.Current_Length) <
                 Right.Data (1 .. Right.Current_Length);
*************** package body Ada.Strings.Wide_Superbound
*** 238,245 ****
  
     function Less
       (Left  : Super_String;
!       Right : Wide_String)
!       return  Boolean
     is
     begin
        return Left.Data (1 .. Left.Current_Length) < Right;
--- 245,251 ----
  
     function Less
       (Left  : Super_String;
!       Right : Wide_String) return Boolean
     is
     begin
        return Left.Data (1 .. Left.Current_Length) < Right;
*************** package body Ada.Strings.Wide_Superbound
*** 247,254 ****
  
     function Less
       (Left  : Wide_String;
!       Right : Super_String)
!       return  Boolean
     is
     begin
        return Left < Right.Data (1 .. Right.Current_Length);
--- 253,259 ----
  
     function Less
       (Left  : Wide_String;
!       Right : Super_String) return Boolean
     is
     begin
        return Left < Right.Data (1 .. Right.Current_Length);
*************** package body Ada.Strings.Wide_Superbound
*** 258,264 ****
     -- Less_Or_Equal --
     -------------------
  
!    function Less_Or_Equal (Left, Right : Super_String) return Boolean is
     begin
        return Left.Data (1 .. Left.Current_Length) <=
                 Right.Data (1 .. Right.Current_Length);
--- 263,272 ----
     -- Less_Or_Equal --
     -------------------
  
!    function Less_Or_Equal
!      (Left  : Super_String;
!       Right : Super_String) return Boolean
!    is
     begin
        return Left.Data (1 .. Left.Current_Length) <=
                 Right.Data (1 .. Right.Current_Length);
*************** package body Ada.Strings.Wide_Superbound
*** 266,273 ****
  
     function Less_Or_Equal
       (Left  : Super_String;
!       Right : Wide_String)
!       return  Boolean
     is
     begin
        return Left.Data (1 .. Left.Current_Length) <= Right;
--- 274,280 ----
  
     function Less_Or_Equal
       (Left  : Super_String;
!       Right : Wide_String) return Boolean
     is
     begin
        return Left.Data (1 .. Left.Current_Length) <= Right;
*************** package body Ada.Strings.Wide_Superbound
*** 275,287 ****
  
     function Less_Or_Equal
       (Left  : Wide_String;
!       Right : Super_String)
!       return  Boolean
     is
     begin
        return Left <= Right.Data (1 .. Right.Current_Length);
     end Less_Or_Equal;
  
     ------------------
     -- Super_Append --
     ------------------
--- 282,328 ----
  
     function Less_Or_Equal
       (Left  : Wide_String;
!       Right : Super_String) return Boolean
     is
     begin
        return Left <= Right.Data (1 .. Right.Current_Length);
     end Less_Or_Equal;
  
+    ----------------------
+    -- Set_Super_String --
+    ----------------------
+ 
+    procedure Set_Super_String
+      (Target : out Super_String;
+       Source : Wide_String;
+       Drop   : Truncation := Error)
+    is
+       Slen       : constant Natural := Source'Length;
+       Max_Length : constant Positive := Target.Max_Length;
+ 
+    begin
+       if Slen <= Max_Length then
+          Target.Current_Length := Slen;
+          Target.Data (1 .. Slen) := Source;
+ 
+       else
+          case Drop is
+             when Strings.Right =>
+                Target.Current_Length := Max_Length;
+                Target.Data (1 .. Max_Length) :=
+                  Source (Source'First .. Source'First - 1 + Max_Length);
+ 
+             when Strings.Left =>
+                Target.Current_Length := Max_Length;
+                Target.Data (1 .. Max_Length) :=
+                  Source (Source'Last - (Max_Length - 1) .. Source'Last);
+ 
+             when Strings.Error =>
+                raise Ada.Strings.Length_Error;
+          end case;
+       end if;
+    end Set_Super_String;
+ 
     ------------------
     -- Super_Append --
     ------------------
*************** package body Ada.Strings.Wide_Superbound
*** 289,297 ****
     --  Case of Super_String and Super_String
  
     function Super_Append
!      (Left, Right : Super_String;
!       Drop        : Strings.Truncation  := Strings.Error)
!       return        Super_String
     is
        Max_Length : constant Positive := Left.Max_Length;
        Result : Super_String (Max_Length);
--- 330,338 ----
     --  Case of Super_String and Super_String
  
     function Super_Append
!      (Left  : Super_String;
!       Right : Super_String;
!       Drop  : Strings.Truncation  := Strings.Error) return Super_String
     is
        Max_Length : constant Positive := Left.Max_Length;
        Result : Super_String (Max_Length);
*************** package body Ada.Strings.Wide_Superbound
*** 386,393 ****
     function Super_Append
       (Left  : Super_String;
        Right : Wide_String;
!       Drop  : Strings.Truncation := Strings.Error)
!       return  Super_String
     is
        Max_Length : constant Positive := Left.Max_Length;
        Result : Super_String (Max_Length);
--- 427,433 ----
     function Super_Append
       (Left  : Super_String;
        Right : Wide_String;
!       Drop  : Strings.Truncation := Strings.Error) return Super_String
     is
        Max_Length : constant Positive := Left.Max_Length;
        Result : Super_String (Max_Length);
*************** package body Ada.Strings.Wide_Superbound
*** 488,495 ****
     function Super_Append
       (Left  : Wide_String;
        Right : Super_String;
!       Drop  : Strings.Truncation := Strings.Error)
!       return  Super_String
     is
        Max_Length : constant Positive := Right.Max_Length;
        Result     : Super_String (Max_Length);
--- 528,534 ----
     function Super_Append
       (Left  : Wide_String;
        Right : Super_String;
!       Drop  : Strings.Truncation := Strings.Error) return Super_String
     is
        Max_Length : constant Positive := Right.Max_Length;
        Result     : Super_String (Max_Length);
*************** package body Ada.Strings.Wide_Superbound
*** 543,550 ****
     function Super_Append
       (Left  : Super_String;
        Right : Wide_Character;
!       Drop  : Strings.Truncation := Strings.Error)
!       return  Super_String
     is
        Max_Length : constant Positive := Left.Max_Length;
        Result     : Super_String (Max_Length);
--- 582,588 ----
     function Super_Append
       (Left  : Super_String;
        Right : Wide_Character;
!       Drop  : Strings.Truncation := Strings.Error) return Super_String
     is
        Max_Length : constant Positive := Left.Max_Length;
        Result     : Super_String (Max_Length);
*************** package body Ada.Strings.Wide_Superbound
*** 612,619 ****
     function Super_Append
       (Left  : Wide_Character;
        Right : Super_String;
!       Drop  : Strings.Truncation := Strings.Error)
!       return  Super_String
     is
        Max_Length : constant Positive := Right.Max_Length;
        Result : Super_String (Max_Length);
--- 650,656 ----
     function Super_Append
       (Left  : Wide_Character;
        Right : Super_String;
!       Drop  : Strings.Truncation := Strings.Error) return Super_String
     is
        Max_Length : constant Positive := Right.Max_Length;
        Result : Super_String (Max_Length);
*************** package body Ada.Strings.Wide_Superbound
*** 649,658 ****
     -----------------
  
     function Super_Count
!      (Source   : Super_String;
!       Pattern  : Wide_String;
!       Mapping  : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
!       return     Natural
     is
     begin
        return
--- 686,695 ----
     -----------------
  
     function Super_Count
!      (Source  : Super_String;
!       Pattern : Wide_String;
!       Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
!       return Natural
     is
     begin
        return
*************** package body Ada.Strings.Wide_Superbound
*** 661,670 ****
     end Super_Count;
  
     function Super_Count
!      (Source   : Super_String;
!       Pattern  : Wide_String;
!       Mapping  : Wide_Maps.Wide_Character_Mapping_Function)
!       return     Natural
     is
     begin
        return
--- 698,706 ----
     end Super_Count;
  
     function Super_Count
!      (Source  : Super_String;
!       Pattern : Wide_String;
!       Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural
     is
     begin
        return
*************** package body Ada.Strings.Wide_Superbound
*** 674,681 ****
  
     function Super_Count
       (Source : Super_String;
!       Set    : Wide_Maps.Wide_Character_Set)
!       return   Natural
     is
     begin
        return Wide_Search.Count (Source.Data (1 .. Source.Current_Length), Set);
--- 710,716 ----
  
     function Super_Count
       (Source : Super_String;
!       Set    : Wide_Maps.Wide_Character_Set) return Natural
     is
     begin
        return Wide_Search.Count (Source.Data (1 .. Source.Current_Length), Set);
*************** package body Ada.Strings.Wide_Superbound
*** 688,695 ****
     function Super_Delete
       (Source  : Super_String;
        From    : Positive;
!       Through : Natural)
!       return    Super_String
     is
        Result     : Super_String (Source.Max_Length);
        Slen       : constant Natural := Source.Current_Length;
--- 723,729 ----
     function Super_Delete
       (Source  : Super_String;
        From    : Positive;
!       Through : Natural) return Super_String
     is
        Result     : Super_String (Source.Max_Length);
        Slen       : constant Natural := Source.Current_Length;
*************** package body Ada.Strings.Wide_Superbound
*** 747,754 ****
  
     function Super_Element
       (Source : Super_String;
!       Index  : Positive)
!       return   Wide_Character
     is
     begin
        if Index in 1 .. Source.Current_Length then
--- 781,787 ----
  
     function Super_Element
       (Source : Super_String;
!       Index  : Positive) return Wide_Character
     is
     begin
        if Index in 1 .. Source.Current_Length then
*************** package body Ada.Strings.Wide_Superbound
*** 782,789 ****
       (Source : Super_String;
        Count  : Natural;
        Pad    : Wide_Character := Wide_Space;
!       Drop   : Strings.Truncation := Strings.Error)
!       return   Super_String
     is
        Max_Length : constant Positive := Source.Max_Length;
        Result     : Super_String (Max_Length);
--- 815,821 ----
       (Source : Super_String;
        Count  : Natural;
        Pad    : Wide_Character := Wide_Space;
!       Drop   : Strings.Truncation := Strings.Error) return Super_String
     is
        Max_Length : constant Positive := Source.Max_Length;
        Result     : Super_String (Max_Length);
*************** package body Ada.Strings.Wide_Superbound
*** 830,836 ****
     procedure Super_Head
       (Source : in out Super_String;
        Count  : Natural;
!       Pad    : Wide_Character  := Wide_Space;
        Drop   : Truncation := Error)
     is
        Max_Length : constant Positive := Source.Max_Length;
--- 862,868 ----
     procedure Super_Head
       (Source : in out Super_String;
        Count  : Natural;
!       Pad    : Wide_Character := Wide_Space;
        Drop   : Truncation := Error)
     is
        Max_Length : constant Positive := Source.Max_Length;
*************** package body Ada.Strings.Wide_Superbound
*** 878,888 ****
     -----------------
  
     function Super_Index
!      (Source   : Super_String;
!       Pattern  : Wide_String;
!       Going    : Strings.Direction := Strings.Forward;
!       Mapping  : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
!       return     Natural
     is
     begin
        return Wide_Search.Index
--- 910,920 ----
     -----------------
  
     function Super_Index
!      (Source  : Super_String;
!       Pattern : Wide_String;
!       Going   : Strings.Direction := Strings.Forward;
!       Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
!       return Natural
     is
     begin
        return Wide_Search.Index
*************** package body Ada.Strings.Wide_Superbound
*** 890,900 ****
     end Super_Index;
  
     function Super_Index
!      (Source   : Super_String;
!       Pattern  : Wide_String;
!       Going    : Direction := Forward;
!       Mapping  : Wide_Maps.Wide_Character_Mapping_Function)
!       return     Natural
     is
     begin
        return Wide_Search.Index
--- 922,931 ----
     end Super_Index;
  
     function Super_Index
!      (Source  : Super_String;
!       Pattern : Wide_String;
!       Going   : Direction := Forward;
!       Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural
     is
     begin
        return Wide_Search.Index
*************** package body Ada.Strings.Wide_Superbound
*** 905,926 ****
       (Source : Super_String;
        Set    : Wide_Maps.Wide_Character_Set;
        Test   : Strings.Membership := Strings.Inside;
!       Going  : Strings.Direction  := Strings.Forward)
!       return   Natural
     is
     begin
        return Wide_Search.Index
          (Source.Data (1 .. Source.Current_Length), Set, Test, Going);
     end Super_Index;
  
     ---------------------------
     -- Super_Index_Non_Blank --
     ---------------------------
  
     function Super_Index_Non_Blank
       (Source : Super_String;
!       Going  : Strings.Direction := Strings.Forward)
!       return   Natural
     is
     begin
        return
--- 936,994 ----
       (Source : Super_String;
        Set    : Wide_Maps.Wide_Character_Set;
        Test   : Strings.Membership := Strings.Inside;
!       Going  : Strings.Direction  := Strings.Forward) return Natural
     is
     begin
        return Wide_Search.Index
          (Source.Data (1 .. Source.Current_Length), Set, Test, Going);
     end Super_Index;
  
+    function Super_Index
+      (Source  : Super_String;
+       Pattern : Wide_String;
+       From    : Positive;
+       Going   : Direction := Forward;
+       Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
+       return Natural
+    is
+    begin
+       return Wide_Search.Index
+         (Source.Data (1 .. Source.Current_Length),
+          Pattern, From, Going, Mapping);
+    end Super_Index;
+ 
+    function Super_Index
+      (Source  : Super_String;
+       Pattern : Wide_String;
+       From    : Positive;
+       Going   : Direction := Forward;
+       Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural
+    is
+    begin
+       return Wide_Search.Index
+         (Source.Data (1 .. Source.Current_Length),
+          Pattern, From, Going, Mapping);
+    end Super_Index;
+ 
+    function Super_Index
+      (Source : Super_String;
+       Set    : Wide_Maps.Wide_Character_Set;
+       From   : Positive;
+       Test   : Membership := Inside;
+       Going  : Direction := Forward) return Natural
+    is
+    begin
+       return Wide_Search.Index
+         (Source.Data (1 .. Source.Current_Length), Set, From, Test, Going);
+    end Super_Index;
+ 
     ---------------------------
     -- Super_Index_Non_Blank --
     ---------------------------
  
     function Super_Index_Non_Blank
       (Source : Super_String;
!       Going  : Strings.Direction := Strings.Forward) return Natural
     is
     begin
        return
*************** package body Ada.Strings.Wide_Superbound
*** 928,933 ****
--- 996,1012 ----
            (Source.Data (1 .. Source.Current_Length), Going);
     end Super_Index_Non_Blank;
  
+    function Super_Index_Non_Blank
+      (Source : Super_String;
+       From   : Positive;
+       Going  : Direction := Forward) return Natural
+    is
+    begin
+       return
+         Wide_Search.Index_Non_Blank
+           (Source.Data (1 .. Source.Current_Length), From, Going);
+    end Super_Index_Non_Blank;
+ 
     ------------------
     -- Super_Insert --
     ------------------
*************** package body Ada.Strings.Wide_Superbound
*** 936,943 ****
       (Source   : Super_String;
        Before   : Positive;
        New_Item : Wide_String;
!       Drop     : Strings.Truncation := Strings.Error)
!       return     Super_String
     is
        Max_Length : constant Positive := Source.Max_Length;
        Result     : Super_String (Max_Length);
--- 1015,1021 ----
       (Source   : Super_String;
        Before   : Positive;
        New_Item : Wide_String;
!       Drop     : Strings.Truncation := Strings.Error) return Super_String
     is
        Max_Length : constant Positive := Source.Max_Length;
        Result     : Super_String (Max_Length);
*************** package body Ada.Strings.Wide_Superbound
*** 948,956 ****
        Alen       : constant Integer := Slen - Blen;
        Droplen    : constant Integer := Tlen - Max_Length;
  
!       --  Tlen is the length of the total Wide_String before possible
!       --  truncation. Blen, Alen are the lengths of the before and after
!       --  pieces of the source Wide_String.
  
     begin
        if Alen < 0 then
--- 1026,1034 ----
        Alen       : constant Integer := Slen - Blen;
        Droplen    : constant Integer := Tlen - Max_Length;
  
!       --  Tlen is the length of the total string before possible truncation.
!       --  Blen, Alen are the lengths of the before and after pieces of the
!       --  source string.
  
     begin
        if Alen < 0 then
*************** package body Ada.Strings.Wide_Superbound
*** 1032,1042 ****
     ---------------------
  
     function Super_Overwrite
!      (Source    : Super_String;
!       Position  : Positive;
!       New_Item  : Wide_String;
!       Drop      : Strings.Truncation := Strings.Error)
!       return      Super_String
     is
        Max_Length : constant Positive := Source.Max_Length;
        Result     : Super_String (Max_Length);
--- 1110,1119 ----
     ---------------------
  
     function Super_Overwrite
!      (Source   : Super_String;
!       Position : Positive;
!       New_Item : Wide_String;
!       Drop     : Strings.Truncation := Strings.Error) return Super_String
     is
        Max_Length : constant Positive := Source.Max_Length;
        Result     : Super_String (Max_Length);
*************** package body Ada.Strings.Wide_Superbound
*** 1172,1183 ****
     -------------------------
  
     function Super_Replace_Slice
!      (Source   : Super_String;
!       Low      : Positive;
!       High     : Natural;
!       By       : Wide_String;
!       Drop     : Strings.Truncation := Strings.Error)
!       return     Super_String
     is
        Max_Length : constant Positive := Source.Max_Length;
        Slen       : constant Natural  := Source.Current_Length;
--- 1249,1259 ----
     -------------------------
  
     function Super_Replace_Slice
!      (Source : Super_String;
!       Low    : Positive;
!       High   : Natural;
!       By     : Wide_String;
!       Drop   : Strings.Truncation := Strings.Error) return Super_String
     is
        Max_Length : constant Positive := Source.Max_Length;
        Slen       : constant Natural  := Source.Current_Length;
*************** package body Ada.Strings.Wide_Superbound
*** 1197,1206 ****
              Droplen : constant Integer := Tlen - Max_Length;
              Result  : Super_String (Max_Length);
  
!             --  Tlen is the total length of the result Wide_String before any
              --  truncation. Blen and Alen are the lengths of the pieces
!             --  of the original Wide_String that end up in the result
!             --  Wide_String before and after the replaced slice.
  
           begin
              if Droplen <= 0 then
--- 1273,1282 ----
              Droplen : constant Integer := Tlen - Max_Length;
              Result  : Super_String (Max_Length);
  
!             --  Tlen is the total length of the result string before any
              --  truncation. Blen and Alen are the lengths of the pieces
!             --  of the original string that end up in the result string
!             --  before and after the replaced slice.
  
           begin
              if Droplen <= 0 then
*************** package body Ada.Strings.Wide_Superbound
*** 1273,1280 ****
       (Count      : Natural;
        Item       : Wide_Character;
        Drop       : Truncation := Error;
!       Max_Length : Positive)
!       return       Super_String
     is
        Result : Super_String (Max_Length);
  
--- 1349,1355 ----
       (Count      : Natural;
        Item       : Wide_Character;
        Drop       : Truncation := Error;
!       Max_Length : Positive) return Super_String
     is
        Result : Super_String (Max_Length);
  
*************** package body Ada.Strings.Wide_Superbound
*** 1297,1304 ****
       (Count      : Natural;
        Item       : Wide_String;
        Drop       : Truncation := Error;
!       Max_Length : Positive)
!       return       Super_String
     is
        Length : constant Integer := Count * Item'Length;
        Result : Super_String (Max_Length);
--- 1372,1378 ----
       (Count      : Natural;
        Item       : Wide_String;
        Drop       : Truncation := Error;
!       Max_Length : Positive) return Super_String
     is
        Length : constant Integer := Count * Item'Length;
        Result : Super_String (Max_Length);
*************** package body Ada.Strings.Wide_Superbound
*** 1354,1361 ****
     function Super_Replicate
       (Count : Natural;
        Item  : Super_String;
!       Drop  : Strings.Truncation := Strings.Error)
!       return  Super_String
     is
     begin
        return
--- 1428,1434 ----
     function Super_Replicate
       (Count : Natural;
        Item  : Super_String;
!       Drop  : Strings.Truncation := Strings.Error) return Super_String
     is
     begin
        return
*************** package body Ada.Strings.Wide_Superbound
*** 1373,1380 ****
     function Super_Slice
       (Source : Super_String;
        Low    : Positive;
!       High   : Natural)
!       return   Wide_String
     is
     begin
        --  Note: test of High > Length is in accordance with AI95-00128
--- 1446,1452 ----
     function Super_Slice
       (Source : Super_String;
        Low    : Positive;
!       High   : Natural) return Wide_String
     is
     begin
        --  Note: test of High > Length is in accordance with AI95-00128
*************** package body Ada.Strings.Wide_Superbound
*** 1388,1393 ****
--- 1460,1502 ----
        end if;
     end Super_Slice;
  
+    function Super_Slice
+      (Source : Super_String;
+       Low    : Positive;
+       High   : Natural) return Super_String
+    is
+       Result : Super_String (Source.Max_Length);
+ 
+    begin
+       if Low > Source.Current_Length + 1
+         or else High > Source.Current_Length
+       then
+          raise Index_Error;
+       else
+          Result.Current_Length := High - Low + 1;
+          Result.Data (1 .. Source.Current_Length) := Source.Data (Low .. High);
+       end if;
+ 
+       return Result;
+    end Super_Slice;
+ 
+    procedure Super_Slice
+      (Source : Super_String;
+       Target : out Super_String;
+       Low    : Positive;
+       High   : Natural)
+    is
+    begin
+       if Low > Source.Current_Length + 1
+         or else High > Source.Current_Length
+       then
+          raise Index_Error;
+       else
+          Target.Current_Length := High - Low + 1;
+          Target.Data (1 .. Source.Current_Length) := Source.Data (Low .. High);
+       end if;
+    end Super_Slice;
+ 
     ----------------
     -- Super_Tail --
     ----------------
*************** package body Ada.Strings.Wide_Superbound
*** 1396,1403 ****
       (Source : Super_String;
        Count  : Natural;
        Pad    : Wide_Character := Wide_Space;
!       Drop   : Strings.Truncation := Strings.Error)
!       return   Super_String
     is
        Max_Length : constant Positive := Source.Max_Length;
        Result     : Super_String (Max_Length);
--- 1505,1511 ----
       (Source : Super_String;
        Count  : Natural;
        Pad    : Wide_Character := Wide_Space;
!       Drop   : Strings.Truncation := Strings.Error) return Super_String
     is
        Max_Length : constant Positive := Source.Max_Length;
        Result     : Super_String (Max_Length);
*************** package body Ada.Strings.Wide_Superbound
*** 1445,1451 ****
     procedure Super_Tail
       (Source : in out Super_String;
        Count  : Natural;
!       Pad    : Wide_Character  := Wide_Space;
        Drop   : Truncation := Error)
     is
        Max_Length : constant Positive := Source.Max_Length;
--- 1553,1559 ----
     procedure Super_Tail
       (Source : in out Super_String;
        Count  : Natural;
!       Pad    : Wide_Character := Wide_Space;
        Drop   : Truncation := Error)
     is
        Max_Length : constant Positive := Source.Max_Length;
*************** package body Ada.Strings.Wide_Superbound
*** 1497,1503 ****
     -- Super_To_String --
     ---------------------
  
!    function Super_To_String (Source : in Super_String) return Wide_String is
     begin
        return Source.Data (1 .. Source.Current_Length);
     end Super_To_String;
--- 1605,1611 ----
     -- Super_To_String --
     ---------------------
  
!    function Super_To_String (Source : Super_String) return Wide_String is
     begin
        return Source.Data (1 .. Source.Current_Length);
     end Super_To_String;
*************** package body Ada.Strings.Wide_Superbound
*** 1508,1515 ****
  
     function Super_Translate
       (Source  : Super_String;
!       Mapping : Wide_Maps.Wide_Character_Mapping)
!       return    Super_String
     is
        Result : Super_String (Source.Max_Length);
  
--- 1616,1622 ----
  
     function Super_Translate
       (Source  : Super_String;
!       Mapping : Wide_Maps.Wide_Character_Mapping) return Super_String
     is
        Result : Super_String (Source.Max_Length);
  
*************** package body Ada.Strings.Wide_Superbound
*** 1535,1542 ****
  
     function Super_Translate
       (Source  : Super_String;
!       Mapping : Wide_Maps.Wide_Character_Mapping_Function)
!       return    Super_String
     is
        Result : Super_String (Source.Max_Length);
  
--- 1642,1648 ----
  
     function Super_Translate
       (Source  : Super_String;
!       Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Super_String
     is
        Result : Super_String (Source.Max_Length);
  
*************** package body Ada.Strings.Wide_Superbound
*** 1566,1573 ****
  
     function Super_Trim
       (Source : Super_String;
!       Side   : Trim_End)
!       return   Super_String
     is
        Result : Super_String (Source.Max_Length);
        Last   : Natural := Source.Current_Length;
--- 1672,1678 ----
  
     function Super_Trim
       (Source : Super_String;
!       Side   : Trim_End) return Super_String
     is
        Result : Super_String (Source.Max_Length);
        Last   : Natural := Source.Current_Length;
*************** package body Ada.Strings.Wide_Superbound
*** 1623,1630 ****
     function Super_Trim
       (Source : Super_String;
        Left   : Wide_Maps.Wide_Character_Set;
!       Right  : Wide_Maps.Wide_Character_Set)
!       return   Super_String
     is
        Result : Super_String (Source.Max_Length);
  
--- 1728,1734 ----
     function Super_Trim
       (Source : Super_String;
        Left   : Wide_Maps.Wide_Character_Set;
!       Right  : Wide_Maps.Wide_Character_Set) return Super_String
     is
        Result : Super_String (Source.Max_Length);
  
*************** package body Ada.Strings.Wide_Superbound
*** 1690,1697 ****
     function Times
       (Left       : Natural;
        Right      : Wide_Character;
!       Max_Length : Positive)
!       return  Super_String
     is
        Result : Super_String (Max_Length);
  
--- 1794,1800 ----
     function Times
       (Left       : Natural;
        Right      : Wide_Character;
!       Max_Length : Positive) return Super_String
     is
        Result : Super_String (Max_Length);
  
*************** package body Ada.Strings.Wide_Superbound
*** 1713,1720 ****
     function Times
       (Left       : Natural;
        Right      : Wide_String;
!       Max_Length : Positive)
!       return  Super_String
     is
        Result : Super_String (Max_Length);
        Pos    : Positive         := 1;
--- 1816,1822 ----
     function Times
       (Left       : Natural;
        Right      : Wide_String;
!       Max_Length : Positive) return Super_String
     is
        Result : Super_String (Max_Length);
        Pos    : Positive         := 1;
*************** package body Ada.Strings.Wide_Superbound
*** 1741,1748 ****
  
     function Times
       (Left  : Natural;
!       Right : Super_String)
!       return  Super_String
     is
        Result : Super_String (Right.Max_Length);
        Pos    : Positive := 1;
--- 1843,1849 ----
  
     function Times
       (Left  : Natural;
!       Right : Super_String) return Super_String
     is
        Result : Super_String (Right.Max_Length);
        Pos    : Positive := 1;
*************** package body Ada.Strings.Wide_Superbound
*** 1775,1782 ****
     function To_Super_String
       (Source     : Wide_String;
        Max_Length : Natural;
!       Drop       : Truncation := Error)
!       return       Super_String
     is
        Result : Super_String (Max_Length);
        Slen   : constant Natural := Source'Length;
--- 1876,1882 ----
     function To_Super_String
       (Source     : Wide_String;
        Max_Length : Natural;
!       Drop       : Truncation := Error) return Super_String
     is
        Result : Super_String (Max_Length);
        Slen   : constant Natural := Source'Length;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-stwisu.ads gcc-4.0.0/gcc/ada/a-stwisu.ads
*** gcc-3.4.3/gcc/ada/a-stwisu.ads	Tue Oct 21 13:41:54 2003
--- gcc-4.0.0/gcc/ada/a-stwisu.ads	Thu Feb 10 13:50:15 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2003 Free Software Foundation, Inc.               --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2003-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 35,41 ****
  --  generic package Ada.Strings.Wide_Bounded.Generic_Bounded_Length.
  
  --  It defines type Super_String as a discriminated record with the maximum
! --  length as the discriminant. Individual instantiations of
  --  Strings.Wide_Bounded.Generic_Bounded_Length use this type with
  --  an appropriate discriminant value set.
  
--- 35,41 ----
  --  generic package Ada.Strings.Wide_Bounded.Generic_Bounded_Length.
  
  --  It defines type Super_String as a discriminated record with the maximum
! --  length as the discriminant. Individual instantiations of the package
  --  Strings.Wide_Bounded.Generic_Bounded_Length use this type with
  --  an appropriate discriminant value set.
  
*************** pragma Preelaborate (Wide_Superbounded);
*** 50,63 ****
        Current_Length : Natural := 0;
        Data           : Wide_String (1 .. Max_Length) := (others => Wide_NUL);
     end record;
!    --  Type Wide_Bounded_String in
!    --  Ada.Strings.Wide_Bounded.Generic_Bounded_Length is derived from this
!    --  type, with the constraint of the maximum length.
  
!    --  The subprograms defined for Super_String are similar to those
!    --  defined for Wide_Bounded_String, except that they have different names,
!    --  so that they can be renamed in
!    --  Ada.Strings.Wide_Bounded.Generic_Bounded_Length.
  
     function Super_Length (Source : Super_String) return Natural;
  
--- 50,61 ----
        Current_Length : Natural := 0;
        Data           : Wide_String (1 .. Max_Length) := (others => Wide_NUL);
     end record;
!    --  Ada.Strings.Wide_Bounded.Generic_Bounded_Length.Wide_Bounded_String is
!    --  derived from this type, with the constraint of the maximum length.
  
!    --  The subprograms defined for Super_String are similar to those defined
!    --  for Bounded_Wide_String, except that they have different names, so that
!    --  they can be renamed in Ada.Strings.Wide_Bounded.Generic_Bounded_Length.
  
     function Super_Length (Source : Super_String) return Natural;
  
*************** pragma Preelaborate (Wide_Superbounded);
*** 68,155 ****
     function To_Super_String
       (Source     : Wide_String;
        Max_Length : Natural;
!       Drop       : Truncation := Error)
!       return       Super_String;
     --  Note the additional parameter Max_Length, which specifies the maximum
     --  length setting of the resulting Super_String value.
  
     --  The following procedures have declarations (and semantics) that are
!    --  exactly analogous to those declared in Ada.Strings.Bounded.
  
     function Super_To_String (Source : Super_String) return Wide_String;
  
     function Super_Append
!      (Left, Right : Super_String;
!       Drop        : Truncation  := Error)
!       return        Super_String;
  
     function Super_Append
       (Left  : Super_String;
        Right : Wide_String;
!       Drop  : Truncation := Error)
!       return  Super_String;
  
     function Super_Append
       (Left  : Wide_String;
        Right : Super_String;
!       Drop  : Truncation := Error)
!       return  Super_String;
  
     function Super_Append
       (Left  : Super_String;
        Right : Wide_Character;
!       Drop  : Truncation := Error)
!       return  Super_String;
  
     function Super_Append
       (Left  : Wide_Character;
        Right : Super_String;
!       Drop  : Truncation := Error)
!       return  Super_String;
  
     procedure Super_Append
       (Source   : in out Super_String;
        New_Item : Super_String;
!       Drop     : Truncation  := Error);
  
     procedure Super_Append
       (Source   : in out Super_String;
        New_Item : Wide_String;
!       Drop     : Truncation  := Error);
  
     procedure Super_Append
       (Source   : in out Super_String;
        New_Item : Wide_Character;
!       Drop     : Truncation  := Error);
  
     function Concat
!      (Left, Right : Super_String)
!       return        Super_String;
  
     function Concat
       (Left  : Super_String;
!       Right : Wide_String)
!       return  Super_String;
  
     function Concat
       (Left  : Wide_String;
!       Right : Super_String)
!       return  Super_String;
  
     function Concat
       (Left  : Super_String;
!       Right : Wide_Character)
!       return  Super_String;
  
     function Concat
       (Left  : Wide_Character;
!       Right : Super_String)
!       return  Super_String;
  
     function Super_Element
       (Source : Super_String;
!       Index  : Positive)
!       return   Wide_Character;
  
     procedure Super_Replace_Element
       (Source : in out Super_String;
--- 66,148 ----
     function To_Super_String
       (Source     : Wide_String;
        Max_Length : Natural;
!       Drop       : Truncation := Error) return Super_String;
     --  Note the additional parameter Max_Length, which specifies the maximum
     --  length setting of the resulting Super_String value.
  
     --  The following procedures have declarations (and semantics) that are
!    --  exactly analogous to those declared in Ada.Strings.Wide_Bounded.
  
     function Super_To_String (Source : Super_String) return Wide_String;
  
+    procedure Set_Super_String
+      (Target : out Super_String;
+       Source : Wide_String;
+       Drop   : Truncation := Error);
+ 
     function Super_Append
!      (Left  : Super_String;
!       Right : Super_String;
!       Drop  : Truncation := Error) return Super_String;
  
     function Super_Append
       (Left  : Super_String;
        Right : Wide_String;
!       Drop  : Truncation := Error) return Super_String;
  
     function Super_Append
       (Left  : Wide_String;
        Right : Super_String;
!       Drop  : Truncation := Error) return Super_String;
  
     function Super_Append
       (Left  : Super_String;
        Right : Wide_Character;
!       Drop  : Truncation := Error) return Super_String;
  
     function Super_Append
       (Left  : Wide_Character;
        Right : Super_String;
!       Drop  : Truncation := Error) return Super_String;
  
     procedure Super_Append
       (Source   : in out Super_String;
        New_Item : Super_String;
!       Drop     : Truncation := Error);
  
     procedure Super_Append
       (Source   : in out Super_String;
        New_Item : Wide_String;
!       Drop     : Truncation := Error);
  
     procedure Super_Append
       (Source   : in out Super_String;
        New_Item : Wide_Character;
!       Drop     : Truncation := Error);
  
     function Concat
!      (Left  : Super_String;
!       Right : Super_String) return Super_String;
  
     function Concat
       (Left  : Super_String;
!       Right : Wide_String) return Super_String;
  
     function Concat
       (Left  : Wide_String;
!       Right : Super_String) return Super_String;
  
     function Concat
       (Left  : Super_String;
!       Right : Wide_Character) return Super_String;
  
     function Concat
       (Left  : Wide_Character;
!       Right : Super_String) return Super_String;
  
     function Super_Element
       (Source : Super_String;
!       Index  : Positive) return Wide_Character;
  
     procedure Super_Replace_Element
       (Source : in out Super_String;
*************** pragma Preelaborate (Wide_Superbounded);
*** 159,228 ****
     function Super_Slice
       (Source : Super_String;
        Low    : Positive;
!       High   : Natural)
!       return   Wide_String;
  
!    function "="  (Left, Right : Super_String) return Boolean;
  
!    function Equal (Left, Right : Super_String) return Boolean renames "=";
  
     function Equal
       (Left  : Super_String;
!       Right : Wide_String)
!       return  Boolean;
  
     function Equal
       (Left  : Wide_String;
!       Right : Super_String)
!       return  Boolean;
  
!    function Less (Left, Right : Super_String) return Boolean;
  
     function Less
       (Left  : Super_String;
!       Right : Wide_String)
!       return  Boolean;
  
     function Less
       (Left  : Wide_String;
!       Right : Super_String)
!       return  Boolean;
  
!    function Less_Or_Equal (Left, Right : Super_String) return Boolean;
  
     function Less_Or_Equal
       (Left  : Super_String;
!       Right : Wide_String)
!       return  Boolean;
  
     function Less_Or_Equal
       (Left  : Wide_String;
!       Right : Super_String)
!       return  Boolean;
  
!    function Greater  (Left, Right : Super_String) return Boolean;
  
     function Greater
       (Left  : Super_String;
!       Right : Wide_String)
!       return  Boolean;
  
     function Greater
       (Left  : Wide_String;
!       Right : Super_String)
!       return  Boolean;
  
!    function Greater_Or_Equal (Left, Right : Super_String) return Boolean;
  
     function Greater_Or_Equal
       (Left  : Super_String;
!       Right : Wide_String)
!       return  Boolean;
  
     function Greater_Or_Equal
       (Left  : Wide_String;
!       Right : Super_String)
!       return  Boolean;
  
     ----------------------
     -- Search Functions --
--- 152,233 ----
     function Super_Slice
       (Source : Super_String;
        Low    : Positive;
!       High   : Natural) return Wide_String;
  
!    function Super_Slice
!      (Source : Super_String;
!       Low    : Positive;
!       High   : Natural) return Super_String;
  
!    procedure Super_Slice
!      (Source : Super_String;
!       Target : out Super_String;
!       Low    : Positive;
!       High   : Natural);
! 
!    function "="
!      (Left  : Super_String;
!       Right : Super_String) return Boolean;
  
     function Equal
       (Left  : Super_String;
!       Right : Super_String) return Boolean renames "=";
! 
!    function Equal
!      (Left  : Super_String;
!       Right : Wide_String) return Boolean;
  
     function Equal
       (Left  : Wide_String;
!       Right : Super_String) return Boolean;
  
!    function Less
!      (Left  : Super_String;
!       Right : Super_String) return Boolean;
  
     function Less
       (Left  : Super_String;
!       Right : Wide_String) return Boolean;
  
     function Less
       (Left  : Wide_String;
!       Right : Super_String) return Boolean;
  
!    function Less_Or_Equal
!      (Left  : Super_String;
!       Right : Super_String) return Boolean;
  
     function Less_Or_Equal
       (Left  : Super_String;
!       Right : Wide_String) return Boolean;
  
     function Less_Or_Equal
       (Left  : Wide_String;
!       Right : Super_String) return Boolean;
  
!    function Greater
!      (Left  : Super_String;
!       Right : Super_String) return Boolean;
  
     function Greater
       (Left  : Super_String;
!       Right : Wide_String) return Boolean;
  
     function Greater
       (Left  : Wide_String;
!       Right : Super_String) return Boolean;
  
!    function Greater_Or_Equal
!      (Left  : Super_String;
!       Right : Super_String) return Boolean;
  
     function Greater_Or_Equal
       (Left  : Super_String;
!       Right : Wide_String) return Boolean;
  
     function Greater_Or_Equal
       (Left  : Wide_String;
!       Right : Super_String) return Boolean;
  
     ----------------------
     -- Search Functions --
*************** pragma Preelaborate (Wide_Superbounded);
*** 233,275 ****
        Pattern : Wide_String;
        Going   : Direction := Forward;
        Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
!       return    Natural;
  
     function Super_Index
       (Source  : Super_String;
        Pattern : Wide_String;
        Going   : Direction := Forward;
!       Mapping : Wide_Maps.Wide_Character_Mapping_Function)
!       return    Natural;
  
     function Super_Index
       (Source : Super_String;
        Set    : Wide_Maps.Wide_Character_Set;
        Test   : Membership := Inside;
!       Going  : Direction  := Forward)
!       return   Natural;
  
     function Super_Index_Non_Blank
       (Source : Super_String;
!       Going  : Direction := Forward)
!       return   Natural;
  
     function Super_Count
       (Source  : Super_String;
        Pattern : Wide_String;
        Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
!       return    Natural;
  
     function Super_Count
       (Source  : Super_String;
        Pattern : Wide_String;
!       Mapping : Wide_Maps.Wide_Character_Mapping_Function)
!       return    Natural;
  
     function Super_Count
       (Source : Super_String;
!       Set    : Wide_Maps.Wide_Character_Set)
!       return   Natural;
  
     procedure Super_Find_Token
       (Source : Super_String;
--- 238,302 ----
        Pattern : Wide_String;
        Going   : Direction := Forward;
        Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
!       return Natural;
  
     function Super_Index
       (Source  : Super_String;
        Pattern : Wide_String;
        Going   : Direction := Forward;
!       Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural;
  
     function Super_Index
       (Source : Super_String;
        Set    : Wide_Maps.Wide_Character_Set;
        Test   : Membership := Inside;
!       Going  : Direction  := Forward) return Natural;
! 
!    function Super_Index
!      (Source  : Super_String;
!       Pattern : Wide_String;
!       From    : Positive;
!       Going   : Direction := Forward;
!       Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
!       return Natural;
! 
!    function Super_Index
!      (Source  : Super_String;
!       Pattern : Wide_String;
!       From    : Positive;
!       Going   : Direction := Forward;
!       Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural;
! 
!    function Super_Index
!      (Source : Super_String;
!       Set    : Wide_Maps.Wide_Character_Set;
!       From   : Positive;
!       Test   : Membership := Inside;
!       Going  : Direction := Forward) return Natural;
  
     function Super_Index_Non_Blank
       (Source : Super_String;
!       Going  : Direction := Forward) return Natural;
! 
!    function Super_Index_Non_Blank
!      (Source : Super_String;
!       From   : Positive;
!       Going  : Direction := Forward) return Natural;
  
     function Super_Count
       (Source  : Super_String;
        Pattern : Wide_String;
        Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
!       return Natural;
  
     function Super_Count
       (Source  : Super_String;
        Pattern : Wide_String;
!       Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural;
  
     function Super_Count
       (Source : Super_String;
!       Set    : Wide_Maps.Wide_Character_Set) return Natural;
  
     procedure Super_Find_Token
       (Source : Super_String;
*************** pragma Preelaborate (Wide_Superbounded);
*** 278,291 ****
        First  : out Positive;
        Last   : out Natural);
  
!    -----------------------------------------
!    -- Wide_String Translation Subprograms --
!    -----------------------------------------
  
     function Super_Translate
!      (Source   : Super_String;
!       Mapping  : Wide_Maps.Wide_Character_Mapping)
!       return     Super_String;
  
     procedure Super_Translate
       (Source   : in out Super_String;
--- 305,317 ----
        First  : out Positive;
        Last   : out Natural);
  
!    ------------------------------------
!    -- String Translation Subprograms --
!    ------------------------------------
  
     function Super_Translate
!      (Source  : Super_String;
!       Mapping : Wide_Maps.Wide_Character_Mapping) return Super_String;
  
     procedure Super_Translate
       (Source   : in out Super_String;
*************** pragma Preelaborate (Wide_Superbounded);
*** 293,330 ****
  
     function Super_Translate
       (Source  : Super_String;
!       Mapping : Wide_Maps.Wide_Character_Mapping_Function)
!       return    Super_String;
  
     procedure Super_Translate
       (Source  : in out Super_String;
        Mapping : Wide_Maps.Wide_Character_Mapping_Function);
  
!    --------------------------------------------
!    -- Wide_String Transformation Subprograms --
!    --------------------------------------------
  
     function Super_Replace_Slice
!      (Source   : Super_String;
!       Low      : Positive;
!       High     : Natural;
!       By       : Wide_String;
!       Drop     : Truncation := Error)
!       return     Super_String;
  
     procedure Super_Replace_Slice
!      (Source   : in out Super_String;
!       Low      : Positive;
!       High     : Natural;
!       By       : Wide_String;
!       Drop     : Truncation := Error);
  
     function Super_Insert
       (Source   : Super_String;
        Before   : Positive;
        New_Item : Wide_String;
!       Drop     : Truncation := Error)
!       return     Super_String;
  
     procedure Super_Insert
       (Source   : in out Super_String;
--- 319,353 ----
  
     function Super_Translate
       (Source  : Super_String;
!       Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Super_String;
  
     procedure Super_Translate
       (Source  : in out Super_String;
        Mapping : Wide_Maps.Wide_Character_Mapping_Function);
  
!    ---------------------------------------
!    -- String Transformation Subprograms --
!    ---------------------------------------
  
     function Super_Replace_Slice
!      (Source : Super_String;
!       Low    : Positive;
!       High   : Natural;
!       By     : Wide_String;
!       Drop   : Truncation := Error) return Super_String;
  
     procedure Super_Replace_Slice
!      (Source  : in out Super_String;
!       Low     : Positive;
!       High    : Natural;
!       By      : Wide_String;
!       Drop    : Truncation := Error);
  
     function Super_Insert
       (Source   : Super_String;
        Before   : Positive;
        New_Item : Wide_String;
!       Drop     : Truncation := Error) return Super_String;
  
     procedure Super_Insert
       (Source   : in out Super_String;
*************** pragma Preelaborate (Wide_Superbounded);
*** 333,343 ****
        Drop     : Truncation := Error);
  
     function Super_Overwrite
!      (Source    : Super_String;
!       Position  : Positive;
!       New_Item  : Wide_String;
!       Drop      : Truncation := Error)
!       return      Super_String;
  
     procedure Super_Overwrite
       (Source    : in out Super_String;
--- 356,365 ----
        Drop     : Truncation := Error);
  
     function Super_Overwrite
!      (Source   : Super_String;
!       Position : Positive;
!       New_Item : Wide_String;
!       Drop     : Truncation := Error) return Super_String;
  
     procedure Super_Overwrite
       (Source    : in out Super_String;
*************** pragma Preelaborate (Wide_Superbounded);
*** 348,379 ****
     function Super_Delete
       (Source  : Super_String;
        From    : Positive;
!       Through : Natural)
!       return    Super_String;
  
     procedure Super_Delete
       (Source  : in out Super_String;
        From    : Positive;
        Through : Natural);
  
!    --------------------------------------
!    -- Wide_String Selector Subprograms --
!    --------------------------------------
  
     function Super_Trim
       (Source : Super_String;
!       Side   : Trim_End)
!       return   Super_String;
  
     procedure Super_Trim
       (Source : in out Super_String;
        Side   : Trim_End);
  
     function Super_Trim
!      (Source  : Super_String;
        Left   : Wide_Maps.Wide_Character_Set;
!       Right  : Wide_Maps.Wide_Character_Set)
!       return   Super_String;
  
     procedure Super_Trim
       (Source : in out Super_String;
--- 370,398 ----
     function Super_Delete
       (Source  : Super_String;
        From    : Positive;
!       Through : Natural) return Super_String;
  
     procedure Super_Delete
       (Source  : in out Super_String;
        From    : Positive;
        Through : Natural);
  
!    ---------------------------------
!    -- String Selector Subprograms --
!    ---------------------------------
  
     function Super_Trim
       (Source : Super_String;
!       Side   : Trim_End) return Super_String;
  
     procedure Super_Trim
       (Source : in out Super_String;
        Side   : Trim_End);
  
     function Super_Trim
!      (Source : Super_String;
        Left   : Wide_Maps.Wide_Character_Set;
!       Right  : Wide_Maps.Wide_Character_Set) return Super_String;
  
     procedure Super_Trim
       (Source : in out Super_String;
*************** pragma Preelaborate (Wide_Superbounded);
*** 384,413 ****
       (Source : Super_String;
        Count  : Natural;
        Pad    : Wide_Character := Wide_Space;
!       Drop   : Truncation     := Error)
!       return   Super_String;
  
     procedure Super_Head
       (Source : in out Super_String;
        Count  : Natural;
        Pad    : Wide_Character := Wide_Space;
!       Drop   : Truncation     := Error);
  
     function Super_Tail
       (Source : Super_String;
        Count  : Natural;
        Pad    : Wide_Character := Wide_Space;
!       Drop   : Truncation     := Error)
!       return Super_String;
  
     procedure Super_Tail
       (Source : in out Super_String;
        Count  : Natural;
        Pad    : Wide_Character := Wide_Space;
!       Drop   : Truncation     := Error);
  
     ------------------------------------
!    -- Wide_String Constructor Subprograms --
     ------------------------------------
  
     --  Note: in some of the following routines, there is an extra parameter
--- 403,430 ----
       (Source : Super_String;
        Count  : Natural;
        Pad    : Wide_Character := Wide_Space;
!       Drop   : Truncation := Error) return Super_String;
  
     procedure Super_Head
       (Source : in out Super_String;
        Count  : Natural;
        Pad    : Wide_Character := Wide_Space;
!       Drop   : Truncation := Error);
  
     function Super_Tail
       (Source : Super_String;
        Count  : Natural;
        Pad    : Wide_Character := Wide_Space;
!       Drop   : Truncation := Error) return Super_String;
  
     procedure Super_Tail
       (Source : in out Super_String;
        Count  : Natural;
        Pad    : Wide_Character := Wide_Space;
!       Drop   : Truncation := Error);
  
     ------------------------------------
!    -- String Constructor Subprograms --
     ------------------------------------
  
     --  Note: in some of the following routines, there is an extra parameter
*************** pragma Preelaborate (Wide_Superbounded);
*** 417,462 ****
     function Times
       (Left       : Natural;
        Right      : Wide_Character;
!       Max_Length : Positive)
!       return       Super_String;
     --  Note the additional parameter Max_Length
  
     function Times
       (Left       : Natural;
        Right      : Wide_String;
!       Max_Length : Positive)
!       return       Super_String;
     --  Note the additional parameter Max_Length
  
     function Times
       (Left  : Natural;
!       Right : Super_String)
!       return  Super_String;
  
     function Super_Replicate
       (Count      : Natural;
        Item       : Wide_Character;
        Drop       : Truncation := Error;
!       Max_Length : Positive)
!       return       Super_String;
     --  Note the additional parameter Max_Length
  
     function Super_Replicate
       (Count      : Natural;
        Item       : Wide_String;
        Drop       : Truncation := Error;
!       Max_Length : Positive)
!       return       Super_String;
     --  Note the additional parameter Max_Length
  
     function Super_Replicate
       (Count : Natural;
        Item  : Super_String;
!       Drop  : Truncation := Error)
!       return  Super_String;
  
  private
- 
        --  Pragma Inline declarations
  
        pragma Inline ("=");
--- 434,472 ----
     function Times
       (Left       : Natural;
        Right      : Wide_Character;
!       Max_Length : Positive) return Super_String;
     --  Note the additional parameter Max_Length
  
     function Times
       (Left       : Natural;
        Right      : Wide_String;
!       Max_Length : Positive) return Super_String;
     --  Note the additional parameter Max_Length
  
     function Times
       (Left  : Natural;
!       Right : Super_String) return Super_String;
  
     function Super_Replicate
       (Count      : Natural;
        Item       : Wide_Character;
        Drop       : Truncation := Error;
!       Max_Length : Positive) return Super_String;
     --  Note the additional parameter Max_Length
  
     function Super_Replicate
       (Count      : Natural;
        Item       : Wide_String;
        Drop       : Truncation := Error;
!       Max_Length : Positive) return Super_String;
     --  Note the additional parameter Max_Length
  
     function Super_Replicate
       (Count : Natural;
        Item  : Super_String;
!       Drop  : Truncation := Error) return Super_String;
  
  private
        --  Pragma Inline declarations
  
        pragma Inline ("=");
diff -Nrcpad gcc-3.4.3/gcc/ada/a-stwiun.adb gcc-4.0.0/gcc/ada/a-stwiun.adb
*** gcc-3.4.3/gcc/ada/a-stwiun.adb	Tue Oct 21 13:41:54 2003
--- gcc-4.0.0/gcc/ada/a-stwiun.adb	Thu Feb 10 13:50:15 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Ada.Strings.Wide_Unbounded 
*** 55,62 ****
  
     function "&"
       (Left  : Unbounded_Wide_String;
!       Right : Unbounded_Wide_String)
!       return  Unbounded_Wide_String
     is
        L_Length : constant Natural := Left.Last;
        R_Length : constant Natural := Right.Last;
--- 55,61 ----
  
     function "&"
       (Left  : Unbounded_Wide_String;
!       Right : Unbounded_Wide_String) return Unbounded_Wide_String
     is
        L_Length : constant Natural := Left.Last;
        R_Length : constant Natural := Right.Last;
*************** package body Ada.Strings.Wide_Unbounded 
*** 77,84 ****
  
     function "&"
       (Left  : Unbounded_Wide_String;
!       Right : Wide_String)
!       return  Unbounded_Wide_String
     is
        L_Length : constant Natural := Left.Last;
        Result   : Unbounded_Wide_String;
--- 76,82 ----
  
     function "&"
       (Left  : Unbounded_Wide_String;
!       Right : Wide_String) return Unbounded_Wide_String
     is
        L_Length : constant Natural := Left.Last;
        Result   : Unbounded_Wide_String;
*************** package body Ada.Strings.Wide_Unbounded 
*** 96,103 ****
  
     function "&"
       (Left  : Wide_String;
!       Right : Unbounded_Wide_String)
!       return  Unbounded_Wide_String
     is
        R_Length : constant Natural := Right.Last;
        Result   : Unbounded_Wide_String;
--- 94,100 ----
  
     function "&"
       (Left  : Wide_String;
!       Right : Unbounded_Wide_String) return Unbounded_Wide_String
     is
        R_Length : constant Natural := Right.Last;
        Result   : Unbounded_Wide_String;
*************** package body Ada.Strings.Wide_Unbounded 
*** 116,123 ****
  
     function "&"
       (Left  : Unbounded_Wide_String;
!       Right : Wide_Character)
!       return  Unbounded_Wide_String
     is
        Result : Unbounded_Wide_String;
  
--- 113,119 ----
  
     function "&"
       (Left  : Unbounded_Wide_String;
!       Right : Wide_Character) return Unbounded_Wide_String
     is
        Result : Unbounded_Wide_String;
  
*************** package body Ada.Strings.Wide_Unbounded 
*** 135,142 ****
  
     function "&"
       (Left  : Wide_Character;
!       Right : Unbounded_Wide_String)
!       return  Unbounded_Wide_String
     is
        Result : Unbounded_Wide_String;
  
--- 131,137 ----
  
     function "&"
       (Left  : Wide_Character;
!       Right : Unbounded_Wide_String) return Unbounded_Wide_String
     is
        Result : Unbounded_Wide_String;
  
*************** package body Ada.Strings.Wide_Unbounded 
*** 157,164 ****
  
     function "*"
       (Left  : Natural;
!       Right : Wide_Character)
!       return  Unbounded_Wide_String
     is
        Result : Unbounded_Wide_String;
  
--- 152,158 ----
  
     function "*"
       (Left  : Natural;
!       Right : Wide_Character) return Unbounded_Wide_String
     is
        Result : Unbounded_Wide_String;
  
*************** package body Ada.Strings.Wide_Unbounded 
*** 174,182 ****
     end "*";
  
     function "*"
!      (Left   : Natural;
!       Right  : Wide_String)
!       return   Unbounded_Wide_String
     is
        Len    : constant Natural := Right'Length;
        K      : Positive;
--- 168,175 ----
     end "*";
  
     function "*"
!      (Left  : Natural;
!       Right : Wide_String) return Unbounded_Wide_String
     is
        Len    : constant Natural := Right'Length;
        K      : Positive;
*************** package body Ada.Strings.Wide_Unbounded 
*** 198,205 ****
  
     function "*"
       (Left  : Natural;
!       Right : Unbounded_Wide_String)
!       return  Unbounded_Wide_String
     is
        Len    : constant Natural := Right.Last;
        K      : Positive;
--- 191,197 ----
  
     function "*"
       (Left  : Natural;
!       Right : Unbounded_Wide_String) return Unbounded_Wide_String
     is
        Len    : constant Natural := Right.Last;
        K      : Positive;
*************** package body Ada.Strings.Wide_Unbounded 
*** 226,233 ****
  
     function "<"
       (Left  : Unbounded_Wide_String;
!       Right : Unbounded_Wide_String)
!       return  Boolean
     is
     begin
        return
--- 218,224 ----
  
     function "<"
       (Left  : Unbounded_Wide_String;
!       Right : Unbounded_Wide_String) return Boolean
     is
     begin
        return
*************** package body Ada.Strings.Wide_Unbounded 
*** 236,243 ****
  
     function "<"
       (Left  : Unbounded_Wide_String;
!       Right : Wide_String)
!       return  Boolean
     is
     begin
        return Left.Reference (1 .. Left.Last) < Right;
--- 227,233 ----
  
     function "<"
       (Left  : Unbounded_Wide_String;
!       Right : Wide_String) return Boolean
     is
     begin
        return Left.Reference (1 .. Left.Last) < Right;
*************** package body Ada.Strings.Wide_Unbounded 
*** 245,252 ****
  
     function "<"
       (Left  : Wide_String;
!       Right : Unbounded_Wide_String)
!       return  Boolean
     is
     begin
        return Left < Right.Reference (1 .. Right.Last);
--- 235,241 ----
  
     function "<"
       (Left  : Wide_String;
!       Right : Unbounded_Wide_String) return Boolean
     is
     begin
        return Left < Right.Reference (1 .. Right.Last);
*************** package body Ada.Strings.Wide_Unbounded 
*** 258,265 ****
  
     function "<="
       (Left  : Unbounded_Wide_String;
!       Right : Unbounded_Wide_String)
!       return  Boolean
     is
     begin
        return
--- 247,253 ----
  
     function "<="
       (Left  : Unbounded_Wide_String;
!       Right : Unbounded_Wide_String) return Boolean
     is
     begin
        return
*************** package body Ada.Strings.Wide_Unbounded 
*** 268,275 ****
  
     function "<="
       (Left  : Unbounded_Wide_String;
!       Right : Wide_String)
!       return  Boolean
     is
     begin
        return Left.Reference (1 .. Left.Last) <= Right;
--- 256,262 ----
  
     function "<="
       (Left  : Unbounded_Wide_String;
!       Right : Wide_String) return Boolean
     is
     begin
        return Left.Reference (1 .. Left.Last) <= Right;
*************** package body Ada.Strings.Wide_Unbounded 
*** 277,284 ****
  
     function "<="
       (Left  : Wide_String;
!       Right : Unbounded_Wide_String)
!       return  Boolean
     is
     begin
        return Left <= Right.Reference (1 .. Right.Last);
--- 264,270 ----
  
     function "<="
       (Left  : Wide_String;
!       Right : Unbounded_Wide_String) return Boolean
     is
     begin
        return Left <= Right.Reference (1 .. Right.Last);
*************** package body Ada.Strings.Wide_Unbounded 
*** 290,297 ****
  
     function "="
       (Left  : Unbounded_Wide_String;
!       Right : Unbounded_Wide_String)
!       return  Boolean
     is
     begin
        return
--- 276,282 ----
  
     function "="
       (Left  : Unbounded_Wide_String;
!       Right : Unbounded_Wide_String) return Boolean
     is
     begin
        return
*************** package body Ada.Strings.Wide_Unbounded 
*** 300,307 ****
  
     function "="
       (Left  : Unbounded_Wide_String;
!       Right : Wide_String)
!       return  Boolean
     is
     begin
        return Left.Reference (1 .. Left.Last) = Right;
--- 285,291 ----
  
     function "="
       (Left  : Unbounded_Wide_String;
!       Right : Wide_String) return Boolean
     is
     begin
        return Left.Reference (1 .. Left.Last) = Right;
*************** package body Ada.Strings.Wide_Unbounded 
*** 309,316 ****
  
     function "="
       (Left  : Wide_String;
!       Right : Unbounded_Wide_String)
!       return  Boolean
     is
     begin
        return Left = Right.Reference (1 .. Right.Last);
--- 293,299 ----
  
     function "="
       (Left  : Wide_String;
!       Right : Unbounded_Wide_String) return Boolean
     is
     begin
        return Left = Right.Reference (1 .. Right.Last);
*************** package body Ada.Strings.Wide_Unbounded 
*** 322,329 ****
  
     function ">"
       (Left  : Unbounded_Wide_String;
!       Right : Unbounded_Wide_String)
!       return  Boolean
     is
     begin
        return
--- 305,311 ----
  
     function ">"
       (Left  : Unbounded_Wide_String;
!       Right : Unbounded_Wide_String) return Boolean
     is
     begin
        return
*************** package body Ada.Strings.Wide_Unbounded 
*** 332,339 ****
  
     function ">"
       (Left  : Unbounded_Wide_String;
!       Right : Wide_String)
!       return  Boolean
     is
     begin
        return Left.Reference (1 .. Left.Last) > Right;
--- 314,320 ----
  
     function ">"
       (Left  : Unbounded_Wide_String;
!       Right : Wide_String) return Boolean
     is
     begin
        return Left.Reference (1 .. Left.Last) > Right;
*************** package body Ada.Strings.Wide_Unbounded 
*** 341,348 ****
  
     function ">"
       (Left  : Wide_String;
!       Right : Unbounded_Wide_String)
!       return  Boolean
     is
     begin
        return Left > Right.Reference (1 .. Right.Last);
--- 322,328 ----
  
     function ">"
       (Left  : Wide_String;
!       Right : Unbounded_Wide_String) return Boolean
     is
     begin
        return Left > Right.Reference (1 .. Right.Last);
*************** package body Ada.Strings.Wide_Unbounded 
*** 354,361 ****
  
     function ">="
       (Left  : Unbounded_Wide_String;
!       Right : Unbounded_Wide_String)
!       return  Boolean
     is
     begin
        return
--- 334,340 ----
  
     function ">="
       (Left  : Unbounded_Wide_String;
!       Right : Unbounded_Wide_String) return Boolean
     is
     begin
        return
*************** package body Ada.Strings.Wide_Unbounded 
*** 364,371 ****
  
     function ">="
       (Left  : Unbounded_Wide_String;
!       Right : Wide_String)
!       return  Boolean
     is
     begin
        return Left.Reference (1 .. Left.Last) >= Right;
--- 343,349 ----
  
     function ">="
       (Left  : Unbounded_Wide_String;
!       Right : Wide_String) return Boolean
     is
     begin
        return Left.Reference (1 .. Left.Last) >= Right;
*************** package body Ada.Strings.Wide_Unbounded 
*** 373,380 ****
  
     function ">="
       (Left  : Wide_String;
!       Right : Unbounded_Wide_String)
!       return  Boolean
     is
     begin
        return Left >= Right.Reference (1 .. Right.Last);
--- 351,357 ----
  
     function ">="
       (Left  : Wide_String;
!       Right : Unbounded_Wide_String) return Boolean
     is
     begin
        return Left >= Right.Reference (1 .. Right.Last);
*************** package body Ada.Strings.Wide_Unbounded 
*** 438,448 ****
     -----------
  
     function Count
!      (Source   : Unbounded_Wide_String;
!       Pattern  : Wide_String;
!       Mapping  : Wide_Maps.Wide_Character_Mapping :=
!                         Wide_Maps.Identity)
!       return     Natural
     is
     begin
        return Wide_Search.Count
--- 415,425 ----
     -----------
  
     function Count
!      (Source  : Unbounded_Wide_String;
!       Pattern : Wide_String;
!       Mapping : Wide_Maps.Wide_Character_Mapping :=
!                   Wide_Maps.Identity)
!       return Natural
     is
     begin
        return Wide_Search.Count
*************** package body Ada.Strings.Wide_Unbounded 
*** 450,459 ****
     end Count;
  
     function Count
!      (Source   : Unbounded_Wide_String;
!       Pattern  : Wide_String;
!       Mapping  : Wide_Maps.Wide_Character_Mapping_Function)
!       return     Natural
     is
     begin
        return Wide_Search.Count
--- 427,435 ----
     end Count;
  
     function Count
!      (Source  : Unbounded_Wide_String;
!       Pattern : Wide_String;
!       Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural
     is
     begin
        return Wide_Search.Count
*************** package body Ada.Strings.Wide_Unbounded 
*** 461,469 ****
     end Count;
  
     function Count
!      (Source   : Unbounded_Wide_String;
!       Set      : Wide_Maps.Wide_Character_Set)
!       return     Natural
     is
     begin
        return Wide_Search.Count (Source.Reference (1 .. Source.Last), Set);
--- 437,444 ----
     end Count;
  
     function Count
!      (Source : Unbounded_Wide_String;
!       Set    : Wide_Maps.Wide_Character_Set) return Natural
     is
     begin
        return Wide_Search.Count (Source.Reference (1 .. Source.Last), Set);
*************** package body Ada.Strings.Wide_Unbounded 
*** 476,483 ****
     function Delete
       (Source  : Unbounded_Wide_String;
        From    : Positive;
!       Through : Natural)
!       return    Unbounded_Wide_String
     is
     begin
        return To_Unbounded_Wide_String
--- 451,457 ----
     function Delete
       (Source  : Unbounded_Wide_String;
        From    : Positive;
!       Through : Natural) return Unbounded_Wide_String
     is
     begin
        return To_Unbounded_Wide_String
*************** package body Ada.Strings.Wide_Unbounded 
*** 515,522 ****
  
     function Element
       (Source : Unbounded_Wide_String;
!       Index  : Positive)
!       return   Wide_Character
     is
     begin
        if Index <= Source.Last then
--- 489,495 ----
  
     function Element
       (Source : Unbounded_Wide_String;
!       Index  : Positive) return Wide_Character
     is
     begin
        if Index <= Source.Last then
*************** package body Ada.Strings.Wide_Unbounded 
*** 581,588 ****
     function Head
       (Source : Unbounded_Wide_String;
        Count  : Natural;
!       Pad    : Wide_Character := Wide_Space)
!       return   Unbounded_Wide_String
     is
     begin
        return
--- 554,560 ----
     function Head
       (Source : Unbounded_Wide_String;
        Count  : Natural;
!       Pad    : Wide_Character := Wide_Space) return Unbounded_Wide_String
     is
     begin
        return
*************** package body Ada.Strings.Wide_Unbounded 
*** 609,620 ****
     -----------
  
     function Index
!      (Source   : Unbounded_Wide_String;
!       Pattern  : Wide_String;
!       Going    : Strings.Direction := Strings.Forward;
!       Mapping  : Wide_Maps.Wide_Character_Mapping :=
!                         Wide_Maps.Identity)
!       return     Natural
     is
     begin
        return Wide_Search.Index
--- 581,591 ----
     -----------
  
     function Index
!      (Source  : Unbounded_Wide_String;
!       Pattern : Wide_String;
!       Going   : Strings.Direction := Strings.Forward;
!       Mapping : Wide_Maps.Wide_Character_Mapping :=
!                         Wide_Maps.Identity) return Natural
     is
     begin
        return Wide_Search.Index
*************** package body Ada.Strings.Wide_Unbounded 
*** 622,632 ****
     end Index;
  
     function Index
!      (Source   : Unbounded_Wide_String;
!       Pattern  : Wide_String;
!       Going    : Direction := Forward;
!       Mapping  : Wide_Maps.Wide_Character_Mapping_Function)
!       return Natural
     is
     begin
        return Wide_Search.Index
--- 593,602 ----
     end Index;
  
     function Index
!      (Source  : Unbounded_Wide_String;
!       Pattern : Wide_String;
!       Going   : Direction := Forward;
!       Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural
     is
     begin
        return Wide_Search.Index
*************** package body Ada.Strings.Wide_Unbounded 
*** 637,644 ****
       (Source : Unbounded_Wide_String;
        Set    : Wide_Maps.Wide_Character_Set;
        Test   : Strings.Membership := Strings.Inside;
!       Going  : Strings.Direction  := Strings.Forward)
!       return   Natural
     is
     begin
        return Wide_Search.Index
--- 607,613 ----
       (Source : Unbounded_Wide_String;
        Set    : Wide_Maps.Wide_Character_Set;
        Test   : Strings.Membership := Strings.Inside;
!       Going  : Strings.Direction  := Strings.Forward) return Natural
     is
     begin
        return Wide_Search.Index
*************** package body Ada.Strings.Wide_Unbounded 
*** 647,654 ****
  
     function Index_Non_Blank
       (Source : Unbounded_Wide_String;
!       Going  : Strings.Direction := Strings.Forward)
!       return   Natural
     is
     begin
        return Wide_Search.Index_Non_Blank
--- 616,622 ----
  
     function Index_Non_Blank
       (Source : Unbounded_Wide_String;
!       Going  : Strings.Direction := Strings.Forward) return Natural
     is
     begin
        return Wide_Search.Index_Non_Blank
*************** package body Ada.Strings.Wide_Unbounded 
*** 672,679 ****
     function Insert
       (Source   : Unbounded_Wide_String;
        Before   : Positive;
!       New_Item : Wide_String)
!       return     Unbounded_Wide_String
     is
     begin
        return To_Unbounded_Wide_String
--- 640,646 ----
     function Insert
       (Source   : Unbounded_Wide_String;
        Before   : Positive;
!       New_Item : Wide_String) return Unbounded_Wide_String
     is
     begin
        return To_Unbounded_Wide_String
*************** package body Ada.Strings.Wide_Unbounded 
*** 715,725 ****
     ---------------
  
     function Overwrite
!      (Source    : Unbounded_Wide_String;
!       Position  : Positive;
!       New_Item  : Wide_String)
!       return      Unbounded_Wide_String is
! 
     begin
        return To_Unbounded_Wide_String
          (Wide_Fixed.Overwrite
--- 682,691 ----
     ---------------
  
     function Overwrite
!      (Source   : Unbounded_Wide_String;
!       Position : Positive;
!       New_Item : Wide_String) return Unbounded_Wide_String
!    is
     begin
        return To_Unbounded_Wide_String
          (Wide_Fixed.Overwrite
*************** package body Ada.Strings.Wide_Unbounded 
*** 800,810 ****
     -------------------
  
     function Replace_Slice
!      (Source   : Unbounded_Wide_String;
!       Low      : Positive;
!       High     : Natural;
!       By       : Wide_String)
!       return     Unbounded_Wide_String
     is
     begin
        return
--- 766,775 ----
     -------------------
  
     function Replace_Slice
!      (Source : Unbounded_Wide_String;
!       Low    : Positive;
!       High   : Natural;
!       By     : Wide_String) return Unbounded_Wide_String
     is
     begin
        return
*************** package body Ada.Strings.Wide_Unbounded 
*** 836,843 ****
     function Slice
       (Source : Unbounded_Wide_String;
        Low    : Positive;
!       High   : Natural)
!       return   Wide_String
     is
     begin
        --  Note: test of High > Length is in accordance with AI95-00128
--- 801,807 ----
     function Slice
       (Source : Unbounded_Wide_String;
        Low    : Positive;
!       High   : Natural) return Wide_String
     is
     begin
        --  Note: test of High > Length is in accordance with AI95-00128
*************** package body Ada.Strings.Wide_Unbounded 
*** 857,865 ****
     function Tail
       (Source : Unbounded_Wide_String;
        Count  : Natural;
!       Pad    : Wide_Character := Wide_Space)
!       return   Unbounded_Wide_String is
! 
     begin
        return To_Unbounded_Wide_String
          (Wide_Fixed.Tail (Source.Reference (1 .. Source.Last), Count, Pad));
--- 821,828 ----
     function Tail
       (Source : Unbounded_Wide_String;
        Count  : Natural;
!       Pad    : Wide_Character := Wide_Space) return Unbounded_Wide_String
!    is
     begin
        return To_Unbounded_Wide_String
          (Wide_Fixed.Tail (Source.Reference (1 .. Source.Last), Count, Pad));
*************** package body Ada.Strings.Wide_Unbounded 
*** 884,894 ****
     ------------------------------
  
     function To_Unbounded_Wide_String
!      (Source : Wide_String)
!       return   Unbounded_Wide_String
     is
        Result : Unbounded_Wide_String;
- 
     begin
        Result.Last          := Source'Length;
        Result.Reference     := new Wide_String (1 .. Source'Length);
--- 847,855 ----
     ------------------------------
  
     function To_Unbounded_Wide_String
!      (Source : Wide_String) return Unbounded_Wide_String
     is
        Result : Unbounded_Wide_String;
     begin
        Result.Last          := Source'Length;
        Result.Reference     := new Wide_String (1 .. Source'Length);
*************** package body Ada.Strings.Wide_Unbounded 
*** 896,906 ****
        return Result;
     end To_Unbounded_Wide_String;
  
!    function To_Unbounded_Wide_String (Length : Natural)
!       return Unbounded_Wide_String
     is
        Result : Unbounded_Wide_String;
- 
     begin
        Result.Last      := Length;
        Result.Reference := new Wide_String (1 .. Length);
--- 857,866 ----
        return Result;
     end To_Unbounded_Wide_String;
  
!    function To_Unbounded_Wide_String
!      (Length : Natural) return Unbounded_Wide_String
     is
        Result : Unbounded_Wide_String;
     begin
        Result.Last      := Length;
        Result.Reference := new Wide_String (1 .. Length);
*************** package body Ada.Strings.Wide_Unbounded 
*** 912,919 ****
     --------------------
  
     function To_Wide_String
!      (Source : Unbounded_Wide_String)
!       return   Wide_String
     is
     begin
        return Source.Reference (1 .. Source.Last);
--- 872,878 ----
     --------------------
  
     function To_Wide_String
!      (Source : Unbounded_Wide_String) return Wide_String
     is
     begin
        return Source.Reference (1 .. Source.Last);
*************** package body Ada.Strings.Wide_Unbounded 
*** 925,932 ****
  
     function Translate
       (Source  : Unbounded_Wide_String;
!       Mapping : Wide_Maps.Wide_Character_Mapping)
!       return    Unbounded_Wide_String
     is
     begin
        return To_Unbounded_Wide_String
--- 884,890 ----
  
     function Translate
       (Source  : Unbounded_Wide_String;
!       Mapping : Wide_Maps.Wide_Character_Mapping) return Unbounded_Wide_String
     is
     begin
        return To_Unbounded_Wide_String
*************** package body Ada.Strings.Wide_Unbounded 
*** 944,950 ****
     function Translate
       (Source  : Unbounded_Wide_String;
        Mapping : Wide_Maps.Wide_Character_Mapping_Function)
!       return    Unbounded_Wide_String
     is
     begin
        return To_Unbounded_Wide_String
--- 902,908 ----
     function Translate
       (Source  : Unbounded_Wide_String;
        Mapping : Wide_Maps.Wide_Character_Mapping_Function)
!       return Unbounded_Wide_String
     is
     begin
        return To_Unbounded_Wide_String
*************** package body Ada.Strings.Wide_Unbounded 
*** 965,972 ****
  
     function Trim
       (Source : Unbounded_Wide_String;
!       Side   : Trim_End)
!       return   Unbounded_Wide_String
     is
     begin
        return To_Unbounded_Wide_String
--- 923,929 ----
  
     function Trim
       (Source : Unbounded_Wide_String;
!       Side   : Trim_End) return Unbounded_Wide_String
     is
     begin
        return To_Unbounded_Wide_String
*************** package body Ada.Strings.Wide_Unbounded 
*** 988,995 ****
     function Trim
       (Source : Unbounded_Wide_String;
        Left   : Wide_Maps.Wide_Character_Set;
!       Right  : Wide_Maps.Wide_Character_Set)
!       return   Unbounded_Wide_String
     is
     begin
        return To_Unbounded_Wide_String
--- 945,951 ----
     function Trim
       (Source : Unbounded_Wide_String;
        Left   : Wide_Maps.Wide_Character_Set;
!       Right  : Wide_Maps.Wide_Character_Set) return Unbounded_Wide_String
     is
     begin
        return To_Unbounded_Wide_String
diff -Nrcpad gcc-3.4.3/gcc/ada/a-stwiun.ads gcc-4.0.0/gcc/ada/a-stwiun.ads
*** gcc-3.4.3/gcc/ada/a-stwiun.ads	Tue Oct 21 13:41:54 2003
--- gcc-4.0.0/gcc/ada/a-stwiun.ads	Thu Feb 10 13:50:15 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** pragma Preelaborate (Wide_Unbounded);
*** 56,250 ****
     --------------------------------------------------------
  
     function To_Unbounded_Wide_String
!      (Source : Wide_String)
!       return   Unbounded_Wide_String;
  
     function To_Unbounded_Wide_String
!      (Length : in Natural)
!       return   Unbounded_Wide_String;
  
     function To_Wide_String
!      (Source : Unbounded_Wide_String)
!       return   Wide_String;
  
     procedure Append
       (Source   : in out Unbounded_Wide_String;
!       New_Item : in Unbounded_Wide_String);
  
     procedure Append
       (Source   : in out Unbounded_Wide_String;
!       New_Item : in Wide_String);
  
     procedure Append
       (Source   : in out Unbounded_Wide_String;
!       New_Item : in Wide_Character);
  
     function "&"
!      (Left, Right : Unbounded_Wide_String)
!       return        Unbounded_Wide_String;
  
     function "&"
!      (Left  : in Unbounded_Wide_String;
!       Right : in Wide_String)
!       return  Unbounded_Wide_String;
  
     function "&"
!      (Left  : in Wide_String;
!       Right : in Unbounded_Wide_String)
!       return  Unbounded_Wide_String;
  
     function "&"
!      (Left  : in Unbounded_Wide_String;
!       Right : in Wide_Character)
!       return  Unbounded_Wide_String;
  
     function "&"
!      (Left  : in Wide_Character;
!       Right : in Unbounded_Wide_String)
!       return  Unbounded_Wide_String;
  
     function Element
!      (Source : in Unbounded_Wide_String;
!       Index  : in Positive)
!       return   Wide_Character;
  
     procedure Replace_Element
       (Source : in out Unbounded_Wide_String;
!       Index  : in Positive;
        By     : Wide_Character);
  
     function Slice
!      (Source : in Unbounded_Wide_String;
!       Low    : in Positive;
!       High   : in Natural)
!       return   Wide_String;
  
     function "="
!      (Left  : in Unbounded_Wide_String;
!       Right : in Unbounded_Wide_String)
!       return  Boolean;
  
     function "="
!      (Left  : in Unbounded_Wide_String;
!       Right : in Wide_String)
!       return  Boolean;
  
     function "="
!      (Left  : in Wide_String;
!       Right : in Unbounded_Wide_String)
!       return  Boolean;
  
     function "<"
!      (Left  : in Unbounded_Wide_String;
!       Right : in Unbounded_Wide_String)
!       return  Boolean;
  
     function "<"
!      (Left  : in Unbounded_Wide_String;
!       Right : in Wide_String)
!       return  Boolean;
  
     function "<"
!      (Left  : in Wide_String;
!       Right : in Unbounded_Wide_String)
!       return  Boolean;
  
     function "<="
!      (Left  : in Unbounded_Wide_String;
!       Right : in Unbounded_Wide_String)
!       return  Boolean;
  
     function "<="
!      (Left  : in Unbounded_Wide_String;
!       Right : in Wide_String)
!       return  Boolean;
  
     function "<="
!      (Left  : in Wide_String;
!       Right : in Unbounded_Wide_String)
!       return  Boolean;
  
     function ">"
!      (Left  : in Unbounded_Wide_String;
!       Right : in Unbounded_Wide_String)
!       return  Boolean;
  
     function ">"
!      (Left  : in Unbounded_Wide_String;
!       Right : in Wide_String)
!       return  Boolean;
  
     function ">"
!      (Left  : in Wide_String;
!       Right : in Unbounded_Wide_String)
!       return  Boolean;
  
     function ">="
!      (Left  : in Unbounded_Wide_String;
!       Right : in Unbounded_Wide_String)
!       return  Boolean;
  
     function ">="
!      (Left  : in Unbounded_Wide_String;
!       Right : in Wide_String)
!       return  Boolean;
  
     function ">="
!      (Left  : in Wide_String;
!       Right : in Unbounded_Wide_String)
!       return  Boolean;
  
     ------------------------
     -- Search Subprograms --
     ------------------------
  
     function Index
!      (Source   : in Unbounded_Wide_String;
!       Pattern  : in Wide_String;
!       Going    : in Direction := Forward;
!       Mapping  : in Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
!       return     Natural;
  
     function Index
!      (Source   : in Unbounded_Wide_String;
!       Pattern  : in Wide_String;
!       Going    : in Direction := Forward;
!       Mapping  : in Wide_Maps.Wide_Character_Mapping_Function)
!       return     Natural;
  
     function Index
!      (Source : in Unbounded_Wide_String;
!       Set    : in Wide_Maps.Wide_Character_Set;
!       Test   : in Membership := Inside;
!       Going  : in Direction  := Forward)
!       return   Natural;
  
     function Index_Non_Blank
!      (Source : in Unbounded_Wide_String;
!       Going  : in Direction := Forward)
!       return   Natural;
  
     function Count
!      (Source  : in Unbounded_Wide_String;
!       Pattern : in Wide_String;
!       Mapping : in Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
!       return    Natural;
  
     function Count
!      (Source   : in Unbounded_Wide_String;
!       Pattern  : in Wide_String;
!       Mapping  : in Wide_Maps.Wide_Character_Mapping_Function)
!       return     Natural;
  
     function Count
!      (Source : in Unbounded_Wide_String;
!       Set    : in Wide_Maps.Wide_Character_Set)
!       return   Natural;
  
     procedure Find_Token
!      (Source : in Unbounded_Wide_String;
!       Set    : in Wide_Maps.Wide_Character_Set;
!       Test   : in Membership;
        First  : out Positive;
        Last   : out Natural);
  
--- 56,220 ----
     --------------------------------------------------------
  
     function To_Unbounded_Wide_String
!      (Source : Wide_String) return Unbounded_Wide_String;
  
     function To_Unbounded_Wide_String
!      (Length : Natural) return Unbounded_Wide_String;
  
     function To_Wide_String
!      (Source : Unbounded_Wide_String) return Wide_String;
  
     procedure Append
       (Source   : in out Unbounded_Wide_String;
!       New_Item : Unbounded_Wide_String);
  
     procedure Append
       (Source   : in out Unbounded_Wide_String;
!       New_Item : Wide_String);
  
     procedure Append
       (Source   : in out Unbounded_Wide_String;
!       New_Item : Wide_Character);
  
     function "&"
!      (Left, Right : Unbounded_Wide_String) return Unbounded_Wide_String;
  
     function "&"
!      (Left  : Unbounded_Wide_String;
!       Right : Wide_String) return Unbounded_Wide_String;
  
     function "&"
!      (Left  : Wide_String;
!       Right : Unbounded_Wide_String) return Unbounded_Wide_String;
  
     function "&"
!      (Left  : Unbounded_Wide_String;
!       Right : Wide_Character) return Unbounded_Wide_String;
  
     function "&"
!      (Left  : Wide_Character;
!       Right : Unbounded_Wide_String) return Unbounded_Wide_String;
  
     function Element
!      (Source : Unbounded_Wide_String;
!       Index  : Positive) return Wide_Character;
  
     procedure Replace_Element
       (Source : in out Unbounded_Wide_String;
!       Index  : Positive;
        By     : Wide_Character);
  
     function Slice
!      (Source : Unbounded_Wide_String;
!       Low    : Positive;
!       High   : Natural) return Wide_String;
  
     function "="
!      (Left  : Unbounded_Wide_String;
!       Right : Unbounded_Wide_String) return Boolean;
  
     function "="
!      (Left  : Unbounded_Wide_String;
!       Right : Wide_String) return Boolean;
  
     function "="
!      (Left  : Wide_String;
!       Right : Unbounded_Wide_String) return Boolean;
  
     function "<"
!      (Left  : Unbounded_Wide_String;
!       Right : Unbounded_Wide_String) return Boolean;
  
     function "<"
!      (Left  : Unbounded_Wide_String;
!       Right : Wide_String) return Boolean;
  
     function "<"
!      (Left  : Wide_String;
!       Right : Unbounded_Wide_String) return Boolean;
  
     function "<="
!      (Left  : Unbounded_Wide_String;
!       Right : Unbounded_Wide_String) return Boolean;
  
     function "<="
!      (Left  : Unbounded_Wide_String;
!       Right : Wide_String) return Boolean;
  
     function "<="
!      (Left  : Wide_String;
!       Right : Unbounded_Wide_String) return Boolean;
  
     function ">"
!      (Left  : Unbounded_Wide_String;
!       Right : Unbounded_Wide_String) return Boolean;
  
     function ">"
!      (Left  : Unbounded_Wide_String;
!       Right : Wide_String) return Boolean;
  
     function ">"
!      (Left  : Wide_String;
!       Right : Unbounded_Wide_String) return Boolean;
  
     function ">="
!      (Left  : Unbounded_Wide_String;
!       Right : Unbounded_Wide_String) return Boolean;
  
     function ">="
!      (Left  : Unbounded_Wide_String;
!       Right : Wide_String) return Boolean;
  
     function ">="
!      (Left  : Wide_String;
!       Right : Unbounded_Wide_String) return Boolean;
  
     ------------------------
     -- Search Subprograms --
     ------------------------
  
     function Index
!      (Source  : Unbounded_Wide_String;
!       Pattern : Wide_String;
!       Going   : Direction := Forward;
!       Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
!       return Natural;
  
     function Index
!      (Source  : Unbounded_Wide_String;
!       Pattern : Wide_String;
!       Going   : Direction := Forward;
!       Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural;
  
     function Index
!      (Source : Unbounded_Wide_String;
!       Set    : Wide_Maps.Wide_Character_Set;
!       Test   : Membership := Inside;
!       Going  : Direction  := Forward) return Natural;
  
     function Index_Non_Blank
!      (Source : Unbounded_Wide_String;
!       Going  : Direction := Forward) return Natural;
  
     function Count
!      (Source  : Unbounded_Wide_String;
!       Pattern : Wide_String;
!       Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
!       return Natural;
  
     function Count
!      (Source  : Unbounded_Wide_String;
!       Pattern : Wide_String;
!       Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural;
  
     function Count
!      (Source : Unbounded_Wide_String;
!       Set    : Wide_Maps.Wide_Character_Set) return Natural;
  
     procedure Find_Token
!      (Source : Unbounded_Wide_String;
!       Set    : Wide_Maps.Wide_Character_Set;
!       Test   : Membership;
        First  : out Positive;
        Last   : out Natural);
  
*************** pragma Preelaborate (Wide_Unbounded);
*** 253,381 ****
     ------------------------------------
  
     function Translate
!      (Source  : in Unbounded_Wide_String;
!       Mapping : in Wide_Maps.Wide_Character_Mapping)
!       return    Unbounded_Wide_String;
  
     procedure Translate
       (Source  : in out Unbounded_Wide_String;
        Mapping : Wide_Maps.Wide_Character_Mapping);
  
     function Translate
!      (Source  : in Unbounded_Wide_String;
!       Mapping : in Wide_Maps.Wide_Character_Mapping_Function)
!       return    Unbounded_Wide_String;
  
     procedure Translate
       (Source  : in out Unbounded_Wide_String;
!       Mapping : in Wide_Maps.Wide_Character_Mapping_Function);
  
     ---------------------------------------
     -- Wide_String Transformation Subprograms --
     ---------------------------------------
  
     function Replace_Slice
!      (Source : in Unbounded_Wide_String;
!       Low    : in Positive;
!       High   : in Natural;
!       By     : in Wide_String)
!       return   Unbounded_Wide_String;
  
     procedure Replace_Slice
       (Source   : in out Unbounded_Wide_String;
!       Low      : in Positive;
!       High     : in Natural;
!       By       : in Wide_String);
  
     function Insert
!      (Source   : in Unbounded_Wide_String;
!       Before   : in Positive;
!       New_Item : in Wide_String)
!       return     Unbounded_Wide_String;
  
     procedure Insert
       (Source   : in out Unbounded_Wide_String;
!       Before   : in Positive;
!       New_Item : in Wide_String);
  
     function Overwrite
!      (Source   : in Unbounded_Wide_String;
!       Position : in Positive;
!       New_Item : in Wide_String)
!       return     Unbounded_Wide_String;
  
     procedure Overwrite
       (Source    : in out Unbounded_Wide_String;
!       Position  : in Positive;
!       New_Item  : in Wide_String);
  
     function Delete
!      (Source  : in Unbounded_Wide_String;
!       From    : in Positive;
!       Through : in Natural)
!       return    Unbounded_Wide_String;
  
     procedure Delete
       (Source  : in out Unbounded_Wide_String;
!       From    : in Positive;
!       Through : in Natural);
  
     function Trim
!      (Source : in Unbounded_Wide_String;
!       Side   : in Trim_End)
!       return   Unbounded_Wide_String;
  
     procedure Trim
       (Source : in out Unbounded_Wide_String;
!       Side   : in Trim_End);
  
     function Trim
!      (Source : in Unbounded_Wide_String;
!       Left   : in Wide_Maps.Wide_Character_Set;
!       Right  : in Wide_Maps.Wide_Character_Set)
!       return   Unbounded_Wide_String;
  
     procedure Trim
       (Source : in out Unbounded_Wide_String;
!       Left   : in Wide_Maps.Wide_Character_Set;
!       Right  : in Wide_Maps.Wide_Character_Set);
  
     function Head
!      (Source : in Unbounded_Wide_String;
!       Count  : in Natural;
!       Pad    : in Wide_Character := Wide_Space)
!       return   Unbounded_Wide_String;
  
     procedure Head
       (Source : in out Unbounded_Wide_String;
!       Count  : in Natural;
!       Pad    : in Wide_Character := Wide_Space);
  
     function Tail
!      (Source : in Unbounded_Wide_String;
!       Count  : in Natural;
!       Pad    : in Wide_Character := Wide_Space)
!       return   Unbounded_Wide_String;
  
     procedure Tail
       (Source : in out Unbounded_Wide_String;
!       Count  : in Natural;
!       Pad    : in Wide_Character := Wide_Space);
  
     function "*"
!      (Left  : in Natural;
!       Right : in Wide_Character)
!       return  Unbounded_Wide_String;
  
     function "*"
!      (Left  : in Natural;
!       Right : in Wide_String)
!       return  Unbounded_Wide_String;
  
     function "*"
!      (Left  : in Natural;
!       Right : in Unbounded_Wide_String)
!       return  Unbounded_Wide_String;
  
  private
     pragma Inline (Length);
--- 223,339 ----
     ------------------------------------
  
     function Translate
!      (Source  : Unbounded_Wide_String;
!       Mapping : Wide_Maps.Wide_Character_Mapping) return Unbounded_Wide_String;
  
     procedure Translate
       (Source  : in out Unbounded_Wide_String;
        Mapping : Wide_Maps.Wide_Character_Mapping);
  
     function Translate
!      (Source  : Unbounded_Wide_String;
!       Mapping : Wide_Maps.Wide_Character_Mapping_Function)
!       return Unbounded_Wide_String;
  
     procedure Translate
       (Source  : in out Unbounded_Wide_String;
!       Mapping : Wide_Maps.Wide_Character_Mapping_Function);
  
     ---------------------------------------
     -- Wide_String Transformation Subprograms --
     ---------------------------------------
  
     function Replace_Slice
!      (Source : Unbounded_Wide_String;
!       Low    : Positive;
!       High   : Natural;
!       By     : Wide_String) return Unbounded_Wide_String;
  
     procedure Replace_Slice
       (Source   : in out Unbounded_Wide_String;
!       Low      : Positive;
!       High     : Natural;
!       By       : Wide_String);
  
     function Insert
!      (Source   : Unbounded_Wide_String;
!       Before   : Positive;
!       New_Item : Wide_String) return Unbounded_Wide_String;
  
     procedure Insert
       (Source   : in out Unbounded_Wide_String;
!       Before   : Positive;
!       New_Item : Wide_String);
  
     function Overwrite
!      (Source   : Unbounded_Wide_String;
!       Position : Positive;
!       New_Item : Wide_String) return Unbounded_Wide_String;
  
     procedure Overwrite
       (Source    : in out Unbounded_Wide_String;
!       Position  : Positive;
!       New_Item  : Wide_String);
  
     function Delete
!      (Source  : Unbounded_Wide_String;
!       From    : Positive;
!       Through : Natural) return Unbounded_Wide_String;
  
     procedure Delete
       (Source  : in out Unbounded_Wide_String;
!       From    : Positive;
!       Through : Natural);
  
     function Trim
!      (Source : Unbounded_Wide_String;
!       Side   : Trim_End) return Unbounded_Wide_String;
  
     procedure Trim
       (Source : in out Unbounded_Wide_String;
!       Side   : Trim_End);
  
     function Trim
!      (Source : Unbounded_Wide_String;
!       Left   : Wide_Maps.Wide_Character_Set;
!       Right  : Wide_Maps.Wide_Character_Set) return Unbounded_Wide_String;
  
     procedure Trim
       (Source : in out Unbounded_Wide_String;
!       Left   : Wide_Maps.Wide_Character_Set;
!       Right  : Wide_Maps.Wide_Character_Set);
  
     function Head
!      (Source : Unbounded_Wide_String;
!       Count  : Natural;
!       Pad    : Wide_Character := Wide_Space) return Unbounded_Wide_String;
  
     procedure Head
       (Source : in out Unbounded_Wide_String;
!       Count  : Natural;
!       Pad    : Wide_Character := Wide_Space);
  
     function Tail
!      (Source : Unbounded_Wide_String;
!       Count  : Natural;
!       Pad    : Wide_Character := Wide_Space) return Unbounded_Wide_String;
  
     procedure Tail
       (Source : in out Unbounded_Wide_String;
!       Count  : Natural;
!       Pad    : Wide_Character := Wide_Space);
  
     function "*"
!      (Left  : Natural;
!       Right : Wide_Character) return Unbounded_Wide_String;
  
     function "*"
!      (Left  : Natural;
!       Right : Wide_String) return Unbounded_Wide_String;
  
     function "*"
!      (Left  : Natural;
!       Right : Unbounded_Wide_String) return Unbounded_Wide_String;
  
  private
     pragma Inline (Length);
diff -Nrcpad gcc-3.4.3/gcc/ada/a-stzbou.adb gcc-4.0.0/gcc/ada/a-stzbou.adb
*** gcc-3.4.3/gcc/ada/a-stzbou.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-stzbou.adb	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,96 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --        A D A . S T R I N G S . W I D E _ W I D E _ B O U N D E D         --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package body Ada.Strings.Wide_Wide_Bounded is
+ 
+    package body Generic_Bounded_Length is
+ 
+       ---------
+       -- "*" --
+       ---------
+ 
+       function "*"
+         (Left  : Natural;
+          Right : Wide_Wide_Character) return Bounded_Wide_Wide_String
+       is
+       begin
+          return Times (Left, Right, Max_Length);
+       end "*";
+ 
+       function "*"
+         (Left  : Natural;
+          Right : Wide_Wide_String) return Bounded_Wide_Wide_String
+       is
+       begin
+          return Times (Left, Right, Max_Length);
+       end "*";
+ 
+       ---------------
+       -- Replicate --
+       ---------------
+ 
+       function Replicate
+         (Count : Natural;
+          Item  : Wide_Wide_Character;
+          Drop  : Strings.Truncation := Strings.Error)
+          return Bounded_Wide_Wide_String
+       is
+       begin
+          return Super_Replicate (Count, Item, Drop, Max_Length);
+       end Replicate;
+ 
+       function Replicate
+         (Count : Natural;
+          Item  : Wide_Wide_String;
+          Drop  : Strings.Truncation := Strings.Error)
+          return Bounded_Wide_Wide_String
+       is
+       begin
+          return Super_Replicate (Count, Item, Drop, Max_Length);
+       end Replicate;
+ 
+       ---------------------------------
+       -- To_Bounded_Wide_Wide_String --
+       ---------------------------------
+ 
+       function To_Bounded_Wide_Wide_String
+         (Source : Wide_Wide_String;
+          Drop   : Strings.Truncation := Strings.Error)
+          return Bounded_Wide_Wide_String
+       is
+       begin
+          return To_Super_String (Source, Max_Length, Drop);
+       end To_Bounded_Wide_Wide_String;
+ 
+    end Generic_Bounded_Length;
+ end Ada.Strings.Wide_Wide_Bounded;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-stzbou.ads gcc-4.0.0/gcc/ada/a-stzbou.ads
*** gcc-3.4.3/gcc/ada/a-stzbou.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-stzbou.ads	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,920 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --        A D A . S T R I N G S . W I D E _ W I D E _ B O U N D E D         --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Strings.Wide_Wide_Maps;
+ with Ada.Strings.Wide_Wide_Superbounded;
+ 
+ package Ada.Strings.Wide_Wide_Bounded is
+ pragma Preelaborate (Wide_Wide_Bounded);
+ 
+    generic
+       Max : Positive;
+       --  Maximum length of a Bounded_Wide_Wide_String
+ 
+    package Generic_Bounded_Length is
+ 
+       Max_Length : constant Positive := Max;
+ 
+       type Bounded_Wide_Wide_String is private;
+ 
+       Null_Bounded_Wide_Wide_String : constant Bounded_Wide_Wide_String;
+ 
+       subtype Length_Range is Natural range 0 .. Max_Length;
+ 
+       function Length (Source : Bounded_Wide_Wide_String) return Length_Range;
+ 
+       --------------------------------------------------------
+       -- Conversion, Concatenation, and Selection Functions --
+       --------------------------------------------------------
+ 
+       function To_Bounded_Wide_Wide_String
+         (Source : Wide_Wide_String;
+          Drop   : Truncation := Error) return Bounded_Wide_Wide_String;
+ 
+       function To_Wide_Wide_String
+         (Source : Bounded_Wide_Wide_String) return Wide_Wide_String;
+ 
+       procedure Set_Bounded_Wide_Wide_String
+         (Target : out Bounded_Wide_Wide_String;
+          Source : Wide_Wide_String;
+          Drop   : Truncation := Error);
+       pragma Ada_05 (Set_Bounded_Wide_Wide_String);
+ 
+       function Append
+         (Left  : Bounded_Wide_Wide_String;
+          Right : Bounded_Wide_Wide_String;
+          Drop  : Truncation  := Error) return Bounded_Wide_Wide_String;
+ 
+       function Append
+         (Left  : Bounded_Wide_Wide_String;
+          Right : Wide_Wide_String;
+          Drop  : Truncation := Error) return Bounded_Wide_Wide_String;
+ 
+       function Append
+         (Left  : Wide_Wide_String;
+          Right : Bounded_Wide_Wide_String;
+          Drop  : Truncation := Error) return Bounded_Wide_Wide_String;
+ 
+       function Append
+         (Left  : Bounded_Wide_Wide_String;
+          Right : Wide_Wide_Character;
+          Drop  : Truncation := Error) return Bounded_Wide_Wide_String;
+ 
+       function Append
+         (Left  : Wide_Wide_Character;
+          Right : Bounded_Wide_Wide_String;
+          Drop  : Truncation := Error) return Bounded_Wide_Wide_String;
+ 
+       procedure Append
+         (Source   : in out Bounded_Wide_Wide_String;
+          New_Item : Bounded_Wide_Wide_String;
+          Drop     : Truncation  := Error);
+ 
+       procedure Append
+         (Source   : in out Bounded_Wide_Wide_String;
+          New_Item : Wide_Wide_String;
+          Drop     : Truncation  := Error);
+ 
+       procedure Append
+         (Source   : in out Bounded_Wide_Wide_String;
+          New_Item : Wide_Wide_Character;
+          Drop     : Truncation  := Error);
+ 
+       function "&"
+         (Left  : Bounded_Wide_Wide_String;
+          Right : Bounded_Wide_Wide_String) return Bounded_Wide_Wide_String;
+ 
+       function "&"
+         (Left  : Bounded_Wide_Wide_String;
+          Right : Wide_Wide_String) return Bounded_Wide_Wide_String;
+ 
+       function "&"
+         (Left  : Wide_Wide_String;
+          Right : Bounded_Wide_Wide_String) return Bounded_Wide_Wide_String;
+ 
+       function "&"
+         (Left  : Bounded_Wide_Wide_String;
+          Right : Wide_Wide_Character) return Bounded_Wide_Wide_String;
+ 
+       function "&"
+         (Left  : Wide_Wide_Character;
+          Right : Bounded_Wide_Wide_String) return Bounded_Wide_Wide_String;
+ 
+       function Element
+         (Source : Bounded_Wide_Wide_String;
+          Index  : Positive) return Wide_Wide_Character;
+ 
+       procedure Replace_Element
+         (Source : in out Bounded_Wide_Wide_String;
+          Index  : Positive;
+          By     : Wide_Wide_Character);
+ 
+       function Slice
+         (Source : Bounded_Wide_Wide_String;
+          Low    : Positive;
+          High   : Natural) return Wide_Wide_String;
+ 
+       function Bounded_Slice
+         (Source : Bounded_Wide_Wide_String;
+          Low    : Positive;
+          High   : Natural) return Bounded_Wide_Wide_String;
+       pragma Ada_05 (Bounded_Slice);
+ 
+       procedure Bounded_Slice
+         (Source : Bounded_Wide_Wide_String;
+          Target : out Bounded_Wide_Wide_String;
+          Low    : Positive;
+          High   : Natural);
+       pragma Ada_05 (Bounded_Slice);
+ 
+       function "="
+         (Left  : Bounded_Wide_Wide_String;
+          Right : Bounded_Wide_Wide_String) return Boolean;
+ 
+       function "="
+         (Left  : Bounded_Wide_Wide_String;
+          Right : Wide_Wide_String) return Boolean;
+ 
+       function "="
+         (Left  : Wide_Wide_String;
+          Right : Bounded_Wide_Wide_String) return Boolean;
+ 
+       function "<"
+         (Left  : Bounded_Wide_Wide_String;
+          Right : Bounded_Wide_Wide_String) return Boolean;
+ 
+       function "<"
+         (Left  : Bounded_Wide_Wide_String;
+          Right : Wide_Wide_String) return Boolean;
+ 
+       function "<"
+         (Left  : Wide_Wide_String;
+          Right : Bounded_Wide_Wide_String) return Boolean;
+ 
+       function "<="
+         (Left  : Bounded_Wide_Wide_String;
+          Right : Bounded_Wide_Wide_String) return Boolean;
+ 
+       function "<="
+         (Left  : Bounded_Wide_Wide_String;
+          Right : Wide_Wide_String) return Boolean;
+ 
+       function "<="
+         (Left  : Wide_Wide_String;
+          Right : Bounded_Wide_Wide_String) return Boolean;
+ 
+       function ">"
+         (Left  : Bounded_Wide_Wide_String;
+          Right : Bounded_Wide_Wide_String) return Boolean;
+ 
+       function ">"
+         (Left  : Bounded_Wide_Wide_String;
+          Right : Wide_Wide_String) return Boolean;
+ 
+       function ">"
+         (Left  : Wide_Wide_String;
+          Right : Bounded_Wide_Wide_String) return Boolean;
+ 
+       function ">="
+         (Left  : Bounded_Wide_Wide_String;
+          Right : Bounded_Wide_Wide_String) return Boolean;
+ 
+       function ">="
+         (Left  : Bounded_Wide_Wide_String;
+          Right : Wide_Wide_String) return Boolean;
+ 
+       function ">="
+         (Left  : Wide_Wide_String;
+          Right : Bounded_Wide_Wide_String) return Boolean;
+ 
+       ----------------------
+       -- Search Functions --
+       ----------------------
+ 
+       function Index
+         (Source  : Bounded_Wide_Wide_String;
+          Pattern : Wide_Wide_String;
+          Going   : Direction := Forward;
+          Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping :=
+                      Wide_Wide_Maps.Identity)
+          return Natural;
+ 
+       function Index
+         (Source  : Bounded_Wide_Wide_String;
+          Pattern : Wide_Wide_String;
+          Going   : Direction := Forward;
+          Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
+          return Natural;
+ 
+       function Index
+         (Source : Bounded_Wide_Wide_String;
+          Set    : Wide_Wide_Maps.Wide_Wide_Character_Set;
+          Test   : Membership := Inside;
+          Going  : Direction  := Forward) return Natural;
+ 
+       function Index
+         (Source  : Bounded_Wide_Wide_String;
+          Pattern : Wide_Wide_String;
+          From    : Positive;
+          Going   : Direction := Forward;
+          Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping :=
+                      Wide_Wide_Maps.Identity)
+          return Natural;
+       pragma Ada_05 (Index);
+ 
+       function Index
+         (Source  : Bounded_Wide_Wide_String;
+          Pattern : Wide_Wide_String;
+          From    : Positive;
+          Going   : Direction := Forward;
+          Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
+          return Natural;
+       pragma Ada_05 (Index);
+ 
+       function Index
+         (Source : Bounded_Wide_Wide_String;
+          Set    : Wide_Wide_Maps.Wide_Wide_Character_Set;
+          From   : Positive;
+          Test   : Membership := Inside;
+          Going  : Direction := Forward) return Natural;
+       pragma Ada_05 (Index);
+ 
+       function Index_Non_Blank
+         (Source : Bounded_Wide_Wide_String;
+          Going  : Direction := Forward) return Natural;
+ 
+       function Index_Non_Blank
+         (Source : Bounded_Wide_Wide_String;
+          From   : Positive;
+          Going  : Direction := Forward) return Natural;
+       pragma Ada_05 (Index_Non_Blank);
+ 
+       function Count
+         (Source  : Bounded_Wide_Wide_String;
+          Pattern : Wide_Wide_String;
+          Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping :=
+                      Wide_Wide_Maps.Identity)
+          return Natural;
+ 
+       function Count
+         (Source  : Bounded_Wide_Wide_String;
+          Pattern : Wide_Wide_String;
+          Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
+          return Natural;
+ 
+       function Count
+         (Source : Bounded_Wide_Wide_String;
+          Set    : Wide_Wide_Maps.Wide_Wide_Character_Set) return Natural;
+ 
+       procedure Find_Token
+         (Source : Bounded_Wide_Wide_String;
+          Set    : Wide_Wide_Maps.Wide_Wide_Character_Set;
+          Test   : Membership;
+          First  : out Positive;
+          Last   : out Natural);
+ 
+       ------------------------------------
+       -- String Translation Subprograms --
+       ------------------------------------
+ 
+       function Translate
+         (Source  : Bounded_Wide_Wide_String;
+          Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping)
+          return Bounded_Wide_Wide_String;
+ 
+       procedure Translate
+         (Source  : in out Bounded_Wide_Wide_String;
+          Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping);
+ 
+       function Translate
+         (Source  : Bounded_Wide_Wide_String;
+          Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
+          return Bounded_Wide_Wide_String;
+ 
+       procedure Translate
+         (Source  : in out Bounded_Wide_Wide_String;
+          Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function);
+ 
+       ---------------------------------------
+       -- String Transformation Subprograms --
+       ---------------------------------------
+ 
+       function Replace_Slice
+         (Source : Bounded_Wide_Wide_String;
+          Low    : Positive;
+          High   : Natural;
+          By     : Wide_Wide_String;
+          Drop   : Truncation := Error) return Bounded_Wide_Wide_String;
+ 
+       procedure Replace_Slice
+         (Source   : in out Bounded_Wide_Wide_String;
+          Low      : Positive;
+          High     : Natural;
+          By       : Wide_Wide_String;
+          Drop     : Truncation := Error);
+ 
+       function Insert
+         (Source   : Bounded_Wide_Wide_String;
+          Before   : Positive;
+          New_Item : Wide_Wide_String;
+          Drop     : Truncation := Error) return Bounded_Wide_Wide_String;
+ 
+       procedure Insert
+         (Source   : in out Bounded_Wide_Wide_String;
+          Before   : Positive;
+          New_Item : Wide_Wide_String;
+          Drop     : Truncation := Error);
+ 
+       function Overwrite
+         (Source   : Bounded_Wide_Wide_String;
+          Position : Positive;
+          New_Item : Wide_Wide_String;
+          Drop     : Truncation := Error) return Bounded_Wide_Wide_String;
+ 
+       procedure Overwrite
+         (Source    : in out Bounded_Wide_Wide_String;
+          Position  : Positive;
+          New_Item  : Wide_Wide_String;
+          Drop      : Truncation := Error);
+ 
+       function Delete
+         (Source  : Bounded_Wide_Wide_String;
+          From    : Positive;
+          Through : Natural) return Bounded_Wide_Wide_String;
+ 
+       procedure Delete
+         (Source  : in out Bounded_Wide_Wide_String;
+          From    : Positive;
+          Through : Natural);
+ 
+       ---------------------------------
+       -- String Selector Subprograms --
+       ---------------------------------
+ 
+       function Trim
+         (Source : Bounded_Wide_Wide_String;
+          Side   : Trim_End) return Bounded_Wide_Wide_String;
+ 
+       procedure Trim
+         (Source : in out Bounded_Wide_Wide_String;
+          Side   : Trim_End);
+ 
+       function Trim
+         (Source : Bounded_Wide_Wide_String;
+           Left  : Wide_Wide_Maps.Wide_Wide_Character_Set;
+           Right : Wide_Wide_Maps.Wide_Wide_Character_Set)
+           return Bounded_Wide_Wide_String;
+ 
+       procedure Trim
+         (Source : in out Bounded_Wide_Wide_String;
+          Left   : Wide_Wide_Maps.Wide_Wide_Character_Set;
+          Right  : Wide_Wide_Maps.Wide_Wide_Character_Set);
+ 
+       function Head
+         (Source : Bounded_Wide_Wide_String;
+          Count  : Natural;
+          Pad    : Wide_Wide_Character := Wide_Wide_Space;
+          Drop   : Truncation := Error) return Bounded_Wide_Wide_String;
+ 
+       procedure Head
+         (Source : in out Bounded_Wide_Wide_String;
+          Count  : Natural;
+          Pad    : Wide_Wide_Character  := Wide_Wide_Space;
+          Drop   : Truncation := Error);
+ 
+       function Tail
+         (Source : Bounded_Wide_Wide_String;
+          Count  : Natural;
+          Pad    : Wide_Wide_Character := Wide_Wide_Space;
+          Drop   : Truncation     := Error) return Bounded_Wide_Wide_String;
+ 
+       procedure Tail
+         (Source : in out Bounded_Wide_Wide_String;
+          Count  : Natural;
+          Pad    : Wide_Wide_Character := Wide_Wide_Space;
+          Drop   : Truncation     := Error);
+ 
+       ------------------------------------
+       -- String Constructor Subprograms --
+       ------------------------------------
+ 
+       function "*"
+         (Left  : Natural;
+          Right : Wide_Wide_Character) return Bounded_Wide_Wide_String;
+ 
+       function "*"
+         (Left  : Natural;
+          Right : Wide_Wide_String) return Bounded_Wide_Wide_String;
+ 
+       function "*"
+         (Left  : Natural;
+          Right : Bounded_Wide_Wide_String) return Bounded_Wide_Wide_String;
+ 
+       function Replicate
+         (Count : Natural;
+          Item  : Wide_Wide_Character;
+          Drop  : Truncation := Error) return Bounded_Wide_Wide_String;
+ 
+       function Replicate
+         (Count : Natural;
+          Item  : Wide_Wide_String;
+          Drop  : Truncation := Error) return Bounded_Wide_Wide_String;
+ 
+       function Replicate
+         (Count : Natural;
+          Item  : Bounded_Wide_Wide_String;
+          Drop  : Truncation := Error) return Bounded_Wide_Wide_String;
+ 
+    private
+       --  Most of the implementation is in the separate non generic package
+       --  Ada.Strings.Wide_Wide_Superbounded. Type Bounded_Wide_Wide_String is
+       --  derived from type Wide_Wide_Superbounded.Super_String with the
+       --  maximum length constraint. In almost all cases, the routines in
+       --  Wide_Wide_Superbounded can be called with no requirement to pass the
+       --  maximum length explicitly, since there is at least one
+       --  Bounded_Wide_Wide_String argument from which the maximum length can
+       --  be obtained. For all such routines, the implementation in this
+       --  private part is simply renaming of the corresponding routine in the
+       --  super bouded package.
+ 
+       --  The five exceptions are the * and Replicate routines operating on
+       --  character values. For these cases, we have a routine in the body
+       --  that calls the superbounded routine passing the maximum length
+       --  explicitly as an extra parameter.
+ 
+       type Bounded_Wide_Wide_String is
+         new Wide_Wide_Superbounded.Super_String (Max_Length);
+       --  Deriving Bounded_Wide_Wide_String from
+       --  Wide_Wide_Superbounded.Super_String is the real trick, it ensures
+       --  that the type Bounded_Wide_Wide_String declared in the generic
+       --  instantiation is compatible with the Super_String type declared in
+       --  the Wide_Wide_Superbounded package.
+ 
+       Null_Bounded_Wide_Wide_String : constant Bounded_Wide_Wide_String :=
+                                    (Max_Length         => Max_Length,
+                                     Current_Length     => 0,
+                                     Data               =>
+                                       (1 .. Max_Length =>
+                                         Wide_Wide_Superbounded.Wide_Wide_NUL));
+ 
+       pragma Inline (To_Bounded_Wide_Wide_String);
+ 
+       procedure Set_Bounded_Wide_Wide_String
+         (Target : out Bounded_Wide_Wide_String;
+          Source : Wide_Wide_String;
+          Drop   : Truncation := Error)
+          renames Set_Super_String;
+ 
+       function Length
+         (Source : Bounded_Wide_Wide_String) return Length_Range
+          renames Super_Length;
+ 
+       function To_Wide_Wide_String
+         (Source : Bounded_Wide_Wide_String) return Wide_Wide_String
+          renames Super_To_String;
+ 
+       function Append
+         (Left  : Bounded_Wide_Wide_String;
+          Right : Bounded_Wide_Wide_String;
+          Drop  : Truncation  := Error) return Bounded_Wide_Wide_String
+          renames Super_Append;
+ 
+       function Append
+         (Left  : Bounded_Wide_Wide_String;
+          Right : Wide_Wide_String;
+          Drop  : Truncation := Error) return Bounded_Wide_Wide_String
+          renames Super_Append;
+ 
+       function Append
+         (Left  : Wide_Wide_String;
+          Right : Bounded_Wide_Wide_String;
+          Drop  : Truncation := Error) return Bounded_Wide_Wide_String
+          renames Super_Append;
+ 
+       function Append
+         (Left  : Bounded_Wide_Wide_String;
+          Right : Wide_Wide_Character;
+          Drop  : Truncation := Error) return Bounded_Wide_Wide_String
+          renames Super_Append;
+ 
+       function Append
+         (Left  : Wide_Wide_Character;
+          Right : Bounded_Wide_Wide_String;
+          Drop  : Truncation := Error) return Bounded_Wide_Wide_String
+          renames Super_Append;
+ 
+       procedure Append
+         (Source   : in out Bounded_Wide_Wide_String;
+          New_Item : Bounded_Wide_Wide_String;
+          Drop     : Truncation  := Error)
+          renames Super_Append;
+ 
+       procedure Append
+         (Source   : in out Bounded_Wide_Wide_String;
+          New_Item : Wide_Wide_String;
+          Drop     : Truncation  := Error)
+          renames Super_Append;
+ 
+       procedure Append
+         (Source   : in out Bounded_Wide_Wide_String;
+          New_Item : Wide_Wide_Character;
+          Drop     : Truncation  := Error)
+          renames Super_Append;
+ 
+       function "&"
+         (Left  : Bounded_Wide_Wide_String;
+          Right : Bounded_Wide_Wide_String) return Bounded_Wide_Wide_String
+          renames Concat;
+ 
+       function "&"
+         (Left  : Bounded_Wide_Wide_String;
+          Right : Wide_Wide_String) return Bounded_Wide_Wide_String
+          renames Concat;
+ 
+       function "&"
+         (Left  : Wide_Wide_String;
+          Right : Bounded_Wide_Wide_String) return Bounded_Wide_Wide_String
+          renames Concat;
+ 
+       function "&"
+         (Left  : Bounded_Wide_Wide_String;
+          Right : Wide_Wide_Character) return Bounded_Wide_Wide_String
+          renames Concat;
+ 
+       function "&"
+         (Left  : Wide_Wide_Character;
+          Right : Bounded_Wide_Wide_String) return Bounded_Wide_Wide_String
+          renames Concat;
+ 
+       function Element
+         (Source : Bounded_Wide_Wide_String;
+          Index  : Positive) return Wide_Wide_Character
+          renames Super_Element;
+ 
+       procedure Replace_Element
+         (Source : in out Bounded_Wide_Wide_String;
+          Index  : Positive;
+          By     : Wide_Wide_Character)
+          renames Super_Replace_Element;
+ 
+       function Slice
+         (Source : Bounded_Wide_Wide_String;
+          Low    : Positive;
+          High   : Natural) return Wide_Wide_String
+          renames Super_Slice;
+ 
+       function Bounded_Slice
+         (Source : Bounded_Wide_Wide_String;
+          Low    : Positive;
+          High   : Natural) return Bounded_Wide_Wide_String
+          renames Super_Slice;
+ 
+       procedure Bounded_Slice
+         (Source : Bounded_Wide_Wide_String;
+          Target : out Bounded_Wide_Wide_String;
+          Low    : Positive;
+          High   : Natural)
+          renames Super_Slice;
+ 
+       function "="
+         (Left  : Bounded_Wide_Wide_String;
+          Right : Bounded_Wide_Wide_String) return Boolean
+          renames Equal;
+ 
+       function "="
+         (Left  : Bounded_Wide_Wide_String;
+          Right : Wide_Wide_String) return Boolean
+          renames Equal;
+ 
+       function "="
+         (Left  : Wide_Wide_String;
+          Right : Bounded_Wide_Wide_String) return Boolean
+          renames Equal;
+ 
+       function "<"
+         (Left  : Bounded_Wide_Wide_String;
+          Right : Bounded_Wide_Wide_String) return Boolean
+          renames Less;
+ 
+       function "<"
+         (Left  : Bounded_Wide_Wide_String;
+          Right : Wide_Wide_String) return Boolean
+          renames Less;
+ 
+       function "<"
+         (Left  : Wide_Wide_String;
+          Right : Bounded_Wide_Wide_String) return Boolean
+          renames Less;
+ 
+       function "<="
+         (Left  : Bounded_Wide_Wide_String;
+          Right : Bounded_Wide_Wide_String) return Boolean
+          renames Less_Or_Equal;
+ 
+       function "<="
+         (Left  : Bounded_Wide_Wide_String;
+          Right : Wide_Wide_String) return Boolean
+          renames Less_Or_Equal;
+ 
+       function "<="
+         (Left  : Wide_Wide_String;
+          Right : Bounded_Wide_Wide_String) return Boolean
+          renames Less_Or_Equal;
+ 
+       function ">"
+         (Left  : Bounded_Wide_Wide_String;
+          Right : Bounded_Wide_Wide_String) return Boolean
+          renames Greater;
+ 
+       function ">"
+         (Left  : Bounded_Wide_Wide_String;
+          Right : Wide_Wide_String) return Boolean
+          renames Greater;
+ 
+       function ">"
+         (Left  : Wide_Wide_String;
+          Right : Bounded_Wide_Wide_String) return Boolean
+          renames Greater;
+ 
+       function ">="
+         (Left  : Bounded_Wide_Wide_String;
+          Right : Bounded_Wide_Wide_String) return Boolean
+          renames Greater_Or_Equal;
+ 
+       function ">="
+         (Left  : Bounded_Wide_Wide_String;
+          Right : Wide_Wide_String) return Boolean
+          renames Greater_Or_Equal;
+ 
+       function ">="
+         (Left  : Wide_Wide_String;
+          Right : Bounded_Wide_Wide_String) return Boolean
+          renames Greater_Or_Equal;
+ 
+       function Index
+         (Source  : Bounded_Wide_Wide_String;
+          Pattern : Wide_Wide_String;
+          Going   : Direction := Forward;
+          Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping :=
+                      Wide_Wide_Maps.Identity)
+          return Natural
+          renames Super_Index;
+ 
+       function Index
+         (Source  : Bounded_Wide_Wide_String;
+          Pattern : Wide_Wide_String;
+          Going   : Direction := Forward;
+          Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
+          return Natural
+          renames Super_Index;
+ 
+       function Index
+         (Source : Bounded_Wide_Wide_String;
+          Set    : Wide_Wide_Maps.Wide_Wide_Character_Set;
+          Test   : Membership := Inside;
+          Going  : Direction  := Forward) return Natural
+          renames Super_Index;
+ 
+       function Index
+         (Source  : Bounded_Wide_Wide_String;
+          Pattern : Wide_Wide_String;
+          From    : Positive;
+          Going   : Direction := Forward;
+          Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping :=
+                      Wide_Wide_Maps.Identity)
+          return Natural
+          renames Super_Index;
+ 
+       function Index
+         (Source  : Bounded_Wide_Wide_String;
+          Pattern : Wide_Wide_String;
+          From    : Positive;
+          Going   : Direction := Forward;
+          Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
+          return Natural
+       renames Super_Index;
+ 
+       function Index
+         (Source : Bounded_Wide_Wide_String;
+          Set    : Wide_Wide_Maps.Wide_Wide_Character_Set;
+          From   : Positive;
+          Test   : Membership := Inside;
+          Going  : Direction := Forward) return Natural
+       renames Super_Index;
+ 
+       function Index_Non_Blank
+         (Source : Bounded_Wide_Wide_String;
+          Going  : Direction := Forward) return Natural
+          renames Super_Index_Non_Blank;
+ 
+       function Index_Non_Blank
+         (Source : Bounded_Wide_Wide_String;
+          From   : Positive;
+          Going  : Direction := Forward) return Natural
+          renames Super_Index_Non_Blank;
+ 
+       function Count
+         (Source  : Bounded_Wide_Wide_String;
+          Pattern : Wide_Wide_String;
+          Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping :=
+                      Wide_Wide_Maps.Identity)
+          return Natural
+          renames Super_Count;
+ 
+       function Count
+         (Source  : Bounded_Wide_Wide_String;
+          Pattern : Wide_Wide_String;
+          Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
+          return Natural
+          renames Super_Count;
+ 
+       function Count
+         (Source : Bounded_Wide_Wide_String;
+          Set    : Wide_Wide_Maps.Wide_Wide_Character_Set) return Natural
+          renames Super_Count;
+ 
+       procedure Find_Token
+         (Source : Bounded_Wide_Wide_String;
+          Set    : Wide_Wide_Maps.Wide_Wide_Character_Set;
+          Test   : Membership;
+          First  : out Positive;
+          Last   : out Natural)
+          renames Super_Find_Token;
+ 
+       function Translate
+         (Source  : Bounded_Wide_Wide_String;
+          Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping)
+          return Bounded_Wide_Wide_String
+          renames Super_Translate;
+ 
+       procedure Translate
+         (Source   : in out Bounded_Wide_Wide_String;
+          Mapping  : Wide_Wide_Maps.Wide_Wide_Character_Mapping)
+          renames Super_Translate;
+ 
+       function Translate
+         (Source  : Bounded_Wide_Wide_String;
+          Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
+          return Bounded_Wide_Wide_String
+          renames Super_Translate;
+ 
+       procedure Translate
+         (Source  : in out Bounded_Wide_Wide_String;
+          Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
+          renames Super_Translate;
+ 
+       function Replace_Slice
+         (Source : Bounded_Wide_Wide_String;
+          Low    : Positive;
+          High   : Natural;
+          By     : Wide_Wide_String;
+          Drop   : Truncation := Error) return Bounded_Wide_Wide_String
+          renames Super_Replace_Slice;
+ 
+       procedure Replace_Slice
+         (Source   : in out Bounded_Wide_Wide_String;
+          Low      : Positive;
+          High     : Natural;
+          By       : Wide_Wide_String;
+          Drop     : Truncation := Error)
+          renames Super_Replace_Slice;
+ 
+       function Insert
+         (Source   : Bounded_Wide_Wide_String;
+          Before   : Positive;
+          New_Item : Wide_Wide_String;
+          Drop     : Truncation := Error) return Bounded_Wide_Wide_String
+          renames Super_Insert;
+ 
+       procedure Insert
+         (Source   : in out Bounded_Wide_Wide_String;
+          Before   : Positive;
+          New_Item : Wide_Wide_String;
+          Drop     : Truncation := Error)
+          renames Super_Insert;
+ 
+       function Overwrite
+         (Source   : Bounded_Wide_Wide_String;
+          Position : Positive;
+          New_Item : Wide_Wide_String;
+          Drop     : Truncation := Error) return Bounded_Wide_Wide_String
+          renames Super_Overwrite;
+ 
+       procedure Overwrite
+         (Source    : in out Bounded_Wide_Wide_String;
+          Position  : Positive;
+          New_Item  : Wide_Wide_String;
+          Drop      : Truncation := Error)
+          renames Super_Overwrite;
+ 
+       function Delete
+         (Source  : Bounded_Wide_Wide_String;
+          From    : Positive;
+          Through : Natural) return Bounded_Wide_Wide_String
+          renames Super_Delete;
+ 
+       procedure Delete
+         (Source  : in out Bounded_Wide_Wide_String;
+          From    : Positive;
+          Through : Natural)
+          renames Super_Delete;
+ 
+       function Trim
+         (Source : Bounded_Wide_Wide_String;
+          Side   : Trim_End) return Bounded_Wide_Wide_String
+          renames Super_Trim;
+ 
+       procedure Trim
+         (Source : in out Bounded_Wide_Wide_String;
+          Side   : Trim_End)
+          renames Super_Trim;
+ 
+       function Trim
+         (Source : Bounded_Wide_Wide_String;
+          Left   : Wide_Wide_Maps.Wide_Wide_Character_Set;
+          Right  : Wide_Wide_Maps.Wide_Wide_Character_Set)
+          return Bounded_Wide_Wide_String
+          renames Super_Trim;
+ 
+       procedure Trim
+         (Source : in out Bounded_Wide_Wide_String;
+          Left   : Wide_Wide_Maps.Wide_Wide_Character_Set;
+          Right  : Wide_Wide_Maps.Wide_Wide_Character_Set)
+          renames Super_Trim;
+ 
+       function Head
+         (Source : Bounded_Wide_Wide_String;
+          Count  : Natural;
+          Pad    : Wide_Wide_Character := Wide_Wide_Space;
+          Drop   : Truncation     := Error) return Bounded_Wide_Wide_String
+          renames Super_Head;
+ 
+       procedure Head
+         (Source : in out Bounded_Wide_Wide_String;
+          Count  : Natural;
+          Pad    : Wide_Wide_Character := Wide_Wide_Space;
+          Drop   : Truncation     := Error)
+          renames Super_Head;
+ 
+       function Tail
+         (Source : Bounded_Wide_Wide_String;
+          Count  : Natural;
+          Pad    : Wide_Wide_Character := Wide_Wide_Space;
+          Drop   : Truncation     := Error) return Bounded_Wide_Wide_String
+          renames Super_Tail;
+ 
+       procedure Tail
+         (Source : in out Bounded_Wide_Wide_String;
+          Count  : Natural;
+          Pad    : Wide_Wide_Character := Wide_Wide_Space;
+          Drop   : Truncation := Error)
+          renames Super_Tail;
+ 
+       function "*"
+         (Left  : Natural;
+          Right : Bounded_Wide_Wide_String) return Bounded_Wide_Wide_String
+          renames Times;
+ 
+       function Replicate
+         (Count : Natural;
+          Item  : Bounded_Wide_Wide_String;
+          Drop  : Truncation := Error) return Bounded_Wide_Wide_String
+          renames Super_Replicate;
+ 
+    end Generic_Bounded_Length;
+ 
+ end Ada.Strings.Wide_Wide_Bounded;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-stzfix.adb gcc-4.0.0/gcc/ada/a-stzfix.adb
*** gcc-3.4.3/gcc/ada/a-stzfix.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-stzfix.adb	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,681 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --               A D A . S T R I N G S . W I D E _ F I X E D                --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Strings.Wide_Wide_Maps; use Ada.Strings.Wide_Wide_Maps;
+ with Ada.Strings.Wide_Wide_Search;
+ 
+ package body Ada.Strings.Wide_Wide_Fixed is
+ 
+    ------------------------
+    -- Search Subprograms --
+    ------------------------
+ 
+    function Index
+      (Source  : Wide_Wide_String;
+       Pattern : Wide_Wide_String;
+       Going   : Direction := Forward;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping :=
+                   Wide_Wide_Maps.Identity)
+       return Natural
+    renames Ada.Strings.Wide_Wide_Search.Index;
+ 
+    function Index
+      (Source  : Wide_Wide_String;
+       Pattern : Wide_Wide_String;
+       Going   : Direction := Forward;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
+       return Natural
+    renames Ada.Strings.Wide_Wide_Search.Index;
+ 
+    function Index
+      (Source : Wide_Wide_String;
+       Set    : Wide_Wide_Maps.Wide_Wide_Character_Set;
+       Test   : Membership := Inside;
+       Going  : Direction  := Forward) return Natural
+    renames Ada.Strings.Wide_Wide_Search.Index;
+ 
+    function Index
+      (Source  : Wide_Wide_String;
+       Pattern : Wide_Wide_String;
+       From    : Positive;
+       Going   : Direction := Forward;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping :=
+                   Wide_Wide_Maps.Identity)
+       return Natural
+    renames Ada.Strings.Wide_Wide_Search.Index;
+ 
+    function Index
+      (Source  : Wide_Wide_String;
+       Pattern : Wide_Wide_String;
+       From    : Positive;
+       Going   : Direction := Forward;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
+       return Natural
+    renames Ada.Strings.Wide_Wide_Search.Index;
+ 
+    function Index
+      (Source  : Wide_Wide_String;
+       Set     : Wide_Wide_Maps.Wide_Wide_Character_Set;
+       From    : Positive;
+       Test    : Membership := Inside;
+       Going   : Direction := Forward) return Natural
+    renames Ada.Strings.Wide_Wide_Search.Index;
+ 
+    function Index_Non_Blank
+      (Source : Wide_Wide_String;
+       Going  : Direction := Forward) return Natural
+       renames Ada.Strings.Wide_Wide_Search.Index_Non_Blank;
+ 
+    function Index_Non_Blank
+      (Source : Wide_Wide_String;
+       From   : Positive;
+       Going  : Direction := Forward) return Natural
+    renames Ada.Strings.Wide_Wide_Search.Index_Non_Blank;
+ 
+    function Count
+      (Source  : Wide_Wide_String;
+       Pattern : Wide_Wide_String;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping :=
+                   Wide_Wide_Maps.Identity)
+       return Natural
+    renames Ada.Strings.Wide_Wide_Search.Count;
+ 
+    function Count
+      (Source  : Wide_Wide_String;
+       Pattern : Wide_Wide_String;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
+       return Natural
+    renames Ada.Strings.Wide_Wide_Search.Count;
+ 
+    function Count
+      (Source : Wide_Wide_String;
+       Set    : Wide_Wide_Maps.Wide_Wide_Character_Set) return Natural
+    renames Ada.Strings.Wide_Wide_Search.Count;
+ 
+    procedure Find_Token
+      (Source : Wide_Wide_String;
+       Set    : Wide_Wide_Maps.Wide_Wide_Character_Set;
+       Test   : Membership;
+       First  : out Positive;
+       Last   : out Natural)
+    renames Ada.Strings.Wide_Wide_Search.Find_Token;
+ 
+    ---------
+    -- "*" --
+    ---------
+ 
+    function "*"
+      (Left  : Natural;
+       Right : Wide_Wide_Character) return Wide_Wide_String
+    is
+       Result : Wide_Wide_String (1 .. Left);
+ 
+    begin
+       for J in Result'Range loop
+          Result (J) := Right;
+       end loop;
+ 
+       return Result;
+    end "*";
+ 
+    function "*"
+      (Left  : Natural;
+       Right : Wide_Wide_String) return Wide_Wide_String
+    is
+       Result : Wide_Wide_String (1 .. Left * Right'Length);
+       Ptr    : Integer := 1;
+ 
+    begin
+       for J in 1 .. Left loop
+          Result (Ptr .. Ptr + Right'Length - 1) := Right;
+          Ptr := Ptr + Right'Length;
+       end loop;
+ 
+       return Result;
+    end "*";
+ 
+    ------------
+    -- Delete --
+    ------------
+ 
+    function Delete
+      (Source  : Wide_Wide_String;
+       From    : Positive;
+       Through : Natural) return Wide_Wide_String
+    is
+    begin
+       if From not in Source'Range
+         or else Through > Source'Last
+       then
+          raise Index_Error;
+ 
+       elsif From > Through then
+          return Source;
+ 
+       else
+          declare
+             Len    : constant Integer := Source'Length - (Through - From + 1);
+             Result : constant Wide_Wide_String
+                        (Source'First .. Source'First + Len - 1) :=
+                           Source (Source'First .. From - 1) &
+                           Source (Through + 1 .. Source'Last);
+          begin
+             return Result;
+          end;
+       end if;
+    end Delete;
+ 
+    procedure Delete
+      (Source  : in out Wide_Wide_String;
+       From    : Positive;
+       Through : Natural;
+       Justify : Alignment := Left;
+       Pad     : Wide_Wide_Character := Wide_Wide_Space)
+    is
+    begin
+       Move (Source  => Delete (Source, From, Through),
+             Target  => Source,
+             Justify => Justify,
+             Pad     => Pad);
+    end Delete;
+ 
+    ----------
+    -- Head --
+    ----------
+ 
+    function Head
+      (Source : Wide_Wide_String;
+       Count  : Natural;
+       Pad    : Wide_Wide_Character := Wide_Wide_Space) return Wide_Wide_String
+    is
+       Result : Wide_Wide_String (1 .. Count);
+ 
+    begin
+       if Count <= Source'Length then
+          Result := Source (Source'First .. Source'First + Count - 1);
+ 
+       else
+          Result (1 .. Source'Length) := Source;
+ 
+          for J in Source'Length + 1 .. Count loop
+             Result (J) := Pad;
+          end loop;
+       end if;
+ 
+       return Result;
+    end Head;
+ 
+    procedure Head
+      (Source  : in out Wide_Wide_String;
+       Count   : Natural;
+       Justify : Alignment := Left;
+       Pad     : Wide_Wide_Character := Ada.Strings.Wide_Wide_Space)
+    is
+    begin
+       Move (Source  => Head (Source, Count, Pad),
+             Target  => Source,
+             Drop    => Error,
+             Justify => Justify,
+             Pad     => Pad);
+    end Head;
+ 
+    ------------
+    -- Insert --
+    ------------
+ 
+    function Insert
+      (Source   : Wide_Wide_String;
+       Before   : Positive;
+       New_Item : Wide_Wide_String) return Wide_Wide_String
+    is
+       Result : Wide_Wide_String (1 .. Source'Length + New_Item'Length);
+ 
+    begin
+       if Before < Source'First or else Before > Source'Last + 1 then
+          raise Index_Error;
+       end if;
+ 
+       Result := Source (Source'First .. Before - 1) & New_Item &
+                 Source (Before .. Source'Last);
+       return Result;
+    end Insert;
+ 
+    procedure Insert
+      (Source   : in out Wide_Wide_String;
+       Before   : Positive;
+       New_Item : Wide_Wide_String;
+       Drop     : Truncation := Error)
+    is
+    begin
+       Move (Source => Insert (Source, Before, New_Item),
+             Target => Source,
+             Drop   => Drop);
+    end Insert;
+ 
+    ----------
+    -- Move --
+    ----------
+ 
+    procedure Move
+      (Source  : Wide_Wide_String;
+       Target  : out Wide_Wide_String;
+       Drop    : Truncation := Error;
+       Justify : Alignment  := Left;
+       Pad     : Wide_Wide_Character  := Wide_Wide_Space)
+    is
+       Sfirst  : constant Integer := Source'First;
+       Slast   : constant Integer := Source'Last;
+       Slength : constant Integer := Source'Length;
+ 
+       Tfirst  : constant Integer := Target'First;
+       Tlast   : constant Integer := Target'Last;
+       Tlength : constant Integer := Target'Length;
+ 
+       function Is_Padding (Item : Wide_Wide_String) return Boolean;
+       --  Determinbe if all characters in Item are pad characters
+ 
+       function Is_Padding (Item : Wide_Wide_String) return Boolean is
+       begin
+          for J in Item'Range loop
+             if Item (J) /= Pad then
+                return False;
+             end if;
+          end loop;
+ 
+          return True;
+       end Is_Padding;
+ 
+    --  Start of processing for Move
+ 
+    begin
+       if Slength = Tlength then
+          Target := Source;
+ 
+       elsif Slength > Tlength then
+ 
+          case Drop is
+             when Left =>
+                Target := Source (Slast - Tlength + 1 .. Slast);
+ 
+             when Right =>
+                Target := Source (Sfirst .. Sfirst + Tlength - 1);
+ 
+             when Error =>
+                case Justify is
+                   when Left =>
+                      if Is_Padding (Source (Sfirst + Tlength .. Slast)) then
+                         Target :=
+                           Source (Sfirst .. Sfirst + Target'Length - 1);
+                      else
+                         raise Length_Error;
+                      end if;
+ 
+                   when Right =>
+                      if Is_Padding (Source (Sfirst .. Slast - Tlength)) then
+                         Target := Source (Slast - Tlength + 1 .. Slast);
+                      else
+                         raise Length_Error;
+                      end if;
+ 
+                   when Center =>
+                      raise Length_Error;
+                end case;
+ 
+          end case;
+ 
+       --  Source'Length < Target'Length
+ 
+       else
+          case Justify is
+             when Left =>
+                Target (Tfirst .. Tfirst + Slength - 1) := Source;
+ 
+                for J in Tfirst + Slength .. Tlast loop
+                   Target (J) := Pad;
+                end loop;
+ 
+             when Right =>
+                for J in Tfirst .. Tlast - Slength loop
+                   Target (J) := Pad;
+                end loop;
+ 
+                Target (Tlast - Slength + 1 .. Tlast) := Source;
+ 
+             when Center =>
+                declare
+                   Front_Pad   : constant Integer := (Tlength - Slength) / 2;
+                   Tfirst_Fpad : constant Integer := Tfirst + Front_Pad;
+ 
+                begin
+                   for J in Tfirst .. Tfirst_Fpad - 1 loop
+                      Target (J) := Pad;
+                   end loop;
+ 
+                   Target (Tfirst_Fpad .. Tfirst_Fpad + Slength - 1) := Source;
+ 
+                   for J in Tfirst_Fpad + Slength .. Tlast loop
+                      Target (J) := Pad;
+                   end loop;
+                end;
+          end case;
+       end if;
+    end Move;
+ 
+    ---------------
+    -- Overwrite --
+    ---------------
+ 
+    function Overwrite
+      (Source   : Wide_Wide_String;
+       Position : Positive;
+       New_Item : Wide_Wide_String) return Wide_Wide_String
+    is
+    begin
+       if Position not in Source'First .. Source'Last + 1 then
+          raise Index_Error;
+       else
+          declare
+             Result_Length : constant Natural :=
+                               Natural'Max
+                                 (Source'Length,
+                                  Position - Source'First + New_Item'Length);
+ 
+             Result : Wide_Wide_String (1 .. Result_Length);
+ 
+          begin
+             Result := Source (Source'First .. Position - 1) & New_Item &
+                         Source (Position + New_Item'Length .. Source'Last);
+             return Result;
+          end;
+       end if;
+    end Overwrite;
+ 
+    procedure Overwrite
+      (Source   : in out Wide_Wide_String;
+       Position : Positive;
+       New_Item : Wide_Wide_String;
+       Drop     : Truncation := Right)
+    is
+    begin
+       Move (Source => Overwrite (Source, Position, New_Item),
+             Target => Source,
+             Drop   => Drop);
+    end Overwrite;
+ 
+    -------------------
+    -- Replace_Slice --
+    -------------------
+ 
+    function Replace_Slice
+      (Source : Wide_Wide_String;
+       Low    : Positive;
+       High   : Natural;
+       By     : Wide_Wide_String) return Wide_Wide_String
+    is
+       Result_Length : Natural;
+ 
+    begin
+       if Low > Source'Last + 1 or else High < Source'First - 1 then
+          raise Index_Error;
+       else
+          Result_Length :=
+            Source'Length - Natural'Max (High - Low + 1, 0) + By'Length;
+ 
+          declare
+             Result : Wide_Wide_String (1 .. Result_Length);
+ 
+          begin
+             if High >= Low then
+                Result :=
+                   Source (Source'First .. Low - 1) & By &
+                   Source (High + 1 .. Source'Last);
+             else
+                Result := Source (Source'First .. Low - 1) & By &
+                          Source (Low .. Source'Last);
+             end if;
+ 
+             return Result;
+          end;
+       end if;
+    end Replace_Slice;
+ 
+    procedure Replace_Slice
+      (Source   : in out Wide_Wide_String;
+       Low      : Positive;
+       High     : Natural;
+       By       : Wide_Wide_String;
+       Drop     : Truncation := Error;
+       Justify  : Alignment  := Left;
+       Pad      : Wide_Wide_Character  := Wide_Wide_Space)
+    is
+    begin
+       Move (Replace_Slice (Source, Low, High, By), Source, Drop, Justify, Pad);
+    end Replace_Slice;
+ 
+    ----------
+    -- Tail --
+    ----------
+ 
+    function Tail
+      (Source : Wide_Wide_String;
+       Count  : Natural;
+       Pad    : Wide_Wide_Character := Wide_Wide_Space) return Wide_Wide_String
+    is
+       Result : Wide_Wide_String (1 .. Count);
+ 
+    begin
+       if Count < Source'Length then
+          Result := Source (Source'Last - Count + 1 .. Source'Last);
+ 
+       --  Pad on left
+ 
+       else
+          for J in 1 .. Count - Source'Length loop
+             Result (J) := Pad;
+          end loop;
+ 
+          Result (Count - Source'Length + 1 .. Count) := Source;
+       end if;
+ 
+       return Result;
+    end Tail;
+ 
+    procedure Tail
+      (Source  : in out Wide_Wide_String;
+       Count   : Natural;
+       Justify : Alignment := Left;
+       Pad     : Wide_Wide_Character := Ada.Strings.Wide_Wide_Space)
+    is
+    begin
+       Move (Source  => Tail (Source, Count, Pad),
+             Target  => Source,
+             Drop    => Error,
+             Justify => Justify,
+             Pad     => Pad);
+    end Tail;
+ 
+    ---------------
+    -- Translate --
+    ---------------
+ 
+    function Translate
+      (Source  : Wide_Wide_String;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping)
+       return Wide_Wide_String
+    is
+       Result : Wide_Wide_String (1 .. Source'Length);
+ 
+    begin
+       for J in Source'Range loop
+          Result (J - (Source'First - 1)) := Value (Mapping, Source (J));
+       end loop;
+ 
+       return Result;
+    end Translate;
+ 
+    procedure Translate
+      (Source  : in out Wide_Wide_String;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping)
+    is
+    begin
+       for J in Source'Range loop
+          Source (J) := Value (Mapping, Source (J));
+       end loop;
+    end Translate;
+ 
+    function Translate
+      (Source  : Wide_Wide_String;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
+       return Wide_Wide_String
+    is
+       Result : Wide_Wide_String (1 .. Source'Length);
+ 
+    begin
+       for J in Source'Range loop
+          Result (J - (Source'First - 1)) := Mapping (Source (J));
+       end loop;
+ 
+       return Result;
+    end Translate;
+ 
+    procedure Translate
+      (Source  : in out Wide_Wide_String;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
+    is
+    begin
+       for J in Source'Range loop
+          Source (J) := Mapping (Source (J));
+       end loop;
+    end Translate;
+ 
+    ----------
+    -- Trim --
+    ----------
+ 
+    function Trim
+      (Source : Wide_Wide_String;
+       Side   : Trim_End) return Wide_Wide_String
+    is
+       Low  : Natural := Source'First;
+       High : Natural := Source'Last;
+ 
+    begin
+       if Side = Left or else Side = Both then
+          while Low <= High and then Source (Low) = Wide_Wide_Space loop
+             Low := Low + 1;
+          end loop;
+       end if;
+ 
+       if Side = Right or else Side = Both then
+          while High >= Low and then Source (High) = Wide_Wide_Space loop
+             High := High - 1;
+          end loop;
+       end if;
+ 
+       --  All blanks case
+ 
+       if Low > High then
+          return "";
+ 
+       --  At least one non-blank
+ 
+       else
+          declare
+             Result : constant Wide_Wide_String (1 .. High - Low + 1) :=
+                        Source (Low .. High);
+ 
+          begin
+             return Result;
+          end;
+       end if;
+    end Trim;
+ 
+    procedure Trim
+      (Source  : in out Wide_Wide_String;
+       Side    : Trim_End;
+       Justify : Alignment      := Left;
+       Pad     : Wide_Wide_Character := Wide_Wide_Space)
+    is
+    begin
+       Move (Source  => Trim (Source, Side),
+             Target  => Source,
+             Justify => Justify,
+             Pad     => Pad);
+    end Trim;
+ 
+    function Trim
+       (Source : Wide_Wide_String;
+        Left   : Wide_Wide_Maps.Wide_Wide_Character_Set;
+        Right  : Wide_Wide_Maps.Wide_Wide_Character_Set) return Wide_Wide_String
+    is
+       Low  : Natural := Source'First;
+       High : Natural := Source'Last;
+ 
+    begin
+       while Low <= High and then Is_In (Source (Low), Left) loop
+          Low := Low + 1;
+       end loop;
+ 
+       while High >= Low and then Is_In (Source (High), Right) loop
+          High := High - 1;
+       end loop;
+ 
+       --  Case where source comprises only characters in the sets
+ 
+       if Low > High then
+          return "";
+       else
+          declare
+             subtype WS is Wide_Wide_String (1 .. High - Low + 1);
+ 
+          begin
+             return WS (Source (Low .. High));
+          end;
+       end if;
+    end Trim;
+ 
+    procedure Trim
+       (Source  : in out Wide_Wide_String;
+        Left    : Wide_Wide_Maps.Wide_Wide_Character_Set;
+        Right   : Wide_Wide_Maps.Wide_Wide_Character_Set;
+        Justify : Alignment      := Strings.Left;
+        Pad     : Wide_Wide_Character := Wide_Wide_Space)
+    is
+    begin
+       Move (Source  => Trim (Source, Left, Right),
+             Target  => Source,
+             Justify => Justify,
+             Pad     => Pad);
+    end Trim;
+ 
+ end Ada.Strings.Wide_Wide_Fixed;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-stzfix.ads gcc-4.0.0/gcc/ada/a-stzfix.ads
*** gcc-3.4.3/gcc/ada/a-stzfix.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-stzfix.ads	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,256 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --          A D A . S T R I N G S . W I D E _ W I D E _ F I X E D           --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ -- This specification is adapted from the Ada Reference Manual for use with --
+ -- GNAT.  In accordance with the copyright of that document, you can freely --
+ -- copy and modify this specification,  provided that if you redistribute a --
+ -- modified version,  any changes that you have made are clearly indicated. --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ 
+ with Ada.Strings.Wide_Wide_Maps;
+ 
+ package Ada.Strings.Wide_Wide_Fixed is
+ pragma Preelaborate (Wide_Wide_Fixed);
+ 
+    ------------------------------------------------------------------------
+    -- Copy Procedure for Wide_Wide_Strings of Possibly Different Lengths --
+    ------------------------------------------------------------------------
+ 
+    procedure Move
+      (Source  : Wide_Wide_String;
+       Target  : out Wide_Wide_String;
+       Drop    : Truncation := Error;
+       Justify : Alignment  := Left;
+       Pad     : Wide_Wide_Character  := Ada.Strings.Wide_Wide_Space);
+ 
+    ------------------------
+    -- Search Subprograms --
+    ------------------------
+ 
+    function Index
+      (Source  : Wide_Wide_String;
+       Pattern : Wide_Wide_String;
+       Going   : Direction := Forward;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping :=
+                   Wide_Wide_Maps.Identity) return Natural;
+ 
+    function Index
+      (Source  : Wide_Wide_String;
+       Pattern : Wide_Wide_String;
+       Going   : Direction := Forward;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
+       return Natural;
+ 
+    function Index
+      (Source : Wide_Wide_String;
+       Set    : Wide_Wide_Maps.Wide_Wide_Character_Set;
+       Test   : Membership := Inside;
+       Going  : Direction  := Forward) return Natural;
+ 
+    function Index
+      (Source  : Wide_Wide_String;
+       Pattern : Wide_Wide_String;
+       From    : Positive;
+       Going   : Direction := Forward;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping :=
+                   Wide_Wide_Maps.Identity)
+       return Natural;
+    pragma Ada_05 (Index);
+ 
+    function Index
+      (Source  : Wide_Wide_String;
+       Pattern : Wide_Wide_String;
+       From    : Positive;
+       Going   : Direction := Forward;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
+       return Natural;
+    pragma Ada_05 (Index);
+ 
+    function Index
+      (Source  : Wide_Wide_String;
+       Set     : Wide_Wide_Maps.Wide_Wide_Character_Set;
+       From    : Positive;
+       Test    : Membership := Inside;
+       Going   : Direction := Forward) return Natural;
+    pragma Ada_05 (Index);
+ 
+    function Index_Non_Blank
+      (Source : Wide_Wide_String;
+       Going  : Direction := Forward) return Natural;
+ 
+    function Index_Non_Blank
+      (Source : Wide_Wide_String;
+       From   : Positive;
+       Going  : Direction := Forward) return Natural;
+    pragma Ada_05 (Index_Non_Blank);
+ 
+    function Count
+      (Source  : Wide_Wide_String;
+       Pattern : Wide_Wide_String;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping :=
+                   Wide_Wide_Maps.Identity)
+       return Natural;
+ 
+    function Count
+      (Source  : Wide_Wide_String;
+       Pattern : Wide_Wide_String;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
+       return Natural;
+ 
+    function Count
+      (Source : Wide_Wide_String;
+       Set    : Wide_Wide_Maps.Wide_Wide_Character_Set) return Natural;
+ 
+    procedure Find_Token
+      (Source : Wide_Wide_String;
+       Set    : Wide_Wide_Maps.Wide_Wide_Character_Set;
+       Test   : Membership;
+       First  : out Positive;
+       Last   : out Natural);
+ 
+    ----------------------------------------------
+    -- Wide_Wide_String Translation Subprograms --
+    ----------------------------------------------
+ 
+    function Translate
+      (Source  : Wide_Wide_String;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping)
+       return Wide_Wide_String;
+ 
+    procedure Translate
+      (Source  : in out Wide_Wide_String;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping);
+ 
+    function Translate
+      (Source  : Wide_Wide_String;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
+       return Wide_Wide_String;
+ 
+    procedure Translate
+      (Source  : in out Wide_Wide_String;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function);
+ 
+    -------------------------------------------------
+    -- Wide_Wide_String Transformation Subprograms --
+    -------------------------------------------------
+ 
+    function Replace_Slice
+      (Source : Wide_Wide_String;
+       Low    : Positive;
+       High   : Natural;
+       By     : Wide_Wide_String) return Wide_Wide_String;
+ 
+    procedure Replace_Slice
+      (Source  : in out Wide_Wide_String;
+       Low     : Positive;
+       High    : Natural;
+       By      : Wide_Wide_String;
+       Drop    : Truncation := Error;
+       Justify : Alignment  := Left;
+       Pad     : Wide_Wide_Character  := Ada.Strings.Wide_Wide_Space);
+ 
+    function Insert
+      (Source   : Wide_Wide_String;
+       Before   : Positive;
+       New_Item : Wide_Wide_String) return Wide_Wide_String;
+ 
+    procedure Insert
+      (Source   : in out Wide_Wide_String;
+       Before   : Positive;
+       New_Item : Wide_Wide_String;
+       Drop     : Truncation := Error);
+ 
+    function Overwrite
+      (Source   : Wide_Wide_String;
+       Position : Positive;
+       New_Item : Wide_Wide_String) return Wide_Wide_String;
+ 
+    procedure Overwrite
+      (Source   : in out Wide_Wide_String;
+       Position : Positive;
+       New_Item : Wide_Wide_String;
+       Drop     : Truncation := Right);
+ 
+    function Delete
+      (Source  : Wide_Wide_String;
+       From    : Positive;
+       Through : Natural) return Wide_Wide_String;
+ 
+    procedure Delete
+      (Source  : in out Wide_Wide_String;
+       From    : Positive;
+       Through : Natural;
+       Justify : Alignment := Left;
+       Pad     : Wide_Wide_Character := Ada.Strings.Wide_Wide_Space);
+ 
+    -------------------------------------------
+    -- Wide_Wide_String Selector Subprograms --
+    -------------------------------------------
+ 
+    function Trim
+      (Source : Wide_Wide_String;
+       Side   : Trim_End) return Wide_Wide_String;
+ 
+    procedure Trim
+      (Source  : in out Wide_Wide_String;
+       Side    : Trim_End;
+       Justify : Alignment      := Left;
+       Pad     : Wide_Wide_Character := Wide_Wide_Space);
+ 
+    function Trim
+      (Source : Wide_Wide_String;
+       Left   : Wide_Wide_Maps.Wide_Wide_Character_Set;
+       Right  : Wide_Wide_Maps.Wide_Wide_Character_Set)
+       return Wide_Wide_String;
+ 
+    procedure Trim
+      (Source  : in out Wide_Wide_String;
+       Left    : Wide_Wide_Maps.Wide_Wide_Character_Set;
+       Right   : Wide_Wide_Maps.Wide_Wide_Character_Set;
+       Justify : Alignment := Ada.Strings.Left;
+       Pad     : Wide_Wide_Character := Ada.Strings.Wide_Wide_Space);
+ 
+    function Head
+      (Source : Wide_Wide_String;
+       Count  : Natural;
+       Pad    : Wide_Wide_Character := Ada.Strings.Wide_Wide_Space)
+       return Wide_Wide_String;
+ 
+    procedure Head
+      (Source  : in out Wide_Wide_String;
+       Count   : Natural;
+       Justify : Alignment := Left;
+       Pad     : Wide_Wide_Character := Ada.Strings.Wide_Wide_Space);
+ 
+    function Tail
+      (Source : Wide_Wide_String;
+       Count  : Natural;
+       Pad    : Wide_Wide_Character := Ada.Strings.Wide_Wide_Space)
+       return Wide_Wide_String;
+ 
+    procedure Tail
+      (Source : in out Wide_Wide_String;
+       Count  : Natural;
+       Justify : Alignment := Left;
+       Pad    : Wide_Wide_Character := Ada.Strings.Wide_Wide_Space);
+ 
+    --------------------------------------------
+    -- Wide_Wide_String Constructor Functions --
+    --------------------------------------------
+ 
+    function "*"
+      (Left  : Natural;
+       Right : Wide_Wide_Character) return Wide_Wide_String;
+ 
+    function "*"
+      (Left  : Natural;
+       Right : Wide_Wide_String) return Wide_Wide_String;
+ 
+ end Ada.Strings.Wide_Wide_Fixed;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-stzhas.adb gcc-4.0.0/gcc/ada/a-stzhas.adb
*** gcc-3.4.3/gcc/ada/a-stzhas.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-stzhas.adb	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,59 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --            A D A . S T R I N G S . W I D E _ W I D E _ H A S H           --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 2004-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ 
+ --  Note: source of this algorithm: GNAT.HTable.Hash (g-htable.adb)
+ 
+ function Ada.Strings.Wide_Wide_Hash
+   (Key : Wide_Wide_String) return Containers.Hash_Type
+ is
+    use Ada.Containers;
+ 
+    function Rotate_Left
+      (Value  : Hash_Type;
+       Amount : Natural) return Hash_Type;
+    pragma Import (Intrinsic, Rotate_Left);
+ 
+    Tmp : Hash_Type;
+ 
+ begin
+    Tmp := 0;
+    for J in Key'Range loop
+       Tmp := Rotate_Left (Tmp, 1) + Wide_Wide_Character'Pos (Key (J));
+    end loop;
+ 
+    return Tmp;
+ end Ada.Strings.Wide_Wide_Hash;
+ 
+ 
diff -Nrcpad gcc-3.4.3/gcc/ada/a-stzhas.ads gcc-4.0.0/gcc/ada/a-stzhas.ads
*** gcc-3.4.3/gcc/ada/a-stzhas.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-stzhas.ads	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,24 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --            A D A . S T R I N G S . W I D E _ W I D E _ H A S H           --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ -- This specification is adapted from the Ada Reference Manual for use with --
+ -- GNAT.  In accordance with the copyright of that document, you can freely --
+ -- copy and modify this specification,  provided that if you redistribute a --
+ -- modified version,  any changes that you have made are clearly indicated. --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Containers;
+ 
+ function Ada.Strings.Wide_Wide_Hash
+   (Key : Wide_Wide_String) return Containers.Hash_Type;
+ 
+ pragma Pure (Ada.Strings.Wide_Wide_Hash);
+ 
+ 
+ 
diff -Nrcpad gcc-3.4.3/gcc/ada/a-stzmap.adb gcc-4.0.0/gcc/ada/a-stzmap.adb
*** gcc-3.4.3/gcc/ada/a-stzmap.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-stzmap.adb	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,744 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --           A D A . S T R I N G S . W I D E _ W I D E _ M A P S            --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Unchecked_Deallocation;
+ 
+ package body Ada.Strings.Wide_Wide_Maps is
+ 
+    ---------
+    -- "-" --
+    ---------
+ 
+    function "-"
+      (Left, Right : Wide_Wide_Character_Set) return Wide_Wide_Character_Set
+    is
+       LS : constant Wide_Wide_Character_Ranges_Access := Left.Set;
+       RS : constant Wide_Wide_Character_Ranges_Access := Right.Set;
+ 
+       Result : Wide_Wide_Character_Ranges (1 .. LS'Last + RS'Last);
+       --  Each range on the right can generate at least one more range in
+       --  the result, by splitting one of the left operand ranges.
+ 
+       N  : Natural := 0;
+       R  : Natural := 1;
+       L  : Natural := 1;
+ 
+       Left_Low : Wide_Wide_Character;
+       --  Left_Low is lowest character of the L'th range not yet dealt with
+ 
+    begin
+       if LS'Last = 0 or else RS'Last = 0 then
+          return Left;
+       end if;
+ 
+       Left_Low := LS (L).Low;
+       while R <= RS'Last loop
+ 
+          --  If next right range is below current left range, skip it
+ 
+          if RS (R).High < Left_Low then
+             R := R + 1;
+ 
+          --  If next right range above current left range, copy remainder of
+          --  the left range to the result
+ 
+          elsif RS (R).Low > LS (L).High then
+             N := N + 1;
+             Result (N).Low  := Left_Low;
+             Result (N).High := LS (L).High;
+             L := L + 1;
+             exit when L > LS'Last;
+             Left_Low := LS (L).Low;
+ 
+          else
+             --  Next right range overlaps bottom of left range
+ 
+             if RS (R).Low <= Left_Low then
+ 
+                --  Case of right range complete overlaps left range
+ 
+                if RS (R).High >= LS (L).High then
+                   L := L + 1;
+                   exit when L > LS'Last;
+                   Left_Low := LS (L).Low;
+ 
+                --  Case of right range eats lower part of left range
+ 
+                else
+                   Left_Low := Wide_Wide_Character'Succ (RS (R).High);
+                   R := R + 1;
+                end if;
+ 
+             --  Next right range overlaps some of left range, but not bottom
+ 
+             else
+                N := N + 1;
+                Result (N).Low  := Left_Low;
+                Result (N).High := Wide_Wide_Character'Pred (RS (R).Low);
+ 
+                --  Case of right range splits left range
+ 
+                if RS (R).High < LS (L).High then
+                   Left_Low := Wide_Wide_Character'Succ (RS (R).High);
+                   R := R + 1;
+ 
+                --  Case of right range overlaps top of left range
+ 
+                else
+                   L := L + 1;
+                   exit when L > LS'Last;
+                   Left_Low := LS (L).Low;
+                end if;
+             end if;
+          end if;
+       end loop;
+ 
+       --  Copy remainder of left ranges to result
+ 
+       if L <= LS'Last then
+          N := N + 1;
+          Result (N).Low  := Left_Low;
+          Result (N).High := LS (L).High;
+ 
+          loop
+             L := L + 1;
+             exit when L > LS'Last;
+             N := N + 1;
+             Result (N) := LS (L);
+          end loop;
+       end if;
+ 
+       return (AF.Controlled with
+               Set => new Wide_Wide_Character_Ranges'(Result (1 .. N)));
+    end "-";
+ 
+    ---------
+    -- "=" --
+    ---------
+ 
+    --  The sorted, discontiguous form is canonical, so equality can be used
+ 
+    function "=" (Left, Right : in Wide_Wide_Character_Set) return Boolean is
+    begin
+       return Left.Set.all = Right.Set.all;
+    end "=";
+ 
+    -----------
+    -- "and" --
+    -----------
+ 
+    function "and"
+      (Left, Right : Wide_Wide_Character_Set) return Wide_Wide_Character_Set
+    is
+       LS : constant Wide_Wide_Character_Ranges_Access := Left.Set;
+       RS : constant Wide_Wide_Character_Ranges_Access := Right.Set;
+ 
+       Result : Wide_Wide_Character_Ranges (1 .. LS'Last + RS'Last);
+       N      : Natural := 0;
+       L, R   : Natural := 1;
+ 
+    begin
+       --  Loop to search for overlapping character ranges
+ 
+       while L <= LS'Last and then R <= RS'Last loop
+ 
+          if LS (L).High < RS (R).Low then
+             L := L + 1;
+ 
+          elsif RS (R).High < LS (L).Low then
+             R := R + 1;
+ 
+          --  Here we have LS (L).High >= RS (R).Low
+          --           and RS (R).High >= LS (L).Low
+          --  so we have an overlapping range
+ 
+          else
+             N := N + 1;
+             Result (N).Low :=
+               Wide_Wide_Character'Max (LS (L).Low,  RS (R).Low);
+             Result (N).High :=
+               Wide_Wide_Character'Min (LS (L).High, RS (R).High);
+ 
+             if RS (R).High = LS (L).High then
+                L := L + 1;
+                R := R + 1;
+             elsif RS (R).High < LS (L).High then
+                R := R + 1;
+             else
+                L := L + 1;
+             end if;
+          end if;
+       end loop;
+ 
+       return (AF.Controlled with
+               Set => new Wide_Wide_Character_Ranges'(Result (1 .. N)));
+    end "and";
+ 
+    -----------
+    -- "not" --
+    -----------
+ 
+    function "not"
+      (Right : Wide_Wide_Character_Set) return Wide_Wide_Character_Set
+    is
+       RS : constant Wide_Wide_Character_Ranges_Access := Right.Set;
+ 
+       Result : Wide_Wide_Character_Ranges (1 .. RS'Last + 1);
+       N      : Natural := 0;
+ 
+    begin
+       if RS'Last = 0 then
+          N := 1;
+          Result (1) := (Low  => Wide_Wide_Character'First,
+                         High => Wide_Wide_Character'Last);
+ 
+       else
+          if RS (1).Low /= Wide_Wide_Character'First then
+             N := N + 1;
+             Result (N).Low  := Wide_Wide_Character'First;
+             Result (N).High := Wide_Wide_Character'Pred (RS (1).Low);
+          end if;
+ 
+          for K in 1 .. RS'Last - 1 loop
+             N := N + 1;
+             Result (N).Low  := Wide_Wide_Character'Succ (RS (K).High);
+             Result (N).High := Wide_Wide_Character'Pred (RS (K + 1).Low);
+          end loop;
+ 
+          if RS (RS'Last).High /= Wide_Wide_Character'Last then
+             N := N + 1;
+             Result (N).Low  := Wide_Wide_Character'Succ (RS (RS'Last).High);
+             Result (N).High := Wide_Wide_Character'Last;
+          end if;
+       end if;
+ 
+       return (AF.Controlled with
+               Set => new Wide_Wide_Character_Ranges'(Result (1 .. N)));
+    end "not";
+ 
+    ----------
+    -- "or" --
+    ----------
+ 
+    function "or"
+      (Left, Right : Wide_Wide_Character_Set) return Wide_Wide_Character_Set
+    is
+       LS : constant Wide_Wide_Character_Ranges_Access := Left.Set;
+       RS : constant Wide_Wide_Character_Ranges_Access := Right.Set;
+ 
+       Result : Wide_Wide_Character_Ranges (1 .. LS'Last + RS'Last);
+       N      : Natural;
+       L, R   : Natural;
+ 
+    begin
+       N := 0;
+       L := 1;
+       R := 1;
+ 
+       --  Loop through ranges in output file
+ 
+       loop
+          --  If no left ranges left, copy next right range
+ 
+          if L > LS'Last then
+             exit when R > RS'Last;
+             N := N + 1;
+             Result (N) := RS (R);
+             R := R + 1;
+ 
+          --  If no right ranges left, copy next left range
+ 
+          elsif R > RS'Last then
+             N := N + 1;
+             Result (N) := LS (L);
+             L := L + 1;
+ 
+          else
+             --  We have two ranges, choose lower one
+ 
+             N := N + 1;
+ 
+             if LS (L).Low <= RS (R).Low then
+                Result (N) := LS (L);
+                L := L + 1;
+             else
+                Result (N) := RS (R);
+                R := R + 1;
+             end if;
+ 
+             --  Loop to collapse ranges into last range
+ 
+             loop
+                --  Collapse next length range into current result range
+                --  if possible.
+ 
+                if L <= LS'Last
+                  and then LS (L).Low <=
+                           Wide_Wide_Character'Succ (Result (N).High)
+                then
+                   Result (N).High :=
+                     Wide_Wide_Character'Max (Result (N).High, LS (L).High);
+                   L := L + 1;
+ 
+                --  Collapse next right range into current result range
+                --  if possible
+ 
+                elsif R <= RS'Last
+                  and then RS (R).Low <=
+                             Wide_Wide_Character'Succ (Result (N).High)
+                then
+                   Result (N).High :=
+                     Wide_Wide_Character'Max (Result (N).High, RS (R).High);
+                   R := R + 1;
+ 
+                --  If neither range collapses, then done with this range
+ 
+                else
+                   exit;
+                end if;
+             end loop;
+          end if;
+       end loop;
+ 
+       return (AF.Controlled with
+               Set => new Wide_Wide_Character_Ranges'(Result (1 .. N)));
+    end "or";
+ 
+    -----------
+    -- "xor" --
+    -----------
+ 
+    function "xor"
+      (Left, Right : Wide_Wide_Character_Set) return Wide_Wide_Character_Set
+    is
+    begin
+       return (Left or Right) - (Left and Right);
+    end "xor";
+ 
+    ------------
+    -- Adjust --
+    ------------
+ 
+    procedure Adjust (Object : in out Wide_Wide_Character_Mapping) is
+    begin
+       Object.Map := new Wide_Wide_Character_Mapping_Values'(Object.Map.all);
+    end Adjust;
+ 
+    procedure Adjust (Object : in out Wide_Wide_Character_Set) is
+    begin
+       Object.Set := new Wide_Wide_Character_Ranges'(Object.Set.all);
+    end Adjust;
+ 
+    --------------
+    -- Finalize --
+    --------------
+ 
+    procedure Finalize (Object : in out Wide_Wide_Character_Mapping) is
+ 
+       procedure Free is new Unchecked_Deallocation
+         (Wide_Wide_Character_Mapping_Values,
+          Wide_Wide_Character_Mapping_Values_Access);
+ 
+    begin
+       if Object.Map /=  Null_Map'Unrestricted_Access then
+          Free (Object.Map);
+       end if;
+    end Finalize;
+ 
+    procedure Finalize (Object : in out Wide_Wide_Character_Set) is
+ 
+       procedure Free is new Unchecked_Deallocation
+         (Wide_Wide_Character_Ranges,
+          Wide_Wide_Character_Ranges_Access);
+ 
+    begin
+       if Object.Set /= Null_Range'Unrestricted_Access then
+          Free (Object.Set);
+       end if;
+    end Finalize;
+ 
+    ----------------
+    -- Initialize --
+    ----------------
+ 
+    procedure Initialize (Object : in out Wide_Wide_Character_Mapping) is
+    begin
+       Object := Identity;
+    end Initialize;
+ 
+    procedure Initialize (Object : in out Wide_Wide_Character_Set) is
+    begin
+       Object := Null_Set;
+    end Initialize;
+ 
+    -----------
+    -- Is_In --
+    -----------
+ 
+    function Is_In
+      (Element : Wide_Wide_Character;
+       Set     : Wide_Wide_Character_Set) return Boolean
+    is
+       L, R, M : Natural;
+       SS      : constant Wide_Wide_Character_Ranges_Access := Set.Set;
+ 
+    begin
+       L := 1;
+       R := SS'Last;
+ 
+       --  Binary search loop. The invariant is that if Element is in any of
+       --  of the constituent ranges it is in one between Set (L) and Set (R).
+ 
+       loop
+          if L > R then
+             return False;
+ 
+          else
+             M := (L + R) / 2;
+ 
+             if Element > SS (M).High then
+                L := M + 1;
+             elsif Element < SS (M).Low then
+                R := M - 1;
+             else
+                return True;
+             end if;
+          end if;
+       end loop;
+    end Is_In;
+ 
+    ---------------
+    -- Is_Subset --
+    ---------------
+ 
+    function Is_Subset
+      (Elements : Wide_Wide_Character_Set;
+       Set      : Wide_Wide_Character_Set) return Boolean
+    is
+       ES : constant Wide_Wide_Character_Ranges_Access := Elements.Set;
+       SS : constant Wide_Wide_Character_Ranges_Access := Set.Set;
+ 
+       S  : Positive := 1;
+       E  : Positive := 1;
+ 
+    begin
+       loop
+          --  If no more element ranges, done, and result is true
+ 
+          if E > ES'Last then
+             return True;
+ 
+          --  If more element ranges, but no more set ranges, result is false
+ 
+          elsif S > SS'Last then
+             return False;
+ 
+          --  Remove irrelevant set range
+ 
+          elsif SS (S).High < ES (E).Low then
+             S := S + 1;
+ 
+          --  Get rid of element range that is properly covered by set
+ 
+          elsif SS (S).Low <= ES (E).Low
+             and then ES (E).High <= SS (S).High
+          then
+             E := E + 1;
+ 
+          --  Otherwise we have a non-covered element range, result is false
+ 
+          else
+             return False;
+          end if;
+       end loop;
+    end Is_Subset;
+ 
+    ---------------
+    -- To_Domain --
+    ---------------
+ 
+    function To_Domain
+      (Map : Wide_Wide_Character_Mapping) return Wide_Wide_Character_Sequence
+    is
+    begin
+       return Map.Map.Domain;
+    end To_Domain;
+ 
+    ----------------
+    -- To_Mapping --
+    ----------------
+ 
+    function To_Mapping
+      (From, To : Wide_Wide_Character_Sequence)
+      return Wide_Wide_Character_Mapping
+    is
+       Domain : Wide_Wide_Character_Sequence (1 .. From'Length);
+       Rangev : Wide_Wide_Character_Sequence (1 .. To'Length);
+       N      : Natural := 0;
+ 
+    begin
+       if From'Length /= To'Length then
+          raise Translation_Error;
+ 
+       else
+          pragma Warnings (Off); -- apparent uninit use of Domain
+ 
+          for J in From'Range loop
+             for M in 1 .. N loop
+                if From (J) = Domain (M) then
+                   raise Translation_Error;
+                elsif From (J) < Domain (M) then
+                   Domain (M + 1 .. N + 1) := Domain (M .. N);
+                   Rangev (M + 1 .. N + 1) := Rangev (M .. N);
+                   Domain (M) := From (J);
+                   Rangev (M) := To   (J);
+                   goto Continue;
+                end if;
+             end loop;
+ 
+             Domain (N + 1) := From (J);
+             Rangev (N + 1) := To   (J);
+ 
+             <<Continue>>
+                N := N + 1;
+          end loop;
+ 
+          pragma Warnings (On);
+ 
+          return (AF.Controlled with
+                  Map => new Wide_Wide_Character_Mapping_Values'(
+                           Length => N,
+                           Domain => Domain (1 .. N),
+                           Rangev => Rangev (1 .. N)));
+       end if;
+    end To_Mapping;
+ 
+    --------------
+    -- To_Range --
+    --------------
+ 
+    function To_Range
+      (Map : Wide_Wide_Character_Mapping) return Wide_Wide_Character_Sequence
+    is
+    begin
+       return Map.Map.Rangev;
+    end To_Range;
+ 
+    ---------------
+    -- To_Ranges --
+    ---------------
+ 
+    function To_Ranges
+      (Set :  in Wide_Wide_Character_Set) return Wide_Wide_Character_Ranges
+    is
+    begin
+       return Set.Set.all;
+    end To_Ranges;
+ 
+    -----------------
+    -- To_Sequence --
+    -----------------
+ 
+    function To_Sequence
+      (Set : Wide_Wide_Character_Set) return Wide_Wide_Character_Sequence
+    is
+       SS : constant Wide_Wide_Character_Ranges_Access := Set.Set;
+ 
+       Result : Wide_Wide_String (Positive range 1 .. 2 ** 16);
+       N      : Natural := 0;
+ 
+    begin
+       for J in SS'Range loop
+          for K in SS (J).Low .. SS (J).High loop
+             N := N + 1;
+             Result (N) := K;
+          end loop;
+       end loop;
+ 
+       return Result (1 .. N);
+    end To_Sequence;
+ 
+    ------------
+    -- To_Set --
+    ------------
+ 
+    --  Case of multiple range input
+ 
+    function To_Set
+      (Ranges : Wide_Wide_Character_Ranges) return Wide_Wide_Character_Set
+    is
+       Result : Wide_Wide_Character_Ranges (Ranges'Range);
+       N      : Natural := 0;
+       J      : Natural;
+ 
+    begin
+       --  The output of To_Set is required to be sorted by increasing Low
+       --  values, and discontiguous, so first we sort them as we enter them,
+       --  using a simple insertion sort.
+ 
+       pragma Warnings (Off);
+       --  Kill bogus warning on Result being uninitialized
+ 
+       for J in Ranges'Range loop
+          for K in 1 .. N loop
+             if Ranges (J).Low < Result (K).Low then
+                Result (K + 1 .. N + 1) := Result (K .. N);
+                Result (K) := Ranges (J);
+                goto Continue;
+             end if;
+          end loop;
+ 
+          Result (N + 1) := Ranges (J);
+ 
+          <<Continue>>
+             N := N + 1;
+       end loop;
+ 
+       pragma Warnings (On);
+ 
+       --  Now collapse any contiguous or overlapping ranges
+ 
+       J := 1;
+       while J < N loop
+          if Result (J).High < Result (J).Low then
+             N := N - 1;
+             Result (J .. N) := Result (J + 1 .. N + 1);
+ 
+          elsif Wide_Wide_Character'Succ (Result (J).High) >=
+            Result (J + 1).Low
+          then
+             Result (J).High :=
+               Wide_Wide_Character'Max (Result (J).High, Result (J + 1).High);
+ 
+             N := N - 1;
+             Result (J + 1 .. N) := Result (J + 2 .. N + 1);
+ 
+          else
+             J := J + 1;
+          end if;
+       end loop;
+ 
+       if Result (N).High < Result (N).Low then
+          N := N - 1;
+       end if;
+ 
+       return (AF.Controlled with
+               Set => new Wide_Wide_Character_Ranges'(Result (1 .. N)));
+    end To_Set;
+ 
+    --  Case of single range input
+ 
+    function To_Set
+      (Span : Wide_Wide_Character_Range) return Wide_Wide_Character_Set
+    is
+    begin
+       if Span.Low > Span.High then
+          return Null_Set;
+          --  This is safe, because there is no procedure with parameter
+          --  Wide_Wide_Character_Set of mode "out" or "in out".
+ 
+       else
+          return (AF.Controlled with
+                  Set => new Wide_Wide_Character_Ranges'(1 => Span));
+       end if;
+    end To_Set;
+ 
+    --  Case of wide string input
+ 
+    function To_Set
+      (Sequence : Wide_Wide_Character_Sequence) return Wide_Wide_Character_Set
+    is
+       R : Wide_Wide_Character_Ranges (1 .. Sequence'Length);
+ 
+    begin
+       for J in R'Range loop
+          R (J) := (Sequence (J), Sequence (J));
+       end loop;
+ 
+       return To_Set (R);
+    end To_Set;
+ 
+    --  Case of single wide character input
+ 
+    function To_Set
+      (Singleton : Wide_Wide_Character) return Wide_Wide_Character_Set
+    is
+    begin
+       return
+         (AF.Controlled with
+          Set => new Wide_Wide_Character_Ranges'(1 => (Singleton, Singleton)));
+    end To_Set;
+ 
+    -----------
+    -- Value --
+    -----------
+ 
+    function Value
+      (Map     : Wide_Wide_Character_Mapping;
+       Element : Wide_Wide_Character) return Wide_Wide_Character
+    is
+       L, R, M : Natural;
+ 
+       MV : constant Wide_Wide_Character_Mapping_Values_Access := Map.Map;
+ 
+    begin
+       L := 1;
+       R := MV.Domain'Last;
+ 
+       --  Binary search loop
+ 
+       loop
+          --  If not found, identity
+ 
+          if L > R then
+             return Element;
+ 
+          --  Otherwise do binary divide
+ 
+          else
+             M := (L + R) / 2;
+ 
+             if Element < MV.Domain (M) then
+                R := M - 1;
+ 
+             elsif Element > MV.Domain (M) then
+                L := M + 1;
+ 
+             else --  Element = MV.Domain (M) then
+                return MV.Rangev (M);
+             end if;
+          end if;
+       end loop;
+    end Value;
+ 
+ end Ada.Strings.Wide_Wide_Maps;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-stzmap.ads gcc-4.0.0/gcc/ada/a-stzmap.ads
*** gcc-3.4.3/gcc/ada/a-stzmap.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-stzmap.ads	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,242 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --           A D A . S T R I N G S . W I D E _ W I D E _ M A P S            --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Finalization;
+ 
+ package Ada.Strings.Wide_Wide_Maps is
+    pragma Preelaborate (Wide_Wide_Maps);
+ 
+    ------------------------------------------
+    -- Wide_Wide_Character Set Declarations --
+    ------------------------------------------
+ 
+    type Wide_Wide_Character_Set is private;
+    --  Representation for a set of Wide_Wide_Character values:
+ 
+    Null_Set : constant Wide_Wide_Character_Set;
+ 
+    -----------------------------------------------
+    -- Constructors for Wide_Wide_Character Sets --
+    -----------------------------------------------
+ 
+    type Wide_Wide_Character_Range is record
+       Low  : Wide_Wide_Character;
+       High : Wide_Wide_Character;
+    end record;
+    --  Represents Wide_Wide_Character range Low .. High
+ 
+    type Wide_Wide_Character_Ranges is
+      array (Positive range <>) of Wide_Wide_Character_Range;
+ 
+    function To_Set
+      (Ranges : Wide_Wide_Character_Ranges) return Wide_Wide_Character_Set;
+ 
+    function To_Set
+      (Span : Wide_Wide_Character_Range) return Wide_Wide_Character_Set;
+ 
+    function To_Ranges
+      (Set : Wide_Wide_Character_Set) return Wide_Wide_Character_Ranges;
+ 
+    ---------------------------------------
+    -- Operations on Wide Character Sets --
+    ---------------------------------------
+ 
+    function "=" (Left, Right : in Wide_Wide_Character_Set) return Boolean;
+ 
+    function "not"
+      (Right : Wide_Wide_Character_Set) return Wide_Wide_Character_Set;
+ 
+    function "and"
+      (Left, Right : Wide_Wide_Character_Set) return Wide_Wide_Character_Set;
+ 
+    function "or"
+      (Left, Right : Wide_Wide_Character_Set) return Wide_Wide_Character_Set;
+ 
+    function "xor"
+      (Left, Right : Wide_Wide_Character_Set) return Wide_Wide_Character_Set;
+ 
+    function "-"
+      (Left, Right : Wide_Wide_Character_Set) return Wide_Wide_Character_Set;
+ 
+    function Is_In
+      (Element : Wide_Wide_Character;
+       Set     : Wide_Wide_Character_Set) return Boolean;
+ 
+    function Is_Subset
+      (Elements : Wide_Wide_Character_Set;
+       Set      : Wide_Wide_Character_Set) return Boolean;
+ 
+    function "<="
+      (Left  : Wide_Wide_Character_Set;
+       Right : Wide_Wide_Character_Set) return Boolean
+    renames Is_Subset;
+ 
+    subtype Wide_Wide_Character_Sequence is Wide_Wide_String;
+    --  Alternative representation for a set of character values
+ 
+    function To_Set
+      (Sequence : Wide_Wide_Character_Sequence) return Wide_Wide_Character_Set;
+ 
+    function To_Set
+      (Singleton : Wide_Wide_Character) return Wide_Wide_Character_Set;
+ 
+    function To_Sequence
+      (Set : Wide_Wide_Character_Set) return Wide_Wide_Character_Sequence;
+ 
+    ----------------------------------------------
+    -- Wide_Wide_Character Mapping Declarations --
+    ----------------------------------------------
+ 
+    type Wide_Wide_Character_Mapping is private;
+    --  Representation for a wide character to wide character mapping:
+ 
+    function Value
+      (Map     : Wide_Wide_Character_Mapping;
+       Element : Wide_Wide_Character) return Wide_Wide_Character;
+ 
+    Identity : constant Wide_Wide_Character_Mapping;
+ 
+    --------------------------------------
+    -- Operations on Wide Wide Mappings --
+    ---------------------------------------
+ 
+    function To_Mapping
+      (From, To : Wide_Wide_Character_Sequence)
+       return Wide_Wide_Character_Mapping;
+ 
+    function To_Domain
+      (Map : Wide_Wide_Character_Mapping) return Wide_Wide_Character_Sequence;
+ 
+    function To_Range
+      (Map : Wide_Wide_Character_Mapping) return Wide_Wide_Character_Sequence;
+ 
+    type Wide_Wide_Character_Mapping_Function is
+       access function (From : Wide_Wide_Character) return Wide_Wide_Character;
+ 
+ private
+    package AF renames Ada.Finalization;
+ 
+    -----------------------------------------------
+    -- Representation of Wide_Wide_Character_Set --
+    -----------------------------------------------
+ 
+    --  A wide character set is represented as a sequence of wide character
+    --  ranges (i.e. an object of type Wide_Wide_Character_Ranges) in which the
+    --  following hold:
+ 
+    --    The lower bound is 1
+    --    The ranges are in order by increasing Low values
+    --    The ranges are non-overlapping and discontigous
+ 
+    --  A character value is in the set if it is contained in one of the
+    --  ranges. The actual Wide_Wide_Character_Set value is a controlled pointer
+    --  to this Wide_Wide_Character_Ranges value. The use of a controlled type
+    --  is necessary to prevent storage leaks.
+ 
+    type Wide_Wide_Character_Ranges_Access is
+      access all Wide_Wide_Character_Ranges;
+ 
+    type Wide_Wide_Character_Set is new AF.Controlled with record
+       Set : Wide_Wide_Character_Ranges_Access;
+    end record;
+ 
+    pragma Finalize_Storage_Only (Wide_Wide_Character_Set);
+    --  This avoids useless finalizations, and, more importantly avoids
+    --  incorrect attempts to finalize constants that are statically
+    --  declared here and in Ada.Strings.Wide_Wide_Maps, which is incorrect.
+ 
+    procedure Initialize (Object : in out Wide_Wide_Character_Set);
+    procedure Adjust     (Object : in out Wide_Wide_Character_Set);
+    procedure Finalize   (Object : in out Wide_Wide_Character_Set);
+ 
+    Null_Range : aliased constant Wide_Wide_Character_Ranges :=
+                   (1 .. 0 => (Low => ' ', High => ' '));
+ 
+    Null_Set : constant Wide_Wide_Character_Set :=
+                 (AF.Controlled with
+                  Set => Null_Range'Unrestricted_Access);
+ 
+    ---------------------------------------------------
+    -- Representation of Wide_Wide_Character_Mapping --
+    ---------------------------------------------------
+ 
+    --  A wide character mapping is represented as two strings of equal
+    --  length, where any character appearing in Domain is mapped to the
+    --  corresponding character in Rangev. A character not appearing in
+    --  Domain is mapped to itself. The characters in Domain are sorted
+    --  in ascending order.
+ 
+    --  The actual Wide_Wide_Character_Mapping value is a controlled record
+    --  that contains a pointer to a discriminated record containing the
+    --  range and domain values.
+ 
+    --  Note: this representation is canonical, and the values stored in
+    --  Domain and Rangev are exactly the values that are returned by the
+    --  functions To_Domain and To_Range. The use of a controlled type is
+    --  necessary to prevent storage leaks.
+ 
+    type Wide_Wide_Character_Mapping_Values (Length : Natural) is record
+       Domain : Wide_Wide_Character_Sequence (1 .. Length);
+       Rangev : Wide_Wide_Character_Sequence (1 .. Length);
+    end record;
+ 
+    type Wide_Wide_Character_Mapping_Values_Access is
+      access all Wide_Wide_Character_Mapping_Values;
+ 
+    type Wide_Wide_Character_Mapping is new AF.Controlled with record
+       Map : Wide_Wide_Character_Mapping_Values_Access;
+    end record;
+ 
+    pragma Finalize_Storage_Only (Wide_Wide_Character_Mapping);
+    --  This avoids useless finalizations, and, more importantly avoids
+    --  incorrect attempts to finalize constants that are statically
+    --  declared here and in Ada.Strings.Wide_Wide_Maps, which is incorrect.
+ 
+    procedure Initialize (Object : in out Wide_Wide_Character_Mapping);
+    procedure Adjust     (Object : in out Wide_Wide_Character_Mapping);
+    procedure Finalize   (Object : in out Wide_Wide_Character_Mapping);
+ 
+    Null_Map : aliased constant Wide_Wide_Character_Mapping_Values :=
+                  (Length => 0,
+                   Domain => "",
+                   Rangev => "");
+ 
+    Identity : constant Wide_Wide_Character_Mapping :=
+                 (AF.Controlled with
+                  Map => Null_Map'Unrestricted_Access);
+ 
+ end Ada.Strings.Wide_Wide_Maps;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-stzsea.adb gcc-4.0.0/gcc/ada/a-stzsea.adb
*** gcc-3.4.3/gcc/ada/a-stzsea.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-stzsea.adb	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,420 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --         A D A . S T R I N G S . W I D E _ W I D E _ S E A R C H          --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Strings.Wide_Wide_Maps; use Ada.Strings.Wide_Wide_Maps;
+ 
+ package body Ada.Strings.Wide_Wide_Search is
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    function Belongs
+      (Element : Wide_Wide_Character;
+       Set     : Wide_Wide_Maps.Wide_Wide_Character_Set;
+       Test    : Membership) return Boolean;
+    pragma Inline (Belongs);
+    --  Determines if the given element is in (Test = Inside) or not in
+    --  (Test = Outside) the given character set.
+ 
+    -------------
+    -- Belongs --
+    -------------
+ 
+    function Belongs
+      (Element : Wide_Wide_Character;
+       Set     : Wide_Wide_Maps.Wide_Wide_Character_Set;
+       Test    : Membership) return Boolean
+    is
+    begin
+       if Test = Inside then
+          return Is_In (Element, Set);
+       else
+          return not Is_In (Element, Set);
+       end if;
+    end Belongs;
+ 
+    -----------
+    -- Count --
+    -----------
+ 
+    function Count
+      (Source  : Wide_Wide_String;
+       Pattern : Wide_Wide_String;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping :=
+                   Wide_Wide_Maps.Identity)
+       return Natural
+    is
+       N : Natural;
+       J : Natural;
+ 
+    begin
+       if Pattern = "" then
+          raise Pattern_Error;
+       end if;
+ 
+       --  Handle the case of non-identity mappings by creating a mapped
+       --  string and making a recursive call using the identity mapping
+       --  on this mapped string.
+ 
+       if Mapping /= Wide_Wide_Maps.Identity then
+          declare
+             Mapped_Source : Wide_Wide_String (Source'Range);
+ 
+          begin
+             for J in Source'Range loop
+                Mapped_Source (J) := Value (Mapping, Source (J));
+             end loop;
+ 
+             return Count (Mapped_Source, Pattern);
+          end;
+       end if;
+ 
+       N := 0;
+       J := Source'First;
+ 
+       while J <= Source'Last - (Pattern'Length - 1) loop
+          if Source (J .. J + (Pattern'Length - 1)) = Pattern then
+             N := N + 1;
+             J := J + Pattern'Length;
+          else
+             J := J + 1;
+          end if;
+       end loop;
+ 
+       return N;
+    end Count;
+ 
+    function Count
+      (Source  : Wide_Wide_String;
+       Pattern : Wide_Wide_String;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
+       return Natural
+    is
+       Mapped_Source : Wide_Wide_String (Source'Range);
+ 
+    begin
+       for J in Source'Range loop
+          Mapped_Source (J) := Mapping (Source (J));
+       end loop;
+ 
+       return Count (Mapped_Source, Pattern);
+    end Count;
+ 
+    function Count
+      (Source : Wide_Wide_String;
+       Set : Wide_Wide_Maps.Wide_Wide_Character_Set) return Natural
+    is
+       N : Natural := 0;
+ 
+    begin
+       for J in Source'Range loop
+          if Is_In (Source (J), Set) then
+             N := N + 1;
+          end if;
+       end loop;
+ 
+       return N;
+    end Count;
+ 
+    ----------------
+    -- Find_Token --
+    ----------------
+ 
+    procedure Find_Token
+      (Source : Wide_Wide_String;
+       Set    : Wide_Wide_Maps.Wide_Wide_Character_Set;
+       Test   : Membership;
+       First  : out Positive;
+       Last   : out Natural)
+    is
+    begin
+       for J in Source'Range loop
+          if Belongs (Source (J), Set, Test) then
+             First := J;
+ 
+             for K in J + 1 .. Source'Last loop
+                if not Belongs (Source (K), Set, Test) then
+                   Last := K - 1;
+                   return;
+                end if;
+             end loop;
+ 
+             --  Here if J indexes 1st char of token, and all chars
+             --  after J are in the token
+ 
+             Last := Source'Last;
+             return;
+          end if;
+       end loop;
+ 
+       --  Here if no token found
+ 
+       First := Source'First;
+       Last  := 0;
+    end Find_Token;
+ 
+    -----------
+    -- Index --
+    -----------
+ 
+    function Index
+      (Source  : Wide_Wide_String;
+       Pattern : Wide_Wide_String;
+       Going   : Direction := Forward;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping :=
+                   Wide_Wide_Maps.Identity)
+       return Natural
+    is
+    begin
+       if Pattern = "" then
+          raise Pattern_Error;
+       end if;
+ 
+       --  Handle the case of non-identity mappings by creating a mapped
+       --  string and making a recursive call using the identity mapping
+       --  on this mapped string.
+ 
+       if Mapping /= Identity then
+          declare
+             Mapped_Source : Wide_Wide_String (Source'Range);
+ 
+          begin
+             for J in Source'Range loop
+                Mapped_Source (J) := Value (Mapping, Source (J));
+             end loop;
+ 
+             return Index (Mapped_Source, Pattern, Going);
+          end;
+       end if;
+ 
+       if Going = Forward then
+          for J in Source'First .. Source'Last - Pattern'Length + 1 loop
+             if Pattern = Source (J .. J + Pattern'Length - 1) then
+                return J;
+             end if;
+          end loop;
+ 
+       else -- Going = Backward
+          for J in reverse Source'First .. Source'Last - Pattern'Length + 1 loop
+             if Pattern = Source (J .. J + Pattern'Length - 1) then
+                return J;
+             end if;
+          end loop;
+       end if;
+ 
+       --  Fall through if no match found. Note that the loops are skipped
+       --  completely in the case of the pattern being longer than the source.
+ 
+       return 0;
+    end Index;
+ 
+    function Index
+      (Source  : Wide_Wide_String;
+       Pattern : Wide_Wide_String;
+       Going   : Direction := Forward;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
+       return Natural
+    is
+       Mapped_Source : Wide_Wide_String (Source'Range);
+ 
+    begin
+       for J in Source'Range loop
+          Mapped_Source (J) := Mapping (Source (J));
+       end loop;
+ 
+       return Index (Mapped_Source, Pattern, Going);
+    end Index;
+ 
+    function Index
+      (Source : Wide_Wide_String;
+       Set    : Wide_Wide_Maps.Wide_Wide_Character_Set;
+       Test   : Membership := Inside;
+       Going  : Direction  := Forward) return Natural
+    is
+    begin
+       if Going = Forward then
+          for J in Source'Range loop
+             if Belongs (Source (J), Set, Test) then
+                return J;
+             end if;
+          end loop;
+ 
+       else -- Going = Backward
+          for J in reverse Source'Range loop
+             if Belongs (Source (J), Set, Test) then
+                return J;
+             end if;
+          end loop;
+       end if;
+ 
+       --  Fall through if no match
+ 
+       return 0;
+    end Index;
+ 
+    function Index
+      (Source  : Wide_Wide_String;
+       Pattern : Wide_Wide_String;
+       From    : Positive;
+       Going   : Direction := Forward;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping :=
+                   Wide_Wide_Maps.Identity)
+       return Natural
+    is
+    begin
+       if Going = Forward then
+          if From < Source'First then
+             raise Index_Error;
+          end if;
+ 
+          return
+            Index (Source (From .. Source'Last), Pattern, Forward, Mapping);
+ 
+       else
+          if From > Source'Last then
+             raise Index_Error;
+          end if;
+ 
+          return
+            Index (Source (Source'First .. From), Pattern, Backward, Mapping);
+       end if;
+    end Index;
+ 
+    function Index
+      (Source  : Wide_Wide_String;
+       Pattern : Wide_Wide_String;
+       From    : Positive;
+       Going   : Direction := Forward;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
+       return Natural
+    is
+    begin
+       if Going = Forward then
+          if From < Source'First then
+             raise Index_Error;
+          end if;
+ 
+          return Index
+            (Source (From .. Source'Last), Pattern, Forward, Mapping);
+ 
+       else
+          if From > Source'Last then
+             raise Index_Error;
+          end if;
+ 
+          return Index
+            (Source (Source'First .. From), Pattern, Backward, Mapping);
+       end if;
+    end Index;
+ 
+    function Index
+      (Source  : Wide_Wide_String;
+       Set     : Wide_Wide_Maps.Wide_Wide_Character_Set;
+       From    : Positive;
+       Test    : Membership := Inside;
+       Going   : Direction := Forward) return Natural
+    is
+    begin
+       if Going = Forward then
+          if From < Source'First then
+             raise Index_Error;
+          end if;
+ 
+          return
+            Index (Source (From .. Source'Last), Set, Test, Forward);
+ 
+       else
+          if From > Source'Last then
+             raise Index_Error;
+          end if;
+ 
+          return
+            Index (Source (Source'First .. From), Set, Test, Backward);
+       end if;
+    end Index;
+ 
+    ---------------------
+    -- Index_Non_Blank --
+    ---------------------
+ 
+    function Index_Non_Blank
+      (Source : Wide_Wide_String;
+       Going  : Direction := Forward) return Natural
+    is
+    begin
+       if Going = Forward then
+          for J in Source'Range loop
+             if Source (J) /= Wide_Wide_Space then
+                return J;
+             end if;
+          end loop;
+ 
+       else -- Going = Backward
+          for J in reverse Source'Range loop
+             if Source (J) /= Wide_Wide_Space then
+                return J;
+             end if;
+          end loop;
+       end if;
+ 
+       --  Fall through if no match
+ 
+       return 0;
+    end Index_Non_Blank;
+ 
+    function Index_Non_Blank
+      (Source : Wide_Wide_String;
+       From   : Positive;
+       Going  : Direction := Forward) return Natural
+    is
+    begin
+       if Going = Forward then
+          if From < Source'First then
+             raise Index_Error;
+          end if;
+ 
+          return
+            Index_Non_Blank (Source (From .. Source'Last), Forward);
+ 
+       else
+          if From > Source'Last then
+             raise Index_Error;
+          end if;
+ 
+          return
+            Index_Non_Blank (Source (Source'First .. From), Backward);
+       end if;
+    end Index_Non_Blank;
+ 
+ end Ada.Strings.Wide_Wide_Search;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-stzsea.ads gcc-4.0.0/gcc/ada/a-stzsea.ads
*** gcc-3.4.3/gcc/ada/a-stzsea.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-stzsea.ads	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,124 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --         A D A . S T R I N G S . W I D E _ W I D E _ S E A R C H          --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package contains search functions from Ada.Strings.Wide_Wide_Fixed.
+ --  They are separated because Ada.Strings.Wide_Wide_Bounded shares these
+ --  search functions with Ada.Strings.Wide_Wide_Unbounded, and we don't want
+ --  to drag other irrelevant stuff from Ada.Strings.Wide_Wide_Fixed when using
+ --  the other two packages. We make this a private package, since user
+ --  programs should access these subprograms via one of the standard string
+ --  packages.
+ 
+ with Ada.Strings.Wide_Wide_Maps;
+ 
+ private package Ada.Strings.Wide_Wide_Search is
+ pragma Preelaborate (Wide_Wide_Search);
+ 
+    function Index
+      (Source  : Wide_Wide_String;
+       Pattern : Wide_Wide_String;
+       Going   : Direction := Forward;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping :=
+                   Wide_Wide_Maps.Identity) return Natural;
+ 
+    function Index
+      (Source  : Wide_Wide_String;
+       Pattern : Wide_Wide_String;
+       Going   : Direction := Forward;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
+       return Natural;
+ 
+    function Index
+      (Source : Wide_Wide_String;
+       Set    : Wide_Wide_Maps.Wide_Wide_Character_Set;
+       Test   : Membership := Inside;
+       Going  : Direction  := Forward) return Natural;
+ 
+    function Index
+      (Source  : Wide_Wide_String;
+       Pattern : Wide_Wide_String;
+       From    : Positive;
+       Going   : Direction := Forward;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping :=
+                   Wide_Wide_Maps.Identity)
+       return Natural;
+ 
+    function Index
+      (Source  : Wide_Wide_String;
+       Pattern : Wide_Wide_String;
+       From    : Positive;
+       Going   : Direction := Forward;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
+       return Natural;
+ 
+    function Index
+      (Source  : Wide_Wide_String;
+       Set     : Wide_Wide_Maps.Wide_Wide_Character_Set;
+       From    : Positive;
+       Test    : Membership := Inside;
+       Going   : Direction := Forward) return Natural;
+ 
+    function Index_Non_Blank
+      (Source : Wide_Wide_String;
+       Going  : Direction := Forward) return Natural;
+ 
+    function Index_Non_Blank
+      (Source : Wide_Wide_String;
+       From   : Positive;
+       Going  : Direction := Forward) return Natural;
+ 
+    function Count
+      (Source  : Wide_Wide_String;
+       Pattern : Wide_Wide_String;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping :=
+                   Wide_Wide_Maps.Identity)
+       return Natural;
+ 
+    function Count
+      (Source  : Wide_Wide_String;
+       Pattern : Wide_Wide_String;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
+       return Natural;
+ 
+    function Count
+      (Source : Wide_Wide_String;
+       Set    : Wide_Wide_Maps.Wide_Wide_Character_Set) return Natural;
+ 
+    procedure Find_Token
+      (Source : Wide_Wide_String;
+       Set    : Wide_Wide_Maps.Wide_Wide_Character_Set;
+       Test   : Membership;
+       First  : out Positive;
+       Last   : out Natural);
+ 
+ end Ada.Strings.Wide_Wide_Search;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-stzsup.adb gcc-4.0.0/gcc/ada/a-stzsup.adb
*** gcc-3.4.3/gcc/ada/a-stzsup.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-stzsup.adb	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,1920 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --   A D A . S T R I N G S . W I D E _ W I D E _ S U P E R B O U N D E D    --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 2003-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Strings.Wide_Wide_Maps;   use Ada.Strings.Wide_Wide_Maps;
+ with Ada.Strings.Wide_Wide_Search;
+ 
+ package body Ada.Strings.Wide_Wide_Superbounded is
+ 
+    ------------
+    -- Concat --
+    ------------
+ 
+    function Concat
+      (Left  : Super_String;
+       Right : Super_String) return Super_String
+    is
+       Result : Super_String (Left.Max_Length);
+       Llen   : constant Natural := Left.Current_Length;
+       Rlen   : constant Natural := Right.Current_Length;
+       Nlen   : constant Natural := Llen + Rlen;
+ 
+    begin
+       if Nlen > Left.Max_Length then
+          raise Ada.Strings.Length_Error;
+       else
+          Result.Current_Length := Nlen;
+          Result.Data (1 .. Llen) := Left.Data (1 .. Llen);
+          Result.Data (Llen + 1 .. Nlen) := Right.Data (1 .. Rlen);
+       end if;
+ 
+       return Result;
+    end Concat;
+ 
+    function Concat
+      (Left  : Super_String;
+       Right : Wide_Wide_String) return Super_String
+    is
+       Result : Super_String (Left.Max_Length);
+       Llen   : constant Natural := Left.Current_Length;
+ 
+       Nlen   : constant Natural := Llen + Right'Length;
+ 
+    begin
+       if Nlen > Left.Max_Length then
+          raise Ada.Strings.Length_Error;
+       else
+          Result.Current_Length := Nlen;
+          Result.Data (1 .. Llen) := Left.Data (1 .. Llen);
+          Result.Data (Llen + 1 .. Nlen) := Right;
+       end if;
+       return Result;
+    end Concat;
+ 
+    function Concat
+      (Left  : Wide_Wide_String;
+       Right : Super_String) return Super_String
+    is
+       Result : Super_String (Right.Max_Length);
+       Llen   : constant Natural := Left'Length;
+       Rlen   : constant Natural := Right.Current_Length;
+       Nlen   : constant Natural := Llen + Rlen;
+ 
+    begin
+       if Nlen > Right.Max_Length then
+          raise Ada.Strings.Length_Error;
+       else
+          Result.Current_Length := Nlen;
+          Result.Data (1 .. Llen) := Left;
+          Result.Data (Llen + 1 .. Nlen) := Right.Data (1 .. Rlen);
+       end if;
+ 
+       return Result;
+    end Concat;
+ 
+    function Concat
+      (Left  : Super_String;
+       Right : Wide_Wide_Character) return Super_String
+    is
+       Result : Super_String (Left.Max_Length);
+       Llen   : constant Natural := Left.Current_Length;
+ 
+    begin
+       if Llen = Left.Max_Length then
+          raise Ada.Strings.Length_Error;
+       else
+          Result.Current_Length := Llen + 1;
+          Result.Data (1 .. Llen) := Left.Data (1 .. Llen);
+          Result.Data (Result.Current_Length) := Right;
+       end if;
+ 
+       return Result;
+    end Concat;
+ 
+    function Concat
+      (Left  : Wide_Wide_Character;
+       Right : Super_String) return Super_String
+    is
+       Result : Super_String (Right.Max_Length);
+       Rlen   : constant Natural := Right.Current_Length;
+ 
+    begin
+       if Rlen = Right.Max_Length then
+          raise Ada.Strings.Length_Error;
+       else
+          Result.Current_Length := Rlen + 1;
+          Result.Data (1) := Left;
+          Result.Data (2 .. Result.Current_Length) := Right.Data (1 .. Rlen);
+       end if;
+ 
+       return Result;
+    end Concat;
+ 
+    -----------
+    -- Equal --
+    -----------
+ 
+    function "="
+      (Left  : Super_String;
+       Right : Super_String) return Boolean
+    is
+    begin
+       return Left.Current_Length = Right.Current_Length
+         and then Left.Data (1 .. Left.Current_Length) =
+                    Right.Data (1 .. Right.Current_Length);
+    end "=";
+ 
+    function Equal
+      (Left  : Super_String;
+       Right : Wide_Wide_String) return Boolean
+    is
+    begin
+       return Left.Current_Length = Right'Length
+         and then Left.Data (1 .. Left.Current_Length) = Right;
+    end Equal;
+ 
+    function Equal
+      (Left  : Wide_Wide_String;
+       Right : Super_String) return Boolean
+    is
+    begin
+       return Left'Length = Right.Current_Length
+         and then Left = Right.Data (1 .. Right.Current_Length);
+    end Equal;
+ 
+    -------------
+    -- Greater --
+    -------------
+ 
+    function Greater
+      (Left  : Super_String;
+       Right : Super_String) return Boolean
+    is
+    begin
+       return Left.Data (1 .. Left.Current_Length) >
+                Right.Data (1 .. Right.Current_Length);
+    end Greater;
+ 
+    function Greater
+      (Left  : Super_String;
+       Right : Wide_Wide_String) return Boolean
+    is
+    begin
+       return Left.Data (1 .. Left.Current_Length) > Right;
+    end Greater;
+ 
+    function Greater
+      (Left  : Wide_Wide_String;
+       Right : Super_String) return Boolean
+    is
+    begin
+       return Left > Right.Data (1 .. Right.Current_Length);
+    end Greater;
+ 
+    ----------------------
+    -- Greater_Or_Equal --
+    ----------------------
+ 
+    function Greater_Or_Equal
+      (Left  : Super_String;
+       Right : Super_String) return Boolean
+    is
+    begin
+       return Left.Data (1 .. Left.Current_Length) >=
+                Right.Data (1 .. Right.Current_Length);
+    end Greater_Or_Equal;
+ 
+    function Greater_Or_Equal
+      (Left  : Super_String;
+       Right : Wide_Wide_String) return Boolean
+    is
+    begin
+       return Left.Data (1 .. Left.Current_Length) >= Right;
+    end Greater_Or_Equal;
+ 
+    function Greater_Or_Equal
+      (Left  : Wide_Wide_String;
+       Right : Super_String) return Boolean
+    is
+    begin
+       return Left >= Right.Data (1 .. Right.Current_Length);
+    end Greater_Or_Equal;
+ 
+    ----------
+    -- Less --
+    ----------
+ 
+    function Less
+      (Left  : Super_String;
+       Right : Super_String) return Boolean
+    is
+    begin
+       return Left.Data (1 .. Left.Current_Length) <
+                Right.Data (1 .. Right.Current_Length);
+    end Less;
+ 
+    function Less
+      (Left  : Super_String;
+       Right : Wide_Wide_String) return Boolean
+    is
+    begin
+       return Left.Data (1 .. Left.Current_Length) < Right;
+    end Less;
+ 
+    function Less
+      (Left  : Wide_Wide_String;
+       Right : Super_String) return Boolean
+    is
+    begin
+       return Left < Right.Data (1 .. Right.Current_Length);
+    end Less;
+ 
+    -------------------
+    -- Less_Or_Equal --
+    -------------------
+ 
+    function Less_Or_Equal
+      (Left  : Super_String;
+       Right : Super_String) return Boolean
+    is
+    begin
+       return Left.Data (1 .. Left.Current_Length) <=
+                Right.Data (1 .. Right.Current_Length);
+    end Less_Or_Equal;
+ 
+    function Less_Or_Equal
+      (Left  : Super_String;
+       Right : Wide_Wide_String) return Boolean
+    is
+    begin
+       return Left.Data (1 .. Left.Current_Length) <= Right;
+    end Less_Or_Equal;
+ 
+    function Less_Or_Equal
+      (Left  : Wide_Wide_String;
+       Right : Super_String) return Boolean
+    is
+    begin
+       return Left <= Right.Data (1 .. Right.Current_Length);
+    end Less_Or_Equal;
+ 
+    ----------------------
+    -- Set_Super_String --
+    ----------------------
+ 
+    procedure Set_Super_String
+      (Target : out Super_String;
+       Source : Wide_Wide_String;
+       Drop   : Truncation := Error)
+    is
+       Slen       : constant Natural := Source'Length;
+       Max_Length : constant Positive := Target.Max_Length;
+ 
+    begin
+       if Slen <= Max_Length then
+          Target.Current_Length := Slen;
+          Target.Data (1 .. Slen) := Source;
+ 
+       else
+          case Drop is
+             when Strings.Right =>
+                Target.Current_Length := Max_Length;
+                Target.Data (1 .. Max_Length) :=
+                  Source (Source'First .. Source'First - 1 + Max_Length);
+ 
+             when Strings.Left =>
+                Target.Current_Length := Max_Length;
+                Target.Data (1 .. Max_Length) :=
+                  Source (Source'Last - (Max_Length - 1) .. Source'Last);
+ 
+             when Strings.Error =>
+                raise Ada.Strings.Length_Error;
+          end case;
+       end if;
+    end Set_Super_String;
+ 
+    ------------------
+    -- Super_Append --
+    ------------------
+ 
+    --  Case of Super_String and Super_String
+ 
+    function Super_Append
+      (Left  : Super_String;
+       Right : Super_String;
+       Drop  : Strings.Truncation := Strings.Error) return Super_String
+    is
+       Max_Length : constant Positive := Left.Max_Length;
+       Result : Super_String (Max_Length);
+       Llen   : constant Natural := Left.Current_Length;
+       Rlen   : constant Natural := Right.Current_Length;
+       Nlen   : constant Natural := Llen + Rlen;
+ 
+    begin
+       if Nlen <= Max_Length then
+          Result.Current_Length := Nlen;
+          Result.Data (1 .. Llen) := Left.Data (1 .. Llen);
+          Result.Data (Llen + 1 .. Nlen) := Right.Data (1 .. Rlen);
+ 
+       else
+          Result.Current_Length := Max_Length;
+ 
+          case Drop is
+             when Strings.Right =>
+                if Llen >= Max_Length then -- only case is Llen = Max_Length
+                   Result.Data := Left.Data;
+ 
+                else
+                   Result.Data (1 .. Llen) := Left.Data (1 .. Llen);
+                   Result.Data (Llen + 1 .. Max_Length) :=
+                     Right.Data (1 .. Max_Length - Llen);
+                end if;
+ 
+             when Strings.Left =>
+                if Rlen >= Max_Length then -- only case is Rlen = Max_Length
+                   Result.Data := Right.Data;
+ 
+                else
+                   Result.Data (1 .. Max_Length - Rlen) :=
+                     Left.Data (Llen - (Max_Length - Rlen - 1) .. Llen);
+                   Result.Data (Max_Length - Rlen + 1 .. Max_Length) :=
+                     Right.Data (1 .. Rlen);
+                end if;
+ 
+             when Strings.Error =>
+                raise Ada.Strings.Length_Error;
+          end case;
+       end if;
+ 
+       return Result;
+    end Super_Append;
+ 
+    procedure Super_Append
+      (Source   : in out Super_String;
+       New_Item : Super_String;
+       Drop     : Truncation := Error)
+    is
+       Max_Length : constant Positive := Source.Max_Length;
+       Llen       : constant Natural := Source.Current_Length;
+       Rlen       : constant Natural := New_Item.Current_Length;
+       Nlen       : constant Natural := Llen + Rlen;
+ 
+    begin
+       if Nlen <= Max_Length then
+          Source.Current_Length := Nlen;
+          Source.Data (Llen + 1 .. Nlen) := New_Item.Data (1 .. Rlen);
+ 
+       else
+          Source.Current_Length := Max_Length;
+ 
+          case Drop is
+             when Strings.Right =>
+                if Llen < Max_Length then
+                   Source.Data (Llen + 1 .. Max_Length) :=
+                     New_Item.Data (1 .. Max_Length - Llen);
+                end if;
+ 
+             when Strings.Left =>
+                if Rlen >= Max_Length then -- only case is Rlen = Max_Length
+                   Source.Data := New_Item.Data;
+ 
+                else
+                   Source.Data (1 .. Max_Length - Rlen) :=
+                     Source.Data (Llen - (Max_Length - Rlen - 1) .. Llen);
+                   Source.Data (Max_Length - Rlen + 1 .. Max_Length) :=
+                     New_Item.Data (1 .. Rlen);
+                end if;
+ 
+             when Strings.Error =>
+                raise Ada.Strings.Length_Error;
+          end case;
+       end if;
+ 
+    end Super_Append;
+ 
+    --  Case of Super_String and Wide_Wide_String
+ 
+    function Super_Append
+      (Left  : Super_String;
+       Right : Wide_Wide_String;
+       Drop  : Strings.Truncation := Strings.Error) return Super_String
+    is
+       Max_Length : constant Positive := Left.Max_Length;
+       Result : Super_String (Max_Length);
+       Llen   : constant Natural := Left.Current_Length;
+       Rlen   : constant Natural := Right'Length;
+       Nlen   : constant Natural := Llen + Rlen;
+ 
+    begin
+       if Nlen <= Max_Length then
+          Result.Current_Length := Nlen;
+          Result.Data (1 .. Llen) := Left.Data (1 .. Llen);
+          Result.Data (Llen + 1 .. Nlen) := Right;
+ 
+       else
+          Result.Current_Length := Max_Length;
+ 
+          case Drop is
+             when Strings.Right =>
+                if Llen >= Max_Length then -- only case is Llen = Max_Length
+                   Result.Data := Left.Data;
+ 
+                else
+                   Result.Data (1 .. Llen) := Left.Data (1 .. Llen);
+                   Result.Data (Llen + 1 .. Max_Length) :=
+                     Right (Right'First .. Right'First - 1 +
+                              Max_Length - Llen);
+ 
+                end if;
+ 
+             when Strings.Left =>
+                if Rlen >= Max_Length then
+                   Result.Data (1 .. Max_Length) :=
+                     Right (Right'Last - (Max_Length - 1) .. Right'Last);
+ 
+                else
+                   Result.Data (1 .. Max_Length - Rlen) :=
+                     Left.Data (Llen - (Max_Length - Rlen - 1) .. Llen);
+                   Result.Data (Max_Length - Rlen + 1 .. Max_Length) :=
+                     Right;
+                end if;
+ 
+             when Strings.Error =>
+                raise Ada.Strings.Length_Error;
+          end case;
+       end if;
+ 
+       return Result;
+    end Super_Append;
+ 
+    procedure Super_Append
+      (Source   : in out Super_String;
+       New_Item : Wide_Wide_String;
+       Drop     : Truncation := Error)
+    is
+       Max_Length : constant Positive := Source.Max_Length;
+       Llen   : constant Natural := Source.Current_Length;
+       Rlen   : constant Natural := New_Item'Length;
+       Nlen   : constant Natural := Llen + Rlen;
+ 
+    begin
+       if Nlen <= Max_Length then
+          Source.Current_Length := Nlen;
+          Source.Data (Llen + 1 .. Nlen) := New_Item;
+ 
+       else
+          Source.Current_Length := Max_Length;
+ 
+          case Drop is
+             when Strings.Right =>
+                if Llen < Max_Length then
+                   Source.Data (Llen + 1 .. Max_Length) :=
+                     New_Item (New_Item'First ..
+                                 New_Item'First - 1 + Max_Length - Llen);
+                end if;
+ 
+             when Strings.Left =>
+                if Rlen >= Max_Length then
+                   Source.Data (1 .. Max_Length) :=
+                     New_Item (New_Item'Last - (Max_Length - 1) ..
+                                 New_Item'Last);
+ 
+                else
+                   Source.Data (1 .. Max_Length - Rlen) :=
+                     Source.Data (Llen - (Max_Length - Rlen - 1) .. Llen);
+                   Source.Data (Max_Length - Rlen + 1 .. Max_Length) :=
+                     New_Item;
+                end if;
+ 
+             when Strings.Error =>
+                raise Ada.Strings.Length_Error;
+          end case;
+       end if;
+ 
+    end Super_Append;
+ 
+    --  Case of Wide_Wide_String and Super_String
+ 
+    function Super_Append
+      (Left  : Wide_Wide_String;
+       Right : Super_String;
+       Drop  : Strings.Truncation := Strings.Error) return Super_String
+    is
+       Max_Length : constant Positive := Right.Max_Length;
+       Result     : Super_String (Max_Length);
+       Llen       : constant Natural := Left'Length;
+       Rlen       : constant Natural := Right.Current_Length;
+       Nlen       : constant Natural := Llen + Rlen;
+ 
+    begin
+       if Nlen <= Max_Length then
+          Result.Current_Length := Nlen;
+          Result.Data (1 .. Llen) := Left;
+          Result.Data (Llen + 1 .. Llen + Rlen) := Right.Data (1 .. Rlen);
+ 
+       else
+          Result.Current_Length := Max_Length;
+ 
+          case Drop is
+             when Strings.Right =>
+                if Llen >= Max_Length then
+                   Result.Data (1 .. Max_Length) :=
+                     Left (Left'First .. Left'First + (Max_Length - 1));
+ 
+                else
+                   Result.Data (1 .. Llen) := Left;
+                   Result.Data (Llen + 1 .. Max_Length) :=
+                     Right.Data (1 .. Max_Length - Llen);
+                end if;
+ 
+             when Strings.Left =>
+                if Rlen >= Max_Length then
+                   Result.Data (1 .. Max_Length) :=
+                     Right.Data (Rlen - (Max_Length - 1) .. Rlen);
+ 
+                else
+                   Result.Data (1 .. Max_Length - Rlen) :=
+                     Left (Left'Last - (Max_Length - Rlen - 1) .. Left'Last);
+                   Result.Data (Max_Length - Rlen + 1 .. Max_Length) :=
+                     Right.Data (1 .. Rlen);
+                end if;
+ 
+             when Strings.Error =>
+                raise Ada.Strings.Length_Error;
+          end case;
+       end if;
+ 
+       return Result;
+    end Super_Append;
+ 
+    --  Case of Super_String and Wide_Wide_Character
+ 
+    function Super_Append
+      (Left  : Super_String;
+       Right : Wide_Wide_Character;
+       Drop  : Strings.Truncation := Strings.Error) return Super_String
+    is
+       Max_Length : constant Positive := Left.Max_Length;
+       Result     : Super_String (Max_Length);
+       Llen       : constant Natural := Left.Current_Length;
+ 
+    begin
+       if Llen  < Max_Length then
+          Result.Current_Length := Llen + 1;
+          Result.Data (1 .. Llen) := Left.Data (1 .. Llen);
+          Result.Data (Llen + 1) := Right;
+          return Result;
+ 
+       else
+          case Drop is
+             when Strings.Right =>
+                return Left;
+ 
+             when Strings.Left =>
+                Result.Current_Length := Max_Length;
+                Result.Data (1 .. Max_Length - 1) :=
+                  Left.Data (2 .. Max_Length);
+                Result.Data (Max_Length) := Right;
+                return Result;
+ 
+             when Strings.Error =>
+                raise Ada.Strings.Length_Error;
+          end case;
+       end if;
+    end Super_Append;
+ 
+    procedure Super_Append
+      (Source   : in out Super_String;
+       New_Item : Wide_Wide_Character;
+       Drop     : Truncation := Error)
+    is
+       Max_Length : constant Positive := Source.Max_Length;
+       Llen       : constant Natural  := Source.Current_Length;
+ 
+    begin
+       if Llen  < Max_Length then
+          Source.Current_Length := Llen + 1;
+          Source.Data (Llen + 1) := New_Item;
+ 
+       else
+          Source.Current_Length := Max_Length;
+ 
+          case Drop is
+             when Strings.Right =>
+                null;
+ 
+             when Strings.Left =>
+                Source.Data (1 .. Max_Length - 1) :=
+                  Source.Data (2 .. Max_Length);
+                Source.Data (Max_Length) := New_Item;
+ 
+             when Strings.Error =>
+                raise Ada.Strings.Length_Error;
+          end case;
+       end if;
+ 
+    end Super_Append;
+ 
+    --  Case of Wide_Wide_Character and Super_String
+ 
+    function Super_Append
+      (Left  : Wide_Wide_Character;
+       Right : Super_String;
+       Drop  : Strings.Truncation := Strings.Error) return Super_String
+    is
+       Max_Length : constant Positive := Right.Max_Length;
+       Result : Super_String (Max_Length);
+       Rlen   : constant Natural := Right.Current_Length;
+ 
+    begin
+       if Rlen < Max_Length then
+          Result.Current_Length := Rlen + 1;
+          Result.Data (1) := Left;
+          Result.Data (2 .. Rlen + 1) := Right.Data (1 .. Rlen);
+          return Result;
+ 
+       else
+          case Drop is
+             when Strings.Right =>
+                Result.Current_Length := Max_Length;
+                Result.Data (1) := Left;
+                Result.Data (2 .. Max_Length) :=
+                  Right.Data (1 .. Max_Length - 1);
+                return Result;
+ 
+             when Strings.Left =>
+                return Right;
+ 
+             when Strings.Error =>
+                raise Ada.Strings.Length_Error;
+          end case;
+       end if;
+    end Super_Append;
+ 
+    -----------------
+    -- Super_Count --
+    -----------------
+ 
+    function Super_Count
+      (Source  : Super_String;
+       Pattern : Wide_Wide_String;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping :=
+                   Wide_Wide_Maps.Identity)
+       return Natural
+    is
+    begin
+       return
+         Wide_Wide_Search.Count
+           (Source.Data (1 .. Source.Current_Length), Pattern, Mapping);
+    end Super_Count;
+ 
+    function Super_Count
+      (Source  : Super_String;
+       Pattern : Wide_Wide_String;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
+       return Natural
+    is
+    begin
+       return
+         Wide_Wide_Search.Count
+           (Source.Data (1 .. Source.Current_Length), Pattern, Mapping);
+    end Super_Count;
+ 
+    function Super_Count
+      (Source : Super_String;
+       Set    : Wide_Wide_Maps.Wide_Wide_Character_Set) return Natural
+    is
+    begin
+       return Wide_Wide_Search.Count
+                (Source.Data (1 .. Source.Current_Length), Set);
+    end Super_Count;
+ 
+    ------------------
+    -- Super_Delete --
+    ------------------
+ 
+    function Super_Delete
+      (Source  : Super_String;
+       From    : Positive;
+       Through : Natural) return Super_String
+    is
+       Result     : Super_String (Source.Max_Length);
+       Slen       : constant Natural := Source.Current_Length;
+       Num_Delete : constant Integer := Through - From + 1;
+ 
+    begin
+       if Num_Delete <= 0 then
+          return Source;
+ 
+       elsif From > Slen + 1 then
+          raise Ada.Strings.Index_Error;
+ 
+       elsif Through >= Slen then
+          Result.Current_Length := From - 1;
+          Result.Data (1 .. From - 1) := Source.Data (1 .. From - 1);
+          return Result;
+ 
+       else
+          Result.Current_Length := Slen - Num_Delete;
+          Result.Data (1 .. From - 1) := Source.Data (1 .. From - 1);
+          Result.Data (From .. Result.Current_Length) :=
+            Source.Data (Through + 1 .. Slen);
+          return Result;
+       end if;
+    end Super_Delete;
+ 
+    procedure Super_Delete
+      (Source  : in out Super_String;
+       From    : Positive;
+       Through : Natural)
+    is
+       Slen       : constant Natural := Source.Current_Length;
+       Num_Delete : constant Integer := Through - From + 1;
+ 
+    begin
+       if Num_Delete <= 0 then
+          return;
+ 
+       elsif From > Slen + 1 then
+          raise Ada.Strings.Index_Error;
+ 
+       elsif Through >= Slen then
+          Source.Current_Length := From - 1;
+ 
+       else
+          Source.Current_Length := Slen - Num_Delete;
+          Source.Data (From .. Source.Current_Length) :=
+            Source.Data (Through + 1 .. Slen);
+       end if;
+    end Super_Delete;
+ 
+    -------------------
+    -- Super_Element --
+    -------------------
+ 
+    function Super_Element
+      (Source : Super_String;
+       Index  : Positive) return Wide_Wide_Character
+    is
+    begin
+       if Index in 1 .. Source.Current_Length then
+          return Source.Data (Index);
+       else
+          raise Strings.Index_Error;
+       end if;
+    end Super_Element;
+ 
+    ----------------------
+    -- Super_Find_Token --
+    ----------------------
+ 
+    procedure Super_Find_Token
+      (Source : Super_String;
+       Set    : Wide_Wide_Maps.Wide_Wide_Character_Set;
+       Test   : Strings.Membership;
+       First  : out Positive;
+       Last   : out Natural)
+    is
+    begin
+       Wide_Wide_Search.Find_Token
+         (Source.Data (1 .. Source.Current_Length), Set, Test, First, Last);
+    end Super_Find_Token;
+ 
+    ----------------
+    -- Super_Head --
+    ----------------
+ 
+    function Super_Head
+      (Source : Super_String;
+       Count  : Natural;
+       Pad    : Wide_Wide_Character := Wide_Wide_Space;
+       Drop   : Strings.Truncation := Strings.Error) return Super_String
+    is
+       Max_Length : constant Positive := Source.Max_Length;
+       Result     : Super_String (Max_Length);
+       Slen       : constant Natural := Source.Current_Length;
+       Npad       : constant Integer := Count - Slen;
+ 
+    begin
+       if Npad <= 0 then
+          Result.Current_Length := Count;
+          Result.Data (1 .. Count) := Source.Data (1 .. Count);
+ 
+       elsif Count <= Max_Length then
+          Result.Current_Length := Count;
+          Result.Data (1 .. Slen) := Source.Data (1 .. Slen);
+          Result.Data (Slen + 1 .. Count) := (others => Pad);
+ 
+       else
+          Result.Current_Length := Max_Length;
+ 
+          case Drop is
+             when Strings.Right =>
+                Result.Data (1 .. Slen) := Source.Data (1 .. Slen);
+                Result.Data (Slen + 1 .. Max_Length) := (others => Pad);
+ 
+             when Strings.Left =>
+                if Npad >= Max_Length then
+                   Result.Data := (others => Pad);
+ 
+                else
+                   Result.Data (1 .. Max_Length - Npad) :=
+                     Source.Data (Count - Max_Length + 1 .. Slen);
+                   Result.Data (Max_Length - Npad + 1 .. Max_Length) :=
+                     (others => Pad);
+                end if;
+ 
+             when Strings.Error =>
+                raise Ada.Strings.Length_Error;
+          end case;
+       end if;
+ 
+       return Result;
+    end Super_Head;
+ 
+    procedure Super_Head
+      (Source : in out Super_String;
+       Count  : Natural;
+       Pad    : Wide_Wide_Character  := Wide_Wide_Space;
+       Drop   : Truncation := Error)
+    is
+       Max_Length : constant Positive := Source.Max_Length;
+       Slen       : constant Natural  := Source.Current_Length;
+       Npad       : constant Integer  := Count - Slen;
+       Temp       : Wide_Wide_String (1 .. Max_Length);
+ 
+    begin
+       if Npad <= 0 then
+          Source.Current_Length := Count;
+ 
+       elsif Count <= Max_Length then
+          Source.Current_Length := Count;
+          Source.Data (Slen + 1 .. Count) := (others => Pad);
+ 
+       else
+          Source.Current_Length := Max_Length;
+ 
+          case Drop is
+             when Strings.Right =>
+                Source.Data (Slen + 1 .. Max_Length) := (others => Pad);
+ 
+             when Strings.Left =>
+                if Npad > Max_Length then
+                   Source.Data := (others => Pad);
+ 
+                else
+                   Temp := Source.Data;
+                   Source.Data (1 .. Max_Length - Npad) :=
+                     Temp (Count - Max_Length + 1 .. Slen);
+ 
+                   for J in Max_Length - Npad + 1 .. Max_Length loop
+                      Source.Data (J) := Pad;
+                   end loop;
+                end if;
+ 
+             when Strings.Error =>
+                raise Ada.Strings.Length_Error;
+          end case;
+       end if;
+    end Super_Head;
+ 
+    -----------------
+    -- Super_Index --
+    -----------------
+ 
+    function Super_Index
+      (Source  : Super_String;
+       Pattern : Wide_Wide_String;
+       Going   : Strings.Direction := Strings.Forward;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping :=
+                   Wide_Wide_Maps.Identity)
+       return Natural
+    is
+    begin
+       return Wide_Wide_Search.Index
+         (Source.Data (1 .. Source.Current_Length), Pattern, Going, Mapping);
+    end Super_Index;
+ 
+    function Super_Index
+      (Source  : Super_String;
+       Pattern : Wide_Wide_String;
+       Going   : Direction := Forward;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
+       return Natural
+    is
+    begin
+       return Wide_Wide_Search.Index
+         (Source.Data (1 .. Source.Current_Length), Pattern, Going, Mapping);
+    end Super_Index;
+ 
+    function Super_Index
+      (Source : Super_String;
+       Set    : Wide_Wide_Maps.Wide_Wide_Character_Set;
+       Test   : Strings.Membership := Strings.Inside;
+       Going  : Strings.Direction  := Strings.Forward) return Natural
+    is
+    begin
+       return Wide_Wide_Search.Index
+         (Source.Data (1 .. Source.Current_Length), Set, Test, Going);
+    end Super_Index;
+ 
+    function Super_Index
+      (Source  : Super_String;
+       Pattern : Wide_Wide_String;
+       From    : Positive;
+       Going   : Direction := Forward;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping :=
+                   Wide_Wide_Maps.Identity)
+       return Natural
+    is
+    begin
+       return Wide_Wide_Search.Index
+         (Source.Data (1 .. Source.Current_Length),
+          Pattern, From, Going, Mapping);
+    end Super_Index;
+ 
+    function Super_Index
+      (Source  : Super_String;
+       Pattern : Wide_Wide_String;
+       From    : Positive;
+       Going   : Direction := Forward;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
+       return Natural
+    is
+    begin
+       return Wide_Wide_Search.Index
+         (Source.Data (1 .. Source.Current_Length),
+          Pattern, From, Going, Mapping);
+    end Super_Index;
+ 
+    function Super_Index
+      (Source : Super_String;
+       Set    : Wide_Wide_Maps.Wide_Wide_Character_Set;
+       From   : Positive;
+       Test   : Membership := Inside;
+       Going  : Direction := Forward) return Natural
+    is
+    begin
+       return Wide_Wide_Search.Index
+         (Source.Data (1 .. Source.Current_Length), Set, From, Test, Going);
+    end Super_Index;
+ 
+    ---------------------------
+    -- Super_Index_Non_Blank --
+    ---------------------------
+ 
+    function Super_Index_Non_Blank
+      (Source : Super_String;
+       Going  : Strings.Direction := Strings.Forward) return Natural
+    is
+    begin
+       return
+         Wide_Wide_Search.Index_Non_Blank
+           (Source.Data (1 .. Source.Current_Length), Going);
+    end Super_Index_Non_Blank;
+ 
+    function Super_Index_Non_Blank
+      (Source : Super_String;
+       From   : Positive;
+       Going  : Direction := Forward) return Natural
+    is
+    begin
+       return
+         Wide_Wide_Search.Index_Non_Blank
+           (Source.Data (1 .. Source.Current_Length), From, Going);
+    end Super_Index_Non_Blank;
+ 
+    ------------------
+    -- Super_Insert --
+    ------------------
+ 
+    function Super_Insert
+      (Source   : Super_String;
+       Before   : Positive;
+       New_Item : Wide_Wide_String;
+       Drop     : Strings.Truncation := Strings.Error) return Super_String
+    is
+       Max_Length : constant Positive := Source.Max_Length;
+       Result     : Super_String (Max_Length);
+       Slen       : constant Natural := Source.Current_Length;
+       Nlen       : constant Natural := New_Item'Length;
+       Tlen       : constant Natural := Slen + Nlen;
+       Blen       : constant Natural := Before - 1;
+       Alen       : constant Integer := Slen - Blen;
+       Droplen    : constant Integer := Tlen - Max_Length;
+ 
+       --  Tlen is the length of the total string before possible truncation.
+       --  Blen, Alen are the lengths of the before and after pieces of the
+       --  source string.
+ 
+    begin
+       if Alen < 0 then
+          raise Ada.Strings.Index_Error;
+ 
+       elsif Droplen <= 0 then
+          Result.Current_Length := Tlen;
+          Result.Data (1 .. Blen) := Source.Data (1 .. Blen);
+          Result.Data (Before .. Before + Nlen - 1) := New_Item;
+          Result.Data (Before + Nlen .. Tlen) :=
+            Source.Data (Before .. Slen);
+ 
+       else
+          Result.Current_Length := Max_Length;
+ 
+          case Drop is
+             when Strings.Right =>
+                Result.Data (1 .. Blen) := Source.Data (1 .. Blen);
+ 
+                if Droplen > Alen then
+                   Result.Data (Before .. Max_Length) :=
+                     New_Item (New_Item'First
+                                 .. New_Item'First + Max_Length - Before);
+                else
+                   Result.Data (Before .. Before + Nlen - 1) := New_Item;
+                   Result.Data (Before + Nlen .. Max_Length) :=
+                     Source.Data (Before .. Slen - Droplen);
+                end if;
+ 
+             when Strings.Left =>
+                Result.Data (Max_Length - (Alen - 1) .. Max_Length) :=
+                  Source.Data (Before .. Slen);
+ 
+                if Droplen >= Blen then
+                   Result.Data (1 .. Max_Length - Alen) :=
+                     New_Item (New_Item'Last - (Max_Length - Alen) + 1
+                                 .. New_Item'Last);
+                else
+                   Result.Data
+                     (Blen - Droplen + 1 .. Max_Length - Alen) :=
+                     New_Item;
+                   Result.Data (1 .. Blen - Droplen) :=
+                     Source.Data (Droplen + 1 .. Blen);
+                end if;
+ 
+             when Strings.Error =>
+                raise Ada.Strings.Length_Error;
+          end case;
+       end if;
+ 
+       return Result;
+    end Super_Insert;
+ 
+    procedure Super_Insert
+      (Source   : in out Super_String;
+       Before   : Positive;
+       New_Item : Wide_Wide_String;
+       Drop     : Strings.Truncation := Strings.Error)
+    is
+    begin
+       --  We do a double copy here because this is one of the situations
+       --  in which we move data to the right, and at least at the moment,
+       --  GNAT is not handling such cases correctly ???
+ 
+       Source := Super_Insert (Source, Before, New_Item, Drop);
+    end Super_Insert;
+ 
+    ------------------
+    -- Super_Length --
+    ------------------
+ 
+    function Super_Length (Source : Super_String) return Natural is
+    begin
+       return Source.Current_Length;
+    end Super_Length;
+ 
+    ---------------------
+    -- Super_Overwrite --
+    ---------------------
+ 
+    function Super_Overwrite
+      (Source   : Super_String;
+       Position : Positive;
+       New_Item : Wide_Wide_String;
+       Drop     : Strings.Truncation := Strings.Error) return Super_String
+    is
+       Max_Length : constant Positive := Source.Max_Length;
+       Result     : Super_String (Max_Length);
+       Endpos     : constant Natural  := Position + New_Item'Length - 1;
+       Slen       : constant Natural  := Source.Current_Length;
+       Droplen    : Natural;
+ 
+    begin
+       if Position > Slen + 1 then
+          raise Ada.Strings.Index_Error;
+ 
+       elsif New_Item'Length = 0 then
+          return Source;
+ 
+       elsif Endpos <= Slen then
+          Result.Current_Length := Source.Current_Length;
+          Result.Data (1 .. Slen) := Source.Data (1 .. Slen);
+          Result.Data (Position .. Endpos) := New_Item;
+          return Result;
+ 
+       elsif Endpos <= Max_Length then
+          Result.Current_Length := Endpos;
+          Result.Data (1 .. Position - 1) := Source.Data (1 .. Position - 1);
+          Result.Data (Position .. Endpos) := New_Item;
+          return Result;
+ 
+       else
+          Result.Current_Length := Max_Length;
+          Droplen := Endpos - Max_Length;
+ 
+          case Drop is
+             when Strings.Right =>
+                Result.Data (1 .. Position - 1) :=
+                  Source.Data (1 .. Position - 1);
+ 
+                Result.Data (Position .. Max_Length) :=
+                  New_Item (New_Item'First .. New_Item'Last - Droplen);
+                return Result;
+ 
+             when Strings.Left =>
+                if New_Item'Length >= Max_Length then
+                   Result.Data (1 .. Max_Length) :=
+                     New_Item (New_Item'Last - Max_Length + 1 ..
+                                 New_Item'Last);
+                   return Result;
+ 
+                else
+                   Result.Data (1 .. Max_Length - New_Item'Length) :=
+                     Source.Data (Droplen + 1 .. Position - 1);
+                   Result.Data
+                     (Max_Length - New_Item'Length + 1 .. Max_Length) :=
+                     New_Item;
+                   return Result;
+                end if;
+ 
+             when Strings.Error =>
+                raise Ada.Strings.Length_Error;
+          end case;
+       end if;
+    end Super_Overwrite;
+ 
+    procedure Super_Overwrite
+      (Source    : in out Super_String;
+       Position  : Positive;
+       New_Item  : Wide_Wide_String;
+       Drop      : Strings.Truncation := Strings.Error)
+    is
+       Max_Length : constant Positive := Source.Max_Length;
+       Endpos     : constant Positive := Position + New_Item'Length - 1;
+       Slen       : constant Natural  := Source.Current_Length;
+       Droplen    : Natural;
+ 
+    begin
+       if Position > Slen + 1 then
+          raise Ada.Strings.Index_Error;
+ 
+       elsif Endpos <= Slen then
+          Source.Data (Position .. Endpos) := New_Item;
+ 
+       elsif Endpos <= Max_Length then
+          Source.Data (Position .. Endpos) := New_Item;
+          Source.Current_Length := Endpos;
+ 
+       else
+          Source.Current_Length := Max_Length;
+          Droplen := Endpos - Max_Length;
+ 
+          case Drop is
+             when Strings.Right =>
+                Source.Data (Position .. Max_Length) :=
+                  New_Item (New_Item'First .. New_Item'Last - Droplen);
+ 
+             when Strings.Left =>
+                if New_Item'Length > Max_Length then
+                   Source.Data (1 .. Max_Length) :=
+                     New_Item (New_Item'Last - Max_Length + 1 ..
+                                 New_Item'Last);
+ 
+                else
+                   Source.Data (1 .. Max_Length - New_Item'Length) :=
+                     Source.Data (Droplen + 1 .. Position - 1);
+ 
+                   Source.Data
+                     (Max_Length - New_Item'Length + 1 .. Max_Length) :=
+                     New_Item;
+                end if;
+ 
+             when Strings.Error =>
+                raise Ada.Strings.Length_Error;
+          end case;
+       end if;
+    end Super_Overwrite;
+ 
+    ---------------------------
+    -- Super_Replace_Element --
+    ---------------------------
+ 
+    procedure Super_Replace_Element
+      (Source : in out Super_String;
+       Index  : Positive;
+       By     : Wide_Wide_Character)
+    is
+    begin
+       if Index <= Source.Current_Length then
+          Source.Data (Index) := By;
+       else
+          raise Ada.Strings.Index_Error;
+       end if;
+    end Super_Replace_Element;
+ 
+    -------------------------
+    -- Super_Replace_Slice --
+    -------------------------
+ 
+    function Super_Replace_Slice
+      (Source : Super_String;
+       Low    : Positive;
+       High   : Natural;
+       By     : Wide_Wide_String;
+       Drop   : Strings.Truncation := Strings.Error) return Super_String
+    is
+       Max_Length : constant Positive := Source.Max_Length;
+       Slen       : constant Natural  := Source.Current_Length;
+ 
+    begin
+       if Low > Slen + 1 then
+          raise Strings.Index_Error;
+ 
+       elsif High < Low then
+          return Super_Insert (Source, Low, By, Drop);
+ 
+       else
+          declare
+             Blen    : constant Natural := Natural'Max (0, Low - 1);
+             Alen    : constant Natural := Natural'Max (0, Slen - High);
+             Tlen    : constant Natural := Blen + By'Length + Alen;
+             Droplen : constant Integer := Tlen - Max_Length;
+             Result  : Super_String (Max_Length);
+ 
+             --  Tlen is the total length of the result string before any
+             --  truncation. Blen and Alen are the lengths of the pieces
+             --  of the original string that end up in the result string
+             --  before and after the replaced slice.
+ 
+          begin
+             if Droplen <= 0 then
+                Result.Current_Length := Tlen;
+                Result.Data (1 .. Blen) := Source.Data (1 .. Blen);
+                Result.Data (Low .. Low + By'Length - 1) := By;
+                Result.Data (Low + By'Length .. Tlen) :=
+                  Source.Data (High + 1 .. Slen);
+ 
+             else
+                Result.Current_Length := Max_Length;
+ 
+                case Drop is
+                   when Strings.Right =>
+                      Result.Data (1 .. Blen) := Source.Data (1 .. Blen);
+ 
+                      if Droplen > Alen then
+                         Result.Data (Low .. Max_Length) :=
+                           By (By'First .. By'First + Max_Length - Low);
+                      else
+                         Result.Data (Low .. Low + By'Length - 1) := By;
+                         Result.Data (Low + By'Length .. Max_Length) :=
+                           Source.Data (High + 1 .. Slen - Droplen);
+                      end if;
+ 
+                   when Strings.Left =>
+                      Result.Data (Max_Length - (Alen - 1) .. Max_Length) :=
+                        Source.Data (High + 1 .. Slen);
+ 
+                      if Droplen >= Blen then
+                         Result.Data (1 .. Max_Length - Alen) :=
+                           By (By'Last - (Max_Length - Alen) + 1 .. By'Last);
+                      else
+                         Result.Data
+                           (Blen - Droplen + 1 .. Max_Length - Alen) := By;
+                         Result.Data (1 .. Blen - Droplen) :=
+                           Source.Data (Droplen + 1 .. Blen);
+                      end if;
+ 
+                   when Strings.Error =>
+                      raise Ada.Strings.Length_Error;
+                end case;
+             end if;
+ 
+             return Result;
+          end;
+       end if;
+    end Super_Replace_Slice;
+ 
+    procedure Super_Replace_Slice
+      (Source   : in out Super_String;
+       Low      : Positive;
+       High     : Natural;
+       By       : Wide_Wide_String;
+       Drop     : Strings.Truncation := Strings.Error)
+    is
+    begin
+       --  We do a double copy here because this is one of the situations
+       --  in which we move data to the right, and at least at the moment,
+       --  GNAT is not handling such cases correctly ???
+ 
+       Source := Super_Replace_Slice (Source, Low, High, By, Drop);
+    end Super_Replace_Slice;
+ 
+    ---------------------
+    -- Super_Replicate --
+    ---------------------
+ 
+    function Super_Replicate
+      (Count      : Natural;
+       Item       : Wide_Wide_Character;
+       Drop       : Truncation := Error;
+       Max_Length : Positive) return Super_String
+    is
+       Result : Super_String (Max_Length);
+ 
+    begin
+       if Count <= Max_Length then
+          Result.Current_Length := Count;
+ 
+       elsif Drop = Strings.Error then
+          raise Ada.Strings.Length_Error;
+ 
+       else
+          Result.Current_Length := Max_Length;
+       end if;
+ 
+       Result.Data (1 .. Result.Current_Length) := (others => Item);
+       return Result;
+    end Super_Replicate;
+ 
+    function Super_Replicate
+      (Count      : Natural;
+       Item       : Wide_Wide_String;
+       Drop       : Truncation := Error;
+       Max_Length : Positive) return Super_String
+    is
+       Length : constant Integer := Count * Item'Length;
+       Result : Super_String (Max_Length);
+       Indx   : Positive;
+ 
+    begin
+       if Length <= Max_Length then
+          Result.Current_Length := Length;
+ 
+          if Length > 0 then
+             Indx := 1;
+ 
+             for J in 1 .. Count loop
+                Result.Data (Indx .. Indx + Item'Length - 1) := Item;
+                Indx := Indx + Item'Length;
+             end loop;
+          end if;
+ 
+       else
+          Result.Current_Length := Max_Length;
+ 
+          case Drop is
+             when Strings.Right =>
+                Indx := 1;
+ 
+                while Indx + Item'Length <= Max_Length + 1 loop
+                   Result.Data (Indx .. Indx + Item'Length - 1) := Item;
+                   Indx := Indx + Item'Length;
+                end loop;
+ 
+                Result.Data (Indx .. Max_Length) :=
+                  Item (Item'First .. Item'First + Max_Length - Indx);
+ 
+             when Strings.Left =>
+                Indx := Max_Length;
+ 
+                while Indx - Item'Length >= 1 loop
+                   Result.Data (Indx - (Item'Length - 1) .. Indx) := Item;
+                   Indx := Indx - Item'Length;
+                end loop;
+ 
+                Result.Data (1 .. Indx) :=
+                  Item (Item'Last - Indx + 1 .. Item'Last);
+ 
+             when Strings.Error =>
+                raise Ada.Strings.Length_Error;
+          end case;
+       end if;
+ 
+       return Result;
+    end Super_Replicate;
+ 
+    function Super_Replicate
+      (Count : Natural;
+       Item  : Super_String;
+       Drop  : Strings.Truncation := Strings.Error) return Super_String
+    is
+    begin
+       return
+         Super_Replicate
+           (Count,
+            Item.Data (1 .. Item.Current_Length),
+            Drop,
+            Item.Max_Length);
+    end Super_Replicate;
+ 
+    -----------------
+    -- Super_Slice --
+    -----------------
+ 
+    function Super_Slice
+      (Source : Super_String;
+       Low    : Positive;
+       High   : Natural) return Wide_Wide_String
+    is
+    begin
+       --  Note: test of High > Length is in accordance with AI95-00128
+ 
+       if Low > Source.Current_Length + 1
+         or else High > Source.Current_Length
+       then
+          raise Index_Error;
+       else
+          return Source.Data (Low .. High);
+       end if;
+    end Super_Slice;
+ 
+    function Super_Slice
+      (Source : Super_String;
+       Low    : Positive;
+       High   : Natural) return Super_String
+    is
+       Result : Super_String (Source.Max_Length);
+ 
+    begin
+       if Low > Source.Current_Length + 1
+         or else High > Source.Current_Length
+       then
+          raise Index_Error;
+       else
+          Result.Current_Length := High - Low + 1;
+          Result.Data (1 .. Source.Current_Length) := Source.Data (Low .. High);
+       end if;
+ 
+       return Result;
+    end Super_Slice;
+ 
+    procedure Super_Slice
+      (Source : Super_String;
+       Target : out Super_String;
+       Low    : Positive;
+       High   : Natural)
+    is
+    begin
+       if Low > Source.Current_Length + 1
+         or else High > Source.Current_Length
+       then
+          raise Index_Error;
+       else
+          Target.Current_Length := High - Low + 1;
+          Target.Data (1 .. Source.Current_Length) := Source.Data (Low .. High);
+       end if;
+    end Super_Slice;
+ 
+    ----------------
+    -- Super_Tail --
+    ----------------
+ 
+    function Super_Tail
+      (Source : Super_String;
+       Count  : Natural;
+       Pad    : Wide_Wide_Character := Wide_Wide_Space;
+       Drop   : Strings.Truncation := Strings.Error) return Super_String
+    is
+       Max_Length : constant Positive := Source.Max_Length;
+       Result     : Super_String (Max_Length);
+       Slen       : constant Natural := Source.Current_Length;
+       Npad       : constant Integer := Count - Slen;
+ 
+    begin
+       if Npad <= 0 then
+          Result.Current_Length := Count;
+          Result.Data (1 .. Count) :=
+            Source.Data (Slen - (Count - 1) .. Slen);
+ 
+       elsif Count <= Max_Length then
+          Result.Current_Length := Count;
+          Result.Data (1 .. Npad) := (others => Pad);
+          Result.Data (Npad + 1 .. Count) := Source.Data (1 .. Slen);
+ 
+       else
+          Result.Current_Length := Max_Length;
+ 
+          case Drop is
+             when Strings.Right =>
+                if Npad >= Max_Length then
+                   Result.Data := (others => Pad);
+ 
+                else
+                   Result.Data (1 .. Npad) := (others => Pad);
+                   Result.Data (Npad + 1 .. Max_Length) :=
+                     Source.Data (1 .. Max_Length - Npad);
+                end if;
+ 
+             when Strings.Left =>
+                Result.Data (1 .. Max_Length - Slen) := (others => Pad);
+                Result.Data (Max_Length - Slen + 1 .. Max_Length) :=
+                  Source.Data (1 .. Slen);
+ 
+             when Strings.Error =>
+                raise Ada.Strings.Length_Error;
+          end case;
+       end if;
+ 
+       return Result;
+    end Super_Tail;
+ 
+    procedure Super_Tail
+      (Source : in out Super_String;
+       Count  : Natural;
+       Pad    : Wide_Wide_Character := Wide_Wide_Space;
+       Drop   : Truncation := Error)
+    is
+       Max_Length : constant Positive := Source.Max_Length;
+       Slen       : constant Natural  := Source.Current_Length;
+       Npad       : constant Integer  := Count - Slen;
+ 
+       Temp : constant Wide_Wide_String (1 .. Max_Length) := Source.Data;
+ 
+    begin
+       if Npad <= 0 then
+          Source.Current_Length := Count;
+          Source.Data (1 .. Count) :=
+            Temp (Slen - (Count - 1) .. Slen);
+ 
+       elsif Count <= Max_Length then
+          Source.Current_Length := Count;
+          Source.Data (1 .. Npad) := (others => Pad);
+          Source.Data (Npad + 1 .. Count) := Temp (1 .. Slen);
+ 
+       else
+          Source.Current_Length := Max_Length;
+ 
+          case Drop is
+             when Strings.Right =>
+                if Npad >= Max_Length then
+                   Source.Data := (others => Pad);
+ 
+                else
+                   Source.Data (1 .. Npad) := (others => Pad);
+                   Source.Data (Npad + 1 .. Max_Length) :=
+                     Temp (1 .. Max_Length - Npad);
+                end if;
+ 
+             when Strings.Left =>
+                for J in 1 .. Max_Length - Slen loop
+                   Source.Data (J) := Pad;
+                end loop;
+ 
+                Source.Data (Max_Length - Slen + 1 .. Max_Length) :=
+                  Temp (1 .. Slen);
+ 
+             when Strings.Error =>
+                raise Ada.Strings.Length_Error;
+          end case;
+       end if;
+    end Super_Tail;
+ 
+    ---------------------
+    -- Super_To_String --
+    ---------------------
+ 
+    function Super_To_String
+      (Source : Super_String) return Wide_Wide_String
+    is
+    begin
+       return Source.Data (1 .. Source.Current_Length);
+    end Super_To_String;
+ 
+    ---------------------
+    -- Super_Translate --
+    ---------------------
+ 
+    function Super_Translate
+      (Source  : Super_String;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping)
+       return Super_String
+    is
+       Result : Super_String (Source.Max_Length);
+ 
+    begin
+       Result.Current_Length := Source.Current_Length;
+ 
+       for J in 1 .. Source.Current_Length loop
+          Result.Data (J) := Value (Mapping, Source.Data (J));
+       end loop;
+ 
+       return Result;
+    end Super_Translate;
+ 
+    procedure Super_Translate
+      (Source  : in out Super_String;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping)
+    is
+    begin
+       for J in 1 .. Source.Current_Length loop
+          Source.Data (J) := Value (Mapping, Source.Data (J));
+       end loop;
+    end Super_Translate;
+ 
+    function Super_Translate
+      (Source  : Super_String;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
+       return Super_String
+    is
+       Result : Super_String (Source.Max_Length);
+ 
+    begin
+       Result.Current_Length := Source.Current_Length;
+ 
+       for J in 1 .. Source.Current_Length loop
+          Result.Data (J) := Mapping.all (Source.Data (J));
+       end loop;
+ 
+       return Result;
+    end Super_Translate;
+ 
+    procedure Super_Translate
+      (Source  : in out Super_String;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
+    is
+    begin
+       for J in 1 .. Source.Current_Length loop
+          Source.Data (J) := Mapping.all (Source.Data (J));
+       end loop;
+    end Super_Translate;
+ 
+    ----------------
+    -- Super_Trim --
+    ----------------
+ 
+    function Super_Trim
+      (Source : Super_String;
+       Side   : Trim_End) return Super_String
+    is
+       Result : Super_String (Source.Max_Length);
+       Last   : Natural := Source.Current_Length;
+       First  : Positive := 1;
+ 
+    begin
+       if Side = Left or else Side = Both then
+          while First <= Last and then Source.Data (First) = ' ' loop
+             First := First + 1;
+          end loop;
+       end if;
+ 
+       if Side = Right or else Side = Both then
+          while Last >= First and then Source.Data (Last) = ' ' loop
+             Last := Last - 1;
+          end loop;
+       end if;
+ 
+       Result.Current_Length := Last - First + 1;
+       Result.Data (1 .. Result.Current_Length) := Source.Data (First .. Last);
+       return Result;
+    end Super_Trim;
+ 
+    procedure Super_Trim
+      (Source : in out Super_String;
+       Side   : Trim_End)
+    is
+       Max_Length : constant Positive := Source.Max_Length;
+       Last       : Natural           := Source.Current_Length;
+       First      : Positive          := 1;
+       Temp       : Wide_Wide_String (1 .. Max_Length);
+ 
+    begin
+       Temp (1 .. Last) := Source.Data (1 .. Last);
+ 
+       if Side = Left or else Side = Both then
+          while First <= Last and then Temp (First) = ' ' loop
+             First := First + 1;
+          end loop;
+       end if;
+ 
+       if Side = Right or else Side = Both then
+          while Last >= First and then Temp (Last) = ' ' loop
+             Last := Last - 1;
+          end loop;
+       end if;
+ 
+       Source.Data := (others => Wide_Wide_NUL);
+       Source.Current_Length := Last - First + 1;
+       Source.Data (1 .. Source.Current_Length) := Temp (First .. Last);
+    end Super_Trim;
+ 
+    function Super_Trim
+      (Source : Super_String;
+       Left   : Wide_Wide_Maps.Wide_Wide_Character_Set;
+       Right  : Wide_Wide_Maps.Wide_Wide_Character_Set) return Super_String
+    is
+       Result : Super_String (Source.Max_Length);
+ 
+    begin
+       for First in 1 .. Source.Current_Length loop
+          if not Is_In (Source.Data (First), Left) then
+             for Last in reverse First .. Source.Current_Length loop
+                if not Is_In (Source.Data (Last), Right) then
+                   Result.Current_Length := Last - First + 1;
+                   Result.Data (1 .. Result.Current_Length) :=
+                     Source.Data (First .. Last);
+                   return Result;
+                end if;
+             end loop;
+          end if;
+       end loop;
+ 
+       Result.Current_Length := 0;
+       return Result;
+    end Super_Trim;
+ 
+    procedure Super_Trim
+      (Source : in out Super_String;
+       Left   : Wide_Wide_Maps.Wide_Wide_Character_Set;
+       Right  : Wide_Wide_Maps.Wide_Wide_Character_Set)
+    is
+    begin
+       for First in 1 .. Source.Current_Length loop
+          if not Is_In (Source.Data (First), Left) then
+             for Last in reverse First .. Source.Current_Length loop
+                if not Is_In (Source.Data (Last), Right) then
+                   if First = 1 then
+                      Source.Current_Length := Last;
+                      return;
+                   else
+                      Source.Current_Length := Last - First + 1;
+                      Source.Data (1 .. Source.Current_Length) :=
+                        Source.Data (First .. Last);
+ 
+                      for J in Source.Current_Length + 1 ..
+                                 Source.Max_Length
+                      loop
+                         Source.Data (J) := Wide_Wide_NUL;
+                      end loop;
+ 
+                      return;
+                   end if;
+                end if;
+             end loop;
+ 
+             Source.Current_Length := 0;
+             return;
+          end if;
+       end loop;
+ 
+       Source.Current_Length := 0;
+    end Super_Trim;
+ 
+    -----------
+    -- Times --
+    -----------
+ 
+    function Times
+      (Left       : Natural;
+       Right      : Wide_Wide_Character;
+       Max_Length : Positive) return Super_String
+    is
+       Result : Super_String (Max_Length);
+ 
+    begin
+       if Left > Max_Length then
+          raise Ada.Strings.Length_Error;
+ 
+       else
+          Result.Current_Length := Left;
+ 
+          for J in 1 .. Left loop
+             Result.Data (J) := Right;
+          end loop;
+       end if;
+ 
+       return Result;
+    end Times;
+ 
+    function Times
+      (Left       : Natural;
+       Right      : Wide_Wide_String;
+       Max_Length : Positive) return Super_String
+    is
+       Result : Super_String (Max_Length);
+       Pos    : Positive         := 1;
+       Rlen   : constant Natural := Right'Length;
+       Nlen   : constant Natural := Left * Rlen;
+ 
+    begin
+       if Nlen > Max_Length then
+          raise Ada.Strings.Index_Error;
+ 
+       else
+          Result.Current_Length := Nlen;
+ 
+          if Nlen > 0 then
+             for J in 1 .. Left loop
+                Result.Data (Pos .. Pos + Rlen - 1) := Right;
+                Pos := Pos + Rlen;
+             end loop;
+          end if;
+       end if;
+ 
+       return Result;
+    end Times;
+ 
+    function Times
+      (Left  : Natural;
+       Right : Super_String) return Super_String
+    is
+       Result : Super_String (Right.Max_Length);
+       Pos    : Positive := 1;
+       Rlen   : constant Natural := Right.Current_Length;
+       Nlen   : constant Natural := Left * Rlen;
+ 
+    begin
+       if Nlen > Right.Max_Length then
+          raise Ada.Strings.Length_Error;
+ 
+       else
+          Result.Current_Length := Nlen;
+ 
+          if Nlen > 0 then
+             for J in 1 .. Left loop
+                Result.Data (Pos .. Pos + Rlen - 1) :=
+                  Right.Data (1 .. Rlen);
+                Pos := Pos + Rlen;
+             end loop;
+          end if;
+       end if;
+ 
+       return Result;
+    end Times;
+ 
+    ---------------------
+    -- To_Super_String --
+    ---------------------
+ 
+    function To_Super_String
+      (Source     : Wide_Wide_String;
+       Max_Length : Natural;
+       Drop       : Truncation := Error) return Super_String
+    is
+       Result : Super_String (Max_Length);
+       Slen   : constant Natural := Source'Length;
+ 
+    begin
+       if Slen <= Max_Length then
+          Result.Current_Length := Slen;
+          Result.Data (1 .. Slen) := Source;
+ 
+       else
+          case Drop is
+             when Strings.Right =>
+                Result.Current_Length := Max_Length;
+                Result.Data (1 .. Max_Length) :=
+                  Source (Source'First .. Source'First - 1 + Max_Length);
+ 
+             when Strings.Left =>
+                Result.Current_Length := Max_Length;
+                Result.Data (1 .. Max_Length) :=
+                  Source (Source'Last - (Max_Length - 1) .. Source'Last);
+ 
+             when Strings.Error =>
+                raise Ada.Strings.Length_Error;
+          end case;
+       end if;
+ 
+       return Result;
+    end To_Super_String;
+ 
+ end Ada.Strings.Wide_Wide_Superbounded;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-stzsup.ads gcc-4.0.0/gcc/ada/a-stzsup.ads
*** gcc-3.4.3/gcc/ada/a-stzsup.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-stzsup.ads	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,498 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --  A D A . S T R I N G S .  W I D E _ W I D E _ S U P E R B O U N D E D    --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 2003-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This non generic package contains most of the implementation of the
+ --  generic package Ada.Strings.Wide_Wide_Bounded.Generic_Bounded_Length.
+ 
+ --  It defines type Super_String as a discriminated record with the maximum
+ --  length as the discriminant. Individual instantiations of the package
+ --  Strings.Wide_Wide_Bounded.Generic_Bounded_Length use this type with
+ --  an appropriate discriminant value set.
+ 
+ with Ada.Strings.Wide_Wide_Maps;
+ 
+ package Ada.Strings.Wide_Wide_Superbounded is
+ pragma Preelaborate (Wide_Wide_Superbounded);
+ 
+    Wide_Wide_NUL : constant Wide_Wide_Character :=
+                      Wide_Wide_Character'Val (0);
+ 
+    type Super_String (Max_Length : Positive) is record
+       Current_Length : Natural := 0;
+       Data           : Wide_Wide_String (1 .. Max_Length) :=
+                          (others => Wide_Wide_NUL);
+    end record;
+    --  Wide_Wide_Bounded.Generic_Bounded_Length.Wide_Wide_Bounded_String is
+    --  derived from this type, with the constraint of the maximum length.
+ 
+    --  The subprograms defined for Super_String are similar to those defined
+    --  for Bounded_Wide_Wide_String, except that they have different names, so
+    --  that they can be renamed in Wide_Wide_Bounded.Generic_Bounded_Length.
+ 
+    function Super_Length (Source : Super_String) return Natural;
+ 
+    --------------------------------------------------------
+    -- Conversion, Concatenation, and Selection Functions --
+    --------------------------------------------------------
+ 
+    function To_Super_String
+      (Source     : Wide_Wide_String;
+       Max_Length : Natural;
+       Drop       : Truncation := Error) return Super_String;
+    --  Note the additional parameter Max_Length, which specifies the maximum
+    --  length setting of the resulting Super_String value.
+ 
+    --  The following procedures have declarations (and semantics) that are
+    --  exactly analogous to those declared in Ada.Strings.Wide_Wide_Bounded.
+ 
+    function Super_To_String (Source : Super_String) return Wide_Wide_String;
+ 
+    procedure Set_Super_String
+      (Target : out Super_String;
+       Source : Wide_Wide_String;
+       Drop   : Truncation := Error);
+ 
+    function Super_Append
+      (Left  : Super_String;
+       Right : Super_String;
+       Drop  : Truncation := Error) return Super_String;
+ 
+    function Super_Append
+      (Left  : Super_String;
+       Right : Wide_Wide_String;
+       Drop  : Truncation := Error) return Super_String;
+ 
+    function Super_Append
+      (Left  : Wide_Wide_String;
+       Right : Super_String;
+       Drop  : Truncation := Error) return Super_String;
+ 
+    function Super_Append
+      (Left  : Super_String;
+       Right : Wide_Wide_Character;
+       Drop  : Truncation := Error) return Super_String;
+ 
+    function Super_Append
+      (Left  : Wide_Wide_Character;
+       Right : Super_String;
+       Drop  : Truncation := Error) return Super_String;
+ 
+    procedure Super_Append
+      (Source   : in out Super_String;
+       New_Item : Super_String;
+       Drop     : Truncation := Error);
+ 
+    procedure Super_Append
+      (Source   : in out Super_String;
+       New_Item : Wide_Wide_String;
+       Drop     : Truncation := Error);
+ 
+    procedure Super_Append
+      (Source   : in out Super_String;
+       New_Item : Wide_Wide_Character;
+       Drop     : Truncation := Error);
+ 
+    function Concat
+      (Left  : Super_String;
+       Right : Super_String) return Super_String;
+ 
+    function Concat
+      (Left  : Super_String;
+       Right : Wide_Wide_String) return Super_String;
+ 
+    function Concat
+      (Left  : Wide_Wide_String;
+       Right : Super_String) return Super_String;
+ 
+    function Concat
+      (Left  : Super_String;
+       Right : Wide_Wide_Character) return Super_String;
+ 
+    function Concat
+      (Left  : Wide_Wide_Character;
+       Right : Super_String) return Super_String;
+ 
+    function Super_Element
+      (Source : Super_String;
+       Index  : Positive) return Wide_Wide_Character;
+ 
+    procedure Super_Replace_Element
+      (Source : in out Super_String;
+       Index  : Positive;
+       By     : Wide_Wide_Character);
+ 
+    function Super_Slice
+      (Source : Super_String;
+       Low    : Positive;
+       High   : Natural) return Wide_Wide_String;
+ 
+    function Super_Slice
+      (Source : Super_String;
+       Low    : Positive;
+       High   : Natural) return Super_String;
+ 
+    procedure Super_Slice
+      (Source : Super_String;
+       Target : out Super_String;
+       Low    : Positive;
+       High   : Natural);
+ 
+    function "="
+      (Left  : Super_String;
+       Right : Super_String) return Boolean;
+ 
+    function Equal
+      (Left  : Super_String;
+       Right : Super_String) return Boolean renames "=";
+ 
+    function Equal
+      (Left  : Super_String;
+       Right : Wide_Wide_String) return Boolean;
+ 
+    function Equal
+      (Left  : Wide_Wide_String;
+       Right : Super_String) return Boolean;
+ 
+    function Less
+      (Left  : Super_String;
+       Right : Super_String) return Boolean;
+ 
+    function Less
+      (Left  : Super_String;
+       Right : Wide_Wide_String) return Boolean;
+ 
+    function Less
+      (Left  : Wide_Wide_String;
+       Right : Super_String) return Boolean;
+ 
+    function Less_Or_Equal
+      (Left  : Super_String;
+       Right : Super_String) return Boolean;
+ 
+    function Less_Or_Equal
+      (Left  : Super_String;
+       Right : Wide_Wide_String) return Boolean;
+ 
+    function Less_Or_Equal
+      (Left  : Wide_Wide_String;
+       Right : Super_String) return Boolean;
+ 
+    function Greater
+      (Left  : Super_String;
+       Right : Super_String) return Boolean;
+ 
+    function Greater
+      (Left  : Super_String;
+       Right : Wide_Wide_String) return Boolean;
+ 
+    function Greater
+      (Left  : Wide_Wide_String;
+       Right : Super_String) return Boolean;
+ 
+    function Greater_Or_Equal
+      (Left  : Super_String;
+       Right : Super_String) return Boolean;
+ 
+    function Greater_Or_Equal
+      (Left  : Super_String;
+       Right : Wide_Wide_String) return Boolean;
+ 
+    function Greater_Or_Equal
+      (Left  : Wide_Wide_String;
+       Right : Super_String) return Boolean;
+ 
+    ----------------------
+    -- Search Functions --
+    ----------------------
+ 
+    function Super_Index
+      (Source  : Super_String;
+       Pattern : Wide_Wide_String;
+       Going   : Direction := Forward;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping :=
+                   Wide_Wide_Maps.Identity)
+       return Natural;
+ 
+    function Super_Index
+      (Source  : Super_String;
+       Pattern : Wide_Wide_String;
+       Going   : Direction := Forward;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
+       return Natural;
+ 
+    function Super_Index
+      (Source : Super_String;
+       Set    : Wide_Wide_Maps.Wide_Wide_Character_Set;
+       Test   : Membership := Inside;
+       Going  : Direction  := Forward) return Natural;
+ 
+    function Super_Index
+      (Source  : Super_String;
+       Pattern : Wide_Wide_String;
+       From    : Positive;
+       Going   : Direction := Forward;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping :=
+                   Wide_Wide_Maps.Identity)
+       return Natural;
+ 
+    function Super_Index
+      (Source  : Super_String;
+       Pattern : Wide_Wide_String;
+       From    : Positive;
+       Going   : Direction := Forward;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
+       return Natural;
+ 
+    function Super_Index
+      (Source : Super_String;
+       Set    : Wide_Wide_Maps.Wide_Wide_Character_Set;
+       From   : Positive;
+       Test   : Membership := Inside;
+       Going  : Direction := Forward) return Natural;
+ 
+    function Super_Index_Non_Blank
+      (Source : Super_String;
+       Going  : Direction := Forward) return Natural;
+ 
+    function Super_Index_Non_Blank
+      (Source : Super_String;
+       From   : Positive;
+       Going  : Direction := Forward) return Natural;
+ 
+    function Super_Count
+      (Source  : Super_String;
+       Pattern : Wide_Wide_String;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping :=
+                   Wide_Wide_Maps.Identity)
+       return Natural;
+ 
+    function Super_Count
+      (Source  : Super_String;
+       Pattern : Wide_Wide_String;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
+       return Natural;
+ 
+    function Super_Count
+      (Source : Super_String;
+       Set    : Wide_Wide_Maps.Wide_Wide_Character_Set) return Natural;
+ 
+    procedure Super_Find_Token
+      (Source : Super_String;
+       Set    : Wide_Wide_Maps.Wide_Wide_Character_Set;
+       Test   : Membership;
+       First  : out Positive;
+       Last   : out Natural);
+ 
+    ------------------------------------
+    -- String Translation Subprograms --
+    ------------------------------------
+ 
+    function Super_Translate
+      (Source  : Super_String;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping)
+       return Super_String;
+ 
+    procedure Super_Translate
+      (Source   : in out Super_String;
+       Mapping  : Wide_Wide_Maps.Wide_Wide_Character_Mapping);
+ 
+    function Super_Translate
+      (Source  : Super_String;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
+       return Super_String;
+ 
+    procedure Super_Translate
+      (Source  : in out Super_String;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function);
+ 
+    ---------------------------------------
+    -- String Transformation Subprograms --
+    ---------------------------------------
+ 
+    function Super_Replace_Slice
+      (Source : Super_String;
+       Low    : Positive;
+       High   : Natural;
+       By     : Wide_Wide_String;
+       Drop   : Truncation := Error) return Super_String;
+ 
+    procedure Super_Replace_Slice
+      (Source  : in out Super_String;
+       Low     : Positive;
+       High    : Natural;
+       By      : Wide_Wide_String;
+       Drop    : Truncation := Error);
+ 
+    function Super_Insert
+      (Source   : Super_String;
+       Before   : Positive;
+       New_Item : Wide_Wide_String;
+       Drop     : Truncation := Error) return Super_String;
+ 
+    procedure Super_Insert
+      (Source   : in out Super_String;
+       Before   : Positive;
+       New_Item : Wide_Wide_String;
+       Drop     : Truncation := Error);
+ 
+    function Super_Overwrite
+      (Source   : Super_String;
+       Position : Positive;
+       New_Item : Wide_Wide_String;
+       Drop     : Truncation := Error) return Super_String;
+ 
+    procedure Super_Overwrite
+      (Source    : in out Super_String;
+       Position  : Positive;
+       New_Item  : Wide_Wide_String;
+       Drop      : Truncation := Error);
+ 
+    function Super_Delete
+      (Source  : Super_String;
+       From    : Positive;
+       Through : Natural) return Super_String;
+ 
+    procedure Super_Delete
+      (Source  : in out Super_String;
+       From    : Positive;
+       Through : Natural);
+ 
+    ---------------------------------
+    -- String Selector Subprograms --
+    ---------------------------------
+ 
+    function Super_Trim
+      (Source : Super_String;
+       Side   : Trim_End) return Super_String;
+ 
+    procedure Super_Trim
+      (Source : in out Super_String;
+       Side   : Trim_End);
+ 
+    function Super_Trim
+      (Source : Super_String;
+       Left   : Wide_Wide_Maps.Wide_Wide_Character_Set;
+       Right  : Wide_Wide_Maps.Wide_Wide_Character_Set) return Super_String;
+ 
+    procedure Super_Trim
+      (Source : in out Super_String;
+       Left   : Wide_Wide_Maps.Wide_Wide_Character_Set;
+       Right  : Wide_Wide_Maps.Wide_Wide_Character_Set);
+ 
+    function Super_Head
+      (Source : Super_String;
+       Count  : Natural;
+       Pad    : Wide_Wide_Character := Wide_Wide_Space;
+       Drop   : Truncation := Error) return Super_String;
+ 
+    procedure Super_Head
+      (Source : in out Super_String;
+       Count  : Natural;
+       Pad    : Wide_Wide_Character := Wide_Wide_Space;
+       Drop   : Truncation := Error);
+ 
+    function Super_Tail
+      (Source : Super_String;
+       Count  : Natural;
+       Pad    : Wide_Wide_Character := Wide_Wide_Space;
+       Drop   : Truncation := Error) return Super_String;
+ 
+    procedure Super_Tail
+      (Source : in out Super_String;
+       Count  : Natural;
+       Pad    : Wide_Wide_Character := Wide_Wide_Space;
+       Drop   : Truncation := Error);
+ 
+    ------------------------------------
+    -- String Constructor Subprograms --
+    ------------------------------------
+ 
+    --  Note: in some of the following routines, there is an extra parameter
+    --  Max_Length which specifies the value of the maximum length for the
+    --  resulting Super_String value.
+ 
+    function Times
+      (Left       : Natural;
+       Right      : Wide_Wide_Character;
+       Max_Length : Positive) return Super_String;
+    --  Note the additional parameter Max_Length
+ 
+    function Times
+      (Left       : Natural;
+       Right      : Wide_Wide_String;
+       Max_Length : Positive) return Super_String;
+    --  Note the additional parameter Max_Length
+ 
+    function Times
+      (Left  : Natural;
+       Right : Super_String) return Super_String;
+ 
+    function Super_Replicate
+      (Count      : Natural;
+       Item       : Wide_Wide_Character;
+       Drop       : Truncation := Error;
+       Max_Length : Positive) return Super_String;
+    --  Note the additional parameter Max_Length
+ 
+    function Super_Replicate
+      (Count      : Natural;
+       Item       : Wide_Wide_String;
+       Drop       : Truncation := Error;
+       Max_Length : Positive) return Super_String;
+    --  Note the additional parameter Max_Length
+ 
+    function Super_Replicate
+      (Count : Natural;
+       Item  : Super_String;
+       Drop  : Truncation := Error) return Super_String;
+ 
+ private
+       --  Pragma Inline declarations
+ 
+       pragma Inline ("=");
+       pragma Inline (Less);
+       pragma Inline (Less_Or_Equal);
+       pragma Inline (Greater);
+       pragma Inline (Greater_Or_Equal);
+       pragma Inline (Concat);
+       pragma Inline (Super_Count);
+       pragma Inline (Super_Element);
+       pragma Inline (Super_Find_Token);
+       pragma Inline (Super_Index);
+       pragma Inline (Super_Index_Non_Blank);
+       pragma Inline (Super_Length);
+       pragma Inline (Super_Replace_Element);
+       pragma Inline (Super_Slice);
+       pragma Inline (Super_To_String);
+ 
+ end Ada.Strings.Wide_Wide_Superbounded;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-stzunb.adb gcc-4.0.0/gcc/ada/a-stzunb.adb
*** gcc-3.4.3/gcc/ada/a-stzunb.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-stzunb.adb	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,986 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --      A D A . S T R I N G S . W I D E _ W I D E _ U N B O U N D E D       --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Strings.Wide_Wide_Fixed;
+ with Ada.Strings.Wide_Wide_Search;
+ with Ada.Unchecked_Deallocation;
+ 
+ package body Ada.Strings.Wide_Wide_Unbounded is
+ 
+    use Ada.Finalization;
+ 
+    procedure Realloc_For_Chunk
+      (Source     : in out Unbounded_Wide_Wide_String;
+       Chunk_Size : Natural);
+    pragma Inline (Realloc_For_Chunk);
+    --  Adjust the size allocated for the string. Add at least Chunk_Size so it
+    --  is safe to add a string of this size at the end of the current content.
+    --  The real size allocated for the string is Chunk_Size + x of the current
+    --  string size. This buffered handling makes the Append unbounded wide
+    --  string routines very fast.
+ 
+    ---------
+    -- "&" --
+    ---------
+ 
+    function "&"
+      (Left  : Unbounded_Wide_Wide_String;
+       Right : Unbounded_Wide_Wide_String) return Unbounded_Wide_Wide_String
+    is
+       L_Length : constant Natural := Left.Last;
+       R_Length : constant Natural := Right.Last;
+       Result   : Unbounded_Wide_Wide_String;
+ 
+    begin
+       Result.Last := L_Length + R_Length;
+ 
+       Result.Reference := new Wide_Wide_String (1 .. Result.Last);
+ 
+       Result.Reference (1 .. L_Length) :=
+         Left.Reference (1 .. Left.Last);
+       Result.Reference (L_Length + 1 .. Result.Last) :=
+         Right.Reference (1 .. Right.Last);
+ 
+       return Result;
+    end "&";
+ 
+    function "&"
+      (Left  : Unbounded_Wide_Wide_String;
+       Right : Wide_Wide_String) return Unbounded_Wide_Wide_String
+    is
+       L_Length : constant Natural := Left.Last;
+       Result   : Unbounded_Wide_Wide_String;
+ 
+    begin
+       Result.Last := L_Length + Right'Length;
+ 
+       Result.Reference := new Wide_Wide_String (1 .. Result.Last);
+ 
+       Result.Reference (1 .. L_Length) := Left.Reference (1 .. Left.Last);
+       Result.Reference (L_Length + 1 .. Result.Last) := Right;
+ 
+       return Result;
+    end "&";
+ 
+    function "&"
+      (Left  : Wide_Wide_String;
+       Right : Unbounded_Wide_Wide_String) return Unbounded_Wide_Wide_String
+    is
+       R_Length : constant Natural := Right.Last;
+       Result   : Unbounded_Wide_Wide_String;
+ 
+    begin
+       Result.Last := Left'Length + R_Length;
+ 
+       Result.Reference := new Wide_Wide_String (1 .. Result.Last);
+ 
+       Result.Reference (1 .. Left'Length) := Left;
+       Result.Reference (Left'Length + 1 .. Result.Last) :=
+         Right.Reference (1 .. Right.Last);
+ 
+       return Result;
+    end "&";
+ 
+    function "&"
+      (Left  : Unbounded_Wide_Wide_String;
+       Right : Wide_Wide_Character) return Unbounded_Wide_Wide_String
+    is
+       Result : Unbounded_Wide_Wide_String;
+ 
+    begin
+       Result.Last := Left.Last + 1;
+ 
+       Result.Reference := new Wide_Wide_String (1 .. Result.Last);
+ 
+       Result.Reference (1 .. Result.Last - 1) :=
+         Left.Reference (1 .. Left.Last);
+       Result.Reference (Result.Last) := Right;
+ 
+       return Result;
+    end "&";
+ 
+    function "&"
+      (Left  : Wide_Wide_Character;
+       Right : Unbounded_Wide_Wide_String) return Unbounded_Wide_Wide_String
+    is
+       Result : Unbounded_Wide_Wide_String;
+ 
+    begin
+       Result.Last := Right.Last + 1;
+ 
+       Result.Reference := new Wide_Wide_String (1 .. Result.Last);
+       Result.Reference (1) := Left;
+       Result.Reference (2 .. Result.Last) :=
+         Right.Reference (1 .. Right.Last);
+ 
+       return Result;
+    end "&";
+ 
+    ---------
+    -- "*" --
+    ---------
+ 
+    function "*"
+      (Left  : Natural;
+       Right : Wide_Wide_Character) return Unbounded_Wide_Wide_String
+    is
+       Result : Unbounded_Wide_Wide_String;
+ 
+    begin
+       Result.Last := Left;
+ 
+       Result.Reference := new Wide_Wide_String (1 .. Left);
+       for J in Result.Reference'Range loop
+          Result.Reference (J) := Right;
+       end loop;
+ 
+       return Result;
+    end "*";
+ 
+    function "*"
+      (Left  : Natural;
+       Right : Wide_Wide_String) return Unbounded_Wide_Wide_String
+    is
+       Len    : constant Natural := Right'Length;
+       K      : Positive;
+       Result : Unbounded_Wide_Wide_String;
+ 
+    begin
+       Result.Last := Left * Len;
+ 
+       Result.Reference := new Wide_Wide_String (1 .. Result.Last);
+ 
+       K := 1;
+       for J in 1 .. Left loop
+          Result.Reference (K .. K + Len - 1) := Right;
+          K := K + Len;
+       end loop;
+ 
+       return Result;
+    end "*";
+ 
+    function "*"
+      (Left  : Natural;
+       Right : Unbounded_Wide_Wide_String) return Unbounded_Wide_Wide_String
+    is
+       Len    : constant Natural := Right.Last;
+       K      : Positive;
+       Result   : Unbounded_Wide_Wide_String;
+ 
+    begin
+       Result.Last := Left * Len;
+ 
+       Result.Reference := new Wide_Wide_String (1 .. Result.Last);
+ 
+       K := 1;
+       for I in 1 .. Left loop
+          Result.Reference (K .. K + Len - 1) :=
+            Right.Reference (1 .. Right.Last);
+          K := K + Len;
+       end loop;
+ 
+       return Result;
+    end "*";
+ 
+    ---------
+    -- "<" --
+    ---------
+ 
+    function "<"
+      (Left  : Unbounded_Wide_Wide_String;
+       Right : Unbounded_Wide_Wide_String) return Boolean
+    is
+    begin
+       return
+         Left.Reference (1 .. Left.Last) < Right.Reference (1 .. Right.Last);
+    end "<";
+ 
+    function "<"
+      (Left  : Unbounded_Wide_Wide_String;
+       Right : Wide_Wide_String) return Boolean
+    is
+    begin
+       return Left.Reference (1 .. Left.Last) < Right;
+    end "<";
+ 
+    function "<"
+      (Left  : Wide_Wide_String;
+       Right : Unbounded_Wide_Wide_String) return Boolean
+    is
+    begin
+       return Left < Right.Reference (1 .. Right.Last);
+    end "<";
+ 
+    ----------
+    -- "<=" --
+    ----------
+ 
+    function "<="
+      (Left  : Unbounded_Wide_Wide_String;
+       Right : Unbounded_Wide_Wide_String) return Boolean
+    is
+    begin
+       return
+         Left.Reference (1 .. Left.Last) <= Right.Reference (1 .. Right.Last);
+    end "<=";
+ 
+    function "<="
+      (Left  : Unbounded_Wide_Wide_String;
+       Right : Wide_Wide_String) return Boolean
+    is
+    begin
+       return Left.Reference (1 .. Left.Last) <= Right;
+    end "<=";
+ 
+    function "<="
+      (Left  : Wide_Wide_String;
+       Right : Unbounded_Wide_Wide_String) return Boolean
+    is
+    begin
+       return Left <= Right.Reference (1 .. Right.Last);
+    end "<=";
+ 
+    ---------
+    -- "=" --
+    ---------
+ 
+    function "="
+      (Left  : Unbounded_Wide_Wide_String;
+       Right : Unbounded_Wide_Wide_String) return Boolean
+    is
+    begin
+       return
+         Left.Reference (1 .. Left.Last) = Right.Reference (1 .. Right.Last);
+    end "=";
+ 
+    function "="
+      (Left  : Unbounded_Wide_Wide_String;
+       Right : Wide_Wide_String) return Boolean
+    is
+    begin
+       return Left.Reference (1 .. Left.Last) = Right;
+    end "=";
+ 
+    function "="
+      (Left  : Wide_Wide_String;
+       Right : Unbounded_Wide_Wide_String) return Boolean
+    is
+    begin
+       return Left = Right.Reference (1 .. Right.Last);
+    end "=";
+ 
+    ---------
+    -- ">" --
+    ---------
+ 
+    function ">"
+      (Left  : Unbounded_Wide_Wide_String;
+       Right : Unbounded_Wide_Wide_String) return Boolean
+    is
+    begin
+       return
+         Left.Reference (1 .. Left.Last) > Right.Reference (1 .. Right.Last);
+    end ">";
+ 
+    function ">"
+      (Left  : Unbounded_Wide_Wide_String;
+       Right : Wide_Wide_String) return Boolean
+    is
+    begin
+       return Left.Reference (1 .. Left.Last) > Right;
+    end ">";
+ 
+    function ">"
+      (Left  : Wide_Wide_String;
+       Right : Unbounded_Wide_Wide_String) return Boolean
+    is
+    begin
+       return Left > Right.Reference (1 .. Right.Last);
+    end ">";
+ 
+    ----------
+    -- ">=" --
+    ----------
+ 
+    function ">="
+      (Left  : Unbounded_Wide_Wide_String;
+       Right : Unbounded_Wide_Wide_String) return Boolean
+    is
+    begin
+       return
+         Left.Reference (1 .. Left.Last) >= Right.Reference (1 .. Right.Last);
+    end ">=";
+ 
+    function ">="
+      (Left  : Unbounded_Wide_Wide_String;
+       Right : Wide_Wide_String) return Boolean
+    is
+    begin
+       return Left.Reference (1 .. Left.Last) >= Right;
+    end ">=";
+ 
+    function ">="
+      (Left  : Wide_Wide_String;
+       Right : Unbounded_Wide_Wide_String) return Boolean
+    is
+    begin
+       return Left >= Right.Reference (1 .. Right.Last);
+    end ">=";
+ 
+    ------------
+    -- Adjust --
+    ------------
+ 
+    procedure Adjust (Object : in out Unbounded_Wide_Wide_String) is
+    begin
+       --  Copy string, except we do not copy the statically allocated null
+       --  string, since it can never be deallocated. Note that we do not copy
+       --  extra string room here to avoid dragging unused allocated memory.
+ 
+       if Object.Reference /= Null_Wide_Wide_String'Access then
+          Object.Reference :=
+            new Wide_Wide_String'(Object.Reference (1 .. Object.Last));
+       end if;
+    end Adjust;
+ 
+    ------------
+    -- Append --
+    ------------
+ 
+    procedure Append
+      (Source   : in out Unbounded_Wide_Wide_String;
+       New_Item : Unbounded_Wide_Wide_String)
+    is
+    begin
+       Realloc_For_Chunk (Source, New_Item.Last);
+       Source.Reference (Source.Last + 1 .. Source.Last + New_Item.Last) :=
+         New_Item.Reference (1 .. New_Item.Last);
+       Source.Last := Source.Last + New_Item.Last;
+    end Append;
+ 
+    procedure Append
+      (Source   : in out Unbounded_Wide_Wide_String;
+       New_Item : Wide_Wide_String)
+    is
+    begin
+       Realloc_For_Chunk (Source, New_Item'Length);
+       Source.Reference (Source.Last + 1 .. Source.Last + New_Item'Length) :=
+         New_Item;
+       Source.Last := Source.Last + New_Item'Length;
+    end Append;
+ 
+    procedure Append
+      (Source   : in out Unbounded_Wide_Wide_String;
+       New_Item : Wide_Wide_Character)
+    is
+    begin
+       Realloc_For_Chunk (Source, 1);
+       Source.Reference (Source.Last + 1) := New_Item;
+       Source.Last := Source.Last + 1;
+    end Append;
+ 
+    -----------
+    -- Count --
+    -----------
+ 
+    function Count
+      (Source  : Unbounded_Wide_Wide_String;
+       Pattern : Wide_Wide_String;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping :=
+                         Wide_Wide_Maps.Identity) return Natural
+    is
+    begin
+       return Wide_Wide_Search.Count
+         (Source.Reference (1 .. Source.Last), Pattern, Mapping);
+    end Count;
+ 
+    function Count
+      (Source  : Unbounded_Wide_Wide_String;
+       Pattern : Wide_Wide_String;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
+       return Natural
+    is
+    begin
+       return Wide_Wide_Search.Count
+         (Source.Reference (1 .. Source.Last), Pattern, Mapping);
+    end Count;
+ 
+    function Count
+      (Source : Unbounded_Wide_Wide_String;
+       Set    : Wide_Wide_Maps.Wide_Wide_Character_Set) return Natural
+    is
+    begin
+       return Wide_Wide_Search.Count
+                (Source.Reference (1 .. Source.Last), Set);
+    end Count;
+ 
+    ------------
+    -- Delete --
+    ------------
+ 
+    function Delete
+      (Source  : Unbounded_Wide_Wide_String;
+       From    : Positive;
+       Through : Natural) return Unbounded_Wide_Wide_String
+    is
+    begin
+       return To_Unbounded_Wide_Wide_String
+         (Wide_Wide_Fixed.Delete
+            (Source.Reference (1 .. Source.Last), From, Through));
+    end Delete;
+ 
+    procedure Delete
+      (Source  : in out Unbounded_Wide_Wide_String;
+       From    : Positive;
+       Through : Natural)
+    is
+    begin
+       if From > Through then
+          null;
+ 
+       elsif From < Source.Reference'First or else Through > Source.Last then
+          raise Index_Error;
+ 
+       else
+          declare
+             Len : constant Natural := Through - From + 1;
+ 
+          begin
+             Source.Reference (From .. Source.Last - Len) :=
+               Source.Reference (Through + 1 .. Source.Last);
+             Source.Last := Source.Last - Len;
+          end;
+       end if;
+    end Delete;
+ 
+    -------------
+    -- Element --
+    -------------
+ 
+    function Element
+      (Source : Unbounded_Wide_Wide_String;
+       Index  : Positive) return Wide_Wide_Character
+    is
+    begin
+       if Index <= Source.Last then
+          return Source.Reference (Index);
+       else
+          raise Strings.Index_Error;
+       end if;
+    end Element;
+ 
+    --------------
+    -- Finalize --
+    --------------
+ 
+    procedure Finalize (Object : in out Unbounded_Wide_Wide_String) is
+       procedure Deallocate is
+         new Ada.Unchecked_Deallocation
+               (Wide_Wide_String, Wide_Wide_String_Access);
+ 
+    begin
+       --  Note: Don't try to free statically allocated null string
+ 
+       if Object.Reference /= Null_Wide_Wide_String'Access then
+          Deallocate (Object.Reference);
+          Object.Reference := Null_Unbounded_Wide_Wide_String.Reference;
+       end if;
+    end Finalize;
+ 
+    ----------------
+    -- Find_Token --
+    ----------------
+ 
+    procedure Find_Token
+      (Source : Unbounded_Wide_Wide_String;
+       Set    : Wide_Wide_Maps.Wide_Wide_Character_Set;
+       Test   : Strings.Membership;
+       First  : out Positive;
+       Last   : out Natural)
+    is
+    begin
+       Wide_Wide_Search.Find_Token
+         (Source.Reference (1 .. Source.Last), Set, Test, First, Last);
+    end Find_Token;
+ 
+    ----------
+    -- Free --
+    ----------
+ 
+    procedure Free (X : in out Wide_Wide_String_Access) is
+       procedure Deallocate is
+         new Ada.Unchecked_Deallocation
+               (Wide_Wide_String, Wide_Wide_String_Access);
+    begin
+       --  Note: Do not try to free statically allocated null string
+ 
+       if X /= Null_Unbounded_Wide_Wide_String.Reference then
+          Deallocate (X);
+       end if;
+    end Free;
+ 
+    ----------
+    -- Head --
+    ----------
+ 
+    function Head
+      (Source : Unbounded_Wide_Wide_String;
+       Count  : Natural;
+       Pad    : Wide_Wide_Character := Wide_Wide_Space)
+       return Unbounded_Wide_Wide_String
+    is
+    begin
+       return
+         To_Unbounded_Wide_Wide_String
+           (Wide_Wide_Fixed.Head
+              (Source.Reference (1 .. Source.Last), Count, Pad));
+    end Head;
+ 
+    procedure Head
+      (Source : in out Unbounded_Wide_Wide_String;
+       Count  : Natural;
+       Pad    : Wide_Wide_Character := Wide_Wide_Space)
+    is
+       Old : Wide_Wide_String_Access := Source.Reference;
+ 
+    begin
+       Source.Reference := new Wide_Wide_String'
+         (Wide_Wide_Fixed.Head
+            (Source.Reference (1 .. Source.Last), Count, Pad));
+       Source.Last := Source.Reference'Length;
+       Free (Old);
+    end Head;
+ 
+    -----------
+    -- Index --
+    -----------
+ 
+    function Index
+      (Source  : Unbounded_Wide_Wide_String;
+       Pattern : Wide_Wide_String;
+       Going   : Strings.Direction := Strings.Forward;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping :=
+                         Wide_Wide_Maps.Identity) return Natural
+    is
+    begin
+       return Wide_Wide_Search.Index
+         (Source.Reference (1 .. Source.Last), Pattern, Going, Mapping);
+    end Index;
+ 
+    function Index
+      (Source  : Unbounded_Wide_Wide_String;
+       Pattern : Wide_Wide_String;
+       Going   : Direction := Forward;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
+       return Natural
+    is
+    begin
+       return Wide_Wide_Search.Index
+         (Source.Reference (1 .. Source.Last), Pattern, Going, Mapping);
+    end Index;
+ 
+    function Index
+      (Source : Unbounded_Wide_Wide_String;
+       Set    : Wide_Wide_Maps.Wide_Wide_Character_Set;
+       Test   : Strings.Membership := Strings.Inside;
+       Going  : Strings.Direction  := Strings.Forward) return Natural
+    is
+    begin
+       return Wide_Wide_Search.Index
+         (Source.Reference (1 .. Source.Last), Set, Test, Going);
+    end Index;
+ 
+    function Index_Non_Blank
+      (Source : Unbounded_Wide_Wide_String;
+       Going  : Strings.Direction := Strings.Forward) return Natural
+    is
+    begin
+       return Wide_Wide_Search.Index_Non_Blank
+         (Source.Reference (1 .. Source.Last), Going);
+    end Index_Non_Blank;
+ 
+    ----------------
+    -- Initialize --
+    ----------------
+ 
+    procedure Initialize (Object : in out Unbounded_Wide_Wide_String) is
+    begin
+       Object.Reference := Null_Unbounded_Wide_Wide_String.Reference;
+       Object.Last      := 0;
+    end Initialize;
+ 
+    ------------
+    -- Insert --
+    ------------
+ 
+    function Insert
+      (Source   : Unbounded_Wide_Wide_String;
+       Before   : Positive;
+       New_Item : Wide_Wide_String) return Unbounded_Wide_Wide_String
+    is
+    begin
+       return To_Unbounded_Wide_Wide_String
+         (Wide_Wide_Fixed.Insert
+            (Source.Reference (1 .. Source.Last), Before, New_Item));
+    end Insert;
+ 
+    procedure Insert
+      (Source   : in out Unbounded_Wide_Wide_String;
+       Before   : Positive;
+       New_Item : Wide_Wide_String)
+    is
+    begin
+       if Before not in Source.Reference'First .. Source.Last + 1 then
+          raise Index_Error;
+       end if;
+ 
+       Realloc_For_Chunk (Source, New_Item'Size);
+ 
+       Source.Reference
+         (Before +  New_Item'Length .. Source.Last + New_Item'Length) :=
+            Source.Reference (Before .. Source.Last);
+ 
+       Source.Reference (Before .. Before + New_Item'Length - 1) := New_Item;
+       Source.Last := Source.Last + New_Item'Length;
+    end Insert;
+ 
+    ------------
+    -- Length --
+    ------------
+ 
+    function Length (Source : Unbounded_Wide_Wide_String) return Natural is
+    begin
+       return Source.Last;
+    end Length;
+ 
+    ---------------
+    -- Overwrite --
+    ---------------
+ 
+    function Overwrite
+      (Source   : Unbounded_Wide_Wide_String;
+       Position : Positive;
+       New_Item : Wide_Wide_String) return Unbounded_Wide_Wide_String
+    is
+    begin
+       return To_Unbounded_Wide_Wide_String
+         (Wide_Wide_Fixed.Overwrite
+            (Source.Reference (1 .. Source.Last), Position, New_Item));
+    end Overwrite;
+ 
+    procedure Overwrite
+      (Source    : in out Unbounded_Wide_Wide_String;
+       Position  : Positive;
+       New_Item  : Wide_Wide_String)
+    is
+       NL : constant Natural := New_Item'Length;
+ 
+    begin
+       if Position <= Source.Last - NL + 1 then
+          Source.Reference (Position .. Position + NL - 1) := New_Item;
+ 
+       else
+          declare
+             Old : Wide_Wide_String_Access := Source.Reference;
+ 
+          begin
+             Source.Reference := new Wide_Wide_String'
+               (Wide_Wide_Fixed.Overwrite
+                 (Source.Reference (1 .. Source.Last), Position, New_Item));
+             Source.Last := Source.Reference'Length;
+             Free (Old);
+          end;
+       end if;
+    end Overwrite;
+ 
+    -----------------------
+    -- Realloc_For_Chunk --
+    -----------------------
+ 
+    procedure Realloc_For_Chunk
+      (Source     : in out Unbounded_Wide_Wide_String;
+       Chunk_Size : Natural)
+    is
+       Growth_Factor : constant := 50;
+       S_Length      : constant Natural := Source.Reference'Length;
+ 
+    begin
+       if Chunk_Size > S_Length - Source.Last then
+          declare
+             Alloc_Chunk_Size : constant Positive :=
+                                  Chunk_Size + (S_Length / Growth_Factor);
+             Tmp : Wide_Wide_String_Access;
+ 
+          begin
+             Tmp := new Wide_Wide_String (1 .. S_Length + Alloc_Chunk_Size);
+             Tmp (1 .. Source.Last) := Source.Reference (1 .. Source.Last);
+             Free (Source.Reference);
+             Source.Reference := Tmp;
+          end;
+       end if;
+    end Realloc_For_Chunk;
+ 
+    ---------------------
+    -- Replace_Element --
+    ---------------------
+ 
+    procedure Replace_Element
+      (Source : in out Unbounded_Wide_Wide_String;
+       Index  : Positive;
+       By     : Wide_Wide_Character)
+    is
+    begin
+       if Index <= Source.Last then
+          Source.Reference (Index) := By;
+       else
+          raise Strings.Index_Error;
+       end if;
+    end Replace_Element;
+ 
+    -------------------
+    -- Replace_Slice --
+    -------------------
+ 
+    function Replace_Slice
+      (Source : Unbounded_Wide_Wide_String;
+       Low    : Positive;
+       High   : Natural;
+       By     : Wide_Wide_String) return Unbounded_Wide_Wide_String
+    is
+    begin
+       return
+         To_Unbounded_Wide_Wide_String
+         (Wide_Wide_Fixed.Replace_Slice
+            (Source.Reference (1 .. Source.Last), Low, High, By));
+    end Replace_Slice;
+ 
+    procedure Replace_Slice
+      (Source   : in out Unbounded_Wide_Wide_String;
+       Low      : Positive;
+       High     : Natural;
+       By       : Wide_Wide_String)
+    is
+       Old : Wide_Wide_String_Access := Source.Reference;
+ 
+    begin
+       Source.Reference := new Wide_Wide_String'
+         (Wide_Wide_Fixed.Replace_Slice
+            (Source.Reference (1 .. Source.Last), Low, High, By));
+       Source.Last := Source.Reference'Length;
+       Free (Old);
+    end Replace_Slice;
+ 
+    -----------
+    -- Slice --
+    -----------
+ 
+    function Slice
+      (Source : Unbounded_Wide_Wide_String;
+       Low    : Positive;
+       High   : Natural) return Wide_Wide_String
+    is
+    begin
+       --  Note: test of High > Length is in accordance with AI95-00128
+ 
+       if Low > Source.Last + 1 or else High > Source.Last then
+          raise Index_Error;
+ 
+       else
+          return Source.Reference (Low .. High);
+       end if;
+    end Slice;
+ 
+    ----------
+    -- Tail --
+    ----------
+ 
+    function Tail
+      (Source : Unbounded_Wide_Wide_String;
+       Count  : Natural;
+       Pad    : Wide_Wide_Character := Wide_Wide_Space)
+       return Unbounded_Wide_Wide_String
+    is
+    begin
+       return To_Unbounded_Wide_Wide_String
+         (Wide_Wide_Fixed.Tail
+            (Source.Reference (1 .. Source.Last), Count, Pad));
+    end Tail;
+ 
+    procedure Tail
+      (Source : in out Unbounded_Wide_Wide_String;
+       Count  : Natural;
+       Pad    : Wide_Wide_Character := Wide_Wide_Space)
+    is
+       Old : Wide_Wide_String_Access := Source.Reference;
+ 
+    begin
+       Source.Reference := new Wide_Wide_String'
+         (Wide_Wide_Fixed.Tail
+            (Source.Reference (1 .. Source.Last), Count, Pad));
+       Source.Last := Source.Reference'Length;
+       Free (Old);
+    end Tail;
+ 
+    ------------------------------
+    -- To_Unbounded_Wide_Wide_String --
+    ------------------------------
+ 
+    function To_Unbounded_Wide_Wide_String
+      (Source : Wide_Wide_String) return Unbounded_Wide_Wide_String
+    is
+       Result : Unbounded_Wide_Wide_String;
+    begin
+       Result.Last          := Source'Length;
+       Result.Reference     := new Wide_Wide_String (1 .. Source'Length);
+       Result.Reference.all := Source;
+       return Result;
+    end To_Unbounded_Wide_Wide_String;
+ 
+    function To_Unbounded_Wide_Wide_String
+      (Length : Natural) return Unbounded_Wide_Wide_String
+    is
+       Result : Unbounded_Wide_Wide_String;
+    begin
+       Result.Last      := Length;
+       Result.Reference := new Wide_Wide_String (1 .. Length);
+       return Result;
+    end To_Unbounded_Wide_Wide_String;
+ 
+    --------------------
+    -- To_Wide_Wide_String --
+    --------------------
+ 
+    function To_Wide_Wide_String
+      (Source : Unbounded_Wide_Wide_String) return Wide_Wide_String
+    is
+    begin
+       return Source.Reference (1 .. Source.Last);
+    end To_Wide_Wide_String;
+ 
+    ---------------
+    -- Translate --
+    ---------------
+ 
+    function Translate
+      (Source  : Unbounded_Wide_Wide_String;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping)
+       return Unbounded_Wide_Wide_String
+    is
+    begin
+       return To_Unbounded_Wide_Wide_String
+         (Wide_Wide_Fixed.Translate
+            (Source.Reference (1 .. Source.Last), Mapping));
+    end Translate;
+ 
+    procedure Translate
+      (Source  : in out Unbounded_Wide_Wide_String;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping)
+    is
+    begin
+       Wide_Wide_Fixed.Translate
+         (Source.Reference (1 .. Source.Last), Mapping);
+    end Translate;
+ 
+    function Translate
+      (Source  : Unbounded_Wide_Wide_String;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
+       return Unbounded_Wide_Wide_String
+    is
+    begin
+       return To_Unbounded_Wide_Wide_String
+         (Wide_Wide_Fixed.Translate
+            (Source.Reference (1 .. Source.Last), Mapping));
+    end Translate;
+ 
+    procedure Translate
+      (Source  : in out Unbounded_Wide_Wide_String;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
+    is
+    begin
+       Wide_Wide_Fixed.Translate
+         (Source.Reference (1 .. Source.Last), Mapping);
+    end Translate;
+ 
+    ----------
+    -- Trim --
+    ----------
+ 
+    function Trim
+      (Source : Unbounded_Wide_Wide_String;
+       Side   : Trim_End) return Unbounded_Wide_Wide_String
+    is
+    begin
+       return To_Unbounded_Wide_Wide_String
+         (Wide_Wide_Fixed.Trim (Source.Reference (1 .. Source.Last), Side));
+    end Trim;
+ 
+    procedure Trim
+      (Source : in out Unbounded_Wide_Wide_String;
+       Side   : Trim_End)
+    is
+       Old : Wide_Wide_String_Access := Source.Reference;
+    begin
+       Source.Reference :=
+         new Wide_Wide_String'
+           (Wide_Wide_Fixed.Trim (Source.Reference (1 .. Source.Last), Side));
+       Source.Last      := Source.Reference'Length;
+       Free (Old);
+    end Trim;
+ 
+    function Trim
+      (Source : Unbounded_Wide_Wide_String;
+       Left   : Wide_Wide_Maps.Wide_Wide_Character_Set;
+       Right  : Wide_Wide_Maps.Wide_Wide_Character_Set)
+       return Unbounded_Wide_Wide_String
+    is
+    begin
+       return To_Unbounded_Wide_Wide_String
+         (Wide_Wide_Fixed.Trim
+            (Source.Reference (1 .. Source.Last), Left, Right));
+    end Trim;
+ 
+    procedure Trim
+      (Source : in out Unbounded_Wide_Wide_String;
+       Left   : Wide_Wide_Maps.Wide_Wide_Character_Set;
+       Right  : Wide_Wide_Maps.Wide_Wide_Character_Set)
+    is
+       Old : Wide_Wide_String_Access := Source.Reference;
+    begin
+       Source.Reference := new Wide_Wide_String'
+         (Wide_Wide_Fixed.Trim
+            (Source.Reference (1 .. Source.Last), Left, Right));
+       Source.Last      := Source.Reference'Length;
+       Free (Old);
+    end Trim;
+ 
+ end Ada.Strings.Wide_Wide_Unbounded;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-stzunb.ads gcc-4.0.0/gcc/ada/a-stzunb.ads
*** gcc-3.4.3/gcc/ada/a-stzunb.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-stzunb.ads	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,380 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --      A D A . S T R I N G S . W I D E _ W I D E _ U N B O U N D E D       --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Strings.Wide_Wide_Maps;
+ with Ada.Finalization;
+ 
+ package Ada.Strings.Wide_Wide_Unbounded is
+ pragma Preelaborate (Wide_Wide_Unbounded);
+ 
+    type Unbounded_Wide_Wide_String is private;
+ 
+    Null_Unbounded_Wide_Wide_String : constant Unbounded_Wide_Wide_String;
+ 
+    function Length (Source : Unbounded_Wide_Wide_String) return Natural;
+ 
+    type Wide_Wide_String_Access is access all Wide_Wide_String;
+ 
+    procedure Free (X : in out Wide_Wide_String_Access);
+ 
+    --------------------------------------------------------
+    -- Conversion, Concatenation, and Selection Functions --
+    --------------------------------------------------------
+ 
+    function To_Unbounded_Wide_Wide_String
+      (Source : Wide_Wide_String) return Unbounded_Wide_Wide_String;
+ 
+    function To_Unbounded_Wide_Wide_String
+      (Length : Natural) return Unbounded_Wide_Wide_String;
+ 
+    function To_Wide_Wide_String
+      (Source : Unbounded_Wide_Wide_String) return Wide_Wide_String;
+ 
+    procedure Append
+      (Source   : in out Unbounded_Wide_Wide_String;
+       New_Item : Unbounded_Wide_Wide_String);
+ 
+    procedure Append
+      (Source   : in out Unbounded_Wide_Wide_String;
+       New_Item : Wide_Wide_String);
+ 
+    procedure Append
+      (Source   : in out Unbounded_Wide_Wide_String;
+       New_Item : Wide_Wide_Character);
+ 
+    function "&"
+      (Left, Right : Unbounded_Wide_Wide_String)
+      return Unbounded_Wide_Wide_String;
+ 
+    function "&"
+      (Left  : Unbounded_Wide_Wide_String;
+       Right : Wide_Wide_String) return Unbounded_Wide_Wide_String;
+ 
+    function "&"
+      (Left  : Wide_Wide_String;
+       Right : Unbounded_Wide_Wide_String) return Unbounded_Wide_Wide_String;
+ 
+    function "&"
+      (Left  : Unbounded_Wide_Wide_String;
+       Right : Wide_Wide_Character) return Unbounded_Wide_Wide_String;
+ 
+    function "&"
+      (Left  : Wide_Wide_Character;
+       Right : Unbounded_Wide_Wide_String) return Unbounded_Wide_Wide_String;
+ 
+    function Element
+      (Source : Unbounded_Wide_Wide_String;
+       Index  : Positive) return Wide_Wide_Character;
+ 
+    procedure Replace_Element
+      (Source : in out Unbounded_Wide_Wide_String;
+       Index  : Positive;
+       By     : Wide_Wide_Character);
+ 
+    function Slice
+      (Source : Unbounded_Wide_Wide_String;
+       Low    : Positive;
+       High   : Natural) return Wide_Wide_String;
+ 
+    function "="
+      (Left  : Unbounded_Wide_Wide_String;
+       Right : Unbounded_Wide_Wide_String) return Boolean;
+ 
+    function "="
+      (Left  : Unbounded_Wide_Wide_String;
+       Right : Wide_Wide_String) return Boolean;
+ 
+    function "="
+      (Left  : Wide_Wide_String;
+       Right : Unbounded_Wide_Wide_String) return Boolean;
+ 
+    function "<"
+      (Left  : Unbounded_Wide_Wide_String;
+       Right : Unbounded_Wide_Wide_String) return Boolean;
+ 
+    function "<"
+      (Left  : Unbounded_Wide_Wide_String;
+       Right : Wide_Wide_String) return Boolean;
+ 
+    function "<"
+      (Left  : Wide_Wide_String;
+       Right : Unbounded_Wide_Wide_String) return Boolean;
+ 
+    function "<="
+      (Left  : Unbounded_Wide_Wide_String;
+       Right : Unbounded_Wide_Wide_String) return Boolean;
+ 
+    function "<="
+      (Left  : Unbounded_Wide_Wide_String;
+       Right : Wide_Wide_String) return Boolean;
+ 
+    function "<="
+      (Left  : Wide_Wide_String;
+       Right : Unbounded_Wide_Wide_String) return Boolean;
+ 
+    function ">"
+      (Left  : Unbounded_Wide_Wide_String;
+       Right : Unbounded_Wide_Wide_String) return Boolean;
+ 
+    function ">"
+      (Left  : Unbounded_Wide_Wide_String;
+       Right : Wide_Wide_String) return Boolean;
+ 
+    function ">"
+      (Left  : Wide_Wide_String;
+       Right : Unbounded_Wide_Wide_String) return Boolean;
+ 
+    function ">="
+      (Left  : Unbounded_Wide_Wide_String;
+       Right : Unbounded_Wide_Wide_String) return Boolean;
+ 
+    function ">="
+      (Left  : Unbounded_Wide_Wide_String;
+       Right : Wide_Wide_String) return Boolean;
+ 
+    function ">="
+      (Left  : Wide_Wide_String;
+       Right : Unbounded_Wide_Wide_String) return Boolean;
+ 
+    ------------------------
+    -- Search Subprograms --
+    ------------------------
+ 
+    function Index
+      (Source  : Unbounded_Wide_Wide_String;
+       Pattern : Wide_Wide_String;
+       Going   : Direction := Forward;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping :=
+                    Wide_Wide_Maps.Identity) return Natural;
+ 
+    function Index
+      (Source  : Unbounded_Wide_Wide_String;
+       Pattern : Wide_Wide_String;
+       Going   : Direction := Forward;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
+       return Natural;
+ 
+    function Index
+      (Source : Unbounded_Wide_Wide_String;
+       Set    : Wide_Wide_Maps.Wide_Wide_Character_Set;
+       Test   : Membership := Inside;
+       Going  : Direction  := Forward) return Natural;
+ 
+    function Index_Non_Blank
+      (Source : Unbounded_Wide_Wide_String;
+       Going  : Direction := Forward) return Natural;
+ 
+    function Count
+      (Source  : Unbounded_Wide_Wide_String;
+       Pattern : Wide_Wide_String;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping :=
+                   Wide_Wide_Maps.Identity) return Natural;
+ 
+    function Count
+      (Source  : Unbounded_Wide_Wide_String;
+       Pattern : Wide_Wide_String;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
+       return Natural;
+ 
+    function Count
+      (Source : Unbounded_Wide_Wide_String;
+       Set    : Wide_Wide_Maps.Wide_Wide_Character_Set) return Natural;
+ 
+    procedure Find_Token
+      (Source : Unbounded_Wide_Wide_String;
+       Set    : Wide_Wide_Maps.Wide_Wide_Character_Set;
+       Test   : Membership;
+       First  : out Positive;
+       Last   : out Natural);
+ 
+    ------------------------------------
+    -- Wide_Wide_String Translation Subprograms --
+    ------------------------------------
+ 
+    function Translate
+      (Source  : Unbounded_Wide_Wide_String;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping)
+       return Unbounded_Wide_Wide_String;
+ 
+    procedure Translate
+      (Source  : in out Unbounded_Wide_Wide_String;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping);
+ 
+    function Translate
+      (Source  : Unbounded_Wide_Wide_String;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
+       return Unbounded_Wide_Wide_String;
+ 
+    procedure Translate
+      (Source  : in out Unbounded_Wide_Wide_String;
+       Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function);
+ 
+    ---------------------------------------
+    -- Wide_Wide_String Transformation Subprograms --
+    ---------------------------------------
+ 
+    function Replace_Slice
+      (Source : Unbounded_Wide_Wide_String;
+       Low    : Positive;
+       High   : Natural;
+       By     : Wide_Wide_String) return Unbounded_Wide_Wide_String;
+ 
+    procedure Replace_Slice
+      (Source   : in out Unbounded_Wide_Wide_String;
+       Low      : Positive;
+       High     : Natural;
+       By       : Wide_Wide_String);
+ 
+    function Insert
+      (Source   : Unbounded_Wide_Wide_String;
+       Before   : Positive;
+       New_Item : Wide_Wide_String) return Unbounded_Wide_Wide_String;
+ 
+    procedure Insert
+      (Source   : in out Unbounded_Wide_Wide_String;
+       Before   : Positive;
+       New_Item : Wide_Wide_String);
+ 
+    function Overwrite
+      (Source   : Unbounded_Wide_Wide_String;
+       Position : Positive;
+       New_Item : Wide_Wide_String) return Unbounded_Wide_Wide_String;
+ 
+    procedure Overwrite
+      (Source    : in out Unbounded_Wide_Wide_String;
+       Position  : Positive;
+       New_Item  : Wide_Wide_String);
+ 
+    function Delete
+      (Source  : Unbounded_Wide_Wide_String;
+       From    : Positive;
+       Through : Natural) return Unbounded_Wide_Wide_String;
+ 
+    procedure Delete
+      (Source  : in out Unbounded_Wide_Wide_String;
+       From    : Positive;
+       Through : Natural);
+ 
+    function Trim
+      (Source : Unbounded_Wide_Wide_String;
+       Side   : Trim_End) return Unbounded_Wide_Wide_String;
+ 
+    procedure Trim
+      (Source : in out Unbounded_Wide_Wide_String;
+       Side   : Trim_End);
+ 
+    function Trim
+      (Source : Unbounded_Wide_Wide_String;
+       Left   : Wide_Wide_Maps.Wide_Wide_Character_Set;
+       Right  : Wide_Wide_Maps.Wide_Wide_Character_Set)
+       return Unbounded_Wide_Wide_String;
+ 
+    procedure Trim
+      (Source : in out Unbounded_Wide_Wide_String;
+       Left   : Wide_Wide_Maps.Wide_Wide_Character_Set;
+       Right  : Wide_Wide_Maps.Wide_Wide_Character_Set);
+ 
+    function Head
+      (Source : Unbounded_Wide_Wide_String;
+       Count  : Natural;
+       Pad    : Wide_Wide_Character := Wide_Wide_Space)
+       return Unbounded_Wide_Wide_String;
+ 
+    procedure Head
+      (Source : in out Unbounded_Wide_Wide_String;
+       Count  : Natural;
+       Pad    : Wide_Wide_Character := Wide_Wide_Space);
+ 
+    function Tail
+      (Source : Unbounded_Wide_Wide_String;
+       Count  : Natural;
+       Pad    : Wide_Wide_Character := Wide_Wide_Space)
+       return Unbounded_Wide_Wide_String;
+ 
+    procedure Tail
+      (Source : in out Unbounded_Wide_Wide_String;
+       Count  : Natural;
+       Pad    : Wide_Wide_Character := Wide_Wide_Space);
+ 
+    function "*"
+      (Left  : Natural;
+       Right : Wide_Wide_Character) return Unbounded_Wide_Wide_String;
+ 
+    function "*"
+      (Left  : Natural;
+       Right : Wide_Wide_String) return Unbounded_Wide_Wide_String;
+ 
+    function "*"
+      (Left  : Natural;
+       Right : Unbounded_Wide_Wide_String) return Unbounded_Wide_Wide_String;
+ 
+ private
+    pragma Inline (Length);
+ 
+    package AF renames Ada.Finalization;
+ 
+    Null_Wide_Wide_String : aliased Wide_Wide_String := "";
+ 
+    function To_Unbounded_Wide
+      (S : Wide_Wide_String) return Unbounded_Wide_Wide_String
+       renames To_Unbounded_Wide_Wide_String;
+ 
+    type Unbounded_Wide_Wide_String is new AF.Controlled with record
+       Reference : Wide_Wide_String_Access := Null_Wide_Wide_String'Access;
+       Last      : Natural := 0;
+    end record;
+ 
+    --  The Unbounded_Wide_Wide_String is using a buffered implementation to
+    --  increase speed of the Append/Delete/Insert procedures. The Reference
+    --  string pointer above contains the current string value and extra room
+    --  at the end to be used by the next Append routine. Last is the index of
+    --  the string ending character. So the current string value is really
+    --  Reference (1 .. Last).
+ 
+    pragma Stream_Convert
+      (Unbounded_Wide_Wide_String, To_Unbounded_Wide, To_Wide_Wide_String);
+ 
+    pragma Finalize_Storage_Only (Unbounded_Wide_Wide_String);
+ 
+    procedure Initialize (Object : in out Unbounded_Wide_Wide_String);
+    procedure Adjust     (Object : in out Unbounded_Wide_Wide_String);
+    procedure Finalize   (Object : in out Unbounded_Wide_Wide_String);
+ 
+    Null_Unbounded_Wide_Wide_String : constant Unbounded_Wide_Wide_String :=
+      (AF.Controlled with Reference => Null_Wide_Wide_String'Access, Last => 0);
+ 
+ end Ada.Strings.Wide_Wide_Unbounded;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-suteio.adb gcc-4.0.0/gcc/ada/a-suteio.adb
*** gcc-3.4.3/gcc/ada/a-suteio.adb	Thu Apr 24 17:53:54 2003
--- gcc-4.0.0/gcc/ada/a-suteio.adb	Thu Feb 10 13:50:14 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-1999 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Ada.Strings.Unbounded.Text_
*** 50,56 ****
     begin
        Get_Line (Buffer, Last);
        Str1 := new String'(Buffer (1 .. Last));
- 
        while Last = Buffer'Last loop
           Get_Line (Buffer, Last);
           Str2 := new String'(Str1.all & Buffer (1 .. Last));
--- 50,55 ----
*************** package body Ada.Strings.Unbounded.Text_
*** 72,78 ****
     begin
        Get_Line (File, Buffer, Last);
        Str1 := new String'(Buffer (1 .. Last));
- 
        while Last = Buffer'Last loop
           Get_Line (File, Buffer, Last);
           Str2 := new String'(Str1.all & Buffer (1 .. Last));
--- 71,76 ----
*************** package body Ada.Strings.Unbounded.Text_
*** 84,89 ****
--- 82,128 ----
        return Result;
     end Get_Line;
  
+    procedure Get_Line (Item : out Unbounded_String) is
+       Buffer : String (1 .. 1000);
+       Last   : Natural;
+       Str1   : String_Access;
+       Str2   : String_Access;
+ 
+    begin
+       Get_Line (Buffer, Last);
+       Str1 := new String'(Buffer (1 .. Last));
+       while Last = Buffer'Last loop
+          Get_Line (Buffer, Last);
+          Str2 := new String'(Str1.all & Buffer (1 .. Last));
+          Free (Str1);
+          Str1 := Str2;
+       end loop;
+ 
+       Set_String (Item, Str1);
+    end Get_Line;
+ 
+    procedure Get_Line
+      (File : Ada.Text_IO.File_Type;
+       Item : out Unbounded_String)
+    is
+       Buffer : String (1 .. 1000);
+       Last   : Natural;
+       Str1   : String_Access;
+       Str2   : String_Access;
+ 
+    begin
+       Get_Line (File, Buffer, Last);
+       Str1 := new String'(Buffer (1 .. Last));
+       while Last = Buffer'Last loop
+          Get_Line (Buffer, Last);
+          Str2 := new String'(Str1.all & Buffer (1 .. Last));
+          Free (Str1);
+          Str1 := Str2;
+       end loop;
+ 
+       Set_String (Item, Str1);
+    end Get_Line;
+ 
     ---------
     -- Put --
     ---------
diff -Nrcpad gcc-3.4.3/gcc/ada/a-suteio.ads gcc-4.0.0/gcc/ada/a-suteio.ads
*** gcc-3.4.3/gcc/ada/a-suteio.ads	Thu Apr 24 17:53:54 2003
--- gcc-4.0.0/gcc/ada/a-suteio.ads	Thu Feb 10 13:50:14 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1997-1999 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1997-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Ada.Strings.Unbounded.Text_IO is
*** 46,51 ****
--- 46,57 ----
     --  as an unbounded string of appropriate length. If no File parameter
     --  is present, input is from Current_Input.
  
+    procedure Get_Line
+      (File : Ada.Text_IO.File_Type;
+       Item : out Unbounded_String);
+    procedure Get_Line (Item : out Unbounded_String);
+    --  Similar to the above, but in procedure form with an out parameter
+ 
     procedure Put                                    (U : Unbounded_String);
     procedure Put      (File : Ada.Text_IO.File_Type; U : Unbounded_String);
     procedure Put_Line                               (U : Unbounded_String);
diff -Nrcpad gcc-3.4.3/gcc/ada/a-swunau.adb gcc-4.0.0/gcc/ada/a-swunau.adb
*** gcc-3.4.3/gcc/ada/a-swunau.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-swunau.adb	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,104 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                          GNAT RUNTIME COMPONENTS                         --
+ --                                                                          --
+ --        A D A . S T R I N G S . W I D E _ U N B O U N D E D . A U X       --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package body Ada.Strings.Wide_Unbounded.Aux is
+ 
+    --------------------
+    -- Get_Wide_String --
+    ---------------------
+ 
+    function Get_Wide_String
+      (U : Unbounded_Wide_String) return Wide_String_Access
+    is
+    begin
+       if U.Last = U.Reference'Length then
+          return U.Reference;
+ 
+       else
+          declare
+             type Unbounded_Wide_String_Access is
+               access all Unbounded_Wide_String;
+ 
+             U_Ptr : constant Unbounded_Wide_String_Access :=
+                       U'Unrestricted_Access;
+             --  Unbounded_Wide_String is a controlled type which is always
+             --  passed by copy it is always safe to take the pointer to such
+             --  object here. This pointer is used to set the U.Reference value
+             --  which would not be possible otherwise as U is read-only.
+ 
+             Old : Wide_String_Access := U.Reference;
+ 
+          begin
+             U_Ptr.Reference := new Wide_String'(U.Reference (1 .. U.Last));
+             Free (Old);
+             return U.Reference;
+          end;
+       end if;
+    end Get_Wide_String;
+ 
+    ---------------------
+    -- Set_Wide_String --
+    ---------------------
+ 
+    procedure Set_Wide_String
+      (UP : in out Unbounded_Wide_String;
+       S  : Wide_String)
+    is
+    begin
+       if UP.Last = S'Length then
+          UP.Reference.all := S;
+ 
+       else
+          declare
+             subtype String_1 is Wide_String (1 .. S'Length);
+             Tmp : Wide_String_Access;
+          begin
+             Tmp := new Wide_String'(String_1 (S));
+             Finalize (UP);
+             UP.Reference := Tmp;
+             UP.Last := UP.Reference'Length;
+          end;
+       end if;
+    end Set_Wide_String;
+ 
+    procedure Set_Wide_String
+      (UP : in out Unbounded_Wide_String;
+       S  : Wide_String_Access)
+    is
+    begin
+       Finalize (UP);
+       UP.Reference := S;
+       UP.Last := UP.Reference'Length;
+    end Set_Wide_String;
+ 
+ end Ada.Strings.Wide_Unbounded.Aux;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-swunau.ads gcc-4.0.0/gcc/ada/a-swunau.ads
*** gcc-3.4.3/gcc/ada/a-swunau.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-swunau.ads	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,75 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                          GNAT RUNTIME COMPONENTS                         --
+ --                                                                          --
+ --        A D A . S T R I N G S . W I D E _ U N B O U N D E D . A U X       --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This child package of Ada.Strings.Wide_Unbounded provides some specialized
+ --  access functions which are intended to allow more efficient use of the
+ --  facilities of Ada.Strings.Wide_Unbounded, particularly by other layered
+ --  utilities.
+ 
+ package Ada.Strings.Wide_Unbounded.Aux is
+ pragma Preelaborate (Aux);
+ 
+    function Get_Wide_String
+      (U : Unbounded_Wide_String) return Wide_String_Access;
+    pragma Inline (Get_Wide_String);
+    --  This function returns the internal string pointer used in the
+    --  representation of an unbounded string. There is no copy involved,
+    --  so the value obtained references the same string as the original
+    --  unbounded string. The characters of this string may not be modified
+    --  via the returned pointer, and are valid only as long as the original
+    --  unbounded string is not modified. Violating either of these two
+    --  rules results in erroneous execution.
+    --
+    --  This function is much more efficient than the use of To_Wide_String
+    --  since it avoids the need to copy the string. The lower bound of the
+    --  referenced string returned by this call is always one.
+ 
+    procedure Set_Wide_String
+      (UP : in out Unbounded_Wide_String;
+       S  : Wide_String);
+    pragma Inline (Set_Wide_String);
+    --  This function sets the string contents of the referenced unbounded
+    --  string to the given string value. It is significantly more efficient
+    --  than the use of To_Unbounded_Wide_String with an assignment, since it
+    --  avoids the necessity of messing with finalization chains. The lower
+    --  bound of the string S is not required to be one.
+ 
+    procedure Set_Wide_String
+      (UP : in out Unbounded_Wide_String;
+       S  : Wide_String_Access);
+    pragma Inline (Set_Wide_String);
+    --  This version of Set_Wide_String takes a string access value, rather
+    --  than string. The lower bound of the string value is required to be one,
+    --  and this requirement is not checked.
+ 
+ end Ada.Strings.Wide_Unbounded.Aux;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-swunha.adb gcc-4.0.0/gcc/ada/a-swunha.adb
*** gcc-3.4.3/gcc/ada/a-swunha.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-swunha.adb	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,57 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                     ADA.STRINGS.WIDE_UNBOUNDED.HASH                      --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ 
+ --  Note: source of this algorithm: GNAT.HTable.Hash (g-htable.adb)
+ 
+ function Ada.Strings.Wide_Unbounded.Hash
+   (Key : Unbounded_Wide_String) return Containers.Hash_Type
+ is
+    use Ada.Containers;
+ 
+    function Rotate_Left
+      (Value  : Hash_Type;
+       Amount : Natural) return Hash_Type;
+    pragma Import (Intrinsic, Rotate_Left);
+ 
+    Tmp : Hash_Type;
+ 
+ begin
+    Tmp := 0;
+    for J in 1 .. Key.Last loop
+       Tmp := Rotate_Left (Tmp, 1) + Wide_Character'Pos (Key.Reference (J));
+    end loop;
+ 
+    return Tmp;
+ end Ada.Strings.Wide_Unbounded.Hash;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-swunha.ads gcc-4.0.0/gcc/ada/a-swunha.ads
*** gcc-3.4.3/gcc/ada/a-swunha.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-swunha.ads	Wed Feb  9 11:14:40 2005
***************
*** 0 ****
--- 1,21 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                     ADA.STRINGS.WIDE_UNBOUNDED.HASH                      --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ -- This specification is adapted from the Ada Reference Manual for use with --
+ -- GNAT.  In accordance with the copyright of that document, you can freely --
+ -- copy and modify this specification,  provided that if you redistribute a --
+ -- modified version,  any changes that you have made are clearly indicated. --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Containers;
+ 
+ function Ada.Strings.Wide_Unbounded.Hash
+   (Key : Unbounded_Wide_String) return Containers.Hash_Type;
+ 
+ pragma Preelaborate (Ada.Strings.Wide_Unbounded.Hash);
diff -Nrcpad gcc-3.4.3/gcc/ada/a-swuwti.adb gcc-4.0.0/gcc/ada/a-swuwti.adb
*** gcc-3.4.3/gcc/ada/a-swuwti.adb	Thu Apr 24 17:53:54 2003
--- gcc-4.0.0/gcc/ada/a-swuwti.adb	Thu Feb 10 13:50:14 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-1999 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 31,37 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Ada.Wide_Text_IO; use Ada.Wide_Text_IO;
  
  package body Ada.Strings.Wide_Unbounded.Wide_Text_IO is
  
--- 31,38 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Ada.Strings.Wide_Unbounded.Aux; use Ada.Strings.Wide_Unbounded.Aux;
! with Ada.Wide_Text_IO;               use Ada.Wide_Text_IO;
  
  package body Ada.Strings.Wide_Unbounded.Wide_Text_IO is
  
*************** package body Ada.Strings.Wide_Unbounded.
*** 44,54 ****
        Last   : Natural;
        Str1   : Wide_String_Access;
        Str2   : Wide_String_Access;
  
     begin
        Get_Line (Buffer, Last);
        Str1 := new Wide_String'(Buffer (1 .. Last));
- 
        while Last = Buffer'Last loop
           Get_Line (Buffer, Last);
           Str2 := new Wide_String'(Str1.all & Buffer (1 .. Last));
--- 45,55 ----
        Last   : Natural;
        Str1   : Wide_String_Access;
        Str2   : Wide_String_Access;
+       Result : Unbounded_Wide_String;
  
     begin
        Get_Line (Buffer, Last);
        Str1 := new Wide_String'(Buffer (1 .. Last));
        while Last = Buffer'Last loop
           Get_Line (Buffer, Last);
           Str2 := new Wide_String'(Str1.all & Buffer (1 .. Last));
*************** package body Ada.Strings.Wide_Unbounded.
*** 56,72 ****
           Str1 := Str2;
        end loop;
  
!       return To_Unbounded_Wide_String (Str1.all);
     end Get_Line;
  
     function Get_Line
!      (File : Ada.Wide_Text_IO.File_Type)
!       return Unbounded_Wide_String
     is
        Buffer : Wide_String (1 .. 1000);
        Last   : Natural;
        Str1   : Wide_String_Access;
        Str2   : Wide_String_Access;
  
     begin
        Get_Line (File, Buffer, Last);
--- 57,74 ----
           Str1 := Str2;
        end loop;
  
!       Set_Wide_String (Result, Str1);
!       return Result;
     end Get_Line;
  
     function Get_Line
!      (File : Ada.Wide_Text_IO.File_Type) return Unbounded_Wide_String
     is
        Buffer : Wide_String (1 .. 1000);
        Last   : Natural;
        Str1   : Wide_String_Access;
        Str2   : Wide_String_Access;
+       Result : Unbounded_Wide_String;
  
     begin
        Get_Line (File, Buffer, Last);
*************** package body Ada.Strings.Wide_Unbounded.
*** 79,85 ****
           Str1 := Str2;
        end loop;
  
!       return To_Unbounded_Wide_String (Str1.all);
     end Get_Line;
  
     ---------
--- 81,129 ----
           Str1 := Str2;
        end loop;
  
!       Set_Wide_String (Result, Str1);
!       return Result;
!    end Get_Line;
! 
!    procedure Get_Line (Item : out Unbounded_Wide_String) is
!       Buffer : Wide_String (1 .. 1000);
!       Last   : Natural;
!       Str1   : Wide_String_Access;
!       Str2   : Wide_String_Access;
! 
!    begin
!       Get_Line (Buffer, Last);
!       Str1 := new Wide_String'(Buffer (1 .. Last));
!       while Last = Buffer'Last loop
!          Get_Line (Buffer, Last);
!          Str2 := new Wide_String'(Str1.all & Buffer (1 .. Last));
!          Free (Str1);
!          Str1 := Str2;
!       end loop;
! 
!       Set_Wide_String (Item, Str1);
!    end Get_Line;
! 
!    procedure Get_Line
!      (File : Ada.Wide_Text_IO.File_Type;
!       Item : out Unbounded_Wide_String)
!    is
!       Buffer : Wide_String (1 .. 1000);
!       Last   : Natural;
!       Str1   : Wide_String_Access;
!       Str2   : Wide_String_Access;
! 
!    begin
!       Get_Line (File, Buffer, Last);
!       Str1 := new Wide_String'(Buffer (1 .. Last));
!       while Last = Buffer'Last loop
!          Get_Line (Buffer, Last);
!          Str2 := new Wide_String'(Str1.all & Buffer (1 .. Last));
!          Free (Str1);
!          Str1 := Str2;
!       end loop;
! 
!       Set_Wide_String (Item, Str1);
     end Get_Line;
  
     ---------
*************** package body Ada.Strings.Wide_Unbounded.
*** 88,99 ****
  
     procedure Put (U : Unbounded_Wide_String) is
     begin
!       Put (To_Wide_String (U));
     end Put;
  
     procedure Put (File : File_Type; U : Unbounded_Wide_String) is
     begin
!       Put (File, To_Wide_String (U));
     end Put;
  
     --------------
--- 132,143 ----
  
     procedure Put (U : Unbounded_Wide_String) is
     begin
!       Put (Get_Wide_String (U).all);
     end Put;
  
     procedure Put (File : File_Type; U : Unbounded_Wide_String) is
     begin
!       Put (File, Get_Wide_String (U).all);
     end Put;
  
     --------------
*************** package body Ada.Strings.Wide_Unbounded.
*** 102,113 ****
  
     procedure Put_Line (U : Unbounded_Wide_String) is
     begin
!       Put_Line (To_Wide_String (U));
     end Put_Line;
  
     procedure Put_Line (File : File_Type; U : Unbounded_Wide_String) is
     begin
!       Put_Line (File, To_Wide_String (U));
     end Put_Line;
  
  end Ada.Strings.Wide_Unbounded.Wide_Text_IO;
--- 146,157 ----
  
     procedure Put_Line (U : Unbounded_Wide_String) is
     begin
!       Put_Line (Get_Wide_String (U).all);
     end Put_Line;
  
     procedure Put_Line (File : File_Type; U : Unbounded_Wide_String) is
     begin
!       Put_Line (File, Get_Wide_String (U).all);
     end Put_Line;
  
  end Ada.Strings.Wide_Unbounded.Wide_Text_IO;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-swuwti.ads gcc-4.0.0/gcc/ada/a-swuwti.ads
*** gcc-3.4.3/gcc/ada/a-swuwti.ads	Thu Apr 24 17:53:54 2003
--- gcc-4.0.0/gcc/ada/a-swuwti.ads	Thu Feb 10 13:50:14 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1997-1999 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1997-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 32,40 ****
  ------------------------------------------------------------------------------
  
  --  This child package of Ada.Strings.Wide_Unbounded provides specialized
! --  Text_IO routines that work directly with unbounded strings, avoiding the
! --  inefficiencies of access via the standard interface, and also taking
! --  direct advantage of the variable length semantics of these strings.
  
  with Ada.Wide_Text_IO;
  
--- 32,40 ----
  ------------------------------------------------------------------------------
  
  --  This child package of Ada.Strings.Wide_Unbounded provides specialized
! --  Wide_Text_IO routines that work directly with unbounded wide strings,
! --  avoiding the inefficiencies of access via the standard interface, and also
! --  taking direct advantage of the variable length semantics of these strings.
  
  with Ada.Wide_Text_IO;
  
*************** package Ada.Strings.Wide_Unbounded.Wide_
*** 43,54 ****
     function Get_Line
       return Unbounded_Wide_String;
     function Get_Line
!      (File : Ada.Wide_Text_IO.File_Type)
!       return Unbounded_Wide_String;
     --  Reads up to the end of the current line, returning the result
     --  as an unbounded string of appropriate length. If no File parameter
     --  is present, input is from Current_Input.
  
     procedure Put
       (U : Unbounded_Wide_String);
     procedure Put
--- 43,59 ----
     function Get_Line
       return Unbounded_Wide_String;
     function Get_Line
!      (File : Ada.Wide_Text_IO.File_Type) return Unbounded_Wide_String;
     --  Reads up to the end of the current line, returning the result
     --  as an unbounded string of appropriate length. If no File parameter
     --  is present, input is from Current_Input.
  
+    procedure Get_Line
+      (File : Ada.Wide_Text_IO.File_Type;
+       Item : out Unbounded_Wide_String);
+    procedure Get_Line (Item : out Unbounded_Wide_String);
+    --  Similar to the above, but in procedure form with an out parameter
+ 
     procedure Put
       (U : Unbounded_Wide_String);
     procedure Put
diff -Nrcpad gcc-3.4.3/gcc/ada/a-sytaco-vxworks.adb gcc-4.0.0/gcc/ada/a-sytaco-vxworks.adb
*** gcc-3.4.3/gcc/ada/a-sytaco-vxworks.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-sytaco-vxworks.adb	Fri May 14 10:01:59 2004
***************
*** 0 ****
--- 1,147 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --         A D A . S Y N C H R O N O U S _ T A S K _ C O N T R O L          --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --            Copyright (C) 1992-2004 Free Software Foundation, Inc.        --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Interfaces.C;
+ 
+ package body Ada.Synchronous_Task_Control is
+    use System.OS_Interface;
+    use type Interfaces.C.int;
+ 
+    -------------------
+    -- Current_State --
+    -------------------
+ 
+    function Current_State (S : Suspension_Object) return Boolean is
+       St     : STATUS;
+       Result : Boolean := False;
+ 
+    begin
+       --  Determine state by attempting to take the semaphore with
+       --  a 0 timeout value.  Status = OK indicates the semaphore was
+       --  full, so reset it to the full state.
+ 
+       St := semTake (S.Sema, NO_WAIT);
+ 
+       --  If we took the semaphore, reset semaphore state to FULL
+ 
+       if St = OK then
+          Result := True;
+          St := semGive (S.Sema);
+       end if;
+ 
+       return Result;
+    end Current_State;
+ 
+    ---------------
+    -- Set_False --
+    ---------------
+ 
+    procedure Set_False (S : in out Suspension_Object) is
+       St : STATUS;
+ 
+    begin
+       --  Need to get the semaphore into the "empty" state.
+       --  On return, this task will have made the semaphore
+       --  empty (St = OK) or have left it empty.
+ 
+       St := semTake (S.Sema, NO_WAIT);
+       pragma Assert (St = OK);
+    end Set_False;
+ 
+    --------------
+    -- Set_True --
+    --------------
+ 
+    procedure Set_True (S : in out Suspension_Object) is
+       St : STATUS;
+       pragma Unreferenced (St);
+    begin
+       St := semGive (S.Sema);
+    end Set_True;
+ 
+    ------------------------
+    -- Suspend_Until_True --
+    ------------------------
+ 
+    procedure Suspend_Until_True (S : in out Suspension_Object) is
+       St : STATUS;
+ 
+    begin
+       --  Determine whether another task is pending on the suspension
+       --  object. Should never be called from an ISR. Therefore semTake can
+       --  be called on the mutex
+ 
+       St := semTake (S.Mutex, NO_WAIT);
+ 
+       if St = OK then
+ 
+          --  Wait for suspension object
+ 
+          St := semTake (S.Sema, WAIT_FOREVER);
+          St := semGive (S.Mutex);
+ 
+       else
+          --  Another task is pending on the suspension object
+ 
+          raise Program_Error;
+       end if;
+    end Suspend_Until_True;
+ 
+    ----------------
+    -- Initialize --
+    ----------------
+ 
+    procedure Initialize (S : in out Suspension_Object) is
+    begin
+       S.Sema := semBCreate (SEM_Q_FIFO, SEM_EMPTY);
+ 
+       --  Use simpler binary semaphore instead of VxWorks
+       --  mutual exclusion semaphore, because we don't need
+       --  the fancier semantics and their overhead.
+ 
+       S.Mutex := semBCreate (SEM_Q_FIFO, SEM_FULL);
+    end Initialize;
+ 
+    --------------
+    -- Finalize --
+    --------------
+ 
+    procedure Finalize (S : in out Suspension_Object) is
+       St : STATUS;
+       pragma Unreferenced (St);
+    begin
+       St := semDelete (S.Sema);
+       St := semDelete (S.Mutex);
+    end Finalize;
+ 
+ end Ada.Synchronous_Task_Control;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-sytaco-vxworks.ads gcc-4.0.0/gcc/ada/a-sytaco-vxworks.ads
*** gcc-3.4.3/gcc/ada/a-sytaco-vxworks.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-sytaco-vxworks.ads	Fri May 14 10:01:59 2004
***************
*** 0 ****
--- 1,68 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --         A D A . S Y N C H R O N O U S _ T A S K _ C O N T R O L          --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2001 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with System.OS_Interface;
+ with Ada.Finalization;
+ package Ada.Synchronous_Task_Control is
+ 
+    type Suspension_Object is limited private;
+ 
+    procedure Set_True (S : in out Suspension_Object);
+ 
+    procedure Set_False (S : in out Suspension_Object);
+ 
+    function Current_State (S : Suspension_Object) return Boolean;
+ 
+    procedure Suspend_Until_True (S : in out Suspension_Object);
+ 
+ private
+ 
+    procedure Initialize (S : in out Suspension_Object);
+ 
+    procedure Finalize (S : in out Suspension_Object);
+ 
+    --  Implement with a VxWorks binary semaphore. A second semaphore
+    --  is used to avoid a race condition related to the implementation of
+    --  the STC requirement to raise Program_Error when Suspend_Until_True is
+    --  called with a task already pending on the suspension object
+ 
+    type Suspension_Object is new Ada.Finalization.Controlled with record
+       Sema  : System.OS_Interface.SEM_ID;
+       Mutex : System.OS_Interface.SEM_ID;
+    end record;
+ 
+ end Ada.Synchronous_Task_Control;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-szmzco.ads gcc-4.0.0/gcc/ada/a-szmzco.ads
*** gcc-3.4.3/gcc/ada/a-szmzco.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-szmzco.ads	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,453 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --              ADA.STRINGS.WIDE_WIDE_MAPS.WIDE_WIDE_CONSTANTS              --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Characters.Wide_Wide_Latin_1;
+ 
+ package Ada.Strings.Wide_Wide_Maps.Wide_Wide_Constants is
+ pragma Preelaborate (Wide_Wide_Constants);
+ 
+    Control_Set           : constant Wide_Wide_Maps.Wide_Wide_Character_Set;
+    Graphic_Set           : constant Wide_Wide_Maps.Wide_Wide_Character_Set;
+    Letter_Set            : constant Wide_Wide_Maps.Wide_Wide_Character_Set;
+    Lower_Set             : constant Wide_Wide_Maps.Wide_Wide_Character_Set;
+    Upper_Set             : constant Wide_Wide_Maps.Wide_Wide_Character_Set;
+    Basic_Set             : constant Wide_Wide_Maps.Wide_Wide_Character_Set;
+    Decimal_Digit_Set     : constant Wide_Wide_Maps.Wide_Wide_Character_Set;
+    Hexadecimal_Digit_Set : constant Wide_Wide_Maps.Wide_Wide_Character_Set;
+    Alphanumeric_Set      : constant Wide_Wide_Maps.Wide_Wide_Character_Set;
+    Special_Graphic_Set   : constant Wide_Wide_Maps.Wide_Wide_Character_Set;
+    ISO_646_Set           : constant Wide_Wide_Maps.Wide_Wide_Character_Set;
+    Character_Set         : constant Wide_Wide_Maps.Wide_Wide_Character_Set;
+ 
+    Lower_Case_Map        : constant Wide_Wide_Maps.Wide_Wide_Character_Mapping;
+    --  Maps to lower case for letters, else identity
+ 
+    Upper_Case_Map        : constant Wide_Wide_Maps.Wide_Wide_Character_Mapping;
+    --  Maps to upper case for letters, else identity
+ 
+    Basic_Map             : constant Wide_Wide_Maps.Wide_Wide_Character_Mapping;
+    --  Maps to basic letter for letters, else identity
+ 
+ private
+    package W renames Ada.Characters.Wide_Wide_Latin_1;
+ 
+    subtype WC is Wide_Wide_Character;
+ 
+    Control_Ranges           : aliased constant Wide_Wide_Character_Ranges :=
+      ((W.NUL, W.US),
+       (W.DEL, W.APC));
+ 
+    Control_Set              : constant Wide_Wide_Character_Set :=
+      (AF.Controlled with
+       Control_Ranges'Unrestricted_Access);
+ 
+    Graphic_Ranges           : aliased constant Wide_Wide_Character_Ranges :=
+      ((W.Space,       W.Tilde),
+       (WC'Val (256), WC'Last));
+ 
+    Graphic_Set              : constant Wide_Wide_Character_Set :=
+      (AF.Controlled with
+       Graphic_Ranges'Unrestricted_Access);
+ 
+    Letter_Ranges            : aliased constant Wide_Wide_Character_Ranges :=
+      (('A',                   'Z'),
+       (W.LC_A,                W.LC_Z),
+       (W.UC_A_Grave,          W.UC_O_Diaeresis),
+       (W.UC_O_Oblique_Stroke, W.LC_O_Diaeresis),
+       (W.LC_O_Oblique_Stroke, W.LC_Y_Diaeresis));
+ 
+    Letter_Set               : constant Wide_Wide_Character_Set :=
+      (AF.Controlled with
+       Letter_Ranges'Unrestricted_Access);
+ 
+    Lower_Ranges             : aliased constant Wide_Wide_Character_Ranges :=
+      (1 => (W.LC_A,                 W.LC_Z),
+       2 => (W.LC_German_Sharp_S,   W.LC_O_Diaeresis),
+       3 => (W.LC_O_Oblique_Stroke, W.LC_Y_Diaeresis));
+ 
+    Lower_Set                : constant Wide_Wide_Character_Set :=
+      (AF.Controlled with
+       Lower_Ranges'Unrestricted_Access);
+ 
+    Upper_Ranges             : aliased constant Wide_Wide_Character_Ranges :=
+      (1 => ('A',                   'Z'),
+       2 => (W.UC_A_Grave,          W.UC_O_Diaeresis),
+       3 => (W.UC_O_Oblique_Stroke, W.UC_Icelandic_Thorn));
+ 
+    Upper_Set                : constant Wide_Wide_Character_Set :=
+      (AF.Controlled with
+       Upper_Ranges'Unrestricted_Access);
+ 
+    Basic_Ranges             : aliased constant Wide_Wide_Character_Ranges :=
+      (1 => ('A',                   'Z'),
+       2 => (W.LC_A,                W.LC_Z),
+       3 => (W.UC_AE_Diphthong,     W.UC_AE_Diphthong),
+       4 => (W.LC_AE_Diphthong,     W.LC_AE_Diphthong),
+       5 => (W.LC_German_Sharp_S,   W.LC_German_Sharp_S),
+       6 => (W.UC_Icelandic_Thorn,  W.UC_Icelandic_Thorn),
+       7 => (W.LC_Icelandic_Thorn,  W.LC_Icelandic_Thorn),
+       8 => (W.UC_Icelandic_Eth,    W.UC_Icelandic_Eth),
+       9 => (W.LC_Icelandic_Eth,    W.LC_Icelandic_Eth));
+ 
+    Basic_Set                : constant Wide_Wide_Character_Set :=
+      (AF.Controlled with
+       Basic_Ranges'Unrestricted_Access);
+ 
+    Decimal_Digit_Ranges     : aliased constant Wide_Wide_Character_Ranges :=
+      (1 => ('0', '9'));
+ 
+    Decimal_Digit_Set        : constant Wide_Wide_Character_Set :=
+      (AF.Controlled with
+       Decimal_Digit_Ranges'Unrestricted_Access);
+ 
+    Hexadecimal_Digit_Ranges : aliased constant Wide_Wide_Character_Ranges :=
+      (1 => ('0', '9'),
+       2 => ('A', 'F'),
+       3 => (W.LC_A, W.LC_F));
+ 
+    Hexadecimal_Digit_Set    : constant Wide_Wide_Character_Set :=
+      (AF.Controlled with
+       Hexadecimal_Digit_Ranges'Unrestricted_Access);
+ 
+    Alphanumeric_Ranges      : aliased constant Wide_Wide_Character_Ranges :=
+      (1 => ('0',                   '9'),
+       2 => ('A',                   'Z'),
+       3 => (W.LC_A,                W.LC_Z),
+       4 => (W.UC_A_Grave,          W.UC_O_Diaeresis),
+       5 => (W.UC_O_Oblique_Stroke, W.LC_O_Diaeresis),
+       6 => (W.LC_O_Oblique_Stroke, W.LC_Y_Diaeresis));
+ 
+    Alphanumeric_Set         : constant Wide_Wide_Character_Set :=
+      (AF.Controlled with
+       Alphanumeric_Ranges'Unrestricted_Access);
+ 
+    Special_Graphic_Ranges   : aliased constant Wide_Wide_Character_Ranges :=
+      (1 => (Wide_Wide_Space,            W.Solidus),
+       2 => (W.Colon,               W.Commercial_At),
+       3 => (W.Left_Square_Bracket, W.Grave),
+       4 => (W.Left_Curly_Bracket,  W.Tilde),
+       5 => (W.No_Break_Space,      W.Inverted_Question),
+       6 => (W.Multiplication_Sign, W.Multiplication_Sign),
+       7 => (W.Division_Sign,       W.Division_Sign));
+ 
+    Special_Graphic_Set      : constant Wide_Wide_Character_Set :=
+      (AF.Controlled with
+       Special_Graphic_Ranges'Unrestricted_Access);
+ 
+    ISO_646_Ranges           : aliased constant Wide_Wide_Character_Ranges :=
+      (1 => (W.NUL, W.DEL));
+ 
+    ISO_646_Set              : constant Wide_Wide_Character_Set :=
+      (AF.Controlled with
+       ISO_646_Ranges'Unrestricted_Access);
+ 
+    Character_Ranges         : aliased constant Wide_Wide_Character_Ranges :=
+      (1 => (W.NUL, WC'Val (255)));
+ 
+    Character_Set            : constant Wide_Wide_Character_Set :=
+      (AF.Controlled with
+       Character_Ranges'Unrestricted_Access);
+ 
+ 
+    Lower_Case_Mapping : aliased constant Wide_Wide_Character_Mapping_Values :=
+      (Length => 56,
+ 
+       Domain =>
+         "ABCDEFGHIJKLMNOPQRSTUVWXYZ" &
+          W.UC_A_Grave                &
+          W.UC_A_Acute                &
+          W.UC_A_Circumflex           &
+          W.UC_A_Tilde                &
+          W.UC_A_Diaeresis            &
+          W.UC_A_Ring                 &
+          W.UC_AE_Diphthong           &
+          W.UC_C_Cedilla              &
+          W.UC_E_Grave                &
+          W.UC_E_Acute                &
+          W.UC_E_Circumflex           &
+          W.UC_E_Diaeresis            &
+          W.UC_I_Grave                &
+          W.UC_I_Acute                &
+          W.UC_I_Circumflex           &
+          W.UC_I_Diaeresis            &
+          W.UC_Icelandic_Eth          &
+          W.UC_N_Tilde                &
+          W.UC_O_Grave                &
+          W.UC_O_Acute                &
+          W.UC_O_Circumflex           &
+          W.UC_O_Tilde                &
+          W.UC_O_Diaeresis            &
+          W.UC_O_Oblique_Stroke       &
+          W.UC_U_Grave                &
+          W.UC_U_Acute                &
+          W.UC_U_Circumflex           &
+          W.UC_U_Diaeresis            &
+          W.UC_Y_Acute                &
+          W.UC_Icelandic_Thorn,
+ 
+       Rangev =>
+         "abcdefghijklmnopqrstuvwxyz" &
+          W.LC_A_Grave                &
+          W.LC_A_Acute                &
+          W.LC_A_Circumflex           &
+          W.LC_A_Tilde                &
+          W.LC_A_Diaeresis            &
+          W.LC_A_Ring                 &
+          W.LC_AE_Diphthong           &
+          W.LC_C_Cedilla              &
+          W.LC_E_Grave                &
+          W.LC_E_Acute                &
+          W.LC_E_Circumflex           &
+          W.LC_E_Diaeresis            &
+          W.LC_I_Grave                &
+          W.LC_I_Acute                &
+          W.LC_I_Circumflex           &
+          W.LC_I_Diaeresis            &
+          W.LC_Icelandic_Eth          &
+          W.LC_N_Tilde                &
+          W.LC_O_Grave                &
+          W.LC_O_Acute                &
+          W.LC_O_Circumflex           &
+          W.LC_O_Tilde                &
+          W.LC_O_Diaeresis            &
+          W.LC_O_Oblique_Stroke       &
+          W.LC_U_Grave                &
+          W.LC_U_Acute                &
+          W.LC_U_Circumflex           &
+          W.LC_U_Diaeresis            &
+          W.LC_Y_Acute                &
+          W.LC_Icelandic_Thorn);
+ 
+    Lower_Case_Map : constant Wide_Wide_Character_Mapping :=
+      (AF.Controlled with
+       Map => Lower_Case_Mapping'Unrestricted_Access);
+ 
+    Upper_Case_Mapping : aliased constant Wide_Wide_Character_Mapping_Values :=
+      (Length => 56,
+ 
+       Domain =>
+         "abcdefghijklmnopqrstuvwxyz" &
+          W.LC_A_Grave                &
+          W.LC_A_Acute                &
+          W.LC_A_Circumflex           &
+          W.LC_A_Tilde                &
+          W.LC_A_Diaeresis            &
+          W.LC_A_Ring                 &
+          W.LC_AE_Diphthong           &
+          W.LC_C_Cedilla              &
+          W.LC_E_Grave                &
+          W.LC_E_Acute                &
+          W.LC_E_Circumflex           &
+          W.LC_E_Diaeresis            &
+          W.LC_I_Grave                &
+          W.LC_I_Acute                &
+          W.LC_I_Circumflex           &
+          W.LC_I_Diaeresis            &
+          W.LC_Icelandic_Eth          &
+          W.LC_N_Tilde                &
+          W.LC_O_Grave                &
+          W.LC_O_Acute                &
+          W.LC_O_Circumflex           &
+          W.LC_O_Tilde                &
+          W.LC_O_Diaeresis            &
+          W.LC_O_Oblique_Stroke       &
+          W.LC_U_Grave                &
+          W.LC_U_Acute                &
+          W.LC_U_Circumflex           &
+          W.LC_U_Diaeresis            &
+          W.LC_Y_Acute                &
+          W.LC_Icelandic_Thorn,
+ 
+       Rangev =>
+         "ABCDEFGHIJKLMNOPQRSTUVWXYZ" &
+          W.UC_A_Grave                &
+          W.UC_A_Acute                &
+          W.UC_A_Circumflex           &
+          W.UC_A_Tilde                &
+          W.UC_A_Diaeresis            &
+          W.UC_A_Ring                 &
+          W.UC_AE_Diphthong           &
+          W.UC_C_Cedilla              &
+          W.UC_E_Grave                &
+          W.UC_E_Acute                &
+          W.UC_E_Circumflex           &
+          W.UC_E_Diaeresis            &
+          W.UC_I_Grave                &
+          W.UC_I_Acute                &
+          W.UC_I_Circumflex           &
+          W.UC_I_Diaeresis            &
+          W.UC_Icelandic_Eth          &
+          W.UC_N_Tilde                &
+          W.UC_O_Grave                &
+          W.UC_O_Acute                &
+          W.UC_O_Circumflex           &
+          W.UC_O_Tilde                &
+          W.UC_O_Diaeresis            &
+          W.UC_O_Oblique_Stroke       &
+          W.UC_U_Grave                &
+          W.UC_U_Acute                &
+          W.UC_U_Circumflex           &
+          W.UC_U_Diaeresis            &
+          W.UC_Y_Acute                &
+          W.UC_Icelandic_Thorn);
+ 
+    Upper_Case_Map : constant Wide_Wide_Character_Mapping :=
+      (AF.Controlled with
+       Upper_Case_Mapping'Unrestricted_Access);
+ 
+    Basic_Mapping : aliased constant Wide_Wide_Character_Mapping_Values :=
+      (Length => 55,
+ 
+       Domain =>
+         W.UC_A_Grave          &
+         W.UC_A_Acute          &
+         W.UC_A_Circumflex     &
+         W.UC_A_Tilde          &
+         W.UC_A_Diaeresis      &
+         W.UC_A_Ring           &
+         W.UC_C_Cedilla        &
+         W.UC_E_Grave          &
+         W.UC_E_Acute          &
+         W.UC_E_Circumflex     &
+         W.UC_E_Diaeresis      &
+         W.UC_I_Grave          &
+         W.UC_I_Acute          &
+         W.UC_I_Circumflex     &
+         W.UC_I_Diaeresis      &
+         W.UC_N_Tilde          &
+         W.UC_O_Grave          &
+         W.UC_O_Acute          &
+         W.UC_O_Circumflex     &
+         W.UC_O_Tilde          &
+         W.UC_O_Diaeresis      &
+         W.UC_O_Oblique_Stroke &
+         W.UC_U_Grave          &
+         W.UC_U_Acute          &
+         W.UC_U_Circumflex     &
+         W.UC_U_Diaeresis      &
+         W.UC_Y_Acute          &
+         W.LC_A_Grave          &
+         W.LC_A_Acute          &
+         W.LC_A_Circumflex     &
+         W.LC_A_Tilde          &
+         W.LC_A_Diaeresis      &
+         W.LC_A_Ring           &
+         W.LC_C_Cedilla        &
+         W.LC_E_Grave          &
+         W.LC_E_Acute          &
+         W.LC_E_Circumflex     &
+         W.LC_E_Diaeresis      &
+         W.LC_I_Grave          &
+         W.LC_I_Acute          &
+         W.LC_I_Circumflex     &
+         W.LC_I_Diaeresis      &
+         W.LC_N_Tilde          &
+         W.LC_O_Grave          &
+         W.LC_O_Acute          &
+         W.LC_O_Circumflex     &
+         W.LC_O_Tilde          &
+         W.LC_O_Diaeresis      &
+         W.LC_O_Oblique_Stroke &
+         W.LC_U_Grave          &
+         W.LC_U_Acute          &
+         W.LC_U_Circumflex     &
+         W.LC_U_Diaeresis      &
+         W.LC_Y_Acute          &
+         W.LC_Y_Diaeresis,
+ 
+       Rangev =>
+         'A'        &  -- UC_A_Grave
+         'A'        &  -- UC_A_Acute
+         'A'        &  -- UC_A_Circumflex
+         'A'        &  -- UC_A_Tilde
+         'A'        &  -- UC_A_Diaeresis
+         'A'        &  -- UC_A_Ring
+         'C'        &  -- UC_C_Cedilla
+         'E'        &  -- UC_E_Grave
+         'E'        &  -- UC_E_Acute
+         'E'        &  -- UC_E_Circumflex
+         'E'        &  -- UC_E_Diaeresis
+         'I'        &  -- UC_I_Grave
+         'I'        &  -- UC_I_Acute
+         'I'        &  -- UC_I_Circumflex
+         'I'        &  -- UC_I_Diaeresis
+         'N'        &  -- UC_N_Tilde
+         'O'        &  -- UC_O_Grave
+         'O'        &  -- UC_O_Acute
+         'O'        &  -- UC_O_Circumflex
+         'O'        &  -- UC_O_Tilde
+         'O'        &  -- UC_O_Diaeresis
+         'O'        &  -- UC_O_Oblique_Stroke
+         'U'        &  -- UC_U_Grave
+         'U'        &  -- UC_U_Acute
+         'U'        &  -- UC_U_Circumflex
+         'U'        &  -- UC_U_Diaeresis
+         'Y'        &  -- UC_Y_Acute
+         'a'        &  -- LC_A_Grave
+         'a'        &  -- LC_A_Acute
+         'a'        &  -- LC_A_Circumflex
+         'a'        &  -- LC_A_Tilde
+         'a'        &  -- LC_A_Diaeresis
+         'a'        &  -- LC_A_Ring
+         'c'        &  -- LC_C_Cedilla
+         'e'        &  -- LC_E_Grave
+         'e'        &  -- LC_E_Acute
+         'e'        &  -- LC_E_Circumflex
+         'e'        &  -- LC_E_Diaeresis
+         'i'        &  -- LC_I_Grave
+         'i'        &  -- LC_I_Acute
+         'i'        &  -- LC_I_Circumflex
+         'i'        &  -- LC_I_Diaeresis
+         'n'        &  -- LC_N_Tilde
+         'o'        &  -- LC_O_Grave
+         'o'        &  -- LC_O_Acute
+         'o'        &  -- LC_O_Circumflex
+         'o'        &  -- LC_O_Tilde
+         'o'        &  -- LC_O_Diaeresis
+         'o'        &  -- LC_O_Oblique_Stroke
+         'u'        &  -- LC_U_Grave
+         'u'        &  -- LC_U_Acute
+         'u'        &  -- LC_U_Circumflex
+         'u'        &  -- LC_U_Diaeresis
+         'y'        &  -- LC_Y_Acute
+         'y');         -- LC_Y_Diaeresis
+ 
+    Basic_Map : constant Wide_Wide_Character_Mapping :=
+      (AF.Controlled with
+       Basic_Mapping'Unrestricted_Access);
+ 
+ end Ada.Strings.Wide_Wide_Maps.Wide_Wide_Constants;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-szunau.adb gcc-4.0.0/gcc/ada/a-szunau.adb
*** gcc-3.4.3/gcc/ada/a-szunau.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-szunau.adb	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,105 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                          GNAT RUNTIME COMPONENTS                         --
+ --                                                                          --
+ --   A D A . S T R I N G S . W I D E _ W I D E _ U N B O U N D E D . A U X  --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package body Ada.Strings.Wide_Wide_Unbounded.Aux is
+ 
+    --------------------------
+    -- Get_Wide_Wide_String --
+    --------------------------
+ 
+    function Get_Wide_Wide_String
+      (U : Unbounded_Wide_Wide_String) return Wide_Wide_String_Access
+    is
+    begin
+       if U.Last = U.Reference'Length then
+          return U.Reference;
+ 
+       else
+          declare
+             type Unbounded_Wide_Wide_String_Access is
+               access all Unbounded_Wide_Wide_String;
+ 
+             U_Ptr : constant Unbounded_Wide_Wide_String_Access :=
+                       U'Unrestricted_Access;
+             --  Unbounded_Wide_Wide_String is a controlled type which is always
+             --  passed by copy it is always safe to take the pointer to such
+             --  object here. This pointer is used to set the U.Reference value
+             --  which would not be possible otherwise as U is read-only.
+ 
+             Old : Wide_Wide_String_Access := U.Reference;
+ 
+          begin
+             U_Ptr.Reference :=
+               new Wide_Wide_String'(U.Reference (1 .. U.Last));
+             Free (Old);
+             return U.Reference;
+          end;
+       end if;
+    end Get_Wide_Wide_String;
+ 
+    --------------------------
+    -- Set_Wide_Wide_String --
+    --------------------------
+ 
+    procedure Set_Wide_Wide_String
+      (UP : in out Unbounded_Wide_Wide_String;
+       S  : Wide_Wide_String)
+    is
+    begin
+       if UP.Last = S'Length then
+          UP.Reference.all := S;
+ 
+       else
+          declare
+             subtype String_1 is Wide_Wide_String (1 .. S'Length);
+             Tmp : Wide_Wide_String_Access;
+          begin
+             Tmp := new Wide_Wide_String'(String_1 (S));
+             Finalize (UP);
+             UP.Reference := Tmp;
+             UP.Last := UP.Reference'Length;
+          end;
+       end if;
+    end Set_Wide_Wide_String;
+ 
+    procedure Set_Wide_Wide_String
+      (UP : in out Unbounded_Wide_Wide_String;
+       S  : Wide_Wide_String_Access)
+    is
+    begin
+       Finalize (UP);
+       UP.Reference := S;
+       UP.Last := UP.Reference'Length;
+    end Set_Wide_Wide_String;
+ 
+ end Ada.Strings.Wide_Wide_Unbounded.Aux;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-szunau.ads gcc-4.0.0/gcc/ada/a-szunau.ads
*** gcc-3.4.3/gcc/ada/a-szunau.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-szunau.ads	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,75 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                          GNAT RUNTIME COMPONENTS                         --
+ --                                                                          --
+ --   A D A . S T R I N G S . W I D E _ W I D E _ U N B O U N D E D . A U X  --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This child package of Ada.Strings.Wide_Wide_Unbounded provides some
+ --  specialized access functions which are intended to allow more efficient
+ --  use of the facilities of Ada.Strings.Wide_Wide_Unbounded, particularly by
+ --  other layered utilities.
+ 
+ package Ada.Strings.Wide_Wide_Unbounded.Aux is
+ pragma Preelaborate (Aux);
+ 
+    function Get_Wide_Wide_String
+      (U : Unbounded_Wide_Wide_String) return Wide_Wide_String_Access;
+    pragma Inline (Get_Wide_Wide_String);
+    --  This function returns the internal string pointer used in the
+    --  representation of an unbounded string. There is no copy involved,
+    --  so the value obtained references the same string as the original
+    --  unbounded string. The characters of this string may not be modified
+    --  via the returned pointer, and are valid only as long as the original
+    --  unbounded string is not modified. Violating either of these two
+    --  rules results in erroneous execution.
+    --
+    --  This function is much more efficient than the use of To_Wide_Wide_String
+    --  since it avoids the need to copy the string. The lower bound of the
+    --  referenced string returned by this call is always one.
+ 
+    procedure Set_Wide_Wide_String
+      (UP : in out Unbounded_Wide_Wide_String;
+       S  : Wide_Wide_String);
+    pragma Inline (Set_Wide_Wide_String);
+    --  This function sets the string contents of the referenced unbounded
+    --  string to the given string value. It is significantly more efficient
+    --  than the use of To_Unbounded_Wide_Wide_String with an assignment, since
+    --  it avoids the necessity of messing with finalization chains. The lower
+    --  bound of the string S is not required to be one.
+ 
+    procedure Set_Wide_Wide_String
+      (UP : in out Unbounded_Wide_Wide_String;
+       S  : Wide_Wide_String_Access);
+    pragma Inline (Set_Wide_Wide_String);
+    --  This version of Set_Wide_Wide_String takes a string access value, rather
+    --  than string. The lower bound of the string value is required to be one,
+    --  and this requirement is not checked.
+ 
+ end Ada.Strings.Wide_Wide_Unbounded.Aux;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-szunha.adb gcc-4.0.0/gcc/ada/a-szunha.adb
*** gcc-3.4.3/gcc/ada/a-szunha.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-szunha.adb	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,58 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --       A D A . S T R I N G S . W I D E _ U N B O U N D E D . H A S H      --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 2004-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- This unit was originally developed by Matthew J Heaney.                  --
+ ------------------------------------------------------------------------------
+ 
+ --  Note: source of this algorithm: GNAT.HTable.Hash (g-htable.adb)
+ 
+ function Ada.Strings.Wide_Wide_Unbounded.Hash
+   (Key : Unbounded_Wide_Wide_String) return Containers.Hash_Type
+ is
+    use Ada.Containers;
+ 
+    function Rotate_Left
+      (Value  : Hash_Type;
+       Amount : Natural) return Hash_Type;
+    pragma Import (Intrinsic, Rotate_Left);
+ 
+    Tmp : Hash_Type;
+ 
+ begin
+    Tmp := 0;
+    for J in 1 .. Key.Last loop
+       Tmp := Rotate_Left (Tmp, 1) +
+         Wide_Wide_Character'Pos (Key.Reference (J));
+    end loop;
+ 
+    return Tmp;
+ end Ada.Strings.Wide_Wide_Unbounded.Hash;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-szunha.ads gcc-4.0.0/gcc/ada/a-szunha.ads
*** gcc-3.4.3/gcc/ada/a-szunha.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-szunha.ads	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,21 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --       A D A . S T R I N G S . W I D E _ U N B O U N D E D . H A S H      --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ -- This specification is adapted from the Ada Reference Manual for use with --
+ -- GNAT.  In accordance with the copyright of that document, you can freely --
+ -- copy and modify this specification,  provided that if you redistribute a --
+ -- modified version,  any changes that you have made are clearly indicated. --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Containers;
+ 
+ function Ada.Strings.Wide_Wide_Unbounded.Hash
+   (Key : Unbounded_Wide_Wide_String) return Containers.Hash_Type;
+ 
+ pragma Preelaborate (Ada.Strings.Wide_Wide_Unbounded.Hash);
diff -Nrcpad gcc-3.4.3/gcc/ada/a-szuzti.adb gcc-4.0.0/gcc/ada/a-szuzti.adb
*** gcc-3.4.3/gcc/ada/a-szuzti.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-szuzti.adb	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,160 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --             ADA.STRINGS.WIDE_WIDE_UNBOUNDED.WIDE_WIDE_TEXT_IO            --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 1997-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Strings.Wide_Wide_Unbounded.Aux;
+ use Ada.Strings.Wide_Wide_Unbounded.Aux;
+ with Ada.Wide_Wide_Text_IO;
+ use Ada.Wide_Wide_Text_IO;
+ 
+ package body Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO is
+ 
+    --------------
+    -- Get_Line --
+    --------------
+ 
+    function Get_Line return Unbounded_Wide_Wide_String is
+       Buffer : Wide_Wide_String (1 .. 1000);
+       Last   : Natural;
+       Str1   : Wide_Wide_String_Access;
+       Str2   : Wide_Wide_String_Access;
+       Result : Unbounded_Wide_Wide_String;
+ 
+    begin
+       Get_Line (Buffer, Last);
+       Str1 := new Wide_Wide_String'(Buffer (1 .. Last));
+       while Last = Buffer'Last loop
+          Get_Line (Buffer, Last);
+          Str2 := new Wide_Wide_String'(Str1.all & Buffer (1 .. Last));
+          Free (Str1);
+          Str1 := Str2;
+       end loop;
+ 
+       Set_Wide_Wide_String (Result, Str1);
+       return Result;
+    end Get_Line;
+ 
+    function Get_Line
+      (File : Ada.Wide_Wide_Text_IO.File_Type)
+       return Unbounded_Wide_Wide_String
+    is
+       Buffer : Wide_Wide_String (1 .. 1000);
+       Last   : Natural;
+       Str1   : Wide_Wide_String_Access;
+       Str2   : Wide_Wide_String_Access;
+       Result : Unbounded_Wide_Wide_String;
+ 
+    begin
+       Get_Line (File, Buffer, Last);
+       Str1 := new Wide_Wide_String'(Buffer (1 .. Last));
+ 
+       while Last = Buffer'Last loop
+          Get_Line (File, Buffer, Last);
+          Str2 := new Wide_Wide_String'(Str1.all & Buffer (1 .. Last));
+          Free (Str1);
+          Str1 := Str2;
+       end loop;
+ 
+       Set_Wide_Wide_String (Result, Str1);
+       return Result;
+    end Get_Line;
+ 
+    procedure Get_Line (Item : out Unbounded_Wide_Wide_String) is
+       Buffer : Wide_Wide_String (1 .. 1000);
+       Last   : Natural;
+       Str1   : Wide_Wide_String_Access;
+       Str2   : Wide_Wide_String_Access;
+ 
+    begin
+       Get_Line (Buffer, Last);
+       Str1 := new Wide_Wide_String'(Buffer (1 .. Last));
+       while Last = Buffer'Last loop
+          Get_Line (Buffer, Last);
+          Str2 := new Wide_Wide_String'(Str1.all & Buffer (1 .. Last));
+          Free (Str1);
+          Str1 := Str2;
+       end loop;
+ 
+       Set_Wide_Wide_String (Item, Str1);
+    end Get_Line;
+ 
+    procedure Get_Line
+      (File : Ada.Wide_Wide_Text_IO.File_Type;
+       Item : out Unbounded_Wide_Wide_String)
+    is
+       Buffer : Wide_Wide_String (1 .. 1000);
+       Last   : Natural;
+       Str1   : Wide_Wide_String_Access;
+       Str2   : Wide_Wide_String_Access;
+ 
+    begin
+       Get_Line (File, Buffer, Last);
+       Str1 := new Wide_Wide_String'(Buffer (1 .. Last));
+       while Last = Buffer'Last loop
+          Get_Line (Buffer, Last);
+          Str2 := new Wide_Wide_String'(Str1.all & Buffer (1 .. Last));
+          Free (Str1);
+          Str1 := Str2;
+       end loop;
+ 
+       Set_Wide_Wide_String (Item, Str1);
+    end Get_Line;
+ 
+    ---------
+    -- Put --
+    ---------
+ 
+    procedure Put (U : Unbounded_Wide_Wide_String) is
+    begin
+       Put (Get_Wide_Wide_String (U).all);
+    end Put;
+ 
+    procedure Put (File : File_Type; U : Unbounded_Wide_Wide_String) is
+    begin
+       Put (File, Get_Wide_Wide_String (U).all);
+    end Put;
+ 
+    --------------
+    -- Put_Line --
+    --------------
+ 
+    procedure Put_Line (U : Unbounded_Wide_Wide_String) is
+    begin
+       Put_Line (Get_Wide_Wide_String (U).all);
+    end Put_Line;
+ 
+    procedure Put_Line (File : File_Type; U : Unbounded_Wide_Wide_String) is
+    begin
+       Put_Line (File, Get_Wide_Wide_String (U).all);
+    end Put_Line;
+ 
+ end Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-szuzti.ads gcc-4.0.0/gcc/ada/a-szuzti.ads
*** gcc-3.4.3/gcc/ada/a-szuzti.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-szuzti.ads	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,73 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --             ADA.STRINGS.WIDE_WIDE_UNBOUNDED.WIDE_WIDE_TEXT_IO            --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 1997-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This child package of Ada.Strings.Wide_Wide_Unbounded provides specialized
+ --  Wide_Wide_Text_IO routines that work directly with unbounded wide wide
+ --  strings, avoiding the inefficiencies of access via the standard interface,
+ --  and also taking direct advantage of the variable length semantics of these
+ --  strings.
+ 
+ with Ada.Wide_Wide_Text_IO;
+ 
+ package Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO is
+ 
+    function Get_Line
+      return Unbounded_Wide_Wide_String;
+    function Get_Line
+      (File : Ada.Wide_Wide_Text_IO.File_Type)
+       return Unbounded_Wide_Wide_String;
+    --  Reads up to the end of the current line, returning the result
+    --  as an unbounded string of appropriate length. If no File parameter
+    --  is present, input is from Current_Input.
+ 
+    procedure Get_Line
+      (File : Ada.Wide_Wide_Text_IO.File_Type;
+       Item : out Unbounded_Wide_Wide_String);
+    procedure Get_Line (Item : out Unbounded_Wide_Wide_String);
+    --  Similar to the above, but in procedure form with an out parameter
+ 
+    procedure Put
+      (U : Unbounded_Wide_Wide_String);
+    procedure Put
+      (File : Ada.Wide_Wide_Text_IO.File_Type;
+       U    : Unbounded_Wide_Wide_String);
+    procedure Put_Line
+      (U    : Unbounded_Wide_Wide_String);
+    procedure Put_Line
+      (File : Ada.Wide_Wide_Text_IO.File_Type;
+       U    : Unbounded_Wide_Wide_String);
+    --  These are equivalent to the standard Wide_Wide_Text_IO routines passed
+    --  the value To_Wide_Wide_String (U), but operate more efficiently,
+    --  because the extra copy of the argument is avoided.
+ 
+ end Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-tags.adb gcc-4.0.0/gcc/ada/a-tags.adb
*** gcc-3.4.3/gcc/ada/a-tags.adb	Tue Oct 21 13:41:54 2003
--- gcc-4.0.0/gcc/ada/a-tags.adb	Thu Feb 10 13:50:43 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 32,76 ****
  ------------------------------------------------------------------------------
  
  with Ada.Exceptions;
- 
  with System.HTable;
  
- with Unchecked_Conversion;
- 
  pragma Elaborate_All (System.HTable);
  
  package body Ada.Tags is
  
  --  Structure of the GNAT Dispatch Table
  
! --   +----------------------+
! --   |      TSD pointer  ---|-----> Type Specific Data
! --   +----------------------+       +-------------------+
! --   | table of             |       | inheritance depth |
! --   :   primitive ops      :       +-------------------+
! --   |     pointers         |       |   expanded name   |
! --   +----------------------+       +-------------------+
! --                                  |   external tag    |
! --                                  +-------------------+
! --                                  |   Hash table link |
! --                                  +-------------------+
! --                                  | Remotely Callable |
! --                                  +-------------------+
! --                                  | Rec Ctrler offset |
! --                                  +-------------------+
! --                                  | table of          |
! --                                  :   ancestor        :
! --                                  |      tags         |
! --                                  +-------------------+
  
     subtype Cstring is String (Positive);
     type Cstring_Ptr is access all Cstring;
     type Tag_Table is array (Natural range <>) of Tag;
     pragma Suppress_Initialization (Tag_Table);
  
     type Wide_Boolean is new Boolean;
!    --  This name should probably be changed sometime ??? and indeed
!    --  probably this field could simply be of type Standard.Boolean.
  
     type Type_Specific_Data is record
        Idepth             : Natural;
--- 32,79 ----
  ------------------------------------------------------------------------------
  
  with Ada.Exceptions;
  with System.HTable;
  
  pragma Elaborate_All (System.HTable);
  
  package body Ada.Tags is
  
  --  Structure of the GNAT Dispatch Table
  
! --           +-----------------------+
! --           |     Offset_To_Top     |
! --           +-----------------------+
! --           | Typeinfo_Ptr/TSD_Ptr  |----> Type Specific Data
! --  Tag ---> +-----------------------+      +-------------------+
! --           |        table of       |      | inheritance depth |
! --           :     primitive ops     :      +-------------------+
! --           |        pointers       |      |   expanded name   |
! --           +-----------------------+      +-------------------+
! --                                          |   external tag    |
! --                                          +-------------------+
! --                                          |   Hash table link |
! --                                          +-------------------+
! --                                          | Remotely Callable |
! --                                          +-------------------+
! --                                          | Rec Ctrler offset |
! --                                          +-------------------+
! --                                          | table of          |
! --                                          :   ancestor        :
! --                                          |      tags         |
! --                                          +-------------------+
  
     subtype Cstring is String (Positive);
     type Cstring_Ptr is access all Cstring;
+ 
     type Tag_Table is array (Natural range <>) of Tag;
     pragma Suppress_Initialization (Tag_Table);
+    pragma Suppress (Index_Check, On => Tag_Table);
+    --  We suppress index checks because the declared size in the record below
+    --  is a dummy size of one (see below).
  
     type Wide_Boolean is new Boolean;
!    --  This name should probably be changed sometime ??? and indeed probably
!    --  this field could simply be of type Standard.Boolean.
  
     type Type_Specific_Data is record
        Idepth             : Natural;
*************** package body Ada.Tags is
*** 79,119 ****
        HT_Link            : Tag;
        Remotely_Callable  : Wide_Boolean;
        RC_Offset          : SSE.Storage_Offset;
!       Ancestor_Tags      : Tag_Table (Natural);
     end record;
  
     type Dispatch_Table is record
!       TSD       : Type_Specific_Data_Ptr;
!       Prims_Ptr : Address_Array (Positive);
     end record;
  
!    -------------------------------------------
!    -- Unchecked Conversions for Tag and TSD --
!    -------------------------------------------
! 
!    function To_Type_Specific_Data_Ptr is
!      new Unchecked_Conversion (S.Address, Type_Specific_Data_Ptr);
  
!    function To_Address is
!      new Unchecked_Conversion (Type_Specific_Data_Ptr, S.Address);
  
     ---------------------------------------------
     -- Unchecked Conversions for String Fields --
     ---------------------------------------------
  
     function To_Cstring_Ptr is
!      new Unchecked_Conversion (S.Address, Cstring_Ptr);
  
     function To_Address is
!      new Unchecked_Conversion (Cstring_Ptr, S.Address);
  
     -----------------------
     -- Local Subprograms --
     -----------------------
  
     function Length (Str : Cstring_Ptr) return Natural;
!    --  Length of string represented by the given pointer (treating the
!    --  string as a C-style string, which is Nul terminated).
  
     -------------------------
     -- External_Tag_HTable --
--- 82,170 ----
        HT_Link            : Tag;
        Remotely_Callable  : Wide_Boolean;
        RC_Offset          : SSE.Storage_Offset;
!       Ancestor_Tags      : Tag_Table (0 .. 1);
     end record;
+    --  The size of the Ancestor_Tags array actually depends on the tagged type
+    --  to which it applies. We are using the same mechanism as for the
+    --  Prims_Ptr array in the Dispatch_Table record. See comments below for
+    --  more details.
  
     type Dispatch_Table is record
!       --  Offset_To_Top : Integer := 0;
!       --  Typeinfo_Ptr  : System.Address; -- Currently TSD is also here???
!       Prims_Ptr    : Address_Array (Positive);
     end record;
  
!    --  Note on the commented out fields of the Dispatch_Table
!    --  ------------------------------------------------------
!    --  According to the C++ ABI the components Offset_To_Top and Typeinfo_Ptr
!    --  are stored just "before" the dispatch table (that is, the Prims_Ptr
!    --  table), and they are referenced with negative offsets referring to the
!    --  base of the dispatch table. The _Tag (or the VTable_Ptr in C++ termi-
!    --  nology) must point to the base of the virtual table, just after these
!    --  components, to point to the Prims_Ptr table. For this purpose the
!    --  expander generates a Prims_Ptr table that has enough space for these
!    --  additional components, and generates code that displaces the _Tag to
!    --  point after these components.
!    --  -----------------------------------------------------------------------
  
!    --  The size of the Prims_Ptr array actually depends on the tagged type to
!    --  which it applies. For each tagged type, the expander computes the
!    --  actual array size, allocates the Dispatch_Table record accordingly, and
!    --  generates code that displaces the base of the record after the
!    --  Typeinfo_Ptr component. For this reason the first two components have
!    --  been commented in the previous declaration. The access to these
!    --  components is done by means of local functions.
!    --
!    --  To avoid the use of discriminants to define the actual size of the
!    --  dispatch table, we used to declare the tag as a pointer to a record
!    --  that contains an arbitrary array of addresses, using Positive as its
!    --  index. This ensures that there are never range checks when accessing
!    --  the dispatch table, but it prevents GDB from displaying tagged types
!    --  properly. A better approach is to declare this record type as holding a
!    --  small number of addresses, and to explicitly suppress checks on it.
!    --
!    --  Note that in both cases, this type is never allocated, and serves only
!    --  to declare the corresponding access type.
  
     ---------------------------------------------
     -- Unchecked Conversions for String Fields --
     ---------------------------------------------
  
     function To_Cstring_Ptr is
!      new Unchecked_Conversion (System.Address, Cstring_Ptr);
  
     function To_Address is
!      new Unchecked_Conversion (Cstring_Ptr, System.Address);
! 
!    -----------------------------------------------------------
!    -- Unchecked Conversions for the component offset_to_top --
!    -----------------------------------------------------------
! 
!    type Int_Ptr is access Integer;
! 
!    function To_Int_Ptr is
!       new Unchecked_Conversion (System.Address, Int_Ptr);
  
     -----------------------
     -- Local Subprograms --
     -----------------------
  
     function Length (Str : Cstring_Ptr) return Natural;
!    --  Length of string represented by the given pointer (treating the string
!    --  as a C-style string, which is Nul terminated).
! 
!    function Offset_To_Top (T : Tag) return Integer;
!    --  Returns the current value of the offset_to_top component available in
!    --  the prologue of the dispatch table.
! 
!    function Typeinfo_Ptr (T : Tag) return System.Address;
!    --  Returns the current value of the typeinfo_ptr component available in
!    --  the prologue of the dispatch table.
! 
!    pragma Unreferenced (Offset_To_Top);
!    pragma Unreferenced (Typeinfo_Ptr);
!    --  These functions will be used for full compatibility with the C++ ABI
  
     -------------------------
     -- External_Tag_HTable --
*************** package body Ada.Tags is
*** 121,135 ****
  
     type HTable_Headers is range 1 .. 64;
  
!    --  The following internal package defines the routines used for
!    --  the instantiation of a new System.HTable.Static_HTable (see
!    --  below). See spec in g-htable.ads for details of usage.
  
     package HTable_Subprograms is
        procedure Set_HT_Link (T : Tag; Next : Tag);
        function  Get_HT_Link (T : Tag) return Tag;
!       function Hash (F : S.Address) return HTable_Headers;
!       function Equal (A, B : S.Address) return Boolean;
     end HTable_Subprograms;
  
     package External_Tag_HTable is new System.HTable.Static_HTable (
--- 172,186 ----
  
     type HTable_Headers is range 1 .. 64;
  
!    --  The following internal package defines the routines used for the
!    --  instantiation of a new System.HTable.Static_HTable (see below). See
!    --  spec in g-htable.ads for details of usage.
  
     package HTable_Subprograms is
        procedure Set_HT_Link (T : Tag; Next : Tag);
        function  Get_HT_Link (T : Tag) return Tag;
!       function Hash (F : System.Address) return HTable_Headers;
!       function Equal (A, B : System.Address) return Boolean;
     end HTable_Subprograms;
  
     package External_Tag_HTable is new System.HTable.Static_HTable (
*************** package body Ada.Tags is
*** 139,145 ****
       Null_Ptr   => null,
       Set_Next   => HTable_Subprograms.Set_HT_Link,
       Next       => HTable_Subprograms.Get_HT_Link,
!      Key        => S.Address,
       Get_Key    => Get_External_Tag,
       Hash       => HTable_Subprograms.Hash,
       Equal      => HTable_Subprograms.Equal);
--- 190,196 ----
       Null_Ptr   => null,
       Set_Next   => HTable_Subprograms.Set_HT_Link,
       Next       => HTable_Subprograms.Get_HT_Link,
!      Key        => System.Address,
       Get_Key    => Get_External_Tag,
       Hash       => HTable_Subprograms.Hash,
       Equal      => HTable_Subprograms.Equal);
*************** package body Ada.Tags is
*** 156,162 ****
     -- Equal --
     -----------
  
!       function Equal (A, B : S.Address) return Boolean is
           Str1 : constant Cstring_Ptr := To_Cstring_Ptr (A);
           Str2 : constant Cstring_Ptr := To_Cstring_Ptr (B);
           J    : Integer := 1;
--- 207,213 ----
     -- Equal --
     -----------
  
!       function Equal (A, B : System.Address) return Boolean is
           Str1 : constant Cstring_Ptr := To_Cstring_Ptr (A);
           Str2 : constant Cstring_Ptr := To_Cstring_Ptr (B);
           J    : Integer := 1;
*************** package body Ada.Tags is
*** 181,198 ****
  
        function Get_HT_Link (T : Tag) return Tag is
        begin
!          return T.TSD.HT_Link;
        end Get_HT_Link;
  
        ----------
        -- Hash --
        ----------
  
!       function Hash (F : S.Address) return HTable_Headers is
           function H is new System.HTable.Hash (HTable_Headers);
           Str : constant Cstring_Ptr    := To_Cstring_Ptr (F);
           Res : constant HTable_Headers := H (Str (1 .. Length (Str)));
- 
        begin
           return Res;
        end Hash;
--- 232,248 ----
  
        function Get_HT_Link (T : Tag) return Tag is
        begin
!          return TSD (T).HT_Link;
        end Get_HT_Link;
  
        ----------
        -- Hash --
        ----------
  
!       function Hash (F : System.Address) return HTable_Headers is
           function H is new System.HTable.Hash (HTable_Headers);
           Str : constant Cstring_Ptr    := To_Cstring_Ptr (F);
           Res : constant HTable_Headers := H (Str (1 .. Length (Str)));
        begin
           return Res;
        end Hash;
*************** package body Ada.Tags is
*** 203,216 ****
  
        procedure Set_HT_Link (T : Tag; Next : Tag) is
        begin
!          T.TSD.HT_Link := Next;
        end Set_HT_Link;
  
     end HTable_Subprograms;
  
!    --------------------
!    --  CW_Membership --
!    --------------------
  
     --  Canonical implementation of Classwide Membership corresponding to:
  
--- 253,266 ----
  
        procedure Set_HT_Link (T : Tag; Next : Tag) is
        begin
!          TSD (T).HT_Link := Next;
        end Set_HT_Link;
  
     end HTable_Subprograms;
  
!    -------------------
!    -- CW_Membership --
!    -------------------
  
     --  Canonical implementation of Classwide Membership corresponding to:
  
*************** package body Ada.Tags is
*** 228,237 ****
     --     = Typ'tag
  
     function CW_Membership (Obj_Tag : Tag; Typ_Tag : Tag) return Boolean is
!       Pos : constant Integer := Obj_Tag.TSD.Idepth - Typ_Tag.TSD.Idepth;
! 
     begin
!       return Pos >= 0 and then Obj_Tag.TSD.Ancestor_Tags (Pos) = Typ_Tag;
     end CW_Membership;
  
     -------------------
--- 278,286 ----
     --     = Typ'tag
  
     function CW_Membership (Obj_Tag : Tag; Typ_Tag : Tag) return Boolean is
!       Pos : constant Integer := TSD (Obj_Tag).Idepth - TSD (Typ_Tag).Idepth;
     begin
!       return Pos >= 0 and then TSD (Obj_Tag).Ancestor_Tags (Pos) = Typ_Tag;
     end CW_Membership;
  
     -------------------
*************** package body Ada.Tags is
*** 239,246 ****
     -------------------
  
     function Expanded_Name (T : Tag) return String is
!       Result : constant Cstring_Ptr := T.TSD.Expanded_Name;
! 
     begin
        return Result (1 .. Length (Result));
     end Expanded_Name;
--- 288,294 ----
     -------------------
  
     function Expanded_Name (T : Tag) return String is
!       Result : constant Cstring_Ptr := TSD (T).Expanded_Name;
     begin
        return Result (1 .. Length (Result));
     end Expanded_Name;
*************** package body Ada.Tags is
*** 250,257 ****
     ------------------
  
     function External_Tag (T : Tag) return String is
!       Result : constant Cstring_Ptr := T.TSD.External_Tag;
! 
     begin
        return Result (1 .. Length (Result));
     end External_Tag;
--- 298,304 ----
     ------------------
  
     function External_Tag (T : Tag) return String is
!       Result : constant Cstring_Ptr := TSD (T).External_Tag;
     begin
        return Result (1 .. Length (Result));
     end External_Tag;
*************** package body Ada.Tags is
*** 260,277 ****
     -- Get_Expanded_Name --
     -----------------------
  
!    function Get_Expanded_Name (T : Tag) return S.Address is
     begin
!       return To_Address (T.TSD.Expanded_Name);
     end Get_Expanded_Name;
  
     ----------------------
     -- Get_External_Tag --
     ----------------------
  
!    function Get_External_Tag (T : Tag) return S.Address is
     begin
!       return To_Address (T.TSD.External_Tag);
     end Get_External_Tag;
  
     ---------------------------
--- 307,324 ----
     -- Get_Expanded_Name --
     -----------------------
  
!    function Get_Expanded_Name (T : Tag) return System.Address is
     begin
!       return To_Address (TSD (T).Expanded_Name);
     end Get_Expanded_Name;
  
     ----------------------
     -- Get_External_Tag --
     ----------------------
  
!    function Get_External_Tag (T : Tag) return System.Address is
     begin
!       return To_Address (TSD (T).External_Tag);
     end Get_External_Tag;
  
     ---------------------------
*************** package body Ada.Tags is
*** 280,286 ****
  
     function Get_Inheritance_Depth (T : Tag) return Natural is
     begin
!       return T.TSD.Idepth;
     end Get_Inheritance_Depth;
  
     -------------------------
--- 327,333 ----
  
     function Get_Inheritance_Depth (T : Tag) return Natural is
     begin
!       return TSD (T).Idepth;
     end Get_Inheritance_Depth;
  
     -------------------------
*************** package body Ada.Tags is
*** 289,296 ****
  
     function Get_Prim_Op_Address
       (T        : Tag;
!       Position : Positive)
!       return     S.Address
     is
     begin
        return T.Prims_Ptr (Position);
--- 336,342 ----
  
     function Get_Prim_Op_Address
       (T        : Tag;
!       Position : Positive) return System.Address
     is
     begin
        return T.Prims_Ptr (Position);
*************** package body Ada.Tags is
*** 302,308 ****
  
     function Get_RC_Offset (T : Tag) return SSE.Storage_Offset is
     begin
!       return T.TSD.RC_Offset;
     end Get_RC_Offset;
  
     ---------------------------
--- 348,354 ----
  
     function Get_RC_Offset (T : Tag) return SSE.Storage_Offset is
     begin
!       return TSD (T).RC_Offset;
     end Get_RC_Offset;
  
     ---------------------------
*************** package body Ada.Tags is
*** 311,326 ****
  
     function Get_Remotely_Callable (T : Tag) return Boolean is
     begin
!       return T.TSD.Remotely_Callable = True;
     end Get_Remotely_Callable;
  
     -------------
     -- Get_TSD --
     -------------
  
!    function Get_TSD  (T : Tag) return S.Address is
     begin
!       return To_Address (T.TSD);
     end Get_TSD;
  
     ----------------
--- 357,375 ----
  
     function Get_Remotely_Callable (T : Tag) return Boolean is
     begin
!       return TSD (T).Remotely_Callable = True;
     end Get_Remotely_Callable;
  
     -------------
     -- Get_TSD --
     -------------
  
!    function Get_TSD  (T : Tag) return System.Address is
!       use type System.Storage_Elements.Storage_Offset;
!       TSD_Ptr : constant Addr_Ptr :=
!                   To_Addr_Ptr (To_Address (T) - DT_Typeinfo_Ptr_Size);
     begin
!       return TSD_Ptr.all;
     end Get_TSD;
  
     ----------------
*************** package body Ada.Tags is
*** 343,363 ****
     -- Inherit_TSD --
     -----------------
  
!    procedure Inherit_TSD (Old_TSD : S.Address; New_Tag : Tag) is
!       TSD     : constant Type_Specific_Data_Ptr :=
!                   To_Type_Specific_Data_Ptr (Old_TSD);
!       New_TSD : Type_Specific_Data renames New_Tag.TSD.all;
  
     begin
!       if TSD /= null then
!          New_TSD.Idepth := TSD.Idepth + 1;
!          New_TSD.Ancestor_Tags (1 .. New_TSD.Idepth)
!                             := TSD.Ancestor_Tags (0 .. TSD.Idepth);
        else
!          New_TSD.Idepth := 0;
        end if;
  
!       New_TSD.Ancestor_Tags (0) := New_Tag;
     end Inherit_TSD;
  
     ------------------
--- 392,413 ----
     -- Inherit_TSD --
     -----------------
  
!    procedure Inherit_TSD (Old_TSD : System.Address; New_Tag : Tag) is
!       Old_TSD_Ptr  : constant Type_Specific_Data_Ptr :=
!                        To_Type_Specific_Data_Ptr (Old_TSD);
!       New_TSD_Ptr  : constant Type_Specific_Data_Ptr :=
!                        TSD (New_Tag);
  
     begin
!       if Old_TSD_Ptr /= null then
!          New_TSD_Ptr.Idepth := Old_TSD_Ptr.Idepth + 1;
!          New_TSD_Ptr.Ancestor_Tags (1 .. New_TSD_Ptr.Idepth) :=
!            Old_TSD_Ptr.Ancestor_Tags (0 .. Old_TSD_Ptr.Idepth);
        else
!          New_TSD_Ptr.Idepth := 0;
        end if;
  
!       New_TSD_Ptr.Ancestor_Tags (0) := New_Tag;
     end Inherit_TSD;
  
     ------------------
*************** package body Ada.Tags is
*** 380,386 ****
           declare
              Msg1 : constant String := "unknown tagged type: ";
              Msg2 : String (1 .. Msg1'Length + External'Length);
- 
           begin
              Msg2 (1 .. Msg1'Length) := Msg1;
              Msg2 (Msg1'Length + 1 .. Msg1'Length + External'Length) :=
--- 430,435 ----
*************** package body Ada.Tags is
*** 411,426 ****
     -- Parent_Size --
     -----------------
  
!    type Acc_Size is access function (A : S.Address) return Long_Long_Integer;
!    function To_Acc_Size is new Unchecked_Conversion (S.Address, Acc_Size);
     --  The profile of the implicitly defined _size primitive
  
     function Parent_Size
!      (Obj : S.Address;
!       T   : Tag)
!       return SSE.Storage_Count is
! 
!       Parent_Tag : constant Tag := T.TSD.Ancestor_Tags (1);
        --  The tag of the parent type through the dispatch table
  
        F : constant Acc_Size := To_Acc_Size (Parent_Tag.Prims_Ptr (1));
--- 460,476 ----
     -- Parent_Size --
     -----------------
  
!    type Acc_Size
!      is access function (A : System.Address) return Long_Long_Integer;
! 
!    function To_Acc_Size is new Unchecked_Conversion (System.Address, Acc_Size);
     --  The profile of the implicitly defined _size primitive
  
     function Parent_Size
!      (Obj : System.Address;
!       T   : Tag) return SSE.Storage_Count
!    is
!       Parent_Tag : constant Tag := TSD (T).Ancestor_Tags (1);
        --  The tag of the parent type through the dispatch table
  
        F : constant Acc_Size := To_Acc_Size (Parent_Tag.Prims_Ptr (1));
*************** package body Ada.Tags is
*** 439,445 ****
  
     function Parent_Tag (T : Tag) return Tag is
     begin
!       return T.TSD.Ancestor_Tags (1);
     end Parent_Tag;
  
     ------------------
--- 489,495 ----
  
     function Parent_Tag (T : Tag) return Tag is
     begin
!       return TSD (T).Ancestor_Tags (1);
     end Parent_Tag;
  
     ------------------
*************** package body Ada.Tags is
*** 455,472 ****
     -- Set_Expanded_Name --
     -----------------------
  
!    procedure Set_Expanded_Name (T : Tag; Value : S.Address) is
     begin
!       T.TSD.Expanded_Name := To_Cstring_Ptr (Value);
     end Set_Expanded_Name;
  
     ----------------------
     -- Set_External_Tag --
     ----------------------
  
!    procedure Set_External_Tag (T : Tag; Value : S.Address) is
     begin
!       T.TSD.External_Tag := To_Cstring_Ptr (Value);
     end Set_External_Tag;
  
     ---------------------------
--- 505,522 ----
     -- Set_Expanded_Name --
     -----------------------
  
!    procedure Set_Expanded_Name (T : Tag; Value : System.Address) is
     begin
!       TSD (T).Expanded_Name := To_Cstring_Ptr (Value);
     end Set_Expanded_Name;
  
     ----------------------
     -- Set_External_Tag --
     ----------------------
  
!    procedure Set_External_Tag (T : Tag; Value : System.Address) is
     begin
!       TSD (T).External_Tag := To_Cstring_Ptr (Value);
     end Set_External_Tag;
  
     ---------------------------
*************** package body Ada.Tags is
*** 478,484 ****
        Value : Natural)
     is
     begin
!       T.TSD.Idepth := Value;
     end Set_Inheritance_Depth;
  
     -------------------------
--- 528,534 ----
        Value : Natural)
     is
     begin
!       TSD (T).Idepth := Value;
     end Set_Inheritance_Depth;
  
     -------------------------
*************** package body Ada.Tags is
*** 488,494 ****
     procedure Set_Prim_Op_Address
       (T        : Tag;
        Position : Positive;
!       Value    : S.Address)
     is
     begin
        T.Prims_Ptr (Position) := Value;
--- 538,544 ----
     procedure Set_Prim_Op_Address
       (T        : Tag;
        Position : Positive;
!       Value    : System.Address)
     is
     begin
        T.Prims_Ptr (Position) := Value;
*************** package body Ada.Tags is
*** 500,506 ****
  
     procedure Set_RC_Offset (T : Tag; Value : SSE.Storage_Offset) is
     begin
!       T.TSD.RC_Offset := Value;
     end Set_RC_Offset;
  
     ---------------------------
--- 550,556 ----
  
     procedure Set_RC_Offset (T : Tag; Value : SSE.Storage_Offset) is
     begin
!       TSD (T).RC_Offset := Value;
     end Set_RC_Offset;
  
     ---------------------------
*************** package body Ada.Tags is
*** 510,518 ****
     procedure Set_Remotely_Callable (T : Tag; Value : Boolean) is
     begin
        if Value then
!          T.TSD.Remotely_Callable := True;
        else
!          T.TSD.Remotely_Callable := False;
        end if;
     end Set_Remotely_Callable;
  
--- 560,568 ----
     procedure Set_Remotely_Callable (T : Tag; Value : Boolean) is
     begin
        if Value then
!          TSD (T).Remotely_Callable := True;
        else
!          TSD (T).Remotely_Callable := False;
        end if;
     end Set_Remotely_Callable;
  
*************** package body Ada.Tags is
*** 520,528 ****
     -- Set_TSD --
     -------------
  
!    procedure Set_TSD (T : Tag; Value : S.Address) is
     begin
!       T.TSD := To_Type_Specific_Data_Ptr (Value);
     end Set_TSD;
  
  end Ada.Tags;
--- 570,614 ----
     -- Set_TSD --
     -------------
  
!    procedure Set_TSD (T : Tag; Value : System.Address) is
!       use type System.Storage_Elements.Storage_Offset;
!       TSD_Ptr : constant Addr_Ptr :=
!                   To_Addr_Ptr (To_Address (T) - DT_Typeinfo_Ptr_Size);
     begin
!       TSD_Ptr.all := Value;
     end Set_TSD;
  
+    -------------------
+    -- Offset_To_Top --
+    -------------------
+ 
+    function Offset_To_Top (T : Tag) return Integer is
+       use type System.Storage_Elements.Storage_Offset;
+       TSD_Ptr : constant Int_Ptr :=
+                   To_Int_Ptr (To_Address (T) - DT_Prologue_Size);
+    begin
+       return TSD_Ptr.all;
+    end Offset_To_Top;
+ 
+    ------------------
+    -- Typeinfo_Ptr --
+    ------------------
+ 
+    function Typeinfo_Ptr (T : Tag) return System.Address is
+       use type System.Storage_Elements.Storage_Offset;
+       TSD_Ptr : constant Addr_Ptr :=
+                   To_Addr_Ptr (To_Address (T) - DT_Typeinfo_Ptr_Size);
+    begin
+       return TSD_Ptr.all;
+    end Typeinfo_Ptr;
+ 
+    ---------
+    -- TSD --
+    ---------
+ 
+    function TSD (T : Tag) return Type_Specific_Data_Ptr is
+    begin
+       return To_Type_Specific_Data_Ptr (Get_TSD (T));
+    end TSD;
+ 
  end Ada.Tags;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-tags.ads gcc-4.0.0/gcc/ada/a-tags.ads
*** gcc-3.4.3/gcc/ada/a-tags.ads	Tue Oct 21 13:41:54 2003
--- gcc-4.0.0/gcc/ada/a-tags.ads	Thu Feb 10 13:50:43 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
***************
*** 37,42 ****
--- 37,43 ----
  
  with System;
  with System.Storage_Elements;
+ with Unchecked_Conversion;
  
  package Ada.Tags is
  
*************** package Ada.Tags is
*** 54,69 ****
  
  private
  
!    ----------------------------------------------------------------
!    --  Abstract procedural interface for the GNAT dispatch table --
!    ----------------------------------------------------------------
  
     --  GNAT's Dispatch Table format is customizable in order to match the
!    --  format used in another langauge. GNAT supports programs that use
!    --  two different dispatch table format at the same time: the native
     --  format that supports Ada 95 tagged types and which is described in
!    --  Ada.Tags and a foreign format for types that are imported from some
!    --  other language (typically C++) which is described in interfaces.cpp.
     --  The runtime information kept for each tagged type is separated into
     --  two objects: the Dispatch Table and the Type Specific Data record.
     --  These two objects are allocated statically using the constants:
--- 55,70 ----
  
  private
  
!    ---------------------------------------------------------------
!    -- Abstract Procedural Interface For The GNAT Dispatch Table --
!    ---------------------------------------------------------------
  
     --  GNAT's Dispatch Table format is customizable in order to match the
!    --  format used in another language. GNAT supports programs that use
!    --  two different dispatch table formats at the same time: the native
     --  format that supports Ada 95 tagged types and which is described in
!    --  Ada.Tags, and a foreign format for types that are imported from some
!    --  other language (typically C++) which is described in Interfaces.CPP.
     --  The runtime information kept for each tagged type is separated into
     --  two objects: the Dispatch Table and the Type Specific Data record.
     --  These two objects are allocated statically using the constants:
*************** private
*** 78,102 ****
     --  initialize those structures and uses the GET functions to
     --  retreive the information when needed
  
!    package S   renames System;
     package SSE renames System.Storage_Elements;
  
     function CW_Membership (Obj_Tag : Tag; Typ_Tag : Tag) return Boolean;
     --  Given the tag of an object and the tag associated to a type, return
     --  true if Obj is in Typ'Class.
  
!    function Get_Expanded_Name (T : Tag) return S.Address;
     --  Retrieve the address of a null terminated string containing
     --  the expanded name
  
!    function Get_External_Tag (T : Tag) return S.Address;
     --  Retrieve the address of a null terminated string containing
     --  the external name
  
     function Get_Prim_Op_Address
       (T        : Tag;
!       Position : Positive)
!       return     S.Address;
     --  Given a pointer to a dispatch Table (T) and a position in the DT
     --  this function returns the address of the virtual function stored
     --  in it (used for dispatching calls)
--- 79,107 ----
     --  initialize those structures and uses the GET functions to
     --  retreive the information when needed
  
!    type Dispatch_Table;
!    type Tag is access all Dispatch_Table;
! 
!    type Type_Specific_Data;
!    type Type_Specific_Data_Ptr is access all Type_Specific_Data;
! 
     package SSE renames System.Storage_Elements;
  
     function CW_Membership (Obj_Tag : Tag; Typ_Tag : Tag) return Boolean;
     --  Given the tag of an object and the tag associated to a type, return
     --  true if Obj is in Typ'Class.
  
!    function Get_Expanded_Name (T : Tag) return System.Address;
     --  Retrieve the address of a null terminated string containing
     --  the expanded name
  
!    function Get_External_Tag (T : Tag) return System.Address;
     --  Retrieve the address of a null terminated string containing
     --  the external name
  
     function Get_Prim_Op_Address
       (T        : Tag;
!       Position : Positive) return System.Address;
     --  Given a pointer to a dispatch Table (T) and a position in the DT
     --  this function returns the address of the virtual function stored
     --  in it (used for dispatching calls)
*************** private
*** 117,123 ****
     function Get_Remotely_Callable (T : Tag) return Boolean;
     --  Return the value previously set by Set_Remotely_Callable
  
!    function  Get_TSD (T : Tag) return S.Address;
     --  Given a pointer T to a dispatch Table, retreives the address of the
     --  record containing the Type Specific Data generated by GNAT
  
--- 122,128 ----
     function Get_Remotely_Callable (T : Tag) return Boolean;
     --  Return the value previously set by Set_Remotely_Callable
  
!    function  Get_TSD (T : Tag) return System.Address;
     --  Given a pointer T to a dispatch Table, retreives the address of the
     --  record containing the Type Specific Data generated by GNAT
  
*************** private
*** 129,142 ****
     --  of the direct ancestor and the number of primitive ops that are
     --  inherited (Entry_Count).
  
!    procedure Inherit_TSD (Old_TSD : S.Address; New_Tag : Tag);
     --  Entry point used to initialize the TSD of a type knowing the
     --  TSD of the direct ancestor.
  
     function Parent_Size
!      (Obj : S.Address;
!       T   : Tag)
!       return SSE.Storage_Count;
     --  Computes the size the ancestor part of a tagged extension object
     --  whose address is 'obj' by calling the indirectly _size function of
     --  the ancestor. The ancestor is the parent of the type represented by
--- 134,146 ----
     --  of the direct ancestor and the number of primitive ops that are
     --  inherited (Entry_Count).
  
!    procedure Inherit_TSD (Old_TSD : System.Address; New_Tag : Tag);
     --  Entry point used to initialize the TSD of a type knowing the
     --  TSD of the direct ancestor.
  
     function Parent_Size
!      (Obj : System.Address;
!       T   : Tag) return SSE.Storage_Count;
     --  Computes the size the ancestor part of a tagged extension object
     --  whose address is 'obj' by calling the indirectly _size function of
     --  the ancestor. The ancestor is the parent of the type represented by
*************** private
*** 167,186 ****
     procedure Set_Prim_Op_Address
       (T        : Tag;
        Position : Positive;
!       Value    : S.Address);
     --  Given a pointer to a dispatch Table (T) and a position in the
     --  dispatch Table put the address of the virtual function in it
     --  (used for overriding)
  
!    procedure Set_TSD (T : Tag; Value : S.Address);
     --  Given a pointer T to a dispatch Table, stores the address of the record
     --  containing the Type Specific Data generated by GNAT
  
!    procedure Set_Expanded_Name (T : Tag; Value : S.Address);
     --  Set the address of the string containing the expanded name
     --  in the Dispatch table
  
!    procedure Set_External_Tag (T : Tag; Value : S.Address);
     --  Set the address of the string containing the external tag
     --  in the Dispatch table
  
--- 171,190 ----
     procedure Set_Prim_Op_Address
       (T        : Tag;
        Position : Positive;
!       Value    : System.Address);
     --  Given a pointer to a dispatch Table (T) and a position in the
     --  dispatch Table put the address of the virtual function in it
     --  (used for overriding)
  
!    procedure Set_TSD (T : Tag; Value : System.Address);
     --  Given a pointer T to a dispatch Table, stores the address of the record
     --  containing the Type Specific Data generated by GNAT
  
!    procedure Set_Expanded_Name (T : Tag; Value : System.Address);
     --  Set the address of the string containing the expanded name
     --  in the Dispatch table
  
!    procedure Set_External_Tag (T : Tag; Value : System.Address);
     --  Set the address of the string containing the external tag
     --  in the Dispatch table
  
*************** private
*** 190,223 ****
  
     procedure Set_Remotely_Callable (T : Tag; Value : Boolean);
     --  Set to true if the type has been declared in a context described
!    --  in E.4 (18)
  
     DT_Prologue_Size : constant SSE.Storage_Count :=
                          SSE.Storage_Count
!                           (Standard'Address_Size / S.Storage_Unit);
     --  Size of the first part of the dispatch table
  
     DT_Entry_Size : constant SSE.Storage_Count :=
                       SSE.Storage_Count
!                        (Standard'Address_Size / S.Storage_Unit);
     --  Size of each primitive operation entry in the Dispatch Table.
  
     TSD_Prologue_Size : constant SSE.Storage_Count :=
                           SSE.Storage_Count
!                            (6 * Standard'Address_Size / S.Storage_Unit);
     --  Size of the first part of the type specific data
  
     TSD_Entry_Size : constant SSE.Storage_Count :=
!      SSE.Storage_Count (Standard'Address_Size / S.Storage_Unit);
     --  Size of each ancestor tag entry in the TSD
  
!    type Address_Array is array (Natural range <>) of S.Address;
  
!    type Dispatch_Table;
!    type Tag is access all Dispatch_Table;
  
!    type Type_Specific_Data;
!    type Type_Specific_Data_Ptr is access all Type_Specific_Data;
  
     pragma Inline_Always (CW_Membership);
     pragma Inline_Always (Get_Expanded_Name);
--- 194,252 ----
  
     procedure Set_Remotely_Callable (T : Tag; Value : Boolean);
     --  Set to true if the type has been declared in a context described
!    --  in E.4 (18).
! 
!    function TSD (T : Tag) return Type_Specific_Data_Ptr;
!    --  This function is conceptually equivalent to Get_TSD, but
!    --  returning a Type_Specific_Data_Ptr type (rather than an Address)
!    --  simplifies the implementation of the other subprograms.
  
     DT_Prologue_Size : constant SSE.Storage_Count :=
                          SSE.Storage_Count
!                           (2 * (Standard'Address_Size / System.Storage_Unit));
     --  Size of the first part of the dispatch table
  
+    DT_Typeinfo_Ptr_Size : constant SSE.Storage_Count :=
+                             SSE.Storage_Count
+                               (Standard'Address_Size / System.Storage_Unit);
+    --  Size of the Typeinfo_Ptr field of the Dispatch Table.
+ 
     DT_Entry_Size : constant SSE.Storage_Count :=
                       SSE.Storage_Count
!                        (1 * (Standard'Address_Size / System.Storage_Unit));
     --  Size of each primitive operation entry in the Dispatch Table.
  
     TSD_Prologue_Size : constant SSE.Storage_Count :=
                           SSE.Storage_Count
!                            (6 * Standard'Address_Size / System.Storage_Unit);
     --  Size of the first part of the type specific data
  
     TSD_Entry_Size : constant SSE.Storage_Count :=
!      SSE.Storage_Count (1 * (Standard'Address_Size / System.Storage_Unit));
     --  Size of each ancestor tag entry in the TSD
  
!    type Address_Array is array (Natural range <>) of System.Address;
!    pragma Suppress (Index_Check, On => Address_Array);
!    --  The reason we suppress index checks is that in the body, objects
!    --  of this type are declared with a dummy size of 1, the actual size
!    --  depending on the number of primitive operations.
  
!    function To_Type_Specific_Data_Ptr is
!      new Unchecked_Conversion (System.Address, Type_Specific_Data_Ptr);
  
!    function To_Address is
!      new Unchecked_Conversion (Type_Specific_Data_Ptr, System.Address);
! 
!    function To_Address is
!      new Unchecked_Conversion (Tag, System.Address);
! 
!    type Addr_Ptr is access System.Address;
! 
!    function To_Addr_Ptr is
!       new Unchecked_Conversion (System.Address, Addr_Ptr);
! 
!    --  Primitive dispatching operations are always inlined, to facilitate
!    --  use in a minimal/no run-time environment for high integrity use.
  
     pragma Inline_Always (CW_Membership);
     pragma Inline_Always (Get_Expanded_Name);
*************** private
*** 236,240 ****
--- 265,270 ----
     pragma Inline_Always (Set_RC_Offset);
     pragma Inline_Always (Set_Remotely_Callable);
     pragma Inline_Always (Set_TSD);
+    pragma Inline_Always (TSD);
  
  end Ada.Tags;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-tasatt.adb gcc-4.0.0/gcc/ada/a-tasatt.adb
*** gcc-3.4.3/gcc/ada/a-tasatt.adb	Tue Oct 21 13:41:54 2003
--- gcc-4.0.0/gcc/ada/a-tasatt.adb	Mon May 17 13:20:42 2004
***************
*** 7,13 ****
  --                                 B o d y                                  --
  --                                                                          --
  --             Copyright (C) 1991-1994, Florida State University            --
! --             Copyright (C) 1995-2003, Ada Core Technologies               --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 7,13 ----
  --                                 B o d y                                  --
  --                                                                          --
  --             Copyright (C) 1991-1994, Florida State University            --
! --             Copyright (C) 1995-2004, Ada Core Technologies               --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 41,47 ****
  --  we settled on the present compromise. Things we do not like about
  --  this implementation include:
  
! --  -  It is vulnerable to bad Task_ID values, to the extent of
  --     possibly trashing memory and crashing the runtime system.
  
  --  -  It requires dynamic storage allocation for each new attribute value,
--- 41,47 ----
  --  we settled on the present compromise. Things we do not like about
  --  this implementation include:
  
! --  -  It is vulnerable to bad Task_Id values, to the extent of
  --     possibly trashing memory and crashing the runtime system.
  
  --  -  It requires dynamic storage allocation for each new attribute value,
***************
*** 228,234 ****
  
  with Ada.Task_Identification;
  --  used for Task_Id
! --           Null_Task_ID
  --           Current_Task
  
  with System.Error_Reporting;
--- 228,234 ----
  
  with Ada.Task_Identification;
  --  used for Task_Id
! --           Null_Task_Id
  --           Current_Task
  
  with System.Error_Reporting;
*************** with System.Task_Primitives.Operations;
*** 244,250 ****
  
  with System.Tasking;
  --  used for Access_Address
! --           Task_ID
  --           Direct_Index_Vector
  --           Direct_Index
  
--- 244,250 ----
  
  with System.Tasking;
  --  used for Access_Address
! --           Task_Id
  --           Direct_Index_Vector
  --           Direct_Index
  
*************** package body Ada.Task_Attributes is
*** 322,331 ****
       (Access_Node, Access_Address);
     --  To store pointer to list of indirect attributes
  
-    function To_Access_Node is new Unchecked_Conversion
-      (Access_Address, Access_Node);
-    --  To fetch pointer to list of indirect attributes
- 
     pragma Warnings (Off);
     function To_Access_Wrapper is new Unchecked_Conversion
       (Access_Dummy_Wrapper, Access_Wrapper);
--- 322,327 ----
*************** package body Ada.Task_Attributes is
*** 340,347 ****
       (Access_Wrapper, Access_Dummy_Wrapper);
     --  To store pointer to actual wrapper of attribute node
  
!    function To_Task_ID is new Unchecked_Conversion
!      (Task_Identification.Task_Id, Task_ID);
     --  To access TCB of identified task
  
     type Local_Deallocator is access procedure (P : in out Access_Node);
--- 336,343 ----
       (Access_Wrapper, Access_Dummy_Wrapper);
     --  To store pointer to actual wrapper of attribute node
  
!    function To_Task_Id is new Unchecked_Conversion
!      (Task_Identification.Task_Id, Task_Id);
     --  To access TCB of identified task
  
     type Local_Deallocator is access procedure (P : in out Access_Node);
*************** package body Ada.Task_Attributes is
*** 398,405 ****
       (T    : Task_Identification.Task_Id := Task_Identification.Current_Task)
        return Attribute_Handle
     is
!       TT            : Task_ID := To_Task_ID (T);
!       Error_Message : constant String := "Trying to get the reference of a ";
  
     begin
        if TT = null then
--- 394,401 ----
       (T    : Task_Identification.Task_Id := Task_Identification.Current_Task)
        return Attribute_Handle
     is
!       TT            : constant Task_Id := To_Task_Id (T);
!       Error_Message : constant String  := "Trying to get the reference of a ";
  
     begin
        if TT = null then
*************** package body Ada.Task_Attributes is
*** 488,495 ****
     procedure Reinitialize
       (T : Task_Identification.Task_Id := Task_Identification.Current_Task)
     is
!       TT : Task_ID := To_Task_ID (T);
!       Error_Message : constant String := "Trying to Reinitialize a ";
  
     begin
        if TT = null then
--- 484,491 ----
     procedure Reinitialize
       (T : Task_Identification.Task_Id := Task_Identification.Current_Task)
     is
!       TT            : constant Task_Id := To_Task_Id (T);
!       Error_Message : constant String  := "Trying to Reinitialize a ";
  
     begin
        if TT = null then
*************** package body Ada.Task_Attributes is
*** 558,565 ****
       (Val : Attribute;
        T   : Task_Identification.Task_Id := Task_Identification.Current_Task)
     is
!       TT            : Task_ID := To_Task_ID (T);
!       Error_Message : constant String := "Trying to Set the Value of a ";
  
     begin
        if TT = null then
--- 554,561 ----
       (Val : Attribute;
        T   : Task_Identification.Task_Id := Task_Identification.Current_Task)
     is
!       TT            : constant Task_Id := To_Task_Id (T);
!       Error_Message : constant String  := "Trying to Set the Value of a ";
  
     begin
        if TT = null then
*************** package body Ada.Task_Attributes is
*** 644,654 ****
     -----------
  
     function Value
!      (T    : Task_Identification.Task_Id := Task_Identification.Current_Task)
        return Attribute
     is
!       TT            : Task_ID := To_Task_ID (T);
!       Error_Message : constant String := "Trying to get the Value of a ";
  
     begin
        if TT = null then
--- 640,650 ----
     -----------
  
     function Value
!      (T : Task_Identification.Task_Id := Task_Identification.Current_Task)
        return Attribute
     is
!       TT            : constant Task_Id := To_Task_Id (T);
!       Error_Message : constant String  := "Trying to get the Value of a ";
  
     begin
        if TT = null then
*************** begin
*** 786,792 ****
           --  Initialize the attribute, for all tasks.
  
           declare
!             C : System.Tasking.Task_ID := System.Tasking.All_Tasks_List;
           begin
              while C /= null loop
                 C.Direct_Attributes (Local.Index) :=
--- 782,788 ----
           --  Initialize the attribute, for all tasks.
  
           declare
!             C : System.Tasking.Task_Id := System.Tasking.All_Tasks_List;
           begin
              while C /= null loop
                 C.Direct_Attributes (Local.Index) :=
diff -Nrcpad gcc-3.4.3/gcc/ada/a-taside.adb gcc-4.0.0/gcc/ada/a-taside.adb
*** gcc-3.4.3/gcc/ada/a-taside.adb	Tue Oct 21 13:41:54 2003
--- gcc-4.0.0/gcc/ada/a-taside.adb	Mon May 17 13:20:42 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 1992-2002 Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 1992-2004 Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Ada.Task_Identification is
*** 55,62 ****
     -- Local Subprograms --
     -----------------------
  
!    function Convert_Ids (T : Task_Id) return System.Tasking.Task_ID;
!    function Convert_Ids (T : System.Tasking.Task_ID) return Task_Id;
     pragma Inline (Convert_Ids);
     --  Conversion functions between different forms of Task_Id
  
--- 55,62 ----
     -- Local Subprograms --
     -----------------------
  
!    function Convert_Ids (T : Task_Id) return System.Tasking.Task_Id;
!    function Convert_Ids (T : System.Tasking.Task_Id) return Task_Id;
     pragma Inline (Convert_Ids);
     --  Conversion functions between different forms of Task_Id
  
*************** package body Ada.Task_Identification is
*** 87,98 ****
     -- Convert_Ids --
     -----------------
  
!    function Convert_Ids (T : Task_Id) return System.Tasking.Task_ID is
     begin
!       return System.Tasking.Task_ID (T);
     end Convert_Ids;
  
!    function Convert_Ids (T : System.Tasking.Task_ID) return Task_Id is
     begin
        return Task_Id (T);
     end Convert_Ids;
--- 87,98 ----
     -- Convert_Ids --
     -----------------
  
!    function Convert_Ids (T : Task_Id) return System.Tasking.Task_Id is
     begin
!       return System.Tasking.Task_Id (T);
     end Convert_Ids;
  
!    function Convert_Ids (T : System.Tasking.Task_Id) return Task_Id is
     begin
        return Task_Id (T);
     end Convert_Ids;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-taside.ads gcc-4.0.0/gcc/ada/a-taside.ads
*** gcc-3.4.3/gcc/ada/a-taside.ads	Thu Apr 24 17:53:54 2003
--- gcc-4.0.0/gcc/ada/a-taside.ads	Mon May 17 13:20:42 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2000 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** package Ada.Task_Identification is
*** 64,71 ****
  
  private
  
!    type Task_Id is new System.Tasking.Task_ID;
  
!    Null_Task_ID : constant Task_Id := Task_Id (System.Tasking.Null_Task);
  
  end Ada.Task_Identification;
--- 64,71 ----
  
  private
  
!    type Task_Id is new System.Tasking.Task_Id;
  
!    Null_Task_Id : constant Task_Id := Task_Id (System.Tasking.Null_Task);
  
  end Ada.Task_Identification;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-textio.adb gcc-4.0.0/gcc/ada/a-textio.adb
*** gcc-3.4.3/gcc/ada/a-textio.adb	Mon Dec 15 11:51:00 2003
--- gcc-4.0.0/gcc/ada/a-textio.adb	Thu Feb 10 13:51:39 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Ada.Text_IO is
*** 60,66 ****
  
     function AFCB_Allocate (Control_Block : Text_AFCB) return FCB.AFCB_Ptr is
        pragma Unreferenced (Control_Block);
- 
     begin
        return new Text_AFCB;
     end AFCB_Allocate;
--- 60,65 ----
*************** package body Ada.Text_IO is
*** 118,124 ****
     --  to exceed the value of Count'Last, i.e. no check is required for
     --  overflow raising layout error.
  
!    function Col (File : in File_Type) return Positive_Count is
     begin
        FIO.Check_File_Open (AP (File));
        return File.Col;
--- 117,123 ----
     --  to exceed the value of Count'Last, i.e. no check is required for
     --  overflow raising layout error.
  
!    function Col (File : File_Type) return Positive_Count is
     begin
        FIO.Check_File_Open (AP (File));
        return File.Col;
*************** package body Ada.Text_IO is
*** 135,143 ****
  
     procedure Create
       (File : in out File_Type;
!       Mode : in File_Mode := Out_File;
!       Name : in String := "";
!       Form : in String := "")
     is
        Dummy_File_Control_Block : Text_AFCB;
        pragma Warnings (Off, Dummy_File_Control_Block);
--- 134,142 ----
  
     procedure Create
       (File : in out File_Type;
!       Mode : File_Mode := Out_File;
!       Name : String := "";
!       Form : String := "")
     is
        Dummy_File_Control_Block : Text_AFCB;
        pragma Warnings (Off, Dummy_File_Control_Block);
*************** package body Ada.Text_IO is
*** 212,219 ****
     -- End_Of_File --
     -----------------
  
!    function End_Of_File (File : in File_Type) return Boolean is
!       ch  : int;
  
     begin
        FIO.Check_Read_Status (AP (File));
--- 211,218 ----
     -- End_Of_File --
     -----------------
  
!    function End_Of_File (File : File_Type) return Boolean is
!       ch : int;
  
     begin
        FIO.Check_Read_Status (AP (File));
*************** package body Ada.Text_IO is
*** 270,276 ****
     -- End_Of_Line --
     -----------------
  
!    function End_Of_Line (File : in File_Type) return Boolean is
        ch : int;
  
     begin
--- 269,275 ----
     -- End_Of_Line --
     -----------------
  
!    function End_Of_Line (File : File_Type) return Boolean is
        ch : int;
  
     begin
*************** package body Ada.Text_IO is
*** 301,307 ****
     -- End_Of_Page --
     -----------------
  
!    function End_Of_Page (File : in File_Type) return Boolean is
        ch  : int;
  
     begin
--- 300,306 ----
     -- End_Of_Page --
     -----------------
  
!    function End_Of_Page (File : File_Type) return Boolean is
        ch  : int;
  
     begin
*************** package body Ada.Text_IO is
*** 357,363 ****
     -- Flush --
     -----------
  
!    procedure Flush (File : in File_Type) is
     begin
        FIO.Flush (AP (File));
     end Flush;
--- 356,362 ----
     -- Flush --
     -----------
  
!    procedure Flush (File : File_Type) is
     begin
        FIO.Flush (AP (File));
     end Flush;
*************** package body Ada.Text_IO is
*** 371,377 ****
     -- Form --
     ----------
  
!    function Form (File : in File_Type) return String is
     begin
        return FIO.Form (AP (File));
     end Form;
--- 370,376 ----
     -- Form --
     ----------
  
!    function Form (File : File_Type) return String is
     begin
        return FIO.Form (AP (File));
     end Form;
*************** package body Ada.Text_IO is
*** 381,387 ****
     ---------
  
     procedure Get
!      (File : in File_Type;
        Item : out Character)
     is
        ch : int;
--- 380,386 ----
     ---------
  
     procedure Get
!      (File : File_Type;
        Item : out Character)
     is
        ch : int;
*************** package body Ada.Text_IO is
*** 430,436 ****
     end Get;
  
     procedure Get
!      (File : in File_Type;
        Item : out String)
     is
        ch : int;
--- 429,435 ----
     end Get;
  
     procedure Get
!      (File : File_Type;
        Item : out String)
     is
        ch : int;
*************** package body Ada.Text_IO is
*** 489,495 ****
     --  More work required here ???
  
     procedure Get_Immediate
!      (File : in File_Type;
        Item : out Character)
     is
        ch          : int;
--- 488,494 ----
     --  More work required here ???
  
     procedure Get_Immediate
!      (File : File_Type;
        Item : out Character)
     is
        ch          : int;
*************** package body Ada.Text_IO is
*** 530,536 ****
     end Get_Immediate;
  
     procedure Get_Immediate
!      (File      : in File_Type;
        Item      : out Character;
        Available : out Boolean)
     is
--- 529,535 ----
     end Get_Immediate;
  
     procedure Get_Immediate
!      (File      : File_Type;
        Item      : out Character;
        Available : out Boolean)
     is
*************** package body Ada.Text_IO is
*** 594,600 ****
     --------------
  
     procedure Get_Line
!      (File : in File_Type;
        Item : out String;
        Last : out Natural)
     is
--- 593,599 ----
     --------------
  
     procedure Get_Line
!      (File : File_Type;
        Item : out String;
        Last : out Natural)
     is
*************** package body Ada.Text_IO is
*** 712,717 ****
--- 711,768 ----
        Get_Line (Current_In, Item, Last);
     end Get_Line;
  
+    function Get_Line (File : File_Type) return String is
+       Buffer : String (1 .. 500);
+       Last   : Natural;
+ 
+       function Get_Rest (S : String) return String;
+       --  This is a recursive function that reads the rest of the line and
+       --  returns it. S is the part read so far.
+ 
+       --------------
+       -- Get_Rest --
+       --------------
+ 
+       function Get_Rest (S : String) return String is
+ 
+          --  Each time we allocate a buffer the same size as what we have
+          --  read so far. This limits us to a logarithmic number of calls
+          --  to Get_Rest and also ensures only a linear use of stack space.
+ 
+          Buffer : String (1 .. S'Length);
+          Last   : Natural;
+ 
+       begin
+          Get_Line (File, Buffer, Last);
+ 
+          declare
+             R : constant String := S & Buffer (1 .. Last);
+          begin
+             if Last < Buffer'Last then
+                return R;
+             else
+                return Get_Rest (R);
+             end if;
+          end;
+       end Get_Rest;
+ 
+    --  Start of processing for Get_Line
+ 
+    begin
+       Get_Line (File, Buffer, Last);
+ 
+       if Last < Buffer'Last then
+          return Buffer (1 .. Last);
+       else
+          return Get_Rest (Buffer (1 .. Last));
+       end if;
+    end Get_Line;
+ 
+    function Get_Line return String is
+    begin
+       return Get_Line (Current_In);
+    end Get_Line;
+ 
     ----------
     -- Getc --
     ----------
*************** package body Ada.Text_IO is
*** 733,739 ****
     -- Is_Open --
     -------------
  
!    function Is_Open (File : in File_Type) return Boolean is
     begin
        return FIO.Is_Open (AP (File));
     end Is_Open;
--- 784,790 ----
     -- Is_Open --
     -------------
  
!    function Is_Open (File : File_Type) return Boolean is
     begin
        return FIO.Is_Open (AP (File));
     end Is_Open;
*************** package body Ada.Text_IO is
*** 746,752 ****
     --  to exceed the value of Count'Last, i.e. no check is required for
     --  overflow raising layout error.
  
!    function Line (File : in File_Type) return Positive_Count is
     begin
        FIO.Check_File_Open (AP (File));
        return File.Line;
--- 797,803 ----
     --  to exceed the value of Count'Last, i.e. no check is required for
     --  overflow raising layout error.
  
!    function Line (File : File_Type) return Positive_Count is
     begin
        FIO.Check_File_Open (AP (File));
        return File.Line;
*************** package body Ada.Text_IO is
*** 761,767 ****
     -- Line_Length --
     -----------------
  
!    function Line_Length (File : in File_Type) return Count is
     begin
        FIO.Check_Write_Status (AP (File));
        return File.Line_Length;
--- 812,818 ----
     -- Line_Length --
     -----------------
  
!    function Line_Length (File : File_Type) return Count is
     begin
        FIO.Check_Write_Status (AP (File));
        return File.Line_Length;
*************** package body Ada.Text_IO is
*** 777,783 ****
     ----------------
  
     procedure Look_Ahead
!      (File        : in File_Type;
        Item        : out Character;
        End_Of_Line : out Boolean)
     is
--- 828,834 ----
     ----------------
  
     procedure Look_Ahead
!      (File        : File_Type;
        Item        : out Character;
        End_Of_Line : out Boolean)
     is
*************** package body Ada.Text_IO is
*** 818,824 ****
     -- Mode --
     ----------
  
!    function Mode (File : in File_Type) return File_Mode is
     begin
        return To_TIO (FIO.Mode (AP (File)));
     end Mode;
--- 869,875 ----
     -- Mode --
     ----------
  
!    function Mode (File : File_Type) return File_Mode is
     begin
        return To_TIO (FIO.Mode (AP (File)));
     end Mode;
*************** package body Ada.Text_IO is
*** 827,833 ****
     -- Name --
     ----------
  
!    function Name (File : in File_Type) return String is
     begin
        return FIO.Name (AP (File));
     end Name;
--- 878,884 ----
     -- Name --
     ----------
  
!    function Name (File : File_Type) return String is
     begin
        return FIO.Name (AP (File));
     end Name;
*************** package body Ada.Text_IO is
*** 837,844 ****
     --------------
  
     procedure New_Line
!      (File    : in File_Type;
!       Spacing : in Positive_Count := 1)
     is
     begin
        --  Raise Constraint_Error if out of range value. The reason for this
--- 888,895 ----
     --------------
  
     procedure New_Line
!      (File    : File_Type;
!       Spacing : Positive_Count := 1)
     is
     begin
        --  Raise Constraint_Error if out of range value. The reason for this
*************** package body Ada.Text_IO is
*** 867,873 ****
        File.Col := 1;
     end New_Line;
  
!    procedure New_Line (Spacing : in Positive_Count := 1) is
     begin
        New_Line (Current_Out, Spacing);
     end New_Line;
--- 918,924 ----
        File.Col := 1;
     end New_Line;
  
!    procedure New_Line (Spacing : Positive_Count := 1) is
     begin
        New_Line (Current_Out, Spacing);
     end New_Line;
*************** package body Ada.Text_IO is
*** 876,882 ****
     -- New_Page --
     --------------
  
!    procedure New_Page (File : in File_Type) is
     begin
        FIO.Check_Write_Status (AP (File));
  
--- 927,933 ----
     -- New_Page --
     --------------
  
!    procedure New_Page (File : File_Type) is
     begin
        FIO.Check_Write_Status (AP (File));
  
*************** package body Ada.Text_IO is
*** 925,933 ****
  
     procedure Open
       (File : in out File_Type;
!       Mode : in File_Mode;
!       Name : in String;
!       Form : in String := "")
     is
        Dummy_File_Control_Block : Text_AFCB;
        pragma Warnings (Off, Dummy_File_Control_Block);
--- 976,984 ----
  
     procedure Open
       (File : in out File_Type;
!       Mode : File_Mode;
!       Name : String;
!       Form : String := "")
     is
        Dummy_File_Control_Block : Text_AFCB;
        pragma Warnings (Off, Dummy_File_Control_Block);
*************** package body Ada.Text_IO is
*** 955,961 ****
     --  to exceed the value of Count'Last, i.e. no check is required for
     --  overflow raising layout error.
  
!    function Page (File : in File_Type) return Positive_Count is
     begin
        FIO.Check_File_Open (AP (File));
        return File.Page;
--- 1006,1012 ----
     --  to exceed the value of Count'Last, i.e. no check is required for
     --  overflow raising layout error.
  
!    function Page (File : File_Type) return Positive_Count is
     begin
        FIO.Check_File_Open (AP (File));
        return File.Page;
*************** package body Ada.Text_IO is
*** 970,976 ****
     -- Page_Length --
     -----------------
  
!    function Page_Length (File : in File_Type) return Count is
     begin
        FIO.Check_Write_Status (AP (File));
        return File.Page_Length;
--- 1021,1027 ----
     -- Page_Length --
     -----------------
  
!    function Page_Length (File : File_Type) return Count is
     begin
        FIO.Check_Write_Status (AP (File));
        return File.Page_Length;
*************** package body Ada.Text_IO is
*** 986,993 ****
     ---------
  
     procedure Put
!      (File : in File_Type;
!       Item : in Character)
     is
     begin
        FIO.Check_Write_Status (AP (File));
--- 1037,1044 ----
     ---------
  
     procedure Put
!      (File : File_Type;
!       Item : Character)
     is
     begin
        FIO.Check_Write_Status (AP (File));
*************** package body Ada.Text_IO is
*** 1003,1009 ****
        File.Col := File.Col + 1;
     end Put;
  
!    procedure Put (Item : in Character) is
     begin
        FIO.Check_Write_Status (AP (Current_Out));
  
--- 1054,1060 ----
        File.Col := File.Col + 1;
     end Put;
  
!    procedure Put (Item : Character) is
     begin
        FIO.Check_Write_Status (AP (Current_Out));
  
*************** package body Ada.Text_IO is
*** 1025,1032 ****
     ---------
  
     procedure Put
!      (File : in File_Type;
!       Item : in String)
     is
     begin
        FIO.Check_Write_Status (AP (File));
--- 1076,1083 ----
     ---------
  
     procedure Put
!      (File : File_Type;
!       Item : String)
     is
     begin
        FIO.Check_Write_Status (AP (File));
*************** package body Ada.Text_IO is
*** 1052,1058 ****
        end if;
     end Put;
  
!    procedure Put (Item : in String) is
     begin
        Put (Current_Out, Item);
     end Put;
--- 1103,1109 ----
        end if;
     end Put;
  
!    procedure Put (Item : String) is
     begin
        Put (Current_Out, Item);
     end Put;
*************** package body Ada.Text_IO is
*** 1062,1069 ****
     --------------
  
     procedure Put_Line
!      (File : in File_Type;
!       Item : in String)
     is
        Ilen   : Natural := Item'Length;
        Istart : Natural := Item'First;
--- 1113,1120 ----
     --------------
  
     procedure Put_Line
!      (File : File_Type;
!       Item : String)
     is
        Ilen   : Natural := Item'Length;
        Istart : Natural := Item'First;
*************** package body Ada.Text_IO is
*** 1127,1133 ****
        end;
     end Put_Line;
  
!    procedure Put_Line (Item : in String) is
     begin
        Put_Line (Current_Out, Item);
     end Put_Line;
--- 1178,1184 ----
        end;
     end Put_Line;
  
!    procedure Put_Line (Item : String) is
     begin
        Put_Line (Current_Out, Item);
     end Put_Line;
*************** package body Ada.Text_IO is
*** 1231,1237 ****
  
     procedure Reset
       (File : in out File_Type;
!       Mode : in File_Mode)
     is
     begin
        --  Don't allow change of mode for current file (RM A.10.2(5))
--- 1282,1288 ----
  
     procedure Reset
       (File : in out File_Type;
!       Mode : File_Mode)
     is
     begin
        --  Don't allow change of mode for current file (RM A.10.2(5))
*************** package body Ada.Text_IO is
*** 1273,1280 ****
     -------------
  
     procedure Set_Col
!      (File : in File_Type;
!       To   : in Positive_Count)
     is
        ch : int;
  
--- 1324,1331 ----
     -------------
  
     procedure Set_Col
!      (File : File_Type;
!       To   : Positive_Count)
     is
        ch : int;
  
*************** package body Ada.Text_IO is
*** 1333,1339 ****
        end if;
     end Set_Col;
  
!    procedure Set_Col (To : in Positive_Count) is
     begin
        Set_Col (Current_Out, To);
     end Set_Col;
--- 1384,1390 ----
        end if;
     end Set_Col;
  
!    procedure Set_Col (To : Positive_Count) is
     begin
        Set_Col (Current_Out, To);
     end Set_Col;
*************** package body Ada.Text_IO is
*** 1342,1348 ****
     -- Set_Error --
     ---------------
  
!    procedure Set_Error (File : in File_Type) is
     begin
        FIO.Check_Write_Status (AP (File));
        Current_Err := File;
--- 1393,1399 ----
     -- Set_Error --
     ---------------
  
!    procedure Set_Error (File : File_Type) is
     begin
        FIO.Check_Write_Status (AP (File));
        Current_Err := File;
*************** package body Ada.Text_IO is
*** 1352,1358 ****
     -- Set_Input --
     ---------------
  
!    procedure Set_Input (File : in File_Type) is
     begin
        FIO.Check_Read_Status (AP (File));
        Current_In := File;
--- 1403,1409 ----
     -- Set_Input --
     ---------------
  
!    procedure Set_Input (File : File_Type) is
     begin
        FIO.Check_Read_Status (AP (File));
        Current_In := File;
*************** package body Ada.Text_IO is
*** 1363,1370 ****
     --------------
  
     procedure Set_Line
!      (File : in File_Type;
!       To   : in Positive_Count)
     is
     begin
        --  Raise Constraint_Error if out of range value. The reason for this
--- 1414,1421 ----
     --------------
  
     procedure Set_Line
!      (File : File_Type;
!       To   : Positive_Count)
     is
     begin
        --  Raise Constraint_Error if out of range value. The reason for this
*************** package body Ada.Text_IO is
*** 1401,1407 ****
        end if;
     end Set_Line;
  
!    procedure Set_Line (To : in Positive_Count) is
     begin
        Set_Line (Current_Out, To);
     end Set_Line;
--- 1452,1458 ----
        end if;
     end Set_Line;
  
!    procedure Set_Line (To : Positive_Count) is
     begin
        Set_Line (Current_Out, To);
     end Set_Line;
*************** package body Ada.Text_IO is
*** 1410,1416 ****
     -- Set_Line_Length --
     ---------------------
  
!    procedure Set_Line_Length (File : in File_Type; To : in Count) is
     begin
        --  Raise Constraint_Error if out of range value. The reason for this
        --  explicit test is that we don't want junk values around, even if
--- 1461,1467 ----
     -- Set_Line_Length --
     ---------------------
  
!    procedure Set_Line_Length (File : File_Type; To : Count) is
     begin
        --  Raise Constraint_Error if out of range value. The reason for this
        --  explicit test is that we don't want junk values around, even if
*************** package body Ada.Text_IO is
*** 1424,1430 ****
        File.Line_Length := To;
     end Set_Line_Length;
  
!    procedure Set_Line_Length (To : in Count) is
     begin
        Set_Line_Length (Current_Out, To);
     end Set_Line_Length;
--- 1475,1481 ----
        File.Line_Length := To;
     end Set_Line_Length;
  
!    procedure Set_Line_Length (To : Count) is
     begin
        Set_Line_Length (Current_Out, To);
     end Set_Line_Length;
*************** package body Ada.Text_IO is
*** 1433,1439 ****
     -- Set_Output --
     ----------------
  
!    procedure Set_Output (File : in File_Type) is
     begin
        FIO.Check_Write_Status (AP (File));
        Current_Out := File;
--- 1484,1490 ----
     -- Set_Output --
     ----------------
  
!    procedure Set_Output (File : File_Type) is
     begin
        FIO.Check_Write_Status (AP (File));
        Current_Out := File;
*************** package body Ada.Text_IO is
*** 1443,1449 ****
     -- Set_Page_Length --
     ---------------------
  
!    procedure Set_Page_Length (File : in File_Type; To : in Count) is
     begin
        --  Raise Constraint_Error if out of range value. The reason for this
        --  explicit test is that we don't want junk values around, even if
--- 1494,1500 ----
     -- Set_Page_Length --
     ---------------------
  
!    procedure Set_Page_Length (File : File_Type; To : Count) is
     begin
        --  Raise Constraint_Error if out of range value. The reason for this
        --  explicit test is that we don't want junk values around, even if
*************** package body Ada.Text_IO is
*** 1457,1463 ****
        File.Page_Length := To;
     end Set_Page_Length;
  
!    procedure Set_Page_Length (To : in Count) is
     begin
        Set_Page_Length (Current_Out, To);
     end Set_Page_Length;
--- 1508,1514 ----
        File.Page_Length := To;
     end Set_Page_Length;
  
!    procedure Set_Page_Length (To : Count) is
     begin
        Set_Page_Length (Current_Out, To);
     end Set_Page_Length;
*************** package body Ada.Text_IO is
*** 1467,1474 ****
     ---------------
  
     procedure Skip_Line
!      (File    : in File_Type;
!       Spacing : in Positive_Count := 1)
     is
        ch : int;
  
--- 1518,1525 ----
     ---------------
  
     procedure Skip_Line
!      (File    : File_Type;
!       Spacing : Positive_Count := 1)
     is
        ch : int;
  
*************** package body Ada.Text_IO is
*** 1548,1554 ****
        end loop;
     end Skip_Line;
  
!    procedure Skip_Line (Spacing : in Positive_Count := 1) is
     begin
        Skip_Line (Current_In, Spacing);
     end Skip_Line;
--- 1599,1605 ----
        end loop;
     end Skip_Line;
  
!    procedure Skip_Line (Spacing : Positive_Count := 1) is
     begin
        Skip_Line (Current_In, Spacing);
     end Skip_Line;
*************** package body Ada.Text_IO is
*** 1557,1563 ****
     -- Skip_Page --
     ---------------
  
!    procedure Skip_Page (File : in File_Type) is
        ch : int;
  
     begin
--- 1608,1614 ----
     -- Skip_Page --
     ---------------
  
!    procedure Skip_Page (File : File_Type) is
        ch : int;
  
     begin
*************** package body Ada.Text_IO is
*** 1678,1685 ****
--- 1729,1740 ----
           --  because it is too much of a nuisance to have these odd line
           --  feeds when nothing has been written to the file.
  
+          --  We also avoid this for files opened in append mode, in
+          --  accordance with (RM A.8.2(10))
+ 
           elsif (File /= Standard_Err and then File /= Standard_Out)
             and then (File.Line = 1 and then File.Page = 1)
+            and then Mode (File) = Out_File
           then
              New_Line (File);
           end if;
*************** package body Ada.Text_IO is
*** 1708,1714 ****
  
     procedure Write
       (File : in out Text_AFCB;
!       Item : in Stream_Element_Array)
     is
  
        function Has_Translated_Characters return Boolean;
--- 1763,1769 ----
  
     procedure Write
       (File : in out Text_AFCB;
!       Item : Stream_Element_Array)
     is
  
        function Has_Translated_Characters return Boolean;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-textio.ads gcc-4.0.0/gcc/ada/a-textio.ads
*** gcc-3.4.3/gcc/ada/a-textio.ads	Tue Oct 21 13:41:54 2003
--- gcc-4.0.0/gcc/ada/a-textio.ads	Thu Feb 10 13:51:39 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** pragma Elaborate_Body (Text_IO);
*** 86,119 ****
  
     procedure Create
       (File : in out File_Type;
!       Mode : in File_Mode := Out_File;
!       Name : in String := "";
!       Form : in String := "");
  
     procedure Open
       (File : in out File_Type;
!       Mode : in File_Mode;
!       Name : in String;
!       Form : in String := "");
  
     procedure Close  (File : in out File_Type);
     procedure Delete (File : in out File_Type);
!    procedure Reset  (File : in out File_Type; Mode : in File_Mode);
     procedure Reset  (File : in out File_Type);
  
!    function Mode (File : in File_Type) return File_Mode;
!    function Name (File : in File_Type) return String;
!    function Form (File : in File_Type) return String;
  
!    function Is_Open (File : in File_Type) return Boolean;
  
     ------------------------------------------------------
     -- Control of default input, output and error files --
     ------------------------------------------------------
  
!    procedure Set_Input  (File : in File_Type);
!    procedure Set_Output (File : in File_Type);
!    procedure Set_Error  (File : in File_Type);
  
     function Standard_Input  return File_Type;
     function Standard_Output return File_Type;
--- 86,119 ----
  
     procedure Create
       (File : in out File_Type;
!       Mode : File_Mode := Out_File;
!       Name : String := "";
!       Form : String := "");
  
     procedure Open
       (File : in out File_Type;
!       Mode : File_Mode;
!       Name : String;
!       Form : String := "");
  
     procedure Close  (File : in out File_Type);
     procedure Delete (File : in out File_Type);
!    procedure Reset  (File : in out File_Type; Mode : File_Mode);
     procedure Reset  (File : in out File_Type);
  
!    function Mode (File : File_Type) return File_Mode;
!    function Name (File : File_Type) return String;
!    function Form (File : File_Type) return String;
  
!    function Is_Open (File : File_Type) return Boolean;
  
     ------------------------------------------------------
     -- Control of default input, output and error files --
     ------------------------------------------------------
  
!    procedure Set_Input  (File : File_Type);
!    procedure Set_Output (File : File_Type);
!    procedure Set_Error  (File : File_Type);
  
     function Standard_Input  return File_Type;
     function Standard_Output return File_Type;
*************** pragma Elaborate_Body (Text_IO);
*** 140,215 ****
     --  Note: The parameter file is IN OUT in the RM, but this is clearly
     --  an oversight, and was intended to be IN, see AI95-00057.
  
!    procedure Flush (File : in File_Type);
     procedure Flush;
  
     --------------------------------------------
     -- Specification of line and page lengths --
     --------------------------------------------
  
!    procedure Set_Line_Length (File : in File_Type; To : in Count);
!    procedure Set_Line_Length (To : in Count);
  
!    procedure Set_Page_Length (File : in File_Type; To : in Count);
!    procedure Set_Page_Length (To : in Count);
  
!    function Line_Length (File : in File_Type) return Count;
     function Line_Length return Count;
  
!    function Page_Length (File : in File_Type) return Count;
     function Page_Length return Count;
  
     ------------------------------------
     -- Column, Line, and Page Control --
     ------------------------------------
  
!    procedure New_Line (File : in File_Type; Spacing : in Positive_Count := 1);
!    procedure New_Line (Spacing : in Positive_Count := 1);
  
!    procedure Skip_Line (File : in File_Type; Spacing : in Positive_Count := 1);
!    procedure Skip_Line (Spacing : in Positive_Count := 1);
  
!    function End_Of_Line (File : in File_Type) return Boolean;
     function End_Of_Line return Boolean;
  
!    procedure New_Page (File : in File_Type);
     procedure New_Page;
  
!    procedure Skip_Page (File : in File_Type);
     procedure Skip_Page;
  
!    function End_Of_Page (File : in File_Type) return Boolean;
     function End_Of_Page return Boolean;
  
!    function End_Of_File (File : in File_Type) return Boolean;
     function End_Of_File return Boolean;
  
!    procedure Set_Col (File : in File_Type;  To : in Positive_Count);
!    procedure Set_Col (To : in Positive_Count);
  
!    procedure Set_Line (File : in File_Type; To : in Positive_Count);
!    procedure Set_Line (To : in Positive_Count);
  
!    function Col (File : in File_Type) return Positive_Count;
     function Col return Positive_Count;
  
!    function Line (File : in File_Type) return Positive_Count;
     function Line return Positive_Count;
  
!    function Page (File : in File_Type) return Positive_Count;
     function Page return Positive_Count;
  
     ----------------------------
     -- Character Input-Output --
     ----------------------------
  
!    procedure Get (File : in File_Type; Item : out Character);
     procedure Get (Item : out Character);
!    procedure Put (File : in File_Type; Item : in Character);
!    procedure Put (Item : in Character);
  
     procedure Look_Ahead
!      (File        : in File_Type;
        Item        : out Character;
        End_Of_Line : out Boolean);
  
--- 140,215 ----
     --  Note: The parameter file is IN OUT in the RM, but this is clearly
     --  an oversight, and was intended to be IN, see AI95-00057.
  
!    procedure Flush (File : File_Type);
     procedure Flush;
  
     --------------------------------------------
     -- Specification of line and page lengths --
     --------------------------------------------
  
!    procedure Set_Line_Length (File : File_Type; To : Count);
!    procedure Set_Line_Length (To : Count);
  
!    procedure Set_Page_Length (File : File_Type; To : Count);
!    procedure Set_Page_Length (To : Count);
  
!    function Line_Length (File : File_Type) return Count;
     function Line_Length return Count;
  
!    function Page_Length (File : File_Type) return Count;
     function Page_Length return Count;
  
     ------------------------------------
     -- Column, Line, and Page Control --
     ------------------------------------
  
!    procedure New_Line (File : File_Type; Spacing : Positive_Count := 1);
!    procedure New_Line (Spacing : Positive_Count := 1);
  
!    procedure Skip_Line (File : File_Type; Spacing : Positive_Count := 1);
!    procedure Skip_Line (Spacing : Positive_Count := 1);
  
!    function End_Of_Line (File : File_Type) return Boolean;
     function End_Of_Line return Boolean;
  
!    procedure New_Page (File : File_Type);
     procedure New_Page;
  
!    procedure Skip_Page (File : File_Type);
     procedure Skip_Page;
  
!    function End_Of_Page (File : File_Type) return Boolean;
     function End_Of_Page return Boolean;
  
!    function End_Of_File (File : File_Type) return Boolean;
     function End_Of_File return Boolean;
  
!    procedure Set_Col (File : File_Type;  To : Positive_Count);
!    procedure Set_Col (To : Positive_Count);
  
!    procedure Set_Line (File : File_Type; To : Positive_Count);
!    procedure Set_Line (To : Positive_Count);
  
!    function Col (File : File_Type) return Positive_Count;
     function Col return Positive_Count;
  
!    function Line (File : File_Type) return Positive_Count;
     function Line return Positive_Count;
  
!    function Page (File : File_Type) return Positive_Count;
     function Page return Positive_Count;
  
     ----------------------------
     -- Character Input-Output --
     ----------------------------
  
!    procedure Get (File : File_Type; Item : out Character);
     procedure Get (Item : out Character);
!    procedure Put (File : File_Type; Item : Character);
!    procedure Put (Item : Character);
  
     procedure Look_Ahead
!      (File        : File_Type;
        Item        : out Character;
        End_Of_Line : out Boolean);
  
*************** pragma Elaborate_Body (Text_IO);
*** 218,231 ****
        End_Of_Line : out Boolean);
  
     procedure Get_Immediate
!      (File : in File_Type;
        Item : out Character);
  
     procedure Get_Immediate
       (Item : out Character);
  
     procedure Get_Immediate
!      (File      : in File_Type;
        Item      : out Character;
        Available : out Boolean);
  
--- 218,231 ----
        End_Of_Line : out Boolean);
  
     procedure Get_Immediate
!      (File : File_Type;
        Item : out Character);
  
     procedure Get_Immediate
       (Item : out Character);
  
     procedure Get_Immediate
!      (File      : File_Type;
        Item      : out Character;
        Available : out Boolean);
  
*************** pragma Elaborate_Body (Text_IO);
*** 237,249 ****
     -- String Input-Output --
     -------------------------
  
!    procedure Get (File : in File_Type; Item : out String);
     procedure Get (Item : out String);
!    procedure Put (File : in File_Type; Item : in String);
!    procedure Put (Item : in String);
  
     procedure Get_Line
!      (File : in File_Type;
        Item : out String;
        Last : out Natural);
  
--- 237,249 ----
     -- String Input-Output --
     -------------------------
  
!    procedure Get (File : File_Type; Item : out String);
     procedure Get (Item : out String);
!    procedure Put (File : File_Type; Item : String);
!    procedure Put (Item : String);
  
     procedure Get_Line
!      (File : File_Type;
        Item : out String;
        Last : out Natural);
  
*************** pragma Elaborate_Body (Text_IO);
*** 251,262 ****
       (Item : out String;
        Last : out Natural);
  
     procedure Put_Line
!      (File : in File_Type;
!       Item : in String);
  
     procedure Put_Line
!      (Item : in String);
  
     ---------------------------------------
     -- Generic packages for Input-Output --
--- 251,268 ----
       (Item : out String;
        Last : out Natural);
  
+    function Get_Line (File : File_Type) return String;
+    pragma Ada_05 (Get_Line);
+ 
+    function Get_Line return String;
+    pragma Ada_05 (Get_Line);
+ 
     procedure Put_Line
!      (File : File_Type;
!       Item : String);
  
     procedure Put_Line
!      (Item : String);
  
     ---------------------------------------
     -- Generic packages for Input-Output --
*************** private
*** 375,381 ****
  
     procedure Write
       (File : in out Text_AFCB;
!       Item : in Ada.Streams.Stream_Element_Array);
     --  Write operation used when Text_IO file is treated directly as Stream
  
     ------------------------
--- 381,387 ----
  
     procedure Write
       (File : in out Text_AFCB;
!       Item : Ada.Streams.Stream_Element_Array);
     --  Write operation used when Text_IO file is treated directly as Stream
  
     ------------------------
diff -Nrcpad gcc-3.4.3/gcc/ada/a-tifiio.adb gcc-4.0.0/gcc/ada/a-tifiio.adb
*** gcc-3.4.3/gcc/ada/a-tifiio.adb	Tue Oct 21 13:41:54 2003
--- gcc-4.0.0/gcc/ada/a-tifiio.adb	Mon Mar 15 14:50:55 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Ada.Text_IO.Fixed_IO is
*** 432,438 ****
                              + Boolean'Pos (not Exact)
                                  * (Scale - 1);
  
- 
        procedure Put_Character (C : Character);
        pragma Inline (Put_Character);
        --  Add C to the output string To, updating Last
--- 432,437 ----
*************** package body Ada.Text_IO.Fixed_IO is
*** 550,556 ****
           E       : Integer)
        is
           N  : constant Natural := (A + Max_Digits - 1) / Max_Digits + 1;
-          pragma Debug (Put_Line ("N =" & N'Img));
           Q  : array (1 .. N) of Int64 := (others => 0);
  
           XX : Int64 := X;
--- 549,554 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/a-tiunio.ads gcc-4.0.0/gcc/ada/a-tiunio.ads
*** gcc-3.4.3/gcc/ada/a-tiunio.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-tiunio.ads	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,62 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --              A D A . T E X T _ I O . U N B O U N D E D _ I O             --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ -- This specification is adapted from the Ada Reference Manual for use with --
+ -- GNAT.  In accordance with the copyright of that document, you can freely --
+ -- copy and modify this specification,  provided that if you redistribute a --
+ -- modified version,  any changes that you have made are clearly indicated. --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  Note: historically GNAT provided these subprograms as a child of the
+ --  package Ada.Strings.Unbounded. So we implement this new Ada 2005 package
+ --  by renaming the subprograms in that child. This is a more straightforward
+ --  implementation anyway, since we need access to the internal representation
+ --  of Ada.Strings.Unbounded.Unbounded_String.
+ 
+ 
+ with Ada.Strings.Unbounded;
+ with Ada.Strings.Unbounded.Text_IO;
+ 
+ package Ada.Text_IO.Unbounded_IO is
+ 
+    procedure Put
+      (File : File_Type;
+       Item : Strings.Unbounded.Unbounded_String)
+    renames Ada.Strings.Unbounded.Text_IO.Put;
+ 
+    procedure Put
+      (Item : Strings.Unbounded.Unbounded_String)
+    renames Ada.Strings.Unbounded.Text_IO.Put;
+ 
+    procedure Put_Line
+      (File : Text_IO.File_Type;
+       Item : Strings.Unbounded.Unbounded_String)
+    renames Ada.Strings.Unbounded.Text_IO.Put_Line;
+ 
+    procedure Put_Line
+      (Item : Strings.Unbounded.Unbounded_String)
+    renames Ada.Strings.Unbounded.Text_IO.Put_Line;
+ 
+    function Get_Line
+      (File : File_Type) return Strings.Unbounded.Unbounded_String
+    renames Ada.Strings.Unbounded.Text_IO.Get_Line;
+ 
+    function Get_Line return Strings.Unbounded.Unbounded_String
+    renames Ada.Strings.Unbounded.Text_IO.Get_Line;
+ 
+    procedure Get_Line
+       (File : File_Type;
+        Item : out Strings.Unbounded.Unbounded_String)
+    renames Ada.Strings.Unbounded.Text_IO.Get_Line;
+ 
+    procedure Get_Line
+      (Item : out Strings.Unbounded.Unbounded_String)
+    renames Ada.Strings.Unbounded.Text_IO.Get_Line;
+ 
+ end Ada.Text_IO.Unbounded_IO;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-witeio.adb gcc-4.0.0/gcc/ada/a-witeio.adb
*** gcc-3.4.3/gcc/ada/a-witeio.adb	Mon Dec 15 11:51:00 2003
--- gcc-4.0.0/gcc/ada/a-witeio.adb	Thu Feb 10 13:51:39 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with System.CRTL;
*** 40,45 ****
--- 40,46 ----
  with System.File_IO;
  with System.WCh_Cnv;       use System.WCh_Cnv;
  with System.WCh_Con;       use System.WCh_Con;
+ 
  with Unchecked_Conversion;
  with Unchecked_Deallocation;
  
*************** package body Ada.Wide_Text_IO is
*** 65,78 ****
     -- Local Subprograms --
     -----------------------
  
!    function Getc_Immed (File : in File_Type) return int;
     --  This routine is identical to Getc, except that the read is done in
     --  Get_Immediate mode (i.e. without waiting for a line return).
  
     function Get_Wide_Char_Immed
       (C    : Character;
!       File : File_Type)
!       return Wide_Character;
     --  This routine is identical to Get_Wide_Char, except that the reads are
     --  done in Get_Immediate mode (i.e. without waiting for a line return).
  
--- 66,78 ----
     -- Local Subprograms --
     -----------------------
  
!    function Getc_Immed (File : File_Type) return int;
     --  This routine is identical to Getc, except that the read is done in
     --  Get_Immediate mode (i.e. without waiting for a line return).
  
     function Get_Wide_Char_Immed
       (C    : Character;
!       File : File_Type) return Wide_Character;
     --  This routine is identical to Get_Wide_Char, except that the reads are
     --  done in Get_Immediate mode (i.e. without waiting for a line return).
  
*************** package body Ada.Wide_Text_IO is
*** 86,96 ****
     -------------------
  
     function AFCB_Allocate
!      (Control_Block : Wide_Text_AFCB)
!       return          FCB.AFCB_Ptr
     is
        pragma Unreferenced (Control_Block);
- 
     begin
        return new Wide_Text_AFCB;
     end AFCB_Allocate;
--- 86,94 ----
     -------------------
  
     function AFCB_Allocate
!      (Control_Block : Wide_Text_AFCB) return FCB.AFCB_Ptr
     is
        pragma Unreferenced (Control_Block);
     begin
        return new Wide_Text_AFCB;
     end AFCB_Allocate;
*************** package body Ada.Wide_Text_IO is
*** 148,154 ****
     --  to exceed the value of Count'Last, i.e. no check is required for
     --  overflow raising layout error.
  
!    function Col (File : in File_Type) return Positive_Count is
     begin
        FIO.Check_File_Open (AP (File));
        return File.Col;
--- 146,152 ----
     --  to exceed the value of Count'Last, i.e. no check is required for
     --  overflow raising layout error.
  
!    function Col (File : File_Type) return Positive_Count is
     begin
        FIO.Check_File_Open (AP (File));
        return File.Col;
*************** package body Ada.Wide_Text_IO is
*** 165,173 ****
  
     procedure Create
       (File : in out File_Type;
!       Mode : in File_Mode := Out_File;
!       Name : in String := "";
!       Form : in String := "")
     is
        Dummy_File_Control_Block : Wide_Text_AFCB;
        pragma Warnings (Off, Dummy_File_Control_Block);
--- 163,171 ----
  
     procedure Create
       (File : in out File_Type;
!       Mode : File_Mode := Out_File;
!       Name : String := "";
!       Form : String := "")
     is
        Dummy_File_Control_Block : Wide_Text_AFCB;
        pragma Warnings (Off, Dummy_File_Control_Block);
*************** package body Ada.Wide_Text_IO is
*** 241,247 ****
     -- End_Of_File --
     -----------------
  
!    function End_Of_File (File : in File_Type) return Boolean is
        ch  : int;
  
     begin
--- 239,245 ----
     -- End_Of_File --
     -----------------
  
!    function End_Of_File (File : File_Type) return Boolean is
        ch  : int;
  
     begin
*************** package body Ada.Wide_Text_IO is
*** 302,308 ****
     -- End_Of_Line --
     -----------------
  
!    function End_Of_Line (File : in File_Type) return Boolean is
        ch : int;
  
     begin
--- 300,306 ----
     -- End_Of_Line --
     -----------------
  
!    function End_Of_Line (File : File_Type) return Boolean is
        ch : int;
  
     begin
*************** package body Ada.Wide_Text_IO is
*** 336,342 ****
     -- End_Of_Page --
     -----------------
  
!    function End_Of_Page (File : in File_Type) return Boolean is
        ch  : int;
  
     begin
--- 334,340 ----
     -- End_Of_Page --
     -----------------
  
!    function End_Of_Page (File : File_Type) return Boolean is
        ch  : int;
  
     begin
*************** package body Ada.Wide_Text_IO is
*** 386,392 ****
     -- Flush --
     -----------
  
!    procedure Flush (File : in File_Type) is
     begin
        FIO.Flush (AP (File));
     end Flush;
--- 384,390 ----
     -- Flush --
     -----------
  
!    procedure Flush (File : File_Type) is
     begin
        FIO.Flush (AP (File));
     end Flush;
*************** package body Ada.Wide_Text_IO is
*** 400,406 ****
     -- Form --
     ----------
  
!    function Form (File : in File_Type) return String is
     begin
        return FIO.Form (AP (File));
     end Form;
--- 398,404 ----
     -- Form --
     ----------
  
!    function Form (File : File_Type) return String is
     begin
        return FIO.Form (AP (File));
     end Form;
*************** package body Ada.Wide_Text_IO is
*** 410,416 ****
     ---------
  
     procedure Get
!      (File : in File_Type;
        Item : out Wide_Character)
     is
        C  : Character;
--- 408,414 ----
     ---------
  
     procedure Get
!      (File : File_Type;
        Item : out Wide_Character)
     is
        C  : Character;
*************** package body Ada.Wide_Text_IO is
*** 434,440 ****
     end Get;
  
     procedure Get
!      (File : in File_Type;
        Item : out Wide_String)
     is
     begin
--- 432,438 ----
     end Get;
  
     procedure Get
!      (File : File_Type;
        Item : out Wide_String)
     is
     begin
*************** package body Ada.Wide_Text_IO is
*** 453,459 ****
     -------------------
  
     procedure Get_Character
!      (File : in File_Type;
        Item : out Character)
     is
        ch : int;
--- 451,457 ----
     -------------------
  
     procedure Get_Character
!      (File : File_Type;
        Item : out Character)
     is
        ch : int;
*************** package body Ada.Wide_Text_IO is
*** 501,507 ****
     -------------------
  
     procedure Get_Immediate
!      (File : in File_Type;
        Item : out Wide_Character)
     is
        ch : int;
--- 499,505 ----
     -------------------
  
     procedure Get_Immediate
!      (File : File_Type;
        Item : out Wide_Character)
     is
        ch : int;
*************** package body Ada.Wide_Text_IO is
*** 537,543 ****
     end Get_Immediate;
  
     procedure Get_Immediate
!      (File      : in File_Type;
        Item      : out Wide_Character;
        Available : out Boolean)
     is
--- 535,541 ----
     end Get_Immediate;
  
     procedure Get_Immediate
!      (File      : File_Type;
        Item      : out Wide_Character;
        Available : out Boolean)
     is
*************** package body Ada.Wide_Text_IO is
*** 580,586 ****
     --------------
  
     procedure Get_Line
!      (File : in File_Type;
        Item : out Wide_String;
        Last : out Natural)
     is
--- 578,584 ----
     --------------
  
     procedure Get_Line
!      (File : File_Type;
        Item : out Wide_String;
        Last : out Natural)
     is
*************** package body Ada.Wide_Text_IO is
*** 671,692 ****
        Get_Line (Current_In, Item, Last);
     end Get_Line;
  
     -------------------
     -- Get_Wide_Char --
     -------------------
  
     function Get_Wide_Char
       (C    : Character;
!       File : File_Type)
!       return Wide_Character
     is
        function In_Char return Character;
        --  Function used to obtain additional characters it the wide character
        --  sequence is more than one character long.
  
        function In_Char return Character is
           ch : constant Integer := Getc (File);
- 
        begin
           if ch = EOF then
              raise End_Error;
--- 669,746 ----
        Get_Line (Current_In, Item, Last);
     end Get_Line;
  
+    function Get_Line (File : File_Type) return Wide_String is
+       Buffer : Wide_String (1 .. 500);
+       Last   : Natural;
+ 
+       function Get_Rest (S : Wide_String) return Wide_String;
+       --  This is a recursive function that reads the rest of the line and
+       --  returns it. S is the part read so far.
+ 
+       --------------
+       -- Get_Rest --
+       --------------
+ 
+       function Get_Rest (S : Wide_String) return Wide_String is
+ 
+          --  Each time we allocate a buffer the same size as what we have
+          --  read so far. This limits us to a logarithmic number of calls
+          --  to Get_Rest and also ensures only a linear use of stack space.
+ 
+          Buffer : Wide_String (1 .. S'Length);
+          Last   : Natural;
+ 
+       begin
+          Get_Line (File, Buffer, Last);
+ 
+          declare
+             R : constant Wide_String := S & Buffer (1 .. Last);
+          begin
+             if Last < Buffer'Last then
+                return R;
+             else
+                return Get_Rest (R);
+             end if;
+          end;
+       end Get_Rest;
+ 
+    --  Start of processing for Get_Line
+ 
+    begin
+       Get_Line (File, Buffer, Last);
+ 
+       if Last < Buffer'Last then
+          return Buffer (1 .. Last);
+       else
+          return Get_Rest (Buffer (1 .. Last));
+       end if;
+    end Get_Line;
+ 
+    function Get_Line return Wide_String is
+    begin
+       return Get_Line (Current_In);
+    end Get_Line;
+ 
     -------------------
     -- Get_Wide_Char --
     -------------------
  
     function Get_Wide_Char
       (C    : Character;
!       File : File_Type) return Wide_Character
     is
        function In_Char return Character;
        --  Function used to obtain additional characters it the wide character
        --  sequence is more than one character long.
  
+       function WC_In is new Char_Sequence_To_Wide_Char (In_Char);
+ 
+       -------------
+       -- In_Char --
+       -------------
+ 
        function In_Char return Character is
           ch : constant Integer := Getc (File);
        begin
           if ch = EOF then
              raise End_Error;
*************** package body Ada.Wide_Text_IO is
*** 695,701 ****
           end if;
        end In_Char;
  
!       function WC_In is new Char_Sequence_To_Wide_Char (In_Char);
  
     begin
        return WC_In (C, File.WC_Method);
--- 749,755 ----
           end if;
        end In_Char;
  
!    --  Start of processing for In_Char
  
     begin
        return WC_In (C, File.WC_Method);
*************** package body Ada.Wide_Text_IO is
*** 707,722 ****
  
     function Get_Wide_Char_Immed
       (C    : Character;
!       File : File_Type)
!       return Wide_Character
     is
        function In_Char return Character;
        --  Function used to obtain additional characters it the wide character
        --  sequence is more than one character long.
  
        function In_Char return Character is
           ch : constant Integer := Getc_Immed (File);
- 
        begin
           if ch = EOF then
              raise End_Error;
--- 761,780 ----
  
     function Get_Wide_Char_Immed
       (C    : Character;
!       File : File_Type) return Wide_Character
     is
        function In_Char return Character;
        --  Function used to obtain additional characters it the wide character
        --  sequence is more than one character long.
  
+       function WC_In is new Char_Sequence_To_Wide_Char (In_Char);
+ 
+       -------------
+       -- In_Char --
+       -------------
+ 
        function In_Char return Character is
           ch : constant Integer := Getc_Immed (File);
        begin
           if ch = EOF then
              raise End_Error;
*************** package body Ada.Wide_Text_IO is
*** 725,731 ****
           end if;
        end In_Char;
  
!       function WC_In is new Char_Sequence_To_Wide_Char (In_Char);
  
     begin
        return WC_In (C, File.WC_Method);
--- 783,789 ----
           end if;
        end In_Char;
  
!    --  Start of processing for Get_Wide_Char_Immed
  
     begin
        return WC_In (C, File.WC_Method);
*************** package body Ada.Wide_Text_IO is
*** 752,758 ****
     -- Getc_Immed --
     ----------------
  
!    function Getc_Immed (File : in File_Type) return int is
        ch          : int;
        end_of_file : int;
  
--- 810,816 ----
     -- Getc_Immed --
     ----------------
  
!    function Getc_Immed (File : File_Type) return int is
        ch          : int;
        end_of_file : int;
  
*************** package body Ada.Wide_Text_IO is
*** 785,791 ****
     -- Is_Open --
     -------------
  
!    function Is_Open (File : in File_Type) return Boolean is
     begin
        return FIO.Is_Open (AP (File));
     end Is_Open;
--- 843,849 ----
     -- Is_Open --
     -------------
  
!    function Is_Open (File : File_Type) return Boolean is
     begin
        return FIO.Is_Open (AP (File));
     end Is_Open;
*************** package body Ada.Wide_Text_IO is
*** 798,804 ****
     --  to exceed the value of Count'Last, i.e. no check is required for
     --  overflow raising layout error.
  
!    function Line (File : in File_Type) return Positive_Count is
     begin
        FIO.Check_File_Open (AP (File));
        return File.Line;
--- 856,862 ----
     --  to exceed the value of Count'Last, i.e. no check is required for
     --  overflow raising layout error.
  
!    function Line (File : File_Type) return Positive_Count is
     begin
        FIO.Check_File_Open (AP (File));
        return File.Line;
*************** package body Ada.Wide_Text_IO is
*** 813,819 ****
     -- Line_Length --
     -----------------
  
!    function Line_Length (File : in File_Type) return Count is
     begin
        FIO.Check_Write_Status (AP (File));
        return File.Line_Length;
--- 871,877 ----
     -- Line_Length --
     -----------------
  
!    function Line_Length (File : File_Type) return Count is
     begin
        FIO.Check_Write_Status (AP (File));
        return File.Line_Length;
*************** package body Ada.Wide_Text_IO is
*** 829,835 ****
     ----------------
  
     procedure Look_Ahead
!      (File        : in File_Type;
        Item        : out Wide_Character;
        End_Of_Line : out Boolean)
     is
--- 887,893 ----
     ----------------
  
     procedure Look_Ahead
!      (File        : File_Type;
        Item        : out Wide_Character;
        End_Of_Line : out Boolean)
     is
*************** package body Ada.Wide_Text_IO is
*** 902,908 ****
     -- Mode --
     ----------
  
!    function Mode (File : in File_Type) return File_Mode is
     begin
        return To_TIO (FIO.Mode (AP (File)));
     end Mode;
--- 960,966 ----
     -- Mode --
     ----------
  
!    function Mode (File : File_Type) return File_Mode is
     begin
        return To_TIO (FIO.Mode (AP (File)));
     end Mode;
*************** package body Ada.Wide_Text_IO is
*** 911,917 ****
     -- Name --
     ----------
  
!    function Name (File : in File_Type) return String is
     begin
        return FIO.Name (AP (File));
     end Name;
--- 969,975 ----
     -- Name --
     ----------
  
!    function Name (File : File_Type) return String is
     begin
        return FIO.Name (AP (File));
     end Name;
*************** package body Ada.Wide_Text_IO is
*** 921,928 ****
     --------------
  
     procedure New_Line
!      (File    : in File_Type;
!       Spacing : in Positive_Count := 1)
     is
     begin
        --  Raise Constraint_Error if out of range value. The reason for this
--- 979,986 ----
     --------------
  
     procedure New_Line
!      (File    : File_Type;
!       Spacing : Positive_Count := 1)
     is
     begin
        --  Raise Constraint_Error if out of range value. The reason for this
*************** package body Ada.Wide_Text_IO is
*** 951,957 ****
        File.Col := 1;
     end New_Line;
  
!    procedure New_Line (Spacing : in Positive_Count := 1) is
     begin
        New_Line (Current_Out, Spacing);
     end New_Line;
--- 1009,1015 ----
        File.Col := 1;
     end New_Line;
  
!    procedure New_Line (Spacing : Positive_Count := 1) is
     begin
        New_Line (Current_Out, Spacing);
     end New_Line;
*************** package body Ada.Wide_Text_IO is
*** 960,966 ****
     -- New_Page --
     --------------
  
!    procedure New_Page (File : in File_Type) is
     begin
        FIO.Check_Write_Status (AP (File));
  
--- 1018,1024 ----
     -- New_Page --
     --------------
  
!    procedure New_Page (File : File_Type) is
     begin
        FIO.Check_Write_Status (AP (File));
  
*************** package body Ada.Wide_Text_IO is
*** 1009,1017 ****
  
     procedure Open
       (File : in out File_Type;
!       Mode : in File_Mode;
!       Name : in String;
!       Form : in String := "")
     is
        Dummy_File_Control_Block : Wide_Text_AFCB;
        pragma Warnings (Off, Dummy_File_Control_Block);
--- 1067,1075 ----
  
     procedure Open
       (File : in out File_Type;
!       Mode : File_Mode;
!       Name : String;
!       Form : String := "")
     is
        Dummy_File_Control_Block : Wide_Text_AFCB;
        pragma Warnings (Off, Dummy_File_Control_Block);
*************** package body Ada.Wide_Text_IO is
*** 1038,1044 ****
     --  to exceed the value of Count'Last, i.e. no check is required for
     --  overflow raising layout error.
  
!    function Page (File : in File_Type) return Positive_Count is
     begin
        FIO.Check_File_Open (AP (File));
        return File.Page;
--- 1096,1102 ----
     --  to exceed the value of Count'Last, i.e. no check is required for
     --  overflow raising layout error.
  
!    function Page (File : File_Type) return Positive_Count is
     begin
        FIO.Check_File_Open (AP (File));
        return File.Page;
*************** package body Ada.Wide_Text_IO is
*** 1053,1059 ****
     -- Page_Length --
     -----------------
  
!    function Page_Length (File : in File_Type) return Count is
     begin
        FIO.Check_Write_Status (AP (File));
        return File.Page_Length;
--- 1111,1117 ----
     -- Page_Length --
     -----------------
  
!    function Page_Length (File : File_Type) return Count is
     begin
        FIO.Check_Write_Status (AP (File));
        return File.Page_Length;
*************** package body Ada.Wide_Text_IO is
*** 1069,1093 ****
     ---------
  
     procedure Put
!      (File : in File_Type;
!       Item : in Wide_Character)
     is
        procedure Out_Char (C : Character);
        --  Procedure to output one character of a wide character sequence
  
        procedure Out_Char (C : Character) is
        begin
           Putc (Character'Pos (C), File);
        end Out_Char;
  
!       procedure WC_Out is new Wide_Char_To_Char_Sequence (Out_Char);
  
     begin
        WC_Out (Item, File.WC_Method);
        File.Col := File.Col + 1;
     end Put;
  
!    procedure Put (Item : in Wide_Character) is
     begin
        Put (Current_Out, Item);
     end Put;
--- 1127,1156 ----
     ---------
  
     procedure Put
!      (File : File_Type;
!       Item : Wide_Character)
     is
        procedure Out_Char (C : Character);
        --  Procedure to output one character of a wide character sequence
  
+       procedure WC_Out is new Wide_Char_To_Char_Sequence (Out_Char);
+       --------------
+       -- Out_Char --
+       --------------
+ 
        procedure Out_Char (C : Character) is
        begin
           Putc (Character'Pos (C), File);
        end Out_Char;
  
!    --  Start of processing for Put
  
     begin
        WC_Out (Item, File.WC_Method);
        File.Col := File.Col + 1;
     end Put;
  
!    procedure Put (Item : Wide_Character) is
     begin
        Put (Current_Out, Item);
     end Put;
*************** package body Ada.Wide_Text_IO is
*** 1097,1104 ****
     ---------
  
     procedure Put
!      (File : in File_Type;
!       Item : in Wide_String)
     is
     begin
        for J in Item'Range loop
--- 1160,1167 ----
     ---------
  
     procedure Put
!      (File : File_Type;
!       Item : Wide_String)
     is
     begin
        for J in Item'Range loop
*************** package body Ada.Wide_Text_IO is
*** 1106,1112 ****
        end loop;
     end Put;
  
!    procedure Put (Item : in Wide_String) is
     begin
        Put (Current_Out, Item);
     end Put;
--- 1169,1175 ----
        end loop;
     end Put;
  
!    procedure Put (Item : Wide_String) is
     begin
        Put (Current_Out, Item);
     end Put;
*************** package body Ada.Wide_Text_IO is
*** 1116,1130 ****
     --------------
  
     procedure Put_Line
!      (File : in File_Type;
!       Item : in Wide_String)
     is
     begin
        Put (File, Item);
        New_Line (File);
     end Put_Line;
  
!    procedure Put_Line (Item : in Wide_String) is
     begin
        Put (Current_Out, Item);
        New_Line (Current_Out);
--- 1179,1193 ----
     --------------
  
     procedure Put_Line
!      (File : File_Type;
!       Item : Wide_String)
     is
     begin
        Put (File, Item);
        New_Line (File);
     end Put_Line;
  
!    procedure Put_Line (Item : Wide_String) is
     begin
        Put (Current_Out, Item);
        New_Line (Current_Out);
*************** package body Ada.Wide_Text_IO is
*** 1231,1237 ****
  
     procedure Reset
       (File : in out File_Type;
!       Mode : in File_Mode)
     is
     begin
        --  Don't allow change of mode for current file (RM A.10.2(5))
--- 1294,1300 ----
  
     procedure Reset
       (File : in out File_Type;
!       Mode : File_Mode)
     is
     begin
        --  Don't allow change of mode for current file (RM A.10.2(5))
*************** package body Ada.Wide_Text_IO is
*** 1273,1280 ****
     -------------
  
     procedure Set_Col
!      (File : in File_Type;
!       To   : in Positive_Count)
     is
        ch : int;
  
--- 1336,1343 ----
     -------------
  
     procedure Set_Col
!      (File : File_Type;
!       To   : Positive_Count)
     is
        ch : int;
  
*************** package body Ada.Wide_Text_IO is
*** 1333,1339 ****
        end if;
     end Set_Col;
  
!    procedure Set_Col (To : in Positive_Count) is
     begin
        Set_Col (Current_Out, To);
     end Set_Col;
--- 1396,1402 ----
        end if;
     end Set_Col;
  
!    procedure Set_Col (To : Positive_Count) is
     begin
        Set_Col (Current_Out, To);
     end Set_Col;
*************** package body Ada.Wide_Text_IO is
*** 1342,1348 ****
     -- Set_Error --
     ---------------
  
!    procedure Set_Error (File : in File_Type) is
     begin
        FIO.Check_Write_Status (AP (File));
        Current_Err := File;
--- 1405,1411 ----
     -- Set_Error --
     ---------------
  
!    procedure Set_Error (File : File_Type) is
     begin
        FIO.Check_Write_Status (AP (File));
        Current_Err := File;
*************** package body Ada.Wide_Text_IO is
*** 1352,1358 ****
     -- Set_Input --
     ---------------
  
!    procedure Set_Input (File : in File_Type) is
     begin
        FIO.Check_Read_Status (AP (File));
        Current_In := File;
--- 1415,1421 ----
     -- Set_Input --
     ---------------
  
!    procedure Set_Input (File : File_Type) is
     begin
        FIO.Check_Read_Status (AP (File));
        Current_In := File;
*************** package body Ada.Wide_Text_IO is
*** 1363,1370 ****
     --------------
  
     procedure Set_Line
!      (File : in File_Type;
!       To   : in Positive_Count)
     is
     begin
        --  Raise Constraint_Error if out of range value. The reason for this
--- 1426,1433 ----
     --------------
  
     procedure Set_Line
!      (File : File_Type;
!       To   : Positive_Count)
     is
     begin
        --  Raise Constraint_Error if out of range value. The reason for this
*************** package body Ada.Wide_Text_IO is
*** 1401,1407 ****
        end if;
     end Set_Line;
  
!    procedure Set_Line (To : in Positive_Count) is
     begin
        Set_Line (Current_Out, To);
     end Set_Line;
--- 1464,1470 ----
        end if;
     end Set_Line;
  
!    procedure Set_Line (To : Positive_Count) is
     begin
        Set_Line (Current_Out, To);
     end Set_Line;
*************** package body Ada.Wide_Text_IO is
*** 1410,1416 ****
     -- Set_Line_Length --
     ---------------------
  
!    procedure Set_Line_Length (File : in File_Type; To : in Count) is
     begin
        --  Raise Constraint_Error if out of range value. The reason for this
        --  explicit test is that we don't want junk values around, even if
--- 1473,1479 ----
     -- Set_Line_Length --
     ---------------------
  
!    procedure Set_Line_Length (File : File_Type; To : Count) is
     begin
        --  Raise Constraint_Error if out of range value. The reason for this
        --  explicit test is that we don't want junk values around, even if
*************** package body Ada.Wide_Text_IO is
*** 1424,1430 ****
        File.Line_Length := To;
     end Set_Line_Length;
  
!    procedure Set_Line_Length (To : in Count) is
     begin
        Set_Line_Length (Current_Out, To);
     end Set_Line_Length;
--- 1487,1493 ----
        File.Line_Length := To;
     end Set_Line_Length;
  
!    procedure Set_Line_Length (To : Count) is
     begin
        Set_Line_Length (Current_Out, To);
     end Set_Line_Length;
*************** package body Ada.Wide_Text_IO is
*** 1433,1439 ****
     -- Set_Output --
     ----------------
  
!    procedure Set_Output (File : in File_Type) is
     begin
        FIO.Check_Write_Status (AP (File));
        Current_Out := File;
--- 1496,1502 ----
     -- Set_Output --
     ----------------
  
!    procedure Set_Output (File : File_Type) is
     begin
        FIO.Check_Write_Status (AP (File));
        Current_Out := File;
*************** package body Ada.Wide_Text_IO is
*** 1443,1449 ****
     -- Set_Page_Length --
     ---------------------
  
!    procedure Set_Page_Length (File : in File_Type; To : in Count) is
     begin
        --  Raise Constraint_Error if out of range value. The reason for this
        --  explicit test is that we don't want junk values around, even if
--- 1506,1512 ----
     -- Set_Page_Length --
     ---------------------
  
!    procedure Set_Page_Length (File : File_Type; To : Count) is
     begin
        --  Raise Constraint_Error if out of range value. The reason for this
        --  explicit test is that we don't want junk values around, even if
*************** package body Ada.Wide_Text_IO is
*** 1457,1463 ****
        File.Page_Length := To;
     end Set_Page_Length;
  
!    procedure Set_Page_Length (To : in Count) is
     begin
        Set_Page_Length (Current_Out, To);
     end Set_Page_Length;
--- 1520,1526 ----
        File.Page_Length := To;
     end Set_Page_Length;
  
!    procedure Set_Page_Length (To : Count) is
     begin
        Set_Page_Length (Current_Out, To);
     end Set_Page_Length;
*************** package body Ada.Wide_Text_IO is
*** 1497,1504 ****
     ---------------
  
     procedure Skip_Line
!      (File    : in File_Type;
!       Spacing : in Positive_Count := 1)
     is
        ch : int;
  
--- 1560,1567 ----
     ---------------
  
     procedure Skip_Line
!      (File    : File_Type;
!       Spacing : Positive_Count := 1)
     is
        ch : int;
  
*************** package body Ada.Wide_Text_IO is
*** 1580,1586 ****
        File.Before_Wide_Character := False;
     end Skip_Line;
  
!    procedure Skip_Line (Spacing : in Positive_Count := 1) is
     begin
        Skip_Line (Current_In, Spacing);
     end Skip_Line;
--- 1643,1649 ----
        File.Before_Wide_Character := False;
     end Skip_Line;
  
!    procedure Skip_Line (Spacing : Positive_Count := 1) is
     begin
        Skip_Line (Current_In, Spacing);
     end Skip_Line;
*************** package body Ada.Wide_Text_IO is
*** 1589,1595 ****
     -- Skip_Page --
     ---------------
  
!    procedure Skip_Page (File : in File_Type) is
        ch : int;
  
     begin
--- 1652,1658 ----
     -- Skip_Page --
     ---------------
  
!    procedure Skip_Page (File : File_Type) is
        ch : int;
  
     begin
*************** package body Ada.Wide_Text_IO is
*** 1741,1747 ****
  
     procedure Write
       (File : in out Wide_Text_AFCB;
!       Item : in Stream_Element_Array)
     is
        Siz : constant size_t := Item'Length;
  
--- 1804,1810 ----
  
     procedure Write
       (File : in out Wide_Text_AFCB;
!       Item : Stream_Element_Array)
     is
        Siz : constant size_t := Item'Length;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/a-witeio.ads gcc-4.0.0/gcc/ada/a-witeio.ads
*** gcc-3.4.3/gcc/ada/a-witeio.ads	Tue Oct 21 13:41:55 2003
--- gcc-4.0.0/gcc/ada/a-witeio.ads	Thu Feb 10 13:51:39 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2000 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** package Ada.Wide_Text_IO is
*** 89,122 ****
  
     procedure Create
       (File : in out File_Type;
!       Mode : in File_Mode := Out_File;
!       Name : in String := "";
!       Form : in String := "");
  
     procedure Open
       (File : in out File_Type;
!       Mode : in File_Mode;
!       Name : in String;
!       Form : in String := "");
  
     procedure Close  (File : in out File_Type);
     procedure Delete (File : in out File_Type);
!    procedure Reset  (File : in out File_Type; Mode : in File_Mode);
     procedure Reset  (File : in out File_Type);
  
!    function Mode (File : in File_Type) return File_Mode;
!    function Name (File : in File_Type) return String;
!    function Form (File : in File_Type) return String;
  
!    function Is_Open (File : in File_Type) return Boolean;
  
     ------------------------------------------------------
     -- Control of default input, output and error files --
     ------------------------------------------------------
  
!    procedure Set_Input  (File : in File_Type);
!    procedure Set_Output (File : in File_Type);
!    procedure Set_Error  (File : in File_Type);
  
     function Standard_Input  return File_Type;
     function Standard_Output return File_Type;
--- 89,122 ----
  
     procedure Create
       (File : in out File_Type;
!       Mode : File_Mode := Out_File;
!       Name : String := "";
!       Form : String := "");
  
     procedure Open
       (File : in out File_Type;
!       Mode : File_Mode;
!       Name : String;
!       Form : String := "");
  
     procedure Close  (File : in out File_Type);
     procedure Delete (File : in out File_Type);
!    procedure Reset  (File : in out File_Type; Mode : File_Mode);
     procedure Reset  (File : in out File_Type);
  
!    function Mode (File : File_Type) return File_Mode;
!    function Name (File : File_Type) return String;
!    function Form (File : File_Type) return String;
  
!    function Is_Open (File : File_Type) return Boolean;
  
     ------------------------------------------------------
     -- Control of default input, output and error files --
     ------------------------------------------------------
  
!    procedure Set_Input  (File : File_Type);
!    procedure Set_Output (File : File_Type);
!    procedure Set_Error  (File : File_Type);
  
     function Standard_Input  return File_Type;
     function Standard_Output return File_Type;
*************** package Ada.Wide_Text_IO is
*** 143,218 ****
     --  Note: The paramter file is in out in the RM, but as pointed out
     --  in <<95-5166.a Tucker Taft 95-6-23>> this is clearly an oversight.
  
!    procedure Flush (File : in File_Type);
     procedure Flush;
  
     --------------------------------------------
     -- Specification of line and page lengths --
     --------------------------------------------
  
!    procedure Set_Line_Length (File : in File_Type; To : in Count);
!    procedure Set_Line_Length (To : in Count);
  
!    procedure Set_Page_Length (File : in File_Type; To : in Count);
!    procedure Set_Page_Length (To : in Count);
  
!    function Line_Length (File : in File_Type) return Count;
     function Line_Length return Count;
  
!    function Page_Length (File : in File_Type) return Count;
     function Page_Length return Count;
  
     ------------------------------------
     -- Column, Line, and Page Control --
     ------------------------------------
  
!    procedure New_Line (File : in File_Type; Spacing : in Positive_Count := 1);
!    procedure New_Line (Spacing : in Positive_Count := 1);
  
!    procedure Skip_Line (File : in File_Type; Spacing : in Positive_Count := 1);
!    procedure Skip_Line (Spacing : in Positive_Count := 1);
  
!    function End_Of_Line (File : in File_Type) return Boolean;
     function End_Of_Line return Boolean;
  
!    procedure New_Page (File : in File_Type);
     procedure New_Page;
  
!    procedure Skip_Page (File : in File_Type);
     procedure Skip_Page;
  
!    function End_Of_Page (File : in File_Type) return Boolean;
     function End_Of_Page return Boolean;
  
!    function End_Of_File (File : in File_Type) return Boolean;
     function End_Of_File return Boolean;
  
!    procedure Set_Col (File : in File_Type;  To : in Positive_Count);
!    procedure Set_Col (To : in Positive_Count);
  
!    procedure Set_Line (File : in File_Type; To : in Positive_Count);
!    procedure Set_Line (To : in Positive_Count);
  
!    function Col (File : in File_Type) return Positive_Count;
     function Col return Positive_Count;
  
!    function Line (File : in File_Type) return Positive_Count;
     function Line return Positive_Count;
  
!    function Page (File : in File_Type) return Positive_Count;
     function Page return Positive_Count;
  
     ----------------------------
     -- Character Input-Output --
     ----------------------------
  
!    procedure Get (File : in File_Type; Item : out Wide_Character);
     procedure Get (Item : out Wide_Character);
!    procedure Put (File : in File_Type; Item : in Wide_Character);
!    procedure Put (Item : in Wide_Character);
  
     procedure Look_Ahead
!      (File        : in File_Type;
        Item        : out Wide_Character;
        End_Of_Line : out Boolean);
  
--- 143,218 ----
     --  Note: The paramter file is in out in the RM, but as pointed out
     --  in <<95-5166.a Tucker Taft 95-6-23>> this is clearly an oversight.
  
!    procedure Flush (File : File_Type);
     procedure Flush;
  
     --------------------------------------------
     -- Specification of line and page lengths --
     --------------------------------------------
  
!    procedure Set_Line_Length (File : File_Type; To : Count);
!    procedure Set_Line_Length (To : Count);
  
!    procedure Set_Page_Length (File : File_Type; To : Count);
!    procedure Set_Page_Length (To : Count);
  
!    function Line_Length (File : File_Type) return Count;
     function Line_Length return Count;
  
!    function Page_Length (File : File_Type) return Count;
     function Page_Length return Count;
  
     ------------------------------------
     -- Column, Line, and Page Control --
     ------------------------------------
  
!    procedure New_Line (File : File_Type; Spacing : Positive_Count := 1);
!    procedure New_Line (Spacing : Positive_Count := 1);
  
!    procedure Skip_Line (File : File_Type; Spacing : Positive_Count := 1);
!    procedure Skip_Line (Spacing : Positive_Count := 1);
  
!    function End_Of_Line (File : File_Type) return Boolean;
     function End_Of_Line return Boolean;
  
!    procedure New_Page (File : File_Type);
     procedure New_Page;
  
!    procedure Skip_Page (File : File_Type);
     procedure Skip_Page;
  
!    function End_Of_Page (File : File_Type) return Boolean;
     function End_Of_Page return Boolean;
  
!    function End_Of_File (File : File_Type) return Boolean;
     function End_Of_File return Boolean;
  
!    procedure Set_Col (File : File_Type;  To : Positive_Count);
!    procedure Set_Col (To : Positive_Count);
  
!    procedure Set_Line (File : File_Type; To : Positive_Count);
!    procedure Set_Line (To : Positive_Count);
  
!    function Col (File : File_Type) return Positive_Count;
     function Col return Positive_Count;
  
!    function Line (File : File_Type) return Positive_Count;
     function Line return Positive_Count;
  
!    function Page (File : File_Type) return Positive_Count;
     function Page return Positive_Count;
  
     ----------------------------
     -- Character Input-Output --
     ----------------------------
  
!    procedure Get (File : File_Type; Item : out Wide_Character);
     procedure Get (Item : out Wide_Character);
!    procedure Put (File : File_Type; Item : Wide_Character);
!    procedure Put (Item : Wide_Character);
  
     procedure Look_Ahead
!      (File        : File_Type;
        Item        : out Wide_Character;
        End_Of_Line : out Boolean);
  
*************** package Ada.Wide_Text_IO is
*** 221,234 ****
        End_Of_Line : out Boolean);
  
     procedure Get_Immediate
!      (File : in File_Type;
        Item : out Wide_Character);
  
     procedure Get_Immediate
       (Item : out Wide_Character);
  
     procedure Get_Immediate
!      (File      : in File_Type;
        Item      : out Wide_Character;
        Available : out Boolean);
  
--- 221,234 ----
        End_Of_Line : out Boolean);
  
     procedure Get_Immediate
!      (File : File_Type;
        Item : out Wide_Character);
  
     procedure Get_Immediate
       (Item : out Wide_Character);
  
     procedure Get_Immediate
!      (File      : File_Type;
        Item      : out Wide_Character;
        Available : out Boolean);
  
*************** package Ada.Wide_Text_IO is
*** 240,252 ****
     -- String Input-Output --
     -------------------------
  
!    procedure Get (File : in File_Type; Item : out Wide_String);
     procedure Get (Item : out Wide_String);
!    procedure Put (File : in File_Type; Item : in Wide_String);
!    procedure Put (Item : in Wide_String);
  
     procedure Get_Line
!      (File : in File_Type;
        Item : out Wide_String;
        Last : out Natural);
  
--- 240,252 ----
     -- String Input-Output --
     -------------------------
  
!    procedure Get (File : File_Type; Item : out Wide_String);
     procedure Get (Item : out Wide_String);
!    procedure Put (File : File_Type; Item : Wide_String);
!    procedure Put (Item : Wide_String);
  
     procedure Get_Line
!      (File : File_Type;
        Item : out Wide_String;
        Last : out Natural);
  
*************** package Ada.Wide_Text_IO is
*** 254,265 ****
       (Item : out Wide_String;
        Last : out Natural);
  
     procedure Put_Line
!      (File : in File_Type;
!       Item : in Wide_String);
  
     procedure Put_Line
!      (Item : in Wide_String);
  
     ---------------------------------------
     -- Generic packages for Input-Output --
--- 254,271 ----
       (Item : out Wide_String;
        Last : out Natural);
  
+    function Get_Line (File : File_Type) return Wide_String;
+    pragma Ada_05 (Get_Line);
+ 
+    function Get_Line return Wide_String;
+    pragma Ada_05 (Get_Line);
+ 
     procedure Put_Line
!      (File : File_Type;
!       Item : Wide_String);
  
     procedure Put_Line
!      (Item : Wide_String);
  
     ---------------------------------------
     -- Generic packages for Input-Output --
*************** private
*** 398,404 ****
  
     procedure Write
       (File : in out Wide_Text_AFCB;
!       Item : in Ada.Streams.Stream_Element_Array);
     --  Write operation used when Wide_Text_IO file is treated as a Stream
  
     ------------------------
--- 404,410 ----
  
     procedure Write
       (File : in out Wide_Text_AFCB;
!       Item : Ada.Streams.Stream_Element_Array);
     --  Write operation used when Wide_Text_IO file is treated as a Stream
  
     ------------------------
*************** private
*** 440,446 ****
     --  occurs. The result is EOF if the end of file was read.
  
     procedure Get_Character
!      (File : in File_Type;
        Item : out Character);
     --  This is essentially a copy of the normal Get routine from Text_IO. It
     --  obtains a single character from the input file File, and places it in
--- 446,452 ----
     --  occurs. The result is EOF if the end of file was read.
  
     procedure Get_Character
!      (File : File_Type;
        Item : out Character);
     --  This is essentially a copy of the normal Get routine from Text_IO. It
     --  obtains a single character from the input file File, and places it in
*************** private
*** 449,456 ****
  
     function Get_Wide_Char
       (C    : Character;
!       File : File_Type)
!       return Wide_Character;
     --  This function is shared by Get and Get_Immediate to extract a wide
     --  character value from the given File. The first byte has already been
     --  read and is passed in C. The wide character value is returned as the
--- 455,461 ----
  
     function Get_Wide_Char
       (C    : Character;
!       File : File_Type) return Wide_Character;
     --  This function is shared by Get and Get_Immediate to extract a wide
     --  character value from the given File. The first byte has already been
     --  read and is passed in C. The wide character value is returned as the
diff -Nrcpad gcc-3.4.3/gcc/ada/a-wtcoau.adb gcc-4.0.0/gcc/ada/a-wtcoau.adb
*** gcc-3.4.3/gcc/ada/a-wtcoau.adb	Thu Apr 24 17:53:56 2003
--- gcc-4.0.0/gcc/ada/a-wtcoau.adb	Thu Feb 10 13:51:40 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --   Copyright (C) 1992,1993,1994,1995,1996 Free Software Foundation, Inc.  --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Ada.Wide_Text_IO.Complex_Au
*** 45,51 ****
     ---------
  
     procedure Get
!      (File  : in  File_Type;
        ItemR : out Long_Long_Float;
        ItemI : out Long_Long_Float;
        Width : Field)
--- 45,51 ----
     ---------
  
     procedure Get
!      (File  : File_Type;
        ItemR : out Long_Long_Float;
        ItemI : out Long_Long_Float;
        Width : Field)
*************** package body Ada.Wide_Text_IO.Complex_Au
*** 96,102 ****
     ----------
  
     procedure Gets
!      (From  : in String;
        ItemR : out Long_Long_Float;
        ItemI : out Long_Long_Float;
        Last  : out Positive)
--- 96,102 ----
     ----------
  
     procedure Gets
!      (From  : String;
        ItemR : out Long_Long_Float;
        ItemI : out Long_Long_Float;
        Last  : out Positive)
*************** package body Ada.Wide_Text_IO.Complex_Au
*** 163,170 ****
       (To    : out String;
        ItemR : Long_Long_Float;
        ItemI : Long_Long_Float;
!       Aft   : in  Field;
!       Exp   : in  Field)
     is
        I_String : String (1 .. 3 * Field'Last);
        R_String : String (1 .. 3 * Field'Last);
--- 163,170 ----
       (To    : out String;
        ItemR : Long_Long_Float;
        ItemI : Long_Long_Float;
!       Aft   :  Field;
!       Exp   :  Field)
     is
        I_String : String (1 .. 3 * Field'Last);
        R_String : String (1 .. 3 * Field'Last);
diff -Nrcpad gcc-3.4.3/gcc/ada/a-wtcoau.ads gcc-4.0.0/gcc/ada/a-wtcoau.ads
*** gcc-3.4.3/gcc/ada/a-wtcoau.ads	Thu Apr 24 17:53:56 2003
--- gcc-4.0.0/gcc/ada/a-wtcoau.ads	Thu Feb 10 13:51:40 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --   Copyright (C) 1992,1993,1994,1995,1996 Free Software Foundation, Inc.  --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 42,48 ****
  package Ada.Wide_Text_IO.Complex_Aux is
  
     procedure Get
!      (File  : in  File_Type;
        ItemR : out Long_Long_Float;
        ItemI : out Long_Long_Float;
        Width : Field);
--- 42,48 ----
  package Ada.Wide_Text_IO.Complex_Aux is
  
     procedure Get
!      (File  : File_Type;
        ItemR : out Long_Long_Float;
        ItemI : out Long_Long_Float;
        Width : Field);
diff -Nrcpad gcc-3.4.3/gcc/ada/a-wtcoio.adb gcc-4.0.0/gcc/ada/a-wtcoio.adb
*** gcc-3.4.3/gcc/ada/a-wtcoio.adb	Thu Apr 24 17:53:56 2003
--- gcc-4.0.0/gcc/ada/a-wtcoio.adb	Thu Feb 10 13:51:40 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --   Copyright (C) 1992,1993,1994,1995,1996 Free Software Foundation, Inc.  --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 32,37 ****
--- 32,38 ----
  ------------------------------------------------------------------------------
  
  with Ada.Wide_Text_IO.Complex_Aux;
+ 
  with System.WCh_Con; use System.WCh_Con;
  with System.WCh_WtS; use System.WCh_WtS;
  
*************** package body Ada.Wide_Text_IO.Complex_IO
*** 44,52 ****
     subtype LLF is Long_Long_Float;
     --  Type used for calls to routines in Aux
  
- --   subtype TFT is Ada.Wide_Text_IO.File_Type;
-    --  File type required for calls to routines in Aux
- 
     function TFT is new
       Ada.Unchecked_Conversion (File_Type, Ada.Wide_Text_IO.File_Type);
     --  This unchecked conversion is to get around a visibility bug in
--- 45,50 ----
*************** package body Ada.Wide_Text_IO.Complex_IO
*** 58,69 ****
     ---------
  
     procedure Get
!      (File  : in  File_Type;
        Item  : out Complex;
!       Width : in  Field := 0)
     is
!       Real_Item  : Real'Base;
!       Imag_Item  : Real'Base;
  
     begin
        Aux.Get (TFT (File), LLF (Real_Item), LLF (Imag_Item), Width);
--- 56,67 ----
     ---------
  
     procedure Get
!      (File  :  File_Type;
        Item  : out Complex;
!       Width :  Field := 0)
     is
!       Real_Item : Real'Base;
!       Imag_Item : Real'Base;
  
     begin
        Aux.Get (TFT (File), LLF (Real_Item), LLF (Imag_Item), Width);
*************** package body Ada.Wide_Text_IO.Complex_IO
*** 79,85 ****
  
     procedure Get
       (Item  : out Complex;
!       Width : in  Field := 0)
     is
     begin
        Get (Current_Input, Item, Width);
--- 77,83 ----
  
     procedure Get
       (Item  : out Complex;
!       Width : Field := 0)
     is
     begin
        Get (Current_Input, Item, Width);
*************** package body Ada.Wide_Text_IO.Complex_IO
*** 90,96 ****
     ---------
  
     procedure Get
!      (From : in  Wide_String;
        Item : out Complex;
        Last : out Positive)
     is
--- 88,94 ----
     ---------
  
     procedure Get
!      (From : Wide_String;
        Item : out Complex;
        Last : out Positive)
     is
*************** package body Ada.Wide_Text_IO.Complex_IO
*** 116,126 ****
     ---------
  
     procedure Put
!      (File : in File_Type;
!       Item : in Complex;
!       Fore : in Field := Default_Fore;
!       Aft  : in Field := Default_Aft;
!       Exp  : in Field := Default_Exp)
     is
     begin
        Aux.Put (TFT (File), LLF (Re (Item)), LLF (Im (Item)), Fore, Aft, Exp);
--- 114,124 ----
     ---------
  
     procedure Put
!      (File : File_Type;
!       Item : Complex;
!       Fore : Field := Default_Fore;
!       Aft  : Field := Default_Aft;
!       Exp  : Field := Default_Exp)
     is
     begin
        Aux.Put (TFT (File), LLF (Re (Item)), LLF (Im (Item)), Fore, Aft, Exp);
*************** package body Ada.Wide_Text_IO.Complex_IO
*** 131,140 ****
     ---------
  
     procedure Put
!      (Item : in Complex;
!       Fore : in Field := Default_Fore;
!       Aft  : in Field := Default_Aft;
!       Exp  : in Field := Default_Exp)
     is
     begin
        Put (Current_Output, Item, Fore, Aft, Exp);
--- 129,138 ----
     ---------
  
     procedure Put
!      (Item : Complex;
!       Fore : Field := Default_Fore;
!       Aft  : Field := Default_Aft;
!       Exp  : Field := Default_Exp)
     is
     begin
        Put (Current_Output, Item, Fore, Aft, Exp);
*************** package body Ada.Wide_Text_IO.Complex_IO
*** 146,154 ****
  
     procedure Put
       (To   : out Wide_String;
!       Item : in  Complex;
!       Aft  : in  Field := Default_Aft;
!       Exp  : in  Field := Default_Exp)
     is
        S : String (To'First .. To'Last);
  
--- 144,152 ----
  
     procedure Put
       (To   : out Wide_String;
!       Item : Complex;
!       Aft  : Field := Default_Aft;
!       Exp  : Field := Default_Exp)
     is
        S : String (To'First .. To'Last);
  
diff -Nrcpad gcc-3.4.3/gcc/ada/a-wtcoio.ads gcc-4.0.0/gcc/ada/a-wtcoio.ads
*** gcc-3.4.3/gcc/ada/a-wtcoio.ads	Thu Apr 24 17:53:56 2003
--- gcc-4.0.0/gcc/ada/a-wtcoio.ads	Thu Feb 10 13:51:40 2005
*************** package Ada.Wide_Text_IO.Complex_IO is
*** 27,62 ****
     Default_Exp  : Field := 3;
  
     procedure Get
!      (File  : in  File_Type;
        Item  : out Complex;
!       Width : in  Field := 0);
  
     procedure Get
       (Item  : out Complex;
!       Width : in  Field := 0);
  
     procedure Put
!      (File : in File_Type;
!       Item : in Complex;
!       Fore : in Field := Default_Fore;
!       Aft  : in Field := Default_Aft;
!       Exp  : in Field := Default_Exp);
  
     procedure Put
!      (Item : in Complex;
!       Fore : in Field := Default_Fore;
!       Aft  : in Field := Default_Aft;
!       Exp  : in Field := Default_Exp);
  
     procedure Get
!      (From : in  Wide_String;
        Item : out Complex;
        Last : out Positive);
  
     procedure Put
       (To   : out Wide_String;
!       Item : in  Complex;
!       Aft  : in  Field := Default_Aft;
!       Exp  : in  Field := Default_Exp);
  
  end Ada.Wide_Text_IO.Complex_IO;
--- 27,62 ----
     Default_Exp  : Field := 3;
  
     procedure Get
!      (File  : File_Type;
        Item  : out Complex;
!       Width : Field := 0);
  
     procedure Get
       (Item  : out Complex;
!       Width : Field := 0);
  
     procedure Put
!      (File : File_Type;
!       Item : Complex;
!       Fore : Field := Default_Fore;
!       Aft  : Field := Default_Aft;
!       Exp  : Field := Default_Exp);
  
     procedure Put
!      (Item : Complex;
!       Fore : Field := Default_Fore;
!       Aft  : Field := Default_Aft;
!       Exp  : Field := Default_Exp);
  
     procedure Get
!      (From : Wide_String;
        Item : out Complex;
        Last : out Positive);
  
     procedure Put
       (To   : out Wide_String;
!       Item : Complex;
!       Aft  : Field := Default_Aft;
!       Exp  : Field := Default_Exp);
  
  end Ada.Wide_Text_IO.Complex_IO;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-wtedit.adb gcc-4.0.0/gcc/ada/a-wtedit.adb
*** gcc-3.4.3/gcc/ada/a-wtedit.adb	Tue Oct 21 13:41:55 2003
--- gcc-4.0.0/gcc/ada/a-wtedit.adb	Thu Feb 10 13:51:40 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Ada.Wide_Text_IO.Editing is
*** 69,81 ****
        -----------
  
        function Image
!         (Item       : in Num;
!          Pic        : in Picture;
!          Currency   : in Wide_String    := Default_Currency;
!          Fill       : in Wide_Character := Default_Fill;
!          Separator  : in Wide_Character := Default_Separator;
!          Radix_Mark : in Wide_Character := Default_Radix_Mark)
!          return       Wide_String
        is
        begin
           return Format_Number
--- 69,80 ----
        -----------
  
        function Image
!         (Item       : Num;
!          Pic        : Picture;
!          Currency   : Wide_String    := Default_Currency;
!          Fill       : Wide_Character := Default_Fill;
!          Separator  : Wide_Character := Default_Separator;
!          Radix_Mark : Wide_Character := Default_Radix_Mark) return Wide_String
        is
        begin
           return Format_Number
*************** package body Ada.Wide_Text_IO.Editing is
*** 88,96 ****
        ------------
  
        function Length
!         (Pic      : in Picture;
!          Currency : in Wide_String := Default_Currency)
!          return     Natural
        is
           Picstr     : constant String := Pic_String (Pic);
           V_Adjust   : Integer := 0;
--- 87,94 ----
        ------------
  
        function Length
!         (Pic      : Picture;
!          Currency : Wide_String := Default_Currency) return Natural
        is
           Picstr     : constant String := Pic_String (Pic);
           V_Adjust   : Integer := 0;
*************** package body Ada.Wide_Text_IO.Editing is
*** 122,134 ****
        ---------
  
        procedure Put
!         (File       : in Wide_Text_IO.File_Type;
!          Item       : in Num;
!          Pic        : in Picture;
!          Currency   : in Wide_String    := Default_Currency;
!          Fill       : in Wide_Character := Default_Fill;
!          Separator  : in Wide_Character := Default_Separator;
!          Radix_Mark : in Wide_Character := Default_Radix_Mark)
        is
        begin
           Wide_Text_IO.Put (File, Image (Item, Pic,
--- 120,132 ----
        ---------
  
        procedure Put
!         (File       : Wide_Text_IO.File_Type;
!          Item       : Num;
!          Pic        : Picture;
!          Currency   : Wide_String    := Default_Currency;
!          Fill       : Wide_Character := Default_Fill;
!          Separator  : Wide_Character := Default_Separator;
!          Radix_Mark : Wide_Character := Default_Radix_Mark)
        is
        begin
           Wide_Text_IO.Put (File, Image (Item, Pic,
*************** package body Ada.Wide_Text_IO.Editing is
*** 136,147 ****
        end Put;
  
        procedure Put
!         (Item       : in Num;
!          Pic        : in Picture;
!          Currency   : in Wide_String    := Default_Currency;
!          Fill       : in Wide_Character := Default_Fill;
!          Separator  : in Wide_Character := Default_Separator;
!          Radix_Mark : in Wide_Character := Default_Radix_Mark)
        is
        begin
           Wide_Text_IO.Put (Image (Item, Pic,
--- 134,145 ----
        end Put;
  
        procedure Put
!         (Item       : Num;
!          Pic        : Picture;
!          Currency   : Wide_String    := Default_Currency;
!          Fill       : Wide_Character := Default_Fill;
!          Separator  : Wide_Character := Default_Separator;
!          Radix_Mark : Wide_Character := Default_Radix_Mark)
        is
        begin
           Wide_Text_IO.Put (Image (Item, Pic,
*************** package body Ada.Wide_Text_IO.Editing is
*** 150,161 ****
  
        procedure Put
          (To         : out Wide_String;
!          Item       : in Num;
!          Pic        : in Picture;
!          Currency   : in Wide_String    := Default_Currency;
!          Fill       : in Wide_Character := Default_Fill;
!          Separator  : in Wide_Character := Default_Separator;
!          Radix_Mark : in Wide_Character := Default_Radix_Mark)
        is
           Result : constant Wide_String :=
             Image (Item, Pic, Currency, Fill, Separator, Radix_Mark);
--- 148,159 ----
  
        procedure Put
          (To         : out Wide_String;
!          Item       : Num;
!          Pic        : Picture;
!          Currency   : Wide_String    := Default_Currency;
!          Fill       : Wide_Character := Default_Fill;
!          Separator  : Wide_Character := Default_Separator;
!          Radix_Mark : Wide_Character := Default_Radix_Mark)
        is
           Result : constant Wide_String :=
             Image (Item, Pic, Currency, Fill, Separator, Radix_Mark);
*************** package body Ada.Wide_Text_IO.Editing is
*** 175,189 ****
  
        function Valid
          (Item     : Num;
!          Pic      : in Picture;
!          Currency : in Wide_String := Default_Currency)
!          return     Boolean
        is
        begin
           declare
              Temp : constant Wide_String := Image (Item, Pic, Currency);
              pragma Warnings (Off, Temp);
- 
           begin
              return True;
           end;
--- 173,185 ----
  
        function Valid
          (Item     : Num;
!          Pic      : Picture;
!          Currency : Wide_String := Default_Currency) return Boolean
        is
        begin
           declare
              Temp : constant Wide_String := Image (Item, Pic, Currency);
              pragma Warnings (Off, Temp);
           begin
              return True;
           end;
*************** package body Ada.Wide_Text_IO.Editing is
*** 192,198 ****
           when Layout_Error => return False;
  
        end Valid;
- 
     end Decimal_Output;
  
     ------------
--- 188,193 ----
*************** package body Ada.Wide_Text_IO.Editing is
*** 220,230 ****
  
              when '(' =>
  
!                --  We now need to scan out the count after a left paren.
!                --  In the non-wide version we used Integer_IO.Get, but
!                --  that is not convenient here, since we don't want to
!                --  drag in normal Text_IO just for this purpose. So we
!                --  do the scan ourselves, with the normal validity checks.
  
                 Last := Picture_Index + 1;
                 Count := 0;
--- 215,225 ----
  
              when '(' =>
  
!                --  We now need to scan out the count after a left paren. In
!                --  the non-wide version we used Integer_IO.Get, but that is
!                --  not convenient here, since we don't want to drag in normal
!                --  Text_IO just for this purpose. So we do the scan ourselves,
!                --  with the normal validity checks.
  
                 Last := Picture_Index + 1;
                 Count := 0;
*************** package body Ada.Wide_Text_IO.Editing is
*** 262,268 ****
                 end loop;
  
                 --  In what follows note that one copy of the repeated
!                --  character has already been made, so a count of one is a
                 --  no-op, and a count of zero erases a character.
  
                 for J in 2 .. Count loop
--- 257,263 ----
                 end loop;
  
                 --  In what follows note that one copy of the repeated
!                --  character has already been made, so a count of one is
                 --  no-op, and a count of zero erases a character.
  
                 for J in 2 .. Count loop
*************** package body Ada.Wide_Text_IO.Editing is
*** 293,299 ****
     exception
        when others =>
           raise Picture_Error;
- 
     end Expand;
  
     -------------------
--- 288,293 ----
*************** package body Ada.Wide_Text_IO.Editing is
*** 306,313 ****
        Currency_Symbol     : Wide_String;
        Fill_Character      : Wide_Character;
        Separator_Character : Wide_Character;
!       Radix_Point         : Wide_Character)
!       return                Wide_String
     is
        Attrs    : Number_Attributes := Parse_Number_String (Number);
        Position : Integer;
--- 300,306 ----
        Currency_Symbol     : Wide_String;
        Fill_Character      : Wide_Character;
        Separator_Character : Wide_Character;
!       Radix_Point         : Wide_Character) return Wide_String
     is
        Attrs    : Number_Attributes := Parse_Number_String (Number);
        Position : Integer;
*************** package body Ada.Wide_Text_IO.Editing is
*** 368,375 ****
                       end loop;
  
                       --  The rounding may add a digit in front. Either the
!                      --  leading blank or the sign (already captured) can
!                      --  be overwritten.
  
                       if R_Pos = 1 then
                          Rounded (R_Pos) := '1';
--- 361,368 ----
                       end loop;
  
                       --  The rounding may add a digit in front. Either the
!                      --  leading blank or the sign (already captured) can be
!                      --  overwritten.
  
                       if R_Pos = 1 then
                          Rounded (R_Pos) := '1';
*************** package body Ada.Wide_Text_IO.Editing is
*** 421,427 ****
        for J in reverse Last .. Answer'Last loop
           exit when J = Pic.Radix_Position;
  
!          --  Do this test First, Separator_Character can equal Pic.Floater.
  
           if Answer (J) = Pic.Floater then
              exit;
--- 414,420 ----
        for J in reverse Last .. Answer'Last loop
           exit when J = Pic.Radix_Position;
  
!          --  Do this test First, Separator_Character can equal Pic.Floater
  
           if Answer (J) = Pic.Floater then
              exit;
*************** package body Ada.Wide_Text_IO.Editing is
*** 547,553 ****
                or else
              Pic.Floater = '-'
        then
!          for J in Pic.End_Float .. Position loop --  May be null range.
              if Answer (J) = '9' then
                 Answer (J) := '0';
  
--- 540,546 ----
                or else
              Pic.Floater = '-'
        then
!          for J in Pic.End_Float .. Position loop --  May be null range
              if Answer (J) = '9' then
                 Answer (J) := '0';
  
*************** package body Ada.Wide_Text_IO.Editing is
*** 573,584 ****
  
        elsif Pic.Floater = '$' then
  
!          for J in Pic.End_Float .. Position loop --  May be null range.
              if Answer (J) = '9' then
                 Answer (J) := '0';
  
              elsif Answer (J) = '_' then
!                Answer (J) := ' ';   --  no separator before leftmost digit.
  
              elsif Answer (J) = 'b' then
                 Answer (J) := ' ';
--- 566,577 ----
  
        elsif Pic.Floater = '$' then
  
!          for J in Pic.End_Float .. Position loop --  May be null range
              if Answer (J) = '9' then
                 Answer (J) := '0';
  
              elsif Answer (J) = '_' then
!                Answer (J) := ' ';   --  no separator before leftmost digit
  
              elsif Answer (J) = 'b' then
                 Answer (J) := ' ';
*************** package body Ada.Wide_Text_IO.Editing is
*** 598,604 ****
  
        elsif Pic.Floater = '*' then
  
!          for J in Pic.End_Float .. Position loop --  May be null range.
              if Answer (J) = '9' then
                 Answer (J) := '0';
  
--- 591,597 ----
  
        elsif Pic.Floater = '*' then
  
!          for J in Pic.End_Float .. Position loop --  May be null range
              if Answer (J) = '9' then
                 Answer (J) := '0';
  
*************** package body Ada.Wide_Text_IO.Editing is
*** 1013,1019 ****
  
           return Answer;
        end if;
- 
     end Format_Number;
  
     -------------------------
--- 1006,1011 ----
*************** package body Ada.Wide_Text_IO.Editing is
*** 1094,1100 ****
        --  No significant (intger) digits needs a null range.
  
        return Answer;
- 
     end Parse_Number_String;
  
     ----------------
--- 1086,1091 ----
*************** package body Ada.Wide_Text_IO.Editing is
*** 2713,2721 ****
     ----------------
  
     function To_Picture
!      (Pic_String      : in String;
!       Blank_When_Zero : in Boolean := False)
!       return            Picture
     is
        Result : Picture;
  
--- 2704,2711 ----
     ----------------
  
     function To_Picture
!      (Pic_String      : String;
!       Blank_When_Zero : Boolean := False) return Picture
     is
        Result : Picture;
  
*************** package body Ada.Wide_Text_IO.Editing is
*** 2751,2759 ****
     -----------
  
     function Valid
!      (Pic_String      : in String;
!       Blank_When_Zero : in Boolean := False)
!       return            Boolean
     is
     begin
        declare
--- 2741,2748 ----
     -----------
  
     function Valid
!      (Pic_String      : String;
!       Blank_When_Zero : Boolean := False) return Boolean
     is
     begin
        declare
*************** package body Ada.Wide_Text_IO.Editing is
*** 2777,2783 ****
  
     exception
        when others => return False;
- 
     end Valid;
  
  end Ada.Wide_Text_IO.Editing;
--- 2766,2771 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/a-wtedit.ads gcc-4.0.0/gcc/ada/a-wtedit.ads
*** gcc-3.4.3/gcc/ada/a-wtedit.ads	Thu Apr 24 17:53:56 2003
--- gcc-4.0.0/gcc/ada/a-wtedit.ads	Thu Feb 10 13:51:40 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-1997 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** package Ada.Wide_Text_IO.Editing is
*** 40,53 ****
     type Picture is private;
  
     function Valid
!      (Pic_String      : in String;
!       Blank_When_Zero : in Boolean := False)
!       return            Boolean;
  
     function To_Picture
!      (Pic_String      : in String;
!       Blank_When_Zero : in Boolean := False)
!       return            Picture;
  
     function Pic_String      (Pic : in Picture) return String;
     function Blank_When_Zero (Pic : in Picture) return Boolean;
--- 40,51 ----
     type Picture is private;
  
     function Valid
!      (Pic_String      : String;
!       Blank_When_Zero : Boolean := False) return Boolean;
  
     function To_Picture
!      (Pic_String      : String;
!       Blank_When_Zero : Boolean := False) return Picture;
  
     function Pic_String      (Pic : in Picture) return String;
     function Blank_When_Zero (Pic : in Picture) return Boolean;
*************** package Ada.Wide_Text_IO.Editing is
*** 63,124 ****
  
     generic
        type Num is delta <> digits <>;
!       Default_Currency   : in Wide_String :=
                                  Wide_Text_IO.Editing.Default_Currency;
!       Default_Fill       : in Wide_Character :=
                                  Wide_Text_IO.Editing.Default_Fill;
!       Default_Separator  : in Wide_Character :=
                                  Wide_Text_IO.Editing.Default_Separator;
!       Default_Radix_Mark : in Wide_Character :=
                                  Wide_Text_IO.Editing.Default_Radix_Mark;
  
     package Decimal_Output is
  
        function Length
!         (Pic      : in Picture;
!          Currency : in Wide_String := Default_Currency)
!          return     Natural;
  
        function Valid
          (Item     : Num;
!          Pic      : in Picture;
!          Currency : in Wide_String := Default_Currency)
!          return     Boolean;
  
        function Image
          (Item       : Num;
!          Pic        : in Picture;
!          Currency   : in Wide_String    := Default_Currency;
!          Fill       : in Wide_Character := Default_Fill;
!          Separator  : in Wide_Character := Default_Separator;
!          Radix_Mark : in Wide_Character := Default_Radix_Mark)
!          return       Wide_String;
  
        procedure Put
!         (File       : in File_Type;
           Item       : Num;
!          Pic        : in Picture;
!          Currency   : in Wide_String    := Default_Currency;
!          Fill       : in Wide_Character := Default_Fill;
!          Separator  : in Wide_Character := Default_Separator;
!          Radix_Mark : in Wide_Character := Default_Radix_Mark);
  
        procedure Put
          (Item       : Num;
!          Pic        : in Picture;
!          Currency   : in Wide_String    := Default_Currency;
!          Fill       : in Wide_Character := Default_Fill;
!          Separator  : in Wide_Character := Default_Separator;
!          Radix_Mark : in Wide_Character := Default_Radix_Mark);
  
        procedure Put
          (To         : out Wide_String;
           Item       : Num;
!          Pic        : in Picture;
!          Currency   : in Wide_String    := Default_Currency;
!          Fill       : in Wide_Character := Default_Fill;
!          Separator  : in Wide_Character := Default_Separator;
!          Radix_Mark : in Wide_Character := Default_Radix_Mark);
  
     end Decimal_Output;
  
--- 61,119 ----
  
     generic
        type Num is delta <> digits <>;
!       Default_Currency   : Wide_String :=
                                  Wide_Text_IO.Editing.Default_Currency;
!       Default_Fill       : Wide_Character :=
                                  Wide_Text_IO.Editing.Default_Fill;
!       Default_Separator  : Wide_Character :=
                                  Wide_Text_IO.Editing.Default_Separator;
!       Default_Radix_Mark : Wide_Character :=
                                  Wide_Text_IO.Editing.Default_Radix_Mark;
  
     package Decimal_Output is
  
        function Length
!         (Pic      : Picture;
!          Currency : Wide_String := Default_Currency) return Natural;
  
        function Valid
          (Item     : Num;
!          Pic      : Picture;
!          Currency : Wide_String := Default_Currency) return Boolean;
  
        function Image
          (Item       : Num;
!          Pic        : Picture;
!          Currency   : Wide_String    := Default_Currency;
!          Fill       : Wide_Character := Default_Fill;
!          Separator  : Wide_Character := Default_Separator;
!          Radix_Mark : Wide_Character := Default_Radix_Mark) return Wide_String;
  
        procedure Put
!         (File       : File_Type;
           Item       : Num;
!          Pic        : Picture;
!          Currency   : Wide_String    := Default_Currency;
!          Fill       : Wide_Character := Default_Fill;
!          Separator  : Wide_Character := Default_Separator;
!          Radix_Mark : Wide_Character := Default_Radix_Mark);
  
        procedure Put
          (Item       : Num;
!          Pic        : Picture;
!          Currency   : Wide_String    := Default_Currency;
!          Fill       : Wide_Character := Default_Fill;
!          Separator  : Wide_Character := Default_Separator;
!          Radix_Mark : Wide_Character := Default_Radix_Mark);
  
        procedure Put
          (To         : out Wide_String;
           Item       : Num;
!          Pic        : Picture;
!          Currency   : Wide_String    := Default_Currency;
!          Fill       : Wide_Character := Default_Fill;
!          Separator  : Wide_Character := Default_Separator;
!          Radix_Mark : Wide_Character := Default_Radix_Mark);
  
     end Decimal_Output;
  
*************** private
*** 196,203 ****
        Currency_Symbol     : Wide_String;
        Fill_Character      : Wide_Character;
        Separator_Character : Wide_Character;
!       Radix_Point         : Wide_Character)
!       return                Wide_String;
     --  Formats number according to Pic
  
     function Expand (Picture : in String) return String;
--- 191,197 ----
        Currency_Symbol     : Wide_String;
        Fill_Character      : Wide_Character;
        Separator_Character : Wide_Character;
!       Radix_Point         : Wide_Character) return Wide_String;
     --  Formats number according to Pic
  
     function Expand (Picture : in String) return String;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-wtmoio.ads gcc-4.0.0/gcc/ada/a-wtmoio.ads
*** gcc-3.4.3/gcc/ada/a-wtmoio.ads	Thu Apr 24 17:53:57 2003
--- gcc-4.0.0/gcc/ada/a-wtmoio.ads	Tue Apr 27 10:49:36 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-1997 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
***************
*** 42,48 ****
  --  difference in semantics so that it is invisible to the Ada programmer.
  
  private generic
!    type Num is range <>;
  
  package Ada.Wide_Text_IO.Modular_IO is
  
--- 42,48 ----
  --  difference in semantics so that it is invisible to the Ada programmer.
  
  private generic
!    type Num is mod <>;
  
  package Ada.Wide_Text_IO.Modular_IO is
  
diff -Nrcpad gcc-3.4.3/gcc/ada/a-wttest.adb gcc-4.0.0/gcc/ada/a-wttest.adb
*** gcc-3.4.3/gcc/ada/a-wttest.adb	Thu Apr 24 17:53:57 2003
--- gcc-4.0.0/gcc/ada/a-wttest.adb	Thu Feb 10 13:51:40 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --   Copyright (C) 1992,1993,1994,1995,1996 Free Software Foundation, Inc.  --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Ada.Wide_Text_IO.Text_Strea
*** 39,45 ****
     -- Stream --
     ------------
  
!    function Stream (File : in File_Type) return Stream_Access is
     begin
        System.File_IO.Check_File_Open (FCB.AFCB_Ptr (File));
        return Stream_Access (File);
--- 39,45 ----
     -- Stream --
     ------------
  
!    function Stream (File : File_Type) return Stream_Access is
     begin
        System.File_IO.Check_File_Open (FCB.AFCB_Ptr (File));
        return Stream_Access (File);
diff -Nrcpad gcc-3.4.3/gcc/ada/a-wttest.ads gcc-4.0.0/gcc/ada/a-wttest.ads
*** gcc-3.4.3/gcc/ada/a-wttest.ads	Thu Apr 24 17:53:57 2003
--- gcc-4.0.0/gcc/ada/a-wttest.ads	Thu Feb 10 13:51:40 2005
*************** package Ada.Wide_Text_IO.Text_Streams is
*** 19,24 ****
  
     type Stream_Access is access all Streams.Root_Stream_Type'Class;
  
!    function Stream (File : in File_Type) return Stream_Access;
  
  end Ada.Wide_Text_IO.Text_Streams;
--- 19,24 ----
  
     type Stream_Access is access all Streams.Root_Stream_Type'Class;
  
!    function Stream (File : File_Type) return Stream_Access;
  
  end Ada.Wide_Text_IO.Text_Streams;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-wwunio.ads gcc-4.0.0/gcc/ada/a-wwunio.ads
*** gcc-3.4.3/gcc/ada/a-wwunio.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-wwunio.ads	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,62 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --   A D A . W I D E _ T E X T _ I O . W I D E _ U N B O U N D E D _ I O    --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ -- This specification is adapted from the Ada Reference Manual for use with --
+ -- GNAT.  In accordance with the copyright of that document, you can freely --
+ -- copy and modify this specification,  provided that if you redistribute a --
+ -- modified version,  any changes that you have made are clearly indicated. --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  Note: historically GNAT provided these subprograms as a child of the
+ --  package Ada.Strings.Wide_Unbounded. So we implement this new Ada 2005
+ --  package by renaming the subprograms in that child. This is a more
+ --  straightforward implementation anyway, since we need access to the
+ --  internal representation of Unbounded_Wide_String.
+ 
+ 
+ with Ada.Strings.Wide_Unbounded;
+ with Ada.Strings.Wide_Unbounded.Wide_Text_IO;
+ 
+ package Ada.Wide_Text_IO.Wide_Unbounded_IO is
+ 
+    procedure Put
+      (File : File_Type;
+       Item : Strings.Wide_Unbounded.Unbounded_Wide_String)
+    renames Ada.Strings.Wide_Unbounded.Wide_Text_IO.Put;
+ 
+    procedure Put
+      (Item : Strings.Wide_Unbounded.Unbounded_Wide_String)
+    renames Ada.Strings.Wide_Unbounded.Wide_Text_IO.Put;
+ 
+    procedure Put_Line
+      (File : Wide_Text_IO.File_Type;
+       Item : Strings.Wide_Unbounded.Unbounded_Wide_String)
+    renames Ada.Strings.Wide_Unbounded.Wide_Text_IO.Put_Line;
+ 
+    procedure Put_Line
+      (Item : Strings.Wide_Unbounded.Unbounded_Wide_String)
+    renames Ada.Strings.Wide_Unbounded.Wide_Text_IO.Put_Line;
+ 
+    function Get_Line
+      (File : File_Type) return Strings.Wide_Unbounded.Unbounded_Wide_String
+    renames Ada.Strings.Wide_Unbounded.Wide_Text_IO.Get_Line;
+ 
+    function Get_Line return Strings.Wide_Unbounded.Unbounded_Wide_String
+    renames Ada.Strings.Wide_Unbounded.Wide_Text_IO.Get_Line;
+ 
+    procedure Get_Line
+       (File : File_Type;
+        Item : out Strings.Wide_Unbounded.Unbounded_Wide_String)
+    renames Ada.Strings.Wide_Unbounded.Wide_Text_IO.Get_Line;
+ 
+    procedure Get_Line
+      (Item : out Strings.Wide_Unbounded.Unbounded_Wide_String)
+    renames Ada.Strings.Wide_Unbounded.Wide_Text_IO.Get_Line;
+ 
+ end Ada.Wide_Text_IO.Wide_Unbounded_IO;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ztcoau.adb gcc-4.0.0/gcc/ada/a-ztcoau.adb
*** gcc-3.4.3/gcc/ada/a-ztcoau.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-ztcoau.adb	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,205 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --    A D A . W I D E _ W I D E _ T E X T _ I O . C O M P L E X _ A U X     --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Wide_Wide_Text_IO.Generic_Aux; use Ada.Wide_Wide_Text_IO.Generic_Aux;
+ with Ada.Wide_Wide_Text_IO.Float_Aux;
+ 
+ with System.Img_Real; use System.Img_Real;
+ 
+ package body Ada.Wide_Wide_Text_IO.Complex_Aux is
+ 
+    package Aux renames Ada.Wide_Wide_Text_IO.Float_Aux;
+ 
+    ---------
+    -- Get --
+    ---------
+ 
+    procedure Get
+      (File  : File_Type;
+       ItemR : out Long_Long_Float;
+       ItemI : out Long_Long_Float;
+       Width : Field)
+    is
+       Buf   : String (1 .. Field'Last);
+       Stop  : Integer := 0;
+       Ptr   : aliased Integer;
+       Paren : Boolean := False;
+ 
+    begin
+       --  General note for following code, exceptions from the calls
+       --  to Get for components of the complex value are propagated.
+ 
+       if Width /= 0 then
+          Load_Width (File, Width, Buf, Stop);
+          Gets (Buf (1 .. Stop), ItemR, ItemI, Ptr);
+ 
+          for J in Ptr + 1 .. Stop loop
+             if not Is_Blank (Buf (J)) then
+                raise Data_Error;
+             end if;
+          end loop;
+ 
+       --  Case of width = 0
+ 
+       else
+          Load_Skip (File);
+          Ptr := 0;
+          Load (File, Buf, Ptr, '(', Paren);
+          Aux.Get (File, ItemR, 0);
+          Load_Skip (File);
+          Load (File, Buf, Ptr, ',');
+          Aux.Get (File, ItemI, 0);
+ 
+          if Paren then
+             Load_Skip (File);
+             Load (File, Buf, Ptr, ')', Paren);
+ 
+             if not Paren then
+                raise Data_Error;
+             end if;
+          end if;
+       end if;
+    end Get;
+ 
+    ----------
+    -- Gets --
+    ----------
+ 
+    procedure Gets
+      (From  : String;
+       ItemR : out Long_Long_Float;
+       ItemI : out Long_Long_Float;
+       Last  : out Positive)
+    is
+       Paren : Boolean;
+       Pos   : Integer;
+ 
+    begin
+       String_Skip (From, Pos);
+ 
+       if From (Pos) = '(' then
+          Pos := Pos + 1;
+          Paren := True;
+       else
+          Paren := False;
+       end if;
+ 
+       Aux.Gets (From (Pos .. From'Last), ItemR, Pos);
+ 
+       String_Skip (From (Pos + 1 .. From'Last), Pos);
+ 
+       if From (Pos) = ',' then
+          Pos := Pos + 1;
+       end if;
+ 
+       Aux.Gets (From (Pos .. From'Last), ItemI, Pos);
+ 
+       if Paren then
+          String_Skip (From (Pos + 1 .. From'Last), Pos);
+ 
+          if From (Pos) /= ')' then
+             raise Data_Error;
+          end if;
+       end if;
+ 
+       Last := Pos;
+    end Gets;
+ 
+    ---------
+    -- Put --
+    ---------
+ 
+    procedure Put
+      (File  : File_Type;
+       ItemR : Long_Long_Float;
+       ItemI : Long_Long_Float;
+       Fore  : Field;
+       Aft   : Field;
+       Exp   : Field)
+    is
+    begin
+       Put (File, '(');
+       Aux.Put (File, ItemR, Fore, Aft, Exp);
+       Put (File, ',');
+       Aux.Put (File, ItemI, Fore, Aft, Exp);
+       Put (File, ')');
+    end Put;
+ 
+    ----------
+    -- Puts --
+    ----------
+ 
+    procedure Puts
+      (To    : out String;
+       ItemR : Long_Long_Float;
+       ItemI : Long_Long_Float;
+       Aft   :  Field;
+       Exp   :  Field)
+    is
+       I_String : String (1 .. 3 * Field'Last);
+       R_String : String (1 .. 3 * Field'Last);
+ 
+       Iptr : Natural;
+       Rptr : Natural;
+ 
+    begin
+       --  Both parts are initially converted with a Fore of 0
+ 
+       Rptr := 0;
+       Set_Image_Real (ItemR, R_String, Rptr, 0, Aft, Exp);
+       Iptr := 0;
+       Set_Image_Real (ItemI, I_String, Iptr, 0, Aft, Exp);
+ 
+       --  Check room for both parts plus parens plus comma (RM G.1.3(34))
+ 
+       if Rptr + Iptr + 3 > To'Length then
+          raise Layout_Error;
+       end if;
+ 
+       --  If there is room, layout result according to (RM G.1.3(31-33))
+ 
+       To (To'First) := '(';
+       To (To'First + 1 .. To'First + Rptr) := R_String (1 .. Rptr);
+       To (To'First + Rptr + 1) := ',';
+ 
+       To (To'Last) := ')';
+ 
+ 
+       To (To'Last - Iptr .. To'Last - 1) := I_String (1 .. Iptr);
+ 
+       for J in To'First + Rptr + 2 .. To'Last - Iptr - 1 loop
+          To (J) := ' ';
+       end loop;
+    end Puts;
+ 
+ end Ada.Wide_Wide_Text_IO.Complex_Aux;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ztcoau.ads gcc-4.0.0/gcc/ada/a-ztcoau.ads
*** gcc-3.4.3/gcc/ada/a-ztcoau.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-ztcoau.ads	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,71 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --    A D A . W I D E _ W I D E _ T E X T _ I O . C O M P L E X _ A U X     --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package contains the routines for Ada.Wide_Wide_Text_IO.Complex_IO
+ --  that are shared among separate instantiations of this package. The routines
+ --  in this package are identical semantically to those in Complex_IO itself,
+ --  except that the generic parameter Complex has been replaced by separate
+ --  real and imaginary values of type Long_Long_Float, and default parameters
+ --  have been removed because they are supplied explicitly by the calls from
+ --  within the generic template.
+ 
+ package Ada.Wide_Wide_Text_IO.Complex_Aux is
+ 
+    procedure Get
+      (File  : File_Type;
+       ItemR : out Long_Long_Float;
+       ItemI : out Long_Long_Float;
+       Width : Field);
+ 
+    procedure Gets
+      (From  : String;
+       ItemR : out Long_Long_Float;
+       ItemI : out Long_Long_Float;
+       Last  : out Positive);
+ 
+    procedure Put
+      (File  : File_Type;
+       ItemR : Long_Long_Float;
+       ItemI : Long_Long_Float;
+       Fore  : Field;
+       Aft   : Field;
+       Exp   : Field);
+ 
+    procedure Puts
+      (To    : out String;
+       ItemR : Long_Long_Float;
+       ItemI : Long_Long_Float;
+       Aft   : Field;
+       Exp   : Field);
+ 
+ end Ada.Wide_Wide_Text_IO.Complex_Aux;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ztcoio.adb gcc-4.0.0/gcc/ada/a-ztcoio.adb
*** gcc-3.4.3/gcc/ada/a-ztcoio.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-ztcoio.adb	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,161 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --      A D A . W I D E _ W I D E _ T E X T _ IO . C O M P L E X _ I O      --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Wide_Wide_Text_IO.Complex_Aux;
+ 
+ with System.WCh_Con; use System.WCh_Con;
+ with System.WCh_WtS; use System.WCh_WtS;
+ 
+ with Ada.Unchecked_Conversion;
+ 
+ package body Ada.Wide_Wide_Text_IO.Complex_IO is
+ 
+    package Aux renames Ada.Wide_Wide_Text_IO.Complex_Aux;
+ 
+    subtype LLF is Long_Long_Float;
+    --  Type used for calls to routines in Aux
+ 
+    function TFT is new
+      Ada.Unchecked_Conversion (File_Type, Ada.Wide_Wide_Text_IO.File_Type);
+    --  This unchecked conversion is to get around a visibility bug in
+    --  GNAT version 2.04w. It should be possible to simply use the
+    --  subtype declared above and do normal checked conversions.
+ 
+    ---------
+    -- Get --
+    ---------
+ 
+    procedure Get
+      (File  :  File_Type;
+       Item  : out Complex;
+       Width :  Field := 0)
+    is
+       Real_Item : Real'Base;
+       Imag_Item : Real'Base;
+ 
+    begin
+       Aux.Get (TFT (File), LLF (Real_Item), LLF (Imag_Item), Width);
+       Item := (Real_Item, Imag_Item);
+ 
+    exception
+       when Constraint_Error => raise Data_Error;
+    end Get;
+ 
+    ---------
+    -- Get --
+    ---------
+ 
+    procedure Get
+      (Item  : out Complex;
+       Width : Field := 0)
+    is
+    begin
+       Get (Current_Input, Item, Width);
+    end Get;
+ 
+    ---------
+    -- Get --
+    ---------
+ 
+    procedure Get
+      (From : Wide_Wide_String;
+       Item : out Complex;
+       Last : out Positive)
+    is
+       Real_Item : Real'Base;
+       Imag_Item : Real'Base;
+ 
+       S : constant String := Wide_Wide_String_To_String (From, WCEM_Upper);
+       --  String on which we do the actual conversion. Note that the method
+       --  used for wide character encoding is irrelevant, since if there is
+       --  a character outside the Standard.Character range then the call to
+       --  Aux.Gets will raise Data_Error in any case.
+ 
+    begin
+       Aux.Gets (S, LLF (Real_Item), LLF (Imag_Item), Last);
+       Item := (Real_Item, Imag_Item);
+ 
+    exception
+       when Data_Error => raise Constraint_Error;
+    end Get;
+ 
+    ---------
+    -- Put --
+    ---------
+ 
+    procedure Put
+      (File : File_Type;
+       Item : Complex;
+       Fore : Field := Default_Fore;
+       Aft  : Field := Default_Aft;
+       Exp  : Field := Default_Exp)
+    is
+    begin
+       Aux.Put (TFT (File), LLF (Re (Item)), LLF (Im (Item)), Fore, Aft, Exp);
+    end Put;
+ 
+    ---------
+    -- Put --
+    ---------
+ 
+    procedure Put
+      (Item : Complex;
+       Fore : Field := Default_Fore;
+       Aft  : Field := Default_Aft;
+       Exp  : Field := Default_Exp)
+    is
+    begin
+       Put (Current_Output, Item, Fore, Aft, Exp);
+    end Put;
+ 
+    ---------
+    -- Put --
+    ---------
+ 
+    procedure Put
+      (To   : out Wide_Wide_String;
+       Item : Complex;
+       Aft  : Field := Default_Aft;
+       Exp  : Field := Default_Exp)
+    is
+       S : String (To'First .. To'Last);
+ 
+    begin
+       Aux.Puts (S, LLF (Re (Item)), LLF (Im (Item)), Aft, Exp);
+ 
+       for J in S'Range loop
+          To (J) := Wide_Wide_Character'Val (Character'Pos (S (J)));
+       end loop;
+    end Put;
+ 
+ end Ada.Wide_Wide_Text_IO.Complex_IO;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ztcoio.ads gcc-4.0.0/gcc/ada/a-ztcoio.ads
*** gcc-3.4.3/gcc/ada/a-ztcoio.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-ztcoio.ads	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,62 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --      A D A . W I D E _ W I D E _ T E X T _ IO . C O M P L E X _ I O      --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ -- This specification is adapted from the Ada Reference Manual for use with --
+ -- GNAT.  In accordance with the copyright of that document, you can freely --
+ -- copy and modify this specification,  provided that if you redistribute a --
+ -- modified version,  any changes that you have made are clearly indicated. --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Numerics.Generic_Complex_Types;
+ 
+ generic
+    with package Complex_Types is new Ada.Numerics.Generic_Complex_Types (<>);
+ 
+ package Ada.Wide_Wide_Text_IO.Complex_IO is
+ 
+    use Complex_Types;
+ 
+    Default_Fore : Field := 2;
+    Default_Aft  : Field := Real'Digits - 1;
+    Default_Exp  : Field := 3;
+ 
+    procedure Get
+      (File  : File_Type;
+       Item  : out Complex;
+       Width : Field := 0);
+ 
+    procedure Get
+      (Item  : out Complex;
+       Width : Field := 0);
+ 
+    procedure Put
+      (File : File_Type;
+       Item : Complex;
+       Fore : Field := Default_Fore;
+       Aft  : Field := Default_Aft;
+       Exp  : Field := Default_Exp);
+ 
+    procedure Put
+      (Item : Complex;
+       Fore : Field := Default_Fore;
+       Aft  : Field := Default_Aft;
+       Exp  : Field := Default_Exp);
+ 
+    procedure Get
+      (From : Wide_Wide_String;
+       Item : out Complex;
+       Last : out Positive);
+ 
+    procedure Put
+      (To   : out Wide_Wide_String;
+       Item : Complex;
+       Aft  : Field := Default_Aft;
+       Exp  : Field := Default_Exp);
+ 
+ end Ada.Wide_Wide_Text_IO.Complex_IO;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ztcstr.adb gcc-4.0.0/gcc/ada/a-ztcstr.adb
*** gcc-3.4.3/gcc/ada/a-ztcstr.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-ztcstr.adb	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,87 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --      A D A . W I D E _ W I D E _ T E X T _ I O . C _ S T R E A M S       --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Interfaces.C_Streams; use Interfaces.C_Streams;
+ with System.File_IO;
+ with System.File_Control_Block;
+ with Unchecked_Conversion;
+ 
+ package body Ada.Wide_Wide_Text_IO.C_Streams is
+ 
+    package FIO renames System.File_IO;
+    package FCB renames System.File_Control_Block;
+ 
+    subtype AP is FCB.AFCB_Ptr;
+ 
+    function To_FCB is new Unchecked_Conversion (File_Mode, FCB.File_Mode);
+ 
+    --------------
+    -- C_Stream --
+    --------------
+ 
+    function C_Stream (F : File_Type) return FILEs is
+    begin
+       FIO.Check_File_Open (AP (F));
+       return F.Stream;
+    end C_Stream;
+ 
+    ----------
+    -- Open --
+    ----------
+ 
+    procedure Open
+      (File     : in out File_Type;
+       Mode     : File_Mode;
+       C_Stream : FILEs;
+       Form     : String := "";
+       Name     : String := "")
+    is
+       Dummy_File_Control_Block : Wide_Wide_Text_AFCB;
+       pragma Warnings (Off, Dummy_File_Control_Block);
+       --  Yes, we know this is never assigned a value, only the tag
+       --  is used for dispatching purposes, so that's expected.
+ 
+    begin
+       FIO.Open (File_Ptr  => AP (File),
+                 Dummy_FCB => Dummy_File_Control_Block,
+                 Mode      => To_FCB (Mode),
+                 Name      => Name,
+                 Form      => Form,
+                 Amethod   => 'W',
+                 Creat     => False,
+                 Text      => True,
+                 C_Stream  => C_Stream);
+ 
+    end Open;
+ 
+ end Ada.Wide_Wide_Text_IO.C_Streams;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ztcstr.ads gcc-4.0.0/gcc/ada/a-ztcstr.ads
*** gcc-3.4.3/gcc/ada/a-ztcstr.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-ztcstr.ads	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,55 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --      A D A . W I D E _ W I D E _ T E X T _ I O . C _ S T R E A M S       --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package provides an interface between Ada.Wide_Wide_Text_IO and the
+ --  C streams. This allows sharing of a stream between Ada and C or C++,
+ --  as well as allowing the Ada program to operate directly on the stream.
+ 
+ with Interfaces.C_Streams;
+ 
+ package Ada.Wide_Wide_Text_IO.C_Streams is
+ 
+    package ICS renames Interfaces.C_Streams;
+ 
+    function C_Stream (F : File_Type) return ICS.FILEs;
+    --  Obtain stream from existing open file
+ 
+    procedure Open
+      (File     : in out File_Type;
+       Mode     : File_Mode;
+       C_Stream : ICS.FILEs;
+       Form     : String := "";
+       Name     : String := "");
+    --  Create new file from existing stream
+ 
+ end Ada.Wide_Wide_Text_IO.C_Streams;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ztdeau.adb gcc-4.0.0/gcc/ada/a-ztdeau.adb
*** gcc-3.4.3/gcc/ada/a-ztdeau.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-ztdeau.adb	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,260 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --    A D A . W I D E _ W I D E _ T E X T _ I O . D E C I M A L _ A U X     --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Wide_Wide_Text_IO.Generic_Aux; use Ada.Wide_Wide_Text_IO.Generic_Aux;
+ with Ada.Wide_Wide_Text_IO.Float_Aux;   use Ada.Wide_Wide_Text_IO.Float_Aux;
+ 
+ with System.Img_Dec; use System.Img_Dec;
+ with System.Img_LLD; use System.Img_LLD;
+ with System.Val_Dec; use System.Val_Dec;
+ with System.Val_LLD; use System.Val_LLD;
+ 
+ package body Ada.Wide_Wide_Text_IO.Decimal_Aux is
+ 
+    -------------
+    -- Get_Dec --
+    -------------
+ 
+    function Get_Dec
+      (File  : File_Type;
+       Width : Field;
+       Scale : Integer) return Integer
+    is
+       Buf  : String (1 .. Field'Last);
+       Ptr  : aliased Integer;
+       Stop : Integer := 0;
+       Item : Integer;
+ 
+    begin
+       if Width /= 0 then
+          Load_Width (File, Width, Buf, Stop);
+          String_Skip (Buf, Ptr);
+       else
+          Load_Real (File, Buf, Stop);
+          Ptr := 1;
+       end if;
+ 
+       Item := Scan_Decimal (Buf, Ptr'Access, Stop, Scale);
+       Check_End_Of_Field (Buf, Stop, Ptr, Width);
+       return Item;
+    end Get_Dec;
+ 
+    -------------
+    -- Get_LLD --
+    -------------
+ 
+    function Get_LLD
+      (File  : File_Type;
+       Width : Field;
+       Scale : Integer) return Long_Long_Integer
+    is
+       Buf  : String (1 .. Field'Last);
+       Ptr  : aliased Integer;
+       Stop : Integer := 0;
+       Item : Long_Long_Integer;
+ 
+    begin
+       if Width /= 0 then
+          Load_Width (File, Width, Buf, Stop);
+          String_Skip (Buf, Ptr);
+       else
+          Load_Real (File, Buf, Stop);
+          Ptr := 1;
+       end if;
+ 
+       Item := Scan_Long_Long_Decimal (Buf, Ptr'Access, Stop, Scale);
+       Check_End_Of_Field (Buf, Stop, Ptr, Width);
+       return Item;
+    end Get_LLD;
+ 
+    --------------
+    -- Gets_Dec --
+    --------------
+ 
+    function Gets_Dec
+      (From  : String;
+       Last  : access Positive;
+       Scale : Integer) return Integer
+    is
+       Pos  : aliased Integer;
+       Item : Integer;
+ 
+    begin
+       String_Skip (From, Pos);
+       Item := Scan_Decimal (From, Pos'Access, From'Last, Scale);
+       Last.all := Pos - 1;
+       return Item;
+ 
+    exception
+       when Constraint_Error =>
+          Last.all := Pos - 1;
+          raise Data_Error;
+ 
+    end Gets_Dec;
+ 
+    --------------
+    -- Gets_LLD --
+    --------------
+ 
+    function Gets_LLD
+      (From  : String;
+       Last  : access Positive;
+       Scale : Integer) return Long_Long_Integer
+    is
+       Pos  : aliased Integer;
+       Item : Long_Long_Integer;
+ 
+    begin
+       String_Skip (From, Pos);
+       Item := Scan_Long_Long_Decimal (From, Pos'Access, From'Last, Scale);
+       Last.all := Pos - 1;
+       return Item;
+ 
+    exception
+       when Constraint_Error =>
+          Last.all := Pos - 1;
+          raise Data_Error;
+ 
+    end Gets_LLD;
+ 
+    -------------
+    -- Put_Dec --
+    -------------
+ 
+    procedure Put_Dec
+      (File  : File_Type;
+       Item  : Integer;
+       Fore  : Field;
+       Aft   : Field;
+       Exp   : Field;
+       Scale : Integer)
+    is
+       Buf : String (1 .. Field'Last);
+       Ptr : Natural := 0;
+ 
+    begin
+       Set_Image_Decimal (Item, Buf, Ptr, Scale, Fore, Aft, Exp);
+       Put_Item (File, Buf (1 .. Ptr));
+    end Put_Dec;
+ 
+    -------------
+    -- Put_LLD --
+    -------------
+ 
+    procedure Put_LLD
+      (File  : File_Type;
+       Item  : Long_Long_Integer;
+       Fore  : Field;
+       Aft   : Field;
+       Exp   : Field;
+       Scale : Integer)
+    is
+       Buf : String (1 .. Field'Last);
+       Ptr : Natural := 0;
+ 
+    begin
+       Set_Image_Long_Long_Decimal (Item, Buf, Ptr, Scale, Fore, Aft, Exp);
+       Put_Item (File, Buf (1 .. Ptr));
+    end Put_LLD;
+ 
+    --------------
+    -- Puts_Dec --
+    --------------
+ 
+    procedure Puts_Dec
+      (To    : out String;
+       Item  : Integer;
+       Aft   : Field;
+       Exp   : Field;
+       Scale : Integer)
+    is
+       Buf  : String (1 .. Field'Last);
+       Fore : Integer;
+       Ptr  : Natural := 0;
+ 
+    begin
+       if Exp = 0 then
+          Fore := To'Length - 1 - Aft;
+       else
+          Fore := To'Length - 2 - Aft - Exp;
+       end if;
+ 
+       if Fore < 1 then
+          raise Layout_Error;
+       end if;
+ 
+       Set_Image_Decimal (Item, Buf, Ptr, Scale, Fore, Aft, Exp);
+ 
+       if Ptr > To'Length then
+          raise Layout_Error;
+       else
+          To := Buf (1 .. Ptr);
+       end if;
+    end Puts_Dec;
+ 
+    --------------
+    -- Puts_Dec --
+    --------------
+ 
+    procedure Puts_LLD
+      (To    : out String;
+       Item  : Long_Long_Integer;
+       Aft   : Field;
+       Exp   : Field;
+       Scale : Integer)
+    is
+       Buf  : String (1 .. Field'Last);
+       Fore : Integer;
+       Ptr  : Natural := 0;
+ 
+    begin
+       if Exp = 0 then
+          Fore := To'Length - 1 - Aft;
+       else
+          Fore := To'Length - 2 - Aft - Exp;
+       end if;
+ 
+       if Fore < 1 then
+          raise Layout_Error;
+       end if;
+ 
+       Set_Image_Long_Long_Decimal (Item, Buf, Ptr, Scale, Fore, Aft, Exp);
+ 
+       if Ptr > To'Length then
+          raise Layout_Error;
+       else
+          To := Buf (1 .. Ptr);
+       end if;
+    end Puts_LLD;
+ 
+ end Ada.Wide_Wide_Text_IO.Decimal_Aux;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ztdeau.ads gcc-4.0.0/gcc/ada/a-ztdeau.ads
*** gcc-3.4.3/gcc/ada/a-ztdeau.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-ztdeau.ads	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,95 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --    A D A . W I D E _ W I D E _ T E X T _ I O . D E C I M A L _ A U X     --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package contains the routines for Ada.Wide_Wide_Text_IO.Decimal_IO
+ --  that are shared among separate instantiations of this package. The
+ --  routines in the package are identical semantically to those declared
+ --  in Wide_Wide_Text_IO, except that default values have been supplied by the
+ --  generic, and the Num parameter has been replaced by Integer or
+ --  Long_Long_Integer, with an additional Scale parameter giving the
+ --  value of Num'Scale. In addition the Get routines return the value
+ --  rather than store it in an Out parameter.
+ 
+ private package Ada.Wide_Wide_Text_IO.Decimal_Aux is
+ 
+    function Get_Dec
+      (File  : File_Type;
+       Width : Field;
+       Scale : Integer) return Integer;
+ 
+    function Get_LLD
+      (File  : File_Type;
+       Width : Field;
+       Scale : Integer) return Long_Long_Integer;
+ 
+    function Gets_Dec
+      (From  : String;
+       Last  : access Positive;
+       Scale : Integer) return Integer;
+ 
+    function Gets_LLD
+      (From  : String;
+       Last  : access Positive;
+       Scale : Integer) return Long_Long_Integer;
+ 
+    procedure Put_Dec
+      (File  : File_Type;
+       Item  : Integer;
+       Fore  : Field;
+       Aft   : Field;
+       Exp   : Field;
+       Scale : Integer);
+ 
+    procedure Put_LLD
+      (File  : File_Type;
+       Item  : Long_Long_Integer;
+       Fore  : Field;
+       Aft   : Field;
+       Exp   : Field;
+       Scale : Integer);
+ 
+    procedure Puts_Dec
+      (To    : out String;
+       Item  : Integer;
+       Aft   : Field;
+       Exp   : Field;
+       Scale : Integer);
+ 
+    procedure Puts_LLD
+      (To    : out String;
+       Item  : Long_Long_Integer;
+       Aft   : Field;
+       Exp   : Field;
+       Scale : Integer);
+ 
+ end Ada.Wide_Wide_Text_IO.Decimal_Aux;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ztdeio.adb gcc-4.0.0/gcc/ada/a-ztdeio.adb
*** gcc-3.4.3/gcc/ada/a-ztdeio.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-ztdeio.adb	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,173 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --      A D A . W I D E _ W I D E _ T E X T _ I O . D E C I M A L _ I O     --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Wide_Wide_Text_IO.Decimal_Aux;
+ with System.WCh_Con; use System.WCh_Con;
+ with System.WCh_WtS; use System.WCh_WtS;
+ 
+ package body Ada.Wide_Wide_Text_IO.Decimal_IO is
+ 
+    subtype TFT is Ada.Wide_Wide_Text_IO.File_Type;
+    --  File type required for calls to routines in Aux
+ 
+    package Aux renames Ada.Wide_Wide_Text_IO.Decimal_Aux;
+ 
+    Scale : constant Integer := Num'Scale;
+ 
+    ---------
+    -- Get --
+    ---------
+ 
+    procedure Get
+      (File  : File_Type;
+       Item  : out Num;
+       Width : Field := 0)
+    is
+    begin
+       if Num'Size > Integer'Size then
+          Item := Num (Aux.Get_LLD (TFT (File), Width, Scale));
+          --  Item := Num'Fixed_Value (Aux.Get_LLD (TFT (File), Width, Scale));
+          --  above is what we should write, but gets assert error ???
+ 
+       else
+          Item := Num (Aux.Get_Dec (TFT (File), Width, Scale));
+          --  Item := Num'Fixed_Value (Aux.Get_Dec (TFT (File), Width, Scale));
+          --  above is what we should write, but gets assert error ???
+       end if;
+ 
+    exception
+       when Constraint_Error => raise Data_Error;
+    end Get;
+ 
+    procedure Get
+      (Item  : out Num;
+       Width : Field := 0)
+    is
+    begin
+       Get (Current_Input, Item, Width);
+    end Get;
+ 
+    procedure Get
+      (From : Wide_Wide_String;
+       Item : out Num;
+       Last : out Positive)
+    is
+       S : constant String := Wide_Wide_String_To_String (From, WCEM_Upper);
+       --  String on which we do the actual conversion. Note that the method
+       --  used for wide character encoding is irrelevant, since if there is
+       --  a character outside the Standard.Character range then the call to
+       --  Aux.Gets will raise Data_Error in any case.
+ 
+    begin
+       if Num'Size > Integer'Size then
+          --  Item := Num'Fixed_Value
+          --  should write above, but gets assert error ???
+          Item := Num
+                    (Aux.Gets_LLD (S, Last'Unrestricted_Access, Scale));
+       else
+          --  Item := Num'Fixed_Value
+          --  should write above, but gets assert error ???
+          Item := Num
+                    (Aux.Gets_Dec (S, Last'Unrestricted_Access, Scale));
+       end if;
+ 
+    exception
+       when Constraint_Error => raise Data_Error;
+    end Get;
+ 
+    ---------
+    -- Put --
+    ---------
+ 
+    procedure Put
+      (File : File_Type;
+       Item : Num;
+       Fore : Field := Default_Fore;
+       Aft  : Field := Default_Aft;
+       Exp  : Field := Default_Exp)
+    is
+    begin
+       if Num'Size > Integer'Size then
+          Aux.Put_LLD
+ --           (TFT (File), Long_Long_Integer'Integer_Value (Item),
+ --  ???
+            (TFT (File), Long_Long_Integer (Item),
+             Fore, Aft, Exp, Scale);
+       else
+          Aux.Put_Dec
+ --           (TFT (File), Integer'Integer_Value (Item), Fore, Aft, Exp, Scale);
+ --  ???
+            (TFT (File), Integer (Item), Fore, Aft, Exp, Scale);
+ 
+       end if;
+    end Put;
+ 
+    procedure Put
+      (Item : Num;
+       Fore : Field := Default_Fore;
+       Aft  : Field := Default_Aft;
+       Exp  : Field := Default_Exp)
+    is
+       pragma Unreferenced (Fore);
+       --  ??? how come this is unreferenced, sounds wrong ???
+    begin
+       Put (Current_Output, Item, Aft, Exp);
+    end Put;
+ 
+    procedure Put
+      (To   : out Wide_Wide_String;
+       Item : Num;
+       Aft  : Field := Default_Aft;
+       Exp  : Field := Default_Exp)
+    is
+       S : String (To'First .. To'Last);
+ 
+    begin
+       if Num'Size > Integer'Size then
+ --       Aux.Puts_LLD
+ --         (S, Long_Long_Integer'Integer_Value (Item), Aft, Exp, Scale);
+ --  ???
+          Aux.Puts_LLD
+            (S, Long_Long_Integer (Item), Aft, Exp, Scale);
+       else
+ --       Aux.Puts_Dec (S, Integer'Integer_Value (Item), Aft, Exp, Scale);
+ --  ???
+          Aux.Puts_Dec (S, Integer (Item), Aft, Exp, Scale);
+       end if;
+ 
+       for J in S'Range loop
+          To (J) := Wide_Wide_Character'Val (Character'Pos (S (J)));
+       end loop;
+    end Put;
+ 
+ end Ada.Wide_Wide_Text_IO.Decimal_IO;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ztdeio.ads gcc-4.0.0/gcc/ada/a-ztdeio.ads
*** gcc-3.4.3/gcc/ada/a-ztdeio.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-ztdeio.ads	Wed Feb  9 11:14:41 2005
***************
*** 0 ****
--- 1,86 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --      A D A . W I D E _ W I D E _ T E X T _ I O . D E C I M A L _ I O     --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  In Ada 95, the package Ada.Wide_Wide_Text_IO.Decimal_IO is a subpackage of
+ --  Wide_Wide_Text_IO. In GNAT we make it a child package to avoid loading the
+ --  necessary code if Decimal_IO is not instantiated. See the routine
+ --  Rtsfind.Text_IO_Kludge for a description of how we patch up the difference
+ --  in semantics so that it is invisible to the Ada programmer.
+ 
+ private generic
+    type Num is delta <> digits <>;
+ 
+ package Ada.Wide_Wide_Text_IO.Decimal_IO is
+ 
+    Default_Fore : Field := 2;
+    Default_Aft  : Field := Num'Digits - 1;
+    Default_Exp  : Field := 3;
+ 
+    procedure Get
+      (File  : File_Type;
+       Item  : out Num;
+       Width : Field := 0);
+ 
+    procedure Get
+      (Item  : out Num;
+       Width : Field := 0);
+ 
+    procedure Put
+      (File : File_Type;
+       Item : Num;
+       Fore : Field := Default_Fore;
+       Aft  : Field := Default_Aft;
+       Exp  : Field := Default_Exp);
+ 
+    procedure Put
+      (Item : Num;
+       Fore : Field := Default_Fore;
+       Aft  : Field := Default_Aft;
+       Exp  : Field := Default_Exp);
+ 
+    procedure Get
+      (From : Wide_Wide_String;
+       Item : out Num;
+       Last : out Positive);
+ 
+    procedure Put
+      (To   : out Wide_Wide_String;
+       Item : Num;
+       Aft  : Field := Default_Aft;
+       Exp  : Field := Default_Exp);
+ 
+ end Ada.Wide_Wide_Text_IO.Decimal_IO;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ztedit.adb gcc-4.0.0/gcc/ada/a-ztedit.adb
*** gcc-3.4.3/gcc/ada/a-ztedit.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-ztedit.adb	Wed Feb  9 11:14:42 2005
***************
*** 0 ****
--- 1,2773 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --        A D A . W I D E _ W I D E _ T E X T _ I O . E D I T I N G         --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Strings.Fixed;
+ with Ada.Strings.Wide_Wide_Fixed;
+ 
+ package body Ada.Wide_Wide_Text_IO.Editing is
+ 
+    package Strings            renames Ada.Strings;
+    package Strings_Fixed      renames Ada.Strings.Fixed;
+    package Strings_Wide_Wide_Fixed renames Ada.Strings.Wide_Wide_Fixed;
+    package Wide_Wide_Text_IO       renames Ada.Wide_Wide_Text_IO;
+ 
+    -----------------------
+    -- Local_Subprograms --
+    -----------------------
+ 
+    function To_Wide (C : Character) return Wide_Wide_Character;
+    pragma Inline (To_Wide);
+    --  Convert Character to corresponding Wide_Wide_Character
+ 
+    ---------------------
+    -- Blank_When_Zero --
+    ---------------------
+ 
+    function Blank_When_Zero (Pic : in Picture) return Boolean is
+    begin
+       return Pic.Contents.Original_BWZ;
+    end Blank_When_Zero;
+ 
+    --------------------
+    -- Decimal_Output --
+    --------------------
+ 
+    package body Decimal_Output is
+ 
+       -----------
+       -- Image --
+       -----------
+ 
+       function Image
+         (Item       : Num;
+          Pic        : Picture;
+          Currency   : Wide_Wide_String    := Default_Currency;
+          Fill       : Wide_Wide_Character := Default_Fill;
+          Separator  : Wide_Wide_Character := Default_Separator;
+          Radix_Mark : Wide_Wide_Character := Default_Radix_Mark)
+          return Wide_Wide_String
+       is
+       begin
+          return Format_Number
+             (Pic.Contents, Num'Image (Item),
+              Currency, Fill, Separator, Radix_Mark);
+       end Image;
+ 
+       ------------
+       -- Length --
+       ------------
+ 
+       function Length
+         (Pic      : Picture;
+          Currency : Wide_Wide_String := Default_Currency) return Natural
+       is
+          Picstr     : constant String := Pic_String (Pic);
+          V_Adjust   : Integer := 0;
+          Cur_Adjust : Integer := 0;
+ 
+       begin
+          --  Check if Picstr has 'V' or '$'
+ 
+          --  If 'V', then length is 1 less than otherwise
+ 
+          --  If '$', then length is Currency'Length-1 more than otherwise
+ 
+          --  This should use the string handling package ???
+ 
+          for J in Picstr'Range loop
+             if Picstr (J) = 'V' then
+                V_Adjust := -1;
+ 
+             elsif Picstr (J) = '$' then
+                Cur_Adjust := Currency'Length - 1;
+             end if;
+          end loop;
+ 
+          return Picstr'Length - V_Adjust + Cur_Adjust;
+       end Length;
+ 
+       ---------
+       -- Put --
+       ---------
+ 
+       procedure Put
+         (File       : Wide_Wide_Text_IO.File_Type;
+          Item       : Num;
+          Pic        : Picture;
+          Currency   : Wide_Wide_String    := Default_Currency;
+          Fill       : Wide_Wide_Character := Default_Fill;
+          Separator  : Wide_Wide_Character := Default_Separator;
+          Radix_Mark : Wide_Wide_Character := Default_Radix_Mark)
+       is
+       begin
+          Wide_Wide_Text_IO.Put (File, Image (Item, Pic,
+                                    Currency, Fill, Separator, Radix_Mark));
+       end Put;
+ 
+       procedure Put
+         (Item       : Num;
+          Pic        : Picture;
+          Currency   : Wide_Wide_String    := Default_Currency;
+          Fill       : Wide_Wide_Character := Default_Fill;
+          Separator  : Wide_Wide_Character := Default_Separator;
+          Radix_Mark : Wide_Wide_Character := Default_Radix_Mark)
+       is
+       begin
+          Wide_Wide_Text_IO.Put (Image (Item, Pic,
+                              Currency, Fill, Separator, Radix_Mark));
+       end Put;
+ 
+       procedure Put
+         (To         : out Wide_Wide_String;
+          Item       : Num;
+          Pic        : Picture;
+          Currency   : Wide_Wide_String    := Default_Currency;
+          Fill       : Wide_Wide_Character := Default_Fill;
+          Separator  : Wide_Wide_Character := Default_Separator;
+          Radix_Mark : Wide_Wide_Character := Default_Radix_Mark)
+       is
+          Result : constant Wide_Wide_String :=
+            Image (Item, Pic, Currency, Fill, Separator, Radix_Mark);
+ 
+       begin
+          if Result'Length > To'Length then
+             raise Wide_Wide_Text_IO.Layout_Error;
+          else
+             Strings_Wide_Wide_Fixed.Move (Source => Result, Target => To,
+                                      Justify => Strings.Right);
+          end if;
+       end Put;
+ 
+       -----------
+       -- Valid --
+       -----------
+ 
+       function Valid
+         (Item     : Num;
+          Pic      : Picture;
+          Currency : Wide_Wide_String := Default_Currency) return Boolean
+       is
+       begin
+          declare
+             Temp : constant Wide_Wide_String := Image (Item, Pic, Currency);
+             pragma Warnings (Off, Temp);
+          begin
+             return True;
+          end;
+ 
+       exception
+          when Layout_Error => return False;
+ 
+       end Valid;
+    end Decimal_Output;
+ 
+    ------------
+    -- Expand --
+    ------------
+ 
+    function Expand (Picture : in String) return String is
+       Result        : String (1 .. MAX_PICSIZE);
+       Picture_Index : Integer := Picture'First;
+       Result_Index  : Integer := Result'First;
+       Count         : Natural;
+       Last          : Integer;
+ 
+    begin
+       if Picture'Length < 1 then
+          raise Picture_Error;
+       end if;
+ 
+       if Picture (Picture'First) = '(' then
+          raise Picture_Error;
+       end if;
+ 
+       loop
+          case Picture (Picture_Index) is
+ 
+             when '(' =>
+ 
+                --  We now need to scan out the count after a left paren. In
+                --  the non-wide version we used Integer_IO.Get, but that is
+                --  not convenient here, since we don't want to drag in normal
+                --  Text_IO just for this purpose. So we do the scan ourselves,
+                --  with the normal validity checks.
+ 
+                Last := Picture_Index + 1;
+                Count := 0;
+ 
+                if Picture (Last) not in '0' .. '9' then
+                   raise Picture_Error;
+                end if;
+ 
+                Count := Character'Pos (Picture (Last)) - Character'Pos ('0');
+                Last := Last + 1;
+ 
+                loop
+                   if Last > Picture'Last then
+                      raise Picture_Error;
+                   end if;
+ 
+                   if Picture (Last) = '_' then
+                      if Picture (Last - 1) = '_' then
+                         raise Picture_Error;
+                      end if;
+ 
+                   elsif Picture (Last) = ')' then
+                      exit;
+ 
+                   elsif Picture (Last) not in '0' .. '9' then
+                      raise Picture_Error;
+ 
+                   else
+                      Count := Count * 10
+                                 +  Character'Pos (Picture (Last)) -
+                                    Character'Pos ('0');
+                   end if;
+ 
+                   Last := Last + 1;
+                end loop;
+ 
+                --  In what follows note that one copy of the repeated
+                --  character has already been made, so a count of one is
+                --  no-op, and a count of zero erases a character.
+ 
+                for J in 2 .. Count loop
+                   Result (Result_Index + J - 2) := Picture (Picture_Index - 1);
+                end loop;
+ 
+                Result_Index := Result_Index + Count - 1;
+ 
+                --  Last was a ')' throw it away too.
+ 
+                Picture_Index := Last + 1;
+ 
+             when ')' =>
+                raise Picture_Error;
+ 
+             when others =>
+                Result (Result_Index) := Picture (Picture_Index);
+                Picture_Index := Picture_Index + 1;
+                Result_Index := Result_Index + 1;
+ 
+          end case;
+ 
+          exit when Picture_Index > Picture'Last;
+       end loop;
+ 
+       return Result (1 .. Result_Index - 1);
+ 
+    exception
+       when others =>
+          raise Picture_Error;
+    end Expand;
+ 
+    -------------------
+    -- Format_Number --
+    -------------------
+ 
+    function Format_Number
+      (Pic                 : Format_Record;
+       Number              : String;
+       Currency_Symbol     : Wide_Wide_String;
+       Fill_Character      : Wide_Wide_Character;
+       Separator_Character : Wide_Wide_Character;
+       Radix_Point         : Wide_Wide_Character) return Wide_Wide_String
+    is
+       Attrs    : Number_Attributes := Parse_Number_String (Number);
+       Position : Integer;
+       Rounded  : String := Number;
+ 
+       Sign_Position : Integer := Pic.Sign_Position; --  may float.
+ 
+       Answer        : Wide_Wide_String (1 .. Pic.Picture.Length);
+       Last          : Integer;
+       Currency_Pos  : Integer := Pic.Start_Currency;
+ 
+       Dollar : Boolean := False;
+       --  Overridden immediately if necessary.
+ 
+       Zero : Boolean := True;
+       --  Set to False when a non-zero digit is output.
+ 
+    begin
+ 
+       --  If the picture has fewer decimal places than the number, the image
+       --  must be rounded according to the usual rules.
+ 
+       if Attrs.Has_Fraction then
+          declare
+             R : constant Integer :=
+               (Attrs.End_Of_Fraction - Attrs.Start_Of_Fraction + 1)
+                 - Pic.Max_Trailing_Digits;
+             R_Pos : Integer;
+ 
+          begin
+             if R > 0 then
+                R_Pos := Rounded'Length - R;
+ 
+                if Rounded (R_Pos + 1) > '4' then
+ 
+                   if Rounded (R_Pos) = '.' then
+                      R_Pos := R_Pos - 1;
+                   end if;
+ 
+                   if Rounded (R_Pos) /= '9' then
+                      Rounded (R_Pos) := Character'Succ (Rounded (R_Pos));
+                   else
+                      Rounded (R_Pos) := '0';
+                      R_Pos := R_Pos - 1;
+ 
+                      while R_Pos > 1 loop
+                         if Rounded (R_Pos) = '.' then
+                            R_Pos := R_Pos - 1;
+                         end if;
+ 
+                         if Rounded (R_Pos) /= '9' then
+                            Rounded (R_Pos) := Character'Succ (Rounded (R_Pos));
+                            exit;
+                         else
+                            Rounded (R_Pos) := '0';
+                            R_Pos := R_Pos - 1;
+                         end if;
+                      end loop;
+ 
+                      --  The rounding may add a digit in front. Either the
+                      --  leading blank or the sign (already captured) can be
+                      --  overwritten.
+ 
+                      if R_Pos = 1 then
+                         Rounded (R_Pos) := '1';
+                         Attrs.Start_Of_Int := Attrs.Start_Of_Int - 1;
+                      end if;
+                   end if;
+                end if;
+             end if;
+          end;
+       end if;
+ 
+       for J in Answer'Range loop
+          Answer (J) := To_Wide (Pic.Picture.Expanded (J));
+       end loop;
+ 
+       if Pic.Start_Currency /= Invalid_Position then
+          Dollar := Answer (Pic.Start_Currency) = '$';
+       end if;
+ 
+       --  Fix up "direct inserts" outside the playing field. Set up as one
+       --  loop to do the beginning, one (reverse) loop to do the end.
+ 
+       Last := 1;
+       loop
+          exit when Last = Pic.Start_Float;
+          exit when Last = Pic.Radix_Position;
+          exit when Answer (Last) = '9';
+ 
+          case Answer (Last) is
+ 
+             when '_' =>
+                Answer (Last) := Separator_Character;
+ 
+             when 'b' =>
+                Answer (Last) := ' ';
+ 
+             when others =>
+                null;
+ 
+          end case;
+ 
+          exit when Last = Answer'Last;
+ 
+          Last := Last + 1;
+       end loop;
+ 
+       --  Now for the end...
+ 
+       for J in reverse Last .. Answer'Last loop
+          exit when J = Pic.Radix_Position;
+ 
+          --  Do this test First, Separator_Character can equal Pic.Floater
+ 
+          if Answer (J) = Pic.Floater then
+             exit;
+          end if;
+ 
+          case Answer (J) is
+ 
+             when '_' =>
+                Answer (J) := Separator_Character;
+ 
+             when 'b' =>
+                Answer (J) := ' ';
+ 
+             when '9' =>
+                exit;
+ 
+             when others =>
+                null;
+ 
+          end case;
+       end loop;
+ 
+       --  Non-floating sign
+ 
+       if Pic.Start_Currency /= -1
+         and then Answer (Pic.Start_Currency) = '#'
+         and then Pic.Floater /= '#'
+       then
+          if Currency_Symbol'Length >
+             Pic.End_Currency - Pic.Start_Currency + 1
+          then
+             raise Picture_Error;
+ 
+          elsif Currency_Symbol'Length =
+             Pic.End_Currency - Pic.Start_Currency + 1
+          then
+             Answer (Pic.Start_Currency .. Pic.End_Currency) :=
+               Currency_Symbol;
+ 
+          elsif Pic.Radix_Position = Invalid_Position
+            or else Pic.Start_Currency < Pic.Radix_Position
+          then
+             Answer (Pic.Start_Currency .. Pic.End_Currency) :=
+                                                         (others => ' ');
+             Answer (Pic.End_Currency - Currency_Symbol'Length + 1 ..
+                     Pic.End_Currency) := Currency_Symbol;
+ 
+          else
+             Answer (Pic.Start_Currency .. Pic.End_Currency) :=
+                                                         (others => ' ');
+             Answer (Pic.Start_Currency ..
+                     Pic.Start_Currency + Currency_Symbol'Length - 1) :=
+                                                         Currency_Symbol;
+          end if;
+       end if;
+ 
+       --  Fill in leading digits
+ 
+       if Attrs.End_Of_Int - Attrs.Start_Of_Int + 1 >
+                                                 Pic.Max_Leading_Digits
+       then
+          raise Layout_Error;
+       end if;
+ 
+       if Pic.Radix_Position = Invalid_Position then
+          Position := Answer'Last;
+       else
+          Position := Pic.Radix_Position - 1;
+       end if;
+ 
+       for J in reverse Attrs.Start_Of_Int .. Attrs.End_Of_Int loop
+ 
+          while Answer (Position) /= '9'
+            and Answer (Position) /= Pic.Floater
+          loop
+             if Answer (Position) = '_' then
+                Answer (Position) := Separator_Character;
+ 
+             elsif Answer (Position) = 'b' then
+                Answer (Position) := ' ';
+             end if;
+ 
+             Position := Position - 1;
+          end loop;
+ 
+          Answer (Position) := To_Wide (Rounded (J));
+ 
+          if Rounded (J) /= '0' then
+             Zero := False;
+          end if;
+ 
+          Position := Position - 1;
+       end loop;
+ 
+       --  Do lead float
+ 
+       if Pic.Start_Float = Invalid_Position then
+ 
+          --  No leading floats, but need to change '9' to '0', '_' to
+          --  Separator_Character and 'b' to ' '.
+ 
+          for J in Last .. Position loop
+ 
+             --  Last set when fixing the "uninteresting" leaders above.
+             --  Don't duplicate the work.
+ 
+             if Answer (J) = '9' then
+                Answer (J) := '0';
+ 
+             elsif Answer (J) = '_' then
+                Answer (J) := Separator_Character;
+ 
+             elsif Answer (J) = 'b' then
+                Answer (J) := ' ';
+ 
+             end if;
+ 
+          end loop;
+ 
+       elsif Pic.Floater = '<'
+               or else
+             Pic.Floater = '+'
+               or else
+             Pic.Floater = '-'
+       then
+          for J in Pic.End_Float .. Position loop --  May be null range
+             if Answer (J) = '9' then
+                Answer (J) := '0';
+ 
+             elsif Answer (J) = '_' then
+                Answer (J) := Separator_Character;
+ 
+             elsif Answer (J) = 'b' then
+                Answer (J) := ' ';
+ 
+             end if;
+          end loop;
+ 
+          if Position > Pic.End_Float then
+             Position := Pic.End_Float;
+          end if;
+ 
+          for J in Pic.Start_Float .. Position - 1 loop
+             Answer (J) := ' ';
+          end loop;
+ 
+          Answer (Position) := Pic.Floater;
+          Sign_Position     := Position;
+ 
+       elsif Pic.Floater = '$' then
+ 
+          for J in Pic.End_Float .. Position loop --  May be null range
+             if Answer (J) = '9' then
+                Answer (J) := '0';
+ 
+             elsif Answer (J) = '_' then
+                Answer (J) := ' ';   --  no separator before leftmost digit
+ 
+             elsif Answer (J) = 'b' then
+                Answer (J) := ' ';
+             end if;
+          end loop;
+ 
+          if Position > Pic.End_Float then
+             Position := Pic.End_Float;
+          end if;
+ 
+          for J in Pic.Start_Float .. Position - 1 loop
+             Answer (J) := ' ';
+          end loop;
+ 
+          Answer (Position) := Pic.Floater;
+          Currency_Pos      := Position;
+ 
+       elsif Pic.Floater = '*' then
+ 
+          for J in Pic.End_Float .. Position loop --  May be null range
+             if Answer (J) = '9' then
+                Answer (J) := '0';
+ 
+             elsif Answer (J) = '_' then
+                Answer (J) := Separator_Character;
+ 
+             elsif Answer (J) = 'b' then
+                Answer (J) := '*';
+             end if;
+          end loop;
+ 
+          if Position > Pic.End_Float then
+             Position := Pic.End_Float;
+          end if;
+ 
+          for J in Pic.Start_Float .. Position loop
+             Answer (J) := '*';
+          end loop;
+ 
+       else
+          if Pic.Floater = '#' then
+             Currency_Pos := Currency_Symbol'Length;
+          end if;
+ 
+          for J in reverse Pic.Start_Float .. Position loop
+             case Answer (J) is
+ 
+                when '*' =>
+                   Answer (J) := Fill_Character;
+ 
+                when 'Z' | 'b' | '/' | '0' =>
+                   Answer (J) := ' ';
+ 
+                when '9' =>
+                   Answer (J) := '0';
+ 
+                when '.' | 'V' | 'v' | '<' | '$' | '+' | '-' =>
+                   null;
+ 
+                when '#' =>
+                   if Currency_Pos = 0 then
+                      Answer (J) := ' ';
+                   else
+                      Answer (J)   := Currency_Symbol (Currency_Pos);
+                      Currency_Pos := Currency_Pos - 1;
+                   end if;
+ 
+                when '_' =>
+ 
+                   case Pic.Floater is
+ 
+                      when '*' =>
+                         Answer (J) := Fill_Character;
+ 
+                      when 'Z' | 'b' =>
+                         Answer (J) := ' ';
+ 
+                      when '#' =>
+                         if Currency_Pos = 0 then
+                            Answer (J) := ' ';
+ 
+                         else
+                            Answer (J)   := Currency_Symbol (Currency_Pos);
+                            Currency_Pos := Currency_Pos - 1;
+                         end if;
+ 
+                      when others =>
+                         null;
+ 
+                   end case;
+ 
+                when others =>
+                   null;
+ 
+             end case;
+          end loop;
+ 
+          if Pic.Floater = '#' and then Currency_Pos /= 0 then
+             raise Layout_Error;
+          end if;
+       end if;
+ 
+       --  Do sign
+ 
+       if Sign_Position = Invalid_Position then
+          if Attrs.Negative then
+             raise Layout_Error;
+          end if;
+ 
+       else
+          if Attrs.Negative then
+             case Answer (Sign_Position) is
+                when 'C' | 'D' | '-' =>
+                   null;
+ 
+                when '+' =>
+                   Answer (Sign_Position) := '-';
+ 
+                when '<' =>
+                   Answer (Sign_Position)   := '(';
+                   Answer (Pic.Second_Sign) := ')';
+ 
+                when others =>
+                   raise Picture_Error;
+ 
+             end case;
+ 
+          else --  positive
+ 
+             case Answer (Sign_Position) is
+ 
+                when '-' =>
+                   Answer (Sign_Position) := ' ';
+ 
+                when '<' | 'C' | 'D' =>
+                   Answer (Sign_Position)   := ' ';
+                   Answer (Pic.Second_Sign) := ' ';
+ 
+                when '+' =>
+                   null;
+ 
+                when others =>
+                   raise Picture_Error;
+ 
+             end case;
+          end if;
+       end if;
+ 
+       --  Fill in trailing digits
+ 
+       if Pic.Max_Trailing_Digits > 0 then
+ 
+          if Attrs.Has_Fraction then
+             Position := Attrs.Start_Of_Fraction;
+             Last     := Pic.Radix_Position + 1;
+ 
+             for J in Last .. Answer'Last loop
+ 
+                if Answer (J) = '9' or Answer (J) = Pic.Floater then
+                   Answer (J) := To_Wide (Rounded (Position));
+ 
+                   if Rounded (Position) /= '0' then
+                      Zero := False;
+                   end if;
+ 
+                   Position := Position + 1;
+                   Last     := J + 1;
+ 
+                   --  Used up fraction but remember place in Answer
+ 
+                   exit when Position > Attrs.End_Of_Fraction;
+ 
+                elsif Answer (J) = 'b' then
+                   Answer (J) := ' ';
+ 
+                elsif Answer (J) = '_' then
+                   Answer (J) := Separator_Character;
+ 
+                end if;
+ 
+                Last := J + 1;
+             end loop;
+ 
+             Position := Last;
+ 
+          else
+             Position := Pic.Radix_Position + 1;
+          end if;
+ 
+          --  Now fill remaining 9's with zeros and _ with separators
+ 
+          Last := Answer'Last;
+ 
+          for J in Position .. Last loop
+             if Answer (J) = '9' then
+                Answer (J) := '0';
+ 
+             elsif Answer (J) = Pic.Floater then
+                Answer (J) := '0';
+ 
+             elsif Answer (J) = '_' then
+                Answer (J) := Separator_Character;
+ 
+             elsif Answer (J) = 'b' then
+                Answer (J) := ' ';
+ 
+             end if;
+          end loop;
+ 
+          Position := Last + 1;
+ 
+       else
+          if Pic.Floater = '#' and then Currency_Pos /= 0 then
+             raise Layout_Error;
+          end if;
+ 
+          --  No trailing digits, but now J may need to stick in a currency
+          --  symbol or sign.
+ 
+          if Pic.Start_Currency = Invalid_Position then
+             Position := Answer'Last + 1;
+          else
+             Position := Pic.Start_Currency;
+          end if;
+       end if;
+ 
+       for J in Position .. Answer'Last loop
+ 
+          if Pic.Start_Currency /= Invalid_Position and then
+             Answer (Pic.Start_Currency) = '#' then
+             Currency_Pos := 1;
+          end if;
+ 
+          --  Note: There are some weird cases J can imagine with 'b' or '#'
+          --  in currency strings where the following code will cause
+          --  glitches. The trick is to tell when the character in the
+          --  answer should be checked, and when to look at the original
+          --  string. Some other time. RIE 11/26/96 ???
+ 
+          case Answer (J) is
+             when '*' =>
+                Answer (J) := Fill_Character;
+ 
+             when 'b' =>
+                Answer (J) := ' ';
+ 
+             when '#' =>
+                if Currency_Pos > Currency_Symbol'Length then
+                   Answer (J) := ' ';
+ 
+                else
+                   Answer (J)   := Currency_Symbol (Currency_Pos);
+                   Currency_Pos := Currency_Pos + 1;
+                end if;
+ 
+             when '_' =>
+ 
+                case Pic.Floater is
+ 
+                   when '*' =>
+                      Answer (J) := Fill_Character;
+ 
+                   when 'Z' | 'z' =>
+                      Answer (J) := ' ';
+ 
+                   when '#' =>
+                      if Currency_Pos > Currency_Symbol'Length then
+                         Answer (J) := ' ';
+                      else
+                         Answer (J)   := Currency_Symbol (Currency_Pos);
+                         Currency_Pos := Currency_Pos + 1;
+                      end if;
+ 
+                   when others =>
+                      null;
+ 
+                end case;
+ 
+             when others =>
+                exit;
+ 
+          end case;
+       end loop;
+ 
+       --  Now get rid of Blank_when_Zero and complete Star fill.
+ 
+       if Zero and Pic.Blank_When_Zero then
+ 
+          --  Value is zero, and blank it.
+ 
+          Last := Answer'Last;
+ 
+          if Dollar then
+             Last := Last - 1 + Currency_Symbol'Length;
+          end if;
+ 
+          if Pic.Radix_Position /= Invalid_Position and then
+             Answer (Pic.Radix_Position) = 'V' then
+             Last := Last - 1;
+          end if;
+ 
+          return Wide_Wide_String'(1 .. Last => ' ');
+ 
+       elsif Zero and Pic.Star_Fill then
+          Last := Answer'Last;
+ 
+          if Dollar then
+             Last := Last - 1 + Currency_Symbol'Length;
+          end if;
+ 
+          if Pic.Radix_Position /= Invalid_Position then
+ 
+             if Answer (Pic.Radix_Position) = 'V' then
+                Last := Last - 1;
+ 
+             elsif Dollar then
+                if Pic.Radix_Position > Pic.Start_Currency then
+                   return
+                      Wide_Wide_String'(1 .. Pic.Radix_Position - 1 => '*') &
+                      Radix_Point &
+                      Wide_Wide_String'(Pic.Radix_Position + 1 .. Last => '*');
+ 
+                else
+                   return
+                      Wide_Wide_String'
+                      (1 ..
+                       Pic.Radix_Position + Currency_Symbol'Length - 2
+                                              => '*') &
+                      Radix_Point &
+                      Wide_Wide_String'
+                        (Pic.Radix_Position + Currency_Symbol'Length .. Last
+                                              => '*');
+                end if;
+ 
+             else
+                return
+                  Wide_Wide_String'(1 .. Pic.Radix_Position - 1 => '*') &
+                  Radix_Point &
+                  Wide_Wide_String'(Pic.Radix_Position + 1 .. Last => '*');
+             end if;
+          end if;
+ 
+          return Wide_Wide_String'(1 .. Last => '*');
+       end if;
+ 
+       --  This was once a simple return statement, now there are nine
+       --  different return cases.  Not to mention the five above to deal
+       --  with zeros.  Why not split things out?
+ 
+       --  Processing the radix and sign expansion separately
+       --  would require lots of copying--the string and some of its
+       --  indicies--without really simplifying the logic.  The cases are:
+ 
+       --  1) Expand $, replace '.' with Radix_Point
+       --  2) No currency expansion, replace '.' with Radix_Point
+       --  3) Expand $, radix blanked
+       --  4) No currency expansion, radix blanked
+       --  5) Elide V
+       --  6) Expand $, Elide V
+       --  7) Elide V, Expand $ (Two cases depending on order.)
+       --  8) No radix, expand $
+       --  9) No radix, no currency expansion
+ 
+       if Pic.Radix_Position /= Invalid_Position then
+ 
+          if Answer (Pic.Radix_Position) = '.' then
+             Answer (Pic.Radix_Position) := Radix_Point;
+ 
+             if Dollar then
+ 
+                --  1) Expand $, replace '.' with Radix_Point
+ 
+                return Answer (1 .. Currency_Pos - 1) & Currency_Symbol &
+                   Answer (Currency_Pos + 1 .. Answer'Last);
+ 
+             else
+                --  2) No currency expansion, replace '.' with Radix_Point
+ 
+                return Answer;
+             end if;
+ 
+          elsif Answer (Pic.Radix_Position) = ' ' then --  blanked radix.
+             if Dollar then
+ 
+                --  3) Expand $, radix blanked
+ 
+                return Answer (1 .. Currency_Pos - 1) & Currency_Symbol &
+                  Answer (Currency_Pos + 1 .. Answer'Last);
+ 
+             else
+                --  4) No expansion, radix blanked
+ 
+                return Answer;
+             end if;
+ 
+          --  V cases
+ 
+          else
+             if not Dollar then
+ 
+                --  5) Elide V
+ 
+                return Answer (1 .. Pic.Radix_Position - 1) &
+                   Answer (Pic.Radix_Position + 1 .. Answer'Last);
+ 
+             elsif Currency_Pos < Pic.Radix_Position then
+ 
+                --  6) Expand $, Elide V
+ 
+                return Answer (1 .. Currency_Pos - 1) & Currency_Symbol &
+                   Answer (Currency_Pos + 1 .. Pic.Radix_Position - 1) &
+                   Answer (Pic.Radix_Position + 1 .. Answer'Last);
+ 
+             else
+                --  7) Elide V, Expand $
+ 
+                return Answer (1 .. Pic.Radix_Position - 1) &
+                   Answer (Pic.Radix_Position + 1 .. Currency_Pos - 1) &
+                   Currency_Symbol &
+                   Answer (Currency_Pos + 1 .. Answer'Last);
+             end if;
+          end if;
+ 
+       elsif Dollar then
+ 
+          --  8) No radix, expand $
+ 
+          return Answer (1 .. Currency_Pos - 1) & Currency_Symbol &
+             Answer (Currency_Pos + 1 .. Answer'Last);
+ 
+       else
+          --  9) No radix, no currency expansion
+ 
+          return Answer;
+       end if;
+    end Format_Number;
+ 
+    -------------------------
+    -- Parse_Number_String --
+    -------------------------
+ 
+    function Parse_Number_String (Str : String) return Number_Attributes is
+       Answer : Number_Attributes;
+ 
+    begin
+       for J in Str'Range loop
+          case Str (J) is
+ 
+             when ' ' =>
+                null; --  ignore
+ 
+             when '1' .. '9' =>
+ 
+                --  Decide if this is the start of a number.
+                --  If so, figure out which one...
+ 
+                if Answer.Has_Fraction then
+                   Answer.End_Of_Fraction := J;
+                else
+                   if Answer.Start_Of_Int = Invalid_Position then
+                      --  start integer
+                      Answer.Start_Of_Int := J;
+                   end if;
+                   Answer.End_Of_Int := J;
+                end if;
+ 
+             when '0' =>
+ 
+                --  Only count a zero before the decimal point if it follows a
+                --  non-zero digit.  After the decimal point, zeros will be
+                --  counted if followed by a non-zero digit.
+ 
+                if not Answer.Has_Fraction then
+                   if Answer.Start_Of_Int /= Invalid_Position then
+                      Answer.End_Of_Int := J;
+                   end if;
+                end if;
+ 
+             when '-' =>
+ 
+                --  Set negative
+ 
+                Answer.Negative := True;
+ 
+             when '.' =>
+ 
+                --  Close integer, start fraction
+ 
+                if Answer.Has_Fraction then
+                   raise Picture_Error;
+                end if;
+ 
+                --  Two decimal points is a no-no.
+ 
+                Answer.Has_Fraction    := True;
+                Answer.End_Of_Fraction := J;
+ 
+                --  Could leave this at Invalid_Position, but this seems the
+                --  right way to indicate a null range...
+ 
+                Answer.Start_Of_Fraction := J + 1;
+                Answer.End_Of_Int        := J - 1;
+ 
+             when others =>
+                raise Picture_Error; -- can this happen? probably not!
+          end case;
+       end loop;
+ 
+       if Answer.Start_Of_Int = Invalid_Position then
+          Answer.Start_Of_Int := Answer.End_Of_Int + 1;
+       end if;
+ 
+       --  No significant (intger) digits needs a null range.
+ 
+       return Answer;
+    end Parse_Number_String;
+ 
+    ----------------
+    -- Pic_String --
+    ----------------
+ 
+    --  The following ensures that we return B and not b being careful not
+    --  to break things which expect lower case b for blank. See CXF3A02.
+ 
+    function Pic_String (Pic : in Picture) return String is
+       Temp : String (1 .. Pic.Contents.Picture.Length) :=
+                               Pic.Contents.Picture.Expanded;
+    begin
+       for J in Temp'Range loop
+          if Temp (J) = 'b' then Temp (J) := 'B'; end if;
+       end loop;
+ 
+       return Temp;
+    end Pic_String;
+ 
+    ------------------
+    -- Precalculate --
+    ------------------
+ 
+    procedure Precalculate  (Pic : in out Format_Record) is
+ 
+       Computed_BWZ : Boolean := True;
+ 
+       type Legality is  (Okay, Reject);
+       State : Legality := Reject;
+       --  Start in reject, which will reject null strings.
+ 
+       Index : Pic_Index := Pic.Picture.Expanded'First;
+ 
+       function At_End return Boolean;
+       pragma Inline (At_End);
+ 
+       procedure Set_State (L : Legality);
+       pragma Inline (Set_State);
+ 
+       function Look return Character;
+       pragma Inline (Look);
+ 
+       function Is_Insert return Boolean;
+       pragma Inline (Is_Insert);
+ 
+       procedure Skip;
+       pragma Inline (Skip);
+ 
+       procedure Trailing_Currency;
+       procedure Trailing_Bracket;
+       procedure Number_Fraction;
+       procedure Number_Completion;
+       procedure Number_Fraction_Or_Bracket;
+       procedure Number_Fraction_Or_Z_Fill;
+       procedure Zero_Suppression;
+       procedure Floating_Bracket;
+       procedure Number_Fraction_Or_Star_Fill;
+       procedure Star_Suppression;
+       procedure Number_Fraction_Or_Dollar;
+       procedure Leading_Dollar;
+       procedure Number_Fraction_Or_Pound;
+       procedure Leading_Pound;
+       procedure Picture;
+       procedure Floating_Plus;
+       procedure Floating_Minus;
+       procedure Picture_Plus;
+       procedure Picture_Minus;
+       procedure Picture_Bracket;
+       procedure Number;
+       procedure Optional_RHS_Sign;
+       procedure Picture_String;
+ 
+       ------------
+       -- At_End --
+       ------------
+ 
+       function At_End return Boolean is
+       begin
+          return Index > Pic.Picture.Length;
+       end At_End;
+ 
+       ----------------------
+       -- Floating_Bracket --
+       ----------------------
+ 
+       --  Note that Floating_Bracket is only called with an acceptable
+       --  prefix. But we don't set Okay, because we must end with a '>'.
+ 
+       procedure Floating_Bracket is
+       begin
+          Pic.Floater := '<';
+          Pic.End_Float := Index;
+          Pic.Max_Leading_Digits := Pic.Max_Leading_Digits + 1;
+ 
+          --  First bracket wasn't counted...
+ 
+          Skip; --  known '<'
+ 
+          loop
+             if At_End then
+                return;
+             end if;
+ 
+             case Look is
+ 
+                when '_' | '0' | '/' =>
+                   Pic.End_Float := Index;
+                   Skip;
+ 
+                when 'B' | 'b'  =>
+                   Pic.End_Float := Index;
+                   Pic.Picture.Expanded (Index) := 'b';
+                   Skip;
+ 
+                when '<' =>
+                   Pic.End_Float := Index;
+                   Pic.Max_Leading_Digits := Pic.Max_Leading_Digits + 1;
+                   Skip;
+ 
+                when '9' =>
+                   Number_Completion;
+ 
+                when '$' =>
+                   Leading_Dollar;
+ 
+                when '#' =>
+                   Leading_Pound;
+ 
+                when 'V' | 'v' | '.' =>
+                   Pic.Radix_Position := Index;
+                   Skip;
+                   Number_Fraction_Or_Bracket;
+                   return;
+ 
+                when others =>
+                return;
+             end case;
+          end loop;
+       end Floating_Bracket;
+ 
+       --------------------
+       -- Floating_Minus --
+       --------------------
+ 
+       procedure Floating_Minus is
+       begin
+          loop
+             if At_End then
+                return;
+             end if;
+ 
+             case Look is
+                when '_' | '0' | '/' =>
+                   Pic.End_Float := Index;
+                   Skip;
+ 
+                when 'B' | 'b'  =>
+                   Pic.End_Float := Index;
+                   Pic.Picture.Expanded (Index) := 'b';
+                   Skip;
+ 
+                when '-' =>
+                   Pic.Max_Leading_Digits := Pic.Max_Leading_Digits + 1;
+                   Pic.End_Float := Index;
+                   Skip;
+ 
+                when '9' =>
+                   Number_Completion;
+                   return;
+ 
+                when '.' | 'V' | 'v' =>
+                   Pic.Radix_Position := Index;
+                   Skip; --  Radix
+ 
+                   while Is_Insert loop
+                      Skip;
+                   end loop;
+ 
+                   if At_End then
+                      return;
+                   end if;
+ 
+                   if Look = '-' then
+                      loop
+                         if At_End then
+                            return;
+                         end if;
+ 
+                         case Look is
+ 
+                            when '-' =>
+                               Pic.Max_Trailing_Digits :=
+                                 Pic.Max_Trailing_Digits + 1;
+                               Pic.End_Float := Index;
+                               Skip;
+ 
+                            when '_' | '0' | '/' =>
+                               Skip;
+ 
+                            when 'B' | 'b'  =>
+                               Pic.Picture.Expanded (Index) := 'b';
+                               Skip;
+ 
+                            when others =>
+                               return;
+ 
+                         end case;
+                      end loop;
+ 
+                   else
+                      Number_Completion;
+                   end if;
+ 
+                   return;
+ 
+                when others =>
+                   return;
+             end case;
+          end loop;
+       end Floating_Minus;
+ 
+       -------------------
+       -- Floating_Plus --
+       -------------------
+ 
+       procedure Floating_Plus is
+       begin
+          loop
+             if At_End then
+                return;
+             end if;
+ 
+             case Look is
+                when '_' | '0' | '/' =>
+                   Pic.End_Float := Index;
+                   Skip;
+ 
+                when 'B' | 'b'  =>
+                   Pic.End_Float := Index;
+                   Pic.Picture.Expanded (Index) := 'b';
+                   Skip;
+ 
+                when '+' =>
+                   Pic.Max_Leading_Digits := Pic.Max_Leading_Digits + 1;
+                   Pic.End_Float := Index;
+                   Skip;
+ 
+                when '9' =>
+                   Number_Completion;
+                   return;
+ 
+                when '.' | 'V' | 'v' =>
+                   Pic.Radix_Position := Index;
+                   Skip; --  Radix
+ 
+                   while Is_Insert loop
+                      Skip;
+                   end loop;
+ 
+                   if At_End then
+                      return;
+                   end if;
+ 
+                   if Look = '+' then
+                      loop
+                         if At_End then
+                            return;
+                         end if;
+ 
+                         case Look is
+ 
+                            when '+' =>
+                               Pic.Max_Trailing_Digits :=
+                                 Pic.Max_Trailing_Digits + 1;
+                               Pic.End_Float := Index;
+                               Skip;
+ 
+                            when '_' | '0' | '/' =>
+                               Skip;
+ 
+                            when 'B' | 'b'  =>
+                               Pic.Picture.Expanded (Index) := 'b';
+                               Skip;
+ 
+                            when others =>
+                               return;
+ 
+                         end case;
+                      end loop;
+ 
+                   else
+                      Number_Completion;
+                   end if;
+ 
+                   return;
+ 
+                when others =>
+                   return;
+ 
+             end case;
+          end loop;
+       end Floating_Plus;
+ 
+       ---------------
+       -- Is_Insert --
+       ---------------
+ 
+       function Is_Insert return Boolean is
+       begin
+          if At_End then
+             return False;
+          end if;
+ 
+          case Pic.Picture.Expanded (Index) is
+ 
+             when '_' | '0' | '/' => return True;
+ 
+             when 'B' | 'b' =>
+                Pic.Picture.Expanded (Index) := 'b'; --  canonical
+                return True;
+ 
+             when others => return False;
+          end case;
+       end Is_Insert;
+ 
+       --------------------
+       -- Leading_Dollar --
+       --------------------
+ 
+       --  Note that Leading_Dollar can be called in either State.
+       --  It will set state to Okay only if a 9 or (second) $
+       --  is encountered.
+ 
+       --  Also notice the tricky bit with State and Zero_Suppression.
+       --  Zero_Suppression is Picture_Error if a '$' or a '9' has been
+       --  encountered, exactly the cases where State has been set.
+ 
+       procedure Leading_Dollar is
+       begin
+          --  Treat as a floating dollar, and unwind otherwise.
+ 
+          Pic.Floater := '$';
+          Pic.Start_Currency := Index;
+          Pic.End_Currency := Index;
+          Pic.Start_Float := Index;
+          Pic.End_Float := Index;
+ 
+          --  Don't increment Pic.Max_Leading_Digits, we need one "real"
+          --  currency place.
+ 
+          Skip; --  known '$'
+ 
+          loop
+             if At_End then
+                return;
+             end if;
+ 
+             case Look is
+ 
+                when '_' | '0' | '/' =>
+                   Pic.End_Float := Index;
+                   Skip;
+ 
+                   --  A trailing insertion character is not part of the
+                   --  floating currency, so need to look ahead.
+ 
+                   if Look /= '$' then
+                      Pic.End_Float := Pic.End_Float - 1;
+                   end if;
+ 
+                when 'B' | 'b'  =>
+                   Pic.End_Float := Index;
+                   Pic.Picture.Expanded (Index) := 'b';
+                   Skip;
+ 
+                when 'Z' | 'z' =>
+                   Pic.Picture.Expanded (Index) := 'Z'; -- consistency
+ 
+                   if State = Okay then
+                      raise Picture_Error;
+                   else
+                      --  Will overwrite Floater and Start_Float
+ 
+                      Zero_Suppression;
+                   end if;
+ 
+                when '*' =>
+                   if State = Okay then
+                      raise Picture_Error;
+                   else
+                      --  Will overwrite Floater and Start_Float
+ 
+                      Star_Suppression;
+                   end if;
+ 
+                when '$' =>
+                   Pic.Max_Leading_Digits := Pic.Max_Leading_Digits + 1;
+                   Pic.End_Float := Index;
+                   Pic.End_Currency := Index;
+                   Set_State (Okay); Skip;
+ 
+                when '9' =>
+                   if State /= Okay then
+                      Pic.Floater := '!';
+                      Pic.Start_Float := Invalid_Position;
+                      Pic.End_Float := Invalid_Position;
+                   end if;
+ 
+                   --  A single dollar does not a floating make.
+ 
+                   Number_Completion;
+                   return;
+ 
+                when 'V' | 'v' | '.' =>
+                   if State /= Okay then
+                      Pic.Floater := '!';
+                      Pic.Start_Float := Invalid_Position;
+                      Pic.End_Float := Invalid_Position;
+                   end if;
+ 
+                   --  Only one dollar before the sign is okay,
+                   --  but doesn't float.
+ 
+                   Pic.Radix_Position := Index;
+                   Skip;
+                   Number_Fraction_Or_Dollar;
+                   return;
+ 
+                when others =>
+                   return;
+ 
+             end case;
+          end loop;
+       end Leading_Dollar;
+ 
+       -------------------
+       -- Leading_Pound --
+       -------------------
+ 
+       --  This one is complex!  A Leading_Pound can be fixed or floating,
+       --  but in some cases the decision has to be deferred until we leave
+       --  this procedure.  Also note that Leading_Pound can be called in
+       --  either State.
+ 
+       --  It will set state to Okay only if a 9 or  (second) # is
+       --  encountered.
+ 
+       --  One Last note:  In ambiguous cases, the currency is treated as
+       --  floating unless there is only one '#'.
+ 
+       procedure Leading_Pound is
+ 
+          Inserts : Boolean := False;
+          --  Set to True if a '_', '0', '/', 'B', or 'b' is encountered
+ 
+          Must_Float : Boolean := False;
+          --  Set to true if a '#' occurs after an insert.
+ 
+       begin
+          --  Treat as a floating currency. If it isn't, this will be
+          --  overwritten later.
+ 
+          Pic.Floater := '#';
+ 
+          Pic.Start_Currency := Index;
+          Pic.End_Currency := Index;
+          Pic.Start_Float := Index;
+          Pic.End_Float := Index;
+ 
+          --  Don't increment Pic.Max_Leading_Digits, we need one "real"
+          --  currency place.
+ 
+          Pic.Max_Currency_Digits := 1; --  we've seen one.
+ 
+          Skip; --  known '#'
+ 
+          loop
+             if At_End then
+                return;
+             end if;
+ 
+             case Look is
+ 
+                when '_' | '0' | '/' =>
+                   Pic.End_Float := Index;
+                   Inserts := True;
+                   Skip;
+ 
+                when 'B' | 'b'  =>
+                   Pic.Picture.Expanded (Index) := 'b';
+                   Pic.End_Float := Index;
+                   Inserts := True;
+                   Skip;
+ 
+                when 'Z' | 'z' =>
+                   Pic.Picture.Expanded (Index) := 'Z'; -- consistency
+ 
+                   if Must_Float then
+                      raise Picture_Error;
+                   else
+                      Pic.Max_Leading_Digits := 0;
+ 
+                      --  Will overwrite Floater and Start_Float
+ 
+                      Zero_Suppression;
+                   end if;
+ 
+                when '*' =>
+                   if Must_Float then
+                      raise Picture_Error;
+                   else
+                      Pic.Max_Leading_Digits := 0;
+ 
+                      --  Will overwrite Floater and Start_Float
+ 
+                      Star_Suppression;
+                   end if;
+ 
+                when '#' =>
+                   if Inserts then
+                      Must_Float := True;
+                   end if;
+ 
+                   Pic.Max_Leading_Digits := Pic.Max_Leading_Digits + 1;
+                   Pic.End_Float := Index;
+                   Pic.End_Currency := Index;
+                   Set_State (Okay);
+                   Skip;
+ 
+                when '9' =>
+                   if State /= Okay then
+ 
+                      --  A single '#' doesn't float.
+ 
+                      Pic.Floater := '!';
+                      Pic.Start_Float := Invalid_Position;
+                      Pic.End_Float := Invalid_Position;
+                   end if;
+ 
+                   Number_Completion;
+                   return;
+ 
+                when 'V' | 'v' | '.' =>
+                   if State /= Okay then
+                      Pic.Floater := '!';
+                      Pic.Start_Float := Invalid_Position;
+                      Pic.End_Float := Invalid_Position;
+                   end if;
+ 
+                   --  Only one pound before the sign is okay,
+                   --  but doesn't float.
+ 
+                   Pic.Radix_Position := Index;
+                   Skip;
+                   Number_Fraction_Or_Pound;
+                   return;
+ 
+                when others =>
+                   return;
+             end case;
+          end loop;
+       end Leading_Pound;
+ 
+       ----------
+       -- Look --
+       ----------
+ 
+       function Look return Character is
+       begin
+          if At_End then
+             raise Picture_Error;
+          end if;
+ 
+          return Pic.Picture.Expanded (Index);
+       end Look;
+ 
+       ------------
+       -- Number --
+       ------------
+ 
+       procedure Number is
+       begin
+          loop
+ 
+             case Look is
+                when '_' | '0' | '/' =>
+                   Skip;
+ 
+                when 'B' | 'b'  =>
+                   Pic.Picture.Expanded (Index) := 'b';
+                   Skip;
+ 
+                when '9' =>
+                   Computed_BWZ := False;
+                   Pic.Max_Leading_Digits := Pic.Max_Leading_Digits + 1;
+                   Set_State (Okay);
+                   Skip;
+ 
+                when '.' | 'V' | 'v' =>
+                   Pic.Radix_Position := Index;
+                   Skip;
+                   Number_Fraction;
+                   return;
+ 
+                when others =>
+                   return;
+ 
+             end case;
+ 
+             if At_End then
+                return;
+             end if;
+ 
+             --  Will return in Okay state if a '9' was seen.
+ 
+          end loop;
+       end Number;
+ 
+       -----------------------
+       -- Number_Completion --
+       -----------------------
+ 
+       procedure Number_Completion is
+       begin
+          while not At_End loop
+             case Look is
+ 
+                when '_' | '0' | '/' =>
+                   Skip;
+ 
+                when 'B' | 'b'  =>
+                   Pic.Picture.Expanded (Index) := 'b';
+                   Skip;
+ 
+                when '9' =>
+                   Computed_BWZ := False;
+                   Pic.Max_Leading_Digits := Pic.Max_Leading_Digits + 1;
+                   Set_State (Okay);
+                   Skip;
+ 
+                when 'V' | 'v' | '.' =>
+                   Pic.Radix_Position := Index;
+                   Skip;
+                   Number_Fraction;
+                   return;
+ 
+                when others =>
+                   return;
+             end case;
+          end loop;
+       end Number_Completion;
+ 
+       ---------------------
+       -- Number_Fraction --
+       ---------------------
+ 
+       procedure Number_Fraction is
+       begin
+          --  Note that number fraction can be called in either State.
+          --  It will set state to Valid only if a 9 is encountered.
+ 
+          loop
+             if At_End then
+                return;
+             end if;
+ 
+             case Look is
+                when '_' | '0' | '/' =>
+                   Skip;
+ 
+                when 'B' | 'b'  =>
+                   Pic.Picture.Expanded (Index) := 'b';
+                   Skip;
+ 
+                when '9' =>
+                   Computed_BWZ := False;
+                   Pic.Max_Trailing_Digits := Pic.Max_Trailing_Digits + 1;
+                   Set_State (Okay); Skip;
+ 
+                when others =>
+                   return;
+             end case;
+          end loop;
+       end Number_Fraction;
+ 
+       --------------------------------
+       -- Number_Fraction_Or_Bracket --
+       --------------------------------
+ 
+       procedure Number_Fraction_Or_Bracket is
+       begin
+          loop
+             if At_End then
+                return;
+             end if;
+ 
+             case Look is
+ 
+                when '_' | '0' | '/' => Skip;
+ 
+                when 'B' | 'b'  =>
+                   Pic.Picture.Expanded (Index) := 'b';
+                   Skip;
+ 
+                when '<' =>
+                   Pic.Max_Trailing_Digits := Pic.Max_Trailing_Digits + 1;
+                   Pic.End_Float := Index;
+                   Skip;
+ 
+                   loop
+                      if At_End then
+                         return;
+                      end if;
+ 
+                      case Look is
+                         when '_' | '0' | '/' =>
+                            Skip;
+ 
+                         when 'B' | 'b'  =>
+                            Pic.Picture.Expanded (Index) := 'b';
+                            Skip;
+ 
+                         when '<' =>
+                            Pic.Max_Trailing_Digits :=
+                              Pic.Max_Trailing_Digits + 1;
+                            Pic.End_Float := Index;
+                            Skip;
+ 
+                         when others =>
+                            return;
+                      end case;
+                   end loop;
+ 
+                when others =>
+                   Number_Fraction;
+                   return;
+             end case;
+          end loop;
+       end Number_Fraction_Or_Bracket;
+ 
+       -------------------------------
+       -- Number_Fraction_Or_Dollar --
+       -------------------------------
+ 
+       procedure Number_Fraction_Or_Dollar is
+       begin
+          loop
+             if At_End then
+                return;
+             end if;
+ 
+             case Look is
+                when '_' | '0' | '/' =>
+                   Skip;
+ 
+                when 'B' | 'b'  =>
+                   Pic.Picture.Expanded (Index) := 'b';
+                   Skip;
+ 
+                when '$' =>
+                   Pic.Max_Trailing_Digits := Pic.Max_Trailing_Digits + 1;
+                   Pic.End_Float := Index;
+                   Skip;
+ 
+                   loop
+                      if At_End then
+                         return;
+                      end if;
+ 
+                      case Look is
+                         when '_' | '0' | '/' =>
+                            Skip;
+ 
+                         when 'B' | 'b'  =>
+                            Pic.Picture.Expanded (Index) := 'b';
+                            Skip;
+ 
+                         when '$' =>
+                            Pic.Max_Trailing_Digits :=
+                              Pic.Max_Trailing_Digits + 1;
+                            Pic.End_Float := Index;
+                            Skip;
+ 
+                         when others =>
+                            return;
+                      end case;
+                   end loop;
+ 
+                when others =>
+                   Number_Fraction;
+                   return;
+             end case;
+          end loop;
+       end Number_Fraction_Or_Dollar;
+ 
+       ------------------------------
+       -- Number_Fraction_Or_Pound --
+       ------------------------------
+ 
+       procedure Number_Fraction_Or_Pound is
+       begin
+          loop
+             if At_End then
+                return;
+             end if;
+ 
+             case Look is
+ 
+                when '_' | '0' | '/' =>
+                   Skip;
+ 
+                when 'B' | 'b'  =>
+                   Pic.Picture.Expanded (Index) := 'b';
+                   Skip;
+ 
+                when '#' =>
+                   Pic.Max_Trailing_Digits := Pic.Max_Trailing_Digits + 1;
+                   Pic.End_Float := Index;
+                   Skip;
+ 
+                   loop
+                      if At_End then
+                         return;
+                      end if;
+ 
+                      case Look is
+ 
+                         when '_' | '0' | '/' =>
+                            Skip;
+ 
+                         when 'B' | 'b'  =>
+                            Pic.Picture.Expanded (Index) := 'b';
+                            Skip;
+ 
+                         when '#' =>
+                            Pic.Max_Trailing_Digits :=
+                              Pic.Max_Trailing_Digits + 1;
+                            Pic.End_Float := Index;
+                            Skip;
+ 
+                         when others =>
+                            return;
+ 
+                      end case;
+                   end loop;
+ 
+                when others =>
+                   Number_Fraction;
+                   return;
+ 
+             end case;
+          end loop;
+       end Number_Fraction_Or_Pound;
+ 
+       ----------------------------------
+       -- Number_Fraction_Or_Star_Fill --
+       ----------------------------------
+ 
+       procedure Number_Fraction_Or_Star_Fill is
+       begin
+          loop
+             if At_End then
+                return;
+             end if;
+ 
+             case Look is
+ 
+                when '_' | '0' | '/' =>
+                   Skip;
+ 
+                when 'B' | 'b'  =>
+                   Pic.Picture.Expanded (Index) := 'b';
+                   Skip;
+ 
+                when '*' =>
+                   Pic.Star_Fill := True;
+                   Pic.Max_Trailing_Digits := Pic.Max_Trailing_Digits + 1;
+                   Pic.End_Float := Index;
+                   Skip;
+ 
+                   loop
+                      if At_End then
+                         return;
+                      end if;
+ 
+                      case Look is
+ 
+                         when '_' | '0' | '/' =>
+                            Skip;
+ 
+                         when 'B' | 'b'  =>
+                            Pic.Picture.Expanded (Index) := 'b';
+                            Skip;
+ 
+                         when '*' =>
+                            Pic.Star_Fill := True;
+                            Pic.Max_Trailing_Digits :=
+                              Pic.Max_Trailing_Digits + 1;
+                            Pic.End_Float := Index;
+                            Skip;
+ 
+                         when others =>
+                            return;
+                      end case;
+                   end loop;
+ 
+                when others =>
+                   Number_Fraction;
+                   return;
+ 
+             end case;
+          end loop;
+       end Number_Fraction_Or_Star_Fill;
+ 
+       -------------------------------
+       -- Number_Fraction_Or_Z_Fill --
+       -------------------------------
+ 
+       procedure Number_Fraction_Or_Z_Fill is
+       begin
+          loop
+             if At_End then
+                return;
+             end if;
+ 
+             case Look is
+ 
+                when '_' | '0' | '/' =>
+                   Skip;
+ 
+                when 'B' | 'b'  =>
+                   Pic.Picture.Expanded (Index) := 'b';
+                   Skip;
+ 
+                when 'Z' | 'z' =>
+                   Pic.Max_Trailing_Digits := Pic.Max_Trailing_Digits + 1;
+                   Pic.End_Float := Index;
+                   Pic.Picture.Expanded (Index) := 'Z'; -- consistency
+ 
+                   Skip;
+ 
+                   loop
+                      if At_End then
+                         return;
+                      end if;
+ 
+                      case Look is
+ 
+                         when '_' | '0' | '/' =>
+                            Skip;
+ 
+                         when 'B' | 'b'  =>
+                            Pic.Picture.Expanded (Index) := 'b';
+                            Skip;
+ 
+                         when 'Z' | 'z' =>
+                            Pic.Picture.Expanded (Index) := 'Z'; -- consistency
+ 
+                            Pic.Max_Trailing_Digits :=
+                              Pic.Max_Trailing_Digits + 1;
+                            Pic.End_Float := Index;
+                            Skip;
+ 
+                         when others =>
+                            return;
+                      end case;
+                   end loop;
+ 
+                when others =>
+                   Number_Fraction;
+                   return;
+             end case;
+          end loop;
+       end Number_Fraction_Or_Z_Fill;
+ 
+       -----------------------
+       -- Optional_RHS_Sign --
+       -----------------------
+ 
+       procedure Optional_RHS_Sign is
+       begin
+          if At_End then
+             return;
+          end if;
+ 
+          case Look is
+ 
+             when '+' | '-' =>
+                Pic.Sign_Position := Index;
+                Skip;
+                return;
+ 
+             when 'C' | 'c' =>
+                Pic.Sign_Position := Index;
+                Pic.Picture.Expanded (Index) := 'C';
+                Skip;
+ 
+                if Look = 'R' or Look = 'r' then
+                   Pic.Second_Sign := Index;
+                   Pic.Picture.Expanded (Index) := 'R';
+                   Skip;
+ 
+                else
+                   raise Picture_Error;
+                end if;
+ 
+                return;
+ 
+             when 'D' | 'd' =>
+                Pic.Sign_Position := Index;
+                Pic.Picture.Expanded (Index) := 'D';
+                Skip;
+ 
+                if Look = 'B' or Look = 'b' then
+                   Pic.Second_Sign := Index;
+                   Pic.Picture.Expanded (Index) := 'B';
+                   Skip;
+ 
+                else
+                   raise Picture_Error;
+                end if;
+ 
+                return;
+ 
+             when '>' =>
+                if Pic.Picture.Expanded (Pic.Sign_Position) = '<' then
+                   Pic.Second_Sign := Index;
+                   Skip;
+ 
+                else
+                   raise Picture_Error;
+                end if;
+ 
+             when others =>
+                return;
+ 
+          end case;
+       end Optional_RHS_Sign;
+ 
+       -------------
+       -- Picture --
+       -------------
+ 
+       --  Note that Picture can be called in either State.
+ 
+       --  It will set state to Valid only if a 9 is encountered or floating
+       --  currency is called.
+ 
+       procedure Picture is
+       begin
+          loop
+             if At_End then
+                return;
+             end if;
+ 
+             case Look is
+ 
+                when '_' | '0' | '/' =>
+                   Skip;
+ 
+                when 'B' | 'b'  =>
+                   Pic.Picture.Expanded (Index) := 'b';
+                   Skip;
+ 
+                when '$' =>
+                   Leading_Dollar;
+                   return;
+ 
+                when '#' =>
+                   Leading_Pound;
+                   return;
+ 
+                when '9' =>
+                   Computed_BWZ := False;
+                   Set_State (Okay);
+                   Pic.Max_Leading_Digits := Pic.Max_Leading_Digits + 1;
+                   Skip;
+ 
+                when 'V' | 'v' | '.' =>
+                   Pic.Radix_Position := Index;
+                   Skip;
+                   Number_Fraction;
+                   Trailing_Currency;
+                   return;
+ 
+                when others =>
+                   return;
+ 
+             end case;
+          end loop;
+       end Picture;
+ 
+       ---------------------
+       -- Picture_Bracket --
+       ---------------------
+ 
+       procedure Picture_Bracket is
+       begin
+          Pic.Sign_Position := Index;
+          Pic.Sign_Position := Index;
+ 
+          --  Treat as a floating sign, and unwind otherwise.
+ 
+          Pic.Floater := '<';
+          Pic.Start_Float := Index;
+          Pic.End_Float := Index;
+ 
+          --  Don't increment Pic.Max_Leading_Digits, we need one "real"
+          --  sign place.
+ 
+          Skip; --  Known Bracket
+ 
+          loop
+             case Look is
+ 
+                when '_' | '0' | '/' =>
+                   Pic.End_Float := Index;
+                   Skip;
+ 
+                when 'B' | 'b'  =>
+                   Pic.End_Float := Index;
+                   Pic.Picture.Expanded (Index) := 'b';
+                   Skip;
+ 
+                when '<' =>
+                   Set_State (Okay);  --  "<<>" is enough.
+                   Floating_Bracket;
+                   Trailing_Currency;
+                   Trailing_Bracket;
+                   return;
+ 
+                when '$' | '#' | '9' | '*' =>
+                   if State /= Okay then
+                      Pic.Floater := '!';
+                      Pic.Start_Float := Invalid_Position;
+                      Pic.End_Float := Invalid_Position;
+                   end if;
+ 
+                   Picture;
+                   Trailing_Bracket;
+                   Set_State (Okay);
+                   return;
+ 
+                when '.' | 'V' | 'v' =>
+                   if State /= Okay then
+                      Pic.Floater := '!';
+                      Pic.Start_Float := Invalid_Position;
+                      Pic.End_Float := Invalid_Position;
+                   end if;
+ 
+                   --  Don't assume that state is okay, haven't seen a digit
+ 
+                   Picture;
+                   Trailing_Bracket;
+                   return;
+ 
+                when others =>
+                   raise Picture_Error;
+ 
+             end case;
+          end loop;
+       end Picture_Bracket;
+ 
+       -------------------
+       -- Picture_Minus --
+       -------------------
+ 
+       procedure Picture_Minus is
+       begin
+          Pic.Sign_Position := Index;
+ 
+          --  Treat as a floating sign, and unwind otherwise.
+ 
+          Pic.Floater := '-';
+          Pic.Start_Float := Index;
+          Pic.End_Float := Index;
+ 
+          --  Don't increment Pic.Max_Leading_Digits, we need one "real"
+          --  sign place.
+ 
+          Skip; --  Known Minus
+ 
+          loop
+             case Look is
+ 
+                when '_' | '0' | '/' =>
+                   Pic.End_Float := Index;
+                   Skip;
+ 
+                when 'B' | 'b'  =>
+                   Pic.End_Float := Index;
+                   Pic.Picture.Expanded (Index) := 'b';
+                   Skip;
+ 
+                when '-' =>
+                   Pic.Max_Leading_Digits := Pic.Max_Leading_Digits + 1;
+                   Pic.End_Float := Index;
+                   Skip;
+                   Set_State (Okay);  --  "-- " is enough.
+                   Floating_Minus;
+                   Trailing_Currency;
+                   return;
+ 
+                when '$' | '#' | '9' | '*' =>
+                   if State /= Okay then
+                      Pic.Floater := '!';
+                      Pic.Start_Float := Invalid_Position;
+                      Pic.End_Float := Invalid_Position;
+                   end if;
+ 
+                   Picture;
+                   Set_State (Okay);
+                   return;
+ 
+                when 'Z' | 'z' =>
+ 
+                   --  Can't have Z and a floating sign.
+ 
+                   if State = Okay then
+                      Set_State (Reject);
+                   end if;
+ 
+                   Pic.Picture.Expanded (Index) := 'Z'; -- consistency
+                   Zero_Suppression;
+                   Trailing_Currency;
+                   Optional_RHS_Sign;
+                   return;
+ 
+                when '.' | 'V' | 'v' =>
+                   if State /= Okay then
+                      Pic.Floater := '!';
+                      Pic.Start_Float := Invalid_Position;
+                      Pic.End_Float := Invalid_Position;
+                   end if;
+ 
+                   --  Don't assume that state is okay, haven't seen a digit.
+ 
+                   Picture;
+                   return;
+ 
+                when others =>
+                   return;
+ 
+             end case;
+          end loop;
+       end Picture_Minus;
+ 
+       ------------------
+       -- Picture_Plus --
+       ------------------
+ 
+       procedure Picture_Plus is
+       begin
+          Pic.Sign_Position := Index;
+ 
+          --  Treat as a floating sign, and unwind otherwise.
+ 
+          Pic.Floater := '+';
+          Pic.Start_Float := Index;
+          Pic.End_Float := Index;
+ 
+          --  Don't increment Pic.Max_Leading_Digits, we need one "real"
+          --  sign place.
+ 
+          Skip; --  Known Plus
+ 
+          loop
+             case Look is
+ 
+                when '_' | '0' | '/' =>
+                   Pic.End_Float := Index;
+                   Skip;
+ 
+                when 'B' | 'b'  =>
+                   Pic.End_Float := Index;
+                   Pic.Picture.Expanded (Index) := 'b';
+                   Skip;
+ 
+                when '+' =>
+                   Pic.Max_Leading_Digits := Pic.Max_Leading_Digits + 1;
+                   Pic.End_Float := Index;
+                   Skip;
+                   Set_State (Okay);  --  "++" is enough.
+                   Floating_Plus;
+                   Trailing_Currency;
+                   return;
+ 
+                when '$' | '#' | '9' | '*' =>
+                   if State /= Okay then
+                      Pic.Floater := '!';
+                      Pic.Start_Float := Invalid_Position;
+                      Pic.End_Float := Invalid_Position;
+                   end if;
+ 
+                   Picture;
+                   Set_State (Okay);
+                   return;
+ 
+                when 'Z' | 'z' =>
+                   if State = Okay then
+                      Set_State (Reject);
+                   end if;
+ 
+                   --  Can't have Z and a floating sign.
+ 
+                   Pic.Picture.Expanded (Index) := 'Z'; -- consistency
+ 
+                   --  '+Z' is acceptable
+ 
+                   Set_State (Okay);
+ 
+                   Zero_Suppression;
+                   Trailing_Currency;
+                   Optional_RHS_Sign;
+                   return;
+ 
+                when '.' | 'V' | 'v' =>
+                   if State /= Okay then
+                      Pic.Floater := '!';
+                      Pic.Start_Float := Invalid_Position;
+                      Pic.End_Float := Invalid_Position;
+                   end if;
+ 
+                   --  Don't assume that state is okay, haven't seen a digit.
+ 
+                   Picture;
+                   return;
+ 
+                when others =>
+                   return;
+ 
+             end case;
+          end loop;
+       end Picture_Plus;
+ 
+       --------------------
+       -- Picture_String --
+       --------------------
+ 
+       procedure Picture_String is
+       begin
+          while Is_Insert loop
+             Skip;
+          end loop;
+ 
+          case Look is
+ 
+             when '$' | '#' =>
+                Picture;
+                Optional_RHS_Sign;
+ 
+             when '+' =>
+                Picture_Plus;
+ 
+             when '-' =>
+                Picture_Minus;
+ 
+             when '<' =>
+                Picture_Bracket;
+ 
+             when 'Z' | 'z' =>
+                Pic.Picture.Expanded (Index) := 'Z'; -- consistency
+                Zero_Suppression;
+                Trailing_Currency;
+                Optional_RHS_Sign;
+ 
+             when '*' =>
+                Star_Suppression;
+                Trailing_Currency;
+                Optional_RHS_Sign;
+ 
+             when '9' | '.' | 'V' | 'v' =>
+                Number;
+                Trailing_Currency;
+                Optional_RHS_Sign;
+ 
+             when others =>
+                raise Picture_Error;
+ 
+          end case;
+ 
+          --  Blank when zero either if the PIC does not contain a '9' or if
+          --  requested by the user and no '*'
+ 
+          Pic.Blank_When_Zero :=
+            (Computed_BWZ or Pic.Blank_When_Zero) and not Pic.Star_Fill;
+ 
+          --  Star fill if '*' and no '9'.
+ 
+          Pic.Star_Fill := Pic.Star_Fill and Computed_BWZ;
+ 
+          if not At_End then
+             Set_State (Reject);
+          end if;
+ 
+       end Picture_String;
+ 
+       ---------------
+       -- Set_State --
+       ---------------
+ 
+       procedure Set_State (L : Legality) is
+       begin
+          State := L;
+       end Set_State;
+ 
+       ----------
+       -- Skip --
+       ----------
+ 
+       procedure Skip is
+       begin
+          Index := Index + 1;
+       end Skip;
+ 
+       ----------------------
+       -- Star_Suppression --
+       ----------------------
+ 
+       procedure Star_Suppression is
+       begin
+          Pic.Floater := '*';
+          Pic.Start_Float := Index;
+          Pic.End_Float := Index;
+          Pic.Max_Leading_Digits := Pic.Max_Leading_Digits + 1;
+          Set_State (Okay);
+ 
+          --  Even a single * is a valid picture
+ 
+          Pic.Star_Fill := True;
+          Skip; --  Known *
+ 
+          loop
+             if At_End then
+                return;
+             end if;
+ 
+             case Look is
+ 
+                when '_' | '0' | '/' =>
+                   Pic.End_Float := Index;
+                   Skip;
+ 
+                when 'B' | 'b'  =>
+                   Pic.End_Float := Index;
+                   Pic.Picture.Expanded (Index) := 'b';
+                   Skip;
+ 
+                when '*' =>
+                   Pic.End_Float := Index;
+                   Pic.Max_Leading_Digits := Pic.Max_Leading_Digits + 1;
+                   Set_State (Okay); Skip;
+ 
+                when '9' =>
+                   Set_State (Okay);
+                   Number_Completion;
+                   return;
+ 
+                when '.' | 'V' | 'v' =>
+                   Pic.Radix_Position := Index;
+                   Skip;
+                   Number_Fraction_Or_Star_Fill;
+                   return;
+ 
+                when '#' | '$' =>
+                   Trailing_Currency;
+                   Set_State (Okay);
+                   return;
+ 
+                when others => raise Picture_Error;
+             end case;
+          end loop;
+       end Star_Suppression;
+ 
+       ----------------------
+       -- Trailing_Bracket --
+       ----------------------
+ 
+       procedure Trailing_Bracket is
+       begin
+          if Look = '>' then
+             Pic.Second_Sign := Index;
+             Skip;
+          else
+             raise Picture_Error;
+          end if;
+       end Trailing_Bracket;
+ 
+       -----------------------
+       -- Trailing_Currency --
+       -----------------------
+ 
+       procedure Trailing_Currency is
+       begin
+          if At_End then
+             return;
+          end if;
+ 
+          if Look = '$' then
+             Pic.Start_Currency := Index;
+             Pic.End_Currency := Index;
+             Skip;
+ 
+          else
+             while not At_End and then Look = '#' loop
+                if Pic.Start_Currency = Invalid_Position then
+                   Pic.Start_Currency := Index;
+                end if;
+ 
+                Pic.End_Currency := Index;
+                Skip;
+             end loop;
+          end if;
+ 
+          loop
+             if At_End then
+                return;
+             end if;
+ 
+             case Look is
+                when '_' | '0' | '/' => Skip;
+ 
+                when 'B' | 'b'  =>
+                   Pic.Picture.Expanded (Index) := 'b';
+                   Skip;
+ 
+                when others => return;
+             end case;
+          end loop;
+       end Trailing_Currency;
+ 
+       ----------------------
+       -- Zero_Suppression --
+       ----------------------
+ 
+       procedure Zero_Suppression is
+       begin
+          Pic.Floater := 'Z';
+          Pic.Start_Float := Index;
+          Pic.End_Float := Index;
+          Pic.Max_Leading_Digits := Pic.Max_Leading_Digits + 1;
+          Pic.Picture.Expanded (Index) := 'Z'; -- consistency
+ 
+          Skip; --  Known Z
+ 
+          loop
+             --  Even a single Z is a valid picture
+ 
+             if At_End then
+                Set_State (Okay);
+                return;
+             end if;
+ 
+             case Look is
+                when '_' | '0' | '/' =>
+                   Pic.End_Float := Index;
+                   Skip;
+ 
+                when 'B' | 'b'  =>
+                   Pic.End_Float := Index;
+                   Pic.Picture.Expanded (Index) := 'b';
+                   Skip;
+ 
+                when 'Z' | 'z' =>
+                   Pic.Picture.Expanded (Index) := 'Z'; -- consistency
+ 
+                   Pic.Max_Leading_Digits := Pic.Max_Leading_Digits + 1;
+                   Pic.End_Float := Index;
+                   Set_State (Okay);
+                   Skip;
+ 
+                when '9' =>
+                   Set_State (Okay);
+                   Number_Completion;
+                   return;
+ 
+                when '.' | 'V' | 'v' =>
+                   Pic.Radix_Position := Index;
+                   Skip;
+                   Number_Fraction_Or_Z_Fill;
+                   return;
+ 
+                when '#' | '$' =>
+                   Trailing_Currency;
+                   Set_State (Okay);
+                   return;
+ 
+                when others =>
+                   return;
+             end case;
+          end loop;
+       end Zero_Suppression;
+ 
+    --  Start of processing for Precalculate
+ 
+    begin
+       Picture_String;
+ 
+       if State = Reject then
+          raise Picture_Error;
+       end if;
+ 
+    exception
+ 
+       when Constraint_Error =>
+ 
+          --  To deal with special cases like null strings.
+ 
+       raise Picture_Error;
+ 
+    end Precalculate;
+ 
+    ----------------
+    -- To_Picture --
+    ----------------
+ 
+    function To_Picture
+      (Pic_String      : String;
+       Blank_When_Zero : Boolean := False) return Picture
+    is
+       Result : Picture;
+ 
+    begin
+       declare
+          Item : constant String := Expand (Pic_String);
+ 
+       begin
+          Result.Contents.Picture         := (Item'Length, Item);
+          Result.Contents.Original_BWZ := Blank_When_Zero;
+          Result.Contents.Blank_When_Zero := Blank_When_Zero;
+          Precalculate (Result.Contents);
+          return Result;
+       end;
+ 
+    exception
+       when others =>
+          raise Picture_Error;
+ 
+    end To_Picture;
+ 
+    -------------
+    -- To_Wide --
+    -------------
+ 
+    function To_Wide (C : Character) return Wide_Wide_Character is
+    begin
+       return Wide_Wide_Character'Val (Character'Pos (C));
+    end To_Wide;
+ 
+    -----------
+    -- Valid --
+    -----------
+ 
+    function Valid
+      (Pic_String      : String;
+       Blank_When_Zero : Boolean := False) return Boolean
+    is
+    begin
+       declare
+          Expanded_Pic : constant String := Expand (Pic_String);
+          --  Raises Picture_Error if Item not well-formed
+ 
+          Format_Rec : Format_Record;
+ 
+       begin
+          Format_Rec.Picture := (Expanded_Pic'Length, Expanded_Pic);
+          Format_Rec.Blank_When_Zero := Blank_When_Zero;
+          Format_Rec.Original_BWZ := Blank_When_Zero;
+          Precalculate (Format_Rec);
+ 
+          --  False only if Blank_When_0 is True but the pic string
+          --  has a '*'
+ 
+          return not Blank_When_Zero or
+            Strings_Fixed.Index (Expanded_Pic, "*") = 0;
+       end;
+ 
+    exception
+       when others => return False;
+    end Valid;
+ 
+ end Ada.Wide_Wide_Text_IO.Editing;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ztedit.ads gcc-4.0.0/gcc/ada/a-ztedit.ads
*** gcc-3.4.3/gcc/ada/a-ztedit.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-ztedit.ads	Wed Feb  9 11:14:42 2005
***************
*** 0 ****
--- 1,200 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --        A D A . W I D E _ W I D E _ T E X T _ I O . E D I T I N G         --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package Ada.Wide_Wide_Text_IO.Editing is
+ 
+    type Picture is private;
+ 
+    function Valid
+      (Pic_String      : String;
+       Blank_When_Zero : Boolean := False) return Boolean;
+ 
+    function To_Picture
+      (Pic_String      : String;
+       Blank_When_Zero : Boolean := False) return Picture;
+ 
+    function Pic_String      (Pic : in Picture) return String;
+    function Blank_When_Zero (Pic : in Picture) return Boolean;
+ 
+    Max_Picture_Length : constant := 64;
+ 
+    Picture_Error : exception;
+ 
+    Default_Currency   : constant Wide_Wide_String    := "$";
+    Default_Fill       : constant Wide_Wide_Character := ' ';
+    Default_Separator  : constant Wide_Wide_Character := ',';
+    Default_Radix_Mark : constant Wide_Wide_Character := '.';
+ 
+    generic
+       type Num is delta <> digits <>;
+       Default_Currency   : Wide_Wide_String :=
+                                 Wide_Wide_Text_IO.Editing.Default_Currency;
+       Default_Fill       : Wide_Wide_Character :=
+                                 Wide_Wide_Text_IO.Editing.Default_Fill;
+       Default_Separator  : Wide_Wide_Character :=
+                                 Wide_Wide_Text_IO.Editing.Default_Separator;
+       Default_Radix_Mark : Wide_Wide_Character :=
+                                 Wide_Wide_Text_IO.Editing.Default_Radix_Mark;
+ 
+    package Decimal_Output is
+ 
+       function Length
+         (Pic      : Picture;
+          Currency : Wide_Wide_String := Default_Currency) return Natural;
+ 
+       function Valid
+         (Item     : Num;
+          Pic      : Picture;
+          Currency : Wide_Wide_String := Default_Currency) return Boolean;
+ 
+       function Image
+         (Item       : Num;
+          Pic        : Picture;
+          Currency   : Wide_Wide_String    := Default_Currency;
+          Fill       : Wide_Wide_Character := Default_Fill;
+          Separator  : Wide_Wide_Character := Default_Separator;
+          Radix_Mark : Wide_Wide_Character := Default_Radix_Mark)
+          return Wide_Wide_String;
+ 
+       procedure Put
+         (File       : File_Type;
+          Item       : Num;
+          Pic        : Picture;
+          Currency   : Wide_Wide_String    := Default_Currency;
+          Fill       : Wide_Wide_Character := Default_Fill;
+          Separator  : Wide_Wide_Character := Default_Separator;
+          Radix_Mark : Wide_Wide_Character := Default_Radix_Mark);
+ 
+       procedure Put
+         (Item       : Num;
+          Pic        : Picture;
+          Currency   : Wide_Wide_String    := Default_Currency;
+          Fill       : Wide_Wide_Character := Default_Fill;
+          Separator  : Wide_Wide_Character := Default_Separator;
+          Radix_Mark : Wide_Wide_Character := Default_Radix_Mark);
+ 
+       procedure Put
+         (To         : out Wide_Wide_String;
+          Item       : Num;
+          Pic        : Picture;
+          Currency   : Wide_Wide_String    := Default_Currency;
+          Fill       : Wide_Wide_Character := Default_Fill;
+          Separator  : Wide_Wide_Character := Default_Separator;
+          Radix_Mark : Wide_Wide_Character := Default_Radix_Mark);
+ 
+    end Decimal_Output;
+ 
+ private
+    MAX_PICSIZE      : constant := 50;
+    MAX_MONEYSIZE    : constant := 10;
+    Invalid_Position : constant := -1;
+ 
+    subtype Pic_Index is Natural range 0 .. MAX_PICSIZE;
+ 
+    type Picture_Record (Length : Pic_Index := 0) is record
+       Expanded : String (1 .. Length);
+    end record;
+ 
+    type Format_Record is record
+       Picture              : Picture_Record;
+       --  Read only
+ 
+       Blank_When_Zero      : Boolean;
+       --  Read/write
+ 
+       Original_BWZ         : Boolean;
+ 
+       --  The following components get written
+ 
+       Star_Fill            : Boolean := False;
+ 
+       Radix_Position       : Integer := Invalid_Position;
+ 
+       Sign_Position,
+       Second_Sign          : Integer := Invalid_Position;
+ 
+       Start_Float,
+       End_Float            : Integer := Invalid_Position;
+ 
+       Start_Currency,
+       End_Currency         : Integer := Invalid_Position;
+ 
+       Max_Leading_Digits   : Integer := 0;
+ 
+       Max_Trailing_Digits  : Integer := 0;
+ 
+       Max_Currency_Digits  : Integer := 0;
+ 
+       Floater              : Wide_Wide_Character := '!';
+       --  Initialized to illegal value
+ 
+    end record;
+ 
+    type Picture is record
+       Contents : Format_Record;
+    end record;
+ 
+    type Number_Attributes is record
+       Negative     : Boolean := False;
+ 
+       Has_Fraction : Boolean := False;
+ 
+       Start_Of_Int,
+       End_Of_Int,
+       Start_Of_Fraction,
+       End_Of_Fraction : Integer := Invalid_Position;    -- invalid value
+    end record;
+ 
+    function Parse_Number_String (Str : String) return Number_Attributes;
+    --  Assumed format is 'IMAGE or Fixed_IO.Put format (depends on no
+    --  trailing blanks...)
+ 
+    procedure Precalculate (Pic : in out Format_Record);
+    --  Precalculates fields from the user supplied data
+ 
+    function Format_Number
+      (Pic                 : Format_Record;
+       Number              : String;
+       Currency_Symbol     : Wide_Wide_String;
+       Fill_Character      : Wide_Wide_Character;
+       Separator_Character : Wide_Wide_Character;
+       Radix_Point         : Wide_Wide_Character) return Wide_Wide_String;
+    --  Formats number according to Pic
+ 
+    function Expand (Picture : in String) return String;
+ 
+ end Ada.Wide_Wide_Text_IO.Editing;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ztenau.adb gcc-4.0.0/gcc/ada/a-ztenau.adb
*** gcc-3.4.3/gcc/ada/a-ztenau.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-ztenau.adb	Wed Feb  9 11:14:42 2005
***************
*** 0 ****
--- 1,354 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ -- A D A . W I D E _ W I D E _ T E X T _ I O . E N U M E R A T I O N _ A U X--
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Wide_Wide_Text_IO.Generic_Aux; use Ada.Wide_Wide_Text_IO.Generic_Aux;
+ with Ada.Characters.Handling;           use Ada.Characters.Handling;
+ with Interfaces.C_Streams;              use Interfaces.C_Streams;
+ with System.WCh_Con;                    use System.WCh_Con;
+ 
+ package body Ada.Wide_Wide_Text_IO.Enumeration_Aux is
+ 
+    subtype TFT is Ada.Wide_Wide_Text_IO.File_Type;
+    --  File type required for calls to routines in Aux
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    procedure Store_Char
+      (WC   : Wide_Wide_Character;
+       Buf  : out Wide_Wide_String;
+       Ptr  : in out Integer);
+    --  Store a single character in buffer, checking for overflow.
+ 
+    --  These definitions replace the ones in Ada.Characters.Handling, which
+    --  do not seem to work for some strange not understood reason ??? at
+    --  least in the OS/2 version.
+ 
+    function To_Lower (C : Character) return Character;
+ 
+    ------------------
+    -- Get_Enum_Lit --
+    ------------------
+ 
+    procedure Get_Enum_Lit
+      (File   : File_Type;
+       Buf    : out Wide_Wide_String;
+       Buflen : out Natural)
+    is
+       ch  : int;
+       WC  : Wide_Wide_Character;
+ 
+    begin
+       Buflen := 0;
+       Load_Skip (TFT (File));
+       ch := Nextc (TFT (File));
+ 
+       --  Character literal case. If the initial character is a quote, then
+       --  we read as far as we can without backup (see ACVC test CE3905L)
+ 
+       if ch = Character'Pos (''') then
+          Get (File, WC);
+          Store_Char (WC, Buf, Buflen);
+ 
+          ch := Nextc (TFT (File));
+ 
+          if ch = LM or else ch = EOF then
+             return;
+          end if;
+ 
+          Get (File, WC);
+          Store_Char (WC, Buf, Buflen);
+ 
+          ch := Nextc (TFT (File));
+ 
+          if ch /= Character'Pos (''') then
+             return;
+          end if;
+ 
+          Get (File, WC);
+          Store_Char (WC, Buf, Buflen);
+ 
+       --  Similarly for identifiers, read as far as we can, in particular,
+       --  do read a trailing underscore (again see ACVC test CE3905L to
+       --  understand why we do this, although it seems somewhat peculiar).
+ 
+       else
+          --  Identifier must start with a letter. Any wide character value
+          --  outside the normal Latin-1 range counts as a letter for this.
+ 
+          if ch < 255 and then not Is_Letter (Character'Val (ch)) then
+             return;
+          end if;
+ 
+          --  If we do have a letter, loop through the characters quitting on
+          --  the first non-identifier character (note that this includes the
+          --  cases of hitting a line mark or page mark).
+ 
+          loop
+             Get (File, WC);
+             Store_Char (WC, Buf, Buflen);
+ 
+             ch := Nextc (TFT (File));
+ 
+             exit when ch = EOF;
+ 
+             if ch = Character'Pos ('_') then
+                exit when Buf (Buflen) = '_';
+ 
+             elsif ch = Character'Pos (ASCII.ESC) then
+                null;
+ 
+             elsif File.WC_Method in WC_Upper_Half_Encoding_Method
+               and then ch > 127
+             then
+                null;
+ 
+             else
+                exit when not Is_Letter (Character'Val (ch))
+                            and then
+                          not Is_Digit (Character'Val (ch));
+             end if;
+          end loop;
+       end if;
+    end Get_Enum_Lit;
+ 
+    ---------
+    -- Put --
+    ---------
+ 
+    procedure Put
+      (File  : File_Type;
+       Item  : Wide_Wide_String;
+       Width : Field;
+       Set   : Type_Set)
+    is
+       Actual_Width : constant Integer :=
+                        Integer'Max (Integer (Width), Item'Length);
+ 
+    begin
+       Check_On_One_Line (TFT (File), Actual_Width);
+ 
+       if Set = Lower_Case and then Item (1) /= ''' then
+          declare
+             Iteml : Wide_Wide_String (Item'First .. Item'Last);
+ 
+          begin
+             for J in Item'Range loop
+                if Is_Character (Item (J)) then
+                   Iteml (J) :=
+                     To_Wide_Wide_Character
+                       (To_Lower (To_Character (Item (J))));
+                else
+                   Iteml (J) := Item (J);
+                end if;
+             end loop;
+ 
+             Put (File, Iteml);
+          end;
+ 
+       else
+          Put (File, Item);
+       end if;
+ 
+       for J in 1 .. Actual_Width - Item'Length loop
+          Put (File, ' ');
+       end loop;
+    end Put;
+ 
+    ----------
+    -- Puts --
+    ----------
+ 
+    procedure Puts
+      (To    : out Wide_Wide_String;
+       Item  : Wide_Wide_String;
+       Set   : Type_Set)
+    is
+       Ptr : Natural;
+ 
+    begin
+       if Item'Length > To'Length then
+          raise Layout_Error;
+ 
+       else
+          Ptr := To'First;
+          for J in Item'Range loop
+             if Set = Lower_Case
+               and then Item (1) /= '''
+               and then Is_Character (Item (J))
+             then
+                To (Ptr) :=
+                  To_Wide_Wide_Character (To_Lower (To_Character (Item (J))));
+             else
+                To (Ptr) := Item (J);
+             end if;
+ 
+             Ptr := Ptr + 1;
+          end loop;
+ 
+          while Ptr <= To'Last loop
+             To (Ptr) := ' ';
+             Ptr := Ptr + 1;
+          end loop;
+       end if;
+    end Puts;
+ 
+    -------------------
+    -- Scan_Enum_Lit --
+    -------------------
+ 
+    procedure Scan_Enum_Lit
+      (From  : Wide_Wide_String;
+       Start : out Natural;
+       Stop  : out Natural)
+    is
+       WC  : Wide_Wide_Character;
+ 
+    --  Processing for Scan_Enum_Lit
+ 
+    begin
+       Start := From'First;
+ 
+       loop
+          if Start > From'Last then
+             raise End_Error;
+ 
+          elsif Is_Character (From (Start))
+            and then not Is_Blank (To_Character (From (Start)))
+          then
+             exit;
+ 
+          else
+             Start := Start + 1;
+          end if;
+       end loop;
+ 
+       --  Character literal case. If the initial character is a quote, then
+       --  we read as far as we can without backup (see ACVC test CE3905L
+       --  which is for the analogous case for reading from a file).
+ 
+       if From (Start) = ''' then
+          Stop := Start;
+ 
+          if Stop = From'Last then
+             raise Data_Error;
+          else
+             Stop := Stop + 1;
+          end if;
+ 
+          if From (Stop) in ' ' .. '~'
+            or else From (Stop) >= Wide_Wide_Character'Val (16#80#)
+          then
+             if Stop = From'Last then
+                raise Data_Error;
+             else
+                Stop := Stop + 1;
+ 
+                if From (Stop) = ''' then
+                   return;
+                end if;
+             end if;
+          end if;
+ 
+          raise Data_Error;
+ 
+       --  Similarly for identifiers, read as far as we can, in particular,
+       --  do read a trailing underscore (again see ACVC test CE3905L to
+       --  understand why we do this, although it seems somewhat peculiar).
+ 
+       else
+          --  Identifier must start with a letter, any wide character outside
+          --  the normal Latin-1 range is considered a letter for this test.
+ 
+          if Is_Character (From (Start))
+            and then not Is_Letter (To_Character (From (Start)))
+          then
+             raise Data_Error;
+          end if;
+ 
+          --  If we do have a letter, loop through the characters quitting on
+          --  the first non-identifier character (note that this includes the
+          --  cases of hitting a line mark or page mark).
+ 
+          Stop := Start + 1;
+          while Stop < From'Last loop
+             WC := From (Stop + 1);
+ 
+             exit when
+               Is_Character (WC)
+                 and then
+                   not Is_Letter (To_Character (WC))
+                 and then
+                   not Is_Letter (To_Character (WC))
+                 and then
+                   (WC /= '_' or else From (Stop - 1) = '_');
+ 
+             Stop := Stop + 1;
+          end loop;
+       end if;
+ 
+    end Scan_Enum_Lit;
+ 
+    ----------------
+    -- Store_Char --
+    ----------------
+ 
+    procedure Store_Char
+      (WC   : Wide_Wide_Character;
+       Buf  : out Wide_Wide_String;
+       Ptr  : in out Integer)
+    is
+    begin
+       if Ptr = Buf'Last then
+          raise Data_Error;
+       else
+          Ptr := Ptr + 1;
+          Buf (Ptr) := WC;
+       end if;
+    end Store_Char;
+ 
+    --------------
+    -- To_Lower --
+    --------------
+ 
+    function To_Lower (C : Character) return Character is
+    begin
+       if C in 'A' .. 'Z' then
+          return Character'Val (Character'Pos (C) + 32);
+       else
+          return C;
+       end if;
+    end To_Lower;
+ 
+ end Ada.Wide_Wide_Text_IO.Enumeration_Aux;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ztenau.ads gcc-4.0.0/gcc/ada/a-ztenau.ads
*** gcc-3.4.3/gcc/ada/a-ztenau.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-ztenau.ads	Wed Feb  9 11:14:42 2005
***************
*** 0 ****
--- 1,71 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ -- A D A . W I D E _ W I D E _ T E X T _ I O . E N U M E R A T I O N _ A U X--
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package contains the routines for Ada.Wide_Wide_Text_IO.Enumeration_IO
+ --  that are shared among separate instantiations.
+ 
+ private package Ada.Wide_Wide_Text_IO.Enumeration_Aux is
+ 
+    procedure Get_Enum_Lit
+      (File   : File_Type;
+       Buf    : out Wide_Wide_String;
+       Buflen : out Natural);
+    --  Reads an enumeration literal value from the file, folds to upper case,
+    --  and stores the result in Buf, setting Buflen to the number of stored
+    --  characters (Buf has a lower bound of 1). If more than Buflen characters
+    --  are present in the literal, Data_Error is raised.
+ 
+    procedure Scan_Enum_Lit
+      (From  : Wide_Wide_String;
+       Start : out Natural;
+       Stop  : out Natural);
+    --  Scans an enumeration literal at the start of From, skipping any leading
+    --  spaces. Sets Start to the first character, Stop to the last character.
+    --  Raises End_Error if no enumeration literal is found.
+ 
+    procedure Put
+      (File  : File_Type;
+       Item  : Wide_Wide_String;
+       Width : Field;
+       Set   : Type_Set);
+    --  Outputs the enumeration literal image stored in Item to the given File,
+    --  using the given Width and Set parameters (Item is always in upper case).
+ 
+    procedure Puts
+      (To    : out Wide_Wide_String;
+       Item  : Wide_Wide_String;
+       Set   : Type_Set);
+    --  Stores the enumeration literal image stored in Item to the string To,
+    --  padding with trailing spaces if necessary to fill To. Set is used to
+ 
+ end Ada.Wide_Wide_Text_IO.Enumeration_Aux;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ztenio.adb gcc-4.0.0/gcc/ada/a-ztenio.adb
*** gcc-3.4.3/gcc/ada/a-ztenio.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-ztenio.adb	Wed Feb  9 11:14:42 2005
***************
*** 0 ****
--- 1,112 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --  A D A . W I D E _ W I D E _ T E X T _ I O . E N U M E R A T I O N _ I O --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Wide_Wide_Text_IO.Enumeration_Aux;
+ 
+ package body Ada.Wide_Wide_Text_IO.Enumeration_IO is
+ 
+    package Aux renames Ada.Wide_Wide_Text_IO.Enumeration_Aux;
+ 
+    ---------
+    -- Get --
+    ---------
+ 
+    procedure Get (File : File_Type; Item : out Enum) is
+       Buf    : Wide_Wide_String (1 .. Enum'Width);
+       Buflen : Natural;
+ 
+    begin
+       Aux.Get_Enum_Lit (File, Buf, Buflen);
+       Item := Enum'Wide_Wide_Value (Buf (1 .. Buflen));
+ 
+    exception
+       when Constraint_Error => raise Data_Error;
+    end Get;
+ 
+    procedure Get (Item : out Enum) is
+    begin
+       Get (Current_Input, Item);
+    end Get;
+ 
+    procedure Get
+      (From : Wide_Wide_String;
+       Item : out Enum;
+       Last : out Positive)
+    is
+       Start : Natural;
+ 
+    begin
+       Aux.Scan_Enum_Lit (From, Start, Last);
+       Item := Enum'Wide_Wide_Value (From (Start .. Last));
+ 
+    exception
+       when Constraint_Error => raise Data_Error;
+    end Get;
+ 
+    ---------
+    -- Put --
+    ---------
+ 
+    procedure Put
+      (File  : File_Type;
+       Item  : Enum;
+       Width : Field := Default_Width;
+       Set   : Type_Set := Default_Setting)
+    is
+       Image : constant Wide_Wide_String := Enum'Wide_Wide_Image (Item);
+ 
+    begin
+       Aux.Put (File, Image, Width, Set);
+    end Put;
+ 
+    procedure Put
+      (Item  : Enum;
+       Width : Field := Default_Width;
+       Set   : Type_Set := Default_Setting)
+    is
+    begin
+       Put (Current_Output, Item, Width, Set);
+    end Put;
+ 
+    procedure Put
+      (To   : out Wide_Wide_String;
+       Item : Enum;
+       Set  : Type_Set := Default_Setting)
+    is
+       Image : constant Wide_Wide_String := Enum'Wide_Wide_Image (Item);
+ 
+    begin
+       Aux.Puts (To, Image, Set);
+    end Put;
+ 
+ end Ada.Wide_Wide_Text_IO.Enumeration_IO;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ztenio.ads gcc-4.0.0/gcc/ada/a-ztenio.ads
*** gcc-3.4.3/gcc/ada/a-ztenio.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-ztenio.ads	Wed Feb  9 11:14:42 2005
***************
*** 0 ****
--- 1,77 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --  A D A . W I D E _ W I D E _ T E X T _ I O . E N U M E R A T I O N _ I O --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  In Ada 95, the package Ada.Wide_Wide_Text_IO.Enumeration_IO is a
+ --  subpackage of Wide_Wide_Text_IO. In GNAT we make it a child package to
+ --  avoid loading the necessary code if Enumeration_IO is not instantiated.
+ --  See the routine Rtsfind.Text_IO_Kludge for a description of how we patch
+ --  up the difference in semantics so that it is invisible to the Ada
+ --  programmer.
+ 
+ private generic
+    type Enum is (<>);
+ 
+ package Ada.Wide_Wide_Text_IO.Enumeration_IO is
+ 
+    Default_Width : Field := 0;
+    Default_Setting : Type_Set := Upper_Case;
+ 
+    procedure Get (File : File_Type; Item : out Enum);
+    procedure Get (Item : out Enum);
+ 
+    procedure Put
+      (File  : File_Type;
+       Item  : Enum;
+       Width : Field := Default_Width;
+       Set   : Type_Set := Default_Setting);
+ 
+    procedure Put
+      (Item  : Enum;
+       Width : Field := Default_Width;
+       Set   : Type_Set := Default_Setting);
+ 
+    procedure Get
+      (From : Wide_Wide_String;
+       Item : out Enum;
+       Last : out Positive);
+ 
+    procedure Put
+      (To   : out Wide_Wide_String;
+       Item : Enum;
+       Set  : Type_Set := Default_Setting);
+ 
+ end Ada.Wide_Wide_Text_IO.Enumeration_IO;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ztexio.adb gcc-4.0.0/gcc/ada/a-ztexio.adb
*** gcc-3.4.3/gcc/ada/a-ztexio.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-ztexio.adb	Wed Feb  9 11:14:42 2005
***************
*** 0 ****
--- 1,1898 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --                A D A . W I D E _ W I D E _ T E X T _ I O                 --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Exceptions;       use Ada.Exceptions;
+ with Ada.Streams;          use Ada.Streams;
+ with Interfaces.C_Streams; use Interfaces.C_Streams;
+ 
+ with System;
+ with System.CRTL;
+ with System.File_IO;
+ with System.WCh_Cnv;       use System.WCh_Cnv;
+ with System.WCh_Con;       use System.WCh_Con;
+ 
+ with Unchecked_Conversion;
+ with Unchecked_Deallocation;
+ 
+ pragma Elaborate_All (System.File_IO);
+ --  Needed because of calls to Chain_File in package body elaboration
+ 
+ package body Ada.Wide_Wide_Text_IO is
+ 
+    package FIO renames System.File_IO;
+ 
+    subtype AP is FCB.AFCB_Ptr;
+ 
+    function To_FCB is new Unchecked_Conversion (File_Mode, FCB.File_Mode);
+    function To_TIO is new Unchecked_Conversion (FCB.File_Mode, File_Mode);
+    use type FCB.File_Mode;
+ 
+    use type System.CRTL.size_t;
+ 
+    WC_Encoding : Character;
+    pragma Import (C, WC_Encoding, "__gl_wc_encoding");
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    function Getc_Immed (File : File_Type) return int;
+    --  This routine is identical to Getc, except that the read is done in
+    --  Get_Immediate mode (i.e. without waiting for a line return).
+ 
+    function Get_Wide_Wide_Char_Immed
+      (C    : Character;
+       File : File_Type) return Wide_Wide_Character;
+    --  This routine is identical to Get_Wide_Wide_Char, except that the reads
+    --  are done in Get_Immediate mode (i.e. without waiting for a line return).
+ 
+    procedure Set_WCEM (File : in out File_Type);
+    --  Called by Open and Create to set the wide character encoding method
+    --  for the file, processing a WCEM form parameter if one is present.
+    --  File is IN OUT because it may be closed in case of an error.
+ 
+    -------------------
+    -- AFCB_Allocate --
+    -------------------
+ 
+    function AFCB_Allocate
+      (Control_Block : Wide_Wide_Text_AFCB) return FCB.AFCB_Ptr
+    is
+       pragma Unreferenced (Control_Block);
+    begin
+       return new Wide_Wide_Text_AFCB;
+    end AFCB_Allocate;
+ 
+    ----------------
+    -- AFCB_Close --
+    ----------------
+ 
+    procedure AFCB_Close (File : access Wide_Wide_Text_AFCB) is
+    begin
+       --  If the file being closed is one of the current files, then close
+       --  the corresponding current file. It is not clear that this action
+       --  is required (RM A.10.3(23)) but it seems reasonable, and besides
+       --  ACVC test CE3208A expects this behavior.
+ 
+       if File_Type (File) = Current_In then
+          Current_In := null;
+       elsif File_Type (File) = Current_Out then
+          Current_Out := null;
+       elsif File_Type (File) = Current_Err then
+          Current_Err := null;
+       end if;
+ 
+       Terminate_Line (File_Type (File));
+    end AFCB_Close;
+ 
+    ---------------
+    -- AFCB_Free --
+    ---------------
+ 
+    procedure AFCB_Free (File : access Wide_Wide_Text_AFCB) is
+       type FCB_Ptr is access all Wide_Wide_Text_AFCB;
+       FT : FCB_Ptr := FCB_Ptr (File);
+ 
+       procedure Free is new
+         Unchecked_Deallocation (Wide_Wide_Text_AFCB, FCB_Ptr);
+ 
+    begin
+       Free (FT);
+    end AFCB_Free;
+ 
+    -----------
+    -- Close --
+    -----------
+ 
+    procedure Close (File : in out File_Type) is
+    begin
+       FIO.Close (AP (File));
+    end Close;
+ 
+    ---------
+    -- Col --
+    ---------
+ 
+    --  Note: we assume that it is impossible in practice for the column
+    --  to exceed the value of Count'Last, i.e. no check is required for
+    --  overflow raising layout error.
+ 
+    function Col (File : File_Type) return Positive_Count is
+    begin
+       FIO.Check_File_Open (AP (File));
+       return File.Col;
+    end Col;
+ 
+    function Col return Positive_Count is
+    begin
+       return Col (Current_Out);
+    end Col;
+ 
+    ------------
+    -- Create --
+    ------------
+ 
+    procedure Create
+      (File : in out File_Type;
+       Mode : File_Mode := Out_File;
+       Name : String := "";
+       Form : String := "")
+    is
+       Dummy_File_Control_Block : Wide_Wide_Text_AFCB;
+       pragma Warnings (Off, Dummy_File_Control_Block);
+       --  Yes, we know this is never assigned a value, only the tag
+       --  is used for dispatching purposes, so that's expected.
+ 
+    begin
+       FIO.Open (File_Ptr  => AP (File),
+                 Dummy_FCB => Dummy_File_Control_Block,
+                 Mode      => To_FCB (Mode),
+                 Name      => Name,
+                 Form      => Form,
+                 Amethod   => 'W',
+                 Creat     => True,
+                 Text      => True);
+       Set_WCEM (File);
+    end Create;
+ 
+    -------------------
+    -- Current_Error --
+    -------------------
+ 
+    function Current_Error return File_Type is
+    begin
+       return Current_Err;
+    end Current_Error;
+ 
+    function Current_Error return File_Access is
+    begin
+       return Current_Err'Access;
+    end Current_Error;
+ 
+    -------------------
+    -- Current_Input --
+    -------------------
+ 
+    function Current_Input return File_Type is
+    begin
+       return Current_In;
+    end Current_Input;
+ 
+    function Current_Input return File_Access is
+    begin
+       return Current_In'Access;
+    end Current_Input;
+ 
+    --------------------
+    -- Current_Output --
+    --------------------
+ 
+    function Current_Output return File_Type is
+    begin
+       return Current_Out;
+    end Current_Output;
+ 
+    function Current_Output return File_Access is
+    begin
+       return Current_Out'Access;
+    end Current_Output;
+ 
+    ------------
+    -- Delete --
+    ------------
+ 
+    procedure Delete (File : in out File_Type) is
+    begin
+       FIO.Delete (AP (File));
+    end Delete;
+ 
+    -----------------
+    -- End_Of_File --
+    -----------------
+ 
+    function End_Of_File (File : File_Type) return Boolean is
+       ch  : int;
+ 
+    begin
+       FIO.Check_Read_Status (AP (File));
+ 
+       if File.Before_Wide_Wide_Character then
+          return False;
+ 
+       elsif File.Before_LM then
+ 
+          if File.Before_LM_PM then
+             return Nextc (File) = EOF;
+          end if;
+ 
+       else
+          ch := Getc (File);
+ 
+          if ch = EOF then
+             return True;
+ 
+          elsif ch /= LM then
+             Ungetc (ch, File);
+             return False;
+ 
+          else -- ch = LM
+             File.Before_LM := True;
+          end if;
+       end if;
+ 
+       --  Here we are just past the line mark with Before_LM set so that we
+       --  do not have to try to back up past the LM, thus avoiding the need
+       --  to back up more than one character.
+ 
+       ch := Getc (File);
+ 
+       if ch = EOF then
+          return True;
+ 
+       elsif ch = PM and then File.Is_Regular_File then
+          File.Before_LM_PM := True;
+          return Nextc (File) = EOF;
+ 
+       --  Here if neither EOF nor PM followed end of line
+ 
+       else
+          Ungetc (ch, File);
+          return False;
+       end if;
+ 
+    end End_Of_File;
+ 
+    function End_Of_File return Boolean is
+    begin
+       return End_Of_File (Current_In);
+    end End_Of_File;
+ 
+    -----------------
+    -- End_Of_Line --
+    -----------------
+ 
+    function End_Of_Line (File : File_Type) return Boolean is
+       ch : int;
+ 
+    begin
+       FIO.Check_Read_Status (AP (File));
+ 
+       if File.Before_Wide_Wide_Character then
+          return False;
+ 
+       elsif File.Before_LM then
+          return True;
+ 
+       else
+          ch := Getc (File);
+ 
+          if ch = EOF then
+             return True;
+ 
+          else
+             Ungetc (ch, File);
+             return (ch = LM);
+          end if;
+       end if;
+    end End_Of_Line;
+ 
+    function End_Of_Line return Boolean is
+    begin
+       return End_Of_Line (Current_In);
+    end End_Of_Line;
+ 
+    -----------------
+    -- End_Of_Page --
+    -----------------
+ 
+    function End_Of_Page (File : File_Type) return Boolean is
+       ch  : int;
+ 
+    begin
+       FIO.Check_Read_Status (AP (File));
+ 
+       if not File.Is_Regular_File then
+          return False;
+ 
+       elsif File.Before_Wide_Wide_Character then
+          return False;
+ 
+       elsif File.Before_LM then
+          if File.Before_LM_PM then
+             return True;
+          end if;
+ 
+       else
+          ch := Getc (File);
+ 
+          if ch = EOF then
+             return True;
+ 
+          elsif ch /= LM then
+             Ungetc (ch, File);
+             return False;
+ 
+          else -- ch = LM
+             File.Before_LM := True;
+          end if;
+       end if;
+ 
+       --  Here we are just past the line mark with Before_LM set so that we
+       --  do not have to try to back up past the LM, thus avoiding the need
+       --  to back up more than one character.
+ 
+       ch := Nextc (File);
+ 
+       return ch = PM or else ch = EOF;
+    end End_Of_Page;
+ 
+    function End_Of_Page return Boolean is
+    begin
+       return End_Of_Page (Current_In);
+    end End_Of_Page;
+ 
+    -----------
+    -- Flush --
+    -----------
+ 
+    procedure Flush (File : File_Type) is
+    begin
+       FIO.Flush (AP (File));
+    end Flush;
+ 
+    procedure Flush is
+    begin
+       Flush (Current_Out);
+    end Flush;
+ 
+    ----------
+    -- Form --
+    ----------
+ 
+    function Form (File : File_Type) return String is
+    begin
+       return FIO.Form (AP (File));
+    end Form;
+ 
+    ---------
+    -- Get --
+    ---------
+ 
+    procedure Get
+      (File : File_Type;
+       Item : out Wide_Wide_Character)
+    is
+       C  : Character;
+ 
+    begin
+       FIO.Check_Read_Status (AP (File));
+ 
+       if File.Before_Wide_Wide_Character then
+          File.Before_Wide_Wide_Character := False;
+          Item := File.Saved_Wide_Wide_Character;
+ 
+       else
+          Get_Character (File, C);
+          Item := Get_Wide_Wide_Char (C, File);
+       end if;
+    end Get;
+ 
+    procedure Get (Item : out Wide_Wide_Character) is
+    begin
+       Get (Current_In, Item);
+    end Get;
+ 
+    procedure Get
+      (File : File_Type;
+       Item : out Wide_Wide_String)
+    is
+    begin
+       for J in Item'Range loop
+          Get (File, Item (J));
+       end loop;
+    end Get;
+ 
+    procedure Get (Item : out Wide_Wide_String) is
+    begin
+       Get (Current_In, Item);
+    end Get;
+ 
+    -------------------
+    -- Get_Character --
+    -------------------
+ 
+    procedure Get_Character
+      (File : File_Type;
+       Item : out Character)
+    is
+       ch : int;
+ 
+    begin
+       if File.Before_LM then
+          File.Before_LM := False;
+          File.Before_LM_PM := False;
+          File.Col := 1;
+ 
+          if File.Before_LM_PM then
+             File.Line := 1;
+             File.Page := File.Page + 1;
+             File.Before_LM_PM := False;
+ 
+          else
+             File.Line := File.Line + 1;
+          end if;
+       end if;
+ 
+       loop
+          ch := Getc (File);
+ 
+          if ch = EOF then
+             raise End_Error;
+ 
+          elsif ch = LM then
+             File.Line := File.Line + 1;
+             File.Col := 1;
+ 
+          elsif ch = PM and then File.Is_Regular_File then
+             File.Page := File.Page + 1;
+             File.Line := 1;
+ 
+          else
+             Item := Character'Val (ch);
+             File.Col := File.Col + 1;
+             return;
+          end if;
+       end loop;
+    end Get_Character;
+ 
+    -------------------
+    -- Get_Immediate --
+    -------------------
+ 
+    procedure Get_Immediate
+      (File : File_Type;
+       Item : out Wide_Wide_Character)
+    is
+       ch : int;
+ 
+    begin
+       FIO.Check_Read_Status (AP (File));
+ 
+       if File.Before_Wide_Wide_Character then
+          File.Before_Wide_Wide_Character := False;
+          Item := File.Saved_Wide_Wide_Character;
+ 
+       elsif File.Before_LM then
+          File.Before_LM := False;
+          File.Before_LM_PM := False;
+          Item := Wide_Wide_Character'Val (LM);
+ 
+       else
+          ch := Getc_Immed (File);
+ 
+          if ch = EOF then
+             raise End_Error;
+          else
+             Item := Get_Wide_Wide_Char_Immed (Character'Val (ch), File);
+          end if;
+       end if;
+    end Get_Immediate;
+ 
+    procedure Get_Immediate
+      (Item : out Wide_Wide_Character)
+    is
+    begin
+       Get_Immediate (Current_In, Item);
+    end Get_Immediate;
+ 
+    procedure Get_Immediate
+      (File      : File_Type;
+       Item      : out Wide_Wide_Character;
+       Available : out Boolean)
+    is
+       ch : int;
+ 
+    begin
+       FIO.Check_Read_Status (AP (File));
+       Available := True;
+ 
+       if File.Before_Wide_Wide_Character then
+          File.Before_Wide_Wide_Character := False;
+          Item := File.Saved_Wide_Wide_Character;
+ 
+       elsif File.Before_LM then
+          File.Before_LM := False;
+          File.Before_LM_PM := False;
+          Item := Wide_Wide_Character'Val (LM);
+ 
+       else
+          ch := Getc_Immed (File);
+ 
+          if ch = EOF then
+             raise End_Error;
+          else
+             Item := Get_Wide_Wide_Char_Immed (Character'Val (ch), File);
+          end if;
+       end if;
+    end Get_Immediate;
+ 
+    procedure Get_Immediate
+      (Item      : out Wide_Wide_Character;
+       Available : out Boolean)
+    is
+    begin
+       Get_Immediate (Current_In, Item, Available);
+    end Get_Immediate;
+ 
+    --------------
+    -- Get_Line --
+    --------------
+ 
+    procedure Get_Line
+      (File : File_Type;
+       Item : out Wide_Wide_String;
+       Last : out Natural)
+    is
+    begin
+       FIO.Check_Read_Status (AP (File));
+       Last := Item'First - 1;
+ 
+       --  Immediate exit for null string, this is a case in which we do not
+       --  need to test for end of file and we do not skip a line mark under
+       --  any circumstances.
+ 
+       if Last >= Item'Last then
+          return;
+       end if;
+ 
+       --  Here we have at least one character, if we are immediately before
+       --  a line mark, then we will just skip past it storing no characters.
+ 
+       if File.Before_LM then
+          File.Before_LM := False;
+          File.Before_LM_PM := False;
+ 
+       --  Otherwise we need to read some characters
+ 
+       else
+          --  If we are at the end of file now, it means we are trying to
+          --  skip a file terminator and we raise End_Error (RM A.10.7(20))
+ 
+          if Nextc (File) = EOF then
+             raise End_Error;
+          end if;
+ 
+          --  Loop through characters in string
+ 
+          loop
+             --  Exit the loop if read is terminated by encountering line mark
+             --  Note that the use of Skip_Line here ensures we properly deal
+             --  with setting the page and line numbers.
+ 
+             if End_Of_Line (File) then
+                Skip_Line (File);
+                return;
+             end if;
+ 
+             --  Otherwise store the character, note that we know that ch is
+             --  something other than LM or EOF. It could possibly be a page
+             --  mark if there is a stray page mark in the middle of a line,
+             --  but this is not an official page mark in any case, since
+             --  official page marks can only follow a line mark. The whole
+             --  page business is pretty much nonsense anyway, so we do not
+             --  want to waste time trying to make sense out of non-standard
+             --  page marks in the file! This means that the behavior of
+             --  Get_Line is different from repeated Get of a character, but
+             --  that's too bad. We only promise that page numbers etc make
+             --  sense if the file is formatted in a standard manner.
+ 
+             --  Note: we do not adjust the column number because it is quicker
+             --  to adjust it once at the end of the operation than incrementing
+             --  it each time around the loop.
+ 
+             Last := Last + 1;
+             Get (File, Item (Last));
+ 
+             --  All done if the string is full, this is the case in which
+             --  we do not skip the following line mark. We need to adjust
+             --  the column number in this case.
+ 
+             if Last = Item'Last then
+                File.Col := File.Col + Count (Item'Length);
+                return;
+             end if;
+ 
+             --  Exit from the loop if we are at the end of file. This happens
+             --  if we have a last line that is not terminated with a line mark.
+             --  In this case we consider that there is an implied line mark;
+             --  this is a non-standard file, but we will treat it nicely.
+ 
+             exit when Nextc (File) = EOF;
+          end loop;
+       end if;
+    end Get_Line;
+ 
+    procedure Get_Line
+      (Item : out Wide_Wide_String;
+       Last : out Natural)
+    is
+    begin
+       Get_Line (Current_In, Item, Last);
+    end Get_Line;
+ 
+    function Get_Line (File : File_Type) return Wide_Wide_String is
+       Buffer : Wide_Wide_String (1 .. 500);
+       Last   : Natural;
+ 
+       function Get_Rest (S : Wide_Wide_String) return Wide_Wide_String;
+       --  This is a recursive function that reads the rest of the line and
+       --  returns it. S is the part read so far.
+ 
+       --------------
+       -- Get_Rest --
+       --------------
+ 
+       function Get_Rest (S : Wide_Wide_String) return Wide_Wide_String is
+ 
+          --  Each time we allocate a buffer the same size as what we have
+          --  read so far. This limits us to a logarithmic number of calls
+          --  to Get_Rest and also ensures only a linear use of stack space.
+ 
+          Buffer : Wide_Wide_String (1 .. S'Length);
+          Last   : Natural;
+ 
+       begin
+          Get_Line (File, Buffer, Last);
+ 
+          declare
+             R : constant Wide_Wide_String := S & Buffer (1 .. Last);
+          begin
+             if Last < Buffer'Last then
+                return R;
+             else
+                return Get_Rest (R);
+             end if;
+          end;
+       end Get_Rest;
+ 
+    --  Start of processing for Get_Line
+ 
+    begin
+       Get_Line (File, Buffer, Last);
+ 
+       if Last < Buffer'Last then
+          return Buffer (1 .. Last);
+       else
+          return Get_Rest (Buffer (1 .. Last));
+       end if;
+    end Get_Line;
+ 
+    function Get_Line return Wide_Wide_String is
+    begin
+       return Get_Line (Current_In);
+    end Get_Line;
+ 
+    ------------------------
+    -- Get_Wide_Wide_Char --
+    ------------------------
+ 
+    function Get_Wide_Wide_Char
+      (C    : Character;
+       File : File_Type) return Wide_Wide_Character
+    is
+       function In_Char return Character;
+       --  Function used to obtain additional characters it the wide character
+       --  sequence is more than one character long.
+ 
+       function WC_In is new Char_Sequence_To_UTF_32 (In_Char);
+ 
+       -------------
+       -- In_Char --
+       -------------
+ 
+       function In_Char return Character is
+          ch : constant Integer := Getc (File);
+       begin
+          if ch = EOF then
+             raise End_Error;
+          else
+             return Character'Val (ch);
+          end if;
+       end In_Char;
+ 
+    --  Start of processing for Get_Wide_Wide_Char
+ 
+    begin
+       return Wide_Wide_Character'Val (WC_In (C, File.WC_Method));
+    end Get_Wide_Wide_Char;
+ 
+    ------------------------------
+    -- Get_Wide_Wide_Char_Immed --
+    ------------------------------
+ 
+    function Get_Wide_Wide_Char_Immed
+      (C    : Character;
+       File : File_Type) return Wide_Wide_Character
+    is
+       function In_Char return Character;
+       --  Function used to obtain additional characters it the wide character
+       --  sequence is more than one character long.
+ 
+       function WC_In is new Char_Sequence_To_UTF_32 (In_Char);
+ 
+       -------------
+       -- In_Char --
+       -------------
+ 
+       function In_Char return Character is
+          ch : constant Integer := Getc_Immed (File);
+       begin
+          if ch = EOF then
+             raise End_Error;
+          else
+             return Character'Val (ch);
+          end if;
+       end In_Char;
+ 
+    --  Start of processing for Get_Wide_Wide_Char_Immed
+ 
+    begin
+       return Wide_Wide_Character'Val (WC_In (C, File.WC_Method));
+    end Get_Wide_Wide_Char_Immed;
+ 
+    ----------
+    -- Getc --
+    ----------
+ 
+    function Getc (File : File_Type) return int is
+       ch : int;
+ 
+    begin
+       ch := fgetc (File.Stream);
+ 
+       if ch = EOF and then ferror (File.Stream) /= 0 then
+          raise Device_Error;
+       else
+          return ch;
+       end if;
+    end Getc;
+ 
+    ----------------
+    -- Getc_Immed --
+    ----------------
+ 
+    function Getc_Immed (File : File_Type) return int is
+       ch          : int;
+       end_of_file : int;
+ 
+       procedure getc_immediate
+         (stream : FILEs; ch : out int; end_of_file : out int);
+       pragma Import (C, getc_immediate, "getc_immediate");
+ 
+    begin
+       FIO.Check_Read_Status (AP (File));
+ 
+       if File.Before_LM then
+          File.Before_LM := False;
+          File.Before_LM_PM := False;
+          ch := LM;
+ 
+       else
+          getc_immediate (File.Stream, ch, end_of_file);
+ 
+          if ferror (File.Stream) /= 0 then
+             raise Device_Error;
+          elsif end_of_file /= 0 then
+             return EOF;
+          end if;
+       end if;
+ 
+       return ch;
+    end Getc_Immed;
+ 
+    -------------
+    -- Is_Open --
+    -------------
+ 
+    function Is_Open (File : File_Type) return Boolean is
+    begin
+       return FIO.Is_Open (AP (File));
+    end Is_Open;
+ 
+    ----------
+    -- Line --
+    ----------
+ 
+    --  Note: we assume that it is impossible in practice for the line
+    --  to exceed the value of Count'Last, i.e. no check is required for
+    --  overflow raising layout error.
+ 
+    function Line (File : File_Type) return Positive_Count is
+    begin
+       FIO.Check_File_Open (AP (File));
+       return File.Line;
+    end Line;
+ 
+    function Line return Positive_Count is
+    begin
+       return Line (Current_Out);
+    end Line;
+ 
+    -----------------
+    -- Line_Length --
+    -----------------
+ 
+    function Line_Length (File : File_Type) return Count is
+    begin
+       FIO.Check_Write_Status (AP (File));
+       return File.Line_Length;
+    end Line_Length;
+ 
+    function Line_Length return Count is
+    begin
+       return Line_Length (Current_Out);
+    end Line_Length;
+ 
+    ----------------
+    -- Look_Ahead --
+    ----------------
+ 
+    procedure Look_Ahead
+      (File        : File_Type;
+       Item        : out Wide_Wide_Character;
+       End_Of_Line : out Boolean)
+    is
+       ch : int;
+ 
+    --  Start of processing for Look_Ahead
+ 
+    begin
+       FIO.Check_Read_Status (AP (File));
+ 
+       --  If we are logically before a line mark, we can return immediately
+ 
+       if File.Before_LM then
+          End_Of_Line := True;
+          Item := Wide_Wide_Character'Val (0);
+ 
+       --  If we are before a wide character, just return it (this happens
+       --  if there are two calls to Look_Ahead in a row).
+ 
+       elsif File.Before_Wide_Wide_Character then
+          End_Of_Line := False;
+          Item := File.Saved_Wide_Wide_Character;
+ 
+       --  otherwise we must read a character from the input stream
+ 
+       else
+          ch := Getc (File);
+ 
+          if ch = LM
+            or else ch = EOF
+            or else (ch = EOF and then File.Is_Regular_File)
+          then
+             End_Of_Line := True;
+             Ungetc (ch, File);
+             Item := Wide_Wide_Character'Val (0);
+ 
+          --  If the character is in the range 16#0000# to 16#007F# it stands
+          --  for itself and occupies a single byte, so we can unget it with
+          --  no difficulty.
+ 
+          elsif ch <= 16#0080# then
+             End_Of_Line := False;
+             Ungetc (ch, File);
+             Item := Wide_Wide_Character'Val (ch);
+ 
+          --  For a character above this range, we read the character, using
+          --  the Get_Wide_Wide_Char routine. It may well occupy more than one
+          --  byte so we can't put it back with ungetc. Instead we save it in
+          --  the control block, setting a flag that everyone interested in
+          --  reading characters must test before reading the stream.
+ 
+          else
+             Item := Get_Wide_Wide_Char (Character'Val (ch), File);
+             End_Of_Line := False;
+             File.Saved_Wide_Wide_Character := Item;
+             File.Before_Wide_Wide_Character := True;
+          end if;
+       end if;
+    end Look_Ahead;
+ 
+    procedure Look_Ahead
+      (Item        : out Wide_Wide_Character;
+       End_Of_Line : out Boolean)
+    is
+    begin
+       Look_Ahead (Current_In, Item, End_Of_Line);
+    end Look_Ahead;
+ 
+    ----------
+    -- Mode --
+    ----------
+ 
+    function Mode (File : File_Type) return File_Mode is
+    begin
+       return To_TIO (FIO.Mode (AP (File)));
+    end Mode;
+ 
+    ----------
+    -- Name --
+    ----------
+ 
+    function Name (File : File_Type) return String is
+    begin
+       return FIO.Name (AP (File));
+    end Name;
+ 
+    --------------
+    -- New_Line --
+    --------------
+ 
+    procedure New_Line
+      (File    : File_Type;
+       Spacing : Positive_Count := 1)
+    is
+    begin
+       --  Raise Constraint_Error if out of range value. The reason for this
+       --  explicit test is that we don't want junk values around, even if
+       --  checks are off in the caller.
+ 
+       if Spacing not in Positive_Count then
+          raise Constraint_Error;
+       end if;
+ 
+       FIO.Check_Write_Status (AP (File));
+ 
+       for K in 1 .. Spacing loop
+          Putc (LM, File);
+          File.Line := File.Line + 1;
+ 
+          if File.Page_Length /= 0
+            and then File.Line > File.Page_Length
+          then
+             Putc (PM, File);
+             File.Line := 1;
+             File.Page := File.Page + 1;
+          end if;
+       end loop;
+ 
+       File.Col := 1;
+    end New_Line;
+ 
+    procedure New_Line (Spacing : Positive_Count := 1) is
+    begin
+       New_Line (Current_Out, Spacing);
+    end New_Line;
+ 
+    --------------
+    -- New_Page --
+    --------------
+ 
+    procedure New_Page (File : File_Type) is
+    begin
+       FIO.Check_Write_Status (AP (File));
+ 
+       if File.Col /= 1 or else File.Line = 1 then
+          Putc (LM, File);
+       end if;
+ 
+       Putc (PM, File);
+       File.Page := File.Page + 1;
+       File.Line := 1;
+       File.Col := 1;
+    end New_Page;
+ 
+    procedure New_Page is
+    begin
+       New_Page (Current_Out);
+    end New_Page;
+ 
+    -----------
+    -- Nextc --
+    -----------
+ 
+    function Nextc (File : File_Type) return int is
+       ch : int;
+ 
+    begin
+       ch := fgetc (File.Stream);
+ 
+       if ch = EOF then
+          if ferror (File.Stream) /= 0 then
+             raise Device_Error;
+          end if;
+ 
+       else
+          if ungetc (ch, File.Stream) = EOF then
+             raise Device_Error;
+          end if;
+       end if;
+ 
+       return ch;
+    end Nextc;
+ 
+    ----------
+    -- Open --
+    ----------
+ 
+    procedure Open
+      (File : in out File_Type;
+       Mode : File_Mode;
+       Name : String;
+       Form : String := "")
+    is
+       Dummy_File_Control_Block : Wide_Wide_Text_AFCB;
+       pragma Warnings (Off, Dummy_File_Control_Block);
+       --  Yes, we know this is never assigned a value, only the tag
+       --  is used for dispatching purposes, so that's expected.
+ 
+    begin
+       FIO.Open (File_Ptr  => AP (File),
+                 Dummy_FCB => Dummy_File_Control_Block,
+                 Mode      => To_FCB (Mode),
+                 Name      => Name,
+                 Form      => Form,
+                 Amethod   => 'W',
+                 Creat     => False,
+                 Text      => True);
+       Set_WCEM (File);
+    end Open;
+ 
+    ----------
+    -- Page --
+    ----------
+ 
+    --  Note: we assume that it is impossible in practice for the page
+    --  to exceed the value of Count'Last, i.e. no check is required for
+    --  overflow raising layout error.
+ 
+    function Page (File : File_Type) return Positive_Count is
+    begin
+       FIO.Check_File_Open (AP (File));
+       return File.Page;
+    end Page;
+ 
+    function Page return Positive_Count is
+    begin
+       return Page (Current_Out);
+    end Page;
+ 
+    -----------------
+    -- Page_Length --
+    -----------------
+ 
+    function Page_Length (File : File_Type) return Count is
+    begin
+       FIO.Check_Write_Status (AP (File));
+       return File.Page_Length;
+    end Page_Length;
+ 
+    function Page_Length return Count is
+    begin
+       return Page_Length (Current_Out);
+    end Page_Length;
+ 
+    ---------
+    -- Put --
+    ---------
+ 
+    procedure Put
+      (File : File_Type;
+       Item : Wide_Wide_Character)
+    is
+       procedure Out_Char (C : Character);
+       --  Procedure to output one character of a wide character sequence
+ 
+       procedure WC_Out is new UTF_32_To_Char_Sequence (Out_Char);
+ 
+       --------------
+       -- Out_Char --
+       --------------
+ 
+       procedure Out_Char (C : Character) is
+       begin
+          Putc (Character'Pos (C), File);
+       end Out_Char;
+ 
+    --  Start of processing for Put
+ 
+    begin
+       WC_Out (Wide_Wide_Character'Pos (Item), File.WC_Method);
+       File.Col := File.Col + 1;
+    end Put;
+ 
+    procedure Put (Item : Wide_Wide_Character) is
+    begin
+       Put (Current_Out, Item);
+    end Put;
+ 
+    ---------
+    -- Put --
+    ---------
+ 
+    procedure Put
+      (File : File_Type;
+       Item : Wide_Wide_String)
+    is
+    begin
+       for J in Item'Range loop
+          Put (File, Item (J));
+       end loop;
+    end Put;
+ 
+    procedure Put (Item : Wide_Wide_String) is
+    begin
+       Put (Current_Out, Item);
+    end Put;
+ 
+    --------------
+    -- Put_Line --
+    --------------
+ 
+    procedure Put_Line
+      (File : File_Type;
+       Item : Wide_Wide_String)
+    is
+    begin
+       Put (File, Item);
+       New_Line (File);
+    end Put_Line;
+ 
+    procedure Put_Line (Item : Wide_Wide_String) is
+    begin
+       Put (Current_Out, Item);
+       New_Line (Current_Out);
+    end Put_Line;
+ 
+    ----------
+    -- Putc --
+    ----------
+ 
+    procedure Putc (ch : int; File : File_Type) is
+    begin
+       if fputc (ch, File.Stream) = EOF then
+          raise Device_Error;
+       end if;
+    end Putc;
+ 
+    ----------
+    -- Read --
+    ----------
+ 
+    --  This is the primitive Stream Read routine, used when a Text_IO file
+    --  is treated directly as a stream using Text_IO.Streams.Stream.
+ 
+    procedure Read
+      (File : in out Wide_Wide_Text_AFCB;
+       Item : out Stream_Element_Array;
+       Last : out Stream_Element_Offset)
+    is
+       Discard_ch : int;
+       pragma Unreferenced (Discard_ch);
+ 
+    begin
+       --  Need to deal with Before_Wide_Wide_Character ???
+ 
+       if File.Mode /= FCB.In_File then
+          raise Mode_Error;
+       end if;
+ 
+       --  Deal with case where our logical and physical position do not match
+       --  because of being after an LM or LM-PM sequence when in fact we are
+       --  logically positioned before it.
+ 
+       if File.Before_LM then
+ 
+          --  If we are before a PM, then it is possible for a stream read
+          --  to leave us after the LM and before the PM, which is a bit
+          --  odd. The easiest way to deal with this is to unget the PM,
+          --  so we are indeed positioned between the characters. This way
+          --  further stream read operations will work correctly, and the
+          --  effect on text processing is a little weird, but what can
+          --  be expected if stream and text input are mixed this way?
+ 
+          if File.Before_LM_PM then
+             Discard_ch := ungetc (PM, File.Stream);
+             File.Before_LM_PM := False;
+          end if;
+ 
+          File.Before_LM := False;
+ 
+          Item (Item'First) := Stream_Element (Character'Pos (ASCII.LF));
+ 
+          if Item'Length = 1 then
+             Last := Item'Last;
+ 
+          else
+             Last :=
+               Item'First +
+                 Stream_Element_Offset
+                   (fread (buffer => Item'Address,
+                           index  => size_t (Item'First + 1),
+                           size   => 1,
+                           count  => Item'Length - 1,
+                           stream => File.Stream));
+          end if;
+ 
+          return;
+       end if;
+ 
+       --  Now we do the read. Since this is a text file, it is normally in
+       --  text mode, but stream data must be read in binary mode, so we
+       --  temporarily set binary mode for the read, resetting it after.
+       --  These calls have no effect in a system (like Unix) where there is
+       --  no distinction between text and binary files.
+ 
+       set_binary_mode (fileno (File.Stream));
+ 
+       Last :=
+         Item'First +
+           Stream_Element_Offset
+             (fread (Item'Address, 1, Item'Length, File.Stream)) - 1;
+ 
+       if Last < Item'Last then
+          if ferror (File.Stream) /= 0 then
+             raise Device_Error;
+          end if;
+       end if;
+ 
+       set_text_mode (fileno (File.Stream));
+    end Read;
+ 
+    -----------
+    -- Reset --
+    -----------
+ 
+    procedure Reset
+      (File : in out File_Type;
+       Mode : File_Mode)
+    is
+    begin
+       --  Don't allow change of mode for current file (RM A.10.2(5))
+ 
+       if (File = Current_In or else
+           File = Current_Out  or else
+           File = Current_Error)
+         and then To_FCB (Mode) /= File.Mode
+       then
+          raise Mode_Error;
+       end if;
+ 
+       Terminate_Line (File);
+       FIO.Reset (AP (File), To_FCB (Mode));
+       File.Page := 1;
+       File.Line := 1;
+       File.Col  := 1;
+       File.Line_Length := 0;
+       File.Page_Length := 0;
+       File.Before_LM := False;
+       File.Before_LM_PM := False;
+    end Reset;
+ 
+    procedure Reset (File : in out File_Type) is
+    begin
+       Terminate_Line (File);
+       FIO.Reset (AP (File));
+       File.Page := 1;
+       File.Line := 1;
+       File.Col  := 1;
+       File.Line_Length := 0;
+       File.Page_Length := 0;
+       File.Before_LM := False;
+       File.Before_LM_PM := False;
+    end Reset;
+ 
+    -------------
+    -- Set_Col --
+    -------------
+ 
+    procedure Set_Col
+      (File : File_Type;
+       To   : Positive_Count)
+    is
+       ch : int;
+ 
+    begin
+       --  Raise Constraint_Error if out of range value. The reason for this
+       --  explicit test is that we don't want junk values around, even if
+       --  checks are off in the caller.
+ 
+       if To not in Positive_Count then
+          raise Constraint_Error;
+       end if;
+ 
+       FIO.Check_File_Open (AP (File));
+ 
+       if To = File.Col then
+          return;
+       end if;
+ 
+       if Mode (File) >= Out_File then
+          if File.Line_Length /= 0 and then To > File.Line_Length then
+             raise Layout_Error;
+          end if;
+ 
+          if To < File.Col then
+             New_Line (File);
+          end if;
+ 
+          while File.Col < To loop
+             Put (File, ' ');
+          end loop;
+ 
+       else
+          loop
+             ch := Getc (File);
+ 
+             if ch = EOF then
+                raise End_Error;
+ 
+             elsif ch = LM then
+                File.Line := File.Line + 1;
+                File.Col := 1;
+ 
+             elsif ch = PM and then File.Is_Regular_File then
+                File.Page := File.Page + 1;
+                File.Line := 1;
+                File.Col := 1;
+ 
+             elsif To = File.Col then
+                Ungetc (ch, File);
+                return;
+ 
+             else
+                File.Col := File.Col + 1;
+             end if;
+          end loop;
+       end if;
+    end Set_Col;
+ 
+    procedure Set_Col (To : Positive_Count) is
+    begin
+       Set_Col (Current_Out, To);
+    end Set_Col;
+ 
+    ---------------
+    -- Set_Error --
+    ---------------
+ 
+    procedure Set_Error (File : File_Type) is
+    begin
+       FIO.Check_Write_Status (AP (File));
+       Current_Err := File;
+    end Set_Error;
+ 
+    ---------------
+    -- Set_Input --
+    ---------------
+ 
+    procedure Set_Input (File : File_Type) is
+    begin
+       FIO.Check_Read_Status (AP (File));
+       Current_In := File;
+    end Set_Input;
+ 
+    --------------
+    -- Set_Line --
+    --------------
+ 
+    procedure Set_Line
+      (File : File_Type;
+       To   : Positive_Count)
+    is
+    begin
+       --  Raise Constraint_Error if out of range value. The reason for this
+       --  explicit test is that we don't want junk values around, even if
+       --  checks are off in the caller.
+ 
+       if To not in Positive_Count then
+          raise Constraint_Error;
+       end if;
+ 
+       FIO.Check_File_Open (AP (File));
+ 
+       if To = File.Line then
+          return;
+       end if;
+ 
+       if Mode (File) >= Out_File then
+          if File.Page_Length /= 0 and then To > File.Page_Length then
+             raise Layout_Error;
+          end if;
+ 
+          if To < File.Line then
+             New_Page (File);
+          end if;
+ 
+          while File.Line < To loop
+             New_Line (File);
+          end loop;
+ 
+       else
+          while To /= File.Line loop
+             Skip_Line (File);
+          end loop;
+       end if;
+    end Set_Line;
+ 
+    procedure Set_Line (To : Positive_Count) is
+    begin
+       Set_Line (Current_Out, To);
+    end Set_Line;
+ 
+    ---------------------
+    -- Set_Line_Length --
+    ---------------------
+ 
+    procedure Set_Line_Length (File : File_Type; To : Count) is
+    begin
+       --  Raise Constraint_Error if out of range value. The reason for this
+       --  explicit test is that we don't want junk values around, even if
+       --  checks are off in the caller.
+ 
+       if To not in Count then
+          raise Constraint_Error;
+       end if;
+ 
+       FIO.Check_Write_Status (AP (File));
+       File.Line_Length := To;
+    end Set_Line_Length;
+ 
+    procedure Set_Line_Length (To : Count) is
+    begin
+       Set_Line_Length (Current_Out, To);
+    end Set_Line_Length;
+ 
+    ----------------
+    -- Set_Output --
+    ----------------
+ 
+    procedure Set_Output (File : File_Type) is
+    begin
+       FIO.Check_Write_Status (AP (File));
+       Current_Out := File;
+    end Set_Output;
+ 
+    ---------------------
+    -- Set_Page_Length --
+    ---------------------
+ 
+    procedure Set_Page_Length (File : File_Type; To : Count) is
+    begin
+       --  Raise Constraint_Error if out of range value. The reason for this
+       --  explicit test is that we don't want junk values around, even if
+       --  checks are off in the caller.
+ 
+       if To not in Count then
+          raise Constraint_Error;
+       end if;
+ 
+       FIO.Check_Write_Status (AP (File));
+       File.Page_Length := To;
+    end Set_Page_Length;
+ 
+    procedure Set_Page_Length (To : Count) is
+    begin
+       Set_Page_Length (Current_Out, To);
+    end Set_Page_Length;
+ 
+    --------------
+    -- Set_WCEM --
+    --------------
+ 
+    procedure Set_WCEM (File : in out File_Type) is
+       Start : Natural;
+       Stop  : Natural;
+ 
+    begin
+       File.WC_Method := WCEM_Brackets;
+       FIO.Form_Parameter (File.Form.all, "wcem", Start, Stop);
+ 
+       if Start = 0 then
+          File.WC_Method := WCEM_Brackets;
+ 
+       elsif Start /= 0 then
+          if Stop = Start then
+             for J in WC_Encoding_Letters'Range loop
+                if File.Form (Start) = WC_Encoding_Letters (J) then
+                   File.WC_Method := J;
+                   return;
+                end if;
+             end loop;
+          end if;
+ 
+          Close (File);
+          Raise_Exception (Use_Error'Identity, "invalid WCEM form parameter");
+       end if;
+    end Set_WCEM;
+ 
+    ---------------
+    -- Skip_Line --
+    ---------------
+ 
+    procedure Skip_Line
+      (File    : File_Type;
+       Spacing : Positive_Count := 1)
+    is
+       ch : int;
+ 
+    begin
+       --  Raise Constraint_Error if out of range value. The reason for this
+       --  explicit test is that we don't want junk values around, even if
+       --  checks are off in the caller.
+ 
+       if Spacing not in Positive_Count then
+          raise Constraint_Error;
+       end if;
+ 
+       FIO.Check_Read_Status (AP (File));
+ 
+       for L in 1 .. Spacing loop
+          if File.Before_LM then
+             File.Before_LM := False;
+             File.Before_LM_PM := False;
+ 
+          else
+             ch := Getc (File);
+ 
+             --  If at end of file now, then immediately raise End_Error. Note
+             --  that we can never be positioned between a line mark and a page
+             --  mark, so if we are at the end of file, we cannot logically be
+             --  before the implicit page mark that is at the end of the file.
+ 
+             --  For the same reason, we do not need an explicit check for a
+             --  page mark. If there is a FF in the middle of a line, the file
+             --  is not in canonical format and we do not care about the page
+             --  numbers for files other than ones in canonical format.
+ 
+             if ch = EOF then
+                raise End_Error;
+             end if;
+ 
+             --  If not at end of file, then loop till we get to an LM or EOF.
+             --  The latter case happens only in non-canonical files where the
+             --  last line is not terminated by LM, but we don't want to blow
+             --  up for such files, so we assume an implicit LM in this case.
+ 
+             loop
+                exit when ch = LM or ch = EOF;
+                ch := Getc (File);
+             end loop;
+          end if;
+ 
+          --  We have got past a line mark, now, for a regular file only,
+          --  see if a page mark immediately follows this line mark and
+          --  if so, skip past the page mark as well. We do not do this
+          --  for non-regular files, since it would cause an undesirable
+          --  wait for an additional character.
+ 
+          File.Col := 1;
+          File.Line := File.Line + 1;
+ 
+          if File.Before_LM_PM then
+             File.Page := File.Page + 1;
+             File.Line := 1;
+             File.Before_LM_PM := False;
+ 
+          elsif File.Is_Regular_File then
+             ch := Getc (File);
+ 
+             --  Page mark can be explicit, or implied at the end of the file
+ 
+             if (ch = PM or else ch = EOF)
+               and then File.Is_Regular_File
+             then
+                File.Page := File.Page + 1;
+                File.Line := 1;
+             else
+                Ungetc (ch, File);
+             end if;
+          end if;
+ 
+       end loop;
+ 
+       File.Before_Wide_Wide_Character := False;
+    end Skip_Line;
+ 
+    procedure Skip_Line (Spacing : Positive_Count := 1) is
+    begin
+       Skip_Line (Current_In, Spacing);
+    end Skip_Line;
+ 
+    ---------------
+    -- Skip_Page --
+    ---------------
+ 
+    procedure Skip_Page (File : File_Type) is
+       ch : int;
+ 
+    begin
+       FIO.Check_Read_Status (AP (File));
+ 
+       --  If at page mark already, just skip it
+ 
+       if File.Before_LM_PM then
+          File.Before_LM := False;
+          File.Before_LM_PM := False;
+          File.Page := File.Page + 1;
+          File.Line := 1;
+          File.Col  := 1;
+          return;
+       end if;
+ 
+       --  This is a bit tricky, if we are logically before an LM then
+       --  it is not an error if we are at an end of file now, since we
+       --  are not really at it.
+ 
+       if File.Before_LM then
+          File.Before_LM := False;
+          File.Before_LM_PM := False;
+          ch := Getc (File);
+ 
+       --  Otherwise we do raise End_Error if we are at the end of file now
+ 
+       else
+          ch := Getc (File);
+ 
+          if ch = EOF then
+             raise End_Error;
+          end if;
+       end if;
+ 
+       --  Now we can just rumble along to the next page mark, or to the
+       --  end of file, if that comes first. The latter case happens when
+       --  the page mark is implied at the end of file.
+ 
+       loop
+          exit when ch = EOF
+            or else (ch = PM and then File.Is_Regular_File);
+          ch := Getc (File);
+       end loop;
+ 
+       File.Page := File.Page + 1;
+       File.Line := 1;
+       File.Col  := 1;
+       File.Before_Wide_Wide_Character := False;
+    end Skip_Page;
+ 
+    procedure Skip_Page is
+    begin
+       Skip_Page (Current_In);
+    end Skip_Page;
+ 
+    --------------------
+    -- Standard_Error --
+    --------------------
+ 
+    function Standard_Error return File_Type is
+    begin
+       return Standard_Err;
+    end Standard_Error;
+ 
+    function Standard_Error return File_Access is
+    begin
+       return Standard_Err'Access;
+    end Standard_Error;
+ 
+    --------------------
+    -- Standard_Input --
+    --------------------
+ 
+    function Standard_Input return File_Type is
+    begin
+       return Standard_In;
+    end Standard_Input;
+ 
+    function Standard_Input return File_Access is
+    begin
+       return Standard_In'Access;
+    end Standard_Input;
+ 
+    ---------------------
+    -- Standard_Output --
+    ---------------------
+ 
+    function Standard_Output return File_Type is
+    begin
+       return Standard_Out;
+    end Standard_Output;
+ 
+    function Standard_Output return File_Access is
+    begin
+       return Standard_Out'Access;
+    end Standard_Output;
+ 
+    --------------------
+    -- Terminate_Line --
+    --------------------
+ 
+    procedure Terminate_Line (File : File_Type) is
+    begin
+       FIO.Check_File_Open (AP (File));
+ 
+       --  For file other than In_File, test for needing to terminate last line
+ 
+       if Mode (File) /= In_File then
+ 
+          --  If not at start of line definition need new line
+ 
+          if File.Col /= 1 then
+             New_Line (File);
+ 
+          --  For files other than standard error and standard output, we
+          --  make sure that an empty file has a single line feed, so that
+          --  it is properly formatted. We avoid this for the standard files
+          --  because it is too much of a nuisance to have these odd line
+          --  feeds when nothing has been written to the file.
+ 
+          elsif (File /= Standard_Err and then File /= Standard_Out)
+            and then (File.Line = 1 and then File.Page = 1)
+          then
+             New_Line (File);
+          end if;
+       end if;
+    end Terminate_Line;
+ 
+    ------------
+    -- Ungetc --
+    ------------
+ 
+    procedure Ungetc (ch : int; File : File_Type) is
+    begin
+       if ch /= EOF then
+          if ungetc (ch, File.Stream) = EOF then
+             raise Device_Error;
+          end if;
+       end if;
+    end Ungetc;
+ 
+    -----------
+    -- Write --
+    -----------
+ 
+    --  This is the primitive Stream Write routine, used when a Text_IO file
+    --  is treated directly as a stream using Text_IO.Streams.Stream.
+ 
+    procedure Write
+      (File : in out Wide_Wide_Text_AFCB;
+       Item : Stream_Element_Array)
+    is
+       Siz : constant size_t := Item'Length;
+ 
+    begin
+       if File.Mode = FCB.In_File then
+          raise Mode_Error;
+       end if;
+ 
+       --  Now we do the write. Since this is a text file, it is normally in
+       --  text mode, but stream data must be written in binary mode, so we
+       --  temporarily set binary mode for the write, resetting it after.
+       --  These calls have no effect in a system (like Unix) where there is
+       --  no distinction between text and binary files.
+ 
+       set_binary_mode (fileno (File.Stream));
+ 
+       if fwrite (Item'Address, 1, Siz, File.Stream) /= Siz then
+          raise Device_Error;
+       end if;
+ 
+       set_text_mode (fileno (File.Stream));
+    end Write;
+ 
+    --  Use "preallocated" strings to avoid calling "new" during the
+    --  elaboration of the run time. This is needed in the tasking case to
+    --  avoid calling Task_Lock too early. A filename is expected to end with
+    --  a null character in the runtime, here the null characters are added
+    --  just to have a correct filename length.
+ 
+    Err_Name : aliased String := "*stderr" & ASCII.Nul;
+    In_Name  : aliased String := "*stdin" & ASCII.Nul;
+    Out_Name : aliased String := "*stdout" & ASCII.Nul;
+ 
+ begin
+    -------------------------------
+    -- Initialize Standard Files --
+    -------------------------------
+ 
+    for J in WC_Encoding_Method loop
+       if WC_Encoding = WC_Encoding_Letters (J) then
+          Default_WCEM := J;
+       end if;
+    end loop;
+ 
+    --  Note: the names in these files are bogus, and probably it would be
+    --  better for these files to have no names, but the ACVC test insist!
+    --  We use names that are bound to fail in open etc.
+ 
+    Standard_Err.Stream            := stderr;
+    Standard_Err.Name              := Err_Name'Access;
+    Standard_Err.Form              := Null_Str'Unrestricted_Access;
+    Standard_Err.Mode              := FCB.Out_File;
+    Standard_Err.Is_Regular_File   := is_regular_file (fileno (stderr)) /= 0;
+    Standard_Err.Is_Temporary_File := False;
+    Standard_Err.Is_System_File    := True;
+    Standard_Err.Is_Text_File      := True;
+    Standard_Err.Access_Method     := 'T';
+    Standard_Err.WC_Method         := Default_WCEM;
+ 
+    Standard_In.Stream            := stdin;
+    Standard_In.Name              := In_Name'Access;
+    Standard_In.Form              := Null_Str'Unrestricted_Access;
+    Standard_In.Mode              := FCB.In_File;
+    Standard_In.Is_Regular_File   := is_regular_file (fileno (stdin)) /= 0;
+    Standard_In.Is_Temporary_File := False;
+    Standard_In.Is_System_File    := True;
+    Standard_In.Is_Text_File      := True;
+    Standard_In.Access_Method     := 'T';
+    Standard_In.WC_Method         := Default_WCEM;
+ 
+    Standard_Out.Stream            := stdout;
+    Standard_Out.Name              := Out_Name'Access;
+    Standard_Out.Form              := Null_Str'Unrestricted_Access;
+    Standard_Out.Mode              := FCB.Out_File;
+    Standard_Out.Is_Regular_File   := is_regular_file (fileno (stdout)) /= 0;
+    Standard_Out.Is_Temporary_File := False;
+    Standard_Out.Is_System_File    := True;
+    Standard_Out.Is_Text_File      := True;
+    Standard_Out.Access_Method     := 'T';
+    Standard_Out.WC_Method         := Default_WCEM;
+ 
+    FIO.Chain_File (AP (Standard_In));
+    FIO.Chain_File (AP (Standard_Out));
+    FIO.Chain_File (AP (Standard_Err));
+ 
+    FIO.Make_Unbuffered (AP (Standard_Out));
+    FIO.Make_Unbuffered (AP (Standard_Err));
+ 
+ end Ada.Wide_Wide_Text_IO;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ztexio.ads gcc-4.0.0/gcc/ada/a-ztexio.ads
*** gcc-3.4.3/gcc/ada/a-ztexio.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-ztexio.ads	Wed Feb  9 11:14:42 2005
***************
*** 0 ****
--- 1,488 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --                A D A . W I D E _ W I D E _ T E X T _ I O                 --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  Note: the generic subpackages of Wide_Wide_Text_IO (Integer_IO, Float_IO,
+ --  Fixed_IO, Modular_IO, Decimal_IO and Enumeration_IO) appear as private
+ --  children in GNAT. These children are with'ed automatically if they are
+ --  referenced, so this rearrangement is invisible to user programs, but has
+ --  the advantage that only the needed parts of Wide_Wide_Text_IO are processed
+ --  and loaded.
+ 
+ with Ada.IO_Exceptions;
+ with Ada.Streams;
+ with System;
+ with System.File_Control_Block;
+ with System.WCh_Con;
+ 
+ package Ada.Wide_Wide_Text_IO is
+ 
+    package WCh_Con renames System.WCh_Con;
+ 
+    type File_Type is limited private;
+    type File_Mode is (In_File, Out_File, Append_File);
+ 
+    --  The following representation clause allows the use of unchecked
+    --  conversion for rapid translation between the File_Mode type
+    --  used in this package and System.File_IO.
+ 
+    for File_Mode use
+      (In_File     => 0,  -- System.FIle_IO.File_Mode'Pos (In_File)
+       Out_File    => 2,  -- System.File_IO.File_Mode'Pos (Out_File)
+       Append_File => 3); -- System.File_IO.File_Mode'Pos (Append_File)
+ 
+    type Count is range 0 .. Natural'Last;
+    --  The value of Count'Last must be large enough so that the assumption
+    --  enough so that the assumption that the Line, Column and Page
+    --  counts can never exceed this value is a valid assumption.
+ 
+    subtype Positive_Count is Count range 1 .. Count'Last;
+ 
+    Unbounded : constant Count := 0;
+    --  Line and page length
+ 
+    subtype Field is Integer range 0 .. 255;
+    --  Note: if for any reason, there is a need to increase this value,
+    --  then it will be necessary to change the corresponding value in
+    --  System.Img_Real in file s-imgrea.adb.
+ 
+    subtype Number_Base is Integer range 2 .. 16;
+ 
+    type Type_Set is (Lower_Case, Upper_Case);
+ 
+    ---------------------
+    -- File Management --
+    ---------------------
+ 
+    procedure Create
+      (File : in out File_Type;
+       Mode : File_Mode := Out_File;
+       Name : String := "";
+       Form : String := "");
+ 
+    procedure Open
+      (File : in out File_Type;
+       Mode : File_Mode;
+       Name : String;
+       Form : String := "");
+ 
+    procedure Close  (File : in out File_Type);
+    procedure Delete (File : in out File_Type);
+    procedure Reset  (File : in out File_Type; Mode : File_Mode);
+    procedure Reset  (File : in out File_Type);
+ 
+    function Mode (File : File_Type) return File_Mode;
+    function Name (File : File_Type) return String;
+    function Form (File : File_Type) return String;
+ 
+    function Is_Open (File : File_Type) return Boolean;
+ 
+    ------------------------------------------------------
+    -- Control of default input, output and error files --
+    ------------------------------------------------------
+ 
+    procedure Set_Input  (File : File_Type);
+    procedure Set_Output (File : File_Type);
+    procedure Set_Error  (File : File_Type);
+ 
+    function Standard_Input  return File_Type;
+    function Standard_Output return File_Type;
+    function Standard_Error  return File_Type;
+ 
+    function Current_Input  return File_Type;
+    function Current_Output return File_Type;
+    function Current_Error  return File_Type;
+ 
+    type File_Access is access constant File_Type;
+ 
+    function Standard_Input  return File_Access;
+    function Standard_Output return File_Access;
+    function Standard_Error  return File_Access;
+ 
+    function Current_Input  return File_Access;
+    function Current_Output return File_Access;
+    function Current_Error  return File_Access;
+ 
+    --------------------
+    -- Buffer control --
+    --------------------
+ 
+    --  Note: The paramter file is in out in the RM, but as pointed out
+    --  in <<95-5166.a Tucker Taft 95-6-23>> this is clearly an oversight.
+ 
+    procedure Flush (File : File_Type);
+    procedure Flush;
+ 
+    --------------------------------------------
+    -- Specification of line and page lengths --
+    --------------------------------------------
+ 
+    procedure Set_Line_Length (File : File_Type; To : Count);
+    procedure Set_Line_Length (To : Count);
+ 
+    procedure Set_Page_Length (File : File_Type; To : Count);
+    procedure Set_Page_Length (To : Count);
+ 
+    function Line_Length (File : File_Type) return Count;
+    function Line_Length return Count;
+ 
+    function Page_Length (File : File_Type) return Count;
+    function Page_Length return Count;
+ 
+    ------------------------------------
+    -- Column, Line, and Page Control --
+    ------------------------------------
+ 
+    procedure New_Line (File : File_Type; Spacing : Positive_Count := 1);
+    procedure New_Line (Spacing : Positive_Count := 1);
+ 
+    procedure Skip_Line (File : File_Type; Spacing : Positive_Count := 1);
+    procedure Skip_Line (Spacing : Positive_Count := 1);
+ 
+    function End_Of_Line (File : File_Type) return Boolean;
+    function End_Of_Line return Boolean;
+ 
+    procedure New_Page (File : File_Type);
+    procedure New_Page;
+ 
+    procedure Skip_Page (File : File_Type);
+    procedure Skip_Page;
+ 
+    function End_Of_Page (File : File_Type) return Boolean;
+    function End_Of_Page return Boolean;
+ 
+    function End_Of_File (File : File_Type) return Boolean;
+    function End_Of_File return Boolean;
+ 
+    procedure Set_Col (File : File_Type;  To : Positive_Count);
+    procedure Set_Col (To : Positive_Count);
+ 
+    procedure Set_Line (File : File_Type; To : Positive_Count);
+    procedure Set_Line (To : Positive_Count);
+ 
+    function Col (File : File_Type) return Positive_Count;
+    function Col return Positive_Count;
+ 
+    function Line (File : File_Type) return Positive_Count;
+    function Line return Positive_Count;
+ 
+    function Page (File : File_Type) return Positive_Count;
+    function Page return Positive_Count;
+ 
+    ----------------------------
+    -- Character Input-Output --
+    ----------------------------
+ 
+    procedure Get (File : File_Type; Item : out Wide_Wide_Character);
+    procedure Get (Item : out Wide_Wide_Character);
+    procedure Put (File : File_Type; Item : Wide_Wide_Character);
+    procedure Put (Item : Wide_Wide_Character);
+ 
+    procedure Look_Ahead
+      (File        : File_Type;
+       Item        : out Wide_Wide_Character;
+       End_Of_Line : out Boolean);
+ 
+    procedure Look_Ahead
+      (Item        : out Wide_Wide_Character;
+       End_Of_Line : out Boolean);
+ 
+    procedure Get_Immediate
+      (File : File_Type;
+       Item : out Wide_Wide_Character);
+ 
+    procedure Get_Immediate
+      (Item : out Wide_Wide_Character);
+ 
+    procedure Get_Immediate
+      (File      : File_Type;
+       Item      : out Wide_Wide_Character;
+       Available : out Boolean);
+ 
+    procedure Get_Immediate
+      (Item      : out Wide_Wide_Character;
+       Available : out Boolean);
+ 
+    -------------------------
+    -- String Input-Output --
+    -------------------------
+ 
+    procedure Get (File : File_Type; Item : out Wide_Wide_String);
+    procedure Get (Item : out Wide_Wide_String);
+    procedure Put (File : File_Type; Item : Wide_Wide_String);
+    procedure Put (Item : Wide_Wide_String);
+ 
+    procedure Get_Line
+      (File : File_Type;
+       Item : out Wide_Wide_String;
+       Last : out Natural);
+ 
+    function Get_Line (File : File_Type) return Wide_Wide_String;
+    pragma Ada_05 (Get_Line);
+ 
+    function Get_Line return Wide_Wide_String;
+    pragma Ada_05 (Get_Line);
+ 
+    procedure Get_Line
+      (Item : out Wide_Wide_String;
+       Last : out Natural);
+ 
+    procedure Put_Line
+      (File : File_Type;
+       Item : Wide_Wide_String);
+ 
+    procedure Put_Line
+      (Item : Wide_Wide_String);
+ 
+    ---------------------------------------
+    -- Generic packages for Input-Output --
+    ---------------------------------------
+ 
+    --  The generic packages:
+ 
+    --    Ada.Wide_Wide_Text_IO.Integer_IO
+    --    Ada.Wide_Wide_Text_IO.Modular_IO
+    --    Ada.Wide_Wide_Text_IO.Float_IO
+    --    Ada.Wide_Wide_Text_IO.Fixed_IO
+    --    Ada.Wide_Wide_Text_IO.Decimal_IO
+    --    Ada.Wide_Wide_Text_IO.Enumeration_IO
+ 
+    --  are implemented as separate child packages in GNAT, so the
+    --  spec and body of these packages are to be found in separate
+    --  child units. This implementation detail is hidden from the
+    --  Ada programmer by special circuitry in the compiler that
+    --  treats these child packages as though they were nested in
+    --  Text_IO. The advantage of this special processing is that
+    --  the subsidiary routines needed if these generics are used
+    --  are not loaded when they are not used.
+ 
+    ----------------
+    -- Exceptions --
+    ----------------
+ 
+    Status_Error : exception renames IO_Exceptions.Status_Error;
+    Mode_Error   : exception renames IO_Exceptions.Mode_Error;
+    Name_Error   : exception renames IO_Exceptions.Name_Error;
+    Use_Error    : exception renames IO_Exceptions.Use_Error;
+    Device_Error : exception renames IO_Exceptions.Device_Error;
+    End_Error    : exception renames IO_Exceptions.End_Error;
+    Data_Error   : exception renames IO_Exceptions.Data_Error;
+    Layout_Error : exception renames IO_Exceptions.Layout_Error;
+ 
+ private
+    -----------------------------------
+    -- Handling of Format Characters --
+    -----------------------------------
+ 
+    --  Line marks are represented by the single character ASCII.LF (16#0A#).
+    --  In DOS and similar systems, underlying file translation takes care
+    --  of translating this to and from the standard CR/LF sequences used in
+    --  these operating systems to mark the end of a line. On output there is
+    --  always a line mark at the end of the last line, but on input, this
+    --  line mark can be omitted, and is implied by the end of file.
+ 
+    --  Page marks are represented by the single character ASCII.FF (16#0C#),
+    --  The page mark at the end of the file may be omitted, and is normally
+    --  omitted on output unless an explicit New_Page call is made before
+    --  closing the file. No page mark is added when a file is appended to,
+    --  so, in accordance with the permission in (RM A.10.2(4)), there may
+    --  or may not be a page mark separating preexising text in the file
+    --  from the new text to be written.
+ 
+    --  A file mark is marked by the physical end of file. In DOS translation
+    --  mode on input, an EOF character (SUB = 16#1A#) gets translated to the
+    --  physical end of file, so in effect this character is recognized as
+    --  marking the end of file in DOS and similar systems.
+ 
+    LM : constant := Character'Pos (ASCII.LF);
+    --  Used as line mark
+ 
+    PM : constant := Character'Pos (ASCII.FF);
+    --  Used as page mark, except at end of file where it is implied
+ 
+    -------------------------------------
+    -- Wide_Wide_Text_IO File Control Block --
+    -------------------------------------
+ 
+    Default_WCEM : WCh_Con.WC_Encoding_Method := WCh_Con.WCEM_UTF8;
+    --  This gets modified during initialization (see body) using
+    --  the default value established in the call to Set_Globals.
+ 
+    package FCB renames System.File_Control_Block;
+ 
+    type Wide_Wide_Text_AFCB is new FCB.AFCB with record
+       Page        : Count := 1;
+       Line        : Count := 1;
+       Col         : Count := 1;
+       Line_Length : Count := 0;
+       Page_Length : Count := 0;
+ 
+       Before_LM : Boolean := False;
+       --  This flag is used to deal with the anomolies introduced by the
+       --  peculiar definition of End_Of_File and End_Of_Page in Ada. These
+       --  functions require looking ahead more than one character. Since
+       --  there is no convenient way of backing up more than one character,
+       --  what we do is to leave ourselves positioned past the LM, but set
+       --  this flag, so that we know that from an Ada point of view we are
+       --  in front of the LM, not after it. A bit of a kludge, but it works!
+ 
+       Before_LM_PM : Boolean := False;
+       --  This flag similarly handles the case of being physically positioned
+       --  after a LM-PM sequence when logically we are before the LM-PM. This
+       --  flag can only be set if Before_LM is also set.
+ 
+       WC_Method : WCh_Con.WC_Encoding_Method := Default_WCEM;
+       --  Encoding method to be used for this file
+ 
+       Before_Wide_Wide_Character : Boolean := False;
+       --  This flag is set to indicate that a wide character in the input has
+       --  been read by Wide_Wide_Text_IO.Look_Ahead. If it is set to True,
+       --  then it means that the stream is logically positioned before the
+       --  character but is physically positioned after it. The character
+       --  involved must not be in the range 16#00#-16#7F#, i.e. if the flag is
+       --  set, then we know the next character has a code greater than 16#7F#,
+       --  and the value of this character is saved in
+       --  Saved_Wide_Wide_Character.
+ 
+       Saved_Wide_Wide_Character : Wide_Wide_Character;
+       --  This field is valid only if Before_Wide_Wide_Character is set. It
+       --  contains a wide character read by Look_Ahead. If Look_Ahead
+       --  reads a character in the range 16#0000# to 16#007F#, then it
+       --  can use ungetc to put it back, but ungetc cannot be called
+       --  more than once, so for characters above this range, we don't
+       --  try to back up the file. Instead we save the character in this
+       --  field and set the flag Before_Wide_Wide_Character to indicate that
+       --  we are logically positioned before this character even though
+       --  the stream is physically positioned after it.
+ 
+    end record;
+ 
+    type File_Type is access all Wide_Wide_Text_AFCB;
+ 
+    function AFCB_Allocate
+      (Control_Block : Wide_Wide_Text_AFCB) return FCB.AFCB_Ptr;
+ 
+    procedure AFCB_Close (File : access Wide_Wide_Text_AFCB);
+    procedure AFCB_Free  (File : access Wide_Wide_Text_AFCB);
+ 
+    procedure Read
+      (File : in out Wide_Wide_Text_AFCB;
+       Item : out Ada.Streams.Stream_Element_Array;
+       Last : out Ada.Streams.Stream_Element_Offset);
+    --  Read operation used when Wide_Wide_Text_IO file is treated as a Stream
+ 
+    procedure Write
+      (File : in out Wide_Wide_Text_AFCB;
+       Item : Ada.Streams.Stream_Element_Array);
+    --  Write operation used when Wide_Wide_Text_IO file is treated as a Stream
+ 
+    ------------------------
+    -- The Standard Files --
+    ------------------------
+ 
+    Null_Str : aliased constant String := "";
+    --  Used as name and form of standard files
+ 
+    Standard_Err_AFCB : aliased Wide_Wide_Text_AFCB;
+    Standard_In_AFCB  : aliased Wide_Wide_Text_AFCB;
+    Standard_Out_AFCB : aliased Wide_Wide_Text_AFCB;
+ 
+    Standard_Err : aliased File_Type := Standard_Err_AFCB'Access;
+    Standard_In  : aliased File_Type := Standard_In_AFCB'Access;
+    Standard_Out : aliased File_Type := Standard_Out_AFCB'Access;
+    --  Standard files
+ 
+    Current_In   : aliased File_Type := Standard_In;
+    Current_Out  : aliased File_Type := Standard_Out;
+    Current_Err  : aliased File_Type := Standard_Err;
+    --  Current files
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    --  These subprograms are in the private part of the spec so that they can
+    --  be shared by the routines in the body of Ada.Text_IO.Wide_Wide_Text_IO.
+ 
+    --  Note: we use Integer in these declarations instead of the more accurate
+    --  Interfaces.C_Streams.int, because we do not want to drag in the spec of
+    --  this interfaces package with the spec of Ada.Text_IO, and we know that
+    --  in fact these types are identical
+ 
+    function Getc (File : File_Type) return Integer;
+    --  Gets next character from file, which has already been checked for
+    --  being in read status, and returns the character read if no error
+    --  occurs. The result is EOF if the end of file was read.
+ 
+    procedure Get_Character
+      (File : File_Type;
+       Item : out Character);
+    --  This is essentially a copy of the normal Get routine from Text_IO. It
+    --  obtains a single character from the input file File, and places it in
+    --  Item. This character may be the leading character of a
+    --  Wide_Wide_Character sequence, but that is up to the caller to deal
+    --  with.
+ 
+    function Get_Wide_Wide_Char
+      (C    : Character;
+       File : File_Type) return Wide_Wide_Character;
+    --  This function is shared by Get and Get_Immediate to extract a wide
+    --  character value from the given File. The first byte has already been
+    --  read and is passed in C. The wide character value is returned as the
+    --  result, and the file pointer is bumped past the character.
+ 
+    function Nextc (File : File_Type) return Integer;
+    --  Returns next character from file without skipping past it (i.e. it
+    --  is a combination of Getc followed by an Ungetc).
+ 
+    procedure Putc (ch : Integer; File : File_Type);
+    --  Outputs the given character to the file, which has already been
+    --  checked for being in output status. Device_Error is raised if the
+    --  character cannot be written.
+ 
+    procedure Terminate_Line (File : File_Type);
+    --  If the file is in Write_File or Append_File mode, and the current
+    --  line is not terminated, then a line terminator is written using
+    --  New_Line. Note that there is no Terminate_Page routine, because
+    --  the page mark at the end of the file is implied if necessary.
+ 
+    procedure Ungetc (ch : Integer; File : File_Type);
+    --  Pushes back character into stream, using ungetc. The caller has
+    --  checked that the file is in read status. Device_Error is raised
+    --  if the character cannot be pushed back. An attempt to push back
+    --  and end of file character (EOF) is ignored.
+ 
+ end Ada.Wide_Wide_Text_IO;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ztfiio.adb gcc-4.0.0/gcc/ada/a-ztfiio.adb
*** gcc-3.4.3/gcc/ada/a-ztfiio.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-ztfiio.adb	Wed Feb  9 11:14:42 2005
***************
*** 0 ****
--- 1,128 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --     A D A . T E X T _ I O . W I D E _ T E X T _ I O . F I X E D _ I O    --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Wide_Wide_Text_IO.Float_Aux;
+ with System.WCh_Con; use System.WCh_Con;
+ with System.WCh_WtS; use System.WCh_WtS;
+ 
+ package body Ada.Wide_Wide_Text_IO.Fixed_IO is
+ 
+    subtype TFT is Ada.Wide_Wide_Text_IO.File_Type;
+    --  File type required for calls to routines in Aux
+ 
+    package Aux renames Ada.Wide_Wide_Text_IO.Float_Aux;
+ 
+    ---------
+    -- Get --
+    ---------
+ 
+    procedure Get
+      (File  : File_Type;
+       Item  : out Num;
+       Width : Field := 0)
+    is
+    begin
+       Aux.Get (TFT (File), Long_Long_Float (Item), Width);
+ 
+    exception
+       when Constraint_Error => raise Data_Error;
+    end Get;
+ 
+    procedure Get
+      (Item  : out Num;
+       Width : Field := 0)
+    is
+    begin
+       Get (Current_Input, Item, Width);
+    end Get;
+ 
+    procedure Get
+      (From : Wide_Wide_String;
+       Item : out Num;
+       Last : out Positive)
+    is
+       S : constant String := Wide_Wide_String_To_String (From, WCEM_Upper);
+       --  String on which we do the actual conversion. Note that the method
+       --  used for wide character encoding is irrelevant, since if there is
+       --  a character outside the Standard.Character range then the call to
+       --  Aux.Gets will raise Data_Error in any case.
+ 
+    begin
+       Aux.Gets (S, Long_Long_Float (Item), Last);
+ 
+    exception
+       when Constraint_Error => raise Data_Error;
+    end Get;
+ 
+    ---------
+    -- Put --
+    ---------
+ 
+    procedure Put
+      (File : File_Type;
+       Item : Num;
+       Fore : Field := Default_Fore;
+       Aft  : Field := Default_Aft;
+       Exp  : Field := Default_Exp)
+    is
+    begin
+       Aux.Put (TFT (File), Long_Long_Float (Item), Fore, Aft, Exp);
+    end Put;
+ 
+    procedure Put
+      (Item : Num;
+       Fore : Field := Default_Fore;
+       Aft  : Field := Default_Aft;
+       Exp  : Field := Default_Exp)
+    is
+    begin
+       Put (Current_Output, Item, Fore, Aft, Exp);
+    end Put;
+ 
+    procedure Put
+      (To   : out Wide_Wide_String;
+       Item : Num;
+       Aft  : Field := Default_Aft;
+       Exp  : Field := Default_Exp)
+    is
+       S : String (To'First .. To'Last);
+ 
+    begin
+       Aux.Puts (S, Long_Long_Float (Item), Aft, Exp);
+ 
+       for J in S'Range loop
+          To (J) := Wide_Wide_Character'Val (Character'Pos (S (J)));
+       end loop;
+    end Put;
+ 
+ end Ada.Wide_Wide_Text_IO.Fixed_IO;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ztfiio.ads gcc-4.0.0/gcc/ada/a-ztfiio.ads
*** gcc-3.4.3/gcc/ada/a-ztfiio.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-ztfiio.ads	Wed Feb  9 11:14:42 2005
***************
*** 0 ****
--- 1,86 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --        A D A . W I D E _ W I D E _ T E X T _ I O . F I X E D _ I O       --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  In Ada 95, the package Ada.Wide_Wide_Text_IO.Fixed_IO is a subpackage of
+ --  Wide_Wide_Text_IO. In GNAT we make it a child package to avoid loading
+ --  the necessary code if Fixed_IO is not instantiated. See the routine
+ --  Rtsfind.Text_IO_Kludge for a description of how we patch up the
+ --  difference in semantics so that it is invisible to the Ada programmer.
+ 
+ private generic
+    type Num is delta <>;
+ 
+ package Ada.Wide_Wide_Text_IO.Fixed_IO is
+ 
+    Default_Fore : Field := Num'Fore;
+    Default_Aft  : Field := Num'Aft;
+    Default_Exp  : Field := 0;
+ 
+    procedure Get
+      (File  : File_Type;
+       Item  : out Num;
+       Width : Field := 0);
+ 
+    procedure Get
+      (Item  : out Num;
+       Width : Field := 0);
+ 
+    procedure Put
+      (File : File_Type;
+       Item : Num;
+       Fore : Field := Default_Fore;
+       Aft  : Field := Default_Aft;
+       Exp  : Field := Default_Exp);
+ 
+    procedure Put
+      (Item : Num;
+       Fore : Field := Default_Fore;
+       Aft  : Field := Default_Aft;
+       Exp  : Field := Default_Exp);
+ 
+    procedure Get
+      (From : Wide_Wide_String;
+       Item : out Num;
+       Last : out Positive);
+ 
+    procedure Put
+      (To   : out Wide_Wide_String;
+       Item : Num;
+       Aft  : Field := Default_Aft;
+       Exp  : Field := Default_Exp);
+ 
+ end Ada.Wide_Wide_Text_IO.Fixed_IO;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ztflau.adb gcc-4.0.0/gcc/ada/a-ztflau.adb
*** gcc-3.4.3/gcc/ada/a-ztflau.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-ztflau.adb	Wed Feb  9 11:14:42 2005
***************
*** 0 ****
--- 1,228 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --      A D A . W I D E _ W I D E _ T E X T _ I O . F L O A T _ A U X       --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Wide_Wide_Text_IO.Generic_Aux; use Ada.Wide_Wide_Text_IO.Generic_Aux;
+ 
+ with System.Img_Real;  use System.Img_Real;
+ with System.Val_Real;  use System.Val_Real;
+ 
+ package body Ada.Wide_Wide_Text_IO.Float_Aux is
+ 
+    ---------
+    -- Get --
+    ---------
+ 
+    procedure Get
+      (File  : File_Type;
+       Item  : out Long_Long_Float;
+       Width : Field)
+    is
+       Buf  : String (1 .. Field'Last);
+       Stop : Integer := 0;
+       Ptr  : aliased Integer := 1;
+ 
+    begin
+       if Width /= 0 then
+          Load_Width (File, Width, Buf, Stop);
+          String_Skip (Buf, Ptr);
+       else
+          Load_Real (File, Buf, Stop);
+       end if;
+ 
+       Item := Scan_Real (Buf, Ptr'Access, Stop);
+ 
+       Check_End_Of_Field (Buf, Stop, Ptr, Width);
+    end Get;
+ 
+    ----------
+    -- Gets --
+    ----------
+ 
+    procedure Gets
+      (From : String;
+       Item : out Long_Long_Float;
+       Last : out Positive)
+    is
+       Pos : aliased Integer;
+ 
+    begin
+       String_Skip (From, Pos);
+       Item := Scan_Real (From, Pos'Access, From'Last);
+       Last := Pos - 1;
+ 
+    exception
+       when Constraint_Error =>
+          raise Data_Error;
+    end Gets;
+ 
+    ---------------
+    -- Load_Real --
+    ---------------
+ 
+    procedure Load_Real
+      (File : File_Type;
+       Buf  : out String;
+       Ptr  : in out Natural)
+    is
+       Loaded   : Boolean;
+ 
+    begin
+       --  Skip initial blanks and load possible sign
+ 
+       Load_Skip (File);
+       Load (File, Buf, Ptr, '+', '-');
+ 
+       --  Case of .nnnn
+ 
+       Load (File, Buf, Ptr, '.', Loaded);
+ 
+       if Loaded then
+          Load_Digits (File, Buf, Ptr, Loaded);
+ 
+          --  Hopeless junk if no digits loaded
+ 
+          if not Loaded then
+             return;
+          end if;
+ 
+       --  Otherwise must have digits to start
+ 
+       else
+          Load_Digits (File, Buf, Ptr, Loaded);
+ 
+          --  Hopeless junk if no digits loaded
+ 
+          if not Loaded then
+             return;
+          end if;
+ 
+          --  Based cases
+ 
+          Load (File, Buf, Ptr, '#', ':', Loaded);
+ 
+          if Loaded then
+ 
+             --  Case of nnn#.xxx#
+ 
+             Load (File, Buf, Ptr, '.', Loaded);
+ 
+             if Loaded then
+                Load_Extended_Digits (File, Buf, Ptr);
+ 
+             --  Case of nnn#xxx.[xxx]# or nnn#xxx#
+ 
+             else
+                Load_Extended_Digits (File, Buf, Ptr);
+                Load (File, Buf, Ptr, '.', Loaded);
+ 
+                if Loaded then
+                   Load_Extended_Digits (File, Buf, Ptr);
+                end if;
+ 
+                --  As usual, it seems strange to allow mixed base characters,
+                --  but that is what ACVC tests expect, see CE3804M, case (3).
+ 
+                Load (File, Buf, Ptr, '#', ':');
+             end if;
+ 
+          --  Case of nnn.[nnn] or nnn
+ 
+          else
+             Load (File, Buf, Ptr, '.', Loaded);
+ 
+             if Loaded then
+                Load_Digits (File, Buf, Ptr);
+             end if;
+          end if;
+       end if;
+ 
+       --  Deal with exponent
+ 
+       Load (File, Buf, Ptr, 'E', 'e', Loaded);
+ 
+       if Loaded then
+          Load (File, Buf, Ptr, '+', '-');
+          Load_Digits (File, Buf, Ptr);
+       end if;
+    end Load_Real;
+ 
+    ---------
+    -- Put --
+    ---------
+ 
+    procedure Put
+      (File : File_Type;
+       Item : Long_Long_Float;
+       Fore : Field;
+       Aft  : Field;
+       Exp  : Field)
+    is
+       Buf : String (1 .. Field'Last);
+       Ptr : Natural := 0;
+ 
+    begin
+       Set_Image_Real (Item, Buf, Ptr, Fore, Aft, Exp);
+       Put_Item (File, Buf (1 .. Ptr));
+    end Put;
+ 
+    ----------
+    -- Puts --
+    ----------
+ 
+    procedure Puts
+      (To   : out String;
+       Item : Long_Long_Float;
+       Aft  : Field;
+       Exp  : Field)
+    is
+       Buf    : String (1 .. Field'Last);
+       Ptr    : Natural := 0;
+ 
+    begin
+       Set_Image_Real (Item, Buf, Ptr, Fore => 1, Aft => Aft, Exp => Exp);
+ 
+       if Ptr > To'Length then
+          raise Layout_Error;
+ 
+       else
+          for J in 1 .. Ptr loop
+             To (To'Last - Ptr + J) := Buf (J);
+          end loop;
+ 
+          for J in To'First .. To'Last - Ptr loop
+             To (J) := ' ';
+          end loop;
+       end if;
+    end Puts;
+ 
+ end Ada.Wide_Wide_Text_IO.Float_Aux;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ztflau.ads gcc-4.0.0/gcc/ada/a-ztflau.ads
*** gcc-3.4.3/gcc/ada/a-ztflau.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-ztflau.ads	Wed Feb  9 11:14:42 2005
***************
*** 0 ****
--- 1,74 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --      A D A . W I D E _ W I D E _ T E X T _ I O . F L O A T _ A U X       --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package contains the routines for Ada.Wide_Wide_Text_IO.Float_IO that
+ --  are shared among separate instantiations of this package. The routines
+ --  in this package are identical semantically to those in Float_IO itself,
+ --  except that generic parameter Num has been replaced by Long_Long_Float,
+ --  and the default parameters have been removed because they are supplied
+ --  explicitly by the calls from within the generic template. Also used by
+ --  Ada.Wide_Wide_Text_IO.Fixed_IO, and by Ada.Wide_Wide_Text_IO.Decimal_IO.
+ 
+ private package Ada.Wide_Wide_Text_IO.Float_Aux is
+ 
+    procedure Load_Real
+      (File : File_Type;
+       Buf  : out String;
+       Ptr  : in out Natural);
+    --  This is an auxiliary routine that is used to load a possibly signed
+    --  real literal value from the input file into Buf, starting at Ptr + 1.
+ 
+    procedure Get
+      (File  : File_Type;
+       Item  : out Long_Long_Float;
+       Width : Field);
+ 
+    procedure Gets
+      (From : String;
+       Item : out Long_Long_Float;
+       Last : out Positive);
+ 
+    procedure Put
+      (File : File_Type;
+       Item : Long_Long_Float;
+       Fore : Field;
+       Aft  : Field;
+       Exp  : Field);
+ 
+    procedure Puts
+      (To   : out String;
+       Item : Long_Long_Float;
+       Aft  : Field;
+       Exp  : Field);
+ 
+ end Ada.Wide_Wide_Text_IO.Float_Aux;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ztflio.adb gcc-4.0.0/gcc/ada/a-ztflio.adb
*** gcc-3.4.3/gcc/ada/a-ztflio.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-ztflio.adb	Wed Feb  9 11:14:42 2005
***************
*** 0 ****
--- 1,128 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --        A D A . W I D E _ W I D E _ T E X T _ I O . F L O A T _ I O       --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2000 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Wide_Wide_Text_IO.Float_Aux;
+ with System.WCh_Con; use System.WCh_Con;
+ with System.WCh_WtS; use System.WCh_WtS;
+ 
+ package body Ada.Wide_Wide_Text_IO.Float_IO is
+ 
+    subtype TFT is Ada.Wide_Wide_Text_IO.File_Type;
+    --  File type required for calls to routines in Aux
+ 
+    package Aux renames Ada.Wide_Wide_Text_IO.Float_Aux;
+ 
+    ---------
+    -- Get --
+    ---------
+ 
+    procedure Get
+      (File  : File_Type;
+       Item  : out Num;
+       Width : Field := 0)
+    is
+    begin
+       Aux.Get (TFT (File), Long_Long_Float (Item), Width);
+ 
+    exception
+       when Constraint_Error => raise Data_Error;
+    end Get;
+ 
+    procedure Get
+      (Item  : out Num;
+       Width : Field := 0)
+    is
+    begin
+       Get (Current_Input, Item, Width);
+    end Get;
+ 
+    procedure Get
+      (From : Wide_Wide_String;
+       Item : out Num;
+       Last : out Positive)
+    is
+       S : constant String := Wide_Wide_String_To_String (From, WCEM_Upper);
+       --  String on which we do the actual conversion. Note that the method
+       --  used for wide character encoding is irrelevant, since if there is
+       --  a character outside the Standard.Character range then the call to
+       --  Aux.Gets will raise Data_Error in any case.
+ 
+    begin
+       Aux.Gets (S, Long_Long_Float (Item), Last);
+ 
+    exception
+       when Constraint_Error => raise Data_Error;
+    end Get;
+ 
+    ---------
+    -- Put --
+    ---------
+ 
+    procedure Put
+      (File : File_Type;
+       Item : Num;
+       Fore : Field := Default_Fore;
+       Aft  : Field := Default_Aft;
+       Exp  : Field := Default_Exp)
+    is
+    begin
+       Aux.Put (TFT (File), Long_Long_Float (Item), Fore, Aft, Exp);
+    end Put;
+ 
+    procedure Put
+      (Item : Num;
+       Fore : Field := Default_Fore;
+       Aft  : Field := Default_Aft;
+       Exp  : Field := Default_Exp)
+    is
+    begin
+       Put (Current_Output, Item, Fore, Aft, Exp);
+    end Put;
+ 
+    procedure Put
+      (To   : out Wide_Wide_String;
+       Item : Num;
+       Aft  : Field := Default_Aft;
+       Exp  : Field := Default_Exp)
+    is
+       S : String (To'First .. To'Last);
+ 
+    begin
+       Aux.Puts (S, Long_Long_Float (Item), Aft, Exp);
+ 
+       for J in S'Range loop
+          To (J) := Wide_Wide_Character'Val (Character'Pos (S (J)));
+       end loop;
+    end Put;
+ 
+ end Ada.Wide_Wide_Text_IO.Float_IO;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ztflio.ads gcc-4.0.0/gcc/ada/a-ztflio.ads
*** gcc-3.4.3/gcc/ada/a-ztflio.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-ztflio.ads	Wed Feb  9 11:14:42 2005
***************
*** 0 ****
--- 1,86 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --        A D A . W I D E _ W I D E _ T E X T _ I O . F L O A T _ I O       --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  In Ada 95, the package Ada.Wide_Wide_Text_IO.Float_IO is a subpackage
+ --  of Wide_Wide_Text_IO. In GNAT we make it a child package to avoid loading
+ --  the necessary code if Float_IO is not instantiated. See the routine
+ --  Rtsfind.Text_IO_Kludge for a description of how we patch up the
+ --  difference in semantics so that it is invisible to the Ada programmer.
+ 
+ private generic
+    type Num is digits <>;
+ 
+ package Ada.Wide_Wide_Text_IO.Float_IO is
+ 
+    Default_Fore : Field := 2;
+    Default_Aft  : Field := Num'Digits - 1;
+    Default_Exp  : Field := 3;
+ 
+    procedure Get
+      (File  : File_Type;
+       Item  : out Num;
+       Width : Field := 0);
+ 
+    procedure Get
+      (Item  : out Num;
+       Width : Field := 0);
+ 
+    procedure Put
+      (File : File_Type;
+       Item : Num;
+       Fore : Field := Default_Fore;
+       Aft  : Field := Default_Aft;
+       Exp  : Field := Default_Exp);
+ 
+    procedure Put
+      (Item : Num;
+       Fore : Field := Default_Fore;
+       Aft  : Field := Default_Aft;
+       Exp  : Field := Default_Exp);
+ 
+    procedure Get
+      (From : Wide_Wide_String;
+       Item : out Num;
+       Last : out Positive);
+ 
+    procedure Put
+      (To   : out Wide_Wide_String;
+       Item : Num;
+       Aft  : Field := Default_Aft;
+       Exp  : Field := Default_Exp);
+ 
+ end Ada.Wide_Wide_Text_IO.Float_IO;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ztgeau.adb gcc-4.0.0/gcc/ada/a-ztgeau.adb
*** gcc-3.4.3/gcc/ada/a-ztgeau.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-ztgeau.adb	Wed Feb  9 11:14:42 2005
***************
*** 0 ****
--- 1,517 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --    A D A . W I D E _ W I D E _ T E X T _ I O . G E N E R I C _ A U X     --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Interfaces.C_Streams; use Interfaces.C_Streams;
+ with System.File_IO;
+ with System.File_Control_Block;
+ 
+ package body Ada.Wide_Wide_Text_IO.Generic_Aux is
+ 
+    package FIO renames System.File_IO;
+    package FCB renames System.File_Control_Block;
+    subtype AP is FCB.AFCB_Ptr;
+ 
+    ------------------------
+    -- Check_End_Of_Field --
+    ------------------------
+ 
+    procedure Check_End_Of_Field
+      (Buf   : String;
+       Stop  : Integer;
+       Ptr   : Integer;
+       Width : Field)
+    is
+    begin
+       if Ptr > Stop then
+          return;
+ 
+       elsif Width = 0 then
+          raise Data_Error;
+ 
+       else
+          for J in Ptr .. Stop loop
+             if not Is_Blank (Buf (J)) then
+                raise Data_Error;
+             end if;
+          end loop;
+       end if;
+    end Check_End_Of_Field;
+ 
+    -----------------------
+    -- Check_On_One_Line --
+    -----------------------
+ 
+    procedure Check_On_One_Line
+      (File   : File_Type;
+       Length : Integer)
+    is
+    begin
+       FIO.Check_Write_Status (AP (File));
+ 
+       if File.Line_Length /= 0 then
+          if Count (Length) > File.Line_Length then
+             raise Layout_Error;
+          elsif File.Col + Count (Length) > File.Line_Length + 1 then
+             New_Line (File);
+          end if;
+       end if;
+    end Check_On_One_Line;
+ 
+    --------------
+    -- Is_Blank --
+    --------------
+ 
+    function Is_Blank (C : Character) return Boolean is
+    begin
+       return C = ' ' or else C = ASCII.HT;
+    end Is_Blank;
+ 
+    ----------
+    -- Load --
+    ----------
+ 
+    procedure Load
+      (File   : File_Type;
+       Buf    : out String;
+       Ptr    : in out Integer;
+       Char   : Character;
+       Loaded : out Boolean)
+    is
+       ch : int;
+ 
+    begin
+       if File.Before_Wide_Wide_Character then
+          Loaded := False;
+          return;
+ 
+       else
+          ch := Getc (File);
+ 
+          if ch = Character'Pos (Char) then
+             Store_Char (File, ch, Buf, Ptr);
+             Loaded := True;
+          else
+             Ungetc (ch, File);
+             Loaded := False;
+          end if;
+       end if;
+    end Load;
+ 
+    procedure Load
+      (File   : File_Type;
+       Buf    : out String;
+       Ptr    : in out Integer;
+       Char   : Character)
+    is
+       ch : int;
+ 
+    begin
+       if File.Before_Wide_Wide_Character then
+          null;
+ 
+       else
+          ch := Getc (File);
+ 
+          if ch = Character'Pos (Char) then
+             Store_Char (File, ch, Buf, Ptr);
+          else
+             Ungetc (ch, File);
+          end if;
+       end if;
+    end Load;
+ 
+    procedure Load
+      (File   : File_Type;
+       Buf    : out String;
+       Ptr    : in out Integer;
+       Char1  : Character;
+       Char2  : Character;
+       Loaded : out Boolean)
+    is
+       ch : int;
+ 
+    begin
+       if File.Before_Wide_Wide_Character then
+          Loaded := False;
+          return;
+ 
+       else
+          ch := Getc (File);
+ 
+          if ch = Character'Pos (Char1)
+            or else ch = Character'Pos (Char2)
+          then
+             Store_Char (File, ch, Buf, Ptr);
+             Loaded := True;
+          else
+             Ungetc (ch, File);
+             Loaded := False;
+          end if;
+       end if;
+    end Load;
+ 
+    procedure Load
+      (File   : File_Type;
+       Buf    : out String;
+       Ptr    : in out Integer;
+       Char1  : Character;
+       Char2  : Character)
+    is
+       ch : int;
+ 
+    begin
+       if File.Before_Wide_Wide_Character then
+          null;
+ 
+       else
+          ch := Getc (File);
+ 
+          if ch = Character'Pos (Char1)
+            or else ch = Character'Pos (Char2)
+          then
+             Store_Char (File, ch, Buf, Ptr);
+          else
+             Ungetc (ch, File);
+          end if;
+       end if;
+    end Load;
+ 
+    -----------------
+    -- Load_Digits --
+    -----------------
+ 
+    procedure Load_Digits
+      (File   : File_Type;
+       Buf    : out String;
+       Ptr    : in out Integer;
+       Loaded : out Boolean)
+    is
+       ch          : int;
+       After_Digit : Boolean;
+ 
+    begin
+       if File.Before_Wide_Wide_Character then
+          Loaded := False;
+          return;
+ 
+       else
+          ch := Getc (File);
+ 
+          if ch not in Character'Pos ('0') .. Character'Pos ('9') then
+             Loaded := False;
+ 
+          else
+             Loaded := True;
+             After_Digit := True;
+ 
+             loop
+                Store_Char (File, ch, Buf, Ptr);
+                ch := Getc (File);
+ 
+                if ch in Character'Pos ('0') .. Character'Pos ('9') then
+                   After_Digit := True;
+ 
+                elsif ch = Character'Pos ('_') and then After_Digit then
+                   After_Digit := False;
+ 
+                else
+                   exit;
+                end if;
+             end loop;
+          end if;
+ 
+          Ungetc (ch, File);
+       end if;
+    end Load_Digits;
+ 
+    procedure Load_Digits
+      (File   : File_Type;
+       Buf    : out String;
+       Ptr    : in out Integer)
+    is
+       ch          : int;
+       After_Digit : Boolean;
+ 
+    begin
+       if File.Before_Wide_Wide_Character then
+          return;
+ 
+       else
+          ch := Getc (File);
+ 
+          if ch in Character'Pos ('0') .. Character'Pos ('9') then
+             After_Digit := True;
+ 
+             loop
+                Store_Char (File, ch, Buf, Ptr);
+                ch := Getc (File);
+ 
+                if ch in Character'Pos ('0') .. Character'Pos ('9') then
+                   After_Digit := True;
+ 
+                elsif ch = Character'Pos ('_') and then After_Digit then
+                   After_Digit := False;
+ 
+                else
+                   exit;
+                end if;
+             end loop;
+          end if;
+ 
+          Ungetc (ch, File);
+       end if;
+    end Load_Digits;
+ 
+    --------------------------
+    -- Load_Extended_Digits --
+    --------------------------
+ 
+    procedure Load_Extended_Digits
+      (File   : File_Type;
+       Buf    : out String;
+       Ptr    : in out Integer;
+       Loaded : out Boolean)
+    is
+       ch          : int;
+       After_Digit : Boolean := False;
+ 
+    begin
+       if File.Before_Wide_Wide_Character then
+          Loaded := False;
+          return;
+ 
+       else
+          Loaded := False;
+ 
+          loop
+             ch := Getc (File);
+ 
+             if ch in Character'Pos ('0') .. Character'Pos ('9')
+                  or else
+                ch in Character'Pos ('a') .. Character'Pos ('f')
+                  or else
+                ch in Character'Pos ('A') .. Character'Pos ('F')
+             then
+                After_Digit := True;
+ 
+             elsif ch = Character'Pos ('_') and then After_Digit then
+                After_Digit := False;
+ 
+             else
+                exit;
+             end if;
+ 
+             Store_Char (File, ch, Buf, Ptr);
+             Loaded := True;
+          end loop;
+ 
+          Ungetc (ch, File);
+       end if;
+    end Load_Extended_Digits;
+ 
+    procedure Load_Extended_Digits
+      (File   : File_Type;
+       Buf    : out String;
+       Ptr    : in out Integer)
+    is
+       Junk : Boolean;
+ 
+    begin
+       Load_Extended_Digits (File, Buf, Ptr, Junk);
+    end Load_Extended_Digits;
+ 
+    ---------------
+    -- Load_Skip --
+    ---------------
+ 
+    procedure Load_Skip (File  : File_Type) is
+       C : Character;
+ 
+    begin
+       FIO.Check_Read_Status (AP (File));
+ 
+       --  We need to explicitly test for the case of being before a wide
+       --  character (greater than 16#7F#). Since no such character can
+       --  ever legitimately be a valid numeric character, we can
+       --  immediately signal Data_Error.
+ 
+       if File.Before_Wide_Wide_Character then
+          raise Data_Error;
+       end if;
+ 
+       --  Otherwise loop till we find a non-blank character (note that as
+       --  usual in Wide_Wide_Text_IO, blank includes horizontal tab). Note that
+       --  Get_Character deals with Before_LM/Before_LM_PM flags appropriately.
+ 
+       loop
+          Get_Character (File, C);
+          exit when not Is_Blank (C);
+       end loop;
+ 
+       Ungetc (Character'Pos (C), File);
+       File.Col := File.Col - 1;
+    end Load_Skip;
+ 
+    ----------------
+    -- Load_Width --
+    ----------------
+ 
+    procedure Load_Width
+      (File  : File_Type;
+       Width : Field;
+       Buf   : out String;
+       Ptr   : in out Integer)
+    is
+       ch : int;
+       WC : Wide_Wide_Character;
+ 
+       Bad_Wide_Wide_C : Boolean := False;
+       --  Set True if one of the characters read is not in range of type
+       --  Character. This is always a Data_Error, but we do not signal it
+       --  right away, since we have to read the full number of characters.
+ 
+    begin
+       FIO.Check_Read_Status (AP (File));
+ 
+       --  If we are immediately before a line mark, then we have no characters.
+       --  This is always a data error, so we may as well raise it right away.
+ 
+       if File.Before_LM then
+          raise Data_Error;
+ 
+       else
+          for J in 1 .. Width loop
+             if File.Before_Wide_Wide_Character then
+                Bad_Wide_Wide_C := True;
+                Store_Char (File, 0, Buf, Ptr);
+                File.Before_Wide_Wide_Character := False;
+ 
+             else
+                ch := Getc (File);
+ 
+                if ch = EOF then
+                   exit;
+ 
+                elsif ch = LM then
+                   Ungetc (ch, File);
+                   exit;
+ 
+                else
+                   WC := Get_Wide_Wide_Char (Character'Val (ch), File);
+                   ch := Wide_Wide_Character'Pos (WC);
+ 
+                   if ch > 255 then
+                      Bad_Wide_Wide_C := True;
+                      ch := 0;
+                   end if;
+ 
+                   Store_Char (File, ch, Buf, Ptr);
+                end if;
+             end if;
+          end loop;
+ 
+          if Bad_Wide_Wide_C then
+             raise Data_Error;
+          end if;
+       end if;
+    end Load_Width;
+ 
+    --------------
+    -- Put_Item --
+    --------------
+ 
+    procedure Put_Item (File : File_Type; Str : String) is
+    begin
+       Check_On_One_Line (File, Str'Length);
+ 
+       for J in Str'Range loop
+          Put (File, Wide_Wide_Character'Val (Character'Pos (Str (J))));
+       end loop;
+    end Put_Item;
+ 
+    ----------------
+    -- Store_Char --
+    ----------------
+ 
+    procedure Store_Char
+      (File : File_Type;
+       ch   : Integer;
+       Buf  : out String;
+       Ptr  : in out Integer)
+    is
+    begin
+       File.Col := File.Col + 1;
+ 
+       if Ptr = Buf'Last then
+          raise Data_Error;
+       else
+          Ptr := Ptr + 1;
+          Buf (Ptr) := Character'Val (ch);
+       end if;
+    end Store_Char;
+ 
+    -----------------
+    -- String_Skip --
+    -----------------
+ 
+    procedure String_Skip (Str : String; Ptr : out Integer) is
+    begin
+       Ptr := Str'First;
+ 
+       loop
+          if Ptr > Str'Last then
+             raise End_Error;
+ 
+          elsif not Is_Blank (Str (Ptr)) then
+             return;
+ 
+          else
+             Ptr := Ptr + 1;
+          end if;
+       end loop;
+    end String_Skip;
+ 
+    ------------
+    -- Ungetc --
+    ------------
+ 
+    procedure Ungetc (ch : int; File : File_Type) is
+    begin
+       if ch /= EOF then
+          if ungetc (ch, File.Stream) = EOF then
+             raise Device_Error;
+          end if;
+       end if;
+    end Ungetc;
+ 
+ end Ada.Wide_Wide_Text_IO.Generic_Aux;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ztgeau.ads gcc-4.0.0/gcc/ada/a-ztgeau.ads
*** gcc-3.4.3/gcc/ada/a-ztgeau.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-ztgeau.ads	Wed Feb  9 11:14:42 2005
***************
*** 0 ****
--- 1,186 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --    A D A . W I D E _ W I D E _ T E X T _ I O . G E N E R I C _ A U X     --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package contains a set of auxiliary routines used by Wide_Wide_Text_IO
+ --  generic children, including for reading and writing numeric strings.
+ 
+ --  Note: although this is the Wide version of the package, the interface here
+ --  is still in terms of Character and String rather than Wide_Wide_Character
+ --  and Wide_Wide_String, since all numeric strings are composed entirely of
+ --  characters in the range of type Standard.Character, and the basic
+ --  conversion routines work with Character rather than Wide_Wide_Character.
+ 
+ package Ada.Wide_Wide_Text_IO.Generic_Aux is
+ 
+    --  Note: for all the Load routines, File indicates the file to be read,
+    --  Buf is the string into which data is stored, Ptr is the index of the
+    --  last character stored so far, and is updated if additional characters
+    --  are stored. Data_Error is raised if the input overflows Buf. The only
+    --  Load routines that do a file status check are Load_Skip and Load_Width
+    --  so one of these two routines must be called first.
+ 
+    procedure Check_End_Of_Field
+      (Buf   : String;
+       Stop  : Integer;
+       Ptr   : Integer;
+       Width : Field);
+    --  This routine is used after doing a get operations on a numeric value.
+    --  Buf is the string being scanned, and Stop is the last character of
+    --  the field being scanned. Ptr is as set by the call to the scan routine
+    --  that scanned out the numeric value, i.e. it points one past the last
+    --  character scanned, and Width is the width parameter from the Get call.
+    --
+    --  There are two cases, if Width is non-zero, then a check is made that
+    --  the remainder of the field is all blanks. If Width is zero, then it
+    --  means that the scan routine scanned out only part of the field. We
+    --  have already scanned out the field that the ACVC tests seem to expect
+    --  us to read (even if it does not follow the syntax of the type being
+    --  scanned, e.g. allowing negative exponents in integers, and underscores
+    --  at the end of the string), so we just raise Data_Error.
+ 
+    procedure Check_On_One_Line (File : File_Type; Length : Integer);
+    --  Check to see if item of length Integer characters can fit on
+    --  current line. Call New_Line if not, first checking that the
+    --  line length can accommodate Length characters, raise Layout_Error
+    --  if item is too large for a single line.
+ 
+    function Is_Blank (C : Character) return Boolean;
+    --  Determines if C is a blank (space or tab)
+ 
+    procedure Load_Width
+      (File  : File_Type;
+       Width : Field;
+       Buf   : out String;
+       Ptr   : in out Integer);
+    --  Loads exactly Width characters, unless a line mark is encountered first
+ 
+    procedure Load_Skip (File  : File_Type);
+    --  Skips leading blanks and line and page marks, if the end of file is
+    --  read without finding a non-blank character, then End_Error is raised.
+    --  Note: a blank is defined as a space or horizontal tab (RM A.10.6(5)).
+ 
+    procedure Load
+      (File   : File_Type;
+       Buf    : out String;
+       Ptr    : in out Integer;
+       Char   : Character;
+       Loaded : out Boolean);
+    --  If next character is Char, loads it, otherwise no characters are loaded
+    --  Loaded is set to indicate whether or not the character was found.
+ 
+    procedure Load
+      (File   : File_Type;
+       Buf    : out String;
+       Ptr    : in out Integer;
+       Char   : Character);
+    --  Same as above, but no indication if character is loaded
+ 
+    procedure Load
+      (File   : File_Type;
+       Buf    : out String;
+       Ptr    : in out Integer;
+       Char1  : Character;
+       Char2  : Character;
+       Loaded : out Boolean);
+    --  If next character is Char1 or Char2, loads it, otherwise no characters
+    --  are loaded. Loaded is set to indicate whether or not one of the two
+    --  characters was found.
+ 
+    procedure Load
+      (File   : File_Type;
+       Buf    : out String;
+       Ptr    : in out Integer;
+       Char1  : Character;
+       Char2  : Character);
+    --  Same as above, but no indication if character is loaded
+ 
+    procedure Load_Digits
+      (File   : File_Type;
+       Buf    : out String;
+       Ptr    : in out Integer;
+       Loaded : out Boolean);
+    --  Loads a sequence of zero or more decimal digits. Loaded is set if
+    --  at least one digit is loaded.
+ 
+    procedure Load_Digits
+      (File   : File_Type;
+       Buf    : out String;
+       Ptr    : in out Integer);
+    --  Same as above, but no indication if character is loaded
+ 
+    procedure Load_Extended_Digits
+      (File   : File_Type;
+       Buf    : out String;
+       Ptr    : in out Integer;
+       Loaded : out Boolean);
+    --  Like Load_Digits, but also allows extended digits a-f and A-F
+ 
+    procedure Load_Extended_Digits
+      (File   : File_Type;
+       Buf    : out String;
+       Ptr    : in out Integer);
+    --  Same as above, but no indication if character is loaded
+ 
+    procedure Put_Item (File : File_Type; Str : String);
+    --  This routine is like Wide_Wide_Text_IO.Put, except that it checks for
+    --  overflow of bounded lines, as described in (RM A.10.6(8)). It is used
+    --  for all output of numeric values and of enumeration values. Note that
+    --  the buffer is of type String. Put_Item deals with converting this to
+    --  Wide_Wide_Characters as required.
+ 
+    procedure Store_Char
+      (File : File_Type;
+       ch   : Integer;
+       Buf  : out String;
+       Ptr  : in out Integer);
+    --  Store a single character in buffer, checking for overflow and
+    --  adjusting the column number in the file to reflect the fact
+    --  that a character has been acquired from the input stream.
+    --  The pos value of the character to store is in ch on entry.
+ 
+    procedure String_Skip (Str : String; Ptr : out Integer);
+    --  Used in the Get from string procedures to skip leading blanks in the
+    --  string. Ptr is set to the index of the first non-blank. If the string
+    --  is all blanks, then the excption End_Error is raised, Note that blank
+    --  is defined as a space or horizontal tab (RM A.10.6(5)).
+ 
+    procedure Ungetc (ch : Integer; File : File_Type);
+    --  Pushes back character into stream, using ungetc. The caller has
+    --  checked that the file is in read status. Device_Error is raised
+    --  if the character cannot be pushed back. An attempt to push back
+    --  an end of file (EOF) is ignored.
+ 
+ private
+    pragma Inline (Is_Blank);
+ 
+ end Ada.Wide_Wide_Text_IO.Generic_Aux;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ztinau.adb gcc-4.0.0/gcc/ada/a-ztinau.adb
*** gcc-3.4.3/gcc/ada/a-ztinau.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-ztinau.adb	Wed Feb  9 11:14:42 2005
***************
*** 0 ****
--- 1,293 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --    A D A . W I D E _ W I D E _ T E X T _ I O . I N T E G E R  _ A U X    --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Wide_Wide_Text_IO.Generic_Aux; use Ada.Wide_Wide_Text_IO.Generic_Aux;
+ 
+ with System.Img_BIU;   use System.Img_BIU;
+ with System.Img_Int;   use System.Img_Int;
+ with System.Img_LLB;   use System.Img_LLB;
+ with System.Img_LLI;   use System.Img_LLI;
+ with System.Img_LLW;   use System.Img_LLW;
+ with System.Img_WIU;   use System.Img_WIU;
+ with System.Val_Int;   use System.Val_Int;
+ with System.Val_LLI;   use System.Val_LLI;
+ 
+ package body Ada.Wide_Wide_Text_IO.Integer_Aux is
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    procedure Load_Integer
+      (File : File_Type;
+       Buf  : out String;
+       Ptr  : in out Natural);
+    --  This is an auxiliary routine that is used to load an possibly signed
+    --  integer literal value from the input file into Buf, starting at Ptr + 1.
+    --  On return, Ptr is set to the last character stored.
+ 
+    -------------
+    -- Get_Int --
+    -------------
+ 
+    procedure Get_Int
+      (File  : File_Type;
+       Item  : out Integer;
+       Width : Field)
+    is
+       Buf  : String (1 .. Field'Last);
+       Ptr  : aliased Integer := 1;
+       Stop : Integer := 0;
+ 
+    begin
+       if Width /= 0 then
+          Load_Width (File, Width, Buf, Stop);
+          String_Skip (Buf, Ptr);
+       else
+          Load_Integer (File, Buf, Stop);
+       end if;
+ 
+       Item := Scan_Integer (Buf, Ptr'Access, Stop);
+       Check_End_Of_Field (Buf, Stop, Ptr, Width);
+    end Get_Int;
+ 
+    -------------
+    -- Get_LLI --
+    -------------
+ 
+    procedure Get_LLI
+      (File  : File_Type;
+       Item  : out Long_Long_Integer;
+       Width : Field)
+    is
+       Buf  : String (1 .. Field'Last);
+       Ptr  : aliased Integer := 1;
+       Stop : Integer := 0;
+ 
+    begin
+       if Width /= 0 then
+          Load_Width (File, Width, Buf, Stop);
+          String_Skip (Buf, Ptr);
+       else
+          Load_Integer (File, Buf, Stop);
+       end if;
+ 
+       Item := Scan_Long_Long_Integer (Buf, Ptr'Access, Stop);
+       Check_End_Of_Field (Buf, Stop, Ptr, Width);
+    end Get_LLI;
+ 
+    --------------
+    -- Gets_Int --
+    --------------
+ 
+    procedure Gets_Int
+      (From : String;
+       Item : out Integer;
+       Last : out Positive)
+    is
+       Pos : aliased Integer;
+ 
+    begin
+       String_Skip (From, Pos);
+       Item := Scan_Integer (From, Pos'Access, From'Last);
+       Last := Pos - 1;
+ 
+    exception
+       when Constraint_Error =>
+          raise Data_Error;
+    end Gets_Int;
+ 
+    --------------
+    -- Gets_LLI --
+    --------------
+ 
+    procedure Gets_LLI
+      (From : String;
+       Item : out Long_Long_Integer;
+       Last : out Positive)
+    is
+       Pos : aliased Integer;
+ 
+    begin
+       String_Skip (From, Pos);
+       Item := Scan_Long_Long_Integer (From, Pos'Access, From'Last);
+       Last := Pos - 1;
+ 
+    exception
+       when Constraint_Error =>
+          raise Data_Error;
+    end Gets_LLI;
+ 
+    ------------------
+    -- Load_Integer --
+    ------------------
+ 
+    procedure Load_Integer
+      (File : File_Type;
+       Buf  : out String;
+       Ptr  : in out Natural)
+    is
+       Hash_Loc : Natural;
+       Loaded   : Boolean;
+ 
+    begin
+       Load_Skip (File);
+       Load (File, Buf, Ptr, '+', '-');
+ 
+       Load_Digits (File, Buf, Ptr, Loaded);
+ 
+       if Loaded then
+          Load (File, Buf, Ptr, '#', ':', Loaded);
+ 
+          if Loaded then
+             Hash_Loc := Ptr;
+             Load_Extended_Digits (File, Buf, Ptr);
+             Load (File, Buf, Ptr, Buf (Hash_Loc));
+          end if;
+ 
+          Load (File, Buf, Ptr, 'E', 'e', Loaded);
+ 
+          if Loaded then
+ 
+             --  Note: it is strange to allow a minus sign, since the syntax
+             --  does not, but that is what ACVC test CE3704F, case (6) wants.
+ 
+             Load (File, Buf, Ptr, '+', '-');
+             Load_Digits (File, Buf, Ptr);
+          end if;
+       end if;
+    end Load_Integer;
+ 
+    -------------
+    -- Put_Int --
+    -------------
+ 
+    procedure Put_Int
+      (File  : File_Type;
+       Item  : Integer;
+       Width : Field;
+       Base  : Number_Base)
+    is
+       Buf : String (1 .. Field'Last);
+       Ptr : Natural := 0;
+ 
+    begin
+       if Base = 10 and then Width = 0 then
+          Set_Image_Integer (Item, Buf, Ptr);
+       elsif Base = 10 then
+          Set_Image_Width_Integer (Item, Width, Buf, Ptr);
+       else
+          Set_Image_Based_Integer (Item, Base, Width, Buf, Ptr);
+       end if;
+ 
+       Put_Item (File, Buf (1 .. Ptr));
+    end Put_Int;
+ 
+    -------------
+    -- Put_LLI --
+    -------------
+ 
+    procedure Put_LLI
+      (File  : File_Type;
+       Item  : Long_Long_Integer;
+       Width : Field;
+       Base  : Number_Base)
+    is
+       Buf : String (1 .. Field'Last);
+       Ptr : Natural := 0;
+ 
+    begin
+       if Base = 10 and then Width = 0 then
+          Set_Image_Long_Long_Integer (Item, Buf, Ptr);
+       elsif Base = 10 then
+          Set_Image_Width_Long_Long_Integer (Item, Width, Buf, Ptr);
+       else
+          Set_Image_Based_Long_Long_Integer (Item, Base, Width, Buf, Ptr);
+       end if;
+ 
+       Put_Item (File, Buf (1 .. Ptr));
+    end Put_LLI;
+ 
+    --------------
+    -- Puts_Int --
+    --------------
+ 
+    procedure Puts_Int
+      (To   : out String;
+       Item : Integer;
+       Base : Number_Base)
+    is
+       Buf : String (1 .. Field'Last);
+       Ptr : Natural := 0;
+ 
+    begin
+       if Base = 10 then
+          Set_Image_Width_Integer (Item, To'Length, Buf, Ptr);
+       else
+          Set_Image_Based_Integer (Item, Base, To'Length, Buf, Ptr);
+       end if;
+ 
+       if Ptr > To'Length then
+          raise Layout_Error;
+       else
+          To (To'First .. To'First + Ptr - 1) := Buf (1 .. Ptr);
+       end if;
+    end Puts_Int;
+ 
+    --------------
+    -- Puts_LLI --
+    --------------
+ 
+    procedure Puts_LLI
+      (To   : out String;
+       Item : Long_Long_Integer;
+       Base : Number_Base)
+    is
+       Buf : String (1 .. Field'Last);
+       Ptr : Natural := 0;
+ 
+    begin
+       if Base = 10 then
+          Set_Image_Width_Long_Long_Integer (Item, To'Length, Buf, Ptr);
+       else
+          Set_Image_Based_Long_Long_Integer (Item, Base, To'Length, Buf, Ptr);
+       end if;
+ 
+       if Ptr > To'Length then
+          raise Layout_Error;
+       else
+          To (To'First .. To'First + Ptr - 1) := Buf (1 .. Ptr);
+       end if;
+    end Puts_LLI;
+ 
+ end Ada.Wide_Wide_Text_IO.Integer_Aux;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ztinau.ads gcc-4.0.0/gcc/ada/a-ztinau.ads
*** gcc-3.4.3/gcc/ada/a-ztinau.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-ztinau.ads	Wed Feb  9 11:14:42 2005
***************
*** 0 ****
--- 1,85 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --    A D A . W I D E _ W I D E _ T E X T _ I O . I N T E G E R _ A U X     --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package contains the routines for Ada.Wide_Wide_Text_IO.Integer_IO
+ --  that are shared among separate instantiations of this package. The
+ --  routines in this package are identical semantically to those in Integer_IO
+ --  itself, except that the generic parameter Num has been replaced by Integer
+ --  or Long_Long_Integer, and the default parameters have been removed because
+ --  they are supplied explicitly by the calls from within the generic template.
+ 
+ private package Ada.Wide_Wide_Text_IO.Integer_Aux is
+ 
+    procedure Get_Int
+      (File  : File_Type;
+       Item  : out Integer;
+       Width : Field);
+ 
+    procedure Get_LLI
+      (File  : File_Type;
+       Item  : out Long_Long_Integer;
+       Width : Field);
+ 
+    procedure Gets_Int
+      (From : String;
+       Item : out Integer;
+       Last : out Positive);
+ 
+    procedure Gets_LLI
+      (From : String;
+       Item : out Long_Long_Integer;
+       Last : out Positive);
+ 
+    procedure Put_Int
+      (File  : File_Type;
+       Item  : Integer;
+       Width : Field;
+       Base  : Number_Base);
+ 
+    procedure Put_LLI
+      (File  : File_Type;
+       Item  : Long_Long_Integer;
+       Width : Field;
+       Base  : Number_Base);
+ 
+    procedure Puts_Int
+      (To   : out String;
+       Item : Integer;
+       Base : Number_Base);
+ 
+    procedure Puts_LLI
+      (To   : out String;
+       Item : Long_Long_Integer;
+       Base : Number_Base);
+ 
+ end Ada.Wide_Wide_Text_IO.Integer_Aux;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ztinio.adb gcc-4.0.0/gcc/ada/a-ztinio.adb
*** gcc-3.4.3/gcc/ada/a-ztinio.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-ztinio.adb	Wed Feb  9 11:14:42 2005
***************
*** 0 ****
--- 1,148 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --      A D A . W I D E _ W I D E _ T E X T _ I O . I N T E G E R _ I O     --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2000 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Wide_Wide_Text_IO.Integer_Aux;
+ with System.WCh_Con; use System.WCh_Con;
+ with System.WCh_WtS; use System.WCh_WtS;
+ 
+ package body Ada.Wide_Wide_Text_IO.Integer_IO is
+ 
+    Need_LLI : constant Boolean := Num'Base'Size > Integer'Size;
+    --  Throughout this generic body, we distinguish between the case
+    --  where type Integer is acceptable, and where a Long_Long_Integer
+    --  is needed. This constant Boolean is used to test for these cases
+    --  and since it is a constant, only the code for the relevant case
+    --  will be included in the instance.
+ 
+    subtype TFT is Ada.Wide_Wide_Text_IO.File_Type;
+    --  File type required for calls to routines in Aux
+ 
+    package Aux renames Ada.Wide_Wide_Text_IO.Integer_Aux;
+ 
+    ---------
+    -- Get --
+    ---------
+ 
+    procedure Get
+      (File  : File_Type;
+       Item  : out Num;
+       Width : Field := 0)
+    is
+    begin
+       if Need_LLI then
+          Aux.Get_LLI (TFT (File), Long_Long_Integer (Item), Width);
+       else
+          Aux.Get_Int (TFT (File), Integer (Item), Width);
+       end if;
+ 
+    exception
+       when Constraint_Error => raise Data_Error;
+    end Get;
+ 
+    procedure Get
+      (Item  : out Num;
+       Width : Field := 0)
+    is
+    begin
+       Get (Current_Input, Item, Width);
+    end Get;
+ 
+    procedure Get
+      (From : Wide_Wide_String;
+       Item : out Num;
+       Last : out Positive)
+    is
+       S : constant String := Wide_Wide_String_To_String (From, WCEM_Upper);
+       --  String on which we do the actual conversion. Note that the method
+       --  used for wide character encoding is irrelevant, since if there is
+       --  a character outside the Standard.Character range then the call to
+       --  Aux.Gets will raise Data_Error in any case.
+ 
+    begin
+       if Need_LLI then
+          Aux.Gets_LLI (S, Long_Long_Integer (Item), Last);
+       else
+          Aux.Gets_Int (S, Integer (Item), Last);
+       end if;
+ 
+    exception
+       when Constraint_Error => raise Data_Error;
+    end Get;
+ 
+    ---------
+    -- Put --
+    ---------
+ 
+    procedure Put
+      (File  : File_Type;
+       Item  : Num;
+       Width : Field := Default_Width;
+       Base  : Number_Base := Default_Base)
+    is
+    begin
+       if Need_LLI then
+          Aux.Put_LLI (TFT (File), Long_Long_Integer (Item), Width, Base);
+       else
+          Aux.Put_Int (TFT (File), Integer (Item), Width, Base);
+       end if;
+    end Put;
+ 
+    procedure Put
+      (Item  : Num;
+       Width : Field := Default_Width;
+       Base  : Number_Base := Default_Base)
+    is
+    begin
+       Put (Current_Output, Item, Width, Base);
+    end Put;
+ 
+    procedure Put
+      (To   : out Wide_Wide_String;
+       Item : Num;
+       Base : Number_Base := Default_Base)
+    is
+       S : String (To'First .. To'Last);
+ 
+    begin
+       if Need_LLI then
+          Aux.Puts_LLI (S, Long_Long_Integer (Item), Base);
+       else
+          Aux.Puts_Int (S, Integer (Item), Base);
+       end if;
+ 
+       for J in S'Range loop
+          To (J) := Wide_Wide_Character'Val (Character'Pos (S (J)));
+       end loop;
+    end Put;
+ 
+ end Ada.Wide_Wide_Text_IO.Integer_IO;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ztinio.ads gcc-4.0.0/gcc/ada/a-ztinio.ads
*** gcc-3.4.3/gcc/ada/a-ztinio.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-ztinio.ads	Wed Feb  9 11:14:42 2005
***************
*** 0 ****
--- 1,60 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --      A D A . W I D E _ W I D E _ T E X T _ I O . I N T E G E R _ I O     --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ -- This specification is adapted from the Ada Reference Manual for use with --
+ -- GNAT.  In accordance with the copyright of that document, you can freely --
+ -- copy and modify this specification,  provided that if you redistribute a --
+ -- modified version,  any changes that you have made are clearly indicated. --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  In Ada 95, the package Ada.Wide_Wide_Text_IO.Integer_IO is a subpackage
+ --  of Wide_Wide_Text_IO. In GNAT we make it a child package to avoid loading
+ --  the necessary code if Integer_IO is not instantiated. See the routine
+ --  Rtsfind.Text_IO_Kludge for a description of how we patch up the
+ --  difference in semantics so that it is invisible to the Ada programmer.
+ 
+ private generic
+    type Num is range <>;
+ 
+ package Ada.Wide_Wide_Text_IO.Integer_IO is
+ 
+    Default_Width : Field := Num'Width;
+    Default_Base  : Number_Base := 10;
+ 
+    procedure Get
+      (File  : File_Type;
+       Item  : out Num;
+       Width : Field := 0);
+ 
+    procedure Get
+      (Item  : out Num;
+       Width : Field := 0);
+ 
+    procedure Put
+      (File  : File_Type;
+       Item  : Num;
+       Width : Field := Default_Width;
+       Base  : Number_Base := Default_Base);
+ 
+    procedure Put
+      (Item  : Num;
+       Width : Field := Default_Width;
+       Base  : Number_Base := Default_Base);
+ 
+    procedure Get
+      (From : Wide_Wide_String;
+       Item : out Num;
+       Last : out Positive);
+ 
+    procedure Put
+      (To   : out Wide_Wide_String;
+       Item : Num;
+       Base : Number_Base := Default_Base);
+ 
+ end Ada.Wide_Wide_Text_IO.Integer_IO;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ztmoau.adb gcc-4.0.0/gcc/ada/a-ztmoau.adb
*** gcc-3.4.3/gcc/ada/a-ztmoau.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-ztmoau.adb	Wed Feb  9 11:14:42 2005
***************
*** 0 ****
--- 1,303 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --    A D A . W I D E _ W I D E _ T E X T _ I O . M O D U L A R  _ A U X    --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Wide_Wide_Text_IO.Generic_Aux; use Ada.Wide_Wide_Text_IO.Generic_Aux;
+ 
+ with System.Img_BIU;   use System.Img_BIU;
+ with System.Img_Uns;   use System.Img_Uns;
+ with System.Img_LLB;   use System.Img_LLB;
+ with System.Img_LLU;   use System.Img_LLU;
+ with System.Img_LLW;   use System.Img_LLW;
+ with System.Img_WIU;   use System.Img_WIU;
+ with System.Val_Uns;   use System.Val_Uns;
+ with System.Val_LLU;   use System.Val_LLU;
+ 
+ package body Ada.Wide_Wide_Text_IO.Modular_Aux is
+ 
+    use System.Unsigned_Types;
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    procedure Load_Modular
+      (File : File_Type;
+       Buf  : out String;
+       Ptr  : in out Natural);
+    --  This is an auxiliary routine that is used to load an possibly signed
+    --  modular literal value from the input file into Buf, starting at Ptr + 1.
+    --  Ptr is left set to the last character stored.
+ 
+    -------------
+    -- Get_LLU --
+    -------------
+ 
+    procedure Get_LLU
+      (File  : File_Type;
+       Item  : out Long_Long_Unsigned;
+       Width : Field)
+    is
+       Buf  : String (1 .. Field'Last);
+       Stop : Integer := 0;
+       Ptr  : aliased Integer := 1;
+ 
+    begin
+       if Width /= 0 then
+          Load_Width (File, Width, Buf, Stop);
+          String_Skip (Buf, Ptr);
+       else
+          Load_Modular (File, Buf, Stop);
+       end if;
+ 
+       Item := Scan_Long_Long_Unsigned (Buf, Ptr'Access, Stop);
+       Check_End_Of_Field (Buf, Stop, Ptr, Width);
+    end Get_LLU;
+ 
+    -------------
+    -- Get_Uns --
+    -------------
+ 
+    procedure Get_Uns
+      (File  : File_Type;
+       Item  : out Unsigned;
+       Width : Field)
+    is
+       Buf  : String (1 .. Field'Last);
+       Stop : Integer := 0;
+       Ptr  : aliased Integer := 1;
+ 
+    begin
+       if Width /= 0 then
+          Load_Width (File, Width, Buf, Stop);
+          String_Skip (Buf, Ptr);
+       else
+          Load_Modular (File, Buf, Stop);
+       end if;
+ 
+       Item := Scan_Unsigned (Buf, Ptr'Access, Stop);
+       Check_End_Of_Field (Buf, Stop, Ptr, Width);
+    end Get_Uns;
+ 
+    --------------
+    -- Gets_LLU --
+    --------------
+ 
+    procedure Gets_LLU
+      (From : String;
+       Item : out Long_Long_Unsigned;
+       Last : out Positive)
+    is
+       Pos : aliased Integer;
+ 
+    begin
+       String_Skip (From, Pos);
+       Item := Scan_Long_Long_Unsigned (From, Pos'Access, From'Last);
+       Last := Pos - 1;
+ 
+    exception
+       when Constraint_Error =>
+          raise Data_Error;
+    end Gets_LLU;
+ 
+    --------------
+    -- Gets_Uns --
+    --------------
+ 
+    procedure Gets_Uns
+      (From : String;
+       Item : out Unsigned;
+       Last : out Positive)
+    is
+       Pos : aliased Integer;
+ 
+    begin
+       String_Skip (From, Pos);
+       Item := Scan_Unsigned (From, Pos'Access, From'Last);
+       Last := Pos - 1;
+ 
+    exception
+       when Constraint_Error =>
+          raise Data_Error;
+    end Gets_Uns;
+ 
+    ------------------
+    -- Load_Modular --
+    ------------------
+ 
+    procedure Load_Modular
+      (File : File_Type;
+       Buf  : out String;
+       Ptr  : in out Natural)
+    is
+       Hash_Loc : Natural;
+       Loaded   : Boolean;
+ 
+    begin
+       Load_Skip (File);
+ 
+       --  Note: it is a bit strange to allow a minus sign here, but it seems
+       --  consistent with the general behavior expected by the ACVC tests
+       --  which is to scan past junk and then signal data error, see ACVC
+       --  test CE3704F, case (6), which is for signed integer exponents,
+       --  which seems a similar case.
+ 
+       Load (File, Buf, Ptr, '+', '-');
+       Load_Digits (File, Buf, Ptr, Loaded);
+ 
+       if Loaded then
+          Load (File, Buf, Ptr, '#', ':', Loaded);
+ 
+          if Loaded then
+             Hash_Loc := Ptr;
+             Load_Extended_Digits (File, Buf, Ptr);
+             Load (File, Buf, Ptr, Buf (Hash_Loc));
+          end if;
+ 
+          Load (File, Buf, Ptr, 'E', 'e', Loaded);
+ 
+          if Loaded then
+ 
+             --  Note: it is strange to allow a minus sign, since the syntax
+             --  does not, but that is what ACVC test CE3704F, case (6) wants
+             --  for the signed case, and there seems no good reason to treat
+             --  exponents differently for the signed and unsigned cases.
+ 
+             Load (File, Buf, Ptr, '+', '-');
+             Load_Digits (File, Buf, Ptr);
+          end if;
+       end if;
+    end Load_Modular;
+ 
+    -------------
+    -- Put_LLU --
+    -------------
+ 
+    procedure Put_LLU
+      (File  : File_Type;
+       Item  : Long_Long_Unsigned;
+       Width : Field;
+       Base  : Number_Base)
+    is
+       Buf : String (1 .. Field'Last);
+       Ptr : Natural := 0;
+ 
+    begin
+       if Base = 10 and then Width = 0 then
+          Set_Image_Long_Long_Unsigned (Item, Buf, Ptr);
+       elsif Base = 10 then
+          Set_Image_Width_Long_Long_Unsigned (Item, Width, Buf, Ptr);
+       else
+          Set_Image_Based_Long_Long_Unsigned (Item, Base, Width, Buf, Ptr);
+       end if;
+ 
+       Put_Item (File, Buf (1 .. Ptr));
+    end Put_LLU;
+ 
+    -------------
+    -- Put_Uns --
+    -------------
+ 
+    procedure Put_Uns
+      (File  : File_Type;
+       Item  : Unsigned;
+       Width : Field;
+       Base  : Number_Base)
+    is
+       Buf : String (1 .. Field'Last);
+       Ptr : Natural := 0;
+ 
+    begin
+       if Base = 10 and then Width = 0 then
+          Set_Image_Unsigned (Item, Buf, Ptr);
+       elsif Base = 10 then
+          Set_Image_Width_Unsigned (Item, Width, Buf, Ptr);
+       else
+          Set_Image_Based_Unsigned (Item, Base, Width, Buf, Ptr);
+       end if;
+ 
+       Put_Item (File, Buf (1 .. Ptr));
+    end Put_Uns;
+ 
+    --------------
+    -- Puts_LLU --
+    --------------
+ 
+    procedure Puts_LLU
+      (To   : out String;
+       Item : Long_Long_Unsigned;
+       Base : Number_Base)
+    is
+       Buf : String (1 .. Field'Last);
+       Ptr : Natural := 0;
+ 
+    begin
+       if Base = 10 then
+          Set_Image_Width_Long_Long_Unsigned (Item, To'Length, Buf, Ptr);
+       else
+          Set_Image_Based_Long_Long_Unsigned (Item, Base, To'Length, Buf, Ptr);
+       end if;
+ 
+       if Ptr > To'Length then
+          raise Layout_Error;
+       else
+          To (To'First .. To'First + Ptr - 1) := Buf (1 .. Ptr);
+       end if;
+    end Puts_LLU;
+ 
+    --------------
+    -- Puts_Uns --
+    --------------
+ 
+    procedure Puts_Uns
+      (To   : out String;
+       Item : Unsigned;
+       Base : Number_Base)
+    is
+       Buf : String (1 .. Field'Last);
+       Ptr : Natural := 0;
+ 
+    begin
+       if Base = 10 then
+          Set_Image_Width_Unsigned (Item, To'Length, Buf, Ptr);
+       else
+          Set_Image_Based_Unsigned (Item, Base, To'Length, Buf, Ptr);
+       end if;
+ 
+       if Ptr > To'Length then
+          raise Layout_Error;
+       else
+          To (To'First .. To'First + Ptr - 1) := Buf (1 .. Ptr);
+       end if;
+    end Puts_Uns;
+ 
+ end Ada.Wide_Wide_Text_IO.Modular_Aux;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ztmoau.ads gcc-4.0.0/gcc/ada/a-ztmoau.ads
*** gcc-3.4.3/gcc/ada/a-ztmoau.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-ztmoau.ads	Wed Feb  9 11:14:42 2005
***************
*** 0 ****
--- 1,90 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --    A D A . W I D E _ W I D E _ T E X T _ I O . M O D U L A R _ A U X     --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package contains the routines for Ada.Wide_Wide_Text_IO.Modular_IO
+ --  that are shared among separate instantiations of this package. The
+ --  routines in this package are identical semantically to those in Modular_IO
+ --  itself, except that the generic parameter Num has been replaced by
+ --  Unsigned or Long_Long_Unsigned, and the default parameters have been
+ --  removed because they are supplied explicitly by the calls from within the
+ --  generic template.
+ 
+ with System.Unsigned_Types;
+ 
+ private package Ada.Wide_Wide_Text_IO.Modular_Aux is
+ 
+    package U renames System.Unsigned_Types;
+ 
+    procedure Get_Uns
+      (File  : File_Type;
+       Item  : out U.Unsigned;
+       Width : Field);
+ 
+    procedure Get_LLU
+      (File  : File_Type;
+       Item  : out U.Long_Long_Unsigned;
+       Width : Field);
+ 
+    procedure Gets_Uns
+      (From : String;
+       Item : out U.Unsigned;
+       Last : out Positive);
+ 
+    procedure Gets_LLU
+      (From : String;
+       Item : out U.Long_Long_Unsigned;
+       Last : out Positive);
+ 
+    procedure Put_Uns
+      (File  : File_Type;
+       Item  : U.Unsigned;
+       Width : Field;
+       Base  : Number_Base);
+ 
+    procedure Put_LLU
+      (File  : File_Type;
+       Item  : U.Long_Long_Unsigned;
+       Width : Field;
+       Base  : Number_Base);
+ 
+    procedure Puts_Uns
+      (To   : out String;
+       Item : U.Unsigned;
+       Base : Number_Base);
+ 
+    procedure Puts_LLU
+      (To   : out String;
+       Item : U.Long_Long_Unsigned;
+       Base : Number_Base);
+ 
+ end Ada.Wide_Wide_Text_IO.Modular_Aux;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ztmoio.adb gcc-4.0.0/gcc/ada/a-ztmoio.adb
*** gcc-3.4.3/gcc/ada/a-ztmoio.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-ztmoio.adb	Wed Feb  9 11:14:42 2005
***************
*** 0 ****
--- 1,143 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --      A D A . W I D E _ W I D E _ T E X T _ I O . M O D U L A R _ I O     --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Wide_Wide_Text_IO.Modular_Aux;
+ 
+ with System.Unsigned_Types; use System.Unsigned_Types;
+ with System.WCh_Con;        use System.WCh_Con;
+ with System.WCh_WtS;        use System.WCh_WtS;
+ 
+ package body Ada.Wide_Wide_Text_IO.Modular_IO is
+ 
+    subtype TFT is Ada.Wide_Wide_Text_IO.File_Type;
+    --  File type required for calls to routines in Aux
+ 
+    package Aux renames Ada.Wide_Wide_Text_IO.Modular_Aux;
+ 
+    ---------
+    -- Get --
+    ---------
+ 
+    procedure Get
+      (File  : File_Type;
+       Item  : out Num;
+       Width : Field := 0)
+    is
+    begin
+       if Num'Size > Unsigned'Size then
+          Aux.Get_LLU (TFT (File), Long_Long_Unsigned (Item), Width);
+       else
+          Aux.Get_Uns (TFT (File), Unsigned (Item), Width);
+       end if;
+ 
+    exception
+       when Constraint_Error => raise Data_Error;
+    end Get;
+ 
+    procedure Get
+      (Item  : out Num;
+       Width : Field := 0)
+    is
+    begin
+       Get (Current_Input, Item, Width);
+    end Get;
+ 
+    procedure Get
+      (From : Wide_Wide_String;
+       Item : out Num;
+       Last : out Positive)
+    is
+       S : constant String := Wide_Wide_String_To_String (From, WCEM_Upper);
+       --  String on which we do the actual conversion. Note that the method
+       --  used for wide character encoding is irrelevant, since if there is
+       --  a character outside the Standard.Character range then the call to
+       --  Aux.Gets will raise Data_Error in any case.
+ 
+    begin
+       if Num'Size > Unsigned'Size then
+          Aux.Gets_LLU (S, Long_Long_Unsigned (Item), Last);
+       else
+          Aux.Gets_Uns (S, Unsigned (Item), Last);
+       end if;
+ 
+    exception
+       when Constraint_Error => raise Data_Error;
+    end Get;
+ 
+    ---------
+    -- Put --
+    ---------
+ 
+    procedure Put
+      (File  : File_Type;
+       Item  : Num;
+       Width : Field := Default_Width;
+       Base  : Number_Base := Default_Base)
+    is
+    begin
+       if Num'Size > Unsigned'Size then
+          Aux.Put_LLU (TFT (File), Long_Long_Unsigned (Item), Width, Base);
+       else
+          Aux.Put_Uns (TFT (File), Unsigned (Item), Width, Base);
+       end if;
+    end Put;
+ 
+    procedure Put
+      (Item  : Num;
+       Width : Field := Default_Width;
+       Base  : Number_Base := Default_Base)
+    is
+    begin
+       Put (Current_Output, Item, Width, Base);
+    end Put;
+ 
+    procedure Put
+      (To   : out Wide_Wide_String;
+       Item : Num;
+       Base : Number_Base := Default_Base)
+    is
+       S : String (To'First .. To'Last);
+ 
+    begin
+       if Num'Size > Unsigned'Size then
+          Aux.Puts_LLU (S, Long_Long_Unsigned (Item), Base);
+       else
+          Aux.Puts_Uns (S, Unsigned (Item), Base);
+       end if;
+ 
+       for J in S'Range loop
+          To (J) := Wide_Wide_Character'Val (Character'Pos (S (J)));
+       end loop;
+    end Put;
+ 
+ end Ada.Wide_Wide_Text_IO.Modular_IO;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-ztmoio.ads gcc-4.0.0/gcc/ada/a-ztmoio.ads
*** gcc-3.4.3/gcc/ada/a-ztmoio.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-ztmoio.ads	Wed Feb  9 11:14:42 2005
***************
*** 0 ****
--- 1,82 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --      A D A . W I D E _ W I D E _ T E X T _ I O . M O D U L A R _ I O     --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  In Ada 95, the package Ada.Wide_Wide_Text_IO.Modular_IO is a subpackage of
+ --  Wide_Wide_Text_IO. In GNAT we make it a child package to avoid loading the
+ --  necessary code if Modular_IO is not instantiated. See the routine
+ --  Rtsfind.Text_IO_Kludge for a description of how we patch up the
+ --  difference in semantics so that it is invisible to the Ada programmer.
+ 
+ private generic
+    type Num is mod <>;
+ 
+ package Ada.Wide_Wide_Text_IO.Modular_IO is
+ 
+    Default_Width : Field := Num'Width;
+    Default_Base  : Number_Base := 10;
+ 
+    procedure Get
+      (File  : File_Type;
+       Item  : out Num;
+       Width : Field := 0);
+ 
+    procedure Get
+      (Item  : out Num;
+       Width : Field := 0);
+ 
+    procedure Put
+      (File  : File_Type;
+       Item  : Num;
+       Width : Field := Default_Width;
+       Base  : Number_Base := Default_Base);
+ 
+    procedure Put
+      (Item  : Num;
+       Width : Field := Default_Width;
+       Base  : Number_Base := Default_Base);
+ 
+    procedure Get
+      (From : Wide_Wide_String;
+       Item : out Num;
+       Last : out Positive);
+ 
+    procedure Put
+      (To   : out Wide_Wide_String;
+       Item : Num;
+       Base : Number_Base := Default_Base);
+ 
+ end Ada.Wide_Wide_Text_IO.Modular_IO;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-zttest.adb gcc-4.0.0/gcc/ada/a-zttest.adb
*** gcc-3.4.3/gcc/ada/a-zttest.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-zttest.adb	Wed Feb  9 11:14:42 2005
***************
*** 0 ****
--- 1,48 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --    A D A . W I D E _ W I D E _ T E X T _ I O . T E X T _ S T R E A M S   --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with System.File_IO;
+ 
+ package body Ada.Wide_Wide_Text_IO.Text_Streams is
+ 
+    ------------
+    -- Stream --
+    ------------
+ 
+    function Stream (File : File_Type) return Stream_Access is
+    begin
+       System.File_IO.Check_File_Open (FCB.AFCB_Ptr (File));
+       return Stream_Access (File);
+    end Stream;
+ 
+ end Ada.Wide_Wide_Text_IO.Text_Streams;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-zttest.ads gcc-4.0.0/gcc/ada/a-zttest.ads
*** gcc-3.4.3/gcc/ada/a-zttest.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-zttest.ads	Wed Feb  9 11:14:42 2005
***************
*** 0 ****
--- 1,24 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --    A D A . W I D E _ W I D E _ T E X T _ I O . T E X T _ S T R E A M S   --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ -- This specification is adapted from the Ada Reference Manual for use with --
+ -- GNAT.  In accordance with the copyright of that document, you can freely --
+ -- copy and modify this specification,  provided that if you redistribute a --
+ -- modified version,  any changes that you have made are clearly indicated. --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Streams;
+ 
+ package Ada.Wide_Wide_Text_IO.Text_Streams is
+ 
+    type Stream_Access is access all Streams.Root_Stream_Type'Class;
+ 
+    function Stream (File : File_Type) return Stream_Access;
+ 
+ end Ada.Wide_Wide_Text_IO.Text_Streams;
diff -Nrcpad gcc-3.4.3/gcc/ada/a-zzunio.ads gcc-4.0.0/gcc/ada/a-zzunio.ads
*** gcc-3.4.3/gcc/ada/a-zzunio.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/a-zzunio.ads	Wed Feb  9 11:14:42 2005
***************
*** 0 ****
--- 1,64 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --               ADA.WIDE_WIDE_TEXT_IO.WIDE_WIDE_UNBOUNDED_IO               --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ -- This specification is adapted from the Ada Reference Manual for use with --
+ -- GNAT.  In accordance with the copyright of that document, you can freely --
+ -- copy and modify this specification,  provided that if you redistribute a --
+ -- modified version,  any changes that you have made are clearly indicated. --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  Note: historically GNAT provided these subprograms as a child of the
+ --  package Ada.Strings.Wide_Wide_Unbounded. So we implement this new Ada 2005
+ --  package by renaming the subprograms in that child. This is a more
+ --  straightforward implementation anyway, since we need access to the
+ --  internal representation of Unbounded_Wide_Wide_String.
+ 
+ 
+ with Ada.Strings.Wide_Wide_Unbounded;
+ with Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO;
+ 
+ package Ada.Wide_Wide_Text_IO.Wide_Wide_Unbounded_IO is
+ 
+    procedure Put
+      (File : File_Type;
+       Item : Strings.Wide_Wide_Unbounded.Unbounded_Wide_Wide_String)
+    renames Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO.Put;
+ 
+    procedure Put
+      (Item : Strings.Wide_Wide_Unbounded.Unbounded_Wide_Wide_String)
+    renames Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO.Put;
+ 
+    procedure Put_Line
+      (File : Wide_Wide_Text_IO.File_Type;
+       Item : Strings.Wide_Wide_Unbounded.Unbounded_Wide_Wide_String)
+    renames Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO.Put_Line;
+ 
+    procedure Put_Line
+      (Item : Strings.Wide_Wide_Unbounded.Unbounded_Wide_Wide_String)
+    renames Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO.Put_Line;
+ 
+    function Get_Line
+      (File : File_Type)
+       return Strings.Wide_Wide_Unbounded.Unbounded_Wide_Wide_String
+    renames Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO.Get_Line;
+ 
+    function Get_Line
+      return Strings.Wide_Wide_Unbounded.Unbounded_Wide_Wide_String
+    renames Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO.Get_Line;
+ 
+    procedure Get_Line
+       (File : File_Type;
+        Item : out Strings.Wide_Wide_Unbounded.Unbounded_Wide_Wide_String)
+    renames Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO.Get_Line;
+ 
+    procedure Get_Line
+      (Item : out Strings.Wide_Wide_Unbounded.Unbounded_Wide_Wide_String)
+    renames Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO.Get_Line;
+ 
+ end Ada.Wide_Wide_Text_IO.Wide_Wide_Unbounded_IO;
diff -Nrcpad gcc-3.4.3/gcc/ada/ada-tree.def gcc-4.0.0/gcc/ada/ada-tree.def
*** gcc-3.4.3/gcc/ada/ada-tree.def	Tue Nov 18 10:00:42 2003
--- gcc-4.0.0/gcc/ada/ada-tree.def	Fri Sep 17 21:54:47 2004
***************
*** 6,12 ****
   *                                                                          *
   *                              Specification                               *
   *                                                                          *
!  *          Copyright (C) 1992-2003 Free Software Foundation, Inc.          *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
--- 6,12 ----
   *                                                                          *
   *                              Specification                               *
   *                                                                          *
!  *          Copyright (C) 1992-2004 Free Software Foundation, Inc.          *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
***************
*** 24,87 ****
   *                                                                          *
   ****************************************************************************/
  
- /* A GNAT tree node to transform to a GCC tree.  This is only used when the
-    node would generate code, rather then just a tree, and we are in the global
-    context.
- 
-    The only field used is TREE_COMPLEXITY, which contains the GNAT node
-    number.  */
- 
- DEFTREECODE (TRANSFORM_EXPR, "transform_expr", 'e', 0)
- 
- /* Dynamically allocate on the stack a number of bytes of memory given
-    by operand 0 at the alignment given by operand 1 and return the
-    address of the resulting memory.  */
- 
- DEFTREECODE (ALLOCATE_EXPR, "allocate_expr", '2', 2)
- 
  /* A type that is an unconstrained array itself.  This node is never passed
     to GCC. TREE_TYPE is the type of the fat pointer and TYPE_OBJECT_RECORD_TYPE
     is the type of a record containing the template and data.  */
  
! DEFTREECODE (UNCONSTRAINED_ARRAY_TYPE, "unconstrained_array_type", 't', 0)
  
  /* A reference to an unconstrained array.  This node only exists as an
     intermediate node during the translation of a GNAT tree to a GCC tree;
     it is never passed to GCC.  The only field used is operand 0, which
     is the fat pointer object.  */
  
! DEFTREECODE (UNCONSTRAINED_ARRAY_REF, "unconstrained_array_ref", 'r', 1)
  
  /* An expression that returns an RTL suitable for its type.  Operand 0
     is an expression to be evaluated for side effects only.  */
! 
! DEFTREECODE (NULL_EXPR, "null_expr", 'e', 1)
! 
! /* An expression that emits a USE for its single operand.  */
! 
! DEFTREECODE (USE_EXPR, "use_expr", 'e', 1)
  
  /* Same as ADDR_EXPR, except that if the operand represents a bit field,
     return the address of the byte containing the bit.  This is used
     for the 'Address attribute and never shows up in the tree.  */
! DEFTREECODE (ATTR_ADDR_EXPR, "attr_addr_expr", 'r', 1)
  
! /* An expression that is treated as a conversion while generating code, but is
!    used to prevent infinite recursion when conversions of biased types are
!    involved.  */
  
! DEFTREECODE (GNAT_NOP_EXPR, "gnat_nop_expr", '1', 1)
  
! /* This is used as a place to store the ID of a loop.
  
!    ??? This should be redone at some point.  */
  
! DEFTREECODE (GNAT_LOOP_ID, "gnat_loop_id", 'x', 0)
  
! /* Here are the tree codes for the statement types known to Ada.  These
!    must be at the end of this file to allow IS_STMT to work.
  
!    We start with an expression statement, whose only operand is an
!    expression, EXPR_STMT_EXPR, Execution of the statement means evaluation of
!    the expression (such as a MODIFY_EXPR) and discarding its result.  */
! DEFTREECODE (EXPR_STMT, "expr_stmt_expr", 's', 1)
--- 24,85 ----
   *                                                                          *
   ****************************************************************************/
  
  /* A type that is an unconstrained array itself.  This node is never passed
     to GCC. TREE_TYPE is the type of the fat pointer and TYPE_OBJECT_RECORD_TYPE
     is the type of a record containing the template and data.  */
  
! DEFTREECODE (UNCONSTRAINED_ARRAY_TYPE, "unconstrained_array_type", tcc_type, 0)
  
  /* A reference to an unconstrained array.  This node only exists as an
     intermediate node during the translation of a GNAT tree to a GCC tree;
     it is never passed to GCC.  The only field used is operand 0, which
     is the fat pointer object.  */
  
! DEFTREECODE (UNCONSTRAINED_ARRAY_REF, "unconstrained_array_ref",
! 	    tcc_reference, 1)
  
  /* An expression that returns an RTL suitable for its type.  Operand 0
     is an expression to be evaluated for side effects only.  */
! DEFTREECODE (NULL_EXPR, "null_expr", tcc_expression, 1)
  
  /* Same as ADDR_EXPR, except that if the operand represents a bit field,
     return the address of the byte containing the bit.  This is used
     for the 'Address attribute and never shows up in the tree.  */
! DEFTREECODE (ATTR_ADDR_EXPR, "attr_addr_expr", tcc_reference, 1)
  
! /* Here are the tree codes for the statement types known to Ada.  These
!    must be at the end of this file to allow IS_ADA_STMT to work.  */
  
! /* This is how record_code_position and insert_code_for work.  The former
!    makes this tree node, whose operand is a statement.  The latter inserts
!    the actual statements into this node.  Gimplification consists of
!    just returning the inner statement.  */
! DEFTREECODE (STMT_STMT, "stmt_stmt", tcc_statement, 1)
  
! /* A loop.  LOOP_STMT_TOP_COND and LOOP_STMT_BOT_COND are the tests to exit a
!    loop at the top and bottom, respectively.  LOOP_STMT_UPDATE is the statement
!    to update the loop iterator at the continue point.  LOOP_STMT_BODY are the
!    statements in the body of the loop.  LOOP_STMT_LABEL points to the LABEL_DECL
!    of the end label of the loop.  */
! DEFTREECODE (LOOP_STMT, "loop_stmt", tcc_statement, 5)
  
! /* Conditionally exit a loop.  EXIT_STMT_COND is the condition, which, if
!    true, will cause the loop to be exited.  If no condition is specified,
!    the loop is unconditionally exited.  EXIT_STMT_LABEL is the end label
!    corresponding to the loop to exit.  */
! DEFTREECODE (EXIT_STMT, "exit_stmt", tcc_statement, 2)
  
! /* A exception region.  REGION_STMT_BODY is the statement to be executed
!    inside the region.  REGION_STMT_HANDLE is a statement that represents
!    the exception handlers (usually a BLOCK_STMT of HANDLE_STMTs).
!    REGION_STMT_BLOCK is the BLOCK node for the declarative region, if any.  */
! DEFTREECODE (REGION_STMT, "region_stmt", tcc_statement, 3)
  
! /* An exception handler.  HANDLER_STMT_ARG is the value to pass to 
!    expand_start_catch, HANDLER_STMT_LIST is the list of statements for the
!    handler itself, and HANDLER_STMT_BLOCK is the BLOCK node for this
!    binding. */
! DEFTREECODE (HANDLER_STMT, "handler_stmt", tcc_statement, 3)
  
! /* A statement that emits a USE for its single operand.  */
! DEFTREECODE (USE_STMT, "use_expr", tcc_statement, 1)
diff -Nrcpad gcc-3.4.3/gcc/ada/ada-tree.h gcc-4.0.0/gcc/ada/ada-tree.h
*** gcc-3.4.3/gcc/ada/ada-tree.h	Mon Nov 17 14:58:14 2003
--- gcc-4.0.0/gcc/ada/ada-tree.h	Thu Feb 10 13:50:48 2005
***************
*** 6,12 ****
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 1992-2003 Free Software Foundation, Inc.          *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
--- 6,12 ----
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 1992-2005 Free Software Foundation, Inc.          *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
*************** enum gnat_tree_code {
*** 33,73 ****
  };
  #undef DEFTREECODE
  
! /* A tree to hold a loop ID.  */
! struct tree_loop_id GTY(()) 
  {
!   struct tree_common common;
!   struct nesting *loop_id;
  };
  
! /* The language-specific tree.  */
! union lang_tree_node 
!   GTY((desc ("TREE_CODE (&%h.generic) == GNAT_LOOP_ID"),
!        chain_next ("(union lang_tree_node *)TREE_CHAIN (&%h.generic)")))
! {
!   union tree_node GTY ((tag ("0"), 
! 			desc ("tree_node_structure (&%h)"))) 
!     generic;
!   struct tree_loop_id GTY ((tag ("1"))) loop_id;
! };
  
! /* Ada uses the lang_decl and lang_type fields to hold more trees.  */
! struct lang_decl GTY(()) 
! {
!   union lang_tree_node 
!     GTY((desc ("TREE_CODE (&%h.generic) == GNAT_LOOP_ID"))) t;
! };
! struct lang_type GTY(())
! {
!   union lang_tree_node 
!     GTY((desc ("TREE_CODE (&%h.generic) == GNAT_LOOP_ID"))) t;
! };
  
  /* Flags added to GCC type nodes.  */
  
  /* For RECORD_TYPE, UNION_TYPE, and QUAL_UNION_TYPE, nonzero if this is a
     record being used as a fat pointer (only true for RECORD_TYPE).  */
! #define TYPE_IS_FAT_POINTER_P(NODE) TYPE_LANG_FLAG_0 (NODE)
  
  #define TYPE_FAT_POINTER_P(NODE)  \
    (TREE_CODE (NODE) == RECORD_TYPE && TYPE_IS_FAT_POINTER_P (NODE))
--- 33,71 ----
  };
  #undef DEFTREECODE
  
! /* Ada uses the lang_decl and lang_type fields to hold a tree.  */
! union lang_tree_node
!   GTY((desc ("0"),
!        chain_next ("(union lang_tree_node *)TREE_CHAIN (&%h.t)")))
  {
!   union tree_node GTY((tag ("0"))) t;
  };
+ struct lang_decl GTY(()) {tree t; };
+ struct lang_type GTY(()) {tree t; };
  
! /* Define macros to get and set the tree in TYPE_ and DECL_LANG_SPECIFIC.  */
! #define GET_TYPE_LANG_SPECIFIC(NODE) \
!   (TYPE_LANG_SPECIFIC (NODE) ? TYPE_LANG_SPECIFIC (NODE)->t : NULL_TREE)
! #define SET_TYPE_LANG_SPECIFIC(NODE, X)	\
!  (TYPE_LANG_SPECIFIC (NODE)			\
!   = (TYPE_LANG_SPECIFIC (NODE)			\
!      ? TYPE_LANG_SPECIFIC (NODE) : ggc_alloc (sizeof (struct lang_type))))   \
!  ->t = X;
  
! #define GET_DECL_LANG_SPECIFIC(NODE) \
!   (DECL_LANG_SPECIFIC (NODE) ? DECL_LANG_SPECIFIC (NODE)->t : NULL_TREE)
! #define SET_DECL_LANG_SPECIFIC(NODE, VALUE)	\
!  (DECL_LANG_SPECIFIC (NODE)			\
!   = (DECL_LANG_SPECIFIC (NODE)			\
!      ? DECL_LANG_SPECIFIC (NODE) : ggc_alloc (sizeof (struct lang_decl))))   \
!  ->t = VALUE;
  
  /* Flags added to GCC type nodes.  */
  
  /* For RECORD_TYPE, UNION_TYPE, and QUAL_UNION_TYPE, nonzero if this is a
     record being used as a fat pointer (only true for RECORD_TYPE).  */
! #define TYPE_IS_FAT_POINTER_P(NODE) \
!   TYPE_LANG_FLAG_0 (RECORD_OR_UNION_CHECK (NODE))
  
  #define TYPE_FAT_POINTER_P(NODE)  \
    (TREE_CODE (NODE) == RECORD_TYPE && TYPE_IS_FAT_POINTER_P (NODE))
*************** struct lang_type GTY(())
*** 94,101 ****
    TYPE_LANG_FLAG_1 (FUNCTION_TYPE_CHECK (NODE))
  
  /* For RECORD_TYPE, UNION_TYPE, and QUAL_UNION_TYPE, nonzero if this denotes
!    a left-justified modular type (will only be true for RECORD_TYPE).  */
! #define TYPE_LEFT_JUSTIFIED_MODULAR_P(NODE) TYPE_LANG_FLAG_1 (NODE)
  
  /* Nonzero in an arithmetic subtype if this is a subtype not known to the
     front-end.  */
--- 92,100 ----
    TYPE_LANG_FLAG_1 (FUNCTION_TYPE_CHECK (NODE))
  
  /* For RECORD_TYPE, UNION_TYPE, and QUAL_UNION_TYPE, nonzero if this denotes
!    a justified modular type (will only be true for RECORD_TYPE).  */
! #define TYPE_JUSTIFIED_MODULAR_P(NODE) \
!   TYPE_LANG_FLAG_1 (RECORD_OR_UNION_CHECK (NODE))
  
  /* Nonzero in an arithmetic subtype if this is a subtype not known to the
     front-end.  */
*************** struct lang_type GTY(())
*** 107,113 ****
  /* For RECORD_TYPE, UNION_TYPE, and QUAL_UNION_TYPE, nonzero if this is the
     type for an object whose type includes its template in addition to
     its value (only true for RECORD_TYPE).  */
! #define TYPE_CONTAINS_TEMPLATE_P(NODE) TYPE_LANG_FLAG_3 (NODE)
  
  /* For INTEGER_TYPE, nonzero if this really represents a VAX
     floating-point type.  */
--- 106,113 ----
  /* For RECORD_TYPE, UNION_TYPE, and QUAL_UNION_TYPE, nonzero if this is the
     type for an object whose type includes its template in addition to
     its value (only true for RECORD_TYPE).  */
! #define TYPE_CONTAINS_TEMPLATE_P(NODE) \
!   TYPE_LANG_FLAG_3 (RECORD_OR_UNION_CHECK (NODE))
  
  /* For INTEGER_TYPE, nonzero if this really represents a VAX
     floating-point type.  */
*************** struct lang_type GTY(())
*** 137,142 ****
--- 137,147 ----
  #define TYPE_RETURNS_BY_REF_P(NODE) \
    TYPE_LANG_FLAG_4 (FUNCTION_TYPE_CHECK (NODE))
  
+ /* For FUNCTION_TYPEs, nonzero if function returns by being passed a pointer
+    to a place to store its result.  */
+ #define TYPE_RETURNS_BY_TARGET_PTR_P(NODE) \
+   TYPE_LANG_FLAG_5 (FUNCTION_TYPE_CHECK (NODE))
+ 
  /* For VOID_TYPE, ENUMERAL_TYPE, UNION_TYPE, and RECORD_TYPE, nonzero if this
     is a dummy type, made to correspond to a private or incomplete type.  */
  #define TYPE_DUMMY_P(NODE) TYPE_LANG_FLAG_4 (NODE)
*************** struct lang_type GTY(())
*** 155,231 ****
     padding or alignment.  */
  #define TYPE_IS_PADDING_P(NODE) TYPE_LANG_FLAG_5 (RECORD_TYPE_CHECK (NODE))
  
  /* This field is only defined for FUNCTION_TYPE nodes. If the Ada
     subprogram contains no parameters passed by copy in/copy out then this
     field is 0. Otherwise it points to a list of nodes used to specify the
     return values of the out (or in out) parameters that qualify to be passed
     by copy in copy out.  It is a CONSTRUCTOR.  For a full description of the
     cico parameter passing mechanism refer to the routine gnat_to_gnu_entity. */
! #define TYPE_CI_CO_LIST(NODE)   \
!   (&TYPE_LANG_SPECIFIC (FUNCTION_TYPE_CHECK (NODE))->t.generic)
! #define SET_TYPE_CI_CO_LIST(NODE, X)   \
!   (TYPE_LANG_SPECIFIC (FUNCTION_TYPE_CHECK (NODE)) = (struct lang_type *)(X))
  
  /* For an INTEGER_TYPE with TYPE_MODULAR_P, this is the value of the
     modulus. */
! #define TYPE_MODULUS(NODE)  \
!   (&TYPE_LANG_SPECIFIC (INTEGER_TYPE_CHECK (NODE))->t.generic)
  #define SET_TYPE_MODULUS(NODE, X)  \
!   (TYPE_LANG_SPECIFIC (INTEGER_TYPE_CHECK (NODE)) = (struct lang_type *)(X))
  
  /* For an INTEGER_TYPE that is the TYPE_DOMAIN of some ARRAY_TYPE, points to
     the type corresponding to the Ada index type.  */
! #define TYPE_INDEX_TYPE(NODE)	\
!   (&TYPE_LANG_SPECIFIC (INTEGER_TYPE_CHECK (NODE))->t.generic)
! #define SET_TYPE_INDEX_TYPE(NODE, X)	\
!   (TYPE_LANG_SPECIFIC (INTEGER_TYPE_CHECK (NODE)) = (struct lang_type *) (X))
  
  /* For an INTEGER_TYPE with TYPE_VAX_FLOATING_POINT_P, stores the
     Digits_Value.  */
  #define TYPE_DIGITS_VALUE(NODE) \
!   (&TYPE_LANG_SPECIFIC (INTEGER_TYPE_CHECK (NODE))->t.generic)
  #define SET_TYPE_DIGITS_VALUE(NODE, X)  \
!   (TYPE_LANG_SPECIFIC (INTEGER_TYPE_CHECK (NODE)) = (struct lang_type *) (X))
! 
! /* For INTEGER_TYPE, stores the RM_Size of the type.  */
! #define TYPE_RM_SIZE_INT(NODE)	TYPE_VALUES (INTEGER_TYPE_CHECK (NODE))
  
! /* Likewise for ENUMERAL_TYPE.  */
! #define TYPE_RM_SIZE_ENUM(NODE)	\
!   (&TYPE_LANG_SPECIFIC (ENUMERAL_TYPE_CHECK (NODE))->t.generic)
! #define SET_TYPE_RM_SIZE_ENUM(NODE, X)	\
!   (TYPE_LANG_SPECIFIC (ENUMERAL_TYPE_CHECK (NODE)) = (struct lang_type *)(X))
  
  #define TYPE_RM_SIZE(NODE)					\
!   (TREE_CODE (NODE) == ENUMERAL_TYPE ? TYPE_RM_SIZE_ENUM (NODE)	\
!    : TREE_CODE (NODE) == INTEGER_TYPE ? TYPE_RM_SIZE_INT (NODE)	\
!    : 0)
  
  /* For a RECORD_TYPE that is a fat pointer, point to the type for the
     unconstrained object.  Likewise for a RECORD_TYPE that is pointed
     to by a thin pointer.  */
  #define TYPE_UNCONSTRAINED_ARRAY(NODE)  \
!   (&TYPE_LANG_SPECIFIC (RECORD_TYPE_CHECK (NODE))->t.generic)
  #define SET_TYPE_UNCONSTRAINED_ARRAY(NODE, X)  \
!   (TYPE_LANG_SPECIFIC (RECORD_TYPE_CHECK (NODE)) = (struct lang_type *)(X))
  
  /* For other RECORD_TYPEs and all UNION_TYPEs and QUAL_UNION_TYPEs, the Ada
     size of the object.  This differs from the GCC size in that it does not
     include any rounding up to the alignment of the type.  */
! #define TYPE_ADA_SIZE(NODE)	(&TYPE_LANG_SPECIFIC (NODE)->t.generic)
  #define SET_TYPE_ADA_SIZE(NODE, X) \
!   (TYPE_LANG_SPECIFIC (NODE) = (struct lang_type *)(X))
  
  /* For an INTEGER_TYPE with TYPE_HAS_ACTUAL_BOUNDS_P or an ARRAY_TYPE, this is
     the index type that should be used when the actual bounds are required for
     a template.  This is used in the case of packed arrays.  */
! #define TYPE_ACTUAL_BOUNDS(NODE)   (&TYPE_LANG_SPECIFIC (NODE)->t.generic)
  #define SET_TYPE_ACTUAL_BOUNDS(NODE, X) \
!   (TYPE_LANG_SPECIFIC (NODE) = (struct lang_type *)(X))
  
  /* In an UNCONSTRAINED_ARRAY_TYPE, points to the record containing both
!    the template and object.  */
! #define TYPE_OBJECT_RECORD_TYPE(NODE) TYPE_MIN_VALUE (NODE)
  
  /* Nonzero in a FUNCTION_DECL that represents a stubbed function
     discriminant.  */
--- 160,235 ----
     padding or alignment.  */
  #define TYPE_IS_PADDING_P(NODE) TYPE_LANG_FLAG_5 (RECORD_TYPE_CHECK (NODE))
  
+ /* For a UNION_TYPE, nonzero if this is an unchecked union.  */
+ #define TYPE_UNCHECKED_UNION_P(NODE) TYPE_LANG_FLAG_6 (UNION_TYPE_CHECK (NODE))
+ 
  /* This field is only defined for FUNCTION_TYPE nodes. If the Ada
     subprogram contains no parameters passed by copy in/copy out then this
     field is 0. Otherwise it points to a list of nodes used to specify the
     return values of the out (or in out) parameters that qualify to be passed
     by copy in copy out.  It is a CONSTRUCTOR.  For a full description of the
     cico parameter passing mechanism refer to the routine gnat_to_gnu_entity. */
! #define TYPE_CI_CO_LIST(NODE)  TYPE_LANG_SLOT_1 (FUNCTION_TYPE_CHECK (NODE))
  
  /* For an INTEGER_TYPE with TYPE_MODULAR_P, this is the value of the
     modulus. */
! #define TYPE_MODULUS(NODE) GET_TYPE_LANG_SPECIFIC (INTEGER_TYPE_CHECK (NODE))
  #define SET_TYPE_MODULUS(NODE, X)  \
!   SET_TYPE_LANG_SPECIFIC (INTEGER_TYPE_CHECK (NODE), X)
  
  /* For an INTEGER_TYPE that is the TYPE_DOMAIN of some ARRAY_TYPE, points to
     the type corresponding to the Ada index type.  */
! #define TYPE_INDEX_TYPE(NODE) \
!   GET_TYPE_LANG_SPECIFIC (INTEGER_TYPE_CHECK (NODE))
! #define SET_TYPE_INDEX_TYPE(NODE, X) \
!   SET_TYPE_LANG_SPECIFIC (INTEGER_TYPE_CHECK (NODE), X)
  
  /* For an INTEGER_TYPE with TYPE_VAX_FLOATING_POINT_P, stores the
     Digits_Value.  */
  #define TYPE_DIGITS_VALUE(NODE) \
!   GET_TYPE_LANG_SPECIFIC (INTEGER_TYPE_CHECK (NODE))
  #define SET_TYPE_DIGITS_VALUE(NODE, X)  \
!   SET_TYPE_LANG_SPECIFIC (INTEGER_TYPE_CHECK (NODE), X)
  
! /* For numeric types, stores the RM_Size of the type.  */
! #define TYPE_RM_SIZE_NUM(NODE)	TYPE_LANG_SLOT_1 (NUMERICAL_TYPE_CHECK (NODE))
  
  #define TYPE_RM_SIZE(NODE)					\
!   (INTEGRAL_TYPE_P (NODE) || TREE_CODE (NODE) == REAL_TYPE	\
!    ? TYPE_RM_SIZE_NUM (NODE) : 0)
  
  /* For a RECORD_TYPE that is a fat pointer, point to the type for the
     unconstrained object.  Likewise for a RECORD_TYPE that is pointed
     to by a thin pointer.  */
  #define TYPE_UNCONSTRAINED_ARRAY(NODE)  \
!   GET_TYPE_LANG_SPECIFIC (RECORD_TYPE_CHECK (NODE))
  #define SET_TYPE_UNCONSTRAINED_ARRAY(NODE, X)  \
!   SET_TYPE_LANG_SPECIFIC (RECORD_TYPE_CHECK (NODE), X)
  
  /* For other RECORD_TYPEs and all UNION_TYPEs and QUAL_UNION_TYPEs, the Ada
     size of the object.  This differs from the GCC size in that it does not
     include any rounding up to the alignment of the type.  */
! #define TYPE_ADA_SIZE(NODE)   \
!   GET_TYPE_LANG_SPECIFIC (RECORD_OR_UNION_CHECK (NODE))
  #define SET_TYPE_ADA_SIZE(NODE, X) \
!   SET_TYPE_LANG_SPECIFIC (RECORD_OR_UNION_CHECK (NODE), X)
  
  /* For an INTEGER_TYPE with TYPE_HAS_ACTUAL_BOUNDS_P or an ARRAY_TYPE, this is
     the index type that should be used when the actual bounds are required for
     a template.  This is used in the case of packed arrays.  */
! #define TYPE_ACTUAL_BOUNDS(NODE)   \
!   GET_TYPE_LANG_SPECIFIC (TREE_CHECK2 (NODE, INTEGER_TYPE, ARRAY_TYPE))
  #define SET_TYPE_ACTUAL_BOUNDS(NODE, X) \
!   SET_TYPE_LANG_SPECIFIC (TREE_CHECK2 (NODE, INTEGER_TYPE, ARRAY_TYPE), X)
  
  /* In an UNCONSTRAINED_ARRAY_TYPE, points to the record containing both
!    the template and object.
! 
!    ??? We also put this on an ENUMERAL_TYPE that's dummy.  Technically,
!    this is a conflict on the minval field, but there doesn't seem to be
!    simple fix, so we'll live with this kludge for now.  */
! #define TYPE_OBJECT_RECORD_TYPE(NODE) \
!   (TREE_CHECK2 ((NODE), UNCONSTRAINED_ARRAY_TYPE, ENUMERAL_TYPE)->type.minval)
  
  /* Nonzero in a FUNCTION_DECL that represents a stubbed function
     discriminant.  */
*************** struct lang_type GTY(())
*** 260,291 ****
     memory.  Used when a scalar constant is aliased or has its
     address taken.  */
  #define DECL_CONST_CORRESPONDING_VAR(NODE) \
!   (&DECL_LANG_SPECIFIC (CONST_DECL_CHECK (NODE))->t.generic)
  #define SET_DECL_CONST_CORRESPONDING_VAR(NODE, X) \
!   (DECL_LANG_SPECIFIC (CONST_DECL_CHECK (NODE)) = (struct lang_decl *)(X))
  
  /* In a FIELD_DECL, points to the FIELD_DECL that was the ultimate
     source of the decl.  */
  #define DECL_ORIGINAL_FIELD(NODE) \
!   (&DECL_LANG_SPECIFIC (FIELD_DECL_CHECK (NODE))->t.generic)
  #define SET_DECL_ORIGINAL_FIELD(NODE, X) \
!   (DECL_LANG_SPECIFIC (FIELD_DECL_CHECK (NODE)) = (struct lang_decl *)(X))
  
  /* In a FIELD_DECL corresponding to a discriminant, contains the
     discriminant number.  */
  #define DECL_DISCRIMINANT_NUMBER(NODE) DECL_INITIAL (FIELD_DECL_CHECK (NODE))
  
- /* This is the loop id for a GNAT_LOOP_ID node.  */
- #define TREE_LOOP_ID(NODE) \
-   ((union lang_tree_node *) TREE_CHECK (NODE, GNAT_LOOP_ID))->loop_id.loop_id
- 
  /* Define fields and macros for statements.
  
     Start by defining which tree codes are used for statements.  */
! #define IS_STMT(NODE)		(TREE_CODE_CLASS (TREE_CODE (NODE)) == 's')
! 
! /* We store the Sloc in statement nodes.  */
! #define TREE_SLOC(NODE)		TREE_COMPLEXITY (STMT_CHECK (NODE))
  
! /* There is just one field in an EXPR_STMT: the expression.  */
! #define EXPR_STMT_EXPR(NODE)	TREE_OPERAND_CHECK_CODE (NODE, EXPR_STMT, 0)
--- 264,302 ----
     memory.  Used when a scalar constant is aliased or has its
     address taken.  */
  #define DECL_CONST_CORRESPONDING_VAR(NODE) \
!   GET_DECL_LANG_SPECIFIC (CONST_DECL_CHECK (NODE))
  #define SET_DECL_CONST_CORRESPONDING_VAR(NODE, X) \
!   SET_DECL_LANG_SPECIFIC (CONST_DECL_CHECK (NODE), X)
  
  /* In a FIELD_DECL, points to the FIELD_DECL that was the ultimate
     source of the decl.  */
  #define DECL_ORIGINAL_FIELD(NODE) \
!   GET_DECL_LANG_SPECIFIC (FIELD_DECL_CHECK (NODE))
  #define SET_DECL_ORIGINAL_FIELD(NODE, X) \
!   SET_DECL_LANG_SPECIFIC (FIELD_DECL_CHECK (NODE), X)
  
  /* In a FIELD_DECL corresponding to a discriminant, contains the
     discriminant number.  */
  #define DECL_DISCRIMINANT_NUMBER(NODE) DECL_INITIAL (FIELD_DECL_CHECK (NODE))
  
  /* Define fields and macros for statements.
  
     Start by defining which tree codes are used for statements.  */
! #define IS_STMT(NODE)		(STATEMENT_CLASS_P (NODE))
! #define IS_ADA_STMT(NODE)	(IS_STMT (NODE)				\
! 				 && TREE_CODE (NODE) >= STMT_STMT)
  
! #define STMT_STMT_STMT(NODE)	TREE_OPERAND_CHECK_CODE (NODE, STMT_STMT, 0)
! #define LOOP_STMT_TOP_COND(NODE) TREE_OPERAND_CHECK_CODE (NODE, LOOP_STMT, 0)
! #define LOOP_STMT_BOT_COND(NODE) TREE_OPERAND_CHECK_CODE (NODE, LOOP_STMT, 1)
! #define LOOP_STMT_UPDATE(NODE)	TREE_OPERAND_CHECK_CODE (NODE, LOOP_STMT, 2)
! #define LOOP_STMT_BODY(NODE)	TREE_OPERAND_CHECK_CODE (NODE, LOOP_STMT, 3)
! #define LOOP_STMT_LABEL(NODE)	TREE_OPERAND_CHECK_CODE (NODE, LOOP_STMT, 4)
! #define EXIT_STMT_COND(NODE)	TREE_OPERAND_CHECK_CODE (NODE, EXIT_STMT, 0)
! #define EXIT_STMT_LABEL(NODE)	TREE_OPERAND_CHECK_CODE (NODE, EXIT_STMT, 1)
! #define REGION_STMT_BODY(NODE)	TREE_OPERAND_CHECK_CODE (NODE, REGION_STMT, 0)
! #define REGION_STMT_HANDLE(NODE) TREE_OPERAND_CHECK_CODE (NODE, REGION_STMT, 1)
! #define REGION_STMT_BLOCK(NODE)	TREE_OPERAND_CHECK_CODE (NODE, REGION_STMT, 2)
! #define HANDLER_STMT_ARG(NODE) TREE_OPERAND_CHECK_CODE (NODE, HANDLER_STMT, 0)
! #define HANDLER_STMT_LIST(NODE)	TREE_OPERAND_CHECK_CODE (NODE, HANDLER_STMT, 1)
! #define HANDLER_STMT_BLOCK(NODE) TREE_OPERAND_CHECK_CODE(NODE, HANDLER_STMT, 2)
diff -Nrcpad gcc-3.4.3/gcc/ada/adaint.c gcc-4.0.0/gcc/ada/adaint.c
*** gcc-3.4.3/gcc/ada/adaint.c	Tue Jan 13 11:51:31 2004
--- gcc-4.0.0/gcc/ada/adaint.c	Thu Feb 10 13:51:58 2005
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *          Copyright (C) 1992-2004, Free Software Foundation, Inc.         *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *          Copyright (C) 1992-2005, Free Software Foundation, Inc.         *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
*************** struct vstring
*** 147,152 ****
--- 147,154 ----
  #if defined (_WIN32)
  #include <dir.h>
  #include <windows.h>
+ #undef DIR_SEPARATOR
+ #define DIR_SEPARATOR '\\'
  #endif
  
  #include "adaint.h"
*************** int max_path_len = GNAT_MAX_PATH_LEN;
*** 275,280 ****
--- 277,313 ----
     system provides the routine readdir_r.  */
  #undef HAVE_READDIR_R
  
+ #if defined(VMS) && defined (__LONG_POINTERS)
+ 
+ /* Return a 32 bit pointer to an array of 32 bit pointers
+    given a 64 bit pointer to an array of 64 bit pointers */
+ 
+ typedef __char_ptr32 *__char_ptr_char_ptr32 __attribute__ ((mode (SI)));
+ 
+ static __char_ptr_char_ptr32
+ to_ptr32 (char **ptr64)
+ {
+   int argc;
+   __char_ptr_char_ptr32 short_argv;
+ 
+   for (argc=0; ptr64[argc]; argc++);
+ 
+   /* Reallocate argv with 32 bit pointers. */
+   short_argv = (__char_ptr_char_ptr32) decc$malloc
+     (sizeof (__char_ptr32) * (argc + 1));
+ 
+   for (argc=0; ptr64[argc]; argc++)
+     short_argv[argc] = (__char_ptr32) decc$strdup (ptr64[argc]);
+ 
+   short_argv[argc] = (__char_ptr32) 0;
+   return short_argv;
+ 
+ }
+ #define MAYBE_TO_PTR32(argv) to_ptr32 (argv)
+ #else
+ #define MAYBE_TO_PTR32(argv) argv
+ #endif
+ 
  void
  __gnat_to_gm_time
    (OS_Time *p_time,
*************** __gnat_try_lock (char *dir, char *file)
*** 409,415 ****
    int fd;
  
    sprintf (full_path, "%s%c%s", dir, DIR_SEPARATOR, file);
!   sprintf (temp_file, "%s-%ld-%ld", dir, (long) getpid(), (long) getppid ());
  
    /* Create the temporary file and write the process number.  */
    fd = open (temp_file, O_CREAT | O_WRONLY, 0600);
--- 442,449 ----
    int fd;
  
    sprintf (full_path, "%s%c%s", dir, DIR_SEPARATOR, file);
!   sprintf (temp_file, "%s%cTMP-%ld-%ld",
!            dir, DIR_SEPARATOR, (long)getpid(), (long)getppid ());
  
    /* Create the temporary file and write the process number.  */
    fd = open (temp_file, O_CREAT | O_WRONLY, 0600);
*************** __gnat_open_create (char *path, int fmod
*** 616,621 ****
--- 650,670 ----
  }
  
  int
+ __gnat_create_output_file (char *path)
+ {
+   int fd;
+ #if defined (VMS)
+   fd = open (path, O_WRONLY | O_CREAT | O_TRUNC | O_TEXT, PERM,
+              "rfm=stmlf", "ctx=rec", "rat=none", "rop=nlk",
+              "shr=del,get,put,upd");
+ #else
+   fd = open (path, O_WRONLY | O_CREAT | O_TRUNC | O_TEXT, PERM);
+ #endif
+ 
+   return fd < 0 ? -1 : fd;
+ }
+ 
+ int
  __gnat_open_append (char *path, int fmode)
  {
    int fd;
*************** __gnat_file_length (int fd)
*** 705,710 ****
--- 754,774 ----
    return (statbuf.st_size);
  }
  
+ /* Return the number of bytes in the specified named file.  */
+ 
+ long
+ __gnat_named_file_length (char *name)
+ {
+   int ret;
+   struct stat statbuf;
+ 
+   ret = __gnat_stat (name, &statbuf);
+   if (ret || !S_ISREG (statbuf.st_mode))
+     return 0;
+ 
+   return (statbuf.st_size);
+ }
+ 
  /* Create a temporary filename and put it in string pointed to by
     TMP_FILENAME.  */
  
*************** __gnat_readdir (DIR *dirp, char *buffer)
*** 773,779 ****
      return NULL;
  
  #else
!   struct dirent *dirent = readdir (dirp);
  
    if (dirent != NULL)
      {
--- 837,843 ----
      return NULL;
  
  #else
!   struct dirent *dirent = (struct dirent *) readdir (dirp);
  
    if (dirent != NULL)
      {
*************** win32_filetime (HANDLE h)
*** 829,835 ****
  
  /* Return a GNAT time stamp given a file name.  */
  
! time_t
  __gnat_file_time_name (char *name)
  {
  
--- 893,899 ----
  
  /* Return a GNAT time stamp given a file name.  */
  
! OS_Time
  __gnat_file_time_name (char *name)
  {
  
*************** __gnat_file_time_name (char *name)
*** 837,843 ****
    int fd = open (name, O_RDONLY | O_BINARY);
    time_t ret = __gnat_file_time_fd (fd);
    close (fd);
!   return ret;
  
  #elif defined (_WIN32)
    time_t ret = 0;
--- 901,907 ----
    int fd = open (name, O_RDONLY | O_BINARY);
    time_t ret = __gnat_file_time_fd (fd);
    close (fd);
!   return (OS_Time)ret;
  
  #elif defined (_WIN32)
    time_t ret = 0;
*************** __gnat_file_time_name (char *name)
*** 849,870 ****
        ret = win32_filetime (h);
        CloseHandle (h);
      }
!   return ret;
  #else
    struct stat statbuf;
!   (void) __gnat_stat (name, &statbuf);
  #ifdef VMS
!   /* VMS has file versioning.  */
!   return statbuf.st_ctime;
  #else
!   return statbuf.st_mtime;
  #endif
  #endif
  }
  
  /* Return a GNAT time stamp given a file descriptor.  */
  
! time_t
  __gnat_file_time_fd (int fd)
  {
    /* The following workaround code is due to the fact that under EMX and
--- 913,937 ----
        ret = win32_filetime (h);
        CloseHandle (h);
      }
!   return (OS_Time) ret;
  #else
    struct stat statbuf;
!   if (__gnat_stat (name, &statbuf) != 0) {
!      return (OS_Time)-1;
!   } else {
  #ifdef VMS
!      /* VMS has file versioning.  */
!      return (OS_Time)statbuf.st_ctime;
  #else
!      return (OS_Time)statbuf.st_mtime;
  #endif
+   }
  #endif
  }
  
  /* Return a GNAT time stamp given a file descriptor.  */
  
! OS_Time
  __gnat_file_time_fd (int fd)
  {
    /* The following workaround code is due to the fact that under EMX and
*************** __gnat_file_time_fd (int fd)
*** 932,955 ****
    tot_secs += file_hour * 3600;
    tot_secs += file_min * 60;
    tot_secs += file_tsec * 2;
!   return tot_secs;
  
  #elif defined (_WIN32)
    HANDLE h = (HANDLE) _get_osfhandle (fd);
    time_t ret = win32_filetime (h);
!   return ret;
  
  #else
    struct stat statbuf;
  
!   (void) fstat (fd, &statbuf);
! 
  #ifdef VMS
!   /* VMS has file versioning.  */
!   return statbuf.st_ctime;
  #else
!   return statbuf.st_mtime;
  #endif
  #endif
  }
  
--- 999,1024 ----
    tot_secs += file_hour * 3600;
    tot_secs += file_min * 60;
    tot_secs += file_tsec * 2;
!   return (OS_Time) tot_secs;
  
  #elif defined (_WIN32)
    HANDLE h = (HANDLE) _get_osfhandle (fd);
    time_t ret = win32_filetime (h);
!   return (OS_Time) ret;
  
  #else
    struct stat statbuf;
  
!   if (fstat (fd, &statbuf) != 0) {
!      return (OS_Time) -1;
!   } else {
  #ifdef VMS
!      /* VMS has file versioning.  */
!      return (OS_Time) statbuf.st_ctime;
  #else
!      return (OS_Time) statbuf.st_mtime;
  #endif
+   }
  #endif
  }
  
*************** static char *to_host_path_spec (char *);
*** 1175,1187 ****
  struct descriptor_s
  {
    unsigned short len, mbz;
!   char *adr;
  };
  
  typedef struct _ile3
  {
    unsigned short len, code;
!   char *adr;
    unsigned short *retlen_adr;
  } ile_s;
  
--- 1244,1256 ----
  struct descriptor_s
  {
    unsigned short len, mbz;
!   __char_ptr32 adr;
  };
  
  typedef struct _ile3
  {
    unsigned short len, code;
!   __char_ptr32 adr;
    unsigned short *retlen_adr;
  } ile_s;
  
*************** __gnat_get_libraries_from_registry (void
*** 1310,1316 ****
      {
        value_size = name_size = 256;
        res = RegEnumValue (reg_key, index, name, &name_size, 0,
!                           &type, value, &value_size);
  
        if (res == ERROR_SUCCESS && type == REG_SZ)
          {
--- 1379,1385 ----
      {
        value_size = name_size = 256;
        res = RegEnumValue (reg_key, index, name, &name_size, 0,
!                           &type, (LPBYTE)value, &value_size);
  
        if (res == ERROR_SUCCESS && type == REG_SZ)
          {
*************** __gnat_file_exists (char *name)
*** 1372,1382 ****
  }
  
  int
! __gnat_is_absolute_path (char *name)
  {
!   return (*name == '/' || *name == DIR_SEPARATOR
  #if defined (__EMX__) || defined (MSDOS) || defined (WINNT)
!       || (strlen (name) > 1 && isalpha (name[0]) && name[1] == ':')
  #endif
  	  );
  }
--- 1441,1452 ----
  }
  
  int
! __gnat_is_absolute_path (char *name, int length)
  {
!   return (length != 0) &&
!      (*name == '/' || *name == DIR_SEPARATOR
  #if defined (__EMX__) || defined (MSDOS) || defined (WINNT)
!       || (length > 1 && isalpha (name[0]) && name[1] == ':')
  #endif
  	  );
  }
*************** __gnat_set_writable (char *name)
*** 1440,1445 ****
--- 1510,1529 ----
  }
  
  void
+ __gnat_set_executable (char *name)
+ {
+ #ifndef __vxworks
+   struct stat statbuf;
+ 
+   if (stat (name, &statbuf) == 0)
+   {
+     statbuf.st_mode = statbuf.st_mode | S_IXUSR;
+     chmod (name, statbuf.st_mode);
+   }
+ #endif
+ }
+ 
+ void
  __gnat_set_readonly (char *name)
  {
  #ifndef __vxworks
*************** __gnat_is_symbolic_link (char *name ATTR
*** 1459,1465 ****
  #if defined (__vxworks)
    return 0;
  
! #elif defined (_AIX) || defined (unix)
    int ret;
    struct stat statbuf;
  
--- 1543,1549 ----
  #if defined (__vxworks)
    return 0;
  
! #elif defined (_AIX) || defined (__APPLE__) || defined (__unix__)
    int ret;
    struct stat statbuf;
  
*************** __gnat_is_symbolic_link (char *name ATTR
*** 1471,1487 ****
  #endif
  }
  
- #ifdef VMS
- /* Defined in VMS header files. */
- #if defined (__ALPHA)
- #define fork() (decc$$alloc_vfork_blocks() >= 0 ? \
- 		LIB$GET_CURRENT_INVO_CONTEXT (decc$$get_vfork_jmpbuf()) : -1)
- #elif defined (__IA64)
- #define fork() (decc$$alloc_vfork_blocks() >= 0 ? \
- 		LIB$I64_GET_CURR_INVO_CONTEXT(decc$$get_vfork_jmpbuf()) : -1)
- #endif
- #endif
- 
  #if defined (sun) && defined (__SVR4)
  /* Using fork on Solaris will duplicate all the threads. fork1, which
     duplicates only the active thread, must be used instead, or spawning
--- 1555,1560 ----
*************** __gnat_portable_spawn (char *args[])
*** 1497,1503 ****
    int pid ATTRIBUTE_UNUSED;
  
  #if defined (MSDOS) || defined (_WIN32)
!   status = spawnvp (P_WAIT, args[0],(const char* const*)args);
    if (status < 0)
      return -1;
    else
--- 1570,1588 ----
    int pid ATTRIBUTE_UNUSED;
  
  #if defined (MSDOS) || defined (_WIN32)
!   /* args[0] must be quotes as it could contain a full pathname with spaces */
!   char *args_0 = args[0];
!   args[0] = (char *)xmalloc (strlen (args_0) + 3);
!   strcpy (args[0], "\"");
!   strcat (args[0], args_0);
!   strcat (args[0], "\"");
! 
!   status = spawnvp (P_WAIT, args_0, (char* const*)args);
! 
!   /* restore previous value */
!   free (args[0]);
!   args[0] = (char *)args_0;
! 
    if (status < 0)
      return -1;
    else
*************** __gnat_portable_spawn (char *args[])
*** 1520,1526 ****
    if (pid == 0)
      {
        /* The child. */
!       if (execv (args[0], args) != 0)
  #if defined (VMS)
  	return -1; /* execv is in parent context on VMS.  */
  #else
--- 1605,1611 ----
    if (pid == 0)
      {
        /* The child. */
!       if (execv (args[0], MAYBE_TO_PTR32 (args)) != 0)
  #if defined (VMS)
  	return -1; /* execv is in parent context on VMS.  */
  #else
*************** __gnat_portable_spawn (char *args[])
*** 1541,1546 ****
--- 1626,1659 ----
    return 0;
  }
  
+ /* Create a copy of the given file descriptor.
+    Return -1 if an error occurred.  */
+ 
+ int
+ __gnat_dup (int oldfd)
+ {
+ #if defined (__vxworks)
+    /* Not supported on VxWorks.  */
+    return -1;
+ #else
+    return dup (oldfd);
+ #endif
+ }
+ 
+ /* Make newfd be the copy of oldfd, closing newfd first if necessary.
+    Return -1 if an error occured.  */
+ 
+ int
+ __gnat_dup2 (int oldfd, int newfd)
+ {
+ #if defined (__vxworks)
+   /* Not supported on VxWorks.  */
+   return -1;
+ #else
+   return dup2 (oldfd, newfd);
+ #endif
+ }
+ 
  /* WIN32 code to implement a wait call that wait for any child process.  */
  
  #ifdef _WIN32
*************** win32_no_block_spawn (char *command, cha
*** 1678,1685 ****
        k++;
      }
  
!   result = CreateProcess (NULL, (char *) full_command, &SA, NULL, TRUE,
!                           NORMAL_PRIORITY_CLASS, NULL, NULL, &SI, &PI);
  
    free (full_command);
  
--- 1791,1799 ----
        k++;
      }
  
!   result = CreateProcess
! 	     (NULL, (char *) full_command, &SA, NULL, TRUE,
!               GetPriorityClass (GetCurrentProcess()), NULL, NULL, &SI, &PI);
  
    free (full_command);
  
*************** __gnat_portable_no_block_spawn (char *ar
*** 1772,1778 ****
    if (pid == 0)
      {
        /* The child.  */
!       if (execv (args[0], args) != 0)
  #if defined (VMS)
  	return -1; /* execv is in parent context on VMS. */
  #else
--- 1886,1892 ----
    if (pid == 0)
      {
        /* The child.  */
!       if (execv (args[0], MAYBE_TO_PTR32 (args)) != 0)
  #if defined (VMS)
  	return -1; /* execv is in parent context on VMS. */
  #else
*************** char *
*** 1840,1846 ****
  __gnat_locate_regular_file (char *file_name, char *path_val)
  {
    char *ptr;
!   int absolute = __gnat_is_absolute_path (file_name);
  
    /* Handle absolute pathnames.  */
    if (absolute)
--- 1954,1960 ----
  __gnat_locate_regular_file (char *file_name, char *path_val)
  {
    char *ptr;
!   int absolute = __gnat_is_absolute_path (file_name, strlen (file_name));
  
    /* Handle absolute pathnames.  */
    if (absolute)
*************** _flush_cache()
*** 2375,2384 ****
  #if defined (CROSS_COMPILE)  \
    || (! (defined (sparc) && defined (sun) && defined (__SVR4)) \
        && ! (defined (linux) && defined (i386)) \
!       && ! defined (hpux) \
        && ! defined (_AIX) \
        && ! (defined (__alpha__)  && defined (__osf__)) \
!       && ! defined (__MINGW32__))
  
  /* Dummy function to satisfy g-trasym.o.  Currently Solaris sparc, HP/UX,
     GNU/Linux x86, Tru64 & Windows provide a non-dummy version of this
--- 2489,2500 ----
  #if defined (CROSS_COMPILE)  \
    || (! (defined (sparc) && defined (sun) && defined (__SVR4)) \
        && ! (defined (linux) && defined (i386)) \
!       && ! defined (__FreeBSD__) \
!       && ! defined (__hpux__) \
        && ! defined (_AIX) \
        && ! (defined (__alpha__)  && defined (__osf__)) \
!       && ! defined (__MINGW32__) \
!       && ! (defined (__mips) && defined (__sgi)))
  
  /* Dummy function to satisfy g-trasym.o.  Currently Solaris sparc, HP/UX,
     GNU/Linux x86, Tru64 & Windows provide a non-dummy version of this
*************** int __gnat_argument_needs_quote = 0;
*** 2402,2409 ****
  
  /* This option is used to enable/disable object files handling from the
     binder file by the GNAT Project module. For example, this is disabled on
!    Windows as it is already done by the mdll module. */
! #if defined (_WIN32)
  int __gnat_prj_add_obj_files = 0;
  #else
  int __gnat_prj_add_obj_files = 1;
--- 2518,2528 ----
  
  /* This option is used to enable/disable object files handling from the
     binder file by the GNAT Project module. For example, this is disabled on
!    Windows (prior to GCC 3.4) as it is already done by the mdll module.
!    Stating with GCC 3.4 the shared libraries are not based on mdll
!    anymore as it uses the GCC's -shared option  */
! #if defined (_WIN32) \
!     && ((__GNUC__ < 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ < 4)))
  int __gnat_prj_add_obj_files = 0;
  #else
  int __gnat_prj_add_obj_files = 1;
*************** get_gcc_version (void)
*** 2495,2497 ****
--- 2614,2636 ----
    return 3;
  }
  
+ int
+ __gnat_set_close_on_exec (int fd, int close_on_exec_p)
+ {
+ #if defined (F_GETFD) && defined (FD_CLOEXEC) && ! defined (__vxworks)
+   int flags = fcntl (fd, F_GETFD, 0);
+   if (flags < 0)
+     return flags;
+   if (close_on_exec_p)
+     flags |= FD_CLOEXEC;
+   else
+     flags &= ~FD_CLOEXEC;
+   return fcntl (fd, F_SETFD, flags | FD_CLOEXEC);
+ #else
+   return -1;
+   /* For the Windows case, we should use SetHandleInformation to remove
+      the HANDLE_INHERIT property from fd. This is not implemented yet,
+      but for our purposes (support of GNAT.Expect) this does not matter,
+      as by default handles are *not* inherited. */
+ #endif
+ }
diff -Nrcpad gcc-3.4.3/gcc/ada/adaint.h gcc-4.0.0/gcc/ada/adaint.h
*** gcc-3.4.3/gcc/ada/adaint.h	Wed Dec  3 11:47:52 2003
--- gcc-4.0.0/gcc/ada/adaint.h	Thu Feb 10 13:51:58 2005
***************
*** 6,12 ****
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 1992-2003 Free Software Foundation, Inc.          *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
--- 6,12 ----
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 1992-2005 Free Software Foundation, Inc.          *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
*************** extern int    __gnat_stat			   (char *,
*** 63,86 ****
  extern int    __gnat_open_read                     (char *, int);
  extern int    __gnat_open_rw                       (char *, int);
  extern int    __gnat_open_create                   (char *, int);
  extern int    __gnat_open_append                   (char *, int);
  extern long   __gnat_file_length                   (int);
  extern void   __gnat_tmp_name			   (char *);
  extern char  *__gnat_readdir                       (DIR *, char *);
  extern int    __gnat_readdir_is_thread_safe        (void);
! extern time_t __gnat_file_time_name                (char *);
! extern time_t __gnat_file_time_fd                  (int);
  extern void   __gnat_set_file_time_name		   (char *, time_t);
  extern void   __gnat_get_env_value_ptr             (char *, int *,
  						    char **);
  extern int    __gnat_file_exists		   (char *);
  extern int    __gnat_is_regular_file               (char *);
! extern int    __gnat_is_absolute_path              (char *);
  extern int    __gnat_is_directory		   (char *);
  extern int    __gnat_is_writable_file		   (char *);
  extern int    __gnat_is_readable_file		   (char *name);
  extern void   __gnat_set_readonly                  (char *name);
  extern void   __gnat_set_writable                  (char *name);
  extern int    __gnat_is_symbolic_link		   (char *name);
  extern int    __gnat_portable_spawn                (char *[]);
  extern int    __gnat_portable_no_block_spawn       (char *[]);
--- 63,94 ----
  extern int    __gnat_open_read                     (char *, int);
  extern int    __gnat_open_rw                       (char *, int);
  extern int    __gnat_open_create                   (char *, int);
+ extern int    __gnat_create_output_file            (char *);
  extern int    __gnat_open_append                   (char *, int);
  extern long   __gnat_file_length                   (int);
+ extern long   __gnat_named_file_length             (char *);
  extern void   __gnat_tmp_name			   (char *);
  extern char  *__gnat_readdir                       (DIR *, char *);
  extern int    __gnat_readdir_is_thread_safe        (void);
! 
! extern OS_Time __gnat_file_time_name                (char *);
! extern OS_Time __gnat_file_time_fd                  (int);
! /* return -1 in case of error */
! 
  extern void   __gnat_set_file_time_name		   (char *, time_t);
  extern void   __gnat_get_env_value_ptr             (char *, int *,
  						    char **);
+ extern int    __gnat_dup			   (int);
+ extern int    __gnat_dup2			   (int, int);
  extern int    __gnat_file_exists		   (char *);
  extern int    __gnat_is_regular_file               (char *);
! extern int    __gnat_is_absolute_path              (char *,int);
  extern int    __gnat_is_directory		   (char *);
  extern int    __gnat_is_writable_file		   (char *);
  extern int    __gnat_is_readable_file		   (char *name);
  extern void   __gnat_set_readonly                  (char *name);
  extern void   __gnat_set_writable                  (char *name);
+ extern void   __gnat_set_executable                (char *name);
  extern int    __gnat_is_symbolic_link		   (char *name);
  extern int    __gnat_portable_spawn                (char *[]);
  extern int    __gnat_portable_no_block_spawn       (char *[]);
*************** extern void   __gnat_set_binary_mode		  
*** 141,146 ****
--- 149,157 ----
  extern void   __gnat_set_text_mode		   (int);
  extern char  *__gnat_ttyname			   (int);
  extern int    __gnat_lseek			   (int, long, int);
+ extern int    __gnat_set_close_on_exec		   (int, int);
+ extern int    __gnat_dup			   (int);
+ extern int    __gnat_dup2			   (int, int);
  
  #ifdef __MINGW32__
  extern void   __gnat_plist_init                    (void);
diff -Nrcpad gcc-3.4.3/gcc/ada/ali-util.adb gcc-4.0.0/gcc/ada/ali-util.adb
*** gcc-3.4.3/gcc/ada/ali-util.adb	Tue Oct 21 13:41:58 2003
--- gcc-4.0.0/gcc/ada/ali-util.adb	Thu Feb 10 13:50:31 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Namet;   use Namet;
*** 31,42 ****
  with Opt;     use Opt;
  with Output;  use Output;
  with Osint;   use Osint;
! 
! with System.CRC32;
! with System.Memory;
  
  package body ALI.Util is
  
     type Header_Num is range 0 .. 1_000;
  
     function Hash (F : File_Name_Type) return Header_Num;
--- 31,72 ----
  with Opt;     use Opt;
  with Output;  use Output;
  with Osint;   use Osint;
! with Scans;   use Scans;
! with Scng;
! with Sinput.C;
! with Snames;  use Snames;
! with Styleg;
  
  package body ALI.Util is
  
+    --  Empty procedures needed to instantiate Scng. Error procedures are
+    --  empty, because we don't want to report any errors when computing
+    --  a source checksum.
+ 
+    procedure Post_Scan;
+ 
+    procedure Error_Msg (Msg : String; Flag_Location : Source_Ptr);
+ 
+    procedure Error_Msg_S (Msg : String);
+ 
+    procedure Error_Msg_SC (Msg : String);
+ 
+    procedure Error_Msg_SP (Msg : String);
+ 
+    procedure Obsolescent_Check (S : Source_Ptr);
+ 
+    --  Instantiation of Styleg, needed to instantiate Scng
+ 
+    package Style is new Styleg
+      (Error_Msg, Error_Msg_S, Error_Msg_SC, Error_Msg_SP);
+ 
+    --  A Scanner is needed to get checksum of a source (procedure
+    --  Get_File_Checksum).
+ 
+    package Scanner is new Scng
+      (Post_Scan, Error_Msg, Error_Msg_S, Error_Msg_SC, Error_Msg_SP,
+       Obsolescent_Check, Style);
+ 
     type Header_Num is range 0 .. 1_000;
  
     function Hash (F : File_Name_Type) return Header_Num;
*************** package body ALI.Util is
*** 50,82 ****
       Hash       => Hash,
       Equal      => "=");
  
-    -----------------------
-    -- Local Subprograms --
-    -----------------------
- 
-    procedure Accumulate_Checksum (C : Character; Csum : in out Word);
-    pragma Inline (Accumulate_Checksum);
-    --  This routine accumulates the checksum given character C. During the
-    --  scanning of a source file, this routine is called with every character
-    --  in the source, excluding blanks, and all control characters (except
-    --  that ESC is included in the checksum). Upper case letters not in string
-    --  literals are folded by the caller. See Sinput spec for the documentation
-    --  of the checksum algorithm. Note: checksum values are only used if we
-    --  generate code, so it is not necessary to worry about making the right
-    --  sequence of calls in any error situation.
- 
-    procedure Initialize_Checksum (Csum : out Word);
-    --  Sets initial value of Csum before any calls to Accumulate_Checksum
- 
-    -------------------------
-    -- Accumulate_Checksum --
-    -------------------------
- 
-    procedure Accumulate_Checksum (C : Character; Csum : in out Word) is
-    begin
-       System.CRC32.Update (System.CRC32.CRC32 (Csum), C);
-    end Accumulate_Checksum;
- 
     ---------------------
     -- Checksums_Match --
     ---------------------
--- 80,85 ----
*************** package body ALI.Util is
*** 86,267 ****
        return Checksum1 = Checksum2 and then Checksum1 /= Checksum_Error;
     end Checksums_Match;
  
!    -----------------------
!    -- Get_File_Checksum --
!    -----------------------
! 
!    function Get_File_Checksum (Fname : Name_Id) return Word is
!       Src  : Source_Buffer_Ptr;
!       Hi   : Source_Ptr;
!       Csum : Word;
!       Ptr  : Source_Ptr;
! 
!       Bad : exception;
!       --  Raised if file not found, or file format error
! 
!       use ASCII;
!       --  Make control characters visible
  
     begin
!       Read_Source_File (Fname, 0, Hi, Src);
! 
!       --  If we cannot find the file, then return an impossible checksum,
!       --  impossible becaues checksums have the high order bit zero, so
!       --  that checksums do not match.
! 
!       if Src = null then
!          raise Bad;
!       end if;
! 
!       Initialize_Checksum (Csum);
!       Ptr := 0;
! 
!       loop
!          case Src (Ptr) is
! 
!             --  Spaces and formatting information are ignored in checksum
! 
!             when ' ' | CR | LF | VT | FF | HT =>
!                Ptr := Ptr + 1;
! 
!             --  EOF is ignored unless it is the last character
! 
!             when EOF =>
!                if Ptr = Hi then
!                   System.Memory.Free (Src.all'Address);
!                   return Csum;
!                else
!                   Ptr := Ptr + 1;
!                end if;
! 
!             --  Non-blank characters that are included in the checksum
! 
!             when '#' | '&' | '*' | ':' | '(' | ',' | '.' | '=' | '>' |
!                  '<' | ')' | '/' | ';' | '|' | '!' | '+' | '_' |
!                  '0' .. '9' | 'a' .. 'z'
!             =>
!                Accumulate_Checksum (Src (Ptr), Csum);
!                Ptr := Ptr + 1;
! 
!             --  Upper case letters, fold to lower case
! 
!             when 'A' .. 'Z' =>
!                Accumulate_Checksum
!                  (Character'Val (Character'Pos (Src (Ptr)) + 32), Csum);
!                Ptr := Ptr + 1;
! 
!             --  Left bracket, really should do wide character thing here,
!             --  but for now, don't bother.
! 
!             when '[' =>
!                raise Bad;
! 
!             --  Minus, could be comment
! 
!             when '-' =>
!                if Src (Ptr + 1) = '-' then
!                   Ptr := Ptr + 2;
! 
!                   while Src (Ptr) >= ' ' or else Src (Ptr) = HT loop
!                      Ptr := Ptr + 1;
!                   end loop;
! 
!                else
!                   Accumulate_Checksum ('-', Csum);
!                   Ptr := Ptr + 1;
!                end if;
! 
!             --  String delimited by double quote
! 
!             when '"' =>
!                Accumulate_Checksum ('"', Csum);
! 
!                loop
!                   Ptr := Ptr + 1;
!                   exit when Src (Ptr) = '"';
! 
!                   if Src (Ptr) < ' ' then
!                      raise Bad;
!                   end if;
! 
!                   Accumulate_Checksum (Src (Ptr), Csum);
!                end loop;
! 
!                Accumulate_Checksum ('"', Csum);
!                Ptr := Ptr + 1;
! 
!             --  String delimited by percent
! 
!             when '%' =>
!                Accumulate_Checksum ('%', Csum);
! 
!                loop
!                   Ptr := Ptr + 1;
!                   exit when Src (Ptr) = '%';
  
!                   if Src (Ptr) < ' ' then
!                      raise Bad;
!                   end if;
  
!                   Accumulate_Checksum (Src (Ptr), Csum);
!                end loop;
  
!                Accumulate_Checksum ('%', Csum);
!                Ptr := Ptr + 1;
  
!             --  Quote, could be character constant
  
!             when ''' =>
!                Accumulate_Checksum (''', Csum);
  
!                if Src (Ptr + 2) = ''' then
!                   Accumulate_Checksum (Src (Ptr + 1), Csum);
!                   Accumulate_Checksum (''', Csum);
!                   Ptr := Ptr + 3;
  
!                --  Otherwise assume attribute char. We should deal with wide
!                --  character cases here, but that's hard, so forget it.
  
!                else
!                   Ptr := Ptr + 1;
!                end if;
  
!             --  Upper half character, more to be done here, we should worry
!             --  about folding Latin-1, folding other character sets, and
!             --  dealing with the nasty case of upper half wide encoding.
  
!             when Upper_Half_Character =>
!                Accumulate_Checksum (Src (Ptr), Csum);
!                Ptr := Ptr + 1;
  
!             --  Escape character, we should do the wide character thing here,
!             --  but for now, do not bother.
  
!             when ESC =>
!                raise Bad;
  
!             --  Invalid control characters
  
!             when NUL | SOH | STX | ETX | EOT | ENQ | ACK | BEL | BS  | SO  |
!                  SI  | DLE | DC1 | DC2 | DC3 | DC4 | NAK | SYN | ETB | CAN |
!                  EM  | FS  | GS  | RS  | US  | DEL
!             =>
!                raise Bad;
  
!             --  Invalid graphic characters
  
!             when '$' | '?' | '@' | '`' | '\' |
!                  '^' | '~' | ']' | '{' | '}'
!             =>
!                raise Bad;
  
!          end case;
        end loop;
  
!    exception
!       when Bad =>
!          System.Memory.Free (Src.all'Address);
!          return Checksum_Error;
     end Get_File_Checksum;
  
     ----------
--- 89,177 ----
        return Checksum1 = Checksum2 and then Checksum1 /= Checksum_Error;
     end Checksums_Match;
  
!    ---------------
!    -- Error_Msg --
!    ---------------
  
+    procedure Error_Msg (Msg : String; Flag_Location : Source_Ptr) is
+       pragma Warnings (Off, Msg);
+       pragma Warnings (Off, Flag_Location);
     begin
!       null;
!    end Error_Msg;
  
!    -----------------
!    -- Error_Msg_S --
!    -----------------
  
!    procedure Error_Msg_S (Msg : String) is
!       pragma Warnings (Off, Msg);
!    begin
!       null;
!    end Error_Msg_S;
  
!    ------------------
!    -- Error_Msg_SC --
!    ------------------
  
!    procedure Error_Msg_SC (Msg : String) is
!       pragma Warnings (Off, Msg);
!    begin
!       null;
!    end Error_Msg_SC;
  
!    ------------------
!    -- Error_Msg_SP --
!    ------------------
  
!    procedure Error_Msg_SP (Msg : String) is
!       pragma Warnings (Off, Msg);
!    begin
!       null;
!    end Error_Msg_SP;
  
!    -----------------------
!    -- Get_File_Checksum --
!    -----------------------
  
!    function Get_File_Checksum (Fname : Name_Id) return Word is
!       Full_Name    : Name_Id;
!       Source_Index : Source_File_Index;
!    begin
!       Full_Name := Find_File (Fname, Osint.Source);
  
!       --  If we cannot find the file, then return an impossible checksum,
!       --  impossible becaues checksums have the high order bit zero, so
!       --  that checksums do not match.
  
!       if Full_Name = No_File then
!          return Checksum_Error;
!       end if;
  
!       Source_Index := Sinput.C.Load_File (Get_Name_String (Full_Name));
  
!       if Source_Index = No_Source_File then
!          return Checksum_Error;
!       end if;
  
!       Scanner.Initialize_Scanner (Types.No_Unit, Source_Index);
  
!       --  Make sure that the project language reserved words are not
!       --  recognized as reserved words, but as identifiers. The byte info for
!       --  those names have been set if we are in gnatmake.
  
!       Set_Name_Table_Byte (Name_Project,  0);
!       Set_Name_Table_Byte (Name_Extends,  0);
!       Set_Name_Table_Byte (Name_External, 0);
  
!       --  Scan the complete file to compute its checksum
  
!       loop
!          Scanner.Scan;
!          exit when Token = Tok_EOF;
        end loop;
  
!       return Scans.Checksum;
     end Get_File_Checksum;
  
     ----------
*************** package body ALI.Util is
*** 293,306 ****
        Interfaces.Reset;
     end Initialize_ALI_Source;
  
!    -------------------------
!    -- Initialize_Checksum --
!    -------------------------
  
!    procedure Initialize_Checksum (Csum : out Word) is
     begin
!       System.CRC32.Initialize (System.CRC32.CRC32 (Csum));
!    end Initialize_Checksum;
  
     --------------
     -- Read_ALI --
--- 203,226 ----
        Interfaces.Reset;
     end Initialize_ALI_Source;
  
!    -----------------------
!    -- Obsolescent_Check --
!    -----------------------
  
!    procedure Obsolescent_Check (S : Source_Ptr) is
!       pragma Warnings (Off, S);
     begin
!       null;
!    end Obsolescent_Check;
! 
!    ---------------
!    -- Post_Scan --
!    ---------------
! 
!    procedure Post_Scan is
!    begin
!       null;
!    end Post_Scan;
  
     --------------
     -- Read_ALI --
*************** package body ALI.Util is
*** 371,378 ****
                 --  set the Interface flag in the Withs table, so that its
                 --  dependant are not considered for elaboration order.
  
!                if ALIs.Table (Idread).Interface then
!                   Withs.Table (W).Interface := True;
                    Interface_Library_Unit := True;
  
                    --  Set the entry in the Interfaces hash table, so that other
--- 291,298 ----
                 --  set the Interface flag in the Withs table, so that its
                 --  dependant are not considered for elaboration order.
  
!                if ALIs.Table (Idread).SAL_Interface then
!                   Withs.Table (W).SAL_Interface  := True;
                    Interface_Library_Unit := True;
  
                    --  Set the entry in the Interfaces hash table, so that other
*************** package body ALI.Util is
*** 393,399 ****
              --  set the flag in the entry of the Withs table.
  
              elsif Interface_Library_Unit and then Interfaces.Get (Afile) then
!                Withs.Table (W).Interface := True;
              end if;
           end loop;
        end loop;
--- 313,319 ----
              --  set the flag in the entry of the Withs table.
  
              elsif Interface_Library_Unit and then Interfaces.Get (Afile) then
!                Withs.Table (W).SAL_Interface := True;
              end if;
           end loop;
        end loop;
diff -Nrcpad gcc-3.4.3/gcc/ada/ali.adb gcc-4.0.0/gcc/ada/ali.adb
*** gcc-3.4.3/gcc/ada/ali.adb	Mon Jan  5 15:20:43 2004
--- gcc-4.0.0/gcc/ada/ali.adb	Thu Feb 10 13:50:28 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 24,42 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Butil;    use Butil;
! with Debug;    use Debug;
! with Fname;    use Fname;
! with Namet;    use Namet;
! with Opt;      use Opt;
! with Osint;    use Osint;
! with Output;   use Output;
  
  package body ALI is
  
     use ASCII;
     --  Make control characters visible
  
     --------------------
     -- Initialize_ALI --
     --------------------
--- 24,61 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Butil;  use Butil;
! with Debug;  use Debug;
! with Fname;  use Fname;
! with Namet;  use Namet;
! with Opt;    use Opt;
! with Osint;  use Osint;
! with Output; use Output;
  
  package body ALI is
  
     use ASCII;
     --  Make control characters visible
  
+    --  The following variable records which characters currently are
+    --  used as line type markers in the ALI file. This is used in
+    --  Scan_ALI to detect (or skip) invalid lines.
+ 
+    Known_ALI_Lines : constant array (Character range 'A' .. 'Z') of Boolean :=
+      ('V'    => True,   -- version
+       'M'    => True,   -- main program
+       'A'    => True,   -- argument
+       'P'    => True,   -- program
+       'R'    => True,   -- restriction
+       'I'    => True,   -- interrupt
+       'U'    => True,   -- unit
+       'W'    => True,   -- with
+       'L'    => True,   -- linker option
+       'E'    => True,   -- external
+       'D'    => True,   -- dependency
+       'X'    => True,   -- xref
+       others => False);
+ 
     --------------------
     -- Initialize_ALI --
     --------------------
*************** package body ALI is
*** 65,70 ****
--- 84,90 ----
        --  Initialize all tables
  
        ALIs.Init;
+       No_Deps.Init;
        Units.Init;
        Withs.Init;
        Sdep.Init;
*************** package body ALI is
*** 99,112 ****
     --------------
  
     function Scan_ALI
!      (F            : File_Name_Type;
!       T            : Text_Buffer_Ptr;
!       Ignore_ED    : Boolean;
!       Err          : Boolean;
!       Read_Xref    : Boolean := False;
!       Read_Lines   : String := "";
!       Ignore_Lines : String := "X")
!       return         ALI_Id
     is
        P         : Text_Ptr := T'First;
        Line      : Logical_Line_Number := 1;
--- 119,132 ----
     --------------
  
     function Scan_ALI
!      (F             : File_Name_Type;
!       T             : Text_Buffer_Ptr;
!       Ignore_ED     : Boolean;
!       Err           : Boolean;
!       Read_Xref     : Boolean := False;
!       Read_Lines    : String  := "";
!       Ignore_Lines  : String  := "X";
!       Ignore_Errors : Boolean := False) return ALI_Id
     is
        P         : Text_Ptr := T'First;
        Line      : Logical_Line_Number := 1;
*************** package body ALI is
*** 120,125 ****
--- 140,152 ----
        --  be ignored by Scan_ALI and skipped, and False if the lines
        --  are to be read and processed.
  
+       Restrictions_Initial : Rident.Restrictions_Info;
+       pragma Warnings (Off, Restrictions_Initial);
+       --  This variable, which should really be a constant (but that's not
+       --  allowed by the language) is used only for initialization, and the
+       --  reason we are declaring it is to get the default initialization
+       --  set for the object.
+ 
        Bad_ALI_Format : exception;
        --  Exception raised by Fatal_Error if Err is True
  
*************** package body ALI is
*** 135,144 ****
--- 162,187 ----
        procedure Checkc (C : Character);
        --  Check next character is C. If so bump past it, if not fatal error
  
+       procedure Check_Unknown_Line;
+       --  If Ignore_Errors mode, then checks C to make sure that it is not
+       --  an unknown ALI line type characters, and if so, skips lines
+       --  until the first character of the line is one of these characters,
+       --  at which point it does a Getc to put that character in C. The
+       --  call has no effect if C is already an appropriate character.
+       --  If not in Ignore_Errors mode, a fatal error is signalled if the
+       --  line is unknown. Note that if C is an EOL on entry, the line is
+       --  skipped (it is assumed that blank lines are never significant).
+       --  If C is EOF on entry, the call has no effect (it is assumed that
+       --  the caller will properly handle this case).
+ 
        procedure Fatal_Error;
        --  Generate fatal error message for badly formatted ALI file if
        --  Err is false, or raise Bad_ALI_Format if Err is True.
  
+       procedure Fatal_Error_Ignore;
+       pragma Inline (Fatal_Error_Ignore);
+       --  In Ignore_Errors mode, has no effect, otherwise same as Fatal_Error
+ 
        function Getc return Character;
        --  Get next character, bumping P past the character obtained
  
*************** package body ALI is
*** 157,163 ****
        --  quote.
  
        function Get_Nat return Nat;
!       --  Skip blanks, then scan out an unsigned integer value in Nat range.
  
        function Get_Stamp return Time_Stamp_Type;
        --  Skip blanks, then scan out a time stamp
--- 200,206 ----
        --  quote.
  
        function Get_Nat return Nat;
!       --  Skip blanks, then scan out an unsigned integer value in Nat range
  
        function Get_Stamp return Time_Stamp_Type;
        --  Skip blanks, then scan out a time stamp
*************** package body ALI is
*** 170,176 ****
        --  at end of line). Also skips past any following blank lines.
  
        procedure Skip_Line;
!       --  Skip rest of current line and any following blank lines.
  
        procedure Skip_Space;
        --  Skip past white space (blanks or horizontal tab)
--- 213,219 ----
        --  at end of line). Also skips past any following blank lines.
  
        procedure Skip_Line;
!       --  Skip rest of current line and any following blank lines
  
        procedure Skip_Space;
        --  Skip past white space (blanks or horizontal tab)
*************** package body ALI is
*** 204,210 ****
        procedure Check_At_End_Of_Field is
        begin
           if not At_End_Of_Field then
!             Fatal_Error;
           end if;
        end Check_At_End_Of_Field;
  
--- 247,259 ----
        procedure Check_At_End_Of_Field is
        begin
           if not At_End_Of_Field then
!             if Ignore_Errors then
!                while Nextc > ' ' loop
!                   P := P + 1;
!                end loop;
!             else
!                Fatal_Error;
!             end if;
           end if;
        end Check_At_End_Of_Field;
  
*************** package body ALI is
*** 216,226 ****
--- 265,303 ----
        begin
           if Nextc = C then
              P := P + 1;
+          elsif Ignore_Errors then
+             P := P + 1;
           else
              Fatal_Error;
           end if;
        end Checkc;
  
+       ------------------------
+       -- Check_Unknown_Line --
+       ------------------------
+ 
+       procedure Check_Unknown_Line is
+       begin
+          while C not in 'A' .. 'Z'
+            or else not Known_ALI_Lines (C)
+          loop
+             if C = CR or else C = LF then
+                Skip_Line;
+                C := Nextc;
+ 
+             elsif C = EOF then
+                return;
+ 
+             elsif Ignore_Errors then
+                Skip_Line;
+                C := Getc;
+ 
+             else
+                Fatal_Error;
+             end if;
+          end loop;
+       end Check_Unknown_Line;
+ 
        -----------------
        -- Fatal_Error --
        -----------------
*************** package body ALI is
*** 317,334 ****
           Exit_Program (E_Fatal);
        end Fatal_Error;
  
        --------------
        -- Get_Name --
        --------------
  
!       function Get_Name (Lower : Boolean := False;
!                          Ignore_Spaces : Boolean := False) return Name_Id is
        begin
           Name_Len := 0;
           Skip_Space;
  
           if At_Eol then
!             Fatal_Error;
           end if;
  
           loop
--- 394,428 ----
           Exit_Program (E_Fatal);
        end Fatal_Error;
  
+       ------------------------
+       -- Fatal_Error_Ignore --
+       ------------------------
+ 
+       procedure Fatal_Error_Ignore is
+       begin
+          if not Ignore_Errors then
+             Fatal_Error;
+          end if;
+       end Fatal_Error_Ignore;
+ 
        --------------
        -- Get_Name --
        --------------
  
!       function Get_Name
!         (Lower         : Boolean := False;
!          Ignore_Spaces : Boolean := False) return Name_Id
!       is
        begin
           Name_Len := 0;
           Skip_Space;
  
           if At_Eol then
!             if Ignore_Errors then
!                return Error_Name;
!             else
!                Fatal_Error;
!             end if;
           end if;
  
           loop
*************** package body ALI is
*** 371,377 ****
           Skip_Space;
  
           V := 0;
- 
           loop
              V := V * 10 + (Character'Pos (Getc) - Character'Pos ('0'));
              exit when At_End_Of_Field;
--- 465,470 ----
*************** package body ALI is
*** 393,399 ****
           Skip_Space;
  
           if At_Eol then
!             Fatal_Error;
           end if;
  
           --  Following reads old style time stamp missing first two digits
--- 486,496 ----
           Skip_Space;
  
           if At_Eol then
!             if Ignore_Errors then
!                return Dummy_Time_Stamp;
!             else
!                Fatal_Error;
!             end if;
           end if;
  
           --  Following reads old style time stamp missing first two digits
*************** package body ALI is
*** 447,453 ****
        begin
           Skip_Space;
  
!          if not At_Eol then Fatal_Error; end if;
  
           --  Loop to skip past blank lines (first time through skips this EOL)
  
--- 544,558 ----
        begin
           Skip_Space;
  
!          if not At_Eol then
!             if Ignore_Errors then
!                while not At_Eol loop
!                   P := P + 1;
!                end loop;
!             else
!                Fatal_Error;
!             end if;
!          end if;
  
           --  Loop to skip past blank lines (first time through skips this EOL)
  
*************** package body ALI is
*** 498,503 ****
--- 603,610 ----
     --  Start of processing for Scan_ALI
  
     begin
+       First_Sdep_Entry := Sdep.Last + 1;
+ 
        --  Acquire lines to be ignored
  
        if Read_Xref then
*************** package body ALI is
*** 546,552 ****
          Normalize_Scalars          => False,
          Ofile_Full_Name            => Full_Object_File_Name,
          Queuing_Policy             => ' ',
!         Restrictions               => (others => ' '),
          Sfile                      => No_Name,
          Task_Dispatching_Policy    => ' ',
          Time_Slice_Value           => -1,
--- 653,660 ----
          Normalize_Scalars          => False,
          Ofile_Full_Name            => Full_Object_File_Name,
          Queuing_Policy             => ' ',
!         Restrictions               => Restrictions_Initial,
!         SAL_Interface              => False,
          Sfile                      => No_Name,
          Task_Dispatching_Policy    => ' ',
          Time_Slice_Value           => -1,
*************** package body ALI is
*** 554,560 ****
          Unit_Exception_Table       => False,
          Ver                        => (others => ' '),
          Ver_Len                    => 0,
-         Interface                  => False,
          Zero_Cost_Exceptions       => False);
  
        --  Now we acquire the input lines from the ALI file. Note that the
--- 662,667 ----
*************** package body ALI is
*** 562,571 ****
--- 669,684 ----
        --  C is set to contain the first character of the following line.
  
        C := Getc;
+       Check_Unknown_Line;
  
        --  Acquire library version
  
        if C /= 'V' then
+ 
+          --  The V line missing really indicates trouble, most likely it
+          --  means we don't have an ALI file at all, so here we give a
+          --  fatal error even if we are in Ignore_Errors mode.
+ 
           Fatal_Error;
  
        elsif Ignore ('V') then
*************** package body ALI is
*** 587,592 ****
--- 700,706 ----
        end if;
  
        C := Getc;
+       Check_Unknown_Line;
  
        --  Acquire main program line if present
  
*************** package body ALI is
*** 641,647 ****
  
        First_Arg := Args.Last + 1;
  
!       Arg_Loop : while C = 'A' loop
           if Ignore ('A') then
              Skip_Line;
  
--- 755,764 ----
  
        First_Arg := Args.Last + 1;
  
!       A_Loop : loop
!          Check_Unknown_Line;
!          exit A_Loop when C /= 'A';
! 
           if Ignore ('A') then
              Skip_Line;
  
*************** package body ALI is
*** 661,676 ****
           end if;
  
           C := Getc;
!       end loop Arg_Loop;
  
        --  Acquire P line
  
!       if C /= 'P' then
!          Fatal_Error;
  
!       elsif Ignore ('P') then
           Skip_Line;
  
        else
           NS_Found := False;
  
--- 778,807 ----
           end if;
  
           C := Getc;
!       end loop A_Loop;
  
        --  Acquire P line
  
!       Check_Unknown_Line;
  
!       while C /= 'P' loop
!          if Ignore_Errors then
!             if C = EOF then
!                Fatal_Error;
!             else
!                Skip_Line;
!                C := Nextc;
!             end if;
!          else
!             Fatal_Error;
!          end if;
!       end loop;
! 
!       if Ignore ('P') then
           Skip_Line;
  
+       --  Process P line
+ 
        else
           NS_Found := False;
  
*************** package body ALI is
*** 685,690 ****
--- 816,827 ----
                 Checkc ('E');
                 ALIs.Table (Id).Compile_Errors := True;
  
+             --  Processing for DB
+ 
+             elsif C = 'D' then
+                Checkc ('B');
+                Detect_Blocking := True;
+ 
              --  Processing for FD/FG/FI
  
              elsif C = 'F' then
*************** package body ALI is
*** 724,730 ****
                 --  Invalid switch starting with N
  
                 else
!                   Fatal_Error;
                 end if;
  
              --  Processing for Qx
--- 861,867 ----
                 --  Invalid switch starting with N
  
                 else
!                   Fatal_Error_Ignore;
                 end if;
  
              --  Processing for Qx
*************** package body ALI is
*** 733,739 ****
                 Queuing_Policy_Specified := Getc;
                 ALIs.Table (Id).Queuing_Policy := Queuing_Policy_Specified;
  
!             --  Processing fir flags starting with S
  
              elsif C = 'S' then
                 C := Getc;
--- 870,876 ----
                 Queuing_Policy_Specified := Getc;
                 ALIs.Table (Id).Queuing_Policy := Queuing_Policy_Specified;
  
!             --  Processing for flags starting with S
  
              elsif C = 'S' then
                 C := Getc;
*************** package body ALI is
*** 741,747 ****
                 --  Processing for SL
  
                 if C = 'L' then
!                   ALIs.Table (Id).Interface := True;
  
                 --  Processing for SS
  
--- 878,884 ----
                 --  Processing for SL
  
                 if C = 'L' then
!                   ALIs.Table (Id).SAL_Interface := True;
  
                 --  Processing for SS
  
*************** package body ALI is
*** 751,757 ****
                 --  Invalid switch starting with S
  
                 else
!                   Fatal_Error;
                 end if;
  
              --  Processing for Tx
--- 888,894 ----
                 --  Invalid switch starting with S
  
                 else
!                   Fatal_Error_Ignore;
                 end if;
  
              --  Processing for Tx
*************** package body ALI is
*** 779,796 ****
                 --  Invalid switches starting with U
  
                 else
!                   Fatal_Error;
                 end if;
  
              --  Processing for ZX
  
              elsif C = 'Z' then
!                Checkc ('X');
                    ALIs.Table (Id).Zero_Cost_Exceptions := True;
                    Zero_Cost_Exceptions_Specified := True;
  
              else
!                Fatal_Error;
              end if;
           end loop;
  
--- 916,941 ----
                 --  Invalid switches starting with U
  
                 else
!                   Fatal_Error_Ignore;
                 end if;
  
              --  Processing for ZX
  
              elsif C = 'Z' then
!                C := Getc;
! 
!                if C = 'X' then
                    ALIs.Table (Id).Zero_Cost_Exceptions := True;
                    Zero_Cost_Exceptions_Specified := True;
+                else
+                   Fatal_Error_Ignore;
+                end if;
+ 
+             --  Invalid parameter
  
              else
!                C := Getc;
!                Fatal_Error_Ignore;
              end if;
           end loop;
  
*************** package body ALI is
*** 802,848 ****
        end if;
  
        C := Getc;
  
!       --  Acquire restrictions line
  
!       if C /= 'R' then
!          Fatal_Error;
  
!       elsif Ignore ('R') then
           Skip_Line;
  
        else
!          Checkc (' ');
!          Skip_Space;
  
!          for J in All_Restrictions loop
!             C := Getc;
!             ALIs.Table (Id).Restrictions (J) := C;
  
!             case C is
!                when 'v' =>
!                   Restrictions (J) := 'v';
  
!                when 'r' =>
!                   if Restrictions (J) = 'n' then
!                      Restrictions (J) := 'r';
!                   end if;
  
!                when 'n' =>
!                   null;
  
!                when others =>
                    Fatal_Error;
!             end case;
!          end loop;
  
!          Skip_Eol;
        end if;
  
        C := Getc;
  
        --  Acquire 'I' lines if present
  
        while C = 'I' loop
           if Ignore ('I') then
              Skip_Line;
--- 947,1131 ----
        end if;
  
        C := Getc;
+       Check_Unknown_Line;
  
!       --  Acquire first restrictions line
  
!       while C /= 'R' loop
!          if Ignore_Errors then
!             if C = EOF then
!                Fatal_Error;
!             else
!                Skip_Line;
!                C := Nextc;
!             end if;
!          else
!             Fatal_Error;
!          end if;
!       end loop;
  
!       if Ignore ('R') then
           Skip_Line;
  
+       --  Process restrictions line
+ 
        else
!          Scan_Restrictions : declare
!             Save_R : constant Restrictions_Info := Cumulative_Restrictions;
!             --  Save cumulative restrictions in case we have a fatal error
  
!             Bad_R_Line : exception;
!             --  Signal bad restrictions line (raised on unexpected character)
  
!          begin
!             Checkc (' ');
!             Skip_Space;
  
!             --  Acquire information for boolean restrictions
  
!             for R in All_Boolean_Restrictions loop
!                C := Getc;
  
!                case C is
!                   when 'v' =>
!                      ALIs.Table (Id).Restrictions.Violated (R) := True;
!                      Cumulative_Restrictions.Violated (R) := True;
! 
!                   when 'r' =>
!                      ALIs.Table (Id).Restrictions.Set (R) := True;
!                      Cumulative_Restrictions.Set (R) := True;
! 
!                   when 'n' =>
!                      null;
! 
!                   when others =>
!                      raise Bad_R_Line;
!                end case;
!             end loop;
! 
!             --  Acquire information for parameter restrictions
! 
!             for RP in All_Parameter_Restrictions loop
! 
!                --  Acquire restrictions pragma information
! 
!                case Getc is
!                   when 'n' =>
!                      null;
! 
!                   when 'r' =>
!                      ALIs.Table (Id).Restrictions.Set (RP) := True;
! 
!                      declare
!                         N : constant Integer := Integer (Get_Nat);
!                      begin
!                         ALIs.Table (Id).Restrictions.Value (RP) := N;
! 
!                         if Cumulative_Restrictions.Set (RP) then
!                            Cumulative_Restrictions.Value (RP) :=
!                              Integer'Min
!                                (Cumulative_Restrictions.Value (RP), N);
!                         else
!                            Cumulative_Restrictions.Set (RP) := True;
!                            Cumulative_Restrictions.Value (RP) := N;
!                         end if;
!                      end;
! 
!                   when others =>
!                      raise Bad_R_Line;
!                end case;
! 
!                --  Acquire restrictions violations information
! 
!                case Getc is
!                   when 'n' =>
!                      null;
! 
!                   when 'v' =>
!                      ALIs.Table (Id).Restrictions.Violated (RP) := True;
!                      Cumulative_Restrictions.Violated (RP) := True;
! 
!                      declare
!                         N : constant Integer := Integer (Get_Nat);
!                         pragma Unsuppress (Overflow_Check);
! 
!                      begin
!                         ALIs.Table (Id).Restrictions.Count (RP) := N;
! 
!                         if RP in Checked_Max_Parameter_Restrictions then
!                            Cumulative_Restrictions.Count (RP) :=
!                              Integer'Max
!                                (Cumulative_Restrictions.Count (RP), N);
!                         else
!                            Cumulative_Restrictions.Count (RP) :=
!                              Cumulative_Restrictions.Count (RP) + N;
!                         end if;
! 
!                      exception
!                         when Constraint_Error =>
! 
!                            --  A constraint error comes from the addition in
!                            --  the else branch. We reset to the maximum and
!                            --  indicate that the real value is now unknown.
! 
!                            Cumulative_Restrictions.Value (RP) := Integer'Last;
!                            Cumulative_Restrictions.Unknown (RP) := True;
!                      end;
! 
!                      if Nextc = '+' then
!                         Skipc;
!                         ALIs.Table (Id).Restrictions.Unknown (RP) := True;
!                         Cumulative_Restrictions.Unknown (RP) := True;
!                      end if;
! 
!                   when others =>
!                      raise Bad_R_Line;
!                end case;
!             end loop;
! 
!             Skip_Eol;
! 
!          --  Here if error during scanning of restrictions line
! 
!          exception
!             when Bad_R_Line =>
! 
!                --  In Ignore_Errors mode, undo any changes to restrictions
!                --  from this unit, and continue on.
! 
!                if Ignore_Errors then
!                   Cumulative_Restrictions := Save_R;
!                   ALIs.Table (Id).Restrictions := Restrictions_Initial;
!                   Skip_Eol;
! 
!                --  In normal mode, this is a fatal error
! 
!                else
                    Fatal_Error;
!                end if;
  
!          end Scan_Restrictions;
        end if;
  
+       --  Acquire additional restrictions (No_Dependence) lines if present
+ 
        C := Getc;
+       while C = 'R' loop
+          if Ignore ('R') then
+             Skip_Line;
+          else
+             Skip_Space;
+             No_Deps.Append ((Id, Get_Name));
+          end if;
+ 
+          Skip_Eol;
+          C := Getc;
+       end loop;
  
        --  Acquire 'I' lines if present
  
+       Check_Unknown_Line;
+ 
        while C = 'I' loop
           if Ignore ('I') then
              Skip_Line;
*************** package body ALI is
*** 874,880 ****
  
        --  Loop to acquire unit entries
  
!       Unit_Loop : while C = 'U' loop
  
           --  Note: as per spec, we never ignore U lines
  
--- 1157,1165 ----
  
        --  Loop to acquire unit entries
  
!       U_Loop : loop
!          Check_Unknown_Line;
!          exit U_Loop when C /= 'U';
  
           --  Note: as per spec, we never ignore U lines
  
*************** package body ALI is
*** 909,915 ****
           Units.Table (Units.Last).First_With      := Withs.Last + 1;
           Units.Table (Units.Last).First_Arg       := First_Arg;
           Units.Table (Units.Last).Elab_Position   := 0;
!          Units.Table (Units.Last).Interface       := ALIs.Table (Id).Interface;
  
           if Debug_Flag_U then
              Write_Str (" ----> reading unit ");
--- 1194,1202 ----
           Units.Table (Units.Last).First_With      := Withs.Last + 1;
           Units.Table (Units.Last).First_Arg       := First_Arg;
           Units.Table (Units.Last).Elab_Position   := 0;
!          Units.Table (Units.Last).SAL_Interface   := ALIs.Table (Id).
!                                                        SAL_Interface;
!          Units.Table (Units.Last).Body_Needed_For_SAL := False;
  
           if Debug_Flag_U then
              Write_Str (" ----> reading unit ");
*************** package body ALI is
*** 995,1011 ****
              --  BN parameter (Body needed)
  
              elsif C = 'B' then
!                Checkc ('N');
!                Check_At_End_Of_Field;
!                Units.Table (Units.Last).Body_Needed_For_SAL := True;
  
!             --  DE parameter (Dynamic elaboration checks
  
              elsif C = 'D' then
!                Checkc ('E');
!                Check_At_End_Of_Field;
!                Units.Table (Units.Last).Dynamic_Elab := True;
!                Dynamic_Elaboration_Checks_Specified := True;
  
              --  EB/EE parameters
  
--- 1282,1308 ----
              --  BN parameter (Body needed)
  
              elsif C = 'B' then
!                C := Getc;
  
!                if C = 'N' then
!                   Check_At_End_Of_Field;
!                   Units.Table (Units.Last).Body_Needed_For_SAL := True;
!                else
!                   Fatal_Error_Ignore;
!                end if;
! 
!             --  DE parameter (Dynamic elaboration checks)
  
              elsif C = 'D' then
!                C := Getc;
! 
!                if C = 'E' then
!                   Check_At_End_Of_Field;
!                   Units.Table (Units.Last).Dynamic_Elab := True;
!                   Dynamic_Elaboration_Checks_Specified := True;
!                else
!                   Fatal_Error_Ignore;
!                end if;
  
              --  EB/EE parameters
  
*************** package body ALI is
*** 1014,1025 ****
  
                 if C = 'B' then
                    Units.Table (Units.Last).Elaborate_Body := True;
- 
                 elsif C = 'E' then
                    Units.Table (Units.Last).Set_Elab_Entity := True;
- 
                 else
!                   Fatal_Error;
                 end if;
  
                 Check_At_End_Of_Field;
--- 1311,1320 ----
  
                 if C = 'B' then
                    Units.Table (Units.Last).Elaborate_Body := True;
                 elsif C = 'E' then
                    Units.Table (Units.Last).Set_Elab_Entity := True;
                 else
!                   Fatal_Error_Ignore;
                 end if;
  
                 Check_At_End_Of_Field;
*************** package body ALI is
*** 1027,1035 ****
              --  GE parameter (generic)
  
              elsif C = 'G' then
!                Checkc ('E');
!                Check_At_End_Of_Field;
!                Units.Table (Units.Last).Is_Generic := True;
  
              --  IL/IS/IU parameters
  
--- 1322,1335 ----
              --  GE parameter (generic)
  
              elsif C = 'G' then
!                C := Getc;
! 
!                if C = 'E' then
!                   Check_At_End_Of_Field;
!                   Units.Table (Units.Last).Is_Generic := True;
!                else
!                   Fatal_Error_Ignore;
!                end if;
  
              --  IL/IS/IU parameters
  
*************** package body ALI is
*** 1038,1053 ****
  
                 if C = 'L' then
                    Units.Table (Units.Last).Icasing := All_Lower_Case;
- 
                 elsif C = 'S' then
                    Units.Table (Units.Last).Init_Scalars := True;
                    Initialize_Scalars_Used := True;
- 
                 elsif C = 'U' then
                    Units.Table (Units.Last).Icasing := All_Upper_Case;
- 
                 else
!                   Fatal_Error;
                 end if;
  
                 Check_At_End_Of_Field;
--- 1338,1350 ----
  
                 if C = 'L' then
                    Units.Table (Units.Last).Icasing := All_Lower_Case;
                 elsif C = 'S' then
                    Units.Table (Units.Last).Init_Scalars := True;
                    Initialize_Scalars_Used := True;
                 elsif C = 'U' then
                    Units.Table (Units.Last).Icasing := All_Upper_Case;
                 else
!                   Fatal_Error_Ignore;
                 end if;
  
                 Check_At_End_Of_Field;
*************** package body ALI is
*** 1059,1070 ****
  
                 if C = 'M' then
                    Units.Table (Units.Last).Kcasing := Mixed_Case;
- 
                 elsif C = 'U' then
                    Units.Table (Units.Last).Kcasing := All_Upper_Case;
- 
                 else
!                   Fatal_Error;
                 end if;
  
                 Check_At_End_Of_Field;
--- 1356,1365 ----
  
                 if C = 'M' then
                    Units.Table (Units.Last).Kcasing := Mixed_Case;
                 elsif C = 'U' then
                    Units.Table (Units.Last).Kcasing := All_Upper_Case;
                 else
!                   Fatal_Error_Ignore;
                 end if;
  
                 Check_At_End_Of_Field;
*************** package body ALI is
*** 1072,1103 ****
              --  NE parameter
  
              elsif C = 'N' then
!                Checkc ('E');
!                Units.Table (Units.Last).No_Elab := True;
!                Check_At_End_Of_Field;
  
              --  PR/PU/PK parameters
  
              elsif C = 'P' then
                 C := Getc;
  
-                --  PR parameter (preelaborate)
- 
                 if C = 'R' then
                    Units.Table (Units.Last).Preelab := True;
- 
-                --  PU parameter (pure)
- 
                 elsif C = 'U' then
                    Units.Table (Units.Last).Pure := True;
- 
-                --  PK indicates unit is package
- 
                 elsif C = 'K' then
                    Units.Table (Units.Last).Unit_Kind := 'p';
- 
                 else
!                   Fatal_Error;
                 end if;
  
                 Check_At_End_Of_Field;
--- 1367,1394 ----
              --  NE parameter
  
              elsif C = 'N' then
!                C := Getc;
! 
!                if C = 'E' then
!                   Units.Table (Units.Last).No_Elab := True;
!                   Check_At_End_Of_Field;
!                else
!                   Fatal_Error_Ignore;
!                end if;
  
              --  PR/PU/PK parameters
  
              elsif C = 'P' then
                 C := Getc;
  
                 if C = 'R' then
                    Units.Table (Units.Last).Preelab := True;
                 elsif C = 'U' then
                    Units.Table (Units.Last).Pure := True;
                 elsif C = 'K' then
                    Units.Table (Units.Last).Unit_Kind := 'p';
                 else
!                   Fatal_Error_Ignore;
                 end if;
  
                 Check_At_End_Of_Field;
*************** package body ALI is
*** 1107,1129 ****
              elsif C = 'R' then
                 C := Getc;
  
-                --  RC parameter (remote call interface)
- 
                 if C = 'C' then
                    Units.Table (Units.Last).RCI := True;
- 
-                --  RT parameter (remote types)
- 
                 elsif C = 'T' then
                    Units.Table (Units.Last).Remote_Types := True;
- 
-                --  RA parameter (remote access to class wide type)
- 
                 elsif C = 'A' then
                    Units.Table (Units.Last).Has_RACW := True;
- 
                 else
!                   Fatal_Error;
                 end if;
  
                 Check_At_End_Of_Field;
--- 1398,1411 ----
              elsif C = 'R' then
                 C := Getc;
  
                 if C = 'C' then
                    Units.Table (Units.Last).RCI := True;
                 elsif C = 'T' then
                    Units.Table (Units.Last).Remote_Types := True;
                 elsif C = 'A' then
                    Units.Table (Units.Last).Has_RACW := True;
                 else
!                   Fatal_Error_Ignore;
                 end if;
  
                 Check_At_End_Of_Field;
*************** package body ALI is
*** 1131,1154 ****
              elsif C = 'S' then
                 C := Getc;
  
-                --  SP parameter (shared passive)
- 
                 if C = 'P' then
                    Units.Table (Units.Last).Shared_Passive := True;
- 
-                --  SU parameter indicates unit is subprogram
- 
                 elsif C = 'U' then
                    Units.Table (Units.Last).Unit_Kind := 's';
- 
                 else
!                   Fatal_Error;
                 end if;
  
                 Check_At_End_Of_Field;
  
              else
!                Fatal_Error;
              end if;
           end loop;
  
--- 1413,1431 ----
              elsif C = 'S' then
                 C := Getc;
  
                 if C = 'P' then
                    Units.Table (Units.Last).Shared_Passive := True;
                 elsif C = 'U' then
                    Units.Table (Units.Last).Unit_Kind := 's';
                 else
!                   Fatal_Error_Ignore;
                 end if;
  
                 Check_At_End_Of_Field;
  
              else
!                C := Getc;
!                Fatal_Error_Ignore;
              end if;
           end loop;
  
*************** package body ALI is
*** 1166,1172 ****
  
           --  Scan out With lines for this unit
  
!          With_Loop : while C = 'W' loop
              if Ignore ('W') then
                 Skip_Line;
  
--- 1443,1452 ----
  
           --  Scan out With lines for this unit
  
!          With_Loop : loop
!             Check_Unknown_Line;
!             exit With_Loop when C /= 'W';
! 
              if Ignore ('W') then
                 Skip_Line;
  
*************** package body ALI is
*** 1178,1184 ****
                 Withs.Table (Withs.Last).Elaborate          := False;
                 Withs.Table (Withs.Last).Elaborate_All      := False;
                 Withs.Table (Withs.Last).Elab_All_Desirable := False;
!                Withs.Table (Withs.Last).Interface          := False;
  
                 --  Generic case with no object file available
  
--- 1458,1464 ----
                 Withs.Table (Withs.Last).Elaborate          := False;
                 Withs.Table (Withs.Last).Elaborate_All      := False;
                 Withs.Table (Withs.Last).Elab_All_Desirable := False;
!                Withs.Table (Withs.Last).SAL_Interface      := False;
  
                 --  Generic case with no object file available
  
*************** package body ALI is
*** 1236,1242 ****
  
           Name_Len := 0;
  
!          Linker_Options_Loop : while C = 'L' loop
  
              if Ignore ('L') then
                 Skip_Line;
--- 1516,1524 ----
  
           Name_Len := 0;
  
!          Linker_Options_Loop : loop
!             Check_Unknown_Line;
!             exit Linker_Options_Loop when C /= 'L';
  
              if Ignore ('L') then
                 Skip_Line;
*************** package body ALI is
*** 1252,1258 ****
                    if C < Character'Val (16#20#)
                      or else C > Character'Val (16#7E#)
                    then
!                      Fatal_Error;
  
                    elsif C = '{' then
                       C := Character'Val (0);
--- 1534,1540 ----
                    if C < Character'Val (16#20#)
                      or else C > Character'Val (16#7E#)
                    then
!                      Fatal_Error_Ignore;
  
                    elsif C = '{' then
                       C := Character'Val (0);
*************** package body ALI is
*** 1277,1283 ****
                                           10;
  
                             else
!                               Fatal_Error;
                             end if;
                          end loop;
  
--- 1559,1565 ----
                                           10;
  
                             else
!                               Fatal_Error_Ignore;
                             end if;
                          end loop;
  
*************** package body ALI is
*** 1319,1325 ****
              Linker_Options.Table (Linker_Options.Last).Original_Pos :=
                Linker_Options.Last;
           end if;
!       end loop Unit_Loop;
  
        --  End loop through units for one ALI file
  
--- 1601,1607 ----
              Linker_Options.Table (Linker_Options.Last).Original_Pos :=
                Linker_Options.Last;
           end if;
!       end loop U_Loop;
  
        --  End loop through units for one ALI file
  
*************** package body ALI is
*** 1348,1354 ****
  
        --  Scan out external version references and put in hash table
  
!       while C = 'E' loop
           if Ignore ('E') then
              Skip_Line;
  
--- 1630,1639 ----
  
        --  Scan out external version references and put in hash table
  
!       E_Loop : loop
!          Check_Unknown_Line;
!          exit E_Loop when C /= 'E';
! 
           if Ignore ('E') then
              Skip_Line;
  
*************** package body ALI is
*** 1374,1386 ****
           end if;
  
           C := Getc;
!       end loop;
  
        --  Scan out source dependency lines for this ALI file
  
        ALIs.Table (Id).First_Sdep := Sdep.Last + 1;
  
!       while C = 'D' loop
           if Ignore ('D') then
              Skip_Line;
  
--- 1659,1674 ----
           end if;
  
           C := Getc;
!       end loop E_Loop;
  
        --  Scan out source dependency lines for this ALI file
  
        ALIs.Table (Id).First_Sdep := Sdep.Last + 1;
  
!       D_Loop : loop
!          Check_Unknown_Line;
!          exit D_Loop when C /= 'D';
! 
           if Ignore ('D') then
              Skip_Line;
  
*************** package body ALI is
*** 1476,1488 ****
           end if;
  
           C := Getc;
!       end loop;
  
        ALIs.Table (Id).Last_Sdep := Sdep.Last;
  
        --  We must at this stage be at an Xref line or the end of file
  
!       if C /= EOF and then C /= 'X' then
           Fatal_Error;
        end if;
  
--- 1764,1782 ----
           end if;
  
           C := Getc;
!       end loop D_Loop;
  
        ALIs.Table (Id).Last_Sdep := Sdep.Last;
  
        --  We must at this stage be at an Xref line or the end of file
  
!       if C = EOF then
!          return Id;
!       end if;
! 
!       Check_Unknown_Line;
! 
!       if C /= 'X' then
           Fatal_Error;
        end if;
  
*************** package body ALI is
*** 1495,1501 ****
  
        --  Loop through Xref sections
  
!       while C = 'X' loop
  
           --  Make new entry in section table
  
--- 1789,1797 ----
  
        --  Loop through Xref sections
  
!       X_Loop : loop
!          Check_Unknown_Line;
!          exit X_Loop when C /= 'X';
  
           --  Make new entry in section table
  
*************** package body ALI is
*** 1540,1545 ****
--- 1836,1843 ----
                    ----------------------------------
  
                    procedure Read_Instantiation_Reference is
+                      Local_File_Num : Sdep_Id := Current_File_Num;
+ 
                    begin
                       Xref.Increment_Last;
  
*************** package body ALI is
*** 1553,1564 ****
                          if Nextc = '|' then
                             XR.File_Num :=
                               Sdep_Id (N + Nat (First_Sdep_Entry) - 1);
!                            Current_File_Num := XR.File_Num;
                             P := P + 1;
                             N := Get_Nat;
  
                          else
!                            XR.File_Num := Current_File_Num;
                          end if;
  
                          XR.Line  := N;
--- 1851,1862 ----
                          if Nextc = '|' then
                             XR.File_Num :=
                               Sdep_Id (N + Nat (First_Sdep_Entry) - 1);
!                            Local_File_Num := XR.File_Num;
                             P := P + 1;
                             N := Get_Nat;
  
                          else
!                            XR.File_Num := Local_File_Num;
                          end if;
  
                          XR.Line  := N;
*************** package body ALI is
*** 1755,1761 ****
           end Read_Refs_For_One_File;
  
           C := Getc;
!       end loop;
  
        --  Here after dealing with xref sections
  
--- 2053,2059 ----
           end Read_Refs_For_One_File;
  
           C := Getc;
!       end loop X_Loop;
  
        --  Here after dealing with xref sections
  
diff -Nrcpad gcc-3.4.3/gcc/ada/ali.ads gcc-4.0.0/gcc/ada/ali.ads
*** gcc-3.4.3/gcc/ada/ali.ads	Tue Oct 21 13:41:58 2003
--- gcc-4.0.0/gcc/ada/ali.ads	Thu Feb 10 13:50:31 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package ALI is
*** 82,90 ****
     type Main_Program_Type is (None, Proc, Func);
     --  Indicator of whether unit can be used as main program
  
-    type Restrictions_String is array (All_Restrictions) of Character;
-    --  Type used to hold string from R line
- 
     type ALIs_Record is record
  
        Afile : File_Name_Type;
--- 82,87 ----
*************** package ALI is
*** 106,112 ****
        --  Length of characters stored in Ver. Not set if V lines are
        --  ignored as a result of the Ignore_Lines parameter.
  
!       Interface : Boolean;
        --  Set True when this is an interface to a standalone library
  
        First_Unit : Unit_Id;
--- 103,109 ----
        --  Length of characters stored in Ver. Not set if V lines are
        --  ignored as a result of the Ignore_Lines parameter.
  
!       SAL_Interface : Boolean;
        --  Set True when this is an interface to a standalone library
  
        First_Unit : Unit_Id;
*************** package ALI is
*** 187,195 ****
        --  Set to True if file was compiled with zero cost exceptions.
        --  Not set if 'P' appears in Ignore_Lines.
  
!       Restrictions : Restrictions_String;
!       --  Copy of restrictions letters from R line.
!       --  Not set if 'R' appears in Ignore_Lines.
  
        First_Interrupt_State : Interrupt_State_Id;
        Last_Interrupt_State  : Interrupt_State_Id'Base;
--- 184,191 ----
        --  Set to True if file was compiled with zero cost exceptions.
        --  Not set if 'P' appears in Ignore_Lines.
  
!       Restrictions : Restrictions_Info;
!       --  Restrictions information reconstructed from R lines
  
        First_Interrupt_State : Interrupt_State_Id;
        Last_Interrupt_State  : Interrupt_State_Id'Base;
*************** package ALI is
*** 257,263 ****
  
        Dynamic_Elab : Boolean;
        --  Set to True if the unit was compiled with dynamic elaboration
!       --  checks (i.e. either -gnatE or pragma Elaboration_Checks (Static)
        --  was used to compile the unit).
  
        Elaborate_Body : Boolean;
--- 253,259 ----
  
        Dynamic_Elab : Boolean;
        --  Set to True if the unit was compiled with dynamic elaboration
!       --  checks (i.e. either -gnatE or pragma Elaboration_Checks (RM)
        --  was used to compile the unit).
  
        Elaborate_Body : Boolean;
*************** package ALI is
*** 336,342 ****
        --  Set True if IS qualifier appears in ALI file, indicating that
        --  an Initialize_Scalars pragma applies to the unit.
  
!       Interface : Boolean;
        --  Set True when this is an interface to a standalone library
  
        Body_Needed_For_SAL : Boolean;
--- 332,338 ----
        --  Set True if IS qualifier appears in ALI file, indicating that
        --  an Initialize_Scalars pragma applies to the unit.
  
!       SAL_Interface : Boolean;
        --  Set True when this is an interface to a standalone library
  
        Body_Needed_For_SAL : Boolean;
*************** package ALI is
*** 422,432 ****
     --  Set to blank by Initialize_ALI. Set to the appropriate queuing policy
     --  character if an ali file contains a P line setting the queuing policy.
  
!    Restrictions : Restrictions_String := (others => 'n');
!    --  This array records the cumulative contributions of R lines in all
!    --  ali files. An entry is changed will be set to v if any ali file
!    --  indicates that the restriction is violated, and otherwise will be
!    --  set to r if the restriction is specified by some unit.
  
     Static_Elaboration_Model_Used : Boolean := False;
     --  Set to False by Initialize_ALI. Set to True if any ALI file for a
--- 418,427 ----
     --  Set to blank by Initialize_ALI. Set to the appropriate queuing policy
     --  character if an ali file contains a P line setting the queuing policy.
  
!    Cumulative_Restrictions : Restrictions_Info;
!    --  This variable records the cumulative contributions of R lines in all
!    --  ali files, showing whether a restriction pragma exists anywhere, and
!    --  accumulating the aggregate knowledge of violations.
  
     Static_Elaboration_Model_Used : Boolean := False;
     --  Set to False by Initialize_ALI. Set to True if any ALI file for a
*************** package ALI is
*** 480,487 ****
        Elab_All_Desirable : Boolean;
        --  Indicates presence of ED parameter
  
!       Interface : Boolean := False;
!       --  True if the Unit is an Interface of a Stand-Alole Library
  
     end record;
  
--- 475,482 ----
        Elab_All_Desirable : Boolean;
        --  Indicates presence of ED parameter
  
!       SAL_Interface : Boolean := False;
!       --  True if the Unit is an Interface of a Stand-Alone Library
  
     end record;
  
*************** package ALI is
*** 586,591 ****
--- 581,609 ----
       Hash       => SHash,
       Equal      => SEq);
  
+    -------------------------
+    -- No_Dependency Table --
+    -------------------------
+ 
+    --  Each R line for a No_Dependency Restriction generates an entry in
+    --  this No_Dependency table.
+ 
+    type No_Dep_Record is record
+       ALI_File : ALI_Id;
+       --  ALI File containing tne entry
+ 
+       No_Dep_Unit : Name_Id;
+       --  Id for names table entry including entire name, including periods.
+    end record;
+ 
+    package No_Deps is new Table.Table (
+      Table_Component_Type => No_Dep_Record,
+      Table_Index_Type     => Integer,
+      Table_Low_Bound      => 0,
+      Table_Initial        => 200,
+      Table_Increment      => 400,
+      Table_Name           => "No_Deps");
+ 
     ------------------------------------
     -- Sdep (Source Dependency) Table --
     ------------------------------------
*************** package ALI is
*** 598,605 ****
     No_Sdep_Id : constant Sdep_Id := Sdep_Id'First;
     --  Special value indicating no Sdep table entry
  
!    First_Sdep_Entry : constant Sdep_Id := No_Sdep_Id + 1;
!    --  Id of first actual entry in table
  
     type Sdep_Record is record
  
--- 616,625 ----
     No_Sdep_Id : constant Sdep_Id := Sdep_Id'First;
     --  Special value indicating no Sdep table entry
  
!    First_Sdep_Entry : Sdep_Id := No_Sdep_Id + 1;
!    --  Id of first Sdep entry for current ali file. This is initialized to
!    --  the first Sdep entry in the table, and then incremented appropriately
!    --  as successive ALI files are scanned.
  
     type Sdep_Record is record
  
*************** package ALI is
*** 810,826 ****
     --------------------------------------
  
     procedure Initialize_ALI;
!    --  Initialize the ALI tables. Also resets all switch values to defaults.
  
     function Scan_ALI
!      (F            : File_Name_Type;
!       T            : Text_Buffer_Ptr;
!       Ignore_ED    : Boolean;
!       Err          : Boolean;
!       Read_Xref    : Boolean := False;
!       Read_Lines   : String := "";
!       Ignore_Lines : String := "X")
!       return         ALI_Id;
     --  Given the text, T, of an ALI file, F, scan and store the information
     --  from the file, and return the Id of the resulting entry in the ALI
     --  table. Switch settings may be modified as described above in the
--- 830,846 ----
     --------------------------------------
  
     procedure Initialize_ALI;
!    --  Initialize the ALI tables. Also resets all switch values to defaults
  
     function Scan_ALI
!      (F             : File_Name_Type;
!       T             : Text_Buffer_Ptr;
!       Ignore_ED     : Boolean;
!       Err           : Boolean;
!       Read_Xref     : Boolean := False;
!       Read_Lines    : String  := "";
!       Ignore_Lines  : String  := "X";
!       Ignore_Errors : Boolean := False) return ALI_Id;
     --  Given the text, T, of an ALI file, F, scan and store the information
     --  from the file, and return the Id of the resulting entry in the ALI
     --  table. Switch settings may be modified as described above in the
*************** package ALI is
*** 860,864 ****
--- 880,891 ----
     --    Ignore_Lines and Read_Lines parameters are ignored (i.e. the
     --    use of True for Read_XREF is equivalent to specifying an
     --    argument of "UWDX" for Read_Lines.
+    --
+    --    Ignore_Errors is normally False. If it is set True, then Scan_ALI
+    --    will do its best to scan through a file and extract all information
+    --    it can, even if there are errors. In this case Err is only set if
+    --    Scan_ALI was completely unable to process the file (e.g. it did not
+    --    look like an ALI file at all). Ignore_Errors is intended to improve
+    --    the downward compatibility of new compilers with old tools.
  
  end ALI;
diff -Nrcpad gcc-3.4.3/gcc/ada/atree.adb gcc-4.0.0/gcc/ada/atree.adb
*** gcc-3.4.3/gcc/ada/atree.adb	Fri Nov 21 10:46:37 2003
--- gcc-4.0.0/gcc/ada/atree.adb	Thu Feb 10 13:50:41 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** pragma Style_Checks (All_Checks);
*** 39,44 ****
--- 39,45 ----
  --  bodies) and the C file a-atree.c (for remaining non-inlined bodies).
  
  with Debug;   use Debug;
+ with Namet;   use Namet;
  with Nlists;  use Nlists;
  with Elists;  use Elists;
  with Output;  use Output;
*************** package body Atree is
*** 88,95 ****
     function To_Flag_Byte_Ptr is new
       Unchecked_Conversion (Node_Kind_Ptr, Flag_Byte_Ptr);
  
!    --  The following declarations are used to store flags 73-96 in the
!    --  Field12 field of the third component of an extended (entity) node.
  
     type Flag_Word is record
        Flag73 : Boolean;
--- 89,97 ----
     function To_Flag_Byte_Ptr is new
       Unchecked_Conversion (Node_Kind_Ptr, Flag_Byte_Ptr);
  
!    --  The following declarations are used to store flags 73-96 and the
!    --  Convention field in the Field12 field of the third component of an
!    --  extended (Entity) node.
  
     type Flag_Word is record
        Flag73 : Boolean;
*************** package body Atree is
*** 188,198 ****
     function To_Flag_Word2_Ptr is new
       Unchecked_Conversion (Union_Id_Ptr, Flag_Word2_Ptr);
  
!    --  The following declarations are used to store flags 97-120 in the
!    --  Field12 field of the fourth component of an extended (entity) node.
  
     type Flag_Word3 is record
!       Flag152  : Boolean;
        Flag153 : Boolean;
        Flag154 : Boolean;
        Flag155 : Boolean;
--- 190,200 ----
     function To_Flag_Word2_Ptr is new
       Unchecked_Conversion (Union_Id_Ptr, Flag_Word2_Ptr);
  
!    --  The following declarations are used to store flags 152-183 in the
!    --  Field11 field of the fourth component of an extended (entity) node.
  
     type Flag_Word3 is record
!       Flag152 : Boolean;
        Flag153 : Boolean;
        Flag154 : Boolean;
        Flag155 : Boolean;
*************** package body Atree is
*** 241,246 ****
--- 243,301 ----
     function To_Flag_Word3_Ptr is new
       Unchecked_Conversion (Union_Id_Ptr, Flag_Word3_Ptr);
  
+    --  The following declarations are used to store flags 184-215 in the
+    --  Field11 field of the fifth component of an extended (entity) node.
+ 
+    type Flag_Word4 is record
+       Flag184 : Boolean;
+       Flag185 : Boolean;
+       Flag186 : Boolean;
+       Flag187 : Boolean;
+       Flag188 : Boolean;
+       Flag189 : Boolean;
+       Flag190 : Boolean;
+       Flag191 : Boolean;
+ 
+       Flag192 : Boolean;
+       Flag193 : Boolean;
+       Flag194 : Boolean;
+       Flag195 : Boolean;
+       Flag196 : Boolean;
+       Flag197 : Boolean;
+       Flag198 : Boolean;
+       Flag199 : Boolean;
+ 
+       Flag200 : Boolean;
+       Flag201 : Boolean;
+       Flag202 : Boolean;
+       Flag203 : Boolean;
+       Flag204 : Boolean;
+       Flag205 : Boolean;
+       Flag206 : Boolean;
+       Flag207 : Boolean;
+ 
+       Flag208 : Boolean;
+       Flag209 : Boolean;
+       Flag210 : Boolean;
+       Flag211 : Boolean;
+       Flag212 : Boolean;
+       Flag213 : Boolean;
+       Flag214 : Boolean;
+       Flag215 : Boolean;
+    end record;
+ 
+    pragma Pack (Flag_Word4);
+    for Flag_Word4'Size use 32;
+    for Flag_Word4'Alignment use 4;
+ 
+    type Flag_Word4_Ptr is access all Flag_Word4;
+ 
+    function To_Flag_Word4 is new
+      Unchecked_Conversion (Union_Id, Flag_Word4);
+ 
+    function To_Flag_Word4_Ptr is new
+      Unchecked_Conversion (Union_Id_Ptr, Flag_Word4_Ptr);
+ 
     --  Default value used to initialize default nodes. Note that some of the
     --  fields get overwritten, and in particular, Nkind always gets reset.
  
*************** package body Atree is
*** 380,390 ****
     -- Local Subprograms --
     -----------------------
  
!    procedure Fix_Parent (Field : Union_Id; Old_Node, New_Node : Node_Id);
!    --  This subprogram is used to fixup parent pointers that are rendered
!    --  incorrect because of a node copy. Field is checked to see if it
!    --  points to a node, list, or element list that has a parent that
!    --  points to Old_Node. If so, the parent is reset to point to New_Node.
  
     --------------
     -- Analyzed --
--- 435,502 ----
     -- Local Subprograms --
     -----------------------
  
!    procedure Fix_Parents (Old_Node, New_Node : Node_Id);
!    --  Fixup parent pointers for the syntactic children of New_Node after
!    --  a copy, setting them to New_Node when they pointed to Old_Node.
! 
!    function Allocate_Initialize_Node
!      (Src            : Node_Id;
!       With_Extension : Boolean) return Node_Id;
!    --  Allocate a new node or node extension. If Src is not empty,
!    --  the information for the newly-allocated node is copied from it.
! 
!    ------------------------------
!    -- Allocate_Initialize_Node --
!    ------------------------------
! 
!    function Allocate_Initialize_Node
!      (Src            : Node_Id;
!       With_Extension : Boolean) return Node_Id
!    is
!       New_Id : Node_Id     := Src;
!       Nod    : Node_Record := Default_Node;
!       Ext1   : Node_Record := Default_Node_Extension;
!       Ext2   : Node_Record := Default_Node_Extension;
!       Ext3   : Node_Record := Default_Node_Extension;
!       Ext4   : Node_Record := Default_Node_Extension;
! 
!    begin
!       if Present (Src) then
!          Nod := Nodes.Table (Src);
! 
!          if Has_Extension (Src) then
!             Ext1 := Nodes.Table (Src + 1);
!             Ext2 := Nodes.Table (Src + 2);
!             Ext3 := Nodes.Table (Src + 3);
!             Ext4 := Nodes.Table (Src + 4);
!          end if;
!       end if;
! 
!       if not (Present (Src)
!                and then not Has_Extension (Src)
!                and then With_Extension
!                and then Src = Nodes.Last)
!       then
!          --  We are allocating a new node, or extending a node
!          --  other than Nodes.Last.
! 
!          Nodes.Append (Nod);
!          New_Id := Nodes.Last;
!          Orig_Nodes.Append (New_Id);
!          Node_Count := Node_Count + 1;
!       end if;
! 
!       if With_Extension then
!          Nodes.Append (Ext1);
!          Nodes.Append (Ext2);
!          Nodes.Append (Ext3);
!          Nodes.Append (Ext4);
!       end if;
! 
!       Orig_Nodes.Set_Last (Nodes.Last);
!       Allocate_List_Tables (Nodes.Last);
!       return New_Id;
!    end Allocate_Initialize_Node;
  
     --------------
     -- Analyzed --
*************** package body Atree is
*** 464,469 ****
--- 576,582 ----
           Nodes.Table (Destination + 1) := Nodes.Table (Source + 1);
           Nodes.Table (Destination + 2) := Nodes.Table (Source + 2);
           Nodes.Table (Destination + 3) := Nodes.Table (Source + 3);
+          Nodes.Table (Destination + 4) := Nodes.Table (Source + 4);
  
        else
           pragma Assert (not Has_Extension (Source));
*************** package body Atree is
*** 525,534 ****
  
           else
              NL := New_List;
-             E := First (List);
  
              while Present (E) loop
- 
                 if Has_Extension (E) then
                    Append (Copy_Entity (E), NL);
                 else
--- 638,646 ----
  
           else
              NL := New_List;
  
+             E := First (List);
              while Present (E) loop
                 if Has_Extension (E) then
                    Append (Copy_Entity (E), NL);
                 else
*************** package body Atree is
*** 551,557 ****
  
        begin
           if Field in Node_Range then
- 
              New_N := Union_Id (Copy_Separate_Tree (Node_Id (Field)));
  
              if Parent (Node_Id (Field)) = Source then
--- 663,668 ----
*************** package body Atree is
*** 584,600 ****
           return Copy_Entity (Source);
  
        else
!          Nodes.Increment_Last;
!          New_Id := Nodes.Last;
!          Nodes.Table (New_Id) := Nodes.Table (Source);
!          Nodes.Table (New_Id).Link := Empty_List_Or_Node;
!          Nodes.Table (New_Id).In_List := False;
!          Nodes.Table (New_Id).Rewrite_Ins := False;
!          Node_Count := Node_Count + 1;
! 
!          Orig_Nodes.Increment_Last;
!          Allocate_List_Tables (Nodes.Last);
!          Orig_Nodes.Table (New_Id) := New_Id;
  
           --  Recursively copy descendents
  
--- 695,701 ----
           return Copy_Entity (Source);
  
        else
!          New_Id := New_Copy (Source);
  
           --  Recursively copy descendents
  
*************** package body Atree is
*** 653,658 ****
--- 754,763 ----
        procedure Delete_List (L : List_Id);
        --  Delete all elements on the given list
  
+       ------------------
+       -- Delete_Field --
+       ------------------
+ 
        procedure Delete_Field (F : Union_Id) is
        begin
           if F = Union_Id (Empty) then
*************** package body Atree is
*** 675,680 ****
--- 780,789 ----
           end if;
        end Delete_Field;
  
+       -----------------
+       -- Delete_List --
+       -----------------
+ 
        procedure Delete_List (L : List_Id) is
        begin
           while Is_Non_Empty_List (L) loop
*************** package body Atree is
*** 741,746 ****
--- 850,858 ----
        Temp_Ent := Nodes.Table (E1 + 3);
        Nodes.Table (E1 + 3) := Nodes.Table (E2 + 3);
        Nodes.Table (E2 + 3) := Temp_Ent;
+       Temp_Ent := Nodes.Table (E1 + 4);
+       Nodes.Table (E1 + 4) := Nodes.Table (E2 + 4);
+       Nodes.Table (E2 + 4) := Temp_Ent;
  
        --  That exchange exchanged the parent pointers as well, which is what
        --  we want, but we need to patch up the defining identifier pointers
*************** package body Atree is
*** 765,772 ****
--- 877,889 ----
        Result : Entity_Id;
  
        procedure Debug_Extend_Node;
+       pragma Inline (Debug_Extend_Node);
        --  Debug routine for debug flag N
  
+       -----------------------
+       -- Debug_Extend_Node --
+       -----------------------
+ 
        procedure Debug_Extend_Node is
        begin
           if Debug_Flag_N then
*************** package body Atree is
*** 784,844 ****
           end if;
        end Debug_Extend_Node;
  
!       pragma Inline (Debug_Extend_Node);
  
     begin
!       if Node /= Nodes.Last then
!          Nodes.Increment_Last;
!          Nodes.Table (Nodes.Last) := Nodes.Table (Node);
!          Result := Nodes.Last;
  
!          Orig_Nodes.Increment_Last;
!          Orig_Nodes.Table (Nodes.Last) := Nodes.Last;
  
!       else
!          Result := Node;
!       end if;
  
!       Nodes.Increment_Last;
!       Nodes.Table (Nodes.Last) := Default_Node_Extension;
!       Nodes.Increment_Last;
!       Nodes.Table (Nodes.Last) := Default_Node_Extension;
!       Nodes.Increment_Last;
!       Nodes.Table (Nodes.Last) := Default_Node_Extension;
  
!       Orig_Nodes.Set_Last (Nodes.Last);
!       Allocate_List_Tables (Nodes.Last);
  
!       pragma Debug (Debug_Extend_Node);
!       return Result;
!    end Extend_Node;
  
!    ----------------
!    -- Fix_Parent --
!    ----------------
  
!    procedure Fix_Parent (Field : Union_Id; Old_Node, New_Node : Node_Id) is
!    begin
!       --  Fix parent of node that is referenced by Field. Note that we must
!       --  exclude the case where the node is a member of a list, because in
!       --  this case the parent is the parent of the list.
  
!       if Field in Node_Range
!         and then Present (Node_Id (Field))
!         and then not Nodes.Table (Node_Id (Field)).In_List
!         and then Parent (Node_Id (Field)) = Old_Node
!       then
!          Set_Parent (Node_Id (Field), New_Node);
  
!       --  Fix parent of list that is referenced by Field
  
!       elsif Field in List_Range
!         and then Present (List_Id (Field))
!         and then Parent (List_Id (Field)) = Old_Node
!       then
!          Set_Parent (List_Id (Field), New_Node);
!       end if;
!    end Fix_Parent;
  
     -----------------------------------
     -- Get_Comes_From_Source_Default --
--- 901,962 ----
           end if;
        end Debug_Extend_Node;
  
!    --  Start of processing for Extend_Node
  
     begin
!       pragma Assert (not (Has_Extension (Node)));
!       Result := Allocate_Initialize_Node (Node, With_Extension => True);
!       pragma Debug (Debug_Extend_Node);
!       return Result;
!    end Extend_Node;
  
!    -----------------
!    -- Fix_Parents --
!    -----------------
  
!    procedure Fix_Parents (Old_Node, New_Node : Node_Id) is
  
!       procedure Fix_Parent (Field : Union_Id; Old_Node, New_Node : Node_Id);
!       --  Fixup one parent pointer. Field is checked to see if it
!       --  points to a node, list, or element list that has a parent that
!       --  points to Old_Node. If so, the parent is reset to point to New_Node.
  
!       ----------------
!       -- Fix_Parent --
!       ----------------
  
!       procedure Fix_Parent (Field : Union_Id; Old_Node, New_Node : Node_Id) is
!       begin
!          --  Fix parent of node that is referenced by Field. Note that we must
!          --  exclude the case where the node is a member of a list, because in
!          --  this case the parent is the parent of the list.
  
!          if Field in Node_Range
!            and then Present (Node_Id (Field))
!            and then not Nodes.Table (Node_Id (Field)).In_List
!            and then Parent (Node_Id (Field)) = Old_Node
!          then
!             Set_Parent (Node_Id (Field), New_Node);
  
!          --  Fix parent of list that is referenced by Field
  
!          elsif Field in List_Range
!            and then Present (List_Id (Field))
!            and then Parent (List_Id (Field)) = Old_Node
!          then
!             Set_Parent (List_Id (Field), New_Node);
!          end if;
!       end Fix_Parent;
  
!    --  Start of processing for Fix_Parents
  
!    begin
!       Fix_Parent (Field1 (New_Node), Old_Node, New_Node);
!       Fix_Parent (Field2 (New_Node), Old_Node, New_Node);
!       Fix_Parent (Field3 (New_Node), Old_Node, New_Node);
!       Fix_Parent (Field4 (New_Node), Old_Node, New_Node);
!       Fix_Parent (Field5 (New_Node), Old_Node, New_Node);
!    end Fix_Parents;
  
     -----------------------------------
     -- Get_Comes_From_Source_Default --
*************** package body Atree is
*** 883,889 ****
        Set_Name1 (Error, Error_Name);
        Set_Error_Posted (Error, True);
  
!       --  Set global variables for New_Copy_Tree:
        NCT_Hash_Tables_Used := False;
        NCT_Table_Entries    := 0;
        NCT_Hash_Table_Setup := False;
--- 1001,1008 ----
        Set_Name1 (Error, Error_Name);
        Set_Error_Posted (Error, True);
  
!       --  Set global variables for New_Copy_Tree
! 
        NCT_Hash_Tables_Used := False;
        NCT_Table_Entries    := 0;
        NCT_Hash_Table_Setup := False;
*************** package body Atree is
*** 942,979 ****
     --------------
  
     function New_Copy (Source : Node_Id) return Node_Id is
!       New_Id : Node_Id;
  
     begin
!       if Source <= Empty_Or_Error then
!          return Source;
  
-       else
-          Nodes.Increment_Last;
-          New_Id := Nodes.Last;
-          Nodes.Table (New_Id) := Nodes.Table (Source);
           Nodes.Table (New_Id).Link := Empty_List_Or_Node;
           Nodes.Table (New_Id).In_List := False;
-          Nodes.Table (New_Id).Rewrite_Ins := False;
- 
-          Orig_Nodes.Increment_Last;
-          Orig_Nodes.Table (New_Id) := New_Id;
- 
-          if Has_Extension (Source) then
-             Nodes.Increment_Last;
-             Nodes.Table (New_Id + 1) := Nodes.Table (Source + 1);
-             Nodes.Increment_Last;
-             Nodes.Table (New_Id + 2) := Nodes.Table (Source + 2);
-             Nodes.Increment_Last;
-             Nodes.Table (New_Id + 3) := Nodes.Table (Source + 3);
  
!             Orig_Nodes.Set_Last (Nodes.Last);
!          end if;
  
!          Allocate_List_Tables (Nodes.Last);
!          Node_Count := Node_Count + 1;
!          return New_Id;
        end if;
     end New_Copy;
  
     -------------------
--- 1061,1083 ----
     --------------
  
     function New_Copy (Source : Node_Id) return Node_Id is
!       New_Id : Node_Id := Source;
  
     begin
!       if Source > Empty_Or_Error then
! 
!          New_Id := Allocate_Initialize_Node (Source, Has_Extension (Source));
  
           Nodes.Table (New_Id).Link := Empty_List_Or_Node;
           Nodes.Table (New_Id).In_List := False;
  
!          --  If the original is marked as a rewrite insertion, then unmark
!          --  the copy, since we inserted the original, not the copy.
  
!          Nodes.Table (New_Id).Rewrite_Ins := False;
        end if;
+ 
+       return New_Id;
     end New_Copy;
  
     -------------------
*************** package body Atree is
*** 996,1006 ****
--- 1100,1118 ----
     function New_Copy_Hash (E : Entity_Id) return NCT_Header_Num;
     --  Hash function used for hash operations
  
+    -------------------
+    -- New_Copy_Hash --
+    -------------------
+ 
     function New_Copy_Hash (E : Entity_Id) return NCT_Header_Num is
     begin
        return Nat (E) mod (NCT_Header_Num'Last + 1);
     end New_Copy_Hash;
  
+    ---------------
+    -- NCT_Assoc --
+    ---------------
+ 
     --  The hash table NCT_Assoc associates old entities in the table
     --  with their corresponding new entities (i.e. the pairs of entries
     --  presented in the original Map argument are Key-Element pairs).
*************** package body Atree is
*** 1013,1018 ****
--- 1125,1134 ----
       Hash       => New_Copy_Hash,
       Equal      => Types."=");
  
+    ---------------------
+    -- NCT_Itype_Assoc --
+    ---------------------
+ 
     --  The hash table NCT_Itype_Assoc contains entries only for those
     --  old nodes which have a non-empty Associated_Node_For_Itype set.
     --  The key is the associated node, and the element is the new node
*************** package body Atree is
*** 1026,1039 ****
       Hash       => New_Copy_Hash,
       Equal      => Types."=");
  
!    --  Start of New_Copy_Tree function
  
     function New_Copy_Tree
       (Source    : Node_Id;
        Map       : Elist_Id := No_Elist;
        New_Sloc  : Source_Ptr := No_Location;
!       New_Scope : Entity_Id := Empty)
!       return      Node_Id
     is
        Actual_Map : Elist_Id := Map;
        --  This is the actual map for the copy. It is initialized with the
--- 1142,1154 ----
       Hash       => New_Copy_Hash,
       Equal      => Types."=");
  
!    --  Start of processing for New_Copy_Tree function
  
     function New_Copy_Tree
       (Source    : Node_Id;
        Map       : Elist_Id := No_Elist;
        New_Sloc  : Source_Ptr := No_Location;
!       New_Scope : Entity_Id := Empty) return Node_Id
     is
        Actual_Map : Elist_Id := Map;
        --  This is the actual map for the copy. It is initialized with the
*************** package body Atree is
*** 1053,1060 ****
        --  Builds hash tables (number of elements >= threshold value)
  
        function Copy_Elist_With_Replacement
!         (Old_Elist : Elist_Id)
!          return      Elist_Id;
        --  Called during second phase to copy element list doing replacements.
  
        procedure Copy_Itype_With_Replacement (New_Itype : Entity_Id);
--- 1168,1174 ----
        --  Builds hash tables (number of elements >= threshold value)
  
        function Copy_Elist_With_Replacement
!         (Old_Elist : Elist_Id) return Elist_Id;
        --  Called during second phase to copy element list doing replacements.
  
        procedure Copy_Itype_With_Replacement (New_Itype : Entity_Id);
*************** package body Atree is
*** 1167,1174 ****
        ---------------------------------
  
        function Copy_Elist_With_Replacement
!         (Old_Elist : Elist_Id)
!          return      Elist_Id
        is
           M         : Elmt_Id;
           New_Elist : Elist_Id;
--- 1281,1287 ----
        ---------------------------------
  
        function Copy_Elist_With_Replacement
!         (Old_Elist : Elist_Id) return Elist_Id
        is
           M         : Elmt_Id;
           New_Elist : Elist_Id;
*************** package body Atree is
*** 1179,1186 ****
  
           else
              New_Elist := New_Elmt_List;
-             M := First_Elmt (Old_Elist);
  
              while Present (M) loop
                 Append_Elmt (Copy_Node_With_Replacement (Node (M)), New_Elist);
                 Next_Elmt (M);
--- 1292,1299 ----
  
           else
              New_Elist := New_Elmt_List;
  
+             M := First_Elmt (Old_Elist);
              while Present (M) loop
                 Append_Elmt (Copy_Node_With_Replacement (Node (M)), New_Elist);
                 Next_Elmt (M);
*************** package body Atree is
*** 1243,1250 ****
        --------------------------------
  
        function Copy_List_With_Replacement
!         (Old_List : List_Id)
!          return     List_Id
        is
           New_List : List_Id;
           E        : Node_Id;
--- 1356,1362 ----
        --------------------------------
  
        function Copy_List_With_Replacement
!         (Old_List : List_Id) return List_Id
        is
           New_List : List_Id;
           E        : Node_Id;
*************** package body Atree is
*** 1255,1260 ****
--- 1367,1373 ----
  
           else
              New_List := Empty_List;
+ 
              E := First (Old_List);
              while Present (E) loop
                 Append (Copy_Node_With_Replacement (E), New_List);
*************** package body Atree is
*** 1270,1283 ****
        --------------------------------
  
        function Copy_Node_With_Replacement
!         (Old_Node : Node_Id)
!          return     Node_Id
        is
           New_Node : Node_Id;
  
           function Copy_Field_With_Replacement
!            (Field : Union_Id)
!             return  Union_Id;
           --  Given Field, which is a field of Old_Node, return a copy of it
           --  if it is a syntactic field (i.e. its parent is Node), setting
           --  the parent of the copy to poit to New_Node. Otherwise returns
--- 1383,1394 ----
        --------------------------------
  
        function Copy_Node_With_Replacement
!         (Old_Node : Node_Id) return Node_Id
        is
           New_Node : Node_Id;
  
           function Copy_Field_With_Replacement
!            (Field : Union_Id) return Union_Id;
           --  Given Field, which is a field of Old_Node, return a copy of it
           --  if it is a syntactic field (i.e. its parent is Node), setting
           --  the parent of the copy to poit to New_Node. Otherwise returns
*************** package body Atree is
*** 1288,1295 ****
           ---------------------------------
  
           function Copy_Field_With_Replacement
!            (Field : Union_Id)
!             return  Union_Id
           is
           begin
              if Field = Union_Id (Empty) then
--- 1399,1405 ----
           ---------------------------------
  
           function Copy_Field_With_Replacement
!            (Field : Union_Id) return Union_Id
           is
           begin
              if Field = Union_Id (Empty) then
*************** package body Atree is
*** 1360,1376 ****
              return Assoc (Old_Node);
  
           else
!             Nodes.Increment_Last;
!             New_Node := Nodes.Last;
!             Nodes.Table (New_Node) := Nodes.Table (Old_Node);
!             Nodes.Table (New_Node).Link := Empty_List_Or_Node;
!             Nodes.Table (New_Node).In_List := False;
!             Node_Count := Node_Count + 1;
! 
!             Orig_Nodes.Increment_Last;
!             Allocate_List_Tables (Nodes.Last);
! 
!             Orig_Nodes.Table (Nodes.Last) := Nodes.Last;
  
              --  If the node we are copying is the associated node of a
              --  previously copied Itype, then adjust the associated node
--- 1470,1476 ----
              return Assoc (Old_Node);
  
           else
!             New_Node := New_Copy (Old_Node);
  
              --  If the node we are copying is the associated node of a
              --  previously copied Itype, then adjust the associated node
*************** package body Atree is
*** 1423,1433 ****
              Set_Field5
                (New_Node, Copy_Field_With_Replacement (Field5 (New_Node)));
  
-             --  If the original is marked as a rewrite insertion, then unmark
-             --  the copy, since we inserted the original, not the copy.
- 
-             Nodes.Table (New_Node).Rewrite_Ins := False;
- 
              --  Adjust Sloc of new node if necessary
  
              if New_Sloc /= No_Location then
--- 1523,1528 ----
*************** package body Atree is
*** 1478,1484 ****
  
        procedure Visit_Elist (E : Elist_Id) is
           Elmt : Elmt_Id;
- 
        begin
           if Present (E) then
              Elmt := First_Elmt (E);
--- 1573,1578 ----
*************** package body Atree is
*** 1584,1589 ****
--- 1678,1693 ----
  
           New_Itype := New_Copy (Old_Itype);
  
+          --  The new Itype has all the attributes of the old one, and
+          --  we just copy the contents of the entity. However, the back-end
+          --  needs different names for debugging purposes, so we create a
+          --  new internal name by appending the letter 'c' (copy) to the
+          --  name of the original.
+ 
+          Get_Name_String (Chars (Old_Itype));
+          Add_Char_To_Name_Buffer ('c');
+          Set_Chars (New_Itype, Name_Enter);
+ 
           --  If our associated node is an entity that has already been copied,
           --  then set the associated node of the copy to point to the right
           --  copy. If we have copied an Itype that is itself the associated
*************** package body Atree is
*** 1694,1700 ****
  
        procedure Visit_List (L : List_Id) is
           N : Node_Id;
- 
        begin
           if L /= No_List then
              N := First (L);
--- 1798,1803 ----
*************** package body Atree is
*** 1736,1742 ****
              else
                 declare
                    E : Elmt_Id;
- 
                 begin
                    if Present (Actual_Map) then
                       E := First_Elmt (Actual_Map);
--- 1839,1844 ----
*************** package body Atree is
*** 1779,1784 ****
--- 1881,1887 ----
  
           begin
              NCT_Table_Entries := 0;
+ 
              Elmt := First_Elmt (Actual_Map);
              while Present (Elmt) loop
                 NCT_Table_Entries := NCT_Table_Entries + 1;
*************** package body Atree is
*** 1806,1812 ****
           declare
              Elmt      : Elmt_Id;
              New_Itype : Entity_Id;
- 
           begin
              Elmt := First_Elmt (Actual_Map);
              while Present (Elmt) loop
--- 1909,1914 ----
*************** package body Atree is
*** 1829,1840 ****
  
     function New_Entity
       (New_Node_Kind : Node_Kind;
!       New_Sloc      : Source_Ptr)
!       return          Entity_Id
     is
        Ent : Entity_Id;
  
        procedure New_Entity_Debugging_Output;
        --  Debugging routine for debug flag N
  
        ---------------------------------
--- 1931,1942 ----
  
     function New_Entity
       (New_Node_Kind : Node_Kind;
!       New_Sloc      : Source_Ptr) return Entity_Id
     is
        Ent : Entity_Id;
  
        procedure New_Entity_Debugging_Output;
+       pragma Inline (New_Entity_Debugging_Output);
        --  Debugging routine for debug flag N
  
        ---------------------------------
*************** package body Atree is
*** 1845,1851 ****
        begin
           if Debug_Flag_N then
              Write_Str ("Allocate entity, Id = ");
!             Write_Int (Int (Nodes.Last));
              Write_Str ("  ");
              Write_Location (New_Sloc);
              Write_Str ("  ");
--- 1947,1953 ----
        begin
           if Debug_Flag_N then
              Write_Str ("Allocate entity, Id = ");
!             Write_Int (Int (Ent));
              Write_Str ("  ");
              Write_Location (New_Sloc);
              Write_Str ("  ");
*************** package body Atree is
*** 1854,1868 ****
           end if;
        end New_Entity_Debugging_Output;
  
-       pragma Inline (New_Entity_Debugging_Output);
- 
     --  Start of processing for New_Entity
  
     begin
        pragma Assert (New_Node_Kind in N_Entity);
  
!       Nodes.Increment_Last;
!       Ent := Nodes.Last;
  
        --  If this is a node with a real location and we are generating
        --  source nodes, then reset Current_Error_Node. This is useful
--- 1956,1967 ----
           end if;
        end New_Entity_Debugging_Output;
  
     --  Start of processing for New_Entity
  
     begin
        pragma Assert (New_Node_Kind in N_Entity);
  
!       Ent := Allocate_Initialize_Node (Empty, With_Extension => True);
  
        --  If this is a node with a real location and we are generating
        --  source nodes, then reset Current_Error_Node. This is useful
*************** package body Atree is
*** 1872,1897 ****
           Current_Error_Node := Ent;
        end if;
  
!       Nodes.Table (Nodes.Last)        := Default_Node;
!       Nodes.Table (Nodes.Last).Nkind  := New_Node_Kind;
!       Nodes.Table (Nodes.Last).Sloc   := New_Sloc;
        pragma Debug (New_Entity_Debugging_Output);
  
-       Orig_Nodes.Increment_Last;
-       Orig_Nodes.Table (Nodes.Last) := Nodes.Last;
- 
-       Nodes.Increment_Last;
-       Nodes.Table (Nodes.Last) := Default_Node_Extension;
- 
-       Nodes.Increment_Last;
-       Nodes.Table (Nodes.Last) := Default_Node_Extension;
- 
-       Nodes.Increment_Last;
-       Nodes.Table (Nodes.Last) := Default_Node_Extension;
- 
-       Orig_Nodes.Set_Last (Nodes.Last);
-       Allocate_List_Tables (Nodes.Last);
-       Node_Count := Node_Count + 1;
        return Ent;
     end New_Entity;
  
--- 1971,1980 ----
           Current_Error_Node := Ent;
        end if;
  
!       Nodes.Table (Ent).Nkind  := New_Node_Kind;
!       Nodes.Table (Ent).Sloc   := New_Sloc;
        pragma Debug (New_Entity_Debugging_Output);
  
        return Ent;
     end New_Entity;
  
*************** package body Atree is
*** 1901,1912 ****
  
     function New_Node
       (New_Node_Kind : Node_Kind;
!       New_Sloc      : Source_Ptr)
!       return          Node_Id
     is
        Nod : Node_Id;
  
        procedure New_Node_Debugging_Output;
        --  Debugging routine for debug flag N
  
        --------------------------
--- 1984,1995 ----
  
     function New_Node
       (New_Node_Kind : Node_Kind;
!       New_Sloc      : Source_Ptr) return Node_Id
     is
        Nod : Node_Id;
  
        procedure New_Node_Debugging_Output;
+       pragma Inline (New_Node_Debugging_Output);
        --  Debugging routine for debug flag N
  
        --------------------------
*************** package body Atree is
*** 1917,1923 ****
        begin
           if Debug_Flag_N then
              Write_Str ("Allocate node, Id = ");
!             Write_Int (Int (Nodes.Last));
              Write_Str ("  ");
              Write_Location (New_Sloc);
              Write_Str ("  ");
--- 2000,2006 ----
        begin
           if Debug_Flag_N then
              Write_Str ("Allocate node, Id = ");
!             Write_Int (Int (Nod));
              Write_Str ("  ");
              Write_Location (New_Sloc);
              Write_Str ("  ");
*************** package body Atree is
*** 1926,1943 ****
           end if;
        end New_Node_Debugging_Output;
  
-       pragma Inline (New_Node_Debugging_Output);
- 
     --  Start of processing for New_Node
  
     begin
        pragma Assert (New_Node_Kind not in N_Entity);
!       Nodes.Increment_Last;
!       Nodes.Table (Nodes.Last)        := Default_Node;
!       Nodes.Table (Nodes.Last).Nkind  := New_Node_Kind;
!       Nodes.Table (Nodes.Last).Sloc   := New_Sloc;
        pragma Debug (New_Node_Debugging_Output);
-       Nod := Nodes.Last;
  
        --  If this is a node with a real location and we are generating
        --  source nodes, then reset Current_Error_Node. This is useful
--- 2009,2022 ----
           end if;
        end New_Node_Debugging_Output;
  
     --  Start of processing for New_Node
  
     begin
        pragma Assert (New_Node_Kind not in N_Entity);
!       Nod := Allocate_Initialize_Node (Empty, With_Extension => False);
!       Nodes.Table (Nod).Nkind := New_Node_Kind;
!       Nodes.Table (Nod).Sloc  := New_Sloc;
        pragma Debug (New_Node_Debugging_Output);
  
        --  If this is a node with a real location and we are generating
        --  source nodes, then reset Current_Error_Node. This is useful
*************** package body Atree is
*** 1947,1956 ****
           Current_Error_Node := Nod;
        end if;
  
-       Node_Count := Node_Count + 1;
-       Orig_Nodes.Increment_Last;
-       Allocate_List_Tables (Nodes.Last);
-       Orig_Nodes.Table (Nodes.Last) := Nodes.Last;
        return Nod;
     end New_Node;
  
--- 2026,2031 ----
*************** package body Atree is
*** 2065,2075 ****
        end if;
  
        New_Node := New_Copy (Source);
!       Fix_Parent (Field1 (Source), Source, New_Node);
!       Fix_Parent (Field2 (Source), Source, New_Node);
!       Fix_Parent (Field3 (Source), Source, New_Node);
!       Fix_Parent (Field4 (Source), Source, New_Node);
!       Fix_Parent (Field5 (Source), Source, New_Node);
  
        --  We now set the parent of the new node to be the same as the
        --  parent of the source. Almost always this parent will be
--- 2140,2146 ----
        end if;
  
        New_Node := New_Copy (Source);
!       Fix_Parents (Source, New_Node);
  
        --  We now set the parent of the new node to be the same as the
        --  parent of the source. Almost always this parent will be
*************** package body Atree is
*** 2096,2103 ****
     -------------
  
     procedure Replace (Old_Node, New_Node : Node_Id) is
-       Old_Link : constant Union_Id := Nodes.Table (Old_Node).Link;
-       Old_InL  : constant Boolean  := Nodes.Table (Old_Node).In_List;
        Old_Post : constant Boolean  := Nodes.Table (Old_Node).Error_Posted;
        Old_CFS  : constant Boolean  := Nodes.Table (Old_Node).Comes_From_Source;
  
--- 2167,2172 ----
*************** package body Atree is
*** 2109,2132 ****
  
        --  Do copy, preserving link and in list status and comes from source
  
!       Nodes.Table (Old_Node)                   := Nodes.Table (New_Node);
!       Nodes.Table (Old_Node).Link              := Old_Link;
!       Nodes.Table (Old_Node).In_List           := Old_InL;
        Nodes.Table (Old_Node).Comes_From_Source := Old_CFS;
        Nodes.Table (Old_Node).Error_Posted      := Old_Post;
  
        --  Fix parents of substituted node, since it has changed identity
  
!       Fix_Parent (Field1 (Old_Node), New_Node, Old_Node);
!       Fix_Parent (Field2 (Old_Node), New_Node, Old_Node);
!       Fix_Parent (Field3 (Old_Node), New_Node, Old_Node);
!       Fix_Parent (Field4 (Old_Node), New_Node, Old_Node);
!       Fix_Parent (Field5 (Old_Node), New_Node, Old_Node);
  
        --  Since we are doing a replace, we assume that the original node
        --  is intended to become the new replaced node. The call would be
!       --  to Rewrite_Substitute_Node if there were an intention to save
!       --  the original node.
  
        Orig_Nodes.Table (Old_Node) := Old_Node;
  
--- 2178,2194 ----
  
        --  Do copy, preserving link and in list status and comes from source
  
!       Copy_Node (Source => New_Node, Destination => Old_Node);
        Nodes.Table (Old_Node).Comes_From_Source := Old_CFS;
        Nodes.Table (Old_Node).Error_Posted      := Old_Post;
  
        --  Fix parents of substituted node, since it has changed identity
  
!       Fix_Parents (New_Node, Old_Node);
  
        --  Since we are doing a replace, we assume that the original node
        --  is intended to become the new replaced node. The call would be
!       --  to Rewrite if there were an intention to save the original node.
  
        Orig_Nodes.Table (Old_Node) := Old_Node;
  
*************** package body Atree is
*** 2141,2150 ****
  
     procedure Rewrite (Old_Node, New_Node : Node_Id) is
  
-       Old_Link    : constant Union_Id := Nodes.Table (Old_Node).Link;
-       Old_In_List : constant Boolean  := Nodes.Table (Old_Node).In_List;
        Old_Error_P : constant Boolean  := Nodes.Table (Old_Node).Error_Posted;
!       --  These three fields are always preserved in the new node
  
        Old_Paren_Count     : Paren_Count_Type;
        Old_Must_Not_Freeze : Boolean;
--- 2203,2210 ----
  
     procedure Rewrite (Old_Node, New_Node : Node_Id) is
  
        Old_Error_P : constant Boolean  := Nodes.Table (Old_Node).Error_Posted;
!       --  This fields is always preserved in the new node
  
        Old_Paren_Count     : Paren_Count_Type;
        Old_Must_Not_Freeze : Boolean;
*************** package body Atree is
*** 2177,2200 ****
        --  that does not reference the Old_Node.
  
        if Orig_Nodes.Table (Old_Node) = Old_Node then
!          Nodes.Increment_Last;
!          Sav_Node := Nodes.Last;
!          Nodes.Table (Sav_Node)         := Nodes.Table (Old_Node);
!          Nodes.Table (Sav_Node).In_List := False;
!          Nodes.Table (Sav_Node).Link    := Union_Id (Parent (Old_Node));
! 
!          Orig_Nodes.Increment_Last;
!          Allocate_List_Tables (Nodes.Last);
! 
           Orig_Nodes.Table (Sav_Node) := Sav_Node;
           Orig_Nodes.Table (Old_Node) := Sav_Node;
        end if;
  
        --  Copy substitute node into place, preserving old fields as required
  
!       Nodes.Table (Old_Node)              := Nodes.Table (New_Node);
!       Nodes.Table (Old_Node).Link         := Old_Link;
!       Nodes.Table (Old_Node).In_List      := Old_In_List;
        Nodes.Table (Old_Node).Error_Posted := Old_Error_P;
  
        if Nkind (New_Node) in N_Subexpr then
--- 2237,2250 ----
        --  that does not reference the Old_Node.
  
        if Orig_Nodes.Table (Old_Node) = Old_Node then
!          Sav_Node := New_Copy (Old_Node);
           Orig_Nodes.Table (Sav_Node) := Sav_Node;
           Orig_Nodes.Table (Old_Node) := Sav_Node;
        end if;
  
        --  Copy substitute node into place, preserving old fields as required
  
!       Copy_Node (Source => New_Node, Destination => Old_Node);
        Nodes.Table (Old_Node).Error_Posted := Old_Error_P;
  
        if Nkind (New_Node) in N_Subexpr then
*************** package body Atree is
*** 2202,2212 ****
           Set_Must_Not_Freeze (Old_Node, Old_Must_Not_Freeze);
        end if;
  
!       Fix_Parent (Field1 (Old_Node), New_Node, Old_Node);
!       Fix_Parent (Field2 (Old_Node), New_Node, Old_Node);
!       Fix_Parent (Field3 (Old_Node), New_Node, Old_Node);
!       Fix_Parent (Field4 (Old_Node), New_Node, Old_Node);
!       Fix_Parent (Field5 (Old_Node), New_Node, Old_Node);
     end Rewrite;
  
     ------------------
--- 2252,2258 ----
           Set_Must_Not_Freeze (Old_Node, Old_Must_Not_Freeze);
        end if;
  
!       Fix_Parents (New_Node, Old_Node);
     end Rewrite;
  
     ------------------
*************** package body Atree is
*** 2441,2447 ****
        function Traverse is new Traverse_Func (Process);
        Discard : Traverse_Result;
        pragma Warnings (Off, Discard);
- 
     begin
        Discard := Traverse (Node);
     end Traverse_Proc;
--- 2487,2492 ----
*************** package body Atree is
*** 2612,2617 ****
--- 2657,2686 ----
           return Nodes.Table (N + 3).Field10;
        end Field23;
  
+       function Field24 (N : Node_Id) return Union_Id is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          return Nodes.Table (N + 4).Field6;
+       end Field24;
+ 
+       function Field25 (N : Node_Id) return Union_Id is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          return Nodes.Table (N + 4).Field7;
+       end Field25;
+ 
+       function Field26 (N : Node_Id) return Union_Id is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          return Nodes.Table (N + 4).Field8;
+       end Field26;
+ 
+       function Field27 (N : Node_Id) return Union_Id is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          return Nodes.Table (N + 4).Field9;
+       end Field27;
+ 
        function Node1 (N : Node_Id) return Node_Id is
        begin
           pragma Assert (N in Nodes.First .. Nodes.Last);
*************** package body Atree is
*** 2750,2755 ****
--- 2819,2848 ----
           return Node_Id (Nodes.Table (N + 3).Field10);
        end Node23;
  
+       function Node24 (N : Node_Id) return Node_Id is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          return Node_Id (Nodes.Table (N + 4).Field6);
+       end Node24;
+ 
+       function Node25 (N : Node_Id) return Node_Id is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          return Node_Id (Nodes.Table (N + 4).Field7);
+       end Node25;
+ 
+       function Node26 (N : Node_Id) return Node_Id is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          return Node_Id (Nodes.Table (N + 4).Field8);
+       end Node26;
+ 
+       function Node27 (N : Node_Id) return Node_Id is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          return Node_Id (Nodes.Table (N + 4).Field9);
+       end Node27;
+ 
        function List1 (N : Node_Id) return List_Id is
        begin
           pragma Assert (N in Nodes.First .. Nodes.Last);
*************** package body Atree is
*** 2867,2882 ****
           return String_Id (Nodes.Table (N).Field3);
        end Str3;
  
!       function Char_Code2 (N : Node_Id) return Char_Code is
!       begin
           pragma Assert (N in Nodes.First .. Nodes.Last);
!          return Char_Code (Nodes.Table (N).Field2 - Char_Code_Bias);
!       end Char_Code2;
  
        function Uint3 (N : Node_Id) return Uint is
           pragma Assert (N in Nodes.First .. Nodes.Last);
           U : constant Union_Id := Nodes.Table (N).Field3;
- 
        begin
           if U = 0 then
              return Uint_0;
--- 2960,2979 ----
           return String_Id (Nodes.Table (N).Field3);
        end Str3;
  
!       function Uint2 (N : Node_Id) return Uint is
           pragma Assert (N in Nodes.First .. Nodes.Last);
!          U : constant Union_Id := Nodes.Table (N).Field2;
!       begin
!          if U = 0 then
!             return Uint_0;
!          else
!             return From_Union (U);
!          end if;
!       end Uint2;
  
        function Uint3 (N : Node_Id) return Uint is
           pragma Assert (N in Nodes.First .. Nodes.Last);
           U : constant Union_Id := Nodes.Table (N).Field3;
        begin
           if U = 0 then
              return Uint_0;
*************** package body Atree is
*** 2888,2894 ****
        function Uint4 (N : Node_Id) return Uint is
           pragma Assert (N in Nodes.First .. Nodes.Last);
           U : constant Union_Id := Nodes.Table (N).Field4;
- 
        begin
           if U = 0 then
              return Uint_0;
--- 2985,2990 ----
*************** package body Atree is
*** 2900,2906 ****
        function Uint5 (N : Node_Id) return Uint is
           pragma Assert (N in Nodes.First .. Nodes.Last);
           U : constant Union_Id := Nodes.Table (N).Field5;
- 
        begin
           if U = 0 then
              return Uint_0;
--- 2996,3001 ----
*************** package body Atree is
*** 2924,2930 ****
        function Uint9 (N : Node_Id) return Uint is
           pragma Assert (Nkind (N) in N_Entity);
           U : constant Union_Id := Nodes.Table (N + 1).Field9;
- 
        begin
           if U = 0 then
              return Uint_0;
--- 3019,3024 ----
*************** package body Atree is
*** 2933,2966 ****
           end if;
        end Uint9;
  
!       function Uint11 (N : Node_Id) return Uint is
           pragma Assert (Nkind (N) in N_Entity);
!          U : constant Union_Id := Nodes.Table (N + 1).Field11;
! 
        begin
           if U = 0 then
              return Uint_0;
           else
              return From_Union (U);
           end if;
!       end Uint11;
  
!       function Uint10 (N : Node_Id) return Uint is
           pragma Assert (Nkind (N) in N_Entity);
!          U : constant Union_Id := Nodes.Table (N + 1).Field10;
! 
        begin
           if U = 0 then
              return Uint_0;
           else
              return From_Union (U);
           end if;
!       end Uint10;
  
        function Uint12 (N : Node_Id) return Uint is
           pragma Assert (Nkind (N) in N_Entity);
           U : constant Union_Id := Nodes.Table (N + 1).Field12;
- 
        begin
           if U = 0 then
              return Uint_0;
--- 3027,3057 ----
           end if;
        end Uint9;
  
!       function Uint10 (N : Node_Id) return Uint is
           pragma Assert (Nkind (N) in N_Entity);
!          U : constant Union_Id := Nodes.Table (N + 1).Field10;
        begin
           if U = 0 then
              return Uint_0;
           else
              return From_Union (U);
           end if;
!       end Uint10;
  
!       function Uint11 (N : Node_Id) return Uint is
           pragma Assert (Nkind (N) in N_Entity);
!          U : constant Union_Id := Nodes.Table (N + 1).Field11;
        begin
           if U = 0 then
              return Uint_0;
           else
              return From_Union (U);
           end if;
!       end Uint11;
  
        function Uint12 (N : Node_Id) return Uint is
           pragma Assert (Nkind (N) in N_Entity);
           U : constant Union_Id := Nodes.Table (N + 1).Field12;
        begin
           if U = 0 then
              return Uint_0;
*************** package body Atree is
*** 2972,2978 ****
        function Uint13 (N : Node_Id) return Uint is
           pragma Assert (Nkind (N) in N_Entity);
           U : constant Union_Id := Nodes.Table (N + 2).Field6;
- 
        begin
           if U = 0 then
              return Uint_0;
--- 3063,3068 ----
*************** package body Atree is
*** 2984,2990 ****
        function Uint14 (N : Node_Id) return Uint is
           pragma Assert (Nkind (N) in N_Entity);
           U : constant Union_Id := Nodes.Table (N + 2).Field7;
- 
        begin
           if U = 0 then
              return Uint_0;
--- 3074,3079 ----
*************** package body Atree is
*** 2996,3002 ****
        function Uint15 (N : Node_Id) return Uint is
           pragma Assert (Nkind (N) in N_Entity);
           U : constant Union_Id := Nodes.Table (N + 2).Field8;
- 
        begin
           if U = 0 then
              return Uint_0;
--- 3085,3090 ----
*************** package body Atree is
*** 3008,3014 ****
        function Uint16 (N : Node_Id) return Uint is
           pragma Assert (Nkind (N) in N_Entity);
           U : constant Union_Id := Nodes.Table (N + 2).Field9;
- 
        begin
           if U = 0 then
              return Uint_0;
--- 3096,3101 ----
*************** package body Atree is
*** 3020,3026 ****
        function Uint17 (N : Node_Id) return Uint is
           pragma Assert (Nkind (N) in N_Entity);
           U : constant Union_Id := Nodes.Table (N + 2).Field10;
- 
        begin
           if U = 0 then
              return Uint_0;
--- 3107,3112 ----
*************** package body Atree is
*** 3032,3038 ****
        function Uint22 (N : Node_Id) return Uint is
           pragma Assert (Nkind (N) in N_Entity);
           U : constant Union_Id := Nodes.Table (N + 3).Field9;
- 
        begin
           if U = 0 then
              return Uint_0;
--- 3118,3123 ----
*************** package body Atree is
*** 4139,4144 ****
--- 4224,4421 ----
           return To_Flag_Word3 (Nodes.Table (N + 3).Field11).Flag183;
        end Flag183;
  
+       function Flag184 (N : Node_Id) return Boolean is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          return To_Flag_Word4 (Nodes.Table (N + 4).Field11).Flag184;
+       end Flag184;
+ 
+       function Flag185 (N : Node_Id) return Boolean is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          return To_Flag_Word4 (Nodes.Table (N + 4).Field11).Flag185;
+       end Flag185;
+ 
+       function Flag186 (N : Node_Id) return Boolean is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          return To_Flag_Word4 (Nodes.Table (N + 4).Field11).Flag186;
+       end Flag186;
+ 
+       function Flag187 (N : Node_Id) return Boolean is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          return To_Flag_Word4 (Nodes.Table (N + 4).Field11).Flag187;
+       end Flag187;
+ 
+       function Flag188 (N : Node_Id) return Boolean is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          return To_Flag_Word4 (Nodes.Table (N + 4).Field11).Flag188;
+       end Flag188;
+ 
+       function Flag189 (N : Node_Id) return Boolean is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          return To_Flag_Word4 (Nodes.Table (N + 4).Field11).Flag189;
+       end Flag189;
+ 
+       function Flag190 (N : Node_Id) return Boolean is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          return To_Flag_Word4 (Nodes.Table (N + 4).Field11).Flag190;
+       end Flag190;
+ 
+       function Flag191 (N : Node_Id) return Boolean is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          return To_Flag_Word4 (Nodes.Table (N + 4).Field11).Flag191;
+       end Flag191;
+ 
+       function Flag192 (N : Node_Id) return Boolean is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          return To_Flag_Word4 (Nodes.Table (N + 4).Field11).Flag192;
+       end Flag192;
+ 
+       function Flag193 (N : Node_Id) return Boolean is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          return To_Flag_Word4 (Nodes.Table (N + 4).Field11).Flag193;
+       end Flag193;
+ 
+       function Flag194 (N : Node_Id) return Boolean is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          return To_Flag_Word4 (Nodes.Table (N + 4).Field11).Flag194;
+       end Flag194;
+ 
+       function Flag195 (N : Node_Id) return Boolean is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          return To_Flag_Word4 (Nodes.Table (N + 4).Field11).Flag195;
+       end Flag195;
+ 
+       function Flag196 (N : Node_Id) return Boolean is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          return To_Flag_Word4 (Nodes.Table (N + 4).Field11).Flag196;
+       end Flag196;
+ 
+       function Flag197 (N : Node_Id) return Boolean is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          return To_Flag_Word4 (Nodes.Table (N + 4).Field11).Flag197;
+       end Flag197;
+ 
+       function Flag198 (N : Node_Id) return Boolean is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          return To_Flag_Word4 (Nodes.Table (N + 4).Field11).Flag198;
+       end Flag198;
+ 
+       function Flag199 (N : Node_Id) return Boolean is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          return To_Flag_Word4 (Nodes.Table (N + 4).Field11).Flag199;
+       end Flag199;
+ 
+       function Flag200 (N : Node_Id) return Boolean is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          return To_Flag_Word4 (Nodes.Table (N + 4).Field11).Flag200;
+       end Flag200;
+ 
+       function Flag201 (N : Node_Id) return Boolean is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          return To_Flag_Word4 (Nodes.Table (N + 4).Field11).Flag201;
+       end Flag201;
+ 
+       function Flag202 (N : Node_Id) return Boolean is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          return To_Flag_Word4 (Nodes.Table (N + 4).Field11).Flag202;
+       end Flag202;
+ 
+       function Flag203 (N : Node_Id) return Boolean is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          return To_Flag_Word4 (Nodes.Table (N + 4).Field11).Flag203;
+       end Flag203;
+ 
+       function Flag204 (N : Node_Id) return Boolean is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          return To_Flag_Word4 (Nodes.Table (N + 4).Field11).Flag204;
+       end Flag204;
+ 
+       function Flag205 (N : Node_Id) return Boolean is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          return To_Flag_Word4 (Nodes.Table (N + 4).Field11).Flag205;
+       end Flag205;
+ 
+       function Flag206 (N : Node_Id) return Boolean is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          return To_Flag_Word4 (Nodes.Table (N + 4).Field11).Flag206;
+       end Flag206;
+ 
+       function Flag207 (N : Node_Id) return Boolean is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          return To_Flag_Word4 (Nodes.Table (N + 4).Field11).Flag207;
+       end Flag207;
+ 
+       function Flag208 (N : Node_Id) return Boolean is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          return To_Flag_Word4 (Nodes.Table (N + 4).Field11).Flag208;
+       end Flag208;
+ 
+       function Flag209 (N : Node_Id) return Boolean is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          return To_Flag_Word4 (Nodes.Table (N + 4).Field11).Flag209;
+       end Flag209;
+ 
+       function Flag210 (N : Node_Id) return Boolean is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          return To_Flag_Word4 (Nodes.Table (N + 4).Field11).Flag210;
+       end Flag210;
+ 
+       function Flag211 (N : Node_Id) return Boolean is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          return To_Flag_Word4 (Nodes.Table (N + 4).Field11).Flag211;
+       end Flag211;
+ 
+       function Flag212 (N : Node_Id) return Boolean is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          return To_Flag_Word4 (Nodes.Table (N + 4).Field11).Flag212;
+       end Flag212;
+ 
+       function Flag213 (N : Node_Id) return Boolean is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          return To_Flag_Word4 (Nodes.Table (N + 4).Field11).Flag213;
+       end Flag213;
+ 
+       function Flag214 (N : Node_Id) return Boolean is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          return To_Flag_Word4 (Nodes.Table (N + 4).Field11).Flag214;
+       end Flag214;
+ 
+       function Flag215 (N : Node_Id) return Boolean is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          return To_Flag_Word4 (Nodes.Table (N + 4).Field11).Flag215;
+       end Flag215;
+ 
        procedure Set_Nkind (N : Node_Id; Val : Node_Kind) is
        begin
           pragma Assert (N in Nodes.First .. Nodes.Last);
*************** package body Atree is
*** 4283,4288 ****
--- 4560,4589 ----
           Nodes.Table (N + 3).Field10 := Val;
        end Set_Field23;
  
+       procedure Set_Field24 (N : Node_Id; Val : Union_Id) is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          Nodes.Table (N + 4).Field6 := Val;
+       end Set_Field24;
+ 
+       procedure Set_Field25 (N : Node_Id; Val : Union_Id) is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          Nodes.Table (N + 4).Field7 := Val;
+       end Set_Field25;
+ 
+       procedure Set_Field26 (N : Node_Id; Val : Union_Id) is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          Nodes.Table (N + 4).Field8 := Val;
+       end Set_Field26;
+ 
+       procedure Set_Field27 (N : Node_Id; Val : Union_Id) is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          Nodes.Table (N + 4).Field9 := Val;
+       end Set_Field27;
+ 
        procedure Set_Node1 (N : Node_Id; Val : Node_Id) is
        begin
           pragma Assert (N in Nodes.First .. Nodes.Last);
*************** package body Atree is
*** 4421,4426 ****
--- 4722,4751 ----
           Nodes.Table (N + 3).Field10 := Union_Id (Val);
        end Set_Node23;
  
+       procedure Set_Node24 (N : Node_Id; Val : Node_Id) is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          Nodes.Table (N + 4).Field6 := Union_Id (Val);
+       end Set_Node24;
+ 
+       procedure Set_Node25 (N : Node_Id; Val : Node_Id) is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          Nodes.Table (N + 4).Field7 := Union_Id (Val);
+       end Set_Node25;
+ 
+       procedure Set_Node26 (N : Node_Id; Val : Node_Id) is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          Nodes.Table (N + 4).Field8 := Union_Id (Val);
+       end Set_Node26;
+ 
+       procedure Set_Node27 (N : Node_Id; Val : Node_Id) is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          Nodes.Table (N + 4).Field9 := Union_Id (Val);
+       end Set_Node27;
+ 
        procedure Set_List1 (N : Node_Id; Val : List_Id) is
        begin
           pragma Assert (N in Nodes.First .. Nodes.Last);
*************** package body Atree is
*** 4538,4543 ****
--- 4863,4874 ----
           Nodes.Table (N).Field3 := Union_Id (Val);
        end Set_Str3;
  
+       procedure Set_Uint2 (N : Node_Id; Val : Uint) is
+       begin
+          pragma Assert (N in Nodes.First .. Nodes.Last);
+          Nodes.Table (N).Field2 := To_Union (Val);
+       end Set_Uint2;
+ 
        procedure Set_Uint3 (N : Node_Id; Val : Uint) is
        begin
           pragma Assert (N in Nodes.First .. Nodes.Last);
*************** package body Atree is
*** 4640,4651 ****
           Nodes.Table (N + 3).Field8 := To_Union (Val);
        end Set_Ureal21;
  
-       procedure Set_Char_Code2 (N : Node_Id; Val : Char_Code) is
-       begin
-          pragma Assert (N in Nodes.First .. Nodes.Last);
-          Nodes.Table (N).Field2 := Union_Id (Val) + Char_Code_Bias;
-       end Set_Char_Code2;
- 
        procedure Set_Flag4 (N : Node_Id; Val : Boolean) is
        begin
           pragma Assert (N in Nodes.First .. Nodes.Last);
--- 4971,4976 ----
*************** package body Atree is
*** 5918,5923 ****
--- 6243,6504 ----
               (Nodes.Table (N + 3).Field11'Unrestricted_Access)).Flag183 := Val;
        end Set_Flag183;
  
+       procedure Set_Flag184 (N : Node_Id; Val : Boolean) is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          To_Flag_Word4_Ptr
+            (Union_Id_Ptr'
+              (Nodes.Table (N + 4).Field11'Unrestricted_Access)).Flag184 := Val;
+       end Set_Flag184;
+ 
+       procedure Set_Flag185 (N : Node_Id; Val : Boolean) is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          To_Flag_Word4_Ptr
+            (Union_Id_Ptr'
+              (Nodes.Table (N + 4).Field11'Unrestricted_Access)).Flag185 := Val;
+       end Set_Flag185;
+ 
+       procedure Set_Flag186 (N : Node_Id; Val : Boolean) is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          To_Flag_Word4_Ptr
+            (Union_Id_Ptr'
+              (Nodes.Table (N + 4).Field11'Unrestricted_Access)).Flag186 := Val;
+       end Set_Flag186;
+ 
+       procedure Set_Flag187 (N : Node_Id; Val : Boolean) is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          To_Flag_Word4_Ptr
+            (Union_Id_Ptr'
+              (Nodes.Table (N + 4).Field11'Unrestricted_Access)).Flag187 := Val;
+       end Set_Flag187;
+ 
+       procedure Set_Flag188 (N : Node_Id; Val : Boolean) is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          To_Flag_Word4_Ptr
+            (Union_Id_Ptr'
+              (Nodes.Table (N + 4).Field11'Unrestricted_Access)).Flag188 := Val;
+       end Set_Flag188;
+ 
+       procedure Set_Flag189 (N : Node_Id; Val : Boolean) is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          To_Flag_Word4_Ptr
+            (Union_Id_Ptr'
+              (Nodes.Table (N + 4).Field11'Unrestricted_Access)).Flag189 := Val;
+       end Set_Flag189;
+ 
+       procedure Set_Flag190 (N : Node_Id; Val : Boolean) is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          To_Flag_Word4_Ptr
+            (Union_Id_Ptr'
+              (Nodes.Table (N + 4).Field11'Unrestricted_Access)).Flag190 := Val;
+       end Set_Flag190;
+ 
+       procedure Set_Flag191 (N : Node_Id; Val : Boolean) is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          To_Flag_Word4_Ptr
+            (Union_Id_Ptr'
+              (Nodes.Table (N + 4).Field11'Unrestricted_Access)).Flag191 := Val;
+       end Set_Flag191;
+ 
+       procedure Set_Flag192 (N : Node_Id; Val : Boolean) is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          To_Flag_Word4_Ptr
+            (Union_Id_Ptr'
+              (Nodes.Table (N + 4).Field11'Unrestricted_Access)).Flag192 := Val;
+       end Set_Flag192;
+ 
+       procedure Set_Flag193 (N : Node_Id; Val : Boolean) is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          To_Flag_Word4_Ptr
+            (Union_Id_Ptr'
+              (Nodes.Table (N + 4).Field11'Unrestricted_Access)).Flag193 := Val;
+       end Set_Flag193;
+ 
+       procedure Set_Flag194 (N : Node_Id; Val : Boolean) is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          To_Flag_Word4_Ptr
+            (Union_Id_Ptr'
+              (Nodes.Table (N + 4).Field11'Unrestricted_Access)).Flag194 := Val;
+       end Set_Flag194;
+ 
+       procedure Set_Flag195 (N : Node_Id; Val : Boolean) is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          To_Flag_Word4_Ptr
+            (Union_Id_Ptr'
+              (Nodes.Table (N + 4).Field11'Unrestricted_Access)).Flag195 := Val;
+       end Set_Flag195;
+ 
+       procedure Set_Flag196 (N : Node_Id; Val : Boolean) is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          To_Flag_Word4_Ptr
+            (Union_Id_Ptr'
+              (Nodes.Table (N + 4).Field11'Unrestricted_Access)).Flag196 := Val;
+       end Set_Flag196;
+ 
+       procedure Set_Flag197 (N : Node_Id; Val : Boolean) is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          To_Flag_Word4_Ptr
+            (Union_Id_Ptr'
+              (Nodes.Table (N + 4).Field11'Unrestricted_Access)).Flag197 := Val;
+       end Set_Flag197;
+ 
+       procedure Set_Flag198 (N : Node_Id; Val : Boolean) is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          To_Flag_Word4_Ptr
+            (Union_Id_Ptr'
+              (Nodes.Table (N + 4).Field11'Unrestricted_Access)).Flag198 := Val;
+       end Set_Flag198;
+ 
+       procedure Set_Flag199 (N : Node_Id; Val : Boolean) is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          To_Flag_Word4_Ptr
+            (Union_Id_Ptr'
+              (Nodes.Table (N + 4).Field11'Unrestricted_Access)).Flag199 := Val;
+       end Set_Flag199;
+ 
+       procedure Set_Flag200 (N : Node_Id; Val : Boolean) is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          To_Flag_Word4_Ptr
+            (Union_Id_Ptr'
+              (Nodes.Table (N + 4).Field11'Unrestricted_Access)).Flag200 := Val;
+       end Set_Flag200;
+ 
+       procedure Set_Flag201 (N : Node_Id; Val : Boolean) is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          To_Flag_Word4_Ptr
+            (Union_Id_Ptr'
+              (Nodes.Table (N + 4).Field11'Unrestricted_Access)).Flag201 := Val;
+       end Set_Flag201;
+ 
+       procedure Set_Flag202 (N : Node_Id; Val : Boolean) is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          To_Flag_Word4_Ptr
+            (Union_Id_Ptr'
+              (Nodes.Table (N + 4).Field11'Unrestricted_Access)).Flag202 := Val;
+       end Set_Flag202;
+ 
+       procedure Set_Flag203 (N : Node_Id; Val : Boolean) is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          To_Flag_Word4_Ptr
+            (Union_Id_Ptr'
+              (Nodes.Table (N + 4).Field11'Unrestricted_Access)).Flag203 := Val;
+       end Set_Flag203;
+ 
+       procedure Set_Flag204 (N : Node_Id; Val : Boolean) is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          To_Flag_Word4_Ptr
+            (Union_Id_Ptr'
+              (Nodes.Table (N + 4).Field11'Unrestricted_Access)).Flag204 := Val;
+       end Set_Flag204;
+ 
+       procedure Set_Flag205 (N : Node_Id; Val : Boolean) is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          To_Flag_Word4_Ptr
+            (Union_Id_Ptr'
+              (Nodes.Table (N + 4).Field11'Unrestricted_Access)).Flag205 := Val;
+       end Set_Flag205;
+ 
+       procedure Set_Flag206 (N : Node_Id; Val : Boolean) is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          To_Flag_Word4_Ptr
+            (Union_Id_Ptr'
+              (Nodes.Table (N + 4).Field11'Unrestricted_Access)).Flag206 := Val;
+       end Set_Flag206;
+ 
+       procedure Set_Flag207 (N : Node_Id; Val : Boolean) is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          To_Flag_Word4_Ptr
+            (Union_Id_Ptr'
+              (Nodes.Table (N + 4).Field11'Unrestricted_Access)).Flag207 := Val;
+       end Set_Flag207;
+ 
+       procedure Set_Flag208 (N : Node_Id; Val : Boolean) is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          To_Flag_Word4_Ptr
+            (Union_Id_Ptr'
+              (Nodes.Table (N + 4).Field11'Unrestricted_Access)).Flag208 := Val;
+       end Set_Flag208;
+ 
+       procedure Set_Flag209 (N : Node_Id; Val : Boolean) is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          To_Flag_Word4_Ptr
+            (Union_Id_Ptr'
+              (Nodes.Table (N + 4).Field11'Unrestricted_Access)).Flag209 := Val;
+       end Set_Flag209;
+ 
+       procedure Set_Flag210 (N : Node_Id; Val : Boolean) is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          To_Flag_Word4_Ptr
+            (Union_Id_Ptr'
+              (Nodes.Table (N + 4).Field11'Unrestricted_Access)).Flag210 := Val;
+       end Set_Flag210;
+ 
+       procedure Set_Flag211 (N : Node_Id; Val : Boolean) is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          To_Flag_Word4_Ptr
+            (Union_Id_Ptr'
+              (Nodes.Table (N + 4).Field11'Unrestricted_Access)).Flag211 := Val;
+       end Set_Flag211;
+ 
+       procedure Set_Flag212 (N : Node_Id; Val : Boolean) is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          To_Flag_Word4_Ptr
+            (Union_Id_Ptr'
+              (Nodes.Table (N + 4).Field11'Unrestricted_Access)).Flag212 := Val;
+       end Set_Flag212;
+ 
+       procedure Set_Flag213 (N : Node_Id; Val : Boolean) is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          To_Flag_Word4_Ptr
+            (Union_Id_Ptr'
+              (Nodes.Table (N + 4).Field11'Unrestricted_Access)).Flag213 := Val;
+       end Set_Flag213;
+ 
+       procedure Set_Flag214 (N : Node_Id; Val : Boolean) is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          To_Flag_Word4_Ptr
+            (Union_Id_Ptr'
+              (Nodes.Table (N + 4).Field11'Unrestricted_Access)).Flag214 := Val;
+       end Set_Flag214;
+ 
+       procedure Set_Flag215 (N : Node_Id; Val : Boolean) is
+       begin
+          pragma Assert (Nkind (N) in N_Entity);
+          To_Flag_Word4_Ptr
+            (Union_Id_Ptr'
+              (Nodes.Table (N + 4).Field11'Unrestricted_Access)).Flag215 := Val;
+       end Set_Flag215;
+ 
        procedure Set_Node1_With_Parent (N : Node_Id; Val : Node_Id) is
        begin
           pragma Assert (N in Nodes.First .. Nodes.Last);
diff -Nrcpad gcc-3.4.3/gcc/ada/atree.ads gcc-4.0.0/gcc/ada/atree.ads
*** gcc-3.4.3/gcc/ada/atree.ads	Tue Oct 21 13:41:58 2003
--- gcc-4.0.0/gcc/ada/atree.ads	Thu Feb 10 13:50:42 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Atree is
*** 124,130 ****
     --   Field4
     --   Field5           Five fields holding Union_Id values
  
-    --   Char_CodeN       Synonym for FieldN typed as Char_Code
     --   ElistN           Synonym for FieldN typed as Elist_Id
     --   ListN            Synonym for FieldN typed as List_Id
     --   NameN            Synonym for FieldN typed as Name_Id
--- 124,129 ----
*************** package Atree is
*** 133,146 ****
     --   UintN            Synonym for FieldN typed as Uint (Empty = Uint_0)
     --   UrealN           Synonym for FieldN typed as Ureal
  
!    --   Note: the actual usage of FieldN (i.e. whether it contains a Char_Code,
!    --   Elist_Id, List_Id, Name_Id, Node_Id, String_Id, Uint or Ureal), depends
!    --   on the value in Nkind. Generally the access to this field is always via
!    --   the functional interface, so the field names Char_CodeN, ElistN, ListN,
!    --   NameN, NodeN, StrN, UintN and UrealN are used only in the bodies of the
!    --   access functions (i.e. in the bodies of Sinfo and Einfo). These access
!    --   functions contain debugging code that checks that the use is consistent
!    --   with Nkind and Ekind values.
  
     --   However, in specialized circumstances (examples are the circuit in
     --   generic instantiation to copy trees, and in the tree dump routine),
--- 132,145 ----
     --   UintN            Synonym for FieldN typed as Uint (Empty = Uint_0)
     --   UrealN           Synonym for FieldN typed as Ureal
  
!    --   Note: the actual usage of FieldN (i.e. whether it contains a Elist_Id,
!    --   List_Id, Name_Id, Node_Id, String_Id, Uint or Ureal), depends on the
!    --   value in Nkind. Generally the access to this field is always via the
!    --   functional interface, so the field names ElistN, ListN, NameN, NodeN,
!    --   StrN, UintN and UrealN are used only in the bodies of the access
!    --   functions (i.e. in the bodies of Sinfo and Einfo). These access
!    --   functions contain debugging code that checks that the use is
!    --   consistent with Nkind and Ekind values.
  
     --   However, in specialized circumstances (examples are the circuit in
     --   generic instantiation to copy trees, and in the tree dump routine),
*************** package Atree is
*** 176,184 ****
     --                    entity, it is of type Entity_Kind which is defined
     --                    in package Einfo.
  
!    --   Flag19           133 additional flags
     --   ...
!    --   Flag151
  
     --   Convention       Entity convention (Convention_Id value)
  
--- 175,183 ----
     --                    entity, it is of type Entity_Kind which is defined
     --                    in package Einfo.
  
!    --   Flag19           197 additional flags
     --   ...
!    --   Flag215
  
     --   Convention       Entity convention (Convention_Id value)
  
*************** package Atree is
*** 188,195 ****
     --   Elist6           Synonym for Field6 typed as Elist_Id
     --   Uint6            Synonym for Field6 typed as Uint (Empty = Uint_0)
  
!    --   Similar definitions for Field7 to Field23 (and Node7-Node23,
!    --   Elist7-Elist23, Uint7-Uint23, Ureal7-Ureal23). Note that not all
     --   these functions are defined, only the ones that are actually used.
  
     type Paren_Count_Type is mod 4;
--- 187,194 ----
     --   Elist6           Synonym for Field6 typed as Elist_Id
     --   Uint6            Synonym for Field6 typed as Uint (Empty = Uint_0)
  
!    --   Similar definitions for Field7 to Field27 (and Node7-Node27,
!    --   Elist7-Elist27, Uint7-Uint27, Ureal7-Ureal27). Note that not all
     --   these functions are defined, only the ones that are actually used.
  
     type Paren_Count_Type is mod 4;
*************** package Atree is
*** 292,298 ****
     -------------------------------------
  
     --  A subpackage Atree.Unchecked_Access provides routines for reading and
!    --  writing the fields defined above (Field1-17, Node1-17, Flag1-88 etc).
     --  These unchecked access routines can be used for untyped traversals.
     --  In addition they are used in the implementations of the Sinfo and
     --  Einfo packages. These packages both provide logical synonyms for
--- 291,297 ----
     -------------------------------------
  
     --  A subpackage Atree.Unchecked_Access provides routines for reading and
!    --  writing the fields defined above (Field1-27, Node1-27, Flag1-215 etc).
     --  These unchecked access routines can be used for untyped traversals.
     --  In addition they are used in the implementations of the Sinfo and
     --  Einfo packages. These packages both provide logical synonyms for
*************** package Atree is
*** 323,339 ****
     --  Called before the backend is invoked to lock the nodes table
  
     procedure Tree_Read;
!    --  Initializes internal tables from current tree file using Tree_Read.
!    --  Note that Initialize should not be called if Tree_Read is used.
!    --  Tree_Read includes all necessary initialization.
  
     procedure Tree_Write;
!    --  Writes out internal tables to current tree file using Tree_Write
  
     function New_Node
       (New_Node_Kind : Node_Kind;
!       New_Sloc      : Source_Ptr)
!       return          Node_Id;
     --  Allocates a completely new node with the given node type and source
     --  location values. All other fields are set to their standard defaults:
     --
--- 322,338 ----
     --  Called before the backend is invoked to lock the nodes table
  
     procedure Tree_Read;
!    --  Initializes internal tables from current tree file using the relevant
!    --  Table.Tree_Read routines. Note that Initialize should not be called if
!    --  Tree_Read is used. Tree_Read includes all necessary initialization.
  
     procedure Tree_Write;
!    --  Writes out internal tables to current tree file using the relevant
!    --  Table.Tree_Write routines.
  
     function New_Node
       (New_Node_Kind : Node_Kind;
!       New_Sloc      : Source_Ptr) return Node_Id;
     --  Allocates a completely new node with the given node type and source
     --  location values. All other fields are set to their standard defaults:
     --
*************** package Atree is
*** 351,358 ****
  
     function New_Entity
       (New_Node_Kind : Node_Kind;
!       New_Sloc      : Source_Ptr)
!       return          Entity_Id;
     --  Similar to New_Node, except that it is used only for entity nodes
     --  and returns an extended node.
  
--- 350,356 ----
  
     function New_Entity
       (New_Node_Kind : Node_Kind;
!       New_Sloc      : Source_Ptr) return Entity_Id;
     --  Similar to New_Node, except that it is used only for entity nodes
     --  and returns an extended node.
  
*************** package Atree is
*** 427,434 ****
       (Source    : Node_Id;
        Map       : Elist_Id := No_Elist;
        New_Sloc  : Source_Ptr := No_Location;
!       New_Scope : Entity_Id := Empty)
!       return      Node_Id;
     --  Given a node that is the root of a subtree, Copy_Tree copies the entire
     --  syntactic subtree, including recursively any descendents whose parent
     --  field references a copied node (descendents not linked to a copied node
--- 425,431 ----
       (Source    : Node_Id;
        Map       : Elist_Id := No_Elist;
        New_Sloc  : Source_Ptr := No_Location;
!       New_Scope : Entity_Id := Empty) return Node_Id;
     --  Given a node that is the root of a subtree, Copy_Tree copies the entire
     --  syntactic subtree, including recursively any descendents whose parent
     --  field references a copied node (descendents not linked to a copied node
*************** package Atree is
*** 498,504 ****
     function Extend_Node (Node : Node_Id) return Entity_Id;
     --  This function returns a copy of its input node with an extension
     --  added. The fields of the extension are set to Empty. Due to the way
!    --  extensions are handled (as two consecutive array elements), it may
     --  be necessary to reallocate the node, so that the returned value is
     --  not the same as the input value, but where possible the returned
     --  value will be the same as the input value (i.e. the extension will
--- 495,501 ----
     function Extend_Node (Node : Node_Id) return Entity_Id;
     --  This function returns a copy of its input node with an extension
     --  added. The fields of the extension are set to Empty. Due to the way
!    --  extensions are handled (as four consecutive array elements), it may
     --  be necessary to reallocate the node, so that the returned value is
     --  not the same as the input value, but where possible the returned
     --  value will be the same as the input value (i.e. the extension will
*************** package Atree is
*** 840,845 ****
--- 837,854 ----
        function Field23 (N : Node_Id) return Union_Id;
        pragma Inline (Field23);
  
+       function Field24 (N : Node_Id) return Union_Id;
+       pragma Inline (Field24);
+ 
+       function Field25 (N : Node_Id) return Union_Id;
+       pragma Inline (Field25);
+ 
+       function Field26 (N : Node_Id) return Union_Id;
+       pragma Inline (Field26);
+ 
+       function Field27 (N : Node_Id) return Union_Id;
+       pragma Inline (Field27);
+ 
        function Node1 (N : Node_Id) return Node_Id;
        pragma Inline (Node1);
  
*************** package Atree is
*** 909,914 ****
--- 918,935 ----
        function Node23 (N : Node_Id) return Node_Id;
        pragma Inline (Node23);
  
+       function Node24 (N : Node_Id) return Node_Id;
+       pragma Inline (Node24);
+ 
+       function Node25 (N : Node_Id) return Node_Id;
+       pragma Inline (Node25);
+ 
+       function Node26 (N : Node_Id) return Node_Id;
+       pragma Inline (Node26);
+ 
+       function Node27 (N : Node_Id) return Node_Id;
+       pragma Inline (Node27);
+ 
        function List1 (N : Node_Id) return List_Id;
        pragma Inline (List1);
  
*************** package Atree is
*** 966,974 ****
        function Name2 (N : Node_Id) return Name_Id;
        pragma Inline (Name2);
  
-       function Char_Code2 (N : Node_Id) return Char_Code;
-       pragma Inline (Char_Code2);
- 
        function Str3 (N : Node_Id) return String_Id;
        pragma Inline (Str3);
  
--- 987,992 ----
*************** package Atree is
*** 977,982 ****
--- 995,1003 ----
        --  Uint_0 is returned. This avoids the rather tricky requirement
        --  of initializing all Uint fields in nodes and entities.
  
+       function Uint2 (N : Node_Id) return Uint;
+       pragma Inline (Uint2);
+ 
        function Uint3 (N : Node_Id) return Uint;
        pragma Inline (Uint3);
  
*************** package Atree is
*** 1473,1497 ****
        pragma Inline (Flag151);
  
        function Flag152 (N : Node_Id) return Boolean;
!       pragma Inline (Flag151);
  
        function Flag153 (N : Node_Id) return Boolean;
!       pragma Inline (Flag151);
  
        function Flag154 (N : Node_Id) return Boolean;
!       pragma Inline (Flag151);
  
        function Flag155 (N : Node_Id) return Boolean;
!       pragma Inline (Flag151);
  
        function Flag156 (N : Node_Id) return Boolean;
!       pragma Inline (Flag151);
  
        function Flag157 (N : Node_Id) return Boolean;
!       pragma Inline (Flag151);
  
        function Flag158 (N : Node_Id) return Boolean;
!       pragma Inline (Flag151);
  
        function Flag159 (N : Node_Id) return Boolean;
        pragma Inline (Flag159);
--- 1494,1518 ----
        pragma Inline (Flag151);
  
        function Flag152 (N : Node_Id) return Boolean;
!       pragma Inline (Flag152);
  
        function Flag153 (N : Node_Id) return Boolean;
!       pragma Inline (Flag153);
  
        function Flag154 (N : Node_Id) return Boolean;
!       pragma Inline (Flag154);
  
        function Flag155 (N : Node_Id) return Boolean;
!       pragma Inline (Flag155);
  
        function Flag156 (N : Node_Id) return Boolean;
!       pragma Inline (Flag156);
  
        function Flag157 (N : Node_Id) return Boolean;
!       pragma Inline (Flag157);
  
        function Flag158 (N : Node_Id) return Boolean;
!       pragma Inline (Flag158);
  
        function Flag159 (N : Node_Id) return Boolean;
        pragma Inline (Flag159);
*************** package Atree is
*** 1568,1573 ****
--- 1589,1690 ----
        function Flag183 (N : Node_Id) return Boolean;
        pragma Inline (Flag183);
  
+       function Flag184 (N : Node_Id) return Boolean;
+       pragma Inline (Flag184);
+ 
+       function Flag185 (N : Node_Id) return Boolean;
+       pragma Inline (Flag185);
+ 
+       function Flag186 (N : Node_Id) return Boolean;
+       pragma Inline (Flag186);
+ 
+       function Flag187 (N : Node_Id) return Boolean;
+       pragma Inline (Flag187);
+ 
+       function Flag188 (N : Node_Id) return Boolean;
+       pragma Inline (Flag188);
+ 
+       function Flag189 (N : Node_Id) return Boolean;
+       pragma Inline (Flag189);
+ 
+       function Flag190 (N : Node_Id) return Boolean;
+       pragma Inline (Flag190);
+ 
+       function Flag191 (N : Node_Id) return Boolean;
+       pragma Inline (Flag191);
+ 
+       function Flag192 (N : Node_Id) return Boolean;
+       pragma Inline (Flag192);
+ 
+       function Flag193 (N : Node_Id) return Boolean;
+       pragma Inline (Flag193);
+ 
+       function Flag194 (N : Node_Id) return Boolean;
+       pragma Inline (Flag194);
+ 
+       function Flag195 (N : Node_Id) return Boolean;
+       pragma Inline (Flag195);
+ 
+       function Flag196 (N : Node_Id) return Boolean;
+       pragma Inline (Flag196);
+ 
+       function Flag197 (N : Node_Id) return Boolean;
+       pragma Inline (Flag197);
+ 
+       function Flag198 (N : Node_Id) return Boolean;
+       pragma Inline (Flag198);
+ 
+       function Flag199 (N : Node_Id) return Boolean;
+       pragma Inline (Flag199);
+ 
+       function Flag200 (N : Node_Id) return Boolean;
+       pragma Inline (Flag200);
+ 
+       function Flag201 (N : Node_Id) return Boolean;
+       pragma Inline (Flag201);
+ 
+       function Flag202 (N : Node_Id) return Boolean;
+       pragma Inline (Flag202);
+ 
+       function Flag203 (N : Node_Id) return Boolean;
+       pragma Inline (Flag203);
+ 
+       function Flag204 (N : Node_Id) return Boolean;
+       pragma Inline (Flag204);
+ 
+       function Flag205 (N : Node_Id) return Boolean;
+       pragma Inline (Flag205);
+ 
+       function Flag206 (N : Node_Id) return Boolean;
+       pragma Inline (Flag206);
+ 
+       function Flag207 (N : Node_Id) return Boolean;
+       pragma Inline (Flag207);
+ 
+       function Flag208 (N : Node_Id) return Boolean;
+       pragma Inline (Flag208);
+ 
+       function Flag209 (N : Node_Id) return Boolean;
+       pragma Inline (Flag209);
+ 
+       function Flag210 (N : Node_Id) return Boolean;
+       pragma Inline (Flag210);
+ 
+       function Flag211 (N : Node_Id) return Boolean;
+       pragma Inline (Flag211);
+ 
+       function Flag212 (N : Node_Id) return Boolean;
+       pragma Inline (Flag212);
+ 
+       function Flag213 (N : Node_Id) return Boolean;
+       pragma Inline (Flag213);
+ 
+       function Flag214 (N : Node_Id) return Boolean;
+       pragma Inline (Flag214);
+ 
+       function Flag215 (N : Node_Id) return Boolean;
+       pragma Inline (Flag215);
+ 
        --  Procedures to set value of indicated field
  
        procedure Set_Nkind (N : Node_Id; Val : Node_Kind);
*************** package Atree is
*** 1642,1647 ****
--- 1759,1776 ----
        procedure Set_Field23 (N : Node_Id; Val : Union_Id);
        pragma Inline (Set_Field23);
  
+       procedure Set_Field24 (N : Node_Id; Val : Union_Id);
+       pragma Inline (Set_Field24);
+ 
+       procedure Set_Field25 (N : Node_Id; Val : Union_Id);
+       pragma Inline (Set_Field25);
+ 
+       procedure Set_Field26 (N : Node_Id; Val : Union_Id);
+       pragma Inline (Set_Field26);
+ 
+       procedure Set_Field27 (N : Node_Id; Val : Union_Id);
+       pragma Inline (Set_Field27);
+ 
        procedure Set_Node1 (N : Node_Id; Val : Node_Id);
        pragma Inline (Set_Node1);
  
*************** package Atree is
*** 1711,1716 ****
--- 1840,1857 ----
        procedure Set_Node23 (N : Node_Id; Val : Node_Id);
        pragma Inline (Set_Node23);
  
+       procedure Set_Node24 (N : Node_Id; Val : Node_Id);
+       pragma Inline (Set_Node24);
+ 
+       procedure Set_Node25 (N : Node_Id; Val : Node_Id);
+       pragma Inline (Set_Node25);
+ 
+       procedure Set_Node26 (N : Node_Id; Val : Node_Id);
+       pragma Inline (Set_Node26);
+ 
+       procedure Set_Node27 (N : Node_Id; Val : Node_Id);
+       pragma Inline (Set_Node27);
+ 
        procedure Set_List1 (N : Node_Id; Val : List_Id);
        pragma Inline (Set_List1);
  
*************** package Atree is
*** 1768,1779 ****
        procedure Set_Name2 (N : Node_Id; Val : Name_Id);
        pragma Inline (Set_Name2);
  
-       procedure Set_Char_Code2 (N : Node_Id; Val : Char_Code);
-       pragma Inline (Set_Char_Code2);
- 
        procedure Set_Str3 (N : Node_Id; Val : String_Id);
        pragma Inline (Set_Str3);
  
        procedure Set_Uint3 (N : Node_Id; Val : Uint);
        pragma Inline (Set_Uint3);
  
--- 1909,1920 ----
        procedure Set_Name2 (N : Node_Id; Val : Name_Id);
        pragma Inline (Set_Name2);
  
        procedure Set_Str3 (N : Node_Id; Val : String_Id);
        pragma Inline (Set_Str3);
  
+       procedure Set_Uint2 (N : Node_Id; Val : Uint);
+       pragma Inline (Set_Uint2);
+ 
        procedure Set_Uint3 (N : Node_Id; Val : Uint);
        pragma Inline (Set_Uint3);
  
*************** package Atree is
*** 2365,2370 ****
--- 2506,2608 ----
        procedure Set_Flag183 (N : Node_Id; Val : Boolean);
        pragma Inline (Set_Flag183);
  
+       procedure Set_Flag184 (N : Node_Id; Val : Boolean);
+       pragma Inline (Set_Flag184);
+ 
+       procedure Set_Flag185 (N : Node_Id; Val : Boolean);
+       pragma Inline (Set_Flag185);
+ 
+       procedure Set_Flag186 (N : Node_Id; Val : Boolean);
+       pragma Inline (Set_Flag186);
+ 
+       procedure Set_Flag187 (N : Node_Id; Val : Boolean);
+       pragma Inline (Set_Flag187);
+ 
+       procedure Set_Flag188 (N : Node_Id; Val : Boolean);
+       pragma Inline (Set_Flag188);
+ 
+       procedure Set_Flag189 (N : Node_Id; Val : Boolean);
+       pragma Inline (Set_Flag189);
+ 
+       procedure Set_Flag190 (N : Node_Id; Val : Boolean);
+       pragma Inline (Set_Flag190);
+ 
+       procedure Set_Flag191 (N : Node_Id; Val : Boolean);
+       pragma Inline (Set_Flag191);
+ 
+       procedure Set_Flag192 (N : Node_Id; Val : Boolean);
+       pragma Inline (Set_Flag192);
+ 
+       procedure Set_Flag193 (N : Node_Id; Val : Boolean);
+       pragma Inline (Set_Flag193);
+ 
+       procedure Set_Flag194 (N : Node_Id; Val : Boolean);
+       pragma Inline (Set_Flag194);
+ 
+       procedure Set_Flag195 (N : Node_Id; Val : Boolean);
+       pragma Inline (Set_Flag195);
+ 
+       procedure Set_Flag196 (N : Node_Id; Val : Boolean);
+       pragma Inline (Set_Flag196);
+ 
+       procedure Set_Flag197 (N : Node_Id; Val : Boolean);
+       pragma Inline (Set_Flag197);
+ 
+       procedure Set_Flag198 (N : Node_Id; Val : Boolean);
+       pragma Inline (Set_Flag198);
+ 
+       procedure Set_Flag199 (N : Node_Id; Val : Boolean);
+       pragma Inline (Set_Flag199);
+ 
+       procedure Set_Flag200 (N : Node_Id; Val : Boolean);
+       pragma Inline (Set_Flag200);
+ 
+       procedure Set_Flag201 (N : Node_Id; Val : Boolean);
+       pragma Inline (Set_Flag201);
+ 
+       procedure Set_Flag202 (N : Node_Id; Val : Boolean);
+       pragma Inline (Set_Flag202);
+ 
+       procedure Set_Flag203 (N : Node_Id; Val : Boolean);
+       pragma Inline (Set_Flag203);
+ 
+       procedure Set_Flag204 (N : Node_Id; Val : Boolean);
+       pragma Inline (Set_Flag204);
+ 
+       procedure Set_Flag205 (N : Node_Id; Val : Boolean);
+       pragma Inline (Set_Flag205);
+ 
+       procedure Set_Flag206 (N : Node_Id; Val : Boolean);
+       pragma Inline (Set_Flag206);
+ 
+       procedure Set_Flag207 (N : Node_Id; Val : Boolean);
+       pragma Inline (Set_Flag207);
+ 
+       procedure Set_Flag208 (N : Node_Id; Val : Boolean);
+       pragma Inline (Set_Flag208);
+ 
+       procedure Set_Flag209 (N : Node_Id; Val : Boolean);
+       pragma Inline (Set_Flag209);
+ 
+       procedure Set_Flag210 (N : Node_Id; Val : Boolean);
+       pragma Inline (Set_Flag210);
+ 
+       procedure Set_Flag211 (N : Node_Id; Val : Boolean);
+       pragma Inline (Set_Flag211);
+ 
+       procedure Set_Flag212 (N : Node_Id; Val : Boolean);
+       pragma Inline (Set_Flag212);
+ 
+       procedure Set_Flag213 (N : Node_Id; Val : Boolean);
+       pragma Inline (Set_Flag213);
+ 
+       procedure Set_Flag214 (N : Node_Id; Val : Boolean);
+       pragma Inline (Set_Flag214);
+ 
+       procedure Set_Flag215 (N : Node_Id; Val : Boolean);
+       pragma Inline (Set_Flag215);
+ 
+ 
        --  The following versions of Set_Noden also set the parent
        --  pointer of the referenced node if it is non_Empty
  
*************** package Atree is
*** 2482,2488 ****
           --  The eighteen flags for a normal node
  
           --  The above fields are used as follows in components 2-4 of
!          --  an extended node entry.
  
           --    In_List            used as  Flag19, Flag40, Flag129
           --    Unused_1           used as  Flag20, Flag41, Flag130
--- 2720,2727 ----
           --  The eighteen flags for a normal node
  
           --  The above fields are used as follows in components 2-4 of
!          --  an extended node entry. These fields are not currently
!          --  used in component 5 (where we still have lots of room!)
  
           --    In_List            used as  Flag19, Flag40, Flag129
           --    Unused_1           used as  Flag20, Flag41, Flag130
*************** package Atree is
*** 2540,2548 ****
                 Field4 : Union_Id;
                 Field5 : Union_Id;
                 --  Five general use fields, which can contain Node_Id, List_Id,
!                --  Elist_Id, String_Id, Name_Id, or Char_Code values depending
!                --  on the values in Nkind and (for extended nodes), in Ekind.
!                --  See packages Sinfo and Einfo for details of their use.
  
              --  Extension (second component) of extended node
  
--- 2779,2787 ----
                 Field4 : Union_Id;
                 Field5 : Union_Id;
                 --  Five general use fields, which can contain Node_Id, List_Id,
!                --  Elist_Id, String_Id, or Name_Id values depending on the
!                --  values in Nkind and (for extended nodes), in Ekind. See
!                --  packages Sinfo and Einfo for details of their use.
  
              --  Extension (second component) of extended node
  
*************** package Atree is
*** 2570,2578 ****
              --  as follows:
  
              --    Field6-10      Holds Field19-Field23
!             --    Field11        Holds Flag152-Flag167 (16 bits unused)
              --    Field12        Holds Flag97-Flag128
  
           end case;
        end record;
  
--- 2809,2826 ----
              --  as follows:
  
              --    Field6-10      Holds Field19-Field23
!             --    Field11        Holds Flag152-Flag183
              --    Field12        Holds Flag97-Flag128
  
+             --  In the fifth component, the extension format as described
+             --  above is used to hold additional general fields and flags
+             --  as follows:
+ 
+             --    Field6-9       Holds Field24-Field27
+             --    Field10        currently unused, reserved for expansion
+             --    Field11        Holds Flag184-Flag215
+             --    Field12        currently unused, reserved for expansion
+ 
           end case;
        end record;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/atree.h gcc-4.0.0/gcc/ada/atree.h
*** gcc-3.4.3/gcc/ada/atree.h	Fri Oct 24 13:02:42 2003
--- gcc-4.0.0/gcc/ada/atree.h	Thu Feb 10 13:50:42 2005
***************
*** 6,12 ****
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 1992-2003, Free Software Foundation, Inc.         *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
--- 6,12 ----
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 1992-2005, Free Software Foundation, Inc.         *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
*************** struct Flag_Word3
*** 216,221 ****
--- 216,261 ----
    Boolean      flag183	    :  1;
  };
  
+ /* Structure used for extra flags in fifth component overlaying Field11 */
+ struct Flag_Word4
+ {
+   Boolean      flag184	    :  1;
+   Boolean      flag185	    :  1;
+   Boolean      flag186	    :  1;
+   Boolean      flag187	    :  1;
+   Boolean      flag188	    :  1;
+   Boolean      flag189	    :  1;
+   Boolean      flag190	    :  1;
+   Boolean      flag191	    :  1;
+ 
+   Boolean      flag192	    :  1;
+   Boolean      flag193	    :  1;
+   Boolean      flag194	    :  1;
+   Boolean      flag195	    :  1;
+   Boolean      flag196	    :  1;
+   Boolean      flag197	    :  1;
+   Boolean      flag198	    :  1;
+   Boolean      flag199	    :  1;
+ 
+   Boolean      flag200	    :  1;
+   Boolean      flag201	    :  1;
+   Boolean      flag202	    :  1;
+   Boolean      flag203	    :  1;
+   Boolean      flag204	    :  1;
+   Boolean      flag205	    :  1;
+   Boolean      flag206	    :  1;
+   Boolean      flag207	    :  1;
+ 
+   Boolean      flag208      :  1;
+   Boolean      flag209	    :  1;
+   Boolean      flag210	    :  1;
+   Boolean      flag211	    :  1;
+   Boolean      flag212	    :  1;
+   Boolean      flag213	    :  1;
+   Boolean      flag214	    :  1;
+   Boolean      flag215	    :  1;
+ };
+ 
  struct Non_Extended
  {
    Source_Ptr   sloc;
*************** struct Extended
*** 238,251 ****
    union
      {
        Int      field11;
!       struct Flag_Word3 fw3;
      } X;
  
    union
      {
        Int      field12;
!       struct Flag_Word fw;
!       struct Flag_Word2 fw2;
      } U;
  };
  
--- 278,292 ----
    union
      {
        Int      field11;
!       struct   Flag_Word3 fw3;
!       struct   Flag_Word4 fw4;
      } X;
  
    union
      {
        Int      field12;
!       struct   Flag_Word fw;
!       struct   Flag_Word2 fw2;
      } U;
  };
  
*************** struct Node
*** 272,278 ****
     that Node_Id values can be used as subscripts.  */
  extern struct Node *Nodes_Ptr;
  
- 
  #define Parent atree__parent
  extern Node_Id Parent (Node_Id);
  
--- 313,318 ----
*************** extern Node_Id Current_Error_Node;
*** 338,343 ****
--- 378,387 ----
  #define Field21(N)    (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.field8)
  #define Field22(N)    (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.field9)
  #define Field23(N)    (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.field10)
+ #define Field24(N)    (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.field6)
+ #define Field25(N)    (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.field7)
+ #define Field26(N)    (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.field8)
+ #define Field27(N)    (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.field9)
  
  #define Node1(N)      Field1  (N)
  #define Node2(N)      Field2  (N)
*************** extern Node_Id Current_Error_Node;
*** 362,367 ****
--- 406,415 ----
  #define Node21(N)     Field21 (N)
  #define Node22(N)     Field22 (N)
  #define Node23(N)     Field23 (N)
+ #define Node24(N)     Field24 (N)
+ #define Node25(N)     Field25 (N)
+ #define Node26(N)     Field26 (N)
+ #define Node27(N)     Field27 (N)
  
  #define List1(N)      Field1  (N)
  #define List2(N)      Field2  (N)
*************** extern Node_Id Current_Error_Node;
*** 388,393 ****
--- 436,442 ----
  
  #define Str3(N)       Field3  (N)
  
+ #define Uint2(N)      ((Field2  (N) == 0) ? Uint_0 : Field2  (N))
  #define Uint3(N)      ((Field3  (N) == 0) ? Uint_0 : Field3  (N))
  #define Uint4(N)      ((Field4  (N) == 0) ? Uint_0 : Field4  (N))
  #define Uint5(N)      ((Field5  (N) == 0) ? Uint_0 : Field5  (N))
*************** extern Node_Id Current_Error_Node;
*** 599,601 ****
--- 648,683 ----
  #define Flag181(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.X.fw3.flag181)
  #define Flag182(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.X.fw3.flag182)
  #define Flag183(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.X.fw3.flag183)
+ 
+ #define Flag184(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag184)
+ #define Flag185(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag185)
+ #define Flag186(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag186)
+ #define Flag187(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag187)
+ #define Flag188(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag188)
+ #define Flag189(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag189)
+ #define Flag190(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag190)
+ #define Flag191(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag191)
+ #define Flag192(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag192)
+ #define Flag193(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag193)
+ #define Flag194(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag194)
+ #define Flag195(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag195)
+ #define Flag196(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag196)
+ #define Flag197(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag197)
+ #define Flag198(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag198)
+ #define Flag199(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag199)
+ #define Flag200(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag200)
+ #define Flag201(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag201)
+ #define Flag202(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag202)
+ #define Flag203(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag203)
+ #define Flag204(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag204)
+ #define Flag205(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag205)
+ #define Flag206(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag206)
+ #define Flag207(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag207)
+ #define Flag208(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag208)
+ #define Flag209(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag209)
+ #define Flag210(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag210)
+ #define Flag211(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag211)
+ #define Flag212(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag212)
+ #define Flag213(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag213)
+ #define Flag214(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag214)
+ #define Flag215(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag215)
diff -Nrcpad gcc-3.4.3/gcc/ada/back_end.adb gcc-4.0.0/gcc/ada/back_end.adb
*** gcc-3.4.3/gcc/ada/back_end.adb	Wed Dec  3 11:47:52 2003
--- gcc-4.0.0/gcc/ada/back_end.adb	Wed Dec  8 11:25:14 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Back_End is
*** 207,217 ****
              Last := Last - 1;
           end if;
  
!          --  For dumpbase and o, skip following argument and do not
           --  store either the switch or the following argument
  
           if Switch_Chars (First .. Last) = "o"
              or else Switch_Chars (First .. Last) = "dumpbase"
  
           then
              Next_Arg := Next_Arg + 1;
--- 207,218 ----
              Last := Last - 1;
           end if;
  
!          --  For these switches, skip following argument and do not
           --  store either the switch or the following argument
  
           if Switch_Chars (First .. Last) = "o"
              or else Switch_Chars (First .. Last) = "dumpbase"
+             or else Switch_Chars (First .. Last) = "-param"
  
           then
              Next_Arg := Next_Arg + 1;
diff -Nrcpad gcc-3.4.3/gcc/ada/bcheck.adb gcc-4.0.0/gcc/ada/bcheck.adb
*** gcc-3.4.3/gcc/ada/bcheck.adb	Tue Oct 21 13:41:58 2003
--- gcc-4.0.0/gcc/ada/bcheck.adb	Mon Jan  3 15:32:16 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Bcheck is
*** 51,63 ****
     procedure Check_Consistent_Interrupt_States;
     procedure Check_Consistent_Locking_Policy;
     procedure Check_Consistent_Normalize_Scalars;
-    procedure Check_Consistent_Partition_Restrictions;
     procedure Check_Consistent_Queuing_Policy;
     procedure Check_Consistent_Zero_Cost_Exception_Handling;
  
     procedure Consistency_Error_Msg (Msg : String);
!    --  Produce an error or a warning message, depending on whether
!    --  an inconsistent configuration is permitted or not.
  
     ------------------------------------
     -- Check_Consistent_Configuration --
--- 51,67 ----
     procedure Check_Consistent_Interrupt_States;
     procedure Check_Consistent_Locking_Policy;
     procedure Check_Consistent_Normalize_Scalars;
     procedure Check_Consistent_Queuing_Policy;
+    procedure Check_Consistent_Restrictions;
     procedure Check_Consistent_Zero_Cost_Exception_Handling;
  
     procedure Consistency_Error_Msg (Msg : String);
!    --  Produce an error or a warning message, depending on whether an
!    --  inconsistent configuration is permitted or not.
! 
!    function Same_Unit (U1 : Name_Id; U2 : Name_Id) return Boolean;
!    --  Used to compare two unit names for No_Dependence checks. U1 is in
!    --  standard unit name format, and U2 is in literal form with periods.
  
     ------------------------------------
     -- Check_Consistent_Configuration --
*************** package body Bcheck is
*** 84,90 ****
        Check_Consistent_Normalize_Scalars;
        Check_Consistent_Dynamic_Elaboration_Checking;
  
!       Check_Consistent_Partition_Restrictions;
        Check_Consistent_Interrupt_States;
     end Check_Configuration_Consistency;
  
--- 88,94 ----
        Check_Consistent_Normalize_Scalars;
        Check_Consistent_Dynamic_Elaboration_Checking;
  
!       Check_Consistent_Restrictions;
        Check_Consistent_Interrupt_States;
     end Check_Configuration_Consistency;
  
*************** package body Bcheck is
*** 362,545 ****
        end if;
     end Check_Consistent_Normalize_Scalars;
  
!    ---------------------------------------------
!    -- Check_Consistent_Partition_Restrictions --
!    ---------------------------------------------
! 
!    --  The rule is that if a restriction is specified in any unit,
!    --  then all units must obey the restriction. The check applies
!    --  only to restrictions which require partition wide consistency,
!    --  and not to internal units.
! 
!    --  The check is done in two steps. First for every restriction
!    --  a unit specifying that restriction is found, if any.
!    --  Second, all units are verified against the specified restrictions.
! 
!    procedure Check_Consistent_Partition_Restrictions is
!       No_Restriction_List : constant array (All_Restrictions) of Boolean :=
!         (No_Implicit_Conditionals => True,
!          --  This could modify and pessimize generated code
! 
!          No_Implicit_Dynamic_Code => True,
!          --  This could modify and pessimize generated code
! 
!          No_Implicit_Loops        => True,
!          --  This could modify and pessimize generated code
  
!          No_Recursion             => True,
!          --  Not checkable at compile time
  
!          No_Reentrancy            => True,
!          --  Not checkable at compile time
  
!          others                   => False);
!       --  Define those restrictions that should be output if the gnatbind -r
!       --  switch is used. Not all restrictions are output for the reasons given
!       --  above in the list, and this array is used to test whether the
!       --  corresponding pragma should be listed. True means that it should not
!       --  be listed.
  
!       R : array (All_Restrictions) of ALI_Id := (others => No_ALI_Id);
!       --  Record the first unit specifying each compilation unit restriction
  
!       V : array (All_Restrictions) of ALI_Id := (others => No_ALI_Id);
!       --  Record the last unit violating each partition restriction. Note
!       --  that entries in this array that do not correspond to partition
!       --  restrictions can never be modified.
  
!       Additional_Restrictions_Listed : Boolean := False;
!       --  Set True if we have listed header for restrictions
  
!    begin
!       --  Loop to find restrictions
  
!       for A in ALIs.First .. ALIs.Last loop
!          for J in All_Restrictions loop
!             if R (J) = No_ALI_Id and ALIs.Table (A).Restrictions (J) = 'r' then
!                R (J) := A;
!             end if;
!          end loop;
!       end loop;
  
!       --  Loop to find violations
  
!       for A in ALIs.First .. ALIs.Last loop
!          for J in All_Restrictions loop
!             if ALIs.Table (A).Restrictions (J) = 'v'
!                and then not Is_Internal_File_Name (ALIs.Table (A).Sfile)
!             then
!                --  A violation of a restriction was found
  
!                V (J) := A;
  
!                --  If this is a paritition restriction, and the restriction
!                --  was specified in some unit in the partition, then this
!                --  is a violation of the consistency requirement, so we
!                --  generate an appropriate error message.
  
!                if R (J) /= No_ALI_Id
!                  and then J in Partition_Restrictions
                 then
                    declare
!                      M1 : constant String := "% has Restriction (";
!                      S  : constant String := Restriction_Id'Image (J);
!                      M2 : String (1 .. M1'Length + S'Length + 1);
  
                    begin
                       Name_Buffer (1 .. S'Length) := S;
                       Name_Len := S'Length;
!                      Set_Casing
!                        (Units.Table (ALIs.Table (R (J)).First_Unit).Icasing);
  
                       M2 (M1'Range) := M1;
!                      M2 (M1'Length + 1 .. M2'Last - 1) :=
!                                                    Name_Buffer (1 .. S'Length);
!                      M2 (M2'Last) := ')';
  
-                      Error_Msg_Name_1 := ALIs.Table (R (J)).Sfile;
-                      Consistency_Error_Msg (M2);
                       Error_Msg_Name_1 := ALIs.Table (A).Sfile;
                       Consistency_Error_Msg
!                        ("but file % violates this restriction");
                    end;
                 end if;
!             end if;
!          end loop;
!       end loop;
  
!       --  List applicable restrictions if option set
  
!       if List_Restrictions then
  
!          --  List any restrictions which were not violated and not specified
  
!          for J in All_Restrictions loop
!             if V (J) = No_ALI_Id
!               and then R (J) = No_ALI_Id
!               and then not No_Restriction_List (J)
!             then
!                if not Additional_Restrictions_Listed then
!                   Write_Eol;
!                   Write_Line
!                     ("The following additional restrictions may be" &
!                      " applied to this partition:");
!                   Additional_Restrictions_Listed := True;
!                end if;
  
!                Write_Str ("pragma Restrictions (");
  
                 declare
!                   S : constant String := Restriction_Id'Image (J);
                 begin
!                   Name_Len := S'Length;
!                   Name_Buffer (1 .. Name_Len) := S;
                 end;
  
!                Set_Casing (Mixed_Case);
!                Write_Str (Name_Buffer (1 .. Name_Len));
!                Write_Str (");");
!                Write_Eol;
!             end if;
!          end loop;
!       end if;
!    end Check_Consistent_Partition_Restrictions;
  
!    -------------------------------------
!    -- Check_Consistent_Queuing_Policy --
!    -------------------------------------
  
!    --  The rule is that all files for which the queuing policy is
!    --  significant must be compiled with the same setting.
  
!    procedure Check_Consistent_Queuing_Policy is
     begin
!       --  First search for a unit specifying a policy and then
!       --  check all remaining units against it.
  
!       Find_Policy : for A1 in ALIs.First .. ALIs.Last loop
!          if ALIs.Table (A1).Queuing_Policy /= ' ' then
!             Check_Policy : declare
!                Policy : constant Character := ALIs.Table (A1).Queuing_Policy;
!             begin
!                for A2 in A1 + 1 .. ALIs.Last loop
!                   if ALIs.Table (A2).Queuing_Policy /= ' '
!                        and then
!                      ALIs.Table (A2).Queuing_Policy /= Policy
!                   then
!                      Error_Msg_Name_1 := ALIs.Table (A1).Sfile;
!                      Error_Msg_Name_2 := ALIs.Table (A2).Sfile;
  
!                      Consistency_Error_Msg
!                        ("% and % compiled with different queuing policies");
!                      exit Find_Policy;
!                   end if;
!                end loop;
!             end Check_Policy;
  
!             exit Find_Policy;
!          end if;
!       end loop Find_Policy;
!    end Check_Consistent_Queuing_Policy;
  
     ---------------------------------------------------
     -- Check_Consistent_Zero_Cost_Exception_Handling --
--- 366,606 ----
        end if;
     end Check_Consistent_Normalize_Scalars;
  
!    -------------------------------------
!    -- Check_Consistent_Queuing_Policy --
!    -------------------------------------
  
!    --  The rule is that all files for which the queuing policy is
!    --  significant must be compiled with the same setting.
  
!    procedure Check_Consistent_Queuing_Policy is
!    begin
!       --  First search for a unit specifying a policy and then
!       --  check all remaining units against it.
  
!       Find_Policy : for A1 in ALIs.First .. ALIs.Last loop
!          if ALIs.Table (A1).Queuing_Policy /= ' ' then
!             Check_Policy : declare
!                Policy : constant Character := ALIs.Table (A1).Queuing_Policy;
!             begin
!                for A2 in A1 + 1 .. ALIs.Last loop
!                   if ALIs.Table (A2).Queuing_Policy /= ' '
!                        and then
!                      ALIs.Table (A2).Queuing_Policy /= Policy
!                   then
!                      Error_Msg_Name_1 := ALIs.Table (A1).Sfile;
!                      Error_Msg_Name_2 := ALIs.Table (A2).Sfile;
  
!                      Consistency_Error_Msg
!                        ("% and % compiled with different queuing policies");
!                      exit Find_Policy;
!                   end if;
!                end loop;
!             end Check_Policy;
  
!             exit Find_Policy;
!          end if;
!       end loop Find_Policy;
!    end Check_Consistent_Queuing_Policy;
  
!    -----------------------------------
!    -- Check_Consistent_Restrictions --
!    -----------------------------------
  
!    --  The rule is that if a restriction is specified in any unit,
!    --  then all units must obey the restriction. The check applies
!    --  only to restrictions which require partition wide consistency,
!    --  and not to internal units.
  
!    procedure Check_Consistent_Restrictions is
!       Restriction_File_Output : Boolean;
!       --  Shows if we have output header messages for restriction violation
  
!       procedure Print_Restriction_File (R : All_Restrictions);
!       --  Print header line for R if not printed yet
  
!       ----------------------------
!       -- Print_Restriction_File --
!       ----------------------------
  
!       procedure Print_Restriction_File (R : All_Restrictions) is
!       begin
!          if not Restriction_File_Output then
!             Restriction_File_Output := True;
  
!             --  Find an ali file specifying the restriction
  
!             for A in ALIs.First .. ALIs.Last loop
!                if ALIs.Table (A).Restrictions.Set (R)
!                  and then (R in All_Boolean_Restrictions
!                              or else ALIs.Table (A).Restrictions.Value (R) =
!                                      Cumulative_Restrictions.Value (R))
                 then
+                   --  We have found that ALI file A specifies the restriction
+                   --  that is being violated (the minimum value is specified
+                   --  in the case of a parameter restriction).
+ 
                    declare
!                      M1 : constant String := "% has restriction ";
!                      S  : constant String := Restriction_Id'Image (R);
!                      M2 : String (1 .. 200); -- big enough!
!                      P  : Integer;
  
                    begin
                       Name_Buffer (1 .. S'Length) := S;
                       Name_Len := S'Length;
!                      Set_Casing (Mixed_Case);
  
                       M2 (M1'Range) := M1;
!                      P := M1'Length + 1;
!                      M2 (P .. P + S'Length - 1) := Name_Buffer (1 .. S'Length);
!                      P := P + S'Length;
! 
!                      if R in All_Parameter_Restrictions then
!                         M2 (P .. P + 4) := " => #";
!                         Error_Msg_Nat_1 :=
!                           Int (Cumulative_Restrictions.Value (R));
!                         P := P + 5;
!                      end if;
  
                       Error_Msg_Name_1 := ALIs.Table (A).Sfile;
+                      Consistency_Error_Msg (M2 (1 .. P - 1));
                       Consistency_Error_Msg
!                        ("but the following files violate this restriction:");
!                      return;
                    end;
                 end if;
!             end loop;
!          end if;
!       end Print_Restriction_File;
  
!    --  Start of processing for Check_Consistent_Restrictions
  
!    begin
!       --  Loop through all restriction violations
  
!       for R in All_Restrictions loop
  
!          --  Check for violation of this restriction
  
!          if Cumulative_Restrictions.Set (R)
!            and then Cumulative_Restrictions.Violated (R)
!            and then (R in Partition_Boolean_Restrictions
!                        or else (R in All_Parameter_Restrictions
!                                    and then
!                                      Cumulative_Restrictions.Count (R) >
!                                      Cumulative_Restrictions.Value (R)))
!          then
!             Restriction_File_Output := False;
  
+             --  Loop through files looking for violators
+ 
+             for A2 in ALIs.First .. ALIs.Last loop
                 declare
!                   T : ALIs_Record renames ALIs.Table (A2);
! 
                 begin
!                   if T.Restrictions.Violated (R) then
! 
!                      --  We exclude predefined files from the list of
!                      --  violators. This should be rethought. It is not
!                      --  clear that this is the right thing to do, that
!                      --  is particularly the case for restricted runtimes.
! 
!                      if not Is_Internal_File_Name (T.Sfile) then
! 
!                         --  Case of Boolean restriction, just print file name
! 
!                         if R in All_Boolean_Restrictions then
!                            Print_Restriction_File (R);
!                            Error_Msg_Name_1 := T.Sfile;
!                            Consistency_Error_Msg ("  %");
! 
!                         --  Case of Parameter restriction where violation
!                         --  count exceeds restriction value, print file
!                         --  name and count, adding "at least" if the
!                         --  exact count is not known.
! 
!                         elsif R in Checked_Add_Parameter_Restrictions
!                           or else T.Restrictions.Count (R) >
!                           Cumulative_Restrictions.Value (R)
!                         then
!                            Print_Restriction_File (R);
!                            Error_Msg_Name_1 := T.Sfile;
!                            Error_Msg_Nat_1 := Int (T.Restrictions.Count (R));
! 
!                            if T.Restrictions.Unknown (R) then
!                               Consistency_Error_Msg
!                                 ("  % (count = at least #)");
!                            else
!                               Consistency_Error_Msg
!                                 ("  % (count = #)");
!                            end if;
!                         end if;
!                      end if;
!                   end if;
                 end;
+             end loop;
+          end if;
+       end loop;
  
!       --  Now deal with No_Dependence indications. Note that we put the loop
!       --  through entries in the no dependency table first, since this loop
!       --  is most often empty (no such pragma Restrictions in use).
  
!       for ND in No_Deps.First .. No_Deps.Last loop
!          declare
!             ND_Unit : constant Name_Id := No_Deps.Table (ND).No_Dep_Unit;
  
!          begin
!             for J in ALIs.First .. ALIs.Last loop
!                declare
!                   A : ALIs_Record renames ALIs.Table (J);
  
!                begin
!                   for K in A.First_Unit .. A.Last_Unit loop
!                      declare
!                         U : Unit_Record renames Units.Table (K);
!                      begin
!                         for L in U.First_With .. U.Last_With loop
!                            if Same_Unit (Withs.Table (L).Uname, ND_Unit) then
!                               Error_Msg_Name_1 := U.Uname;
!                               Error_Msg_Name_2 := ND_Unit;
!                               Consistency_Error_Msg
!                                 ("unit & violates restriction " &
!                                  "No_Dependence => %");
!                            end if;
!                         end loop;
!                      end;
!                   end loop;
!                end;
!             end loop;
!          end;
!       end loop;
!    end Check_Consistent_Restrictions;
! 
!    ---------------
!    -- Same_Unit --
!    ---------------
! 
!    function Same_Unit (U1 : Name_Id; U2 : Name_Id) return Boolean is
     begin
!       --  Note, the string U1 has a terminating %s or %b, U2 does not
  
!       if Length_Of_Name (U1) - 2 = Length_Of_Name (U2) then
!          Get_Name_String (U1);
  
!          declare
!             U1_Str : constant String := Name_Buffer (1 .. Name_Len - 2);
!          begin
!             Get_Name_String (U2);
!             return U1_Str = Name_Buffer (1 .. Name_Len);
!          end;
  
!       else
!          return False;
!       end if;
!    end Same_Unit;
  
     ---------------------------------------------------
     -- Check_Consistent_Zero_Cost_Exception_Handling --
*************** package body Bcheck is
*** 572,577 ****
--- 633,640 ----
        Src : Source_Id;
        --  Source file Id for this Sdep entry
  
+       ALI_Path_Id : Name_Id;
+ 
     begin
        --  First, we go through the source table to see if there are any cases
        --  in which we should go after source files and compute checksums of
*************** package body Bcheck is
*** 655,672 ****
                    end if;
  
                 else
!                   if Osint.Is_Readonly_Library (ALIs.Table (A).Afile) then
!                      Error_Msg_Name_2 :=
!                        Osint.Find_File ((ALIs.Table (A).Afile), Osint.Library);
! 
                       if Tolerate_Consistency_Errors then
                          Error_Msg ("?% should be recompiled");
!                         Error_Msg_Name_1 := Error_Msg_Name_2;
                          Error_Msg ("?(% is obsolete and read-only)");
  
                       else
                          Error_Msg ("% must be compiled");
!                         Error_Msg_Name_1 := Error_Msg_Name_2;
                          Error_Msg ("(% is obsolete and read-only)");
                       end if;
  
--- 718,734 ----
                    end if;
  
                 else
!                   ALI_Path_Id :=
!                     Osint.Find_File ((ALIs.Table (A).Afile), Osint.Library);
!                   if Osint.Is_Readonly_Library (ALI_Path_Id) then
                       if Tolerate_Consistency_Errors then
                          Error_Msg ("?% should be recompiled");
!                         Error_Msg_Name_1 := ALI_Path_Id;
                          Error_Msg ("?(% is obsolete and read-only)");
  
                       else
                          Error_Msg ("% must be compiled");
!                         Error_Msg_Name_1 := ALI_Path_Id;
                          Error_Msg ("(% is obsolete and read-only)");
                       end if;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/binde.adb gcc-4.0.0/gcc/ada/binde.adb
*** gcc-3.4.3/gcc/ada/binde.adb	Tue Oct 21 13:41:58 2003
--- gcc-4.0.0/gcc/ada/binde.adb	Thu Feb 10 13:50:31 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Binde is
*** 770,776 ****
           --  Skip also if no ALI file for this with, happens with certain
           --  specialized generic files that do not get compiled.
  
!          if not Withs.Table (W).Interface
             and then Withs.Table (W).Afile /= No_File
             and then Generic_Separately_Compiled (Withs.Table (W).Sfile)
           then
--- 770,776 ----
           --  Skip also if no ALI file for this with, happens with certain
           --  specialized generic files that do not get compiled.
  
!          if not Withs.Table (W).SAL_Interface
             and then Withs.Table (W).Afile /= No_File
             and then Generic_Separately_Compiled (Withs.Table (W).Sfile)
           then
*************** package body Binde is
*** 1011,1017 ****
           --  there is a body and a spec, then spec must be elaborated first
           --  Note that the corresponding spec immediately follows the body
  
!          if not Units.Table (U).Interface
             and then Units.Table (U).Utype = Is_Body
           then
              Build_Link (Corresponding_Spec (U), U, Spec_First);
--- 1011,1017 ----
           --  there is a body and a spec, then spec must be elaborated first
           --  Note that the corresponding spec immediately follows the body
  
!          if not Units.Table (U).SAL_Interface
             and then Units.Table (U).Utype = Is_Body
           then
              Build_Link (Corresponding_Spec (U), U, Spec_First);
*************** package body Binde is
*** 1021,1032 ****
           --  process WITH references for this unit ignoring generic units and
           --  interfaces to stand-alone libraries.
  
!          if not Units.Table (U).Interface then
              for
                W in Units.Table (U).First_With .. Units.Table (U).Last_With
              loop
                 if Withs.Table (W).Sfile /= No_File
!                  and then (not Withs.Table (W).Interface)
                 then
                    --  Check for special case of withing a unit that does not
                    --  exist any more. If the unit was completely missing we
--- 1021,1032 ----
           --  process WITH references for this unit ignoring generic units and
           --  interfaces to stand-alone libraries.
  
!          if not Units.Table (U).SAL_Interface then
              for
                W in Units.Table (U).First_With .. Units.Table (U).Last_With
              loop
                 if Withs.Table (W).Sfile /= No_File
!                  and then (not Withs.Table (W).SAL_Interface)
                 then
                    --  Check for special case of withing a unit that does not
                    --  exist any more. If the unit was completely missing we
diff -Nrcpad gcc-3.4.3/gcc/ada/bindgen.adb gcc-4.0.0/gcc/ada/bindgen.adb
*** gcc-3.4.3/gcc/ada/bindgen.adb	Mon Jan  5 15:20:43 2004
--- gcc-4.0.0/gcc/ada/bindgen.adb	Thu Feb 10 13:50:32 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 26,32 ****
  
  with ALI;         use ALI;
  with Binde;       use Binde;
- with Butil;       use Butil;
  with Casing;      use Casing;
  with Fname;       use Fname;
  with GNAT.OS_Lib; use GNAT.OS_Lib;
--- 26,31 ----
*************** package body Bindgen is
*** 80,85 ****
--- 79,172 ----
       Table_Increment      => 200,
       Table_Name           => "IS_Pragma_Settings");
  
+    ----------------------
+    -- Run-Time Globals --
+    ----------------------
+ 
+    --  This section documents the global variables that are passed to the
+    --  run time from the generated binder file. The call that is made is
+    --  to the routine Set_Globals, which has the following spec:
+ 
+    --   procedure Set_Globals
+    --     (Main_Priority            : Integer;
+    --      Time_Slice_Value         : Integer;
+    --      WC_Encoding              : Character;
+    --      Locking_Policy           : Character;
+    --      Queuing_Policy           : Character;
+    --      Task_Dispatching_Policy  : Character;
+    --      Restrictions             : System.Address;
+    --      Interrupt_States         : System.Address;
+    --      Num_Interrupt_States     : Integer;
+    --      Unreserve_All_Interrupts : Integer;
+    --      Exception_Tracebacks     : Integer;
+    --      Zero_Cost_Exceptions     : Integer;
+    --      Detect_Blocking          : Integer);
+ 
+    --  Main_Priority is the priority value set by pragma Priority in the
+    --  main program. If no such pragma is present, the value is -1.
+ 
+    --  Time_Slice_Value is the time slice value set by pragma Time_Slice
+    --  in the main program, or by the use of a -Tnnn parameter for the
+    --  binder (if both are present, the binder value overrides). The
+    --  value is in milliseconds. A value of zero indicates that time
+    --  slicing should be suppressed. If no pragma is present, and no
+    --  -T switch was used, the value is -1.
+ 
+    --  WC_Encoding shows the wide character encoding method used for
+    --  the main program. This is one of the encoding letters defined
+    --  in System.WCh_Con.WC_Encoding_Letters.
+ 
+    --  Locking_Policy is a space if no locking policy was specified
+    --  for the partition. If a locking policy was specified, the value
+    --  is the upper case first character of the locking policy name,
+    --  for example, 'C' for Ceiling_Locking.
+ 
+    --  Queuing_Policy is a space if no queuing policy was specified
+    --  for the partition. If a queuing policy was specified, the value
+    --  is the upper case first character of the queuing policy name
+    --  for example, 'F' for FIFO_Queuing.
+ 
+    --  Task_Dispatching_Policy is a space if no task dispatching policy
+    --  was specified for the partition. If a task dispatching policy
+    --  was specified, the value is the upper case first character of
+    --  the policy name, e.g. 'F' for FIFO_Within_Priorities.
+ 
+    --  Restrictions is the address of a null-terminated string specifying the
+    --  restrictions information for the partition. The format is identical to
+    --  that of the parameter string found on R lines in ali files (see Lib.Writ
+    --  spec in lib-writ.ads for full details). The difference is that in this
+    --  context the values are the cumulative ones for the entire partition.
+ 
+    --  Interrupt_States is the address of a string used to specify the
+    --  cumulative results of Interrupt_State pragmas used in the partition.
+    --  The length of this string is determined by the last interrupt for which
+    --  such a pragma is given (the string will be a null string if no pragmas
+    --  were used). If pragma were present the entries apply to the interrupts
+    --  in sequence from the first interrupt, and are set to one of four
+    --  possible settings: 'n' for not specified, 'u' for user, 'r' for
+    --  run time, 's' for system, see description of Interrupt_State pragma
+    --  for further details.
+ 
+    --  Num_Interrupt_States is the length of the Interrupt_States string.
+    --  It will be set to zero if no Interrupt_State pragmas are present.
+ 
+    --  Unreserve_All_Interrupts is set to one if at least one unit in the
+    --  partition had a pragma Unreserve_All_Interrupts, and zero otherwise.
+ 
+    --  Exception_Tracebacks is set to one if the -E parameter was present
+    --  in the bind and to zero otherwise. Note that on some targets exception
+    --  tracebacks are provided by default, so a value of zero for this
+    --  parameter does not necessarily mean no trace backs are available.
+ 
+    --  Zero_Cost_Exceptions is set to one if zero cost exceptions are used for
+    --  this partition, and to zero if longjmp/setjmp exceptions are used.
+    --  the use of zero
+ 
+    --  Detect_Blocking indicates whether pragma Detect_Blocking is
+    --  active or not. A value of zero indicates that the pragma is not
+    --  present, while a value of 1 signals its presence in the
+    --  partition.
+ 
     -----------------------
     -- Local Subprograms --
     -----------------------
*************** package body Bindgen is
*** 141,146 ****
--- 228,243 ----
     procedure Gen_Output_File_C (Filename : String);
     --  Generate output file (C code case)
  
+    procedure Gen_Restrictions_String_1;
+    --  Generate first restrictions string, which consists of the parameters
+    --  the first R line, as described in lib-writ.ads, with the restrictions
+    --  being those for the entire partition (from Cumulative_Restrictions).
+ 
+    procedure Gen_Restrictions_String_2;
+    --  Generate first restrictions string, which consists of the parameters
+    --  the second R line, as described in lib-writ.ads, with the restrictions
+    --  being those for the entire partition (from Cumulative_Restrictions).
+ 
     procedure Gen_Versions_Ada;
     --  Output series of definitions for unit versions (Ada code case)
  
*************** package body Bindgen is
*** 182,187 ****
--- 279,287 ----
     --  Set given character in Statement_Buffer at the Last + 1 position
     --  and increment Last by one to reflect the stored character.
  
+    procedure Set_EA_Last;
+    --  Output the number of elements in array EA
+ 
     procedure Set_Int (N : Int);
     --  Set given value in decimal in Statement_Buffer with no spaces
     --  starting at the Last + 1 position, and updating Last past the value.
*************** package body Bindgen is
*** 242,247 ****
--- 342,352 ----
  
        if Hostparm.Java_VM then
           WBI ("      System.Standard_Library.Adafinal;");
+ 
+       --  If there is no finalization, there is nothing to do
+ 
+       elsif Cumulative_Restrictions.Set (No_Finalization) then
+          WBI ("      null;");
        else
           WBI ("      Do_Finalize;");
        end if;
*************** package body Bindgen is
*** 279,285 ****
              U    : Unit_Record renames Units.Table (Unum);
  
           begin
!             if U.Set_Elab_Entity and then not U.Interface then
                 Set_String ("      ");
                 Set_String ("E");
                 Set_Unit_Number (Unum);
--- 384,404 ----
              U    : Unit_Record renames Units.Table (Unum);
  
           begin
!             --  Check for Elab_Entity to be set for this unit
! 
!             if U.Set_Elab_Entity
! 
!             --  Don't generate reference for stand alone library
! 
!               and then not U.SAL_Interface
! 
!             --  Don't generate reference for predefined file in No_Run_Time
!             --  mode, since we don't include the object files in this case
! 
!               and then not
!                 (No_Run_Time_Mode
!                    and then Is_Predefined_File_Name (U.Sfile))
!             then
                 Set_String ("      ");
                 Set_String ("E");
                 Set_Unit_Number (Unum);
*************** package body Bindgen is
*** 358,370 ****
  
           Set_String ("      Restrictions : constant String :=");
           Write_Statement_Buffer;
-          Set_String ("        """);
  
!          for J in Restrictions'Range loop
!             Set_Char (Restrictions (J));
!          end loop;
  
!          Set_String (""";");
           Write_Statement_Buffer;
           WBI ("");
  
--- 477,491 ----
  
           Set_String ("      Restrictions : constant String :=");
           Write_Statement_Buffer;
  
!          Set_String ("        """);
!          Gen_Restrictions_String_1;
!          Set_String (""" &");
!          Write_Statement_Buffer;
  
!          Set_String ("        """);
!          Gen_Restrictions_String_2;
!          Set_String (""" & ASCII.Nul;");
           Write_Statement_Buffer;
           WBI ("");
  
*************** package body Bindgen is
*** 408,419 ****
           WBI ("         Locking_Policy           : Character;");
           WBI ("         Queuing_Policy           : Character;");
           WBI ("         Task_Dispatching_Policy  : Character;");
           WBI ("         Restrictions             : System.Address;");
           WBI ("         Interrupt_States         : System.Address;");
           WBI ("         Num_Interrupt_States     : Integer;");
           WBI ("         Unreserve_All_Interrupts : Integer;");
           WBI ("         Exception_Tracebacks     : Integer;");
!          WBI ("         Zero_Cost_Exceptions     : Integer);");
           WBI ("      pragma Import (C, Set_Globals, ""__gnat_set_globals"");");
  
           --  Import entry point for elaboration time signal handler
--- 529,542 ----
           WBI ("         Locking_Policy           : Character;");
           WBI ("         Queuing_Policy           : Character;");
           WBI ("         Task_Dispatching_Policy  : Character;");
+ 
           WBI ("         Restrictions             : System.Address;");
           WBI ("         Interrupt_States         : System.Address;");
           WBI ("         Num_Interrupt_States     : Integer;");
           WBI ("         Unreserve_All_Interrupts : Integer;");
           WBI ("         Exception_Tracebacks     : Integer;");
!          WBI ("         Zero_Cost_Exceptions     : Integer;");
!          WBI ("         Detect_Blocking          : Integer);");
           WBI ("      pragma Import (C, Set_Globals, ""__gnat_set_globals"");");
  
           --  Import entry point for elaboration time signal handler
*************** package body Bindgen is
*** 514,519 ****
--- 637,653 ----
              Set_String ("0");
           end if;
  
+          Set_String (",");
+          Write_Statement_Buffer;
+ 
+          Set_String ("         Detect_Blocking          => ");
+ 
+          if Detect_Blocking then
+             Set_Int (1);
+          else
+             Set_Int (0);
+          end if;
+ 
           Set_String (");");
           Write_Statement_Buffer;
  
*************** package body Bindgen is
*** 573,580 ****
           declare
              Unum : constant Unit_Id := Elab_Order.Table (E);
              U    : Unit_Record renames Units.Table (Unum);
           begin
!             if U.Set_Elab_Entity and then not U.Interface then
                 Set_String ("   extern char ");
                 Get_Name_String (U.Uname);
                 Set_Unit_Name;
--- 707,729 ----
           declare
              Unum : constant Unit_Id := Elab_Order.Table (E);
              U    : Unit_Record renames Units.Table (Unum);
+ 
           begin
!             --  Check for Elab entity to be set for this unit
! 
!             if U.Set_Elab_Entity
! 
!             --  Don't generate reference for stand alone library
! 
!               and then not U.SAL_Interface
! 
!             --  Don't generate reference for predefined file in No_Run_Time
!             --  mode, since we don't include the object files in this case
! 
!               and then not
!                 (No_Run_Time_Mode
!                    and then Is_Predefined_File_Name (U.Sfile))
!             then
                 Set_String ("   extern char ");
                 Get_Name_String (U.Uname);
                 Set_Unit_Name;
*************** package body Bindgen is
*** 606,616 ****
           --  Generate definition for restrictions string
  
           Set_String ("   const char *restrictions = """);
! 
!          for J in Restrictions'Range loop
!             Set_Char (Restrictions (J));
!          end loop;
! 
           Set_String (""";");
           Write_Statement_Buffer;
  
--- 755,762 ----
           --  Generate definition for restrictions string
  
           Set_String ("   const char *restrictions = """);
!          Gen_Restrictions_String_1;
!          Gen_Restrictions_String_2;
           Set_String (""";");
           Write_Statement_Buffer;
  
*************** package body Bindgen is
*** 735,744 ****
  
           Set_String ("      ");
           Set_Int    (Boolean'Pos (Zero_Cost_Exceptions_Specified));
!          Set_String (");");
           Tab_To (24);
           Set_String ("/* Zero_Cost_Exceptions       */");
           Write_Statement_Buffer;
           WBI ("");
  
           --  Install elaboration time signal handler
--- 881,903 ----
  
           Set_String ("      ");
           Set_Int    (Boolean'Pos (Zero_Cost_Exceptions_Specified));
!          Set_String (",");
           Tab_To (24);
           Set_String ("/* Zero_Cost_Exceptions       */");
           Write_Statement_Buffer;
+ 
+          Set_String ("      ");
+ 
+          if Detect_Blocking then
+             Set_Int (1);
+          else
+             Set_Int (0);
+          end if;
+ 
+          Set_String (");");
+          Tab_To (24);
+          Set_String ("/* Detect_Blocking            */");
+          Write_Statement_Buffer;
           WBI ("");
  
           --  Install elaboration time signal handler
*************** package body Bindgen is
*** 803,811 ****
                 Unum_Spec := Unum;
              end if;
  
              --  Case of no elaboration code
  
!             if U.No_Elab then
  
                 --  The only case in which we have to do something is if
                 --  this is a body, with a separate spec, where the separate
--- 962,975 ----
                 Unum_Spec := Unum;
              end if;
  
+             --  Nothing to do if predefined unit in no run time mode
+ 
+             if No_Run_Time_Mode and then Is_Predefined_File_Name (U.Sfile) then
+                null;
+ 
              --  Case of no elaboration code
  
!             elsif U.No_Elab then
  
                 --  The only case in which we have to do something is if
                 --  this is a body, with a separate spec, where the separate
*************** package body Bindgen is
*** 815,821 ****
                 --  to True, we do not need to test if this has already been
                 --  done, since it is quicker to set the flag than to test it.
  
!                if not U.Interface and then U.Utype = Is_Body
                   and then Units.Table (Unum_Spec).Set_Elab_Entity
                 then
                    Set_String ("      E");
--- 979,985 ----
                 --  to True, we do not need to test if this has already been
                 --  done, since it is quicker to set the flag than to test it.
  
!                if not U.SAL_Interface and then U.Utype = Is_Body
                   and then Units.Table (Unum_Spec).Set_Elab_Entity
                 then
                    Set_String ("      E");
*************** package body Bindgen is
*** 840,846 ****
              --  The uname_E assignment is skipped if this is a separate spec,
              --  since the assignment will be done when we process the body.
  
!             elsif not U.Interface then
                 if Force_Checking_Of_Elaboration_Flags or
                    Interface_Library_Unit or
                    (not Bind_Main_Program)
--- 1004,1010 ----
              --  The uname_E assignment is skipped if this is a separate spec,
              --  since the assignment will be done when we process the body.
  
!             elsif not U.SAL_Interface then
                 if Force_Checking_Of_Elaboration_Flags or
                    Interface_Library_Unit or
                    (not Bind_Main_Program)
*************** package body Bindgen is
*** 898,904 ****
  
     procedure Gen_Elab_Calls_C is
     begin
- 
        for E in Elab_Order.First .. Elab_Order.Last loop
           declare
              Unum : constant Unit_Id := Elab_Order.Table (E);
--- 1062,1067 ----
*************** package body Bindgen is
*** 917,925 ****
                 Unum_Spec := Unum;
              end if;
  
              --  Case of no elaboration code
  
!             if U.No_Elab then
  
                 --  The only case in which we have to do something is if
                 --  this is a body, with a separate spec, where the separate
--- 1080,1093 ----
                 Unum_Spec := Unum;
              end if;
  
+             --  Nothing to do if predefined unit in no run time mode
+ 
+             if No_Run_Time_Mode and then Is_Predefined_File_Name (U.Sfile) then
+                null;
+ 
              --  Case of no elaboration code
  
!             elsif U.No_Elab then
  
                 --  The only case in which we have to do something is if
                 --  this is a body, with a separate spec, where the separate
*************** package body Bindgen is
*** 929,935 ****
                 --  to True, we do not need to test if this has already been
                 --  done, since it is quicker to set the flag than to test it.
  
!                if not U.Interface and then U.Utype = Is_Body
                   and then Units.Table (Unum_Spec).Set_Elab_Entity
                 then
                    Set_String ("   ");
--- 1097,1103 ----
                 --  to True, we do not need to test if this has already been
                 --  done, since it is quicker to set the flag than to test it.
  
!                if not U.SAL_Interface and then U.Utype = Is_Body
                   and then Units.Table (Unum_Spec).Set_Elab_Entity
                 then
                    Set_String ("   ");
*************** package body Bindgen is
*** 950,956 ****
              --  The uname_E assignment is skipped if this is a separate spec,
              --  since the assignment will be done when we process the body.
  
!             elsif not U.Interface then
                 Get_Name_String (U.Uname);
  
                 if Force_Checking_Of_Elaboration_Flags or
--- 1118,1124 ----
              --  The uname_E assignment is skipped if this is a separate spec,
              --  since the assignment will be done when we process the body.
  
!             elsif not U.SAL_Interface then
                 Get_Name_String (U.Uname);
  
                 if Force_Checking_Of_Elaboration_Flags or
*************** package body Bindgen is
*** 1034,1040 ****
  
        for J in Elab_Order.First .. Elab_Order.Last loop
           Set_String ("   --  ");
!          Get_Unit_Name_String (Units.Table (Elab_Order.Table (J)).Uname);
           Set_Name_Buffer;
           Write_Statement_Buffer;
        end loop;
--- 1202,1208 ----
  
        for J in Elab_Order.First .. Elab_Order.Last loop
           Set_String ("   --  ");
!          Get_Name_String (Units.Table (Elab_Order.Table (J)).Uname);
           Set_Name_Buffer;
           Write_Statement_Buffer;
        end loop;
*************** package body Bindgen is
*** 1052,1058 ****
        WBI ("/* BEGIN ELABORATION ORDER");
  
        for J in Elab_Order.First .. Elab_Order.Last loop
!          Get_Unit_Name_String (Units.Table (Elab_Order.Table (J)).Uname);
           Set_Name_Buffer;
           Write_Statement_Buffer;
        end loop;
--- 1220,1226 ----
        WBI ("/* BEGIN ELABORATION ORDER");
  
        for J in Elab_Order.First .. Elab_Order.Last loop
!          Get_Name_String (Units.Table (Elab_Order.Table (J)).Uname);
           Set_Name_Buffer;
           Write_Statement_Buffer;
        end loop;
*************** package body Bindgen is
*** 1102,1108 ****
  
        Num := 0;
        for A in ALIs.First .. ALIs.Last loop
!          if not ALIs.Table (A).Interface
             and then ALIs.Table (A).Unit_Exception_Table
           then
              Num := Num + 1;
--- 1270,1276 ----
  
        Num := 0;
        for A in ALIs.First .. ALIs.Last loop
!          if not ALIs.Table (A).SAL_Interface
             and then ALIs.Table (A).Unit_Exception_Table
           then
              Num := Num + 1;
*************** package body Bindgen is
*** 1133,1177 ****
        Set_String (") of System.Address := (");
  
        if Num = 1 then
!          Set_String ("1 => A1);");
!          Write_Statement_Buffer;
  
        else
           Write_Statement_Buffer;
  
!          for A in ALIs.First .. ALIs.Last loop
!             if not ALIs.Table (A).Interface
!               and then ALIs.Table (A).Unit_Exception_Table
!             then
!                Get_Decoded_Name_String_With_Brackets
!                  (Units.Table (ALIs.Table (A).First_Unit).Uname);
!                Set_Casing (Mixed_Case);
                 Set_String ("        ");
!                Set_String (Name_Buffer (1 .. Name_Len - 2));
!                Set_String ("'UET_Address");
  
!                if A = Last then
!                   Set_String (");");
!                else
!                   Set_Char (',');
!                end if;
  
!                Write_Statement_Buffer;
              end if;
!          end loop;
!       end if;
  
        WBI (" ");
        Set_String ("      EA : aliased constant array (1 .. ");
!       Set_Int (Num_Elab_Calls + 2);
        Set_String (") of System.Address := (");
        Write_Statement_Buffer;
!       WBI ("        " & Ada_Init_Name.all & "'Code_Address,");
  
        --  If compiling for the JVM, we directly reference Adafinal because
        --  we don't import it via Do_Finalize (see Gen_Output_File_Ada).
  
!       if not Restrictions_On_Target (No_Finalization) then
           if Hostparm.Java_VM then
              Set_String
                ("        System.Standard_Library.Adafinal'Code_Address");
--- 1301,1351 ----
        Set_String (") of System.Address := (");
  
        if Num = 1 then
!          Set_String ("1 => ");
  
        else
           Write_Statement_Buffer;
+       end if;
  
!       for A in ALIs.First .. ALIs.Last loop
!          if not ALIs.Table (A).SAL_Interface
!            and then ALIs.Table (A).Unit_Exception_Table
!          then
!             Get_Decoded_Name_String_With_Brackets
!               (Units.Table (ALIs.Table (A).First_Unit).Uname);
!             Set_Casing (Mixed_Case);
! 
!             if Num /= 1 then
                 Set_String ("        ");
!             end if;
  
!             Set_String (Name_Buffer (1 .. Name_Len - 2));
!             Set_String ("'UET_Address");
  
!             if A = Last then
!                Set_String (");");
!             else
!                Set_Char (',');
              end if;
! 
!             Write_Statement_Buffer;
!          end if;
!       end loop;
  
        WBI (" ");
        Set_String ("      EA : aliased constant array (1 .. ");
!       Set_EA_Last;
        Set_String (") of System.Address := (");
        Write_Statement_Buffer;
!       Set_String ("        " & Ada_Init_Name.all & "'Code_Address");
  
        --  If compiling for the JVM, we directly reference Adafinal because
        --  we don't import it via Do_Finalize (see Gen_Output_File_Ada).
  
!       if not Cumulative_Restrictions.Set (No_Finalization) then
!          Set_Char (',');
!          Write_Statement_Buffer;
! 
           if Hostparm.Java_VM then
              Set_String
                ("        System.Standard_Library.Adafinal'Code_Address");
*************** package body Bindgen is
*** 1216,1222 ****
        Set_String ("      SDP_Table_Build (ST'Address, ");
        Set_Int (Num);
        Set_String (", EA'Address, ");
!       Set_Int (Num_Elab_Calls + 2);
        Set_String (");");
        Write_Statement_Buffer;
     end Gen_Exception_Table_Ada;
--- 1390,1396 ----
        Set_String ("      SDP_Table_Build (ST'Address, ");
        Set_Int (Num);
        Set_String (", EA'Address, ");
!       Set_EA_Last;
        Set_String (");");
        Write_Statement_Buffer;
     end Gen_Exception_Table_Ada;
*************** package body Bindgen is
*** 1262,1268 ****
  
        Num := 0;
        for A in ALIs.First .. ALIs.Last loop
!          if not ALIs.Table (A).Interface
             and then ALIs.Table (A).Unit_Exception_Table
           then
              Num := Num + 1;
--- 1436,1442 ----
  
        Num := 0;
        for A in ALIs.First .. ALIs.Last loop
!          if not ALIs.Table (A).SAL_Interface
             and then ALIs.Table (A).Unit_Exception_Table
           then
              Num := Num + 1;
*************** package body Bindgen is
*** 1292,1298 ****
  
        Num2 := 0;
        for A in ALIs.First .. ALIs.Last loop
!          if not ALIs.Table (A).Interface
             and then ALIs.Table (A).Unit_Exception_Table
           then
              Num2 := Num2 + 1;
--- 1466,1472 ----
  
        Num2 := 0;
        for A in ALIs.First .. ALIs.Last loop
!          if not ALIs.Table (A).SAL_Interface
             and then ALIs.Table (A).Unit_Exception_Table
           then
              Num2 := Num2 + 1;
*************** package body Bindgen is
*** 1331,1343 ****
  
        WBI ("");
        Set_String ("   void (*ea[");
!       Set_Int (Num_Elab_Calls + 2);
        Set_String ("]) () = {");
        Write_Statement_Buffer;
  
!       WBI ("     " & Ada_Init_Name.all & ",");
  
!       if not Restrictions_On_Target (No_Finalization) then
           Set_String ("     system__standard_library__adafinal");
        end if;
  
--- 1505,1519 ----
  
        WBI ("");
        Set_String ("   void (*ea[");
!       Set_EA_Last;
        Set_String ("]) () = {");
        Write_Statement_Buffer;
  
!       Set_String ("     " & Ada_Init_Name.all);
  
!       if not Cumulative_Restrictions.Set (No_Finalization) then
!          Set_Char (',');
!          Write_Statement_Buffer;
           Set_String ("     system__standard_library__adafinal");
        end if;
  
*************** package body Bindgen is
*** 1365,1371 ****
        Set_String ("   __gnat_SDP_Table_Build (&st, ");
        Set_Int (Num);
        Set_String (", ea, ");
!       Set_Int (Num_Elab_Calls + 2);
        Set_String (");");
        Write_Statement_Buffer;
     end Gen_Exception_Table_C;
--- 1541,1547 ----
        Set_String ("   __gnat_SDP_Table_Build (&st, ");
        Set_Int (Num);
        Set_String (", ea, ");
!       Set_EA_Last;
        Set_String (");");
        Write_Statement_Buffer;
     end Gen_Exception_Table_C;
*************** package body Bindgen is
*** 1408,1422 ****
           Write_Statement_Buffer;
        end if;
  
        --  Initialize and Finalize
  
!       if not Restrictions_On_Target (No_Finalization) then
!          WBI ("      procedure initialize;");
           WBI ("      pragma Import (C, initialize, ""__gnat_initialize"");");
           WBI ("");
           WBI ("      procedure finalize;");
           WBI ("      pragma Import (C, finalize, ""__gnat_finalize"");");
-          WBI ("");
        end if;
  
        --  Deal with declarations for main program case
--- 1584,1607 ----
           Write_Statement_Buffer;
        end if;
  
+       if Opt.Default_Exit_Status /= 0
+         and then Bind_Main_Program
+         and then not Configurable_Run_Time_Mode
+       then
+          WBI ("      procedure Set_Exit_Status (Status : Integer);");
+          WBI ("      pragma Import (C, Set_Exit_Status, " &
+                      """__gnat_set_exit_status"");");
+          WBI ("");
+       end if;
+ 
        --  Initialize and Finalize
  
!       if not Cumulative_Restrictions.Set (No_Finalization) then
!          WBI ("      procedure initialize (Addr : System.Address);");
           WBI ("      pragma Import (C, initialize, ""__gnat_initialize"");");
           WBI ("");
           WBI ("      procedure finalize;");
           WBI ("      pragma Import (C, finalize, ""__gnat_finalize"");");
        end if;
  
        --  Deal with declarations for main program case
*************** package body Bindgen is
*** 1454,1459 ****
--- 1639,1651 ----
  
           Write_Statement_Buffer;
           WBI ("");
+ 
+          if Bind_Main_Program
+            and then not Suppress_Standard_Library_On_Target
+          then
+             WBI ("      SEH : aliased array (1 .. 2) of Integer;");
+             WBI ("");
+          end if;
        end if;
  
        --  Generate a reference to Ada_Main_Program_Name. This symbol is
*************** package body Bindgen is
*** 1494,1501 ****
           WBI ("      gnat_envp := System.Null_Address;");
        end if;
  
!       if not Restrictions_On_Target (No_Finalization) then
!          WBI ("      Initialize;");
        end if;
  
        WBI ("      " & Ada_Init_Name.all & ";");
--- 1686,1711 ----
           WBI ("      gnat_envp := System.Null_Address;");
        end if;
  
!       if Opt.Default_Exit_Status /= 0
!         and then Bind_Main_Program
!         and then not Configurable_Run_Time_Mode
!       then
!          Set_String ("      Set_Exit_Status (");
!          Set_Int (Opt.Default_Exit_Status);
!          Set_String (");");
!          Write_Statement_Buffer;
!       end if;
! 
!       if not Cumulative_Restrictions.Set (No_Finalization) then
! 
!          if not No_Main_Subprogram
!            and then Bind_Main_Program
!            and then not Suppress_Standard_Library_On_Target
!          then
!             WBI ("      Initialize (SEH'Address);");
!          else
!             WBI ("      Initialize (System.Null_Address);");
!          end if;
        end if;
  
        WBI ("      " & Ada_Init_Name.all & ";");
*************** package body Bindgen is
*** 1512,1518 ****
  
        --  Adafinal call is skipped if no finalization
  
!       if not Restrictions_On_Target (No_Finalization) then
  
           --  If compiling for the JVM, we directly call Adafinal because
           --  we don't import it via Do_Finalize (see Gen_Output_File_Ada).
--- 1722,1728 ----
  
        --  Adafinal call is skipped if no finalization
  
!       if not Cumulative_Restrictions.Set (No_Finalization) then
  
           --  If compiling for the JVM, we directly call Adafinal because
           --  we don't import it via Do_Finalize (see Gen_Output_File_Ada).
*************** package body Bindgen is
*** 1526,1532 ****
  
        --  Finalize is only called if we have a run time
  
!       if not Restrictions_On_Target (No_Finalization) then
           WBI ("      Finalize;");
        end if;
  
--- 1736,1742 ----
  
        --  Finalize is only called if we have a run time
  
!       if not Cumulative_Restrictions.Set (No_Finalization) then
           WBI ("      Finalize;");
        end if;
  
*************** package body Bindgen is
*** 1582,1587 ****
--- 1792,1804 ----
           WBI ("   char *ensure_reference __attribute__ ((__unused__)) = " &
                "__gnat_ada_main_program_name;");
           WBI ("");
+ 
+          if not Suppress_Standard_Library_On_Target
+            and then not No_Main_Subprogram
+          then
+             WBI ("   int SEH [2];");
+             WBI ("");
+          end if;
        end if;
  
        --  If main program is a function, generate result variable
*************** package body Bindgen is
*** 1614,1624 ****
           WBI ("   gnat_envp = 0;");
        end if;
  
        --  The __gnat_initialize routine is used only if we have a run-time
  
        if not Suppress_Standard_Library_On_Target then
!          WBI
!           ("   __gnat_initialize ();");
        end if;
  
        WBI ("   " & Ada_Init_Name.all & " ();");
--- 1831,1854 ----
           WBI ("   gnat_envp = 0;");
        end if;
  
+       if Opt.Default_Exit_Status /= 0
+         and then Bind_Main_Program
+         and then not Configurable_Run_Time_Mode
+       then
+          Set_String ("   __gnat_set_exit_status (");
+          Set_Int (Opt.Default_Exit_Status);
+          Set_String (");");
+          Write_Statement_Buffer;
+       end if;
+ 
        --  The __gnat_initialize routine is used only if we have a run-time
  
        if not Suppress_Standard_Library_On_Target then
!          if not No_Main_Subprogram and then Bind_Main_Program then
!             WBI ("   __gnat_initialize ((void *)SEH);");
!          else
!             WBI ("   __gnat_initialize ((void *)0);");
!          end if;
        end if;
  
        WBI ("   " & Ada_Init_Name.all & " ();");
*************** package body Bindgen is
*** 1652,1658 ****
  
        --  Call adafinal if finalization active
  
!       if not Restrictions_On_Target (No_Finalization) then
           WBI (" ");
           WBI ("   system__standard_library__adafinal ();");
        end if;
--- 1882,1888 ----
  
        --  Call adafinal if finalization active
  
!       if not Cumulative_Restrictions.Set (No_Finalization) then
           WBI (" ");
           WBI ("   system__standard_library__adafinal ();");
        end if;
*************** package body Bindgen is
*** 1762,1768 ****
           --  If not spec that has an associated body, then generate a
           --  comment giving the name of the corresponding object file.
  
!          if (not Units.Table (Elab_Order.Table (E)).Interface)
             and then Units.Table (Elab_Order.Table (E)).Utype /= Is_Spec
           then
              Get_Name_String
--- 1992,1998 ----
           --  If not spec that has an associated body, then generate a
           --  comment giving the name of the corresponding object file.
  
!          if (not Units.Table (Elab_Order.Table (E)).SAL_Interface)
             and then Units.Table (Elab_Order.Table (E)).Utype /= Is_Spec
           then
              Get_Name_String
*************** package body Bindgen is
*** 1776,1781 ****
--- 2006,2012 ----
                or else GNAT.OS_Lib.Is_Regular_File (Name_Buffer (1 .. Name_Len))
              then
                 Write_Info_Ada_C ("   --   ", "", Name_Buffer (1 .. Name_Len));
+ 
                 if Output_Object_List then
                    Write_Str (Name_Buffer (1 .. Name_Len));
                    Write_Eol;
*************** package body Bindgen is
*** 1933,1938 ****
--- 2164,2170 ----
  
     procedure Gen_Output_File (Filename : String) is
        Is_Public_Version : constant Boolean := Get_Gnat_Build_Type = Public;
+       Is_GAP_Version    : constant Boolean := Get_Gnat_Build_Type = GAP;
  
     begin
        --  Acquire settings for Interrupt_State pragmas
*************** package body Bindgen is
*** 1966,1972 ****
  
        --  Get the time stamp of the former bind for public version warning
  
!       if Is_Public_Version then
           Record_Time_From_Last_Bind;
        end if;
  
--- 2198,2204 ----
  
        --  Get the time stamp of the former bind for public version warning
  
!       if Is_Public_Version or Is_GAP_Version then
           Record_Time_From_Last_Bind;
        end if;
  
*************** package body Bindgen is
*** 2011,2017 ****
        --  then we need to make sure that the binder program is compiled with
        --  the same restriction, so that no exception tables are generated.
  
!       if Restrictions_On_Target (No_Exception_Handlers) then
           WBI ("pragma Restrictions (No_Exception_Handlers);");
        end if;
  
--- 2243,2249 ----
        --  then we need to make sure that the binder program is compiled with
        --  the same restriction, so that no exception tables are generated.
  
!       if Cumulative_Restrictions.Set (No_Exception_Handlers) then
           WBI ("pragma Restrictions (No_Exception_Handlers);");
        end if;
  
*************** package body Bindgen is
*** 2113,2127 ****
              """__gnat_ada_main_program_name"");");
        end if;
  
!       --  No need to generate a finalization routine if finalization
!       --  is restricted, since there is nothing to do in this case.
! 
!       if not Restrictions_On_Target (No_Finalization) then
!          WBI ("");
!          WBI ("   procedure " & Ada_Final_Name.all & ";");
!          WBI ("   pragma Export (C, " & Ada_Final_Name.all & ", """ &
!               Ada_Final_Name.all & """);");
!       end if;
  
        WBI ("");
        WBI ("   procedure " & Ada_Init_Name.all & ";");
--- 2345,2354 ----
              """__gnat_ada_main_program_name"");");
        end if;
  
!       WBI ("");
!       WBI ("   procedure " & Ada_Final_Name.all & ";");
!       WBI ("   pragma Export (C, " & Ada_Final_Name.all & ", """ &
!            Ada_Final_Name.all & """);");
  
        WBI ("");
        WBI ("   procedure " & Ada_Init_Name.all & ";");
*************** package body Bindgen is
*** 2223,2229 ****
  
        --  Import the finalization procedure only if finalization active
  
!       if not Restrictions_On_Target (No_Finalization) then
  
           --  In the Java case, pragma Import C cannot be used, so the
           --  standard Ada constructs will be used instead.
--- 2450,2456 ----
  
        --  Import the finalization procedure only if finalization active
  
!       if not Cumulative_Restrictions.Set (No_Finalization) then
  
           --  In the Java case, pragma Import C cannot be used, so the
           --  standard Ada constructs will be used instead.
*************** package body Bindgen is
*** 2240,2250 ****
  
        Gen_Adainit_Ada;
  
!       --  No need to generate a finalization routine if no finalization
! 
!       if not Restrictions_On_Target (No_Finalization) then
!          Gen_Adafinal_Ada;
!       end if;
  
        if Bind_Main_Program then
  
--- 2467,2473 ----
  
        Gen_Adainit_Ada;
  
!       Gen_Adafinal_Ada;
  
        if Bind_Main_Program then
  
*************** package body Bindgen is
*** 2289,2295 ****
        WBI ("extern void __gnat_set_globals");
        WBI ("  (int, int, char, char, char, char,");
        WBI ("   const char *, const char *,");
!       WBI ("   int, int, int, int);");
        WBI ("extern void " & Ada_Final_Name.all & " (void);");
        WBI ("extern void " & Ada_Init_Name.all & " (void);");
        WBI ("extern void system__standard_library__adafinal (void);");
--- 2512,2518 ----
        WBI ("extern void __gnat_set_globals");
        WBI ("  (int, int, char, char, char, char,");
        WBI ("   const char *, const char *,");
!       WBI ("   int, int, int, int, int);");
        WBI ("extern void " & Ada_Final_Name.all & " (void);");
        WBI ("extern void " & Ada_Init_Name.all & " (void);");
        WBI ("extern void system__standard_library__adafinal (void);");
*************** package body Bindgen is
*** 2333,2339 ****
        end if;
  
        if not Suppress_Standard_Library_On_Target then
!          WBI ("extern void __gnat_initialize (void);");
           WBI ("extern void __gnat_finalize (void);");
           WBI ("extern void __gnat_install_handler (void);");
        end if;
--- 2556,2562 ----
        end if;
  
        if not Suppress_Standard_Library_On_Target then
!          WBI ("extern void __gnat_initialize (void *);");
           WBI ("extern void __gnat_finalize (void);");
           WBI ("extern void __gnat_install_handler (void);");
        end if;
*************** package body Bindgen is
*** 2361,2367 ****
              WBI ("extern int gnat_argc;");
              WBI ("extern char **gnat_argv;");
              WBI ("extern char **gnat_envp;");
-             WBI ("extern int gnat_exit_status;");
  
           --  If configurable run time and no command line args, then the
           --  generation of these variables is entirely suppressed.
--- 2584,2589 ----
*************** package body Bindgen is
*** 2376,2382 ****
              WBI ("int gnat_argc;");
              WBI ("char **gnat_argv;");
              WBI ("char **gnat_envp;");
-             WBI ("int gnat_exit_status = 0;");
           end if;
  
           --  Similarly deal with exit status
--- 2598,2603 ----
*************** package body Bindgen is
*** 2430,2436 ****
        --  Generate the adafinal routine. In no runtime mode, this is
        --  not needed, since there is no finalization to do.
  
!       if not Restrictions_On_Target (No_Finalization) then
           Gen_Adafinal_C;
        end if;
  
--- 2651,2657 ----
        --  Generate the adafinal routine. In no runtime mode, this is
        --  not needed, since there is no finalization to do.
  
!       if not Cumulative_Restrictions.Set (No_Finalization) then
           Gen_Adafinal_C;
        end if;
  
*************** package body Bindgen is
*** 2453,2458 ****
--- 2674,2725 ----
        Close_Binder_Output;
     end Gen_Output_File_C;
  
+    -------------------------------
+    -- Gen_Restrictions_String_1 --
+    -------------------------------
+ 
+    procedure Gen_Restrictions_String_1 is
+    begin
+       for R in All_Boolean_Restrictions loop
+          if Cumulative_Restrictions.Set (R) then
+             Set_Char ('r');
+          elsif Cumulative_Restrictions.Violated (R) then
+             Set_Char ('v');
+          else
+             Set_Char ('n');
+          end if;
+       end loop;
+    end Gen_Restrictions_String_1;
+ 
+    -------------------------------
+    -- Gen_Restrictions_String_2 --
+    -------------------------------
+ 
+    procedure Gen_Restrictions_String_2 is
+    begin
+       for RP in All_Parameter_Restrictions loop
+          if Cumulative_Restrictions.Set (RP) then
+             Set_Char ('r');
+             Set_Int (Int (Cumulative_Restrictions.Value (RP)));
+          else
+             Set_Char ('n');
+          end if;
+ 
+          if not Cumulative_Restrictions.Violated (RP)
+            or else RP not in Checked_Parameter_Restrictions
+          then
+             Set_Char ('n');
+          else
+             Set_Char ('v');
+             Set_Int (Int (Cumulative_Restrictions.Count (RP)));
+ 
+             if Cumulative_Restrictions.Unknown (RP) then
+                Set_Char ('+');
+             end if;
+          end if;
+       end loop;
+    end Gen_Restrictions_String_2;
+ 
     ----------------------
     -- Gen_Versions_Ada --
     ----------------------
*************** package body Bindgen is
*** 2846,2851 ****
--- 3113,3136 ----
        Statement_Buffer (Last) := C;
     end Set_Char;
  
+    -----------------
+    -- Set_EA_Last --
+    -----------------
+ 
+    procedure Set_EA_Last is
+    begin
+       --  When there is no finalization, only adainit is added
+ 
+       if Cumulative_Restrictions.Set (No_Finalization) then
+          Set_Int (Num_Elab_Calls + 1);
+ 
+       --  When there is finalization, both adainit and adafinal are added
+ 
+       else
+          Set_Int (Num_Elab_Calls + 2);
+       end if;
+    end Set_EA_Last;
+ 
     -------------
     -- Set_Int --
     -------------
*************** package body Bindgen is
*** 2959,2965 ****
     ---------------------
  
     procedure Set_Unit_Number (U : Unit_Id) is
!       Num_Units : constant Nat := Nat (Units.Table'Last) - Nat (Unit_Id'First);
        Unum      : constant Nat := Nat (U) - Nat (Unit_Id'First);
  
     begin
--- 3244,3250 ----
     ---------------------
  
     procedure Set_Unit_Number (U : Unit_Id) is
!       Num_Units : constant Nat := Nat (Units.Last) - Nat (Unit_Id'First);
        Unum      : constant Nat := Nat (U) - Nat (Unit_Id'First);
  
     begin
diff -Nrcpad gcc-3.4.3/gcc/ada/bindgen.ads gcc-4.0.0/gcc/ada/bindgen.ads
*** gcc-3.4.3/gcc/ada/bindgen.ads	Thu Apr 24 17:53:58 2003
--- gcc-4.0.0/gcc/ada/bindgen.ads	Tue Jul  6 13:57:30 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --   Copyright (C) 1992,1993,1994,1995,1996 Free Software Foundation, Inc.  --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 35,44 ****
  
  package Bindgen is
  
-    ------------------
-    --  Subprograms --
-    ------------------
- 
     procedure Gen_Output_File (Filename : String);
     --  Filename is the full path name of the binder output file
  
--- 35,40 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/bindusg.adb gcc-4.0.0/gcc/ada/bindusg.adb
*** gcc-3.4.3/gcc/ada/bindusg.adb	Mon Jan  5 15:20:43 2004
--- gcc-4.0.0/gcc/ada/bindusg.adb	Thu Feb 10 13:50:32 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** begin
*** 227,232 ****
--- 227,237 ----
     Write_Str ("ject consistency only)");
     Write_Eol;
  
+    --  Line for X switch
+ 
+    Write_Str ("  -Xnnn     Default exit status value = nnn");
+    Write_Eol;
+ 
     --  Line for -z switch
  
     Write_Str ("  -z        No main subprogram (zero main)");
diff -Nrcpad gcc-3.4.3/gcc/ada/bld-io.adb gcc-4.0.0/gcc/ada/bld-io.adb
*** gcc-3.4.3/gcc/ada/bld-io.adb	Thu Nov 20 09:53:58 2003
--- gcc-4.0.0/gcc/ada/bld-io.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,285 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                               B L D - I O                                --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --        Copyright (C) 2002-2003 Free Software Foundation, Inc.            --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- with Ada.Exceptions;
- with Ada.Text_IO;
- with Ada.Unchecked_Deallocation;
- 
- with GNAT.OS_Lib; use GNAT.OS_Lib;
- with Osint;
- 
- package body Bld.IO is
- 
-    use Ada;
- 
-    Initial_Number_Of_Lines : constant := 100;
-    Initial_Length_Of_Line  : constant := 50;
- 
-    type Line is record
-       Length     : Natural := 0;
-       Value      : String_Access;
-       Suppressed : Boolean := False;
-    end record;
-    --  One line of a Makefile.
-    --  Length is the position of the last column in the line.
-    --  Suppressed is set to True by procedure Suppress.
- 
-    type Line_Array is array (Positive range <>) of Line;
- 
-    type Buffer is access Line_Array;
- 
-    procedure Free is new Ada.Unchecked_Deallocation (Line_Array, Buffer);
- 
-    Lines : Buffer := new Line_Array (1 .. Initial_Number_Of_Lines);
-    --  The lines of a Makefile
- 
-    Current : Positive := 1;
-    --  Position of the last line in the Makefile
- 
-    File : Text_IO.File_Type;
-    --  The current Makefile
- 
-    type File_Name_Data;
-    type File_Name_Ref is access File_Name_Data;
- 
-    type File_Name_Data is record
-       Value : String_Access;
-       Next : File_Name_Ref;
-    end record;
-    --  Used to record the names of all Makefiles created, so that we may delete
-    --  them if necessary.
- 
-    File_Names : File_Name_Ref;
-    --  List of all the Makefiles created so far.
- 
-    -----------
-    -- Close --
-    -----------
- 
-    procedure Close is
-    begin
-       Flush;
-       Text_IO.Close (File);
- 
-    exception
-       when X : others =>
-          Text_IO.Put_Line (Exceptions.Exception_Message (X));
-          Osint.Fail ("cannot close a Makefile");
-    end Close;
- 
-    ------------
-    -- Create --
-    ------------
- 
-    procedure Create (File_Name : String) is
-    begin
-       Text_IO.Create (File, Text_IO.Out_File, File_Name);
-       Current := 1;
-       Lines (1).Length := 0;
-       Lines (1).Suppressed := False;
-       File_Names :=
-         new File_Name_Data'(Value => new String'(File_Name),
-                             Next  => File_Names);
-    exception
-       when X : others =>
-          Text_IO.Put_Line (Exceptions.Exception_Message (X));
-          Osint.Fail ("cannot create """ & File_Name & '"');
-    end Create;
- 
-    ----------------
-    -- Delete_All --
-    ----------------
- 
-    procedure Delete_All is
-       Success : Boolean;
-    begin
-       if Text_IO.Is_Open (File) then
-          Text_IO.Delete (File);
-          File_Names := File_Names.Next;
-       end if;
- 
-       while File_Names /= null loop
-          Delete_File (File_Names.Value.all, Success);
-          File_Names := File_Names.Next;
-       end loop;
-    end Delete_All;
- 
-    -----------
-    -- Flush --
-    -----------
- 
-    procedure Flush is
-       Last : Natural;
-    begin
-       if Lines (Current).Length /= 0 then
-          Osint.Fail ("INTERNAL ERROR: flushing before end of line: """ &
-                  Lines (Current).Value
-                    (1 .. Lines (Current).Length));
-       end if;
- 
-       for J in 1 .. Current - 1 loop
-          if not Lines (J).Suppressed then
-             Last := Lines (J).Length;
- 
-             --  The last character of a line cannot be a back slash ('\'),
-             --  otherwise make has a problem. The only real place were it
-             --  should happen is for directory names on Windows, and then
-             --  this terminal back slash is not needed.
- 
-             if Last > 0 and then Lines (J).Value (Last) = '\' then
-                Last := Last - 1;
-             end if;
- 
-             Text_IO.Put_Line (File, Lines (J).Value (1 .. Last));
-          end if;
-       end loop;
- 
-       Current := 1;
-       Lines (1).Length := 0;
-       Lines (1).Suppressed := False;
-    end Flush;
- 
-    ----------
-    -- Mark --
-    ----------
- 
-    procedure Mark (Pos : out Position) is
-    begin
-       if Lines (Current).Length /= 0 then
-          Osint.Fail ("INTERNAL ERROR: marking before end of line: """ &
-                  Lines (Current).Value
-                    (1 .. Lines (Current).Length));
-       end if;
- 
-       Pos := (Value => Current);
-    end Mark;
- 
-    ------------------
-    -- Name_Of_File --
-    ------------------
- 
-    function Name_Of_File return String is
-    begin
-       return Text_IO.Name (File);
-    end Name_Of_File;
- 
-    --------------
-    -- New_Line --
-    --------------
- 
-    procedure New_Line is
-    begin
-       Current := Current + 1;
- 
-       if Current > Lines'Last then
-          declare
-             New_Lines : constant Buffer :=
-                           new Line_Array (1 .. 2 * Lines'Last);
- 
-          begin
-             New_Lines (1 .. Lines'Last) := Lines.all;
-             Free (Lines);
-             Lines := New_Lines;
-          end;
-       end if;
- 
-       Lines (Current).Length := 0;
-       Lines (Current).Suppressed := False;
- 
-       --  Allocate a new line, if necessary
- 
-       if Lines (Current).Value = null then
-          Lines (Current).Value := new String (1 .. Initial_Length_Of_Line);
-       end if;
-    end New_Line;
- 
-    ---------
-    -- Put --
-    ---------
- 
-    procedure Put (S : String) is
-       Length : constant Natural := Lines (Current).Length;
- 
-    begin
-       if Length + S'Length > Lines (Current).Value'Length then
-          declare
-             New_Line   : String_Access;
-             New_Length : Positive := 2 * Lines (Current).Value'Length;
-          begin
-             while Length + S'Length > New_Length loop
-                New_Length := 2 * New_Length;
-             end loop;
- 
-             New_Line := new String (1 .. New_Length);
-             New_Line (1 .. Length) := Lines (Current).Value (1 .. Length);
-             Free (Lines (Current).Value);
-             Lines (Current).Value := New_Line;
-          end;
-       end if;
- 
-       Lines (Current).Value (Length + 1 .. Length + S'Length) := S;
-       Lines (Current).Length := Length + S'Length;
-    end Put;
- 
-    -------------
-    -- Release --
-    -------------
- 
-    procedure Release (Pos : Position) is
-    begin
-       if Lines (Current).Length /= 0 then
-          Osint.Fail ("INTERNAL ERROR: releasing before end of line: """ &
-                  Lines (Current).Value
-                    (1 .. Lines (Current).Length));
-       end if;
- 
-       if Pos.Value > Current then
-          Osint.Fail ("INTERNAL ERROR: releasing ahead of current position");
-       end if;
- 
-       Current := Pos.Value;
-       Lines (Current).Length := 0;
-    end Release;
- 
-    --------------
-    -- Suppress --
-    --------------
- 
-    procedure Suppress (Pos : Position) is
-    begin
-       if Pos.Value >= Current then
-          Osint.Fail ("INTERNAL ERROR: suppressing ahead of current position");
-       end if;
- 
-       Lines (Pos.Value).Suppressed := True;
-    end Suppress;
- 
- begin
-    --  Allocate the first line.
-    --  The other ones are allocated by New_Line.
- 
-    Lines (1).Value := new String (1 .. Initial_Length_Of_Line);
- end Bld.IO;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/bld-io.ads gcc-4.0.0/gcc/ada/bld-io.ads
*** gcc-3.4.3/gcc/ada/bld-io.ads	Tue Oct 21 13:41:58 2003
--- gcc-4.0.0/gcc/ada/bld-io.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,73 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                               B L D - I O                                --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --        Copyright (C) 2002 Free Software Foundation, Inc.                 --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  The following private package allows the ouput of text to Makefiles
- --  though buffers. It is possible to remove some lines from the buffers
- --  without putting them effectively in the Makefile.
- 
- private package Bld.IO is
- 
-    procedure Create (File_Name : String);
-    --  Create a new Makefile
- 
-    procedure Flush;
-    --  Output all not suppressed lines to the Makefile
- 
-    procedure Close;
-    --  Close the current Makefile
- 
-    procedure Delete_All;
-    --  Delete all the Makefiles that have been created
- 
-    function Name_Of_File return String;
-    --  Return the path name of the current Makefile
- 
-    type Position is private;
-    --  Identification of a line in the Makefile
- 
-    procedure Mark (Pos : out Position);
-    --  Record the current line.
-    --  No characters should have been already put on this line.
- 
-    procedure Release (Pos : Position);
-    --  Suppress all line after this one, including this one.
- 
-    procedure Suppress (Pos : Position);
-    --  Suppress a particular line
- 
-    procedure Put (S : String);
-    --  Append a string to the current line
- 
-    procedure New_Line;
-    --  End a line. Go to the next one (initially empty).
- 
- private
- 
-    type Position is record
-       Value : Positive := 1;
-    end record;
- 
- end Bld.IO;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/bld.adb gcc-4.0.0/gcc/ada/bld.adb
*** gcc-3.4.3/gcc/ada/bld.adb	Mon Jan 12 11:36:12 2004
--- gcc-4.0.0/gcc/ada/bld.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,3549 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                                  B L D                                   --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --          Copyright (C) 2002-2004 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package is still a work in progress.
- 
- with Ada.Characters.Handling; use Ada.Characters.Handling;
- with Ada.Strings.Fixed;       use Ada.Strings.Fixed;
- 
- with Bld.IO;
- with Csets;
- 
- with GNAT.HTable;
- with GNAT.Case_Util;            use GNAT.Case_Util;
- with GNAT.Command_Line;         use GNAT.Command_Line;
- with GNAT.Directory_Operations; use GNAT.Directory_Operations;
- with GNAT.OS_Lib;               use GNAT.OS_Lib;
- 
- with Erroutc;  use Erroutc;
- with Err_Vars; use Err_Vars;
- with Gnatvsn;
- with Namet;    use Namet;
- with Opt;      use Opt;
- with Output;   use Output;
- with Prj;      use Prj;
- with Prj.Com;  use Prj.Com;
- with Prj.Err;  use Prj.Err;
- with Prj.Part;
- with Prj.Tree; use Prj.Tree;
- with Snames;
- with Table;
- with Types;    use Types;
- 
- package body Bld is
- 
-    function "=" (Left, Right : IO.Position) return Boolean
-      renames IO."=";
- 
-    MAKE_ROOT : constant String := "MAKE_ROOT";
- 
-    Process_All_Project_Files : Boolean := True;
-    --  Set to False by command line switch -R
- 
-    Copyright_Displayed : Boolean := False;
-    --  To avoid displaying the Copyright line several times
- 
-    Usage_Displayed : Boolean := False;
-    --  To avoid displaying the usage several times
- 
-    type Expression_Kind_Type is (Undecided, Static_String, Other);
- 
-    Expression_Kind : Expression_Kind_Type := Undecided;
-    --  After procedure Expression has been called, this global variable
-    --  indicates if the expression is a static string or not.
-    --  If it is a static string, then Expression_Value (1 .. Expression_Last)
-    --  is the static value of the expression.
- 
-    Expression_Value  : String_Access := new String (1 .. 10);
-    Expression_Last   : Natural := 0;
- 
-    --  The following variables indicates if the suffixs and the languages
-    --  are statically specified and, if they are, their values.
- 
-    C_Suffix          : String_Access := new String (1 .. 10);
-    C_Suffix_Last     : Natural := 0;
-    C_Suffix_Static   : Boolean := True;
- 
-    Cxx_Suffix        : String_Access := new String (1 .. 10);
-    Cxx_Suffix_Last   : Natural := 0;
-    Cxx_Suffix_Static : Boolean := True;
- 
-    Ada_Spec_Suffix        : String_Access := new String (1 .. 10);
-    Ada_Spec_Suffix_Last   : Natural := 0;
-    Ada_Spec_Suffix_Static : Boolean := True;
- 
-    Ada_Body_Suffix        : String_Access := new String (1 .. 10);
-    Ada_Body_Suffix_Last   : Natural := 0;
-    Ada_Body_Suffix_Static : Boolean := True;
- 
-    Languages              : String_Access := new String (1 .. 50);
-    Languages_Last         : Natural := 0;
-    Languages_Static       : Boolean := True;
- 
-    type Source_Kind_Type is (Unknown, Ada_Spec, Ada_Body, C, Cxx, None);
-    --  Used when post-processing Compiler'Switches to indicate the language
-    --  of a source.
- 
-    --  The following variables are used to controlled what attributes
-    --  Default_Switches and Switches are allowed in expressions.
- 
-    Default_Switches_Package  : Name_Id := No_Name;
-    Default_Switches_Language : Name_Id := No_Name;
-    Switches_Package          : Name_Id          := No_Name;
-    Switches_Language         : Source_Kind_Type := Unknown;
- 
-    --  Other attribute references are only allowed in attribute declarations
-    --  of the same package and of the same name.
- 
-    --  Other_Attribute is True only during attribute declarations other than
-    --  Switches or Default_Switches.
- 
-    Other_Attribute           : Boolean          := False;
-    Other_Attribute_Package   : Name_Id          := No_Name;
-    Other_Attribute_Name      : Name_Id          := No_Name;
- 
-    type Declaration_Type is (False, May_Be, True);
- 
-    Source_Files_Declaration     : Declaration_Type := False;
- 
-    Source_List_File_Declaration : Declaration_Type := False;
- 
-    --  Names that are not in Snames
- 
-    Name_Ide              : Name_Id := No_Name;
-    Name_Compiler_Command : Name_Id := No_Name;
-    Name_Main_Language    : Name_Id := No_Name;
-    Name_C_Plus_Plus      : Name_Id := No_Name;
- 
-    package Processed_Projects is new GNAT.HTable.Simple_HTable
-      (Header_Num => Header_Num,
-       Element    => Project_Node_Id,
-       No_Element => Empty_Node,
-       Key        => Name_Id,
-       Hash       => Hash,
-       Equal      => "=");
-    --  This hash table contains all processed projects.
-    --  It is used to avoid processing the same project file several times.
- 
-    package Externals is new GNAT.HTable.Simple_HTable
-      (Header_Num => Header_Num,
-       Element    => Natural,
-       No_Element => 0,
-       Key        => Project_Node_Id,
-       Hash       => Hash,
-       Equal      => "=");
-    --  This hash table is used to store all the external references.
-    --  For each project file, the tree is first traversed and all
-    --  external references are put in variables. Each of these variables
-    --  are identified by a number, so that the can be referred to
-    --  later during the second traversal of the tree.
- 
-    package Variable_Names is new Table.Table
-      (Table_Component_Type => Name_Id,
-       Table_Index_Type     => Natural,
-       Table_Low_Bound      => 1,
-       Table_Initial        => 10,
-       Table_Increment      => 10,
-       Table_Name           => "Bld.Variable_Names");
-    --  This table stores all the variables declared in a package.
-    --  It is used to distinguish project level and package level
-    --  variables identified by simple names.
-    --  This table is reset for each package.
- 
-    package Switches is new Table.Table
-      (Table_Component_Type => Name_Id,
-       Table_Index_Type     => Natural,
-       Table_Low_Bound      => 1,
-       Table_Initial        => 10,
-       Table_Increment      => 10,
-       Table_Name           => "Bld.Switches");
-    --  This table stores all the indexs of associative array attribute
-    --  Compiler'Switches specified in a project file. It is reset for
-    --  each project file. At the end of processing of a project file
-    --  this table is traversed to output targets for those files
-    --  that may be C or C++ source files.
- 
-    Last_External : Natural := 0;
-    --  For each external reference, this variable in incremented by 1,
-    --  and a Makefile variable <PROJECT>__EXTERNAL__<Last_External> is
-    --  declared. See procedure Process_Externals.
- 
-    Last_Case_Construction : Natural := 0;
-    --  For each case construction, this variable is incremented by 1,
-    --  and a Makefile variable <PROJECT>__CASE__<Last_Case_Construction> is
-    --  declared. See procedure Process_Declarative_Items.
- 
-    Saved_Suffix : constant String := ".saved";
-    --  Prefix to be added to the name of reserved variables (see below) when
-    --  used in external references.
- 
-    --  A number of environment variables, whose names are used in the
-    --  Makefiles are saved at the beginning of the main Makefile.
-    --  Each reference to any such environment variable is replaced
-    --  in the Makefiles with the name of the saved variable.
- 
-    Ada_Body_String      : aliased String := "ADA_BODY";
-    Ada_Flags_String     : aliased String := "ADA_FLAGS";
-    Ada_Mains_String     : aliased String := "ADA_MAINS";
-    Ada_Sources_String   : aliased String := "ADA_SOURCES";
-    Ada_Spec_String      : aliased String := "ADA_SPEC";
-    Ar_Cmd_String        : aliased String := "AR_CMD";
-    Ar_Ext_String        : aliased String := "AR_EXT";
-    Base_Dir_String      : aliased String := "BASE_DIR";
-    Cc_String            : aliased String := "CC";
-    C_Ext_String         : aliased String := "C_EXT";
-    Cflags_String        : aliased String := "CFLAGS";
-    Cxx_String           : aliased String := "CXX";
-    Cxx_Ext_String       : aliased String := "CXX_EXT";
-    Cxxflags_String      : aliased String := "CXXFLAGS";
-    Deps_Projects_String : aliased String := "DEPS_PROJECT";
-    Exec_String          : aliased String := "EXEC";
-    Exec_Dir_String      : aliased String := "EXEC_DIR";
-    Gnatmake_String      : aliased String := "GNATMAKE";
-    Languages_String     : aliased String := "LANGUAGES";
-    Ld_Flags_String      : aliased String := "LD_FLAGS";
-    Libs_String          : aliased String := "LIBS";
-    Main_String          : aliased String := "MAIN";
-    Obj_Ext_String       : aliased String := "OBJ_EXT";
-    Obj_Dir_String       : aliased String := "OBJ_DIR";
-    Project_File_String  : aliased String := "PROJECT_FILE";
-    Src_Dirs_String      : aliased String := "SRC_DIRS";
- 
-    type Reserved_Variable_Array is array (Positive range <>) of String_Access;
-    Reserved_Variables : constant Reserved_Variable_Array :=
-      (Ada_Body_String     'Access,
-       Ada_Flags_String    'Access,
-       Ada_Mains_String    'Access,
-       Ada_Sources_String  'Access,
-       Ada_Spec_String     'Access,
-       Ar_Cmd_String       'Access,
-       Ar_Ext_String       'Access,
-       Base_Dir_String     'Access,
-       Cc_String           'Access,
-       C_Ext_String        'Access,
-       Cflags_String       'Access,
-       Cxx_String          'Access,
-       Cxx_Ext_String      'Access,
-       Cxxflags_String     'Access,
-       Deps_Projects_String'Access,
-       Exec_String         'Access,
-       Exec_Dir_String     'Access,
-       Gnatmake_String     'Access,
-       Languages_String    'Access,
-       Ld_Flags_String     'Access,
-       Libs_String         'Access,
-       Main_String         'Access,
-       Obj_Ext_String      'Access,
-       Obj_Dir_String      'Access,
-       Project_File_String 'Access,
-       Src_Dirs_String     'Access);
- 
-    Main_Project_File_Name : String_Access;
-    --  The name of the main project file, given as argument.
- 
-    Project_Tree : Project_Node_Id;
-    --  The result of the parsing of the main project file.
- 
-    procedure Add_To_Expression_Value (S : String);
-    procedure Add_To_Expression_Value (S : Name_Id);
-    --  Add a string to variable Expression_Value
- 
-    procedure Display_Copyright;
-    --  Display name of the tool and the copyright
- 
-    function Equal_String (Left, Right : Name_Id) return Boolean;
-    --  Return True if Left and Right are the same string, without considering
-    --  the case.
- 
-    procedure Expression
-      (Project    : Project_Node_Id;
-       First_Term : Project_Node_Id;
-       Kind       : Variable_Kind;
-       In_Case    : Boolean;
-       Reset      : Boolean := False);
-    --  Process an expression.
-    --  If In_Case is True, all expressions are not static.
- 
-    procedure New_Line;
-    --  Add a line terminator in the Makefile
- 
-    procedure Process (Project : Project_Node_Id);
-    --  Process the project tree, result of the parsing.
- 
-    procedure Process_Case_Construction
-      (Current_Project : Project_Node_Id;
-       Current_Pkg     : Name_Id;
-       Case_Project    : Project_Node_Id;
-       Case_Pkg        : Name_Id;
-       Name            : Name_Id;
-       Node            : Project_Node_Id);
-    --  Process a case construction.
-    --  The Makefile declations may be suppressed if no declarative
-    --  items in the case items are to be put in the Makefile.
- 
-    procedure Process_Declarative_Items
-      (Project : Project_Node_Id;
-       Pkg     : Name_Id;
-       In_Case : Boolean;
-       Item    : Project_Node_Id);
-    --  Process the declarative items for a project, a package
-    --  or a case item.
-    --  If In_Case is True, all expressions are not static
- 
-    procedure Process_Externals (Project : Project_Node_Id);
-    --  Look for all external references in one project file, populate the
-    --  table Externals, and output the necessary declarations, if any.
- 
-    procedure Put (S : String; With_Substitution : Boolean := False);
-    --  Add a string to the Makefile.
-    --  When With_Substitution is True, if the string is one of the reserved
-    --  variables, replace it with the name of the corresponding saved
-    --  variable.
- 
-    procedure Put (S : Name_Id);
-    --  Add a string to the Makefile.
- 
-    procedure Put (P : Positive);
-    --  Add the image of a number to the Makefile, without leading space
- 
-    procedure Put_Attribute
-      (Project : Project_Node_Id;
-       Pkg     : Name_Id;
-       Name    : Name_Id;
-       Index   : Name_Id);
-    --  Put the full name of an attribute in the Makefile
- 
-    procedure Put_Directory_Separator;
-    --  Add a directory separator to the Makefile
- 
-    procedure Put_Include_Project
-      (Included_Project_Path  : Name_Id;
-       Included_Project       : Project_Node_Id;
-       Including_Project_Name : String);
-    --  Output an include directive for a project
- 
-    procedure Put_Line (S : String);
-    --  Add a string and a line terminator to the Makefile
- 
-    procedure Put_L_Name (N : Name_Id);
-    --  Put a name in lower case in the Makefile
- 
-    procedure Put_M_Name (N : Name_Id);
-    --  Put a name in mixed case in the Makefile
- 
-    procedure Put_U_Name (N : Name_Id);
-    --  Put a name in upper case in the Makefile
- 
-    procedure Special_Put_U_Name (S : Name_Id);
-    --  Put a name in upper case in the Makefile.
-    --  If "C++" change it to "CXX".
- 
-    procedure Put_Variable
-      (Project : Project_Node_Id;
-       Pkg     : Name_Id;
-       Name    : Name_Id);
-    --  Put the full name of a variable in the Makefile
- 
-    procedure Recursive_Process (Project : Project_Node_Id);
-    --  Process a project file and the project files it depends on iteratively
-    --  without processing twice the same project file.
- 
-    procedure Reset_Suffixes_And_Languages;
-    --  Indicate that all suffixes and languages have the default values
- 
-    function Source_Kind_Of (File_Name : Name_Id) return Source_Kind_Type;
-    --  From a source file name, returns the source kind of the file
- 
-    function Suffix_Of
-      (Static  : Boolean;
-       Value   : String_Access;
-       Last    : Natural;
-       Default : String) return String;
-    --  Returns the current suffix, if it is statically known, or ""
-    --  if it is not statically known. Used on C_Suffix, Cxx_Suffix,
-    --  Ada_Body_Suffix and Ada_Spec_Suffix.
- 
-    procedure Usage;
-    --  Display the usage of gnatbuild
- 
-    -----------------------------
-    -- Add_To_Expression_Value --
-    -----------------------------
- 
-    procedure Add_To_Expression_Value (S : String) is
-    begin
-       --  Check that the buffer is large enough.
-       --  If it is not, double it until it is large enough.
- 
-       while Expression_Last + S'Length > Expression_Value'Last loop
-          declare
-             New_Value : constant String_Access :=
-                           new String (1 .. 2 * Expression_Value'Last);
- 
-          begin
-             New_Value (1 .. Expression_Last) :=
-               Expression_Value (1 .. Expression_Last);
-             Free (Expression_Value);
-             Expression_Value := New_Value;
-          end;
-       end loop;
- 
-       Expression_Value (Expression_Last + 1 .. Expression_Last + S'Length)
-         := S;
-       Expression_Last := Expression_Last + S'Length;
-    end Add_To_Expression_Value;
- 
-    procedure Add_To_Expression_Value (S : Name_Id) is
-    begin
-       Get_Name_String (S);
-       Add_To_Expression_Value (S => Name_Buffer (1 .. Name_Len));
-    end Add_To_Expression_Value;
- 
-    -----------------------
-    -- Display_Copyright --
-    -----------------------
- 
-    procedure Display_Copyright is
-    begin
-       if not Copyright_Displayed then
-          Copyright_Displayed := True;
-          Write_Str ("GPR2MAKE ");
-          Write_Str (Gnatvsn.Gnat_Version_String);
-          Write_Str (" Copyright 2002-2004 Free Software Foundation, Inc.");
-          Write_Eol;
-          Write_Eol;
-       end if;
-    end Display_Copyright;
- 
-    ------------------
-    -- Equal_String --
-    ------------------
- 
-    function Equal_String (Left, Right : Name_Id) return Boolean is
-    begin
-       Get_Name_String (Left);
- 
-       declare
-          Left_Value : constant String :=
-                         To_Lower (Name_Buffer (1 .. Name_Len));
- 
-       begin
-          Get_Name_String (Right);
-          return Left_Value = To_Lower (Name_Buffer (1 .. Name_Len));
-       end;
-    end Equal_String;
- 
-    ----------------
-    -- Expression --
-    ----------------
- 
-    procedure Expression
-      (Project    : Project_Node_Id;
-       First_Term : Project_Node_Id;
-       Kind       : Variable_Kind;
-       In_Case    : Boolean;
-       Reset      : Boolean := False)
-    is
-       Term : Project_Node_Id := First_Term;
-       --  The term in the expression list
- 
-       Current_Term : Project_Node_Id := Empty_Node;
-       --  The current term node id
- 
-    begin
-       if In_Case then
-          Expression_Kind := Other;
- 
-       elsif Reset then
-          Expression_Kind := Undecided;
-          Expression_Last := 0;
-       end if;
- 
-       while Term /= Empty_Node loop
- 
-          Current_Term := Tree.Current_Term (Term);
- 
-          case Kind_Of (Current_Term) is
- 
-             when N_Literal_String =>
-                --  If we are in a string list, we precede this literal string
-                --  with a space; it does not matter if the output list
-                --  has a leading space.
-                --  Otherwise we just output the literal string:
-                --  if it is not the first term of the expression, it will
-                --  concatenate with was previously output.
- 
-                if Kind = List then
-                   Put (" ");
-                end if;
- 
-                --  If in a static string expression, add to expression value
- 
-                if Expression_Kind = Undecided
-                  or else Expression_Kind = Static_String
-                then
-                   Expression_Kind := Static_String;
- 
-                   if Kind = List then
-                      Add_To_Expression_Value (" ");
-                   end if;
- 
-                   Add_To_Expression_Value (String_Value_Of (Current_Term));
-                end if;
- 
-                Put (String_Value_Of (Current_Term));
- 
-             when N_Literal_String_List =>
-                --  For string list, we repetedly call Expression with each
-                --  element of the list.
- 
-                declare
-                   String_Node : Project_Node_Id :=
-                                   First_Expression_In_List (Current_Term);
- 
-                begin
-                   if String_Node /= Empty_Node then
- 
-                      --  If String_Node is nil, it is an empty list,
-                      --  there is nothing to do
- 
-                      Expression
-                        (Project    => Project,
-                         First_Term => Tree.First_Term (String_Node),
-                         Kind       => Single,
-                         In_Case    => In_Case);
- 
-                      loop
-                         --  Add the other element of the literal string list
-                         --  one after the other
- 
-                         String_Node :=
-                           Next_Expression_In_List (String_Node);
- 
-                         exit when String_Node = Empty_Node;
- 
-                         Put (" ");
-                         Add_To_Expression_Value (" ");
-                         Expression
-                           (Project    => Project,
-                            First_Term => Tree.First_Term (String_Node),
-                            Kind       => Single,
-                            In_Case    => In_Case);
-                      end loop;
-                   end if;
-                end;
- 
-             when N_Variable_Reference | N_Attribute_Reference =>
-                --  A variable or attribute reference is never static
- 
-                Expression_Kind := Other;
- 
-                --  A variable or an attribute is identified by:
-                --   - its project name,
-                --   - its package name, if any,
-                --   - its name, and
-                --   - its index (if an associative array attribute).
- 
-                declare
-                   Term_Project : Project_Node_Id :=
-                                    Project_Node_Of (Current_Term);
-                   Term_Package : constant Project_Node_Id :=
-                                    Package_Node_Of (Current_Term);
- 
-                   Name : constant Name_Id := Name_Of (Current_Term);
- 
-                   Term_Package_Name : Name_Id := No_Name;
- 
-                begin
-                   if Term_Project = Empty_Node then
-                      Term_Project := Project;
-                   end if;
- 
-                   if Term_Package /= Empty_Node then
-                      Term_Package_Name := Name_Of (Term_Package);
-                   end if;
- 
-                   --  If we are in a string list, we precede this variable or
-                   --  attribute reference with a space; it does not matter if
-                   --  the output list has a leading space.
- 
-                   if Kind = List then
-                      Put (" ");
-                   end if;
- 
-                   Put ("$(");
- 
-                   if Kind_Of (Current_Term) = N_Variable_Reference then
-                      Put_Variable
-                        (Project => Term_Project,
-                         Pkg     => Term_Package_Name,
-                         Name    => Name);
- 
-                   else
-                      --  Attribute reference.
- 
-                      --  If it is a Default_Switches attribute, check if it
-                      --  is allowed in this expression (same package and same
-                      --  language).
- 
-                      if Name = Snames.Name_Default_Switches then
-                         if Default_Switches_Package /= Term_Package_Name
-                           or else not Equal_String
-                                         (Default_Switches_Language,
-                                          Associative_Array_Index_Of
-                                            (Current_Term))
-                         then
-                            --  This Default_Switches attribute is not allowed
-                            --  here; report an error and continue.
-                            --  The Makefiles created will be deleted at the
-                            --  end.
- 
-                            Error_Msg_Name_1 := Term_Package_Name;
-                            Error_Msg
-                              ("reference to `%''Default_Switches` " &
-                               "not allowed here",
-                               Location_Of (Current_Term));
-                         end if;
- 
-                      --  If it is a Switches attribute, check if it is allowed
-                      --  in this expression (same package and same source
-                      --  kind).
- 
-                      elsif Name = Snames.Name_Switches then
-                         if Switches_Package /= Term_Package_Name
-                           or else Source_Kind_Of (Associative_Array_Index_Of
-                                                     (Current_Term))
-                                     /= Switches_Language
-                         then
-                            --  This Switches attribute is not allowed here;
-                            --  report an error and continue. The Makefiles
-                            --  created will be deleted at the end.
- 
-                            Error_Msg_Name_1 := Term_Package_Name;
-                            Error_Msg
-                              ("reference to `%''Switches` " &
-                               "not allowed here",
-                               Location_Of (Current_Term));
-                         end if;
- 
-                      else
-                         --  Other attribute references are only allowed in
-                         --  the declaration of an atribute of the same
-                         --  package and of the same name.
- 
-                         if not Other_Attribute
-                           or else Other_Attribute_Package /= Term_Package_Name
-                           or else Other_Attribute_Name /= Name
-                         then
-                            if Term_Package_Name = No_Name then
-                               Error_Msg_Name_1 := Name;
-                               Error_Msg
-                                 ("reference to % not allowed here",
-                                  Location_Of (Current_Term));
- 
-                            else
-                               Error_Msg_Name_1 := Term_Package_Name;
-                               Error_Msg_Name_2 := Name;
-                               Error_Msg
-                                 ("reference to `%''%` not allowed here",
-                                  Location_Of (Current_Term));
-                            end if;
-                         end if;
-                      end if;
- 
-                      Put_Attribute
-                        (Project => Term_Project,
-                         Pkg     => Term_Package_Name,
-                         Name    => Name,
-                         Index   => Associative_Array_Index_Of (Current_Term));
-                   end if;
- 
-                   Put (")");
-                end;
- 
-             when N_External_Value =>
-                --  An external reference is never static
- 
-                Expression_Kind := Other;
- 
-                --  As the external references have already been processed,
-                --  we just output the name of the variable that corresponds
-                --  to this external reference node.
- 
-                Put ("$(");
-                Put_U_Name (Name_Of (Project));
-                Put (".external.");
-                Put (Externals.Get (Current_Term));
-                Put (")");
- 
-             when others =>
- 
-                --  Should never happen
- 
-                pragma Assert
-                  (False,
-                   "illegal node kind in an expression");
-                raise Program_Error;
-          end case;
- 
-          Term := Next_Term (Term);
-       end loop;
-    end Expression;
- 
-    --------------
-    -- Gpr2make --
-    --------------
- 
-    procedure Gpr2make is
-    begin
-       --  First, get the switches, if any
- 
-       loop
-          case Getopt ("h q v R") is
-             when ASCII.NUL =>
-                exit;
- 
-             --  -h: Help
- 
-             when 'h' =>
-                Usage;
- 
-             --  -q: Quiet
- 
-             when 'q' =>
-                Opt.Quiet_Output := True;
- 
-             --  -v: Verbose
- 
-             when 'v' =>
-                Opt.Verbose_Mode := True;
-                Display_Copyright;
- 
-             --  -R: no Recursivity
- 
-             when 'R' =>
-                Process_All_Project_Files := False;
- 
-             when others =>
-                raise Program_Error;
-          end case;
-       end loop;
- 
-       --  Now, get the project file (maximum one)
- 
-       loop
-          declare
-             S : constant String := Get_Argument (Do_Expansion => True);
-          begin
-             exit when S'Length = 0;
- 
-             if Main_Project_File_Name /= null then
-                Fail ("only one project file may be specified");
- 
-             else
-                Main_Project_File_Name := new String'(S);
-             end if;
-          end;
-       end loop;
- 
-       --  If no project file specified, display the usage and exit
- 
-       if Main_Project_File_Name = null then
-          Usage;
-          return;
-       end if;
- 
-       --  Do the necessary initializations
- 
-       Csets.Initialize;
-       Namet.Initialize;
- 
-       Snames.Initialize;
- 
-       Prj.Initialize;
- 
-       --  Parse the project file(s)
- 
-       Prj.Part.Parse (Project_Tree, Main_Project_File_Name.all, False);
- 
-       --  If parsing was successful, process the project tree
- 
-       if Project_Tree /= Empty_Node then
- 
-          --  Create some Name_Ids that are not in Snames
- 
-          Name_Len                    := 3;
-          Name_Buffer (1 .. Name_Len) := "ide";
-          Name_Ide                    := Name_Find;
- 
-          Name_Len                    := 16;
-          Name_Buffer (1 .. Name_Len) := "compiler_command";
-          Name_Compiler_Command       := Name_Find;
- 
-          Name_Len                    := 13;
-          Name_Buffer (1 .. Name_Len) := "main_language";
-          Name_Main_Language          := Name_Find;
- 
-          Name_Len                    := 3;
-          Name_Buffer (1 .. Name_Len) := "c++";
-          Name_C_Plus_Plus            := Name_Find;
- 
-          Process (Project_Tree);
- 
-          if Compilation_Errors then
-             if not Verbose_Mode then
-                Write_Eol;
-             end if;
- 
-             Prj.Err.Finalize;
-             Write_Eol;
-             IO.Delete_All;
-             Fail ("no Makefile created");
-          end if;
-       end if;
-    end Gpr2make;
- 
-    --------------
-    -- New_Line --
-    --------------
- 
-    procedure New_Line is
-    begin
-       IO.New_Line;
-    end New_Line;
- 
-    -------------
-    -- Process --
-    -------------
- 
-    procedure Process (Project : Project_Node_Id) is
-    begin
-       Processed_Projects.Reset;
-       Recursive_Process (Project);
-    end Process;
- 
-    -------------------------------
-    -- Process_Case_Construction --
-    -------------------------------
- 
-    procedure Process_Case_Construction
-      (Current_Project : Project_Node_Id;
-       Current_Pkg     : Name_Id;
-       Case_Project    : Project_Node_Id;
-       Case_Pkg        : Name_Id;
-       Name            : Name_Id;
-       Node            : Project_Node_Id)
-    is
-       Case_Project_Name : constant Name_Id := Name_Of (Case_Project);
-       Before            : IO.Position;
-       Start             : IO.Position;
-       After             : IO.Position;
- 
-       procedure Put_Case_Construction;
-       --  Output the variable $<PROJECT>__CASE__#, specific to
-       --  this case construction. It contains the number of the
-       --  branch to follow.
- 
-       procedure Recursive_Process
-         (Case_Item     : Project_Node_Id;
-          Branch_Number : Positive);
-       --  A recursive procedure. Calls itself for each branch, increasing
-       --  Branch_Number by 1 each time.
- 
-       procedure Put_Variable_Name;
-       --  Output the case variable
- 
-       ---------------------------
-       -- Put_Case_Construction --
-       ---------------------------
- 
-       procedure Put_Case_Construction is
-       begin
-          Put_U_Name (Case_Project_Name);
-          Put (".case.");
-          Put (Last_Case_Construction);
-       end Put_Case_Construction;
- 
-       -----------------------
-       -- Recursive_Process --
-       -----------------------
- 
-       procedure Recursive_Process
-         (Case_Item     : Project_Node_Id;
-          Branch_Number : Positive)
-       is
-          Choice_String : Project_Node_Id := First_Choice_Of (Case_Item);
- 
-          Before : IO.Position;
-          Start  : IO.Position;
-          After  : IO.Position;
- 
-          No_Lines : Boolean := False;
- 
-       begin
-          --  Nothing to do if Case_Item is empty.
-          --  That should happen only if the case construvtion is totally empty.
-          --    case Var is
-          --    end case;
- 
-          if Case_Item /= Empty_Node then
-             --  Remember where we are, to be able to come back here if this
-             --  case item is empty.
- 
-             IO.Mark (Before);
- 
-             if Choice_String = Empty_Node then
-                --  when others =>
- 
-                --  Output a comment "# when others => ..."
- 
-                Put_Line ("# when others => ...");
- 
-                --  Remember where we are, to detect if there is anything
-                --  put in the Makefile for this branch.
- 
-                IO.Mark (Start);
- 
-                --  Process the declarative items of this branch
- 
-                Process_Declarative_Items
-                  (Project => Current_Project,
-                   Pkg     => Current_Pkg,
-                   In_Case => True,
-                   Item    => First_Declarative_Item_Of (Case_Item));
- 
-                --  Where are we now?
-                IO.Mark (After);
- 
-                --  If we are at the same place, the branch is totally empty:
-                --  suppress it completely.
- 
-                if Start = After then
-                   IO.Release (Before);
-                end if;
-             else
-                --  Case Item with one or several case labels
- 
-                --  Output a comment
-                --    # case <label> => ...
-                --  or
-                --    # case <first_Label> | ... =>
-                --  depending on the number of case labels.
- 
-                Put ("# when """);
-                Put (String_Value_Of (Choice_String));
-                Put ("""");
- 
-                if Next_Literal_String (Choice_String) /= Empty_Node then
-                   Put (" | ...");
-                end if;
- 
-                Put (" => ...");
-                New_Line;
- 
-                --  Check if the case variable is equal to the first case label
-                Put ("ifeq ($(");
-                Put_Variable_Name;
-                Put ("),");
-                Put (String_Value_Of (Choice_String));
-                Put (")");
-                New_Line;
- 
-                if Next_Literal_String (Choice_String) /= Empty_Node then
-                   --  Several choice strings. We need to use an auxiliary
-                   --  variable <PROJECT.case.# to detect if we should follow
-                   --  this branch.
- 
-                   loop
-                      Put_Case_Construction;
-                      Put (":=");
-                      Put (Branch_Number);
-                      New_Line;
- 
-                      Put_Line ("endif");
- 
-                      Choice_String := Next_Literal_String (Choice_String);
- 
-                      exit when Choice_String = Empty_Node;
- 
-                      Put ("ifeq ($(");
-                      Put_Variable_Name;
-                      Put ("),");
-                      Put (String_Value_Of (Choice_String));
-                      Put (")");
-                      New_Line;
-                   end loop;
- 
-                   --  Now, we test the auxiliary variable
- 
-                   Put ("ifeq ($(");
-                   Put_Case_Construction;
-                   Put ("),");
-                   Put (Branch_Number);
-                   Put (")");
-                   New_Line;
-                end if;
- 
-                --  Remember where we are before calling
-                --  Process_Declarative_Items.
- 
-                IO.Mark (Start);
- 
-                Process_Declarative_Items
-                  (Project => Current_Project,
-                   Pkg     => Current_Pkg,
-                   In_Case => True,
-                   Item    => First_Declarative_Item_Of (Case_Item));
- 
-                --  Check where we are now, to detect if some lines have been
-                --  added to the Makefile.
- 
-                IO.Mark (After);
- 
-                No_Lines := Start = After;
- 
-                --  If no lines have been added, then suppress completely this
-                --  branch.
- 
-                if No_Lines then
-                   IO.Release (Before);
-                end if;
- 
-                --  If there is a next branch, process it
- 
-                if Next_Case_Item (Case_Item) /= Empty_Node then
-                   --  If this branch has not been suppressed, we need an "else"
- 
-                   if not No_Lines then
-                      --  Mark the position of the "else"
- 
-                      IO.Mark (Before);
- 
-                      Put_Line ("else");
- 
-                      --  Mark the position before the next branch
- 
-                      IO.Mark (Start);
-                   end if;
- 
-                   Recursive_Process
-                     (Case_Item => Next_Case_Item (Case_Item),
-                      Branch_Number => Branch_Number + 1);
- 
-                   if not No_Lines then
-                      --  Where are we?
-                      IO.Mark (After);
- 
-                      --  If we are at the same place, suppress the useless
-                      --  "else".
- 
-                      if After = Start then
-                         IO.Release (Before);
-                      end if;
-                   end if;
-                end if;
- 
-                --  If the branch has not been suppressed, we need an "endif"
- 
-                if not No_Lines then
-                   Put_Line ("endif");
-                end if;
-             end if;
-          end if;
-       end Recursive_Process;
- 
-       -----------------------
-       -- Put_Variable_Name --
-       -----------------------
- 
-       procedure Put_Variable_Name is
-       begin
-          Put_Variable (Case_Project, Case_Pkg, Name);
-       end Put_Variable_Name;
- 
-       --  Start of procedure Process_Case_Construction
- 
-    begin
-       Last_Case_Construction := Last_Case_Construction + 1;
- 
-       --  Remember where we are in case we suppress completely the case
-       --  construction.
- 
-       IO.Mark (Before);
- 
-       New_Line;
- 
-       --  Output a comment line for this case construction
- 
-       Put ("# case ");
-       Put_M_Name (Case_Project_Name);
- 
-       if Case_Pkg /= No_Name then
-          Put (".");
-          Put_M_Name (Case_Pkg);
-       end if;
- 
-       Put (".");
-       Put_M_Name (Name);
-       Put (" is ...");
-       New_Line;
- 
-       --  Remember where we are, to detect if all branches have been suppressed
- 
-       IO.Mark (Start);
- 
-       --  Start at the first case item
- 
-       Recursive_Process
-         (Case_Item     => First_Case_Item_Of (Node),
-          Branch_Number => 1);
- 
-       --  Where are we?
- 
-       IO.Mark (After);
- 
-       --  If we are at the same position, it means that all branches have been
-       --  suppressed: then we suppress completely the case construction.
- 
-       if Start = After then
-          IO.Release (Before);
- 
-       else
-          --  If the case construction is not completely suppressed, we issue
-          --  a comment indicating the end of the case construction.
- 
-          Put_Line ("# end case;");
- 
-          New_Line;
-       end if;
-    end Process_Case_Construction;
- 
-    -------------------------------
-    -- Process_Declarative_Items --
-    -------------------------------
- 
-    procedure Process_Declarative_Items
-      (Project : Project_Node_Id;
-       Pkg     : Name_Id;
-       In_Case : Boolean;
-       Item    : Project_Node_Id)
-    is
-       Current_Declarative_Item : Project_Node_Id := Item;
-       Current_Item             : Project_Node_Id := Empty_Node;
- 
-       Project_Name : constant String :=
-                        To_Upper (Get_Name_String (Name_Of (Project)));
-       Item_Name    : Name_Id := No_Name;
- 
-    begin
-       --  For each declarative item
- 
-       while Current_Declarative_Item /= Empty_Node loop
-          --  Get its data
- 
-          Current_Item := Current_Item_Node (Current_Declarative_Item);
- 
-          --  And set Current_Declarative_Item to the next declarative item
-          --  ready for the next iteration
- 
-          Current_Declarative_Item := Next_Declarative_Item
-                                             (Current_Declarative_Item);
- 
-          --  By default, indicate that we are not declaring attribute
-          --  Default_Switches or Switches.
- 
-          Other_Attribute := False;
- 
-          --  Write_Line (Project_Node_Kind'Image (Kind_Of (Current_Item)));
- 
-          case Kind_Of (Current_Item) is
- 
-             when N_Package_Declaration =>
-                Item_Name := Name_Of (Current_Item);
- 
-                declare
-                   Real_Project : constant Project_Node_Id :=
-                                    Project_Of_Renamed_Package_Of
-                                      (Current_Item);
- 
-                   Before_Package   : IO.Position;
-                   Start_Of_Package : IO.Position;
-                   End_Of_Package   : IO.Position;
- 
-                   Decl_Item : Project_Node_Id;
- 
-                begin
-                   --  If it is a renaming package, we go to the original
-                   --  package. This is guaranteed to work, otherwise the
-                   --  parsing of the project file tree would have already
-                   --  failed.
- 
-                   if Real_Project /= Empty_Node then
-                      Decl_Item :=
-                        First_Declarative_Item_Of
-                          (Project_Declaration_Of (Real_Project));
- 
-                      --  Traverse the declarative items of the project,
-                      --  until we find the renamed package.
- 
-                      while Decl_Item /= Empty_Node loop
-                         Current_Item := Current_Item_Node (Decl_Item);
-                         exit when Kind_Of (Current_Item)
-                                    = N_Package_Declaration
-                                   and then Name_Of (Current_Item) = Item_Name;
-                         Decl_Item := Next_Declarative_Item (Decl_Item);
-                      end loop;
-                   end if;
- 
-                   --  Remember where we are, in case we want to completely
-                   --  suppress this package.
- 
-                   IO.Mark (Before_Package);
- 
-                   New_Line;
- 
-                   --  Output comment line for this package
- 
-                   Put ("# package ");
-                   Put_M_Name (Item_Name);
-                   Put (" is ...");
-                   New_Line;
- 
-                   --  Record where we are before calling
-                   --  Process_Declarative_Items.
- 
-                   IO.Mark (Start_Of_Package);
- 
-                   --  And process the declarative items of this package
- 
-                   Process_Declarative_Items
-                     (Project => Project,
-                      Pkg     => Item_Name,
-                      In_Case => False,
-                      Item    => First_Declarative_Item_Of (Current_Item));
- 
-                   --  Reset the local variables once we have finished with
-                   --  this package.
- 
-                   Variable_Names.Init;
- 
-                   --  Where are we?
-                   IO.Mark (End_Of_Package);
- 
-                   --  If we are at the same place, suppress completely the
-                   --  package.
- 
-                   if End_Of_Package = Start_Of_Package then
-                      IO.Release (Before_Package);
- 
-                   else
- 
-                      --  otherwise, utput comment line for end of package
- 
-                      Put ("# end ");
-                      Put_M_Name (Item_Name);
-                      Put (";");
-                      New_Line;
- 
-                      New_Line;
-                   end if;
-                end;
- 
-             when N_Variable_Declaration | N_Typed_Variable_Declaration =>
-                Item_Name := Name_Of (Current_Item);
- 
-                --  Output comment line for this variable
- 
-                Put ("# ");
-                Put_M_Name (Item_Name);
-                Put (" := ...");
-                New_Line;
- 
-                --  If we are inside a package, the variable is a local
-                --  variable, not a project level variable.
-                --  So we check if its name is included in the Variables
-                --  table; if it is not already, we put it in the table.
- 
-                if Pkg /= No_Name then
-                   declare
-                      Found : Boolean := False;
- 
-                   begin
-                      for
-                        Index in Variable_Names.First .. Variable_Names.Last
-                      loop
-                         if Variable_Names.Table (Index) = Item_Name then
-                            Found := True;
-                            exit;
-                         end if;
-                      end loop;
- 
-                      if not Found then
-                         Variable_Names.Increment_Last;
-                         Variable_Names.Table (Variable_Names.Last) :=
-                           Item_Name;
-                      end if;
-                   end;
-                end if;
- 
-                --  Output the line <variable_Name>:=<expression>
- 
-                Put_Variable (Project, Pkg, Item_Name);
- 
-                Put (":=");
- 
-                Expression
-                  (Project    => Project,
-                   First_Term => Tree.First_Term (Expression_Of (Current_Item)),
-                   Kind       => Expression_Kind_Of (Current_Item),
-                   In_Case    => In_Case);
- 
-                New_Line;
- 
-             when N_Attribute_Declaration =>
-                Item_Name := Name_Of (Current_Item);
- 
-                declare
-                   Index : constant Name_Id :=
-                             Associative_Array_Index_Of (Current_Item);
- 
-                   Pos_Comment     : IO.Position;
-                   Put_Declaration : Boolean := True;
- 
-                begin
-                   --  If it is a Default_Switches attribute register the
-                   --  project, the package and the language to indicate
-                   --  what Default_Switches attribute references are allowed
-                   --  in expressions.
- 
-                   if Item_Name = Snames.Name_Default_Switches then
-                      Default_Switches_Package  := Pkg;
-                      Default_Switches_Language := Index;
- 
-                   --  If it is a Switches attribute register the project,
-                   --  the package and the source kind to indicate what
-                   --  Switches attribute references are allowed in expressions.
- 
-                   elsif Item_Name = Snames.Name_Switches then
-                      Switches_Package  := Pkg;
-                      Switches_Language := Source_Kind_Of (Index);
- 
-                   else
-                      --  Set Other_Attribute to True to indicate that we are
-                      --  in the declaration of an attribute other than
-                      --  Switches or Default_Switches.
- 
-                      Other_Attribute         := True;
-                      Other_Attribute_Package := Pkg;
-                      Other_Attribute_Name    := Item_Name;
-                   end if;
- 
-                   --  Record where we are to be able to suppress the
-                   --  declaration.
- 
-                   IO.Mark (Pos_Comment);
- 
-                   --  Output comment line for this attribute
- 
-                   Put ("# for ");
-                   Put_M_Name (Item_Name);
- 
-                   if Index /= No_Name then
-                      Put (" (""");
-                      Put (Index);
-                      Put (""")");
-                   end if;
- 
-                   Put (" use ...");
-                   New_Line;
- 
-                   --  Output the line <attribute_name>:=<expression>
- 
-                   Put_Attribute (Project, Pkg, Item_Name, Index);
-                   Put (":=");
-                   Expression
-                     (Project    => Project,
-                      First_Term =>
-                        Tree.First_Term (Expression_Of (Current_Item)),
-                      Kind        => Expression_Kind_Of (Current_Item),
-                      In_Case     => In_Case,
-                      Reset       => True);
-                   New_Line;
- 
-                   --  Remove any Default_Switches attribute declaration for
-                   --  languages other than C or C++.
- 
-                   if Item_Name = Snames.Name_Default_Switches then
-                      Get_Name_String (Index);
-                      To_Lower (Name_Buffer (1 .. Name_Len));
-                      Put_Declaration :=
-                        Name_Buffer (1 .. Name_Len) = "c" or else
-                        Name_Buffer (1 .. Name_Len) = "c++";
- 
-                   --  Remove any Switches attribute declaration for source
-                   --  kinds other than C, C++ or unknown.
- 
-                   elsif Item_Name = Snames.Name_Switches then
-                      Put_Declaration :=
-                        Switches_Language = Unknown
-                        or else Switches_Language = C
-                        or else Switches_Language = Cxx;
- 
-                   end if;
- 
-                   --  Attributes in packages other than Naming, Compiler or
-                   --  IDE are of no interest; suppress their declarations.
- 
-                   Put_Declaration := Put_Declaration and
-                     (Pkg = No_Name
-                        or else Pkg = Snames.Name_Naming
-                        or else Pkg = Snames.Name_Compiler
-                        or else Pkg = Name_Ide);
- 
-                   if Put_Declaration then
-                      --  Some attributes are converted into reserved variables
- 
-                      if Pkg = No_Name then
- 
-                         --  Project level attribute
- 
-                         if Item_Name = Snames.Name_Languages then
- 
-                            --  for Languages use ...
- 
-                            --  Attribute Languages is converted to variable
-                            --  LANGUAGES. The actual string is put in lower
-                            --  case.
- 
-                            Put ("LANGUAGES:=");
- 
-                            --  If the expression is static (expected to be so
-                            --  most of the cases), then just give to LANGUAGES
-                            --  the lower case value of the expression.
- 
-                            if Expression_Kind = Static_String then
-                               Put (To_Lower (Expression_Value
-                                                (1 .. Expression_Last)));
- 
-                            else
-                               --  Otherwise, call to_lower on the value
-                               --  of the attribute.
- 
-                               Put ("$(shell gprcmd to_lower $(");
-                               Put_Attribute
-                                 (Project, No_Name, Item_Name, No_Name);
-                               Put ("))");
-                            end if;
- 
-                            New_Line;
- 
-                            --  Record value of Languages if expression is
-                            --  static and if Languages_Static is True.
- 
-                            if Expression_Kind /= Static_String then
-                               Languages_Static := False;
- 
-                            elsif Languages_Static then
-                               To_Lower
-                                 (Expression_Value (1 .. Expression_Last));
- 
-                               if Languages_Last = 0 then
-                                  if Languages'Last < Expression_Last + 2 then
-                                     Free (Languages);
-                                     Languages :=
-                                       new String (1 .. Expression_Last + 2);
-                                  end if;
- 
-                                  Languages (1) := ' ';
-                                  Languages (2 .. Expression_Last + 1) :=
-                                    Expression_Value (1 .. Expression_Last);
-                                  Languages_Last := Expression_Last + 2;
-                                  Languages (Languages_Last) := ' ';
- 
-                               else
-                                  Languages_Static :=
-                                    Languages (2 .. Languages_Last - 1) =
-                                    Expression_Value (1 .. Expression_Last);
-                               end if;
-                            end if;
- 
-                         elsif Item_Name = Snames.Name_Source_Dirs then
- 
-                            --  for Source_Dirs use ...
- 
-                            --  String list attribute Source_Dirs is converted
-                            --  to variable <PROJECT>.src_dirs, each element
-                            --  being an absolute directory name.
- 
-                            Put (Project_Name &
-                                 ".src_dirs:=$(shell gprcmd extend $(");
-                            Put (Project_Name);
-                            Put (".base_dir) '$(");
-                            Put_Attribute (Project, Pkg, Item_Name, No_Name);
-                            Put_Line (")')");
- 
-                         elsif Item_Name = Snames.Name_Source_Files then
- 
-                            --  for Source_Files use ...
- 
-                            --  String list Source_Files is converted to
-                            --  variable <PROJECT>.src_files
- 
-                            Put (Project_Name);
-                            Put (".src_files:=$(");
-                            Put_Attribute (Project, Pkg, Item_Name, No_Name);
-                            Put (")");
-                            New_Line;
- 
-                            if In_Case then
-                               if Source_Files_Declaration = False then
-                                  Source_Files_Declaration := May_Be;
-                               end if;
- 
-                               if Source_Files_Declaration /= True then
- 
-                                  --  Variable src_files.specified is set to
-                                  --  TRUE. It will be tested to decide if there
-                                  --  is a need to look for source files either
-                                  --  in the source directories or in a source
-                                  --  list file.
- 
-                                  Put_Line ("src_files.specified:=TRUE");
-                               end if;
- 
-                            else
-                               Source_Files_Declaration := True;
-                            end if;
- 
-                         elsif Item_Name = Snames.Name_Source_List_File then
- 
-                            --  for Source_List_File use ...
- 
-                            --  Single string Source_List_File is converted to
-                            --  variable src.list_file. It will be used
-                            --  later, if necessary, to get the source
-                            --  file names from the specified file.
-                            --  The file name is converted to an absolute path
-                            --  name if necessary.
- 
-                            Put ("src.list_file:=" &
-                                 "$(strip $(shell gprcmd to_absolute $(");
-                            Put (Project_Name);
-                            Put (".base_dir) '$(");
-                            Put_Attribute (Project, Pkg, Item_Name, No_Name);
-                            Put_Line (")'))");
- 
-                            if In_Case then
-                               if Source_List_File_Declaration = False then
-                                  Source_List_File_Declaration := May_Be;
-                               end if;
- 
-                               if Source_Files_Declaration /= True
-                                 and then Source_List_File_Declaration /= True
-                               then
-                                  --  Variable src_list_file.specified is set to
-                                  --  TRUE. It will be tested later, if
-                                  --  necessary, to read the source list file.
- 
-                                  Put_Line ("src_list_file.specified:=TRUE");
-                               end if;
- 
-                            else
-                               Source_List_File_Declaration := True;
-                            end if;
- 
-                         elsif Item_Name = Snames.Name_Object_Dir then
- 
-                            --  for Object_Dir use ...
- 
-                            --  Single string attribute Object_Dir is converted
-                            --  to variable <PROJECT>.obj_dir. The directory is
-                            --  converted to an absolute path name,
-                            --  if necessary.
- 
-                            Put (Project_Name);
-                            Put (".obj_dir:=" &
-                                 "$(strip $(shell gprcmd to_absolute $(");
-                            Put (Project_Name);
-                            Put (".base_dir) '$(");
-                            Put_Attribute (Project, Pkg, Item_Name, No_Name);
-                            Put_Line (")'))");
- 
-                         elsif Item_Name = Snames.Name_Exec_Dir then
- 
-                            --  for Exec_Dir use ...
- 
-                            --  Single string attribute Exec_Dir is converted
-                            --  to variable EXEC_DIR. The directory is
-                            --  converted to an absolute path name,
-                            --  if necessary.
- 
-                            Put ("EXEC_DIR:=" &
-                                 "$(strip $(shell gprcmd to_absolute $(");
-                            Put (Project_Name);
-                            Put (".base_dir) '$(");
-                            Put_Attribute (Project, Pkg, Item_Name, No_Name);
-                            Put_Line (")'))");
- 
-                         elsif Item_Name = Snames.Name_Main then
- 
-                            --  for Mains use ...
- 
-                            --  String list attribute Main is converted to
-                            --  variable ADA_MAINS.
- 
-                            Put ("ADA_MAINS:=$(");
-                            Put_Attribute (Project, Pkg, Item_Name, No_Name);
-                            Put (")");
-                            New_Line;
- 
-                         elsif Item_Name = Name_Main_Language then
- 
-                            --  for Main_Language use ...
- 
-                            Put ("MAIN:=");
- 
-                            --  If the expression is static (expected to be so
-                            --  most of the cases), then just give to MAIN
-                            --  the lower case value of the expression.
- 
-                            if Expression_Kind = Static_String then
-                               Put (To_Lower (Expression_Value
-                                                (1 .. Expression_Last)));
- 
-                            else
-                               --  Otherwise, call to_lower on the value
-                               --  of the attribute.
- 
-                               Put ("$(shell gprcmd to_lower $(");
-                               Put_Attribute
-                                 (Project, No_Name, Item_Name, No_Name);
-                               Put ("))");
-                            end if;
- 
-                            New_Line;
- 
-                         else
-                            --  Other attribute are of no interest; suppress
-                            --  their declarations.
- 
-                            Put_Declaration := False;
-                         end if;
- 
-                      elsif Pkg = Snames.Name_Compiler then
-                         --  Attribute of package Compiler
- 
-                         if Item_Name = Snames.Name_Switches then
- 
-                            --  for Switches (<file_name>) use ...
- 
-                            --  As the C and C++ extension may not be known
-                            --  statically, at the end of the processing of this
-                            --  project file, a test will done to decide if the
-                            --  file name (the index) has a C or C++ extension.
-                            --  The index is recorded in the table Switches,
-                            --  making sure that it appears only once.
- 
-                            declare
-                               Found : Boolean := False;
-                            begin
-                               for J in Switches.First .. Switches.Last loop
-                                  if Switches.Table (J) = Index then
-                                     Found := True;
-                                     exit;
-                                  end if;
-                               end loop;
- 
-                               if not Found then
-                                  Switches.Increment_Last;
-                                  Switches.Table (Switches.Last) := Index;
-                               end if;
-                            end;
- 
-                         elsif Item_Name = Snames.Name_Default_Switches then
-                            Get_Name_String (Index);
-                            To_Lower (Name_Buffer (1 .. Name_Len));
- 
-                            if Name_Buffer (1 .. Name_Len) = "c" then
-                               Put ("CFLAGS:=$(");
-                               Put_Attribute (Project, Pkg, Item_Name, Index);
-                               Put (")");
-                               New_Line;
- 
-                            elsif Name_Buffer (1 .. Name_Len) = "c++" then
-                               Put ("CXXFLAGS:=$(");
-                               Put_Attribute (Project, Pkg, Item_Name, Index);
-                               Put (")");
-                               New_Line;
-                            end if;
-                         else
-                            --  Other attribute are of no interest; suppress
-                            --  their declarations.
- 
-                            Put_Declaration := False;
-                         end if;
- 
-                      elsif Pkg = Name_Ide then
- 
-                         --  Attributes of package IDE
- 
-                         if Item_Name = Name_Compiler_Command then
- 
-                            --  for Compiler_Command (<language>) use ...
- 
-                            declare
-                               Index_Name : Name_Id := No_Name;
- 
-                            begin
-                               Get_Name_String (Index);
-                               To_Lower (Name_Buffer (1 .. Name_Len));
-                               Index_Name := Name_Find;
- 
-                               --  Only "Ada", "C" and "C++" are of interest
- 
-                               if Index_Name = Snames.Name_Ada then
- 
-                                  --  For "Ada", we set the variable $GNATMAKE
- 
-                                  Put ("GNATMAKE:=$(");
-                                  Put_Attribute
-                                    (Project, Pkg, Item_Name, Index);
-                                  Put (")");
-                                  New_Line;
- 
-                               elsif Index_Name = Snames.Name_C then
- 
-                                  --  For "C", we set the variable $CC
- 
-                                  Put ("CC:=$(");
-                                  Put_Attribute
-                                    (Project, Pkg, Item_Name, Index);
-                                  Put (")");
-                                  New_Line;
- 
-                               elsif Index_Name = Name_C_Plus_Plus then
- 
-                                  --  For "C++", we set the variable $CXX
- 
-                                  Put ("CXX:=$(");
-                                  Put_Attribute
-                                    (Project, Pkg, Item_Name, Index);
-                                  Put (")");
-                                  New_Line;
-                               end if;
-                            end;
-                         else
-                            --  Other attribute are of no interest; suppress
-                            --  their declarations.
- 
-                            Put_Declaration := False;
-                         end if;
- 
-                      elsif Pkg = Snames.Name_Naming then
-                         --  Attributes of package Naming
- 
-                         if Item_Name = Snames.Name_Body_Suffix then
- 
-                            --  for Body_Suffix (<language>) use ...
- 
-                            declare
-                               Index_Name : Name_Id := No_Name;
- 
-                            begin
-                               Get_Name_String (Index);
-                               To_Lower (Name_Buffer (1 .. Name_Len));
-                               Index_Name := Name_Find;
- 
-                               --  Languages "C", "C++" & "Ada" are of interest
- 
-                               if Index_Name = Snames.Name_C then
- 
-                                  --  For "C", we set the variable C_EXT
- 
-                                  Put ("C_EXT:=$(");
-                                  Put_Attribute
-                                    (Project, Pkg, Item_Name, Index);
-                                  Put (")");
-                                  New_Line;
- 
-                                  if Expression_Kind /= Static_String then
-                                     C_Suffix_Static := False;
- 
-                                  elsif C_Suffix_Static then
-                                     if C_Suffix_Last = 0 then
-                                        if C_Suffix'Last < Expression_Last then
-                                           Free (C_Suffix);
-                                           C_Suffix := new String'
-                                             (Expression_Value
-                                                (1 .. Expression_Last));
- 
-                                        else
-                                           C_Suffix (1 .. Expression_Last) :=
-                                             Expression_Value
-                                             (1 .. Expression_Last);
-                                        end if;
- 
-                                        C_Suffix_Last := Expression_Last;
- 
-                                     else
-                                        C_Suffix_Static :=
-                                          Expression_Value
-                                            (1 .. Expression_Last) =
-                                          C_Suffix (1 .. C_Suffix_Last);
-                                     end if;
-                                  end if;
- 
-                               elsif Index_Name = Name_C_Plus_Plus then
- 
-                                  --  For "C++", we set the variable CXX_EXT
- 
-                                  Put ("CXX_EXT:=$(");
-                                  Put_Attribute
-                                    (Project, Pkg, Item_Name, Index);
-                                  Put (")");
-                                  New_Line;
- 
-                                  if Expression_Kind /= Static_String then
-                                     Cxx_Suffix_Static := False;
- 
-                                  elsif Cxx_Suffix_Static then
-                                     if Cxx_Suffix_Last = 0 then
-                                        if
-                                          Cxx_Suffix'Last < Expression_Last
-                                        then
-                                           Free (Cxx_Suffix);
-                                           Cxx_Suffix := new String'
-                                             (Expression_Value
-                                                (1 .. Expression_Last));
- 
-                                        else
-                                           Cxx_Suffix (1 .. Expression_Last) :=
-                                             Expression_Value
-                                             (1 .. Expression_Last);
-                                        end if;
- 
-                                        Cxx_Suffix_Last := Expression_Last;
- 
-                                     else
-                                        Cxx_Suffix_Static :=
-                                          Expression_Value
-                                            (1 .. Expression_Last) =
-                                          Cxx_Suffix (1 .. Cxx_Suffix_Last);
-                                     end if;
-                                  end if;
- 
-                               elsif Index_Name = Snames.Name_Ada then
- 
-                                  --  For "Ada", we set the variable ADA_BODY
- 
-                                  Put ("ADA_BODY:=$(");
-                                  Put_Attribute
-                                    (Project, Pkg, Item_Name, Index);
-                                  Put (")");
-                                  New_Line;
- 
-                                  if Expression_Kind /= Static_String then
-                                     Ada_Body_Suffix_Static := False;
- 
-                                  elsif Ada_Body_Suffix_Static then
-                                     if Ada_Body_Suffix_Last = 0 then
-                                        if
-                                          Ada_Body_Suffix'Last < Expression_Last
-                                        then
-                                           Free (Ada_Body_Suffix);
-                                           Ada_Body_Suffix := new String'
-                                             (Expression_Value
-                                                (1 .. Expression_Last));
- 
-                                        else
-                                           Ada_Body_Suffix
-                                             (1 .. Expression_Last) :=
-                                             Expression_Value
-                                               (1 .. Expression_Last);
-                                        end if;
- 
-                                        Ada_Body_Suffix_Last := Expression_Last;
- 
-                                     else
-                                        Ada_Body_Suffix_Static :=
-                                          Expression_Value
-                                            (1 .. Expression_Last) =
-                                            Ada_Body_Suffix
-                                              (1 .. Ada_Body_Suffix_Last);
-                                     end if;
-                                  end if;
-                               end if;
-                            end;
- 
-                         elsif Item_Name = Snames.Name_Spec_Suffix then
- 
-                            --  for Spec_Suffix (<language>) use ...
- 
-                            declare
-                               Index_Name : Name_Id := No_Name;
- 
-                            begin
-                               Get_Name_String (Index);
-                               To_Lower (Name_Buffer (1 .. Name_Len));
-                               Index_Name := Name_Find;
- 
-                               --  Only "Ada" is of interest
- 
-                               if Index_Name = Snames.Name_Ada then
- 
-                                  --  For "Ada", we set the variable ADA_SPEC
- 
-                                  Put ("ADA_SPEC:=$(");
-                                  Put_Attribute
-                                    (Project, Pkg, Item_Name, Index);
-                                  Put (")");
-                                  New_Line;
- 
-                                  if Expression_Kind /= Static_String then
-                                     Ada_Spec_Suffix_Static := False;
- 
-                                  elsif Ada_Spec_Suffix_Static then
-                                     if Ada_Spec_Suffix_Last = 0 then
-                                        if
-                                          Ada_Spec_Suffix'Last < Expression_Last
-                                        then
-                                           Free (Ada_Spec_Suffix);
-                                           Ada_Spec_Suffix := new String'
-                                             (Expression_Value
-                                                (1 .. Expression_Last));
- 
-                                        else
-                                           Ada_Spec_Suffix
-                                             (1 .. Expression_Last) :=
-                                             Expression_Value
-                                               (1 .. Expression_Last);
-                                        end if;
- 
-                                        Ada_Spec_Suffix_Last := Expression_Last;
- 
-                                     else
-                                        Ada_Spec_Suffix_Static :=
-                                          Expression_Value
-                                          (1 .. Expression_Last) =
-                                          Ada_Spec_Suffix
-                                          (1 .. Ada_Spec_Suffix_Last);
-                                     end if;
-                                  end if;
-                               end if;
-                            end;
-                         else
-                            --  Other attribute are of no interest; suppress
-                            --  their declarations.
- 
-                            Put_Declaration := False;
-                         end if;
-                      end if;
-                   end if;
- 
-                   --  Suppress the attribute declaration if not needed
- 
-                   if not Put_Declaration then
-                      IO.Release (Pos_Comment);
-                   end if;
-                end;
- 
-             when N_Case_Construction =>
- 
-                --  case <typed_string_variable> is ...
- 
-                declare
-                   Case_Project  : Project_Node_Id := Project;
-                   Case_Pkg      : Name_Id := No_Name;
-                   Variable_Node : constant Project_Node_Id :=
-                                     Case_Variable_Reference_Of (Current_Item);
-                   Variable_Name : constant Name_Id := Name_Of (Variable_Node);
- 
-                begin
-                   if Project_Node_Of (Variable_Node) /= Empty_Node then
-                      Case_Project := Project_Node_Of (Variable_Node);
-                   end if;
- 
-                   if Package_Node_Of (Variable_Node) /= Empty_Node then
-                      Case_Pkg := Name_Of (Package_Node_Of (Variable_Node));
-                   end if;
- 
-                   --  If we are in a package, and no package is specified
-                   --  for the case variable, we look into the table
-                   --  Variables_Names to decide if it is a variable local
-                   --  to the package or a project level variable.
- 
-                   if Pkg /= No_Name
-                     and then Case_Pkg = No_Name
-                     and then Case_Project = Project
-                   then
-                      for
-                        Index in Variable_Names.First .. Variable_Names.Last
-                      loop
-                         if Variable_Names.Table (Index) = Variable_Name then
-                            Case_Pkg := Pkg;
-                            exit;
-                         end if;
-                      end loop;
-                   end if;
- 
-                   --  The real work is done in Process_Case_Construction.
- 
-                   Process_Case_Construction
-                     (Current_Project => Project,
-                      Current_Pkg     => Pkg,
-                      Case_Project    => Case_Project,
-                      Case_Pkg        => Case_Pkg,
-                      Name            => Variable_Name,
-                      Node            => Current_Item);
-                end;
- 
-             when others =>
-                null;
- 
-          end case;
-       end loop;
-    end Process_Declarative_Items;
- 
-    -----------------------
-    -- Process_Externals --
-    -----------------------
-    procedure Process_Externals (Project : Project_Node_Id) is
-       Project_Name : constant Name_Id := Name_Of (Project);
- 
-       No_External_Yet : Boolean := True;
- 
-       procedure Expression (First_Term : Project_Node_Id);
-       --  Look for external reference in the term of an expression.
-       --  If one is found, build the Makefile external reference variable.
- 
-       procedure Process_Declarative_Items (Item : Project_Node_Id);
-       --  Traverse the declarative items of a project file to find all
-       --  external references.
- 
-       ----------------
-       -- Expression --
-       ----------------
- 
-       procedure Expression (First_Term : Project_Node_Id) is
-          Term : Project_Node_Id := First_Term;
-          --  The term in the expression list
- 
-          Current_Term : Project_Node_Id := Empty_Node;
-          --  The current term node id
- 
-          Default : Project_Node_Id;
- 
-       begin
-          --  Check each term of the expression
- 
-          while Term /= Empty_Node loop
-             Current_Term := Tree.Current_Term (Term);
- 
-             if Kind_Of (Current_Term) = N_External_Value then
- 
-                --  If it is the first external reference of this project file,
-                --  output a comment
- 
-                if No_External_Yet then
-                   No_External_Yet := False;
-                   New_Line;
- 
-                   Put_Line ("# external references");
- 
-                   New_Line;
-                end if;
- 
-                --  Increase Last_External and record the node of the external
-                --  reference in table Externals, so that the external reference
-                --  variable can be identified later.
- 
-                Last_External := Last_External + 1;
-                Externals.Set (Current_Term, Last_External);
- 
-                Default := External_Default_Of (Current_Term);
- 
-                Get_Name_String
-                  (String_Value_Of (External_Reference_Of (Current_Term)));
- 
-                declare
-                   External_Name : constant String :=
-                                     Name_Buffer (1 .. Name_Len);
- 
-                begin
-                   --  Output a comment for this external reference
- 
-                   Put ("# external (""");
-                   Put (External_Name);
- 
-                   if Default /= Empty_Node then
-                      Put (""", """);
-                      Put (String_Value_Of (Default));
-                   end if;
- 
-                   Put (""")");
-                   New_Line;
- 
-                   --  If there is no default, output one line:
- 
-                   --  <PROJECT>__EXTERNAL__#:=$(<external name>)
- 
-                   if Default = Empty_Node then
-                      Put_U_Name (Project_Name);
-                      Put (".external.");
-                      Put (Last_External);
-                      Put (":=$(");
-                      Put (External_Name, With_Substitution => True);
-                      Put (")");
-                      New_Line;
- 
-                   else
-                      --  When there is a default, output the following lines:
- 
-                      --  ifeq ($(<external_name),)
-                      --     <PROJECT>__EXTERNAL__#:=<default>
-                      --  else
-                      --     <PROJECT>__EXTERNAL__#:=$(<external_name>)
-                      --  endif
- 
-                      Put ("ifeq ($(");
-                      Put (External_Name, With_Substitution => True);
-                      Put ("),)");
-                      New_Line;
- 
-                      Put ("   ");
-                      Put_U_Name (Project_Name);
-                      Put (".external.");
-                      Put (Last_External);
-                      Put (":=");
-                      Put (String_Value_Of (Default));
-                      New_Line;
- 
-                      Put_Line ("else");
- 
-                      Put ("   ");
-                      Put_U_Name (Project_Name);
-                      Put (".external.");
-                      Put (Last_External);
-                      Put (":=$(");
-                      Put (External_Name, With_Substitution => True);
-                      Put (")");
-                      New_Line;
- 
-                      Put_Line ("endif");
-                   end if;
-                end;
-             end if;
- 
-             Term := Next_Term (Term);
-          end loop;
-       end Expression;
- 
-       -------------------------------
-       -- Process_Declarative_Items --
-       -------------------------------
- 
-       procedure Process_Declarative_Items (Item : Project_Node_Id) is
-          Current_Declarative_Item : Project_Node_Id := Item;
-          Current_Item             : Project_Node_Id := Empty_Node;
- 
-       begin
-          --  For each declarative item
- 
-          while Current_Declarative_Item /= Empty_Node loop
-             Current_Item := Current_Item_Node (Current_Declarative_Item);
- 
-             --  Set Current_Declarative_Item to the next declarative item
-             --  ready for the next iteration
- 
-             Current_Declarative_Item := Next_Declarative_Item
-                                           (Current_Declarative_Item);
- 
-             --  Write_Line (Project_Node_Kind'Image (Kind_Of (Current_Item)));
- 
-             case Kind_Of (Current_Item) is
- 
-                when N_Package_Declaration =>
- 
-                   --  Recursive call the declarative items of a package
- 
-                   if
-                     Project_Of_Renamed_Package_Of (Current_Item) = Empty_Node
-                   then
-                      Process_Declarative_Items
-                        (First_Declarative_Item_Of (Current_Item));
-                   end if;
- 
-                when N_Attribute_Declaration      |
-                     N_Typed_Variable_Declaration |
-                     N_Variable_Declaration        =>
- 
-                   --  Process the expression to look for external references
- 
-                   Expression
-                     (First_Term => Tree.First_Term
-                                       (Expression_Of (Current_Item)));
- 
-                when N_Case_Construction =>
- 
-                   --  Recursive calls to process the declarative items of
-                   --  each case item.
- 
-                   declare
-                      Case_Item : Project_Node_Id :=
-                        First_Case_Item_Of (Current_Item);
- 
-                   begin
-                      while Case_Item /= Empty_Node loop
-                         Process_Declarative_Items
-                           (First_Declarative_Item_Of (Case_Item));
-                         Case_Item := Next_Case_Item (Case_Item);
-                      end loop;
-                   end;
- 
-                when others =>
-                   null;
-             end case;
-          end loop;
-       end Process_Declarative_Items;
- 
-       --  Start of procedure Process_Externals
- 
-    begin
-       Process_Declarative_Items
-         (First_Declarative_Item_Of (Project_Declaration_Of (Project)));
- 
-       if not No_External_Yet then
-          Put_Line ("# end of external references");
-          New_Line;
-       end if;
-    end Process_Externals;
- 
-    ---------
-    -- Put --
-    ---------
- 
-    procedure Put (S : String; With_Substitution : Boolean := False) is
-    begin
-       IO.Put (S);
- 
-       --  If With_Substitution is True, check if S is one of the reserved
-       --  variables. If it is, append to it the Saved_Suffix.
- 
-       if With_Substitution then
-          for J in Reserved_Variables'Range loop
-             if S = Reserved_Variables (J).all then
-                IO.Put (Saved_Suffix);
-                exit;
-             end if;
-          end loop;
-       end if;
-    end Put;
- 
-    procedure Put (P : Positive) is
-       Image : constant String := P'Img;
- 
-    begin
-       Put (Image (Image'First + 1 .. Image'Last));
-    end Put;
- 
-    procedure Put (S : Name_Id) is
-    begin
-       Get_Name_String (S);
-       Put (Name_Buffer (1 .. Name_Len));
-    end Put;
- 
-    -------------------
-    -- Put_Attribute --
-    -------------------
- 
-    procedure Put_Attribute
-      (Project : Project_Node_Id;
-       Pkg     : Name_Id;
-       Name    : Name_Id;
-       Index   : Name_Id)
-    is
-    begin
-       Put_U_Name (Name_Of (Project));
- 
-       if Pkg /= No_Name then
-          Put (".");
-          Put_L_Name (Pkg);
-       end if;
- 
-       Put (".");
-       Put_L_Name (Name);
- 
-       if Index /= No_Name then
-          Put (".");
- 
-          --  For attribute Switches, we don't want to change the file name
- 
-          if Name = Snames.Name_Switches then
-             Get_Name_String (Index);
-             Put (Name_Buffer (1 .. Name_Len));
- 
-          else
-             Special_Put_U_Name (Index);
-          end if;
-       end if;
-    end Put_Attribute;
- 
-    -----------------------------
-    -- Put_Directory_Separator --
-    -----------------------------
- 
-    procedure Put_Directory_Separator is
-    begin
-       Put (S => (1 => Directory_Separator));
-    end Put_Directory_Separator;
- 
-    -------------------------
-    -- Put_Include_Project --
-    -------------------------
- 
-    procedure Put_Include_Project
-      (Included_Project_Path  : Name_Id;
-       Included_Project       : Project_Node_Id;
-       Including_Project_Name : String)
-    is
-    begin
-       --  If path is null, there is nothing to do.
-       --  This happens when there is no project being extended.
- 
-       if Included_Project_Path /= No_Name then
-          Get_Name_String (Included_Project_Path);
- 
-          declare
-             Included_Project_Name : constant String :=
-               Get_Name_String (Name_Of (Included_Project));
-             Included_Directory_Path : constant String :=
-               Dir_Name (Name_Buffer (1 .. Name_Len));
-             Last : Natural := Included_Directory_Path'Last;
- 
-          begin
-             --  Remove a possible directory separator at the end of the
-             --  directory.
- 
-             if Last >= Included_Directory_Path'First
-               and then Included_Directory_Path (Last) = Directory_Separator
-             then
-                Last := Last - 1;
-             end if;
- 
-             Put ("BASE_DIR=");
- 
-             --  If it is a relative path, precede the directory with
-             --  $(<PROJECT>.base_dir)/
- 
-             if not Is_Absolute_Path (Included_Directory_Path) then
-                Put ("$(");
-                Put (Including_Project_Name);
-                Put (".base_dir)" & Directory_Separator);
-             end if;
- 
-             Put (Included_Directory_Path
-                    (Included_Directory_Path'First .. Last));
-             New_Line;
- 
-             --  Include the Makefile
- 
-             Put ("include $(BASE_DIR)");
-             Put_Directory_Separator;
-             Put ("Makefile.");
-             Put (To_Lower (Included_Project_Name));
-             New_Line;
- 
-             New_Line;
-          end;
-       end if;
-    end Put_Include_Project;
- 
-    --------------
-    -- Put_Line --
-    --------------
- 
-    procedure Put_Line (S : String) is
-    begin
-       IO.Put (S);
-       IO.New_Line;
-    end Put_Line;
- 
-    ----------------
-    -- Put_L_Name --
-    ----------------
- 
-    procedure Put_L_Name (N : Name_Id) is
-    begin
-       Put (To_Lower (Get_Name_String (N)));
-    end Put_L_Name;
- 
-    ----------------
-    -- Put_M_Name --
-    ----------------
- 
-    procedure Put_M_Name (N : Name_Id) is
-       Name : String := Get_Name_String (N);
- 
-    begin
-       To_Mixed (Name);
-       Put (Name);
-    end Put_M_Name;
- 
-    ----------------
-    -- Put_U_Name --
-    ----------------
- 
-    procedure Put_U_Name (N : Name_Id) is
-    begin
-       Put (To_Upper (Get_Name_String (N)));
-    end Put_U_Name;
- 
-    ------------------
-    -- Put_Variable --
-    ------------------
- 
-    procedure Put_Variable
-      (Project : Project_Node_Id;
-       Pkg     : Name_Id;
-       Name    : Name_Id)
-    is
-    begin
-       Put_U_Name (Name_Of (Project));
- 
-       if Pkg /= No_Name then
-          Put (".");
-          Put_L_Name (Pkg);
-       end if;
- 
-       Put (".");
-       Put_U_Name (Name);
-    end Put_Variable;
- 
-    -----------------------
-    -- Recursive_Process --
-    -----------------------
- 
-    procedure Recursive_Process (Project : Project_Node_Id) is
-       With_Clause        : Project_Node_Id;
-       Last_Case          : Natural := Last_Case_Construction;
-       There_Are_Cases    : Boolean := False;
-       May_Be_C_Sources   : Boolean := False;
-       May_Be_Cxx_Sources : Boolean := False;
-       Post_Processing    : Boolean := False;
-       Src_Files_Init     : IO.Position;
-       Src_List_File_Init : IO.Position;
-    begin
-       --  Nothing to do if Project is nil.
- 
-       if Project /= Empty_Node then
-          declare
-             Declaration_Node : constant Project_Node_Id :=
-                                  Project_Declaration_Of (Project);
-             --  Used to get the project being extended, if any, and the
-             --  declarative items of the project to be processed.
- 
-             Name : constant Name_Id := Name_Of (Project);
-             --  Name of the project being processed
- 
-             Directory  : constant Name_Id := Directory_Of (Project);
-             --  Directory of the project being processed. Used as default
-             --  for the object directory and the source directories.
- 
-             Lname : constant String := To_Lower (Get_Name_String (Name));
-             --  <project>: name of the project in lower case
- 
-             Uname : constant String := To_Upper (Lname);
-             --  <PROJECT>: name of the project in upper case
- 
-          begin
-             --  Nothing to do if project file has already been processed
- 
-             if Processed_Projects.Get (Name) = Empty_Node then
- 
-                --  Put project name in table Processed_Projects to avoid
-                --  processing the project several times.
- 
-                Processed_Projects.Set (Name, Project);
- 
-                --  Process all the projects imported, if any
- 
-                if Process_All_Project_Files then
-                   With_Clause := First_With_Clause_Of (Project);
- 
-                   while With_Clause /= Empty_Node loop
-                      Recursive_Process (Project_Node_Of (With_Clause));
-                      With_Clause := Next_With_Clause_Of (With_Clause);
-                   end loop;
- 
-                   --  Process the project being extended, if any.
-                   --  If there is no project being extended,
-                   --  Process_Declarative_Items will be called with Empty_Node
-                   --  and nothing will happen.
- 
-                   Recursive_Process (Extended_Project_Of (Declaration_Node));
-                end if;
- 
-                Source_Files_Declaration     := False;
-                Source_List_File_Declaration := False;
- 
-                --  Build in Name_Buffer the path name of the Makefile
- 
-                --  Start with the directory of the project file
- 
-                Get_Name_String (Directory);
- 
-                --  Add a directory separator, if needed
- 
-                if Name_Buffer (Name_Len) /= Directory_Separator then
-                   Name_Len := Name_Len + 1;
-                   Name_Buffer (Name_Len) := Directory_Separator;
-                end if;
- 
-                --  Add the filename of the Makefile: "Makefile.<project>"
- 
-                Name_Buffer (Name_Len + 1 .. Name_Len + 9) := "Makefile.";
-                Name_Len := Name_Len + 9;
- 
-                Name_Buffer (Name_Len + 1 .. Name_Len + Lname'Length) :=
-                  Lname;
-                Name_Len := Name_Len + Lname'Length;
- 
-                IO.Create (Name_Buffer (1 .. Name_Len));
- 
-                --  Display the Makefile being created, but only if not in
-                --  quiet output.
- 
-                if not Opt.Quiet_Output then
-                   Write_Str ("creating """);
-                   Write_Str (IO.Name_Of_File);
-                   Write_Line ("""");
-                end if;
- 
-                --  And create the Makefile
- 
-                New_Line;
- 
-                --  Outut a comment with the path name of the Makefile
-                Put ("# ");
-                Put_Line (IO.Name_Of_File);
- 
-                New_Line;
- 
-                --  The Makefile is a big ifeq to avoid multiple inclusion
-                --  ifeq ($(<PROJECT>.project),)
-                --  <PROJECT>.project:=True
-                --    ...
-                --  endif
- 
-                Put ("ifeq ($(");
-                Put (Uname);
-                Put (".project),)");
-                New_Line;
- 
-                Put (Uname);
-                Put (".project=True");
-                New_Line;
- 
-                New_Line;
- 
-                --  If it is the main Makefile (BASE_DIR is empty)
- 
-                Put_Line ("ifeq ($(BASE_DIR),)");
- 
-                --  Set <PROJECT>.root to True
- 
-                Put ("   ");
-                Put (Uname);
-                Put (".root=True");
-                New_Line;
- 
-                Put ("   ");
-                Put (Uname);
-                Put (".base_dir:=$(shell gprcmd pwd)");
-                New_Line;
- 
-                --  Include some utility functions and saved all reserved
-                --  env. vars. by including Makefile.prolog.
- 
-                New_Line;
- 
-                --  First, if MAKE_ROOT is not defined, try to get GNAT prefix
- 
-                Put ("   ifeq ($(");
-                Put (MAKE_ROOT);
-                Put ("),)");
-                New_Line;
- 
-                Put ("      MAKE_ROOT=$(shell gprcmd prefix)");
-                New_Line;
- 
-                Put ("   endif");
-                New_Line;
- 
-                New_Line;
- 
-                --  If MAKE_ROOT is still not defined, then fail
- 
-                Put ("   ifeq ($(");
-                Put (MAKE_ROOT);
-                Put ("),)");
-                New_Line;
- 
-                Put ("      $(error ");
-                Put (MAKE_ROOT);
-                Put (" variable is undefined, ");
-                Put ("Makefile.prolog cannot be loaded)");
-                New_Line;
- 
-                Put_Line ("   else");
- 
-                Put  ("      include $(");
-                Put (MAKE_ROOT);
-                Put (")");
-                Put_Directory_Separator;
-                Put ("share");
-                Put_Directory_Separator;
-                Put ("gnat");
-                Put_Directory_Separator;
-                Put ("Makefile.prolog");
-                New_Line;
- 
-                Put_Line ("   endif");
- 
-                --  Initialize some defaults
- 
-                Put ("   OBJ_EXT:=");
-                Put (Get_Object_Suffix.all);
-                New_Line;
- 
-                Put_Line ("else");
- 
-                --  When not the main Makefile, set <PROJECT>.root to False
- 
-                Put ("   ");
-                Put (Uname);
-                Put (".root=False");
-                New_Line;
- 
-                Put ("   ");
-                Put (Uname);
-                Put (".base_dir:=$(BASE_DIR)");
-                New_Line;
- 
-                Put_Line ("endif");
-                New_Line;
- 
-                --  For each imported project, if any, set BASE_DIR to the
-                --  directory of the imported project, and add an include
-                --  directive for the Makefile of the imported project.
- 
-                With_Clause := First_With_Clause_Of (Project);
- 
-                while With_Clause /= Empty_Node loop
-                   Put_Include_Project
-                     (String_Value_Of (With_Clause),
-                      Project_Node_Of (With_Clause),
-                      Uname);
-                   With_Clause := Next_With_Clause_Of (With_Clause);
-                end loop;
- 
-                --  Do the same if there is a project being extended.
-                --  If there is no project being extended, Put_Include_Project
-                --  will return immediately.
- 
-                Put_Include_Project
-                  (Extended_Project_Path_Of (Project),
-                   Extended_Project_Of (Declaration_Node),
-                   Uname);
- 
-                --  Set defaults to some variables
- 
-                IO.Mark (Src_Files_Init);
-                Put_Line ("src_files.specified:=FALSE");
- 
-                IO.Mark (Src_List_File_Init);
-                Put_Line ("src_list_file.specified:=FALSE");
- 
-                --  <PROJECT>.src_dirs is set by default to the project
-                --  directory.
- 
-                Put (Uname);
-                Put (".src_dirs:=$(");
-                Put (Uname);
-                Put (".base_dir)");
-                New_Line;
- 
-                --  <PROJECT>.obj_dir is set by default to the project
-                --  directory.
- 
-                Put (Uname);
-                Put (".obj_dir:=$(");
-                Put (Uname);
-                Put (".base_dir)");
-                New_Line;
- 
-                --  PROJECT_FILE:=<project>
- 
-                Put ("PROJECT_FILE:=");
-                Put (Lname);
-                New_Line;
- 
-                --  Output a comment indicating the name of the project being
-                --  processed.
- 
-                Put ("# project ");
-                Put_M_Name (Name);
-                New_Line;
- 
-                --  Process the external references of this project file
- 
-                Process_Externals (Project);
- 
-                New_Line;
- 
-                --  Reset the compiler switches, the suffixes and the languages
- 
-                Switches.Init;
-                Reset_Suffixes_And_Languages;
- 
-                --  Record the current value of Last_Case_Construction to
-                --  detect if there are case constructions in this project file.
- 
-                Last_Case := Last_Case_Construction;
- 
-                --  Process the declarative items of this project file
- 
-                Process_Declarative_Items
-                  (Project => Project,
-                   Pkg     => No_Name,
-                   In_Case => False,
-                   Item    => First_Declarative_Item_Of (Declaration_Node));
- 
-                --  Set There_Are_Case to True if there are case constructions
-                --  in this project file.
- 
-                There_Are_Cases := Last_Case /= Last_Case_Construction;
- 
-                --  If the suffixs and the languages have not been specified,
-                --  give them the default values.
- 
-                if C_Suffix_Static and then C_Suffix_Last = 0 then
-                   C_Suffix_Last := 2;
-                   C_Suffix (1 .. 2) := ".c";
-                end if;
- 
-                if Cxx_Suffix_Static and then Cxx_Suffix_Last = 0 then
-                   Cxx_Suffix_Last := 3;
-                   Cxx_Suffix (1 .. 3) := ".cc";
-                end if;
- 
-                if Ada_Body_Suffix_Static and then Ada_Body_Suffix_Last = 0 then
-                   Ada_Body_Suffix_Last := 4;
-                   Ada_Body_Suffix (1 .. 4) := ".adb";
-                end if;
- 
-                if Ada_Spec_Suffix_Static and then Ada_Spec_Suffix_Last = 0 then
-                   Ada_Spec_Suffix_Last := 4;
-                   Ada_Spec_Suffix (1 .. 4) := ".ads";
-                end if;
- 
-                if Languages_Static and then Languages_Last = 0 then
-                   Languages_Last := 5;
-                   Languages (1 .. 5) := " ada ";
-                end if;
- 
-                --  There may be C sources if the languages are not known
-                --  statically or if the languages include "C".
- 
-                May_Be_C_Sources := (not Languages_Static)
-                  or else Index
-                  (Source => Languages (1 .. Languages_Last),
-                   Pattern => " c ") /= 0;
- 
-                --  There may be C++ sources if the languages are not known
-                --  statically or if the languages include "C++".
- 
-                May_Be_Cxx_Sources := (not Languages_Static)
-                  or else Index
-                  (Source => Languages (1 .. Languages_Last),
-                   Pattern => " c++ ") /= 0;
- 
-                New_Line;
- 
-                --  If there are attribute Switches specified in package
-                --  Compiler of this project, post-process them.
- 
-                if Switches.Last >= Switches.First then
- 
-                   --  Output a comment indicating this post-processing
- 
-                   for Index in Switches.First .. Switches.Last loop
-                      Get_Name_String (Switches.Table (Index));
- 
-                      declare
-                         File        : constant String :=
-                                         Name_Buffer (1 .. Name_Len);
-                         Source_Kind : Source_Kind_Type := Unknown;
- 
-                      begin
-                         --  First, attempt to determine the language
- 
-                         if Ada_Body_Suffix_Static then
-                            if File'Length > Ada_Body_Suffix_Last
-                              and then
-                                File (File'Last - Ada_Body_Suffix_Last + 1 ..
-                                        File'Last) =
-                                           Ada_Body_Suffix
-                                             (1 .. Ada_Body_Suffix_Last)
-                            then
-                               Source_Kind := Ada_Body;
-                            end if;
-                         end if;
- 
-                         if Source_Kind = Unknown
-                           and then Ada_Spec_Suffix_Static
-                         then
-                            if File'Length > Ada_Spec_Suffix_Last
-                              and then
-                                File (File'Last - Ada_Spec_Suffix_Last + 1 ..
-                                        File'Last) =
-                                          Ada_Spec_Suffix
-                                            (1 .. Ada_Spec_Suffix_Last)
-                            then
-                               Source_Kind := Ada_Spec;
-                            end if;
-                         end if;
- 
-                         if Source_Kind = Unknown
-                           and then C_Suffix_Static
-                         then
-                            if File'Length > C_Suffix_Last
-                              and then
-                                File (File'Last - C_Suffix_Last + 1
-                                        .. File'Last) =
-                                               C_Suffix (1 .. C_Suffix_Last)
-                            then
-                               Source_Kind := C;
-                            end if;
-                         end if;
- 
-                         if Source_Kind = Unknown
-                           and then Cxx_Suffix_Static
-                         then
-                            if File'Length > Cxx_Suffix_Last
-                              and then
-                                File (File'Last - Cxx_Suffix_Last + 1
-                                          .. File'Last) =
-                                               Cxx_Suffix (1 .. Cxx_Suffix_Last)
-                            then
-                               Source_Kind := Cxx;
-                            end if;
-                         end if;
- 
-                         --  If we still don't know the language, and all
-                         --  suffixs are static, then it cannot any of the
-                         --  processed languages.
- 
-                         if Source_Kind = Unknown
-                           and then Ada_Body_Suffix_Static
-                           and then Ada_Spec_Suffix_Static
-                           and then C_Suffix_Static
-                           and then Cxx_Suffix_Static
-                         then
-                            Source_Kind := None;
-                         end if;
- 
-                         --  If it can be "C" or "C++", post-process
- 
-                         if (Source_Kind = Unknown and
-                               (May_Be_C_Sources or May_Be_Cxx_Sources))
-                           or else (May_Be_C_Sources and Source_Kind = C)
-                           or else (May_Be_Cxx_Sources and Source_Kind = Cxx)
-                         then
-                            if not Post_Processing then
-                               Post_Processing := True;
-                               Put_Line
-                                 ("# post-processing of Compiler'Switches");
-                            end if;
- 
-                            New_Line;
- 
-                            --  Output a comment:
-                            --  # for Switches (<file>) use ...
- 
-                            Put ("# for Switches (""");
-                            Put (File);
-                            Put (""") use ...");
-                            New_Line;
- 
-                            if There_Are_Cases then
- 
-                               --  Check that effectively there was Switches
-                               --  specified for this file: the attribute
-                               --  declaration may be in a case branch which was
-                               --  not followed.
- 
-                               Put ("ifneq ($(");
-                               Put (Uname);
-                               Put (".compiler.switches.");
-                               Put (File);
-                               Put ("),)");
-                               New_Line;
-                            end if;
- 
-                            if May_Be_C_Sources
-                              and then
-                              (Source_Kind = Unknown or else Source_Kind = C)
-                            then
-                               --  If it is definitely a C file, no need to test
- 
-                               if Source_Kind = C then
-                                  Put (File (1 .. File'Last - C_Suffix_Last));
-                                  Put (Get_Object_Suffix.all);
-                                  Put (": ");
-                                  Put (File);
-                                  New_Line;
- 
-                               else
-                                  --  May be a C file: test to know
- 
-                                  Put ("ifeq ($(filter %$(C_EXT),");
-                                  Put (File);
-                                  Put ("),");
-                                  Put (File);
-                                  Put (")");
-                                  New_Line;
- 
-                                  --  If it is, output a rule for the object
- 
-                                  Put ("$(subst $(C_EXT),$(OBJ_EXT),");
-                                  Put (File);
-                                  Put ("): ");
-                                  Put (File);
-                                  New_Line;
-                               end if;
- 
-                               Put (ASCII.HT & "@echo $(CC) -c $(");
-                               Put (Uname);
-                               Put (".compiler.switches.");
-                               Put (File);
-                               Put (") $< -o $(OBJ_DIR)/$@");
-                               New_Line;
- 
-                               --  If FAKE_COMPILE is defined, do not issue
-                               --  the compile command.
- 
-                               Put_Line ("ifndef FAKE_COMPILE");
- 
-                               Put (ASCII.HT & "@$(CC) -c $(");
-                               Put (Uname);
-                               Put (".compiler.switches.");
-                               Put (File);
-                               Put (") $(C_INCLUDES) $(DEP_CFLAGS) " &
-                                      "$< -o $(OBJ_DIR)/$@");
-                               New_Line;
- 
-                               Put_Line (ASCII.HT & "@$(post-compile)");
- 
-                               Put_Line ("endif");
- 
-                               if Source_Kind = Unknown then
-                                  Put_Line ("endif");
-                               end if;
-                            end if;
- 
-                            --  Now, test if it is a C++ file
- 
-                            if May_Be_Cxx_Sources
-                              and then
-                                (Source_Kind = Unknown
-                                   or else
-                                 Source_Kind = Cxx)
-                            then
-                               --  No need to test if definitely a C++ file
- 
-                               if Source_Kind = Cxx then
-                                  Put (File (1 .. File'Last - Cxx_Suffix_Last));
-                                  Put (Get_Object_Suffix.all);
-                                  Put (": ");
-                                  Put (File);
-                                  New_Line;
- 
-                               else
-                                  --  May be a C++ file: test to know
- 
-                                  Put ("ifeq ($(filter %$(CXX_EXT),");
-                                  Put (File);
-                                  Put ("),");
-                                  Put (File);
-                                  Put (")");
-                                  New_Line;
- 
-                                  --  If it is, output a rule for the object
- 
-                                  Put ("$(subst $(CXX_EXT),$(OBJ_EXT),");
-                                  Put (File);
-                                  Put ("): $(");
-                                  Put (Uname);
-                                  Put (".absolute.");
-                                  Put (File);
-                                  Put (")");
-                                  New_Line;
-                               end if;
- 
-                               Put (ASCII.HT & "@echo $(CXX) -c $(");
-                               Put (Uname);
-                               Put (".compiler.switches.");
-                               Put (File);
-                               Put (") $< -o $(OBJ_DIR)/$@");
-                               New_Line;
- 
-                               --  If FAKE_COMPILE is defined, do not issue
-                               --  the compile command
- 
-                               Put_Line ("ifndef FAKE_COMPILE");
- 
-                               Put (ASCII.HT & "@$(CXX) -c $(");
-                               Put (Uname);
-                               Put (".compiler.switches.");
-                               Put (File);
-                               Put (") $(C_INCLUDES) $(DEP_CFLAGS) " &
-                                      "$< -o $(OBJ_DIR)/$@");
-                               New_Line;
- 
-                               Put_Line (ASCII.HT & "@$(post-compile)");
- 
-                               Put_Line ("endif");
- 
-                               if Source_Kind = Unknown then
-                                  Put_Line ("endif");
-                               end if;
- 
-                            end if;
- 
-                            if There_Are_Cases then
-                               Put_Line ("endif");
-                            end if;
- 
-                            New_Line;
-                         end if;
-                      end;
-                   end loop;
- 
-                   --  Output a comment indication end of post-processing
-                   --  of Switches, if we have done some post-processing
- 
-                   if Post_Processing then
-                      Put_Line
-                        ("# end of post-processing of Compiler'Switches");
- 
-                      New_Line;
-                   end if;
-                end if;
- 
-                --  Add source dirs of this project file to variable SRC_DIRS
- 
-                Put ("SRC_DIRS:=$(SRC_DIRS) $(");
-                Put (Uname);
-                Put (".src_dirs)");
-                New_Line;
- 
-                --  Set OBJ_DIR to the object directory
- 
-                Put ("OBJ_DIR:=$(");
-                Put (Uname);
-                Put (".obj_dir)");
-                New_Line;
- 
-                New_Line;
- 
-                if Source_Files_Declaration = True then
- 
-                   --  It is guaranteed that Source_Files has been specified.
-                   --  We then suppress the two lines that initialize
-                   --  the variables src_files.specified and
-                   --  src_list_file.specified. Nothing else to do.
- 
-                   IO.Suppress (Src_Files_Init);
-                   IO.Suppress (Src_List_File_Init);
- 
-                else
-                   if Source_Files_Declaration = May_Be then
- 
-                      --  Need to test if attribute Source_Files was specified
- 
-                      Put_Line ("# get the source files, if necessary");
-                      Put_Line ("ifeq ($(src_files.specified),FALSE)");
- 
-                   else
-                      Put_Line ("# get the source files");
- 
-                      --  We may suppress initialization of src_files.specified
- 
-                      IO.Suppress (Src_Files_Init);
-                   end if;
- 
-                   if Source_List_File_Declaration /= May_Be then
-                      IO.Suppress (Src_List_File_Init);
-                   end if;
- 
-                   case Source_List_File_Declaration is
- 
-                      --  Source_List_File was specified
- 
-                      when True =>
-                         if Source_Files_Declaration = May_Be then
-                            Put ("   ");
-                         end if;
- 
-                         Put (Uname);
-                         Put (".src_files:= $(shell gprcmd cat " &
-                              "$(src.list_file))");
-                         New_Line;
- 
-                      --  Source_File_List was NOT specified
- 
-                      when False =>
-                         if Source_Files_Declaration = May_Be then
-                            Put ("   ");
-                         end if;
- 
-                         Put (Uname);
-                         Put (".src_files:= $(foreach name,$(");
-                         Put (Uname);
-                         Put (".src_dirs),$(notdir $(wildcard $(name)/*)))");
-                         New_Line;
- 
-                      when May_Be =>
-                         if Source_Files_Declaration = May_Be then
-                            Put ("   ");
-                         end if;
- 
-                         Put_Line ("ifeq ($(src_list_file.specified),TRUE)");
- 
-                         --  Get the source files from the file
- 
-                         if Source_Files_Declaration = May_Be then
-                            Put ("   ");
-                         end if;
- 
-                         Put ("   ");
-                         Put (Uname);
-                         Put (".src_files:= $(shell gprcmd cat " &
-                              "$(SRC__$LIST_FILE))");
-                         New_Line;
- 
-                         if Source_Files_Declaration = May_Be then
-                            Put ("   ");
-                         end if;
- 
-                         Put_Line ("else");
- 
-                         --  Otherwise get source from the source directories
- 
-                         if Source_Files_Declaration = May_Be then
-                            Put ("   ");
-                         end if;
- 
-                         Put ("   ");
-                         Put (Uname);
-                         Put (".src_files:= $(foreach name,$(");
-                         Put (Uname);
-                         Put (".src_dirs),$(notdir $(wildcard $(name)/*)))");
-                         New_Line;
- 
-                         if Source_Files_Declaration = May_Be then
-                            Put ("   ");
-                         end if;
- 
-                         Put_Line ("endif");
-                   end case;
- 
-                   if Source_Files_Declaration = May_Be then
-                      Put_Line ("endif");
-                   end if;
- 
-                   New_Line;
-                end if;
- 
-                if not Languages_Static then
- 
-                   --  If Languages include "c", get the C sources
- 
-                   Put_Line
-                     ("# get the C source files, if C is one of the languages");
- 
-                   Put_Line ("ifeq ($(filter c,$(LANGUAGES)),c)");
- 
-                   Put ("   C_SRCS:=$(filter %$(C_EXT),$(");
-                   Put (Uname);
-                   Put (".src_files))");
-                   New_Line;
-                   Put_Line ("   C_SRCS_DEFINED:=True");
- 
-                   --  Otherwise set C_SRCS to empty
- 
-                   Put_Line ("else");
-                   Put_Line ("   C_SRCS=");
-                   Put_Line ("endif");
-                   New_Line;
- 
-                   --  If Languages include "C++", get the C++ sources
- 
-                   Put_Line
-                     ("# get the C++ source files, " &
-                        "if C++ is one of the languages");
- 
-                   Put_Line ("ifeq ($(filter c++,$(LANGUAGES)),c++)");
- 
-                   Put ("   CXX_SRCS:=$(filter %$(CXX_EXT),$(");
-                   Put (Uname);
-                   Put (".src_files))");
-                   New_Line;
-                   Put_Line ("   CXX_SRCS_DEFINED:=True");
- 
-                   --  Otherwise set CXX_SRCS to empty
- 
-                   Put_Line ("else");
-                   Put_Line ("   CXX_SRCS=");
-                   Put_Line ("endif");
-                   New_Line;
- 
-                else
-                   if Ada.Strings.Fixed.Index
-                     (Languages (1 .. Languages_Last), " c ") /= 0
-                   then
-                      Put_Line ("# get the C sources");
-                      Put ("C_SRCS:=$(filter %$(C_EXT),$(");
-                      Put (Uname);
-                      Put (".src_files))");
-                      New_Line;
-                      Put_Line ("C_SRCS_DEFINED:=True");
- 
-                   else
-                      Put_Line ("# no C sources");
- 
-                      Put_Line ("C_SRCS=");
-                   end if;
- 
-                   New_Line;
- 
-                   if Ada.Strings.Fixed.Index
-                     (Languages (1 .. Languages_Last), " c++ ") /= 0
-                   then
-                      Put_Line ("# get the C++ sources");
-                      Put ("CXX_SRCS:=$(filter %$(CXX_EXT),$(");
-                      Put (Uname);
-                      Put (".src_files))");
-                      New_Line;
-                      Put_Line ("CXX_SRCS_DEFINED:=True");
- 
-                   else
-                      Put_Line ("# no C++ sources");
- 
-                      Put_Line ("CXX_SRCS=");
-                   end if;
- 
-                   New_Line;
-                end if;
- 
-                declare
-                   C_Present : constant Boolean :=
-                                 (not Languages_Static) or else
-                                 Ada.Strings.Fixed.Index
-                                   (Languages (1 .. Languages_Last), " c ")
-                                    /= 0;
- 
-                   Cxx_Present : constant Boolean :=
-                                   (not Languages_Static) or else
-                                   Ada.Strings.Fixed.Index
-                                     (Languages (1 .. Languages_Last), " c++ ")
-                                      /= 0;
- 
-                begin
-                   if C_Present or Cxx_Present then
- 
-                      --  If there are C or C++ sources,
-                      --  add a library name to variable LIBS.
- 
-                      Put ("# if there are ");
- 
-                      if C_Present then
-                         if Cxx_Present then
-                            Put ("C or C++");
- 
-                         else
-                            Put ("C");
-                         end if;
- 
-                      else
-                         Put ("C++");
-                      end if;
- 
-                      Put (" sources, add the library");
-                      New_Line;
- 
-                      Put ("ifneq ($(strip");
- 
-                      if C_Present then
-                         Put (" $(C_SRCS)");
-                      end if;
- 
-                      if Cxx_Present then
-                         Put (" $(CXX_SRCS)");
-                      end if;
- 
-                      Put ("),)");
-                      New_Line;
- 
-                      Put ("   LIBS:=$(");
-                      Put (Uname);
-                      Put (".obj_dir)/lib");
-                      Put (Lname);
-                      Put ("$(AR_EXT) $(LIBS)");
-                      New_Line;
- 
-                      Put_Line ("endif");
- 
-                      New_Line;
- 
-                   end if;
-                end;
- 
-                --  If this is the main Makefile, include Makefile.Generic
- 
-                Put ("ifeq ($(");
-                Put (Uname);
-                Put_Line (".root),True)");
- 
-                --  Include Makefile.generic
- 
-                Put ("   include $(");
-                Put (MAKE_ROOT);
-                Put (")");
-                Put_Directory_Separator;
-                Put ("share");
-                Put_Directory_Separator;
-                Put ("gnat");
-                Put_Directory_Separator;
-                Put ("Makefile.generic");
-                New_Line;
- 
-                --  If it is not the main Makefile, add the project to
-                --  variable DEPS_PROJECTS.
- 
-                Put_Line ("else");
- 
-                Put ("   DEPS_PROJECTS:=$(strip $(DEPS_PROJECTS) $(");
-                Put (Uname);
-                Put (".base_dir)/");
-                Put (Lname);
-                Put (")");
-                New_Line;
- 
-                Put_Line ("endif");
-                New_Line;
- 
-                Put_Line ("endif");
-                New_Line;
- 
-                --  Close the Makefile, so that another Makefile can be created
-                --  with the same File_Type variable.
- 
-                IO.Close;
-             end if;
-          end;
-       end if;
-    end Recursive_Process;
- 
-    ----------------------------------
-    -- Reset_Suffixes_And_Languages --
-    ----------------------------------
- 
-    procedure Reset_Suffixes_And_Languages is
-    begin
-       --  Last = 0 indicates that this is the default, which is static,
-       --  of course.
- 
-       C_Suffix_Last           := 0;
-       C_Suffix_Static         := True;
-       Cxx_Suffix_Last         := 0;
-       Cxx_Suffix_Static       := True;
-       Ada_Body_Suffix_Last    := 0;
-       Ada_Body_Suffix_Static  := True;
-       Ada_Spec_Suffix_Last    := 0;
-       Ada_Spec_Suffix_Static  := True;
-       Languages_Last          := 0;
-       Languages_Static        := True;
-    end Reset_Suffixes_And_Languages;
- 
-    --------------------
-    -- Source_Kind_Of --
-    --------------------
- 
-    function Source_Kind_Of (File_Name : Name_Id) return Source_Kind_Type is
-       Source_C_Suffix   : constant String :=
-         Suffix_Of (C_Suffix_Static, C_Suffix, C_Suffix_Last, ".c");
- 
-       Source_Cxx_Suffix : constant String :=
-         Suffix_Of (Cxx_Suffix_Static, Cxx_Suffix, Cxx_Suffix_Last, ".cc");
- 
-       Body_Ada_Suffix   : constant String :=
-         Suffix_Of
-           (Ada_Body_Suffix_Static,
-            Ada_Body_Suffix,
-            Ada_Body_Suffix_Last,
-            ".adb");
- 
-       Spec_Ada_Suffix   : constant String :=
-         Suffix_Of
-           (Ada_Spec_Suffix_Static,
-            Ada_Spec_Suffix,
-            Ada_Spec_Suffix_Last,
-            ".ads");
- 
-    begin
-       --  Get the name of the file
- 
-       Get_Name_String (File_Name);
- 
-       --  If the C suffix is static, check if it is a C file
- 
-       if Source_C_Suffix /= ""
-         and then Name_Len > Source_C_Suffix'Length
-         and then Name_Buffer (Name_Len - Source_C_Suffix'Length + 1
-                                 .. Name_Len) = Source_C_Suffix
-       then
-          return C;
- 
-       --  If the C++ suffix is static, check if it is a C++ file
- 
-       elsif Source_Cxx_Suffix /= ""
-         and then Name_Len > Source_Cxx_Suffix'Length
-         and then Name_Buffer (Name_Len - Source_Cxx_Suffix'Length + 1
-                                 .. Name_Len) = Source_Cxx_Suffix
-       then
-          return Cxx;
- 
-       --  If the Ada body suffix is static, check if it is an Ada body
- 
-       elsif Body_Ada_Suffix /= ""
-         and then Name_Len > Body_Ada_Suffix'Length
-         and then Name_Buffer (Name_Len - Body_Ada_Suffix'Length + 1
-                                 .. Name_Len) = Body_Ada_Suffix
-       then
-          return Ada_Body;
- 
-       --  If the Ada spec suffix is static, check if it is an Ada spec
- 
-       elsif Spec_Ada_Suffix /= ""
-         and then Name_Len > Spec_Ada_Suffix'Length
-         and then Name_Buffer (Name_Len - Spec_Ada_Suffix'Length + 1
-                                 .. Name_Len) = Spec_Ada_Suffix
-       then
-          return Ada_Body;
- 
-       --  If the C or C++ suffix is not static, then return Unknown
- 
-       elsif Source_C_Suffix = "" or else Source_Cxx_Suffix = "" then
-          return Unknown;
- 
-       --  Otherwise return None
- 
-       else
-          return None;
-       end if;
-    end Source_Kind_Of;
- 
-    ------------------------
-    -- Special_Put_U_Name --
-    ------------------------
- 
-    procedure Special_Put_U_Name (S : Name_Id) is
-    begin
-       Get_Name_String (S);
-       To_Upper (Name_Buffer (1 .. Name_Len));
- 
-       --  If string is "C++", change it to "CXX"
- 
-       if Name_Buffer (1 .. Name_Len) = "C++" then
-          Put ("CXX");
-       else
-          Put (Name_Buffer (1 .. Name_Len));
-       end if;
-    end Special_Put_U_Name;
- 
-    ---------------
-    -- Suffix_Of --
-    ---------------
- 
-    function Suffix_Of
-      (Static  : Boolean;
-       Value   : String_Access;
-       Last    : Natural;
-       Default : String) return String
-    is
-    begin
-       if Static then
- 
-          --  If the suffix is static, Last = 0 indicates that it is the default
-          --  suffix: return the default.
- 
-          if Last = 0 then
-             return Default;
- 
-          --  Otherwise, return the current suffix
- 
-          else
-             return Value (1 .. Last);
-          end if;
- 
-       --  If the suffix is not static, return ""
- 
-       else
-          return "";
-       end if;
-    end Suffix_Of;
- 
-    -----------
-    -- Usage --
-    -----------
- 
-    procedure Usage is
-    begin
-       if not Usage_Displayed then
-          Usage_Displayed := True;
-          Display_Copyright;
-          Write_Line ("Usage: gpr2make switches project-file");
-          Write_Eol;
-          Write_Line ("   -h   Display this usage");
-          Write_Line ("   -q   Quiet output");
-          Write_Line ("   -v   Verbose mode");
-          Write_Line ("   -R   not Recursive: only one project file");
-          Write_Eol;
-       end if;
-    end Usage;
- end Bld;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/bld.ads gcc-4.0.0/gcc/ada/bld.ads
*** gcc-3.4.3/gcc/ada/bld.ads	Tue Oct 21 13:41:58 2003
--- gcc-4.0.0/gcc/ada/bld.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,38 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                                  B L D                                   --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --        Copyright (C) 2002 Free Software Foundation, Inc.                 --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  The following package implements the facilities to build Makefiles
- --  for multi-language GNAT project files, so that building a complete
- --  multi-language system can be done easily, using GNU make.
- 
- package Bld is
- 
-    procedure Gpr2make;
-    --  Parse a project file and all the other project files it depends on
-    --  into a project tree; then from the project tree, produce one Makefile
-    --  for each project file in the project tree.
- 
- end Bld;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/butil.adb gcc-4.0.0/gcc/ada/butil.adb
*** gcc-3.4.3/gcc/ada/butil.adb	Thu Apr 24 17:53:58 2003
--- gcc-4.0.0/gcc/ada/butil.adb	Fri Nov 19 10:55:59 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2001 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Output;   use Output;
*** 30,52 ****
  
  package body Butil is
  
-    --------------------------
-    -- Get_Unit_Name_String --
-    --------------------------
- 
-    procedure Get_Unit_Name_String (U : Unit_Name_Type) is
-    begin
-       Get_Name_String (U);
- 
-       if Name_Buffer (Name_Len) = 's' then
-          Name_Buffer (Name_Len - 1 .. Name_Len + 5) := " (spec)";
-       else
-          Name_Buffer (Name_Len - 1 .. Name_Len + 5) := " (body)";
-       end if;
- 
-       Name_Len := Name_Len + 5;
-    end Get_Unit_Name_String;
- 
     ----------------------
     -- Is_Internal_Unit --
     ----------------------
--- 30,35 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/butil.ads gcc-4.0.0/gcc/ada/butil.ads
*** gcc-3.4.3/gcc/ada/butil.ads	Thu Apr 24 17:53:58 2003
--- gcc-4.0.0/gcc/ada/butil.ads	Fri Nov 19 10:55:59 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2001 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Butil is
*** 48,57 ****
     function Uname_Less (U1, U2 : Unit_Name_Type) return Boolean;
     --  Determines if the unit name U1 is alphabetically before U2
  
-    procedure Get_Unit_Name_String (U : Unit_Name_Type);
-    --  Compute unit name with (body) or (spec) after as required. On return
-    --  the result is stored in Name_Buffer and Name_Len is the length.
- 
     procedure Write_Unit_Name (U : Unit_Name_Type);
     --  Output unit name with (body) or (spec) after as required. On return
     --  Name_Len is set to the number of characters which were output.
--- 48,53 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/checks.adb gcc-4.0.0/gcc/ada/checks.adb
*** gcc-3.4.3/gcc/ada/checks.adb	Mon Jan  5 15:20:43 2004
--- gcc-4.0.0/gcc/ada/checks.adb	Thu Feb 10 13:50:40 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Errout;   use Errout;
*** 31,36 ****
--- 31,37 ----
  with Exp_Ch2;  use Exp_Ch2;
  with Exp_Util; use Exp_Util;
  with Elists;   use Elists;
+ with Eval_Fat; use Eval_Fat;
  with Freeze;   use Freeze;
  with Lib;      use Lib;
  with Nlists;   use Nlists;
*************** with Nmake;    use Nmake;
*** 38,46 ****
--- 39,49 ----
  with Opt;      use Opt;
  with Output;   use Output;
  with Restrict; use Restrict;
+ with Rident;   use Rident;
  with Rtsfind;  use Rtsfind;
  with Sem;      use Sem;
  with Sem_Eval; use Sem_Eval;
+ with Sem_Ch3;  use Sem_Ch3;
  with Sem_Ch8;  use Sem_Ch8;
  with Sem_Res;  use Sem_Res;
  with Sem_Util; use Sem_Util;
*************** package body Checks is
*** 186,191 ****
--- 189,202 ----
     -- Local Subprograms --
     -----------------------
  
+    procedure Apply_Float_Conversion_Check
+      (Ck_Node    : Node_Id;
+       Target_Typ : Entity_Id);
+    --  The checks on a conversion from a floating-point type to an integer
+    --  type are delicate. They have to be performed before conversion, they
+    --  have to raise an exception when the operand is a NaN, and rounding must
+    --  be taken into account to determine the safe bounds of the operand.
+ 
     procedure Apply_Selected_Length_Checks
       (Ck_Node    : Node_Id;
        Target_Typ : Entity_Id;
*************** package body Checks is
*** 237,248 ****
     function Guard_Access
       (Cond    : Node_Id;
        Loc     : Source_Ptr;
!       Ck_Node : Node_Id)
!       return    Node_Id;
     --  In the access type case, guard the test with a test to ensure
     --  that the access value is non-null, since the checks do not
     --  not apply to null access values.
  
     procedure Install_Static_Check (R_Cno : Node_Id; Loc : Source_Ptr);
     --  Called by Apply_{Length,Range}_Checks to rewrite the tree with the
     --  Constraint_Error node.
--- 248,262 ----
     function Guard_Access
       (Cond    : Node_Id;
        Loc     : Source_Ptr;
!       Ck_Node : Node_Id) return Node_Id;
     --  In the access type case, guard the test with a test to ensure
     --  that the access value is non-null, since the checks do not
     --  not apply to null access values.
  
+    procedure Install_Null_Excluding_Check (N : Node_Id);
+    --  Determines whether an access node requires a runtime access check and
+    --  if so inserts the appropriate run-time check
+ 
     procedure Install_Static_Check (R_Cno : Node_Id; Loc : Source_Ptr);
     --  Called by Apply_{Length,Range}_Checks to rewrite the tree with the
     --  Constraint_Error node.
*************** package body Checks is
*** 251,258 ****
       (Ck_Node    : Node_Id;
        Target_Typ : Entity_Id;
        Source_Typ : Entity_Id;
!       Warn_Node  : Node_Id)
!       return       Check_Result;
     --  Like Apply_Selected_Length_Checks, except it doesn't modify
     --  anything, just returns a list of nodes as described in the spec of
     --  this package for the Range_Check function.
--- 265,271 ----
       (Ck_Node    : Node_Id;
        Target_Typ : Entity_Id;
        Source_Typ : Entity_Id;
!       Warn_Node  : Node_Id) return Check_Result;
     --  Like Apply_Selected_Length_Checks, except it doesn't modify
     --  anything, just returns a list of nodes as described in the spec of
     --  this package for the Range_Check function.
*************** package body Checks is
*** 261,268 ****
       (Ck_Node    : Node_Id;
        Target_Typ : Entity_Id;
        Source_Typ : Entity_Id;
!       Warn_Node  : Node_Id)
!       return       Check_Result;
     --  Like Apply_Selected_Range_Checks, except it doesn't modify anything,
     --  just returns a list of nodes as described in the spec of this package
     --  for the Range_Check function.
--- 274,280 ----
       (Ck_Node    : Node_Id;
        Target_Typ : Entity_Id;
        Source_Typ : Entity_Id;
!       Warn_Node  : Node_Id) return Check_Result;
     --  Like Apply_Selected_Range_Checks, except it doesn't modify anything,
     --  just returns a list of nodes as described in the spec of this package
     --  for the Range_Check function.
*************** package body Checks is
*** 357,371 ****
           Check_Unset_Reference (P);
        end if;
  
!       --  Don't need access check if prefix is known to be non-null
  
        if Known_Non_Null (P) then
           return;
  
!       --  Don't need access checks if they are suppressed on the type
  
        elsif Access_Checks_Suppressed (Etype (P)) then
           return;
        end if;
  
        --  Case where P is an entity name
--- 369,391 ----
           Check_Unset_Reference (P);
        end if;
  
!       --  We do not need access checks if prefix is known to be non-null
  
        if Known_Non_Null (P) then
           return;
  
!       --  We do not need access checks if they are suppressed on the type
  
        elsif Access_Checks_Suppressed (Etype (P)) then
           return;
+ 
+          --  We do not need checks if we are not generating code (i.e. the
+          --  expander is not active). This is not just an optimization, there
+          --  are cases (e.g. with pragma Debug) where generating the checks
+          --  can cause real trouble).
+ 
+       elsif not Expander_Active then
+          return;
        end if;
  
        --  Case where P is an entity name
*************** package body Checks is
*** 391,409 ****
  
        --  Access check is required
  
!       declare
!          Loc : constant Source_Ptr := Sloc (N);
! 
!       begin
!          Insert_Action (N,
!            Make_Raise_Constraint_Error (Sloc (N),
!               Condition =>
!                 Make_Op_Eq (Loc,
!                   Left_Opnd => Duplicate_Subexpr_Move_Checks (P),
!                   Right_Opnd =>
!                     Make_Null (Loc)),
!               Reason => CE_Access_Check_Failed));
!       end;
     end Apply_Access_Check;
  
     -------------------------------
--- 411,417 ----
  
        --  Access check is required
  
!       Install_Null_Excluding_Check (P);
     end Apply_Access_Check;
  
     -------------------------------
*************** package body Checks is
*** 459,465 ****
     ---------------------------
  
     procedure Apply_Alignment_Check (E : Entity_Id; N : Node_Id) is
!       AC   : constant Node_Id := Address_Clause (E);
        Expr : Node_Id;
        Loc  : Source_Ptr;
  
--- 467,474 ----
     ---------------------------
  
     procedure Apply_Alignment_Check (E : Entity_Id; N : Node_Id) is
!       AC   : constant Node_Id   := Address_Clause (E);
!       Typ  : constant Entity_Id := Etype (E);
        Expr : Node_Id;
        Loc  : Source_Ptr;
  
*************** package body Checks is
*** 484,489 ****
--- 493,499 ----
           Expr := Expression (Expr);
  
        elsif Nkind (Expr) = N_Function_Call
+         and then Is_Entity_Name (Name (Expr))
          and then Is_RTE (Entity (Name (Expr)), RE_To_Address)
        then
           Expr := First (Parameter_Associations (Expr));
*************** package body Checks is
*** 497,512 ****
        --  value is unacceptable at compile time.
  
        if Compile_Time_Known_Value (Expr)
!         and then Known_Alignment (E)
        then
!          if Expr_Value (Expr) mod Alignment (E) /= 0 then
!             Insert_Action (N,
!                Make_Raise_Program_Error (Loc,
!                  Reason => PE_Misaligned_Address_Value));
!             Error_Msg_NE
!               ("?specified address for& not " &
!                "consistent with alignment", Expr, E);
!          end if;
  
        --  Here we do not know if the value is acceptable, generate
        --  code to raise PE if alignment is inappropriate.
--- 507,534 ----
        --  value is unacceptable at compile time.
  
        if Compile_Time_Known_Value (Expr)
!         and then (Known_Alignment (E) or else Known_Alignment (Typ))
        then
!          declare
!             AL : Uint := Alignment (Typ);
! 
!          begin
!             --  The object alignment might be more restrictive than the
!             --  type alignment.
! 
!             if Known_Alignment (E) then
!                AL := Alignment (E);
!             end if;
! 
!             if Expr_Value (Expr) mod AL /= 0 then
!                Insert_Action (N,
!                   Make_Raise_Program_Error (Loc,
!                     Reason => PE_Misaligned_Address_Value));
!                Error_Msg_NE
!                  ("?specified address for& not " &
!                   "consistent with alignment ('R'M 13.3(27))", Expr, E);
!             end if;
!          end;
  
        --  Here we do not know if the value is acceptable, generate
        --  code to raise PE if alignment is inappropriate.
*************** package body Checks is
*** 514,520 ****
        else
           --  Skip generation of this code if we don't want elab code
  
!          if not Restrictions (No_Elaboration_Code) then
              Insert_After_And_Analyze (N,
                Make_Raise_Program_Error (Loc,
                  Condition =>
--- 536,542 ----
        else
           --  Skip generation of this code if we don't want elab code
  
!          if not Restriction_Active (No_Elaboration_Code) then
              Insert_After_And_Analyze (N,
                Make_Raise_Program_Error (Loc,
                  Condition =>
*************** package body Checks is
*** 569,576 ****
        --  flag is not set anyway, or we are not doing code expansion.
  
        if Backend_Overflow_Checks_On_Target
!         or not Do_Overflow_Check (N)
!         or not Expander_Active
        then
           return;
        end if;
--- 591,598 ----
        --  flag is not set anyway, or we are not doing code expansion.
  
        if Backend_Overflow_Checks_On_Target
!         or else not Do_Overflow_Check (N)
!         or else not Expander_Active
        then
           return;
        end if;
*************** package body Checks is
*** 696,701 ****
--- 718,734 ----
     --  and perhaps this is not quite the right value, but it is good
     --  enough to catch the normal cases (and the relevant ACVC tests!)
  
+    --  The situation is as follows. In GNAT 3 (GCC 2.x), the size in bits
+    --  is computed in 32 bits without an overflow check. That's a real
+    --  problem for Ada. So what we do in GNAT 3 is to approximate the
+    --  size of an array by manually multiplying the element size by the
+    --  number of elements, and comparing that against the allowed limits.
+ 
+    --  In GNAT 5, the size in byte is still computed in 32 bits without
+    --  an overflow check in the dynamic case, but the size in bits is
+    --  computed in 64 bits. We assume that's good enough, so we use the
+    --  size in bits for the test.
+ 
     procedure Apply_Array_Size_Check (N : Node_Id; Typ : Entity_Id) is
        Loc  : constant Source_Ptr := Sloc (N);
        Ctyp : constant Entity_Id  := Component_Type (Typ);
*************** package body Checks is
*** 775,787 ****
     --  Start of processing for Apply_Array_Size_Check
  
     begin
!       if not Expander_Active
!         or else Storage_Checks_Suppressed (Typ)
!       then
           return;
        end if;
  
!       --  It is pointless to insert this check inside an  init proc, because
        --  that's too late, we have already built the object to be the right
        --  size, and if it's too large, too bad!
  
--- 808,826 ----
     --  Start of processing for Apply_Array_Size_Check
  
     begin
!       --  No need for a check if not expanding
! 
!       if not Expander_Active then
           return;
        end if;
  
!       --  No need for a check if checks are suppressed
! 
!       if Storage_Checks_Suppressed (Typ) then
!          return;
!       end if;
! 
!       --  It is pointless to insert this check inside an init proc, because
        --  that's too late, we have already built the object to be the right
        --  size, and if it's too large, too bad!
  
*************** package body Checks is
*** 804,915 ****
           end if;
        end loop;
  
!       --  First step is to calculate the maximum number of elements. For this
!       --  calculation, we use the actual size of the subtype if it is static,
!       --  and if a bound of a subtype is non-static, we go to the bound of the
!       --  base type.
  
!       Siz := Uint_1;
!       Indx := First_Index (Typ);
!       while Present (Indx) loop
!          Xtyp := Etype (Indx);
!          Lo := Type_Low_Bound (Xtyp);
!          Hi := Type_High_Bound (Xtyp);
  
!          --  If any bound raises constraint error, we will never get this
!          --  far, so there is no need to generate any kind of check.
  
!          if Raises_Constraint_Error (Lo)
!               or else
!             Raises_Constraint_Error (Hi)
!          then
!             Uintp.Release (Umark);
              return;
           end if;
  
!          --  Otherwise get bounds values
  
!          if Is_Static_Expression (Lo) then
!             Lob := Expr_Value (Lo);
!          else
!             Lob := Expr_Value (Type_Low_Bound (Base_Type (Xtyp)));
!             Static := False;
!          end if;
  
!          if Is_Static_Expression (Hi) then
!             Hib := Expr_Value (Hi);
!          else
!             Hib := Expr_Value (Type_High_Bound (Base_Type (Xtyp)));
!             Static := False;
!          end if;
  
!          Siz := Siz *  UI_Max (Hib - Lob + 1, Uint_0);
!          Next_Index (Indx);
!       end loop;
  
!       --  Compute the limit against which we want to check. For subprograms,
!       --  where the array will go on the stack, we use 8*2**24, which (in
!       --  bits) is the size of a 16 megabyte array.
  
!       if Is_Subprogram (Scope (Ent)) then
!          Check_Siz := Uint_2 ** 27;
!       else
!          Check_Siz := Uint_2 ** 31;
!       end if;
  
!       --  If we have all static bounds and Siz is too large, then we know we
!       --  know we have a storage error right now, so generate message
  
!       if Static and then Siz >= Check_Siz then
!          Insert_Action (N,
!            Make_Raise_Storage_Error (Loc,
!              Reason => SE_Object_Too_Large));
!          Error_Msg_N ("?Storage_Error will be raised at run-time", N);
!          Uintp.Release (Umark);
!          return;
!       end if;
  
!       --  Case of component size known at compile time. If the array
!       --  size is definitely in range, then we do not need a check.
  
!       if Known_Esize (Ctyp)
!         and then Siz * Esize (Ctyp) < Check_Siz
!       then
!          Uintp.Release (Umark);
!          return;
!       end if;
  
!       --  Here if a dynamic check is required
  
!       --  What we do is to build an expression for the size of the array,
!       --  which is computed as the 'Size of the array component, times
!       --  the size of each dimension.
  
!       Uintp.Release (Umark);
  
!       Sizx :=
!         Make_Attribute_Reference (Loc,
!           Prefix         => New_Occurrence_Of (Ctyp, Loc),
!           Attribute_Name => Name_Size);
  
!       Indx := First_Index (Typ);
  
!       for J in 1 .. Number_Dimensions (Typ) loop
!          if Sloc (Etype (Indx)) = Sloc (N) then
!             Ensure_Defined (Etype (Indx), N);
           end if;
  
           Sizx :=
!            Make_Op_Multiply (Loc,
!              Left_Opnd  => Sizx,
!              Right_Opnd =>
!                Make_Attribute_Reference (Loc,
!                  Prefix => New_Occurrence_Of (Typ, Loc),
!                  Attribute_Name => Name_Length,
!                  Expressions => New_List (
!                    Make_Integer_Literal (Loc, J))));
!          Next_Index (Indx);
!       end loop;
  
        Code :=
          Make_Raise_Storage_Error (Loc,
--- 843,986 ----
           end if;
        end loop;
  
!       --  GCC 3 case
  
!       if Opt.GCC_Version = 3 then
  
!          --  No problem if size is known at compile time (even if the front
!          --  end does not know it) because the back end does do overflow
!          --  checking on the size in bytes if it is compile time known.
  
!          if Size_Known_At_Compile_Time (Typ) then
              return;
           end if;
+       end if;
  
!       --  Following code is temporarily deleted, since GCC 3 is returning
!       --  zero for size in bits of large dynamic arrays. ???
  
! --           --  Otherwise we check for the size in bits exceeding 2**31-1 * 8.
! --           --  This is the case in which we could end up with problems from
! --           --  an unnoticed overflow in computing the size in bytes
! --
! --           Check_Siz := (Uint_2 ** 31 - Uint_1) * Uint_8;
! --
! --           Sizx :=
! --             Make_Attribute_Reference (Loc,
! --               Prefix => New_Occurrence_Of (Typ, Loc),
! --               Attribute_Name => Name_Size);
  
!       --  GCC 2 case (for now this is for GCC 3 dynamic case as well)
  
!       begin
!          --  First step is to calculate the maximum number of elements. For
!          --  this calculation, we use the actual size of the subtype if it is
!          --  static, and if a bound of a subtype is non-static, we go to the
!          --  bound of the base type.
  
!          Siz := Uint_1;
!          Indx := First_Index (Typ);
!          while Present (Indx) loop
!             Xtyp := Etype (Indx);
!             Lo := Type_Low_Bound (Xtyp);
!             Hi := Type_High_Bound (Xtyp);
  
!             --  If any bound raises constraint error, we will never get this
!             --  far, so there is no need to generate any kind of check.
  
!             if Raises_Constraint_Error (Lo)
!               or else
!                 Raises_Constraint_Error (Hi)
!             then
!                Uintp.Release (Umark);
!                return;
!             end if;
  
!             --  Otherwise get bounds values
  
!             if Is_Static_Expression (Lo) then
!                Lob := Expr_Value (Lo);
!             else
!                Lob := Expr_Value (Type_Low_Bound (Base_Type (Xtyp)));
!                Static := False;
!             end if;
  
!             if Is_Static_Expression (Hi) then
!                Hib := Expr_Value (Hi);
!             else
!                Hib := Expr_Value (Type_High_Bound (Base_Type (Xtyp)));
!                Static := False;
!             end if;
  
!             Siz := Siz *  UI_Max (Hib - Lob + 1, Uint_0);
!             Next_Index (Indx);
!          end loop;
  
!          --  Compute the limit against which we want to check. For subprograms,
!          --  where the array will go on the stack, we use 8*2**24, which (in
!          --  bits) is the size of a 16 megabyte array.
  
!          if Is_Subprogram (Scope (Ent)) then
!             Check_Siz := Uint_2 ** 27;
!          else
!             Check_Siz := Uint_2 ** 31;
!          end if;
  
!          --  If we have all static bounds and Siz is too large, then we know
!          --  we know we have a storage error right now, so generate message
  
!          if Static and then Siz >= Check_Siz then
!             Insert_Action (N,
!               Make_Raise_Storage_Error (Loc,
!                 Reason => SE_Object_Too_Large));
!             Error_Msg_N ("?Storage_Error will be raised at run-time", N);
!             Uintp.Release (Umark);
!             return;
!          end if;
  
!          --  Case of component size known at compile time. If the array
!          --  size is definitely in range, then we do not need a check.
! 
!          if Known_Esize (Ctyp)
!            and then Siz * Esize (Ctyp) < Check_Siz
!          then
!             Uintp.Release (Umark);
!             return;
           end if;
  
+          --  Here if a dynamic check is required
+ 
+          --  What we do is to build an expression for the size of the array,
+          --  which is computed as the 'Size of the array component, times
+          --  the size of each dimension.
+ 
+          Uintp.Release (Umark);
+ 
           Sizx :=
!            Make_Attribute_Reference (Loc,
!              Prefix =>         New_Occurrence_Of (Ctyp, Loc),
!              Attribute_Name => Name_Size);
! 
!          Indx := First_Index (Typ);
!          for J in 1 .. Number_Dimensions (Typ) loop
!             if Sloc (Etype (Indx)) = Sloc (N) then
!                Ensure_Defined (Etype (Indx), N);
!             end if;
! 
!             Sizx :=
!               Make_Op_Multiply (Loc,
!                 Left_Opnd  => Sizx,
!                 Right_Opnd =>
!                   Make_Attribute_Reference (Loc,
!                     Prefix         => New_Occurrence_Of (Typ, Loc),
!                     Attribute_Name => Name_Length,
!                     Expressions    => New_List (
!                                         Make_Integer_Literal (Loc, J))));
!             Next_Index (Indx);
!          end loop;
!       end;
! 
!       --  Common code to actually emit the check
  
        Code :=
          Make_Raise_Storage_Error (Loc,
*************** package body Checks is
*** 917,927 ****
              Make_Op_Ge (Loc,
                Left_Opnd  => Sizx,
                Right_Opnd =>
!                 Make_Integer_Literal (Loc, Check_Siz)),
!             Reason => SE_Object_Too_Large);
  
        Set_Size_Check_Code (Defining_Identifier (N), Code);
!       Insert_Action (N, Code);
     end Apply_Array_Size_Check;
  
     ----------------------------
--- 988,999 ----
              Make_Op_Ge (Loc,
                Left_Opnd  => Sizx,
                Right_Opnd =>
!                 Make_Integer_Literal (Loc,
!                   Intval    => Check_Siz)),
!                   Reason    => SE_Object_Too_Large);
  
        Set_Size_Check_Code (Defining_Identifier (N), Code);
!       Insert_Action (N, Code, Suppress => All_Checks);
     end Apply_Array_Size_Check;
  
     ----------------------------
*************** package body Checks is
*** 996,1001 ****
--- 1068,1079 ----
           then
              Apply_Discriminant_Check (N, Typ);
           end if;
+ 
+          if Can_Never_Be_Null (Typ)
+            and then not Can_Never_Be_Null (Etype (N))
+          then
+             Install_Null_Excluding_Check (N);
+          end if;
        end if;
     end Apply_Constraint_Check;
  
*************** package body Checks is
*** 1108,1113 ****
--- 1186,1197 ----
           return;
        end if;
  
+       --  Nothing to do if the type is an Unchecked_Union
+ 
+       if Is_Unchecked_Union (Base_Type (T_Typ)) then
+          return;
+       end if;
+ 
        --  Suppress checks if the subtypes are the same.
        --  the check must be preserved in an assignment to a formal, because
        --  the constraint is given by the actual.
*************** package body Checks is
*** 1302,1308 ****
           --  part of the test is not controlled by the -gnato switch.
  
           if Do_Division_Check (N) then
- 
              if (not ROK) or else (Rlo <= 0 and then 0 <= Rhi) then
                 Insert_Action (N,
                   Make_Raise_Constraint_Error (Loc,
--- 1386,1391 ----
*************** package body Checks is
*** 1350,1355 ****
--- 1433,1618 ----
        end if;
     end Apply_Divide_Check;
  
+    ----------------------------------
+    -- Apply_Float_Conversion_Check --
+    ----------------------------------
+ 
+    --  Let F and I be the source and target types of the conversion.
+    --  The Ada standard specifies that a floating-point value X is rounded
+    --  to the nearest integer, with halfway cases being rounded away from
+    --  zero. The rounded value of X is checked against I'Range.
+ 
+    --  The catch in the above paragraph is that there is no good way
+    --  to know whether the round-to-integer operation resulted in
+    --  overflow. A remedy is to perform a range check in the floating-point
+    --  domain instead, however:
+    --      (1)  The bounds may not be known at compile time
+    --      (2)  The check must take into account possible rounding.
+    --      (3)  The range of type I may not be exactly representable in F.
+    --      (4)  The end-points I'First - 0.5 and I'Last + 0.5 may or may
+    --           not be in range, depending on the sign of  I'First and I'Last.
+    --      (5)  X may be a NaN, which will fail any comparison
+ 
+    --  The following steps take care of these issues converting X:
+    --      (1) If either I'First or I'Last is not known at compile time, use
+    --          I'Base instead of I in the next three steps and perform a
+    --          regular range check against I'Range after conversion.
+    --      (2) If I'First - 0.5 is representable in F then let Lo be that
+    --          value and define Lo_OK as (I'First > 0). Otherwise, let Lo be
+    --          F'Machine (T) and let Lo_OK be (Lo >= I'First). In other words,
+    --          take one of the closest floating-point numbers to T, and see if
+    --          it is in range or not.
+    --      (3) If I'Last + 0.5 is representable in F then let Hi be that value
+    --          and define Hi_OK as (I'Last < 0). Otherwise, let Hi be
+    --          F'Rounding (T) and let Hi_OK be (Hi <= I'Last).
+    --      (4) Raise CE when (Lo_OK and X < Lo) or (not Lo_OK and X <= Lo)
+    --                     or (Hi_OK and X > Hi) or (not Hi_OK and X >= Hi)
+ 
+    procedure Apply_Float_Conversion_Check
+      (Ck_Node    : Node_Id;
+       Target_Typ : Entity_Id)
+    is
+       LB          : constant Node_Id := Type_Low_Bound (Target_Typ);
+       HB          : constant Node_Id := Type_High_Bound (Target_Typ);
+       Loc         : constant Source_Ptr := Sloc (Ck_Node);
+       Expr_Type   : constant Entity_Id  := Base_Type (Etype (Ck_Node));
+       Target_Base : constant Entity_Id  := Implementation_Base_Type
+                                              (Target_Typ);
+       Max_Bound   : constant Uint := UI_Expon
+                                        (Machine_Radix (Expr_Type),
+                                         Machine_Mantissa (Expr_Type) - 1) - 1;
+       --  Largest bound, so bound plus or minus half is a machine number of F
+ 
+       Ifirst,
+       Ilast     : Uint;         --  Bounds of integer type
+       Lo, Hi    : Ureal;        --  Bounds to check in floating-point domain
+       Lo_OK,
+       Hi_OK     : Boolean;      --  True iff Lo resp. Hi belongs to I'Range
+ 
+       Lo_Chk,
+       Hi_Chk    : Node_Id;      --  Expressions that are False iff check fails
+ 
+       Reason    : RT_Exception_Code;
+ 
+    begin
+       if not Compile_Time_Known_Value (LB)
+           or not Compile_Time_Known_Value (HB)
+       then
+          declare
+             --  First check that the value falls in the range of the base
+             --  type, to prevent overflow during conversion and then
+             --  perform a regular range check against the (dynamic) bounds.
+ 
+             Par : constant Node_Id := Parent (Ck_Node);
+ 
+             pragma Assert (Target_Base /= Target_Typ);
+             pragma Assert (Nkind (Par) = N_Type_Conversion);
+ 
+             Temp : constant Entity_Id :=
+                     Make_Defining_Identifier (Loc,
+                       Chars => New_Internal_Name ('T'));
+ 
+          begin
+             Apply_Float_Conversion_Check (Ck_Node, Target_Base);
+             Set_Etype (Temp, Target_Base);
+ 
+             Insert_Action (Parent (Par),
+               Make_Object_Declaration (Loc,
+                 Defining_Identifier => Temp,
+                 Object_Definition => New_Occurrence_Of (Target_Typ, Loc),
+                 Expression => New_Copy_Tree (Par)),
+                 Suppress => All_Checks);
+ 
+             Insert_Action (Par,
+               Make_Raise_Constraint_Error (Loc,
+                 Condition =>
+                   Make_Not_In (Loc,
+                     Left_Opnd  => New_Occurrence_Of (Temp, Loc),
+                     Right_Opnd => New_Occurrence_Of (Target_Typ, Loc)),
+                 Reason => CE_Range_Check_Failed));
+             Rewrite (Par, New_Occurrence_Of (Temp, Loc));
+ 
+             return;
+          end;
+       end if;
+ 
+       --  Get the bounds of the target type
+ 
+       Ifirst := Expr_Value (LB);
+       Ilast  := Expr_Value (HB);
+ 
+       --  Check against lower bound
+ 
+       if abs (Ifirst) < Max_Bound then
+          Lo := UR_From_Uint (Ifirst) - Ureal_Half;
+          Lo_OK := (Ifirst > 0);
+       else
+          Lo := Machine (Expr_Type, UR_From_Uint (Ifirst), Round_Even, Ck_Node);
+          Lo_OK := (Lo >= UR_From_Uint (Ifirst));
+       end if;
+ 
+       if Lo_OK then
+ 
+          --  Lo_Chk := (X >= Lo)
+ 
+          Lo_Chk := Make_Op_Ge (Loc,
+                      Left_Opnd => Duplicate_Subexpr_No_Checks (Ck_Node),
+                      Right_Opnd => Make_Real_Literal (Loc, Lo));
+ 
+       else
+          --  Lo_Chk := (X > Lo)
+ 
+          Lo_Chk := Make_Op_Gt (Loc,
+                      Left_Opnd => Duplicate_Subexpr_No_Checks (Ck_Node),
+                      Right_Opnd => Make_Real_Literal (Loc, Lo));
+       end if;
+ 
+       --  Check against higher bound
+ 
+       if abs (Ilast) < Max_Bound then
+          Hi := UR_From_Uint (Ilast) + Ureal_Half;
+          Hi_OK := (Ilast < 0);
+       else
+          Hi := Machine (Expr_Type, UR_From_Uint (Ilast), Round_Even, Ck_Node);
+          Hi_OK := (Hi <= UR_From_Uint (Ilast));
+       end if;
+ 
+       if Hi_OK then
+ 
+          --  Hi_Chk := (X <= Hi)
+ 
+          Hi_Chk := Make_Op_Le (Loc,
+                      Left_Opnd => Duplicate_Subexpr_No_Checks (Ck_Node),
+                      Right_Opnd => Make_Real_Literal (Loc, Hi));
+ 
+       else
+          --  Hi_Chk := (X < Hi)
+ 
+          Hi_Chk := Make_Op_Lt (Loc,
+                      Left_Opnd => Duplicate_Subexpr_No_Checks (Ck_Node),
+                      Right_Opnd => Make_Real_Literal (Loc, Hi));
+       end if;
+ 
+       --  If the bounds of the target type are the same as those of the
+       --  base type, the check is an overflow check as a range check is
+       --  not performed in these cases.
+ 
+       if Expr_Value (Type_Low_Bound (Target_Base)) = Ifirst
+         and then Expr_Value (Type_High_Bound (Target_Base)) = Ilast
+       then
+          Reason := CE_Overflow_Check_Failed;
+       else
+          Reason := CE_Range_Check_Failed;
+       end if;
+ 
+       --  Raise CE if either conditions does not hold
+ 
+       Insert_Action (Ck_Node,
+         Make_Raise_Constraint_Error (Loc,
+           Condition => Make_Op_Not (Loc, Make_Op_And (Loc, Lo_Chk, Hi_Chk)),
+           Reason    => Reason));
+    end Apply_Float_Conversion_Check;
+ 
     ------------------------
     -- Apply_Length_Check --
     ------------------------
*************** package body Checks is
*** 1557,1563 ****
        --  we only do this for discrete types, and not fixed-point or
        --  floating-point types.
  
!       --  The additional less-precise tests below catch these cases.
  
        --  Note: skip this if we are given a source_typ, since the point
        --  of supplying a Source_Typ is to stop us looking at the expression.
--- 1820,1826 ----
        --  we only do this for discrete types, and not fixed-point or
        --  floating-point types.
  
!       --  The additional less-precise tests below catch these cases
  
        --  Note: skip this if we are given a source_typ, since the point
        --  of supplying a Source_Typ is to stop us looking at the expression.
*************** package body Checks is
*** 1922,1930 ****
--- 2185,2198 ----
              --  and no floating point type is involved in the type conversion
              --  then fixed point values must be read as integral values.
  
+             Float_To_Int : constant Boolean :=
+                              Is_Floating_Point_Type (Expr_Type)
+                                and then Is_Integer_Type (Target_Type);
+ 
           begin
              if not Overflow_Checks_Suppressed (Target_Base)
                and then not In_Subrange_Of (Expr_Type, Target_Base, Conv_OK)
+               and then not Float_To_Int
              then
                 Set_Do_Overflow_Check (N);
              end if;
*************** package body Checks is
*** 1932,1939 ****
              if not Range_Checks_Suppressed (Target_Type)
                and then not Range_Checks_Suppressed (Expr_Type)
              then
!                Apply_Scalar_Range_Check
!                  (Expr, Target_Type, Fixed_Int => Conv_OK);
              end if;
           end;
  
--- 2200,2211 ----
              if not Range_Checks_Suppressed (Target_Type)
                and then not Range_Checks_Suppressed (Expr_Type)
              then
!                if Float_To_Int then
!                   Apply_Float_Conversion_Check (Expr, Target_Type);
!                else
!                   Apply_Scalar_Range_Check
!                     (Expr, Target_Type, Fixed_Int => Conv_OK);
!                end if;
              end if;
           end;
  
*************** package body Checks is
*** 2099,2106 ****
  
     function Build_Discriminant_Checks
       (N     : Node_Id;
!       T_Typ : Entity_Id)
!       return Node_Id
     is
        Loc      : constant Source_Ptr := Sloc (N);
        Cond     : Node_Id;
--- 2371,2377 ----
  
     function Build_Discriminant_Checks
       (N     : Node_Id;
!       T_Typ : Entity_Id) return Node_Id
     is
        Loc      : constant Source_Ptr := Sloc (N);
        Cond     : Node_Id;
*************** package body Checks is
*** 2134,2147 ****
              Dval := Duplicate_Subexpr_No_Checks (Dval);
           end if;
  
!          Dref :=
!            Make_Selected_Component (Loc,
!              Prefix =>
!                Duplicate_Subexpr_No_Checks (N, Name_Req => True),
!              Selector_Name =>
!                Make_Identifier (Loc, Chars (Disc_Ent)));
  
!          Set_Is_In_Discriminant_Check (Dref);
  
           Evolve_Or_Else (Cond,
             Make_Op_Ne (Loc,
--- 2405,2430 ----
              Dval := Duplicate_Subexpr_No_Checks (Dval);
           end if;
  
!          --  If we have an Unchecked_Union node, we can infer the discriminants
!          --  of the node.
  
!          if Is_Unchecked_Union (Base_Type (T_Typ)) then
!             Dref := New_Copy (
!               Get_Discriminant_Value (
!                 First_Discriminant (T_Typ),
!                 T_Typ,
!                 Stored_Constraint (T_Typ)));
! 
!          else
!             Dref :=
!               Make_Selected_Component (Loc,
!                 Prefix =>
!                   Duplicate_Subexpr_No_Checks (N, Name_Req => True),
!                 Selector_Name =>
!                   Make_Identifier (Loc, Chars (Disc_Ent)));
! 
!             Set_Is_In_Discriminant_Check (Dref);
!          end if;
  
           Evolve_Or_Else (Cond,
             Make_Op_Ne (Loc,
*************** package body Checks is
*** 2193,2198 ****
--- 2476,2705 ----
     end Check_Valid_Lvalue_Subscripts;
  
     ----------------------------------
+    -- Null_Exclusion_Static_Checks --
+    ----------------------------------
+ 
+    procedure Null_Exclusion_Static_Checks (N : Node_Id) is
+       K                  : constant Node_Kind := Nkind (N);
+       Typ                : Entity_Id;
+       Related_Nod        : Node_Id;
+       Has_Null_Exclusion : Boolean := False;
+ 
+       type Msg_Kind is (Components, Formals, Objects);
+       Msg_K : Msg_Kind := Objects;
+       --  Used by local subprograms to generate precise error messages
+ 
+       procedure Check_Must_Be_Access
+         (Typ                : Entity_Id;
+          Has_Null_Exclusion : Boolean);
+       --  ??? local subprograms must have comment on spec
+ 
+       procedure Check_Already_Null_Excluding_Type
+         (Typ                : Entity_Id;
+          Has_Null_Exclusion : Boolean;
+          Related_Nod        : Node_Id);
+       --  ??? local subprograms must have comment on spec
+ 
+       procedure Check_Must_Be_Initialized
+         (N           : Node_Id;
+          Related_Nod : Node_Id);
+       --  ??? local subprograms must have comment on spec
+ 
+       procedure Check_Null_Not_Allowed (N : Node_Id);
+       --  ??? local subprograms must have comment on spec
+ 
+       --  ??? following bodies lack comments
+ 
+       --------------------------
+       -- Check_Must_Be_Access --
+       --------------------------
+ 
+       procedure Check_Must_Be_Access
+         (Typ                : Entity_Id;
+          Has_Null_Exclusion : Boolean)
+       is
+       begin
+          if Has_Null_Exclusion
+            and then not Is_Access_Type (Typ)
+          then
+             Error_Msg_N ("(Ada 2005) must be an access type", Related_Nod);
+          end if;
+       end Check_Must_Be_Access;
+ 
+       ---------------------------------------
+       -- Check_Already_Null_Excluding_Type --
+       ---------------------------------------
+ 
+       procedure Check_Already_Null_Excluding_Type
+         (Typ                : Entity_Id;
+          Has_Null_Exclusion : Boolean;
+          Related_Nod        : Node_Id)
+       is
+       begin
+          if Has_Null_Exclusion
+            and then Can_Never_Be_Null (Typ)
+          then
+             Error_Msg_N
+               ("(Ada 2005) already a null-excluding type", Related_Nod);
+          end if;
+       end Check_Already_Null_Excluding_Type;
+ 
+       -------------------------------
+       -- Check_Must_Be_Initialized --
+       -------------------------------
+ 
+       procedure Check_Must_Be_Initialized
+         (N           : Node_Id;
+          Related_Nod : Node_Id)
+       is
+          Expr        : constant Node_Id := Expression (N);
+ 
+       begin
+          pragma Assert (Nkind (N) = N_Component_Declaration
+                           or else Nkind (N) = N_Object_Declaration);
+ 
+          if not Present (Expr) then
+             case Msg_K is
+                when Components =>
+                   Error_Msg_N
+                     ("(Ada 2005) null-excluding components must be " &
+                      "initialized", Related_Nod);
+ 
+                when Formals =>
+                   Error_Msg_N
+                     ("(Ada 2005) null-excluding formals must be initialized",
+                      Related_Nod);
+ 
+                when Objects =>
+                   Error_Msg_N
+                     ("(Ada 2005) null-excluding objects must be initialized",
+                      Related_Nod);
+             end case;
+          end if;
+       end Check_Must_Be_Initialized;
+ 
+       ----------------------------
+       -- Check_Null_Not_Allowed --
+       ----------------------------
+ 
+       procedure Check_Null_Not_Allowed (N : Node_Id) is
+          Expr : constant Node_Id := Expression (N);
+ 
+       begin
+          if Present (Expr)
+            and then Nkind (Expr) = N_Null
+          then
+             case Msg_K is
+                when Components =>
+                   Apply_Compile_Time_Constraint_Error
+                      (N      => Expr,
+                       Msg    => "(Ada 2005) NULL not allowed in"
+                                   & " null-excluding components?",
+                       Reason => CE_Null_Not_Allowed,
+                       Rep    => False);
+ 
+                when Formals =>
+                   Apply_Compile_Time_Constraint_Error
+                      (N      => Expr,
+                       Msg    => "(Ada 2005) NULL not allowed in"
+                                   & " null-excluding formals?",
+                       Reason => CE_Null_Not_Allowed,
+                       Rep    => False);
+ 
+                when Objects =>
+                   Apply_Compile_Time_Constraint_Error
+                      (N      => Expr,
+                       Msg    => "(Ada 2005) NULL not allowed in"
+                                   & " null-excluding objects?",
+                       Reason => CE_Null_Not_Allowed,
+                       Rep    => False);
+             end case;
+          end if;
+       end Check_Null_Not_Allowed;
+ 
+    --  Start of processing for Null_Exclusion_Static_Checks
+ 
+    begin
+       pragma Assert (K = N_Component_Declaration
+                        or else K = N_Parameter_Specification
+                        or else K = N_Object_Declaration
+                        or else K = N_Discriminant_Specification
+                        or else K = N_Allocator);
+ 
+       case K is
+          when N_Component_Declaration =>
+             Msg_K := Components;
+ 
+             if not Present (Access_Definition (Component_Definition (N))) then
+                Has_Null_Exclusion  := Null_Exclusion_Present
+                                         (Component_Definition (N));
+                Typ := Etype (Subtype_Indication (Component_Definition (N)));
+                Related_Nod := Subtype_Indication (Component_Definition (N));
+                Check_Must_Be_Access (Typ, Has_Null_Exclusion);
+                Check_Already_Null_Excluding_Type
+                  (Typ, Has_Null_Exclusion, Related_Nod);
+                Check_Must_Be_Initialized (N, Related_Nod);
+             end if;
+ 
+             Check_Null_Not_Allowed (N);
+ 
+          when N_Parameter_Specification =>
+             Msg_K := Formals;
+             Has_Null_Exclusion := Null_Exclusion_Present (N);
+             Typ := Entity (Parameter_Type (N));
+             Related_Nod := Parameter_Type (N);
+             Check_Must_Be_Access (Typ, Has_Null_Exclusion);
+             Check_Already_Null_Excluding_Type
+               (Typ, Has_Null_Exclusion, Related_Nod);
+             Check_Null_Not_Allowed (N);
+ 
+          when N_Object_Declaration =>
+             Msg_K := Objects;
+             Has_Null_Exclusion := Null_Exclusion_Present (N);
+             Typ := Entity (Object_Definition (N));
+             Related_Nod := Object_Definition (N);
+             Check_Must_Be_Access (Typ, Has_Null_Exclusion);
+             Check_Already_Null_Excluding_Type
+               (Typ, Has_Null_Exclusion, Related_Nod);
+             Check_Must_Be_Initialized (N, Related_Nod);
+             Check_Null_Not_Allowed (N);
+ 
+          when N_Discriminant_Specification =>
+             Msg_K := Components;
+ 
+             if Nkind (Discriminant_Type (N)) /= N_Access_Definition then
+                Has_Null_Exclusion := Null_Exclusion_Present (N);
+                Typ := Etype (Defining_Identifier (N));
+                Related_Nod := Discriminant_Type (N);
+                Check_Must_Be_Access (Typ, Has_Null_Exclusion);
+                Check_Already_Null_Excluding_Type
+                  (Typ, Has_Null_Exclusion, Related_Nod);
+             end if;
+ 
+             Check_Null_Not_Allowed (N);
+ 
+          when N_Allocator =>
+             Msg_K := Objects;
+             Has_Null_Exclusion := Null_Exclusion_Present (N);
+             Typ := Etype (Expression (N));
+ 
+             if Nkind (Expression (N)) = N_Qualified_Expression then
+                Related_Nod := Subtype_Mark (Expression (N));
+             else
+                Related_Nod := Expression (N);
+             end if;
+ 
+             Check_Must_Be_Access (Typ, Has_Null_Exclusion);
+             Check_Already_Null_Excluding_Type
+               (Typ, Has_Null_Exclusion, Related_Nod);
+             Check_Null_Not_Allowed (N);
+ 
+          when others =>
+             raise Program_Error;
+       end case;
+    end Null_Exclusion_Static_Checks;
+ 
+    ----------------------------------
     -- Conditional_Statements_Begin --
     ----------------------------------
  
*************** package body Checks is
*** 2970,2975 ****
--- 3477,3501 ----
  
              if Is_Access_Type (Atyp) then
                 Atyp := Designated_Type (Atyp);
+ 
+                --  If the prefix is an access to an unconstrained array,
+                --  perform check unconditionally: it depends on the bounds
+                --  of an object and we cannot currently recognize whether
+                --  the test may be redundant.
+ 
+                if not Is_Constrained (Atyp) then
+                   Set_Do_Range_Check (N, True);
+                   return;
+                end if;
+ 
+             --  Ditto if the prefix is an explicit dereference whose
+             --  designated type is unconstrained.
+ 
+             elsif Nkind (Prefix (P)) = N_Explicit_Dereference
+               and then not Is_Constrained (Atyp)
+             then
+                Set_Do_Range_Check (N, True);
+                return;
              end if;
  
              Indx := First_Index (Atyp);
*************** package body Checks is
*** 3133,3139 ****
        then
           return;
  
!       --  No check required on the left-hand side of an assignment.
  
        elsif Nkind (Parent (Expr)) = N_Assignment_Statement
          and then Expr = Name (Parent (Expr))
--- 3659,3665 ----
        then
           return;
  
!       --  No check required on the left-hand side of an assignment
  
        elsif Nkind (Parent (Expr)) = N_Assignment_Statement
          and then Expr = Name (Parent (Expr))
*************** package body Checks is
*** 3229,3240 ****
        Typ : constant Entity_Id := Etype (Expr);
  
     begin
!       --  Non-scalar types are always consdered valid, since they never
        --  give rise to the issues of erroneous or bounded error behavior
        --  that are the concern. In formal reference manual terms the
!       --  notion of validity only applies to scalar types.
  
!       if not Is_Scalar_Type (Typ) then
           return True;
  
        --  If no validity checking, then everything is considered valid
--- 3755,3770 ----
        Typ : constant Entity_Id := Etype (Expr);
  
     begin
!       --  Non-scalar types are always considered valid, since they never
        --  give rise to the issues of erroneous or bounded error behavior
        --  that are the concern. In formal reference manual terms the
!       --  notion of validity only applies to scalar types. Note that
!       --  even when packed arrays are represented using modular types,
!       --  they are still arrays semantically, so they are also always
!       --  valid (in particular, the unused bits can be random rubbish
!       --  without affecting the validity of the array value).
  
!       if not Is_Scalar_Type (Typ) or else Is_Packed_Array_Type (Typ) then
           return True;
  
        --  If no validity checking, then everything is considered valid
*************** package body Checks is
*** 3293,3305 ****
  
        --  The result of any function call or operator is always considered
        --  valid, since we assume the necessary checks are done by the call.
  
!       elsif Nkind (Expr) in N_Binary_Op
!               or else
!             Nkind (Expr) in N_Unary_Op
!               or else
!             Nkind (Expr) = N_Function_Call
        then
           return True;
  
        --  For all other cases, we do not know the expression is valid
--- 3823,3848 ----
  
        --  The result of any function call or operator is always considered
        --  valid, since we assume the necessary checks are done by the call.
+       --  For operators on floating-point operations, we must also check
+       --  when the operation is the right-hand side of an assignment, or
+       --  is an actual in a call.
  
!       elsif
!         Nkind (Expr) in N_Binary_Op or else Nkind (Expr) in N_Unary_Op
        then
+          if Is_Floating_Point_Type (Typ)
+             and then Validity_Check_Floating_Point
+             and then
+               (Nkind (Parent (Expr)) = N_Assignment_Statement
+                 or else Nkind (Parent (Expr)) = N_Function_Call
+                 or else Nkind (Parent (Expr)) = N_Parameter_Association)
+          then
+             return False;
+          else
+             return True;
+          end if;
+ 
+       elsif Nkind (Expr) = N_Function_Call then
           return True;
  
        --  For all other cases, we do not know the expression is valid
*************** package body Checks is
*** 3324,3331 ****
     is
        function Within_Range_Of
          (Target_Type : Entity_Id;
!          Check_Type  : Entity_Id)
!          return        Boolean;
        --  Given a requirement for checking a range against Target_Type, and
        --  and a range Check_Type against which a check has already been made,
        --  determines if the check against check type is sufficient to ensure
--- 3867,3873 ----
     is
        function Within_Range_Of
          (Target_Type : Entity_Id;
!          Check_Type  : Entity_Id) return Boolean;
        --  Given a requirement for checking a range against Target_Type, and
        --  and a range Check_Type against which a check has already been made,
        --  determines if the check against check type is sufficient to ensure
*************** package body Checks is
*** 3337,3344 ****
  
        function Within_Range_Of
          (Target_Type : Entity_Id;
!          Check_Type  : Entity_Id)
!          return        Boolean
        is
        begin
           if Target_Type = Check_Type then
--- 3879,3885 ----
  
        function Within_Range_Of
          (Target_Type : Entity_Id;
!          Check_Type  : Entity_Id) return Boolean
        is
        begin
           if Target_Type = Check_Type then
*************** package body Checks is
*** 3377,3383 ****
     --  Start of processing for Find_Check
  
     begin
!       --  Establish default, to avoid warnings from GCC.
  
        Check_Num := 0;
  
--- 3918,3924 ----
     --  Start of processing for Find_Check
  
     begin
!       --  Establish default, to avoid warnings from GCC
  
        Check_Num := 0;
  
*************** package body Checks is
*** 3604,3612 ****
            Reason => CE_Discriminant_Check_Failed));
     end Generate_Discriminant_Check;
  
!    ----------------------------
!    --  Generate_Index_Checks --
!    ----------------------------
  
     procedure Generate_Index_Checks (N : Node_Id) is
        Loc : constant Source_Ptr := Sloc (N);
--- 4145,4153 ----
            Reason => CE_Discriminant_Check_Failed));
     end Generate_Discriminant_Check;
  
!    ---------------------------
!    -- Generate_Index_Checks --
!    ---------------------------
  
     procedure Generate_Index_Checks (N : Node_Id) is
        Loc : constant Source_Ptr := Sloc (N);
*************** package body Checks is
*** 3746,3752 ****
        --         ..
        --       Source_Base_Type(Target_Type'Last))]
  
!       --  The conversions will always work and need no check.
  
        elsif In_Subrange_Of (Target_Type, Source_Base_Type) then
           Insert_Action (N,
--- 4287,4293 ----
        --         ..
        --       Source_Base_Type(Target_Type'Last))]
  
!       --  The conversions will always work and need no check
  
        elsif In_Subrange_Of (Target_Type, Source_Base_Type) then
           Insert_Action (N,
*************** package body Checks is
*** 4028,4035 ****
     function Guard_Access
       (Cond    : Node_Id;
        Loc     : Source_Ptr;
!       Ck_Node : Node_Id)
!       return    Node_Id
     is
     begin
        if Nkind (Cond) = N_Or_Else then
--- 4569,4575 ----
     function Guard_Access
       (Cond    : Node_Id;
        Loc     : Source_Ptr;
!       Ck_Node : Node_Id) return Node_Id
     is
     begin
        if Nkind (Cond) = N_Or_Else then
*************** package body Checks is
*** 4191,4196 ****
--- 4731,4768 ----
        Validity_Checks_On := True;
     end Insert_Valid_Check;
  
+    ----------------------------------
+    -- Install_Null_Excluding_Check --
+    ----------------------------------
+ 
+    procedure Install_Null_Excluding_Check (N : Node_Id) is
+       Loc  : constant Source_Ptr := Sloc (N);
+       Etyp : constant Entity_Id  := Etype (N);
+ 
+    begin
+       pragma Assert (Is_Access_Type (Etyp));
+ 
+       --  Don't need access check if: 1) we are analyzing a generic, 2) it is
+       --  known to be non-null, or 3) the check was suppressed on the type
+ 
+       if Inside_A_Generic
+         or else Access_Checks_Suppressed (Etyp)
+       then
+          return;
+ 
+          --  Otherwise install access check
+ 
+       else
+          Insert_Action (N,
+            Make_Raise_Constraint_Error (Loc,
+              Condition =>
+                Make_Op_Eq (Loc,
+                  Left_Opnd  => Duplicate_Subexpr_Move_Checks (N),
+                  Right_Opnd => Make_Null (Loc)),
+              Reason    => CE_Access_Check_Failed));
+       end if;
+    end Install_Null_Excluding_Check;
+ 
     --------------------------
     -- Install_Static_Check --
     --------------------------
*************** package body Checks is
*** 4285,4292 ****
       (Ck_Node    : Node_Id;
        Target_Typ : Entity_Id;
        Source_Typ : Entity_Id := Empty;
!       Warn_Node  : Node_Id   := Empty)
!       return       Check_Result
     is
     begin
        return Selected_Range_Checks
--- 4857,4863 ----
       (Ck_Node    : Node_Id;
        Target_Typ : Entity_Id;
        Source_Typ : Entity_Id := Empty;
!       Warn_Node  : Node_Id   := Empty) return Check_Result
     is
     begin
        return Selected_Range_Checks
*************** package body Checks is
*** 4412,4419 ****
       (Ck_Node    : Node_Id;
        Target_Typ : Entity_Id;
        Source_Typ : Entity_Id;
!       Warn_Node  : Node_Id)
!       return       Check_Result
     is
        Loc         : constant Source_Ptr := Sloc (Ck_Node);
        S_Typ       : Entity_Id;
--- 4983,4989 ----
       (Ck_Node    : Node_Id;
        Target_Typ : Entity_Id;
        Source_Typ : Entity_Id;
!       Warn_Node  : Node_Id) return Check_Result
     is
        Loc         : constant Source_Ptr := Sloc (Ck_Node);
        S_Typ       : Entity_Id;
*************** package body Checks is
*** 4431,4436 ****
--- 5001,5007 ----
  
        function Get_E_Length (E : Entity_Id; Indx : Nat) return Node_Id;
        function Get_N_Length (N : Node_Id; Indx : Nat) return Node_Id;
+       --  Comments required ???
  
        function Same_Bounds (L : Node_Id; R : Node_Id) return Boolean;
        --  True for equal literals and for nodes that denote the same constant
*************** package body Checks is
*** 4441,4456 ****
        function Length_E_Cond
          (Exptyp : Entity_Id;
           Typ    : Entity_Id;
!          Indx   : Nat)
!          return   Node_Id;
        --  Returns expression to compute:
        --    Typ'Length /= Exptyp'Length
  
        function Length_N_Cond
          (Expr : Node_Id;
           Typ  : Entity_Id;
!          Indx : Nat)
!          return Node_Id;
        --  Returns expression to compute:
        --    Typ'Length /= Expr'Length
  
--- 5012,5025 ----
        function Length_E_Cond
          (Exptyp : Entity_Id;
           Typ    : Entity_Id;
!          Indx   : Nat) return Node_Id;
        --  Returns expression to compute:
        --    Typ'Length /= Exptyp'Length
  
        function Length_N_Cond
          (Expr : Node_Id;
           Typ  : Entity_Id;
!          Indx : Nat) return Node_Id;
        --  Returns expression to compute:
        --    Typ'Length /= Expr'Length
  
*************** package body Checks is
*** 4617,4624 ****
        function Length_E_Cond
          (Exptyp : Entity_Id;
           Typ    : Entity_Id;
!          Indx   : Nat)
!          return   Node_Id
        is
        begin
           return
--- 5186,5192 ----
        function Length_E_Cond
          (Exptyp : Entity_Id;
           Typ    : Entity_Id;
!          Indx   : Nat) return Node_Id
        is
        begin
           return
*************** package body Checks is
*** 4635,4642 ****
        function Length_N_Cond
          (Expr : Node_Id;
           Typ  : Entity_Id;
!          Indx : Nat)
!          return Node_Id
        is
        begin
           return
--- 5203,5209 ----
        function Length_N_Cond
          (Expr : Node_Id;
           Typ  : Entity_Id;
!          Indx : Nat) return Node_Id
        is
        begin
           return
*************** package body Checks is
*** 4918,4925 ****
       (Ck_Node    : Node_Id;
        Target_Typ : Entity_Id;
        Source_Typ : Entity_Id;
!       Warn_Node  : Node_Id)
!       return       Check_Result
     is
        Loc         : constant Source_Ptr := Sloc (Ck_Node);
        S_Typ       : Entity_Id;
--- 5485,5491 ----
       (Ck_Node    : Node_Id;
        Target_Typ : Entity_Id;
        Source_Typ : Entity_Id;
!       Warn_Node  : Node_Id) return Check_Result
     is
        Loc         : constant Source_Ptr := Sloc (Ck_Node);
        S_Typ       : Entity_Id;
*************** package body Checks is
*** 4937,4944 ****
  
        function Discrete_Range_Cond
          (Expr : Node_Id;
!          Typ  : Entity_Id)
!          return Node_Id;
        --  Returns expression to compute:
        --    Low_Bound (Expr) < Typ'First
        --      or else
--- 5503,5509 ----
  
        function Discrete_Range_Cond
          (Expr : Node_Id;
!          Typ  : Entity_Id) return Node_Id;
        --  Returns expression to compute:
        --    Low_Bound (Expr) < Typ'First
        --      or else
*************** package body Checks is
*** 4946,4953 ****
  
        function Discrete_Expr_Cond
          (Expr : Node_Id;
!          Typ  : Entity_Id)
!          return Node_Id;
        --  Returns expression to compute:
        --    Expr < Typ'First
        --      or else
--- 5511,5517 ----
  
        function Discrete_Expr_Cond
          (Expr : Node_Id;
!          Typ  : Entity_Id) return Node_Id;
        --  Returns expression to compute:
        --    Expr < Typ'First
        --      or else
*************** package body Checks is
*** 4956,4963 ****
        function Get_E_First_Or_Last
          (E    : Entity_Id;
           Indx : Nat;
!          Nam  : Name_Id)
!          return Node_Id;
        --  Returns expression to compute:
        --    E'First or E'Last
  
--- 5520,5526 ----
        function Get_E_First_Or_Last
          (E    : Entity_Id;
           Indx : Nat;
!          Nam  : Name_Id) return Node_Id;
        --  Returns expression to compute:
        --    E'First or E'Last
  
*************** package body Checks is
*** 4977,4992 ****
        function Range_Equal_E_Cond
          (Exptyp : Entity_Id;
           Typ    : Entity_Id;
!          Indx   : Nat)
!          return   Node_Id;
        --  Returns expression to compute:
        --    Exptyp'First /= Typ'First or else Exptyp'Last /= Typ'Last
  
        function Range_N_Cond
          (Expr : Node_Id;
           Typ  : Entity_Id;
!          Indx : Nat)
!          return Node_Id;
        --  Return expression to compute:
        --    Expr'First < Typ'First or else Expr'Last > Typ'Last
  
--- 5540,5553 ----
        function Range_Equal_E_Cond
          (Exptyp : Entity_Id;
           Typ    : Entity_Id;
!          Indx   : Nat) return Node_Id;
        --  Returns expression to compute:
        --    Exptyp'First /= Typ'First or else Exptyp'Last /= Typ'Last
  
        function Range_N_Cond
          (Expr : Node_Id;
           Typ  : Entity_Id;
!          Indx : Nat) return Node_Id;
        --  Return expression to compute:
        --    Expr'First < Typ'First or else Expr'Last > Typ'Last
  
*************** package body Checks is
*** 5016,5023 ****
  
        function Discrete_Expr_Cond
          (Expr : Node_Id;
!          Typ  : Entity_Id)
!          return Node_Id
        is
        begin
           return
--- 5577,5583 ----
  
        function Discrete_Expr_Cond
          (Expr : Node_Id;
!          Typ  : Entity_Id) return Node_Id
        is
        begin
           return
*************** package body Checks is
*** 5048,5055 ****
  
        function Discrete_Range_Cond
          (Expr : Node_Id;
!          Typ  : Entity_Id)
!          return Node_Id
        is
           LB : Node_Id := Low_Bound (Expr);
           HB : Node_Id := High_Bound (Expr);
--- 5608,5614 ----
  
        function Discrete_Range_Cond
          (Expr : Node_Id;
!          Typ  : Entity_Id) return Node_Id
        is
           LB : Node_Id := Low_Bound (Expr);
           HB : Node_Id := High_Bound (Expr);
*************** package body Checks is
*** 5123,5130 ****
        function Get_E_First_Or_Last
          (E    : Entity_Id;
           Indx : Nat;
!          Nam  : Name_Id)
!          return Node_Id
        is
           N     : Node_Id;
           LB    : Node_Id;
--- 5682,5688 ----
        function Get_E_First_Or_Last
          (E    : Entity_Id;
           Indx : Nat;
!          Nam  : Name_Id) return Node_Id
        is
           N     : Node_Id;
           LB    : Node_Id;
*************** package body Checks is
*** 5237,5243 ****
                 Duplicate_Subexpr_No_Checks (N, Name_Req => True),
               Expressions => New_List (
                 Make_Integer_Literal (Loc, Indx)));
- 
        end Get_N_First;
  
        ----------------
--- 5795,5800 ----
*************** package body Checks is
*** 5253,5259 ****
                 Duplicate_Subexpr_No_Checks (N, Name_Req => True),
               Expressions => New_List (
                Make_Integer_Literal (Loc, Indx)));
- 
        end Get_N_Last;
  
        ------------------
--- 5810,5815 ----
*************** package body Checks is
*** 5263,5270 ****
        function Range_E_Cond
          (Exptyp : Entity_Id;
           Typ    : Entity_Id;
!          Indx   : Nat)
!          return   Node_Id
        is
        begin
           return
--- 5819,5825 ----
        function Range_E_Cond
          (Exptyp : Entity_Id;
           Typ    : Entity_Id;
!          Indx   : Nat) return Node_Id
        is
        begin
           return
*************** package body Checks is
*** 5288,5295 ****
        function Range_Equal_E_Cond
          (Exptyp : Entity_Id;
           Typ    : Entity_Id;
!          Indx   : Nat)
!          return   Node_Id
        is
        begin
           return
--- 5843,5849 ----
        function Range_Equal_E_Cond
          (Exptyp : Entity_Id;
           Typ    : Entity_Id;
!          Indx   : Nat) return Node_Id
        is
        begin
           return
*************** package body Checks is
*** 5311,5318 ****
        function Range_N_Cond
          (Expr : Node_Id;
           Typ  : Entity_Id;
!          Indx : Nat)
!          return Node_Id
        is
        begin
           return
--- 5865,5871 ----
        function Range_N_Cond
          (Expr : Node_Id;
           Typ  : Entity_Id;
!          Indx : Nat) return Node_Id
        is
        begin
           return
*************** package body Checks is
*** 5737,5750 ****
                          then
                             null;
  
!                         --  If null range, no check needed.
                          elsif
                            Compile_Time_Known_Value (High_Bound (Opnd_Index))
                              and then
                            Compile_Time_Known_Value (Low_Bound (Opnd_Index))
                              and then
!                              Expr_Value (High_Bound (Opnd_Index)) <
!                                  Expr_Value (Low_Bound (Opnd_Index))
                          then
                             null;
  
--- 6290,6304 ----
                          then
                             null;
  
!                            --  If null range, no check needed
! 
                          elsif
                            Compile_Time_Known_Value (High_Bound (Opnd_Index))
                              and then
                            Compile_Time_Known_Value (Low_Bound (Opnd_Index))
                              and then
!                               Expr_Value (High_Bound (Opnd_Index)) <
!                                   Expr_Value (Low_Bound (Opnd_Index))
                          then
                             null;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/checks.ads gcc-4.0.0/gcc/ada/checks.ads
*** gcc-3.4.3/gcc/ada/checks.ads	Tue Oct 21 13:41:58 2003
--- gcc-4.0.0/gcc/ada/checks.ads	Mon Jun  7 14:16:16 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Checks is
*** 616,621 ****
--- 616,624 ----
     --  the sense of the 'Valid attribute returning True. Constraint_Error
     --  will be raised if the value is not valid.
  
+    procedure Null_Exclusion_Static_Checks (N : Node_Id);
+    --  Ada 2005 (AI-231): Check bad usages of the null-exclusion issue
+ 
     procedure Remove_Checks (Expr : Node_Id);
     --  Remove all checks from Expr except those that are only executed
     --  conditionally (on the right side of And Then/Or Else. This call
diff -Nrcpad gcc-3.4.3/gcc/ada/clean.adb gcc-4.0.0/gcc/ada/clean.adb
*** gcc-3.4.3/gcc/ada/clean.adb	Mon Jan  5 15:20:43 2004
--- gcc-4.0.0/gcc/ada/clean.adb	Thu Feb 10 13:57:00 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2003-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2003-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 24,33 ****
--- 24,37 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
+ with Ada.Command_Line; use Ada.Command_Line;
+ 
  with ALI;      use ALI;
  with Csets;
  with Gnatvsn;
  with Hostparm;
+ with Makeutl;
+ with MLib.Tgt; use MLib.Tgt;
  with Namet;    use Namet;
  with Opt;      use Opt;
  with Osint;    use Osint;
*************** with Prj.Ext;
*** 39,54 ****
  with Prj.Pars;
  with Prj.Util; use Prj.Util;
  with Snames;
- with System;
  with Table;
  with Types;    use Types;
  
- with GNAT.Command_Line;         use GNAT.Command_Line;
  with GNAT.Directory_Operations; use GNAT.Directory_Operations;
  with GNAT.IO;                   use GNAT.IO;
  with GNAT.OS_Lib;               use GNAT.OS_Lib;
  
- 
  package body Clean is
  
     Initialized : Boolean := False;
--- 43,55 ----
*************** package body Clean is
*** 64,70 ****
     Debug_Suffix    : String          := ".dg";
     --  Changed to "_dg" for VMS in the body of the package
  
!    Repinfo_Suffix  : String          := ".rep";
     --  Changed to "_rep" for VMS in the body of the package
  
     B_Start : String := "b~";
--- 65,71 ----
     Debug_Suffix    : String          := ".dg";
     --  Changed to "_dg" for VMS in the body of the package
  
!    Repinfo_Suffix  : String := ".rep";
     --  Changed to "_rep" for VMS in the body of the package
  
     B_Start : String := "b~";
*************** package body Clean is
*** 74,83 ****
     Object_Directory_Path : String_Access := null;
     --  The path name of the object directory, set with switch -D
  
     Do_Nothing : Boolean := False;
!    --  Set to True when switch -n is specified.
!    --  When True, no file is deleted. gnatclean only lists the files that
!    --  would have been deleted if the switch -n had not been specified.
  
     File_Deleted : Boolean := False;
     --  Set to True if at least one file has been deleted
--- 75,88 ----
     Object_Directory_Path : String_Access := null;
     --  The path name of the object directory, set with switch -D
  
+    Force_Deletions : Boolean := False;
+    --  Set to True by switch -f. When True, attempts to delete non writable
+    --  files will be done.
+ 
     Do_Nothing : Boolean := False;
!    --  Set to True when switch -n is specified. When True, no file is deleted.
!    --  gnatclean only lists the files that would have been deleted if the
!    --  switch -n had not been specified.
  
     File_Deleted : Boolean := False;
     --  Set to True if at least one file has been deleted
*************** package body Clean is
*** 91,97 ****
  
     All_Projects : Boolean := False;
  
!    --  Packages of project files where unknown attributes are errors.
  
     Naming_String   : aliased String := "naming";
     Builder_String  : aliased String := "builder";
--- 96,102 ----
  
     All_Projects : Boolean := False;
  
!    --  Packages of project files where unknown attributes are errors
  
     Naming_String   : aliased String := "naming";
     Builder_String  : aliased String := "builder";
*************** package body Clean is
*** 136,154 ****
     procedure Init_Q;
     --  Must be called to initialize the Q
  
!    procedure Insert_Q
!      (Source_File : File_Name_Type);
!    --  If Source_File is not marked, inserts it at the end of Q and mark it
  
     function Empty_Q return Boolean;
!    --  Returns True if Q is empty.
  
!    procedure Extract_From_Q
!      (Source_File : out File_Name_Type);
!    --  Extracts the first element from the Q.
  
     Q_Front : Natural;
!    --  Points to the first valid element in the Q.
  
     package Q is new Table.Table (
       Table_Component_Type => File_Name_Type,
--- 141,157 ----
     procedure Init_Q;
     --  Must be called to initialize the Q
  
!    procedure Insert_Q (Lib_File  : File_Name_Type);
!    --  If Lib_File is not marked, inserts it at the end of Q and mark it
  
     function Empty_Q return Boolean;
!    --  Returns True if Q is empty
  
!    procedure Extract_From_Q (Lib_File : out File_Name_Type);
!    --  Extracts the first element from the Q
  
     Q_Front : Natural;
!    --  Points to the first valid element in the Q
  
     package Q is new Table.Table (
       Table_Component_Type => File_Name_Type,
*************** package body Clean is
*** 183,188 ****
--- 186,195 ----
     function Assembly_File_Name (Source : Name_Id) return String;
     --  Returns the assembly file name corresponding to Source
  
+    procedure Clean_Archive (Project : Project_Id);
+    --  Delete a global archive or a fake library project archive and the
+    --  dependency file, if they exist.
+ 
     procedure Clean_Directory (Dir : Name_Id);
     --  Delete all regular files in a library directory or in a library
     --  interface dir.
*************** package body Clean is
*** 315,320 ****
--- 322,359 ----
        return Src & Assembly_Suffix;
     end Assembly_File_Name;
  
+    -------------------
+    -- Clean_Archive --
+    -------------------
+ 
+    procedure Clean_Archive (Project : Project_Id) is
+       Current_Dir : constant Dir_Name_Str := Get_Current_Dir;
+       Data        : constant Project_Data := Projects.Table (Project);
+ 
+       Archive_Name : constant String :=
+                        "lib" & Get_Name_String (Data.Name) & '.' & Archive_Ext;
+       --  The name of the archive file for this project
+ 
+       Archive_Dep_Name : constant String :=
+                            "lib" & Get_Name_String (Data.Name) & ".deps";
+       --  The name of the archive dependency file for this project
+ 
+       Obj_Dir : constant String := Get_Name_String (Data.Object_Directory);
+ 
+    begin
+       Change_Dir (Obj_Dir);
+ 
+       if Is_Regular_File (Archive_Name) then
+          Delete (Obj_Dir, Archive_Name);
+       end if;
+ 
+       if Is_Regular_File (Archive_Dep_Name) then
+          Delete (Obj_Dir, Archive_Dep_Name);
+       end if;
+ 
+       Change_Dir (Current_Dir);
+    end Clean_Archive;
+ 
     ---------------------
     -- Clean_Directory --
     ---------------------
*************** package body Clean is
*** 328,336 ****
        Name : String (1 .. 200);
        Last : Natural;
  
-       procedure Set_Writable (Name : System.Address);
-       pragma Import (C, Set_Writable, "__gnat_set_writable");
- 
     begin
        Change_Dir (Directory);
        Open (Direc, ".");
--- 367,372 ----
*************** package body Clean is
*** 344,351 ****
  
           if Is_Regular_File (Name (1 .. Last)) then
              if not Do_Nothing then
!                Name (Last + 1) := ASCII.NUL;
!                Set_Writable (Name (1)'Address);
              end if;
  
              Delete (Directory, Name (1 .. Last));
--- 380,386 ----
  
           if Is_Regular_File (Name (1 .. Last)) then
              if not Do_Nothing then
!                Set_Writable (Name (1 .. Last));
              end if;
  
              Delete (Directory, Name (1 .. Last));
*************** package body Clean is
*** 367,380 ****
        Main_Source_File : File_Name_Type;
        --  Current main source
  
!       Source_File : File_Name_Type;
!       --  Current source file
  
        Lib_File : File_Name_Type;
!       --  Current library file
  
        Full_Lib_File : File_Name_Type;
!       --  Full name of the current library file
  
        Text : Text_Buffer_Ptr;
        The_ALI : ALI_Id;
--- 402,415 ----
        Main_Source_File : File_Name_Type;
        --  Current main source
  
!       Main_Lib_File : File_Name_Type;
!       --  ALI file of the current main
  
        Lib_File : File_Name_Type;
!       --  Current ALI file
  
        Full_Lib_File : File_Name_Type;
!       --  Full name of the current ALI file
  
        Text : Text_Buffer_Ptr;
        The_ALI : ALI_Id;
*************** package body Clean is
*** 393,408 ****
  
        for N_File in 1 .. Osint.Number_Of_Files loop
           Main_Source_File := Next_Main_Source;
!          Insert_Q (Main_Source_File);
  
           while not Empty_Q loop
              Sources.Set_Last (0);
!             Extract_From_Q (Source_File);
!             Lib_File      := Osint.Lib_File_Name (Source_File);
              Full_Lib_File := Osint.Full_Lib_File_Name (Lib_File);
  
!             --  If we have an existing ALI file that is not read-only,
!             --  process it.
  
              if Full_Lib_File /= No_File
                and then not Is_Readonly_Library (Full_Lib_File)
--- 428,443 ----
  
        for N_File in 1 .. Osint.Number_Of_Files loop
           Main_Source_File := Next_Main_Source;
!          Main_Lib_File := Osint.Lib_File_Name
!                              (Main_Source_File, Current_File_Index);
!          Insert_Q (Main_Lib_File);
  
           while not Empty_Q loop
              Sources.Set_Last (0);
!             Extract_From_Q (Lib_File);
              Full_Lib_File := Osint.Full_Lib_File_Name (Lib_File);
  
!             --  If we have existing ALI file that is not read-only, process it
  
              if Full_Lib_File /= No_File
                and then not Is_Readonly_Library (Full_Lib_File)
*************** package body Clean is
*** 428,434 ****
                          for K in ALI.Units.Table (J).First_With ..
                            ALI.Units.Table (J).Last_With
                          loop
!                            Insert_Q (Withs.Table (K).Sfile);
                          end loop;
                       end loop;
  
--- 463,469 ----
                          for K in ALI.Units.Table (J).First_With ..
                            ALI.Units.Table (J).Last_With
                          loop
!                            Insert_Q (Withs.Table (K).Afile);
                          end loop;
                       end loop;
  
*************** package body Clean is
*** 446,453 ****
                    end if;
                 end if;
  
!                --  Now, delete all the existing files corresponding to this
!                --  ALI file.
  
                 declare
                    Obj_Dir : constant String :=
--- 481,487 ----
                    end if;
                 end if;
  
!                --  Now delete all existing files corresponding to this ALI file
  
                 declare
                    Obj_Dir : constant String :=
*************** package body Clean is
*** 477,485 ****
                    for J in 1 .. Sources.Last loop
                       declare
                          Deb : constant String :=
!                                          Debug_File_Name (Sources.Table (J));
                          Rep : constant String :=
!                                          Repinfo_File_Name (Sources.Table (J));
                       begin
                          if Is_Regular_File (Obj_Dir & Dir_Separator & Deb) then
                             Delete (Obj_Dir, Deb);
--- 511,520 ----
                    for J in 1 .. Sources.Last loop
                       declare
                          Deb : constant String :=
!                                 Debug_File_Name (Sources.Table (J));
                          Rep : constant String :=
!                                 Repinfo_File_Name (Sources.Table (J));
! 
                       begin
                          if Is_Regular_File (Obj_Dir & Dir_Separator & Deb) then
                             Delete (Obj_Dir, Deb);
*************** package body Clean is
*** 499,505 ****
  
           if not Compile_Only then
              declare
!                Source : constant Name_Id := Strip_Suffix (Main_Source_File);
                 Executable : constant String := Get_Name_String
                                                (Executable_Name (Source));
              begin
--- 534,540 ----
  
           if not Compile_Only then
              declare
!                Source : constant Name_Id := Strip_Suffix (Main_Lib_File);
                 Executable : constant String := Get_Name_String
                                                (Executable_Name (Source));
              begin
*************** package body Clean is
*** 519,526 ****
  
     procedure Clean_Project (Project : Project_Id) is
        Main_Source_File : File_Name_Type;
!       --  Name of the executable on the command line, without directory
!       --  information.
  
        Executable : Name_Id;
        --  Name of the executable file
--- 554,560 ----
  
     procedure Clean_Project (Project : Project_Id) is
        Main_Source_File : File_Name_Type;
!       --  Name of executable on the command line without directory info
  
        Executable : Name_Id;
        --  Name of the executable file
*************** package body Clean is
*** 529,535 ****
--- 563,577 ----
        Data        : constant Project_Data := Projects.Table (Project);
        U_Data      : Prj.Com.Unit_Data;
        File_Name1  : Name_Id;
+       Index1      : Int;
        File_Name2  : Name_Id;
+       Index2      : Int;
+       Lib_File    : File_Name_Type;
+ 
+       Source_Id   : Other_Source_Id;
+       Source      : Other_Source;
+ 
+       Global_Archive : Boolean := False;
  
        use Prj.Com;
  
*************** package body Clean is
*** 551,557 ****
           Put_Line ("""");
        end if;
  
!       --  Add project to the list of proceesed projects
  
        Processed_Projects.Increment_Last;
        Processed_Projects.Table (Processed_Projects.Last) := Project;
--- 593,599 ----
           Put_Line ("""");
        end if;
  
!       --  Add project to the list of processed projects
  
        Processed_Projects.Increment_Last;
        Processed_Projects.Table (Processed_Projects.Last) := Project;
*************** package body Clean is
*** 564,698 ****
           begin
              Change_Dir (Obj_Dir);
  
              --  Look through the units to find those that are either immediate
              --  sources or inherited sources of the project.
  
!             for Unit in 1 .. Prj.Com.Units.Last loop
!                U_Data := Prj.Com.Units.Table (Unit);
!                File_Name1 := No_Name;
!                File_Name2 := No_Name;
  
!                --  If either the spec or the body is a source of the project,
!                --  check for the corresponding ALI file in the object
!                --  directory.
  
!                if In_Extension_Chain
!                  (U_Data.File_Names (Body_Part).Project, Project)
!                  or else
!                    In_Extension_Chain
!                      (U_Data.File_Names (Specification).Project, Project)
!                then
!                   File_Name1 := U_Data.File_Names (Body_Part).Name;
!                   File_Name2 := U_Data.File_Names (Specification).Name;
  
!                   --  If there is no body file name, then there may be only a
!                   --  spec.
  
!                   if File_Name1 = No_Name then
!                      File_Name1 := File_Name2;
!                      File_Name2 := No_Name;
                    end if;
-                end if;
  
!                --  If there is either a spec or a body, look for files in the
!                --  object directory.
  
!                if File_Name1 /= No_Name then
!                   declare
!                      Asm : constant String := Assembly_File_Name (File_Name1);
!                      ALI : constant String := ALI_File_Name      (File_Name1);
!                      Obj : constant String := Object_File_Name   (File_Name1);
!                      Adt : constant String := Tree_File_Name     (File_Name1);
!                      Deb : constant String := Debug_File_Name    (File_Name1);
!                      Rep : constant String := Repinfo_File_Name  (File_Name1);
!                      Del : Boolean := True;
  
!                   begin
!                      --  If the ALI file exists and is read-only, no file is
!                      --  deleted.
  
!                      if Is_Regular_File (ALI) then
!                         if Is_Writable_File (ALI) then
!                            Delete (Obj_Dir, ALI);
  
!                         else
!                            Del := False;
  
!                            if Verbose_Mode then
!                               Put ('"');
!                               Put (Obj_Dir);
  
!                               if Obj_Dir (Obj_Dir'Last) /= Dir_Separator then
!                                  Put (Dir_Separator);
!                               end if;
  
!                               Put (ALI);
!                               Put_Line (""" is read-only");
                             end if;
                          end if;
-                      end if;
  
!                      if Del then
  
!                         --  Object file
  
!                         if Is_Regular_File (Obj) then
!                            Delete (Obj_Dir, Obj);
!                         end if;
  
!                         --  Assembly file
  
!                         if Is_Regular_File (Asm) then
!                            Delete (Obj_Dir, Asm);
!                         end if;
  
!                         --  Tree file
  
!                         if Is_Regular_File (Adt) then
!                            Delete (Obj_Dir, Adt);
!                         end if;
  
!                         --  First expanded source file
  
!                         if Is_Regular_File (Deb) then
!                            Delete (Obj_Dir, Deb);
!                         end if;
  
!                         --  Repinfo file
  
!                         if Is_Regular_File (Rep) then
!                            Delete (Obj_Dir, Rep);
!                         end if;
  
!                         --  Second expanded source file
  
!                         if File_Name2 /= No_Name then
!                            declare
!                               Deb : constant String :=
!                                       Debug_File_Name   (File_Name2);
!                               Rep : constant String :=
!                                       Repinfo_File_Name (File_Name2);
!                            begin
!                               if Is_Regular_File (Deb) then
!                                  Delete (Obj_Dir, Deb);
!                               end if;
  
!                               if Is_Regular_File (Rep) then
!                                  Delete (Obj_Dir, Rep);
!                               end if;
!                            end;
                          end if;
!                      end if;
!                   end;
                 end if;
!             end loop;
  
!             if Verbose_Mode then
!                New_Line;
              end if;
           end;
        end if;
  
        --  If switch -r is specified, call Clean_Project recursively for the
        --  imported projects and the project being extended.
  
--- 606,830 ----
           begin
              Change_Dir (Obj_Dir);
  
+             --  First, deal with Ada
+ 
              --  Look through the units to find those that are either immediate
              --  sources or inherited sources of the project.
  
!             if Data.Languages (Ada_Language_Index) then
!                for Unit in 1 .. Prj.Com.Units.Last loop
!                   U_Data := Prj.Com.Units.Table (Unit);
!                   File_Name1 := No_Name;
!                   File_Name2 := No_Name;
  
!                   --  If either the spec or the body is a source of the
!                   --  project, check for the corresponding ALI file in the
!                   --  object directory.
  
!                   if In_Extension_Chain
!                     (U_Data.File_Names (Body_Part).Project, Project)
!                     or else
!                       In_Extension_Chain
!                         (U_Data.File_Names (Specification).Project, Project)
!                   then
!                      File_Name1 := U_Data.File_Names (Body_Part).Name;
!                      Index1     := U_Data.File_Names (Body_Part).Index;
!                      File_Name2 := U_Data.File_Names (Specification).Name;
!                      Index2     := U_Data.File_Names (Specification).Index;
  
!                      --  If there is no body file name, then there may be only
!                      --  a spec.
  
!                      if File_Name1 = No_Name then
!                         File_Name1 := File_Name2;
!                         Index1     := Index2;
!                         File_Name2 := No_Name;
!                         Index2     := 0;
!                      end if;
                    end if;
  
!                   --  If there is either a spec or a body, look for files
!                   --  in the object directory.
  
!                   if File_Name1 /= No_Name then
!                      Lib_File := Osint.Lib_File_Name (File_Name1, Index1);
  
!                      declare
!                         Asm : constant String := Assembly_File_Name (Lib_File);
!                         ALI : constant String := ALI_File_Name      (Lib_File);
!                         Obj : constant String := Object_File_Name   (Lib_File);
!                         Adt : constant String := Tree_File_Name     (Lib_File);
!                         Deb : constant String :=
!                                 Debug_File_Name (File_Name1);
!                         Rep : constant String :=
!                                 Repinfo_File_Name (File_Name1);
!                         Del : Boolean := True;
  
!                      begin
!                         --  If the ALI file exists and is read-only, no file
!                         --  is deleted.
  
!                         if Is_Regular_File (ALI) then
!                            if Is_Writable_File (ALI) then
!                               Delete (Obj_Dir, ALI);
  
!                            else
!                               Del := False;
  
!                               if Verbose_Mode then
!                                  Put ('"');
!                                  Put (Obj_Dir);
  
!                                  if Obj_Dir (Obj_Dir'Last) /=
!                                       Dir_Separator
!                                  then
!                                     Put (Dir_Separator);
!                                  end if;
! 
!                                  Put (ALI);
!                                  Put_Line (""" is read-only");
!                               end if;
                             end if;
                          end if;
  
!                         if Del then
  
!                            --  Object file
  
!                            if Is_Regular_File (Obj) then
!                               Delete (Obj_Dir, Obj);
!                            end if;
  
!                            --  Assembly file
  
!                            if Is_Regular_File (Asm) then
!                               Delete (Obj_Dir, Asm);
!                            end if;
  
!                            --  Tree file
  
!                            if Is_Regular_File (Adt) then
!                               Delete (Obj_Dir, Adt);
!                            end if;
  
!                            --  First expanded source file
  
!                            if Is_Regular_File (Deb) then
!                               Delete (Obj_Dir, Deb);
!                            end if;
  
!                            --  Repinfo file
  
!                            if Is_Regular_File (Rep) then
!                               Delete (Obj_Dir, Rep);
!                            end if;
  
!                            --  Second expanded source file
  
!                            if File_Name2 /= No_Name then
!                               declare
!                                  Deb : constant String :=
!                                          Debug_File_Name   (File_Name2);
!                                  Rep : constant String :=
!                                          Repinfo_File_Name (File_Name2);
!                               begin
!                                  if Is_Regular_File (Deb) then
!                                     Delete (Obj_Dir, Deb);
!                                  end if;
  
!                                  if Is_Regular_File (Rep) then
!                                     Delete (Obj_Dir, Rep);
!                                  end if;
!                               end;
!                            end if;
                          end if;
!                      end;
!                   end if;
!                end loop;
!             end if;
! 
!             --  Check if a global archive and it dependency file could have
!             --  been created and, if they exist, delete them.
! 
!             if Project = Main_Project and then not Data.Library then
!                Global_Archive := False;
! 
!                for Proj in 1 .. Projects.Last loop
!                   if Projects.Table (Proj).Other_Sources_Present then
!                      Global_Archive := True;
!                      exit;
!                   end if;
!                end loop;
! 
!                if Global_Archive then
!                   Clean_Archive (Project);
                 end if;
!             end if;
  
!             if Data.Other_Sources_Present then
! 
!                --  There is non-Ada code: delete the object files and
!                --  the dependency files if they exist.
! 
!                Source_Id := Data.First_Other_Source;
! 
!                while Source_Id /= No_Other_Source loop
!                   Source := Other_Sources.Table (Source_Id);
! 
!                   if Is_Regular_File
!                        (Get_Name_String (Source.Object_Name))
!                   then
!                      Delete (Obj_Dir, Get_Name_String (Source.Object_Name));
!                   end if;
! 
!                   if Is_Regular_File (Get_Name_String (Source.Dep_Name)) then
!                      Delete (Obj_Dir, Get_Name_String (Source.Dep_Name));
!                   end if;
! 
!                   Source_Id := Source.Next;
!                end loop;
! 
!                --  If it is a library with only non Ada sources, delete
!                --  the fake archive and the dependency file, if they exist.
! 
!                if Data.Library
!                  and then not Data.Languages (Ada_Language_Index)
!                then
!                   Clean_Archive (Project);
!                end if;
              end if;
           end;
        end if;
  
+       --  If this is a library project, clean the library directory, the
+       --  interface copy dir and, for a Stand-Alone Library, the binder
+       --  generated files of the library.
+ 
+       --  The directories are cleaned only if switch -c is not specified
+ 
+       if Data.Library then
+          if not Compile_Only then
+             Clean_Directory (Data.Library_Dir);
+ 
+             if Data.Library_Src_Dir /= No_Name
+               and then Data.Library_Src_Dir /= Data.Library_Dir
+             then
+                Clean_Directory (Data.Library_Src_Dir);
+             end if;
+          end if;
+ 
+          if Data.Standalone_Library and then
+             Data.Object_Directory /= No_Name
+          then
+             Delete_Binder_Generated_Files
+               (Get_Name_String (Data.Object_Directory), Data.Library_Name);
+          end if;
+       end if;
+ 
+       if Verbose_Mode then
+          New_Line;
+       end if;
+ 
        --  If switch -r is specified, call Clean_Project recursively for the
        --  imported projects and the project being extended.
  
*************** package body Clean is
*** 736,771 ****
           end;
        end if;
  
!       --  If this is a library project, clean the library directory, the
!       --  interface copy dir and, for a Stand-Alone Library, the binder
!       --  generated files of the library.
! 
!       --  The directories are cleaned only if switch -c is not specified.
! 
!       if Data.Library then
!          if not Compile_Only then
!             Clean_Directory (Data.Library_Dir);
! 
!             if Data.Library_Src_Dir /= No_Name
!               and then Data.Library_Src_Dir /= Data.Library_Dir
!             then
!                Clean_Directory (Data.Library_Src_Dir);
!             end if;
!          end if;
! 
!          if Data.Standalone_Library and then
!             Data.Object_Directory /= No_Name
!          then
!             Delete_Binder_Generated_Files
!               (Get_Name_String (Data.Object_Directory), Data.Library_Name);
!          end if;
! 
!          --  Otherwise, for the main project, delete the executables and the
!          --  binder generated files.
  
!          --  The executables are deleted only if switch -c is not specified.
  
!       elsif Project = Main_Project and then Data.Exec_Directory /= No_Name then
           declare
              Exec_Dir : constant String :=
                Get_Name_String (Data.Exec_Directory);
--- 868,879 ----
           end;
        end if;
  
!          --  For the main project, delete the executables and the binder
!          --  generated files.
  
!          --  The executables are deleted only if switch -c is not specified
  
!       if Project = Main_Project and then Data.Exec_Directory /= No_Name then
           declare
              Exec_Dir : constant String :=
                Get_Name_String (Data.Exec_Directory);
*************** package body Clean is
*** 776,782 ****
                 Main_Source_File := Next_Main_Source;
  
                 if not Compile_Only then
!                   Executable := Executable_Of (Main_Project, Main_Source_File);
  
                    if Is_Regular_File (Get_Name_String (Executable)) then
                       Delete (Exec_Dir, Get_Name_String (Executable));
--- 884,894 ----
                 Main_Source_File := Next_Main_Source;
  
                 if not Compile_Only then
!                   Executable :=
!                     Executable_Of
!                       (Main_Project,
!                        Main_Source_File,
!                        Current_File_Index);
  
                    if Is_Regular_File (Get_Name_String (Executable)) then
                       Delete (Exec_Dir, Get_Name_String (Executable));
*************** package body Clean is
*** 839,858 ****
        if Do_Nothing then
           Put_Line (Full_Name (1 .. Last));
  
!       --  Otherwise, delete the file
  
        else
!          Delete_File (Full_Name (1 .. Last), Success);
  
!          if not Success then
!             Put ("Warning: """);
!             Put (Full_Name (1 .. Last));
!             Put_Line (""" could not be deleted");
  
!          elsif Verbose_Mode or else not Quiet_Output then
!             Put ("""");
!             Put (Full_Name (1 .. Last));
!             Put_Line (""" has been deleted");
           end if;
        end if;
     end Delete;
--- 951,978 ----
        if Do_Nothing then
           Put_Line (Full_Name (1 .. Last));
  
!       --  Otherwise, delete the file if it is writable
  
        else
!          if Force_Deletions
!            or else Is_Writable_File (Full_Name (1 .. Last))
!          then
!             Delete_File (Full_Name (1 .. Last), Success);
!          else
!             Success := False;
!          end if;
  
!          if Verbose_Mode or else not Quiet_Output then
!             if not Success then
!                Put ("Warning: """);
!                Put (Full_Name (1 .. Last));
!                Put_Line (""" could not be deleted");
  
!             else
!                Put ("""");
!                Put (Full_Name (1 .. Last));
!                Put_Line (""" has been deleted");
!             end if;
           end if;
        end if;
     end Delete;
*************** package body Clean is
*** 921,927 ****
        if not Copyright_Displayed then
           Copyright_Displayed := True;
           Put_Line ("GNATCLEAN " & Gnatvsn.Gnat_Version_String
!                    & " Copyright 2003-2004 Free Software Foundation, Inc.");
        end if;
     end Display_Copyright;
  
--- 1041,1047 ----
        if not Copyright_Displayed then
           Copyright_Displayed := True;
           Put_Line ("GNATCLEAN " & Gnatvsn.Gnat_Version_String
!                    & " Copyright 2003-2005 Free Software Foundation, Inc.");
        end if;
     end Display_Copyright;
  
*************** package body Clean is
*** 938,949 ****
     -- Extract_From_Q --
     --------------------
  
!    procedure Extract_From_Q (Source_File : out File_Name_Type) is
!       File : constant File_Name_Type := Q.Table (Q_Front);
  
     begin
!       Q_Front := Q_Front + 1;
!       Source_File := File;
     end Extract_From_Q;
  
     ---------------
--- 1058,1069 ----
     -- Extract_From_Q --
     --------------------
  
!    procedure Extract_From_Q (Lib_File : out File_Name_Type) is
!       Lib : constant File_Name_Type := Q.Table (Q_Front);
  
     begin
!       Q_Front  := Q_Front + 1;
!       Lib_File := Lib;
     end Extract_From_Q;
  
     ---------------
*************** package body Clean is
*** 954,960 ****
     begin
        --  Do the necessary initializations
  
!       Initialize;
  
        --  Parse the command line, getting the switches and the executable names
  
--- 1074,1080 ----
     begin
        --  Do the necessary initializations
  
!       Clean.Initialize;
  
        --  Parse the command line, getting the switches and the executable names
  
*************** package body Clean is
*** 981,988 ****
  
           Prj.Pars.Set_Verbosity (To => Prj.Com.Current_Verbosity);
  
!          --  Parse the project file.
!          --  If there is an error, Main_Project will still be No_Project.
  
           Prj.Pars.Parse
             (Project           => Main_Project,
--- 1101,1108 ----
  
           Prj.Pars.Set_Verbosity (To => Prj.Com.Current_Verbosity);
  
!          --  Parse the project file. If there is an error, Main_Project
!          --  will still be No_Project.
  
           Prj.Pars.Parse
             (Project           => Main_Project,
*************** package body Clean is
*** 990,997 ****
              Packages_To_Check => Packages_To_Check_By_Gnatmake);
  
           if Main_Project = No_Project then
!             Fail ("""" & Project_File_Name.all &
!                   """ processing failed");
           end if;
  
           if Opt.Verbose_Mode then
--- 1110,1116 ----
              Packages_To_Check => Packages_To_Check_By_Gnatmake);
  
           if Main_Project = No_Project then
!             Fail ("""" & Project_File_Name.all & """ processing failed");
           end if;
  
           if Opt.Verbose_Mode then
*************** package body Clean is
*** 1019,1030 ****
        if Main_Project /= No_Project and then Osint.Number_Of_Files = 0 then
           declare
              Value : String_List_Id := Projects.Table (Main_Project).Mains;
! 
           begin
              while Value /= Prj.Nil_String loop
!                Get_Name_String (String_Elements.Table (Value).Value);
!                Osint.Add_File (Name_Buffer (1 .. Name_Len));
!                Value := String_Elements.Table (Value).Next;
              end loop;
           end;
        end if;
--- 1138,1151 ----
        if Main_Project /= No_Project and then Osint.Number_Of_Files = 0 then
           declare
              Value : String_List_Id := Projects.Table (Main_Project).Mains;
!             Main  : String_Element;
           begin
              while Value /= Prj.Nil_String loop
!                Main := String_Elements.Table (Value);
!                Osint.Add_File
!                  (File_Name => Get_Name_String (Main.Value),
!                   Index     => Main.Index);
!                Value := Main.Next;
              end loop;
           end;
        end if;
*************** package body Clean is
*** 1082,1087 ****
--- 1203,1212 ----
        Data : Project_Data;
  
     begin
+       if Prj = No_Project or else Of_Project = No_Project then
+          return False;
+       end if;
+ 
        if Of_Project = Prj then
           return True;
        end if;
*************** package body Clean is
*** 1152,1170 ****
     -- Insert_Q --
     --------------
  
!    procedure Insert_Q (Source_File : File_Name_Type) is
     begin
        --  Do not insert an empty name or an already marked source
  
!       if Source_File /= No_Name
!         and then Get_Name_Table_Byte (Source_File) = 0
!       then
!          Q.Table (Q.Last) := Source_File;
           Q.Increment_Last;
  
           --  Mark the source that has been just added to the Q
  
!          Set_Name_Table_Byte (Source_File, 1);
        end if;
     end Insert_Q;
  
--- 1277,1293 ----
     -- Insert_Q --
     --------------
  
!    procedure Insert_Q (Lib_File : File_Name_Type) is
     begin
        --  Do not insert an empty name or an already marked source
  
!       if Lib_File /= No_Name and then not Makeutl.Is_Marked (Lib_File) then
!          Q.Table (Q.Last) := Lib_File;
           Q.Increment_Last;
  
           --  Mark the source that has been just added to the Q
  
!          Makeutl.Mark (Lib_File);
        end if;
     end Insert_Q;
  
*************** package body Clean is
*** 1196,1360 ****
     --------------------
  
     procedure Parse_Cmd_Line is
     begin
!       loop
!          case
!            GNAT.Command_Line.Getopt
!              ("aO: c D: F h I: I- n P: q r v vP0 vP1 vP2 X:")
!          is
!             when ASCII.NUL =>
!                exit;
  
!             when 'a' =>
!                Add_Lib_Search_Dir (GNAT.Command_Line.Parameter);
  
!             when 'c'    =>
!                Compile_Only := True;
  
!             when 'D'    =>
!                declare
!                   Dir : constant String := GNAT.Command_Line.Parameter;
  
!                begin
!                   if Object_Directory_Path /= null then
!                      Fail ("duplicate -D switch");
  
!                   elsif Project_File_Name /= null then
!                      Fail ("-P and -D cannot be used simultaneously");
  
!                   elsif not Is_Directory (Dir) then
!                      Fail (Dir, " is not a directory");
  
!                   else
!                      Add_Lib_Search_Dir (Dir);
!                   end if;
!                end;
  
!             when 'F' =>
!                Full_Path_Name_For_Brief_Errors := True;
  
!             when 'h' =>
!                Usage;
  
!             when 'I' =>
!                if Full_Switch = "I-" then
!                   Opt.Look_In_Primary_Dir := False;
  
!                else
!                   Add_Lib_Search_Dir (GNAT.Command_Line.Parameter);
!                end if;
  
!             when 'n' =>
!                Do_Nothing := True;
  
!             when 'P' =>
!                if Project_File_Name /= null then
!                   Fail ("multiple -P switches");
  
!                elsif Object_Directory_Path /= null then
!                   Fail ("-D and -P cannot be used simultaneously");
  
!                else
!                   declare
!                      Prj : constant String := GNAT.Command_Line.Parameter;
!                   begin
!                      if Prj'Length > 1 and then Prj (Prj'First) = '=' then
!                         Project_File_Name :=
!                           new String'(Prj (Prj'First + 1 ..  Prj'Last));
  
!                      else
!                         Project_File_Name := new String'(Prj);
!                      end if;
!                   end;
!                end if;
  
!             when 'q' =>
!                Quiet_Output := True;
  
!             when 'r' =>
!                All_Projects := True;
  
!             when 'v' =>
!                if Full_Switch = "v" then
!                   Verbose_Mode := True;
  
!                elsif Full_Switch = "vP0" then
!                   Prj.Com.Current_Verbosity := Prj.Default;
  
!                elsif Full_Switch = "vP1" then
!                   Prj.Com.Current_Verbosity := Prj.Medium;
  
!                else
!                   Prj.Com.Current_Verbosity := Prj.High;
!                end if;
  
!             when 'X' =>
!                declare
!                   Ext_Asgn  : constant String := GNAT.Command_Line.Parameter;
!                   Start     : Positive := Ext_Asgn'First;
!                   Stop      : Natural  := Ext_Asgn'Last;
!                   Equal_Pos : Natural;
!                   OK        : Boolean  := True;
  
!                begin
!                   if Ext_Asgn (Start) = '"' then
!                      if Ext_Asgn (Stop) = '"' then
!                         Start := Start + 1;
!                         Stop  := Stop - 1;
  
!                      else
!                         OK := False;
!                      end if;
!                   end if;
  
!                   Equal_Pos := Start;
  
!                   while Equal_Pos <= Stop and then
!                         Ext_Asgn (Equal_Pos) /= '='
!                   loop
!                      Equal_Pos := Equal_Pos + 1;
!                   end loop;
  
!                   if Equal_Pos = Start or else Equal_Pos > Stop then
!                      OK := False;
!                   end if;
  
!                   if OK then
!                      Prj.Ext.Add
!                        (External_Name => Ext_Asgn (Start .. Equal_Pos - 1),
!                         Value         => Ext_Asgn (Equal_Pos + 1 .. Stop));
  
!                   else
!                      Fail ("illegal external assignment '", Ext_Asgn, "'");
!                   end if;
!                end;
  
!             when others =>
!                Fail ("INTERNAL ERROR, please report");
!          end case;
!       end loop;
  
!       --  Get the file names
  
!       loop
!          declare
!             S : constant String := GNAT.Command_Line.Get_Argument;
  
!          begin
!             exit when S'Length = 0;
  
!             Add_File (S);
!          end;
!       end loop;
  
!    exception
!       when GNAT.Command_Line.Invalid_Switch =>
!          Usage;
!          Fail ("invalid switch : "& GNAT.Command_Line.Full_Switch);
  
!       when GNAT.Command_Line.Invalid_Parameter =>
!          Usage;
!          Fail ("parameter missing for : " & GNAT.Command_Line.Full_Switch);
     end Parse_Cmd_Line;
  
     -----------------------
--- 1319,1558 ----
     --------------------
  
     procedure Parse_Cmd_Line is
+       Source_Index : Int := 0;
+       Index : Positive := 1;
+       Last         : constant Natural := Argument_Count;
+ 
     begin
!       while Index <= Last loop
!          declare
!             Arg : constant String := Argument (Index);
  
!             procedure Bad_Argument;
!             --  Signal bad argument
  
!             ------------------
!             -- Bad_Argument --
!             ------------------
  
!             procedure Bad_Argument is
!             begin
!                Fail ("invalid argument """, Arg, """");
!             end Bad_Argument;
  
!          begin
!             if Arg'Length /= 0 then
!                if Arg (1) = '-' then
!                   if Arg'Length = 1 then
!                      Bad_Argument;
!                   end if;
  
!                   case Arg (2) is
!                      when 'a' =>
!                         if Arg'Length < 4 or else Arg (3) /= 'O' then
!                            Bad_Argument;
!                         end if;
  
!                         Add_Lib_Search_Dir (Arg (3 .. Arg'Last));
  
!                      when 'c'    =>
!                         Compile_Only := True;
  
!                      when 'D'    =>
!                         if Object_Directory_Path /= null then
!                            Fail ("duplicate -D switch");
  
!                         elsif Project_File_Name /= null then
!                            Fail ("-P and -D cannot be used simultaneously");
!                         end if;
  
!                         if Arg'Length > 2 then
!                            declare
!                               Dir : constant String := Arg (3 .. Arg'Last);
!                            begin
!                               if not Is_Directory (Dir) then
!                                  Fail (Dir, " is not a directory");
!                               else
!                                  Add_Lib_Search_Dir (Dir);
!                               end if;
!                            end;
  
!                         else
!                            if Index = Last then
!                               Fail ("no directory specified after -D");
!                            end if;
  
!                            Index := Index + 1;
  
!                            declare
!                               Dir : constant String := Argument (Index);
!                            begin
!                               if not Is_Directory (Dir) then
!                                  Fail (Dir, " is not a directory");
!                               else
!                                  Add_Lib_Search_Dir (Dir);
!                               end if;
!                            end;
!                         end if;
  
!                      when 'f' =>
!                         Force_Deletions := True;
  
!                      when 'F' =>
!                         Full_Path_Name_For_Brief_Errors := True;
  
!                      when 'h' =>
!                         Usage;
  
!                      when 'i' =>
!                         if Arg'Length = 2 then
!                            Bad_Argument;
!                         end if;
  
!                         Source_Index := 0;
  
!                         for J in 3 .. Arg'Last loop
!                            if Arg (J) not in '0' .. '9' then
!                               Bad_Argument;
!                            end if;
  
!                            Source_Index :=
!                              (20 * Source_Index) +
!                              (Character'Pos (Arg (J)) - Character'Pos ('0'));
!                         end loop;
  
!                      when 'I' =>
!                         if Arg = "-I-" then
!                            Opt.Look_In_Primary_Dir := False;
  
!                         else
!                            if Arg'Length = 2 then
!                               Bad_Argument;
!                            end if;
  
!                            Add_Lib_Search_Dir (Arg (3 .. Arg'Last));
!                         end if;
  
!                      when 'n' =>
!                         Do_Nothing := True;
  
!                      when 'P' =>
!                         if Project_File_Name /= null then
!                            Fail ("multiple -P switches");
  
!                         elsif Object_Directory_Path /= null then
!                            Fail ("-D and -P cannot be used simultaneously");
  
!                         end if;
  
!                         if Arg'Length > 2 then
!                            declare
!                               Prj : constant String := Arg (3 .. Arg'Last);
!                            begin
!                               if Prj'Length > 1 and then
!                                 Prj (Prj'First) = '='
!                               then
!                                  Project_File_Name :=
!                                    new String'
!                                      (Prj (Prj'First + 1 ..  Prj'Last));
!                               else
!                                  Project_File_Name := new String'(Prj);
!                               end if;
!                            end;
  
!                         else
!                            if Index = Last then
!                               Fail ("no project specified after -P");
!                            end if;
  
!                            Index := Index + 1;
!                            Project_File_Name := new String'(Argument (Index));
!                         end if;
  
!                      when 'q' =>
!                         Quiet_Output := True;
  
!                      when 'r' =>
!                         All_Projects := True;
  
!                      when 'v' =>
!                         if Arg = "-v" then
!                            Verbose_Mode := True;
  
!                         elsif Arg = "-vP0" then
!                            Prj.Com.Current_Verbosity := Prj.Default;
  
!                         elsif Arg = "-vP1" then
!                            Prj.Com.Current_Verbosity := Prj.Medium;
  
!                         elsif Arg = "-vP2" then
!                            Prj.Com.Current_Verbosity := Prj.High;
  
!                         else
!                            Bad_Argument;
!                         end if;
! 
!                      when 'X' =>
!                         if Arg'Length = 2 then
!                            Bad_Argument;
!                         end if;
! 
!                         declare
!                            Ext_Asgn  : constant String := Arg (3 .. Arg'Last);
!                            Start     : Positive := Ext_Asgn'First;
!                            Stop      : Natural  := Ext_Asgn'Last;
!                            Equal_Pos : Natural;
!                            OK        : Boolean  := True;
! 
!                         begin
!                            if Ext_Asgn (Start) = '"' then
!                               if Ext_Asgn (Stop) = '"' then
!                                  Start := Start + 1;
!                                  Stop  := Stop - 1;
! 
!                               else
!                                  OK := False;
!                               end if;
!                            end if;
! 
!                            Equal_Pos := Start;
! 
!                            while Equal_Pos <= Stop
!                              and then Ext_Asgn (Equal_Pos) /= '='
!                            loop
!                               Equal_Pos := Equal_Pos + 1;
!                            end loop;
! 
!                            if Equal_Pos = Start or else Equal_Pos > Stop then
!                               OK := False;
!                            end if;
! 
!                            if OK then
!                               Prj.Ext.Add
!                                 (External_Name =>
!                                    Ext_Asgn (Start .. Equal_Pos - 1),
!                                  Value         =>
!                                    Ext_Asgn (Equal_Pos + 1 .. Stop));
! 
!                            else
!                               Fail
!                                 ("illegal external assignment '",
!                                  Ext_Asgn, "'");
!                            end if;
!                         end;
! 
!                      when others =>
!                         Bad_Argument;
!                   end case;
! 
!                else
!                   Add_File (Arg, Source_Index);
!                end if;
!             end if;
!          end;
! 
!          Index := Index + 1;
!       end loop;
     end Parse_Cmd_Line;
  
     -----------------------
*************** package body Clean is
*** 1398,1404 ****
        if not Usage_Displayed then
           Usage_Displayed := True;
           Display_Copyright;
!          Put_Line ("Usage: gnatclean [switches] names");
           New_Line;
  
           Put_Line ("  names is one or more file names from which " &
--- 1596,1602 ----
        if not Usage_Displayed then
           Usage_Displayed := True;
           Display_Copyright;
!          Put_Line ("Usage: gnatclean [switches] {[-innn] name}");
           New_Line;
  
           Put_Line ("  names is one or more file names from which " &
*************** package body Clean is
*** 1408,1416 ****
--- 1606,1616 ----
  
           Put_Line ("  -c       Only delete compiler generated files");
           Put_Line ("  -D dir   Specify dir as the object library");
+          Put_Line ("  -f       Force deletions of unwritable files");
           Put_Line ("  -F       Full project path name " &
                     "in brief error messages");
           Put_Line ("  -h       Display this message");
+          Put_Line ("  -innn    Index of unit in source for following names");
           Put_Line ("  -n       Nothing to do: only list files to delete");
           Put_Line ("  -Pproj   Use GNAT Project File proj");
           Put_Line ("  -q       Be quiet/terse");
diff -Nrcpad gcc-3.4.3/gcc/ada/comperr.adb gcc-4.0.0/gcc/ada/comperr.adb
*** gcc-3.4.3/gcc/ada/comperr.adb	Fri Nov 14 13:50:45 2003
--- gcc-4.0.0/gcc/ada/comperr.adb	Mon Jan  3 15:43:24 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Comperr is
*** 95,100 ****
--- 95,101 ----
  
        Is_Public_Version : constant Boolean := Get_Gnat_Build_Type = Public;
        Is_FSF_Version    : constant Boolean := Get_Gnat_Build_Type = FSF;
+       Is_GAP_Version    : constant Boolean := Get_Gnat_Build_Type = GAP;
  
     --  Start of processing for Compiler_Abort
  
*************** package body Comperr is
*** 314,319 ****
--- 315,330 ----
                       "for submitting bugs.");
                    End_Line;
  
+                elsif Is_GAP_Version then
+                   Write_Str
+                     ("| (use plain ASCII or MIME attachment, or FTP "
+                      & "to your GAP account.).");
+                   End_Line;
+ 
+                   Write_Str
+                     ("| Please use your GAP account to report this.");
+                   End_Line;
+ 
                 elsif not Is_FSF_Version then
                    Write_Str
                      ("| (use plain ASCII or MIME attachment, or FTP "
diff -Nrcpad gcc-3.4.3/gcc/ada/config-lang.in gcc-4.0.0/gcc/ada/config-lang.in
*** gcc-3.4.3/gcc/ada/config-lang.in	Thu Apr 24 17:53:59 2003
--- gcc-4.0.0/gcc/ada/config-lang.in	Wed Aug 11 04:10:11 2004
*************** stagestuff="gnatbind\$(exeext) gnat1\$(e
*** 37,39 ****
--- 37,44 ----
  gtfiles="\$(srcdir)/ada/ada-tree.h \$(srcdir)/ada/gigi.h \$(srcdir)/ada/decl.c \$(srcdir)/ada/trans.c \$(srcdir)/ada/utils.c"
  
  outputs=ada/Makefile
+ 
+ target_libs="target-libada"
+ 
+ # Ada will not work until the front end starts emitting GIMPLE trees.
+ build_by_default=no
diff -Nrcpad gcc-3.4.3/gcc/ada/csets.adb gcc-4.0.0/gcc/ada/csets.adb
*** gcc-3.4.3/gcc/ada/csets.adb	Tue Oct 21 13:41:58 2003
--- gcc-4.0.0/gcc/ada/csets.adb	Thu Feb 10 13:57:00 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Csets is
*** 1159,1166 ****
        Identifier_Char ('[') := True;
  
        --  Add entry for ESC if wide characters in use with a wide character
!       --  encoding method active that uses the ESC code for encoding. Also
!       --  add entry for left bracket to capture use of brackets notation.
  
        if Identifier_Character_Set = 'w'
          and then Wide_Character_Encoding_Method in WC_ESC_Encoding_Method
--- 1159,1165 ----
        Identifier_Char ('[') := True;
  
        --  Add entry for ESC if wide characters in use with a wide character
!       --  encoding method active that uses the ESC code for encoding.
  
        if Identifier_Character_Set = 'w'
          and then Wide_Character_Encoding_Method in WC_ESC_Encoding_Method
diff -Nrcpad gcc-3.4.3/gcc/ada/csets.ads gcc-4.0.0/gcc/ada/csets.ads
*** gcc-3.4.3/gcc/ada/csets.ads	Thu Apr 24 17:53:59 2003
--- gcc-4.0.0/gcc/ada/csets.ads	Tue Jul  6 13:57:30 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** pragma Elaborate_Body (Csets);
*** 51,59 ****
     --  do NOT pack this table, since we don't want the extra overhead of
     --  accessing a packed bit string.
  
!    -----------------------------------------------
!    --  Character Tables For Current Compilation --
!    -----------------------------------------------
  
     procedure Initialize;
     --  Routine to initialize following character tables, whose content depends
--- 51,59 ----
     --  do NOT pack this table, since we don't want the extra overhead of
     --  accessing a packed bit string.
  
!    ----------------------------------------------
!    -- Character Tables For Current Compilation --
!    ----------------------------------------------
  
     procedure Initialize;
     --  Routine to initialize following character tables, whose content depends
diff -Nrcpad gcc-3.4.3/gcc/ada/cstand.adb gcc-4.0.0/gcc/ada/cstand.adb
*** gcc-3.4.3/gcc/ada/cstand.adb	Tue Jan 13 11:51:31 2004
--- gcc-4.0.0/gcc/ada/cstand.adb	Thu Feb 10 13:50:24 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body CStand is
*** 145,151 ****
        Set_Ekind                      (E, E_Floating_Point_Type);
        Set_Etype                      (E, E);
        Init_Size                      (E, Siz);
!       Set_Prim_Alignment             (E);
        Init_Digits_Value              (E, Digs);
        Set_Float_Bounds               (E);
        Set_Is_Frozen                  (E);
--- 145,151 ----
        Set_Ekind                      (E, E_Floating_Point_Type);
        Set_Etype                      (E, E);
        Init_Size                      (E, Siz);
!       Set_Elem_Alignment             (E);
        Init_Digits_Value              (E, Digs);
        Set_Float_Bounds               (E);
        Set_Is_Frozen                  (E);
*************** package body CStand is
*** 171,177 ****
        Set_Ekind                      (E, E_Signed_Integer_Type);
        Set_Etype                      (E, E);
        Init_Size                      (E, Siz);
!       Set_Prim_Alignment             (E);
        Set_Integer_Bounds             (E, E, Lbound, Ubound);
        Set_Is_Frozen                  (E);
        Set_Is_Public                  (E);
--- 171,177 ----
        Set_Ekind                      (E, E_Signed_Integer_Type);
        Set_Etype                      (E, E);
        Init_Size                      (E, Siz);
!       Set_Elem_Alignment             (E);
        Set_Integer_Bounds             (E, E, Lbound, Ubound);
        Set_Is_Frozen                  (E);
        Set_Is_Public                  (E);
*************** package body CStand is
*** 189,223 ****
     procedure Create_Operators is
        Op_Node : Entity_Id;
  
!       --  Following list has two entries for concatenation, to include
!       --  explicitly the operation on wide strings.
  
        Binary_Ops : constant array (S_Binary_Ops) of Name_Id :=
!         (Name_Op_Add,      Name_Op_And,   Name_Op_Concat,   Name_Op_Concat,
!          Name_Op_Divide,   Name_Op_Eq,    Name_Op_Expon,    Name_Op_Ge,
!          Name_Op_Gt,       Name_Op_Le,    Name_Op_Lt,       Name_Op_Mod,
!          Name_Op_Multiply, Name_Op_Ne,    Name_Op_Or,       Name_Op_Rem,
!          Name_Op_Subtract, Name_Op_Xor);
  
        Bin_Op_Types : constant array (S_Binary_Ops) of Entity_Id :=
!         (Universal_Integer, Standard_Boolean,
!          Standard_String,   Standard_Wide_String,
!          Universal_Integer, Standard_Boolean,
!          Universal_Integer, Standard_Boolean,
!          Standard_Boolean,  Standard_Boolean,
!          Standard_Boolean,  Universal_Integer,
!          Universal_Integer, Standard_Boolean,
!          Standard_Boolean,  Universal_Integer,
!          Universal_Integer, Standard_Boolean);
  
        Unary_Ops : constant array (S_Unary_Ops) of Name_Id :=
!         (Name_Op_Abs, Name_Op_Subtract, Name_Op_Not, Name_Op_Add);
  
        Unary_Op_Types : constant array (S_Unary_Ops) of Entity_Id :=
-         (Universal_Integer, Universal_Integer,
-          Standard_Boolean,  Universal_Integer);
  
!       --  Corresponding to Abs, Minus, Not, and Plus.
  
     begin
        for J in S_Binary_Ops loop
--- 189,266 ----
     procedure Create_Operators is
        Op_Node : Entity_Id;
  
!       --  The following tables define the binary and unary operators and their
!       --  corresponding result type.
  
        Binary_Ops : constant array (S_Binary_Ops) of Name_Id :=
! 
!          --  There is one entry here for each binary operator, except for the
!          --  case of concatenation, where there are three entries, one for a
!          --  String result, one for Wide_String, and one for Wide_Wide_String.
! 
!         (Name_Op_Add,
!          Name_Op_And,
!          Name_Op_Concat,
!          Name_Op_Concat,
!          Name_Op_Concat,
!          Name_Op_Divide,
!          Name_Op_Eq,
!          Name_Op_Expon,
!          Name_Op_Ge,
!          Name_Op_Gt,
!          Name_Op_Le,
!          Name_Op_Lt,
!          Name_Op_Mod,
!          Name_Op_Multiply,
!          Name_Op_Ne,
!          Name_Op_Or,
!          Name_Op_Rem,
!          Name_Op_Subtract,
!          Name_Op_Xor);
  
        Bin_Op_Types : constant array (S_Binary_Ops) of Entity_Id :=
! 
!          --  This table has the corresponding result types. The entries are
!          --  ordered so they correspond to the Binary_Ops array above.
! 
!         (Universal_Integer,         -- Add
!          Standard_Boolean,          -- And
!          Standard_String,           -- Concat (String)
!          Standard_Wide_String,      -- Concat (Wide_String)
!          Standard_Wide_Wide_String, -- Concat (Wide_Wide_String)
!          Universal_Integer,         -- Divide
!          Standard_Boolean,          -- Eq
!          Universal_Integer,         -- Expon
!          Standard_Boolean,          -- Ge
!          Standard_Boolean,          -- Gt
!          Standard_Boolean,          -- Le
!          Standard_Boolean,          -- Lt
!          Universal_Integer,         -- Mod
!          Universal_Integer,         -- Multiply
!          Standard_Boolean,          -- Ne
!          Standard_Boolean,          -- Or
!          Universal_Integer,         -- Rem
!          Universal_Integer,         -- Subtract
!          Standard_Boolean);         -- Xor
  
        Unary_Ops : constant array (S_Unary_Ops) of Name_Id :=
! 
!          --  There is one entry here for each unary operator
! 
!         (Name_Op_Abs,
!          Name_Op_Subtract,
!          Name_Op_Not,
!          Name_Op_Add);
  
        Unary_Op_Types : constant array (S_Unary_Ops) of Entity_Id :=
  
!          --  This table has the corresponding result types. The entries are
!          --  ordered so they correspond to the Unary_Ops array above.
! 
!         (Universal_Integer,     -- Abs
!          Universal_Integer,     -- Subtract
!          Standard_Boolean,      -- Not
!          Universal_Integer);    -- Add
  
     begin
        for J in S_Binary_Ops loop
*************** package body CStand is
*** 236,242 ****
        --  For concatenation, we create a separate operator for each
        --  array type. This simplifies the resolution of the component-
        --  component concatenation operation. In Standard, we set the types
!       --  of the formals for string and wide string concatenation.
  
        Set_Etype (First_Entity (Standard_Op_Concat),  Standard_String);
        Set_Etype (Last_Entity  (Standard_Op_Concat),  Standard_String);
--- 279,285 ----
        --  For concatenation, we create a separate operator for each
        --  array type. This simplifies the resolution of the component-
        --  component concatenation operation. In Standard, we set the types
!       --  of the formals for string, wide [wide]_string, concatenations.
  
        Set_Etype (First_Entity (Standard_Op_Concat),  Standard_String);
        Set_Etype (Last_Entity  (Standard_Op_Concat),  Standard_String);
*************** package body CStand is
*** 244,249 ****
--- 287,298 ----
        Set_Etype (First_Entity (Standard_Op_Concatw), Standard_Wide_String);
        Set_Etype (Last_Entity  (Standard_Op_Concatw), Standard_Wide_String);
  
+       Set_Etype (First_Entity (Standard_Op_Concatww),
+                   Standard_Wide_Wide_String);
+ 
+       Set_Etype (Last_Entity (Standard_Op_Concatww),
+                    Standard_Wide_Wide_String);
+ 
     end Create_Operators;
  
     ---------------------
*************** package body CStand is
*** 359,365 ****
        Set_Etype          (Standard_Boolean, Standard_Boolean);
        Init_Esize         (Standard_Boolean, Standard_Character_Size);
        Init_RM_Size       (Standard_Boolean, 1);
!       Set_Prim_Alignment (Standard_Boolean);
  
        Set_Is_Unsigned_Type           (Standard_Boolean);
        Set_Size_Known_At_Compile_Time (Standard_Boolean);
--- 408,414 ----
        Set_Etype          (Standard_Boolean, Standard_Boolean);
        Init_Esize         (Standard_Boolean, Standard_Character_Size);
        Init_RM_Size       (Standard_Boolean, 1);
!       Set_Elem_Alignment (Standard_Boolean);
  
        Set_Is_Unsigned_Type           (Standard_Boolean);
        Set_Size_Known_At_Compile_Time (Standard_Boolean);
*************** package body CStand is
*** 402,407 ****
--- 451,461 ----
        Set_Etype (R_Node, Standard_Boolean);
        Set_Parent (R_Node, Standard_Boolean);
  
+       --  Record entity identifiers for boolean literals in the
+       --  Boolean_Literals array, for easy reference during expansion.
+ 
+       Boolean_Literals := (False => Standard_False, True => Standard_True);
+ 
        --  Create type definition nodes for predefined integer types
  
        Build_Signed_Integer_Type
*************** package body CStand is
*** 476,482 ****
        Set_Etype          (Standard_Character, Standard_Character);
        Init_Esize         (Standard_Character, Standard_Character_Size);
        Init_RM_Size       (Standard_Character, 8);
!       Set_Prim_Alignment (Standard_Character);
  
        Set_Is_Unsigned_Type           (Standard_Character);
        Set_Is_Character_Type          (Standard_Character);
--- 530,536 ----
        Set_Etype          (Standard_Character, Standard_Character);
        Init_Esize         (Standard_Character, Standard_Character_Size);
        Init_RM_Size       (Standard_Character, 8);
!       Set_Elem_Alignment (Standard_Character);
  
        Set_Is_Unsigned_Type           (Standard_Character);
        Set_Is_Character_Type          (Standard_Character);
*************** package body CStand is
*** 492,499 ****
        B_Node := New_Node (N_Character_Literal, Stloc);
        Set_Is_Static_Expression (B_Node);
        Set_Chars                (B_Node, No_Name);
!       Set_Char_Literal_Value   (B_Node, 16#00#);
!       Set_Entity               (B_Node,  Empty);
        Set_Etype                (B_Node, Standard_Character);
        Set_Low_Bound (R_Node, B_Node);
  
--- 546,553 ----
        B_Node := New_Node (N_Character_Literal, Stloc);
        Set_Is_Static_Expression (B_Node);
        Set_Chars                (B_Node, No_Name);
!       Set_Char_Literal_Value   (B_Node, Uint_0);
!       Set_Entity               (B_Node, Empty);
        Set_Etype                (B_Node, Standard_Character);
        Set_Low_Bound (R_Node, B_Node);
  
*************** package body CStand is
*** 502,509 ****
        B_Node := New_Node (N_Character_Literal, Stloc);
        Set_Is_Static_Expression (B_Node);
        Set_Chars                (B_Node, No_Name);
!       Set_Char_Literal_Value   (B_Node, 16#FF#);
!       Set_Entity               (B_Node,  Empty);
        Set_Etype                (B_Node, Standard_Character);
        Set_High_Bound (R_Node, B_Node);
  
--- 556,563 ----
        B_Node := New_Node (N_Character_Literal, Stloc);
        Set_Is_Static_Expression (B_Node);
        Set_Chars                (B_Node, No_Name);
!       Set_Char_Literal_Value   (B_Node, UI_From_Int (16#FF#));
!       Set_Entity               (B_Node, Empty);
        Set_Etype                (B_Node, Standard_Character);
        Set_High_Bound (R_Node, B_Node);
  
*************** package body CStand is
*** 522,528 ****
        Set_Etype      (Standard_Wide_Character, Standard_Wide_Character);
        Init_Size      (Standard_Wide_Character, Standard_Wide_Character_Size);
  
!       Set_Prim_Alignment             (Standard_Wide_Character);
        Set_Is_Unsigned_Type           (Standard_Wide_Character);
        Set_Is_Character_Type          (Standard_Wide_Character);
        Set_Is_Known_Valid             (Standard_Wide_Character);
--- 576,582 ----
        Set_Etype      (Standard_Wide_Character, Standard_Wide_Character);
        Init_Size      (Standard_Wide_Character, Standard_Wide_Character_Size);
  
!       Set_Elem_Alignment             (Standard_Wide_Character);
        Set_Is_Unsigned_Type           (Standard_Wide_Character);
        Set_Is_Character_Type          (Standard_Wide_Character);
        Set_Is_Known_Valid             (Standard_Wide_Character);
*************** package body CStand is
*** 537,544 ****
        B_Node := New_Node (N_Character_Literal, Stloc);
        Set_Is_Static_Expression (B_Node);
        Set_Chars                (B_Node, No_Name);    --  ???
!       Set_Char_Literal_Value   (B_Node, 16#0000#);
!       Set_Entity               (B_Node,  Empty);
        Set_Etype                (B_Node, Standard_Wide_Character);
        Set_Low_Bound (R_Node, B_Node);
  
--- 591,598 ----
        B_Node := New_Node (N_Character_Literal, Stloc);
        Set_Is_Static_Expression (B_Node);
        Set_Chars                (B_Node, No_Name);    --  ???
!       Set_Char_Literal_Value   (B_Node, Uint_0);
!       Set_Entity               (B_Node, Empty);
        Set_Etype                (B_Node, Standard_Wide_Character);
        Set_Low_Bound (R_Node, B_Node);
  
*************** package body CStand is
*** 547,554 ****
        B_Node := New_Node (N_Character_Literal, Stloc);
        Set_Is_Static_Expression (B_Node);
        Set_Chars                (B_Node, No_Name);    --  ???
!       Set_Char_Literal_Value   (B_Node, 16#FFFF#);
!       Set_Entity               (B_Node,  Empty);
        Set_Etype                (B_Node, Standard_Wide_Character);
        Set_High_Bound           (R_Node, B_Node);
  
--- 601,608 ----
        B_Node := New_Node (N_Character_Literal, Stloc);
        Set_Is_Static_Expression (B_Node);
        Set_Chars                (B_Node, No_Name);    --  ???
!       Set_Char_Literal_Value   (B_Node, UI_From_Int (16#FFFF#));
!       Set_Entity               (B_Node, Empty);
        Set_Etype                (B_Node, Standard_Wide_Character);
        Set_High_Bound           (R_Node, B_Node);
  
*************** package body CStand is
*** 556,561 ****
--- 610,663 ----
        Set_Etype (R_Node, Standard_Wide_Character);
        Set_Parent (R_Node, Standard_Wide_Character);
  
+       --  Create type definition for type Wide_Wide_Character. Note that we
+       --  do not set the Literals field, since type Wide_Wide_Character is
+       --  handled with special routines that do not need a literal list.
+ 
+       Tdef_Node := New_Node (N_Enumeration_Type_Definition, Stloc);
+       Set_Type_Definition (Parent (Standard_Wide_Wide_Character), Tdef_Node);
+ 
+       Set_Ekind (Standard_Wide_Wide_Character, E_Enumeration_Type);
+       Set_Etype (Standard_Wide_Wide_Character,
+                  Standard_Wide_Wide_Character);
+       Init_Size (Standard_Wide_Wide_Character,
+                  Standard_Wide_Wide_Character_Size);
+ 
+       Set_Elem_Alignment             (Standard_Wide_Wide_Character);
+       Set_Is_Unsigned_Type           (Standard_Wide_Wide_Character);
+       Set_Is_Character_Type          (Standard_Wide_Wide_Character);
+       Set_Is_Known_Valid             (Standard_Wide_Wide_Character);
+       Set_Size_Known_At_Compile_Time (Standard_Wide_Wide_Character);
+       Set_Is_Ada_2005                (Standard_Wide_Wide_Character);
+ 
+       --  Create the bounds for type Wide_Wide_Character
+ 
+       R_Node := New_Node (N_Range, Stloc);
+ 
+       --  Low bound for type Wide_Wide_Character
+ 
+       B_Node := New_Node (N_Character_Literal, Stloc);
+       Set_Is_Static_Expression (B_Node);
+       Set_Chars                (B_Node, No_Name);    --  ???
+       Set_Char_Literal_Value   (B_Node, Uint_0);
+       Set_Entity               (B_Node, Empty);
+       Set_Etype                (B_Node, Standard_Wide_Wide_Character);
+       Set_Low_Bound (R_Node, B_Node);
+ 
+       --  High bound for type Wide_Wide_Character
+ 
+       B_Node := New_Node (N_Character_Literal, Stloc);
+       Set_Is_Static_Expression (B_Node);
+       Set_Chars                (B_Node, No_Name);    --  ???
+       Set_Char_Literal_Value   (B_Node, UI_From_Int (16#7FFF_FFFF#));
+       Set_Entity               (B_Node, Empty);
+       Set_Etype                (B_Node, Standard_Wide_Wide_Character);
+       Set_High_Bound           (R_Node, B_Node);
+ 
+       Set_Scalar_Range (Standard_Wide_Wide_Character, R_Node);
+       Set_Etype (R_Node, Standard_Wide_Wide_Character);
+       Set_Parent (R_Node, Standard_Wide_Wide_Character);
+ 
        --  Create type definition node for type String
  
        Tdef_Node := New_Node (N_Unconstrained_Array_Definition, Stloc);
*************** package body CStand is
*** 564,571 ****
           CompDef_Node : Node_Id;
        begin
           CompDef_Node := New_Node (N_Component_Definition, Stloc);
!          Set_Aliased_Present    (CompDef_Node, False);
!          Set_Subtype_Indication (CompDef_Node, Identifier_For (S_Character));
           Set_Component_Definition (Tdef_Node, CompDef_Node);
        end;
  
--- 666,674 ----
           CompDef_Node : Node_Id;
        begin
           CompDef_Node := New_Node (N_Component_Definition, Stloc);
!          Set_Aliased_Present      (CompDef_Node, False);
!          Set_Access_Definition    (CompDef_Node, Empty);
!          Set_Subtype_Indication   (CompDef_Node, Identifier_For (S_Character));
           Set_Component_Definition (Tdef_Node, CompDef_Node);
        end;
  
*************** package body CStand is
*** 578,583 ****
--- 681,687 ----
        Set_Component_Type (Standard_String, Standard_Character);
        Set_Component_Size (Standard_String, Uint_8);
        Init_Size_Align    (Standard_String);
+       Set_Alignment      (Standard_String, Uint_1);
  
        --  Set index type of String
  
*************** package body CStand is
*** 590,604 ****
--- 694,711 ----
        --  Create type definition node for type Wide_String
  
        Tdef_Node := New_Node (N_Unconstrained_Array_Definition, Stloc);
+ 
        declare
           CompDef_Node : Node_Id;
        begin
           CompDef_Node := New_Node (N_Component_Definition, Stloc);
           Set_Aliased_Present    (CompDef_Node, False);
+          Set_Access_Definition  (CompDef_Node, Empty);
           Set_Subtype_Indication (CompDef_Node,
                                   Identifier_For (S_Wide_Character));
           Set_Component_Definition (Tdef_Node, CompDef_Node);
        end;
+ 
        Set_Subtype_Marks (Tdef_Node, New_List);
        Append (Identifier_For (S_Positive), Subtype_Marks (Tdef_Node));
        Set_Type_Definition (Parent (Standard_Wide_String), Tdef_Node);
*************** package body CStand is
*** 617,622 ****
--- 724,765 ----
        Set_Entity (E_Id, Standard_Positive);
        Set_Etype (E_Id, Standard_Positive);
  
+       --  Create type definition node for type Wide_Wide_String
+ 
+       Tdef_Node := New_Node (N_Unconstrained_Array_Definition, Stloc);
+ 
+       declare
+          CompDef_Node : Node_Id;
+       begin
+          CompDef_Node := New_Node (N_Component_Definition, Stloc);
+          Set_Aliased_Present    (CompDef_Node, False);
+          Set_Access_Definition  (CompDef_Node, Empty);
+          Set_Subtype_Indication (CompDef_Node,
+                                  Identifier_For (S_Wide_Wide_Character));
+          Set_Component_Definition (Tdef_Node, CompDef_Node);
+       end;
+ 
+       Set_Subtype_Marks (Tdef_Node, New_List);
+       Append (Identifier_For (S_Positive), Subtype_Marks (Tdef_Node));
+       Set_Type_Definition (Parent (Standard_Wide_Wide_String), Tdef_Node);
+ 
+       Set_Ekind          (Standard_Wide_Wide_String, E_String_Type);
+       Set_Etype          (Standard_Wide_Wide_String,
+                           Standard_Wide_Wide_String);
+       Set_Component_Type (Standard_Wide_Wide_String,
+                           Standard_Wide_Wide_Character);
+       Set_Component_Size (Standard_Wide_Wide_String, Uint_32);
+       Init_Size_Align    (Standard_Wide_Wide_String);
+       Set_Is_Ada_2005    (Standard_Wide_Wide_String);
+ 
+       --  Set index type of Wide_Wide_String
+ 
+       E_Id := First
+         (Subtype_Marks (Type_Definition (Parent (Standard_Wide_Wide_String))));
+       Set_First_Index (Standard_Wide_Wide_String, E_Id);
+       Set_Entity (E_Id, Standard_Positive);
+       Set_Etype (E_Id, Standard_Positive);
+ 
        --  Create subtype declaration for Natural
  
        Decl := New_Node (N_Subtype_Declaration, Stloc);
*************** package body CStand is
*** 629,635 ****
        Set_Etype          (Standard_Natural, Base_Type (Standard_Integer));
        Init_Esize         (Standard_Natural, Standard_Integer_Size);
        Init_RM_Size       (Standard_Natural, Standard_Integer_Size - 1);
!       Set_Prim_Alignment (Standard_Natural);
        Set_Size_Known_At_Compile_Time
                           (Standard_Natural);
        Set_Integer_Bounds (Standard_Natural,
--- 772,778 ----
        Set_Etype          (Standard_Natural, Base_Type (Standard_Integer));
        Init_Esize         (Standard_Natural, Standard_Integer_Size);
        Init_RM_Size       (Standard_Natural, Standard_Integer_Size - 1);
!       Set_Elem_Alignment (Standard_Natural);
        Set_Size_Known_At_Compile_Time
                           (Standard_Natural);
        Set_Integer_Bounds (Standard_Natural,
*************** package body CStand is
*** 652,658 ****
        Set_Etype          (Standard_Positive, Base_Type (Standard_Integer));
        Init_Esize         (Standard_Positive, Standard_Integer_Size);
        Init_RM_Size       (Standard_Positive, Standard_Integer_Size - 1);
!       Set_Prim_Alignment (Standard_Positive);
  
        Set_Size_Known_At_Compile_Time (Standard_Positive);
  
--- 795,801 ----
        Set_Etype          (Standard_Positive, Base_Type (Standard_Integer));
        Init_Esize         (Standard_Positive, Standard_Integer_Size);
        Init_RM_Size       (Standard_Positive, Standard_Integer_Size - 1);
!       Set_Elem_Alignment (Standard_Positive);
  
        Set_Size_Known_At_Compile_Time (Standard_Positive);
  
*************** package body CStand is
*** 712,718 ****
              Set_Is_Static_Expression (Expr_Decl);
              Set_Chars                (Expr_Decl, No_Name);
              Set_Etype                (Expr_Decl, Standard_Character);
!             Set_Char_Literal_Value   (Expr_Decl, Ccode);
           end;
  
           Append (Decl, Decl_A);
--- 855,861 ----
              Set_Is_Static_Expression (Expr_Decl);
              Set_Chars                (Expr_Decl, No_Name);
              Set_Etype                (Expr_Decl, Standard_Character);
!             Set_Char_Literal_Value   (Expr_Decl, UI_From_Int (Int (Ccode)));
           end;
  
           Append (Decl, Decl_A);
*************** package body CStand is
*** 770,776 ****
        Set_Scope          (Standard_A_Char, Standard_Standard);
        Set_Etype          (Standard_A_Char, Standard_A_String);
        Init_Size          (Standard_A_Char, System_Address_Size);
!       Set_Prim_Alignment (Standard_A_Char);
  
        Set_Directly_Designated_Type (Standard_A_Char, Standard_Character);
        Make_Name     (Standard_A_Char, "access_character");
--- 913,919 ----
        Set_Scope          (Standard_A_Char, Standard_Standard);
        Set_Etype          (Standard_A_Char, Standard_A_String);
        Init_Size          (Standard_A_Char, System_Address_Size);
!       Set_Elem_Alignment (Standard_A_Char);
  
        Set_Directly_Designated_Type (Standard_A_Char, Standard_Character);
        Make_Name     (Standard_A_Char, "access_character");
*************** package body CStand is
*** 804,810 ****
        Set_Scope             (Any_Access, Standard_Standard);
        Set_Etype             (Any_Access, Any_Access);
        Init_Size             (Any_Access, System_Address_Size);
!       Set_Prim_Alignment    (Any_Access);
        Make_Name             (Any_Access, "an access type");
  
        Any_Character := New_Standard_Entity;
--- 947,953 ----
        Set_Scope             (Any_Access, Standard_Standard);
        Set_Etype             (Any_Access, Any_Access);
        Init_Size             (Any_Access, System_Address_Size);
!       Set_Elem_Alignment    (Any_Access);
        Make_Name             (Any_Access, "an access type");
  
        Any_Character := New_Standard_Entity;
*************** package body CStand is
*** 815,821 ****
        Set_Is_Character_Type (Any_Character);
        Init_Esize            (Any_Character, Standard_Character_Size);
        Init_RM_Size          (Any_Character, 8);
!       Set_Prim_Alignment    (Any_Character);
        Set_Scalar_Range      (Any_Character, Scalar_Range (Standard_Character));
        Make_Name             (Any_Character, "a character type");
  
--- 958,964 ----
        Set_Is_Character_Type (Any_Character);
        Init_Esize            (Any_Character, Standard_Character_Size);
        Init_RM_Size          (Any_Character, 8);
!       Set_Elem_Alignment    (Any_Character);
        Set_Scalar_Range      (Any_Character, Scalar_Range (Standard_Character));
        Make_Name             (Any_Character, "a character type");
  
*************** package body CStand is
*** 833,839 ****
        Set_Etype             (Any_Boolean, Standard_Boolean);
        Init_Esize            (Any_Boolean, Standard_Character_Size);
        Init_RM_Size          (Any_Boolean, 1);
!       Set_Prim_Alignment    (Any_Boolean);
        Set_Is_Unsigned_Type  (Any_Boolean);
        Set_Scalar_Range      (Any_Boolean, Scalar_Range (Standard_Boolean));
        Make_Name             (Any_Boolean, "a boolean type");
--- 976,982 ----
        Set_Etype             (Any_Boolean, Standard_Boolean);
        Init_Esize            (Any_Boolean, Standard_Character_Size);
        Init_RM_Size          (Any_Boolean, 1);
!       Set_Elem_Alignment    (Any_Boolean);
        Set_Is_Unsigned_Type  (Any_Boolean);
        Set_Scalar_Range      (Any_Boolean, Scalar_Range (Standard_Boolean));
        Make_Name             (Any_Boolean, "a boolean type");
*************** package body CStand is
*** 852,858 ****
        Set_Scope             (Any_Discrete, Standard_Standard);
        Set_Etype             (Any_Discrete, Any_Discrete);
        Init_Size             (Any_Discrete, Standard_Integer_Size);
!       Set_Prim_Alignment    (Any_Discrete);
        Make_Name             (Any_Discrete, "a discrete type");
  
        Any_Fixed := New_Standard_Entity;
--- 995,1001 ----
        Set_Scope             (Any_Discrete, Standard_Standard);
        Set_Etype             (Any_Discrete, Any_Discrete);
        Init_Size             (Any_Discrete, Standard_Integer_Size);
!       Set_Elem_Alignment    (Any_Discrete);
        Make_Name             (Any_Discrete, "a discrete type");
  
        Any_Fixed := New_Standard_Entity;
*************** package body CStand is
*** 860,866 ****
        Set_Scope             (Any_Fixed, Standard_Standard);
        Set_Etype             (Any_Fixed, Any_Fixed);
        Init_Size             (Any_Fixed, Standard_Integer_Size);
!       Set_Prim_Alignment    (Any_Fixed);
        Make_Name             (Any_Fixed, "a fixed-point type");
  
        Any_Integer := New_Standard_Entity;
--- 1003,1009 ----
        Set_Scope             (Any_Fixed, Standard_Standard);
        Set_Etype             (Any_Fixed, Any_Fixed);
        Init_Size             (Any_Fixed, Standard_Integer_Size);
!       Set_Elem_Alignment    (Any_Fixed);
        Make_Name             (Any_Fixed, "a fixed-point type");
  
        Any_Integer := New_Standard_Entity;
*************** package body CStand is
*** 868,874 ****
        Set_Scope             (Any_Integer, Standard_Standard);
        Set_Etype             (Any_Integer, Standard_Long_Long_Integer);
        Init_Size             (Any_Integer, Standard_Long_Long_Integer_Size);
!       Set_Prim_Alignment    (Any_Integer);
  
        Set_Integer_Bounds
          (Any_Integer,
--- 1011,1017 ----
        Set_Scope             (Any_Integer, Standard_Standard);
        Set_Etype             (Any_Integer, Standard_Long_Long_Integer);
        Init_Size             (Any_Integer, Standard_Long_Long_Integer_Size);
!       Set_Elem_Alignment    (Any_Integer);
  
        Set_Integer_Bounds
          (Any_Integer,
*************** package body CStand is
*** 882,888 ****
        Set_Scope             (Any_Modular, Standard_Standard);
        Set_Etype             (Any_Modular, Standard_Long_Long_Integer);
        Init_Size             (Any_Modular, Standard_Long_Long_Integer_Size);
!       Set_Prim_Alignment    (Any_Modular);
        Set_Is_Unsigned_Type  (Any_Modular);
        Make_Name             (Any_Modular, "a modular type");
  
--- 1025,1031 ----
        Set_Scope             (Any_Modular, Standard_Standard);
        Set_Etype             (Any_Modular, Standard_Long_Long_Integer);
        Init_Size             (Any_Modular, Standard_Long_Long_Integer_Size);
!       Set_Elem_Alignment    (Any_Modular);
        Set_Is_Unsigned_Type  (Any_Modular);
        Make_Name             (Any_Modular, "a modular type");
  
*************** package body CStand is
*** 891,897 ****
        Set_Scope             (Any_Numeric, Standard_Standard);
        Set_Etype             (Any_Numeric, Standard_Long_Long_Integer);
        Init_Size             (Any_Numeric, Standard_Long_Long_Integer_Size);
!       Set_Prim_Alignment    (Any_Numeric);
        Make_Name             (Any_Numeric, "a numeric type");
  
        Any_Real := New_Standard_Entity;
--- 1034,1040 ----
        Set_Scope             (Any_Numeric, Standard_Standard);
        Set_Etype             (Any_Numeric, Standard_Long_Long_Integer);
        Init_Size             (Any_Numeric, Standard_Long_Long_Integer_Size);
!       Set_Elem_Alignment    (Any_Numeric);
        Make_Name             (Any_Numeric, "a numeric type");
  
        Any_Real := New_Standard_Entity;
*************** package body CStand is
*** 899,905 ****
        Set_Scope             (Any_Real, Standard_Standard);
        Set_Etype             (Any_Real, Standard_Long_Long_Float);
        Init_Size             (Any_Real, Standard_Long_Long_Float_Size);
!       Set_Prim_Alignment    (Any_Real);
        Make_Name             (Any_Real, "a real type");
  
        Any_Scalar := New_Standard_Entity;
--- 1042,1048 ----
        Set_Scope             (Any_Real, Standard_Standard);
        Set_Etype             (Any_Real, Standard_Long_Long_Float);
        Init_Size             (Any_Real, Standard_Long_Long_Float_Size);
!       Set_Elem_Alignment    (Any_Real);
        Make_Name             (Any_Real, "a real type");
  
        Any_Scalar := New_Standard_Entity;
*************** package body CStand is
*** 907,913 ****
        Set_Scope             (Any_Scalar, Standard_Standard);
        Set_Etype             (Any_Scalar, Any_Scalar);
        Init_Size             (Any_Scalar, Standard_Integer_Size);
!       Set_Prim_Alignment    (Any_Scalar);
        Make_Name             (Any_Scalar, "a scalar type");
  
        Any_String := New_Standard_Entity;
--- 1050,1056 ----
        Set_Scope             (Any_Scalar, Standard_Standard);
        Set_Etype             (Any_Scalar, Any_Scalar);
        Init_Size             (Any_Scalar, Standard_Integer_Size);
!       Set_Elem_Alignment    (Any_Scalar);
        Make_Name             (Any_Scalar, "a scalar type");
  
        Any_String := New_Standard_Entity;
*************** package body CStand is
*** 967,973 ****
        Set_Scope             (Standard_Unsigned, Standard_Standard);
        Set_Etype             (Standard_Unsigned, Standard_Unsigned);
        Init_Size             (Standard_Unsigned, Standard_Integer_Size);
!       Set_Prim_Alignment    (Standard_Unsigned);
        Set_Modulus           (Standard_Unsigned,
                                Uint_2 ** Standard_Integer_Size);
        Set_Is_Unsigned_Type  (Standard_Unsigned);
--- 1110,1116 ----
        Set_Scope             (Standard_Unsigned, Standard_Standard);
        Set_Etype             (Standard_Unsigned, Standard_Unsigned);
        Init_Size             (Standard_Unsigned, Standard_Integer_Size);
!       Set_Elem_Alignment    (Standard_Unsigned);
        Set_Modulus           (Standard_Unsigned,
                                Uint_2 ** Standard_Integer_Size);
        Set_Is_Unsigned_Type  (Standard_Unsigned);
*************** package body CStand is
*** 1016,1022 ****
        Set_Etype            (Universal_Fixed, Universal_Fixed);
        Set_Scope            (Universal_Fixed, Standard_Standard);
        Init_Size            (Universal_Fixed, Standard_Long_Long_Integer_Size);
!       Set_Prim_Alignment   (Universal_Fixed);
        Set_Size_Known_At_Compile_Time
                             (Universal_Fixed);
  
--- 1159,1165 ----
        Set_Etype            (Universal_Fixed, Universal_Fixed);
        Set_Scope            (Universal_Fixed, Standard_Standard);
        Init_Size            (Universal_Fixed, Standard_Long_Long_Integer_Size);
!       Set_Elem_Alignment   (Universal_Fixed);
        Set_Size_Known_At_Compile_Time
                             (Universal_Fixed);
  
*************** package body CStand is
*** 1038,1044 ****
              Delta_Val := UR_From_Components (UI_From_Int (20), Uint_3, 10);
  
           --  In standard 64-bit mode, the size is 64-bits and the delta and
!          --  amll values are set to nanoseconds (1.0**(10.0**(-9))
  
           else
              Dlo := Intval (Type_Low_Bound (Standard_Integer_64));
--- 1181,1187 ----
              Delta_Val := UR_From_Components (UI_From_Int (20), Uint_3, 10);
  
           --  In standard 64-bit mode, the size is 64-bits and the delta and
!          --  small values are set to nanoseconds (1.0**(10.0**(-9))
  
           else
              Dlo := Intval (Type_Low_Bound (Standard_Integer_64));
*************** package body CStand is
*** 1066,1072 ****
              Init_Size (Standard_Duration, 64);
           end if;
  
!          Set_Prim_Alignment (Standard_Duration);
           Set_Delta_Value    (Standard_Duration, Delta_Val);
           Set_Small_Value    (Standard_Duration, Delta_Val);
           Set_Scalar_Range   (Standard_Duration,
--- 1209,1215 ----
              Init_Size (Standard_Duration, 64);
           end if;
  
!          Set_Elem_Alignment (Standard_Duration);
           Set_Delta_Value    (Standard_Duration, Delta_Val);
           Set_Small_Value    (Standard_Duration, Delta_Val);
           Set_Scalar_Range   (Standard_Duration,
*************** package body CStand is
*** 1098,1103 ****
--- 1241,1253 ----
        --  Build standard exception type. Note that the type name here is
        --  actually used in the generated code, so it must be set correctly
  
+       --  ??? Also note that the Import_Code component is now declared
+       --  as a System.Standard_Library.Exception_Code to enforce run-time
+       --  library implementation consistency. It's too early here to resort
+       --  to rtsfind to get the proper node for that type, so we use the
+       --  closest possible available type node at hand instead. We should
+       --  probably be fixing this up at some point.
+ 
        Standard_Exception_Type := New_Standard_Entity;
        Set_Ekind       (Standard_Exception_Type, E_Record_Type);
        Set_Etype       (Standard_Exception_Type, Standard_Exception_Type);
*************** package body CStand is
*** 1118,1124 ****
                                                               "Full_Name");
        Make_Component  (Standard_Exception_Type, Standard_A_Char,
                                                              "HTable_Ptr");
!       Make_Component  (Standard_Exception_Type, Standard_Integer,
                                                            "Import_Code");
        Make_Component  (Standard_Exception_Type, Standard_A_Char,
                                                              "Raise_Hook");
--- 1268,1274 ----
                                                               "Full_Name");
        Make_Component  (Standard_Exception_Type, Standard_A_Char,
                                                              "HTable_Ptr");
!       Make_Component  (Standard_Exception_Type, Standard_Unsigned,
                                                            "Import_Code");
        Make_Component  (Standard_Exception_Type, Standard_A_Char,
                                                              "Raise_Hook");
*************** package body CStand is
*** 1168,1176 ****
        Build_Exception (S_Tasking_Error);
  
        --  Numeric_Error is a normal exception in Ada 83, but in Ada 95
!       --  it is a renaming of Constraint_Error
  
!       if Ada_83 then
           Build_Exception (S_Numeric_Error);
  
        else
--- 1318,1326 ----
        Build_Exception (S_Tasking_Error);
  
        --  Numeric_Error is a normal exception in Ada 83, but in Ada 95
!       --  it is a renaming of Constraint_Error. Is this test too early???
  
!       if Ada_Version = Ada_83 then
           Build_Exception (S_Numeric_Error);
  
        else
*************** package body CStand is
*** 1504,1510 ****
              Write_Str (" .. ");
              Write_Str (IEEES_Last'Universal_Literal_String);
  
- 
           elsif Digs = IEEEL_Digits then
              Write_Str (IEEEL_First'Universal_Literal_String);
              Write_Str (" .. ");
--- 1654,1659 ----
*************** package body CStand is
*** 1649,1654 ****
--- 1798,1809 ----
        P ("   --  See RM A.1(36) for details of this type");
        Write_Eol;
  
+       P ("   type Wide_Wide_Character is (...)");
+       Write_Str ("   for Wide_Character'Size use ");
+       Write_Int (Standard_Wide_Wide_Character_Size);
+       P (";");
+       P ("   --  See RM A.1(36) for details of this type");
+ 
        P ("   type String is array (Positive range <>) of Character;");
        P ("   pragma Pack (String);");
        Write_Eol;
*************** package body CStand is
*** 1658,1663 ****
--- 1813,1823 ----
        P ("   pragma Pack (Wide_String);");
        Write_Eol;
  
+       P ("   type Wide_Wide_String is array (Positive range <>)" &
+          "  of Wide_Wide_Character;");
+       P ("   pragma Pack (Wide_Wide_String);");
+       Write_Eol;
+ 
        --  Here it's OK to use the Duration type of the host compiler since
        --  the implementation of Duration in GNAT is target independent.
  
diff -Nrcpad gcc-3.4.3/gcc/ada/cuintp.c gcc-4.0.0/gcc/ada/cuintp.c
*** gcc-3.4.3/gcc/ada/cuintp.c	Tue Nov  4 12:51:45 2003
--- gcc-4.0.0/gcc/ada/cuintp.c	Mon Oct  4 14:56:02 2004
***************
*** 50,60 ****
     For efficiency, this method is used only for integer values larger than the
     constant Uint_Bias.  If a Uint is less than this constant, then it contains
     the integer value itself.  The origin of the Uints_Ptr table is adjusted so
!    that a Uint value of Uint_Bias indexes the first element.  */
  
! /* Similarly to UI_To_Int, but return a GCC INTEGER_CST.  Overflow is tested
!    by the constant-folding used to build the node.  TYPE is the GCC type of the
!    resulting node.  */
  
  tree
  UI_To_gnu (Uint Input, tree type)
--- 50,73 ----
     For efficiency, this method is used only for integer values larger than the
     constant Uint_Bias.  If a Uint is less than this constant, then it contains
     the integer value itself.  The origin of the Uints_Ptr table is adjusted so
!    that a Uint value of Uint_Bias indexes the first element.
  
!    First define a utility function that operates like build_int_cst for
!    integral types and does a conversion to floating-point for real types.  */
! 
! static tree
! build_cst_from_int (tree type, HOST_WIDE_INT low)
! {
!   if (TREE_CODE (type) == REAL_TYPE)
!     return convert (type, build_int_cst (NULL_TREE, low));
!   else
!     return force_fit_type (build_int_cst (type, low), false, false, false);
! }
! 
! /* Similar to UI_To_Int, but return a GCC INTEGER_CST or REAL_CST node,
!    depending on whether TYPE is an integral or real type.  Overflow is tested
!    by the constant-folding used to build the node.  TYPE is the GCC type of
!    the resulting node.  */
  
  tree
  UI_To_gnu (Uint Input, tree type)
*************** UI_To_gnu (Uint Input, tree type)
*** 62,99 ****
    tree gnu_ret;
  
    if (Input <= Uint_Direct_Last)
!     gnu_ret = convert (type, build_int_2 (Input - Uint_Direct_Bias,
! 					  Input < Uint_Direct_Bias ? -1 : 0));
    else
      {
!       Int Idx =    Uints_Ptr[Input].Loc;
        Pos Length = Uints_Ptr[Input].Length;
        Int First = Udigits_Ptr[Idx];
        /* Do computations in integer type or TYPE whichever is wider, then
  	 convert later.  This avoid overflow if type is short integer.  */
        tree comp_type
! 	= (TYPE_PRECISION (type) >= TYPE_PRECISION (integer_type_node)
  	   ? type : integer_type_node);
!       tree gnu_base = convert (comp_type, build_int_2 (Base, 0));
! 
!       if (Length <= 0)
! 	gigi_abort (601);
  
!       gnu_ret = convert (comp_type, build_int_2 (First, First < 0 ? -1 : 0));
        if (First < 0)
  	for (Idx++, Length--; Length; Idx++, Length--)
! 	  gnu_ret = fold (build (MINUS_EXPR, comp_type,
! 				 fold (build (MULT_EXPR, comp_type,
! 					      gnu_ret, gnu_base)),
! 				 convert (comp_type,
! 					  build_int_2 (Udigits_Ptr[Idx], 0))));
        else
  	for (Idx++, Length--; Length; Idx++, Length--)
! 	  gnu_ret = fold (build (PLUS_EXPR, comp_type,
! 				 fold (build (MULT_EXPR, comp_type,
! 					      gnu_ret, gnu_base)),
! 				 convert (comp_type,
! 					  build_int_2 (Udigits_Ptr[Idx], 0))));
      }
  
    gnu_ret = convert (type, gnu_ret);
--- 75,110 ----
    tree gnu_ret;
  
    if (Input <= Uint_Direct_Last)
!     gnu_ret = build_cst_from_int (type, Input - Uint_Direct_Bias);
    else
      {
!       Int Idx = Uints_Ptr[Input].Loc;
        Pos Length = Uints_Ptr[Input].Length;
        Int First = Udigits_Ptr[Idx];
        /* Do computations in integer type or TYPE whichever is wider, then
  	 convert later.  This avoid overflow if type is short integer.  */
        tree comp_type
! 	= ((TREE_CODE (type) == REAL_TYPE
! 	    || TYPE_PRECISION (type) >= TYPE_PRECISION (integer_type_node))
  	   ? type : integer_type_node);
!       tree gnu_base = build_cst_from_int (comp_type, Base);
  
!       gcc_assert (Length > 0);
!       gnu_ret = build_cst_from_int (comp_type, First);
        if (First < 0)
  	for (Idx++, Length--; Length; Idx++, Length--)
! 	  gnu_ret = fold (build2 (MINUS_EXPR, comp_type,
! 				  fold (build2 (MULT_EXPR, comp_type,
! 						gnu_ret, gnu_base)),
! 				  build_cst_from_int (comp_type,
! 						      Udigits_Ptr[Idx])));
        else
  	for (Idx++, Length--; Length; Idx++, Length--)
! 	  gnu_ret = fold (build2 (PLUS_EXPR, comp_type,
! 				  fold (build2 (MULT_EXPR, comp_type,
! 						gnu_ret, gnu_base)),
! 				  build_cst_from_int (comp_type,
! 						      Udigits_Ptr[Idx])));
      }
  
    gnu_ret = convert (type, gnu_ret);
diff -Nrcpad gcc-3.4.3/gcc/ada/debug.adb gcc-4.0.0/gcc/ada/debug.adb
*** gcc-3.4.3/gcc/ada/debug.adb	Mon Nov 10 17:29:58 2003
--- gcc-4.0.0/gcc/ada/debug.adb	Thu Feb 10 13:57:00 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Debug is
*** 120,127 ****
     --  d.y
     --  d.z
  
- 
- 
     --  d1   Error msgs have node numbers where possible
     --  d2   Eliminate error flags in verbose form error messages
     --  d3   Dump bad node in Comperr on an abort
--- 120,125 ----
*************** package body Debug is
*** 142,148 ****
     --  df
     --  dg
     --  dh
!    --  di
     --  dj
     --  dk
     --  dl
--- 140,146 ----
     --  df
     --  dg
     --  dh
!    --  di  Ignore_Errors mode for reading ali files
     --  dj
     --  dk
     --  dl
*************** package body Debug is
*** 345,351 ****
     --  dA   Forces output of representation information, including full
     --       information for all internal type and object entities, as well
     --       as all user defined type and object entities including private
!    --       and incomplete types.
  
     --  dB   Output debug encodings for types and variants. See Exp_Dbug for
     --       exact form of the generated output.
--- 343,350 ----
     --  dA   Forces output of representation information, including full
     --       information for all internal type and object entities, as well
     --       as all user defined type and object entities including private
!    --       and incomplete types. This debug switch also automatically sets
!    --       the equivalent of -gnatR3m.
  
     --  dB   Output debug encodings for types and variants. See Exp_Dbug for
     --       exact form of the generated output.
*************** package body Debug is
*** 470,480 ****
     --       testing high integrity mode.
  
     --  d.x  No exception handlers in generated code. This causes exception
!    --       handles to be eliminated from the generated code. They are still
     --       fully compiled and analyzed, they just get eliminated from the
     --       code generation step.
  
- 
     --  d1   Error messages have node numbers where possible. Normally error
     --       messages have only source locations. This option is useful when
     --       debugging errors caused by expanded code, where the source location
--- 469,478 ----
     --       testing high integrity mode.
  
     --  d.x  No exception handlers in generated code. This causes exception
!    --       handlers to be eliminated from the generated code. They are still
     --       fully compiled and analyzed, they just get eliminated from the
     --       code generation step.
  
     --  d1   Error messages have node numbers where possible. Normally error
     --       messages have only source locations. This option is useful when
     --       debugging errors caused by expanded code, where the source location
*************** package body Debug is
*** 528,533 ****
--- 526,537 ----
     --      dependencies) except that internal units are included in the
     --      listing.
  
+    --  di  Normally gnatbind calls Read_Ali with Ignore_Errors set to
+    --      False, since the binder really needs correct version ALI
+    --      files to do its job. This debug flag causes Ignore_Errors
+    --      mode to be set for the binder (and is particularly useful
+    --      for testing ignore errors mode).
+ 
     --  dn  List details of manipulation of Num_Pred values during execution of
     --      the algorithm used to determine a correct order of elaboration. This
     --      is useful in diagnosing any problems in its behavior.
diff -Nrcpad gcc-3.4.3/gcc/ada/decl.c gcc-4.0.0/gcc/ada/decl.c
*** gcc-3.4.3/gcc/ada/decl.c	Thu Jan 15 17:24:16 2004
--- gcc-4.0.0/gcc/ada/decl.c	Thu Mar 17 19:53:06 2005
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *          Copyright (C) 1992-2004, Free Software Foundation, Inc.         *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *          Copyright (C) 1992-2005, Free Software Foundation, Inc.         *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
***************
*** 34,39 ****
--- 34,40 ----
  #include "convert.h"
  #include "ggc.h"
  #include "obstack.h"
+ #include "target.h"
  
  #include "ada.h"
  #include "types.h"
***************
*** 51,59 ****
  #include "ada-tree.h"
  #include "gigi.h"
  
- /* Setting this to 1 suppresses hashing of types.  */
- extern int debug_no_type_hash;
- 
  /* Provide default values for the macros controlling stack checking.
     This is copied from GCC's expr.h.  */
  
--- 52,57 ----
*************** static struct incomplete
*** 82,109 ****
    Entity_Id full_type;
  } *defer_incomplete_list = 0;
  
! static tree substitution_list (Entity_Id, Entity_Id, tree, int);
! static int allocatable_size_p (tree, int);
! static struct attrib *build_attr_list (Entity_Id);
! static tree elaborate_expression (Node_Id, Entity_Id, tree, int, int, int);
! static int is_variable_size (tree);
! static tree elaborate_expression_1 (Node_Id, Entity_Id, tree, tree, int, int);
  static tree make_packable_type (tree);
! static tree maybe_pad_type (tree, tree, unsigned int, Entity_Id, const char *,
!                             int, int, int);
! static tree gnat_to_gnu_field (Entity_Id, tree, int, int);
! static void components_to_record (tree, Node_Id, tree, int, int, tree *,
!                                   int, int);
  static int compare_field_bitpos (const PTR, const PTR);
  static Uint annotate_value (tree);
  static void annotate_rep (Entity_Id, tree);
  static tree compute_field_positions (tree, tree, tree, tree, unsigned int);
! static tree validate_size (Uint, tree, Entity_Id, enum tree_code, int, int);
  static void set_rm_size (Uint, tree, Entity_Id);
! static tree make_type_from_size (tree, tree, int);
  static unsigned int validate_alignment (Uint, Entity_Id, unsigned int);
! static void check_ok_for_atomic (tree, Entity_Id, int);
! 
  /* Given GNAT_ENTITY, an entity in the incoming GNAT tree, return a
     GCC type corresponding to that entity.  GNAT_ENTITY is assumed to
     refer to an Ada type.  */
--- 80,108 ----
    Entity_Id full_type;
  } *defer_incomplete_list = 0;
  
! static void copy_alias_set (tree, tree);
! static tree substitution_list (Entity_Id, Entity_Id, tree, bool);
! static bool allocatable_size_p (tree, bool);
! static void prepend_attributes (Entity_Id, struct attrib **);
! static tree elaborate_expression (Node_Id, Entity_Id, tree, bool, bool, bool);
! static bool is_variable_size (tree);
! static tree elaborate_expression_1 (Node_Id, Entity_Id, tree, tree,
! 				    bool, bool);
  static tree make_packable_type (tree);
! static tree gnat_to_gnu_field (Entity_Id, tree, int, bool);
! static void components_to_record (tree, Node_Id, tree, int, bool, tree *,
!                                   bool, bool);
  static int compare_field_bitpos (const PTR, const PTR);
  static Uint annotate_value (tree);
  static void annotate_rep (Entity_Id, tree);
  static tree compute_field_positions (tree, tree, tree, tree, unsigned int);
! static tree validate_size (Uint, tree, Entity_Id, enum tree_code, bool, bool);
  static void set_rm_size (Uint, tree, Entity_Id);
! static tree make_type_from_size (tree, tree, bool);
  static unsigned int validate_alignment (Uint, Entity_Id, unsigned int);
! static void check_ok_for_atomic (tree, Entity_Id, bool);
! static int  compatible_signatures_p (tree ftype1, tree ftype2);
! 
  /* Given GNAT_ENTITY, an entity in the incoming GNAT tree, return a
     GCC type corresponding to that entity.  GNAT_ENTITY is assumed to
     refer to an Ada type.  */
*************** gnat_to_gnu_type (Entity_Id gnat_entity)
*** 113,123 ****
  {
    tree gnu_decl;
  
    /* Convert the ada entity type into a GCC TYPE_DECL node.  */
    gnu_decl = gnat_to_gnu_entity (gnat_entity, NULL_TREE, 0);
!   if (TREE_CODE (gnu_decl) != TYPE_DECL)
!     gigi_abort (101);
! 
    return TREE_TYPE (gnu_decl);
  }
  
--- 112,124 ----
  {
    tree gnu_decl;
  
+   /* The back end never attempts to annotate generic types */
+   if (Is_Generic_Type (gnat_entity) && type_annotate_only)
+      return void_type_node;
+ 
    /* Convert the ada entity type into a GCC TYPE_DECL node.  */
    gnu_decl = gnat_to_gnu_entity (gnat_entity, NULL_TREE, 0);
!   gcc_assert (TREE_CODE (gnu_decl) == TYPE_DECL);
    return TREE_TYPE (gnu_decl);
  }
  
*************** tree
*** 141,164 ****
  gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
  {
    tree gnu_entity_id;
!   tree gnu_type = 0;
    /* Contains the gnu XXXX_DECL tree node which is equivalent to the input
       GNAT tree. This node will be associated with the GNAT node by calling
       the save_gnu_tree routine at the end of the `switch' statement.  */
!   tree gnu_decl = 0;
!   /* Nonzero if we have already saved gnu_decl as a gnat association.  */
!   int saved = 0;
    /* Nonzero if we incremented defer_incomplete_level.  */
!   int this_deferred = 0;
    /* Nonzero if we incremented force_global.  */
!   int this_global = 0;
    /* Nonzero if we should check to see if elaborated during processing.  */
!   int maybe_present = 0;
    /* Nonzero if we made GNU_DECL and its type here.  */
!   int this_made_decl = 0;
!   struct attrib *attr_list = 0;
!   int debug_info_p = (Needs_Debug_Info (gnat_entity)
! 		      || debug_info_level == DINFO_LEVEL_VERBOSE);
    Entity_Kind kind = Ekind (gnat_entity);
    Entity_Id gnat_temp;
    unsigned int esize
--- 142,165 ----
  gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
  {
    tree gnu_entity_id;
!   tree gnu_type = NULL_TREE;
    /* Contains the gnu XXXX_DECL tree node which is equivalent to the input
       GNAT tree. This node will be associated with the GNAT node by calling
       the save_gnu_tree routine at the end of the `switch' statement.  */
!   tree gnu_decl = NULL_TREE;
!   /* true if we have already saved gnu_decl as a gnat association.  */
!   bool saved = false;
    /* Nonzero if we incremented defer_incomplete_level.  */
!   bool this_deferred = false;
    /* Nonzero if we incremented force_global.  */
!   bool this_global = false;
    /* Nonzero if we should check to see if elaborated during processing.  */
!   bool maybe_present = false;
    /* Nonzero if we made GNU_DECL and its type here.  */
!   bool this_made_decl = false;
!   struct attrib *attr_list = NULL;
!   bool debug_info_p = (Needs_Debug_Info (gnat_entity)
! 		       || debug_info_level == DINFO_LEVEL_VERBOSE);
    Entity_Kind kind = Ekind (gnat_entity);
    Entity_Id gnat_temp;
    unsigned int esize
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 171,177 ****
  	      : LONG_LONG_TYPE_SIZE)
         : LONG_LONG_TYPE_SIZE);
    tree gnu_size = 0;
!   int imported_p
      = ((Is_Imported (gnat_entity) && No (Address_Clause (gnat_entity)))
         || From_With_Type (gnat_entity));
    unsigned int align = 0;
--- 172,178 ----
  	      : LONG_LONG_TYPE_SIZE)
         : LONG_LONG_TYPE_SIZE);
    tree gnu_size = 0;
!   bool imported_p
      = ((Is_Imported (gnat_entity) && No (Address_Clause (gnat_entity)))
         || From_With_Type (gnat_entity));
    unsigned int align = 0;
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 179,193 ****
    /* Since a use of an Itype is a definition, process it as such if it
       is not in a with'ed unit. */
  
!   if (! definition && Is_Itype (gnat_entity)
!       && ! present_gnu_tree (gnat_entity)
        && In_Extended_Main_Code_Unit (gnat_entity))
      {
        /* Ensure that we are in a subprogram mentioned in the Scope
  	 chain of this entity, our current scope is global,
  	 or that we encountered a task or entry (where we can't currently
  	 accurately check scoping).  */
!       if (current_function_decl == 0
  	  || DECL_ELABORATION_PROC_P (current_function_decl))
  	{
  	  process_type (gnat_entity);
--- 180,194 ----
    /* Since a use of an Itype is a definition, process it as such if it
       is not in a with'ed unit. */
  
!   if (!definition && Is_Itype (gnat_entity)
!       && !present_gnu_tree (gnat_entity)
        && In_Extended_Main_Code_Unit (gnat_entity))
      {
        /* Ensure that we are in a subprogram mentioned in the Scope
  	 chain of this entity, our current scope is global,
  	 or that we encountered a task or entry (where we can't currently
  	 accurately check scoping).  */
!       if (!current_function_decl
  	  || DECL_ELABORATION_PROC_P (current_function_decl))
  	{
  	  process_type (gnat_entity);
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 221,235 ****
  	    }
  	}
  
!       /* gigi abort 122 means that the entity "gnat_entity" has an incorrect
!          scope, i.e. that its scope does not correspond to the subprogram
!          in which it is declared */
!       gigi_abort (122);
      }
  
    /* If this is entity 0, something went badly wrong.  */
!   if (gnat_entity == 0)
!     gigi_abort (102);
  
    /* If we've already processed this entity, return what we got last time.
       If we are defining the node, we should not have already processed it.
--- 222,235 ----
  	    }
  	}
  
!       /* This abort means the entity "gnat_entity" has an incorrect scope,
! 	 i.e. that its scope does not correspond to the subprogram in which
! 	 it is declared */
!       gcc_unreachable ();
      }
  
    /* If this is entity 0, something went badly wrong.  */
!   gcc_assert (Present (gnat_entity));
  
    /* If we've already processed this entity, return what we got last time.
       If we are defining the node, we should not have already processed it.
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 251,258 ****
  	  gnu_decl = gnat_to_gnu_entity (Full_View (gnat_entity),
  					 NULL_TREE, 0);
  
! 	  save_gnu_tree (gnat_entity, NULL_TREE, 0);
! 	  save_gnu_tree (gnat_entity, gnu_decl, 0);
  	}
  
        return gnu_decl;
--- 251,258 ----
  	  gnu_decl = gnat_to_gnu_entity (Full_View (gnat_entity),
  					 NULL_TREE, 0);
  
! 	  save_gnu_tree (gnat_entity, NULL_TREE, false);
! 	  save_gnu_tree (gnat_entity, gnu_decl, false);
  	}
  
        return gnu_decl;
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 260,323 ****
  
    /* If this is a numeric or enumeral type, or an access type, a nonzero
       Esize must be specified unless it was specified by the programmer.  */
!   if ((IN (kind, Numeric_Kind) || IN (kind, Enumeration_Kind)
!        || (IN (kind, Access_Kind)
! 	   && kind != E_Access_Protected_Subprogram_Type
! 	   && kind != E_Access_Subtype))
!       && Unknown_Esize (gnat_entity)
!       && ! Has_Size_Clause (gnat_entity))
!     gigi_abort (109);
  
    /* Likewise, RM_Size must be specified for all discrete and fixed-point
       types.  */
!   if (IN (kind, Discrete_Or_Fixed_Point_Kind)
!       && Unknown_RM_Size (gnat_entity))
!     gigi_abort (123);
  
    /* Get the name of the entity and set up the line number and filename of
       the original definition for use in any decl we make.  */
- 
    gnu_entity_id = get_entity_name (gnat_entity);
!   set_lineno (gnat_entity, 0);
  
    /* If we get here, it means we have not yet done anything with this
       entity.  If we are not defining it here, it must be external,
       otherwise we should have defined it already.  */
!   if (! definition && ! Is_Public (gnat_entity)
!       && ! type_annotate_only
!       && kind != E_Discriminant && kind != E_Component
!       && kind != E_Label
!       && ! (kind == E_Constant && Present (Full_View (gnat_entity)))
! #if 1
!       && !IN (kind, Type_Kind)
! #endif
!       )
!     gigi_abort (116);
  
    /* For cases when we are not defining (i.e., we are referencing from
       another compilation unit) Public entities, show we are at global level
!      for the purpose of computing sizes.  Don't do this for components or
       discriminants since the relevant test is whether or not the record is
!      being defined.  */
!   if (! definition && Is_Public (gnat_entity)
!       && ! Is_Statically_Allocated (gnat_entity)
!       && kind != E_Discriminant && kind != E_Component)
!     force_global++, this_global = 1;
  
!   /* Handle any attributes.  */
    if (Has_Gigi_Rep_Item (gnat_entity))
!     attr_list = build_attr_list (gnat_entity);
  
    switch (kind)
      {
      case E_Constant:
        /* If this is a use of a deferred constant, get its full
  	 declaration.  */
!       if (! definition && Present (Full_View (gnat_entity)))
  	{
  	  gnu_decl = gnat_to_gnu_entity (Full_View (gnat_entity),
  					 gnu_expr, definition);
! 	  saved = 1;
  	  break;
  	}
  
--- 260,326 ----
  
    /* If this is a numeric or enumeral type, or an access type, a nonzero
       Esize must be specified unless it was specified by the programmer.  */
!   gcc_assert (!Unknown_Esize (gnat_entity)
! 	      || Has_Size_Clause (gnat_entity)
! 	      || (!IN (kind, Numeric_Kind) && !IN (kind, Enumeration_Kind)
! 		  && (!IN (kind, Access_Kind)
! 		      || kind == E_Access_Protected_Subprogram_Type
! 		      || kind == E_Access_Subtype)));
  
    /* Likewise, RM_Size must be specified for all discrete and fixed-point
       types.  */
!   gcc_assert (!IN (kind, Discrete_Or_Fixed_Point_Kind)
! 	      || !Unknown_RM_Size (gnat_entity));
  
    /* Get the name of the entity and set up the line number and filename of
       the original definition for use in any decl we make.  */
    gnu_entity_id = get_entity_name (gnat_entity);
!   Sloc_to_locus (Sloc (gnat_entity), &input_location);
  
    /* If we get here, it means we have not yet done anything with this
       entity.  If we are not defining it here, it must be external,
       otherwise we should have defined it already.  */
!   gcc_assert (definition || Is_Public (gnat_entity) || type_annotate_only
! 	      || kind == E_Discriminant || kind == E_Component
! 	      || kind == E_Label
! 	      || (kind == E_Constant && Present (Full_View (gnat_entity)))
! 	      || IN (kind, Type_Kind));
  
    /* For cases when we are not defining (i.e., we are referencing from
       another compilation unit) Public entities, show we are at global level
!      for the purpose of computing scopes.  Don't do this for components or
       discriminants since the relevant test is whether or not the record is
!      being defined.  But do this for Imported functions or procedures in
!      all cases.  */
!   if ((!definition && Is_Public (gnat_entity)
!        && !Is_Statically_Allocated (gnat_entity)
!        && kind != E_Discriminant && kind != E_Component)
!       || (Is_Imported (gnat_entity)
! 	  && (kind == E_Function || kind == E_Procedure)))
!     force_global++, this_global = true;
  
!   /* Handle any attributes directly attached to the entity.  */
    if (Has_Gigi_Rep_Item (gnat_entity))
!     prepend_attributes (gnat_entity, &attr_list);
! 
!   /* Machine_Attributes on types are expected to be propagated to subtypes.
!      The corresponding Gigi_Rep_Items are only attached to the first subtype
!      though, so we handle the propagation here.  */
!   if (Is_Type (gnat_entity) && Base_Type (gnat_entity) != gnat_entity
!       && !Is_First_Subtype (gnat_entity)
!       && Has_Gigi_Rep_Item (First_Subtype (Base_Type (gnat_entity))))
!     prepend_attributes (First_Subtype (Base_Type (gnat_entity)), &attr_list);
  
    switch (kind)
      {
      case E_Constant:
        /* If this is a use of a deferred constant, get its full
  	 declaration.  */
!       if (!definition && Present (Full_View (gnat_entity)))
  	{
  	  gnu_decl = gnat_to_gnu_entity (Full_View (gnat_entity),
  					 gnu_expr, definition);
! 	  saved = true;
  	  break;
  	}
  
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 328,338 ****
           Do not retrieve the expression if it is an aggregate, because
           in complex instantiation contexts it may not be expanded  */
  
!       if (! definition
  	  && Present (Expression (Declaration_Node (gnat_entity)))
! 	  && ! No_Initialization (Declaration_Node (gnat_entity))
!           && Nkind (Expression   (Declaration_Node (gnat_entity)))
!            != N_Aggregate)
  	gnu_expr = gnat_to_gnu (Expression (Declaration_Node (gnat_entity)));
  
        /* Ignore deferred constant definitions; they are processed fully in the
--- 331,341 ----
           Do not retrieve the expression if it is an aggregate, because
           in complex instantiation contexts it may not be expanded  */
  
!       if (!definition
  	  && Present (Expression (Declaration_Node (gnat_entity)))
! 	  && !No_Initialization (Declaration_Node (gnat_entity))
!           && (Nkind (Expression   (Declaration_Node (gnat_entity)))
! 	      != N_Aggregate))
  	gnu_expr = gnat_to_gnu (Expression (Declaration_Node (gnat_entity)));
  
        /* Ignore deferred constant definitions; they are processed fully in the
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 342,395 ****
  	 not a deferred constant but a constant whose value is built
  	 manually.  */
  
!       if (definition && gnu_expr == 0
! 	  && ! No_Initialization (Declaration_Node (gnat_entity))
  	  && No (Renamed_Object (gnat_entity)))
  	{
  	  gnu_decl = error_mark_node;
! 	  saved = 1;
            break;
  	}
!       else if (! definition && IN (kind, Incomplete_Or_Private_Kind)
  	       && Present (Full_View (gnat_entity)))
  	{
  	  gnu_decl =  gnat_to_gnu_entity (Full_View (gnat_entity),
  					  NULL_TREE, 0);
! 	  saved = 1;
  	  break;
  	}
  
        goto object;
  
      case E_Exception:
!       /* If this is not a VMS exception, treat it as a normal object.
! 	 Otherwise, make an object at the specific address of character
! 	 type, point to it, and convert it to integer, and mask off
! 	 the lower 3 bits.  */
!       if (! Is_VMS_Exception (gnat_entity))
! 	goto object;
! 
!       /* Allocate the global object that we use to get the value of the
! 	 exception.  */
!       gnu_decl = create_var_decl (gnu_entity_id,
! 				  (Present (Interface_Name (gnat_entity))
! 				   ? create_concat_name (gnat_entity, 0)
! 				   : NULL_TREE),
! 				  char_type_node, NULL_TREE, 0, 0, 1, 1,
! 				  0);
! 
!       /* Now return the expression giving the desired value.  */
!       gnu_decl
! 	= build_binary_op (BIT_AND_EXPR, integer_type_node,
! 			   convert (integer_type_node,
! 				    build_unary_op (ADDR_EXPR, NULL_TREE,
! 						    gnu_decl)),
! 			   build_unary_op (NEGATE_EXPR, integer_type_node,
! 					   build_int_2 (7, 0)));
! 
!       save_gnu_tree (gnat_entity, gnu_decl, 1);
!       saved = 1;
!       break;
  
      case E_Discriminant:
      case E_Component:
--- 345,380 ----
  	 not a deferred constant but a constant whose value is built
  	 manually.  */
  
!       if (definition && !gnu_expr
! 	  && !No_Initialization (Declaration_Node (gnat_entity))
  	  && No (Renamed_Object (gnat_entity)))
  	{
  	  gnu_decl = error_mark_node;
! 	  saved = true;
            break;
  	}
!       else if (!definition && IN (kind, Incomplete_Or_Private_Kind)
  	       && Present (Full_View (gnat_entity)))
  	{
  	  gnu_decl =  gnat_to_gnu_entity (Full_View (gnat_entity),
  					  NULL_TREE, 0);
! 	  saved = true;
  	  break;
  	}
  
        goto object;
  
      case E_Exception:
!       /* We used to special case VMS exceptions here to directly map them to
! 	 their associated condition code.  Since this code had to be masked
! 	 dynamically to strip off the severity bits, this caused trouble in
! 	 the GCC/ZCX case because the "type" pointers we store in the tables
! 	 have to be static.  We now don't special case here anymore, and let
! 	 the regular processing take place, which leaves us with a regular
! 	 exception data object for VMS exceptions too.  The condition code
! 	 mapping is taken care of by the front end and the bitmasking by the
! 	 runtime library.   */
!       goto object;
  
      case E_Discriminant:
      case E_Component:
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 405,421 ****
  	   stored discriminant.  Also use Original_Record_Component
  	   if the record has a private extension.  */
  
! 	if ((Base_Type (gnat_record) == gnat_record
!              || Ekind (Scope (gnat_entity)) == E_Private_Subtype
! 	     || Ekind (Scope (gnat_entity)) == E_Record_Subtype_With_Private
! 	     || Ekind (Scope (gnat_entity)) == E_Record_Type_With_Private)
! 	    && Present (Original_Record_Component (gnat_entity))
  	    && Original_Record_Component (gnat_entity) != gnat_entity)
  	  {
  	    gnu_decl
  	      = gnat_to_gnu_entity (Original_Record_Component (gnat_entity),
  				    gnu_expr, definition);
! 	    saved = 1;
  	    break;
  	  }
  
--- 390,402 ----
  	   stored discriminant.  Also use Original_Record_Component
  	   if the record has a private extension.  */
  
! 	if (Present (Original_Record_Component (gnat_entity))
  	    && Original_Record_Component (gnat_entity) != gnat_entity)
  	  {
  	    gnu_decl
  	      = gnat_to_gnu_entity (Original_Record_Component (gnat_entity),
  				    gnu_expr, definition);
! 	    saved = true;
  	    break;
  	  }
  
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 431,444 ****
  	  {
  	    /* A tagged record has no explicit stored discriminants. */
  
! 	    if (First_Discriminant (gnat_record)
! 		!= First_Stored_Discriminant (gnat_record))
! 	      gigi_abort (119);
! 
  	    gnu_decl
  	      = gnat_to_gnu_entity (Corresponding_Discriminant (gnat_entity),
  				    gnu_expr, definition);
! 	    saved = 1;
  	    break;
  	  }
  
--- 412,423 ----
  	  {
  	    /* A tagged record has no explicit stored discriminants. */
  
! 	    gcc_assert (First_Discriminant (gnat_record)
! 		       == First_Stored_Discriminant (gnat_record));
  	    gnu_decl
  	      = gnat_to_gnu_entity (Corresponding_Discriminant (gnat_entity),
  				    gnu_expr, definition);
! 	    saved = true;
  	    break;
  	  }
  
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 452,463 ****
  	else if (Present (Corresponding_Discriminant (gnat_entity))
  		 && (First_Discriminant (gnat_record)
  		     != First_Stored_Discriminant (gnat_record)))
! 	  gigi_abort (120);
  
  	/* Otherwise, if we are not defining this and we have no GCC type
  	   for the containing record, make one for it.  Then we should
  	   have made our own equivalent.  */
! 	else if (! definition && ! present_gnu_tree (gnat_record))
  	  {
  	    /* ??? If this is in a record whose scope is a protected
  	       type and we have an Original_Record_Component, use it.
--- 431,442 ----
  	else if (Present (Corresponding_Discriminant (gnat_entity))
  		 && (First_Discriminant (gnat_record)
  		     != First_Stored_Discriminant (gnat_record)))
! 	  gcc_unreachable ();
  
  	/* Otherwise, if we are not defining this and we have no GCC type
  	   for the containing record, make one for it.  Then we should
  	   have made our own equivalent.  */
! 	else if (!definition && !present_gnu_tree (gnat_record))
  	  {
  	    /* ??? If this is in a record whose scope is a protected
  	       type and we have an Original_Record_Component, use it.
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 475,495 ****
  		  = gnat_to_gnu_entity (Original_Record_Component
  					(gnat_entity),
  					gnu_expr, definition);
! 		saved = 1;
  		break;
  	      }
  
  	    gnat_to_gnu_entity (Scope (gnat_entity), NULL_TREE, 0);
  	    gnu_decl = get_gnu_tree (gnat_entity);
! 	    saved = 1;
  	    break;
  	  }
  
- 	/* Here we have no GCC type and this is a reference rather than a
- 	   definition. This should never happen. Most likely the cause is a
- 	   reference before declaration in the gnat tree for gnat_entity.  */
  	else
! 	  gigi_abort (103);
        }
  
      case E_Loop_Parameter:
--- 454,474 ----
  		  = gnat_to_gnu_entity (Original_Record_Component
  					(gnat_entity),
  					gnu_expr, definition);
! 		saved = true;
  		break;
  	      }
  
  	    gnat_to_gnu_entity (Scope (gnat_entity), NULL_TREE, 0);
  	    gnu_decl = get_gnu_tree (gnat_entity);
! 	    saved = true;
  	    break;
  	  }
  
  	else
! 	  /* Here we have no GCC type and this is a reference rather than a
! 	     definition. This should never happen. Most likely the cause is a
! 	     reference before declaration in the gnat tree for gnat_entity.  */
! 	  gcc_unreachable ();
        }
  
      case E_Loop_Parameter:
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 499,518 ****
        /* Simple variables, loop variables, OUT parameters, and exceptions.  */
      object:
        {
! 	int used_by_ref = 0;
! 	int const_flag
  	  = ((kind == E_Constant || kind == E_Variable)
! 	     && ! Is_Statically_Allocated (gnat_entity)
  	     && Is_True_Constant (gnat_entity)
  	     && (((Nkind (Declaration_Node (gnat_entity))
  		   == N_Object_Declaration)
  		  && Present (Expression (Declaration_Node (gnat_entity))))
  		 || Present (Renamed_Object (gnat_entity))));
! 	int inner_const_flag = const_flag;
! 	int static_p = Is_Statically_Allocated (gnat_entity);
  	tree gnu_ext_name = NULL_TREE;
  
! 	if (Present (Renamed_Object (gnat_entity)) && ! definition)
  	  {
  	    if (kind == E_Exception)
  	      gnu_expr = gnat_to_gnu_entity (Renamed_Entity (gnat_entity),
--- 478,497 ----
        /* Simple variables, loop variables, OUT parameters, and exceptions.  */
      object:
        {
! 	bool used_by_ref = false;
! 	bool const_flag
  	  = ((kind == E_Constant || kind == E_Variable)
! 	     && !Is_Statically_Allocated (gnat_entity)
  	     && Is_True_Constant (gnat_entity)
  	     && (((Nkind (Declaration_Node (gnat_entity))
  		   == N_Object_Declaration)
  		  && Present (Expression (Declaration_Node (gnat_entity))))
  		 || Present (Renamed_Object (gnat_entity))));
! 	bool inner_const_flag = const_flag;
! 	bool static_p = Is_Statically_Allocated (gnat_entity);
  	tree gnu_ext_name = NULL_TREE;
  
! 	if (Present (Renamed_Object (gnat_entity)) && !definition)
  	  {
  	    if (kind == E_Exception)
  	      gnu_expr = gnat_to_gnu_entity (Renamed_Entity (gnat_entity),
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 541,550 ****
  	    || TYPE_IS_DUMMY_P (gnu_type)
  	    || TREE_CODE (gnu_type) == VOID_TYPE)
  	  {
! 	    if (type_annotate_only)
! 	      return error_mark_node;
! 	    else
! 	      gigi_abort (104);
  	  }
  
  	/* If we are defining the object, see if it has a Size value and
--- 520,540 ----
  	    || TYPE_IS_DUMMY_P (gnu_type)
  	    || TREE_CODE (gnu_type) == VOID_TYPE)
  	  {
! 	    gcc_assert (type_annotate_only);
! 	    return error_mark_node;
! 	  }
! 
! 	/* If an alignment is specified, use it if valid.   Note that
! 	   exceptions are objects but don't have alignments.  We must do this
! 	   before we validate the size, since the alignment can affect the
! 	   size.  */
! 	if (kind != E_Exception && Known_Alignment (gnat_entity))
! 	  {
! 	    gcc_assert (Present (Alignment (gnat_entity)));
! 	    align = validate_alignment (Alignment (gnat_entity), gnat_entity,
! 					TYPE_ALIGN (gnu_type));
! 	    gnu_type = maybe_pad_type (gnu_type, NULL_TREE, align,
! 				       gnat_entity, "PAD", 0, definition, 1);
  	  }
  
  	/* If we are defining the object, see if it has a Size value and
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 554,572 ****
  	   get the new type, if any.  */
  	if (definition)
  	  gnu_size = validate_size (Esize (gnat_entity), gnu_type,
! 				    gnat_entity, VAR_DECL, 0,
  				    Has_Size_Clause (gnat_entity));
  	else if (Has_Size_Clause (gnat_entity))
  	  gnu_size = UI_To_gnu (Esize (gnat_entity), bitsizetype);
  
! 	if (gnu_size != 0)
  	  {
  	    gnu_type
  	      = make_type_from_size (gnu_type, gnu_size,
  				     Has_Biased_Representation (gnat_entity));
  
  	    if (operand_equal_p (TYPE_SIZE (gnu_type), gnu_size, 0))
! 	      gnu_size = 0;
  	  }
  
  	/* If this object has self-referential size, it must be a record with
--- 544,562 ----
  	   get the new type, if any.  */
  	if (definition)
  	  gnu_size = validate_size (Esize (gnat_entity), gnu_type,
! 				    gnat_entity, VAR_DECL, false,
  				    Has_Size_Clause (gnat_entity));
  	else if (Has_Size_Clause (gnat_entity))
  	  gnu_size = UI_To_gnu (Esize (gnat_entity), bitsizetype);
  
! 	if (gnu_size)
  	  {
  	    gnu_type
  	      = make_type_from_size (gnu_type, gnu_size,
  				     Has_Biased_Representation (gnat_entity));
  
  	    if (operand_equal_p (TYPE_SIZE (gnu_type), gnu_size, 0))
! 	      gnu_size = NULL_TREE;
  	  }
  
  	/* If this object has self-referential size, it must be a record with
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 579,591 ****
  	if (No (Renamed_Object (gnat_entity))
  	    && CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_type)))
  	  {
! 	    if (gnu_expr != 0 && kind == E_Constant)
! 	      {
! 		gnu_size = TYPE_SIZE (TREE_TYPE (gnu_expr));
! 		if (CONTAINS_PLACEHOLDER_P (gnu_size))
! 		  gnu_size = build (WITH_RECORD_EXPR, bitsizetype,
! 				    gnu_size, gnu_expr);
! 	      }
  
  	    /* We may have no GNU_EXPR because No_Initialization is
  	       set even though there's an Expression.  */
--- 569,578 ----
  	if (No (Renamed_Object (gnat_entity))
  	    && CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_type)))
  	  {
! 	    if (gnu_expr && kind == E_Constant)
! 	      gnu_size
! 		= SUBSTITUTE_PLACEHOLDER_IN_EXPR
! 		  (TYPE_SIZE (TREE_TYPE (gnu_expr)), gnu_expr);
  
  	    /* We may have no GNU_EXPR because No_Initialization is
  	       set even though there's an Expression.  */
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 598,604 ****
  			     (Etype
  			      (Expression (Declaration_Node (gnat_entity)))));
  	    else
! 	      gnu_size = max_size (TYPE_SIZE (gnu_type), 1);
  	  }
  
  	/* If the size is zero bytes, make it one byte since some linkers have
--- 585,591 ----
  			     (Etype
  			      (Expression (Declaration_Node (gnat_entity)))));
  	    else
! 	      gnu_size = max_size (TYPE_SIZE (gnu_type), true);
  	  }
  
  	/* If the size is zero bytes, make it one byte since some linkers have
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 608,643 ****
  	   clause, as we would lose useful information on the view size
  	   (e.g. for null array slices) and we are not allocating the object
  	   here anyway.  */
! 	if (((gnu_size != 0 && integer_zerop (gnu_size))
! 	     || (TYPE_SIZE (gnu_type) != 0
! 		 && integer_zerop (TYPE_SIZE (gnu_type))))
! 	    && (! Is_Constr_Subt_For_UN_Aliased (Etype (gnat_entity))
! 		|| ! Is_Array_Type (Etype (gnat_entity)))
! 	    && ! Present (Renamed_Object (gnat_entity))
! 	    && ! Present (Address_Clause (gnat_entity)))
  	  gnu_size = bitsize_unit_node;
  
- 	/* If an alignment is specified, use it if valid.   Note that
- 	   exceptions are objects but don't have alignments.  */
- 	if (kind != E_Exception && Known_Alignment (gnat_entity))
- 	  {
- 	    if (No (Alignment (gnat_entity)))
- 	      gigi_abort (125);
- 
- 	    align
- 	      = validate_alignment (Alignment (gnat_entity), gnat_entity,
- 				    TYPE_ALIGN (gnu_type));
- 	  }
- 
  	/* If this is an atomic object with no specified size and alignment,
  	   but where the size of the type is a constant, set the alignment to
  	   the lowest power of two greater than the size, or to the
  	   biggest meaningful alignment, whichever is smaller.  */
  
! 	if (Is_Atomic (gnat_entity) && gnu_size == 0 && align == 0
  	    && TREE_CODE (TYPE_SIZE (gnu_type)) == INTEGER_CST)
  	  {
! 	    if (! host_integerp (TYPE_SIZE (gnu_type), 1)
  		|| 0 <= compare_tree_int (TYPE_SIZE (gnu_type),
  					  BIGGEST_ALIGNMENT))
  	      align = BIGGEST_ALIGNMENT;
--- 595,617 ----
  	   clause, as we would lose useful information on the view size
  	   (e.g. for null array slices) and we are not allocating the object
  	   here anyway.  */
! 	if (((gnu_size && integer_zerop (gnu_size))
! 	     || (TYPE_SIZE (gnu_type) && integer_zerop (TYPE_SIZE (gnu_type))))
! 	    && (!Is_Constr_Subt_For_UN_Aliased (Etype (gnat_entity))
! 		|| !Is_Array_Type (Etype (gnat_entity)))
! 	    && !Present (Renamed_Object (gnat_entity))
! 	    && !Present (Address_Clause (gnat_entity)))
  	  gnu_size = bitsize_unit_node;
  
  	/* If this is an atomic object with no specified size and alignment,
  	   but where the size of the type is a constant, set the alignment to
  	   the lowest power of two greater than the size, or to the
  	   biggest meaningful alignment, whichever is smaller.  */
  
! 	if (Is_Atomic (gnat_entity) && !gnu_size && align == 0
  	    && TREE_CODE (TYPE_SIZE (gnu_type)) == INTEGER_CST)
  	  {
! 	    if (!host_integerp (TYPE_SIZE (gnu_type), 1)
  		|| 0 <= compare_tree_int (TYPE_SIZE (gnu_type),
  					  BIGGEST_ALIGNMENT))
  	      align = BIGGEST_ALIGNMENT;
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 656,670 ****
  
  	if (Has_Atomic_Components (gnat_entity))
  	  {
! 	    tree gnu_inner
! 	      = (TREE_CODE (gnu_type) == ARRAY_TYPE
! 		 ? TREE_TYPE (gnu_type) : gnu_type);
  
  	    while (TREE_CODE (gnu_inner) == ARRAY_TYPE
  		   && TYPE_MULTI_ARRAY_P (gnu_inner))
  	      gnu_inner = TREE_TYPE (gnu_inner);
  
! 	    check_ok_for_atomic (gnu_inner, gnat_entity, 1);
  	  }
  
  	/* Now check if the type of the object allows atomic access.  Note
--- 630,643 ----
  
  	if (Has_Atomic_Components (gnat_entity))
  	  {
! 	    tree gnu_inner = (TREE_CODE (gnu_type) == ARRAY_TYPE
! 			      ? TREE_TYPE (gnu_type) : gnu_type);
  
  	    while (TREE_CODE (gnu_inner) == ARRAY_TYPE
  		   && TYPE_MULTI_ARRAY_P (gnu_inner))
  	      gnu_inner = TREE_TYPE (gnu_inner);
  
! 	    check_ok_for_atomic (gnu_inner, gnat_entity, true);
  	  }
  
  	/* Now check if the type of the object allows atomic access.  Note
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 674,686 ****
  	   this by always copying via an intermediate value, but it's not
  	   clear it's worth the effort.  */
  	if (Is_Atomic (gnat_entity))
! 	  check_ok_for_atomic (gnu_type, gnat_entity, 0);
  
  	/* If this is an aliased object with an unconstrained nominal subtype,
  	   make a type that includes the template.  */
  	if (Is_Constr_Subt_For_UN_Aliased (Etype (gnat_entity))
  	    && Is_Array_Type (Etype (gnat_entity))
! 	    && ! type_annotate_only)
  	{
  	  tree gnu_fat
  	    = TREE_TYPE (gnat_to_gnu_type (Base_Type (Etype (gnat_entity))));
--- 647,659 ----
  	   this by always copying via an intermediate value, but it's not
  	   clear it's worth the effort.  */
  	if (Is_Atomic (gnat_entity))
! 	  check_ok_for_atomic (gnu_type, gnat_entity, false);
  
  	/* If this is an aliased object with an unconstrained nominal subtype,
  	   make a type that includes the template.  */
  	if (Is_Constr_Subt_For_UN_Aliased (Etype (gnat_entity))
  	    && Is_Array_Type (Etype (gnat_entity))
! 	    && !type_annotate_only)
  	{
  	  tree gnu_fat
  	    = TREE_TYPE (gnat_to_gnu_type (Base_Type (Etype (gnat_entity))));
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 703,720 ****
  	   do not do it for Out parameters since that creates an
  	   size inconsistency with In parameters.  */
  	if (align == 0 && MINIMUM_ATOMIC_ALIGNMENT > TYPE_ALIGN (gnu_type)
! 	    && ! FLOAT_TYPE_P (gnu_type)
! 	    && ! const_flag && No (Renamed_Object (gnat_entity))
! 	    && ! imported_p && No (Address_Clause (gnat_entity))
  	    && kind != E_Out_Parameter
! 	    && (gnu_size != 0 ? TREE_CODE (gnu_size) == INTEGER_CST
  		: TREE_CODE (TYPE_SIZE (gnu_type)) == INTEGER_CST))
  	  align = MINIMUM_ATOMIC_ALIGNMENT;
  #endif
  
  	/* Make a new type with the desired size and alignment, if needed. */
! 	gnu_type = maybe_pad_type (gnu_type, gnu_size, align,
! 				   gnat_entity, "PAD", 0, definition, 1);
  
  	/* Make a volatile version of this object's type if we are to
  	   make the object volatile.  Note that 13.3(19) says that we
--- 676,693 ----
  	   do not do it for Out parameters since that creates an
  	   size inconsistency with In parameters.  */
  	if (align == 0 && MINIMUM_ATOMIC_ALIGNMENT > TYPE_ALIGN (gnu_type)
! 	    && !FLOAT_TYPE_P (gnu_type)
! 	    && !const_flag && No (Renamed_Object (gnat_entity))
! 	    && !imported_p && No (Address_Clause (gnat_entity))
  	    && kind != E_Out_Parameter
! 	    && (gnu_size ? TREE_CODE (gnu_size) == INTEGER_CST
  		: TREE_CODE (TYPE_SIZE (gnu_type)) == INTEGER_CST))
  	  align = MINIMUM_ATOMIC_ALIGNMENT;
  #endif
  
  	/* Make a new type with the desired size and alignment, if needed. */
! 	gnu_type = maybe_pad_type (gnu_type, gnu_size, align, gnat_entity,
! 				   "PAD", false, definition, true);
  
  	/* Make a volatile version of this object's type if we are to
  	   make the object volatile.  Note that 13.3(19) says that we
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 723,729 ****
  	     || Is_Exported (gnat_entity)
  	     || Is_Imported (gnat_entity)
  	     || Present (Address_Clause (gnat_entity)))
! 	    && ! TYPE_VOLATILE (gnu_type))
  	  gnu_type = build_qualified_type (gnu_type,
  					   (TYPE_QUALS (gnu_type)
  					    | TYPE_QUAL_VOLATILE));
--- 696,702 ----
  	     || Is_Exported (gnat_entity)
  	     || Is_Imported (gnat_entity)
  	     || Present (Address_Clause (gnat_entity)))
! 	    && !TYPE_VOLATILE (gnu_type))
  	  gnu_type = build_qualified_type (gnu_type,
  					   (TYPE_QUALS (gnu_type)
  					    | TYPE_QUAL_VOLATILE));
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 734,757 ****
  	   the former case, converting will generate unnecessary evaluations
  	   of the CONSTRUCTOR to compute the size and in the latter case, we
  	   want to only copy the actual data.  */
! 	if (gnu_expr != 0
  	    && TREE_CODE (gnu_type) != UNCONSTRAINED_ARRAY_TYPE
! 	    && ! CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_type))
! 	    && ! (TREE_CODE (gnu_type) == RECORD_TYPE
! 		  && TYPE_IS_PADDING_P (gnu_type)
! 		  && (CONTAINS_PLACEHOLDER_P
! 		      (TYPE_SIZE (TREE_TYPE (TYPE_FIELDS (gnu_type)))))))
  	  gnu_expr = convert (gnu_type, gnu_expr);
  
! 	/* See if this is a renaming.  If this is a constant renaming,
! 	   treat it as a normal variable whose initial value is what
! 	   is being renamed.  We cannot do this if the type is
! 	   unconstrained or class-wide.
  
  	   Otherwise, if what we are renaming is a reference, we can simply
! 	   return a stabilized version of that reference, after forcing
! 	   any SAVE_EXPRs to be evaluated.  But, if this is at global level,
! 	   we can only do this if we know no SAVE_EXPRs will be made.
  	   Otherwise, make this into a constant pointer to the object we are
  	   to rename.  */
  
--- 707,731 ----
  	   the former case, converting will generate unnecessary evaluations
  	   of the CONSTRUCTOR to compute the size and in the latter case, we
  	   want to only copy the actual data.  */
! 	if (gnu_expr
  	    && TREE_CODE (gnu_type) != UNCONSTRAINED_ARRAY_TYPE
! 	    && !CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_type))
! 	    && !(TREE_CODE (gnu_type) == RECORD_TYPE
! 		 && TYPE_IS_PADDING_P (gnu_type)
! 		 && (CONTAINS_PLACEHOLDER_P
! 		     (TYPE_SIZE (TREE_TYPE (TYPE_FIELDS (gnu_type)))))))
  	  gnu_expr = convert (gnu_type, gnu_expr);
  
! 	/* See if this is a renaming.  If this is a constant renaming, treat
! 	   it as a normal variable whose initial value is what is being
! 	   renamed.  We cannot do this if the type is unconstrained or
! 	   class-wide.
  
  	   Otherwise, if what we are renaming is a reference, we can simply
! 	   return a stabilized version of that reference, after forcing any
! 	   SAVE_EXPRs to be evaluated.  But, if this is at global level, we
! 	   can only do this if we know no SAVE_EXPRs will be made.
! 
  	   Otherwise, make this into a constant pointer to the object we are
  	   to rename.  */
  
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 770,808 ****
  	      }
  
  	    if (const_flag
  		&& TREE_CODE (gnu_type) != UNCONSTRAINED_ARRAY_TYPE
  		&& TYPE_MODE (gnu_type) != BLKmode
  		&& Ekind (Etype (gnat_entity)) != E_Class_Wide_Type
                  && !Is_Array_Type (Etype (gnat_entity)))
  	      ;
  
! 	    /* If this is a declaration or reference, we can just use that
! 	       declaration or reference as this entity.  */
! 	    else if ((DECL_P (gnu_expr)
! 		      || TREE_CODE_CLASS (TREE_CODE (gnu_expr)) == 'r')
! 		     && ! Materialize_Entity (gnat_entity)
! 		     && (! global_bindings_p ()
  			 || (staticp (gnu_expr)
! 			     && ! TREE_SIDE_EFFECTS (gnu_expr))))
  	      {
! 		set_lineno (gnat_entity, ! global_bindings_p ());
! 		gnu_decl = gnat_stabilize_reference (gnu_expr, 1);
! 		save_gnu_tree (gnat_entity, gnu_decl, 1);
! 		saved = 1;
! 
! 		if (! global_bindings_p ())
! 		  expand_expr_stmt (build1 (CONVERT_EXPR, void_type_node,
! 					    gnu_decl));
  		break;
  	      }
  	    else
  	      {
  		inner_const_flag = TREE_READONLY (gnu_expr);
! 		const_flag = 1;
  		gnu_type = build_reference_type (gnu_type);
  		gnu_expr = build_unary_op (ADDR_EXPR, gnu_type, gnu_expr);
! 		gnu_size = 0;
! 		used_by_ref = 1;
  	      }
  	  }
  
--- 744,808 ----
  	      }
  
  	    if (const_flag
+ 		&& !TREE_SIDE_EFFECTS (gnu_expr)
  		&& TREE_CODE (gnu_type) != UNCONSTRAINED_ARRAY_TYPE
  		&& TYPE_MODE (gnu_type) != BLKmode
  		&& Ekind (Etype (gnat_entity)) != E_Class_Wide_Type
                  && !Is_Array_Type (Etype (gnat_entity)))
  	      ;
  
! 	    /* If this is a declaration or reference that we can stabilize,
! 	       just use that declaration or reference as this entity unless
! 	       the latter has to be materialized.  */
! 	    else if ((DECL_P (gnu_expr) || REFERENCE_CLASS_P (gnu_expr))
! 		     && !Materialize_Entity (gnat_entity)
! 		     && (!global_bindings_p ()
  			 || (staticp (gnu_expr)
! 			     && !TREE_SIDE_EFFECTS (gnu_expr))))
  	      {
! 		gnu_decl = gnat_stabilize_reference (gnu_expr, true);
! 		save_gnu_tree (gnat_entity, gnu_decl, true);
! 		saved = true;
  		break;
  	      }
+ 
+ 	    /* Otherwise, make this into a constant pointer to the object we
+ 	       are to rename.
+ 
+ 	       Stabilize it if we are not at the global level since in this
+ 	       case the renaming evaluation may directly dereference the
+ 	       initial value we make here instead of the pointer we will
+ 	       assign it to.  We don't want variables in the expression to be
+ 	       evaluated every time the renaming is used, since the value of
+ 	       these variables may change in between.
+ 
+ 	       If we are at the global level and the value is not constant,
+ 	       create_var_decl generates a mere elaboration assignment and
+ 	       does not attach the initial expression to the declaration.
+ 	       There is no possible direct initial-value dereference then.  */
  	    else
  	      {
  		inner_const_flag = TREE_READONLY (gnu_expr);
! 		const_flag = true;
  		gnu_type = build_reference_type (gnu_type);
  		gnu_expr = build_unary_op (ADDR_EXPR, gnu_type, gnu_expr);
! 
! 		if (!global_bindings_p ())
! 		  {
! 		    bool has_side_effects = TREE_SIDE_EFFECTS (gnu_expr);
! 
! 		    gnu_expr = gnat_stabilize_reference (gnu_expr, true);
! 
! 		    /* If the original expression had side effects, put a
! 		       SAVE_EXPR around this whole thing.  */
! 		    if (has_side_effects)
! 		      gnu_expr = save_expr (gnu_expr);
! 
! 		    add_stmt (gnu_expr);
! 		  }
! 
! 		gnu_size = NULL_TREE;
! 		used_by_ref = true;
  	      }
  	  }
  
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 820,826 ****
  		            == RECORD_TYPE
  			 && TYPE_CONTAINS_TEMPLATE_P
  		            (TREE_TYPE (TYPE_FIELDS (gnu_type)))))
! 		 && gnu_expr == 0)
  	  {
  	    tree template_field
  	      = TYPE_IS_PADDING_P (gnu_type)
--- 820,826 ----
  		            == RECORD_TYPE
  			 && TYPE_CONTAINS_TEMPLATE_P
  		            (TREE_TYPE (TYPE_FIELDS (gnu_type)))))
! 		 && !gnu_expr)
  	  {
  	    tree template_field
  	      = TYPE_IS_PADDING_P (gnu_type)
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 843,850 ****
             imported.  */
  	if (definition
  	    && (POINTER_TYPE_P (gnu_type) || TYPE_FAT_POINTER_P (gnu_type))
!             && !Is_Imported (gnat_entity)
! 	    && gnu_expr == 0)
  	  gnu_expr = integer_zero_node;
  
  	/* If we are defining the object and it has an Address clause we must
--- 843,849 ----
             imported.  */
  	if (definition
  	    && (POINTER_TYPE_P (gnu_type) || TYPE_FAT_POINTER_P (gnu_type))
!             && !Is_Imported (gnat_entity) && !gnu_expr)
  	  gnu_expr = integer_zero_node;
  
  	/* If we are defining the object and it has an Address clause we must
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 859,901 ****
  	      = (present_gnu_tree (gnat_entity) ? get_gnu_tree (gnat_entity)
  		: gnat_to_gnu (Expression (Address_Clause (gnat_entity))));
  
! 	    save_gnu_tree (gnat_entity, NULL_TREE, 0);
  
  	    /* Ignore the size.  It's either meaningless or was handled
  	       above.  */
! 	    gnu_size = 0;
  	    gnu_type = build_reference_type (gnu_type);
  	    gnu_address = convert (gnu_type, gnu_address);
! 	    used_by_ref = 1;
! 	    const_flag = ! Is_Public (gnat_entity);
  
  	    /* If we don't have an initializing expression for the underlying
  	       variable, the initializing expression for the pointer is the
  	       specified address.  Otherwise, we have to make a COMPOUND_EXPR
  	       to assign both the address and the initial value.  */
! 	    if (gnu_expr == 0)
  	      gnu_expr = gnu_address;
  	    else
  	      gnu_expr
! 		= build (COMPOUND_EXPR, gnu_type,
! 			 build_binary_op
! 			 (MODIFY_EXPR, NULL_TREE,
! 			  build_unary_op (INDIRECT_REF, NULL_TREE,
! 					  gnu_address),
! 			  gnu_expr),
! 			 gnu_address);
  	  }
  
  	/* If it has an address clause and we are not defining it, mark it
  	   as an indirect object.  Likewise for Stdcall objects that are
  	   imported.  */
! 	if ((! definition && Present (Address_Clause (gnat_entity)))
  	    || (Is_Imported (gnat_entity)
  		&& Convention (gnat_entity) == Convention_Stdcall))
  	  {
  	    gnu_type = build_reference_type (gnu_type);
! 	    gnu_size = 0;
! 	    used_by_ref = 1;
  	  }
  
  	/* If we are at top level and this object is of variable size,
--- 858,900 ----
  	      = (present_gnu_tree (gnat_entity) ? get_gnu_tree (gnat_entity)
  		: gnat_to_gnu (Expression (Address_Clause (gnat_entity))));
  
! 	    save_gnu_tree (gnat_entity, NULL_TREE, false);
  
  	    /* Ignore the size.  It's either meaningless or was handled
  	       above.  */
! 	    gnu_size = NULL_TREE;
  	    gnu_type = build_reference_type (gnu_type);
  	    gnu_address = convert (gnu_type, gnu_address);
! 	    used_by_ref = true;
! 	    const_flag = !Is_Public (gnat_entity);
  
  	    /* If we don't have an initializing expression for the underlying
  	       variable, the initializing expression for the pointer is the
  	       specified address.  Otherwise, we have to make a COMPOUND_EXPR
  	       to assign both the address and the initial value.  */
! 	    if (!gnu_expr)
  	      gnu_expr = gnu_address;
  	    else
  	      gnu_expr
! 		= build2 (COMPOUND_EXPR, gnu_type,
! 			  build_binary_op
! 			  (MODIFY_EXPR, NULL_TREE,
! 			   build_unary_op (INDIRECT_REF, NULL_TREE,
! 					   gnu_address),
! 			   gnu_expr),
! 			  gnu_address);
  	  }
  
  	/* If it has an address clause and we are not defining it, mark it
  	   as an indirect object.  Likewise for Stdcall objects that are
  	   imported.  */
! 	if ((!definition && Present (Address_Clause (gnat_entity)))
  	    || (Is_Imported (gnat_entity)
  		&& Convention (gnat_entity) == Convention_Stdcall))
  	  {
  	    gnu_type = build_reference_type (gnu_type);
! 	    gnu_size = NULL_TREE;
! 	    used_by_ref = true;
  	  }
  
  	/* If we are at top level and this object is of variable size,
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 909,932 ****
  	   Storage_Error gets raised.  Note that we will never free
  	   such memory, so we presume it never will get allocated.  */
  
! 	if (! allocatable_size_p (TYPE_SIZE_UNIT (gnu_type),
! 				  global_bindings_p () || ! definition
! 				  || static_p)
! 	    || (gnu_size != 0
  		&& ! allocatable_size_p (gnu_size,
! 					 global_bindings_p () || ! definition
  					 || static_p)))
  	  {
  	    gnu_type = build_reference_type (gnu_type);
! 	    gnu_size = 0;
! 	    used_by_ref = 1;
! 	    const_flag = 1;
  
! 	    /* Get the data part of GNU_EXPR in case this was a
! 	       aliased object whose nominal subtype is unconstrained.
! 	       In that case the pointer above will be a thin pointer and
! 	       build_allocator will automatically make the template and
! 	       constructor already made above.  */
  
  	    if (definition)
  	      {
--- 908,934 ----
  	   Storage_Error gets raised.  Note that we will never free
  	   such memory, so we presume it never will get allocated.  */
  
! 	if (!allocatable_size_p (TYPE_SIZE_UNIT (gnu_type),
! 				 global_bindings_p () || !definition
! 				 || static_p)
! 	    || (gnu_size
  		&& ! allocatable_size_p (gnu_size,
! 					 global_bindings_p () || !definition
  					 || static_p)))
  	  {
  	    gnu_type = build_reference_type (gnu_type);
! 	    gnu_size = NULL_TREE;
! 	    used_by_ref = true;
! 	    const_flag = true;
  
! 	    /* In case this was a aliased object whose nominal subtype is
! 	       unconstrained, the pointer above will be a thin pointer and
! 	       build_allocator will automatically make the template.
! 
! 	       If we have a template initializer only (that we made above),
! 	       pretend there is none and rely on what build_allocator creates
! 	       again anyway.  Otherwise (if we have a full initializer), get
! 	       the data part and feed that to build_allocator.  */
  
  	    if (definition)
  	      {
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 937,951 ****
  		  {
  		    gnu_alloc_type
  		      = TREE_TYPE (TREE_CHAIN (TYPE_FIELDS (gnu_alloc_type)));
! 		    gnu_expr
! 		      = build_component_ref
! 			(gnu_expr, NULL_TREE,
! 			 TREE_CHAIN (TYPE_FIELDS (TREE_TYPE (gnu_expr))), 0);
  		  }
  
  		if (TREE_CODE (TYPE_SIZE_UNIT (gnu_alloc_type)) == INTEGER_CST
  		    && TREE_CONSTANT_OVERFLOW (TYPE_SIZE_UNIT (gnu_alloc_type))
! 		    && ! Is_Imported (gnat_entity))
  		  post_error ("Storage_Error will be raised at run-time?",
  			      gnat_entity);
  
--- 939,960 ----
  		  {
  		    gnu_alloc_type
  		      = TREE_TYPE (TREE_CHAIN (TYPE_FIELDS (gnu_alloc_type)));
! 
!                    if (TREE_CODE (gnu_expr) == CONSTRUCTOR
!                        &&
!                        TREE_CHAIN (CONSTRUCTOR_ELTS (gnu_expr)) == NULL_TREE)
!                      gnu_expr = 0;
!                    else
!                      gnu_expr
!                        = build_component_ref
!                          (gnu_expr, NULL_TREE,
!                           TREE_CHAIN (TYPE_FIELDS (TREE_TYPE (gnu_expr))),
! 			  false);
  		  }
  
  		if (TREE_CODE (TYPE_SIZE_UNIT (gnu_alloc_type)) == INTEGER_CST
  		    && TREE_CONSTANT_OVERFLOW (TYPE_SIZE_UNIT (gnu_alloc_type))
! 		    && !Is_Imported (gnat_entity))
  		  post_error ("Storage_Error will be raised at run-time?",
  			      gnat_entity);
  
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 954,961 ****
  	      }
  	    else
  	      {
! 		gnu_expr = 0;
! 		const_flag = 0;
  	      }
  	  }
  
--- 963,970 ----
  	      }
  	    else
  	      {
! 		gnu_expr = NULL_TREE;
! 		const_flag = false;
  	      }
  	  }
  
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 964,1060 ****
  	   to hold the "aligning type" with a modified initial value,
  	   if any, then point to it and make that the value of this
  	   variable, which is now indirect.  */
! 
! 	if (! global_bindings_p () && ! static_p && definition
! 	    && ! imported_p && TYPE_ALIGN (gnu_type) > BIGGEST_ALIGNMENT)
  	  {
  	    tree gnu_new_type
  	      = make_aligning_type (gnu_type, TYPE_ALIGN (gnu_type),
  				    TYPE_SIZE_UNIT (gnu_type));
  	    tree gnu_new_var;
  
- 	    set_lineno (gnat_entity, 1);
  	    gnu_new_var
  	      = create_var_decl (create_concat_name (gnat_entity, "ALIGN"),
! 				 NULL_TREE, gnu_new_type, gnu_expr,
! 				 0, 0, 0, 0, 0);
  
! 	    if (gnu_expr != 0)
! 	      expand_expr_stmt
! 		(build_binary_op
! 		 (MODIFY_EXPR, NULL_TREE,
! 		  build_component_ref (gnu_new_var, NULL_TREE,
! 				       TYPE_FIELDS (gnu_new_type), 0),
! 		  gnu_expr));
  
  	    gnu_type = build_reference_type (gnu_type);
  	    gnu_expr
  	      = build_unary_op
  		(ADDR_EXPR, gnu_type,
  		 build_component_ref (gnu_new_var, NULL_TREE,
! 				      TYPE_FIELDS (gnu_new_type), 0));
  
! 	    gnu_size = 0;
! 	    used_by_ref = 1;
! 	    const_flag = 1;
  	  }
  
  	/* Convert the expression to the type of the object except in the
  	   case where the object's type is unconstrained or the object's type
  	   is a padded record whose field is of self-referential size.  In
  	   the former case, converting will generate unnecessary evaluations
  	   of the CONSTRUCTOR to compute the size and in the latter case, we
  	   want to only copy the actual data.  */
! 	if (gnu_expr != 0
  	    && TREE_CODE (gnu_type) != UNCONSTRAINED_ARRAY_TYPE
! 	    && ! CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_type))
! 	    && ! (TREE_CODE (gnu_type) == RECORD_TYPE
! 		  && TYPE_IS_PADDING_P (gnu_type)
! 		  && (CONTAINS_PLACEHOLDER_P
! 		      (TYPE_SIZE (TREE_TYPE (TYPE_FIELDS (gnu_type)))))))
  	  gnu_expr = convert (gnu_type, gnu_expr);
  
! 	/* This name is external or there was a name specified, use it.
! 	   Don't use the Interface_Name if there is an address clause.
! 	   (see CD30005).  */
! 	if ((Present (Interface_Name (gnat_entity))
! 	     && No (Address_Clause (gnat_entity)))
! 	    || (Is_Public (gnat_entity)
! 		&& (! Is_Imported (gnat_entity) || Is_Exported (gnat_entity))))
  	  gnu_ext_name = create_concat_name (gnat_entity, 0);
  
- 	if (const_flag)
- 	  gnu_type = build_qualified_type (gnu_type, (TYPE_QUALS (gnu_type)
- 						      | TYPE_QUAL_CONST));
- 
  	/* If this is constant initialized to a static constant and the
  	   object has an aggregrate type, force it to be statically
  	   allocated. */
  	if (const_flag && gnu_expr && TREE_CONSTANT (gnu_expr)
  	    && host_integerp (TYPE_SIZE_UNIT (gnu_type), 1)
  	    && (AGGREGATE_TYPE_P (gnu_type)
! 		&& ! (TREE_CODE (gnu_type) == RECORD_TYPE
! 		      && TYPE_IS_PADDING_P (gnu_type))))
! 	  static_p = 1;
  
- 	set_lineno (gnat_entity, ! global_bindings_p ());
  	gnu_decl = create_var_decl (gnu_entity_id, gnu_ext_name, gnu_type,
  				    gnu_expr, const_flag,
  				    Is_Public (gnat_entity),
  				    imported_p || !definition,
! 				    static_p, attr_list);
! 
  	DECL_BY_REF_P (gnu_decl) = used_by_ref;
  	DECL_POINTS_TO_READONLY_P (gnu_decl) = used_by_ref && inner_const_flag;
  
! 	if (definition && DECL_SIZE (gnu_decl) != 0
! 	    && gnu_block_stack != 0
! 	    && TREE_VALUE (gnu_block_stack) != 0
  	    && (TREE_CODE (DECL_SIZE (gnu_decl)) != INTEGER_CST
! 		|| (flag_stack_check && ! STACK_CHECK_BUILTIN
  		    && 0 < compare_tree_int (DECL_SIZE_UNIT (gnu_decl),
  					     STACK_CHECK_MAX_VAR_SIZE))))
! 	  update_setjmp_buf (TREE_VALUE (gnu_block_stack));
  
  	/* If this is a public constant or we're not optimizing and we're not
  	   making a VAR_DECL for it, make one just for export or debugger
--- 973,1080 ----
  	   to hold the "aligning type" with a modified initial value,
  	   if any, then point to it and make that the value of this
  	   variable, which is now indirect.  */
! 	if (!global_bindings_p () && !static_p && definition
! 	    && !imported_p && TYPE_ALIGN (gnu_type) > BIGGEST_ALIGNMENT)
  	  {
  	    tree gnu_new_type
  	      = make_aligning_type (gnu_type, TYPE_ALIGN (gnu_type),
  				    TYPE_SIZE_UNIT (gnu_type));
  	    tree gnu_new_var;
  
  	    gnu_new_var
  	      = create_var_decl (create_concat_name (gnat_entity, "ALIGN"),
! 				 NULL_TREE, gnu_new_type, gnu_expr, false,
! 				 false, false, false, NULL, gnat_entity);
  
! 	    if (gnu_expr)
! 	      add_stmt_with_node
! 		(build_binary_op (MODIFY_EXPR, NULL_TREE,
! 				  build_component_ref
! 				  (gnu_new_var, NULL_TREE,
! 				   TYPE_FIELDS (gnu_new_type), false),
! 				  gnu_expr),
! 		 gnat_entity);
  
  	    gnu_type = build_reference_type (gnu_type);
  	    gnu_expr
  	      = build_unary_op
  		(ADDR_EXPR, gnu_type,
  		 build_component_ref (gnu_new_var, NULL_TREE,
! 				      TYPE_FIELDS (gnu_new_type), false));
  
! 	    gnu_size = NULL_TREE;
! 	    used_by_ref = true;
! 	    const_flag = true;
  	  }
  
+ 	if (const_flag)
+ 	  gnu_type = build_qualified_type (gnu_type, (TYPE_QUALS (gnu_type)
+ 						      | TYPE_QUAL_CONST));
+ 
  	/* Convert the expression to the type of the object except in the
  	   case where the object's type is unconstrained or the object's type
  	   is a padded record whose field is of self-referential size.  In
  	   the former case, converting will generate unnecessary evaluations
  	   of the CONSTRUCTOR to compute the size and in the latter case, we
  	   want to only copy the actual data.  */
! 	if (gnu_expr
  	    && TREE_CODE (gnu_type) != UNCONSTRAINED_ARRAY_TYPE
! 	    && !CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_type))
! 	    && !(TREE_CODE (gnu_type) == RECORD_TYPE
! 		 && TYPE_IS_PADDING_P (gnu_type)
! 		 && (CONTAINS_PLACEHOLDER_P
! 		     (TYPE_SIZE (TREE_TYPE (TYPE_FIELDS (gnu_type)))))))
  	  gnu_expr = convert (gnu_type, gnu_expr);
  
! 	/* If this name is external or there was a name specified, use it,
! 	   unless this is a VMS exception object since this would conflict
! 	   with the symbol we need to export in addition.  Don't use the
! 	   Interface_Name if there is an address clause (see CD30005).  */
! 	if (!Is_VMS_Exception (gnat_entity)
! 	    && ((Present (Interface_Name (gnat_entity))
! 		 && No (Address_Clause (gnat_entity)))
! 		|| (Is_Public (gnat_entity)
! 		    && (!Is_Imported (gnat_entity)
! 			|| Is_Exported (gnat_entity)))))
  	  gnu_ext_name = create_concat_name (gnat_entity, 0);
  
  	/* If this is constant initialized to a static constant and the
  	   object has an aggregrate type, force it to be statically
  	   allocated. */
  	if (const_flag && gnu_expr && TREE_CONSTANT (gnu_expr)
  	    && host_integerp (TYPE_SIZE_UNIT (gnu_type), 1)
  	    && (AGGREGATE_TYPE_P (gnu_type)
! 		&& !(TREE_CODE (gnu_type) == RECORD_TYPE
! 		     && TYPE_IS_PADDING_P (gnu_type))))
! 	  static_p = true;
  
  	gnu_decl = create_var_decl (gnu_entity_id, gnu_ext_name, gnu_type,
  				    gnu_expr, const_flag,
  				    Is_Public (gnat_entity),
  				    imported_p || !definition,
! 				    static_p, attr_list, gnat_entity);
  	DECL_BY_REF_P (gnu_decl) = used_by_ref;
  	DECL_POINTS_TO_READONLY_P (gnu_decl) = used_by_ref && inner_const_flag;
  
! 	/* If we have an address clause and we've made this indirect, it's
! 	   not enough to merely mark the type as volatile since volatile
! 	   references only conflict with other volatile references while this
! 	   reference must conflict with all other references.  So ensure that
! 	   the dereferenced value has alias set 0.  */
! 	if (Present (Address_Clause (gnat_entity)) && used_by_ref)
! 	  DECL_POINTER_ALIAS_SET (gnu_decl) = 0;
! 
! 	if (definition && DECL_SIZE (gnu_decl)
! 	    && get_block_jmpbuf_decl ()
  	    && (TREE_CODE (DECL_SIZE (gnu_decl)) != INTEGER_CST
! 		|| (flag_stack_check && !STACK_CHECK_BUILTIN
  		    && 0 < compare_tree_int (DECL_SIZE_UNIT (gnu_decl),
  					     STACK_CHECK_MAX_VAR_SIZE))))
! 	  add_stmt_with_node (build_call_1_expr
! 			      (update_setjmp_buf_decl,
! 			       build_unary_op (ADDR_EXPR, NULL_TREE,
! 					       get_block_jmpbuf_decl ())),
! 			      gnat_entity);
  
  	/* If this is a public constant or we're not optimizing and we're not
  	   making a VAR_DECL for it, make one just for export or debugger
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 1066,1097 ****
  		|| Address_Taken (gnat_entity)
  		|| Is_Aliased (gnat_entity)
  		|| Is_Aliased (Etype (gnat_entity))))
! 	  SET_DECL_CONST_CORRESPONDING_VAR (gnu_decl,
! 	      create_var_decl (gnu_entity_id, gnu_ext_name, gnu_type,
! 			       gnu_expr, 0, Is_Public (gnat_entity), 0,
! 			       static_p, 0));
  
  	/* If this is declared in a block that contains an block with an
  	   exception handler, we must force this variable in memory to
  	   suppress an invalid optimization.  */
  	if (Has_Nested_Block_With_Handler (Scope (gnat_entity))
  	    && Exception_Mechanism != GCC_ZCX)
! 	  {
! 	    gnat_mark_addressable (gnu_decl);
! 	    flush_addressof (gnu_decl);
! 	  }
  
  	/* Back-annotate the Alignment of the object if not already in the
  	   tree.  Likewise for Esize if the object is of a constant size.
  	   But if the "object" is actually a pointer to an object, the
! 	   alignment and size are the same as teh type, so don't back-annotate
  	   the values for the pointer.  */
! 	if (! used_by_ref && Unknown_Alignment (gnat_entity))
  	  Set_Alignment (gnat_entity,
  			 UI_From_Int (DECL_ALIGN (gnu_decl) / BITS_PER_UNIT));
  
! 	if (! used_by_ref && Unknown_Esize (gnat_entity)
! 	    && DECL_SIZE (gnu_decl) != 0)
  	  {
  	    tree gnu_back_size = DECL_SIZE (gnu_decl);
  
--- 1086,1118 ----
  		|| Address_Taken (gnat_entity)
  		|| Is_Aliased (gnat_entity)
  		|| Is_Aliased (Etype (gnat_entity))))
! 	  {
! 	    tree gnu_corr_var
! 	      = create_var_decl (gnu_entity_id, gnu_ext_name, gnu_type,
! 				 gnu_expr, false, Is_Public (gnat_entity),
! 				 false, static_p, NULL, gnat_entity);
! 
! 	    SET_DECL_CONST_CORRESPONDING_VAR (gnu_decl, gnu_corr_var);
! 	  }
  
  	/* If this is declared in a block that contains an block with an
  	   exception handler, we must force this variable in memory to
  	   suppress an invalid optimization.  */
  	if (Has_Nested_Block_With_Handler (Scope (gnat_entity))
  	    && Exception_Mechanism != GCC_ZCX)
! 	  TREE_ADDRESSABLE (gnu_decl) = 1;
  
  	/* Back-annotate the Alignment of the object if not already in the
  	   tree.  Likewise for Esize if the object is of a constant size.
  	   But if the "object" is actually a pointer to an object, the
! 	   alignment and size are the same as the type, so don't back-annotate
  	   the values for the pointer.  */
! 	if (!used_by_ref && Unknown_Alignment (gnat_entity))
  	  Set_Alignment (gnat_entity,
  			 UI_From_Int (DECL_ALIGN (gnu_decl) / BITS_PER_UNIT));
  
! 	if (!used_by_ref && Unknown_Esize (gnat_entity)
! 	    && DECL_SIZE (gnu_decl))
  	  {
  	    tree gnu_back_size = DECL_SIZE (gnu_decl);
  
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 1150,1164 ****
  	    tree gnu_value = UI_To_gnu (Enumeration_Rep (gnat_literal),
  					gnu_type);
  	    tree gnu_literal
! 	      = create_var_decl (get_entity_name (gnat_literal),
! 				 0, gnu_type, gnu_value, 1, 0, 0, 0, 0);
  
! 	    save_gnu_tree (gnat_literal, gnu_literal, 0);
  	    gnu_literal_list = tree_cons (DECL_NAME (gnu_literal),
  					  gnu_value, gnu_literal_list);
  	  }
  
! 	TYPE_FIELDS (gnu_type) = nreverse (gnu_literal_list);
  
  	/* Note that the bounds are updated at the end of this function
  	   because to avoid an infinite recursion when we get the bounds of
--- 1171,1186 ----
  	    tree gnu_value = UI_To_gnu (Enumeration_Rep (gnat_literal),
  					gnu_type);
  	    tree gnu_literal
! 	      = create_var_decl (get_entity_name (gnat_literal), NULL_TREE,
! 				 gnu_type, gnu_value, true, false, false,
! 				 false, NULL, gnat_literal);
  
! 	    save_gnu_tree (gnat_literal, gnu_literal, false);
  	    gnu_literal_list = tree_cons (DECL_NAME (gnu_literal),
  					  gnu_value, gnu_literal_list);
  	  }
  
! 	TYPE_VALUES (gnu_type) = nreverse (gnu_literal_list);
  
  	/* Note that the bounds are updated at the end of this function
  	   because to avoid an infinite recursion when we get the bounds of
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 1203,1214 ****
  	   a modulus of zero, which is otherwise invalid.  */
  	gnu_modulus = UI_To_gnu (Modulus (gnat_entity), gnu_type);
  
! 	if (! integer_zerop (gnu_modulus))
  	  {
  	    TYPE_MODULAR_P (gnu_type) = 1;
  	    SET_TYPE_MODULUS (gnu_type, gnu_modulus);
! 	    gnu_high = fold (build (MINUS_EXPR, gnu_type, gnu_modulus,
! 				    convert (gnu_type, integer_one_node)));
  	  }
  
  	/* If we have to set TYPE_PRECISION different from its natural value,
--- 1225,1236 ----
  	   a modulus of zero, which is otherwise invalid.  */
  	gnu_modulus = UI_To_gnu (Modulus (gnat_entity), gnu_type);
  
! 	if (!integer_zerop (gnu_modulus))
  	  {
  	    TYPE_MODULAR_P (gnu_type) = 1;
  	    SET_TYPE_MODULUS (gnu_type, gnu_modulus);
! 	    gnu_high = fold (build2 (MINUS_EXPR, gnu_type, gnu_modulus,
! 				     convert (gnu_type, integer_one_node)));
  	  }
  
  	/* If we have to set TYPE_PRECISION different from its natural value,
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 1216,1222 ****
  	   it is not one greater than TYPE_MAX_VALUE.  */
  	if (TYPE_PRECISION (gnu_type) != esize
  	    || (TYPE_MODULAR_P (gnu_type)
! 		&& ! tree_int_cst_equal (TYPE_MAX_VALUE (gnu_type), gnu_high)))
  	  {
  	    tree gnu_subtype = make_node (INTEGER_TYPE);
  
--- 1238,1244 ----
  	   it is not one greater than TYPE_MAX_VALUE.  */
  	if (TYPE_PRECISION (gnu_type) != esize
  	    || (TYPE_MODULAR_P (gnu_type)
! 		&& !tree_int_cst_equal (TYPE_MAX_VALUE (gnu_type), gnu_high)))
  	  {
  	    tree gnu_subtype = make_node (INTEGER_TYPE);
  
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 1227,1233 ****
  	      = TYPE_MODULAR_P (gnu_type)
  		? gnu_high : TYPE_MAX_VALUE (gnu_type);
  	    TYPE_PRECISION (gnu_subtype) = esize;
! 	    TREE_UNSIGNED (gnu_subtype) = 1;
  	    TYPE_EXTRA_SUBTYPE_P (gnu_subtype) = 1;
  	    TYPE_PACKED_ARRAY_TYPE_P (gnu_subtype)
  	      = Is_Packed_Array_Type (gnat_entity);
--- 1249,1255 ----
  	      = TYPE_MODULAR_P (gnu_type)
  		? gnu_high : TYPE_MAX_VALUE (gnu_type);
  	    TYPE_PRECISION (gnu_subtype) = esize;
! 	    TYPE_UNSIGNED (gnu_subtype) = 1;
  	    TYPE_EXTRA_SUBTYPE_P (gnu_subtype) = 1;
  	    TYPE_PACKED_ARRAY_TYPE_P (gnu_subtype)
  	      = Is_Packed_Array_Type (gnat_entity);
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 1261,1269 ****
  
        if (definition == 0
  	  && Present (Ancestor_Subtype (gnat_entity))
! 	  && ! In_Extended_Main_Code_Unit (Ancestor_Subtype (gnat_entity))
! 	  && (! Compile_Time_Known_Value (Type_Low_Bound (gnat_entity))
! 	      || ! Compile_Time_Known_Value (Type_High_Bound (gnat_entity))))
  	gnat_to_gnu_entity (Ancestor_Subtype (gnat_entity),
  			    gnu_expr, definition);
  
--- 1283,1291 ----
  
        if (definition == 0
  	  && Present (Ancestor_Subtype (gnat_entity))
! 	  && !In_Extended_Main_Code_Unit (Ancestor_Subtype (gnat_entity))
! 	  && (!Compile_Time_Known_Value (Type_Low_Bound (gnat_entity))
! 	      || !Compile_Time_Known_Value (Type_High_Bound (gnat_entity))))
  	gnat_to_gnu_entity (Ancestor_Subtype (gnat_entity),
  			    gnu_expr, definition);
  
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 1295,1301 ****
  	 so don't blow up if so.  */
        if (present_gnu_tree (gnat_entity))
  	{
! 	  maybe_present = 1;
  	  break;
  	}
  
--- 1317,1323 ----
  	 so don't blow up if so.  */
        if (present_gnu_tree (gnat_entity))
  	{
! 	  maybe_present = true;
  	  break;
  	}
  
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 1305,1312 ****
       /* This should be an unsigned type if the lower bound is constant
  	 and non-negative or if the base type is unsigned; a signed type
  	 otherwise.    */
!       TREE_UNSIGNED (gnu_type)
! 	= (TREE_UNSIGNED (TREE_TYPE (gnu_type))
  	   || (TREE_CODE (TYPE_MIN_VALUE (gnu_type)) == INTEGER_CST
  	       && TREE_INT_CST_HIGH (TYPE_MIN_VALUE (gnu_type)) >= 0)
  	   || TYPE_BIASED_REPRESENTATION_P (gnu_type)
--- 1327,1334 ----
       /* This should be an unsigned type if the lower bound is constant
  	 and non-negative or if the base type is unsigned; a signed type
  	 otherwise.    */
!       TYPE_UNSIGNED (gnu_type)
! 	= (TYPE_UNSIGNED (TREE_TYPE (gnu_type))
  	   || (TREE_CODE (TYPE_MIN_VALUE (gnu_type)) == INTEGER_CST
  	       && TREE_INT_CST_HIGH (TYPE_MIN_VALUE (gnu_type)) >= 0)
  	   || TYPE_BIASED_REPRESENTATION_P (gnu_type)
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 1314,1334 ****
  
        layout_type (gnu_type);
  
!       if (Is_Packed_Array_Type (gnat_entity) && BYTES_BIG_ENDIAN)
  	{
  	  tree gnu_field_type = gnu_type;
  	  tree gnu_field;
  
! 	  TYPE_RM_SIZE_INT (gnu_field_type)
  	    = UI_To_gnu (RM_Size (gnat_entity), bitsizetype);
  	  gnu_type = make_node (RECORD_TYPE);
! 	  TYPE_NAME (gnu_type) = create_concat_name (gnat_entity, "LJM");
  	  TYPE_ALIGN (gnu_type) = TYPE_ALIGN (gnu_field_type);
  	  TYPE_PACKED (gnu_type) = 1;
  	  gnu_field = create_field_decl (get_identifier ("OBJECT"),
! 					 gnu_field_type, gnu_type, 1, 0, 0, 1),
! 	  finish_record_type (gnu_type, gnu_field, 0, 0);
! 	  TYPE_LEFT_JUSTIFIED_MODULAR_P (gnu_type) = 1;
  	  SET_TYPE_ADA_SIZE (gnu_type, bitsize_int (esize));
  	}
  
--- 1336,1373 ----
  
        layout_type (gnu_type);
  
!       /* If the type we are dealing with is to represent a packed array,
! 	 we need to have the bits left justified on big-endian targets
! 	 and right justified on little-endian targets.  We also need to
! 	 ensure that when the value is read (e.g. for comparison of two
! 	 such values), we only get the good bits, since the unused bits
! 	 are uninitialized.  Both goals are accomplished by wrapping the
! 	 modular value in an enclosing struct.  */
! 	if (Is_Packed_Array_Type (gnat_entity))
  	{
  	  tree gnu_field_type = gnu_type;
  	  tree gnu_field;
  
! 	  TYPE_RM_SIZE_NUM (gnu_field_type)
  	    = UI_To_gnu (RM_Size (gnat_entity), bitsizetype);
  	  gnu_type = make_node (RECORD_TYPE);
! 	  TYPE_NAME (gnu_type) = create_concat_name (gnat_entity, "JM");
  	  TYPE_ALIGN (gnu_type) = TYPE_ALIGN (gnu_field_type);
  	  TYPE_PACKED (gnu_type) = 1;
+ 
+ 	  /* Create a stripped-down declaration of the original type, mainly
+ 	     for debugging.  */
+ 	  create_type_decl (get_entity_name (gnat_entity), gnu_field_type,
+ 			    NULL, true, debug_info_p, gnat_entity);
+ 
+ 	  /* Don't notify the field as "addressable", since we won't be taking
+ 	     it's address and it would prevent create_field_decl from making a
+ 	     bitfield.  */
  	  gnu_field = create_field_decl (get_identifier ("OBJECT"),
! 					 gnu_field_type, gnu_type, 1, 0, 0, 0);
! 
! 	  finish_record_type (gnu_type, gnu_field, false, false);
! 	  TYPE_JUSTIFIED_MODULAR_P (gnu_type) = 1;
  	  SET_TYPE_ADA_SIZE (gnu_type, bitsize_int (esize));
  	}
  
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 1364,1372 ****
        {
  	if (definition == 0
  	    && Present (Ancestor_Subtype (gnat_entity))
! 	    && ! In_Extended_Main_Code_Unit (Ancestor_Subtype (gnat_entity))
! 	    && (! Compile_Time_Known_Value (Type_Low_Bound (gnat_entity))
! 		|| ! Compile_Time_Known_Value (Type_High_Bound (gnat_entity))))
  	  gnat_to_gnu_entity (Ancestor_Subtype (gnat_entity),
  			      gnu_expr, definition);
  
--- 1403,1411 ----
        {
  	if (definition == 0
  	    && Present (Ancestor_Subtype (gnat_entity))
! 	    && !In_Extended_Main_Code_Unit (Ancestor_Subtype (gnat_entity))
! 	    && (!Compile_Time_Known_Value (Type_Low_Bound (gnat_entity))
! 		|| !Compile_Time_Known_Value (Type_High_Bound (gnat_entity))))
  	  gnat_to_gnu_entity (Ancestor_Subtype (gnat_entity),
  			      gnu_expr, definition);
  
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 1392,1398 ****
  	   so don't blow up if so.  */
  	if (present_gnu_tree (gnat_entity))
  	  {
! 	    maybe_present = 1;
  	    break;
  	  }
  
--- 1431,1437 ----
  	   so don't blow up if so.  */
  	if (present_gnu_tree (gnat_entity))
  	  {
! 	    maybe_present = true;
  	    break;
  	  }
  
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 1440,1460 ****
  	  = create_concat_name (gnat_entity, "XUB");
  	TYPE_NAME (gnu_fat_type) = create_concat_name (gnat_entity, "XUP");
  	TYPE_IS_FAT_POINTER_P (gnu_fat_type) = 1;
! 	TREE_READONLY (gnu_template_type) = 1;
  
  	/* Make a node for the array.  If we are not defining the array
  	   suppress expanding incomplete types and save the node as the type
  	   for GNAT_ENTITY.  */
  	gnu_type = make_node (UNCONSTRAINED_ARRAY_TYPE);
! 	if (! definition)
  	  {
  	    defer_incomplete_level++;
! 	    this_deferred = this_made_decl = 1;
  	    gnu_decl = create_type_decl (gnu_entity_id, gnu_type, attr_list,
! 					 ! Comes_From_Source (gnat_entity),
! 					 debug_info_p);
! 	    save_gnu_tree (gnat_entity, gnu_decl, 0);
! 	    saved = 1;
  	  }
  
  	/* Build the fat pointer type.  Use a "void *" object instead of
--- 1479,1499 ----
  	  = create_concat_name (gnat_entity, "XUB");
  	TYPE_NAME (gnu_fat_type) = create_concat_name (gnat_entity, "XUP");
  	TYPE_IS_FAT_POINTER_P (gnu_fat_type) = 1;
! 	TYPE_READONLY (gnu_template_type) = 1;
  
  	/* Make a node for the array.  If we are not defining the array
  	   suppress expanding incomplete types and save the node as the type
  	   for GNAT_ENTITY.  */
  	gnu_type = make_node (UNCONSTRAINED_ARRAY_TYPE);
! 	if (!definition)
  	  {
  	    defer_incomplete_level++;
! 	    this_deferred = this_made_decl = true;
  	    gnu_decl = create_type_decl (gnu_entity_id, gnu_type, attr_list,
! 					 !Comes_From_Source (gnat_entity),
! 					 debug_info_p, gnat_entity);
! 	    save_gnu_tree (gnat_entity, gnu_decl, false);
! 	    saved = true;
  	  }
  
  	/* Build the fat pointer type.  Use a "void *" object instead of
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 1470,1483 ****
  
  	/* Make sure we can put this into a register.  */
  	TYPE_ALIGN (gnu_fat_type) = MIN (BIGGEST_ALIGNMENT, 2 * POINTER_SIZE);
! 	finish_record_type (gnu_fat_type, tem, 0, 1);
  
  	/* Build a reference to the template from a PLACEHOLDER_EXPR that
  	   is the fat pointer.  This will be used to access the individual
  	   fields once we build them.  */
! 	tem = build (COMPONENT_REF, gnu_ptr_template,
! 		     build (PLACEHOLDER_EXPR, gnu_fat_type),
! 		     TREE_CHAIN (TYPE_FIELDS (gnu_fat_type)));
  	gnu_template_reference
  	  = build_unary_op (INDIRECT_REF, gnu_template_type, tem);
  	TREE_READONLY (gnu_template_reference) = 1;
--- 1509,1522 ----
  
  	/* Make sure we can put this into a register.  */
  	TYPE_ALIGN (gnu_fat_type) = MIN (BIGGEST_ALIGNMENT, 2 * POINTER_SIZE);
! 	finish_record_type (gnu_fat_type, tem, false, true);
  
  	/* Build a reference to the template from a PLACEHOLDER_EXPR that
  	   is the fat pointer.  This will be used to access the individual
  	   fields once we build them.  */
! 	tem = build3 (COMPONENT_REF, gnu_ptr_template,
! 		      build0 (PLACEHOLDER_EXPR, gnu_fat_type),
! 		      TREE_CHAIN (TYPE_FIELDS (gnu_fat_type)), NULL_TREE);
  	gnu_template_reference
  	  = build_unary_op (INDIRECT_REF, gnu_template_type, tem);
  	TREE_READONLY (gnu_template_reference) = 1;
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 1506,1512 ****
  	    /* Make the FIELD_DECLs for the minimum and maximum of this
  	       type and then make extractions of that field from the
  	       template.  */
- 	    set_lineno (gnat_entity, 0);
  	    sprintf (field_name, "LB%d", index);
  	    gnu_min_field = create_field_decl (get_identifier (field_name),
  					       gnu_ind_subtype,
--- 1545,1550 ----
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 1516,1529 ****
  					       gnu_ind_subtype,
  					       gnu_template_type, 0, 0, 0, 0);
  
  	    gnu_temp_fields[index] = chainon (gnu_min_field, gnu_max_field);
  
  	    /* We can't use build_component_ref here since the template
  	       type isn't complete yet.  */
! 	    gnu_min = build (COMPONENT_REF, gnu_ind_subtype,
! 			     gnu_template_reference, gnu_min_field);
! 	    gnu_max = build (COMPONENT_REF, gnu_ind_subtype,
! 			     gnu_template_reference, gnu_max_field);
  	    TREE_READONLY (gnu_min) = TREE_READONLY (gnu_max) = 1;
  
  	    /* Make a range type with the new ranges, but using
--- 1554,1573 ----
  					       gnu_ind_subtype,
  					       gnu_template_type, 0, 0, 0, 0);
  
+ 	    Sloc_to_locus (Sloc (gnat_entity),
+ 			   &DECL_SOURCE_LOCATION (gnu_min_field));
+ 	    Sloc_to_locus (Sloc (gnat_entity),
+ 			   &DECL_SOURCE_LOCATION (gnu_max_field));
  	    gnu_temp_fields[index] = chainon (gnu_min_field, gnu_max_field);
  
  	    /* We can't use build_component_ref here since the template
  	       type isn't complete yet.  */
! 	    gnu_min = build3 (COMPONENT_REF, gnu_ind_subtype,
! 			      gnu_template_reference, gnu_min_field,
! 			      NULL_TREE);
! 	    gnu_max = build3 (COMPONENT_REF, gnu_ind_subtype,
! 			      gnu_template_reference, gnu_max_field,
! 			      NULL_TREE);
  	    TREE_READONLY (gnu_min) = TREE_READONLY (gnu_max) = 1;
  
  	    /* Make a range type with the new ranges, but using
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 1549,1556 ****
  	    = chainon (gnu_template_fields, gnu_temp_fields[index]);
  
  	/* Install all the fields into the template.  */
! 	finish_record_type (gnu_template_type, gnu_template_fields, 0, 0);
! 	TREE_READONLY (gnu_template_type) = 1;
  
  	/* Now make the array of arrays and update the pointer to the array
  	   in the fat pointer.  Note that it is the first field.  */
--- 1593,1601 ----
  	    = chainon (gnu_template_fields, gnu_temp_fields[index]);
  
  	/* Install all the fields into the template.  */
! 	finish_record_type (gnu_template_type, gnu_template_fields,
! 			    false, false);
! 	TYPE_READONLY (gnu_template_type) = 1;
  
  	/* Now make the array of arrays and update the pointer to the array
  	   in the fat pointer.  Note that it is the first field.  */
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 1563,1585 ****
  	  = validate_size (Component_Size (gnat_entity), tem,
  			   gnat_entity,
  			   (Is_Bit_Packed_Array (gnat_entity)
! 			    ? TYPE_DECL : VAR_DECL), 1,
! 			   Has_Component_Size_Clause (gnat_entity));
  
  	if (Has_Atomic_Components (gnat_entity))
! 	  check_ok_for_atomic (tem, gnat_entity, 1);
  
  	/* If the component type is a RECORD_TYPE that has a self-referential
  	   size, use the maxium size.  */
! 	if (gnu_comp_size == 0 && TREE_CODE (tem) == RECORD_TYPE
  	    && CONTAINS_PLACEHOLDER_P (TYPE_SIZE (tem)))
! 	  gnu_comp_size = max_size (TYPE_SIZE (tem), 1);
  
! 	if (! Is_Bit_Packed_Array (gnat_entity) && gnu_comp_size != 0)
  	  {
! 	    tem = make_type_from_size (tem, gnu_comp_size, 0);
  	    tem = maybe_pad_type (tem, gnu_comp_size, 0, gnat_entity,
! 				  "C_PAD", 0, definition, 1);
  	  }
  
  	if (Has_Volatile_Components (gnat_entity))
--- 1608,1630 ----
  	  = validate_size (Component_Size (gnat_entity), tem,
  			   gnat_entity,
  			   (Is_Bit_Packed_Array (gnat_entity)
! 			    ? TYPE_DECL : VAR_DECL),
! 			   true, Has_Component_Size_Clause (gnat_entity));
  
  	if (Has_Atomic_Components (gnat_entity))
! 	  check_ok_for_atomic (tem, gnat_entity, true);
  
  	/* If the component type is a RECORD_TYPE that has a self-referential
  	   size, use the maxium size.  */
! 	if (!gnu_comp_size && TREE_CODE (tem) == RECORD_TYPE
  	    && CONTAINS_PLACEHOLDER_P (TYPE_SIZE (tem)))
! 	  gnu_comp_size = max_size (TYPE_SIZE (tem), true);
  
! 	if (!Is_Bit_Packed_Array (gnat_entity) && gnu_comp_size)
  	  {
! 	    tem = make_type_from_size (tem, gnu_comp_size, false);
  	    tem = maybe_pad_type (tem, gnu_comp_size, 0, gnat_entity,
! 				  "C_PAD", false, definition, true);
  	  }
  
  	if (Has_Volatile_Components (gnat_entity))
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 1605,1617 ****
  	    tem = build_array_type (tem, gnu_index_types[index]);
  	    TYPE_MULTI_ARRAY_P (tem) = (index > 0);
  
! 	    /* ??? For now, we say that any component of aggregate type is
! 	       addressable because the front end may take 'Reference of it.
! 	       But we have to make it addressable if it must be passed by
! 	       reference or it that is the default.  */
  	    TYPE_NONALIASED_COMPONENT (tem)
! 	      = (! Has_Aliased_Components (gnat_entity)
! 		 && ! AGGREGATE_TYPE_P (TREE_TYPE (tem)));
  	  }
  
  	/* If an alignment is specified, use it if valid.  But ignore it for
--- 1650,1667 ----
  	    tem = build_array_type (tem, gnu_index_types[index]);
  	    TYPE_MULTI_ARRAY_P (tem) = (index > 0);
  
! 	    /* If the type below this an multi-array type, then this
! 	       does not not have aliased components.
! 
! 	       ??? Otherwise, for now, we say that any component of aggregate
! 	       type is addressable because the front end may take 'Reference
! 	       of it. But we have to make it addressable if it must be passed
! 	       by reference or it that is the default.  */
  	    TYPE_NONALIASED_COMPONENT (tem)
! 	      = ((TREE_CODE (TREE_TYPE (tem)) == ARRAY_TYPE
! 		  && TYPE_MULTI_ARRAY_P (TREE_TYPE (tem))) ? 1
! 		 : (!Has_Aliased_Components (gnat_entity)
! 		    && !AGGREGATE_TYPE_P (TREE_TYPE (tem))));
  	  }
  
  	/* If an alignment is specified, use it if valid.  But ignore it for
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 1619,1627 ****
  	if (No (Packed_Array_Type (gnat_entity))
              && Known_Alignment (gnat_entity))
  	  {
! 	    if (No (Alignment (gnat_entity)))
! 	      gigi_abort (124);
! 
  	    TYPE_ALIGN (tem)
  	      = validate_alignment (Alignment (gnat_entity), gnat_entity,
  				    TYPE_ALIGN (tem));
--- 1669,1675 ----
  	if (No (Packed_Array_Type (gnat_entity))
              && Known_Alignment (gnat_entity))
  	  {
! 	    gcc_assert (Present (Alignment (gnat_entity)));
  	    TYPE_ALIGN (tem)
  	      = validate_alignment (Alignment (gnat_entity), gnat_entity,
  				    TYPE_ALIGN (tem));
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 1641,1659 ****
  
  	/* If the maximum size doesn't overflow, use it.  */
  	if (TREE_CODE (gnu_max_size) == INTEGER_CST
! 	    && ! TREE_OVERFLOW (gnu_max_size))
  	  TYPE_SIZE (tem)
  	    = size_binop (MIN_EXPR, gnu_max_size, TYPE_SIZE (tem));
  	if (TREE_CODE (gnu_max_size_unit) == INTEGER_CST
! 	    && ! TREE_OVERFLOW (gnu_max_size_unit))
  	  TYPE_SIZE_UNIT (tem)
  	    = size_binop (MIN_EXPR, gnu_max_size_unit,
  			  TYPE_SIZE_UNIT (tem));
  
  	create_type_decl (create_concat_name (gnat_entity, "XUA"),
! 			  tem, 0, ! Comes_From_Source (gnat_entity),
! 			  debug_info_p);
! 	rest_of_type_compilation (gnu_fat_type, global_bindings_p ());
  
  	/* Create a record type for the object and its template and
  	   set the template at a negative offset.  */
--- 1689,1706 ----
  
  	/* If the maximum size doesn't overflow, use it.  */
  	if (TREE_CODE (gnu_max_size) == INTEGER_CST
! 	    && !TREE_OVERFLOW (gnu_max_size))
  	  TYPE_SIZE (tem)
  	    = size_binop (MIN_EXPR, gnu_max_size, TYPE_SIZE (tem));
  	if (TREE_CODE (gnu_max_size_unit) == INTEGER_CST
! 	    && !TREE_OVERFLOW (gnu_max_size_unit))
  	  TYPE_SIZE_UNIT (tem)
  	    = size_binop (MIN_EXPR, gnu_max_size_unit,
  			  TYPE_SIZE_UNIT (tem));
  
  	create_type_decl (create_concat_name (gnat_entity, "XUA"),
! 			  tem, NULL, !Comes_From_Source (gnat_entity),
! 			  debug_info_p, gnat_entity);
  
  	/* Create a record type for the object and its template and
  	   set the template at a negative offset.  */
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 1670,1677 ****
  
  	/* Give the thin pointer type a name.  */
  	create_type_decl (create_concat_name (gnat_entity, "XUX"),
! 			  build_pointer_type (tem), 0,
! 			  ! Comes_From_Source (gnat_entity), debug_info_p);
        }
        break;
  
--- 1717,1725 ----
  
  	/* Give the thin pointer type a name.  */
  	create_type_decl (create_concat_name (gnat_entity, "XUX"),
! 			  build_pointer_type (tem), NULL,
! 			  !Comes_From_Source (gnat_entity), debug_info_p,
! 			  gnat_entity);
        }
        break;
  
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 1691,1697 ****
  	 type.  If so, the result is the array type.  */
  
        gnu_type = gnat_to_gnu_type (Etype (gnat_entity));
!       if (! Is_Constrained (gnat_entity))
  	break;
        else
  	{
--- 1739,1745 ----
  	 type.  If so, the result is the array type.  */
  
        gnu_type = gnat_to_gnu_type (Etype (gnat_entity));
!       if (!Is_Constrained (gnat_entity))
  	break;
        else
  	{
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 1706,1716 ****
  	  Entity_Id gnat_ind_base_subtype;
  	  tree gnu_base_type = gnu_type;
  	  tree *gnu_index_type = (tree *) alloca (array_dim * sizeof (tree *));
! 	  tree gnu_comp_size = 0;
  	  tree gnu_max_size = size_one_node;
  	  tree gnu_max_size_unit;
! 	  int need_index_type_struct = 0;
! 	  int max_overflow = 0;
  
  	  /* First create the gnu types for each index.  Create types for
  	     debugging information to point to the index types if the
--- 1754,1764 ----
  	  Entity_Id gnat_ind_base_subtype;
  	  tree gnu_base_type = gnu_type;
  	  tree *gnu_index_type = (tree *) alloca (array_dim * sizeof (tree *));
! 	  tree gnu_comp_size = NULL_TREE;
  	  tree gnu_max_size = size_one_node;
  	  tree gnu_max_size_unit;
! 	  bool need_index_type_struct = false;
! 	  bool max_overflow = false;
  
  	  /* First create the gnu types for each index.  Create types for
  	     debugging information to point to the index types if the
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 1750,1763 ****
  		 does not overflow in SIZETYPE, ignore the overflow
  		 indications.  */
  	      if ((TYPE_PRECISION (gnu_index_subtype)
! 		   > TYPE_PRECISION (sizetype))
  		  && TREE_CODE (gnu_min) == INTEGER_CST
  		  && TREE_CODE (gnu_max) == INTEGER_CST
  		  && TREE_OVERFLOW (gnu_min) && TREE_OVERFLOW (gnu_max)
! 		  && (! TREE_OVERFLOW
! 		      (fold (build (MINUS_EXPR, gnu_index_subtype,
! 				    TYPE_MAX_VALUE (gnu_index_subtype),
! 				    TYPE_MIN_VALUE (gnu_index_subtype))))))
  		TREE_OVERFLOW (gnu_min) = TREE_OVERFLOW (gnu_max)
  		  = TREE_CONSTANT_OVERFLOW (gnu_min)
  		  = TREE_CONSTANT_OVERFLOW (gnu_max) = 0;
--- 1798,1813 ----
  		 does not overflow in SIZETYPE, ignore the overflow
  		 indications.  */
  	      if ((TYPE_PRECISION (gnu_index_subtype)
! 		   > TYPE_PRECISION (sizetype)
! 		   || TYPE_UNSIGNED (gnu_index_subtype)
! 		      != TYPE_UNSIGNED (sizetype))
  		  && TREE_CODE (gnu_min) == INTEGER_CST
  		  && TREE_CODE (gnu_max) == INTEGER_CST
  		  && TREE_OVERFLOW (gnu_min) && TREE_OVERFLOW (gnu_max)
! 		  && (!TREE_OVERFLOW
! 		      (fold (build2 (MINUS_EXPR, gnu_index_subtype,
! 				     TYPE_MAX_VALUE (gnu_index_subtype),
! 				     TYPE_MIN_VALUE (gnu_index_subtype))))))
  		TREE_OVERFLOW (gnu_min) = TREE_OVERFLOW (gnu_max)
  		  = TREE_CONSTANT_OVERFLOW (gnu_min)
  		  = TREE_CONSTANT_OVERFLOW (gnu_max) = 0;
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 1765,1771 ****
  	      /* Similarly, if the range is null, use bounds of 1..0 for
  		 the sizetype bounds.  */
  	      else if ((TYPE_PRECISION (gnu_index_subtype)
! 			> TYPE_PRECISION (sizetype))
  		       && TREE_CODE (gnu_min) == INTEGER_CST
  		       && TREE_CODE (gnu_max) == INTEGER_CST
  		       && (TREE_OVERFLOW (gnu_min) || TREE_OVERFLOW (gnu_max))
--- 1815,1823 ----
  	      /* Similarly, if the range is null, use bounds of 1..0 for
  		 the sizetype bounds.  */
  	      else if ((TYPE_PRECISION (gnu_index_subtype)
! 			> TYPE_PRECISION (sizetype)
! 		       || TYPE_UNSIGNED (gnu_index_subtype)
! 		          != TYPE_UNSIGNED (sizetype))
  		       && TREE_CODE (gnu_min) == INTEGER_CST
  		       && TREE_CODE (gnu_max) == INTEGER_CST
  		       && (TREE_OVERFLOW (gnu_min) || TREE_OVERFLOW (gnu_max))
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 1788,1795 ****
  		 code below to malfunction if we don't handle it specially.  */
  	      if (TREE_CODE (gnu_base_min) == INTEGER_CST
  		  && TREE_CODE (gnu_base_max) == INTEGER_CST
! 		  && ! TREE_CONSTANT_OVERFLOW (gnu_base_min)
! 		  && ! TREE_CONSTANT_OVERFLOW (gnu_base_max)
  		  && tree_int_cst_lt (gnu_base_max, gnu_base_min))
  		gnu_high = size_zero_node, gnu_min = size_one_node;
  
--- 1840,1847 ----
  		 code below to malfunction if we don't handle it specially.  */
  	      if (TREE_CODE (gnu_base_min) == INTEGER_CST
  		  && TREE_CODE (gnu_base_max) == INTEGER_CST
! 		  && !TREE_CONSTANT_OVERFLOW (gnu_base_min)
! 		  && !TREE_CONSTANT_OVERFLOW (gnu_base_max)
  		  && tree_int_cst_lt (gnu_base_max, gnu_base_min))
  		gnu_high = size_zero_node, gnu_min = size_one_node;
  
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 1798,1804 ****
  	      else if (TREE_CODE (gnu_high) == INTEGER_CST
  		       && TREE_OVERFLOW (gnu_high))
  		gnu_high = gnu_max;
! 	      else if (TREE_UNSIGNED (gnu_base_subtype)
  		       || TREE_CODE (gnu_high) == INTEGER_CST)
  		gnu_high = size_binop (MAX_EXPR, gnu_max, gnu_high);
  	      else
--- 1850,1856 ----
  	      else if (TREE_CODE (gnu_high) == INTEGER_CST
  		       && TREE_OVERFLOW (gnu_high))
  		gnu_high = gnu_max;
! 	      else if (TYPE_UNSIGNED (gnu_base_subtype)
  		       || TREE_CODE (gnu_high) == INTEGER_CST)
  		gnu_high = size_binop (MAX_EXPR, gnu_max, gnu_high);
  	      else
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 1819,1833 ****
  		 handle each bound separately.  */
  
  	      if ((TREE_CODE (gnu_min) == INTEGER_CST
! 		   && ! TREE_OVERFLOW (gnu_min)
! 		   && ! operand_equal_p (gnu_min, gnu_base_base_min, 0))
! 		  || ! CONTAINS_PLACEHOLDER_P (gnu_min))
  		gnu_base_min = gnu_min;
  
  	      if ((TREE_CODE (gnu_max) == INTEGER_CST
! 		   && ! TREE_OVERFLOW (gnu_max)
! 		   && ! operand_equal_p (gnu_max, gnu_base_base_max, 0))
! 		  || ! CONTAINS_PLACEHOLDER_P (gnu_max))
  		gnu_base_max = gnu_max;
  
  	      if ((TREE_CODE (gnu_base_min) == INTEGER_CST
--- 1871,1885 ----
  		 handle each bound separately.  */
  
  	      if ((TREE_CODE (gnu_min) == INTEGER_CST
! 		   && !TREE_OVERFLOW (gnu_min)
! 		   && !operand_equal_p (gnu_min, gnu_base_base_min, 0))
! 		  || !CONTAINS_PLACEHOLDER_P (gnu_min))
  		gnu_base_min = gnu_min;
  
  	      if ((TREE_CODE (gnu_max) == INTEGER_CST
! 		   && !TREE_OVERFLOW (gnu_max)
! 		   && !operand_equal_p (gnu_max, gnu_base_base_max, 0))
! 		  || !CONTAINS_PLACEHOLDER_P (gnu_max))
  		gnu_base_max = gnu_max;
  
  	      if ((TREE_CODE (gnu_base_min) == INTEGER_CST
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 1836,1842 ****
  		  || (TREE_CODE (gnu_base_max) == INTEGER_CST
  		      && TREE_CONSTANT_OVERFLOW (gnu_base_max))
  		  || operand_equal_p (gnu_base_max, gnu_base_base_max, 0))
! 		max_overflow = 1;
  
  	      gnu_base_min = size_binop (MAX_EXPR, gnu_base_min, gnu_min);
  	      gnu_base_max = size_binop (MIN_EXPR, gnu_base_max, gnu_max);
--- 1888,1894 ----
  		  || (TREE_CODE (gnu_base_max) == INTEGER_CST
  		      && TREE_CONSTANT_OVERFLOW (gnu_base_max))
  		  || operand_equal_p (gnu_base_max, gnu_base_base_max, 0))
! 		max_overflow = true;
  
  	      gnu_base_min = size_binop (MAX_EXPR, gnu_base_min, gnu_min);
  	      gnu_base_max = size_binop (MIN_EXPR, gnu_base_max, gnu_max);
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 1850,1871 ****
  
  	      if (TREE_CODE (gnu_this_max) == INTEGER_CST
  		  && TREE_CONSTANT_OVERFLOW (gnu_this_max))
! 		max_overflow = 1;
  
  	      gnu_max_size
  		= size_binop (MULT_EXPR, gnu_max_size, gnu_this_max);
  
! 	      if (! integer_onep (TYPE_MIN_VALUE (gnu_index_subtype))
  		  || (TREE_CODE (TYPE_MAX_VALUE (gnu_index_subtype))
  		      != INTEGER_CST)
  		  || TREE_CODE (gnu_index_subtype) != INTEGER_TYPE
! 		  || (TREE_TYPE (gnu_index_subtype) != 0
  		      && (TREE_CODE (TREE_TYPE (gnu_index_subtype))
  			  != INTEGER_TYPE))
  		  || TYPE_BIASED_REPRESENTATION_P (gnu_index_subtype)
  		  || (TYPE_PRECISION (gnu_index_subtype)
  		      > TYPE_PRECISION (sizetype)))
! 		need_index_type_struct = 1;
  	    }
  
  	  /* Then flatten: create the array of arrays.  */
--- 1902,1923 ----
  
  	      if (TREE_CODE (gnu_this_max) == INTEGER_CST
  		  && TREE_CONSTANT_OVERFLOW (gnu_this_max))
! 		max_overflow = true;
  
  	      gnu_max_size
  		= size_binop (MULT_EXPR, gnu_max_size, gnu_this_max);
  
! 	      if (!integer_onep (TYPE_MIN_VALUE (gnu_index_subtype))
  		  || (TREE_CODE (TYPE_MAX_VALUE (gnu_index_subtype))
  		      != INTEGER_CST)
  		  || TREE_CODE (gnu_index_subtype) != INTEGER_TYPE
! 		  || (TREE_TYPE (gnu_index_subtype)
  		      && (TREE_CODE (TREE_TYPE (gnu_index_subtype))
  			  != INTEGER_TYPE))
  		  || TYPE_BIASED_REPRESENTATION_P (gnu_index_subtype)
  		  || (TYPE_PRECISION (gnu_index_subtype)
  		      > TYPE_PRECISION (sizetype)))
! 		need_index_type_struct = true;
  	    }
  
  	  /* Then flatten: create the array of arrays.  */
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 1876,1882 ****
  	     so don't blow up if so.  */
  	  if (present_gnu_tree (gnat_entity))
  	    {
! 	      maybe_present = 1;
  	      break;
  	    }
  
--- 1928,1934 ----
  	     so don't blow up if so.  */
  	  if (present_gnu_tree (gnat_entity))
  	    {
! 	      maybe_present = true;
  	      break;
  	    }
  
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 1887,1906 ****
  			     gnat_entity,
  			     (Is_Bit_Packed_Array (gnat_entity)
  			      ? TYPE_DECL : VAR_DECL),
! 			     1, Has_Component_Size_Clause (gnat_entity));
  
  	  /* If the component type is a RECORD_TYPE that has a self-referential
  	     size, use the maxium size.  */
! 	  if (gnu_comp_size == 0 && TREE_CODE (gnu_type) == RECORD_TYPE
  	      && CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_type)))
! 	    gnu_comp_size = max_size (TYPE_SIZE (gnu_type), 1);
  
! 	  if (! Is_Bit_Packed_Array (gnat_entity) && gnu_comp_size != 0)
  	    {
! 	      gnu_type = make_type_from_size (gnu_type, gnu_comp_size, 0);
  	      gnu_type = maybe_pad_type (gnu_type, gnu_comp_size, 0,
! 					 gnat_entity, "C_PAD", 0,
! 					 definition, 1);
  	    }
  
  	  if (Has_Volatile_Components (Base_Type (gnat_entity)))
--- 1939,1958 ----
  			     gnat_entity,
  			     (Is_Bit_Packed_Array (gnat_entity)
  			      ? TYPE_DECL : VAR_DECL),
! 			     true, Has_Component_Size_Clause (gnat_entity));
  
  	  /* If the component type is a RECORD_TYPE that has a self-referential
  	     size, use the maxium size.  */
! 	  if (!gnu_comp_size && TREE_CODE (gnu_type) == RECORD_TYPE
  	      && CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_type)))
! 	    gnu_comp_size = max_size (TYPE_SIZE (gnu_type), true);
  
! 	  if (!Is_Bit_Packed_Array (gnat_entity) && gnu_comp_size)
  	    {
! 	      gnu_type = make_type_from_size (gnu_type, gnu_comp_size, false);
  	      gnu_type = maybe_pad_type (gnu_type, gnu_comp_size, 0,
! 					 gnat_entity, "C_PAD", false,
! 					 definition, true);
  	    }
  
  	  if (Has_Volatile_Components (Base_Type (gnat_entity)))
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 1914,1935 ****
  				     convert (bitsizetype, gnu_max_size),
  				     TYPE_SIZE (gnu_type));
  
- 	  /* We don't want any array types shared for two reasons: first,
- 	     we want to keep differently-named types distinct; second,
- 	     setting TYPE_MULTI_ARRAY_TYPE of one type can clobber
- 	     another.  */
- 	  debug_no_type_hash = 1;
  	  for (index = array_dim - 1; index >= 0; index --)
  	    {
  	      gnu_type = build_array_type (gnu_type, gnu_index_type[index]);
  	      TYPE_MULTI_ARRAY_P (gnu_type) = (index > 0);
! 	      /* ??? For now, we say that any component of aggregate type is
! 		 addressable because the front end may take 'Reference.
! 		 But we have to make it addressable if it must be passed by
! 		 reference or it that is the default.  */
  	      TYPE_NONALIASED_COMPONENT (gnu_type)
! 		= (! Has_Aliased_Components (gnat_entity)
! 		   && ! AGGREGATE_TYPE_P (TREE_TYPE (gnu_type)));
  	    }
  
  	  /* If we are at file level and this is a multi-dimensional array, we
--- 1966,1987 ----
  				     convert (bitsizetype, gnu_max_size),
  				     TYPE_SIZE (gnu_type));
  
  	  for (index = array_dim - 1; index >= 0; index --)
  	    {
  	      gnu_type = build_array_type (gnu_type, gnu_index_type[index]);
  	      TYPE_MULTI_ARRAY_P (gnu_type) = (index > 0);
! 	    /* If the type below this an multi-array type, then this
! 	       does not not have aliased components.
! 
! 	       ??? Otherwise, for now, we say that any component of aggregate
! 	       type is addressable because the front end may take 'Reference
! 	       of it. But we have to make it addressable if it must be passed
! 	       by reference or it that is the default.  */
  	      TYPE_NONALIASED_COMPONENT (gnu_type)
! 	      = ((TREE_CODE (TREE_TYPE (gnu_type)) == ARRAY_TYPE
! 		  && TYPE_MULTI_ARRAY_P (TREE_TYPE (gnu_type))) ? 1
! 		 : (!Has_Aliased_Components (gnat_entity)
! 		    && !AGGREGATE_TYPE_P (TREE_TYPE (gnu_type))));
  	    }
  
  	  /* If we are at file level and this is a multi-dimensional array, we
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 1945,1958 ****
  		   gnu_arr_type = TREE_TYPE (gnu_arr_type),
  		   gnu_str_name = concat_id_with_name (gnu_str_name, "ST"))
  		{
  		  TYPE_SIZE (gnu_arr_type)
  		    = elaborate_expression_1 (gnat_entity, gnat_entity,
  					      TYPE_SIZE (gnu_arr_type),
  					      gnu_str_name, definition, 0);
  		  TYPE_SIZE_UNIT (gnu_arr_type)
! 		    = elaborate_expression_1
! 		      (gnat_entity, gnat_entity, TYPE_SIZE_UNIT (gnu_arr_type),
! 		       concat_id_with_name (gnu_str_name, "U"), definition, 0);
  		}
  	    }
  
--- 1997,2024 ----
  		   gnu_arr_type = TREE_TYPE (gnu_arr_type),
  		   gnu_str_name = concat_id_with_name (gnu_str_name, "ST"))
  		{
+ 		  tree eltype = TREE_TYPE (gnu_arr_type);
+ 
  		  TYPE_SIZE (gnu_arr_type)
  		    = elaborate_expression_1 (gnat_entity, gnat_entity,
  					      TYPE_SIZE (gnu_arr_type),
  					      gnu_str_name, definition, 0);
+ 
+ 		  /* ??? For now, store the size as a multiple of the
+ 		     alignment of the element type in bytes so that we
+ 		     can see the alignment from the tree.  */
  		  TYPE_SIZE_UNIT (gnu_arr_type)
! 		    = build_binary_op
! 		      (MULT_EXPR, sizetype,
! 		       elaborate_expression_1
! 		       (gnat_entity, gnat_entity,
! 			build_binary_op (EXACT_DIV_EXPR, sizetype,
! 					 TYPE_SIZE_UNIT (gnu_arr_type),
! 					 size_int (TYPE_ALIGN (eltype)
! 						   / BITS_PER_UNIT)),
! 			concat_id_with_name (gnu_str_name, "A_U"),
! 			definition, 0),
! 		       size_int (TYPE_ALIGN (eltype) / BITS_PER_UNIT));
  		}
  	    }
  
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 1961,1967 ****
  	  if (need_index_type_struct && debug_info_p)
  	    {
  	      tree gnu_bound_rec_type = make_node (RECORD_TYPE);
! 	      tree gnu_field_list = 0;
  	      tree gnu_field;
  
  	      TYPE_NAME (gnu_bound_rec_type)
--- 2027,2033 ----
  	  if (need_index_type_struct && debug_info_p)
  	    {
  	      tree gnu_bound_rec_type = make_node (RECORD_TYPE);
! 	      tree gnu_field_list = NULL_TREE;
  	      tree gnu_field;
  
  	      TYPE_NAME (gnu_bound_rec_type)
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 1983,1992 ****
  		  gnu_field_list = gnu_field;
  		}
  
! 	      finish_record_type (gnu_bound_rec_type, gnu_field_list, 0, 0);
  	    }
  
- 	  debug_no_type_hash = 0;
  	  TYPE_CONVENTION_FORTRAN_P (gnu_type)
  	    = (Convention (gnat_entity) == Convention_Fortran);
  	  TYPE_PACKED_ARRAY_TYPE_P (gnu_type)
--- 2049,2058 ----
  		  gnu_field_list = gnu_field;
  		}
  
! 	      finish_record_type (gnu_bound_rec_type, gnu_field_list,
! 				  false, false);
  	    }
  
  	  TYPE_CONVENTION_FORTRAN_P (gnu_type)
  	    = (Convention (gnat_entity) == Convention_Fortran);
  	  TYPE_PACKED_ARRAY_TYPE_P (gnu_type)
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 1995,2005 ****
  	  /* If our size depends on a placeholder and the maximum size doesn't
  	     overflow, use it.  */
  	  if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_type))
! 	      && ! (TREE_CODE (gnu_max_size) == INTEGER_CST
! 		    && TREE_OVERFLOW (gnu_max_size))
! 	      && ! (TREE_CODE (gnu_max_size_unit) == INTEGER_CST
! 		    && TREE_OVERFLOW (gnu_max_size_unit))
! 	      && ! max_overflow)
  	    {
  	      TYPE_SIZE (gnu_type) = size_binop (MIN_EXPR, gnu_max_size,
  						 TYPE_SIZE (gnu_type));
--- 2061,2071 ----
  	  /* If our size depends on a placeholder and the maximum size doesn't
  	     overflow, use it.  */
  	  if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_type))
! 	      && !(TREE_CODE (gnu_max_size) == INTEGER_CST
! 		   && TREE_OVERFLOW (gnu_max_size))
! 	      && !(TREE_CODE (gnu_max_size_unit) == INTEGER_CST
! 		   && TREE_OVERFLOW (gnu_max_size_unit))
! 	      && !max_overflow)
  	    {
  	      TYPE_SIZE (gnu_type) = size_binop (MIN_EXPR, gnu_max_size,
  						 TYPE_SIZE (gnu_type));
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2010,2017 ****
  
  	  /* Set our alias set to that of our base type.  This gives all
  	     array subtypes the same alias set.  */
! 	  TYPE_ALIAS_SET (gnu_type) = get_alias_set (gnu_base_type);
! 	  record_component_aliases (gnu_type);
  	}
  
        /* If this is a packed type, make this type the same as the packed
--- 2076,2082 ----
  
  	  /* Set our alias set to that of our base type.  This gives all
  	     array subtypes the same alias set.  */
! 	  copy_alias_set (gnu_type, gnu_base_type);
  	}
  
        /* If this is a packed type, make this type the same as the packed
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2024,2052 ****
  
  	  /* First finish the type we had been making so that we output
  	     debugging information for it  */
! 	  gnu_type = build_qualified_type (gnu_type,
! 					   (TYPE_QUALS (gnu_type)
! 					    | (TYPE_QUAL_VOLATILE
! 					       * Treat_As_Volatile (gnat_entity))));
! 	  set_lineno (gnat_entity, 0);
  	  gnu_decl = create_type_decl (gnu_entity_id, gnu_type, attr_list,
! 				       ! Comes_From_Source (gnat_entity),
! 				       debug_info_p);
! 	  if (! Comes_From_Source (gnat_entity))
  	    DECL_ARTIFICIAL (gnu_decl) = 1;
  
  	  /* Save it as our equivalent in case the call below elaborates
  	     this type again.  */
! 	  save_gnu_tree (gnat_entity, gnu_decl, 0);
  
  	  gnu_decl = gnat_to_gnu_entity (Packed_Array_Type (gnat_entity),
  					 NULL_TREE, 0);
! 	  this_made_decl = 1;
  	  gnu_inner_type = gnu_type = TREE_TYPE (gnu_decl);
! 	  save_gnu_tree (gnat_entity, NULL_TREE, 0);
  
  	  while (TREE_CODE (gnu_inner_type) == RECORD_TYPE
! 		 && (TYPE_LEFT_JUSTIFIED_MODULAR_P (gnu_inner_type)
  		     || TYPE_IS_PADDING_P (gnu_inner_type)))
  	    gnu_inner_type = TREE_TYPE (TYPE_FIELDS (gnu_inner_type));
  
--- 2089,2117 ----
  
  	  /* First finish the type we had been making so that we output
  	     debugging information for it  */
! 	  gnu_type
! 	    = build_qualified_type (gnu_type,
! 				    (TYPE_QUALS (gnu_type)
! 				     | (TYPE_QUAL_VOLATILE
! 					* Treat_As_Volatile (gnat_entity))));
  	  gnu_decl = create_type_decl (gnu_entity_id, gnu_type, attr_list,
! 				       !Comes_From_Source (gnat_entity),
! 				       debug_info_p, gnat_entity);
! 	  if (!Comes_From_Source (gnat_entity))
  	    DECL_ARTIFICIAL (gnu_decl) = 1;
  
  	  /* Save it as our equivalent in case the call below elaborates
  	     this type again.  */
! 	  save_gnu_tree (gnat_entity, gnu_decl, false);
  
  	  gnu_decl = gnat_to_gnu_entity (Packed_Array_Type (gnat_entity),
  					 NULL_TREE, 0);
! 	  this_made_decl = true;
  	  gnu_inner_type = gnu_type = TREE_TYPE (gnu_decl);
! 	  save_gnu_tree (gnat_entity, NULL_TREE, false);
  
  	  while (TREE_CODE (gnu_inner_type) == RECORD_TYPE
! 		 && (TYPE_JUSTIFIED_MODULAR_P (gnu_inner_type)
  		     || TYPE_IS_PADDING_P (gnu_inner_type)))
  	    gnu_inner_type = TREE_TYPE (TYPE_FIELDS (gnu_inner_type));
  
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2054,2062 ****
  	     the actual bounds can be put into a template.  */
  
  	  if ((TREE_CODE (gnu_inner_type) == ARRAY_TYPE
! 	       && TYPE_ACTUAL_BOUNDS (gnu_inner_type) == 0)
  	      || (TREE_CODE (gnu_inner_type) == INTEGER_TYPE
! 		  && ! TYPE_HAS_ACTUAL_BOUNDS_P (gnu_inner_type)))
  	    {
  	      if (TREE_CODE (gnu_inner_type) == INTEGER_TYPE)
  		{
--- 2119,2127 ----
  	     the actual bounds can be put into a template.  */
  
  	  if ((TREE_CODE (gnu_inner_type) == ARRAY_TYPE
! 	       && !TYPE_ACTUAL_BOUNDS (gnu_inner_type))
  	      || (TREE_CODE (gnu_inner_type) == INTEGER_TYPE
! 		  && !TYPE_HAS_ACTUAL_BOUNDS_P (gnu_inner_type)))
  	    {
  	      if (TREE_CODE (gnu_inner_type) == INTEGER_TYPE)
  		{
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2075,2082 ****
  			= TYPE_MAX_VALUE (gnu_inner_type);
  		      TYPE_PRECISION (gnu_subtype)
  			= TYPE_PRECISION (gnu_inner_type);
! 		      TREE_UNSIGNED (gnu_subtype)
! 			= TREE_UNSIGNED (gnu_inner_type);
  		      TYPE_EXTRA_SUBTYPE_P (gnu_subtype) = 1;
  		      layout_type (gnu_subtype);
  
--- 2140,2147 ----
  			= TYPE_MAX_VALUE (gnu_inner_type);
  		      TYPE_PRECISION (gnu_subtype)
  			= TYPE_PRECISION (gnu_inner_type);
! 		      TYPE_UNSIGNED (gnu_subtype)
! 			= TYPE_UNSIGNED (gnu_inner_type);
  		      TYPE_EXTRA_SUBTYPE_P (gnu_subtype) = 1;
  		      layout_type (gnu_subtype);
  
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2090,2113 ****
  
  	      for (gnat_index = First_Index (gnat_entity);
  		   Present (gnat_index); gnat_index = Next_Index (gnat_index))
! 		SET_TYPE_ACTUAL_BOUNDS (gnu_inner_type,
! 		    tree_cons (NULL_TREE,
! 			       get_unpadded_type (Etype (gnat_index)),
! 			       TYPE_ACTUAL_BOUNDS (gnu_inner_type)));
  
  	      if (Convention (gnat_entity) != Convention_Fortran)
! 		SET_TYPE_ACTUAL_BOUNDS (gnu_inner_type,
! 		    nreverse (TYPE_ACTUAL_BOUNDS (gnu_inner_type)));
  
  	      if (TREE_CODE (gnu_type) == RECORD_TYPE
! 		  && TYPE_LEFT_JUSTIFIED_MODULAR_P (gnu_type))
  		TREE_TYPE (TYPE_FIELDS (gnu_type)) = gnu_inner_type;
  	    }
  	}
  
        /* Abort if packed array with no packed array type field set. */
!       else if (Is_Packed (gnat_entity))
! 	gigi_abort (107);
  
        break;
  
--- 2155,2180 ----
  
  	      for (gnat_index = First_Index (gnat_entity);
  		   Present (gnat_index); gnat_index = Next_Index (gnat_index))
! 		SET_TYPE_ACTUAL_BOUNDS
! 		  (gnu_inner_type,
! 		   tree_cons (NULL_TREE,
! 			      get_unpadded_type (Etype (gnat_index)),
! 			      TYPE_ACTUAL_BOUNDS (gnu_inner_type)));
  
  	      if (Convention (gnat_entity) != Convention_Fortran)
! 		SET_TYPE_ACTUAL_BOUNDS
! 		  (gnu_inner_type,
! 		   nreverse (TYPE_ACTUAL_BOUNDS (gnu_inner_type)));
  
  	      if (TREE_CODE (gnu_type) == RECORD_TYPE
! 		  && TYPE_JUSTIFIED_MODULAR_P (gnu_type))
  		TREE_TYPE (TYPE_FIELDS (gnu_type)) = gnu_inner_type;
  	    }
  	}
  
        /* Abort if packed array with no packed array type field set. */
!       else
! 	gcc_assert (!Is_Packed (gnat_entity));
  
        break;
  
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2146,2151 ****
--- 2213,2219 ----
  	gnu_type
  	  = build_array_type (gnat_to_gnu_type (Component_Type (gnat_entity)),
  			      gnu_index_type);
+ 	copy_alias_set (gnu_type,  gnu_string_type);
        }
        break;
  
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2200,2208 ****
  		      : (Component_Alignment (gnat_entity)
  			 == Calign_Storage_Unit) ? -1
  		      : 0);
! 	int has_rep = Has_Specified_Layout (gnat_entity);
! 	int all_rep = has_rep;
! 	int is_extension
  	  = (Is_Tagged_Type (gnat_entity)
  	     && Nkind (record_definition) == N_Derived_Type_Definition);
  
--- 2268,2276 ----
  		      : (Component_Alignment (gnat_entity)
  			 == Calign_Storage_Unit) ? -1
  		      : 0);
! 	bool has_rep = Has_Specified_Layout (gnat_entity);
! 	bool all_rep = has_rep;
! 	bool is_extension
  	  = (Is_Tagged_Type (gnat_entity)
  	     && Nkind (record_definition) == N_Derived_Type_Definition);
  
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2214,2231 ****
  	  if ((Ekind (gnat_field) == E_Component
  	       || Ekind (gnat_field) == E_Discriminant)
  	      && No (Component_Clause (gnat_field)))
! 	    all_rep = 0;
  
  	/* If this is a record extension, go a level further to find the
  	   record definition.  Also, verify we have a Parent_Subtype.  */
  	if (is_extension)
  	  {
! 	    if (! type_annotate_only
  		|| Present (Record_Extension_Part (record_definition)))
  	      record_definition = Record_Extension_Part (record_definition);
  
! 	    if (! type_annotate_only && No (Parent_Subtype (gnat_entity)))
! 	      gigi_abort (121);
  	  }
  
  	/* Make a node for the record.  If we are not defining the record,
--- 2282,2299 ----
  	  if ((Ekind (gnat_field) == E_Component
  	       || Ekind (gnat_field) == E_Discriminant)
  	      && No (Component_Clause (gnat_field)))
! 	    all_rep = false;
  
  	/* If this is a record extension, go a level further to find the
  	   record definition.  Also, verify we have a Parent_Subtype.  */
  	if (is_extension)
  	  {
! 	    if (!type_annotate_only
  		|| Present (Record_Extension_Part (record_definition)))
  	      record_definition = Record_Extension_Part (record_definition);
  
! 	    gcc_assert (type_annotate_only
! 			|| Present (Parent_Subtype (gnat_entity)));
  	  }
  
  	/* Make a node for the record.  If we are not defining the record,
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2251,2268 ****
  	  DECL_IGNORED_P (TYPE_NAME (gnu_type)) = 0;
  
  	TYPE_ALIGN (gnu_type) = 0;
! 	TYPE_PACKED (gnu_type) = packed != 0 || has_rep;
  
! 	if (! definition)
  	  {
  	    defer_incomplete_level++;
! 	    this_deferred = 1;
! 	    set_lineno (gnat_entity, 0);
  	    gnu_decl = create_type_decl (gnu_entity_id, gnu_type, attr_list,
! 					 ! Comes_From_Source (gnat_entity),
! 					 debug_info_p);
! 	    save_gnu_tree (gnat_entity, gnu_decl, 0);
! 	    this_made_decl = saved = 1;
  	  }
  
  	/* If both a size and rep clause was specified, put the size in
--- 2319,2335 ----
  	  DECL_IGNORED_P (TYPE_NAME (gnu_type)) = 0;
  
  	TYPE_ALIGN (gnu_type) = 0;
! 	TYPE_PACKED (gnu_type) = packed || has_rep;
  
! 	if (!definition)
  	  {
  	    defer_incomplete_level++;
! 	    this_deferred = true;
  	    gnu_decl = create_type_decl (gnu_entity_id, gnu_type, attr_list,
! 					 !Comes_From_Source (gnat_entity),
! 					 debug_info_p, gnat_entity);
! 	    save_gnu_tree (gnat_entity, gnu_decl, false);
! 	    this_made_decl = saved = true;
  	  }
  
  	/* If both a size and rep clause was specified, put the size in
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2297,2306 ****
  	       COMPONENT_REF which will be filled in below, once
  	       the parent type can be safely built.  */
  
! 	    gnu_get_parent = build (COMPONENT_REF, void_type_node,
! 				    build (PLACEHOLDER_EXPR, gnu_type),
! 				    build_decl (FIELD_DECL, NULL_TREE,
! 						NULL_TREE));
  
  	    if (Has_Discriminants (gnat_entity))
  	      for (gnat_field = First_Stored_Discriminant (gnat_entity);
--- 2364,2374 ----
  	       COMPONENT_REF which will be filled in below, once
  	       the parent type can be safely built.  */
  
! 	    gnu_get_parent = build3 (COMPONENT_REF, void_type_node,
! 				     build0 (PLACEHOLDER_EXPR, gnu_type),
! 				     build_decl (FIELD_DECL, NULL_TREE,
! 						 NULL_TREE),
! 				     NULL_TREE);
  
  	    if (Has_Discriminants (gnat_entity))
  	      for (gnat_field = First_Stored_Discriminant (gnat_entity);
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2309,2321 ****
  		if (Present (Corresponding_Discriminant (gnat_field)))
  		  save_gnu_tree
  		    (gnat_field,
! 		     build (COMPONENT_REF,
! 			    get_unpadded_type (Etype (gnat_field)),
! 			    gnu_get_parent,
! 			    gnat_to_gnu_entity (Corresponding_Discriminant
! 						(gnat_field),
! 						NULL_TREE, 0)),
! 		     1);
  
  	    gnu_parent = gnat_to_gnu_type (Parent_Subtype (gnat_entity));
  
--- 2377,2389 ----
  		if (Present (Corresponding_Discriminant (gnat_field)))
  		  save_gnu_tree
  		    (gnat_field,
! 		     build3 (COMPONENT_REF,
! 			     get_unpadded_type (Etype (gnat_field)),
! 			     gnu_get_parent,
! 			     gnat_to_gnu_field_decl (Corresponding_Discriminant
! 						     (gnat_field)),
! 			     NULL_TREE),
! 		     true);
  
  	    gnu_parent = gnat_to_gnu_type (Parent_Subtype (gnat_entity));
  
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2332,2338 ****
  	  }
  
  	/* Add the fields for the discriminants into the record.  */
!         if (! Is_Unchecked_Union (gnat_entity)
  	    && Has_Discriminants (gnat_entity))
  	  for (gnat_field = First_Stored_Discriminant (gnat_entity);
  	       Present (gnat_field);
--- 2400,2406 ----
  	  }
  
  	/* Add the fields for the discriminants into the record.  */
!         if (!Is_Unchecked_Union (gnat_entity)
  	    && Has_Discriminants (gnat_entity))
  	  for (gnat_field = First_Stored_Discriminant (gnat_entity);
  	       Present (gnat_field);
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2353,2363 ****
  		 corresponding GNAT defining identifier.  Then add to the
  		 list of fields.  */
  	      save_gnu_tree (gnat_field,
! 			     build (COMPONENT_REF, TREE_TYPE (gnu_field),
! 				    build (PLACEHOLDER_EXPR,
! 					   DECL_CONTEXT (gnu_field)),
! 				    gnu_field),
! 			     1);
  
  	      TREE_CHAIN (gnu_field) = gnu_field_list;
  	      gnu_field_list = gnu_field;
--- 2421,2431 ----
  		 corresponding GNAT defining identifier.  Then add to the
  		 list of fields.  */
  	      save_gnu_tree (gnat_field,
! 			     build3 (COMPONENT_REF, TREE_TYPE (gnu_field),
! 				     build0 (PLACEHOLDER_EXPR,
! 					     DECL_CONTEXT (gnu_field)),
! 				     gnu_field, NULL_TREE),
! 			     true);
  
  	      TREE_CHAIN (gnu_field) = gnu_field_list;
  	      gnu_field_list = gnu_field;
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2370,2401 ****
  
  	/* Add the listed fields into the record and finish up.  */
  	components_to_record (gnu_type, Component_List (record_definition),
! 			      gnu_field_list, packed, definition, 0,
! 			      0, all_rep);
  
  	TYPE_VOLATILE (gnu_type) = Treat_As_Volatile (gnat_entity);
  	TYPE_BY_REFERENCE_P (gnu_type) = Is_By_Reference_Type (gnat_entity);
  
- 	/* If this is an extension type, reset the tree for any
- 	   inherited discriminants.  Also remove the PLACEHOLDER_EXPR
- 	   for non-inherited discriminants.  */
- 	if (! Is_Unchecked_Union (gnat_entity)
- 	    && Has_Discriminants (gnat_entity))
- 	  for (gnat_field = First_Stored_Discriminant (gnat_entity);
- 	       Present (gnat_field);
- 	       gnat_field = Next_Stored_Discriminant (gnat_field))
- 	    {
- 	      if (Present (Parent_Subtype (gnat_entity))
- 		  && Present (Corresponding_Discriminant (gnat_field)))
- 		save_gnu_tree (gnat_field, NULL_TREE, 0);
- 	      else
- 		{
- 		  gnu_field = get_gnu_tree (gnat_field);
- 		  save_gnu_tree (gnat_field, NULL_TREE, 0);
- 		  save_gnu_tree (gnat_field, TREE_OPERAND (gnu_field, 1), 0);
- 		}
- 	    }
- 
  	/* If it is a tagged record force the type to BLKmode to insure
  	   that these objects will always be placed in memory. Do the
  	   same thing for limited record types. */
--- 2438,2453 ----
  
  	/* Add the listed fields into the record and finish up.  */
  	components_to_record (gnu_type, Component_List (record_definition),
! 			      gnu_field_list, packed, definition, NULL,
! 			      false, all_rep);
! 
! 	/* We used to remove the associations of the discriminants and
! 	   _Parent for validity checking, but we may need them if there's
! 	   Freeze_Node for a subtype used in this record.  */
  
  	TYPE_VOLATILE (gnu_type) = Treat_As_Volatile (gnat_entity);
  	TYPE_BY_REFERENCE_P (gnu_type) = Is_By_Reference_Type (gnat_entity);
  
  	/* If it is a tagged record force the type to BLKmode to insure
  	   that these objects will always be placed in memory. Do the
  	   same thing for limited record types. */
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2406,2418 ****
  	   the same as that of the type we are derived from.  We assume here
  	   that the other type is already frozen. */
  	if (Etype (gnat_entity) != gnat_entity
! 	    && ! (Is_Private_Type (Etype (gnat_entity))
! 		  && Full_View (Etype (gnat_entity)) == gnat_entity))
! 	  {
! 	    TYPE_ALIAS_SET (gnu_type)
! 	      = get_alias_set (gnat_to_gnu_type (Etype (gnat_entity)));
! 	    record_component_aliases (gnu_type);
! 	  }
  
  	/* Fill in locations of fields.  */
  	annotate_rep (gnat_entity, gnu_type);
--- 2458,2466 ----
  	   the same as that of the type we are derived from.  We assume here
  	   that the other type is already frozen. */
  	if (Etype (gnat_entity) != gnat_entity
! 	    && !(Is_Private_Type (Etype (gnat_entity))
! 		 && Full_View (Etype (gnat_entity)) == gnat_entity))
! 	  copy_alias_set (gnu_type, gnat_to_gnu_type (Etype (gnat_entity)));
  
  	/* Fill in locations of fields.  */
  	annotate_rep (gnat_entity, gnu_type);
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2425,2431 ****
  	  if ((Ekind (gnat_temp) == E_Component
  	       || Ekind (gnat_temp) == E_Discriminant)
  	      && Is_Itype (Etype (gnat_temp))
! 	      && ! present_gnu_tree (gnat_temp))
  	    gnat_to_gnu_entity (Etype (gnat_temp), NULL_TREE, 0);
        }
        break;
--- 2473,2479 ----
  	  if ((Ekind (gnat_temp) == E_Component
  	       || Ekind (gnat_temp) == E_Discriminant)
  	      && Is_Itype (Etype (gnat_temp))
! 	      && !present_gnu_tree (gnat_temp))
  	    gnat_to_gnu_entity (Etype (gnat_temp), NULL_TREE, 0);
        }
        break;
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2439,2445 ****
  	{
  	  gnu_decl = gnat_to_gnu_entity (Equivalent_Type (gnat_entity),
  					 NULL_TREE, 0);
! 	  maybe_present = 1;
  	  break;
  	}
  
--- 2487,2493 ----
  	{
  	  gnu_decl = gnat_to_gnu_entity (Equivalent_Type (gnat_entity),
  					 NULL_TREE, 0);
! 	  maybe_present = true;
  	  break;
  	}
  
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2455,2461 ****
  	{
  	  gnu_decl = gnat_to_gnu_entity (Cloned_Subtype (gnat_entity),
  					 NULL_TREE, 0);
! 	  maybe_present = 1;
  	}
  
        /* Otherwise, first ensure the base type is elaborated.  Then, if we are
--- 2503,2509 ----
  	{
  	  gnu_decl = gnat_to_gnu_entity (Cloned_Subtype (gnat_entity),
  					 NULL_TREE, 0);
! 	  maybe_present = true;
  	}
  
        /* Otherwise, first ensure the base type is elaborated.  Then, if we are
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2471,2478 ****
  	  tree gnu_base_type;
  	  tree gnu_orig_type;
  
! 	  if (! definition)
! 	    defer_incomplete_level++, this_deferred = 1;
  
  	  /* Get the base type initially for its alignment and sizes.  But
  	     if it is a padded type, we do all the other work with the
--- 2519,2526 ----
  	  tree gnu_base_type;
  	  tree gnu_orig_type;
  
! 	  if (!definition)
! 	    defer_incomplete_level++, this_deferred = true;
  
  	  /* Get the base type initially for its alignment and sizes.  But
  	     if it is a padded type, we do all the other work with the
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2486,2492 ****
  
  	  if (present_gnu_tree (gnat_entity))
  	    {
! 	      maybe_present = 1;
  	      break;
  	    }
  
--- 2534,2540 ----
  
  	  if (present_gnu_tree (gnat_entity))
  	    {
! 	      maybe_present = true;
  	      break;
  	    }
  
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2501,2514 ****
  	     expressions are Is_Constrained but aren't constrained!  */
  
  	  if (IN (Ekind (gnat_base_type), Record_Kind)
! 	      && ! Is_For_Access_Subtype (gnat_entity)
! 	      && ! Is_Unchecked_Union (gnat_base_type)
  	      && Is_Constrained (gnat_entity)
  	      && Stored_Constraint (gnat_entity) != No_Elist
  	      && Present (Discriminant_Constraint (gnat_entity)))
  	    {
  	      Entity_Id gnat_field;
- 	      Entity_Id gnat_root_type;
  	      tree gnu_field_list = 0;
  	      tree gnu_pos_list
  		= compute_field_positions (gnu_orig_type, NULL_TREE,
--- 2549,2561 ----
  	     expressions are Is_Constrained but aren't constrained!  */
  
  	  if (IN (Ekind (gnat_base_type), Record_Kind)
! 	      && !Is_For_Access_Subtype (gnat_entity)
! 	      && !Is_Unchecked_Union (gnat_base_type)
  	      && Is_Constrained (gnat_entity)
  	      && Stored_Constraint (gnat_entity) != No_Elist
  	      && Present (Discriminant_Constraint (gnat_entity)))
  	    {
  	      Entity_Id gnat_field;
  	      tree gnu_field_list = 0;
  	      tree gnu_pos_list
  		= compute_field_positions (gnu_orig_type, NULL_TREE,
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2519,2557 ****
  				     definition);
  	      tree gnu_temp;
  
- 	      /* If this is a derived type, we may be seeing fields from any
- 		 original records, so add those positions and discriminant
- 		 substitutions to our lists.  */
- 	      for (gnat_root_type = gnat_base_type;
- 		   Underlying_Type (Etype (gnat_root_type)) != gnat_root_type;
- 		   gnat_root_type = Underlying_Type (Etype (gnat_root_type)))
- 		{
- 		  gnu_pos_list
- 		    = compute_field_positions
- 		      (gnat_to_gnu_type (Etype (gnat_root_type)),
- 		       gnu_pos_list, size_zero_node, bitsize_zero_node,
- 		       BIGGEST_ALIGNMENT);
- 
- 		  if (Present (Parent_Subtype (gnat_root_type)))
- 		    gnu_subst_list
- 		      = substitution_list (Parent_Subtype (gnat_root_type),
- 					   Empty, gnu_subst_list, definition);
- 		}
- 
  	      gnu_type = make_node (RECORD_TYPE);
  	      TYPE_NAME (gnu_type) = gnu_entity_id;
  	      TYPE_STUB_DECL (gnu_type)
! 		= pushdecl (build_decl (TYPE_DECL, NULL_TREE, gnu_type));
  	      TYPE_ALIGN (gnu_type) = TYPE_ALIGN (gnu_base_type);
  
  	      for (gnat_field = First_Entity (gnat_entity);
  		   Present (gnat_field); gnat_field = Next_Entity (gnat_field))
! 		if (Ekind (gnat_field) == E_Component
! 		    || Ekind (gnat_field) == E_Discriminant)
  		  {
  		    tree gnu_old_field
! 		      = gnat_to_gnu_entity
! 			(Original_Record_Component (gnat_field), NULL_TREE, 0);
  		    tree gnu_offset
  		      = TREE_VALUE (purpose_member (gnu_old_field,
  						    gnu_pos_list));
--- 2566,2591 ----
  				     definition);
  	      tree gnu_temp;
  
  	      gnu_type = make_node (RECORD_TYPE);
  	      TYPE_NAME (gnu_type) = gnu_entity_id;
  	      TYPE_STUB_DECL (gnu_type)
! 		= create_type_decl (NULL_TREE, gnu_type, NULL, false, false,
! 				    gnat_entity);
  	      TYPE_ALIGN (gnu_type) = TYPE_ALIGN (gnu_base_type);
  
  	      for (gnat_field = First_Entity (gnat_entity);
  		   Present (gnat_field); gnat_field = Next_Entity (gnat_field))
! 		if ((Ekind (gnat_field) == E_Component
! 		     || Ekind (gnat_field) == E_Discriminant)
! 		    && (Underlying_Type (Scope (Original_Record_Component
! 						(gnat_field)))
! 			== gnat_base_type)
! 		    && (No (Corresponding_Discriminant (gnat_field))
! 			|| !Is_Tagged_Type (gnat_base_type)))
  		  {
  		    tree gnu_old_field
! 		      = gnat_to_gnu_field_decl (Original_Record_Component
! 						(gnat_field));
  		    tree gnu_offset
  		      = TREE_VALUE (purpose_member (gnu_old_field,
  						    gnu_pos_list));
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2568,2576 ****
  
  		    /* If there was a component clause, the field types must be
  		       the same for the type and subtype, so copy the data from
! 		       the old field to avoid recomputation here.  */
  		    if (Present (Component_Clause
! 				 (Original_Record_Component (gnat_field))))
  		      {
  			gnu_size = DECL_SIZE (gnu_old_field);
  			gnu_field_type = TREE_TYPE (gnu_old_field);
--- 2602,2616 ----
  
  		    /* If there was a component clause, the field types must be
  		       the same for the type and subtype, so copy the data from
! 		       the old field to avoid recomputation here.  Also if the
! 		       field is justified modular and the optimization in
! 		       gnat_to_gnu_field was applied.  */
  		    if (Present (Component_Clause
! 				 (Original_Record_Component (gnat_field)))
! 			|| (TREE_CODE (gnu_field_type) == RECORD_TYPE
! 			    && TYPE_JUSTIFIED_MODULAR_P (gnu_field_type)
! 			    && TREE_TYPE (TYPE_FIELDS (gnu_field_type))
! 			       == TREE_TYPE (gnu_old_field)))
  		      {
  			gnu_size = DECL_SIZE (gnu_old_field);
  			gnu_field_type = TREE_TYPE (gnu_old_field);
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2604,2612 ****
  		      = create_field_decl
  			(DECL_NAME (gnu_old_field), gnu_field_type, gnu_type,
  			 0, gnu_size, gnu_new_pos,
! 			 ! DECL_NONADDRESSABLE_P (gnu_old_field));
  
! 		    if (! TREE_CONSTANT (gnu_pos))
  		      {
  			normalize_offset (&gnu_pos, &gnu_bitpos, offset_align);
  			DECL_FIELD_OFFSET (gnu_field) = gnu_pos;
--- 2644,2652 ----
  		      = create_field_decl
  			(DECL_NAME (gnu_old_field), gnu_field_type, gnu_type,
  			 0, gnu_size, gnu_new_pos,
! 			 !DECL_NONADDRESSABLE_P (gnu_old_field));
  
! 		    if (!TREE_CONSTANT (gnu_pos))
  		      {
  			normalize_offset (&gnu_pos, &gnu_bitpos, offset_align);
  			DECL_FIELD_OFFSET (gnu_field) = gnu_pos;
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2622,2641 ****
  
  		    DECL_INTERNAL_P (gnu_field)
  		      = DECL_INTERNAL_P (gnu_old_field);
! 		    SET_DECL_ORIGINAL_FIELD (gnu_field,
! 		        (DECL_ORIGINAL_FIELD (gnu_old_field) != 0
! 			 ? DECL_ORIGINAL_FIELD (gnu_old_field)
! 			 : gnu_old_field));
  		    DECL_DISCRIMINANT_NUMBER (gnu_field)
  		      = DECL_DISCRIMINANT_NUMBER (gnu_old_field);
  		    TREE_THIS_VOLATILE (gnu_field)
  		      = TREE_THIS_VOLATILE (gnu_old_field);
  		    TREE_CHAIN (gnu_field) = gnu_field_list;
  		    gnu_field_list = gnu_field;
! 		    save_gnu_tree (gnat_field, gnu_field, 0);
  		  }
  
! 	      finish_record_type (gnu_type, nreverse (gnu_field_list), 1, 0);
  
  	      /* Now set the size, alignment and alias set of the new type to
  		 match that of the old one, doing any substitutions, as
--- 2662,2692 ----
  
  		    DECL_INTERNAL_P (gnu_field)
  		      = DECL_INTERNAL_P (gnu_old_field);
! 		    SET_DECL_ORIGINAL_FIELD
! 		      (gnu_field, (DECL_ORIGINAL_FIELD (gnu_old_field)
! 				   ? DECL_ORIGINAL_FIELD (gnu_old_field)
! 				   : gnu_old_field));
  		    DECL_DISCRIMINANT_NUMBER (gnu_field)
  		      = DECL_DISCRIMINANT_NUMBER (gnu_old_field);
  		    TREE_THIS_VOLATILE (gnu_field)
  		      = TREE_THIS_VOLATILE (gnu_old_field);
  		    TREE_CHAIN (gnu_field) = gnu_field_list;
  		    gnu_field_list = gnu_field;
! 		    save_gnu_tree (gnat_field, gnu_field, false);
  		  }
  
! 	      /* Now go through the entities again looking for Itypes that
! 		 we have not elaborated but should (e.g., Etypes of fields
! 		 that have Original_Components).  */
! 	      for (gnat_field = First_Entity (gnat_entity);
! 		   Present (gnat_field); gnat_field = Next_Entity (gnat_field))
! 		if ((Ekind (gnat_field) == E_Discriminant
! 		     || Ekind (gnat_field) == E_Component)
! 		    && !present_gnu_tree (Etype (gnat_field)))
! 		  gnat_to_gnu_entity (Etype (gnat_field), NULL_TREE, 0);
! 
! 	      finish_record_type (gnu_type, nreverse (gnu_field_list),
! 				  true, false);
  
  	      /* Now set the size, alignment and alias set of the new type to
  		 match that of the old one, doing any substitutions, as
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2644,2651 ****
  	      TYPE_SIZE (gnu_type) = TYPE_SIZE (gnu_base_type);
  	      TYPE_SIZE_UNIT (gnu_type) = TYPE_SIZE_UNIT (gnu_base_type);
  	      SET_TYPE_ADA_SIZE (gnu_type, TYPE_ADA_SIZE (gnu_base_type));
! 	      TYPE_ALIAS_SET (gnu_type) = get_alias_set (gnu_base_type);
! 	      record_component_aliases (gnu_type);
  
  	      if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_type)))
  		for (gnu_temp = gnu_subst_list;
--- 2695,2701 ----
  	      TYPE_SIZE (gnu_type) = TYPE_SIZE (gnu_base_type);
  	      TYPE_SIZE_UNIT (gnu_type) = TYPE_SIZE_UNIT (gnu_base_type);
  	      SET_TYPE_ADA_SIZE (gnu_type, TYPE_ADA_SIZE (gnu_base_type));
! 	      copy_alias_set (gnu_type, gnu_base_type);
  
  	      if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_type)))
  		for (gnu_temp = gnu_subst_list;
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2663,2676 ****
  					  TREE_PURPOSE (gnu_temp),
  					  TREE_VALUE (gnu_temp));
  
! 	      if (TYPE_ADA_SIZE (gnu_type) != 0
! 		  && CONTAINS_PLACEHOLDER_P (TYPE_ADA_SIZE (gnu_type)))
  		for (gnu_temp = gnu_subst_list;
  		     gnu_temp; gnu_temp = TREE_CHAIN (gnu_temp))
! 		  SET_TYPE_ADA_SIZE (gnu_type,
! 		      substitute_in_expr (TYPE_ADA_SIZE (gnu_type),
! 					  TREE_PURPOSE (gnu_temp),
! 					  TREE_VALUE (gnu_temp)));
  
  	      /* Recompute the mode of this record type now that we know its
  		 actual size.  */
--- 2713,2725 ----
  					  TREE_PURPOSE (gnu_temp),
  					  TREE_VALUE (gnu_temp));
  
! 	      if (CONTAINS_PLACEHOLDER_P (TYPE_ADA_SIZE (gnu_type)))
  		for (gnu_temp = gnu_subst_list;
  		     gnu_temp; gnu_temp = TREE_CHAIN (gnu_temp))
! 		  SET_TYPE_ADA_SIZE
! 		    (gnu_type, substitute_in_expr (TYPE_ADA_SIZE (gnu_type),
! 						   TREE_PURPOSE (gnu_temp),
! 						   TREE_VALUE (gnu_temp)));
  
  	      /* Recompute the mode of this record type now that we know its
  		 actual size.  */
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2701,2717 ****
  							 gnu_subtype_marker,
  							 0, NULL_TREE,
  							 NULL_TREE, 0),
! 				      0, 0);
  		}
  
  	      TYPE_VOLATILE (gnu_type) = Treat_As_Volatile (gnat_entity);
  	      TYPE_NAME (gnu_type) = gnu_entity_id;
  	      TYPE_STUB_DECL (gnu_type)
! 		= pushdecl (build_decl (TYPE_DECL, TYPE_NAME (gnu_type),
! 				      gnu_type));
! 	      DECL_ARTIFICIAL (TYPE_STUB_DECL (gnu_type)) = 1;
! 	      DECL_IGNORED_P (TYPE_STUB_DECL (gnu_type)) = ! debug_info_p;
! 	      rest_of_type_compilation (gnu_type, global_bindings_p ());
  	    }
  
  	  /* Otherwise, go down all the components in the new type and
--- 2750,2763 ----
  							 gnu_subtype_marker,
  							 0, NULL_TREE,
  							 NULL_TREE, 0),
! 				      false, false);
  		}
  
  	      TYPE_VOLATILE (gnu_type) = Treat_As_Volatile (gnat_entity);
  	      TYPE_NAME (gnu_type) = gnu_entity_id;
  	      TYPE_STUB_DECL (gnu_type)
! 		= create_type_decl (TYPE_NAME (gnu_type), gnu_type,
! 				    NULL, true, debug_info_p, gnat_entity);
  	    }
  
  	  /* Otherwise, go down all the components in the new type and
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2720,2738 ****
  	    for (gnat_temp = First_Entity (gnat_entity); Present (gnat_temp);
  		 gnat_temp = Next_Entity (gnat_temp))
  	      if ((Ekind (gnat_temp) == E_Discriminant
! 		   && ! Is_Unchecked_Union (gnat_base_type))
  		  || Ekind (gnat_temp) == E_Component)
  		save_gnu_tree (gnat_temp,
! 			       get_gnu_tree
! 			       (Original_Record_Component (gnat_temp)), 0);
  	}
        break;
  
      case E_Access_Subprogram_Type:
        /* If we are not defining this entity, and we have incomplete
  	 entities being processed above us, make a dummy type and
  	 fill it in later.  */
!       if (! definition && defer_incomplete_level != 0)
  	{
  	  struct incomplete *p
  	    = (struct incomplete *) xmalloc (sizeof (struct incomplete));
--- 2766,2785 ----
  	    for (gnat_temp = First_Entity (gnat_entity); Present (gnat_temp);
  		 gnat_temp = Next_Entity (gnat_temp))
  	      if ((Ekind (gnat_temp) == E_Discriminant
! 		   && !Is_Unchecked_Union (gnat_base_type))
  		  || Ekind (gnat_temp) == E_Component)
  		save_gnu_tree (gnat_temp,
! 			       gnat_to_gnu_field_decl
! 			       (Original_Record_Component (gnat_temp)), false);
  	}
        break;
  
      case E_Access_Subprogram_Type:
+     case E_Anonymous_Access_Subprogram_Type:
        /* If we are not defining this entity, and we have incomplete
  	 entities being processed above us, make a dummy type and
  	 fill it in later.  */
!       if (!definition && defer_incomplete_level != 0)
  	{
  	  struct incomplete *p
  	    = (struct incomplete *) xmalloc (sizeof (struct incomplete));
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2741,2750 ****
  	    = build_pointer_type
  	      (make_dummy_type (Directly_Designated_Type (gnat_entity)));
  	  gnu_decl = create_type_decl (gnu_entity_id, gnu_type, attr_list,
! 				       ! Comes_From_Source (gnat_entity),
! 				       debug_info_p);
! 	  save_gnu_tree (gnat_entity, gnu_decl, 0);
! 	  this_made_decl = saved = 1;
  
  	  p->old_type = TREE_TYPE (gnu_type);
  	  p->full_type = Directly_Designated_Type (gnat_entity);
--- 2788,2797 ----
  	    = build_pointer_type
  	      (make_dummy_type (Directly_Designated_Type (gnat_entity)));
  	  gnu_decl = create_type_decl (gnu_entity_id, gnu_type, attr_list,
! 				       !Comes_From_Source (gnat_entity),
! 				       debug_info_p, gnat_entity);
! 	  save_gnu_tree (gnat_entity, gnu_decl, false);
! 	  this_made_decl = saved = true;
  
  	  p->old_type = TREE_TYPE (gnu_type);
  	  p->full_type = Directly_Designated_Type (gnat_entity);
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2768,2780 ****
  	     ? Full_View (gnat_desig_type) : 0);
  	/* We want to know if we'll be seeing the freeze node for any
  	   incomplete type we may be pointing to.  */
! 	int in_main_unit
  	  = (Present (gnat_desig_full)
  	     ? In_Extended_Main_Code_Unit (gnat_desig_full)
  	     : In_Extended_Main_Code_Unit (gnat_desig_type));
! 	int got_fat_p = 0;
! 	int made_dummy = 0;
! 	tree gnu_desig_type = 0;
  
  	if (No (gnat_desig_full)
  	    && (Ekind (gnat_desig_type) == E_Class_Wide_Type
--- 2815,2831 ----
  	     ? Full_View (gnat_desig_type) : 0);
  	/* We want to know if we'll be seeing the freeze node for any
  	   incomplete type we may be pointing to.  */
! 	bool in_main_unit
  	  = (Present (gnat_desig_full)
  	     ? In_Extended_Main_Code_Unit (gnat_desig_full)
  	     : In_Extended_Main_Code_Unit (gnat_desig_type));
! 	bool got_fat_p = false;
! 	bool made_dummy = false;
! 	tree gnu_desig_type = NULL_TREE;
! 	enum machine_mode p_mode = mode_for_size (esize, MODE_INT, 0);
! 
! 	if (!targetm.valid_pointer_mode (p_mode))
! 	  p_mode = ptr_mode;
  
  	if (No (gnat_desig_full)
  	    && (Ekind (gnat_desig_type) == E_Class_Wide_Type
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2800,2810 ****
  	   subtype of.  This avoids problems with multiple copies of
  	   unconstrained array types.  */
  	if (Ekind (gnat_desig_type) == E_Array_Subtype
! 	    && ! Is_Constrained (gnat_desig_type))
  	  gnat_desig_type = Etype (gnat_desig_type);
  	if (Present (gnat_desig_full)
  	    && Ekind (gnat_desig_full) == E_Array_Subtype
! 	    && ! Is_Constrained (gnat_desig_full))
  	  gnat_desig_full = Etype (gnat_desig_full);
  
          /* If the designated type is a subtype of an incomplete record type,
--- 2851,2861 ----
  	   subtype of.  This avoids problems with multiple copies of
  	   unconstrained array types.  */
  	if (Ekind (gnat_desig_type) == E_Array_Subtype
! 	    && !Is_Constrained (gnat_desig_type))
  	  gnat_desig_type = Etype (gnat_desig_type);
  	if (Present (gnat_desig_full)
  	    && Ekind (gnat_desig_full) == E_Array_Subtype
! 	    && !Is_Constrained (gnat_desig_full))
  	  gnat_desig_full = Etype (gnat_desig_full);
  
          /* If the designated type is a subtype of an incomplete record type,
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2825,2847 ****
  
  	if ((Present (gnat_desig_full)
  	     && Is_Array_Type (gnat_desig_full)
! 	     && ! Is_Constrained (gnat_desig_full))
  	    || (present_gnu_tree (gnat_desig_type)
  		&& TYPE_IS_DUMMY_P (TREE_TYPE
  				     (get_gnu_tree (gnat_desig_type)))
  		&& Is_Array_Type (gnat_desig_type)
! 		&& ! Is_Constrained (gnat_desig_type))
  	    || (present_gnu_tree (gnat_desig_type)
  		&& (TREE_CODE (TREE_TYPE (get_gnu_tree (gnat_desig_type)))
  		    == UNCONSTRAINED_ARRAY_TYPE)
! 		&& (TYPE_POINTER_TO (TREE_TYPE
! 				     (get_gnu_tree (gnat_desig_type)))
! 		    == 0))
! 	    || (No (gnat_desig_full) && ! in_main_unit
! 		&& defer_incomplete_level != 0
! 		&& ! present_gnu_tree (gnat_desig_type)
  		&& Is_Array_Type (gnat_desig_type)
! 		&& ! Is_Constrained (gnat_desig_type)))
  	  {
  	    tree gnu_old
  	      = (present_gnu_tree (gnat_desig_type)
--- 2876,2897 ----
  
  	if ((Present (gnat_desig_full)
  	     && Is_Array_Type (gnat_desig_full)
! 	     && !Is_Constrained (gnat_desig_full))
  	    || (present_gnu_tree (gnat_desig_type)
  		&& TYPE_IS_DUMMY_P (TREE_TYPE
  				     (get_gnu_tree (gnat_desig_type)))
  		&& Is_Array_Type (gnat_desig_type)
! 		&& !Is_Constrained (gnat_desig_type))
  	    || (present_gnu_tree (gnat_desig_type)
  		&& (TREE_CODE (TREE_TYPE (get_gnu_tree (gnat_desig_type)))
  		    == UNCONSTRAINED_ARRAY_TYPE)
! 		&& !(TYPE_POINTER_TO (TREE_TYPE
! 				     (get_gnu_tree (gnat_desig_type)))))
! 	    || (No (gnat_desig_full) && !in_main_unit
! 		&& defer_incomplete_level
! 		&& !present_gnu_tree (gnat_desig_type)
  		&& Is_Array_Type (gnat_desig_type)
! 		&& !Is_Constrained (gnat_desig_type)))
  	  {
  	    tree gnu_old
  	      = (present_gnu_tree (gnat_desig_type)
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2850,2869 ****
  	    tree fields;
  
  	    /* Show the dummy we get will be a fat pointer.  */
! 	    got_fat_p = made_dummy = 1;
  
  	    /* If the call above got something that has a pointer, that
  	       pointer is our type.  This could have happened either
  	       because the type was elaborated or because somebody
  	       else executed the code below.  */
  	    gnu_type = TYPE_POINTER_TO (gnu_old);
! 	    if (gnu_type == 0)
  	      {
  		gnu_type = make_node (RECORD_TYPE);
  		SET_TYPE_UNCONSTRAINED_ARRAY (gnu_type, gnu_old);
  		TYPE_POINTER_TO (gnu_old) = gnu_type;
  
! 		set_lineno (gnat_entity, 0);
  		fields
  		  = chainon (chainon (NULL_TREE,
  				      create_field_decl
--- 2900,2919 ----
  	    tree fields;
  
  	    /* Show the dummy we get will be a fat pointer.  */
! 	    got_fat_p = made_dummy = true;
  
  	    /* If the call above got something that has a pointer, that
  	       pointer is our type.  This could have happened either
  	       because the type was elaborated or because somebody
  	       else executed the code below.  */
  	    gnu_type = TYPE_POINTER_TO (gnu_old);
! 	    if (!gnu_type)
  	      {
  		gnu_type = make_node (RECORD_TYPE);
  		SET_TYPE_UNCONSTRAINED_ARRAY (gnu_type, gnu_old);
  		TYPE_POINTER_TO (gnu_old) = gnu_type;
  
! 		Sloc_to_locus (Sloc (gnat_entity), &input_location);
  		fields
  		  = chainon (chainon (NULL_TREE,
  				      create_field_decl
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2878,2884 ****
  		TYPE_ALIGN (gnu_type)
  		  = MIN (BIGGEST_ALIGNMENT, 2 * POINTER_SIZE);
  		TYPE_IS_FAT_POINTER_P (gnu_type) = 1;
! 		finish_record_type (gnu_type, fields, 0, 1);
  
  		TYPE_OBJECT_RECORD_TYPE (gnu_old) = make_node (RECORD_TYPE);
  		TYPE_NAME (TYPE_OBJECT_RECORD_TYPE (gnu_old))
--- 2928,2934 ----
  		TYPE_ALIGN (gnu_type)
  		  = MIN (BIGGEST_ALIGNMENT, 2 * POINTER_SIZE);
  		TYPE_IS_FAT_POINTER_P (gnu_type) = 1;
! 		finish_record_type (gnu_type, fields, false, true);
  
  		TYPE_OBJECT_RECORD_TYPE (gnu_old) = make_node (RECORD_TYPE);
  		TYPE_NAME (TYPE_OBJECT_RECORD_TYPE (gnu_old))
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2897,2918 ****
  	   to it.  If it is a reference to an incomplete or private type with a
  	   full view that is a record, make a dummy type node and get the
  	   actual type later when we have verified it is safe.  */
! 	else if (! in_main_unit
! 		 && ! present_gnu_tree (gnat_desig_type)
  		 && Present (gnat_desig_full)
! 		 && ! present_gnu_tree (gnat_desig_full)
  		 && Is_Record_Type (gnat_desig_full))
  	  {
  	    gnu_desig_type = make_dummy_type (gnat_desig_type);
! 	    made_dummy = 1;
  	  }
  
  	/* Likewise if we are pointing to a record or array and we are to defer
  	   elaborating incomplete types.  We do this since this access type
  	   may be the full view of some private type.  Note that the
  	   unconstrained array case is handled above. */
! 	else if ((! in_main_unit || imported_p) && defer_incomplete_level != 0
! 		 && ! present_gnu_tree (gnat_desig_type)
  		 && ((Is_Record_Type (gnat_desig_type)
  		      || Is_Array_Type (gnat_desig_type))
  		     || (Present (gnat_desig_full)
--- 2947,2968 ----
  	   to it.  If it is a reference to an incomplete or private type with a
  	   full view that is a record, make a dummy type node and get the
  	   actual type later when we have verified it is safe.  */
! 	else if (!in_main_unit
! 		 && !present_gnu_tree (gnat_desig_type)
  		 && Present (gnat_desig_full)
! 		 && !present_gnu_tree (gnat_desig_full)
  		 && Is_Record_Type (gnat_desig_full))
  	  {
  	    gnu_desig_type = make_dummy_type (gnat_desig_type);
! 	    made_dummy = true;
  	  }
  
  	/* Likewise if we are pointing to a record or array and we are to defer
  	   elaborating incomplete types.  We do this since this access type
  	   may be the full view of some private type.  Note that the
  	   unconstrained array case is handled above. */
! 	else if ((!in_main_unit || imported_p) && defer_incomplete_level != 0
! 		 && !present_gnu_tree (gnat_desig_type)
  		 && ((Is_Record_Type (gnat_desig_type)
  		      || Is_Array_Type (gnat_desig_type))
  		     || (Present (gnat_desig_full)
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2920,2930 ****
  			     || Is_Array_Type (gnat_desig_full)))))
  	  {
  	    gnu_desig_type = make_dummy_type (gnat_desig_type);
! 	    made_dummy = 1;
  	  }
  	else if (gnat_desig_type == gnat_entity)
  	  {
! 	    gnu_type = build_pointer_type (make_node (VOID_TYPE));
  	    TREE_TYPE (gnu_type) = TYPE_POINTER_TO (gnu_type) = gnu_type;
  	  }
  	else
--- 2970,2983 ----
  			     || Is_Array_Type (gnat_desig_full)))))
  	  {
  	    gnu_desig_type = make_dummy_type (gnat_desig_type);
! 	    made_dummy = true;
  	  }
  	else if (gnat_desig_type == gnat_entity)
  	  {
! 	    gnu_type
! 	      = build_pointer_type_for_mode (make_node (VOID_TYPE),
! 					     p_mode,
! 					     No_Strict_Aliasing (gnat_entity));
  	    TREE_TYPE (gnu_type) = TYPE_POINTER_TO (gnu_type) = gnu_type;
  	  }
  	else
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2934,2947 ****
  	   type.  If so, just return it.  */
  	if (present_gnu_tree (gnat_entity))
  	  {
! 	    maybe_present = 1;
  	    break;
  	  }
  
  	/* If we have a GCC type for the designated type, possibly modify it
  	   if we are pointing only to constant objects and then make a pointer
  	   to it.  Don't do this for unconstrained arrays.  */
! 	if (gnu_type == 0 && gnu_desig_type != 0)
  	  {
  	    if (Is_Access_Constant (gnat_entity)
  		&& TREE_CODE (gnu_desig_type) != UNCONSTRAINED_ARRAY_TYPE)
--- 2987,3000 ----
  	   type.  If so, just return it.  */
  	if (present_gnu_tree (gnat_entity))
  	  {
! 	    maybe_present = true;
  	    break;
  	  }
  
  	/* If we have a GCC type for the designated type, possibly modify it
  	   if we are pointing only to constant objects and then make a pointer
  	   to it.  Don't do this for unconstrained arrays.  */
! 	if (!gnu_type && gnu_desig_type)
  	  {
  	    if (Is_Access_Constant (gnat_entity)
  		&& TREE_CODE (gnu_desig_type) != UNCONSTRAINED_ARRAY_TYPE)
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2957,2969 ****
  		   of the call to gnat_to_gnu_type above if we are processing
  		   an access type for a record component designating the
  		   record type itself.  */
! 		if (! COMPLETE_TYPE_P (gnu_desig_type))
  		  {
  		    /* We must ensure that the pointer to variant we make will
  		       be processed by update_pointer_to when the initial type
  		       is completed. Pretend we made a dummy and let further
  		       processing act as usual.  */
! 		    made_dummy = 1;
  
  		    /* We must ensure that update_pointer_to will not retrieve
  		       the dummy variant when building a properly qualified
--- 3010,3022 ----
  		   of the call to gnat_to_gnu_type above if we are processing
  		   an access type for a record component designating the
  		   record type itself.  */
! 		if (TYPE_MODE (gnu_desig_type) == VOIDmode)
  		  {
  		    /* We must ensure that the pointer to variant we make will
  		       be processed by update_pointer_to when the initial type
  		       is completed. Pretend we made a dummy and let further
  		       processing act as usual.  */
! 		    made_dummy = true;
  
  		    /* We must ensure that update_pointer_to will not retrieve
  		       the dummy variant when building a properly qualified
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2976,2982 ****
  		  }
  	      }
  
! 	    gnu_type = build_pointer_type (gnu_desig_type);
  	  }
  
  	/* If we are not defining this object and we made a dummy pointer,
--- 3029,3037 ----
  		  }
  	      }
  
! 	    gnu_type
! 	      = build_pointer_type_for_mode (gnu_desig_type, p_mode,
! 					     No_Strict_Aliasing (gnat_entity));
  	  }
  
  	/* If we are not defining this object and we made a dummy pointer,
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2985,2991 ****
  	   actually looking up the actual type, make an entry in the
  	   deferred list.  */
  
! 	if (! in_main_unit && made_dummy)
  	  {
  	    tree gnu_old_type
  	      = TYPE_FAT_POINTER_P (gnu_type)
--- 3040,3046 ----
  	   actually looking up the actual type, make an entry in the
  	   deferred list.  */
  
! 	if (!in_main_unit && made_dummy)
  	  {
  	    tree gnu_old_type
  	      = TYPE_FAT_POINTER_P (gnu_type)
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 2999,3026 ****
  		   (TYPE_UNCONSTRAINED_ARRAY (gnu_type)));
  
  	    gnu_decl = create_type_decl (gnu_entity_id, gnu_type, attr_list,
! 					 ! Comes_From_Source (gnat_entity),
! 					 debug_info_p);
! 	    save_gnu_tree (gnat_entity, gnu_decl, 0);
! 	    this_made_decl = saved = 1;
  
  	    if (defer_incomplete_level == 0)
! 	      {
! 		update_pointer_to (TYPE_MAIN_VARIANT (gnu_old_type),
! 				   gnat_to_gnu_type (gnat_desig_type));
! 		/* Note that the call to gnat_to_gnu_type here might have
! 		   updated gnu_old_type directly, in which case it is not a
! 		   dummy type any more when we get into update_pointer_to.
  
! 		   This may happen for instance when the designated type is a
! 		   record type, because their elaboration starts with an
! 		   initial node from make_dummy_type, which may yield the same
! 		   node as the one we got.
  
! 		   Besides, variants of this non-dummy type might have been
! 		   created along the way. update_pointer_to is expected to
! 		   properly take care of those situations.  */
! 	      }
  	    else
  	      {
  		struct incomplete *p
--- 3054,3079 ----
  		   (TYPE_UNCONSTRAINED_ARRAY (gnu_type)));
  
  	    gnu_decl = create_type_decl (gnu_entity_id, gnu_type, attr_list,
! 					 !Comes_From_Source (gnat_entity),
! 					 debug_info_p, gnat_entity);
! 	    save_gnu_tree (gnat_entity, gnu_decl, false);
! 	    this_made_decl = saved = true;
  
  	    if (defer_incomplete_level == 0)
! 	      /* Note that the call to gnat_to_gnu_type here might have
! 		 updated gnu_old_type directly, in which case it is not a
! 		 dummy type any more when we get into update_pointer_to.
  
! 		 This may happen for instance when the designated type is a
! 		 record type, because their elaboration starts with an
! 		 initial node from make_dummy_type, which may yield the same
! 		 node as the one we got.
  
! 		 Besides, variants of this non-dummy type might have been
! 		 created along the way. update_pointer_to is expected to
! 		 properly take care of those situations.  */
! 	      update_pointer_to (TYPE_MAIN_VARIANT (gnu_old_type),
! 				 gnat_to_gnu_type (gnat_desig_type));
  	    else
  	      {
  		struct incomplete *p
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3036,3041 ****
--- 3089,3095 ----
        break;
  
      case E_Access_Protected_Subprogram_Type:
+     case E_Anonymous_Access_Protected_Subprogram_Type:
        if (type_annotate_only && No (Equivalent_Type (gnat_entity)))
  	gnu_type = build_pointer_type (void_type_node);
        else
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3043,3051 ****
  	gnu_type = gnat_to_gnu_type (Equivalent_Type (gnat_entity));
  
        if (Is_Itype (Directly_Designated_Type (gnat_entity))
! 	  && ! present_gnu_tree (Directly_Designated_Type (gnat_entity))
  	  && No (Freeze_Node (Directly_Designated_Type (gnat_entity)))
! 	  && ! Is_Record_Type (Scope (Directly_Designated_Type (gnat_entity))))
  	gnat_to_gnu_entity (Directly_Designated_Type (gnat_entity),
  			    NULL_TREE, 0);
  
--- 3097,3105 ----
  	gnu_type = gnat_to_gnu_type (Equivalent_Type (gnat_entity));
  
        if (Is_Itype (Directly_Designated_Type (gnat_entity))
! 	  && !present_gnu_tree (Directly_Designated_Type (gnat_entity))
  	  && No (Freeze_Node (Directly_Designated_Type (gnat_entity)))
! 	  && !Is_Record_Type (Scope (Directly_Designated_Type (gnat_entity))))
  	gnat_to_gnu_entity (Directly_Designated_Type (gnat_entity),
  			    NULL_TREE, 0);
  
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3067,3080 ****
  
        gnu_type = gnat_to_gnu_type (Etype (gnat_entity));
        if (Is_Itype (Directly_Designated_Type (gnat_entity))
! 	  && ! present_gnu_tree (Directly_Designated_Type (gnat_entity))
  	  && Is_Frozen (Directly_Designated_Type (gnat_entity))
  	  && No (Freeze_Node (Directly_Designated_Type (gnat_entity))))
  	{
  	  /* If we are not defining this entity, and we have incomplete
  	     entities being processed above us, make a dummy type and
  	     elaborate it later.  */
! 	  if (! definition && defer_incomplete_level != 0)
  	    {
  	      struct incomplete *p
  		= (struct incomplete *) xmalloc (sizeof (struct incomplete));
--- 3121,3134 ----
  
        gnu_type = gnat_to_gnu_type (Etype (gnat_entity));
        if (Is_Itype (Directly_Designated_Type (gnat_entity))
! 	  && !present_gnu_tree (Directly_Designated_Type (gnat_entity))
  	  && Is_Frozen (Directly_Designated_Type (gnat_entity))
  	  && No (Freeze_Node (Directly_Designated_Type (gnat_entity))))
  	{
  	  /* If we are not defining this entity, and we have incomplete
  	     entities being processed above us, make a dummy type and
  	     elaborate it later.  */
! 	  if (!definition && defer_incomplete_level != 0)
  	    {
  	      struct incomplete *p
  		= (struct incomplete *) xmalloc (sizeof (struct incomplete));
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3087,3102 ****
  	      p->next = defer_incomplete_list;
  	      defer_incomplete_list = p;
  	    }
!           else if
!             (IN (Ekind (Base_Type (Directly_Designated_Type (gnat_entity))),
!               Incomplete_Or_Private_Kind))
!             { ;}
  	  else
  	    gnat_to_gnu_entity (Directly_Designated_Type (gnat_entity),
  				NULL_TREE, 0);
  	}
  
!       maybe_present = 1;
        break;
  
      /* Subprogram Entities
--- 3141,3156 ----
  	      p->next = defer_incomplete_list;
  	      defer_incomplete_list = p;
  	    }
!           else if (IN (Ekind (Base_Type
! 			      (Directly_Designated_Type (gnat_entity))),
! 		       Incomplete_Or_Private_Kind))
! 	    ;
  	  else
  	    gnat_to_gnu_entity (Directly_Designated_Type (gnat_entity),
  				NULL_TREE, 0);
  	}
  
!       maybe_present = true;
        break;
  
      /* Subprogram Entities
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3167,3189 ****
  	   corresponding to that field.  This list will be saved in the
  	   TYPE_CI_CO_LIST field of the FUNCTION_TYPE node we create.  */
  	tree gnu_return_list = NULL_TREE;
  	Entity_Id gnat_param;
! 	int inline_flag = Is_Inlined (gnat_entity);
! 	int public_flag = Is_Public (gnat_entity);
! 	int extern_flag
  	  = (Is_Public (gnat_entity) && !definition) || imported_p;
! 	int pure_flag = Is_Pure (gnat_entity);
! 	int volatile_flag = No_Return (gnat_entity);
! 	int returns_by_ref = 0;
! 	int returns_unconstrained = 0;
  	tree gnu_ext_name = create_concat_name (gnat_entity, 0);
! 	int has_copy_in_out = 0;
  	int parmnum;
  
! 	if (kind == E_Subprogram_Type && ! definition)
  	  /* A parameter may refer to this type, so defer completion
  	     of any incomplete types.  */
! 	  defer_incomplete_level++, this_deferred = 1;
  
  	/* If the subprogram has an alias, it is probably inherited, so
  	   we can use the original one.  If the original "subprogram"
--- 3221,3247 ----
  	   corresponding to that field.  This list will be saved in the
  	   TYPE_CI_CO_LIST field of the FUNCTION_TYPE node we create.  */
  	tree gnu_return_list = NULL_TREE;
+ 	/* If an import pragma asks to map this subprogram to a GCC builtin,
+ 	   this is the builtin DECL node.  */
+ 	tree gnu_builtin_decl = NULL_TREE;
  	Entity_Id gnat_param;
! 	bool inline_flag = Is_Inlined (gnat_entity);
! 	bool public_flag = Is_Public (gnat_entity);
! 	bool extern_flag
  	  = (Is_Public (gnat_entity) && !definition) || imported_p;
! 	bool pure_flag = Is_Pure (gnat_entity);
! 	bool volatile_flag = No_Return (gnat_entity);
! 	bool returns_by_ref = false;
! 	bool returns_unconstrained = false;
! 	bool returns_by_target_ptr = false;
  	tree gnu_ext_name = create_concat_name (gnat_entity, 0);
! 	bool has_copy_in_out = false;
  	int parmnum;
  
! 	if (kind == E_Subprogram_Type && !definition)
  	  /* A parameter may refer to this type, so defer completion
  	     of any incomplete types.  */
! 	  defer_incomplete_level++, this_deferred = true;
  
  	/* If the subprogram has an alias, it is probably inherited, so
  	   we can use the original one.  If the original "subprogram"
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3207,3212 ****
--- 3265,3284 ----
  	    break;
  	  }
  
+ 	/* If this subprogram is expectedly bound to a GCC builtin, fetch the
+ 	   corresponding DECL node.
+ 
+ 	   We still want the parameter associations to take place because the
+ 	   proper generation of calls depends on it (a GNAT parameter without
+ 	   a corresponding GCC tree has a very specific meaning), so we don't
+ 	   just break here.  */
+ 	if (Convention (gnat_entity) == Convention_Intrinsic)
+ 	  gnu_builtin_decl = builtin_decl_for (gnu_ext_name);
+ 
+ 	/* ??? What if we don't find the builtin node above ? warn ? err ?
+ 	   In the current state we neither warn nor err, and calls will just
+ 	   be handled as for regular subprograms. */
+ 
  	if (kind == E_Function || kind == E_Subprogram_Type)
  	  gnu_return_type = gnat_to_gnu_type (Etype (gnat_entity));
  
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3214,3220 ****
  	   return type of this function the pointer and mark the decl.  */
  	if (Returns_By_Ref (gnat_entity))
  	  {
! 	    returns_by_ref = 1;
  	    gnu_return_type = build_pointer_type (gnu_return_type);
  	  }
  
--- 3286,3292 ----
  	   return type of this function the pointer and mark the decl.  */
  	if (Returns_By_Ref (gnat_entity))
  	  {
! 	    returns_by_ref = true;
  	    gnu_return_type = build_pointer_type (gnu_return_type);
  	  }
  
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3234,3240 ****
  	else if (TREE_CODE (gnu_return_type) == UNCONSTRAINED_ARRAY_TYPE)
  	  {
  	    gnu_return_type = TREE_TYPE (gnu_return_type);
! 	    returns_unconstrained = 1;
  	  }
  
  	/* If the type requires a transient scope, the result is allocated
--- 3306,3312 ----
  	else if (TREE_CODE (gnu_return_type) == UNCONSTRAINED_ARRAY_TYPE)
  	  {
  	    gnu_return_type = TREE_TYPE (gnu_return_type);
! 	    returns_unconstrained = true;
  	  }
  
  	/* If the type requires a transient scope, the result is allocated
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3243,3249 ****
  	else if (Requires_Transient_Scope (Etype (gnat_entity)))
  	  {
  	    gnu_return_type = build_pointer_type (gnu_return_type);
! 	    returns_unconstrained = 1;
  	  }
  
  	/* If the type is a padded type and the underlying type would not
--- 3315,3321 ----
  	else if (Requires_Transient_Scope (Etype (gnat_entity)))
  	  {
  	    gnu_return_type = build_pointer_type (gnu_return_type);
! 	    returns_unconstrained = true;
  	  }
  
  	/* If the type is a padded type and the underlying type would not
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3251,3264 ****
  	   return the underlying type.  */
  	else if (TREE_CODE (gnu_return_type) == RECORD_TYPE
  		 && TYPE_IS_PADDING_P (gnu_return_type)
! 		 && (! default_pass_by_ref (TREE_TYPE
! 					    (TYPE_FIELDS (gnu_return_type)))
  		     || Has_Foreign_Convention (gnat_entity)))
  	  gnu_return_type = TREE_TYPE (TYPE_FIELDS (gnu_return_type));
  
! 	/* Look at all our parameters and get the type of
! 	   each.  While doing this, build a copy-out structure if
! 	   we need one.  */
  
  	/* If the return type has a size that overflows, we cannot have
  	   a function that returns that type.  This usage doesn't make
--- 3323,3346 ----
  	   return the underlying type.  */
  	else if (TREE_CODE (gnu_return_type) == RECORD_TYPE
  		 && TYPE_IS_PADDING_P (gnu_return_type)
! 		 && (!default_pass_by_ref (TREE_TYPE
! 					   (TYPE_FIELDS (gnu_return_type)))
  		     || Has_Foreign_Convention (gnat_entity)))
  	  gnu_return_type = TREE_TYPE (TYPE_FIELDS (gnu_return_type));
  
! 	/* If the return type is unconstrained, that means it must have a
! 	   maximum size.  We convert the function into a procedure and its
! 	   caller will pass a pointer to an object of that maximum size as the
! 	   first parameter when we call the function.  */
! 	if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_return_type)))
! 	  {
! 	    returns_by_target_ptr = true;
! 	    gnu_param_list
! 	      = create_param_decl (get_identifier ("TARGET"),
! 				   build_reference_type (gnu_return_type),
! 				   true);
! 	    gnu_return_type = void_type_node;
! 	  }
  
  	/* If the return type has a size that overflows, we cannot have
  	   a function that returns that type.  This usage doesn't make
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3272,3280 ****
  	    TYPE_SIZE (gnu_return_type) = bitsize_zero_node;
  	    TYPE_SIZE_UNIT (gnu_return_type) = size_zero_node;
  	    TYPE_MAIN_VARIANT (gnu_return_type) = gnu_return_type;
! 	    TYPE_NEXT_VARIANT (gnu_return_type) = 0;
  	  }
  
  	for (gnat_param = First_Formal (gnat_entity), parmnum = 0;
  	     Present (gnat_param);
  	     gnat_param = Next_Formal_With_Extras (gnat_param), parmnum++)
--- 3354,3366 ----
  	    TYPE_SIZE (gnu_return_type) = bitsize_zero_node;
  	    TYPE_SIZE_UNIT (gnu_return_type) = size_zero_node;
  	    TYPE_MAIN_VARIANT (gnu_return_type) = gnu_return_type;
! 	    TYPE_NEXT_VARIANT (gnu_return_type) = NULL_TREE;
  	  }
  
+ 	/* Look at all our parameters and get the type of
+ 	   each.  While doing this, build a copy-out structure if
+ 	   we need one.  */
+ 
  	for (gnat_param = First_Formal (gnat_entity), parmnum = 0;
  	     Present (gnat_param);
  	     gnat_param = Next_Formal_With_Extras (gnat_param), parmnum++)
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3282,3314 ****
  	    tree gnu_param_name = get_entity_name (gnat_param);
  	    tree gnu_param_type = gnat_to_gnu_type (Etype (gnat_param));
  	    tree gnu_param, gnu_field;
! 	    int by_ref_p = 0;
! 	    int by_descr_p = 0;
! 	    int by_component_ptr_p = 0;
! 	    int copy_in_copy_out_flag = 0;
! 	    int req_by_copy = 0, req_by_ref = 0;
  
! 	    /* See if a Mechanism was supplied that forced this
! 	       parameter to be passed one way or another.  */
! 	    if (Is_Valued_Procedure (gnat_entity) && parmnum == 0)
  	      req_by_copy = 1;
  	    else if (Mechanism (gnat_param) == Default)
  	      ;
  	    else if (Mechanism (gnat_param) == By_Copy)
! 	      req_by_copy = 1;
  	    else if (Mechanism (gnat_param) == By_Reference)
! 	      req_by_ref = 1;
  	    else if (Mechanism (gnat_param) <= By_Descriptor)
! 	      by_descr_p = 1;
  	    else if (Mechanism (gnat_param) > 0)
  	      {
  		if (TREE_CODE (gnu_param_type) == UNCONSTRAINED_ARRAY_TYPE
  		    || TREE_CODE (TYPE_SIZE (gnu_param_type)) != INTEGER_CST
  		    || 0 < compare_tree_int (TYPE_SIZE (gnu_param_type),
  					     Mechanism (gnat_param)))
! 		  req_by_ref = 1;
  		else
! 		  req_by_copy = 1;
  	      }
  	    else
  	      post_error ("unsupported mechanism for&", gnat_param);
--- 3368,3406 ----
  	    tree gnu_param_name = get_entity_name (gnat_param);
  	    tree gnu_param_type = gnat_to_gnu_type (Etype (gnat_param));
  	    tree gnu_param, gnu_field;
! 	    bool by_ref_p = false;
! 	    bool by_descr_p = false;
! 	    bool by_component_ptr_p = false;
! 	    bool copy_in_copy_out_flag = false;
! 	    bool req_by_copy = false, req_by_ref = false;
  
! 	    /* Builtins are expanded inline and there is no real call sequence
! 	       involved. so the type expected by the underlying expander is
! 	       always the type of each argument "as is".  */
! 	    if (gnu_builtin_decl)
  	      req_by_copy = 1;
+ 
+ 	    /* Otherwise, see if a Mechanism was supplied that forced this
+ 	       parameter to be passed one way or another.  */
+ 	    else if (Is_Valued_Procedure (gnat_entity) && parmnum == 0)
+ 	      req_by_copy = true;
  	    else if (Mechanism (gnat_param) == Default)
  	      ;
  	    else if (Mechanism (gnat_param) == By_Copy)
! 	      req_by_copy = true;
  	    else if (Mechanism (gnat_param) == By_Reference)
! 	      req_by_ref = true;
  	    else if (Mechanism (gnat_param) <= By_Descriptor)
! 	      by_descr_p = true;
  	    else if (Mechanism (gnat_param) > 0)
  	      {
  		if (TREE_CODE (gnu_param_type) == UNCONSTRAINED_ARRAY_TYPE
  		    || TREE_CODE (TYPE_SIZE (gnu_param_type)) != INTEGER_CST
  		    || 0 < compare_tree_int (TYPE_SIZE (gnu_param_type),
  					     Mechanism (gnat_param)))
! 		  req_by_ref = true;
  		else
! 		  req_by_copy = true;
  	      }
  	    else
  	      post_error ("unsupported mechanism for&", gnat_param);
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3319,3326 ****
  	    if (TREE_CODE (gnu_param_type) == RECORD_TYPE
  		&& TYPE_IS_PADDING_P (gnu_param_type)
  		&& (req_by_ref || Has_Foreign_Convention (gnat_entity)
! 		    || ! must_pass_by_ref (TREE_TYPE (TYPE_FIELDS
! 						      (gnu_param_type)))))
  	      gnu_param_type = TREE_TYPE (TYPE_FIELDS (gnu_param_type));
  
  	    /* If this is an IN parameter it is read-only, so make a variant
--- 3411,3418 ----
  	    if (TREE_CODE (gnu_param_type) == RECORD_TYPE
  		&& TYPE_IS_PADDING_P (gnu_param_type)
  		&& (req_by_ref || Has_Foreign_Convention (gnat_entity)
! 		    || !must_pass_by_ref (TREE_TYPE (TYPE_FIELDS
! 						     (gnu_param_type)))))
  	      gnu_param_type = TREE_TYPE (TYPE_FIELDS (gnu_param_type));
  
  	    /* If this is an IN parameter it is read-only, so make a variant
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3331,3338 ****
  	       self-referential type.  */
  	    if (Ekind (gnat_param) == E_In_Parameter
  		&& TREE_CODE (gnu_param_type) != UNCONSTRAINED_ARRAY_TYPE
! 		&& ! (TYPE_SIZE (gnu_param_type) != 0
! 		      && CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_param_type))))
  	      gnu_param_type
  		= build_qualified_type (gnu_param_type,
  					(TYPE_QUALS (gnu_param_type)
--- 3423,3429 ----
  	       self-referential type.  */
  	    if (Ekind (gnat_param) == E_In_Parameter
  		&& TREE_CODE (gnu_param_type) != UNCONSTRAINED_ARRAY_TYPE
! 		&& !CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_param_type)))
  	      gnu_param_type
  		= build_qualified_type (gnu_param_type,
  					(TYPE_QUALS (gnu_param_type)
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3352,3362 ****
  	      gnu_param_type
  		= build_pointer_type
  		  (build_vms_descriptor (gnu_param_type,
! 					 Mechanism (gnat_param),
! 					 gnat_entity));
  
  	    else if (Has_Foreign_Convention (gnat_entity)
! 		     && ! req_by_copy
  		     && TREE_CODE (gnu_param_type) == ARRAY_TYPE)
  	      {
  		/* Strip off any multi-dimensional entries, then strip
--- 3443,3452 ----
  	      gnu_param_type
  		= build_pointer_type
  		  (build_vms_descriptor (gnu_param_type,
! 					 Mechanism (gnat_param), gnat_entity));
  
  	    else if (Has_Foreign_Convention (gnat_entity)
! 		     && !req_by_copy
  		     && TREE_CODE (gnu_param_type) == ARRAY_TYPE)
  	      {
  		/* Strip off any multi-dimensional entries, then strip
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3365,3371 ****
  		       && TYPE_MULTI_ARRAY_P (TREE_TYPE (gnu_param_type)))
  		  gnu_param_type = TREE_TYPE (gnu_param_type);
  
! 		by_component_ptr_p = 1;
  		gnu_param_type = TREE_TYPE (gnu_param_type);
  
  		if (Ekind (gnat_param) == E_In_Parameter)
--- 3455,3461 ----
  		       && TYPE_MULTI_ARRAY_P (TREE_TYPE (gnu_param_type)))
  		  gnu_param_type = TREE_TYPE (gnu_param_type);
  
! 		by_component_ptr_p = true;
  		gnu_param_type = TREE_TYPE (gnu_param_type);
  
  		if (Ekind (gnat_param) == E_In_Parameter)
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3383,3389 ****
  		     && TYPE_FAT_POINTER_P (gnu_param_type))
  	      gnu_param_type
  		= make_type_from_size (gnu_param_type,
! 				       size_int (POINTER_SIZE), 0);
  
  	    /* If we must pass or were requested to pass by reference, do so.
  	       If we were requested to pass by copy, do so.
--- 3473,3479 ----
  		     && TYPE_FAT_POINTER_P (gnu_param_type))
  	      gnu_param_type
  		= make_type_from_size (gnu_param_type,
! 				       size_int (POINTER_SIZE), false);
  
  	    /* If we must pass or were requested to pass by reference, do so.
  	       If we were requested to pass by copy, do so.
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3392,3398 ****
  	       all integer and FP types that way too.  For Convention Ada,
  	       use the standard Ada default.  */
  	    else if (must_pass_by_ref (gnu_param_type) || req_by_ref
! 		     || (! req_by_copy
  			 && ((Has_Foreign_Convention (gnat_entity)
  			      && (Ekind (gnat_param) != E_In_Parameter
  				  || AGGREGATE_TYPE_P (gnu_param_type)))
--- 3482,3488 ----
  	       all integer and FP types that way too.  For Convention Ada,
  	       use the standard Ada default.  */
  	    else if (must_pass_by_ref (gnu_param_type) || req_by_ref
! 		     || (!req_by_copy
  			 && ((Has_Foreign_Convention (gnat_entity)
  			      && (Ekind (gnat_param) != E_In_Parameter
  				  || AGGREGATE_TYPE_P (gnu_param_type)))
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3404,3418 ****
  				     || FLOAT_TYPE_P (gnu_param_type)))
  			     /* For convention Ada, see if we pass by reference
  				by default.  */
! 			     || (! Has_Foreign_Convention (gnat_entity)
  				 && default_pass_by_ref (gnu_param_type)))))
  	      {
  		gnu_param_type = build_reference_type (gnu_param_type);
! 		by_ref_p = 1;
  	      }
  
  	    else if (Ekind (gnat_param) != E_In_Parameter)
! 	      copy_in_copy_out_flag = 1;
  
  	    if (req_by_copy && (by_ref_p || by_component_ptr_p))
  	      post_error ("?cannot pass & by copy", gnat_param);
--- 3494,3508 ----
  				     || FLOAT_TYPE_P (gnu_param_type)))
  			     /* For convention Ada, see if we pass by reference
  				by default.  */
! 			     || (!Has_Foreign_Convention (gnat_entity)
  				 && default_pass_by_ref (gnu_param_type)))))
  	      {
  		gnu_param_type = build_reference_type (gnu_param_type);
! 		by_ref_p = true;
  	      }
  
  	    else if (Ekind (gnat_param) != E_In_Parameter)
! 	      copy_in_copy_out_flag = true;
  
  	    if (req_by_copy && (by_ref_p || by_component_ptr_p))
  	      post_error ("?cannot pass & by copy", gnat_param);
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3436,3454 ****
  	       check for packed arrays of records. This may lead to useless
  	       copy-in operations, but in very rare cases only, as these would
  	       be exceptions in a set of already exceptional situations.  */
! 	    if (Ekind (gnat_param) == E_Out_Parameter && ! by_ref_p
  		&& ((Is_Valued_Procedure (gnat_entity) && parmnum == 0)
! 		    || (! by_descr_p
! 			&& ! POINTER_TYPE_P (gnu_param_type)
! 			&& ! AGGREGATE_TYPE_P (gnu_param_type)))
! 		&& ! (Is_Array_Type (Etype (gnat_param))
! 		      && Is_Packed (Etype (gnat_param))
! 		      && Is_Composite_Type (Component_Type
! 					    (Etype (gnat_param)))))
! 	      gnu_param = 0;
  	    else
  	      {
- 		set_lineno (gnat_param, 0);
  		gnu_param
  		  = create_param_decl
  		    (gnu_param_name, gnu_param_type,
--- 3526,3543 ----
  	       check for packed arrays of records. This may lead to useless
  	       copy-in operations, but in very rare cases only, as these would
  	       be exceptions in a set of already exceptional situations.  */
! 	    if (Ekind (gnat_param) == E_Out_Parameter && !by_ref_p
  		&& ((Is_Valued_Procedure (gnat_entity) && parmnum == 0)
! 		    || (!by_descr_p
! 			&& !POINTER_TYPE_P (gnu_param_type)
! 			&& !AGGREGATE_TYPE_P (gnu_param_type)))
! 		&& !(Is_Array_Type (Etype (gnat_param))
! 		     && Is_Packed (Etype (gnat_param))
! 		     && Is_Composite_Type (Component_Type
! 					   (Etype (gnat_param)))))
! 	      gnu_param = NULL_TREE;
  	    else
  	      {
  		gnu_param
  		  = create_param_decl
  		    (gnu_param_name, gnu_param_type,
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3461,3467 ****
  		DECL_POINTS_TO_READONLY_P (gnu_param)
  		  = (Ekind (gnat_param) == E_In_Parameter
  		     && (by_ref_p || by_component_ptr_p));
! 		save_gnu_tree (gnat_param, gnu_param, 0);
  		gnu_param_list = chainon (gnu_param, gnu_param_list);
  
  		/* If a parameter is a pointer, this function may modify
--- 3550,3558 ----
  		DECL_POINTS_TO_READONLY_P (gnu_param)
  		  = (Ekind (gnat_param) == E_In_Parameter
  		     && (by_ref_p || by_component_ptr_p));
! 		Sloc_to_locus (Sloc (gnat_param),
! 			       &DECL_SOURCE_LOCATION (gnu_param));
! 		save_gnu_tree (gnat_param, gnu_param, false);
  		gnu_param_list = chainon (gnu_param, gnu_param_list);
  
  		/* If a parameter is a pointer, this function may modify
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3471,3494 ****
  		   case also handles by-ref parameters.  */
  		if (POINTER_TYPE_P (gnu_param_type)
  		    ||  TYPE_FAT_POINTER_P (gnu_param_type))
! 		  pure_flag = 0;
  	      }
  
  	    if (copy_in_copy_out_flag)
  	      {
! 		if (! has_copy_in_out)
  		  {
! 		    if (TREE_CODE (gnu_return_type) != VOID_TYPE)
! 		      gigi_abort (111);
! 
  		    gnu_return_type = make_node (RECORD_TYPE);
  		    TYPE_NAME (gnu_return_type) = get_identifier ("RETURN");
! 		    has_copy_in_out = 1;
  		  }
  
- 		set_lineno (gnat_param, 0);
  		gnu_field = create_field_decl (gnu_param_name, gnu_param_type,
  					       gnu_return_type, 0, 0, 0, 0);
  		TREE_CHAIN (gnu_field) = gnu_field_list;
  		gnu_field_list = gnu_field;
  		gnu_return_list = tree_cons (gnu_field, gnu_param,
--- 3562,3584 ----
  		   case also handles by-ref parameters.  */
  		if (POINTER_TYPE_P (gnu_param_type)
  		    ||  TYPE_FAT_POINTER_P (gnu_param_type))
! 		  pure_flag = false;
  	      }
  
  	    if (copy_in_copy_out_flag)
  	      {
! 		if (!has_copy_in_out)
  		  {
! 		    gcc_assert (TREE_CODE (gnu_return_type) == VOID_TYPE);
  		    gnu_return_type = make_node (RECORD_TYPE);
  		    TYPE_NAME (gnu_return_type) = get_identifier ("RETURN");
! 		    has_copy_in_out = true;
  		  }
  
  		gnu_field = create_field_decl (gnu_param_name, gnu_param_type,
  					       gnu_return_type, 0, 0, 0, 0);
+ 		Sloc_to_locus (Sloc (gnat_param),
+ 			       &DECL_SOURCE_LOCATION (gnu_field));
  		TREE_CHAIN (gnu_field) = gnu_field_list;
  		gnu_field_list = gnu_field;
  		gnu_return_list = tree_cons (gnu_field, gnu_param,
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3498,3507 ****
  
  	/* Do not compute record for out parameters if subprogram is
  	   stubbed since structures are incomplete for the back-end.  */
! 	if (gnu_field_list != 0
  	    && Convention (gnat_entity) != Convention_Stubbed)
  	  finish_record_type (gnu_return_type, nreverse (gnu_field_list),
! 			      0, 0);
  
  	/* If we have a CICO list but it has only one entry, we convert
  	   this function into a function that simply returns that one
--- 3588,3597 ----
  
  	/* Do not compute record for out parameters if subprogram is
  	   stubbed since structures are incomplete for the back-end.  */
! 	if (gnu_field_list
  	    && Convention (gnat_entity) != Convention_Stubbed)
  	  finish_record_type (gnu_return_type, nreverse (gnu_field_list),
! 			      false, false);
  
  	/* If we have a CICO list but it has only one entry, we convert
  	   this function into a function that simply returns that one
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3518,3524 ****
  	    attr->next = attr_list;
  	    attr->type = ATTR_MACHINE_ATTRIBUTE;
  	    attr->name = get_identifier ("stdcall");
! 	    attr->arg = NULL_TREE;
  	    attr->error_point = gnat_entity;
  	    attr_list = attr;
  	  }
--- 3608,3614 ----
  	    attr->next = attr_list;
  	    attr->type = ATTR_MACHINE_ATTRIBUTE;
  	    attr->name = get_identifier ("stdcall");
! 	    attr->args = NULL_TREE;
  	    attr->error_point = gnat_entity;
  	    attr_list = attr;
  	  }
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3532,3549 ****
  	  = create_subprog_type (gnu_return_type, gnu_param_list,
  				 gnu_return_list, returns_unconstrained,
  				 returns_by_ref,
! 				 Function_Returns_With_DSP (gnat_entity));
! 
! 	/* ??? For now, don't consider nested functions pure.  */
! 	if (! global_bindings_p ())
! 	  pure_flag = 0;
  
  	/* A subprogram (something that doesn't return anything) shouldn't
  	   be considered Pure since there would be no reason for such a
  	   subprogram.  Note that procedures with Out (or In Out) parameters
  	   have already been converted into a function with a return type. */
  	if (TREE_CODE (gnu_return_type) == VOID_TYPE)
! 	  pure_flag = 0;
  
  	gnu_type
  	  = build_qualified_type (gnu_type,
--- 3622,3636 ----
  	  = create_subprog_type (gnu_return_type, gnu_param_list,
  				 gnu_return_list, returns_unconstrained,
  				 returns_by_ref,
! 				 Function_Returns_With_DSP (gnat_entity),
! 				 returns_by_target_ptr);
  
  	/* A subprogram (something that doesn't return anything) shouldn't
  	   be considered Pure since there would be no reason for such a
  	   subprogram.  Note that procedures with Out (or In Out) parameters
  	   have already been converted into a function with a return type. */
  	if (TREE_CODE (gnu_return_type) == VOID_TYPE)
! 	  pure_flag = false;
  
  	gnu_type
  	  = build_qualified_type (gnu_type,
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3551,3563 ****
  				   | (TYPE_QUAL_CONST * pure_flag)
  				   | (TYPE_QUAL_VOLATILE * volatile_flag)));
  
! 	set_lineno (gnat_entity, 0);
  
  	/* If there was no specified Interface_Name and the external and
  	   internal names of the subprogram are the same, only use the
  	   internal name to allow disambiguation of nested subprograms.  */
  	if (No (Interface_Name (gnat_entity)) && gnu_ext_name == gnu_entity_id)
! 	  gnu_ext_name = 0;
  
  	/* If we are defining the subprogram and it has an Address clause
  	   we must get the address expression from the saved GCC tree for the
--- 3638,3667 ----
  				   | (TYPE_QUAL_CONST * pure_flag)
  				   | (TYPE_QUAL_VOLATILE * volatile_flag)));
  
! 	Sloc_to_locus (Sloc (gnat_entity), &input_location);
! 
!         /* If we have a builtin decl for that function, check the signatures
!            compatibilities.  If the signatures are compatible, use the builtin
!            decl.  If they are not, we expect the checker predicate to have
!            posted the appropriate errors, and just continue with what we have
!            so far.  */
!         if (gnu_builtin_decl)
!           {
!             tree gnu_builtin_type =  TREE_TYPE (gnu_builtin_decl);
! 
!             if (compatible_signatures_p (gnu_type, gnu_builtin_type))
!               {
!                 gnu_decl = gnu_builtin_decl;
!                 gnu_type = gnu_builtin_type;
!                 break;
!               }
!           }
  
  	/* If there was no specified Interface_Name and the external and
  	   internal names of the subprogram are the same, only use the
  	   internal name to allow disambiguation of nested subprograms.  */
  	if (No (Interface_Name (gnat_entity)) && gnu_ext_name == gnu_entity_id)
! 	  gnu_ext_name = NULL_TREE;
  
  	/* If we are defining the subprogram and it has an Address clause
  	   we must get the address expression from the saved GCC tree for the
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3568,3574 ****
  	   make it a constant.  */
  	if (Present (Address_Clause (gnat_entity)))
  	  {
! 	    tree gnu_address = 0;
  
  	    if (definition)
  	      gnu_address
--- 3672,3678 ----
  	   make it a constant.  */
  	if (Present (Address_Clause (gnat_entity)))
  	  {
! 	    tree gnu_address = NULL_TREE;
  
  	    if (definition)
  	      gnu_address
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3576,3604 ****
  		   ? get_gnu_tree (gnat_entity)
  		   : gnat_to_gnu (Expression (Address_Clause (gnat_entity))));
  
! 	    save_gnu_tree (gnat_entity, NULL_TREE, 0);
  
  	    gnu_type = build_reference_type (gnu_type);
! 	    if (gnu_address != 0)
  	      gnu_address = convert (gnu_type, gnu_address);
  
  	    gnu_decl
  	      = create_var_decl (gnu_entity_id, gnu_ext_name, gnu_type,
! 				 gnu_address, 0, Is_Public (gnat_entity),
! 				 extern_flag, 0, 0);
  	    DECL_BY_REF_P (gnu_decl) = 1;
  	  }
  
  	else if (kind == E_Subprogram_Type)
  	  gnu_decl = create_type_decl (gnu_entity_id, gnu_type, attr_list,
! 				       ! Comes_From_Source (gnat_entity),
! 				       debug_info_p);
  	else
  	  {
  	    gnu_decl = create_subprog_decl (gnu_entity_id, gnu_ext_name,
  					    gnu_type, gnu_param_list,
  					    inline_flag, public_flag,
! 					    extern_flag, attr_list);
  	    DECL_STUBBED_P (gnu_decl)
  	      = Convention (gnat_entity) == Convention_Stubbed;
  	  }
--- 3680,3709 ----
  		   ? get_gnu_tree (gnat_entity)
  		   : gnat_to_gnu (Expression (Address_Clause (gnat_entity))));
  
! 	    save_gnu_tree (gnat_entity, NULL_TREE, false);
  
  	    gnu_type = build_reference_type (gnu_type);
! 	    if (gnu_address)
  	      gnu_address = convert (gnu_type, gnu_address);
  
  	    gnu_decl
  	      = create_var_decl (gnu_entity_id, gnu_ext_name, gnu_type,
! 				 gnu_address, false, Is_Public (gnat_entity),
! 				 extern_flag, false, NULL, gnat_entity);
  	    DECL_BY_REF_P (gnu_decl) = 1;
  	  }
  
  	else if (kind == E_Subprogram_Type)
  	  gnu_decl = create_type_decl (gnu_entity_id, gnu_type, attr_list,
! 				       !Comes_From_Source (gnat_entity),
! 				       debug_info_p, gnat_entity);
  	else
  	  {
  	    gnu_decl = create_subprog_decl (gnu_entity_id, gnu_ext_name,
  					    gnu_type, gnu_param_list,
  					    inline_flag, public_flag,
! 					    extern_flag, attr_list,
! 					    gnat_entity);
  	    DECL_STUBBED_P (gnu_decl)
  	      = Convention (gnat_entity) == Convention_Stubbed;
  	  }
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3629,3635 ****
  	    {
  	      gnu_decl = gnat_to_gnu_entity (Etype (gnat_entity),
  					     NULL_TREE, 0);
! 	      maybe_present = 1;
  	    }
  
  	  break;
--- 3734,3740 ----
  	    {
  	      gnu_decl = gnat_to_gnu_entity (Etype (gnat_entity),
  					     NULL_TREE, 0);
! 	      maybe_present = true;
  	    }
  
  	  break;
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3639,3645 ****
  	 type from the full view. But always get the type from the full
  	 view for define on use types, since otherwise we won't see them! */
  
!       else if (! definition
  	       || (Is_Itype (Full_View (gnat_entity))
  		   && No (Freeze_Node (gnat_entity)))
  	       || (Is_Itype (gnat_entity)
--- 3744,3750 ----
  	 type from the full view. But always get the type from the full
  	 view for define on use types, since otherwise we won't see them! */
  
!       else if (!definition
  	       || (Is_Itype (Full_View (gnat_entity))
  		   && No (Freeze_Node (gnat_entity)))
  	       || (Is_Itype (gnat_entity)
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3647,3653 ****
  	{
  	  gnu_decl = gnat_to_gnu_entity (Full_View (gnat_entity),
                                           NULL_TREE, 0);
! 	  maybe_present = 1;
  	  break;
  	}
  
--- 3752,3758 ----
  	{
  	  gnu_decl = gnat_to_gnu_entity (Full_View (gnat_entity),
                                           NULL_TREE, 0);
! 	  maybe_present = true;
  	  break;
  	}
  
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3657,3667 ****
  
        /* Save this type as the full declaration's type so we can do any needed
  	 updates when we see it.  */
-       set_lineno (gnat_entity, 0);
        gnu_decl = create_type_decl (gnu_entity_id, gnu_type, attr_list,
! 				   ! Comes_From_Source (gnat_entity),
! 				   debug_info_p);
!       save_gnu_tree (Full_View (gnat_entity), gnu_decl, 0);
        break;
  
        /* Simple class_wide types are always viewed as their root_type
--- 3762,3771 ----
  
        /* Save this type as the full declaration's type so we can do any needed
  	 updates when we see it.  */
        gnu_decl = create_type_decl (gnu_entity_id, gnu_type, attr_list,
! 				   !Comes_From_Source (gnat_entity),
! 				   debug_info_p, gnat_entity);
!       save_gnu_tree (Full_View (gnat_entity), gnu_decl, false);
        break;
  
        /* Simple class_wide types are always viewed as their root_type
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3672,3678 ****
        else
  	gnu_type = gnat_to_gnu_type (Root_Type (gnat_entity));
  
!       maybe_present = 1;
        break;
  
      case E_Task_Type:
--- 3776,3782 ----
        else
  	gnu_type = gnat_to_gnu_type (Root_Type (gnat_entity));
  
!       maybe_present = true;
        break;
  
      case E_Task_Type:
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3684,3690 ****
        else
  	gnu_type = gnat_to_gnu_type (Corresponding_Record_Type (gnat_entity));
  
!       maybe_present = 1;
        break;
  
      case E_Label:
--- 3788,3794 ----
        else
  	gnu_type = gnat_to_gnu_type (Corresponding_Record_Type (gnat_entity));
  
!       maybe_present = true;
        break;
  
      case E_Label:
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3696,3706 ****
        /* Nothing at all to do here, so just return an ERROR_MARK and claim
  	 we've already saved it, so we don't try to.  */
        gnu_decl = error_mark_node;
!       saved = 1;
        break;
  
      default:
!       gigi_abort (113);
      }
  
    /* If we had a case where we evaluated another type and it might have
--- 3800,3810 ----
        /* Nothing at all to do here, so just return an ERROR_MARK and claim
  	 we've already saved it, so we don't try to.  */
        gnu_decl = error_mark_node;
!       saved = true;
        break;
  
      default:
!       gcc_unreachable ();
      }
  
    /* If we had a case where we evaluated another type and it might have
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3708,3721 ****
    if (maybe_present && present_gnu_tree (gnat_entity))
      {
        gnu_decl = get_gnu_tree (gnat_entity);
!       saved = 1;
      }
  
    /* If we are processing a type and there is either no decl for it or
       we just made one, do some common processing for the type, such as
       handling alignment and possible padding.  */
  
!   if ((gnu_decl == 0 || this_made_decl) && IN (kind, Type_Kind))
      {
        if (Is_Tagged_Type (gnat_entity)
  	  || Is_Class_Wide_Equivalent_Type (gnat_entity))
--- 3812,3825 ----
    if (maybe_present && present_gnu_tree (gnat_entity))
      {
        gnu_decl = get_gnu_tree (gnat_entity);
!       saved = true;
      }
  
    /* If we are processing a type and there is either no decl for it or
       we just made one, do some common processing for the type, such as
       handling alignment and possible padding.  */
  
!   if ((!gnu_decl || this_made_decl) && IN (kind, Type_Kind))
      {
        if (Is_Tagged_Type (gnat_entity)
  	  || Is_Class_Wide_Equivalent_Type (gnat_entity))
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3727,3739 ****
        /* ??? Don't set the size for a String_Literal since it is either
  	 confirming or we don't handle it properly (if the low bound is
  	 non-constant).  */
!       if (gnu_size == 0 && kind != E_String_Literal_Subtype)
  	gnu_size = validate_size (Esize (gnat_entity), gnu_type, gnat_entity,
! 				  TYPE_DECL, 0, Has_Size_Clause (gnat_entity));
  
        /* If a size was specified, see if we can make a new type of that size
  	 by rearranging the type, for example from a fat to a thin pointer.  */
!       if (gnu_size != 0)
  	{
  	  gnu_type
  	    = make_type_from_size (gnu_type, gnu_size,
--- 3831,3844 ----
        /* ??? Don't set the size for a String_Literal since it is either
  	 confirming or we don't handle it properly (if the low bound is
  	 non-constant).  */
!       if (!gnu_size && kind != E_String_Literal_Subtype)
  	gnu_size = validate_size (Esize (gnat_entity), gnu_type, gnat_entity,
! 				  TYPE_DECL, false,
! 				  Has_Size_Clause (gnat_entity));
  
        /* If a size was specified, see if we can make a new type of that size
  	 by rearranging the type, for example from a fat to a thin pointer.  */
!       if (gnu_size)
  	{
  	  gnu_type
  	    = make_type_from_size (gnu_type, gnu_size,
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3752,3763 ****
        else if (Known_Alignment (gnat_entity))
  	align = validate_alignment (Alignment (gnat_entity), gnat_entity,
  				    TYPE_ALIGN (gnu_type));
!       else if (Is_Atomic (gnat_entity) && gnu_size == 0
  	       && host_integerp (TYPE_SIZE (gnu_type), 1)
  	       && integer_pow2p (TYPE_SIZE (gnu_type)))
  	align = MIN (BIGGEST_ALIGNMENT,
  		     tree_low_cst (TYPE_SIZE (gnu_type), 1));
!       else if (Is_Atomic (gnat_entity) && gnu_size != 0
  	       && host_integerp (gnu_size, 1)
  	       && integer_pow2p (gnu_size))
  	align = MIN (BIGGEST_ALIGNMENT, tree_low_cst (gnu_size, 1));
--- 3857,3868 ----
        else if (Known_Alignment (gnat_entity))
  	align = validate_alignment (Alignment (gnat_entity), gnat_entity,
  				    TYPE_ALIGN (gnu_type));
!       else if (Is_Atomic (gnat_entity) && !gnu_size
  	       && host_integerp (TYPE_SIZE (gnu_type), 1)
  	       && integer_pow2p (TYPE_SIZE (gnu_type)))
  	align = MIN (BIGGEST_ALIGNMENT,
  		     tree_low_cst (TYPE_SIZE (gnu_type), 1));
!       else if (Is_Atomic (gnat_entity) && gnu_size
  	       && host_integerp (gnu_size, 1)
  	       && integer_pow2p (gnu_size))
  	align = MIN (BIGGEST_ALIGNMENT, tree_low_cst (gnu_size, 1));
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3765,3772 ****
        /* See if we need to pad the type.  If we did, and made a record,
  	 the name of the new type may be changed.  So get it back for
  	 us when we make the new TYPE_DECL below.  */
!       gnu_type = maybe_pad_type (gnu_type, gnu_size, align,
! 				 gnat_entity, "PAD", 1, definition, 0);
        if (TREE_CODE (gnu_type) == RECORD_TYPE
  	  && TYPE_IS_PADDING_P (gnu_type))
  	{
--- 3870,3877 ----
        /* See if we need to pad the type.  If we did, and made a record,
  	 the name of the new type may be changed.  So get it back for
  	 us when we make the new TYPE_DECL below.  */
!       gnu_type = maybe_pad_type (gnu_type, gnu_size, align, gnat_entity, "PAD",
! 				 true, definition, false);
        if (TREE_CODE (gnu_type) == RECORD_TYPE
  	  && TYPE_IS_PADDING_P (gnu_type))
  	{
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3783,3791 ****
  	 make a variable for the size rather than calculating it each time.
  	 Handle both the RM size and the actual size.  */
        if (global_bindings_p ()
! 	  && TYPE_SIZE (gnu_type) != 0
! 	  && ! TREE_CONSTANT (TYPE_SIZE (gnu_type))
! 	  && ! CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_type)))
  	{
  	  if (TREE_CODE (gnu_type) == RECORD_TYPE
  	      && operand_equal_p (TYPE_ADA_SIZE (gnu_type),
--- 3888,3896 ----
  	 make a variable for the size rather than calculating it each time.
  	 Handle both the RM size and the actual size.  */
        if (global_bindings_p ()
! 	  && TYPE_SIZE (gnu_type)
! 	  && !TREE_CONSTANT (TYPE_SIZE (gnu_type))
! 	  && !CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_type)))
  	{
  	  if (TREE_CODE (gnu_type) == RECORD_TYPE
  	      && operand_equal_p (TYPE_ADA_SIZE (gnu_type),
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3822,3833 ****
  		   size_int (TYPE_ALIGN (gnu_type) / BITS_PER_UNIT));
  
  	      if (TREE_CODE (gnu_type) == RECORD_TYPE)
! 		SET_TYPE_ADA_SIZE (gnu_type,
! 		    elaborate_expression_1 (gnat_entity, gnat_entity,
! 					    TYPE_ADA_SIZE (gnu_type),
! 					    get_identifier ("RM_SIZE"),
! 					    definition, 0));
! 	    }
  	}
  
        /* If this is a record type or subtype, call elaborate_expression_1 on
--- 3927,3940 ----
  		   size_int (TYPE_ALIGN (gnu_type) / BITS_PER_UNIT));
  
  	      if (TREE_CODE (gnu_type) == RECORD_TYPE)
! 		SET_TYPE_ADA_SIZE
! 		  (gnu_type,
! 		   elaborate_expression_1 (gnat_entity,
! 					   gnat_entity,
! 					   TYPE_ADA_SIZE (gnu_type),
! 					   get_identifier ("RM_SIZE"),
! 					   definition, 0));
! 		 }
  	}
  
        /* If this is a record type or subtype, call elaborate_expression_1 on
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3846,3852 ****
  		 In GCC 3.4, we'll use DECL_OFFSET_ALIGN in some way, but
  		 right now, we have to put in an explicit multiply and
  		 divide by that value.  */
! 	      if (! CONTAINS_PLACEHOLDER_P (DECL_FIELD_OFFSET (gnu_field)))
  		DECL_FIELD_OFFSET (gnu_field)
  		  = build_binary_op
  		    (MULT_EXPR, sizetype,
--- 3953,3959 ----
  		 In GCC 3.4, we'll use DECL_OFFSET_ALIGN in some way, but
  		 right now, we have to put in an explicit multiply and
  		 divide by that value.  */
! 	      if (!CONTAINS_PLACEHOLDER_P (DECL_FIELD_OFFSET (gnu_field)))
  		DECL_FIELD_OFFSET (gnu_field)
  		  = build_binary_op
  		    (MULT_EXPR, sizetype,
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3867,3889 ****
  					   * Treat_As_Volatile (gnat_entity))));
  
        if (Is_Atomic (gnat_entity))
! 	check_ok_for_atomic (gnu_type, gnat_entity, 0);
  
        if (Known_Alignment (gnat_entity))
  	TYPE_USER_ALIGN (gnu_type) = 1;
  
!       if (gnu_decl == 0)
! 	{
! 	  set_lineno (gnat_entity, 0);
! 	  gnu_decl = create_type_decl (gnu_entity_id, gnu_type, attr_list,
! 				       ! Comes_From_Source (gnat_entity),
! 				       debug_info_p);
! 	}
        else
  	TREE_TYPE (gnu_decl) = gnu_type;
      }
  
!   if (IN (kind, Type_Kind) && ! TYPE_IS_DUMMY_P (TREE_TYPE (gnu_decl)))
      {
        gnu_type = TREE_TYPE (gnu_decl);
  
--- 3974,3993 ----
  					   * Treat_As_Volatile (gnat_entity))));
  
        if (Is_Atomic (gnat_entity))
! 	check_ok_for_atomic (gnu_type, gnat_entity, false);
  
        if (Known_Alignment (gnat_entity))
  	TYPE_USER_ALIGN (gnu_type) = 1;
  
!       if (!gnu_decl)
! 	gnu_decl = create_type_decl (gnu_entity_id, gnu_type, attr_list,
! 				     !Comes_From_Source (gnat_entity),
! 				     debug_info_p, gnat_entity);
        else
  	TREE_TYPE (gnu_decl) = gnu_type;
      }
  
!   if (IN (kind, Type_Kind) && !TYPE_IS_DUMMY_P (TREE_TYPE (gnu_decl)))
      {
        gnu_type = TREE_TYPE (gnu_decl);
  
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3893,3906 ****
  	Set_Alignment (gnat_entity,
  		       UI_From_Int (TYPE_ALIGN (gnu_type) / BITS_PER_UNIT));
  
!       if (Unknown_Esize (gnat_entity) && TYPE_SIZE (gnu_type) != 0)
  	{
  	  /* If the size is self-referential, we annotate the maximum
  	     value of that size.  */
  	  tree gnu_size = TYPE_SIZE (gnu_type);
  
  	  if (CONTAINS_PLACEHOLDER_P (gnu_size))
! 	    gnu_size = max_size (gnu_size, 1);
  
  	  Set_Esize (gnat_entity, annotate_value (gnu_size));
  
--- 3997,4010 ----
  	Set_Alignment (gnat_entity,
  		       UI_From_Int (TYPE_ALIGN (gnu_type) / BITS_PER_UNIT));
  
!       if (Unknown_Esize (gnat_entity) && TYPE_SIZE (gnu_type))
  	{
  	  /* If the size is self-referential, we annotate the maximum
  	     value of that size.  */
  	  tree gnu_size = TYPE_SIZE (gnu_type);
  
  	  if (CONTAINS_PLACEHOLDER_P (gnu_size))
! 	    gnu_size = max_size (gnu_size, true);
  
  	  Set_Esize (gnat_entity, annotate_value (gnu_size));
  
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3931,3955 ****
             }
  	}
  
!       if (Unknown_RM_Size (gnat_entity) && rm_size (gnu_type) != 0)
  	Set_RM_Size (gnat_entity, annotate_value (rm_size (gnu_type)));
      }
  
!   if (! Comes_From_Source (gnat_entity) && DECL_P (gnu_decl))
      DECL_ARTIFICIAL (gnu_decl) = 1;
  
!   if (! debug_info_p && DECL_P (gnu_decl)
        && TREE_CODE (gnu_decl) != FUNCTION_DECL)
      DECL_IGNORED_P (gnu_decl) = 1;
  
-   /* If this decl is really indirect, adjust it.  */
-   if (TREE_CODE (gnu_decl) == VAR_DECL)
-     adjust_decl_rtl (gnu_decl);
- 
    /* If we haven't already, associate the ..._DECL node that we just made with
       the input GNAT entity node. */
!   if (! saved)
!     save_gnu_tree (gnat_entity, gnu_decl, 0);
  
    /* If this is an enumeral or floating-point type, we were not able to set
       the bounds since they refer to the type.  These bounds are always static.
--- 4035,4055 ----
             }
  	}
  
!       if (Unknown_RM_Size (gnat_entity) && rm_size (gnu_type))
  	Set_RM_Size (gnat_entity, annotate_value (rm_size (gnu_type)));
      }
  
!   if (!Comes_From_Source (gnat_entity) && DECL_P (gnu_decl))
      DECL_ARTIFICIAL (gnu_decl) = 1;
  
!   if (!debug_info_p && DECL_P (gnu_decl)
        && TREE_CODE (gnu_decl) != FUNCTION_DECL)
      DECL_IGNORED_P (gnu_decl) = 1;
  
    /* If we haven't already, associate the ..._DECL node that we just made with
       the input GNAT entity node. */
!   if (!saved)
!     save_gnu_tree (gnat_entity, gnu_decl, false);
  
    /* If this is an enumeral or floating-point type, we were not able to set
       the bounds since they refer to the type.  These bounds are always static.
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3958,3964 ****
       enumeration literal  table, if needed.  */
  
    if ((kind == E_Enumeration_Type && Present (First_Literal (gnat_entity)))
!       || (kind == E_Floating_Point_Type && ! Vax_Float (gnat_entity)))
      {
        tree gnu_scalar_type = gnu_type;
  
--- 4058,4064 ----
       enumeration literal  table, if needed.  */
  
    if ((kind == E_Enumeration_Type && Present (First_Literal (gnat_entity)))
!       || (kind == E_Floating_Point_Type && !Vax_Float (gnat_entity)))
      {
        tree gnu_scalar_type = gnu_type;
  
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3969,3975 ****
  
        /* If this is a floating point type and we haven't set a floating
  	 point type yet, use this in the evaluation of the bounds.  */
!       if (longest_float_type_node == 0 && kind == E_Floating_Point_Type)
  	longest_float_type_node = gnu_type;
  
        TYPE_MIN_VALUE (gnu_scalar_type)
--- 4069,4075 ----
  
        /* If this is a floating point type and we haven't set a floating
  	 point type yet, use this in the evaluation of the bounds.  */
!       if (!longest_float_type_node && kind == E_Floating_Point_Type)
  	longest_float_type_node = gnu_type;
  
        TYPE_MIN_VALUE (gnu_scalar_type)
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3977,3983 ****
        TYPE_MAX_VALUE (gnu_scalar_type)
  	= gnat_to_gnu (Type_High_Bound (gnat_entity));
  
!       if (kind == E_Enumeration_Type)
  	{
  	  TYPE_STUB_DECL (gnu_scalar_type) = gnu_decl;
  
--- 4077,4083 ----
        TYPE_MAX_VALUE (gnu_scalar_type)
  	= gnat_to_gnu (Type_High_Bound (gnat_entity));
  
!       if (TREE_CODE (gnu_scalar_type) == ENUMERAL_TYPE)
  	{
  	  TYPE_STUB_DECL (gnu_scalar_type) = gnu_decl;
  
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3990,4007 ****
  
    /* If we deferred processing of incomplete types, re-enable it.  If there
       were no other disables and we have some to process, do so.  */
!   if (this_deferred && --defer_incomplete_level == 0
!       && defer_incomplete_list != 0)
      {
        struct incomplete *incp = defer_incomplete_list;
        struct incomplete *next;
  
!       defer_incomplete_list = 0;
        for (; incp; incp = next)
  	{
  	  next = incp->next;
  
! 	  if (incp->old_type != 0)
  	    update_pointer_to (TYPE_MAIN_VARIANT (incp->old_type),
  			       gnat_to_gnu_type (incp->full_type));
  	  free (incp);
--- 4090,4106 ----
  
    /* If we deferred processing of incomplete types, re-enable it.  If there
       were no other disables and we have some to process, do so.  */
!   if (this_deferred && --defer_incomplete_level == 0 && defer_incomplete_list)
      {
        struct incomplete *incp = defer_incomplete_list;
        struct incomplete *next;
  
!       defer_incomplete_list = NULL;
        for (; incp; incp = next)
  	{
  	  next = incp->next;
  
! 	  if (incp->old_type)
  	    update_pointer_to (TYPE_MAIN_VARIANT (incp->old_type),
  			       gnat_to_gnu_type (incp->full_type));
  	  free (incp);
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 4010,4025 ****
  
    /* If we are not defining this type, see if it's in the incomplete list.
       If so, handle that list entry now.  */
!   else if (! definition)
      {
        struct incomplete *incp;
  
        for (incp = defer_incomplete_list; incp; incp = incp->next)
! 	if (incp->old_type != 0 && incp->full_type == gnat_entity)
  	  {
  	    update_pointer_to (TYPE_MAIN_VARIANT (incp->old_type),
  			       TREE_TYPE (gnu_decl));
! 	    incp->old_type = 0;
  	  }
      }
  
--- 4109,4124 ----
  
    /* If we are not defining this type, see if it's in the incomplete list.
       If so, handle that list entry now.  */
!   else if (!definition)
      {
        struct incomplete *incp;
  
        for (incp = defer_incomplete_list; incp; incp = incp->next)
! 	if (incp->old_type && incp->full_type == gnat_entity)
  	  {
  	    update_pointer_to (TYPE_MAIN_VARIANT (incp->old_type),
  			       TREE_TYPE (gnu_decl));
! 	    incp->old_type = NULL_TREE;
  	  }
      }
  
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 4029,4039 ****
    if (Is_Packed_Array_Type (gnat_entity)
        && Is_Itype (Associated_Node_For_Itype (gnat_entity))
        && No (Freeze_Node (Associated_Node_For_Itype (gnat_entity)))
!       && ! present_gnu_tree (Associated_Node_For_Itype (gnat_entity)))
      gnat_to_gnu_entity (Associated_Node_For_Itype (gnat_entity), NULL_TREE, 0);
  
    return gnu_decl;
  }
  
  /* Given GNAT_ENTITY, elaborate all expressions that are required to
     be elaborated at the point of its definition, but do nothing else.  */
--- 4128,4152 ----
    if (Is_Packed_Array_Type (gnat_entity)
        && Is_Itype (Associated_Node_For_Itype (gnat_entity))
        && No (Freeze_Node (Associated_Node_For_Itype (gnat_entity)))
!       && !present_gnu_tree (Associated_Node_For_Itype (gnat_entity)))
      gnat_to_gnu_entity (Associated_Node_For_Itype (gnat_entity), NULL_TREE, 0);
  
    return gnu_decl;
  }
+ 
+ /* Similar, but if the returned value is a COMPONENT_REF, return the
+    FIELD_DECL.  */
+ 
+ tree
+ gnat_to_gnu_field_decl (Entity_Id gnat_entity)
+ {
+   tree gnu_field = gnat_to_gnu_entity (gnat_entity, NULL_TREE, 0);
+ 
+   if (TREE_CODE (gnu_field) == COMPONENT_REF)
+     gnu_field = TREE_OPERAND (gnu_field, 1);
+ 
+   return gnu_field;
+ }
  
  /* Given GNAT_ENTITY, elaborate all expressions that are required to
     be elaborated at the point of its definition, but do nothing else.  */
*************** elaborate_entity (Entity_Id gnat_entity)
*** 4057,4066 ****
  	   is needed until the front stops generating bogus conversions
  	   on bounds of real types. */
  
! 	if (! Raises_Constraint_Error (gnat_lb))
  	  elaborate_expression (gnat_lb, gnat_entity, get_identifier ("L"),
  				1, 0, Needs_Debug_Info (gnat_entity));
! 	if (! Raises_Constraint_Error (gnat_hb))
  	  elaborate_expression (gnat_hb, gnat_entity, get_identifier ("U"),
  				1, 0, Needs_Debug_Info (gnat_entity));
        break;
--- 4170,4179 ----
  	   is needed until the front stops generating bogus conversions
  	   on bounds of real types. */
  
! 	if (!Raises_Constraint_Error (gnat_lb))
  	  elaborate_expression (gnat_lb, gnat_entity, get_identifier ("L"),
  				1, 0, Needs_Debug_Info (gnat_entity));
! 	if (!Raises_Constraint_Error (gnat_hb))
  	  elaborate_expression (gnat_hb, gnat_entity, get_identifier ("U"),
  				1, 0, Needs_Debug_Info (gnat_entity));
        break;
*************** elaborate_entity (Entity_Id gnat_entity)
*** 4096,4102 ****
  	       gnat_field = Next_Discriminant (gnat_field),
  	       gnat_discriminant_expr = Next_Elmt (gnat_discriminant_expr))
  	    /* ??? For now, ignore access discriminants.  */
! 	    if (! Is_Access_Type (Etype (Node (gnat_discriminant_expr))))
  	      elaborate_expression (Node (gnat_discriminant_expr),
  				    gnat_entity,
  				    get_entity_name (gnat_field), 1, 0, 0);
--- 4209,4215 ----
  	       gnat_field = Next_Discriminant (gnat_field),
  	       gnat_discriminant_expr = Next_Elmt (gnat_discriminant_expr))
  	    /* ??? For now, ignore access discriminants.  */
! 	    if (!Is_Access_Type (Etype (Node (gnat_discriminant_expr))))
  	      elaborate_expression (Node (gnat_discriminant_expr),
  				    gnat_entity,
  				    get_entity_name (gnat_field), 1, 0, 0);
*************** mark_out_of_scope (Entity_Id gnat_entity
*** 4128,4149 ****
      for (gnat_sub_entity = First_Entity (gnat_entity);
  	 Present (gnat_sub_entity);
  	 gnat_sub_entity = Next_Entity (gnat_sub_entity))
!             if (Scope (gnat_sub_entity) == gnat_entity
! 		&& gnat_sub_entity != gnat_entity)
  	mark_out_of_scope (gnat_sub_entity);
  
    /* Now clear this if it has been defined, but only do so if it isn't
       a subprogram or parameter.  We could refine this, but it isn't
       worth it.  If this is statically allocated, it is supposed to
       hang around out of cope.  */
!   if (present_gnu_tree (gnat_entity) && ! Is_Statically_Allocated (gnat_entity)
!       && kind != E_Procedure && kind != E_Function && ! IN (kind, Formal_Kind))
      {
!       save_gnu_tree (gnat_entity, NULL_TREE, 1);
!       save_gnu_tree (gnat_entity, error_mark_node, 1);
      }
  }
  
  /* Return a TREE_LIST describing the substitutions needed to reflect
     discriminant substitutions from GNAT_SUBTYPE to GNAT_TYPE and add
     them to GNU_LIST.  If GNAT_TYPE is not specified, use the base type
--- 4241,4293 ----
      for (gnat_sub_entity = First_Entity (gnat_entity);
  	 Present (gnat_sub_entity);
  	 gnat_sub_entity = Next_Entity (gnat_sub_entity))
!       if (Scope (gnat_sub_entity) == gnat_entity
! 	  && gnat_sub_entity != gnat_entity)
  	mark_out_of_scope (gnat_sub_entity);
  
    /* Now clear this if it has been defined, but only do so if it isn't
       a subprogram or parameter.  We could refine this, but it isn't
       worth it.  If this is statically allocated, it is supposed to
       hang around out of cope.  */
!   if (present_gnu_tree (gnat_entity) && !Is_Statically_Allocated (gnat_entity)
!       && kind != E_Procedure && kind != E_Function && !IN (kind, Formal_Kind))
      {
!       save_gnu_tree (gnat_entity, NULL_TREE, true);
!       save_gnu_tree (gnat_entity, error_mark_node, true);
      }
  }
  
+ /* Set the alias set of GNU_NEW_TYPE to be that of GNU_OLD_TYPE.  If this
+    is a multi-dimensional array type, do this recursively.  */
+ 
+ static void
+ copy_alias_set (tree gnu_new_type, tree gnu_old_type)
+ {
+   /* Remove any padding from GNU_OLD_TYPE.  It doesn't matter in the case
+      of a one-dimensional array, since the padding has the same alias set
+      as the field type, but if it's a multi-dimensional array, we need to
+      see the inner types.  */
+   while (TREE_CODE (gnu_old_type) == RECORD_TYPE
+ 	 && (TYPE_JUSTIFIED_MODULAR_P (gnu_old_type)
+ 	     || TYPE_IS_PADDING_P (gnu_old_type)))
+     gnu_old_type = TREE_TYPE (TYPE_FIELDS (gnu_old_type));
+ 
+   /* We need to be careful here in case GNU_OLD_TYPE is an unconstrained
+      array.  In that case, it doesn't have the same shape as GNU_NEW_TYPE,
+      so we need to go down to what does.  */
+   if (TREE_CODE (gnu_old_type) == UNCONSTRAINED_ARRAY_TYPE)
+     gnu_old_type
+       = TREE_TYPE (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (gnu_old_type))));
+ 
+   if (TREE_CODE (gnu_new_type) == ARRAY_TYPE
+       && TREE_CODE (TREE_TYPE (gnu_new_type)) == ARRAY_TYPE
+       && TYPE_MULTI_ARRAY_P (TREE_TYPE (gnu_new_type)))
+     copy_alias_set (TREE_TYPE (gnu_new_type), TREE_TYPE (gnu_old_type));
+ 
+   TYPE_ALIAS_SET (gnu_new_type) = get_alias_set (gnu_old_type);
+   record_component_aliases (gnu_new_type);
+ }
+ 
  /* Return a TREE_LIST describing the substitutions needed to reflect
     discriminant substitutions from GNAT_SUBTYPE to GNAT_TYPE and add
     them to GNU_LIST.  If GNAT_TYPE is not specified, use the base type
*************** mark_out_of_scope (Entity_Id gnat_entity
*** 4153,4162 ****
     DEFINITION is as in gnat_to_gnu_entity.  */
  
  static tree
! substitution_list (Entity_Id gnat_subtype,
!                    Entity_Id gnat_type,
!                    tree gnu_list,
!                    int definition)
  {
    Entity_Id gnat_discrim;
    Node_Id gnat_value;
--- 4297,4304 ----
     DEFINITION is as in gnat_to_gnu_entity.  */
  
  static tree
! substitution_list (Entity_Id gnat_subtype, Entity_Id gnat_type,
!                    tree gnu_list, bool definition)
  {
    Entity_Id gnat_discrim;
    Node_Id gnat_value;
*************** substitution_list (Entity_Id gnat_subtyp
*** 4171,4179 ****
  	 gnat_discrim = Next_Stored_Discriminant (gnat_discrim),
  	 gnat_value = Next_Elmt (gnat_value))
        /* Ignore access discriminants.  */
!       if (! Is_Access_Type (Etype (Node (gnat_value))))
! 	gnu_list = tree_cons (gnat_to_gnu_entity (gnat_discrim, NULL_TREE, 0),
! 			    elaborate_expression
  			      (Node (gnat_value), gnat_subtype,
  			       get_entity_name (gnat_discrim), definition,
  			       1, 0),
--- 4313,4321 ----
  	 gnat_discrim = Next_Stored_Discriminant (gnat_discrim),
  	 gnat_value = Next_Elmt (gnat_value))
        /* Ignore access discriminants.  */
!       if (!Is_Access_Type (Etype (Node (gnat_value))))
! 	gnu_list = tree_cons (gnat_to_gnu_field_decl (gnat_discrim),
! 			      elaborate_expression
  			      (Node (gnat_value), gnat_subtype,
  			       get_entity_name (gnat_discrim), definition,
  			       1, 0),
*************** make_dummy_type (Entity_Id gnat_type)
*** 4229,4283 ****
  
    /* If this is a record, make this a RECORD_TYPE or UNION_TYPE; else make
       it a VOID_TYPE.  */
!   if (Is_Record_Type (gnat_underlying))
!     gnu_type = make_node (Is_Unchecked_Union (gnat_underlying)
! 			  ? UNION_TYPE : RECORD_TYPE);
    else
      gnu_type = make_node (ENUMERAL_TYPE);
  
    TYPE_NAME (gnu_type) = get_entity_name (gnat_type);
    if (AGGREGATE_TYPE_P (gnu_type))
!     TYPE_STUB_DECL (gnu_type)
!       = pushdecl (build_decl (TYPE_DECL, NULL_TREE, gnu_type));
  
-   TYPE_DUMMY_P (gnu_type) = 1;
    dummy_node_table[gnat_underlying] = gnu_type;
  
    return gnu_type;
  }
  
! /* Return 1 if the size represented by GNU_SIZE can be handled by an
!    allocation.  If STATIC_P is non-zero, consider only what can be
!    done with a static allocation.  */
  
! static int
! allocatable_size_p (tree gnu_size, int static_p)
  {
    HOST_WIDE_INT our_size;
  
    /* If this is not a static allocation, the only case we want to forbid
       is an overflowing size.  That will be converted into a raise a
       Storage_Error.  */
!   if (! static_p)
!     return ! (TREE_CODE (gnu_size) == INTEGER_CST
! 	      && TREE_CONSTANT_OVERFLOW (gnu_size));
  
    /* Otherwise, we need to deal with both variable sizes and constant
       sizes that won't fit in a host int.  We use int instead of HOST_WIDE_INT
       since assemblers may not like very large sizes.  */
    if (!host_integerp (gnu_size, 1))
!     return 0;
  
    our_size = tree_low_cst (gnu_size, 1);
    return (int) our_size == our_size;
  }
  
! /* Return a list of attributes for GNAT_ENTITY, if any.  */
  
! static struct attrib *
! build_attr_list (Entity_Id gnat_entity)
  {
-   struct attrib *attr_list = 0;
    Node_Id gnat_temp;
  
    for (gnat_temp = First_Rep_Item (gnat_entity); Present (gnat_temp);
--- 4371,4427 ----
  
    /* If this is a record, make this a RECORD_TYPE or UNION_TYPE; else make
       it a VOID_TYPE.  */
!   if (Is_Unchecked_Union (gnat_underlying))
!     {
!       gnu_type = make_node (UNION_TYPE);
!       TYPE_UNCHECKED_UNION_P (gnu_type) = 1;
!     }
!   else if (Is_Record_Type (gnat_underlying))
!     gnu_type = make_node (RECORD_TYPE);
    else
      gnu_type = make_node (ENUMERAL_TYPE);
  
    TYPE_NAME (gnu_type) = get_entity_name (gnat_type);
+   TYPE_DUMMY_P (gnu_type) = 1;
    if (AGGREGATE_TYPE_P (gnu_type))
!     TYPE_STUB_DECL (gnu_type) = build_decl (TYPE_DECL, NULL_TREE, gnu_type);
  
    dummy_node_table[gnat_underlying] = gnu_type;
  
    return gnu_type;
  }
  
! /* Return true if the size represented by GNU_SIZE can be handled by an
!    allocation.  If STATIC_P is true, consider only what can be done with a
!    static allocation.  */
  
! static bool
! allocatable_size_p (tree gnu_size, bool static_p)
  {
    HOST_WIDE_INT our_size;
  
    /* If this is not a static allocation, the only case we want to forbid
       is an overflowing size.  That will be converted into a raise a
       Storage_Error.  */
!   if (!static_p)
!     return !(TREE_CODE (gnu_size) == INTEGER_CST
! 	     && TREE_CONSTANT_OVERFLOW (gnu_size));
  
    /* Otherwise, we need to deal with both variable sizes and constant
       sizes that won't fit in a host int.  We use int instead of HOST_WIDE_INT
       since assemblers may not like very large sizes.  */
    if (!host_integerp (gnu_size, 1))
!     return false;
  
    our_size = tree_low_cst (gnu_size, 1);
    return (int) our_size == our_size;
  }
  
! /* Prepend to ATTR_LIST the list of attributes for GNAT_ENTITY, if any.  */
  
! static void
! prepend_attributes (Entity_Id gnat_entity, struct attrib ** attr_list)
  {
    Node_Id gnat_temp;
  
    for (gnat_temp = First_Rep_Item (gnat_entity); Present (gnat_temp);
*************** build_attr_list (Entity_Id gnat_entity)
*** 4285,4291 ****
      if (Nkind (gnat_temp) == N_Pragma)
        {
  	struct attrib *attr;
! 	tree gnu_arg0 = 0, gnu_arg1 = 0;
  	Node_Id gnat_assoc = Pragma_Argument_Associations (gnat_temp);
  	enum attr_type etype;
  
--- 4429,4435 ----
      if (Nkind (gnat_temp) == N_Pragma)
        {
  	struct attrib *attr;
! 	tree gnu_arg0 = NULL_TREE, gnu_arg1 = NULL_TREE;
  	Node_Id gnat_assoc = Pragma_Argument_Associations (gnat_temp);
  	enum attr_type etype;
  
*************** build_attr_list (Entity_Id gnat_entity)
*** 4331,4347 ****
  	  }
  
  	attr = (struct attrib *) xmalloc (sizeof (struct attrib));
! 	attr->next = attr_list;
  	attr->type = etype;
  	attr->name = gnu_arg0;
! 	attr->arg = gnu_arg1;
  	attr->error_point
  	  = Present (Next (First (gnat_assoc)))
  	    ? Expression (Next (First (gnat_assoc))) : gnat_temp;
! 	attr_list = attr;
        }
- 
-   return attr_list;
  }
  
  /* Get the unpadded version of a GNAT type.  */
--- 4475,4497 ----
  	  }
  
  	attr = (struct attrib *) xmalloc (sizeof (struct attrib));
! 	attr->next = *attr_list;
  	attr->type = etype;
  	attr->name = gnu_arg0;
! 
! 	/* If we have an argument specified together with an attribute name,
! 	   make it a single TREE_VALUE entry in a list of arguments, as GCC
! 	   expects it.  */
! 	if (gnu_arg1 != NULL_TREE)
! 	  attr->args = build_tree_list (NULL_TREE, gnu_arg1);
! 	else
! 	  attr->args = NULL_TREE;
! 
  	attr->error_point
  	  = Present (Next (First (gnat_assoc)))
  	    ? Expression (Next (First (gnat_assoc))) : gnat_temp;
! 	*attr_list = attr;
        }
  }
  
  /* Get the unpadded version of a GNAT type.  */
*************** get_unpadded_type (Entity_Id gnat_entity
*** 4360,4380 ****
  /* Called when we need to protect a variable object using a save_expr.  */
  
  tree
! maybe_variable (tree gnu_operand, Node_Id gnat_node)
  {
    if (TREE_CONSTANT (gnu_operand) || TREE_READONLY (gnu_operand)
        || TREE_CODE (gnu_operand) == SAVE_EXPR
        || TREE_CODE (gnu_operand) == NULL_EXPR)
      return gnu_operand;
  
-   /* If we will be generating code, make sure we are at the proper
-      line number.  */
-   if (! global_bindings_p () && ! CONTAINS_PLACEHOLDER_P (gnu_operand))
-   set_lineno (gnat_node, 1);
- 
    if (TREE_CODE (gnu_operand) == UNCONSTRAINED_ARRAY_REF)
!     return build1 (UNCONSTRAINED_ARRAY_REF, TREE_TYPE (gnu_operand),
! 		   variable_size (TREE_OPERAND (gnu_operand, 0)));
    else
      return variable_size (gnu_operand);
  }
--- 4510,4532 ----
  /* Called when we need to protect a variable object using a save_expr.  */
  
  tree
! maybe_variable (tree gnu_operand)
  {
    if (TREE_CONSTANT (gnu_operand) || TREE_READONLY (gnu_operand)
        || TREE_CODE (gnu_operand) == SAVE_EXPR
        || TREE_CODE (gnu_operand) == NULL_EXPR)
      return gnu_operand;
  
    if (TREE_CODE (gnu_operand) == UNCONSTRAINED_ARRAY_REF)
!     {
!       tree gnu_result = build1 (UNCONSTRAINED_ARRAY_REF,
! 				TREE_TYPE (gnu_operand),
! 				variable_size (TREE_OPERAND (gnu_operand, 0)));
! 
!       TREE_READONLY (gnu_result) = TREE_STATIC (gnu_result)
! 	= TYPE_READONLY (TREE_TYPE (TREE_TYPE (gnu_operand)));
!       return gnu_result;
!     }
    else
      return variable_size (gnu_operand);
  }
*************** maybe_variable (tree gnu_operand, Node_I
*** 4389,4400 ****
     purposes even if it isn't needed for code generation.  */
  
  static tree
! elaborate_expression (Node_Id gnat_expr,
!                       Entity_Id gnat_entity,
!                       tree gnu_name,
!                       int definition,
!                       int need_value,
!                       int need_debug)
  {
    tree gnu_expr;
  
--- 4541,4549 ----
     purposes even if it isn't needed for code generation.  */
  
  static tree
! elaborate_expression (Node_Id gnat_expr, Entity_Id gnat_entity,
!                       tree gnu_name, bool definition, bool need_value,
! 		      bool need_debug)
  {
    tree gnu_expr;
  
*************** elaborate_expression (Node_Id gnat_expr,
*** 4405,4411 ****
  
    /* If we don't need a value and this is static or a discriment, we
       don't need to do anything.  */
!   else if (! need_value
  	   && (Is_OK_Static_Expression (gnat_expr)
  	       || (Nkind (gnat_expr) == N_Identifier
  		   && Ekind (Entity (gnat_expr)) == E_Discriminant)))
--- 4554,4560 ----
  
    /* If we don't need a value and this is static or a discriment, we
       don't need to do anything.  */
!   else if (!need_value
  	   && (Is_OK_Static_Expression (gnat_expr)
  	       || (Nkind (gnat_expr) == N_Identifier
  		   && Ekind (Entity (gnat_expr)) == E_Discriminant)))
*************** elaborate_expression (Node_Id gnat_expr,
*** 4416,4427 ****
      = elaborate_expression_1 (gnat_expr, gnat_entity, gnat_to_gnu (gnat_expr),
  			      gnu_name, definition, need_debug);
  
!   /* Save the expression in case we try to elaborate this entity again.
!      Since this is not a DECL, don't check it.  If this is a constant,
!      don't save it since GNAT_EXPR might be used more than once.  Also,
!      don't save if it's a discriminant.  */
!   if (! CONTAINS_PLACEHOLDER_P (gnu_expr))
!     save_gnu_tree (gnat_expr, gnu_expr, 1);
  
    return need_value ? gnu_expr : error_mark_node;
  }
--- 4565,4574 ----
      = elaborate_expression_1 (gnat_expr, gnat_entity, gnat_to_gnu (gnat_expr),
  			      gnu_name, definition, need_debug);
  
!   /* Save the expression in case we try to elaborate this entity again.  Since
!      this is not a DECL, don't check it.  Don't save if it's a discriminant. */
!   if (!CONTAINS_PLACEHOLDER_P (gnu_expr))
!     save_gnu_tree (gnat_expr, gnu_expr, true);
  
    return need_value ? gnu_expr : error_mark_node;
  }
*************** elaborate_expression (Node_Id gnat_expr,
*** 4429,4448 ****
  /* Similar, but take a GNU expression.  */
  
  static tree
! elaborate_expression_1 (Node_Id gnat_expr,
!                         Entity_Id gnat_entity,
!                         tree gnu_expr,
!                         tree gnu_name,
!                         int definition,
!                         int need_debug)
  {
!   tree gnu_decl = 0;
    /* Strip any conversions to see if the expression is a readonly variable.
       ??? This really should remain readonly, but we have to think about
       the typing of the tree here.  */
!   tree gnu_inner_expr = remove_conversions (gnu_expr, 1);
!   int expr_global = Is_Public (gnat_entity) || global_bindings_p ();
!   int expr_variable;
  
    /* In most cases, we won't see a naked FIELD_DECL here because a
       discriminant reference will have been replaced with a COMPONENT_REF
--- 4576,4592 ----
  /* Similar, but take a GNU expression.  */
  
  static tree
! elaborate_expression_1 (Node_Id gnat_expr, Entity_Id gnat_entity,
!                         tree gnu_expr, tree gnu_name, bool definition,
!                         bool need_debug)
  {
!   tree gnu_decl = NULL_TREE;
    /* Strip any conversions to see if the expression is a readonly variable.
       ??? This really should remain readonly, but we have to think about
       the typing of the tree here.  */
!   tree gnu_inner_expr = remove_conversions (gnu_expr, true);
!   bool expr_global = Is_Public (gnat_entity) || global_bindings_p ();
!   bool expr_variable;
  
    /* In most cases, we won't see a naked FIELD_DECL here because a
       discriminant reference will have been replaced with a COMPONENT_REF
*************** elaborate_expression_1 (Node_Id gnat_exp
*** 4451,4459 ****
       here.  We have to hope it will be at the highest level of the
       expression in these cases.  */
    if (TREE_CODE (gnu_expr) == FIELD_DECL)
!     gnu_expr = build (COMPONENT_REF, TREE_TYPE (gnu_expr),
! 		      build (PLACEHOLDER_EXPR, DECL_CONTEXT (gnu_expr)),
! 		      gnu_expr);
  
    /* If GNU_EXPR is neither a placeholder nor a constant, nor a variable
       that is a constant, make a variable that is initialized to contain the
--- 4595,4603 ----
       here.  We have to hope it will be at the highest level of the
       expression in these cases.  */
    if (TREE_CODE (gnu_expr) == FIELD_DECL)
!     gnu_expr = build3 (COMPONENT_REF, TREE_TYPE (gnu_expr),
! 		       build0 (PLACEHOLDER_EXPR, DECL_CONTEXT (gnu_expr)),
! 		       gnu_expr, NULL_TREE);
  
    /* If GNU_EXPR is neither a placeholder nor a constant, nor a variable
       that is a constant, make a variable that is initialized to contain the
*************** elaborate_expression_1 (Node_Id gnat_exp
*** 4464,4473 ****
       rely here on the fact that an expression cannot contain both the
       discriminant and some other variable.  */
  
!   expr_variable = (TREE_CODE_CLASS (TREE_CODE (gnu_expr)) != 'c'
! 		   && ! (TREE_CODE (gnu_inner_expr) == VAR_DECL
! 			 && TREE_READONLY (gnu_inner_expr))
! 		   && ! CONTAINS_PLACEHOLDER_P (gnu_expr));
  
    /* If this is a static expression or contains a discriminant, we don't
       need the variable for debugging (and can't elaborate anyway if a
--- 4608,4617 ----
       rely here on the fact that an expression cannot contain both the
       discriminant and some other variable.  */
  
!   expr_variable = (!CONSTANT_CLASS_P (gnu_expr)
! 		   && !(TREE_CODE (gnu_inner_expr) == VAR_DECL
! 			&& TREE_READONLY (gnu_inner_expr))
! 		   && !CONTAINS_PLACEHOLDER_P (gnu_expr));
  
    /* If this is a static expression or contains a discriminant, we don't
       need the variable for debugging (and can't elaborate anyway if a
*************** elaborate_expression_1 (Node_Id gnat_exp
*** 4475,4501 ****
    if (need_debug
        && (Is_OK_Static_Expression (gnat_expr)
  	  || CONTAINS_PLACEHOLDER_P (gnu_expr)))
!     need_debug = 0;
  
    /* Now create the variable if we need it.  */
    if (need_debug || (expr_variable && expr_global))
!     {
!       set_lineno (gnat_entity, ! global_bindings_p ());
!       gnu_decl
! 	= create_var_decl (create_concat_name (gnat_entity,
! 					       IDENTIFIER_POINTER (gnu_name)),
! 			   NULL_TREE, TREE_TYPE (gnu_expr), gnu_expr, 1,
! 			   Is_Public (gnat_entity), ! definition, 0, 0);
!     }
  
    /* We only need to use this variable if we are in global context since GCC
       can do the right thing in the local case.  */
    if (expr_global && expr_variable)
      return gnu_decl;
!   else if (! expr_variable)
      return gnu_expr;
    else
!     return maybe_variable (gnu_expr, gnat_expr);
  }
  
  /* Create a record type that contains a field of TYPE with a starting bit
--- 4619,4643 ----
    if (need_debug
        && (Is_OK_Static_Expression (gnat_expr)
  	  || CONTAINS_PLACEHOLDER_P (gnu_expr)))
!     need_debug = false;
  
    /* Now create the variable if we need it.  */
    if (need_debug || (expr_variable && expr_global))
!     gnu_decl
!       = create_var_decl (create_concat_name (gnat_entity,
! 					     IDENTIFIER_POINTER (gnu_name)),
! 			 NULL_TREE, TREE_TYPE (gnu_expr), gnu_expr, true,
! 			 Is_Public (gnat_entity), !definition, false, NULL,
! 			 gnat_entity);
  
    /* We only need to use this variable if we are in global context since GCC
       can do the right thing in the local case.  */
    if (expr_global && expr_variable)
      return gnu_decl;
!   else if (!expr_variable)
      return gnu_expr;
    else
!     return maybe_variable (gnu_expr);
  }
  
  /* Create a record type that contains a field of TYPE with a starting bit
*************** tree
*** 4505,4511 ****
  make_aligning_type (tree type, int align, tree size)
  {
    tree record_type = make_node (RECORD_TYPE);
!   tree place = build (PLACEHOLDER_EXPR, record_type);
    tree size_addr_place = convert (sizetype,
  				  build_unary_op (ADDR_EXPR, NULL_TREE,
  						  place));
--- 4647,4653 ----
  make_aligning_type (tree type, int align, tree size)
  {
    tree record_type = make_node (RECORD_TYPE);
!   tree place = build0 (PLACEHOLDER_EXPR, record_type);
    tree size_addr_place = convert (sizetype,
  				  build_unary_op (ADDR_EXPR, NULL_TREE,
  						  place));
*************** make_aligning_type (tree type, int align
*** 4520,4526 ****
    /* The bit position is obtained by "and"ing the alignment minus 1
       with the two's complement of the address and  multiplying
       by the number of bits per unit.  Do all this in sizetype.  */
- 
    pos = size_binop (MULT_EXPR,
  		    convert (bitsizetype,
  			     size_binop (BIT_AND_EXPR,
--- 4662,4667 ----
*************** make_aligning_type (tree type, int align
*** 4530,4540 ****
  						    - 1))),
  		    bitsize_unit_node);
  
!   field = create_field_decl (get_identifier ("F"), type, record_type,
! 			     1, size, pos, 1);
!   DECL_BIT_FIELD (field) = 0;
  
!   finish_record_type (record_type, field, 1, 0);
    TYPE_ALIGN (record_type) = BIGGEST_ALIGNMENT;
    TYPE_SIZE (record_type)
      = size_binop (PLUS_EXPR,
--- 4671,4685 ----
  						    - 1))),
  		    bitsize_unit_node);
  
!   /* Create the field, with -1 as the 'addressable' indication to avoid the
!      creation of a bitfield.  We don't need one, it would have damaging
!      consequences on the alignment computation, and create_field_decl would
!      make one without this special argument, for instance because of the
!      complex position expression.  */
!   field = create_field_decl (get_identifier ("F"), type, record_type, 1, size,
! 			     pos, -1);
  
!   finish_record_type (record_type, field, true, false);
    TYPE_ALIGN (record_type) = BIGGEST_ALIGNMENT;
    TYPE_SIZE (record_type)
      = size_binop (PLUS_EXPR,
*************** make_aligning_type (tree type, int align
*** 4543,4549 ****
  		  bitsize_int (align));
    TYPE_SIZE_UNIT (record_type)
      = size_binop (PLUS_EXPR, size, size_int (align / BITS_PER_UNIT));
!   TYPE_ALIAS_SET (record_type) = get_alias_set (type);
    return record_type;
  }
  
--- 4688,4694 ----
  		  bitsize_int (align));
    TYPE_SIZE_UNIT (record_type)
      = size_binop (PLUS_EXPR, size, size_int (align / BITS_PER_UNIT));
!   copy_alias_set (record_type, type);
    return record_type;
  }
  
*************** make_packable_type (tree type)
*** 4563,4573 ****
       the alignment to try for an integral type.  For QUAL_UNION_TYPE,
       also copy the size.  */
    TYPE_NAME (new_type) = TYPE_NAME (type);
!   TYPE_LEFT_JUSTIFIED_MODULAR_P (new_type)
!     = TYPE_LEFT_JUSTIFIED_MODULAR_P (type);
    TYPE_CONTAINS_TEMPLATE_P (new_type) = TYPE_CONTAINS_TEMPLATE_P (type);
!   TYPE_IS_PADDING_P (new_type) = TYPE_IS_PADDING_P (type);
!   if (TREE_CODE (type) == QUAL_UNION_TYPE)
      {
        TYPE_SIZE (new_type) = TYPE_SIZE (type);
        TYPE_SIZE_UNIT (new_type) = TYPE_SIZE_UNIT (type);
--- 4708,4720 ----
       the alignment to try for an integral type.  For QUAL_UNION_TYPE,
       also copy the size.  */
    TYPE_NAME (new_type) = TYPE_NAME (type);
!   TYPE_JUSTIFIED_MODULAR_P (new_type)
!     = TYPE_JUSTIFIED_MODULAR_P (type);
    TYPE_CONTAINS_TEMPLATE_P (new_type) = TYPE_CONTAINS_TEMPLATE_P (type);
! 
!   if (TREE_CODE (type) == RECORD_TYPE)
!     TYPE_IS_PADDING_P (new_type) = TYPE_IS_PADDING_P (type);
!   else if (TREE_CODE (type) == QUAL_UNION_TYPE)
      {
        TYPE_SIZE (new_type) = TYPE_SIZE (type);
        TYPE_SIZE_UNIT (new_type) = TYPE_SIZE_UNIT (type);
*************** make_packable_type (tree type)
*** 4578,4584 ****
         << (floor_log2 (tree_low_cst (TYPE_SIZE (type), 1) - 1) + 1));
  
    /* Now copy the fields, keeping the position and size.  */
!   for (old_field = TYPE_FIELDS (type); old_field != 0;
         old_field = TREE_CHAIN (old_field))
      {
        tree new_field_type = TREE_TYPE (old_field);
--- 4725,4731 ----
         << (floor_log2 (tree_low_cst (TYPE_SIZE (type), 1) - 1) + 1));
  
    /* Now copy the fields, keeping the position and size.  */
!   for (old_field = TYPE_FIELDS (type); old_field;
         old_field = TREE_CHAIN (old_field))
      {
        tree new_field_type = TREE_TYPE (old_field);
*************** make_packable_type (tree type)
*** 4595,4606 ****
  				     new_type, TYPE_PACKED (type),
  				     DECL_SIZE (old_field),
  				     bit_position (old_field),
! 				     ! DECL_NONADDRESSABLE_P (old_field));
  
        DECL_INTERNAL_P (new_field) = DECL_INTERNAL_P (old_field);
!       SET_DECL_ORIGINAL_FIELD (new_field,
! 	  (DECL_ORIGINAL_FIELD (old_field) != 0
! 	   ? DECL_ORIGINAL_FIELD (old_field) : old_field));
  
        if (TREE_CODE (new_type) == QUAL_UNION_TYPE)
  	DECL_QUALIFIER (new_field) = DECL_QUALIFIER (old_field);
--- 4742,4753 ----
  				     new_type, TYPE_PACKED (type),
  				     DECL_SIZE (old_field),
  				     bit_position (old_field),
! 				     !DECL_NONADDRESSABLE_P (old_field));
  
        DECL_INTERNAL_P (new_field) = DECL_INTERNAL_P (old_field);
!       SET_DECL_ORIGINAL_FIELD
! 	(new_field, (DECL_ORIGINAL_FIELD (old_field)
! 		     ? DECL_ORIGINAL_FIELD (old_field) : old_field));
  
        if (TREE_CODE (new_type) == QUAL_UNION_TYPE)
  	DECL_QUALIFIER (new_field) = DECL_QUALIFIER (old_field);
*************** make_packable_type (tree type)
*** 4609,4616 ****
        field_list = new_field;
      }
  
!   finish_record_type (new_type, nreverse (field_list), 1, 1);
!   TYPE_ALIAS_SET (new_type) = get_alias_set (type);
    return TYPE_MODE (new_type) == BLKmode ? type : new_type;
  }
  
--- 4756,4763 ----
        field_list = new_field;
      }
  
!   finish_record_type (new_type, nreverse (field_list), true, true);
!   copy_alias_set (new_type, type);
    return TYPE_MODE (new_type) == BLKmode ? type : new_type;
  }
  
*************** make_packable_type (tree type)
*** 4620,4642 ****
     GNAT_ENTITY and NAME_TRAILER are used to name the resulting record and
     to issue a warning.
  
!    IS_USER_TYPE is nonzero if we must be sure we complete the original type.
  
!    DEFINITION is nonzero if this type is being defined.
  
!    SAME_RM_SIZE is nonzero if the RM_Size of the resulting type is to be
     set to its TYPE_SIZE; otherwise, it's set to the RM_Size of the original
     type.  */
  
! static tree
! maybe_pad_type (tree type,
!                 tree size,
!                 unsigned int align,
!                 Entity_Id gnat_entity,
!                 const char *name_trailer,
!                 int is_user_type,
!                 int definition,
!                 int same_rm_size)
  {
    tree orig_size = TYPE_SIZE (type);
    tree record;
--- 4767,4784 ----
     GNAT_ENTITY and NAME_TRAILER are used to name the resulting record and
     to issue a warning.
  
!    IS_USER_TYPE is true if we must be sure we complete the original type.
  
!    DEFINITION is true if this type is being defined.
  
!    SAME_RM_SIZE is true if the RM_Size of the resulting type is to be
     set to its TYPE_SIZE; otherwise, it's set to the RM_Size of the original
     type.  */
  
! tree
! maybe_pad_type (tree type, tree size, unsigned int align,
!                 Entity_Id gnat_entity, const char *name_trailer,
!                 bool is_user_type, bool definition, bool same_rm_size)
  {
    tree orig_size = TYPE_SIZE (type);
    tree record;
*************** maybe_pad_type (tree type,
*** 4650,4656 ****
  
    if (TREE_CODE (type) == RECORD_TYPE && TYPE_IS_PADDING_P (type))
      {
!       if ((size == 0
  	   || operand_equal_p (round_up (size,
  					 MAX (align, TYPE_ALIGN (type))),
  			       round_up (TYPE_SIZE (type),
--- 4792,4798 ----
  
    if (TREE_CODE (type) == RECORD_TYPE && TYPE_IS_PADDING_P (type))
      {
!       if ((!size
  	   || operand_equal_p (round_up (size,
  					 MAX (align, TYPE_ALIGN (type))),
  			       round_up (TYPE_SIZE (type),
*************** maybe_pad_type (tree type,
*** 4659,4665 ****
  	  && (align == 0 || align == TYPE_ALIGN (type)))
  	return type;
  
!       if (size == 0)
  	size = TYPE_SIZE (type);
        if (align == 0)
  	align = TYPE_ALIGN (type);
--- 4801,4807 ----
  	  && (align == 0 || align == TYPE_ALIGN (type)))
  	return type;
  
!       if (!size)
  	size = TYPE_SIZE (type);
        if (align == 0)
  	align = TYPE_ALIGN (type);
*************** maybe_pad_type (tree type,
*** 4673,4688 ****
       isn't changing.  Likewise, clear the alignment if it isn't being
       changed.  Then return if we aren't doing anything.  */
  
!   if (size != 0
        && (operand_equal_p (size, orig_size, 0)
  	  || (TREE_CODE (orig_size) == INTEGER_CST
  	      && tree_int_cst_lt (size, orig_size))))
!     size = 0;
  
    if (align == TYPE_ALIGN (type))
      align = 0;
  
!   if (align == 0 && size == 0)
      return type;
  
    /* We used to modify the record in place in some cases, but that could
--- 4815,4830 ----
       isn't changing.  Likewise, clear the alignment if it isn't being
       changed.  Then return if we aren't doing anything.  */
  
!   if (size
        && (operand_equal_p (size, orig_size, 0)
  	  || (TREE_CODE (orig_size) == INTEGER_CST
  	      && tree_int_cst_lt (size, orig_size))))
!     size = NULL_TREE;
  
    if (align == TYPE_ALIGN (type))
      align = 0;
  
!   if (align == 0 && !size)
      return type;
  
    /* We used to modify the record in place in some cases, but that could
*************** maybe_pad_type (tree type,
*** 4697,4706 ****
       name.  */
    if (is_user_type)
      create_type_decl (get_entity_name (gnat_entity), type,
! 		      0, ! Comes_From_Source (gnat_entity),
! 		      ! (TYPE_NAME (type) != 0
! 			 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
! 			 && DECL_IGNORED_P (TYPE_NAME (type))));
  
    /* If we are changing the alignment and the input type is a record with
       BLKmode and a small constant size, try to make a form that has an
--- 4839,4849 ----
       name.  */
    if (is_user_type)
      create_type_decl (get_entity_name (gnat_entity), type,
! 		      NULL, !Comes_From_Source (gnat_entity),
! 		      !(TYPE_NAME (type)
! 			&& TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
! 			&& DECL_IGNORED_P (TYPE_NAME (type))),
! 		      gnat_entity);
  
    /* If we are changing the alignment and the input type is a record with
       BLKmode and a small constant size, try to make a form that has an
*************** maybe_pad_type (tree type,
*** 4714,4720 ****
        && TYPE_MODE (type) == BLKmode
        && host_integerp (orig_size, 1)
        && compare_tree_int (orig_size, BIGGEST_ALIGNMENT) <= 0
!       && (size == 0
  	  || (TREE_CODE (size) == INTEGER_CST
  	      && compare_tree_int (size, BIGGEST_ALIGNMENT) <= 0))
        && tree_low_cst (orig_size, 1) % align == 0)
--- 4857,4863 ----
        && TYPE_MODE (type) == BLKmode
        && host_integerp (orig_size, 1)
        && compare_tree_int (orig_size, BIGGEST_ALIGNMENT) <= 0
!       && (!size
  	  || (TREE_CODE (size) == INTEGER_CST
  	      && compare_tree_int (size, BIGGEST_ALIGNMENT) <= 0))
        && tree_low_cst (orig_size, 1) % align == 0)
*************** maybe_pad_type (tree type,
*** 4724,4739 ****
  			      NULL_TREE, bitsize_zero_node, 1);
  
    DECL_INTERNAL_P (field) = 1;
!   TYPE_SIZE (record) = size != 0 ? size : orig_size;
    TYPE_SIZE_UNIT (record)
!     = convert (sizetype,
! 	       size_binop (CEIL_DIV_EXPR, TYPE_SIZE (record),
! 			   bitsize_unit_node));
    TYPE_ALIGN (record) = align;
    TYPE_IS_PADDING_P (record) = 1;
    TYPE_VOLATILE (record)
      = Present (gnat_entity) && Treat_As_Volatile (gnat_entity);
!   finish_record_type (record, field, 1, 0);
  
    /* Keep the RM_Size of the padded record as that of the old record
       if requested.  */
--- 4867,4883 ----
  			      NULL_TREE, bitsize_zero_node, 1);
  
    DECL_INTERNAL_P (field) = 1;
!   TYPE_SIZE (record) = size ? size : orig_size;
    TYPE_SIZE_UNIT (record)
!     = (size ? convert (sizetype,
! 		       size_binop (CEIL_DIV_EXPR, size, bitsize_unit_node))
!        : TYPE_SIZE_UNIT (type));
! 
    TYPE_ALIGN (record) = align;
    TYPE_IS_PADDING_P (record) = 1;
    TYPE_VOLATILE (record)
      = Present (gnat_entity) && Treat_As_Volatile (gnat_entity);
!   finish_record_type (record, field, true, false);
  
    /* Keep the RM_Size of the padded record as that of the old record
       if requested.  */
*************** maybe_pad_type (tree type,
*** 4742,4754 ****
    /* Unless debugging information isn't being written for the input type,
       write a record that shows what we are a subtype of and also make a
       variable that indicates our size, if variable. */
!   if (TYPE_NAME (record) != 0
!       && AGGREGATE_TYPE_P (type)
        && (TREE_CODE (TYPE_NAME (type)) != TYPE_DECL
! 	  || ! DECL_IGNORED_P (TYPE_NAME (type))))
      {
        tree marker = make_node (RECORD_TYPE);
!       tree name = DECL_NAME (TYPE_NAME (record));
        tree orig_name = TYPE_NAME (type);
  
        if (TREE_CODE (orig_name) == TYPE_DECL)
--- 4886,4899 ----
    /* Unless debugging information isn't being written for the input type,
       write a record that shows what we are a subtype of and also make a
       variable that indicates our size, if variable. */
!   if (TYPE_NAME (record) && AGGREGATE_TYPE_P (type)
        && (TREE_CODE (TYPE_NAME (type)) != TYPE_DECL
! 	  || !DECL_IGNORED_P (TYPE_NAME (type))))
      {
        tree marker = make_node (RECORD_TYPE);
!       tree name = (TREE_CODE (TYPE_NAME (record)) == TYPE_DECL
! 		   ? DECL_NAME (TYPE_NAME (record))
! 		   : TYPE_NAME (record));
        tree orig_name = TYPE_NAME (type);
  
        if (TREE_CODE (orig_name) == TYPE_DECL)
*************** maybe_pad_type (tree type,
*** 4759,4783 ****
  			  create_field_decl (orig_name, integer_type_node,
  					     marker, 0, NULL_TREE, NULL_TREE,
  					     0),
! 			  0, 0);
  
!       if (size != 0 && TREE_CODE (size) != INTEGER_CST && definition)
  	create_var_decl (concat_id_with_name (name, "XVZ"), NULL_TREE,
! 			 sizetype, TYPE_SIZE (record), 0, 0, 0, 0,
! 			 0);
      }
  
    type = record;
  
    if (CONTAINS_PLACEHOLDER_P (orig_size))
!     orig_size = max_size (orig_size, 1);
  
    /* If the size was widened explicitly, maybe give a warning.  */
!   if (size != 0 && Present (gnat_entity)
!       && ! operand_equal_p (size, orig_size, 0)
!       && ! (TREE_CODE (size) == INTEGER_CST
! 	    && TREE_CODE (orig_size) == INTEGER_CST
! 	    && tree_int_cst_lt (size, orig_size)))
      {
        Node_Id gnat_error_node = Empty;
  
--- 4904,4928 ----
  			  create_field_decl (orig_name, integer_type_node,
  					     marker, 0, NULL_TREE, NULL_TREE,
  					     0),
! 			  false, false);
  
!       if (size && TREE_CODE (size) != INTEGER_CST && definition)
  	create_var_decl (concat_id_with_name (name, "XVZ"), NULL_TREE,
! 			 sizetype, TYPE_SIZE (record), false, false, false,
! 			 false, NULL, gnat_entity);
      }
  
    type = record;
  
    if (CONTAINS_PLACEHOLDER_P (orig_size))
!     orig_size = max_size (orig_size, true);
  
    /* If the size was widened explicitly, maybe give a warning.  */
!   if (size && Present (gnat_entity)
!       && !operand_equal_p (size, orig_size, 0)
!       && !(TREE_CODE (size) == INTEGER_CST
! 	   && TREE_CODE (orig_size) == INTEGER_CST
! 	   && tree_int_cst_lt (size, orig_size)))
      {
        Node_Id gnat_error_node = Empty;
  
*************** maybe_pad_type (tree type,
*** 4799,4805 ****
  			    gnat_entity,
  			    size_diffop (size, orig_size));
  
!       else if (*name_trailer == 'C' && ! Is_Internal (gnat_entity))
  	post_error_ne_tree ("component of& padded{ by ^ bits}?",
  			    gnat_entity, gnat_entity,
  			    size_diffop (size, orig_size));
--- 4944,4950 ----
  			    gnat_entity,
  			    size_diffop (size, orig_size));
  
!       else if (*name_trailer == 'C' && !Is_Internal (gnat_entity))
  	post_error_ne_tree ("component of& padded{ by ^ bits}?",
  			    gnat_entity, gnat_entity,
  			    size_diffop (size, orig_size));
*************** choices_to_gnu (tree operand, Node_Id ch
*** 4885,4891 ****
  	  break;
  
  	default:
! 	  gigi_abort (114);
  	}
  
        result = build_binary_op (TRUTH_ORIF_EXPR, integer_type_node,
--- 5030,5036 ----
  	  break;
  
  	default:
! 	  gcc_unreachable ();
  	}
  
        result = build_binary_op (TRUTH_ORIF_EXPR, integer_type_node,
*************** choices_to_gnu (tree operand, Node_Id ch
*** 4901,4913 ****
     PACKED is 1 if the enclosing record is packed and -1 if the enclosing
     record has a Component_Alignment of Storage_Unit.
  
!    DEFINITION is nonzero if this field is for a record being defined.  */
  
  static tree
! gnat_to_gnu_field (Entity_Id gnat_field,
!                    tree gnu_record_type,
!                    int packed,
!                    int definition)
  {
    tree gnu_field_id = get_entity_name (gnat_field);
    tree gnu_field_type = gnat_to_gnu_type (Etype (gnat_field));
--- 5046,5056 ----
     PACKED is 1 if the enclosing record is packed and -1 if the enclosing
     record has a Component_Alignment of Storage_Unit.
  
!    DEFINITION is true if this field is for a record being defined.  */
  
  static tree
! gnat_to_gnu_field (Entity_Id gnat_field, tree gnu_record_type, int packed,
!                    bool definition)
  {
    tree gnu_field_id = get_entity_name (gnat_field);
    tree gnu_field_type = gnat_to_gnu_type (Etype (gnat_field));
*************** gnat_to_gnu_field (Entity_Id gnat_field,
*** 4915,4921 ****
    tree gnu_pos = 0;
    tree gnu_size = 0;
    tree gnu_field;
!   int needs_strict_alignment
      = (Is_Aliased (gnat_field) || Strict_Alignment (Etype (gnat_field))
         || Treat_As_Volatile (gnat_field));
  
--- 5058,5064 ----
    tree gnu_pos = 0;
    tree gnu_size = 0;
    tree gnu_field;
!   bool needs_strict_alignment
      = (Is_Aliased (gnat_field) || Strict_Alignment (Etype (gnat_field))
         || Treat_As_Volatile (gnat_field));
  
*************** gnat_to_gnu_field (Entity_Id gnat_field,
*** 4931,4983 ****
  
    if (packed == 1)
      gnu_size = validate_size (RM_Size (Etype (gnat_field)), gnu_field_type,
! 			      gnat_field, FIELD_DECL, 0, 1);
  
    if (Known_Static_Esize (gnat_field))
      gnu_size = validate_size (Esize (gnat_field), gnu_field_type,
! 			      gnat_field, FIELD_DECL, 0, 1);
  
!   /* If the field's type is left-justified modular, the wrapper can prevent
!      packing so we make the field the type of the inner object unless the
!      situation forbids it. We may not do that when the field is addressable_p,
!      typically because in that case this field may later be passed by-ref for
!      a formal argument expecting the left justification.  The condition below
!      is then matching the addressable_p code for COMPONENT_REF.  */
!   if (! Is_Aliased (gnat_field) && flag_strict_aliasing
!       && TREE_CODE (gnu_field_type) == RECORD_TYPE
!       && TYPE_LEFT_JUSTIFIED_MODULAR_P (gnu_field_type))
      gnu_field_type = TREE_TYPE (TYPE_FIELDS (gnu_field_type));
  
!   /* If we are packing this record or we have a specified size that's
!      smaller than that of the field type and the field type is also a record
!      that's BLKmode and with a small constant size, see if we can get a
!      better form of the type that allows more packing.  If we can, show
!      a size was specified for it if there wasn't one so we know to
       make this a bitfield and avoid making things wider.  */
    if (TREE_CODE (gnu_field_type) == RECORD_TYPE
        && TYPE_MODE (gnu_field_type) == BLKmode
        && host_integerp (TYPE_SIZE (gnu_field_type), 1)
        && compare_tree_int (TYPE_SIZE (gnu_field_type), BIGGEST_ALIGNMENT) <= 0
!       && (packed
! 	  || (gnu_size != 0 && tree_int_cst_lt (gnu_size,
! 						TYPE_SIZE (gnu_field_type)))))
      {
        gnu_field_type = make_packable_type (gnu_field_type);
  
!       if (gnu_field_type != gnu_orig_field_type && gnu_size == 0)
  	gnu_size = rm_size (gnu_field_type);
      }
  
    /* If we are packing the record and the field is BLKmode, round the
       size up to a byte boundary.  */
!   if (packed && TYPE_MODE (gnu_field_type) == BLKmode && gnu_size != 0)
      gnu_size = round_up (gnu_size, BITS_PER_UNIT);
  
    if (Present (Component_Clause (gnat_field)))
      {
        gnu_pos = UI_To_gnu (Component_Bit_Offset (gnat_field), bitsizetype);
        gnu_size = validate_size (Esize (gnat_field), gnu_field_type,
! 				gnat_field, FIELD_DECL, 0, 1);
  
        /* Ensure the position does not overlap with the parent subtype,
  	 if there is one.  */
--- 5074,5127 ----
  
    if (packed == 1)
      gnu_size = validate_size (RM_Size (Etype (gnat_field)), gnu_field_type,
! 			      gnat_field, FIELD_DECL, false, true);
  
    if (Known_Static_Esize (gnat_field))
      gnu_size = validate_size (Esize (gnat_field), gnu_field_type,
! 			      gnat_field, FIELD_DECL, false, true);
  
!   /* If the field's type is justified modular and the size of the packed
!      array it wraps is the same as that of the field, we can make the field
!      the type of the inner object.  Note that we may need to do so if the
!      record is packed or the field has a component clause, but these cases
!      are handled later.  */
!   if (TREE_CODE (gnu_field_type) == RECORD_TYPE
!       && TYPE_JUSTIFIED_MODULAR_P (gnu_field_type)
!       && tree_int_cst_equal (TYPE_SIZE (gnu_field_type),
! 			     TYPE_ADA_SIZE (gnu_field_type)))
      gnu_field_type = TREE_TYPE (TYPE_FIELDS (gnu_field_type));
  
!   /* If we are packing this record, have a specified size that's smaller than
!      that of the field type, or a position is specified, and the field type
!      is also a record that's BLKmode and with a small constant size, see if
!      we can get a better form of the type that allows more packing.  If we
!      can, show a size was specified for it if there wasn't one so we know to
       make this a bitfield and avoid making things wider.  */
    if (TREE_CODE (gnu_field_type) == RECORD_TYPE
        && TYPE_MODE (gnu_field_type) == BLKmode
        && host_integerp (TYPE_SIZE (gnu_field_type), 1)
        && compare_tree_int (TYPE_SIZE (gnu_field_type), BIGGEST_ALIGNMENT) <= 0
!       && (packed == 1
! 	  || (gnu_size && tree_int_cst_lt (gnu_size,
! 					   TYPE_SIZE (gnu_field_type)))
! 	  || Present (Component_Clause (gnat_field))))
      {
        gnu_field_type = make_packable_type (gnu_field_type);
  
!       if (gnu_field_type != gnu_orig_field_type && !gnu_size)
  	gnu_size = rm_size (gnu_field_type);
      }
  
    /* If we are packing the record and the field is BLKmode, round the
       size up to a byte boundary.  */
!   if (packed && TYPE_MODE (gnu_field_type) == BLKmode && gnu_size)
      gnu_size = round_up (gnu_size, BITS_PER_UNIT);
  
    if (Present (Component_Clause (gnat_field)))
      {
        gnu_pos = UI_To_gnu (Component_Bit_Offset (gnat_field), bitsizetype);
        gnu_size = validate_size (Esize (gnat_field), gnu_field_type,
! 				gnat_field, FIELD_DECL, false, true);
  
        /* Ensure the position does not overlap with the parent subtype,
  	 if there is one.  */
*************** gnat_to_gnu_field (Entity_Id gnat_field,
*** 5011,5040 ****
  	  /* If Atomic, the size must match exactly and if aliased, the size
  	     must not be less than the rounded size.  */
  	  if ((Is_Atomic (gnat_field) || Is_Atomic (Etype (gnat_field)))
! 	      && ! operand_equal_p (gnu_size, TYPE_SIZE (gnu_field_type), 0))
  	    {
  	      post_error_ne_tree
  		("atomic field& must be natural size of type{ (^)}",
  		 Last_Bit (Component_Clause (gnat_field)), gnat_field,
  		 TYPE_SIZE (gnu_field_type));
  
! 	      gnu_size = 0;
  	    }
  
  	  else if (Is_Aliased (gnat_field)
! 		   && gnu_size != 0
! 		   && tree_int_cst_lt (gnu_size, gnu_min_size))
  	    {
  	      post_error_ne_tree
  		("size of aliased field& too small{, minimum required is ^}",
  		 Last_Bit (Component_Clause (gnat_field)), gnat_field,
  		 gnu_min_size);
! 	      gnu_size = 0;
    	    }
  
! 	  if (! integer_zerop (size_binop
! 			       (TRUNC_MOD_EXPR, gnu_pos,
! 				bitsize_int (TYPE_ALIGN (gnu_field_type)))))
  	    {
  	      if (Is_Aliased (gnat_field))
  		post_error_ne_num
--- 5155,5183 ----
  	  /* If Atomic, the size must match exactly and if aliased, the size
  	     must not be less than the rounded size.  */
  	  if ((Is_Atomic (gnat_field) || Is_Atomic (Etype (gnat_field)))
! 	      && !operand_equal_p (gnu_size, TYPE_SIZE (gnu_field_type), 0))
  	    {
  	      post_error_ne_tree
  		("atomic field& must be natural size of type{ (^)}",
  		 Last_Bit (Component_Clause (gnat_field)), gnat_field,
  		 TYPE_SIZE (gnu_field_type));
  
! 	      gnu_size = NULL_TREE;
  	    }
  
  	  else if (Is_Aliased (gnat_field)
! 		   && gnu_size && tree_int_cst_lt (gnu_size, gnu_min_size))
  	    {
  	      post_error_ne_tree
  		("size of aliased field& too small{, minimum required is ^}",
  		 Last_Bit (Component_Clause (gnat_field)), gnat_field,
  		 gnu_min_size);
! 	      gnu_size = NULL_TREE;
    	    }
  
! 	  if (!integer_zerop (size_binop
! 			      (TRUNC_MOD_EXPR, gnu_pos,
! 			       bitsize_int (TYPE_ALIGN (gnu_field_type)))))
  	    {
  	      if (Is_Aliased (gnat_field))
  		post_error_ne_num
*************** gnat_to_gnu_field (Entity_Id gnat_field,
*** 5054,5072 ****
  		   First_Bit (Component_Clause (gnat_field)), gnat_field,
  		   TYPE_ALIGN (gnu_field_type));
  	      else
! 		gigi_abort (124);
  
! 	      gnu_pos = 0;
  	    }
- 
- 	  /* If an error set the size to zero, show we have no position
- 	     either.  */
- 	  if (gnu_size == 0)
- 	    gnu_pos = 0;
  	}
  
        if (Is_Atomic (gnat_field))
! 	check_ok_for_atomic (gnu_field_type, gnat_field, 0);
      }
  
    /* If the record has rep clauses and this is the tag field, make a rep
--- 5197,5210 ----
  		   First_Bit (Component_Clause (gnat_field)), gnat_field,
  		   TYPE_ALIGN (gnu_field_type));
  	      else
! 		gcc_unreachable ();
  
! 	      gnu_pos = NULL_TREE;
  	    }
  	}
  
        if (Is_Atomic (gnat_field))
! 	check_ok_for_atomic (gnu_field_type, gnat_field, false);
      }
  
    /* If the record has rep clauses and this is the tag field, make a rep
*************** gnat_to_gnu_field (Entity_Id gnat_field,
*** 5082,5126 ****
       self-referential and an unconstrained type.  In that case, we can't
       pack the field since we can't make a copy to align it.  */
    if (TREE_CODE (gnu_field_type) == RECORD_TYPE
!       && gnu_size == 0
        && CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_field_type))
!       && ! Is_Constrained (Underlying_Type (Etype (gnat_field))))
      {
!       gnu_size = max_size (TYPE_SIZE (gnu_field_type), 1);
        packed = 0;
      }
  
    /* If no size is specified (or if there was an error), don't specify a
       position.  */
!   if (gnu_size == 0)
!     gnu_pos = 0;
    else
      {
!       /* Unless this field is aliased, we can remove any left-justified
! 	 modular type since it's only needed in the unchecked conversion
! 	 case, which doesn't apply here.  */
!       if (! needs_strict_alignment
  	  && TREE_CODE (gnu_field_type) == RECORD_TYPE
! 	  && TYPE_LEFT_JUSTIFIED_MODULAR_P (gnu_field_type))
  	gnu_field_type = TREE_TYPE (TYPE_FIELDS (gnu_field_type));
  
        gnu_field_type
  	= make_type_from_size (gnu_field_type, gnu_size,
  			       Has_Biased_Representation (gnat_field));
!       gnu_field_type = maybe_pad_type (gnu_field_type, gnu_size, 0,
! 				       gnat_field, "PAD", 0, definition, 1);
      }
  
!   if (TREE_CODE (gnu_field_type) == RECORD_TYPE
!       && TYPE_CONTAINS_TEMPLATE_P (gnu_field_type))
!     gigi_abort (118);
  
    /* Now create the decl for the field.  */
-   set_lineno (gnat_field, 0);
    gnu_field = create_field_decl (gnu_field_id, gnu_field_type, gnu_record_type,
  				 packed, gnu_size, gnu_pos,
  				 Is_Aliased (gnat_field));
! 
    TREE_THIS_VOLATILE (gnu_field) = Treat_As_Volatile (gnat_field);
  
    if (Ekind (gnat_field) == E_Discriminant)
--- 5220,5266 ----
       self-referential and an unconstrained type.  In that case, we can't
       pack the field since we can't make a copy to align it.  */
    if (TREE_CODE (gnu_field_type) == RECORD_TYPE
!       && !gnu_size
        && CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_field_type))
!       && !Is_Constrained (Underlying_Type (Etype (gnat_field))))
      {
!       gnu_size = max_size (TYPE_SIZE (gnu_field_type), true);
        packed = 0;
      }
  
    /* If no size is specified (or if there was an error), don't specify a
       position.  */
!   if (!gnu_size)
!     gnu_pos = NULL_TREE;
    else
      {
!       /* If the field's type is justified modular, we would need to remove
! 	 the wrapper to (better) meet the layout requirements.  However we
! 	 can do so only if the field is not aliased to preserve the unique
! 	 layout and if the prescribed size is not greater than that of the
! 	 packed array to preserve the justification.  */
!       if (!needs_strict_alignment
  	  && TREE_CODE (gnu_field_type) == RECORD_TYPE
! 	  && TYPE_JUSTIFIED_MODULAR_P (gnu_field_type)
! 	  && tree_int_cst_compare (gnu_size, TYPE_ADA_SIZE (gnu_field_type))
! 	       <= 0)
  	gnu_field_type = TREE_TYPE (TYPE_FIELDS (gnu_field_type));
  
        gnu_field_type
  	= make_type_from_size (gnu_field_type, gnu_size,
  			       Has_Biased_Representation (gnat_field));
!       gnu_field_type = maybe_pad_type (gnu_field_type, gnu_size, 0, gnat_field,
! 				       "PAD", false, definition, true);
      }
  
!   gcc_assert (TREE_CODE (gnu_field_type) != RECORD_TYPE
! 	      || !TYPE_CONTAINS_TEMPLATE_P (gnu_field_type));
  
    /* Now create the decl for the field.  */
    gnu_field = create_field_decl (gnu_field_id, gnu_field_type, gnu_record_type,
  				 packed, gnu_size, gnu_pos,
  				 Is_Aliased (gnat_field));
!   Sloc_to_locus (Sloc (gnat_field), &DECL_SOURCE_LOCATION (gnu_field));
    TREE_THIS_VOLATILE (gnu_field) = Treat_As_Volatile (gnat_field);
  
    if (Ekind (gnat_field) == E_Discriminant)
*************** gnat_to_gnu_field (Entity_Id gnat_field,
*** 5130,5162 ****
    return gnu_field;
  }
  
! /* Return 1 if TYPE is a type with variable size, a padding type with a field
!    of variable size or is a record that has a field such a field.  */
  
! static int
  is_variable_size (tree type)
  {
    tree field;
  
    /* We need not be concerned about this at all if we don't have
       strict alignment.  */
!   if (! STRICT_ALIGNMENT)
!     return 0;
!   else if (! TREE_CONSTANT (TYPE_SIZE (type)))
!     return 1;
    else if (TREE_CODE (type) == RECORD_TYPE && TYPE_IS_PADDING_P (type)
! 	   && ! TREE_CONSTANT (DECL_SIZE (TYPE_FIELDS (type))))
!     return 1;
    else if (TREE_CODE (type) != RECORD_TYPE
  	   && TREE_CODE (type) != UNION_TYPE
  	   && TREE_CODE (type) != QUAL_UNION_TYPE)
!     return 0;
  
!   for (field = TYPE_FIELDS (type); field != 0; field = TREE_CHAIN (field))
      if (is_variable_size (TREE_TYPE (field)))
!       return 1;
  
!   return 0;
  }
  
  /* Return a GCC tree for a record type given a GNAT Component_List and a chain
--- 5270,5302 ----
    return gnu_field;
  }
  
! /* Return true if TYPE is a type with variable size, a padding type with a
!    field of variable size or is a record that has a field such a field.  */
  
! static bool
  is_variable_size (tree type)
  {
    tree field;
  
    /* We need not be concerned about this at all if we don't have
       strict alignment.  */
!   if (!STRICT_ALIGNMENT)
!     return false;
!   else if (!TREE_CONSTANT (TYPE_SIZE (type)))
!     return true;
    else if (TREE_CODE (type) == RECORD_TYPE && TYPE_IS_PADDING_P (type)
! 	   && !TREE_CONSTANT (DECL_SIZE (TYPE_FIELDS (type))))
!     return true;
    else if (TREE_CODE (type) != RECORD_TYPE
  	   && TREE_CODE (type) != UNION_TYPE
  	   && TREE_CODE (type) != QUAL_UNION_TYPE)
!     return false;
  
!   for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
      if (is_variable_size (TREE_TYPE (field)))
!       return true;
  
!   return false;
  }
  
  /* Return a GCC tree for a record type given a GNAT Component_List and a chain
*************** is_variable_size (tree type)
*** 5169,5202 ****
     PACKED is 1 if this is for a record with "pragma pack" and -1 is this is
     for a record type with "pragma component_alignment (storage_unit)".
  
!    FINISH_RECORD is nonzero if this call will supply all of the remaining
!    fields of the record.
  
     P_GNU_REP_LIST, if nonzero, is a pointer to a list to which each field
     with a rep clause is to be added.  If it is nonzero, that is all that
     should be done with such fields.
  
!    CANCEL_ALIGNMENT, if nonzero, means the alignment should be zeroed
!    before laying out the record.  This means the alignment only serves
!    to force fields to be bitfields, but not require the record to be
!    that aligned.  This is used for variants.
  
!    ALL_REP, if nonzero, means that a rep clause was found for all the
!    fields.  This simplifies the logic since we know we're not in the mixed
!    case.
  
     The processing of the component list fills in the chain with all of the
     fields of the record and then the record type is finished.  */
  
  static void
! components_to_record (tree gnu_record_type,
!                       Node_Id component_list,
!                       tree gnu_field_list,
!                       int packed,
!                       int definition,
!                       tree *p_gnu_rep_list,
!                       int cancel_alignment,
!                       int all_rep)
  {
    Node_Id component_decl;
    Entity_Id gnat_field;
--- 5309,5336 ----
     PACKED is 1 if this is for a record with "pragma pack" and -1 is this is
     for a record type with "pragma component_alignment (storage_unit)".
  
!    DEFINITION is true if we are defining this record.
  
     P_GNU_REP_LIST, if nonzero, is a pointer to a list to which each field
     with a rep clause is to be added.  If it is nonzero, that is all that
     should be done with such fields.
  
!    CANCEL_ALIGNMENT, if true, means the alignment should be zeroed before
!    laying out the record.  This means the alignment only serves to force fields
!    to be bitfields, but not require the record to be that aligned.  This is
!    used for variants.
  
!    ALL_REP, if true, means a rep clause was found for all the fields.  This
!    simplifies the logic since we know we're not in the mixed case.
  
     The processing of the component list fills in the chain with all of the
     fields of the record and then the record type is finished.  */
  
  static void
! components_to_record (tree gnu_record_type, Node_Id component_list,
!                       tree gnu_field_list, int packed, bool definition,
!                       tree *p_gnu_rep_list, bool cancel_alignment,
! 		      bool all_rep)
  {
    Node_Id component_decl;
    Entity_Id gnat_field;
*************** components_to_record (tree gnu_record_ty
*** 5204,5211 ****
    Node_Id variant;
    tree gnu_our_rep_list = NULL_TREE;
    tree gnu_field, gnu_last;
!   int layout_with_rep = 0;
!   int all_rep_and_size = all_rep && TYPE_SIZE (gnu_record_type) != 0;
  
    /* For each variable within each component declaration create a GCC field
       and add it to the list, skipping any pragmas in the list.  */
--- 5338,5345 ----
    Node_Id variant;
    tree gnu_our_rep_list = NULL_TREE;
    tree gnu_field, gnu_last;
!   bool layout_with_rep = false;
!   bool all_rep_and_size = all_rep && TYPE_SIZE (gnu_record_type);
  
    /* For each variable within each component declaration create a GCC field
       and add it to the list, skipping any pragmas in the list.  */
*************** components_to_record (tree gnu_record_ty
*** 5236,5242 ****
  	      }
  	  }
  
! 	  save_gnu_tree (gnat_field, gnu_field, 0);
          }
  
    /* At the end of the component list there may be a variant part.  */
--- 5370,5376 ----
  	      }
  	  }
  
! 	  save_gnu_tree (gnat_field, gnu_field, false);
          }
  
    /* At the end of the component list there may be a variant part.  */
*************** components_to_record (tree gnu_record_ty
*** 5244,5250 ****
  
    /* If this is an unchecked union, each variant must have exactly one
       component, each of which becomes one component of this union.  */
!   if (TREE_CODE (gnu_record_type) == UNION_TYPE && Present (variant_part))
      for (variant = First_Non_Pragma (Variants (variant_part));
  	 Present (variant);
  	 variant = Next_Non_Pragma (variant))
--- 5378,5386 ----
  
    /* If this is an unchecked union, each variant must have exactly one
       component, each of which becomes one component of this union.  */
!   if (TREE_CODE (gnu_record_type) == UNION_TYPE
!       && TYPE_UNCHECKED_UNION_P (gnu_record_type)
!       && Present (variant_part))
      for (variant = First_Non_Pragma (Variants (variant_part));
  	 Present (variant);
  	 variant = Next_Non_Pragma (variant))
*************** components_to_record (tree gnu_record_ty
*** 5256,5262 ****
  				       definition);
  	TREE_CHAIN (gnu_field) = gnu_field_list;
  	gnu_field_list = gnu_field;
! 	save_gnu_tree (gnat_field, gnu_field, 0);
        }
  
    /* We create a QUAL_UNION_TYPE for the variant part since the variants are
--- 5392,5398 ----
  				       definition);
  	TREE_CHAIN (gnu_field) = gnu_field_list;
  	gnu_field_list = gnu_field;
! 	save_gnu_tree (gnat_field, gnu_field, false);
        }
  
    /* We create a QUAL_UNION_TYPE for the variant part since the variants are
*************** components_to_record (tree gnu_record_ty
*** 5328,5334 ****
  					  ? TYPE_SIZE (gnu_record_type) : 0),
  					 (all_rep_and_size
  					  ? bitsize_zero_node : 0),
! 					 1);
  
  	  DECL_INTERNAL_P (gnu_field) = 1;
  	  DECL_QUALIFIER (gnu_field) = gnu_qual;
--- 5464,5470 ----
  					  ? TYPE_SIZE (gnu_record_type) : 0),
  					 (all_rep_and_size
  					  ? bitsize_zero_node : 0),
! 					 0);
  
  	  DECL_INTERNAL_P (gnu_field) = 1;
  	  DECL_QUALIFIER (gnu_field) = gnu_qual;
*************** components_to_record (tree gnu_record_ty
*** 5343,5349 ****
           to these empty variants.  */
  
        /* Only make the QUAL_UNION_TYPE if there are any non-empty variants.  */
!       if (gnu_variant_list != 0)
  	{
  	  if (all_rep_and_size)
  	    {
--- 5479,5485 ----
           to these empty variants.  */
  
        /* Only make the QUAL_UNION_TYPE if there are any non-empty variants.  */
!       if (gnu_variant_list)
  	{
  	  if (all_rep_and_size)
  	    {
*************** components_to_record (tree gnu_record_ty
*** 5353,5365 ****
  	    }
  
  	  finish_record_type (gnu_union_type, nreverse (gnu_variant_list),
! 			      all_rep_and_size, 0);
  
  	  gnu_union_field
  	    = create_field_decl (gnu_var_name, gnu_union_type, gnu_record_type,
  				 packed,
  				 all_rep ? TYPE_SIZE (gnu_union_type) : 0,
! 				 all_rep ? bitsize_zero_node : 0, 1);
  
  	  DECL_INTERNAL_P (gnu_union_field) = 1;
  	  TREE_CHAIN (gnu_union_field) = gnu_field_list;
--- 5489,5501 ----
  	    }
  
  	  finish_record_type (gnu_union_type, nreverse (gnu_variant_list),
! 			      all_rep_and_size, false);
  
  	  gnu_union_field
  	    = create_field_decl (gnu_var_name, gnu_union_type, gnu_record_type,
  				 packed,
  				 all_rep ? TYPE_SIZE (gnu_union_type) : 0,
! 				 all_rep ? bitsize_zero_node : 0, 0);
  
  	  DECL_INTERNAL_P (gnu_union_field) = 1;
  	  TREE_CHAIN (gnu_union_field) = gnu_field_list;
*************** components_to_record (tree gnu_record_ty
*** 5375,5387 ****
       ??? Note: if we then reorder them, debugging information will be wrong,
       but there's nothing that can be done about this at the moment.  */
  
!   for (gnu_field = gnu_field_list, gnu_last = 0; gnu_field; )
      {
!       if (DECL_FIELD_OFFSET (gnu_field) != 0)
  	{
  	  tree gnu_next = TREE_CHAIN (gnu_field);
  
! 	  if (gnu_last == 0)
  	    gnu_field_list = gnu_next;
  	  else
  	    TREE_CHAIN (gnu_last) = gnu_next;
--- 5511,5523 ----
       ??? Note: if we then reorder them, debugging information will be wrong,
       but there's nothing that can be done about this at the moment.  */
  
!   for (gnu_field = gnu_field_list, gnu_last = NULL_TREE; gnu_field; )
      {
!       if (DECL_FIELD_OFFSET (gnu_field))
  	{
  	  tree gnu_next = TREE_CHAIN (gnu_field);
  
! 	  if (!gnu_last)
  	    gnu_field_list = gnu_next;
  	  else
  	    TREE_CHAIN (gnu_last) = gnu_next;
*************** components_to_record (tree gnu_record_ty
*** 5402,5413 ****
       set it and ignore the items.  Otherwise, sort the fields by bit position
       and put them into their own record if we have any fields without
       rep clauses. */
!   if (gnu_our_rep_list != 0 && p_gnu_rep_list != 0 && ! all_rep)
      *p_gnu_rep_list = chainon (*p_gnu_rep_list, gnu_our_rep_list);
!   else if (gnu_our_rep_list != 0)
      {
        tree gnu_rep_type
! 	= gnu_field_list == 0 ? gnu_record_type : make_node (RECORD_TYPE);
        int len = list_length (gnu_our_rep_list);
        tree *gnu_arr = (tree *) alloca (sizeof (tree) * len);
        int i;
--- 5538,5549 ----
       set it and ignore the items.  Otherwise, sort the fields by bit position
       and put them into their own record if we have any fields without
       rep clauses. */
!   if (gnu_our_rep_list && p_gnu_rep_list && !all_rep)
      *p_gnu_rep_list = chainon (*p_gnu_rep_list, gnu_our_rep_list);
!   else if (gnu_our_rep_list)
      {
        tree gnu_rep_type
! 	= (gnu_field_list ? make_node (RECORD_TYPE) : gnu_record_type);
        int len = list_length (gnu_our_rep_list);
        tree *gnu_arr = (tree *) alloca (sizeof (tree) * len);
        int i;
*************** components_to_record (tree gnu_record_ty
*** 5431,5442 ****
  	  TREE_CHAIN (gnu_arr[i]) = gnu_our_rep_list;
  	  gnu_our_rep_list = gnu_arr[i];
  	  DECL_CONTEXT (gnu_arr[i]) = gnu_rep_type;
! 	  DECL_SECTION_NAME (gnu_arr[i]) = 0;
  	}
  
!       if (gnu_field_list != 0)
  	{
! 	  finish_record_type (gnu_rep_type, gnu_our_rep_list, 1, 0);
  	  gnu_field = create_field_decl (get_identifier ("REP"), gnu_rep_type,
  					 gnu_record_type, 0, 0, 0, 1);
  	  DECL_INTERNAL_P (gnu_field) = 1;
--- 5567,5578 ----
  	  TREE_CHAIN (gnu_arr[i]) = gnu_our_rep_list;
  	  gnu_our_rep_list = gnu_arr[i];
  	  DECL_CONTEXT (gnu_arr[i]) = gnu_rep_type;
! 	  DECL_SECTION_NAME (gnu_arr[i]) = NULL_TREE;
  	}
  
!       if (gnu_field_list)
  	{
! 	  finish_record_type (gnu_rep_type, gnu_our_rep_list, true, false);
  	  gnu_field = create_field_decl (get_identifier ("REP"), gnu_rep_type,
  					 gnu_record_type, 0, 0, 0, 1);
  	  DECL_INTERNAL_P (gnu_field) = 1;
*************** components_to_record (tree gnu_record_ty
*** 5444,5450 ****
  	}
        else
  	{
! 	  layout_with_rep = 1;
  	  gnu_field_list = nreverse (gnu_our_rep_list);
  	}
      }
--- 5580,5586 ----
  	}
        else
  	{
! 	  layout_with_rep = true;
  	  gnu_field_list = nreverse (gnu_our_rep_list);
  	}
      }
*************** components_to_record (tree gnu_record_ty
*** 5453,5459 ****
      TYPE_ALIGN (gnu_record_type) = 0;
  
    finish_record_type (gnu_record_type, nreverse (gnu_field_list),
! 		      layout_with_rep, 0);
  }
  
  /* Called via qsort from the above.  Returns -1, 1, depending on the
--- 5589,5595 ----
      TYPE_ALIGN (gnu_record_type) = 0;
  
    finish_record_type (gnu_record_type, nreverse (gnu_field_list),
! 		      layout_with_rep, false);
  }
  
  /* Called via qsort from the above.  Returns -1, 1, depending on the
*************** annotate_value (tree gnu_size)
*** 5493,5500 ****
      return No_Uint;
  
    /* See if we've already saved the value for this node.  */
!   if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (gnu_size)))
!       && TREE_COMPLEXITY (gnu_size) != 0)
      return (Node_Ref_Or_Val) TREE_COMPLEXITY (gnu_size);
  
    /* If we do not return inside this switch, TCODE will be set to the
--- 5629,5635 ----
      return No_Uint;
  
    /* See if we've already saved the value for this node.  */
!   if (EXPR_P (gnu_size) && TREE_COMPLEXITY (gnu_size))
      return (Node_Ref_Or_Val) TREE_COMPLEXITY (gnu_size);
  
    /* If we do not return inside this switch, TCODE will be set to the
*************** annotate_value (tree gnu_size)
*** 5517,5523 ****
  	  /* The rediculous code below is to handle the case of the largest
  	     negative integer.  */
  	  tree negative_size = size_diffop (bitsize_zero_node, gnu_size);
! 	  int adjust = 0;
  	  tree temp;
  
  	  if (TREE_CONSTANT_OVERFLOW (negative_size))
--- 5652,5658 ----
  	  /* The rediculous code below is to handle the case of the largest
  	     negative integer.  */
  	  tree negative_size = size_diffop (bitsize_zero_node, gnu_size);
! 	  bool adjust = false;
  	  tree temp;
  
  	  if (TREE_CONSTANT_OVERFLOW (negative_size))
*************** annotate_value (tree gnu_size)
*** 5526,5542 ****
  		= size_binop (MINUS_EXPR, bitsize_zero_node,
  			      size_binop (PLUS_EXPR, gnu_size,
  					  bitsize_one_node));
! 	      adjust = 1;
  	    }
  
  	  temp = build1 (NEGATE_EXPR, bitsizetype, negative_size);
  	  if (adjust)
! 	    temp = build (MINUS_EXPR, bitsizetype, temp, bitsize_one_node);
  
  	  return annotate_value (temp);
  	}
  
!       if (! host_integerp (gnu_size, 1))
  	return No_Uint;
  
        size = tree_low_cst (gnu_size, 1);
--- 5661,5677 ----
  		= size_binop (MINUS_EXPR, bitsize_zero_node,
  			      size_binop (PLUS_EXPR, gnu_size,
  					  bitsize_one_node));
! 	      adjust = true;
  	    }
  
  	  temp = build1 (NEGATE_EXPR, bitsizetype, negative_size);
  	  if (adjust)
! 	    temp = build2 (MINUS_EXPR, bitsizetype, temp, bitsize_one_node);
  
  	  return annotate_value (temp);
  	}
  
!       if (!host_integerp (gnu_size, 1))
  	return No_Uint;
  
        size = tree_low_cst (gnu_size, 1);
*************** annotate_value (tree gnu_size)
*** 5552,5558 ****
        /* The only case we handle here is a simple discriminant reference.  */
        if (TREE_CODE (TREE_OPERAND (gnu_size, 0)) == PLACEHOLDER_EXPR
  	  && TREE_CODE (TREE_OPERAND (gnu_size, 1)) == FIELD_DECL
! 	  && DECL_DISCRIMINANT_NUMBER (TREE_OPERAND (gnu_size, 1)) != 0)
  	return Create_Node (Discrim_Val,
  			    annotate_value (DECL_DISCRIMINANT_NUMBER
  					    (TREE_OPERAND (gnu_size, 1))),
--- 5687,5693 ----
        /* The only case we handle here is a simple discriminant reference.  */
        if (TREE_CODE (TREE_OPERAND (gnu_size, 0)) == PLACEHOLDER_EXPR
  	  && TREE_CODE (TREE_OPERAND (gnu_size, 1)) == FIELD_DECL
! 	  && DECL_DISCRIMINANT_NUMBER (TREE_OPERAND (gnu_size, 1)))
  	return Create_Node (Discrim_Val,
  			    annotate_value (DECL_DISCRIMINANT_NUMBER
  					    (TREE_OPERAND (gnu_size, 1))),
*************** annotate_rep (Entity_Id gnat_entity, tre
*** 5624,5630 ****
    tree gnu_entry;
    Entity_Id gnat_field;
  
!   /* We operate by first making a list of all field and their positions
       (we can get the sizes easily at any time) by a recursive call
       and then update all the sizes into the tree.  */
    gnu_list = compute_field_positions (gnu_type, NULL_TREE,
--- 5759,5765 ----
    tree gnu_entry;
    Entity_Id gnat_field;
  
!   /* We operate by first making a list of all fields and their positions
       (we can get the sizes easily at any time) by a recursive call
       and then update all the sizes into the tree.  */
    gnu_list = compute_field_positions (gnu_type, NULL_TREE,
*************** annotate_rep (Entity_Id gnat_entity, tre
*** 5635,5647 ****
         gnat_field = Next_Entity (gnat_field))
      if ((Ekind (gnat_field) == E_Component
  	 || (Ekind (gnat_field) == E_Discriminant
! 	     && ! Is_Unchecked_Union (Scope (gnat_field)))))
        {
  	tree parent_offset = bitsize_zero_node;
  
! 	gnu_entry
! 	  = purpose_member (gnat_to_gnu_entity (gnat_field, NULL_TREE, 0),
! 			    gnu_list);
  
          if (gnu_entry)
  	  {
--- 5770,5781 ----
         gnat_field = Next_Entity (gnat_field))
      if ((Ekind (gnat_field) == E_Component
  	 || (Ekind (gnat_field) == E_Discriminant
! 	     && !Is_Unchecked_Union (Scope (gnat_field)))))
        {
  	tree parent_offset = bitsize_zero_node;
  
! 	gnu_entry = purpose_member (gnat_to_gnu_field_decl (gnat_field),
! 				    gnu_list);
  
          if (gnu_entry)
  	  {
*************** annotate_rep (Entity_Id gnat_entity, tre
*** 5696,5706 ****
     so far.  */
  
  static tree
! compute_field_positions (tree gnu_type,
!                          tree gnu_list,
!                          tree gnu_pos,
!                          tree gnu_bitpos,
!                          unsigned int offset_align)
  {
    tree gnu_field;
    tree gnu_result = gnu_list;
--- 5830,5837 ----
     so far.  */
  
  static tree
! compute_field_positions (tree gnu_type, tree gnu_list, tree gnu_pos,
!                          tree gnu_bitpos, unsigned int offset_align)
  {
    tree gnu_field;
    tree gnu_result = gnu_list;
*************** compute_field_positions (tree gnu_type,
*** 5740,5755 ****
     for the size of a field.  COMPONENT_P is true if we are being called
     to process the Component_Size of GNAT_OBJECT.  This is used for error
     message handling and to indicate to use the object size of GNU_TYPE.
!    ZERO_OK is nonzero if a size of zero is permitted; if ZERO_OK is zero,
     it means that a size of zero should be treated as an unspecified size.  */
  
  static tree
! validate_size (Uint uint_size,
!                tree gnu_type,
!                Entity_Id gnat_object,
!                enum tree_code kind,
!                int component_p,
!                int zero_ok)
  {
    Node_Id gnat_error_node;
    tree type_size
--- 5871,5882 ----
     for the size of a field.  COMPONENT_P is true if we are being called
     to process the Component_Size of GNAT_OBJECT.  This is used for error
     message handling and to indicate to use the object size of GNU_TYPE.
!    ZERO_OK is true if a size of zero is permitted; if ZERO_OK is false,
     it means that a size of zero should be treated as an unspecified size.  */
  
  static tree
! validate_size (Uint uint_size, tree gnu_type, Entity_Id gnat_object,
!                enum tree_code kind, bool component_p, bool zero_ok)
  {
    Node_Id gnat_error_node;
    tree type_size
*************** validate_size (Uint uint_size,
*** 5769,5775 ****
    /* Return 0 if no size was specified, either because Esize was not Present or
       the specified size was zero.  */
    if (No (uint_size) || uint_size == No_Uint)
!     return 0;
  
    /* Get the size as a tree.  Give an error if a size was specified, but cannot
       be represented as in sizetype. */
--- 5896,5902 ----
    /* Return 0 if no size was specified, either because Esize was not Present or
       the specified size was zero.  */
    if (No (uint_size) || uint_size == No_Uint)
!     return NULL_TREE;
  
    /* Get the size as a tree.  Give an error if a size was specified, but cannot
       be represented as in sizetype. */
*************** validate_size (Uint uint_size,
*** 5779,5795 ****
        post_error_ne (component_p ? "component size of & is too large"
  		     : "size of & is too large",
  		     gnat_error_node, gnat_object);
!       return 0;
      }
    /* Ignore a negative size since that corresponds to our back-annotation.
       Also ignore a zero size unless a size clause exists.  */
!   else if (tree_int_cst_sgn (size) < 0 || (integer_zerop (size) && ! zero_ok))
!     return 0;
  
    /* The size of objects is always a multiple of a byte.  */
    if (kind == VAR_DECL
!       && ! integer_zerop (size_binop (TRUNC_MOD_EXPR, size,
! 				      bitsize_unit_node)))
      {
        if (component_p)
  	post_error_ne ("component size for& is not a multiple of Storage_Unit",
--- 5906,5922 ----
        post_error_ne (component_p ? "component size of & is too large"
  		     : "size of & is too large",
  		     gnat_error_node, gnat_object);
!       return NULL_TREE;
      }
+ 
    /* Ignore a negative size since that corresponds to our back-annotation.
       Also ignore a zero size unless a size clause exists.  */
!   else if (tree_int_cst_sgn (size) < 0 || (integer_zerop (size) && !zero_ok))
!     return NULL_TREE;
  
    /* The size of objects is always a multiple of a byte.  */
    if (kind == VAR_DECL
!       && !integer_zerop (size_binop (TRUNC_MOD_EXPR, size, bitsize_unit_node)))
      {
        if (component_p)
  	post_error_ne ("component size for& is not a multiple of Storage_Unit",
*************** validate_size (Uint uint_size,
*** 5797,5803 ****
        else
  	post_error_ne ("size for& is not a multiple of Storage_Unit",
  		       gnat_error_node, gnat_object);
!       return 0;
      }
  
    /* If this is an integral type or a packed array type, the front-end has
--- 5924,5930 ----
        else
  	post_error_ne ("size for& is not a multiple of Storage_Unit",
  		       gnat_error_node, gnat_object);
!       return NULL_TREE;
      }
  
    /* If this is an integral type or a packed array type, the front-end has
*************** validate_size (Uint uint_size,
*** 5805,5811 ****
       checking against the bounds).  However, if this is an aliased object, it
       may not be smaller than the type of the object.  */
    if ((INTEGRAL_TYPE_P (gnu_type) || TYPE_IS_PACKED_ARRAY_TYPE_P (gnu_type))
!       && ! (kind == VAR_DECL && Is_Aliased (gnat_object)))
      return size;
  
    /* If the object is a record that contains a template, add the size of
--- 5932,5938 ----
       checking against the bounds).  However, if this is an aliased object, it
       may not be smaller than the type of the object.  */
    if ((INTEGRAL_TYPE_P (gnu_type) || TYPE_IS_PACKED_ARRAY_TYPE_P (gnu_type))
!       && !(kind == VAR_DECL && Is_Aliased (gnat_object)))
      return size;
  
    /* If the object is a record that contains a template, add the size of
*************** validate_size (Uint uint_size,
*** 5816,5826 ****
  
    /* Modify the size of the type to be that of the maximum size if it has a
       discriminant or the size of a thin pointer if this is a fat pointer.  */
!   if (type_size != 0 && CONTAINS_PLACEHOLDER_P (type_size))
!     type_size = max_size (type_size, 1);
    else if (TYPE_FAT_POINTER_P (gnu_type))
      type_size = bitsize_int (POINTER_SIZE);
  
    /* If the size of the object is a constant, the new size must not be
       smaller.  */
    if (TREE_CODE (type_size) != INTEGER_CST
--- 5943,5967 ----
  
    /* Modify the size of the type to be that of the maximum size if it has a
       discriminant or the size of a thin pointer if this is a fat pointer.  */
!   if (type_size && CONTAINS_PLACEHOLDER_P (type_size))
!     type_size = max_size (type_size, true);
    else if (TYPE_FAT_POINTER_P (gnu_type))
      type_size = bitsize_int (POINTER_SIZE);
  
+   /* If this is an access type, the minimum size is that given by the smallest
+      integral mode that's valid for pointers.  */
+   if (TREE_CODE (gnu_type) == POINTER_TYPE)
+     {
+       enum machine_mode p_mode;
+ 
+       for (p_mode = GET_CLASS_NARROWEST_MODE (MODE_INT);
+ 	   !targetm.valid_pointer_mode (p_mode);
+ 	   p_mode = GET_MODE_WIDER_MODE (p_mode))
+ 	;
+ 
+       type_size = bitsize_int (GET_MODE_BITSIZE (p_mode));
+     }
+ 
    /* If the size of the object is a constant, the new size must not be
       smaller.  */
    if (TREE_CODE (type_size) != INTEGER_CST
*************** validate_size (Uint uint_size,
*** 5835,5843 ****
  	post_error_ne_tree ("size for& too small{, minimum allowed is ^}",
  			    gnat_error_node, gnat_object, type_size);
  
!       if (kind == VAR_DECL && ! component_p
  	  && TREE_CODE (rm_size (gnu_type)) == INTEGER_CST
! 	  && ! tree_int_cst_lt (size, rm_size (gnu_type)))
  	post_error_ne_tree_2
  	  ("\\size of ^ is not a multiple of alignment (^ bits)",
  	   gnat_error_node, gnat_object, rm_size (gnu_type),
--- 5976,5984 ----
  	post_error_ne_tree ("size for& too small{, minimum allowed is ^}",
  			    gnat_error_node, gnat_object, type_size);
  
!       if (kind == VAR_DECL && !component_p
  	  && TREE_CODE (rm_size (gnu_type)) == INTEGER_CST
! 	  && !tree_int_cst_lt (size, rm_size (gnu_type)))
  	post_error_ne_tree_2
  	  ("\\size of ^ is not a multiple of alignment (^ bits)",
  	   gnat_error_node, gnat_object, rm_size (gnu_type),
*************** validate_size (Uint uint_size,
*** 5847,5853 ****
  	post_error_ne ("\\size would be legal if & were not aliased!",
  		       gnat_error_node, gnat_object);
  
!       return 0;
      }
  
    return size;
--- 5988,5994 ----
  	post_error_ne ("\\size would be legal if & were not aliased!",
  		       gnat_error_node, gnat_object);
  
!       return NULL_TREE;
      }
  
    return size;
*************** set_rm_size (Uint uint_size, tree gnu_ty
*** 5889,5901 ****
       front end will have always set it.  */
    else if (tree_int_cst_sgn (size) < 0
  	   || (integer_zerop (size) && No (gnat_attr_node)
! 	       && ! Has_Size_Clause (gnat_entity)
! 	       && ! Is_Discrete_Or_Fixed_Point_Type (gnat_entity)))
      return;
  
    /* If the old size is self-referential, get the maximum size.  */
    if (CONTAINS_PLACEHOLDER_P (old_size))
!     old_size = max_size (old_size, 1);
  
    /* If the size of the object is a constant, the new size must not be
       smaller (the front end checks this for scalar types).  */
--- 6030,6042 ----
       front end will have always set it.  */
    else if (tree_int_cst_sgn (size) < 0
  	   || (integer_zerop (size) && No (gnat_attr_node)
! 	       && !Has_Size_Clause (gnat_entity)
! 	       && !Is_Discrete_Or_Fixed_Point_Type (gnat_entity)))
      return;
  
    /* If the old size is self-referential, get the maximum size.  */
    if (CONTAINS_PLACEHOLDER_P (old_size))
!     old_size = max_size (old_size, true);
  
    /* If the size of the object is a constant, the new size must not be
       smaller (the front end checks this for scalar types).  */
*************** set_rm_size (Uint uint_size, tree gnu_ty
*** 5915,5927 ****
    /* Otherwise, set the RM_Size.  */
    if (TREE_CODE (gnu_type) == INTEGER_TYPE
        && Is_Discrete_Or_Fixed_Point_Type (gnat_entity))
!     TYPE_RM_SIZE_INT (gnu_type) = size;
    else if (TREE_CODE (gnu_type) == ENUMERAL_TYPE)
!     SET_TYPE_RM_SIZE_ENUM (gnu_type, size);
    else if ((TREE_CODE (gnu_type) == RECORD_TYPE
  	    || TREE_CODE (gnu_type) == UNION_TYPE
  	    || TREE_CODE (gnu_type) == QUAL_UNION_TYPE)
! 	   && ! TYPE_IS_FAT_POINTER_P (gnu_type))
      SET_TYPE_ADA_SIZE (gnu_type, size);
  }
  
--- 6056,6068 ----
    /* Otherwise, set the RM_Size.  */
    if (TREE_CODE (gnu_type) == INTEGER_TYPE
        && Is_Discrete_Or_Fixed_Point_Type (gnat_entity))
!     TYPE_RM_SIZE_NUM (gnu_type) = size;
    else if (TREE_CODE (gnu_type) == ENUMERAL_TYPE)
!     TYPE_RM_SIZE_NUM (gnu_type) = size;
    else if ((TREE_CODE (gnu_type) == RECORD_TYPE
  	    || TREE_CODE (gnu_type) == UNION_TYPE
  	    || TREE_CODE (gnu_type) == QUAL_UNION_TYPE)
! 	   && !TYPE_IS_FAT_POINTER_P (gnu_type))
      SET_TYPE_ADA_SIZE (gnu_type, size);
  }
  
*************** set_rm_size (Uint uint_size, tree gnu_ty
*** 5931,5944 ****
     we are making a biased type.  */
  
  static tree
! make_type_from_size (tree type, tree size_tree, int biased_p)
  {
    tree new_type;
    unsigned HOST_WIDE_INT size;
  
    /* If size indicates an error, just return TYPE to avoid propagating the
       error.  Likewise if it's too large to represent.  */
!   if (size_tree == 0 || ! host_integerp (size_tree, 1))
      return type;
  
    size = tree_low_cst (size_tree, 1);
--- 6072,6086 ----
     we are making a biased type.  */
  
  static tree
! make_type_from_size (tree type, tree size_tree, bool biased_p)
  {
    tree new_type;
    unsigned HOST_WIDE_INT size;
+   bool unsigned_p;
  
    /* If size indicates an error, just return TYPE to avoid propagating the
       error.  Likewise if it's too large to represent.  */
!   if (!size_tree || !host_integerp (size_tree, 1))
      return type;
  
    size = tree_low_cst (size_tree, 1);
*************** make_type_from_size (tree type, tree siz
*** 5954,5974 ****
  			      && TYPE_BIASED_REPRESENTATION_P (type))))
  	break;
  
        size = MIN (size, LONG_LONG_TYPE_SIZE);
!       new_type = make_signed_type (size);
!       TREE_TYPE (new_type)
! 	= TREE_TYPE (type) != 0 ? TREE_TYPE (type) : type;
        TYPE_MIN_VALUE (new_type)
  	= convert (TREE_TYPE (new_type), TYPE_MIN_VALUE (type));
        TYPE_MAX_VALUE (new_type)
  	= convert (TREE_TYPE (new_type), TYPE_MAX_VALUE (type));
!       TYPE_BIASED_REPRESENTATION_P (new_type)
! 	= ((TREE_CODE (type) == INTEGER_TYPE
! 	    && TYPE_BIASED_REPRESENTATION_P (type))
! 	   || biased_p);
!       TREE_UNSIGNED (new_type)
! 	= TREE_UNSIGNED (type) | TYPE_BIASED_REPRESENTATION_P (new_type);
!       TYPE_RM_SIZE_INT (new_type) = bitsize_int (size);
        return new_type;
  
      case RECORD_TYPE:
--- 6096,6115 ----
  			      && TYPE_BIASED_REPRESENTATION_P (type))))
  	break;
  
+       biased_p |= (TREE_CODE (type) == INTEGER_TYPE
+ 		   && TYPE_BIASED_REPRESENTATION_P (type));
+       unsigned_p = TYPE_UNSIGNED (type) || biased_p;
+ 
        size = MIN (size, LONG_LONG_TYPE_SIZE);
!       new_type
! 	= unsigned_p ? make_unsigned_type (size) : make_signed_type (size);
!       TREE_TYPE (new_type) = TREE_TYPE (type) ? TREE_TYPE (type) : type;
        TYPE_MIN_VALUE (new_type)
  	= convert (TREE_TYPE (new_type), TYPE_MIN_VALUE (type));
        TYPE_MAX_VALUE (new_type)
  	= convert (TREE_TYPE (new_type), TYPE_MAX_VALUE (type));
!       TYPE_BIASED_REPRESENTATION_P (new_type) = biased_p;
!       TYPE_RM_SIZE_NUM (new_type) = bitsize_int (size);
        return new_type;
  
      case RECORD_TYPE:
*************** validate_alignment (Uint alignment, Enti
*** 6029,6036 ****
      post_error_ne_num ("largest supported alignment for& is ^",
  		       gnat_error_node, gnat_entity,
  		       MAX_OFILE_ALIGNMENT / BITS_PER_UNIT);
!   else if (! (Present (Alignment_Clause (gnat_entity))
! 	      && From_At_Mod (Alignment_Clause (gnat_entity)))
  	   && new_align * BITS_PER_UNIT < align)
      post_error_ne_num ("alignment for& must be at least ^",
  		       gnat_error_node, gnat_entity,
--- 6170,6177 ----
      post_error_ne_num ("largest supported alignment for& is ^",
  		       gnat_error_node, gnat_entity,
  		       MAX_OFILE_ALIGNMENT / BITS_PER_UNIT);
!   else if (!(Present (Alignment_Clause (gnat_entity))
! 	     && From_At_Mod (Alignment_Clause (gnat_entity)))
  	   && new_align * BITS_PER_UNIT < align)
      post_error_ne_num ("alignment for& must be at least ^",
  		       gnat_error_node, gnat_entity,
*************** validate_alignment (Uint alignment, Enti
*** 6042,6052 ****
  }
  
  /* Verify that OBJECT, a type or decl, is something we can implement
!    atomically.  If not, give an error for GNAT_ENTITY.  COMP_P is nonzero
     if we require atomic components.  */
  
  static void
! check_ok_for_atomic (tree object, Entity_Id gnat_entity, int comp_p)
  {
    Node_Id gnat_error_point = gnat_entity;
    Node_Id gnat_node;
--- 6183,6193 ----
  }
  
  /* Verify that OBJECT, a type or decl, is something we can implement
!    atomically.  If not, give an error for GNAT_ENTITY.  COMP_P is true
     if we require atomic components.  */
  
  static void
! check_ok_for_atomic (tree object, Entity_Id gnat_entity, bool comp_p)
  {
    Node_Id gnat_error_point = gnat_entity;
    Node_Id gnat_node;
*************** check_ok_for_atomic (tree object, Entity
*** 6089,6095 ****
  
    /* For the moment, also allow anything that has an alignment equal
       to its size and which is smaller than a word.  */
!   if (size != 0 && TREE_CODE (size) == INTEGER_CST
        && compare_tree_int (size, align) == 0
        && align <= BITS_PER_WORD)
      return;
--- 6230,6236 ----
  
    /* For the moment, also allow anything that has an alignment equal
       to its size and which is smaller than a word.  */
!   if (size && TREE_CODE (size) == INTEGER_CST
        && compare_tree_int (size, align) == 0
        && align <= BITS_PER_WORD)
      return;
*************** check_ok_for_atomic (tree object, Entity
*** 6097,6103 ****
    for (gnat_node = First_Rep_Item (gnat_entity); Present (gnat_node);
         gnat_node = Next_Rep_Item (gnat_node))
      {
!       if (! comp_p && Nkind (gnat_node) == N_Pragma
  	  && Get_Pragma_Id (Chars (gnat_node)) == Pragma_Atomic)
  	gnat_error_point = First (Pragma_Argument_Associations (gnat_node));
        else if (comp_p && Nkind (gnat_node) == N_Pragma
--- 6238,6244 ----
    for (gnat_node = First_Rep_Item (gnat_entity); Present (gnat_node);
         gnat_node = Next_Rep_Item (gnat_node))
      {
!       if (!comp_p && Nkind (gnat_node) == N_Pragma
  	  && Get_Pragma_Id (Chars (gnat_node)) == Pragma_Atomic)
  	gnat_error_point = First (Pragma_Argument_Associations (gnat_node));
        else if (comp_p && Nkind (gnat_node) == N_Pragma
*************** check_ok_for_atomic (tree object, Entity
*** 6114,6125 ****
  		   gnat_error_point, gnat_entity);
  }
  
! /* Given a type T, a FIELD_DECL F, and a replacement value R,
!    return a new type with all size expressions that contain F
!    updated by replacing F with R.  This is identical to GCC's
!    substitute_in_type except that it knows about TYPE_INDEX_TYPE.
!    If F is NULL_TREE, always make a new RECORD_TYPE, even if nothing has
!    changed.  */
  
  tree
  gnat_substitute_in_type (tree t, tree f, tree r)
--- 6255,6293 ----
  		   gnat_error_point, gnat_entity);
  }
  
! /* Check if FTYPE1 and FTYPE2, two potentially different function type nodes,
!    have compatible signatures so that a call using one type may be safely
!    issued if the actual target function type is the other. Return 1 if it is
!    the case, 0 otherwise, and post errors on the incompatibilities.
! 
!    This is used when an Ada subprogram is mapped onto a GCC builtin, to ensure
!    that calls to the subprogram will have arguments suitable for the later
!    underlying builtin expansion.  */
! 
! static int
! compatible_signatures_p (tree ftype1, tree ftype2)
! {
!   /* As of now, we only perform very trivial tests and consider it's the
!      programmer's responsability to ensure the type correctness in the Ada
!      declaration, as in the regular Import cases.
! 
!      Mismatches typically result in either error messages from the builtin
!      expander, internal compiler errors, or in a real call sequence.  This
!      should be refined to issue diagnostics helping error detection and
!      correction.  */
! 
!   /* Almost fake test, ensuring a use of each argument.  */
!   if (ftype1 == ftype2)
!     return 1;
! 
!   return 1;
! }
! 
! /* Given a type T, a FIELD_DECL F, and a replacement value R, return a new type
!    with all size expressions that contain F updated by replacing F with R.
!    This is identical to GCC's substitute_in_type except that it knows about
!    TYPE_INDEX_TYPE.  If F is NULL_TREE, always make a new RECORD_TYPE, even if
!    nothing has changed.  */
  
  tree
  gnat_substitute_in_type (tree t, tree f, tree r)
*************** gnat_substitute_in_type (tree t, tree f,
*** 6136,6168 ****
        if (CONTAINS_PLACEHOLDER_P (TYPE_MIN_VALUE (t))
  	  || CONTAINS_PLACEHOLDER_P (TYPE_MAX_VALUE (t)))
  	{
! 	  tree low = substitute_in_expr (TYPE_MIN_VALUE (t), f, r);
! 	  tree high = substitute_in_expr (TYPE_MAX_VALUE (t), f, r);
  
  	  if (low == TYPE_MIN_VALUE (t) && high == TYPE_MAX_VALUE (t))
  	    return t;
  
  	  new = build_range_type (TREE_TYPE (t), low, high);
  	  if (TYPE_INDEX_TYPE (t))
! 	    SET_TYPE_INDEX_TYPE (new,
! 	        gnat_substitute_in_type (TYPE_INDEX_TYPE (t), f, r));
  	  return new;
  	}
  
        return t;
  
      case REAL_TYPE:
!       if ((TYPE_MIN_VALUE (t) != 0
! 	   && CONTAINS_PLACEHOLDER_P (TYPE_MIN_VALUE (t)))
! 	  || (TYPE_MAX_VALUE (t) != 0
! 	      && CONTAINS_PLACEHOLDER_P (TYPE_MAX_VALUE (t))))
  	{
! 	  tree low = 0, high = 0;
  
  	  if (TYPE_MIN_VALUE (t))
! 	    low = substitute_in_expr (TYPE_MIN_VALUE (t), f, r);
  	  if (TYPE_MAX_VALUE (t))
! 	    high = substitute_in_expr (TYPE_MAX_VALUE (t), f, r);
  
  	  if (low == TYPE_MIN_VALUE (t) && high == TYPE_MAX_VALUE (t))
  	    return t;
--- 6304,6334 ----
        if (CONTAINS_PLACEHOLDER_P (TYPE_MIN_VALUE (t))
  	  || CONTAINS_PLACEHOLDER_P (TYPE_MAX_VALUE (t)))
  	{
! 	  tree low = SUBSTITUTE_IN_EXPR (TYPE_MIN_VALUE (t), f, r);
! 	  tree high = SUBSTITUTE_IN_EXPR (TYPE_MAX_VALUE (t), f, r);
  
  	  if (low == TYPE_MIN_VALUE (t) && high == TYPE_MAX_VALUE (t))
  	    return t;
  
  	  new = build_range_type (TREE_TYPE (t), low, high);
  	  if (TYPE_INDEX_TYPE (t))
! 	    SET_TYPE_INDEX_TYPE
! 	      (new, gnat_substitute_in_type (TYPE_INDEX_TYPE (t), f, r));
  	  return new;
  	}
  
        return t;
  
      case REAL_TYPE:
!       if (CONTAINS_PLACEHOLDER_P (TYPE_MIN_VALUE (t))
! 	  || CONTAINS_PLACEHOLDER_P (TYPE_MAX_VALUE (t)))
  	{
! 	  tree low = NULL_TREE, high = NULL_TREE;
  
  	  if (TYPE_MIN_VALUE (t))
! 	    low = SUBSTITUTE_IN_EXPR (TYPE_MIN_VALUE (t), f, r);
  	  if (TYPE_MAX_VALUE (t))
! 	    high = SUBSTITUTE_IN_EXPR (TYPE_MAX_VALUE (t), f, r);
  
  	  if (low == TYPE_MIN_VALUE (t) && high == TYPE_MAX_VALUE (t))
  	    return t;
*************** gnat_substitute_in_type (tree t, tree f,
*** 6183,6193 ****
      case OFFSET_TYPE:
      case METHOD_TYPE:
      case FILE_TYPE:
-     case SET_TYPE:
      case FUNCTION_TYPE:
      case LANG_TYPE:
        /* Don't know how to do these yet.  */
!       abort ();
  
      case ARRAY_TYPE:
        {
--- 6349,6358 ----
      case OFFSET_TYPE:
      case METHOD_TYPE:
      case FILE_TYPE:
      case FUNCTION_TYPE:
      case LANG_TYPE:
        /* Don't know how to do these yet.  */
!       gcc_unreachable ();
  
      case ARRAY_TYPE:
        {
*************** gnat_substitute_in_type (tree t, tree f,
*** 6203,6208 ****
--- 6368,6384 ----
  	TYPE_CONVENTION_FORTRAN_P (new) = TYPE_CONVENTION_FORTRAN_P (t);
  	layout_type (new);
  	TYPE_ALIGN (new) = TYPE_ALIGN (t);
+ 
+ 	/* If we had bounded the sizes of T by a constant, bound the sizes of
+ 	   NEW by the same constant.  */
+ 	if (TREE_CODE (TYPE_SIZE (t)) == MIN_EXPR)
+ 	  TYPE_SIZE (new)
+ 	    = size_binop (MIN_EXPR, TREE_OPERAND (TYPE_SIZE (t), 1),
+ 			  TYPE_SIZE (new));
+ 	if (TREE_CODE (TYPE_SIZE_UNIT (t)) == MIN_EXPR)
+ 	  TYPE_SIZE_UNIT (new)
+ 	    = size_binop (MIN_EXPR, TREE_OPERAND (TYPE_SIZE_UNIT (t), 1),
+ 			  TYPE_SIZE_UNIT (new));
  	return new;
        }
  
*************** gnat_substitute_in_type (tree t, tree f,
*** 6211,6220 ****
      case QUAL_UNION_TYPE:
        {
  	tree field;
! 	int changed_field
! 	  = (f == NULL_TREE && ! TREE_CONSTANT (TYPE_SIZE (t)));
! 	int field_has_rep = 0;
! 	tree last_field = 0;
  
  	tree new = copy_type (t);
  
--- 6387,6396 ----
      case QUAL_UNION_TYPE:
        {
  	tree field;
! 	bool changed_field
! 	  = (f == NULL_TREE && !TREE_CONSTANT (TYPE_SIZE (t)));
! 	bool field_has_rep = false;
! 	tree last_field = NULL_TREE;
  
  	tree new = copy_type (t);
  
*************** gnat_substitute_in_type (tree t, tree f,
*** 6222,6242 ****
  	   in.  If we haven't actually changed the type of any field,
  	   discard everything we've done and return the old type.  */
  
! 	TYPE_FIELDS (new) = 0;
! 	TYPE_SIZE (new) = 0;
  
! 	for (field = TYPE_FIELDS (t); field;
! 	     field = TREE_CHAIN (field))
  	  {
  	    tree new_field = copy_node (field);
  
  	    TREE_TYPE (new_field)
  	      = gnat_substitute_in_type (TREE_TYPE (new_field), f, r);
  
! 	    if (DECL_HAS_REP_P (field) && ! DECL_INTERNAL_P (field))
! 	      field_has_rep = 1;
  	    else if (TREE_TYPE (new_field) != TREE_TYPE (field))
! 	      changed_field = 1;
  
  	    /* If this is an internal field and the type of this field is
  	       a UNION_TYPE or RECORD_TYPE with no elements, ignore it.  If
--- 6398,6417 ----
  	   in.  If we haven't actually changed the type of any field,
  	   discard everything we've done and return the old type.  */
  
! 	TYPE_FIELDS (new) = NULL_TREE;
! 	TYPE_SIZE (new) = NULL_TREE;
  
! 	for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
  	  {
  	    tree new_field = copy_node (field);
  
  	    TREE_TYPE (new_field)
  	      = gnat_substitute_in_type (TREE_TYPE (new_field), f, r);
  
! 	    if (DECL_HAS_REP_P (field) && !DECL_INTERNAL_P (field))
! 	      field_has_rep = true;
  	    else if (TREE_TYPE (new_field) != TREE_TYPE (field))
! 	      changed_field = true;
  
  	    /* If this is an internal field and the type of this field is
  	       a UNION_TYPE or RECORD_TYPE with no elements, ignore it.  If
*************** gnat_substitute_in_type (tree t, tree f,
*** 6247,6256 ****
  		&& (TREE_CODE (TREE_TYPE (new_field)) == UNION_TYPE
  		    || TREE_CODE (TREE_TYPE (new_field)) == RECORD_TYPE))
  	      {
! 		if (TYPE_FIELDS (TREE_TYPE (new_field)) == 0)
  		  continue;
  
! 		if (TREE_CHAIN (TYPE_FIELDS (TREE_TYPE (new_field))) == 0)
  		  {
  		    tree next_new_field
  		      = copy_node (TYPE_FIELDS (TREE_TYPE (new_field)));
--- 6422,6431 ----
  		&& (TREE_CODE (TREE_TYPE (new_field)) == UNION_TYPE
  		    || TREE_CODE (TREE_TYPE (new_field)) == RECORD_TYPE))
  	      {
! 		if (!TYPE_FIELDS (TREE_TYPE (new_field)))
  		  continue;
  
! 		if (!TREE_CHAIN (TYPE_FIELDS (TREE_TYPE (new_field))))
  		  {
  		    tree next_new_field
  		      = copy_node (TYPE_FIELDS (TREE_TYPE (new_field)));
*************** gnat_substitute_in_type (tree t, tree f,
*** 6264,6271 ****
  
  	    DECL_CONTEXT (new_field) = new;
  	    SET_DECL_ORIGINAL_FIELD (new_field,
! 	       (DECL_ORIGINAL_FIELD (field) != 0
! 		? DECL_ORIGINAL_FIELD (field) : field));
  
  	    /* If the size of the old field was set at a constant,
  	       propagate the size in case the type's size was variable.
--- 6439,6446 ----
  
  	    DECL_CONTEXT (new_field) = new;
  	    SET_DECL_ORIGINAL_FIELD (new_field,
! 				     (DECL_ORIGINAL_FIELD (field)
! 				      ? DECL_ORIGINAL_FIELD (field) : field));
  
  	    /* If the size of the old field was set at a constant,
  	       propagate the size in case the type's size was variable.
*************** gnat_substitute_in_type (tree t, tree f,
*** 6274,6290 ****
  	       record.)  */
  	    DECL_SIZE (new_field)
  	      = TREE_CODE (DECL_SIZE (field)) == INTEGER_CST
! 		? DECL_SIZE (field) : 0;
  	    DECL_SIZE_UNIT (new_field)
  	      = TREE_CODE (DECL_SIZE_UNIT (field)) == INTEGER_CST
! 		? DECL_SIZE_UNIT (field) : 0;
  
  	    if (TREE_CODE (t) == QUAL_UNION_TYPE)
  	      {
! 		tree new_q = substitute_in_expr (DECL_QUALIFIER (field), f, r);
  
  		if (new_q != DECL_QUALIFIER (new_field))
! 		  changed_field = 1;
  
  		/* Do the substitution inside the qualifier and if we find
  		   that this field will not be present, omit it.  */
--- 6449,6465 ----
  	       record.)  */
  	    DECL_SIZE (new_field)
  	      = TREE_CODE (DECL_SIZE (field)) == INTEGER_CST
! 		? DECL_SIZE (field) : NULL_TREE;
  	    DECL_SIZE_UNIT (new_field)
  	      = TREE_CODE (DECL_SIZE_UNIT (field)) == INTEGER_CST
! 		? DECL_SIZE_UNIT (field) : NULL_TREE;
  
  	    if (TREE_CODE (t) == QUAL_UNION_TYPE)
  	      {
! 		tree new_q = SUBSTITUTE_IN_EXPR (DECL_QUALIFIER (field), f, r);
  
  		if (new_q != DECL_QUALIFIER (new_field))
! 		  changed_field = true;
  
  		/* Do the substitution inside the qualifier and if we find
  		   that this field will not be present, omit it.  */
*************** gnat_substitute_in_type (tree t, tree f,
*** 6294,6300 ****
  		  continue;
  	      }
  
! 	    if (last_field == 0)
  	      TYPE_FIELDS (new) = new_field;
  	    else
  	      TREE_CHAIN (last_field) = new_field;
--- 6469,6475 ----
  		  continue;
  	      }
  
! 	    if (!last_field)
  	      TYPE_FIELDS (new) = new_field;
  	    else
  	      TREE_CHAIN (last_field) = new_field;
*************** gnat_substitute_in_type (tree t, tree f,
*** 6311,6329 ****
  	/* If this used to be a qualified union type, but we now know what
  	   field will be present, make this a normal union.  */
  	if (changed_field && TREE_CODE (new) == QUAL_UNION_TYPE
! 	    && (TYPE_FIELDS (new) == 0
  		|| integer_onep (DECL_QUALIFIER (TYPE_FIELDS (new)))))
  	  TREE_SET_CODE (new, UNION_TYPE);
! 	else if (! changed_field)
  	  return t;
  
! 	if (field_has_rep)
! 	  gigi_abort (117);
! 
  	layout_type (new);
  
  	/* If the size was originally a constant use it.  */
! 	if (TYPE_SIZE (t) != 0 && TREE_CODE (TYPE_SIZE (t)) == INTEGER_CST
  	    && TREE_CODE (TYPE_SIZE (new)) != INTEGER_CST)
  	  {
  	    TYPE_SIZE (new) = TYPE_SIZE (t);
--- 6486,6502 ----
  	/* If this used to be a qualified union type, but we now know what
  	   field will be present, make this a normal union.  */
  	if (changed_field && TREE_CODE (new) == QUAL_UNION_TYPE
! 	    && (!TYPE_FIELDS (new)
  		|| integer_onep (DECL_QUALIFIER (TYPE_FIELDS (new)))))
  	  TREE_SET_CODE (new, UNION_TYPE);
! 	else if (!changed_field)
  	  return t;
  
! 	gcc_assert (!field_has_rep);
  	layout_type (new);
  
  	/* If the size was originally a constant use it.  */
! 	if (TYPE_SIZE (t) && TREE_CODE (TYPE_SIZE (t)) == INTEGER_CST
  	    && TREE_CODE (TYPE_SIZE (new)) != INTEGER_CST)
  	  {
  	    TYPE_SIZE (new) = TYPE_SIZE (t);
*************** rm_size (tree gnu_type)
*** 6348,6354 ****
    /* For integer types, this is the precision.  For record types, we store
       the size explicitly.  For other types, this is just the size.  */
  
!   if (INTEGRAL_TYPE_P (gnu_type) && TYPE_RM_SIZE (gnu_type) != 0)
      return TYPE_RM_SIZE (gnu_type);
    else if (TREE_CODE (gnu_type) == RECORD_TYPE
  	   && TYPE_CONTAINS_TEMPLATE_P (gnu_type))
--- 6521,6527 ----
    /* For integer types, this is the precision.  For record types, we store
       the size explicitly.  For other types, this is just the size.  */
  
!   if (INTEGRAL_TYPE_P (gnu_type) && TYPE_RM_SIZE (gnu_type))
      return TYPE_RM_SIZE (gnu_type);
    else if (TREE_CODE (gnu_type) == RECORD_TYPE
  	   && TYPE_CONTAINS_TEMPLATE_P (gnu_type))
*************** rm_size (tree gnu_type)
*** 6360,6367 ****
    else if ((TREE_CODE (gnu_type) == RECORD_TYPE
  	    || TREE_CODE (gnu_type) == UNION_TYPE
  	    || TREE_CODE (gnu_type) == QUAL_UNION_TYPE)
! 	   && ! TYPE_IS_FAT_POINTER_P (gnu_type)
! 	   && TYPE_ADA_SIZE (gnu_type) != 0)
      return TYPE_ADA_SIZE (gnu_type);
    else
      return TYPE_SIZE (gnu_type);
--- 6533,6540 ----
    else if ((TREE_CODE (gnu_type) == RECORD_TYPE
  	    || TREE_CODE (gnu_type) == UNION_TYPE
  	    || TREE_CODE (gnu_type) == QUAL_UNION_TYPE)
! 	   && !TYPE_IS_FAT_POINTER_P (gnu_type)
! 	   && TYPE_ADA_SIZE (gnu_type))
      return TYPE_ADA_SIZE (gnu_type);
    else
      return TYPE_SIZE (gnu_type);
*************** rm_size (tree gnu_type)
*** 6374,6380 ****
  tree
  create_concat_name (Entity_Id gnat_entity, const char *suffix)
  {
!   const char *str = (suffix == 0 ? "" : suffix);
    String_Template temp = {1, strlen (str)};
    Fat_Pointer fp = {str, &temp};
  
--- 6547,6553 ----
  tree
  create_concat_name (Entity_Id gnat_entity, const char *suffix)
  {
!   const char *str = (!suffix ? "" : suffix);
    String_Template temp = {1, strlen (str)};
    Fat_Pointer fp = {str, &temp};
  
*************** create_concat_name (Entity_Id gnat_entit
*** 6385,6391 ****
       on a Windows box) live in a DLL. Here we adjust its name to use
       the jump-table, the _imp__NAME contains the address for the NAME
       variable. */
- 
    {
      Entity_Kind kind = Ekind (gnat_entity);
      const char *prefix = "_imp__";
--- 6558,6563 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/einfo.adb gcc-4.0.0/gcc/ada/einfo.adb
*** gcc-3.4.3/gcc/ada/einfo.adb	Tue Jan 13 11:51:31 2004
--- gcc-4.0.0/gcc/ada/einfo.adb	Thu Feb 10 13:50:25 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Einfo is
*** 205,214 ****
     --    Inner_Instances                 Elist23
     --    Enum_Pos_To_Rep                 Node23
     --    Packed_Array_Type               Node23
!    --    Limited_Views                   Elist23
     --    Privals_Chain                   Elist23
     --    Protected_Operation             Node23
  
     ---------------------------------------------
     -- Usage of Flags in Defining Entity Nodes --
     ---------------------------------------------
--- 205,220 ----
     --    Inner_Instances                 Elist23
     --    Enum_Pos_To_Rep                 Node23
     --    Packed_Array_Type               Node23
!    --    Limited_View                    Node23
     --    Privals_Chain                   Elist23
     --    Protected_Operation             Node23
  
+    --    Obsolescent_Warning             Node24
+ 
+    --    (unused)                        Node25
+    --    (unused)                        Node26
+    --    (unused)                        Node27
+ 
     ---------------------------------------------
     -- Usage of Flags in Defining Entity Nodes --
     ---------------------------------------------
*************** package body Einfo is
*** 367,372 ****
--- 373,379 ----
     --    Is_VMS_Exception               Flag133
     --    Is_Optional_Parameter          Flag134
     --    Has_Aliased_Components         Flag135
+    --    No_Strict_Aliasing             Flag136
     --    Is_Machine_Code_Subprogram     Flag137
     --    Is_Packed_Array_Type           Flag138
     --    Has_Biased_Representation      Flag139
*************** package body Einfo is
*** 385,391 ****
  
     --    Vax_Float                      Flag151
     --    Entry_Accepted                 Flag152
!    --    Is_Psected                     Flag153
     --    Has_Per_Object_Constraint      Flag154
     --    Has_Private_Declaration        Flag155
     --    Referenced                     Flag156
--- 392,398 ----
  
     --    Vax_Float                      Flag151
     --    Entry_Accepted                 Flag152
!    --    Is_Obsolescent                 Flag153
     --    Has_Per_Object_Constraint      Flag154
     --    Has_Private_Declaration        Flag155
     --    Referenced                     Flag156
*************** package body Einfo is
*** 418,428 ****
  
     --    Has_Contiguous_Rep             Flag181
     --    Has_Xref_Entry                 Flag182
  
!    --  Remaining flags are currently unused and available
  
!    --    (unused)                       Flag136
!    --    (unused)                       Flag183
  
     --------------------------------
     -- Attribute Access Functions --
--- 425,494 ----
  
     --    Has_Contiguous_Rep             Flag181
     --    Has_Xref_Entry                 Flag182
+    --    Must_Be_On_Byte_Boundary       Flag183
+    --    Has_Stream_Size_Clause         Flag184
+    --    Is_Ada_2005                    Flag185
  
!    --    (unused)                       Flag186
!    --    (unused)                       Flag187
!    --    (unused)                       Flag188
!    --    (unused)                       Flag189
!    --    (unused)                       Flag190
!    --    (unused)                       Flag191
!    --    (unused)                       Flag192
!    --    (unused)                       Flag193
!    --    (unused)                       Flag194
!    --    (unused)                       Flag195
!    --    (unused)                       Flag196
!    --    (unused)                       Flag197
!    --    (unused)                       Flag198
!    --    (unused)                       Flag199
!    --    (unused)                       Flag200
!    --    (unused)                       Flag201
!    --    (unused)                       Flag202
!    --    (unused)                       Flag203
!    --    (unused)                       Flag204
!    --    (unused)                       Flag205
!    --    (unused)                       Flag206
!    --    (unused)                       Flag207
!    --    (unused)                       Flag208
!    --    (unused)                       Flag209
!    --    (unused)                       Flag210
!    --    (unused)                       Flag211
!    --    (unused)                       Flag212
!    --    (unused)                       Flag213
!    --    (unused)                       Flag214
!    --    (unused)                       Flag215
  
!    -----------------------
!    -- Local subprograms --
!    -----------------------
! 
!    function Rep_Clause (Id : E; Rep_Name : Name_Id) return N;
!    --  Returns the attribute definition clause whose name is Rep_Name. Returns
!    --  Empty if not found.
! 
!    ----------------
!    -- Rep_Clause --
!    ----------------
! 
!    function Rep_Clause (Id : E; Rep_Name : Name_Id) return N is
!       Ritem : Node_Id;
! 
!    begin
!       Ritem := First_Rep_Item (Id);
!       while Present (Ritem) loop
!          if Nkind (Ritem) = N_Attribute_Definition_Clause
!            and then Chars (Ritem) = Rep_Name
!          then
!             return Ritem;
!          else
!             Ritem := Next_Rep_Item (Ritem);
!          end if;
!       end loop;
! 
!       return Empty;
!    end Rep_Clause;
  
     --------------------------------
     -- Attribute Access Functions --
*************** package body Einfo is
*** 1203,1208 ****
--- 1269,1280 ----
        return Flag23 (Implementation_Base_Type (Id));
     end Has_Storage_Size_Clause;
  
+    function Has_Stream_Size_Clause (Id : E) return B is
+    begin
+       pragma Assert (Is_Elementary_Type (Id));
+       return Flag184 (Id);
+    end Has_Stream_Size_Clause;
+ 
     function Has_Subprogram_Descriptor (Id : E) return B is
     begin
        return Flag93 (Id);
*************** package body Einfo is
*** 1282,1287 ****
--- 1354,1364 ----
        return Flag69 (Id);
     end Is_Access_Constant;
  
+    function Is_Ada_2005 (Id : E) return B is
+    begin
+       return Flag185 (Id);
+    end Is_Ada_2005;
+ 
     function Is_Aliased (Id : E) return B is
     begin
        pragma Assert (Nkind (Id) in N_Entity);
*************** package body Einfo is
*** 1539,1544 ****
--- 1616,1627 ----
        return Flag178 (Id);
     end Is_Null_Init_Proc;
  
+    function Is_Obsolescent (Id : E) return B is
+    begin
+       pragma Assert (Is_Subprogram (Id));
+       return Flag153 (Id);
+    end Is_Obsolescent;
+ 
     function Is_Optional_Parameter (Id : E) return B is
     begin
        pragma Assert (Is_Formal (Id));
*************** package body Einfo is
*** 1588,1598 ****
        return Flag53 (Id);
     end Is_Private_Descendant;
  
-    function Is_Psected (Id : E) return B is
-    begin
-       return Flag153 (Id);
-    end Is_Psected;
- 
     function Is_Public (Id : E) return B is
     begin
        pragma Assert (Nkind (Id) in N_Entity);
--- 1671,1676 ----
*************** package body Einfo is
*** 1708,1718 ****
        return Node20 (Id);
     end Last_Entity;
  
!    function Limited_Views (Id : E) return L is
     begin
        pragma Assert (Ekind (Id) = E_Package);
!       return Elist23 (Id);
!    end Limited_Views;
  
     function Lit_Indexes (Id : E) return E is
     begin
--- 1786,1796 ----
        return Node20 (Id);
     end Last_Entity;
  
!    function Limited_View (Id : E) return E is
     begin
        pragma Assert (Ekind (Id) = E_Package);
!       return Node23 (Id);
!    end Limited_View;
  
     function Lit_Indexes (Id : E) return E is
     begin
*************** package body Einfo is
*** 1754,1759 ****
--- 1832,1843 ----
        return Uint17 (Base_Type (Id));
     end Modulus;
  
+    function Must_Be_On_Byte_Boundary (Id : E) return B is
+    begin
+       pragma Assert (Is_Type (Id));
+       return Flag183 (Id);
+    end Must_Be_On_Byte_Boundary;
+ 
     function Needs_Debug_Info (Id : E) return B is
     begin
        return Flag147 (Id);
*************** package body Einfo is
*** 1793,1798 ****
--- 1877,1888 ----
        return Flag113 (Id);
     end No_Return;
  
+    function No_Strict_Aliasing (Id : E) return B is
+    begin
+       pragma Assert (Is_Access_Type (Id));
+       return Flag136 (Base_Type (Id));
+    end No_Strict_Aliasing;
+ 
     function Non_Binary_Modulus (Id : E) return B is
     begin
        pragma Assert (Is_Modular_Integer_Type (Id));
*************** package body Einfo is
*** 1839,1844 ****
--- 1929,1948 ----
        return Node17 (Id);
     end Object_Ref;
  
+    function Obsolescent_Warning (Id : E) return N is
+    begin
+       pragma Assert (Is_Subprogram (Id));
+       return Node24 (Id);
+    end Obsolescent_Warning;
+ 
+    function Original_Access_Type (Id : E) return E is
+    begin
+       pragma Assert
+         (Ekind (Id) = E_Access_Subprogram_Type
+            or else Ekind (Id) = E_Access_Protected_Subprogram_Type);
+       return Node21 (Id);
+    end Original_Access_Type;
+ 
     function Original_Array_Type (Id : E) return E is
     begin
        pragma Assert (Is_Array_Type (Id) or else Is_Modular_Integer_Type (Id));
*************** package body Einfo is
*** 3121,3126 ****
--- 3225,3236 ----
        Set_Flag23 (Id, V);
     end Set_Has_Storage_Size_Clause;
  
+    procedure Set_Has_Stream_Size_Clause (Id : E; V : B := True) is
+    begin
+       pragma Assert (Is_Elementary_Type (Id));
+       Set_Flag184 (Id, V);
+    end Set_Has_Stream_Size_Clause;
+ 
     procedure Set_Has_Subprogram_Descriptor (Id : E; V : B := True) is
     begin
        Set_Flag93 (Id, V);
*************** package body Einfo is
*** 3204,3209 ****
--- 3314,3324 ----
        Set_Flag69 (Id, V);
     end Set_Is_Access_Constant;
  
+    procedure Set_Is_Ada_2005 (Id : E; V : B := True) is
+    begin
+       Set_Flag185 (Id, V);
+    end Set_Is_Ada_2005;
+ 
     procedure Set_Is_Aliased (Id : E; V : B := True) is
     begin
        pragma Assert (Nkind (Id) in N_Entity);
*************** package body Einfo is
*** 3478,3483 ****
--- 3593,3604 ----
        Set_Flag178 (Id, V);
     end Set_Is_Null_Init_Proc;
  
+    procedure Set_Is_Obsolescent (Id : E; V : B := True) is
+    begin
+       pragma Assert (Is_Subprogram (Id));
+       Set_Flag153 (Id, V);
+    end Set_Is_Obsolescent;
+ 
     procedure Set_Is_Optional_Parameter (Id : E; V : B := True) is
     begin
        pragma Assert (Is_Formal (Id));
*************** package body Einfo is
*** 3528,3538 ****
        Set_Flag53 (Id, V);
     end Set_Is_Private_Descendant;
  
-    procedure Set_Is_Psected (Id : E; V : B := True) is
-    begin
-       Set_Flag153 (Id, V);
-    end Set_Is_Psected;
- 
     procedure Set_Is_Public (Id : E; V : B := True) is
     begin
        pragma Assert (Nkind (Id) in N_Entity);
--- 3649,3654 ----
*************** package body Einfo is
*** 3652,3662 ****
        Set_Node20 (Id, V);
     end Set_Last_Entity;
  
!    procedure Set_Limited_Views (Id : E; V : L) is
     begin
        pragma Assert (Ekind (Id) = E_Package);
!       Set_Elist23 (Id, V);
!    end Set_Limited_Views;
  
     procedure Set_Lit_Indexes (Id : E; V : E) is
     begin
--- 3768,3778 ----
        Set_Node20 (Id, V);
     end Set_Last_Entity;
  
!    procedure Set_Limited_View (Id : E; V : E) is
     begin
        pragma Assert (Ekind (Id) = E_Package);
!       Set_Node23 (Id, V);
!    end Set_Limited_View;
  
     procedure Set_Lit_Indexes (Id : E; V : E) is
     begin
*************** package body Einfo is
*** 3698,3703 ****
--- 3814,3825 ----
        Set_Uint17 (Id, V);
     end Set_Modulus;
  
+    procedure Set_Must_Be_On_Byte_Boundary (Id : E; V : B := True) is
+    begin
+       pragma Assert (Is_Type (Id));
+       Set_Flag183 (Id, V);
+    end Set_Must_Be_On_Byte_Boundary;
+ 
     procedure Set_Needs_Debug_Info (Id : E; V : B := True) is
     begin
        Set_Flag147 (Id, V);
*************** package body Einfo is
*** 3735,3740 ****
--- 3857,3868 ----
        Set_Flag113 (Id, V);
     end Set_No_Return;
  
+    procedure Set_No_Strict_Aliasing (Id : E; V : B := True) is
+    begin
+       pragma Assert (Is_Access_Type (Id) and then Base_Type (Id) = Id);
+       Set_Flag136 (Id, V);
+    end Set_No_Strict_Aliasing;
+ 
     procedure Set_Non_Binary_Modulus (Id : E; V : B := True) is
     begin
        pragma Assert (Ekind (Id) = E_Modular_Integer_Type);
*************** package body Einfo is
*** 3783,3788 ****
--- 3911,3930 ----
        Set_Node17 (Id, V);
     end Set_Object_Ref;
  
+    procedure Set_Obsolescent_Warning (Id : E; V : N) is
+    begin
+       pragma Assert (Is_Subprogram (Id));
+       Set_Node24 (Id, V);
+    end Set_Obsolescent_Warning;
+ 
+    procedure Set_Original_Access_Type (Id : E; V : E) is
+    begin
+       pragma Assert
+         (Ekind (Id) = E_Access_Subprogram_Type
+            or else Ekind (Id) = E_Access_Protected_Subprogram_Type);
+       Set_Node21 (Id, V);
+    end Set_Original_Access_Type;
+ 
     procedure Set_Original_Array_Type (Id : E; V : E) is
     begin
        pragma Assert (Is_Array_Type (Id) or else Is_Modular_Integer_Type (Id));
*************** package body Einfo is
*** 4356,4376 ****
     --------------------
  
     function Address_Clause (Id : E) return N is
-       Ritem : Node_Id;
- 
     begin
!       Ritem := First_Rep_Item (Id);
!       while Present (Ritem) loop
!          if Nkind (Ritem) = N_Attribute_Definition_Clause
!            and then Chars (Ritem) = Name_Address
!          then
!             return Ritem;
!          else
!             Ritem := Next_Rep_Item (Ritem);
!          end if;
!       end loop;
! 
!       return Empty;
     end Address_Clause;
  
     ----------------------
--- 4498,4505 ----
     --------------------
  
     function Address_Clause (Id : E) return N is
     begin
!       return Rep_Clause (Id, Name_Address);
     end Address_Clause;
  
     ----------------------
*************** package body Einfo is
*** 4378,4412 ****
     ----------------------
  
     function Alignment_Clause (Id : E) return N is
-       Ritem : Node_Id;
- 
     begin
!       Ritem := First_Rep_Item (Id);
!       while Present (Ritem) loop
!          if Nkind (Ritem) = N_Attribute_Definition_Clause
!            and then Chars (Ritem) = Name_Alignment
!          then
!             return Ritem;
!          else
!             Ritem := Next_Rep_Item (Ritem);
!          end if;
!       end loop;
! 
!       return Empty;
     end Alignment_Clause;
  
     ----------------------
     -- Ancestor_Subtype --
     ----------------------
  
!    function Ancestor_Subtype       (Id : E) return E is
     begin
        --  If this is first subtype, or is a base type, then there is no
        --  ancestor subtype, so we return Empty to indicate this fact.
  
!       if Is_First_Subtype (Id)
!         or else Id = Base_Type (Id)
!       then
           return Empty;
        end if;
  
--- 4507,4526 ----
     ----------------------
  
     function Alignment_Clause (Id : E) return N is
     begin
!       return Rep_Clause (Id, Name_Alignment);
     end Alignment_Clause;
  
     ----------------------
     -- Ancestor_Subtype --
     ----------------------
  
!    function Ancestor_Subtype (Id : E) return E is
     begin
        --  If this is first subtype, or is a base type, then there is no
        --  ancestor subtype, so we return Empty to indicate this fact.
  
!       if Is_First_Subtype (Id) or else Id = Base_Type (Id) then
           return Empty;
        end if;
  
*************** package body Einfo is
*** 4558,4564 ****
        then
           Full_D := Parent (Full_View (Id));
  
!          --  The full view may have been rewritten as an object renaming.
  
           if Nkind (Full_D) = N_Object_Renaming_Declaration then
              return Name (Full_D);
--- 4672,4678 ----
        then
           Full_D := Parent (Full_View (Id));
  
!          --  The full view may have been rewritten as an object renaming
  
           if Nkind (Full_D) = N_Object_Renaming_Declaration then
              return Name (Full_D);
*************** package body Einfo is
*** 4639,4644 ****
--- 4753,4767 ----
        S  : Entity_Id;
  
     begin
+       --  The following test is an error defense against some syntax
+       --  errors that can leave scopes very messed up.
+ 
+       if Id = Standard_Standard then
+          return Id;
+       end if;
+ 
+       --  Normal case, search enclosing scopes
+ 
        S := Scope (Id);
        while S /= Standard_Standard
          and then not Is_Dynamic_Scope (S)
*************** package body Einfo is
*** 4705,4711 ****
           Ent := Next_Entity (Ent);
        end if;
  
!       --  Skip all hidden stored discriminants if any.
  
        while Present (Ent) loop
           exit when Ekind (Ent) = E_Discriminant
--- 4828,4834 ----
           Ent := Next_Entity (Ent);
        end if;
  
!       --  Skip all hidden stored discriminants if any
  
        while Present (Ent) loop
           exit when Ekind (Ent) = E_Discriminant
*************** package body Einfo is
*** 4758,4763 ****
--- 4881,4890 ----
        --  Scans the Discriminants to see whether any are Completely_Hidden
        --  (the mechanism for describing non-specified stored discriminants)
  
+       ----------------------------------------
+       -- Has_Completely_Hidden_Discriminant --
+       ----------------------------------------
+ 
        function Has_Completely_Hidden_Discriminant (Id : E) return Boolean is
           Ent : Entity_Id := Id;
  
*************** package body Einfo is
*** 4765,4771 ****
           pragma Assert (Ekind (Id) = E_Discriminant);
  
           while Present (Ent) and then Ekind (Ent) = E_Discriminant loop
- 
              if Is_Completely_Hidden (Ent) then
                 return True;
              end if;
--- 4892,4897 ----
*************** package body Einfo is
*** 4873,4881 ****
     -------------------------------------
  
     function Get_Attribute_Definition_Clause
!      (E    : Entity_Id;
!       Id   : Attribute_Id)
!       return Node_Id
     is
        N : Node_Id;
  
--- 4999,5006 ----
     -------------------------------------
  
     function Get_Attribute_Definition_Clause
!      (E  : Entity_Id;
!       Id : Attribute_Id) return Node_Id
     is
        N : Node_Id;
  
*************** package body Einfo is
*** 4899,4938 ****
     --------------------
  
     function Get_Rep_Pragma (E : Entity_Id; Nam : Name_Id) return Node_Id is
!       N   : Node_Id;
!       Typ : Entity_Id;
  
     begin
        N := First_Rep_Item (E);
- 
        while Present (N) loop
           if Nkind (N) = N_Pragma and then Chars (N) = Nam then
! 
!             if Nam = Name_Stream_Convert then
! 
!                --  For tagged types this pragma is not inherited, so we
!                --  must verify that it is defined for the given type and
!                --  not an ancestor.
! 
!                Typ := Entity (Expression
!                        (First (Pragma_Argument_Associations (N))));
! 
!                if not Is_Tagged_Type (E)
!                  or else E = Typ
!                  or else (Is_Private_Type (Typ)
!                            and then E = Full_View (Typ))
!                then
!                   return N;
!                else
!                   Next_Rep_Item (N);
!                end if;
! 
!             else
!                return N;
!             end if;
!          else
!             Next_Rep_Item (N);
           end if;
        end loop;
  
        return Empty;
--- 5024,5039 ----
     --------------------
  
     function Get_Rep_Pragma (E : Entity_Id; Nam : Name_Id) return Node_Id is
!       N : Node_Id;
  
     begin
        N := First_Rep_Item (E);
        while Present (N) loop
           if Nkind (N) = N_Pragma and then Chars (N) = Nam then
!             return N;
           end if;
+ 
+          Next_Rep_Item (N);
        end loop;
  
        return Empty;
*************** package body Einfo is
*** 4962,4967 ****
--- 5063,5080 ----
        return False;
     end Has_Attach_Handler;
  
+    -------------------------------------
+    -- Has_Attribute_Definition_Clause --
+    -------------------------------------
+ 
+    function Has_Attribute_Definition_Clause
+      (E  : Entity_Id;
+       Id : Attribute_Id) return Boolean
+    is
+    begin
+       return Present (Get_Attribute_Definition_Clause (E, Id));
+    end Has_Attribute_Definition_Clause;
+ 
     -----------------
     -- Has_Entries --
     -----------------
*************** package body Einfo is
*** 4972,4979 ****
  
     begin
        pragma Assert (Is_Concurrent_Type (Id));
-       Ent := First_Entity (Id);
  
        while Present (Ent) loop
           if Is_Entry (Ent) then
              Result := True;
--- 5085,5092 ----
  
     begin
        pragma Assert (Is_Concurrent_Type (Id));
  
+       Ent := First_Entity (Id);
        while Present (Ent) loop
           if Is_Entry (Ent) then
              Result := True;
*************** package body Einfo is
*** 5041,5046 ****
--- 5154,5168 ----
        end loop;
     end Has_Private_Ancestor;
  
+    --------------------
+    -- Has_Rep_Pragma --
+    --------------------
+ 
+    function Has_Rep_Pragma (E : Entity_Id; Nam : Name_Id) return Boolean is
+    begin
+       return Present (Get_Rep_Pragma (E, Nam));
+    end Has_Rep_Pragma;
+ 
     ------------------------------
     -- Implementation_Base_Type --
     ------------------------------
*************** package body Einfo is
*** 5079,5085 ****
  
     begin
        Item := First_Rep_Item (Id);
- 
        while Present (Item) loop
           if Nkind (Item) = N_Pragma
             and then Get_Pragma_Id (Chars (Item)) = Pragma_Inline_Always
--- 5201,5206 ----
*************** package body Einfo is
*** 5158,5166 ****
  
           else
              declare
!                C : Entity_Id := First_Component (Btype);
  
              begin
                 while Present (C) loop
                    if Is_By_Reference_Type (Etype (C))
                      or else Is_Volatile (Etype (C))
--- 5279,5288 ----
  
           else
              declare
!                C : Entity_Id;
  
              begin
+                C := First_Component (Btype);
                 while Present (C) loop
                    if Is_By_Reference_Type (Etype (C))
                      or else Is_Volatile (Etype (C))
*************** package body Einfo is
*** 5328,5336 ****
  
           else
              declare
!                C : E := First_Component (Btype);
  
              begin
                 while Present (C) loop
                    if Is_Limited_Type (Etype (C)) then
                       return True;
--- 5450,5459 ----
  
           else
              declare
!                C : E;
  
              begin
+                C := First_Component (Btype);
                 while Present (C) loop
                    if Is_Limited_Type (Etype (C)) then
                       return True;
*************** package body Einfo is
*** 5416,5424 ****
  
           else
              declare
!                C : Entity_Id := First_Component (Btype);
  
              begin
                 while Present (C) loop
                    if Is_Return_By_Reference_Type (Etype (C)) then
                       return True;
--- 5539,5548 ----
  
           else
              declare
!                C : Entity_Id;
  
              begin
+                C := First_Component (Btype);
                 while Present (C) loop
                    if Is_Return_By_Reference_Type (Etype (C)) then
                       return True;
*************** package body Einfo is
*** 5481,5487 ****
  
     begin
        Comp_Id := Next_Entity (Id);
- 
        while Present (Comp_Id) loop
           exit when Ekind (Comp_Id) = E_Component;
           Comp_Id := Next_Entity (Comp_Id);
--- 5605,5610 ----
*************** package body Einfo is
*** 5509,5515 ****
        --       E_Discriminant d2
        --       ...
  
!       --  so it is critical not to go past the leading discriminants.
  
        D : E := Id;
  
--- 5632,5638 ----
        --       E_Discriminant d2
        --       ...
  
!       --  so it is critical not to go past the leading discriminants
  
        D : E := Id;
  
*************** package body Einfo is
*** 5616,5622 ****
        else
           N := 0;
           T := First_Index (Id);
- 
           while Present (T) loop
              N := N + 1;
              T := Next (T);
--- 5739,5744 ----
*************** package body Einfo is
*** 5637,5643 ****
     begin
        N := 0;
        Discr := First_Discriminant (Id);
- 
        while Present (Discr) loop
           N := N + 1;
           Discr := Next_Discriminant (Discr);
--- 5759,5764 ----
*************** package body Einfo is
*** 5656,5664 ****
  
     begin
        pragma Assert (Is_Concurrent_Type (Id));
        N := 0;
        Ent := First_Entity (Id);
- 
        while Present (Ent) loop
           if Is_Entry (Ent) then
              N := N + 1;
--- 5777,5785 ----
  
     begin
        pragma Assert (Is_Concurrent_Type (Id));
+ 
        N := 0;
        Ent := First_Entity (Id);
        while Present (Ent) loop
           if Is_Entry (Ent) then
              N := N + 1;
*************** package body Einfo is
*** 5681,5687 ****
     begin
        N := 0;
        Formal := First_Formal (Id);
- 
        while Present (Formal) loop
           N := N + 1;
           Formal := Next_Formal (Formal);
--- 5802,5807 ----
*************** package body Einfo is
*** 5699,5704 ****
--- 5819,5834 ----
        return Ekind (Id);
     end Parameter_Mode;
  
+    ---------------------
+    -- Record_Rep_Item --
+    ---------------------
+ 
+    procedure Record_Rep_Item (E : Entity_Id; N : Node_Id) is
+    begin
+       Set_Next_Rep_Item (N, First_Rep_Item (E));
+       Set_First_Rep_Item (E, N);
+    end Record_Rep_Item;
+ 
     ---------------
     -- Root_Type --
     ---------------
*************** package body Einfo is
*** 5756,5764 ****
     -----------------
  
     function Scope_Depth (Id : E) return Uint is
!       Scop : Entity_Id := Id;
  
     begin
        while Is_Record_Type (Scop) loop
           Scop := Scope (Scop);
        end loop;
--- 5886,5895 ----
     -----------------
  
     function Scope_Depth (Id : E) return Uint is
!       Scop : Entity_Id;
  
     begin
+       Scop := Id;
        while Is_Record_Type (Scop) loop
           Scop := Scope (Scop);
        end loop;
*************** package body Einfo is
*** 5821,5843 ****
     -----------------
  
     function Size_Clause (Id : E) return N is
-       Ritem : Node_Id;
- 
     begin
!       Ritem := First_Rep_Item (Id);
!       while Present (Ritem) loop
!          if Nkind (Ritem) = N_Attribute_Definition_Clause
!            and then Chars (Ritem) = Name_Size
!          then
!             return Ritem;
!          else
!             Ritem := Next_Rep_Item (Ritem);
!          end if;
!       end loop;
! 
!       return Empty;
     end Size_Clause;
  
     ------------------
     -- Subtype_Kind --
     ------------------
--- 5952,5970 ----
     -----------------
  
     function Size_Clause (Id : E) return N is
     begin
!       return Rep_Clause (Id, Name_Size);
     end Size_Clause;
  
+    ------------------------
+    -- Stream_Size_Clause --
+    ------------------------
+ 
+    function Stream_Size_Clause (Id : E) return N is
+    begin
+       return Rep_Clause (Id, Name_Stream_Size);
+    end Stream_Size_Clause;
+ 
     ------------------
     -- Subtype_Kind --
     ------------------
*************** package body Einfo is
*** 6033,6038 ****
--- 6160,6169 ----
        procedure W (Flag_Name : String; Flag : Boolean);
        --  Write out given flag if it is set
  
+       -------
+       -- W --
+       -------
+ 
        procedure W (Flag_Name : String; Flag : Boolean) is
        begin
           if Flag then
*************** package body Einfo is
*** 6130,6135 ****
--- 6261,6267 ----
        W ("Has_Small_Clause",              Flag67  (Id));
        W ("Has_Specified_Layout",          Flag100 (Id));
        W ("Has_Storage_Size_Clause",       Flag23  (Id));
+       W ("Has_Stream_Size_Clause",        Flag184 (Id));
        W ("Has_Subprogram_Descriptor",     Flag93  (Id));
        W ("Has_Task",                      Flag30  (Id));
        W ("Has_Unchecked_Union",           Flag123 (Id));
*************** package body Einfo is
*** 6142,6147 ****
--- 6274,6280 ----
        W ("Is_AST_Entry",                  Flag132 (Id));
        W ("Is_Abstract",                   Flag19  (Id));
        W ("Is_Access_Constant",            Flag69  (Id));
+       W ("Is_Ada_2005",                   Flag185 (Id));
        W ("Is_Aliased",                    Flag15  (Id));
        W ("Is_Asynchronous",               Flag81  (Id));
        W ("Is_Atomic",                     Flag85  (Id));
*************** package body Einfo is
*** 6189,6194 ****
--- 6322,6328 ----
        W ("Is_Machine_Code_Subprogram",    Flag137 (Id));
        W ("Is_Non_Static_Subtype",         Flag109 (Id));
        W ("Is_Null_Init_Proc",             Flag178 (Id));
+       W ("Is_Obsolescent",                Flag153 (Id));
        W ("Is_Optional_Parameter",         Flag134 (Id));
        W ("Is_Overriding_Operation",       Flag39  (Id));
        W ("Is_Package_Body_Entity",        Flag160 (Id));
*************** package body Einfo is
*** 6198,6204 ****
        W ("Is_Preelaborated",              Flag59  (Id));
        W ("Is_Private_Composite",          Flag107 (Id));
        W ("Is_Private_Descendant",         Flag53  (Id));
-       W ("Is_Psected",                    Flag153 (Id));
        W ("Is_Public",                     Flag10  (Id));
        W ("Is_Pure",                       Flag44  (Id));
        W ("Is_Remote_Call_Interface",      Flag62  (Id));
--- 6332,6337 ----
*************** package body Einfo is
*** 6221,6231 ****
--- 6354,6366 ----
        W ("Kill_Tag_Checks",               Flag34  (Id));
        W ("Machine_Radix_10",              Flag84  (Id));
        W ("Materialize_Entity",            Flag168 (Id));
+       W ("Must_Be_On_Byte_Boundary",      Flag183 (Id));
        W ("Needs_Debug_Info",              Flag147 (Id));
        W ("Needs_No_Actuals",              Flag22  (Id));
        W ("Never_Set_In_Source",           Flag115 (Id));
        W ("No_Pool_Assigned",              Flag131 (Id));
        W ("No_Return",                     Flag113 (Id));
+       W ("No_Strict_Aliasing",            Flag136 (Id));
        W ("Non_Binary_Modulus",            Flag58  (Id));
        W ("Nonzero_Is_True",               Flag162 (Id));
        W ("Reachable",                     Flag49  (Id));
*************** package body Einfo is
*** 6322,6335 ****
                 Index : E;
  
              begin
!                Write_Attribute ("   Component Type    ",
!                                                    Component_Type (Id));
                 Write_Eol;
                 Write_Str (Prefix);
                 Write_Str ("   Indices ");
  
                 Index := First_Index (Id);
- 
                 while Present (Index) loop
                    Write_Attribute (" ", Etype (Index));
                    Index := Next_Index (Index);
--- 6457,6469 ----
                 Index : E;
  
              begin
!                Write_Attribute
!                  ("   Component Type    ", Component_Type (Id));
                 Write_Eol;
                 Write_Str (Prefix);
                 Write_Str ("   Indices ");
  
                 Index := First_Index (Id);
                 while Present (Index) loop
                    Write_Attribute (" ", Etype (Index));
                    Index := Next_Index (Index);
*************** package body Einfo is
*** 6982,6987 ****
--- 7116,7125 ----
                Modular_Integer_Kind                       =>
              Write_Str ("Original_Array_Type");
  
+          when E_Access_Subprogram_Type                   |
+               E_Access_Protected_Subprogram_Type         =>
+             Write_Str ("Original_Access_Type");
+ 
           when others                                     =>
              Write_Str ("Field21??");
        end case;
*************** package body Einfo is
*** 7110,7115 ****
--- 7248,7304 ----
        end case;
     end Write_Field23_Name;
  
+    ------------------------
+    -- Write_Field24_Name --
+    ------------------------
+ 
+    procedure Write_Field24_Name (Id : Entity_Id) is
+    begin
+       case Ekind (Id) is
+          when Subprogram_Kind                            =>
+             Write_Str ("Obsolescent_Warning");
+ 
+          when others                                     =>
+             Write_Str ("Field24??");
+       end case;
+    end Write_Field24_Name;
+ 
+    ------------------------
+    -- Write_Field25_Name --
+    ------------------------
+ 
+    procedure Write_Field25_Name (Id : Entity_Id) is
+    begin
+       case Ekind (Id) is
+          when others                                     =>
+             Write_Str ("Field25??");
+       end case;
+    end Write_Field25_Name;
+ 
+    ------------------------
+    -- Write_Field26_Name --
+    ------------------------
+ 
+    procedure Write_Field26_Name (Id : Entity_Id) is
+    begin
+       case Ekind (Id) is
+          when others                                     =>
+             Write_Str ("Field26??");
+       end case;
+    end Write_Field26_Name;
+ 
+    ------------------------
+    -- Write_Field27_Name --
+    ------------------------
+ 
+    procedure Write_Field27_Name (Id : Entity_Id) is
+    begin
+       case Ekind (Id) is
+          when others                                     =>
+             Write_Str ("Field27??");
+       end case;
+    end Write_Field27_Name;
+ 
     -------------------------
     -- Iterator Procedures --
     -------------------------
diff -Nrcpad gcc-3.4.3/gcc/ada/einfo.ads gcc-4.0.0/gcc/ada/einfo.ads
*** gcc-3.4.3/gcc/ada/einfo.ads	Mon Jan  5 15:20:43 2004
--- gcc-4.0.0/gcc/ada/einfo.ads	Thu Feb 10 13:50:25 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Einfo is
*** 41,46 ****
--- 41,50 ----
  --  This package defines the annotations to the abstract syntax tree that
  --  are needed to support semantic processing of an Ada compilation.
  
+ --  Note that after editing this spec and the corresponding body it is
+ --  required to run ceinfo to check the consistentcy of spec and body.
+ --  See ceinfo.adb for more information about the checks made.
+ 
  --  These annotations are for the most part attributes of declared entities,
  --  and they correspond to conventional symbol table information. Other
  --  attributes include sets of meanings for overloaded names, possible
*************** package Einfo is
*** 527,533 ****
  
  --    Component_Size (Uint22) [implementation base type only]
  --       Present in array types. It contains the component size value for
! --       the array. A value of zero means that the value is not yet set.
  --       The value can be set by the use of a component size clause, or
  --       by the front end in package Layout, or by the backend. A negative
  --       value is used to represent a value which is not known at compile
--- 531,537 ----
  
  --    Component_Size (Uint22) [implementation base type only]
  --       Present in array types. It contains the component size value for
! --       the array. A value of No_Uint means that the value is not yet set.
  --       The value can be set by the use of a component size clause, or
  --       by the front end in package Layout, or by the backend. A negative
  --       value is used to represent a value which is not known at compile
*************** package Einfo is
*** 596,602 ****
  --       If the IF/ELSIF condition has the form "[NOT] OBJ RELOP VAL",
  --       where OBJ is a reference to an entity with a Current_Value field,
  --       RELOP is one of the six relational operators, and VAL is a compile-
! --       time known valoue, then the Current_Value field if OBJ is set to
  --       point to the N_If_Statement or N_Elsif_Part node of the relevant
  --       construct. For more details on this usage, see the procedure
  --       Exp_Util.Get_Current_Value_Condition.
--- 600,606 ----
  --       If the IF/ELSIF condition has the form "[NOT] OBJ RELOP VAL",
  --       where OBJ is a reference to an entity with a Current_Value field,
  --       RELOP is one of the six relational operators, and VAL is a compile-
! --       time known value, then the Current_Value field if OBJ is set to
  --       point to the N_If_Statement or N_Elsif_Part node of the relevant
  --       construct. For more details on this usage, see the procedure
  --       Exp_Util.Get_Current_Value_Condition.
*************** package Einfo is
*** 1162,1168 ****
  --       types, i.e. record types (Java classes) that hold pointers to each
  --       other. If such a type is an access type, it has no explicit freeze
  --       node, so that the back-end does not attempt to elaborate it.
! --       Currently this flag is also used to implement Ada0Y (AI-50217).
  --       It will be renamed to From_Limited_With after removal of the current
  --       GNAT with_type clause???
  
--- 1166,1172 ----
  --       types, i.e. record types (Java classes) that hold pointers to each
  --       other. If such a type is an access type, it has no explicit freeze
  --       node, so that the back-end does not attempt to elaborate it.
! --       Currently this flag is also used to implement Ada 2005 (AI-50217).
  --       It will be renamed to From_Limited_With after removal of the current
  --       GNAT with_type clause???
  
*************** package Einfo is
*** 1250,1257 ****
  --    Has_Completion (Flag26)
  --       Present in all entities that require a completion (functions,
  --       procedures, private types, limited private types, incomplete types,
! --       and packages that require a body). Set if the completion has been
! --       encountered and analyzed.
  
  --    Has_Completion_In_Body (Flag71)
  --       Present in  "Taft amendment types" that is to say incomplete types
--- 1254,1261 ----
  --    Has_Completion (Flag26)
  --       Present in all entities that require a completion (functions,
  --       procedures, private types, limited private types, incomplete types,
! --       constants and packages that require a body). The flag is set if the
! --       completion has been encountered and analyzed.
  
  --    Has_Completion_In_Body (Flag71)
  --       Present in  "Taft amendment types" that is to say incomplete types
*************** package Einfo is
*** 1399,1406 ****
  
  --    Has_Per_Object_Constraint (Flag154)
  --       Present in E_Component entities, true if the subtype of the
! --       component has a per object constraint, i.e. an actual discriminant
! --       value of the form T'Access, where T is the enclosing type.
  
  --    Has_Pragma_Controlled (Flag27) [implementation base type only]
  --       Present in access type entities. It is set if a pragma Controlled
--- 1403,1421 ----
  
  --    Has_Per_Object_Constraint (Flag154)
  --       Present in E_Component entities, true if the subtype of the
! --       component has a per object constraint. Per object constraints result
! --       from the following situations:
! --
! --       1. N_Attribute_Reference - when the prefix is the enclosing type and
! --          the attribute is Access.
! --       2. N_Discriminant_Association - when the expression uses the
! --          discriminant of the enclosing type.
! --       3. N_Index_Or_Discriminant_Constraint - when at least one of the
! --          individual constraints is a per object constraint.
! --       4. N_Range - when the lower or upper bound uses the discriminant of
! --          the enclosing type.
! --       5. N_Range_Constraint - when the range expression uses the
! --          discriminant of the enclosing type.
  
  --    Has_Pragma_Controlled (Flag27) [implementation base type only]
  --       Present in access type entities. It is set if a pragma Controlled
*************** package Einfo is
*** 1506,1511 ****
--- 1521,1530 ----
  --       of access types, this flag is present only in the root type, since a
  --       storage size clause cannot be given to a derived type.
  
+ --    Has_Stream_Size_Clause (Flag184)
+ --       This flag is set on types which have a Stream_Size clause attribute.
+ --       Used to prevent multiple Stream_Size clauses for a given entity.
+ 
  --    Has_Subprogram_Descriptor (Flag93)
  --       This flag is set on entities for which zero-cost exception subprogram
  --       descriptors can be generated (subprograms and library level package
*************** package Einfo is
*** 1533,1538 ****
--- 1552,1564 ----
  --       either from their declaration or through type derivation. The use
  --       of this flag exactly meets the spec in RM 3.7(26). Note that all
  --       class-wide types are considered to have unknown discriminants.
+ --       Note that both Has_Discriminants and Has_Unknown_Discriminants may
+ --       be true for a type. Class-wide types and their subtypes have
+ --       unknown discriminants and can have declared ones as well. Private
+ --       types declared with unknown discriminants may have a full view that
+ --       has explicit discriminants, and both flag will be set on the partial
+ --       view, to insure that discriminants are properly inherited in certain
+ --       contexts.
  
  --    Has_Volatile_Components (Flag87) [implementation base type only]
  --       Present in all types and objects. Set only for an array type or
*************** package Einfo is
*** 1596,1602 ****
  --       and packages. Set to Empty unless an export, import, or interface
  --       name pragma has explicitly specified an external name, in which
  --       case it references an N_String_Literal node for the specified
! --       exteral name. In the case of exceptions, the field is set by
  --       Import_Exception/Export_Exception (which can be used in OpenVMS
  --       versions only). Note that if this field is Empty, and Is_Imported
  --       or Is_Exported is set, then the default interface name is the name
--- 1622,1628 ----
  --       and packages. Set to Empty unless an export, import, or interface
  --       name pragma has explicitly specified an external name, in which
  --       case it references an N_String_Literal node for the specified
! --       external name. In the case of exceptions, the field is set by
  --       Import_Exception/Export_Exception (which can be used in OpenVMS
  --       versions only). Note that if this field is Empty, and Is_Imported
  --       or Is_Exported is set, then the default interface name is the name
*************** package Einfo is
*** 1632,1637 ****
--- 1658,1667 ----
  --    Is_Access_Type (synthesized)
  --       Applies to all entities, true for access types and subtypes
  
+ --    Is_Ada_2005 (Flag185)
+ --       Applies to all entities, true if a valid pragma Ada_05 applies to the
+ --       entity, indicating that the entity is Ada 2005 only.
+ 
  --    Is_Aliased (Flag15)
  --       Present in objects whose declarations carry the keyword aliased,
  --       and on record components that have the keyword.
*************** package Einfo is
*** 1963,1974 ****
  --       Present in all entities. Relevant (and can be set True) only for
  --       objects of an access type. It is set if the object is currently
  --       known to have a non-null value (meaning that no access checks
! --       are needed). The indication can for eample3 come from assignment
  --       of an access parameter or an allocator.
  --
  --       Note: this flag is set according to the sequential flow of the
  --       program, watching the current value of the variable. However,
! --       this processing can cases of changing the value of an aliased
  --       or constant object, so even if this flag is set, it should not
  --       be believed if the variable is aliased or volatile. It would
  --       be a little neater to avoid the flag being set in the first
--- 1993,2004 ----
  --       Present in all entities. Relevant (and can be set True) only for
  --       objects of an access type. It is set if the object is currently
  --       known to have a non-null value (meaning that no access checks
! --       are needed). The indication can for example come from assignment
  --       of an access parameter or an allocator.
  --
  --       Note: this flag is set according to the sequential flow of the
  --       program, watching the current value of the variable. However,
! --       this processing can miss cases of changing the value of an aliased
  --       or constant object, so even if this flag is set, it should not
  --       be believed if the variable is aliased or volatile. It would
  --       be a little neater to avoid the flag being set in the first
*************** package Einfo is
*** 2073,2078 ****
--- 2103,2112 ----
  --       Applies to all entities, true for entities representing objects,
  --       including generic formal parameters.
  
+ --    Is_Obsolescent (Flag153)
+ --       Present in subprogram entities. Set if a valid pragma Obsolescent
+ --       applies to the subprogram.
+ 
  --    Is_Optional_Parameter (Flag134)
  --       Present in parameter entities. Set if the parameter is specified as
  --       optional by use of a First_Optional_Parameter argument to one of the
*************** package Einfo is
*** 2173,2182 ****
  --    Is_Protected_Type (synthesized)
  --       Applies to all entities, true for protected types and subtypes
  
- --    Is_Psected (Flag153)
- --       Present in entities for objects, true if a valid Psect_Object
- --       pragma applies to the object. Used to detect duplicate pragmas.
- 
  --    Is_Public (Flag10)
  --       Present in all entities. Set to indicate that an entity defined in
  --       one compilation unit can be referenced from other compilation units.
--- 2207,2212 ----
*************** package Einfo is
*** 2384,2394 ****
  --       Points to a the last entry in the list of associated entities chained
  --       through the Next_Entity field. Empty if no entities are chained.
  
! --    Limited_Views (Elist23)
! --       Present in non-generic package entities that are not instances.
! --       The elements of this list are the shadow entities created for the
! --       types and local packages that are declared in a package that appears
! --       in a limited_with clause (Ada0Y: AI-50217)
  
  --    Lit_Indexes (Node15)
  --       Present in enumeration types and subtypes. Non-empty only for the
--- 2414,2425 ----
  --       Points to a the last entry in the list of associated entities chained
  --       through the Next_Entity field. Empty if no entities are chained.
  
! --    Limited_View (Node23)
! --       Present in non-generic package entities that are not instances. Bona
! --       fide package with the limited-view list through the first_entity and
! --       first_private attributes. The elements of this list are the shadow
! --       entities created for the types and local packages that are declared
! --       in a package appearing in a limited_with clause (Ada 2005: AI-50217)
  
  --    Lit_Indexes (Node15)
  --       Present in enumeration types and subtypes. Non-empty only for the
*************** package Einfo is
*** 2435,2440 ****
--- 2466,2479 ----
  --       case, this will be a power of 2, but if Non_Binary_Modulus is
  --       set, then it will not be a power of 2.
  
+ --    Must_Be_On_Byte_Boundary (Flag183)
+ --       Present in entities for types and subtypes. Set if objects of
+ --       the type must always be allocated on a byte boundary (more
+ --       accurately a storage unit boundary). The front end checks that
+ --       component clauses respect this rule, and the back end ensures
+ --       that record packing does not violate this rule. Currently the
+ --       flag is set only for packed arrays longer than 64 bits.
+ 
  --    Needs_Debug_Info (Flag147)
  --       Present in all entities. Set if the entity requires debugging
  --       information to be generated. This is true of all entities that
*************** package Einfo is
*** 2558,2564 ****
  
  --    Non_Limited_View (Node17)
  --       Present in incomplete types that are the shadow entities created
! --       when analyzing a limited_with_clause (Ada0Y: AI-50217). Points to
  --       the defining entity in the original declaration.
  
  --    Nonzero_Is_True (Flag162) [base type only]
--- 2597,2603 ----
  
  --    Non_Limited_View (Node17)
  --       Present in incomplete types that are the shadow entities created
! --       when analyzing a limited_with_clause (Ada 2005: AI-50217). Points to
  --       the defining entity in the original declaration.
  
  --    Nonzero_Is_True (Flag162) [base type only]
*************** package Einfo is
*** 2600,2605 ****
--- 2639,2654 ----
  --       the maximum size such records (needed for allocation purposes when
  --       there are default discriminants, and also for the 'Size value).
  
+ --    No_Strict_Aliasing (Flag136) [base type only]
+ --       Present in access types. Set to direct the back end to avoid any
+ --       optimizations based on an assumption about the aliasing status of
+ --       objects designated by the access type. For the case of the gcc
+ --       back end, the effect is as though all references to objects of
+ --       the type were compiled with -fno-strict-aliasing. This flag is
+ --       set if an unchecked conversion with the access type as a target
+ --       type occurs in the same source unit as the declaration of the
+ --       access type, or if an explicit pragma No_Strict_Aliasing applies.
+ 
  --    Number_Dimensions (synthesized)
  --       Applies to array types and subtypes. Returns the number of dimensions
  --       of the array type or subtype as a value of type Pos.
*************** package Einfo is
*** 2616,2621 ****
--- 2665,2681 ----
  --       Applies to subprograms and subprogram types. Yields the number of
  --       formals as a value of type Pos.
  
+ --    Obsolescent_Warning (Node24)
+ --       Present in subprogram entities. Set non-empty only if the pragma
+ --       Obsolescent had a string argument, in which case it records the
+ --       contents of the corresponding string literal node.
+ 
+ --    Original_Access_Type (Node21)
+ --       Present in access to subprogram types. Anonymous access to protected
+ --       subprogram types are replaced by an occurrence of an internal access
+ --       to subprogram type. This field links the replacement entity with the
+ --       original entity.
+ 
  --    Original_Array_Type (Node21)
  --       Present in modular types and array types and subtypes. Set only
  --       if the Is_Packed_Array_Type flag is set, indicating that the type
*************** package Einfo is
*** 2890,2896 ****
  --       is needed, since returns an invalid value in this case!
  
  --    Sec_Stack_Needed_For_Return (Flag167)
! --       Present in scope entities (blocks,functions, procedures, tasks,
  --       entries). Set to True when secondary stack is used to hold
  --       the returned value of a function and thus should not be
  --       released on scope exit.
--- 2950,2956 ----
  --       is needed, since returns an invalid value in this case!
  
  --    Sec_Stack_Needed_For_Return (Flag167)
! --       Present in scope entities (blocks, functions, procedures, tasks,
  --       entries). Set to True when secondary stack is used to hold
  --       the returned value of a function and thus should not be
  --       released on scope exit.
*************** package Einfo is
*** 3045,3051 ****
  --       Present in private subtypes that are the completion of other private
  --       types, or in private types that are derived from private subtypes.
  --       If the full view of a private type T is derived from another
! --       private type  with discriminants Td, the full view of T is also
  --       private, and there is no way to attach to it a further full view that
  --       would convey the structure of T to the back end. The Underlying_Full_
  --       View is an attribute of the full view that is a subtype of Td with
--- 3105,3111 ----
  --       Present in private subtypes that are the completion of other private
  --       types, or in private types that are derived from private subtypes.
  --       If the full view of a private type T is derived from another
! --       private type with discriminants Td, the full view of T is also
  --       private, and there is no way to attach to it a further full view that
  --       would convey the structure of T to the back end. The Underlying_Full_
  --       View is an attribute of the full view that is a subtype of Td with
*************** package Einfo is
*** 3096,3102 ****
     --  The following three entity kinds are introduced by the corresponding
     --  type definitions:
  
!    --    E_Access_Type,  E_General_Access_Type,  E_Anonymous_Access_Type.
  
     --  In addition, we define the kind E_Allocator_Type to label
     --  allocators. This is because special resolution rules apply to this
--- 3156,3166 ----
     --  The following three entity kinds are introduced by the corresponding
     --  type definitions:
  
!    --    E_Access_Type,
!    --    E_General_Access_Type,
!    --    E_Anonymous_Access_Subprogram_Type,
!    --    E_Anonymous_Access_Protected_Subprogram_Type
!    --    E_Anonymous_Access_Type.
  
     --  In addition, we define the kind E_Allocator_Type to label
     --  allocators. This is because special resolution rules apply to this
*************** package Einfo is
*** 3304,3309 ****
--- 3368,3381 ----
        --  and a protected operation within, and have different compile-time
        --  and run-time properties than other access to subprograms.
  
+       E_Anonymous_Access_Subprogram_Type,
+       --  An anonymous access to subprogram type, created by an access to
+       --  subprogram declaration.
+ 
+       E_Anonymous_Access_Protected_Subprogram_Type,
+       --  An anonymous access to protected subprogram type, created by an
+       --  access to subprogram declaration.
+ 
        E_Anonymous_Access_Type,
        --  An anonymous access type created by an access parameter or access
        --  discriminant.
*************** package Einfo is
*** 3348,3365 ****
        --  A record subtype, created by a record subtype declaration.
  
        E_Record_Type_With_Private,
!       --  Used for types defined by a private extension declaration. Includes
!       --  the fields for both private types and for record types (with the
!       --  sole exception of Corresponding_Concurrent_Type which is obviously
!       --  not needed). This entity is considered to be both a record type and
        --  a private type.
  
        E_Record_Subtype_With_Private,
        --  A subtype of a type defined by a private extension declaration.
  
        E_Private_Type,
!       --  A private type, created by a private type declaration that does
!       --  not have the keyword limited.
  
        E_Private_Subtype,
        --  A subtype of a private type, created by a subtype declaration used
--- 3420,3438 ----
        --  A record subtype, created by a record subtype declaration.
  
        E_Record_Type_With_Private,
!       --  Used for types defined by a private extension declaration, and
!       --  for tagged private types. Includes the fields for both private
!       --  types and for record types (with the sole exception of
!       --  Corresponding_Concurrent_Type which is obviously not needed).
!       --  This entity is considered to be both a record type and
        --  a private type.
  
        E_Record_Subtype_With_Private,
        --  A subtype of a type defined by a private extension declaration.
  
        E_Private_Type,
!       --  A private type, created by a private type declaration
!       --  that has neither the keyword limited nor the keyword tagged.
  
        E_Private_Subtype,
        --  A subtype of a private type, created by a subtype declaration used
*************** package Einfo is
*** 3367,3373 ****
  
        E_Limited_Private_Type,
        --  A limited private type, created by a private type declaration that
!       --  has the keyword limited.
  
        E_Limited_Private_Subtype,
        --  A subtype of a limited private type, created by a subtype declaration
--- 3440,3446 ----
  
        E_Limited_Private_Type,
        --  A limited private type, created by a private type declaration that
!       --  has the keyword limited, but not the keyword tagged.
  
        E_Limited_Private_Subtype,
        --  A subtype of a limited private type, created by a subtype declaration
*************** package Einfo is
*** 3525,3530 ****
--- 3598,3605 ----
     --  E_General_Access_Type
     --  E_Access_Subprogram_Type
     --  E_Access_Protected_Subprogram_Type
+    --  E_Anonymous_Access_Subprogram_Type
+    --  E_Anonymous_Access_Protected_Subprogram_Type
         E_Anonymous_Access_Type;
  
     subtype Array_Kind                  is Entity_Kind range
*************** package Einfo is
*** 3620,3625 ****
--- 3695,3702 ----
     --  E_General_Access_Type
     --  E_Access_Subprogram_Type
     --  E_Access_Protected_Subprogram_Type
+    --  E_Anonymous_Access_Subprogram_Type
+    --  E_Anonymous_Access_Protected_Subprogram_Type
         E_Anonymous_Access_Type;
  
     subtype Enumeration_Kind            is Entity_Kind range
*************** package Einfo is
*** 3792,3797 ****
--- 3869,3876 ----
     --  E_General_Access_Type
     --  E_Access_Subprogram_Type,
     --  E_Access_Protected_Subprogram_Type
+    --  E_Anonymous_Access_Subprogram_Type
+    --  E_Anonymous_Access_Protected_Subprogram_Type
     --  E_Anonymous_Access_Type
     --  E_Array_Type
     --  E_Array_Subtype
*************** package Einfo is
*** 3854,3859 ****
--- 3933,3939 ----
     --    Has_Qualified_Name            (Flag161)
     --    Has_Unknown_Discriminants     (Flag72)
     --    Has_Xref_Entry                (Flag182)
+    --    Is_Ada_2005                   (Flag185)
     --    Is_Bit_Packed_Array           (Flag122)  (base type only)
     --    Is_Child_Unit                 (Flag73)
     --    Is_Compilation_Unit           (Flag149)
*************** package Einfo is
*** 3952,3957 ****
--- 4032,4038 ----
     --    Is_Tagged_Type                (Flag55)
     --    Is_Unsigned_Type              (Flag144)
     --    Is_Volatile                   (Flag16)
+    --    Must_Be_On_Byte_Boundary      (Flag183)
     --    Size_Depends_On_Discriminant  (Flag177)
     --    Size_Known_At_Compile_Time    (Flag92)
     --    Strict_Alignment              (Flag145)  (base type only)
*************** package Einfo is
*** 3977,3988 ****
--- 4058,4071 ----
     --  E_Access_Protected_Subprogram_Type
     --    Equivalent_Type               (Node18)
     --    Directly_Designated_Type      (Node20)
+    --    Original_Access_Type          (Node21)
     --    Needs_No_Actuals              (Flag22)
     --    (plus type attributes)
  
     --  E_Access_Subprogram_Type
     --    Equivalent_Type               (Node18)   (remote types only)
     --    Directly_Designated_Type      (Node20)
+    --    Original_Access_Type          (Node21)
     --    Needs_No_Actuals              (Flag22)
     --    (plus type attributes)
  
*************** package Einfo is
*** 3997,4002 ****
--- 4080,4086 ----
     --    Has_Storage_Size_Clause       (Flag23)   (base type only)
     --    Is_Access_Constant            (Flag69)
     --    No_Pool_Assigned              (Flag131)  (base type only)
+    --    No_Strict_Aliasing            (Flag136)  (base type only)
     --    (plus type attributes)
  
     --  E_Access_Attribute_Type
*************** package Einfo is
*** 4007,4012 ****
--- 4091,4098 ----
     --    Directly_Designated_Type      (Node20)
     --    (plus type attributes)
  
+    --  E_Anonymous_Access_Subprogram_Type
+    --  E_Anonymous_Access_Protected_Subprogram_Type
     --  E_Anonymous_Access_Type
     --    Storage_Size_Variable         (Node15)   ??? is this needed ???
     --    Directly_Designated_Type      (Node20)
*************** package Einfo is
*** 4094,4104 ****
     --    Has_Alignment_Clause          (Flag46)
     --    Has_Atomic_Components         (Flag86)
     --    Has_Biased_Representation     (Flag139)
     --    Has_Size_Clause               (Flag29)
     --    Has_Volatile_Components       (Flag87)
     --    Is_Atomic                     (Flag85)
     --    Is_Eliminated                 (Flag124)
-    --    Is_Psected                    (Flag153)
     --    Is_True_Constant              (Flag163)
     --    Is_Volatile                   (Flag16)
     --    Never_Set_In_Source           (Flag115)
--- 4180,4190 ----
     --    Has_Alignment_Clause          (Flag46)
     --    Has_Atomic_Components         (Flag86)
     --    Has_Biased_Representation     (Flag139)
+    --    Has_Completion                (Flag26)   (constants only)
     --    Has_Size_Clause               (Flag29)
     --    Has_Volatile_Components       (Flag87)
     --    Is_Atomic                     (Flag85)
     --    Is_Eliminated                 (Flag124)
     --    Is_True_Constant              (Flag163)
     --    Is_Volatile                   (Flag16)
     --    Never_Set_In_Source           (Flag115)
*************** package Einfo is
*** 4233,4238 ****
--- 4319,4325 ----
     --    Generic_Renamings             (Elist23)  (for an instance)
     --    Inner_Instances               (Elist23)  (for a generic function)
     --    Privals_Chain                 (Elist23)  (for a protected function)
+    --    Obsolescent_Warning           (Node24)
     --    Body_Needed_For_SAL           (Flag40)
     --    Elaboration_Entity_Required   (Flag174)
     --    Function_Returns_With_DSP     (Flag169)
*************** package Einfo is
*** 4257,4262 ****
--- 4344,4350 ----
     --    Is_Instantiated               (Flag126)  (generic case only)
     --    Is_Intrinsic_Subprogram       (Flag64)
     --    Is_Machine_Code_Subprogram    (Flag137)  (non-generic case only)
+    --    Is_Obsolescent                (Flag153)
     --    Is_Overriding_Operation       (Flag39)   (non-generic case only)
     --    Is_Private_Descendant         (Flag53)
     --    Is_Pure                       (Flag44)
*************** package Einfo is
*** 4407,4413 ****
     --    Scope_Depth_Value             (Uint22)
     --    Generic_Renamings             (Elist23)  (for an instance)
     --    Inner_Instances               (Elist23)  (generic case only)
!    --    Limited_Views                 (Elist23)  (non-generic, not instance)
     --    Delay_Subprogram_Descriptors  (Flag50)
     --    Body_Needed_For_SAL           (Flag40)
     --    Discard_Names                 (Flag88)
--- 4495,4501 ----
     --    Scope_Depth_Value             (Uint22)
     --    Generic_Renamings             (Elist23)  (for an instance)
     --    Inner_Instances               (Elist23)  (generic case only)
!    --    Limited_View                  (Node23)   (non-generic, not instance)
     --    Delay_Subprogram_Descriptors  (Flag50)
     --    Body_Needed_For_SAL           (Flag40)
     --    Discard_Names                 (Flag88)
*************** package Einfo is
*** 4478,4483 ****
--- 4566,4572 ----
     --    Generic_Renamings             (Elist23)  (for an instance)
     --    Inner_Instances               (Elist23)  (for a generic procedure)
     --    Privals_Chain                 (Elist23)  (for a protected procedure)
+    --    Obsolescent_Warning           (Node24)
     --    Body_Needed_For_SAL           (Flag40)
     --    Elaboration_Entity_Required   (Flag174)
     --    Function_Returns_With_DSP     (Flag169)  (always False for procedure)
*************** package Einfo is
*** 4502,4507 ****
--- 4591,4597 ----
     --    Is_Intrinsic_Subprogram       (Flag64)
     --    Is_Machine_Code_Subprogram    (Flag137)  (non-generic case only)
     --    Is_Null_Init_Proc             (Flag178)
+    --    Is_Obsolescent                (Flag153)
     --    Is_Overriding_Operation       (Flag39)   (non-generic case only)
     --    Is_Private_Descendant         (Flag53)
     --    Is_Pure                       (Flag44)
*************** package Einfo is
*** 4677,4683 ****
     --    Has_Volatile_Components       (Flag87)
     --    Is_Atomic                     (Flag85)
     --    Is_Eliminated                 (Flag124)
-    --    Is_Psected                    (Flag153)
     --    Is_Shared_Passive             (Flag60)
     --    Is_True_Constant              (Flag163)
     --    Is_Volatile                   (Flag16)
--- 4767,4772 ----
*************** package Einfo is
*** 4909,4917 ****
     subtype L is Elist_Id;
     subtype S is List_Id;
  
!    ---------------------------------
!    --  Attribute Access Functions --
!    ---------------------------------
  
     --  All attributes are manipulated through a procedural interface. This
     --  section contains the functions used to obtain attribute values which
--- 4998,5006 ----
     subtype L is Elist_Id;
     subtype S is List_Id;
  
!    --------------------------------
!    -- Attribute Access Functions --
!    --------------------------------
  
     --  All attributes are manipulated through a procedural interface. This
     --  section contains the functions used to obtain attribute values which
*************** package Einfo is
*** 5051,5056 ****
--- 5140,5146 ----
     function Has_Small_Clause                   (Id : E) return B;
     function Has_Specified_Layout               (Id : E) return B;
     function Has_Storage_Size_Clause            (Id : E) return B;
+    function Has_Stream_Size_Clause             (Id : E) return B;
     function Has_Subprogram_Descriptor          (Id : E) return B;
     function Has_Task                           (Id : E) return B;
     function Has_Unchecked_Union                (Id : E) return B;
*************** package Einfo is
*** 5067,5072 ****
--- 5157,5163 ----
     function Is_AST_Entry                       (Id : E) return B;
     function Is_Abstract                        (Id : E) return B;
     function Is_Access_Constant                 (Id : E) return B;
+    function Is_Ada_2005                        (Id : E) return B;
     function Is_Aliased                         (Id : E) return B;
     function Is_Asynchronous                    (Id : E) return B;
     function Is_Atomic                          (Id : E) return B;
*************** package Einfo is
*** 5109,5114 ****
--- 5200,5206 ----
     function Is_Machine_Code_Subprogram         (Id : E) return B;
     function Is_Non_Static_Subtype              (Id : E) return B;
     function Is_Null_Init_Proc                  (Id : E) return B;
+    function Is_Obsolescent                     (Id : E) return B;
     function Is_Optional_Parameter              (Id : E) return B;
     function Is_Package_Body_Entity             (Id : E) return B;
     function Is_Packed                          (Id : E) return B;
*************** package Einfo is
*** 5117,5123 ****
     function Is_Preelaborated                   (Id : E) return B;
     function Is_Private_Composite               (Id : E) return B;
     function Is_Private_Descendant              (Id : E) return B;
-    function Is_Psected                         (Id : E) return B;
     function Is_Public                          (Id : E) return B;
     function Is_Pure                            (Id : E) return B;
     function Is_Remote_Call_Interface           (Id : E) return B;
--- 5209,5214 ----
*************** package Einfo is
*** 5140,5146 ****
     function Kill_Range_Checks                  (Id : E) return B;
     function Kill_Tag_Checks                    (Id : E) return B;
     function Last_Entity                        (Id : E) return E;
!    function Limited_Views                      (Id : E) return L;
     function Lit_Indexes                        (Id : E) return E;
     function Lit_Strings                        (Id : E) return E;
     function Machine_Radix_10                   (Id : E) return B;
--- 5231,5237 ----
     function Kill_Range_Checks                  (Id : E) return B;
     function Kill_Tag_Checks                    (Id : E) return B;
     function Last_Entity                        (Id : E) return E;
!    function Limited_View                       (Id : E) return E;
     function Lit_Indexes                        (Id : E) return E;
     function Lit_Strings                        (Id : E) return E;
     function Machine_Radix_10                   (Id : E) return B;
*************** package Einfo is
*** 5148,5159 ****
--- 5239,5252 ----
     function Materialize_Entity                 (Id : E) return B;
     function Mechanism                          (Id : E) return M;
     function Modulus                            (Id : E) return U;
+    function Must_Be_On_Byte_Boundary           (Id : E) return B;
     function Needs_Debug_Info                   (Id : E) return B;
     function Needs_No_Actuals                   (Id : E) return B;
     function Never_Set_In_Source                (Id : E) return B;
     function Next_Inlined_Subprogram            (Id : E) return E;
     function No_Pool_Assigned                   (Id : E) return B;
     function No_Return                          (Id : E) return B;
+    function No_Strict_Aliasing                 (Id : E) return B;
     function Non_Binary_Modulus                 (Id : E) return B;
     function Non_Limited_View                   (Id : E) return E;
     function Nonzero_Is_True                    (Id : E) return B;
*************** package Einfo is
*** 5161,5166 ****
--- 5254,5261 ----
     function Normalized_Position                (Id : E) return U;
     function Normalized_Position_Max            (Id : E) return U;
     function Object_Ref                         (Id : E) return E;
+    function Obsolescent_Warning                (Id : E) return N;
+    function Original_Access_Type               (Id : E) return E;
     function Original_Array_Type                (Id : E) return E;
     function Original_Record_Component          (Id : E) return E;
     function Packed_Array_Type                  (Id : E) return E;
*************** package Einfo is
*** 5320,5325 ****
--- 5415,5421 ----
     function Root_Type                          (Id : E) return E;
     function Scope_Depth_Set                    (Id : E) return B;
     function Size_Clause                        (Id : E) return N;
+    function Stream_Size_Clause                 (Id : E) return N;
     function Tag_Component                      (Id : E) return E;
     function Type_High_Bound                    (Id : E) return N;
     function Type_Low_Bound                     (Id : E) return N;
*************** package Einfo is
*** 5518,5523 ****
--- 5614,5620 ----
     procedure Set_Has_Small_Clause              (Id : E; V : B := True);
     procedure Set_Has_Specified_Layout          (Id : E; V : B := True);
     procedure Set_Has_Storage_Size_Clause       (Id : E; V : B := True);
+    procedure Set_Has_Stream_Size_Clause        (Id : E; V : B := True);
     procedure Set_Has_Subprogram_Descriptor     (Id : E; V : B := True);
     procedure Set_Has_Task                      (Id : E; V : B := True);
     procedure Set_Has_Unchecked_Union           (Id : E; V : B := True);
*************** package Einfo is
*** 5534,5539 ****
--- 5631,5637 ----
     procedure Set_Is_AST_Entry                  (Id : E; V : B := True);
     procedure Set_Is_Abstract                   (Id : E; V : B := True);
     procedure Set_Is_Access_Constant            (Id : E; V : B := True);
+    procedure Set_Is_Ada_2005                   (Id : E; V : B := True);
     procedure Set_Is_Aliased                    (Id : E; V : B := True);
     procedure Set_Is_Asynchronous               (Id : E; V : B := True);
     procedure Set_Is_Atomic                     (Id : E; V : B := True);
*************** package Einfo is
*** 5581,5586 ****
--- 5679,5685 ----
     procedure Set_Is_Machine_Code_Subprogram    (Id : E; V : B := True);
     procedure Set_Is_Non_Static_Subtype         (Id : E; V : B := True);
     procedure Set_Is_Null_Init_Proc             (Id : E; V : B := True);
+    procedure Set_Is_Obsolescent                (Id : E; V : B := True);
     procedure Set_Is_Optional_Parameter         (Id : E; V : B := True);
     procedure Set_Is_Overriding_Operation       (Id : E; V : B := True);
     procedure Set_Is_Package_Body_Entity        (Id : E; V : B := True);
*************** package Einfo is
*** 5590,5596 ****
     procedure Set_Is_Preelaborated              (Id : E; V : B := True);
     procedure Set_Is_Private_Composite          (Id : E; V : B := True);
     procedure Set_Is_Private_Descendant         (Id : E; V : B := True);
-    procedure Set_Is_Psected                    (Id : E; V : B := True);
     procedure Set_Is_Public                     (Id : E; V : B := True);
     procedure Set_Is_Pure                       (Id : E; V : B := True);
     procedure Set_Is_Remote_Call_Interface      (Id : E; V : B := True);
--- 5689,5694 ----
*************** package Einfo is
*** 5612,5618 ****
     procedure Set_Kill_Range_Checks             (Id : E; V : B := True);
     procedure Set_Kill_Tag_Checks               (Id : E; V : B := True);
     procedure Set_Last_Entity                   (Id : E; V : E);
!    procedure Set_Limited_Views                 (Id : E; V : L);
     procedure Set_Lit_Indexes                   (Id : E; V : E);
     procedure Set_Lit_Strings                   (Id : E; V : E);
     procedure Set_Machine_Radix_10              (Id : E; V : B := True);
--- 5710,5716 ----
     procedure Set_Kill_Range_Checks             (Id : E; V : B := True);
     procedure Set_Kill_Tag_Checks               (Id : E; V : B := True);
     procedure Set_Last_Entity                   (Id : E; V : E);
!    procedure Set_Limited_View                  (Id : E; V : E);
     procedure Set_Lit_Indexes                   (Id : E; V : E);
     procedure Set_Lit_Strings                   (Id : E; V : E);
     procedure Set_Machine_Radix_10              (Id : E; V : B := True);
*************** package Einfo is
*** 5620,5631 ****
--- 5718,5731 ----
     procedure Set_Materialize_Entity            (Id : E; V : B := True);
     procedure Set_Mechanism                     (Id : E; V : M);
     procedure Set_Modulus                       (Id : E; V : U);
+    procedure Set_Must_Be_On_Byte_Boundary      (Id : E; V : B := True);
     procedure Set_Needs_Debug_Info              (Id : E; V : B := True);
     procedure Set_Needs_No_Actuals              (Id : E; V : B := True);
     procedure Set_Never_Set_In_Source           (Id : E; V : B := True);
     procedure Set_Next_Inlined_Subprogram       (Id : E; V : E);
     procedure Set_No_Pool_Assigned              (Id : E; V : B := True);
     procedure Set_No_Return                     (Id : E; V : B := True);
+    procedure Set_No_Strict_Aliasing            (Id : E; V : B := True);
     procedure Set_Non_Binary_Modulus            (Id : E; V : B := True);
     procedure Set_Non_Limited_View              (Id : E; V : E);
     procedure Set_Nonzero_Is_True               (Id : E; V : B := True);
*************** package Einfo is
*** 5633,5638 ****
--- 5733,5740 ----
     procedure Set_Normalized_Position           (Id : E; V : U);
     procedure Set_Normalized_Position_Max       (Id : E; V : U);
     procedure Set_Object_Ref                    (Id : E; V : E);
+    procedure Set_Obsolescent_Warning           (Id : E; V : N);
+    procedure Set_Original_Access_Type          (Id : E; V : E);
     procedure Set_Original_Array_Type           (Id : E; V : E);
     procedure Set_Original_Record_Component     (Id : E; V : E);
     procedure Set_Packed_Array_Type             (Id : E; V : E);
*************** package Einfo is
*** 5793,5818 ****
     procedure Next_Stored_Discriminant (N : in out Node_Id)
       renames Proc_Next_Stored_Discriminant;
  
!    -------------------------------
!    -- Miscellaneous Subprograms --
!    -------------------------------
  
!    procedure Append_Entity (Id : Entity_Id; V : Entity_Id);
!    --  Add an entity to the list of entities declared in the scope V
  
     function Get_Rep_Pragma (E : Entity_Id; Nam : Name_Id) return Node_Id;
     --  Searches the Rep_Item chain for the given entity E, for an instance
     --  of a representation pragma with the given name Nam. If found then
     --  the value returned is the N_Pragma node, otherwise Empty is returned.
  
!    function Get_Attribute_Definition_Clause
!      (E    : Entity_Id;
!       Id   : Attribute_Id)
!       return Node_Id;
     --  Searches the Rep_Item chain for a given entity E, for an instance
     --  of an attribute definition clause with the given attibute Id Id. If
!    --  found, the value returned is the N_Attribute_Definition_Clause node,
!    --  otherwise Empty is returned.
  
     function Is_Entity_Name (N : Node_Id) return Boolean;
     --  Test if the node N is the name of an entity (i.e. is an identifier,
--- 5895,5950 ----
     procedure Next_Stored_Discriminant (N : in out Node_Id)
       renames Proc_Next_Stored_Discriminant;
  
!    ----------------------------------------------
!    -- Subprograms for Accessing Rep Item Chain --
!    ----------------------------------------------
  
!    --  The First_Rep_Item field of every entity points to a linked list
!    --  (linked through Next_Rep_Item) of representation pragmas and
!    --  attribute definition clauses that apply to the item. Note that
!    --  in the case of types, it is assumed that any such rep items for
!    --  a base type also apply to all subtypes. This is implemented by
!    --  having the chain for subtypes link onto the chain for the base
!    --  type, so that any new entries for the subtype are added at the
!    --  start of the chain.
! 
!    function Get_Attribute_Definition_Clause
!      (E  : Entity_Id;
!       Id : Attribute_Id) return Node_Id;
!    --  Searches the Rep_Item chain for a given entity E, for an instance
!    --  of an attribute definition clause with the given attibute Id Id. If
!    --  found, the value returned is the N_Attribute_Definition_Clause node,
!    --  otherwise Empty is returned.
  
     function Get_Rep_Pragma (E : Entity_Id; Nam : Name_Id) return Node_Id;
     --  Searches the Rep_Item chain for the given entity E, for an instance
     --  of a representation pragma with the given name Nam. If found then
     --  the value returned is the N_Pragma node, otherwise Empty is returned.
  
!    function Has_Rep_Pragma (E : Entity_Id; Nam : Name_Id) return Boolean;
!    --  Searches the Rep_Item chain for the given entity E, for an instance
!    --  of representation pragma with the given name Nam. If found then True
!    --  is returned, otherwise False indicates that no matching entry was found.
! 
!    function Has_Attribute_Definition_Clause
!      (E  : Entity_Id;
!       Id : Attribute_Id) return Boolean;
     --  Searches the Rep_Item chain for a given entity E, for an instance
     --  of an attribute definition clause with the given attibute Id Id. If
!    --  found, True is returned, otherwise False indicates that no matching
!    --  entry was found.
! 
!    procedure Record_Rep_Item (E : Entity_Id; N : Node_Id);
!    --  N is the node for either a representation pragma or an attribute
!    --  definition clause that applies to entity E. This procedure links
!    --  the node N onto the Rep_Item chain for entity E.
! 
!    -------------------------------
!    -- Miscellaneous Subprograms --
!    -------------------------------
! 
!    procedure Append_Entity (Id : Entity_Id; V : Entity_Id);
!    --  Add an entity to the list of entities declared in the scope V
  
     function Is_Entity_Name (N : Node_Id) return Boolean;
     --  Test if the node N is the name of an entity (i.e. is an identifier,
*************** package Einfo is
*** 5863,5868 ****
--- 5995,6004 ----
     procedure Write_Field21_Name (Id : Entity_Id);
     procedure Write_Field22_Name (Id : Entity_Id);
     procedure Write_Field23_Name (Id : Entity_Id);
+    procedure Write_Field24_Name (Id : Entity_Id);
+    procedure Write_Field25_Name (Id : Entity_Id);
+    procedure Write_Field26_Name (Id : Entity_Id);
+    procedure Write_Field27_Name (Id : Entity_Id);
     --  These routines are used to output a nice symbolic name for the given
     --  field, depending on the Ekind. No blanks or end of lines are output,
     --  just the characters of the field name.
*************** package Einfo is
*** 6008,6013 ****
--- 6144,6150 ----
     pragma Inline (Has_Small_Clause);
     pragma Inline (Has_Specified_Layout);
     pragma Inline (Has_Storage_Size_Clause);
+    pragma Inline (Has_Stream_Size_Clause);
     pragma Inline (Has_Subprogram_Descriptor);
     pragma Inline (Has_Task);
     pragma Inline (Has_Unchecked_Union);
*************** package Einfo is
*** 6024,6029 ****
--- 6161,6167 ----
     pragma Inline (Is_AST_Entry);
     pragma Inline (Is_Abstract);
     pragma Inline (Is_Access_Constant);
+    pragma Inline (Is_Ada_2005);
     pragma Inline (Is_Access_Type);
     pragma Inline (Is_Aliased);
     pragma Inline (Is_Array_Type);
*************** package Einfo is
*** 6093,6098 ****
--- 6231,6237 ----
     pragma Inline (Is_Named_Number);
     pragma Inline (Is_Non_Static_Subtype);
     pragma Inline (Is_Null_Init_Proc);
+    pragma Inline (Is_Obsolescent);
     pragma Inline (Is_Numeric_Type);
     pragma Inline (Is_Object);
     pragma Inline (Is_Optional_Parameter);
*************** package Einfo is
*** 6108,6114 ****
     pragma Inline (Is_Private_Descendant);
     pragma Inline (Is_Private_Type);
     pragma Inline (Is_Protected_Type);
-    pragma Inline (Is_Psected);
     pragma Inline (Is_Public);
     pragma Inline (Is_Pure);
     pragma Inline (Is_Real_Type);
--- 6247,6252 ----
*************** package Einfo is
*** 6136,6142 ****
     pragma Inline (Kill_Range_Checks);
     pragma Inline (Kill_Tag_Checks);
     pragma Inline (Last_Entity);
!    pragma Inline (Limited_Views);
     pragma Inline (Lit_Indexes);
     pragma Inline (Lit_Strings);
     pragma Inline (Machine_Radix_10);
--- 6274,6280 ----
     pragma Inline (Kill_Range_Checks);
     pragma Inline (Kill_Tag_Checks);
     pragma Inline (Last_Entity);
!    pragma Inline (Limited_View);
     pragma Inline (Lit_Indexes);
     pragma Inline (Lit_Strings);
     pragma Inline (Machine_Radix_10);
*************** package Einfo is
*** 6144,6149 ****
--- 6282,6288 ----
     pragma Inline (Materialize_Entity);
     pragma Inline (Mechanism);
     pragma Inline (Modulus);
+    pragma Inline (Must_Be_On_Byte_Boundary);
     pragma Inline (Needs_Debug_Info);
     pragma Inline (Needs_No_Actuals);
     pragma Inline (Never_Set_In_Source);
*************** package Einfo is
*** 6152,6157 ****
--- 6291,6297 ----
     pragma Inline (Next_Literal);
     pragma Inline (No_Pool_Assigned);
     pragma Inline (No_Return);
+    pragma Inline (No_Strict_Aliasing);
     pragma Inline (Non_Binary_Modulus);
     pragma Inline (Non_Limited_View);
     pragma Inline (Nonzero_Is_True);
*************** package Einfo is
*** 6159,6164 ****
--- 6299,6306 ----
     pragma Inline (Normalized_Position);
     pragma Inline (Normalized_Position_Max);
     pragma Inline (Object_Ref);
+    pragma Inline (Obsolescent_Warning);
+    pragma Inline (Original_Access_Type);
     pragma Inline (Original_Array_Type);
     pragma Inline (Original_Record_Component);
     pragma Inline (Packed_Array_Type);
*************** package Einfo is
*** 6365,6370 ****
--- 6507,6513 ----
     pragma Inline (Set_Is_AST_Entry);
     pragma Inline (Set_Is_Abstract);
     pragma Inline (Set_Is_Access_Constant);
+    pragma Inline (Set_Is_Ada_2005);
     pragma Inline (Set_Is_Aliased);
     pragma Inline (Set_Is_Asynchronous);
     pragma Inline (Set_Is_Atomic);
*************** package Einfo is
*** 6412,6417 ****
--- 6555,6561 ----
     pragma Inline (Set_Is_Machine_Code_Subprogram);
     pragma Inline (Set_Is_Non_Static_Subtype);
     pragma Inline (Set_Is_Null_Init_Proc);
+    pragma Inline (Set_Is_Obsolescent);
     pragma Inline (Set_Is_Optional_Parameter);
     pragma Inline (Set_Is_Overriding_Operation);
     pragma Inline (Set_Is_Package_Body_Entity);
*************** package Einfo is
*** 6421,6427 ****
     pragma Inline (Set_Is_Preelaborated);
     pragma Inline (Set_Is_Private_Composite);
     pragma Inline (Set_Is_Private_Descendant);
-    pragma Inline (Set_Is_Psected);
     pragma Inline (Set_Is_Public);
     pragma Inline (Set_Is_Pure);
     pragma Inline (Set_Is_Remote_Call_Interface);
--- 6565,6570 ----
*************** package Einfo is
*** 6443,6449 ****
     pragma Inline (Set_Kill_Range_Checks);
     pragma Inline (Set_Kill_Tag_Checks);
     pragma Inline (Set_Last_Entity);
!    pragma Inline (Set_Limited_Views);
     pragma Inline (Set_Lit_Indexes);
     pragma Inline (Set_Lit_Strings);
     pragma Inline (Set_Machine_Radix_10);
--- 6586,6592 ----
     pragma Inline (Set_Kill_Range_Checks);
     pragma Inline (Set_Kill_Tag_Checks);
     pragma Inline (Set_Last_Entity);
!    pragma Inline (Set_Limited_View);
     pragma Inline (Set_Lit_Indexes);
     pragma Inline (Set_Lit_Strings);
     pragma Inline (Set_Machine_Radix_10);
*************** package Einfo is
*** 6451,6462 ****
--- 6594,6607 ----
     pragma Inline (Set_Materialize_Entity);
     pragma Inline (Set_Mechanism);
     pragma Inline (Set_Modulus);
+    pragma Inline (Set_Must_Be_On_Byte_Boundary);
     pragma Inline (Set_Needs_Debug_Info);
     pragma Inline (Set_Needs_No_Actuals);
     pragma Inline (Set_Never_Set_In_Source);
     pragma Inline (Set_Next_Inlined_Subprogram);
     pragma Inline (Set_No_Pool_Assigned);
     pragma Inline (Set_No_Return);
+    pragma Inline (Set_No_Strict_Aliasing);
     pragma Inline (Set_Non_Binary_Modulus);
     pragma Inline (Set_Non_Limited_View);
     pragma Inline (Set_Nonzero_Is_True);
*************** package Einfo is
*** 6464,6469 ****
--- 6609,6616 ----
     pragma Inline (Set_Normalized_Position);
     pragma Inline (Set_Normalized_Position_Max);
     pragma Inline (Set_Object_Ref);
+    pragma Inline (Set_Obsolescent_Warning);
+    pragma Inline (Set_Original_Access_Type);
     pragma Inline (Set_Original_Array_Type);
     pragma Inline (Set_Original_Record_Component);
     pragma Inline (Set_Packed_Array_Type);
diff -Nrcpad gcc-3.4.3/gcc/ada/elists.adb gcc-4.0.0/gcc/ada/elists.adb
*** gcc-3.4.3/gcc/ada/elists.adb	Thu Apr 24 17:53:59 2003
--- gcc-4.0.0/gcc/ada/elists.adb	Tue Jul  6 13:57:30 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2001 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Elists is
*** 79,87 ****
     --  is the last item in the list. The Node field points to the node which
     --  is referenced by the corresponding list entry.
  
!    --------------------------
!    --  Element List Tables --
!    --------------------------
  
     type Elist_Header is record
        First : Elmt_Id;
--- 79,87 ----
     --  is the last item in the list. The Node field points to the node which
     --  is referenced by the corresponding list entry.
  
!    -------------------------
!    -- Element List Tables --
!    -------------------------
  
     type Elist_Header is record
        First : Elmt_Id;
diff -Nrcpad gcc-3.4.3/gcc/ada/elists.ads gcc-4.0.0/gcc/ada/elists.ads
*** gcc-3.4.3/gcc/ada/elists.ads	Thu Apr 24 17:53:59 2003
--- gcc-4.0.0/gcc/ada/elists.ads	Mon Jan  3 15:43:23 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-1998 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Elists is
*** 63,74 ****
     --  Lock tables used for element lists before calling backend
  
     procedure Tree_Read;
!    --  Initializes internal tables from current tree file using Tree_Read.
!    --  Note that Initialize should not be called if Tree_Read is used.
!    --  Tree_Read includes all necessary initialization.
  
     procedure Tree_Write;
!    --  Writes out internal tables to current tree file using Tree_Write
  
     function Last_Elist_Id return Elist_Id;
     --  Returns Id of last allocated element list header
--- 63,75 ----
     --  Lock tables used for element lists before calling backend
  
     procedure Tree_Read;
!    --  Initializes internal tables from current tree file using the relevant
!    --  Table.Tree_Read routines. Note that Initialize should not be called if
!    --  Tree_Read is used. Tree_Read includes all necessary initialization.
  
     procedure Tree_Write;
!    --  Writes out internal tables to current tree file using the relevant
!    --  Table.Tree_Write routines.
  
     function Last_Elist_Id return Elist_Id;
     --  Returns Id of last allocated element list header
diff -Nrcpad gcc-3.4.3/gcc/ada/errno.c gcc-4.0.0/gcc/ada/errno.c
*** gcc-3.4.3/gcc/ada/errno.c	Tue Nov  4 12:51:45 2003
--- gcc-4.0.0/gcc/ada/errno.c	Mon Feb  9 10:44:12 2004
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *           Copyright (C) 1992-2003 Free Software Foundation, Inc.         *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *           Copyright (C) 1992-2004 Free Software Foundation, Inc.         *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
***************
*** 39,44 ****
--- 39,45 ----
  
  #define _REENTRANT
  #define _THREAD_SAFE
+ #define _SGI_MP_SOURCE
  
  #include <errno.h>
  int
diff -Nrcpad gcc-3.4.3/gcc/ada/errout.adb gcc-4.0.0/gcc/ada/errout.adb
*** gcc-3.4.3/gcc/ada/errout.adb	Thu Nov 20 09:53:58 2003
--- gcc-4.0.0/gcc/ada/errout.adb	Thu Feb 10 13:50:48 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Debug;    use Debug;
*** 37,42 ****
--- 37,43 ----
  with Einfo;    use Einfo;
  with Erroutc;  use Erroutc;
  with Fname;    use Fname;
+ with Hostparm; use Hostparm;
  with Lib;      use Lib;
  with Namet;    use Namet;
  with Opt;      use Opt;
*************** package body Errout is
*** 164,173 ****
     --  example, the entity A.B.C.D will output B.C. if N = 2.
  
     function Special_Msg_Delete
!      (Msg  : String;
!       N    : Node_Or_Entity_Id;
!       E    : Node_Or_Entity_Id)
!       return Boolean;
     --  This function is called from Error_Msg_NEL, passing the message Msg,
     --  node N on which the error is to be posted, and the entity or node E
     --  to be used for an & insertion in the message if any. The job of this
--- 165,173 ----
     --  example, the entity A.B.C.D will output B.C. if N = 2.
  
     function Special_Msg_Delete
!      (Msg : String;
!       N   : Node_Or_Entity_Id;
!       E   : Node_Or_Entity_Id) return Boolean;
     --  This function is called from Error_Msg_NEL, passing the message Msg,
     --  node N on which the error is to be posted, and the entity or node E
     --  to be used for an & insertion in the message if any. The job of this
*************** package body Errout is
*** 188,193 ****
--- 188,201 ----
     --  'Class appended to its name (see Add_Class procedure), and is
     --  otherwise unchanged.
  
+    procedure VMS_Convert;
+    --  This procedure has no effect if called when the host is not OpenVMS.
+    --  If the host is indeed OpenVMS, then the error message stored in
+    --  Msg_Buffer is scanned for appearences of switch names which need
+    --  converting to corresponding VMS qualifer names. See Gnames/Vnames
+    --  table in Errout spec for precise definition of the conversion that
+    --  is performed by this routine in OpenVMS mode.
+ 
     -----------------------
     -- Change_Error_Text --
     -----------------------
*************** package body Errout is
*** 593,644 ****
     -----------------
  
     procedure Error_Msg_F (Msg : String; N : Node_Id) is
-       SI : constant Source_File_Index := Source_Index (Get_Source_Unit (N));
-       SF : constant Source_Ptr        := Source_First (SI);
-       F  : Node_Id;
-       S  : Source_Ptr;
- 
     begin
!       F := First_Node (N);
!       S := Sloc (F);
! 
!       --  The following circuit is a bit subtle. When we have parenthesized
!       --  expressions, then the Sloc will not record the location of the
!       --  paren, but we would like to post the flag on the paren. So what
!       --  we do is to crawl up the tree from the First_Node, adjusting the
!       --  Sloc value for any parentheses we know are present. Yes, we know
!       --  this circuit is not 100% reliable (e.g. because we don't record
!       --  all possible paren level valoues), but this is only for an error
!       --  message so it is good enough.
! 
!       Node_Loop : loop
!          Paren_Loop : for J in 1 .. Paren_Count (F) loop
! 
!             --  We don't look more than 12 characters behind the current
!             --  location, and in any case not past the front of the source.
! 
!             Search_Loop : for K in 1 .. 12 loop
!                exit Search_Loop when S = SF;
! 
!                if Source_Text (SI) (S - 1) = '(' then
!                   S := S - 1;
!                   exit Search_Loop;
! 
!                elsif Source_Text (SI) (S - 1) <= ' ' then
!                   S := S - 1;
! 
!                else
!                   exit Search_Loop;
!                end if;
!             end loop Search_Loop;
!          end loop Paren_Loop;
! 
!          exit Node_Loop when F = N;
!          F := Parent (F);
!          exit Node_Loop when Nkind (F) not in N_Subexpr;
!       end loop Node_Loop;
! 
!       Error_Msg_NEL (Msg, N, N, S);
     end Error_Msg_F;
  
     ------------------
--- 601,608 ----
     -----------------
  
     procedure Error_Msg_F (Msg : String; N : Node_Id) is
     begin
!       Error_Msg_NEL (Msg, N, N, First_Sloc (N));
     end Error_Msg_F;
  
     ------------------
*************** package body Errout is
*** 1126,1132 ****
        --  Source_Reference. This ensures outputting the proper name of
        --  the source file in this situation.
  
!       if Num_SRef_Pragmas (Main_Source_File) /= 0 then
           Current_Error_Source_File := No_Source_File;
        end if;
  
--- 1090,1098 ----
        --  Source_Reference. This ensures outputting the proper name of
        --  the source file in this situation.
  
!       if Main_Source_File = No_Source_File or else
!         Num_SRef_Pragmas (Main_Source_File) /= 0
!       then
           Current_Error_Source_File := No_Source_File;
        end if;
  
*************** package body Errout is
*** 1382,1387 ****
--- 1348,1405 ----
        return Earliest;
     end First_Node;
  
+    ----------------
+    -- First_Sloc --
+    ----------------
+ 
+    function First_Sloc (N : Node_Id) return Source_Ptr is
+       SI : constant Source_File_Index := Source_Index (Get_Source_Unit (N));
+       SF : constant Source_Ptr        := Source_First (SI);
+       F  : Node_Id;
+       S  : Source_Ptr;
+ 
+    begin
+       F := First_Node (N);
+       S := Sloc (F);
+ 
+       --  The following circuit is a bit subtle. When we have parenthesized
+       --  expressions, then the Sloc will not record the location of the
+       --  paren, but we would like to post the flag on the paren. So what
+       --  we do is to crawl up the tree from the First_Node, adjusting the
+       --  Sloc value for any parentheses we know are present. Yes, we know
+       --  this circuit is not 100% reliable (e.g. because we don't record
+       --  all possible paren level valoues), but this is only for an error
+       --  message so it is good enough.
+ 
+       Node_Loop : loop
+          Paren_Loop : for J in 1 .. Paren_Count (F) loop
+ 
+             --  We don't look more than 12 characters behind the current
+             --  location, and in any case not past the front of the source.
+ 
+             Search_Loop : for K in 1 .. 12 loop
+                exit Search_Loop when S = SF;
+ 
+                if Source_Text (SI) (S - 1) = '(' then
+                   S := S - 1;
+                   exit Search_Loop;
+ 
+                elsif Source_Text (SI) (S - 1) <= ' ' then
+                   S := S - 1;
+ 
+                else
+                   exit Search_Loop;
+                end if;
+             end loop Search_Loop;
+          end loop Paren_Loop;
+ 
+          exit Node_Loop when F = N;
+          F := Parent (F);
+          exit Node_Loop when Nkind (F) not in N_Subexpr;
+       end loop Node_Loop;
+ 
+       return S;
+    end First_Sloc;
  
     ----------------
     -- Initialize --
*************** package body Errout is
*** 1795,1800 ****
--- 1813,1820 ----
     ----------------------------
  
     procedure Set_Msg_Insertion_Node is
+       K : Node_Kind;
+ 
     begin
        Suppress_Message :=
          Error_Msg_Node_1 = Error
*************** package body Errout is
*** 1815,1825 ****
        else
           Set_Msg_Blank_Conditional;
  
!          --  Skip quotes for operator case
  
!          if Nkind (Error_Msg_Node_1) in N_Op then
              Set_Msg_Node (Error_Msg_Node_1);
  
           else
              Set_Msg_Quote;
              Set_Qualification (Error_Msg_Qual_Level, Error_Msg_Node_1);
--- 1835,1859 ----
        else
           Set_Msg_Blank_Conditional;
  
!          --  Output name
  
!          K := Nkind (Error_Msg_Node_1);
! 
!          --  If we have operator case, skip quotes since name of operator
!          --  itself will supply the required quotations. An operator can be
!          --  an applied use in an expression or an explicit operator symbol,
!          --  or an identifier whose name indicates it is an operator.
! 
!          if K in N_Op
!            or else K = N_Operator_Symbol
!            or else K = N_Defining_Operator_Symbol
!            or else ((K = N_Identifier or else K = N_Defining_Identifier)
!                        and then Is_Operator_Name (Chars (Error_Msg_Node_1)))
!          then
              Set_Msg_Node (Error_Msg_Node_1);
  
+          --  Normal case, not an operator, surround with quotes
+ 
           else
              Set_Msg_Quote;
              Set_Qualification (Error_Msg_Qual_Level, Error_Msg_Node_1);
*************** package body Errout is
*** 2243,2248 ****
--- 2277,2284 ----
                 Set_Msg_Char (C);
           end case;
        end loop;
+ 
+       VMS_Convert;
     end Set_Msg_Text;
  
     ----------------
*************** package body Errout is
*** 2302,2311 ****
     ------------------------
  
     function Special_Msg_Delete
!      (Msg  : String;
!       N    : Node_Or_Entity_Id;
!       E    : Node_Or_Entity_Id)
!       return Boolean
     is
     begin
        --  Never delete messages in -gnatdO mode
--- 2338,2346 ----
     ------------------------
  
     function Special_Msg_Delete
!      (Msg : String;
!       N   : Node_Or_Entity_Id;
!       E   : Node_Or_Entity_Id) return Boolean
     is
     begin
        --  Never delete messages in -gnatdO mode
*************** package body Errout is
*** 2471,2474 ****
--- 2506,2558 ----
        end if;
     end Unwind_Internal_Type;
  
+    -----------------
+    -- VMS_Convert --
+    -----------------
+ 
+    procedure VMS_Convert is
+       P : Natural;
+       L : Natural;
+       N : Natural;
+ 
+    begin
+       if not OpenVMS then
+          return;
+       end if;
+ 
+       P := Msg_Buffer'First;
+       loop
+          if P >= Msglen then
+             return;
+          end if;
+ 
+          if Msg_Buffer (P) = '-' then
+             for G in Gnames'Range loop
+                L := Gnames (G)'Length;
+ 
+                --  See if we have "-ggg switch", where ggg is Gnames entry
+ 
+                if P + L + 7 <= Msglen
+                  and then Msg_Buffer (P + 1 .. P + L) = Gnames (G).all
+                  and then Msg_Buffer (P + L + 1 .. P + L + 7) = " switch"
+                then
+                   --  Replace by "/vvv qualifier", where vvv is Vnames entry
+ 
+                   N := Vnames (G)'Length;
+                   Msg_Buffer (P + N + 11 .. Msglen + N - L + 3) :=
+                     Msg_Buffer (P + L + 8 .. Msglen);
+                   Msg_Buffer (P) := '/';
+                   Msg_Buffer (P + 1 .. P + N) := Vnames (G).all;
+                   Msg_Buffer (P + N + 1 .. P + N + 10) := " qualifier";
+                   P := P + N + 10;
+                   Msglen := Msglen + N - L + 3;
+                   exit;
+                end if;
+             end loop;
+          end if;
+ 
+          P := P + 1;
+       end loop;
+    end VMS_Convert;
+ 
  end Errout;
diff -Nrcpad gcc-3.4.3/gcc/ada/errout.ads gcc-4.0.0/gcc/ada/errout.ads
*** gcc-3.4.3/gcc/ada/errout.ads	Tue Oct 21 13:41:59 2003
--- gcc-4.0.0/gcc/ada/errout.ads	Mon Jan  3 15:43:23 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 24,33 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This package contains the routines to output error messages. They
! --  are basically system independent, however in some environments, e.g.
! --  when the parser is embedded into an editor, it may be appropriate
! --  to replace the implementation of this package.
  
  with Err_Vars;
  with Erroutc;
--- 24,33 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This package contains the routines to output error messages. They are
! --  basically system independent, however in some environments, e.g. when the
! --  parser is embedded into an editor, it may be appropriate to replace the
! --  implementation of this package.
  
  with Err_Vars;
  with Erroutc;
*************** package Errout is
*** 41,53 ****
  
     Serious_Errors_Detected : Nat renames Err_Vars.Serious_Errors_Detected;
     --  This is a count of errors that are serious enough to stop expansion,
!    --  and hence to prevent generation of an object file even if the
!    --  switch -gnatQ is set.
  
     Total_Errors_Detected : Nat renames Err_Vars.Total_Errors_Detected;
!    --  Number of errors detected so far. Includes count of serious errors
!    --  and non-serious errors, so this value is always greater than or
!    --  equal to the Serious_Errors_Detected value.
  
     Warnings_Detected : Nat renames Err_Vars.Warnings_Detected;
     --  Number of warnings detected
--- 41,53 ----
  
     Serious_Errors_Detected : Nat renames Err_Vars.Serious_Errors_Detected;
     --  This is a count of errors that are serious enough to stop expansion,
!    --  and hence to prevent generation of an object file even if the switch
!    --  -gnatQ is set.
  
     Total_Errors_Detected : Nat renames Err_Vars.Total_Errors_Detected;
!    --  Number of errors detected so far. Includes count of serious errors and
!    --  non-serious errors, so this value is always greater than or equal to
!    --  the Serious_Errors_Detected value.
  
     Warnings_Detected : Nat renames Err_Vars.Warnings_Detected;
     --  Number of warnings detected
*************** package Errout is
*** 56,87 ****
     --  Count of configurable run time violations so far. This is used to
     --  suppress certain cascaded error messages when we know that we may not
     --  have fully expanded some items, due to high integrity violations (i.e.
!    --  the use of constructs not permitted by the library in use, or
!    --  improper constructs in No_Run_Time mode).
  
     type Compiler_State_Type is (Parsing, Analyzing);
     Compiler_State : Compiler_State_Type;
!    --  Indicates current state of compilation. This is put in the Errout
!    --  spec because it affects the action of the error message handling.
!    --  In particular, an attempt is made by Errout to suppress cascaded
!    --  error messages in Parsing mode, but not in the other modes.
  
     Current_Error_Source_File : Source_File_Index
       renames Err_Vars.Current_Error_Source_File;
     --  Id of current messages. Used to post file name when unit changes. This
     --  is initialized to Main_Source_File at the start of a compilation, which
!    --  means that no file names will be output unless there are errors in units
!    --  other than the main unit. However, if the main unit has a pragma
!    --  Source_Reference line, then this is initialized to No_Source_File,
!    --  to force an initial reference to the real source file name.
  
     Raise_Exception_On_Error : Nat renames Err_Vars.Raise_Exception_On_Error;
     --  If this value is non-zero, then any attempt to generate an error
!    --  message raises the exception Error_Msg_Exception, and the error
!    --  message is not output. This is used for defending against junk
!    --  resulting from illegalities, and also for substitution of more
!    --  appropriate error messages from higher semantic levels. It is
!    --  a counter so that the increment/decrement protocol nests neatly.
  
     Error_Msg_Exception : exception renames Err_Vars.Error_Msg_Exception;
     --  Exception raised if Raise_Exception_On_Error is true
--- 56,87 ----
     --  Count of configurable run time violations so far. This is used to
     --  suppress certain cascaded error messages when we know that we may not
     --  have fully expanded some items, due to high integrity violations (i.e.
!    --  the use of constructs not permitted by the library in use, or improper
!    --  constructs in No_Run_Time mode).
  
     type Compiler_State_Type is (Parsing, Analyzing);
     Compiler_State : Compiler_State_Type;
!    --  Indicates current state of compilation. This is put in the Errout spec
!    --  because it affects the action of the error message handling. In
!    --  particular, an attempt is made by Errout to suppress cascaded error
!    --  messages in Parsing mode, but not in the other modes.
  
     Current_Error_Source_File : Source_File_Index
       renames Err_Vars.Current_Error_Source_File;
     --  Id of current messages. Used to post file name when unit changes. This
     --  is initialized to Main_Source_File at the start of a compilation, which
!    --  means that no file names will be output unless there are errors in
!    --  units other than the main unit. However, if the main unit has a pragma
!    --  Source_Reference line, then this is initialized to No_Source_File, to
!    --  force an initial reference to the real source file name.
  
     Raise_Exception_On_Error : Nat renames Err_Vars.Raise_Exception_On_Error;
     --  If this value is non-zero, then any attempt to generate an error
!    --  message raises the exception Error_Msg_Exception, and the error message
!    --  is not output. This is used for defending against junk resulting from
!    --  illegalities, and also for substitution of more appropriate error
!    --  messages from higher semantic levels. It is a counter so that the
!    --  increment/decrement protocol nests neatly.
  
     Error_Msg_Exception : exception renames Err_Vars.Error_Msg_Exception;
     --  Exception raised if Raise_Exception_On_Error is true
*************** package Errout is
*** 135,184 ****
  
     --    Insertion character % (Percent: insert name from Names table)
     --      The character % is replaced by the text for the name specified by
!    --      the Name_Id value stored in Error_Msg_Name_1. A blank precedes
!    --      the name if it is preceded by a non-blank character other than a
!    --      left parenthesis. The name is enclosed in quotes unless manual
!    --      quotation mode is set. If the Name_Id is set to No_Name, then
!    --      no insertion occurs; if the Name_Id is set to Error_Name, then
!    --      the string <error> is inserted. A second and third % may appear
!    --      in a single message, similarly replaced by the names which are
!    --      specified by the Name_Id values stored in Error_Msg_Name_2 and
!    --      Error_Msg_Name_3. The names are decoded and cased according to
!    --      the current identifier casing mode.
  
     --    Insertion character $ (Dollar: insert unit name from Names table)
!    --      The character $ is treated similarly to %, except that the name
!    --      is obtained from the Unit_Name_Type value in Error_Msg_Unit_1
!    --      and Error_Msg_Unit_2, as provided by Get_Unit_Name_String in
!    --      package Uname. Note that this name includes the postfix (spec)
!    --      or (body) strings. If this postfix is not required, use the
!    --      normal % insertion for the unit name.
  
     --    Insertion character { (Left brace: insert literally from names table)
!    --      The character { is treated similarly to %, except that the
!    --      name is output literally as stored in the names table without
!    --      adjusting the casing. This can be used for file names and in
!    --      other situations where the name string is to be output unchanged.
  
     --    Insertion character * (Asterisk, insert reserved word name)
!    --      The insertion character * is treated exactly like % except that
!    --      the resulting name is cased according to the default conventions
!    --      for reserved words (see package Scans).
  
     --    Insertion character & (Ampersand: insert name from node)
     --      The insertion character & is treated similarly to %, except that
     --      the name is taken from the Chars field of the given node, and may
!    --      refer to a child unit name, or a selected component. The casing
!    --      is, if possible, taken from the original source reference, which
!    --      is obtained from the Sloc field of the given node or nodes. If no
!    --      Sloc is available (happens e.g. for nodes in package Standard),
!    --      then the default case (see Scans spec) is used. The nodes to be
!    --      used are stored in Error_Msg_Node_1, Error_Msg_Node_2. No insertion
!    --      occurs for the Empty node, and the Error node results in the
!    --      insertion of the characters <error>. In addition, if the special
!    --      global variable Error_Msg_Qual_Level is non-zero, then the
!    --      reference will include up to the given number of levels of
!    --      qualification, using the scope chain.
  
     --    Insertion character # (Pound: insert line number reference)
     --      The character # is replaced by the string indicating the source
--- 135,184 ----
  
     --    Insertion character % (Percent: insert name from Names table)
     --      The character % is replaced by the text for the name specified by
!    --      the Name_Id value stored in Error_Msg_Name_1. A blank precedes the
!    --      name if it is preceded by a non-blank character other than left
!    --      parenthesis. The name is enclosed in quotes unless manual quotation
!    --      mode is set. If the Name_Id is set to No_Name, then no insertion
!    --      occurs; if the Name_Id is set to Error_Name, then the string
!    --      <error> is inserted. A second and third % may appear in a single
!    --      message, similarly replaced by the names which are specified by the
!    --      Name_Id values stored in Error_Msg_Name_2 and Error_Msg_Name_3. The
!    --      names are decoded and cased according to the current identifier
!    --      casing mode.
  
     --    Insertion character $ (Dollar: insert unit name from Names table)
!    --      The character $ is treated similarly to %, except that the name is
!    --      obtained from the Unit_Name_Type value in Error_Msg_Unit_1 and
!    --      Error_Msg_Unit_2, as provided by Get_Unit_Name_String in package
!    --      Uname. Note that this name includes the postfix (spec) or (body)
!    --      strings. If this postfix is not required, use the normal %
!    --      insertion for the unit name.
  
     --    Insertion character { (Left brace: insert literally from names table)
!    --      The character { is treated similarly to %, except that the name is
!    --      output literally as stored in the names table without adjusting the
!    --      casing. This can be used for file names and in other situations
!    --      where the name string is to be output unchanged.
  
     --    Insertion character * (Asterisk, insert reserved word name)
!    --      The insertion character * is treated exactly like % except that the
!    --      resulting name is cased according to the default conventions for
!    --      reserved words (see package Scans).
  
     --    Insertion character & (Ampersand: insert name from node)
     --      The insertion character & is treated similarly to %, except that
     --      the name is taken from the Chars field of the given node, and may
!    --      refer to a child unit name, or a selected component. The casing is,
!    --      if possible, taken from the original source reference, which is
!    --      obtained from the Sloc field of the given node or nodes. If no Sloc
!    --      is available (happens e.g. for nodes in package Standard), then the
!    --      default case (see Scans spec) is used. The nodes to be used are
!    --      stored in Error_Msg_Node_1, Error_Msg_Node_2. No insertion occurs
!    --      for the Empty node, and the Error node results in the insertion of
!    --      the characters <error>. In addition, if the special global variable
!    --      Error_Msg_Qual_Level is non-zero, then the reference will include
!    --      up to the given number of levels of qualification, using the scope
!    --      chain.
  
     --    Insertion character # (Pound: insert line number reference)
     --      The character # is replaced by the string indicating the source
*************** package Errout is
*** 188,215 ****
     --        for locations in current file:  at line nnn:ccc
     --        for locations in other files:   at filename:nnn:ccc
     --
!    --      By convention, the # insertion character is only used at the end
!    --      of an error message, so the above strings only appear as the last
     --      characters of an error message.
  
     --    Insertion character } (Right brace: insert type reference)
     --      The character } is replaced by a string describing the type
     --      referenced by the entity whose Id is stored in Error_Msg_Node_1.
     --      the string gives the name or description of the type, and also
!    --      where appropriate the location of its declaration. Special
!    --      cases like "some integer type" are handled appropriately. Only
!    --      one } is allowed in a message, since there is not enough room
!    --      for two (the insertion can be quite long, including a file name)
!    --      In addition, if the special global variable Error_Msg_Qual_Level
!    --      is non-zero, then the reference will include up to the given
!    --      number of levels of qualification, using the scope chain.
  
     --    Insertion character @ (At: insert column number reference)
     --      The character @ is replaced by null if the RM_Column_Check mode is
     --      off (False). If the switch is on (True), then @ is replaced by the
!    --      text string " in column nnn" where nnn is the decimal representation
!    --      of the column number stored in Error_Msg_Col plus one (the plus one
!    --      is because the number is stored 0-origin and displayed 1-origin).
  
     --    Insertion character ^ (Carret: insert integer value)
     --      The character ^ is replaced by the decimal conversion of the Uint
--- 188,216 ----
     --        for locations in current file:  at line nnn:ccc
     --        for locations in other files:   at filename:nnn:ccc
     --
!    --      By convention, the # insertion character is only used at the end of
!    --      an error message, so the above strings only appear as the last
     --      characters of an error message.
  
     --    Insertion character } (Right brace: insert type reference)
     --      The character } is replaced by a string describing the type
     --      referenced by the entity whose Id is stored in Error_Msg_Node_1.
     --      the string gives the name or description of the type, and also
!    --      where appropriate the location of its declaration. Special cases
!    --      like "some integer type" are handled appropriately. Only one } is
!    --      allowed in a message, since there is not enough room for two (the
!    --      insertion can be quite long, including a file name) In addition, if
!    --      the special global variable Error_Msg_Qual_Level is non-zero, then
!    --      the reference will include up to the given number of levels of
!    --      qualification, using the scope chain.
  
     --    Insertion character @ (At: insert column number reference)
     --      The character @ is replaced by null if the RM_Column_Check mode is
     --      off (False). If the switch is on (True), then @ is replaced by the
!    --      text string " in column nnn" where nnn is the decimal
!    --      representation of the column number stored in Error_Msg_Col plus
!    --      one (the plus one is because the number is stored 0-origin and
!    --      displayed 1-origin).
  
     --    Insertion character ^ (Carret: insert integer value)
     --      The character ^ is replaced by the decimal conversion of the Uint
*************** package Errout is
*** 235,246 ****
     --      a warning instead of a normal error message, and the text of the
     --      message will be preceded by "Warning:" instead of "Error:" The
     --      handling of warnings if further controlled by the Warning_Mode
!    --      option (-w switch), see package Opt for further details, and
!    --      also by the current setting from pragma Warnings. This pragma
!    --      applies only to warnings issued from the semantic phase (not
!    --      the parser), but currently all relevant warnings are posted
!    --      by the semantic phase anyway. Messages starting with (style)
!    --      are also treated as warning messages.
  
     --    Insertion character A-Z (Upper case letter: Ada reserved word)
     --      If two or more upper case letters appear in the message, they are
--- 236,247 ----
     --      a warning instead of a normal error message, and the text of the
     --      message will be preceded by "Warning:" instead of "Error:" The
     --      handling of warnings if further controlled by the Warning_Mode
!    --      option (-w switch), see package Opt for further details, and also
!    --      by the current setting from pragma Warnings. This pragma applies
!    --      only to warnings issued from the semantic phase (not the parser),
!    --      but currently all relevant warnings are posted by the semantic
!    --      phase anyway. Messages starting with (style) are also treated as
!    --      warning messages.
  
     --    Insertion character A-Z (Upper case letter: Ada reserved word)
     --      If two or more upper case letters appear in the message, they are
*************** package Errout is
*** 249,258 ****
     --      quotes are added unless manual quotation mode is currently set.
  
     --    Insertion character ` (Backquote: set manual quotation mode)
!    --      The backquote character always appears in pairs. Each backquote
!    --      of the pair is replaced by a double quote character. In addition,
!    --      Any reserved keywords, or name insertions between these backquotes
!    --      are not surrounded by the usual automatic double quotes. See the
     --      section below on manual quotation mode for further details.
  
     --    Insertion character ' (Quote: literal character)
--- 250,259 ----
     --      quotes are added unless manual quotation mode is currently set.
  
     --    Insertion character ` (Backquote: set manual quotation mode)
!    --      The backquote character always appears in pairs. Each backquote of
!    --      the pair is replaced by a double quote character. In addition, Any
!    --      reserved keywords, or name insertions between these backquotes are
!    --      not surrounded by the usual automatic double quotes. See the
     --      section below on manual quotation mode for further details.
  
     --    Insertion character ' (Quote: literal character)
*************** package Errout is
*** 264,280 ****
  
     --    Insertion character \ (Backslash: continuation message)
     --      Indicates that the message is a continuation of a message
!    --      previously posted. This is used to ensure that such groups
!    --      of messages are treated as a unit. The \ character must be
!    --      the first character of the message text.
  
     --    Insertion character | (vertical bar, non-serious error)
     --      By default, error messages (other than warning messages) are
!    --      considered to be fatal error messages which prevent expansion
!    --      or generation of code in the presence of the -gnatQ switch.
!    --      If the insertion character | appears, the message is considered
!    --      to be non-serious, and does not cause Serious_Errors_Detected
!    --      to be incremented (so expansion is not prevented by such a msg).
  
     -----------------------------------------------------
     -- Global Values Used for Error Message Insertions --
--- 265,323 ----
  
     --    Insertion character \ (Backslash: continuation message)
     --      Indicates that the message is a continuation of a message
!    --      previously posted. This is used to ensure that such groups of
!    --      messages are treated as a unit. The \ character must be the first
!    --      character of the message text.
  
     --    Insertion character | (vertical bar, non-serious error)
     --      By default, error messages (other than warning messages) are
!    --      considered to be fatal error messages which prevent expansion or
!    --      generation of code in the presence of the -gnatQ switch. If the
!    --      insertion character | appears, the message is considered to be
!    --      non-serious, and does not cause Serious_Errors_Detected to be
!    --      incremented (so expansion is not prevented by such a msg).
! 
!    ----------------------------------------
!    -- Specialization of Messages for VMS --
!    ----------------------------------------
! 
!    --  Some messages mention gcc-style switch names. When using an OpenVMS
!    --  host, such switch names must be converted to their corresponding VMS
!    --  qualifer. The following table controls this translation. In each case
!    --  the original message must contain the string "-xxx switch", where xxx
!    --  is the Gname? entry from below, and this string will be replaced by
!    --  "/yyy qualifier", where yyy is the corresponding Vname? entry.
! 
!    Gname1 : aliased constant String := "fno-strict-aliasing";
!    Vname1 : aliased constant String := "OPTIMIZE=NO_STRICT_ALIASING";
! 
!    Gname2 : aliased constant String := "gnatX";
!    Vname2 : aliased constant String := "EXTENSIONS_ALLOWED";
! 
!    Gname3 : aliased constant String := "gnatW";
!    Vname3 : aliased constant String := "WIDE_CHARACTER_ENCODING";
! 
!    Gname4 : aliased constant String := "gnatf";
!    Vname4 : aliased constant String := "REPORT_ERRORS=FULL";
! 
!    Gname5 : aliased constant String := "gnat05";
!    Vname5 : aliased constant String := "05";
! 
!    type Cstring_Ptr is access constant String;
! 
!    Gnames : array (Nat range <>) of Cstring_Ptr :=
!               (Gname1'Access,
!                Gname2'Access,
!                Gname3'Access,
!                Gname4'Access,
!                Gname5'Access);
! 
!    Vnames : array (Nat range <>) of Cstring_Ptr :=
!               (Vname1'Access,
!                Vname2'Access,
!                Vname3'Access,
!                Vname4'Access,
!                Vname5'Access);
  
     -----------------------------------------------------
     -- Global Values Used for Error Message Insertions --
*************** package Errout is
*** 416,426 ****
        Ploc : Source_Ptr;
     end record;
  
!    --  Note: Ploc points to the terminating semicolon in the List_Off and
!    --  Page cases, and to the pragma keyword for List_On. In the case of
!    --  a pragma List_Off, a List_On entry is also made in the table,
!    --  pointing to the pragma keyword. This ensures that, as required,
!    --  a List (Off) pragma is listed even in list off mode.
  
     package List_Pragmas is new Table.Table (
       Table_Component_Type => List_Pragma_Record,
--- 459,469 ----
        Ploc : Source_Ptr;
     end record;
  
!    --  Note: Ploc points to the terminating semicolon in the List_Off and Page
!    --  cases, and to the pragma keyword for List_On. In the case of a pragma
!    --  List_Off, a List_On entry is also made in the table, pointing to the
!    --  pragma keyword. This ensures that, as required, a List (Off) pragma is
!    --  listed even in list off mode.
  
     package List_Pragmas is new Table.Table (
       Table_Component_Type => List_Pragma_Record,
*************** package Errout is
*** 487,499 ****
  
     procedure Error_Msg_N (Msg : String; N : Node_Or_Entity_Id);
     --  Output a message at the Sloc of the given node. This routine can be
!    --  called from the parser or the semantic analyzer, although the call
!    --  from the latter is much more common (and is the most usual way of
!    --  generating error messages from the analyzer). The message text may
!    --  contain a single & insertion, which will reference the given node.
!    --  The message is suppressed if the node N already has a message posted,
!    --  or if it is a warning and warnings and N is an entity node for which
!    --  warnings are suppressed.
  
     procedure Error_Msg_F (Msg : String; N : Node_Id);
     --  Similar to Error_Msg_N except that the message is placed on the
--- 530,542 ----
  
     procedure Error_Msg_N (Msg : String; N : Node_Or_Entity_Id);
     --  Output a message at the Sloc of the given node. This routine can be
!    --  called from the parser or the semantic analyzer, although the call from
!    --  the latter is much more common (and is the most usual way of generating
!    --  error messages from the analyzer). The message text may contain a
!    --  single & insertion, which will reference the given node. The message is
!    --  suppressed if the node N already has a message posted, or if it is a
!    --  warning and warnings and N is an entity node for which warnings are
!    --  suppressed.
  
     procedure Error_Msg_F (Msg : String; N : Node_Id);
     --  Similar to Error_Msg_N except that the message is placed on the
*************** package Errout is
*** 505,513 ****
        E   : Node_Or_Entity_Id);
     --  Output a message at the Sloc of the given node N, with an insertion of
     --  the name from the given entity node E. This is used by the semantic
!    --  routines, where this is a common error message situation. The Msg
!    --  text will contain a & or } as usual to mark the insertion point.
!    --  This routine can be called from the parser or the analyzer.
  
     procedure Error_Msg_FE
       (Msg : String;
--- 548,556 ----
        E   : Node_Or_Entity_Id);
     --  Output a message at the Sloc of the given node N, with an insertion of
     --  the name from the given entity node E. This is used by the semantic
!    --  routines, where this is a common error message situation. The Msg text
!    --  will contain a & or } as usual to mark the insertion point. This
!    --  routine can be called from the parser or the analyzer.
  
     procedure Error_Msg_FE
       (Msg : String;
*************** package Errout is
*** 542,547 ****
--- 585,596 ----
     --  Given a construct C, finds the first node in the construct, i.e. the
     --  one with the lowest Sloc value. This is useful in placing error msgs.
  
+    function First_Sloc (N : Node_Id) return Source_Ptr;
+    --  Given the node for an expression, return a source pointer value that
+    --  points to the start of the first token in the expression. In the case
+    --  where the expression is parenthesized, an attempt is made to include
+    --  the parentheses (i.e. to return the location of the initial paren).
+ 
     procedure Purge_Messages (From : Source_Ptr; To : Source_Ptr)
       renames Erroutc.Purge_Messages;
     --  All error messages whose location is in the range From .. To (not
*************** package Errout is
*** 575,584 ****
     --  (treat warnings as errors) mode.
  
     procedure Error_Msg_CRT (Feature : String; N : Node_Id);
!    --  Posts a non-fatal message on node N saying that the feature
!    --  identified by the Feature argument is not supported in either
!    --  configurable run-time mode or no run-time mode (as appropriate).
!    --  In the former case, the name of the library is output if available.
  
     procedure dmsg (Id : Error_Msg_Id) renames Erroutc.dmsg;
     --  Debugging routine to dump an error message
--- 624,633 ----
     --  (treat warnings as errors) mode.
  
     procedure Error_Msg_CRT (Feature : String; N : Node_Id);
!    --  Posts a non-fatal message on node N saying that the feature identified
!    --  by the Feature argument is not supported in either configurable
!    --  run-time mode or no run-time mode (as appropriate). In the former case,
!    --  the name of the library is output if available.
  
     procedure dmsg (Id : Error_Msg_Id) renames Erroutc.dmsg;
     --  Debugging routine to dump an error message
*************** package Errout is
*** 594,606 ****
     procedure Set_Identifier_Casing
       (Identifier_Name : System.Address;
        File_Name       : System.Address);
!    --  The identifier is a null terminated string that represents the name
!    --  of an identifier appearing in the source program. File_Name is a null
     --  terminated string giving the corresponding file name for the identifier
     --  as obtained from the front end by the use of Full_Debug_Name to the
!    --  source file referenced by the corresponding source location value.
!    --  On return, the name is in Name_Buffer, null terminated with Name_Len
!    --  set. This name is the identifier name as passed, cased according to
!    --  the default identifier casing for the given file.
  
  end Errout;
--- 643,655 ----
     procedure Set_Identifier_Casing
       (Identifier_Name : System.Address;
        File_Name       : System.Address);
!    --  The identifier is a null terminated string that represents the name of
!    --  an identifier appearing in the source program. File_Name is a null
     --  terminated string giving the corresponding file name for the identifier
     --  as obtained from the front end by the use of Full_Debug_Name to the
!    --  source file referenced by the corresponding source location value. On
!    --  return, the name is in Name_Buffer, null terminated with Name_Len set.
!    --  This name is the identifier name as passed, cased according to the
!    --  default identifier casing for the given file.
  
  end Errout;
diff -Nrcpad gcc-3.4.3/gcc/ada/erroutc.adb gcc-4.0.0/gcc/ada/erroutc.adb
*** gcc-3.4.3/gcc/ada/erroutc.adb	Tue Oct 21 13:41:59 2003
--- gcc-4.0.0/gcc/ada/erroutc.adb	Mon May 10 16:18:52 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 33,39 ****
  with Casing;   use Casing;
  with Debug;    use Debug;
  with Err_Vars; use Err_Vars;
- with Hostparm;
  with Namet;    use Namet;
  with Opt;      use Opt;
  with Output;   use Output;
--- 33,38 ----
*************** package body Erroutc is
*** 71,77 ****
  
     function Buffer_Ends_With (S : String) return Boolean is
        Len : constant Natural := S'Length;
- 
     begin
        return
          Msglen > Len
--- 70,75 ----
*************** package body Erroutc is
*** 466,471 ****
--- 464,473 ----
        --  Returns True for a message that is to be purged. Also adjusts
        --  error counts appropriately.
  
+       ------------------
+       -- To_Be_Purged --
+       ------------------
+ 
        function To_Be_Purged (E : Error_Msg_Id) return Boolean is
        begin
           if E /= No_Error_Msg
diff -Nrcpad gcc-3.4.3/gcc/ada/erroutc.ads gcc-4.0.0/gcc/ada/erroutc.ads
*** gcc-3.4.3/gcc/ada/erroutc.ads	Tue Oct 21 13:41:59 2003
--- gcc-4.0.0/gcc/ada/erroutc.ads	Mon May 10 16:18:52 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 27,33 ****
  --  This packages contains global variables and routines common to error
  --  reporting packages, including Errout and Prj.Err.
  
- with Hostparm;
  with Table;
  with Types;  use Types;
  
--- 27,32 ----
*************** package Erroutc is
*** 77,85 ****
     Manual_Quote_Mode : Boolean := False;
     --  Set True in manual quotation mode
  
!    Max_Msg_Length : constant := 80 + 2 * Hostparm.Max_Line_Length;
!    --  Maximum length of error message. The addition of Max_Line_Length
     --  ensures that two insertion tokens of maximum length can be accomodated.
  
     Msg_Buffer : String (1 .. Max_Msg_Length);
     --  Buffer used to prepare error messages
--- 76,87 ----
     Manual_Quote_Mode : Boolean := False;
     --  Set True in manual quotation mode
  
!    Max_Msg_Length : constant := 1024 + 2 * Int (Column_Number'Last);
!    --  Maximum length of error message. The addition of 2 * Column_Number'Last
     --  ensures that two insertion tokens of maximum length can be accomodated.
+    --  The value of 1024 is an arbitrary value that should be more than long
+    --  enough to accomodate any reasonable message (and for that matter, some
+    --  pretty unreasonable messages!)
  
     Msg_Buffer : String (1 .. Max_Msg_Length);
     --  Buffer used to prepare error messages
diff -Nrcpad gcc-3.4.3/gcc/ada/eval_fat.adb gcc-4.0.0/gcc/ada/eval_fat.adb
*** gcc-3.4.3/gcc/ada/eval_fat.adb	Tue Oct 21 13:41:59 2003
--- gcc-4.0.0/gcc/ada/eval_fat.adb	Mon Jan  3 15:36:06 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Eval_Fat is
*** 38,50 ****
     --  case of anyone ever having to adjust this code for another value,
     --  and for documentation purposes.
  
!    type Radix_Power_Table is array (Int range 1 .. 4) of Int;
  
!    Radix_Powers : constant Radix_Power_Table
!      := (Radix**1, Radix**2, Radix**3, Radix**4);
  
!    function Float_Radix return T renames Ureal_2;
!    --  Radix expressed in real form
  
     -----------------------
     -- Local Subprograms --
--- 38,50 ----
     --  case of anyone ever having to adjust this code for another value,
     --  and for documentation purposes.
  
!    --  Another assumption is that the range of the floating-point type
!    --  is symmetric around zero.
  
!    type Radix_Power_Table is array (Int range 1 .. 4) of Int;
  
!    Radix_Powers : constant Radix_Power_Table :=
!                     (Radix ** 1, Radix ** 2, Radix ** 3, Radix ** 4);
  
     -----------------------
     -- Local Subprograms --
*************** package body Eval_Fat is
*** 62,72 ****
     --  The result is rounded to a nearest machine number.
  
     procedure Decompose_Int
!      (RT               : R;
!       X                : in T;
!       Fraction         : out UI;
!       Exponent         : out UI;
!       Mode             : Rounding_Mode);
     --  This is similar to Decompose, except that the Fraction value returned
     --  is an integer representing the value Fraction * Scale, where Scale is
     --  the value (Radix ** Machine_Mantissa (RT)). The value is obtained by
--- 62,72 ----
     --  The result is rounded to a nearest machine number.
  
     procedure Decompose_Int
!      (RT       : R;
!       X        : in T;
!       Fraction : out UI;
!       Exponent : out UI;
!       Mode     : Rounding_Mode);
     --  This is similar to Decompose, except that the Fraction value returned
     --  is an integer representing the value Fraction * Scale, where Scale is
     --  the value (Radix ** Machine_Mantissa (RT)). The value is obtained by
*************** package body Eval_Fat is
*** 74,91 ****
     --  even, a floor operation or a ceiling operation depending on the setting
     --  of Mode (see corresponding descriptions in Urealp).
  
-    function Eps_Model (RT : R) return T;
-    --  Return the smallest model number of R.
- 
-    function Eps_Denorm (RT : R) return T;
-    --  Return the smallest denormal of type R.
- 
     function Machine_Emin (RT : R) return Int;
     --  Return value of the Machine_Emin attribute
  
-    function Machine_Mantissa (RT : R) return Nat;
-    --  Return value of the Machine_Mantissa attribute
- 
     --------------
     -- Adjacent --
     --------------
--- 74,82 ----
*************** package body Eval_Fat is
*** 94,103 ****
     begin
        if Towards = X then
           return X;
- 
        elsif Towards > X then
           return Succ (RT, X);
- 
        else
           return Pred (RT, X);
        end if;
--- 85,92 ----
*************** package body Eval_Fat is
*** 109,122 ****
  
     function Ceiling (RT : R; X : T) return T is
        XT : constant T := Truncation (RT, X);
- 
     begin
        if UR_Is_Negative (X) then
           return XT;
- 
        elsif X = XT then
           return X;
- 
        else
           return XT + Ureal_1;
        end if;
--- 98,108 ----
*************** package body Eval_Fat is
*** 129,135 ****
     function Compose (RT : R; Fraction : T; Exponent : UI) return T is
        Arg_Frac : T;
        Arg_Exp  : UI;
- 
     begin
        if UR_Is_Zero (Fraction) then
           return Fraction;
--- 115,120 ----
*************** package body Eval_Fat is
*** 190,207 ****
     -- Decompose_Int --
     -------------------
  
!    --  This procedure should be modified with care, as there
!    --  are many non-obvious details that may cause problems
!    --  that are hard to detect. The cases of positive and
!    --  negative zeroes are also special and should be
!    --  verified separately.
  
     procedure Decompose_Int
!      (RT               : R;
!       X                : in T;
!       Fraction         : out UI;
!       Exponent         : out UI;
!       Mode             : Rounding_Mode)
     is
        Base : Int := Rbase (X);
        N    : UI  := abs Numerator (X);
--- 175,191 ----
     -- Decompose_Int --
     -------------------
  
!    --  This procedure should be modified with care, as there are many
!    --  non-obvious details that may cause problems that are hard to
!    --  detect. The cases of positive and negative zeroes are also
!    --  special and should be verified separately.
  
     procedure Decompose_Int
!      (RT       : R;
!       X        : in T;
!       Fraction : out UI;
!       Exponent : out UI;
!       Mode     : Rounding_Mode)
     is
        Base : Int := Rbase (X);
        N    : UI  := abs Numerator (X);
*************** package body Eval_Fat is
*** 387,400 ****
        Calculate_Fraction_And_Exponent : begin
           Uintp_Mark := Mark;
  
!          --  Put back sign before applying the rounding.
! 
!          if UR_Is_Negative (X) then
!             Fraction := -Fraction;
!          end if;
! 
!          --  Determine correct rounding based on the remainder
!          --  which is in N and the divisor D.
  
           case Mode is
              when Round_Even =>
--- 371,380 ----
        Calculate_Fraction_And_Exponent : begin
           Uintp_Mark := Mark;
  
!          --  Determine correct rounding based on the remainder which is in
!          --  N and the divisor D. The rounding is performed on the absolute
!          --  value of X, so Ceiling and Floor need to check for the sign of
!          --  X explicitly.
  
           case Mode is
              when Round_Even =>
*************** package body Eval_Fat is
*** 421,431 ****
                 end if;
  
              when Ceiling =>
!                if N > Uint_0 then
                    Fraction := Fraction + 1;
                 end if;
  
!             when Floor   => null;
           end case;
  
           --  The result must be normalized to [1.0/Radix, 1.0),
--- 401,414 ----
                 end if;
  
              when Ceiling =>
!                if N > Uint_0 and then not UR_Is_Negative (X) then
                    Fraction := Fraction + 1;
                 end if;
  
!             when Floor   =>
!                if N > Uint_0 and then UR_Is_Negative (X) then
!                   Fraction := Fraction + 1;
!                end if;
           end case;
  
           --  The result must be normalized to [1.0/Radix, 1.0),
*************** package body Eval_Fat is
*** 436,464 ****
              Exponent := Exponent + 1;
           end if;
  
           Release_And_Save (Uintp_Mark, Fraction, Exponent);
        end Calculate_Fraction_And_Exponent;
     end Decompose_Int;
  
-    ----------------
-    -- Eps_Denorm --
-    ----------------
- 
-    function Eps_Denorm (RT : R) return T is
-    begin
-       return Float_Radix ** UI_From_Int
-                                   (Machine_Emin (RT) - Machine_Mantissa (RT));
-    end Eps_Denorm;
- 
-    ---------------
-    -- Eps_Model --
-    ---------------
- 
-    function Eps_Model (RT : R) return T is
-    begin
-       return Float_Radix ** UI_From_Int (Machine_Emin (RT));
-    end Eps_Model;
- 
     --------------
     -- Exponent --
     --------------
--- 419,434 ----
              Exponent := Exponent + 1;
           end if;
  
+          --  Put back sign after applying the rounding.
+ 
+          if UR_Is_Negative (X) then
+             Fraction := -Fraction;
+          end if;
+ 
           Release_And_Save (Uintp_Mark, Fraction, Exponent);
        end Calculate_Fraction_And_Exponent;
     end Decompose_Int;
  
     --------------
     -- Exponent --
     --------------
*************** package body Eval_Fat is
*** 466,472 ****
     function Exponent (RT : R; X : T) return UI is
        X_Frac : UI;
        X_Exp  : UI;
- 
     begin
        if UR_Is_Zero (X) then
           return Uint_0;
--- 436,441 ----
*************** package body Eval_Fat is
*** 502,508 ****
     function Fraction (RT : R; X : T) return T is
        X_Frac : T;
        X_Exp  : UI;
- 
     begin
        if UR_Is_Zero (X) then
           return X;
--- 471,476 ----
*************** package body Eval_Fat is
*** 517,535 ****
     ------------------
  
     function Leading_Part (RT : R; X : T; Radix_Digits : UI) return T is
!       L    : UI;
!       Y, Z : T;
! 
     begin
!       if Radix_Digits >= Machine_Mantissa (RT) then
!          return X;
! 
!       else
!          L := Exponent (RT, X) - Radix_Digits;
!          Y := Truncation (RT, Scaling (RT, X, -L));
!          Z := Scaling (RT, Y, L);
!          return Z;
!       end if;
     end Leading_Part;
  
     -------------
--- 485,497 ----
     ------------------
  
     function Leading_Part (RT : R; X : T; Radix_Digits : UI) return T is
!       RD : constant UI := UI_Min (Radix_Digits, Machine_Mantissa (RT));
!       L  : UI;
!       Y  : T;
     begin
!       L := Exponent (RT, X) - RD;
!       Y := UR_From_Uint (UR_Trunc (Scaling (RT, X, -L)));
!       return Scaling (RT, Y, L);
     end Leading_Part;
  
     -------------
*************** package body Eval_Fat is
*** 540,550 ****
       (RT    : R;
        X     : T;
        Mode  : Rounding_Mode;
!       Enode : Node_Id)
!       return  T
     is
-       pragma Warnings (Off, Enode); -- not yet referenced
- 
        X_Frac : T;
        X_Exp  : UI;
        Emin   : constant UI := UI_From_Int (Machine_Emin (RT));
--- 502,509 ----
       (RT    : R;
        X     : T;
        Mode  : Rounding_Mode;
!       Enode : Node_Id) return T
     is
        X_Frac : T;
        X_Exp  : UI;
        Emin   : constant UI := UI_From_Int (Machine_Emin (RT));
*************** package body Eval_Fat is
*** 719,724 ****
--- 678,693 ----
        return Mant;
     end Machine_Mantissa;
  
+    -------------------
+    -- Machine_Radix --
+    -------------------
+ 
+    function Machine_Radix (RT : R) return Nat is
+       pragma Warnings (Off, RT);
+    begin
+       return Radix;
+    end Machine_Radix;
+ 
     -----------
     -- Model --
     -----------
*************** package body Eval_Fat is
*** 726,732 ****
     function Model (RT : R; X : T) return T is
        X_Frac : T;
        X_Exp  : UI;
- 
     begin
        Decompose (RT, X, X_Frac, X_Exp);
        return Compose (RT, X_Frac, X_Exp);
--- 695,700 ----
*************** package body Eval_Fat is
*** 737,773 ****
     ----------
  
     function Pred (RT : R; X : T) return T is
-       Result_F : UI;
-       Result_X : UI;
- 
     begin
!       if abs X < Eps_Model (RT) then
!          if Denorm_On_Target then
!             return X - Eps_Denorm (RT);
! 
!          elsif X > Ureal_0 then
! 
!             --  Target does not support denorms, so predecessor is 0.0
! 
!             return Ureal_0;
! 
!          else
!             --  Target does not support denorms, and X is 0.0
!             --  or at least bigger than -Eps_Model (RT)
! 
!             return -Eps_Model (RT);
!          end if;
! 
!       else
!          Decompose_Int (RT, X, Result_F,  Result_X, Ceiling);
!          return UR_From_Components
!            (Num      => Result_F - 1,
!             Den      => Machine_Mantissa (RT) - Result_X,
!             Rbase    => Radix,
!             Negative => False);
!          --  Result_F may be false, but this is OK as UR_From_Components
!          --  handles that situation.
!       end if;
     end Pred;
  
     ---------------
--- 705,712 ----
     ----------
  
     function Pred (RT : R; X : T) return T is
     begin
!       return -Succ (RT, -X);
     end Pred;
  
     ---------------
*************** package body Eval_Fat is
*** 894,928 ****
     ----------
  
     function Succ (RT : R; X : T) return T is
!       Result_F : UI;
!       Result_X : UI;
  
     begin
!       if abs X < Eps_Model (RT) then
!          if Denorm_On_Target then
!             return X + Eps_Denorm (RT);
  
!          elsif X < Ureal_0 then
!             --  Target does not support denorms, so successor is 0.0
!             return Ureal_0;
  
!          else
!             --  Target does not support denorms, and X is 0.0
!             --  or at least smaller than Eps_Model (RT)
  
!             return Eps_Model (RT);
!          end if;
  
!       else
!          Decompose_Int (RT, X, Result_F, Result_X, Floor);
!          return UR_From_Components
!            (Num      => Result_F + 1,
!             Den      => Machine_Mantissa (RT) - Result_X,
!             Rbase    => Radix,
!             Negative => False);
!          --  Result_F may be false, but this is OK as UR_From_Components
!          --  handles that situation.
        end if;
     end Succ;
  
     ----------------
--- 833,870 ----
     ----------
  
     function Succ (RT : R; X : T) return T is
!       Emin     : constant UI := UI_From_Int (Machine_Emin (RT));
!       Mantissa : constant UI := UI_From_Int (Machine_Mantissa (RT));
!       Exp      : UI := UI_Max (Emin, Exponent (RT, X));
!       Frac     : T;
!       New_Frac : T;
  
     begin
!       if UR_Is_Zero (X) then
!          Exp := Emin;
!       end if;
  
!       --  Set exponent such that the radix point will be directly
!       --  following the mantissa after scaling
  
!       if Denorm_On_Target or Exp /= Emin then
!          Exp := Exp - Mantissa;
!       else
!          Exp := Exp - 1;
!       end if;
  
!       Frac := Scaling (RT, X, -Exp);
!       New_Frac := Ceiling (RT, Frac);
  
!       if New_Frac = Frac then
!          if New_Frac = Scaling (RT, -Ureal_1, Mantissa - 1) then
!             New_Frac := New_Frac + Scaling (RT, Ureal_1, Uint_Minus_1);
!          else
!             New_Frac := New_Frac + Ureal_1;
!          end if;
        end if;
+ 
+       return Scaling (RT, New_Frac, Exp);
     end Succ;
  
     ----------------
*************** package body Eval_Fat is
*** 931,937 ****
  
     function Truncation (RT : R; X : T) return T is
        pragma Warnings (Off, RT);
- 
     begin
        return UR_From_Uint (UR_Trunc (X));
     end Truncation;
--- 873,878 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/eval_fat.ads gcc-4.0.0/gcc/ada/eval_fat.ads
*** gcc-3.4.3/gcc/ada/eval_fat.ads	Tue Oct 21 13:41:59 2003
--- gcc-4.0.0/gcc/ada/eval_fat.ads	Mon Apr 19 15:19:57 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Eval_Fat is
*** 66,71 ****
--- 66,75 ----
  
     function Leading_Part      (RT : R; X : T; Radix_Digits : UI)    return T;
  
+    function Machine_Mantissa  (RT : R)                              return Nat;
+ 
+    function Machine_Radix     (RT : R)                              return Nat;
+ 
     function Model             (RT : R; X : T)                       return T;
  
     function Pred              (RT : R; X : T)                       return T;
*************** package Eval_Fat is
*** 98,104 ****
       (RT    : R;
        X     : T;
        Mode  : Rounding_Mode;
!       Enode : Node_Id)
!       return  T;
  
  end Eval_Fat;
--- 102,107 ----
       (RT    : R;
        X     : T;
        Mode  : Rounding_Mode;
!       Enode : Node_Id) return T;
  
  end Eval_Fat;
diff -Nrcpad gcc-3.4.3/gcc/ada/exp_aggr.adb gcc-4.0.0/gcc/ada/exp_aggr.adb
*** gcc-3.4.3/gcc/ada/exp_aggr.adb	Mon Jan 12 11:45:23 2004
--- gcc-4.0.0/gcc/ada/exp_aggr.adb	Thu Feb 10 13:53:58 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Exp_Util; use Exp_Util;
*** 34,39 ****
--- 34,40 ----
  with Exp_Ch3;  use Exp_Ch3;
  with Exp_Ch7;  use Exp_Ch7;
  with Exp_Ch9;  use Exp_Ch9;
+ with Exp_Tss;  use Exp_Tss;
  with Freeze;   use Freeze;
  with Hostparm; use Hostparm;
  with Itypes;   use Itypes;
*************** with Lib;      use Lib;
*** 41,46 ****
--- 42,48 ----
  with Nmake;    use Nmake;
  with Nlists;   use Nlists;
  with Restrict; use Restrict;
+ with Rident;   use Rident;
  with Rtsfind;  use Rtsfind;
  with Ttypes;   use Ttypes;
  with Sem;      use Sem;
*************** package body Exp_Aggr is
*** 65,70 ****
--- 67,86 ----
     type Case_Table_Type is array (Nat range <>) of Case_Bounds;
     --  Table type used by Check_Case_Choices procedure
  
+    function Must_Slide
+      (Obj_Type : Entity_Id;
+       Typ      : Entity_Id) return Boolean;
+    --  A static array aggregate in an object declaration can in most cases be
+    --  expanded in place. The one exception is when the aggregate is given
+    --  with component associations that specify different bounds from those of
+    --  the type definition in the object declaration. In this pathological
+    --  case the aggregate must slide, and we must introduce an intermediate
+    --  temporary to hold it.
+    --
+    --  The same holds in an assignment to one-dimensional array of arrays,
+    --  when a component may be given with bounds that differ from those of the
+    --  component type.
+ 
     procedure Sort_Case_Table (Case_Table : in out Case_Table_Type);
     --  Sort the Case Table using the Lower Bound of each Choice as the key.
     --  A simple insertion sort is used since the number of choices in a case
*************** package body Exp_Aggr is
*** 73,79 ****
  
     function Has_Default_Init_Comps (N : Node_Id) return Boolean;
     --  N is an aggregate (record or array). Checks the presence of default
!    --  initialization (<>) in any component (Ada0Y: AI-287)
  
     ------------------------------------------------------
     -- Local subprograms for Record Aggregate Expansion --
--- 89,95 ----
  
     function Has_Default_Init_Comps (N : Node_Id) return Boolean;
     --  N is an aggregate (record or array). Checks the presence of default
!    --  initialization (<>) in any component (Ada 2005: AI-287)
  
     ------------------------------------------------------
     -- Local subprograms for Record Aggregate Expansion --
*************** package body Exp_Aggr is
*** 108,123 ****
        Flist                         : Node_Id   := Empty;
        Obj                           : Entity_Id := Empty;
        Is_Limited_Ancestor_Expansion : Boolean   := False) return List_Id;
!    --  N is an N_Aggregate or a N_Extension_Aggregate. Typ is the type
!    --  of the aggregate. Target is an expression containing the
!    --  location on which the component by component assignments will
!    --  take place. Returns the list of assignments plus all other
!    --  adjustments needed for tagged and controlled types. Flist is an
!    --  expression representing the finalization list on which to
!    --  attach the controlled components if any. Obj is present in the
!    --  object declaration and dynamic allocation cases, it contains
!    --  an entity that allows to know if the value being created needs to be
!    --  attached to the final list in case of pragma finalize_Storage_Only.
     --  Is_Limited_Ancestor_Expansion indicates that the function has been
     --  called recursively to expand the limited ancestor to avoid copying it.
  
--- 124,139 ----
        Flist                         : Node_Id   := Empty;
        Obj                           : Entity_Id := Empty;
        Is_Limited_Ancestor_Expansion : Boolean   := False) return List_Id;
!    --  N is an N_Aggregate or a N_Extension_Aggregate. Typ is the type of the
!    --  aggregate. Target is an expression containing the location on which the
!    --  component by component assignments will take place. Returns the list of
!    --  assignments plus all other adjustments needed for tagged and controlled
!    --  types. Flist is an expression representing the finalization list on
!    --  which to attach the controlled components if any. Obj is present in the
!    --  object declaration and dynamic allocation cases, it contains an entity
!    --  that allows to know if the value being created needs to be attached to
!    --  the final list in case of pragma finalize_Storage_Only.
!    --
     --  Is_Limited_Ancestor_Expansion indicates that the function has been
     --  called recursively to expand the limited ancestor to avoid copying it.
  
*************** package body Exp_Aggr is
*** 142,165 ****
     -- Local Subprograms for Array Aggregate Expansion --
     -----------------------------------------------------
  
     procedure Convert_To_Positional
       (N                    : Node_Id;
        Max_Others_Replicate : Nat     := 5;
        Handle_Bit_Packed    : Boolean := False);
     --  If possible, convert named notation to positional notation. This
!    --  conversion is possible only in some static cases. If the conversion
!    --  is possible, then N is rewritten with the analyzed converted
!    --  aggregate. The parameter Max_Others_Replicate controls the maximum
!    --  number of values corresponding to an others choice that will be
!    --  converted to positional notation (the default of 5 is the normal
!    --  limit, and reflects the fact that normally the loop is better than
!    --  a lot of separate assignments). Note that this limit gets overridden
!    --  in any case if either of the restrictions No_Elaboration_Code or
!    --  No_Implicit_Loops is set. The parameter Handle_Bit_Packed is usually
!    --  set False (since we do not expect the back end to handle bit packed
!    --  arrays, so the normal case of conversion is pointless), but in the
!    --  special case of a call from Packed_Array_Aggregate_Handled, we set
!    --  this parameter to True, since these are cases we handle in there.
  
     procedure Expand_Array_Aggregate (N : Node_Id);
     --  This is the top-level routine to perform array aggregate expansion.
--- 158,191 ----
     -- Local Subprograms for Array Aggregate Expansion --
     -----------------------------------------------------
  
+    procedure Convert_Array_Aggr_In_Allocator
+      (Decl   : Node_Id;
+       Aggr   : Node_Id;
+       Target : Node_Id);
+    --  If the aggregate appears within an allocator and can be expanded in
+    --  place, this routine generates the individual assignments to components
+    --  of the designated object. This is an optimization over the general
+    --  case, where a temporary is first created on the stack and then used to
+    --  construct the allocated object on the heap.
+ 
     procedure Convert_To_Positional
       (N                    : Node_Id;
        Max_Others_Replicate : Nat     := 5;
        Handle_Bit_Packed    : Boolean := False);
     --  If possible, convert named notation to positional notation. This
!    --  conversion is possible only in some static cases. If the conversion is
!    --  possible, then N is rewritten with the analyzed converted aggregate.
!    --  The parameter Max_Others_Replicate controls the maximum number of
!    --  values corresponding to an others choice that will be converted to
!    --  positional notation (the default of 5 is the normal limit, and reflects
!    --  the fact that normally the loop is better than a lot of separate
!    --  assignments). Note that this limit gets overridden in any case if
!    --  either of the restrictions No_Elaboration_Code or No_Implicit_Loops is
!    --  set. The parameter Handle_Bit_Packed is usually set False (since we do
!    --  not expect the back end to handle bit packed arrays, so the normal case
!    --  of conversion is pointless), but in the special case of a call from
!    --  Packed_Array_Aggregate_Handled, we set this parameter to True, since
!    --  these are cases we handle in there.
  
     procedure Expand_Array_Aggregate (N : Node_Id);
     --  This is the top-level routine to perform array aggregate expansion.
*************** package body Exp_Aggr is
*** 208,225 ****
        Target : Node_Id;
        Flist  : Node_Id := Empty;
        Obj    : Entity_Id := Empty) return List_Id;
!    --  N is a nested (record or array) aggregate that has been marked
!    --  with 'Delay_Expansion'. Typ is the expected type of the
!    --  aggregate and Target is a (duplicable) expression that will
!    --  hold the result of the aggregate expansion. Flist is the
!    --  finalization list to be used to attach controlled
!    --  components. 'Obj' when non empty, carries the original object
!    --  being initialized in order to know if it needs to be attached
!    --  to the previous parameter which may not be the case when
!    --  Finalize_Storage_Only is set.  Basically this procedure is used
!    --  to implement top-down expansions of nested aggregates. This is
!    --  necessary for avoiding temporaries at each level as well as for
!    --  propagating the right internal finalization list.
  
     function Make_OK_Assignment_Statement
       (Sloc       : Source_Ptr;
--- 234,250 ----
        Target : Node_Id;
        Flist  : Node_Id := Empty;
        Obj    : Entity_Id := Empty) return List_Id;
!    --  N is a nested (record or array) aggregate that has been marked with
!    --  'Delay_Expansion'. Typ is the expected type of the aggregate and Target
!    --  is a (duplicable) expression that will hold the result of the aggregate
!    --  expansion. Flist is the finalization list to be used to attach
!    --  controlled components. 'Obj' when non empty, carries the original
!    --  object being initialized in order to know if it needs to be attached to
!    --  the previous parameter which may not be the case in the case where
!    --  Finalize_Storage_Only is set. Basically this procedure is used to
!    --  implement top-down expansions of nested aggregates. This is necessary
!    --  for avoiding temporaries at each level as well as for propagating the
!    --  right internal finalization list.
  
     function Make_OK_Assignment_Statement
       (Sloc       : Source_Ptr;
*************** package body Exp_Aggr is
*** 268,277 ****
  
     function Backend_Processing_Possible (N : Node_Id) return Boolean is
        Typ : constant Entity_Id := Etype (N);
!       --  Typ is the correct constrained array subtype of the aggregate.
  
        function Static_Check (N : Node_Id; Index : Node_Id) return Boolean;
!       --  Recursively checks that N is fully positional, returns true if so.
  
        ------------------
        -- Static_Check --
--- 293,302 ----
  
     function Backend_Processing_Possible (N : Node_Id) return Boolean is
        Typ : constant Entity_Id := Etype (N);
!       --  Typ is the correct constrained array subtype of the aggregate
  
        function Static_Check (N : Node_Id; Index : Node_Id) return Boolean;
!       --  Recursively checks that N is fully positional, returns true if so
  
        ------------------
        -- Static_Check --
*************** package body Exp_Aggr is
*** 340,352 ****
        end if;
  
        --  Checks 5 (if the component type is tagged, then we may need
!       --    to do tag adjustments; perhaps this should be refined to
!       --    check for any component associations that actually
!       --    need tag adjustment, along the lines of the test that's
!       --    done in Has_Delayed_Nested_Aggregate_Or_Tagged_Comps
!       --    for record aggregates with tagged components, but not
!       --    clear whether it's worthwhile ???; in the case of the
!       --    JVM, object tags are handled implicitly)
  
        if Is_Tagged_Type (Component_Type (Typ)) and then not Java_VM then
           return False;
--- 365,376 ----
        end if;
  
        --  Checks 5 (if the component type is tagged, then we may need
!       --    to do tag adjustments; perhaps this should be refined to check for
!       --    any component associations that actually need tag adjustment,
!       --    along the lines of the test that is carried out in
!       --    Has_Delayed_Nested_Aggregate_Or_Tagged_Comps for record aggregates
!       --    with tagged components, but not clear whether it's worthwhile ???;
!       --    in the case of the JVM, object tags are handled implicitly)
  
        if Is_Tagged_Type (Component_Type (Typ)) and then not Java_VM then
           return False;
*************** package body Exp_Aggr is
*** 380,390 ****
     --         we are dealing with an expression we emit a sequence of
     --         assignments instead of a loop.
  
!    --     (c) Generate the remaining loops to cover the others choice if any.
  
     --  2. If the aggregate contains positional elements we
  
!    --     (a) translate the positional elements in a series of assignments.
  
     --     (b) Generate a final loop to cover the others choice if any.
     --         Note that this final loop has to be a while loop since the case
--- 404,414 ----
     --         we are dealing with an expression we emit a sequence of
     --         assignments instead of a loop.
  
!    --     (c) Generate the remaining loops to cover the others choice if any
  
     --  2. If the aggregate contains positional elements we
  
!    --     (a) translate the positional elements in a series of assignments
  
     --     (b) Generate a final loop to cover the others choice if any.
     --         Note that this final loop has to be a while loop since the case
*************** package body Exp_Aggr is
*** 420,437 ****
        Index_Base_H : constant Node_Id := Type_High_Bound (Index_Base);
  
        function Add (Val : Int; To : Node_Id) return Node_Id;
!       --  Returns an expression where Val is added to expression To,
!       --  unless To+Val is provably out of To's base type range.
!       --  To must be an already analyzed expression.
  
        function Empty_Range (L, H : Node_Id) return Boolean;
!       --  Returns True if the range defined by L .. H is certainly empty.
  
        function Equal (L, H : Node_Id) return Boolean;
!       --  Returns True if L = H for sure.
  
        function Index_Base_Name return Node_Id;
!       --  Returns a new reference to the index type name.
  
        function Gen_Assign (Ind : Node_Id; Expr : Node_Id) return List_Id;
        --  Ind must be a side-effect free expression. If the input aggregate
--- 444,461 ----
        Index_Base_H : constant Node_Id := Type_High_Bound (Index_Base);
  
        function Add (Val : Int; To : Node_Id) return Node_Id;
!       --  Returns an expression where Val is added to expression To, unless
!       --  To+Val is provably out of To's base type range. To must be an
!       --  already analyzed expression.
  
        function Empty_Range (L, H : Node_Id) return Boolean;
!       --  Returns True if the range defined by L .. H is certainly empty
  
        function Equal (L, H : Node_Id) return Boolean;
!       --  Returns True if L = H for sure
  
        function Index_Base_Name return Node_Id;
!       --  Returns a new reference to the index type name
  
        function Gen_Assign (Ind : Node_Id; Expr : Node_Id) return List_Id;
        --  Ind must be a side-effect free expression. If the input aggregate
*************** package body Exp_Aggr is
*** 440,449 ****
        --
        --     Into (Indices, Ind) := Expr;
        --
!       --  Otherwise we call Build_Code recursively.
        --
!       --  Ada0Y (AI-287): In case of default initialized component, Expr is
!       --  empty and we generate a call to the corresponding IP subprogram.
  
        function Gen_Loop (L, H : Node_Id; Expr : Node_Id) return List_Id;
        --  Nodes L and H must be side-effect free expressions.
--- 464,473 ----
        --
        --     Into (Indices, Ind) := Expr;
        --
!       --  Otherwise we call Build_Code recursively
        --
!       --  Ada 2005 (AI-287): In case of default initialized component, Expr
!       --  is empty and we generate a call to the corresponding IP subprogram.
  
        function Gen_Loop (L, H : Node_Id; Expr : Node_Id) return List_Id;
        --  Nodes L and H must be side-effect free expressions.
*************** package body Exp_Aggr is
*** 670,677 ****
              Res : List_Id;
  
           begin
!             --  Ada0Y (AI-287): Do nothing else in case of default initialized
!             --  component
  
              if not Present (Expr) then
                 return Lis;
--- 694,701 ----
              Res : List_Id;
  
           begin
!             --  Ada 2005 (AI-287): Do nothing else in case of default
!             --  initialized component.
  
              if not Present (Expr) then
                 return Lis;
*************** package body Exp_Aggr is
*** 738,745 ****
  
           Set_Assignment_OK (Indexed_Comp);
  
!          --  Ada0Y (AI-287): In case of default initialized component, Expr
!          --  is not present (and therefore we also initialize Expr_Q to empty)
  
           if not Present (Expr) then
              Expr_Q := Empty;
--- 762,769 ----
  
           Set_Assignment_OK (Indexed_Comp);
  
!          --  Ada 2005 (AI-287): In case of default initialized component, Expr
!          --  is not present (and therefore we also initialize Expr_Q to empty).
  
           if not Present (Expr) then
              Expr_Q := Empty;
*************** package body Exp_Aggr is
*** 757,766 ****
  
           elsif Present (Next (First (New_Indices))) then
  
!             --  Ada0Y (AI-287): Do nothing in case of default initialized
              --  component because we have received the component type in
              --  the formal parameter Ctype.
!             --  ??? I have added some assert pragmas to check if this new
              --      formal can be used to replace this code in all cases.
  
              if Present (Expr) then
--- 781,791 ----
  
           elsif Present (Next (First (New_Indices))) then
  
!             --  Ada 2005 (AI-287): Do nothing in case of default initialized
              --  component because we have received the component type in
              --  the formal parameter Ctype.
! 
!             --  ??? Some assert pragmas have been added to check if this new
              --      formal can be used to replace this code in all cases.
  
              if Present (Expr) then
*************** package body Exp_Aggr is
*** 774,780 ****
  
                 begin
                    while Present (P) loop
- 
                       if Nkind (P) = N_Aggregate
                         and then Present (Etype (P))
                       then
--- 799,804 ----
*************** package body Exp_Aggr is
*** 785,797 ****
                          P := Parent (P);
                       end if;
                    end loop;
                    pragma Assert (Comp_Type = Ctype); --  AI-287
                 end;
              end if;
           end if;
  
!          --  Ada0Y (AI-287): We only analyze the expression in case of non
!          --  default initialized components (otherwise Expr_Q is not present)
  
           if Present (Expr_Q)
             and then (Nkind (Expr_Q) = N_Aggregate
--- 809,822 ----
                          P := Parent (P);
                       end if;
                    end loop;
+ 
                    pragma Assert (Comp_Type = Ctype); --  AI-287
                 end;
              end if;
           end if;
  
!          --  Ada 2005 (AI-287): We only analyze the expression in case of non-
!          --  default initialized components (otherwise Expr_Q is not present).
  
           if Present (Expr_Q)
             and then (Nkind (Expr_Q) = N_Aggregate
*************** package body Exp_Aggr is
*** 801,807 ****
              --  analyzed yet because the array aggregate code has not
              --  been updated to use the Expansion_Delayed flag and
              --  avoid analysis altogether to solve the same problem
!             --  (see Resolve_Aggr_Expr) so let's do the analysis of
              --  non-array aggregates now in order to get the value of
              --  Expansion_Delayed flag for the inner aggregate ???
  
--- 826,832 ----
              --  analyzed yet because the array aggregate code has not
              --  been updated to use the Expansion_Delayed flag and
              --  avoid analysis altogether to solve the same problem
!             --  (see Resolve_Aggr_Expr). So let us do the analysis of
              --  non-array aggregates now in order to get the value of
              --  Expansion_Delayed flag for the inner aggregate ???
  
*************** package body Exp_Aggr is
*** 810,834 ****
              end if;
  
              if Is_Delayed_Aggregate (Expr_Q) then
!                return
!                  Add_Loop_Actions (
!                    Late_Expansion (Expr_Q, Etype (Expr_Q), Indexed_Comp, F));
              end if;
           end if;
  
!          --  Ada0Y (AI-287): In case of default initialized component, call
!          --  the initialization subprogram associated with the component type
  
           if not Present (Expr) then
  
!             Append_List_To (L,
                   Build_Initialization_Call (Loc,
                     Id_Ref            => Indexed_Comp,
                     Typ               => Ctype,
                     With_Default_Init => True));
  
           else
- 
              --  Now generate the assignment with no associated controlled
              --  actions since the target of the assignment may not have
              --  been initialized, it is not possible to Finalize it as
--- 835,883 ----
              end if;
  
              if Is_Delayed_Aggregate (Expr_Q) then
! 
!                --  This is either a subaggregate of a multidimentional array,
!                --  or a component of an array type whose component type is
!                --  also an array. In the latter case, the expression may have
!                --  component associations that provide different bounds from
!                --  those of the component type, and sliding must occur. Instead
!                --  of decomposing the current aggregate assignment, force the
!                --  re-analysis of the assignment, so that a temporary will be
!                --  generated in the usual fashion, and sliding will take place.
! 
!                if Nkind (Parent (N)) = N_Assignment_Statement
!                  and then Is_Array_Type (Comp_Type)
!                  and then Present (Component_Associations (Expr_Q))
!                  and then Must_Slide (Comp_Type, Etype (Expr_Q))
!                then
!                   Set_Expansion_Delayed (Expr_Q, False);
!                   Set_Analyzed (Expr_Q, False);
! 
!                else
!                   return
!                     Add_Loop_Actions (
!                       Late_Expansion (
!                         Expr_Q, Etype (Expr_Q), Indexed_Comp, F));
!                end if;
              end if;
           end if;
  
!          --  Ada 2005 (AI-287): In case of default initialized component, call
!          --  the initialization subprogram associated with the component type.
  
           if not Present (Expr) then
  
!             if Present (Base_Init_Proc (Etype (Ctype)))
!               or else Has_Task (Base_Type (Ctype))
!             then
!                Append_List_To (L,
                   Build_Initialization_Call (Loc,
                     Id_Ref            => Indexed_Comp,
                     Typ               => Ctype,
                     With_Default_Init => True));
+             end if;
  
           else
              --  Now generate the assignment with no associated controlled
              --  actions since the target of the assignment may not have
              --  been initialized, it is not possible to Finalize it as
*************** package body Exp_Aggr is
*** 916,923 ****
           if Empty_Range (L, H) then
              Append_To (S, Make_Null_Statement (Loc));
  
!             --  Ada0Y (AI-287): Nothing else need to be done in case of
!             --  default initialized component
  
              if not Present (Expr) then
                 null;
--- 965,972 ----
           if Empty_Range (L, H) then
              Append_To (S, Make_Null_Statement (Loc));
  
!             --  Ada 2005 (AI-287): Nothing else need to be done in case of
!             --  default initialized component.
  
              if not Present (Expr) then
                 null;
*************** package body Exp_Aggr is
*** 1163,1169 ****
  
        Aggr_Low  : constant Node_Id := Duplicate_Subexpr_No_Checks (Aggr_L);
        Aggr_High : constant Node_Id := Duplicate_Subexpr_No_Checks (Aggr_H);
!       --  After Duplicate_Subexpr these are side-effect free.
  
        Low        : Node_Id;
        High       : Node_Id;
--- 1212,1218 ----
  
        Aggr_Low  : constant Node_Id := Duplicate_Subexpr_No_Checks (Aggr_L);
        Aggr_High : constant Node_Id := Duplicate_Subexpr_No_Checks (Aggr_H);
!       --  After Duplicate_Subexpr these are side-effect free
  
        Low        : Node_Id;
        High       : Node_Id;
*************** package body Exp_Aggr is
*** 1252,1258 ****
              Sort_Case_Table (Table);
           end if;
  
!          --  STEP 1 (b):  take care of the whole set of discrete choices.
  
           for J in 1 .. Nb_Choices loop
              Low  := Table (J).Choice_Lo;
--- 1301,1307 ----
              Sort_Case_Table (Table);
           end if;
  
!          --  STEP 1 (b):  take care of the whole set of discrete choices
  
           for J in 1 .. Nb_Choices loop
              Low  := Table (J).Choice_Lo;
*************** package body Exp_Aggr is
*** 1335,1341 ****
           if Present (Component_Associations (N)) then
              Assoc := Last (Component_Associations (N));
  
!             --  Ada0Y (AI-287)
              if Box_Present (Assoc) then
                 Append_List (Gen_While (Add (Nb_Elements, To => Aggr_L),
                                         Aggr_High,
--- 1384,1391 ----
           if Present (Component_Associations (N)) then
              Assoc := Last (Component_Associations (N));
  
!             --  Ada 2005 (AI-287)
! 
              if Box_Present (Assoc) then
                 Append_List (Gen_While (Add (Nb_Elements, To => Aggr_L),
                                         Aggr_High,
*************** package body Exp_Aggr is
*** 1629,1653 ****
               Selector_Name => Make_Identifier (Loc, Name_uController));
           Set_Assignment_OK (Ref);
  
!          --  Ada0Y (AI-287): Give support to default initialization of limited
!          --  types and components
  
           if (Nkind (Target) = N_Identifier
!              and then Present (Etype (Target))
!              and then Is_Limited_Type (Etype (Target)))
!            or else (Nkind (Target) = N_Selected_Component
!                     and then Present (Etype (Selector_Name (Target)))
!                     and then Is_Limited_Type (Etype (Selector_Name (Target))))
!            or else (Nkind (Target) = N_Unchecked_Type_Conversion
!                     and then Present (Etype (Target))
!                     and then Is_Limited_Type (Etype (Target)))
!            or else (Nkind (Target) = N_Unchecked_Expression
!                     and then Nkind (Expression (Target)) = N_Indexed_Component
!                     and then Present (Etype (Prefix (Expression (Target))))
!                     and then Is_Limited_Type
!                                (Etype (Prefix (Expression (Target)))))
           then
- 
              if Init_Pr then
                 Append_List_To (L,
                   Build_Initialization_Call (Loc,
--- 1679,1704 ----
               Selector_Name => Make_Identifier (Loc, Name_uController));
           Set_Assignment_OK (Ref);
  
!          --  Ada 2005 (AI-287): Give support to default initialization of
!          --  limited types and components.
  
           if (Nkind (Target) = N_Identifier
!               and then Present (Etype (Target))
!               and then Is_Limited_Type (Etype (Target)))
!            or else
!             (Nkind (Target) = N_Selected_Component
!               and then Present (Etype (Selector_Name (Target)))
!               and then Is_Limited_Type (Etype (Selector_Name (Target))))
!            or else
!             (Nkind (Target) = N_Unchecked_Type_Conversion
!               and then Present (Etype (Target))
!               and then Is_Limited_Type (Etype (Target)))
!            or else
!             (Nkind (Target) = N_Unchecked_Expression
!               and then Nkind (Expression (Target)) = N_Indexed_Component
!               and then Present (Etype (Prefix (Expression (Target))))
!               and then Is_Limited_Type (Etype (Prefix (Expression (Target)))))
           then
              if Init_Pr then
                 Append_List_To (L,
                   Build_Initialization_Call (Loc,
*************** package body Exp_Aggr is
*** 1786,1793 ****
                    Check_Ancestor_Discriminants (Entity (A));
                 end if;
  
!             --  Ada0Y (AI-287): If the ancestor part is a limited type, a
!             --  recursive call expands the ancestor.
  
              elsif Is_Limited_Type (Etype (A)) then
                 Ancestor_Is_Expression := True;
--- 1837,1844 ----
                    Check_Ancestor_Discriminants (Entity (A));
                 end if;
  
!             --  Ada 2005 (AI-287): If the ancestor part is a limited type,
!             --  a recursive call expands the ancestor.
  
              elsif Is_Limited_Type (Etype (A)) then
                 Ancestor_Is_Expression := True;
*************** package body Exp_Aggr is
*** 1918,1935 ****
  
        Comp := First (Component_Associations (N));
        while Present (Comp) loop
!          Selector  := Entity (First (Choices (Comp)));
  
!          --  Ada0Y (AI-287): Default initialization of a limited component
  
           if Box_Present (Comp)
              and then Is_Limited_Type (Etype (Selector))
           then
! 
!             --  Ada0Y (AI-287): If the component type has tasks then generate
!             --  the activation chain and master entities (except in case of an
!             --  allocator because in that case these entities are generated
!             --  by Build_Task_Allocate_Block_With_Init_Stmts)
  
              declare
                 Ctype            : constant Entity_Id := Etype (Selector);
--- 1969,1985 ----
  
        Comp := First (Component_Associations (N));
        while Present (Comp) loop
!          Selector := Entity (First (Choices (Comp)));
  
!          --  Ada 2005 (AI-287): Default initialization of a limited component
  
           if Box_Present (Comp)
              and then Is_Limited_Type (Etype (Selector))
           then
!             --  Ada 2005 (AI-287): If the component type has tasks then
!             --  generate the activation chain and master entities (except
!             --  in case of an allocator because in that case these entities
!             --  are generated by Build_Task_Allocate_Block_With_Init_Stmts).
  
              declare
                 Ctype            : constant Entity_Id := Etype (Selector);
*************** package body Exp_Aggr is
*** 1949,1955 ****
  
                    if not Inside_Init_Proc and not Inside_Allocator then
                       Build_Activation_Chain_Entity (N);
!                      Build_Master_Entity (Etype (N));
                    end if;
                 end if;
              end;
--- 1999,2008 ----
  
                    if not Inside_Init_Proc and not Inside_Allocator then
                       Build_Activation_Chain_Entity (N);
! 
!                      if not Has_Master_Entity (Current_Scope) then
!                         Build_Master_Entity (Etype (N));
!                      end if;
                    end if;
                 end if;
              end;
*************** package body Exp_Aggr is
*** 2338,2344 ****
        Access_Type : constant Entity_Id := Etype (Temp);
  
     begin
!       if Has_Default_Init_Comps (Aggr) then
           declare
              L          : constant List_Id := New_List;
              Init_Stmts : List_Id;
--- 2391,2400 ----
        Access_Type : constant Entity_Id := Etype (Temp);
  
     begin
!       if Is_Array_Type (Typ) then
!          Convert_Array_Aggr_In_Allocator (Decl, Aggr, Occ);
! 
!       elsif Has_Default_Init_Comps (Aggr) then
           declare
              L          : constant List_Id := New_List;
              Init_Stmts : List_Id;
*************** package body Exp_Aggr is
*** 2447,2453 ****
              Next_Elmt (Disc2);
           end loop;
  
!          --  If any discriminant constraint is non-static, emit a check.
  
           if Present (Cond) then
              Insert_Action (N,
--- 2503,2509 ----
              Next_Elmt (Disc2);
           end loop;
  
!          --  If any discriminant constraint is non-static, emit a check
  
           if Present (Cond) then
              Insert_Action (N,
*************** package body Exp_Aggr is
*** 2481,2486 ****
--- 2537,2570 ----
        Initialize_Discriminants (N, Typ);
     end Convert_Aggr_In_Object_Decl;
  
+    -------------------------------------
+    -- Convert_array_Aggr_In_Allocator --
+    -------------------------------------
+ 
+    procedure Convert_Array_Aggr_In_Allocator
+      (Decl   : Node_Id;
+       Aggr   : Node_Id;
+       Target : Node_Id)
+    is
+       Aggr_Code : List_Id;
+       Typ       : constant Entity_Id := Etype (Aggr);
+       Ctyp      : constant Entity_Id := Component_Type (Typ);
+ 
+    begin
+       --  The target is an explicit dereference of the allocated object.
+       --  Generate component assignments to it, as for an aggregate that
+       --  appears on the right-hand side of an assignment statement.
+ 
+       Aggr_Code :=
+         Build_Array_Aggr_Code (Aggr,
+           Ctype       => Ctyp,
+           Index       => First_Index (Typ),
+           Into        => Target,
+           Scalar_Comp => Is_Scalar_Type (Ctyp));
+ 
+       Insert_Actions_After (Decl, Aggr_Code);
+    end Convert_Array_Aggr_In_Allocator;
+ 
     ----------------------------
     -- Convert_To_Assignments --
     ----------------------------
*************** package body Exp_Aggr is
*** 2581,2590 ****
          (N   : Node_Id;
           Ix  : Node_Id;
           Ixb : Node_Id) return Boolean;
!       --  Convert the aggregate into a purely positional form if possible.
  
        function Is_Flat (N : Node_Id; Dims : Int) return Boolean;
!       --  Non trivial for multidimensional aggregate.
  
        -------------
        -- Flatten --
--- 2665,2675 ----
          (N   : Node_Id;
           Ix  : Node_Id;
           Ixb : Node_Id) return Boolean;
!       --  Convert the aggregate into a purely positional form if possible
  
        function Is_Flat (N : Node_Id; Dims : Int) return Boolean;
!       --  Return True iff the array N is flat (which is not rivial
!       --  in the case of multidimensionsl aggregates).
  
        -------------
        -- Flatten --
*************** package body Exp_Aggr is
*** 2614,2625 ****
           --  because of this limit.
  
           Max_Aggr_Size : constant Nat :=
!             5000 + (2 ** 24 - 5000) * Boolean'Pos
!                               (Restrictions (No_Elaboration_Code)
!                                  or else
!                                Restrictions (No_Implicit_Loops));
!       begin
  
           if Nkind (Original_Node (N)) = N_String_Literal then
              return True;
           end if;
--- 2699,2711 ----
           --  because of this limit.
  
           Max_Aggr_Size : constant Nat :=
!                            5000 + (2 ** 24 - 5000) *
!                              Boolean'Pos
!                                (Restriction_Active (No_Elaboration_Code)
!                                   or else
!                                 Restriction_Active (No_Implicit_Loops));
  
+       begin
           if Nkind (Original_Node (N)) = N_String_Literal then
              return True;
           end if;
*************** package body Exp_Aggr is
*** 2739,2752 ****
                                      Cunit_Entity (Current_Sem_Unit);
  
                             begin
!                               if Restrictions (No_Elaboration_Code)
!                                 or else Restrictions (No_Implicit_Loops)
                                  or else Is_Preelaborated (P)
                                  or else (Ekind (P) = E_Package_Body
                                            and then
                                              Is_Preelaborated (Spec_Entity (P)))
                                then
                                   null;
                                elsif Rep_Count > Max_Others_Replicate then
                                   return False;
                                end if;
--- 2825,2839 ----
                                      Cunit_Entity (Current_Sem_Unit);
  
                             begin
!                               if Restriction_Active (No_Elaboration_Code)
!                                 or else Restriction_Active (No_Implicit_Loops)
                                  or else Is_Preelaborated (P)
                                  or else (Ekind (P) = E_Package_Body
                                            and then
                                              Is_Preelaborated (Spec_Entity (P)))
                                then
                                   null;
+ 
                                elsif Rep_Count > Max_Others_Replicate then
                                   return False;
                                end if;
*************** package body Exp_Aggr is
*** 2860,2866 ****
     --  Start of processing for Convert_To_Positional
  
     begin
!       --  Ada0Y (AI-287): Do not convert in case of default initialized
        --  components because in this case will need to call the corresponding
        --  IP procedure.
  
--- 2947,2953 ----
     --  Start of processing for Convert_To_Positional
  
     begin
!       --  Ada 2005 (AI-287): Do not convert in case of default initialized
        --  components because in this case will need to call the corresponding
        --  IP procedure.
  
*************** package body Exp_Aggr is
*** 2932,2945 ****
        --  Ctyp is the corresponding component type.
  
        Aggr_Dimension : constant Pos := Number_Dimensions (Typ);
!       --  Number of aggregate index dimensions.
  
        Aggr_Low  : array (1 .. Aggr_Dimension) of Node_Id;
        Aggr_High : array (1 .. Aggr_Dimension) of Node_Id;
!       --  Low and High bounds of the constraint for each aggregate index.
  
        Aggr_Index_Typ : array (1 .. Aggr_Dimension) of Entity_Id;
!       --  The type of each index.
  
        Maybe_In_Place_OK : Boolean;
        --  If the type is neither controlled nor packed and the aggregate
--- 3019,3032 ----
        --  Ctyp is the corresponding component type.
  
        Aggr_Dimension : constant Pos := Number_Dimensions (Typ);
!       --  Number of aggregate index dimensions
  
        Aggr_Low  : array (1 .. Aggr_Dimension) of Node_Id;
        Aggr_High : array (1 .. Aggr_Dimension) of Node_Id;
!       --  Low and High bounds of the constraint for each aggregate index
  
        Aggr_Index_Typ : array (1 .. Aggr_Dimension) of Entity_Id;
!       --  The type of each index
  
        Maybe_In_Place_OK : Boolean;
        --  If the type is neither controlled nor packed and the aggregate
*************** package body Exp_Aggr is
*** 2982,2995 ****
        --  be done in place, because none of the new values can depend on the
        --  components of the target of the assignment.
  
-       function Must_Slide (N : Node_Id; Typ : Entity_Id) return Boolean;
-       --  A static aggregate in an object declaration can in most cases be
-       --  expanded in place. The one exception is when the aggregate is given
-       --  with component associations that specify different bounds from those
-       --  of the type definition in the object declaration. In this rather
-       --  pathological case the aggregate must slide, and we must introduce
-       --  an intermediate temporary to hold it.
- 
        procedure Others_Check (Sub_Aggr : Node_Id; Dim : Pos);
        --  Checks that if an others choice is present in any sub-aggregate no
        --  aggregate index is outside the bounds of the index constraint.
--- 3069,3074 ----
*************** package body Exp_Aggr is
*** 3156,3169 ****
        procedure Check_Same_Aggr_Bounds (Sub_Aggr : Node_Id; Dim : Pos) is
           Sub_Lo : constant Node_Id := Low_Bound (Aggregate_Bounds (Sub_Aggr));
           Sub_Hi : constant Node_Id := High_Bound (Aggregate_Bounds (Sub_Aggr));
!          --  The bounds of this specific sub-aggregate.
  
           Aggr_Lo : constant Node_Id := Aggr_Low (Dim);
           Aggr_Hi : constant Node_Id := Aggr_High (Dim);
           --  The bounds of the aggregate for this dimension
  
           Ind_Typ : constant Entity_Id := Aggr_Index_Typ (Dim);
!          --  The index type for this dimension.
  
           Cond  : Node_Id := Empty;
  
--- 3235,3248 ----
        procedure Check_Same_Aggr_Bounds (Sub_Aggr : Node_Id; Dim : Pos) is
           Sub_Lo : constant Node_Id := Low_Bound (Aggregate_Bounds (Sub_Aggr));
           Sub_Hi : constant Node_Id := High_Bound (Aggregate_Bounds (Sub_Aggr));
!          --  The bounds of this specific sub-aggregate
  
           Aggr_Lo : constant Node_Id := Aggr_Low (Dim);
           Aggr_Hi : constant Node_Id := Aggr_High (Dim);
           --  The bounds of the aggregate for this dimension
  
           Ind_Typ : constant Entity_Id := Aggr_Index_Typ (Dim);
!          --  The index type for this dimension.xxx
  
           Cond  : Node_Id := Empty;
  
*************** package body Exp_Aggr is
*** 3410,3416 ****
              Comp : Node_Id := Expr;
  
              function Check_Component (Comp : Node_Id) return Boolean;
!             --  Do the recursive traversal, after copy.
  
              ---------------------
              -- Check_Component --
--- 3489,3495 ----
              Comp : Node_Id := Expr;
  
              function Check_Component (Comp : Node_Id) return Boolean;
!             --  Do the recursive traversal, after copy
  
              ---------------------
              -- Check_Component --
*************** package body Exp_Aggr is
*** 3439,3445 ****
                             and then Check_Component (Right_Opnd (Comp)))
  
                   or else (Nkind (Comp) = N_Selected_Component
!                            and then Check_Component (Prefix (Comp)));
              end Check_Component;
  
           --  Start of processing for Safe_Component
--- 3518,3527 ----
                             and then Check_Component (Right_Opnd (Comp)))
  
                   or else (Nkind (Comp) = N_Selected_Component
!                            and then Check_Component (Prefix (Comp)))
! 
!                  or else (Nkind (Comp) = N_Unchecked_Type_Conversion
!                            and then Check_Component (Expression (Comp)));
              end Check_Component;
  
           --  Start of processing for Safe_Component
*************** package body Exp_Aggr is
*** 3462,3468 ****
                    return False;
  
                 elsif Nkind (Expr) = N_Allocator then
!                   --  For now, too complex to analyze.
  
                    return False;
                 end if;
--- 3544,3551 ----
                    return False;
  
                 elsif Nkind (Expr) = N_Allocator then
! 
!                   --  For now, too complex to analyze
  
                    return False;
                 end if;
*************** package body Exp_Aggr is
*** 3499,3505 ****
              end if;
  
              Aggr_In := First_Index (Etype (N));
!             Obj_In  := First_Index (Etype (Name (Parent (N))));
  
              while Present (Aggr_In) loop
                 Get_Index_Bounds (Aggr_In, Aggr_Lo, Aggr_Hi);
--- 3582,3598 ----
              end if;
  
              Aggr_In := First_Index (Etype (N));
!             if Nkind (Parent (N)) = N_Assignment_Statement then
!                Obj_In  := First_Index (Etype (Name (Parent (N))));
! 
!             else
!                --  Context is an allocator. Check bounds of aggregate
!                --  against given type in qualified expression.
! 
!                pragma Assert (Nkind (Parent (Parent (N))) = N_Allocator);
!                Obj_In :=
!                  First_Index (Etype (Entity (Subtype_Mark (Parent (N)))));
!             end if;
  
              while Present (Aggr_In) loop
                 Get_Index_Bounds (Aggr_In, Aggr_Lo, Aggr_Hi);
*************** package body Exp_Aggr is
*** 3520,3574 ****
              end loop;
           end if;
  
!          --  Now check the component values themselves.
  
           return Safe_Aggregate (N);
        end In_Place_Assign_OK;
  
-       ----------------
-       -- Must_Slide --
-       ----------------
- 
-       function Must_Slide (N : Node_Id; Typ : Entity_Id) return Boolean
-       is
-          Obj_Type : constant Entity_Id :=
-                       Etype (Defining_Identifier (Parent (N)));
- 
-          L1, L2, H1, H2 : Node_Id;
- 
-       begin
-          --  No sliding if the type of the object is not established yet, if
-          --  it is an unconstrained type whose actual subtype comes from the
-          --  aggregate, or if the two types are identical.
- 
-          if not Is_Array_Type (Obj_Type) then
-             return False;
- 
-          elsif not Is_Constrained (Obj_Type) then
-             return False;
- 
-          elsif Typ = Obj_Type then
-             return False;
- 
-          else
-             --  Sliding can only occur along the first dimension
- 
-             Get_Index_Bounds (First_Index (Typ), L1, H1);
-             Get_Index_Bounds (First_Index (Obj_Type), L2, H2);
- 
-             if not Is_Static_Expression (L1)
-               or else not Is_Static_Expression (L2)
-               or else not Is_Static_Expression (H1)
-               or else not Is_Static_Expression (H2)
-             then
-                return False;
-             else
-                return Expr_Value (L1) /= Expr_Value (L2)
-                  or else Expr_Value (H1) /= Expr_Value (H2);
-             end if;
-          end if;
-       end Must_Slide;
- 
        ------------------
        -- Others_Check --
        ------------------
--- 3613,3623 ----
              end loop;
           end if;
  
!          --  Now check the component values themselves
  
           return Safe_Aggregate (N);
        end In_Place_Assign_OK;
  
        ------------------
        -- Others_Check --
        ------------------
*************** package body Exp_Aggr is
*** 3576,3585 ****
        procedure Others_Check (Sub_Aggr : Node_Id; Dim : Pos) is
           Aggr_Lo : constant Node_Id := Aggr_Low (Dim);
           Aggr_Hi : constant Node_Id := Aggr_High (Dim);
!          --  The bounds of the aggregate for this dimension.
  
           Ind_Typ : constant Entity_Id := Aggr_Index_Typ (Dim);
!          --  The index type for this dimension.
  
           Need_To_Check : Boolean := False;
  
--- 3625,3634 ----
        procedure Others_Check (Sub_Aggr : Node_Id; Dim : Pos) is
           Aggr_Lo : constant Node_Id := Aggr_Low (Dim);
           Aggr_Hi : constant Node_Id := Aggr_High (Dim);
!          --  The bounds of the aggregate for this dimension
  
           Ind_Typ : constant Entity_Id := Aggr_Index_Typ (Dim);
!          --  The index type for this dimension
  
           Need_To_Check : Boolean := False;
  
*************** package body Exp_Aggr is
*** 3820,3826 ****
  
        pragma Assert (not Raises_Constraint_Error (N));
  
!       --  STEP 1a.
  
        --  Check that the index range defined by aggregate bounds is
        --  compatible with corresponding index subtype.
--- 3869,3875 ----
  
        pragma Assert (not Raises_Constraint_Error (N));
  
!       --  STEP 1a
  
        --  Check that the index range defined by aggregate bounds is
        --  compatible with corresponding index subtype.
*************** package body Exp_Aggr is
*** 3868,3881 ****
           end loop;
        end Index_Compatibility_Check;
  
!       --  STEP 1b.
  
        --  If an others choice is present check that no aggregate
        --  index is outside the bounds of the index constraint.
  
        Others_Check (N, 1);
  
!       --  STEP 1c.
  
        --  For multidimensional arrays make sure that all subaggregates
        --  corresponding to the same dimension have the same bounds.
--- 3917,3930 ----
           end loop;
        end Index_Compatibility_Check;
  
!       --  STEP 1b
  
        --  If an others choice is present check that no aggregate
        --  index is outside the bounds of the index constraint.
  
        Others_Check (N, 1);
  
!       --  STEP 1c
  
        --  For multidimensional arrays make sure that all subaggregates
        --  corresponding to the same dimension have the same bounds.
*************** package body Exp_Aggr is
*** 3884,3890 ****
           Check_Same_Aggr_Bounds (N, 1);
        end if;
  
!       --  STEP 2.
  
        --  Here we test for is packed array aggregate that we can handle
        --  at compile time. If so, return with transformation done. Note
--- 3933,3939 ----
           Check_Same_Aggr_Bounds (N, 1);
        end if;
  
!       --  STEP 2
  
        --  Here we test for is packed array aggregate that we can handle
        --  at compile time. If so, return with transformation done. Note
*************** package body Exp_Aggr is
*** 3951,3957 ****
           return;
        end if;
  
!       --  STEP 3.
  
        --  Delay expansion for nested aggregates it will be taken care of
        --  when the parent aggregate is expanded
--- 4000,4006 ----
           return;
        end if;
  
!       --  STEP 3
  
        --  Delay expansion for nested aggregates it will be taken care of
        --  when the parent aggregate is expanded
*************** package body Exp_Aggr is
*** 3976,3982 ****
           return;
        end if;
  
!       --  STEP 4.
  
        --  Look if in place aggregate expansion is possible
  
--- 4025,4031 ----
           return;
        end if;
  
!       --  STEP 4
  
        --  Look if in place aggregate expansion is possible
  
*************** package body Exp_Aggr is
*** 3988,3993 ****
--- 4037,4047 ----
        --  create a temporary. The analysis for safety of on-line assignment
        --  is delicate, i.e. we don't know how to do it fully yet ???
  
+       --  For allocators we assign to the designated object in place if the
+       --  aggregate meets the same conditions as other in-place assignments.
+       --  In this case the aggregate may not come from source but was created
+       --  for default initialization, e.g. with Initialize_Scalars.
+ 
        if Requires_Transient_Scope (Typ) then
           Establish_Transient_Scope
             (N, Sec_Stack => Has_Controlled_Component (Typ));
*************** package body Exp_Aggr is
*** 3995,4013 ****
  
        if Has_Default_Init_Comps (N) then
           Maybe_In_Place_OK := False;
        else
           Maybe_In_Place_OK :=
!            Comes_From_Source (N)
!              and then Nkind (Parent (N)) = N_Assignment_Statement
!              and then not Is_Bit_Packed_Array (Typ)
!              and then not Has_Controlled_Component (Typ)
!              and then In_Place_Assign_OK;
        end if;
  
        if not Has_Default_Init_Comps (N)
           and then Comes_From_Source (Parent (N))
           and then Nkind (Parent (N)) = N_Object_Declaration
!          and then not Must_Slide (N, Typ)
           and then N = Expression (Parent (N))
           and then not Is_Bit_Packed_Array (Typ)
           and then not Has_Controlled_Component (Typ)
--- 4049,4076 ----
  
        if Has_Default_Init_Comps (N) then
           Maybe_In_Place_OK := False;
+ 
+       elsif Is_Bit_Packed_Array (Typ)
+         or else Has_Controlled_Component (Typ)
+       then
+          Maybe_In_Place_OK := False;
+ 
        else
           Maybe_In_Place_OK :=
!           (Nkind (Parent (N)) = N_Assignment_Statement
!              and then Comes_From_Source (N)
!              and then In_Place_Assign_OK)
! 
!           or else
!             (Nkind (Parent (Parent (N))) = N_Allocator
!               and then In_Place_Assign_OK);
        end if;
  
        if not Has_Default_Init_Comps (N)
           and then Comes_From_Source (Parent (N))
           and then Nkind (Parent (N)) = N_Object_Declaration
!          and then not
!            Must_Slide (Etype (Defining_Identifier (Parent (N))), Typ)
           and then N = Expression (Parent (N))
           and then not Is_Bit_Packed_Array (Typ)
           and then not Has_Controlled_Component (Typ)
*************** package body Exp_Aggr is
*** 4035,4040 ****
--- 4098,4112 ----
           end if;
  
        elsif Maybe_In_Place_OK
+         and then Nkind (Parent (N)) = N_Qualified_Expression
+         and then Nkind (Parent (Parent (N))) = N_Allocator
+       then
+          Set_Expansion_Delayed (N);
+          return;
+ 
+       --  In the remaining cases  the aggregate is the RHS of an assignment
+ 
+       elsif Maybe_In_Place_OK
          and then Is_Entity_Name (Name (Parent (N)))
        then
           Tmp := Entity (Name (Parent (N)));
*************** package body Exp_Aggr is
*** 4112,4124 ****
  
              if Has_Default_Init_Comps (N) then
  
!                --  Ada0Y (AI-287): This case has not been analyzed???
  
!                pragma Assert (False);
!                null;
              end if;
  
!             --  Name in assignment is explicit dereference.
  
              Target := New_Copy (Tmp);
           end if;
--- 4184,4195 ----
  
              if Has_Default_Init_Comps (N) then
  
!                --  Ada 2005 (AI-287): This case has not been analyzed???
  
!                raise Program_Error;
              end if;
  
!             --  Name in assignment is explicit dereference
  
              Target := New_Copy (Tmp);
           end if;
*************** package body Exp_Aggr is
*** 4326,4333 ****
        then
           Convert_To_Assignments (N, Typ);
  
!       --  Ada0Y (AI-287): In case of default initialized components we convert
!       --  the aggregate into assignments.
  
        elsif Has_Default_Init_Comps (N) then
           Convert_To_Assignments (N, Typ);
--- 4397,4404 ----
        then
           Convert_To_Assignments (N, Typ);
  
!          --  Ada 2005 (AI-287): In case of default initialized components we
!          --  convert the aggregate into assignments.
  
        elsif Has_Default_Init_Comps (N) then
           Convert_To_Assignments (N, Typ);
*************** package body Exp_Aggr is
*** 4515,4521 ****
  
           if Is_Tagged_Type (Typ) then
  
!             --  The tagged case, _parent and _tag component must be created.
  
              --  Reset null_present unconditionally. tagged records always have
              --  at least one field (the tag or the parent)
--- 4586,4592 ----
  
           if Is_Tagged_Type (Typ) then
  
!             --  The tagged case, _parent and _tag component must be created
  
              --  Reset null_present unconditionally. tagged records always have
              --  at least one field (the tag or the parent)
*************** package body Exp_Aggr is
*** 4735,4745 ****
        Typ    : Entity_Id;
        Target : Node_Id;
        Flist  : Node_Id   := Empty;
!       Obj    : Entity_Id := Empty) return List_Id is
     begin
        if Is_Record_Type (Etype (N)) then
           return Build_Record_Aggr_Code (N, Typ, Target, Flist, Obj);
!       elsif Is_Array_Type (Etype (N)) then
           return
             Build_Array_Aggr_Code
               (N           => N,
--- 4806,4818 ----
        Typ    : Entity_Id;
        Target : Node_Id;
        Flist  : Node_Id   := Empty;
!       Obj    : Entity_Id := Empty) return List_Id
!    is
     begin
        if Is_Record_Type (Etype (N)) then
           return Build_Record_Aggr_Code (N, Typ, Target, Flist, Obj);
! 
!       else pragma Assert (Is_Array_Type (Etype (N)));
           return
             Build_Array_Aggr_Code
               (N           => N,
*************** package body Exp_Aggr is
*** 4749,4757 ****
                Scalar_Comp => Is_Scalar_Type (Component_Type (Typ)),
                Indices     => No_List,
                Flist       => Flist);
-       else
-          pragma Assert (False);
-          return New_List;
        end if;
     end Late_Expansion;
  
--- 4822,4827 ----
*************** package body Exp_Aggr is
*** 4864,4872 ****
  
              Analyze_And_Resolve (N, Ctyp);
  
!             --  Must have a compile time value
  
!             if not Compile_Time_Known_Value (N) then
                 raise Not_Handled;
              end if;
  
--- 4934,4946 ----
  
              Analyze_And_Resolve (N, Ctyp);
  
!             --  Must have a compile time value. String literals have to
!             --  be converted into temporaries as well, because they cannot
!             --  easily be converted into their bit representation.
  
!             if not Compile_Time_Known_Value (N)
!               or else Nkind (N) = N_String_Literal
!             then
                 raise Not_Handled;
              end if;
  
*************** package body Exp_Aggr is
*** 4929,4936 ****
           --  Otherwise we are all positional, so convert to proper value
  
           declare
!             Lov : constant Nat := UI_To_Int (Lob);
!             Hiv : constant Nat := UI_To_Int (Hib);
  
              Len : constant Nat := Int'Max (0, Hiv - Lov + 1);
              --  The length of the array (number of elements)
--- 5003,5010 ----
           --  Otherwise we are all positional, so convert to proper value
  
           declare
!             Lov : constant Int := UI_To_Int (Lob);
!             Hiv : constant Int := UI_To_Int (Hib);
  
              Len : constant Nat := Int'Max (0, Hiv - Lov + 1);
              --  The length of the array (number of elements)
*************** package body Exp_Aggr is
*** 5074,5079 ****
--- 5148,5195 ----
        end if;
     end Initialize_Discriminants;
  
+    ----------------
+    -- Must_Slide --
+    ----------------
+ 
+    function Must_Slide
+      (Obj_Type : Entity_Id;
+       Typ      : Entity_Id) return Boolean
+    is
+       L1, L2, H1, H2 : Node_Id;
+    begin
+       --  No sliding if the type of the object is not established yet, if
+       --  it is an unconstrained type whose actual subtype comes from the
+       --  aggregate, or if the two types are identical.
+ 
+       if not Is_Array_Type (Obj_Type) then
+          return False;
+ 
+       elsif not Is_Constrained (Obj_Type) then
+          return False;
+ 
+       elsif Typ = Obj_Type then
+          return False;
+ 
+       else
+          --  Sliding can only occur along the first dimension
+ 
+          Get_Index_Bounds (First_Index (Typ), L1, H1);
+          Get_Index_Bounds (First_Index (Obj_Type), L2, H2);
+ 
+          if not Is_Static_Expression (L1)
+            or else not Is_Static_Expression (L2)
+            or else not Is_Static_Expression (H1)
+            or else not Is_Static_Expression (H2)
+          then
+             return False;
+          else
+             return Expr_Value (L1) /= Expr_Value (L2)
+               or else Expr_Value (H1) /= Expr_Value (H2);
+          end if;
+       end if;
+    end Must_Slide;
+ 
     ---------------------------
     -- Safe_Slice_Assignment --
     ---------------------------
diff -Nrcpad gcc-3.4.3/gcc/ada/exp_attr.adb gcc-4.0.0/gcc/ada/exp_attr.adb
*** gcc-3.4.3/gcc/ada/exp_attr.adb	Wed Dec  3 11:47:52 2003
--- gcc-4.0.0/gcc/ada/exp_attr.adb	Thu Feb 10 13:50:22 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 27,32 ****
--- 27,33 ----
  with Atree;    use Atree;
  with Checks;   use Checks;
  with Einfo;    use Einfo;
+ with Elists;   use Elists;
  with Exp_Ch2;  use Exp_Ch2;
  with Exp_Ch9;  use Exp_Ch9;
  with Exp_Imgv; use Exp_Imgv;
*************** with Nmake;    use Nmake;
*** 42,47 ****
--- 43,49 ----
  with Nlists;   use Nlists;
  with Opt;      use Opt;
  with Restrict; use Restrict;
+ with Rident;   use Rident;
  with Rtsfind;  use Rtsfind;
  with Sem;      use Sem;
  with Sem_Ch7;  use Sem_Ch7;
*************** package body Exp_Attr is
*** 136,141 ****
--- 138,148 ----
     --  defining it, is returned. In both cases, inheritance of representation
     --  aspects is thus taken into account.
  
+    function Get_Stream_Convert_Pragma (T : Entity_Id) return Node_Id;
+    --  Given a type, find a corresponding stream convert pragma that applies to
+    --  the implementation base type of this type (Typ). If found, return the
+    --  pragma node, otherwise return Empty if no pragma is found.
+ 
     function Is_Constrained_Packed_Array (Typ : Entity_Id) return Boolean;
     --  Utility for array attributes, returns true on packed constrained
     --  arrays, and on access to same.
*************** package body Exp_Attr is
*** 295,303 ****
  
        --  The generated call is given the provided set of parameters, and then
        --  wrapped in a conversion which converts the result to the target type
  
        Rewrite (N,
!         Unchecked_Convert_To (Etype (N),
            Make_Function_Call (Loc,
              Name => Fnm,
              Parameter_Associations => Args)));
--- 302,312 ----
  
        --  The generated call is given the provided set of parameters, and then
        --  wrapped in a conversion which converts the result to the target type
+       --  We use the base type as the target because a range check may be
+       --  required.
  
        Rewrite (N,
!         Unchecked_Convert_To (Base_Type (Etype (N)),
            Make_Function_Call (Loc,
              Name => Fnm,
              Parameter_Associations => Args)));
*************** package body Exp_Attr is
*** 488,499 ****
     --  Start of processing for Expand_N_Attribute_Reference
  
     begin
!       --  Do required validity checking
  
!       if Validity_Checks_On and Validity_Check_Operands then
           declare
              Expr : Node_Id;
- 
           begin
              Expr := First (Expressions (N));
              while Present (Expr) loop
--- 497,511 ----
     --  Start of processing for Expand_N_Attribute_Reference
  
     begin
!       --  Do required validity checking, if enabled. Do not apply check to
!       --  output parameters of an Asm instruction, since the value of this
!       --  is not set till after the attribute has been elaborated.
  
!       if Validity_Checks_On and then Validity_Check_Operands
!         and then Id /= Attribute_Asm_Output
!       then
           declare
              Expr : Node_Id;
           begin
              Expr := First (Expressions (N));
              while Present (Expr) loop
*************** package body Exp_Attr is
*** 907,918 ****
           if Pent = Standard_Standard
             or else Pent = Standard_ASCII
           then
-             Name_Buffer (1 .. Verbose_Library_Version'Length) :=
-               Verbose_Library_Version;
-             Name_Len := Verbose_Library_Version'Length;
              Rewrite (N,
                Make_String_Literal (Loc,
!                 Strval => String_From_Name_Buffer));
  
           --  All other cases
  
--- 919,927 ----
           if Pent = Standard_Standard
             or else Pent = Standard_ASCII
           then
              Rewrite (N,
                Make_String_Literal (Loc,
!                 Strval => Verbose_Library_Version));
  
           --  All other cases
  
*************** package body Exp_Attr is
*** 1011,1017 ****
        --  Task_Entry_Caller or the Protected_Entry_Caller function.
  
        when Attribute_Caller => Caller : declare
!          Id_Kind    : constant Entity_Id := RTE (RO_AT_Task_ID);
           Ent        : constant Entity_Id := Entity (Pref);
           Conctype   : constant Entity_Id := Scope (Ent);
           Nest_Depth : Integer := 0;
--- 1020,1026 ----
        --  Task_Entry_Caller or the Protected_Entry_Caller function.
  
        when Attribute_Caller => Caller : declare
!          Id_Kind    : constant Entity_Id := RTE (RO_AT_Task_Id);
           Ent        : constant Entity_Id := Entity (Pref);
           Conctype   : constant Entity_Id := Scope (Ent);
           Nest_Depth : Integer := 0;
*************** package body Exp_Attr is
*** 1023,1029 ****
  
           if Is_Protected_Type (Conctype) then
              if Abort_Allowed
!               or else Restrictions (No_Entry_Queue) = False
                or else Number_Entries (Conctype) > 1
              then
                 Name :=
--- 1032,1038 ----
  
           if Is_Protected_Type (Conctype) then
              if Abort_Allowed
!               or else Restriction_Active (No_Entry_Queue) = False
                or else Number_Entries (Conctype) > 1
              then
                 Name :=
*************** package body Exp_Attr is
*** 1181,1193 ****
                    Res := Is_Constrained (Etype (Ent));
                 end if;
  
!                if Res then
!                   Rewrite (N,
!                     New_Reference_To (Standard_True, Loc));
!                else
!                   Rewrite (N,
!                     New_Reference_To (Standard_False, Loc));
!                end if;
              end;
  
           --  Prefix is not an entity name. These are also cases where
--- 1190,1197 ----
                    Res := Is_Constrained (Etype (Ent));
                 end if;
  
!                Rewrite (N,
!                  New_Reference_To (Boolean_Literals (Res), Loc));
              end;
  
           --  Prefix is not an entity name. These are also cases where
*************** package body Exp_Attr is
*** 1195,1210 ****
           --  and type of the prefix.
  
           else
!             if not Is_Variable (Pref)
!               or else Nkind (Pref) = N_Explicit_Dereference
!               or else Is_Constrained (Etype (Pref))
!             then
!                Rewrite (N,
!                  New_Reference_To (Standard_True, Loc));
!             else
!                Rewrite (N,
!                  New_Reference_To (Standard_False, Loc));
!             end if;
           end if;
  
           Analyze_And_Resolve (N, Standard_Boolean);
--- 1199,1211 ----
           --  and type of the prefix.
  
           else
!             Rewrite (N,
!               New_Reference_To (
!                 Boolean_Literals (
!                   not Is_Variable (Pref)
!                     or else Nkind (Pref) = N_Explicit_Dereference
!                     or else Is_Constrained (Etype (Pref))),
!                 Loc));
           end if;
  
           Analyze_And_Resolve (N, Standard_Boolean);
*************** package body Exp_Attr is
*** 1259,1265 ****
           if Is_Protected_Type (Conctyp) then
  
              if Abort_Allowed
!               or else Restrictions (No_Entry_Queue) = False
                or else Number_Entries (Conctyp) > 1
              then
                 Name := New_Reference_To (RTE (RE_Protected_Count), Loc);
--- 1260,1266 ----
           if Is_Protected_Type (Conctyp) then
  
              if Abort_Allowed
!               or else Restriction_Active (No_Entry_Queue) = False
                or else Number_Entries (Conctyp) > 1
              then
                 Name := New_Reference_To (RTE (RE_Protected_Count), Loc);
*************** package body Exp_Attr is
*** 1669,1675 ****
        --  For a task it returns a reference to the _task_id component of
        --  corresponding record:
  
!       --    taskV!(Prefix)._Task_Id, converted to the type Task_ID defined
  
        --  in Ada.Task_Identification.
  
--- 1670,1676 ----
        --  For a task it returns a reference to the _task_id component of
        --  corresponding record:
  
!       --    taskV!(Prefix)._Task_Id, converted to the type Task_Id defined
  
        --  in Ada.Task_Identification.
  
*************** package body Exp_Attr is
*** 1687,1693 ****
              Rewrite (N,
                Unchecked_Convert_To (Id_Kind, Make_Reference (Loc, Pref)));
           else
!             Id_Kind := RTE (RO_AT_Task_ID);
  
              Rewrite (N,
                Unchecked_Convert_To (Id_Kind, Concurrent_Ref (Pref)));
--- 1688,1694 ----
              Rewrite (N,
                Unchecked_Convert_To (Id_Kind, Make_Reference (Loc, Pref)));
           else
!             Id_Kind := RTE (RO_AT_Task_Id);
  
              Rewrite (N,
                Unchecked_Convert_To (Id_Kind, Concurrent_Ref (Pref)));
*************** package body Exp_Attr is
*** 1743,1748 ****
--- 1744,1787 ----
           --  the dispatching (class-wide type) case, where it is a reference
           --  to the dummy object initialized to the right internal tag.
  
+          procedure Freeze_Stream_Subprogram (F : Entity_Id);
+          --  The expansion of the attribute reference may generate a call to
+          --  a user-defined stream subprogram that is frozen by the call. This
+          --  can lead to access-before-elaboration problem if the reference
+          --  appears in an object declaration and the subprogram body has not
+          --  been seen. The freezing of the subprogram requires special code
+          --  because it appears in an expanded context where expressions do
+          --  not freeze their constituents.
+ 
+          ------------------------------
+          -- Freeze_Stream_Subprogram --
+          ------------------------------
+ 
+          procedure Freeze_Stream_Subprogram (F : Entity_Id) is
+             Decl : constant Node_Id := Unit_Declaration_Node (F);
+             Bod  : Node_Id;
+ 
+          begin
+             --  If this is user-defined subprogram, the corresponding
+             --  stream function appears as a renaming-as-body, and the
+             --  user subprogram must be retrieved by tree traversal.
+ 
+             if Present (Decl)
+               and then Nkind (Decl) = N_Subprogram_Declaration
+               and then Present (Corresponding_Body (Decl))
+             then
+                Bod := Corresponding_Body (Decl);
+ 
+                if Nkind (Unit_Declaration_Node (Bod)) =
+                  N_Subprogram_Renaming_Declaration
+                then
+                   Set_Is_Frozen (Entity (Name (Unit_Declaration_Node (Bod))));
+                end if;
+             end if;
+          end Freeze_Stream_Subprogram;
+ 
+       --  Start of processing for Input
+ 
        begin
           --  If no underlying type, we have an error that will be diagnosed
           --  elsewhere, so here we just completely ignore the expansion.
*************** package body Exp_Attr is
*** 1772,1780 ****
              --  from which it is derived. The extra conversion is required
              --  for the derived case.
  
!             Prag :=
!               Get_Rep_Pragma
!                 (Implementation_Base_Type (P_Type), Name_Stream_Convert);
  
              if Present (Prag) then
                 Arg2  := Next (First (Pragma_Argument_Associations (Prag)));
--- 1811,1817 ----
              --  from which it is derived. The extra conversion is required
              --  for the derived case.
  
!             Prag := Get_Stream_Convert_Pragma (P_Type);
  
              if Present (Prag) then
                 Arg2  := Next (First (Pragma_Argument_Associations (Prag)));
*************** package body Exp_Attr is
*** 1867,1873 ****
                    --  Now we need to get the entity for the call, and construct
                    --  a function call node, where we preset a reference to Dnn
                    --  as the controlling argument (doing an unchecked
!                   --  conversion to the classwide tagged type to make it
                    --  look like a real tagged object).
  
                    Fname := Find_Prim_Op (Rtyp, TSS_Stream_Input);
--- 1904,1910 ----
                    --  Now we need to get the entity for the call, and construct
                    --  a function call node, where we preset a reference to Dnn
                    --  as the controlling argument (doing an unchecked
!                   --  conversion to the class-wide tagged type to make it
                    --  look like a real tagged object).
  
                    Fname := Find_Prim_Op (Rtyp, TSS_Stream_Input);
*************** package body Exp_Attr is
*** 1890,1898 ****
--- 1927,1976 ----
                 pragma Assert
                   (Is_Record_Type (U_Type) or else Is_Protected_Type (U_Type));
  
+                --  Ada 2005 (AI-216): Program_Error is raised when executing
+                --  the default implementation of the Input attribute of an
+                --  unchecked union type if the type lacks default discriminant
+                --  values.
+ 
+                if Is_Unchecked_Union (Base_Type (U_Type))
+                  and then not Present (Discriminant_Constraint (U_Type))
+                then
+                   Insert_Action (N,
+                     Make_Raise_Program_Error (Loc,
+                       Reason => PE_Unchecked_Union_Restriction));
+ 
+                   return;
+                end if;
+ 
                 Build_Record_Or_Elementary_Input_Function
                   (Loc, Base_Type (U_Type), Decl, Fname);
                 Insert_Action (N, Decl);
+ 
+                if Nkind (Parent (N)) = N_Object_Declaration
+                  and then Is_Record_Type (U_Type)
+                then
+                   --  The stream function may contain calls to user-defined
+                   --  Read procedures for individual components.
+ 
+                   declare
+                      Comp : Entity_Id;
+                      Func : Entity_Id;
+ 
+                   begin
+                      Comp := First_Component (U_Type);
+                      while Present (Comp) loop
+                         Func :=
+                           Find_Stream_Subprogram
+                             (Etype (Comp), TSS_Stream_Read);
+ 
+                         if Present (Func) then
+                            Freeze_Stream_Subprogram (Func);
+                         end if;
+ 
+                         Next_Component (Comp);
+                      end loop;
+                   end;
+                end if;
              end if;
           end if;
  
*************** package body Exp_Attr is
*** 1909,1914 ****
--- 1987,1996 ----
           Set_Controlling_Argument (Call, Cntrl);
           Rewrite (N, Unchecked_Convert_To (P_Type, Call));
           Analyze_And_Resolve (N, P_Type);
+ 
+          if Nkind (Parent (N)) = N_Object_Declaration then
+             Freeze_Stream_Subprogram (Fname);
+          end if;
        end Input;
  
        -------------------
*************** package body Exp_Attr is
*** 2245,2250 ****
--- 2327,2411 ----
           Analyze_And_Resolve (N, Typ);
        end Mantissa;
  
+       ---------
+       -- Mod --
+       ---------
+ 
+       when Attribute_Mod => Mod_Case : declare
+          Arg  : constant Node_Id := Relocate_Node (First (Exprs));
+          Hi   : constant Node_Id := Type_High_Bound (Etype (Arg));
+          Modv : constant Uint    := Modulus (Btyp);
+ 
+       begin
+ 
+          --  This is not so simple. The issue is what type to use for the
+          --  computation of the modular value.
+ 
+          --  The easy case is when the modulus value is within the bounds
+          --  of the signed integer type of the argument. In this case we can
+          --  just do the computation in that signed integer type, and then
+          --  do an ordinary conversion to the target type.
+ 
+          if Modv <= Expr_Value (Hi) then
+             Rewrite (N,
+               Convert_To (Btyp,
+                 Make_Op_Mod (Loc,
+                   Left_Opnd  => Arg,
+                   Right_Opnd => Make_Integer_Literal (Loc, Modv))));
+ 
+          --  Here we know that the modulus is larger than type'Last of the
+          --  integer type. There are three possible cases to consider:
+ 
+          --    a) The integer value is non-negative. In this case, it is
+          --    returned as the result (since it is less than the modulus).
+ 
+          --    b) The integer value is negative. In this case, we know that
+          --    the result is modulus + value, where the value might be as
+          --    small as -modulus. The trouble is what type do we use to do
+          --    this subtraction. No type will do, since modulus can be as
+          --    big as 2**64, and no integer type accomodates this value.
+          --    Let's do a bit of algebra
+ 
+          --         modulus + value
+          --      =  modulus - (-value)
+          --      =  (modulus - 1) - (-value - 1)
+ 
+          --    Now modulus - 1 is certainly in range of the modular type.
+          --    -value is in the range 1 .. modulus, so -value -1 is in the
+          --    range 0 .. modulus-1 which is in range of the modular type.
+          --    Furthermore, (-value - 1) can be expressed as -(value + 1)
+          --    which we can compute using the integer base type.
+ 
+          else
+             Rewrite (N,
+               Make_Conditional_Expression (Loc,
+                 Expressions => New_List (
+                   Make_Op_Ge (Loc,
+                     Left_Opnd  => Duplicate_Subexpr (Arg),
+                     Right_Opnd => Make_Integer_Literal (Loc, 0)),
+ 
+                   Convert_To (Btyp,
+                     Duplicate_Subexpr_No_Checks (Arg)),
+ 
+                   Make_Op_Subtract (Loc,
+                     Left_Opnd =>
+                       Make_Integer_Literal (Loc,
+                         Intval => Modv - 1),
+                     Right_Opnd =>
+                       Convert_To (Btyp,
+                         Make_Op_Minus (Loc,
+                           Right_Opnd =>
+                             Make_Op_Add (Loc,
+                               Left_Opnd  => Duplicate_Subexpr_No_Checks (Arg),
+                               Right_Opnd =>
+                                 Make_Integer_Literal (Loc,
+                                   Intval => 1))))))));
+ 
+          end if;
+ 
+          Analyze_And_Resolve (N, Btyp);
+       end Mod_Case;
+ 
        -----------
        -- Model --
        -----------
*************** package body Exp_Attr is
*** 2303,2311 ****
              --  it is derived to type strmtyp. The conversion to acttyp is
              --  required for the derived case.
  
!             Prag :=
!               Get_Rep_Pragma
!                 (Implementation_Base_Type (P_Type), Name_Stream_Convert);
  
              if Present (Prag) then
                 Arg3 :=
--- 2464,2470 ----
              --  it is derived to type strmtyp. The conversion to acttyp is
              --  required for the derived case.
  
!             Prag := Get_Stream_Convert_Pragma (P_Type);
  
              if Present (Prag) then
                 Arg3 :=
*************** package body Exp_Attr is
*** 2400,2405 ****
--- 2559,2579 ----
                 pragma Assert
                   (Is_Record_Type (U_Type) or else Is_Protected_Type (U_Type));
  
+                --  Ada 2005 (AI-216): Program_Error is raised when executing
+                --  the default implementation of the Output attribute of an
+                --  unchecked union type if the type lacks default discriminant
+                --  values.
+ 
+                if Is_Unchecked_Union (Base_Type (U_Type))
+                  and then not Present (Discriminant_Constraint (U_Type))
+                then
+                   Insert_Action (N,
+                     Make_Raise_Program_Error (Loc,
+                       Reason => PE_Unchecked_Union_Restriction));
+ 
+                   return;
+                end if;
+ 
                 Build_Record_Or_Elementary_Output_Procedure
                   (Loc, Base_Type (U_Type), Decl, Pname);
                 Insert_Action (N, Decl);
*************** package body Exp_Attr is
*** 2703,2711 ****
              --  where Itemx is the expression of the type conversion (i.e.
              --  the actual object), and typex is the type of Itemx.
  
!             Prag :=
!               Get_Rep_Pragma
!                 (Implementation_Base_Type (P_Type), Name_Stream_Convert);
  
              if Present (Prag) then
                 Arg2  := Next (First (Pragma_Argument_Associations (Prag)));
--- 2877,2883 ----
              --  where Itemx is the expression of the type conversion (i.e.
              --  the actual object), and typex is the type of Itemx.
  
!             Prag := Get_Stream_Convert_Pragma (P_Type);
  
              if Present (Prag) then
                 Arg2  := Next (First (Pragma_Argument_Associations (Prag)));
*************** package body Exp_Attr is
*** 2786,2798 ****
                 pragma Assert
                   (Is_Record_Type (U_Type) or else Is_Protected_Type (U_Type));
  
                 if Has_Discriminants (U_Type)
                   and then Present
                     (Discriminant_Default_Value (First_Discriminant (U_Type)))
                 then
                    Build_Mutable_Record_Read_Procedure
                      (Loc, Base_Type (U_Type), Decl, Pname);
- 
                 else
                    Build_Record_Read_Procedure
                      (Loc, Base_Type (U_Type), Decl, Pname);
--- 2958,2979 ----
                 pragma Assert
                   (Is_Record_Type (U_Type) or else Is_Protected_Type (U_Type));
  
+                --  Ada 2005 (AI-216): Program_Error is raised when executing
+                --  the default implementation of the Read attribute of an
+                --  Unchecked_Union type.
+ 
+                if Is_Unchecked_Union (Base_Type (U_Type)) then
+                   Insert_Action (N,
+                     Make_Raise_Program_Error (Loc,
+                       Reason => PE_Unchecked_Union_Restriction));
+                end if;
+ 
                 if Has_Discriminants (U_Type)
                   and then Present
                     (Discriminant_Default_Value (First_Discriminant (U_Type)))
                 then
                    Build_Mutable_Record_Read_Procedure
                      (Loc, Base_Type (U_Type), Decl, Pname);
                 else
                    Build_Record_Read_Procedure
                      (Loc, Base_Type (U_Type), Decl, Pname);
*************** package body Exp_Attr is
*** 2973,2979 ****
              Rewrite (Prefix (N), New_Occurrence_Of (Entity (Pref), Loc));
              return;
  
!          --  For x'Size applied to an object of a class wide type, transform
           --  X'Size into a call to the primitive operation _Size applied to X.
  
           elsif Is_Class_Wide_Type (Ptyp) then
--- 3154,3160 ----
              Rewrite (Prefix (N), New_Occurrence_Of (Entity (Pref), Loc));
              return;
  
!          --  For x'Size applied to an object of a class-wide type, transform
           --  X'Size into a call to the primitive operation _Size applied to X.
  
           elsif Is_Class_Wide_Type (Ptyp) then
*************** package body Exp_Attr is
*** 3052,3059 ****
           --  Common processing for record and array component case
  
           if Siz /= 0 then
!             Rewrite (N,
!               Make_Integer_Literal (Loc, Siz));
  
              Analyze_And_Resolve (N, Typ);
  
--- 3233,3239 ----
           --  Common processing for record and array component case
  
           if Siz /= 0 then
!             Rewrite (N, Make_Integer_Literal (Loc, Siz));
  
              Analyze_And_Resolve (N, Typ);
  
*************** package body Exp_Attr is
*** 3184,3189 ****
--- 3364,3392 ----
           end if;
        end Storage_Size;
  
+       -----------------
+       -- Stream_Size --
+       -----------------
+ 
+       when Attribute_Stream_Size => Stream_Size : declare
+          Ptyp : constant Entity_Id := Etype (Pref);
+          Size : Int;
+ 
+       begin
+          --  If we have a Stream_Size clause for this type use it, otherwise
+          --  the Stream_Size if the size of the type.
+ 
+          if Has_Stream_Size_Clause (Ptyp) then
+             Size := UI_To_Int
+               (Static_Integer (Expression (Stream_Size_Clause (Ptyp))));
+          else
+             Size := UI_To_Int (Esize (Ptyp));
+          end if;
+ 
+          Rewrite (N, Make_Integer_Literal (Loc, Intval => Size));
+          Analyze_And_Resolve (N, Typ);
+       end Stream_Size;
+ 
        ----------
        -- Succ --
        ----------
*************** package body Exp_Attr is
*** 3624,3631 ****
           --     type(X)'Pos (X) >= 0
  
           --  We can't quite generate it that way because of the requirement
!          --  for the non-standard second argument of False, so we have to
!          --  explicitly create:
  
           --     _rep_to_pos (X, False) >= 0
  
--- 3827,3834 ----
           --     type(X)'Pos (X) >= 0
  
           --  We can't quite generate it that way because of the requirement
!          --  for the non-standard second argument of False in the resulting
!          --  rep_to_pos call, so we have to explicitly create:
  
           --     _rep_to_pos (X, False) >= 0
  
*************** package body Exp_Attr is
*** 3634,3640 ****
  
           --    _rep_to_pos (X, False) >= 0
           --      and then
!          --     (X >= type(X)'First and then type(X)'Last <= X)
  
           elsif Is_Enumeration_Type (Ptyp)
             and then Present (Enum_Pos_To_Rep (Base_Type (Ptyp)))
--- 3837,3843 ----
  
           --    _rep_to_pos (X, False) >= 0
           --      and then
!          --       (X >= type(X)'First and then type(X)'Last <= X)
  
           elsif Is_Enumeration_Type (Ptyp)
             and then Present (Enum_Pos_To_Rep (Base_Type (Ptyp)))
*************** package body Exp_Attr is
*** 3709,3715 ****
  
           --  But that's precisely what won't work because of possible
           --  unwanted optimization (and indeed the basic motivation for
!          --  the Valid attribute -is exactly that this test does not work.
           --  What will work is:
  
           --     Btyp!(X) >= Btyp!(type(X)'First)
--- 3912,3918 ----
  
           --  But that's precisely what won't work because of possible
           --  unwanted optimization (and indeed the basic motivation for
!          --  the Valid attribute is exactly that this test does not work!)
           --  What will work is:
  
           --     Btyp!(X) >= Btyp!(type(X)'First)
*************** package body Exp_Attr is
*** 3818,3823 ****
--- 4021,4059 ----
           Analyze_And_Resolve (N, Standard_Wide_String);
        end Wide_Image;
  
+       ---------------------
+       -- Wide_Wide_Image --
+       ---------------------
+ 
+       --  We expand typ'Wide_Wide_Image (X) into
+ 
+       --    String_To_Wide_Wide_String
+       --      (typ'Image (X), Wide_Character_Encoding_Method)
+ 
+       --  This works in all cases because String_To_Wide_Wide_String converts
+       --  any wide character escape sequences resulting from the Image call to
+       --  the proper Wide_Character equivalent
+ 
+       --  not quite right for typ = Wide_Wide_Character ???
+ 
+       when Attribute_Wide_Wide_Image => Wide_Wide_Image :
+       begin
+          Rewrite (N,
+            Make_Function_Call (Loc,
+              Name => New_Reference_To
+                (RTE (RE_String_To_Wide_Wide_String), Loc),
+              Parameter_Associations => New_List (
+                Make_Attribute_Reference (Loc,
+                  Prefix         => Pref,
+                  Attribute_Name => Name_Image,
+                  Expressions    => Exprs),
+ 
+                Make_Integer_Literal (Loc,
+                  Intval => Int (Wide_Character_Encoding_Method)))));
+ 
+          Analyze_And_Resolve (N, Standard_Wide_Wide_String);
+       end Wide_Wide_Image;
+ 
        ----------------
        -- Wide_Value --
        ----------------
*************** package body Exp_Attr is
*** 3856,3861 ****
--- 4092,4144 ----
           Analyze_And_Resolve (N, Typ);
        end Wide_Value;
  
+       ---------------------
+       -- Wide_Wide_Value --
+       ---------------------
+ 
+       --  We expand typ'Wide_Value_Value (X) into
+ 
+       --    typ'Value
+       --      (Wide_Wide_String_To_String (X, Wide_Character_Encoding_Method))
+ 
+       --  Wide_Wide_String_To_String is a runtime function that converts its
+       --  wide string argument to String, converting any non-translatable
+       --  characters into appropriate escape sequences. This preserves the
+       --  required semantics of Wide_Wide_Value in all cases, and results in a
+       --  very simple implementation approach.
+ 
+       --  It's not quite right where typ = Wide_Wide_Character, because the
+       --  encoding method may not cover the whole character type ???
+ 
+       when Attribute_Wide_Wide_Value => Wide_Wide_Value :
+       begin
+          Rewrite (N,
+            Make_Attribute_Reference (Loc,
+              Prefix         => Pref,
+              Attribute_Name => Name_Value,
+ 
+              Expressions    => New_List (
+                Make_Function_Call (Loc,
+                  Name =>
+                    New_Reference_To (RTE (RE_Wide_Wide_String_To_String), Loc),
+ 
+                  Parameter_Associations => New_List (
+                    Relocate_Node (First (Exprs)),
+                    Make_Integer_Literal (Loc,
+                      Intval => Int (Wide_Character_Encoding_Method)))))));
+ 
+          Analyze_And_Resolve (N, Typ);
+       end Wide_Wide_Value;
+ 
+       ---------------------
+       -- Wide_Wide_Width --
+       ---------------------
+ 
+       --  Wide_Wide_Width attribute is handled in separate unit Exp_Imgv
+ 
+       when Attribute_Wide_Wide_Width =>
+          Exp_Imgv.Expand_Width_Attribute (N, Wide_Wide);
+ 
        ----------------
        -- Wide_Width --
        ----------------
*************** package body Exp_Attr is
*** 3863,3869 ****
        --  Wide_Width attribute is handled in separate unit Exp_Imgv
  
        when Attribute_Wide_Width =>
!          Exp_Imgv.Expand_Width_Attribute (N, Wide => True);
  
        -----------
        -- Width --
--- 4146,4152 ----
        --  Wide_Width attribute is handled in separate unit Exp_Imgv
  
        when Attribute_Wide_Width =>
!          Exp_Imgv.Expand_Width_Attribute (N, Wide);
  
        -----------
        -- Width --
*************** package body Exp_Attr is
*** 3872,3878 ****
        --  Width attribute is handled in separate unit Exp_Imgv
  
        when Attribute_Width =>
!          Exp_Imgv.Expand_Width_Attribute (N, Wide => False);
  
        -----------
        -- Write --
--- 4155,4161 ----
        --  Width attribute is handled in separate unit Exp_Imgv
  
        when Attribute_Width =>
!          Exp_Imgv.Expand_Width_Attribute (N, Normal);
  
        -----------
        -- Write --
*************** package body Exp_Attr is
*** 3916,3924 ****
              --  it is derived to type strmtyp. The conversion to acttyp is
              --  required for the derived case.
  
!             Prag :=
!               Get_Rep_Pragma
!                 (Implementation_Base_Type (P_Type), Name_Stream_Convert);
  
              if Present (Prag) then
                 Arg3 :=
--- 4199,4205 ----
              --  it is derived to type strmtyp. The conversion to acttyp is
              --  required for the derived case.
  
!             Prag := Get_Stream_Convert_Pragma (P_Type);
  
              if Present (Prag) then
                 Arg3 :=
*************** package body Exp_Attr is
*** 3967,3979 ****
                 pragma Assert
                   (Is_Record_Type (U_Type) or else Is_Protected_Type (U_Type));
  
                 if Has_Discriminants (U_Type)
                   and then Present
                     (Discriminant_Default_Value (First_Discriminant (U_Type)))
                 then
                    Build_Mutable_Record_Write_Procedure
                      (Loc, Base_Type (U_Type), Decl, Pname);
- 
                 else
                    Build_Record_Write_Procedure
                      (Loc, Base_Type (U_Type), Decl, Pname);
--- 4248,4269 ----
                 pragma Assert
                   (Is_Record_Type (U_Type) or else Is_Protected_Type (U_Type));
  
+                --  Ada 2005 (AI-216): Program_Error is raised when executing
+                --  the default implementation of the Write attribute of an
+                --  Unchecked_Union type.
+ 
+                if Is_Unchecked_Union (Base_Type (U_Type)) then
+                   Insert_Action (N,
+                     Make_Raise_Program_Error (Loc,
+                       Reason => PE_Unchecked_Union_Restriction));
+                end if;
+ 
                 if Has_Discriminants (U_Type)
                   and then Present
                     (Discriminant_Default_Value (First_Discriminant (U_Type)))
                 then
                    Build_Mutable_Record_Write_Procedure
                      (Loc, Base_Type (U_Type), Decl, Pname);
                 else
                    Build_Record_Write_Procedure
                      (Loc, Base_Type (U_Type), Decl, Pname);
*************** package body Exp_Attr is
*** 4042,4047 ****
--- 4332,4338 ----
             Attribute_Digits                       |
             Attribute_Emax                         |
             Attribute_Epsilon                      |
+            Attribute_Has_Access_Values            |
             Attribute_Has_Discriminants            |
             Attribute_Large                        |
             Attribute_Machine_Emax                 |
*************** package body Exp_Attr is
*** 4130,4136 ****
                      New_Reference_To (Base_Type (Etype (Prefix (N))), Loc),
                    Attribute_Name => Cnam)),
            Reason => CE_Overflow_Check_Failed));
- 
     end Expand_Pred_Succ;
  
     ------------------------
--- 4421,4426 ----
*************** package body Exp_Attr is
*** 4166,4172 ****
        end if;
  
        return Proc;
- 
     end Find_Inherited_TSS;
  
     ----------------------------
--- 4456,4461 ----
*************** package body Exp_Attr is
*** 4215,4220 ****
--- 4504,4549 ----
        return Etype (Indx);
     end Get_Index_Subtype;
  
+    -------------------------------
+    -- Get_Stream_Convert_Pragma --
+    -------------------------------
+ 
+    function Get_Stream_Convert_Pragma (T : Entity_Id) return Node_Id is
+       Typ : Entity_Id;
+       N   : Node_Id;
+ 
+    begin
+       --  Note: we cannot use Get_Rep_Pragma here because of the peculiarity
+       --  that a stream convert pragma for a tagged type is not inherited from
+       --  its parent. Probably what is wrong here is that it is basically
+       --  incorrect to consider a stream convert pragma to be a representation
+       --  pragma at all ???
+ 
+       N := First_Rep_Item (Implementation_Base_Type (T));
+       while Present (N) loop
+          if Nkind (N) = N_Pragma and then Chars (N) = Name_Stream_Convert then
+ 
+             --  For tagged types this pragma is not inherited, so we
+             --  must verify that it is defined for the given type and
+             --  not an ancestor.
+ 
+             Typ :=
+               Entity (Expression (First (Pragma_Argument_Associations (N))));
+ 
+             if not Is_Tagged_Type (T)
+               or else T = Typ
+               or else (Is_Private_Type (Typ) and then T = Full_View (Typ))
+             then
+                return N;
+             end if;
+          end if;
+ 
+          Next_Rep_Item (N);
+       end loop;
+ 
+       return Empty;
+    end Get_Stream_Convert_Pragma;
+ 
     ---------------------------------
     -- Is_Constrained_Packed_Array --
     ---------------------------------
diff -Nrcpad gcc-3.4.3/gcc/ada/exp_attr.ads gcc-4.0.0/gcc/ada/exp_attr.ads
*** gcc-3.4.3/gcc/ada/exp_attr.ads	Thu Apr 24 17:54:00 2003
--- gcc-4.0.0/gcc/ada/exp_attr.ads	Mon Jan  3 15:43:24 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --        Copyright (C) 1992,1993,1994 Free Software Foundation, Inc.       --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 1992-2005, Free Software Foundation, Inc.       --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 29,33 ****
  with Types; use Types;
  
  package Exp_Attr is
!    procedure Expand_N_Attribute_Reference       (N : Node_Id);
  end Exp_Attr;
--- 29,35 ----
  with Types; use Types;
  
  package Exp_Attr is
! 
!    procedure Expand_N_Attribute_Reference (N : Node_Id);
! 
  end Exp_Attr;
diff -Nrcpad gcc-3.4.3/gcc/ada/exp_ch11.adb gcc-4.0.0/gcc/ada/exp_ch11.adb
*** gcc-3.4.3/gcc/ada/exp_ch11.adb	Mon Jan  5 15:20:43 2004
--- gcc-4.0.0/gcc/ada/exp_ch11.adb	Thu Feb 10 13:50:42 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Nmake;    use Nmake;
*** 40,45 ****
--- 40,46 ----
  with Opt;      use Opt;
  with Rtsfind;  use Rtsfind;
  with Restrict; use Restrict;
+ with Rident;   use Rident;
  with Sem;      use Sem;
  with Sem_Ch5;  use Sem_Ch5;
  with Sem_Ch8;  use Sem_Ch8;
*************** package body Exp_Ch11 is
*** 141,147 ****
           return;
        end if;
  
!       if Restrictions (No_Exception_Handlers) then
           return;
        end if;
  
--- 142,148 ----
           return;
        end if;
  
!       if Restriction_Active (No_Exception_Handlers) then
           return;
        end if;
  
*************** package body Exp_Ch11 is
*** 920,926 ****
        --  Lang component: 'A'
  
        Append_To (L,
!         Make_Character_Literal (Loc, Name_uA, Get_Char_Code ('A')));
  
        --  Name_Length component: Nam'Length
  
--- 921,929 ----
        --  Lang component: 'A'
  
        Append_To (L,
!         Make_Character_Literal (Loc,
!           Chars              =>  Name_uA,
!           Char_Literal_Value =>  UI_From_Int (Character'Pos ('A'))));
  
        --  Name_Length component: Nam'Length
  
*************** package body Exp_Ch11 is
*** 953,960 ****
  
        --  Register_Exception (except'Unchecked_Access);
  
!       if not Restrictions (No_Exception_Handlers)
!         and then not Restrictions (No_Exception_Registration)
        then
           L := New_List (
                  Make_Procedure_Call_Statement (Loc,
--- 956,963 ----
  
        --  Register_Exception (except'Unchecked_Access);
  
!       if not Restriction_Active (No_Exception_Handlers)
!         and then not Restriction_Active (No_Exception_Registration)
        then
           L := New_List (
                  Make_Procedure_Call_Statement (Loc,
*************** package body Exp_Ch11 is
*** 1005,1011 ****
     procedure Expand_N_Handled_Sequence_Of_Statements (N : Node_Id) is
     begin
        if Present (Exception_Handlers (N))
!         and then not Restrictions (No_Exception_Handlers)
        then
           Expand_Exception_Handlers (N);
        end if;
--- 1008,1014 ----
     procedure Expand_N_Handled_Sequence_Of_Statements (N : Node_Id) is
     begin
        if Present (Exception_Handlers (N))
!         and then not Restriction_Active (No_Exception_Handlers)
        then
           Expand_Exception_Handlers (N);
        end if;
*************** package body Exp_Ch11 is
*** 1135,1141 ****
              --  Build a C-compatible string in case of no exception handlers,
              --  since this is what the last chance handler is expecting.
  
!             if Restrictions (No_Exception_Handlers) then
  
                 --  Generate an empty message if configuration pragma
                 --  Suppress_Exception_Locations is set for this unit.
--- 1138,1144 ----
              --  Build a C-compatible string in case of no exception handlers,
              --  since this is what the last chance handler is expecting.
  
!             if Restriction_Active (No_Exception_Handlers) then
  
                 --  Generate an empty message if configuration pragma
                 --  Suppress_Exception_Locations is set for this unit.
*************** package body Exp_Ch11 is
*** 1330,1336 ****
           return;
        end if;
  
!       if Restrictions (No_Exception_Handlers) then
           return;
        end if;
  
--- 1333,1339 ----
           return;
        end if;
  
!       if Restriction_Active (No_Exception_Handlers) then
           return;
        end if;
  
*************** package body Exp_Ch11 is
*** 1347,1354 ****
        --  The same consideration applies for No_Exception_Handlers (which
        --  is also set in High_Integrity_Mode).
  
!       if Restrictions (No_Exceptions)
!         or Restrictions (No_Exception_Handlers)
        then
           return;
        end if;
--- 1350,1357 ----
        --  The same consideration applies for No_Exception_Handlers (which
        --  is also set in High_Integrity_Mode).
  
!       if Restriction_Active (No_Exceptions)
!         or Restriction_Active (No_Exception_Handlers)
        then
           return;
        end if;
*************** package body Exp_Ch11 is
*** 1684,1690 ****
  
        --  Do not generate if no exceptions
  
!       if Restrictions (No_Exception_Handlers) then
           return;
        end if;
  
--- 1687,1693 ----
  
        --  Do not generate if no exceptions
  
!       if Restriction_Active (No_Exception_Handlers) then
           return;
        end if;
  
*************** package body Exp_Ch11 is
*** 1716,1722 ****
  
        --  Do not generate if no exceptions
  
!       if Restrictions (No_Exception_Handlers) then
           return;
        end if;
  
--- 1719,1725 ----
  
        --  Do not generate if no exceptions
  
!       if Restriction_Active (No_Exception_Handlers) then
           return;
        end if;
  
*************** package body Exp_Ch11 is
*** 1762,1768 ****
  
        --  Nothing to do if no exceptions
  
!       if Restrictions (No_Exception_Handlers) then
           return;
        end if;
  
--- 1765,1771 ----
  
        --  Nothing to do if no exceptions
  
!       if Restriction_Active (No_Exception_Handlers) then
           return;
        end if;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/exp_ch13.adb gcc-4.0.0/gcc/ada/exp_ch13.adb
*** gcc-3.4.3/gcc/ada/exp_ch13.adb	Thu Oct 23 11:57:52 2003
--- gcc-4.0.0/gcc/ada/exp_ch13.adb	Thu Mar 17 19:53:05 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Exp_Ch13 is
*** 93,99 ****
  
              declare
                 Decl : constant Node_Id := Declaration_Node (Ent);
- 
              begin
                 if Nkind (Decl) = N_Object_Declaration
                    and then Present (Expression (Decl))
--- 93,98 ----
*************** package body Exp_Ch13 is
*** 244,249 ****
--- 243,249 ----
        In_Other_Scope : Boolean;
        In_Outer_Scope : Boolean;
        Decl           : Node_Id;
+       Delete         : Boolean := False;
  
     begin
        --  For object, with address clause, check alignment is OK
*************** package body Exp_Ch13 is
*** 318,324 ****
        --  If type, freeze the type
  
        if Is_Type (E) then
!          Freeze_Type (N);
  
           --  And for enumeration type, build the enumeration tables
  
--- 318,324 ----
        --  If type, freeze the type
  
        if Is_Type (E) then
!          Delete := Freeze_Type (N);
  
           --  And for enumeration type, build the enumeration tables
  
*************** package body Exp_Ch13 is
*** 389,394 ****
--- 389,400 ----
           end loop;
        end if;
  
+       --  If we are to delete this N_Freeze_Entity, do so by rewriting
+       --  so that a loop on all nodes being inserted will work propertly.
+       if Delete then
+          Rewrite (N, Make_Null_Statement (Sloc (N)));
+       end if;
+ 
        if In_Other_Scope then
           if Ekind (Current_Scope) = E_Package then
              End_Package_Scope (E_Scope);
diff -Nrcpad gcc-3.4.3/gcc/ada/exp_ch2.adb gcc-4.0.0/gcc/ada/exp_ch2.adb
*** gcc-3.4.3/gcc/ada/exp_ch2.adb	Tue Oct 21 13:41:59 2003
--- gcc-4.0.0/gcc/ada/exp_ch2.adb	Wed Dec  8 11:49:37 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Sem_Res;  use Sem_Res;
*** 41,46 ****
--- 41,47 ----
  with Sem_Util; use Sem_Util;
  with Sem_Warn; use Sem_Warn;
  with Sinfo;    use Sinfo;
+ with Snames;   use Snames;
  with Stand;    use Stand;
  with Tbuild;   use Tbuild;
  with Uintp;    use Uintp;
*************** package body Exp_Ch2 is
*** 55,63 ****
     --  Given a node N for a variable whose Current_Value field is set.
     --  If the node is for a discrete type, replaces the node with a
     --  copy of the referenced value. This provides a limited form of
!    --  value propagation for variables which are initialized and have
!    --  not been modified at the time of reference. The call has no
!    --  effect if the Current_Value refers to a conditional with a
     --  condition other than equality.
  
     procedure Expand_Discriminant (N : Node_Id);
--- 56,64 ----
     --  Given a node N for a variable whose Current_Value field is set.
     --  If the node is for a discrete type, replaces the node with a
     --  copy of the referenced value. This provides a limited form of
!    --  value propagation for variables which are initialized or assigned
!    --  not been further modified at the time of reference. The call has
!    --  no effect if the Current_Value refers to a conditional with a
     --  condition other than equality.
  
     procedure Expand_Discriminant (N : Node_Id);
*************** package body Exp_Ch2 is
*** 158,168 ****
                 CS := Scope (CS);
  
              --  Otherwise, the reference is dubious, and we cannot be
!             --  sure that it is safe to do the replacement. Note in
!             --  particular, in a loop (except for the special case
!             --  tested above), we cannot safely do a replacement since
!             --  there may be an assignment at the bottom of the loop
!             --  that will affect a reference at the top of the loop.
  
              else
                 exit;
--- 159,165 ----
                 CS := Scope (CS);
  
              --  Otherwise, the reference is dubious, and we cannot be
!             --  sure that it is safe to do the replacement.
  
              else
                 exit;
*************** package body Exp_Ch2 is
*** 177,182 ****
--- 174,183 ----
     begin
        if True
  
+          --  No replacement if value raises constraint error
+ 
+          and then Nkind (CV) /= N_Raise_Constraint_Error
+ 
           --  Do this only for discrete types
  
           and then Is_Discrete_Type (T)
*************** package body Exp_Ch2 is
*** 216,221 ****
--- 217,230 ----
           --  issue that they do not get replaced when they could be).
  
           and then Nkind (Parent (N)) /= N_Pragma_Argument_Association
+ 
+          --  Same for Asm_Input and Asm_Output attribute references
+ 
+          and then not (Nkind (Parent (N)) = N_Attribute_Reference
+                          and then
+                            (Attribute_Name (Parent (N)) = Name_Asm_Input
+                               or else
+                             Attribute_Name (Parent (N)) = Name_Asm_Output))
        then
           --  Case of Current_Value is a compile time known value
  
*************** package body Exp_Ch2 is
*** 410,416 ****
                 or else
               Ekind (E) = E_Out_Parameter)
          and then Present (Current_Value (E))
-         and then Nkind (Current_Value (E)) /= N_Raise_Constraint_Error
        then
           Expand_Current_Value (N);
  
--- 419,424 ----
*************** package body Exp_Ch2 is
*** 510,517 ****
        P_Comp_Ref :=
          Make_Selected_Component (Loc,
            Prefix =>
!             Unchecked_Convert_To (Parm_Type,
!               New_Reference_To (Addr_Ent, Loc)),
            Selector_Name =>
              New_Reference_To (Entry_Component (Ent_Formal), Loc));
  
--- 518,526 ----
        P_Comp_Ref :=
          Make_Selected_Component (Loc,
            Prefix =>
!             Make_Explicit_Dereference (Loc,
!               Unchecked_Convert_To (Parm_Type,
!                 New_Reference_To (Addr_Ent, Loc))),
            Selector_Name =>
              New_Reference_To (Entry_Component (Ent_Formal), Loc));
  
*************** package body Exp_Ch2 is
*** 652,658 ****
        Set_Etype  (N, Etype (Prival (E)));
        Scop := Current_Scope;
  
!       --  Find entity for protected operation, which must be on scope stack.
  
        while not Is_Protected_Type (Scope (Scop)) loop
           Scop := Scope (Scop);
--- 661,667 ----
        Set_Etype  (N, Etype (Prival (E)));
        Scop := Current_Scope;
  
!       --  Find entity for protected operation, which must be on scope stack
  
        while not Is_Protected_Type (Scope (Scop)) loop
           Scop := Scope (Scop);
*************** package body Exp_Ch2 is
*** 696,701 ****
--- 705,713 ----
     --  For a formal of a task entity, the formal is rewritten as a local
     --  renaming.
  
+    --  In addition, a formal that is marked volatile because it is aliased
+    --  through an address clause is rewritten as dereference as well.
+ 
     function Param_Entity (N : Node_Id) return Entity_Id is
     begin
        --  Simple reference case
*************** package body Exp_Ch2 is
*** 723,728 ****
--- 735,743 ----
                    if Present (Entry_Formal (Entity (S))) then
                       return Entry_Formal (Entity (S));
                    end if;
+ 
+                elsif Nkind (Original_Node (N)) = N_Identifier then
+                   return Param_Entity (Original_Node (N));
                 end if;
              end;
           end if;
diff -Nrcpad gcc-3.4.3/gcc/ada/exp_ch3.adb gcc-4.0.0/gcc/ada/exp_ch3.adb
*** gcc-3.4.3/gcc/ada/exp_ch3.adb	Tue Jan 13 11:51:31 2004
--- gcc-4.0.0/gcc/ada/exp_ch3.adb	Thu Mar 17 19:53:05 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Nlists;   use Nlists;
*** 46,51 ****
--- 46,52 ----
  with Nmake;    use Nmake;
  with Opt;      use Opt;
  with Restrict; use Restrict;
+ with Rident;   use Rident;
  with Rtsfind;  use Rtsfind;
  with Sem;      use Sem;
  with Sem_Ch3;  use Sem_Ch3;
*************** with Sem_Res;  use Sem_Res;
*** 56,66 ****
  with Sem_Util; use Sem_Util;
  with Sinfo;    use Sinfo;
  with Stand;    use Stand;
- with Stringt;  use Stringt;
  with Snames;   use Snames;
  with Tbuild;   use Tbuild;
  with Ttypes;   use Ttypes;
- with Uintp;    use Uintp;
  with Validsw;  use Validsw;
  
  package body Exp_Ch3 is
--- 57,65 ----
*************** package body Exp_Ch3 is
*** 89,96 ****
  
     function Build_Discriminant_Formals
       (Rec_Id : Entity_Id;
!       Use_Dl : Boolean)
!       return   List_Id;
     --  This function uses the discriminants of a type to build a list of
     --  formal parameters, used in the following function. If the flag Use_Dl
     --  is set, the list is built using the already defined discriminals
--- 88,94 ----
  
     function Build_Discriminant_Formals
       (Rec_Id : Entity_Id;
!       Use_Dl : Boolean) return List_Id;
     --  This function uses the discriminants of a type to build a list of
     --  formal parameters, used in the following function. If the flag Use_Dl
     --  is set, the list is built using the already defined discriminals
*************** package body Exp_Ch3 is
*** 114,119 ****
--- 112,123 ----
     --  Build record initialization procedure. N is the type declaration
     --  node, and Pe is the corresponding entity for the record type.
  
+    procedure Build_Slice_Assignment (Typ : Entity_Id);
+    --  Build assignment procedure for one-dimensional arrays of controlled
+    --  types. Other array and slice assignments are expanded in-line, but
+    --  the code expansion for controlled components (when control actions
+    --  are active) can lead to very large blocks that GCC3 handles poorly.
+ 
     procedure Build_Variant_Record_Equality (Typ  : Entity_Id);
     --  Create An Equality function for the non-tagged variant record 'Typ'
     --  and attach it to the TSS list
*************** package body Exp_Ch3 is
*** 173,193 ****
     --  Check if E is defined in the RTL (in a child of Ada or System). Used
     --  to avoid to bring in the overhead of _Input, _Output for tagged types.
  
!    function Make_Eq_Case (Node : Node_Id; CL : Node_Id) return List_Id;
     --  Building block for variant record equality. Defined to share the
     --  code between the tagged and non-tagged case. Given a Component_List
     --  node CL, it generates an 'if' followed by a 'case' statement that
     --  compares all components of local temporaries named X and Y (that
!    --  are declared as formals at some upper level). Node provides the
!    --  Sloc to be used for the generated code.
  
!    function Make_Eq_If (Node : Node_Id; L : List_Id) return Node_Id;
     --  Building block for variant record equality. Defined to share the
     --  code between the tagged and non-tagged case. Given the list of
     --  components (or discriminants) L, it generates a return statement
     --  that compares all components of local temporaries named X and Y
!    --  (that are declared as formals at some upper level). Node provides
!    --  the Sloc to be used for the generated code.
  
     procedure Make_Predefined_Primitive_Specs
       (Tag_Typ     : Entity_Id;
--- 177,203 ----
     --  Check if E is defined in the RTL (in a child of Ada or System). Used
     --  to avoid to bring in the overhead of _Input, _Output for tagged types.
  
!    function Make_Eq_Case
!      (E     : Entity_Id;
!       CL    : Node_Id;
!       Discr : Entity_Id := Empty) return List_Id;
     --  Building block for variant record equality. Defined to share the
     --  code between the tagged and non-tagged case. Given a Component_List
     --  node CL, it generates an 'if' followed by a 'case' statement that
     --  compares all components of local temporaries named X and Y (that
!    --  are declared as formals at some upper level). E provides the Sloc to be
!    --  used for the generated code. Discr is used as the case statement switch
!    --  in the case of Unchecked_Union equality.
  
!    function Make_Eq_If
!      (E : Entity_Id;
!       L : List_Id) return Node_Id;
     --  Building block for variant record equality. Defined to share the
     --  code between the tagged and non-tagged case. Given the list of
     --  components (or discriminants) L, it generates a return statement
     --  that compares all components of local temporaries named X and Y
!    --  (that are declared as formals at some upper level). E provides the Sloc
!    --  to be used for the generated code.
  
     procedure Make_Predefined_Primitive_Specs
       (Tag_Typ     : Entity_Id;
*************** package body Exp_Ch3 is
*** 239,246 ****
        Name     : Name_Id;
        Profile  : List_Id;
        Ret_Type : Entity_Id := Empty;
!       For_Body : Boolean   := False)
!       return     Node_Id;
     --  This function generates the appropriate expansion for a predefined
     --  primitive operation specified by its name, parameter profile and
     --  return type (Empty means this is a procedure). If For_Body is false,
--- 249,255 ----
        Name     : Name_Id;
        Profile  : List_Id;
        Ret_Type : Entity_Id := Empty;
!       For_Body : Boolean   := False) return Node_Id;
     --  This function generates the appropriate expansion for a predefined
     --  primitive operation specified by its name, parameter profile and
     --  return type (Empty means this is a procedure). If For_Body is false,
*************** package body Exp_Ch3 is
*** 252,259 ****
       (Loc      : Source_Ptr;
        Tag_Typ  : Entity_Id;
        Name     : TSS_Name_Type;
!       For_Body : Boolean := False)
!       return     Node_Id;
     --  Specialized version of Predef_Spec_Or_Body that apply to read, write,
     --  input and output attribute whose specs are constructed in Exp_Strm.
  
--- 261,267 ----
       (Loc      : Source_Ptr;
        Tag_Typ  : Entity_Id;
        Name     : TSS_Name_Type;
!       For_Body : Boolean := False) return Node_Id;
     --  Specialized version of Predef_Spec_Or_Body that apply to read, write,
     --  input and output attribute whose specs are constructed in Exp_Strm.
  
*************** package body Exp_Ch3 is
*** 261,275 ****
       (Loc      : Source_Ptr;
        Tag_Typ  : Entity_Id;
        Name     : TSS_Name_Type;
!       For_Body : Boolean := False)
!       return     Node_Id;
     --  Specialized version of Predef_Spec_Or_Body that apply to _deep_adjust
     --  and _deep_finalize
  
     function Predefined_Primitive_Bodies
       (Tag_Typ    : Entity_Id;
!       Renamed_Eq : Node_Id)
!       return       List_Id;
     --  Create the bodies of the predefined primitives that are described in
     --  Predefined_Primitive_Specs. When not empty, Renamed_Eq must denote
     --  the defining unit name of the type's predefined equality as returned
--- 269,281 ----
       (Loc      : Source_Ptr;
        Tag_Typ  : Entity_Id;
        Name     : TSS_Name_Type;
!       For_Body : Boolean := False) return Node_Id;
     --  Specialized version of Predef_Spec_Or_Body that apply to _deep_adjust
     --  and _deep_finalize
  
     function Predefined_Primitive_Bodies
       (Tag_Typ    : Entity_Id;
!       Renamed_Eq : Node_Id) return List_Id;
     --  Create the bodies of the predefined primitives that are described in
     --  Predefined_Primitive_Specs. When not empty, Renamed_Eq must denote
     --  the defining unit name of the type's predefined equality as returned
*************** package body Exp_Ch3 is
*** 279,284 ****
--- 285,295 ----
     --  Freeze entities of all predefined primitive operations. This is needed
     --  because the bodies of these operations do not normally do any freezeing.
  
+    function Stream_Operations_OK (Typ : Entity_Id) return Boolean;
+    --  Check whether stream operations must be emitted for a given type.
+    --  Various restrictions prevent the generation of these operations, as
+    --  a useful optimization or for certification purposes.
+ 
     --------------------------
     -- Adjust_Discriminants --
     --------------------------
*************** package body Exp_Ch3 is
*** 475,481 ****
              return New_List (
                Make_Assignment_Statement (Loc,
                  Name => Comp,
!                 Expression => Get_Simple_Init_Val (Comp_Type, Loc)));
  
           else
              return
--- 486,494 ----
              return New_List (
                Make_Assignment_Statement (Loc,
                  Name => Comp,
!                 Expression =>
!                   Get_Simple_Init_Val
!                     (Comp_Type, Loc, Component_Size (A_Type))));
  
           else
              return
*************** package body Exp_Ch3 is
*** 555,573 ****
        --  apply in this case), and we must generate a procedure (even if it is
        --  null) to satisfy the call in this case.
  
!       --  Exception: do not build an array init_proc for a type whose root type
!       --  is Standard.String or Standard.Wide_String, since there is no place
!       --  to put the code, and in any case we handle initialization of such
!       --  types (in the Initialize_Scalars case, that's the only time the issue
!       --  arises) in a special manner anyway which does not need an init_proc.
  
        if Has_Non_Null_Base_Init_Proc (Comp_Type)
          or else Needs_Simple_Initialization (Comp_Type)
          or else Has_Task (Comp_Type)
!         or else (not Restrictions (No_Initialize_Scalars)
                     and then Is_Public (A_Type)
                     and then Root_Type (A_Type) /= Standard_String
!                    and then Root_Type (A_Type) /= Standard_Wide_String)
        then
           Proc_Id :=
             Make_Defining_Identifier (Loc, Make_Init_Proc_Name (A_Type));
--- 568,588 ----
        --  apply in this case), and we must generate a procedure (even if it is
        --  null) to satisfy the call in this case.
  
!       --  Exception: do not build an array init_proc for a type whose root
!       --  type is Standard.String or Standard.Wide_[Wide_]String, since there
!       --  is no place to put the code, and in any case we handle initialization
!       --  of such types (in the Initialize_Scalars case, that's the only time
!       --  the issue arises) in a special manner anyway which does not need an
!       --  init_proc.
  
        if Has_Non_Null_Base_Init_Proc (Comp_Type)
          or else Needs_Simple_Initialization (Comp_Type)
          or else Has_Task (Comp_Type)
!         or else (not Restriction_Active (No_Initialize_Scalars)
                     and then Is_Public (A_Type)
                     and then Root_Type (A_Type) /= Standard_String
!                    and then Root_Type (A_Type) /= Standard_Wide_String
!                    and then Root_Type (A_Type) /= Standard_Wide_Wide_String)
        then
           Proc_Id :=
             Make_Defining_Identifier (Loc, Make_Init_Proc_Name (A_Type));
*************** package body Exp_Ch3 is
*** 633,647 ****
        P    : Node_Id;
  
     begin
!       --  Nothing to do if there is no task hierarchy.
  
!       if Restrictions (No_Task_Hierarchy) then
           return;
        end if;
  
        --  Nothing to do if we already built a master entity for this scope
  
        if not Has_Master_Entity (Scope (T)) then
           --  first build the master entity
           --    _Master : constant Master_Id := Current_Master.all;
           --  and insert it just before the current declaration
--- 648,663 ----
        P    : Node_Id;
  
     begin
!       --  Nothing to do if there is no task hierarchy
  
!       if Restriction_Active (No_Task_Hierarchy) then
           return;
        end if;
  
        --  Nothing to do if we already built a master entity for this scope
  
        if not Has_Master_Entity (Scope (T)) then
+ 
           --  first build the master entity
           --    _Master : constant Master_Id := Current_Master.all;
           --  and insert it just before the current declaration
*************** package body Exp_Ch3 is
*** 679,685 ****
           end loop;
        end if;
  
!       --  Now define the renaming of the master_id.
  
        M_Id :=
          Make_Defining_Identifier (Loc,
--- 695,701 ----
           end loop;
        end if;
  
!       --  Now define the renaming of the master_id
  
        M_Id :=
          Make_Defining_Identifier (Loc,
*************** package body Exp_Ch3 is
*** 714,721 ****
  
        function Build_Case_Statement
          (Case_Id : Entity_Id;
!          Variant : Node_Id)
!          return    Node_Id;
        --  Build a case statement containing only two alternatives. The
        --  first alternative corresponds exactly to the discrete choices
        --  given on the variant with contains the components that we are
--- 730,736 ----
  
        function Build_Case_Statement
          (Case_Id : Entity_Id;
!          Variant : Node_Id) return Node_Id;
        --  Build a case statement containing only two alternatives. The
        --  first alternative corresponds exactly to the discrete choices
        --  given on the variant with contains the components that we are
*************** package body Exp_Ch3 is
*** 725,732 ****
  
        function Build_Dcheck_Function
          (Case_Id : Entity_Id;
!          Variant : Node_Id)
!          return    Entity_Id;
        --  Build the discriminant checking function for a given variant
  
        procedure Build_Dcheck_Functions (Variant_Part_Node : Node_Id);
--- 740,746 ----
  
        function Build_Dcheck_Function
          (Case_Id : Entity_Id;
!          Variant : Node_Id) return Entity_Id;
        --  Build the discriminant checking function for a given variant
  
        procedure Build_Dcheck_Functions (Variant_Part_Node : Node_Id);
*************** package body Exp_Ch3 is
*** 739,746 ****
  
        function Build_Case_Statement
          (Case_Id : Entity_Id;
!          Variant : Node_Id)
!          return    Node_Id
        is
           Alt_List       : constant List_Id := New_List;
           Actuals_List   : List_Id;
--- 753,759 ----
  
        function Build_Case_Statement
          (Case_Id : Entity_Id;
!          Variant : Node_Id) return Node_Id
        is
           Alt_List       : constant List_Id := New_List;
           Actuals_List   : List_Id;
*************** package body Exp_Ch3 is
*** 827,834 ****
  
        function Build_Dcheck_Function
          (Case_Id : Entity_Id;
!          Variant : Node_Id)
!          return    Entity_Id
        is
           Body_Node           : Node_Id;
           Func_Id             : Entity_Id;
--- 840,846 ----
  
        function Build_Dcheck_Function
          (Case_Id : Entity_Id;
!          Variant : Node_Id) return Entity_Id
        is
           Body_Node           : Node_Id;
           Func_Id             : Entity_Id;
*************** package body Exp_Ch3 is
*** 965,972 ****
  
     function Build_Discriminant_Formals
       (Rec_Id : Entity_Id;
!       Use_Dl : Boolean)
!       return   List_Id
     is
        Loc             : Source_Ptr       := Sloc (Rec_Id);
        Parameter_List  : constant List_Id := New_List;
--- 977,983 ----
  
     function Build_Discriminant_Formals
       (Rec_Id : Entity_Id;
!       Use_Dl : Boolean) return List_Id
     is
        Loc             : Source_Ptr       := Sloc (Rec_Id);
        Parameter_List  : constant List_Id := New_List;
*************** package body Exp_Ch3 is
*** 1039,1046 ****
        In_Init_Proc      : Boolean := False;
        Enclos_Type       : Entity_Id := Empty;
        Discr_Map         : Elist_Id := New_Elmt_List;
!       With_Default_Init : Boolean := False)
!       return              List_Id
     is
        First_Arg      : Node_Id;
        Args           : List_Id;
--- 1050,1056 ----
        In_Init_Proc      : Boolean := False;
        Enclos_Type       : Entity_Id := Empty;
        Discr_Map         : Elist_Id := New_Elmt_List;
!       With_Default_Init : Boolean := False) return List_Id
     is
        First_Arg      : Node_Id;
        Args           : List_Id;
*************** package body Exp_Ch3 is
*** 1056,1062 ****
        Controller_Typ : Entity_Id;
  
     begin
!       --  Nothing to do if the Init_Proc is null, unless Initialize_Sclalars
        --  is active (in which case we make the call anyway, since in the
        --  actual compiled client it may be non null).
  
--- 1066,1072 ----
        Controller_Typ : Entity_Id;
  
     begin
!       --  Nothing to do if the Init_Proc is null, unless Initialize_Scalars
        --  is active (in which case we make the call anyway, since in the
        --  actual compiled client it may be non null).
  
*************** package body Exp_Ch3 is
*** 1099,1105 ****
        --  through the outer routines.
  
        if Has_Task (Full_Type) then
!          if Restrictions (No_Task_Hierarchy) then
  
              --  See comments in System.Tasking.Initialization.Init_RTS
              --  for the value 3 (should be rtsfindable constant ???)
--- 1109,1115 ----
        --  through the outer routines.
  
        if Has_Task (Full_Type) then
!          if Restriction_Active (No_Task_Hierarchy) then
  
              --  See comments in System.Tasking.Initialization.Init_RTS
              --  for the value 3 (should be rtsfindable constant ???)
*************** package body Exp_Ch3 is
*** 1111,1130 ****
  
           Append_To (Args, Make_Identifier (Loc, Name_uChain));
  
!          --  Ada0Y (AI-287): In case of default initialized components
           --  with tasks, we generate a null string actual parameter.
           --  This is just a workaround that must be improved later???
  
           if With_Default_Init then
!             declare
!                S           : String_Id;
!                Null_String : Node_Id;
!             begin
!                Start_String;
!                S := End_String;
!                Null_String := Make_String_Literal (Loc, Strval => S);
!                Append_To (Args, Null_String);
!             end;
           else
              Decls := Build_Task_Image_Decls (Loc, Id_Ref, Enclos_Type);
              Decl  := Last (Decls);
--- 1121,1135 ----
  
           Append_To (Args, Make_Identifier (Loc, Name_uChain));
  
!          --  Ada 2005 (AI-287): In case of default initialized components
           --  with tasks, we generate a null string actual parameter.
           --  This is just a workaround that must be improved later???
  
           if With_Default_Init then
!             Append_To (Args,
!               Make_String_Literal (Loc,
!                 Strval => ""));
! 
           else
              Decls := Build_Task_Image_Decls (Loc, Id_Ref, Enclos_Type);
              Decl  := Last (Decls);
*************** package body Exp_Ch3 is
*** 1219,1226 ****
                 end if;
              end if;
  
!             --  Ada0Y (AI-287) In case of default initialized components, we
!             --  need to generate the corresponding selected component node
              --  to access the discriminant value. In other cases this is not
              --  required because we are inside the init proc and we use the
              --  corresponding formal.
--- 1224,1231 ----
                 end if;
              end if;
  
!             --  Ada 2005 (AI-287) In case of default initialized components,
!             --  we need to generate the corresponding selected component node
              --  to access the discriminant value. In other cases this is not
              --  required because we are inside the init proc and we use the
              --  corresponding formal.
*************** package body Exp_Ch3 is
*** 1314,1322 ****
        Decl : Node_Id;
  
     begin
!       --  Nothing to do if there is no task hierarchy.
  
!       if Restrictions (No_Task_Hierarchy) then
           return;
        end if;
  
--- 1319,1327 ----
        Decl : Node_Id;
  
     begin
!       --  Nothing to do if there is no task hierarchy
  
!       if Restriction_Active (No_Task_Hierarchy) then
           return;
        end if;
  
*************** package body Exp_Ch3 is
*** 1367,1375 ****
        --  components of the given component list. This may involve building
        --  case statements for the variant parts.
  
!       function Build_Init_Call_Thru
!         (Parameters : List_Id)
!          return       List_Id;
        --  Given a non-tagged type-derivation that declares discriminants,
        --  such as
        --
--- 1372,1378 ----
        --  components of the given component list. This may involve building
        --  case statements for the variant parts.
  
!       function Build_Init_Call_Thru (Parameters : List_Id) return List_Id;
        --  Given a non-tagged type-derivation that declares discriminants,
        --  such as
        --
*************** package body Exp_Ch3 is
*** 1397,1417 ****
        --  to which the check actions are appended.
  
        function Component_Needs_Simple_Initialization
!         (T    : Entity_Id)
!          return Boolean;
        --  Determines if a component needs simple initialization, given its
        --  type T. This is the same as Needs_Simple_Initialization except
!       --  for the following differences. The types Tag and Vtable_Ptr,
!       --  which are access types which would normally require simple
!       --  initialization to null, do not require initialization as
!       --  components, since they are explicitly initialized by other
!       --  means. The other relaxation is for packed bit arrays that are
!       --  associated with a modular type, which in some cases require
!       --  zero initialization to properly support comparisons, except
!       --  that comparison of such components always involves an explicit
!       --  selection of only the component's specific bits (whether or not
!       --  there are adjacent components or gaps), so zero initialization
!       --  is never needed for components.
  
        procedure Constrain_Array
          (SI         : Node_Id;
--- 1400,1412 ----
        --  to which the check actions are appended.
  
        function Component_Needs_Simple_Initialization
!         (T : Entity_Id) return Boolean;
        --  Determines if a component needs simple initialization, given its
        --  type T. This is the same as Needs_Simple_Initialization except
!       --  for the following difference: the types Tag and Vtable_Ptr, which
!       --  are access types which would normally require simple initialization
!       --  to null, do not require initialization as components, since they
!       --  are explicitly initialized by other means.
  
        procedure Constrain_Array
          (SI         : Node_Id;
*************** package body Exp_Ch3 is
*** 1458,1473 ****
               Selector_Name => New_Occurrence_Of (Id, Loc));
           Set_Assignment_OK (Lhs);
  
!          --  Case of an access attribute applied to the current
!          --  instance. Replace the reference to the type by a
!          --  reference to the actual object. (Note that this
!          --  handles the case of the top level of the expression
!          --  being given by such an attribute, but doesn't cover
!          --  uses nested within an initial value expression.
!          --  Nested uses are unlikely to occur in practice,
!          --  but theoretically possible. It's not clear how
!          --  to handle them without fully traversing the
!          --  expression. ???)
  
           if Kind = N_Attribute_Reference
             and then (Attribute_Name (N) = Name_Unchecked_Access
--- 1453,1466 ----
               Selector_Name => New_Occurrence_Of (Id, Loc));
           Set_Assignment_OK (Lhs);
  
!          --  Case of an access attribute applied to the current instance.
!          --  Replace the reference to the type by a reference to the actual
!          --  object. (Note that this handles the case of the top level of
!          --  the expression being given by such an attribute, but does not
!          --  cover uses nested within an initial value expression. Nested
!          --  uses are unlikely to occur in practice, but are theoretically
!          --  possible. It is not clear how to handle them without fully
!          --  traversing the expression. ???
  
           if Kind = N_Attribute_Reference
             and then (Attribute_Name (N) = Name_Unchecked_Access
*************** package body Exp_Ch3 is
*** 1483,1503 ****
                  Attribute_Name => Name_Unrestricted_Access);
           end if;
  
!          --  For a derived type the default value is copied from the component
!          --  declaration of the parent. In the analysis of the init_proc for
!          --  the parent the default value may have been expanded into a local
!          --  variable, which is of course not usable here. We must copy the
!          --  original expression and reanalyze.
  
!          if Nkind (Exp) = N_Identifier
!            and then not Comes_From_Source (Exp)
!            and then Analyzed (Exp)
!            and then not In_Open_Scopes (Scope (Entity (Exp)))
!            and then Nkind (Original_Node (Exp)) = N_Aggregate
           then
!             Exp := New_Copy_Tree (Original_Node (Exp));
           end if;
  
           Res := New_List (
             Make_Assignment_Statement (Loc,
               Name       => Lhs,
--- 1476,1499 ----
                  Attribute_Name => Name_Unrestricted_Access);
           end if;
  
!          --  Ada 2005 (AI-231): Generate conversion to the null-excluding
!          --  type to force the corresponding run-time check.
  
!          if Ada_Version >= Ada_05
!            and then Can_Never_Be_Null (Etype (Id))  -- Lhs
!            and then Present (Etype (Exp))
!            and then not Can_Never_Be_Null (Etype (Exp))
           then
!             Rewrite (Exp, Convert_To (Etype (Id), Relocate_Node (Exp)));
!             Analyze_And_Resolve (Exp, Etype (Id));
           end if;
  
+          --  Take a copy of Exp to ensure that later copies of this
+          --  component_declaration in derived types see the original tree,
+          --  not a node rewritten during expansion of the init_proc.
+ 
+          Exp := New_Copy_Tree (Exp);
+ 
           Res := New_List (
             Make_Assignment_Statement (Loc,
               Name       => Lhs,
*************** package body Exp_Ch3 is
*** 1590,1607 ****
        -- Build_Init_Call_Thru --
        --------------------------
  
!       function Build_Init_Call_Thru
!         (Parameters     : List_Id)
!          return           List_Id
!       is
!          Parent_Proc    : constant Entity_Id :=
!                             Base_Init_Proc (Etype (Rec_Type));
  
!          Parent_Type    : constant Entity_Id :=
!                             Etype (First_Formal (Parent_Proc));
  
!          Uparent_Type   : constant Entity_Id :=
!                             Underlying_Type (Parent_Type);
  
           First_Discr_Param : Node_Id;
  
--- 1586,1600 ----
        -- Build_Init_Call_Thru --
        --------------------------
  
!       function Build_Init_Call_Thru (Parameters : List_Id) return List_Id is
!          Parent_Proc : constant Entity_Id :=
!                          Base_Init_Proc (Etype (Rec_Type));
  
!          Parent_Type : constant Entity_Id :=
!                          Etype (First_Formal (Parent_Proc));
  
!          Uparent_Type : constant Entity_Id :=
!                           Underlying_Type (Parent_Type);
  
           First_Discr_Param : Node_Id;
  
*************** package body Exp_Ch3 is
*** 1636,1642 ****
           First_Discr_Param := Next (First (Parameters));
  
           if Has_Task (Rec_Type) then
!             if Restrictions (No_Task_Hierarchy) then
  
                 --  See comments in System.Tasking.Initialization.Init_RTS
                 --  for the value 3.
--- 1629,1635 ----
           First_Discr_Param := Next (First (Parameters));
  
           if Has_Task (Rec_Type) then
!             if Restriction_Active (No_Task_Hierarchy) then
  
                 --  See comments in System.Tasking.Initialization.Init_RTS
                 --  for the value 3.
*************** package body Exp_Ch3 is
*** 1918,1923 ****
--- 1911,1949 ----
           Id  : Entity_Id;
           Typ : Entity_Id;
  
+          function Has_Access_Constraint (E : Entity_Id) return Boolean;
+          --  Components with access discriminants that depend on the current
+          --  instance must be initialized after all other components.
+ 
+          ---------------------------
+          -- Has_Access_Constraint --
+          ---------------------------
+ 
+          function Has_Access_Constraint (E : Entity_Id) return Boolean is
+             Disc : Entity_Id;
+             T    : constant Entity_Id := Etype (E);
+ 
+          begin
+             if Has_Per_Object_Constraint (E)
+               and then Has_Discriminants (T)
+             then
+                Disc := First_Discriminant (T);
+                while Present (Disc) loop
+                   if Is_Access_Type (Etype (Disc)) then
+                      return True;
+                   end if;
+ 
+                   Next_Discriminant (Disc);
+                end loop;
+ 
+                return False;
+             else
+                return False;
+             end if;
+          end Has_Access_Constraint;
+ 
+       --  Start of processing for Build_Init_Statements
+ 
        begin
           if Null_Present (Comp_List) then
              return New_List (Make_Null_Statement (Loc));
*************** package body Exp_Ch3 is
*** 1932,1938 ****
  
           Per_Object_Constraint_Components := False;
  
!          --  First step : regular components.
  
           Decl := First_Non_Pragma (Component_Items (Comp_List));
           while Present (Decl) loop
--- 1958,1964 ----
  
           Per_Object_Constraint_Components := False;
  
!          --  First step : regular components
  
           Decl := First_Non_Pragma (Component_Items (Comp_List));
           while Present (Decl) loop
*************** package body Exp_Ch3 is
*** 1943,1949 ****
              Id := Defining_Identifier (Decl);
              Typ := Etype (Id);
  
!             if Has_Per_Object_Constraint (Id)
                and then No (Expression (Decl))
              then
                 --  Skip processing for now and ask for a second pass
--- 1969,1975 ----
              Id := Defining_Identifier (Decl);
              Typ := Etype (Id);
  
!             if Has_Access_Constraint (Id)
                and then No (Expression (Decl))
              then
                 --  Skip processing for now and ask for a second pass
*************** package body Exp_Ch3 is
*** 1974,1980 ****
  
                 elsif Component_Needs_Simple_Initialization (Typ) then
                    Stmts :=
!                     Build_Assignment (Id, Get_Simple_Init_Val (Typ, Loc));
  
                 --  Nothing needed for this case
  
--- 2000,2007 ----
  
                 elsif Component_Needs_Simple_Initialization (Typ) then
                    Stmts :=
!                     Build_Assignment
!                       (Id, Get_Simple_Init_Val (Typ, Loc, Esize (Id)));
  
                 --  Nothing needed for this case
  
*************** package body Exp_Ch3 is
*** 2023,2029 ****
                 Id := Defining_Identifier (Decl);
                 Typ := Etype (Id);
  
!                if Has_Per_Object_Constraint (Id)
                   and then No (Expression (Decl))
                 then
                    if Has_Non_Null_Base_Init_Proc (Typ) then
--- 2050,2056 ----
                 Id := Defining_Identifier (Decl);
                 Typ := Etype (Id);
  
!                if Has_Access_Constraint (Id)
                   and then No (Expression (Decl))
                 then
                    if Has_Non_Null_Base_Init_Proc (Typ) then
*************** package body Exp_Ch3 is
*** 2036,2042 ****
  
                    elsif Component_Needs_Simple_Initialization (Typ) then
                       Append_List_To (Statement_List,
!                        Build_Assignment (Id, Get_Simple_Init_Val (Typ, Loc)));
                    end if;
                 end if;
  
--- 2063,2070 ----
  
                    elsif Component_Needs_Simple_Initialization (Typ) then
                       Append_List_To (Statement_List,
!                        Build_Assignment
!                          (Id, Get_Simple_Init_Val (Typ, Loc, Esize (Id))));
                    end if;
                 end if;
  
*************** package body Exp_Ch3 is
*** 2078,2083 ****
--- 2106,2130 ----
           --  to bind any interrupt (signal) entries.
  
           if Is_Task_Record_Type (Rec_Type) then
+ 
+             --  In the case of the restricted run time the ATCB has already
+             --  been preallocated.
+ 
+             if Restricted_Profile then
+                Append_To (Statement_List,
+                  Make_Assignment_Statement (Loc,
+                    Name => Make_Selected_Component (Loc,
+                      Prefix => Make_Identifier (Loc, Name_uInit),
+                      Selector_Name => Make_Identifier (Loc, Name_uTask_Id)),
+                    Expression => Make_Attribute_Reference (Loc,
+                      Prefix =>
+                        Make_Selected_Component (Loc,
+                          Prefix => Make_Identifier (Loc, Name_uInit),
+                          Selector_Name =>
+                            Make_Identifier (Loc, Name_uATCB)),
+                      Attribute_Name => Name_Unchecked_Access)));
+             end if;
+ 
              Append_To (Statement_List, Make_Task_Create_Call (Rec_Type));
  
              declare
*************** package body Exp_Ch3 is
*** 2177,2191 ****
        -------------------------------------------
  
        function Component_Needs_Simple_Initialization
!         (T    : Entity_Id)
!          return Boolean
        is
        begin
           return
             Needs_Simple_Initialization (T)
               and then not Is_RTE (T, RE_Tag)
!              and then not Is_RTE (T, RE_Vtable_Ptr)
!              and then not Is_Bit_Packed_Array (T);
        end Component_Needs_Simple_Initialization;
  
        ---------------------
--- 2224,2236 ----
        -------------------------------------------
  
        function Component_Needs_Simple_Initialization
!         (T : Entity_Id) return Boolean
        is
        begin
           return
             Needs_Simple_Initialization (T)
               and then not Is_RTE (T, RE_Tag)
!              and then not Is_RTE (T, RE_Vtable_Ptr);
        end Component_Needs_Simple_Initialization;
  
        ---------------------
*************** package body Exp_Ch3 is
*** 2360,2366 ****
           if Is_CPP_Class (Rec_Id) then
              return False;
  
!          elsif not Restrictions (No_Initialize_Scalars)
             and then Is_Public (Rec_Id)
           then
              return True;
--- 2405,2411 ----
           if Is_CPP_Class (Rec_Id) then
              return False;
  
!          elsif not Restriction_Active (No_Initialize_Scalars)
             and then Is_Public (Rec_Id)
           then
              return True;
*************** package body Exp_Ch3 is
*** 2437,2442 ****
--- 2482,2488 ----
  
        if Is_Derived_Type (Rec_Type)
          and then not Is_Tagged_Type (Rec_Type)
+         and then not Is_Unchecked_Union (Rec_Type)
          and then not Has_New_Non_Standard_Rep (Rec_Type)
          and then not Parent_Subtype_Renaming_Discrims
          and then Has_Non_Null_Base_Init_Proc (Etype (Rec_Type))
*************** package body Exp_Ch3 is
*** 2446,2452 ****
        --  Otherwise if we need an initialization procedure, then build one,
        --  mark it as public and inlinable and as having a completion.
  
!       elsif Requires_Init_Proc (Rec_Type) then
           Build_Init_Procedure;
           Set_Is_Public (Proc_Id, Is_Public (Pe));
  
--- 2492,2500 ----
        --  Otherwise if we need an initialization procedure, then build one,
        --  mark it as public and inlinable and as having a completion.
  
!       elsif Requires_Init_Proc (Rec_Type)
!         or else Is_Unchecked_Union (Rec_Type)
!       then
           Build_Init_Procedure;
           Set_Is_Public (Proc_Id, Is_Public (Pe));
  
*************** package body Exp_Ch3 is
*** 2474,2485 ****
        end if;
     end Build_Record_Init_Proc;
  
     ------------------------------------
     -- Build_Variant_Record_Equality --
     ------------------------------------
  
     --  Generates:
!    --
     --    function _Equality (X, Y : T) return Boolean is
     --    begin
     --       --  Compare discriminants
--- 2522,2834 ----
        end if;
     end Build_Record_Init_Proc;
  
+    ----------------------------
+    -- Build_Slice_Assignment --
+    ----------------------------
+ 
+    --  Generates the following subprogram:
+ 
+    --    procedure Assign
+    --     (Source,   Target   : Array_Type,
+    --      Left_Lo,  Left_Hi, Right_Lo, Right_Hi : Index;
+    --      Rev :     Boolean)
+    --    is
+    --       Li1 : Index;
+    --       Ri1 : Index;
+ 
+    --    begin
+    --       if Rev  then
+    --          Li1 := Left_Hi;
+    --          Ri1 := Right_Hi;
+    --       else
+    --          Li1 := Left_Lo;
+    --          Ri1 := Right_Lo;
+    --       end if;
+ 
+    --       loop
+    --             if Rev then
+    --                exit when Li1 < Left_Lo;
+    --             else
+    --                exit when Li1 > Left_Hi;
+    --             end if;
+ 
+    --             Target (Li1) := Source (Ri1);
+ 
+    --             if Rev then
+    --                Li1 := Index'pred (Li1);
+    --                Ri1 := Index'pred (Ri1);
+    --             else
+    --                Li1 := Index'succ (Li1);
+    --                Ri1 := Index'succ (Ri1);
+    --             end if;
+    --       end loop;
+    --    end Assign;
+ 
+    procedure Build_Slice_Assignment (Typ : Entity_Id) is
+       Loc   : constant Source_Ptr := Sloc (Typ);
+       Index : constant Entity_Id  := Base_Type (Etype (First_Index (Typ)));
+ 
+       --  Build formal parameters of procedure
+ 
+       Larray   : constant Entity_Id :=
+                    Make_Defining_Identifier
+                      (Loc, Chars => New_Internal_Name ('A'));
+       Rarray   : constant Entity_Id :=
+                    Make_Defining_Identifier
+                      (Loc, Chars => New_Internal_Name ('R'));
+       Left_Lo  : constant Entity_Id :=
+                    Make_Defining_Identifier
+                      (Loc, Chars => New_Internal_Name ('L'));
+       Left_Hi  : constant Entity_Id :=
+                    Make_Defining_Identifier
+                      (Loc, Chars => New_Internal_Name ('L'));
+       Right_Lo : constant Entity_Id :=
+                    Make_Defining_Identifier
+                      (Loc, Chars => New_Internal_Name ('R'));
+       Right_Hi : constant Entity_Id :=
+                    Make_Defining_Identifier
+                      (Loc, Chars => New_Internal_Name ('R'));
+       Rev      : constant Entity_Id :=
+                    Make_Defining_Identifier
+                      (Loc, Chars => New_Internal_Name ('D'));
+       Proc_Name : constant Entity_Id :=
+                     Make_Defining_Identifier (Loc,
+                       Chars => Make_TSS_Name (Typ, TSS_Slice_Assign));
+ 
+       Lnn : constant Entity_Id :=
+               Make_Defining_Identifier (Loc, New_Internal_Name ('L'));
+       Rnn : constant Entity_Id :=
+               Make_Defining_Identifier (Loc, New_Internal_Name ('R'));
+       --  Subscripts for left and right sides
+ 
+       Decls : List_Id;
+       Loops : Node_Id;
+       Stats : List_Id;
+ 
+    begin
+       --  Build declarations for indices
+ 
+       Decls := New_List;
+ 
+       Append_To (Decls,
+          Make_Object_Declaration (Loc,
+            Defining_Identifier => Lnn,
+            Object_Definition  =>
+              New_Occurrence_Of (Index, Loc)));
+ 
+       Append_To (Decls,
+         Make_Object_Declaration (Loc,
+           Defining_Identifier => Rnn,
+           Object_Definition  =>
+             New_Occurrence_Of (Index, Loc)));
+ 
+       Stats := New_List;
+ 
+       --  Build initializations for indices
+ 
+       declare
+          F_Init : constant List_Id := New_List;
+          B_Init : constant List_Id := New_List;
+ 
+       begin
+          Append_To (F_Init,
+            Make_Assignment_Statement (Loc,
+              Name => New_Occurrence_Of (Lnn, Loc),
+              Expression => New_Occurrence_Of (Left_Lo, Loc)));
+ 
+          Append_To (F_Init,
+            Make_Assignment_Statement (Loc,
+              Name => New_Occurrence_Of (Rnn, Loc),
+              Expression => New_Occurrence_Of (Right_Lo, Loc)));
+ 
+          Append_To (B_Init,
+            Make_Assignment_Statement (Loc,
+              Name => New_Occurrence_Of (Lnn, Loc),
+              Expression => New_Occurrence_Of (Left_Hi, Loc)));
+ 
+          Append_To (B_Init,
+            Make_Assignment_Statement (Loc,
+              Name => New_Occurrence_Of (Rnn, Loc),
+              Expression => New_Occurrence_Of (Right_Hi, Loc)));
+ 
+          Append_To (Stats,
+            Make_If_Statement (Loc,
+              Condition => New_Occurrence_Of (Rev, Loc),
+              Then_Statements => B_Init,
+              Else_Statements => F_Init));
+       end;
+ 
+       --  Now construct the assignment statement
+ 
+       Loops :=
+         Make_Loop_Statement (Loc,
+           Statements => New_List (
+             Make_Assignment_Statement (Loc,
+               Name =>
+                 Make_Indexed_Component (Loc,
+                   Prefix => New_Occurrence_Of (Larray, Loc),
+                   Expressions => New_List (New_Occurrence_Of (Lnn, Loc))),
+               Expression =>
+                 Make_Indexed_Component (Loc,
+                   Prefix => New_Occurrence_Of (Rarray, Loc),
+                   Expressions => New_List (New_Occurrence_Of (Rnn, Loc))))),
+           End_Label  => Empty);
+ 
+       --  Build exit condition
+ 
+       declare
+          F_Ass : constant List_Id := New_List;
+          B_Ass : constant List_Id := New_List;
+ 
+       begin
+          Append_To (F_Ass,
+            Make_Exit_Statement (Loc,
+              Condition =>
+                Make_Op_Gt (Loc,
+                  Left_Opnd  => New_Occurrence_Of (Lnn, Loc),
+                  Right_Opnd => New_Occurrence_Of (Left_Hi, Loc))));
+ 
+          Append_To (B_Ass,
+            Make_Exit_Statement (Loc,
+              Condition =>
+                Make_Op_Lt (Loc,
+                  Left_Opnd  => New_Occurrence_Of (Lnn, Loc),
+                  Right_Opnd => New_Occurrence_Of (Left_Lo, Loc))));
+ 
+          Prepend_To (Statements (Loops),
+            Make_If_Statement (Loc,
+              Condition       => New_Occurrence_Of (Rev, Loc),
+              Then_Statements => B_Ass,
+              Else_Statements => F_Ass));
+       end;
+ 
+       --  Build the increment/decrement statements
+ 
+       declare
+          F_Ass : constant List_Id := New_List;
+          B_Ass : constant List_Id := New_List;
+ 
+       begin
+          Append_To (F_Ass,
+            Make_Assignment_Statement (Loc,
+              Name => New_Occurrence_Of (Lnn, Loc),
+              Expression =>
+                Make_Attribute_Reference (Loc,
+                  Prefix =>
+                    New_Occurrence_Of (Index, Loc),
+                  Attribute_Name => Name_Succ,
+                  Expressions => New_List (
+                    New_Occurrence_Of (Lnn, Loc)))));
+ 
+          Append_To (F_Ass,
+            Make_Assignment_Statement (Loc,
+              Name => New_Occurrence_Of (Rnn, Loc),
+              Expression =>
+                Make_Attribute_Reference (Loc,
+                  Prefix =>
+                    New_Occurrence_Of (Index, Loc),
+                  Attribute_Name => Name_Succ,
+                  Expressions => New_List (
+                    New_Occurrence_Of (Rnn, Loc)))));
+ 
+          Append_To (B_Ass,
+            Make_Assignment_Statement (Loc,
+              Name => New_Occurrence_Of (Lnn, Loc),
+              Expression =>
+                Make_Attribute_Reference (Loc,
+                  Prefix =>
+                    New_Occurrence_Of (Index, Loc),
+                  Attribute_Name => Name_Pred,
+                    Expressions => New_List (
+                      New_Occurrence_Of (Lnn, Loc)))));
+ 
+          Append_To (B_Ass,
+            Make_Assignment_Statement (Loc,
+              Name => New_Occurrence_Of (Rnn, Loc),
+              Expression =>
+                Make_Attribute_Reference (Loc,
+                  Prefix =>
+                    New_Occurrence_Of (Index, Loc),
+                  Attribute_Name => Name_Pred,
+                  Expressions => New_List (
+                    New_Occurrence_Of (Rnn, Loc)))));
+ 
+          Append_To (Statements (Loops),
+            Make_If_Statement (Loc,
+              Condition => New_Occurrence_Of (Rev, Loc),
+              Then_Statements => B_Ass,
+              Else_Statements => F_Ass));
+       end;
+ 
+       Append_To (Stats, Loops);
+ 
+       declare
+          Spec    : Node_Id;
+          Formals : List_Id := New_List;
+ 
+       begin
+          Formals := New_List (
+            Make_Parameter_Specification (Loc,
+              Defining_Identifier => Larray,
+              Out_Present => True,
+              Parameter_Type =>
+                New_Reference_To (Base_Type (Typ), Loc)),
+ 
+            Make_Parameter_Specification (Loc,
+              Defining_Identifier => Rarray,
+              Parameter_Type =>
+                New_Reference_To (Base_Type (Typ), Loc)),
+ 
+            Make_Parameter_Specification (Loc,
+              Defining_Identifier => Left_Lo,
+              Parameter_Type =>
+                New_Reference_To (Index, Loc)),
+ 
+            Make_Parameter_Specification (Loc,
+              Defining_Identifier => Left_Hi,
+              Parameter_Type =>
+                New_Reference_To (Index, Loc)),
+ 
+            Make_Parameter_Specification (Loc,
+              Defining_Identifier => Right_Lo,
+              Parameter_Type =>
+                New_Reference_To (Index, Loc)),
+ 
+            Make_Parameter_Specification (Loc,
+              Defining_Identifier => Right_Hi,
+              Parameter_Type =>
+                New_Reference_To (Index, Loc)));
+ 
+          Append_To (Formals,
+            Make_Parameter_Specification (Loc,
+              Defining_Identifier => Rev,
+              Parameter_Type =>
+                New_Reference_To (Standard_Boolean, Loc)));
+ 
+          Spec :=
+            Make_Procedure_Specification (Loc,
+              Defining_Unit_Name       => Proc_Name,
+              Parameter_Specifications => Formals);
+ 
+          Discard_Node (
+            Make_Subprogram_Body (Loc,
+              Specification              => Spec,
+              Declarations               => Decls,
+              Handled_Statement_Sequence =>
+                Make_Handled_Sequence_Of_Statements (Loc,
+                  Statements => Stats)));
+       end;
+ 
+       Set_TSS (Typ, Proc_Name);
+       Set_Is_Pure (Proc_Name);
+    end Build_Slice_Assignment;
+ 
     ------------------------------------
     -- Build_Variant_Record_Equality --
     ------------------------------------
  
     --  Generates:
! 
     --    function _Equality (X, Y : T) return Boolean is
     --    begin
     --       --  Compare discriminants
*************** package body Exp_Ch3 is
*** 2528,2536 ****
--- 2877,2890 ----
        Def   : constant Node_Id := Parent (Typ);
        Comps : constant Node_Id := Component_List (Type_Definition (Def));
        Stmts : constant List_Id := New_List;
+       Pspecs : constant List_Id := New_List;
  
     begin
+       --  Derived Unchecked_Union types no longer inherit the equality function
+       --  of their parent.
+ 
        if Is_Derived_Type (Typ)
+         and then not Is_Unchecked_Union (Typ)
          and then not Has_New_Non_Standard_Rep (Typ)
        then
           declare
*************** package body Exp_Ch3 is
*** 2550,2583 ****
            Specification =>
              Make_Function_Specification (Loc,
                Defining_Unit_Name       => F,
!               Parameter_Specifications => New_List (
!                 Make_Parameter_Specification (Loc,
!                   Defining_Identifier => X,
!                   Parameter_Type      => New_Reference_To (Typ, Loc)),
! 
!                 Make_Parameter_Specification (Loc,
!                   Defining_Identifier => Y,
!                   Parameter_Type      => New_Reference_To (Typ, Loc))),
! 
                Subtype_Mark => New_Reference_To (Standard_Boolean, Loc)),
- 
            Declarations               => New_List,
            Handled_Statement_Sequence =>
              Make_Handled_Sequence_Of_Statements (Loc,
                Statements => Stmts)));
  
!       --  For unchecked union case, raise program error. This will only
!       --  happen in the case of dynamic dispatching for a tagged type,
!       --  since in the static cases it is a compile time error.
  
-       if Has_Unchecked_Union (Typ) then
-          Append_To (Stmts,
-            Make_Raise_Program_Error (Loc,
-              Reason => PE_Unchecked_Union_Restriction));
        else
           Append_To (Stmts,
             Make_Eq_If (Typ,
               Discriminant_Specifications (Def)));
           Append_List_To (Stmts,
             Make_Eq_Case (Typ, Comps));
        end if;
--- 2904,2989 ----
            Specification =>
              Make_Function_Specification (Loc,
                Defining_Unit_Name       => F,
!               Parameter_Specifications => Pspecs,
                Subtype_Mark => New_Reference_To (Standard_Boolean, Loc)),
            Declarations               => New_List,
            Handled_Statement_Sequence =>
              Make_Handled_Sequence_Of_Statements (Loc,
                Statements => Stmts)));
  
!       Append_To (Pspecs,
!         Make_Parameter_Specification (Loc,
!           Defining_Identifier => X,
!           Parameter_Type      => New_Reference_To (Typ, Loc)));
! 
!       Append_To (Pspecs,
!         Make_Parameter_Specification (Loc,
!           Defining_Identifier => Y,
!           Parameter_Type      => New_Reference_To (Typ, Loc)));
! 
!       --  Unchecked_Unions require additional machinery to support equality.
!       --  Two extra parameters (A and B) are added to the equality function
!       --  parameter list in order to capture the inferred values of the
!       --  discriminants in later calls.
! 
!       if Is_Unchecked_Union (Typ) then
!          declare
!             Discr_Type : constant Node_Id := Etype (First_Discriminant (Typ));
! 
!             A : constant Node_Id :=
!                   Make_Defining_Identifier (Loc,
!                     Chars => Name_A);
! 
!             B : constant Node_Id :=
!                   Make_Defining_Identifier (Loc,
!                     Chars => Name_B);
! 
!          begin
!             --  Add A and B to the parameter list
! 
!             Append_To (Pspecs,
!               Make_Parameter_Specification (Loc,
!                 Defining_Identifier => A,
!                 Parameter_Type => New_Reference_To (Discr_Type, Loc)));
! 
!             Append_To (Pspecs,
!               Make_Parameter_Specification (Loc,
!                 Defining_Identifier => B,
!                 Parameter_Type => New_Reference_To (Discr_Type, Loc)));
! 
!             --  Generate the following header code to compare the inferred
!             --  discriminants:
! 
!             --  if a /= b then
!             --     return False;
!             --  end if;
! 
!             Append_To (Stmts,
!               Make_If_Statement (Loc,
!                 Condition =>
!                   Make_Op_Ne (Loc,
!                     Left_Opnd => New_Reference_To (A, Loc),
!                     Right_Opnd => New_Reference_To (B, Loc)),
!                 Then_Statements => New_List (
!                   Make_Return_Statement (Loc,
!                     Expression => New_Occurrence_Of (Standard_False, Loc)))));
! 
!             --  Generate component-by-component comparison. Note that we must
!             --  propagate one of the inferred discriminant formals to act as
!             --  the case statement switch.
! 
!             Append_List_To (Stmts,
!               Make_Eq_Case (Typ, Comps, A));
! 
!          end;
! 
!       --  Normal case (not unchecked union)
  
        else
           Append_To (Stmts,
             Make_Eq_If (Typ,
               Discriminant_Specifications (Def)));
+ 
           Append_List_To (Stmts,
             Make_Eq_Case (Typ, Comps));
        end if;
*************** package body Exp_Ch3 is
*** 2629,2637 ****
        end if;
     end Check_Stream_Attributes;
  
!    ---------------------------
!    -- Expand_Derived_Record --
!    ---------------------------
  
     --  Add a field _parent at the beginning of the record extension. This is
     --  used to implement inheritance. Here are some examples of expansion:
--- 3035,3043 ----
        end if;
     end Check_Stream_Attributes;
  
!    -----------------------------
!    -- Expand_Record_Extension --
!    -----------------------------
  
     --  Add a field _parent at the beginning of the record extension. This is
     --  used to implement inheritance. Here are some examples of expansion:
*************** package body Exp_Ch3 is
*** 2655,2661 ****
     --       D : Int;
     --    end;
  
!    procedure Expand_Derived_Record (T : Entity_Id; Def : Node_Id) is
        Indic        : constant Node_Id    := Subtype_Indication (Def);
        Loc          : constant Source_Ptr := Sloc (Def);
        Rec_Ext_Part : Node_Id             := Record_Extension_Part (Def);
--- 3061,3067 ----
     --       D : Int;
     --    end;
  
!    procedure Expand_Record_Extension (T : Entity_Id; Def : Node_Id) is
        Indic        : constant Node_Id    := Subtype_Indication (Def);
        Loc          : constant Source_Ptr := Sloc (Def);
        Rec_Ext_Part : Node_Id             := Record_Extension_Part (Def);
*************** package body Exp_Ch3 is
*** 2667,2673 ****
        List_Constr  : constant List_Id    := New_List;
  
     begin
!       --  Expand_Tagged_Extension is called directly from the semantics, so
        --  we must check to see whether expansion is active before proceeding
  
        if not Expander_Active then
--- 3073,3079 ----
        List_Constr  : constant List_Id    := New_List;
  
     begin
!       --  Expand_Record_Extension is called directly from the semantics, so
        --  we must check to see whether expansion is active before proceeding
  
        if not Expander_Active then
*************** package body Exp_Ch3 is
*** 2750,2756 ****
        end if;
  
        Analyze (Comp_Decl);
!    end Expand_Derived_Record;
  
     ------------------------------------
     -- Expand_N_Full_Type_Declaration --
--- 3156,3162 ----
        end if;
  
        Analyze (Comp_Decl);
!    end Expand_Record_Extension;
  
     ------------------------------------
     -- Expand_N_Full_Type_Declaration --
*************** package body Exp_Ch3 is
*** 2849,2857 ****
                 Next_Elmt (Elmt);
              end loop;
  
!             --  If the derived type itself is private with a full view,
!             --  then associate the full view with the inherited TSS_Elist
!             --  as well.
  
              if Ekind (B_Id) in Private_Kind
                and then Present (Full_View (B_Id))
--- 3255,3262 ----
                 Next_Elmt (Elmt);
              end loop;
  
!             --  If the derived type itself is private with a full view, then
!             --  associate the full view with the inherited TSS_Elist as well.
  
              if Ekind (B_Id) in Private_Kind
                and then Present (Full_View (B_Id))
*************** package body Exp_Ch3 is
*** 3004,3010 ****
  
           elsif Needs_Simple_Initialization (Typ) then
              Set_No_Initialization (N, False);
!             Set_Expression (N, Get_Simple_Init_Val (Typ, Loc));
              Analyze_And_Resolve (Expression (N), Typ);
           end if;
  
--- 3409,3415 ----
  
           elsif Needs_Simple_Initialization (Typ) then
              Set_No_Initialization (N, False);
!             Set_Expression (N, Get_Simple_Init_Val (Typ, Loc, Esize (Def_Id)));
              Analyze_And_Resolve (Expression (N), Typ);
           end if;
  
*************** package body Exp_Ch3 is
*** 3132,3148 ****
              then
                 Set_Is_Known_Valid (Def_Id);
  
!             --  For access types set the Is_Known_Non_Null flag if the
!             --  initializing value is known to be non-null. We can also
!             --  set Can_Never_Be_Null if this is a constant.
  
!             elsif Is_Access_Type (Typ)
!               and then Known_Non_Null (Expr)
!             then
!                Set_Is_Known_Non_Null (Def_Id);
  
!                if Constant_Present (N) then
!                   Set_Can_Never_Be_Null (Def_Id);
                 end if;
              end if;
  
--- 3537,3567 ----
              then
                 Set_Is_Known_Valid (Def_Id);
  
!             elsif Is_Access_Type (Typ) then
  
!                --  Ada 2005 (AI-231): Generate conversion to the null-excluding
!                --  type to force the corresponding run-time check
  
!                if Ada_Version >= Ada_05
!                  and then (Can_Never_Be_Null (Def_Id)
!                              or else Can_Never_Be_Null (Typ))
!                then
!                   Rewrite
!                     (Expr_Q,
!                      Convert_To (Etype (Def_Id), Relocate_Node (Expr_Q)));
!                   Analyze_And_Resolve (Expr_Q, Etype (Def_Id));
!                end if;
! 
!                --  For access types set the Is_Known_Non_Null flag if the
!                --  initializing value is known to be non-null. We can also
!                --  set Can_Never_Be_Null if this is a constant.
! 
!                if Known_Non_Null (Expr) then
!                   Set_Is_Known_Non_Null (Def_Id);
! 
!                   if Constant_Present (N) then
!                      Set_Can_Never_Be_Null (Def_Id);
!                   end if;
                 end if;
              end if;
  
*************** package body Exp_Ch3 is
*** 3464,3476 ****
              then
                 null;
  
!             --  We do not need an init proc for string or wide string, since
!             --  the only time these need initialization in normalize or
              --  initialize scalars mode, and these types are treated specially
              --  and do not need initialization procedures.
  
              elsif Root_Type (Base) = Standard_String
                or else Root_Type (Base) = Standard_Wide_String
              then
                 null;
  
--- 3883,3896 ----
              then
                 null;
  
!             --  We do not need an init proc for string or wide [wide] string,
!             --  since the only time these need initialization in normalize or
              --  initialize scalars mode, and these types are treated specially
              --  and do not need initialization procedures.
  
              elsif Root_Type (Base) = Standard_String
                or else Root_Type (Base) = Standard_Wide_String
+               or else Root_Type (Base) = Standard_Wide_Wide_String
              then
                 null;
  
*************** package body Exp_Ch3 is
*** 3483,3488 ****
--- 3903,3914 ----
  
           if Typ = Base and then Has_Controlled_Component (Base) then
              Build_Controlling_Procs (Base);
+ 
+             if not Is_Limited_Type (Component_Type (Typ))
+               and then Number_Dimensions (Typ) = 1
+             then
+                Build_Slice_Assignment (Typ);
+             end if;
           end if;
  
        --  For packed case, there is a default initialization, except
*************** package body Exp_Ch3 is
*** 3556,3562 ****
           end loop;
        end if;
  
!       --  Now build an array declaration.
  
        --    typA : array (Natural range 0 .. num - 1) of ctype :=
        --             (v, v, v, v, v, ....)
--- 3982,3988 ----
           end loop;
        end if;
  
!       --  Now build an array declaration
  
        --    typA : array (Natural range 0 .. num - 1) of ctype :=
        --             (v, v, v, v, v, ....)
*************** package body Exp_Ch3 is
*** 3667,3673 ****
  
           if Enumeration_Rep (Ent) = Last_Repval then
  
!             --  Another special case: for a single literal, Pos is zero.
  
              Pos_Expr := Make_Integer_Literal (Loc, Uint_0);
  
--- 4093,4099 ----
  
           if Enumeration_Rep (Ent) = Last_Repval then
  
!             --  Another special case: for a single literal, Pos is zero
  
              Pos_Expr := Make_Integer_Literal (Loc, Uint_0);
  
*************** package body Exp_Ch3 is
*** 3720,3726 ****
  
        --  In normal mode, add the others clause with the test
  
!       if not Restrictions (No_Exception_Handlers) then
           Append_To (Lst,
             Make_Case_Statement_Alternative (Loc,
               Discrete_Choices => New_List (Make_Others_Choice (Loc)),
--- 4146,4152 ----
  
        --  In normal mode, add the others clause with the test
  
!       if not Restriction_Active (No_Exception_Handlers) then
           Append_To (Lst,
             Make_Case_Statement_Alternative (Loc,
               Discrete_Choices => New_List (Make_Others_Choice (Loc)),
*************** package body Exp_Ch3 is
*** 3820,3825 ****
--- 4246,4257 ----
  
        elsif Is_Derived_Type (Def_Id)
          and then not Is_Tagged_Type (Def_Id)
+ 
+          --  If we have a derived Unchecked_Union, we do not inherit the
+          --  discriminant checking functions from the parent type since the
+          --  discriminants are non existent.
+ 
+         and then not Is_Unchecked_Union (Def_Id)
          and then Has_Discriminants (Def_Id)
        then
           declare
*************** package body Exp_Ch3 is
*** 3889,3911 ****
              --  (usually the inherited primitive address is inserted in the
              --  DT by Inherit_DT)
  
!             if Is_CPP_Class (Etype (Def_Id)) then
!                declare
!                   Elmt : Elmt_Id := First_Elmt (Primitive_Operations (Def_Id));
!                   Subp : Entity_Id;
  
!                begin
!                   while Present (Elmt) loop
!                      Subp := Node (Elmt);
  
!                      if Present (Alias (Subp)) then
                          Set_Has_Delayed_Freeze (Subp);
                       end if;
  
!                      Next_Elmt (Elmt);
!                   end loop;
!                end;
!             end if;
  
              if Underlying_Type (Etype (Def_Id)) = Def_Id then
                 Expand_Tagged_Root (Def_Id);
--- 4321,4355 ----
              --  (usually the inherited primitive address is inserted in the
              --  DT by Inherit_DT)
  
!             --  Similarly, if this is an inherited operation whose parent
!             --  is not frozen yet, it is not in the DT of the parent, and
!             --  we generate an explicit freeze node for the inherited
!             --  operation, so that it is properly inserted in the DT of the
!             --  current type.
  
!             declare
!                Elmt : Elmt_Id := First_Elmt (Primitive_Operations (Def_Id));
!                Subp : Entity_Id;
  
!             begin
!                while Present (Elmt) loop
!                   Subp := Node (Elmt);
! 
!                   if Present (Alias (Subp)) then
!                      if Is_CPP_Class (Etype (Def_Id)) then
!                         Set_Has_Delayed_Freeze (Subp);
! 
!                      elsif Has_Delayed_Freeze (Alias (Subp))
!                        and then not Is_Frozen (Alias (Subp))
!                      then
!                         Set_Is_Frozen (Subp, False);
                          Set_Has_Delayed_Freeze (Subp);
                       end if;
+                   end if;
  
!                   Next_Elmt (Elmt);
!                end loop;
!             end;
  
              if Underlying_Type (Etype (Def_Id)) = Def_Id then
                 Expand_Tagged_Root (Def_Id);
*************** package body Exp_Ch3 is
*** 3977,3983 ****
           begin
              if Present (Comps)
                and then Present (Variant_Part (Comps))
-               and then not Is_Unchecked_Union (Def_Id)
              then
                 Build_Variant_Record_Equality (Def_Id);
              end if;
--- 4421,4426 ----
*************** package body Exp_Ch3 is
*** 4088,4096 ****
     --  for initialization) are chained in the Acions field list of the freeze
     --  node using Append_Freeze_Actions.
  
!    procedure Freeze_Type (N : Node_Id) is
        Def_Id    : constant Entity_Id := Entity (N);
        RACW_Seen : Boolean := False;
  
     begin
        --  Process associated access types needing special processing
--- 4531,4540 ----
     --  for initialization) are chained in the Acions field list of the freeze
     --  node using Append_Freeze_Actions.
  
!    function Freeze_Type (N : Node_Id) return Boolean is
        Def_Id    : constant Entity_Id := Entity (N);
        RACW_Seen : Boolean := False;
+       Result    : Boolean := False;
  
     begin
        --  Process associated access types needing special processing
*************** package body Exp_Ch3 is
*** 4111,4117 ****
  
           if RACW_Seen then
  
!             --  If there are RACWs designating this type, make stubs now.
  
              Remote_Types_Tagged_Full_View_Encountered (Def_Id);
           end if;
--- 4555,4561 ----
  
           if RACW_Seen then
  
!             --  If there are RACWs designating this type, make stubs now
  
              Remote_Types_Tagged_Full_View_Encountered (Def_Id);
           end if;
*************** package body Exp_Ch3 is
*** 4143,4149 ****
              begin
                 if Scope (Old_C) = Base_Type (Def_Id) then
  
!                   --  The entity is the one in the parent. Create new one.
  
                    New_C := New_Copy (Old_C);
                    Set_Parent (New_C, Parent (Old_C));
--- 4587,4593 ----
              begin
                 if Scope (Old_C) = Base_Type (Def_Id) then
  
!                   --  The entity is the one in the parent. Create new one
  
                    New_C := New_Copy (Old_C);
                    Set_Parent (New_C, Parent (Old_C));
*************** package body Exp_Ch3 is
*** 4153,4158 ****
--- 4597,4614 ----
                 end if;
              end;
  
+             if Is_Itype (Def_Id)
+               and then Is_Record_Type (Underlying_Type (Scope (Def_Id)))
+             then
+                --  The freeze node is only used to introduce the controller,
+                --  the back-end has no use for it for a discriminated
+                --   component.
+ 
+                Set_Freeze_Node (Def_Id, Empty);
+                Set_Has_Delayed_Freeze (Def_Id, False);
+                Result := True;
+             end if;
+ 
           --  Similar process if the controller of the subtype is not
           --  present but the parent has it. This can happen with constrained
           --  record components where the subtype is an itype.
*************** package body Exp_Ch3 is
*** 4177,4183 ****
  
                 Set_Freeze_Node (Def_Id, Empty);
                 Set_Has_Delayed_Freeze (Def_Id, False);
!                Remove (N);
              end;
           end if;
  
--- 4633,4639 ----
  
                 Set_Freeze_Node (Def_Id, Empty);
                 Set_Has_Delayed_Freeze (Def_Id, False);
!                Result := True;
              end;
           end if;
  
*************** package body Exp_Ch3 is
*** 4364,4380 ****
                  (Is_Incomplete_Or_Private_Type (Desig_Type)
                     and then No (Full_View (Desig_Type))
  
!                --  An exception is made for types defined in the run-time
!                --  because Ada.Tags.Tag itself is such a type and cannot
!                --  afford this unnecessary overhead that would generates a
!                --  loop in the expansion scheme...
  
!                    and then not In_Runtime (Def_Id)
  
!                --  Another exception is if Restrictions (No_Finalization)
!                --  is active, since then we know nothing is controlled.
  
!                    and then not Restrictions (No_Finalization))
  
                 --  If the designated type is not frozen yet, its controlled
                 --  status must be retrieved explicitly.
--- 4820,4836 ----
                  (Is_Incomplete_Or_Private_Type (Desig_Type)
                     and then No (Full_View (Desig_Type))
  
!                   --  An exception is made for types defined in the run-time
!                   --  because Ada.Tags.Tag itself is such a type and cannot
!                   --  afford this unnecessary overhead that would generates a
!                   --  loop in the expansion scheme...
  
!                   and then not In_Runtime (Def_Id)
  
!                   --  Another exception is if Restrictions (No_Finalization)
!                   --  is active, since then we know nothing is controlled.
  
!                   and then not Restriction_Active (No_Finalization))
  
                 --  If the designated type is not frozen yet, its controlled
                 --  status must be retrieved explicitly.
*************** package body Exp_Ch3 is
*** 4421,4427 ****
          and then Freeze_Node (Full_View (Def_Id)) = N
        then
           Set_Entity (N, Full_View (Def_Id));
!          Freeze_Type (N);
           Set_Entity (N, Def_Id);
  
        --  All other types require no expander action. There are such
--- 4877,4883 ----
          and then Freeze_Node (Full_View (Def_Id)) = N
        then
           Set_Entity (N, Full_View (Def_Id));
!          Result := Freeze_Type (N);
           Set_Entity (N, Def_Id);
  
        --  All other types require no expander action. There are such
*************** package body Exp_Ch3 is
*** 4431,4440 ****
        end if;
  
        Freeze_Stream_Operations (N, Def_Id);
  
     exception
        when RE_Not_Available =>
!          return;
     end Freeze_Type;
  
     -------------------------
--- 4887,4897 ----
        end if;
  
        Freeze_Stream_Operations (N, Def_Id);
+       return Result;
  
     exception
        when RE_Not_Available =>
!          return False;
     end Freeze_Type;
  
     -------------------------
*************** package body Exp_Ch3 is
*** 4443,4456 ****
  
     function Get_Simple_Init_Val
       (T    : Entity_Id;
!       Loc  : Source_Ptr)
!       return Node_Id
     is
        Val    : Node_Id;
-       Typ    : Node_Id;
        Result : Node_Id;
        Val_RE : RE_Id;
  
     begin
        --  For a private type, we should always have an underlying type
        --  (because this was already checked in Needs_Simple_Initialization).
--- 4900,4985 ----
  
     function Get_Simple_Init_Val
       (T    : Entity_Id;
!       Loc  : Source_Ptr;
!       Size : Uint := No_Uint) return Node_Id
     is
        Val    : Node_Id;
        Result : Node_Id;
        Val_RE : RE_Id;
  
+       Size_To_Use : Uint;
+       --  This is the size to be used for computation of the appropriate
+       --  initial value for the Normalize_Scalars and Initialize_Scalars case.
+ 
+       Lo_Bound : Uint;
+       Hi_Bound : Uint;
+       --  These are the values computed by the procedure Check_Subtype_Bounds
+ 
+       procedure Check_Subtype_Bounds;
+       --  This procedure examines the subtype T, and its ancestor subtypes
+       --  and derived types to determine the best known information about
+       --  the bounds of the subtype. After the call Lo_Bound is set either
+       --  to No_Uint if no information can be determined, or to a value which
+       --  represents a known low bound, i.e. a valid value of the subtype can
+       --  not be less than this value. Hi_Bound is similarly set to a known
+       --  high bound (valid value cannot be greater than this).
+ 
+       --------------------------
+       -- Check_Subtype_Bounds --
+       --------------------------
+ 
+       procedure Check_Subtype_Bounds is
+          ST1  : Entity_Id;
+          ST2  : Entity_Id;
+          Lo   : Node_Id;
+          Hi   : Node_Id;
+          Loval : Uint;
+          Hival : Uint;
+ 
+       begin
+          Lo_Bound := No_Uint;
+          Hi_Bound := No_Uint;
+ 
+          --  Loop to climb ancestor subtypes and derived types
+ 
+          ST1 := T;
+          loop
+             if not Is_Discrete_Type (ST1) then
+                return;
+             end if;
+ 
+             Lo := Type_Low_Bound (ST1);
+             Hi := Type_High_Bound (ST1);
+ 
+             if Compile_Time_Known_Value (Lo) then
+                Loval := Expr_Value (Lo);
+ 
+                if Lo_Bound = No_Uint or else Lo_Bound < Loval then
+                   Lo_Bound := Loval;
+                end if;
+             end if;
+ 
+             if Compile_Time_Known_Value (Hi) then
+                Hival := Expr_Value (Hi);
+ 
+                if Hi_Bound = No_Uint or else Hi_Bound > Hival then
+                   Hi_Bound := Hival;
+                end if;
+             end if;
+ 
+             ST2 := Ancestor_Subtype (ST1);
+ 
+             if No (ST2) then
+                ST2 := Etype (ST1);
+             end if;
+ 
+             exit when ST1 = ST2;
+             ST1 := ST2;
+          end loop;
+       end Check_Subtype_Bounds;
+ 
+    --  Start of processing for Get_Simple_Init_Val
+ 
     begin
        --  For a private type, we should always have an underlying type
        --  (because this was already checked in Needs_Simple_Initialization).
*************** package body Exp_Ch3 is
*** 4458,4464 ****
        --  do an Unchecked_Convert to the private type.
  
        if Is_Private_Type (T) then
!          Val := Get_Simple_Init_Val (Underlying_Type (T), Loc);
  
           --  A special case, if the underlying value is null, then qualify
           --  it with the underlying type, so that the null is properly typed
--- 4987,4993 ----
        --  do an Unchecked_Convert to the private type.
  
        if Is_Private_Type (T) then
!          Val := Get_Simple_Init_Val (Underlying_Type (T), Loc, Size);
  
           --  A special case, if the underlying value is null, then qualify
           --  it with the underlying type, so that the null is properly typed
*************** package body Exp_Ch3 is
*** 4492,4537 ****
        elsif Is_Scalar_Type (T) then
           pragma Assert (Init_Or_Norm_Scalars);
  
           --  Processing for Normalize_Scalars case
  
           if Normalize_Scalars then
  
!             --  First prepare a value (out of subtype range if possible)
  
!             if Is_Real_Type (T) or else Is_Integer_Type (T) then
!                Val :=
!                  Make_Attribute_Reference (Loc,
!                    Prefix => New_Occurrence_Of (Base_Type (T), Loc),
!                    Attribute_Name => Name_First);
  
!             elsif Is_Modular_Integer_Type (T) then
!                Val :=
!                  Make_Attribute_Reference (Loc,
!                    Prefix => New_Occurrence_Of (Base_Type (T), Loc),
!                    Attribute_Name => Name_Last);
  
              else
!                pragma Assert (Is_Enumeration_Type (T));
  
!                if Esize (T) <= 8 then
!                   Typ := RTE (RE_Unsigned_8);
!                elsif Esize (T) <= 16 then
!                   Typ := RTE (RE_Unsigned_16);
!                elsif Esize (T) <= 32 then
!                   Typ := RTE (RE_Unsigned_32);
!                else
!                   Typ := RTE (RE_Unsigned_64);
!                end if;
  
!                Val :=
!                  Make_Attribute_Reference (Loc,
!                    Prefix => New_Occurrence_Of (Typ, Loc),
!                    Attribute_Name => Name_Last);
              end if;
  
           --  Here for Initialize_Scalars case
  
           else
              if Is_Floating_Point_Type (T) then
                 if Root_Type (T) = Standard_Short_Float then
                    Val_RE := RE_IS_Isf;
--- 5021,5118 ----
        elsif Is_Scalar_Type (T) then
           pragma Assert (Init_Or_Norm_Scalars);
  
+          --  Compute size of object. If it is given by the caller, we can
+          --  use it directly, otherwise we use Esize (T) as an estimate. As
+          --  far as we know this covers all cases correctly.
+ 
+          if Size = No_Uint or else Size <= Uint_0 then
+             Size_To_Use := UI_Max (Uint_1, Esize (T));
+          else
+             Size_To_Use := Size;
+          end if;
+ 
+          --  Maximum size to use is 64 bits, since we will create values
+          --  of type Unsigned_64 and the range must fit this type.
+ 
+          if Size_To_Use /= No_Uint and then Size_To_Use > Uint_64 then
+             Size_To_Use := Uint_64;
+          end if;
+ 
+          --  Check known bounds of subtype
+ 
+          Check_Subtype_Bounds;
+ 
           --  Processing for Normalize_Scalars case
  
           if Normalize_Scalars then
  
!             --  If zero is invalid, it is a convenient value to use that is
!             --  for sure an appropriate invalid value in all situations.
  
!             if Lo_Bound /= No_Uint and then Lo_Bound > Uint_0 then
!                Val := Make_Integer_Literal (Loc, 0);
  
!             --  Cases where all one bits is the appropriate invalid value
! 
!             --  For modular types, all 1 bits is either invalid or valid. If
!             --  it is valid, then there is nothing that can be done since there
!             --  are no invalid values (we ruled out zero already).
! 
!             --  For signed integer types that have no negative values, either
!             --  there is room for negative values, or there is not. If there
!             --  is, then all 1 bits may be interpretecd as minus one, which is
!             --  certainly invalid. Alternatively it is treated as the largest
!             --  positive value, in which case the observation for modular types
!             --  still applies.
! 
!             --  For float types, all 1-bits is a NaN (not a number), which is
!             --  certainly an appropriately invalid value.
! 
!             elsif Is_Unsigned_Type (T)
!               or else Is_Floating_Point_Type (T)
!               or else Is_Enumeration_Type (T)
!             then
!                Val := Make_Integer_Literal (Loc, 2 ** Size_To_Use - 1);
! 
!                --  Resolve as Unsigned_64, because the largest number we
!                --  can generate is out of range of universal integer.
! 
!                Analyze_And_Resolve (Val, RTE (RE_Unsigned_64));
! 
!             --  Case of signed types
  
              else
!                declare
!                   Signed_Size : constant Uint :=
!                                   UI_Min (Uint_63, Size_To_Use - 1);
  
!                begin
!                   --  Normally we like to use the most negative number. The
!                   --  one exception is when this number is in the known subtype
!                   --  range and the largest positive number is not in the known
!                   --  subtype range.
  
!                   --  For this exceptional case, use largest positive value
! 
!                   if Lo_Bound /= No_Uint and then Hi_Bound /= No_Uint
!                     and then Lo_Bound <= (-(2 ** Signed_Size))
!                     and then Hi_Bound < 2 ** Signed_Size
!                   then
!                      Val := Make_Integer_Literal (Loc, 2 ** Signed_Size - 1);
! 
!                      --  Normal case of largest negative value
! 
!                   else
!                      Val := Make_Integer_Literal (Loc, -(2 ** Signed_Size));
!                   end if;
!                end;
              end if;
  
           --  Here for Initialize_Scalars case
  
           else
+             --  For float types, use float values from System.Scalar_Values
+ 
              if Is_Floating_Point_Type (T) then
                 if Root_Type (T) = Standard_Short_Float then
                    Val_RE := RE_IS_Isf;
*************** package body Exp_Ch3 is
*** 4543,4567 ****
                    Val_RE := RE_IS_Ill;
                 end if;
  
!             elsif Is_Unsigned_Type (Base_Type (T)) then
!                if Esize (T) = 8 then
                    Val_RE := RE_IS_Iu1;
!                elsif Esize (T) = 16 then
                    Val_RE := RE_IS_Iu2;
!                elsif Esize (T) = 32 then
                    Val_RE := RE_IS_Iu4;
!                else pragma Assert (Esize (T) = 64);
                    Val_RE := RE_IS_Iu8;
                 end if;
  
!             else -- signed type
!                if Esize (T) = 8 then
                    Val_RE := RE_IS_Is1;
!                elsif Esize (T) = 16 then
                    Val_RE := RE_IS_Is2;
!                elsif Esize (T) = 32 then
                    Val_RE := RE_IS_Is4;
!                else pragma Assert (Esize (T) = 64);
                    Val_RE := RE_IS_Is8;
                 end if;
              end if;
--- 5124,5165 ----
                    Val_RE := RE_IS_Ill;
                 end if;
  
!             --  If zero is invalid, use zero values from System.Scalar_Values
! 
!             elsif Lo_Bound /= No_Uint and then Lo_Bound > Uint_0 then
!                if Size_To_Use <= 8 then
!                   Val_RE := RE_IS_Iz1;
!                elsif Size_To_Use <= 16 then
!                   Val_RE := RE_IS_Iz2;
!                elsif Size_To_Use <= 32 then
!                   Val_RE := RE_IS_Iz4;
!                else
!                   Val_RE := RE_IS_Iz8;
!                end if;
! 
!             --  For unsigned, use unsigned values from System.Scalar_Values
! 
!             elsif Is_Unsigned_Type (T) then
!                if Size_To_Use <= 8 then
                    Val_RE := RE_IS_Iu1;
!                elsif Size_To_Use <= 16 then
                    Val_RE := RE_IS_Iu2;
!                elsif Size_To_Use <= 32 then
                    Val_RE := RE_IS_Iu4;
!                else
                    Val_RE := RE_IS_Iu8;
                 end if;
  
!             --  For signed, use signed values from System.Scalar_Values
! 
!             else
!                if Size_To_Use <= 8 then
                    Val_RE := RE_IS_Is1;
!                elsif Size_To_Use <= 16 then
                    Val_RE := RE_IS_Is2;
!                elsif Size_To_Use <= 32 then
                    Val_RE := RE_IS_Is4;
!                else
                    Val_RE := RE_IS_Is8;
                 end if;
              end if;
*************** package body Exp_Ch3 is
*** 4569,4579 ****
              Val := New_Occurrence_Of (RTE (Val_RE), Loc);
           end if;
  
!          --  The final expression is obtained by doing an unchecked
!          --  conversion of this result to the base type of the
!          --  required subtype. We use the base type to avoid the
!          --  unchecked conversion from chopping bits, and then we
!          --  set Kill_Range_Check to preserve the "bad" value.
  
           Result := Unchecked_Convert_To (Base_Type (T), Val);
  
--- 5167,5177 ----
              Val := New_Occurrence_Of (RTE (Val_RE), Loc);
           end if;
  
!          --  The final expression is obtained by doing an unchecked conversion
!          --  of this result to the base type of the required subtype. We use
!          --  the base type to avoid the unchecked conversion from chopping
!          --  bits, and then we set Kill_Range_Check to preserve the "bad"
!          --  value.
  
           Result := Unchecked_Convert_To (Base_Type (T), Val);
  
*************** package body Exp_Ch3 is
*** 4587,4597 ****
  
           return Result;
  
!       --  String or Wide_String (must have Initialize_Scalars set)
  
        elsif Root_Type (T) = Standard_String
                or else
              Root_Type (T) = Standard_Wide_String
        then
           pragma Assert (Init_Or_Norm_Scalars);
  
--- 5185,5197 ----
  
           return Result;
  
!       --  String or Wide_[Wide]_String (must have Initialize_Scalars set)
  
        elsif Root_Type (T) = Standard_String
                or else
              Root_Type (T) = Standard_Wide_String
+               or else
+             Root_Type (T) = Standard_Wide_Wide_String
        then
           pragma Assert (Init_Or_Norm_Scalars);
  
*************** package body Exp_Ch3 is
*** 4602,4608 ****
                   Choices => New_List (
                     Make_Others_Choice (Loc)),
                   Expression =>
!                    Get_Simple_Init_Val (Component_Type (T), Loc))));
  
        --  Access type is initialized to null
  
--- 5202,5209 ----
                   Choices => New_List (
                     Make_Others_Choice (Loc)),
                   Expression =>
!                    Get_Simple_Init_Val
!                      (Component_Type (T), Loc, Esize (Root_Type (T))))));
  
        --  Access type is initialized to null
  
*************** package body Exp_Ch3 is
*** 4610,4638 ****
           return
             Make_Null (Loc);
  
-       --  We initialize modular packed bit arrays to zero, to make sure that
-       --  unused bits are zero, as required (see spec of Exp_Pakd). Also note
-       --  that this improves gigi code, since the value tracing knows that
-       --  all bits of the variable start out at zero. The value of zero has
-       --  to be unchecked converted to the proper array type.
- 
-       elsif Is_Bit_Packed_Array (T) then
-          declare
-             PAT : constant Entity_Id := Packed_Array_Type (T);
-             Nod : Node_Id;
- 
-          begin
-             pragma Assert (Is_Modular_Integer_Type (PAT));
- 
-             Nod :=
-               Make_Unchecked_Type_Conversion (Loc,
-                 Subtype_Mark => New_Occurrence_Of (T, Loc),
-                 Expression   => Make_Integer_Literal (Loc, 0));
- 
-             Set_Etype (Expression (Nod), PAT);
-             return Nod;
-          end;
- 
        --  No other possibilities should arise, since we should only be
        --  calling Get_Simple_Init_Val if Needs_Simple_Initialization
        --  returned True, indicating one of the above cases held.
--- 5211,5216 ----
*************** package body Exp_Ch3 is
*** 4757,4770 ****
     --     when Vn => <Make_Eq_Case> on subcomponents
     --  end case;
  
!    function Make_Eq_Case (Node : Node_Id; CL : Node_Id) return List_Id is
!       Loc      : constant Source_Ptr := Sloc (Node);
        Result   : constant List_Id    := New_List;
        Variant  : Node_Id;
        Alt_List : List_Id;
  
     begin
!       Append_To (Result, Make_Eq_If (Node, Component_Items (CL)));
  
        if No (Variant_Part (CL)) then
           return Result;
--- 5335,5352 ----
     --     when Vn => <Make_Eq_Case> on subcomponents
     --  end case;
  
!    function Make_Eq_Case
!      (E     : Entity_Id;
!       CL    : Node_Id;
!       Discr : Entity_Id := Empty) return List_Id
!    is
!       Loc      : constant Source_Ptr := Sloc (E);
        Result   : constant List_Id    := New_List;
        Variant  : Node_Id;
        Alt_List : List_Id;
  
     begin
!       Append_To (Result, Make_Eq_If (E, Component_Items (CL)));
  
        if No (Variant_Part (CL)) then
           return Result;
*************** package body Exp_Ch3 is
*** 4782,4799 ****
           Append_To (Alt_List,
             Make_Case_Statement_Alternative (Loc,
               Discrete_Choices => New_Copy_List (Discrete_Choices (Variant)),
!              Statements => Make_Eq_Case (Node, Component_List (Variant))));
  
           Next_Non_Pragma (Variant);
        end loop;
  
!       Append_To (Result,
!         Make_Case_Statement (Loc,
!           Expression =>
!             Make_Selected_Component (Loc,
!               Prefix => Make_Identifier (Loc, Name_X),
!               Selector_Name => New_Copy (Name (Variant_Part (CL)))),
!           Alternatives => Alt_List));
  
        return Result;
     end Make_Eq_Case;
--- 5364,5392 ----
           Append_To (Alt_List,
             Make_Case_Statement_Alternative (Loc,
               Discrete_Choices => New_Copy_List (Discrete_Choices (Variant)),
!              Statements => Make_Eq_Case (E, Component_List (Variant))));
  
           Next_Non_Pragma (Variant);
        end loop;
  
!       --  If we have an Unchecked_Union, use one of the parameters that
!       --  captures the discriminants.
! 
!       if Is_Unchecked_Union (E) then
!          Append_To (Result,
!            Make_Case_Statement (Loc,
!              Expression => New_Reference_To (Discr, Loc),
!              Alternatives => Alt_List));
! 
!       else
!          Append_To (Result,
!            Make_Case_Statement (Loc,
!              Expression =>
!                Make_Selected_Component (Loc,
!                  Prefix => Make_Identifier (Loc, Name_X),
!                  Selector_Name => New_Copy (Name (Variant_Part (CL)))),
!              Alternatives => Alt_List));
!       end if;
  
        return Result;
     end Make_Eq_Case;
*************** package body Exp_Ch3 is
*** 4815,4822 ****
  
     --  or a null statement if the list L is empty
  
!    function Make_Eq_If (Node : Node_Id; L : List_Id) return Node_Id is
!       Loc        : constant Source_Ptr := Sloc (Node);
        C          : Node_Id;
        Field_Name : Name_Id;
        Cond       : Node_Id;
--- 5408,5418 ----
  
     --  or a null statement if the list L is empty
  
!    function Make_Eq_If
!      (E : Entity_Id;
!       L : List_Id) return Node_Id
!    is
!       Loc        : constant Source_Ptr := Sloc (E);
        C          : Node_Id;
        Field_Name : Name_Id;
        Cond       : Node_Id;
*************** package body Exp_Ch3 is
*** 4862,4868 ****
  
           else
              return
!               Make_Implicit_If_Statement (Node,
                  Condition => Cond,
                  Then_Statements => New_List (
                    Make_Return_Statement (Loc,
--- 5458,5464 ----
  
           else
              return
!               Make_Implicit_If_Statement (E,
                  Condition => Cond,
                  Then_Statements => New_List (
                    Make_Return_Statement (Loc,
*************** package body Exp_Ch3 is
*** 4939,4948 ****
        --  We also skip these operations if dispatching is not available
        --  or if streams are not available (since what's the point?)
  
!       if not Is_Limited_Type (Tag_Typ)
!         and then RTE_Available (RE_Tag)
!         and then RTE_Available (RE_Root_Stream_Type)
!       then
           Append_To (Res,
             Predef_Stream_Attr_Spec (Loc, Tag_Typ, TSS_Stream_Read));
           Append_To (Res,
--- 5535,5541 ----
        --  We also skip these operations if dispatching is not available
        --  or if streams are not available (since what's the point?)
  
!       if Stream_Operations_OK (Tag_Typ) then
           Append_To (Res,
             Predef_Stream_Attr_Spec (Loc, Tag_Typ, TSS_Stream_Read));
           Append_To (Res,
*************** package body Exp_Ch3 is
*** 4981,4986 ****
--- 5574,5580 ----
                                              N_Subprogram_Renaming_Declaration)
                and then Etype (First_Formal (Node (Prim))) =
                           Etype (Next_Formal (First_Formal (Node (Prim))))
+               and then Base_Type (Etype (Node (Prim))) = Standard_Boolean
  
              then
                 Eq_Needed := False;
*************** package body Exp_Ch3 is
*** 5089,5095 ****
  
        --  We also skip these if finalization is not available
  
!       elsif Restrictions (No_Finalization) then
           null;
  
        elsif Etype (Tag_Typ) = Tag_Typ or else Controlled_Type (Tag_Typ) then
--- 5683,5689 ----
  
        --  We also skip these if finalization is not available
  
!       elsif Restriction_Active (No_Finalization) then
           null;
  
        elsif Etype (Tag_Typ) = Tag_Typ or else Controlled_Type (Tag_Typ) then
*************** package body Exp_Ch3 is
*** 5131,5139 ****
  
        elsif Is_Access_Type (T)
          or else (Init_Or_Norm_Scalars and then (Is_Scalar_Type (T)))
- 
-         or else (Is_Bit_Packed_Array (T)
-                    and then Is_Modular_Integer_Type (Packed_Array_Type (T)))
        then
           return True;
  
--- 5725,5730 ----
*************** package body Exp_Ch3 is
*** 5145,5151 ****
        elsif Init_Or_Norm_Scalars
          and then
            (Root_Type (T) = Standard_String
!             or else Root_Type (T) = Standard_Wide_String)
          and then
            (not Is_Itype (T)
              or else Nkind (Associated_Node_For_Itype (T)) /= N_Aggregate)
--- 5736,5743 ----
        elsif Init_Or_Norm_Scalars
          and then
            (Root_Type (T) = Standard_String
!              or else Root_Type (T) = Standard_Wide_String
!              or else Root_Type (T) = Standard_Wide_Wide_String)
          and then
            (not Is_Itype (T)
              or else Nkind (Associated_Node_For_Itype (T)) /= N_Aggregate)
*************** package body Exp_Ch3 is
*** 5165,5172 ****
       (Loc      : Source_Ptr;
        Tag_Typ  : Entity_Id;
        Name     : TSS_Name_Type;
!       For_Body : Boolean := False)
!       return     Node_Id
     is
        Prof   : List_Id;
        Type_B : Entity_Id;
--- 5757,5763 ----
       (Loc      : Source_Ptr;
        Tag_Typ  : Entity_Id;
        Name     : TSS_Name_Type;
!       For_Body : Boolean := False) return Node_Id
     is
        Prof   : List_Id;
        Type_B : Entity_Id;
*************** package body Exp_Ch3 is
*** 5220,5227 ****
        Name     : Name_Id;
        Profile  : List_Id;
        Ret_Type : Entity_Id := Empty;
!       For_Body : Boolean := False)
!       return     Node_Id
     is
        Id   : constant Entity_Id := Make_Defining_Identifier (Loc, Name);
        Spec : Node_Id;
--- 5811,5817 ----
        Name     : Name_Id;
        Profile  : List_Id;
        Ret_Type : Entity_Id := Empty;
!       For_Body : Boolean := False) return Node_Id
     is
        Id   : constant Entity_Id := Make_Defining_Identifier (Loc, Name);
        Spec : Node_Id;
*************** package body Exp_Ch3 is
*** 5291,5298 ****
       (Loc      : Source_Ptr;
        Tag_Typ  : Entity_Id;
        Name     : TSS_Name_Type;
!       For_Body : Boolean := False)
!       return     Node_Id
     is
        Ret_Type : Entity_Id;
  
--- 5881,5887 ----
       (Loc      : Source_Ptr;
        Tag_Typ  : Entity_Id;
        Name     : TSS_Name_Type;
!       For_Body : Boolean := False) return Node_Id
     is
        Ret_Type : Entity_Id;
  
*************** package body Exp_Ch3 is
*** 5317,5324 ****
  
     function Predefined_Primitive_Bodies
       (Tag_Typ    : Entity_Id;
!       Renamed_Eq : Node_Id)
!       return       List_Id
     is
        Loc       : constant Source_Ptr := Sloc (Tag_Typ);
        Res       : constant List_Id    := New_List;
--- 5906,5912 ----
  
     function Predefined_Primitive_Bodies
       (Tag_Typ    : Entity_Id;
!       Renamed_Eq : Node_Id) return List_Id
     is
        Loc       : constant Source_Ptr := Sloc (Tag_Typ);
        Res       : constant List_Id    := New_List;
*************** package body Exp_Ch3 is
*** 5400,5410 ****
  
        --  Bodies for Dispatching stream IO routines. We need these only for
        --  non-limited types (in the limited case there is no dispatching).
!       --  We also skip them if dispatching is not available.
  
!       if not Is_Limited_Type (Tag_Typ)
!         and then not Restrictions (No_Finalization)
!       then
           if No (TSS (Tag_Typ, TSS_Stream_Read)) then
              Build_Record_Read_Procedure (Loc, Tag_Typ, Decl, Ent);
              Append_To (Res, Decl);
--- 5988,5996 ----
  
        --  Bodies for Dispatching stream IO routines. We need these only for
        --  non-limited types (in the limited case there is no dispatching).
!       --  We also skip them if dispatching or finalization are not available.
  
!       if Stream_Operations_OK (Tag_Typ) then
           if No (TSS (Tag_Typ, TSS_Stream_Read)) then
              Build_Record_Read_Procedure (Loc, Tag_Typ, Decl, Ent);
              Append_To (Res, Decl);
*************** package body Exp_Ch3 is
*** 5538,5544 ****
  
        --  Skip this if finalization is not available
  
!       elsif Restrictions (No_Finalization) then
           null;
  
        elsif (Etype (Tag_Typ) = Tag_Typ or else Is_Controlled (Tag_Typ))
--- 6124,6130 ----
  
        --  Skip this if finalization is not available
  
!       elsif Restriction_Active (No_Finalization) then
           null;
  
        elsif (Etype (Tag_Typ) = Tag_Typ or else Is_Controlled (Tag_Typ))
*************** package body Exp_Ch3 is
*** 5615,5618 ****
--- 6201,6218 ----
  
        return Res;
     end Predefined_Primitive_Freeze;
+ 
+    --------------------------
+    -- Stream_Operations_OK --
+    --------------------------
+ 
+    function Stream_Operations_OK (Typ : Entity_Id) return Boolean is
+    begin
+       return
+         not Is_Limited_Type (Typ)
+           and then RTE_Available (RE_Tag)
+           and then RTE_Available (RE_Root_Stream_Type)
+           and then not Restriction_Active (No_Dispatch)
+           and then not Restriction_Active (No_Streams);
+    end Stream_Operations_OK;
  end Exp_Ch3;
diff -Nrcpad gcc-3.4.3/gcc/ada/exp_ch3.ads gcc-4.0.0/gcc/ada/exp_ch3.ads
*** gcc-3.4.3/gcc/ada/exp_ch3.ads	Mon Dec  8 10:33:15 2003
--- gcc-4.0.0/gcc/ada/exp_ch3.ads	Thu Mar 17 19:53:05 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 1992-2003 Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 1992-2005 Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 28,33 ****
--- 28,34 ----
  
  with Types;  use Types;
  with Elists; use Elists;
+ with Uintp;  use Uintp;
  
  package Exp_Ch3 is
  
*************** package Exp_Ch3 is
*** 43,49 ****
     --  the master for that access type, now that it is known to denote an
     --  object with tasks.
  
!    procedure Expand_Derived_Record (T : Entity_Id; Def : Node_Id);
     --  Add a field _parent in the extension part of the record.
  
     procedure Build_Discr_Checking_Funcs (N : Node_Id);
--- 44,50 ----
     --  the master for that access type, now that it is known to denote an
     --  object with tasks.
  
!    procedure Expand_Record_Extension (T : Entity_Id; Def : Node_Id);
     --  Add a field _parent in the extension part of the record.
  
     procedure Build_Discr_Checking_Funcs (N : Node_Id);
*************** package Exp_Ch3 is
*** 58,65 ****
        In_Init_Proc      : Boolean := False;
        Enclos_Type       : Entity_Id := Empty;
        Discr_Map         : Elist_Id := New_Elmt_List;
!       With_Default_Init : Boolean := False)
!       return              List_Id;
     --  Builds a call to the initialization procedure of the Id entity. Id_Ref
     --  is either a new reference to Id (for record fields), or an indexed
     --  component (for array elements). Loc is the source location for the
--- 59,65 ----
        In_Init_Proc      : Boolean := False;
        Enclos_Type       : Entity_Id := Empty;
        Discr_Map         : Elist_Id := New_Elmt_List;
!       With_Default_Init : Boolean := False) return List_Id;
     --  Builds a call to the initialization procedure of the Id entity. Id_Ref
     --  is either a new reference to Id (for record fields), or an indexed
     --  component (for array elements). Loc is the source location for the
*************** package Exp_Ch3 is
*** 78,90 ****
     --  can appear within expressions in array bounds (not as stand-alone
     --  identifiers) and a general replacement is necessary.
     --
!    --  Ada0Y (AI-287): With_Default_Init is used to indicate that the initia-
!    --  lization call corresponds to a default initialized component of an
!    --  aggregate.
  
!    procedure Freeze_Type (N : Node_Id);
!    --  This procedure executes the freezing actions associated with the given
!    --  freeze type node N.
  
     function Needs_Simple_Initialization (T : Entity_Id) return Boolean;
     --  Certain types need initialization even though there is no specific
--- 78,94 ----
     --  can appear within expressions in array bounds (not as stand-alone
     --  identifiers) and a general replacement is necessary.
     --
!    --  Ada 2005 (AI-287): With_Default_Init is used to indicate that the
!    --  initialization call corresponds to a default initialized component
!    --  of an aggregate.
  
!    function Freeze_Type (N : Node_Id) return Boolean;
!    --  This function executes the freezing actions associated with the given
!    --  freeze type node N and returns True if the node is to be deleted.
!    --  We delete the node if it is present just for front end purpose and
!    --  we don't want Gigi to see the node.  This function can't delete the
!    --  node itself since it would confuse any remaining processing of the
!    --  freeze node.
  
     function Needs_Simple_Initialization (T : Entity_Id) return Boolean;
     --  Certain types need initialization even though there is no specific
*************** package Exp_Ch3 is
*** 97,107 ****
  
     function Get_Simple_Init_Val
       (T    : Entity_Id;
!       Loc  : Source_Ptr)
!       return Node_Id;
     --  For a type which Needs_Simple_Initialization (see above), prepares
     --  the tree for an expression representing the required initial value.
     --  Loc is the source location used in constructing this tree which is
!    --  returned as the result of the call.
  
  end Exp_Ch3;
--- 101,116 ----
  
     function Get_Simple_Init_Val
       (T    : Entity_Id;
!       Loc  : Source_Ptr;
!       Size : Uint := No_Uint) return Node_Id;
     --  For a type which Needs_Simple_Initialization (see above), prepares
     --  the tree for an expression representing the required initial value.
     --  Loc is the source location used in constructing this tree which is
!    --  returned as the result of the call. The Size parameter indicates the
!    --  target size of the object if it is known (indicated by a value that
!    --  is not No_Uint and is greater than zero). If Size is not given (Size
!    --  set to No_Uint, or non-positive), then the Esize of T is used as an
!    --  estimate of the Size. The object size is needed to prepare a known
!    --  invalid value for use by Normalize_Scalars.
  
  end Exp_Ch3;
diff -Nrcpad gcc-3.4.3/gcc/ada/exp_ch4.adb gcc-4.0.0/gcc/ada/exp_ch4.adb
*** gcc-3.4.3/gcc/ada/exp_ch4.adb	Tue Jan 13 11:51:31 2004
--- gcc-4.0.0/gcc/ada/exp_ch4.adb	Thu Feb 10 13:54:15 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Opt;      use Opt;
*** 47,52 ****
--- 47,53 ----
  with Rtsfind;  use Rtsfind;
  with Sem;      use Sem;
  with Sem_Cat;  use Sem_Cat;
+ with Sem_Ch3;  use Sem_Ch3;
  with Sem_Ch13; use Sem_Ch13;
  with Sem_Eval; use Sem_Eval;
  with Sem_Res;  use Sem_Res;
*************** with Sem_Type; use Sem_Type;
*** 54,60 ****
  with Sem_Util; use Sem_Util;
  with Sem_Warn; use Sem_Warn;
  with Sinfo;    use Sinfo;
- with Sinfo.CN; use Sinfo.CN;
  with Snames;   use Snames;
  with Stand;    use Stand;
  with Targparm; use Targparm;
--- 55,60 ----
*************** with Validsw;  use Validsw;
*** 66,74 ****
  
  package body Exp_Ch4 is
  
!    ------------------------
!    --  Local Subprograms --
!    ------------------------
  
     procedure Binary_Op_Validity_Checks (N : Node_Id);
     pragma Inline (Binary_Op_Validity_Checks);
--- 66,74 ----
  
  package body Exp_Ch4 is
  
!    -----------------------
!    -- Local Subprograms --
!    -----------------------
  
     procedure Binary_Op_Validity_Checks (N : Node_Id);
     pragma Inline (Binary_Op_Validity_Checks);
*************** package body Exp_Ch4 is
*** 94,114 ****
  
     function Expand_Array_Equality
       (Nod    : Node_Id;
-       Typ    : Entity_Id;
-       A_Typ  : Entity_Id;
        Lhs    : Node_Id;
        Rhs    : Node_Id;
!       Bodies : List_Id)
!       return   Node_Id;
     --  Expand an array equality into a call to a function implementing this
     --  equality, and a call to it. Loc is the location for the generated
!    --  nodes. Typ is the type of the array, and Lhs, Rhs are the array
!    --  expressions to be compared. A_Typ is the type of the arguments,
!    --  which may be a private type, in which case Typ is its full view.
     --  Bodies is a list on which to attach bodies of local functions that
!    --  are created in the process. This is the responsibility of the
     --  caller to insert those bodies at the right place. Nod provides
!    --  the Sloc value for the generated code.
  
     procedure Expand_Boolean_Operator (N : Node_Id);
     --  Common expansion processing for Boolean operators (And, Or, Xor)
--- 94,114 ----
  
     function Expand_Array_Equality
       (Nod    : Node_Id;
        Lhs    : Node_Id;
        Rhs    : Node_Id;
!       Bodies : List_Id;
!       Typ    : Entity_Id) return Node_Id;
     --  Expand an array equality into a call to a function implementing this
     --  equality, and a call to it. Loc is the location for the generated
!    --  nodes. Lhs and Rhs are the array expressions to be compared.
     --  Bodies is a list on which to attach bodies of local functions that
!    --  are created in the process. It is the responsibility of the
     --  caller to insert those bodies at the right place. Nod provides
!    --  the Sloc value for the generated code. Normally the types used
!    --  for the generated equality routine are taken from Lhs and Rhs.
!    --  However, in some situations of generated code, the Etype fields
!    --  of Lhs and Rhs are not set yet. In such cases, Typ supplies the
!    --  type to be used for the formal parameters.
  
     procedure Expand_Boolean_Operator (N : Node_Id);
     --  Common expansion processing for Boolean operators (And, Or, Xor)
*************** package body Exp_Ch4 is
*** 119,132 ****
        Typ    : Entity_Id;
        Lhs    : Node_Id;
        Rhs    : Node_Id;
!       Bodies : List_Id)
!       return   Node_Id;
     --  Local recursive function used to expand equality for nested
     --  composite types. Used by Expand_Record/Array_Equality, Bodies
     --  is a list on which to attach bodies of local functions that are
     --  created in the process. This is the responsability of the caller
     --  to insert those bodies at the right place. Nod provides the Sloc
!    --  value for generated code.
  
     procedure Expand_Concatenate_Other (Cnode : Node_Id; Opnds : List_Id);
     --  This routine handles expansion of concatenation operations, where
--- 119,132 ----
        Typ    : Entity_Id;
        Lhs    : Node_Id;
        Rhs    : Node_Id;
!       Bodies : List_Id) return Node_Id;
     --  Local recursive function used to expand equality for nested
     --  composite types. Used by Expand_Record/Array_Equality, Bodies
     --  is a list on which to attach bodies of local functions that are
     --  created in the process. This is the responsability of the caller
     --  to insert those bodies at the right place. Nod provides the Sloc
!    --  value for generated code. Lhs and Rhs are the left and right sides
!    --  for the comparison, and Typ is the type of the arrays to compare.
  
     procedure Expand_Concatenate_Other (Cnode : Node_Id; Opnds : List_Id);
     --  This routine handles expansion of concatenation operations, where
*************** package body Exp_Ch4 is
*** 150,169 ****
     function Get_Allocator_Final_List
       (N    : Node_Id;
        T    : Entity_Id;
!       PtrT : Entity_Id)
!       return Entity_Id;
     --  If the designated type is controlled, build final_list expression
     --  for created object. If context is an access parameter, create a
     --  local access type to have a usable finalization list.
  
     procedure Insert_Dereference_Action (N : Node_Id);
!    --  N is an expression whose type is an access. When the type is derived
!    --  from Checked_Pool, expands a call to the primitive 'dereference'.
  
     function Make_Array_Comparison_Op
!      (Typ   : Entity_Id;
!       Nod   : Node_Id)
!       return  Node_Id;
     --  Comparisons between arrays are expanded in line. This function
     --  produces the body of the implementation of (a > b), where a and b
     --  are one-dimensional arrays of some discrete type. The original
--- 150,179 ----
     function Get_Allocator_Final_List
       (N    : Node_Id;
        T    : Entity_Id;
!       PtrT : Entity_Id) return Entity_Id;
     --  If the designated type is controlled, build final_list expression
     --  for created object. If context is an access parameter, create a
     --  local access type to have a usable finalization list.
  
+    function Has_Inferable_Discriminants (N : Node_Id) return Boolean;
+    --  Ada 2005 (AI-216): A view of an Unchecked_Union object has inferable
+    --  discriminants if it has a constrained nominal type, unless the object
+    --  is a component of an enclosing Unchecked_Union object that is subject
+    --  to a per-object constraint and the enclosing object lacks inferable
+    --  discriminants.
+    --
+    --  An expression of an Unchecked_Union type has inferable discriminants
+    --  if it is either a name of an object with inferable discriminants or a
+    --  qualified expression whose subtype mark denotes a constrained subtype.
+ 
     procedure Insert_Dereference_Action (N : Node_Id);
!    --  N is an expression whose type is an access. When the type of the
!    --  associated storage pool is derived from Checked_Pool, generate a
!    --  call to the 'Dereference' primitive operation.
  
     function Make_Array_Comparison_Op
!      (Typ : Entity_Id;
!       Nod : Node_Id) return Node_Id;
     --  Comparisons between arrays are expanded in line. This function
     --  produces the body of the implementation of (a > b), where a and b
     --  are one-dimensional arrays of some discrete type. The original
*************** package body Exp_Ch4 is
*** 171,179 ****
     --  Nod provides the Sloc value for the generated code.
  
     function Make_Boolean_Array_Op
!      (Typ  : Entity_Id;
!       N    : Node_Id)
!       return Node_Id;
     --  Boolean operations on boolean arrays are expanded in line. This
     --  function produce the body for the node N, which is (a and b),
     --  (a or b), or (a xor b). It is used only the normal case and not
--- 181,188 ----
     --  Nod provides the Sloc value for the generated code.
  
     function Make_Boolean_Array_Op
!      (Typ : Entity_Id;
!       N   : Node_Id) return Node_Id;
     --  Boolean operations on boolean arrays are expanded in line. This
     --  function produce the body for the node N, which is (a and b),
     --  (a or b), or (a xor b). It is used only the normal case and not
*************** package body Exp_Ch4 is
*** 193,202 ****
     --  Deals with a second operand being (or not) a class-wide type.
  
     function Safe_In_Place_Array_Op
!      (Lhs  : Node_Id;
!       Op1  : Node_Id;
!       Op2  : Node_Id)
!       return Boolean;
     --  In the context of an assignment, where the right-hand side is a
     --  boolean operation on arrays, check whether operation can be performed
     --  in place.
--- 202,210 ----
     --  Deals with a second operand being (or not) a class-wide type.
  
     function Safe_In_Place_Array_Op
!      (Lhs : Node_Id;
!       Op1 : Node_Id;
!       Op2 : Node_Id) return Boolean;
     --  In the context of an assignment, where the right-hand side is a
     --  boolean operation on arrays, check whether operation can be performed
     --  in place.
*************** package body Exp_Ch4 is
*** 242,248 ****
        if Kind = N_Op_Not then
           if Nkind (Op1) in N_Binary_Op then
  
!             --  Use negated version of the binary operators.
  
              if Nkind (Op1) = N_Op_And then
                 Proc_Name := RTE (RE_Vector_Nand);
--- 250,256 ----
        if Kind = N_Op_Not then
           if Nkind (Op1) in N_Binary_Op then
  
!             --  Use negated version of the binary operators
  
              if Nkind (Op1) = N_Op_And then
                 Proc_Name := RTE (RE_Vector_Nand);
*************** package body Exp_Ch4 is
*** 379,384 ****
--- 387,393 ----
  
           --  We analyze by hand the new internal allocator to avoid
           --  any recursion and inappropriate call to Initialize
+ 
           if not Aggr_In_Place then
              Remove_Side_Effects (Exp);
           end if;
*************** package body Exp_Ch4 is
*** 419,425 ****
              if Controlled_Type (T)
                and then Ekind (PtrT) = E_Anonymous_Access_Type
              then
!                --  Create local finalization list for access parameter.
  
                 Flist := Get_Allocator_Final_List (N, Base_Type (T), PtrT);
              end if;
--- 428,434 ----
              if Controlled_Type (T)
                and then Ekind (PtrT) = E_Anonymous_Access_Type
              then
!                --  Create local finalization list for access parameter
  
                 Flist := Get_Allocator_Final_List (N, Base_Type (T), PtrT);
              end if;
*************** package body Exp_Ch4 is
*** 523,529 ****
                 --  Normal case, not a secondary stack allocation
  
                 else
!                   Flist := Find_Final_List (PtrT);
                    Attach :=  Make_Integer_Literal (Loc, 2);
                 end if;
  
--- 532,548 ----
                 --  Normal case, not a secondary stack allocation
  
                 else
!                   if Controlled_Type (T)
!                     and then Ekind (PtrT) = E_Anonymous_Access_Type
!                   then
!                      --  Create local finalization list for access parameter
! 
!                      Flist :=
!                        Get_Allocator_Final_List (N, Base_Type (T), PtrT);
!                   else
!                      Flist := Find_Final_List (PtrT);
!                   end if;
! 
                    Attach :=  Make_Integer_Literal (Loc, 2);
                 end if;
  
*************** package body Exp_Ch4 is
*** 574,580 ****
          and then Nkind (Exp) = N_Allocator
          and then Nkind (Expression (Exp)) /= N_Qualified_Expression
        then
!          --  Apply constraint to designated subtype indication.
  
           Apply_Constraint_Check (Expression (Exp),
             Designated_Type (Designated_Type (PtrT)),
--- 593,599 ----
          and then Nkind (Exp) = N_Allocator
          and then Nkind (Expression (Exp)) /= N_Qualified_Expression
        then
!          --  Apply constraint to designated subtype indication
  
           Apply_Constraint_Check (Expression (Exp),
             Designated_Type (Designated_Type (PtrT)),
*************** package body Exp_Ch4 is
*** 862,868 ****
     --  Expand an equality function for multi-dimensional arrays. Here is
     --  an example of such a function for Nb_Dimension = 2
  
!    --  function Enn (A : arr; B : arr) return boolean is
     --  begin
     --     if (A'length (1) = 0 or else A'length (2) = 0)
     --          and then
--- 881,887 ----
     --  Expand an equality function for multi-dimensional arrays. Here is
     --  an example of such a function for Nb_Dimension = 2
  
!    --  function Enn (A : atyp; B : btyp) return boolean is
     --  begin
     --     if (A'length (1) = 0 or else A'length (2) = 0)
     --          and then
*************** package body Exp_Ch4 is
*** 870,920 ****
     --     then
     --        return True;    -- RM 4.5.2(22)
     --     end if;
!    --
     --     if A'length (1) /= B'length (1)
     --               or else
     --           A'length (2) /= B'length (2)
     --     then
     --        return False;   -- RM 4.5.2(23)
     --     end if;
!    --
     --     declare
!    --        A1 : Index_type_1 := A'first (1)
!    --        B1 : Index_Type_1 := B'first (1)
     --     begin
     --        loop
     --           declare
!    --              A2 : Index_type_2 := A'first (2);
!    --              B2 : Index_type_2 := B'first (2)
     --           begin
     --              loop
     --                 if A (A1, A2) /= B (B1, B2) then
     --                    return False;
     --                 end if;
!    --
     --                 exit when A2 = A'last (2);
!    --                 A2 := Index_type2'succ (A2);
!    --                 B2 := Index_type2'succ (B2);
     --              end loop;
     --           end;
!    --
     --           exit when A1 = A'last (1);
!    --           A1 := Index_type1'succ (A1);
!    --           B1 := Index_type1'succ (B1);
     --        end loop;
     --     end;
!    --
     --     return true;
     --  end Enn;
  
     function Expand_Array_Equality
       (Nod    : Node_Id;
-       Typ    : Entity_Id;
-       A_Typ  : Entity_Id;
        Lhs    : Node_Id;
        Rhs    : Node_Id;
!       Bodies : List_Id)
!       return   Node_Id
     is
        Loc         : constant Source_Ptr := Sloc (Nod);
        Decls       : constant List_Id    := New_List;
--- 889,947 ----
     --     then
     --        return True;    -- RM 4.5.2(22)
     --     end if;
! 
     --     if A'length (1) /= B'length (1)
     --               or else
     --           A'length (2) /= B'length (2)
     --     then
     --        return False;   -- RM 4.5.2(23)
     --     end if;
! 
     --     declare
!    --        A1 : Index_T1 := A'first (1);
!    --        B1 : Index_T1 := B'first (1);
     --     begin
     --        loop
     --           declare
!    --              A2 : Index_T2 := A'first (2);
!    --              B2 : Index_T2 := B'first (2);
     --           begin
     --              loop
     --                 if A (A1, A2) /= B (B1, B2) then
     --                    return False;
     --                 end if;
! 
     --                 exit when A2 = A'last (2);
!    --                 A2 := Index_T2'succ (A2);
!    --                 B2 := Index_T2'succ (B2);
     --              end loop;
     --           end;
! 
     --           exit when A1 = A'last (1);
!    --           A1 := Index_T1'succ (A1);
!    --           B1 := Index_T1'succ (B1);
     --        end loop;
     --     end;
! 
     --     return true;
     --  end Enn;
  
+    --  Note on the formal types used (atyp and btyp). If either of the
+    --  arrays is of a private type, we use the underlying type, and
+    --  do an unchecked conversion of the actual. If either of the arrays
+    --  has a bound depending on a discriminant, then we use the base type
+    --  since otherwise we have an escaped discriminant in the function.
+ 
+    --  If both arrays are constrained and have the same bounds, we can
+    --  generate a loop with an explicit iteration scheme using a 'Range
+    --  attribute over the first array.
+ 
     function Expand_Array_Equality
       (Nod    : Node_Id;
        Lhs    : Node_Id;
        Rhs    : Node_Id;
!       Bodies : List_Id;
!       Typ    : Entity_Id) return Node_Id
     is
        Loc         : constant Source_Ptr := Sloc (Nod);
        Decls       : constant List_Id    := New_List;
*************** package body Exp_Ch4 is
*** 929,966 ****
        A : constant Entity_Id := Make_Defining_Identifier (Loc, Name_uA);
        B : constant Entity_Id := Make_Defining_Identifier (Loc, Name_uB);
  
        function Arr_Attr
          (Arr : Entity_Id;
           Nam : Name_Id;
!          Num : Int)
!          return Node_Id;
!       --  This builds the attribute reference Arr'Nam (Expr).
  
        function Component_Equality (Typ : Entity_Id) return Node_Id;
        --  Create one statement to compare corresponding components,
        --  designated by a full set of indices.
  
        function Handle_One_Dimension
          (N     : Int;
!          Index : Node_Id)
!          return  Node_Id;
!       --  This procedure returns a declare block:
        --
        --    declare
!       --       An : Index_Type_n := A'First (n);
!       --       Bn : Index_Type_n := B'First (n);
        --    begin
        --       loop
        --          xxx
!       --          exit when An = A'Last (n);
!       --          An := Index_Type_n'Succ (An)
!       --          Bn := Index_Type_n'Succ (Bn)
        --       end loop;
        --    end;
        --
!       --  where N is the value of "n" in the above code. Index is the
        --  N'th index node, whose Etype is Index_Type_n in the above code.
!       --  The xxx statement is either the declare block for the next
        --  dimension or if this is the last dimension the comparison
        --  of corresponding components of the arrays.
        --
--- 956,1005 ----
        A : constant Entity_Id := Make_Defining_Identifier (Loc, Name_uA);
        B : constant Entity_Id := Make_Defining_Identifier (Loc, Name_uB);
  
+       Ltyp : Entity_Id;
+       Rtyp : Entity_Id;
+       --  The parameter types to be used for the formals
+ 
        function Arr_Attr
          (Arr : Entity_Id;
           Nam : Name_Id;
!          Num : Int) return Node_Id;
!       --  This builds the attribute reference Arr'Nam (Expr)
  
        function Component_Equality (Typ : Entity_Id) return Node_Id;
        --  Create one statement to compare corresponding components,
        --  designated by a full set of indices.
  
+       function Get_Arg_Type (N : Node_Id) return Entity_Id;
+       --  Given one of the arguments, computes the appropriate type to
+       --  be used for that argument in the corresponding function formal
+ 
        function Handle_One_Dimension
          (N     : Int;
!          Index : Node_Id) return Node_Id;
!       --  This procedure returns the following code
        --
        --    declare
!       --       Bn : Index_T := B'First (N);
        --    begin
        --       loop
        --          xxx
!       --          exit when An = A'Last (N);
!       --          An := Index_T'Succ (An)
!       --          Bn := Index_T'Succ (Bn)
        --       end loop;
        --    end;
        --
!       --  If both indices are constrained and identical, the procedure
!       --  returns a simpler loop:
!       --
!       --      for An in A'Range (N) loop
!       --         xxx
!       --      end loop
!       --
!       --  N is the dimension for which we are generating a loop. Index is the
        --  N'th index node, whose Etype is Index_Type_n in the above code.
!       --  The xxx statement is either the loop or declare for the next
        --  dimension or if this is the last dimension the comparison
        --  of corresponding components of the arrays.
        --
*************** package body Exp_Ch4 is
*** 990,997 ****
        function Arr_Attr
          (Arr : Entity_Id;
           Nam : Name_Id;
!          Num : Int)
!          return Node_Id
        is
        begin
           return
--- 1029,1035 ----
        function Arr_Attr
          (Arr : Entity_Id;
           Nam : Name_Id;
!          Num : Int) return Node_Id
        is
        begin
           return
*************** package body Exp_Ch4 is
*** 1025,1111 ****
           Test := Expand_Composite_Equality
                     (Nod, Component_Type (Typ), L, R, Decls);
  
!          return
!            Make_Implicit_If_Statement (Nod,
!              Condition => Make_Op_Not (Loc, Right_Opnd => Test),
!              Then_Statements => New_List (
!                Make_Return_Statement (Loc,
!                  Expression => New_Occurrence_Of (Standard_False, Loc))));
        end Component_Equality;
  
        --------------------------
        -- Handle_One_Dimension --
        ---------------------------
  
        function Handle_One_Dimension
          (N     : Int;
!          Index : Node_Id)
!          return  Node_Id
        is
           An : constant Entity_Id := Make_Defining_Identifier (Loc,
                                        Chars => New_Internal_Name ('A'));
!          Bn : constant Entity_Id := Make_Defining_Identifier (Loc,
!                                       Chars => New_Internal_Name ('B'));
!          Index_Type_n  : Entity_Id;
  
        begin
!          if N > Number_Dimensions (Typ) then
!             return Component_Equality (Typ);
           end if;
  
!          --  Case where we generate a declare block
  
-          Index_Type_n := Base_Type (Etype (Index));
           Append (New_Reference_To (An, Loc), Index_List1);
           Append (New_Reference_To (Bn, Loc), Index_List2);
  
!          return
!             Make_Block_Statement (Loc,
!               Declarations => New_List (
!                  Make_Object_Declaration (Loc,
!                    Defining_Identifier => An,
!                    Object_Definition   =>
!                      New_Reference_To (Index_Type_n, Loc),
!                    Expression => Arr_Attr (A, Name_First, N)),
  
!                  Make_Object_Declaration (Loc,
!                    Defining_Identifier => Bn,
!                    Object_Definition   =>
!                      New_Reference_To (Index_Type_n, Loc),
!                    Expression => Arr_Attr (B, Name_First, N))),
  
!               Handled_Statement_Sequence =>
!                 Make_Handled_Sequence_Of_Statements (Loc,
!                   Statements => New_List (
!                     Make_Implicit_Loop_Statement (Nod,
!                       Statements => New_List (
!                         Handle_One_Dimension (N + 1, Next_Index (Index)),
  
!                         Make_Exit_Statement (Loc,
!                           Condition =>
!                             Make_Op_Eq (Loc,
!                               Left_Opnd  => New_Reference_To (An, Loc),
!                               Right_Opnd => Arr_Attr (A, Name_Last, N))),
  
!                         Make_Assignment_Statement (Loc,
!                           Name => New_Reference_To (An, Loc),
!                           Expression =>
!                             Make_Attribute_Reference (Loc,
!                               Prefix =>
!                                 New_Reference_To (Index_Type_n, Loc),
!                               Attribute_Name => Name_Succ,
!                               Expressions => New_List (
!                                 New_Reference_To (An, Loc)))),
  
!                        Make_Assignment_Statement (Loc,
!                           Name => New_Reference_To (Bn, Loc),
!                           Expression =>
!                             Make_Attribute_Reference (Loc,
!                               Prefix =>
!                                 New_Reference_To (Index_Type_n, Loc),
!                               Attribute_Name => Name_Succ,
!                               Expressions => New_List (
!                                 New_Reference_To (Bn, Loc)))))))));
        end Handle_One_Dimension;
  
        -----------------------
--- 1063,1233 ----
           Test := Expand_Composite_Equality
                     (Nod, Component_Type (Typ), L, R, Decls);
  
!          --  If some (sub)component is an unchecked_union, the whole
!          --  operation will raise program error.
! 
!          if Nkind (Test) = N_Raise_Program_Error then
!             return Test;
! 
!          else
!             return
!               Make_Implicit_If_Statement (Nod,
!                 Condition => Make_Op_Not (Loc, Right_Opnd => Test),
!                 Then_Statements => New_List (
!                   Make_Return_Statement (Loc,
!                     Expression => New_Occurrence_Of (Standard_False, Loc))));
!          end if;
        end Component_Equality;
  
+       ------------------
+       -- Get_Arg_Type --
+       ------------------
+ 
+       function Get_Arg_Type (N : Node_Id) return Entity_Id is
+          T : Entity_Id;
+          X : Node_Id;
+ 
+       begin
+          T := Etype (N);
+ 
+          if No (T) then
+             return Typ;
+ 
+          else
+             T := Underlying_Type (T);
+ 
+             X := First_Index (T);
+             while Present (X) loop
+                if Denotes_Discriminant (Type_Low_Bound (Etype (X)))
+                  or else
+                    Denotes_Discriminant (Type_High_Bound (Etype (X)))
+                then
+                   T := Base_Type (T);
+                   exit;
+                end if;
+ 
+                Next_Index (X);
+             end loop;
+ 
+             return T;
+          end if;
+       end Get_Arg_Type;
+ 
        --------------------------
        -- Handle_One_Dimension --
        ---------------------------
  
        function Handle_One_Dimension
          (N     : Int;
!          Index : Node_Id) return Node_Id
        is
+          Need_Separate_Indexes : constant Boolean :=
+                                    Ltyp /= Rtyp
+                                      or else not Is_Constrained (Ltyp);
+          --  If the index types are identical, and we are working with
+          --  constrained types, then we can use the same index for both of
+          --  the arrays.
+ 
           An : constant Entity_Id := Make_Defining_Identifier (Loc,
                                        Chars => New_Internal_Name ('A'));
! 
!          Bn       : Entity_Id;
!          Index_T  : Entity_Id;
!          Stm_List : List_Id;
!          Loop_Stm : Node_Id;
  
        begin
!          if N > Number_Dimensions (Ltyp) then
!             return Component_Equality (Ltyp);
           end if;
  
!          --  Case where we generate a loop
! 
!          Index_T := Base_Type (Etype (Index));
! 
!          if Need_Separate_Indexes then
!             Bn :=
!               Make_Defining_Identifier (Loc,
!                 Chars => New_Internal_Name ('B'));
!          else
!             Bn := An;
!          end if;
  
           Append (New_Reference_To (An, Loc), Index_List1);
           Append (New_Reference_To (Bn, Loc), Index_List2);
  
!          Stm_List := New_List (
!            Handle_One_Dimension (N + 1, Next_Index (Index)));
  
!          if Need_Separate_Indexes then
!             --  Generate guard for loop, followed by increments of indices
  
!             Append_To (Stm_List,
!                Make_Exit_Statement (Loc,
!                  Condition =>
!                    Make_Op_Eq (Loc,
!                       Left_Opnd => New_Reference_To (An, Loc),
!                       Right_Opnd => Arr_Attr (A, Name_Last, N))));
  
!             Append_To (Stm_List,
!               Make_Assignment_Statement (Loc,
!                 Name       => New_Reference_To (An, Loc),
!                 Expression =>
!                   Make_Attribute_Reference (Loc,
!                     Prefix         => New_Reference_To (Index_T, Loc),
!                     Attribute_Name => Name_Succ,
!                     Expressions    => New_List (New_Reference_To (An, Loc)))));
  
!             Append_To (Stm_List,
!               Make_Assignment_Statement (Loc,
!                 Name       => New_Reference_To (Bn, Loc),
!                 Expression =>
!                   Make_Attribute_Reference (Loc,
!                     Prefix         => New_Reference_To (Index_T, Loc),
!                     Attribute_Name => Name_Succ,
!                     Expressions    => New_List (New_Reference_To (Bn, Loc)))));
!          end if;
  
!          --  If separate indexes, we need a declare block for An and Bn,
!          --  and a loop without an iteration scheme.
! 
!          if Need_Separate_Indexes then
!             Loop_Stm :=
!               Make_Implicit_Loop_Statement (Nod, Statements => Stm_List);
! 
!             return
!               Make_Block_Statement (Loc,
!                 Declarations => New_List (
!                   Make_Object_Declaration (Loc,
!                     Defining_Identifier => An,
!                     Object_Definition   => New_Reference_To (Index_T, Loc),
!                     Expression          => Arr_Attr (A, Name_First, N)),
! 
!                   Make_Object_Declaration (Loc,
!                     Defining_Identifier => Bn,
!                     Object_Definition   => New_Reference_To (Index_T, Loc),
!                     Expression          => Arr_Attr (B, Name_First, N))),
! 
!                 Handled_Statement_Sequence =>
!                   Make_Handled_Sequence_Of_Statements (Loc,
!                     Statements => New_List (Loop_Stm)));
! 
!          --  If no separate indexes, return loop statement with explicit
!          --  iteration scheme on its own
! 
!          else
!             Loop_Stm :=
!               Make_Implicit_Loop_Statement (Nod,
!                 Statements       => Stm_List,
!                 Iteration_Scheme =>
!                   Make_Iteration_Scheme (Loc,
!                     Loop_Parameter_Specification =>
!                       Make_Loop_Parameter_Specification (Loc,
!                         Defining_Identifier         => An,
!                         Discrete_Subtype_Definition =>
!                           Arr_Attr (A, Name_Range, N))));
!             return Loop_Stm;
!          end if;
        end Handle_One_Dimension;
  
        -----------------------
*************** package body Exp_Ch4 is
*** 1122,1128 ****
        begin
           Alist := Empty;
           Blist := Empty;
!          for J in 1 .. Number_Dimensions (Typ) loop
              Atest :=
                Make_Op_Eq (Loc,
                  Left_Opnd  => Arr_Attr (A, Name_Length, J),
--- 1244,1250 ----
        begin
           Alist := Empty;
           Blist := Empty;
!          for J in 1 .. Number_Dimensions (Ltyp) loop
              Atest :=
                Make_Op_Eq (Loc,
                  Left_Opnd  => Arr_Attr (A, Name_Length, J),
*************** package body Exp_Ch4 is
*** 1166,1172 ****
  
        begin
           Result := Empty;
!          for J in 1 .. Number_Dimensions (Typ) loop
              Rtest :=
                Make_Op_Ne (Loc,
                  Left_Opnd  => Arr_Attr (A, Name_Length, J),
--- 1288,1294 ----
  
        begin
           Result := Empty;
!          for J in 1 .. Number_Dimensions (Ltyp) loop
              Rtest :=
                Make_Op_Ne (Loc,
                  Left_Opnd  => Arr_Attr (A, Name_Length, J),
*************** package body Exp_Ch4 is
*** 1188,1201 ****
     --  Start of processing for Expand_Array_Equality
  
     begin
        Formals := New_List (
          Make_Parameter_Specification (Loc,
            Defining_Identifier => A,
!           Parameter_Type      => New_Reference_To (Typ, Loc)),
  
          Make_Parameter_Specification (Loc,
            Defining_Identifier => B,
!           Parameter_Type      => New_Reference_To (Typ, Loc)));
  
        Func_Name := Make_Defining_Identifier (Loc,  New_Internal_Name ('E'));
  
--- 1310,1338 ----
     --  Start of processing for Expand_Array_Equality
  
     begin
+       Ltyp := Get_Arg_Type (Lhs);
+       Rtyp := Get_Arg_Type (Rhs);
+ 
+       --  For now, if the argument types are not the same, go to the
+       --  base type, since the code assumes that the formals have the
+       --  same type. This is fixable in future ???
+ 
+       if Ltyp /= Rtyp then
+          Ltyp := Base_Type (Ltyp);
+          Rtyp := Base_Type (Rtyp);
+          pragma Assert (Ltyp = Rtyp);
+       end if;
+ 
+       --  Build list of formals for function
+ 
        Formals := New_List (
          Make_Parameter_Specification (Loc,
            Defining_Identifier => A,
!           Parameter_Type      => New_Reference_To (Ltyp, Loc)),
  
          Make_Parameter_Specification (Loc,
            Defining_Identifier => B,
!           Parameter_Type      => New_Reference_To (Rtyp, Loc)));
  
        Func_Name := Make_Defining_Identifier (Loc,  New_Internal_Name ('E'));
  
*************** package body Exp_Ch4 is
*** 1229,1258 ****
                        Expression =>
                          New_Occurrence_Of (Standard_False, Loc)))),
  
!                 Handle_One_Dimension (1, First_Index (Typ)),
  
                  Make_Return_Statement (Loc,
                    Expression => New_Occurrence_Of (Standard_True, Loc)))));
  
           Set_Has_Completion (Func_Name, True);
  
           --  If the array type is distinct from the type of the arguments,
           --  it is the full view of a private type. Apply an unchecked
           --  conversion to insure that analysis of the call succeeds.
  
!          if Base_Type (A_Typ) /= Base_Type (Typ) then
!             Actuals := New_List (
!               OK_Convert_To (Typ, Lhs),
!               OK_Convert_To (Typ, Rhs));
!          else
!             Actuals := New_List (Lhs, Rhs);
!          end if;
  
           Append_To (Bodies, Func_Body);
  
           return
             Make_Function_Call (Loc,
!              Name => New_Reference_To (Func_Name, Loc),
               Parameter_Associations => Actuals);
     end Expand_Array_Equality;
  
--- 1366,1410 ----
                        Expression =>
                          New_Occurrence_Of (Standard_False, Loc)))),
  
!                 Handle_One_Dimension (1, First_Index (Ltyp)),
  
                  Make_Return_Statement (Loc,
                    Expression => New_Occurrence_Of (Standard_True, Loc)))));
  
           Set_Has_Completion (Func_Name, True);
+          Set_Is_Inlined (Func_Name);
  
           --  If the array type is distinct from the type of the arguments,
           --  it is the full view of a private type. Apply an unchecked
           --  conversion to insure that analysis of the call succeeds.
  
!          declare
!             L, R : Node_Id;
! 
!          begin
!             L := Lhs;
!             R := Rhs;
! 
!             if No (Etype (Lhs))
!               or else Base_Type (Etype (Lhs)) /= Base_Type (Ltyp)
!             then
!                L := OK_Convert_To (Ltyp, Lhs);
!             end if;
! 
!             if No (Etype (Rhs))
!               or else Base_Type (Etype (Rhs)) /= Base_Type (Rtyp)
!             then
!                R := OK_Convert_To (Rtyp, Rhs);
!             end if;
! 
!             Actuals := New_List (L, R);
!          end;
  
           Append_To (Bodies, Func_Body);
  
           return
             Make_Function_Call (Loc,
!              Name                   => New_Reference_To (Func_Name, Loc),
               Parameter_Associations => Actuals);
     end Expand_Array_Equality;
  
*************** package body Exp_Ch4 is
*** 1337,1344 ****
        Typ    : Entity_Id;
        Lhs    : Node_Id;
        Rhs    : Node_Id;
!       Bodies : List_Id)
!       return   Node_Id
     is
        Loc       : constant Source_Ptr := Sloc (Nod);
        Full_Type : Entity_Id;
--- 1489,1495 ----
        Typ    : Entity_Id;
        Lhs    : Node_Id;
        Rhs    : Node_Id;
!       Bodies : List_Id) return Node_Id
     is
        Loc       : constant Source_Ptr := Sloc (Nod);
        Full_Type : Entity_Id;
*************** package body Exp_Ch4 is
*** 1380,1387 ****
           --  case of any composite type recursively containing such fields.
  
           else
!             return Expand_Array_Equality
!                      (Nod, Full_Type, Typ, Lhs, Rhs, Bodies);
           end if;
  
        elsif Is_Tagged_Type (Full_Type) then
--- 1531,1537 ----
           --  case of any composite type recursively containing such fields.
  
           else
!             return Expand_Array_Equality (Nod, Lhs, Rhs, Bodies, Full_Type);
           end if;
  
        elsif Is_Tagged_Type (Full_Type) then
*************** package body Exp_Ch4 is
*** 1413,1419 ****
              Eq_Op := Node (Prim);
              exit when Chars (Eq_Op) = Name_Op_Eq
                and then Etype (First_Formal (Eq_Op)) =
!                        Etype (Next_Formal (First_Formal (Eq_Op)));
              Next_Elmt (Prim);
              pragma Assert (Present (Prim));
           end loop;
--- 1563,1570 ----
              Eq_Op := Node (Prim);
              exit when Chars (Eq_Op) = Name_Op_Eq
                and then Etype (First_Formal (Eq_Op)) =
!                        Etype (Next_Formal (First_Formal (Eq_Op)))
!               and then Base_Type (Etype (Eq_Op)) = Standard_Boolean;
              Next_Elmt (Prim);
              pragma Assert (Present (Prim));
           end loop;
*************** package body Exp_Ch4 is
*** 1450,1455 ****
--- 1601,1716 ----
                 end;
  
              else
+                --  Comparison between Unchecked_Union components
+ 
+                if Is_Unchecked_Union (Full_Type) then
+                   declare
+                      Lhs_Type      : Node_Id := Full_Type;
+                      Rhs_Type      : Node_Id := Full_Type;
+                      Lhs_Discr_Val : Node_Id;
+                      Rhs_Discr_Val : Node_Id;
+ 
+                   begin
+                      --  Lhs subtype
+ 
+                      if Nkind (Lhs) = N_Selected_Component then
+                         Lhs_Type := Etype (Entity (Selector_Name (Lhs)));
+                      end if;
+ 
+                      --  Rhs subtype
+ 
+                      if Nkind (Rhs) = N_Selected_Component then
+                         Rhs_Type := Etype (Entity (Selector_Name (Rhs)));
+                      end if;
+ 
+                      --  Lhs of the composite equality
+ 
+                      if Is_Constrained (Lhs_Type) then
+ 
+                         --  Since the enclosing record can never be an
+                         --  Unchecked_Union (this code is executed for records
+                         --  that do not have variants), we may reference its
+                         --  discriminant(s).
+ 
+                         if Nkind (Lhs) = N_Selected_Component
+                           and then Has_Per_Object_Constraint (
+                                      Entity (Selector_Name (Lhs)))
+                         then
+                            Lhs_Discr_Val :=
+                              Make_Selected_Component (Loc,
+                                Prefix => Prefix (Lhs),
+                                Selector_Name =>
+                                  New_Copy (
+                                    Get_Discriminant_Value (
+                                      First_Discriminant (Lhs_Type),
+                                      Lhs_Type,
+                                      Stored_Constraint (Lhs_Type))));
+ 
+                         else
+                            Lhs_Discr_Val := New_Copy (
+                              Get_Discriminant_Value (
+                                First_Discriminant (Lhs_Type),
+                                Lhs_Type,
+                                Stored_Constraint (Lhs_Type)));
+ 
+                         end if;
+                      else
+                         --  It is not possible to infer the discriminant since
+                         --  the subtype is not constrained.
+ 
+                         return
+                           Make_Raise_Program_Error (Loc,
+                             Reason => PE_Unchecked_Union_Restriction);
+                      end if;
+ 
+                      --  Rhs of the composite equality
+ 
+                      if Is_Constrained (Rhs_Type) then
+                         if Nkind (Rhs) = N_Selected_Component
+                           and then Has_Per_Object_Constraint (
+                                      Entity (Selector_Name (Rhs)))
+                         then
+                            Rhs_Discr_Val :=
+                              Make_Selected_Component (Loc,
+                                Prefix => Prefix (Rhs),
+                                Selector_Name =>
+                                  New_Copy (
+                                    Get_Discriminant_Value (
+                                      First_Discriminant (Rhs_Type),
+                                      Rhs_Type,
+                                      Stored_Constraint (Rhs_Type))));
+ 
+                         else
+                            Rhs_Discr_Val := New_Copy (
+                              Get_Discriminant_Value (
+                                First_Discriminant (Rhs_Type),
+                                Rhs_Type,
+                                Stored_Constraint (Rhs_Type)));
+ 
+                         end if;
+                      else
+                         return
+                           Make_Raise_Program_Error (Loc,
+                             Reason => PE_Unchecked_Union_Restriction);
+                      end if;
+ 
+                      --  Call the TSS equality function with the inferred
+                      --  discriminant values.
+ 
+                      return
+                        Make_Function_Call (Loc,
+                          Name => New_Reference_To (Eq_Op, Loc),
+                          Parameter_Associations => New_List (
+                            Lhs,
+                            Rhs,
+                            Lhs_Discr_Val,
+                            Rhs_Discr_Val));
+                   end;
+                end if;
+ 
+                --  Shouldn't this be an else, we can't fall through
+                --  the above IF, right???
+ 
                 return
                   Make_Function_Call (Loc,
                     Name => New_Reference_To (Eq_Op, Loc),
*************** package body Exp_Ch4 is
*** 1520,1526 ****
     --            end loop;
     --         end if;
  
!    --         ...
  
     --         if Sn'Length /= 0 then
     --            P := Sn'First;
--- 1781,1787 ----
     --            end loop;
     --         end if;
  
!    --         . . .
  
     --         if Sn'Length /= 0 then
     --            P := Sn'First;
*************** package body Exp_Ch4 is
*** 1592,1639 ****
        --    L := Si'First;       otherwise (where I is the input param given)
  
        function H return Node_Id;
!       --  Builds reference to identifier H.
  
        function Ind_Val (E : Node_Id) return Node_Id;
        --  Builds expression Ind_Typ'Val (E);
  
        function L return Node_Id;
!       --  Builds reference to identifier L.
  
        function L_Pos return Node_Id;
!       --  Builds expression Integer_Type'(Ind_Typ'Pos (L)).
!       --  We qualify the expression to avoid universal_integer computations
!       --  whenever possible, in the expression for the upper bound H.
  
        function L_Succ return Node_Id;
!       --  Builds expression Ind_Typ'Succ (L).
  
        function One return Node_Id;
!       --  Builds integer literal one.
  
        function P return Node_Id;
!       --  Builds reference to identifier P.
  
        function P_Succ return Node_Id;
!       --  Builds expression Ind_Typ'Succ (P).
  
        function R return Node_Id;
!       --  Builds reference to identifier R.
  
        function S (I : Nat) return Node_Id;
!       --  Builds reference to identifier Si, where I is the value given.
  
        function S_First (I : Nat) return Node_Id;
!       --  Builds expression Si'First, where I is the value given.
  
        function S_Last (I : Nat) return Node_Id;
!       --  Builds expression Si'Last, where I is the value given.
  
        function S_Length (I : Nat) return Node_Id;
!       --  Builds expression Si'Length, where I is the value given.
  
        function S_Length_Test (I : Nat) return Node_Id;
!       --  Builds expression Si'Length /= 0, where I is the value given.
  
        -------------------
        -- Copy_Into_R_S --
--- 1853,1900 ----
        --    L := Si'First;       otherwise (where I is the input param given)
  
        function H return Node_Id;
!       --  Builds reference to identifier H
  
        function Ind_Val (E : Node_Id) return Node_Id;
        --  Builds expression Ind_Typ'Val (E);
  
        function L return Node_Id;
!       --  Builds reference to identifier L
  
        function L_Pos return Node_Id;
!       --  Builds expression Integer_Type'(Ind_Typ'Pos (L)). We qualify the
!       --  expression to avoid universal_integer computations whenever possible,
!       --  in the expression for the upper bound H.
  
        function L_Succ return Node_Id;
!       --  Builds expression Ind_Typ'Succ (L)
  
        function One return Node_Id;
!       --  Builds integer literal one
  
        function P return Node_Id;
!       --  Builds reference to identifier P
  
        function P_Succ return Node_Id;
!       --  Builds expression Ind_Typ'Succ (P)
  
        function R return Node_Id;
!       --  Builds reference to identifier R
  
        function S (I : Nat) return Node_Id;
!       --  Builds reference to identifier Si, where I is the value given
  
        function S_First (I : Nat) return Node_Id;
!       --  Builds expression Si'First, where I is the value given
  
        function S_Last (I : Nat) return Node_Id;
!       --  Builds expression Si'Last, where I is the value given
  
        function S_Length (I : Nat) return Node_Id;
!       --  Builds expression Si'Length, where I is the value given
  
        function S_Length_Test (I : Nat) return Node_Id;
!       --  Builds expression Si'Length /= 0, where I is the value given
  
        -------------------
        -- Copy_Into_R_S --
*************** package body Exp_Ch4 is
*** 2110,2115 ****
--- 2371,2377 ----
  
     procedure Expand_N_Allocator (N : Node_Id) is
        PtrT  : constant Entity_Id  := Etype (N);
+       Dtyp  : constant Entity_Id  := Designated_Type (PtrT);
        Desig : Entity_Id;
        Loc   : constant Source_Ptr := Sloc (N);
        Temp  : Entity_Id;
*************** package body Exp_Ch4 is
*** 2181,2188 ****
           --  so that the constant is not labelled as having a nomimally
           --  unconstrained subtype.
  
!          if Entity (Desig) = Base_Type (Designated_Type (PtrT)) then
!             Desig := New_Occurrence_Of (Designated_Type (PtrT), Loc);
           end if;
  
           Insert_Action (N,
--- 2443,2450 ----
           --  so that the constant is not labelled as having a nomimally
           --  unconstrained subtype.
  
!          if Entity (Desig) = Base_Type (Dtyp) then
!             Desig := New_Occurrence_Of (Dtyp, Loc);
           end if;
  
           Insert_Action (N,
*************** package body Exp_Ch4 is
*** 2207,2212 ****
--- 2469,2476 ----
           return;
        end if;
  
+       --  Handle case of qualified expression (other than optimization above)
+ 
        if Nkind (Expression (N)) = N_Qualified_Expression then
           Expand_Allocator_Expression (N);
  
*************** package body Exp_Ch4 is
*** 2228,2246 ****
  
        else
           declare
!             T         : constant Entity_Id  := Entity (Expression (N));
!             Init      : Entity_Id;
!             Arg1      : Node_Id;
!             Args      : List_Id;
!             Decls     : List_Id;
!             Decl      : Node_Id;
!             Discr     : Elmt_Id;
!             Flist     : Node_Id;
!             Temp_Decl : Node_Id;
!             Temp_Type : Entity_Id;
  
           begin
- 
              if No_Initialization (N) then
                 null;
  
--- 2492,2510 ----
  
        else
           declare
!             T            : constant Entity_Id  := Entity (Expression (N));
!             Init         : Entity_Id;
!             Arg1         : Node_Id;
!             Args         : List_Id;
!             Decls        : List_Id;
!             Decl         : Node_Id;
!             Discr        : Elmt_Id;
!             Flist        : Node_Id;
!             Temp_Decl    : Node_Id;
!             Temp_Type    : Entity_Id;
!             Attach_Level : Uint;
  
           begin
              if No_Initialization (N) then
                 null;
  
*************** package body Exp_Ch4 is
*** 2293,2299 ****
                    --  if the context is access to class wide, indicate that
                    --  the object being allocated has the right specific type.
  
!                   if Is_Class_Wide_Type (Designated_Type (PtrT)) then
                       Arg1 := Unchecked_Convert_To (T, Arg1);
                    end if;
                 end if;
--- 2557,2563 ----
                    --  if the context is access to class wide, indicate that
                    --  the object being allocated has the right specific type.
  
!                   if Is_Class_Wide_Type (Dtyp) then
                       Arg1 := Unchecked_Convert_To (T, Arg1);
                    end if;
                 end if;
*************** package body Exp_Ch4 is
*** 2336,2342 ****
                 --  part of the generated code for the allocator).
  
                 if Has_Task (T) then
- 
                    if No (Master_Id (Base_Type (PtrT))) then
  
                       --  The designated type was an incomplete type, and
--- 2600,2605 ----
*************** package body Exp_Ch4 is
*** 2484,2496 ****
  
                 if Controlled_Type (T) then
                    Flist := Get_Allocator_Final_List (N, Base_Type (T), PtrT);
! 
                    Insert_Actions (N,
                      Make_Init_Call (
                        Ref          => New_Copy_Tree (Arg1),
                        Typ          => T,
                        Flist_Ref    => Flist,
!                       With_Attach  => Make_Integer_Literal (Loc, 2)));
                 end if;
  
                 if Is_CPP_Class (T) then
--- 2747,2764 ----
  
                 if Controlled_Type (T) then
                    Flist := Get_Allocator_Final_List (N, Base_Type (T), PtrT);
!                   if Ekind (PtrT) = E_Anonymous_Access_Type then
!                      Attach_Level := Uint_1;
!                   else
!                      Attach_Level := Uint_2;
!                   end if;
                    Insert_Actions (N,
                      Make_Init_Call (
                        Ref          => New_Copy_Tree (Arg1),
                        Typ          => T,
                        Flist_Ref    => Flist,
!                       With_Attach  => Make_Integer_Literal (Loc,
!                         Attach_Level)));
                 end if;
  
                 if Is_CPP_Class (T) then
*************** package body Exp_Ch4 is
*** 2647,2653 ****
        --         Cnn := else-expr
        --      end if;
  
!       --  and replace the conditional expression by a reference to Cnn.
  
        if Present (Then_Actions (N)) or else Present (Else_Actions (N)) then
           Cnn := Make_Defining_Identifier (Loc, New_Internal_Name ('C'));
--- 2915,2921 ----
        --         Cnn := else-expr
        --      end if;
  
!       --  and replace the conditional expression by a reference to Cnn
  
        if Present (Then_Actions (N)) or else Present (Else_Actions (N)) then
           Cnn := Make_Defining_Identifier (Loc, New_Internal_Name ('C'));
*************** package body Exp_Ch4 is
*** 2708,2717 ****
     -----------------
  
     procedure Expand_N_In (N : Node_Id) is
!       Loc  : constant Source_Ptr := Sloc (N);
!       Rtyp : constant Entity_Id  := Etype (N);
!       Lop  : constant Node_Id    := Left_Opnd (N);
!       Rop  : constant Node_Id    := Right_Opnd (N);
  
     begin
        --  If we have an explicit range, do a bit of optimization based
--- 2976,2986 ----
     -----------------
  
     procedure Expand_N_In (N : Node_Id) is
!       Loc    : constant Source_Ptr := Sloc (N);
!       Rtyp   : constant Entity_Id  := Etype (N);
!       Lop    : constant Node_Id    := Left_Opnd (N);
!       Rop    : constant Node_Id    := Right_Opnd (N);
!       Static : constant Boolean    := Is_OK_Static_Expression (N);
  
     begin
        --  If we have an explicit range, do a bit of optimization based
*************** package body Exp_Ch4 is
*** 2727,2737 ****
--- 2996,3009 ----
           begin
              --  If either check is known to fail, replace result
              --  by False, since the other check does not matter.
+             --  Preserve the static flag for legality checks, because
+             --  we are constant-folding beyond RM 4.9.
  
              if Lcheck = LT or else Ucheck = GT then
                 Rewrite (N,
                   New_Reference_To (Standard_False, Loc));
                 Analyze_And_Resolve (N, Rtyp);
+                Set_Is_Static_Expression (N, Static);
                 return;
  
              --  If both checks are known to succeed, replace result
*************** package body Exp_Ch4 is
*** 2741,2746 ****
--- 3013,3019 ----
                 Rewrite (N,
                   New_Reference_To (Standard_True, Loc));
                 Analyze_And_Resolve (N, Rtyp);
+                Set_Is_Static_Expression (N, Static);
                 return;
  
              --  If lower bound check succeeds and upper bound check is
*************** package body Exp_Ch4 is
*** 2820,2825 ****
--- 3093,3119 ----
                         Prefix => New_Reference_To (Typ, Loc))));
                 Analyze_And_Resolve (N, Rtyp);
                 return;
+ 
+             --  Ada 2005 (AI-216): Program_Error is raised when evaluating
+             --  a membership test if the subtype mark denotes a constrained
+             --  Unchecked_Union subtype and the expression lacks inferable
+             --  discriminants.
+ 
+             elsif Is_Unchecked_Union (Base_Type (Typ))
+               and then Is_Constrained (Typ)
+               and then not Has_Inferable_Discriminants (Lop)
+             then
+                Insert_Action (N,
+                  Make_Raise_Program_Error (Loc,
+                    Reason => PE_Unchecked_Union_Restriction));
+ 
+                --  Prevent Gigi from generating incorrect code by rewriting
+                --  the test as a standard False.
+ 
+                Rewrite (N,
+                  New_Occurrence_Of (Standard_False, Loc));
+ 
+                return;
              end if;
  
              --  Here we have a non-scalar type
*************** package body Exp_Ch4 is
*** 2841,2850 ****
  
                 Check_Subscripts : declare
                    function Construct_Attribute_Reference
!                     (E    : Node_Id;
!                      Nam  : Name_Id;
!                      Dim  : Nat)
!                      return Node_Id;
                    --  Build attribute reference E'Nam(Dim)
  
                    -----------------------------------
--- 3135,3143 ----
  
                 Check_Subscripts : declare
                    function Construct_Attribute_Reference
!                     (E   : Node_Id;
!                      Nam : Name_Id;
!                      Dim : Nat) return Node_Id;
                    --  Build attribute reference E'Nam(Dim)
  
                    -----------------------------------
*************** package body Exp_Ch4 is
*** 2852,2861 ****
                    -----------------------------------
  
                    function Construct_Attribute_Reference
!                     (E    : Node_Id;
!                      Nam  : Name_Id;
!                      Dim  : Nat)
!                      return Node_Id
                    is
                    begin
                       return
--- 3145,3153 ----
                    -----------------------------------
  
                    function Construct_Attribute_Reference
!                     (E   : Node_Id;
!                      Nam : Name_Id;
!                      Dim : Nat) return Node_Id
                    is
                    begin
                       return
*************** package body Exp_Ch4 is
*** 2982,2996 ****
        --  was necessary, but it cleans up the code to do it all the time.
  
        if Is_Access_Type (T) then
! 
!          --  Check whether the prefix comes from a debug pool, and generate
!          --  the check before rewriting.
! 
!          Insert_Dereference_Action (P);
! 
!          Rewrite (P,
!            Make_Explicit_Dereference (Sloc (N),
!              Prefix => Relocate_Node (P)));
           Analyze_And_Resolve (P, Designated_Type (T));
        end if;
  
--- 3274,3280 ----
        --  was necessary, but it cleans up the code to do it all the time.
  
        if Is_Access_Type (T) then
!          Insert_Explicit_Dereference (P);
           Analyze_And_Resolve (P, Designated_Type (T));
        end if;
  
*************** package body Exp_Ch4 is
*** 3295,3301 ****
     --  all three are available, False if any one of these is unavailable.
  
     procedure Expand_N_Op_Concat (N : Node_Id) is
- 
        Opnds : List_Id;
        --  List of operands to be concatenated
  
--- 3579,3584 ----
*************** package body Exp_Ch4 is
*** 3580,3585 ****
--- 3863,3872 ----
        --  build and analyze call, adding conversions if the operation is
        --  inherited.
  
+       function Has_Unconstrained_UU_Component (Typ : Node_Id) return Boolean;
+       --  Determines whether a type has a subcompoment of an unconstrained
+       --  Unchecked_Union subtype. Typ is a record type.
+ 
        -------------------------
        -- Build_Equality_Call --
        -------------------------
*************** package body Exp_Ch4 is
*** 3597,3610 ****
              R_Exp := OK_Convert_To (Op_Type, R_Exp);
           end if;
  
!          Rewrite (N,
!            Make_Function_Call (Loc,
!              Name => New_Reference_To (Eq, Loc),
!              Parameter_Associations => New_List (L_Exp, R_Exp)));
  
           Analyze_And_Resolve (N, Standard_Boolean, Suppress => All_Checks);
        end Build_Equality_Call;
  
     --  Start of processing for Expand_N_Op_Eq
  
     begin
--- 3884,4198 ----
              R_Exp := OK_Convert_To (Op_Type, R_Exp);
           end if;
  
!          --  If we have an Unchecked_Union, we need to add the inferred
!          --  discriminant values as actuals in the function call. At this
!          --  point, the expansion has determined that both operands have
!          --  inferable discriminants.
! 
!          if Is_Unchecked_Union (Op_Type) then
!             declare
!                Lhs_Type      : constant Node_Id := Etype (L_Exp);
!                Rhs_Type      : constant Node_Id := Etype (R_Exp);
!                Lhs_Discr_Val : Node_Id;
!                Rhs_Discr_Val : Node_Id;
! 
!             begin
!                --  Per-object constrained selected components require special
!                --  attention. If the enclosing scope of the component is an
!                --  Unchecked_Union, we can not reference its discriminants
!                --  directly. This is why we use the two extra parameters of
!                --  the equality function of the enclosing Unchecked_Union.
! 
!                --  type UU_Type (Discr : Integer := 0) is
!                --     . . .
!                --  end record;
!                --  pragma Unchecked_Union (UU_Type);
! 
!                --  1. Unchecked_Union enclosing record:
! 
!                --     type Enclosing_UU_Type (Discr : Integer := 0) is record
!                --        . . .
!                --        Comp : UU_Type (Discr);
!                --        . . .
!                --     end Enclosing_UU_Type;
!                --     pragma Unchecked_Union (Enclosing_UU_Type);
! 
!                --     Obj1 : Enclosing_UU_Type;
!                --     Obj2 : Enclosing_UU_Type (1);
! 
!                --     [. . .] Obj1 = Obj2 [. . .]
! 
!                --     Generated code:
! 
!                --     if not (uu_typeEQ (obj1.comp, obj2.comp, a, b)) then
! 
!                --  A and B are the formal parameters of the equality function
!                --  of Enclosing_UU_Type. The function always has two extra
!                --  formals to capture the inferred discriminant values.
! 
!                --  2. Non-Unchecked_Union enclosing record:
! 
!                --     type
!                --       Enclosing_Non_UU_Type (Discr : Integer := 0)
!                --     is record
!                --        . . .
!                --        Comp : UU_Type (Discr);
!                --        . . .
!                --     end Enclosing_Non_UU_Type;
! 
!                --     Obj1 : Enclosing_Non_UU_Type;
!                --     Obj2 : Enclosing_Non_UU_Type (1);
! 
!                --     . . . Obj1 = Obj2 . . .
! 
!                --     Generated code:
! 
!                --     if not (uu_typeEQ (obj1.comp, obj2.comp,
!                --                        obj1.discr, obj2.discr)) then
! 
!                --  In this case we can directly reference the discriminants of
!                --  the enclosing record.
! 
!                --  Lhs of equality
! 
!                if Nkind (Lhs) = N_Selected_Component
!                  and then Has_Per_Object_Constraint
!                             (Entity (Selector_Name (Lhs)))
!                then
!                   --  Enclosing record is an Unchecked_Union, use formal A
! 
!                   if Is_Unchecked_Union (Scope
!                        (Entity (Selector_Name (Lhs))))
!                   then
!                      Lhs_Discr_Val :=
!                        Make_Identifier (Loc,
!                          Chars => Name_A);
! 
!                   --  Enclosing record is of a non-Unchecked_Union type, it is
!                   --  possible to reference the discriminant.
! 
!                   else
!                      Lhs_Discr_Val :=
!                        Make_Selected_Component (Loc,
!                          Prefix => Prefix (Lhs),
!                          Selector_Name =>
!                            New_Copy
!                              (Get_Discriminant_Value
!                                 (First_Discriminant (Lhs_Type),
!                                  Lhs_Type,
!                                  Stored_Constraint (Lhs_Type))));
!                   end if;
! 
!                --  Comment needed here ???
! 
!                else
!                   --  Infer the discriminant value
! 
!                   Lhs_Discr_Val :=
!                     New_Copy
!                       (Get_Discriminant_Value
!                          (First_Discriminant (Lhs_Type),
!                           Lhs_Type,
!                           Stored_Constraint (Lhs_Type)));
!                end if;
! 
!                --  Rhs of equality
! 
!                if Nkind (Rhs) = N_Selected_Component
!                  and then Has_Per_Object_Constraint
!                             (Entity (Selector_Name (Rhs)))
!                then
!                   if Is_Unchecked_Union
!                        (Scope (Entity (Selector_Name (Rhs))))
!                   then
!                      Rhs_Discr_Val :=
!                        Make_Identifier (Loc,
!                          Chars => Name_B);
! 
!                   else
!                      Rhs_Discr_Val :=
!                        Make_Selected_Component (Loc,
!                          Prefix => Prefix (Rhs),
!                          Selector_Name =>
!                            New_Copy (Get_Discriminant_Value (
!                              First_Discriminant (Rhs_Type),
!                              Rhs_Type,
!                              Stored_Constraint (Rhs_Type))));
! 
!                   end if;
!                else
!                   Rhs_Discr_Val :=
!                     New_Copy (Get_Discriminant_Value (
!                       First_Discriminant (Rhs_Type),
!                       Rhs_Type,
!                       Stored_Constraint (Rhs_Type)));
! 
!                end if;
! 
!                Rewrite (N,
!                  Make_Function_Call (Loc,
!                    Name => New_Reference_To (Eq, Loc),
!                    Parameter_Associations => New_List (
!                      L_Exp,
!                      R_Exp,
!                      Lhs_Discr_Val,
!                      Rhs_Discr_Val)));
!             end;
! 
!          --  Normal case, not an unchecked union
! 
!          else
!             Rewrite (N,
!               Make_Function_Call (Loc,
!                 Name => New_Reference_To (Eq, Loc),
!                 Parameter_Associations => New_List (L_Exp, R_Exp)));
!          end if;
  
           Analyze_And_Resolve (N, Standard_Boolean, Suppress => All_Checks);
        end Build_Equality_Call;
  
+       ------------------------------------
+       -- Has_Unconstrained_UU_Component --
+       ------------------------------------
+ 
+       function Has_Unconstrained_UU_Component
+         (Typ : Node_Id) return Boolean
+       is
+          Tdef  : constant Node_Id :=
+                    Type_Definition (Declaration_Node (Typ));
+          Clist : Node_Id;
+          Vpart : Node_Id;
+ 
+          function Component_Is_Unconstrained_UU
+            (Comp : Node_Id) return Boolean;
+          --  Determines whether the subtype of the component is an
+          --  unconstrained Unchecked_Union.
+ 
+          function Variant_Is_Unconstrained_UU
+            (Variant : Node_Id) return Boolean;
+          --  Determines whether a component of the variant has an unconstrained
+          --  Unchecked_Union subtype.
+ 
+          -----------------------------------
+          -- Component_Is_Unconstrained_UU --
+          -----------------------------------
+ 
+          function Component_Is_Unconstrained_UU
+            (Comp : Node_Id) return Boolean
+          is
+          begin
+             if Nkind (Comp) /= N_Component_Declaration then
+                return False;
+             end if;
+ 
+             declare
+                Sindic : constant Node_Id :=
+                           Subtype_Indication (Component_Definition (Comp));
+ 
+             begin
+                --  Unconstrained nominal type. In the case of a constraint
+                --  present, the node kind would have been N_Subtype_Indication.
+ 
+                if Nkind (Sindic) = N_Identifier then
+                   return Is_Unchecked_Union (Base_Type (Etype (Sindic)));
+                end if;
+ 
+                return False;
+             end;
+          end Component_Is_Unconstrained_UU;
+ 
+          ---------------------------------
+          -- Variant_Is_Unconstrained_UU --
+          ---------------------------------
+ 
+          function Variant_Is_Unconstrained_UU
+            (Variant : Node_Id) return Boolean
+          is
+             Clist : constant Node_Id := Component_List (Variant);
+ 
+          begin
+             if Is_Empty_List (Component_Items (Clist)) then
+                return False;
+             end if;
+ 
+             declare
+                Comp : Node_Id := First (Component_Items (Clist));
+ 
+             begin
+                while Present (Comp) loop
+ 
+                   --  One component is sufficent
+ 
+                   if Component_Is_Unconstrained_UU (Comp) then
+                      return True;
+                   end if;
+ 
+                   Next (Comp);
+                end loop;
+             end;
+ 
+             --  None of the components withing the variant were of
+             --  unconstrained Unchecked_Union type.
+ 
+             return False;
+          end Variant_Is_Unconstrained_UU;
+ 
+       --  Start of processing for Has_Unconstrained_UU_Component
+ 
+       begin
+          if Null_Present (Tdef) then
+             return False;
+          end if;
+ 
+          Clist := Component_List (Tdef);
+          Vpart := Variant_Part (Clist);
+ 
+          --  Inspect available components
+ 
+          if Present (Component_Items (Clist)) then
+             declare
+                Comp : Node_Id := First (Component_Items (Clist));
+ 
+             begin
+                while Present (Comp) loop
+ 
+                   --  One component is sufficent
+ 
+                   if Component_Is_Unconstrained_UU (Comp) then
+                      return True;
+                   end if;
+ 
+                   Next (Comp);
+                end loop;
+             end;
+          end if;
+ 
+          --  Inspect available components withing variants
+ 
+          if Present (Vpart) then
+             declare
+                Variant : Node_Id := First (Variants (Vpart));
+ 
+             begin
+                while Present (Variant) loop
+ 
+                   --  One component within a variant is sufficent
+ 
+                   if Variant_Is_Unconstrained_UU (Variant) then
+                      return True;
+                   end if;
+ 
+                   Next (Variant);
+                end loop;
+             end;
+          end if;
+ 
+          --  Neither the available components, nor the components inside the
+          --  variant parts were of an unconstrained Unchecked_Union subtype.
+ 
+          return False;
+       end Has_Unconstrained_UU_Component;
+ 
     --  Start of processing for Expand_N_Op_Eq
  
     begin
*************** package body Exp_Ch4 is
*** 3655,3664 ****
              begin
                 Force_Validity_Checks := True;
                 Rewrite (N,
!                  Expand_Array_Equality (N, Typl, A_Typ,
!                    Relocate_Node (Lhs), Relocate_Node (Rhs), Bodies));
! 
!                Insert_Actions      (N, Bodies);
                 Analyze_And_Resolve (N, Standard_Boolean);
                 Force_Validity_Checks := Save_Force_Validity_Checks;
              end;
--- 4243,4255 ----
              begin
                 Force_Validity_Checks := True;
                 Rewrite (N,
!                  Expand_Array_Equality
!                   (N,
!                    Relocate_Node (Lhs),
!                    Relocate_Node (Rhs),
!                    Bodies,
!                    Typl));
!                Insert_Actions (N, Bodies);
                 Analyze_And_Resolve (N, Standard_Boolean);
                 Force_Validity_Checks := Save_Force_Validity_Checks;
              end;
*************** package body Exp_Ch4 is
*** 3668,3679 ****
           elsif Is_Bit_Packed_Array (Typl) then
              Expand_Packed_Eq (N);
  
!          --  For non-floating-point elementary types, the primitive equality
!          --  always applies, and block-bit comparison is fine. Floating-point
!          --  is an exception because of negative zeroes.
  
           elsif Is_Elementary_Type (Component_Type (Typl))
             and then not Is_Floating_Point_Type (Component_Type (Typl))
             and then Support_Composite_Compare_On_Target
           then
              null;
--- 4259,4273 ----
           elsif Is_Bit_Packed_Array (Typl) then
              Expand_Packed_Eq (N);
  
!          --  Where the component type is elementary we can use a block bit
!          --  comparison (if supported on the target) exception in the case
!          --  of floating-point (negative zero issues require element by
!          --  element comparison), and atomic types (where we must be sure
!          --  to load elements independently).
  
           elsif Is_Elementary_Type (Component_Type (Typl))
             and then not Is_Floating_Point_Type (Component_Type (Typl))
+            and then not Is_Atomic (Component_Type (Typl))
             and then Support_Composite_Compare_On_Target
           then
              null;
*************** package body Exp_Ch4 is
*** 3684,3692 ****
  
           else
              Rewrite (N,
!               Expand_Array_Equality (N, Typl, A_Typ,
!                 Relocate_Node (Lhs), Relocate_Node (Rhs), Bodies));
! 
              Insert_Actions      (N, Bodies,           Suppress => All_Checks);
              Analyze_And_Resolve (N, Standard_Boolean, Suppress => All_Checks);
           end if;
--- 4278,4289 ----
  
           else
              Rewrite (N,
!               Expand_Array_Equality
!                 (N,
!                  Relocate_Node (Lhs),
!                  Relocate_Node (Rhs),
!                  Bodies,
!                  Typl));
              Insert_Actions      (N, Bodies,           Suppress => All_Checks);
              Analyze_And_Resolve (N, Standard_Boolean, Suppress => All_Checks);
           end if;
*************** package body Exp_Ch4 is
*** 3710,3722 ****
                and then Is_Derived_Type (A_Typ)
                and then No (Full_View (A_Typ))
              then
                 Prim := First_Elmt (Collect_Primitive_Operations (A_Typ));
  
!                while Chars (Node (Prim)) /= Name_Op_Eq loop
                    Next_Elmt (Prim);
-                   pragma Assert (Present (Prim));
                 end loop;
  
                 Op_Name := Node (Prim);
  
              --  Find the type's predefined equality or an overriding
--- 4307,4329 ----
                and then Is_Derived_Type (A_Typ)
                and then No (Full_View (A_Typ))
              then
+                --  Search for equality operation, checking that the
+                --  operands have the same type. Note that we must find
+                --  a matching entry, or something is very wrong!
+ 
                 Prim := First_Elmt (Collect_Primitive_Operations (A_Typ));
  
!                while Present (Prim) loop
!                   exit when Chars (Node (Prim)) = Name_Op_Eq
!                     and then Etype (First_Formal (Node (Prim))) =
!                              Etype (Next_Formal (First_Formal (Node (Prim))))
!                     and then
!                       Base_Type (Etype (Node (Prim))) = Standard_Boolean;
! 
                    Next_Elmt (Prim);
                 end loop;
  
+                pragma Assert (Present (Prim));
                 Op_Name := Node (Prim);
  
              --  Find the type's predefined equality or an overriding
*************** package body Exp_Ch4 is
*** 3732,3738 ****
                 end if;
  
                 Prim := First_Elmt (Primitive_Operations (Typl));
- 
                 while Present (Prim) loop
                    exit when Chars (Node (Prim)) = Name_Op_Eq
                      and then Etype (First_Formal (Node (Prim))) =
--- 4339,4344 ----
*************** package body Exp_Ch4 is
*** 3741,3754 ****
                        Base_Type (Etype (Node (Prim))) = Standard_Boolean;
  
                    Next_Elmt (Prim);
-                   pragma Assert (Present (Prim));
                 end loop;
  
                 Op_Name := Node (Prim);
              end if;
  
              Build_Equality_Call (Op_Name);
  
           --  If a type support function is present (for complex cases), use it
  
           elsif Present (TSS (Root_Type (Typl), TSS_Composite_Equality)) then
--- 4347,4404 ----
                        Base_Type (Etype (Node (Prim))) = Standard_Boolean;
  
                    Next_Elmt (Prim);
                 end loop;
  
+                pragma Assert (Present (Prim));
                 Op_Name := Node (Prim);
              end if;
  
              Build_Equality_Call (Op_Name);
  
+          --  Ada 2005 (AI-216): Program_Error is raised when evaluating the
+          --  predefined equality operator for a type which has a subcomponent
+          --  of an Unchecked_Union type whose nominal subtype is unconstrained.
+ 
+          elsif Has_Unconstrained_UU_Component (Typl) then
+             Insert_Action (N,
+               Make_Raise_Program_Error (Loc,
+                 Reason => PE_Unchecked_Union_Restriction));
+ 
+             --  Prevent Gigi from generating incorrect code by rewriting the
+             --  equality as a standard False.
+ 
+             Rewrite (N,
+               New_Occurrence_Of (Standard_False, Loc));
+ 
+          elsif Is_Unchecked_Union (Typl) then
+ 
+             --  If we can infer the discriminants of the operands, we make a
+             --  call to the TSS equality function.
+ 
+             if Has_Inferable_Discriminants (Lhs)
+                  and then
+                Has_Inferable_Discriminants (Rhs)
+             then
+                Build_Equality_Call
+                  (TSS (Root_Type (Typl), TSS_Composite_Equality));
+ 
+             else
+                --  Ada 2005 (AI-216): Program_Error is raised when evaluating
+                --  the predefined equality operator for an Unchecked_Union type
+                --  if either of the operands lack inferable discriminants.
+ 
+                Insert_Action (N,
+                  Make_Raise_Program_Error (Loc,
+                    Reason => PE_Unchecked_Union_Restriction));
+ 
+                --  Prevent Gigi from generating incorrect code by rewriting
+                --  the equality as a standard False.
+ 
+                Rewrite (N,
+                  New_Occurrence_Of (Standard_False, Loc));
+ 
+             end if;
+ 
           --  If a type support function is present (for complex cases), use it
  
           elsif Present (TSS (Root_Type (Typl), TSS_Composite_Equality)) then
*************** package body Exp_Ch4 is
*** 4650,4656 ****
              Build_Boolean_Array_Proc_Call (Parent (N), Opnd, Empty);
              return;
  
!          --  Special case the negation of a binary operation.
  
           elsif (Nkind (Opnd) = N_Op_And
                   or else Nkind (Opnd) = N_Op_Or
--- 5300,5306 ----
              Build_Boolean_Array_Proc_Call (Parent (N), Opnd, Empty);
              return;
  
!          --  Special case the negation of a binary operation
  
           elsif (Nkind (Opnd) = N_Op_And
                   or else Nkind (Opnd) = N_Op_Or
*************** package body Exp_Ch4 is
*** 4675,4688 ****
                 if N = Op1
                   and then Nkind (Op2) = N_Op_Not
                 then
!                   --  (not A) op (not B) can be reduced to a single call.
  
                    return;
  
                 elsif N = Op2
                   and then Nkind (Parent (N)) = N_Op_Xor
                 then
!                   --  A xor (not B) can also be special-cased.
  
                    return;
                 end if;
--- 5325,5338 ----
                 if N = Op1
                   and then Nkind (Op2) = N_Op_Not
                 then
!                   --  (not A) op (not B) can be reduced to a single call
  
                    return;
  
                 elsif N = Op2
                   and then Nkind (Parent (N)) = N_Op_Xor
                 then
!                   --  A xor (not B) can also be special-cased
  
                    return;
                 end if;
*************** package body Exp_Ch4 is
*** 5128,5133 ****
--- 5778,5784 ----
  
        if Is_Access_Type (Ptyp) then
           Insert_Explicit_Dereference (P);
+          Analyze_And_Resolve (P, Designated_Type (Ptyp));
  
           if Ekind (Etype (P)) = E_Private_Subtype
             and then Is_For_Access_Subtype (Etype (P))
*************** package body Exp_Ch4 is
*** 5248,5269 ****
                       elsif Nkind (Parent (N)) = N_Case_Statement
                         and then Etype (Node (Dcon)) /= Etype (Disc)
                       then
-                         --  RBKD is suspicious of the following code. The
-                         --  call to New_Copy instead of New_Copy_Tree is
-                         --  suspicious, and the call to Analyze instead
-                         --  of Analyze_And_Resolve is also suspicious ???
- 
-                         --  Wouldn't it be good enough to do a perfectly
-                         --  normal Analyze_And_Resolve call using the
-                         --  subtype of the discriminant here???
- 
                          Rewrite (N,
                            Make_Qualified_Expression (Loc,
                              Subtype_Mark =>
                                New_Occurrence_Of (Etype (Disc), Loc),
                              Expression   =>
!                               New_Copy (Node (Dcon))));
!                         Analyze (N);
  
                          --  In case that comes out as a static expression,
                          --  reset it (a selected component is never static).
--- 5899,5911 ----
                       elsif Nkind (Parent (N)) = N_Case_Statement
                         and then Etype (Node (Dcon)) /= Etype (Disc)
                       then
                          Rewrite (N,
                            Make_Qualified_Expression (Loc,
                              Subtype_Mark =>
                                New_Occurrence_Of (Etype (Disc), Loc),
                              Expression   =>
!                               New_Copy_Tree (Node (Dcon))));
!                         Analyze_And_Resolve (N, Etype (Disc));
  
                          --  In case that comes out as a static expression,
                          --  reset it (a selected component is never static).
*************** package body Exp_Ch4 is
*** 5272,5284 ****
                          return;
  
                       --  Otherwise we can just copy the constraint, but the
!                      --  result is certainly not static!
! 
!                      --  Again the New_Copy here and the failure to even
!                      --  to an analyze call is uneasy ???
  
                       else
!                         Rewrite (N, New_Copy (Node (Dcon)));
                          Set_Is_Static_Expression (N, False);
                          return;
                       end if;
--- 5914,5928 ----
                          return;
  
                       --  Otherwise we can just copy the constraint, but the
!                      --  result is certainly not static! In some cases the
!                      --  discriminant constraint has been analyzed in the
!                      --  context of the original subtype indication, but for
!                      --  itypes the constraint might not have been analyzed
!                      --  yet, and this must be done now.
  
                       else
!                         Rewrite (N, New_Copy_Tree (Node (Dcon)));
!                         Analyze_And_Resolve (N);
                          Set_Is_Static_Expression (N, False);
                          return;
                       end if;
*************** package body Exp_Ch4 is
*** 5337,5345 ****
        Ptp  : Entity_Id           := Etype (Pfx);
  
        function Is_Procedure_Actual (N : Node_Id) return Boolean;
!       --  Check whether context is a procedure call, in which case
!       --  expansion of a bit-packed slice is deferred until the call
!       --  itself is expanded.
  
        procedure Make_Temporary;
        --  Create a named variable for the value of the slice, in
--- 5981,5996 ----
        Ptp  : Entity_Id           := Etype (Pfx);
  
        function Is_Procedure_Actual (N : Node_Id) return Boolean;
!       --  Check whether the argument is an actual for a procedure call,
!       --  in which case the expansion of a bit-packed slice is deferred
!       --  until the call itself is expanded. The reason this is required
!       --  is that we might have an IN OUT or OUT parameter, and the copy out
!       --  is essential, and that copy out would be missed if we created a
!       --  temporary here in Expand_N_Slice. Note that we don't bother
!       --  to test specifically for an IN OUT or OUT mode parameter, since it
!       --  is a bit tricky to do, and it is harmless to defer expansion
!       --  in the IN case, since the call processing will still generate the
!       --  appropriate copy in operation, which will take care of the slice.
  
        procedure Make_Temporary;
        --  Create a named variable for the value of the slice, in
*************** package body Exp_Ch4 is
*** 5354,5370 ****
           Par : Node_Id := Parent (N);
  
        begin
-          while Present (Par)
-            and then Nkind (Par) not in N_Statement_Other_Than_Procedure_Call
           loop
              if Nkind (Par) = N_Procedure_Call_Statement then
                 return True;
!             else
                 Par := Parent (Par);
              end if;
           end loop;
- 
-          return False;
        end Is_Procedure_Actual;
  
        --------------------
--- 6005,6034 ----
           Par : Node_Id := Parent (N);
  
        begin
           loop
+             --  If our parent is a procedure call we can return
+ 
              if Nkind (Par) = N_Procedure_Call_Statement then
                 return True;
! 
!             --  If our parent is a type conversion, keep climbing the
!             --  tree, since a type conversion can be a procedure actual.
!             --  Also keep climbing if parameter association or a qualified
!             --  expression, since these are additional cases that do can
!             --  appear on procedure actuals.
! 
!             elsif Nkind (Par) = N_Type_Conversion
!               or else Nkind (Par) = N_Parameter_Association
!               or else Nkind (Par) = N_Qualified_Expression
!             then
                 Par := Parent (Par);
+ 
+                --  Any other case is not what we are looking for
+ 
+             else
+                return False;
              end if;
           end loop;
        end Is_Procedure_Actual;
  
        --------------------
*************** package body Exp_Ch4 is
*** 5400,5422 ****
  
        if Is_Access_Type (Ptp) then
  
-          --  Check for explicit dereference required for checked pool
- 
-          Insert_Dereference_Action (Pfx);
- 
-          --  If we have an access to a packed array type, then put in an
-          --  explicit dereference. We do this in case the slice must be
-          --  expanded, and we want to make sure we get an access check.
- 
           Ptp := Designated_Type (Ptp);
  
!          if Is_Array_Type (Ptp) and then Is_Packed (Ptp) then
!             Rewrite (Pfx,
!               Make_Explicit_Dereference (Sloc (N),
!                 Prefix => Relocate_Node (Pfx)));
  
!             Analyze_And_Resolve (Pfx, Ptp);
!          end if;
        end if;
  
        --  Range checks are potentially also needed for cases involving
--- 6064,6076 ----
  
        if Is_Access_Type (Ptp) then
  
           Ptp := Designated_Type (Ptp);
  
!          Rewrite (Pfx,
!            Make_Explicit_Dereference (Sloc (N),
!             Prefix => Relocate_Node (Pfx)));
  
!          Analyze_And_Resolve (Pfx, Ptp);
        end if;
  
        --  Range checks are potentially also needed for cases involving
*************** package body Exp_Ch4 is
*** 5972,5979 ****
                     Condition => Cond,
                     Reason    => CE_Tag_Check_Failed));
  
!                Change_Conversion_To_Unchecked (N);
!                Analyze_And_Resolve (N, Target_Type);
              end if;
           end;
  
--- 6626,6641 ----
                     Condition => Cond,
                     Reason    => CE_Tag_Check_Failed));
  
!                declare
!                   Conv : Node_Id;
!                begin
!                   Conv :=
!                     Make_Unchecked_Type_Conversion (Loc,
!                       Subtype_Mark => New_Occurrence_Of (Target_Type, Loc),
!                       Expression => Relocate_Node (Expression (N)));
!                   Rewrite (N, Conv);
!                   Analyze_And_Resolve (N, Target_Type);
!                end;
              end if;
           end;
  
*************** package body Exp_Ch4 is
*** 6072,6078 ****
  
           --     ityp (x)
  
!          --  with the Float_Truncate flag set. This is clearly more efficient.
  
           if Nkind (Operand) = N_Attribute_Reference
             and then Attribute_Name (Operand) = Name_Truncation
--- 6734,6740 ----
  
           --     ityp (x)
  
!          --  with the Float_Truncate flag set. This is clearly more efficient
  
           if Nkind (Operand) = N_Attribute_Reference
             and then Attribute_Name (Operand) = Name_Truncation
*************** package body Exp_Ch4 is
*** 6135,6141 ****
        --  assignment processing.
  
        elsif Is_Record_Type (Target_Type) then
!          Handle_Changed_Representation;
  
        --  Case of conversions of enumeration types
  
--- 6797,6829 ----
        --  assignment processing.
  
        elsif Is_Record_Type (Target_Type) then
! 
!          --  Ada 2005 (AI-216): Program_Error is raised when converting from
!          --  a derived Unchecked_Union type to an unconstrained non-Unchecked_
!          --  Union type if the operand lacks inferable discriminants.
! 
!          if Is_Derived_Type (Operand_Type)
!            and then Is_Unchecked_Union (Base_Type (Operand_Type))
!            and then not Is_Constrained (Target_Type)
!            and then not Is_Unchecked_Union (Base_Type (Target_Type))
!            and then not Has_Inferable_Discriminants (Operand)
!          then
!             --  To prevent Gigi from generating illegal code, we make a
!             --  Program_Error node, but we give it the target type of the
!             --  conversion.
! 
!             declare
!                PE : constant Node_Id := Make_Raise_Program_Error (Loc,
!                       Reason => PE_Unchecked_Union_Restriction);
! 
!             begin
!                Set_Etype (PE, Target_Type);
!                Rewrite (N, PE);
! 
!             end;
!          else
!             Handle_Changed_Representation;
!          end if;
  
        --  Case of conversions of enumeration types
  
*************** package body Exp_Ch4 is
*** 6184,6190 ****
        --    only if Conversion_OK is set, i.e. if the fixed-point values
        --    are to be treated as integers.
  
!       --  No other conversions should be passed to Gigi.
  
        --  The only remaining step is to generate a range check if we still
        --  have a type conversion at this stage and Do_Range_Check is set.
--- 6872,6880 ----
        --    only if Conversion_OK is set, i.e. if the fixed-point values
        --    are to be treated as integers.
  
!       --  No other conversions should be passed to Gigi
! 
!       --  Check: are these rules stated in sinfo??? if so, why restate here???
  
        --  The only remaining step is to generate a range check if we still
        --  have a type conversion at this stage and Do_Range_Check is set.
*************** package body Exp_Ch4 is
*** 6228,6237 ****
  
                 --  Reset overflow flag, since the range check will include
                 --  dealing with possible overflow, and generate the check
  
                 Set_Do_Overflow_Check (N, False);
!                Generate_Range_Check
!                  (Expr, Target_Type, CE_Range_Check_Failed);
              end if;
           end;
        end if;
--- 6918,6934 ----
  
                 --  Reset overflow flag, since the range check will include
                 --  dealing with possible overflow, and generate the check
+                --  If Address is either source or target type, suppress
+                --  range check to avoid typing anomalies when it is a visible
+                --  integer type.
  
                 Set_Do_Overflow_Check (N, False);
!                if not Is_Descendent_Of_Address (Etype (Expr))
!                  and then not Is_Descendent_Of_Address (Target_Type)
!                then
!                   Generate_Range_Check
!                     (Expr, Target_Type, CE_Range_Check_Failed);
!                end if;
              end if;
           end;
        end if;
*************** package body Exp_Ch4 is
*** 6295,6301 ****
                 Val <= Expr_Value (Type_High_Bound (Target_Type))
              then
                 Rewrite (N, Make_Integer_Literal (Sloc (N), Val));
!                Analyze_And_Resolve (N, Target_Type);
                 return;
              end if;
           end;
--- 6992,7008 ----
                 Val <= Expr_Value (Type_High_Bound (Target_Type))
              then
                 Rewrite (N, Make_Integer_Literal (Sloc (N), Val));
! 
!                --  If Address is the target type, just set the type
!                --  to avoid a spurious type error on the literal when
!                --  Address is a visible integer type.
! 
!                if Is_Descendent_Of_Address (Target_Type) then
!                   Set_Etype (N, Target_Type);
!                else
!                   Analyze_And_Resolve (N, Target_Type);
!                end if;
! 
                 return;
              end if;
           end;
*************** package body Exp_Ch4 is
*** 6340,6353 ****
        Typ    : Entity_Id;
        Lhs    : Node_Id;
        Rhs    : Node_Id;
!       Bodies : List_Id)
!       return   Node_Id
     is
        Loc : constant Source_Ptr := Sloc (Nod);
  
        function Suitable_Element (C : Entity_Id) return Entity_Id;
        --  Return the first field to compare beginning with C, skipping the
!       --  inherited components
  
        function Suitable_Element (C : Entity_Id) return Entity_Id is
        begin
--- 7047,7068 ----
        Typ    : Entity_Id;
        Lhs    : Node_Id;
        Rhs    : Node_Id;
!       Bodies : List_Id) return Node_Id
     is
        Loc : constant Source_Ptr := Sloc (Nod);
  
+       Result : Node_Id;
+       C      : Entity_Id;
+ 
+       First_Time : Boolean := True;
+ 
        function Suitable_Element (C : Entity_Id) return Entity_Id;
        --  Return the first field to compare beginning with C, skipping the
!       --  inherited components.
! 
!       ----------------------
!       -- Suitable_Element --
!       ----------------------
  
        function Suitable_Element (C : Entity_Id) return Entity_Id is
        begin
*************** package body Exp_Ch4 is
*** 6374,6412 ****
           end if;
        end Suitable_Element;
  
-       Result : Node_Id;
-       C      : Entity_Id;
- 
-       First_Time : Boolean := True;
- 
     --  Start of processing for Expand_Record_Equality
  
     begin
-       --  Special processing for the unchecked union case, which will occur
-       --  only in the context of tagged types and dynamic dispatching, since
-       --  other cases are handled statically. We return True, but insert a
-       --  raise Program_Error statement.
- 
-       if Is_Unchecked_Union (Typ) then
- 
-          --  If this is a component of an enclosing record, return the Raise
-          --  statement directly.
- 
-          if No (Parent (Lhs)) then
-             Result :=
-               Make_Raise_Program_Error (Loc,
-                 Reason => PE_Unchecked_Union_Restriction);
-             Set_Etype (Result, Standard_Boolean);
-             return Result;
- 
-          else
-             Insert_Action (Lhs,
-               Make_Raise_Program_Error (Loc,
-                 Reason => PE_Unchecked_Union_Restriction));
-             return New_Occurrence_Of (Standard_True, Loc);
-          end if;
-       end if;
- 
        --  Generates the following code: (assuming that Typ has one Discr and
        --  component C2 is also a record)
  
--- 7089,7097 ----
*************** package body Exp_Ch4 is
*** 6421,6456 ****
        C := Suitable_Element (First_Entity (Typ));
  
        while Present (C) loop
- 
           declare
              New_Lhs : Node_Id;
              New_Rhs : Node_Id;
  
           begin
              if First_Time then
                 First_Time := False;
                 New_Lhs := Lhs;
                 New_Rhs := Rhs;
- 
              else
                 New_Lhs := New_Copy_Tree (Lhs);
                 New_Rhs := New_Copy_Tree (Rhs);
              end if;
  
!             Result :=
!               Make_And_Then (Loc,
!                 Left_Opnd  => Result,
!                 Right_Opnd =>
!                   Expand_Composite_Equality (Nod, Etype (C),
!                     Lhs =>
!                       Make_Selected_Component (Loc,
!                         Prefix => New_Lhs,
!                         Selector_Name => New_Reference_To (C, Loc)),
!                     Rhs =>
!                       Make_Selected_Component (Loc,
!                         Prefix => New_Rhs,
!                         Selector_Name => New_Reference_To (C, Loc)),
!                     Bodies => Bodies));
           end;
  
           C := Suitable_Element (Next_Entity (C));
--- 7106,7151 ----
        C := Suitable_Element (First_Entity (Typ));
  
        while Present (C) loop
           declare
              New_Lhs : Node_Id;
              New_Rhs : Node_Id;
+             Check   : Node_Id;
  
           begin
              if First_Time then
                 First_Time := False;
                 New_Lhs := Lhs;
                 New_Rhs := Rhs;
              else
                 New_Lhs := New_Copy_Tree (Lhs);
                 New_Rhs := New_Copy_Tree (Rhs);
              end if;
  
!             Check :=
!               Expand_Composite_Equality (Nod, Etype (C),
!                Lhs =>
!                  Make_Selected_Component (Loc,
!                    Prefix => New_Lhs,
!                    Selector_Name => New_Reference_To (C, Loc)),
!                Rhs =>
!                  Make_Selected_Component (Loc,
!                    Prefix => New_Rhs,
!                    Selector_Name => New_Reference_To (C, Loc)),
!                Bodies => Bodies);
! 
!             --  If some (sub)component is an unchecked_union, the whole
!             --  operation will raise program error.
! 
!             if Nkind (Check) = N_Raise_Program_Error then
!                Result := Check;
!                Set_Etype (Result, Standard_Boolean);
!                exit;
!             else
!                Result :=
!                  Make_And_Then (Loc,
!                    Left_Opnd  => Result,
!                    Right_Opnd => Check);
!             end if;
           end;
  
           C := Suitable_Element (Next_Entity (C));
*************** package body Exp_Ch4 is
*** 6496,6535 ****
     function Get_Allocator_Final_List
       (N    : Node_Id;
        T    : Entity_Id;
!       PtrT : Entity_Id)
!       return Entity_Id
     is
        Loc : constant Source_Ptr := Sloc (N);
-       Acc : Entity_Id;
  
!    begin
!       --  If the context is an access parameter, we need to create
!       --  a non-anonymous access type in order to have a usable
!       --  final list, because there is otherwise no pool to which
!       --  the allocated object can belong. We create both the type
!       --  and the finalization chain here, because freezing an
!       --  internal type does not create such a chain. The Final_Chain
!       --  that is thus created is shared by the access parameter.
  
        if Ekind (PtrT) = E_Anonymous_Access_Type then
!          Acc := Make_Defining_Identifier (Loc, New_Internal_Name ('J'));
!          Insert_Action (N,
!            Make_Full_Type_Declaration (Loc,
!              Defining_Identifier => Acc,
!              Type_Definition =>
!                 Make_Access_To_Object_Definition (Loc,
!                   Subtype_Indication =>
!                     New_Occurrence_Of (T, Loc))));
  
!          Build_Final_List (N, Acc);
!          Set_Associated_Final_Chain (PtrT, Associated_Final_Chain (Acc));
!          return Find_Final_List (Acc);
  
!       else
!          return Find_Final_List (PtrT);
        end if;
     end Get_Allocator_Final_List;
  
     -------------------------------
     -- Insert_Dereference_Action --
     -------------------------------
--- 7191,7325 ----
     function Get_Allocator_Final_List
       (N    : Node_Id;
        T    : Entity_Id;
!       PtrT : Entity_Id) return Entity_Id
     is
        Loc : constant Source_Ptr := Sloc (N);
  
!       Owner : Entity_Id := PtrT;
!       --  The entity whose finalisation list must be used to attach the
!       --  allocated object.
  
+    begin
        if Ekind (PtrT) = E_Anonymous_Access_Type then
!          if Nkind (Associated_Node_For_Itype (PtrT))
!               in N_Subprogram_Specification
!          then
!             --  If the context is an access parameter, we need to create
!             --  a non-anonymous access type in order to have a usable
!             --  final list, because there is otherwise no pool to which
!             --  the allocated object can belong. We create both the type
!             --  and the finalization chain here, because freezing an
!             --  internal type does not create such a chain. The Final_Chain
!             --  that is thus created is shared by the access parameter.
  
!             Owner := Make_Defining_Identifier (Loc, New_Internal_Name ('J'));
!             Insert_Action (N,
!               Make_Full_Type_Declaration (Loc,
!                 Defining_Identifier => Owner,
!                 Type_Definition =>
!                    Make_Access_To_Object_Definition (Loc,
!                      Subtype_Indication =>
!                        New_Occurrence_Of (T, Loc))));
  
!             Build_Final_List (N, Owner);
!             Set_Associated_Final_Chain (PtrT, Associated_Final_Chain (Owner));
! 
!          else
!             --  Case of an access discriminant, or (Ada 2005) of
!             --  an anonymous access component: find the final list
!             --  associated with the scope of the type.
! 
!             Owner := Scope (PtrT);
!          end if;
        end if;
+ 
+       return Find_Final_List (Owner);
     end Get_Allocator_Final_List;
  
+    ---------------------------------
+    -- Has_Inferable_Discriminants --
+    ---------------------------------
+ 
+    function Has_Inferable_Discriminants (N : Node_Id) return Boolean is
+ 
+       function Prefix_Is_Formal_Parameter (N : Node_Id) return Boolean;
+       --  Determines whether the left-most prefix of a selected component is a
+       --  formal parameter in a subprogram. Assumes N is a selected component.
+ 
+       --------------------------------
+       -- Prefix_Is_Formal_Parameter --
+       --------------------------------
+ 
+       function Prefix_Is_Formal_Parameter (N : Node_Id) return Boolean is
+          Sel_Comp : Node_Id := N;
+ 
+       begin
+          --  Move to the left-most prefix by climbing up the tree
+ 
+          while Present (Parent (Sel_Comp))
+            and then Nkind (Parent (Sel_Comp)) = N_Selected_Component
+          loop
+             Sel_Comp := Parent (Sel_Comp);
+          end loop;
+ 
+          return Ekind (Entity (Prefix (Sel_Comp))) in Formal_Kind;
+       end Prefix_Is_Formal_Parameter;
+ 
+    --  Start of processing for Has_Inferable_Discriminants
+ 
+    begin
+       --  For identifiers and indexed components, it is sufficent to have a
+       --  constrained Unchecked_Union nominal subtype.
+ 
+       if Nkind (N) = N_Identifier
+            or else
+          Nkind (N) = N_Indexed_Component
+       then
+          return Is_Unchecked_Union (Base_Type (Etype (N)))
+                   and then
+                 Is_Constrained (Etype (N));
+ 
+       --  For selected components, the subtype of the selector must be a
+       --  constrained Unchecked_Union. If the component is subject to a
+       --  per-object constraint, then the enclosing object must have inferable
+       --  discriminants.
+ 
+       elsif Nkind (N) = N_Selected_Component then
+          if Has_Per_Object_Constraint (Entity (Selector_Name (N))) then
+ 
+             --  A small hack. If we have a per-object constrained selected
+             --  component of a formal parameter, return True since we do not
+             --  know the actual parameter association yet.
+ 
+             if Prefix_Is_Formal_Parameter (N) then
+                return True;
+             end if;
+ 
+             --  Otherwise, check the enclosing object and the selector
+ 
+             return Has_Inferable_Discriminants (Prefix (N))
+                      and then
+                    Has_Inferable_Discriminants (Selector_Name (N));
+          end if;
+ 
+          --  The call to Has_Inferable_Discriminants will determine whether
+          --  the selector has a constrained Unchecked_Union nominal type.
+ 
+          return Has_Inferable_Discriminants (Selector_Name (N));
+ 
+       --  A qualified expression has inferable discriminants if its subtype
+       --  mark is a constrained Unchecked_Union subtype.
+ 
+       elsif Nkind (N) = N_Qualified_Expression then
+          return Is_Unchecked_Union (Subtype_Mark (N))
+                   and then
+                 Is_Constrained (Subtype_Mark (N));
+ 
+       end if;
+ 
+       return False;
+    end Has_Inferable_Discriminants;
+ 
     -------------------------------
     -- Insert_Dereference_Action --
     -------------------------------
*************** package body Exp_Ch4 is
*** 6538,6546 ****
        Loc  : constant Source_Ptr := Sloc (N);
        Typ  : constant Entity_Id  := Etype (N);
        Pool : constant Entity_Id  := Associated_Storage_Pool (Typ);
  
        function Is_Checked_Storage_Pool (P : Entity_Id) return Boolean;
!       --  return true if type of P is derived from Checked_Pool;
  
        function Is_Checked_Storage_Pool (P : Entity_Id) return Boolean is
           T : Entity_Id;
--- 7328,7341 ----
        Loc  : constant Source_Ptr := Sloc (N);
        Typ  : constant Entity_Id  := Etype (N);
        Pool : constant Entity_Id  := Associated_Storage_Pool (Typ);
+       Pnod : constant Node_Id    := Parent (N);
  
        function Is_Checked_Storage_Pool (P : Entity_Id) return Boolean;
!       --  Return true if type of P is derived from Checked_Pool;
! 
!       -----------------------------
!       -- Is_Checked_Storage_Pool --
!       -----------------------------
  
        function Is_Checked_Storage_Pool (P : Entity_Id) return Boolean is
           T : Entity_Id;
*************** package body Exp_Ch4 is
*** 6565,6574 ****
     --  Start of processing for Insert_Dereference_Action
  
     begin
!       if not Comes_From_Source (Parent (N)) then
!          return;
  
!       elsif not Is_Checked_Storage_Pool (Pool) then
           return;
        end if;
  
--- 7360,7370 ----
     --  Start of processing for Insert_Dereference_Action
  
     begin
!       pragma Assert (Nkind (Pnod) = N_Explicit_Dereference);
  
!       if not (Is_Checked_Storage_Pool (Pool)
!               and then Comes_From_Source (Original_Node (Pnod)))
!       then
           return;
        end if;
  
*************** package body Exp_Ch4 is
*** 6662,6670 ****
     --  instantiated function itself.
  
     function Make_Array_Comparison_Op
!      (Typ   : Entity_Id;
!       Nod   : Node_Id)
!       return  Node_Id
     is
        Loc : constant Source_Ptr := Sloc (Nod);
  
--- 7458,7465 ----
     --  instantiated function itself.
  
     function Make_Array_Comparison_Op
!      (Typ : Entity_Id;
!       Nod : Node_Id) return Node_Id
     is
        Loc : constant Source_Ptr := Sloc (Nod);
  
*************** package body Exp_Ch4 is
*** 6897,6905 ****
     --  Here typ is the boolean array type
  
     function Make_Boolean_Array_Op
!      (Typ  : Entity_Id;
!       N    : Node_Id)
!       return Node_Id
     is
        Loc : constant Source_Ptr := Sloc (N);
  
--- 7692,7699 ----
     --  Here typ is the boolean array type
  
     function Make_Boolean_Array_Op
!      (Typ : Entity_Id;
!       N   : Node_Id) return Node_Id
     is
        Loc : constant Source_Ptr := Sloc (N);
  
*************** package body Exp_Ch4 is
*** 7069,7078 ****
     ----------------------------
  
     function Safe_In_Place_Array_Op
!      (Lhs  : Node_Id;
!       Op1  : Node_Id;
!       Op2  : Node_Id)
!       return Boolean
     is
        Target : Entity_Id;
  
--- 7863,7871 ----
     ----------------------------
  
     function Safe_In_Place_Array_Op
!      (Lhs : Node_Id;
!       Op1 : Node_Id;
!       Op2 : Node_Id) return Boolean
     is
        Target : Entity_Id;
  
*************** package body Exp_Ch4 is
*** 7082,7088 ****
        --  is safe. The operand can be empty in the case of negation.
  
        function Is_Unaliased (N : Node_Id) return Boolean;
!       --  Check that N is a stand-alone entity.
  
        ------------------
        -- Is_Unaliased --
--- 7875,7881 ----
        --  is safe. The operand can be empty in the case of negation.
  
        function Is_Unaliased (N : Node_Id) return Boolean;
!       --  Check that N is a stand-alone entity
  
        ------------------
        -- Is_Unaliased --
diff -Nrcpad gcc-3.4.3/gcc/ada/exp_ch5.adb gcc-4.0.0/gcc/ada/exp_ch5.adb
*** gcc-3.4.3/gcc/ada/exp_ch5.adb	Mon Jan  5 15:20:43 2004
--- gcc-4.0.0/gcc/ada/exp_ch5.adb	Wed Dec  8 11:49:37 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Exp_Ch7;  use Exp_Ch7;
*** 32,46 ****
--- 32,49 ----
  with Exp_Ch11; use Exp_Ch11;
  with Exp_Dbug; use Exp_Dbug;
  with Exp_Pakd; use Exp_Pakd;
+ with Exp_Tss;  use Exp_Tss;
  with Exp_Util; use Exp_Util;
  with Hostparm; use Hostparm;
  with Nlists;   use Nlists;
  with Nmake;    use Nmake;
  with Opt;      use Opt;
  with Restrict; use Restrict;
+ with Rident;   use Rident;
  with Rtsfind;  use Rtsfind;
  with Sinfo;    use Sinfo;
  with Sem;      use Sem;
+ with Sem_Ch3;  use Sem_Ch3;
  with Sem_Ch8;  use Sem_Ch8;
  with Sem_Ch13; use Sem_Ch13;
  with Sem_Eval; use Sem_Eval;
*************** package body Exp_Ch5 is
*** 96,102 ****
     --  of representation.
  
     function Make_Tag_Ctrl_Assignment (N : Node_Id) return List_Id;
!    --  Generate the necessary code for controlled and Tagged assignment,
     --  that is to say, finalization of the target before, adjustement of
     --  the target after and save and restore of the tag and finalization
     --  pointers which are not 'part of the value' and must not be changed
--- 99,105 ----
     --  of representation.
  
     function Make_Tag_Ctrl_Assignment (N : Node_Id) return List_Id;
!    --  Generate the necessary code for controlled and tagged assignment,
     --  that is to say, finalization of the target before, adjustement of
     --  the target after and save and restore of the tag and finalization
     --  pointers which are not 'part of the value' and must not be changed
*************** package body Exp_Ch5 is
*** 108,114 ****
     --  hand side of an assignment, and this function determines if there
     --  is a record component reference where the record may be bit aligned
     --  in a manner that causes trouble for the back end (see description
!    --  of Sem_Util.Component_May_Be_Bit_Aligned for further details).
  
     ------------------------------
     -- Change_Of_Representation --
--- 111,117 ----
     --  hand side of an assignment, and this function determines if there
     --  is a record component reference where the record may be bit aligned
     --  in a manner that causes trouble for the back end (see description
!    --  of Exp_Util.Component_May_Be_Bit_Aligned for further details).
  
     ------------------------------
     -- Change_Of_Representation --
*************** package body Exp_Ch5 is
*** 160,165 ****
--- 163,172 ----
        --  This switch is set to True if the array move must be done using
        --  an explicit front end generated loop.
  
+       procedure Apply_Dereference (Arg : in out Node_Id);
+       --  If the argument is an access to an array, and the assignment is
+       --  converted into a procedure call, apply explicit dereference.
+ 
        function Has_Address_Clause (Exp : Node_Id) return Boolean;
        --  Test if Exp is a reference to an array whose declaration has
        --  an address clause, or it is a slice of such an array.
*************** package body Exp_Ch5 is
*** 175,189 ****
        --  an object. Such objects can be aliased to parameters (unlike local
        --  array references).
  
!       function Possible_Unaligned_Slice (Arg : Node_Id) return Boolean;
!       --  Returns True if Arg (either the left or right hand side of the
!       --  assignment) is a slice that could be unaligned wrt the array type.
!       --  This is true if Arg is a component of a packed record, or is
!       --  a record component to which a component clause applies. This
!       --  is a little pessimistic, but the result of an unnecessary
!       --  decision that something is possibly unaligned is only to
!       --  generate a front end loop, which is not so terrible.
!       --  It would really be better if backend handled this ???
  
        ------------------------
        -- Has_Address_Clause --
--- 182,200 ----
        --  an object. Such objects can be aliased to parameters (unlike local
        --  array references).
  
!       -----------------------
!       -- Apply_Dereference --
!       -----------------------
! 
!       procedure Apply_Dereference (Arg : in out Node_Id) is
!          Typ : constant Entity_Id := Etype (Arg);
!       begin
!          if Is_Access_Type (Typ) then
!             Rewrite (Arg, Make_Explicit_Dereference (Loc,
!               Prefix => Relocate_Node (Arg)));
!             Analyze_And_Resolve (Arg, Designated_Type (Typ));
!          end if;
!       end Apply_Dereference;
  
        ------------------------
        -- Has_Address_Clause --
*************** package body Exp_Ch5 is
*** 222,281 ****
                         and then Is_Non_Local_Array (Prefix (Exp)));
        end Is_Non_Local_Array;
  
-       ------------------------------
-       -- Possible_Unaligned_Slice --
-       ------------------------------
- 
-       function Possible_Unaligned_Slice (Arg : Node_Id) return Boolean is
-       begin
-          --  No issue if this is not a slice, or else strict alignment
-          --  is not required in any case.
- 
-          if Nkind (Arg) /= N_Slice
-            or else not Target_Strict_Alignment
-          then
-             return False;
-          end if;
- 
-          --  No issue if the component type is a byte or byte aligned
- 
-          declare
-             Array_Typ : constant Entity_Id := Etype (Arg);
-             Comp_Typ  : constant Entity_Id := Component_Type (Array_Typ);
-             Pref      : constant Node_Id   := Prefix (Arg);
- 
-          begin
-             if Known_Alignment (Array_Typ) then
-                if Alignment (Array_Typ) = 1 then
-                   return False;
-                end if;
- 
-             elsif Known_Component_Size (Array_Typ) then
-                if Component_Size (Array_Typ) = 1 then
-                   return False;
-                end if;
- 
-             elsif Known_Esize (Comp_Typ) then
-                if Esize (Comp_Typ) <= System_Storage_Unit then
-                   return False;
-                end if;
-             end if;
- 
-             --  No issue if this is not a selected component
- 
-             if Nkind (Pref) /= N_Selected_Component then
-                return False;
-             end if;
- 
-             --  Else we test for a possibly unaligned component
- 
-             return
-               Is_Packed (Etype (Pref))
-                 or else
-               Present (Component_Clause (Entity (Selector_Name (Pref))));
-          end;
-       end Possible_Unaligned_Slice;
- 
        --  Determine if Lhs, Rhs are formal arrays or nonlocal arrays
  
        Lhs_Formal : constant Boolean := Is_Formal_Array (Act_Lhs);
--- 233,238 ----
*************** package body Exp_Ch5 is
*** 373,378 ****
--- 330,353 ----
        elsif Has_Controlled_Component (L_Type) then
           Loop_Required := True;
  
+          --  If object is atomic, we cannot tolerate a loop
+ 
+       elsif Is_Atomic_Object (Act_Lhs)
+               or else
+             Is_Atomic_Object (Act_Rhs)
+       then
+          return;
+ 
+       --  Loop is required if we have atomic components since we have to
+       --  be sure to do any accesses on an element by element basis.
+ 
+       elsif Has_Atomic_Components (L_Type)
+         or else Has_Atomic_Components (R_Type)
+         or else Is_Atomic (Component_Type (L_Type))
+         or else Is_Atomic (Component_Type (R_Type))
+       then
+          Loop_Required := True;
+ 
        --  Case where no slice is involved
  
        elsif not L_Slice and not R_Slice then
*************** package body Exp_Ch5 is
*** 412,418 ****
           --       File.Storage := Contents;
           --    end Write_All;
  
!          --  We expand to a loop in either of these two cases.
  
           --  Question for future thought. Another potentially more efficient
           --  approach would be to create the actual subtype, and then do an
--- 387,393 ----
           --       File.Storage := Contents;
           --    end Write_All;
  
!          --  We expand to a loop in either of these two cases
  
           --  Question for future thought. Another potentially more efficient
           --  approach would be to create the actual subtype, and then do an
*************** package body Exp_Ch5 is
*** 508,515 ****
  
        elsif Is_Bit_Packed_Array (L_Type)
          or else Is_Bit_Packed_Array (R_Type)
!         or else Possible_Unaligned_Slice (Lhs)
!         or else Possible_Unaligned_Slice (Rhs)
        then
           Loop_Required := True;
  
--- 483,490 ----
  
        elsif Is_Bit_Packed_Array (L_Type)
          or else Is_Bit_Packed_Array (R_Type)
!         or else Is_Possibly_Unaligned_Slice (Lhs)
!         or else Is_Possibly_Unaligned_Slice (Rhs)
        then
           Loop_Required := True;
  
*************** package body Exp_Ch5 is
*** 523,529 ****
           end if;
        end if;
  
!       --  Come here to compelete the analysis
  
        --    Loop_Required: Set to True if we know that a loop is required
        --                   regardless of overlap considerations.
--- 498,526 ----
           end if;
        end if;
  
!       --  If the right-hand side is a string literal, introduce a temporary
!       --  for it, for use in the generated loop that will follow.
! 
!       if Nkind (Rhs) = N_String_Literal then
!          declare
!             Temp : constant Entity_Id :=
!                      Make_Defining_Identifier (Loc, Name_T);
!             Decl : Node_Id;
! 
!          begin
!             Decl :=
!               Make_Object_Declaration (Loc,
!                  Defining_Identifier => Temp,
!                  Object_Definition => New_Occurrence_Of (L_Type, Loc),
!                  Expression => Relocate_Node (Rhs));
! 
!             Insert_Action (N, Decl);
!             Rewrite (Rhs, New_Occurrence_Of (Temp, Loc));
!             R_Type := Etype (Temp);
!          end;
!       end if;
! 
!       --  Come here to complete the analysis
  
        --    Loop_Required: Set to True if we know that a loop is required
        --                   regardless of overlap considerations.
*************** package body Exp_Ch5 is
*** 704,717 ****
           --  Cases where either Forwards_OK or Backwards_OK is true
  
           if Forwards_OK (N) or else Backwards_OK (N) then
!             Rewrite (N,
!               Expand_Assign_Array_Loop
!                 (N, Larray, Rarray, L_Type, R_Type, Ndim,
!                  Rev => not Forwards_OK (N)));
  
           --  Case of both are false with No_Implicit_Conditionals
  
!          elsif Restrictions (No_Implicit_Conditionals) then
              declare
                    T : constant Entity_Id :=
                          Make_Defining_Identifier (Loc, Chars => Name_T);
--- 701,747 ----
           --  Cases where either Forwards_OK or Backwards_OK is true
  
           if Forwards_OK (N) or else Backwards_OK (N) then
!             if Controlled_Type (Component_Type (L_Type))
!               and then Base_Type (L_Type) = Base_Type (R_Type)
!               and then Ndim = 1
!               and then not No_Ctrl_Actions (N)
!             then
!                declare
!                   Proc : constant Entity_Id :=
!                            TSS (Base_Type (L_Type), TSS_Slice_Assign);
!                   Actuals : List_Id;
! 
!                begin
!                   Apply_Dereference (Larray);
!                   Apply_Dereference (Rarray);
!                   Actuals := New_List (
!                     Duplicate_Subexpr (Larray,   Name_Req => True),
!                     Duplicate_Subexpr (Rarray,   Name_Req => True),
!                     Duplicate_Subexpr (Left_Lo,  Name_Req => True),
!                     Duplicate_Subexpr (Left_Hi,  Name_Req => True),
!                     Duplicate_Subexpr (Right_Lo, Name_Req => True),
!                     Duplicate_Subexpr (Right_Hi, Name_Req => True));
! 
!                   Append_To (Actuals,
!                     New_Occurrence_Of (
!                       Boolean_Literals (not Forwards_OK (N)), Loc));
! 
!                   Rewrite (N,
!                     Make_Procedure_Call_Statement (Loc,
!                       Name => New_Reference_To (Proc, Loc),
!                       Parameter_Associations => Actuals));
!                end;
! 
!             else
!                Rewrite (N,
!                  Expand_Assign_Array_Loop
!                    (N, Larray, Rarray, L_Type, R_Type, Ndim,
!                     Rev => not Forwards_OK (N)));
!             end if;
  
           --  Case of both are false with No_Implicit_Conditionals
  
!          elsif Restriction_Active (No_Implicit_Conditionals) then
              declare
                    T : constant Entity_Id :=
                          Make_Defining_Identifier (Loc, Chars => Name_T);
*************** package body Exp_Ch5 is
*** 806,824 ****
                     Right_Opnd => Cright_Lo);
              end if;
  
!             Rewrite (N,
!               Make_Implicit_If_Statement (N,
!                 Condition => Condition,
  
!                 Then_Statements => New_List (
!                   Expand_Assign_Array_Loop
!                    (N, Larray, Rarray, L_Type, R_Type, Ndim,
!                     Rev => False)),
  
!                 Else_Statements => New_List (
!                   Expand_Assign_Array_Loop
!                    (N, Larray, Rarray, L_Type, R_Type, Ndim,
!                     Rev => True))));
           end if;
  
           Analyze (N, Suppress => All_Checks);
--- 836,891 ----
                     Right_Opnd => Cright_Lo);
              end if;
  
!             if Controlled_Type (Component_Type (L_Type))
!               and then Base_Type (L_Type) = Base_Type (R_Type)
!               and then Ndim = 1
!               and then not No_Ctrl_Actions (N)
!             then
  
!                --  Call TSS procedure for array assignment, passing the
!                --  the explicit bounds of right- and left-hand side.
  
!                declare
!                   Proc    : constant Node_Id :=
!                               TSS (Base_Type (L_Type), TSS_Slice_Assign);
!                   Actuals : List_Id;
! 
!                begin
!                   Apply_Dereference (Larray);
!                   Apply_Dereference (Rarray);
!                   Actuals := New_List (
!                     Duplicate_Subexpr (Larray,   Name_Req => True),
!                     Duplicate_Subexpr (Rarray,   Name_Req => True),
!                     Duplicate_Subexpr (Left_Lo,  Name_Req => True),
!                     Duplicate_Subexpr (Left_Hi,  Name_Req => True),
!                     Duplicate_Subexpr (Right_Lo, Name_Req => True),
!                     Duplicate_Subexpr (Right_Hi, Name_Req => True));
! 
!                   Append_To (Actuals,
!                      Make_Op_Not (Loc,
!                        Right_Opnd => Condition));
! 
!                   Rewrite (N,
!                     Make_Procedure_Call_Statement (Loc,
!                       Name => New_Reference_To (Proc, Loc),
!                       Parameter_Associations => Actuals));
!                end;
! 
!             else
!                Rewrite (N,
!                  Make_Implicit_If_Statement (N,
!                    Condition => Condition,
! 
!                    Then_Statements => New_List (
!                      Expand_Assign_Array_Loop
!                       (N, Larray, Rarray, L_Type, R_Type, Ndim,
!                        Rev => False)),
! 
!                    Else_Statements => New_List (
!                      Expand_Assign_Array_Loop
!                       (N, Larray, Rarray, L_Type, R_Type, Ndim,
!                        Rev => True))));
!             end if;
           end if;
  
           Analyze (N, Suppress => All_Checks);
*************** package body Exp_Ch5 is
*** 1048,1060 ****
           --  the type may be private and resolution by identifier alone would
           --  fail.
  
!          function Make_Component_List_Assign (CL : Node_Id) return List_Id;
           --  Returns a sequence of statements to assign the components that
!          --  are referenced in the given component list.
  
!          function Make_Field_Assign (C : Entity_Id) return Node_Id;
!          --  Given C, the entity for a discriminant or component, build
!          --  an assignment for the corresponding field values.
  
           function Make_Field_Assigns (CI : List_Id) return List_Id;
           --  Given CI, a component items list, construct series of statements
--- 1115,1136 ----
           --  the type may be private and resolution by identifier alone would
           --  fail.
  
!          function Make_Component_List_Assign
!            (CL  : Node_Id;
!             U_U : Boolean := False) return List_Id;
           --  Returns a sequence of statements to assign the components that
!          --  are referenced in the given component list. The flag U_U is
!          --  used to force the usage of the inferred value of the variant
!          --  part expression as the switch for the generated case statement.
  
!          function Make_Field_Assign
!            (C : Entity_Id;
!             U_U : Boolean := False) return Node_Id;
!          --  Given C, the entity for a discriminant or component, build an
!          --  assignment for the corresponding field values. The flag U_U
!          --  signals the presence of an Unchecked_Union and forces the usage
!          --  of the inferred discriminant value of C as the right hand side
!          --  of the assignment.
  
           function Make_Field_Assigns (CI : List_Id) return List_Id;
           --  Given CI, a component items list, construct series of statements
*************** package body Exp_Ch5 is
*** 1088,1102 ****
           -- Make_Component_List_Assign --
           --------------------------------
  
!          function Make_Component_List_Assign (CL : Node_Id) return List_Id is
              CI : constant List_Id := Component_Items (CL);
              VP : constant Node_Id := Variant_Part (CL);
  
-             Result : List_Id;
              Alts   : List_Id;
-             V      : Node_Id;
              DC     : Node_Id;
              DCH    : List_Id;
  
           begin
              Result := Make_Field_Assigns (CI);
--- 1164,1182 ----
           -- Make_Component_List_Assign --
           --------------------------------
  
!          function Make_Component_List_Assign
!            (CL  : Node_Id;
!             U_U : Boolean := False) return List_Id
!          is
              CI : constant List_Id := Component_Items (CL);
              VP : constant Node_Id := Variant_Part (CL);
  
              Alts   : List_Id;
              DC     : Node_Id;
              DCH    : List_Id;
+             Expr   : Node_Id;
+             Result : List_Id;
+             V      : Node_Id;
  
           begin
              Result := Make_Field_Assigns (CI);
*************** package body Exp_Ch5 is
*** 1122,1136 ****
                    Next_Non_Pragma (V);
                 end loop;
  
                 Append_To (Result,
                   Make_Case_Statement (Loc,
!                    Expression =>
!                      Make_Selected_Component (Loc,
!                        Prefix => Duplicate_Subexpr (Rhs),
!                        Selector_Name =>
!                          Make_Identifier (Loc, Chars (Name (VP)))),
                     Alternatives => Alts));
- 
              end if;
  
              return Result;
--- 1202,1230 ----
                    Next_Non_Pragma (V);
                 end loop;
  
+                --  If we have an Unchecked_Union, use the value of the inferred
+                --  discriminant of the variant part expression as the switch
+                --  for the case statement. The case statement may later be
+                --  folded.
+ 
+                if U_U then
+                   Expr :=
+                     New_Copy (Get_Discriminant_Value (
+                       Entity (Name (VP)),
+                       Etype (Rhs),
+                       Discriminant_Constraint (Etype (Rhs))));
+                else
+                   Expr :=
+                     Make_Selected_Component (Loc,
+                       Prefix => Duplicate_Subexpr (Rhs),
+                       Selector_Name =>
+                         Make_Identifier (Loc, Chars (Name (VP))));
+                end if;
+ 
                 Append_To (Result,
                   Make_Case_Statement (Loc,
!                    Expression => Expr,
                     Alternatives => Alts));
              end if;
  
              return Result;
*************** package body Exp_Ch5 is
*** 1140,1149 ****
           -- Make_Field_Assign --
           -----------------------
  
!          function Make_Field_Assign (C : Entity_Id) return Node_Id is
!             A : Node_Id;
  
           begin
              A :=
                Make_Assignment_Statement (Loc,
                  Name =>
--- 1234,1262 ----
           -- Make_Field_Assign --
           -----------------------
  
!          function Make_Field_Assign
!            (C : Entity_Id;
!             U_U : Boolean := False) return Node_Id
!          is
!             A    : Node_Id;
!             Expr : Node_Id;
  
           begin
+             --  In the case of an Unchecked_Union, use the discriminant
+             --  constraint value as on the right hand side of the assignment.
+ 
+             if U_U then
+                Expr :=
+                  New_Copy (Get_Discriminant_Value (C,
+                    Etype (Rhs),
+                    Discriminant_Constraint (Etype (Rhs))));
+             else
+                Expr :=
+                  Make_Selected_Component (Loc,
+                    Prefix => Duplicate_Subexpr (Rhs),
+                    Selector_Name => New_Occurrence_Of (C, Loc));
+             end if;
+ 
              A :=
                Make_Assignment_Statement (Loc,
                  Name =>
*************** package body Exp_Ch5 is
*** 1151,1160 ****
                      Prefix => Duplicate_Subexpr (Lhs),
                      Selector_Name =>
                        New_Occurrence_Of (Find_Component (L_Typ, C), Loc)),
!                 Expression =>
!                   Make_Selected_Component (Loc,
!                     Prefix => Duplicate_Subexpr (Rhs),
!                     Selector_Name => New_Occurrence_Of (C, Loc)));
  
              --  Set Assignment_OK, so discriminants can be assigned
  
--- 1264,1270 ----
                      Prefix => Duplicate_Subexpr (Lhs),
                      Selector_Name =>
                        New_Occurrence_Of (Find_Component (L_Typ, C), Loc)),
!                 Expression => Expr);
  
              --  Set Assignment_OK, so discriminants can be assigned
  
*************** package body Exp_Ch5 is
*** 1173,1179 ****
           begin
              Item := First (CI);
              Result := New_List;
- 
              while Present (Item) loop
                 if Nkind (Item) = N_Component_Declaration then
                    Append_To
--- 1283,1288 ----
*************** package body Exp_Ch5 is
*** 1203,1209 ****
           if Has_Discriminants (L_Typ) then
              F := First_Discriminant (R_Typ);
              while Present (F) loop
!                Insert_Action (N, Make_Field_Assign (F));
                 Next_Discriminant (F);
              end loop;
           end if;
--- 1312,1324 ----
           if Has_Discriminants (L_Typ) then
              F := First_Discriminant (R_Typ);
              while Present (F) loop
! 
!                if Is_Unchecked_Union (Base_Type (R_Typ)) then
!                   Insert_Action (N, Make_Field_Assign (F, True));
!                else
!                   Insert_Action (N, Make_Field_Assign (F));
!                end if;
! 
                 Next_Discriminant (F);
              end loop;
           end if;
*************** package body Exp_Ch5 is
*** 1222,1229 ****
           if Nkind (RDef) = N_Record_Definition
             and then Present (Component_List (RDef))
           then
!             Insert_Actions
!               (N, Make_Component_List_Assign (Component_List (RDef)));
  
              Rewrite (N, Make_Null_Statement (Loc));
           end if;
--- 1337,1350 ----
           if Nkind (RDef) = N_Record_Definition
             and then Present (Component_List (RDef))
           then
! 
!             if Is_Unchecked_Union (R_Typ) then
!                Insert_Actions (N,
!                  Make_Component_List_Assign (Component_List (RDef), True));
!             else
!                Insert_Actions
!                  (N, Make_Component_List_Assign (Component_List (RDef)));
!             end if;
  
              Rewrite (N, Make_Null_Statement (Loc));
           end if;
*************** package body Exp_Ch5 is
*** 1338,1344 ****
                 end if;
              end loop;
  
!             --  Now we can insert and analyze the pre-assignment.
  
              --  If the right-hand side requires a transient scope, it has
              --  already been placed on the stack. However, the declaration is
--- 1459,1465 ----
                 end if;
              end loop;
  
!             --  Now we can insert and analyze the pre-assignment
  
              --  If the right-hand side requires a transient scope, it has
              --  already been placed on the stack. However, the declaration is
*************** package body Exp_Ch5 is
*** 1493,1498 ****
--- 1614,1632 ----
             (Expression (Rhs), Designated_Type (Etype (Lhs)));
        end if;
  
+       --  Ada 2005 (AI-231): Generate conversion to the null-excluding
+       --  type to force the corresponding run-time check
+ 
+       if Is_Access_Type (Typ)
+         and then
+           ((Is_Entity_Name (Lhs) and then Can_Never_Be_Null (Entity (Lhs)))
+              or else Can_Never_Be_Null (Etype (Lhs)))
+       then
+          Rewrite (Rhs, Convert_To (Etype (Lhs),
+                                    Relocate_Node (Rhs)));
+          Analyze_And_Resolve (Rhs, Etype (Lhs));
+       end if;
+ 
        --  If we are assigning an access type and the left side is an
        --  entity, then make sure that Is_Known_Non_Null properly
        --  reflects the state of the entity after the assignment
*************** package body Exp_Ch5 is
*** 1620,1626 ****
                 --  This is skipped if we have no finalization
  
                 if Expand_Ctrl_Actions
!                  and then not Restrictions (No_Finalization)
                 then
                    L := New_List (
                      Make_Block_Statement (Loc,
--- 1754,1760 ----
                 --  This is skipped if we have no finalization
  
                 if Expand_Ctrl_Actions
!                  and then not Restriction_Active (No_Finalization)
                 then
                    L := New_List (
                      Make_Block_Statement (Loc,
*************** package body Exp_Ch5 is
*** 2346,2352 ****
                             Enumeration_Rep (First_Literal (Btype))),
                        Right_Opnd => New_Reference_To (New_Id, Loc)));
              else
!                --  Use the constructed array Enum_Pos_To_Rep.
  
                 Expr :=
                   Make_Indexed_Component (Loc,
--- 2480,2486 ----
                             Enumeration_Rep (First_Literal (Btype))),
                        Right_Opnd => New_Reference_To (New_Id, Loc)));
              else
!                --  Use the constructed array Enum_Pos_To_Rep
  
                 Expr :=
                   Make_Indexed_Component (Loc,
*************** package body Exp_Ch5 is
*** 2533,2539 ****
        if No (Exp) then
           Kind := Ekind (Scope_Id);
  
!          --  If it is a return from procedures do no extra steps.
  
           if Kind = E_Procedure or else Kind = E_Generic_Procedure then
              return;
--- 2667,2673 ----
        if No (Exp) then
           Kind := Ekind (Scope_Id);
  
!          --  If it is a return from procedures do no extra steps
  
           if Kind = E_Procedure or else Kind = E_Generic_Procedure then
              return;
*************** package body Exp_Ch5 is
*** 2971,2982 ****
  
        Res       : List_Id;
        Tag_Tmp   : Entity_Id;
-       Prev_Tmp  : Entity_Id;
-       Next_Tmp  : Entity_Id;
-       Ctrl_Ref  : Node_Id;
-       Ctrl_Ref2 : Node_Id   := Empty;
-       Prev_Tmp2 : Entity_Id := Empty;  -- prevent warning
-       Next_Tmp2 : Entity_Id := Empty;  -- prevent warning
  
     begin
        Res := New_List;
--- 3105,3110 ----
*************** package body Exp_Ch5 is
*** 3014,3021 ****
               With_Detach => New_Reference_To (Standard_False, Loc)));
        end if;
  
-       Next_Tmp := Make_Defining_Identifier (Loc, New_Internal_Name ('C'));
- 
        --  Save the Tag in a local variable Tag_Tmp
  
        if Save_Tag then
--- 3142,3147 ----
*************** package body Exp_Ch5 is
*** 3037,3140 ****
           Tag_Tmp := Empty;
        end if;
  
!       --  Save the Finalization Pointers in local variables Prev_Tmp and
!       --  Next_Tmp. For objects with Has_Controlled_Component set, these
!       --  pointers are in the Record_Controller and if it is also
!       --  Is_Controlled, we need to save the object pointers as well.
  
        if Ctrl_Act then
!          Ctrl_Ref := Duplicate_Subexpr_No_Checks (L);
  
!          if Has_Controlled_Component (T) then
!             Ctrl_Ref :=
!               Make_Selected_Component (Loc,
!                 Prefix => Ctrl_Ref,
!                 Selector_Name =>
!                   New_Reference_To (Controller_Component (T), Loc));
  
!             if Is_Controlled (T) then
!                Ctrl_Ref2 := Duplicate_Subexpr_No_Checks (L);
!             end if;
!          end if;
  
!          Prev_Tmp := Make_Defining_Identifier (Loc, New_Internal_Name ('B'));
  
!          Append_To (Res,
!            Make_Object_Declaration (Loc,
!              Defining_Identifier => Prev_Tmp,
  
!              Object_Definition =>
!                New_Reference_To (RTE (RE_Finalizable_Ptr), Loc),
  
!              Expression =>
!                Make_Selected_Component (Loc,
!                  Prefix =>
!                    Unchecked_Convert_To (RTE (RE_Finalizable), Ctrl_Ref),
!                  Selector_Name => Make_Identifier (Loc, Name_Prev))));
  
!          Next_Tmp := Make_Defining_Identifier (Loc, New_Internal_Name ('C'));
  
!          Append_To (Res,
!            Make_Object_Declaration (Loc,
!              Defining_Identifier => Next_Tmp,
  
!              Object_Definition =>
!                New_Reference_To (RTE (RE_Finalizable_Ptr), Loc),
  
!              Expression =>
!                Make_Selected_Component (Loc,
                   Prefix =>
!                    Unchecked_Convert_To (RTE (RE_Finalizable),
!                      New_Copy_Tree (Ctrl_Ref)),
!                  Selector_Name => Make_Identifier (Loc, Name_Next))));
  
!          if Present (Ctrl_Ref2) then
!             Prev_Tmp2 :=
!               Make_Defining_Identifier (Loc, New_Internal_Name ('B'));
  
!             Append_To (Res,
!               Make_Object_Declaration (Loc,
!                 Defining_Identifier => Prev_Tmp2,
  
!                 Object_Definition =>
!                   New_Reference_To (RTE (RE_Finalizable_Ptr), Loc),
  
!                 Expression =>
!                   Make_Selected_Component (Loc,
                      Prefix =>
!                       Unchecked_Convert_To (RTE (RE_Finalizable), Ctrl_Ref2),
!                     Selector_Name => Make_Identifier (Loc, Name_Prev))));
  
!             Next_Tmp2 :=
!               Make_Defining_Identifier (Loc, New_Internal_Name ('C'));
  
              Append_To (Res,
!               Make_Object_Declaration (Loc,
!                 Defining_Identifier => Next_Tmp2,
  
!                 Object_Definition =>
!                   New_Reference_To (RTE (RE_Finalizable_Ptr), Loc),
  
!                 Expression =>
!                   Make_Selected_Component (Loc,
!                     Prefix =>
!                       Unchecked_Convert_To (RTE (RE_Finalizable),
!                         New_Copy_Tree (Ctrl_Ref2)),
!                     Selector_Name => Make_Identifier (Loc, Name_Next))));
!          end if;
  
!       --  If not controlled type, then Prev_Tmp and Ctrl_Ref unused
  
!       else
!          Prev_Tmp := Empty;
!          Ctrl_Ref := Empty;
!       end if;
  
!       --  Do the Assignment
  
!       Append_To (Res, Relocate_Node (N));
  
!       --  Restore the Tag
  
        if Save_Tag then
           Append_To (Res,
--- 3163,3482 ----
           Tag_Tmp := Empty;
        end if;
  
!       --  Processing for controlled types and types with controlled components
! 
!       --  Variables of such types contain pointers used to chain them in
!       --  finalization lists, in addition to user data. These pointers are
!       --  specific to each object of the type, not to the value being assigned.
!       --  Thus they need to be left intact during the assignment. We achieve
!       --  this by constructing a Storage_Array subtype, and by overlaying
!       --  objects of this type on the source and target of the assignment.
!       --  The assignment is then rewritten to assignments of slices of these
!       --  arrays, copying the user data, and leaving the pointers untouched.
  
        if Ctrl_Act then
!          Controlled_Actions : declare
!             Prev_Ref : Node_Id;
!             --  A reference to the Prev component of the record controller
  
!             First_After_Root : Node_Id := Empty;
!             --  Index of first byte to be copied (used to skip
!             --  Root_Controlled in controlled objects).
  
!             Last_Before_Hole : Node_Id := Empty;
!             --  Index of last byte to be copied before outermost record
!             --  controller data.
  
!             Hole_Length      : Node_Id := Empty;
!             --  Length of record controller data (Prev and Next pointers)
  
!             First_After_Hole : Node_Id := Empty;
!             --  Index of first byte to be copied after outermost record
!             --  controller data.
  
!             Expr, Source_Size      : Node_Id;
!             --  Used for computation of the size of the data to be copied
  
!             Range_Type  : Entity_Id;
!             Opaque_Type : Entity_Id;
  
!             function Build_Slice
!               (Rec : Entity_Id;
!                Lo  : Node_Id;
!                Hi  : Node_Id) return Node_Id;
!             --  Build and return a slice of an array of type S overlaid
!             --  on object Rec, with bounds specified by Lo and Hi. If either
!             --  bound is empty, a default of S'First (respectively S'Last)
!             --  is used.
  
!             -----------------
!             -- Build_Slice --
!             -----------------
  
!             function Build_Slice
!               (Rec : Node_Id;
!                Lo  : Node_Id;
!                Hi  : Node_Id) return Node_Id
!             is
!                Lo_Bound : Node_Id;
!                Hi_Bound : Node_Id;
  
!                Opaque : constant Node_Id :=
!                           Unchecked_Convert_To (Opaque_Type,
!                             Make_Attribute_Reference (Loc,
!                               Prefix         => Rec,
!                               Attribute_Name => Name_Address));
!                --  Access value designating an opaque storage array of
!                --  type S overlaid on record Rec.
! 
!             begin
!                --  Compute slice bounds using S'First (1) and S'Last
!                --  as default values when not specified by the caller.
! 
!                if No (Lo) then
!                   Lo_Bound := Make_Integer_Literal (Loc, 1);
!                else
!                   Lo_Bound := Lo;
!                end if;
! 
!                if No (Hi) then
!                   Hi_Bound := Make_Attribute_Reference (Loc,
!                     Prefix => New_Occurrence_Of (Range_Type, Loc),
!                     Attribute_Name => Name_Last);
!                else
!                   Hi_Bound := Hi;
!                end if;
! 
!                return Make_Slice (Loc,
                   Prefix =>
!                    Opaque,
!                  Discrete_Range => Make_Range (Loc,
!                    Lo_Bound, Hi_Bound));
!             end Build_Slice;
  
!          --  Start of processing for Controlled_Actions
  
!          begin
!             --  Create a constrained subtype of Storage_Array whose size
!             --  corresponds to the value being assigned.
  
!             --  subtype G is Storage_Offset range
!             --    1 .. (Expr'Size + Storage_Unit - 1) / Storage_Unit
  
!             Expr := Duplicate_Subexpr_No_Checks (Expression (N));
! 
!             if Nkind (Expr) = N_Qualified_Expression then
!                Expr := Expression (Expr);
!             end if;
! 
!             Source_Size :=
!               Make_Op_Add (Loc,
!                 Left_Opnd =>
!                   Make_Attribute_Reference (Loc,
                      Prefix =>
!                       Expr,
!                     Attribute_Name =>
!                       Name_Size),
!                 Right_Opnd =>
!                   Make_Integer_Literal (Loc,
!                   System_Storage_Unit - 1));
  
!             --  If Expr is a type conversion, standard Ada does not allow
!             --  'Size to be taken on it, but Gigi can handle this case,
!             --  and thus we can determine the amount of data to be copied.
!             --  The appropriate circuitry is enabled only for conversions
!             --  that do not Come_From_Source.
! 
!             Set_Comes_From_Source (Prefix (Left_Opnd (Source_Size)), False);
! 
!             Source_Size :=
!               Make_Op_Divide (Loc,
!                 Left_Opnd => Source_Size,
!                 Right_Opnd =>
!                   Make_Integer_Literal (Loc,
!                     Intval => System_Storage_Unit));
! 
!             Range_Type :=
!               Make_Defining_Identifier (Loc,
!                 New_Internal_Name ('G'));
  
              Append_To (Res,
!               Make_Subtype_Declaration (Loc,
!                 Defining_Identifier => Range_Type,
!                 Subtype_Indication =>
!                   Make_Subtype_Indication (Loc,
!                     Subtype_Mark =>
!                       New_Reference_To (RTE (RE_Storage_Offset), Loc),
!                     Constraint   => Make_Range_Constraint (Loc,
!                       Range_Expression =>
!                         Make_Range (Loc,
!                           Low_Bound  => Make_Integer_Literal (Loc, 1),
!                           High_Bound => Source_Size)))));
  
!             --  subtype S is Storage_Array (G)
  
!             Append_To (Res,
!               Make_Subtype_Declaration (Loc,
!                 Defining_Identifier =>
!                   Make_Defining_Identifier (Loc,
!                     New_Internal_Name ('S')),
!                 Subtype_Indication  =>
!                   Make_Subtype_Indication (Loc,
!                     Subtype_Mark =>
!                       New_Reference_To (RTE (RE_Storage_Array), Loc),
!                     Constraint =>
!                       Make_Index_Or_Discriminant_Constraint (Loc,
!                         Constraints =>
!                           New_List (New_Reference_To (Range_Type, Loc))))));
  
!             --  type A is access S
  
!             Opaque_Type :=
!               Make_Defining_Identifier (Loc,
!                 Chars => New_Internal_Name ('A'));
  
!             Append_To (Res,
!               Make_Full_Type_Declaration (Loc,
!                 Defining_Identifier => Opaque_Type,
!                 Type_Definition     =>
!                   Make_Access_To_Object_Definition (Loc,
!                     Subtype_Indication =>
!                       New_Occurrence_Of (
!                         Defining_Identifier (Last (Res)), Loc))));
  
!             --  Generate appropriate slice assignments
  
!             First_After_Root := Make_Integer_Literal (Loc, 1);
! 
!             --  For the case of a controlled object, skip the
!             --  Root_Controlled part.
! 
!             if Is_Controlled (T) then
!                First_After_Root :=
!                  Make_Op_Add (Loc,
!                    First_After_Root,
!                    Make_Op_Divide (Loc,
!                      Make_Attribute_Reference (Loc,
!                        Prefix =>
!                          New_Occurrence_Of (RTE (RE_Root_Controlled), Loc),
!                        Attribute_Name => Name_Size),
!                      Make_Integer_Literal (Loc, System_Storage_Unit)));
!             end if;
! 
!             --  For the case of a record with controlled components, skip
!             --  the Prev and Next components of the record controller.
!             --  These components constitute a 'hole' in the middle of the
!             --  data to be copied.
! 
!             if Has_Controlled_Component (T) then
!                Prev_Ref :=
!                  Make_Selected_Component (Loc,
!                    Prefix =>
!                      Make_Selected_Component (Loc,
!                        Prefix => Duplicate_Subexpr_No_Checks (L),
!                        Selector_Name =>
!                          New_Reference_To (Controller_Component (T), Loc)),
!                    Selector_Name =>  Make_Identifier (Loc, Name_Prev));
! 
!                --  Last index before hole: determined by position of
!                --  the _Controller.Prev component.
! 
!                Last_Before_Hole :=
!                  Make_Defining_Identifier (Loc,
!                    New_Internal_Name ('L'));
! 
!                Append_To (Res,
!                  Make_Object_Declaration (Loc,
!                    Defining_Identifier => Last_Before_Hole,
!                    Object_Definition   => New_Occurrence_Of (
!                      RTE (RE_Storage_Offset), Loc),
!                    Constant_Present    => True,
!                    Expression          => Make_Op_Add (Loc,
!                        Make_Attribute_Reference (Loc,
!                          Prefix => Prev_Ref,
!                          Attribute_Name => Name_Position),
!                        Make_Attribute_Reference (Loc,
!                          Prefix => New_Copy_Tree (Prefix (Prev_Ref)),
!                          Attribute_Name => Name_Position))));
! 
!                --  Hole length: size of the Prev and Next components
! 
!                Hole_Length :=
!                  Make_Op_Multiply (Loc,
!                    Left_Opnd  => Make_Integer_Literal (Loc, Uint_2),
!                    Right_Opnd =>
!                      Make_Op_Divide (Loc,
!                        Left_Opnd =>
!                          Make_Attribute_Reference (Loc,
!                            Prefix         => New_Copy_Tree (Prev_Ref),
!                            Attribute_Name => Name_Size),
!                        Right_Opnd =>
!                          Make_Integer_Literal (Loc,
!                            Intval => System_Storage_Unit)));
! 
!                --  First index after hole
! 
!                First_After_Hole :=
!                  Make_Defining_Identifier (Loc,
!                    New_Internal_Name ('F'));
! 
!                Append_To (Res,
!                  Make_Object_Declaration (Loc,
!                    Defining_Identifier => First_After_Hole,
!                    Object_Definition   => New_Occurrence_Of (
!                      RTE (RE_Storage_Offset), Loc),
!                    Constant_Present    => True,
!                    Expression          =>
!                      Make_Op_Add (Loc,
!                        Left_Opnd  =>
!                          Make_Op_Add (Loc,
!                            Left_Opnd  =>
!                              New_Occurrence_Of (Last_Before_Hole, Loc),
!                            Right_Opnd => Hole_Length),
!                        Right_Opnd => Make_Integer_Literal (Loc, 1))));
! 
!                Last_Before_Hole := New_Occurrence_Of (Last_Before_Hole, Loc);
!                First_After_Hole := New_Occurrence_Of (First_After_Hole, Loc);
!             end if;
! 
!             --  Assign the first slice (possibly skipping Root_Controlled,
!             --  up to the beginning of the record controller if present,
!             --  up to the end of the object if not).
! 
!             Append_To (Res, Make_Assignment_Statement (Loc,
!               Name       => Build_Slice (
!                 Rec => Duplicate_Subexpr_No_Checks (L),
!                 Lo  => First_After_Root,
!                 Hi  => Last_Before_Hole),
! 
!               Expression => Build_Slice (
!                 Rec => Expression (N),
!                 Lo  => First_After_Root,
!                 Hi  => New_Copy_Tree (Last_Before_Hole))));
! 
!             if Present (First_After_Hole) then
! 
!                --  If a record controller is present, copy the second slice,
!                --  from right after the _Controller.Next component up to the
!                --  end of the object.
! 
!                Append_To (Res, Make_Assignment_Statement (Loc,
!                  Name       => Build_Slice (
!                    Rec => Duplicate_Subexpr_No_Checks (L),
!                    Lo  => First_After_Hole,
!                    Hi  => Empty),
!                  Expression => Build_Slice (
!                    Rec => Duplicate_Subexpr_No_Checks (Expression (N)),
!                    Lo  => New_Copy_Tree (First_After_Hole),
!                    Hi  => Empty)));
!             end if;
!          end Controlled_Actions;
! 
!       else
!          Append_To (Res, Relocate_Node (N));
!       end if;
! 
!       --  Restore the tag
  
        if Save_Tag then
           Append_To (Res,
*************** package body Exp_Ch5 is
*** 3146,3200 ****
               Expression => New_Reference_To (Tag_Tmp, Loc)));
        end if;
  
!       --  Restore the finalization pointers
! 
!       if Ctrl_Act then
!          Append_To (Res,
!            Make_Assignment_Statement (Loc,
!              Name =>
!                Make_Selected_Component (Loc,
!                  Prefix =>
!                    Unchecked_Convert_To (RTE (RE_Finalizable),
!                      New_Copy_Tree (Ctrl_Ref)),
!                  Selector_Name => Make_Identifier (Loc, Name_Prev)),
!              Expression => New_Reference_To (Prev_Tmp, Loc)));
! 
!          Append_To (Res,
!            Make_Assignment_Statement (Loc,
!              Name =>
!                Make_Selected_Component (Loc,
!                  Prefix =>
!                    Unchecked_Convert_To (RTE (RE_Finalizable),
!                      New_Copy_Tree (Ctrl_Ref)),
!                  Selector_Name => Make_Identifier (Loc, Name_Next)),
!              Expression => New_Reference_To (Next_Tmp, Loc)));
! 
!          if Present (Ctrl_Ref2) then
!             Append_To (Res,
!               Make_Assignment_Statement (Loc,
!                 Name =>
!                   Make_Selected_Component (Loc,
!                     Prefix =>
!                       Unchecked_Convert_To (RTE (RE_Finalizable),
!                         New_Copy_Tree (Ctrl_Ref2)),
!                     Selector_Name => Make_Identifier (Loc, Name_Prev)),
!                 Expression => New_Reference_To (Prev_Tmp2, Loc)));
! 
!             Append_To (Res,
!               Make_Assignment_Statement (Loc,
!                 Name =>
!                   Make_Selected_Component (Loc,
!                     Prefix =>
!                       Unchecked_Convert_To (RTE (RE_Finalizable),
!                         New_Copy_Tree (Ctrl_Ref2)),
!                     Selector_Name => Make_Identifier (Loc, Name_Next)),
!                 Expression => New_Reference_To (Next_Tmp2, Loc)));
!          end if;
!       end if;
! 
!       --  Adjust the target after the assignment when controlled. (not in
!       --  the init proc since it is an initialization more than an
!       --  assignment)
  
        if Ctrl_Act then
           Append_List_To (Res,
--- 3488,3495 ----
               Expression => New_Reference_To (Tag_Tmp, Loc)));
        end if;
  
!       --  Adjust the target after the assignment when controlled (not in the
!       --  init proc since it is an initialization more than an assignment).
  
        if Ctrl_Act then
           Append_List_To (Res,
*************** package body Exp_Ch5 is
*** 3208,3213 ****
--- 3503,3510 ----
        return Res;
  
     exception
+       --  Could use comment here ???
+ 
        when RE_Not_Available =>
           return Empty_List;
     end Make_Tag_Ctrl_Assignment;
diff -Nrcpad gcc-3.4.3/gcc/ada/exp_ch6.adb gcc-4.0.0/gcc/ada/exp_ch6.adb
*** gcc-3.4.3/gcc/ada/exp_ch6.adb	Mon Jan  5 15:20:43 2004
--- gcc-4.0.0/gcc/ada/exp_ch6.adb	Thu Feb 10 13:50:45 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Nlists;   use Nlists;
*** 51,56 ****
--- 51,57 ----
  with Nmake;    use Nmake;
  with Opt;      use Opt;
  with Restrict; use Restrict;
+ with Rident;   use Rident;
  with Rtsfind;  use Rtsfind;
  with Sem;      use Sem;
  with Sem_Ch6;  use Sem_Ch6;
*************** package body Exp_Ch6 is
*** 358,364 ****
        --  since we won't be able to generate the code to handle the
        --  recursion in any case.
  
!       if Restrictions (No_Implicit_Conditionals) then
           return;
        end if;
  
--- 359,365 ----
        --  since we won't be able to generate the code to handle the
        --  recursion in any case.
  
!       if Restriction_Active (No_Implicit_Conditionals) then
           return;
        end if;
  
*************** package body Exp_Ch6 is
*** 528,539 ****
        ---------------------------
  
        procedure Add_Call_By_Copy_Code is
!          Expr    : Node_Id;
!          Init    : Node_Id;
!          Temp    : Entity_Id;
!          Var     : Entity_Id;
!          V_Typ   : Entity_Id;
!          Crep    : Boolean;
  
        begin
           Temp := Make_Defining_Identifier (Loc, New_Internal_Name ('T'));
--- 529,542 ----
        ---------------------------
  
        procedure Add_Call_By_Copy_Code is
!          Expr  : Node_Id;
!          Init  : Node_Id;
!          Temp  : Entity_Id;
!          Indic : Node_Id := New_Occurrence_Of (Etype (Formal), Loc);
!          Var   : Entity_Id;
!          F_Typ : constant Entity_Id := Etype (Formal);
!          V_Typ : Entity_Id;
!          Crep  : Boolean;
  
        begin
           Temp := Make_Defining_Identifier (Loc, New_Internal_Name ('T'));
*************** package body Exp_Ch6 is
*** 547,553 ****
              Var := Make_Var (Expression (Actual));
  
              Crep := not Same_Representation
!                           (Etype (Formal), Etype (Expression (Actual)));
  
           else
              V_Typ := Etype (Actual);
--- 550,556 ----
              Var := Make_Var (Expression (Actual));
  
              Crep := not Same_Representation
!                           (F_Typ, Etype (Expression (Actual)));
  
           else
              V_Typ := Etype (Actual);
*************** package body Exp_Ch6 is
*** 559,577 ****
           --  parameter where the formal is an unconstrained array (in the
           --  latter case, we have to pass in an object with bounds).
  
           if Ekind (Formal) = E_In_Out_Parameter
!            or else (Is_Array_Type (Etype (Formal))
!                      and then
!                     not Is_Constrained (Etype (Formal)))
           then
              if Nkind (Actual) = N_Type_Conversion then
                 if Conversion_OK (Actual) then
!                   Init := OK_Convert_To
!                             (Etype (Formal), New_Occurrence_Of (Var, Loc));
                 else
!                   Init := Convert_To
!                             (Etype (Formal), New_Occurrence_Of (Var, Loc));
                 end if;
              else
                 Init := New_Occurrence_Of (Var, Loc);
              end if;
--- 562,609 ----
           --  parameter where the formal is an unconstrained array (in the
           --  latter case, we have to pass in an object with bounds).
  
+          --  If this is an out parameter, the initial copy is wasteful, so as
+          --  an optimization for the one-dimensional case we extract the
+          --  bounds of the actual and build an uninitialized temporary of the
+          --  right size.
+ 
           if Ekind (Formal) = E_In_Out_Parameter
!            or else (Is_Array_Type (F_Typ) and then not Is_Constrained (F_Typ))
           then
              if Nkind (Actual) = N_Type_Conversion then
                 if Conversion_OK (Actual) then
!                   Init := OK_Convert_To (F_Typ, New_Occurrence_Of (Var, Loc));
                 else
!                   Init := Convert_To (F_Typ, New_Occurrence_Of (Var, Loc));
                 end if;
+ 
+             elsif Ekind (Formal) = E_Out_Parameter
+               and then Is_Array_Type (F_Typ)
+               and then Number_Dimensions (F_Typ) = 1
+               and then not Has_Non_Null_Base_Init_Proc (F_Typ)
+             then
+                --  Actual is a one-dimensional array or slice, and the type
+                --  requires no initialization. Create a temporary of the
+                --  right size, but do copy actual into it (optimization).
+ 
+                Init := Empty;
+                Indic :=
+                  Make_Subtype_Indication (Loc,
+                    Subtype_Mark =>
+                      New_Occurrence_Of (F_Typ, Loc),
+                    Constraint   =>
+                      Make_Index_Or_Discriminant_Constraint (Loc,
+                        Constraints => New_List (
+                          Make_Range (Loc,
+                            Low_Bound  =>
+                              Make_Attribute_Reference (Loc,
+                                Prefix => New_Occurrence_Of (Var, Loc),
+                                Attribute_name => Name_First),
+                            High_Bound =>
+                              Make_Attribute_Reference (Loc,
+                                Prefix => New_Occurrence_Of (Var, Loc),
+                                Attribute_Name => Name_Last)))));
+ 
              else
                 Init := New_Occurrence_Of (Var, Loc);
              end if;
*************** package body Exp_Ch6 is
*** 584,600 ****
  
           elsif Ekind (Formal) = E_Out_Parameter
             and then Nkind (Actual) = N_Type_Conversion
!            and then (Is_Bit_Packed_Array (Etype (Formal))
                         or else
                       Is_Bit_Packed_Array (Etype (Expression (Actual))))
           then
              if Conversion_OK (Actual) then
                 Init :=
!                  OK_Convert_To (Etype (Formal), New_Occurrence_Of (Var, Loc));
              else
                 Init :=
!                  Convert_To (Etype (Formal), New_Occurrence_Of (Var, Loc));
              end if;
           else
              Init := Empty;
           end if;
--- 616,636 ----
  
           elsif Ekind (Formal) = E_Out_Parameter
             and then Nkind (Actual) = N_Type_Conversion
!            and then (Is_Bit_Packed_Array (F_Typ)
                         or else
                       Is_Bit_Packed_Array (Etype (Expression (Actual))))
           then
              if Conversion_OK (Actual) then
                 Init :=
!                  OK_Convert_To (F_Typ, New_Occurrence_Of (Var, Loc));
              else
                 Init :=
!                  Convert_To (F_Typ, New_Occurrence_Of (Var, Loc));
              end if;
+ 
+          elsif Ekind (Formal) = E_In_Parameter then
+             Init := New_Occurrence_Of (Var, Loc);
+ 
           else
              Init := Empty;
           end if;
*************** package body Exp_Ch6 is
*** 602,609 ****
           N_Node :=
             Make_Object_Declaration (Loc,
               Defining_Identifier => Temp,
!              Object_Definition   =>
!                New_Occurrence_Of (Etype (Formal), Loc),
               Expression => Init);
           Set_Assignment_OK (N_Node);
           Insert_Action (N, N_Node);
--- 638,644 ----
           N_Node :=
             Make_Object_Declaration (Loc,
               Defining_Identifier => Temp,
!              Object_Definition   => Indic,
               Expression => Init);
           Set_Assignment_OK (N_Node);
           Insert_Action (N, N_Node);
*************** package body Exp_Ch6 is
*** 920,927 ****
--- 955,967 ----
              then
                 Add_Call_By_Copy_Code;
  
+             --  If the actual is not a scalar and is marked for volatile
+             --  treatment, whereas the formal is not volatile, then pass
+             --  by copy unless it is a by-reference type.
+ 
              elsif Is_Entity_Name (Actual)
                and then Treat_As_Volatile (Entity (Actual))
+               and then not Is_By_Reference_Type (Etype (Actual))
                and then not Is_Scalar_Type (Etype (Entity (Actual)))
                and then not Treat_As_Volatile (E_Formal)
              then
*************** package body Exp_Ch6 is
*** 1011,1017 ****
           end if;
        end if;
  
!       --  The call node itself is re-analyzed in Expand_Call.
  
     end Expand_Actuals;
  
--- 1051,1057 ----
           end if;
        end if;
  
!       --  The call node itself is re-analyzed in Expand_Call
  
     end Expand_Actuals;
  
*************** package body Exp_Ch6 is
*** 1265,1271 ****
           --  if we can tell that the first parameter cannot possibly be null.
           --  This helps optimization and also generation of warnings.
  
!          if not Restrictions (No_Exception_Handlers)
             and then Is_RTE (Subp, RE_Raise_Exception)
           then
              declare
--- 1305,1311 ----
           --  if we can tell that the first parameter cannot possibly be null.
           --  This helps optimization and also generation of warnings.
  
!          if not Restriction_Active (No_Exception_Handlers)
             and then Is_RTE (Subp, RE_Raise_Exception)
           then
              declare
*************** package body Exp_Ch6 is
*** 1341,1346 ****
--- 1381,1392 ----
                   New_Occurrence_Of (Standard_True, Loc),
                   Extra_Constrained (Formal));
  
+             --  Do not produce extra actuals for Unchecked_Union parameters.
+             --  Jump directly to the end of the loop.
+ 
+             elsif Is_Unchecked_Union (Base_Type (Etype (Actual))) then
+                goto Skip_Extra_Actual_Generation;
+ 
              else
                 --  If the actual is a type conversion, then the constrained
                 --  test applies to the actual, not the target type.
*************** package body Exp_Ch6 is
*** 1377,1383 ****
  
                 --  When passing an access parameter as the actual to another
                 --  access parameter we need to pass along the actual's own
!                --  associated access level parameter. This is done is we are
                 --  in the scope of the formal access parameter (if this is an
                 --  inlined body the extra formal is irrelevant).
  
--- 1423,1429 ----
  
                 --  When passing an access parameter as the actual to another
                 --  access parameter we need to pass along the actual's own
!                --  associated access level parameter. This is done if we are
                 --  in the scope of the formal access parameter (if this is an
                 --  inlined body the extra formal is irrelevant).
  
*************** package body Exp_Ch6 is
*** 1511,1517 ****
           elsif Convention (Subp) = Convention_Java then
              null;
  
!          else
              Cond :=
                Make_Op_Eq (Loc,
                  Left_Opnd => Duplicate_Subexpr_No_Checks (Prev),
--- 1557,1568 ----
           elsif Convention (Subp) = Convention_Java then
              null;
  
!             --  Ada 2005 (AI-231): do not force the check in case of Ada 2005
!             --  unless it is a null-excluding type
! 
!          elsif Ada_Version < Ada_05
!            or else Can_Never_Be_Null (Etype (Prev))
!          then
              Cond :=
                Make_Op_Eq (Loc,
                  Left_Opnd => Duplicate_Subexpr_No_Checks (Prev),
*************** package body Exp_Ch6 is
*** 1526,1533 ****
           --  are entities.
  
           if Validity_Checks_On then
!             if Ekind (Formal) = E_In_Parameter
!               and then Validity_Check_In_Params
              then
                 --  If the actual is an indexed component of a packed
                 --  type, it has not been expanded yet. It will be
--- 1577,1587 ----
           --  are entities.
  
           if Validity_Checks_On then
!             if  (Ekind (Formal) = E_In_Parameter
!                    and then Validity_Check_In_Params)
!               or else
!                 (Ekind (Formal) = E_In_Out_Parameter
!                    and then Validity_Check_In_Out_Params)
              then
                 --  If the actual is an indexed component of a packed
                 --  type, it has not been expanded yet. It will be
*************** package body Exp_Ch6 is
*** 1539,1549 ****
                 end if;
  
                 Ensure_Valid (Actual);
- 
-             elsif Ekind (Formal) = E_In_Out_Parameter
-               and then Validity_Check_In_Out_Params
-             then
-                Ensure_Valid (Actual);
              end if;
           end if;
  
--- 1593,1598 ----
*************** package body Exp_Ch6 is
*** 1616,1626 ****
                      Get_Remotely_Callable
                        (Duplicate_Subexpr_Move_Checks (Actual))),
                  Then_Statements => New_List (
!                   Make_Procedure_Call_Statement (Loc,
!                     New_Occurrence_Of (RTE
!                       (RE_Raise_Program_Error_For_E_4_18), Loc)))));
           end if;
  
           Next_Actual (Actual);
           Next_Formal (Formal);
        end loop;
--- 1665,1679 ----
                      Get_Remotely_Callable
                        (Duplicate_Subexpr_Move_Checks (Actual))),
                  Then_Statements => New_List (
!                   Make_Raise_Program_Error (Loc,
!                     Reason => PE_Illegal_RACW_E_4_18))));
           end if;
  
+          --  This label is required when skipping extra actual generation for
+          --  Unchecked_Union parameters.
+ 
+          <<Skip_Extra_Actual_Generation>>
+ 
           Next_Actual (Actual);
           Next_Formal (Formal);
        end loop;
*************** package body Exp_Ch6 is
*** 1680,1686 ****
          and then Present (Controlling_Argument (N))
          and then not Java_VM
        then
!          Expand_Dispatch_Call (N);
  
           --  The following return is worrisome. Is it really OK to
           --  skip all remaining processing in this procedure ???
--- 1733,1739 ----
          and then Present (Controlling_Argument (N))
          and then not Java_VM
        then
!          Expand_Dispatching_Call (N);
  
           --  The following return is worrisome. Is it really OK to
           --  skip all remaining processing in this procedure ???
*************** package body Exp_Ch6 is
*** 1824,1859 ****
           Subp := Parent_Subp;
        end if;
  
        if Is_RTE (Subp, RE_Abort_Task) then
           Check_Restriction (No_Abort_Statements, N);
-       end if;
- 
-       --  Some more special cases for cases other than explicit dereference
  
!       if Nkind (Name (N)) /= N_Explicit_Dereference then
  
!          --  Calls to an enumeration literal are replaced by the literal
!          --  This case occurs only when we have a call to a function that
!          --  is a renaming of an enumeration literal. The normal case of
!          --  a direct reference to an enumeration literal has already been
!          --  been dealt with by Resolve_Call. If the function is itself
!          --  inherited (see 7423-001) the literal of the parent type must
!          --  be explicitly converted to the return type of the function.
  
!          if Ekind (Subp) = E_Enumeration_Literal then
!             if Base_Type (Etype (Subp)) /= Base_Type (Etype (N)) then
!                Rewrite
!                  (N, Convert_To (Etype (N), New_Occurrence_Of (Subp, Loc)));
!             else
!                Rewrite (N, New_Occurrence_Of (Subp, Loc));
!             end if;
  
!             Resolve (N);
!          end if;
  
        --  Handle case of access to protected subprogram type
  
-       else
           if Ekind (Base_Type (Etype (Prefix (Name (N))))) =
                                 E_Access_Protected_Subprogram_Type
           then
--- 1877,1907 ----
           Subp := Parent_Subp;
        end if;
  
+       --  Check for violation of No_Abort_Statements
+ 
        if Is_RTE (Subp, RE_Abort_Task) then
           Check_Restriction (No_Abort_Statements, N);
  
!       --  Check for violation of No_Dynamic_Attachment
  
!       elsif RTU_Loaded (Ada_Interrupts)
!         and then (Is_RTE (Subp, RE_Is_Reserved)      or else
!                   Is_RTE (Subp, RE_Is_Attached)      or else
!                   Is_RTE (Subp, RE_Current_Handler)  or else
!                   Is_RTE (Subp, RE_Attach_Handler)   or else
!                   Is_RTE (Subp, RE_Exchange_Handler) or else
!                   Is_RTE (Subp, RE_Detach_Handler)   or else
!                   Is_RTE (Subp, RE_Reference))
!       then
!          Check_Restriction (No_Dynamic_Attachment, N);
!       end if;
  
!       --  Deal with case where call is an explicit dereference
  
!       if Nkind (Name (N)) = N_Explicit_Dereference then
  
        --  Handle case of access to protected subprogram type
  
           if Ekind (Base_Type (Etype (Prefix (Name (N))))) =
                                 E_Access_Protected_Subprogram_Type
           then
*************** package body Exp_Ch6 is
*** 1926,1931 ****
--- 1974,1983 ----
        --  appropriate expansion to the corresponding tree node and we
        --  are all done (since after that the call is gone!)
  
+       --  In the case where the intrinsic is to be processed by the back end,
+       --  the call to Expand_Intrinsic_Call will do nothing, which is fine,
+       --  since the idea in this case is to pass the call unchanged.
+ 
        if Is_Intrinsic_Subprogram (Subp) then
           Expand_Intrinsic_Call (N, Subp);
           return;
*************** package body Exp_Ch6 is
*** 1936,1947 ****
        then
           if Is_Inlined (Subp) then
  
!             declare
                 Bod         : Node_Id;
                 Must_Inline : Boolean := False;
                 Spec        : constant Node_Id := Unit_Declaration_Node (Subp);
                 Scop        : constant Entity_Id := Scope (Subp);
  
              begin
                 --  Verify that the body to inline has already been seen,
                 --  and that if the body is in the current unit the inlining
--- 1988,2030 ----
        then
           if Is_Inlined (Subp) then
  
!             Inlined_Subprogram : declare
                 Bod         : Node_Id;
                 Must_Inline : Boolean := False;
                 Spec        : constant Node_Id := Unit_Declaration_Node (Subp);
                 Scop        : constant Entity_Id := Scope (Subp);
  
+                function In_Unfrozen_Instance return Boolean;
+                --  If the subprogram comes from an instance in the same
+                --  unit, and the instance is not yet frozen, inlining might
+                --  trigger order-of-elaboration problems in gigi.
+ 
+                --------------------------
+                -- In_Unfrozen_Instance --
+                --------------------------
+ 
+                function In_Unfrozen_Instance return Boolean is
+                   S : Entity_Id := Scop;
+ 
+                begin
+                   while Present (S)
+                     and then S /= Standard_Standard
+                   loop
+                      if Is_Generic_Instance (S)
+                        and then Present (Freeze_Node (S))
+                        and then not Analyzed (Freeze_Node (S))
+                      then
+                         return True;
+                      end if;
+ 
+                      S := Scope (S);
+                   end loop;
+ 
+                   return False;
+                end In_Unfrozen_Instance;
+ 
+             --  Start of processing for Inlined_Subprogram
+ 
              begin
                 --  Verify that the body to inline has already been seen,
                 --  and that if the body is in the current unit the inlining
*************** package body Exp_Ch6 is
*** 1964,1977 ****
                 then
                    Must_Inline := False;
  
!                --  If the subprogram comes from an instance in the same
!                --  unit, and the instance is not yet frozen, inlining might
!                --  trigger order-of-elaboration problems in gigi.
! 
!                elsif Is_Generic_Instance (Scop)
!                  and then Present (Freeze_Node (Scop))
!                  and then not Analyzed (Freeze_Node (Scop))
!                then
                    Must_Inline := False;
  
                 else
--- 2047,2053 ----
                 then
                    Must_Inline := False;
  
!                elsif In_Unfrozen_Instance then
                    Must_Inline := False;
  
                 else
*************** package body Exp_Ch6 is
*** 1992,2001 ****
                    --  temporaries are generated when compiling the body by
                    --  itself. Otherwise link errors can occur.
  
                    elsif not (In_Extended_Main_Code_Unit (N))
                      and then In_Package_Body
                    then
!                      Must_Inline := True;
                    end if;
                 end if;
  
--- 2068,2083 ----
                    --  temporaries are generated when compiling the body by
                    --  itself. Otherwise link errors can occur.
  
+                   --  If the function being called is itself in the main unit,
+                   --  we cannot inline, because there is a risk of double
+                   --  elaboration and/or circularity: the inlining can make
+                   --  visible a private entity in the body of the main unit,
+                   --  that gigi will see before its sees its proper definition.
+ 
                    elsif not (In_Extended_Main_Code_Unit (N))
                      and then In_Package_Body
                    then
!                      Must_Inline := not In_Extended_Main_Source_Unit (Subp);
                    end if;
                 end if;
  
*************** package body Exp_Ch6 is
*** 2019,2025 ****
                         N, Subp);
                    end if;
                 end if;
!             end;
           end if;
        end if;
  
--- 2101,2107 ----
                         N, Subp);
                    end if;
                 end if;
!             end Inlined_Subprogram;
           end if;
        end if;
  
*************** package body Exp_Ch6 is
*** 2222,2228 ****
        Temp_Typ : Entity_Id;
  
        procedure Make_Exit_Label;
!       --  Build declaration for exit label to be used in Return statements.
  
        function Process_Formals (N : Node_Id) return Traverse_Result;
        --  Replace occurrence of a formal with the corresponding actual, or
--- 2304,2310 ----
        Temp_Typ : Entity_Id;
  
        procedure Make_Exit_Label;
!       --  Build declaration for exit label to be used in Return statements
  
        function Process_Formals (N : Node_Id) return Traverse_Result;
        --  Replace occurrence of a formal with the corresponding actual, or
*************** package body Exp_Ch6 is
*** 2244,2256 ****
        --  If procedure body has no local variables, inline body without
        --  creating block,  otherwise rewrite call with block.
  
        ---------------------
        -- Make_Exit_Label --
        ---------------------
  
        procedure Make_Exit_Label is
        begin
!          --  Create exit label for subprogram, if one doesn't exist yet.
  
           if No (Exit_Lab) then
              Lab_Id := Make_Identifier (Loc, New_Internal_Name ('L'));
--- 2326,2341 ----
        --  If procedure body has no local variables, inline body without
        --  creating block,  otherwise rewrite call with block.
  
+       function Formal_Is_Used_Once (Formal : Entity_Id) return Boolean;
+       --  Determine whether a formal parameter is used only once in Orig_Bod
+ 
        ---------------------
        -- Make_Exit_Label --
        ---------------------
  
        procedure Make_Exit_Label is
        begin
!          --  Create exit label for subprogram if one does not exist yet
  
           if No (Exit_Lab) then
              Lab_Id := Make_Identifier (Loc, New_Internal_Name ('L'));
*************** package body Exp_Ch6 is
*** 2428,2445 ****
           elsif Nkind (N) = N_Identifier
             and then Nkind (Parent (Entity (N))) = N_Object_Declaration
           then
! 
!             --  The block assigns the result of the call to the temporary.
  
              Insert_After (Parent (Entity (N)), Blk);
  
           elsif Nkind (Parent (N)) = N_Assignment_Statement
             and then Is_Entity_Name (Name (Parent (N)))
           then
- 
              --  Replace assignment with the block
  
!             Rewrite (Parent (N), Blk);
  
           elsif Nkind (Parent (N)) = N_Object_Declaration then
              Set_Expression (Parent (N), Empty);
--- 2513,2544 ----
           elsif Nkind (N) = N_Identifier
             and then Nkind (Parent (Entity (N))) = N_Object_Declaration
           then
!             --  The block assigns the result of the call to the temporary
  
              Insert_After (Parent (Entity (N)), Blk);
  
           elsif Nkind (Parent (N)) = N_Assignment_Statement
             and then Is_Entity_Name (Name (Parent (N)))
           then
              --  Replace assignment with the block
  
!             declare
!                Original_Assignment : constant Node_Id := Parent (N);
! 
!             begin
!                --  Preserve the original assignment node to keep the
!                --  complete assignment subtree consistent enough for
!                --  Analyze_Assignment to proceed (specifically, the
!                --  original Lhs node must still have an assignment
!                --  statement as its parent).
! 
!                --  We cannot rely on Original_Node to go back from the
!                --  block node to the assignment node, because the
!                --  assignment might already be a rewrite substitution.
! 
!                Discard_Node (Relocate_Node (Original_Assignment));
!                Rewrite (Original_Assignment, Blk);
!             end;
  
           elsif Nkind (Parent (N)) = N_Object_Declaration then
              Set_Expression (Parent (N), Empty);
*************** package body Exp_Ch6 is
*** 2453,2459 ****
  
        procedure Rewrite_Procedure_Call (N : Node_Id; Blk : Node_Id) is
           HSS  : constant Node_Id := Handled_Statement_Sequence (Blk);
- 
        begin
           if Is_Empty_List (Declarations (Blk)) then
              Insert_List_After (N, Statements (HSS));
--- 2552,2557 ----
*************** package body Exp_Ch6 is
*** 2463,2468 ****
--- 2561,2623 ----
           end if;
        end Rewrite_Procedure_Call;
  
+       -------------------------
+       -- Formal_Is_Used_Once --
+       ------------------------
+ 
+       function Formal_Is_Used_Once (Formal : Entity_Id) return Boolean is
+          Use_Counter : Int := 0;
+ 
+          function Count_Uses (N : Node_Id) return Traverse_Result;
+          --  Traverse the tree and count the uses of the formal parameter.
+          --  In this case, for optimization purposes, we do not need to
+          --  continue the traversal once more than one use is encountered.
+ 
+          ----------------
+          -- Count_Uses --
+          ----------------
+ 
+          function Count_Uses (N : Node_Id) return Traverse_Result is
+          begin
+             --  The original node is an identifier
+ 
+             if Nkind (N) = N_Identifier
+               and then Present (Entity (N))
+ 
+                --  The original node's entity points to the one in the
+                --  copied body.
+ 
+               and then Nkind (Entity (N)) = N_Identifier
+               and then Present (Entity (Entity (N)))
+ 
+                --  The entity of the copied node is the formal parameter
+ 
+               and then Entity (Entity (N)) = Formal
+             then
+                Use_Counter := Use_Counter + 1;
+ 
+                if Use_Counter > 1 then
+ 
+                   --  Denote more than one use and abandon the traversal
+ 
+                   Use_Counter := 2;
+                   return Abandon;
+ 
+                end if;
+             end if;
+ 
+             return OK;
+          end Count_Uses;
+ 
+          procedure Count_Formal_Uses is new Traverse_Proc (Count_Uses);
+ 
+       --  Start of processing for Formal_Is_Used_Once
+ 
+       begin
+          Count_Formal_Uses (Orig_Bod);
+          return Use_Counter = 1;
+       end Formal_Is_Used_Once;
+ 
     --  Start of processing for Expand_Inlined_Call
  
     begin
*************** package body Exp_Ch6 is
*** 2507,2513 ****
           Set_Declarations (Blk, New_List);
        end if;
  
!       --  If this is a derived function, establish the proper return type.
  
        if Present (Orig_Subp)
          and then Orig_Subp /= Subp
--- 2662,2668 ----
           Set_Declarations (Blk, New_List);
        end if;
  
!       --  If this is a derived function, establish the proper return type
  
        if Present (Orig_Subp)
          and then Orig_Subp /= Subp
*************** package body Exp_Ch6 is
*** 2559,2564 ****
--- 2714,2726 ----
                 (not Is_Scalar_Type (Etype (A))
                   or else Ekind (Entity (A)) = E_Enumeration_Literal))
  
+          --  When the actual is an identifier and the corresponding formal
+          --  is used only once in the original body, the formal can be
+          --  substituted directly with the actual parameter.
+ 
+            or else (Nkind (A) = N_Identifier
+              and then Formal_Is_Used_Once (F))
+ 
             or else Nkind (A) = N_Real_Literal
             or else Nkind (A) = N_Integer_Literal
             or else Nkind (A) = N_Character_Literal
*************** package body Exp_Ch6 is
*** 2637,2643 ****
              Targ := Name (Parent (N));
  
           else
!             --  Replace call with temporary, and create its declaration.
  
              Temp :=
                Make_Defining_Identifier (Loc, New_Internal_Name ('C'));
--- 2799,2805 ----
              Targ := Name (Parent (N));
  
           else
!             --  Replace call with temporary and create its declaration
  
              Temp :=
                Make_Defining_Identifier (Loc, New_Internal_Name ('C'));
*************** package body Exp_Ch6 is
*** 2655,2661 ****
           end if;
        end if;
  
!       --  Traverse the tree and replace  formals with actuals or their thunks.
        --  Attach block to tree before analysis and rewriting.
  
        Replace_Formals (Blk);
--- 2817,2823 ----
           end if;
        end if;
  
!       --  Traverse the tree and replace formals with actuals or their thunks.
        --  Attach block to tree before analysis and rewriting.
  
        Replace_Formals (Blk);
*************** package body Exp_Ch6 is
*** 2719,2725 ****
  
        Restore_Env;
  
!       --  Cleanup mapping between formals and actuals, for other expansions.
  
        F := First_Formal (Subp);
  
--- 2881,2887 ----
  
        Restore_Env;
  
!       --  Cleanup mapping between formals and actuals for other expansions
  
        F := First_Formal (Subp);
  
*************** package body Exp_Ch6 is
*** 2734,2744 ****
     ----------------------------
  
     procedure Expand_N_Function_Call (N : Node_Id) is
!       Typ : constant Entity_Id := Etype (N);
  
        function Returned_By_Reference return Boolean;
        --  If the return type is returned through the secondary stack. that is
        --  by reference, we don't want to create a temp to force stack checking.
  
        function Returned_By_Reference return Boolean is
           S : Entity_Id := Current_Scope;
--- 2896,2916 ----
     ----------------------------
  
     procedure Expand_N_Function_Call (N : Node_Id) is
!       Typ   : constant Entity_Id := Etype (N);
  
        function Returned_By_Reference return Boolean;
        --  If the return type is returned through the secondary stack. that is
        --  by reference, we don't want to create a temp to force stack checking.
+       --  Shouldn't this function be moved to exp_util???
+ 
+       function Rhs_Of_Assign_Or_Decl (N : Node_Id) return Boolean;
+       --  If the call is the right side of an assignment or the expression in
+       --  an object declaration, we don't need to create a temp as the left
+       --  side will already trigger stack checking if necessary.
+ 
+       ---------------------------
+       -- Returned_By_Reference --
+       ---------------------------
  
        function Returned_By_Reference return Boolean is
           S : Entity_Id := Current_Scope;
*************** package body Exp_Ch6 is
*** 2765,2770 ****
--- 2937,2969 ----
           end if;
        end Returned_By_Reference;
  
+       ---------------------------
+       -- Rhs_Of_Assign_Or_Decl --
+       ---------------------------
+ 
+       function Rhs_Of_Assign_Or_Decl (N : Node_Id) return Boolean is
+       begin
+          if (Nkind (Parent (N)) = N_Assignment_Statement
+                and then Expression (Parent (N)) = N)
+            or else
+              (Nkind (Parent (N)) = N_Qualified_Expression
+                 and then Nkind (Parent (Parent (N))) = N_Assignment_Statement
+                   and then Expression (Parent (Parent (N))) = Parent (N))
+            or else
+              (Nkind (Parent (N)) = N_Object_Declaration
+                 and then Expression (Parent (N)) = N)
+            or else
+              (Nkind (Parent (N)) = N_Component_Association
+                 and then Expression (Parent (N)) = N
+                   and then Nkind (Parent (Parent (N))) = N_Aggregate
+                     and then Rhs_Of_Assign_Or_Decl (Parent (Parent (N))))
+          then
+             return True;
+          else
+             return False;
+          end if;
+       end Rhs_Of_Assign_Or_Decl;
+ 
     --  Start of processing for Expand_N_Function_Call
  
     begin
*************** package body Exp_Ch6 is
*** 2774,2851 ****
        --  this because otherwise gigi may generate a large temporary on the
        --  fly and this can cause trouble with stack checking.
  
        if May_Generate_Large_Temp (Typ)
!         and then Nkind (Parent (N)) /= N_Assignment_Statement
!         and then
!           (Nkind (Parent (N)) /= N_Qualified_Expression
!              or else Nkind (Parent (Parent (N))) /= N_Assignment_Statement)
!         and then
!           (Nkind (Parent (N)) /= N_Object_Declaration
!              or else Expression (Parent (N)) /= N)
          and then not Returned_By_Reference
        then
!          --  Note: it might be thought that it would be OK to use a call to
!          --  Force_Evaluation here, but that's not good enough, because that
!          --  results in a 'Reference construct that may still need a temporary.
  
!          declare
!             Loc      : constant Source_Ptr := Sloc (N);
!             Temp_Obj : constant Entity_Id :=
!                          Make_Defining_Identifier (Loc,
!                            Chars => New_Internal_Name ('F'));
!             Temp_Typ : Entity_Id := Typ;
!             Decl     : Node_Id;
!             A        : Node_Id;
!             F        : Entity_Id;
!             Proc     : Entity_Id;
  
!          begin
!             if Is_Tagged_Type (Typ)
!               and then Present (Controlling_Argument (N))
!             then
!                if Nkind (Parent (N)) /= N_Procedure_Call_Statement
!                  and then Nkind (Parent (N)) /= N_Function_Call
                 then
!                   --  If this is a tag-indeterminate call, the object must
!                   --  be classwide.
  
!                   if Is_Tag_Indeterminate (N) then
!                      Temp_Typ := Class_Wide_Type (Typ);
!                   end if;
  
!                else
!                   --  If this is a dispatching call that is itself the
!                   --  controlling argument of an enclosing call, the nominal
!                   --  subtype of the object that replaces it must be classwide,
!                   --  so that dispatching will take place properly. If it is
!                   --  not a controlling argument, the object is not classwide.
  
!                   Proc := Entity (Name (Parent (N)));
!                   F    := First_Formal (Proc);
!                   A    := First_Actual (Parent (N));
  
!                   while A /= N loop
!                      Next_Formal (F);
!                      Next_Actual (A);
!                   end loop;
  
!                   if Is_Controlling_Formal (F) then
!                      Temp_Typ := Class_Wide_Type (Typ);
                    end if;
                 end if;
-             end if;
  
!             Decl :=
!               Make_Object_Declaration (Loc,
!                 Defining_Identifier => Temp_Obj,
!                 Object_Definition   => New_Occurrence_Of (Temp_Typ, Loc),
!                 Constant_Present    => True,
!                 Expression          => Relocate_Node (N));
!             Set_Assignment_OK (Decl);
  
!             Insert_Actions (N, New_List (Decl));
!             Rewrite (N, New_Occurrence_Of (Temp_Obj, Loc));
!          end;
  
        --  Normal case, expand the call
  
--- 2973,3067 ----
        --  this because otherwise gigi may generate a large temporary on the
        --  fly and this can cause trouble with stack checking.
  
+       --  This is unecessary if the call is the expression in an object
+       --  declaration, or if it appears outside of any library unit. This
+       --  can only happen if it appears as an actual in a library-level
+       --  instance, in which case a temporary will be generated for it once
+       --  the instance itself is installed.
+ 
        if May_Generate_Large_Temp (Typ)
!         and then not Rhs_Of_Assign_Or_Decl (N)
          and then not Returned_By_Reference
+         and then Current_Scope /= Standard_Standard
        then
!          if Stack_Checking_Enabled then
  
!             --  Note: it might be thought that it would be OK to use a call
!             --  to Force_Evaluation here, but that's not good enough, because
!             --  that can results in a 'Reference construct that may still
!             --  need a temporary.
  
!             declare
!                Loc      : constant Source_Ptr := Sloc (N);
!                Temp_Obj : constant Entity_Id :=
!                             Make_Defining_Identifier (Loc,
!                               Chars => New_Internal_Name ('F'));
!                Temp_Typ : Entity_Id := Typ;
!                Decl     : Node_Id;
!                A        : Node_Id;
!                F        : Entity_Id;
!                Proc     : Entity_Id;
! 
!             begin
!                if Is_Tagged_Type (Typ)
!                  and then Present (Controlling_Argument (N))
                 then
!                   if Nkind (Parent (N)) /= N_Procedure_Call_Statement
!                     and then Nkind (Parent (N)) /= N_Function_Call
!                   then
!                      --  If this is a tag-indeterminate call, the object must
!                      --  be classwide.
  
!                      if Is_Tag_Indeterminate (N) then
!                         Temp_Typ := Class_Wide_Type (Typ);
!                      end if;
  
!                   else
!                      --  If this is a dispatching call that is itself the
!                      --  controlling argument of an enclosing call, the
!                      --  nominal subtype of the object that replaces it must
!                      --  be classwide, so that dispatching will take place
!                      --  properly. If it is not a controlling argument, the
!                      --  object is not classwide.
  
!                      Proc := Entity (Name (Parent (N)));
!                      F    := First_Formal (Proc);
!                      A    := First_Actual (Parent (N));
  
!                      while A /= N loop
!                         Next_Formal (F);
!                         Next_Actual (A);
!                      end loop;
  
!                      if Is_Controlling_Formal (F) then
!                         Temp_Typ := Class_Wide_Type (Typ);
!                      end if;
                    end if;
                 end if;
  
!                Decl :=
!                  Make_Object_Declaration (Loc,
!                    Defining_Identifier => Temp_Obj,
!                    Object_Definition   => New_Occurrence_Of (Temp_Typ, Loc),
!                    Constant_Present    => True,
!                    Expression          => Relocate_Node (N));
!                Set_Assignment_OK (Decl);
  
!                Insert_Actions (N, New_List (Decl));
!                Rewrite (N, New_Occurrence_Of (Temp_Obj, Loc));
!             end;
! 
!          else
!             --  If stack-checking is not enabled, increment serial number
!             --  for internal names, so that subsequent symbols are consistent
!             --  with and without stack-checking.
! 
!             Synchronize_Serial_Number;
! 
!             --  Now we can expand the call with consistent symbol names
! 
!             Expand_Call (N);
!          end if;
  
        --  Normal case, expand the call
  
*************** package body Exp_Ch6 is
*** 2867,2873 ****
     -- Expand_N_Subprogram_Body --
     ------------------------------
  
!    --  Add poll call if ATC polling is enabled
  
     --  Add return statement if last statement in body is not a return
     --  statement (this makes things easier on Gigi which does not want
--- 3083,3090 ----
     -- Expand_N_Subprogram_Body --
     ------------------------------
  
!    --  Add poll call if ATC polling is enabled, unless the body will be
!    --  inlined by the back-end.
  
     --  Add return statement if last statement in body is not a return
     --  statement (this makes things easier on Gigi which does not want
*************** package body Exp_Ch6 is
*** 3026,3032 ****
  
           --  Create new exception handler
  
!          if Restrictions (No_Exception_Handlers) then
              Excep_Handlers := No_List;
  
           else
--- 3243,3249 ----
  
           --  Create new exception handler
  
!          if Restriction_Active (No_Exception_Handlers) then
              Excep_Handlers := No_List;
  
           else
*************** package body Exp_Ch6 is
*** 3096,3109 ****
           L := Statements (Handled_Statement_Sequence (N));
        end if;
  
-       --  Need poll on entry to subprogram if polling enabled. We only
-       --  do this for non-empty subprograms, since it does not seem
-       --  necessary to poll for a dummy null subprogram.
- 
-       if Is_Non_Empty_List (L) then
-          Generate_Poll_Call (First (L));
-       end if;
- 
        --  Find entity for subprogram
  
        Body_Id := Defining_Entity (N);
--- 3313,3318 ----
*************** package body Exp_Ch6 is
*** 3114,3119 ****
--- 3323,3345 ----
           Spec_Id := Body_Id;
        end if;
  
+       --  Need poll on entry to subprogram if polling enabled. We only
+       --  do this for non-empty subprograms, since it does not seem
+       --  necessary to poll for a dummy null subprogram. Do not add polling
+       --  point if calls to this subprogram will be inlined by the back-end,
+       --  to avoid repeated polling points in nested inlinings.
+ 
+       if Is_Non_Empty_List (L) then
+          if Is_Inlined (Spec_Id)
+            and then Front_End_Inlining
+            and then Optimization_Level > 1
+          then
+             null;
+          else
+             Generate_Poll_Call (First (L));
+          end if;
+       end if;
+ 
        --  If this is a Pure function which has any parameters whose root
        --  type is System.Address, reset the Pure indication, since it will
        --  likely cause incorrect code to be generated as the parameter is
*************** package body Exp_Ch6 is
*** 3136,3142 ****
  
           begin
              while Present (F) loop
!                if Is_RTE (Root_Type (Etype (F)), RE_Address) then
                    Set_Is_Pure (Spec_Id, False);
  
                    if Spec_Id /= Body_Id then
--- 3362,3368 ----
  
           begin
              while Present (F) loop
!                if Is_Descendent_Of_Address (Etype (F)) then
                    Set_Is_Pure (Spec_Id, False);
  
                    if Spec_Id /= Body_Id then
*************** package body Exp_Ch6 is
*** 3184,3189 ****
--- 3410,3443 ----
           end;
        end if;
  
+       Scop := Scope (Spec_Id);
+ 
+       --  Add discriminal renamings to protected subprograms.
+       --  Install new discriminals for expansion of the next
+       --  subprogram of this protected type, if any.
+ 
+       if Is_List_Member (N)
+         and then Present (Parent (List_Containing (N)))
+         and then Nkind (Parent (List_Containing (N))) = N_Protected_Body
+       then
+          Add_Discriminal_Declarations
+            (Declarations (N), Scop, Name_uObject, Loc);
+          Add_Private_Declarations (Declarations (N), Scop, Name_uObject, Loc);
+ 
+          --  Associate privals and discriminals with the next protected
+          --  operation body to be expanded. These are used to expand
+          --  references to private data objects and discriminants,
+          --  respectively.
+ 
+          Next_Op := Next_Protected_Operation (N);
+ 
+          if Present (Next_Op) then
+             Dec := Parent (Base_Type (Scop));
+             Set_Privals (Dec, Next_Op, Loc);
+             Set_Discriminals (Dec);
+          end if;
+       end if;
+ 
        --  Clear out statement list for stubbed procedure
  
        if Present (Corresponding_Spec (N)) then
*************** package body Exp_Ch6 is
*** 3201,3208 ****
           end if;
        end if;
  
-       Scop := Scope (Spec_Id);
- 
        --  Returns_By_Ref flag is normally set when the subprogram is frozen
        --  but subprograms with no specs are not frozen
  
--- 3455,3460 ----
*************** package body Exp_Ch6 is
*** 3243,3251 ****
              end loop;
           end if;
  
!       --  For a function, we must deal with the case where there is at
!       --  least one missing return. What we do is to wrap the entire body
!       --  of the function in a block:
  
        --    begin
        --      ...
--- 3495,3503 ----
              end loop;
           end if;
  
!       --  For a function, we must deal with the case where there is at least
!       --  one missing return. What we do is to wrap the entire body of the
!       --  function in a block:
  
        --    begin
        --      ...
*************** package body Exp_Ch6 is
*** 3291,3322 ****
           end;
        end if;
  
-       --  Add discriminal renamings to protected subprograms.
-       --  Install new discriminals for expansion of the next
-       --  subprogram of this protected type, if any.
- 
-       if Is_List_Member (N)
-         and then Present (Parent (List_Containing (N)))
-         and then Nkind (Parent (List_Containing (N))) = N_Protected_Body
-       then
-          Add_Discriminal_Declarations
-            (Declarations (N), Scop, Name_uObject, Loc);
-          Add_Private_Declarations (Declarations (N), Scop, Name_uObject, Loc);
- 
-          --  Associate privals and discriminals with the next protected
-          --  operation body to be expanded. These are used to expand
-          --  references to private data objects and discriminants,
-          --  respectively.
- 
-          Next_Op := Next_Protected_Operation (N);
- 
-          if Present (Next_Op) then
-             Dec := Parent (Base_Type (Scop));
-             Set_Privals (Dec, Next_Op, Loc);
-             Set_Discriminals (Dec);
-          end if;
-       end if;
- 
        --  If subprogram contains a parameterless recursive call, then we may
        --  have an infinite recursion, so see if we can generate code to check
        --  for this possibility if storage checks are not suppressed.
--- 3543,3548 ----
*************** package body Exp_Ch6 is
*** 3413,3426 ****
        Prot_Id   : Entity_Id;
  
     begin
!       --  Deal with case of protected subprogram
  
        if Is_List_Member (N)
          and then Present (Parent (List_Containing (N)))
          and then Nkind (Parent (List_Containing (N))) = N_Protected_Body
          and then Is_Protected_Type (Scop)
        then
!          if No (Protected_Body_Subprogram (Subp)) then
              Prot_Decl :=
                Make_Subprogram_Declaration (Loc,
                  Specification =>
--- 3639,3655 ----
        Prot_Id   : Entity_Id;
  
     begin
!       --  Deal with case of protected subprogram. Do not generate
!       --  protected operation if operation is flagged as eliminated.
  
        if Is_List_Member (N)
          and then Present (Parent (List_Containing (N)))
          and then Nkind (Parent (List_Containing (N))) = N_Protected_Body
          and then Is_Protected_Type (Scop)
        then
!          if No (Protected_Body_Subprogram (Subp))
!            and then not Is_Eliminated (Subp)
!          then
              Prot_Decl :=
                Make_Subprogram_Declaration (Loc,
                  Specification =>
*************** package body Exp_Ch6 is
*** 3505,3511 ****
        if Is_Subprogram (Proc)
          and then Proc /= Corr
        then
!          --  Protected function or procedure.
  
           Set_Entity (Rec, Param);
  
--- 3734,3740 ----
        if Is_Subprogram (Proc)
          and then Proc /= Corr
        then
!          --  Protected function or procedure
  
           Set_Entity (Rec, Param);
  
diff -Nrcpad gcc-3.4.3/gcc/ada/exp_ch7.adb gcc-4.0.0/gcc/ada/exp_ch7.adb
*** gcc-3.4.3/gcc/ada/exp_ch7.adb	Mon Jan  5 15:20:43 2004
--- gcc-4.0.0/gcc/ada/exp_ch7.adb	Wed Dec  8 11:45:51 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Exp_Ch11; use Exp_Ch11;
*** 37,51 ****
  with Exp_Dbug; use Exp_Dbug;
  with Exp_Tss;  use Exp_Tss;
  with Exp_Util; use Exp_Util;
- with Fname;    use Fname;
  with Freeze;   use Freeze;
  with Hostparm; use Hostparm;
- with Lib;      use Lib;
  with Nlists;   use Nlists;
  with Nmake;    use Nmake;
  with Opt;      use Opt;
  with Output;   use Output;
  with Restrict; use Restrict;
  with Rtsfind;  use Rtsfind;
  with Targparm; use Targparm;
  with Sinfo;    use Sinfo;
--- 37,50 ----
  with Exp_Dbug; use Exp_Dbug;
  with Exp_Tss;  use Exp_Tss;
  with Exp_Util; use Exp_Util;
  with Freeze;   use Freeze;
  with Hostparm; use Hostparm;
  with Nlists;   use Nlists;
  with Nmake;    use Nmake;
  with Opt;      use Opt;
  with Output;   use Output;
  with Restrict; use Restrict;
+ with Rident;   use Rident;
  with Rtsfind;  use Rtsfind;
  with Targparm; use Targparm;
  with Sinfo;    use Sinfo;
*************** package body Exp_Ch7 is
*** 131,138 ****
        Is_Master                  : Boolean;
        Is_Protected_Subprogram    : Boolean;
        Is_Task_Allocation_Block   : Boolean;
!       Is_Asynchronous_Call_Block : Boolean)
!       return      Node_Id;
     --  Expand a the clean-up procedure for controlled and/or transient
     --  block, and/or task master or task body, or blocks used to
     --  implement task allocation or asynchronous entry calls, or
--- 130,136 ----
        Is_Master                  : Boolean;
        Is_Protected_Subprogram    : Boolean;
        Is_Task_Allocation_Block   : Boolean;
!       Is_Asynchronous_Call_Block : Boolean) return Node_Id;
     --  Expand a the clean-up procedure for controlled and/or transient
     --  block, and/or task master or task body, or blocks used to
     --  implement task allocation or asynchronous entry calls, or
*************** package body Exp_Ch7 is
*** 154,161 ****
  
     function Make_Transient_Block
       (Loc    : Source_Ptr;
!       Action : Node_Id)
!       return   Node_Id;
     --  Create a transient block whose name is Scope, which is also a
     --  controlled block if Flist is not empty and whose only code is
     --  Action (either a single statement or single declaration).
--- 152,158 ----
  
     function Make_Transient_Block
       (Loc    : Source_Ptr;
!       Action : Node_Id) return Node_Id;
     --  Create a transient block whose name is Scope, which is also a
     --  controlled block if Flist is not empty and whose only code is
     --  Action (either a single statement or single declaration).
*************** package body Exp_Ch7 is
*** 185,192 ****
     function Make_Deep_Proc
       (Prim  : Final_Primitives;
        Typ   : Entity_Id;
!       Stmts : List_Id)
!       return  Node_Id;
     --  This function generates the tree for Deep_Initialize, Deep_Adjust
     --  or Deep_Finalize procedures according to the first parameter,
     --  these procedures operate on the type Typ. The Stmts parameter
--- 182,188 ----
     function Make_Deep_Proc
       (Prim  : Final_Primitives;
        Typ   : Entity_Id;
!       Stmts : List_Id) return Node_Id;
     --  This function generates the tree for Deep_Initialize, Deep_Adjust
     --  or Deep_Finalize procedures according to the first parameter,
     --  these procedures operate on the type Typ. The Stmts parameter
*************** package body Exp_Ch7 is
*** 194,201 ****
  
     function Make_Deep_Array_Body
       (Prim : Final_Primitives;
!       Typ  : Entity_Id)
!       return List_Id;
     --  This function generates the list of statements for implementing
     --  Deep_Initialize, Deep_Adjust or Deep_Finalize procedures
     --  according to the first parameter, these procedures operate on the
--- 190,196 ----
  
     function Make_Deep_Array_Body
       (Prim : Final_Primitives;
!       Typ  : Entity_Id) return List_Id;
     --  This function generates the list of statements for implementing
     --  Deep_Initialize, Deep_Adjust or Deep_Finalize procedures
     --  according to the first parameter, these procedures operate on the
*************** package body Exp_Ch7 is
*** 203,210 ****
  
     function Make_Deep_Record_Body
       (Prim : Final_Primitives;
!       Typ  : Entity_Id)
!       return List_Id;
     --  This function generates the list of statements for implementing
     --  Deep_Initialize, Deep_Adjust or Deep_Finalize procedures
     --  according to the first parameter, these procedures operate on the
--- 198,204 ----
  
     function Make_Deep_Record_Body
       (Prim : Final_Primitives;
!       Typ  : Entity_Id) return List_Id;
     --  This function generates the list of statements for implementing
     --  Deep_Initialize, Deep_Adjust or Deep_Finalize procedures
     --  according to the first parameter, these procedures operate on the
*************** package body Exp_Ch7 is
*** 231,238 ****
     function Convert_View
       (Proc : Entity_Id;
        Arg  : Node_Id;
!       Ind  : Pos := 1)
!       return Node_Id;
     --  Proc is one of the Initialize/Adjust/Finalize operations, and
     --  Arg is the argument being passed to it. Ind indicates which
     --  formal of procedure Proc we are trying to match. This function
--- 225,231 ----
     function Convert_View
       (Proc : Entity_Id;
        Arg  : Node_Id;
!       Ind  : Pos := 1) return Node_Id;
     --  Proc is one of the Initialize/Adjust/Finalize operations, and
     --  Arg is the argument being passed to it. Ind indicates which
     --  formal of procedure Proc we are trying to match. This function
*************** package body Exp_Ch7 is
*** 504,511 ****
     function Cleanup_Array
       (N    : Node_Id;
        Obj  : Node_Id;
!       Typ  : Entity_Id)
!       return List_Id
     is
        Loc        : constant Source_Ptr := Sloc (N);
        Index_List : constant List_Id := New_List;
--- 497,503 ----
     function Cleanup_Array
       (N    : Node_Id;
        Obj  : Node_Id;
!       Typ  : Entity_Id) return List_Id
     is
        Loc        : constant Source_Ptr := Sloc (N);
        Index_List : constant List_Id := New_List;
*************** package body Exp_Ch7 is
*** 515,521 ****
        --  of a single component of the array.
  
        function Free_One_Dimension (Dim : Int) return List_Id;
!       --  Generate a loop over one dimension of the array.
  
        --------------------
        -- Free_Component --
--- 507,513 ----
        --  of a single component of the array.
  
        function Free_One_Dimension (Dim : Int) return List_Id;
!       --  Generate a loop over one dimension of the array
  
        --------------------
        -- Free_Component --
*************** package body Exp_Ch7 is
*** 602,609 ****
     function Cleanup_Record
       (N    : Node_Id;
        Obj  : Node_Id;
!       Typ  : Entity_Id)
!       return List_Id
     is
        Loc   : constant Source_Ptr := Sloc (N);
        Tsk   : Node_Id;
--- 594,600 ----
     function Cleanup_Record
       (N    : Node_Id;
        Obj  : Node_Id;
!       Typ  : Entity_Id) return List_Id
     is
        Loc   : constant Source_Ptr := Sloc (N);
        Tsk   : Node_Id;
*************** package body Exp_Ch7 is
*** 672,685 ****
        return Stmts;
     end Cleanup_Record;
  
!    -------------------------------
!    --  Cleanup_Protected_Object --
!    -------------------------------
  
     function Cleanup_Protected_Object
!      (N    : Node_Id;
!       Ref  : Node_Id)
!       return Node_Id
     is
        Loc : constant Source_Ptr := Sloc (N);
  
--- 663,675 ----
        return Stmts;
     end Cleanup_Record;
  
!    ------------------------------
!    -- Cleanup_Protected_Object --
!    ------------------------------
  
     function Cleanup_Protected_Object
!      (N   : Node_Id;
!       Ref : Node_Id) return Node_Id
     is
        Loc : constant Source_Ptr := Sloc (N);
  
*************** package body Exp_Ch7 is
*** 707,712 ****
--- 697,703 ----
                or else Ekind (E) = E_Constant)
             and then Has_Simple_Protected_Object (Etype (E))
             and then not Has_Task (Etype (E))
+            and then Nkind (Parent (E)) /= N_Object_Renaming_Declaration
           then
              declare
                 Typ : constant Entity_Id := Etype (E);
*************** package body Exp_Ch7 is
*** 730,736 ****
           Next_Entity (E);
        end loop;
  
!       --   Analyze inserted cleanup statements.
  
        if Present (Stmt) then
           Stmt := Next (Stmt);
--- 721,727 ----
           Next_Entity (E);
        end loop;
  
!       --   Analyze inserted cleanup statements
  
        if Present (Stmt) then
           Stmt := Next (Stmt);
*************** package body Exp_Ch7 is
*** 747,755 ****
     ------------------
  
     function Cleanup_Task
!      (N    : Node_Id;
!       Ref  : Node_Id)
!       return Node_Id
     is
        Loc  : constant Source_Ptr := Sloc (N);
     begin
--- 738,745 ----
     ------------------
  
     function Cleanup_Task
!      (N   : Node_Id;
!       Ref : Node_Id) return Node_Id
     is
        Loc  : constant Source_Ptr := Sloc (N);
     begin
*************** package body Exp_Ch7 is
*** 817,844 ****
     begin
        if Is_Derived_Type (Typ)
          and then Comes_From_Source (E)
!         and then Is_Overriding_Operation (E)
!         and then
!           (not Is_Predefined_File_Name
!                      (Unit_File_Name (Get_Source_Unit (Root_Type (Typ)))))
        then
!          --  We know that the explicit operation on the type overrode
           --  the inherited operation of the parent, and that the derivation
           --  is from a private type that is not visibly controlled.
  
           Parent_Type := Etype (Typ);
           Op := Find_Prim_Op (Parent_Type, Name_Of (Prim));
  
!          if Present (Op)
!             and then Is_Hidden (Op)
!             and then Scope (Scope (Typ)) /= Scope (Op)
!             and then not In_Open_Scopes (Scope (Typ))
!          then
!             --  If the parent operation is not visible, and the derived
!             --  type is not declared in a child unit, then the explicit
!             --  operation does not override, and we must use the operation
!             --  of the parent.
! 
              E := Op;
  
              --  Wrap the object to be initialized into the proper
--- 807,822 ----
     begin
        if Is_Derived_Type (Typ)
          and then Comes_From_Source (E)
!         and then not Is_Overriding_Operation (E)
        then
!          --  We know that the explicit operation on the type does not override
           --  the inherited operation of the parent, and that the derivation
           --  is from a private type that is not visibly controlled.
  
           Parent_Type := Etype (Typ);
           Op := Find_Prim_Op (Parent_Type, Name_Of (Prim));
  
!          if Present (Op) then
              E := Op;
  
              --  Wrap the object to be initialized into the proper
*************** package body Exp_Ch7 is
*** 864,875 ****
        --  If type is not frozen yet, check explicitly among its components,
        --  because flag is not necessarily set.
  
!       ------------------------------------
!       --  Has_Some_Controlled_Component --
!       ------------------------------------
  
!       function Has_Some_Controlled_Component (Rec : Entity_Id)
!         return Boolean
        is
           Comp : Entity_Id;
  
--- 842,853 ----
        --  If type is not frozen yet, check explicitly among its components,
        --  because flag is not necessarily set.
  
!       -----------------------------------
!       -- Has_Some_Controlled_Component --
!       -----------------------------------
  
!       function Has_Some_Controlled_Component
!         (Rec : Entity_Id) return Boolean
        is
           Comp : Entity_Id;
  
*************** package body Exp_Ch7 is
*** 914,920 ****
  
        return (Is_Class_Wide_Type (T)
                  and then not In_Finalization_Root (T)
!                 and then not Restrictions (No_Finalization))
          or else Is_Controlled (T)
          or else Has_Some_Controlled_Component (T)
          or else (Is_Concurrent_Type (T)
--- 892,898 ----
  
        return (Is_Class_Wide_Type (T)
                  and then not In_Finalization_Root (T)
!                 and then not Restriction_Active (No_Finalization))
          or else Is_Controlled (T)
          or else Has_Some_Controlled_Component (T)
          or else (Is_Concurrent_Type (T)
*************** package body Exp_Ch7 is
*** 978,985 ****
     function Convert_View
       (Proc : Entity_Id;
        Arg  : Node_Id;
!       Ind  : Pos := 1)
!       return Node_Id
     is
        Fent : Entity_Id := First_Entity (Proc);
        Ftyp : Entity_Id;
--- 956,962 ----
     function Convert_View
       (Proc : Entity_Id;
        Arg  : Node_Id;
!       Ind  : Pos := 1) return Node_Id
     is
        Fent : Entity_Id := First_Entity (Proc);
        Ftyp : Entity_Id;
*************** package body Exp_Ch7 is
*** 1073,1149 ****
        if No (Wrap_Node) then
           null;
  
!       elsif Nkind (Wrap_Node) = N_Iteration_Scheme then
! 
!          --  Create a declaration followed by an assignment, so that
!          --  the assignment can have its own transient scope.
!          --  We generate the equivalent of:
! 
!          --  type Ptr is access all expr_type;
!          --  Var : Ptr;
!          --  begin
!          --     Var := Expr'reference;
!          --  end;
! 
!          --  This closely resembles what is done in Remove_Side_Effect,
!          --  but it has to be done here, before the analysis of the call
!          --  is completed.
! 
!          declare
!             Ptr_Typ : constant Entity_Id :=
!                         Make_Defining_Identifier (Loc,
!                           Chars => New_Internal_Name ('A'));
!             Ptr     : constant Entity_Id :=
!                         Make_Defining_Identifier (Loc,
!                           Chars => New_Internal_Name ('T'));
! 
!             Expr_Type    : constant Entity_Id := Etype (N);
!             New_Expr     : constant Node_Id := Relocate_Node (N);
!             Decl         : Node_Id;
!             Ptr_Typ_Decl : Node_Id;
!             Stmt         : Node_Id;
! 
!          begin
!             Ptr_Typ_Decl :=
!               Make_Full_Type_Declaration (Loc,
!                 Defining_Identifier => Ptr_Typ,
!                 Type_Definition =>
!                   Make_Access_To_Object_Definition (Loc,
!                     All_Present => True,
!                     Subtype_Indication =>
!                       New_Reference_To (Expr_Type, Loc)));
! 
!             Decl :=
!               Make_Object_Declaration (Loc,
!                  Defining_Identifier => Ptr,
!                  Object_Definition => New_Occurrence_Of (Ptr_Typ, Loc));
! 
!             Set_Etype (Ptr, Ptr_Typ);
!             Stmt :=
!                Make_Assignment_Statement (Loc,
!                   Name => New_Occurrence_Of (Ptr, Loc),
!                   Expression => Make_Reference (Loc, New_Expr));
! 
!             Set_Analyzed (New_Expr, False);
! 
!             Insert_List_Before_And_Analyze
!               (Parent (Wrap_Node),
!                  New_List (
!                    Ptr_Typ_Decl,
!                    Decl,
!                    Make_Block_Statement (Loc,
!                      Handled_Statement_Sequence =>
!                        Make_Handled_Sequence_Of_Statements (Loc,
!                          New_List (Stmt)))));
! 
!             Rewrite (N,
!               Make_Explicit_Dereference (Loc,
!                 Prefix => New_Reference_To (Ptr, Loc)));
!             Analyze_And_Resolve (N, Expr_Type);
! 
!          end;
  
!       --  Transient scope is required
  
        else
           New_Scope (New_Internal_Entity (E_Block, Current_Scope, Loc, 'B'));
--- 1050,1062 ----
        if No (Wrap_Node) then
           null;
  
!       --  If the node to wrap is an iteration_scheme, the expression is
!       --  one of the bounds, and the expansion will make an explicit
!       --  declaration for it (see Analyze_Iteration_Scheme, sem_ch5.adb),
!       --  so do not apply any transformations here.
  
!       elsif Nkind (Wrap_Node) = N_Iteration_Scheme then
!          null;
  
        else
           New_Scope (New_Internal_Entity (E_Block, Current_Scope, Loc, 'B'));
*************** package body Exp_Ch7 is
*** 1193,1198 ****
--- 1106,1112 ----
        Mark      : Entity_Id := Empty;
        New_Decls : constant List_Id := New_List;
        Blok      : Node_Id;
+       End_Lab   : Node_Id;
        Wrapped   : Boolean;
        Chain     : Entity_Id := Empty;
        Decl      : Node_Id;
*************** package body Exp_Ch7 is
*** 1320,1330 ****
--- 1234,1249 ----
        --  exception handlers and an AT END call in the same scope.
  
        if Present (Exception_Handlers (Handled_Statement_Sequence (N))) then
+ 
+          --  Preserve end label to provide proper cross-reference information
+ 
+          End_Lab := End_Label (Handled_Statement_Sequence (N));
           Blok :=
             Make_Block_Statement (Loc,
               Handled_Statement_Sequence => Handled_Statement_Sequence (N));
           Set_Handled_Statement_Sequence (N,
             Make_Handled_Sequence_Of_Statements (Loc, New_List (Blok)));
+          Set_End_Label (Handled_Statement_Sequence (N), End_Lab);
           Wrapped := True;
  
        --  Otherwise we do not wrap
*************** package body Exp_Ch7 is
*** 1393,1399 ****
        Set_Declarations (N, New_Decls);
        Analyze_Declarations (New_Decls);
  
!       --  The At_End call is attached to the sequence of statements.
  
        declare
           HSS : Node_Id;
--- 1312,1318 ----
        Set_Declarations (N, New_Decls);
        Analyze_Declarations (New_Decls);
  
!       --  The At_End call is attached to the sequence of statements
  
        declare
           HSS : Node_Id;
*************** package body Exp_Ch7 is
*** 1436,1444 ****
        Len_Ref      : Node_Id := Empty;
  
        function Last_Array_Component
!         (Ref :  Node_Id;
!          Typ :  Entity_Id)
!          return Node_Id;
        --  Creates a reference to the last component of the array object
        --  designated by Ref whose type is Typ.
  
--- 1355,1362 ----
        Len_Ref      : Node_Id := Empty;
  
        function Last_Array_Component
!         (Ref : Node_Id;
!          Typ : Entity_Id) return Node_Id;
        --  Creates a reference to the last component of the array object
        --  designated by Ref whose type is Typ.
  
*************** package body Exp_Ch7 is
*** 1447,1455 ****
        --------------------------
  
        function Last_Array_Component
!         (Ref :  Node_Id;
!          Typ :  Entity_Id)
!          return Node_Id
        is
           Index_List : constant List_Id := New_List;
  
--- 1365,1372 ----
        --------------------------
  
        function Last_Array_Component
!         (Ref : Node_Id;
!          Typ : Entity_Id) return Node_Id
        is
           Index_List : constant List_Id := New_List;
  
*************** package body Exp_Ch7 is
*** 1697,1705 ****
     ---------------------
  
     function Find_Final_List
!      (E    : Entity_Id;
!       Ref  : Node_Id := Empty)
!       return Node_Id
     is
        Loc : constant Source_Ptr := Sloc (Ref);
        S   : Entity_Id;
--- 1614,1621 ----
     ---------------------
  
     function Find_Final_List
!      (E   : Entity_Id;
!       Ref : Node_Id := Empty) return Node_Id
     is
        Loc : constant Source_Ptr := Sloc (Ref);
        S   : Entity_Id;
*************** package body Exp_Ch7 is
*** 2010,2025 ****
     ------------------------------------
  
     procedure Insert_Actions_In_Scope_Around (N : Node_Id) is
!       SE : Scope_Stack_Entry renames Scope_Stack.Table (Scope_Stack.Last);
  
     begin
        if Present (SE.Actions_To_Be_Wrapped_Before) then
!          Insert_List_Before (N, SE.Actions_To_Be_Wrapped_Before);
           SE.Actions_To_Be_Wrapped_Before := No_List;
        end if;
  
        if Present (SE.Actions_To_Be_Wrapped_After) then
!          Insert_List_After (N, SE.Actions_To_Be_Wrapped_After);
           SE.Actions_To_Be_Wrapped_After := No_List;
        end if;
     end Insert_Actions_In_Scope_Around;
--- 1926,1953 ----
     ------------------------------------
  
     procedure Insert_Actions_In_Scope_Around (N : Node_Id) is
!       SE     : Scope_Stack_Entry renames Scope_Stack.Table (Scope_Stack.Last);
!       Target : Node_Id;
  
     begin
+       --  If the node to be wrapped is the triggering alternative of an
+       --  asynchronous select, it is not part of a statement list. The
+       --  actions must be inserted before the Select itself, which is
+       --  part of some list of statements.
+ 
+       if Nkind (Parent (Node_To_Be_Wrapped)) = N_Triggering_Alternative then
+          Target := Parent (Parent (Node_To_Be_Wrapped));
+       else
+          Target := N;
+       end if;
+ 
        if Present (SE.Actions_To_Be_Wrapped_Before) then
!          Insert_List_Before (Target, SE.Actions_To_Be_Wrapped_Before);
           SE.Actions_To_Be_Wrapped_Before := No_List;
        end if;
  
        if Present (SE.Actions_To_Be_Wrapped_After) then
!          Insert_List_After (Target, SE.Actions_To_Be_Wrapped_After);
           SE.Actions_To_Be_Wrapped_After := No_List;
        end if;
     end Insert_Actions_In_Scope_Around;
*************** package body Exp_Ch7 is
*** 2032,2039 ****
       (Ref          : Node_Id;
        Typ          : Entity_Id;
        Flist_Ref    : Node_Id;
!       With_Attach  : Node_Id)
!       return         List_Id
     is
        Loc    : constant Source_Ptr := Sloc (Ref);
        Res    : constant List_Id    := New_List;
--- 1960,1966 ----
       (Ref          : Node_Id;
        Typ          : Entity_Id;
        Flist_Ref    : Node_Id;
!       With_Attach  : Node_Id) return List_Id
     is
        Loc    : constant Source_Ptr := Sloc (Ref);
        Res    : constant List_Id    := New_List;
*************** package body Exp_Ch7 is
*** 2143,2152 ****
     --    System.FI.Attach_To_Final_List (Flist, Ref, Nb_Link)
  
     function Make_Attach_Call
!      (Obj_Ref      : Node_Id;
!       Flist_Ref    : Node_Id;
!       With_Attach  : Node_Id)
!       return Node_Id
     is
        Loc : constant Source_Ptr := Sloc (Obj_Ref);
  
--- 2070,2078 ----
     --    System.FI.Attach_To_Final_List (Flist, Ref, Nb_Link)
  
     function Make_Attach_Call
!      (Obj_Ref     : Node_Id;
!       Flist_Ref   : Node_Id;
!       With_Attach : Node_Id) return Node_Id
     is
        Loc : constant Source_Ptr := Sloc (Obj_Ref);
  
*************** package body Exp_Ch7 is
*** 2182,2189 ****
        Is_Master                  : Boolean;
        Is_Protected_Subprogram    : Boolean;
        Is_Task_Allocation_Block   : Boolean;
!       Is_Asynchronous_Call_Block : Boolean)
!       return      Node_Id
     is
        Loc  : constant Source_Ptr := Sloc (Clean);
        Stmt : constant List_Id    := New_List;
--- 2108,2114 ----
        Is_Master                  : Boolean;
        Is_Protected_Subprogram    : Boolean;
        Is_Task_Allocation_Block   : Boolean;
!       Is_Asynchronous_Call_Block : Boolean) return Node_Id
     is
        Loc  : constant Source_Ptr := Sloc (Clean);
        Stmt : constant List_Id    := New_List;
*************** package body Exp_Ch7 is
*** 2192,2198 ****
        Spec         : Node_Id;
        Name         : Node_Id;
        Param        : Node_Id;
-       Unlock       : Node_Id;
        Param_Type   : Entity_Id;
        Pid          : Entity_Id := Empty;
        Cancel_Param : Entity_Id;
--- 2117,2122 ----
*************** package body Exp_Ch7 is
*** 2207,2213 ****
           end if;
  
        elsif Is_Master then
!          if Restrictions (No_Task_Hierarchy) = False then
              Append_To (Stmt, Build_Runtime_Call (Loc, RE_Complete_Master));
           end if;
  
--- 2131,2137 ----
           end if;
  
        elsif Is_Master then
!          if Restriction_Active (No_Task_Hierarchy) = False then
              Append_To (Stmt, Build_Runtime_Call (Loc, RE_Complete_Master));
           end if;
  
*************** package body Exp_Ch7 is
*** 2222,2228 ****
           --  NOTE: This cleanup handler references _object, a parameter
           --        to the procedure.
  
!          --  Find the _object parameter representing the protected object.
  
           Spec := Parent (Corresponding_Spec (N));
  
--- 2146,2152 ----
           --  NOTE: This cleanup handler references _object, a parameter
           --        to the procedure.
  
!          --  Find the _object parameter representing the protected object
  
           Spec := Parent (Corresponding_Spec (N));
  
*************** package body Exp_Ch7 is
*** 2253,2259 ****
             and then Has_Entries (Pid)
           then
              if Abort_Allowed
!               or else Restrictions (No_Entry_Queue) = False
                or else Number_Entries (Pid) > 1
              then
                 Name := New_Reference_To (RTE (RE_Service_Entries), Loc);
--- 2177,2183 ----
             and then Has_Entries (Pid)
           then
              if Abort_Allowed
!               or else Restriction_Active (No_Entry_Queue) = False
                or else Number_Entries (Pid) > 1
              then
                 Name := New_Reference_To (RTE (RE_Service_Entries), Loc);
*************** package body Exp_Ch7 is
*** 2273,2322 ****
                          Selector_Name =>
                            Make_Identifier (Loc, Name_uObject)),
                      Attribute_Name => Name_Unchecked_Access))));
-          end if;
  
!          --  Unlock (_object._object'Access);
  
!          --  _object is the record used to implement the protected object.
!          --  It is a parameter to the protected subprogram.
  
!          --  If the protected object is controlled (i.e it has entries or
!          --  needs finalization for interrupt handling), call Unlock_Entries,
!          --  except if the protected object follows the ravenscar profile, in
!          --  which case call Unlock_Entry, otherwise call the simplified
!          --  version, Unlock.
  
!          if Has_Entries (Pid)
!            or else Has_Interrupt_Handler (Pid)
!            or else (Has_Attach_Handler (Pid) and then not Restricted_Profile)
!          then
!             if Abort_Allowed
!               or else Restrictions (No_Entry_Queue) = False
!               or else Number_Entries (Pid) > 1
              then
!                Unlock := New_Reference_To (RTE (RE_Unlock_Entries), Loc);
              else
!                Unlock := New_Reference_To (RTE (RE_Unlock_Entry), Loc);
              end if;
  
!          else
!             Unlock := New_Reference_To (RTE (RE_Unlock), Loc);
           end if;
  
-          Append_To (Stmt,
-            Make_Procedure_Call_Statement (Loc,
-              Name => Unlock,
-              Parameter_Associations => New_List (
-                Make_Attribute_Reference (Loc,
-                  Prefix =>
-                    Make_Selected_Component (Loc,
-                      Prefix =>
-                        New_Reference_To (Defining_Identifier (Param), Loc),
-                      Selector_Name =>
-                        Make_Identifier (Loc, Name_uObject)),
-                  Attribute_Name => Name_Unchecked_Access))));
- 
           if Abort_Allowed then
              --  Abort_Undefer;
  
              Append_To (Stmt,
--- 2197,2249 ----
                          Selector_Name =>
                            Make_Identifier (Loc, Name_uObject)),
                      Attribute_Name => Name_Unchecked_Access))));
  
!          else
!             --  Unlock (_object._object'Access);
  
!             --  object is the record used to implement the protected object.
!             --  It is a parameter to the protected subprogram.
  
!             --  If the protected object is controlled (i.e it has entries or
!             --  needs finalization for interrupt handling), call
!             --  Unlock_Entries, except if the protected object follows the
!             --  ravenscar profile, in which case call Unlock_Entry, otherwise
!             --  call the simplified version, Unlock.
  
!             if Has_Entries (Pid)
!               or else Has_Interrupt_Handler (Pid)
!               or else (Has_Attach_Handler (Pid)
!                          and then not Restricted_Profile)
              then
!                if Abort_Allowed
!                  or else Restriction_Active (No_Entry_Queue) = False
!                  or else Number_Entries (Pid) > 1
!                then
!                   Name := New_Reference_To (RTE (RE_Unlock_Entries), Loc);
!                else
!                   Name := New_Reference_To (RTE (RE_Unlock_Entry), Loc);
!                end if;
! 
              else
!                Name := New_Reference_To (RTE (RE_Unlock), Loc);
              end if;
  
!             Append_To (Stmt,
!               Make_Procedure_Call_Statement (Loc,
!                 Name => Name,
!                 Parameter_Associations => New_List (
!                   Make_Attribute_Reference (Loc,
!                     Prefix =>
!                       Make_Selected_Component (Loc,
!                         Prefix =>
!                           New_Reference_To (Defining_Identifier (Param), Loc),
!                         Selector_Name =>
!                           Make_Identifier (Loc, Name_uObject)),
!                     Attribute_Name => Name_Unchecked_Access))));
           end if;
  
           if Abort_Allowed then
+ 
              --  Abort_Undefer;
  
              Append_To (Stmt,
*************** package body Exp_Ch7 is
*** 2487,2494 ****
  
     function Make_Deep_Array_Body
       (Prim : Final_Primitives;
!       Typ  : Entity_Id)
!       return List_Id
     is
        Loc : constant Source_Ptr := Sloc (Typ);
  
--- 2414,2420 ----
  
     function Make_Deep_Array_Body
       (Prim : Final_Primitives;
!       Typ  : Entity_Id) return List_Id
     is
        Loc : constant Source_Ptr := Sloc (Typ);
  
*************** package body Exp_Ch7 is
*** 2598,2605 ****
     function Make_Deep_Proc
       (Prim  : Final_Primitives;
        Typ   : Entity_Id;
!       Stmts : List_Id)
!       return Entity_Id
     is
        Loc       : constant Source_Ptr := Sloc (Typ);
        Formals   : List_Id;
--- 2524,2530 ----
     function Make_Deep_Proc
       (Prim  : Final_Primitives;
        Typ   : Entity_Id;
!       Stmts : List_Id) return Entity_Id
     is
        Loc       : constant Source_Ptr := Sloc (Typ);
        Formals   : List_Id;
*************** package body Exp_Ch7 is
*** 2674,2681 ****
  
     function Make_Deep_Record_Body
       (Prim : Final_Primitives;
!       Typ  : Entity_Id)
!       return List_Id
     is
        Loc            : constant Source_Ptr := Sloc (Typ);
        Controller_Typ : Entity_Id;
--- 2599,2605 ----
  
     function Make_Deep_Record_Body
       (Prim : Final_Primitives;
!       Typ  : Entity_Id) return List_Id
     is
        Loc            : constant Source_Ptr := Sloc (Typ);
        Controller_Typ : Entity_Id;
*************** package body Exp_Ch7 is
*** 2777,2784 ****
     function Make_Final_Call
       (Ref         : Node_Id;
        Typ         : Entity_Id;
!       With_Detach : Node_Id)
!       return        List_Id
     is
        Loc   : constant Source_Ptr := Sloc (Ref);
        Res   : constant List_Id    := New_List;
--- 2701,2707 ----
     function Make_Final_Call
       (Ref         : Node_Id;
        Typ         : Entity_Id;
!       With_Detach : Node_Id) return List_Id
     is
        Loc   : constant Source_Ptr := Sloc (Ref);
        Res   : constant List_Id    := New_List;
*************** package body Exp_Ch7 is
*** 2903,2910 ****
       (Ref          : Node_Id;
        Typ          : Entity_Id;
        Flist_Ref    : Node_Id;
!       With_Attach  : Node_Id)
!       return         List_Id
     is
        Loc     : constant Source_Ptr := Sloc (Ref);
        Is_Conc : Boolean;
--- 2826,2832 ----
       (Ref          : Node_Id;
        Typ          : Entity_Id;
        Flist_Ref    : Node_Id;
!       With_Attach  : Node_Id) return List_Id
     is
        Loc     : constant Source_Ptr := Sloc (Ref);
        Is_Conc : Boolean;
*************** package body Exp_Ch7 is
*** 3022,3029 ****
  
     function Make_Transient_Block
       (Loc    : Source_Ptr;
!       Action : Node_Id)
!       return   Node_Id
     is
        Flist  : constant Entity_Id := Finalization_Chain_Entity (Current_Scope);
        Decls  : constant List_Id   := New_List;
--- 2944,2950 ----
  
     function Make_Transient_Block
       (Loc    : Source_Ptr;
!       Action : Node_Id) return Node_Id
     is
        Flist  : constant Entity_Id := Finalization_Chain_Entity (Current_Scope);
        Decls  : constant List_Id   := New_List;
diff -Nrcpad gcc-3.4.3/gcc/ada/exp_ch7.ads gcc-4.0.0/gcc/ada/exp_ch7.ads
*** gcc-3.4.3/gcc/ada/exp_ch7.ads	Tue Oct 21 13:41:59 2003
--- gcc-4.0.0/gcc/ada/exp_ch7.ads	Mon Jan  3 15:38:00 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Exp_Ch7 is
*** 31,39 ****
     procedure Expand_N_Package_Body        (N : Node_Id);
     procedure Expand_N_Package_Declaration (N : Node_Id);
  
!    ------------------------------
!    --  Finalization Management --
!    ------------------------------
  
     function In_Finalization_Root (E : Entity_Id) return Boolean;
     --  True if current scope is in package System.Finalization_Root. Used
--- 31,39 ----
     procedure Expand_N_Package_Body        (N : Node_Id);
     procedure Expand_N_Package_Declaration (N : Node_Id);
  
!    -----------------------------
!    -- Finalization Management --
!    -----------------------------
  
     function In_Finalization_Root (E : Entity_Id) return Boolean;
     --  True if current scope is in package System.Finalization_Root. Used
*************** package Exp_Ch7 is
*** 61,75 ****
     --  True if T potentially needs finalization actions
  
     function Find_Final_List
!      (E    : Entity_Id;
!       Ref  : Node_Id := Empty)
!       return Node_Id;
!       --  E is an entity representing a controlled object, a controlled type
!       --  or a scope. If Ref is not empty, it is a reference to a controlled
!       --  record, the closest Final list is in the controller component of
!       --  the record containing Ref otherwise this function returns a
!       --  reference to the final list attached to the closest dynamic scope
!       --  (that can be E itself) creating this final list if necessary.
  
     function Has_New_Controlled_Component (E : Entity_Id) return Boolean;
     --  E is a type entity. Give the same resul as Has_Controlled_Component
--- 61,74 ----
     --  True if T potentially needs finalization actions
  
     function Find_Final_List
!      (E   : Entity_Id;
!       Ref : Node_Id := Empty) return Node_Id;
!    --  E is an entity representing a controlled object, a controlled type
!    --  or a scope. If Ref is not empty, it is a reference to a controlled
!    --  record, the closest Final list is in the controller component of
!    --  the record containing Ref otherwise this function returns a
!    --  reference to the final list attached to the closest dynamic scope
!    --  (that can be E itself) creating this final list if necessary.
  
     function Has_New_Controlled_Component (E : Entity_Id) return Boolean;
     --  E is a type entity. Give the same resul as Has_Controlled_Component
*************** package Exp_Ch7 is
*** 77,86 ****
     --  latest extension contains a controlled component.
  
     function Make_Attach_Call
!      (Obj_Ref      : Node_Id;
!       Flist_Ref    : Node_Id;
!       With_Attach  : Node_Id)
!       return         Node_Id;
     --  Attach the referenced object to the referenced Final Chain
     --  'Flist_Ref' With_Attach is an expression of type Short_Short_Integer
     --  which can be either '0' to signify no attachment, '1' for
--- 76,84 ----
     --  latest extension contains a controlled component.
  
     function Make_Attach_Call
!      (Obj_Ref     : Node_Id;
!       Flist_Ref   : Node_Id;
!       With_Attach : Node_Id) return Node_Id;
     --  Attach the referenced object to the referenced Final Chain
     --  'Flist_Ref' With_Attach is an expression of type Short_Short_Integer
     --  which can be either '0' to signify no attachment, '1' for
*************** package Exp_Ch7 is
*** 88,104 ****
     --  doubly linked list.
  
     function Make_Init_Call
!      (Ref          : Node_Id;
!       Typ          : Entity_Id;
!       Flist_Ref    : Node_Id;
!       With_Attach  : Node_Id)
!       return         List_Id;
     --  Ref is an expression (with no-side effect and is not required to
     --  have been previously analyzed) that references the object to be
     --  initialized. Typ is the expected type of Ref, which is a controlled
     --  type (Is_Controlled) or a type with controlled components
     --  (Has_Controlled). With_Attach is an integer expression representing
!    --  the level of attachment, see Attach_To_Final_Lists' NB_Link param
     --  documentation in s-finimp.ads.
     --
     --  This function will generate the appropriate calls to make
--- 86,101 ----
     --  doubly linked list.
  
     function Make_Init_Call
!      (Ref         : Node_Id;
!       Typ         : Entity_Id;
!       Flist_Ref   : Node_Id;
!       With_Attach : Node_Id) return List_Id;
     --  Ref is an expression (with no-side effect and is not required to
     --  have been previously analyzed) that references the object to be
     --  initialized. Typ is the expected type of Ref, which is a controlled
     --  type (Is_Controlled) or a type with controlled components
     --  (Has_Controlled). With_Attach is an integer expression representing
!    --  the level of attachment, see Attach_To_Final_List's Nb_Link param
     --  documentation in s-finimp.ads.
     --
     --  This function will generate the appropriate calls to make
*************** package Exp_Ch7 is
*** 108,124 ****
     --  caller, the details are in the body.
  
     function Make_Adjust_Call
!      (Ref          : Node_Id;
!       Typ          : Entity_Id;
!       Flist_Ref    : Node_Id;
!       With_Attach  : Node_Id)
!       return         List_Id;
     --  Ref is an expression (with no-side effect and is not required to
     --  have been previously analyzed) that references the object to be
     --  adjusted. Typ is the expected type of Ref, which is a controlled
     --  type (Is_Controlled) or a type with controlled components
     --  (Has_Controlled).  With_Attach is an integer expression representing
!    --  the level of attachment, see Attach_To_Final_Lists' NB_Link param
     --  documentation in s-finimp.ads.
     --
     --  This function will generate the appropriate calls to make
--- 105,120 ----
     --  caller, the details are in the body.
  
     function Make_Adjust_Call
!      (Ref         : Node_Id;
!       Typ         : Entity_Id;
!       Flist_Ref   : Node_Id;
!       With_Attach : Node_Id) return List_Id;
     --  Ref is an expression (with no-side effect and is not required to
     --  have been previously analyzed) that references the object to be
     --  adjusted. Typ is the expected type of Ref, which is a controlled
     --  type (Is_Controlled) or a type with controlled components
     --  (Has_Controlled).  With_Attach is an integer expression representing
!    --  the level of attachment, see Attach_To_Final_List's Nb_Link param
     --  documentation in s-finimp.ads.
     --
     --  This function will generate the appropriate calls to make
*************** package Exp_Ch7 is
*** 132,147 ****
     function Make_Final_Call
       (Ref         : Node_Id;
        Typ         : Entity_Id;
!       With_Detach : Node_Id)
!       return        List_Id;
     --  Ref is an expression (with no-side effect and is not required
     --  to have been previously analyzed) that references the object to
     --  be Finalized. Typ is the expected type of Ref, which is a
     --  controlled type (Is_Controlled) or a type with controlled
!    --  components (Has_Controlled). With_Attach is an integer
!    --  expression representing the level of attachment, see
!    --  Attach_To_Final_Lists' NB_Link param documentation in
!    --  s-finimp.ads.
     --
     --  This function will generate the appropriate calls to make
     --  sure that the objects referenced by Ref are finalized. The generated
--- 128,141 ----
     function Make_Final_Call
       (Ref         : Node_Id;
        Typ         : Entity_Id;
!       With_Detach : Node_Id) return List_Id;
     --  Ref is an expression (with no-side effect and is not required
     --  to have been previously analyzed) that references the object to
     --  be Finalized. Typ is the expected type of Ref, which is a
     --  controlled type (Is_Controlled) or a type with controlled
!    --  components (Has_Controlled). With_Detach is a boolean expression
!    --  indicating whether to detach the controlled object from whatever
!    --  finalization list it is currently attached to.
     --
     --  This function will generate the appropriate calls to make
     --  sure that the objects referenced by Ref are finalized. The generated
*************** package Exp_Ch7 is
*** 161,191 ****
     --------------------------------------------
  
     function Cleanup_Array
!      (N    : Node_Id;
!       Obj  : Node_Id;
!       Typ  : Entity_Id)
!       return List_Id;
     --  Generate loops to finalize any tasks or simple protected objects
     --  that are subcomponents of an array.
  
     function Cleanup_Protected_Object
!      (N    : Node_Id;
!       Ref  : Node_Id)
!       return Node_Id;
     --  Generate code to finalize a protected object without entries.
  
     function Cleanup_Record
!      (N    : Node_Id;
!       Obj  : Node_Id;
!       Typ  : Entity_Id)
!       return List_Id;
     --  For each subcomponent of a record that contains tasks or simple
     --  protected objects, generate the appropriate finalization call.
  
     function Cleanup_Task
!      (N    : Node_Id;
!       Ref  : Node_Id)
!       return Node_Id;
     --  Generate code to finalize a task.
  
     function Has_Simple_Protected_Object (T : Entity_Id) return Boolean;
--- 155,181 ----
     --------------------------------------------
  
     function Cleanup_Array
!      (N   : Node_Id;
!       Obj : Node_Id;
!       Typ : Entity_Id) return List_Id;
     --  Generate loops to finalize any tasks or simple protected objects
     --  that are subcomponents of an array.
  
     function Cleanup_Protected_Object
!      (N   : Node_Id;
!       Ref : Node_Id) return Node_Id;
     --  Generate code to finalize a protected object without entries.
  
     function Cleanup_Record
!      (N   : Node_Id;
!       Obj : Node_Id;
!       Typ : Entity_Id) return List_Id;
     --  For each subcomponent of a record that contains tasks or simple
     --  protected objects, generate the appropriate finalization call.
  
     function Cleanup_Task
!      (N   : Node_Id;
!       Ref : Node_Id) return Node_Id;
     --  Generate code to finalize a task.
  
     function Has_Simple_Protected_Object (T : Entity_Id) return Boolean;
diff -Nrcpad gcc-3.4.3/gcc/ada/exp_ch8.adb gcc-4.0.0/gcc/ada/exp_ch8.adb
*** gcc-3.4.3/gcc/ada/exp_ch8.adb	Tue Oct 21 13:41:59 2003
--- gcc-4.0.0/gcc/ada/exp_ch8.adb	Wed Dec  8 11:49:37 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Exp_Ch8 is
*** 182,188 ****
           elsif K = N_Type_Conversion then
              Evaluate_Name (Expression (Fname));
  
!          --  For a function call, we evaluate the call.
  
           elsif K = N_Function_Call then
              Force_Evaluation (Fname);
--- 182,188 ----
           elsif K = N_Type_Conversion then
              Evaluate_Name (Expression (Fname));
  
!          --  For a function call, we evaluate the call
  
           elsif K = N_Function_Call then
              Force_Evaluation (Fname);
diff -Nrcpad gcc-3.4.3/gcc/ada/exp_ch9.adb gcc-4.0.0/gcc/ada/exp_ch9.adb
*** gcc-3.4.3/gcc/ada/exp_ch9.adb	Tue Jan 13 11:51:31 2004
--- gcc-4.0.0/gcc/ada/exp_ch9.adb	Wed Dec  8 11:49:38 2004
*************** with Nlists;   use Nlists;
*** 43,48 ****
--- 43,49 ----
  with Nmake;    use Nmake;
  with Opt;      use Opt;
  with Restrict; use Restrict;
+ with Rident;   use Rident;
  with Rtsfind;  use Rtsfind;
  with Sem;      use Sem;
  with Sem_Ch6;
*************** with Sem_Util; use Sem_Util;
*** 54,63 ****
  with Sinfo;    use Sinfo;
  with Snames;   use Snames;
  with Stand;    use Stand;
  with Tbuild;   use Tbuild;
  with Types;    use Types;
  with Uintp;    use Uintp;
- with Opt;
  
  package body Exp_Ch9 is
  
--- 55,64 ----
  with Sinfo;    use Sinfo;
  with Snames;   use Snames;
  with Stand;    use Stand;
+ with Targparm; use Targparm;
  with Tbuild;   use Tbuild;
  with Types;    use Types;
  with Uintp;    use Uintp;
  
  package body Exp_Ch9 is
  
*************** package body Exp_Ch9 is
*** 186,198 ****
        Append_Char      : Character := ' ') return Name_Id;
     --  Build a name in the form of Prefix__Selector, with an optional
     --  character appended. This is used for internal subprograms generated
!    --  for operations of protected types, including barrier functions. In
!    --  order to simplify the work of the debugger, the prefix includes the
!    --  characters PT. For the subprograms generated for entry bodies and
!    --  entry barriers, the generated name includes a sequence number that
!    --  makes names unique in the presence of entry overloading. This is
!    --  necessary because entry body procedures and barrier functions all
!    --  have the same signature.
  
     procedure Build_Simple_Entry_Call
       (N       : Node_Id;
--- 187,198 ----
        Append_Char      : Character := ' ') return Name_Id;
     --  Build a name in the form of Prefix__Selector, with an optional
     --  character appended. This is used for internal subprograms generated
!    --  for operations of protected types, including barrier functions.
!    --  For the subprograms generated for entry bodies and entry barriers,
!    --  the generated name includes a sequence number that makes names
!    --  unique in the presence of entry overloading. This is necessary
!    --  because entry body procedures and barrier functions all have the
!    --  same signature.
  
     procedure Build_Simple_Entry_Call
       (N       : Node_Id;
*************** package body Exp_Ch9 is
*** 294,300 ****
        S    : Node_Id;
  
        function Actual_Family_Offset (Hi, Lo : Node_Id) return Node_Id;
!       --  Compute difference between bounds of entry family.
  
        --------------------------
        -- Actual_Family_Offset --
--- 294,300 ----
        S    : Node_Id;
  
        function Actual_Family_Offset (Hi, Lo : Node_Id) return Node_Id;
!       --  Compute difference between bounds of entry family
  
        --------------------------
        -- Actual_Family_Offset --
*************** package body Exp_Ch9 is
*** 358,364 ****
        --  designated one, to which is added the index expression, if this
        --  expression denotes a member of a family.
  
!       --  The following is a place holder for the count of simple entries.
  
        Num := Make_Integer_Literal (Sloc, 1);
  
--- 358,364 ----
        --  designated one, to which is added the index expression, if this
        --  expression denotes a member of a family.
  
!       --  The following is a place holder for the count of simple entries
  
        Num := Make_Integer_Literal (Sloc, 1);
  
*************** package body Exp_Ch9 is
*** 384,390 ****
           Expr := Num;
        end if;
  
!       --  Now add lengths of preceding entries and entry families.
  
        Prev := First_Entity (Ttyp);
  
--- 384,390 ----
           Expr := Num;
        end if;
  
!       --  Now add lengths of preceding entries and entry families
  
        Prev := First_Entity (Ttyp);
  
*************** package body Exp_Ch9 is
*** 411,417 ****
                    Right_Opnd =>
                      Make_Integer_Literal (Sloc, 1)));
  
!          --  Other components are anonymous types to be ignored.
  
           else
              null;
--- 411,417 ----
                    Right_Opnd =>
                      Make_Integer_Literal (Sloc, 1)));
  
!          --  Other components are anonymous types to be ignored
  
           else
              null;
*************** package body Exp_Ch9 is
*** 557,563 ****
  
           elsif Has_Entries (Typ) then
              if Abort_Allowed
!               or else Restrictions (No_Entry_Queue) = False
                or else Number_Entries (Typ) > 1
              then
                 Protection_Type := RE_Protection_Entries;
--- 557,563 ----
  
           elsif Has_Entries (Typ) then
              if Abort_Allowed
!               or else Restriction_Active (No_Entry_Queue) = False
                or else Number_Entries (Typ) > 1
              then
                 Protection_Type := RE_Protection_Entries;
*************** package body Exp_Ch9 is
*** 798,803 ****
--- 798,804 ----
        Loc    : Source_Ptr) return Node_Id
     is
     begin
+       Set_Needs_Debug_Info (Def_Id);
        return Make_Function_Specification (Loc,
          Defining_Unit_Name => Def_Id,
          Parameter_Specifications => New_List (
*************** package body Exp_Ch9 is
*** 989,995 ****
        Siz   : Node_Id := Empty;
  
        procedure Add_If_Clause (Expr : Node_Id);
!       --  Add test for range of current entry.
  
        function Convert_Discriminant_Ref (Bound : Node_Id) return Node_Id;
        --  If a bound of an entry is given by a discriminant, retrieve the
--- 990,996 ----
        Siz   : Node_Id := Empty;
  
        procedure Add_If_Clause (Expr : Node_Id);
!       --  Add test for range of current entry
  
        function Convert_Discriminant_Ref (Bound : Node_Id) return Node_Id;
        --  If a bound of an entry is given by a discriminant, retrieve the
*************** package body Exp_Ch9 is
*** 1007,1017 ****
                         Expression => Make_Integer_Literal (Loc, Index + 1)));
  
        begin
!          --  Index for current entry body.
  
           Index := Index + 1;
  
!          --  Compute total length of entry queues so far.
  
           if No (Siz) then
              Siz := Expr;
--- 1008,1018 ----
                         Expression => Make_Integer_Literal (Loc, Index + 1)));
  
        begin
!          --  Index for current entry body
  
           Index := Index + 1;
  
!          --  Compute total length of entry queues so far
  
           if No (Siz) then
              Siz := Expr;
*************** package body Exp_Ch9 is
*** 1198,1210 ****
        Loc  : constant Source_Ptr := Sloc (E);
        P    : Node_Id;
        Decl : Node_Id;
  
     begin
        --  Nothing to do if we already built a master entity for this scope
        --  or if there is no task hierarchy.
  
!       if Has_Master_Entity (Scope (E))
!         or else Restrictions (No_Task_Hierarchy)
        then
           return;
        end if;
--- 1199,1223 ----
        Loc  : constant Source_Ptr := Sloc (E);
        P    : Node_Id;
        Decl : Node_Id;
+       S    : Entity_Id;
  
     begin
+       S := Scope (E);
+ 
+       --  Ada 2005 (AI-287): Do not set/get the has_master_entity reminder
+       --  in internal scopes. Required for nested limited aggregates.
+ 
+       if Ada_Version >= Ada_05 then
+          while Is_Internal (S) loop
+             S := Scope (S);
+          end loop;
+       end if;
+ 
        --  Nothing to do if we already built a master entity for this scope
        --  or if there is no task hierarchy.
  
!       if Has_Master_Entity (S)
!         or else Restriction_Active (No_Task_Hierarchy)
        then
           return;
        end if;
*************** package body Exp_Ch9 is
*** 1226,1232 ****
        P := Parent (E);
        Insert_Before (P, Decl);
        Analyze (Decl);
!       Set_Has_Master_Entity (Scope (E));
  
        --  Now mark the containing scope as a task master
  
--- 1239,1253 ----
        P := Parent (E);
        Insert_Before (P, Decl);
        Analyze (Decl);
! 
!       --  Ada 2005 (AI-287): Set the has_master_entity reminder in the
!       --  non-internal scope selected above.
! 
!       if Ada_Version >= Ada_05 then
!          Set_Has_Master_Entity (S);
!       else
!          Set_Has_Master_Entity (Scope (E));
!       end if;
  
        --  Now mark the containing scope as a task master
  
*************** package body Exp_Ch9 is
*** 1280,1286 ****
        Add_Object_Pointer (Op_Decls, Pid, Loc);
  
        if Abort_Allowed
!         or else Restrictions (No_Entry_Queue) = False
          or else Number_Entries (Pid) > 1
        then
           Complete := New_Reference_To (RTE (RE_Complete_Entry_Body), Loc);
--- 1301,1307 ----
        Add_Object_Pointer (Op_Decls, Pid, Loc);
  
        if Abort_Allowed
!         or else Restriction_Active (No_Entry_Queue) = False
          or else Number_Entries (Pid) > 1
        then
           Complete := New_Reference_To (RTE (RE_Complete_Entry_Body), Loc);
*************** package body Exp_Ch9 is
*** 1308,1314 ****
                       Make_Identifier (Loc, Name_uObject)),
                   Attribute_Name => Name_Unchecked_Access))));
  
!       if Restrictions (No_Exception_Handlers) then
           return
             Make_Subprogram_Body (Loc,
               Specification => Espec,
--- 1329,1335 ----
                       Make_Identifier (Loc, Name_uObject)),
                   Attribute_Name => Name_Unchecked_Access))));
  
!       if Restriction_Active (No_Exception_Handlers) then
           return
             Make_Subprogram_Body (Loc,
               Specification => Espec,
*************** package body Exp_Ch9 is
*** 1321,1327 ****
           Set_All_Others (Ohandle);
  
           if Abort_Allowed
!            or else Restrictions (No_Entry_Queue) = False
             or else Number_Entries (Pid) > 1
           then
              Complete :=
--- 1342,1348 ----
           Set_All_Others (Ohandle);
  
           if Abort_Allowed
!            or else Restriction_Active (No_Entry_Queue) = False
             or else Number_Entries (Pid) > 1
           then
              Complete :=
*************** package body Exp_Ch9 is
*** 1374,1379 ****
--- 1395,1401 ----
        P : Entity_Id;
  
     begin
+       Set_Needs_Debug_Info (Def_Id);
        P := Make_Defining_Identifier (Loc, Name_uP);
  
        if Present (Ent_Id) then
*************** package body Exp_Ch9 is
*** 1467,1472 ****
--- 1489,1495 ----
        Protnm      : constant Name_Id := Chars (Prottyp);
        Ident       : Entity_Id;
        Nam         : Name_Id;
+       New_Id      : Entity_Id;
        New_Plist   : List_Id;
        Append_Char : Character;
        New_Spec    : Node_Id;
*************** package body Exp_Ch9 is
*** 1493,1512 ****
           Append_Char := 'P';
        end if;
  
        if Nkind (Specification (Decl)) = N_Procedure_Specification then
           return
             Make_Procedure_Specification (Loc,
!              Defining_Unit_Name =>
!                Make_Defining_Identifier (Loc,
!                  Chars => Build_Selected_Name (Protnm, Nam, Append_Char)),
               Parameter_Specifications => New_Plist);
  
        else
           New_Spec :=
             Make_Function_Specification (Loc,
!              Defining_Unit_Name =>
!                Make_Defining_Identifier (Loc,
!                  Chars => Build_Selected_Name (Protnm, Nam, Append_Char)),
               Parameter_Specifications => New_Plist,
               Subtype_Mark => New_Copy (Subtype_Mark (Specification (Decl))));
           Set_Return_Present (Defining_Unit_Name (New_Spec));
--- 1516,1543 ----
           Append_Char := 'P';
        end if;
  
+       New_Id :=
+         Make_Defining_Identifier (Loc,
+           Chars => Build_Selected_Name (Protnm, Nam, Append_Char));
+ 
+       --  The unprotected operation carries the user code, and debugging
+       --  information must be generated for it, even though this spec does
+       --  not come from source. It is also convenient to allow gdb to step
+       --  into the protected operation, even though it only contains lock/
+       --  unlock calls.
+ 
+       Set_Needs_Debug_Info (New_Id);
+ 
        if Nkind (Specification (Decl)) = N_Procedure_Specification then
           return
             Make_Procedure_Specification (Loc,
!              Defining_Unit_Name => New_Id,
               Parameter_Specifications => New_Plist);
  
        else
           New_Spec :=
             Make_Function_Specification (Loc,
!              Defining_Unit_Name => New_Id,
               Parameter_Specifications => New_Plist,
               Subtype_Mark => New_Copy (Subtype_Mark (Specification (Decl))));
           Set_Return_Present (Defining_Unit_Name (New_Spec));
*************** package body Exp_Ch9 is
*** 1532,1541 ****
        Sub_Body     : Node_Id;
        Lock_Name    : Node_Id;
        Lock_Stmt    : Node_Id;
-       Unlock_Name  : Node_Id;
-       Unlock_Stmt  : Node_Id;
        Service_Name : Node_Id;
-       Service_Stmt : Node_Id;
        R            : Node_Id;
        Return_Stmt  : Node_Id := Empty;    -- init to avoid gcc 3 warning
        Pre_Stmts    : List_Id := No_List;  -- init to avoid gcc 3 warning
--- 1563,1569 ----
*************** package body Exp_Ch9 is
*** 1692,1698 ****
             Parameter_Associations => Uactuals);
        end if;
  
!       --  Wrap call in block that will be covered by an at_end handler.
  
        if not Exc_Safe then
           Unprot_Call := Make_Block_Statement (Loc,
--- 1720,1726 ----
             Parameter_Associations => Uactuals);
        end if;
  
!       --  Wrap call in block that will be covered by an at_end handler
  
        if not Exc_Safe then
           Unprot_Call := Make_Block_Statement (Loc,
*************** package body Exp_Ch9 is
*** 1715,1737 ****
          or else (Has_Attach_Handler (Pid) and then not Restricted_Profile)
        then
           if Abort_Allowed
!            or else Restrictions (No_Entry_Queue) = False
             or else Number_Entries (Pid) > 1
           then
              Lock_Name := New_Reference_To (RTE (RE_Lock_Entries), Loc);
-             Unlock_Name := New_Reference_To (RTE (RE_Unlock_Entries), Loc);
              Service_Name := New_Reference_To (RTE (RE_Service_Entries), Loc);
  
           else
              Lock_Name := New_Reference_To (RTE (RE_Lock_Entry), Loc);
-             Unlock_Name := New_Reference_To (RTE (RE_Unlock_Entry), Loc);
              Service_Name := New_Reference_To (RTE (RE_Service_Entry), Loc);
           end if;
  
        else
           Lock_Name := New_Reference_To (RTE (RE_Lock), Loc);
!          Unlock_Name := New_Reference_To (RTE (RE_Unlock), Loc);
!          Service_Name := Empty;
        end if;
  
        Object_Parm :=
--- 1743,1762 ----
          or else (Has_Attach_Handler (Pid) and then not Restricted_Profile)
        then
           if Abort_Allowed
!            or else Restriction_Active (No_Entry_Queue) = False
             or else Number_Entries (Pid) > 1
           then
              Lock_Name := New_Reference_To (RTE (RE_Lock_Entries), Loc);
              Service_Name := New_Reference_To (RTE (RE_Service_Entries), Loc);
  
           else
              Lock_Name := New_Reference_To (RTE (RE_Lock_Entry), Loc);
              Service_Name := New_Reference_To (RTE (RE_Service_Entry), Loc);
           end if;
  
        else
           Lock_Name := New_Reference_To (RTE (RE_Lock), Loc);
!          Service_Name := New_Reference_To (RTE (RE_Unlock), Loc);
        end if;
  
        Object_Parm :=
*************** package body Exp_Ch9 is
*** 1769,1788 ****
              Append (Unprot_Call, Stmts);
           end if;
  
!          if Service_Name /= Empty then
!             Service_Stmt := Make_Procedure_Call_Statement (Loc,
!               Name => Service_Name,
!               Parameter_Associations =>
!                 New_List (New_Copy_Tree (Object_Parm)));
!             Append (Service_Stmt, Stmts);
!          end if;
! 
!          Unlock_Stmt :=
             Make_Procedure_Call_Statement (Loc,
!              Name => Unlock_Name,
!              Parameter_Associations => New_List (
!                New_Copy_Tree (Object_Parm)));
!          Append (Unlock_Stmt, Stmts);
  
           if Abort_Allowed then
              Append (
--- 1794,1805 ----
              Append (Unprot_Call, Stmts);
           end if;
  
!          Append (
             Make_Procedure_Call_Statement (Loc,
!              Name => Service_Name,
!              Parameter_Associations =>
!                New_List (New_Copy_Tree (Object_Parm))),
!            Stmts);
  
           if Abort_Allowed then
              Append (
*************** package body Exp_Ch9 is
*** 1895,1906 ****
           Name_Len := Name_Len - 1;
        end if;
  
!       Name_Buffer (Name_Len + 1) := 'P';
!       Name_Buffer (Name_Len + 2) := 'T';
!       Name_Buffer (Name_Len + 3) := '_';
!       Name_Buffer (Name_Len + 4) := '_';
  
!       Name_Len := Name_Len + 4;
        for J in 1 .. Select_Len loop
           Name_Len := Name_Len + 1;
           Name_Buffer (Name_Len) := Select_Buffer (J);
--- 1912,1921 ----
           Name_Len := Name_Len - 1;
        end if;
  
!       Name_Buffer (Name_Len + 1) := '_';
!       Name_Buffer (Name_Len + 2) := '_';
  
!       Name_Len := Name_Len + 2;
        for J in 1 .. Select_Len loop
           Name_Len := Name_Len + 1;
           Name_Buffer (Name_Len) := Select_Buffer (J);
*************** package body Exp_Ch9 is
*** 2014,2027 ****
              Conctyp := Designated_Type (Conctyp);
           end if;
  
!          --  Special case for protected subprogram calls.
  
           if Is_Protected_Type (Conctyp)
             and then Is_Subprogram (Entity (Ename))
           then
!             Build_Protected_Subprogram_Call
!               (N, Ename, Convert_Concurrent (Concval, Conctyp));
!             Analyze (N);
              return;
           end if;
  
--- 2029,2045 ----
              Conctyp := Designated_Type (Conctyp);
           end if;
  
!          --  Special case for protected subprogram calls
  
           if Is_Protected_Type (Conctyp)
             and then Is_Subprogram (Entity (Ename))
           then
!             if not Is_Eliminated (Entity (Ename)) then
!                Build_Protected_Subprogram_Call
!                  (N, Ename, Convert_Concurrent (Concval, Conctyp));
!                Analyze (N);
!             end if;
! 
              return;
           end if;
  
*************** package body Exp_Ch9 is
*** 2039,2045 ****
           --  parameters.
  
           if Abort_Allowed
!            or else Restrictions (No_Entry_Queue) = False
             or else not Is_Protected_Type (Conctyp)
             or else Number_Entries (Conctyp) > 1
           then
--- 2057,2063 ----
           --  parameters.
  
           if Abort_Allowed
!            or else Restriction_Active (No_Entry_Queue) = False
             or else not Is_Protected_Type (Conctyp)
             or else Number_Entries (Conctyp) > 1
           then
*************** package body Exp_Ch9 is
*** 2151,2157 ****
  
           if Is_Protected_Type (Conctyp) then
              if Abort_Allowed
!               or else Restrictions (No_Entry_Queue) = False
                or else Number_Entries (Conctyp) > 1
              then
                 --  Change the type of the index declaration
--- 2169,2175 ----
  
           if Is_Protected_Type (Conctyp) then
              if Abort_Allowed
!               or else Restriction_Active (No_Entry_Queue) = False
                or else Number_Entries (Conctyp) > 1
              then
                 --  Change the type of the index declaration
*************** package body Exp_Ch9 is
*** 2629,2635 ****
                  Component_Definition =>
                    Make_Component_Definition (Loc,
                      Aliased_Present    => False,
- 
                      Subtype_Indication =>
                        Make_Subtype_Indication (Loc,
                          Subtype_Mark =>
--- 2647,2652 ----
*************** package body Exp_Ch9 is
*** 2642,2648 ****
                                  (Etype (Discrete_Subtype_Definition
                                    (Parent (Efam))), Loc)))))));
  
- 
           end if;
  
           Next_Entity (Efam);
--- 2659,2664 ----
*************** package body Exp_Ch9 is
*** 2662,2671 ****
  
     --    objectV!(name)._Object
  
!    --  for a protected object.
! 
!    --  For the case of an access to a concurrent object,
!    --  there is an extra explicit dereference:
  
     --    taskV!(name.all)._Task_Id
     --    objectV!(name.all)._Object
--- 2678,2685 ----
  
     --    objectV!(name)._Object
  
!    --  for a protected object. For the case of an access to a concurrent
!    --  object, there is an extra explicit dereference:
  
     --    taskV!(name.all)._Task_Id
     --    objectV!(name.all)._Object
*************** package body Exp_Ch9 is
*** 2777,2783 ****
                    Decl := Make_Object_Declaration (Loc,
                       Defining_Identifier => T_Self,
                       Object_Definition =>
!                        New_Occurrence_Of (RTE (RO_ST_Task_ID), Loc),
                       Expression =>
                         Make_Function_Call (Loc,
                           Name => New_Reference_To (RTE (RE_Self), Loc)));
--- 2791,2797 ----
                    Decl := Make_Object_Declaration (Loc,
                       Defining_Identifier => T_Self,
                       Object_Definition =>
!                        New_Occurrence_Of (RTE (RO_ST_Task_Id), Loc),
                       Expression =>
                         Make_Function_Call (Loc,
                           Name => New_Reference_To (RTE (RE_Self), Loc)));
*************** package body Exp_Ch9 is
*** 2856,2862 ****
        --  designated one, to which is added the index expression, if this
        --  expression denotes a member of a family.
  
!       --  The following is a place holder for the count of simple entries.
  
        Num := Make_Integer_Literal (Sloc, 1);
  
--- 2870,2876 ----
        --  designated one, to which is added the index expression, if this
        --  expression denotes a member of a family.
  
!       --  The following is a place holder for the count of simple entries
  
        Num := Make_Integer_Literal (Sloc, 1);
  
*************** package body Exp_Ch9 is
*** 2900,2906 ****
           Expr := Num;
        end if;
  
!       --  Now add lengths of preceding entries and entry families.
  
        Prev := First_Entity (Ttyp);
  
--- 2914,2920 ----
           Expr := Num;
        end if;
  
!       --  Now add lengths of preceding entries and entry families
  
        Prev := First_Entity (Ttyp);
  
*************** package body Exp_Ch9 is
*** 2922,2928 ****
                Left_Opnd  => Expr,
                Right_Opnd => Family_Size (Sloc, Hi, Lo, Ttyp));
  
!          --  Other components are anonymous types to be ignored.
  
           else
              null;
--- 2936,2942 ----
                Left_Opnd  => Expr,
                Right_Opnd => Family_Size (Sloc, Hi, Lo, Ttyp));
  
!          --  Other components are anonymous types to be ignored
  
           else
              null;
*************** package body Exp_Ch9 is
*** 2942,2948 ****
        Call : Node_Id;
  
     begin
!       if Restrictions (No_Task_Hierarchy) = False then
           Call := Build_Runtime_Call (Sloc (N), RE_Enter_Master);
           Prepend_To (Declarations (N), Call);
           Analyze (Call);
--- 2956,2962 ----
        Call : Node_Id;
  
     begin
!       if Restriction_Active (No_Task_Hierarchy) = False then
           Call := Build_Runtime_Call (Sloc (N), RE_Enter_Master);
           Prepend_To (Declarations (N), Call);
           Analyze (Call);
*************** package body Exp_Ch9 is
*** 3101,3107 ****
                 pragma Assert (Nkind (Acc_Alt) = N_Accept_Alternative);
                 pragma Assert (Nkind (Sel_Acc) = N_Selective_Accept);
  
!                --  ??? Consider a single label for select statements.
  
                 if Present (Handled_Statement_Sequence (N)) then
                    Prepend (Ldecl2,
--- 3115,3121 ----
                 pragma Assert (Nkind (Acc_Alt) = N_Accept_Alternative);
                 pragma Assert (Nkind (Sel_Acc) = N_Selective_Accept);
  
!                --  ??? Consider a single label for select statements
  
                 if Present (Handled_Statement_Sequence (N)) then
                    Prepend (Ldecl2,
*************** package body Exp_Ch9 is
*** 3246,3252 ****
        Def1   : Node_Id;
  
     begin
!       --  Create access to protected subprogram with full signature.
  
        if Nkind (Type_Definition (N)) = N_Access_Function_Definition then
           Def1 :=
--- 3260,3266 ----
        Def1   : Node_Id;
  
     begin
!       --  Create access to protected subprogram with full signature
  
        if Nkind (Type_Definition (N)) = N_Access_Function_Definition then
           Def1 :=
*************** package body Exp_Ch9 is
*** 3265,3274 ****
            Defining_Identifier => D_T2,
            Type_Definition => Def1);
  
        Insert_After (N, Decl1);
  
        --  Create Equivalent_Type, a record with two components for an
!       --  an access to object an an access to subprogram.
  
        Comps := New_List (
          Make_Component_Declaration (Loc,
--- 3279,3289 ----
            Defining_Identifier => D_T2,
            Type_Definition => Def1);
  
+       Analyze (Decl1);
        Insert_After (N, Decl1);
  
        --  Create Equivalent_Type, a record with two components for an
!       --  access to object and an access to subprogram.
  
        Comps := New_List (
          Make_Component_Declaration (Loc,
*************** package body Exp_Ch9 is
*** 3297,3302 ****
--- 3312,3318 ----
                  Make_Component_List (Loc,
                    Component_Items => Comps)));
  
+       Analyze (Decl2);
        Insert_After (Decl1, Decl2);
        Set_Equivalent_Type (T, E_T);
     end Expand_Access_Protected_Subprogram_Type;
*************** package body Exp_Ch9 is
*** 3350,3356 ****
           Set_Scope (Func, Scope (Prot));
  
        else
!          Analyze (Cond);
        end if;
  
        --  The Ravenscar profile restricts barriers to simple variables
--- 3366,3372 ----
           Set_Scope (Func, Scope (Prot));
  
        else
!          Analyze_And_Resolve (Cond, Any_Boolean);
        end if;
  
        --  The Ravenscar profile restricts barriers to simple variables
*************** package body Exp_Ch9 is
*** 3394,3400 ****
  
        --  It is not a boolean variable or literal, so check the restriction
  
!       Check_Restriction (Boolean_Entry_Barriers, Cond);
     end Expand_Entry_Barrier;
  
     ------------------------------------
--- 3410,3416 ----
  
        --  It is not a boolean variable or literal, so check the restriction
  
!       Check_Restriction (Simple_Barriers, Cond);
     end Expand_Entry_Barrier;
  
     ------------------------------------
*************** package body Exp_Ch9 is
*** 3721,3739 ****
     -- Expand_N_Asynchronous_Select --
     ----------------------------------
  
!    --  This procedure assumes that the trigger statement is an entry
!    --  call. A delay alternative should already have been expanded
!    --  into an entry call to the appropriate delay object Wait entry.
  
!    --  If the trigger is a task entry call, the select is implemented
!    --  with Task_Entry_Call:
  
     --    declare
     --       B : Boolean;
     --       C : Boolean;
     --       P : parms := (parm, parm, parm);
  
!    --        --  Clean is added by Exp_Ch7.Expand_Cleanup_Actions.
  
     --       procedure _clean is
     --       begin
--- 3737,3755 ----
     -- Expand_N_Asynchronous_Select --
     ----------------------------------
  
!    --  This procedure assumes that the trigger statement is an entry call. A
!    --  delay alternative should already have been expanded into an entry call
!    --  to the appropriate delay object Wait entry.
  
!    --  If the trigger is a task entry call, the select is implemented with
!    --  a Task_Entry_Call:
  
     --    declare
     --       B : Boolean;
     --       C : Boolean;
     --       P : parms := (parm, parm, parm);
  
!    --        --  Clean is added by Exp_Ch7.Expand_Cleanup_Actions
  
     --       procedure _clean is
     --       begin
*************** package body Exp_Ch9 is
*** 3849,3864 ****
     --       ...
     --  end;
  
!    --  The job is to convert this to the asynchronous form.
  
!    --  If the trigger is a delay statement, it will have been expanded
!    --  into a call to one of the GNARL delay procedures. This routine
!    --  will convert this into a protected entry call on a delay object
!    --  and then continue processing as for a protected entry call trigger.
!    --  This requires declaring a Delay_Block object and adding a pointer
!    --  to this object to the parameter list of the delay procedure to form
!    --  the parameter list of the entry call. This object is used by
!    --  the runtime to queue the delay request.
  
     --  For a description of the use of P and the assignments after the
     --  call, see Expand_N_Entry_Call_Statement.
--- 3865,3880 ----
     --       ...
     --  end;
  
!    --  The job is to convert this to the asynchronous form
  
!    --  If the trigger is a delay statement, it will have been expanded into a
!    --  call to one of the GNARL delay procedures. This routine will convert
!    --  this into a protected entry call on a delay object and then continue
!    --  processing as for a protected entry call trigger. This requires
!    --  declaring a Delay_Block object and adding a pointer to this object to
!    --  the parameter list of the delay procedure to form the parameter list of
!    --  the entry call. This object is used by the runtime to queue the delay
!    --  request.
  
     --  For a description of the use of P and the assignments after the
     --  call, see Expand_N_Entry_Call_Statement.
*************** package body Exp_Ch9 is
*** 3943,3949 ****
               Prefix => New_Reference_To (Dblock_Ent, Loc),
               Attribute_Name => Name_Unchecked_Access));
  
!          --  Create the inner block to protect the abortable part.
  
           Hdle := New_List (
             Make_Exception_Handler (Loc,
--- 3959,3965 ----
               Prefix => New_Reference_To (Dblock_Ent, Loc),
               Attribute_Name => Name_Unchecked_Access));
  
!          --  Create the inner block to protect the abortable part
  
           Hdle := New_List (
             Make_Exception_Handler (Loc,
*************** package body Exp_Ch9 is
*** 4173,4179 ****
               Defining_Identifier => Cancel_Param,
               Object_Definition => New_Reference_To (Standard_Boolean, Loc)));
  
!          --  Remove and save the call to Call_Simple.
  
           Stmt := First (Stmts);
  
--- 4189,4195 ----
               Defining_Identifier => Cancel_Param,
               Object_Definition => New_Reference_To (Standard_Boolean, Loc)));
  
!          --  Remove and save the call to Call_Simple
  
           Stmt := First (Stmts);
  
*************** package body Exp_Ch9 is
*** 4187,4193 ****
  
           Call := Stmt;
  
!          --  Create the inner block to protect the abortable part.
  
           Hdle :=  New_List (
             Make_Exception_Handler (Loc,
--- 4203,4209 ----
  
           Call := Stmt;
  
!          --  Create the inner block to protect the abortable part
  
           Hdle :=  New_List (
             Make_Exception_Handler (Loc,
*************** package body Exp_Ch9 is
*** 4538,4544 ****
        Index_Decl  : List_Id;
  
     begin
!       --  Add the renamings for private declarations and discriminants.
  
        Add_Discriminal_Declarations
          (Declarations (N), Defining_Identifier (Dec), Name_uObject, Loc);
--- 4554,4560 ----
        Index_Decl  : List_Id;
  
     begin
!       --  Add the renamings for private declarations and discriminants
  
        Add_Discriminal_Declarations
          (Declarations (N), Defining_Identifier (Dec), Name_uObject, Loc);
*************** package body Exp_Ch9 is
*** 4864,4872 ****
  
              when N_Subprogram_Body =>
  
!                --  Exclude functions created to analyze defaults.
  
!                if not Is_Eliminated (Defining_Entity (Op_Body)) then
                    New_Op_Body :=
                      Build_Unprotected_Subprogram_Body (Op_Body, Pid);
  
--- 4880,4890 ----
  
              when N_Subprogram_Body =>
  
!                --  Exclude functions created to analyze defaults
  
!                if not Is_Eliminated (Defining_Entity (Op_Body))
!                  and then not Is_Eliminated (Corresponding_Spec (Op_Body))
!                then
                    New_Op_Body :=
                      Build_Unprotected_Subprogram_Body (Op_Body, Pid);
  
*************** package body Exp_Ch9 is
*** 4963,4969 ****
  
        if Has_Entries
          and then (Abort_Allowed
!                     or else Restrictions (No_Entry_Queue) = False
                      or else Num_Entries > 1)
        then
           New_Op_Body := Build_Find_Body_Index (Pid);
--- 4981,4987 ----
  
        if Has_Entries
          and then (Abort_Allowed
!                     or else Restriction_Active (No_Entry_Queue) = False
                      or else Num_Entries > 1)
        then
           New_Op_Body := Build_Find_Body_Index (Pid);
*************** package body Exp_Ch9 is
*** 5218,5224 ****
  
           elsif Has_Entries (Prottyp) then
              if Abort_Allowed
!               or else Restrictions (No_Entry_Queue) = False
                or else Number_Entries (Prottyp) > 1
              then
                 Protection_Subtype :=
--- 5236,5242 ----
  
           elsif Has_Entries (Prottyp) then
              if Abort_Allowed
!               or else Restriction_Active (No_Entry_Queue) = False
                or else Number_Entries (Prottyp) > 1
              then
                 Protection_Subtype :=
*************** package body Exp_Ch9 is
*** 5353,5366 ****
        --  subprogram; one to call from outside the object and one to
        --  call from inside. Build a barrier function and an entry
        --  body action procedure specification for each protected entry.
!       --  Initialize the entry body array.
  
        E_Count := 0;
  
        Comp := First (Visible_Declarations (Pdef));
  
        while Present (Comp) loop
!          if Nkind (Comp) = N_Subprogram_Declaration then
              Sub :=
                Make_Subprogram_Declaration (Loc,
                  Specification =>
--- 5371,5387 ----
        --  subprogram; one to call from outside the object and one to
        --  call from inside. Build a barrier function and an entry
        --  body action procedure specification for each protected entry.
!       --  Initialize the entry body array. If subprogram is flagged as
!       --  eliminated, do not generate any internal operations.
  
        E_Count := 0;
  
        Comp := First (Visible_Declarations (Pdef));
  
        while Present (Comp) loop
!          if Nkind (Comp) = N_Subprogram_Declaration
!            and then not Is_Eliminated (Defining_Entity (Comp))
!          then
              Sub :=
                Make_Subprogram_Declaration (Loc,
                  Specification =>
*************** package body Exp_Ch9 is
*** 5541,5547 ****
             New_External_Name (Chars (Prottyp), 'A'));
  
           if Abort_Allowed
!            or else Restrictions (No_Entry_Queue) = False
             or else E_Count > 1
           then
              Body_Arr := Make_Object_Declaration (Loc,
--- 5562,5568 ----
             New_External_Name (Chars (Prottyp), 'A'));
  
           if Abort_Allowed
!            or else Restriction_Active (No_Entry_Queue) = False
             or else E_Count > 1
           then
              Body_Arr := Make_Object_Declaration (Loc,
*************** package body Exp_Ch9 is
*** 5591,5597 ****
           --  no entry queue, 1 entry)
  
           if Abort_Allowed
!            or else Restrictions (No_Entry_Queue) = False
             or else E_Count > 1
           then
              Sub :=
--- 5612,5618 ----
           --  no entry queue, 1 entry)
  
           if Abort_Allowed
!            or else Restriction_Active (No_Entry_Queue) = False
             or else E_Count > 1
           then
              Sub :=
*************** package body Exp_Ch9 is
*** 5640,5646 ****
  
     --        <some more of the statement sequence for entry>
  
!    --        --  Requeue from an entry body to a task entry.
  
     --        Requeue_Protected_To_Task_Entry (
     --          New._task_id,
--- 5661,5667 ----
  
     --        <some more of the statement sequence for entry>
  
!    --        --  Requeue from an entry body to a task entry
  
     --        Requeue_Protected_To_Task_Entry (
     --          New._task_id,
*************** package body Exp_Ch9 is
*** 5658,5664 ****
     --     end;
     --  end entE;
  
!    --  Requeue of a task entry call to a task entry.
  
     --  Accept_Call (E, Ann);
     --     <start of statement sequence for accept statement>
--- 5679,5685 ----
     --     end;
     --  end entE;
  
!    --  Requeue of a task entry call to a task entry
  
     --  Accept_Call (E, Ann);
     --     <start of statement sequence for accept statement>
*************** package body Exp_Ch9 is
*** 5672,5678 ****
     --     when all others =>
     --        Exceptional_Complete_Rendezvous (Get_GNAT_Exception);
  
!    --  Requeue of a task entry call to a protected entry.
  
     --  Accept_Call (E, Ann);
     --     <start of statement sequence for accept statement>
--- 5693,5699 ----
     --     when all others =>
     --        Exceptional_Complete_Rendezvous (Get_GNAT_Exception);
  
!    --  Requeue of a task entry call to a protected entry
  
     --  Accept_Call (E, Ann);
     --     <start of statement sequence for accept statement>
*************** package body Exp_Ch9 is
*** 5711,5729 ****
        RTS_Call   : Entity_Id;
  
     begin
!       if Abort_Present (N) then
!          Abortable := New_Occurrence_Of (Standard_True, Loc);
!       else
!          Abortable := New_Occurrence_Of (Standard_False, Loc);
!       end if;
  
!       --  Set up the target object.
  
        Extract_Entry (N, Concval, Ename, Index);
        Conctyp := Etype (Concval);
        New_Param := Concurrent_Ref (Concval);
  
!       --  The target entry index and abortable flag are the same for all cases.
  
        Params := New_List (
          Entry_Index_Expression (Loc, Entity (Ename), Index, Conctyp),
--- 5732,5747 ----
        RTS_Call   : Entity_Id;
  
     begin
!       Abortable :=
!         New_Occurrence_Of (Boolean_Literals (Abort_Present (N)), Loc);
  
!       --  Set up the target object
  
        Extract_Entry (N, Concval, Ename, Index);
        Conctyp := Etype (Concval);
        New_Param := Concurrent_Ref (Concval);
  
!       --  The target entry index and abortable flag are the same for all cases
  
        Params := New_List (
          Entry_Index_Expression (Loc, Entity (Ename), Index, Conctyp),
*************** package body Exp_Ch9 is
*** 5780,5786 ****
           end if;
        end loop;
  
!       --  Create the GNARLI call.
  
        Rcall := Make_Procedure_Call_Statement (Loc,
          Name =>
--- 5798,5804 ----
           end if;
        end loop;
  
!       --  Create the GNARLI call
  
        Rcall := Make_Procedure_Call_Statement (Loc,
          Name =>
*************** package body Exp_Ch9 is
*** 5913,5919 ****
        --  statements of an accept or delay alternative.
  
        function Make_Select_Call (Select_Mode : Entity_Id) return Node_Id;
!       --  Build call to Selective_Wait runtime routine.
  
        procedure Process_Delay_Alternative (Alt : Node_Id; Index : Int);
        --  Add code to compare value of delay with previous values, and
--- 5931,5937 ----
        --  statements of an accept or delay alternative.
  
        function Make_Select_Call (Select_Mode : Entity_Id) return Node_Id;
!       --  Build call to Selective_Wait runtime routine
  
        procedure Process_Delay_Alternative (Alt : Node_Id; Index : Int);
        --  Add code to compare value of delay with previous values, and
*************** package body Exp_Ch9 is
*** 6156,6162 ****
  
              if No (Alt_Stats) then
  
!                --  Accept with no body, followed by trailing statements.
  
                 Choices := New_List (
                   Make_Integer_Literal (Loc, Index));
--- 6174,6180 ----
  
              if No (Alt_Stats) then
  
!                --  Accept with no body, followed by trailing statements
  
                 Choices := New_List (
                   Make_Integer_Literal (Loc, Index));
*************** package body Exp_Ch9 is
*** 6205,6211 ****
  
           Adjust_Condition (Condition (Alt));
  
!          --  Determine the smallest specified delay.
           --  for each delay alternative generate:
  
           --    if guard-expression then
--- 6223,6230 ----
  
           Adjust_Condition (Condition (Alt));
  
!          --  Determine the smallest specified delay
! 
           --  for each delay alternative generate:
  
           --    if guard-expression then
*************** package body Exp_Ch9 is
*** 6217,6223 ****
           --       end if;
           --    end if;
  
!          --  The enclosing if-statement is omitted if there is no guard.
  
           if Delay_Count = 1
             or else First_Delay
--- 6236,6242 ----
           --       end if;
           --    end if;
  
!          --  The enclosing if-statement is omitted if there is no guard
  
           if Delay_Count = 1
             or else First_Delay
*************** package body Exp_Ch9 is
*** 6382,6388 ****
  
              if No (Condition (Alt)) then
  
!                --  This guard will always be open.
  
                 Check_Guard := False;
              end if;
--- 6401,6407 ----
  
              if No (Condition (Alt)) then
  
!                --  This guard will always be open
  
                 Check_Guard := False;
              end if;
*************** package body Exp_Ch9 is
*** 6447,6453 ****
  
        Append (X, Decls);
  
!       --  After this follow procedure declarations for each accept body.
  
        --    procedure Pnn is
        --    begin
--- 6466,6472 ----
  
        Append (X, Decls);
  
!       --  After this follow procedure declarations for each accept body
  
        --    procedure Pnn is
        --    begin
*************** package body Exp_Ch9 is
*** 6470,6476 ****
        --  build them unconditionally, and not significantly inefficient,
        --  since if they are short they will be inlined anyway.
  
!       --  The procedure declarations have been assembled in Body_List.
  
        --  If delays are present, we must compute the required delay.
        --  We first generate the declarations:
--- 6489,6495 ----
        --  build them unconditionally, and not significantly inefficient,
        --  since if they are short they will be inlined anyway.
  
!       --  The procedure declarations have been assembled in Body_List
  
        --  If delays are present, we must compute the required delay.
        --  We first generate the declarations:
*************** package body Exp_Ch9 is
*** 6480,6489 ****
        --    Delay_Val   : Some_Time_Type.Time;
  
        --  Delay_Index will be set to the index of the minimum delay, i.e. the
!       --   active delay that is actually chosen as the basis for the possible
!       --   delay if an immediate rendez-vous is not possible.
!       --   In the most common case there is a single delay statement, and this
!       --   is handled specially.
  
        if Delay_Count > 0 then
  
--- 6499,6509 ----
        --    Delay_Val   : Some_Time_Type.Time;
  
        --  Delay_Index will be set to the index of the minimum delay, i.e. the
!       --  active delay that is actually chosen as the basis for the possible
!       --  delay if an immediate rendez-vous is not possible.
! 
!       --  In the most common case there is a single delay statement, and this
!       --  is handled specially.
  
        if Delay_Count > 0 then
  
*************** package body Exp_Ch9 is
*** 6635,6651 ****
        --    ...
        --    Exit:
  
!       --  Generate label for common exit.
  
        End_Lab := Make_And_Declare_Label (Num_Alts + 1);
  
!       --  First entry is the default case, when no rendezvous is possible.
  
        Choices := New_List (New_Reference_To (RTE (RE_No_Rendezvous), Loc));
  
        if Else_Present then
  
!          --  If no rendezvous is possible, the else part is executed.
  
           Lab := Make_And_Declare_Label (0);
           Alt_Stats := New_List (
--- 6655,6671 ----
        --    ...
        --    Exit:
  
!       --  Generate label for common exit
  
        End_Lab := Make_And_Declare_Label (Num_Alts + 1);
  
!       --  First entry is the default case, when no rendezvous is possible
  
        Choices := New_List (New_Reference_To (RTE (RE_No_Rendezvous), Loc));
  
        if Else_Present then
  
!          --  If no rendezvous is possible, the else part is executed
  
           Lab := Make_And_Declare_Label (0);
           Alt_Stats := New_List (
*************** package body Exp_Ch9 is
*** 6811,6817 ****
              Insert_After (Parm, New_Reference_To (M, Loc));
              Insert_After (Parm, New_Reference_To (D, Loc));
  
!             --  Create a call to RTS.
  
              Rewrite (Select_Call,
                Make_Procedure_Call_Statement (Loc,
--- 6831,6837 ----
              Insert_After (Parm, New_Reference_To (M, Loc));
              Insert_After (Parm, New_Reference_To (D, Loc));
  
!             --  Create a call to RTS
  
              Rewrite (Select_Call,
                Make_Procedure_Call_Statement (Loc,
*************** package body Exp_Ch9 is
*** 7120,7132 ****
        Tasknm    : constant Name_Id    := Chars (Tasktyp);
        Taskdef   : constant Node_Id    := Task_Definition (N);
  
!       Proc_Spec : Node_Id;
!       Rec_Decl  : Node_Id;
!       Rec_Ent   : Entity_Id;
!       Cdecls    : List_Id;
!       Elab_Decl : Node_Id;
!       Size_Decl : Node_Id;
!       Body_Decl : Node_Id;
  
     begin
        --  If already expanded, nothing to do
--- 7140,7155 ----
        Tasknm    : constant Name_Id    := Chars (Tasktyp);
        Taskdef   : constant Node_Id    := Task_Definition (N);
  
!       Proc_Spec  : Node_Id;
!       Rec_Decl   : Node_Id;
!       Rec_Ent    : Entity_Id;
!       Cdecls     : List_Id;
!       Elab_Decl  : Node_Id;
!       Size_Decl  : Node_Id;
!       Body_Decl  : Node_Id;
!       Task_Size  : Node_Id;
!       Ent_Stack  : Entity_Id;
!       Decl_Stack : Node_Id;
  
     begin
        --  If already expanded, nothing to do
*************** package body Exp_Ch9 is
*** 7193,7199 ****
        --  This is done last, since the corresponding record initialization
        --  procedure will reference the previously created entities.
  
!       --  Fill in the component declarations. First the _Task_Id field.
  
        Append_To (Cdecls,
          Make_Component_Declaration (Loc,
--- 7216,7222 ----
        --  This is done last, since the corresponding record initialization
        --  procedure will reference the previously created entities.
  
!       --  Fill in the component declarations -- first the _Task_Id field
  
        Append_To (Cdecls,
          Make_Component_Declaration (Loc,
*************** package body Exp_Ch9 is
*** 7202,7210 ****
            Component_Definition =>
              Make_Component_Definition (Loc,
                Aliased_Present    => False,
!               Subtype_Indication => New_Reference_To (RTE (RO_ST_Task_ID),
                                      Loc))));
  
        --  Add components for entry families
  
        Collect_Entry_Families (Loc, Cdecls, Size_Decl, Tasktyp);
--- 7225,7301 ----
            Component_Definition =>
              Make_Component_Definition (Loc,
                Aliased_Present    => False,
!               Subtype_Indication => New_Reference_To (RTE (RO_ST_Task_Id),
                                      Loc))));
  
+       --  Declare static ATCB (that is, created by the expander) if we
+       --  are using the Restricted run time.
+ 
+       if Restricted_Profile then
+          Append_To (Cdecls,
+            Make_Component_Declaration (Loc,
+              Defining_Identifier  =>
+                Make_Defining_Identifier (Loc, Name_uATCB),
+ 
+              Component_Definition =>
+                Make_Component_Definition (Loc,
+                  Aliased_Present     => True,
+                  Subtype_Indication  => Make_Subtype_Indication (Loc,
+                    Subtype_Mark => New_Occurrence_Of
+                      (RTE (RE_Ada_Task_Control_Block), Loc),
+ 
+                    Constraint   =>
+                      Make_Index_Or_Discriminant_Constraint (Loc,
+                        Constraints =>
+                          New_List (Make_Integer_Literal (Loc, 0)))))));
+ 
+       end if;
+ 
+       --  Declare static stack (that is, created by the expander) if we
+       --  are using the Restricted run time on a bare board configuration.
+ 
+       if Restricted_Profile
+         and then Preallocated_Stacks_On_Target
+       then
+          --  First we need to extract the appropriate stack size
+ 
+          Ent_Stack := Make_Defining_Identifier (Loc, Name_uStack);
+ 
+          if Present (Taskdef) and then Has_Storage_Size_Pragma (Taskdef) then
+             Task_Size := Relocate_Node (
+               Expression (First (
+                 Pragma_Argument_Associations (
+                   Find_Task_Or_Protected_Pragma
+                     (Taskdef, Name_Storage_Size)))));
+          else
+             Task_Size :=
+               New_Reference_To (RTE (RE_Default_Stack_Size), Loc);
+          end if;
+ 
+          Decl_Stack := Make_Component_Declaration (Loc,
+            Defining_Identifier  => Ent_Stack,
+ 
+            Component_Definition =>
+              Make_Component_Definition (Loc,
+                Aliased_Present     => True,
+                Subtype_Indication  => Make_Subtype_Indication (Loc,
+                  Subtype_Mark =>
+                    New_Occurrence_Of (RTE (RE_Storage_Array), Loc),
+ 
+                  Constraint   =>
+                    Make_Index_Or_Discriminant_Constraint (Loc,
+                      Constraints  => New_List (Make_Range (Loc,
+                        Low_Bound  => Make_Integer_Literal (Loc, 1),
+                        High_Bound => Convert_To (RTE (RE_Storage_Offset),
+                          Task_Size)))))));
+ 
+          Append_To (Cdecls, Decl_Stack);
+ 
+          --  The appropriate alignment for the stack is ensured by the
+          --  run-time code in charge of task creation.
+ 
+       end if;
+ 
        --  Add components for entry families
  
        Collect_Entry_Families (Loc, Cdecls, Size_Decl, Tasktyp);
*************** package body Exp_Ch9 is
*** 7224,7230 ****
                 Expr := Expression (Expr);
              end if;
  
!             Expr := New_Copy (Expr);
  
              --  Add conversion to proper type to do range check if required
              --  Note that for runtime units, we allow out of range interrupt
--- 7315,7321 ----
                 Expr := Expression (Expr);
              end if;
  
!             Expr := New_Copy_Tree (Expr);
  
              --  Add conversion to proper type to do range check if required
              --  Note that for runtime units, we allow out of range interrupt
*************** package body Exp_Ch9 is
*** 7499,7505 ****
  
        B := Make_Defining_Identifier (Loc, Name_uB);
  
!       --  Create a boolean object used for a return parameter.
  
        Prepend_To (Decls,
          Make_Object_Declaration (Loc,
--- 7590,7596 ----
  
        B := Make_Defining_Identifier (Loc, Name_uB);
  
!       --  Create a boolean object used for a return parameter
  
        Prepend_To (Decls,
          Make_Object_Declaration (Loc,
*************** package body Exp_Ch9 is
*** 7544,7568 ****
  
           Dummy := Remove_Next (Next (Parm));
  
!          --  In case some garbage is following the Cancel_Param, remove.
  
           Dummy := Next (Parm);
  
!          --  Remove the mode of the Protected_Entry_Call call, the
!          --  Communication_Block of the Protected_Entry_Call call, and add a
!          --  Duration and a Delay_Mode parameter
  
           pragma Assert (Present (Parm));
           Rewrite (Parm, New_Reference_To (D, Loc));
  
           Rewrite (Dummy, New_Reference_To (M, Loc));
  
!          --  Add a Boolean flag for successful entry call.
  
           Append_To (Parms, New_Reference_To (B, Loc));
  
           if Abort_Allowed
!            or else Restrictions (No_Entry_Queue) = False
             or else Number_Entries (Etype (Concval)) > 1
           then
              Rewrite (Call,
--- 7635,7659 ----
  
           Dummy := Remove_Next (Next (Parm));
  
!          --  Remove garbage is following the Cancel_Param if present
  
           Dummy := Next (Parm);
  
!          --  Remove the mode of the Protected_Entry_Call call, then remove the
!          --  Communication_Block of the Protected_Entry_Call call, and finally
!          --  add Duration and a Delay_Mode parameter
  
           pragma Assert (Present (Parm));
           Rewrite (Parm, New_Reference_To (D, Loc));
  
           Rewrite (Dummy, New_Reference_To (M, Loc));
  
!          --  Add a Boolean flag for successful entry call
  
           Append_To (Parms, New_Reference_To (B, Loc));
  
           if Abort_Allowed
!            or else Restriction_Active (No_Entry_Queue) = False
             or else Number_Entries (Etype (Concval)) > 1
           then
              Rewrite (Call,
*************** package body Exp_Ch9 is
*** 8164,8173 ****
                  Attribute_Name => Name_Unrestricted_Access));
  
              if Abort_Allowed
!               or else Restrictions (No_Entry_Queue) = False
                or else Number_Entries (Ptyp) > 1
              then
!                --  Find index mapping function (clumsy but ok for now).
  
                 while Ekind (P_Arr) /= E_Function loop
                    Next_Entity (P_Arr);
--- 8255,8264 ----
                  Attribute_Name => Name_Unrestricted_Access));
  
              if Abort_Allowed
!               or else Restriction_Active (No_Entry_Queue) = False
                or else Number_Entries (Ptyp) > 1
              then
!                --  Find index mapping function (clumsy but ok for now)
  
                 while Ekind (P_Arr) /= E_Function loop
                    Next_Entity (P_Arr);
*************** package body Exp_Ch9 is
*** 8186,8192 ****
           end if;
  
           if Abort_Allowed
!            or else Restrictions (No_Entry_Queue) = False
             or else Number_Entries (Ptyp) > 1
           then
              Append_To (L,
--- 8277,8283 ----
           end if;
  
           if Abort_Allowed
!            or else Restriction_Active (No_Entry_Queue) = False
             or else Number_Entries (Ptyp) > 1
           then
              Append_To (L,
*************** package body Exp_Ch9 is
*** 8275,8284 ****
                 Next_Rep_Item (Ritem);
              end loop;
  
!             --  Appends the table argument we just built.
              Append_To (Args, Make_Aggregate (Loc, Table));
  
!             --  Appends the Install_Handler call to the statements.
              Append_To (L,
                Make_Procedure_Call_Statement (Loc,
                  Name => New_Reference_To (RTE (RE_Install_Handlers), Loc),
--- 8366,8377 ----
                 Next_Rep_Item (Ritem);
              end loop;
  
!             --  Append the table argument we just built
! 
              Append_To (Args, Make_Aggregate (Loc, Table));
  
!             --  Append the Install_Handler call to the statements
! 
              Append_To (L,
                Make_Procedure_Call_Statement (Loc,
                  Name => New_Reference_To (RTE (RE_Install_Handlers), Loc),
*************** package body Exp_Ch9 is
*** 8337,8355 ****
        --  Priority parameter. Set to Unspecified_Priority unless there is a
        --  priority pragma, in which case we take the value from the pragma.
  
!       if Present (Tdef)
!         and then Has_Priority_Pragma (Tdef)
!       then
           Append_To (Args,
             Make_Selected_Component (Loc,
               Prefix => Make_Identifier (Loc, Name_uInit),
               Selector_Name => Make_Identifier (Loc, Name_uPriority)));
- 
        else
           Append_To (Args,
             New_Reference_To (RTE (RE_Unspecified_Priority), Loc));
        end if;
  
        --  Size parameter. If no Storage_Size pragma is present, then
        --  the size is taken from the taskZ variable for the type, which
        --  is either Unspecified_Size, or has been reset by the use of
--- 8430,8467 ----
        --  Priority parameter. Set to Unspecified_Priority unless there is a
        --  priority pragma, in which case we take the value from the pragma.
  
!       if Present (Tdef) and then Has_Priority_Pragma (Tdef) then
           Append_To (Args,
             Make_Selected_Component (Loc,
               Prefix => Make_Identifier (Loc, Name_uInit),
               Selector_Name => Make_Identifier (Loc, Name_uPriority)));
        else
           Append_To (Args,
             New_Reference_To (RTE (RE_Unspecified_Priority), Loc));
        end if;
  
+       --  Optional Stack parameter
+ 
+       if Restricted_Profile then
+ 
+          --  If the stack has been preallocated by the expander then
+          --  pass its address. Otherwise, pass a null address.
+ 
+          if Preallocated_Stacks_On_Target then
+             Append_To (Args,
+               Make_Attribute_Reference (Loc,
+                 Prefix         => Make_Selected_Component (Loc,
+                   Prefix        => Make_Identifier (Loc, Name_uInit),
+                   Selector_Name =>
+                     Make_Identifier (Loc, Name_uStack)),
+                 Attribute_Name => Name_Address));
+ 
+          else
+             Append_To (Args,
+               New_Reference_To (RTE (RE_Null_Address), Loc));
+          end if;
+       end if;
+ 
        --  Size parameter. If no Storage_Size pragma is present, then
        --  the size is taken from the taskZ variable for the type, which
        --  is either Unspecified_Size, or has been reset by the use of
*************** package body Exp_Ch9 is
*** 8408,8414 ****
           --  See comments in System.Tasking.Initialization.Init_RTS for the
           --  value 3.
  
!          if Restrictions (No_Task_Hierarchy) = False then
              Append_To (Args, Make_Identifier (Loc, Name_uMaster));
           else
              Append_To (Args, Make_Integer_Literal (Loc, 3));
--- 8520,8526 ----
           --  See comments in System.Tasking.Initialization.Init_RTS for the
           --  value 3.
  
!          if Restriction_Active (No_Task_Hierarchy) = False then
              Append_To (Args, Make_Identifier (Loc, Name_uMaster));
           else
              Append_To (Args, Make_Integer_Literal (Loc, 3));
*************** package body Exp_Ch9 is
*** 8634,8639 ****
--- 8746,8752 ----
        end loop;
  
        P_Subtype  := Etype (Defining_Identifier (Obj_Decl));
+       Set_Ekind (Priv, E_Variable);
        Set_Etype (Priv, P_Subtype);
        Set_Is_Aliased (Priv);
        Set_Object_Ref (Body_Ent, Priv);
*************** package body Exp_Ch9 is
*** 8696,8702 ****
              return Skip;
  
           elsif Nkind (N) = N_String_Literal then
!             --  array type, but bounds are constant.
              return OK;
  
           elsif Nkind (N) = N_Object_Declaration
--- 8809,8817 ----
              return Skip;
  
           elsif Nkind (N) = N_String_Literal then
! 
!             --  Array type, but bounds are constant
! 
              return OK;
  
           elsif Nkind (N) = N_Object_Declaration
diff -Nrcpad gcc-3.4.3/gcc/ada/exp_ch9.ads gcc-4.0.0/gcc/ada/exp_ch9.ads
*** gcc-3.4.3/gcc/ada/exp_ch9.ads	Mon Dec  8 10:33:15 2003
--- gcc-4.0.0/gcc/ada/exp_ch9.ads	Mon Jun  7 14:16:18 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Exp_Ch9 is
*** 168,177 ****
       (Actions    : List_Id;
        N          : Node_Id;
        Init_Stmts : List_Id);
!    --  Ada0Y (AI-287): Similar to previous routine, but used to expand alloca-
!    --  ted aggregates with default initialized components. Init_Stmts contains
!    --  the list of statements required to initialize the allocated aggregate.
!    --  It replaces the call to Init (Args) done by Build_Task_Allocate_Block.
  
     function Concurrent_Ref (N : Node_Id) return Node_Id;
     --  Given the name of a concurrent object (task or protected object), or
--- 168,178 ----
       (Actions    : List_Id;
        N          : Node_Id;
        Init_Stmts : List_Id);
!    --  Ada 2005 (AI-287): Similar to previous routine, but used to expand
!    --  allocated aggregates with default initialized components. Init_Stmts
!    --  contains the list of statements required to initialize the allocated
!    --  aggregate. It replaces the call to Init (Args) done by
!    --  Build_Task_Allocate_Block.
  
     function Concurrent_Ref (N : Node_Id) return Node_Id;
     --  Given the name of a concurrent object (task or protected object), or
diff -Nrcpad gcc-3.4.3/gcc/ada/exp_code.adb gcc-4.0.0/gcc/ada/exp_code.adb
*** gcc-3.4.3/gcc/ada/exp_code.adb	Tue Oct 21 13:41:59 2003
--- gcc-4.0.0/gcc/ada/exp_code.adb	Mon Jun  7 14:16:18 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1996-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1996-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Exp_Code is
*** 165,171 ****
        --  are never static).
  
        if Is_OK_Static_Expression (Temp)
!         or else (Ada_83 and then Nkind (Temp) = N_String_Literal)
        then
           return Get_String_Node (Temp);
  
--- 165,172 ----
        --  are never static).
  
        if Is_OK_Static_Expression (Temp)
!         or else (Ada_Version = Ada_83
!                   and then Nkind (Temp) = N_String_Literal)
        then
           return Get_String_Node (Temp);
  
diff -Nrcpad gcc-3.4.3/gcc/ada/exp_dbug.adb gcc-4.0.0/gcc/ada/exp_dbug.adb
*** gcc-3.4.3/gcc/ada/exp_dbug.adb	Thu Oct 23 11:57:52 2003
--- gcc-4.0.0/gcc/ada/exp_dbug.adb	Thu Feb 10 13:50:42 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1996-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1996-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Exp_Dbug is
*** 631,638 ****
     -- Get_External_Name --
     -----------------------
  
!    procedure Get_External_Name (Entity : Entity_Id; Has_Suffix : Boolean)
!    is
        E    : Entity_Id := Entity;
        Kind : Entity_Kind;
  
--- 631,637 ----
     -- Get_External_Name --
     -----------------------
  
!    procedure Get_External_Name (Entity : Entity_Id; Has_Suffix : Boolean) is
        E    : Entity_Id := Entity;
        Kind : Entity_Kind;
  
*************** package body Exp_Dbug is
*** 794,801 ****
           elsif Nkind (Choice) = N_Character_Literal
             and then No (Entity (Choice))
           then
!             Add_Uint_To_Buffer
!               (UI_From_Int (Int (Char_Literal_Value (Choice))));
  
           else
              declare
--- 793,799 ----
           elsif Nkind (Choice) = N_Character_Literal
             and then No (Entity (Choice))
           then
!             Add_Uint_To_Buffer (Char_Literal_Value (Choice));
  
           else
              declare
*************** package body Exp_Dbug is
*** 913,924 ****
  
           --  If we exit the loop then suffix must be output
  
!          if No_Dollar_In_Label then
!             Add_Str_To_Name_Buffer ("__");
!          else
!             Add_Char_To_Name_Buffer ('$');
!          end if;
! 
           Add_Str_To_Name_Buffer (Homonym_Numbers (1 .. Homonym_Len));
           Homonym_Len := 0;
        end if;
--- 911,917 ----
  
           --  If we exit the loop then suffix must be output
  
!          Add_Str_To_Name_Buffer ("__");
           Add_Str_To_Name_Buffer (Homonym_Numbers (1 .. Homonym_Len));
           Homonym_Len := 0;
        end if;
*************** package body Exp_Dbug is
*** 1310,1363 ****
  
        --  Search for and strip homonym numbers suffix
  
!       --  Case of __ used for homonym numbers suffix
! 
!       if No_Dollar_In_Label then
!          for J in reverse 2 .. Name_Len - 2 loop
!             if Name_Buffer (J) = '_'
!               and then Name_Buffer (J + 1) = '_'
!             then
!                if Name_Buffer (J + 2) in '0' .. '9' then
!                   if Homonym_Len > 0 then
!                      Homonym_Len := Homonym_Len + 1;
!                      Homonym_Numbers (Homonym_Len) := '-';
!                   end if;
! 
!                   SL := Name_Len - (J + 1);
! 
!                   Homonym_Numbers (Homonym_Len + 1 .. Homonym_Len + SL) :=
!                     Name_Buffer (J + 2 .. Name_Len);
!                   Name_Len := J - 1;
!                   Homonym_Len := Homonym_Len + SL;
                 end if;
  
!                exit;
!             end if;
!          end loop;
! 
!       --  Case of $ used for homonym numbers suffix
! 
!       else
!          for J in reverse 2 .. Name_Len - 1 loop
!             if Name_Buffer (J) = '$' then
!                if Name_Buffer (J + 1) in '0' .. '9' then
!                   if Homonym_Len > 0 then
!                      Homonym_Len := Homonym_Len + 1;
!                      Homonym_Numbers (Homonym_Len) := '-';
!                   end if;
  
!                   SL := Name_Len - J;
  
!                   Homonym_Numbers (Homonym_Len + 1 .. Homonym_Len + SL) :=
!                     Name_Buffer (J + 1 .. Name_Len);
!                   Name_Len := J - 1;
!                   Homonym_Len := Homonym_Len + SL;
!                end if;
  
-                exit;
-             end if;
-          end loop;
-       end if;
     end Strip_Suffixes;
  
  end Exp_Dbug;
--- 1303,1330 ----
  
        --  Search for and strip homonym numbers suffix
  
!       for J in reverse 2 .. Name_Len - 2 loop
!          if Name_Buffer (J) = '_'
!            and then Name_Buffer (J + 1) = '_'
!          then
!             if Name_Buffer (J + 2) in '0' .. '9' then
!                if Homonym_Len > 0 then
!                   Homonym_Len := Homonym_Len + 1;
!                   Homonym_Numbers (Homonym_Len) := '-';
                 end if;
  
!                SL := Name_Len - (J + 1);
  
!                Homonym_Numbers (Homonym_Len + 1 .. Homonym_Len + SL) :=
!                  Name_Buffer (J + 2 .. Name_Len);
!                Name_Len := J - 1;
!                Homonym_Len := Homonym_Len + SL;
!             end if;
  
!             exit;
!          end if;
!       end loop;
  
     end Strip_Suffixes;
  
  end Exp_Dbug;
diff -Nrcpad gcc-3.4.3/gcc/ada/exp_dbug.ads gcc-4.0.0/gcc/ada/exp_dbug.ads
*** gcc-3.4.3/gcc/ada/exp_dbug.ads	Thu Oct 23 11:57:52 2003
--- gcc-4.0.0/gcc/ada/exp_dbug.ads	Fri Nov 19 10:57:35 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1996-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1996-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Exp_Dbug is
*** 99,121 ****
        --  subprograms, since overloading can legitimately result in a
        --  case of two entities with exactly the same fully qualified names.
        --  To distinguish between entries in a set of overloaded subprograms,
!       --  the encoded names are serialized by adding one of the suffixes:
  
-       --    $n    (dollar sign)
        --    __nn  (two underscores)
  
        --  where nn is a serial number (2 for the second overloaded function,
!       --  2 for the third, etc.). We use $ if this symbol is allowed, and
!       --  double underscore if it is not. In the remaining examples in this
!       --  section, we use a $ sign, but the $ is replaced by __ throughout
!       --  these examples if $ sign is not available. A suffix of $1 is
!       --  always omitted (i.e. no suffix implies the first instance).
  
        --  These names are prefixed by the normal full qualification. So
        --  for example, the third instance of the subprogram qrs in package
        --  yz would have the name:
  
!       --    yz__qrs$3
  
        --  A more subtle case arises with entities declared within overloaded
        --  subprograms. If we have two overloaded subprograms, and both declare
--- 99,117 ----
        --  subprograms, since overloading can legitimately result in a
        --  case of two entities with exactly the same fully qualified names.
        --  To distinguish between entries in a set of overloaded subprograms,
!       --  the encoded names are serialized by adding the suffix:
  
        --    __nn  (two underscores)
  
        --  where nn is a serial number (2 for the second overloaded function,
!       --  3 for the third, etc.). A suffix of __1 is always omitted (i.e. no
!       --  suffix implies the first instance).
  
        --  These names are prefixed by the normal full qualification. So
        --  for example, the third instance of the subprogram qrs in package
        --  yz would have the name:
  
!       --    yz__qrs__3
  
        --  A more subtle case arises with entities declared within overloaded
        --  subprograms. If we have two overloaded subprograms, and both declare
*************** package Exp_Dbug is
*** 128,134 ****
        --  we are talking about. For this purpose, we use a more complex suffix
        --  which has the form:
  
!       --    $nn_nn_nn ...
  
        --  where the nn values are the homonym numbers as needed for any of
        --  the qualifying entities, separated by a single underscore. If all
--- 124,130 ----
        --  we are talking about. For this purpose, we use a more complex suffix
        --  which has the form:
  
!       --    __nn_nn_nn ...
  
        --  where the nn values are the homonym numbers as needed for any of
        --  the qualifying entities, separated by a single underscore. If all
*************** package Exp_Dbug is
*** 141,153 ****
        --        procedure Tuv is ... end;    -- Name is yz__qrs__tuv
        --      begin ... end Qrs;
  
!       --      procedure Qrs (X: Int) is      -- Name is yz__qrs$2
!       --        procedure Tuv is ... end;    -- Name is yz__qrs__tuv$2_1
!       --        procedure Tuv (X: Int) is    -- Name is yz__qrs__tuv$2_2
        --        begin ... end Tuv;
  
!       --        procedure Tuv (X: Float) is  -- Name is yz__qrs__tuv$2_3
!       --          type m is new float;       -- Name is yz__qrs__tuv__m$2_3
        --        begin ... end Tuv;
        --      begin ... end Qrs;
        --    end Yz;
--- 137,149 ----
        --        procedure Tuv is ... end;    -- Name is yz__qrs__tuv
        --      begin ... end Qrs;
  
!       --      procedure Qrs (X: Int) is      -- Name is yz__qrs__2
!       --        procedure Tuv is ... end;    -- Name is yz__qrs__tuv__2_1
!       --        procedure Tuv (X: Int) is    -- Name is yz__qrs__tuv__2_2
        --        begin ... end Tuv;
  
!       --        procedure Tuv (X: Float) is  -- Name is yz__qrs__tuv__2_3
!       --          type m is new float;       -- Name is yz__qrs__tuv__m__2_3
        --        begin ... end Tuv;
        --      begin ... end Qrs;
        --    end Yz;
*************** package Exp_Dbug is
*** 358,365 ****
        --  calls from other operations on the same object. The locking operation
        --  simply acquires the lock, and then calls the non-locking version.
        --  The names of all of these have a prefix constructed from the name of
!       --  the type, the string "PT", and a suffix which is P or N, depending on
!       --  whether this is the protected/non-locking version of the operation.
  
        --  Operations generated for protected entries follow the same encoding.
        --  Each entry results in two suprograms: a procedure that holds the
--- 354,361 ----
        --  calls from other operations on the same object. The locking operation
        --  simply acquires the lock, and then calls the non-locking version.
        --  The names of all of these have a prefix constructed from the name of
!       --  the type, and a suffix which is P or N, depending on whether this is
!       --  the protected/non-locking version of the operation.
  
        --  Operations generated for protected entries follow the same encoding.
        --  Each entry results in two suprograms: a procedure that holds the
*************** package Exp_Dbug is
*** 380,393 ****
  
        --  the following operations are created:
  
!       --    lockPT_getN
!       --    lockPT_getP,
  
!       --    lockPT_setN
!       --    lockPT_setP
  
!       --    lockPT_update1sE
!       --    lockPT_udpate2sB
  
     ----------------------------------------------------
     -- Conversion between Entities and External Names --
--- 376,389 ----
  
        --  the following operations are created:
  
!       --    lock_getN
!       --    lock_getP,
  
!       --    lock_setN
!       --    lock_setP
  
!       --    lock_update1sE
!       --    lock_udpate2sB
  
     ----------------------------------------------------
     -- Conversion between Entities and External Names --
*************** package Exp_Dbug is
*** 498,515 ****
  
        --  In this case the compile generates a structure type y___PAD, which
        --  has a single field whose name is F. This single field is 64 bits
!       --  long and contains the actual value.
  
        --  A similar encapsulation is done for some packed array types,
!       --  in which case the structure type is y___LJM and the field name
!       --  is OBJECT.
  
        --  When the debugger sees an object of a type whose name has a
!       --  suffix not otherwise mentioned in this specification, the type
!       --  is a record containing a single field, and the name of that field
!       --  is all upper-case letters, it should look inside to get the value
!       --  of the field, and neither the outer structure name, nor the
!       --  field name should appear when the value is printed.
  
        -----------------------
        -- Fixed-Point Types --
--- 494,519 ----
  
        --  In this case the compile generates a structure type y___PAD, which
        --  has a single field whose name is F. This single field is 64 bits
!       --  long and contains the actual value. This kind of padding is used
!       --  when the logical value to be stored is shorter than the object in
!       --  which it is allocated. For example if a size clause is used to set
!       --  a size of 256 for a signed integer value, then a typical choice is
!       --  to wrap a 64-bit integer in a 256 bit PAD structure.
  
        --  A similar encapsulation is done for some packed array types,
!       --  in which case the structure type is y___JM and the field name
!       --  is OBJECT. This is used in the case of a packed array stored
!       --  in modular representation (see section on representation of
!       --  packed array objects). In this case the JM wrapping is used to
!       --  achieve correct positioning of the packed array value (left or
!       --  right justified in its field depending on endianness.
  
        --  When the debugger sees an object of a type whose name has a
!       --  suffix of ___PAD or ___JM, the type will be a record containing
!       --  a single field, and the name of that field will be all upper case.
!       --  In this case, it should look inside to get the value of the inner
!       --  field, and neither the outer structure name, nor the field name
!       --  should appear when the value is printed.
  
        -----------------------
        -- Fixed-Point Types --
*************** package Exp_Dbug is
*** 1078,1083 ****
--- 1082,1091 ----
     --  in this manner, it can use the original type to determine the bounds,
     --  and the component size to determine the packing details.
  
+    -------------------------------------------
+    -- Packed Array Representation in Memory --
+    -------------------------------------------
+ 
     --  Packed arrays are represented in tightly packed form, with no extra
     --  bits between components. This is true even when the component size
     --  is not a factor of the storage unit size, so that as a result it is
*************** package Exp_Dbug is
*** 1104,1110 ****
  
     --        BV'Address + 2   BV'Address + 1    BV'Address + 0
     --     +-----------------+-----------------+-----------------+
!    --     | 0 0 0 0 0 0 1 1 | 0 1 0 1 1 0 0 0 | 1 1 0 1 0 0 0 1 |
     --     +-----------------+-----------------+-----------------+
     --       <---------> <-----> <---> <---> <-----> <---> <--->
     --       unused bits  BV(5)  BV(4) BV(3)  BV(2)  BV(1) BV(0)
--- 1112,1118 ----
  
     --        BV'Address + 2   BV'Address + 1    BV'Address + 0
     --     +-----------------+-----------------+-----------------+
!    --     | ? ? ? ? ? ? 1 1 | 0 1 0 1 1 0 0 0 | 1 1 0 1 0 0 0 1 |
     --     +-----------------+-----------------+-----------------+
     --       <---------> <-----> <---> <---> <-----> <---> <--->
     --       unused bits  BV(5)  BV(4) BV(3)  BV(2)  BV(1) BV(0)
*************** package Exp_Dbug is
*** 1113,1123 ****
     --
     --        BV'Address + 0  BV'Address + 1    BV'Address + 2
     --     +-----------------+-----------------+-----------------+
!    --     | 0 0 1 0 1 0 0 1 | 1 1 0 0 1 0 1 1 | 1 0 0 0 0 0 0 0 |
     --     +-----------------+-----------------+-----------------+
     --       <---> <---> <-----> <---> <---> <-----> <--------->
     --       BV(0) BV(1)  BV(2)  BV(3) BV(4)  BV(5)  unused bits
  
     ------------------------------------------------------
     -- Subprograms for Handling Packed Array Type Names --
     ------------------------------------------------------
--- 1121,1188 ----
     --
     --        BV'Address + 0  BV'Address + 1    BV'Address + 2
     --     +-----------------+-----------------+-----------------+
!    --     | 0 0 1 0 1 0 0 1 | 1 1 0 0 1 0 1 1 | 1 0 ? ? ? ? ? ? |
     --     +-----------------+-----------------+-----------------+
     --       <---> <---> <-----> <---> <---> <-----> <--------->
     --       BV(0) BV(1)  BV(2)  BV(3) BV(4)  BV(5)  unused bits
  
+    --  Note that if a modular type is used to represent the array, the
+    --  allocation in memory is not the same as a normal modular type.
+    --  The difference occurs when the allocated object is larger than
+    --  the size of the array. For a normal modular type, we extend the
+    --  value on the left with zeroes.
+ 
+    --  For example, in the normal modular case, if we have a 6-bit
+    --  modular type, declared as mod 2**6, and we allocate an 8-bit
+    --  object for this type, then we extend the value with two bits
+    --  on the most significant end, and in either the little-endian
+    --  or big-endian case, the value 63 is represented as 00111111
+    --  in binary in memory.
+ 
+    --  For a modular type used to represent a packed array, the rule is
+    --  different. In this case, if we have to extend the value, then we
+    --  do it with undefined bits (which are not initialized and whose value
+    --  is irrelevant to any generated code). Furthermore these bits are on
+    --  the right (least significant bits) in the big-endian case, and on the
+    --  left (most significant bits) in the little-endian case.
+ 
+    --  For example, if we have a packed boolean array of 6 bits, all set
+    --  to True, stored in an 8-bit object, then the value in memory in
+    --  binary is ??111111 in the little-endian case, and 111111?? in the
+    --  big-endian case.
+ 
+    --  This is done so that the representation of packed arrays does not
+    --  depend on whether we use a modular representation or array of bytes
+    --  as previously described. This ensures that we can pass such values
+    --  by reference in the case where a subprogram has to be able to handle
+    --  values stored in either form.
+ 
+    --  Note that when we extract the value of such a modular packed array,
+    --  we expect to retrieve only the relevant bits, so in this same example,
+    --  when we extract the value, we get 111111 in both cases, and the code
+    --  generated by the front end assumes this, although it does not assume
+    --  that any high order bits are defined.
+ 
+    --  There are opportunities for optimization based on the knowledge that
+    --  the unused bits are irrelevant for these type of packed arrays. For
+    --  example if we have two such 6-bit-in-8-bit values and we do an
+    --  assignment:
+ 
+    --     a := b;
+ 
+    --  Then logically, we extract the 6 bits and store only 6 bits in the
+    --  result, but the back end is free to simply assign the entire 8-bits
+    --  in this case, since we don't actually care about the undefined bits.
+    --  However, in the equality case, it is important to ensure that the
+    --  undefined bits do not participate in an equality test.
+ 
+    --  If a modular packed array value is assigned to a register, then
+    --  logically it could always be held right justified, to avoid any
+    --  need to shift, e.g. when doing comparisons. But probably this is
+    --  a bad choice, as it would mean that an assignment such as a := b
+    --  above would require shifts when one value is in a register and the
+    --  other value is in memory.
+ 
     ------------------------------------------------------
     -- Subprograms for Handling Packed Array Type Names --
     ------------------------------------------------------
diff -Nrcpad gcc-3.4.3/gcc/ada/exp_disp.adb gcc-4.0.0/gcc/ada/exp_disp.adb
*** gcc-3.4.3/gcc/ada/exp_disp.adb	Wed Oct 29 10:26:14 2003
--- gcc-4.0.0/gcc/ada/exp_disp.adb	Thu Feb 10 13:50:43 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Exp_Disp is
*** 142,152 ****
     --  Check if the type has a private view or if the public view appears
     --  in the visible part of a package spec.
  
!    --------------------------
!    -- Expand_Dispatch_Call --
!    --------------------------
  
!    procedure Expand_Dispatch_Call (Call_Node : Node_Id) is
        Loc      : constant Source_Ptr := Sloc (Call_Node);
        Call_Typ : constant Entity_Id  := Etype (Call_Node);
  
--- 142,152 ----
     --  Check if the type has a private view or if the public view appears
     --  in the visible part of a package spec.
  
!    -----------------------------
!    -- Expand_Dispatching_Call --
!    -----------------------------
  
!    procedure Expand_Dispatching_Call (Call_Node : Node_Id) is
        Loc      : constant Source_Ptr := Sloc (Call_Node);
        Call_Typ : constant Entity_Id  := Etype (Call_Node);
  
*************** package body Exp_Disp is
*** 154,174 ****
        Param_List : constant List_Id := Parameter_Associations (Call_Node);
        Subp       : Entity_Id        := Entity (Name (Call_Node));
  
!       CW_Typ        : Entity_Id;
!       New_Call      : Node_Id;
!       New_Call_Name : Node_Id;
!       New_Params    : List_Id := No_List;
!       Param         : Node_Id;
!       Res_Typ       : Entity_Id;
!       Subp_Ptr_Typ  : Entity_Id;
!       Subp_Typ      : Entity_Id;
!       Typ           : Entity_Id;
!       Eq_Prim_Op    : Entity_Id := Empty;
  
        function New_Value (From : Node_Id) return Node_Id;
        --  From is the original Expression. New_Value is equivalent to a call
        --  to Duplicate_Subexpr with an explicit dereference when From is an
!       --  access parameter
  
        ---------------
        -- New_Value --
--- 154,178 ----
        Param_List : constant List_Id := Parameter_Associations (Call_Node);
        Subp       : Entity_Id        := Entity (Name (Call_Node));
  
!       CW_Typ          : Entity_Id;
!       New_Call        : Node_Id;
!       New_Call_Name   : Node_Id;
!       New_Params      : List_Id := No_List;
!       Param           : Node_Id;
!       Res_Typ         : Entity_Id;
!       Subp_Ptr_Typ    : Entity_Id;
!       Subp_Typ        : Entity_Id;
!       Typ             : Entity_Id;
!       Eq_Prim_Op      : Entity_Id := Empty;
!       Controlling_Tag : Node_Id;
  
        function New_Value (From : Node_Id) return Node_Id;
        --  From is the original Expression. New_Value is equivalent to a call
        --  to Duplicate_Subexpr with an explicit dereference when From is an
!       --  access parameter.
! 
!       function Controlling_Type (Subp : Entity_Id) return Entity_Id;
!       --  Returns the tagged type for which Subp is a primitive subprogram
  
        ---------------
        -- New_Value --
*************** package body Exp_Disp is
*** 176,182 ****
  
        function New_Value (From : Node_Id) return Node_Id is
           Res : constant Node_Id := Duplicate_Subexpr (From);
- 
        begin
           if Is_Access_Type (Etype (From)) then
              return Make_Explicit_Dereference (Sloc (From), Res);
--- 180,185 ----
*************** package body Exp_Disp is
*** 185,194 ****
           end if;
        end New_Value;
  
!    --  Start of processing for Expand_Dispatch_Call
  
     begin
!       --  If this is an inherited operation that was overriden, the body
        --  that is being called is its alias.
  
        if Present (Alias (Subp))
--- 188,232 ----
           end if;
        end New_Value;
  
!       ----------------------
!       -- Controlling_Type --
!       ----------------------
! 
!       function Controlling_Type (Subp : Entity_Id) return Entity_Id is
!       begin
!          if Ekind (Subp) = E_Function
!            and then Has_Controlling_Result (Subp)
!          then
!             return Base_Type (Etype (Subp));
! 
!          else
!             declare
!                Formal : Entity_Id := First_Formal (Subp);
! 
!             begin
!                while Present (Formal) loop
!                   if Is_Controlling_Formal (Formal) then
!                      if Is_Access_Type (Etype (Formal)) then
!                         return Base_Type (Designated_Type (Etype (Formal)));
!                      else
!                         return Base_Type (Etype (Formal));
!                      end if;
!                   end if;
! 
!                   Next_Formal (Formal);
!                end loop;
!             end;
!          end if;
! 
!          --  Controlling type not found (should never happen)
! 
!          return Empty;
!       end Controlling_Type;
! 
!    --  Start of processing for Expand_Dispatching_Call
  
     begin
!       --  If this is an inherited operation that was overridden, the body
        --  that is being called is its alias.
  
        if Present (Alias (Subp))
*************** package body Exp_Disp is
*** 198,214 ****
           Subp := Alias (Subp);
        end if;
  
!       --  Expand_Dispatch is called directly from the semantics, so we need
!       --  a check to see whether expansion is active before proceeding
  
        if not Expander_Active then
           return;
        end if;
  
!       --  Definition of the ClassWide Type and the Tagged type
  
!       if Is_Access_Type (Etype (Ctrl_Arg)) then
           CW_Typ := Designated_Type (Etype (Ctrl_Arg));
        else
           CW_Typ := Etype (Ctrl_Arg);
        end if;
--- 236,266 ----
           Subp := Alias (Subp);
        end if;
  
!       --  Expand_Dispatching_Call is called directly from the semantics,
!       --  so we need a check to see whether expansion is active before
!       --  proceeding.
  
        if not Expander_Active then
           return;
        end if;
  
!       --  Definition of the class-wide type and the tagged type
  
!       --  If the controlling argument is itself a tag rather than a tagged
!       --  object, then use the class-wide type associated with the subprogram's
!       --  controlling type. This case can occur when a call to an inherited
!       --  primitive has an actual that originated from a default parameter
!       --  given by a tag-indeterminate call and when there is no other
!       --  controlling argument providing the tag (AI-239 requires dispatching).
!       --  This capability of dispatching directly by tag is also needed by the
!       --  implementation of AI-260 (for the generic dispatching constructors).
! 
!       if Etype (Ctrl_Arg) = RTE (RE_Tag) then
!          CW_Typ := Class_Wide_Type (Controlling_Type (Subp));
! 
!       elsif Is_Access_Type (Etype (Ctrl_Arg)) then
           CW_Typ := Designated_Type (Etype (Ctrl_Arg));
+ 
        else
           CW_Typ := Etype (Ctrl_Arg);
        end if;
*************** package body Exp_Disp is
*** 291,297 ****
              elsif No (Find_Controlling_Arg (Param)) then
                 Append_To (New_Params, Relocate_Node (Param));
  
!             --  No tag check for function dispatching on result it the
              --  Tag given by the context is this one
  
              elsif Find_Controlling_Arg (Param) = Ctrl_Arg then
--- 343,349 ----
              elsif No (Find_Controlling_Arg (Param)) then
                 Append_To (New_Params, Relocate_Node (Param));
  
!             --  No tag check for function dispatching on result if the
              --  Tag given by the context is this one
  
              elsif Find_Controlling_Arg (Param) = Ctrl_Arg then
*************** package body Exp_Disp is
*** 362,368 ****
        if  Etype (Subp) = Typ then
           Res_Typ := CW_Typ;
        else
!          Res_Typ :=  Etype (Subp);
        end if;
  
        Subp_Typ := Create_Itype (E_Subprogram_Type, Call_Node);
--- 414,420 ----
        if  Etype (Subp) = Typ then
           Res_Typ := CW_Typ;
        else
!          Res_Typ := Etype (Subp);
        end if;
  
        Subp_Typ := Create_Itype (E_Subprogram_Type, Call_Node);
*************** package body Exp_Disp is
*** 389,397 ****
                 Set_Scope (New_Formal, Subp_Typ);
  
                 --  Change all the controlling argument types to be class-wide
!                --  to avoid a recursion in dispatching
  
!                if Is_Controlling_Actual (Param) then
                    Set_Etype (New_Formal, Etype (Param));
                 end if;
  
--- 441,449 ----
                 Set_Scope (New_Formal, Subp_Typ);
  
                 --  Change all the controlling argument types to be class-wide
!                --  to avoid a recursion in dispatching.
  
!                if Is_Controlling_Formal (New_Formal) then
                    Set_Etype (New_Formal, Etype (Param));
                 end if;
  
*************** package body Exp_Disp is
*** 443,448 ****
--- 495,514 ----
        Set_Etype (Subp_Ptr_Typ, Subp_Ptr_Typ);
        Set_Directly_Designated_Type (Subp_Ptr_Typ, Subp_Typ);
  
+       --  If the controlling argument is a value of type Ada.Tag then
+       --  use it directly.  Otherwise, the tag must be extracted from
+       --  the controlling object.
+ 
+       if Etype (Ctrl_Arg) = RTE (RE_Tag) then
+          Controlling_Tag := Duplicate_Subexpr (Ctrl_Arg);
+ 
+       else
+          Controlling_Tag :=
+            Make_Selected_Component (Loc,
+              Prefix => Duplicate_Subexpr_Move_Checks (Ctrl_Arg),
+              Selector_Name => New_Reference_To (DTC_Entity (Subp), Loc));
+       end if;
+ 
        --  Generate:
        --   Subp_Ptr_Typ!(Get_Prim_Op_Address (Ctrl._Tag, pos));
  
*************** package body Exp_Disp is
*** 454,462 ****
  
              --  Vptr
  
!               Make_Selected_Component (Loc,
!                 Prefix => Duplicate_Subexpr_Move_Checks (Ctrl_Arg),
!                 Selector_Name => New_Reference_To (DTC_Entity (Subp), Loc)),
  
              --  Position
  
--- 520,526 ----
  
              --  Vptr
  
!               Controlling_Tag,
  
              --  Position
  
*************** package body Exp_Disp is
*** 468,478 ****
               Name => New_Call_Name,
               Parameter_Associations => New_Params);
  
!          --  if this is a dispatching "=", we must first compare the tags so
           --  we generate: x.tag = y.tag and then x = y
  
           if Subp = Eq_Prim_Op then
- 
              Param := First_Actual (Call_Node);
              New_Call :=
                Make_And_Then (Loc,
--- 532,541 ----
               Name => New_Call_Name,
               Parameter_Associations => New_Params);
  
!          --  If this is a dispatching "=", we must first compare the tags so
           --  we generate: x.tag = y.tag and then x = y
  
           if Subp = Eq_Prim_Op then
              Param := First_Actual (Call_Node);
              New_Call :=
                Make_And_Then (Loc,
*************** package body Exp_Disp is
*** 504,510 ****
  
        Rewrite (Call_Node, New_Call);
        Analyze_And_Resolve (Call_Node, Call_Typ);
!    end Expand_Dispatch_Call;
  
     -------------
     -- Fill_DT --
--- 567,573 ----
  
        Rewrite (Call_Node, New_Call);
        Analyze_And_Resolve (Call_Node, Call_Typ);
!    end Expand_Dispatching_Call;
  
     -------------
     -- Fill_DT --
*************** package body Exp_Disp is
*** 651,656 ****
--- 714,724 ----
        --  or
        --    DT_Ptr : Vtable_Ptr := Vtable_Ptr!(DT'Address);   CPP case
  
+       --  According to the C++ ABI, the base of the vtable is located
+       --  after the following prologue: Offset_To_Top, Typeinfo_Ptr.
+       --  Hence, move the pointer to the base of the vtable down, after
+       --  this prologue.
+ 
        Append_To (Result,
          Make_Object_Declaration (Loc,
            Defining_Identifier => DT_Ptr,
*************** package body Exp_Disp is
*** 658,666 ****
            Object_Definition   => New_Reference_To (Generalized_Tag, Loc),
            Expression          =>
              Unchecked_Convert_To (Generalized_Tag,
!               Make_Attribute_Reference (Loc,
!                 Prefix         => New_Reference_To (DT, Loc),
!                 Attribute_Name => Name_Address))));
  
        --  Generate code to define the boolean that controls registration, in
        --  order to avoid multiple registrations for tagged types defined in
--- 726,740 ----
            Object_Definition   => New_Reference_To (Generalized_Tag, Loc),
            Expression          =>
              Unchecked_Convert_To (Generalized_Tag,
!               Make_Op_Add (Loc,
!                 Left_Opnd =>
!                   Unchecked_Convert_To (RTE (RE_Storage_Offset),
!                     Make_Attribute_Reference (Loc,
!                       Prefix         => New_Reference_To (DT, Loc),
!                       Attribute_Name => Name_Address)),
!                 Right_Opnd =>
!                   Make_DT_Access_Action (Typ,
!                     DT_Prologue_Size, No_List)))));
  
        --  Generate code to define the boolean that controls registration, in
        --  order to avoid multiple registrations for tagged types defined in
*************** package body Exp_Disp is
*** 876,899 ****
                 Node2 => Position)));
        end;
  
!       --  Generate: Set_Remotely_Callable (DT_Ptr, status);
!       --  where status is described in E.4 (18)
  
        declare
           Status : Entity_Id;
  
        begin
!          if Is_Pure (Typ)
!            or else Is_Shared_Passive (Typ)
!            or else
!              ((Is_Remote_Types (Typ) or else Is_Remote_Call_Interface (Typ))
!                  and then Original_View_In_Visible_Part (Typ))
!            or else not Comes_From_Source (Typ)
!          then
!             Status := Standard_True;
!          else
!             Status := Standard_False;
!          end if;
  
           Append_To (Elab_Code,
             Make_DT_Access_Action (Typ,
--- 950,971 ----
                 Node2 => Position)));
        end;
  
!       --  Generate: Set_Remotely_Callable (DT_Ptr, Status);
!       --  where Status is described in E.4 (18)
  
        declare
           Status : Entity_Id;
  
        begin
!          Status :=
!            Boolean_Literals
!              (Is_Pure (Typ)
!                 or else Is_Shared_Passive (Typ)
!                 or else
!                   ((Is_Remote_Types (Typ)
!                       or else Is_Remote_Call_Interface (Typ))
!                    and then Original_View_In_Visible_Part (Typ))
!                 or else not Comes_From_Source (Typ));
  
           Append_To (Elab_Code,
             Make_DT_Access_Action (Typ,
diff -Nrcpad gcc-3.4.3/gcc/ada/exp_disp.ads gcc-4.0.0/gcc/ada/exp_disp.ads
*** gcc-3.4.3/gcc/ada/exp_disp.ads	Thu Apr 24 17:54:01 2003
--- gcc-4.0.0/gcc/ada/exp_disp.ads	Thu Feb 10 13:50:43 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2001 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Exp_Disp is
*** 76,82 ****
     --  Class case check that no pragma CPP_Virtual is missing  and that the
     --  DT_Position are coherent
  
!    procedure Expand_Dispatch_Call (Call_Node : Node_Id);
     --  Expand the call to the operation through the dispatch table and perform
     --  the required tag checks when appropriate. For CPP types the call is
     --  done through the Vtable (tag checks are not relevant)
--- 76,82 ----
     --  Class case check that no pragma CPP_Virtual is missing  and that the
     --  DT_Position are coherent
  
!    procedure Expand_Dispatching_Call (Call_Node : Node_Id);
     --  Expand the call to the operation through the dispatch table and perform
     --  the required tag checks when appropriate. For CPP types the call is
     --  done through the Vtable (tag checks are not relevant)
diff -Nrcpad gcc-3.4.3/gcc/ada/exp_dist.adb gcc-4.0.0/gcc/ada/exp_dist.adb
*** gcc-3.4.3/gcc/ada/exp_dist.adb	Tue Jan 13 11:51:31 2004
--- gcc-4.0.0/gcc/ada/exp_dist.adb	Thu Feb 10 13:50:17 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Sem;         use Sem;
*** 41,54 ****
  with Sem_Ch3;     use Sem_Ch3;
  with Sem_Ch8;     use Sem_Ch8;
  with Sem_Dist;    use Sem_Dist;
  with Sem_Util;    use Sem_Util;
  with Sinfo;       use Sinfo;
  with Snames;      use Snames;
  with Stand;       use Stand;
  with Stringt;     use Stringt;
  with Tbuild;      use Tbuild;
  with Uintp;       use Uintp;
- with Uname;       use Uname;
  
  package body Exp_Dist is
  
--- 41,55 ----
  with Sem_Ch3;     use Sem_Ch3;
  with Sem_Ch8;     use Sem_Ch8;
  with Sem_Dist;    use Sem_Dist;
+ with Sem_Eval;    use Sem_Eval;
  with Sem_Util;    use Sem_Util;
  with Sinfo;       use Sinfo;
  with Snames;      use Snames;
  with Stand;       use Stand;
  with Stringt;     use Stringt;
  with Tbuild;      use Tbuild;
+ with Ttypes;      use Ttypes;
  with Uintp;       use Uintp;
  
  package body Exp_Dist is
  
*************** package body Exp_Dist is
*** 66,72 ****
     --       converted to and from this type to make it suitable for
     --       System.Partition_Interface.Get_Unique_Remote_Pointer in order
     --       to avoid memory leaks when the same remote object arrive on the
!    --       same partition by following different pathes
  
     --    2) It also has the same dispatching table as the designated type D,
     --       and thus can be used as an object designated by a value of type
--- 67,73 ----
     --       converted to and from this type to make it suitable for
     --       System.Partition_Interface.Get_Unique_Remote_Pointer in order
     --       to avoid memory leaks when the same remote object arrive on the
!    --       same partition through several paths;
  
     --    2) It also has the same dispatching table as the designated type D,
     --       and thus can be used as an object designated by a value of type
*************** package body Exp_Dist is
*** 76,127 ****
     --       to fake half a derivation to ensure that the subprograms do have
     --       the same dispatching table.
  
     -----------------------
     -- Local subprograms --
     -----------------------
  
!    procedure Build_General_Calling_Stubs
!      (Decls                     : in List_Id;
!       Statements                : in List_Id;
!       Target_Partition          : in Entity_Id;
!       RPC_Receiver              : in Node_Id;
!       Subprogram_Id             : in Node_Id;
!       Asynchronous              : in Node_Id := Empty;
!       Is_Known_Asynchronous     : in Boolean := False;
!       Is_Known_Non_Asynchronous : in Boolean := False;
!       Is_Function               : in Boolean;
!       Spec                      : in Node_Id;
!       Object_Type               : in Entity_Id := Empty;
!       Nod                       : in Node_Id);
!    --  Build calling stubs for general purpose. The parameters are:
!    --    Decls             : a place to put declarations
!    --    Statements        : a place to put statements
!    --    Target_Partition  : a node containing the target partition that must
!    --                        be a N_Defining_Identifier
!    --    RPC_Receiver      : a node containing the RPC receiver
!    --    Subprogram_Id     : a node containing the subprogram ID
!    --    Asynchronous      : True if an APC must be made instead of an RPC.
!    --                        The value needs not be supplied if one of the
!    --                        Is_Known_... is True.
!    --    Is_Known_Async... : True if we know that this is asynchronous
!    --    Is_Known_Non_A... : True if we know that this is not asynchronous
!    --    Spec              : a node with a Parameter_Specifications and
!    --                        a Subtype_Mark if applicable
!    --    Object_Type       : in case of a RACW, parameters of type access to
!    --                        Object_Type will be marshalled using the
!    --                        address of this object (the addr field) rather
!    --                        than using the 'Write on the object itself
!    --    Nod               : used to provide sloc for generated code
  
     function Build_Subprogram_Calling_Stubs
       (Vis_Decl                 : Node_Id;
!       Subp_Id                  : Int;
        Asynchronous             : Boolean;
        Dynamically_Asynchronous : Boolean   := False;
        Stub_Type                : Entity_Id := Empty;
        Locator                  : Entity_Id := Empty;
!       New_Name                 : Name_Id   := No_Name)
!       return                     Node_Id;
     --  Build the calling stub for a given subprogram with the subprogram ID
     --  being Subp_Id. If Stub_Type is given, then the "addr" field of
     --  parameters of this type will be marshalled instead of the object
--- 77,202 ----
     --       to fake half a derivation to ensure that the subprograms do have
     --       the same dispatching table.
  
+    First_RCI_Subprogram_Id : constant := 2;
+    --  RCI subprograms are numbered starting at 2. The RCI receiver for
+    --  an RCI package can thus identify calls received through remote
+    --  access-to-subprogram dereferences by the fact that they have a
+    --  (primitive) subprogram id of 0, and 1 is used for the internal
+    --  RAS information lookup operation. (This is for the Garlic code
+    --  generation, where subprograms are identified by numbers; in the
+    --  PolyORB version, they are identified by name, with a numeric suffix
+    --  for homonyms.)
+ 
+    type Hash_Index is range 0 .. 50;
+ 
     -----------------------
     -- Local subprograms --
     -----------------------
  
!    function Hash (F : Entity_Id) return Hash_Index;
!    --  DSA expansion associates stubs to distributed object types using
!    --  a hash table on entity ids.
! 
!    function Hash (F : Name_Id)   return Hash_Index;
!    --  The generation of subprogram identifiers requires an overload counter
!    --  to be associated with each remote subprogram names. These counters
!    --  are maintained in a hash table on name ids.
! 
!    type Subprogram_Identifiers is record
!       Str_Identifier : String_Id;
!       Int_Identifier : Int;
!    end record;
! 
!    package Subprogram_Identifier_Table is
!       new Simple_HTable (Header_Num => Hash_Index,
!                          Element    => Subprogram_Identifiers,
!                          No_Element => (No_String, 0),
!                          Key        => Entity_Id,
!                          Hash       => Hash,
!                          Equal      => "=");
!    --  Mapping between a remote subprogram and the corresponding
!    --  subprogram identifiers.
! 
!    package Overload_Counter_Table is
!       new Simple_HTable (Header_Num => Hash_Index,
!                          Element    => Int,
!                          No_Element => 0,
!                          Key        => Name_Id,
!                          Hash       => Hash,
!                          Equal      => "=");
!    --  Mapping between a subprogram name and an integer that
!    --  counts the number of defining subprogram names with that
!    --  Name_Id encountered so far in a given context (an interface).
! 
!    function Get_Subprogram_Ids (Def : Entity_Id) return Subprogram_Identifiers;
!    function Get_Subprogram_Id  (Def : Entity_Id) return String_Id;
!    function Get_Subprogram_Id  (Def : Entity_Id) return Int;
!    --  Given a subprogram defined in a RCI package, get its distribution
!    --  subprogram identifiers (the distribution identifiers are a unique
!    --  subprogram number, and the non-qualified subprogram name, in the
!    --  casing used for the subprogram declaration; if the name is overloaded,
!    --  a double underscore and a serial number are appended.
!    --
!    --  The integer identifier is used to perform remote calls with GARLIC;
!    --  the string identifier is used in the case of PolyORB.
!    --
!    --  Although the PolyORB DSA receiving stubs will make a caseless comparison
!    --  when receiving a call, the calling stubs will create requests with the
!    --  exact casing of the defining unit name of the called subprogram, so as
!    --  to allow calls to subprograms on distributed nodes that do distinguish
!    --  between casings.
!    --
!    --  NOTE: Another design would be to allow a representation clause on
!    --  subprogram specs: for Subp'Distribution_Identifier use "fooBar";
! 
!    pragma Warnings (Off, Get_Subprogram_Id);
!    --  One homonym only is unreferenced (specific to the GARLIC version)
! 
!    function Get_PCS_Name return PCS_Names;
!    --  Return the name of a literal of type
!    --    System.Partition_Interface.DSA_Implementation_Type
!    --  indicating what PCS is currently in use.
! 
!    procedure Add_RAS_Dereference_TSS (N : Node_Id);
!    --  Add a subprogram body for RAS Dereference TSS
! 
!    procedure Add_RAS_Proxy_And_Analyze
!      (Decls              : List_Id;
!       Vis_Decl           : Node_Id;
!       All_Calls_Remote_E : Entity_Id;
!       Proxy_Object_Addr  : out Entity_Id);
!    --  Add the proxy type necessary to call the subprogram declared
!    --  by Vis_Decl through a remote access to subprogram type.
!    --  All_Calls_Remote_E must be Standard_True if a pragma All_Calls_Remote
!    --  applies, Standard_False otherwise. The new proxy type is appended
!    --  to Decls. Proxy_Object_Addr is a constant of type System.Address that
!    --  designates an instance of the proxy object.
! 
!    function Build_Remote_Subprogram_Proxy_Type
!      (Loc            : Source_Ptr;
!       ACR_Expression : Node_Id) return Node_Id;
!    --  Build and return a tagged record type definition for an RCI
!    --  subprogram proxy type.
!    --  ACR_Expression is use as the initialization value for
!    --  the All_Calls_Remote component.
! 
!    function Build_Get_Unique_RP_Call
!      (Loc       : Source_Ptr;
!       Pointer   : Entity_Id;
!       Stub_Type : Entity_Id) return List_Id;
!    --  Build a call to Get_Unique_Remote_Pointer (Pointer), followed by a
!    --  tag fixup (Get_Unique_Remote_Pointer may have changed Pointer'Tag to
!    --  RACW_Stub_Type'Tag, while the desired tag is that of Stub_Type).
  
     function Build_Subprogram_Calling_Stubs
       (Vis_Decl                 : Node_Id;
!       Subp_Id                  : Node_Id;
        Asynchronous             : Boolean;
        Dynamically_Asynchronous : Boolean   := False;
        Stub_Type                : Entity_Id := Empty;
+       RACW_Type                : Entity_Id := Empty;
        Locator                  : Entity_Id := Empty;
!       New_Name                 : Name_Id   := No_Name) return Node_Id;
     --  Build the calling stub for a given subprogram with the subprogram ID
     --  being Subp_Id. If Stub_Type is given, then the "addr" field of
     --  parameters of this type will be marshalled instead of the object
*************** package body Exp_Dist is
*** 132,197 ****
     --  If Locator is not Empty, it will be used instead of RCI_Cache. If
     --  New_Name is given, then it will be used instead of the original name.
  
-    function Build_Subprogram_Receiving_Stubs
-      (Vis_Decl                 : Node_Id;
-       Asynchronous             : Boolean;
-       Dynamically_Asynchronous : Boolean   := False;
-       Stub_Type                : Entity_Id := Empty;
-       RACW_Type                : Entity_Id := Empty;
-       Parent_Primitive         : Entity_Id := Empty)
-       return                     Node_Id;
-    --  Build the receiving stub for a given subprogram. The subprogram
-    --  declaration is also built by this procedure, and the value returned
-    --  is a N_Subprogram_Body. If a parameter of type access to Stub_Type is
-    --  found in the specification, then its address is read from the stream
-    --  instead of the object itself and converted into an access to
-    --  class-wide type before doing the real call using any of the RACW type
-    --  pointing on the designated type.
- 
     function Build_RPC_Receiver_Specification
!      (RPC_Receiver     : Entity_Id;
!       Stream_Parameter : Entity_Id;
!       Result_Parameter : Entity_Id)
!       return Node_Id;
!    --  Make a subprogram specification for an RPC receiver,
!    --  with the given defining unit name and formal parameters.
  
     function Build_Ordered_Parameters_List (Spec : Node_Id) return List_Id;
     --  Return an ordered parameter list: unconstrained parameters are put
     --  at the beginning of the list and constrained ones are put after. If
!    --  there are no parameters, an empty list is returned.
  
     procedure Add_Calling_Stubs_To_Declarations
!      (Pkg_Spec : in Node_Id;
!       Decls    : in List_Id);
     --  Add calling stubs to the declarative part
  
-    procedure Add_Receiving_Stubs_To_Declarations
-      (Pkg_Spec : in Node_Id;
-       Decls    : in List_Id);
-    --  Add receiving stubs to the declarative part
- 
-    procedure Add_RAS_Dereference_Attribute (N : in Node_Id);
-    --  Add a subprogram body for RAS dereference
- 
-    procedure Add_RAS_Access_Attribute (N : in Node_Id);
-    --  Add a subprogram body for RAS Access attribute
- 
     function Could_Be_Asynchronous (Spec : Node_Id) return Boolean;
     --  Return True if nothing prevents the program whose specification is
     --  given to be asynchronous (i.e. no out parameter).
  
-    function Get_Pkg_Name_String_Id (Decl_Node : Node_Id) return String_Id;
-    function Get_String_Id (Val : String) return String_Id;
-    --  Ugly functions used to retrieve a package name. Inherited from the
-    --  old exp_dist.adb and not rewritten yet ???
- 
     function Pack_Entity_Into_Stream_Access
       (Loc    : Source_Ptr;
        Stream : Node_Id;
        Object : Entity_Id;
!       Etyp   : Entity_Id := Empty)
!       return   Node_Id;
     --  Pack Object (of type Etyp) into Stream. If Etyp is not given,
     --  then Etype (Object) will be used if present. If the type is
     --  constrained, then 'Write will be used to output the object,
--- 207,239 ----
     --  If Locator is not Empty, it will be used instead of RCI_Cache. If
     --  New_Name is given, then it will be used instead of the original name.
  
     function Build_RPC_Receiver_Specification
!      (RPC_Receiver      : Entity_Id;
!       Request_Parameter : Entity_Id) return Node_Id;
!    --  Make a subprogram specification for an RPC receiver, with the given
!    --  defining unit name and formal parameter.
  
     function Build_Ordered_Parameters_List (Spec : Node_Id) return List_Id;
     --  Return an ordered parameter list: unconstrained parameters are put
     --  at the beginning of the list and constrained ones are put after. If
!    --  there are no parameters, an empty list is returned. Special case:
!    --  the controlling formal of the equivalent RACW operation for a RAS
!    --  type is always left in first position.
  
     procedure Add_Calling_Stubs_To_Declarations
!      (Pkg_Spec : Node_Id;
!       Decls    : List_Id);
     --  Add calling stubs to the declarative part
  
     function Could_Be_Asynchronous (Spec : Node_Id) return Boolean;
     --  Return True if nothing prevents the program whose specification is
     --  given to be asynchronous (i.e. no out parameter).
  
     function Pack_Entity_Into_Stream_Access
       (Loc    : Source_Ptr;
        Stream : Node_Id;
        Object : Entity_Id;
!       Etyp   : Entity_Id := Empty) return Node_Id;
     --  Pack Object (of type Etyp) into Stream. If Etyp is not given,
     --  then Etype (Object) will be used if present. If the type is
     --  constrained, then 'Write will be used to output the object,
*************** package body Exp_Dist is
*** 201,262 ****
       (Loc    : Source_Ptr;
        Stream : Entity_Id;
        Object : Node_Id;
!       Etyp   : Entity_Id)
!       return   Node_Id;
     --  Similar to above, with an arbitrary node instead of an entity
  
     function Pack_Node_Into_Stream_Access
       (Loc    : Source_Ptr;
        Stream : Node_Id;
        Object : Node_Id;
!       Etyp   : Entity_Id)
!       return   Node_Id;
     --  Similar to above, with Stream instead of Stream'Access
  
!    function Copy_Specification
!      (Loc         : Source_Ptr;
!       Spec        : Node_Id;
!       Object_Type : Entity_Id := Empty;
!       Stub_Type   : Entity_Id := Empty;
!       New_Name    : Name_Id   := No_Name)
!       return        Node_Id;
!    --  Build a specification from another one. If Object_Type is not Empty
!    --  and any access to Object_Type is found, then it is replaced by an
!    --  access to Stub_Type. If New_Name is given, then it will be used as
!    --  the name for the newly created spec.
  
     function Scope_Of_Spec (Spec : Node_Id) return Entity_Id;
     --  Return the scope represented by a given spec
  
     function Need_Extra_Constrained (Parameter : Node_Id) return Boolean;
     --  Return True if the current parameter needs an extra formal to reflect
     --  its constrained status.
  
     function Is_RACW_Controlling_Formal
!      (Parameter : Node_Id; Stub_Type : Entity_Id)
!       return Boolean;
     --  Return True if the current parameter is a controlling formal argument
     --  of type Stub_Type or access to Stub_Type.
  
     type Stub_Structure is record
!       Stub_Type           : Entity_Id;
!       Stub_Type_Access    : Entity_Id;
!       Object_RPC_Receiver : Entity_Id;
!       RPC_Receiver_Stream : Entity_Id;
!       RPC_Receiver_Result : Entity_Id;
!       RACW_Type           : Entity_Id;
     end record;
     --  This structure is necessary because of the two phases analysis of
     --  a RACW declaration occurring in the same Remote_Types package as the
     --  designated type. RACW_Type is any of the RACW types pointing on this
     --  designated type, it is used here to save an anonymous type creation
     --  for each primitive operation.
  
     Empty_Stub_Structure : constant Stub_Structure :=
!      (Empty, Empty, Empty, Empty, Empty, Empty);
! 
!    type Hash_Index is range 0 .. 50;
!    function Hash (F : Entity_Id) return Hash_Index;
  
     package Stubs_Table is
        new Simple_HTable (Header_Num => Hash_Index,
--- 243,323 ----
       (Loc    : Source_Ptr;
        Stream : Entity_Id;
        Object : Node_Id;
!       Etyp   : Entity_Id) return Node_Id;
     --  Similar to above, with an arbitrary node instead of an entity
  
     function Pack_Node_Into_Stream_Access
       (Loc    : Source_Ptr;
        Stream : Node_Id;
        Object : Node_Id;
!       Etyp   : Entity_Id) return Node_Id;
     --  Similar to above, with Stream instead of Stream'Access
  
!    function Make_Selected_Component
!      (Loc           : Source_Ptr;
!       Prefix        : Entity_Id;
!       Selector_Name : Name_Id) return Node_Id;
!    --  Return a selected_component whose prefix denotes the given entity,
!    --  and with the given Selector_Name.
  
     function Scope_Of_Spec (Spec : Node_Id) return Entity_Id;
     --  Return the scope represented by a given spec
  
+    procedure Set_Renaming_TSS
+      (Typ     : Entity_Id;
+       Nam     : Entity_Id;
+       TSS_Nam : Name_Id);
+    --  Create a renaming declaration of subprogram Nam,
+    --  and register it as a TSS for Typ with name TSS_Nam.
+ 
     function Need_Extra_Constrained (Parameter : Node_Id) return Boolean;
     --  Return True if the current parameter needs an extra formal to reflect
     --  its constrained status.
  
     function Is_RACW_Controlling_Formal
!      (Parameter : Node_Id; Stub_Type : Entity_Id) return Boolean;
     --  Return True if the current parameter is a controlling formal argument
     --  of type Stub_Type or access to Stub_Type.
  
+    procedure Declare_Create_NVList
+      (Loc    : Source_Ptr;
+       NVList : Entity_Id;
+       Decls  : List_Id;
+       Stmts  : List_Id);
+    --  Append the declaration of NVList to Decls, and its
+    --  initialization to Stmts.
+ 
+    function Add_Parameter_To_NVList
+      (Loc         : Source_Ptr;
+       NVList      : Entity_Id;
+       Parameter   : Entity_Id;
+       Constrained : Boolean;
+       RACW_Ctrl   : Boolean := False;
+       Any         : Entity_Id) return Node_Id;
+    --  Return a call to Add_Item to add the Any corresponding
+    --  to the designated formal Parameter (with the indicated
+    --  Constrained status) to NVList. RACW_Ctrl must be set to
+    --  True for controlling formals of distributed object primitive
+    --  operations.
+ 
     type Stub_Structure is record
!       Stub_Type         : Entity_Id;
!       Stub_Type_Access  : Entity_Id;
!       RPC_Receiver_Decl : Node_Id;
!       RACW_Type         : Entity_Id;
     end record;
     --  This structure is necessary because of the two phases analysis of
     --  a RACW declaration occurring in the same Remote_Types package as the
     --  designated type. RACW_Type is any of the RACW types pointing on this
     --  designated type, it is used here to save an anonymous type creation
     --  for each primitive operation.
+    --
+    --  For a RACW that implements a RAS, no object RPC receiver is generated.
+    --  Instead, RPC_Receiver_Decl is the declaration after which the
+    --  RPC receiver would have been inserted.
  
     Empty_Stub_Structure : constant Stub_Structure :=
!      (Empty, Empty, Empty, Empty);
  
     package Stubs_Table is
        new Simple_HTable (Header_Num => Hash_Index,
*************** package body Exp_Dist is
*** 269,281 ****
  
     package Asynchronous_Flags_Table is
        new Simple_HTable (Header_Num => Hash_Index,
!                          Element    => Node_Id,
                           No_Element => Empty,
                           Key        => Entity_Id,
                           Hash       => Hash,
                           Equal      => "=");
!    --  Mapping between a RACW type and the node holding the value True if
!    --  the RACW is asynchronous and False otherwise.
  
     package RCI_Locator_Table is
        new Simple_HTable (Header_Num => Hash_Index,
--- 330,342 ----
  
     package Asynchronous_Flags_Table is
        new Simple_HTable (Header_Num => Hash_Index,
!                          Element    => Entity_Id,
                           No_Element => Empty,
                           Key        => Entity_Id,
                           Hash       => Hash,
                           Equal      => "=");
!    --  Mapping between a RACW type and a constant having the value True
!    --  if the RACW is asynchronous and False otherwise.
  
     package RCI_Locator_Table is
        new Simple_HTable (Header_Num => Hash_Index,
*************** package body Exp_Dist is
*** 285,291 ****
                           Hash       => Hash,
                           Equal      => "=");
     --  Mapping between a RCI package on which All_Calls_Remote applies and
!    --  the generic instantiation of RCI_Info for this package.
  
     package RCI_Calling_Stubs_Table is
        new Simple_HTable (Header_Num => Hash_Index,
--- 346,352 ----
                           Hash       => Hash,
                           Equal      => "=");
     --  Mapping between a RCI package on which All_Calls_Remote applies and
!    --  the generic instantiation of RCI_Locator for this package.
  
     package RCI_Calling_Stubs_Table is
        new Simple_HTable (Header_Num => Hash_Index,
*************** package body Exp_Dist is
*** 297,347 ****
     --  Mapping between a RCI subprogram and the corresponding calling stubs
  
     procedure Add_Stub_Type
!      (Designated_Type     : in Entity_Id;
!       RACW_Type           : in Entity_Id;
!       Decls               : in List_Id;
!       Stub_Type           : out Entity_Id;
!       Stub_Type_Access    : out Entity_Id;
!       Object_RPC_Receiver : out Entity_Id;
!       Existing            : out Boolean);
     --  Add the declaration of the stub type, the access to stub type and the
     --  object RPC receiver at the end of Decls. If these already exist,
     --  then nothing is added in the tree but the right values are returned
     --  anyhow and Existing is set to True.
  
!    procedure Add_RACW_Read_Attribute
!      (RACW_Type           : in Entity_Id;
!       Stub_Type           : in Entity_Id;
!       Stub_Type_Access    : in Entity_Id;
!       Declarations        : in List_Id);
!    --  Add Read attribute in Decls for the RACW type. The Read attribute
!    --  is added right after the RACW_Type declaration while the body is
!    --  inserted after Declarations.
! 
!    procedure Add_RACW_Write_Attribute
!      (RACW_Type           : in Entity_Id;
!       Stub_Type           : in Entity_Id;
!       Stub_Type_Access    : in Entity_Id;
!       Object_RPC_Receiver : in Entity_Id;
!       Declarations        : in List_Id);
!    --  Same thing for the Write attribute
  
!    procedure Add_RACW_Read_Write_Attributes
!      (RACW_Type           : in Entity_Id;
!       Stub_Type           : in Entity_Id;
!       Stub_Type_Access    : in Entity_Id;
!       Object_RPC_Receiver : in Entity_Id;
!       Declarations        : in List_Id);
!    --  Add Read and Write attributes declarations and bodies for a given
!    --  RACW type. The declarations are added just after the declaration
!    --  of the RACW type itself, while the bodies are inserted at the end
!    --  of Decls.
  
     function RCI_Package_Locator
       (Loc          : Source_Ptr;
!       Package_Spec : Node_Id)
!       return         Node_Id;
!    --  Instantiate the generic package RCI_Info in order to locate the
     --  RCI package whose spec is given as argument.
  
     function Make_Tag_Check (Loc : Source_Ptr; N : Node_Id) return Node_Id;
--- 358,394 ----
     --  Mapping between a RCI subprogram and the corresponding calling stubs
  
     procedure Add_Stub_Type
!      (Designated_Type   : Entity_Id;
!       RACW_Type         : Entity_Id;
!       Decls             : List_Id;
!       Stub_Type         : out Entity_Id;
!       Stub_Type_Access  : out Entity_Id;
!       RPC_Receiver_Decl : out Node_Id;
!       Existing          : out Boolean);
     --  Add the declaration of the stub type, the access to stub type and the
     --  object RPC receiver at the end of Decls. If these already exist,
     --  then nothing is added in the tree but the right values are returned
     --  anyhow and Existing is set to True.
  
!    procedure Add_RACW_Asynchronous_Flag
!      (Declarations : List_Id;
!       RACW_Type    : Entity_Id);
!    --  Declare a boolean constant associated with RACW_Type whose value
!    --  indicates at run time whether a pragma Asynchronous applies to it.
  
!    procedure Assign_Subprogram_Identifier
!      (Def : Entity_Id;
!       Spn : Int;
!       Id  : out String_Id);
!    --  Determine the distribution subprogram identifier to
!    --  be used for remote subprogram Def, return it in Id and
!    --  store it in a hash table for later retrieval by
!    --  Get_Subprogram_Id. Spn is the subprogram number.
  
     function RCI_Package_Locator
       (Loc          : Source_Ptr;
!       Package_Spec : Node_Id) return Node_Id;
!    --  Instantiate the generic package RCI_Locator in order to locate the
     --  RCI package whose spec is given as argument.
  
     function Make_Tag_Check (Loc : Source_Ptr; N : Node_Id) return Node_Id;
*************** package body Exp_Dist is
*** 357,364 ****
     function Input_With_Tag_Check
       (Loc      : Source_Ptr;
        Var_Type : Entity_Id;
!       Stream   : Entity_Id)
!      return Node_Id;
     --  Return a function with the following form:
     --    function R return Var_Type is
     --    begin
--- 404,410 ----
     function Input_With_Tag_Check
       (Loc      : Source_Ptr;
        Var_Type : Entity_Id;
!       Stream   : Node_Id) return Node_Id;
     --  Return a function with the following form:
     --    function R return Var_Type is
     --    begin
*************** package body Exp_Dist is
*** 369,379 ****
--- 415,818 ----
     --                            Exception_Message (E));
     --    end R;
  
+    --------------------------------------------
+    -- Hooks for PCS-specific code generation --
+    --------------------------------------------
+ 
+    --  Part of the code generation circuitry for distribution needs to be
+    --  tailored for each implementation of the PCS. For each routine that
+    --  needs to be specialized, a Specific_<routine> wrapper is created,
+    --  which calls the corresponding <routine> in package
+    --  <pcs_implementation>_Support.
+ 
+    procedure Specific_Add_RACW_Features
+      (RACW_Type           : Entity_Id;
+       Desig               : Entity_Id;
+       Stub_Type           : Entity_Id;
+       Stub_Type_Access    : Entity_Id;
+       RPC_Receiver_Decl   : Node_Id;
+       Declarations        : List_Id);
+    --  Add declaration for TSSs for a given RACW type. The declarations are
+    --  added just after the declaration of the RACW type itself, while the
+    --  bodies are inserted at the end of Decls. Runtime-specific ancillary
+    --  subprogram for Add_RACW_Features.
+ 
+    procedure Specific_Add_RAST_Features
+      (Vis_Decl : Node_Id;
+       RAS_Type : Entity_Id;
+       Decls    : List_Id);
+    --  Add declaration for TSSs for a given RAS type. The declarations are
+    --  added just after the declaration of the RAS type itself, while the
+    --  bodies are inserted at the end of Decls. PCS-specific ancillary
+    --  subprogram for Add_RAST_Features.
+ 
+    --  An RPC_Target record is used during construction of calling stubs
+    --  to pass PCS-specific tree fragments corresponding to the information
+    --  necessary to locate the target of a remote subprogram call.
+ 
+    type RPC_Target (PCS_Kind : PCS_Names) is record
+       case PCS_Kind is
+          when Name_PolyORB_DSA =>
+             Object       : Node_Id;
+             --  An expression whose value is a PolyORB reference to the target
+             --  object.
+          when others           =>
+             Partition    : Entity_Id;
+             --  A variable containing the Partition_ID of the target parition
+ 
+             RPC_Receiver : Node_Id;
+             --  An expression whose value is the address of the target RPC
+             --  receiver.
+       end case;
+    end record;
+ 
+    procedure Specific_Build_General_Calling_Stubs
+      (Decls                     : List_Id;
+       Statements                : List_Id;
+       Target                    : RPC_Target;
+       Subprogram_Id             : Node_Id;
+       Asynchronous              : Node_Id := Empty;
+       Is_Known_Asynchronous     : Boolean := False;
+       Is_Known_Non_Asynchronous : Boolean := False;
+       Is_Function               : Boolean;
+       Spec                      : Node_Id;
+       Stub_Type                 : Entity_Id := Empty;
+       RACW_Type                 : Entity_Id := Empty;
+       Nod                       : Node_Id);
+    --  Build calling stubs for general purpose. The parameters are:
+    --    Decls             : a place to put declarations
+    --    Statements        : a place to put statements
+    --    Target            : PCS-specific target information (see details
+    --                        in RPC_Target declaration).
+    --    Subprogram_Id     : a node containing the subprogram ID
+    --    Asynchronous      : True if an APC must be made instead of an RPC.
+    --                        The value needs not be supplied if one of the
+    --                        Is_Known_... is True.
+    --    Is_Known_Async... : True if we know that this is asynchronous
+    --    Is_Known_Non_A... : True if we know that this is not asynchronous
+    --    Spec              : a node with a Parameter_Specifications and
+    --                        a Subtype_Mark if applicable
+    --    Stub_Type         : in case of RACW stubs, parameters of type access
+    --                        to Stub_Type will be marshalled using the
+    --                        address of the object (the addr field) rather
+    --                        than using the 'Write on the stub itself
+    --    Nod               : used to provide sloc for generated code
+ 
+    function Specific_Build_Stub_Target
+      (Loc                   : Source_Ptr;
+       Decls                 : List_Id;
+       RCI_Locator           : Entity_Id;
+       Controlling_Parameter : Entity_Id) return RPC_Target;
+    --  Build call target information nodes for use within calling stubs. In the
+    --  RCI case, RCI_Locator is the entity for the instance of RCI_Locator. If
+    --  for an RACW, Controlling_Parameter is the entity for the controlling
+    --  formal parameter used to determine the location of the target of the
+    --  call. Decls provides a location where variable declarations can be
+    --  appended to construct the necessary values.
+ 
+    procedure Specific_Build_Stub_Type
+      (RACW_Type         : Entity_Id;
+       Stub_Type         : Entity_Id;
+       Stub_Type_Decl    : out Node_Id;
+       RPC_Receiver_Decl : out Node_Id);
+    --  Build a type declaration for the stub type associated with an RACW
+    --  type, and the necessary RPC receiver, if applicable. PCS-specific
+    --  ancillary subprogram for Add_Stub_Type. If no RPC receiver declaration
+    --  is generated, then RPC_Receiver_Decl is set to Empty.
+ 
+    procedure Specific_Build_RPC_Receiver_Body
+      (RPC_Receiver : Entity_Id;
+       Request      : out Entity_Id;
+       Subp_Id      : out Entity_Id;
+       Subp_Index   : out Entity_Id;
+       Stmts        : out List_Id;
+       Decl         : out Node_Id);
+    --  Make a subprogram body for an RPC receiver, with the given
+    --  defining unit name. On return:
+    --    - Subp_Id is the subprogram identifier from the PCS.
+    --    - Subp_Index is the index in the list of subprograms
+    --      used for dispatching (a variable of type Subprogram_Id).
+    --    - Stmts is the place where the request dispatching
+    --      statements can occur,
+    --    - Decl is the subprogram body declaration.
+ 
+    function Specific_Build_Subprogram_Receiving_Stubs
+      (Vis_Decl                 : Node_Id;
+       Asynchronous             : Boolean;
+       Dynamically_Asynchronous : Boolean   := False;
+       Stub_Type                : Entity_Id := Empty;
+       RACW_Type                : Entity_Id := Empty;
+       Parent_Primitive         : Entity_Id := Empty) return Node_Id;
+    --  Build the receiving stub for a given subprogram. The subprogram
+    --  declaration is also built by this procedure, and the value returned
+    --  is a N_Subprogram_Body. If a parameter of type access to Stub_Type is
+    --  found in the specification, then its address is read from the stream
+    --  instead of the object itself and converted into an access to
+    --  class-wide type before doing the real call using any of the RACW type
+    --  pointing on the designated type.
+ 
+    procedure Specific_Add_Obj_RPC_Receiver_Completion
+      (Loc           : Source_Ptr;
+       Decls         : List_Id;
+       RPC_Receiver  : Entity_Id;
+       Stub_Elements : Stub_Structure);
+    --  Add the necessary code to Decls after the completion of generation
+    --  of the RACW RPC receiver described by Stub_Elements.
+ 
+    procedure Specific_Add_Receiving_Stubs_To_Declarations
+      (Pkg_Spec : Node_Id;
+       Decls    : List_Id);
+    --  Add receiving stubs to the declarative part of an RCI unit
+ 
+    package GARLIC_Support is
+ 
+       --  Support for generating DSA code that uses the GARLIC PCS
+ 
+       --  The subprograms below provide the GARLIC versions of
+       --  the corresponding Specific_<subprogram> routine declared
+       --  above.
+ 
+       procedure Add_RACW_Features
+         (RACW_Type         : Entity_Id;
+          Stub_Type         : Entity_Id;
+          Stub_Type_Access  : Entity_Id;
+          RPC_Receiver_Decl : Node_Id;
+          Declarations      : List_Id);
+ 
+       procedure Add_RAST_Features
+         (Vis_Decl : Node_Id;
+          RAS_Type : Entity_Id;
+          Decls    : List_Id);
+ 
+       procedure Build_General_Calling_Stubs
+         (Decls                     : List_Id;
+          Statements                : List_Id;
+          Target_Partition          : Entity_Id; --  From RPC_Target
+          Target_RPC_Receiver       : Node_Id;   --  From RPC_Target
+          Subprogram_Id             : Node_Id;
+          Asynchronous              : Node_Id := Empty;
+          Is_Known_Asynchronous     : Boolean := False;
+          Is_Known_Non_Asynchronous : Boolean := False;
+          Is_Function               : Boolean;
+          Spec                      : Node_Id;
+          Stub_Type                 : Entity_Id := Empty;
+          RACW_Type                 : Entity_Id := Empty;
+          Nod                       : Node_Id);
+ 
+       function Build_Stub_Target
+         (Loc                   : Source_Ptr;
+          Decls                 : List_Id;
+          RCI_Locator           : Entity_Id;
+          Controlling_Parameter : Entity_Id) return RPC_Target;
+ 
+       procedure Build_Stub_Type
+         (RACW_Type : Entity_Id;
+          Stub_Type : Entity_Id;
+          Stub_Type_Decl    : out Node_Id;
+          RPC_Receiver_Decl : out Node_Id);
+ 
+       function Build_Subprogram_Receiving_Stubs
+         (Vis_Decl                 : Node_Id;
+          Asynchronous             : Boolean;
+          Dynamically_Asynchronous : Boolean   := False;
+          Stub_Type                : Entity_Id := Empty;
+          RACW_Type                : Entity_Id := Empty;
+          Parent_Primitive         : Entity_Id := Empty) return Node_Id;
+ 
+       procedure Add_Obj_RPC_Receiver_Completion
+         (Loc           : Source_Ptr;
+          Decls         : List_Id;
+          RPC_Receiver  : Entity_Id;
+          Stub_Elements : Stub_Structure);
+ 
+       procedure Add_Receiving_Stubs_To_Declarations
+         (Pkg_Spec : Node_Id;
+          Decls    : List_Id);
+ 
+       procedure Build_RPC_Receiver_Body
+         (RPC_Receiver : Entity_Id;
+          Request      : out Entity_Id;
+          Subp_Id      : out Entity_Id;
+          Subp_Index   : out Entity_Id;
+          Stmts        : out List_Id;
+          Decl         : out Node_Id);
+ 
+    end GARLIC_Support;
+ 
+    package PolyORB_Support is
+ 
+       --  Support for generating DSA code that uses the PolyORB PCS
+ 
+       --  The subprograms below provide the PolyORB versions of
+       --  the corresponding Specific_<subprogram> routine declared
+       --  above.
+ 
+       procedure Add_RACW_Features
+         (RACW_Type         : Entity_Id;
+          Desig             : Entity_Id;
+          Stub_Type         : Entity_Id;
+          Stub_Type_Access  : Entity_Id;
+          RPC_Receiver_Decl : Node_Id;
+          Declarations      : List_Id);
+ 
+       procedure Add_RAST_Features
+         (Vis_Decl : Node_Id;
+          RAS_Type : Entity_Id;
+          Decls    : List_Id);
+ 
+       procedure Build_General_Calling_Stubs
+         (Decls                     : List_Id;
+          Statements                : List_Id;
+          Target_Object             : Node_Id; --  From RPC_Target
+          Subprogram_Id             : Node_Id;
+          Asynchronous              : Node_Id := Empty;
+          Is_Known_Asynchronous     : Boolean := False;
+          Is_Known_Non_Asynchronous : Boolean := False;
+          Is_Function               : Boolean;
+          Spec                      : Node_Id;
+          Stub_Type                 : Entity_Id := Empty;
+          RACW_Type                 : Entity_Id := Empty;
+          Nod                       : Node_Id);
+ 
+       function Build_Stub_Target
+         (Loc                   : Source_Ptr;
+          Decls                 : List_Id;
+          RCI_Locator           : Entity_Id;
+          Controlling_Parameter : Entity_Id) return RPC_Target;
+ 
+       procedure Build_Stub_Type
+         (RACW_Type         : Entity_Id;
+          Stub_Type         : Entity_Id;
+          Stub_Type_Decl    : out Node_Id;
+          RPC_Receiver_Decl : out Node_Id);
+ 
+       function Build_Subprogram_Receiving_Stubs
+         (Vis_Decl                 : Node_Id;
+          Asynchronous             : Boolean;
+          Dynamically_Asynchronous : Boolean   := False;
+          Stub_Type                : Entity_Id := Empty;
+          RACW_Type                : Entity_Id := Empty;
+          Parent_Primitive         : Entity_Id := Empty) return Node_Id;
+ 
+       procedure Add_Obj_RPC_Receiver_Completion
+         (Loc           : Source_Ptr;
+          Decls         : List_Id;
+          RPC_Receiver  : Entity_Id;
+          Stub_Elements : Stub_Structure);
+ 
+       procedure Add_Receiving_Stubs_To_Declarations
+         (Pkg_Spec : Node_Id;
+          Decls    : List_Id);
+ 
+       procedure Build_RPC_Receiver_Body
+         (RPC_Receiver : Entity_Id;
+          Request      : out Entity_Id;
+          Subp_Id      : out Entity_Id;
+          Subp_Index   : out Entity_Id;
+          Stmts        : out List_Id;
+          Decl         : out Node_Id);
+ 
+       procedure Reserve_NamingContext_Methods;
+       --  Mark the method names for interface NamingContext as already used in
+       --  the overload table, so no clashes occur with user code (with the
+       --  PolyORB PCS, RCIs Implement The NamingContext interface to allow
+       --  their methods to be accessed as objects, for the implementation of
+       --  remote access-to-subprogram types).
+ 
+       package Helpers is
+ 
+          --  Routines to build distribtion helper subprograms for user-defined
+          --  types. For implementation of the Distributed systems annex (DSA)
+          --  over the PolyORB generic middleware components, it is necessary to
+          --  generate several supporting subprograms for each application data
+          --  type used in inter-partition communication. These subprograms are:
+          --    * a Typecode function returning a high-level description of the
+          --      type's structure;
+          --    * two conversion functions allowing conversion of values of the
+          --      type from and to the generic data containers used by PolyORB.
+          --      These generic containers are called 'Any' type values after
+          --      the CORBA terminology, and hence the conversion subprograms
+          --      are named To_Any and From_Any.
+ 
+          function Build_From_Any_Call
+            (Typ   : Entity_Id;
+             N     : Node_Id;
+             Decls : List_Id) return Node_Id;
+          --  Build call to From_Any attribute function of type Typ with
+          --  expression N as actual parameter. Decls is the declarations list
+          --  for an appropriate enclosing scope of the point where the call
+          --  will be inserted; if the From_Any attribute for Typ needs to be
+          --  generated at this point, its declaration is appended to Decls.
+ 
+          procedure Build_From_Any_Function
+            (Loc  : Source_Ptr;
+             Typ  : Entity_Id;
+             Decl : out Node_Id;
+             Fnam : out Entity_Id);
+          --  Build From_Any attribute function for Typ. Loc is the reference
+          --  location for generated nodes, Typ is the type for which the
+          --  conversion function is generated. On return, Decl and Fnam contain
+          --  the declaration and entity for the newly-created function.
+ 
+          function Build_To_Any_Call
+            (N     : Node_Id;
+             Decls : List_Id) return Node_Id;
+          --  Build call to To_Any attribute function with expression as actual
+          --  parameter. Decls is the declarations list for an appropriate
+          --  enclosing scope of the point where the call will be inserted; if
+          --  the To_Any attribute for Typ needs to be generated at this point,
+          --  its declaration is appended to Decls.
+ 
+          procedure Build_To_Any_Function
+            (Loc  : Source_Ptr;
+             Typ  : Entity_Id;
+             Decl : out Node_Id;
+             Fnam : out Entity_Id);
+          --  Build To_Any attribute function for Typ. Loc is the reference
+          --  location for generated nodes, Typ is the type for which the
+          --  conversion function is generated. On return, Decl and Fnam contain
+          --  the declaration and entity for the newly-created function.
+ 
+          function Build_TypeCode_Call
+            (Loc   : Source_Ptr;
+             Typ   : Entity_Id;
+             Decls : List_Id) return Node_Id;
+          --  Build call to TypeCode attribute function for Typ. Decls is the
+          --  declarations list for an appropriate enclosing scope of the point
+          --  where the call will be inserted; if the To_Any attribute for Typ
+          --  needs to be generated at this point, its declaration is appended
+          --  to Decls.
+ 
+          procedure Build_TypeCode_Function
+            (Loc  : Source_Ptr;
+             Typ  : Entity_Id;
+             Decl : out Node_Id;
+             Fnam : out Entity_Id);
+          --  Build TypeCode attribute function for Typ. Loc is the reference
+          --  location for generated nodes, Typ is the type for which the
+          --  conversion function is generated. On return, Decl and Fnam contain
+          --  the declaration and entity for the newly-created function.
+ 
+          procedure Build_Name_And_Repository_Id
+            (E           : Entity_Id;
+             Name_Str    : out String_Id;
+             Repo_Id_Str : out String_Id);
+          --  In the PolyORB distribution model, each distributed object type
+          --  and each distributed operation has a globally unique identifier,
+          --  its Repository Id. This subprogram builds and returns two strings
+          --  for entity E (a distributed object type or operation): one
+          --  containing the name of E, the second containing its repository id.
+ 
+       end Helpers;
+ 
+    end PolyORB_Support;
+ 
     ------------------------------------
     -- Local variables and structures --
     ------------------------------------
  
     RCI_Cache : Node_Id;
+    --  Needs comments ???
  
     Output_From_Constrained : constant array (Boolean) of Name_Id :=
       (False => Name_Output,
*************** package body Exp_Dist is
*** 388,408 ****
     ---------------------------------------
  
     procedure Add_Calling_Stubs_To_Declarations
!      (Pkg_Spec : in Node_Id;
!       Decls    : in List_Id)
     is
!       Current_Subprogram_Number : Int := 0;
!       Current_Declaration       : Node_Id;
  
        Loc                       : constant Source_Ptr := Sloc (Pkg_Spec);
- 
        RCI_Instantiation         : Node_Id;
- 
        Subp_Stubs                : Node_Id;
  
     begin
        --  The first thing added is an instantiation of the generic package
!       --  System.Partition_interface.RCI_Info with the name of the (current)
        --  remote package. This will act as an interface with the name server
        --  to determine the Partition_ID and the RPC_Receiver for the
        --  receiver of this package.
--- 827,848 ----
     ---------------------------------------
  
     procedure Add_Calling_Stubs_To_Declarations
!      (Pkg_Spec : Node_Id;
!       Decls    : List_Id)
     is
!       Current_Subprogram_Number : Int := First_RCI_Subprogram_Id;
!       --  Subprogram id 0 is reserved for calls received from
!       --  remote access-to-subprogram dereferences.
  
+       Current_Declaration       : Node_Id;
        Loc                       : constant Source_Ptr := Sloc (Pkg_Spec);
        RCI_Instantiation         : Node_Id;
        Subp_Stubs                : Node_Id;
+       Subp_Str                  : String_Id;
  
     begin
        --  The first thing added is an instantiation of the generic package
!       --  System.Partition_Interface.RCI_Locator with the name of this
        --  remote package. This will act as an interface with the name server
        --  to determine the Partition_ID and the RPC_Receiver for the
        --  receiver of this package.
*************** package body Exp_Dist is
*** 419,439 ****
        --  do use the same mechanism and will thus assign the same Id and
        --  do the correct dispatching.
  
!       Current_Declaration := First (Visible_Declarations (Pkg_Spec));
  
!       while Current_Declaration /= Empty loop
  
           if Nkind (Current_Declaration) = N_Subprogram_Declaration
             and then Comes_From_Source (Current_Declaration)
           then
!             pragma Assert (Current_Subprogram_Number =
!               Get_Subprogram_Id (Defining_Unit_Name (Specification (
!                 Current_Declaration))));
  
              Subp_Stubs :=
                Build_Subprogram_Calling_Stubs (
                  Vis_Decl     => Current_Declaration,
!                 Subp_Id      => Current_Subprogram_Number,
                  Asynchronous =>
                    Nkind (Specification (Current_Declaration)) =
                      N_Procedure_Specification
--- 859,884 ----
        --  do use the same mechanism and will thus assign the same Id and
        --  do the correct dispatching.
  
!       Overload_Counter_Table.Reset;
!       PolyORB_Support.Reserve_NamingContext_Methods;
  
!       Current_Declaration := First (Visible_Declarations (Pkg_Spec));
  
+       while Present (Current_Declaration) loop
           if Nkind (Current_Declaration) = N_Subprogram_Declaration
             and then Comes_From_Source (Current_Declaration)
           then
!             Assign_Subprogram_Identifier (
!               Defining_Unit_Name (Specification (Current_Declaration)),
!               Current_Subprogram_Number,
!               Subp_Str);
  
              Subp_Stubs :=
                Build_Subprogram_Calling_Stubs (
                  Vis_Decl     => Current_Declaration,
!                 Subp_Id      =>
!                   Build_Subprogram_Id (Loc,
!                     Defining_Unit_Name (Specification (Current_Declaration))),
                  Asynchronous =>
                    Nkind (Specification (Current_Declaration)) =
                      N_Procedure_Specification
*************** package body Exp_Dist is
*** 449,462 ****
  
           Next (Current_Declaration);
        end loop;
- 
     end Add_Calling_Stubs_To_Declarations;
  
     -----------------------
     -- Add_RACW_Features --
     -----------------------
  
!    procedure Add_RACW_Features (RACW_Type : in Entity_Id)
     is
        Desig : constant Entity_Id :=
                  Etype (Designated_Type (RACW_Type));
--- 894,1027 ----
  
           Next (Current_Declaration);
        end loop;
     end Add_Calling_Stubs_To_Declarations;
  
+    -----------------------------
+    -- Add_Parameter_To_NVList --
+    -----------------------------
+ 
+    function Add_Parameter_To_NVList
+      (Loc         : Source_Ptr;
+       NVList      : Entity_Id;
+       Parameter   : Entity_Id;
+       Constrained : Boolean;
+       RACW_Ctrl   : Boolean := False;
+       Any         : Entity_Id) return Node_Id
+    is
+       Parameter_Name_String : String_Id;
+       Parameter_Mode        : Node_Id;
+ 
+       function Parameter_Passing_Mode
+         (Loc         : Source_Ptr;
+          Parameter   : Entity_Id;
+          Constrained : Boolean) return Node_Id;
+       --  Return an expression that denotes the parameter passing
+       --  mode to be used for Parameter in distribution stubs,
+       --  where Constrained is Parameter's constrained status.
+ 
+       ----------------------------
+       -- Parameter_Passing_Mode --
+       ----------------------------
+ 
+       function Parameter_Passing_Mode
+         (Loc         : Source_Ptr;
+          Parameter   : Entity_Id;
+          Constrained : Boolean) return Node_Id
+       is
+          Lib_RE : RE_Id;
+ 
+       begin
+          if Out_Present (Parameter) then
+             if In_Present (Parameter)
+               or else not Constrained
+             then
+                --  Unconstrained formals must be translated
+                --  to 'in' or 'inout', not 'out', because
+                --  they need to be constrained by the actual.
+ 
+                Lib_RE := RE_Mode_Inout;
+             else
+                Lib_RE := RE_Mode_Out;
+             end if;
+ 
+          else
+             Lib_RE := RE_Mode_In;
+          end if;
+ 
+          return New_Occurrence_Of (RTE (Lib_RE), Loc);
+       end Parameter_Passing_Mode;
+ 
+    --  Start of processing for Add_Parameter_To_NVList
+ 
+    begin
+       if Nkind (Parameter) = N_Defining_Identifier then
+          Get_Name_String (Chars (Parameter));
+       else
+          Get_Name_String (Chars (Defining_Identifier
+                                   (Parameter)));
+       end if;
+ 
+       Parameter_Name_String := String_From_Name_Buffer;
+ 
+       if RACW_Ctrl then
+          Parameter_Mode := New_Occurrence_Of
+            (RTE (RE_Mode_In), Loc);
+       else
+          Parameter_Mode := Parameter_Passing_Mode (Loc,
+            Parameter, Constrained);
+       end if;
+ 
+       return
+         Make_Procedure_Call_Statement (Loc,
+           Name =>
+             New_Occurrence_Of
+               (RTE (RE_NVList_Add_Item), Loc),
+           Parameter_Associations => New_List (
+             New_Occurrence_Of (NVList, Loc),
+             Make_Function_Call (Loc,
+               Name =>
+                 New_Occurrence_Of
+                   (RTE (RE_To_PolyORB_String), Loc),
+               Parameter_Associations => New_List (
+                 Make_String_Literal (Loc,
+                   Strval => Parameter_Name_String))),
+             New_Occurrence_Of (Any, Loc),
+             Parameter_Mode));
+    end Add_Parameter_To_NVList;
+ 
+    --------------------------------
+    -- Add_RACW_Asynchronous_Flag --
+    --------------------------------
+ 
+    procedure Add_RACW_Asynchronous_Flag
+      (Declarations : List_Id;
+       RACW_Type    : Entity_Id)
+    is
+       Loc : constant Source_Ptr := Sloc (RACW_Type);
+ 
+       Asynchronous_Flag : constant Entity_Id :=
+                             Make_Defining_Identifier (Loc,
+                               New_External_Name (Chars (RACW_Type), 'A'));
+ 
+    begin
+       --  Declare the asynchronous flag. This flag will be changed to True
+       --  whenever it is known that the RACW type is asynchronous.
+ 
+       Append_To (Declarations,
+         Make_Object_Declaration (Loc,
+           Defining_Identifier => Asynchronous_Flag,
+           Constant_Present    => True,
+           Object_Definition   => New_Occurrence_Of (Standard_Boolean, Loc),
+           Expression          => New_Occurrence_Of (Standard_False, Loc)));
+ 
+       Asynchronous_Flags_Table.Set (RACW_Type, Asynchronous_Flag);
+    end Add_RACW_Asynchronous_Flag;
+ 
     -----------------------
     -- Add_RACW_Features --
     -----------------------
  
!    procedure Add_RACW_Features (RACW_Type : Entity_Id)
     is
        Desig : constant Entity_Id :=
                  Etype (Designated_Type (RACW_Type));
*************** package body Exp_Dist is
*** 466,475 ****
        Same_Scope : constant Boolean :=
                       Scope (Desig) = Scope (RACW_Type);
  
!       Stub_Type           : Entity_Id;
!       Stub_Type_Access    : Entity_Id;
!       Object_RPC_Receiver : Entity_Id;
!       Existing            : Boolean;
  
     begin
        if not Expander_Active then
--- 1031,1040 ----
        Same_Scope : constant Boolean :=
                       Scope (Desig) = Scope (RACW_Type);
  
!       Stub_Type         : Entity_Id;
!       Stub_Type_Access  : Entity_Id;
!       RPC_Receiver_Decl : Node_Id;
!       Existing          : Boolean;
  
     begin
        if not Expander_Active then
*************** package body Exp_Dist is
*** 506,532 ****
           Decls               => Decls,
           Stub_Type           => Stub_Type,
           Stub_Type_Access    => Stub_Type_Access,
!          Object_RPC_Receiver => Object_RPC_Receiver,
           Existing            => Existing);
  
!       Add_RACW_Read_Write_Attributes
          (RACW_Type           => RACW_Type,
           Stub_Type           => Stub_Type,
           Stub_Type_Access    => Stub_Type_Access,
!          Object_RPC_Receiver => Object_RPC_Receiver,
           Declarations        => Decls);
  
        if not Same_Scope and then not Existing then
  
           --  The RACW has been declared in another scope than the designated
!          --  type and has not been handled by another RACW in the same
!          --  package as the first one, so add primitive for the stub type
!          --  here.
  
           Add_RACW_Primitive_Declarations_And_Bodies
             (Designated_Type  => Desig,
!             Insertion_Node   =>
!               Parent (Declaration_Node (Object_RPC_Receiver)),
              Decls            => Decls);
  
        else
--- 1071,1100 ----
           Decls               => Decls,
           Stub_Type           => Stub_Type,
           Stub_Type_Access    => Stub_Type_Access,
!          RPC_Receiver_Decl   => RPC_Receiver_Decl,
           Existing            => Existing);
  
!       Add_RACW_Asynchronous_Flag
!         (Declarations        => Decls,
!          RACW_Type           => RACW_Type);
! 
!       Specific_Add_RACW_Features
          (RACW_Type           => RACW_Type,
+          Desig               => Desig,
           Stub_Type           => Stub_Type,
           Stub_Type_Access    => Stub_Type_Access,
!          RPC_Receiver_Decl   => RPC_Receiver_Decl,
           Declarations        => Decls);
  
        if not Same_Scope and then not Existing then
  
           --  The RACW has been declared in another scope than the designated
!          --  type and has not been handled by another RACW in the same package
!          --  as the first one, so add primitive for the stub type here.
  
           Add_RACW_Primitive_Declarations_And_Bodies
             (Designated_Type  => Desig,
!             Insertion_Node   => RPC_Receiver_Decl,
              Decls            => Decls);
  
        else
*************** package body Exp_Dist is
*** 534,565 ****
        end if;
     end Add_RACW_Features;
  
!    -------------------------------------------------
!    --  Add_RACW_Primitive_Declarations_And_Bodies --
!    -------------------------------------------------
  
     procedure Add_RACW_Primitive_Declarations_And_Bodies
!      (Designated_Type : in Entity_Id;
!       Insertion_Node  : in Node_Id;
!       Decls           : in List_Id)
     is
!       --  Set sloc of generated declaration to be that of the
!       --  insertion node, so the declarations are recognized as
!       --  belonging to the current package.
  
        Loc : constant Source_Ptr := Sloc (Insertion_Node);
  
        Stub_Elements : constant Stub_Structure :=
!         Stubs_Table.Get (Designated_Type);
  
        pragma Assert (Stub_Elements /= Empty_Stub_Structure);
  
        Current_Insertion_Node : Node_Id := Insertion_Node;
  
!       RPC_Receiver_Declarations      : List_Id;
        RPC_Receiver_Statements        : List_Id;
        RPC_Receiver_Case_Alternatives : constant List_Id := New_List;
        RPC_Receiver_Subp_Id           : Entity_Id;
  
        Current_Primitive_Elmt   : Elmt_Id;
        Current_Primitive        : Entity_Id;
--- 1102,1139 ----
        end if;
     end Add_RACW_Features;
  
!    ------------------------------------------------
!    -- Add_RACW_Primitive_Declarations_And_Bodies --
!    ------------------------------------------------
  
     procedure Add_RACW_Primitive_Declarations_And_Bodies
!      (Designated_Type : Entity_Id;
!       Insertion_Node  : Node_Id;
!       Decls           : List_Id)
     is
!       --  Set Sloc of generated declaration copy of insertion node Sloc, so
!       --  the declarations are recognized as belonging to the current package.
  
        Loc : constant Source_Ptr := Sloc (Insertion_Node);
  
        Stub_Elements : constant Stub_Structure :=
!                         Stubs_Table.Get (Designated_Type);
  
        pragma Assert (Stub_Elements /= Empty_Stub_Structure);
+       Is_RAS : constant Boolean :=
+         not Comes_From_Source (Stub_Elements.RACW_Type);
  
        Current_Insertion_Node : Node_Id := Insertion_Node;
  
!       RPC_Receiver                   : Entity_Id;
        RPC_Receiver_Statements        : List_Id;
        RPC_Receiver_Case_Alternatives : constant List_Id := New_List;
+       RPC_Receiver_Elsif_Parts       : List_Id;
+       RPC_Receiver_Request           : Entity_Id;
        RPC_Receiver_Subp_Id           : Entity_Id;
+       RPC_Receiver_Subp_Index        : Entity_Id;
+ 
+       Subp_Str : String_Id;
  
        Current_Primitive_Elmt   : Elmt_Id;
        Current_Primitive        : Entity_Id;
*************** package body Exp_Dist is
*** 582,597 ****
           return;
        end if;
  
        --  Build callers, receivers for every primitive operations and a RPC
        --  receiver for this type.
  
        if Present (Primitive_Operations (Designated_Type)) then
  
           Current_Primitive_Elmt :=
             First_Elmt (Primitive_Operations (Designated_Type));
- 
           while Current_Primitive_Elmt /= No_Elmt loop
- 
              Current_Primitive := Node (Current_Primitive_Elmt);
  
              --  Copy the primitive of all the parents, except predefined
--- 1156,1196 ----
           return;
        end if;
  
+       if not Is_RAS then
+          RPC_Receiver := Make_Defining_Identifier (Loc,
+                            New_Internal_Name ('P'));
+          Specific_Build_RPC_Receiver_Body (
+            RPC_Receiver => RPC_Receiver,
+            Request      => RPC_Receiver_Request,
+            Subp_Id      => RPC_Receiver_Subp_Id,
+            Subp_Index   => RPC_Receiver_Subp_Index,
+            Stmts        => RPC_Receiver_Statements,
+            Decl         => RPC_Receiver_Decl);
+ 
+          if Get_PCS_Name = Name_PolyORB_DSA then
+ 
+             --  For the case of PolyORB, we need to map a textual operation
+             --  name into a primitive index. Currently we do so using a
+             --  simple sequence of string comparisons.
+ 
+             RPC_Receiver_Elsif_Parts := New_List;
+             Append_To (RPC_Receiver_Statements,
+               Make_Implicit_If_Statement (Designated_Type,
+                 Condition       => New_Occurrence_Of (Standard_False, Loc),
+                 Then_Statements => New_List,
+                 Elsif_Parts     => RPC_Receiver_Elsif_Parts));
+          end if;
+       end if;
+ 
        --  Build callers, receivers for every primitive operations and a RPC
        --  receiver for this type.
  
        if Present (Primitive_Operations (Designated_Type)) then
+          Overload_Counter_Table.Reset;
  
           Current_Primitive_Elmt :=
             First_Elmt (Primitive_Operations (Designated_Type));
           while Current_Primitive_Elmt /= No_Elmt loop
              Current_Primitive := Node (Current_Primitive_Elmt);
  
              --  Copy the primitive of all the parents, except predefined
*************** package body Exp_Dist is
*** 633,645 ****
                   Nkind (Current_Primitive_Spec) = N_Procedure_Specification
                   and then Could_Be_Asynchronous (Current_Primitive_Spec);
  
                 Current_Primitive_Body :=
                   Build_Subprogram_Calling_Stubs
                     (Vis_Decl                 => Current_Primitive_Decl,
!                     Subp_Id                  => Current_Primitive_Number,
                      Asynchronous             => Possibly_Asynchronous,
                      Dynamically_Asynchronous => Possibly_Asynchronous,
!                     Stub_Type                => Stub_Elements.Stub_Type);
                 Append_To (Decls, Current_Primitive_Body);
  
                 --  Analyzing the body here would cause the Stub type to be
--- 1232,1252 ----
                   Nkind (Current_Primitive_Spec) = N_Procedure_Specification
                   and then Could_Be_Asynchronous (Current_Primitive_Spec);
  
+                Assign_Subprogram_Identifier (
+                  Defining_Unit_Name (Current_Primitive_Spec),
+                  Current_Primitive_Number,
+                  Subp_Str);
+ 
                 Current_Primitive_Body :=
                   Build_Subprogram_Calling_Stubs
                     (Vis_Decl                 => Current_Primitive_Decl,
!                     Subp_Id                  =>
!                       Build_Subprogram_Id (Loc,
!                         Defining_Unit_Name (Current_Primitive_Spec)),
                      Asynchronous             => Possibly_Asynchronous,
                      Dynamically_Asynchronous => Possibly_Asynchronous,
!                     Stub_Type                => Stub_Elements.Stub_Type,
!                     RACW_Type                => Stub_Elements.RACW_Type);
                 Append_To (Decls, Current_Primitive_Body);
  
                 --  Analyzing the body here would cause the Stub type to be
*************** package body Exp_Dist is
*** 649,684 ****
  
                 --  Build the receiver stubs
  
!                Current_Receiver_Body :=
!                  Build_Subprogram_Receiving_Stubs
!                    (Vis_Decl                 => Current_Primitive_Decl,
!                     Asynchronous             => Possibly_Asynchronous,
!                     Dynamically_Asynchronous => Possibly_Asynchronous,
!                     Stub_Type                => Stub_Elements.Stub_Type,
!                     RACW_Type                => Stub_Elements.RACW_Type,
!                     Parent_Primitive         => Current_Primitive);
  
!                Current_Receiver :=
!                   Defining_Unit_Name (Specification (Current_Receiver_Body));
  
!                Append_To (Decls, Current_Receiver_Body);
  
!                --  Add a case alternative to the receiver
  
!                Append_To (RPC_Receiver_Case_Alternatives,
!                  Make_Case_Statement_Alternative (Loc,
!                    Discrete_Choices => New_List (
!                      Make_Integer_Literal (Loc, Current_Primitive_Number)),
  
!                    Statements       => New_List (
!                      Make_Procedure_Call_Statement (Loc,
!                        Name                   =>
!                          New_Occurrence_Of (Current_Receiver, Loc),
!                        Parameter_Associations => New_List (
!                          New_Occurrence_Of
!                            (Stub_Elements.RPC_Receiver_Stream, Loc),
!                          New_Occurrence_Of
!                            (Stub_Elements.RPC_Receiver_Result, Loc))))));
  
                 --  Increment the index of current primitive
  
--- 1256,1310 ----
  
                 --  Build the receiver stubs
  
!                if not Is_RAS then
!                   Current_Receiver_Body :=
!                     Specific_Build_Subprogram_Receiving_Stubs
!                       (Vis_Decl                 => Current_Primitive_Decl,
!                        Asynchronous             => Possibly_Asynchronous,
!                        Dynamically_Asynchronous => Possibly_Asynchronous,
!                        Stub_Type                => Stub_Elements.Stub_Type,
!                        RACW_Type                => Stub_Elements.RACW_Type,
!                        Parent_Primitive         => Current_Primitive);
  
!                   Current_Receiver := Defining_Unit_Name (
!                     Specification (Current_Receiver_Body));
  
!                   Append_To (Decls, Current_Receiver_Body);
  
!                   --  Add a case alternative to the receiver
  
!                   if Get_PCS_Name = Name_PolyORB_DSA then
!                      Append_To (RPC_Receiver_Elsif_Parts,
!                        Make_Elsif_Part (Loc,
!                          Condition =>
!                            Make_Function_Call (Loc,
!                              Name =>
!                                New_Occurrence_Of (
!                                  RTE (RE_Caseless_String_Eq), Loc),
!                              Parameter_Associations => New_List (
!                                New_Occurrence_Of (RPC_Receiver_Subp_Id, Loc),
!                                Make_String_Literal (Loc, Subp_Str))),
!                          Then_Statements => New_List (
!                            Make_Assignment_Statement (Loc,
!                              Name => New_Occurrence_Of (
!                                        RPC_Receiver_Subp_Index, Loc),
!                              Expression =>
!                                Make_Integer_Literal (Loc,
!                                   Current_Primitive_Number)))));
!                   end if;
  
!                   Append_To (RPC_Receiver_Case_Alternatives,
!                     Make_Case_Statement_Alternative (Loc,
!                       Discrete_Choices => New_List (
!                         Make_Integer_Literal (Loc, Current_Primitive_Number)),
! 
!                       Statements       => New_List (
!                         Make_Procedure_Call_Statement (Loc,
!                           Name                   =>
!                             New_Occurrence_Of (Current_Receiver, Loc),
!                           Parameter_Associations => New_List (
!                             New_Occurrence_Of (RPC_Receiver_Request, Loc))))));
!                end if;
  
                 --  Increment the index of current primitive
  
*************** package body Exp_Dist is
*** 691,737 ****
  
        --  Build the case statement and the heart of the subprogram
  
!       Append_To (RPC_Receiver_Case_Alternatives,
!         Make_Case_Statement_Alternative (Loc,
!           Discrete_Choices => New_List (Make_Others_Choice (Loc)),
!           Statements       => New_List (Make_Null_Statement (Loc))));
! 
!       RPC_Receiver_Subp_Id :=
!         Make_Defining_Identifier (Loc, New_Internal_Name ('S'));
! 
!       RPC_Receiver_Declarations := New_List (
!         Make_Object_Declaration (Loc,
!           Defining_Identifier => RPC_Receiver_Subp_Id,
!           Object_Definition   =>
!             New_Occurrence_Of (RTE (RE_Subprogram_Id), Loc)));
! 
!       RPC_Receiver_Statements := New_List (
!         Make_Attribute_Reference (Loc,
!           Prefix         =>
!             New_Occurrence_Of (RTE (RE_Subprogram_Id), Loc),
!           Attribute_Name =>
!             Name_Read,
!           Expressions    => New_List (
!             New_Occurrence_Of (Stub_Elements.RPC_Receiver_Stream, Loc),
!             New_Occurrence_Of (RPC_Receiver_Subp_Id, Loc))));
! 
!       Append_To (RPC_Receiver_Statements,
!         Make_Case_Statement (Loc,
!           Expression   =>
!             New_Occurrence_Of (RPC_Receiver_Subp_Id, Loc),
!           Alternatives => RPC_Receiver_Case_Alternatives));
  
!       RPC_Receiver_Decl :=
!         Make_Subprogram_Body (Loc,
!           Specification              =>
!             Copy_Specification (Loc,
!               Parent (Stub_Elements.Object_RPC_Receiver)),
!           Declarations               => RPC_Receiver_Declarations,
!           Handled_Statement_Sequence =>
!             Make_Handled_Sequence_Of_Statements (Loc,
!               Statements => RPC_Receiver_Statements));
  
!       Append_To (Decls, RPC_Receiver_Decl);
  
        --  Do not analyze RPC receiver at this stage since it will otherwise
        --  reference subprograms that have not been analyzed yet. It will
--- 1317,1338 ----
  
        --  Build the case statement and the heart of the subprogram
  
!       if not Is_RAS then
!          Append_To (RPC_Receiver_Case_Alternatives,
!            Make_Case_Statement_Alternative (Loc,
!              Discrete_Choices => New_List (Make_Others_Choice (Loc)),
!              Statements       => New_List (Make_Null_Statement (Loc))));
  
!          Append_To (RPC_Receiver_Statements,
!            Make_Case_Statement (Loc,
!              Expression   =>
!                New_Occurrence_Of (RPC_Receiver_Subp_Index, Loc),
!              Alternatives => RPC_Receiver_Case_Alternatives));
  
!          Append_To (Decls, RPC_Receiver_Decl);
!          Specific_Add_Obj_RPC_Receiver_Completion (Loc,
!            Decls, RPC_Receiver, Stub_Elements);
!       end if;
  
        --  Do not analyze RPC receiver at this stage since it will otherwise
        --  reference subprograms that have not been analyzed yet. It will
*************** package body Exp_Dist is
*** 740,1450 ****
     end Add_RACW_Primitive_Declarations_And_Bodies;
  
     -----------------------------
!    -- Add_RACW_Read_Attribute --
     -----------------------------
  
!    procedure Add_RACW_Read_Attribute
!      (RACW_Type           : in Entity_Id;
!       Stub_Type           : in Entity_Id;
!       Stub_Type_Access    : in Entity_Id;
!       Declarations        : in List_Id)
!    is
!       Loc : constant Source_Ptr := Sloc (RACW_Type);
! 
!       Proc_Decl : Node_Id;
!       Attr_Decl : Node_Id;
! 
!       Body_Node : Node_Id;
! 
!       Decls             : List_Id;
!       Statements        : List_Id;
!       Local_Statements  : List_Id;
!       Remote_Statements : List_Id;
!       --  Various parts of the procedure
! 
!       Procedure_Name    : constant Name_Id   :=
!                             New_Internal_Name ('R');
!       Source_Partition  : constant Entity_Id :=
!                             Make_Defining_Identifier
!                               (Loc, New_Internal_Name ('P'));
!       Source_Receiver   : constant Entity_Id :=
!                             Make_Defining_Identifier
!                               (Loc, New_Internal_Name ('S'));
!       Source_Address    : constant Entity_Id :=
!                             Make_Defining_Identifier
!                               (Loc, New_Internal_Name ('P'));
!       Stubbed_Result    : constant Entity_Id  :=
!                             Make_Defining_Identifier
!                               (Loc, New_Internal_Name ('S'));
!       Asynchronous_Flag : constant Entity_Id :=
!                             Make_Defining_Identifier
!                               (Loc, New_Internal_Name ('S'));
!       Asynchronous_Node : constant Node_Id   :=
!                             New_Occurrence_Of (Standard_False, Loc);
! 
!       --  Functions to create occurrences of the formal
!       --  parameter names.
! 
!       function Stream_Parameter return Node_Id;
!       function Result return Node_Id;
! 
!       function Stream_Parameter return Node_Id is
!       begin
!          return Make_Identifier (Loc, Name_S);
!       end Stream_Parameter;
! 
!       function Result return Node_Id is
!       begin
!          return Make_Identifier (Loc, Name_V);
!       end Result;
! 
!    begin
!       --  Declare the asynchronous flag. This flag will be changed to True
!       --  whenever it is known that the RACW type is asynchronous. Also, the
!       --  node gets stored since it may be rewritten when we process the
!       --  asynchronous pragma.
! 
!       Append_To (Declarations,
!         Make_Object_Declaration (Loc,
!           Defining_Identifier => Asynchronous_Flag,
!           Constant_Present    => True,
!           Object_Definition   => New_Occurrence_Of (Standard_Boolean, Loc),
!           Expression          => Asynchronous_Node));
! 
!       Asynchronous_Flags_Table.Set (RACW_Type, Asynchronous_Node);
! 
!       --  Object declarations
! 
!       Decls := New_List (
!         Make_Object_Declaration (Loc,
!           Defining_Identifier => Source_Partition,
!           Object_Definition   =>
!             New_Occurrence_Of (RTE (RE_Partition_ID), Loc)),
! 
!         Make_Object_Declaration (Loc,
!           Defining_Identifier => Source_Receiver,
!           Object_Definition   =>
!             New_Occurrence_Of (RTE (RE_Unsigned_64), Loc)),
! 
!         Make_Object_Declaration (Loc,
!           Defining_Identifier => Source_Address,
!           Object_Definition   =>
!             New_Occurrence_Of (RTE (RE_Unsigned_64), Loc)),
! 
!         Make_Object_Declaration (Loc,
!           Defining_Identifier => Stubbed_Result,
!           Object_Definition   =>
!             New_Occurrence_Of (Stub_Type_Access, Loc)));
! 
!       --  Read the source Partition_ID and RPC_Receiver from incoming stream
! 
!       Statements := New_List (
!         Make_Attribute_Reference (Loc,
!           Prefix         =>
!             New_Occurrence_Of (RTE (RE_Partition_ID), Loc),
!           Attribute_Name => Name_Read,
!           Expressions    => New_List (
!             Stream_Parameter,
!             New_Occurrence_Of (Source_Partition, Loc))),
! 
!         Make_Attribute_Reference (Loc,
!           Prefix         =>
!             New_Occurrence_Of (RTE (RE_Unsigned_64), Loc),
!           Attribute_Name =>
!             Name_Read,
!           Expressions    => New_List (
!             Stream_Parameter,
!             New_Occurrence_Of (Source_Receiver, Loc))),
! 
!         Make_Attribute_Reference (Loc,
!           Prefix         =>
!             New_Occurrence_Of (RTE (RE_Unsigned_64), Loc),
!           Attribute_Name =>
!             Name_Read,
!           Expressions    => New_List (
!             Stream_Parameter,
!             New_Occurrence_Of (Source_Address, Loc))));
! 
!       --  If the Address is Null_Address, then return a null object
! 
!       Append_To (Statements,
!         Make_Implicit_If_Statement (RACW_Type,
!           Condition       =>
!             Make_Op_Eq (Loc,
!               Left_Opnd  => New_Occurrence_Of (Source_Address, Loc),
!               Right_Opnd => Make_Integer_Literal (Loc, Uint_0)),
!           Then_Statements => New_List (
!             Make_Assignment_Statement (Loc,
!               Name       => Result,
!               Expression => Make_Null (Loc)),
!             Make_Return_Statement (Loc))));
! 
!       --  If the RACW denotes an object created on the current partition, then
!       --  Local_Statements will be executed. The real object will be used.
! 
!       Local_Statements := New_List (
!         Make_Assignment_Statement (Loc,
!           Name       => Result,
!           Expression =>
!             Unchecked_Convert_To (RACW_Type,
!               OK_Convert_To (RTE (RE_Address),
!                 New_Occurrence_Of (Source_Address, Loc)))));
! 
!       --  If the object is located on another partition, then a stub object
!       --  will be created with all the information needed to rebuild the
!       --  real object at the other end.
! 
!       Remote_Statements := New_List (
! 
!         Make_Assignment_Statement (Loc,
!           Name       => New_Occurrence_Of (Stubbed_Result, Loc),
!           Expression =>
!             Make_Allocator (Loc,
!               New_Occurrence_Of (Stub_Type, Loc))),
! 
!         Make_Assignment_Statement (Loc,
!           Name       => Make_Selected_Component (Loc,
!             Prefix        => New_Occurrence_Of (Stubbed_Result, Loc),
!             Selector_Name => Make_Identifier (Loc, Name_Origin)),
!           Expression =>
!             New_Occurrence_Of (Source_Partition, Loc)),
! 
!         Make_Assignment_Statement (Loc,
!           Name       => Make_Selected_Component (Loc,
!             Prefix        => New_Occurrence_Of (Stubbed_Result, Loc),
!             Selector_Name => Make_Identifier (Loc, Name_Receiver)),
!           Expression =>
!             New_Occurrence_Of (Source_Receiver, Loc)),
! 
!         Make_Assignment_Statement (Loc,
!           Name       => Make_Selected_Component (Loc,
!             Prefix        => New_Occurrence_Of (Stubbed_Result, Loc),
!             Selector_Name => Make_Identifier (Loc, Name_Addr)),
!           Expression =>
!             New_Occurrence_Of (Source_Address, Loc)));
! 
!       Append_To (Remote_Statements,
!         Make_Assignment_Statement (Loc,
!           Name       => Make_Selected_Component (Loc,
!             Prefix        => New_Occurrence_Of (Stubbed_Result, Loc),
!             Selector_Name => Make_Identifier (Loc, Name_Asynchronous)),
!           Expression =>
!             New_Occurrence_Of (Asynchronous_Flag, Loc)));
! 
!       Append_To (Remote_Statements,
!         Make_Procedure_Call_Statement (Loc,
!           Name                   =>
!             New_Occurrence_Of (RTE (RE_Get_Unique_Remote_Pointer), Loc),
!           Parameter_Associations => New_List (
!             Unchecked_Convert_To (RTE (RE_RACW_Stub_Type_Access),
!               New_Occurrence_Of (Stubbed_Result, Loc)))));
! 
!       Append_To (Remote_Statements,
!         Make_Assignment_Statement (Loc,
!           Name       => Result,
!           Expression => Unchecked_Convert_To (RACW_Type,
!             New_Occurrence_Of (Stubbed_Result, Loc))));
! 
!       --  Distinguish between the local and remote cases, and execute the
!       --  appropriate piece of code.
! 
!       Append_To (Statements,
!         Make_Implicit_If_Statement (RACW_Type,
!           Condition       =>
!             Make_Op_Eq (Loc,
!               Left_Opnd  =>
!                 Make_Function_Call (Loc,
!                   Name =>
!                     New_Occurrence_Of (RTE (RE_Get_Local_Partition_Id), Loc)),
!               Right_Opnd => New_Occurrence_Of (Source_Partition, Loc)),
!           Then_Statements => Local_Statements,
!           Else_Statements => Remote_Statements));
! 
!       Build_Stream_Procedure
!         (Loc, RACW_Type, Body_Node,
!          Make_Defining_Identifier (Loc, Procedure_Name),
!          Statements, Outp => True);
!       Set_Declarations (Body_Node, Decls);
! 
!       Proc_Decl := Make_Subprogram_Declaration (Loc,
!         Copy_Specification (Loc, Specification (Body_Node)));
! 
!       Attr_Decl :=
!         Make_Attribute_Definition_Clause (Loc,
!           Name       => New_Occurrence_Of (RACW_Type, Loc),
!           Chars      => Name_Read,
!           Expression =>
!             New_Occurrence_Of (
!               Defining_Unit_Name (Specification (Proc_Decl)), Loc));
! 
!       Insert_After (Declaration_Node (RACW_Type), Proc_Decl);
!       Insert_After (Proc_Decl, Attr_Decl);
!       Append_To (Declarations, Body_Node);
!    end Add_RACW_Read_Attribute;
  
!    ------------------------------------
!    -- Add_RACW_Read_Write_Attributes --
!    ------------------------------------
  
!    procedure Add_RACW_Read_Write_Attributes
!      (RACW_Type           : in Entity_Id;
!       Stub_Type           : in Entity_Id;
!       Stub_Type_Access    : in Entity_Id;
!       Object_RPC_Receiver : in Entity_Id;
!       Declarations        : in List_Id)
!    is
!    begin
!       Add_RACW_Write_Attribute
!         (RACW_Type           => RACW_Type,
!          Stub_Type           => Stub_Type,
!          Stub_Type_Access    => Stub_Type_Access,
!          Object_RPC_Receiver => Object_RPC_Receiver,
!          Declarations        => Declarations);
  
!       Add_RACW_Read_Attribute
!         (RACW_Type        => RACW_Type,
!          Stub_Type        => Stub_Type,
!          Stub_Type_Access => Stub_Type_Access,
!          Declarations     => Declarations);
!    end Add_RACW_Read_Write_Attributes;
  
!    ------------------------------
!    -- Add_RACW_Write_Attribute --
!    ------------------------------
  
!    procedure Add_RACW_Write_Attribute
!      (RACW_Type           : in Entity_Id;
!       Stub_Type           : in Entity_Id;
!       Stub_Type_Access    : in Entity_Id;
!       Object_RPC_Receiver : in Entity_Id;
!       Declarations        : in List_Id)
!    is
!       Loc : constant Source_Ptr := Sloc (RACW_Type);
  
!       Body_Node : Node_Id;
!       Proc_Decl : Node_Id;
!       Attr_Decl : Node_Id;
  
!       Statements        : List_Id;
!       Local_Statements  : List_Id;
!       Remote_Statements : List_Id;
!       Null_Statements   : List_Id;
  
!       Procedure_Name    : constant Name_Id := New_Internal_Name ('R');
  
!       --  Functions to create occurrences of the formal
!       --  parameter names.
  
!       function Stream_Parameter return Node_Id;
!       function Object return Node_Id;
  
!       function Stream_Parameter return Node_Id is
!       begin
!          return Make_Identifier (Loc, Name_S);
!       end Stream_Parameter;
  
!       function Object return Node_Id is
!       begin
!          return Make_Identifier (Loc, Name_V);
!       end Object;
  
     begin
!       --  Build the code fragment corresponding to the marshalling of a
!       --  local object.
! 
!       Local_Statements := New_List (
! 
!         Pack_Entity_Into_Stream_Access (Loc,
!           Stream => Stream_Parameter,
!           Object => RTE (RE_Get_Local_Partition_Id)),
! 
!         Pack_Node_Into_Stream_Access (Loc,
!           Stream => Stream_Parameter,
!           Object => OK_Convert_To (RTE (RE_Unsigned_64),
!             Make_Attribute_Reference (Loc,
!               Prefix         => New_Occurrence_Of (Object_RPC_Receiver, Loc),
!               Attribute_Name => Name_Address)),
!           Etyp   => RTE (RE_Unsigned_64)),
! 
!         Pack_Node_Into_Stream_Access (Loc,
!           Stream => Stream_Parameter,
!           Object => OK_Convert_To (RTE (RE_Unsigned_64),
!             Make_Attribute_Reference (Loc,
!               Prefix         =>
!                 Make_Explicit_Dereference (Loc,
!                   Prefix => Object),
!               Attribute_Name => Name_Address)),
!           Etyp   => RTE (RE_Unsigned_64)));
! 
!       --  Build the code fragment corresponding to the marshalling of
!       --  a remote object.
! 
!       Remote_Statements := New_List (
! 
!         Pack_Node_Into_Stream_Access (Loc,
!          Stream => Stream_Parameter,
!          Object =>
!             Make_Selected_Component (Loc,
!               Prefix        => Unchecked_Convert_To (Stub_Type_Access,
!                 Object),
!               Selector_Name =>
!                 Make_Identifier (Loc, Name_Origin)),
!          Etyp   => RTE (RE_Partition_ID)),
! 
!         Pack_Node_Into_Stream_Access (Loc,
!          Stream => Stream_Parameter,
!          Object =>
!             Make_Selected_Component (Loc,
!               Prefix        => Unchecked_Convert_To (Stub_Type_Access,
!                 Object),
!               Selector_Name =>
!                 Make_Identifier (Loc, Name_Receiver)),
!          Etyp   => RTE (RE_Unsigned_64)),
! 
!         Pack_Node_Into_Stream_Access (Loc,
!          Stream => Stream_Parameter,
!          Object =>
!             Make_Selected_Component (Loc,
!               Prefix        => Unchecked_Convert_To (Stub_Type_Access,
!                 Object),
!               Selector_Name =>
!                 Make_Identifier (Loc, Name_Addr)),
!          Etyp   => RTE (RE_Unsigned_64)));
! 
!       --  Build the code fragment corresponding to the marshalling of a null
!       --  object.
! 
!       Null_Statements := New_List (
! 
!         Pack_Entity_Into_Stream_Access (Loc,
!           Stream => Stream_Parameter,
!           Object => RTE (RE_Get_Local_Partition_Id)),
! 
!         Pack_Node_Into_Stream_Access (Loc,
!           Stream => Stream_Parameter,
!           Object => OK_Convert_To (RTE (RE_Unsigned_64),
!             Make_Attribute_Reference (Loc,
!               Prefix         => New_Occurrence_Of (Object_RPC_Receiver, Loc),
!               Attribute_Name => Name_Address)),
!           Etyp   => RTE (RE_Unsigned_64)),
! 
!         Pack_Node_Into_Stream_Access (Loc,
!           Stream => Stream_Parameter,
!           Object => Make_Integer_Literal (Loc, Uint_0),
!           Etyp   => RTE (RE_Unsigned_64)));
! 
!       Statements := New_List (
!         Make_Implicit_If_Statement (RACW_Type,
!           Condition       =>
!             Make_Op_Eq (Loc,
!               Left_Opnd  => Object,
!               Right_Opnd => Make_Null (Loc)),
!           Then_Statements => Null_Statements,
!           Elsif_Parts     => New_List (
!             Make_Elsif_Part (Loc,
!               Condition       =>
!                 Make_Op_Eq (Loc,
!                   Left_Opnd  =>
!                     Make_Attribute_Reference (Loc,
!                       Prefix         => Object,
!                       Attribute_Name => Name_Tag),
!                   Right_Opnd =>
!                     Make_Attribute_Reference (Loc,
!                       Prefix         => New_Occurrence_Of (Stub_Type, Loc),
!                       Attribute_Name => Name_Tag)),
!               Then_Statements => Remote_Statements)),
!           Else_Statements => Local_Statements));
! 
!       Build_Stream_Procedure
!         (Loc, RACW_Type, Body_Node,
!          Make_Defining_Identifier (Loc, Procedure_Name),
!          Statements, Outp => False);
! 
!       Proc_Decl := Make_Subprogram_Declaration (Loc,
!         Copy_Specification (Loc, Specification (Body_Node)));
! 
!       Attr_Decl :=
!         Make_Attribute_Definition_Clause (Loc,
!           Name       => New_Occurrence_Of (RACW_Type, Loc),
!           Chars      => Name_Write,
!           Expression =>
!             New_Occurrence_Of (
!               Defining_Unit_Name (Specification (Proc_Decl)), Loc));
! 
!       Insert_After (Declaration_Node (RACW_Type), Proc_Decl);
!       Insert_After (Proc_Decl, Attr_Decl);
!       Append_To (Declarations, Body_Node);
!    end Add_RACW_Write_Attribute;
! 
!    ------------------------------
!    -- Add_RAS_Access_Attribute --
!    ------------------------------
! 
!    procedure Add_RAS_Access_Attribute (N : in Node_Id) is
!       Ras_Type : constant Entity_Id := Defining_Identifier (N);
!       Fat_Type : constant Entity_Id := Equivalent_Type (Ras_Type);
!       --  Ras_Type is the access to subprogram type while Fat_Type points to
!       --  the record type corresponding to a remote access to subprogram type.
! 
!       Proc_Decls        : constant List_Id := New_List;
!       Proc_Statements   : constant List_Id := New_List;
! 
!       Proc_Spec : Node_Id;
! 
!       Proc : Node_Id;
! 
!       Param        : Node_Id;
!       Package_Name : Node_Id;
!       Subp_Id      : Node_Id;
!       Asynchronous : Node_Id;
!       Return_Value : Node_Id;
! 
!       Loc : constant Source_Ptr := Sloc (N);
! 
!       procedure Set_Field (Field_Name : in Name_Id; Value : in Node_Id);
!       --  Set a field name for the return value
  
!       procedure Set_Field (Field_Name : in Name_Id; Value : in Node_Id)
!       is
!       begin
!          Append_To (Proc_Statements,
!            Make_Assignment_Statement (Loc,
!              Name       =>
!                Make_Selected_Component (Loc,
!                  Prefix        => New_Occurrence_Of (Return_Value, Loc),
!                  Selector_Name => Make_Identifier (Loc, Field_Name)),
!              Expression => Value));
!       end Set_Field;
  
!    --  Start of processing for Add_RAS_Access_Attribute
  
!    begin
!       Param := Make_Defining_Identifier (Loc, New_Internal_Name ('P'));
!       Package_Name := Make_Defining_Identifier (Loc, New_Internal_Name ('S'));
!       Subp_Id := Make_Defining_Identifier (Loc, New_Internal_Name ('N'));
!       Asynchronous := Make_Defining_Identifier (Loc, New_Internal_Name ('B'));
!       Return_Value := Make_Defining_Identifier (Loc, New_Internal_Name ('P'));
  
!       --  Create the object which will be returned of type Fat_Type
  
!       Append_To (Proc_Decls,
!         Make_Object_Declaration (Loc,
!           Defining_Identifier => Return_Value,
!           Object_Definition   =>
              New_Occurrence_Of (Fat_Type, Loc)));
  
!       --  Initialize the fields of the record type with the appropriate data
! 
!       Set_Field (Name_Ras,
!         OK_Convert_To (RTE (RE_Unsigned_64), New_Occurrence_Of (Param, Loc)));
! 
!       Set_Field (Name_Origin,
!         Unchecked_Convert_To (Standard_Integer,
!           Make_Function_Call (Loc,
!             Name                   =>
!               New_Occurrence_Of (RTE (RE_Get_Active_Partition_Id), Loc),
!             Parameter_Associations => New_List (
!               New_Occurrence_Of (Package_Name, Loc)))));
! 
!       Set_Field (Name_Receiver,
!         Make_Function_Call (Loc,
!           Name                   =>
!             New_Occurrence_Of (RTE (RE_Get_RCI_Package_Receiver), Loc),
!           Parameter_Associations => New_List (
!             New_Occurrence_Of (Package_Name, Loc))));
! 
!       Set_Field (Name_Subp_Id,
!         New_Occurrence_Of (Subp_Id, Loc));
! 
!       Set_Field (Name_Async,
!         New_Occurrence_Of (Asynchronous, Loc));
! 
!       --  Return the newly created value
! 
!       Append_To (Proc_Statements,
!         Make_Return_Statement (Loc,
!           Expression =>
!             New_Occurrence_Of (Return_Value, Loc)));
! 
!       Proc :=
!         Make_Defining_Identifier (Loc,
!           Chars => Make_TSS_Name (Ras_Type, TSS_RAS_Access));
! 
!       Proc_Spec :=
!         Make_Function_Specification (Loc,
!           Defining_Unit_Name       => Proc,
!           Parameter_Specifications => New_List (
!             Make_Parameter_Specification (Loc,
!               Defining_Identifier => Param,
!               Parameter_Type      =>
!                 New_Occurrence_Of (RTE (RE_Address), Loc)),
! 
!             Make_Parameter_Specification (Loc,
!               Defining_Identifier => Package_Name,
!               Parameter_Type      =>
!                 New_Occurrence_Of (Standard_String, Loc)),
! 
!             Make_Parameter_Specification (Loc,
!               Defining_Identifier => Subp_Id,
!               Parameter_Type      =>
!                 New_Occurrence_Of (Standard_Natural, Loc)),
! 
!             Make_Parameter_Specification (Loc,
!               Defining_Identifier => Asynchronous,
!               Parameter_Type      =>
!                 New_Occurrence_Of (Standard_Boolean, Loc))),
! 
!          Subtype_Mark =>
!            New_Occurrence_Of (Fat_Type, Loc));
! 
!       --  Set the kind and return type of the function to prevent ambiguities
!       --  between Ras_Type and Fat_Type in subsequent analysis.
! 
!       Set_Ekind (Proc, E_Function);
!       Set_Etype (Proc, New_Occurrence_Of (Fat_Type, Loc));
! 
!       Discard_Node (
!         Make_Subprogram_Body (Loc,
!           Specification              => Proc_Spec,
!           Declarations               => Proc_Decls,
!           Handled_Statement_Sequence =>
!             Make_Handled_Sequence_Of_Statements (Loc,
!               Statements => Proc_Statements)));
! 
!       Set_TSS (Fat_Type, Proc);
! 
!    end Add_RAS_Access_Attribute;
! 
!    -----------------------------------
!    -- Add_RAS_Dereference_Attribute --
!    -----------------------------------
! 
!    procedure Add_RAS_Dereference_Attribute (N : in Node_Id) is
!       Loc : constant Source_Ptr := Sloc (N);
! 
!       Type_Def : constant Node_Id   := Type_Definition (N);
! 
!       Ras_Type : constant Entity_Id := Defining_Identifier (N);
! 
!       Fat_Type : constant Entity_Id := Equivalent_Type (Ras_Type);
! 
!       Proc_Decls      : constant List_Id := New_List;
!       Proc_Statements : constant List_Id := New_List;
! 
!       Inner_Decls      : constant List_Id := New_List;
!       Inner_Statements : constant List_Id := New_List;
! 
!       Direct_Statements : constant List_Id := New_List;
! 
!       Proc        : Node_Id;
!       Proc_Spec   : Node_Id;
!       Param_Specs : constant List_Id := New_List;
!       Param_Assoc : constant List_Id := New_List;
! 
!       Pointer : Node_Id;
! 
!       Converted_Ras    : Node_Id;
!       Target_Partition : Node_Id;
!       RPC_Receiver     : Node_Id;
!       Subprogram_Id    : Node_Id;
!       Asynchronous     : Node_Id;
! 
!       Is_Function : constant Boolean :=
!                       Nkind (Type_Def) = N_Access_Function_Definition;
  
!       Spec : constant Node_Id := Type_Def;
  
!       Current_Parameter : Node_Id;
  
!    begin
!       --  The way to do it is test if the Ras field is non-null and then if
!       --  the Origin field is equal to the current partition ID (which is in
!       --  fact Current_Package'Partition_ID). If this is the case, then it
!       --  is safe to dereference the Ras field directly rather than
!       --  performing a remote call.
  
!       Pointer :=
!         Make_Defining_Identifier (Loc, New_Internal_Name ('P'));
  
!       Target_Partition :=
!         Make_Defining_Identifier (Loc, New_Internal_Name ('P'));
  
!       Append_To (Proc_Decls,
!         Make_Object_Declaration (Loc,
!           Defining_Identifier => Target_Partition,
!           Constant_Present    => True,
!           Object_Definition   =>
!             New_Occurrence_Of (RTE (RE_Partition_ID), Loc),
!           Expression          =>
!             Unchecked_Convert_To (RTE (RE_Partition_ID),
!               Make_Selected_Component (Loc,
!                 Prefix        =>
!                   New_Occurrence_Of (Pointer, Loc),
!                 Selector_Name =>
!                   Make_Identifier (Loc, Name_Origin)))));
  
!       RPC_Receiver :=
!         Make_Selected_Component (Loc,
!           Prefix        =>
!             New_Occurrence_Of (Pointer, Loc),
!           Selector_Name =>
!             Make_Identifier (Loc, Name_Receiver));
  
!       Subprogram_Id :=
!         Unchecked_Convert_To (RTE (RE_Subprogram_Id),
!           Make_Selected_Component (Loc,
!             Prefix        =>
!               New_Occurrence_Of (Pointer, Loc),
!             Selector_Name =>
!               Make_Identifier (Loc, Name_Subp_Id)));
  
!       --  A function is never asynchronous. A procedure may or may not be
!       --  asynchronous depending on whether a pragma Asynchronous applies
!       --  on it. Since a RAST may point onto various subprograms, this is
!       --  only known at runtime so both versions (synchronous and asynchronous)
!       --  must be built every times it is not a function.
  
        if Is_Function then
!          Asynchronous := Empty;
  
        else
!          Asynchronous :=
!            Make_Selected_Component (Loc,
!              Prefix        =>
!                New_Occurrence_Of (Pointer, Loc),
!              Selector_Name =>
!                Make_Identifier (Loc, Name_Async));
! 
!       end if;
! 
!       if Present (Parameter_Specifications (Type_Def)) then
!          Current_Parameter := First (Parameter_Specifications (Type_Def));
! 
!          while Current_Parameter /= Empty loop
!             Append_To (Param_Specs,
!               Make_Parameter_Specification (Loc,
!                 Defining_Identifier =>
!                   Make_Defining_Identifier (Loc,
!                     Chars =>
!                       Chars (Defining_Identifier (Current_Parameter))),
!                     In_Present        => In_Present (Current_Parameter),
!                     Out_Present       => Out_Present (Current_Parameter),
!                     Parameter_Type    =>
!                       New_Copy_Tree (Parameter_Type (Current_Parameter)),
!                     Expression        =>
!                       New_Copy_Tree (Expression (Current_Parameter))));
! 
!             Append_To (Param_Assoc,
!               Make_Identifier (Loc,
!                 Chars => Chars (Defining_Identifier (Current_Parameter))));
! 
!             Next (Current_Parameter);
!          end loop;
        end if;
  
!       Proc :=
!         Make_Defining_Identifier (Loc,
!           Chars => Make_TSS_Name (Ras_Type, TSS_RAS_Dereference));
  
        if Is_Function then
           Proc_Spec :=
--- 1341,1484 ----
     end Add_RACW_Primitive_Declarations_And_Bodies;
  
     -----------------------------
!    -- Add_RAS_Dereference_TSS --
     -----------------------------
  
!    procedure Add_RAS_Dereference_TSS (N : Node_Id) is
!       Loc : constant Source_Ptr := Sloc (N);
  
!       Type_Def : constant Node_Id   := Type_Definition (N);
  
!       RAS_Type  : constant Entity_Id := Defining_Identifier (N);
!       Fat_Type  : constant Entity_Id := Equivalent_Type (RAS_Type);
!       RACW_Type : constant Entity_Id := Underlying_RACW_Type (RAS_Type);
!       Desig     : constant Entity_Id := Etype (Designated_Type (RACW_Type));
  
!       Stub_Elements : constant Stub_Structure := Stubs_Table.Get (Desig);
!       pragma Assert (Stub_Elements /= Empty_Stub_Structure);
  
!       RACW_Primitive_Name : Node_Id;
  
!       Proc : constant Entity_Id :=
!                Make_Defining_Identifier (Loc,
!                  Chars => Make_TSS_Name (RAS_Type, TSS_RAS_Dereference));
  
!       Proc_Spec   : Node_Id;
!       Param_Specs : List_Id;
!       Param_Assoc : constant List_Id := New_List;
!       Stmts       : constant List_Id := New_List;
  
!       RAS_Parameter : constant Entity_Id :=
!                         Make_Defining_Identifier (Loc,
!                           Chars => New_Internal_Name ('P'));
  
!       Is_Function : constant Boolean :=
!                       Nkind (Type_Def) = N_Access_Function_Definition;
  
!       Is_Degenerate : Boolean;
!       --  Set to True if the subprogram_specification for this RAS has
!       --  an anonymous access parameter (see Process_Remote_AST_Declaration).
  
!       Spec : constant Node_Id := Type_Def;
  
!       Current_Parameter : Node_Id;
  
!    --  Start of processing for Add_RAS_Dereference_TSS
  
     begin
!       --  The Dereference TSS for a remote access-to-subprogram type
!       --  has the form:
  
!       --    [function|procedure] ras_typeRD (RAS_Value, <RAS_Parameters>)
!       --       [return <>]
  
!       --  This is called whenever a value of a RAS type is dereferenced
  
!       --  First construct a list of parameter specifications:
  
!       --  The first formal is the RAS values
  
!       Param_Specs := New_List (
!         Make_Parameter_Specification (Loc,
!           Defining_Identifier => RAS_Parameter,
!           In_Present          => True,
!           Parameter_Type      =>
              New_Occurrence_Of (Fat_Type, Loc)));
  
!       --  The following formals are copied from the type declaration
  
!       Is_Degenerate := False;
!       Current_Parameter := First (Parameter_Specifications (Type_Def));
!       Parameters : while Present (Current_Parameter) loop
!          if Nkind (Parameter_Type (Current_Parameter))
!            = N_Access_Definition
!          then
!             Is_Degenerate := True;
!          end if;
!          Append_To (Param_Specs,
!            Make_Parameter_Specification (Loc,
!              Defining_Identifier =>
!                Make_Defining_Identifier (Loc,
!                  Chars => Chars (Defining_Identifier (Current_Parameter))),
!              In_Present        => In_Present (Current_Parameter),
!              Out_Present       => Out_Present (Current_Parameter),
!              Parameter_Type    =>
!                New_Copy_Tree (Parameter_Type (Current_Parameter)),
!              Expression        =>
!                New_Copy_Tree (Expression (Current_Parameter))));
  
!          Append_To (Param_Assoc,
!            Make_Identifier (Loc,
!              Chars => Chars (Defining_Identifier (Current_Parameter))));
  
!          Next (Current_Parameter);
!       end loop Parameters;
  
!       if Is_Degenerate then
!          Prepend_To (Param_Assoc, New_Occurrence_Of (RAS_Parameter, Loc));
  
!          --  Generate a dummy body. This code will never actually be executed,
!          --  because null is the only legal value for a degenerate RAS type.
!          --  For legality's sake (in order to avoid generating a function
!          --  that does not contain a return statement), we include a dummy
!          --  recursive call on the TSS itself.
  
!          Append_To (Stmts,
!            Make_Raise_Program_Error (Loc, Reason => PE_Explicit_Raise));
!          RACW_Primitive_Name := New_Occurrence_Of (Proc, Loc);
  
!       else
!          --  For a normal RAS type, we cast the RAS formal to the corresponding
!          --  tagged type, and perform a dispatching call to its Call
!          --  primitive operation.
  
!          Prepend_To (Param_Assoc,
!            Unchecked_Convert_To (RACW_Type,
!              New_Occurrence_Of (RAS_Parameter, Loc)));
  
!          RACW_Primitive_Name := Make_Selected_Component (Loc,
!                                   Prefix        => Scope (RACW_Type),
!                                   Selector_Name => Name_Call);
!       end if;
  
        if Is_Function then
!          Append_To (Stmts,
!             Make_Return_Statement (Loc,
!               Expression =>
!                 Make_Function_Call (Loc,
!               Name                   =>
!                 RACW_Primitive_Name,
!               Parameter_Associations => Param_Assoc)));
  
        else
!          Append_To (Stmts,
!            Make_Procedure_Call_Statement (Loc,
!              Name                   =>
!                RACW_Primitive_Name,
!              Parameter_Associations => Param_Assoc));
        end if;
  
!       --  Build the complete subprogram
  
        if Is_Function then
           Proc_Spec :=
*************** package body Exp_Dist is
*** 1456,1462 ****
                   Entity (Subtype_Mark (Spec)), Loc));
  
           Set_Ekind (Proc, E_Function);
- 
           Set_Etype (Proc,
             New_Occurrence_Of (Entity (Subtype_Mark (Spec)), Loc));
  
--- 1490,1495 ----
*************** package body Exp_Dist is
*** 1470,1928 ****
           Set_Etype (Proc, Standard_Void_Type);
        end if;
  
-       --  Build the calling stubs for the dereference of the RAS
- 
-       Build_General_Calling_Stubs
-         (Decls                     => Inner_Decls,
-          Statements                => Inner_Statements,
-          Target_Partition          => Target_Partition,
-          RPC_Receiver              => RPC_Receiver,
-          Subprogram_Id             => Subprogram_Id,
-          Asynchronous              => Asynchronous,
-          Is_Known_Non_Asynchronous => Is_Function,
-          Is_Function               => Is_Function,
-          Spec                      => Proc_Spec,
-          Nod                       => N);
- 
-       Converted_Ras :=
-         Unchecked_Convert_To (Ras_Type,
-           OK_Convert_To (RTE (RE_Address),
-             Make_Selected_Component (Loc,
-               Prefix        => New_Occurrence_Of (Pointer, Loc),
-               Selector_Name => Make_Identifier (Loc, Name_Ras))));
- 
-       if Is_Function then
-          Append_To (Direct_Statements,
-            Make_Return_Statement (Loc,
-              Expression =>
-                Make_Function_Call (Loc,
-                  Name                   =>
-                    Make_Explicit_Dereference (Loc,
-                      Prefix => Converted_Ras),
-                  Parameter_Associations => Param_Assoc)));
- 
-       else
-          Append_To (Direct_Statements,
-            Make_Procedure_Call_Statement (Loc,
-              Name                   =>
-                Make_Explicit_Dereference (Loc,
-                  Prefix => Converted_Ras),
-              Parameter_Associations => Param_Assoc));
-       end if;
- 
-       Prepend_To (Param_Specs,
-         Make_Parameter_Specification (Loc,
-           Defining_Identifier => Pointer,
-           In_Present          => True,
-           Parameter_Type      =>
-             New_Occurrence_Of (Fat_Type, Loc)));
- 
-       Append_To (Proc_Statements,
-         Make_Implicit_If_Statement (N,
-           Condition =>
-             Make_And_Then (Loc,
-               Left_Opnd  =>
-                 Make_Op_Ne (Loc,
-                   Left_Opnd  =>
-                     Make_Selected_Component (Loc,
-                       Prefix        => New_Occurrence_Of (Pointer, Loc),
-                       Selector_Name => Make_Identifier (Loc, Name_Ras)),
-                   Right_Opnd =>
-                     Make_Integer_Literal (Loc, Uint_0)),
- 
-               Right_Opnd =>
-                 Make_Op_Eq (Loc,
-                   Left_Opnd  =>
-                     New_Occurrence_Of (Target_Partition, Loc),
-                   Right_Opnd =>
-                     Make_Function_Call (Loc,
-                       New_Occurrence_Of (
-                         RTE (RE_Get_Local_Partition_Id), Loc)))),
- 
-           Then_Statements =>
-             Direct_Statements,
- 
-           Else_Statements => New_List (
-             Make_Block_Statement (Loc,
-               Declarations               => Inner_Decls,
-               Handled_Statement_Sequence =>
-                 Make_Handled_Sequence_Of_Statements (Loc,
-                   Statements => Inner_Statements)))));
- 
        Discard_Node (
          Make_Subprogram_Body (Loc,
            Specification              => Proc_Spec,
!           Declarations               => Proc_Decls,
            Handled_Statement_Sequence =>
              Make_Handled_Sequence_Of_Statements (Loc,
!               Statements => Proc_Statements)));
! 
!       Set_TSS (Fat_Type, Defining_Unit_Name (Proc_Spec));
! 
!    end Add_RAS_Dereference_Attribute;
! 
!    -----------------------
!    -- Add_RAST_Features --
!    -----------------------
! 
!    procedure Add_RAST_Features (Vis_Decl : Node_Id) is
!    begin
!       --  Do not add attributes more than once in any case. This should
!       --  be replaced by an assert or this comment removed if we decide
!       --  that this is normal to be called several times ???
! 
!       if Present (TSS (Equivalent_Type (Defining_Identifier (Vis_Decl)),
!                        TSS_RAS_Access))
!       then
!          return;
!       end if;
  
!       Add_RAS_Dereference_Attribute (Vis_Decl);
!       Add_RAS_Access_Attribute (Vis_Decl);
!    end Add_RAST_Features;
  
!    -----------------------------------------
!    -- Add_Receiving_Stubs_To_Declarations --
!    -----------------------------------------
  
!    procedure Add_Receiving_Stubs_To_Declarations
!      (Pkg_Spec : in Node_Id;
!       Decls    : in List_Id)
     is
!       Loc : constant Source_Ptr := Sloc (Pkg_Spec);
! 
!       Stream_Parameter : Node_Id;
!       Result_Parameter : Node_Id;
  
!       Pkg_RPC_Receiver            : Node_Id;
!       Pkg_RPC_Receiver_Spec       : Node_Id;
!       Pkg_RPC_Receiver_Decls      : List_Id;
!       Pkg_RPC_Receiver_Statements : List_Id;
!       Pkg_RPC_Receiver_Cases      : constant List_Id := New_List;
!       Pkg_RPC_Receiver_Body       : Node_Id;
!       --  A Pkg_RPC_Receiver is built to decode the request
  
!       Subp_Id                     : Node_Id;
!       --  Subprogram_Id as read from the incoming stream
  
!       Current_Declaration       : Node_Id;
!       Current_Subprogram_Number : Int := 0;
!       Current_Stubs             : Node_Id;
  
!       Actuals : List_Id;
  
!       Dummy_Register_Name : Name_Id;
!       Dummy_Register_Spec : Node_Id;
!       Dummy_Register_Decl : Node_Id;
!       Dummy_Register_Body : Node_Id;
  
!    begin
!       --  Building receiving stubs consist in several operations:
  
!       --    - a package RPC receiver must be built. This subprogram
!       --      will get a Subprogram_Id from the incoming stream
!       --      and will dispatch the call to the right subprogram
  
!       --    - a receiving stub for any subprogram visible in the package
!       --      spec. This stub will read all the parameters from the stream,
!       --      and put the result as well as the exception occurrence in the
!       --      output stream
  
!       --    - a dummy package with an empty spec and a body made of an
!       --      elaboration part, whose job is to register the receiving
!       --      part of this RCI package on the name server. This is done
!       --      by calling System.Partition_Interface.Register_Receiving_Stub
  
!       Stream_Parameter :=
!         Make_Defining_Identifier (Loc, New_Internal_Name ('S'));
!       Result_Parameter :=
!         Make_Defining_Identifier (Loc, New_Internal_Name ('R'));
!       Subp_Id :=
!         Make_Defining_Identifier (Loc, New_Internal_Name ('P'));
  
!       Pkg_RPC_Receiver :=
!         Make_Defining_Identifier (Loc, New_Internal_Name ('P'));
  
!       --  The parameters of the package RPC receiver are made of two
!       --  streams, an input one and an output one.
  
!       Pkg_RPC_Receiver_Spec :=
!         Build_RPC_Receiver_Specification
!           (RPC_Receiver     => Pkg_RPC_Receiver,
!            Stream_Parameter => Stream_Parameter,
!            Result_Parameter => Result_Parameter);
  
!       Pkg_RPC_Receiver_Decls := New_List (
          Make_Object_Declaration (Loc,
!           Defining_Identifier => Subp_Id,
            Object_Definition   =>
!             New_Occurrence_Of (RTE (RE_Subprogram_Id), Loc)));
! 
!       Pkg_RPC_Receiver_Statements := New_List (
!         Make_Attribute_Reference (Loc,
!           Prefix         =>
!             New_Occurrence_Of (RTE (RE_Subprogram_Id), Loc),
!           Attribute_Name =>
!             Name_Read,
!           Expressions    => New_List (
!             New_Occurrence_Of (Stream_Parameter, Loc),
!             New_Occurrence_Of (Subp_Id, Loc))));
! 
!       --  For each subprogram, the receiving stub will be built and a
!       --  case statement will be made on the Subprogram_Id to dispatch
!       --  to the right subprogram.
! 
!       Current_Declaration := First (Visible_Declarations (Pkg_Spec));
! 
!       while Current_Declaration /= Empty loop
! 
!          if Nkind (Current_Declaration) = N_Subprogram_Declaration
!            and then Comes_From_Source (Current_Declaration)
!          then
!             pragma Assert (Current_Subprogram_Number =
!               Get_Subprogram_Id (Defining_Unit_Name (Specification (
!                 Current_Declaration))));
! 
!             Current_Stubs :=
!               Build_Subprogram_Receiving_Stubs
!                 (Vis_Decl     => Current_Declaration,
!                  Asynchronous =>
!                    Nkind (Specification (Current_Declaration)) =
!                        N_Procedure_Specification
!                      and then Is_Asynchronous
!                        (Defining_Unit_Name (Specification
!                           (Current_Declaration))));
! 
!             Append_To (Decls, Current_Stubs);
  
!             Analyze (Current_Stubs);
  
!             Actuals := New_List (New_Occurrence_Of (Stream_Parameter, Loc));
  
!             if Nkind (Specification (Current_Declaration))
!                 = N_Function_Specification
!               or else
!                 not Is_Asynchronous (
!                   Defining_Entity (Specification (Current_Declaration)))
!             then
!                --  An asynchronous procedure does not want an output parameter
!                --  since no result and no exception will ever be returned.
  
!                Append_To (Actuals,
!                  New_Occurrence_Of (Result_Parameter, Loc));
  
!             end if;
  
!             Append_To (Pkg_RPC_Receiver_Cases,
!               Make_Case_Statement_Alternative (Loc,
!                 Discrete_Choices =>
!                   New_List (
!                     Make_Integer_Literal (Loc, Current_Subprogram_Number)),
  
!                 Statements       =>
!                   New_List (
!                     Make_Procedure_Call_Statement (Loc,
!                       Name                   =>
!                         New_Occurrence_Of (
!                           Defining_Entity (Current_Stubs), Loc),
!                       Parameter_Associations =>
!                         Actuals))));
  
!             Current_Subprogram_Number := Current_Subprogram_Number + 1;
!          end if;
  
!          Next (Current_Declaration);
        end loop;
  
!       --  If we receive an invalid Subprogram_Id, it is best to do nothing
!       --  rather than raising an exception since we do not want someone
!       --  to crash a remote partition by sending invalid subprogram ids.
!       --  This is consistent with the other parts of the case statement
!       --  since even in presence of incorrect parameters in the stream,
!       --  every exception will be caught and (if the subprogram is not an
!       --  APC) put into the result stream and sent away.
! 
!       Append_To (Pkg_RPC_Receiver_Cases,
!         Make_Case_Statement_Alternative (Loc,
!           Discrete_Choices =>
!             New_List (Make_Others_Choice (Loc)),
!           Statements       =>
!             New_List (Make_Null_Statement (Loc))));
! 
!       Append_To (Pkg_RPC_Receiver_Statements,
!         Make_Case_Statement (Loc,
!           Expression   =>
!             New_Occurrence_Of (Subp_Id, Loc),
!           Alternatives => Pkg_RPC_Receiver_Cases));
! 
!       Pkg_RPC_Receiver_Body :=
!         Make_Subprogram_Body (Loc,
!           Specification              => Pkg_RPC_Receiver_Spec,
!           Declarations               => Pkg_RPC_Receiver_Decls,
!           Handled_Statement_Sequence =>
!             Make_Handled_Sequence_Of_Statements (Loc,
!               Statements => Pkg_RPC_Receiver_Statements));
! 
!       Append_To (Decls, Pkg_RPC_Receiver_Body);
!       Analyze (Pkg_RPC_Receiver_Body);
  
!       --  Construction of the dummy package used to register the package
!       --  receiving stubs on the nameserver.
  
!       Dummy_Register_Name := New_Internal_Name ('P');
  
!       Dummy_Register_Spec :=
!         Make_Package_Specification (Loc,
!           Defining_Unit_Name   =>
!             Make_Defining_Identifier (Loc, Dummy_Register_Name),
!           Visible_Declarations => No_List,
!           End_Label => Empty);
  
!       Dummy_Register_Decl :=
          Make_Package_Declaration (Loc,
!           Specification => Dummy_Register_Spec);
  
        Append_To (Decls,
-         Dummy_Register_Decl);
-       Analyze (Dummy_Register_Decl);
- 
-       Dummy_Register_Body :=
          Make_Package_Body (Loc,
!           Defining_Unit_Name         =>
!             Make_Defining_Identifier (Loc, Dummy_Register_Name),
!           Declarations               => No_List,
  
!           Handled_Statement_Sequence =>
!             Make_Handled_Sequence_Of_Statements (Loc,
!               Statements => New_List (
!                 Make_Procedure_Call_Statement (Loc,
!                   Name                   =>
!                     New_Occurrence_Of (RTE (RE_Register_Receiving_Stub), Loc),
  
!                   Parameter_Associations => New_List (
!                     Make_String_Literal (Loc,
!                       Strval => Get_Pkg_Name_String_Id (Pkg_Spec)),
!                     Make_Attribute_Reference (Loc,
!                       Prefix         =>
!                         New_Occurrence_Of (Pkg_RPC_Receiver, Loc),
!                       Attribute_Name =>
!                         Name_Unrestricted_Access),
!                     Make_Attribute_Reference (Loc,
!                       Prefix         =>
!                         New_Occurrence_Of (Defining_Entity (Pkg_Spec), Loc),
!                       Attribute_Name =>
!                         Name_Version))))));
  
!       Append_To (Decls, Dummy_Register_Body);
!       Analyze (Dummy_Register_Body);
!    end Add_Receiving_Stubs_To_Declarations;
  
     -------------------
     -- Add_Stub_Type --
     -------------------
  
     procedure Add_Stub_Type
!      (Designated_Type     : in Entity_Id;
!       RACW_Type           : in Entity_Id;
!       Decls               : in List_Id;
!       Stub_Type           : out Entity_Id;
!       Stub_Type_Access    : out Entity_Id;
!       Object_RPC_Receiver : out Entity_Id;
!       Existing            : out Boolean)
     is
        Loc : constant Source_Ptr := Sloc (RACW_Type);
  
        Stub_Elements : constant Stub_Structure :=
                          Stubs_Table.Get (Designated_Type);
! 
!       Stub_Type_Declaration           : Node_Id;
!       Stub_Type_Access_Declaration    : Node_Id;
!       Object_RPC_Receiver_Declaration : Node_Id;
! 
!       RPC_Receiver_Stream             : Entity_Id;
!       RPC_Receiver_Result             : Entity_Id;
  
     begin
        if Stub_Elements /= Empty_Stub_Structure then
           Stub_Type           := Stub_Elements.Stub_Type;
           Stub_Type_Access    := Stub_Elements.Stub_Type_Access;
!          Object_RPC_Receiver := Stub_Elements.Object_RPC_Receiver;
           Existing            := True;
           return;
        end if;
  
!       Existing            := False;
!       Stub_Type           :=
!         Make_Defining_Identifier (Loc, New_Internal_Name ('S'));
!       Stub_Type_Access    :=
!         Make_Defining_Identifier (Loc, New_Internal_Name ('S'));
!       Object_RPC_Receiver :=
!         Make_Defining_Identifier (Loc, New_Internal_Name ('P'));
!       RPC_Receiver_Stream :=
!         Make_Defining_Identifier (Loc, New_Internal_Name ('S'));
!       RPC_Receiver_Result :=
          Make_Defining_Identifier (Loc, New_Internal_Name ('S'));
!       Stubs_Table.Set (Designated_Type,
!         (Stub_Type           => Stub_Type,
!          Stub_Type_Access    => Stub_Type_Access,
!          Object_RPC_Receiver => Object_RPC_Receiver,
!          RPC_Receiver_Stream => RPC_Receiver_Stream,
!          RPC_Receiver_Result => RPC_Receiver_Result,
!          RACW_Type           => RACW_Type));
  
!       --  The stub type definition below must match exactly the one in
!       --  s-parint.ads, since unchecked conversions will be used in
!       --  s-parint.adb to modify pointers passed to Get_Unique_Remote_Pointer.
  
!       Stub_Type_Declaration :=
          Make_Full_Type_Declaration (Loc,
!           Defining_Identifier => Stub_Type,
            Type_Definition     =>
!             Make_Record_Definition (Loc,
!               Tagged_Present  => True,
!               Limited_Present => True,
!               Component_List  =>
!                 Make_Component_List (Loc,
!                   Component_Items => New_List (
! 
!                     Make_Component_Declaration (Loc,
!                       Defining_Identifier =>
!                         Make_Defining_Identifier (Loc, Name_Origin),
!                       Component_Definition =>
!                         Make_Component_Definition (Loc,
!                           Aliased_Present    => False,
!                           Subtype_Indication =>
!                             New_Occurrence_Of (RTE (RE_Partition_ID), Loc))),
! 
!                     Make_Component_Declaration (Loc,
!                       Defining_Identifier =>
!                         Make_Defining_Identifier (Loc, Name_Receiver),
!                       Component_Definition =>
!                         Make_Component_Definition (Loc,
!                           Aliased_Present    => False,
!                           Subtype_Indication =>
!                             New_Occurrence_Of (RTE (RE_Unsigned_64), Loc))),
! 
!                     Make_Component_Declaration (Loc,
!                       Defining_Identifier =>
!                         Make_Defining_Identifier (Loc, Name_Addr),
!                       Component_Definition =>
!                         Make_Component_Definition (Loc,
!                           Aliased_Present    => False,
!                           Subtype_Indication =>
!                             New_Occurrence_Of (RTE (RE_Unsigned_64), Loc))),
! 
!                     Make_Component_Declaration (Loc,
!                       Defining_Identifier =>
!                         Make_Defining_Identifier (Loc, Name_Asynchronous),
!                       Component_Definition =>
!                         Make_Component_Definition (Loc,
!                           Aliased_Present    => False,
!                           Subtype_Indication =>
!                             New_Occurrence_Of (Standard_Boolean, Loc)))))));
  
!       Append_To (Decls, Stub_Type_Declaration);
!       Analyze (Stub_Type_Declaration);
  
        --  This is in no way a type derivation, but we fake it to make
        --  sure that the dispatching table gets built with the corresponding
--- 1503,1791 ----
           Set_Etype (Proc, Standard_Void_Type);
        end if;
  
        Discard_Node (
          Make_Subprogram_Body (Loc,
            Specification              => Proc_Spec,
!           Declarations               => New_List,
            Handled_Statement_Sequence =>
              Make_Handled_Sequence_Of_Statements (Loc,
!               Statements => Stmts)));
  
!       Set_TSS (Fat_Type, Proc);
!    end Add_RAS_Dereference_TSS;
  
!    -------------------------------
!    -- Add_RAS_Proxy_And_Analyze --
!    -------------------------------
  
!    procedure Add_RAS_Proxy_And_Analyze
!      (Decls              : List_Id;
!       Vis_Decl           : Node_Id;
!       All_Calls_Remote_E : Entity_Id;
!       Proxy_Object_Addr  : out Entity_Id)
     is
!       Loc : constant Source_Ptr := Sloc (Vis_Decl);
  
!       Subp_Name : constant Entity_Id :=
!                      Defining_Unit_Name (Specification (Vis_Decl));
  
!       Pkg_Name   : constant Entity_Id :=
!                      Make_Defining_Identifier (Loc,
!                        Chars =>
!                          New_External_Name (Chars (Subp_Name), 'P', -1));
  
!       Proxy_Type : constant Entity_Id :=
!                      Make_Defining_Identifier (Loc,
!                        Chars =>
!                          New_External_Name (
!                            Related_Id => Chars (Subp_Name),
!                            Suffix     => 'P'));
  
!       Proxy_Type_Full_View : constant Entity_Id :=
!                                Make_Defining_Identifier (Loc,
!                                  Chars (Proxy_Type));
  
!       Subp_Decl_Spec : constant Node_Id :=
!                          Build_RAS_Primitive_Specification
!                            (Subp_Spec          => Specification (Vis_Decl),
!                             Remote_Object_Type => Proxy_Type);
  
!       Subp_Body_Spec : constant Node_Id :=
!                          Build_RAS_Primitive_Specification
!                            (Subp_Spec          => Specification (Vis_Decl),
!                             Remote_Object_Type => Proxy_Type);
  
!       Vis_Decls    : constant List_Id := New_List;
!       Pvt_Decls    : constant List_Id := New_List;
!       Actuals      : constant List_Id := New_List;
!       Formal       : Node_Id;
!       Perform_Call : Node_Id;
  
!    begin
!       --  type subpP is tagged limited private;
  
!       Append_To (Vis_Decls,
!         Make_Private_Type_Declaration (Loc,
!           Defining_Identifier => Proxy_Type,
!           Tagged_Present      => True,
!           Limited_Present     => True));
  
!       --  [subprogram] Call
!       --    (Self : access subpP;
!       --     ...other-formals...)
!       --     [return T];
  
!       Append_To (Vis_Decls,
!         Make_Subprogram_Declaration (Loc,
!           Specification => Subp_Decl_Spec));
  
!       --  A : constant System.Address;
  
!       Proxy_Object_Addr := Make_Defining_Identifier (Loc, Name_uA);
  
!       Append_To (Vis_Decls,
          Make_Object_Declaration (Loc,
!           Defining_Identifier =>
!             Proxy_Object_Addr,
!           Constant_Present     =>
!             True,
            Object_Definition   =>
!             New_Occurrence_Of (RTE (RE_Address), Loc)));
  
!       --  private
  
!       --  type subpP is tagged limited record
!       --     All_Calls_Remote : Boolean := [All_Calls_Remote?];
!       --     ...
!       --  end record;
  
!       Append_To (Pvt_Decls,
!         Make_Full_Type_Declaration (Loc,
!           Defining_Identifier =>
!             Proxy_Type_Full_View,
!           Type_Definition     =>
!             Build_Remote_Subprogram_Proxy_Type (Loc,
!               New_Occurrence_Of (All_Calls_Remote_E, Loc))));
  
!       --  Trick semantic analysis into swapping the public and
!       --  full view when freezing the public view.
  
!       Set_Comes_From_Source (Proxy_Type_Full_View, True);
  
!       --  procedure Call
!       --    (Self : access O;
!       --     ...other-formals...) is
!       --  begin
!       --    P (...other-formals...);
!       --  end Call;
  
!       --  function Call
!       --    (Self : access O;
!       --     ...other-formals...)
!       --     return T is
!       --  begin
!       --    return F (...other-formals...);
!       --  end Call;
  
!       if Nkind (Subp_Decl_Spec) = N_Procedure_Specification then
!          Perform_Call :=
!            Make_Procedure_Call_Statement (Loc,
!              Name =>
!                New_Occurrence_Of (Subp_Name, Loc),
!              Parameter_Associations =>
!                Actuals);
!       else
!          Perform_Call :=
!            Make_Return_Statement (Loc,
!              Expression =>
!            Make_Function_Call (Loc,
!              Name =>
!                New_Occurrence_Of (Subp_Name, Loc),
!              Parameter_Associations =>
!                Actuals));
!       end if;
  
!       Formal := First (Parameter_Specifications (Subp_Decl_Spec));
!       pragma Assert (Present (Formal));
!       loop
!          Next (Formal);
!          exit when No (Formal);
!          Append_To (Actuals,
!            New_Occurrence_Of (Defining_Identifier (Formal), Loc));
        end loop;
  
!       --  O : aliased subpP;
  
!       Append_To (Pvt_Decls,
!         Make_Object_Declaration (Loc,
!           Defining_Identifier =>
!             Make_Defining_Identifier (Loc,
!               Name_uO),
!           Aliased_Present =>
!             True,
!           Object_Definition =>
!             New_Occurrence_Of (Proxy_Type, Loc)));
  
!       --  A : constant System.Address := O'Address;
  
!       Append_To (Pvt_Decls,
!         Make_Object_Declaration (Loc,
!           Defining_Identifier =>
!             Make_Defining_Identifier (Loc,
!               Chars (Proxy_Object_Addr)),
!           Constant_Present =>
!             True,
!           Object_Definition =>
!             New_Occurrence_Of (RTE (RE_Address), Loc),
!           Expression =>
!             Make_Attribute_Reference (Loc,
!               Prefix => New_Occurrence_Of (
!                 Defining_Identifier (Last (Pvt_Decls)), Loc),
!               Attribute_Name =>
!                 Name_Address)));
  
!       Append_To (Decls,
          Make_Package_Declaration (Loc,
!           Specification => Make_Package_Specification (Loc,
!             Defining_Unit_Name   => Pkg_Name,
!             Visible_Declarations => Vis_Decls,
!             Private_Declarations => Pvt_Decls,
!             End_Label            => Empty)));
!       Analyze (Last (Decls));
  
        Append_To (Decls,
          Make_Package_Body (Loc,
!           Defining_Unit_Name =>
!             Make_Defining_Identifier (Loc,
!               Chars (Pkg_Name)),
!           Declarations => New_List (
!             Make_Subprogram_Body (Loc,
!               Specification  =>
!                 Subp_Body_Spec,
!               Declarations   => New_List,
!               Handled_Statement_Sequence =>
!                 Make_Handled_Sequence_Of_Statements (Loc,
!                   Statements => New_List (Perform_Call))))));
!       Analyze (Last (Decls));
!    end Add_RAS_Proxy_And_Analyze;
  
!    -----------------------
!    -- Add_RAST_Features --
!    -----------------------
  
!    procedure Add_RAST_Features (Vis_Decl : Node_Id) is
!       RAS_Type : constant Entity_Id :=
!                    Equivalent_Type (Defining_Identifier (Vis_Decl));
  
!       Spec  : constant Node_Id :=
!                 Specification (Unit (Enclosing_Lib_Unit_Node (Vis_Decl)));
!       Decls : List_Id := Private_Declarations (Spec);
! 
!    begin
!       pragma Assert (No (TSS (RAS_Type, TSS_RAS_Access)));
! 
!       if No (Decls) then
!          Decls := Visible_Declarations (Spec);
!       end if;
! 
!       Add_RAS_Dereference_TSS (Vis_Decl);
!       Specific_Add_RAST_Features (Vis_Decl, RAS_Type, Decls);
!    end Add_RAST_Features;
  
     -------------------
     -- Add_Stub_Type --
     -------------------
  
     procedure Add_Stub_Type
!      (Designated_Type   : Entity_Id;
!       RACW_Type         : Entity_Id;
!       Decls             : List_Id;
!       Stub_Type         : out Entity_Id;
!       Stub_Type_Access  : out Entity_Id;
!       RPC_Receiver_Decl : out Node_Id;
!       Existing          : out Boolean)
     is
        Loc : constant Source_Ptr := Sloc (RACW_Type);
  
        Stub_Elements : constant Stub_Structure :=
                          Stubs_Table.Get (Designated_Type);
!       Stub_Type_Decl        : Node_Id;
!       Stub_Type_Access_Decl : Node_Id;
  
     begin
        if Stub_Elements /= Empty_Stub_Structure then
           Stub_Type           := Stub_Elements.Stub_Type;
           Stub_Type_Access    := Stub_Elements.Stub_Type_Access;
!          RPC_Receiver_Decl   := Stub_Elements.RPC_Receiver_Decl;
           Existing            := True;
           return;
        end if;
  
!       Existing         := False;
!       Stub_Type        :=
          Make_Defining_Identifier (Loc, New_Internal_Name ('S'));
!       Stub_Type_Access :=
!         Make_Defining_Identifier (Loc,
!           New_External_Name (
!             Related_Id => Chars (Stub_Type),
!             Suffix     => 'A'));
  
!       Specific_Build_Stub_Type (
!         RACW_Type, Stub_Type,
!         Stub_Type_Decl, RPC_Receiver_Decl);
  
!       Stub_Type_Access_Decl :=
          Make_Full_Type_Declaration (Loc,
!           Defining_Identifier => Stub_Type_Access,
            Type_Definition     =>
!             Make_Access_To_Object_Definition (Loc,
!               All_Present        => True,
!               Subtype_Indication => New_Occurrence_Of (Stub_Type, Loc)));
  
!       Append_To (Decls, Stub_Type_Decl);
!       Analyze (Last (Decls));
!       Append_To (Decls, Stub_Type_Access_Decl);
!       Analyze (Last (Decls));
  
        --  This is in no way a type derivation, but we fake it to make
        --  sure that the dispatching table gets built with the corresponding
*************** package body Exp_Dist is
*** 1931,2399 ****
        Derive_Subprograms (Parent_Type  => Designated_Type,
                            Derived_Type => Stub_Type);
  
!       Stub_Type_Access_Declaration :=
!         Make_Full_Type_Declaration (Loc,
!           Defining_Identifier => Stub_Type_Access,
!           Type_Definition     =>
!             Make_Access_To_Object_Definition (Loc,
!               Subtype_Indication => New_Occurrence_Of (Stub_Type, Loc)));
! 
!       Append_To (Decls, Stub_Type_Access_Declaration);
!       Analyze (Stub_Type_Access_Declaration);
! 
!       Object_RPC_Receiver_Declaration :=
!         Make_Subprogram_Declaration (Loc,
!           Build_RPC_Receiver_Specification (
!             RPC_Receiver     => Object_RPC_Receiver,
!             Stream_Parameter => RPC_Receiver_Stream,
!             Result_Parameter => RPC_Receiver_Result));
  
!       Append_To (Decls, Object_RPC_Receiver_Declaration);
     end Add_Stub_Type;
  
!    ---------------------------------
!    -- Build_General_Calling_Stubs --
!    ---------------------------------
  
!    procedure Build_General_Calling_Stubs
!      (Decls                     : List_Id;
!       Statements                : List_Id;
!       Target_Partition          : Entity_Id;
!       RPC_Receiver              : Node_Id;
!       Subprogram_Id             : Node_Id;
!       Asynchronous              : Node_Id   := Empty;
!       Is_Known_Asynchronous     : Boolean   := False;
!       Is_Known_Non_Asynchronous : Boolean   := False;
!       Is_Function               : Boolean;
!       Spec                      : Node_Id;
!       Object_Type               : Entity_Id := Empty;
!       Nod                       : Node_Id)
     is
!       Loc : constant Source_Ptr := Sloc (Nod);
! 
!       Stream_Parameter : Node_Id;
!       --  Name of the stream used to transmit parameters to the remote package
! 
!       Result_Parameter : Node_Id;
!       --  Name of the result parameter (in non-APC cases) which get the
!       --  result of the remote subprogram.
! 
!       Exception_Return_Parameter : Node_Id;
!       --  Name of the parameter which will hold the exception sent by the
!       --  remote subprogram.
! 
!       Current_Parameter : Node_Id;
!       --  Current parameter being handled
! 
!       Ordered_Parameters_List : constant List_Id :=
!                                   Build_Ordered_Parameters_List (Spec);
! 
!       Asynchronous_Statements     : List_Id := No_List;
!       Non_Asynchronous_Statements : List_Id := No_List;
!       --  Statements specifics to the Asynchronous/Non-Asynchronous cases.
  
!       Extra_Formal_Statements : constant List_Id := New_List;
!       --  List of statements for extra formal parameters. It will appear after
!       --  the regular statements for writing out parameters.
  
     begin
!       --  The general form of a calling stub for a given subprogram is:
! 
!       --    procedure X (...) is
!       --      P : constant Partition_ID := RCI_Cache.Get_Active_Partition_ID;
!       --      Stream, Result : aliased System.RPC.Params_Stream_Type (0);
!       --    begin
!       --       Put_Package_RPC_Receiver_In_Stream; (the package RPC receiver
!       --                  comes from RCI_Cache.Get_RCI_Package_Receiver)
!       --       Put_Subprogram_Id_In_Stream;
!       --       Put_Parameters_In_Stream;
!       --       Do_RPC (Stream, Result);
!       --       Read_Exception_Occurrence_From_Result; Raise_It;
!       --       Read_Out_Parameters_And_Function_Return_From_Stream;
!       --    end X;
! 
!       --  There are some variations: Do_APC is called for an asynchronous
!       --  procedure and the part after the call is completely ommitted
!       --  as well as the declaration of Result. For a function call,
!       --  'Input is always used to read the result even if it is constrained.
! 
!       Stream_Parameter :=
!         Make_Defining_Identifier (Loc, New_Internal_Name ('S'));
! 
!       Append_To (Decls,
!         Make_Object_Declaration (Loc,
!           Defining_Identifier => Stream_Parameter,
!           Aliased_Present     => True,
!           Object_Definition   =>
!             Make_Subtype_Indication (Loc,
!               Subtype_Mark =>
!                 New_Occurrence_Of (RTE (RE_Params_Stream_Type), Loc),
!               Constraint   =>
!                 Make_Index_Or_Discriminant_Constraint (Loc,
!                   Constraints =>
!                     New_List (Make_Integer_Literal (Loc, 0))))));
! 
!       if not Is_Known_Asynchronous then
!          Result_Parameter :=
!            Make_Defining_Identifier (Loc, New_Internal_Name ('R'));
! 
!          Append_To (Decls,
!            Make_Object_Declaration (Loc,
!              Defining_Identifier => Result_Parameter,
!              Aliased_Present     => True,
!              Object_Definition   =>
!                Make_Subtype_Indication (Loc,
!                  Subtype_Mark =>
!                    New_Occurrence_Of (RTE (RE_Params_Stream_Type), Loc),
!                  Constraint   =>
!                    Make_Index_Or_Discriminant_Constraint (Loc,
!                      Constraints =>
!                        New_List (Make_Integer_Literal (Loc, 0))))));
  
!          Exception_Return_Parameter :=
!            Make_Defining_Identifier (Loc, New_Internal_Name ('E'));
  
!          Append_To (Decls,
!            Make_Object_Declaration (Loc,
!              Defining_Identifier => Exception_Return_Parameter,
!              Object_Definition   =>
!                New_Occurrence_Of (RTE (RE_Exception_Occurrence), Loc)));
  
!       else
!          Result_Parameter := Empty;
!          Exception_Return_Parameter := Empty;
        end if;
  
!       --  Put first the RPC receiver corresponding to the remote package
  
!       Append_To (Statements,
!         Make_Attribute_Reference (Loc,
!           Prefix         =>
!             New_Occurrence_Of (RTE (RE_Unsigned_64), Loc),
!           Attribute_Name => Name_Write,
!           Expressions    => New_List (
!             Make_Attribute_Reference (Loc,
!               Prefix         =>
!                 New_Occurrence_Of (Stream_Parameter, Loc),
!               Attribute_Name =>
!                 Name_Access),
!             RPC_Receiver)));
  
!       --  Then put the Subprogram_Id of the subprogram we want to call in
!       --  the stream.
  
!       Append_To (Statements,
!         Make_Attribute_Reference (Loc,
!           Prefix         =>
!             New_Occurrence_Of (RTE (RE_Subprogram_Id), Loc),
!           Attribute_Name =>
!             Name_Write,
!           Expressions      => New_List (
              Make_Attribute_Reference (Loc,
!               Prefix         =>
!                 New_Occurrence_Of (Stream_Parameter, Loc),
!               Attribute_Name => Name_Access),
!             Subprogram_Id)));
! 
!       Current_Parameter := First (Ordered_Parameters_List);
! 
!       while Current_Parameter /= Empty loop
! 
!          declare
!             Typ             : constant Node_Id :=
!               Parameter_Type (Current_Parameter);
!             Etyp            : Entity_Id;
!             Constrained     : Boolean;
!             Value           : Node_Id;
!             Extra_Parameter : Entity_Id;
! 
!          begin
! 
!             if Is_RACW_Controlling_Formal (Current_Parameter, Object_Type) then
! 
!                --  In the case of a controlling formal argument, we marshall
!                --  its addr field rather than the local stub.
! 
!                Append_To (Statements,
!                   Pack_Node_Into_Stream (Loc,
!                     Stream => Stream_Parameter,
!                     Object =>
!                       Make_Selected_Component (Loc,
!                         Prefix        =>
!                           New_Occurrence_Of (
!                             Defining_Identifier (Current_Parameter), Loc),
!                         Selector_Name =>
!                           Make_Identifier (Loc, Name_Addr)),
!                     Etyp   => RTE (RE_Unsigned_64)));
! 
!             else
!                Value := New_Occurrence_Of
!                  (Defining_Identifier (Current_Parameter), Loc);
! 
!                --  Access type parameters are transmitted as in out
!                --  parameters. However, a dereference is needed so that
!                --  we marshall the designated object.
! 
!                if Nkind (Typ) = N_Access_Definition then
!                   Value := Make_Explicit_Dereference (Loc, Value);
!                   Etyp  := Etype (Subtype_Mark (Typ));
!                else
!                   Etyp := Etype (Typ);
!                end if;
! 
!                Constrained :=
!                  Is_Constrained (Etyp) or else Is_Elementary_Type (Etyp);
! 
!                --  Any parameter but unconstrained out parameters are
!                --  transmitted to the peer.
! 
!                if In_Present (Current_Parameter)
!                  or else not Out_Present (Current_Parameter)
!                  or else not Constrained
!                then
!                   Append_To (Statements,
!                     Make_Attribute_Reference (Loc,
!                       Prefix         =>
!                         New_Occurrence_Of (Etyp, Loc),
!                       Attribute_Name => Output_From_Constrained (Constrained),
!                       Expressions    => New_List (
!                         Make_Attribute_Reference (Loc,
!                           Prefix         =>
!                             New_Occurrence_Of (Stream_Parameter, Loc),
!                           Attribute_Name => Name_Access),
!                         Value)));
!                end if;
!             end if;
! 
!             --  If the current parameter has a dynamic constrained status,
!             --  then this status is transmitted as well.
!             --  This should be done for accessibility as well ???
! 
!             if Nkind (Typ) /= N_Access_Definition
!               and then Need_Extra_Constrained (Current_Parameter)
!             then
!                --  In this block, we do not use the extra formal that has been
!                --  created because it does not exist at the time of expansion
!                --  when building calling stubs for remote access to subprogram
!                --  types. We create an extra variable of this type and push it
!                --  in the stream after the regular parameters.
! 
!                Extra_Parameter := Make_Defining_Identifier
!                                     (Loc, New_Internal_Name ('P'));
! 
!                Append_To (Decls,
!                   Make_Object_Declaration (Loc,
!                     Defining_Identifier => Extra_Parameter,
!                     Constant_Present    => True,
!                     Object_Definition   =>
!                        New_Occurrence_Of (Standard_Boolean, Loc),
!                     Expression          =>
!                        Make_Attribute_Reference (Loc,
!                          Prefix         =>
!                            New_Occurrence_Of (
!                              Defining_Identifier (Current_Parameter), Loc),
!                          Attribute_Name => Name_Constrained)));
! 
!                Append_To (Extra_Formal_Statements,
!                   Make_Attribute_Reference (Loc,
!                     Prefix         =>
!                       New_Occurrence_Of (Standard_Boolean, Loc),
!                     Attribute_Name =>
!                       Name_Write,
!                     Expressions    => New_List (
!                       Make_Attribute_Reference (Loc,
!                         Prefix         =>
!                           New_Occurrence_Of (Stream_Parameter, Loc),
!                         Attribute_Name =>
!                           Name_Access),
!                       New_Occurrence_Of (Extra_Parameter, Loc))));
!             end if;
! 
!             Next (Current_Parameter);
!          end;
!       end loop;
! 
!       --  Append the formal statements list to the statements
! 
!       Append_List_To (Statements, Extra_Formal_Statements);
! 
!       if not Is_Known_Non_Asynchronous then
! 
!          --  Build the call to System.RPC.Do_APC
! 
!          Asynchronous_Statements := New_List (
!            Make_Procedure_Call_Statement (Loc,
!              Name                   =>
!                New_Occurrence_Of (RTE (RE_Do_Apc), Loc),
!              Parameter_Associations => New_List (
!                New_Occurrence_Of (Target_Partition, Loc),
!                Make_Attribute_Reference (Loc,
!                  Prefix         =>
!                    New_Occurrence_Of (Stream_Parameter, Loc),
!                  Attribute_Name =>
!                    Name_Access))));
!       else
!          Asynchronous_Statements := No_List;
!       end if;
! 
!       if not Is_Known_Asynchronous then
! 
!          --  Build the call to System.RPC.Do_RPC
! 
!          Non_Asynchronous_Statements := New_List (
!            Make_Procedure_Call_Statement (Loc,
!              Name                   =>
!                New_Occurrence_Of (RTE (RE_Do_Rpc), Loc),
!              Parameter_Associations => New_List (
!                New_Occurrence_Of (Target_Partition, Loc),
! 
!                Make_Attribute_Reference (Loc,
!                  Prefix         =>
!                    New_Occurrence_Of (Stream_Parameter, Loc),
!                  Attribute_Name =>
!                    Name_Access),
! 
!                Make_Attribute_Reference (Loc,
!                  Prefix         =>
!                    New_Occurrence_Of (Result_Parameter, Loc),
!                  Attribute_Name =>
!                    Name_Access))));
! 
!          --  Read the exception occurrence from the result stream and
!          --  reraise it. It does no harm if this is a Null_Occurrence since
!          --  this does nothing.
! 
!          Append_To (Non_Asynchronous_Statements,
!            Make_Attribute_Reference (Loc,
!              Prefix         =>
!                New_Occurrence_Of (RTE (RE_Exception_Occurrence), Loc),
! 
!              Attribute_Name =>
!                Name_Read,
! 
!              Expressions    => New_List (
!                Make_Attribute_Reference (Loc,
!                  Prefix         =>
!                    New_Occurrence_Of (Result_Parameter, Loc),
!                  Attribute_Name =>
!                    Name_Access),
!                New_Occurrence_Of (Exception_Return_Parameter, Loc))));
! 
!          Append_To (Non_Asynchronous_Statements,
!            Make_Procedure_Call_Statement (Loc,
!              Name                   =>
!                New_Occurrence_Of (RTE (RE_Reraise_Occurrence), Loc),
!              Parameter_Associations => New_List (
!                New_Occurrence_Of (Exception_Return_Parameter, Loc))));
! 
!          if Is_Function then
! 
!             --  If this is a function call, then read the value and return
!             --  it. The return value is written/read using 'Output/'Input.
! 
!             Append_To (Non_Asynchronous_Statements,
!               Make_Tag_Check (Loc,
!                 Make_Return_Statement (Loc,
!                   Expression =>
!                     Make_Attribute_Reference (Loc,
!                       Prefix         =>
!                         New_Occurrence_Of (
!                           Etype (Subtype_Mark (Spec)), Loc),
! 
!                       Attribute_Name => Name_Input,
! 
!                       Expressions    => New_List (
!                         Make_Attribute_Reference (Loc,
!                           Prefix         =>
!                             New_Occurrence_Of (Result_Parameter, Loc),
!                           Attribute_Name => Name_Access))))));
! 
!          else
!             --  Loop around parameters and assign out (or in out) parameters.
!             --  In the case of RACW, controlling arguments cannot possibly
!             --  have changed since they are remote, so we do not read them
!             --  from the stream.
! 
!             Current_Parameter :=
!               First (Ordered_Parameters_List);
! 
!             while Current_Parameter /= Empty loop
! 
!                declare
!                   Typ   : constant Node_Id :=
!                     Parameter_Type (Current_Parameter);
!                   Etyp  : Entity_Id;
!                   Value : Node_Id;
!                begin
!                   Value := New_Occurrence_Of
!                     (Defining_Identifier (Current_Parameter), Loc);
! 
!                   if Nkind (Typ) = N_Access_Definition then
!                      Value := Make_Explicit_Dereference (Loc, Value);
!                      Etyp  := Etype (Subtype_Mark (Typ));
!                   else
!                      Etyp := Etype (Typ);
!                   end if;
! 
!                   if (Out_Present (Current_Parameter)
!                       or else Nkind (Typ) = N_Access_Definition)
!                     and then Etyp /= Object_Type
!                   then
!                      Append_To (Non_Asynchronous_Statements,
!                         Make_Attribute_Reference (Loc,
!                           Prefix         =>
!                             New_Occurrence_Of (Etyp, Loc),
! 
!                           Attribute_Name => Name_Read,
! 
!                           Expressions    => New_List (
!                             Make_Attribute_Reference (Loc,
!                               Prefix         =>
!                                 New_Occurrence_Of (Result_Parameter, Loc),
!                               Attribute_Name =>
!                                 Name_Access),
!                             Value)));
!                   end if;
!                end;
! 
!                Next (Current_Parameter);
!             end loop;
!          end if;
!       end if;
! 
!       if Is_Known_Asynchronous then
!          Append_List_To (Statements, Asynchronous_Statements);
  
!       elsif Is_Known_Non_Asynchronous then
!          Append_List_To (Statements, Non_Asynchronous_Statements);
  
!       else
!          pragma Assert (Asynchronous /= Empty);
!          Prepend_To (Asynchronous_Statements,
!            Make_Attribute_Reference (Loc,
!              Prefix         => New_Occurrence_Of (Standard_Boolean, Loc),
!              Attribute_Name => Name_Write,
!              Expressions    => New_List (
!                Make_Attribute_Reference (Loc,
!                  Prefix         => New_Occurrence_Of (Stream_Parameter, Loc),
!                  Attribute_Name => Name_Access),
!                New_Occurrence_Of (Standard_True, Loc))));
!          Prepend_To (Non_Asynchronous_Statements,
!            Make_Attribute_Reference (Loc,
!              Prefix         => New_Occurrence_Of (Standard_Boolean, Loc),
!              Attribute_Name => Name_Write,
!              Expressions    => New_List (
!                Make_Attribute_Reference (Loc,
!                  Prefix         => New_Occurrence_Of (Stream_Parameter, Loc),
!                  Attribute_Name => Name_Access),
!                New_Occurrence_Of (Standard_False, Loc))));
!          Append_To (Statements,
!            Make_Implicit_If_Statement (Nod,
!              Condition       => Asynchronous,
!              Then_Statements => Asynchronous_Statements,
!              Else_Statements => Non_Asynchronous_Statements));
!       end if;
!    end Build_General_Calling_Stubs;
  
     -----------------------------------
     -- Build_Ordered_Parameters_List --
--- 1794,1885 ----
        Derive_Subprograms (Parent_Type  => Designated_Type,
                            Derived_Type => Stub_Type);
  
!       if Present (RPC_Receiver_Decl) then
!          Append_To (Decls, RPC_Receiver_Decl);
!       else
!          RPC_Receiver_Decl := Last (Decls);
!       end if;
  
!       Stubs_Table.Set (Designated_Type,
!         (Stub_Type           => Stub_Type,
!          Stub_Type_Access    => Stub_Type_Access,
!          RPC_Receiver_Decl   => RPC_Receiver_Decl,
!          RACW_Type           => RACW_Type));
     end Add_Stub_Type;
  
!    ----------------------------------
!    -- Assign_Subprogram_Identifier --
!    ----------------------------------
  
!    procedure Assign_Subprogram_Identifier
!      (Def : Entity_Id;
!       Spn : Int;
!       Id  : out String_Id)
     is
!       N : constant Name_Id := Chars (Def);
  
!       Overload_Order : constant Int :=
!                          Overload_Counter_Table.Get (N) + 1;
  
     begin
!       Overload_Counter_Table.Set (N, Overload_Order);
  
!       Get_Name_String (N);
  
!       --  Homonym handling: as in Exp_Dbug, but much simpler,
!       --  because the only entities for which we have to generate
!       --  names here need only to be disambiguated within their
!       --  own scope.
  
!       if Overload_Order > 1 then
!          Name_Buffer (Name_Len + 1 .. Name_Len + 2) := "__";
!          Name_Len := Name_Len + 2;
!          Add_Nat_To_Name_Buffer (Overload_Order);
        end if;
  
!       Id := String_From_Name_Buffer;
!       Subprogram_Identifier_Table.Set (Def,
!         Subprogram_Identifiers'(Str_Identifier => Id, Int_Identifier => Spn));
!    end Assign_Subprogram_Identifier;
  
!    ------------------------------
!    -- Build_Get_Unique_RP_Call --
!    ------------------------------
  
!    function Build_Get_Unique_RP_Call
!      (Loc       : Source_Ptr;
!       Pointer   : Entity_Id;
!       Stub_Type : Entity_Id) return List_Id
!    is
!    begin
!       return New_List (
!         Make_Procedure_Call_Statement (Loc,
!           Name                   =>
!             New_Occurrence_Of (RTE (RE_Get_Unique_Remote_Pointer), Loc),
!           Parameter_Associations => New_List (
!             Unchecked_Convert_To (RTE (RE_RACW_Stub_Type_Access),
!               New_Occurrence_Of (Pointer, Loc)))),
  
!         Make_Assignment_Statement (Loc,
!           Name =>
!             Make_Selected_Component (Loc,
!               Prefix =>
!                 New_Occurrence_Of (Pointer, Loc),
!               Selector_Name =>
!                 New_Occurrence_Of (Tag_Component
!                   (Designated_Type (Etype (Pointer))), Loc)),
!           Expression =>
              Make_Attribute_Reference (Loc,
!               Prefix =>
!                 New_Occurrence_Of (Stub_Type, Loc),
!               Attribute_Name =>
!                 Name_Tag)));
  
!       --  Note: The assignment to Pointer._Tag is safe here because
!       --  we carefully ensured that Stub_Type has exactly the same layout
!       --  as System.Partition_Interface.RACW_Stub_Type.
  
!    end Build_Get_Unique_RP_Call;
  
     -----------------------------------
     -- Build_Ordered_Parameters_List --
*************** package body Exp_Dist is
*** 2404,2409 ****
--- 1890,1898 ----
        Unconstrained_List : List_Id;
        Current_Parameter  : Node_Id;
  
+       First_Parameter : Node_Id;
+       For_RAS         : Boolean := False;
+ 
     begin
        if not Present (Parameter_Specifications (Spec)) then
           return New_List;
*************** package body Exp_Dist is
*** 2411,2427 ****
  
        Constrained_List   := New_List;
        Unconstrained_List := New_List;
  
!       --  Loop through the parameters and add them to the right list
  
!       Current_Parameter := First (Parameter_Specifications (Spec));
!       while Current_Parameter /= Empty loop
  
!          if Nkind (Parameter_Type (Current_Parameter)) = N_Access_Definition
               or else
!            Is_Constrained (Etype (Parameter_Type (Current_Parameter)))
               or else
!            Is_Elementary_Type (Etype (Parameter_Type (Current_Parameter)))
           then
              Append_To (Constrained_List, New_Copy (Current_Parameter));
           else
--- 1900,1923 ----
  
        Constrained_List   := New_List;
        Unconstrained_List := New_List;
+       First_Parameter    := First (Parameter_Specifications (Spec));
  
!       if Nkind (Parameter_Type (First_Parameter)) = N_Access_Definition
!         and then Chars (Defining_Identifier (First_Parameter)) = Name_uS
!       then
!          For_RAS := True;
!       end if;
  
!       --  Loop through the parameters and add them to the right list
  
!       Current_Parameter := First_Parameter;
!       while Present (Current_Parameter) loop
!          if (Nkind (Parameter_Type (Current_Parameter)) = N_Access_Definition
               or else
!                Is_Constrained (Etype (Parameter_Type (Current_Parameter)))
               or else
!                Is_Elementary_Type (Etype (Parameter_Type (Current_Parameter))))
!            and then not (For_RAS and then Current_Parameter = First_Parameter)
           then
              Append_To (Constrained_List, New_Copy (Current_Parameter));
           else
*************** package body Exp_Dist is
*** 2436,2442 ****
        Append_List_To (Unconstrained_List, Constrained_List);
  
        return Unconstrained_List;
- 
     end Build_Ordered_Parameters_List;
  
     ----------------------------------
--- 1932,1937 ----
*************** package body Exp_Dist is
*** 2445,2450 ****
--- 1940,1946 ----
  
     procedure Build_Passive_Partition_Stub (U : Node_Id) is
        Pkg_Spec : Node_Id;
+       Pkg_Name : String_Id;
        L        : List_Id;
        Reg      : Node_Id;
        Loc      : constant Source_Ptr := Sloc (U);
*************** package body Exp_Dist is
*** 2456,2462 ****
        declare
           Dist_OK : Entity_Id;
           pragma Warnings (Off, Dist_OK);
- 
        begin
           Dist_OK := RTE (RE_Params_Stream_Type);
        end;
--- 1952,1957 ----
*************** package body Exp_Dist is
*** 2471,2482 ****
           L := Declarations (U);
        end if;
  
        Reg :=
          Make_Procedure_Call_Statement (Loc,
            Name                   =>
              New_Occurrence_Of (RTE (RE_Register_Passive_Package), Loc),
            Parameter_Associations => New_List (
!             Make_String_Literal (Loc, Get_Pkg_Name_String_Id (Pkg_Spec)),
              Make_Attribute_Reference (Loc,
                Prefix         =>
                  New_Occurrence_Of (Defining_Entity (Pkg_Spec), Loc),
--- 1966,1979 ----
           L := Declarations (U);
        end if;
  
+       Get_Library_Unit_Name_String (Pkg_Spec);
+       Pkg_Name := String_From_Name_Buffer;
        Reg :=
          Make_Procedure_Call_Statement (Loc,
            Name                   =>
              New_Occurrence_Of (RTE (RE_Register_Passive_Package), Loc),
            Parameter_Associations => New_List (
!             Make_String_Literal (Loc, Pkg_Name),
              Make_Attribute_Reference (Loc,
                Prefix         =>
                  New_Occurrence_Of (Defining_Entity (Pkg_Spec), Loc),
*************** package body Exp_Dist is
*** 2491,2543 ****
     --------------------------------------
  
     function Build_RPC_Receiver_Specification
!      (RPC_Receiver     : Entity_Id;
!       Stream_Parameter : Entity_Id;
!       Result_Parameter : Entity_Id)
!       return             Node_Id
     is
        Loc : constant Source_Ptr := Sloc (RPC_Receiver);
- 
     begin
        return
          Make_Procedure_Specification (Loc,
            Defining_Unit_Name       => RPC_Receiver,
            Parameter_Specifications => New_List (
              Make_Parameter_Specification (Loc,
!               Defining_Identifier => Stream_Parameter,
!               Parameter_Type      =>
!                 Make_Access_Definition (Loc,
!                   Subtype_Mark =>
!                     New_Occurrence_Of (RTE (RE_Params_Stream_Type), Loc))),
! 
!             Make_Parameter_Specification (Loc,
!               Defining_Identifier => Result_Parameter,
                Parameter_Type      =>
!                 Make_Access_Definition (Loc,
!                   Subtype_Mark =>
!                     New_Occurrence_Of
!                       (RTE (RE_Params_Stream_Type), Loc)))));
     end Build_RPC_Receiver_Specification;
  
     ------------------------------------
     -- Build_Subprogram_Calling_Stubs --
     ------------------------------------
  
     function Build_Subprogram_Calling_Stubs
       (Vis_Decl                 : Node_Id;
!       Subp_Id                  : Int;
        Asynchronous             : Boolean;
        Dynamically_Asynchronous : Boolean   := False;
        Stub_Type                : Entity_Id := Empty;
        Locator                  : Entity_Id := Empty;
!       New_Name                 : Name_Id   := No_Name)
!       return                     Node_Id
     is
        Loc : constant Source_Ptr := Sloc (Vis_Decl);
  
-       Target_Partition : Node_Id;
-       --  Contains the name of the target partition
- 
        Decls      : constant List_Id := New_List;
        Statements : constant List_Id := New_List;
  
--- 1988,2073 ----
     --------------------------------------
  
     function Build_RPC_Receiver_Specification
!      (RPC_Receiver      : Entity_Id;
!       Request_Parameter : Entity_Id) return Node_Id
     is
        Loc : constant Source_Ptr := Sloc (RPC_Receiver);
     begin
        return
          Make_Procedure_Specification (Loc,
            Defining_Unit_Name       => RPC_Receiver,
            Parameter_Specifications => New_List (
              Make_Parameter_Specification (Loc,
!               Defining_Identifier => Request_Parameter,
                Parameter_Type      =>
!                 New_Occurrence_Of (RTE (RE_Request_Access), Loc))));
     end Build_RPC_Receiver_Specification;
  
+    ----------------------------------------
+    -- Build_Remote_Subprogram_Proxy_Type --
+    ----------------------------------------
+ 
+    function Build_Remote_Subprogram_Proxy_Type
+      (Loc            : Source_Ptr;
+       ACR_Expression : Node_Id) return Node_Id
+    is
+    begin
+       return
+         Make_Record_Definition (Loc,
+           Tagged_Present  => True,
+           Limited_Present => True,
+           Component_List  =>
+             Make_Component_List (Loc,
+ 
+               Component_Items => New_List (
+                 Make_Component_Declaration (Loc,
+                   Defining_Identifier =>
+                     Make_Defining_Identifier (Loc,
+                       Name_All_Calls_Remote),
+                   Component_Definition =>
+                     Make_Component_Definition (Loc,
+                       Subtype_Indication =>
+                         New_Occurrence_Of (Standard_Boolean, Loc)),
+                   Expression =>
+                     ACR_Expression),
+ 
+                 Make_Component_Declaration (Loc,
+                   Defining_Identifier =>
+                     Make_Defining_Identifier (Loc,
+                       Name_Receiver),
+                   Component_Definition =>
+                     Make_Component_Definition (Loc,
+                       Subtype_Indication =>
+                         New_Occurrence_Of (RTE (RE_Address), Loc)),
+                   Expression =>
+                     New_Occurrence_Of (RTE (RE_Null_Address), Loc)),
+ 
+                 Make_Component_Declaration (Loc,
+                   Defining_Identifier =>
+                     Make_Defining_Identifier (Loc,
+                       Name_Subp_Id),
+                   Component_Definition =>
+                     Make_Component_Definition (Loc,
+                       Subtype_Indication =>
+                         New_Occurrence_Of (RTE (RE_Subprogram_Id), Loc))))));
+    end Build_Remote_Subprogram_Proxy_Type;
+ 
     ------------------------------------
     -- Build_Subprogram_Calling_Stubs --
     ------------------------------------
  
     function Build_Subprogram_Calling_Stubs
       (Vis_Decl                 : Node_Id;
!       Subp_Id                  : Node_Id;
        Asynchronous             : Boolean;
        Dynamically_Asynchronous : Boolean   := False;
        Stub_Type                : Entity_Id := Empty;
+       RACW_Type                : Entity_Id := Empty;
        Locator                  : Entity_Id := Empty;
!       New_Name                 : Name_Id   := No_Name) return Node_Id
     is
        Loc : constant Source_Ptr := Sloc (Vis_Decl);
  
        Decls      : constant List_Id := New_List;
        Statements : constant List_Id := New_List;
  
*************** package body Exp_Dist is
*** 2545,2551 ****
        --  The specification of the body
  
        Controlling_Parameter : Entity_Id := Empty;
-       RPC_Receiver          : Node_Id;
  
        Asynchronous_Expr : Node_Id := Empty;
  
--- 2075,2080 ----
*************** package body Exp_Dist is
*** 2553,2559 ****
  
        Spec_To_Use : Node_Id;
  
!       procedure Insert_Partition_Check (Parameter : in Node_Id);
        --  Check that the parameter has been elaborated on the same partition
        --  than the controlling parameter (E.4(19)).
  
--- 2082,2088 ----
  
        Spec_To_Use : Node_Id;
  
!       procedure Insert_Partition_Check (Parameter : Node_Id);
        --  Check that the parameter has been elaborated on the same partition
        --  than the controlling parameter (E.4(19)).
  
*************** package body Exp_Dist is
*** 2561,2626 ****
        -- Insert_Partition_Check --
        ----------------------------
  
!       procedure Insert_Partition_Check (Parameter : in Node_Id) is
!          Parameter_Entity  : constant Entity_Id :=
!                                Defining_Identifier (Parameter);
!          Condition         : Node_Id;
! 
!          Designated_Object : Node_Id;
!          pragma Warnings (Off, Designated_Object);
!          --  Is it really right that this is unreferenced ???
! 
        begin
           --  The expression that will be built is of the form:
!          --    if not (Parameter in Stub_Type and then
!          --            Parameter.Origin = Controlling.Origin)
!          --    then
           --      raise Constraint_Error;
           --    end if;
-          --
-          --  Condition contains the reversed condition. Also, Parameter is
-          --  dereferenced if it is an access type. We do not check that
-          --  Parameter is in Stub_Type since such a check has been inserted
-          --  at the point of call already (a tag check since we have multiple
-          --  controlling operands).
- 
-          if Nkind (Parameter_Type (Parameter)) = N_Access_Definition then
-             Designated_Object :=
-               Make_Explicit_Dereference (Loc,
-                 Prefix => New_Occurrence_Of (Parameter_Entity, Loc));
-          else
-             Designated_Object := New_Occurrence_Of (Parameter_Entity, Loc);
-          end if;
- 
-          Condition :=
-            Make_Op_Eq (Loc,
-              Left_Opnd  =>
-                Make_Selected_Component (Loc,
-                  Prefix        =>
-                    New_Occurrence_Of (Parameter_Entity, Loc),
-                Selector_Name =>
-                  Make_Identifier (Loc, Name_Origin)),
  
!              Right_Opnd =>
!                Make_Selected_Component (Loc,
!                  Prefix        =>
!                    New_Occurrence_Of (Controlling_Parameter, Loc),
!                Selector_Name =>
!                  Make_Identifier (Loc, Name_Origin)));
  
           Append_To (Decls,
             Make_Raise_Constraint_Error (Loc,
               Condition       =>
!                Make_Op_Not (Loc, Right_Opnd => Condition),
               Reason => CE_Partition_Check_Failed));
        end Insert_Partition_Check;
  
     --  Start of processing for Build_Subprogram_Calling_Stubs
  
     begin
-       Target_Partition :=
-         Make_Defining_Identifier (Loc, New_Internal_Name ('P'));
- 
        Subp_Spec := Copy_Specification (Loc,
          Spec     => Specification (Vis_Decl),
          New_Name => New_Name);
--- 2090,2129 ----
        -- Insert_Partition_Check --
        ----------------------------
  
!       procedure Insert_Partition_Check (Parameter : Node_Id) is
!          Parameter_Entity : constant Entity_Id :=
!                               Defining_Identifier (Parameter);
        begin
           --  The expression that will be built is of the form:
! 
!          --    if not Same_Partition (Parameter, Controlling_Parameter) then
           --      raise Constraint_Error;
           --    end if;
  
!          --  We do not check that Parameter is in Stub_Type since such a check
!          --  has been inserted at the point of call already (a tag check since
!          --  we have multiple controlling operands).
  
           Append_To (Decls,
             Make_Raise_Constraint_Error (Loc,
               Condition       =>
!                Make_Op_Not (Loc,
!                  Right_Opnd =>
!                    Make_Function_Call (Loc,
!                      Name =>
!                        New_Occurrence_Of (RTE (RE_Same_Partition), Loc),
!                      Parameter_Associations =>
!                        New_List (
!                          Unchecked_Convert_To (RTE (RE_RACW_Stub_Type_Access),
!                            New_Occurrence_Of (Parameter_Entity, Loc)),
!                          Unchecked_Convert_To (RTE (RE_RACW_Stub_Type_Access),
!                            New_Occurrence_Of (Controlling_Parameter, Loc))))),
               Reason => CE_Partition_Check_Failed));
        end Insert_Partition_Check;
  
     --  Start of processing for Build_Subprogram_Calling_Stubs
  
     begin
        Subp_Spec := Copy_Specification (Loc,
          Spec     => Specification (Vis_Decl),
          New_Name => New_Name);
*************** package body Exp_Dist is
*** 2636,2642 ****
        --  Find a controlling argument if we have a stub type. Also check
        --  if this subprogram can be made asynchronous.
  
!       if Stub_Type /= Empty
           and then Present (Parameter_Specifications (Spec_To_Use))
        then
           declare
--- 2139,2145 ----
        --  Find a controlling argument if we have a stub type. Also check
        --  if this subprogram can be made asynchronous.
  
!       if Present (Stub_Type)
           and then Present (Parameter_Specifications (Spec_To_Use))
        then
           declare
*************** package body Exp_Dist is
*** 2644,2651 ****
                                    First (Parameter_Specifications
                                             (Spec_To_Use));
           begin
!             while Current_Parameter /= Empty loop
! 
                 if
                   Is_RACW_Controlling_Formal (Current_Parameter, Stub_Type)
                 then
--- 2147,2153 ----
                                    First (Parameter_Specifications
                                             (Spec_To_Use));
           begin
!             while Present (Current_Parameter) loop
                 if
                   Is_RACW_Controlling_Formal (Current_Parameter, Stub_Type)
                 then
*************** package body Exp_Dist is
*** 2662,2730 ****
           end;
        end if;
  
!       if Stub_Type /= Empty then
!          pragma Assert (Controlling_Parameter /= Empty);
! 
!          Append_To (Decls,
!            Make_Object_Declaration (Loc,
!              Defining_Identifier => Target_Partition,
!              Constant_Present    => True,
!              Object_Definition   =>
!                New_Occurrence_Of (RTE (RE_Partition_ID), Loc),
! 
!              Expression          =>
!                Make_Selected_Component (Loc,
!                  Prefix        =>
!                    New_Occurrence_Of (Controlling_Parameter, Loc),
!                  Selector_Name =>
!                    Make_Identifier (Loc, Name_Origin))));
! 
!          RPC_Receiver :=
!            Make_Selected_Component (Loc,
!              Prefix        =>
!                New_Occurrence_Of (Controlling_Parameter, Loc),
!              Selector_Name =>
!                Make_Identifier (Loc, Name_Receiver));
! 
!       else
!          Append_To (Decls,
!            Make_Object_Declaration (Loc,
!              Defining_Identifier => Target_Partition,
!              Constant_Present    => True,
!              Object_Definition   =>
!                New_Occurrence_Of (RTE (RE_Partition_ID), Loc),
! 
!              Expression          =>
!                Make_Function_Call (Loc,
!                  Name => Make_Selected_Component (Loc,
!                    Prefix        =>
!                      Make_Identifier (Loc, Chars (RCI_Locator)),
!                    Selector_Name =>
!                      Make_Identifier (Loc, Name_Get_Active_Partition_ID)))));
! 
!          RPC_Receiver :=
!            Make_Selected_Component (Loc,
!              Prefix        =>
!                Make_Identifier (Loc, Chars (RCI_Locator)),
!              Selector_Name =>
!                Make_Identifier (Loc, Name_Get_RCI_Package_Receiver));
!       end if;
  
        if Dynamically_Asynchronous then
!          Asynchronous_Expr :=
!            Make_Selected_Component (Loc,
!              Prefix        =>
!                New_Occurrence_Of (Controlling_Parameter, Loc),
!              Selector_Name =>
!                Make_Identifier (Loc, Name_Asynchronous));
        end if;
  
!       Build_General_Calling_Stubs
          (Decls                 => Decls,
           Statements            => Statements,
!          Target_Partition      => Target_Partition,
!          RPC_Receiver          => RPC_Receiver,
!          Subprogram_Id         => Make_Integer_Literal (Loc, Subp_Id),
           Asynchronous          => Asynchronous_Expr,
           Is_Known_Asynchronous => Asynchronous
                                      and then not Dynamically_Asynchronous,
--- 2164,2183 ----
           end;
        end if;
  
!       pragma Assert (No (Stub_Type) or else Present (Controlling_Parameter));
  
        if Dynamically_Asynchronous then
!          Asynchronous_Expr := Make_Selected_Component (Loc,
!                                 Prefix        => Controlling_Parameter,
!                                 Selector_Name => Name_Asynchronous);
        end if;
  
!       Specific_Build_General_Calling_Stubs
          (Decls                 => Decls,
           Statements            => Statements,
!          Target                => Specific_Build_Stub_Target (Loc,
!                                     Decls, RCI_Locator, Controlling_Parameter),
!          Subprogram_Id         => Subp_Id,
           Asynchronous          => Asynchronous_Expr,
           Is_Known_Asynchronous => Asynchronous
                                      and then not Dynamically_Asynchronous,
*************** package body Exp_Dist is
*** 2734,2740 ****
           Is_Function           => Nkind (Spec_To_Use) =
                                      N_Function_Specification,
           Spec                  => Spec_To_Use,
!          Object_Type           => Stub_Type,
           Nod                   => Vis_Decl);
  
        RCI_Calling_Stubs_Table.Set
--- 2187,2194 ----
           Is_Function           => Nkind (Spec_To_Use) =
                                      N_Function_Specification,
           Spec                  => Spec_To_Use,
!          Stub_Type             => Stub_Type,
!          RACW_Type             => RACW_Type,
           Nod                   => Vis_Decl);
  
        RCI_Calling_Stubs_Table.Set
*************** package body Exp_Dist is
*** 2749,3205 ****
              Make_Handled_Sequence_Of_Statements (Loc, Statements));
     end Build_Subprogram_Calling_Stubs;
  
!    --------------------------------------
!    -- Build_Subprogram_Receiving_Stubs --
!    --------------------------------------
  
!    function Build_Subprogram_Receiving_Stubs
!      (Vis_Decl                 : Node_Id;
!       Asynchronous             : Boolean;
!       Dynamically_Asynchronous : Boolean   := False;
!       Stub_Type                : Entity_Id := Empty;
!       RACW_Type                : Entity_Id := Empty;
!       Parent_Primitive         : Entity_Id := Empty)
!       return Node_Id
     is
-       Loc : constant Source_Ptr := Sloc (Vis_Decl);
- 
-       Stream_Parameter : Node_Id;
-       Result_Parameter : Node_Id;
-       --  See explanations of those in Build_Subprogram_Calling_Stubs
- 
-       Decls : constant List_Id := New_List;
-       --  All the parameters will get declared before calling the real
-       --  subprograms. Also the out parameters will be declared.
- 
-       Statements : constant List_Id := New_List;
- 
-       Extra_Formal_Statements : constant List_Id := New_List;
-       --  Statements concerning extra formal parameters
- 
-       After_Statements : constant List_Id := New_List;
-       --  Statements to be executed after the subprogram call
- 
-       Inner_Decls : List_Id := No_List;
-       --  In case of a function, the inner declarations are needed since
-       --  the result may be unconstrained.
- 
-       Excep_Handler : Node_Id;
-       Excep_Choice  : Entity_Id;
-       Excep_Code    : List_Id;
- 
-       Parameter_List : constant List_Id := New_List;
-       --  List of parameters to be passed to the subprogram.
- 
-       Current_Parameter : Node_Id;
- 
-       Ordered_Parameters_List : constant List_Id :=
-                                   Build_Ordered_Parameters_List
-                                     (Specification (Vis_Decl));
- 
-       Subp_Spec : Node_Id;
-       --  Subprogram specification
- 
-       Called_Subprogram : Node_Id;
-       --  The subprogram to call
- 
-       Null_Raise_Statement : Node_Id;
- 
-       Dynamic_Async : Entity_Id;
- 
     begin
!       if RACW_Type /= Empty then
!          Called_Subprogram :=
!            New_Occurrence_Of (Parent_Primitive, Loc);
!       else
!          Called_Subprogram :=
!            New_Occurrence_Of (
!              Defining_Unit_Name (Specification (Vis_Decl)), Loc);
!       end if;
! 
!       Stream_Parameter :=
!         Make_Defining_Identifier (Loc, New_Internal_Name ('S'));
! 
!       if Dynamically_Asynchronous then
!          Dynamic_Async :=
!            Make_Defining_Identifier (Loc, New_Internal_Name ('S'));
!       else
!          Dynamic_Async := Empty;
!       end if;
! 
!       if not Asynchronous or else Dynamically_Asynchronous then
!          Result_Parameter :=
!            Make_Defining_Identifier (Loc, New_Internal_Name ('S'));
! 
!          --  The first statement after the subprogram call is a statement to
!          --  writes a Null_Occurrence into the result stream.
! 
!          Null_Raise_Statement :=
!            Make_Attribute_Reference (Loc,
!              Prefix         =>
!                New_Occurrence_Of (RTE (RE_Exception_Occurrence), Loc),
!              Attribute_Name => Name_Write,
!              Expressions    => New_List (
!                New_Occurrence_Of (Result_Parameter, Loc),
!                New_Occurrence_Of (RTE (RE_Null_Occurrence), Loc)));
! 
!          if Dynamically_Asynchronous then
!             Null_Raise_Statement :=
!               Make_Implicit_If_Statement (Vis_Decl,
!                 Condition       =>
!                   Make_Op_Not (Loc, New_Occurrence_Of (Dynamic_Async, Loc)),
!                 Then_Statements => New_List (Null_Raise_Statement));
!          end if;
! 
!          Append_To (After_Statements, Null_Raise_Statement);
! 
!       else
!          Result_Parameter := Empty;
!       end if;
! 
!       --  Loop through every parameter and get its value from the stream. If
!       --  the parameter is unconstrained, then the parameter is read using
!       --  'Input at the point of declaration.
! 
!       Current_Parameter := First (Ordered_Parameters_List);
! 
!       while Current_Parameter /= Empty loop
! 
!          declare
!             Etyp        : Entity_Id;
!             Constrained : Boolean;
!             Object      : Entity_Id;
!             Expr        : Node_Id := Empty;
! 
!          begin
!             Object := Make_Defining_Identifier (Loc, New_Internal_Name ('P'));
!             Set_Ekind (Object, E_Variable);
! 
!             if
!               Is_RACW_Controlling_Formal (Current_Parameter, Stub_Type)
!             then
!                --  We have a controlling formal parameter. Read its address
!                --  rather than a real object. The address is in Unsigned_64
!                --  form.
! 
!                Etyp := RTE (RE_Unsigned_64);
!             else
!                Etyp := Etype (Parameter_Type (Current_Parameter));
!             end if;
! 
!             Constrained :=
!               Is_Constrained (Etyp) or else Is_Elementary_Type (Etyp);
! 
!             if In_Present (Current_Parameter)
!                or else not Out_Present (Current_Parameter)
!                or else not Constrained
!             then
!                --  If an input parameter is contrained, then its reading is
!                --  deferred until the beginning of the subprogram body. If
!                --  it is unconstrained, then an expression is built for
!                --  the object declaration and the variable is set using
!                --  'Input instead of 'Read.
! 
!                if Constrained then
!                   Append_To (Statements,
!                     Make_Attribute_Reference (Loc,
!                       Prefix         => New_Occurrence_Of (Etyp, Loc),
!                       Attribute_Name => Name_Read,
!                       Expressions    => New_List (
!                         New_Occurrence_Of (Stream_Parameter, Loc),
!                         New_Occurrence_Of (Object, Loc))));
! 
!                else
!                   Expr := Input_With_Tag_Check (Loc,
!                     Var_Type => Etyp,
!                     Stream   => Stream_Parameter);
!                   Append_To (Decls, Expr);
!                   Expr := Make_Function_Call (Loc,
!                     New_Occurrence_Of (Defining_Unit_Name
!                       (Specification (Expr)), Loc));
!                end if;
!             end if;
! 
!             --  If we do not have to output the current parameter, then
!             --  it can well be flagged as constant. This may allow further
!             --  optimizations done by the back end.
! 
!             Append_To (Decls,
!               Make_Object_Declaration (Loc,
!                 Defining_Identifier => Object,
!                 Constant_Present    =>
!                   not Constrained and then not Out_Present (Current_Parameter),
!                 Object_Definition   =>
!                   New_Occurrence_Of (Etyp, Loc),
!                 Expression          => Expr));
! 
!             --  An out parameter may be written back using a 'Write
!             --  attribute instead of a 'Output because it has been
!             --  constrained by the parameter given to the caller. Note that
!             --  out controlling arguments in the case of a RACW are not put
!             --  back in the stream because the pointer on them has not
!             --  changed.
! 
!             if Out_Present (Current_Parameter)
!               and then
!                 Etype (Parameter_Type (Current_Parameter)) /= Stub_Type
!             then
!                Append_To (After_Statements,
!                  Make_Attribute_Reference (Loc,
!                    Prefix         => New_Occurrence_Of (Etyp, Loc),
!                    Attribute_Name => Name_Write,
!                    Expressions    => New_List (
!                        New_Occurrence_Of (Result_Parameter, Loc),
!                      New_Occurrence_Of (Object, Loc))));
!             end if;
! 
!             if
!               Is_RACW_Controlling_Formal (Current_Parameter, Stub_Type)
!             then
! 
!                if Nkind (Parameter_Type (Current_Parameter)) /=
!                  N_Access_Definition
!                then
!                   Append_To (Parameter_List,
!                     Make_Parameter_Association (Loc,
!                       Selector_Name             =>
!                         New_Occurrence_Of (
!                           Defining_Identifier (Current_Parameter), Loc),
!                       Explicit_Actual_Parameter =>
!                         Make_Explicit_Dereference (Loc,
!                           Unchecked_Convert_To (RACW_Type,
!                             OK_Convert_To (RTE (RE_Address),
!                               New_Occurrence_Of (Object, Loc))))));
!                else
!                   Append_To (Parameter_List,
!                     Make_Parameter_Association (Loc,
!                       Selector_Name             =>
!                         New_Occurrence_Of (
!                           Defining_Identifier (Current_Parameter), Loc),
!                       Explicit_Actual_Parameter =>
!                         Unchecked_Convert_To (RACW_Type,
!                           OK_Convert_To (RTE (RE_Address),
!                             New_Occurrence_Of (Object, Loc)))));
!                end if;
!             else
!                Append_To (Parameter_List,
!                  Make_Parameter_Association (Loc,
!                    Selector_Name             =>
!                      New_Occurrence_Of (
!                        Defining_Identifier (Current_Parameter), Loc),
!                    Explicit_Actual_Parameter =>
!                      New_Occurrence_Of (Object, Loc)));
!             end if;
! 
!             --  If the current parameter needs an extra formal, then read it
!             --  from the stream and set the corresponding semantic field in
!             --  the variable. If the kind of the parameter identifier is
!             --  E_Void, then this is a compiler generated parameter that
!             --  doesn't need an extra constrained status.
! 
!             --  The case of Extra_Accessibility should also be handled ???
! 
!             if Nkind (Parameter_Type (Current_Parameter)) /=
!                                                       N_Access_Definition
!               and then
!                 Ekind (Defining_Identifier (Current_Parameter)) /= E_Void
!               and then
!                 Present (Extra_Constrained
!                   (Defining_Identifier (Current_Parameter)))
!             then
!                declare
!                   Extra_Parameter : constant Entity_Id :=
!                                       Extra_Constrained
!                                         (Defining_Identifier
!                                           (Current_Parameter));
! 
!                   Formal_Entity : constant Entity_Id :=
!                                     Make_Defining_Identifier
!                                         (Loc, Chars (Extra_Parameter));
! 
!                   Formal_Type : constant Entity_Id :=
!                                   Etype (Extra_Parameter);
! 
!                begin
!                   Append_To (Decls,
!                     Make_Object_Declaration (Loc,
!                       Defining_Identifier => Formal_Entity,
!                       Object_Definition   =>
!                         New_Occurrence_Of (Formal_Type, Loc)));
! 
!                   Append_To (Extra_Formal_Statements,
!                     Make_Attribute_Reference (Loc,
!                       Prefix         => New_Occurrence_Of (Formal_Type, Loc),
!                       Attribute_Name => Name_Read,
!                       Expressions    => New_List (
!                         New_Occurrence_Of (Stream_Parameter, Loc),
!                         New_Occurrence_Of (Formal_Entity, Loc))));
!                   Set_Extra_Constrained (Object, Formal_Entity);
!                end;
!             end if;
!          end;
! 
!          Next (Current_Parameter);
!       end loop;
! 
!       --  Append the formal statements list at the end of regular statements
! 
!       Append_List_To (Statements, Extra_Formal_Statements);
! 
!       if Nkind (Specification (Vis_Decl)) = N_Function_Specification then
! 
!          --  The remote subprogram is a function. We build an inner block to
!          --  be able to hold a potentially unconstrained result in a variable.
! 
!          declare
!             Etyp   : constant Entity_Id :=
!                        Etype (Subtype_Mark (Specification (Vis_Decl)));
!             Result : constant Node_Id   :=
!                        Make_Defining_Identifier (Loc, New_Internal_Name ('R'));
! 
!          begin
!             Inner_Decls := New_List (
!               Make_Object_Declaration (Loc,
!                 Defining_Identifier => Result,
!                 Constant_Present    => True,
!                 Object_Definition   => New_Occurrence_Of (Etyp, Loc),
!                 Expression          =>
!                   Make_Function_Call (Loc,
!                     Name                   => Called_Subprogram,
!                     Parameter_Associations => Parameter_List)));
! 
!             Append_To (After_Statements,
!               Make_Attribute_Reference (Loc,
!                 Prefix         => New_Occurrence_Of (Etyp, Loc),
!                 Attribute_Name => Name_Output,
!                 Expressions    => New_List (
!                   New_Occurrence_Of (Result_Parameter, Loc),
!                   New_Occurrence_Of (Result, Loc))));
!          end;
! 
!          Append_To (Statements,
!            Make_Block_Statement (Loc,
!              Declarations               => Inner_Decls,
!              Handled_Statement_Sequence =>
!                Make_Handled_Sequence_Of_Statements (Loc,
!                  Statements => After_Statements)));
! 
!       else
!          --  The remote subprogram is a procedure. We do not need any inner
!          --  block in this case.
! 
!          if Dynamically_Asynchronous then
!             Append_To (Decls,
!               Make_Object_Declaration (Loc,
!                 Defining_Identifier => Dynamic_Async,
!                 Object_Definition   =>
!                   New_Occurrence_Of (Standard_Boolean, Loc)));
! 
!             Append_To (Statements,
!               Make_Attribute_Reference (Loc,
!                 Prefix         => New_Occurrence_Of (Standard_Boolean, Loc),
!                 Attribute_Name => Name_Read,
!                 Expressions    => New_List (
!                   New_Occurrence_Of (Stream_Parameter, Loc),
!                   New_Occurrence_Of (Dynamic_Async, Loc))));
!          end if;
! 
!          Append_To (Statements,
!            Make_Procedure_Call_Statement (Loc,
!              Name                   => Called_Subprogram,
!              Parameter_Associations => Parameter_List));
! 
!          Append_List_To (Statements, After_Statements);
! 
!       end if;
! 
!       if Asynchronous and then not Dynamically_Asynchronous then
! 
!          --  An asynchronous procedure does not want a Result
!          --  parameter. Also, we put an exception handler with an others
!          --  clause that does nothing.
! 
!          Subp_Spec :=
!            Make_Procedure_Specification (Loc,
!              Defining_Unit_Name       =>
!                Make_Defining_Identifier (Loc, New_Internal_Name ('F')),
!              Parameter_Specifications => New_List (
!                Make_Parameter_Specification (Loc,
!                  Defining_Identifier => Stream_Parameter,
!                  Parameter_Type      =>
!                    Make_Access_Definition (Loc,
!                    Subtype_Mark =>
!                      New_Occurrence_Of (RTE (RE_Params_Stream_Type), Loc)))));
! 
!          Excep_Handler :=
!            Make_Exception_Handler (Loc,
!              Exception_Choices =>
!                New_List (Make_Others_Choice (Loc)),
!              Statements        => New_List (
!                Make_Null_Statement (Loc)));
! 
!       else
!          --  In the other cases, if an exception is raised, then the
!          --  exception occurrence is copied into the output stream and
!          --  no other output parameter is written.
! 
!          Excep_Choice :=
!            Make_Defining_Identifier (Loc, New_Internal_Name ('E'));
! 
!          Excep_Code := New_List (
!            Make_Attribute_Reference (Loc,
!              Prefix         =>
!                New_Occurrence_Of (RTE (RE_Exception_Occurrence), Loc),
!              Attribute_Name => Name_Write,
!              Expressions    => New_List (
!                New_Occurrence_Of (Result_Parameter, Loc),
!                New_Occurrence_Of (Excep_Choice, Loc))));
! 
!          if Dynamically_Asynchronous then
!             Excep_Code := New_List (
!               Make_Implicit_If_Statement (Vis_Decl,
!                 Condition       => Make_Op_Not (Loc,
!                   New_Occurrence_Of (Dynamic_Async, Loc)),
!                 Then_Statements => Excep_Code));
!          end if;
! 
!          Excep_Handler :=
!            Make_Exception_Handler (Loc,
!              Choice_Parameter   => Excep_Choice,
!              Exception_Choices  => New_List (Make_Others_Choice (Loc)),
!              Statements         => Excep_Code);
! 
!          Subp_Spec :=
!            Make_Procedure_Specification (Loc,
!              Defining_Unit_Name       =>
!                Make_Defining_Identifier (Loc, New_Internal_Name ('F')),
! 
!              Parameter_Specifications => New_List (
!                Make_Parameter_Specification (Loc,
!                  Defining_Identifier => Stream_Parameter,
!                  Parameter_Type      =>
!                    Make_Access_Definition (Loc,
!                    Subtype_Mark =>
!                      New_Occurrence_Of (RTE (RE_Params_Stream_Type), Loc))),
! 
!                Make_Parameter_Specification (Loc,
!                  Defining_Identifier => Result_Parameter,
!                  Parameter_Type      =>
!                    Make_Access_Definition (Loc,
!                   Subtype_Mark =>
!                   New_Occurrence_Of (RTE (RE_Params_Stream_Type), Loc)))));
!       end if;
! 
!       return
!         Make_Subprogram_Body (Loc,
!           Specification              => Subp_Spec,
!           Declarations               => Decls,
!           Handled_Statement_Sequence =>
!             Make_Handled_Sequence_Of_Statements (Loc,
!               Statements         => Statements,
!               Exception_Handlers => New_List (Excep_Handler)));
! 
!    end Build_Subprogram_Receiving_Stubs;
  
     ------------------------
     -- Copy_Specification --
--- 2203,2224 ----
              Make_Handled_Sequence_Of_Statements (Loc, Statements));
     end Build_Subprogram_Calling_Stubs;
  
!    -------------------------
!    -- Build_Subprogram_Id --
!    -------------------------
  
!    function Build_Subprogram_Id
!      (Loc : Source_Ptr;
!       E   : Entity_Id) return Node_Id
     is
     begin
!       case Get_PCS_Name is
!          when Name_PolyORB_DSA =>
!             return Make_String_Literal  (Loc, Get_Subprogram_Id (E));
!          when others =>
!             return Make_Integer_Literal (Loc, Get_Subprogram_Id (E));
!       end case;
!    end Build_Subprogram_Id;
  
     ------------------------
     -- Copy_Specification --
*************** package body Exp_Dist is
*** 3210,3264 ****
        Spec        : Node_Id;
        Object_Type : Entity_Id := Empty;
        Stub_Type   : Entity_Id := Empty;
!       New_Name    : Name_Id   := No_Name)
!       return        Node_Id
     is
        Parameters : List_Id := No_List;
  
!       Current_Parameter : Node_Id;
!       Current_Type      : Node_Id;
!       Current_Etype     : Entity_Id;
  
        Name_For_New_Spec : Name_Id;
  
        New_Identifier : Entity_Id;
  
     begin
        if New_Name = No_Name then
           Name_For_New_Spec := Chars (Defining_Unit_Name (Spec));
        else
           Name_For_New_Spec := New_Name;
        end if;
  
        if Present (Parameter_Specifications (Spec)) then
- 
           Parameters        := New_List;
           Current_Parameter := First (Parameter_Specifications (Spec));
! 
!          while Current_Parameter /= Empty loop
! 
!             Current_Type := Parameter_Type (Current_Parameter);
  
              if Nkind (Current_Type) = N_Access_Definition then
                 Current_Etype := Entity (Subtype_Mark (Current_Type));
  
!                if Object_Type = Empty then
                    Current_Type :=
                      Make_Access_Definition (Loc,
!                       Subtype_Mark =>
!                         New_Occurrence_Of (Current_Etype, Loc));
                 else
-                   pragma Assert
-                     (Root_Type (Current_Etype) = Root_Type (Object_Type));
                    Current_Type :=
                      Make_Access_Definition (Loc,
!                       Subtype_Mark => New_Occurrence_Of (Stub_Type, Loc));
                 end if;
  
              else
                 Current_Etype := Entity (Current_Type);
  
!                if Object_Type /= Empty
                   and then Current_Etype = Object_Type
                 then
                    Current_Type := New_Occurrence_Of (Stub_Type, Loc);
--- 2229,2286 ----
        Spec        : Node_Id;
        Object_Type : Entity_Id := Empty;
        Stub_Type   : Entity_Id := Empty;
!       New_Name    : Name_Id   := No_Name) return Node_Id
     is
        Parameters : List_Id := No_List;
  
!       Current_Parameter  : Node_Id;
!       Current_Identifier : Entity_Id;
!       Current_Type       : Node_Id;
!       Current_Etype      : Entity_Id;
  
        Name_For_New_Spec : Name_Id;
  
        New_Identifier : Entity_Id;
  
+    --  Comments needed in body below ???
+ 
     begin
        if New_Name = No_Name then
+          pragma Assert (Nkind (Spec) = N_Function_Specification
+                 or else Nkind (Spec) = N_Procedure_Specification);
+ 
           Name_For_New_Spec := Chars (Defining_Unit_Name (Spec));
        else
           Name_For_New_Spec := New_Name;
        end if;
  
        if Present (Parameter_Specifications (Spec)) then
           Parameters        := New_List;
           Current_Parameter := First (Parameter_Specifications (Spec));
!          while Present (Current_Parameter) loop
!             Current_Identifier := Defining_Identifier (Current_Parameter);
!             Current_Type       := Parameter_Type (Current_Parameter);
  
              if Nkind (Current_Type) = N_Access_Definition then
                 Current_Etype := Entity (Subtype_Mark (Current_Type));
  
!                if Present (Object_Type) then
!                   pragma Assert (
!                     Root_Type (Current_Etype) = Root_Type (Object_Type));
                    Current_Type :=
                      Make_Access_Definition (Loc,
!                       Subtype_Mark => New_Occurrence_Of (Stub_Type, Loc));
                 else
                    Current_Type :=
                      Make_Access_Definition (Loc,
!                       Subtype_Mark =>
!                         New_Occurrence_Of (Current_Etype, Loc));
                 end if;
  
              else
                 Current_Etype := Entity (Current_Type);
  
!                if Present (Object_Type)
                   and then Current_Etype = Object_Type
                 then
                    Current_Type := New_Occurrence_Of (Stub_Type, Loc);
*************** package body Exp_Dist is
*** 3268,3274 ****
              end if;
  
              New_Identifier := Make_Defining_Identifier (Loc,
!               Chars (Defining_Identifier (Current_Parameter)));
  
              Append_To (Parameters,
                Make_Parameter_Specification (Loc,
--- 2290,2296 ----
              end if;
  
              New_Identifier := Make_Defining_Identifier (Loc,
!               Chars (Current_Identifier));
  
              Append_To (Parameters,
                Make_Parameter_Specification (Loc,
*************** package body Exp_Dist is
*** 3279,3307 ****
                  Expression          =>
                    New_Copy_Tree (Expression (Current_Parameter))));
  
              Next (Current_Parameter);
           end loop;
        end if;
  
!       if Nkind (Spec) = N_Function_Specification then
!          return
!            Make_Function_Specification (Loc,
!              Defining_Unit_Name       =>
!                Make_Defining_Identifier (Loc,
!                  Chars => Name_For_New_Spec),
!              Parameter_Specifications => Parameters,
!              Subtype_Mark             =>
!                New_Occurrence_Of (Entity (Subtype_Mark (Spec)), Loc));
  
!       else
!          return
!            Make_Procedure_Specification (Loc,
!              Defining_Unit_Name       =>
!                Make_Defining_Identifier (Loc,
!                  Chars => Name_For_New_Spec),
!              Parameter_Specifications => Parameters);
!       end if;
  
     end Copy_Specification;
  
     ---------------------------
--- 2301,2347 ----
                  Expression          =>
                    New_Copy_Tree (Expression (Current_Parameter))));
  
+             --  For a regular formal parameter (that needs to be marshalled
+             --  in the context of remote calls), set the Etype now, because
+             --  marshalling processing might need it.
+ 
+             if Is_Entity_Name (Current_Type) then
+                Set_Etype (New_Identifier, Entity (Current_Type));
+ 
+             --  Current_Type is an access definition, special processing
+             --  (not requiring etype) will occur for marshalling.
+ 
+             else
+                null;
+             end if;
+ 
              Next (Current_Parameter);
           end loop;
        end if;
  
!       case Nkind (Spec) is
  
!          when N_Function_Specification | N_Access_Function_Definition =>
!             return
!               Make_Function_Specification (Loc,
!                 Defining_Unit_Name       =>
!                   Make_Defining_Identifier (Loc,
!                     Chars => Name_For_New_Spec),
!                 Parameter_Specifications => Parameters,
!                 Subtype_Mark             =>
!                   New_Occurrence_Of (Entity (Subtype_Mark (Spec)), Loc));
! 
!          when N_Procedure_Specification | N_Access_Procedure_Definition =>
!             return
!               Make_Procedure_Specification (Loc,
!                 Defining_Unit_Name       =>
!                   Make_Defining_Identifier (Loc,
!                     Chars => Name_For_New_Spec),
!                 Parameter_Specifications => Parameters);
  
+          when others =>
+             raise Program_Error;
+       end case;
     end Copy_Specification;
  
     ---------------------------
*************** package body Exp_Dist is
*** 3314,3320 ****
     begin
        if Present (Parameter_Specifications (Spec)) then
           Current_Parameter := First (Parameter_Specifications (Spec));
!          while Current_Parameter /= Empty loop
              if Out_Present (Current_Parameter) then
                 return False;
              end if;
--- 2354,2360 ----
     begin
        if Present (Parameter_Specifications (Spec)) then
           Current_Parameter := First (Parameter_Specifications (Spec));
!          while Present (Current_Parameter) loop
              if Out_Present (Current_Parameter) then
                 return False;
              end if;
*************** package body Exp_Dist is
*** 3326,3336 ****
        return True;
     end Could_Be_Asynchronous;
  
     ---------------------------------------------
     -- Expand_All_Calls_Remote_Subprogram_Call --
     ---------------------------------------------
  
!    procedure Expand_All_Calls_Remote_Subprogram_Call (N : in Node_Id) is
        Called_Subprogram : constant Entity_Id  := Entity (Name (N));
        RCI_Package       : constant Entity_Id  := Scope (Called_Subprogram);
        Loc               : constant Source_Ptr := Sloc (N);
--- 2366,2402 ----
        return True;
     end Could_Be_Asynchronous;
  
+    ---------------------------
+    -- Declare_Create_NVList --
+    ---------------------------
+ 
+    procedure Declare_Create_NVList
+      (Loc    : Source_Ptr;
+       NVList : Entity_Id;
+       Decls  : List_Id;
+       Stmts  : List_Id)
+    is
+    begin
+       Append_To (Decls,
+         Make_Object_Declaration (Loc,
+           Defining_Identifier => NVList,
+           Aliased_Present     => False,
+           Object_Definition   =>
+               New_Occurrence_Of (RTE (RE_NVList_Ref), Loc)));
+ 
+       Append_To (Stmts,
+         Make_Procedure_Call_Statement (Loc,
+           Name =>
+             New_Occurrence_Of (RTE (RE_NVList_Create), Loc),
+           Parameter_Associations => New_List (
+             New_Occurrence_Of (NVList, Loc))));
+    end Declare_Create_NVList;
+ 
     ---------------------------------------------
     -- Expand_All_Calls_Remote_Subprogram_Call --
     ---------------------------------------------
  
!    procedure Expand_All_Calls_Remote_Subprogram_Call (N : Node_Id) is
        Called_Subprogram : constant Entity_Id  := Entity (Name (N));
        RCI_Package       : constant Entity_Id  := Scope (Called_Subprogram);
        Loc               : constant Source_Ptr := Sloc (N);
*************** package body Exp_Dist is
*** 3382,3388 ****
  
           Calling_Stubs := Build_Subprogram_Calling_Stubs
             (Vis_Decl               => Parent (Parent (Called_Subprogram)),
!             Subp_Id                => Get_Subprogram_Id (Called_Subprogram),
              Asynchronous           => Nkind (N) = N_Procedure_Call_Statement
                                          and then
                                        Is_Asynchronous (Called_Subprogram),
--- 2448,2455 ----
  
           Calling_Stubs := Build_Subprogram_Calling_Stubs
             (Vis_Decl               => Parent (Parent (Called_Subprogram)),
!             Subp_Id                =>
!               Build_Subprogram_Id (Loc, Called_Subprogram),
              Asynchronous           => Nkind (N) = N_Procedure_Call_Statement
                                          and then
                                        Is_Asynchronous (Called_Subprogram),
*************** package body Exp_Dist is
*** 3400,3413 ****
     -- Expand_Calling_Stubs_Bodies --
     ---------------------------------
  
!    procedure Expand_Calling_Stubs_Bodies (Unit_Node : in Node_Id) is
        Spec  : constant Node_Id := Specification (Unit_Node);
        Decls : constant List_Id := Visible_Declarations (Spec);
- 
     begin
        New_Scope (Scope_Of_Spec (Spec));
!       Add_Calling_Stubs_To_Declarations (Specification (Unit_Node),
!                                          Decls);
        Pop_Scope;
     end Expand_Calling_Stubs_Bodies;
  
--- 2467,2479 ----
     -- Expand_Calling_Stubs_Bodies --
     ---------------------------------
  
!    procedure Expand_Calling_Stubs_Bodies (Unit_Node : Node_Id) is
        Spec  : constant Node_Id := Specification (Unit_Node);
        Decls : constant List_Id := Visible_Declarations (Spec);
     begin
        New_Scope (Scope_Of_Spec (Spec));
!       Add_Calling_Stubs_To_Declarations
!         (Specification (Unit_Node), Decls);
        Pop_Scope;
     end Expand_Calling_Stubs_Bodies;
  
*************** package body Exp_Dist is
*** 3415,3421 ****
     -- Expand_Receiving_Stubs_Bodies --
     -----------------------------------
  
!    procedure Expand_Receiving_Stubs_Bodies (Unit_Node : in Node_Id) is
        Spec  : Node_Id;
        Decls : List_Id;
        Temp  : List_Id;
--- 2481,2487 ----
     -- Expand_Receiving_Stubs_Bodies --
     -----------------------------------
  
!    procedure Expand_Receiving_Stubs_Bodies (Unit_Node : Node_Id) is
        Spec  : Node_Id;
        Decls : List_Id;
        Temp  : List_Id;
*************** package body Exp_Dist is
*** 3423,3431 ****
     begin
        if Nkind (Unit_Node) = N_Package_Declaration then
           Spec  := Specification (Unit_Node);
!          Decls := Visible_Declarations (Spec);
           New_Scope (Scope_Of_Spec (Spec));
!          Add_Receiving_Stubs_To_Declarations (Spec, Decls);
  
        else
           Spec  :=
--- 2489,2502 ----
     begin
        if Nkind (Unit_Node) = N_Package_Declaration then
           Spec  := Specification (Unit_Node);
!          Decls := Private_Declarations (Spec);
! 
!          if No (Decls) then
!             Decls := Visible_Declarations (Spec);
!          end if;
! 
           New_Scope (Scope_Of_Spec (Spec));
!          Specific_Add_Receiving_Stubs_To_Declarations (Spec, Decls);
  
        else
           Spec  :=
*************** package body Exp_Dist is
*** 3433,3473 ****
           Decls := Declarations (Unit_Node);
           New_Scope (Scope_Of_Spec (Unit_Node));
           Temp := New_List;
!          Add_Receiving_Stubs_To_Declarations (Spec, Temp);
           Insert_List_Before (First (Decls), Temp);
        end if;
  
        Pop_Scope;
     end Expand_Receiving_Stubs_Bodies;
  
!    ----------------------------
!    -- Get_Pkg_Name_string_Id --
!    ----------------------------
  
!    function Get_Pkg_Name_String_Id (Decl_Node : Node_Id) return String_Id is
!       Unit_Name_Id : constant Unit_Name_Type := Get_Unit_Name (Decl_Node);
  
     begin
!       Get_Unit_Name_String (Unit_Name_Id);
  
!       --  Remove seven last character (" (spec)" or " (body)").
  
!       Name_Len := Name_Len - 7;
!       pragma Assert (Name_Buffer (Name_Len + 1) = ' ');
  
!       return Get_String_Id (Name_Buffer (1 .. Name_Len));
!    end Get_Pkg_Name_String_Id;
  
!    -------------------
!    -- Get_String_Id --
!    -------------------
  
!    function Get_String_Id (Val : String) return String_Id is
     begin
!       Start_String;
!       Store_String_Chars (Val);
!       return End_String;
!    end Get_String_Id;
  
     ----------
     -- Hash --
--- 2504,4876 ----
           Decls := Declarations (Unit_Node);
           New_Scope (Scope_Of_Spec (Unit_Node));
           Temp := New_List;
!          Specific_Add_Receiving_Stubs_To_Declarations (Spec, Temp);
           Insert_List_Before (First (Decls), Temp);
        end if;
  
        Pop_Scope;
     end Expand_Receiving_Stubs_Bodies;
  
!    --------------------
!    -- GARLIC_Support --
!    --------------------
  
!    package body GARLIC_Support is
! 
!       --  Local subprograms
! 
!       procedure Add_RACW_Read_Attribute
!         (RACW_Type        : Entity_Id;
!          Stub_Type        : Entity_Id;
!          Stub_Type_Access : Entity_Id;
!          Declarations     : List_Id);
!       --  Add Read attribute in Decls for the RACW type. The Read attribute
!       --  is added right after the RACW_Type declaration while the body is
!       --  inserted after Declarations.
! 
!       procedure Add_RACW_Write_Attribute
!         (RACW_Type        : Entity_Id;
!          Stub_Type        : Entity_Id;
!          Stub_Type_Access : Entity_Id;
!          RPC_Receiver     : Node_Id;
!          Declarations     : List_Id);
!       --  Same thing for the Write attribute
! 
!       function Stream_Parameter return Node_Id;
!       function Result return Node_Id;
!       function Object return Node_Id renames Result;
!       --  Functions to create occurrences of the formal parameter names of
!       --  the 'Read and 'Write attributes.
! 
!       Loc : Source_Ptr;
!       --  Shared source location used by Add_{Read,Write}_Read_Attribute
!       --  and their ancillary subroutines (set on entry by Add_RACW_Features).
! 
!       procedure Add_RAS_Access_TSS (N : Node_Id);
!       --  Add a subprogram body for RAS Access TSS
! 
!       -------------------------------------
!       -- Add_Obj_RPC_Receiver_Completion --
!       -------------------------------------
! 
!       procedure Add_Obj_RPC_Receiver_Completion
!         (Loc           : Source_Ptr;
!          Decls         : List_Id;
!          RPC_Receiver  : Entity_Id;
!          Stub_Elements : Stub_Structure) is
!       begin
!          --  The RPC receiver body should not be the completion of the
!          --  declaration recorded in the stub structure, because then the
!          --  occurrences of the formal parameters within the body should
!          --  refer to the entities from the declaration, not from the
!          --  completion, to which we do not have easy access. Instead, the
!          --  RPC receiver body acts as its own declaration, and the RPC
!          --  receiver declaration is completed by a renaming-as-body.
! 
!          Append_To (Decls,
!            Make_Subprogram_Renaming_Declaration (Loc,
!              Specification =>
!                Copy_Specification (Loc,
!                  Specification (Stub_Elements.RPC_Receiver_Decl)),
!              Name          => New_Occurrence_Of (RPC_Receiver, Loc)));
!       end Add_Obj_RPC_Receiver_Completion;
! 
!       -----------------------
!       -- Add_RACW_Features --
!       -----------------------
! 
!       procedure Add_RACW_Features
!         (RACW_Type         : Entity_Id;
!          Stub_Type         : Entity_Id;
!          Stub_Type_Access  : Entity_Id;
!          RPC_Receiver_Decl : Node_Id;
!          Declarations      : List_Id)
!       is
!          RPC_Receiver : Node_Id;
!          Is_RAS       : constant Boolean := not Comes_From_Source (RACW_Type);
! 
!       begin
!          Loc := Sloc (RACW_Type);
! 
!          if Is_RAS then
! 
!             --  For a RAS, the RPC receiver is that of the RCI unit,
!             --  not that of the corresponding distributed object type.
!             --  We retrieve its address from the local proxy object.
! 
!             RPC_Receiver := Make_Selected_Component (Loc,
!               Prefix         =>
!                 Unchecked_Convert_To (RTE (RE_RAS_Proxy_Type_Access), Object),
!               Selector_Name  => Make_Identifier (Loc, Name_Receiver));
! 
!          else
!             RPC_Receiver := Make_Attribute_Reference (Loc,
!               Prefix         => New_Occurrence_Of (
!                 Defining_Unit_Name (Specification (RPC_Receiver_Decl)), Loc),
!               Attribute_Name => Name_Address);
!          end if;
! 
!          Add_RACW_Write_Attribute (
!            RACW_Type,
!            Stub_Type,
!            Stub_Type_Access,
!            RPC_Receiver,
!            Declarations);
! 
!          Add_RACW_Read_Attribute (
!            RACW_Type,
!            Stub_Type,
!            Stub_Type_Access,
!            Declarations);
!       end Add_RACW_Features;
! 
!       -----------------------------
!       -- Add_RACW_Read_Attribute --
!       -----------------------------
! 
!       procedure Add_RACW_Read_Attribute
!         (RACW_Type        : Entity_Id;
!          Stub_Type        : Entity_Id;
!          Stub_Type_Access : Entity_Id;
!          Declarations     : List_Id)
!       is
!          Proc_Decl : Node_Id;
!          Attr_Decl : Node_Id;
! 
!          Body_Node : Node_Id;
! 
!          Decls             : List_Id;
!          Statements        : List_Id;
!          Local_Statements  : List_Id;
!          Remote_Statements : List_Id;
!          --  Various parts of the procedure
! 
!          Procedure_Name    : constant Name_Id   :=
!                                New_Internal_Name ('R');
!          Source_Partition  : constant Entity_Id :=
!                                Make_Defining_Identifier
!                                  (Loc, New_Internal_Name ('P'));
!          Source_Receiver   : constant Entity_Id :=
!                                Make_Defining_Identifier
!                                  (Loc, New_Internal_Name ('S'));
!          Source_Address    : constant Entity_Id :=
!                                Make_Defining_Identifier
!                                  (Loc, New_Internal_Name ('P'));
!          Local_Stub        : constant Entity_Id :=
!                                Make_Defining_Identifier
!                                  (Loc, New_Internal_Name ('L'));
!          Stubbed_Result    : constant Entity_Id :=
!                                Make_Defining_Identifier
!                                  (Loc, New_Internal_Name ('S'));
!          Asynchronous_Flag : constant Entity_Id :=
!                                Asynchronous_Flags_Table.Get (RACW_Type);
!          pragma Assert (Present (Asynchronous_Flag));
! 
!       --  Start of processing for Add_RACW_Read_Attribute
! 
!       begin
!          --  Generate object declarations
! 
!          Decls := New_List (
!            Make_Object_Declaration (Loc,
!              Defining_Identifier => Source_Partition,
!              Object_Definition   =>
!                New_Occurrence_Of (RTE (RE_Partition_ID), Loc)),
! 
!            Make_Object_Declaration (Loc,
!              Defining_Identifier => Source_Receiver,
!              Object_Definition   =>
!                New_Occurrence_Of (RTE (RE_Unsigned_64), Loc)),
! 
!            Make_Object_Declaration (Loc,
!              Defining_Identifier => Source_Address,
!              Object_Definition   =>
!                New_Occurrence_Of (RTE (RE_Unsigned_64), Loc)),
! 
!            Make_Object_Declaration (Loc,
!              Defining_Identifier => Local_Stub,
!              Aliased_Present     => True,
!              Object_Definition   => New_Occurrence_Of (Stub_Type, Loc)),
! 
!            Make_Object_Declaration (Loc,
!              Defining_Identifier => Stubbed_Result,
!              Object_Definition   =>
!                New_Occurrence_Of (Stub_Type_Access, Loc),
!              Expression          =>
!                Make_Attribute_Reference (Loc,
!                  Prefix =>
!                    New_Occurrence_Of (Local_Stub, Loc),
!                  Attribute_Name =>
!                    Name_Unchecked_Access)));
! 
!          --  Read the source Partition_ID and RPC_Receiver from incoming stream
! 
!          Statements := New_List (
!            Make_Attribute_Reference (Loc,
!              Prefix         =>
!                New_Occurrence_Of (RTE (RE_Partition_ID), Loc),
!              Attribute_Name => Name_Read,
!              Expressions    => New_List (
!                Stream_Parameter,
!                New_Occurrence_Of (Source_Partition, Loc))),
! 
!            Make_Attribute_Reference (Loc,
!              Prefix         =>
!                New_Occurrence_Of (RTE (RE_Unsigned_64), Loc),
!              Attribute_Name =>
!                Name_Read,
!              Expressions    => New_List (
!                Stream_Parameter,
!                New_Occurrence_Of (Source_Receiver, Loc))),
! 
!            Make_Attribute_Reference (Loc,
!              Prefix         =>
!                New_Occurrence_Of (RTE (RE_Unsigned_64), Loc),
!              Attribute_Name =>
!                Name_Read,
!              Expressions    => New_List (
!                Stream_Parameter,
!                New_Occurrence_Of (Source_Address, Loc))));
! 
!          --  Build_Get_Unique_RP_Call needs the type of Stubbed_Result
! 
!          Set_Etype (Stubbed_Result, Stub_Type_Access);
! 
!          --  If the Address is Null_Address, then return a null object
! 
!          Append_To (Statements,
!            Make_Implicit_If_Statement (RACW_Type,
!              Condition       =>
!                Make_Op_Eq (Loc,
!                  Left_Opnd  => New_Occurrence_Of (Source_Address, Loc),
!                  Right_Opnd => Make_Integer_Literal (Loc, Uint_0)),
!              Then_Statements => New_List (
!                Make_Assignment_Statement (Loc,
!                  Name       => Result,
!                  Expression => Make_Null (Loc)),
!                Make_Return_Statement (Loc))));
! 
!          --  If the RACW denotes an object created on the current partition,
!          --  Local_Statements will be executed. The real object will be used.
! 
!          Local_Statements := New_List (
!            Make_Assignment_Statement (Loc,
!              Name       => Result,
!              Expression =>
!                Unchecked_Convert_To (RACW_Type,
!                  OK_Convert_To (RTE (RE_Address),
!                    New_Occurrence_Of (Source_Address, Loc)))));
! 
!          --  If the object is located on another partition, then a stub object
!          --  will be created with all the information needed to rebuild the
!          --  real object at the other end.
! 
!          Remote_Statements := New_List (
! 
!            Make_Assignment_Statement (Loc,
!              Name       => Make_Selected_Component (Loc,
!                Prefix        => Stubbed_Result,
!                Selector_Name => Name_Origin),
!              Expression =>
!                New_Occurrence_Of (Source_Partition, Loc)),
! 
!            Make_Assignment_Statement (Loc,
!              Name       => Make_Selected_Component (Loc,
!                Prefix        => Stubbed_Result,
!                Selector_Name => Name_Receiver),
!              Expression =>
!                New_Occurrence_Of (Source_Receiver, Loc)),
! 
!            Make_Assignment_Statement (Loc,
!              Name       => Make_Selected_Component (Loc,
!                Prefix        => Stubbed_Result,
!                Selector_Name => Name_Addr),
!              Expression =>
!                New_Occurrence_Of (Source_Address, Loc)));
! 
!          Append_To (Remote_Statements,
!            Make_Assignment_Statement (Loc,
!              Name       => Make_Selected_Component (Loc,
!                Prefix        => Stubbed_Result,
!                Selector_Name => Name_Asynchronous),
!              Expression =>
!                New_Occurrence_Of (Asynchronous_Flag, Loc)));
! 
!          Append_List_To (Remote_Statements,
!            Build_Get_Unique_RP_Call (Loc, Stubbed_Result, Stub_Type));
!          --  ??? Issue with asynchronous calls here: the Asynchronous
!          --  flag is set on the stub type if, and only if, the RACW type
!          --  has a pragma Asynchronous. This is incorrect for RACWs that
!          --  implement RAS types, because in that case the /designated
!          --  subprogram/ (not the type) might be asynchronous, and
!          --  that causes the stub to need to be asynchronous too.
!          --  A solution is to transport a RAS as a struct containing
!          --  a RACW and an asynchronous flag, and to properly alter
!          --  the Asynchronous component in the stub type in the RAS's
!          --  Input TSS.
! 
!          Append_To (Remote_Statements,
!            Make_Assignment_Statement (Loc,
!              Name       => Result,
!              Expression => Unchecked_Convert_To (RACW_Type,
!                New_Occurrence_Of (Stubbed_Result, Loc))));
! 
!          --  Distinguish between the local and remote cases, and execute the
!          --  appropriate piece of code.
! 
!          Append_To (Statements,
!            Make_Implicit_If_Statement (RACW_Type,
!              Condition       =>
!                Make_Op_Eq (Loc,
!                  Left_Opnd  =>
!                    Make_Function_Call (Loc,
!                      Name => New_Occurrence_Of (
!                        RTE (RE_Get_Local_Partition_Id), Loc)),
!                  Right_Opnd => New_Occurrence_Of (Source_Partition, Loc)),
!              Then_Statements => Local_Statements,
!              Else_Statements => Remote_Statements));
! 
!          Build_Stream_Procedure
!            (Loc, RACW_Type, Body_Node,
!             Make_Defining_Identifier (Loc, Procedure_Name),
!             Statements, Outp => True);
!          Set_Declarations (Body_Node, Decls);
! 
!          Proc_Decl := Make_Subprogram_Declaration (Loc,
!            Copy_Specification (Loc, Specification (Body_Node)));
! 
!          Attr_Decl :=
!            Make_Attribute_Definition_Clause (Loc,
!              Name       => New_Occurrence_Of (RACW_Type, Loc),
!              Chars      => Name_Read,
!              Expression =>
!                New_Occurrence_Of (
!                  Defining_Unit_Name (Specification (Proc_Decl)), Loc));
! 
!          Insert_After (Declaration_Node (RACW_Type), Proc_Decl);
!          Insert_After (Proc_Decl, Attr_Decl);
!          Append_To (Declarations, Body_Node);
!       end Add_RACW_Read_Attribute;
! 
!       ------------------------------
!       -- Add_RACW_Write_Attribute --
!       ------------------------------
! 
!       procedure Add_RACW_Write_Attribute
!         (RACW_Type        : Entity_Id;
!          Stub_Type        : Entity_Id;
!          Stub_Type_Access : Entity_Id;
!          RPC_Receiver     : Node_Id;
!          Declarations     : List_Id)
!       is
!          Body_Node : Node_Id;
!          Proc_Decl : Node_Id;
!          Attr_Decl : Node_Id;
! 
!          Statements        : List_Id;
!          Local_Statements  : List_Id;
!          Remote_Statements : List_Id;
!          Null_Statements   : List_Id;
! 
!          Procedure_Name : constant Name_Id := New_Internal_Name ('R');
! 
!       begin
!          --  Build the code fragment corresponding to the marshalling of a
!          --  local object.
! 
!          Local_Statements := New_List (
! 
!            Pack_Entity_Into_Stream_Access (Loc,
!              Stream => Stream_Parameter,
!              Object => RTE (RE_Get_Local_Partition_Id)),
! 
!            Pack_Node_Into_Stream_Access (Loc,
!              Stream => Stream_Parameter,
!              Object => OK_Convert_To (RTE (RE_Unsigned_64), RPC_Receiver),
!              Etyp   => RTE (RE_Unsigned_64)),
! 
!           Pack_Node_Into_Stream_Access (Loc,
!             Stream => Stream_Parameter,
!             Object => OK_Convert_To (RTE (RE_Unsigned_64),
!               Make_Attribute_Reference (Loc,
!                 Prefix         =>
!                   Make_Explicit_Dereference (Loc,
!                     Prefix => Object),
!                 Attribute_Name => Name_Address)),
!             Etyp   => RTE (RE_Unsigned_64)));
! 
!          --  Build the code fragment corresponding to the marshalling of
!          --  a remote object.
! 
!          Remote_Statements := New_List (
! 
!            Pack_Node_Into_Stream_Access (Loc,
!             Stream => Stream_Parameter,
!             Object =>
!                Make_Selected_Component (Loc,
!                  Prefix        => Unchecked_Convert_To (Stub_Type_Access,
!                    Object),
!                  Selector_Name =>
!                    Make_Identifier (Loc, Name_Origin)),
!             Etyp   => RTE (RE_Partition_ID)),
! 
!            Pack_Node_Into_Stream_Access (Loc,
!             Stream => Stream_Parameter,
!             Object =>
!                Make_Selected_Component (Loc,
!                  Prefix        => Unchecked_Convert_To (Stub_Type_Access,
!                    Object),
!                  Selector_Name =>
!                    Make_Identifier (Loc, Name_Receiver)),
!             Etyp   => RTE (RE_Unsigned_64)),
! 
!            Pack_Node_Into_Stream_Access (Loc,
!             Stream => Stream_Parameter,
!             Object =>
!                Make_Selected_Component (Loc,
!                  Prefix        => Unchecked_Convert_To (Stub_Type_Access,
!                    Object),
!                  Selector_Name =>
!                    Make_Identifier (Loc, Name_Addr)),
!             Etyp   => RTE (RE_Unsigned_64)));
! 
!          --  Build code fragment corresponding to marshalling of a null object
! 
!          Null_Statements := New_List (
! 
!            Pack_Entity_Into_Stream_Access (Loc,
!              Stream => Stream_Parameter,
!              Object => RTE (RE_Get_Local_Partition_Id)),
! 
!            Pack_Node_Into_Stream_Access (Loc,
!              Stream => Stream_Parameter,
!              Object => OK_Convert_To (RTE (RE_Unsigned_64), RPC_Receiver),
!              Etyp   => RTE (RE_Unsigned_64)),
! 
!            Pack_Node_Into_Stream_Access (Loc,
!              Stream => Stream_Parameter,
!              Object => Make_Integer_Literal (Loc, Uint_0),
!              Etyp   => RTE (RE_Unsigned_64)));
! 
!          Statements := New_List (
!            Make_Implicit_If_Statement (RACW_Type,
!              Condition       =>
!                Make_Op_Eq (Loc,
!                  Left_Opnd  => Object,
!                  Right_Opnd => Make_Null (Loc)),
!              Then_Statements => Null_Statements,
!              Elsif_Parts     => New_List (
!                Make_Elsif_Part (Loc,
!                  Condition       =>
!                    Make_Op_Eq (Loc,
!                      Left_Opnd  =>
!                        Make_Attribute_Reference (Loc,
!                          Prefix         => Object,
!                          Attribute_Name => Name_Tag),
!                      Right_Opnd =>
!                        Make_Attribute_Reference (Loc,
!                          Prefix         => New_Occurrence_Of (Stub_Type, Loc),
!                          Attribute_Name => Name_Tag)),
!                  Then_Statements => Remote_Statements)),
!              Else_Statements => Local_Statements));
! 
!          Build_Stream_Procedure
!            (Loc, RACW_Type, Body_Node,
!             Make_Defining_Identifier (Loc, Procedure_Name),
!             Statements, Outp => False);
! 
!          Proc_Decl := Make_Subprogram_Declaration (Loc,
!            Copy_Specification (Loc, Specification (Body_Node)));
! 
!          Attr_Decl :=
!            Make_Attribute_Definition_Clause (Loc,
!              Name       => New_Occurrence_Of (RACW_Type, Loc),
!              Chars      => Name_Write,
!              Expression =>
!                New_Occurrence_Of (
!                  Defining_Unit_Name (Specification (Proc_Decl)), Loc));
! 
!          Insert_After (Declaration_Node (RACW_Type), Proc_Decl);
!          Insert_After (Proc_Decl, Attr_Decl);
!          Append_To (Declarations, Body_Node);
!       end Add_RACW_Write_Attribute;
! 
!       ------------------------
!       -- Add_RAS_Access_TSS --
!       ------------------------
! 
!       procedure Add_RAS_Access_TSS (N : Node_Id) is
!          Loc : constant Source_Ptr := Sloc (N);
! 
!          Ras_Type : constant Entity_Id := Defining_Identifier (N);
!          Fat_Type : constant Entity_Id := Equivalent_Type (Ras_Type);
!          --  Ras_Type is the access to subprogram type while Fat_Type is the
!          --  corresponding record type.
! 
!          RACW_Type : constant Entity_Id :=
!                        Underlying_RACW_Type (Ras_Type);
!          Desig     : constant Entity_Id :=
!                        Etype (Designated_Type (RACW_Type));
! 
!          Stub_Elements : constant Stub_Structure :=
!                            Stubs_Table.Get (Desig);
!          pragma Assert (Stub_Elements /= Empty_Stub_Structure);
! 
!          Proc : constant Entity_Id :=
!                   Make_Defining_Identifier (Loc,
!                     Chars => Make_TSS_Name (Ras_Type, TSS_RAS_Access));
! 
!          Proc_Spec : Node_Id;
! 
!          --  Formal parameters
! 
!          Package_Name : constant Entity_Id :=
!                           Make_Defining_Identifier (Loc,
!                             Chars => Name_P);
!          --  Target package
! 
!          Subp_Id : constant Entity_Id :=
!                      Make_Defining_Identifier (Loc,
!                        Chars => Name_S);
!          --  Target subprogram
! 
!          Asynch_P : constant Entity_Id :=
!                       Make_Defining_Identifier (Loc,
!                         Chars => Name_Asynchronous);
!          --  Is the procedure to which the 'Access applies asynchronous?
! 
!          All_Calls_Remote : constant Entity_Id :=
!                               Make_Defining_Identifier (Loc,
!                                 Chars => Name_All_Calls_Remote);
!          --  True if an All_Calls_Remote pragma applies to the RCI unit
!          --  that contains the subprogram.
! 
!          --  Common local variables
! 
!          Proc_Decls      : List_Id;
!          Proc_Statements : List_Id;
! 
!          Origin : constant Entity_Id :=
!                     Make_Defining_Identifier (Loc,
!                       Chars => New_Internal_Name ('P'));
! 
!          --  Additional local variables for the local case
! 
!          Proxy_Addr : constant Entity_Id :=
!                         Make_Defining_Identifier (Loc,
!                           Chars => New_Internal_Name ('P'));
! 
!          --  Additional local variables for the remote case
! 
!          Local_Stub : constant Entity_Id :=
!                         Make_Defining_Identifier (Loc,
!                           Chars => New_Internal_Name ('L'));
! 
!          Stub_Ptr : constant Entity_Id :=
!                       Make_Defining_Identifier (Loc,
!                         Chars => New_Internal_Name ('S'));
! 
!          function Set_Field
!            (Field_Name : Name_Id;
!             Value      : Node_Id) return Node_Id;
!          --  Construct an assignment that sets the named component in the
!          --  returned record
! 
!          ---------------
!          -- Set_Field --
!          ---------------
! 
!          function Set_Field
!            (Field_Name : Name_Id;
!             Value      : Node_Id) return Node_Id
!          is
!          begin
!             return
!               Make_Assignment_Statement (Loc,
!                 Name       =>
!                   Make_Selected_Component (Loc,
!                     Prefix        => Stub_Ptr,
!                     Selector_Name => Field_Name),
!                 Expression => Value);
!          end Set_Field;
! 
!       --  Start of processing for Add_RAS_Access_TSS
! 
!       begin
!          Proc_Decls := New_List (
! 
!          --  Common declarations
! 
!            Make_Object_Declaration (Loc,
!              Defining_Identifier => Origin,
!              Constant_Present    => True,
!              Object_Definition   =>
!                New_Occurrence_Of (RTE (RE_Partition_ID), Loc),
!              Expression          =>
!                Make_Function_Call (Loc,
!                  Name                   =>
!                    New_Occurrence_Of (RTE (RE_Get_Active_Partition_Id), Loc),
!                  Parameter_Associations => New_List (
!                    New_Occurrence_Of (Package_Name, Loc)))),
! 
!          --  Declaration use only in the local case: proxy address
! 
!            Make_Object_Declaration (Loc,
!              Defining_Identifier => Proxy_Addr,
!              Object_Definition   =>
!                New_Occurrence_Of (RTE (RE_Unsigned_64), Loc)),
! 
!          --  Declarations used only in the remote case: stub object and
!          --  stub pointer.
! 
!            Make_Object_Declaration (Loc,
!              Defining_Identifier => Local_Stub,
!              Aliased_Present     => True,
!              Object_Definition   =>
!                New_Occurrence_Of (Stub_Elements.Stub_Type, Loc)),
! 
!            Make_Object_Declaration (Loc,
!              Defining_Identifier =>
!                Stub_Ptr,
!              Object_Definition   =>
!                New_Occurrence_Of (Stub_Elements.Stub_Type_Access, Loc),
!              Expression          =>
!                Make_Attribute_Reference (Loc,
!                  Prefix => New_Occurrence_Of (Local_Stub, Loc),
!                  Attribute_Name => Name_Unchecked_Access)));
! 
!          Set_Etype (Stub_Ptr, Stub_Elements.Stub_Type_Access);
!          --  Build_Get_Unique_RP_Call needs this information
! 
!          --  Note: Here we assume that the Fat_Type is a record
!          --  containing just a pointer to a proxy or stub object.
! 
!          Proc_Statements := New_List (
! 
!          --  Generate:
! 
!          --    Get_RAS_Info (Pkg, Subp, PA);
!          --    if Origin = Local_Partition_Id
!          --      and then not All_Calls_Remote
!          --    then
!          --       return Fat_Type!(PA);
!          --    end if;
! 
!             Make_Procedure_Call_Statement (Loc,
!               Name =>
!                 New_Occurrence_Of (RTE (RE_Get_RAS_Info), Loc),
!               Parameter_Associations => New_List (
!                 New_Occurrence_Of (Package_Name, Loc),
!                 New_Occurrence_Of (Subp_Id, Loc),
!                 New_Occurrence_Of (Proxy_Addr, Loc))),
! 
!            Make_Implicit_If_Statement (N,
!              Condition =>
!                Make_And_Then (Loc,
!                  Left_Opnd  =>
!                    Make_Op_Eq (Loc,
!                      Left_Opnd =>
!                        New_Occurrence_Of (Origin, Loc),
!                      Right_Opnd =>
!                        Make_Function_Call (Loc,
!                          New_Occurrence_Of (
!                            RTE (RE_Get_Local_Partition_Id), Loc))),
!                  Right_Opnd =>
!                    Make_Op_Not (Loc,
!                      New_Occurrence_Of (All_Calls_Remote, Loc))),
!              Then_Statements => New_List (
!                Make_Return_Statement (Loc,
!                  Unchecked_Convert_To (Fat_Type,
!                    OK_Convert_To (RTE (RE_Address),
!                      New_Occurrence_Of (Proxy_Addr, Loc)))))),
! 
!            Set_Field (Name_Origin,
!                New_Occurrence_Of (Origin, Loc)),
! 
!            Set_Field (Name_Receiver,
!              Make_Function_Call (Loc,
!                Name                   =>
!                  New_Occurrence_Of (RTE (RE_Get_RCI_Package_Receiver), Loc),
!                Parameter_Associations => New_List (
!                  New_Occurrence_Of (Package_Name, Loc)))),
! 
!            Set_Field (Name_Addr, New_Occurrence_Of (Proxy_Addr, Loc)),
! 
!          --  E.4.1(9) A remote call is asynchronous if it is a call to
!          --  a procedure, or a call through a value of an access-to-procedure
!          --  type, to which a pragma Asynchronous applies.
! 
!          --    Parameter Asynch_P is true when the procedure is asynchronous;
!          --    Expression Asynch_T is true when the type is asynchronous.
! 
!            Set_Field (Name_Asynchronous,
!              Make_Or_Else (Loc,
!                New_Occurrence_Of (Asynch_P, Loc),
!                New_Occurrence_Of (Boolean_Literals (
!                  Is_Asynchronous (Ras_Type)), Loc))));
! 
!          Append_List_To (Proc_Statements,
!            Build_Get_Unique_RP_Call
!              (Loc, Stub_Ptr, Stub_Elements.Stub_Type));
! 
!          --  Return the newly created value
! 
!          Append_To (Proc_Statements,
!            Make_Return_Statement (Loc,
!              Expression =>
!                Unchecked_Convert_To (Fat_Type,
!                  New_Occurrence_Of (Stub_Ptr, Loc))));
! 
!          Proc_Spec :=
!            Make_Function_Specification (Loc,
!              Defining_Unit_Name       => Proc,
!              Parameter_Specifications => New_List (
!                Make_Parameter_Specification (Loc,
!                  Defining_Identifier => Package_Name,
!                  Parameter_Type      =>
!                    New_Occurrence_Of (Standard_String, Loc)),
! 
!                Make_Parameter_Specification (Loc,
!                  Defining_Identifier => Subp_Id,
!                  Parameter_Type      =>
!                    New_Occurrence_Of (RTE (RE_Subprogram_Id), Loc)),
! 
!                Make_Parameter_Specification (Loc,
!                  Defining_Identifier => Asynch_P,
!                  Parameter_Type      =>
!                    New_Occurrence_Of (Standard_Boolean, Loc)),
! 
!                Make_Parameter_Specification (Loc,
!                  Defining_Identifier => All_Calls_Remote,
!                  Parameter_Type      =>
!                    New_Occurrence_Of (Standard_Boolean, Loc))),
! 
!             Subtype_Mark =>
!               New_Occurrence_Of (Fat_Type, Loc));
! 
!          --  Set the kind and return type of the function to prevent
!          --  ambiguities between Ras_Type and Fat_Type in subsequent analysis.
! 
!          Set_Ekind (Proc, E_Function);
!          Set_Etype (Proc, Fat_Type);
! 
!          Discard_Node (
!            Make_Subprogram_Body (Loc,
!              Specification              => Proc_Spec,
!              Declarations               => Proc_Decls,
!              Handled_Statement_Sequence =>
!                Make_Handled_Sequence_Of_Statements (Loc,
!                  Statements => Proc_Statements)));
! 
!          Set_TSS (Fat_Type, Proc);
!       end Add_RAS_Access_TSS;
! 
!       -----------------------
!       -- Add_RAST_Features --
!       -----------------------
! 
!       procedure Add_RAST_Features
!         (Vis_Decl : Node_Id;
!          RAS_Type : Entity_Id;
!          Decls    : List_Id)
!       is
!          pragma Warnings (Off);
!          pragma Unreferenced (RAS_Type, Decls);
!          pragma Warnings (On);
!       begin
!          Add_RAS_Access_TSS (Vis_Decl);
!       end Add_RAST_Features;
! 
!       -----------------------------------------
!       -- Add_Receiving_Stubs_To_Declarations --
!       -----------------------------------------
! 
!       procedure Add_Receiving_Stubs_To_Declarations
!         (Pkg_Spec : Node_Id;
!          Decls    : List_Id)
!       is
!          Loc : constant Source_Ptr := Sloc (Pkg_Spec);
! 
!          Request_Parameter : Node_Id;
! 
!          Pkg_RPC_Receiver            : constant Entity_Id :=
!                                          Make_Defining_Identifier (Loc,
!                                            New_Internal_Name ('H'));
!          Pkg_RPC_Receiver_Statements : List_Id;
!          Pkg_RPC_Receiver_Cases      : constant List_Id := New_List;
!          Pkg_RPC_Receiver_Body       : Node_Id;
!          --  A Pkg_RPC_Receiver is built to decode the request
! 
!          Lookup_RAS_Info : constant Entity_Id :=
!                              Make_Defining_Identifier (Loc,
!                                Chars => New_Internal_Name ('R'));
!          --  A remote subprogram is created to allow peers to look up
!          --  RAS information using subprogram ids.
! 
!          Subp_Id    : Entity_Id;
!          Subp_Index : Entity_Id;
!          --  Subprogram_Id as read from the incoming stream
! 
!          Current_Declaration       : Node_Id;
!          Current_Subprogram_Number : Int := First_RCI_Subprogram_Id;
!          Current_Stubs             : Node_Id;
! 
!          Subp_Info_Array : constant Entity_Id :=
!                              Make_Defining_Identifier (Loc,
!                                Chars => New_Internal_Name ('I'));
! 
!          Subp_Info_List : constant List_Id := New_List;
! 
!          Register_Pkg_Actuals : constant List_Id := New_List;
! 
!          All_Calls_Remote_E  : Entity_Id;
!          Proxy_Object_Addr   : Entity_Id;
! 
!          procedure Append_Stubs_To
!            (RPC_Receiver_Cases : List_Id;
!             Stubs              : Node_Id;
!             Subprogram_Number  : Int);
!          --  Add one case to the specified RPC receiver case list
!          --  associating Subprogram_Number with the subprogram declared
!          --  by Declaration, for which we have receiving stubs in Stubs.
! 
!          ---------------------
!          -- Append_Stubs_To --
!          ---------------------
! 
!          procedure Append_Stubs_To
!            (RPC_Receiver_Cases : List_Id;
!             Stubs              : Node_Id;
!             Subprogram_Number  : Int)
!          is
!          begin
!             Append_To (RPC_Receiver_Cases,
!               Make_Case_Statement_Alternative (Loc,
!                 Discrete_Choices =>
!                    New_List (Make_Integer_Literal (Loc, Subprogram_Number)),
!                 Statements       =>
!                   New_List (
!                     Make_Procedure_Call_Statement (Loc,
!                       Name                   =>
!                         New_Occurrence_Of (
!                           Defining_Entity (Stubs), Loc),
!                       Parameter_Associations => New_List (
!                         New_Occurrence_Of (Request_Parameter, Loc))))));
!          end Append_Stubs_To;
! 
!       --  Start of processing for Add_Receiving_Stubs_To_Declarations
! 
!       begin
!          --  Building receiving stubs consist in several operations:
! 
!          --    - a package RPC receiver must be built. This subprogram
!          --      will get a Subprogram_Id from the incoming stream
!          --      and will dispatch the call to the right subprogram
! 
!          --    - a receiving stub for any subprogram visible in the package
!          --      spec. This stub will read all the parameters from the stream,
!          --      and put the result as well as the exception occurrence in the
!          --      output stream
! 
!          --    - a dummy package with an empty spec and a body made of an
!          --      elaboration part, whose job is to register the receiving
!          --      part of this RCI package on the name server. This is done
!          --      by calling System.Partition_Interface.Register_Receiving_Stub
! 
!          Build_RPC_Receiver_Body (
!            RPC_Receiver => Pkg_RPC_Receiver,
!            Request      => Request_Parameter,
!            Subp_Id      => Subp_Id,
!            Subp_Index   => Subp_Index,
!            Stmts        => Pkg_RPC_Receiver_Statements,
!            Decl         => Pkg_RPC_Receiver_Body);
!          pragma Assert (Subp_Id = Subp_Index);
! 
!          --  A null subp_id denotes a call through a RAS, in which case the
!          --  next Uint_64 element in the stream is the address of the local
!          --  proxy object, from which we can retrieve the actual subprogram id.
! 
!          Append_To (Pkg_RPC_Receiver_Statements,
!            Make_Implicit_If_Statement (Pkg_Spec,
!              Condition =>
!                Make_Op_Eq (Loc,
!                  New_Occurrence_Of (Subp_Id, Loc),
!                  Make_Integer_Literal (Loc, 0)),
!              Then_Statements => New_List (
!                Make_Assignment_Statement (Loc,
!                  Name =>
!                    New_Occurrence_Of (Subp_Id, Loc),
!                  Expression =>
!                    Make_Selected_Component (Loc,
!                      Prefix =>
!                        Unchecked_Convert_To (RTE (RE_RAS_Proxy_Type_Access),
!                          OK_Convert_To (RTE (RE_Address),
!                            Make_Attribute_Reference (Loc,
!                              Prefix =>
!                                New_Occurrence_Of (RTE (RE_Unsigned_64), Loc),
!                              Attribute_Name =>
!                                Name_Input,
!                              Expressions => New_List (
!                                Make_Selected_Component (Loc,
!                                  Prefix        => Request_Parameter,
!                                  Selector_Name => Name_Params))))),
!                      Selector_Name =>
!                        Make_Identifier (Loc, Name_Subp_Id))))));
! 
!          --  Build a subprogram for RAS information lookups
! 
!          Current_Declaration :=
!            Make_Subprogram_Declaration (Loc,
!              Specification =>
!                Make_Function_Specification (Loc,
!                  Defining_Unit_Name =>
!                    Lookup_RAS_Info,
!                  Parameter_Specifications => New_List (
!                    Make_Parameter_Specification (Loc,
!                      Defining_Identifier =>
!                        Make_Defining_Identifier (Loc, Name_Subp_Id),
!                      In_Present =>
!                        True,
!                      Parameter_Type =>
!                        New_Occurrence_Of (RTE (RE_Subprogram_Id), Loc))),
!                  Subtype_Mark =>
!                    New_Occurrence_Of (RTE (RE_Unsigned_64), Loc)));
!          Append_To (Decls, Current_Declaration);
!          Analyze (Current_Declaration);
! 
!          Current_Stubs := Build_Subprogram_Receiving_Stubs
!            (Vis_Decl     => Current_Declaration,
!             Asynchronous => False);
!          Append_To (Decls, Current_Stubs);
!          Analyze (Current_Stubs);
! 
!          Append_Stubs_To (Pkg_RPC_Receiver_Cases,
!            Stubs       =>
!              Current_Stubs,
!            Subprogram_Number => 1);
! 
!          --  For each subprogram, the receiving stub will be built and a
!          --  case statement will be made on the Subprogram_Id to dispatch
!          --  to the right subprogram.
! 
!          All_Calls_Remote_E := Boolean_Literals (
!            Has_All_Calls_Remote (Defining_Entity (Pkg_Spec)));
! 
!          Overload_Counter_Table.Reset;
! 
!          Current_Declaration := First (Visible_Declarations (Pkg_Spec));
!          while Present (Current_Declaration) loop
!             if Nkind (Current_Declaration) = N_Subprogram_Declaration
!               and then Comes_From_Source (Current_Declaration)
!             then
!                declare
!                   Loc : constant Source_Ptr :=
!                           Sloc (Current_Declaration);
!                   --  While specifically processing Current_Declaration, use
!                   --  its Sloc as the location of all generated nodes.
! 
!                   Subp_Def : constant Entity_Id :=
!                                Defining_Unit_Name
!                                  (Specification (Current_Declaration));
! 
!                   Subp_Val : String_Id;
! 
!                begin
!                   pragma Assert (Current_Subprogram_Number =
!                     Get_Subprogram_Id (Subp_Def));
! 
!                   --  Build receiving stub
! 
!                   Current_Stubs :=
!                     Build_Subprogram_Receiving_Stubs
!                       (Vis_Decl     => Current_Declaration,
!                        Asynchronous =>
!                          Nkind (Specification (Current_Declaration)) =
!                              N_Procedure_Specification
!                            and then Is_Asynchronous (Subp_Def));
! 
!                   Append_To (Decls, Current_Stubs);
!                   Analyze (Current_Stubs);
! 
!                   --  Build RAS proxy
! 
!                   Add_RAS_Proxy_And_Analyze (Decls,
!                     Vis_Decl           =>
!                       Current_Declaration,
!                     All_Calls_Remote_E =>
!                       All_Calls_Remote_E,
!                     Proxy_Object_Addr  =>
!                       Proxy_Object_Addr);
! 
!                   --  Compute distribution identifier
! 
!                   Assign_Subprogram_Identifier (
!                     Subp_Def,
!                     Current_Subprogram_Number,
!                     Subp_Val);
! 
!                   --  Add subprogram descriptor (RCI_Subp_Info) to the
!                   --  subprograms table for this receiver. The aggregate
!                   --  below must be kept consistent with the declaration
!                   --  of type RCI_Subp_Info in System.Partition_Interface.
! 
!                   Append_To (Subp_Info_List,
!                     Make_Component_Association (Loc,
!                       Choices => New_List (
!                         Make_Integer_Literal (Loc,
!                           Current_Subprogram_Number)),
!                       Expression =>
!                         Make_Aggregate (Loc,
!                           Component_Associations => New_List (
!                             Make_Component_Association (Loc,
!                               Choices => New_List (
!                                 Make_Identifier (Loc, Name_Addr)),
!                               Expression =>
!                                 New_Occurrence_Of (
!                                   Proxy_Object_Addr, Loc))))));
! 
!                   Append_Stubs_To (Pkg_RPC_Receiver_Cases,
!                     Stubs =>
!                       Current_Stubs,
!                     Subprogram_Number =>
!                       Current_Subprogram_Number);
!                end;
! 
!                Current_Subprogram_Number := Current_Subprogram_Number + 1;
!             end if;
! 
!             Next (Current_Declaration);
!          end loop;
! 
!          --  If we receive an invalid Subprogram_Id, it is best to do nothing
!          --  rather than raising an exception since we do not want someone
!          --  to crash a remote partition by sending invalid subprogram ids.
!          --  This is consistent with the other parts of the case statement
!          --  since even in presence of incorrect parameters in the stream,
!          --  every exception will be caught and (if the subprogram is not an
!          --  APC) put into the result stream and sent away.
! 
!          Append_To (Pkg_RPC_Receiver_Cases,
!            Make_Case_Statement_Alternative (Loc,
!              Discrete_Choices =>
!                New_List (Make_Others_Choice (Loc)),
!              Statements       =>
!                New_List (Make_Null_Statement (Loc))));
! 
!          Append_To (Pkg_RPC_Receiver_Statements,
!            Make_Case_Statement (Loc,
!              Expression   =>
!                New_Occurrence_Of (Subp_Id, Loc),
!              Alternatives => Pkg_RPC_Receiver_Cases));
! 
!          Append_To (Decls,
!            Make_Object_Declaration (Loc,
!              Defining_Identifier => Subp_Info_Array,
!              Constant_Present    => True,
!              Aliased_Present     => True,
!              Object_Definition   =>
!                Make_Subtype_Indication (Loc,
!                  Subtype_Mark =>
!                    New_Occurrence_Of (RTE (RE_RCI_Subp_Info_Array), Loc),
!                  Constraint =>
!                    Make_Index_Or_Discriminant_Constraint (Loc,
!                      New_List (
!                        Make_Range (Loc,
!                          Low_Bound  => Make_Integer_Literal (Loc,
!                            First_RCI_Subprogram_Id),
!                          High_Bound =>
!                            Make_Integer_Literal (Loc,
!                              First_RCI_Subprogram_Id
!                              + List_Length (Subp_Info_List) - 1))))),
!              Expression          =>
!                Make_Aggregate (Loc,
!                  Component_Associations => Subp_Info_List)));
!          Analyze (Last (Decls));
! 
!          Append_To (Decls,
!            Make_Subprogram_Body (Loc,
!              Specification =>
!                Copy_Specification (Loc, Parent (Lookup_RAS_Info)),
!              Declarations =>
!                No_List,
!              Handled_Statement_Sequence =>
!                Make_Handled_Sequence_Of_Statements (Loc,
!                  Statements => New_List (
!                    Make_Return_Statement (Loc,
!                      Expression => OK_Convert_To (RTE (RE_Unsigned_64),
!                        Make_Selected_Component (Loc,
!                          Prefix =>
!                            Make_Indexed_Component (Loc,
!                              Prefix =>
!                                New_Occurrence_Of (Subp_Info_Array, Loc),
!                              Expressions => New_List (
!                                Convert_To (Standard_Integer,
!                                  Make_Identifier (Loc, Name_Subp_Id)))),
!                          Selector_Name =>
!                            Make_Identifier (Loc, Name_Addr))))))));
!          Analyze (Last (Decls));
! 
!          Append_To (Decls, Pkg_RPC_Receiver_Body);
!          Analyze (Last (Decls));
! 
!          Get_Library_Unit_Name_String (Pkg_Spec);
!          Append_To (Register_Pkg_Actuals,
!             --  Name
!            Make_String_Literal (Loc,
!              Strval => String_From_Name_Buffer));
! 
!          Append_To (Register_Pkg_Actuals,
!             --  Receiver
!            Make_Attribute_Reference (Loc,
!              Prefix         =>
!                New_Occurrence_Of (Pkg_RPC_Receiver, Loc),
!              Attribute_Name =>
!                Name_Unrestricted_Access));
! 
!          Append_To (Register_Pkg_Actuals,
!             --  Version
!            Make_Attribute_Reference (Loc,
!              Prefix         =>
!                New_Occurrence_Of (Defining_Entity (Pkg_Spec), Loc),
!              Attribute_Name =>
!                Name_Version));
! 
!          Append_To (Register_Pkg_Actuals,
!             --  Subp_Info
!            Make_Attribute_Reference (Loc,
!              Prefix         =>
!                New_Occurrence_Of (Subp_Info_Array, Loc),
!              Attribute_Name =>
!                Name_Address));
! 
!          Append_To (Register_Pkg_Actuals,
!             --  Subp_Info_Len
!            Make_Attribute_Reference (Loc,
!              Prefix         =>
!                New_Occurrence_Of (Subp_Info_Array, Loc),
!              Attribute_Name =>
!                Name_Length));
! 
!          Append_To (Decls,
!            Make_Procedure_Call_Statement (Loc,
!              Name                   =>
!                New_Occurrence_Of (RTE (RE_Register_Receiving_Stub), Loc),
!              Parameter_Associations => Register_Pkg_Actuals));
!          Analyze (Last (Decls));
!       end Add_Receiving_Stubs_To_Declarations;
! 
!       ---------------------------------
!       -- Build_General_Calling_Stubs --
!       ---------------------------------
! 
!       procedure Build_General_Calling_Stubs
!         (Decls                     : List_Id;
!          Statements                : List_Id;
!          Target_Partition          : Entity_Id;
!          Target_RPC_Receiver       : Node_Id;
!          Subprogram_Id             : Node_Id;
!          Asynchronous              : Node_Id   := Empty;
!          Is_Known_Asynchronous     : Boolean   := False;
!          Is_Known_Non_Asynchronous : Boolean   := False;
!          Is_Function               : Boolean;
!          Spec                      : Node_Id;
!          Stub_Type                 : Entity_Id := Empty;
!          RACW_Type                 : Entity_Id := Empty;
!          Nod                       : Node_Id)
!       is
!          Loc : constant Source_Ptr := Sloc (Nod);
! 
!          Stream_Parameter : Node_Id;
!          --  Name of the stream used to transmit parameters to the
!          --  remote package.
! 
!          Result_Parameter : Node_Id;
!          --  Name of the result parameter (in non-APC cases) which get the
!          --  result of the remote subprogram.
! 
!          Exception_Return_Parameter : Node_Id;
!          --  Name of the parameter which will hold the exception sent by the
!          --  remote subprogram.
! 
!          Current_Parameter : Node_Id;
!          --  Current parameter being handled
! 
!          Ordered_Parameters_List : constant List_Id :=
!                                      Build_Ordered_Parameters_List (Spec);
! 
!          Asynchronous_Statements     : List_Id := No_List;
!          Non_Asynchronous_Statements : List_Id := No_List;
!          --  Statements specifics to the Asynchronous/Non-Asynchronous cases
! 
!          Extra_Formal_Statements : constant List_Id := New_List;
!          --  List of statements for extra formal parameters. It will appear
!          --  after the regular statements for writing out parameters.
! 
!          pragma Warnings (Off);
!          pragma Unreferenced (RACW_Type);
!          --  Used only for the PolyORB case
!          pragma Warnings (On);
! 
!       begin
!          --  The general form of a calling stub for a given subprogram is:
! 
!          --    procedure X (...) is P : constant Partition_ID :=
!          --      RCI_Cache.Get_Active_Partition_ID; Stream, Result : aliased
!          --      System.RPC.Params_Stream_Type (0); begin
!          --       Put_Package_RPC_Receiver_In_Stream; (the package RPC receiver
!          --                  comes from RCI_Cache.Get_RCI_Package_Receiver)
!          --       Put_Subprogram_Id_In_Stream; Put_Parameters_In_Stream; Do_RPC
!          --       (Stream, Result); Read_Exception_Occurrence_From_Result;
!          --       Raise_It;
!          --       Read_Out_Parameters_And_Function_Return_From_Stream; end X;
! 
!          --  There are some variations: Do_APC is called for an asynchronous
!          --  procedure and the part after the call is completely ommitted as
!          --  well as the declaration of Result. For a function call, 'Input is
!          --  always used to read the result even if it is constrained.
! 
!          Stream_Parameter :=
!            Make_Defining_Identifier (Loc, New_Internal_Name ('S'));
! 
!          Append_To (Decls,
!            Make_Object_Declaration (Loc,
!              Defining_Identifier => Stream_Parameter,
!              Aliased_Present     => True,
!              Object_Definition   =>
!                Make_Subtype_Indication (Loc,
!                  Subtype_Mark =>
!                    New_Occurrence_Of (RTE (RE_Params_Stream_Type), Loc),
!                  Constraint   =>
!                    Make_Index_Or_Discriminant_Constraint (Loc,
!                      Constraints =>
!                        New_List (Make_Integer_Literal (Loc, 0))))));
! 
!          if not Is_Known_Asynchronous then
!             Result_Parameter :=
!               Make_Defining_Identifier (Loc, New_Internal_Name ('R'));
! 
!             Append_To (Decls,
!               Make_Object_Declaration (Loc,
!                 Defining_Identifier => Result_Parameter,
!                 Aliased_Present     => True,
!                 Object_Definition   =>
!                   Make_Subtype_Indication (Loc,
!                     Subtype_Mark =>
!                       New_Occurrence_Of (RTE (RE_Params_Stream_Type), Loc),
!                     Constraint   =>
!                       Make_Index_Or_Discriminant_Constraint (Loc,
!                         Constraints =>
!                           New_List (Make_Integer_Literal (Loc, 0))))));
! 
!             Exception_Return_Parameter :=
!               Make_Defining_Identifier (Loc, New_Internal_Name ('E'));
! 
!             Append_To (Decls,
!               Make_Object_Declaration (Loc,
!                 Defining_Identifier => Exception_Return_Parameter,
!                 Object_Definition   =>
!                   New_Occurrence_Of (RTE (RE_Exception_Occurrence), Loc)));
! 
!          else
!             Result_Parameter := Empty;
!             Exception_Return_Parameter := Empty;
!          end if;
! 
!          --  Put first the RPC receiver corresponding to the remote package
! 
!          Append_To (Statements,
!            Make_Attribute_Reference (Loc,
!              Prefix         =>
!                New_Occurrence_Of (RTE (RE_Unsigned_64), Loc),
!              Attribute_Name => Name_Write,
!              Expressions    => New_List (
!                Make_Attribute_Reference (Loc,
!                  Prefix         =>
!                    New_Occurrence_Of (Stream_Parameter, Loc),
!                  Attribute_Name =>
!                    Name_Access),
!                Target_RPC_Receiver)));
! 
!          --  Then put the Subprogram_Id of the subprogram we want to call in
!          --  the stream.
! 
!          Append_To (Statements,
!            Make_Attribute_Reference (Loc,
!              Prefix         =>
!                New_Occurrence_Of (RTE (RE_Subprogram_Id), Loc),
!              Attribute_Name =>
!                Name_Write,
!              Expressions      => New_List (
!                Make_Attribute_Reference (Loc,
!                  Prefix         =>
!                    New_Occurrence_Of (Stream_Parameter, Loc),
!                  Attribute_Name => Name_Access),
!                Subprogram_Id)));
! 
!          Current_Parameter := First (Ordered_Parameters_List);
!          while Present (Current_Parameter) loop
!             declare
!                Typ             : constant Node_Id :=
!                                    Parameter_Type (Current_Parameter);
!                Etyp            : Entity_Id;
!                Constrained     : Boolean;
!                Value           : Node_Id;
!                Extra_Parameter : Entity_Id;
! 
!             begin
!                if Is_RACW_Controlling_Formal
!                  (Current_Parameter, Stub_Type)
!                then
!                   --  In the case of a controlling formal argument, we marshall
!                   --  its addr field rather than the local stub.
! 
!                   Append_To (Statements,
!                      Pack_Node_Into_Stream (Loc,
!                        Stream => Stream_Parameter,
!                        Object =>
!                          Make_Selected_Component (Loc,
!                            Prefix        =>
!                              Defining_Identifier (Current_Parameter),
!                            Selector_Name => Name_Addr),
!                        Etyp   => RTE (RE_Unsigned_64)));
! 
!                else
!                   Value := New_Occurrence_Of
!                     (Defining_Identifier (Current_Parameter), Loc);
! 
!                   --  Access type parameters are transmitted as in out
!                   --  parameters. However, a dereference is needed so that
!                   --  we marshall the designated object.
! 
!                   if Nkind (Typ) = N_Access_Definition then
!                      Value := Make_Explicit_Dereference (Loc, Value);
!                      Etyp  := Etype (Subtype_Mark (Typ));
!                   else
!                      Etyp := Etype (Typ);
!                   end if;
! 
!                   Constrained :=
!                     Is_Constrained (Etyp) or else Is_Elementary_Type (Etyp);
! 
!                   --  Any parameter but unconstrained out parameters are
!                   --  transmitted to the peer.
! 
!                   if In_Present (Current_Parameter)
!                     or else not Out_Present (Current_Parameter)
!                     or else not Constrained
!                   then
!                      Append_To (Statements,
!                        Make_Attribute_Reference (Loc,
!                          Prefix         =>
!                            New_Occurrence_Of (Etyp, Loc),
!                          Attribute_Name =>
!                            Output_From_Constrained (Constrained),
!                          Expressions    => New_List (
!                            Make_Attribute_Reference (Loc,
!                              Prefix         =>
!                                New_Occurrence_Of (Stream_Parameter, Loc),
!                              Attribute_Name => Name_Access),
!                            Value)));
!                   end if;
!                end if;
! 
!                --  If the current parameter has a dynamic constrained status,
!                --  then this status is transmitted as well.
!                --  This should be done for accessibility as well ???
! 
!                if Nkind (Typ) /= N_Access_Definition
!                  and then Need_Extra_Constrained (Current_Parameter)
!                then
!                   --  In this block, we do not use the extra formal that has
!                   --  been created because it does not exist at the time of
!                   --  expansion when building calling stubs for remote access
!                   --  to subprogram types. We create an extra variable of this
!                   --  type and push it in the stream after the regular
!                   --  parameters.
! 
!                   Extra_Parameter := Make_Defining_Identifier
!                                        (Loc, New_Internal_Name ('P'));
! 
!                   Append_To (Decls,
!                      Make_Object_Declaration (Loc,
!                        Defining_Identifier => Extra_Parameter,
!                        Constant_Present    => True,
!                        Object_Definition   =>
!                           New_Occurrence_Of (Standard_Boolean, Loc),
!                        Expression          =>
!                           Make_Attribute_Reference (Loc,
!                             Prefix         =>
!                               New_Occurrence_Of (
!                                 Defining_Identifier (Current_Parameter), Loc),
!                             Attribute_Name => Name_Constrained)));
! 
!                   Append_To (Extra_Formal_Statements,
!                      Make_Attribute_Reference (Loc,
!                        Prefix         =>
!                          New_Occurrence_Of (Standard_Boolean, Loc),
!                        Attribute_Name =>
!                          Name_Write,
!                        Expressions    => New_List (
!                          Make_Attribute_Reference (Loc,
!                            Prefix         =>
!                              New_Occurrence_Of (Stream_Parameter, Loc),
!                            Attribute_Name =>
!                              Name_Access),
!                          New_Occurrence_Of (Extra_Parameter, Loc))));
!                end if;
! 
!                Next (Current_Parameter);
!             end;
!          end loop;
! 
!          --  Append the formal statements list to the statements
! 
!          Append_List_To (Statements, Extra_Formal_Statements);
! 
!          if not Is_Known_Non_Asynchronous then
! 
!             --  Build the call to System.RPC.Do_APC
! 
!             Asynchronous_Statements := New_List (
!               Make_Procedure_Call_Statement (Loc,
!                 Name                   =>
!                   New_Occurrence_Of (RTE (RE_Do_Apc), Loc),
!                 Parameter_Associations => New_List (
!                   New_Occurrence_Of (Target_Partition, Loc),
!                   Make_Attribute_Reference (Loc,
!                     Prefix         =>
!                       New_Occurrence_Of (Stream_Parameter, Loc),
!                     Attribute_Name =>
!                       Name_Access))));
!          else
!             Asynchronous_Statements := No_List;
!          end if;
! 
!          if not Is_Known_Asynchronous then
! 
!             --  Build the call to System.RPC.Do_RPC
! 
!             Non_Asynchronous_Statements := New_List (
!               Make_Procedure_Call_Statement (Loc,
!                 Name                   =>
!                   New_Occurrence_Of (RTE (RE_Do_Rpc), Loc),
!                 Parameter_Associations => New_List (
!                   New_Occurrence_Of (Target_Partition, Loc),
! 
!                   Make_Attribute_Reference (Loc,
!                     Prefix         =>
!                       New_Occurrence_Of (Stream_Parameter, Loc),
!                     Attribute_Name =>
!                       Name_Access),
! 
!                   Make_Attribute_Reference (Loc,
!                     Prefix         =>
!                       New_Occurrence_Of (Result_Parameter, Loc),
!                     Attribute_Name =>
!                       Name_Access))));
! 
!             --  Read the exception occurrence from the result stream and
!             --  reraise it. It does no harm if this is a Null_Occurrence since
!             --  this does nothing.
! 
!             Append_To (Non_Asynchronous_Statements,
!               Make_Attribute_Reference (Loc,
!                 Prefix         =>
!                   New_Occurrence_Of (RTE (RE_Exception_Occurrence), Loc),
! 
!                 Attribute_Name =>
!                   Name_Read,
! 
!                 Expressions    => New_List (
!                   Make_Attribute_Reference (Loc,
!                     Prefix         =>
!                       New_Occurrence_Of (Result_Parameter, Loc),
!                     Attribute_Name =>
!                       Name_Access),
!                   New_Occurrence_Of (Exception_Return_Parameter, Loc))));
! 
!             Append_To (Non_Asynchronous_Statements,
!               Make_Procedure_Call_Statement (Loc,
!                 Name                   =>
!                   New_Occurrence_Of (RTE (RE_Reraise_Occurrence), Loc),
!                 Parameter_Associations => New_List (
!                   New_Occurrence_Of (Exception_Return_Parameter, Loc))));
! 
!             if Is_Function then
! 
!                --  If this is a function call, then read the value and return
!                --  it. The return value is written/read using 'Output/'Input.
! 
!                Append_To (Non_Asynchronous_Statements,
!                  Make_Tag_Check (Loc,
!                    Make_Return_Statement (Loc,
!                      Expression =>
!                        Make_Attribute_Reference (Loc,
!                          Prefix         =>
!                            New_Occurrence_Of (
!                              Etype (Subtype_Mark (Spec)), Loc),
! 
!                          Attribute_Name => Name_Input,
! 
!                          Expressions    => New_List (
!                            Make_Attribute_Reference (Loc,
!                              Prefix         =>
!                                New_Occurrence_Of (Result_Parameter, Loc),
!                              Attribute_Name => Name_Access))))));
! 
!             else
!                --  Loop around parameters and assign out (or in out)
!                --  parameters. In the case of RACW, controlling arguments
!                --  cannot possibly have changed since they are remote, so we do
!                --  not read them from the stream.
! 
!                Current_Parameter := First (Ordered_Parameters_List);
!                while Present (Current_Parameter) loop
!                   declare
!                      Typ   : constant Node_Id :=
!                                Parameter_Type (Current_Parameter);
!                      Etyp  : Entity_Id;
!                      Value : Node_Id;
! 
!                   begin
!                      Value :=
!                        New_Occurrence_Of
!                          (Defining_Identifier (Current_Parameter), Loc);
! 
!                      if Nkind (Typ) = N_Access_Definition then
!                         Value := Make_Explicit_Dereference (Loc, Value);
!                         Etyp  := Etype (Subtype_Mark (Typ));
!                      else
!                         Etyp := Etype (Typ);
!                      end if;
! 
!                      if (Out_Present (Current_Parameter)
!                           or else Nkind (Typ) = N_Access_Definition)
!                        and then Etyp /= Stub_Type
!                      then
!                         Append_To (Non_Asynchronous_Statements,
!                            Make_Attribute_Reference (Loc,
!                              Prefix         =>
!                                New_Occurrence_Of (Etyp, Loc),
! 
!                              Attribute_Name => Name_Read,
! 
!                              Expressions    => New_List (
!                                Make_Attribute_Reference (Loc,
!                                  Prefix         =>
!                                    New_Occurrence_Of (Result_Parameter, Loc),
!                                  Attribute_Name =>
!                                    Name_Access),
!                                Value)));
!                      end if;
!                   end;
! 
!                   Next (Current_Parameter);
!                end loop;
!             end if;
!          end if;
! 
!          if Is_Known_Asynchronous then
!             Append_List_To (Statements, Asynchronous_Statements);
! 
!          elsif Is_Known_Non_Asynchronous then
!             Append_List_To (Statements, Non_Asynchronous_Statements);
! 
!          else
!             pragma Assert (Present (Asynchronous));
!             Prepend_To (Asynchronous_Statements,
!               Make_Attribute_Reference (Loc,
!                 Prefix         => New_Occurrence_Of (Standard_Boolean, Loc),
!                 Attribute_Name => Name_Write,
!                 Expressions    => New_List (
!                   Make_Attribute_Reference (Loc,
!                     Prefix         =>
!                       New_Occurrence_Of (Stream_Parameter, Loc),
!                     Attribute_Name => Name_Access),
!                   New_Occurrence_Of (Standard_True, Loc))));
! 
!             Prepend_To (Non_Asynchronous_Statements,
!               Make_Attribute_Reference (Loc,
!                 Prefix         => New_Occurrence_Of (Standard_Boolean, Loc),
!                 Attribute_Name => Name_Write,
!                 Expressions    => New_List (
!                   Make_Attribute_Reference (Loc,
!                     Prefix         =>
!                       New_Occurrence_Of (Stream_Parameter, Loc),
!                     Attribute_Name => Name_Access),
!                   New_Occurrence_Of (Standard_False, Loc))));
! 
!             Append_To (Statements,
!               Make_Implicit_If_Statement (Nod,
!                 Condition       => Asynchronous,
!                 Then_Statements => Asynchronous_Statements,
!                 Else_Statements => Non_Asynchronous_Statements));
!          end if;
!       end Build_General_Calling_Stubs;
! 
!       -----------------------------
!       -- Build_RPC_Receiver_Body --
!       -----------------------------
! 
!       procedure Build_RPC_Receiver_Body
!         (RPC_Receiver : Entity_Id;
!          Request      : out Entity_Id;
!          Subp_Id      : out Entity_Id;
!          Subp_Index   : out Entity_Id;
!          Stmts        : out List_Id;
!          Decl         : out Node_Id)
!       is
!          Loc : constant Source_Ptr := Sloc (RPC_Receiver);
! 
!          RPC_Receiver_Spec  : Node_Id;
!          RPC_Receiver_Decls : List_Id;
! 
!       begin
!          Request := Make_Defining_Identifier (Loc, Name_R);
! 
!          RPC_Receiver_Spec :=
!            Build_RPC_Receiver_Specification
!              (RPC_Receiver      => RPC_Receiver,
!               Request_Parameter => Request);
! 
!          Subp_Id    := Make_Defining_Identifier (Loc, New_Internal_Name ('P'));
!          Subp_Index := Subp_Id;
! 
!          --  Subp_Id may not be a constant, because in the case of the RPC
!          --  receiver for an RCI package, when a call is received from a RAS
!          --  dereference, it will be assigned during subsequent processing.
! 
!          RPC_Receiver_Decls := New_List (
!            Make_Object_Declaration (Loc,
!              Defining_Identifier => Subp_Id,
!              Object_Definition   =>
!                New_Occurrence_Of (RTE (RE_Subprogram_Id), Loc),
!              Expression          =>
!                Make_Attribute_Reference (Loc,
!                  Prefix          =>
!                    New_Occurrence_Of (RTE (RE_Subprogram_Id), Loc),
!                  Attribute_Name  => Name_Input,
!                  Expressions     => New_List (
!                                       Make_Selected_Component (Loc,
!                                         Prefix        => Request,
!                                         Selector_Name => Name_Params)))));
! 
!          Stmts := New_List;
! 
!          Decl :=
!            Make_Subprogram_Body (Loc,
!              Specification              => RPC_Receiver_Spec,
!              Declarations               => RPC_Receiver_Decls,
!              Handled_Statement_Sequence =>
!                Make_Handled_Sequence_Of_Statements (Loc,
!                  Statements => Stmts));
!       end Build_RPC_Receiver_Body;
! 
!       -----------------------
!       -- Build_Stub_Target --
!       -----------------------
! 
!       function Build_Stub_Target
!         (Loc                   : Source_Ptr;
!          Decls                 : List_Id;
!          RCI_Locator           : Entity_Id;
!          Controlling_Parameter : Entity_Id) return RPC_Target
!       is
!          Target_Info : RPC_Target (PCS_Kind => Name_GARLIC_DSA);
!       begin
!          Target_Info.Partition :=
!            Make_Defining_Identifier (Loc, New_Internal_Name ('P'));
!          if Present (Controlling_Parameter) then
!             Append_To (Decls,
!               Make_Object_Declaration (Loc,
!                 Defining_Identifier => Target_Info.Partition,
!                 Constant_Present    => True,
!                 Object_Definition   =>
!                   New_Occurrence_Of (RTE (RE_Partition_ID), Loc),
! 
!                 Expression          =>
!                   Make_Selected_Component (Loc,
!                     Prefix        => Controlling_Parameter,
!                     Selector_Name => Name_Origin)));
! 
!             Target_Info.RPC_Receiver :=
!               Make_Selected_Component (Loc,
!                 Prefix        => Controlling_Parameter,
!                 Selector_Name => Name_Receiver);
! 
!          else
!             Append_To (Decls,
!               Make_Object_Declaration (Loc,
!                 Defining_Identifier => Target_Info.Partition,
!                 Constant_Present    => True,
!                 Object_Definition   =>
!                   New_Occurrence_Of (RTE (RE_Partition_ID), Loc),
! 
!                 Expression          =>
!                   Make_Function_Call (Loc,
!                     Name => Make_Selected_Component (Loc,
!                       Prefix        =>
!                         Make_Identifier (Loc, Chars (RCI_Locator)),
!                       Selector_Name =>
!                         Make_Identifier (Loc,
!                           Name_Get_Active_Partition_ID)))));
! 
!             Target_Info.RPC_Receiver :=
!               Make_Selected_Component (Loc,
!                 Prefix        =>
!                   Make_Identifier (Loc, Chars (RCI_Locator)),
!                 Selector_Name =>
!                   Make_Identifier (Loc, Name_Get_RCI_Package_Receiver));
!          end if;
!          return Target_Info;
!       end Build_Stub_Target;
! 
!       ---------------------
!       -- Build_Stub_Type --
!       ---------------------
! 
!       procedure Build_Stub_Type
!         (RACW_Type         : Entity_Id;
!          Stub_Type         : Entity_Id;
!          Stub_Type_Decl    : out Node_Id;
!          RPC_Receiver_Decl : out Node_Id)
!       is
!          Loc    : constant Source_Ptr := Sloc (Stub_Type);
!          Is_RAS : constant Boolean    := not Comes_From_Source (RACW_Type);
! 
!       begin
!          Stub_Type_Decl :=
!            Make_Full_Type_Declaration (Loc,
!              Defining_Identifier => Stub_Type,
!              Type_Definition     =>
!                Make_Record_Definition (Loc,
!                  Tagged_Present  => True,
!                  Limited_Present => True,
!                  Component_List  =>
!                    Make_Component_List (Loc,
!                      Component_Items => New_List (
! 
!                        Make_Component_Declaration (Loc,
!                          Defining_Identifier =>
!                            Make_Defining_Identifier (Loc, Name_Origin),
!                          Component_Definition =>
!                            Make_Component_Definition (Loc,
!                              Aliased_Present    => False,
!                              Subtype_Indication =>
!                                New_Occurrence_Of (
!                                  RTE (RE_Partition_ID), Loc))),
! 
!                        Make_Component_Declaration (Loc,
!                          Defining_Identifier =>
!                            Make_Defining_Identifier (Loc, Name_Receiver),
!                          Component_Definition =>
!                            Make_Component_Definition (Loc,
!                              Aliased_Present    => False,
!                              Subtype_Indication =>
!                                New_Occurrence_Of (RTE (RE_Unsigned_64), Loc))),
! 
!                        Make_Component_Declaration (Loc,
!                          Defining_Identifier =>
!                            Make_Defining_Identifier (Loc, Name_Addr),
!                          Component_Definition =>
!                            Make_Component_Definition (Loc,
!                              Aliased_Present    => False,
!                              Subtype_Indication =>
!                                New_Occurrence_Of (RTE (RE_Unsigned_64), Loc))),
! 
!                        Make_Component_Declaration (Loc,
!                          Defining_Identifier =>
!                            Make_Defining_Identifier (Loc, Name_Asynchronous),
!                          Component_Definition =>
!                            Make_Component_Definition (Loc,
!                              Aliased_Present    => False,
!                              Subtype_Indication =>
!                                New_Occurrence_Of (
!                                  Standard_Boolean, Loc)))))));
! 
!          if Is_RAS then
!             RPC_Receiver_Decl := Empty;
!          else
!             declare
!                RPC_Receiver_Request : constant Entity_Id :=
!                                         Make_Defining_Identifier (Loc, Name_R);
!             begin
!                RPC_Receiver_Decl :=
!                  Make_Subprogram_Declaration (Loc,
!                    Build_RPC_Receiver_Specification (
!                      RPC_Receiver      => Make_Defining_Identifier (Loc,
!                                             New_Internal_Name ('R')),
!                      Request_Parameter => RPC_Receiver_Request));
!             end;
!          end if;
!       end Build_Stub_Type;
! 
!       --------------------------------------
!       -- Build_Subprogram_Receiving_Stubs --
!       --------------------------------------
! 
!       function Build_Subprogram_Receiving_Stubs
!         (Vis_Decl                 : Node_Id;
!          Asynchronous             : Boolean;
!          Dynamically_Asynchronous : Boolean   := False;
!          Stub_Type                : Entity_Id := Empty;
!          RACW_Type                : Entity_Id := Empty;
!          Parent_Primitive         : Entity_Id := Empty) return Node_Id
!       is
!          Loc : constant Source_Ptr := Sloc (Vis_Decl);
! 
!          Request_Parameter : Node_Id;
!          --  ???
! 
!          Decls : constant List_Id := New_List;
!          --  All the parameters will get declared before calling the real
!          --  subprograms. Also the out parameters will be declared.
! 
!          Statements : constant List_Id := New_List;
! 
!          Extra_Formal_Statements : constant List_Id := New_List;
!          --  Statements concerning extra formal parameters
! 
!          After_Statements : constant List_Id := New_List;
!          --  Statements to be executed after the subprogram call
! 
!          Inner_Decls : List_Id := No_List;
!          --  In case of a function, the inner declarations are needed since
!          --  the result may be unconstrained.
! 
!          Excep_Handlers : List_Id := No_List;
!          Excep_Choice   : Entity_Id;
!          Excep_Code     : List_Id;
! 
!          Parameter_List : constant List_Id := New_List;
!          --  List of parameters to be passed to the subprogram
! 
!          Current_Parameter : Node_Id;
! 
!          Ordered_Parameters_List : constant List_Id :=
!                                      Build_Ordered_Parameters_List
!                                        (Specification (Vis_Decl));
! 
!          Subp_Spec : Node_Id;
!          --  Subprogram specification
! 
!          Called_Subprogram : Node_Id;
!          --  The subprogram to call
! 
!          Null_Raise_Statement : Node_Id;
! 
!          Dynamic_Async : Entity_Id;
! 
!       begin
!          if Present (RACW_Type) then
!             Called_Subprogram :=
!               New_Occurrence_Of (Parent_Primitive, Loc);
!          else
!             Called_Subprogram :=
!               New_Occurrence_Of (
!                 Defining_Unit_Name (Specification (Vis_Decl)), Loc);
!          end if;
! 
!          Request_Parameter :=
!            Make_Defining_Identifier (Loc, New_Internal_Name ('R'));
! 
!          if Dynamically_Asynchronous then
!             Dynamic_Async :=
!               Make_Defining_Identifier (Loc, New_Internal_Name ('S'));
!          else
!             Dynamic_Async := Empty;
!          end if;
! 
!          if not Asynchronous or Dynamically_Asynchronous then
! 
!             --  The first statement after the subprogram call is a statement to
!             --  writes a Null_Occurrence into the result stream.
! 
!             Null_Raise_Statement :=
!               Make_Attribute_Reference (Loc,
!                 Prefix         =>
!                   New_Occurrence_Of (RTE (RE_Exception_Occurrence), Loc),
!                 Attribute_Name => Name_Write,
!                 Expressions    => New_List (
!                                     Make_Selected_Component (Loc,
!                                       Prefix        => Request_Parameter,
!                                       Selector_Name => Name_Result),
!                   New_Occurrence_Of (RTE (RE_Null_Occurrence), Loc)));
! 
!             if Dynamically_Asynchronous then
!                Null_Raise_Statement :=
!                  Make_Implicit_If_Statement (Vis_Decl,
!                    Condition       =>
!                      Make_Op_Not (Loc, New_Occurrence_Of (Dynamic_Async, Loc)),
!                    Then_Statements => New_List (Null_Raise_Statement));
!             end if;
! 
!             Append_To (After_Statements, Null_Raise_Statement);
!          end if;
! 
!          --  Loop through every parameter and get its value from the stream. If
!          --  the parameter is unconstrained, then the parameter is read using
!          --  'Input at the point of declaration.
! 
!          Current_Parameter := First (Ordered_Parameters_List);
!          while Present (Current_Parameter) loop
!             declare
!                Etyp        : Entity_Id;
!                Constrained : Boolean;
! 
!                Object : constant Entity_Id :=
!                           Make_Defining_Identifier (Loc,
!                             New_Internal_Name ('P'));
! 
!                Expr : Node_Id   := Empty;
! 
!                Is_Controlling_Formal : constant Boolean :=
!                                          Is_RACW_Controlling_Formal
!                                            (Current_Parameter, Stub_Type);
! 
!             begin
!                Set_Ekind (Object, E_Variable);
! 
!                if Is_Controlling_Formal then
! 
!                   --  We have a controlling formal parameter. Read its address
!                   --  rather than a real object. The address is in Unsigned_64
!                   --  form.
! 
!                   Etyp := RTE (RE_Unsigned_64);
!                else
!                   Etyp := Etype (Parameter_Type (Current_Parameter));
!                end if;
! 
!                Constrained :=
!                  Is_Constrained (Etyp) or else Is_Elementary_Type (Etyp);
! 
!                if In_Present (Current_Parameter)
!                  or else not Out_Present (Current_Parameter)
!                  or else not Constrained
!                  or else Is_Controlling_Formal
!                then
!                   --  If an input parameter is contrained, then its reading is
!                   --  deferred until the beginning of the subprogram body. If
!                   --  it is unconstrained, then an expression is built for
!                   --  the object declaration and the variable is set using
!                   --  'Input instead of 'Read.
! 
!                   if Constrained and then not Is_Controlling_Formal then
!                      Append_To (Statements,
!                        Make_Attribute_Reference (Loc,
!                          Prefix         => New_Occurrence_Of (Etyp, Loc),
!                          Attribute_Name => Name_Read,
!                          Expressions    => New_List (
!                            Make_Selected_Component (Loc,
!                              Prefix        => Request_Parameter,
!                              Selector_Name => Name_Params),
!                            New_Occurrence_Of (Object, Loc))));
! 
!                   else
!                      Expr := Input_With_Tag_Check (Loc,
!                        Var_Type => Etyp,
!                        Stream   => Make_Selected_Component (Loc,
!                                      Prefix        => Request_Parameter,
!                                      Selector_Name => Name_Params));
!                      Append_To (Decls, Expr);
!                      Expr := Make_Function_Call (Loc,
!                        New_Occurrence_Of (Defining_Unit_Name
!                          (Specification (Expr)), Loc));
!                   end if;
!                end if;
! 
!                --  If we do not have to output the current parameter, then it
!                --  can well be flagged as constant. This may allow further
!                --  optimizations done by the back end.
! 
!                Append_To (Decls,
!                  Make_Object_Declaration (Loc,
!                    Defining_Identifier => Object,
!                    Constant_Present    => not Constrained
!                      and then not Out_Present (Current_Parameter),
!                    Object_Definition   =>
!                      New_Occurrence_Of (Etyp, Loc),
!                    Expression          => Expr));
! 
!                --  An out parameter may be written back using a 'Write
!                --  attribute instead of a 'Output because it has been
!                --  constrained by the parameter given to the caller. Note that
!                --  out controlling arguments in the case of a RACW are not put
!                --  back in the stream because the pointer on them has not
!                --  changed.
! 
!                if Out_Present (Current_Parameter)
!                  and then
!                    Etype (Parameter_Type (Current_Parameter)) /= Stub_Type
!                then
!                   Append_To (After_Statements,
!                     Make_Attribute_Reference (Loc,
!                       Prefix         => New_Occurrence_Of (Etyp, Loc),
!                       Attribute_Name => Name_Write,
!                       Expressions    => New_List (
!                         Make_Selected_Component (Loc,
!                           Prefix        => Request_Parameter,
!                           Selector_Name => Name_Result),
!                         New_Occurrence_Of (Object, Loc))));
!                end if;
! 
!                --  For RACW controlling formals, the Etyp of Object is always
!                --  an RACW, even if the parameter is not of an anonymous access
!                --  type. In such case, we need to dereference it at call time.
! 
!                if Is_Controlling_Formal then
!                   if Nkind (Parameter_Type (Current_Parameter)) /=
!                     N_Access_Definition
!                   then
!                      Append_To (Parameter_List,
!                        Make_Parameter_Association (Loc,
!                          Selector_Name             =>
!                            New_Occurrence_Of (
!                              Defining_Identifier (Current_Parameter), Loc),
!                          Explicit_Actual_Parameter =>
!                            Make_Explicit_Dereference (Loc,
!                              Unchecked_Convert_To (RACW_Type,
!                                OK_Convert_To (RTE (RE_Address),
!                                  New_Occurrence_Of (Object, Loc))))));
! 
!                   else
!                      Append_To (Parameter_List,
!                        Make_Parameter_Association (Loc,
!                          Selector_Name             =>
!                            New_Occurrence_Of (
!                              Defining_Identifier (Current_Parameter), Loc),
!                          Explicit_Actual_Parameter =>
!                            Unchecked_Convert_To (RACW_Type,
!                              OK_Convert_To (RTE (RE_Address),
!                                New_Occurrence_Of (Object, Loc)))));
!                   end if;
! 
!                else
!                   Append_To (Parameter_List,
!                     Make_Parameter_Association (Loc,
!                       Selector_Name             =>
!                         New_Occurrence_Of (
!                           Defining_Identifier (Current_Parameter), Loc),
!                       Explicit_Actual_Parameter =>
!                         New_Occurrence_Of (Object, Loc)));
!                end if;
! 
!                --  If the current parameter needs an extra formal, then read it
!                --  from the stream and set the corresponding semantic field in
!                --  the variable. If the kind of the parameter identifier is
!                --  E_Void, then this is a compiler generated parameter that
!                --  doesn't need an extra constrained status.
! 
!                --  The case of Extra_Accessibility should also be handled ???
! 
!                if Nkind (Parameter_Type (Current_Parameter)) /=
!                                                          N_Access_Definition
!                  and then
!                    Ekind (Defining_Identifier (Current_Parameter)) /= E_Void
!                  and then
!                    Present (Extra_Constrained
!                      (Defining_Identifier (Current_Parameter)))
!                then
!                   declare
!                      Extra_Parameter : constant Entity_Id :=
!                                          Extra_Constrained
!                                            (Defining_Identifier
!                                              (Current_Parameter));
! 
!                      Formal_Entity : constant Entity_Id :=
!                                        Make_Defining_Identifier
!                                            (Loc, Chars (Extra_Parameter));
! 
!                      Formal_Type : constant Entity_Id :=
!                                      Etype (Extra_Parameter);
! 
!                   begin
!                      Append_To (Decls,
!                        Make_Object_Declaration (Loc,
!                          Defining_Identifier => Formal_Entity,
!                          Object_Definition   =>
!                            New_Occurrence_Of (Formal_Type, Loc)));
! 
!                      Append_To (Extra_Formal_Statements,
!                        Make_Attribute_Reference (Loc,
!                          Prefix         => New_Occurrence_Of (
!                                              Formal_Type, Loc),
!                          Attribute_Name => Name_Read,
!                          Expressions    => New_List (
!                            Make_Selected_Component (Loc,
!                              Prefix        => Request_Parameter,
!                              Selector_Name => Name_Params),
!                            New_Occurrence_Of (Formal_Entity, Loc))));
!                      Set_Extra_Constrained (Object, Formal_Entity);
!                   end;
!                end if;
!             end;
! 
!             Next (Current_Parameter);
!          end loop;
! 
!          --  Append the formal statements list at the end of regular statements
! 
!          Append_List_To (Statements, Extra_Formal_Statements);
! 
!          if Nkind (Specification (Vis_Decl)) = N_Function_Specification then
! 
!             --  The remote subprogram is a function. We build an inner block to
!             --  be able to hold a potentially unconstrained result in a
!             --  variable.
! 
!             declare
!                Etyp   : constant Entity_Id :=
!                           Etype (Subtype_Mark (Specification (Vis_Decl)));
!                Result : constant Node_Id   :=
!                           Make_Defining_Identifier (Loc,
!                              New_Internal_Name ('R'));
!             begin
!                Inner_Decls := New_List (
!                  Make_Object_Declaration (Loc,
!                    Defining_Identifier => Result,
!                    Constant_Present    => True,
!                    Object_Definition   => New_Occurrence_Of (Etyp, Loc),
!                    Expression          =>
!                      Make_Function_Call (Loc,
!                        Name                   => Called_Subprogram,
!                        Parameter_Associations => Parameter_List)));
! 
!                Append_To (After_Statements,
!                  Make_Attribute_Reference (Loc,
!                    Prefix         => New_Occurrence_Of (Etyp, Loc),
!                    Attribute_Name => Name_Output,
!                    Expressions    => New_List (
!                      Make_Selected_Component (Loc,
!                        Prefix        => Request_Parameter,
!                        Selector_Name => Name_Result),
!                      New_Occurrence_Of (Result, Loc))));
!             end;
! 
!             Append_To (Statements,
!               Make_Block_Statement (Loc,
!                 Declarations               => Inner_Decls,
!                 Handled_Statement_Sequence =>
!                   Make_Handled_Sequence_Of_Statements (Loc,
!                     Statements => After_Statements)));
! 
!          else
!             --  The remote subprogram is a procedure. We do not need any inner
!             --  block in this case.
! 
!             if Dynamically_Asynchronous then
!                Append_To (Decls,
!                  Make_Object_Declaration (Loc,
!                    Defining_Identifier => Dynamic_Async,
!                    Object_Definition   =>
!                      New_Occurrence_Of (Standard_Boolean, Loc)));
! 
!                Append_To (Statements,
!                  Make_Attribute_Reference (Loc,
!                    Prefix         => New_Occurrence_Of (Standard_Boolean, Loc),
!                    Attribute_Name => Name_Read,
!                    Expressions    => New_List (
!                      Make_Selected_Component (Loc,
!                        Prefix        => Request_Parameter,
!                        Selector_Name => Name_Params),
!                      New_Occurrence_Of (Dynamic_Async, Loc))));
!             end if;
! 
!             Append_To (Statements,
!               Make_Procedure_Call_Statement (Loc,
!                 Name                   => Called_Subprogram,
!                 Parameter_Associations => Parameter_List));
! 
!             Append_List_To (Statements, After_Statements);
!          end if;
! 
!          if Asynchronous and then not Dynamically_Asynchronous then
! 
!             --  For an asynchronous procedure, add a null exception handler
! 
!             Excep_Handlers := New_List (
!               Make_Exception_Handler (Loc,
!                 Exception_Choices => New_List (Make_Others_Choice (Loc)),
!                 Statements        => New_List (Make_Null_Statement (Loc))));
! 
!          else
!             --  In the other cases, if an exception is raised, then the
!             --  exception occurrence is copied into the output stream and
!             --  no other output parameter is written.
! 
!             Excep_Choice :=
!               Make_Defining_Identifier (Loc, New_Internal_Name ('E'));
! 
!             Excep_Code := New_List (
!               Make_Attribute_Reference (Loc,
!                 Prefix         =>
!                   New_Occurrence_Of (RTE (RE_Exception_Occurrence), Loc),
!                 Attribute_Name => Name_Write,
!                 Expressions    => New_List (
!                                     Make_Selected_Component (Loc,
!                                       Prefix        => Request_Parameter,
!                                       Selector_Name => Name_Result),
!                                     New_Occurrence_Of (Excep_Choice, Loc))));
! 
!             if Dynamically_Asynchronous then
!                Excep_Code := New_List (
!                  Make_Implicit_If_Statement (Vis_Decl,
!                    Condition       => Make_Op_Not (Loc,
!                      New_Occurrence_Of (Dynamic_Async, Loc)),
!                    Then_Statements => Excep_Code));
!             end if;
! 
!             Excep_Handlers := New_List (
!               Make_Exception_Handler (Loc,
!                 Choice_Parameter   => Excep_Choice,
!                 Exception_Choices  => New_List (Make_Others_Choice (Loc)),
!                 Statements         => Excep_Code));
! 
!          end if;
! 
!          Subp_Spec :=
!            Make_Procedure_Specification (Loc,
!              Defining_Unit_Name       =>
!                Make_Defining_Identifier (Loc, New_Internal_Name ('F')),
! 
!              Parameter_Specifications => New_List (
!                Make_Parameter_Specification (Loc,
!                  Defining_Identifier => Request_Parameter,
!                  Parameter_Type      =>
!                    New_Occurrence_Of (RTE (RE_Request_Access), Loc))));
! 
!          return
!            Make_Subprogram_Body (Loc,
!              Specification              => Subp_Spec,
!              Declarations               => Decls,
!              Handled_Statement_Sequence =>
!                Make_Handled_Sequence_Of_Statements (Loc,
!                  Statements         => Statements,
!                  Exception_Handlers => Excep_Handlers));
!       end Build_Subprogram_Receiving_Stubs;
! 
!       ------------
!       -- Result --
!       ------------
! 
!       function Result return Node_Id is
!       begin
!          return Make_Identifier (Loc, Name_V);
!       end Result;
! 
!       ----------------------
!       -- Stream_Parameter --
!       ----------------------
! 
!       function Stream_Parameter return Node_Id is
!       begin
!          return Make_Identifier (Loc, Name_S);
!       end Stream_Parameter;
! 
!    end GARLIC_Support;
! 
!    -----------------------------
!    -- Make_Selected_Component --
!    -----------------------------
  
+    function Make_Selected_Component
+      (Loc           : Source_Ptr;
+       Prefix        : Entity_Id;
+       Selector_Name : Name_Id) return Node_Id
+    is
     begin
!       return Make_Selected_Component (Loc,
!                Prefix        => New_Occurrence_Of (Prefix, Loc),
!                Selector_Name => Make_Identifier (Loc, Selector_Name));
!    end Make_Selected_Component;
  
!    ------------------
!    -- Get_PCS_Name --
!    ------------------
  
!    function Get_PCS_Name return PCS_Names is
!       PCS_Name : constant PCS_Names :=
!                    Chars (Entity (Expression
!                                     (Parent (RTE (RE_DSA_Implementation)))));
!    begin
!       return PCS_Name;
!    end Get_PCS_Name;
  
!    -----------------------
!    -- Get_Subprogram_Id --
!    -----------------------
  
!    function Get_Subprogram_Id (Def : Entity_Id) return String_Id is
!    begin
!       return Get_Subprogram_Ids (Def).Str_Identifier;
!    end Get_Subprogram_Id;
  
!    -----------------------
!    -- Get_Subprogram_Id --
!    -----------------------
! 
!    function Get_Subprogram_Id (Def : Entity_Id) return Int is
     begin
!       return Get_Subprogram_Ids (Def).Int_Identifier;
!    end Get_Subprogram_Id;
! 
!    ------------------------
!    -- Get_Subprogram_Ids --
!    ------------------------
! 
!    function Get_Subprogram_Ids
!      (Def : Entity_Id) return Subprogram_Identifiers
!    is
!       Result : Subprogram_Identifiers :=
!                  Subprogram_Identifier_Table.Get (Def);
! 
!       Current_Declaration : Node_Id;
!       Current_Subp        : Entity_Id;
!       Current_Subp_Str    : String_Id;
!       Current_Subp_Number : Int := First_RCI_Subprogram_Id;
! 
!    begin
!       if Result.Str_Identifier = No_String then
! 
!          --  We are looking up this subprogram's identifier outside of the
!          --  context of generating calling or receiving stubs. Hence we are
!          --  processing an 'Access attribute_reference for an RCI subprogram,
!          --  for the purpose of obtaining a RAS value.
! 
!          pragma Assert
!            (Is_Remote_Call_Interface (Scope (Def))
!               and then
!                (Nkind (Parent (Def)) = N_Procedure_Specification
!                   or else
!                 Nkind (Parent (Def)) = N_Function_Specification));
! 
!          Current_Declaration :=
!            First (Visible_Declarations
!              (Package_Specification_Of_Scope (Scope (Def))));
!          while Present (Current_Declaration) loop
!             if Nkind (Current_Declaration) = N_Subprogram_Declaration
!               and then Comes_From_Source (Current_Declaration)
!             then
!                Current_Subp := Defining_Unit_Name (Specification (
!                  Current_Declaration));
!                Assign_Subprogram_Identifier
!                  (Current_Subp, Current_Subp_Number, Current_Subp_Str);
! 
!                if Current_Subp = Def then
!                   Result := (Current_Subp_Str, Current_Subp_Number);
!                end if;
! 
!                Current_Subp_Number := Current_Subp_Number + 1;
!             end if;
! 
!             Next (Current_Declaration);
!          end loop;
!       end if;
! 
!       pragma Assert (Result.Str_Identifier /= No_String);
!       return Result;
!    end Get_Subprogram_Ids;
  
     ----------
     -- Hash --
*************** package body Exp_Dist is
*** 3478,3483 ****
--- 4881,4891 ----
        return Hash_Index (Natural (F) mod Positive (Hash_Index'Last + 1));
     end Hash;
  
+    function Hash (F : Name_Id) return Hash_Index is
+    begin
+       return Hash_Index (Natural (F) mod Positive (Hash_Index'Last + 1));
+    end Hash;
+ 
     --------------------------
     -- Input_With_Tag_Check --
     --------------------------
*************** package body Exp_Dist is
*** 3485,3492 ****
     function Input_With_Tag_Check
       (Loc      : Source_Ptr;
        Var_Type : Entity_Id;
!       Stream   : Entity_Id)
!       return     Node_Id
     is
     begin
        return
--- 4893,4899 ----
     function Input_With_Tag_Check
       (Loc      : Source_Ptr;
        Var_Type : Entity_Id;
!       Stream   : Node_Id) return Node_Id
     is
     begin
        return
*************** package body Exp_Dist is
*** 3504,3510 ****
                      Prefix         => New_Occurrence_Of (Var_Type, Loc),
                      Attribute_Name => Name_Input,
                      Expressions    =>
!                       New_List (New_Occurrence_Of (Stream, Loc))))))));
     end Input_With_Tag_Check;
  
     --------------------------------
--- 4911,4917 ----
                      Prefix         => New_Occurrence_Of (Var_Type, Loc),
                      Attribute_Name => Name_Input,
                      Expressions    =>
!                       New_List (Stream)))))));
     end Input_With_Tag_Check;
  
     --------------------------------
*************** package body Exp_Dist is
*** 3513,3520 ****
  
     function Is_RACW_Controlling_Formal
       (Parameter : Node_Id;
!       Stub_Type : Entity_Id)
!       return      Boolean
     is
        Typ : Entity_Id;
  
--- 4920,4926 ----
  
     function Is_RACW_Controlling_Formal
       (Parameter : Node_Id;
!       Stub_Type : Entity_Id) return Boolean
     is
        Typ : Entity_Id;
  
*************** package body Exp_Dist is
*** 3573,3579 ****
  
     function Need_Extra_Constrained (Parameter : Node_Id) return Boolean is
        Etyp : constant Entity_Id := Etype (Parameter_Type (Parameter));
- 
     begin
        return Out_Present (Parameter)
          and then Has_Discriminants (Etyp)
--- 4979,4984 ----
*************** package body Exp_Dist is
*** 3589,3601 ****
       (Loc    : Source_Ptr;
        Stream : Node_Id;
        Object : Entity_Id;
!       Etyp   : Entity_Id := Empty)
!       return   Node_Id
     is
        Typ : Entity_Id;
  
     begin
!       if Etyp /= Empty then
           Typ := Etyp;
        else
           Typ := Etype (Object);
--- 4994,5005 ----
       (Loc    : Source_Ptr;
        Stream : Node_Id;
        Object : Entity_Id;
!       Etyp   : Entity_Id := Empty) return Node_Id
     is
        Typ : Entity_Id;
  
     begin
!       if Present (Etyp) then
           Typ := Etyp;
        else
           Typ := Etype (Object);
*************** package body Exp_Dist is
*** 3616,3623 ****
       (Loc    : Source_Ptr;
        Stream : Entity_Id;
        Object : Node_Id;
!       Etyp   : Entity_Id)
!       return   Node_Id
     is
        Write_Attribute : Name_Id := Name_Write;
  
--- 5020,5026 ----
       (Loc    : Source_Ptr;
        Stream : Entity_Id;
        Object : Node_Id;
!       Etyp   : Entity_Id) return Node_Id
     is
        Write_Attribute : Name_Id := Name_Write;
  
*************** package body Exp_Dist is
*** 3645,3652 ****
       (Loc    : Source_Ptr;
        Stream : Node_Id;
        Object : Node_Id;
!       Etyp   : Entity_Id)
!       return   Node_Id
     is
        Write_Attribute : Name_Id := Name_Write;
  
--- 5048,5054 ----
       (Loc    : Source_Ptr;
        Stream : Node_Id;
        Object : Node_Id;
!       Etyp   : Entity_Id) return Node_Id
     is
        Write_Attribute : Name_Id := Name_Write;
  
*************** package body Exp_Dist is
*** 3664,3679 ****
              Object));
     end Pack_Node_Into_Stream_Access;
  
     -------------------------------
     -- RACW_Type_Is_Asynchronous --
     -------------------------------
  
!    procedure RACW_Type_Is_Asynchronous (RACW_Type : in Entity_Id) is
!       N : constant Node_Id := Asynchronous_Flags_Table.Get (RACW_Type);
!       pragma Assert (N /= Empty);
! 
     begin
!       Replace (N, New_Occurrence_Of (Standard_True, Sloc (N)));
     end RACW_Type_Is_Asynchronous;
  
     -------------------------
--- 5066,10699 ----
              Object));
     end Pack_Node_Into_Stream_Access;
  
+    ---------------------
+    -- PolyORB_Support --
+    ---------------------
+ 
+    package body PolyORB_Support is
+ 
+       --  Local subprograms
+ 
+       procedure Add_RACW_Read_Attribute
+         (RACW_Type        : Entity_Id;
+          Stub_Type        : Entity_Id;
+          Stub_Type_Access : Entity_Id;
+          Declarations     : List_Id);
+       --  Add Read attribute in Decls for the RACW type. The Read attribute
+       --  is added right after the RACW_Type declaration while the body is
+       --  inserted after Declarations.
+ 
+       procedure Add_RACW_Write_Attribute
+         (RACW_Type        : Entity_Id;
+          Stub_Type        : Entity_Id;
+          Stub_Type_Access : Entity_Id;
+          Declarations     : List_Id);
+       --  Same thing for the Write attribute
+ 
+       procedure Add_RACW_From_Any
+         (RACW_Type        : Entity_Id;
+          Stub_Type        : Entity_Id;
+          Stub_Type_Access : Entity_Id;
+          Declarations     : List_Id);
+       --  Add the From_Any TSS for this RACW type
+ 
+       procedure Add_RACW_To_Any
+         (Designated_Type  : Entity_Id;
+          RACW_Type        : Entity_Id;
+          Stub_Type        : Entity_Id;
+          Stub_Type_Access : Entity_Id;
+          Declarations     : List_Id);
+       --  Add the To_Any TSS for this RACW type
+ 
+       procedure Add_RACW_TypeCode
+         (Designated_Type : Entity_Id;
+          RACW_Type       : Entity_Id;
+          Declarations    : List_Id);
+       --  Add the TypeCode TSS for this RACW type
+ 
+       procedure Add_RAS_From_Any
+         (RAS_Type     : Entity_Id;
+          Declarations : List_Id);
+       --  Add the From_Any TSS for this RAS type
+ 
+       procedure Add_RAS_To_Any
+         (RAS_Type     : Entity_Id;
+          Declarations : List_Id);
+       --  Add the To_Any TSS for this RAS type
+ 
+       procedure Add_RAS_TypeCode
+         (RAS_Type     : Entity_Id;
+          Declarations : List_Id);
+       --  Add the TypeCode TSS for this RAS type
+ 
+       procedure Add_RAS_Access_TSS (N : Node_Id);
+       --  Add a subprogram body for RAS Access TSS
+ 
+       -------------------------------------
+       -- Add_Obj_RPC_Receiver_Completion --
+       -------------------------------------
+ 
+       procedure Add_Obj_RPC_Receiver_Completion
+         (Loc           : Source_Ptr;
+          Decls         : List_Id;
+          RPC_Receiver  : Entity_Id;
+          Stub_Elements : Stub_Structure)
+       is
+          Desig : constant Entity_Id :=
+            Etype (Designated_Type (Stub_Elements.RACW_Type));
+       begin
+          Append_To (Decls,
+            Make_Procedure_Call_Statement (Loc,
+               Name =>
+                 New_Occurrence_Of (
+                   RTE (RE_Register_Obj_Receiving_Stub), Loc),
+ 
+                 Parameter_Associations => New_List (
+ 
+                --  Name
+ 
+                 Make_String_Literal (Loc,
+                   Full_Qualified_Name (Desig)),
+ 
+                --  Handler
+ 
+                 Make_Attribute_Reference (Loc,
+                   Prefix =>
+                     New_Occurrence_Of (
+                       Defining_Unit_Name (Parent (RPC_Receiver)), Loc),
+                   Attribute_Name =>
+                     Name_Access),
+ 
+                --  Receiver
+ 
+                 Make_Attribute_Reference (Loc,
+                   Prefix =>
+                     New_Occurrence_Of (
+                       Defining_Identifier (
+                         Stub_Elements.RPC_Receiver_Decl), Loc),
+                   Attribute_Name =>
+                     Name_Access))));
+       end Add_Obj_RPC_Receiver_Completion;
+ 
+       -----------------------
+       -- Add_RACW_Features --
+       -----------------------
+ 
+       procedure Add_RACW_Features
+         (RACW_Type         : Entity_Id;
+          Desig             : Entity_Id;
+          Stub_Type         : Entity_Id;
+          Stub_Type_Access  : Entity_Id;
+          RPC_Receiver_Decl : Node_Id;
+          Declarations      : List_Id)
+       is
+          pragma Warnings (Off);
+          pragma Unreferenced (RPC_Receiver_Decl);
+          pragma Warnings (On);
+ 
+       begin
+          Add_RACW_From_Any
+            (RACW_Type           => RACW_Type,
+             Stub_Type           => Stub_Type,
+             Stub_Type_Access    => Stub_Type_Access,
+             Declarations        => Declarations);
+ 
+          Add_RACW_To_Any
+            (Designated_Type     => Desig,
+             RACW_Type           => RACW_Type,
+             Stub_Type           => Stub_Type,
+             Stub_Type_Access    => Stub_Type_Access,
+             Declarations        => Declarations);
+ 
+          --  In the PolyORB case, the RACW 'Read and 'Write attributes
+          --  are implemented in terms of the From_Any and To_Any TSSs,
+          --  so these TSSs must be expanded before 'Read and 'Write.
+ 
+          Add_RACW_Write_Attribute
+            (RACW_Type           => RACW_Type,
+             Stub_Type           => Stub_Type,
+             Stub_Type_Access    => Stub_Type_Access,
+             Declarations        => Declarations);
+ 
+          Add_RACW_Read_Attribute
+            (RACW_Type           => RACW_Type,
+             Stub_Type           => Stub_Type,
+             Stub_Type_Access    => Stub_Type_Access,
+             Declarations        => Declarations);
+ 
+          Add_RACW_TypeCode
+            (Designated_Type     => Desig,
+             RACW_Type           => RACW_Type,
+             Declarations        => Declarations);
+       end Add_RACW_Features;
+ 
+       -----------------------
+       -- Add_RACW_From_Any --
+       -----------------------
+ 
+       procedure Add_RACW_From_Any
+         (RACW_Type        : Entity_Id;
+          Stub_Type        : Entity_Id;
+          Stub_Type_Access : Entity_Id;
+          Declarations     : List_Id)
+       is
+          Loc    : constant Source_Ptr := Sloc (RACW_Type);
+          Is_RAS : constant Boolean := not Comes_From_Source (RACW_Type);
+ 
+          Fnam   : constant Entity_Id :=
+                     Make_Defining_Identifier (Loc, New_Internal_Name ('F'));
+ 
+          Func_Spec : Node_Id;
+          Func_Decl : Node_Id;
+          Func_Body : Node_Id;
+ 
+          Decls            : List_Id;
+          Statements       : List_Id;
+          Stub_Statements  : List_Id;
+          Local_Statements : List_Id;
+          --  Various parts of the subprogram
+ 
+          Any_Parameter  : constant Entity_Id :=
+                             Make_Defining_Identifier (Loc, Name_A);
+          Reference      : constant Entity_Id :=
+                             Make_Defining_Identifier
+                               (Loc, New_Internal_Name ('R'));
+          Is_Local       : constant Entity_Id  :=
+                             Make_Defining_Identifier
+                               (Loc, New_Internal_Name ('L'));
+          Addr           : constant Entity_Id  :=
+                             Make_Defining_Identifier
+                               (Loc, New_Internal_Name ('A'));
+          Local_Stub     : constant Entity_Id  :=
+                             Make_Defining_Identifier
+                               (Loc, New_Internal_Name ('L'));
+          Stubbed_Result : constant Entity_Id  :=
+                             Make_Defining_Identifier
+                               (Loc, New_Internal_Name ('S'));
+ 
+          Stub_Condition : Node_Id;
+          --  An expression that determines whether we create a stub for the
+          --  newly-unpacked RACW. Normally we create a stub only for remote
+          --  objects, but in the case of an RACW used to implement a RAS,
+          --  we also create a stub for local subprograms if a pragma
+          --  All_Calls_Remote applies.
+ 
+          Asynchronous_Flag : constant Entity_Id :=
+                                Asynchronous_Flags_Table.Get (RACW_Type);
+          --  The flag object declared in Add_RACW_Asynchronous_Flag
+ 
+       begin
+          --  Object declarations
+ 
+          Decls := New_List (
+            Make_Object_Declaration (Loc,
+              Defining_Identifier =>
+                Reference,
+              Object_Definition =>
+                New_Occurrence_Of (RTE (RE_Object_Ref), Loc),
+              Expression =>
+                Make_Function_Call (Loc,
+                  Name =>
+                    New_Occurrence_Of (RTE (RE_FA_ObjRef), Loc),
+                  Parameter_Associations => New_List (
+                    New_Occurrence_Of (Any_Parameter, Loc)))),
+ 
+            Make_Object_Declaration (Loc,
+              Defining_Identifier => Local_Stub,
+              Aliased_Present     => True,
+              Object_Definition   => New_Occurrence_Of (Stub_Type, Loc)),
+ 
+            Make_Object_Declaration (Loc,
+              Defining_Identifier => Stubbed_Result,
+              Object_Definition   =>
+                New_Occurrence_Of (Stub_Type_Access, Loc),
+              Expression          =>
+                Make_Attribute_Reference (Loc,
+                  Prefix =>
+                    New_Occurrence_Of (Local_Stub, Loc),
+                  Attribute_Name =>
+                    Name_Unchecked_Access)),
+ 
+            Make_Object_Declaration (Loc,
+              Defining_Identifier => Is_Local,
+              Object_Definition   =>
+                New_Occurrence_Of (Standard_Boolean, Loc)),
+ 
+            Make_Object_Declaration (Loc,
+              Defining_Identifier => Addr,
+              Object_Definition =>
+                New_Occurrence_Of (RTE (RE_Address), Loc)));
+ 
+          --  Build_Get_Unique_RP_Call needs the type of Stubbed_Result
+ 
+          Set_Etype (Stubbed_Result, Stub_Type_Access);
+ 
+          --  If the ref Is_Nil, return a null pointer
+ 
+          Statements := New_List (
+            Make_Implicit_If_Statement (RACW_Type,
+              Condition =>
+                Make_Function_Call (Loc,
+                  Name =>
+                    New_Occurrence_Of (RTE (RE_Is_Nil), Loc),
+                  Parameter_Associations => New_List (
+                    New_Occurrence_Of (Reference, Loc))),
+              Then_Statements => New_List (
+                Make_Return_Statement (Loc,
+                  Expression =>
+                    Make_Null (Loc)))));
+ 
+          Append_To (Statements,
+            Make_Procedure_Call_Statement (Loc,
+              Name =>
+                New_Occurrence_Of (RTE (RE_Get_Local_Address), Loc),
+              Parameter_Associations => New_List (
+                New_Occurrence_Of (Reference, Loc),
+                New_Occurrence_Of (Is_Local, Loc),
+                New_Occurrence_Of (Addr, Loc))));
+ 
+          --  If the object is located on another partition, then a stub object
+          --  will be created with all the information needed to rebuild the
+          --  real object at the other end. This stanza is always used in the
+          --  case of RAS types, for which a stub is required even for local
+          --  subprograms.
+ 
+          Stub_Statements := New_List (
+            Make_Assignment_Statement (Loc,
+              Name       => Make_Selected_Component (Loc,
+                Prefix        => Stubbed_Result,
+                Selector_Name => Name_Target),
+              Expression =>
+                Make_Function_Call (Loc,
+                  Name =>
+                    New_Occurrence_Of (RTE (RE_Entity_Of), Loc),
+                  Parameter_Associations => New_List (
+                    New_Occurrence_Of (Reference, Loc)))),
+ 
+            Make_Procedure_Call_Statement (Loc,
+              Name =>
+                New_Occurrence_Of (RTE (RE_Inc_Usage), Loc),
+              Parameter_Associations => New_List (
+                Make_Selected_Component (Loc,
+                  Prefix        => Stubbed_Result,
+                  Selector_Name => Name_Target))),
+ 
+            Make_Assignment_Statement (Loc,
+              Name       => Make_Selected_Component (Loc,
+                Prefix        => Stubbed_Result,
+                Selector_Name => Name_Asynchronous),
+              Expression =>
+                New_Occurrence_Of (Asynchronous_Flag, Loc)));
+ 
+          --  ??? Issue with asynchronous calls here: the Asynchronous
+          --  flag is set on the stub type if, and only if, the RACW type
+          --  has a pragma Asynchronous. This is incorrect for RACWs that
+          --  implement RAS types, because in that case the /designated
+          --  subprogram/ (not the type) might be asynchronous, and
+          --  that causes the stub to need to be asynchronous too.
+          --  A solution is to transport a RAS as a struct containing
+          --  a RACW and an asynchronous flag, and to properly alter
+          --  the Asynchronous component in the stub type in the RAS's
+          --  _From_Any TSS.
+ 
+          Append_List_To (Stub_Statements,
+            Build_Get_Unique_RP_Call (Loc, Stubbed_Result, Stub_Type));
+ 
+          --  Distinguish between the local and remote cases, and execute the
+          --  appropriate piece of code.
+ 
+          Stub_Condition := New_Occurrence_Of (Is_Local, Loc);
+ 
+          if Is_RAS then
+             Stub_Condition := Make_And_Then (Loc,
+               Left_Opnd  =>
+                 Stub_Condition,
+               Right_Opnd =>
+                 Make_Selected_Component (Loc,
+                   Prefix =>
+                     Unchecked_Convert_To (
+                       RTE (RE_RAS_Proxy_Type_Access),
+                       New_Occurrence_Of (Addr, Loc)),
+                   Selector_Name =>
+                     Make_Identifier (Loc,
+                       Name_All_Calls_Remote)));
+          end if;
+ 
+          Local_Statements := New_List (
+            Make_Return_Statement (Loc,
+              Expression =>
+                Unchecked_Convert_To (RACW_Type,
+                  New_Occurrence_Of (Addr, Loc))));
+ 
+          Append_To (Statements,
+            Make_Implicit_If_Statement (RACW_Type,
+              Condition =>
+                Stub_Condition,
+              Then_Statements => Local_Statements,
+              Else_Statements => Stub_Statements));
+ 
+          Append_To (Statements,
+            Make_Return_Statement (Loc,
+              Expression => Unchecked_Convert_To (RACW_Type,
+                New_Occurrence_Of (Stubbed_Result, Loc))));
+ 
+          Func_Spec :=
+            Make_Function_Specification (Loc,
+              Defining_Unit_Name =>
+                Fnam,
+              Parameter_Specifications => New_List (
+                Make_Parameter_Specification (Loc,
+                  Defining_Identifier =>
+                    Any_Parameter,
+                  Parameter_Type =>
+                    New_Occurrence_Of (RTE (RE_Any), Loc))),
+              Subtype_Mark => New_Occurrence_Of (RACW_Type, Loc));
+ 
+          --  NOTE: The usage occurrences of RACW_Parameter must
+          --  refer to the entity in the declaration spec, not those
+          --  of the body spec.
+ 
+          Func_Decl := Make_Subprogram_Declaration (Loc, Func_Spec);
+ 
+          Func_Body :=
+            Make_Subprogram_Body (Loc,
+              Specification              =>
+                Copy_Specification (Loc, Func_Spec),
+              Declarations               => Decls,
+              Handled_Statement_Sequence =>
+                Make_Handled_Sequence_Of_Statements (Loc,
+                  Statements => Statements));
+ 
+          Insert_After (Declaration_Node (RACW_Type), Func_Decl);
+          Append_To (Declarations, Func_Body);
+ 
+          Set_Renaming_TSS (RACW_Type, Fnam, Name_uFrom_Any);
+       end Add_RACW_From_Any;
+ 
+       -----------------------------
+       -- Add_RACW_Read_Attribute --
+       -----------------------------
+ 
+       procedure Add_RACW_Read_Attribute
+         (RACW_Type        : Entity_Id;
+          Stub_Type        : Entity_Id;
+          Stub_Type_Access : Entity_Id;
+          Declarations     : List_Id)
+       is
+          pragma Warnings (Off);
+          pragma Unreferenced (Stub_Type, Stub_Type_Access);
+          pragma Warnings (On);
+          Loc : constant Source_Ptr := Sloc (RACW_Type);
+ 
+          Proc_Decl : Node_Id;
+          Attr_Decl : Node_Id;
+ 
+          Body_Node : Node_Id;
+ 
+          Decls             : List_Id;
+          Statements        : List_Id;
+          --  Various parts of the procedure
+ 
+          Procedure_Name    : constant Name_Id   :=
+                                New_Internal_Name ('R');
+          Source_Ref        : constant Entity_Id :=
+                                Make_Defining_Identifier
+                                  (Loc, New_Internal_Name ('R'));
+          Asynchronous_Flag : constant Entity_Id :=
+                                Asynchronous_Flags_Table.Get (RACW_Type);
+          pragma Assert (Present (Asynchronous_Flag));
+ 
+          function Stream_Parameter return Node_Id;
+          function Result return Node_Id;
+          --  Functions to create occurrences of the formal parameter names
+ 
+          ------------
+          -- Result --
+          ------------
+ 
+          function Result return Node_Id is
+          begin
+             return Make_Identifier (Loc, Name_V);
+          end Result;
+ 
+          ----------------------
+          -- Stream_Parameter --
+          ----------------------
+ 
+          function Stream_Parameter return Node_Id is
+          begin
+             return Make_Identifier (Loc, Name_S);
+          end Stream_Parameter;
+ 
+       --  Start of processing for Add_RACW_Read_Attribute
+ 
+       begin
+          --  Generate object declarations
+ 
+          Decls := New_List (
+            Make_Object_Declaration (Loc,
+              Defining_Identifier => Source_Ref,
+              Object_Definition   =>
+                New_Occurrence_Of (RTE (RE_Object_Ref), Loc)));
+ 
+          Statements := New_List (
+            Make_Attribute_Reference (Loc,
+              Prefix         =>
+                New_Occurrence_Of (RTE (RE_Object_Ref), Loc),
+              Attribute_Name => Name_Read,
+              Expressions    => New_List (
+                Stream_Parameter,
+                New_Occurrence_Of (Source_Ref, Loc))),
+            Make_Assignment_Statement (Loc,
+              Name =>
+                Result,
+              Expression =>
+                PolyORB_Support.Helpers.Build_From_Any_Call (
+                  RACW_Type,
+                  Make_Function_Call (Loc,
+                    Name =>
+                      New_Occurrence_Of (RTE (RE_TA_ObjRef), Loc),
+                    Parameter_Associations => New_List (
+                      New_Occurrence_Of (Source_Ref, Loc))),
+                  Decls)));
+ 
+          Build_Stream_Procedure
+            (Loc, RACW_Type, Body_Node,
+             Make_Defining_Identifier (Loc, Procedure_Name),
+             Statements, Outp => True);
+          Set_Declarations (Body_Node, Decls);
+ 
+          Proc_Decl := Make_Subprogram_Declaration (Loc,
+            Copy_Specification (Loc, Specification (Body_Node)));
+ 
+          Attr_Decl :=
+            Make_Attribute_Definition_Clause (Loc,
+              Name       => New_Occurrence_Of (RACW_Type, Loc),
+              Chars      => Name_Read,
+              Expression =>
+                New_Occurrence_Of (
+                  Defining_Unit_Name (Specification (Proc_Decl)), Loc));
+ 
+          Insert_After (Declaration_Node (RACW_Type), Proc_Decl);
+          Insert_After (Proc_Decl, Attr_Decl);
+          Append_To (Declarations, Body_Node);
+       end Add_RACW_Read_Attribute;
+ 
+       ---------------------
+       -- Add_RACW_To_Any --
+       ---------------------
+ 
+       procedure Add_RACW_To_Any
+         (Designated_Type  : Entity_Id;
+          RACW_Type        : Entity_Id;
+          Stub_Type        : Entity_Id;
+          Stub_Type_Access : Entity_Id;
+          Declarations     : List_Id)
+       is
+          Loc : constant Source_Ptr := Sloc (RACW_Type);
+ 
+          Is_RAS : constant Boolean := not Comes_From_Source (RACW_Type);
+ 
+          Fnam : Entity_Id;
+ 
+          Stub_Elements : constant Stub_Structure :=
+            Stubs_Table.Get (Designated_Type);
+          pragma Assert (Stub_Elements /= Empty_Stub_Structure);
+ 
+          Func_Spec : Node_Id;
+          Func_Decl : Node_Id;
+          Func_Body : Node_Id;
+ 
+          Decls             : List_Id;
+          Statements        : List_Id;
+          Null_Statements   : List_Id;
+          Local_Statements  : List_Id := No_List;
+          Stub_Statements   : List_Id;
+          If_Node           : Node_Id;
+          --  Various parts of the subprogram
+ 
+          RACW_Parameter : constant Entity_Id
+            := Make_Defining_Identifier (Loc, Name_R);
+ 
+          Reference         : constant Entity_Id :=
+                                Make_Defining_Identifier
+                                  (Loc, New_Internal_Name ('R'));
+          Any               : constant Entity_Id :=
+                                Make_Defining_Identifier
+                                  (Loc, New_Internal_Name ('A'));
+ 
+       begin
+          --  Object declarations
+ 
+          Decls := New_List (
+            Make_Object_Declaration (Loc,
+              Defining_Identifier =>
+                Reference,
+              Object_Definition =>
+                New_Occurrence_Of (RTE (RE_Object_Ref), Loc)),
+            Make_Object_Declaration (Loc,
+              Defining_Identifier =>
+                Any,
+              Object_Definition =>
+                New_Occurrence_Of (RTE (RE_Any), Loc)));
+ 
+          --  If the object is null, nothing to do (Reference is already
+          --  a Nil ref.)
+ 
+          Null_Statements := New_List (Make_Null_Statement (Loc));
+ 
+          if Is_RAS then
+ 
+             --  If the object is a RAS designating a local subprogram,
+             --  we already have a target reference.
+ 
+             Local_Statements := New_List (
+               Make_Procedure_Call_Statement (Loc,
+                 Name =>
+                   New_Occurrence_Of (RTE (RE_Set_Ref), Loc),
+                 Parameter_Associations => New_List (
+                   New_Occurrence_Of (Reference, Loc),
+                   Make_Selected_Component (Loc,
+                     Prefix =>
+                       Unchecked_Convert_To (RTE (RE_RAS_Proxy_Type_Access),
+                         New_Occurrence_Of (RACW_Parameter, Loc)),
+                     Selector_Name => Make_Identifier (Loc, Name_Target)))));
+ 
+          else
+             --  If the object is a local RACW object, use Get_Reference now
+             --  to obtain a reference.
+ 
+             Local_Statements := New_List (
+               Make_Procedure_Call_Statement (Loc,
+                 Name =>
+                   New_Occurrence_Of (RTE (RE_Get_Reference), Loc),
+                 Parameter_Associations => New_List (
+                   Unchecked_Convert_To (
+                     RTE (RE_Address),
+                     New_Occurrence_Of (RACW_Parameter, Loc)),
+                   Make_String_Literal (Loc,
+                     Full_Qualified_Name (Designated_Type)),
+                   Make_Attribute_Reference (Loc,
+                     Prefix =>
+                       New_Occurrence_Of (
+                         Defining_Identifier (
+                           Stub_Elements.RPC_Receiver_Decl), Loc),
+                     Attribute_Name =>
+                       Name_Access),
+                   New_Occurrence_Of (Reference, Loc))));
+          end if;
+ 
+          --  If the object is located on another partition, use the target
+          --  from the stub.
+ 
+          Stub_Statements := New_List (
+            Make_Procedure_Call_Statement (Loc,
+              Name =>
+                New_Occurrence_Of (RTE (RE_Set_Ref), Loc),
+              Parameter_Associations => New_List (
+                New_Occurrence_Of (Reference, Loc),
+                Make_Selected_Component (Loc,
+                  Prefix        => Unchecked_Convert_To (Stub_Type_Access,
+                    New_Occurrence_Of (RACW_Parameter, Loc)),
+                  Selector_Name =>
+                    Make_Identifier (Loc, Name_Target)))));
+ 
+          --  Distinguish between the null, local and remote cases,
+          --  and execute the appropriate piece of code.
+ 
+          If_Node :=
+            Make_Implicit_If_Statement (RACW_Type,
+              Condition       =>
+                Make_Op_Eq (Loc,
+                  Left_Opnd  => New_Occurrence_Of (RACW_Parameter, Loc),
+                  Right_Opnd => Make_Null (Loc)),
+              Then_Statements => Null_Statements,
+              Elsif_Parts     => New_List (
+                Make_Elsif_Part (Loc,
+                  Condition       =>
+                    Make_Op_Ne (Loc,
+                      Left_Opnd  =>
+                         Make_Attribute_Reference (Loc,
+                          Prefix         =>
+                            New_Occurrence_Of (RACW_Parameter, Loc),
+                          Attribute_Name => Name_Tag),
+                      Right_Opnd =>
+                        Make_Attribute_Reference (Loc,
+                          Prefix         => New_Occurrence_Of (Stub_Type, Loc),
+                          Attribute_Name => Name_Tag)),
+                  Then_Statements => Local_Statements)),
+              Else_Statements => Stub_Statements);
+ 
+          Statements := New_List (
+            If_Node,
+            Make_Assignment_Statement (Loc,
+              Name =>
+                New_Occurrence_Of (Any, Loc),
+              Expression =>
+                Make_Function_Call (Loc,
+                  Name => New_Occurrence_Of (RTE (RE_TA_ObjRef), Loc),
+                  Parameter_Associations => New_List (
+                    New_Occurrence_Of (Reference, Loc)))),
+            Make_Procedure_Call_Statement (Loc,
+              Name =>
+                New_Occurrence_Of (RTE (RE_Set_TC), Loc),
+              Parameter_Associations => New_List (
+                New_Occurrence_Of (Any, Loc),
+                Make_Selected_Component (Loc,
+                  Prefix =>
+                      Defining_Identifier (
+                        Stub_Elements.RPC_Receiver_Decl),
+                  Selector_Name => Name_Obj_TypeCode))),
+            Make_Return_Statement (Loc,
+              Expression =>
+                New_Occurrence_Of (Any, Loc)));
+ 
+          Fnam := Make_Defining_Identifier (
+            Loc, New_Internal_Name ('T'));
+ 
+          Func_Spec :=
+            Make_Function_Specification (Loc,
+              Defining_Unit_Name =>
+                Fnam,
+              Parameter_Specifications => New_List (
+                Make_Parameter_Specification (Loc,
+                  Defining_Identifier =>
+                    RACW_Parameter,
+                  Parameter_Type =>
+                    New_Occurrence_Of (RACW_Type, Loc))),
+              Subtype_Mark => New_Occurrence_Of (RTE (RE_Any), Loc));
+ 
+          --  NOTE: The usage occurrences of RACW_Parameter must
+          --  refer to the entity in the declaration spec, not in
+          --  the body spec.
+ 
+          Func_Decl := Make_Subprogram_Declaration (Loc, Func_Spec);
+ 
+          Func_Body :=
+            Make_Subprogram_Body (Loc,
+              Specification              =>
+                Copy_Specification (Loc, Func_Spec),
+              Declarations               => Decls,
+              Handled_Statement_Sequence =>
+                Make_Handled_Sequence_Of_Statements (Loc,
+                  Statements => Statements));
+ 
+          Insert_After (Declaration_Node (RACW_Type), Func_Decl);
+          Append_To (Declarations, Func_Body);
+ 
+          Set_Renaming_TSS (RACW_Type, Fnam, Name_uTo_Any);
+       end Add_RACW_To_Any;
+ 
+       -----------------------
+       -- Add_RACW_TypeCode --
+       -----------------------
+ 
+       procedure Add_RACW_TypeCode
+         (Designated_Type  : Entity_Id;
+          RACW_Type        : Entity_Id;
+          Declarations     : List_Id)
+       is
+          Loc : constant Source_Ptr := Sloc (RACW_Type);
+ 
+          Fnam : Entity_Id;
+ 
+          Stub_Elements : constant Stub_Structure :=
+                            Stubs_Table.Get (Designated_Type);
+          pragma Assert (Stub_Elements /= Empty_Stub_Structure);
+ 
+          Func_Spec : Node_Id;
+          Func_Decl : Node_Id;
+          Func_Body : Node_Id;
+ 
+          RACW_Parameter : constant Entity_Id :=
+                             Make_Defining_Identifier (Loc, Name_R);
+ 
+       begin
+          Fnam :=
+            Make_Defining_Identifier (Loc,
+              Chars => New_Internal_Name ('T'));
+ 
+          --  The spec for this subprogram has a dummy 'access RACW'
+          --  argument, which serves only for overloading purposes.
+ 
+          Func_Spec :=
+            Make_Function_Specification (Loc,
+              Defining_Unit_Name =>
+                Fnam,
+              Parameter_Specifications => New_List (
+                Make_Parameter_Specification (Loc,
+                  Defining_Identifier =>
+                    RACW_Parameter,
+                  Parameter_Type =>
+                    Make_Access_Definition (Loc,
+                      Subtype_Mark =>
+                        New_Occurrence_Of (RACW_Type, Loc)))),
+              Subtype_Mark => New_Occurrence_Of (RTE (RE_TypeCode), Loc));
+ 
+          --  NOTE: The usage occurrences of RACW_Parameter must
+          --  refer to the entity in the declaration spec, not those
+          --  of the body spec.
+ 
+          Func_Decl := Make_Subprogram_Declaration (Loc, Func_Spec);
+ 
+          Func_Body :=
+            Make_Subprogram_Body (Loc,
+              Specification              =>
+                Copy_Specification (Loc, Func_Spec),
+              Declarations               => Empty_List,
+              Handled_Statement_Sequence =>
+                Make_Handled_Sequence_Of_Statements (Loc,
+                  Statements => New_List (
+                    Make_Return_Statement (Loc,
+                      Expression =>
+                        Make_Selected_Component (Loc,
+                          Prefix =>
+                              Defining_Identifier (
+                                Stub_Elements.RPC_Receiver_Decl),
+                          Selector_Name => Name_Obj_TypeCode)))));
+ 
+          Insert_After (Declaration_Node (RACW_Type), Func_Decl);
+          Append_To (Declarations, Func_Body);
+ 
+          Set_Renaming_TSS (RACW_Type, Fnam, Name_uTypeCode);
+       end Add_RACW_TypeCode;
+ 
+       ------------------------------
+       -- Add_RACW_Write_Attribute --
+       ------------------------------
+ 
+       procedure Add_RACW_Write_Attribute
+         (RACW_Type        : Entity_Id;
+          Stub_Type        : Entity_Id;
+          Stub_Type_Access : Entity_Id;
+          Declarations     : List_Id)
+       is
+          Loc : constant Source_Ptr := Sloc (RACW_Type);
+          pragma Warnings (Off);
+          pragma Unreferenced (
+                   Stub_Type,
+                   Stub_Type_Access);
+ 
+          Is_RAS : constant Boolean := not Comes_From_Source (RACW_Type);
+          pragma Unreferenced (Is_RAS);
+          pragma Warnings (On);
+ 
+          Body_Node : Node_Id;
+          Proc_Decl : Node_Id;
+          Attr_Decl : Node_Id;
+ 
+          Statements     : List_Id;
+          Procedure_Name : constant Name_Id := New_Internal_Name ('R');
+ 
+          function Stream_Parameter return Node_Id;
+          function Object return Node_Id;
+          --  Functions to create occurrences of the formal parameter names
+ 
+          ------------
+          -- Object --
+          ------------
+ 
+          function Object return Node_Id is
+             Object_Ref : constant Node_Id :=
+                            Make_Identifier (Loc, Name_V);
+ 
+          begin
+             --  Etype must be set for Build_To_Any_Call
+ 
+             Set_Etype (Object_Ref, RACW_Type);
+ 
+             return Object_Ref;
+          end Object;
+ 
+          ----------------------
+          -- Stream_Parameter --
+          ----------------------
+ 
+          function Stream_Parameter return Node_Id is
+          begin
+             return Make_Identifier (Loc, Name_S);
+          end Stream_Parameter;
+ 
+       --  Start of processing for Add_RACW_Write_Attribute
+ 
+       begin
+          Statements := New_List (
+            Pack_Node_Into_Stream_Access (Loc,
+              Stream => Stream_Parameter,
+              Object =>
+                Make_Function_Call (Loc,
+                  Name =>
+                    New_Occurrence_Of (RTE (RE_FA_ObjRef), Loc),
+                  Parameter_Associations => New_List (
+                    PolyORB_Support.Helpers.Build_To_Any_Call
+                      (Object, Declarations))),
+              Etyp => RTE (RE_Object_Ref)));
+ 
+          Build_Stream_Procedure
+            (Loc, RACW_Type, Body_Node,
+             Make_Defining_Identifier (Loc, Procedure_Name),
+             Statements, Outp => False);
+ 
+          Proc_Decl :=
+            Make_Subprogram_Declaration (Loc,
+              Copy_Specification (Loc, Specification (Body_Node)));
+ 
+          Attr_Decl :=
+            Make_Attribute_Definition_Clause (Loc,
+              Name       => New_Occurrence_Of (RACW_Type, Loc),
+              Chars      => Name_Write,
+              Expression =>
+                New_Occurrence_Of (
+                  Defining_Unit_Name (Specification (Proc_Decl)), Loc));
+ 
+          Insert_After (Declaration_Node (RACW_Type), Proc_Decl);
+          Insert_After (Proc_Decl, Attr_Decl);
+          Append_To (Declarations, Body_Node);
+       end Add_RACW_Write_Attribute;
+ 
+       -----------------------
+       -- Add_RAST_Features --
+       -----------------------
+ 
+       procedure Add_RAST_Features
+         (Vis_Decl : Node_Id;
+          RAS_Type : Entity_Id;
+          Decls    : List_Id)
+       is
+       begin
+          Add_RAS_Access_TSS (Vis_Decl);
+ 
+          Add_RAS_From_Any (RAS_Type, Decls);
+          Add_RAS_TypeCode (RAS_Type, Decls);
+ 
+          --  To_Any uses TypeCode, and therefore needs to be generated last
+ 
+          Add_RAS_To_Any (RAS_Type, Decls);
+       end Add_RAST_Features;
+ 
+       ------------------------
+       -- Add_RAS_Access_TSS --
+       ------------------------
+ 
+       procedure Add_RAS_Access_TSS (N : Node_Id) is
+          Loc : constant Source_Ptr := Sloc (N);
+ 
+          Ras_Type : constant Entity_Id := Defining_Identifier (N);
+          Fat_Type : constant Entity_Id := Equivalent_Type (Ras_Type);
+          --  Ras_Type is the access to subprogram type; Fat_Type is the
+          --  corresponding record type.
+ 
+          RACW_Type : constant Entity_Id :=
+            Underlying_RACW_Type (Ras_Type);
+          Desig     : constant Entity_Id :=
+            Etype (Designated_Type (RACW_Type));
+ 
+          Stub_Elements : constant Stub_Structure :=
+            Stubs_Table.Get (Desig);
+          pragma Assert (Stub_Elements /= Empty_Stub_Structure);
+ 
+          Proc : constant Entity_Id :=
+                   Make_Defining_Identifier (Loc,
+                     Chars => Make_TSS_Name (Ras_Type, TSS_RAS_Access));
+ 
+          Proc_Spec : Node_Id;
+ 
+          --  Formal parameters
+ 
+          Package_Name : constant Entity_Id :=
+                           Make_Defining_Identifier (Loc,
+                             Chars => Name_P);
+ 
+          --  Target package
+ 
+          Subp_Id : constant Entity_Id :=
+                      Make_Defining_Identifier (Loc,
+                        Chars => Name_S);
+ 
+          --  Target subprogram
+ 
+          Asynch_P : constant Entity_Id :=
+                       Make_Defining_Identifier (Loc,
+                         Chars => Name_Asynchronous);
+          --  Is the procedure to which the 'Access applies asynchronous?
+ 
+          All_Calls_Remote : constant Entity_Id :=
+                               Make_Defining_Identifier (Loc,
+                                 Chars => Name_All_Calls_Remote);
+          --  True if an All_Calls_Remote pragma applies to the RCI unit
+          --  that contains the subprogram.
+ 
+          --  Common local variables
+ 
+          Proc_Decls      : List_Id;
+          Proc_Statements : List_Id;
+ 
+          Subp_Ref : constant Entity_Id :=
+                       Make_Defining_Identifier (Loc, Name_R);
+          --  Reference that designates the target subprogram (returned
+          --  by Get_RAS_Info).
+ 
+          Is_Local : constant Entity_Id :=
+            Make_Defining_Identifier (Loc, Name_L);
+          Local_Addr : constant Entity_Id :=
+            Make_Defining_Identifier (Loc, Name_A);
+          --  For the call to Get_Local_Address
+ 
+          --  Additional local variables for the remote case
+ 
+          Local_Stub : constant Entity_Id :=
+                         Make_Defining_Identifier (Loc,
+                           Chars => New_Internal_Name ('L'));
+ 
+          Stub_Ptr : constant Entity_Id :=
+                       Make_Defining_Identifier (Loc,
+                         Chars => New_Internal_Name ('S'));
+ 
+          function Set_Field
+            (Field_Name : Name_Id;
+             Value      : Node_Id) return Node_Id;
+          --  Construct an assignment that sets the named component in the
+          --  returned record
+ 
+          ---------------
+          -- Set_Field --
+          ---------------
+ 
+          function Set_Field
+            (Field_Name : Name_Id;
+             Value      : Node_Id) return Node_Id
+          is
+          begin
+             return
+               Make_Assignment_Statement (Loc,
+                 Name       =>
+                   Make_Selected_Component (Loc,
+                     Prefix        => Stub_Ptr,
+                     Selector_Name => Field_Name),
+                 Expression => Value);
+          end Set_Field;
+ 
+       --  Start of processing for Add_RAS_Access_TSS
+ 
+       begin
+          Proc_Decls := New_List (
+ 
+          --  Common declarations
+ 
+            Make_Object_Declaration (Loc,
+              Defining_Identifier => Subp_Ref,
+              Object_Definition   =>
+                New_Occurrence_Of (RTE (RE_Object_Ref), Loc)),
+ 
+            Make_Object_Declaration (Loc,
+              Defining_Identifier => Is_Local,
+              Object_Definition   =>
+                New_Occurrence_Of (Standard_Boolean, Loc)),
+ 
+            Make_Object_Declaration (Loc,
+              Defining_Identifier => Local_Addr,
+              Object_Definition   =>
+                New_Occurrence_Of (RTE (RE_Address), Loc)),
+ 
+            Make_Object_Declaration (Loc,
+              Defining_Identifier => Local_Stub,
+              Aliased_Present     => True,
+              Object_Definition   =>
+                New_Occurrence_Of (Stub_Elements.Stub_Type, Loc)),
+ 
+            Make_Object_Declaration (Loc,
+              Defining_Identifier =>
+                Stub_Ptr,
+              Object_Definition   =>
+                New_Occurrence_Of (Stub_Elements.Stub_Type_Access, Loc),
+              Expression          =>
+                Make_Attribute_Reference (Loc,
+                  Prefix => New_Occurrence_Of (Local_Stub, Loc),
+                  Attribute_Name => Name_Unchecked_Access)));
+ 
+          Set_Etype (Stub_Ptr, Stub_Elements.Stub_Type_Access);
+          --  Build_Get_Unique_RP_Call needs this information
+ 
+          --  Get_RAS_Info (Pkg, Subp, R);
+          --  Obtain a reference to the target subprogram
+ 
+          Proc_Statements := New_List (
+            Make_Procedure_Call_Statement (Loc,
+              Name =>
+                New_Occurrence_Of (RTE (RE_Get_RAS_Info), Loc),
+              Parameter_Associations => New_List (
+                New_Occurrence_Of (Package_Name, Loc),
+                New_Occurrence_Of (Subp_Id, Loc),
+                New_Occurrence_Of (Subp_Ref, Loc))),
+ 
+          --  Get_Local_Address (R, L, A);
+          --  Determine whether the subprogram is local (L), and if so
+          --  obtain the local address of its proxy (A).
+ 
+            Make_Procedure_Call_Statement (Loc,
+              Name =>
+                New_Occurrence_Of (RTE (RE_Get_Local_Address), Loc),
+              Parameter_Associations => New_List (
+                New_Occurrence_Of (Subp_Ref, Loc),
+                New_Occurrence_Of (Is_Local, Loc),
+                New_Occurrence_Of (Local_Addr, Loc))));
+ 
+          --  Note: Here we assume that the Fat_Type is a record containing just
+          --  an access to a proxy or stub object.
+ 
+          Append_To (Proc_Statements,
+ 
+          --  if L then
+ 
+            Make_Implicit_If_Statement (N,
+              Condition =>
+                New_Occurrence_Of (Is_Local, Loc),
+ 
+              Then_Statements => New_List (
+ 
+          --     if A.Target = null then
+ 
+                Make_Implicit_If_Statement (N,
+                  Condition =>
+                    Make_Op_Eq (Loc,
+                      Make_Selected_Component (Loc,
+                        Prefix =>
+                          Unchecked_Convert_To (
+                            RTE (RE_RAS_Proxy_Type_Access),
+                            New_Occurrence_Of (Local_Addr, Loc)),
+                          Selector_Name =>
+                            Make_Identifier (Loc, Name_Target)),
+                      Make_Null (Loc)),
+ 
+                  Then_Statements => New_List (
+ 
+          --        A.Target := Entity_Of (Ref);
+ 
+                    Make_Assignment_Statement (Loc,
+                      Name =>
+                        Make_Selected_Component (Loc,
+                          Prefix =>
+                            Unchecked_Convert_To (
+                              RTE (RE_RAS_Proxy_Type_Access),
+                              New_Occurrence_Of (Local_Addr, Loc)),
+                            Selector_Name =>
+                              Make_Identifier (Loc, Name_Target)),
+                      Expression =>
+                        Make_Function_Call (Loc,
+                          Name =>
+                            New_Occurrence_Of (RTE (RE_Entity_Of), Loc),
+                          Parameter_Associations => New_List (
+                            New_Occurrence_Of (Subp_Ref, Loc)))),
+ 
+          --        Inc_Usage (A.Target);
+ 
+                    Make_Procedure_Call_Statement (Loc,
+                      Name =>
+                        New_Occurrence_Of (RTE (RE_Inc_Usage), Loc),
+                      Parameter_Associations => New_List (
+                        Make_Selected_Component (Loc,
+                          Prefix        =>
+                            Unchecked_Convert_To (
+                              RTE (RE_RAS_Proxy_Type_Access),
+                              New_Occurrence_Of (Local_Addr, Loc)),
+                          Selector_Name => Make_Identifier (Loc,
+                            Name_Target)))))),
+ 
+          --     end if;
+          --     if not All_Calls_Remote then
+          --        return Fat_Type!(A);
+          --     end if;
+ 
+                  Make_Implicit_If_Statement (N,
+                    Condition =>
+                      Make_Op_Not (Loc,
+                        New_Occurrence_Of (All_Calls_Remote, Loc)),
+ 
+                    Then_Statements => New_List (
+                      Make_Return_Statement (Loc,
+                        Unchecked_Convert_To (Fat_Type,
+                          New_Occurrence_Of (Local_Addr, Loc))))))));
+ 
+          Append_List_To (Proc_Statements, New_List (
+ 
+          --  Stub.Target := Entity_Of (Ref);
+ 
+            Set_Field (Name_Target,
+              Make_Function_Call (Loc,
+                Name =>
+                  New_Occurrence_Of (RTE (RE_Entity_Of), Loc),
+                Parameter_Associations => New_List (
+                  New_Occurrence_Of (Subp_Ref, Loc)))),
+ 
+          --  Inc_Usage (Stub.Target);
+ 
+            Make_Procedure_Call_Statement (Loc,
+              Name =>
+                New_Occurrence_Of (RTE (RE_Inc_Usage), Loc),
+              Parameter_Associations => New_List (
+                Make_Selected_Component (Loc,
+                  Prefix        => Stub_Ptr,
+                  Selector_Name => Name_Target))),
+ 
+          --  E.4.1(9) A remote call is asynchronous if it is a call to
+          --  a procedure, or a call through a value of an access-to-procedure
+          --  type, to which a pragma Asynchronous applies.
+ 
+          --    Parameter Asynch_P is true when the procedure is asynchronous;
+          --    Expression Asynch_T is true when the type is asynchronous.
+ 
+            Set_Field (Name_Asynchronous,
+              Make_Or_Else (Loc,
+                New_Occurrence_Of (Asynch_P, Loc),
+                New_Occurrence_Of (Boolean_Literals (
+                  Is_Asynchronous (Ras_Type)), Loc)))));
+ 
+          Append_List_To (Proc_Statements,
+            Build_Get_Unique_RP_Call (Loc,
+              Stub_Ptr, Stub_Elements.Stub_Type));
+ 
+          Append_To (Proc_Statements,
+            Make_Return_Statement (Loc,
+              Expression =>
+                Unchecked_Convert_To (Fat_Type,
+                  New_Occurrence_Of (Stub_Ptr, Loc))));
+ 
+          Proc_Spec :=
+            Make_Function_Specification (Loc,
+              Defining_Unit_Name       => Proc,
+              Parameter_Specifications => New_List (
+                Make_Parameter_Specification (Loc,
+                  Defining_Identifier => Package_Name,
+                  Parameter_Type      =>
+                    New_Occurrence_Of (Standard_String, Loc)),
+ 
+                Make_Parameter_Specification (Loc,
+                  Defining_Identifier => Subp_Id,
+                  Parameter_Type      =>
+                    New_Occurrence_Of (Standard_String, Loc)),
+ 
+                Make_Parameter_Specification (Loc,
+                  Defining_Identifier => Asynch_P,
+                  Parameter_Type      =>
+                    New_Occurrence_Of (Standard_Boolean, Loc)),
+ 
+                Make_Parameter_Specification (Loc,
+                  Defining_Identifier => All_Calls_Remote,
+                  Parameter_Type      =>
+                    New_Occurrence_Of (Standard_Boolean, Loc))),
+ 
+             Subtype_Mark =>
+               New_Occurrence_Of (Fat_Type, Loc));
+ 
+          --  Set the kind and return type of the function to prevent
+          --  ambiguities between Ras_Type and Fat_Type in subsequent analysis.
+ 
+          Set_Ekind (Proc, E_Function);
+          Set_Etype (Proc, Fat_Type);
+ 
+          Discard_Node (
+            Make_Subprogram_Body (Loc,
+              Specification              => Proc_Spec,
+              Declarations               => Proc_Decls,
+              Handled_Statement_Sequence =>
+                Make_Handled_Sequence_Of_Statements (Loc,
+                  Statements => Proc_Statements)));
+ 
+          Set_TSS (Fat_Type, Proc);
+       end Add_RAS_Access_TSS;
+ 
+       ----------------------
+       -- Add_RAS_From_Any --
+       ----------------------
+ 
+       procedure Add_RAS_From_Any
+         (RAS_Type     : Entity_Id;
+          Declarations : List_Id)
+       is
+          Loc : constant Source_Ptr := Sloc (RAS_Type);
+ 
+          Fnam : constant Entity_Id :=
+                   Make_Defining_Identifier (Loc, New_Internal_Name ('F'));
+ 
+          Func_Spec : Node_Id;
+          Func_Decl : Node_Id;
+          Func_Body : Node_Id;
+ 
+          Statements : List_Id;
+ 
+          Any_Parameter : constant Entity_Id :=
+                            Make_Defining_Identifier (Loc, Name_A);
+ 
+       begin
+          Statements := New_List (
+            Make_Return_Statement (Loc,
+              Expression =>
+                Make_Aggregate (Loc,
+                  Component_Associations => New_List (
+                    Make_Component_Association (Loc,
+                      Choices => New_List (
+                        Make_Identifier (Loc, Name_Ras)),
+                      Expression =>
+                        PolyORB_Support.Helpers.Build_From_Any_Call (
+                          Underlying_RACW_Type (RAS_Type),
+                          New_Occurrence_Of (Any_Parameter, Loc),
+                          No_List))))));
+ 
+          Func_Spec :=
+            Make_Function_Specification (Loc,
+              Defining_Unit_Name =>
+                Fnam,
+              Parameter_Specifications => New_List (
+                Make_Parameter_Specification (Loc,
+                  Defining_Identifier =>
+                    Any_Parameter,
+                  Parameter_Type =>
+                    New_Occurrence_Of (RTE (RE_Any), Loc))),
+              Subtype_Mark => New_Occurrence_Of (RAS_Type, Loc));
+ 
+          --  NOTE: The usage occurrences of RACW_Parameter must
+          --  refer to the entity in the declaration spec, not those
+          --  of the body spec.
+ 
+          Func_Decl := Make_Subprogram_Declaration (Loc, Func_Spec);
+ 
+          Func_Body :=
+            Make_Subprogram_Body (Loc,
+              Specification              =>
+                Copy_Specification (Loc, Func_Spec),
+              Declarations               => No_List,
+              Handled_Statement_Sequence =>
+                Make_Handled_Sequence_Of_Statements (Loc,
+                  Statements => Statements));
+ 
+          Insert_After (Declaration_Node (RAS_Type), Func_Decl);
+          Append_To (Declarations, Func_Body);
+ 
+          Set_Renaming_TSS (RAS_Type, Fnam, Name_uFrom_Any);
+       end Add_RAS_From_Any;
+ 
+       --------------------
+       -- Add_RAS_To_Any --
+       --------------------
+ 
+       procedure Add_RAS_To_Any
+         (RAS_Type     : Entity_Id;
+          Declarations : List_Id)
+       is
+          Loc : constant Source_Ptr := Sloc (RAS_Type);
+ 
+          Fnam : Entity_Id;
+ 
+          Decls : List_Id;
+          Statements : List_Id;
+ 
+          Func_Spec : Node_Id;
+          Func_Decl : Node_Id;
+          Func_Body : Node_Id;
+ 
+          Any            : constant Entity_Id :=
+                             Make_Defining_Identifier (Loc,
+                               Chars => New_Internal_Name ('A'));
+          RAS_Parameter  : constant Entity_Id :=
+                             Make_Defining_Identifier (Loc,
+                               Chars => New_Internal_Name ('R'));
+          RACW_Parameter : constant Node_Id :=
+                             Make_Selected_Component (Loc,
+                               Prefix        => RAS_Parameter,
+                               Selector_Name => Name_Ras);
+ 
+       begin
+          --  Object declarations
+ 
+          Set_Etype (RACW_Parameter, Underlying_RACW_Type (RAS_Type));
+          Decls := New_List (
+            Make_Object_Declaration (Loc,
+              Defining_Identifier =>
+                Any,
+              Object_Definition =>
+                New_Occurrence_Of (RTE (RE_Any), Loc),
+              Expression =>
+                PolyORB_Support.Helpers.Build_To_Any_Call
+                  (RACW_Parameter, No_List)));
+ 
+          Statements := New_List (
+            Make_Procedure_Call_Statement (Loc,
+              Name =>
+                New_Occurrence_Of (RTE (RE_Set_TC), Loc),
+              Parameter_Associations => New_List (
+                New_Occurrence_Of (Any, Loc),
+                PolyORB_Support.Helpers.Build_TypeCode_Call (Loc,
+                  RAS_Type, Decls))),
+            Make_Return_Statement (Loc,
+              Expression =>
+                New_Occurrence_Of (Any, Loc)));
+ 
+          Fnam := Make_Defining_Identifier (
+            Loc, New_Internal_Name ('T'));
+ 
+          Func_Spec :=
+            Make_Function_Specification (Loc,
+              Defining_Unit_Name =>
+                Fnam,
+              Parameter_Specifications => New_List (
+                Make_Parameter_Specification (Loc,
+                  Defining_Identifier =>
+                    RAS_Parameter,
+                  Parameter_Type =>
+                    New_Occurrence_Of (RAS_Type, Loc))),
+              Subtype_Mark => New_Occurrence_Of (RTE (RE_Any), Loc));
+ 
+          --  NOTE: The usage occurrences of RAS_Parameter must
+          --  refer to the entity in the declaration spec, not in
+          --  the body spec.
+ 
+          Func_Decl := Make_Subprogram_Declaration (Loc, Func_Spec);
+ 
+          Func_Body :=
+            Make_Subprogram_Body (Loc,
+              Specification              =>
+                Copy_Specification (Loc, Func_Spec),
+              Declarations               => Decls,
+              Handled_Statement_Sequence =>
+                Make_Handled_Sequence_Of_Statements (Loc,
+                  Statements => Statements));
+ 
+          Insert_After (Declaration_Node (RAS_Type), Func_Decl);
+          Append_To (Declarations, Func_Body);
+ 
+          Set_Renaming_TSS (RAS_Type, Fnam, Name_uTo_Any);
+       end Add_RAS_To_Any;
+ 
+       ----------------------
+       -- Add_RAS_TypeCode --
+       ----------------------
+ 
+       procedure Add_RAS_TypeCode
+         (RAS_Type     : Entity_Id;
+          Declarations : List_Id)
+       is
+          Loc : constant Source_Ptr := Sloc (RAS_Type);
+ 
+          Fnam : Entity_Id;
+ 
+          Func_Spec : Node_Id;
+          Func_Decl : Node_Id;
+          Func_Body : Node_Id;
+ 
+          Decls : constant List_Id := New_List;
+          Name_String, Repo_Id_String : String_Id;
+ 
+          RAS_Parameter : constant Entity_Id :=
+                            Make_Defining_Identifier (Loc, Name_R);
+ 
+       begin
+ 
+          Fnam :=
+            Make_Defining_Identifier (Loc,
+              Chars => New_Internal_Name ('T'));
+ 
+          --  The spec for this subprogram has a dummy 'access RAS'
+          --  argument, which serves only for overloading purposes.
+ 
+          Func_Spec :=
+            Make_Function_Specification (Loc,
+              Defining_Unit_Name =>
+                Fnam,
+              Parameter_Specifications => New_List (
+                Make_Parameter_Specification (Loc,
+                  Defining_Identifier =>
+                    RAS_Parameter,
+                  Parameter_Type =>
+                    Make_Access_Definition (Loc,
+                      Subtype_Mark => New_Occurrence_Of (RAS_Type, Loc)))),
+              Subtype_Mark => New_Occurrence_Of (RTE (RE_TypeCode), Loc));
+ 
+          --  NOTE: The usage occurrences of RAS_Parameter must
+          --  refer to the entity in the declaration spec, not those
+          --  of the body spec.
+ 
+          Func_Decl := Make_Subprogram_Declaration (Loc, Func_Spec);
+ 
+          PolyORB_Support.Helpers.Build_Name_And_Repository_Id
+            (RAS_Type, Name_Str => Name_String, Repo_Id_Str => Repo_Id_String);
+ 
+          Func_Body :=
+            Make_Subprogram_Body (Loc,
+              Specification              =>
+                Copy_Specification (Loc, Func_Spec),
+              Declarations               => Decls,
+              Handled_Statement_Sequence =>
+                Make_Handled_Sequence_Of_Statements (Loc,
+                  Statements => New_List (
+                    Make_Return_Statement (Loc,
+                      Expression =>
+                        Make_Function_Call (Loc,
+                          Name =>
+                            New_Occurrence_Of (RTE (RE_TC_Build), Loc),
+                          Parameter_Associations => New_List (
+                            New_Occurrence_Of (RTE (RE_TC_Object), Loc),
+                            Make_Aggregate (Loc,
+                              Expressions =>
+                                New_List (
+                                  Make_Function_Call (Loc,
+                                    Name => New_Occurrence_Of (
+                                      RTE (RE_TA_String), Loc),
+                                    Parameter_Associations => New_List (
+                                      Make_String_Literal (Loc, Name_String))),
+                                  Make_Function_Call (Loc,
+                                    Name => New_Occurrence_Of (
+                                      RTE (RE_TA_String), Loc),
+                                    Parameter_Associations => New_List (
+                                      Make_String_Literal (Loc,
+                                        Repo_Id_String)))))))))));
+ 
+          Insert_After (Declaration_Node (RAS_Type), Func_Decl);
+          Append_To (Declarations, Func_Body);
+ 
+          Set_Renaming_TSS (RAS_Type, Fnam, Name_uTypeCode);
+       end Add_RAS_TypeCode;
+ 
+       -----------------------------------------
+       -- Add_Receiving_Stubs_To_Declarations --
+       -----------------------------------------
+ 
+       procedure Add_Receiving_Stubs_To_Declarations
+         (Pkg_Spec : Node_Id;
+          Decls    : List_Id)
+       is
+          Loc : constant Source_Ptr := Sloc (Pkg_Spec);
+ 
+          Pkg_RPC_Receiver            : constant Entity_Id :=
+                                          Make_Defining_Identifier (Loc,
+                                            New_Internal_Name ('H'));
+          Pkg_RPC_Receiver_Object     : Node_Id;
+ 
+          Pkg_RPC_Receiver_Body       : Node_Id;
+          Pkg_RPC_Receiver_Decls      : List_Id;
+          Pkg_RPC_Receiver_Statements : List_Id;
+          Pkg_RPC_Receiver_Cases      : constant List_Id := New_List;
+          --  A Pkg_RPC_Receiver is built to decode the request
+ 
+          Request                     : Node_Id;
+          --  Request object received from neutral layer
+ 
+          Subp_Id : Entity_Id;
+          --  Subprogram identifier as received from the neutral
+          --  distribution core.
+ 
+          Subp_Index : Entity_Id;
+          --  Internal index as determined by matching either the
+          --  method name from the request structure, or the local
+          --  subprogram address (in case of a RAS).
+ 
+          Is_Local : constant Entity_Id :=
+            Make_Defining_Identifier (Loc, New_Internal_Name ('L'));
+          Local_Address : constant Entity_Id :=
+            Make_Defining_Identifier (Loc, New_Internal_Name ('A'));
+          --  Address of a local subprogram designated by a
+          --  reference corresponding to a RAS.
+ 
+          Dispatch_On_Address : constant List_Id := New_List;
+          Dispatch_On_Name    : constant List_Id := New_List;
+ 
+          Current_Declaration       : Node_Id;
+          Current_Stubs             : Node_Id;
+          Current_Subprogram_Number : Int := First_RCI_Subprogram_Id;
+ 
+          Subp_Info_Array : constant Entity_Id :=
+                              Make_Defining_Identifier (Loc,
+                                Chars => New_Internal_Name ('I'));
+ 
+          Subp_Info_List : constant List_Id := New_List;
+ 
+          Register_Pkg_Actuals : constant List_Id := New_List;
+ 
+          All_Calls_Remote_E  : Entity_Id;
+ 
+          procedure Append_Stubs_To
+            (RPC_Receiver_Cases : List_Id;
+             Declaration        : Node_Id;
+             Stubs              : Node_Id;
+             Subp_Number        : Int;
+             Subp_Dist_Name     : Entity_Id;
+             Subp_Proxy_Addr    : Entity_Id);
+          --  Add one case to the specified RPC receiver case list associating
+          --  Subprogram_Number with the subprogram declared by Declaration, for
+          --  which we have receiving stubs in Stubs. Subp_Number is an internal
+          --  subprogram index. Subp_Dist_Name is the string used to call the
+          --  subprogram by name, and Subp_Dist_Addr is the address of the proxy
+          --  object, used in the context of calls through remote
+          --  access-to-subprogram types.
+ 
+          ---------------------
+          -- Append_Stubs_To --
+          ---------------------
+ 
+          procedure Append_Stubs_To
+            (RPC_Receiver_Cases : List_Id;
+             Declaration        : Node_Id;
+             Stubs              : Node_Id;
+             Subp_Number        : Int;
+             Subp_Dist_Name     : Entity_Id;
+             Subp_Proxy_Addr    : Entity_Id)
+          is
+             Case_Stmts : List_Id;
+          begin
+             Case_Stmts := New_List (
+               Make_Procedure_Call_Statement (Loc,
+                 Name                   =>
+                   New_Occurrence_Of (
+                     Defining_Entity (Stubs), Loc),
+                 Parameter_Associations =>
+                   New_List (New_Occurrence_Of (Request, Loc))));
+             if Nkind (Specification (Declaration))
+               = N_Function_Specification
+               or else not
+                 Is_Asynchronous (Defining_Entity (Specification (Declaration)))
+             then
+                Append_To (Case_Stmts, Make_Return_Statement (Loc));
+             end if;
+ 
+             Append_To (RPC_Receiver_Cases,
+               Make_Case_Statement_Alternative (Loc,
+                 Discrete_Choices =>
+                    New_List (Make_Integer_Literal (Loc, Subp_Number)),
+                 Statements       =>
+                   Case_Stmts));
+ 
+             Append_To (Dispatch_On_Name,
+               Make_Elsif_Part (Loc,
+                 Condition =>
+                   Make_Function_Call (Loc,
+                     Name =>
+                       New_Occurrence_Of (RTE (RE_Caseless_String_Eq), Loc),
+                     Parameter_Associations => New_List (
+                       New_Occurrence_Of (Subp_Id, Loc),
+                       New_Occurrence_Of (Subp_Dist_Name, Loc))),
+                 Then_Statements => New_List (
+                   Make_Assignment_Statement (Loc,
+                     New_Occurrence_Of (Subp_Index, Loc),
+                     Make_Integer_Literal (Loc,
+                        Subp_Number)))));
+ 
+             Append_To (Dispatch_On_Address,
+               Make_Elsif_Part (Loc,
+                 Condition =>
+                   Make_Op_Eq (Loc,
+                     Left_Opnd  =>
+                       New_Occurrence_Of (Local_Address, Loc),
+                     Right_Opnd =>
+                       New_Occurrence_Of (Subp_Proxy_Addr, Loc)),
+                 Then_Statements => New_List (
+                   Make_Assignment_Statement (Loc,
+                     New_Occurrence_Of (Subp_Index, Loc),
+                     Make_Integer_Literal (Loc,
+                        Subp_Number)))));
+          end Append_Stubs_To;
+ 
+       --  Start of processing for Add_Receiving_Stubs_To_Declarations
+ 
+       begin
+          --  Building receiving stubs consist in several operations:
+ 
+          --    - a package RPC receiver must be built. This subprogram
+          --      will get a Subprogram_Id from the incoming stream
+          --      and will dispatch the call to the right subprogram
+ 
+          --    - a receiving stub for any subprogram visible in the package
+          --      spec. This stub will read all the parameters from the stream,
+          --      and put the result as well as the exception occurrence in the
+          --      output stream
+ 
+          --    - a dummy package with an empty spec and a body made of an
+          --      elaboration part, whose job is to register the receiving
+          --      part of this RCI package on the name server. This is done
+          --      by calling System.Partition_Interface.Register_Receiving_Stub
+ 
+          Build_RPC_Receiver_Body (
+            RPC_Receiver => Pkg_RPC_Receiver,
+            Request      => Request,
+            Subp_Id      => Subp_Id,
+            Subp_Index   => Subp_Index,
+            Stmts        => Pkg_RPC_Receiver_Statements,
+            Decl         => Pkg_RPC_Receiver_Body);
+          Pkg_RPC_Receiver_Decls := Declarations (Pkg_RPC_Receiver_Body);
+ 
+          --  Extract local address information from the target reference:
+          --  if non-null, that means that this is a reference that denotes
+          --  one particular operation, and hence that the operation name
+          --  must not be taken into account for dispatching.
+ 
+          Append_To (Pkg_RPC_Receiver_Decls,
+            Make_Object_Declaration (Loc,
+              Defining_Identifier =>
+                Is_Local,
+              Object_Definition   =>
+                New_Occurrence_Of (Standard_Boolean, Loc)));
+          Append_To (Pkg_RPC_Receiver_Decls,
+            Make_Object_Declaration (Loc,
+              Defining_Identifier =>
+                Local_Address,
+              Object_Definition   =>
+                New_Occurrence_Of (RTE (RE_Address), Loc)));
+          Append_To (Pkg_RPC_Receiver_Statements,
+            Make_Procedure_Call_Statement (Loc,
+              Name =>
+                New_Occurrence_Of (RTE (RE_Get_Local_Address), Loc),
+              Parameter_Associations => New_List (
+                Make_Selected_Component (Loc,
+                  Prefix        => Request,
+                  Selector_Name => Name_Target),
+                New_Occurrence_Of (Is_Local, Loc),
+                New_Occurrence_Of (Local_Address, Loc))));
+ 
+          --  Determine whether the reference that was used to make
+          --  the call was the base RCI reference (in which case
+          --  Local_Address is 0, and the method identifier from the
+          --  request must be used to determine which subprogram is
+          --  called) or a reference identifying one particular subprogram
+          --  (in which case Local_Address is the address of that
+          --  subprogram, and the method name from the request is
+          --  ignored).
+          --  In each case, cascaded elsifs are used to determine the
+          --  proper subprogram index. Using hash tables might be
+          --  more efficient.
+ 
+          Append_To (Pkg_RPC_Receiver_Statements,
+            Make_Implicit_If_Statement (Pkg_Spec,
+              Condition =>
+                Make_Op_Ne (Loc,
+                  Left_Opnd  => New_Occurrence_Of (Local_Address, Loc),
+                  Right_Opnd => New_Occurrence_Of (RTE (RE_Null_Address), Loc)),
+              Then_Statements => New_List (
+                Make_Implicit_If_Statement (Pkg_Spec,
+                  Condition =>
+                    New_Occurrence_Of (Standard_False, Loc),
+                  Then_Statements => New_List (
+                    Make_Null_Statement (Loc)),
+                  Elsif_Parts =>
+                    Dispatch_On_Address)),
+              Else_Statements => New_List (
+                Make_Implicit_If_Statement (Pkg_Spec,
+                  Condition =>
+                    New_Occurrence_Of (Standard_False, Loc),
+                  Then_Statements => New_List (
+                    Make_Null_Statement (Loc)),
+                  Elsif_Parts =>
+                    Dispatch_On_Name))));
+ 
+          --  For each subprogram, the receiving stub will be built and a
+          --  case statement will be made on the Subprogram_Id to dispatch
+          --  to the right subprogram.
+ 
+          All_Calls_Remote_E := Boolean_Literals (
+            Has_All_Calls_Remote (Defining_Entity (Pkg_Spec)));
+ 
+          Overload_Counter_Table.Reset;
+          Reserve_NamingContext_Methods;
+ 
+          Current_Declaration := First (Visible_Declarations (Pkg_Spec));
+          while Present (Current_Declaration) loop
+             if Nkind (Current_Declaration) = N_Subprogram_Declaration
+               and then Comes_From_Source (Current_Declaration)
+             then
+                declare
+                   Loc : constant Source_Ptr :=
+                           Sloc (Current_Declaration);
+                   --  While specifically processing Current_Declaration, use
+                   --  its Sloc as the location of all generated nodes.
+ 
+                   Subp_Def : constant Entity_Id :=
+                                Defining_Unit_Name
+                                  (Specification (Current_Declaration));
+ 
+                   Subp_Val : String_Id;
+ 
+                   Subp_Dist_Name : constant Entity_Id :=
+                     Make_Defining_Identifier (Loc,
+                       New_External_Name (
+                         Related_Id   => Chars (Subp_Def),
+                         Suffix       => 'D',
+                         Suffix_Index => -1));
+ 
+                   Proxy_Object_Addr : Entity_Id;
+ 
+                begin
+                   pragma Assert (Current_Subprogram_Number =
+                     Get_Subprogram_Id (Subp_Def));
+ 
+                   --  Build receiving stub
+ 
+                   Current_Stubs :=
+                     Build_Subprogram_Receiving_Stubs
+                       (Vis_Decl     => Current_Declaration,
+                        Asynchronous =>
+                          Nkind (Specification (Current_Declaration)) =
+                              N_Procedure_Specification
+                            and then Is_Asynchronous (Subp_Def));
+ 
+                   Append_To (Decls, Current_Stubs);
+                   Analyze (Current_Stubs);
+ 
+                   --  Build RAS proxy
+ 
+                   Add_RAS_Proxy_And_Analyze (Decls,
+                     Vis_Decl           =>
+                       Current_Declaration,
+                     All_Calls_Remote_E =>
+                       All_Calls_Remote_E,
+                     Proxy_Object_Addr  =>
+                       Proxy_Object_Addr);
+ 
+                   --  Compute distribution identifier
+ 
+                   Assign_Subprogram_Identifier (
+                     Subp_Def,
+                     Current_Subprogram_Number,
+                     Subp_Val);
+ 
+                   Append_To (Decls,
+                     Make_Object_Declaration (Loc,
+                       Defining_Identifier => Subp_Dist_Name,
+                       Constant_Present    => True,
+                       Object_Definition   => New_Occurrence_Of (
+                         Standard_String, Loc),
+                       Expression          =>
+                         Make_String_Literal (Loc, Subp_Val)));
+                   Analyze (Last (Decls));
+ 
+                   --  Add subprogram descriptor (RCI_Subp_Info) to the
+                   --  subprograms table for this receiver. The aggregate
+                   --  below must be kept consistent with the declaration
+                   --  of type RCI_Subp_Info in System.Partition_Interface.
+ 
+                   Append_To (Subp_Info_List,
+                     Make_Component_Association (Loc,
+                       Choices => New_List (
+                         Make_Integer_Literal (Loc,
+                           Current_Subprogram_Number)),
+                       Expression =>
+                         Make_Aggregate (Loc,
+                           Expressions => New_List (
+                             Make_Attribute_Reference (Loc,
+                               Prefix =>
+                                 New_Occurrence_Of (
+                                   Subp_Dist_Name, Loc),
+                               Attribute_Name => Name_Address),
+                             Make_Attribute_Reference (Loc,
+                               Prefix =>
+                                 New_Occurrence_Of (
+                                   Subp_Dist_Name, Loc),
+                               Attribute_Name => Name_Length),
+                             New_Occurrence_Of (Proxy_Object_Addr, Loc)))));
+ 
+                   Append_Stubs_To (Pkg_RPC_Receiver_Cases,
+                     Declaration     => Current_Declaration,
+                     Stubs           => Current_Stubs,
+                     Subp_Number     => Current_Subprogram_Number,
+                     Subp_Dist_Name  => Subp_Dist_Name,
+                     Subp_Proxy_Addr => Proxy_Object_Addr);
+                end;
+ 
+                Current_Subprogram_Number := Current_Subprogram_Number + 1;
+             end if;
+ 
+             Next (Current_Declaration);
+          end loop;
+ 
+          --  If we receive an invalid Subprogram_Id, it is best to do nothing
+          --  rather than raising an exception since we do not want someone
+          --  to crash a remote partition by sending invalid subprogram ids.
+          --  This is consistent with the other parts of the case statement
+          --  since even in presence of incorrect parameters in the stream,
+          --  every exception will be caught and (if the subprogram is not an
+          --  APC) put into the result stream and sent away.
+ 
+          Append_To (Pkg_RPC_Receiver_Cases,
+            Make_Case_Statement_Alternative (Loc,
+              Discrete_Choices =>
+                New_List (Make_Others_Choice (Loc)),
+              Statements       =>
+                New_List (Make_Null_Statement (Loc))));
+ 
+          Append_To (Pkg_RPC_Receiver_Statements,
+            Make_Case_Statement (Loc,
+              Expression   =>
+                New_Occurrence_Of (Subp_Index, Loc),
+              Alternatives => Pkg_RPC_Receiver_Cases));
+ 
+          Append_To (Decls,
+            Make_Object_Declaration (Loc,
+              Defining_Identifier => Subp_Info_Array,
+              Constant_Present    => True,
+              Aliased_Present     => True,
+              Object_Definition   =>
+                Make_Subtype_Indication (Loc,
+                  Subtype_Mark =>
+                    New_Occurrence_Of (RTE (RE_RCI_Subp_Info_Array), Loc),
+                  Constraint =>
+                    Make_Index_Or_Discriminant_Constraint (Loc,
+                      New_List (
+                        Make_Range (Loc,
+                          Low_Bound  => Make_Integer_Literal (Loc,
+                            First_RCI_Subprogram_Id),
+                          High_Bound =>
+                            Make_Integer_Literal (Loc,
+                              First_RCI_Subprogram_Id
+                              + List_Length (Subp_Info_List) - 1))))),
+              Expression          =>
+                Make_Aggregate (Loc,
+                  Component_Associations => Subp_Info_List)));
+          Analyze (Last (Decls));
+ 
+          Append_To (Decls, Pkg_RPC_Receiver_Body);
+          Analyze (Last (Decls));
+ 
+          Pkg_RPC_Receiver_Object :=
+            Make_Object_Declaration (Loc,
+              Defining_Identifier =>
+                Make_Defining_Identifier (Loc, New_Internal_Name ('R')),
+              Aliased_Present     => True,
+              Object_Definition   =>
+                New_Occurrence_Of (RTE (RE_Servant), Loc));
+          Append_To (Decls, Pkg_RPC_Receiver_Object);
+          Analyze (Last (Decls));
+ 
+          Get_Library_Unit_Name_String (Pkg_Spec);
+          Append_To (Register_Pkg_Actuals,
+             --  Name
+            Make_String_Literal (Loc,
+              Strval => String_From_Name_Buffer));
+ 
+          Append_To (Register_Pkg_Actuals,
+             --  Version
+            Make_Attribute_Reference (Loc,
+              Prefix         =>
+                New_Occurrence_Of
+                  (Defining_Entity (Pkg_Spec), Loc),
+              Attribute_Name =>
+                Name_Version));
+ 
+          Append_To (Register_Pkg_Actuals,
+             --  Handler
+            Make_Attribute_Reference (Loc,
+              Prefix          =>
+                New_Occurrence_Of (Pkg_RPC_Receiver, Loc),
+              Attribute_Name  => Name_Access));
+ 
+          Append_To (Register_Pkg_Actuals,
+             --  Receiver
+            Make_Attribute_Reference (Loc,
+              Prefix         =>
+                New_Occurrence_Of (
+                  Defining_Identifier (
+                    Pkg_RPC_Receiver_Object), Loc),
+              Attribute_Name =>
+                Name_Access));
+ 
+          Append_To (Register_Pkg_Actuals,
+             --  Subp_Info
+            Make_Attribute_Reference (Loc,
+              Prefix         =>
+                New_Occurrence_Of (Subp_Info_Array, Loc),
+              Attribute_Name =>
+                Name_Address));
+ 
+          Append_To (Register_Pkg_Actuals,
+             --  Subp_Info_Len
+            Make_Attribute_Reference (Loc,
+              Prefix         =>
+                New_Occurrence_Of (Subp_Info_Array, Loc),
+              Attribute_Name =>
+                Name_Length));
+ 
+          Append_To (Register_Pkg_Actuals,
+             --  Is_All_Calls_Remote
+            New_Occurrence_Of (All_Calls_Remote_E, Loc));
+ 
+          Append_To (Decls,
+            Make_Procedure_Call_Statement (Loc,
+              Name                   =>
+                New_Occurrence_Of (RTE (RE_Register_Pkg_Receiving_Stub), Loc),
+              Parameter_Associations => Register_Pkg_Actuals));
+          Analyze (Last (Decls));
+ 
+       end Add_Receiving_Stubs_To_Declarations;
+ 
+       ---------------------------------
+       -- Build_General_Calling_Stubs --
+       ---------------------------------
+ 
+       procedure Build_General_Calling_Stubs
+         (Decls                     : List_Id;
+          Statements                : List_Id;
+          Target_Object             : Node_Id;
+          Subprogram_Id             : Node_Id;
+          Asynchronous              : Node_Id   := Empty;
+          Is_Known_Asynchronous     : Boolean   := False;
+          Is_Known_Non_Asynchronous : Boolean   := False;
+          Is_Function               : Boolean;
+          Spec                      : Node_Id;
+          Stub_Type                 : Entity_Id := Empty;
+          RACW_Type                 : Entity_Id := Empty;
+          Nod                       : Node_Id)
+       is
+          Loc : constant Source_Ptr := Sloc (Nod);
+ 
+          Arguments : Node_Id;
+          --  Name of the named values list used to transmit parameters
+          --  to the remote package
+ 
+          Request : Node_Id;
+          --  The request object constructed by these stubs
+ 
+          Result : Node_Id;
+          --  Name of the result named value (in non-APC cases) which get the
+          --  result of the remote subprogram.
+ 
+          Result_TC : Node_Id;
+          --  Typecode expression for the result of the request (void
+          --  typecode for procedures).
+ 
+          Exception_Return_Parameter : Node_Id;
+          --  Name of the parameter which will hold the exception sent by the
+          --  remote subprogram.
+ 
+          Current_Parameter : Node_Id;
+          --  Current parameter being handled
+ 
+          Ordered_Parameters_List : constant List_Id :=
+                                      Build_Ordered_Parameters_List (Spec);
+ 
+          Asynchronous_P : Node_Id;
+          --  A Boolean expression indicating whether this call is asynchronous
+ 
+          Asynchronous_Statements     : List_Id := No_List;
+          Non_Asynchronous_Statements : List_Id := No_List;
+          --  Statements specifics to the Asynchronous/Non-Asynchronous cases
+ 
+          Extra_Formal_Statements : constant List_Id := New_List;
+          --  List of statements for extra formal parameters. It will appear
+          --  after the regular statements for writing out parameters.
+ 
+          After_Statements : constant List_Id := New_List;
+          --  Statements to be executed after call returns (to assign
+          --  in out or out parameter values).
+ 
+          Etyp : Entity_Id;
+          --  The type of the formal parameter being processed
+ 
+          Is_Controlling_Formal         : Boolean;
+          Is_First_Controlling_Formal   : Boolean;
+          First_Controlling_Formal_Seen : Boolean := False;
+          --  Controlling formal parameters of distributed object
+          --  primitives require special handling, and the first
+          --  such parameter needs even more.
+ 
+       begin
+          --  ??? document general form of stub subprograms for the PolyORB case
+          Request :=
+            Make_Defining_Identifier (Loc, New_Internal_Name ('R'));
+ 
+          Append_To (Decls,
+            Make_Object_Declaration (Loc,
+              Defining_Identifier => Request,
+              Aliased_Present     => False,
+              Object_Definition   =>
+                  New_Occurrence_Of (RTE (RE_Request_Access), Loc)));
+ 
+          Result :=
+            Make_Defining_Identifier (Loc, New_Internal_Name ('R'));
+ 
+          if Is_Function then
+             Result_TC := PolyORB_Support.Helpers.Build_TypeCode_Call (Loc,
+               Etype (Subtype_Mark (Spec)), Decls);
+          else
+             Result_TC := New_Occurrence_Of (RTE (RE_TC_Void), Loc);
+          end if;
+ 
+          Append_To (Decls,
+            Make_Object_Declaration (Loc,
+              Defining_Identifier => Result,
+              Aliased_Present     => False,
+              Object_Definition   =>
+                New_Occurrence_Of (RTE (RE_NamedValue), Loc),
+              Expression =>
+                Make_Aggregate (Loc,
+                  Component_Associations => New_List (
+                    Make_Component_Association (Loc,
+                      Choices => New_List (
+                        Make_Identifier (Loc, Name_Name)),
+                      Expression =>
+                        New_Occurrence_Of (RTE (RE_Result_Name), Loc)),
+                    Make_Component_Association (Loc,
+                      Choices => New_List (
+                        Make_Identifier (Loc, Name_Argument)),
+                      Expression =>
+                        Make_Function_Call (Loc,
+                          Name =>
+                            New_Occurrence_Of (RTE (RE_Create_Any), Loc),
+                          Parameter_Associations => New_List (
+                            Result_TC))),
+                    Make_Component_Association (Loc,
+                      Choices => New_List (
+                        Make_Identifier (Loc, Name_Arg_Modes)),
+                      Expression =>
+                        Make_Integer_Literal (Loc, 0))))));
+ 
+          if not Is_Known_Asynchronous then
+             Exception_Return_Parameter :=
+               Make_Defining_Identifier (Loc, New_Internal_Name ('E'));
+ 
+             Append_To (Decls,
+               Make_Object_Declaration (Loc,
+                 Defining_Identifier => Exception_Return_Parameter,
+                 Object_Definition   =>
+                   New_Occurrence_Of (RTE (RE_Exception_Occurrence), Loc)));
+ 
+          else
+             Exception_Return_Parameter := Empty;
+          end if;
+ 
+          --  Initialize and fill in arguments list
+ 
+          Arguments :=
+            Make_Defining_Identifier (Loc, New_Internal_Name ('A'));
+          Declare_Create_NVList (Loc, Arguments, Decls, Statements);
+ 
+          Current_Parameter := First (Ordered_Parameters_List);
+          while Present (Current_Parameter) loop
+ 
+             if Is_RACW_Controlling_Formal (Current_Parameter, Stub_Type) then
+                Is_Controlling_Formal := True;
+                Is_First_Controlling_Formal :=
+                  not First_Controlling_Formal_Seen;
+                First_Controlling_Formal_Seen := True;
+             else
+                Is_Controlling_Formal := False;
+                Is_First_Controlling_Formal := False;
+             end if;
+ 
+             if Is_Controlling_Formal then
+ 
+                --  In the case of a controlling formal argument, we send
+                --  its reference.
+ 
+                Etyp := RACW_Type;
+ 
+             else
+                Etyp := Etype (Parameter_Type (Current_Parameter));
+             end if;
+ 
+             --  The first controlling formal parameter is treated
+             --  specially: it is used to set the target object of
+             --  the call.
+ 
+             if not Is_First_Controlling_Formal then
+ 
+                declare
+                   Constrained : constant Boolean :=
+                                   Is_Constrained (Etyp)
+                                     or else Is_Elementary_Type (Etyp);
+ 
+                   Any : constant Entity_Id :=
+                           Make_Defining_Identifier (Loc,
+                             New_Internal_Name ('A'));
+ 
+                   Actual_Parameter : Node_Id :=
+                                        New_Occurrence_Of (
+                                          Defining_Identifier (
+                                            Current_Parameter), Loc);
+ 
+                   Expr : Node_Id;
+ 
+                begin
+                   if Is_Controlling_Formal then
+ 
+                      --  For a controlling formal parameter (other
+                      --  than the first one), use the corresponding
+                      --  RACW. If the parameter is not an anonymous
+                      --  access parameter, that involves taking
+                      --  its 'Unrestricted_Access.
+ 
+                      if Nkind (Parameter_Type (Current_Parameter))
+                        = N_Access_Definition
+                      then
+                         Actual_Parameter := OK_Convert_To
+                           (Etyp, Actual_Parameter);
+                      else
+                         Actual_Parameter := OK_Convert_To (Etyp,
+                           Make_Attribute_Reference (Loc,
+                             Prefix =>
+                               Actual_Parameter,
+                             Attribute_Name =>
+                               Name_Unrestricted_Access));
+                      end if;
+ 
+                   end if;
+ 
+                   if In_Present (Current_Parameter)
+                     or else not Out_Present (Current_Parameter)
+                     or else not Constrained
+                     or else Is_Controlling_Formal
+                   then
+                      --  The parameter has an input value, is constrained
+                      --  at runtime by an input value, or is a controlling
+                      --  formal parameter (always passed as a reference)
+                      --  other than the first one.
+ 
+                      Expr := PolyORB_Support.Helpers.Build_To_Any_Call (
+                                Actual_Parameter, Decls);
+                   else
+                      Expr := Make_Function_Call (Loc,
+                        Name =>
+                          New_Occurrence_Of (RTE (RE_Create_Any), Loc),
+                        Parameter_Associations => New_List (
+                          PolyORB_Support.Helpers.Build_TypeCode_Call (Loc,
+                            Etyp, Decls)));
+                   end if;
+ 
+                   Append_To (Decls,
+                     Make_Object_Declaration (Loc,
+                       Defining_Identifier =>
+                         Any,
+                       Aliased_Present     => False,
+                       Object_Definition   =>
+                         New_Occurrence_Of (RTE (RE_Any), Loc),
+                       Expression          =>
+                         Expr));
+ 
+                   Append_To (Statements,
+                     Add_Parameter_To_NVList (Loc,
+                       Parameter   => Current_Parameter,
+                       NVList      => Arguments,
+                       Constrained => Constrained,
+                       Any         => Any));
+ 
+                   if Out_Present (Current_Parameter)
+                     and then not Is_Controlling_Formal
+                   then
+                      Append_To (After_Statements,
+                        Make_Assignment_Statement (Loc,
+                          Name =>
+                            New_Occurrence_Of (
+                              Defining_Identifier (Current_Parameter), Loc),
+                            Expression =>
+                              PolyORB_Support.Helpers.Build_From_Any_Call (
+                                Etype (Parameter_Type (Current_Parameter)),
+                                New_Occurrence_Of (Any, Loc),
+                                Decls)));
+ 
+                   end if;
+                end;
+             end if;
+ 
+             --  If the current parameter has a dynamic constrained status,
+             --  then this status is transmitted as well.
+             --  This should be done for accessibility as well ???
+ 
+             if Nkind (Parameter_Type (Current_Parameter))
+               /= N_Access_Definition
+               and then Need_Extra_Constrained (Current_Parameter)
+             then
+                --  In this block, we do not use the extra formal that has been
+                --  created because it does not exist at the time of expansion
+                --  when building calling stubs for remote access to subprogram
+                --  types. We create an extra variable of this type and push it
+                --  in the stream after the regular parameters.
+ 
+                declare
+                   Extra_Any_Parameter : constant Entity_Id :=
+                                       Make_Defining_Identifier
+                                         (Loc, New_Internal_Name ('P'));
+ 
+                begin
+                   Append_To (Decls,
+                     Make_Object_Declaration (Loc,
+                       Defining_Identifier =>
+                         Extra_Any_Parameter,
+                       Aliased_Present     => False,
+                       Object_Definition   =>
+                         New_Occurrence_Of (RTE (RE_Any), Loc),
+                       Expression          =>
+                         PolyORB_Support.Helpers.Build_To_Any_Call (
+                           Make_Attribute_Reference (Loc,
+                             Prefix         =>
+                               New_Occurrence_Of (
+                                 Defining_Identifier (Current_Parameter), Loc),
+                             Attribute_Name => Name_Constrained),
+                           Decls)));
+                   Append_To (Extra_Formal_Statements,
+                     Add_Parameter_To_NVList (Loc,
+                       Parameter   => Extra_Any_Parameter,
+                       NVList      => Arguments,
+                       Constrained => True,
+                       Any         => Extra_Any_Parameter));
+                end;
+             end if;
+ 
+             Next (Current_Parameter);
+          end loop;
+ 
+          --  Append the formal statements list to the statements
+ 
+          Append_List_To (Statements, Extra_Formal_Statements);
+ 
+          Append_To (Statements,
+            Make_Procedure_Call_Statement (Loc,
+              Name =>
+                New_Occurrence_Of (RTE (RE_Request_Create), Loc),
+              Parameter_Associations => New_List (
+                Target_Object,
+                Subprogram_Id,
+                New_Occurrence_Of (Arguments, Loc),
+                New_Occurrence_Of (Result, Loc),
+                New_Occurrence_Of (RTE (RE_Nil_Exc_List), Loc))));
+ 
+          Append_To (Parameter_Associations (Last (Statements)),
+                New_Occurrence_Of (Request, Loc));
+ 
+          pragma Assert (
+            not (Is_Known_Non_Asynchronous and Is_Known_Asynchronous));
+          if Is_Known_Non_Asynchronous or Is_Known_Asynchronous then
+             Asynchronous_P := New_Occurrence_Of (
+               Boolean_Literals (Is_Known_Asynchronous), Loc);
+          else
+             pragma Assert (Present (Asynchronous));
+             Asynchronous_P := New_Copy_Tree (Asynchronous);
+             --  The expression node Asynchronous will be used to build
+             --  an 'if' statement at the end of Build_General_Calling_Stubs:
+             --  we need to make a copy here.
+          end if;
+ 
+          Append_To (Parameter_Associations (Last (Statements)),
+            Make_Indexed_Component (Loc,
+              Prefix =>
+                New_Occurrence_Of (
+                  RTE (RE_Asynchronous_P_To_Sync_Scope), Loc),
+              Expressions => New_List (Asynchronous_P)));
+ 
+          Append_To (Statements,
+              Make_Procedure_Call_Statement (Loc,
+                Name                   =>
+                  New_Occurrence_Of (RTE (RE_Request_Invoke), Loc),
+                Parameter_Associations => New_List (
+                  New_Occurrence_Of (Request, Loc))));
+ 
+          Non_Asynchronous_Statements := New_List (Make_Null_Statement (Loc));
+          Asynchronous_Statements := New_List (Make_Null_Statement (Loc));
+ 
+          if not Is_Known_Asynchronous then
+ 
+             --  Reraise an exception occurrence from the completed request.
+             --  If the exception occurrence is empty, this is a no-op.
+ 
+             Append_To (Non_Asynchronous_Statements,
+               Make_Procedure_Call_Statement (Loc,
+                 Name                   =>
+                   New_Occurrence_Of (RTE (RE_Request_Raise_Occurrence), Loc),
+                 Parameter_Associations => New_List (
+                   New_Occurrence_Of (Request, Loc))));
+ 
+             if Is_Function then
+ 
+                --  If this is a function call, then read the value and
+                --  return it.
+ 
+                Append_To (Non_Asynchronous_Statements,
+                  Make_Tag_Check (Loc,
+                    Make_Return_Statement (Loc,
+                      PolyORB_Support.Helpers.Build_From_Any_Call (
+                          Etype (Subtype_Mark (Spec)),
+                          Make_Selected_Component (Loc,
+                            Prefix        => Result,
+                            Selector_Name => Name_Argument),
+                          Decls))));
+             end if;
+          end if;
+ 
+          Append_List_To (Non_Asynchronous_Statements,
+            After_Statements);
+ 
+          if Is_Known_Asynchronous then
+             Append_List_To (Statements, Asynchronous_Statements);
+ 
+          elsif Is_Known_Non_Asynchronous then
+             Append_List_To (Statements, Non_Asynchronous_Statements);
+ 
+          else
+             pragma Assert (Present (Asynchronous));
+             Append_To (Statements,
+               Make_Implicit_If_Statement (Nod,
+                 Condition       => Asynchronous,
+                 Then_Statements => Asynchronous_Statements,
+                 Else_Statements => Non_Asynchronous_Statements));
+          end if;
+       end Build_General_Calling_Stubs;
+ 
+       -----------------------
+       -- Build_Stub_Target --
+       -----------------------
+ 
+       function Build_Stub_Target
+         (Loc                   : Source_Ptr;
+          Decls                 : List_Id;
+          RCI_Locator           : Entity_Id;
+          Controlling_Parameter : Entity_Id) return RPC_Target
+       is
+          Target_Info : RPC_Target (PCS_Kind => Name_PolyORB_DSA);
+          Target_Reference : constant Entity_Id :=
+                               Make_Defining_Identifier (Loc,
+                                 New_Internal_Name ('T'));
+       begin
+          if Present (Controlling_Parameter) then
+             Append_To (Decls,
+               Make_Object_Declaration (Loc,
+                 Defining_Identifier => Target_Reference,
+                 Object_Definition   =>
+                   New_Occurrence_Of (RTE (RE_Object_Ref), Loc),
+                 Expression          =>
+                   Make_Function_Call (Loc,
+                     Name =>
+                       New_Occurrence_Of (RTE (RE_Make_Ref), Loc),
+                     Parameter_Associations => New_List (
+                       Make_Selected_Component (Loc,
+                         Prefix        => Controlling_Parameter,
+                         Selector_Name => Name_Target)))));
+             --  Controlling_Parameter has the same components
+             --  as System.Partition_Interface.RACW_Stub_Type.
+ 
+             Target_Info.Object := New_Occurrence_Of (Target_Reference, Loc);
+ 
+          else
+             Target_Info.Object :=
+               Make_Selected_Component (Loc,
+                 Prefix        =>
+                   Make_Identifier (Loc, Chars (RCI_Locator)),
+                 Selector_Name =>
+                   Make_Identifier (Loc, Name_Get_RCI_Package_Ref));
+          end if;
+          return Target_Info;
+       end Build_Stub_Target;
+ 
+       ---------------------
+       -- Build_Stub_Type --
+       ---------------------
+ 
+       procedure Build_Stub_Type
+         (RACW_Type         : Entity_Id;
+          Stub_Type         : Entity_Id;
+          Stub_Type_Decl    : out Node_Id;
+          RPC_Receiver_Decl : out Node_Id)
+       is
+          Loc : constant Source_Ptr := Sloc (Stub_Type);
+          pragma Warnings (Off);
+          pragma Unreferenced (RACW_Type);
+          pragma Warnings (On);
+ 
+       begin
+          Stub_Type_Decl :=
+            Make_Full_Type_Declaration (Loc,
+              Defining_Identifier => Stub_Type,
+              Type_Definition     =>
+                Make_Record_Definition (Loc,
+                  Tagged_Present  => True,
+                  Limited_Present => True,
+                  Component_List  =>
+                    Make_Component_List (Loc,
+                      Component_Items => New_List (
+ 
+                        Make_Component_Declaration (Loc,
+                          Defining_Identifier =>
+                            Make_Defining_Identifier (Loc, Name_Target),
+                          Component_Definition =>
+                            Make_Component_Definition (Loc,
+                              Aliased_Present     =>
+                                False,
+                              Subtype_Indication  =>
+                                New_Occurrence_Of (RTE (RE_Entity_Ptr), Loc))),
+ 
+                        Make_Component_Declaration (Loc,
+                          Defining_Identifier =>
+                            Make_Defining_Identifier (Loc, Name_Asynchronous),
+                          Component_Definition =>
+                            Make_Component_Definition (Loc,
+                              Aliased_Present    => False,
+                              Subtype_Indication =>
+                                New_Occurrence_Of (
+                                  Standard_Boolean, Loc)))))));
+ 
+          RPC_Receiver_Decl :=
+            Make_Object_Declaration (Loc,
+              Defining_Identifier => Make_Defining_Identifier (Loc,
+                                       New_Internal_Name ('R')),
+              Aliased_Present     => True,
+              Object_Definition   =>
+                New_Occurrence_Of (RTE (RE_Servant), Loc));
+       end Build_Stub_Type;
+ 
+       -----------------------------
+       -- Build_RPC_Receiver_Body --
+       -----------------------------
+ 
+       procedure Build_RPC_Receiver_Body
+         (RPC_Receiver : Entity_Id;
+          Request      : out Entity_Id;
+          Subp_Id      : out Entity_Id;
+          Subp_Index   : out Entity_Id;
+          Stmts        : out List_Id;
+          Decl         : out Node_Id)
+       is
+          Loc : constant Source_Ptr := Sloc (RPC_Receiver);
+ 
+          RPC_Receiver_Spec  : Node_Id;
+          RPC_Receiver_Decls : List_Id;
+ 
+       begin
+          Request := Make_Defining_Identifier (Loc, Name_R);
+ 
+          RPC_Receiver_Spec :=
+            Build_RPC_Receiver_Specification (
+              RPC_Receiver      => RPC_Receiver,
+              Request_Parameter => Request);
+ 
+          Subp_Id    := Make_Defining_Identifier (Loc, Name_P);
+          Subp_Index := Make_Defining_Identifier (Loc, Name_I);
+ 
+          RPC_Receiver_Decls := New_List (
+            Make_Object_Renaming_Declaration (Loc,
+              Defining_Identifier => Subp_Id,
+              Subtype_Mark        => New_Occurrence_Of (Standard_String, Loc),
+              Name                =>
+                Make_Explicit_Dereference (Loc,
+                  Prefix =>
+                    Make_Selected_Component (Loc,
+                      Prefix        => Request,
+                      Selector_Name => Name_Operation))),
+ 
+            Make_Object_Declaration (Loc,
+              Defining_Identifier => Subp_Index,
+              Object_Definition   =>
+                New_Occurrence_Of (RTE (RE_Subprogram_Id), Loc),
+              Expression          =>
+                Make_Attribute_Reference (Loc,
+                  Prefix         =>
+                    New_Occurrence_Of (RTE (RE_Subprogram_Id), Loc),
+                  Attribute_Name => Name_Last)));
+ 
+          Stmts := New_List;
+ 
+          Decl :=
+            Make_Subprogram_Body (Loc,
+              Specification              => RPC_Receiver_Spec,
+              Declarations               => RPC_Receiver_Decls,
+              Handled_Statement_Sequence =>
+                Make_Handled_Sequence_Of_Statements (Loc,
+                  Statements => Stmts));
+       end Build_RPC_Receiver_Body;
+ 
+       --------------------------------------
+       -- Build_Subprogram_Receiving_Stubs --
+       --------------------------------------
+ 
+       function Build_Subprogram_Receiving_Stubs
+         (Vis_Decl                 : Node_Id;
+          Asynchronous             : Boolean;
+          Dynamically_Asynchronous : Boolean   := False;
+          Stub_Type                : Entity_Id := Empty;
+          RACW_Type                : Entity_Id := Empty;
+          Parent_Primitive         : Entity_Id := Empty) return Node_Id
+       is
+          Loc : constant Source_Ptr := Sloc (Vis_Decl);
+ 
+          Request_Parameter : Node_Id;
+          --  ???
+ 
+          Outer_Decls : constant List_Id := New_List;
+          --  At the outermost level, an NVList and Any's are
+          --  declared for all parameters. The Dynamic_Async
+          --  flag also needs to be declared there to be visible
+          --  from the exception handling code.
+ 
+          Outer_Statements : constant List_Id := New_List;
+          --  Statements that occur prior to the declaration of the actual
+          --  parameter variables.
+ 
+          Decls : constant List_Id := New_List;
+          --  All the parameters will get declared before calling the real
+          --  subprograms. Also the out parameters will be declared.
+          --  At this level, parameters may be unconstrained.
+ 
+          Statements : constant List_Id := New_List;
+ 
+          Extra_Formal_Statements : constant List_Id := New_List;
+          --  Statements concerning extra formal parameters
+ 
+          After_Statements : constant List_Id := New_List;
+          --  Statements to be executed after the subprogram call
+ 
+          Inner_Decls : List_Id := No_List;
+          --  In case of a function, the inner declarations are needed since
+          --  the result may be unconstrained.
+ 
+          Excep_Handlers : List_Id := No_List;
+ 
+          Parameter_List : constant List_Id := New_List;
+          --  List of parameters to be passed to the subprogram
+ 
+          First_Controlling_Formal_Seen : Boolean := False;
+ 
+          Current_Parameter : Node_Id;
+ 
+          Ordered_Parameters_List : constant List_Id :=
+                                      Build_Ordered_Parameters_List
+                                        (Specification (Vis_Decl));
+ 
+          Arguments : Node_Id;
+          --  Name of the named values list used to retrieve parameters
+ 
+          Subp_Spec : Node_Id;
+          --  Subprogram specification
+ 
+          Called_Subprogram : Node_Id;
+          --  The subprogram to call
+ 
+       begin
+          if Present (RACW_Type) then
+             Called_Subprogram :=
+               New_Occurrence_Of (Parent_Primitive, Loc);
+          else
+             Called_Subprogram :=
+               New_Occurrence_Of (
+                 Defining_Unit_Name (Specification (Vis_Decl)), Loc);
+          end if;
+ 
+          Request_Parameter :=
+            Make_Defining_Identifier (Loc, New_Internal_Name ('R'));
+ 
+          Arguments :=
+            Make_Defining_Identifier (Loc, New_Internal_Name ('A'));
+          Declare_Create_NVList (Loc, Arguments, Outer_Decls, Outer_Statements);
+ 
+          --  Loop through every parameter and get its value from the stream. If
+          --  the parameter is unconstrained, then the parameter is read using
+          --  'Input at the point of declaration.
+ 
+          Current_Parameter := First (Ordered_Parameters_List);
+          while Present (Current_Parameter) loop
+             declare
+                Etyp        : Entity_Id;
+                Constrained : Boolean;
+                Any         : Entity_Id := Empty;
+                Object      : constant Entity_Id :=
+                                Make_Defining_Identifier (Loc,
+                                  New_Internal_Name ('P'));
+                Expr        : Node_Id   := Empty;
+ 
+                Is_Controlling_Formal : constant Boolean
+                  := Is_RACW_Controlling_Formal (Current_Parameter, Stub_Type);
+ 
+                Is_First_Controlling_Formal : Boolean := False;
+             begin
+                Set_Ekind (Object, E_Variable);
+ 
+                if Is_Controlling_Formal then
+ 
+                   --  Controlling formals in distributed object primitive
+                   --  operations are handled specially:
+                   --    - the first controlling formal is used as the
+                   --      target of the call;
+                   --    - the remaining controlling formals are transmitted
+                   --      as RACWs.
+ 
+                   Etyp := RACW_Type;
+                   Is_First_Controlling_Formal :=
+                     not First_Controlling_Formal_Seen;
+                   First_Controlling_Formal_Seen := True;
+                else
+                   Etyp := Etype (Parameter_Type (Current_Parameter));
+                end if;
+ 
+                Constrained :=
+                  Is_Constrained (Etyp)
+                  or else Is_Elementary_Type (Etyp);
+ 
+                if not Is_First_Controlling_Formal then
+                   Any := Make_Defining_Identifier (Loc,
+                            New_Internal_Name ('A'));
+                   Append_To (Outer_Decls,
+                     Make_Object_Declaration (Loc,
+                       Defining_Identifier =>
+                         Any,
+                       Object_Definition   =>
+                         New_Occurrence_Of (RTE (RE_Any), Loc),
+                       Expression =>
+                         Make_Function_Call (Loc,
+                           Name =>
+                             New_Occurrence_Of (RTE (RE_Create_Any), Loc),
+                           Parameter_Associations => New_List (
+                             PolyORB_Support.Helpers.Build_TypeCode_Call (Loc,
+                               Etyp, Outer_Decls)))));
+ 
+                   Append_To (Outer_Statements,
+                     Add_Parameter_To_NVList (Loc,
+                       Parameter   => Current_Parameter,
+                       NVList      => Arguments,
+                       Constrained => Constrained,
+                       Any         => Any));
+                end if;
+ 
+                if Is_First_Controlling_Formal then
+                   declare
+                      Addr : constant Entity_Id :=
+                        Make_Defining_Identifier (Loc,
+                          New_Internal_Name ('A'));
+                      Is_Local : constant Entity_Id :=
+                        Make_Defining_Identifier (Loc,
+                          New_Internal_Name ('L'));
+                   begin
+ 
+                      --  Special case: obtain the first controlling
+                      --  formal from the target of the remote call,
+                      --  instead of the argument list.
+ 
+                      Append_To (Outer_Decls,
+                        Make_Object_Declaration (Loc,
+                          Defining_Identifier =>
+                            Addr,
+                          Object_Definition =>
+                            New_Occurrence_Of (RTE (RE_Address), Loc)));
+                      Append_To (Outer_Decls,
+                        Make_Object_Declaration (Loc,
+                          Defining_Identifier =>
+                            Is_Local,
+                          Object_Definition =>
+                            New_Occurrence_Of (Standard_Boolean, Loc)));
+                      Append_To (Outer_Statements,
+                        Make_Procedure_Call_Statement (Loc,
+                          Name =>
+                            New_Occurrence_Of (
+                              RTE (RE_Get_Local_Address), Loc),
+                          Parameter_Associations => New_List (
+                            Make_Selected_Component (Loc,
+                              Prefix =>
+                                New_Occurrence_Of (
+                                  Request_Parameter, Loc),
+                              Selector_Name =>
+                                Make_Identifier (Loc, Name_Target)),
+                            New_Occurrence_Of (Is_Local, Loc),
+                            New_Occurrence_Of (Addr, Loc))));
+ 
+                      Expr := Unchecked_Convert_To (RACW_Type,
+                        New_Occurrence_Of (Addr, Loc));
+                   end;
+ 
+                elsif In_Present (Current_Parameter)
+                   or else not Out_Present (Current_Parameter)
+                   or else not Constrained
+                then
+                   --  If an input parameter is contrained, then its reading is
+                   --  deferred until the beginning of the subprogram body. If
+                   --  it is unconstrained, then an expression is built for
+                   --  the object declaration and the variable is set using
+                   --  'Input instead of 'Read.
+ 
+                   Expr := PolyORB_Support.Helpers.Build_From_Any_Call (
+                             Etyp, New_Occurrence_Of (Any, Loc), Decls);
+ 
+                   if Constrained then
+ 
+                      Append_To (Statements,
+                        Make_Assignment_Statement (Loc,
+                          Name =>
+                            New_Occurrence_Of (Object, Loc),
+                          Expression =>
+                             Expr));
+                      Expr := Empty;
+                   else
+                      null;
+                      --  Expr will be used to initialize (and constrain)
+                      --  the parameter when it is declared.
+                   end if;
+ 
+                end if;
+ 
+                --  If we do not have to output the current parameter, then
+                --  it can well be flagged as constant. This may allow further
+                --  optimizations done by the back end.
+ 
+                Append_To (Decls,
+                  Make_Object_Declaration (Loc,
+                    Defining_Identifier => Object,
+                    Constant_Present    => not Constrained
+                      and then not Out_Present (Current_Parameter),
+                    Object_Definition   =>
+                      New_Occurrence_Of (Etyp, Loc),
+                    Expression          => Expr));
+                Set_Etype (Object, Etyp);
+ 
+                --  An out parameter may be written back using a 'Write
+                --  attribute instead of a 'Output because it has been
+                --  constrained by the parameter given to the caller. Note that
+                --  out controlling arguments in the case of a RACW are not put
+                --  back in the stream because the pointer on them has not
+                --  changed.
+ 
+                if Out_Present (Current_Parameter)
+                  and then not Is_Controlling_Formal
+                then
+                   Append_To (After_Statements,
+                     Make_Procedure_Call_Statement (Loc,
+                       Name =>
+                         New_Occurrence_Of (RTE (RE_Copy_Any_Value), Loc),
+                       Parameter_Associations => New_List (
+                         New_Occurrence_Of (Any, Loc),
+                         PolyORB_Support.Helpers.Build_To_Any_Call (
+                           New_Occurrence_Of (Object, Loc),
+                           Decls))));
+                end if;
+ 
+                --  For RACW controlling formals, the Etyp of Object is always
+                --  an RACW, even if the parameter is not of an anonymous access
+                --  type. In such case, we need to dereference it at call time.
+ 
+                if Is_Controlling_Formal then
+                   if Nkind (Parameter_Type (Current_Parameter)) /=
+                     N_Access_Definition
+                   then
+                      Append_To (Parameter_List,
+                        Make_Parameter_Association (Loc,
+                          Selector_Name             =>
+                            New_Occurrence_Of (
+                              Defining_Identifier (Current_Parameter), Loc),
+                          Explicit_Actual_Parameter =>
+                            Make_Explicit_Dereference (Loc,
+                              Unchecked_Convert_To (RACW_Type,
+                                OK_Convert_To (RTE (RE_Address),
+                                  New_Occurrence_Of (Object, Loc))))));
+ 
+                   else
+                      Append_To (Parameter_List,
+                        Make_Parameter_Association (Loc,
+                          Selector_Name             =>
+                            New_Occurrence_Of (
+                              Defining_Identifier (Current_Parameter), Loc),
+                          Explicit_Actual_Parameter =>
+                            Unchecked_Convert_To (RACW_Type,
+                              OK_Convert_To (RTE (RE_Address),
+                                New_Occurrence_Of (Object, Loc)))));
+                   end if;
+ 
+                else
+                   Append_To (Parameter_List,
+                     Make_Parameter_Association (Loc,
+                       Selector_Name             =>
+                         New_Occurrence_Of (
+                           Defining_Identifier (Current_Parameter), Loc),
+                       Explicit_Actual_Parameter =>
+                         New_Occurrence_Of (Object, Loc)));
+                end if;
+ 
+                --  If the current parameter needs an extra formal, then read it
+                --  from the stream and set the corresponding semantic field in
+                --  the variable. If the kind of the parameter identifier is
+                --  E_Void, then this is a compiler generated parameter that
+                --  doesn't need an extra constrained status.
+ 
+                --  The case of Extra_Accessibility should also be handled ???
+ 
+                if Nkind (Parameter_Type (Current_Parameter)) /=
+                                                          N_Access_Definition
+                  and then
+                    Ekind (Defining_Identifier (Current_Parameter)) /= E_Void
+                  and then
+                    Present (Extra_Constrained
+                      (Defining_Identifier (Current_Parameter)))
+                then
+                   declare
+                      Extra_Parameter : constant Entity_Id :=
+                                          Extra_Constrained
+                                            (Defining_Identifier
+                                              (Current_Parameter));
+                      Extra_Any : constant Entity_Id :=
+                        Make_Defining_Identifier
+                          (Loc, New_Internal_Name ('A'));
+                      Formal_Entity : constant Entity_Id :=
+                                        Make_Defining_Identifier
+                                            (Loc, Chars (Extra_Parameter));
+ 
+                      Formal_Type : constant Entity_Id :=
+                                      Etype (Extra_Parameter);
+                   begin
+                      Append_To (Outer_Decls,
+                        Make_Object_Declaration (Loc,
+                          Defining_Identifier =>
+                            Extra_Any,
+                          Object_Definition   =>
+                            New_Occurrence_Of (RTE (RE_Any), Loc)));
+ 
+                      Append_To (Outer_Statements,
+                        Add_Parameter_To_NVList (Loc,
+                          Parameter   => Extra_Parameter,
+                          NVList      => Arguments,
+                          Constrained => True,
+                          Any         => Extra_Any));
+ 
+                      Append_To (Decls,
+                        Make_Object_Declaration (Loc,
+                          Defining_Identifier => Formal_Entity,
+                          Object_Definition   =>
+                            New_Occurrence_Of (Formal_Type, Loc)));
+ 
+                      Append_To (Extra_Formal_Statements,
+                        Make_Assignment_Statement (Loc,
+                          Name =>
+                            New_Occurrence_Of (Extra_Parameter, Loc),
+                          Expression =>
+                            PolyORB_Support.Helpers.Build_From_Any_Call (
+                              Etype (Extra_Parameter),
+                              New_Occurrence_Of (Extra_Any, Loc),
+                        Decls)));
+                      Set_Extra_Constrained (Object, Formal_Entity);
+ 
+                   end;
+                end if;
+             end;
+ 
+             Next (Current_Parameter);
+          end loop;
+ 
+          Append_To (Outer_Statements,
+            Make_Procedure_Call_Statement (Loc,
+              Name =>
+                New_Occurrence_Of (RTE (RE_Request_Arguments), Loc),
+              Parameter_Associations => New_List (
+                New_Occurrence_Of (Request_Parameter, Loc),
+                New_Occurrence_Of (Arguments, Loc))));
+ 
+          Append_List_To (Statements, Extra_Formal_Statements);
+ 
+          if Nkind (Specification (Vis_Decl)) = N_Function_Specification then
+ 
+             --  The remote subprogram is a function. We build an inner block to
+             --  be able to hold a potentially unconstrained result in a
+             --  variable.
+ 
+             declare
+                Etyp   : constant Entity_Id :=
+                           Etype (Subtype_Mark (Specification (Vis_Decl)));
+                Result : constant Node_Id   :=
+                           Make_Defining_Identifier (Loc,
+                             New_Internal_Name ('R'));
+             begin
+                Inner_Decls := New_List (
+                  Make_Object_Declaration (Loc,
+                    Defining_Identifier => Result,
+                    Constant_Present    => True,
+                    Object_Definition   => New_Occurrence_Of (Etyp, Loc),
+                    Expression          =>
+                      Make_Function_Call (Loc,
+                        Name                   => Called_Subprogram,
+                        Parameter_Associations => Parameter_List)));
+ 
+                Set_Etype (Result, Etyp);
+                Append_To (After_Statements,
+                  Make_Procedure_Call_Statement (Loc,
+                    Name =>
+                      New_Occurrence_Of (RTE (RE_Set_Result), Loc),
+                    Parameter_Associations => New_List (
+                      New_Occurrence_Of (Request_Parameter, Loc),
+                      PolyORB_Support.Helpers.Build_To_Any_Call (
+                        New_Occurrence_Of (Result, Loc),
+                        Decls))));
+                --  A DSA function does not have out or inout arguments
+             end;
+ 
+             Append_To (Statements,
+               Make_Block_Statement (Loc,
+                 Declarations               => Inner_Decls,
+                 Handled_Statement_Sequence =>
+                   Make_Handled_Sequence_Of_Statements (Loc,
+                     Statements => After_Statements)));
+ 
+          else
+             --  The remote subprogram is a procedure. We do not need any inner
+             --  block in this case. No specific processing is required here for
+             --  the dynamically asynchronous case: the indication of whether
+             --  call is asynchronous or not is managed by the Sync_Scope
+             --  attibute of the request, and is handled entirely in the
+             --  protocol layer.
+ 
+             Append_To (After_Statements,
+               Make_Procedure_Call_Statement (Loc,
+                 Name =>
+                   New_Occurrence_Of (RTE (RE_Request_Set_Out), Loc),
+                 Parameter_Associations => New_List (
+                   New_Occurrence_Of (Request_Parameter, Loc))));
+ 
+             Append_To (Statements,
+               Make_Procedure_Call_Statement (Loc,
+                 Name                   => Called_Subprogram,
+                 Parameter_Associations => Parameter_List));
+ 
+             Append_List_To (Statements, After_Statements);
+          end if;
+ 
+          Subp_Spec :=
+            Make_Procedure_Specification (Loc,
+              Defining_Unit_Name       =>
+                Make_Defining_Identifier (Loc, New_Internal_Name ('F')),
+ 
+              Parameter_Specifications => New_List (
+                Make_Parameter_Specification (Loc,
+                  Defining_Identifier => Request_Parameter,
+                  Parameter_Type      =>
+                    New_Occurrence_Of (RTE (RE_Request_Access), Loc))));
+ 
+          --  An exception raised during the execution of an incoming
+          --  remote subprogram call and that needs to be sent back
+          --  to the caller is propagated by the receiving stubs, and
+          --  will be handled by the caller (the distribution runtime).
+ 
+          if Asynchronous and then not Dynamically_Asynchronous then
+ 
+             --  For an asynchronous procedure, add a null exception handler
+ 
+             Excep_Handlers := New_List (
+               Make_Exception_Handler (Loc,
+                 Exception_Choices => New_List (Make_Others_Choice (Loc)),
+                 Statements        => New_List (Make_Null_Statement (Loc))));
+ 
+          else
+ 
+             --  In the other cases, if an exception is raised, then the
+             --  exception occurrence is propagated.
+ 
+             null;
+          end if;
+ 
+          Append_To (Outer_Statements,
+            Make_Block_Statement (Loc,
+              Declarations =>
+                Decls,
+              Handled_Statement_Sequence =>
+                Make_Handled_Sequence_Of_Statements (Loc,
+                  Statements => Statements)));
+ 
+          return
+            Make_Subprogram_Body (Loc,
+              Specification              => Subp_Spec,
+              Declarations               => Outer_Decls,
+              Handled_Statement_Sequence =>
+                Make_Handled_Sequence_Of_Statements (Loc,
+                  Statements         => Outer_Statements,
+                  Exception_Handlers => Excep_Handlers));
+       end Build_Subprogram_Receiving_Stubs;
+       -------------
+       -- Helpers --
+       -------------
+ 
+       package body Helpers is
+ 
+          -----------------------
+          -- Local Subprograms --
+          -----------------------
+ 
+          function Find_Inherited_TSS
+            (Typ : Entity_Id;
+             Nam : Name_Id) return Entity_Id;
+          --  A TSS reference for a representation aspect of a derived tagged
+          --  type must take into account inheritance of that aspect from
+          --  ancestor types. (copied from exp_attr.adb, should be shared???)
+ 
+          function Find_Numeric_Representation
+            (Typ : Entity_Id) return Entity_Id;
+          --  Given a numeric type Typ, return the smallest integer or floarting
+          --  point type from Standard, or the smallest unsigned (modular) type
+          --  from System.Unsigned_Types, whose range encompasses that of Typ.
+ 
+          function Make_Stream_Procedure_Function_Name
+            (Loc : Source_Ptr;
+             Typ : Entity_Id;
+             Nam : Name_Id) return Entity_Id;
+          --  Return the name to be assigned for stream subprogram Nam of Typ.
+          --  (copied from exp_strm.adb, should be shared???)
+ 
+          ------------------------------------------------------------
+          -- Common subprograms for building various tree fragments --
+          ------------------------------------------------------------
+ 
+          function Build_Get_Aggregate_Element
+            (Loc : Source_Ptr;
+             Any : Entity_Id;
+             TC  : Node_Id;
+             Idx : Node_Id) return Node_Id;
+          --  Build a call to Get_Aggregate_Element on Any
+          --  for typecode TC, returning the Idx'th element.
+ 
+          generic
+             Subprogram : Entity_Id;
+             --  Reference location for constructed nodes
+ 
+             Arry : Entity_Id;
+             --  For 'Range and Etype
+ 
+             Indices : List_Id;
+             --  For the construction of the innermost element expression
+ 
+             with procedure Add_Process_Element
+               (Stmts   : List_Id;
+                Any     : Entity_Id;
+                Counter : Entity_Id;
+                Datum   : Node_Id);
+ 
+          procedure Append_Array_Traversal
+            (Stmts   : List_Id;
+             Any     : Entity_Id;
+             Counter : Entity_Id := Empty;
+             Depth   : Pos       := 1);
+          --  Build nested loop statements that iterate over the elements of an
+          --  array Arry. The statement(s) built by Add_Process_Element are
+          --  executed for each element; Indices is the list of indices to be
+          --  used in the construction of the indexed component that denotes the
+          --  current element. Subprogram is the entity for the subprogram for
+          --  which this iterator is generated. The generated statements are
+          --  appended to Stmts.
+ 
+          generic
+             Rec : Entity_Id;
+             --  The record entity being dealt with
+ 
+             with procedure Add_Process_Element
+               (Stmts     : List_Id;
+                Container : Node_Or_Entity_Id;
+                Counter   : in out Int;
+                Rec       : Entity_Id;
+                Field     : Node_Id);
+             --  Rec is the instance of the record type, or Empty.
+             --  Field is either the N_Defining_Identifier for a component,
+             --  or an N_Variant_Part.
+ 
+          procedure Append_Record_Traversal
+            (Stmts     : List_Id;
+             Clist     : Node_Id;
+             Container : Node_Or_Entity_Id;
+             Counter   : in out Int);
+          --  Process component list Clist. Individual fields are passed
+          --  to Field_Processing. Each variant part is also processed.
+          --  Container is the outer Any (for From_Any/To_Any),
+          --  the outer typecode (for TC) to which the operation applies.
+ 
+          -----------------------------
+          -- Append_Record_Traversal --
+          -----------------------------
+ 
+          procedure Append_Record_Traversal
+            (Stmts     : List_Id;
+             Clist     : Node_Id;
+             Container : Node_Or_Entity_Id;
+             Counter   : in out Int)
+          is
+             CI : constant List_Id := Component_Items (Clist);
+             VP : constant Node_Id := Variant_Part (Clist);
+ 
+             Item : Node_Id := First (CI);
+             Def  : Entity_Id;
+ 
+          begin
+             while Present (Item) loop
+                Def := Defining_Identifier (Item);
+                if not Is_Internal_Name (Chars (Def)) then
+                   Add_Process_Element
+                     (Stmts, Container, Counter, Rec, Def);
+                end if;
+                Next (Item);
+             end loop;
+ 
+             if Present (VP) then
+                Add_Process_Element (Stmts, Container, Counter, Rec, VP);
+             end if;
+          end Append_Record_Traversal;
+ 
+          -------------------------
+          -- Build_From_Any_Call --
+          -------------------------
+ 
+          function Build_From_Any_Call
+            (Typ   : Entity_Id;
+             N     : Node_Id;
+             Decls : List_Id) return Node_Id
+          is
+             Loc : constant Source_Ptr := Sloc (N);
+ 
+             U_Type : Entity_Id  := Underlying_Type (Typ);
+ 
+             Fnam    : Entity_Id := Empty;
+             Lib_RE  : RE_Id := RE_Null;
+ 
+          begin
+ 
+             --  First simple case where the From_Any function is present
+             --  in the type's TSS.
+ 
+             Fnam := Find_Inherited_TSS (U_Type, Name_uFrom_Any);
+ 
+             if Sloc (U_Type) <= Standard_Location then
+                U_Type := Base_Type (U_Type);
+             end if;
+ 
+             --  Check first for Boolean and Character. These are enumeration
+             --  types, but we treat them specially, since they may require
+             --  special handling in the transfer protocol. However, this
+             --  special handling only applies if they have standard
+             --  representation, otherwise they are treated like any other
+             --  enumeration type.
+ 
+             if Present (Fnam) then
+                null;
+ 
+             elsif U_Type = Standard_Boolean then
+                Lib_RE := RE_FA_B;
+ 
+             elsif U_Type = Standard_Character then
+                Lib_RE := RE_FA_C;
+ 
+             elsif U_Type = Standard_Wide_Character then
+                Lib_RE := RE_FA_WC;
+ 
+             elsif U_Type = Standard_Wide_Wide_Character then
+                Lib_RE := RE_FA_WWC;
+ 
+             --  Floating point types
+ 
+             elsif U_Type = Standard_Short_Float then
+                Lib_RE := RE_FA_SF;
+ 
+             elsif U_Type = Standard_Float then
+                Lib_RE := RE_FA_F;
+ 
+             elsif U_Type = Standard_Long_Float then
+                Lib_RE := RE_FA_LF;
+ 
+             elsif U_Type = Standard_Long_Long_Float then
+                Lib_RE := RE_FA_LLF;
+ 
+             --  Integer types
+ 
+             elsif U_Type = Etype (Standard_Short_Short_Integer) then
+                   Lib_RE := RE_FA_SSI;
+ 
+             elsif U_Type = Etype (Standard_Short_Integer) then
+                Lib_RE := RE_FA_SI;
+ 
+             elsif U_Type = Etype (Standard_Integer) then
+                Lib_RE := RE_FA_I;
+ 
+             elsif U_Type = Etype (Standard_Long_Integer) then
+                Lib_RE := RE_FA_LI;
+ 
+             elsif U_Type = Etype (Standard_Long_Long_Integer) then
+                Lib_RE := RE_FA_LLI;
+ 
+             --  Unsigned integer types
+ 
+             elsif U_Type = RTE (RE_Short_Short_Unsigned) then
+                Lib_RE := RE_FA_SSU;
+ 
+             elsif U_Type = RTE (RE_Short_Unsigned) then
+                Lib_RE := RE_FA_SU;
+ 
+             elsif U_Type = RTE (RE_Unsigned) then
+                Lib_RE := RE_FA_U;
+ 
+             elsif U_Type = RTE (RE_Long_Unsigned) then
+                Lib_RE := RE_FA_LU;
+ 
+             elsif U_Type = RTE (RE_Long_Long_Unsigned) then
+                Lib_RE := RE_FA_LLU;
+ 
+             elsif U_Type = Standard_String then
+                Lib_RE := RE_FA_String;
+ 
+             --  Other (non-primitive) types
+ 
+             else
+                declare
+                   Decl : Entity_Id;
+                begin
+                   Build_From_Any_Function (Loc, U_Type, Decl, Fnam);
+                   Append_To (Decls, Decl);
+                end;
+             end if;
+ 
+             --  Call the function
+ 
+             if Lib_RE /= RE_Null then
+                pragma Assert (No (Fnam));
+                Fnam := RTE (Lib_RE);
+             end if;
+ 
+             return
+                 Make_Function_Call (Loc,
+                   Name => New_Occurrence_Of (Fnam, Loc),
+                   Parameter_Associations => New_List (N));
+          end Build_From_Any_Call;
+ 
+          -----------------------------
+          -- Build_From_Any_Function --
+          -----------------------------
+ 
+          procedure Build_From_Any_Function
+            (Loc  : Source_Ptr;
+             Typ  : Entity_Id;
+             Decl : out Node_Id;
+             Fnam : out Entity_Id)
+          is
+             Spec : Node_Id;
+             Decls : constant List_Id := New_List;
+             Stms : constant List_Id := New_List;
+             Any_Parameter : constant Entity_Id
+               := Make_Defining_Identifier (Loc, New_Internal_Name ('A'));
+          begin
+             Fnam := Make_Stream_Procedure_Function_Name (Loc,
+                       Typ, Name_uFrom_Any);
+ 
+             Spec :=
+               Make_Function_Specification (Loc,
+                 Defining_Unit_Name => Fnam,
+                 Parameter_Specifications => New_List (
+                   Make_Parameter_Specification (Loc,
+                     Defining_Identifier =>
+                       Any_Parameter,
+                     Parameter_Type =>
+                       New_Occurrence_Of (RTE (RE_Any), Loc))),
+                 Subtype_Mark => New_Occurrence_Of (Typ, Loc));
+ 
+             --  The following  is taken care of by Exp_Dist.Add_RACW_From_Any
+ 
+             pragma Assert
+               (not (Is_Remote_Access_To_Class_Wide_Type (Typ)));
+ 
+ 
+             if Is_Derived_Type (Typ)
+               and then not Is_Tagged_Type (Typ)
+             then
+                Append_To (Stms,
+                  Make_Return_Statement (Loc,
+                    Expression =>
+                      OK_Convert_To (
+                        Typ,
+                        Build_From_Any_Call (
+                          Root_Type (Typ),
+                          New_Occurrence_Of (Any_Parameter, Loc),
+                          Decls))));
+ 
+             elsif Is_Record_Type (Typ)
+               and then not Is_Derived_Type (Typ)
+               and then not Is_Tagged_Type (Typ)
+             then
+                if Nkind (Declaration_Node (Typ)) = N_Subtype_Declaration then
+                   Append_To (Stms,
+                     Make_Return_Statement (Loc,
+                       Expression =>
+                         OK_Convert_To (
+                           Typ,
+                           Build_From_Any_Call (
+                             Etype (Typ),
+                             New_Occurrence_Of (Any_Parameter, Loc),
+                             Decls))));
+                else
+                   declare
+                      Disc : Entity_Id := Empty;
+                      Discriminant_Associations : List_Id;
+                      Rdef : constant Node_Id :=
+                        Type_Definition (Declaration_Node (Typ));
+                      Component_Counter : Int := 0;
+ 
+                      --  The returned object
+ 
+                      Res : constant Entity_Id :=
+                              Make_Defining_Identifier (Loc,
+                                New_Internal_Name ('R'));
+ 
+                      Res_Definition : Node_Id := New_Occurrence_Of (Typ, Loc);
+ 
+                      procedure FA_Rec_Add_Process_Element
+                        (Stmts   : List_Id;
+                         Any     : Entity_Id;
+                         Counter : in out Int;
+                         Rec     : Entity_Id;
+                         Field   : Node_Id);
+ 
+                      procedure FA_Append_Record_Traversal is
+                         new Append_Record_Traversal
+                        (Rec                 => Res,
+                         Add_Process_Element => FA_Rec_Add_Process_Element);
+ 
+                      --------------------------------
+                      -- FA_Rec_Add_Process_Element --
+                      --------------------------------
+ 
+                      procedure FA_Rec_Add_Process_Element
+                        (Stmts   : List_Id;
+                         Any     : Entity_Id;
+                         Counter : in out Int;
+                         Rec     : Entity_Id;
+                         Field   : Node_Id)
+                      is
+                      begin
+                         if Nkind (Field) = N_Defining_Identifier then
+ 
+                            --  A regular component
+ 
+                            Append_To (Stmts,
+                              Make_Assignment_Statement (Loc,
+                                Name => Make_Selected_Component (Loc,
+                                  Prefix        =>
+                                    New_Occurrence_Of (Rec, Loc),
+                                  Selector_Name =>
+                                    New_Occurrence_Of (Field, Loc)),
+                                Expression =>
+                                  Build_From_Any_Call (Etype (Field),
+                                    Build_Get_Aggregate_Element (Loc,
+                                      Any => Any,
+                                      Tc  => Build_TypeCode_Call (Loc,
+                                               Etype (Field), Decls),
+                                      Idx => Make_Integer_Literal (Loc,
+                                               Counter)),
+                                    Decls)));
+ 
+                         else
+                            --  A variant part
+ 
+                            declare
+                               Variant : Node_Id;
+                               Struct_Counter : Int := 0;
+ 
+                               Block_Decls : constant List_Id := New_List;
+                               Block_Stmts : constant List_Id := New_List;
+                               VP_Stmts    : List_Id;
+ 
+                               Alt_List    : constant List_Id := New_List;
+                               Choice_List : List_Id;
+ 
+                               Struct_Any : constant Entity_Id :=
+                                              Make_Defining_Identifier (Loc,
+                                                New_Internal_Name ('S'));
+ 
+                            begin
+                               Append_To (Decls,
+                                 Make_Object_Declaration (Loc,
+                                   Defining_Identifier =>
+                                     Struct_Any,
+                                   Constant_Present =>
+                                      True,
+                                   Object_Definition =>
+                                      New_Occurrence_Of (RTE (RE_Any), Loc),
+                                   Expression =>
+                                     Make_Function_Call (Loc,
+                                       Name => New_Occurrence_Of (
+                                         RTE (RE_Extract_Union_Value), Loc),
+                                       Parameter_Associations => New_List (
+                                         Build_Get_Aggregate_Element (Loc,
+                                           Any => Any,
+                                           Tc  => Make_Function_Call (Loc,
+                                             Name => New_Occurrence_Of (
+                                               RTE (RE_Any_Member_Type), Loc),
+                                             Parameter_Associations =>
+                                               New_List (
+                                                 New_Occurrence_Of (Any, Loc),
+                                                 Make_Integer_Literal (Loc,
+                                                   Counter))),
+                                           Idx => Make_Integer_Literal (Loc,
+                                             Counter))))));
+ 
+                               Append_To (Stmts,
+                                 Make_Block_Statement (Loc,
+                                   Declarations =>
+                                     Block_Decls,
+                                   Handled_Statement_Sequence =>
+                                     Make_Handled_Sequence_Of_Statements (Loc,
+                                       Statements => Block_Stmts)));
+ 
+                               Append_To (Block_Stmts,
+                                 Make_Case_Statement (Loc,
+                                     Expression =>
+                                       Make_Selected_Component (Loc,
+                                         Prefix        => Rec,
+                                         Selector_Name =>
+                                           Chars (Name (Field))),
+                                     Alternatives =>
+                                       Alt_List));
+ 
+                               Variant := First_Non_Pragma (Variants (Field));
+ 
+                               while Present (Variant) loop
+                                  Choice_List := New_Copy_List_Tree
+                                    (Discrete_Choices (Variant));
+ 
+                                  VP_Stmts := New_List;
+                                  FA_Append_Record_Traversal (
+                                    Stmts     => VP_Stmts,
+                                    Clist     => Component_List (Variant),
+                                    Container => Struct_Any,
+                                    Counter   => Struct_Counter);
+ 
+                                  Append_To (Alt_List,
+                                    Make_Case_Statement_Alternative (Loc,
+                                      Discrete_Choices => Choice_List,
+                                      Statements =>
+                                        VP_Stmts));
+                                  Next_Non_Pragma (Variant);
+                               end loop;
+                            end;
+                         end if;
+                         Counter := Counter + 1;
+                      end FA_Rec_Add_Process_Element;
+ 
+                   begin
+                      --  First all discriminants
+ 
+                      if Has_Discriminants (Typ) then
+                         Disc := First_Discriminant (Typ);
+                         Discriminant_Associations := New_List;
+ 
+                         while Present (Disc) loop
+                            declare
+                               Disc_Var_Name : constant Entity_Id :=
+                                 Make_Defining_Identifier (Loc, Chars (Disc));
+                               Disc_Type : constant Entity_Id :=
+                                 Etype (Disc);
+                            begin
+                               Append_To (Decls,
+                                 Make_Object_Declaration (Loc,
+                                   Defining_Identifier =>
+                                     Disc_Var_Name,
+                                   Constant_Present => True,
+                                   Object_Definition =>
+                                     New_Occurrence_Of (Disc_Type, Loc),
+                                   Expression =>
+                                     Build_From_Any_Call (Etype (Disc),
+                                       Build_Get_Aggregate_Element (Loc,
+                                         Any => Any_Parameter,
+                                         Tc  => Build_TypeCode_Call
+                                                  (Loc, Etype (Disc), Decls),
+                                         Idx => Make_Integer_Literal
+                                                  (Loc, Component_Counter)),
+                                       Decls)));
+                               Component_Counter := Component_Counter + 1;
+ 
+                               Append_To (Discriminant_Associations,
+                                 Make_Discriminant_Association (Loc,
+                                   Selector_Names => New_List (
+                                     New_Occurrence_Of (Disc, Loc)),
+                                   Expression =>
+                                     New_Occurrence_Of (Disc_Var_Name, Loc)));
+                            end;
+                            Next_Discriminant (Disc);
+                         end loop;
+ 
+                         Res_Definition := Make_Subtype_Indication (Loc,
+                           Subtype_Mark => Res_Definition,
+                           Constraint   =>
+                             Make_Index_Or_Discriminant_Constraint (Loc,
+                               Discriminant_Associations));
+                      end if;
+ 
+                      --  Now we have all the discriminants in variables, we can
+                      --  declared a constrained object. Note that we are not
+                      --  initializing (non-discriminant) components directly in
+                      --  the object declarations, because which fields to
+                      --  initialize depends (at run time) on the discriminant
+                      --  values.
+ 
+                      Append_To (Decls,
+                        Make_Object_Declaration (Loc,
+                          Defining_Identifier =>
+                            Res,
+                          Object_Definition =>
+                            Res_Definition));
+ 
+                      --  ... then all components
+ 
+                      FA_Append_Record_Traversal (Stms,
+                        Clist     => Component_List (Rdef),
+                        Container => Any_Parameter,
+                        Counter   => Component_Counter);
+ 
+                      Append_To (Stms,
+                        Make_Return_Statement (Loc,
+                          Expression => New_Occurrence_Of (Res, Loc)));
+                   end;
+                end if;
+ 
+             elsif Is_Array_Type (Typ) then
+                declare
+                   Constrained : constant Boolean := Is_Constrained (Typ);
+ 
+                   procedure FA_Ary_Add_Process_Element
+                     (Stmts   : List_Id;
+                      Any     : Entity_Id;
+                      Counter : Entity_Id;
+                      Datum   : Node_Id);
+                   --  Assign the current element (as identified by Counter) of
+                   --  Any to the variable denoted by name Datum, and advance
+                   --  Counter by 1. If Datum is not an Any, a call to From_Any
+                   --  for its type is inserted.
+ 
+                   --------------------------------
+                   -- FA_Ary_Add_Process_Element --
+                   --------------------------------
+ 
+                   procedure FA_Ary_Add_Process_Element
+                     (Stmts   : List_Id;
+                      Any     : Entity_Id;
+                      Counter : Entity_Id;
+                      Datum   : Node_Id)
+                   is
+                      Assignment : constant Node_Id :=
+                        Make_Assignment_Statement (Loc,
+                          Name       => Datum,
+                          Expression => Empty);
+ 
+                      Element_Any : constant Node_Id :=
+                        Build_Get_Aggregate_Element (Loc,
+                          Any => Any,
+                          Tc  => Build_TypeCode_Call (Loc,
+                                   Etype (Datum), Decls),
+                          Idx => New_Occurrence_Of (Counter, Loc));
+ 
+                   begin
+                      --  Note: here we *prepend* statements to Stmts, so
+                      --  we must do it in reverse order.
+ 
+                      Prepend_To (Stmts,
+                        Make_Assignment_Statement (Loc,
+                          Name =>
+                            New_Occurrence_Of (Counter, Loc),
+                          Expression =>
+                            Make_Op_Add (Loc,
+                              Left_Opnd =>
+                                New_Occurrence_Of (Counter, Loc),
+                              Right_Opnd =>
+                                Make_Integer_Literal (Loc, 1))));
+ 
+                      if Nkind (Datum) /= N_Attribute_Reference then
+ 
+                         --  We ignore the value of the length of each
+                         --  dimension, since the target array has already
+                         --  been constrained anyway.
+ 
+                         if Etype (Datum) /= RTE (RE_Any) then
+                            Set_Expression (Assignment,
+                               Build_From_Any_Call (
+                                 Component_Type (Typ),
+                                 Element_Any,
+                                 Decls));
+                         else
+                            Set_Expression (Assignment, Element_Any);
+                         end if;
+                         Prepend_To (Stmts, Assignment);
+                      end if;
+                   end FA_Ary_Add_Process_Element;
+ 
+                   Counter : constant Entity_Id :=
+                               Make_Defining_Identifier (Loc, Name_J);
+ 
+                   Initial_Counter_Value : Int := 0;
+ 
+                   Component_TC : constant Entity_Id :=
+                                    Make_Defining_Identifier (Loc, Name_T);
+ 
+                   Res : constant Entity_Id :=
+                           Make_Defining_Identifier (Loc, Name_R);
+ 
+                   procedure Append_From_Any_Array_Iterator is
+                     new Append_Array_Traversal (
+                       Subprogram => Fnam,
+                       Arry       => Res,
+                       Indices    => New_List,
+                       Add_Process_Element => FA_Ary_Add_Process_Element);
+ 
+                   Res_Subtype_Indication : Node_Id :=
+                                              New_Occurrence_Of (Typ, Loc);
+ 
+                begin
+                   if not Constrained then
+                      declare
+                         Ndim : constant Int := Number_Dimensions (Typ);
+                         Lnam : Name_Id;
+                         Hnam : Name_Id;
+                         Indx : Node_Id := First_Index (Typ);
+                         Indt : Entity_Id;
+ 
+                         Ranges : constant List_Id := New_List;
+ 
+                      begin
+                         for J in 1 .. Ndim loop
+                            Lnam := New_External_Name ('L', J);
+                            Hnam := New_External_Name ('H', J);
+                            Indt := Etype (Indx);
+ 
+                            Append_To (Decls,
+                              Make_Object_Declaration (Loc,
+                                Defining_Identifier =>
+                                  Make_Defining_Identifier (Loc, Lnam),
+                                Constant_Present    =>
+                                  True,
+                                Object_Definition   =>
+                                  New_Occurrence_Of (Indt, Loc),
+                                Expression          =>
+                                  Build_From_Any_Call (
+                                    Indt,
+                                    Build_Get_Aggregate_Element (Loc,
+                                      Any => Any_Parameter,
+                                      Tc  => Build_TypeCode_Call (Loc,
+                                               Indt, Decls),
+                                      Idx => Make_Integer_Literal (Loc, J - 1)),
+                                    Decls)));
+ 
+                            Append_To (Decls,
+                              Make_Object_Declaration (Loc,
+                                Defining_Identifier =>
+                                  Make_Defining_Identifier (Loc, Hnam),
+                                Constant_Present =>
+                                  True,
+                                Object_Definition =>
+                                  New_Occurrence_Of (Indt, Loc),
+                                Expression => Make_Attribute_Reference (Loc,
+                                  Prefix         =>
+                                    New_Occurrence_Of (Indt, Loc),
+                                  Attribute_Name => Name_Val,
+                                  Expressions    => New_List (
+                                    Make_Op_Subtract (Loc,
+                                      Left_Opnd =>
+                                        Make_Op_Add (Loc,
+                                          Left_Opnd =>
+                                            Make_Attribute_Reference (Loc,
+                                              Prefix         =>
+                                                New_Occurrence_Of (Indt, Loc),
+                                              Attribute_Name =>
+                                                Name_Pos,
+                                              Expressions    => New_List (
+                                                Make_Identifier (Loc, Lnam))),
+                                          Right_Opnd =>
+                                            Make_Function_Call (Loc,
+                                              Name => New_Occurrence_Of (RTE (
+                                                RE_Get_Nested_Sequence_Length),
+                                                Loc),
+                                              Parameter_Associations =>
+                                                New_List (
+                                                  New_Occurrence_Of (
+                                                    Any_Parameter, Loc),
+                                                  Make_Integer_Literal (Loc,
+                                                    J)))),
+                                      Right_Opnd =>
+                                        Make_Integer_Literal (Loc, 1))))));
+ 
+                            Append_To (Ranges,
+                              Make_Range (Loc,
+                                Low_Bound  => Make_Identifier (Loc, Lnam),
+                                High_Bound => Make_Identifier (Loc, Hnam)));
+ 
+                            Next_Index (Indx);
+                         end loop;
+ 
+                         --  Now we have all the necessary bound information:
+                         --  apply the set of range constraints to the
+                         --  (unconstrained) nominal subtype of Res.
+ 
+                         Initial_Counter_Value := Ndim;
+                         Res_Subtype_Indication := Make_Subtype_Indication (Loc,
+                           Subtype_Mark =>
+                             Res_Subtype_Indication,
+                           Constraint   =>
+                             Make_Index_Or_Discriminant_Constraint (Loc,
+                               Constraints => Ranges));
+                      end;
+                   end if;
+ 
+                   Append_To (Decls,
+                     Make_Object_Declaration (Loc,
+                       Defining_Identifier => Res,
+                       Object_Definition => Res_Subtype_Indication));
+                   Set_Etype (Res, Typ);
+ 
+                   Append_To (Decls,
+                     Make_Object_Declaration (Loc,
+                       Defining_Identifier => Counter,
+                       Object_Definition =>
+                         New_Occurrence_Of (RTE (RE_Long_Unsigned), Loc),
+                       Expression =>
+                         Make_Integer_Literal (Loc, Initial_Counter_Value)));
+ 
+                   Append_To (Decls,
+                     Make_Object_Declaration (Loc,
+                       Defining_Identifier => Component_TC,
+                       Constant_Present => True,
+                       Object_Definition =>
+                         New_Occurrence_Of (RTE (RE_TypeCode), Loc),
+                       Expression =>
+                         Build_TypeCode_Call (Loc,
+                           Component_Type (Typ), Decls)));
+ 
+                   Append_From_Any_Array_Iterator (Stms,
+                     Any_Parameter, Counter);
+ 
+                   Append_To (Stms,
+                     Make_Return_Statement (Loc,
+                       Expression => New_Occurrence_Of (Res, Loc)));
+                end;
+ 
+             elsif Is_Integer_Type (Typ) or else Is_Unsigned_Type (Typ) then
+                Append_To (Stms,
+                  Make_Return_Statement (Loc,
+                    Expression =>
+                      Unchecked_Convert_To (
+                        Typ,
+                        Build_From_Any_Call (
+                          Find_Numeric_Representation (Typ),
+                          New_Occurrence_Of (Any_Parameter, Loc),
+                          Decls))));
+ 
+             else
+                --  Default: type is represented as an opaque sequence of bytes
+ 
+                declare
+                   Strm : constant Entity_Id :=
+                            Make_Defining_Identifier (Loc,
+                              Chars => New_Internal_Name ('S'));
+                   Res  : constant Entity_Id :=
+                            Make_Defining_Identifier (Loc,
+                              Chars => New_Internal_Name ('R'));
+ 
+                begin
+                   --  Strm : Buffer_Stream_Type;
+ 
+                   Append_To (Decls,
+                     Make_Object_Declaration (Loc,
+                       Defining_Identifier =>
+                         Strm,
+                       Aliased_Present     =>
+                         True,
+                       Object_Definition   =>
+                         New_Occurrence_Of (RTE (RE_Buffer_Stream_Type), Loc)));
+ 
+                   --  Any_To_BS (Strm, A);
+ 
+                   Append_To (Stms,
+                     Make_Procedure_Call_Statement (Loc,
+                       Name =>
+                         New_Occurrence_Of (RTE (RE_Any_To_BS), Loc),
+                       Parameter_Associations => New_List (
+                         New_Occurrence_Of (Any_Parameter, Loc),
+                         New_Occurrence_Of (Strm, Loc))));
+ 
+                   --  declare
+                   --     Res : constant T := T'Input (Strm);
+                   --  begin
+                   --     Release_Buffer (Strm);
+                   --     return Res;
+                   --  end;
+ 
+                   Append_To (Stms, Make_Block_Statement (Loc,
+                     Declarations => New_List (
+                       Make_Object_Declaration (Loc,
+                         Defining_Identifier => Res,
+                         Constant_Present    => True,
+                         Object_Definition   =>
+                           New_Occurrence_Of (Typ, Loc),
+                         Expression          =>
+                             Make_Attribute_Reference (Loc,
+                               Prefix         => New_Occurrence_Of (Typ, Loc),
+                               Attribute_Name => Name_Input,
+                               Expressions => New_List (
+                                 Make_Attribute_Reference (Loc,
+                                   Prefix => New_Occurrence_Of (Strm, Loc),
+                                   Attribute_Name => Name_Access))))),
+ 
+                     Handled_Statement_Sequence =>
+                       Make_Handled_Sequence_Of_Statements (Loc,
+                         Statements => New_List (
+                           Make_Procedure_Call_Statement (Loc,
+                             Name =>
+                               New_Occurrence_Of (RTE (RE_Release_Buffer), Loc),
+                             Parameter_Associations =>
+                               New_List (
+                                 New_Occurrence_Of (Strm, Loc))),
+                           Make_Return_Statement (Loc,
+                             Expression => New_Occurrence_Of (Res, Loc))))));
+ 
+                end;
+             end if;
+ 
+             Decl :=
+               Make_Subprogram_Body (Loc,
+                 Specification => Spec,
+                 Declarations => Decls,
+                 Handled_Statement_Sequence =>
+                   Make_Handled_Sequence_Of_Statements (Loc,
+                     Statements => Stms));
+          end Build_From_Any_Function;
+ 
+          ---------------------------------
+          -- Build_Get_Aggregate_Element --
+          ---------------------------------
+ 
+          function Build_Get_Aggregate_Element
+            (Loc : Source_Ptr;
+             Any : Entity_Id;
+             TC  : Node_Id;
+             Idx : Node_Id) return Node_Id
+          is
+          begin
+             return Make_Function_Call (Loc,
+               Name =>
+                 New_Occurrence_Of (
+                   RTE (RE_Get_Aggregate_Element), Loc),
+               Parameter_Associations => New_List (
+                 New_Occurrence_Of (Any, Loc),
+                 TC,
+                 Idx));
+          end Build_Get_Aggregate_Element;
+ 
+          -------------------------
+          -- Build_Reposiroty_Id --
+          -------------------------
+ 
+          procedure Build_Name_And_Repository_Id
+            (E           : Entity_Id;
+             Name_Str    : out String_Id;
+             Repo_Id_Str : out String_Id)
+          is
+          begin
+             Start_String;
+             Store_String_Chars ("DSA:");
+             Get_Library_Unit_Name_String (Scope (E));
+             Store_String_Chars (
+               Name_Buffer (Name_Buffer'First
+                 .. Name_Buffer'First + Name_Len - 1));
+             Store_String_Char ('.');
+             Get_Name_String (Chars (E));
+             Store_String_Chars (
+               Name_Buffer (Name_Buffer'First
+                 .. Name_Buffer'First + Name_Len - 1));
+             Store_String_Chars (":1.0");
+             Repo_Id_Str := End_String;
+             Name_Str    := String_From_Name_Buffer;
+          end Build_Name_And_Repository_Id;
+ 
+          -----------------------
+          -- Build_To_Any_Call --
+          -----------------------
+ 
+          function Build_To_Any_Call
+            (N     : Node_Id;
+             Decls : List_Id) return Node_Id
+          is
+             Loc : constant Source_Ptr := Sloc (N);
+ 
+             Typ     : Entity_Id := Etype (N);
+             U_Type  : Entity_Id;
+ 
+             Fnam    : Entity_Id := Empty;
+             Lib_RE  : RE_Id := RE_Null;
+ 
+          begin
+             --  If N is a selected component, then maybe its Etype
+             --  has not been set yet: try to use the Etype of the
+             --  selector_name in that case.
+ 
+             if No (Typ) and then Nkind (N) = N_Selected_Component then
+                Typ := Etype (Selector_Name (N));
+             end if;
+             pragma Assert (Present (Typ));
+ 
+             --  The full view, if Typ is private; the completion,
+             --  if Typ is incomplete.
+ 
+             U_Type := Underlying_Type (Typ);
+ 
+             --  First simple case where the To_Any function is present
+             --  in the type's TSS.
+ 
+             Fnam := Find_Inherited_TSS (U_Type, Name_uTo_Any);
+ 
+             --  Check first for Boolean and Character. These are enumeration
+             --  types, but we treat them specially, since they may require
+             --  special handling in the transfer protocol. However, this
+             --  special handling only applies if they have standard
+             --  representation, otherwise they are treated like any other
+             --  enumeration type.
+ 
+             if Sloc (U_Type) <= Standard_Location then
+                U_Type := Base_Type (U_Type);
+             end if;
+ 
+             if Present (Fnam) then
+                null;
+ 
+             elsif U_Type = Standard_Boolean then
+                Lib_RE := RE_TA_B;
+ 
+             elsif U_Type = Standard_Character then
+                Lib_RE := RE_TA_C;
+ 
+             elsif U_Type = Standard_Wide_Character then
+                Lib_RE := RE_TA_WC;
+ 
+             elsif U_Type = Standard_Wide_Wide_Character then
+                Lib_RE := RE_TA_WWC;
+ 
+             --  Floating point types
+ 
+             elsif U_Type = Standard_Short_Float then
+                Lib_RE := RE_TA_SF;
+ 
+             elsif U_Type = Standard_Float then
+                Lib_RE := RE_TA_F;
+ 
+             elsif U_Type = Standard_Long_Float then
+                Lib_RE := RE_TA_LF;
+ 
+             elsif U_Type = Standard_Long_Long_Float then
+                Lib_RE := RE_TA_LLF;
+ 
+             --  Integer types
+ 
+             elsif U_Type = Etype (Standard_Short_Short_Integer) then
+                   Lib_RE := RE_TA_SSI;
+ 
+             elsif U_Type = Etype (Standard_Short_Integer) then
+                Lib_RE := RE_TA_SI;
+ 
+             elsif U_Type = Etype (Standard_Integer) then
+                Lib_RE := RE_TA_I;
+ 
+             elsif U_Type = Etype (Standard_Long_Integer) then
+                Lib_RE := RE_TA_LI;
+ 
+             elsif U_Type = Etype (Standard_Long_Long_Integer) then
+                Lib_RE := RE_TA_LLI;
+ 
+             --  Unsigned integer types
+ 
+             elsif U_Type = RTE (RE_Short_Short_Unsigned) then
+                Lib_RE := RE_TA_SSU;
+ 
+             elsif U_Type = RTE (RE_Short_Unsigned) then
+                Lib_RE := RE_TA_SU;
+ 
+             elsif U_Type = RTE (RE_Unsigned) then
+                Lib_RE := RE_TA_U;
+ 
+             elsif U_Type = RTE (RE_Long_Unsigned) then
+                Lib_RE := RE_TA_LU;
+ 
+             elsif U_Type = RTE (RE_Long_Long_Unsigned) then
+                Lib_RE := RE_TA_LLU;
+ 
+             elsif U_Type = Standard_String then
+                Lib_RE := RE_TA_String;
+ 
+             elsif U_Type = Underlying_Type (RTE (RE_TypeCode)) then
+                Lib_RE := RE_TA_TC;
+ 
+             --  Other (non-primitive) types
+ 
+             else
+                declare
+                   Decl : Entity_Id;
+                begin
+                   Build_To_Any_Function (Loc, U_Type, Decl, Fnam);
+                   Append_To (Decls, Decl);
+                end;
+             end if;
+ 
+             --  Call the function
+ 
+             if Lib_RE /= RE_Null then
+                pragma Assert (No (Fnam));
+                Fnam := RTE (Lib_RE);
+             end if;
+ 
+             return
+                 Make_Function_Call (Loc,
+                   Name => New_Occurrence_Of (Fnam, Loc),
+                   Parameter_Associations => New_List (N));
+          end Build_To_Any_Call;
+ 
+          ---------------------------
+          -- Build_To_Any_Function --
+          ---------------------------
+ 
+          procedure Build_To_Any_Function
+            (Loc  : Source_Ptr;
+             Typ  : Entity_Id;
+             Decl : out Node_Id;
+             Fnam : out Entity_Id)
+          is
+             Spec  : Node_Id;
+             Decls : constant List_Id := New_List;
+             Stms  : constant List_Id := New_List;
+ 
+             Expr_Parameter : constant Entity_Id :=
+                                Make_Defining_Identifier (Loc, Name_E);
+ 
+             Any : constant Entity_Id :=
+                     Make_Defining_Identifier (Loc, Name_A);
+ 
+             Any_Decl  : Node_Id;
+             Result_TC : Node_Id := Build_TypeCode_Call (Loc, Typ, Decls);
+ 
+          begin
+             Fnam := Make_Stream_Procedure_Function_Name (Loc,
+                       Typ, Name_uTo_Any);
+ 
+             Spec :=
+               Make_Function_Specification (Loc,
+                 Defining_Unit_Name => Fnam,
+                 Parameter_Specifications => New_List (
+                   Make_Parameter_Specification (Loc,
+                     Defining_Identifier =>
+                       Expr_Parameter,
+                     Parameter_Type =>
+                       New_Occurrence_Of (Typ, Loc))),
+                 Subtype_Mark => New_Occurrence_Of (RTE (RE_Any), Loc));
+             Set_Etype (Expr_Parameter, Typ);
+ 
+             Any_Decl :=
+               Make_Object_Declaration (Loc,
+                 Defining_Identifier =>
+                   Any,
+                 Object_Definition   =>
+                   New_Occurrence_Of (RTE (RE_Any), Loc));
+ 
+             if Is_Derived_Type (Typ) and then not Is_Tagged_Type (Typ) then
+                declare
+                   Rt_Type : constant Entity_Id
+                     := Root_Type (Typ);
+                   Expr : constant Node_Id
+                     := OK_Convert_To (
+                          Rt_Type,
+                          New_Occurrence_Of (Expr_Parameter, Loc));
+                begin
+                   Set_Expression (Any_Decl, Build_To_Any_Call (Expr, Decls));
+                end;
+ 
+             elsif Is_Record_Type (Typ) and then not Is_Tagged_Type (Typ) then
+                if Nkind (Declaration_Node (Typ)) = N_Subtype_Declaration then
+                   declare
+                      Rt_Type : constant Entity_Id
+                        := Etype (Typ);
+                      Expr : constant Node_Id
+                        := OK_Convert_To (
+                             Rt_Type,
+                             New_Occurrence_Of (Expr_Parameter, Loc));
+ 
+                   begin
+                      Set_Expression (Any_Decl,
+                        Build_To_Any_Call (Expr, Decls));
+                   end;
+ 
+                else
+                   declare
+                      Disc : Entity_Id := Empty;
+                      Rdef : constant Node_Id :=
+                               Type_Definition (Declaration_Node (Typ));
+                      Counter : Int := 0;
+                      Elements : constant List_Id := New_List;
+ 
+                      procedure TA_Rec_Add_Process_Element
+                        (Stmts     : List_Id;
+                         Container : Node_Or_Entity_Id;
+                         Counter   : in out Int;
+                         Rec       : Entity_Id;
+                         Field     : Node_Id);
+ 
+                      procedure TA_Append_Record_Traversal is
+                         new Append_Record_Traversal
+                           (Rec                 => Expr_Parameter,
+                            Add_Process_Element => TA_Rec_Add_Process_Element);
+ 
+                      --------------------------------
+                      -- TA_Rec_Add_Process_Element --
+                      --------------------------------
+ 
+                      procedure TA_Rec_Add_Process_Element
+                        (Stmts     : List_Id;
+                         Container : Node_Or_Entity_Id;
+                         Counter   : in out Int;
+                         Rec       : Entity_Id;
+                         Field     : Node_Id)
+                      is
+                         Field_Ref : Node_Id;
+ 
+                      begin
+                         if Nkind (Field) = N_Defining_Identifier then
+ 
+                            --  A regular component
+ 
+                            Field_Ref := Make_Selected_Component (Loc,
+                              Prefix        => New_Occurrence_Of (Rec, Loc),
+                              Selector_Name => New_Occurrence_Of (Field, Loc));
+                            Set_Etype (Field_Ref, Etype (Field));
+ 
+                            Append_To (Stmts,
+                              Make_Procedure_Call_Statement (Loc,
+                                Name =>
+                                  New_Occurrence_Of (
+                                    RTE (RE_Add_Aggregate_Element), Loc),
+                                Parameter_Associations => New_List (
+                                  New_Occurrence_Of (Any, Loc),
+                                  Build_To_Any_Call (Field_Ref, Decls))));
+ 
+                         else
+                            --  A variant part
+ 
+                            declare
+                               Variant : Node_Id;
+                               Struct_Counter : Int := 0;
+ 
+                               Block_Decls : constant List_Id := New_List;
+                               Block_Stmts : constant List_Id := New_List;
+                               VP_Stmts    : List_Id;
+ 
+                               Alt_List : constant List_Id := New_List;
+                               Choice_List : List_Id;
+ 
+                               Union_Any : constant Entity_Id :=
+                                             Make_Defining_Identifier (Loc,
+                                               New_Internal_Name ('U'));
+ 
+                               Struct_Any : constant Entity_Id :=
+                                              Make_Defining_Identifier (Loc,
+                                                 New_Internal_Name ('S'));
+ 
+                               function Make_Discriminant_Reference
+                                 return Node_Id;
+                               --  Build a selected component for the
+                               --  discriminant of this variant part.
+ 
+                               ---------------------------------
+                               -- Make_Discriminant_Reference --
+                               ---------------------------------
+ 
+                               function Make_Discriminant_Reference
+                                 return Node_Id
+                               is
+                                  Nod : constant Node_Id :=
+                                          Make_Selected_Component (Loc,
+                                            Prefix        => Rec,
+                                            Selector_Name =>
+                                              Chars (Name (Field)));
+                               begin
+                                  Set_Etype (Nod, Name (Field));
+                                  return Nod;
+                               end Make_Discriminant_Reference;
+ 
+                            begin
+                               Append_To (Stmts,
+                                 Make_Block_Statement (Loc,
+                                   Declarations =>
+                                     Block_Decls,
+                                   Handled_Statement_Sequence =>
+                                     Make_Handled_Sequence_Of_Statements (Loc,
+                                       Statements => Block_Stmts)));
+ 
+                               Append_To (Block_Decls,
+                                 Make_Object_Declaration (Loc,
+                                   Defining_Identifier => Union_Any,
+                                   Object_Definition   =>
+                                     New_Occurrence_Of (RTE (RE_Any), Loc),
+                                   Expression =>
+                                     Make_Function_Call (Loc,
+                                       Name => New_Occurrence_Of (
+                                                 RTE (RE_Create_Any), Loc),
+                                       Parameter_Associations => New_List (
+                                         Make_Function_Call (Loc,
+                                           Name =>
+                                             New_Occurrence_Of (
+                                               RTE (RE_Any_Member_Type), Loc),
+                                           Parameter_Associations => New_List (
+                                             New_Occurrence_Of (Container, Loc),
+                                             Make_Integer_Literal (Loc,
+                                               Counter)))))));
+ 
+                               Append_To (Block_Decls,
+                                 Make_Object_Declaration (Loc,
+                                   Defining_Identifier => Struct_Any,
+                                   Object_Definition   =>
+                                     New_Occurrence_Of (RTE (RE_Any), Loc),
+                                   Expression =>
+                                     Make_Function_Call (Loc,
+                                       Name => New_Occurrence_Of (
+                                         RTE (RE_Create_Any), Loc),
+                                       Parameter_Associations => New_List (
+                                         Make_Function_Call (Loc,
+                                           Name =>
+                                             New_Occurrence_Of (
+                                               RTE (RE_Any_Member_Type), Loc),
+                                           Parameter_Associations => New_List (
+                                             New_Occurrence_Of (Union_Any, Loc),
+                                             Make_Integer_Literal (Loc,
+                                               Uint_0)))))));
+ 
+                               Append_To (Block_Stmts,
+                                 Make_Case_Statement (Loc,
+                                     Expression =>
+                                       Make_Discriminant_Reference,
+                                     Alternatives =>
+                                       Alt_List));
+ 
+                               Variant := First_Non_Pragma (Variants (Field));
+                               while Present (Variant) loop
+                                  Choice_List := New_Copy_List_Tree
+                                    (Discrete_Choices (Variant));
+ 
+                                  VP_Stmts := New_List;
+                                  TA_Append_Record_Traversal (
+                                    Stmts     => VP_Stmts,
+                                    Clist     => Component_List (Variant),
+                                    Container => Struct_Any,
+                                    Counter   => Struct_Counter);
+ 
+                                  --  Append discriminant value and inner struct
+                                  --  to union aggregate.
+ 
+                                  Append_To (VP_Stmts,
+                                     Make_Procedure_Call_Statement (Loc,
+                                       Name =>
+                                         New_Occurrence_Of (
+                                           RTE (RE_Add_Aggregate_Element), Loc),
+                                       Parameter_Associations => New_List (
+                                         New_Occurrence_Of (Union_Any, Loc),
+                                           Build_To_Any_Call (
+                                             Make_Discriminant_Reference,
+                                             Block_Decls))));
+ 
+                                  Append_To (VP_Stmts,
+                                    Make_Procedure_Call_Statement (Loc,
+                                      Name =>
+                                        New_Occurrence_Of (
+                                          RTE (RE_Add_Aggregate_Element), Loc),
+                                      Parameter_Associations => New_List (
+                                        New_Occurrence_Of (Union_Any, Loc),
+                                        New_Occurrence_Of (Struct_Any, Loc))));
+ 
+                                  --  Append union to outer aggregate
+ 
+                                  Append_To (VP_Stmts,
+                                    Make_Procedure_Call_Statement (Loc,
+                                      Name =>
+                                        New_Occurrence_Of (
+                                          RTE (RE_Add_Aggregate_Element), Loc),
+                                      Parameter_Associations => New_List (
+                                        New_Occurrence_Of (Container, Loc),
+                                        Make_Function_Call (Loc,
+                                          Name => New_Occurrence_Of (
+                                            RTE (RE_Any_Aggregate_Build), Loc),
+                                          Parameter_Associations => New_List (
+                                            New_Occurrence_Of (
+                                              Union_Any, Loc))))));
+ 
+                                  Append_To (Alt_List,
+                                    Make_Case_Statement_Alternative (Loc,
+                                      Discrete_Choices => Choice_List,
+                                      Statements =>
+                                        VP_Stmts));
+                                  Next_Non_Pragma (Variant);
+                               end loop;
+                            end;
+                         end if;
+                      end TA_Rec_Add_Process_Element;
+ 
+                   begin
+                      --  First all discriminants
+ 
+                      if Has_Discriminants (Typ) then
+                         Disc := First_Discriminant (Typ);
+ 
+                         while Present (Disc) loop
+                            Append_To (Elements,
+                              Make_Component_Association (Loc,
+                                Choices => New_List (
+                                  Make_Integer_Literal (Loc, Counter)),
+                                Expression =>
+                                  Build_To_Any_Call (
+                                    Make_Selected_Component (Loc,
+                                      Prefix        => Expr_Parameter,
+                                      Selector_Name => Chars (Disc)),
+                                    Decls)));
+                            Counter := Counter + 1;
+                            Next_Discriminant (Disc);
+                         end loop;
+ 
+                      else
+                         --  Make elements an empty array
+ 
+                         declare
+                            Dummy_Any : constant Entity_Id :=
+                                          Make_Defining_Identifier (Loc,
+                                            Chars => New_Internal_Name ('A'));
+ 
+                         begin
+                            Append_To (Decls,
+                              Make_Object_Declaration (Loc,
+                                Defining_Identifier => Dummy_Any,
+                                Object_Definition   =>
+                                  New_Occurrence_Of (RTE (RE_Any), Loc)));
+ 
+                            Append_To (Elements,
+                              Make_Component_Association (Loc,
+                                Choices => New_List (
+                                  Make_Range (Loc,
+                                    Low_Bound  =>
+                                      Make_Integer_Literal (Loc, 1),
+                                    High_Bound =>
+                                      Make_Integer_Literal (Loc, 0))),
+                                Expression =>
+                                  New_Occurrence_Of (Dummy_Any, Loc)));
+                         end;
+                      end if;
+ 
+                      Set_Expression (Any_Decl,
+                        Make_Function_Call (Loc,
+                          Name => New_Occurrence_Of (
+                                    RTE (RE_Any_Aggregate_Build), Loc),
+                          Parameter_Associations => New_List (
+                            Result_TC,
+                            Make_Aggregate (Loc,
+                              Component_Associations => Elements))));
+                      Result_TC := Empty;
+ 
+                      --  ... then all components
+ 
+                      TA_Append_Record_Traversal (Stms,
+                        Clist     => Component_List (Rdef),
+                        Container => Any,
+                        Counter   => Counter);
+                   end;
+                end if;
+ 
+             elsif Is_Array_Type (Typ) then
+                declare
+                   Constrained : constant Boolean := Is_Constrained (Typ);
+ 
+                   procedure TA_Ary_Add_Process_Element
+                     (Stmts   : List_Id;
+                      Any     : Entity_Id;
+                      Counter : Entity_Id;
+                      Datum   : Node_Id);
+ 
+                   --------------------------------
+                   -- TA_Ary_Add_Process_Element --
+                   --------------------------------
+ 
+                   procedure TA_Ary_Add_Process_Element
+                     (Stmts   : List_Id;
+                      Any     : Entity_Id;
+                      Counter : Entity_Id;
+                      Datum   : Node_Id)
+                   is
+                      pragma Warnings (Off);
+                      pragma Unreferenced (Counter);
+                      pragma Warnings (On);
+ 
+                      Element_Any : Node_Id;
+ 
+                   begin
+                      if Etype (Datum) = RTE (RE_Any) then
+                         Element_Any := Datum;
+                      else
+                         Element_Any := Build_To_Any_Call (Datum, Decls);
+                      end if;
+ 
+                      Append_To (Stmts,
+                        Make_Procedure_Call_Statement (Loc,
+                          Name => New_Occurrence_Of (
+                                    RTE (RE_Add_Aggregate_Element), Loc),
+                          Parameter_Associations => New_List (
+                            New_Occurrence_Of (Any, Loc),
+                            Element_Any)));
+                   end TA_Ary_Add_Process_Element;
+ 
+                   procedure Append_To_Any_Array_Iterator is
+                     new Append_Array_Traversal (
+                       Subprogram => Fnam,
+                       Arry       => Expr_Parameter,
+                       Indices    => New_List,
+                       Add_Process_Element => TA_Ary_Add_Process_Element);
+ 
+                   Index : Node_Id;
+ 
+                begin
+                   Set_Expression (Any_Decl,
+                     Make_Function_Call (Loc,
+                       Name =>
+                         New_Occurrence_Of (RTE (RE_Create_Any), Loc),
+                       Parameter_Associations => New_List (Result_TC)));
+                   Result_TC := Empty;
+ 
+                   if not Constrained then
+                      Index := First_Index (Typ);
+                      for J in 1 .. Number_Dimensions (Typ) loop
+                         Append_To (Stms,
+                           Make_Procedure_Call_Statement (Loc,
+                             Name =>
+                               New_Occurrence_Of (
+                                 RTE (RE_Add_Aggregate_Element), Loc),
+                             Parameter_Associations => New_List (
+                               New_Occurrence_Of (Any, Loc),
+                               Build_To_Any_Call (
+                                 OK_Convert_To (Etype (Index),
+                                   Make_Attribute_Reference (Loc,
+                                     Prefix         =>
+                                       New_Occurrence_Of (Expr_Parameter, Loc),
+                                     Attribute_Name => Name_First,
+                                     Expressions    => New_List (
+                                       Make_Integer_Literal (Loc, J)))),
+                                 Decls))));
+                         Next_Index (Index);
+                      end loop;
+                   end if;
+ 
+                   Append_To_Any_Array_Iterator (Stms, Any);
+                end;
+ 
+             elsif Is_Integer_Type (Typ) or else Is_Unsigned_Type (Typ) then
+                Set_Expression (Any_Decl,
+                  Build_To_Any_Call (
+                    OK_Convert_To (
+                      Find_Numeric_Representation (Typ),
+                      New_Occurrence_Of (Expr_Parameter, Loc)),
+                    Decls));
+ 
+             else
+                --  Default: type is represented as an opaque sequence of bytes
+ 
+                declare
+                   Strm : constant Entity_Id := Make_Defining_Identifier (Loc,
+                            New_Internal_Name ('S'));
+ 
+                begin
+                   --  Strm : aliased Buffer_Stream_Type;
+ 
+                   Append_To (Decls,
+                     Make_Object_Declaration (Loc,
+                       Defining_Identifier =>
+                         Strm,
+                       Aliased_Present     =>
+                         True,
+                       Object_Definition   =>
+                         New_Occurrence_Of (RTE (RE_Buffer_Stream_Type), Loc)));
+ 
+                   --  Allocate_Buffer (Strm);
+ 
+                   Append_To (Stms,
+                     Make_Procedure_Call_Statement (Loc,
+                       Name =>
+                         New_Occurrence_Of (RTE (RE_Allocate_Buffer), Loc),
+                       Parameter_Associations => New_List (
+                         New_Occurrence_Of (Strm, Loc))));
+ 
+                   --  T'Output (Strm'Access, E);
+ 
+                   Append_To (Stms,
+                       Make_Attribute_Reference (Loc,
+                         Prefix         => New_Occurrence_Of (Typ, Loc),
+                         Attribute_Name => Name_Output,
+                         Expressions => New_List (
+                           Make_Attribute_Reference (Loc,
+                             Prefix => New_Occurrence_Of (Strm, Loc),
+                             Attribute_Name => Name_Access),
+                           New_Occurrence_Of (Expr_Parameter, Loc))));
+ 
+                   --  BS_To_Any (Strm, A);
+ 
+                   Append_To (Stms,
+                     Make_Procedure_Call_Statement (Loc,
+                       Name =>
+                         New_Occurrence_Of (RTE (RE_BS_To_Any), Loc),
+                       Parameter_Associations => New_List (
+                         New_Occurrence_Of (Strm, Loc),
+                         New_Occurrence_Of (Any, Loc))));
+ 
+                   --  Release_Buffer (Strm);
+ 
+                   Append_To (Stms,
+                     Make_Procedure_Call_Statement (Loc,
+                       Name =>
+                         New_Occurrence_Of (RTE (RE_Release_Buffer), Loc),
+                       Parameter_Associations => New_List (
+                         New_Occurrence_Of (Strm, Loc))));
+                end;
+             end if;
+ 
+             Append_To (Decls, Any_Decl);
+ 
+             if Present (Result_TC) then
+                Append_To (Stms,
+                  Make_Procedure_Call_Statement (Loc,
+                    Name => New_Occurrence_Of (RTE (RE_Set_TC), Loc),
+                    Parameter_Associations => New_List (
+                      New_Occurrence_Of (Any, Loc),
+                      Result_TC)));
+             end if;
+ 
+             Append_To (Stms,
+               Make_Return_Statement (Loc,
+                 Expression => New_Occurrence_Of (Any, Loc)));
+ 
+             Decl :=
+               Make_Subprogram_Body (Loc,
+                 Specification => Spec,
+                 Declarations => Decls,
+                 Handled_Statement_Sequence =>
+                   Make_Handled_Sequence_Of_Statements (Loc,
+                     Statements => Stms));
+          end Build_To_Any_Function;
+ 
+          -------------------------
+          -- Build_TypeCode_Call --
+          -------------------------
+ 
+          function Build_TypeCode_Call
+            (Loc   : Source_Ptr;
+             Typ   : Entity_Id;
+             Decls : List_Id) return Node_Id
+          is
+             U_Type : Entity_Id  := Underlying_Type (Typ);
+             --  The full view, if Typ is private; the completion,
+             --  if Typ is incomplete.
+ 
+             Fnam    : Entity_Id := Empty;
+             Tnam    : Entity_Id := Empty;
+             Pnam    : Entity_Id := Empty;
+             Args    : List_Id := Empty_List;
+             Lib_RE  : RE_Id := RE_Null;
+ 
+             Expr : Node_Id;
+ 
+          begin
+             --  Special case System.PolyORB.Interface.Any: its primitives have
+             --  not been set yet, so can't call Find_Inherited_TSS.
+ 
+             if Typ = RTE (RE_Any) then
+                Fnam := RTE (RE_TC_Any);
+ 
+             else
+                --  First simple case where the TypeCode is present
+                --  in the type's TSS.
+ 
+                Fnam := Find_Inherited_TSS (U_Type, Name_uTypeCode);
+ 
+                if Present (Fnam) then
+ 
+                   --  When a TypeCode TSS exists, it has a single parameter
+                   --  that is an anonymous access to the corresponding type.
+                   --  This parameter is not used in any way; its purpose is
+                   --  solely to provide overloading of the TSS.
+ 
+                   Tnam :=
+                     Make_Defining_Identifier (Loc, New_Internal_Name ('T'));
+                   Pnam :=
+                     Make_Defining_Identifier (Loc, New_Internal_Name ('P'));
+ 
+                   Append_To (Decls,
+                     Make_Full_Type_Declaration (Loc,
+                       Defining_Identifier => Tnam,
+                       Type_Definition =>
+                         Make_Access_To_Object_Definition (Loc,
+                           Subtype_Indication =>
+                             New_Occurrence_Of (U_Type, Loc))));
+                   Append_To (Decls,
+                     Make_Object_Declaration (Loc,
+                       Defining_Identifier => Pnam,
+                       Constant_Present    => True,
+                       Object_Definition   => New_Occurrence_Of (Tnam, Loc),
+ 
+                      --  Use a variable here to force proper freezing of Tnam
+ 
+                       Expression          => Make_Null (Loc)));
+ 
+                   --  Normally, calling _TypeCode with a null access parameter
+                   --  should raise Constraint_Error, but this check is
+                   --  suppressed for expanded code, and we do not care anyway
+                   --  because we do not actually ever use this value.
+ 
+                   Args := New_List (New_Occurrence_Of (Pnam, Loc));
+                end if;
+             end if;
+ 
+             if No (Fnam) then
+                if Sloc (U_Type) <= Standard_Location then
+ 
+                   --  Do not try to build alias typecodes for subtypes from
+                   --  Standard.
+ 
+                   U_Type := Base_Type (U_Type);
+                end if;
+ 
+                if Is_Itype (U_Type) then
+                   return Build_TypeCode_Call
+                     (Loc, Associated_Node_For_Itype (U_Type), Decls);
+                end if;
+ 
+                if U_Type = Standard_Boolean then
+                   Lib_RE := RE_TC_B;
+ 
+                elsif U_Type = Standard_Character then
+                   Lib_RE := RE_TC_C;
+ 
+                elsif U_Type = Standard_Wide_Character then
+                   Lib_RE := RE_TC_WC;
+ 
+                elsif U_Type = Standard_Wide_Wide_Character then
+                   Lib_RE := RE_TC_WWC;
+ 
+                --  Floating point types
+ 
+                elsif U_Type = Standard_Short_Float then
+                   Lib_RE := RE_TC_SF;
+ 
+                elsif U_Type = Standard_Float then
+                   Lib_RE := RE_TC_F;
+ 
+                elsif U_Type = Standard_Long_Float then
+                   Lib_RE := RE_TC_LF;
+ 
+                elsif U_Type = Standard_Long_Long_Float then
+                   Lib_RE := RE_TC_LLF;
+ 
+                --  Integer types (walk back to the base type)
+ 
+                elsif U_Type = Etype (Standard_Short_Short_Integer) then
+                      Lib_RE := RE_TC_SSI;
+ 
+                elsif U_Type = Etype (Standard_Short_Integer) then
+                   Lib_RE := RE_TC_SI;
+ 
+                elsif U_Type = Etype (Standard_Integer) then
+                   Lib_RE := RE_TC_I;
+ 
+                elsif U_Type = Etype (Standard_Long_Integer) then
+                   Lib_RE := RE_TC_LI;
+ 
+                elsif U_Type = Etype (Standard_Long_Long_Integer) then
+                   Lib_RE := RE_TC_LLI;
+ 
+                --  Unsigned integer types
+ 
+                elsif U_Type = RTE (RE_Short_Short_Unsigned) then
+                   Lib_RE := RE_TC_SSU;
+ 
+                elsif U_Type = RTE (RE_Short_Unsigned) then
+                   Lib_RE := RE_TC_SU;
+ 
+                elsif U_Type = RTE (RE_Unsigned) then
+                   Lib_RE := RE_TC_U;
+ 
+                elsif U_Type = RTE (RE_Long_Unsigned) then
+                   Lib_RE := RE_TC_LU;
+ 
+                elsif U_Type = RTE (RE_Long_Long_Unsigned) then
+                   Lib_RE := RE_TC_LLU;
+ 
+                elsif U_Type = Standard_String then
+                   Lib_RE := RE_TC_String;
+ 
+                --  Other (non-primitive) types
+ 
+                else
+                   declare
+                      Decl : Entity_Id;
+                   begin
+                      Build_TypeCode_Function (Loc, U_Type, Decl, Fnam);
+                      Append_To (Decls, Decl);
+                   end;
+                end if;
+ 
+                if Lib_RE /= RE_Null then
+                   Fnam := RTE (Lib_RE);
+                end if;
+             end if;
+ 
+             --  Call the function
+ 
+             Expr :=
+               Make_Function_Call (Loc,
+                 Name => New_Occurrence_Of (Fnam, Loc),
+                 Parameter_Associations => Args);
+ 
+             --  Allow Expr to be used as arg to Build_To_Any_Call immediately
+ 
+             Set_Etype (Expr, RTE (RE_TypeCode));
+ 
+             return Expr;
+          end Build_TypeCode_Call;
+ 
+          -----------------------------
+          -- Build_TypeCode_Function --
+          -----------------------------
+ 
+          procedure Build_TypeCode_Function
+            (Loc  : Source_Ptr;
+             Typ  : Entity_Id;
+             Decl : out Node_Id;
+             Fnam : out Entity_Id)
+          is
+             Spec  : Node_Id;
+             Decls : constant List_Id := New_List;
+             Stms  : constant List_Id := New_List;
+ 
+             TCNam : constant Entity_Id :=
+                       Make_Stream_Procedure_Function_Name (Loc,
+                         Typ, Name_uTypeCode);
+ 
+             Parameters : List_Id;
+ 
+             procedure Add_String_Parameter
+               (S              : String_Id;
+                Parameter_List : List_Id);
+             --  Add a literal for S to Parameters
+ 
+             procedure Add_TypeCode_Parameter
+               (TC_Node        : Node_Id;
+                Parameter_List : List_Id);
+             --  Add the typecode for Typ to Parameters
+ 
+             procedure Add_Long_Parameter
+               (Expr_Node      : Node_Id;
+                Parameter_List : List_Id);
+             --  Add a signed long integer expression to Parameters
+ 
+             procedure Initialize_Parameter_List
+               (Name_String    : String_Id;
+                Repo_Id_String : String_Id;
+                Parameter_List : out List_Id);
+             --  Return a list that contains the first two parameters
+             --  for a parameterized typecode: name and repository id.
+ 
+             function Make_Constructed_TypeCode
+               (Kind       : Entity_Id;
+                Parameters : List_Id) return Node_Id;
+             --  Call TC_Build with the given kind and parameters
+ 
+             procedure Return_Constructed_TypeCode (Kind : Entity_Id);
+             --  Make a return statement that calls TC_Build with the given
+             --  typecode kind, and the constructed parameters list.
+ 
+             procedure Return_Alias_TypeCode (Base_TypeCode  : Node_Id);
+             --  Return a typecode that is a TC_Alias for the given typecode
+ 
+             --------------------------
+             -- Add_String_Parameter --
+             --------------------------
+ 
+             procedure Add_String_Parameter
+               (S              : String_Id;
+                Parameter_List : List_Id)
+             is
+             begin
+                Append_To (Parameter_List,
+                  Make_Function_Call (Loc,
+                    Name =>
+                      New_Occurrence_Of (RTE (RE_TA_String), Loc),
+                    Parameter_Associations => New_List (
+                      Make_String_Literal (Loc, S))));
+             end Add_String_Parameter;
+ 
+             ----------------------------
+             -- Add_TypeCode_Parameter --
+             ----------------------------
+ 
+             procedure Add_TypeCode_Parameter
+               (TC_Node        : Node_Id;
+                Parameter_List : List_Id)
+             is
+             begin
+                Append_To (Parameter_List,
+                  Make_Function_Call (Loc,
+                    Name =>
+                      New_Occurrence_Of (RTE (RE_TA_TC), Loc),
+                    Parameter_Associations => New_List (
+                      TC_Node)));
+             end Add_TypeCode_Parameter;
+ 
+             ------------------------
+             -- Add_Long_Parameter --
+             ------------------------
+ 
+             procedure Add_Long_Parameter
+               (Expr_Node      : Node_Id;
+                Parameter_List : List_Id)
+             is
+             begin
+                Append_To (Parameter_List,
+                  Make_Function_Call (Loc,
+                    Name =>
+                      New_Occurrence_Of (RTE (RE_TA_LI), Loc),
+                    Parameter_Associations => New_List (Expr_Node)));
+             end Add_Long_Parameter;
+ 
+             -------------------------------
+             -- Initialize_Parameter_List --
+             -------------------------------
+ 
+             procedure Initialize_Parameter_List
+               (Name_String    : String_Id;
+                Repo_Id_String : String_Id;
+                Parameter_List : out List_Id)
+             is
+             begin
+                Parameter_List := New_List;
+                Add_String_Parameter (Name_String, Parameter_List);
+                Add_String_Parameter (Repo_Id_String, Parameter_List);
+             end Initialize_Parameter_List;
+ 
+             ---------------------------
+             -- Return_Alias_TypeCode --
+             ---------------------------
+ 
+             procedure Return_Alias_TypeCode
+               (Base_TypeCode  : Node_Id)
+             is
+             begin
+                Add_TypeCode_Parameter (Base_TypeCode, Parameters);
+                Return_Constructed_TypeCode (RTE (RE_TC_Alias));
+             end Return_Alias_TypeCode;
+ 
+             -------------------------------
+             -- Make_Constructed_TypeCode --
+             -------------------------------
+ 
+             function Make_Constructed_TypeCode
+               (Kind       : Entity_Id;
+                Parameters : List_Id) return Node_Id
+             is
+                Constructed_TC : constant Node_Id :=
+                  Make_Function_Call (Loc,
+                    Name =>
+                      New_Occurrence_Of (RTE (RE_TC_Build), Loc),
+                    Parameter_Associations => New_List (
+                      New_Occurrence_Of (Kind, Loc),
+                      Make_Aggregate (Loc,
+                         Expressions => Parameters)));
+             begin
+                Set_Etype (Constructed_TC, RTE (RE_TypeCode));
+                return Constructed_TC;
+             end Make_Constructed_TypeCode;
+ 
+             ---------------------------------
+             -- Return_Constructed_TypeCode --
+             ---------------------------------
+ 
+             procedure Return_Constructed_TypeCode (Kind : Entity_Id) is
+             begin
+                Append_To (Stms,
+                  Make_Return_Statement (Loc,
+                    Expression =>
+                       Make_Constructed_TypeCode (Kind, Parameters)));
+             end Return_Constructed_TypeCode;
+ 
+             ------------------
+             -- Record types --
+             ------------------
+ 
+             procedure TC_Rec_Add_Process_Element
+               (Params  : List_Id;
+                Any     : Entity_Id;
+                Counter : in out Int;
+                Rec     : Entity_Id;
+                Field   : Node_Id);
+ 
+             procedure TC_Append_Record_Traversal is
+               new Append_Record_Traversal (
+                 Rec                 => Empty,
+                 Add_Process_Element => TC_Rec_Add_Process_Element);
+ 
+             --------------------------------
+             -- TC_Rec_Add_Process_Element --
+             --------------------------------
+ 
+             procedure TC_Rec_Add_Process_Element
+               (Params  : List_Id;
+                Any     : Entity_Id;
+                Counter : in out Int;
+                Rec     : Entity_Id;
+                Field   : Node_Id)
+             is
+                pragma Warnings (Off);
+                pragma Unreferenced (Any, Counter, Rec);
+                pragma Warnings (On);
+ 
+             begin
+                if Nkind (Field) = N_Defining_Identifier then
+ 
+                   --  A regular component
+ 
+                   Add_TypeCode_Parameter (
+                     Build_TypeCode_Call (Loc, Etype (Field), Decls), Params);
+                   Get_Name_String (Chars (Field));
+                   Add_String_Parameter (String_From_Name_Buffer, Params);
+ 
+                else
+ 
+                   --  A variant part
+ 
+                   declare
+                      Discriminant_Type : constant Entity_Id :=
+                                            Etype (Name (Field));
+ 
+                      Is_Enum : constant Boolean :=
+                                  Is_Enumeration_Type (Discriminant_Type);
+ 
+                      Union_TC_Params : List_Id;
+ 
+                      U_Name : constant Name_Id :=
+                                 New_External_Name (Chars (Typ), 'U', -1);
+ 
+                      Name_Str         : String_Id;
+                      Struct_TC_Params : List_Id;
+ 
+                      Variant : Node_Id;
+                      Choice  : Node_Id;
+                      Default : constant Node_Id :=
+                                  Make_Integer_Literal (Loc, -1);
+ 
+                      Dummy_Counter : Int := 0;
+ 
+                      procedure Add_Params_For_Variant_Components;
+                      --  Add a struct TypeCode and a corresponding member name
+                      --  to the union parameter list.
+ 
+                      --  Ordering of declarations is a complete mess in this
+                      --  area, it is supposed to be types/varibles, then
+                      --  subprogram specs, then subprogram bodies ???
+ 
+                      ---------------------------------------
+                      -- Add_Params_For_Variant_Components --
+                      ---------------------------------------
+ 
+                      procedure Add_Params_For_Variant_Components
+                      is
+                         S_Name : constant Name_Id :=
+                                    New_External_Name (U_Name, 'S', -1);
+ 
+                      begin
+                         Get_Name_String (S_Name);
+                         Name_Str := String_From_Name_Buffer;
+                         Initialize_Parameter_List
+                           (Name_Str, Name_Str, Struct_TC_Params);
+ 
+                         --  Build struct parameters
+ 
+                         TC_Append_Record_Traversal (Struct_TC_Params,
+                           Component_List (Variant),
+                           Empty,
+                           Dummy_Counter);
+ 
+                         Add_TypeCode_Parameter
+                           (Make_Constructed_TypeCode
+                            (RTE (RE_TC_Struct), Struct_TC_Params),
+                            Union_TC_Params);
+ 
+                         Add_String_Parameter (Name_Str, Union_TC_Params);
+                      end Add_Params_For_Variant_Components;
+ 
+                   begin
+                      Get_Name_String (U_Name);
+                      Name_Str := String_From_Name_Buffer;
+ 
+                      Initialize_Parameter_List
+                        (Name_Str, Name_Str, Union_TC_Params);
+ 
+                      Add_String_Parameter (Name_Str, Params);
+ 
+                      --  Add union in enclosing parameter list
+ 
+                      Add_TypeCode_Parameter
+                        (Make_Constructed_TypeCode
+                         (RTE (RE_TC_Union), Union_TC_Params),
+                         Parameters);
+ 
+                      --  Build union parameters
+ 
+                      Add_TypeCode_Parameter
+                        (Discriminant_Type, Union_TC_Params);
+                      Add_Long_Parameter (Default, Union_TC_Params);
+ 
+                      Variant := First_Non_Pragma (Variants (Field));
+                      while Present (Variant) loop
+                         Choice := First (Discrete_Choices (Variant));
+                         while Present (Choice) loop
+                            case Nkind (Choice) is
+                               when N_Range =>
+                                  declare
+                                     L : constant Uint :=
+                                           Expr_Value (Low_Bound (Choice));
+                                     H : constant Uint :=
+                                           Expr_Value (High_Bound (Choice));
+                                     J : Uint := L;
+                                     --  3.8.1(8) guarantees that the bounds of
+                                     --  this range are static.
+ 
+                                     Expr : Node_Id;
+ 
+                                  begin
+                                     while J <= H loop
+                                        if Is_Enum then
+                                           Expr := New_Occurrence_Of (
+                                             Get_Enum_Lit_From_Pos (
+                                               Discriminant_Type, J, Loc), Loc);
+                                        else
+                                           Expr :=
+                                             Make_Integer_Literal (Loc, J);
+                                        end if;
+                                        Append_To (Union_TC_Params,
+                                          Build_To_Any_Call (Expr, Decls));
+                                        Add_Params_For_Variant_Components;
+                                        J := J + Uint_1;
+                                     end loop;
+                                  end;
+ 
+                               when N_Others_Choice =>
+                                  Add_Long_Parameter (
+                                    Make_Integer_Literal (Loc, 0),
+                                    Union_TC_Params);
+                                  Add_Params_For_Variant_Components;
+ 
+                               when others =>
+                                  Append_To (Union_TC_Params,
+                                    Build_To_Any_Call (Choice, Decls));
+                                  Add_Params_For_Variant_Components;
+ 
+                            end case;
+ 
+                         end loop;
+ 
+                         Next_Non_Pragma (Variant);
+                      end loop;
+ 
+                   end;
+                end if;
+             end TC_Rec_Add_Process_Element;
+ 
+             Type_Name_Str    : String_Id;
+             Type_Repo_Id_Str : String_Id;
+ 
+          begin
+             pragma Assert (not Is_Itype (Typ));
+             Fnam := TCNam;
+ 
+             Spec :=
+               Make_Function_Specification (Loc,
+                 Defining_Unit_Name => Fnam,
+                 Parameter_Specifications => Empty_List,
+                 Subtype_Mark => New_Occurrence_Of (RTE (RE_TypeCode), Loc));
+ 
+             Build_Name_And_Repository_Id (Typ,
+               Name_Str => Type_Name_Str, Repo_Id_Str => Type_Repo_Id_Str);
+             Initialize_Parameter_List
+               (Type_Name_Str, Type_Repo_Id_Str, Parameters);
+ 
+             if Is_Derived_Type (Typ)
+               and then not Is_Tagged_Type (Typ)
+             then
+                declare
+                   D_Node : constant Node_Id := Declaration_Node (Typ);
+                   Parent_Type : Entity_Id := Etype (Typ);
+                begin
+ 
+                   if Is_Enumeration_Type (Typ)
+                     and then Nkind (D_Node) = N_Subtype_Declaration
+                     and then Nkind (Original_Node (D_Node))
+                     /= N_Subtype_Declaration
+                   then
+ 
+                      --  Parent_Type is the implicit intermediate base type
+                      --  created by Build_Derived_Enumeration_Type.
+ 
+                      Parent_Type := Etype (Parent_Type);
+                   end if;
+ 
+                   Return_Alias_TypeCode (
+                     Build_TypeCode_Call (Loc, Parent_Type, Decls));
+                end;
+ 
+             elsif Is_Integer_Type (Typ)
+               or else Is_Unsigned_Type (Typ)
+             then
+                Return_Alias_TypeCode (
+                  Build_TypeCode_Call (Loc,
+                    Find_Numeric_Representation (Typ), Decls));
+ 
+             elsif Is_Record_Type (Typ)
+               and then not Is_Tagged_Type (Typ)
+             then
+                if Nkind (Declaration_Node (Typ)) = N_Subtype_Declaration then
+                   Return_Alias_TypeCode (
+                     Build_TypeCode_Call (Loc, Etype (Typ), Decls));
+                else
+                   declare
+                      Disc : Entity_Id := Empty;
+                      Rdef : constant Node_Id :=
+                        Type_Definition (Declaration_Node (Typ));
+                      Dummy_Counter : Int := 0;
+                   begin
+                      --  First all discriminants
+ 
+                      if Has_Discriminants (Typ) then
+                         Disc := First_Discriminant (Typ);
+                      end if;
+                      while Present (Disc) loop
+                         Add_TypeCode_Parameter (
+                           Build_TypeCode_Call (Loc, Etype (Disc), Decls),
+                           Parameters);
+                         Get_Name_String (Chars (Disc));
+                         Add_String_Parameter (
+                           String_From_Name_Buffer,
+                           Parameters);
+                         Next_Discriminant (Disc);
+                      end loop;
+ 
+                      --  ... then all components
+ 
+                      TC_Append_Record_Traversal
+                        (Parameters, Component_List (Rdef),
+                         Empty, Dummy_Counter);
+                      Return_Constructed_TypeCode (RTE (RE_TC_Struct));
+                   end;
+                end if;
+ 
+             elsif Is_Array_Type (Typ) then
+                declare
+                   Ndim           : constant Pos := Number_Dimensions (Typ);
+                   Inner_TypeCode : Node_Id;
+                   Constrained    : constant Boolean := Is_Constrained (Typ);
+                   Indx           : Node_Id          := First_Index (Typ);
+ 
+                begin
+                   Inner_TypeCode := Build_TypeCode_Call (Loc,
+                     Component_Type (Typ),
+                     Decls);
+ 
+                   for J in 1 .. Ndim loop
+                      if Constrained then
+                         Inner_TypeCode := Make_Constructed_TypeCode
+                           (RTE (RE_TC_Array), New_List (
+                             Build_To_Any_Call (
+                               OK_Convert_To (RTE (RE_Long_Unsigned),
+                                 Make_Attribute_Reference (Loc,
+                                   Prefix =>
+                                     New_Occurrence_Of (Typ, Loc),
+                                   Attribute_Name =>
+                                     Name_Length,
+                                   Expressions => New_List (
+                                     Make_Integer_Literal (Loc,
+                                       Ndim - J + 1)))),
+                               Decls),
+                             Build_To_Any_Call (Inner_TypeCode, Decls)));
+ 
+                      else
+                         --  Unconstrained case: add low bound for each
+                         --  dimension.
+ 
+                         Add_TypeCode_Parameter
+                           (Build_TypeCode_Call (Loc, Etype (Indx), Decls),
+                            Parameters);
+                         Get_Name_String (New_External_Name ('L', J));
+                         Add_String_Parameter (
+                           String_From_Name_Buffer,
+                           Parameters);
+                         Next_Index (Indx);
+ 
+                         Inner_TypeCode := Make_Constructed_TypeCode
+                           (RTE (RE_TC_Sequence), New_List (
+                             Build_To_Any_Call (
+                               OK_Convert_To (RTE (RE_Long_Unsigned),
+                                 Make_Integer_Literal (Loc, 0)),
+                               Decls),
+                             Build_To_Any_Call (Inner_TypeCode, Decls)));
+                      end if;
+                   end loop;
+ 
+                   if Constrained then
+                      Return_Alias_TypeCode (Inner_TypeCode);
+                   else
+                      Add_TypeCode_Parameter (Inner_TypeCode, Parameters);
+                      Start_String;
+                      Store_String_Char ('V');
+                      Add_String_Parameter (End_String, Parameters);
+                      Return_Constructed_TypeCode (RTE (RE_TC_Struct));
+                   end if;
+                end;
+ 
+             else
+                --  Default: type is represented as an opaque sequence of bytes
+ 
+                Return_Alias_TypeCode
+                  (New_Occurrence_Of (RTE (RE_TC_Opaque), Loc));
+             end if;
+ 
+             Decl :=
+               Make_Subprogram_Body (Loc,
+                 Specification => Spec,
+                 Declarations => Decls,
+                 Handled_Statement_Sequence =>
+                   Make_Handled_Sequence_Of_Statements (Loc,
+                     Statements => Stms));
+          end Build_TypeCode_Function;
+ 
+          ------------------------
+          -- Find_Inherited_TSS --
+          ------------------------
+ 
+          function Find_Inherited_TSS
+            (Typ : Entity_Id;
+             Nam : Name_Id) return Entity_Id
+          is
+             P_Type : Entity_Id := Typ;
+             Proc   : Entity_Id;
+ 
+          begin
+             Proc :=  TSS (Base_Type (Typ), Nam);
+ 
+             --  Check first if there is a TSS given for the type itself
+ 
+             if Present (Proc) then
+                return Proc;
+             end if;
+ 
+             --  If Typ is a derived type, it may inherit attributes from some
+             --  ancestor which is not the ultimate underlying one. If Typ is a
+             --  derived tagged type, The corresponding primitive operation has
+             --  been created explicitly.
+ 
+             if Is_Derived_Type (P_Type) then
+                if Is_Tagged_Type (P_Type) then
+                   return Find_Prim_Op (P_Type, Nam);
+                else
+                   while Is_Derived_Type (P_Type) loop
+                      Proc :=  TSS (Base_Type (Etype (Typ)), Nam);
+ 
+                      if Present (Proc) then
+                         return Proc;
+                      else
+                         P_Type := Base_Type (Etype (P_Type));
+                      end if;
+                   end loop;
+                end if;
+             end if;
+ 
+             --  If nothing else, use the TSS of the root type
+ 
+             return TSS (Base_Type (Underlying_Type (Typ)), Nam);
+          end Find_Inherited_TSS;
+ 
+          ---------------------------------
+          -- Find_Numeric_Representation --
+          ---------------------------------
+ 
+          function Find_Numeric_Representation (Typ : Entity_Id)
+            return Entity_Id
+          is
+             FST    : constant Entity_Id := First_Subtype (Typ);
+             P_Size : constant Uint      := Esize (FST);
+ 
+          begin
+             if Is_Unsigned_Type (Typ) then
+                if P_Size <= Standard_Short_Short_Integer_Size then
+                   return RTE (RE_Short_Short_Unsigned);
+ 
+                elsif P_Size <= Standard_Short_Integer_Size then
+                   return RTE (RE_Short_Unsigned);
+ 
+                elsif P_Size <= Standard_Integer_Size then
+                   return RTE (RE_Unsigned);
+ 
+                elsif P_Size <= Standard_Long_Integer_Size then
+                   return RTE (RE_Long_Unsigned);
+ 
+                else
+                   return RTE (RE_Long_Long_Unsigned);
+                end if;
+ 
+             elsif Is_Integer_Type (Typ) then
+                if P_Size <= Standard_Short_Short_Integer_Size then
+                   return Standard_Short_Short_Integer;
+ 
+                elsif P_Size <= Standard_Short_Integer_Size then
+                   return Standard_Short_Integer;
+ 
+                elsif P_Size <= Standard_Integer_Size then
+                   return Standard_Integer;
+ 
+                elsif P_Size <= Standard_Long_Integer_Size then
+                   return Standard_Long_Integer;
+ 
+                else
+                   return Standard_Long_Long_Integer;
+                end if;
+ 
+             elsif Is_Floating_Point_Type (Typ) then
+                if P_Size <= Standard_Short_Float_Size then
+                   return Standard_Short_Float;
+ 
+                elsif P_Size <= Standard_Float_Size then
+                   return Standard_Float;
+ 
+                elsif P_Size <= Standard_Long_Float_Size then
+                   return Standard_Long_Float;
+ 
+                else
+                   return Standard_Long_Long_Float;
+                end if;
+ 
+             else
+                raise Program_Error;
+             end if;
+ 
+             --  TBD: fixed point types???
+             --  TBverified numeric types with a biased representation???
+ 
+          end Find_Numeric_Representation;
+ 
+          ---------------------------
+          -- Append_Array_Traversal --
+          ---------------------------
+ 
+          procedure Append_Array_Traversal
+            (Stmts   : List_Id;
+             Any     : Entity_Id;
+             Counter : Entity_Id := Empty;
+             Depth   : Pos       := 1)
+          is
+             Loc         : constant Source_Ptr := Sloc (Subprogram);
+             Typ         : constant Entity_Id  := Etype (Arry);
+             Constrained : constant Boolean    := Is_Constrained (Typ);
+             Ndim        : constant Pos        := Number_Dimensions (Typ);
+ 
+             Inner_Any, Inner_Counter : Entity_Id;
+ 
+             Loop_Stm    : Node_Id;
+             Inner_Stmts : constant List_Id := New_List;
+ 
+          begin
+             if Depth > Ndim then
+ 
+                --  Processing for one element of an array
+ 
+                declare
+                   Element_Expr : constant Node_Id :=
+                                    Make_Indexed_Component (Loc,
+                                      New_Occurrence_Of (Arry, Loc),
+                                      Indices);
+ 
+                begin
+                   Set_Etype (Element_Expr, Component_Type (Typ));
+                   Add_Process_Element (Stmts,
+                     Any     => Any,
+                     Counter => Counter,
+                     Datum   => Element_Expr);
+                end;
+ 
+                return;
+             end if;
+ 
+             Append_To (Indices,
+               Make_Identifier (Loc, New_External_Name ('L', Depth)));
+ 
+             if Constrained then
+                Inner_Any := Any;
+                Inner_Counter := Counter;
+             else
+                Inner_Any := Make_Defining_Identifier (Loc,
+                  New_External_Name ('A', Depth));
+                Set_Etype (Inner_Any, RTE (RE_Any));
+ 
+                if Present (Counter) then
+                   Inner_Counter := Make_Defining_Identifier (Loc,
+                     New_External_Name ('J', Depth));
+                else
+                   Inner_Counter := Empty;
+                end if;
+             end if;
+ 
+             Append_Array_Traversal (Inner_Stmts,
+               Any     => Inner_Any,
+               Counter => Inner_Counter,
+               Depth   => Depth + 1);
+ 
+             Loop_Stm :=
+               Make_Implicit_Loop_Statement (Subprogram,
+                 Iteration_Scheme =>
+                   Make_Iteration_Scheme (Loc,
+                     Loop_Parameter_Specification =>
+                       Make_Loop_Parameter_Specification (Loc,
+                         Defining_Identifier =>
+                           Make_Defining_Identifier (Loc,
+                             Chars => New_External_Name ('L', Depth)),
+ 
+                         Discrete_Subtype_Definition =>
+                           Make_Attribute_Reference (Loc,
+                             Prefix         => New_Occurrence_Of (Arry, Loc),
+                             Attribute_Name => Name_Range,
+ 
+                             Expressions => New_List (
+                               Make_Integer_Literal (Loc, Depth))))),
+                 Statements => Inner_Stmts);
+ 
+             if Constrained then
+                Append_To (Stmts, Loop_Stm);
+                return;
+             end if;
+ 
+             declare
+                Decls       : constant List_Id := New_List;
+                Dimen_Stmts : constant List_Id := New_List;
+                Length_Node : Node_Id;
+ 
+                Inner_Any_TypeCode : constant Entity_Id :=
+                                       Make_Defining_Identifier (Loc,
+                                         New_External_Name ('T', Depth));
+ 
+                Inner_Any_TypeCode_Expr : Node_Id;
+ 
+             begin
+                if Depth = 1 then
+                   Inner_Any_TypeCode_Expr :=
+                     Make_Function_Call (Loc,
+                       Name =>
+                         New_Occurrence_Of (RTE (RE_Any_Member_Type), Loc),
+                       Parameter_Associations => New_List (
+                         New_Occurrence_Of (Any, Loc),
+                         Make_Integer_Literal (Loc, Ndim)));
+                else
+                   Inner_Any_TypeCode_Expr :=
+                     Make_Function_Call (Loc,
+                       Name =>
+                         New_Occurrence_Of (RTE (RE_Content_Type), Loc),
+                       Parameter_Associations => New_List (
+                         Make_Identifier (Loc,
+                           New_External_Name ('T', Depth - 1))));
+                end if;
+ 
+                Append_To (Decls,
+                  Make_Object_Declaration (Loc,
+                    Defining_Identifier => Inner_Any_TypeCode,
+                    Constant_Present    => True,
+                    Object_Definition   => New_Occurrence_Of (
+                                             RTE (RE_TypeCode), Loc),
+                    Expression          => Inner_Any_TypeCode_Expr));
+                Append_To (Decls,
+                  Make_Object_Declaration (Loc,
+                    Defining_Identifier => Inner_Any,
+                    Object_Definition   =>
+                      New_Occurrence_Of (RTE (RE_Any), Loc),
+                    Expression          =>
+                      Make_Function_Call (Loc,
+                        Name =>
+                          New_Occurrence_Of (
+                            RTE (RE_Create_Any), Loc),
+                        Parameter_Associations => New_List (
+                          New_Occurrence_Of (Inner_Any_TypeCode, Loc)))));
+ 
+                if Present (Inner_Counter) then
+                   Append_To (Decls,
+                     Make_Object_Declaration (Loc,
+                       Defining_Identifier => Inner_Counter,
+                       Object_Definition   =>
+                         New_Occurrence_Of (RTE (RE_Long_Unsigned), Loc),
+                       Expression          =>
+                         Make_Integer_Literal (Loc, 0)));
+                end if;
+ 
+                Length_Node := Make_Attribute_Reference (Loc,
+                      Prefix         => New_Occurrence_Of (Arry, Loc),
+                      Attribute_Name => Name_Length,
+                      Expressions    =>
+                        New_List (Make_Integer_Literal (Loc, Depth)));
+                Set_Etype (Length_Node, RTE (RE_Long_Unsigned));
+ 
+                Add_Process_Element (Dimen_Stmts,
+                  Datum   => Length_Node,
+                  Any     => Inner_Any,
+                  Counter => Inner_Counter);
+ 
+                --  Loop_Stm does approrpriate processing for each element
+                --  of Inner_Any.
+ 
+                Append_To (Dimen_Stmts, Loop_Stm);
+ 
+                --  Link outer and inner any
+ 
+                Add_Process_Element (Dimen_Stmts,
+                  Any     => Any,
+                  Counter => Counter,
+                  Datum   => New_Occurrence_Of (Inner_Any, Loc));
+ 
+ 
+                Append_To (Stmts,
+                  Make_Block_Statement (Loc,
+                    Declarations =>
+                      Decls,
+                    Handled_Statement_Sequence =>
+                      Make_Handled_Sequence_Of_Statements (Loc,
+                        Statements => Dimen_Stmts)));
+             end;
+          end Append_Array_Traversal;
+ 
+          -----------------------------------------
+          -- Make_Stream_Procedure_Function_Name --
+          -----------------------------------------
+ 
+          function Make_Stream_Procedure_Function_Name
+            (Loc : Source_Ptr;
+             Typ : Entity_Id;
+             Nam : Name_Id) return Entity_Id
+          is
+          begin
+             --  For tagged types, we use a canonical name so that it matches
+             --  the primitive spec. For all other cases, we use a serialized
+             --  name so that multiple generations of the same procedure do not
+             --  clash.
+ 
+             if Is_Tagged_Type (Typ) then
+                return Make_Defining_Identifier (Loc, Nam);
+             else
+                return Make_Defining_Identifier (Loc,
+                    Chars =>
+                      New_External_Name (Nam, ' ', Increment_Serial_Number));
+             end if;
+          end Make_Stream_Procedure_Function_Name;
+       end Helpers;
+ 
+       -----------------------------------
+       -- Reserve_NamingContext_Methods --
+       -----------------------------------
+ 
+       procedure Reserve_NamingContext_Methods is
+          Str_Resolve : constant String := "resolve";
+       begin
+          Name_Buffer (1 .. Str_Resolve'Length) := Str_Resolve;
+          Name_Len := Str_Resolve'Length;
+          Overload_Counter_Table.Set (Name_Find, 1);
+       end Reserve_NamingContext_Methods;
+ 
+    end PolyORB_Support;
+ 
     -------------------------------
     -- RACW_Type_Is_Asynchronous --
     -------------------------------
  
!    procedure RACW_Type_Is_Asynchronous (RACW_Type : Entity_Id) is
!       Asynchronous_Flag : constant Entity_Id :=
!                             Asynchronous_Flags_Table.Get (RACW_Type);
     begin
!       Replace (Expression (Parent (Asynchronous_Flag)),
!         New_Occurrence_Of (Standard_True, Sloc (Asynchronous_Flag)));
     end RACW_Type_Is_Asynchronous;
  
     -------------------------
*************** package body Exp_Dist is
*** 3682,3705 ****
  
     function RCI_Package_Locator
       (Loc          : Source_Ptr;
!       Package_Spec : Node_Id)
!       return         Node_Id
     is
!       Inst : constant Node_Id :=
!                Make_Package_Instantiation (Loc,
!                  Defining_Unit_Name   =>
!                    Make_Defining_Identifier (Loc, New_Internal_Name ('R')),
!                  Name                 =>
!                    New_Occurrence_Of (RTE (RE_RCI_Info), Loc),
!                  Generic_Associations => New_List (
!                    Make_Generic_Association (Loc,
!                      Selector_Name                     =>
!                        Make_Identifier (Loc, Name_RCI_Name),
!                      Explicit_Generic_Actual_Parameter =>
!                        Make_String_Literal (Loc,
!                          Strval => Get_Pkg_Name_String_Id (Package_Spec)))));
  
     begin
        RCI_Locator_Table.Set (Defining_Unit_Name (Package_Spec),
          Defining_Unit_Name (Inst));
        return Inst;
--- 10702,10729 ----
  
     function RCI_Package_Locator
       (Loc          : Source_Ptr;
!       Package_Spec : Node_Id) return Node_Id
     is
!       Inst     : Node_Id;
!       Pkg_Name : String_Id;
  
     begin
+       Get_Library_Unit_Name_String (Package_Spec);
+       Pkg_Name := String_From_Name_Buffer;
+       Inst :=
+         Make_Package_Instantiation (Loc,
+           Defining_Unit_Name   =>
+             Make_Defining_Identifier (Loc, New_Internal_Name ('R')),
+           Name                 =>
+             New_Occurrence_Of (RTE (RE_RCI_Locator), Loc),
+           Generic_Associations => New_List (
+             Make_Generic_Association (Loc,
+               Selector_Name                     =>
+                 Make_Identifier (Loc, Name_RCI_Name),
+               Explicit_Generic_Actual_Parameter =>
+                 Make_String_Literal (Loc,
+                   Strval => Pkg_Name))));
+ 
        RCI_Locator_Table.Set (Defining_Unit_Name (Package_Spec),
          Defining_Unit_Name (Inst));
        return Inst;
*************** package body Exp_Dist is
*** 3710,3725 ****
     -----------------------------------------------
  
     procedure Remote_Types_Tagged_Full_View_Encountered
!      (Full_View : in Entity_Id)
     is
        Stub_Elements : constant Stub_Structure :=
                          Stubs_Table.Get (Full_View);
- 
     begin
        if Stub_Elements /= Empty_Stub_Structure then
           Add_RACW_Primitive_Declarations_And_Bodies
             (Full_View,
!             Parent (Declaration_Node (Stub_Elements.Object_RPC_Receiver)),
              List_Containing (Declaration_Node (Full_View)));
        end if;
     end Remote_Types_Tagged_Full_View_Encountered;
--- 10734,10748 ----
     -----------------------------------------------
  
     procedure Remote_Types_Tagged_Full_View_Encountered
!      (Full_View : Entity_Id)
     is
        Stub_Elements : constant Stub_Structure :=
                          Stubs_Table.Get (Full_View);
     begin
        if Stub_Elements /= Empty_Stub_Structure then
           Add_RACW_Primitive_Declarations_And_Bodies
             (Full_View,
!             Stub_Elements.RPC_Receiver_Decl,
              List_Containing (Declaration_Node (Full_View)));
        end if;
     end Remote_Types_Tagged_Full_View_Encountered;
*************** package body Exp_Dist is
*** 3739,3742 ****
--- 10762,11069 ----
        return Unit_Name;
     end Scope_Of_Spec;
  
+    ----------------------
+    -- Set_Renaming_TSS --
+    ----------------------
+ 
+    procedure Set_Renaming_TSS
+      (Typ     : Entity_Id;
+       Nam     : Entity_Id;
+       TSS_Nam : Name_Id)
+    is
+       Loc  : constant Source_Ptr := Sloc (Nam);
+       Spec : constant Node_Id := Parent (Nam);
+ 
+       TSS_Node : constant Node_Id :=
+                    Make_Subprogram_Renaming_Declaration (Loc,
+                      Specification =>
+                        Copy_Specification (Loc,
+                          Spec     => Spec,
+                          New_Name => TSS_Nam),
+                        Name => New_Occurrence_Of (Nam, Loc));
+ 
+       Snam : constant Entity_Id :=
+                Defining_Unit_Name (Specification (TSS_Node));
+ 
+    begin
+       if Nkind (Spec) = N_Function_Specification then
+          Set_Ekind (Snam, E_Function);
+          Set_Etype (Snam, Entity (Subtype_Mark (Spec)));
+       else
+          Set_Ekind (Snam, E_Procedure);
+          Set_Etype (Snam, Standard_Void_Type);
+       end if;
+ 
+       Set_TSS (Typ, Snam);
+    end Set_Renaming_TSS;
+ 
+    ----------------------------------------------
+    -- Specific_Add_Obj_RPC_Receiver_Completion --
+    ----------------------------------------------
+ 
+    procedure Specific_Add_Obj_RPC_Receiver_Completion
+      (Loc           : Source_Ptr;
+       Decls         : List_Id;
+       RPC_Receiver  : Entity_Id;
+       Stub_Elements : Stub_Structure) is
+    begin
+       case Get_PCS_Name is
+          when Name_PolyORB_DSA =>
+             PolyORB_Support.Add_Obj_RPC_Receiver_Completion (Loc,
+               Decls, RPC_Receiver, Stub_Elements);
+          when others =>
+             GARLIC_Support.Add_Obj_RPC_Receiver_Completion (Loc,
+               Decls, RPC_Receiver, Stub_Elements);
+       end case;
+    end Specific_Add_Obj_RPC_Receiver_Completion;
+ 
+    --------------------------------
+    -- Specific_Add_RACW_Features --
+    --------------------------------
+ 
+    procedure Specific_Add_RACW_Features
+      (RACW_Type         : Entity_Id;
+       Desig             : Entity_Id;
+       Stub_Type         : Entity_Id;
+       Stub_Type_Access  : Entity_Id;
+       RPC_Receiver_Decl : Node_Id;
+       Declarations      : List_Id) is
+    begin
+       case Get_PCS_Name is
+          when Name_PolyORB_DSA =>
+             PolyORB_Support.Add_RACW_Features (
+               RACW_Type,
+               Desig,
+               Stub_Type,
+               Stub_Type_Access,
+               RPC_Receiver_Decl,
+               Declarations);
+ 
+          when others =>
+             GARLIC_Support.Add_RACW_Features (
+               RACW_Type,
+               Stub_Type,
+               Stub_Type_Access,
+               RPC_Receiver_Decl,
+               Declarations);
+       end case;
+    end Specific_Add_RACW_Features;
+ 
+    --------------------------------
+    -- Specific_Add_RAST_Features --
+    --------------------------------
+ 
+    procedure Specific_Add_RAST_Features
+      (Vis_Decl : Node_Id;
+       RAS_Type : Entity_Id;
+       Decls    : List_Id)
+    is
+    begin
+       case Get_PCS_Name is
+          when Name_PolyORB_DSA =>
+             PolyORB_Support.Add_RAST_Features (
+               Vis_Decl, RAS_Type, Decls);
+          when others =>
+             GARLIC_Support.Add_RAST_Features (
+               Vis_Decl, RAS_Type, Decls);
+       end case;
+    end Specific_Add_RAST_Features;
+ 
+    --------------------------------------------------
+    -- Specific_Add_Receiving_Stubs_To_Declarations --
+    --------------------------------------------------
+ 
+    procedure Specific_Add_Receiving_Stubs_To_Declarations
+      (Pkg_Spec : Node_Id;
+       Decls    : List_Id)
+    is
+    begin
+       case Get_PCS_Name is
+          when Name_PolyORB_DSA =>
+             PolyORB_Support.Add_Receiving_Stubs_To_Declarations (
+               Pkg_Spec, Decls);
+          when others =>
+             GARLIC_Support.Add_Receiving_Stubs_To_Declarations (
+               Pkg_Spec, Decls);
+       end case;
+    end Specific_Add_Receiving_Stubs_To_Declarations;
+ 
+    ------------------------------------------
+    -- Specific_Build_General_Calling_Stubs --
+    ------------------------------------------
+ 
+    procedure Specific_Build_General_Calling_Stubs
+      (Decls                     : List_Id;
+       Statements                : List_Id;
+       Target                    : RPC_Target;
+       Subprogram_Id             : Node_Id;
+       Asynchronous              : Node_Id   := Empty;
+       Is_Known_Asynchronous     : Boolean   := False;
+       Is_Known_Non_Asynchronous : Boolean   := False;
+       Is_Function               : Boolean;
+       Spec                      : Node_Id;
+       Stub_Type                 : Entity_Id := Empty;
+       RACW_Type                 : Entity_Id := Empty;
+       Nod                       : Node_Id)
+    is
+    begin
+       case Get_PCS_Name is
+          when Name_PolyORB_DSA =>
+             PolyORB_Support.Build_General_Calling_Stubs (
+               Decls,
+               Statements,
+               Target.Object,
+               Subprogram_Id,
+               Asynchronous,
+               Is_Known_Asynchronous,
+               Is_Known_Non_Asynchronous,
+               Is_Function,
+               Spec,
+               Stub_Type,
+               RACW_Type,
+               Nod);
+          when others =>
+             GARLIC_Support.Build_General_Calling_Stubs (
+               Decls,
+               Statements,
+               Target.Partition,
+               Target.RPC_Receiver,
+               Subprogram_Id,
+               Asynchronous,
+               Is_Known_Asynchronous,
+               Is_Known_Non_Asynchronous,
+               Is_Function,
+               Spec,
+               Stub_Type,
+               RACW_Type,
+               Nod);
+       end case;
+    end Specific_Build_General_Calling_Stubs;
+ 
+    --------------------------------------
+    -- Specific_Build_RPC_Receiver_Body --
+    --------------------------------------
+ 
+    procedure Specific_Build_RPC_Receiver_Body
+      (RPC_Receiver : Entity_Id;
+       Request      : out Entity_Id;
+       Subp_Id      : out Entity_Id;
+       Subp_Index   : out Entity_Id;
+       Stmts        : out List_Id;
+       Decl         : out Node_Id)
+    is
+    begin
+       case Get_PCS_Name is
+          when Name_PolyORB_DSA =>
+             PolyORB_Support.Build_RPC_Receiver_Body
+               (RPC_Receiver,
+                Request,
+                Subp_Id,
+                Subp_Index,
+                Stmts,
+                Decl);
+          when others =>
+             GARLIC_Support.Build_RPC_Receiver_Body
+               (RPC_Receiver,
+                Request,
+                Subp_Id,
+                Subp_Index,
+                Stmts,
+                Decl);
+       end case;
+    end Specific_Build_RPC_Receiver_Body;
+ 
+    --------------------------------
+    -- Specific_Build_Stub_Target --
+    --------------------------------
+ 
+    function Specific_Build_Stub_Target
+      (Loc                   : Source_Ptr;
+       Decls                 : List_Id;
+       RCI_Locator           : Entity_Id;
+       Controlling_Parameter : Entity_Id) return RPC_Target is
+    begin
+       case Get_PCS_Name is
+          when Name_PolyORB_DSA =>
+             return PolyORB_Support.Build_Stub_Target (Loc,
+                      Decls, RCI_Locator, Controlling_Parameter);
+          when others =>
+             return GARLIC_Support.Build_Stub_Target (Loc,
+                      Decls, RCI_Locator, Controlling_Parameter);
+       end case;
+    end Specific_Build_Stub_Target;
+ 
+    ------------------------------
+    -- Specific_Build_Stub_Type --
+    ------------------------------
+ 
+    procedure Specific_Build_Stub_Type
+      (RACW_Type         : Entity_Id;
+       Stub_Type         : Entity_Id;
+       Stub_Type_Decl    : out Node_Id;
+       RPC_Receiver_Decl : out Node_Id)
+    is
+    begin
+       case Get_PCS_Name is
+          when Name_PolyORB_DSA =>
+             PolyORB_Support.Build_Stub_Type (
+               RACW_Type, Stub_Type,
+               Stub_Type_Decl, RPC_Receiver_Decl);
+          when others =>
+             GARLIC_Support.Build_Stub_Type (
+               RACW_Type, Stub_Type,
+               Stub_Type_Decl, RPC_Receiver_Decl);
+       end case;
+    end Specific_Build_Stub_Type;
+ 
+    function Specific_Build_Subprogram_Receiving_Stubs
+      (Vis_Decl                 : Node_Id;
+       Asynchronous             : Boolean;
+       Dynamically_Asynchronous : Boolean   := False;
+       Stub_Type                : Entity_Id := Empty;
+       RACW_Type                : Entity_Id := Empty;
+       Parent_Primitive         : Entity_Id := Empty) return Node_Id is
+    begin
+       case Get_PCS_Name is
+          when Name_PolyORB_DSA =>
+             return PolyORB_Support.Build_Subprogram_Receiving_Stubs (
+                      Vis_Decl,
+                      Asynchronous,
+                      Dynamically_Asynchronous,
+                      Stub_Type,
+                      RACW_Type,
+                      Parent_Primitive);
+          when others =>
+             return GARLIC_Support.Build_Subprogram_Receiving_Stubs (
+                      Vis_Decl,
+                      Asynchronous,
+                      Dynamically_Asynchronous,
+                      Stub_Type,
+                      RACW_Type,
+                      Parent_Primitive);
+       end case;
+    end Specific_Build_Subprogram_Receiving_Stubs;
+ 
+    --------------------------
+    -- Underlying_RACW_Type --
+    --------------------------
+ 
+    function Underlying_RACW_Type (RAS_Typ : Entity_Id) return Entity_Id is
+       Record_Type : Entity_Id;
+ 
+    begin
+       if Ekind (RAS_Typ) = E_Record_Type then
+          Record_Type := RAS_Typ;
+       else
+          pragma Assert (Present (Equivalent_Type (RAS_Typ)));
+          Record_Type := Equivalent_Type (RAS_Typ);
+       end if;
+ 
+       return
+         Etype (Subtype_Indication (
+           Component_Definition (
+            First (Component_Items (Component_List (
+             Type_Definition (Declaration_Node (Record_Type))))))));
+    end Underlying_RACW_Type;
+ 
  end Exp_Dist;
diff -Nrcpad gcc-3.4.3/gcc/ada/exp_dist.ads gcc-4.0.0/gcc/ada/exp_dist.ads
*** gcc-3.4.3/gcc/ada/exp_dist.ads	Thu Apr 24 17:54:01 2003
--- gcc-4.0.0/gcc/ada/exp_dist.ads	Mon Sep 13 10:18:39 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-1998 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Exp_Dist is
*** 78,81 ****
--- 78,103 ----
     --  Build stub for a shared passive package. U is the analyzed
     --  compilation unit for a package declaration.
  
+    function Build_Subprogram_Id
+      (Loc : Source_Ptr;
+       E   : Entity_Id) return Node_Id;
+    --  Build a literal representing the remote subprogram identifier of E
+ 
+    function Copy_Specification
+      (Loc         : Source_Ptr;
+       Spec        : Node_Id;
+       Object_Type : Entity_Id := Empty;
+       Stub_Type   : Entity_Id := Empty;
+       New_Name    : Name_Id   := No_Name) return Node_Id;
+    --  Build a subprogram specification from another one, or from
+    --  an access-to-subprogram definition. If Object_Type is not Empty
+    --  and any access to Object_Type is found, then it is replaced by an
+    --  access to Stub_Type. If New_Name is given, then it will be used as
+    --  the name for the newly created spec.
+ 
+    function Underlying_RACW_Type
+      (RAS_Typ : Entity_Id) return Entity_Id;
+    --  Given a remote access-to-subprogram type or its equivalent
+    --  record type, return the RACW type generated to implement it.
+ 
  end Exp_Dist;
diff -Nrcpad gcc-3.4.3/gcc/ada/exp_fixd.adb gcc-4.0.0/gcc/ada/exp_fixd.adb
*** gcc-3.4.3/gcc/ada/exp_fixd.adb	Tue Oct 21 13:41:59 2003
--- gcc-4.0.0/gcc/ada/exp_fixd.adb	Wed May  5 10:09:54 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Exp_Fixd is
*** 561,571 ****
        --  call the runtime routine to compute the quotient and remainder
  
        else
!          if Rounded_Result_Set (N) then
!             Rnd := Standard_True;
!          else
!             Rnd := Standard_False;
!          end if;
  
           Code := New_List (
             Make_Object_Declaration (Loc,
--- 561,567 ----
        --  call the runtime routine to compute the quotient and remainder
  
        else
!          Rnd := Boolean_Literals (Rounded_Result_Set (N));
  
           Code := New_List (
             Make_Object_Declaration (Loc,
*************** package body Exp_Fixd is
*** 947,957 ****
        --  call the runtime routine to compute the quotient and remainder
  
        else
!          if Rounded_Result_Set (N) then
!             Rnd := Standard_True;
!          else
!             Rnd := Standard_False;
!          end if;
  
           Code := New_List (
             Make_Object_Declaration (Loc,
--- 943,949 ----
        --  call the runtime routine to compute the quotient and remainder
  
        else
!          Rnd := Boolean_Literals (Rounded_Result_Set (N));
  
           Code := New_List (
             Make_Object_Declaration (Loc,
diff -Nrcpad gcc-3.4.3/gcc/ada/exp_imgv.adb gcc-4.0.0/gcc/ada/exp_imgv.adb
*** gcc-3.4.3/gcc/ada/exp_imgv.adb	Mon Jan 12 11:45:23 2004
--- gcc-4.0.0/gcc/ada/exp_imgv.adb	Thu Feb 10 13:50:23 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Exp_Imgv is
*** 194,199 ****
--- 194,204 ----
     --      tv = Wide_Character (Expr)
     --      pm = Wide_Character_Encoding_Method
  
+    --    For types whose root type is Wide_Wide_Character
+    --      xx = Wide_Wide_haracter
+    --      tv = Wide_Wide_Character (Expr)
+    --      pm = Wide_Character_Encoding_Method
+ 
     --    For floating-point types
     --      xx = Floating_Point
     --      tv = Long_Long_Float (Expr)
*************** package body Exp_Imgv is
*** 254,259 ****
--- 259,268 ----
           Imid := RE_Image_Wide_Character;
           Tent := Rtyp;
  
+       elsif Rtyp = Standard_Wide_Wide_Character then
+          Imid := RE_Image_Wide_Wide_Character;
+          Tent := Rtyp;
+ 
        elsif Is_Signed_Integer_Type (Rtyp) then
           if Esize (Rtyp) <= Esize (Standard_Integer) then
              Imid := RE_Image_Integer;
*************** package body Exp_Imgv is
*** 382,390 ****
               Prefix         => New_Reference_To (Ptyp, Loc),
               Attribute_Name => Name_Aft));
  
!       --  For wide character, append encoding method
  
!       elsif Rtyp = Standard_Wide_Character then
           Append_To (Arglist,
             Make_Integer_Literal (Loc,
               Intval => Int (Wide_Character_Encoding_Method)));
--- 391,401 ----
               Prefix         => New_Reference_To (Ptyp, Loc),
               Attribute_Name => Name_Aft));
  
!       --  For wide [wide] character, append encoding method
  
!       elsif Rtyp = Standard_Wide_Character
!         or else Rtyp = Standard_Wide_Wide_Character
!       then
           Append_To (Arglist,
             Make_Integer_Literal (Loc,
               Intval => Int (Wide_Character_Encoding_Method)));
*************** package body Exp_Imgv is
*** 445,450 ****
--- 456,465 ----
  
     --    Value_Wide_Character (X, Wide_Character_Encoding_Method)
  
+    --  For types derived from Wide_Wide_Character, typ'Value (X) expands into
+ 
+    --    Value_Wide_Wide_Character (X, Wide_Character_Encoding_Method)
+ 
     --  For decimal types with size <= Integer'Size, typ'Value (X)
     --  expands into
  
*************** package body Exp_Imgv is
*** 455,461 ****
     --    btyp?(Value_Long_Long_Decimal (X, typ'Scale))
  
     --  For enumeration types other than those derived from types Boolean,
!    --  Character, and Wide_Character in Standard, typ'Value (X) expands to:
  
     --    Enum'Val (Value_Enumeration_NN (typS, typI'Address, Num, X))
  
--- 470,476 ----
     --    btyp?(Value_Long_Long_Decimal (X, typ'Scale))
  
     --  For enumeration types other than those derived from types Boolean,
!    --  Character, Wide_[Wide_]Character in Standard, typ'Value (X) expands to:
  
     --    Enum'Val (Value_Enumeration_NN (typS, typI'Address, Num, X))
  
*************** package body Exp_Imgv is
*** 493,498 ****
--- 508,519 ----
             Make_Integer_Literal (Loc,
               Intval => Int (Wide_Character_Encoding_Method)));
  
+       elsif Rtyp = Standard_Wide_Wide_Character then
+          Vid := RE_Value_Wide_Wide_Character;
+          Append_To (Args,
+            Make_Integer_Literal (Loc,
+              Intval => Int (Wide_Character_Encoding_Method)));
+ 
        elsif     Rtyp = Base_Type (Standard_Short_Short_Integer)
          or else Rtyp = Base_Type (Standard_Short_Integer)
          or else Rtyp = Base_Type (Standard_Integer)
*************** package body Exp_Imgv is
*** 624,643 ****
     -- Expand_Width_Attribute --
     ----------------------------
  
!    --  The processing here also handles the case of Wide_Width. With the
     --  exceptions noted, the processing is identical
  
     --  For scalar types derived from Boolean, character and integer types
     --  in package Standard. Note that the Width attribute is computed at
     --  compile time for all cases except those involving non-static sub-
!    --  types. For such subtypes, typ'Width and typ'Wide_Width expands into:
  
     --    Result_Type (xx (yy (Ptyp'First), yy (Ptyp'Last)))
  
     --  where
  
     --    For types whose root type is Character
!    --      xx = Width_Character (Wide_Width_Character for Wide_Width case)
     --      yy = Character
  
     --    For types whose root type is Boolean
--- 645,672 ----
     -- Expand_Width_Attribute --
     ----------------------------
  
!    --  The processing here also handles the case of Wide_[Wide_]Width. With the
     --  exceptions noted, the processing is identical
  
     --  For scalar types derived from Boolean, character and integer types
     --  in package Standard. Note that the Width attribute is computed at
     --  compile time for all cases except those involving non-static sub-
!    --  types. For such subtypes, typ'[Wide_[Wide_]]Width expands into:
  
     --    Result_Type (xx (yy (Ptyp'First), yy (Ptyp'Last)))
  
     --  where
  
     --    For types whose root type is Character
!    --      xx = Width_Character
!    --      yy = Character
! 
!    --    For types whose root type is Wide_Character
!    --      xx = Wide_Width_Character
!    --      yy = Character
! 
!    --    For types whose root type is Wide_Wide_Character
!    --      xx = Wide_Wide_Width_Character
     --      yy = Character
  
     --    For types whose root type is Boolean
*************** package body Exp_Imgv is
*** 664,671 ****
     --    Result_Type (Wide_Width_Wide_Character (
     --      Wide_Character (typ'First),
     --      Wide_Character (typ'Last));
  
!    --  For real types, typ'Width and typ'Wide_Width expand into
  
     --    if Ptyp'First > Ptyp'Last then 0 else btyp'Width end if
  
--- 693,729 ----
     --    Result_Type (Wide_Width_Wide_Character (
     --      Wide_Character (typ'First),
     --      Wide_Character (typ'Last));
+    --      Wide_Character_Encoding_Method);
  
!    --  and typ'Wide_Wide_Width expands into
! 
!    --    Result_Type (Wide_Wide_Width_Wide_Character (
!    --      Wide_Character (typ'First),
!    --      Wide_Character (typ'Last));
!    --      Wide_Character_Encoding_Method);
! 
!    --  For types derived from Wide_Wide_Character, typ'Width expands into
! 
!    --    Result_Type (Width_Wide_Wide_Character (
!    --      Wide_Wide_Character (typ'First),
!    --      Wide_Wide_Character (typ'Last),
!    --      Wide_Character_Encoding_Method);
! 
!    --  and typ'Wide_Width expands into:
! 
!    --    Result_Type (Wide_Width_Wide_Wide_Character (
!    --      Wide_Wide_Character (typ'First),
!    --      Wide_Wide_Character (typ'Last));
!    --      Wide_Character_Encoding_Method);
! 
!    --  and typ'Wide_Wide_Width expands into
! 
!    --    Result_Type (Wide_Wide_Width_Wide_Wide_Char (
!    --      Wide_Wide_Character (typ'First),
!    --      Wide_Wide_Character (typ'Last));
!    --      Wide_Character_Encoding_Method);
! 
!    --  For real types, typ'Width and typ'Wide_[Wide_]Width expand into
  
     --    if Ptyp'First > Ptyp'Last then 0 else btyp'Width end if
  
*************** package body Exp_Imgv is
*** 690,700 ****
     --                   typ'Pos (Typ'Last))
     --                   Wide_Character_Encoding_Method);
  
     --  where typS and typI are the enumeration image strings and
     --  indexes table, as described in Build_Enumeration_Image_Tables.
     --  NN is 8/16/32 for depending on the element type for typI.
  
!    procedure Expand_Width_Attribute (N : Node_Id; Wide : Boolean) is
        Loc     : constant Source_Ptr := Sloc (N);
        Typ     : constant Entity_Id  := Etype (N);
        Pref    : constant Node_Id    := Prefix (N);
--- 748,767 ----
     --                   typ'Pos (Typ'Last))
     --                   Wide_Character_Encoding_Method);
  
+    --  and typ'Wide_Wide_Width expands into:
+ 
+    --    Result_Type (Wide_Wide_Width_Enumeration_NN
+    --                  (typS,
+    --                   typI,
+    --                   typ'Pos (typ'First),
+    --                   typ'Pos (Typ'Last))
+    --                   Wide_Character_Encoding_Method);
+ 
     --  where typS and typI are the enumeration image strings and
     --  indexes table, as described in Build_Enumeration_Image_Tables.
     --  NN is 8/16/32 for depending on the element type for typI.
  
!    procedure Expand_Width_Attribute (N : Node_Id; Attr : Atype := Normal) is
        Loc     : constant Source_Ptr := Sloc (N);
        Typ     : constant Entity_Id  := Etype (N);
        Pref    : constant Node_Id    := Prefix (N);
*************** package body Exp_Imgv is
*** 715,736 ****
        --  Types derived from Standard.Character
  
        elsif Rtyp = Standard_Character then
!          if not Wide then
!             XX := RE_Width_Character;
!          else
!             XX := RE_Wide_Width_Character;
!          end if;
  
           YY := Rtyp;
  
        --  Types derived from Standard.Wide_Character
  
        elsif Rtyp = Standard_Wide_Character then
!          if not Wide then
!             XX := RE_Width_Wide_Character;
!          else
!             XX := RE_Wide_Width_Wide_Character;
!          end if;
  
           YY := Rtyp;
  
--- 782,814 ----
        --  Types derived from Standard.Character
  
        elsif Rtyp = Standard_Character then
!          case Attr is
!             when Normal    => XX := RE_Width_Character;
!             when Wide      => XX := RE_Wide_Width_Character;
!             when Wide_Wide => XX := RE_Wide_Wide_Width_Character;
!          end case;
  
           YY := Rtyp;
  
        --  Types derived from Standard.Wide_Character
  
        elsif Rtyp = Standard_Wide_Character then
!          case Attr is
!             when Normal    => XX := RE_Width_Wide_Character;
!             when Wide      => XX := RE_Wide_Width_Wide_Character;
!             when Wide_Wide => XX := RE_Wide_Wide_Width_Wide_Character;
!          end case;
! 
!          YY := Rtyp;
! 
!       --  Types derived from Standard.Wide_Wide_Character
! 
!       elsif Rtyp = Standard_Wide_Wide_Character then
!          case Attr is
!             when Normal    => XX := RE_Width_Wide_Wide_Character;
!             when Wide      => XX := RE_Wide_Width_Wide_Wide_Character;
!             when Wide_Wide => XX := RE_Wide_Wide_Width_Wide_Wide_Char;
!          end case;
  
           YY := Rtyp;
  
*************** package body Exp_Imgv is
*** 781,804 ****
  
           Ttyp := Component_Type (Etype (Lit_Indexes (Rtyp)));
  
!          if not Wide then
!             if Ttyp = Standard_Integer_8 then
!                XX := RE_Width_Enumeration_8;
!             elsif Ttyp = Standard_Integer_16  then
!                XX := RE_Width_Enumeration_16;
!             else
!                XX := RE_Width_Enumeration_32;
!             end if;
  
!          else
!             if Ttyp = Standard_Integer_8 then
!                XX := RE_Wide_Width_Enumeration_8;
!             elsif Ttyp = Standard_Integer_16  then
!                XX := RE_Wide_Width_Enumeration_16;
!             else
!                XX := RE_Wide_Width_Enumeration_32;
!             end if;
!          end if;
  
           Arglist :=
             New_List (
--- 859,892 ----
  
           Ttyp := Component_Type (Etype (Lit_Indexes (Rtyp)));
  
!          case Attr is
!             when Normal =>
!                if Ttyp = Standard_Integer_8 then
!                   XX := RE_Width_Enumeration_8;
!                elsif Ttyp = Standard_Integer_16  then
!                   XX := RE_Width_Enumeration_16;
!                else
!                   XX := RE_Width_Enumeration_32;
!                end if;
  
!             when Wide =>
!                if Ttyp = Standard_Integer_8 then
!                   XX := RE_Wide_Width_Enumeration_8;
!                elsif Ttyp = Standard_Integer_16  then
!                   XX := RE_Wide_Width_Enumeration_16;
!                else
!                   XX := RE_Wide_Width_Enumeration_32;
!                end if;
! 
!             when Wide_Wide =>
!                if Ttyp = Standard_Integer_8 then
!                   XX := RE_Wide_Wide_Width_Enumeration_8;
!                elsif Ttyp = Standard_Integer_16  then
!                   XX := RE_Wide_Wide_Width_Enumeration_16;
!                else
!                   XX := RE_Wide_Wide_Width_Enumeration_32;
!                end if;
!          end case;
  
           Arglist :=
             New_List (
*************** package body Exp_Imgv is
*** 826,834 ****
                     Prefix => New_Reference_To (Ptyp, Loc),
                     Attribute_Name => Name_Last))));
  
!          --  For enumeration'Wide_Width, add encoding method parameter
  
!          if Wide then
              Append_To (Arglist,
                Make_Integer_Literal (Loc,
                  Intval => Int (Wide_Character_Encoding_Method)));
--- 914,922 ----
                     Prefix => New_Reference_To (Ptyp, Loc),
                     Attribute_Name => Name_Last))));
  
!          --  For enumeration'Wide_[Wide_]Width, add encoding method parameter
  
!          if Attr /= Normal then
              Append_To (Arglist,
                Make_Integer_Literal (Loc,
                  Intval => Int (Wide_Character_Encoding_Method)));
*************** package body Exp_Imgv is
*** 857,865 ****
              Prefix => New_Reference_To (Ptyp, Loc),
              Attribute_Name => Name_Last)));
  
!       --  For Wide_Character'Width, add encoding method parameter
  
!       if Rtyp = Standard_Wide_Character and then Wide then
           Append_To (Arglist,
             Make_Integer_Literal (Loc,
               Intval => Int (Wide_Character_Encoding_Method)));
--- 945,956 ----
              Prefix => New_Reference_To (Ptyp, Loc),
              Attribute_Name => Name_Last)));
  
!       --  For Wide_[Wide_]Character'Width, add encoding method parameter
  
!       if (Rtyp = Standard_Wide_Character
!            or else
!           Rtyp = Standard_Wide_Wide_Character)
!         and then Attr /= Normal then
           Append_To (Arglist,
             Make_Integer_Literal (Loc,
               Intval => Int (Wide_Character_Encoding_Method)));
diff -Nrcpad gcc-3.4.3/gcc/ada/exp_imgv.ads gcc-4.0.0/gcc/ada/exp_imgv.ads
*** gcc-3.4.3/gcc/ada/exp_imgv.ads	Thu Apr 24 17:54:01 2003
--- gcc-4.0.0/gcc/ada/exp_imgv.ads	Thu Feb 10 13:50:23 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2000 Free Software Foundation, Inc.             --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2000-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Exp_Imgv is
*** 78,85 ****
     --  This procedure is called from Exp_Attr to expand an occurrence
     --  of the attribute Value.
  
!    procedure Expand_Width_Attribute (N : Node_Id; Wide : Boolean);
!    --  This procedure is called from Exp_Attr to expand an occurrence of
!    --  the attributes Width (Wide = False) or Wide_Width (Wide = True).
  
  end Exp_Imgv;
--- 78,89 ----
     --  This procedure is called from Exp_Attr to expand an occurrence
     --  of the attribute Value.
  
!    type Atype is (Normal, Wide, Wide_Wide);
!    --  Type of attribute in call to Expand_Width_Attribute
! 
!    procedure Expand_Width_Attribute (N : Node_Id; Attr : Atype := Normal);
!    --  This procedure is called from Exp_Attr to expand an occurrence of the
!    --  attributes Width (Attr = Normal), or Wide_Width (Attr Wide), or
!    --  Wide_Wide_Width (Attr = Wide_Wide).
  
  end Exp_Imgv;
diff -Nrcpad gcc-3.4.3/gcc/ada/exp_intr.adb gcc-4.0.0/gcc/ada/exp_intr.adb
*** gcc-3.4.3/gcc/ada/exp_intr.adb	Tue Oct 21 13:41:59 2003
--- gcc-4.0.0/gcc/ada/exp_intr.adb	Wed Dec  8 11:27:00 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Exp_Intr is
*** 72,78 ****
  
     procedure Expand_Shift (N : Node_Id; E : Entity_Id; K : Node_Kind);
     --  Expand an intrinsic shift operation, N and E are from the call to
!    --  Expand_Instrinsic_Call (call node and subprogram spec entity) and
     --  K is the kind for the shift node
  
     procedure Expand_Unc_Conversion (N : Node_Id; E : Entity_Id);
--- 72,78 ----
  
     procedure Expand_Shift (N : Node_Id; E : Entity_Id; K : Node_Kind);
     --  Expand an intrinsic shift operation, N and E are from the call to
!    --  Expand_Intrinsic_Call (call node and subprogram spec entity) and
     --  K is the kind for the shift node
  
     procedure Expand_Unc_Conversion (N : Node_Id; E : Entity_Id);
*************** package body Exp_Intr is
*** 110,130 ****
        Loc : constant Source_Ptr := Sloc (N);
        P   : Node_Id;
        E   : Entity_Id;
-       S   : String_Id;
  
     begin
        --  Climb up parents to see if we are in exception handler
  
        P := Parent (N);
        loop
!          --  Case of not in exception handler
  
           if No (P) then
-             Start_String;
-             S := End_String;
              Rewrite (N,
                Make_String_Literal (Loc,
!                 Strval => S));
              exit;
  
           --  Case of in exception handler
--- 110,127 ----
        Loc : constant Source_Ptr := Sloc (N);
        P   : Node_Id;
        E   : Entity_Id;
  
     begin
        --  Climb up parents to see if we are in exception handler
  
        P := Parent (N);
        loop
!          --  Case of not in exception handler, replace by null string
  
           if No (P) then
              Rewrite (N,
                Make_String_Literal (Loc,
!                 Strval => ""));
              exit;
  
           --  Case of in exception handler
*************** package body Exp_Intr is
*** 214,220 ****
        Nam : Name_Id;
  
     begin
!       --  If the intrinsic subprogram is generic, gets its original name.
  
        if Present (Parent (E))
          and then Present (Generic_Parent (Parent (E)))
--- 211,217 ----
        Nam : Name_Id;
  
     begin
!       --  If the intrinsic subprogram is generic, gets its original name
  
        if Present (Parent (E))
          and then Present (Generic_Parent (Parent (E)))
*************** package body Exp_Intr is
*** 284,295 ****
        then
           Expand_Source_Info (N, Nam);
  
!       else
!          --  Only other possibility is a renaming, in which case we expand
!          --  the call to the original operation (which must be intrinsic).
  
!          pragma Assert (Present (Alias (E)));
           Expand_Intrinsic_Call (N,  Alias (E));
        end if;
     end Expand_Intrinsic_Call;
  
--- 281,301 ----
        then
           Expand_Source_Info (N, Nam);
  
!          --  If we have a renaming, expand the call to the original operation,
!          --  which must itself be intrinsic, since renaming requires matching
!          --  conventions and this has already been checked.
  
!       elsif Present (Alias (E)) then
           Expand_Intrinsic_Call (N,  Alias (E));
+ 
+          --  The only other case is where an external name was specified,
+          --  since this is the only way that an otherwise unrecognized
+          --  name could escape the checking in Sem_Prag. Nothing needs
+          --  to be done in such a case, since we pass such a call to the
+          --  back end unchanged.
+ 
+       else
+          null;
        end if;
     end Expand_Intrinsic_Call;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/exp_pakd.adb gcc-4.0.0/gcc/ada/exp_pakd.adb
*** gcc-3.4.3/gcc/ada/exp_pakd.adb	Mon Jan 12 11:45:23 2004
--- gcc-4.0.0/gcc/ada/exp_pakd.adb	Mon Jan  3 15:43:24 2005
*************** package body Exp_Pakd is
*** 469,476 ****
  
     function RJ_Unchecked_Convert_To
       (Typ  : Entity_Id;
!       Expr : Node_Id)
!       return Node_Id;
     --  The packed array code does unchecked conversions which in some cases
     --  may involve non-discrete types with differing sizes. The semantics of
     --  such conversions is potentially endian dependent, and the effect we
--- 469,475 ----
  
     function RJ_Unchecked_Convert_To
       (Typ  : Entity_Id;
!       Expr : Node_Id) return Node_Id;
     --  The packed array code does unchecked conversions which in some cases
     --  may involve non-discrete types with differing sizes. The semantics of
     --  such conversions is potentially endian dependent, and the effect we
*************** package body Exp_Pakd is
*** 686,692 ****
--- 685,708 ----
        --  because the expression will not be further analyzed, and Gigi
        --  considers the two types equivalent in any case.
  
+       --  This is not strictly the case ??? If the reference is an actual
+       --  in a call, the expansion of the prefix is delayed, and must be
+       --  reanalyzed, see Reset_Packed_Prefix. On the other hand, if the
+       --  prefix is a simple array reference, reanalysis can produce spurious
+       --  type errors when the PAT type is replaced again with the original
+       --  type of the array. The following is correct and minimal, but the
+       --  handling of more complex packed expressions in actuals is confused.
+       --  It is likely that the problem only remains for actuals in calls.
+ 
        Set_Etype (Aexp, Packed_Array_Type (Act_ST));
+ 
+       if Is_Entity_Name (Aexp)
+         or else
+            (Nkind (Aexp) = N_Indexed_Component
+              and then Is_Entity_Name (Prefix (Aexp)))
+       then
+          Set_Analyzed (Aexp);
+       end if;
     end Convert_To_PAT_Type;
  
     ------------------------------
*************** package body Exp_Pakd is
*** 700,706 ****
  
        Ancest   : Entity_Id;
        PB_Type  : Entity_Id;
!       Esiz     : Uint;
        Decl     : Node_Id;
        PAT      : Entity_Id;
        Len_Dim  : Node_Id;
--- 716,722 ----
  
        Ancest   : Entity_Id;
        PB_Type  : Entity_Id;
!       PASize   : Uint;
        Decl     : Node_Id;
        PAT      : Entity_Id;
        Len_Dim  : Node_Id;
*************** package body Exp_Pakd is
*** 770,779 ****
           --  Do not reset RM_Size if already set, as happens in the case
           --  of a modular type.
  
!          Set_Esize (PAT, Esiz);
  
           if Unknown_RM_Size (PAT) then
!             Set_RM_Size (PAT, Esiz);
           end if;
  
           --  Set remaining fields of packed array type
--- 786,795 ----
           --  Do not reset RM_Size if already set, as happens in the case
           --  of a modular type.
  
!          Set_Esize (PAT, PASize);
  
           if Unknown_RM_Size (PAT) then
!             Set_RM_Size (PAT, PASize);
           end if;
  
           --  Set remaining fields of packed array type
*************** package body Exp_Pakd is
*** 791,796 ****
--- 807,818 ----
  
           Set_Has_Delayed_Freeze (PAT, False);
           Set_Has_Delayed_Freeze (Etype (PAT), False);
+ 
+          --  If we did allocate a freeze node, then clear out the reference
+          --  since it is obsolete (should we delete the freeze node???)
+ 
+          Set_Freeze_Node (PAT, Empty);
+          Set_Freeze_Node (Etype (PAT), Empty);
        end Install_PAT;
  
        -----------------
*************** package body Exp_Pakd is
*** 829,840 ****
  
        --  If our immediate ancestor subtype is constrained, and it already
        --  has a packed array type, then just share the same type, since the
!       --  bounds must be the same.
  
        if Ekind (Typ) = E_Array_Subtype then
           Ancest := Ancestor_Subtype (Typ);
  
           if Present (Ancest)
             and then Is_Constrained (Ancest)
             and then Present (Packed_Array_Type (Ancest))
           then
--- 851,865 ----
  
        --  If our immediate ancestor subtype is constrained, and it already
        --  has a packed array type, then just share the same type, since the
!       --  bounds must be the same. If the ancestor is not an array type but
!       --  a private type, as can happen with multiple instantiations, create
!       --  a new packed type, to avoid privacy issues.
  
        if Ekind (Typ) = E_Array_Subtype then
           Ancest := Ancestor_Subtype (Typ);
  
           if Present (Ancest)
+            and then Is_Array_Type (Ancest)
             and then Is_Constrained (Ancest)
             and then Present (Packed_Array_Type (Ancest))
           then
*************** package body Exp_Pakd is
*** 847,853 ****
        --  type, since this size clearly belongs to the packed array type. The
        --  size of the conceptual unpacked type is always set to unknown.
  
!       Esiz := Esize (Typ);
  
        --  Case of an array where at least one index is of an enumeration
        --  type with a non-standard representation, but the component size
--- 872,878 ----
        --  type, since this size clearly belongs to the packed array type. The
        --  size of the conceptual unpacked type is always set to unknown.
  
!       PASize := Esize (Typ);
  
        --  Case of an array where at least one index is of an enumeration
        --  type with a non-standard representation, but the component size
*************** package body Exp_Pakd is
*** 1061,1071 ****
           Set_Parent (Len_Expr, Typ);
           Analyze_Per_Use_Expression (Len_Expr, Standard_Integer);
  
!          --  Use a modular type if possible. We can do this if we are we
!          --  have static bounds, and the length is small enough, and the
!          --  length is not zero. We exclude the zero length case because the
!          --  size of things is always at least one, and the zero length object
!          --  would have an anomous size.
  
           if Compile_Time_Known_Value (Len_Expr) then
              Len_Bits := Expr_Value (Len_Expr) * Csize;
--- 1086,1096 ----
           Set_Parent (Len_Expr, Typ);
           Analyze_Per_Use_Expression (Len_Expr, Standard_Integer);
  
!          --  Use a modular type if possible. We can do this if we have
!          --  static bounds, and the length is small enough, and the length
!          --  is not zero. We exclude the zero length case because the size
!          --  of things is always at least one, and the zero length object
!          --  would have an anomalous size.
  
           if Compile_Time_Known_Value (Len_Expr) then
              Len_Bits := Expr_Value (Len_Expr) * Csize;
*************** package body Exp_Pakd is
*** 1093,1099 ****
                 --  We can use the modular type, it has the form:
  
                 --    subtype tttPn is btyp
!                --      range 0 .. 2 ** (Esize (Typ) * Csize) - 1;
  
                 --  The bounds are statically known, and btyp is one
                 --  of the unsigned types, depending on the length. If the
--- 1118,1125 ----
                 --  We can use the modular type, it has the form:
  
                 --    subtype tttPn is btyp
!                --      range 0 .. 2 ** ((Typ'Length (1)
!                --                * ... * Typ'Length (n)) * Csize) - 1;
  
                 --  The bounds are statically known, and btyp is one
                 --  of the unsigned types, depending on the length. If the
*************** package body Exp_Pakd is
*** 1134,1141 ****
                                     Make_Integer_Literal (Loc, 0),
                                   High_Bound => Lit))));
  
!                if Esiz = Uint_0 then
!                   Esiz := Len_Bits;
                 end if;
  
                 Install_PAT;
--- 1160,1167 ----
                                     Make_Integer_Literal (Loc, 0),
                                   High_Bound => Lit))));
  
!                if PASize = Uint_0 then
!                   PASize := Len_Bits;
                 end if;
  
                 Install_PAT;
*************** package body Exp_Pakd is
*** 1149,1155 ****
           --    subtype tttPn is
           --      System.Packed_Bytes{1,2,4} (0 .. (Bits + 7) / 8 - 1);
  
!          --  Bits is the length of the array in bits.
  
           Set_PB_Type;
  
--- 1175,1181 ----
           --    subtype tttPn is
           --      System.Packed_Bytes{1,2,4} (0 .. (Bits + 7) / 8 - 1);
  
!          --  Bits is the length of the array in bits
  
           Set_PB_Type;
  
*************** package body Exp_Pakd is
*** 1190,1195 ****
--- 1216,1227 ----
                             High_Bound => PAT_High)))));
  
           Install_PAT;
+ 
+          --  Currently the code in this unit requires that packed arrays
+          --  represented by non-modular arrays of bytes be on a byte
+          --  boundary.
+ 
+          Set_Must_Be_On_Byte_Boundary (Typ);
        end if;
     end Create_Packed_Array_Type;
  
*************** package body Exp_Pakd is
*** 1275,1280 ****
--- 1307,1332 ----
        --  conversion is analyzed immediately so that subsequent processing
        --  can work with an analyzed Rhs (and e.g. look at its Etype)
  
+       --  If the right-hand side is a string literal, create a temporary for
+       --  it, constant-folding is not ready to wrap the bit representation
+       --  of a string literal.
+ 
+       if Nkind (Rhs) = N_String_Literal then
+          declare
+             Decl : Node_Id;
+          begin
+             Decl :=
+               Make_Object_Declaration (Loc,
+                 Defining_Identifier =>
+                   Make_Defining_Identifier (Loc,  New_Internal_Name ('T')),
+                 Object_Definition => New_Occurrence_Of (Ctyp, Loc),
+                 Expression => New_Copy_Tree (Rhs));
+ 
+             Insert_Actions (N, New_List (Decl));
+             Rhs := New_Occurrence_Of (Defining_Identifier (Decl), Loc);
+          end;
+       end if;
+ 
        Rhs := Convert_To (Ctyp, Rhs);
        Set_Parent (Rhs, N);
        Analyze_And_Resolve (Rhs, Ctyp);
*************** package body Exp_Pakd is
*** 1298,1304 ****
  
           --      the "or ..." is omitted if rhs is constant and all 0 bits
  
!          --      rhs is converted to the appropriate type.
  
           --      The result is converted back to the array type, since
           --      otherwise we lose knowledge of the packed nature.
--- 1350,1356 ----
  
           --      the "or ..." is omitted if rhs is constant and all 0 bits
  
!          --      rhs is converted to the appropriate type
  
           --      The result is converted back to the array type, since
           --      otherwise we lose knowledge of the packed nature.
*************** package body Exp_Pakd is
*** 1496,1502 ****
  
           --    Set_nn (Arr'address, Subscr, Bits_nn!(Rhs))
  
!          --  where Subscr is the computed linear subscript.
  
           declare
              Bits_nn : constant Entity_Id := RTE (Bits_Id (Csiz));
--- 1548,1554 ----
  
           --    Set_nn (Arr'address, Subscr, Bits_nn!(Rhs))
  
!          --  where Subscr is the computed linear subscript
  
           declare
              Bits_nn : constant Entity_Id := RTE (Bits_Id (Csiz));
*************** package body Exp_Pakd is
*** 1507,1513 ****
           begin
              if No (Bits_nn) then
  
!                --  Error, most likely High_Integrity_Mode restriction.
  
                 return;
              end if;
--- 1559,1565 ----
           begin
              if No (Bits_nn) then
  
!                --  Error, most likely High_Integrity_Mode restriction
  
                 return;
              end if;
*************** package body Exp_Pakd is
*** 1725,1731 ****
        --  convert to the base type, since this would be unconstrained, and
        --  hence not have a corresponding packed array type set.
  
!       --  Note that both operands must be modular for this code to be used.
  
        if Is_Modular_Integer_Type (PAT)
             and then
--- 1777,1783 ----
        --  convert to the base type, since this would be unconstrained, and
        --  hence not have a corresponding packed array type set.
  
!       --  Note that both operands must be modular for this code to be used
  
        if Is_Modular_Integer_Type (PAT)
             and then
*************** package body Exp_Pakd is
*** 1867,1873 ****
           return;
        end if;
  
!       --  Remaining processing is for the bit-packed case.
  
        Obj := Relocate_Node (Prefix (N));
        Convert_To_Actual_Subtype (Obj);
--- 1919,1925 ----
           return;
        end if;
  
!       --  Remaining processing is for the bit-packed case
  
        Obj := Relocate_Node (Prefix (N));
        Convert_To_Actual_Subtype (Obj);
*************** package body Exp_Pakd is
*** 1918,1924 ****
  
           --    Component_Type!(Get_nn (Arr'address, Subscr))
  
!          --  where Subscr is the computed linear subscript.
  
           declare
              Get_nn : Entity_Id;
--- 1970,1976 ----
  
           --    Component_Type!(Get_nn (Arr'address, Subscr))
  
!          --  where Subscr is the computed linear subscript
  
           declare
              Get_nn : Entity_Id;
*************** package body Exp_Pakd is
*** 2377,2384 ****
  
     function RJ_Unchecked_Convert_To
       (Typ  : Entity_Id;
!       Expr : Node_Id)
!       return Node_Id
     is
        Source_Typ : constant Entity_Id := Etype (Expr);
        Target_Typ : constant Entity_Id := Typ;
--- 2429,2435 ----
  
     function RJ_Unchecked_Convert_To
       (Typ  : Entity_Id;
!       Expr : Node_Id) return Node_Id
     is
        Source_Typ : constant Entity_Id := Etype (Expr);
        Target_Typ : constant Entity_Id := Typ;
diff -Nrcpad gcc-3.4.3/gcc/ada/exp_pakd.ads gcc-4.0.0/gcc/ada/exp_pakd.ads
*** gcc-3.4.3/gcc/ada/exp_pakd.ads	Thu Apr 24 17:54:01 2003
--- gcc-4.0.0/gcc/ada/exp_pakd.ads	Mon Sep 13 10:18:39 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2001 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Exp_Pakd is
*** 119,127 ****
     --  a packed array. There are two reasonable rules for deciding this:
  
     --    Store the first bit at right end (low order) word. This means
!    --    that the scaled subscript can be used directly as a right shift
     --    count (if we put bit 0 at the left end, then we need an extra
!    --    subtract to compute the shift count.
  
     --    Layout the bits so that if the packed boolean array is overlaid on
     --    a record, using unchecked conversion, then bit 0 of the array is
--- 119,127 ----
     --  a packed array. There are two reasonable rules for deciding this:
  
     --    Store the first bit at right end (low order) word. This means
!    --    that the scaled subscript can be used directly as a left shift
     --    count (if we put bit 0 at the left end, then we need an extra
!    --    subtract to compute the shift count).
  
     --    Layout the bits so that if the packed boolean array is overlaid on
     --    a record, using unchecked conversion, then bit 0 of the array is
*************** package Exp_Pakd is
*** 156,162 ****
     --  that a worthwhile price to pay for the consistency.
  
     --  One more important point arises in the case where we have a constrained
!    --  subtype of an unconstrained array. Take the case of 20-bits. For the
     --  unconstrained representation, we would use an array of bytes:
  
     --     Little-endian case
--- 156,162 ----
     --  that a worthwhile price to pay for the consistency.
  
     --  One more important point arises in the case where we have a constrained
!    --  subtype of an unconstrained array. Take the case of 20 bits. For the
     --  unconstrained representation, we would use an array of bytes:
  
     --     Little-endian case
diff -Nrcpad gcc-3.4.3/gcc/ada/exp_prag.adb gcc-4.0.0/gcc/ada/exp_prag.adb
*** gcc-3.4.3/gcc/ada/exp_prag.adb	Wed Oct 22 09:28:08 2003
--- gcc-4.0.0/gcc/ada/exp_prag.adb	Thu Feb 10 13:50:42 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Exp_Prag is
*** 58,79 ****
  
     function Arg1 (N : Node_Id) return Node_Id;
     function Arg2 (N : Node_Id) return Node_Id;
!    --  Obtain specified Pragma_Argument_Association
  
     procedure Expand_Pragma_Abort_Defer             (N : Node_Id);
     procedure Expand_Pragma_Assert                  (N : Node_Id);
     procedure Expand_Pragma_Import                  (N : Node_Id);
     procedure Expand_Pragma_Import_Export_Exception (N : Node_Id);
     procedure Expand_Pragma_Inspection_Point        (N : Node_Id);
     procedure Expand_Pragma_Interrupt_Priority      (N : Node_Id);
  
     ----------
     -- Arg1 --
     ----------
  
     function Arg1 (N : Node_Id) return Node_Id is
     begin
!       return First (Pragma_Argument_Associations (N));
     end Arg1;
  
     ----------
--- 58,88 ----
  
     function Arg1 (N : Node_Id) return Node_Id;
     function Arg2 (N : Node_Id) return Node_Id;
!    --  Obtain specified pragma argument expression
  
     procedure Expand_Pragma_Abort_Defer             (N : Node_Id);
     procedure Expand_Pragma_Assert                  (N : Node_Id);
+    procedure Expand_Pragma_Common_Object           (N : Node_Id);
     procedure Expand_Pragma_Import                  (N : Node_Id);
     procedure Expand_Pragma_Import_Export_Exception (N : Node_Id);
     procedure Expand_Pragma_Inspection_Point        (N : Node_Id);
     procedure Expand_Pragma_Interrupt_Priority      (N : Node_Id);
+    procedure Expand_Pragma_Psect_Object            (N : Node_Id);
  
     ----------
     -- Arg1 --
     ----------
  
     function Arg1 (N : Node_Id) return Node_Id is
+       Arg : constant Node_Id := First (Pragma_Argument_Associations (N));
     begin
!       if Present (Arg)
!         and then Nkind (Arg) = N_Pragma_Argument_Association
!       then
!          return Expression (Arg);
!       else
!          return Arg;
!       end if;
     end Arg1;
  
     ----------
*************** package body Exp_Prag is
*** 81,88 ****
     ----------
  
     function Arg2 (N : Node_Id) return Node_Id is
     begin
!       return Next (Arg1 (N));
     end Arg2;
  
     ---------------------
--- 90,112 ----
     ----------
  
     function Arg2 (N : Node_Id) return Node_Id is
+       Arg1 : constant Node_Id := First (Pragma_Argument_Associations (N));
     begin
!       if No (Arg1) then
!          return Empty;
!       else
!          declare
!             Arg : constant Node_Id := Next (Arg1);
!          begin
!             if Present (Arg)
!               and then Nkind (Arg) = N_Pragma_Argument_Association
!             then
!                return Expression (Arg);
!             else
!                return Arg;
!             end if;
!          end;
!       end if;
     end Arg2;
  
     ---------------------
*************** package body Exp_Prag is
*** 105,110 ****
--- 129,137 ----
              when Pragma_Assert =>
                 Expand_Pragma_Assert (N);
  
+             when Pragma_Common_Object =>
+                Expand_Pragma_Common_Object (N);
+ 
              when Pragma_Export_Exception =>
                 Expand_Pragma_Import_Export_Exception (N);
  
*************** package body Exp_Prag is
*** 120,125 ****
--- 147,155 ----
              when Pragma_Interrupt_Priority =>
                 Expand_Pragma_Interrupt_Priority (N);
  
+             when Pragma_Psect_Object =>
+                Expand_Pragma_Psect_Object (N);
+ 
              --  All other pragmas need no expander action
  
              when others => null;
*************** package body Exp_Prag is
*** 195,201 ****
  
     procedure Expand_Pragma_Assert (N : Node_Id) is
        Loc  : constant Source_Ptr := Sloc (N);
!       Cond : constant Node_Id    := Expression (Arg1 (N));
        Msg  : String_Id;
  
     begin
--- 225,231 ----
  
     procedure Expand_Pragma_Assert (N : Node_Id) is
        Loc  : constant Source_Ptr := Sloc (N);
!       Cond : constant Node_Id    := Arg1 (N);
        Msg  : String_Id;
  
     begin
*************** package body Exp_Prag is
*** 222,228 ****
        --  First, we need to prepare the character literal
  
        if Present (Arg2 (N)) then
!          Msg := Strval (Expr_Value_S (Expression (Arg2 (N))));
        else
           Build_Location_String (Loc);
           Msg := String_From_Name_Buffer;
--- 252,258 ----
        --  First, we need to prepare the character literal
  
        if Present (Arg2 (N)) then
!          Msg := Strval (Expr_Value_S (Arg2 (N)));
        else
           Build_Location_String (Loc);
           Msg := String_From_Name_Buffer;
*************** package body Exp_Prag is
*** 265,270 ****
--- 295,408 ----
        end if;
     end Expand_Pragma_Assert;
  
+    ---------------------------------
+    -- Expand_Pragma_Common_Object --
+    ---------------------------------
+ 
+    --  Add series of pragmas to replicate semantic effect in DEC Ada
+ 
+    --    pragma Linker_Section (internal_name, external_name);
+    --    pragma Machine_Attribute (internal_name, "overlaid");
+    --    pragma Machine_Attribute (internal_name, "global");
+    --    pragma Machine_Attribute (internal_name, "initialize");
+ 
+    --  For now we do nothing with the size attribute ???
+ 
+    --  Really this expansion would be much better in the back end. The
+    --  front end should not need to know about target dependent, back end
+    --  dependent semantics ???
+ 
+    procedure Expand_Pragma_Common_Object (N : Node_Id) is
+       Loc : constant Source_Ptr := Sloc (N);
+ 
+       Internal : constant Node_Id := Arg1 (N);
+       External : constant Node_Id := Arg2 (N);
+ 
+       Psect : Node_Id;
+       --  Psect value upper cased as string literal
+ 
+       Iloc : constant Source_Ptr := Sloc (Internal);
+       Eloc : constant Source_Ptr := Sloc (External);
+       Ploc : Source_Ptr;
+ 
+    begin
+       --  Acquire Psect value and fold to upper case
+ 
+       if Present (External) then
+          if Nkind (External) = N_String_Literal then
+             String_To_Name_Buffer (Strval (External));
+          else
+             Get_Name_String (Chars (External));
+          end if;
+ 
+          Set_All_Upper_Case;
+ 
+          Psect :=
+            Make_String_Literal (Eloc,
+              Strval => String_From_Name_Buffer);
+ 
+       else
+          Get_Name_String (Chars (Internal));
+          Set_All_Upper_Case;
+          Psect :=
+            Make_String_Literal (Iloc,
+              Strval => String_From_Name_Buffer);
+       end if;
+ 
+       Ploc := Sloc (Psect);
+ 
+       --  Insert pragmas
+ 
+       Insert_List_After_And_Analyze (N, New_List (
+ 
+          --  The Linker_Section pragma ensures the correct section
+ 
+          Make_Pragma (Loc,
+            Chars => Name_Linker_Section,
+            Pragma_Argument_Associations => New_List (
+              Make_Pragma_Argument_Association (Iloc,
+                Expression => New_Copy_Tree (Internal)),
+              Make_Pragma_Argument_Association (Ploc,
+                Expression => New_Copy_Tree (Psect)))),
+ 
+          --  Machine_Attribute "overlaid" ensures that this section
+          --  overlays any other sections of the same name.
+ 
+          Make_Pragma (Loc,
+            Chars => Name_Machine_Attribute,
+            Pragma_Argument_Associations => New_List (
+              Make_Pragma_Argument_Association (Iloc,
+                Expression => New_Copy_Tree (Internal)),
+              Make_Pragma_Argument_Association (Eloc,
+                Expression =>
+                  Make_String_Literal (Sloc => Ploc,
+                    Strval => "overlaid")))),
+ 
+          --  Machine_Attribute "global" ensures that section is visible
+ 
+          Make_Pragma (Loc,
+            Chars => Name_Machine_Attribute,
+            Pragma_Argument_Associations => New_List (
+              Make_Pragma_Argument_Association (Iloc,
+                Expression => New_Copy_Tree (Internal)),
+              Make_Pragma_Argument_Association (Eloc,
+                Expression =>
+                  Make_String_Literal (Sloc => Ploc,
+                    Strval => "global")))),
+ 
+          --  Machine_Attribute "initialize" ensures section is demand zeroed
+ 
+          Make_Pragma (Loc,
+            Chars => Name_Machine_Attribute,
+            Pragma_Argument_Associations => New_List (
+              Make_Pragma_Argument_Association (Iloc,
+                Expression => New_Copy_Tree (Internal)),
+              Make_Pragma_Argument_Association (Eloc,
+                Expression =>
+                  Make_String_Literal (Sloc => Ploc,
+                    Strval => "initialize"))))));
+    end Expand_Pragma_Common_Object;
+ 
     --------------------------
     -- Expand_Pragma_Import --
     --------------------------
*************** package body Exp_Prag is
*** 272,299 ****
     --  When applied to a variable, the default initialization must not be
     --  done. As it is already done when the pragma is found, we just get rid
     --  of the call the initialization procedure which followed the object
!    --  declaration.
  
     --  We can't use the freezing mechanism for this purpose, since we
     --  have to elaborate the initialization expression when it is first
     --  seen (i.e. this elaboration cannot be deferred to the freeze point).
  
     procedure Expand_Pragma_Import (N : Node_Id) is
!       Def_Id    : constant Entity_Id := Entity (Expression (Arg2 (N)));
        Typ       : Entity_Id;
!       After_Def : Node_Id;
  
     begin
        if Ekind (Def_Id) = E_Variable then
           Typ  := Etype (Def_Id);
-          After_Def := Next (Parent (Def_Id));
  
!          if Has_Non_Null_Base_Init_Proc (Typ)
!            and then Nkind (After_Def) = N_Procedure_Call_Statement
!            and then Is_Entity_Name (Name (After_Def))
!            and then Entity (Name (After_Def)) = Base_Init_Proc (Typ)
!          then
!             Remove (After_Def);
  
           --  Any default initialization expression should be removed
           --  (e.g., null defaults for access objects, zero initialization
--- 410,447 ----
     --  When applied to a variable, the default initialization must not be
     --  done. As it is already done when the pragma is found, we just get rid
     --  of the call the initialization procedure which followed the object
!    --  declaration. The call is inserted after the declaration, but validity
!    --  checks may also have been inserted and the initialization call does
!    --  not necessarily appear immediately after the object declaration.
  
     --  We can't use the freezing mechanism for this purpose, since we
     --  have to elaborate the initialization expression when it is first
     --  seen (i.e. this elaboration cannot be deferred to the freeze point).
  
     procedure Expand_Pragma_Import (N : Node_Id) is
!       Def_Id    : constant Entity_Id := Entity (Arg2 (N));
        Typ       : Entity_Id;
!       Init_Call : Node_Id;
  
     begin
        if Ekind (Def_Id) = E_Variable then
           Typ  := Etype (Def_Id);
  
!          --  Loop to ???
! 
!          Init_Call := Next (Parent (Def_Id));
!          while Present (Init_Call) and then Init_Call /= N loop
!             if Has_Non_Null_Base_Init_Proc (Typ)
!               and then Nkind (Init_Call) = N_Procedure_Call_Statement
!               and then Is_Entity_Name (Name (Init_Call))
!               and then Entity (Name (Init_Call)) = Base_Init_Proc (Typ)
!             then
!                Remove (Init_Call);
!                exit;
!             else
!                Next (Init_Call);
!             end if;
!          end loop;
  
           --  Any default initialization expression should be removed
           --  (e.g., null defaults for access objects, zero initialization
*************** package body Exp_Prag is
*** 301,307 ****
           --  have explicit initialization, so the expression must have
           --  been generated by the compiler.
  
!          elsif Present (Expression (Parent (Def_Id))) then
              Set_Expression (Parent (Def_Id), Empty);
           end if;
        end if;
--- 449,457 ----
           --  have explicit initialization, so the expression must have
           --  been generated by the compiler.
  
!          if No (Init_Call)
!            and then Present (Expression (Parent (Def_Id)))
!          then
              Set_Expression (Parent (Def_Id), Empty);
           end if;
        end if;
*************** package body Exp_Prag is
*** 328,334 ****
        end if;
  
        declare
!          Id     : constant Entity_Id := Entity (Expression (Arg1 (N)));
           Call   : constant Node_Id := Register_Exception_Call (Id);
           Loc    : constant Source_Ptr := Sloc (N);
  
--- 478,484 ----
        end if;
  
        declare
!          Id     : constant Entity_Id := Entity (Arg1 (N));
           Call   : constant Node_Id := Register_Exception_Call (Id);
           Loc    : constant Source_Ptr := Sloc (N);
  
*************** package body Exp_Prag is
*** 367,385 ****
                    Rewrite (Expression (Lang1),
                      Make_Character_Literal (Loc,
                        Chars => Name_uV,
!                       Char_Literal_Value => Get_Char_Code ('V')));
                    Analyze (Expression (Lang1));
  
                    Rewrite (Expression (Lang2),
                      Make_Character_Literal (Loc,
                        Chars => Name_uM,
!                       Char_Literal_Value => Get_Char_Code ('M')));
                    Analyze (Expression (Lang2));
  
                    Rewrite (Expression (Lang3),
                      Make_Character_Literal (Loc,
                        Chars => Name_uS,
!                       Char_Literal_Value => Get_Char_Code ('S')));
                    Analyze (Expression (Lang3));
  
                    if Exception_Code (Id) /= No_Uint then
--- 517,538 ----
                    Rewrite (Expression (Lang1),
                      Make_Character_Literal (Loc,
                        Chars => Name_uV,
!                       Char_Literal_Value =>
!                         UI_From_Int (Character'Pos ('V'))));
                    Analyze (Expression (Lang1));
  
                    Rewrite (Expression (Lang2),
                      Make_Character_Literal (Loc,
                        Chars => Name_uM,
!                       Char_Literal_Value =>
!                         UI_From_Int (Character'Pos ('M'))));
                    Analyze (Expression (Lang2));
  
                    Rewrite (Expression (Lang3),
                      Make_Character_Literal (Loc,
                        Chars => Name_uS,
!                       Char_Literal_Value =>
!                         UI_From_Int (Character'Pos ('S'))));
                    Analyze (Expression (Lang3));
  
                    if Exception_Code (Id) /= No_Uint then
*************** package body Exp_Prag is
*** 391,397 ****
                         Make_Object_Declaration (Loc,
                           Defining_Identifier => Excep_Internal,
                           Object_Definition   =>
!                            New_Reference_To (Standard_Integer, Loc));
  
                       Insert_Action (N, Excep_Object);
                       Analyze (Excep_Object);
--- 544,550 ----
                         Make_Object_Declaration (Loc,
                           Defining_Identifier => Excep_Internal,
                           Object_Definition   =>
!                            New_Reference_To (RTE (RE_Exception_Code), Loc));
  
                       Insert_Action (N, Excep_Object);
                       Analyze (Excep_Object);
*************** package body Exp_Prag is
*** 453,459 ****
  
                    else
                       Code :=
!                         Unchecked_Convert_To (Standard_Integer,
                            Make_Function_Call (Loc,
                              Name =>
                                New_Reference_To (RTE (RE_Import_Value), Loc),
--- 606,612 ----
  
                    else
                       Code :=
!                         Unchecked_Convert_To (RTE (RE_Exception_Code),
                            Make_Function_Call (Loc,
                              Name =>
                                New_Reference_To (RTE (RE_Import_Value), Loc),
*************** package body Exp_Prag is
*** 466,474 ****
                      Make_Procedure_Call_Statement (Loc,
                        Name => New_Reference_To
                                  (RTE (RE_Register_VMS_Exception), Loc),
!                       Parameter_Associations => New_List (Code)));
  
!                   Analyze_And_Resolve (Code, Standard_Integer);
                    Analyze (Call);
                 end if;
  
--- 619,632 ----
                      Make_Procedure_Call_Statement (Loc,
                        Name => New_Reference_To
                                  (RTE (RE_Register_VMS_Exception), Loc),
!                       Parameter_Associations => New_List (
!                         Code,
!                         Unchecked_Convert_To (RTE (RE_Exception_Data_Ptr),
!                           Make_Attribute_Reference (Loc,
!                             Prefix         => New_Occurrence_Of (Id, Loc),
!                             Attribute_Name => Name_Unrestricted_Access)))));
  
!                   Analyze_And_Resolve (Code, RTE (RE_Exception_Code));
                    Analyze (Call);
                 end if;
  
*************** package body Exp_Prag is
*** 562,565 ****
--- 720,735 ----
        end if;
     end Expand_Pragma_Interrupt_Priority;
  
+    --------------------------------
+    -- Expand_Pragma_Psect_Object --
+    --------------------------------
+ 
+    --  Convert to Common_Object, and expand the resulting pragma
+ 
+    procedure Expand_Pragma_Psect_Object (N : Node_Id) is
+    begin
+       Set_Chars (N, Name_Common_Object);
+       Expand_Pragma_Common_Object (N);
+    end Expand_Pragma_Psect_Object;
+ 
  end Exp_Prag;
diff -Nrcpad gcc-3.4.3/gcc/ada/exp_strm.adb gcc-4.0.0/gcc/ada/exp_strm.adb
*** gcc-3.4.3/gcc/ada/exp_strm.adb	Tue Oct 21 13:41:59 2003
--- gcc-4.0.0/gcc/ada/exp_strm.adb	Thu Feb 10 13:50:35 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 24,42 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;   use Atree;
! with Einfo;   use Einfo;
! with Namet;   use Namet;
! with Nlists;  use Nlists;
! with Nmake;   use Nmake;
! with Rtsfind; use Rtsfind;
! with Sinfo;   use Sinfo;
! with Snames;  use Snames;
! with Stand;   use Stand;
! with Tbuild;  use Tbuild;
! with Ttypes;  use Ttypes;
! with Exp_Tss; use Exp_Tss;
! with Uintp;   use Uintp;
  
  package body Exp_Strm is
  
--- 24,43 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Einfo;    use Einfo;
! with Namet;    use Namet;
! with Nlists;   use Nlists;
! with Nmake;    use Nmake;
! with Rtsfind;  use Rtsfind;
! with Sem_Util; use Sem_Util;
! with Sinfo;    use Sinfo;
! with Snames;   use Snames;
! with Stand;    use Stand;
! with Tbuild;   use Tbuild;
! with Ttypes;   use Ttypes;
! with Exp_Tss;  use Exp_Tss;
! with Uintp;    use Uintp;
  
  package body Exp_Strm is
  
*************** package body Exp_Strm is
*** 446,458 ****
        U_Type  : constant Entity_Id  := Underlying_Type (P_Type);
        Rt_Type : constant Entity_Id  := Root_Type (U_Type);
        FST     : constant Entity_Id  := First_Subtype (U_Type);
-       P_Size  : constant Uint       := Esize (FST);
-       Res     : Node_Id;
        Strm    : constant Node_Id    := First (Expressions (N));
        Targ    : constant Node_Id    := Next (Strm);
        Lib_RE  : RE_Id;
  
     begin
        --  Check first for Boolean and Character. These are enumeration types,
        --  but we treat them specially, since they may require special handling
        --  in the transfer protocol. However, this special handling only applies
--- 447,468 ----
        U_Type  : constant Entity_Id  := Underlying_Type (P_Type);
        Rt_Type : constant Entity_Id  := Root_Type (U_Type);
        FST     : constant Entity_Id  := First_Subtype (U_Type);
        Strm    : constant Node_Id    := First (Expressions (N));
        Targ    : constant Node_Id    := Next (Strm);
+       P_Size  : Uint;
+       Res     : Node_Id;
        Lib_RE  : RE_Id;
  
     begin
+       --  Compute the size of the stream element. This is either the size of
+       --  the first subtype or if given the size of the Stream_Size attribute.
+ 
+       if Is_Elementary_Type (FST) and then Has_Stream_Size_Clause (FST) then
+          P_Size := Static_Integer (Expression (Stream_Size_Clause (FST)));
+       else
+          P_Size := Esize (FST);
+       end if;
+ 
        --  Check first for Boolean and Character. These are enumeration types,
        --  but we treat them specially, since they may require special handling
        --  in the transfer protocol. However, this special handling only applies
*************** package body Exp_Strm is
*** 474,493 ****
        then
           Lib_RE := RE_I_WC;
  
        --  Floating point types
  
        elsif Is_Floating_Point_Type (U_Type) then
! 
!          if Rt_Type = Standard_Short_Float then
              Lib_RE := RE_I_SF;
  
!          elsif Rt_Type = Standard_Float then
              Lib_RE := RE_I_F;
  
!          elsif Rt_Type = Standard_Long_Float then
              Lib_RE := RE_I_LF;
  
!          else pragma Assert (Rt_Type = Standard_Long_Long_Float);
              Lib_RE := RE_I_LLF;
           end if;
  
--- 484,507 ----
        then
           Lib_RE := RE_I_WC;
  
+       elsif Rt_Type = Standard_Wide_Wide_Character
+         and then Has_Stream_Standard_Rep (U_Type)
+       then
+          Lib_RE := RE_I_WWC;
+ 
        --  Floating point types
  
        elsif Is_Floating_Point_Type (U_Type) then
!          if P_Size <= Standard_Short_Float_Size then
              Lib_RE := RE_I_SF;
  
!          elsif P_Size <= Standard_Float_Size then
              Lib_RE := RE_I_F;
  
!          elsif P_Size <= Standard_Long_Float_Size then
              Lib_RE := RE_I_LF;
  
!          else
              Lib_RE := RE_I_LLF;
           end if;
  
*************** package body Exp_Strm is
*** 615,627 ****
        U_Type  : constant Entity_Id  := Underlying_Type (P_Type);
        Rt_Type : constant Entity_Id  := Root_Type (U_Type);
        FST     : constant Entity_Id  := First_Subtype (U_Type);
-       P_Size  : constant Uint       := Esize (FST);
        Strm    : constant Node_Id    := First (Expressions (N));
        Item    : constant Node_Id    := Next (Strm);
        Lib_RE  : RE_Id;
        Libent  : Entity_Id;
  
     begin
        --  Find the routine to be called
  
        --  Check for First Boolean and Character. These are enumeration types,
--- 629,650 ----
        U_Type  : constant Entity_Id  := Underlying_Type (P_Type);
        Rt_Type : constant Entity_Id  := Root_Type (U_Type);
        FST     : constant Entity_Id  := First_Subtype (U_Type);
        Strm    : constant Node_Id    := First (Expressions (N));
        Item    : constant Node_Id    := Next (Strm);
+       P_Size  : Uint;
        Lib_RE  : RE_Id;
        Libent  : Entity_Id;
  
     begin
+       --  Compute the size of the stream element. This is either the size of
+       --  the first subtype or if given the size of the Stream_Size attribute.
+ 
+       if Is_Elementary_Type (FST) and then Has_Stream_Size_Clause (FST) then
+          P_Size := Static_Integer (Expression (Stream_Size_Clause (FST)));
+       else
+          P_Size := Esize (FST);
+       end if;
+ 
        --  Find the routine to be called
  
        --  Check for First Boolean and Character. These are enumeration types,
*************** package body Exp_Strm is
*** 645,664 ****
        then
           Lib_RE := RE_W_WC;
  
        --  Floating point types
  
        elsif Is_Floating_Point_Type (U_Type) then
! 
!          if Rt_Type = Standard_Short_Float then
              Lib_RE := RE_W_SF;
! 
!          elsif Rt_Type = Standard_Float then
              Lib_RE := RE_W_F;
! 
!          elsif Rt_Type = Standard_Long_Float then
              Lib_RE := RE_W_LF;
! 
!          else pragma Assert (Rt_Type = Standard_Long_Long_Float);
              Lib_RE := RE_W_LLF;
           end if;
  
--- 668,688 ----
        then
           Lib_RE := RE_W_WC;
  
+       elsif Rt_Type = Standard_Wide_Wide_Character
+         and then Has_Stream_Standard_Rep (U_Type)
+       then
+          Lib_RE := RE_W_WWC;
+ 
        --  Floating point types
  
        elsif Is_Floating_Point_Type (U_Type) then
!          if P_Size <= Standard_Short_Float_Size then
              Lib_RE := RE_W_SF;
!          elsif P_Size <= Standard_Float_Size then
              Lib_RE := RE_W_F;
!          elsif P_Size <= Standard_Long_Float_Size then
              Lib_RE := RE_W_LF;
!          else
              Lib_RE := RE_W_LLF;
           end if;
  
*************** package body Exp_Strm is
*** 679,691 ****
        --  be outside the range of a 32-bit signed integer, so this must be
        --  treated as 32-bit unsigned.
  
!       --  Similarly, if we have
  
        --     type W is range -1 .. +254;
        --     for W'Size use 8;
  
-       --  then the representation is also unsigned.
- 
        elsif not Is_Unsigned_Type (FST)
          and then
            (Is_Fixed_Point_Type (U_Type)
--- 703,713 ----
        --  be outside the range of a 32-bit signed integer, so this must be
        --  treated as 32-bit unsigned.
  
!       --  Similarly, the representation is also unsigned if we have:
  
        --     type W is range -1 .. +254;
        --     for W'Size use 8;
  
        elsif not Is_Unsigned_Type (FST)
          and then
            (Is_Fixed_Point_Type (U_Type)
*************** package body Exp_Strm is
*** 697,712 ****
        then
           if P_Size <= Standard_Short_Short_Integer_Size then
              Lib_RE := RE_W_SSI;
- 
           elsif P_Size <= Standard_Short_Integer_Size then
              Lib_RE := RE_W_SI;
- 
           elsif P_Size <= Standard_Integer_Size then
              Lib_RE := RE_W_I;
- 
           elsif P_Size <= Standard_Long_Integer_Size then
              Lib_RE := RE_W_LI;
- 
           else
              Lib_RE := RE_W_LLI;
           end if;
--- 719,730 ----
*************** package body Exp_Strm is
*** 725,740 ****
        then
           if P_Size <= Standard_Short_Short_Integer_Size then
              Lib_RE := RE_W_SSU;
- 
           elsif P_Size <= Standard_Short_Integer_Size then
              Lib_RE := RE_W_SU;
- 
           elsif P_Size <= Standard_Integer_Size then
              Lib_RE := RE_W_U;
- 
           elsif P_Size <= Standard_Long_Integer_Size then
              Lib_RE := RE_W_LU;
- 
           else
              Lib_RE := RE_W_LLU;
           end if;
--- 743,754 ----
*************** package body Exp_Strm is
*** 772,794 ****
        Decl : out Node_Id;
        Pnam : out Entity_Id)
     is
!       Stms  : List_Id;
!       Disc  : Entity_Id;
!       Comp  : Node_Id;
  
     begin
        Stms := New_List;
        Disc := First_Discriminant (Typ);
  
!       --  Generate Reads for the discriminants of the type.
  
        while Present (Disc) loop
!          Comp :=
             Make_Selected_Component (Loc,
!              Prefix => Make_Identifier (Loc, Name_V),
               Selector_Name => New_Occurrence_Of (Disc, Loc));
  
!          Set_Assignment_OK (Comp);
  
           Append_To (Stms,
             Make_Attribute_Reference (Loc,
--- 786,831 ----
        Decl : out Node_Id;
        Pnam : out Entity_Id)
     is
!       Stms : List_Id;
!       --  Statements for the 'Read body
! 
!       Tmp : constant Entity_Id := Make_Defining_Identifier (Loc, Name_V);
!       --  Temporary, must hide formal (assignments to components of the
!       --  record are always generated with V as the identifier for the record).
! 
!       Cstr : List_Id;
!       --  List of constraints to be applied on temporary
! 
!       Disc     : Entity_Id;
!       Disc_Ref : Node_Id;
!       Block    : Node_Id;
  
     begin
        Stms := New_List;
+       Cstr := New_List;
        Disc := First_Discriminant (Typ);
  
!       --  A mutable type cannot be a tagged type, so we generate a new name
!       --  for the stream procedure.
! 
!       Pnam :=
!         Make_Defining_Identifier (Loc,
!           Chars => Make_TSS_Name_Local (Typ, TSS_Stream_Read));
! 
!       --  Generate Reads for the discriminants of the type. The discriminants
!       --  need to be read before the rest of the components, so that
!       --  variants are initialized correctly.
  
        while Present (Disc) loop
!          Disc_Ref :=
             Make_Selected_Component (Loc,
!              Prefix        => Make_Selected_Component (Loc,
!                                 Prefix => New_Occurrence_Of (Pnam, Loc),
!                                 Selector_Name =>
!                                   Make_Identifier (Loc, Name_V)),
               Selector_Name => New_Occurrence_Of (Disc, Loc));
  
!          Set_Assignment_OK (Disc_Ref);
  
           Append_To (Stms,
             Make_Attribute_Reference (Loc,
*************** package body Exp_Strm is
*** 796,835 ****
                 Attribute_Name => Name_Read,
                 Expressions => New_List (
                   Make_Identifier (Loc, Name_S),
!                  Comp)));
  
           Next_Discriminant (Disc);
        end loop;
  
!       --  A mutable type cannot be a tagged type, so we generate a new name
!       --  for the stream procedure.
  
-       Pnam :=
-         Make_Defining_Identifier (Loc,
-           Chars => Make_TSS_Name_Local (Typ, TSS_Stream_Read));
        Build_Record_Read_Write_Procedure (Loc, Typ, Decl, Pnam, Name_Read);
  
!       --  Read the discriminants before the rest of the components, so
!       --  that discriminant values are properly set of variants, etc.
!       --  If this is an empty record with discriminants, there are no
!       --  previous statements. If this is an unchecked union, the stream
!       --  procedure is erroneous, because there are no discriminants to read.
  
        if Is_Unchecked_Union (Typ) then
           Stms :=
             New_List (
               Make_Raise_Program_Error (Loc,
                 Reason => PE_Unchecked_Union_Restriction));
        end if;
  
!       if Is_Non_Empty_List (
!         Statements (Handled_Statement_Sequence (Decl)))
!       then
!          Insert_List_Before
!            (First (Statements (Handled_Statement_Sequence (Decl))), Stms);
!       else
!          Set_Statements (Handled_Statement_Sequence (Decl), Stms);
!       end if;
     end Build_Mutable_Record_Read_Procedure;
  
     ------------------------------------------
--- 833,898 ----
                 Attribute_Name => Name_Read,
                 Expressions => New_List (
                   Make_Identifier (Loc, Name_S),
!                  Disc_Ref)));
  
+          Append_To (Cstr,
+            Make_Discriminant_Association (Loc,
+              Selector_Names => New_List (New_Occurrence_Of (Disc, Loc)),
+              Expression     => New_Copy_Tree (Disc_Ref)));
           Next_Discriminant (Disc);
        end loop;
  
!       --  Generate reads for the components of the record (including
!       --  those that depend on discriminants).
  
        Build_Record_Read_Write_Procedure (Loc, Typ, Decl, Pnam, Name_Read);
  
!       --  If Typ has controlled components (i.e. if it is classwide
!       --  or Has_Controlled), or components constrained using the discriminants
!       --  of Typ, then we need to ensure that all component assignments
!       --  are performed on an object that has been appropriately constrained
!       --  prior to being initialized. To this effect, we wrap the component
!       --  assignments in a block where V is a constrained temporary.
! 
!       Block :=
!         Make_Block_Statement (Loc,
!           Declarations => New_List (
!            Make_Object_Declaration (Loc,
!              Defining_Identifier => Tmp,
!              Object_Definition   =>
!                Make_Subtype_Indication (Loc,
!                  Subtype_Mark => New_Occurrence_Of (Typ, Loc),
!                  Constraint =>
!                    Make_Index_Or_Discriminant_Constraint (Loc,
!                      Constraints => Cstr)))),
!           Handled_Statement_Sequence =>
!             Handled_Statement_Sequence (Decl));
! 
!       Append_To (Stms, Block);
! 
!       Append_To (Statements (Handled_Statement_Sequence (Block)),
!         Make_Assignment_Statement (Loc,
!           Name => Make_Selected_Component (Loc,
!                     Prefix => New_Occurrence_Of (Pnam, Loc),
!                     Selector_Name => Make_Identifier (Loc, Name_V)),
!           Expression => Make_Identifier (Loc, Name_V)));
  
        if Is_Unchecked_Union (Typ) then
+ 
+          --  If this is an unchecked union, the stream procedure is erroneous,
+          --  because there are no discriminants to read.
+ 
+          --  This should generate a warning ???
+ 
           Stms :=
             New_List (
               Make_Raise_Program_Error (Loc,
                 Reason => PE_Unchecked_Union_Restriction));
        end if;
  
!       Set_Handled_Statement_Sequence (Decl,
!         Make_Handled_Sequence_Of_Statements (Loc,
!           Statements => Stms));
     end Build_Mutable_Record_Read_Procedure;
  
     ------------------------------------------
*************** package body Exp_Strm is
*** 849,855 ****
        Stms := New_List;
        Disc := First_Discriminant (Typ);
  
!       --  Generate Writes for the discriminants of the type.
  
        while Present (Disc) loop
  
--- 912,918 ----
        Stms := New_List;
        Disc := First_Discriminant (Typ);
  
!       --  Generate Writes for the discriminants of the type
  
        while Present (Disc) loop
  
diff -Nrcpad gcc-3.4.3/gcc/ada/exp_tss.ads gcc-4.0.0/gcc/ada/exp_tss.ads
*** gcc-3.4.3/gcc/ada/exp_tss.ads	Tue Oct 21 13:41:59 2003
--- gcc-4.0.0/gcc/ada/exp_tss.ads	Mon Jan 26 14:47:48 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Exp_Tss is
*** 81,86 ****
--- 81,87 ----
     TSS_RAS_Access         : constant TNT := "RA";  -- RAs type access
     TSS_RAS_Dereference    : constant TNT := "RD";  -- RAs type deference
     TSS_Rep_To_Pos         : constant TNT := "RP";  -- Rep to Pos conversion
+    TSS_Slice_Assign       : constant TNT := "SA";  -- Slice assignment
     TSS_Stream_Input       : constant TNT := "SI";  -- Stream Input attribute
     TSS_Stream_Output      : constant TNT := "SO";  -- Stream Output attribute
     TSS_Stream_Read        : constant TNT := "SR";  -- Stream Read attribute
*************** package Exp_Tss is
*** 95,100 ****
--- 96,102 ----
        TSS_RAS_Access,
        TSS_RAS_Dereference,
        TSS_Rep_To_Pos,
+       TSS_Slice_Assign,
        TSS_Stream_Input,
        TSS_Stream_Output,
        TSS_Stream_Read,
diff -Nrcpad gcc-3.4.3/gcc/ada/exp_util.adb gcc-4.0.0/gcc/ada/exp_util.adb
*** gcc-3.4.3/gcc/ada/exp_util.adb	Mon Jan 12 11:45:23 2004
--- gcc-4.0.0/gcc/ada/exp_util.adb	Thu Mar 17 18:46:43 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Checks;   use Checks;
*** 29,34 ****
--- 29,35 ----
  with Einfo;    use Einfo;
  with Elists;   use Elists;
  with Errout;   use Errout;
+ with Exp_Aggr; use Exp_Aggr;
  with Exp_Ch7;  use Exp_Ch7;
  with Exp_Ch11; use Exp_Ch11;
  with Exp_Tss;  use Exp_Tss;
*************** with Nlists;   use Nlists;
*** 41,46 ****
--- 42,48 ----
  with Nmake;    use Nmake;
  with Opt;      use Opt;
  with Restrict; use Restrict;
+ with Rident;   use Rident;
  with Sem;      use Sem;
  with Sem_Ch8;  use Sem_Ch8;
  with Sem_Eval; use Sem_Eval;
*************** package body Exp_Util is
*** 67,74 ****
       (Loc    : Source_Ptr;
        Id_Ref : Node_Id;
        A_Type : Entity_Id;
!       Dyn    : Boolean := False)
!       return   Node_Id;
     --  Build function to generate the image string for a task that is an
     --  array component, concatenating the images of each index. To avoid
     --  storage leaks, the string is built with successive slice assignments.
--- 69,75 ----
       (Loc    : Source_Ptr;
        Id_Ref : Node_Id;
        A_Type : Entity_Id;
!       Dyn    : Boolean := False) return Node_Id;
     --  Build function to generate the image string for a task that is an
     --  array component, concatenating the images of each index. To avoid
     --  storage leaks, the string is built with successive slice assignments.
*************** package body Exp_Util is
*** 80,87 ****
       (Loc   : Source_Ptr;
        Decls : List_Id;
        Stats : List_Id;
!       Res   : Entity_Id)
!       return  Node_Id;
     --  Common processing for Task_Array_Image and Task_Record_Image.
     --  Build function body that computes image.
  
--- 81,87 ----
       (Loc   : Source_Ptr;
        Decls : List_Id;
        Stats : List_Id;
!       Res   : Entity_Id) return Node_Id;
     --  Common processing for Task_Array_Image and Task_Record_Image.
     --  Build function body that computes image.
  
*************** package body Exp_Util is
*** 100,107 ****
     function Build_Task_Record_Image
       (Loc    : Source_Ptr;
        Id_Ref : Node_Id;
!       Dyn    : Boolean := False)
!       return   Node_Id;
     --  Build function to generate the image string for a task that is a
     --  record component. Concatenate name of variable with that of selector.
     --  The flag Dyn indicates whether this is called for the initialization
--- 100,106 ----
     function Build_Task_Record_Image
       (Loc    : Source_Ptr;
        Id_Ref : Node_Id;
!       Dyn    : Boolean := False) return Node_Id;
     --  Build function to generate the image string for a task that is a
     --  record component. Concatenate name of variable with that of selector.
     --  The flag Dyn indicates whether this is called for the initialization
*************** package body Exp_Util is
*** 109,117 ****
     --  created task that is assigned to a selected component.
  
     function Make_CW_Equivalent_Type
!      (T    : Entity_Id;
!       E    : Node_Id)
!       return Entity_Id;
     --  T is a class-wide type entity, E is the initial expression node that
     --  constrains T in case such as: " X: T := E" or "new T'(E)"
     --  This function returns the entity of the Equivalent type and inserts
--- 108,115 ----
     --  created task that is assigned to a selected component.
  
     function Make_CW_Equivalent_Type
!      (T : Entity_Id;
!       E : Node_Id) return Entity_Id;
     --  T is a class-wide type entity, E is the initial expression node that
     --  constrains T in case such as: " X: T := E" or "new T'(E)"
     --  This function returns the entity of the Equivalent type and inserts
*************** package body Exp_Util is
*** 127,134 ****
  
     function Make_Literal_Range
       (Loc         : Source_Ptr;
!       Literal_Typ : Entity_Id)
!       return        Node_Id;
     --  Produce a Range node whose bounds are:
     --    Low_Bound (Literal_Type) ..
     --        Low_Bound (Literal_Type) + Length (Literal_Typ) - 1
--- 125,131 ----
  
     function Make_Literal_Range
       (Loc         : Source_Ptr;
!       Literal_Typ : Entity_Id) return Node_Id;
     --  Produce a Range node whose bounds are:
     --    Low_Bound (Literal_Type) ..
     --        Low_Bound (Literal_Type) + Length (Literal_Typ) - 1
*************** package body Exp_Util is
*** 136,144 ****
  
     function New_Class_Wide_Subtype
       (CW_Typ : Entity_Id;
!       N      : Node_Id)
!       return   Entity_Id;
!    --  Create an implicit subtype of CW_Typ attached to node N.
  
     ----------------------
     -- Adjust_Condition --
--- 133,140 ----
  
     function New_Class_Wide_Subtype
       (CW_Typ : Entity_Id;
!       N      : Node_Id) return Entity_Id;
!    --  Create an implicit subtype of CW_Typ attached to node N
  
     ----------------------
     -- Adjust_Condition --
*************** package body Exp_Util is
*** 326,334 ****
        end if;
     end Build_Runtime_Call;
  
!    -----------------------------
!    --  Build_Task_Array_Image --
!    -----------------------------
  
     --  This function generates the body for a function that constructs the
     --  image string for a task that is an array component. The function is
--- 322,330 ----
        end if;
     end Build_Runtime_Call;
  
!    ----------------------------
!    -- Build_Task_Array_Image --
!    ----------------------------
  
     --  This function generates the body for a function that constructs the
     --  image string for a task that is an array component. The function is
*************** package body Exp_Util is
*** 375,388 ****
       (Loc    : Source_Ptr;
        Id_Ref : Node_Id;
        A_Type : Entity_Id;
!       Dyn    : Boolean := False)
!       return   Node_Id
     is
        Dims : constant Nat := Number_Dimensions (A_Type);
!       --  Number of dimensions for array of tasks.
  
        Temps : array (1 .. Dims) of Entity_Id;
!       --  Array of temporaries to hold string for each index.
  
        Indx : Node_Id;
        --  Index expression
--- 371,383 ----
       (Loc    : Source_Ptr;
        Id_Ref : Node_Id;
        A_Type : Entity_Id;
!       Dyn    : Boolean := False) return Node_Id
     is
        Dims : constant Nat := Number_Dimensions (A_Type);
!       --  Number of dimensions for array of tasks
  
        Temps : array (1 .. Dims) of Entity_Id;
!       --  Array of temporaries to hold string for each index
  
        Indx : Node_Id;
        --  Index expression
*************** package body Exp_Util is
*** 424,430 ****
               Defining_Identifier => Pref,
               Object_Definition => New_Occurrence_Of (Standard_String, Loc),
               Expression =>
!                Make_String_Literal (Loc, Strval => String_From_Name_Buffer)));
  
        else
           Append_To (Decls,
--- 419,426 ----
               Defining_Identifier => Pref,
               Object_Definition => New_Occurrence_Of (Standard_String, Loc),
               Expression =>
!                Make_String_Literal (Loc,
!                  Strval => String_From_Name_Buffer)));
  
        else
           Append_To (Decls,
*************** package body Exp_Util is
*** 494,500 ****
               Make_Character_Literal (Loc,
                 Chars => Name_Find,
                 Char_Literal_Value =>
!                  Char_Code (Character'Pos ('(')))));
  
        Append_To (Stats,
           Make_Assignment_Statement (Loc,
--- 490,496 ----
               Make_Character_Literal (Loc,
                 Chars => Name_Find,
                 Char_Literal_Value =>
!                  UI_From_Int (Character'Pos ('(')))));
  
        Append_To (Stats,
           Make_Assignment_Statement (Loc,
*************** package body Exp_Util is
*** 553,559 ****
                     Make_Character_Literal (Loc,
                       Chars => Name_Find,
                       Char_Literal_Value =>
!                        Char_Code (Character'Pos (',')))));
  
              Append_To (Stats,
                Make_Assignment_Statement (Loc,
--- 549,555 ----
                     Make_Character_Literal (Loc,
                       Chars => Name_Find,
                       Char_Literal_Value =>
!                        UI_From_Int (Character'Pos (',')))));
  
              Append_To (Stats,
                Make_Assignment_Statement (Loc,
*************** package body Exp_Util is
*** 576,582 ****
               Make_Character_Literal (Loc,
                 Chars => Name_Find,
                 Char_Literal_Value =>
!                  Char_Code (Character'Pos (')')))));
        return Build_Task_Image_Function (Loc, Decls, Stats, Res);
     end Build_Task_Array_Image;
  
--- 572,578 ----
               Make_Character_Literal (Loc,
                 Chars => Name_Find,
                 Char_Literal_Value =>
!                  UI_From_Int (Character'Pos (')')))));
        return Build_Task_Image_Function (Loc, Decls, Stats, Res);
     end Build_Task_Array_Image;
  
*************** package body Exp_Util is
*** 587,594 ****
     function Build_Task_Image_Decls
       (Loc    : Source_Ptr;
        Id_Ref : Node_Id;
!       A_Type : Entity_Id)
!       return   List_Id
     is
        Decls  : constant List_Id   := New_List;
        T_Id   : Entity_Id := Empty;
--- 583,589 ----
     function Build_Task_Image_Decls
       (Loc    : Source_Ptr;
        Id_Ref : Node_Id;
!       A_Type : Entity_Id) return List_Id
     is
        Decls  : constant List_Id   := New_List;
        T_Id   : Entity_Id := Empty;
*************** package body Exp_Util is
*** 604,610 ****
        --  If Discard_Names or No_Implicit_Heap_Allocations are in effect,
        --  generate a dummy declaration only.
  
!       if Restrictions (No_Implicit_Heap_Allocations)
          or else Global_Discard_Names
        then
           T_Id := Make_Defining_Identifier (Loc, New_Internal_Name ('J'));
--- 599,605 ----
        --  If Discard_Names or No_Implicit_Heap_Allocations are in effect,
        --  generate a dummy declaration only.
  
!       if Restriction_Active (No_Implicit_Heap_Allocations)
          or else Global_Discard_Names
        then
           T_Id := Make_Defining_Identifier (Loc, New_Internal_Name ('J'));
*************** package body Exp_Util is
*** 616,639 ****
                 Defining_Identifier => T_Id,
                 Object_Definition => New_Occurrence_Of (Standard_String, Loc),
                 Expression =>
!                  Make_String_Literal
!                    (Loc, Strval => String_From_Name_Buffer)));
  
        else
           if Nkind (Id_Ref) = N_Identifier
             or else Nkind (Id_Ref) = N_Defining_Identifier
           then
!             --  For a simple variable, the image of the task is the name
!             --  of the variable.
  
              T_Id :=
                Make_Defining_Identifier (Loc,
!                 New_External_Name (Chars (Id_Ref), 'T'));
  
              Get_Name_String (Chars (Id_Ref));
  
!             Expr := Make_String_Literal
!               (Loc, Strval => String_From_Name_Buffer);
  
           elsif Nkind (Id_Ref) = N_Selected_Component then
              T_Id :=
--- 611,637 ----
                 Defining_Identifier => T_Id,
                 Object_Definition => New_Occurrence_Of (Standard_String, Loc),
                 Expression =>
!                  Make_String_Literal (Loc,
!                    Strval => String_From_Name_Buffer)));
  
        else
           if Nkind (Id_Ref) = N_Identifier
             or else Nkind (Id_Ref) = N_Defining_Identifier
           then
!             --  For a simple variable, the image of the task is built from
!             --  the name of the variable. To avoid possible conflict with
!             --  the anonymous type created for a single protected object,
!             --  add a numeric suffix.
  
              T_Id :=
                Make_Defining_Identifier (Loc,
!                 New_External_Name (Chars (Id_Ref), 'T', 1));
  
              Get_Name_String (Chars (Id_Ref));
  
!             Expr :=
!               Make_String_Literal (Loc,
!                 Strval => String_From_Name_Buffer);
  
           elsif Nkind (Id_Ref) = N_Selected_Component then
              T_Id :=
*************** package body Exp_Util is
*** 674,681 ****
       (Loc   : Source_Ptr;
        Decls : List_Id;
        Stats : List_Id;
!       Res   : Entity_Id)
!       return  Node_Id
     is
        Spec : Node_Id;
  
--- 672,678 ----
       (Loc   : Source_Ptr;
        Decls : List_Id;
        Stats : List_Id;
!       Res   : Entity_Id) return Node_Id
     is
        Spec : Node_Id;
  
*************** package body Exp_Util is
*** 788,795 ****
     function Build_Task_Record_Image
       (Loc    : Source_Ptr;
        Id_Ref : Node_Id;
!       Dyn    : Boolean := False)
!       return   Node_Id
     is
        Len : Entity_Id;
        --  Total length of generated name
--- 785,791 ----
     function Build_Task_Record_Image
       (Loc    : Source_Ptr;
        Id_Ref : Node_Id;
!       Dyn    : Boolean := False) return Node_Id
     is
        Len : Entity_Id;
        --  Total length of generated name
*************** package body Exp_Util is
*** 804,810 ****
        --  Name of enclosing variable, prefix of resulting name
  
        Sum : Node_Id;
!       --  Expression to compute total size of string.
  
        Sel : Entity_Id;
        --  Entity for selector name
--- 800,806 ----
        --  Name of enclosing variable, prefix of resulting name
  
        Sum : Node_Id;
!       --  Expression to compute total size of string
  
        Sel : Entity_Id;
        --  Entity for selector name
*************** package body Exp_Util is
*** 825,831 ****
               Defining_Identifier => Pref,
               Object_Definition => New_Occurrence_Of (Standard_String, Loc),
               Expression =>
!                Make_String_Literal (Loc, Strval => String_From_Name_Buffer)));
  
        else
           Append_To (Decls,
--- 821,828 ----
               Defining_Identifier => Pref,
               Object_Definition => New_Occurrence_Of (Standard_String, Loc),
               Expression =>
!                Make_String_Literal (Loc,
!                  Strval => String_From_Name_Buffer)));
  
        else
           Append_To (Decls,
*************** package body Exp_Util is
*** 844,850 ****
             Defining_Identifier => Sel,
             Object_Definition => New_Occurrence_Of (Standard_String, Loc),
             Expression =>
!               Make_String_Literal (Loc, Strval => String_From_Name_Buffer)));
  
        Sum := Make_Integer_Literal (Loc, Nat (Name_Len + 1));
  
--- 841,848 ----
             Defining_Identifier => Sel,
             Object_Definition => New_Occurrence_Of (Standard_String, Loc),
             Expression =>
!              Make_String_Literal (Loc,
!                Strval => String_From_Name_Buffer)));
  
        Sum := Make_Integer_Literal (Loc, Nat (Name_Len + 1));
  
*************** package body Exp_Util is
*** 873,879 ****
               Make_Character_Literal (Loc,
                 Chars => Name_Find,
                 Char_Literal_Value =>
!                  Char_Code (Character'Pos ('.')))));
  
        Append_To (Stats,
          Make_Assignment_Statement (Loc,
--- 871,877 ----
               Make_Character_Literal (Loc,
                 Chars => Name_Find,
                 Char_Literal_Value =>
!                  UI_From_Int (Character'Pos ('.')))));
  
        Append_To (Stats,
          Make_Assignment_Statement (Loc,
*************** package body Exp_Util is
*** 1007,1014 ****
  
     function Duplicate_Subexpr
       (Exp      : Node_Id;
!       Name_Req : Boolean := False)
!       return     Node_Id
     is
     begin
        Remove_Side_Effects (Exp, Name_Req);
--- 1005,1011 ----
  
     function Duplicate_Subexpr
       (Exp      : Node_Id;
!       Name_Req : Boolean := False) return Node_Id
     is
     begin
        Remove_Side_Effects (Exp, Name_Req);
*************** package body Exp_Util is
*** 1021,1028 ****
  
     function Duplicate_Subexpr_No_Checks
       (Exp      : Node_Id;
!       Name_Req : Boolean := False)
!       return     Node_Id
     is
        New_Exp : Node_Id;
  
--- 1018,1024 ----
  
     function Duplicate_Subexpr_No_Checks
       (Exp      : Node_Id;
!       Name_Req : Boolean := False) return Node_Id
     is
        New_Exp : Node_Id;
  
*************** package body Exp_Util is
*** 1039,1046 ****
  
     function Duplicate_Subexpr_Move_Checks
       (Exp      : Node_Id;
!       Name_Req : Boolean := False)
!       return     Node_Id
     is
        New_Exp : Node_Id;
  
--- 1035,1041 ----
  
     function Duplicate_Subexpr_Move_Checks
       (Exp      : Node_Id;
!       Name_Req : Boolean := False) return Node_Id
     is
        New_Exp : Node_Id;
  
*************** package body Exp_Util is
*** 1072,1078 ****
              --  in gigi.
  
              P := Parent (N);
- 
              while Present (P)
                and then Nkind (P) /= N_Subprogram_Body
              loop
--- 1067,1072 ----
*************** package body Exp_Util is
*** 1225,1231 ****
        then
           if Is_Itype (Exp_Typ) then
  
!             --  No need to generate a new one.
  
              T := Exp_Typ;
  
--- 1219,1225 ----
        then
           if Is_Itype (Exp_Typ) then
  
!             --  No need to generate a new one
  
              T := Exp_Typ;
  
*************** package body Exp_Util is
*** 1319,1326 ****
     ----------------------
  
     procedure Force_Evaluation (Exp : Node_Id; Name_Req : Boolean := False) is
     begin
!       Remove_Side_Effects (Exp, Name_Req, Variable_Ref => True);
     end Force_Evaluation;
  
     ------------------------
--- 1313,1356 ----
     ----------------------
  
     procedure Force_Evaluation (Exp : Node_Id; Name_Req : Boolean := False) is
+       Component_In_Lhs : Boolean := False;
+       Par              : Node_Id;
+ 
     begin
!       --  Loop to determine whether there is a component reference in
!       --  the left hand side if Exp appears on the left side of an
!       --  assignment statement. Needed to determine if form of result
!       --  must be a variable.
! 
!       Par := Exp;
!       while Present (Par)
!         and then
!          (Nkind (Par) = N_Selected_Component
!             or else
!           Nkind (Par) = N_Indexed_Component)
!       loop
!          if Nkind (Parent (Par)) = N_Assignment_Statement
!            and then Par = Name (Parent (Par))
!          then
!             Component_In_Lhs := True;
!             exit;
!          else
!             Par := Parent (Par);
!          end if;
!       end loop;
! 
!       --  If the expression is a selected component, it is being evaluated
!       --  as part of a discriminant check. If it is part of a left-hand
!       --  side, this is the last use of its value and it is safe to create
!       --  a renaming for it, rather than a temporary. In addition, if it
!       --  is not an addressable field, creating a temporary may be a problem
!       --  for gigi, or might drop the value of the assignment. Therefore,
!       --  if the expression is on the lhs of an assignment, remove side
!       --  effects without requiring a temporary, and create a renaming.
!       --  (See remove_side_effects for details).
! 
!       Remove_Side_Effects
!         (Exp, Name_Req, Variable_Ref => not Component_In_Lhs);
     end Force_Evaluation;
  
     ------------------------
*************** package body Exp_Util is
*** 1484,1493 ****
        --  condition, Sens is True if the condition is true and
        --  False if it needs inverting.
  
-       Cond := Condition (CV);
- 
        --  Deal with NOT operators, inverting sense
  
        while Nkind (Cond) = N_Op_Not loop
           Cond := Right_Opnd (Cond);
           Sens := not Sens;
--- 1514,1522 ----
        --  condition, Sens is True if the condition is true and
        --  False if it needs inverting.
  
        --  Deal with NOT operators, inverting sense
  
+       Cond := Condition (CV);
        while Nkind (Cond) = N_Op_Not loop
           Cond := Right_Opnd (Cond);
           Sens := not Sens;
*************** package body Exp_Util is
*** 1780,1786 ****
                    return;
                 end if;
  
!             --  Statements, declarations, pragmas, representation clauses.
  
              when
                 --  Statements
--- 1809,1815 ----
                    return;
                 end if;
  
!             --  Statements, declarations, pragmas, representation clauses
  
              when
                 --  Statements
*************** package body Exp_Util is
*** 1805,1812 ****
                 N_Entry_Body                             |
                 N_Exception_Declaration                  |
                 N_Exception_Renaming_Declaration         |
                 N_Formal_Object_Declaration              |
-                N_Formal_Subprogram_Declaration          |
                 N_Formal_Type_Declaration                |
                 N_Full_Type_Declaration                  |
                 N_Function_Instantiation                 |
--- 1834,1842 ----
                 N_Entry_Body                             |
                 N_Exception_Declaration                  |
                 N_Exception_Renaming_Declaration         |
+                N_Formal_Abstract_Subprogram_Declaration |
+                N_Formal_Concrete_Subprogram_Declaration |
                 N_Formal_Object_Declaration              |
                 N_Formal_Type_Declaration                |
                 N_Full_Type_Declaration                  |
                 N_Function_Instantiation                 |
*************** package body Exp_Util is
*** 1942,1954 ****
  
                       else
                          declare
!                            Decl : Node_Id := Assoc_Node;
  
                          begin
                             --  Check whether these actions were generated
                             --  by a declaration that is part of the loop_
                             --  actions for the component_association.
  
                             while Present (Decl) loop
                                exit when Parent (Decl) = P
                                  and then Is_List_Member (Decl)
--- 1972,1985 ----
  
                       else
                          declare
!                            Decl : Node_Id;
  
                          begin
                             --  Check whether these actions were generated
                             --  by a declaration that is part of the loop_
                             --  actions for the component_association.
  
+                            Decl := Assoc_Node;
                             while Present (Decl) loop
                                exit when Parent (Decl) = P
                                  and then Is_List_Member (Decl)
*************** package body Exp_Util is
*** 2351,2356 ****
--- 2382,2396 ----
  
     function Is_Possibly_Unaligned_Slice (P : Node_Id) return Boolean is
     begin
+       --  ??? GCC3 will eventually handle strings with arbitrary alignments,
+       --  but for now the following check must be disabled.
+ 
+       --  if get_gcc_version >= 3 then
+       --     return False;
+       --  end if;
+ 
+       --  For renaming case, go to renamed object
+ 
        if Is_Entity_Name (P)
          and then Is_Object (Entity (P))
          and then Present (Renamed_Object (Entity (P)))
*************** package body Exp_Util is
*** 2358,2413 ****
           return Is_Possibly_Unaligned_Slice (Renamed_Object (Entity (P)));
        end if;
  
!       --  We only need to worry if the target has strict alignment, unless
!       --  it is a nested record component with a component clause, which
!       --  Gigi does not handle well. This patch should disappear with GCC 3.0
!       --  and it is not clear why it is needed even when the representation
!       --  clause is a confirming one, but in its absence gigi complains that
!       --  the slice is not addressable.???
  
!       if not Target_Strict_Alignment then
!          if Nkind (P) /= N_Slice
!            or else Nkind (Prefix (P)) /= N_Selected_Component
!            or else Nkind (Prefix (Prefix (P))) /= N_Selected_Component
!          then
!             return False;
!          end if;
        end if;
  
!       --  The reference must be a slice
  
!       if Nkind (P) /= N_Slice then
           return False;
        end if;
  
        --  If it is a slice, then look at the array type being sliced
  
        declare
!          Pref : constant Node_Id   := Prefix (P);
!          Typ  : constant Entity_Id := Etype (Prefix (P));
  
        begin
!          --  The worrisome case is one where we don't know the alignment
!          --  of the array, or we know it and it is greater than 1 (if the
!          --  alignment is one, then obviously it cannot be misaligned).
  
!          if Known_Alignment (Typ) and then Alignment (Typ) = 1 then
!             return False;
!          end if;
  
!          --  The only way we can be unaligned is if the array being sliced
!          --  is a component of a record, and either the record is packed,
!          --  or the component has a component clause, or the record has
!          --  a specified alignment (that might be too small).
  
!          return
!             Nkind (Pref) = N_Selected_Component
!               and then
!                  (Is_Packed (Etype (Prefix (Pref)))
!                     or else
!                   Known_Alignment (Etype (Prefix (Pref)))
!                     or else
!                   Present (Component_Clause (Entity (Selector_Name (Pref)))));
        end;
     end Is_Possibly_Unaligned_Slice;
  
--- 2398,2518 ----
           return Is_Possibly_Unaligned_Slice (Renamed_Object (Entity (P)));
        end if;
  
!       --  The reference must be a slice
  
!       if Nkind (P) /= N_Slice then
!          return False;
        end if;
  
!       --  Always assume the worst for a nested record component with a
!       --  component clause, which gigi/gcc does not appear to handle well.
!       --  It is not clear why this special test is needed at all ???
  
!       if Nkind (Prefix (P)) = N_Selected_Component
!         and then Nkind (Prefix (Prefix (P))) = N_Selected_Component
!         and then
!           Present (Component_Clause (Entity (Selector_Name (Prefix (P)))))
!       then
!          return True;
!       end if;
! 
!       --  We only need to worry if the target has strict alignment
! 
!       if not Target_Strict_Alignment then
           return False;
        end if;
  
        --  If it is a slice, then look at the array type being sliced
  
        declare
!          Sarr : constant Node_Id := Prefix (P);
!          --  Prefix of the slice, i.e. the array being sliced
! 
!          Styp : constant Entity_Id := Etype (Prefix (P));
!          --  Type of the array being sliced
! 
!          Pref : Node_Id;
!          Ptyp : Entity_Id;
  
        begin
!          --  The problems arise if the array object that is being sliced
!          --  is a component of a record or array, and we cannot guarantee
!          --  the alignment of the array within its containing object.
  
!          --  To investigate this, we look at successive prefixes to see
!          --  if we have a worrisome indexed or selected component.
  
!          Pref := Sarr;
!          loop
!             --  Case of array is part of an indexed component reference
  
!             if Nkind (Pref) = N_Indexed_Component then
!                Ptyp := Etype (Prefix (Pref));
! 
!                --  The only problematic case is when the array is packed,
!                --  in which case we really know nothing about the alignment
!                --  of individual components.
! 
!                if Is_Bit_Packed_Array (Ptyp) then
!                   return True;
!                end if;
! 
!             --  Case of array is part of a selected component reference
! 
!             elsif Nkind (Pref) = N_Selected_Component then
!                Ptyp := Etype (Prefix (Pref));
! 
!                --  We are definitely in trouble if the record in question
!                --  has an alignment, and either we know this alignment is
!                --  inconsistent with the alignment of the slice, or we
!                --  don't know what the alignment of the slice should be.
! 
!                if Known_Alignment (Ptyp)
!                  and then (Unknown_Alignment (Styp)
!                              or else Alignment (Styp) > Alignment (Ptyp))
!                then
!                   return True;
!                end if;
! 
!                --  We are in potential trouble if the record type is packed.
!                --  We could special case when we know that the array is the
!                --  first component, but that's not such a simple case ???
! 
!                if Is_Packed (Ptyp) then
!                   return True;
!                end if;
! 
!                --  We are in trouble if there is a component clause, and
!                --  either we do not know the alignment of the slice, or
!                --  the alignment of the slice is inconsistent with the
!                --  bit position specified by the component clause.
! 
!                declare
!                   Field : constant Entity_Id := Entity (Selector_Name (Pref));
!                begin
!                   if Present (Component_Clause (Field))
!                     and then
!                       (Unknown_Alignment (Styp)
!                         or else
!                          (Component_Bit_Offset (Field) mod
!                            (System_Storage_Unit * Alignment (Styp))) /= 0)
!                   then
!                      return True;
!                   end if;
!                end;
! 
!             --  For cases other than selected or indexed components we
!             --  know we are OK, since no issues arise over alignment.
! 
!             else
!                return False;
!             end if;
! 
!             --  We processed an indexed component or selected component
!             --  reference that looked safe, so keep checking prefixes.
! 
!             Pref := Prefix (Pref);
!          end loop;
        end;
     end Is_Possibly_Unaligned_Slice;
  
*************** package body Exp_Util is
*** 2439,2445 ****
  
           if Result and then Nkind (P) = N_Indexed_Component then
              Expr := First (Expressions (P));
- 
              while Present (Expr) loop
                 Force_Evaluation (Expr);
                 Next (Expr);
--- 2544,2549 ----
*************** package body Exp_Util is
*** 2556,2564 ****
  
           elsif Nkind (N) = N_Case_Statement then
              declare
!                Alt : Node_Id := First (Alternatives (N));
! 
              begin
                 while Present (Alt) loop
                    Kill_Dead_Code (Statements (Alt));
                    Next (Alt);
--- 2660,2668 ----
  
           elsif Nkind (N) = N_Case_Statement then
              declare
!                Alt : Node_Id;
              begin
+                Alt := First (Alternatives (N));
                 while Present (Alt) loop
                    Kill_Dead_Code (Statements (Alt));
                    Next (Alt);
*************** package body Exp_Util is
*** 2703,2711 ****
     --   derived types
  
     function Make_CW_Equivalent_Type
!      (T    : Entity_Id;
!       E    : Node_Id)
!       return Entity_Id
     is
        Loc         : constant Source_Ptr := Sloc (E);
        Root_Typ    : constant Entity_Id  := Root_Type (T);
--- 2807,2814 ----
     --   derived types
  
     function Make_CW_Equivalent_Type
!      (T : Entity_Id;
!       E : Node_Id) return Entity_Id
     is
        Loc         : constant Source_Ptr := Sloc (E);
        Root_Typ    : constant Entity_Id  := Root_Type (T);
*************** package body Exp_Util is
*** 2842,2849 ****
  
     function Make_Literal_Range
       (Loc         : Source_Ptr;
!       Literal_Typ : Entity_Id)
!       return        Node_Id
     is
        Lo : constant Node_Id :=
               New_Copy_Tree (String_Literal_Low_Bound (Literal_Typ));
--- 2945,2951 ----
  
     function Make_Literal_Range
       (Loc         : Source_Ptr;
!       Literal_Typ : Entity_Id) return Node_Id
     is
        Lo : constant Node_Id :=
               New_Copy_Tree (String_Literal_Low_Bound (Literal_Typ));
*************** package body Exp_Util is
*** 2880,2887 ****
  
     function Make_Subtype_From_Expr
       (E       : Node_Id;
!       Unc_Typ : Entity_Id)
!       return    Node_Id
     is
        Loc         : constant Source_Ptr := Sloc (E);
        List_Constr : constant List_Id    := New_List;
--- 2982,2988 ----
  
     function Make_Subtype_From_Expr
       (E       : Node_Id;
!       Unc_Typ : Entity_Id) return Node_Id
     is
        Loc         : constant Source_Ptr := Sloc (E);
        List_Constr : constant List_Id    := New_List;
*************** package body Exp_Util is
*** 3015,3024 ****
  
     function May_Generate_Large_Temp (Typ : Entity_Id) return Boolean is
     begin
!       if not Stack_Checking_Enabled then
!          return False;
! 
!       elsif not Size_Known_At_Compile_Time (Typ) then
           return False;
  
        elsif Esize (Typ) /= 0 and then Esize (Typ) <= 256 then
--- 3116,3122 ----
  
     function May_Generate_Large_Temp (Typ : Entity_Id) return Boolean is
     begin
!       if not Size_Known_At_Compile_Time (Typ) then
           return False;
  
        elsif Esize (Typ) /= 0 and then Esize (Typ) <= 256 then
*************** package body Exp_Util is
*** 3042,3049 ****
  
     function New_Class_Wide_Subtype
       (CW_Typ : Entity_Id;
!       N      : Node_Id)
!       return   Entity_Id
     is
        Res       : constant Entity_Id := Create_Itype (E_Void, N);
        Res_Name  : constant Name_Id   := Chars (Res);
--- 3140,3146 ----
  
     function New_Class_Wide_Subtype
       (CW_Typ : Entity_Id;
!       N      : Node_Id) return Entity_Id
     is
        Res       : constant Entity_Id := Create_Itype (E_Void, N);
        Res_Name  : constant Name_Id   := Chars (Res);
*************** package body Exp_Util is
*** 3256,3263 ****
                   N_In        |
                   N_Not_In    |
                   N_And_Then  |
!                  N_Or_Else
!             =>
                 return Side_Effect_Free (Left_Opnd  (N))
                   and then Side_Effect_Free (Right_Opnd (N));
  
--- 3353,3359 ----
                   N_In        |
                   N_Not_In    |
                   N_And_Then  |
!                  N_Or_Else   =>
                 return Side_Effect_Free (Left_Opnd  (N))
                   and then Side_Effect_Free (Right_Opnd (N));
  
*************** package body Exp_Util is
*** 3340,3345 ****
--- 3436,3449 ----
              when N_Unchecked_Expression =>
                 return Side_Effect_Free (Expression (N));
  
+             --  A literal is side effect free
+ 
+             when N_Character_Literal    |
+                  N_Integer_Literal      |
+                  N_Real_Literal         |
+                  N_String_Literal       =>
+                return True;
+ 
              --  We consider that anything else has side effects. This is a bit
              --  crude, but we are pretty close for most common cases, and we
              --  are certainly correct (i.e. we never return True when the
*************** package body Exp_Util is
*** 3362,3368 ****
  
           else
              N := First (L);
- 
              while Present (N) loop
                 if not Side_Effect_Free (N) then
                    return False;
--- 3466,3471 ----
*************** package body Exp_Util is
*** 3519,3525 ****
              Set_Is_Renaming_Of_Object (Def_Id, False);
           end if;
  
!       --  If it is a scalar type, just make a copy.
  
        elsif Is_Elementary_Type (Exp_Type) then
           Def_Id := Make_Defining_Identifier (Loc, New_Internal_Name ('R'));
--- 3622,3628 ----
              Set_Is_Renaming_Of_Object (Def_Id, False);
           end if;
  
!       --  If it is a scalar type, just make a copy
  
        elsif Is_Elementary_Type (Exp_Type) then
           Def_Id := Make_Defining_Identifier (Loc, New_Internal_Name ('R'));
*************** package body Exp_Util is
*** 3604,3611 ****
              New_Exp := Make_Reference (Loc, E);
           end if;
  
!          if Nkind (E) = N_Aggregate and then Expansion_Delayed (E) then
!             Set_Expansion_Delayed (E, False);
              Set_Analyzed (E, False);
           end if;
  
--- 3707,3720 ----
              New_Exp := Make_Reference (Loc, E);
           end if;
  
!          if Is_Delayed_Aggregate (E) then
!             if Nkind (E) = N_Qualified_Expression then
!                Set_Expansion_Delayed (Expression (E), False);
!                Set_Analyzed (Expression (E), False);
!             else
!                Set_Expansion_Delayed (E, False);
!             end if;
! 
              Set_Analyzed (E, False);
           end if;
  
*************** package body Exp_Util is
*** 3727,3732 ****
--- 3836,3851 ----
        if Implementation_Base_Type (Otyp) = Implementation_Base_Type (Ityp) then
           return True;
  
+       --  Same if this is an upwards conversion of an untagged type, and there
+       --  are no constraints involved (could be more general???)
+ 
+       elsif Etype (Ityp) = Otyp
+         and then not Is_Tagged_Type (Ityp)
+         and then not Has_Discriminants (Ityp)
+         and then No (First_Rep_Item (Base_Type (Ityp)))
+       then
+          return True;
+ 
        --  If the size of output type is known at compile time, there is
        --  never a problem.  Note that unconstrained records are considered
        --  to be of known size, but we can't consider them that way here,
*************** package body Exp_Util is
*** 3737,3743 ****
        --  in stack checking mode.
  
        elsif Size_Known_At_Compile_Time (Otyp)
!         and then not May_Generate_Large_Temp (Otyp)
          and then not (Is_Record_Type (Otyp) and then not Is_Constrained (Otyp))
        then
           return True;
--- 3856,3864 ----
        --  in stack checking mode.
  
        elsif Size_Known_At_Compile_Time (Otyp)
!         and then
!           (not Stack_Checking_Enabled
!              or else not May_Generate_Large_Temp (Otyp))
          and then not (Is_Record_Type (Otyp) and then not Is_Constrained (Otyp))
        then
           return True;
*************** package body Exp_Util is
*** 3798,3804 ****
        then
           return True;
  
!       --   Otherwise, Gigi cannot handle this and we must make a temporary.
  
        else
           return False;
--- 3919,3925 ----
        then
           return True;
  
!       --   Otherwise, Gigi cannot handle this and we must make a temporary
  
        else
           return False;
*************** package body Exp_Util is
*** 3868,3875 ****
     function Target_Has_Fixed_Ops
       (Left_Typ   : Entity_Id;
        Right_Typ  : Entity_Id;
!       Result_Typ : Entity_Id)
!       return       Boolean
     is
        function Is_Fractional_Type (Typ : Entity_Id) return Boolean;
        --  Return True if the given type is a fixed-point type with a small
--- 3989,3995 ----
     function Target_Has_Fixed_Ops
       (Left_Typ   : Entity_Id;
        Right_Typ  : Entity_Id;
!       Result_Typ : Entity_Id) return Boolean
     is
        function Is_Fractional_Type (Typ : Entity_Id) return Boolean;
        --  Return True if the given type is a fixed-point type with a small
diff -Nrcpad gcc-3.4.3/gcc/ada/exp_util.ads gcc-4.0.0/gcc/ada/exp_util.ads
*** gcc-3.4.3/gcc/ada/exp_util.ads	Mon Jan  5 15:20:44 2004
--- gcc-4.0.0/gcc/ada/exp_util.ads	Thu Feb 10 13:57:23 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Exp_Util is
*** 127,133 ****
     --
     --  Implementation limitation: Assoc_Node must be a statement. We can
     --  generalize to expressions if there is a need but this is tricky to
!    --  implement because of short-ciruits (among other things).???
  
     procedure Insert_Library_Level_Action (N : Node_Id);
     --  This procedure inserts and analyzes the node N as an action at the
--- 127,133 ----
     --
     --  Implementation limitation: Assoc_Node must be a statement. We can
     --  generalize to expressions if there is a need but this is tricky to
!    --  implement because of short-circuits (among other things).???
  
     procedure Insert_Library_Level_Action (N : Node_Id);
     --  This procedure inserts and analyzes the node N as an action at the
*************** package Exp_Util is
*** 257,271 ****
  
     function Duplicate_Subexpr
       (Exp      : Node_Id;
!       Name_Req : Boolean := False)
!       return     Node_Id;
     --  Given the node for a subexpression, this function makes a logical
     --  copy of the subexpression, and returns it. This is intended for use
     --  when the expansion of an expression needs to repeat part of it. For
     --  example, replacing a**2 by a*a requires two references to a which
!    --  may be a complex subexpression. Duplicate_Subexpression guarantees
!    --  not to duplicate side effects. If necessary, it generates actions
!    --  to save the expression value in a temporary, inserting these actions
     --  into the tree using Insert_Actions with Exp as the insertion location.
     --  The original expression and the returned result then become references
     --  to this saved value. Exp must be analyzed on entry. On return, Exp
--- 257,270 ----
  
     function Duplicate_Subexpr
       (Exp      : Node_Id;
!       Name_Req : Boolean := False) return Node_Id;
     --  Given the node for a subexpression, this function makes a logical
     --  copy of the subexpression, and returns it. This is intended for use
     --  when the expansion of an expression needs to repeat part of it. For
     --  example, replacing a**2 by a*a requires two references to a which
!    --  may be a complex subexpression. Duplicate_Subexpr guarantees not
!    --  to duplicate side effects. If necessary, it generates actions to
!    --  save the expression value in a temporary, inserting these actions
     --  into the tree using Insert_Actions with Exp as the insertion location.
     --  The original expression and the returned result then become references
     --  to this saved value. Exp must be analyzed on entry. On return, Exp
*************** package Exp_Util is
*** 280,287 ****
  
     function Duplicate_Subexpr_No_Checks
       (Exp      : Node_Id;
!       Name_Req : Boolean := False)
!       return     Node_Id;
     --  Identical in effect to Duplicate_Subexpr, except that Remove_Checks
     --  is called on the result, so that the duplicated expression does not
     --  include checks. This is appropriate for use when Exp, the original
--- 279,285 ----
  
     function Duplicate_Subexpr_No_Checks
       (Exp      : Node_Id;
!       Name_Req : Boolean := False) return Node_Id;
     --  Identical in effect to Duplicate_Subexpr, except that Remove_Checks
     --  is called on the result, so that the duplicated expression does not
     --  include checks. This is appropriate for use when Exp, the original
*************** package Exp_Util is
*** 290,297 ****
  
     function Duplicate_Subexpr_Move_Checks
       (Exp      : Node_Id;
!       Name_Req : Boolean := False)
!       return     Node_Id;
     --  Identical in effect to Duplicate_Subexpr, except that Remove_Checks
     --  is called on Exp after the duplication is complete, so that the
     --  original expression does not include checks. In this case the result
--- 288,294 ----
  
     function Duplicate_Subexpr_Move_Checks
       (Exp      : Node_Id;
!       Name_Req : Boolean := False) return Node_Id;
     --  Identical in effect to Duplicate_Subexpr, except that Remove_Checks
     --  is called on Exp after the duplication is complete, so that the
     --  original expression does not include checks. In this case the result
*************** package Exp_Util is
*** 320,326 ****
     --  Empty, then simply returns Cond1 (this allows the use of Empty to
     --  initialize a series of checks evolved by this routine, with a final
     --  result of Empty indicating that no checks were required). The Sloc
!    --  field of the constructed N_And_Then node is copied from Cond1.
  
     procedure Expand_Subtype_From_Expr
       (N             : Node_Id;
--- 317,323 ----
     --  Empty, then simply returns Cond1 (this allows the use of Empty to
     --  initialize a series of checks evolved by this routine, with a final
     --  result of Empty indicating that no checks were required). The Sloc
!    --  field of the constructed N_Or_Else node is copied from Cond1.
  
     procedure Expand_Subtype_From_Expr
       (N             : Node_Id;
*************** package Exp_Util is
*** 352,358 ****
     --  Force the evaluation of the expression right away. Similar behavior
     --  to Remove_Side_Effects when Variable_Ref is set to TRUE. That is to
     --  say, it removes the side-effects and capture the values of the
!    --  variables. Remove_Side_effects guarantees that multiple evaluations
     --  of the same expression won't generate multiple side effects, whereas
     --  Force_Evaluation further guarantees that all evaluations will yield
     --  the same result.
--- 349,355 ----
     --  Force the evaluation of the expression right away. Similar behavior
     --  to Remove_Side_Effects when Variable_Ref is set to TRUE. That is to
     --  say, it removes the side-effects and capture the values of the
!    --  variables. Remove_Side_Effects guarantees that multiple evaluations
     --  of the same expression won't generate multiple side effects, whereas
     --  Force_Evaluation further guarantees that all evaluations will yield
     --  the same result.
*************** package Exp_Util is
*** 482,501 ****
  
     function Make_Subtype_From_Expr
       (E       : Node_Id;
!       Unc_Typ : Entity_Id)
!       return    Node_Id;
     --  Returns a subtype indication corresponding to the actual type of an
     --  expression E. Unc_Typ is an unconstrained array or record, or
     --  a classwide type.
  
     function May_Generate_Large_Temp (Typ : Entity_Id) return Boolean;
     --  Determines if the given type, Typ, may require a large temporary
!    --  of the type that causes trouble if stack checking is enabled. The
!    --  result is True only if stack checking is enabled and the size of
!    --  the type is known at compile time and large, where large is defined
!    --  hueristically by the body of this routine. The purpose of this
!    --  routine is to help avoid generating troublesome temporaries that
!    --  intefere with the stack checking mechanism.
  
     procedure Remove_Side_Effects
       (Exp          : Node_Id;
--- 479,498 ----
  
     function Make_Subtype_From_Expr
       (E       : Node_Id;
!       Unc_Typ : Entity_Id) return Node_Id;
     --  Returns a subtype indication corresponding to the actual type of an
     --  expression E. Unc_Typ is an unconstrained array or record, or
     --  a classwide type.
  
     function May_Generate_Large_Temp (Typ : Entity_Id) return Boolean;
     --  Determines if the given type, Typ, may require a large temporary
!    --  of the kind that causes back-end trouble if stack checking is enabled.
!    --  The result is True only the size of the type is known at compile time
!    --  and large, where large is defined heuristically by the body of this
!    --  routine. The purpose of this routine is to help avoid generating
!    --  troublesome temporaries that interfere with stack checking mechanism.
!    --  Note that the caller has to check whether stack checking is actually
!    --  enabled in order to guide the expansion (typically of a function call).
  
     procedure Remove_Side_Effects
       (Exp          : Node_Id;
*************** package Exp_Util is
*** 505,518 ****
     --  if necessary by an equivalent subexpression that is guaranteed to be
     --  side effect free. This is done by extracting any actions that could
     --  cause side effects, and inserting them using Insert_Actions into the
!    --  tree to which Exp is attached. Exp must be analayzed and resolved
     --  before the call and is analyzed and resolved on return. The Name_Req
     --  may only be set to True if Exp has the form of a name, and the
     --  effect is to guarantee that any replacement maintains the form of a
     --  name. If Variable_Ref is set to TRUE, a variable is considered as a
     --  side effect (used in implementing Force_Evaluation). Note: after a
!    --  call to Remove_Side_Effects, it is safe to use a call to
!    --  New_Copy_Tree to obtain a copy of the resulting expression.
  
     function Safe_Unchecked_Type_Conversion (Exp : Node_Id) return Boolean;
     --  Given the node for an N_Unchecked_Type_Conversion, return True
--- 502,515 ----
     --  if necessary by an equivalent subexpression that is guaranteed to be
     --  side effect free. This is done by extracting any actions that could
     --  cause side effects, and inserting them using Insert_Actions into the
!    --  tree to which Exp is attached. Exp must be analyzed and resolved
     --  before the call and is analyzed and resolved on return. The Name_Req
     --  may only be set to True if Exp has the form of a name, and the
     --  effect is to guarantee that any replacement maintains the form of a
     --  name. If Variable_Ref is set to TRUE, a variable is considered as a
     --  side effect (used in implementing Force_Evaluation). Note: after a
!    --  call to Remove_Side_Effects, it is safe to call New_Copy_Tree to
!    --  obtain a copy of the resulting expression.
  
     function Safe_Unchecked_Type_Conversion (Exp : Node_Id) return Boolean;
     --  Given the node for an N_Unchecked_Type_Conversion, return True
*************** package Exp_Util is
*** 535,542 ****
     function Target_Has_Fixed_Ops
       (Left_Typ   : Entity_Id;
        Right_Typ  : Entity_Id;
!       Result_Typ : Entity_Id)
!       return       Boolean;
     --  Returns True if and only if the target machine has direct support
     --  for fixed-by-fixed multiplications and divisions for the given
     --  operand and result types. This is called in package Exp_Fixd to
--- 532,538 ----
     function Target_Has_Fixed_Ops
       (Left_Typ   : Entity_Id;
        Right_Typ  : Entity_Id;
!       Result_Typ : Entity_Id) return Boolean;
     --  Returns True if and only if the target machine has direct support
     --  for fixed-by-fixed multiplications and divisions for the given
     --  operand and result types. This is called in package Exp_Fixd to
diff -Nrcpad gcc-3.4.3/gcc/ada/expect.c gcc-4.0.0/gcc/ada/expect.c
*** gcc-3.4.3/gcc/ada/expect.c	Fri Oct 31 01:08:42 2003
--- gcc-4.0.0/gcc/ada/expect.c	Fri Nov 19 11:24:39 2004
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *           Copyright (C) 2001-2003 Ada Core Technologies, Inc.            *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *           Copyright (C) 2001-2004 Ada Core Technologies, Inc.            *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
***************
*** 49,56 ****
     Dummy stubs are also provided for other systems. */
  
  #ifdef _AIX
! /* Work around the fact that gcc/cpp does not define "unix" under AiX.  */
! #define unix
  #endif
  
  #ifdef _WIN32
--- 49,61 ----
     Dummy stubs are also provided for other systems. */
  
  #ifdef _AIX
! /* Work around the fact that gcc/cpp does not define "__unix__" under AiX.  */
! #define __unix__
! #endif
! 
! #ifdef __APPLE__
! /* Work around the fact that gcc/cpp does not define "__unix__" on Darwin.  */
! #define __unix__
  #endif
  
  #ifdef _WIN32
*************** __gnat_expect_poll (int *fd, int num_fd,
*** 265,273 ****
    return ready;
  }
  
! #elif defined (unix)
  
! #ifdef hpux
  #include <sys/ptyio.h>
  #endif
  
--- 270,278 ----
    return ready;
  }
  
! #elif defined (__unix__)
  
! #ifdef __hpux__
  #include <sys/ptyio.h>
  #endif
  
*************** __gnat_expect_poll (int *fd, int num_fd,
*** 359,365 ****
  	      is_set[i] = 0;
  	  }
  
! #ifdef hpux
          for (i = 0; i < num_fd; i++)
  	  {
  	    if (FD_ISSET (fd[i], &eset))
--- 364,370 ----
  	      is_set[i] = 0;
  	  }
  
! #ifdef __hpux__
          for (i = 0; i < num_fd; i++)
  	  {
  	    if (FD_ISSET (fd[i], &eset))
diff -Nrcpad gcc-3.4.3/gcc/ada/fe.h gcc-4.0.0/gcc/ada/fe.h
*** gcc-3.4.3/gcc/ada/fe.h	Mon Jan  5 15:20:44 2004
--- gcc-4.0.0/gcc/ada/fe.h	Mon Mar 15 14:50:56 2004
*************** extern Boolean Debug_Flag_NN;
*** 57,73 ****
     Present_Expr for N_Variant nodes.  */
  
  #define Set_Alignment			einfo__set_alignment
- #define Set_Esize			einfo__set_esize
- #define Set_RM_Size			einfo__set_rm_size
  #define Set_Component_Bit_Offset	einfo__set_component_bit_offset
  #define Set_Component_Size		einfo__set_component_size
  #define Set_Present_Expr		sinfo__set_present_expr
  
  extern void Set_Alignment		(Entity_Id, Uint);
  extern void Set_Component_Size		(Entity_Id, Uint);
  extern void Set_Esize			(Entity_Id, Uint);
  extern void Set_RM_Size			(Entity_Id, Uint);
- extern void Set_Component_Bit_Offset	(Entity_Id, Uint);
  extern void Set_Present_Expr		(Node_Id, Uint);
  
  /* Test if the node N is the name of an entity (i.e. is an identifier,
--- 57,75 ----
     Present_Expr for N_Variant nodes.  */
  
  #define Set_Alignment			einfo__set_alignment
  #define Set_Component_Bit_Offset	einfo__set_component_bit_offset
  #define Set_Component_Size		einfo__set_component_size
+ #define Set_Esize			einfo__set_esize
+ #define Set_Mechanism			einfo__set_mechanism
+ #define Set_RM_Size			einfo__set_rm_size
  #define Set_Present_Expr		sinfo__set_present_expr
  
  extern void Set_Alignment		(Entity_Id, Uint);
+ extern void Set_Component_Bit_Offset	(Entity_Id, Uint);
  extern void Set_Component_Size		(Entity_Id, Uint);
  extern void Set_Esize			(Entity_Id, Uint);
+ extern void Set_Mechanism		(Entity_Id, Mechanism_Type);
  extern void Set_RM_Size			(Entity_Id, Uint);
  extern void Set_Present_Expr		(Node_Id, Uint);
  
  /* Test if the node N is the name of an entity (i.e. is an identifier,
*************** extern void Get_External_Name_With_Suffi
*** 139,148 ****
--- 141,152 ----
  #define Cunit 				lib__cunit
  #define Ident_String			lib__ident_string
  #define In_Extended_Main_Code_Unit	lib__in_extended_main_code_unit
+ #define In_Same_Source_Unit             lib__in_same_source_unit
  
  extern Node_Id Cunit				(Unit_Number_Type);
  extern Node_Id Ident_String			(Unit_Number_Type);
  extern Boolean In_Extended_Main_Code_Unit	(Entity_Id);
+ extern Boolean In_Same_Source_Unit              (Node_Id, Node_Id);
  
  /* opt: */
  
diff -Nrcpad gcc-3.4.3/gcc/ada/fname-sf.adb gcc-4.0.0/gcc/ada/fname-sf.adb
*** gcc-3.4.3/gcc/ada/fname-sf.adb	Thu Apr 24 17:54:01 2003
--- gcc-4.0.0/gcc/ada/fname-sf.adb	Mon Mar 29 12:03:09 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2000 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Fname.SF is
*** 46,52 ****
     -- Local Procedures --
     ----------------------
  
!    procedure Set_File_Name (Typ : Character; U : String; F : String);
     --  This is a transfer function that is called from Scan_SFN_Pragmas,
     --  and reformats its parameters appropriately for the version of
     --  Set_File_Name found in Fname.SF.
--- 46,56 ----
     -- Local Procedures --
     ----------------------
  
!    procedure Set_File_Name
!      (Typ   : Character;
!       U     : String;
!       F     : String;
!       Index : Natural);
     --  This is a transfer function that is called from Scan_SFN_Pragmas,
     --  and reformats its parameters appropriately for the version of
     --  Set_File_Name found in Fname.SF.
*************** package body Fname.SF is
*** 89,98 ****
     -- Set_File_Name --
     -------------------
  
!    procedure Set_File_Name (Typ : Character; U : String; F : String) is
        Unm : Unit_Name_Type;
        Fnm : File_Name_Type;
- 
     begin
        Name_Buffer (1 .. U'Length) := U;
        Name_Len := U'Length;
--- 93,106 ----
     -- Set_File_Name --
     -------------------
  
!    procedure Set_File_Name
!      (Typ   : Character;
!       U     : String;
!       F     : String;
!       Index : Natural)
!    is
        Unm : Unit_Name_Type;
        Fnm : File_Name_Type;
     begin
        Name_Buffer (1 .. U'Length) := U;
        Name_Len := U'Length;
*************** package body Fname.SF is
*** 104,110 ****
        Name_Buffer (1 .. F'Length) := F;
        Name_Len := F'Length;
        Fnm := Name_Find;
!       Fname.UF.Set_File_Name (Unm, Fnm);
     end Set_File_Name;
  
     ---------------------------
--- 112,118 ----
        Name_Buffer (1 .. F'Length) := F;
        Name_Len := F'Length;
        Fnm := Name_Find;
!       Fname.UF.Set_File_Name (Unm, Fnm, Nat (Index));
     end Set_File_Name;
  
     ---------------------------
diff -Nrcpad gcc-3.4.3/gcc/ada/fname-uf.adb gcc-4.0.0/gcc/ada/fname-uf.adb
*** gcc-3.4.3/gcc/ada/fname-uf.adb	Tue Oct 21 13:42:00 2003
--- gcc-4.0.0/gcc/ada/fname-uf.adb	Mon Mar 29 12:03:09 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Namet;    use Namet;
*** 32,37 ****
--- 32,38 ----
  with Opt;      use Opt;
  with Osint;    use Osint;
  with Table;
+ with Uname;    use Uname;
  with Widechar; use Widechar;
  
  with GNAT.HTable;
*************** package body Fname.UF is
*** 43,50 ****
     --------------------------------------------------------
  
     type SFN_Entry is record
!       U : Unit_Name_Type; -- Unit name
!       F : File_Name_Type; -- Spec/Body file name
     end record;
     --  Record single Unit_Name type call to Set_File_Name
  
--- 44,52 ----
     --------------------------------------------------------
  
     type SFN_Entry is record
!       U     : Unit_Name_Type; -- Unit name
!       F     : File_Name_Type; -- Spec/Body file name
!       Index : Nat;            -- Index from SFN pragma (0 if none)
     end record;
     --  Record single Unit_Name type call to Set_File_Name
  
*************** package body Fname.UF is
*** 118,130 ****
        return Get_File_Name (Name_Enter, Subunit => False);
     end File_Name_Of_Spec;
  
     -------------------
     -- Get_File_Name --
     -------------------
  
     function Get_File_Name
!      (Uname   : Unit_Name_Type;
!       Subunit : Boolean) return File_Name_Type
     is
        Unit_Char : Character;
        --  Set to 's' or 'b' for spec or body or to 'u' for a subunit
--- 120,180 ----
        return Get_File_Name (Name_Enter, Subunit => False);
     end File_Name_Of_Spec;
  
+    ----------------------------
+    -- Get_Expected_Unit_Type --
+    ----------------------------
+ 
+    function Get_Expected_Unit_Type
+      (Fname : File_Name_Type) return Expected_Unit_Type
+    is
+    begin
+       --  In syntax checking only mode or in multiple unit per file mode,
+       --  there can be more than one unit in a file, so the file name is
+       --  not a useful guide to the nature of the unit.
+ 
+       if Operating_Mode = Check_Syntax
+         or else Multiple_Unit_Index /= 0
+       then
+          return Unknown;
+       end if;
+ 
+       --  Search the file mapping table, if we find an entry for this
+       --  file we know whether it is a spec or a body.
+ 
+       for J in SFN_Table.First .. SFN_Table.Last loop
+          if Fname = SFN_Table.Table (J).F then
+             if Is_Body_Name (SFN_Table.Table (J).U) then
+                return Expect_Body;
+             else
+                return Expect_Spec;
+             end if;
+          end if;
+       end loop;
+ 
+       --  If no entry in file naming table, assume .ads/.adb for spec/body
+       --  and return unknown if we have neither of these two cases.
+ 
+       Get_Name_String (Fname);
+ 
+       if Name_Len > 4 then
+          if Name_Buffer (Name_Len - 3 .. Name_Len) = ".ads" then
+             return Expect_Spec;
+          elsif Name_Buffer (Name_Len - 3 .. Name_Len) = ".adb" then
+             return Expect_Body;
+          end if;
+       end if;
+ 
+       return Unknown;
+    end Get_Expected_Unit_Type;
+ 
     -------------------
     -- Get_File_Name --
     -------------------
  
     function Get_File_Name
!      (Uname    : Unit_Name_Type;
!       Subunit  : Boolean;
!       May_Fail : Boolean := False) return File_Name_Type
     is
        Unit_Char : Character;
        --  Set to 's' or 'b' for spec or body or to 'u' for a subunit
*************** package body Fname.UF is
*** 386,395 ****
  
                    --  If we are in the second search of the table, we accept
                    --  the file name without checking, because we know that
!                   --  the file does not exist.
  
                    if No_File_Check then
!                      return Fnam;
  
                    --  Otherwise we check if the file exists
  
--- 436,450 ----
  
                    --  If we are in the second search of the table, we accept
                    --  the file name without checking, because we know that
!                   --  the file does not exist, except when May_Fail is True,
!                   --  in which case we return No_File.
  
                    if No_File_Check then
!                      if May_Fail then
!                         return No_File;
!                      else
!                         return Fnam;
!                      end if;
  
                    --  Otherwise we check if the file exists
  
*************** package body Fname.UF is
*** 451,456 ****
--- 506,525 ----
        end;
     end Get_File_Name;
  
+    --------------------
+    -- Get_Unit_Index --
+    --------------------
+ 
+    function Get_Unit_Index (Uname : Unit_Name_Type) return Nat is
+       N : constant Int := SFN_HTable.Get (Uname);
+    begin
+       if N /= No_Entry then
+          return SFN_Table.Table (N).Index;
+       else
+          return 0;
+       end if;
+    end Get_Unit_Index;
+ 
     ----------------
     -- Initialize --
     ----------------
*************** package body Fname.UF is
*** 490,499 ****
     -- Set_File_Name --
     -------------------
  
!    procedure Set_File_Name (U : Unit_Name_Type; F : File_Name_Type) is
     begin
        SFN_Table.Increment_Last;
!       SFN_Table.Table (SFN_Table.Last) := (U, F);
        SFN_HTable.Set (U, SFN_Table.Last);
     end Set_File_Name;
  
--- 559,572 ----
     -- Set_File_Name --
     -------------------
  
!    procedure Set_File_Name
!      (U     : Unit_Name_Type;
!       F     : File_Name_Type;
!       Index : Nat)
!    is
     begin
        SFN_Table.Increment_Last;
!       SFN_Table.Table (SFN_Table.Last) := (U, F, Index);
        SFN_HTable.Set (U, SFN_Table.Last);
     end Set_File_Name;
  
*************** package body Fname.UF is
*** 508,513 ****
--- 581,587 ----
        Cas : Casing_Type)
     is
        L : constant Nat := SFN_Patterns.Last;
+ 
     begin
        SFN_Patterns.Increment_Last;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/fname-uf.ads gcc-4.0.0/gcc/ada/fname-uf.ads
*** gcc-3.4.3/gcc/ada/fname-uf.ads	Tue Oct 21 13:42:00 2003
--- gcc-4.0.0/gcc/ada/fname-uf.ads	Mon Mar 29 12:03:09 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Fname.UF is
*** 43,56 ****
     -- Subprograms --
     -----------------
  
     function Get_File_Name
!      (Uname   : Unit_Name_Type;
!       Subunit : Boolean) return File_Name_Type;
     --  This function returns the file name that corresponds to a given unit
     --  name, Uname. The Subunit parameter is set True for subunits, and
     --  false for all other kinds of units. The caller is responsible for
     --  ensuring that the unit name meets the requirements given in package
     --  Uname and described above.
  
     procedure Initialize;
     --  Initialize internal tables. This is called automatically when the
--- 43,76 ----
     -- Subprograms --
     -----------------
  
+    type Expected_Unit_Type is (Expect_Body, Expect_Spec, Unknown);
+    --  Return value from Get_Expected_Unit_Type
+ 
+    function Get_Expected_Unit_Type
+      (Fname : File_Name_Type) return Expected_Unit_Type;
+    --  If possible, determine whether the given file name corresponds to a unit
+    --  that is a spec or body (e.g. by examining the extension). If this cannot
+    --  be determined with the file naming conventions in use, then the returned
+    --  value is set to Unknown.
+ 
     function Get_File_Name
!      (Uname    : Unit_Name_Type;
!       Subunit  : Boolean;
!       May_Fail : Boolean := False) return File_Name_Type;
     --  This function returns the file name that corresponds to a given unit
     --  name, Uname. The Subunit parameter is set True for subunits, and
     --  false for all other kinds of units. The caller is responsible for
     --  ensuring that the unit name meets the requirements given in package
     --  Uname and described above.
+    --
+    --  When May_Fail is True, if the file cannot be found, this function
+    --  returns No_File. When it is False, if the file cannot be found,
+    --  a file name compatible with one pattern Source_File_Name pragma is
+    --  returned.
+ 
+    function Get_Unit_Index (Uname : Unit_Name_Type) return Nat;
+    --  If there is a specific Source_File_Name pragma for this unit, then
+    --  return the corresponding unit index value. Return 0 if no index given.
  
     procedure Initialize;
     --  Initialize internal tables. This is called automatically when the
*************** package Fname.UF is
*** 71,79 ****
     --  name. The unit name here is not encoded as a Unit_Name_Type, but is
     --  rather just a normal form name in lower case, e.g. "xyz.def".
  
!    procedure Set_File_Name (U : Unit_Name_Type; F : File_Name_Type);
     --  Make association between given unit name, U, and the given file name,
     --  F. This is the routine called to process a Source_File_Name pragma.
  
     procedure Set_File_Name_Pattern
       (Pat : String_Ptr;
--- 91,104 ----
     --  name. The unit name here is not encoded as a Unit_Name_Type, but is
     --  rather just a normal form name in lower case, e.g. "xyz.def".
  
!    procedure Set_File_Name
!      (U     : Unit_Name_Type;
!       F     : File_Name_Type;
!       Index : Nat);
     --  Make association between given unit name, U, and the given file name,
     --  F. This is the routine called to process a Source_File_Name pragma.
+    --  Index is the value from the index parameter of the pragma if present
+    --  and zero if no index parameter is present.
  
     procedure Set_File_Name_Pattern
       (Pat : String_Ptr;
diff -Nrcpad gcc-3.4.3/gcc/ada/fname.adb gcc-4.0.0/gcc/ada/fname.adb
*** gcc-3.4.3/gcc/ada/fname.adb	Tue Oct 21 13:42:00 2003
--- gcc-4.0.0/gcc/ada/fname.adb	Fri Jun 25 16:39:27 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Fname is
*** 59,89 ****
       Table_Initial        => Alloc.SFN_Table_Initial,
       Table_Increment      => Alloc.SFN_Table_Increment,
       Table_Name           => "Fname_Dummy_Table");
-    ----------------------------
-    -- Get_Expected_Unit_Type --
-    ----------------------------
- 
-    --  We assume that a file name whose last character is a lower case b is
-    --  a body and a file name whose last character is a lower case s is a
-    --  spec. If any other character is found (e.g. when we are in syntax
-    --  checking only mode, where the file name conventions are not set),
-    --  then we return Unknown.
- 
-    function Get_Expected_Unit_Type
-      (Fname : File_Name_Type)
-       return  Expected_Unit_Type
-    is
-    begin
-       Get_Name_String (Fname);
- 
-       if Name_Buffer (Name_Len) = 'b' then
-          return Expect_Body;
-       elsif Name_Buffer (Name_Len) = 's' then
-          return Expect_Spec;
-       else
-          return Unknown;
-       end if;
-    end Get_Expected_Unit_Type;
  
     ---------------------------
     -- Is_Internal_File_Name --
--- 59,64 ----
*************** package body Fname is
*** 91,98 ****
  
     function Is_Internal_File_Name
       (Fname              : File_Name_Type;
!       Renamings_Included : Boolean := True)
!       return               Boolean
     is
     begin
        if Is_Predefined_File_Name (Fname, Renamings_Included) then
--- 66,72 ----
  
     function Is_Internal_File_Name
       (Fname              : File_Name_Type;
!       Renamings_Included : Boolean := True) return Boolean
     is
     begin
        if Is_Predefined_File_Name (Fname, Renamings_Included) then
*************** package body Fname is
*** 132,139 ****
  
     function Is_Predefined_File_Name
       (Fname              : File_Name_Type;
!       Renamings_Included : Boolean := True)
!       return               Boolean
     is
     begin
        Get_Name_String (Fname);
--- 106,112 ----
  
     function Is_Predefined_File_Name
       (Fname              : File_Name_Type;
!       Renamings_Included : Boolean := True) return Boolean
     is
     begin
        Get_Name_String (Fname);
*************** package body Fname is
*** 141,148 ****
     end Is_Predefined_File_Name;
  
     function Is_Predefined_File_Name
!      (Renamings_Included : Boolean := True)
!       return               Boolean
     is
        subtype Str8 is String (1 .. 8);
  
--- 114,120 ----
     end Is_Predefined_File_Name;
  
     function Is_Predefined_File_Name
!      (Renamings_Included : Boolean := True) return Boolean
     is
        subtype Str8 is String (1 .. 8);
  
*************** package body Fname is
*** 177,189 ****
        if Name_Len > 8 then
           return False;
  
!       --  Definitely predefined if prefix is a- i- or s-
  
!       elsif Name_Len > 2
          and then Name_Buffer (2) = '-'
!         and then (Name_Buffer (1) = 'a' or else
!                   Name_Buffer (1) = 'i' or else
                    Name_Buffer (1) = 's')
        then
           return True;
        end if;
--- 149,166 ----
        if Name_Len > 8 then
           return False;
  
!       --  Definitely predefined if prefix is a- i- or s- followed by letter
  
!       elsif Name_Len >=  3
          and then Name_Buffer (2) = '-'
!         and then (Name_Buffer (1) = 'a'
!                     or else
!                   Name_Buffer (1) = 'i'
!                     or else
                    Name_Buffer (1) = 's')
+         and then (Name_Buffer (3) in 'a' .. 'z'
+                     or else
+                   Name_Buffer (3) in 'A' .. 'Z')
        then
           return True;
        end if;
diff -Nrcpad gcc-3.4.3/gcc/ada/fname.ads gcc-4.0.0/gcc/ada/fname.ads
*** gcc-3.4.3/gcc/ada/fname.ads	Tue Oct 21 13:42:00 2003
--- gcc-4.0.0/gcc/ada/fname.ads	Mon Mar 29 12:03:09 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Fname is
*** 64,80 ****
     -- Subprograms --
     -----------------
  
-    type Expected_Unit_Type is (Expect_Body, Expect_Spec, Unknown);
-    --  Return value from Get_Expected_Unit_Type
- 
-    function Get_Expected_Unit_Type
-      (Fname : File_Name_Type)
-       return  Expected_Unit_Type;
-    --  If possible, determine whether the given file name corresponds to a unit
-    --  that is a spec or body (e.g. by examining the extension). If this cannot
-    --  be determined with the file naming conventions in use, then the returned
-    --  value is set to Unknown.
- 
     function Is_Predefined_File_Name
       (Fname              : File_Name_Type;
        Renamings_Included : Boolean := True) return Boolean;
--- 64,69 ----
*************** package Fname is
*** 92,99 ****
  
     function Is_Internal_File_Name
       (Fname              : File_Name_Type;
!       Renamings_Included : Boolean := True)
!       return               Boolean;
     --  Similar to Is_Predefined_File_Name. The internal file set is a
     --  superset of the predefined file set including children of GNAT,
     --  and also children of DEC for the VMS case.
--- 81,87 ----
  
     function Is_Internal_File_Name
       (Fname              : File_Name_Type;
!       Renamings_Included : Boolean := True) return Boolean;
     --  Similar to Is_Predefined_File_Name. The internal file set is a
     --  superset of the predefined file set including children of GNAT,
     --  and also children of DEC for the VMS case.
diff -Nrcpad gcc-3.4.3/gcc/ada/freeze.adb gcc-4.0.0/gcc/ada/freeze.adb
*** gcc-3.4.3/gcc/ada/freeze.adb	Mon Jan  5 15:20:44 2004
--- gcc-4.0.0/gcc/ada/freeze.adb	Thu Mar 17 19:53:06 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Nlists;   use Nlists;
*** 40,45 ****
--- 40,46 ----
  with Nmake;    use Nmake;
  with Opt;      use Opt;
  with Restrict; use Restrict;
+ with Rident;   use Rident;
  with Sem;      use Sem;
  with Sem_Cat;  use Sem_Cat;
  with Sem_Ch6;  use Sem_Ch6;
*************** package body Freeze is
*** 163,168 ****
--- 164,174 ----
     --  needed -- see body for details). Never has any effect on T if the
     --  Debug_Info_Off flag is set.
  
+    procedure Undelay_Type (T : Entity_Id);
+    --  T is a type of a component that we know to be an Itype.
+    --  We don't want this to have a Freeze_Node, so ensure it doesn't.
+    --  Do the same for any Full_View or Corresponding_Record_Type.
+ 
     procedure Warn_Overlay
       (Expr : Node_Id;
        Typ  : Entity_Id;
*************** package body Freeze is
*** 505,513 ****
  
     procedure Check_Compile_Time_Size (T : Entity_Id) is
  
!       procedure Set_Small_Size (S : Uint);
        --  Sets the compile time known size (32 bits or less) in the Esize
!       --  field, checking for a size clause that was given which attempts
        --  to give a smaller size.
  
        function Size_Known (T : Entity_Id) return Boolean;
--- 511,519 ----
  
     procedure Check_Compile_Time_Size (T : Entity_Id) is
  
!       procedure Set_Small_Size (T : Entity_Id; S : Uint);
        --  Sets the compile time known size (32 bits or less) in the Esize
!       --  field, of T checking for a size clause that was given which attempts
        --  to give a smaller size.
  
        function Size_Known (T : Entity_Id) return Boolean;
*************** package body Freeze is
*** 524,530 ****
        -- Set_Small_Size --
        --------------------
  
!       procedure Set_Small_Size (S : Uint) is
        begin
           if S > 32 then
              return;
--- 530,536 ----
        -- Set_Small_Size --
        --------------------
  
!       procedure Set_Small_Size (T : Entity_Id; S : Uint) is
        begin
           if S > 32 then
              return;
*************** package body Freeze is
*** 575,581 ****
  
           elsif Is_Array_Type (T) then
              if Ekind (T) = E_String_Literal_Subtype then
!                Set_Small_Size (Component_Size (T) * String_Literal_Length (T));
                 return True;
  
              elsif not Is_Constrained (T) then
--- 581,588 ----
  
           elsif Is_Array_Type (T) then
              if Ekind (T) = E_String_Literal_Subtype then
!                Set_Small_Size (T, Component_Size (T)
!                                * String_Literal_Length (T));
                 return True;
  
              elsif not Is_Constrained (T) then
*************** package body Freeze is
*** 600,606 ****
  
              begin
                 Index := First_Index (T);
- 
                 while Present (Index) loop
                    if Nkind (Index) = N_Range then
                       Get_Index_Bounds (Index, Low, High);
--- 607,612 ----
*************** package body Freeze is
*** 632,638 ****
                    Next_Index (Index);
                 end loop;
  
!                Set_Small_Size (Esiz);
                 return True;
              end;
  
--- 638,644 ----
                    Next_Index (Index);
                 end loop;
  
!                Set_Small_Size (T, Esiz);
                 return True;
              end;
  
*************** package body Freeze is
*** 864,870 ****
                 end loop;
  
                 if Packed_Size_Known then
!                   Set_Small_Size (Packed_Size);
                 end if;
  
                 return True;
--- 870,876 ----
                 end loop;
  
                 if Packed_Size_Known then
!                   Set_Small_Size (T, Packed_Size);
                 end if;
  
                 return True;
*************** package body Freeze is
*** 880,887 ****
        -------------------------------------
  
        function Static_Discriminated_Components
!         (T    : Entity_Id)
!          return Boolean
        is
           Constraint : Elmt_Id;
  
--- 886,892 ----
        -------------------------------------
  
        function Static_Discriminated_Components
!         (T : Entity_Id) return Boolean
        is
           Constraint : Elmt_Id;
  
*************** package body Freeze is
*** 1339,1345 ****
        Result : in out List_Id)
     is
        L : constant List_Id := Freeze_Entity (Ent, Loc);
- 
     begin
        if Is_Non_Empty_List (L) then
           if Result = No_List then
--- 1344,1349 ----
*************** package body Freeze is
*** 1356,1362 ****
  
     procedure Freeze_Before (N : Node_Id; T : Entity_Id) is
        Freeze_Nodes : constant List_Id := Freeze_Entity (T, Sloc (N));
- 
     begin
        if Is_Non_Empty_List (Freeze_Nodes) then
           Insert_Actions (N, Freeze_Nodes);
--- 1360,1365 ----
*************** package body Freeze is
*** 1368,1373 ****
--- 1371,1377 ----
     -------------------
  
     function Freeze_Entity (E : Entity_Id; Loc : Source_Ptr) return List_Id is
+       Test_E : Entity_Id := E;
        Comp   : Entity_Id;
        F_Node : Node_Id;
        Result : List_Id;
*************** package body Freeze is
*** 1463,1468 ****
--- 1467,1473 ----
           IR   : Node_Id;
           Junk : Boolean;
           ADC  : Node_Id;
+          Prev : Entity_Id;
  
           Unplaced_Component : Boolean := False;
           --  Set True if we find at least one component with no component
*************** package body Freeze is
*** 1472,1477 ****
--- 1477,1521 ----
           --  Set True if we find at least one component with a component
           --  clause (used to warn about useless Bit_Order pragmas).
  
+          procedure Check_Itype (Desig : Entity_Id);
+          --  If the component subtype is an access to a constrained subtype
+          --  of an already frozen type, make the subtype frozen as well. It
+          --  might otherwise be frozen in the wrong scope, and a freeze node
+          --  on subtype has no effect.
+ 
+          -----------------
+          -- Check_Itype --
+          -----------------
+ 
+          procedure Check_Itype (Desig : Entity_Id) is
+          begin
+             if not Is_Frozen (Desig)
+               and then Is_Frozen (Base_Type (Desig))
+             then
+                Set_Is_Frozen (Desig);
+ 
+                --  In addition, add an Itype_Reference to ensure that the
+                --  access subtype is elaborated early enough. This cannot
+                --  be done if the subtype may depend on discriminants.
+ 
+                if Ekind (Comp) = E_Component
+                  and then Is_Itype (Etype (Comp))
+                  and then not Has_Discriminants (Rec)
+                then
+                   IR := Make_Itype_Reference (Sloc (Comp));
+                   Set_Itype (IR, Desig);
+ 
+                   if No (Result) then
+                      Result := New_List (IR);
+                   else
+                      Append (IR, Result);
+                   end if;
+                end if;
+             end if;
+          end Check_Itype;
+ 
+       --  Start of processing for Freeze_Record_Type
+ 
        begin
           --  If this is a subtype of a controlled type, declared without
           --  a constraint, the _controller may not appear in the component
*************** package body Freeze is
*** 1486,1496 ****
              then
                 Set_First_Entity (Rec, First_Entity (Base_Type (Rec)));
  
!             --  If this is an internal type without a declaration, as for
!             --  a record component, the base type may not yet be frozen,
!             --  and its controller has not been created. Add an explicit
!             --  freeze node for the itype, so it will be frozen after the
!             --  base type.
  
              elsif Is_Itype (Rec)
                and then Has_Delayed_Freeze (Base_Type (Rec))
--- 1530,1539 ----
              then
                 Set_First_Entity (Rec, First_Entity (Base_Type (Rec)));
  
!             --  If this is an internal type without a declaration, as for a
!             --  record component, the base type may not yet be frozen, and its
!             --  controller has not been created. Add an explicit freeze node
!             --  for the itype, so it will be frozen after the base type.
  
              elsif Is_Itype (Rec)
                and then Has_Delayed_Freeze (Base_Type (Rec))
*************** package body Freeze is
*** 1502,1515 ****
              end if;
           end if;
  
!          --  Freeze components and embedded subtypes
  
           Comp := First_Entity (Rec);
           while Present (Comp) loop
!             if not Is_Type (Comp) then
!                Freeze_And_Append (Etype (Comp), Loc, Result);
              end if;
  
              --  If the component is an access type with an allocator
              --  as default value, the designated type will be frozen
              --  by the corresponding expression in init_proc. In  order
--- 1545,1803 ----
              end if;
           end if;
  
!          --  Freeze components and embedded subtypes.
  
           Comp := First_Entity (Rec);
+          Prev := Empty;
+ 
           while Present (Comp) loop
! 
!             --  First handle the (real) component case.
! 
!             if Ekind (Comp) = E_Component
!               or else Ekind (Comp) = E_Discriminant
!             then
!                declare
!                   CC : constant Node_Id := Component_Clause (Comp);
! 
!                begin
!                   --  Freezing a record type freezes the type of each of its
!                   --  components.  However, if the type of the component is
!                   --  part of this record, we do not want or need a separate
!                   --  Freeze_Node.  Note that Is_Itype is wrong because that's
!                   --  also set in private type cases.  We also can't check
!                   --  for the Scope being exactly Rec because of private types
!                   --  and record extensions.
!                   if Is_Itype (Etype (Comp))
!                     and then Is_Record_Type (Underlying_Type
!                                              (Scope (Etype (Comp))))
!                   then
!                      Undelay_Type (Etype (Comp));
!                   end if;
! 
!                   Freeze_And_Append (Etype (Comp), Loc, Result);
! 
!                   --  Check for error of component clause given for variable
!                   --  sized type. We have to delay this test till this point,
!                   --  since the component type has to be frozen for us to know
!                   --  if it is variable length. We omit this test in a generic
!                   --  context, it will be applied at instantiation time.
! 
!                   if Present (CC) then
!                      Placed_Component := True;
! 
!                      if Inside_A_Generic then
!                         null;
! 
!                      elsif not Size_Known_At_Compile_Time
!                               (Underlying_Type (Etype (Comp)))
!                      then
!                         Error_Msg_N
!                           ("component clause not allowed for variable " &
!                            "length component", CC);
!                      end if;
! 
!                   else
!                      Unplaced_Component := True;
!                   end if;
! 
!                   --  Case of component requires byte alignment
! 
!                   if Must_Be_On_Byte_Boundary (Etype (Comp)) then
! 
!                      --  Set the enclosing record to also require byte align
! 
!                      Set_Must_Be_On_Byte_Boundary (Rec);
! 
!                      --  Check for component clause that is inconsistent
!                      --  with the required byte boundary alignment.
! 
!                      if Present (CC)
!                        and then Normalized_First_Bit (Comp) mod
!                                   System_Storage_Unit /= 0
!                      then
!                         Error_Msg_N
!                           ("component & must be byte aligned",
!                            Component_Name (Component_Clause (Comp)));
!                      end if;
!                   end if;
! 
!                   --  If component clause is present, then deal with the
!                   --  non-default bit order case. We cannot do this before
!                   --  the freeze point, because there is no required order
!                   --  for the component clause and the bit_order clause.
! 
!                   --  We only do this processing for the base type, and in
!                   --  fact that's important, since otherwise if there are
!                   --  record subtypes, we could reverse the bits once for
!                   --  each subtype, which would be incorrect.
! 
!                   if Present (CC)
!                     and then Reverse_Bit_Order (Rec)
!                     and then Ekind (E) = E_Record_Type
!                   then
!                      declare
!                         CFB : constant Uint    := Component_Bit_Offset (Comp);
!                         CSZ : constant Uint    := Esize (Comp);
!                         CLC : constant Node_Id := Component_Clause (Comp);
!                         Pos : constant Node_Id := Position (CLC);
!                         FB  : constant Node_Id := First_Bit (CLC);
! 
!                         Storage_Unit_Offset : constant Uint :=
!                                                 CFB / System_Storage_Unit;
! 
!                         Start_Bit : constant Uint :=
!                                       CFB mod System_Storage_Unit;
! 
!                      begin
!                         --  Cases where field goes over storage unit boundary
! 
!                         if Start_Bit + CSZ > System_Storage_Unit then
! 
!                            --  Allow multi-byte field but generate warning
! 
!                            if Start_Bit mod System_Storage_Unit = 0
!                              and then CSZ mod System_Storage_Unit = 0
!                            then
!                               Error_Msg_N
!                                 ("multi-byte field specified with non-standard"
!                                  & " Bit_Order?", CLC);
! 
!                               if Bytes_Big_Endian then
!                                  Error_Msg_N
!                                    ("bytes are not reversed "
!                                     & "(component is big-endian)?", CLC);
!                               else
!                                  Error_Msg_N
!                                    ("bytes are not reversed "
!                                     & "(component is little-endian)?", CLC);
!                               end if;
! 
!                               --  Do not allow non-contiguous field
! 
!                            else
!                               Error_Msg_N
!                                 ("attempt to specify non-contiguous field"
!                                  & " not permitted", CLC);
!                               Error_Msg_N
!                                 ("\(caused by non-standard Bit_Order "
!                                  & "specified)", CLC);
!                            end if;
! 
!                            --  Case where field fits in one storage unit
! 
!                         else
!                            --  Give warning if suspicious component clause
! 
!                            if Intval (FB) >= System_Storage_Unit then
!                               Error_Msg_N
!                                 ("?Bit_Order clause does not affect " &
!                                  "byte ordering", Pos);
!                               Error_Msg_Uint_1 :=
!                                 Intval (Pos) + Intval (FB) /
!                                   System_Storage_Unit;
!                               Error_Msg_N
!                                 ("?position normalized to ^ before bit " &
!                                  "order interpreted", Pos);
!                            end if;
! 
!                            --  Here is where we fix up the Component_Bit_Offset
!                            --  value to account for the reverse bit order.
!                            --  Some examples of what needs to be done are:
! 
!                            --    First_Bit .. Last_Bit     Component_Bit_Offset
!                            --      old          new          old       new
! 
!                            --     0 .. 0       7 .. 7         0         7
!                            --     0 .. 1       6 .. 7         0         6
!                            --     0 .. 2       5 .. 7         0         5
!                            --     0 .. 7       0 .. 7         0         4
! 
!                            --     1 .. 1       6 .. 6         1         6
!                            --     1 .. 4       3 .. 6         1         3
!                            --     4 .. 7       0 .. 3         4         0
! 
!                            --  The general rule is that the first bit is
!                            --  is obtained by subtracting the old ending bit
!                            --  from storage_unit - 1.
! 
!                            Set_Component_Bit_Offset
!                              (Comp,
!                               (Storage_Unit_Offset * System_Storage_Unit) +
!                                 (System_Storage_Unit - 1) -
!                                   (Start_Bit + CSZ - 1));
! 
!                            Set_Normalized_First_Bit
!                              (Comp,
!                                 Component_Bit_Offset (Comp) mod
!                                   System_Storage_Unit);
!                         end if;
!                      end;
!                   end if;
!                end;
              end if;
  
+             --  If the component is an Itype with Delayed_Freeze and is
+             --  either a record or array subtype and its base type has not
+             --  yet been frozen, we must remove this from the entity list
+             --  of this record and put it on the entity list of the scope of
+             --  its base type.  Note that we know that this is not the type
+             --  of a component since we cleared Has_Delayed_Freeze for it
+             --  in the previous loop.  Thus this must be the Designated_Type
+             --  of an access type, which is the type of a component.
+             if Is_Itype (Comp)
+               and then Is_Type (Scope (Comp))
+               and then Is_Composite_Type (Comp)
+               and then Base_Type (Comp) /= Comp
+               and then Has_Delayed_Freeze (Comp)
+               and then not Is_Frozen (Base_Type (Comp))
+             then
+                declare
+                   Will_Be_Frozen : Boolean := False;
+                   S : Entity_Id := Scope (Rec);
+ 
+                begin
+                   --  We have a pretty bad kludge here.  Suppose Rec is a
+                   --  subtype being defined in a subprogram that's created
+                   --  as part of the freezing of Rec'Base.  In that case,
+                   --  we know that Comp'Base must have already been frozen by
+                   --  the time we get to elaborate this because Gigi doesn't
+                   --  elaborate any bodies until it has elaborated all of the
+                   --  declarative part.  But Is_Frozen will not be  set at this
+                   --  point because we are processing code in lexical order.
+ 
+                   --  We detect this case by going up the Scope chain of
+                   --  Rec and seeing if we have a subprogram scope before
+                   --  reaching the top of the scope chain or that of Comp'Base.
+                   --  If we do, then mark that Comp'Base will actually be
+                   --  frozen.  If so, we merely undelay it.
+                   while Present (S) loop
+                      if Is_Subprogram (S) then
+                         Will_Be_Frozen := True;
+                         exit;
+                      elsif S = Scope (Base_Type (Comp)) then
+                         exit;
+                      end if;
+ 
+                      S := Scope (S);
+                   end loop;
+ 
+                   if Will_Be_Frozen then
+                      Undelay_Type (Comp);
+                   else
+                      if Present (Prev) then
+                         Set_Next_Entity (Prev, Next_Entity (Comp));
+                      else
+                         Set_First_Entity (Rec, Next_Entity (Comp));
+                      end if;
+ 
+                      --  Insert in entity list of scope of base type (which
+                      --  must be an enclosing scope, because still unfrozen).
+ 
+                      Append_Entity (Comp, Scope (Base_Type (Comp)));
+                   end if;
+                end;
+ 
              --  If the component is an access type with an allocator
              --  as default value, the designated type will be frozen
              --  by the corresponding expression in init_proc. In  order
*************** package body Freeze is
*** 1521,1527 ****
              --  private, it cannot contain allocators, and it is premature
              --  to freeze the type, so we check for this as well.
  
!             if Is_Access_Type (Etype (Comp))
                and then Present (Parent (Comp))
                and then Present (Expression (Parent (Comp)))
                and then Nkind (Expression (Parent (Comp))) = N_Allocator
--- 1809,1815 ----
              --  private, it cannot contain allocators, and it is premature
              --  to freeze the type, so we check for this as well.
  
!             elsif Is_Access_Type (Etype (Comp))
                and then Present (Parent (Comp))
                and then Present (Expression (Parent (Comp)))
                and then Nkind (Expression (Parent (Comp))) = N_Allocator
*************** package body Freeze is
*** 1547,1586 ****
                             Loc, Result);
                       end if;
  
                    else
                       Freeze_And_Append
                         (Designated_Type (Etype (Comp)), Loc, Result);
                    end if;
                 end;
  
-             --  If this is a constrained subtype of an already frozen type,
-             --  make the subtype frozen as well. It might otherwise be frozen
-             --  in the wrong scope, and a freeze node on subtype has no effect.
- 
              elsif Is_Access_Type (Etype (Comp))
-               and then not Is_Frozen (Designated_Type (Etype (Comp)))
                and then Is_Itype (Designated_Type (Etype (Comp)))
-               and then Is_Frozen (Base_Type (Designated_Type (Etype (Comp))))
              then
!                Set_Is_Frozen (Designated_Type (Etype (Comp)));
! 
!                --  In addition, add an Itype_Reference to ensure that the
!                --  access subtype is elaborated early enough. This cannot
!                --  be done if the subtype may depend on discriminants.
! 
!                if Ekind (Comp) = E_Component
!                  and then Is_Itype (Etype (Comp))
!                  and then not Has_Discriminants (Rec)
!                then
!                   IR := Make_Itype_Reference (Sloc (Comp));
!                   Set_Itype (IR, Designated_Type (Etype (Comp)));
! 
!                   if No (Result) then
!                      Result := New_List (IR);
!                   else
!                      Append (IR, Result);
!                   end if;
!                end if;
  
              elsif Is_Array_Type (Etype (Comp))
                and then Is_Access_Type (Component_Type (Etype (Comp)))
--- 1835,1853 ----
                             Loc, Result);
                       end if;
  
+                   elsif Is_Itype (Designated_Type (Etype (Comp))) then
+                      Check_Itype (Designated_Type (Etype (Comp)));
+ 
                    else
                       Freeze_And_Append
                         (Designated_Type (Etype (Comp)), Loc, Result);
                    end if;
                 end;
  
              elsif Is_Access_Type (Etype (Comp))
                and then Is_Itype (Designated_Type (Etype (Comp)))
              then
!                Check_Itype (Designated_Type (Etype (Comp)));
  
              elsif Is_Array_Type (Etype (Comp))
                and then Is_Access_Type (Component_Type (Etype (Comp)))
*************** package body Freeze is
*** 1596,1745 ****
                     (Component_Type (Etype (Comp))), Loc, Result);
              end if;
  
!             --  Processing for real components (exclude anonymous subtypes)
! 
!             if Ekind (Comp) = E_Component
!               or else Ekind (Comp) = E_Discriminant
!             then
!                --  Check for error of component clause given for variable
!                --  sized type. We have to delay this test till this point,
!                --  since the component type has to be frozen for us to know
!                --  if it is variable length. We omit this test in a generic
!                --  context, it will be applied at instantiation time.
! 
!                declare
!                   CC : constant Node_Id := Component_Clause (Comp);
! 
!                begin
!                   if Present (CC) then
!                      Placed_Component := True;
! 
!                      if Inside_A_Generic then
!                         null;
! 
!                      elsif not Size_Known_At_Compile_Time
!                               (Underlying_Type (Etype (Comp)))
!                      then
!                         Error_Msg_N
!                           ("component clause not allowed for variable " &
!                            "length component", CC);
!                      end if;
! 
!                   else
!                      Unplaced_Component := True;
!                   end if;
!                end;
! 
!                --  If component clause is present, then deal with the
!                --  non-default bit order case. We cannot do this before
!                --  the freeze point, because there is no required order
!                --  for the component clause and the bit_order clause.
! 
!                --  We only do this processing for the base type, and in
!                --  fact that's important, since otherwise if there are
!                --  record subtypes, we could reverse the bits once for
!                --  each subtype, which would be incorrect.
! 
!                if Present (Component_Clause (Comp))
!                  and then Reverse_Bit_Order (Rec)
!                  and then Ekind (E) = E_Record_Type
!                then
!                   declare
!                      CFB : constant Uint    := Component_Bit_Offset (Comp);
!                      CSZ : constant Uint    := Esize (Comp);
!                      CLC : constant Node_Id := Component_Clause (Comp);
!                      Pos : constant Node_Id := Position (CLC);
!                      FB  : constant Node_Id := First_Bit (CLC);
! 
!                      Storage_Unit_Offset : constant Uint :=
!                                              CFB / System_Storage_Unit;
! 
!                      Start_Bit : constant Uint :=
!                                    CFB mod System_Storage_Unit;
! 
!                   begin
!                      --  Cases where field goes over storage unit boundary
! 
!                      if Start_Bit + CSZ > System_Storage_Unit then
! 
!                         --  Allow multi-byte field but generate warning
! 
!                         if Start_Bit mod System_Storage_Unit = 0
!                           and then CSZ mod System_Storage_Unit = 0
!                         then
!                            Error_Msg_N
!                              ("multi-byte field specified with non-standard"
!                                 & " Bit_Order?", CLC);
! 
!                            if Bytes_Big_Endian then
!                               Error_Msg_N
!                                 ("bytes are not reversed "
!                                    & "(component is big-endian)?", CLC);
!                            else
!                               Error_Msg_N
!                                 ("bytes are not reversed "
!                                    & "(component is little-endian)?", CLC);
!                            end if;
! 
!                         --  Do not allow non-contiguous field
! 
!                         else
!                            Error_Msg_N
!                              ("attempt to specify non-contiguous field"
!                                 & " not permitted", CLC);
!                            Error_Msg_N
!                              ("\(caused by non-standard Bit_Order "
!                                 & "specified)", CLC);
!                         end if;
! 
!                      --  Case where field fits in one storage unit
! 
!                      else
!                         --  Give warning if suspicious component clause
! 
!                         if Intval (FB) >= System_Storage_Unit then
!                            Error_Msg_N
!                              ("?Bit_Order clause does not affect " &
!                               "byte ordering", Pos);
!                            Error_Msg_Uint_1 :=
!                              Intval (Pos) + Intval (FB) / System_Storage_Unit;
!                            Error_Msg_N
!                              ("?position normalized to ^ before bit " &
!                               "order interpreted", Pos);
!                         end if;
! 
!                         --  Here is where we fix up the Component_Bit_Offset
!                         --  value to account for the reverse bit order.
!                         --  Some examples of what needs to be done are:
! 
!                         --    First_Bit .. Last_Bit     Component_Bit_Offset
!                         --      old          new          old       new
! 
!                         --     0 .. 0       7 .. 7         0         7
!                         --     0 .. 1       6 .. 7         0         6
!                         --     0 .. 2       5 .. 7         0         5
!                         --     0 .. 7       0 .. 7         0         4
! 
!                         --     1 .. 1       6 .. 6         1         6
!                         --     1 .. 4       3 .. 6         1         3
!                         --     4 .. 7       0 .. 3         4         0
! 
!                         --  The general rule is that the first bit is
!                         --  is obtained by subtracting the old ending bit
!                         --  from storage_unit - 1.
! 
!                         Set_Component_Bit_Offset (Comp,
!                           (Storage_Unit_Offset * System_Storage_Unit)
!                           + (System_Storage_Unit - 1)
!                           - (Start_Bit + CSZ - 1));
! 
!                         Set_Normalized_First_Bit (Comp,
!                           Component_Bit_Offset (Comp) mod System_Storage_Unit);
!                      end if;
!                   end;
!                end if;
!             end if;
! 
              Next_Entity (Comp);
           end loop;
  
--- 1863,1869 ----
                     (Component_Type (Etype (Comp))), Loc, Result);
              end if;
  
!             Prev := Comp;
              Next_Entity (Comp);
           end loop;
  
*************** package body Freeze is
*** 1843,1848 ****
--- 1967,1983 ----
     --  Start of processing for Freeze_Entity
  
     begin
+       --  We are going to test for various reasons why this entity need
+       --  not be frozen here, but in the case of an Itype that's defined
+       --  within a record, that test actually applies to the record.
+       if Is_Itype (E) and then Is_Record_Type (Scope (E)) then
+          Test_E := Scope (E);
+       elsif Is_Itype (E) and then Present (Underlying_Type (Scope (E)))
+         and then Is_Record_Type (Underlying_Type (Scope (E)))
+       then
+          Test_E := Underlying_Type (Scope (E));
+       end if;
+ 
        --  Do not freeze if already frozen since we only need one freeze node
  
        if Is_Frozen (E) then
*************** package body Freeze is
*** 1850,1861 ****
  
        --  It is improper to freeze an external entity within a generic
        --  because its freeze node will appear in a non-valid context.
!       --  ??? We should probably freeze the entity at that point and insert
!       --  the freeze node in a proper place but this proper place is not
!       --  easy to find, and the proper scope is not easy to restore. For
!       --  now, just wait to get out of the generic to freeze ???
  
!       elsif Inside_A_Generic and then External_Ref_In_Generic (E) then
           return No_List;
  
        --  Do not freeze a global entity within an inner scope created during
--- 1985,1994 ----
  
        --  It is improper to freeze an external entity within a generic
        --  because its freeze node will appear in a non-valid context.
!       --  The entity will be frozen in the proper scope after the current
!       --  generic is analyzed.
  
!       elsif Inside_A_Generic and then External_Ref_In_Generic (Test_E) then
           return No_List;
  
        --  Do not freeze a global entity within an inner scope created during
*************** package body Freeze is
*** 1869,1877 ****
        --  comes from source, or is a generic instance, then the freeze point
        --  is the one mandated by the language. and we freze the entity.
  
!       elsif In_Open_Scopes (Scope (E))
!         and then Scope (E) /= Current_Scope
!         and then Ekind (E) /= E_Constant
        then
           declare
              S : Entity_Id := Current_Scope;
--- 2002,2010 ----
        --  comes from source, or is a generic instance, then the freeze point
        --  is the one mandated by the language. and we freze the entity.
  
!       elsif In_Open_Scopes (Scope (Test_E))
!         and then Scope (Test_E) /= Current_Scope
!         and then Ekind (Test_E) /= E_Constant
        then
           declare
              S : Entity_Id := Current_Scope;
*************** package body Freeze is
*** 1891,1896 ****
--- 2024,2058 ----
                 S := Scope (S);
              end loop;
           end;
+ 
+       --  Similarly, an inlined instance body may make reference to global
+       --  entities, but these references cannot be the proper freezing point
+       --  for them, and the the absence of inlining freezing will take place
+       --  in their own scope. Normally instance bodies are analyzed after
+       --  the enclosing compilation, and everything has been frozen at the
+       --  proper place, but with front-end inlining an instance body is
+       --  compiled before the end of the enclosing scope, and as a result
+       --  out-of-order freezing must be prevented.
+ 
+       elsif Front_End_Inlining
+         and then  In_Instance_Body
+         and then Present (Scope (Test_E))
+       then
+          declare
+             S : Entity_Id := Scope (Test_E);
+          begin
+             while Present (S) loop
+                if Is_Generic_Instance (S) then
+                   exit;
+                else
+                   S := Scope (S);
+                end if;
+             end loop;
+ 
+             if No (S) then
+                return No_List;
+             end if;
+          end;
        end if;
  
        --  Here to freeze the entity
*************** package body Freeze is
*** 1958,1964 ****
           if Is_Subprogram (E) then
              if not Is_Internal (E) then
                 declare
!                   F_Type : Entity_Id;
  
                    function Is_Fat_C_Ptr_Type (T : Entity_Id) return Boolean;
                    --  Determines if given type entity is a fat pointer type
--- 2120,2127 ----
           if Is_Subprogram (E) then
              if not Is_Internal (E) then
                 declare
!                   F_Type    : Entity_Id;
!                   Warn_Node : Node_Id;
  
                    function Is_Fat_C_Ptr_Type (T : Entity_Id) return Boolean;
                    --  Determines if given type entity is a fat pointer type
*************** package body Freeze is
*** 1982,1988 ****
                    --  Loop through formals
  
                    Formal := First_Formal (E);
- 
                    while Present (Formal) loop
                       F_Type := Etype (Formal);
                       Freeze_And_Append (F_Type, Loc, Result);
--- 2145,2150 ----
*************** package body Freeze is
*** 2036,2047 ****
                         and then Warn_On_Export_Import
                       then
                          Error_Msg_Qual_Level := 1;
!                         Error_Msg_N
                            ("?type of argument& is unconstrained array",
!                            Formal);
!                         Error_Msg_N
                            ("?foreign caller must pass bounds explicitly",
!                            Formal);
                          Error_Msg_Qual_Level := 0;
                       end if;
  
--- 2198,2227 ----
                         and then Warn_On_Export_Import
                       then
                          Error_Msg_Qual_Level := 1;
! 
!                         --  If this is an inherited operation, place the
!                         --  warning on the derived type declaration, rather
!                         --  than on the original subprogram.
! 
!                         if Nkind (Original_Node (Parent (E))) =
!                           N_Full_Type_Declaration
!                         then
!                            Warn_Node := Parent (E);
! 
!                            if Formal = First_Formal (E) then
!                               Error_Msg_NE
!                                 ("?in inherited operation&!", Warn_Node, E);
!                            end if;
!                         else
!                            Warn_Node := Formal;
!                         end if;
! 
!                         Error_Msg_NE
                            ("?type of argument& is unconstrained array",
!                            Warn_Node, Formal);
!                         Error_Msg_NE
                            ("?foreign caller must pass bounds explicitly",
!                            Warn_Node, Formal);
                          Error_Msg_Qual_Level := 0;
                       end if;
  
*************** package body Freeze is
*** 2107,2120 ****
                 Freeze_And_Append (Etype (E), Loc, Result);
              end if;
  
!             --  For object created by object declaration, perform required
!             --  categorization (preelaborate and pure) checks. Defer these
!             --  checks to freeze time since pragma Import inhibits default
!             --  initialization and thus pragma Import affects these checks.
  
              if Nkind (Declaration_Node (E)) = N_Object_Declaration then
                 Validate_Object_Declaration (Declaration_Node (E));
                 Check_Address_Clause (E);
              end if;
  
              --  Check that a constant which has a pragma Volatile[_Components]
--- 2287,2321 ----
                 Freeze_And_Append (Etype (E), Loc, Result);
              end if;
  
!             --  Special processing for objects created by object declaration
  
              if Nkind (Declaration_Node (E)) = N_Object_Declaration then
+ 
+                --  For object created by object declaration, perform required
+                --  categorization (preelaborate and pure) checks. Defer these
+                --  checks to freeze time since pragma Import inhibits default
+                --  initialization and thus pragma Import affects these checks.
+ 
                 Validate_Object_Declaration (Declaration_Node (E));
+ 
+                --  If there is an address clause, check it is valid
+ 
                 Check_Address_Clause (E);
+ 
+                --  For imported objects, set Is_Public unless there is also
+                --  an address clause, which means that there is no external
+                --  symbol needed for the Import (Is_Public may still be set
+                --  for other unrelated reasons). Note that we delayed this
+                --  processing till freeze time so that we can be sure not
+                --  to set the flag if there is an address clause. If there
+                --  is such a clause, then the only purpose of the import
+                --  pragma is to suppress implicit initialization.
+ 
+                if Is_Imported (E)
+                  and then not Present (Address_Clause (E))
+                then
+                   Set_Is_Public (E);
+                end if;
              end if;
  
              --  Check that a constant which has a pragma Volatile[_Components]
*************** package body Freeze is
*** 2130,2146 ****
                 --  inherited the indication from elsewhere (e.g. an address
                 --  clause, which is not good enough in RM terms!)
  
!                if Present (Get_Rep_Pragma (E, Name_Atomic))
                      or else
!                   Present (Get_Rep_Pragma (E, Name_Atomic_Components))
                 then
                    Error_Msg_N
                      ("stand alone atomic constant must be " &
                       "imported ('R'M 'C.6(13))", E);
  
!                elsif Present (Get_Rep_Pragma (E, Name_Volatile))
                         or else
!                      Present (Get_Rep_Pragma (E, Name_Volatile_Components))
                 then
                    Error_Msg_N
                      ("stand alone volatile constant must be " &
--- 2331,2347 ----
                 --  inherited the indication from elsewhere (e.g. an address
                 --  clause, which is not good enough in RM terms!)
  
!                if Has_Rep_Pragma (E, Name_Atomic)
                      or else
!                   Has_Rep_Pragma (E, Name_Atomic_Components)
                 then
                    Error_Msg_N
                      ("stand alone atomic constant must be " &
                       "imported ('R'M 'C.6(13))", E);
  
!                elsif Has_Rep_Pragma (E, Name_Volatile)
                         or else
!                      Has_Rep_Pragma (E, Name_Volatile_Components)
                 then
                    Error_Msg_N
                      ("stand alone volatile constant must be " &
*************** package body Freeze is
*** 2480,2506 ****
                    Set_Has_Non_Standard_Rep (Base_Type (E));
                    Set_Is_Packed            (Base_Type (E));
                 end if;
-             end;
  
!             Set_Component_Alignment_If_Not_Set (E);
  
!             --  If the array is packed, we must create the packed array
!             --  type to be used to actually implement the type. This is
!             --  only needed for real array types (not for string literal
!             --  types, since they are present only for the front end).
  
!             if Is_Packed (E)
!               and then Ekind (E) /= E_String_Literal_Subtype
!             then
!                Create_Packed_Array_Type (E);
!                Freeze_And_Append (Packed_Array_Type (E), Loc, Result);
  
!                --  Size information of packed array type is copied to the
!                --  array type, since this is really the representation.
  
!                Set_Size_Info (E, Packed_Array_Type (E));
!                Set_RM_Size   (E, RM_Size (Packed_Array_Type (E)));
!             end if;
  
           --  For a class-wide type, the corresponding specific type is
           --  frozen as well (RM 13.14(15))
--- 2681,2723 ----
                    Set_Has_Non_Standard_Rep (Base_Type (E));
                    Set_Is_Packed            (Base_Type (E));
                 end if;
  
!                Set_Component_Alignment_If_Not_Set (E);
  
!                --  If the array is packed, we must create the packed array
!                --  type to be used to actually implement the type. This is
!                --  only needed for real array types (not for string literal
!                --  types, since they are present only for the front end).
  
!                if Is_Packed (E)
!                  and then Ekind (E) /= E_String_Literal_Subtype
!                then
!                   Create_Packed_Array_Type (E);
!                   Freeze_And_Append (Packed_Array_Type (E), Loc, Result);
  
!                   --  Size information of packed array type is copied to the
!                   --  array type, since this is really the representation.
  
!                   Set_Size_Info (E, Packed_Array_Type (E));
!                   Set_RM_Size   (E, RM_Size (Packed_Array_Type (E)));
!                end if;
! 
!                --  For non-packed arrays set the alignment of the array
!                --  to the alignment of the component type if it is unknown.
!                --  Skip this in the atomic case, since atomic arrays may
!                --  need larger alignments.
! 
!                if not Is_Packed (E)
!                  and then Unknown_Alignment (E)
!                  and then Known_Alignment (Ctyp)
!                  and then Known_Static_Component_Size (E)
!                  and then Known_Static_Esize (Ctyp)
!                  and then Esize (Ctyp) = Component_Size (E)
!                  and then not Is_Atomic (E)
!                then
!                   Set_Alignment (E, Alignment (Component_Type (E)));
!                end if;
!             end;
  
           --  For a class-wide type, the corresponding specific type is
           --  frozen as well (RM 13.14(15))
*************** package body Freeze is
*** 2573,2578 ****
--- 2790,2801 ----
                    Freeze_And_Append (Comp, Loc, Result);
  
                 elsif (Ekind (Comp)) /= E_Function then
+                   if Is_Itype (Etype (Comp))
+                     and then Underlying_Type (Scope (Etype (Comp))) = E
+                   then
+                      Undelay_Type (Etype (Comp));
+                   end if;
+ 
                    Freeze_And_Append (Etype (Comp), Loc, Result);
                 end if;
  
*************** package body Freeze is
*** 2783,2848 ****
              Check_Restriction (No_Standard_Storage_Pools, E);
           end if;
  
-          --  If the current entity is an array or record subtype and has
-          --  discriminants used to constrain it, it must not freeze, because
-          --  Freeze_Entity nodes force Gigi to process the frozen type.
- 
           if Is_Composite_Type (E) then
  
-             if Is_Array_Type (E) then
-                declare
-                   Index : Node_Id := First_Index (E);
-                   Expr1 : Node_Id;
-                   Expr2 : Node_Id;
- 
-                begin
-                   while Present (Index) loop
-                      if Etype (Index) /= Any_Type then
-                         Get_Index_Bounds (Index, Expr1, Expr2);
- 
-                         for J in 1 .. 2 loop
-                            if Nkind (Expr1) = N_Identifier
-                              and then Ekind (Entity (Expr1)) = E_Discriminant
-                            then
-                               Set_Has_Delayed_Freeze (E, False);
-                               Set_Freeze_Node (E, Empty);
-                               Check_Debug_Info_Needed (E);
-                               return Result;
-                            end if;
- 
-                            Expr1 := Expr2;
-                         end loop;
-                      end if;
- 
-                      Next_Index (Index);
-                   end loop;
-                end;
- 
-             elsif Has_Discriminants (E)
-               and Is_Constrained (E)
-             then
-                declare
-                   Constraint : Elmt_Id;
-                   Expr       : Node_Id;
- 
-                begin
-                   Constraint := First_Elmt (Discriminant_Constraint (E));
-                   while Present (Constraint) loop
-                      Expr := Node (Constraint);
-                      if Nkind (Expr) = N_Identifier
-                        and then Ekind (Entity (Expr)) = E_Discriminant
-                      then
-                         Set_Has_Delayed_Freeze (E, False);
-                         Set_Freeze_Node (E, Empty);
-                         Check_Debug_Info_Needed (E);
-                         return Result;
-                      end if;
- 
-                      Next_Elmt (Constraint);
-                   end loop;
-                end;
-             end if;
- 
              --  AI-117 requires that all new primitives of a tagged type
              --  must inherit the convention of the full view of the type.
              --  Inherited and overriding operations are defined to inherit
--- 3006,3013 ----
*************** package body Freeze is
*** 2944,2950 ****
           --  in particular the size and alignment values. This processing is
           --  not required for generic types, since generic types do not play
           --  any part in code generation, and so the size and alignment values
!          --  for suhc types are irrelevant.
  
           if Is_Generic_Type (E) then
              return Result;
--- 3109,3115 ----
           --  in particular the size and alignment values. This processing is
           --  not required for generic types, since generic types do not play
           --  any part in code generation, and so the size and alignment values
!          --  for such types are irrelevant.
  
           if Is_Generic_Type (E) then
              return Result;
*************** package body Freeze is
*** 2988,2993 ****
--- 3153,3196 ----
           else
              Append (F_Node, Result);
           end if;
+ 
+          --  A final pass over record types with discriminants. If the type
+          --  has an incomplete declaration, there may be constrained access
+          --  subtypes declared elsewhere, which do not depend on the discrimi-
+          --  nants of the type, and which are used as component types (i.e.
+          --  the full view is a recursive type). The designated types of these
+          --  subtypes can only be elaborated after the type itself, and they
+          --  need an itype reference.
+ 
+          if Ekind (E) = E_Record_Type
+            and then Has_Discriminants (E)
+          then
+             declare
+                Comp : Entity_Id;
+                IR   : Node_Id;
+                Typ  : Entity_Id;
+ 
+             begin
+                Comp := First_Component (E);
+ 
+                while Present (Comp) loop
+                   Typ  := Etype (Comp);
+ 
+                   if Ekind (Comp) = E_Component
+                     and then Is_Access_Type (Typ)
+                     and then Scope (Typ) /= E
+                     and then Base_Type (Designated_Type (Typ)) = E
+                     and then Is_Itype (Designated_Type (Typ))
+                   then
+                      IR := Make_Itype_Reference (Sloc (Comp));
+                      Set_Itype (IR, Designated_Type (Typ));
+                      Append (IR, Result);
+                   end if;
+ 
+                   Next_Component (Comp);
+                end loop;
+             end;
+          end if;
        end if;
  
        --  When a type is frozen, the first subtype of the type is frozen as
*************** package body Freeze is
*** 3565,3570 ****
--- 3768,3777 ----
        --  Returns size of type with given bounds. Also leaves these
        --  bounds set as the current bounds of the Typ.
  
+       -----------
+       -- Fsize --
+       -----------
+ 
        function Fsize (Lov, Hiv : Ureal) return Nat is
        begin
           Set_Realval (Lo, Lov);
*************** package body Freeze is
*** 3572,3578 ****
           return Minimum_Size (Typ);
        end Fsize;
  
!    --  Start of processing for Freeze_Fixed_Point_Type;
  
     begin
        --  If Esize of a subtype has not previously been set, set it now
--- 3779,3785 ----
           return Minimum_Size (Typ);
        end Fsize;
  
!    --  Start of processing for Freeze_Fixed_Point_Type
  
     begin
        --  If Esize of a subtype has not previously been set, set it now
*************** package body Freeze is
*** 4133,4139 ****
        Ensure_Type_Is_SA (Etype (E));
  
        --  Reset True_Constant flag, since something strange is going on
!       --  with the scoping here, and our simple value traceing may not
        --  be sufficient for this indication to be reliable. We kill the
        --  Constant_Value indication for the same reason.
  
--- 4340,4346 ----
        Ensure_Type_Is_SA (Etype (E));
  
        --  Reset True_Constant flag, since something strange is going on
!       --  with the scoping here, and our simple value tracing may not
        --  be sufficient for this indication to be reliable. We kill the
        --  Constant_Value indication for the same reason.
  
*************** package body Freeze is
*** 4294,4302 ****
        end if;
     end Freeze_Subprogram;
  
!    -----------------------
!    --  Is_Fully_Defined --
!    -----------------------
  
     function Is_Fully_Defined (T : Entity_Id) return Boolean is
     begin
--- 4501,4509 ----
        end if;
     end Freeze_Subprogram;
  
!    ----------------------
!    -- Is_Fully_Defined --
!    ----------------------
  
     function Is_Fully_Defined (T : Entity_Id) return Boolean is
     begin
*************** package body Freeze is
*** 4565,4570 ****
--- 4772,4815 ----
     end Set_Debug_Info_Needed;
  
     ------------------
+    -- Undelay_Type --
+    ------------------
+ 
+    procedure Undelay_Type (T : Entity_Id) is
+    begin
+       Set_Has_Delayed_Freeze (T, False);
+       Set_Freeze_Node (T, Empty);
+ 
+       --  Since we don't want T to have a Freeze_Node, we don't want its
+       --  Full_View or Corresponding_Record_Type to have one either.
+ 
+       --  ??? Fundamentally, this whole handling is a kludge. What we really
+       --  want is to be sure that for an Itype that's part of record R and
+       --  is a subtype of type T, that it's frozen after the later of the
+       --  freeze points of R and T.  We have no way of doing that directly,
+       --  so what we do is force most such Itypes to be frozen as part of
+       --  freezing R via this procedure and only delay the ones that need
+       --  to be delayed (mostly the designated types of access types that are
+       --  defined as part of the record).
+ 
+       if Is_Private_Type (T)
+         and then Present (Full_View (T))
+         and then Is_Itype (Full_View (T))
+         and then Is_Record_Type (Scope (Full_View (T)))
+       then
+          Undelay_Type (Full_View (T));
+       end if;
+ 
+       if Is_Concurrent_Type (T)
+         and then Present (Corresponding_Record_Type (T))
+         and then Is_Itype (Corresponding_Record_Type (T))
+         and then Is_Record_Type (Scope (Corresponding_Record_Type (T)))
+       then
+          Undelay_Type (Corresponding_Record_Type (T));
+       end if;
+    end Undelay_Type;
+ 
+    ------------------
     -- Warn_Overlay --
     ------------------
  
diff -Nrcpad gcc-3.4.3/gcc/ada/frontend.adb gcc-4.0.0/gcc/ada/frontend.adb
*** gcc-3.4.3/gcc/ada/frontend.adb	Tue Oct 21 13:42:00 2003
--- gcc-4.0.0/gcc/ada/frontend.adb	Mon May 10 16:18:52 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** begin
*** 124,133 ****
     begin
        --  We always analyze config files with style checks off, since
        --  we don't want a miscellaneous gnat.adc that is around to
!       --  discombobulate intended -gnatg or -gnaty compilations.
  
        Opt.Style_Check := False;
        Style_Check := False;
  
        --  Capture current suppress options, which may get modified
  
--- 124,135 ----
     begin
        --  We always analyze config files with style checks off, since
        --  we don't want a miscellaneous gnat.adc that is around to
!       --  discombobulate intended -gnatg or -gnaty compilations. We
!       --  also disconnect checking for maximum line length.
  
        Opt.Style_Check := False;
        Style_Check := False;
+       Opt.Max_Line_Length := Int (Column_Number'Last);
  
        --  Capture current suppress options, which may get modified
  
*************** begin
*** 191,196 ****
--- 193,199 ----
        --  Restore style check, but if config file turned on checks, leave on!
  
        Opt.Style_Check := Save_Style_Check or Style_Check;
+       Opt.Max_Line_Length := Hostparm.Max_Line_Length;
  
        --  Capture any modifications to suppress options from config pragmas
  
diff -Nrcpad gcc-3.4.3/gcc/ada/g-comlin.adb gcc-4.0.0/gcc/ada/g-comlin.adb
*** gcc-3.4.3/gcc/ada/g-comlin.adb	Tue Oct 21 13:42:00 2003
--- gcc-4.0.0/gcc/ada/g-comlin.adb	Thu Apr  1 10:04:37 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1999-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1999-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body GNAT.Command_Line is
*** 144,150 ****
  
        S    : String (1 .. 1024);
        Last : Natural;
!       It   : Pointer := Iterator'Unrestricted_Access;
  
        Current : Depth := It.Current_Depth;
        NL      : Positive;
--- 144,150 ----
  
        S    : String (1 .. 1024);
        Last : Natural;
!       It   : constant Pointer := Iterator'Unrestricted_Access;
  
        Current : Depth := It.Current_Depth;
        NL      : Positive;
diff -Nrcpad gcc-3.4.3/gcc/ada/g-crc32.ads gcc-4.0.0/gcc/ada/g-crc32.ads
*** gcc-3.4.3/gcc/ada/g-crc32.ads	Tue Oct 21 13:42:00 2003
--- gcc-4.0.0/gcc/ada/g-crc32.ads	Mon Feb  2 12:31:52 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --              Copyright (C) 2001 Ada Core Technologies, Inc.              --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --              Copyright (C) 2004 Ada Core Technologies, Inc.              --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package GNAT.CRC32 is
*** 78,109 ****
     procedure Update
       (C     : in out CRC32;
        Value : String);
-    pragma Inline (Update);
     --  For each character in the Value string call above routine
  
     procedure Wide_Update
       (C     : in out CRC32;
        Value : Wide_Character);
-    pragma Inline (Update);
     --  Evolve CRC by including the contribution from Wide_Character'Pos (Value)
     --  with the bytes being included in the natural memory order.
  
     procedure Wide_Update
       (C     : in out CRC32;
        Value : Wide_String);
-    pragma Inline (Update);
     --  For each character in the Value string call above routine
  
     procedure Update
       (C     : in out CRC32;
        Value : Ada.Streams.Stream_Element);
-    pragma Inline (Update);
     --  Evolve CRC by including the contribution from Value
  
     procedure Update
       (C     : in out CRC32;
        Value : Ada.Streams.Stream_Element_Array);
-    pragma Inline (Update);
     --  For each element in the Value array call above routine
  
     function Get_Value (C : CRC32) return Interfaces.Unsigned_32
--- 78,104 ----
*************** package GNAT.CRC32 is
*** 113,116 ****
--- 108,113 ----
     --  change the value of C, so it may be used to retrieve intermediate
     --  values of the CRC32 value during a sequence of Update calls.
  
+    pragma Inline (Update);
+    pragma Inline (Wide_Update);
  end GNAT.CRC32;
diff -Nrcpad gcc-3.4.3/gcc/ada/g-curexc.ads gcc-4.0.0/gcc/ada/g-curexc.ads
*** gcc-3.4.3/gcc/ada/g-curexc.ads	Thu Apr 24 17:54:02 2003
--- gcc-4.0.0/gcc/ada/g-curexc.ads	Mon Apr  5 14:57:34 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --         Copyright (C) 1996-2000 Ada Core Technologies, Inc.              --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --         Copyright (C) 1996-2004 Ada Core Technologies, Inc.              --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** pragma Pure (Current_Exception);
*** 50,55 ****
--- 50,57 ----
     -- Subprograms --
     -----------------
  
+    --  Note: the lower bound of returnd String values is always one.
+ 
     function Exception_Information return String;
     --  Returns the result of calling Ada.Exceptions.Exception_Information
     --  with an argument that is the Exception_Occurrence corresponding to
diff -Nrcpad gcc-3.4.3/gcc/ada/g-debpoo.adb gcc-4.0.0/gcc/ada/g-debpoo.adb
*** gcc-3.4.3/gcc/ada/g-debpoo.adb	Wed Dec  3 11:47:52 2003
--- gcc-4.0.0/gcc/ada/g-debpoo.adb	Mon Jun 14 13:18:59 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body GNAT.Debug_Pools is
*** 146,152 ****
     --  Traceback_Htable_Elem_Ptr.
  
     type Allocation_Header is record
!       Block_Size : Storage_Offset;
        --  Needed only for advanced freeing algorithms (traverse all allocated
        --  blocks for potential references). This value is negated when the
        --  chunk of memory has been logically freed by the application. This
--- 146,155 ----
     --  Traceback_Htable_Elem_Ptr.
  
     type Allocation_Header is record
!       Allocation_Address : System.Address;
!       --  Address of the block returned by malloc, possibly unaligned.
! 
!       Block_Size    : Storage_Offset;
        --  Needed only for advanced freeing algorithms (traverse all allocated
        --  blocks for potential references). This value is negated when the
        --  chunk of memory has been logically freed by the application. This
*************** package body GNAT.Debug_Pools is
*** 154,160 ****
  
        Alloc_Traceback   : Traceback_Htable_Elem_Ptr;
        Dealloc_Traceback : Traceback_Ptr_Or_Address;
!       --  Pointer to the traceback for the allocation (if the memory chunck is
        --  still valid), or to the first deallocation otherwise. Make sure this
        --  is a thin pointer to save space.
        --
--- 157,163 ----
  
        Alloc_Traceback   : Traceback_Htable_Elem_Ptr;
        Dealloc_Traceback : Traceback_Ptr_Or_Address;
!       --  Pointer to the traceback for the allocation (if the memory chunk is
        --  still valid), or to the first deallocation otherwise. Make sure this
        --  is a thin pointer to save space.
        --
*************** package body GNAT.Debug_Pools is
*** 183,203 ****
     function To_Traceback is new Ada.Unchecked_Conversion
       (Traceback_Htable_Elem_Ptr, Traceback_Ptr_Or_Address);
  
     Minimum_Allocation : constant Storage_Count :=
!                           Default_Alignment *
!                             (Allocation_Header'Size /
!                                System.Storage_Unit /
!                                  Default_Alignment) +
!                                    Default_Alignment;
!    --  Extra bytes to allocate to store the header. The header needs to be
!    --  correctly aligned as well, so we have to allocate multiples of the
!    --  alignment.
  
     -----------------------
     -- Allocations table --
     -----------------------
  
!    --  This table is indexed on addresses modulo Minimum_Allocation, and
     --  for each index it indicates whether that memory block is valid.
     --  Its behavior is similar to GNAT.Table, except that we need to pack
     --  the table to save space, so we cannot reuse GNAT.Table as is.
--- 186,208 ----
     function To_Traceback is new Ada.Unchecked_Conversion
       (Traceback_Htable_Elem_Ptr, Traceback_Ptr_Or_Address);
  
+    Header_Offset : constant Storage_Count
+      := Default_Alignment *
+      ((Allocation_Header'Size / System.Storage_Unit + Default_Alignment - 1)
+       / Default_Alignment);
+    --  Offset of user data after allocation header.
+ 
     Minimum_Allocation : constant Storage_Count :=
!      Default_Alignment - 1
!      + Header_Offset;
!    --  Minimal allocation: size of allocation_header rounded up to next
!    --  multiple of default alignment + worst-case padding.
  
     -----------------------
     -- Allocations table --
     -----------------------
  
!    --  This table is indexed on addresses modulo Default_Alignment, and
     --  for each index it indicates whether that memory block is valid.
     --  Its behavior is similar to GNAT.Table, except that we need to pack
     --  the table to save space, so we cannot reuse GNAT.Table as is.
*************** package body GNAT.Debug_Pools is
*** 249,255 ****
     Edata  : System.Address := System.Null_Address;
     --  Address in memory that matches the index 0 in Valid_Blocks. It is named
     --  after the symbol _edata, which, on most systems, indicate the lowest
!    --  possible address returned by malloc (). Unfortunately, this symbol
     --  doesn't exist on windows, so we cannot use it instead of this variable.
  
     -----------------------
--- 254,260 ----
     Edata  : System.Address := System.Null_Address;
     --  Address in memory that matches the index 0 in Valid_Blocks. It is named
     --  after the symbol _edata, which, on most systems, indicate the lowest
!    --  possible address returned by malloc. Unfortunately, this symbol
     --  doesn't exist on windows, so we cannot use it instead of this variable.
  
     -----------------------
*************** package body GNAT.Debug_Pools is
*** 341,347 ****
        function Convert is new Ada.Unchecked_Conversion
          (System.Address, Allocation_Header_Access);
     begin
!       return Convert (Address - Minimum_Allocation);
     end Header_Of;
  
     --------------
--- 346,352 ----
        function Convert is new Ada.Unchecked_Conversion
          (System.Address, Allocation_Header_Access);
     begin
!       return Convert (Address - Header_Offset);
     end Header_Of;
  
     --------------
*************** package body GNAT.Debug_Pools is
*** 670,677 ****
  
        type Local_Storage_Array is new Storage_Array
          (1 .. Size_In_Storage_Elements + Minimum_Allocation);
-       for Local_Storage_Array'Alignment use Standard'Maximum_Alignment;
-       --  For performance reasons, make sure the alignment is maximized.
  
        type Ptr is access Local_Storage_Array;
        --  On some systems, we might want to physically protect pages
--- 675,680 ----
*************** package body GNAT.Debug_Pools is
*** 716,722 ****
              P := new Local_Storage_Array;
        end;
  
!       Storage_Address := P.all'Address + Minimum_Allocation;
  
        Trace := Find_Or_Create_Traceback
          (Pool, Alloc, Size_In_Storage_Elements,
--- 719,732 ----
              P := new Local_Storage_Array;
        end;
  
!       Storage_Address := System.Null_Address + Default_Alignment
!         * (((P.all'Address + Default_Alignment - 1) - System.Null_Address)
!            / Default_Alignment)
!         + Header_Offset;
!       pragma Assert ((Storage_Address - System.Null_Address)
!                      mod Default_Alignment = 0);
!       pragma Assert (Storage_Address + Size_In_Storage_Elements
!                      <= P.all'Address + P'Length);
  
        Trace := Find_Or_Create_Traceback
          (Pool, Alloc, Size_In_Storage_Elements,
*************** package body GNAT.Debug_Pools is
*** 728,737 ****
        --  Default_Alignment.
  
        Header_Of (Storage_Address).all :=
!         (Alloc_Traceback   => Trace,
!          Dealloc_Traceback => To_Traceback (null),
!          Next              => Pool.First_Used_Block,
!          Block_Size        => Size_In_Storage_Elements);
  
        pragma Warnings (On);
  
--- 738,748 ----
        --  Default_Alignment.
  
        Header_Of (Storage_Address).all :=
!         (Allocation_Address => P.all'Address,
!          Alloc_Traceback    => Trace,
!          Dealloc_Traceback  => To_Traceback (null),
!          Next               => Pool.First_Used_Block,
!          Block_Size         => Size_In_Storage_Elements);
  
        pragma Warnings (On);
  
*************** package body GNAT.Debug_Pools is
*** 769,774 ****
--- 780,790 ----
        end if;
  
        Unlock_Task.all;
+ 
+    exception
+       when others =>
+          Unlock_Task.all;
+          raise;
     end Allocate;
  
     ------------------
*************** package body GNAT.Debug_Pools is
*** 923,929 ****
                 end;
  
                 Next := Header.Next;
!                System.Memory.Free (Header.all'Address);
                 Set_Valid (Tmp, False);
  
                 --  Remove this block from the list.
--- 939,945 ----
                 end;
  
                 Next := Header.Next;
!                System.Memory.Free (Header.Allocation_Address);
                 Set_Valid (Tmp, False);
  
                 --  Remove this block from the list.
*************** package body GNAT.Debug_Pools is
*** 1056,1061 ****
--- 1072,1082 ----
        end if;
  
        Unlock_Task.all;
+ 
+    exception
+       when others =>
+          Unlock_Task.all;
+          raise;
     end Free_Physically;
  
     ----------------
*************** package body GNAT.Debug_Pools is
*** 1085,1091 ****
           if Pool.Raise_Exceptions then
              raise Freeing_Not_Allocated_Storage;
           else
!             Put ("Freeing not allocated storage, at ");
              Put_Line (Pool.Stack_Trace_Depth, null,
                        Deallocate_Label'Address,
                        Code_Address_For_Deallocate_End);
--- 1106,1112 ----
           if Pool.Raise_Exceptions then
              raise Freeing_Not_Allocated_Storage;
           else
!             Put ("error: Freeing not allocated storage, at ");
              Put_Line (Pool.Stack_Trace_Depth, null,
                        Deallocate_Label'Address,
                        Code_Address_For_Deallocate_End);
*************** package body GNAT.Debug_Pools is
*** 1096,1102 ****
           if Pool.Raise_Exceptions then
              raise Freeing_Deallocated_Storage;
           else
!             Put ("Freeing already deallocated storage, at ");
              Put_Line (Pool.Stack_Trace_Depth, null,
                        Deallocate_Label'Address,
                        Code_Address_For_Deallocate_End);
--- 1117,1123 ----
           if Pool.Raise_Exceptions then
              raise Freeing_Deallocated_Storage;
           else
!             Put ("error: Freeing already deallocated storage, at ");
              Put_Line (Pool.Stack_Trace_Depth, null,
                        Deallocate_Label'Address,
                        Code_Address_For_Deallocate_End);
*************** package body GNAT.Debug_Pools is
*** 1131,1145 ****
           --  Update the header
  
           Header.all :=
!            (Alloc_Traceback   => Header.Alloc_Traceback,
!             Dealloc_Traceback => To_Traceback
!                                    (Find_Or_Create_Traceback
!                                       (Pool, Dealloc,
!                                        Size_In_Storage_Elements,
!                                        Deallocate_Label'Address,
!                                        Code_Address_For_Deallocate_End)),
!             Next              => System.Null_Address,
!             Block_Size        => -Size_In_Storage_Elements);
  
           if Pool.Reset_Content_On_Free then
              Set_Dead_Beef (Storage_Address, Size_In_Storage_Elements);
--- 1152,1167 ----
           --  Update the header
  
           Header.all :=
!            (Allocation_Address => Header.Allocation_Address,
!             Alloc_Traceback    => Header.Alloc_Traceback,
!             Dealloc_Traceback  => To_Traceback
!                                     (Find_Or_Create_Traceback
!                                        (Pool, Dealloc,
!                                         Size_In_Storage_Elements,
!                                         Deallocate_Label'Address,
!                                         Code_Address_For_Deallocate_End)),
!             Next               => System.Null_Address,
!             Block_Size         => -Size_In_Storage_Elements);
  
           if Pool.Reset_Content_On_Free then
              Set_Dead_Beef (Storage_Address, Size_In_Storage_Elements);
*************** package body GNAT.Debug_Pools is
*** 1166,1171 ****
--- 1188,1198 ----
  
           Unlock_Task.all;
        end if;
+ 
+    exception
+       when others =>
+          Unlock_Task.all;
+          raise;
     end Deallocate;
  
     --------------------
*************** package body GNAT.Debug_Pools is
*** 1210,1216 ****
           if Pool.Raise_Exceptions then
              raise Accessing_Not_Allocated_Storage;
           else
!             Put ("Accessing not allocated storage, at ");
              Put_Line (Pool.Stack_Trace_Depth, null,
                        Dereference_Label'Address,
                        Code_Address_For_Dereference_End);
--- 1237,1243 ----
           if Pool.Raise_Exceptions then
              raise Accessing_Not_Allocated_Storage;
           else
!             Put ("error: Accessing not allocated storage, at ");
              Put_Line (Pool.Stack_Trace_Depth, null,
                        Dereference_Label'Address,
                        Code_Address_For_Dereference_End);
*************** package body GNAT.Debug_Pools is
*** 1223,1229 ****
              if Pool.Raise_Exceptions then
                 raise Accessing_Deallocated_Storage;
              else
!                Put ("Accessing deallocated storage, at ");
                 Put_Line
                   (Pool.Stack_Trace_Depth, null,
                    Dereference_Label'Address,
--- 1250,1256 ----
              if Pool.Raise_Exceptions then
                 raise Accessing_Deallocated_Storage;
              else
!                Put ("error: Accessing deallocated storage, at ");
                 Put_Line
                   (Pool.Stack_Trace_Depth, null,
                    Dereference_Label'Address,
*************** package body GNAT.Debug_Pools is
*** 1310,1380 ****
  
        Put_Line ("");
  
!       Data := Backtrace_Htable.Get_First;
!       while Data /= null loop
!          if Data.Kind in Alloc .. Dealloc then
!             Elem :=
!               new Traceback_Htable_Elem'
!                    (Traceback => new Tracebacks_Array'(Data.Traceback.all),
!                     Count     => Data.Count,
!                     Kind      => Data.Kind,
!                     Total     => Data.Total,
!                     Next      => null);
!             Backtrace_Htable_Cumulate.Set (Elem);
  
!             if Cumulate then
!                if Data.Kind = Alloc then
!                   K := Indirect_Alloc;
!                else
!                   K := Indirect_Dealloc;
!                end if;
  
!                --  Propagate the direct call to all its parents
  
!                for T in Data.Traceback'First + 1 .. Data.Traceback'Last loop
!                   Elem := Backtrace_Htable_Cumulate.Get
!                     (Data.Traceback
!                        (T .. Data.Traceback'Last)'Unrestricted_Access);
  
!                   --  If not, insert it
  
!                   if Elem = null then
!                      Elem := new Traceback_Htable_Elem'
!                                (Traceback => new Tracebacks_Array'
!                                  (Data.Traceback (T .. Data.Traceback'Last)),
!                         Count     => Data.Count,
!                         Kind      => K,
!                         Total     => Data.Total,
!                         Next      => null);
!                      Backtrace_Htable_Cumulate.Set (Elem);
  
!                      --  Properly take into account that the subprograms
!                      --  indirectly called might be doing either allocations
!                      --  or deallocations. This needs to be reflected in the
!                      --  counts.
  
!                   else
!                      Elem.Count := Elem.Count + Data.Count;
  
!                      if K = Elem.Kind then
!                         Elem.Total := Elem.Total + Data.Total;
  
!                      elsif Elem.Total > Data.Total then
!                         Elem.Total := Elem.Total - Data.Total;
  
!                      else
!                         Elem.Kind  := K;
!                         Elem.Total := Data.Total - Elem.Total;
                       end if;
!                   end if;
!                end loop;
!             end if;
  
!             Data := Backtrace_Htable.Get_Next;
!          end if;
!       end loop;
  
-       if Display_Slots then
           Put_Line ("List of allocations/deallocations: ");
  
           Data := Backtrace_Htable_Cumulate.Get_First;
--- 1337,1407 ----
  
        Put_Line ("");
  
!       if Display_Slots then
!          Data := Backtrace_Htable.Get_First;
!          while Data /= null loop
!             if Data.Kind in Alloc .. Dealloc then
!                Elem :=
!                  new Traceback_Htable_Elem'
!                       (Traceback => new Tracebacks_Array'(Data.Traceback.all),
!                        Count     => Data.Count,
!                        Kind      => Data.Kind,
!                        Total     => Data.Total,
!                        Next      => null);
!                Backtrace_Htable_Cumulate.Set (Elem);
  
!                if Cumulate then
!                   if Data.Kind = Alloc then
!                      K := Indirect_Alloc;
!                   else
!                      K := Indirect_Dealloc;
!                   end if;
  
!                   --  Propagate the direct call to all its parents
  
!                   for T in Data.Traceback'First + 1 .. Data.Traceback'Last loop
!                      Elem := Backtrace_Htable_Cumulate.Get
!                        (Data.Traceback
!                           (T .. Data.Traceback'Last)'Unrestricted_Access);
  
!                      --  If not, insert it
  
!                      if Elem = null then
!                         Elem := new Traceback_Htable_Elem'
!                           (Traceback => new Tracebacks_Array'
!                              (Data.Traceback (T .. Data.Traceback'Last)),
!                            Count     => Data.Count,
!                            Kind      => K,
!                            Total     => Data.Total,
!                            Next      => null);
!                         Backtrace_Htable_Cumulate.Set (Elem);
  
!                         --  Properly take into account that the subprograms
!                         --  indirectly called might be doing either allocations
!                         --  or deallocations. This needs to be reflected in the
!                         --  counts.
  
!                      else
!                         Elem.Count := Elem.Count + Data.Count;
  
!                         if K = Elem.Kind then
!                            Elem.Total := Elem.Total + Data.Total;
  
!                         elsif Elem.Total > Data.Total then
!                            Elem.Total := Elem.Total - Data.Total;
  
!                         else
!                            Elem.Kind  := K;
!                            Elem.Total := Data.Total - Elem.Total;
!                         end if;
                       end if;
!                   end loop;
!                end if;
  
!                Data := Backtrace_Htable.Get_Next;
!             end if;
!          end loop;
  
           Put_Line ("List of allocations/deallocations: ");
  
           Data := Backtrace_Htable_Cumulate.Get_First;
*************** package body GNAT.Debug_Pools is
*** 1397,1402 ****
--- 1424,1431 ----
  
              Data := Backtrace_Htable_Cumulate.Get_Next;
           end loop;
+ 
+          Backtrace_Htable_Cumulate.Reset;
        end if;
  
        if Display_Leaks then
*************** package body GNAT.Debug_Pools is
*** 1421,1428 ****
              Current := Header.Next;
           end loop;
        end if;
- 
-       Backtrace_Htable_Cumulate.Reset;
     end Print_Info;
  
     ------------------
--- 1450,1455 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/g-debpoo.ads gcc-4.0.0/gcc/ada/g-debpoo.ads
*** gcc-3.4.3/gcc/ada/g-debpoo.ads	Tue Oct 21 13:42:00 2003
--- gcc-4.0.0/gcc/ada/g-debpoo.ads	Fri Jun 25 16:39:27 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 32,62 ****
  ------------------------------------------------------------------------------
  
  --  This packages provides a special implementation of the Ada95 storage pools.
! --
  --  The goal of this debug pool is to detect incorrect uses of memory
  --  (multiple deallocations, access to invalid memory,...). Errors are reported
  --  in one of two ways: either by immediately raising an exception, or by
  --  printing a message on standard output.
! --
  --  You need to instrument your code to use this package: for each access type
  --  you want to monitor, you need to add a clause similar to:
! --
  --      type Integer_Access is access Integer;
  --      for Integer_Access'Storage_Pool use Pool;
  
  --  where Pool is a tagged object declared with
  --
  --      Pool : GNAT.Debug_Pools.Debug_Pool;
! --
  --  This package was designed to be as efficient as possible, but still has an
  --  impact on the performance of your code, which depends on the number of
  --  allocations, deallocations and, somewhat less, dereferences that your
  --  application performs.
! --
  --  For each faulty memory use, this debug pool will print several lines
  --  of information, including things like the location where the memory
  --  was initially allocated, the location where it was freed etc.
! --
  --  Physical allocations and deallocations are done through the usual system
  --  calls. However, in order to provide proper checks, the debug pool will not
  --  release the memory immediately. It keeps released memory around (the amount
--- 32,62 ----
  ------------------------------------------------------------------------------
  
  --  This packages provides a special implementation of the Ada95 storage pools.
! 
  --  The goal of this debug pool is to detect incorrect uses of memory
  --  (multiple deallocations, access to invalid memory,...). Errors are reported
  --  in one of two ways: either by immediately raising an exception, or by
  --  printing a message on standard output.
! 
  --  You need to instrument your code to use this package: for each access type
  --  you want to monitor, you need to add a clause similar to:
! 
  --      type Integer_Access is access Integer;
  --      for Integer_Access'Storage_Pool use Pool;
  
  --  where Pool is a tagged object declared with
  --
  --      Pool : GNAT.Debug_Pools.Debug_Pool;
! 
  --  This package was designed to be as efficient as possible, but still has an
  --  impact on the performance of your code, which depends on the number of
  --  allocations, deallocations and, somewhat less, dereferences that your
  --  application performs.
! 
  --  For each faulty memory use, this debug pool will print several lines
  --  of information, including things like the location where the memory
  --  was initially allocated, the location where it was freed etc.
! 
  --  Physical allocations and deallocations are done through the usual system
  --  calls. However, in order to provide proper checks, the debug pool will not
  --  release the memory immediately. It keeps released memory around (the amount
***************
*** 64,90 ****
  --  has not been allocated and memory that has been allocated but freed. This
  --  also means that this memory cannot be reallocated, preventing what would
  --  otherwise be a false indication that freed memory is now allocated.
! --
  --  In addition, this package presents several subprograms that help analyze
  --  the behavior of your program, by reporting memory leaks, the total amount
  --  of memory that was allocated. The pool is also designed to work correctly
  --  in conjunction with gnatmem.
! --
  --  Finally, a subprogram Print_Pool is provided for use from the debugger.
! --
  --  Limitations
  --  ===========
! --
  --  Current limitation of this debug pool: if you use this debug pool for a
  --  general access type ("access all"), the pool might report invalid
  --  dereferences if the access object is pointing to another object on the
  --  stack which was not allocated through a call to "new".
! --
  --  This debug pool will respect all alignments specified in your code, but
  --  it does that by aligning all objects using Standard'Maximum_Alignment.
  --  This allows faster checks, and limits the performance impact of using
  --  this pool.
! --
  
  with System;                  use System;
  with System.Storage_Elements; use System.Storage_Elements;
--- 64,90 ----
  --  has not been allocated and memory that has been allocated but freed. This
  --  also means that this memory cannot be reallocated, preventing what would
  --  otherwise be a false indication that freed memory is now allocated.
! 
  --  In addition, this package presents several subprograms that help analyze
  --  the behavior of your program, by reporting memory leaks, the total amount
  --  of memory that was allocated. The pool is also designed to work correctly
  --  in conjunction with gnatmem.
! 
  --  Finally, a subprogram Print_Pool is provided for use from the debugger.
! 
  --  Limitations
  --  ===========
! 
  --  Current limitation of this debug pool: if you use this debug pool for a
  --  general access type ("access all"), the pool might report invalid
  --  dereferences if the access object is pointing to another object on the
  --  stack which was not allocated through a call to "new".
! 
  --  This debug pool will respect all alignments specified in your code, but
  --  it does that by aligning all objects using Standard'Maximum_Alignment.
  --  This allows faster checks, and limits the performance impact of using
  --  this pool.
! 
  
  with System;                  use System;
  with System.Storage_Elements; use System.Storage_Elements;
*************** private
*** 249,268 ****
--- 249,283 ----
        Storage_Address          : out Address;
        Size_In_Storage_Elements : Storage_Count;
        Alignment                : Storage_Count);
+    --  Allocate a new chunk of memory, and set it up so that the debug pool
+    --  can check accesses to its data, and report incorrect access later on.
+    --  The parameters have the same semantics as defined in the ARM95.
  
     procedure Deallocate
       (Pool                     : in out Debug_Pool;
        Storage_Address          : Address;
        Size_In_Storage_Elements : Storage_Count;
        Alignment                : Storage_Count);
+    --  Mark a block of memory as invalid. It might not be physically removed
+    --  immediately, depending on the setup of the debug pool, so that checks
+    --  are still possible. The parameters have the same semantics as defined
+    --  in the RM.
  
     function Storage_Size (Pool : Debug_Pool) return SSC;
+    --  Return the maximal size of data that can be allocated through Pool.
+    --  Since Pool uses the malloc() system call, all the memory is accessible
+    --  through the pool
  
     procedure Dereference
       (Pool                     : in out Debug_Pool;
        Storage_Address          : System.Address;
        Size_In_Storage_Elements : Storage_Count;
        Alignment                : Storage_Count);
+    --  Check whether a derefence statement is valid, ie whether the pointer
+    --  was allocated through Pool. As documented above, errors will be
+    --  reported either by a special error message or an exception, depending
+    --  on the setup of the storage pool.
+    --  The parameters have the same semantics as defined in the ARM95.
  
     type Byte_Count is mod System.Max_Binary_Modulus;
     --  Type used for maintaining byte counts, needs to be large enough
diff -Nrcpad gcc-3.4.3/gcc/ada/g-dirope.adb gcc-4.0.0/gcc/ada/g-dirope.adb
*** gcc-3.4.3/gcc/ada/g-dirope.adb	Mon Jan  5 15:20:44 2004
--- gcc-4.0.0/gcc/ada/g-dirope.adb	Thu Feb 10 13:49:14 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 1998-2003 Ada Core Technologies, Inc.           --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 1998-2005 Ada Core Technologies, Inc.           --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 34,42 ****
  with Ada.Characters.Handling;
  with Ada.Strings.Fixed;
  with Ada.Strings.Maps;
  with Unchecked_Deallocation;
  with Unchecked_Conversion;
! with System;  use System;
  
  with GNAT.OS_Lib;
  
--- 34,45 ----
  with Ada.Characters.Handling;
  with Ada.Strings.Fixed;
  with Ada.Strings.Maps;
+ 
  with Unchecked_Deallocation;
  with Unchecked_Conversion;
! 
! with System;      use System;
! with System.CRTL; use System.CRTL;
  
  with GNAT.OS_Lib;
  
*************** package body GNAT.Directory_Operations i
*** 181,190 ****
     -----------
  
     procedure Close (Dir : in out Dir_Type) is
- 
-       function closedir (Directory : System.Address) return Integer;
-       pragma Import (C, closedir, "closedir");
- 
        Discard : Integer;
        pragma Warnings (Off, Discard);
  
--- 184,189 ----
*************** package body GNAT.Directory_Operations i
*** 193,199 ****
           raise Directory_Error;
        end if;
  
!       Discard := closedir (System.Address (Dir.all));
        Free (Dir);
     end Close;
  
--- 192,198 ----
           raise Directory_Error;
        end if;
  
!       Discard := closedir (DIRs (Dir.all));
        Free (Dir);
     end Close;
  
*************** package body GNAT.Directory_Operations i
*** 630,641 ****
     is
        C_File_Name : constant String := Dir_Name & ASCII.NUL;
  
-       function opendir
-         (File_Name : String) return Dir_Type_Value;
-       pragma Import (C, opendir, "opendir");
- 
     begin
!       Dir := new Dir_Type_Value'(opendir (C_File_Name));
  
        if not Is_Open (Dir) then
           Free (Dir);
--- 629,636 ----
     is
        C_File_Name : constant String := Dir_Name & ASCII.NUL;
  
     begin
!       Dir := new Dir_Type_Value'(Dir_Type_Value (opendir (C_File_Name)));
  
        if not Is_Open (Dir) then
           Free (Dir);
*************** package body GNAT.Directory_Operations i
*** 737,745 ****
        Success     : Boolean;
        Working_Dir : Dir_Type;
  
-       procedure rmdir (Dir_Name : String);
-       pragma Import (C, rmdir, "rmdir");
- 
     begin
        --  Remove the directory only if it is empty
  
--- 732,737 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/g-dirope.ads gcc-4.0.0/gcc/ada/g-dirope.ads
*** gcc-3.4.3/gcc/ada/g-dirope.ads	Mon Jan  5 15:20:44 2004
--- gcc-4.0.0/gcc/ada/g-dirope.ads	Mon Oct  4 15:00:26 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 1998-2003 Ada Core Technologies, Inc.           --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 1998-2004 Ada Core Technologies, Inc.           --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package GNAT.Directory_Operations is
*** 123,137 ****
     function Base_Name
       (Path   : Path_Name;
        Suffix : String := "") return String;
!    --  Any directory prefix is removed. If Suffix is non-empty and is a
!    --  suffix of Path, it is removed. This is equivalent to the UNIX basename
!    --  command. The following rule is always true:
     --
     --    'Path' and 'Dir_Name (Path) & Directory_Separator & Base_Name (Path)'
     --    represent the same file.
     --
!    --  This function is not case-sensitive on systems that have a non
!    --  case-sensitive file system like Windows and OpenVMS.
  
     function File_Extension (Path : Path_Name) return String;
     --  Return the file extension. This is defined as the string after the
--- 123,142 ----
     function Base_Name
       (Path   : Path_Name;
        Suffix : String := "") return String;
!    --  Any directory prefix is removed. A directory prefix is defined as
!    --  text up to and including the last directory separator character in
!    --  the input string. In addition if Path ends with the string given for
!    --  Suffix, then it is also removed. Note that Suffix here can be an
!    --  arbitrary string (it is not required to be a file extension). This
!    --  is equivalent to the UNIX basename command. The following rule is
!    --  always true:
     --
     --    'Path' and 'Dir_Name (Path) & Directory_Separator & Base_Name (Path)'
     --    represent the same file.
     --
!    --  The comparison of Suffix is case-insensitive on systems such as Windows
!    --  and VMS where the file search is case-insensitive (e.g. on such systems,
!    --  Base_Name ("/Users/AdaCore/BB12.patch", ".Patch") returns "BB12").
  
     function File_Extension (Path : Path_Name) return String;
     --  Return the file extension. This is defined as the string after the
diff -Nrcpad gcc-3.4.3/gcc/ada/g-dynhta.adb gcc-4.0.0/gcc/ada/g-dynhta.adb
*** gcc-3.4.3/gcc/ada/g-dynhta.adb	Tue Oct 21 13:42:00 2003
--- gcc-4.0.0/gcc/ada/g-dynhta.adb	Tue Jul  6 13:57:30 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 2002-2003 Ada Core Technologies, Inc.            --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 2002-2004 Ada Core Technologies, Inc.            --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 34,42 ****
  with Ada.Unchecked_Deallocation;
  package body GNAT.Dynamic_HTables is
  
!    --------------------
!    --  Static_HTable --
!    --------------------
  
     package body Static_HTable is
  
--- 34,42 ----
  with Ada.Unchecked_Deallocation;
  package body GNAT.Dynamic_HTables is
  
!    -------------------
!    -- Static_HTable --
!    -------------------
  
     package body Static_HTable is
  
*************** package body GNAT.Dynamic_HTables is
*** 207,215 ****
        end Set;
     end Static_HTable;
  
!    --------------------
!    --  Simple_HTable --
!    --------------------
  
     package body Simple_HTable is
  
--- 207,215 ----
        end Set;
     end Static_HTable;
  
!    -------------------
!    -- Simple_HTable --
!    -------------------
  
     package body Simple_HTable is
  
diff -Nrcpad gcc-3.4.3/gcc/ada/g-dyntab.adb gcc-4.0.0/gcc/ada/g-dyntab.adb
*** gcc-3.4.3/gcc/ada/g-dyntab.adb	Tue Oct 21 13:42:00 2003
--- gcc-4.0.0/gcc/ada/g-dyntab.adb	Fri Mar  5 10:58:56 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 2000-2003 Ada Core Technologies, Inc.            --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 2000-2004 Ada Core Technologies, Inc.            --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body GNAT.Dynamic_Tables is
*** 51,59 ****
--- 51,65 ----
     --  in Max. Works correctly to do an initial allocation if the table
     --  is currently null.
  
+    pragma Warnings (Off);
+    --  These unchecked conversions are in fact safe, since they never
+    --  generate improperly aliased pointer values.
+ 
     function To_Address is new Unchecked_Conversion (Table_Ptr, Address);
     function To_Pointer is new Unchecked_Conversion (Address, Table_Ptr);
  
+    pragma Warnings (On);
+ 
     --------------
     -- Allocate --
     --------------
diff -Nrcpad gcc-3.4.3/gcc/ada/g-eacodu-vms.adb gcc-4.0.0/gcc/ada/g-eacodu-vms.adb
*** gcc-3.4.3/gcc/ada/g-eacodu-vms.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/g-eacodu-vms.adb	Fri May 14 10:01:59 2004
***************
*** 0 ****
--- 1,73 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --      G N A T . E X C E P T I O N _ A C T I O N S . C O R E _ D U M P     --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --            Copyright (C) 2003 Free Software Foundation, Inc.             --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the VMS version.
+ 
+ with System;
+ with System.Aux_DEC;
+ separate (GNAT.Exception_Actions)
+ procedure Core_Dump (Occurrence : Exception_Occurrence) is
+ 
+    use System;
+    use System.Aux_DEC;
+ 
+    pragma Unreferenced (Occurrence);
+ 
+    SS_IMGDMP : constant := 1276;
+ 
+    subtype Cond_Value_Type is Unsigned_Longword;
+    subtype Access_Mode_Type is
+       Unsigned_Word range 0 .. 3;
+    Access_Mode_Zero : constant Access_Mode_Type := 0;
+ 
+    Status : Cond_Value_Type;
+ 
+    procedure Setexv (
+      Status : out Cond_Value_Type;
+      Vector : in  Unsigned_Longword := 0;
+      Addres : in  Address           := Address_Zero;
+      Acmode : in  Access_Mode_Type  := Access_Mode_Zero;
+      Prvhnd : in  Unsigned_Longword := 0);
+    pragma Interface (External, Setexv);
+    pragma Import_Valued_Procedure (Setexv, "SYS$SETEXV",
+      (Cond_Value_Type, Unsigned_Longword, Address, Access_Mode_Type,
+       Unsigned_Longword),
+      (Value, Value, Value, Value, Value));
+ 
+    procedure Lib_Signal (I : in Integer);
+    pragma Interface (C, Lib_Signal);
+    pragma Import_Procedure (Lib_Signal, "LIB$SIGNAL", Mechanism => (Value));
+ begin
+    Setexv (Status, 1, Address_Zero, 3);
+    Lib_Signal (SS_IMGDMP);
+ end Core_Dump;
diff -Nrcpad gcc-3.4.3/gcc/ada/g-enblsp-vms-alpha.adb gcc-4.0.0/gcc/ada/g-enblsp-vms-alpha.adb
*** gcc-3.4.3/gcc/ada/g-enblsp-vms-alpha.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/g-enblsp-vms-alpha.adb	Thu Feb 10 13:48:50 2005
***************
*** 0 ****
--- 1,132 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --         G N A T . E X P E C T . N O N _ B L O C K I N G _ S P A W N      --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --              Copyright (C) 2005 Ada Core Technologies, Inc.              --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package provides a target dependent non-blocking spawn function
+ --  for use by the VMS GNAT.Expect package (g-expect-vms.adb). This package
+ --  should not be directly with'ed by an application program.
+ 
+ --  This version is for Alpha/VMS.
+ 
+ separate (GNAT.Expect)
+ procedure Non_Blocking_Spawn
+   (Descriptor  : out Process_Descriptor'Class;
+    Command     : String;
+    Args        : GNAT.OS_Lib.Argument_List;
+    Buffer_Size : Natural := 4096;
+    Err_To_Out  : Boolean := False)
+ is
+    function Alloc_Vfork_Blocks return Integer;
+    pragma Import (C, Alloc_Vfork_Blocks, "decc$$alloc_vfork_blocks");
+ 
+    function Get_Vfork_Jmpbuf return System.Address;
+    pragma Import (C, Get_Vfork_Jmpbuf, "decc$$get_vfork_jmpbuf");
+ 
+    function Get_Current_Invo_Context
+      (Addr : System.Address) return Process_Id;
+    pragma Import (C, Get_Current_Invo_Context,
+      "LIB$GET_CURRENT_INVO_CONTEXT");
+ 
+    Pipe1, Pipe2, Pipe3 : aliased Pipe_Type;
+ 
+    Arg      : String_Access;
+    Arg_List : aliased array (1 .. Args'Length + 2) of System.Address;
+ 
+    Command_With_Path : String_Access;
+ 
+ begin
+    --  Create the rest of the pipes
+ 
+    Set_Up_Communications
+      (Descriptor, Err_To_Out, Pipe1'Access, Pipe2'Access, Pipe3'Access);
+ 
+    Command_With_Path := Locate_Exec_On_Path (Command);
+ 
+    if Command_With_Path = null then
+       raise Invalid_Process;
+    end if;
+ 
+    --  Fork a new process. It's not possible to do this in a subprogram.
+ 
+    if Alloc_Vfork_Blocks >= 0 then
+       Descriptor.Pid := Get_Current_Invo_Context (Get_Vfork_Jmpbuf);
+    else
+       Descriptor.Pid := -1;
+    end if;
+ 
+    --  Are we now in the child (or, for Windows, still in the common
+    --  process).
+ 
+    if Descriptor.Pid = Null_Pid then
+       --  Prepare an array of arguments to pass to C
+ 
+       Arg   := new String (1 .. Command_With_Path'Length + 1);
+       Arg (1 .. Command_With_Path'Length) := Command_With_Path.all;
+       Arg (Arg'Last)        := ASCII.Nul;
+       Arg_List (1)          := Arg.all'Address;
+ 
+       for J in Args'Range loop
+          Arg                     := new String (1 .. Args (J)'Length + 1);
+          Arg (1 .. Args (J)'Length)  := Args (J).all;
+          Arg (Arg'Last)              := ASCII.Nul;
+          Arg_List (J + 2 - Args'First) := Arg.all'Address;
+       end loop;
+ 
+       Arg_List (Arg_List'Last) := System.Null_Address;
+ 
+       --  This does not return on Unix systems
+ 
+       Set_Up_Child_Communications
+         (Descriptor, Pipe1, Pipe2, Pipe3, Command_With_Path.all,
+          Arg_List'Address);
+    end if;
+ 
+    Free (Command_With_Path);
+ 
+    --  Did we have an error when spawning the child ?
+ 
+    if Descriptor.Pid < Null_Pid then
+       raise Invalid_Process;
+    else
+       --  We are now in the parent process
+ 
+       Set_Up_Parent_Communications (Descriptor, Pipe1, Pipe2, Pipe3);
+    end if;
+ 
+    --  Create the buffer
+ 
+    Descriptor.Buffer_Size := Buffer_Size;
+ 
+    if Buffer_Size /= 0 then
+       Descriptor.Buffer := new String (1 .. Positive (Buffer_Size));
+    end if;
+ end Non_Blocking_Spawn;
diff -Nrcpad gcc-3.4.3/gcc/ada/g-enblsp-vms-ia64.adb gcc-4.0.0/gcc/ada/g-enblsp-vms-ia64.adb
*** gcc-3.4.3/gcc/ada/g-enblsp-vms-ia64.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/g-enblsp-vms-ia64.adb	Thu Feb 10 13:48:50 2005
***************
*** 0 ****
--- 1,130 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --         G N A T . E X P E C T . N O N _ B L O C K I N G _ S P A W N      --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --              Copyright (C) 2005 Ada Core Technologies, Inc.              --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package provides a target dependent non-blocking spawn function
+ --  for use by the VMS GNAT.Expect package (g-expect-vms.adb). This package
+ --  should not be directly with'ed by an application program.
+ 
+ --  This version is for IA64/VMS.
+ 
+ separate (GNAT.Expect)
+ procedure Non_Blocking_Spawn
+   (Descriptor  : out Process_Descriptor'Class;
+    Command     : String;
+    Args        : GNAT.OS_Lib.Argument_List;
+    Buffer_Size : Natural := 4096;
+    Err_To_Out  : Boolean := False)
+ is
+    function Alloc_Vfork_Blocks return Integer;
+    pragma Import (C, Alloc_Vfork_Blocks, "decc$$alloc_vfork_blocks");
+ 
+    function Get_Vfork_Jmpbuf return System.Address;
+    pragma Import (C, Get_Vfork_Jmpbuf, "decc$$get_vfork_jmpbuf");
+ 
+    function Setjmp1 (Addr : System.Address) return Process_Id;
+    pragma Import (C, Setjmp1, "decc$setjmp1");
+ 
+    Pipe1, Pipe2, Pipe3 : aliased Pipe_Type;
+ 
+    Arg      : String_Access;
+    Arg_List : aliased array (1 .. Args'Length + 2) of System.Address;
+ 
+    Command_With_Path : String_Access;
+ 
+ begin
+    --  Create the rest of the pipes
+ 
+    Set_Up_Communications
+      (Descriptor, Err_To_Out, Pipe1'Access, Pipe2'Access, Pipe3'Access);
+ 
+    Command_With_Path := Locate_Exec_On_Path (Command);
+ 
+    if Command_With_Path = null then
+       raise Invalid_Process;
+    end if;
+ 
+    --  Fork a new process. It's not possible to do this in a subprogram.
+ 
+    if Alloc_Vfork_Blocks >= 0 then
+       Descriptor.Pid := Setjmp1 (Get_Vfork_Jmpbuf);
+    else
+       Descriptor.Pid := -1;
+    end if;
+ 
+    --  Are we now in the child (or, for Windows, still in the common
+    --  process).
+ 
+    if Descriptor.Pid = Null_Pid then
+       --  Prepare an array of arguments to pass to C
+ 
+       Arg   := new String (1 .. Command_With_Path'Length + 1);
+       Arg (1 .. Command_With_Path'Length) := Command_With_Path.all;
+       Arg (Arg'Last)        := ASCII.Nul;
+       Arg_List (1)          := Arg.all'Address;
+ 
+       for J in Args'Range loop
+          Arg                     := new String (1 .. Args (J)'Length + 1);
+          Arg (1 .. Args (J)'Length)  := Args (J).all;
+          Arg (Arg'Last)              := ASCII.Nul;
+          Arg_List (J + 2 - Args'First) := Arg.all'Address;
+       end loop;
+ 
+       Arg_List (Arg_List'Last) := System.Null_Address;
+ 
+       --  This does not return on Unix systems
+ 
+       Set_Up_Child_Communications
+         (Descriptor, Pipe1, Pipe2, Pipe3, Command_With_Path.all,
+          Arg_List'Address);
+    end if;
+ 
+    Free (Command_With_Path);
+ 
+    --  Did we have an error when spawning the child ?
+ 
+    if Descriptor.Pid < Null_Pid then
+       raise Invalid_Process;
+    else
+       --  We are now in the parent process
+ 
+       Set_Up_Parent_Communications (Descriptor, Pipe1, Pipe2, Pipe3);
+    end if;
+ 
+    --  Create the buffer
+ 
+    Descriptor.Buffer_Size := Buffer_Size;
+ 
+    if Buffer_Size /= 0 then
+       Descriptor.Buffer := new String (1 .. Positive (Buffer_Size));
+    end if;
+ end Non_Blocking_Spawn;
diff -Nrcpad gcc-3.4.3/gcc/ada/g-expect-vms.adb gcc-4.0.0/gcc/ada/g-expect-vms.adb
*** gcc-3.4.3/gcc/ada/g-expect-vms.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/g-expect-vms.adb	Thu Feb 10 13:48:49 2005
***************
*** 0 ****
--- 1,1099 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                          --
+ --                                                                          --
+ --                          G N A T . E X P E C T                           --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --             Copyright (C) 2002-2005 Ada Core Technologies, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the VMS version.
+ 
+ with System;        use System;
+ with Ada.Calendar;  use Ada.Calendar;
+ 
+ with GNAT.IO;
+ with GNAT.OS_Lib;   use GNAT.OS_Lib;
+ with GNAT.Regpat;   use GNAT.Regpat;
+ 
+ with Unchecked_Deallocation;
+ 
+ package body GNAT.Expect is
+ 
+    type Array_Of_Pd is array (Positive range <>) of Process_Descriptor_Access;
+ 
+    Save_Input  : File_Descriptor;
+    Save_Output : File_Descriptor;
+    Save_Error  : File_Descriptor;
+ 
+    procedure Expect_Internal
+      (Descriptors : in out Array_Of_Pd;
+       Result      : out Expect_Match;
+       Timeout     : Integer;
+       Full_Buffer : Boolean);
+    --  Internal function used to read from the process Descriptor.
+    --
+    --  Three outputs are possible:
+    --     Result=Expect_Timeout, if no output was available before the timeout
+    --        expired.
+    --     Result=Expect_Full_Buffer, if Full_Buffer is True and some characters
+    --        had to be discarded from the internal buffer of Descriptor.
+    --     Result=<integer>, indicates how many characters were added to the
+    --        internal buffer. These characters are from indexes
+    --        Descriptor.Buffer_Index - Result + 1 .. Descriptor.Buffer_Index
+    --  Process_Died is raised if the process is no longer valid.
+ 
+    procedure Reinitialize_Buffer
+      (Descriptor : in out Process_Descriptor'Class);
+    --  Reinitialize the internal buffer.
+    --  The buffer is deleted up to the end of the last match.
+ 
+    procedure Free is new Unchecked_Deallocation
+      (Pattern_Matcher, Pattern_Matcher_Access);
+ 
+    procedure Call_Filters
+      (Pid       : Process_Descriptor'Class;
+       Str       : String;
+       Filter_On : Filter_Type);
+    --  Call all the filters that have the appropriate type.
+    --  This function does nothing if the filters are locked
+ 
+    ------------------------------
+    -- Target dependent section --
+    ------------------------------
+ 
+    function Dup (Fd : File_Descriptor) return File_Descriptor;
+    pragma Import (C, Dup, "decc$dup");
+ 
+    procedure Dup2 (Old_Fd, New_Fd : File_Descriptor);
+    pragma Import (C, Dup2, "decc$dup2");
+ 
+    procedure Kill (Pid : Process_Id; Sig_Num : Integer);
+    pragma Import (C, Kill, "decc$kill");
+ 
+    function Create_Pipe (Pipe : access Pipe_Type) return Integer;
+    pragma Import (C, Create_Pipe, "__gnat_pipe");
+ 
+    function Poll
+      (Fds     : System.Address;
+       Num_Fds : Integer;
+       Timeout : Integer;
+       Is_Set  : System.Address) return Integer;
+    pragma Import (C, Poll, "__gnat_expect_poll");
+    --  Check whether there is any data waiting on the file descriptor
+    --  Out_fd, and wait if there is none, at most Timeout milliseconds
+    --  Returns -1 in case of error, 0 if the timeout expired before
+    --  data became available.
+    --
+    --  Out_Is_Set is set to 1 if data was available, 0 otherwise.
+ 
+    function Waitpid (Pid : Process_Id) return Integer;
+    pragma Import (C, Waitpid, "__gnat_waitpid");
+    --  Wait for a specific process id, and return its exit code.
+ 
+    ---------
+    -- "+" --
+    ---------
+ 
+    function "+" (S : String) return GNAT.OS_Lib.String_Access is
+    begin
+       return new String'(S);
+    end "+";
+ 
+    ---------
+    -- "+" --
+    ---------
+ 
+    function "+"
+      (P : GNAT.Regpat.Pattern_Matcher) return Pattern_Matcher_Access
+    is
+    begin
+       return new GNAT.Regpat.Pattern_Matcher'(P);
+    end "+";
+ 
+    ----------------
+    -- Add_Filter --
+    ----------------
+ 
+    procedure Add_Filter
+      (Descriptor : in out Process_Descriptor;
+       Filter     : Filter_Function;
+       Filter_On  : Filter_Type := Output;
+       User_Data  : System.Address := System.Null_Address;
+       After      : Boolean := False)
+    is
+       Current : Filter_List := Descriptor.Filters;
+ 
+    begin
+       if After then
+          while Current /= null and then Current.Next /= null loop
+             Current := Current.Next;
+          end loop;
+ 
+          if Current = null then
+             Descriptor.Filters :=
+               new Filter_List_Elem'
+                (Filter => Filter, Filter_On => Filter_On,
+                 User_Data => User_Data, Next => null);
+          else
+             Current.Next :=
+               new Filter_List_Elem'
+               (Filter => Filter, Filter_On => Filter_On,
+                User_Data => User_Data, Next => null);
+          end if;
+ 
+       else
+          Descriptor.Filters :=
+            new Filter_List_Elem'
+              (Filter => Filter, Filter_On => Filter_On,
+               User_Data => User_Data, Next => Descriptor.Filters);
+       end if;
+    end Add_Filter;
+ 
+    ------------------
+    -- Call_Filters --
+    ------------------
+ 
+    procedure Call_Filters
+      (Pid       : Process_Descriptor'Class;
+       Str       : String;
+       Filter_On : Filter_Type)
+    is
+       Current_Filter  : Filter_List;
+ 
+    begin
+       if Pid.Filters_Lock = 0 then
+          Current_Filter := Pid.Filters;
+ 
+          while Current_Filter /= null loop
+             if Current_Filter.Filter_On = Filter_On then
+                Current_Filter.Filter
+                  (Pid, Str, Current_Filter.User_Data);
+             end if;
+ 
+             Current_Filter := Current_Filter.Next;
+          end loop;
+       end if;
+    end Call_Filters;
+ 
+    -----------
+    -- Close --
+    -----------
+ 
+    procedure Close
+      (Descriptor : in out Process_Descriptor;
+       Status     : out Integer)
+    is
+    begin
+       Close (Descriptor.Input_Fd);
+ 
+       if Descriptor.Error_Fd /= Descriptor.Output_Fd then
+          Close (Descriptor.Error_Fd);
+       end if;
+ 
+       Close (Descriptor.Output_Fd);
+ 
+       --  ??? Should have timeouts for different signals
+       Kill (Descriptor.Pid, 9);
+ 
+       GNAT.OS_Lib.Free (Descriptor.Buffer);
+       Descriptor.Buffer_Size := 0;
+ 
+       Status := Waitpid (Descriptor.Pid);
+    end Close;
+ 
+    procedure Close (Descriptor : in out Process_Descriptor) is
+       Status : Integer;
+    begin
+       Close (Descriptor, Status);
+    end Close;
+ 
+    ------------
+    -- Expect --
+    ------------
+ 
+    procedure Expect
+      (Descriptor  : in out Process_Descriptor;
+       Result      : out Expect_Match;
+       Regexp      : String;
+       Timeout     : Integer := 10000;
+       Full_Buffer : Boolean := False)
+    is
+    begin
+       if Regexp = "" then
+          Expect (Descriptor, Result, Never_Match, Timeout, Full_Buffer);
+       else
+          Expect (Descriptor, Result, Compile (Regexp), Timeout, Full_Buffer);
+       end if;
+    end Expect;
+ 
+    procedure Expect
+      (Descriptor  : in out Process_Descriptor;
+       Result      : out Expect_Match;
+       Regexp      : String;
+       Matched     : out GNAT.Regpat.Match_Array;
+       Timeout     : Integer := 10000;
+       Full_Buffer : Boolean := False)
+    is
+    begin
+       pragma Assert (Matched'First = 0);
+       if Regexp = "" then
+          Expect
+            (Descriptor, Result, Never_Match, Matched, Timeout, Full_Buffer);
+       else
+          Expect
+            (Descriptor, Result, Compile (Regexp), Matched, Timeout,
+             Full_Buffer);
+       end if;
+    end Expect;
+ 
+    procedure Expect
+      (Descriptor  : in out Process_Descriptor;
+       Result      : out Expect_Match;
+       Regexp      : GNAT.Regpat.Pattern_Matcher;
+       Timeout     : Integer := 10000;
+       Full_Buffer : Boolean := False)
+    is
+       Matched : GNAT.Regpat.Match_Array (0 .. 0);
+ 
+    begin
+       Expect (Descriptor, Result, Regexp, Matched, Timeout, Full_Buffer);
+    end Expect;
+ 
+    procedure Expect
+      (Descriptor  : in out Process_Descriptor;
+       Result      : out Expect_Match;
+       Regexp      : GNAT.Regpat.Pattern_Matcher;
+       Matched     : out GNAT.Regpat.Match_Array;
+       Timeout     : Integer := 10000;
+       Full_Buffer : Boolean := False)
+    is
+       N           : Expect_Match;
+       Descriptors : Array_Of_Pd := (1 => Descriptor'Unrestricted_Access);
+       Try_Until   : constant Time := Clock + Duration (Timeout) / 1000.0;
+       Timeout_Tmp : Integer := Timeout;
+ 
+    begin
+       pragma Assert (Matched'First = 0);
+       Reinitialize_Buffer (Descriptor);
+ 
+       loop
+          --  First, test if what is already in the buffer matches (This is
+          --  required if this package is used in multi-task mode, since one of
+          --  the tasks might have added something in the buffer, and we don't
+          --  want other tasks to wait for new input to be available before
+          --  checking the regexps).
+ 
+          Match
+            (Regexp, Descriptor.Buffer (1 .. Descriptor.Buffer_Index), Matched);
+ 
+          if Descriptor.Buffer_Index >= 1 and then Matched (0).First /= 0 then
+             Result := 1;
+             Descriptor.Last_Match_Start := Matched (0).First;
+             Descriptor.Last_Match_End := Matched (0).Last;
+             return;
+          end if;
+ 
+          --  Else try to read new input
+ 
+          Expect_Internal (Descriptors, N, Timeout_Tmp, Full_Buffer);
+ 
+          if N = Expect_Timeout or else N = Expect_Full_Buffer then
+             Result := N;
+             return;
+          end if;
+ 
+          --  Calculate the timeout for the next turn.
+          --  Note that Timeout is, from the caller's perspective, the maximum
+          --  time until a match, not the maximum time until some output is
+          --  read, and thus can not be reused as is for Expect_Internal.
+ 
+          if Timeout /= -1 then
+             Timeout_Tmp := Integer (Try_Until - Clock) * 1000;
+ 
+             if Timeout_Tmp < 0 then
+                Result := Expect_Timeout;
+                exit;
+             end if;
+          end if;
+       end loop;
+ 
+       --  Even if we had the general timeout above, we have to test that the
+       --  last test we read from the external process didn't match.
+ 
+       Match
+         (Regexp, Descriptor.Buffer (1 .. Descriptor.Buffer_Index), Matched);
+ 
+       if Matched (0).First /= 0 then
+          Result := 1;
+          Descriptor.Last_Match_Start := Matched (0).First;
+          Descriptor.Last_Match_End := Matched (0).Last;
+          return;
+       end if;
+    end Expect;
+ 
+    procedure Expect
+      (Descriptor  : in out Process_Descriptor;
+       Result      : out Expect_Match;
+       Regexps     : Regexp_Array;
+       Timeout     : Integer := 10000;
+       Full_Buffer : Boolean := False)
+    is
+       Patterns : Compiled_Regexp_Array (Regexps'Range);
+       Matched  : GNAT.Regpat.Match_Array (0 .. 0);
+ 
+    begin
+       for J in Regexps'Range loop
+          Patterns (J) := new Pattern_Matcher'(Compile (Regexps (J).all));
+       end loop;
+ 
+       Expect (Descriptor, Result, Patterns, Matched, Timeout, Full_Buffer);
+ 
+       for J in Regexps'Range loop
+          Free (Patterns (J));
+       end loop;
+    end Expect;
+ 
+    procedure Expect
+      (Descriptor  : in out Process_Descriptor;
+       Result      : out Expect_Match;
+       Regexps     : Compiled_Regexp_Array;
+       Timeout     : Integer := 10000;
+       Full_Buffer : Boolean := False)
+    is
+       Matched : GNAT.Regpat.Match_Array (0 .. 0);
+ 
+    begin
+       Expect (Descriptor, Result, Regexps, Matched, Timeout, Full_Buffer);
+    end Expect;
+ 
+    procedure Expect
+      (Result      : out Expect_Match;
+       Regexps     : Multiprocess_Regexp_Array;
+       Timeout     : Integer := 10000;
+       Full_Buffer : Boolean := False)
+    is
+       Matched : GNAT.Regpat.Match_Array (0 .. 0);
+ 
+    begin
+       Expect (Result, Regexps, Matched, Timeout, Full_Buffer);
+    end Expect;
+ 
+    procedure Expect
+      (Descriptor  : in out Process_Descriptor;
+       Result      : out Expect_Match;
+       Regexps     : Regexp_Array;
+       Matched     : out GNAT.Regpat.Match_Array;
+       Timeout     : Integer := 10000;
+       Full_Buffer : Boolean := False)
+    is
+       Patterns : Compiled_Regexp_Array (Regexps'Range);
+ 
+    begin
+       pragma Assert (Matched'First = 0);
+ 
+       for J in Regexps'Range loop
+          Patterns (J) := new Pattern_Matcher'(Compile (Regexps (J).all));
+       end loop;
+ 
+       Expect (Descriptor, Result, Patterns, Matched, Timeout, Full_Buffer);
+ 
+       for J in Regexps'Range loop
+          Free (Patterns (J));
+       end loop;
+    end Expect;
+ 
+    procedure Expect
+      (Descriptor  : in out Process_Descriptor;
+       Result      : out Expect_Match;
+       Regexps     : Compiled_Regexp_Array;
+       Matched     : out GNAT.Regpat.Match_Array;
+       Timeout     : Integer := 10000;
+       Full_Buffer : Boolean := False)
+    is
+       N           : Expect_Match;
+       Descriptors : Array_Of_Pd := (1 => Descriptor'Unrestricted_Access);
+ 
+    begin
+       pragma Assert (Matched'First = 0);
+ 
+       Reinitialize_Buffer (Descriptor);
+ 
+       loop
+          --  First, test if what is already in the buffer matches (This is
+          --  required if this package is used in multi-task mode, since one of
+          --  the tasks might have added something in the buffer, and we don't
+          --  want other tasks to wait for new input to be available before
+          --  checking the regexps).
+ 
+          if Descriptor.Buffer /= null then
+             for J in Regexps'Range loop
+                Match
+                  (Regexps (J).all,
+                   Descriptor.Buffer (1 .. Descriptor.Buffer_Index),
+                   Matched);
+ 
+                if Matched (0) /= No_Match then
+                   Result := Expect_Match (J);
+                   Descriptor.Last_Match_Start := Matched (0).First;
+                   Descriptor.Last_Match_End := Matched (0).Last;
+                   return;
+                end if;
+             end loop;
+          end if;
+ 
+          Expect_Internal (Descriptors, N, Timeout, Full_Buffer);
+ 
+          if N = Expect_Timeout or else N = Expect_Full_Buffer then
+             Result := N;
+             return;
+          end if;
+       end loop;
+    end Expect;
+ 
+    procedure Expect
+      (Result      : out Expect_Match;
+       Regexps     : Multiprocess_Regexp_Array;
+       Matched     : out GNAT.Regpat.Match_Array;
+       Timeout     : Integer := 10000;
+       Full_Buffer : Boolean := False)
+    is
+       N           : Expect_Match;
+       Descriptors : Array_Of_Pd (Regexps'Range);
+ 
+    begin
+       pragma Assert (Matched'First = 0);
+ 
+       for J in Descriptors'Range loop
+          Descriptors (J) := Regexps (J).Descriptor;
+          Reinitialize_Buffer (Regexps (J).Descriptor.all);
+       end loop;
+ 
+       loop
+          --  First, test if what is already in the buffer matches (This is
+          --  required if this package is used in multi-task mode, since one of
+          --  the tasks might have added something in the buffer, and we don't
+          --  want other tasks to wait for new input to be available before
+          --  checking the regexps).
+ 
+          for J in Regexps'Range loop
+             Match (Regexps (J).Regexp.all,
+                    Regexps (J).Descriptor.Buffer
+                      (1 .. Regexps (J).Descriptor.Buffer_Index),
+                    Matched);
+ 
+             if Matched (0) /= No_Match then
+                Result := Expect_Match (J);
+                Regexps (J).Descriptor.Last_Match_Start := Matched (0).First;
+                Regexps (J).Descriptor.Last_Match_End := Matched (0).Last;
+                return;
+             end if;
+          end loop;
+ 
+          Expect_Internal (Descriptors, N, Timeout, Full_Buffer);
+ 
+          if N = Expect_Timeout or else N = Expect_Full_Buffer then
+             Result := N;
+             return;
+          end if;
+       end loop;
+    end Expect;
+ 
+    ---------------------
+    -- Expect_Internal --
+    ---------------------
+ 
+    procedure Expect_Internal
+      (Descriptors : in out Array_Of_Pd;
+       Result      : out Expect_Match;
+       Timeout     : Integer;
+       Full_Buffer : Boolean)
+    is
+       Num_Descriptors : Integer;
+       Buffer_Size     : Integer := 0;
+ 
+       N : Integer;
+ 
+       type File_Descriptor_Array is
+         array (Descriptors'Range) of File_Descriptor;
+       Fds : aliased File_Descriptor_Array;
+ 
+       type Integer_Array is array (Descriptors'Range) of Integer;
+       Is_Set : aliased Integer_Array;
+ 
+    begin
+       for J in Descriptors'Range loop
+          Fds (J) := Descriptors (J).Output_Fd;
+ 
+          if Descriptors (J).Buffer_Size = 0 then
+             Buffer_Size := Integer'Max (Buffer_Size, 4096);
+          else
+             Buffer_Size :=
+               Integer'Max (Buffer_Size, Descriptors (J).Buffer_Size);
+          end if;
+       end loop;
+ 
+       declare
+          Buffer : aliased String (1 .. Buffer_Size);
+          --  Buffer used for input. This is allocated only once, not for
+          --  every iteration of the loop
+ 
+       begin
+          --  Loop until we match or we have a timeout
+ 
+          loop
+             Num_Descriptors :=
+               Poll (Fds'Address, Fds'Length, Timeout, Is_Set'Address);
+ 
+             case Num_Descriptors is
+ 
+                --  Error?
+ 
+                when -1 =>
+                   raise Process_Died;
+ 
+                --  Timeout?
+ 
+                when 0  =>
+                   Result := Expect_Timeout;
+                   return;
+ 
+                --  Some input
+ 
+                when others =>
+                   for J in Descriptors'Range loop
+                      if Is_Set (J) = 1 then
+                         Buffer_Size := Descriptors (J).Buffer_Size;
+ 
+                         if Buffer_Size = 0 then
+                            Buffer_Size := 4096;
+                         end if;
+ 
+                         N := Read (Descriptors (J).Output_Fd, Buffer'Address,
+                                    Buffer_Size);
+ 
+                         --  Error or End of file
+ 
+                         if N <= 0 then
+                            --  ??? Note that ddd tries again up to three times
+                            --  in that case. See LiterateA.C:174
+                            raise Process_Died;
+ 
+                         else
+                            --  If there is no limit to the buffer size
+ 
+                            if Descriptors (J).Buffer_Size = 0 then
+ 
+                               declare
+                                  Tmp : String_Access := Descriptors (J).Buffer;
+ 
+                               begin
+                                  if Tmp /= null then
+                                     Descriptors (J).Buffer :=
+                                       new String (1 .. Tmp'Length + N);
+                                     Descriptors (J).Buffer (1 .. Tmp'Length) :=
+                                       Tmp.all;
+                                     Descriptors (J).Buffer
+                                       (Tmp'Length + 1 .. Tmp'Length + N) :=
+                                       Buffer (1 .. N);
+                                     Free (Tmp);
+                                     Descriptors (J).Buffer_Index :=
+                                       Descriptors (J).Buffer'Last;
+ 
+                                  else
+                                     Descriptors (J).Buffer :=
+                                       new String (1 .. N);
+                                     Descriptors (J).Buffer.all :=
+                                       Buffer (1 .. N);
+                                     Descriptors (J).Buffer_Index := N;
+                                  end if;
+                               end;
+ 
+                            else
+                               --  Add what we read to the buffer
+ 
+                               if Descriptors (J).Buffer_Index + N - 1 >
+                                 Descriptors (J).Buffer_Size
+                               then
+                                  --  If the user wants to know when we have
+                                  --  read more than the buffer can contain.
+ 
+                                  if Full_Buffer then
+                                     Result := Expect_Full_Buffer;
+                                     return;
+                                  end if;
+ 
+                                  --  Keep as much as possible from the buffer,
+                                  --  and forget old characters.
+ 
+                                  Descriptors (J).Buffer
+                                    (1 .. Descriptors (J).Buffer_Size - N) :=
+                                   Descriptors (J).Buffer
+                                    (N - Descriptors (J).Buffer_Size +
+                                     Descriptors (J).Buffer_Index + 1 ..
+                                     Descriptors (J).Buffer_Index);
+                                  Descriptors (J).Buffer_Index :=
+                                    Descriptors (J).Buffer_Size - N;
+                               end if;
+ 
+                               --  Keep what we read in the buffer.
+ 
+                               Descriptors (J).Buffer
+                                 (Descriptors (J).Buffer_Index + 1 ..
+                                  Descriptors (J).Buffer_Index + N) :=
+                                 Buffer (1 .. N);
+                               Descriptors (J).Buffer_Index :=
+                                 Descriptors (J).Buffer_Index + N;
+                            end if;
+ 
+                            --  Call each of the output filter with what we
+                            --  read.
+ 
+                            Call_Filters
+                              (Descriptors (J).all, Buffer (1 .. N), Output);
+ 
+                            Result := Expect_Match (N);
+                            return;
+                         end if;
+                      end if;
+                   end loop;
+             end case;
+          end loop;
+       end;
+    end Expect_Internal;
+ 
+    ----------------
+    -- Expect_Out --
+    ----------------
+ 
+    function Expect_Out (Descriptor : Process_Descriptor) return String is
+    begin
+       return Descriptor.Buffer (1 .. Descriptor.Last_Match_End);
+    end Expect_Out;
+ 
+    ----------------------
+    -- Expect_Out_Match --
+    ----------------------
+ 
+    function Expect_Out_Match (Descriptor : Process_Descriptor) return String is
+    begin
+       return Descriptor.Buffer
+         (Descriptor.Last_Match_Start .. Descriptor.Last_Match_End);
+    end Expect_Out_Match;
+ 
+    -----------
+    -- Flush --
+    -----------
+ 
+    procedure Flush
+      (Descriptor : in out Process_Descriptor;
+       Timeout    : Integer := 0)
+    is
+       Buffer_Size     : constant Integer := 8192;
+       Num_Descriptors : Integer;
+       N               : Integer;
+       Is_Set          : aliased Integer;
+       Buffer          : aliased String (1 .. Buffer_Size);
+ 
+    begin
+       --  Empty the current buffer
+ 
+       Descriptor.Last_Match_End := Descriptor.Buffer_Index;
+       Reinitialize_Buffer (Descriptor);
+ 
+       --  Read everything from the process to flush its output
+ 
+       loop
+          Num_Descriptors :=
+            Poll (Descriptor.Output_Fd'Address, 1, Timeout, Is_Set'Address);
+ 
+          case Num_Descriptors is
+ 
+             --  Error ?
+ 
+             when -1 =>
+                raise Process_Died;
+ 
+             --  Timeout => End of flush
+ 
+             when 0  =>
+                return;
+ 
+             --  Some input
+ 
+             when others =>
+                if Is_Set = 1 then
+                   N := Read (Descriptor.Output_Fd, Buffer'Address,
+                              Buffer_Size);
+ 
+                   if N = -1 then
+                      raise Process_Died;
+                   elsif N = 0 then
+                      return;
+                   end if;
+                end if;
+          end case;
+       end loop;
+ 
+    end Flush;
+ 
+    ------------------
+    -- Get_Error_Fd --
+    ------------------
+ 
+    function Get_Error_Fd
+      (Descriptor : Process_Descriptor) return GNAT.OS_Lib.File_Descriptor
+    is
+    begin
+       return Descriptor.Error_Fd;
+    end Get_Error_Fd;
+ 
+    ------------------
+    -- Get_Input_Fd --
+    ------------------
+ 
+    function Get_Input_Fd
+      (Descriptor : Process_Descriptor) return GNAT.OS_Lib.File_Descriptor
+    is
+    begin
+       return Descriptor.Input_Fd;
+    end Get_Input_Fd;
+ 
+    -------------------
+    -- Get_Output_Fd --
+    -------------------
+ 
+    function Get_Output_Fd
+      (Descriptor : Process_Descriptor) return GNAT.OS_Lib.File_Descriptor
+    is
+    begin
+       return Descriptor.Output_Fd;
+    end Get_Output_Fd;
+ 
+    -------------
+    -- Get_Pid --
+    -------------
+ 
+    function Get_Pid
+      (Descriptor : Process_Descriptor) return Process_Id
+    is
+    begin
+       return Descriptor.Pid;
+    end Get_Pid;
+ 
+    ---------------
+    -- Interrupt --
+    ---------------
+ 
+    procedure Interrupt (Descriptor : in out Process_Descriptor) is
+       SIGINT : constant := 2;
+ 
+    begin
+       Send_Signal (Descriptor, SIGINT);
+    end Interrupt;
+ 
+    ------------------
+    -- Lock_Filters --
+    ------------------
+ 
+    procedure Lock_Filters (Descriptor : in out Process_Descriptor) is
+    begin
+       Descriptor.Filters_Lock := Descriptor.Filters_Lock + 1;
+    end Lock_Filters;
+ 
+    ------------------------
+    -- Non_Blocking_Spawn --
+    ------------------------
+ 
+    procedure Non_Blocking_Spawn
+      (Descriptor  : out Process_Descriptor'Class;
+       Command     : String;
+       Args        : GNAT.OS_Lib.Argument_List;
+       Buffer_Size : Natural := 4096;
+       Err_To_Out  : Boolean := False)
+    is separate;
+ 
+    -------------------------
+    -- Reinitialize_Buffer --
+    -------------------------
+ 
+    procedure Reinitialize_Buffer
+      (Descriptor : in out Process_Descriptor'Class)
+    is
+    begin
+       if Descriptor.Buffer_Size = 0 then
+          declare
+             Tmp : String_Access := Descriptor.Buffer;
+ 
+          begin
+             Descriptor.Buffer :=
+               new String
+                 (1 .. Descriptor.Buffer_Index - Descriptor.Last_Match_End);
+ 
+             if Tmp /= null then
+                Descriptor.Buffer.all := Tmp
+                  (Descriptor.Last_Match_End + 1 .. Descriptor.Buffer_Index);
+                Free (Tmp);
+             end if;
+          end;
+ 
+          Descriptor.Buffer_Index := Descriptor.Buffer'Last;
+ 
+       else
+          Descriptor.Buffer
+            (1 .. Descriptor.Buffer_Index - Descriptor.Last_Match_End) :=
+              Descriptor.Buffer
+                (Descriptor.Last_Match_End + 1 .. Descriptor.Buffer_Index);
+ 
+          if Descriptor.Buffer_Index > Descriptor.Last_Match_End then
+             Descriptor.Buffer_Index :=
+               Descriptor.Buffer_Index - Descriptor.Last_Match_End;
+          else
+             Descriptor.Buffer_Index := 0;
+          end if;
+       end if;
+ 
+       Descriptor.Last_Match_Start := 0;
+       Descriptor.Last_Match_End := 0;
+    end Reinitialize_Buffer;
+ 
+    -------------------
+    -- Remove_Filter --
+    -------------------
+ 
+    procedure Remove_Filter
+      (Descriptor : in out Process_Descriptor;
+       Filter     : Filter_Function)
+    is
+       Previous : Filter_List := null;
+       Current  : Filter_List := Descriptor.Filters;
+ 
+    begin
+       while Current /= null loop
+          if Current.Filter = Filter then
+             if Previous = null then
+                Descriptor.Filters := Current.Next;
+             else
+                Previous.Next := Current.Next;
+             end if;
+          end if;
+ 
+          Previous := Current;
+          Current := Current.Next;
+       end loop;
+    end Remove_Filter;
+ 
+    ----------
+    -- Send --
+    ----------
+ 
+    procedure Send
+      (Descriptor   : in out Process_Descriptor;
+       Str          : String;
+       Add_LF       : Boolean := True;
+       Empty_Buffer : Boolean := False)
+    is
+       Full_Str    : constant String := Str & ASCII.LF;
+       Last        : Natural;
+       Result      : Expect_Match;
+       Descriptors : Array_Of_Pd := (1 => Descriptor'Unrestricted_Access);
+ 
+       Discard : Natural;
+       pragma Unreferenced (Discard);
+ 
+    begin
+       if Empty_Buffer then
+ 
+          --  Force a read on the process if there is anything waiting
+ 
+          Expect_Internal (Descriptors, Result,
+                           Timeout => 0, Full_Buffer => False);
+          Descriptor.Last_Match_End := Descriptor.Buffer_Index;
+ 
+          --  Empty the buffer
+ 
+          Reinitialize_Buffer (Descriptor);
+       end if;
+ 
+       if Add_LF then
+          Last := Full_Str'Last;
+       else
+          Last := Full_Str'Last - 1;
+       end if;
+ 
+       Call_Filters (Descriptor, Full_Str (Full_Str'First .. Last), Input);
+ 
+       Discard := Write (Descriptor.Input_Fd,
+                         Full_Str'Address,
+                         Last - Full_Str'First + 1);
+       --  Shouldn't we at least have a pragma Assert on the result ???
+    end Send;
+ 
+    -----------------
+    -- Send_Signal --
+    -----------------
+ 
+    procedure Send_Signal
+      (Descriptor : Process_Descriptor;
+       Signal     : Integer)
+    is
+    begin
+       Kill (Descriptor.Pid, Signal);
+       --  ??? Need to check process status here.
+    end Send_Signal;
+ 
+    ---------------------------------
+    -- Set_Up_Child_Communications --
+    ---------------------------------
+ 
+    procedure Set_Up_Child_Communications
+      (Pid   : in out Process_Descriptor;
+       Pipe1 : in out Pipe_Type;
+       Pipe2 : in out Pipe_Type;
+       Pipe3 : in out Pipe_Type;
+       Cmd   : in String;
+       Args  : in System.Address)
+    is
+       pragma Warnings (Off, Pid);
+ 
+    begin
+       --  Since the code between fork and exec on VMS executes
+       --  in the context of the parent process, we need to
+       --  perform the following actions:
+       --    - save stdin, stdout, stderr
+       --    - replace them by our pipes
+       --    - create the child with process handle inheritance
+       --    - revert to the previous stdin, stdout and stderr.
+ 
+       Save_Input  := Dup (GNAT.OS_Lib.Standin);
+       Save_Output := Dup (GNAT.OS_Lib.Standout);
+       Save_Error  := Dup (GNAT.OS_Lib.Standerr);
+ 
+       --  Since we are still called from the parent process, there is no way
+       --  currently we can cleanly close the unneeded ends of the pipes, but
+       --  this doesn't really matter.
+       --  We could close Pipe1.Output, Pipe2.Input, Pipe3.Input.
+ 
+       Dup2 (Pipe1.Input,  GNAT.OS_Lib.Standin);
+       Dup2 (Pipe2.Output, GNAT.OS_Lib.Standout);
+       Dup2 (Pipe3.Output, GNAT.OS_Lib.Standerr);
+ 
+       Portable_Execvp (Pid.Pid'Access, Cmd & ASCII.Nul, Args);
+ 
+    end Set_Up_Child_Communications;
+ 
+    ---------------------------
+    -- Set_Up_Communications --
+    ---------------------------
+ 
+    procedure Set_Up_Communications
+      (Pid        : in out Process_Descriptor;
+       Err_To_Out : Boolean;
+       Pipe1      : access Pipe_Type;
+       Pipe2      : access Pipe_Type;
+       Pipe3      : access Pipe_Type)
+    is
+    begin
+       --  Create the pipes
+ 
+       if Create_Pipe (Pipe1) /= 0 then
+          return;
+       end if;
+ 
+       if Create_Pipe (Pipe2) /= 0 then
+          return;
+       end if;
+ 
+       Pid.Input_Fd  := Pipe1.Output;
+       Pid.Output_Fd := Pipe2.Input;
+ 
+       if Err_To_Out then
+          Pipe3.all := Pipe2.all;
+       else
+          if Create_Pipe (Pipe3) /= 0 then
+             return;
+          end if;
+       end if;
+ 
+       Pid.Error_Fd := Pipe3.Input;
+    end Set_Up_Communications;
+ 
+    ----------------------------------
+    -- Set_Up_Parent_Communications --
+    ----------------------------------
+ 
+    procedure Set_Up_Parent_Communications
+      (Pid   : in out Process_Descriptor;
+       Pipe1 : in out Pipe_Type;
+       Pipe2 : in out Pipe_Type;
+       Pipe3 : in out Pipe_Type)
+    is
+       pragma Warnings (Off, Pid);
+ 
+    begin
+ 
+       Dup2 (Save_Input,  GNAT.OS_Lib.Standin);
+       Dup2 (Save_Output, GNAT.OS_Lib.Standout);
+       Dup2 (Save_Error,  GNAT.OS_Lib.Standerr);
+ 
+       Close (Save_Input);
+       Close (Save_Output);
+       Close (Save_Error);
+ 
+       Close (Pipe1.Input);
+       Close (Pipe2.Output);
+       Close (Pipe3.Output);
+    end Set_Up_Parent_Communications;
+ 
+    ------------------
+    -- Trace_Filter --
+    ------------------
+ 
+    procedure Trace_Filter
+      (Descriptor : Process_Descriptor'Class;
+       Str        : String;
+       User_Data  : System.Address := System.Null_Address)
+    is
+       pragma Warnings (Off, Descriptor);
+       pragma Warnings (Off, User_Data);
+ 
+    begin
+       GNAT.IO.Put (Str);
+    end Trace_Filter;
+ 
+    --------------------
+    -- Unlock_Filters --
+    --------------------
+ 
+    procedure Unlock_Filters (Descriptor : in out Process_Descriptor) is
+    begin
+       if Descriptor.Filters_Lock > 0 then
+          Descriptor.Filters_Lock := Descriptor.Filters_Lock - 1;
+       end if;
+    end Unlock_Filters;
+ 
+ end GNAT.Expect;
diff -Nrcpad gcc-3.4.3/gcc/ada/g-expect.adb gcc-4.0.0/gcc/ada/g-expect.adb
*** gcc-3.4.3/gcc/ada/g-expect.adb	Tue Oct 21 13:42:00 2003
--- gcc-4.0.0/gcc/ada/g-expect.adb	Thu Feb 10 13:51:58 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 2000-2003 Ada Core Technologies, Inc.            --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 2000-2005 Ada Core Technologies, Inc.            --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body GNAT.Expect is
*** 1123,1128 ****
--- 1123,1130 ----
        Pipe2      : access Pipe_Type;
        Pipe3      : access Pipe_Type)
     is
+       Status : Boolean;
+ 
     begin
        --  Create the pipes
  
*************** package body GNAT.Expect is
*** 1134,1151 ****
--- 1136,1171 ----
           return;
        end if;
  
+       --  Record the 'parent' end of the two pipes in Pid:
+       --    Child stdin  is connected to the 'write' end of Pipe1;
+       --    Child stdout is connected to the 'read'  end of Pipe2.
+       --  We do not want these descriptors to remain open in the child
+       --  process, so we mark them close-on-exec/non-inheritable.
+ 
        Pid.Input_Fd  := Pipe1.Output;
+       Set_Close_On_Exec (Pipe1.Output, True, Status);
        Pid.Output_Fd := Pipe2.Input;
+       Set_Close_On_Exec (Pipe2.Input, True, Status);
  
        if Err_To_Out then
+ 
+          --  Reuse the standard output pipe for standard error
+ 
           Pipe3.all := Pipe2.all;
        else
+ 
+          --  Create a separate pipe for standard error
+ 
           if Create_Pipe (Pipe3) /= 0 then
              return;
           end if;
        end if;
  
+       --  As above, we record the proper fd for the child's
+       --  standard error stream.
+ 
        Pid.Error_Fd := Pipe3.Input;
+       Set_Close_On_Exec (Pipe3.Input, True, Status);
     end Set_Up_Communications;
  
     ----------------------------------
diff -Nrcpad gcc-3.4.3/gcc/ada/g-expect.ads gcc-4.0.0/gcc/ada/g-expect.ads
*** gcc-3.4.3/gcc/ada/g-expect.ads	Tue Oct 21 13:42:00 2003
--- gcc-4.0.0/gcc/ada/g-expect.ads	Fri Nov 19 11:26:07 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 2000-2003 Ada Core Technologies, Inc.            --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 2000-2004 Ada Core Technologies, Inc.            --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 49,55 ****
  
  --      Non_Blocking_Spawn
  --         (Fd, "ftp",
! --           (1 => new String' ("machine@domaine")));
  --      Timeout := 10000;  --  10 seconds
  --      Expect (Fd, Result, Regexp_Array'(+"\(user\)", +"\(passwd\)"),
  --              Timeout);
--- 49,55 ----
  
  --      Non_Blocking_Spawn
  --         (Fd, "ftp",
! --           (1 => new String' ("machine@domain")));
  --      Timeout := 10000;  --  10 seconds
  --      Expect (Fd, Result, Regexp_Array'(+"\(user\)", +"\(passwd\)"),
  --              Timeout);
***************
*** 68,74 ****
  --  name of the language by doing:
  
  --      declare
! --         Matched : Regexp_Array (0 .. 2);
  --      begin
  --         Expect (Fd, Result, "lang=(optional)? ([a-z]+)", Matched);
  --         Put_Line ("Seen: " &
--- 68,74 ----
  --  name of the language by doing:
  
  --      declare
! --         Matched : Match_Array (0 .. 2);
  --      begin
  --         Expect (Fd, Result, "lang=(optional)? ([a-z]+)", Matched);
  --         Put_Line ("Seen: " &
*************** package GNAT.Expect is
*** 309,316 ****
  
     function "+" (S : String) return GNAT.OS_Lib.String_Access;
     --  Allocate some memory for the string. This is merely a convenience
!    --  convenience function to help create the array of regexps in the
!    --  call to Expect.
  
     procedure Expect
       (Descriptor  : in out Process_Descriptor;
--- 309,315 ----
  
     function "+" (S : String) return GNAT.OS_Lib.String_Access;
     --  Allocate some memory for the string. This is merely a convenience
!    --  function to help create the array of regexps in the call to Expect.
  
     procedure Expect
       (Descriptor  : in out Process_Descriptor;
diff -Nrcpad gcc-3.4.3/gcc/ada/g-md5.adb gcc-4.0.0/gcc/ada/g-md5.adb
*** gcc-3.4.3/gcc/ada/g-md5.adb	Tue Oct 21 13:42:03 2003
--- gcc-4.0.0/gcc/ada/g-md5.adb	Mon Feb  2 12:31:52 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --              Copyright (C) 2002 Ada Core Technologies, Inc.              --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --            Copyright (C) 2002-2004 Ada Core Technologies, Inc.           --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body GNAT.MD5 is
*** 173,178 ****
--- 173,182 ----
        Cur : Natural := 1;
        --  Index in Result where the next character will be placed.
  
+       Last_Block : String (1 .. 64);
+ 
+       C1 : Context := C;
+ 
        procedure Convert (X : Unsigned_32);
        --  Put the contribution of one of the four words (A, B, C, D) of the
        --  Context in Result. Increments Cur.
*************** package body GNAT.MD5 is
*** 197,223 ****
     --  Start of processing for Digest
  
     begin
!       Convert (C.A);
!       Convert (C.B);
!       Convert (C.C);
!       Convert (C.D);
        return Result;
     end Digest;
  
     function Digest (S : String) return Message_Digest is
        C : Context;
- 
     begin
        Update (C, S);
        return Digest (C);
     end Digest;
  
     function Digest
!      (A    : Ada.Streams.Stream_Element_Array)
!       return Message_Digest
     is
        C : Context;
- 
     begin
        Update (C, A);
        return Digest (C);
--- 201,255 ----
     --  Start of processing for Digest
  
     begin
!       --  Process characters in the context buffer, if any
! 
!       Last_Block (1 .. C.Last) := C.Buffer (1 .. C.Last);
! 
!       if C.Last > 56 then
!          Last_Block (C.Last + 1 .. 64) := Padding (1 .. 64 - C.Last);
!          Transform (C1, Last_Block);
!          Last_Block := (others => ASCII.NUL);
! 
!       else
!          Last_Block (C.Last + 1 .. 56) := Padding (1 .. 56 - C.Last);
!       end if;
! 
!       --  Add the input length (as stored in the context) as 8 characters
! 
!       Last_Block (57 .. 64) := (others => ASCII.NUL);
! 
!       declare
!          L : Unsigned_64 := Unsigned_64 (C.Length) * 8;
!          Idx : Positive := 57;
! 
!       begin
!          while L > 0 loop
!             Last_Block (Idx) := Character'Val (L and 16#Ff#);
!             L := Shift_Right (L, 8);
!             Idx := Idx + 1;
!          end loop;
!       end;
! 
!       Transform (C1, Last_Block);
! 
!       Convert (C1.A);
!       Convert (C1.B);
!       Convert (C1.C);
!       Convert (C1.D);
        return Result;
     end Digest;
  
     function Digest (S : String) return Message_Digest is
        C : Context;
     begin
        Update (C, S);
        return Digest (C);
     end Digest;
  
     function Digest
!      (A : Ada.Streams.Stream_Element_Array) return Message_Digest
     is
        C : Context;
     begin
        Update (C, A);
        return Digest (C);
*************** package body GNAT.MD5 is
*** 450,494 ****
       (C     : in out Context;
        Input : String)
     is
!       Cur        : Positive := Input'First;
!       Last_Block : String (1 .. 64);
  
     begin
!       while Cur + 63 <= Input'Last loop
!          Transform (C, Input (Cur .. Cur + 63));
           Cur := Cur + 64;
        end loop;
  
!       Last_Block (1 .. Input'Last - Cur + 1) := Input (Cur .. Input'Last);
! 
!       if Input'Last - Cur + 1 > 56 then
!          Cur := Input'Last - Cur + 2;
!          Last_Block (Cur .. 64) := Padding (1 .. 64 - Cur + 1);
!          Transform (C, Last_Block);
!          Last_Block := (others => ASCII.NUL);
! 
!       else
!          Cur := Input'Last - Cur + 2;
!          Last_Block (Cur .. 56) := Padding (1 .. 56 - Cur + 1);
!       end if;
! 
!       --  Add the input length as 8 characters
! 
!       Last_Block (57 .. 64) := (others => ASCII.NUL);
! 
!       declare
!          L : Unsigned_64 := Unsigned_64 (Input'Length) * 8;
! 
!       begin
!          Cur := 57;
!          while L > 0 loop
!             Last_Block (Cur) := Character'Val (L and 16#Ff#);
!             L := Shift_Right (L, 8);
!             Cur := Cur + 1;
!          end loop;
!       end;
! 
!       Transform (C, Last_Block);
     end Update;
  
     procedure Update
--- 482,500 ----
       (C     : in out Context;
        Input : String)
     is
!       Inp : constant String := C.Buffer (1 .. C.Last) & Input;
!       Cur        : Positive := Inp'First;
  
     begin
!       C.Length := C.Length + Input'Length;
! 
!       while Cur + 63 <= Inp'Last loop
!          Transform (C, Inp (Cur .. Cur + 63));
           Cur := Cur + 64;
        end loop;
  
!       C.Last := Inp'Last - Cur + 1;
!       C.Buffer (1 .. C.Last) := Inp (Cur .. Inp'Last);
     end Update;
  
     procedure Update
diff -Nrcpad gcc-3.4.3/gcc/ada/g-md5.ads gcc-4.0.0/gcc/ada/g-md5.ads
*** gcc-3.4.3/gcc/ada/g-md5.ads	Tue Oct 21 13:42:03 2003
--- gcc-4.0.0/gcc/ada/g-md5.ads	Mon Feb  2 12:31:52 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 2002-2003 Ada Core Technologies, Inc.            --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 2002-2004 Ada Core Technologies, Inc.            --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package GNAT.MD5 is
*** 66,72 ****
     --  the Message-Digest of Input.
     --
     --  These procedures may be called successively with the same context and
!    --  different inputs. However, several successive calls will not produce
     --  the same final context as a call with the concatenation of the inputs.
  
     subtype Message_Digest is String (1 .. 32);
--- 66,72 ----
     --  the Message-Digest of Input.
     --
     --  These procedures may be called successively with the same context and
!    --  different inputs, and these several successive calls will produce
     --  the same final context as a call with the concatenation of the inputs.
  
     subtype Message_Digest is String (1 .. 32);
*************** private
*** 98,106 ****
        B : Interfaces.Unsigned_32 := Initial_B;
        C : Interfaces.Unsigned_32 := Initial_C;
        D : Interfaces.Unsigned_32 := Initial_D;
     end record;
  
     Initial_Context : constant Context :=
!      (A => Initial_A, B => Initial_B, C => Initial_C, D => Initial_D);
  
  end GNAT.MD5;
--- 98,110 ----
        B : Interfaces.Unsigned_32 := Initial_B;
        C : Interfaces.Unsigned_32 := Initial_C;
        D : Interfaces.Unsigned_32 := Initial_D;
+       Buffer : String (1 .. 64)  := (others => ASCII.NUL);
+       Last   : Natural := 0;
+       Length : Natural := 0;
     end record;
  
     Initial_Context : constant Context :=
!      (A => Initial_A, B => Initial_B, C => Initial_C, D => Initial_D,
!       Buffer => (others => ASCII.NUL), Last => 0, Length => 0);
  
  end GNAT.MD5;
diff -Nrcpad gcc-3.4.3/gcc/ada/g-os_lib.adb gcc-4.0.0/gcc/ada/g-os_lib.adb
*** gcc-3.4.3/gcc/ada/g-os_lib.adb	Mon Dec 15 11:51:00 2003
--- gcc-4.0.0/gcc/ada/g-os_lib.adb	Thu Feb 10 13:51:58 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 1995-2003 Ada Core Technologies, Inc.            --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 1995-2005 Ada Core Technologies, Inc.            --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with System; use System;
*** 39,44 ****
--- 39,54 ----
  
  package body GNAT.OS_Lib is
  
+    OpenVMS : Boolean;
+    --  Note: OpenVMS should be a constant, but it cannot be, because it
+    --        prevents bootstrapping on some platforms.
+ 
+    On_Windows : constant Boolean := Directory_Separator = '\';
+ 
+    pragma Import (Ada, OpenVMS, "system__openvms");
+    --  Needed to avoid doing useless checks when non on a VMS platform (see
+    --  Normalize_Pathname).
+ 
     package SSL renames System.Soft_Links;
  
     --  The following are used by Create_Temp_File
*************** package body GNAT.OS_Lib is
*** 660,665 ****
--- 670,692 ----
        return Create_New_File (C_Name (C_Name'First)'Address, Fmode);
     end Create_New_File;
  
+    -----------------------------
+    -- Create_Output_Text_File --
+    -----------------------------
+ 
+    function Create_Output_Text_File (Name  : String) return File_Descriptor is
+       function C_Create_File
+         (Name  : C_File_Name) return File_Descriptor;
+       pragma Import (C, C_Create_File, "__gnat_create_output_file");
+ 
+       C_Name : String (1 .. Name'Length + 1);
+ 
+    begin
+       C_Name (1 .. Name'Length) := Name;
+       C_Name (C_Name'Last)      := ASCII.NUL;
+       return C_Create_File (C_Name (C_Name'First)'Address);
+    end Create_Output_Text_File;
+ 
     ----------------------
     -- Create_Temp_File --
     ----------------------
*************** package body GNAT.OS_Lib is
*** 1048,1054 ****
        S  : Integer;
  
     begin
!       --  Use the global lock because To_GM_Time is not thread safe.
  
        Locked_Processing : begin
           SSL.Lock_Task.all;
--- 1075,1081 ----
        S  : Integer;
  
     begin
!       --  Use the global lock because To_GM_Time is not thread safe
  
        Locked_Processing : begin
           SSL.Lock_Task.all;
*************** package body GNAT.OS_Lib is
*** 1093,1108 ****
     ----------------------
  
     function Is_Absolute_Path (Name : String) return Boolean is
!       function Is_Absolute_Path (Name : Address) return Integer;
        pragma Import (C, Is_Absolute_Path, "__gnat_is_absolute_path");
  
-       F_Name : String (1 .. Name'Length + 1);
- 
     begin
!       F_Name (1 .. Name'Length) := Name;
!       F_Name (F_Name'Last)      := ASCII.NUL;
! 
!       return Is_Absolute_Path (F_Name'Address) /= 0;
     end Is_Absolute_Path;
  
     ------------------
--- 1120,1132 ----
     ----------------------
  
     function Is_Absolute_Path (Name : String) return Boolean is
!       function Is_Absolute_Path
!         (Name   : Address;
!          Length : Integer) return Integer;
        pragma Import (C, Is_Absolute_Path, "__gnat_is_absolute_path");
  
     begin
!       return Is_Absolute_Path (Name'Address, Name'Length) /= 0;
     end Is_Absolute_Path;
  
     ------------------
*************** package body GNAT.OS_Lib is
*** 1517,1522 ****
--- 1541,1554 ----
                    Buffer (Path_Len) := Directory_Separator;
                 end if;
  
+                --  By default, the drive letter on Windows is in upper case
+ 
+                if On_Windows and then Path_Len >= 2 and then
+                  Buffer (2) = ':'
+                then
+                   System.Case_Util.To_Upper (Buffer (1 .. 1));
+                end if;
+ 
                 return Buffer (1 .. Path_Len);
              end;
           end if;
*************** package body GNAT.OS_Lib is
*** 1533,1538 ****
--- 1565,1572 ----
           S1 : String := S;
           --  We may need to fold S to lower case, so we need a variable
  
+          Last : Natural;
+ 
        begin
           --  Interix has the non standard notion of disk drive
           --  indicated by two '/' followed by a capital letter
*************** package body GNAT.OS_Lib is
*** 1552,1576 ****
              begin
                 Result (1) := '/';
                 Result (2 .. Result'Last) := S;
  
                 if Fold_To_Lower_Case then
                    System.Case_Util.To_Lower (Result);
                 end if;
  
!                return Result;
  
              end;
  
           else
- 
              if Fold_To_Lower_Case then
                 System.Case_Util.To_Lower (S1);
              end if;
  
!             return S1;
  
!          end if;
  
        end Final_Value;
  
     --  Start of processing for Normalize_Pathname
--- 1586,1638 ----
              begin
                 Result (1) := '/';
                 Result (2 .. Result'Last) := S;
+                Last := Result'Last;
  
                 if Fold_To_Lower_Case then
                    System.Case_Util.To_Lower (Result);
                 end if;
  
!                --  Remove trailing directory separator, if any
  
+                if Last > 1 and then
+                  (Result (Last) = '/' or else
+                   Result (Last) = Directory_Separator)
+                then
+                   Last := Last - 1;
+                end if;
+ 
+                return Result (1 .. Last);
              end;
  
           else
              if Fold_To_Lower_Case then
                 System.Case_Util.To_Lower (S1);
              end if;
  
!             --  Remove trailing directory separator, if any
  
!             Last := S1'Last;
  
+             if Last > 1
+               and then (S1 (Last) = '/'
+                           or else
+                         S1 (Last) = Directory_Separator)
+             then
+                --  Special case for Windows: C:\
+ 
+                if Last = 3
+                  and then S1 (1) /= Directory_Separator
+                  and then S1 (2) = ':'
+                then
+                   null;
+ 
+                else
+                   Last := Last - 1;
+                end if;
+             end if;
+ 
+             return S1 (1 .. Last);
+          end if;
        end Final_Value;
  
     --  Start of processing for Normalize_Pathname
*************** package body GNAT.OS_Lib is
*** 1628,1642 ****
           end loop;
        end if;
  
!       --  Resolving logical names from VMS.
!       --  If we have a Unix path on VMS such as /temp/..., and TEMP is a
        --  logical name, we need to resolve this logical name.
-       --  As we have no means to know if we are on VMS, we need to do that
-       --  for absolute paths starting with '/'.
-       --  We find the directory, change to it, get the current directory,
-       --  and change the directory to this value.
  
!       if Path_Buffer (1) = '/' then
           declare
              Cur_Dir : String := Get_Directory ("");
              --  Save the current directory, so that we can change dir back to
--- 1690,1712 ----
           end loop;
        end if;
  
!       --  Resolve directory names for VMS and Windows
! 
!       --  On VMS, if we have a Unix path such as /temp/..., and TEMP is a
        --  logical name, we need to resolve this logical name.
  
!       --  On Windows, if we have an absolute path starting with a directory
!       --  separator, we need to have the drive letter appended in front.
! 
!       --  For both platforms, Get_Current_Dir will return a suitable
!       --  directory name (logical names resolved on VMS, path starting with
!       --  a drive letter on Windows). So we find the directory, change to it,
!       --  call Get_Current_Dir and change the directory to the returned value.
!       --  Then, of course, we return to the previous directory.
! 
!       if (OpenVMS or On_Windows)
!         and then Path_Buffer (1) = Directory_Separator
!       then
           declare
              Cur_Dir : String := Get_Directory ("");
              --  Save the current directory, so that we can change dir back to
*************** package body GNAT.OS_Lib is
*** 1649,1669 ****
              --  set to ASCII.NUL to call chdir.
  
              Pos : Positive := End_Path;
!             --  Position of the last directory separator ('/')
  
              Status : Integer;
              --  Value returned by chdir
  
           begin
!             --  Look for the last '/'
  
!             while Path (Pos) /= '/' loop
                 Pos := Pos - 1;
              end loop;
  
!             --  Get the previous character that is not a '/'
  
!             while Pos > 1 and then Path (Pos) = '/' loop
                 Pos := Pos - 1;
              end loop;
  
--- 1719,1739 ----
              --  set to ASCII.NUL to call chdir.
  
              Pos : Positive := End_Path;
!             --  Position of the last directory separator
  
              Status : Integer;
              --  Value returned by chdir
  
           begin
!             --  Look for the last directory separator
  
!             while Path (Pos) /= Directory_Separator loop
                 Pos := Pos - 1;
              end loop;
  
!             --  Get the previous character that is not a directory separator
  
!             while Pos > 1 and then Path (Pos) = Directory_Separator loop
                 Pos := Pos - 1;
              end loop;
  
*************** package body GNAT.OS_Lib is
*** 1850,1856 ****
              if Status <= 0 then
                 Last := Finish + 1;
  
!             --  Replace symbolic link with its value.
  
              else
                 if Is_Absolute_Path (Link_Buffer (1 .. Status)) then
--- 1920,1926 ----
              if Status <= 0 then
                 Last := Finish + 1;
  
!             --  Replace symbolic link with its value
  
              else
                 if Is_Absolute_Path (Link_Buffer (1 .. Status)) then
*************** package body GNAT.OS_Lib is
*** 1898,1904 ****
          (Name  : C_File_Name;
           Fmode : Mode) return File_Descriptor;
        pragma Import (C, C_Open_Read, "__gnat_open_read");
- 
     begin
        return C_Open_Read (Name, Fmode);
     end Open_Read;
--- 1968,1973 ----
*************** package body GNAT.OS_Lib is
*** 1908,1914 ****
        Fmode : Mode) return File_Descriptor
     is
        C_Name : String (1 .. Name'Length + 1);
- 
     begin
        C_Name (1 .. Name'Length) := Name;
        C_Name (C_Name'Last)      := ASCII.NUL;
--- 1977,1982 ----
*************** package body GNAT.OS_Lib is
*** 1927,1933 ****
          (Name  : C_File_Name;
           Fmode : Mode) return File_Descriptor;
        pragma Import (C, C_Open_Read_Write, "__gnat_open_rw");
- 
     begin
        return C_Open_Read_Write (Name, Fmode);
     end Open_Read_Write;
--- 1995,2000 ----
*************** package body GNAT.OS_Lib is
*** 1937,1943 ****
        Fmode : Mode) return File_Descriptor
     is
        C_Name : String (1 .. Name'Length + 1);
- 
     begin
        C_Name (1 .. Name'Length) := Name;
        C_Name (C_Name'Last)      := ASCII.NUL;
--- 2004,2009 ----
*************** package body GNAT.OS_Lib is
*** 1969,1977 ****
     is
        function rename (From, To : Address) return Integer;
        pragma Import (C, rename, "rename");
- 
        R : Integer;
- 
     begin
        R := rename (Old_Name, New_Name);
        Success := (R = 0);
--- 2035,2041 ----
*************** package body GNAT.OS_Lib is
*** 1984,2000 ****
     is
        C_Old_Name : String (1 .. Old_Name'Length + 1);
        C_New_Name : String (1 .. New_Name'Length + 1);
- 
     begin
        C_Old_Name (1 .. Old_Name'Length) := Old_Name;
        C_Old_Name (C_Old_Name'Last)      := ASCII.NUL;
- 
        C_New_Name (1 .. New_Name'Length) := New_Name;
        C_New_Name (C_New_Name'Last)      := ASCII.NUL;
- 
        Rename_File (C_Old_Name'Address, C_New_Name'Address, Success);
     end Rename_File;
  
     ------------
     -- Setenv --
     ------------
--- 2048,2120 ----
     is
        C_Old_Name : String (1 .. Old_Name'Length + 1);
        C_New_Name : String (1 .. New_Name'Length + 1);
     begin
        C_Old_Name (1 .. Old_Name'Length) := Old_Name;
        C_Old_Name (C_Old_Name'Last)      := ASCII.NUL;
        C_New_Name (1 .. New_Name'Length) := New_Name;
        C_New_Name (C_New_Name'Last)      := ASCII.NUL;
        Rename_File (C_Old_Name'Address, C_New_Name'Address, Success);
     end Rename_File;
  
+    -----------------------
+    -- Set_Close_On_Exec --
+    -----------------------
+ 
+    procedure Set_Close_On_Exec
+      (FD            : File_Descriptor;
+       Close_On_Exec : Boolean;
+       Status        : out Boolean)
+    is
+       function C_Set_Close_On_Exec
+         (FD : File_Descriptor; Close_On_Exec : System.CRTL.int)
+          return System.CRTL.int;
+       pragma Import (C, C_Set_Close_On_Exec, "__gnat_set_close_on_exec");
+    begin
+       Status := C_Set_Close_On_Exec (FD, Boolean'Pos (Close_On_Exec)) = 0;
+    end Set_Close_On_Exec;
+ 
+    --------------------
+    -- Set_Executable --
+    --------------------
+ 
+    procedure Set_Executable (Name : String) is
+       procedure C_Set_Executable (Name : C_File_Name);
+       pragma Import (C, C_Set_Executable, "__gnat_set_executable");
+       C_Name : aliased String (Name'First .. Name'Last + 1);
+    begin
+       C_Name (Name'Range)  := Name;
+       C_Name (C_Name'Last) := ASCII.NUL;
+       C_Set_Executable (C_Name (C_Name'First)'Address);
+    end Set_Executable;
+ 
+    --------------------
+    -- Set_Read_Only --
+    --------------------
+ 
+    procedure Set_Read_Only (Name : String) is
+       procedure C_Set_Read_Only (Name : C_File_Name);
+       pragma Import (C, C_Set_Read_Only, "__gnat_set_readonly");
+       C_Name : aliased String (Name'First .. Name'Last + 1);
+    begin
+       C_Name (Name'Range)  := Name;
+       C_Name (C_Name'Last) := ASCII.NUL;
+       C_Set_Read_Only (C_Name (C_Name'First)'Address);
+    end Set_Read_Only;
+ 
+    --------------------
+    -- Set_Writable --
+    --------------------
+ 
+    procedure Set_Writable (Name : String) is
+       procedure C_Set_Writable (Name : C_File_Name);
+       pragma Import (C, C_Set_Writable, "__gnat_set_writable");
+       C_Name : aliased String (Name'First .. Name'Last + 1);
+    begin
+       C_Name (Name'Range)  := Name;
+       C_Name (C_Name'Last) := ASCII.NUL;
+       C_Set_Writable (C_Name (C_Name'First)'Address);
+    end Set_Writable;
+ 
     ------------
     -- Setenv --
     ------------
*************** package body GNAT.OS_Lib is
*** 2026,2032 ****
     is
        Junk   : Process_Id;
        Result : Integer;
- 
     begin
        Spawn_Internal (Program_Name, Args, Result, Junk, Blocking => True);
        return Result;
--- 2146,2151 ----
*************** package body GNAT.OS_Lib is
*** 2041,2046 ****
--- 2160,2243 ----
        Success := (Spawn (Program_Name, Args) = 0);
     end Spawn;
  
+    procedure Spawn
+      (Program_Name           : String;
+       Args                   : Argument_List;
+       Output_File_Descriptor : File_Descriptor;
+       Return_Code            : out Integer;
+       Err_To_Out             : Boolean := True)
+    is
+       function Dup (Fd : File_Descriptor) return File_Descriptor;
+       pragma Import (C, Dup, "__gnat_dup");
+ 
+       procedure Dup2 (Old_Fd, New_Fd : File_Descriptor);
+       pragma Import (C, Dup2, "__gnat_dup2");
+ 
+       Saved_Output : File_Descriptor;
+       Saved_Error  : File_Descriptor := Invalid_FD;
+       --  We need to initialize Saved_Error to Invalid_FD to avoid
+       --  a compiler warning that this variable may be used before
+       --  it is initialized (which can not happen, but the compiler
+       --  is not smart enough to figure this out).
+ 
+    begin
+       --  Set standard output and error to the temporary file
+ 
+       Saved_Output := Dup (Standout);
+       Dup2 (Output_File_Descriptor, Standout);
+ 
+       if Err_To_Out then
+          Saved_Error  := Dup (Standerr);
+          Dup2 (Output_File_Descriptor, Standerr);
+       end if;
+ 
+       --  Spawn the program
+ 
+       Return_Code := Spawn (Program_Name, Args);
+ 
+       --  Restore the standard output and error
+ 
+       Dup2 (Saved_Output, Standout);
+ 
+       if Err_To_Out then
+          Dup2 (Saved_Error, Standerr);
+       end if;
+ 
+       --  And close the saved standard output and error file descriptors
+ 
+       Close (Saved_Output);
+ 
+       if Err_To_Out then
+          Close (Saved_Error);
+       end if;
+    end Spawn;
+ 
+    procedure Spawn
+      (Program_Name  : String;
+       Args          : Argument_List;
+       Output_File   : String;
+       Success       : out Boolean;
+       Return_Code   : out Integer;
+       Err_To_Out    : Boolean := True)
+    is
+       FD : File_Descriptor;
+ 
+    begin
+       Success := True;
+       Return_Code := 0;
+ 
+       FD := Create_Output_Text_File (Output_File);
+ 
+       if FD = Invalid_FD then
+          Success := False;
+          return;
+       end if;
+ 
+       Spawn (Program_Name, Args, FD, Return_Code, Err_To_Out);
+ 
+       Close (FD, Success);
+    end Spawn;
+ 
     --------------------
     -- Spawn_Internal --
     --------------------
*************** package body GNAT.OS_Lib is
*** 2054,2060 ****
     is
  
        procedure Spawn (Args : Argument_List);
!       --  Call Spawn.
  
        N_Args : Argument_List (Args'Range);
        --  Normalized arguments
--- 2251,2257 ----
     is
  
        procedure Spawn (Args : Argument_List);
!       --  Call Spawn with given argument list
  
        N_Args : Argument_List (Args'Range);
        --  Normalized arguments
diff -Nrcpad gcc-3.4.3/gcc/ada/g-os_lib.ads gcc-4.0.0/gcc/ada/g-os_lib.ads
*** gcc-3.4.3/gcc/ada/g-os_lib.ads	Mon Dec 15 11:51:00 2003
--- gcc-4.0.0/gcc/ada/g-os_lib.ads	Thu Feb 10 13:51:58 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1995-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1995-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 36,71 ****
  --  This package contains types and procedures for interfacing to the
  --  underlying OS. It is used by the GNAT compiler and by tools associated
  --  with the GNAT compiler, and therefore works for the various operating
! --  systems to which GNAT has been ported. This package will undoubtedly
! --  grow as new services are needed by various tools.
  
! --  This package tends to use fairly low-level Ada in order to not bring
! --  in large portions of the RTL. For example, functions return access
! --  to string as part of avoiding functions returning unconstrained types.
  
! --  Except where specifically noted, these routines are portable across
! --  all GNAT implementations on all supported operating systems.
  
  with System;
  with GNAT.Strings;
  
  package GNAT.OS_Lib is
! pragma Elaborate_Body (OS_Lib);
  
     subtype String_Access is Strings.String_Access;
-    --  General purpose string access type. Some of the functions in this
-    --  package allocate string results on the heap, and return a value of
-    --  this type. Note that the caller is responsible for freeing this
-    --  String to avoid memory leaks.
  
     function "=" (Left, Right : in String_Access) return Boolean
       renames Strings."=";
  
     procedure Free (X : in out String_Access) renames Strings.Free;
-    --  This procedure is provided for freeing returned values of type
-    --  String_Access
  
     subtype String_List is Strings.String_List;
     function "=" (Left, Right : in String_List) return Boolean
       renames Strings."=";
  
--- 36,74 ----
  --  This package contains types and procedures for interfacing to the
  --  underlying OS. It is used by the GNAT compiler and by tools associated
  --  with the GNAT compiler, and therefore works for the various operating
! --  systems to which GNAT has been ported. This package will undoubtedly grow
! --  as new services are needed by various tools.
  
! --  This package tends to use fairly low-level Ada in order to not bring in
! --  large portions of the RTL. For example, functions return access to string
! --  as part of avoiding functions returning unconstrained types.
  
! --  Except where specifically noted, these routines are portable across all
! --  GNAT implementations on all supported operating systems.
  
  with System;
  with GNAT.Strings;
  
  package GNAT.OS_Lib is
!    pragma Elaborate_Body (OS_Lib);
! 
!    -----------------------
!    -- String Operations --
!    -----------------------
! 
!    --  These are reexported from package Strings (which was introduced to
!    --  avoid different packages declarting different types unnecessarily).
!    --  See package GNAT.Strings for details.
  
     subtype String_Access is Strings.String_Access;
  
     function "=" (Left, Right : in String_Access) return Boolean
       renames Strings."=";
  
     procedure Free (X : in out String_Access) renames Strings.Free;
  
     subtype String_List is Strings.String_List;
+ 
     function "=" (Left, Right : in String_List) return Boolean
       renames Strings."=";
  
*************** pragma Elaborate_Body (OS_Lib);
*** 79,98 ****
       return String_List renames Strings."&";
  
     subtype String_List_Access is Strings.String_List_Access;
!    --  General purpose array and pointer for list of string accesses
     function "=" (Left, Right : in String_List_Access) return Boolean
       renames Strings."=";
  
     procedure Free (Arg : in out String_List_Access)
       renames Strings.Free;
-    --  Frees the given array and all strings that its elements reference,
-    --  and then sets the argument to null. Provided for freeing returned
-    --  values of this type (including Argument_List_Access).
  
     ---------------------
     -- Time/Date Stuff --
     ---------------------
  
     --  The OS's notion of time is represented by the private type OS_Time.
     --  This is the type returned by the File_Time_Stamp functions to obtain
     --  the time stamp of a specified file. Functions and a procedure (modeled
--- 82,99 ----
       return String_List renames Strings."&";
  
     subtype String_List_Access is Strings.String_List_Access;
! 
     function "=" (Left, Right : in String_List_Access) return Boolean
       renames Strings."=";
  
     procedure Free (Arg : in out String_List_Access)
       renames Strings.Free;
  
     ---------------------
     -- Time/Date Stuff --
     ---------------------
  
+    type OS_Time is private;
     --  The OS's notion of time is represented by the private type OS_Time.
     --  This is the type returned by the File_Time_Stamp functions to obtain
     --  the time stamp of a specified file. Functions and a procedure (modeled
*************** pragma Elaborate_Body (OS_Lib);
*** 102,108 ****
     --  cases but rather the actual (time-zone independent) time stamp of the
     --  file (of course in Unix systems, this *is* in GMT form).
  
!    type OS_Time is private;
  
     subtype Year_Type   is Integer range 1900 .. 2099;
     subtype Month_Type  is Integer range    1 ..   12;
--- 103,110 ----
     --  cases but rather the actual (time-zone independent) time stamp of the
     --  file (of course in Unix systems, this *is* in GMT form).
  
!    Invalid_Time : constant OS_Time;
!    --  A special unique value used to flag an invalid time stamp value
  
     subtype Year_Type   is Integer range 1900 .. 2099;
     subtype Month_Type  is Integer range    1 ..   12;
*************** pragma Elaborate_Body (OS_Lib);
*** 110,115 ****
--- 112,119 ----
     subtype Hour_Type   is Integer range    0 ..   23;
     subtype Minute_Type is Integer range    0 ..   59;
     subtype Second_Type is Integer range    0 ..   59;
+    --  Declarations similar to those in Calendar, breaking down the time
+ 
  
     function GM_Year    (Date : OS_Time) return Year_Type;
     function GM_Month   (Date : OS_Time) return Month_Type;
*************** pragma Elaborate_Body (OS_Lib);
*** 117,130 ****
     function GM_Hour    (Date : OS_Time) return Hour_Type;
     function GM_Minute  (Date : OS_Time) return Minute_Type;
     function GM_Second  (Date : OS_Time) return Second_Type;
  
     function "<"  (X, Y : OS_Time) return Boolean;
     function ">"  (X, Y : OS_Time) return Boolean;
     function ">=" (X, Y : OS_Time) return Boolean;
     function "<=" (X, Y : OS_Time) return Boolean;
!    --  Basic comparison operators on OS_Time with obvious meanings. Note
!    --  that these have Intrinsic convention, so for example it is not
!    --  permissible to create accesses to any of these functions.
  
     procedure GM_Split
       (Date    : OS_Time;
--- 121,135 ----
     function GM_Hour    (Date : OS_Time) return Hour_Type;
     function GM_Minute  (Date : OS_Time) return Minute_Type;
     function GM_Second  (Date : OS_Time) return Second_Type;
+    --  Functions to extract information from OS_Time value
  
     function "<"  (X, Y : OS_Time) return Boolean;
     function ">"  (X, Y : OS_Time) return Boolean;
     function ">=" (X, Y : OS_Time) return Boolean;
     function "<=" (X, Y : OS_Time) return Boolean;
!    --  Basic comparison operators on OS_Time with obvious meanings. Note that
!    --  these have Intrinsic convention, so for example it is not permissible
!    --  to create accesses to any of these functions.
  
     procedure GM_Split
       (Date    : OS_Time;
*************** pragma Elaborate_Body (OS_Lib);
*** 134,153 ****
        Hour    : out Hour_Type;
        Minute  : out Minute_Type;
        Second  : out Second_Type);
  
     ----------------
     -- File Stuff --
     ----------------
  
!    --  These routines give access to the open/creat/close/read/write level
!    --  of I/O routines in the typical C library (these functions are not
!    --  part of the ANSI C standard, but are typically available in all
!    --  systems). See also package Interfaces.C_Streams for access to the
!    --  stream level routines.
  
!    --  Note on file names. If a file name is passed as type String in any
!    --  of the following specifications, then the name is a normal Ada string
!    --  and need not be NUL-terminated. However, a trailing NUL character is
     --  permitted, and will be ignored (more accurately, the NUL and any
     --  characters that follow it will be ignored).
  
--- 139,160 ----
        Hour    : out Hour_Type;
        Minute  : out Minute_Type;
        Second  : out Second_Type);
+    --  Analogous to the routine of similar name in Calendar, takes an OS_Time
+    --  and splits it into its component parts with obvious meanings.
  
     ----------------
     -- File Stuff --
     ----------------
  
!    --  These routines give access to the open/creat/close/read/write level of
!    --  I/O routines in the typical C library (these functions are not part of
!    --  the ANSI C standard, but are typically available in all systems). See
!    --  also package Interfaces.C_Streams for access to the stream level
!    --  routines.
  
!    --  Note on file names. If a file name is passed as type String in any of
!    --  the following specifications, then the name is a normal Ada string and
!    --  need not be NUL-terminated. However, a trailing NUL character is
     --  permitted, and will be ignored (more accurately, the NUL and any
     --  characters that follow it will be ignored).
  
*************** pragma Elaborate_Body (OS_Lib);
*** 182,197 ****
     function Open_Read_Write
       (Name  : String;
        Fmode : Mode) return File_Descriptor;
!    --  Open file Name for both reading and writing, returning file
!    --  descriptor. File descriptor returned is Invalid_FD if file cannot be
!    --  opened.
  
     function Create_File
       (Name  : String;
        Fmode : Mode) return File_Descriptor;
     --  Creates new file with given name for writing, returning file descriptor
     --  for subsequent use in Write calls. File descriptor returned is
!    --  Invalid_FD if file cannot be successfully created
  
     function Create_New_File
       (Name  : String;
--- 189,208 ----
     function Open_Read_Write
       (Name  : String;
        Fmode : Mode) return File_Descriptor;
!    --  Open file Name for both reading and writing, returning file descriptor.
!    --  File descriptor returned is Invalid_FD if file cannot be opened.
  
     function Create_File
       (Name  : String;
        Fmode : Mode) return File_Descriptor;
     --  Creates new file with given name for writing, returning file descriptor
     --  for subsequent use in Write calls. File descriptor returned is
!    --  Invalid_FD if file cannot be successfully created.
! 
!    function Create_Output_Text_File (Name  : String) return File_Descriptor;
!    --  Creates new text file with given name suitable to redirect standard
!    --  output, returning file descriptor. File descriptor returned is
!    --  Invalid_FD if file cannot be successfully created.
  
     function Create_New_File
       (Name  : String;
*************** pragma Elaborate_Body (OS_Lib);
*** 212,240 ****
        Name : out Temp_File_Name);
     --  Create and open for writing a temporary file in the current working
     --  directory. The name of the file and the File Descriptor are returned.
!    --  The File Descriptor returned is Invalid_FD in the case of failure.
!    --  No mode parameter is provided. Since this is a temporary file,
!    --  there is no point in doing text translation on it.
!    --  On some OSes, the maximum number of temp files that can be
!    --  created with this procedure may be limited. When the maximum is
!    --  reached, this procedure returns Invalid_FD. On some OSes, there may be
!    --  a race condition between processes trying to create temp files
!    --  at the same time in the same directory using this procedure.
  
     procedure Create_Temp_File
       (FD   : out File_Descriptor;
        Name : out String_Access);
     --  Create and open for writing a temporary file in the current working
     --  directory. The name of the file and the File Descriptor are returned.
!    --  No mode parameter is provided. Since this is a temporary file,
!    --  there is no point in doing text translation on it.
!    --  It is the responsibility of the caller to deallocate the access value
!    --  returned in Name.
!    --  This procedure will always succeed if the current working directory
!    --  is writable. If the current working directory is not writable, then
     --  Invalid_FD is returned for the file descriptor and null for the Name.
!    --  There is no race condition problem between processes trying to
!    --  create temp files at the same time in the same directory.
  
     procedure Close (FD : File_Descriptor; Status : out Boolean);
     --  Close file referenced by FD. Status is False if the underlying service
--- 223,252 ----
        Name : out Temp_File_Name);
     --  Create and open for writing a temporary file in the current working
     --  directory. The name of the file and the File Descriptor are returned.
!    --  The File Descriptor returned is Invalid_FD in the case of failure. No
!    --  mode parameter is provided. Since this is a temporary file, there is no
!    --  point in doing text translation on it.
!    --
!    --  On some OSes, the maximum number of temp files that can be created with
!    --  this procedure may be limited. When the maximum is reached, this
!    --  procedure returns Invalid_FD. On some OSes, there may be a race
!    --  condition between processes trying to create temp files at the same
!    --  time in the same directory using this procedure.
  
     procedure Create_Temp_File
       (FD   : out File_Descriptor;
        Name : out String_Access);
     --  Create and open for writing a temporary file in the current working
     --  directory. The name of the file and the File Descriptor are returned.
!    --  No mode parameter is provided. Since this is a temporary file, there is
!    --  no point in doing text translation on it. It is the responsibility of
!    --  the caller to deallocate the access value returned in Name.
!    --
!    --  This procedure will always succeed if the current working directory is
!    --  writable. If the current working directory is not writable, then
     --  Invalid_FD is returned for the file descriptor and null for the Name.
!    --  There is no race condition problem between processes trying to create
!    --  temp files at the same time in the same directory.
  
     procedure Close (FD : File_Descriptor; Status : out Boolean);
     --  Close file referenced by FD. Status is False if the underlying service
*************** pragma Elaborate_Body (OS_Lib);
*** 242,249 ****
     --  and invalid file descriptor (the file may have been closed twice).
  
     procedure Close (FD : File_Descriptor);
!    --  Close file referenced by FD. This form is used when the caller
!    --  wants to ignore any possible error (see above for error cases).
  
     procedure Delete_File (Name : String; Success : out Boolean);
     --  Deletes file. Success is set True or False indicating if the delete is
--- 254,271 ----
     --  and invalid file descriptor (the file may have been closed twice).
  
     procedure Close (FD : File_Descriptor);
!    --  Close file referenced by FD. This form is used when the caller wants to
!    --  ignore any possible error (see above for error cases).
! 
!    procedure Set_Close_On_Exec
!      (FD            : File_Descriptor;
!       Close_On_Exec : Boolean;
!       Status        : out Boolean);
!    --  When Close_On_Exec is True, mark FD to be closed automatically when new
!    --  program is executed by the calling process (i.e. prevent FD from being
!    --  inherited by child processes). When Close_On_Exec is False, mark FD to
!    --  not be closed on exec (i.e. allow it to be inherited). Status is False
!    --  if the operation could not be performed.
  
     procedure Delete_File (Name : String; Success : out Boolean);
     --  Deletes file. Success is set True or False indicating if the delete is
*************** pragma Elaborate_Body (OS_Lib);
*** 253,281 ****
       (Old_Name : String;
        New_Name : String;
        Success  : out Boolean);
!    --  Rename a file. Success is set True or False indicating if the
!    --  rename is successful or not.
  
!    --  The following defines the mode for the Copy_File procedure below.
!    --  Note that "time stamps and other file attributes" in the descriptions
!    --  below refers to the creation and last modification times, and also
!    --  the file access (read/write/execute) status flags.
  
     type Copy_Mode is
       (Copy,
!       --  Copy the file. It is an error if the target file already exists.
!       --  The time stamps and other file attributes are preserved in the copy.
  
        Overwrite,
!       --  If the target file exists, the file is replaced otherwise
!       --  the file is just copied. The time stamps and other file
!       --  attributes are preserved in the copy.
  
        Append);
!       --  If the target file exists, the contents of the source file
!       --  is appended at the end. Otherwise the source file is just
!       --  copied. The time stamps and other file attributes are
!       --  are preserved if the destination file does not exist.
  
     type Attribute is
       (Time_Stamps,
--- 275,303 ----
       (Old_Name : String;
        New_Name : String;
        Success  : out Boolean);
!    --  Rename a file. Success is set True or False indicating if the rename is
!    --  successful or not.
  
!    --  The following defines the mode for the Copy_File procedure below. Note
!    --  that "time stamps and other file attributes" in the descriptions below
!    --  refers to the creation and last modification times, and also the file
!    --  access (read/write/execute) status flags.
  
     type Copy_Mode is
       (Copy,
!       --  Copy the file. It is an error if the target file already exists. The
!       --  time stamps and other file attributes are preserved in the copy.
  
        Overwrite,
!       --  If the target file exists, the file is replaced otherwise the file
!       --  is just copied. The time stamps and other file attributes are
!       --  preserved in the copy.
  
        Append);
!       --  If the target file exists, the contents of the source file is
!       --  appended at the end. Otherwise the source file is just copied. The
!       --  time stamps and other file attributes are are preserved if the
!       --  destination file does not exist.
  
     type Attribute is
       (Time_Stamps,
*************** pragma Elaborate_Body (OS_Lib);
*** 283,290 ****
        --  attributes are set to normal default values for file creation.
  
        Full,
!       --  All attributes are copied from the source file to the target
!       --  file. This includes the timestamps, and for example also includes
        --  read/write/execute attributes in Unix systems.
  
        None);
--- 305,312 ----
        --  attributes are set to normal default values for file creation.
  
        Full,
!       --  All attributes are copied from the source file to the target file.
!       --  This includes the timestamps, and for example also includes
        --  read/write/execute attributes in Unix systems.
  
        None);
*************** pragma Elaborate_Body (OS_Lib);
*** 293,300 ****
  
     --  Note: The default is Time_Stamps, which corresponds to the normal
     --  default on Windows style systems. Full corresponds to the typical
!    --  effect of "cp -p" on Unix systems, and None corresponds to the
!    --  typical effect of "cp" on Unix systems.
  
     --  Note: Time_Stamps and Full are not supported on VMS and VxWorks
  
--- 315,322 ----
  
     --  Note: The default is Time_Stamps, which corresponds to the normal
     --  default on Windows style systems. Full corresponds to the typical
!    --  effect of "cp -p" on Unix systems, and None corresponds to the typical
!    --  effect of "cp" on Unix systems.
  
     --  Note: Time_Stamps and Full are not supported on VMS and VxWorks
  
*************** pragma Elaborate_Body (OS_Lib);
*** 308,322 ****
     --  Pathname can be a filename or directory name. In the latter case Name
     --  is copied into the directory preserving the same file name. Mode
     --  defines the kind of copy, see above with the default being a normal
!    --  copy in which the target file must not already exist. Success is set
!    --  to True or False indicating if the copy is successful (depending on
!    --  the specified Mode).
     --
!    --  Note: this procedure is only supported to a very limited extent on
!    --  VMS. The only supported mode is Overwrite, and the only supported
!    --  value for Preserve is None, resulting in the default action which
!    --  for Overwrite is to leave attributes unchanged. Furthermore, the
!    --  copy only works for simple text files.
  
     procedure Copy_Time_Stamps (Source, Dest : String; Success : out Boolean);
     --  Copy Source file time stamps (last modification and last access time
--- 330,344 ----
     --  Pathname can be a filename or directory name. In the latter case Name
     --  is copied into the directory preserving the same file name. Mode
     --  defines the kind of copy, see above with the default being a normal
!    --  copy in which the target file must not already exist. Success is set to
!    --  True or False indicating if the copy is successful (depending on the
!    --  specified Mode).
     --
!    --  Note: this procedure is only supported to a very limited extent on VMS.
!    --  The only supported mode is Overwrite, and the only supported value for
!    --  Preserve is None, resulting in the default action which for Overwrite
!    --  is to leave attributes unchanged. Furthermore, the copy only works for
!    --  simple text files.
  
     procedure Copy_Time_Stamps (Source, Dest : String; Success : out Boolean);
     --  Copy Source file time stamps (last modification and last access time
*************** pragma Elaborate_Body (OS_Lib);
*** 331,346 ****
       (FD   : File_Descriptor;
        A    : System.Address;
        N    : Integer) return Integer;
!    --  Read N bytes to address A from file referenced by FD. Returned value
!    --  is count of bytes actually read, which can be less than N at EOF.
  
     function Write
       (FD   : File_Descriptor;
        A    : System.Address;
        N    : Integer) return Integer;
     --  Write N bytes from address A to file referenced by FD. The returned
!    --  value is the number of bytes written, which can be less than N if
!    --  a disk full condition was detected.
  
     Seek_Cur : constant := 1;
     Seek_End : constant := 2;
--- 353,368 ----
       (FD   : File_Descriptor;
        A    : System.Address;
        N    : Integer) return Integer;
!    --  Read N bytes to address A from file referenced by FD. Returned value is
!    --  count of bytes actually read, which can be less than N at EOF.
  
     function Write
       (FD   : File_Descriptor;
        A    : System.Address;
        N    : Integer) return Integer;
     --  Write N bytes from address A to file referenced by FD. The returned
!    --  value is the number of bytes written, which can be less than N if a
!    --  disk full condition was detected.
  
     Seek_Cur : constant := 1;
     Seek_End : constant := 2;
*************** pragma Elaborate_Body (OS_Lib);
*** 352,360 ****
        offset : Long_Integer;
        origin : Integer);
     pragma Import (C, Lseek, "__gnat_lseek");
!    --  Sets the current file pointer to the indicated offset value,
!    --  relative to the current position (origin = SEEK_CUR), end of
!    --  file (origin = SEEK_END), or start of file (origin = SEEK_SET).
  
     function File_Length (FD : File_Descriptor) return Long_Integer;
     pragma Import (C, File_Length, "__gnat_file_length");
--- 374,382 ----
        offset : Long_Integer;
        origin : Integer);
     pragma Import (C, Lseek, "__gnat_lseek");
!    --  Sets the current file pointer to the indicated offset value, relative
!    --  to the current position (origin = SEEK_CUR), end of file (origin =
!    --  SEEK_END), or start of file (origin = SEEK_SET).
  
     function File_Length (FD : File_Descriptor) return Long_Integer;
     pragma Import (C, File_Length, "__gnat_file_length");
*************** pragma Elaborate_Body (OS_Lib);
*** 362,371 ****
  
     function File_Time_Stamp (Name : String) return OS_Time;
     --  Given the name of a file or directory, Name, obtains and returns the
!    --  time stamp. This function can be used for an unopened file.
  
     function File_Time_Stamp (FD : File_Descriptor) return OS_Time;
!    --  Get time stamp of file from file descriptor FD
  
     function Normalize_Pathname
       (Name           : String;
--- 384,395 ----
  
     function File_Time_Stamp (Name : String) return OS_Time;
     --  Given the name of a file or directory, Name, obtains and returns the
!    --  time stamp. This function can be used for an unopened file. Returns
!    --  Invalid_Time is Name doesn't correspond to an existing file.
  
     function File_Time_Stamp (FD : File_Descriptor) return OS_Time;
!    --  Get time stamp of file from file descriptor FD Returns Invalid_Time is
!    --  FD doesn't correspond to an existing file.
  
     function Normalize_Pathname
       (Name           : String;
*************** pragma Elaborate_Body (OS_Lib);
*** 380,414 ****
     --  directory if Directory is null. The result returned is the normalized
     --  name of the file. For most cases, if two file names designate the same
     --  file through different paths, Normalize_Pathname will return the same
!    --  canonical name in both cases. However, there are cases when this is
!    --  not true; for example, this is not true in Unix for two hard links
     --  designating the same file.
     --
     --  If Resolve_Links is set to True, then the symbolic links, on systems
!    --  that support them, will be fully converted to the name of the file
!    --  or directory pointed to. This is slightly less efficient, since it
     --  requires system calls.
     --
     --  If Name cannot be resolved or is null on entry (for example if there is
!    --  a circularity in symbolic links: A is a symbolic link for B, while B is
!    --  a symbolic link for A), then Normalize_Pathname returns an empty string.
     --
     --  In VMS, if Name follows the VMS syntax file specification, it is first
     --  converted into Unix syntax. If the conversion fails, Normalize_Pathname
     --  returns an empty string.
     --
     --  For case-sensitive file systems, the value of Case_Sensitive parameter
!    --  is ignored. In systems that have a non case-sensitive file system like
!    --  Windows and OpenVMS, if this parameter is set OFF, then the result
!    --  is returned folded to lower case, this allows to checks if two files
!    --  are the same by applying this function to their names and by comparing
!    --  the results of these calls. If Case_Sensitive is ON, this function does
!    --  not change the casing of file and directory names.
  
     function Is_Absolute_Path (Name : String) return Boolean;
!    --  Returns True if Name is an absolute path name, i.e. it designates
!    --  a file or a directory absolutely, rather than relative to another
!    --  directory.
  
     function Is_Regular_File (Name : String) return Boolean;
     --  Determines if the given string, Name, is the name of an existing
--- 404,444 ----
     --  directory if Directory is null. The result returned is the normalized
     --  name of the file. For most cases, if two file names designate the same
     --  file through different paths, Normalize_Pathname will return the same
!    --  canonical name in both cases. However, there are cases when this is not
!    --  true; for example, this is not true in Unix for two hard links
     --  designating the same file.
     --
+    --  On Windows, the returned path will start with a drive letter except
+    --  when Directory is not empty and does not include a drive letter. If
+    --  Directory is empty (the default) and Name is a relative path or an
+    --  absolute path without drive letter, the letter of the current drive
+    --  will start the returned path. If Case_Sensitive is True (the default),
+    --  then this drive letter will be forced to upper case ("C:\...").
+    --
     --  If Resolve_Links is set to True, then the symbolic links, on systems
!    --  that support them, will be fully converted to the name of the file or
!    --  directory pointed to. This is slightly less efficient, since it
     --  requires system calls.
     --
     --  If Name cannot be resolved or is null on entry (for example if there is
!    --  symbolic link circularity, e.g. A is a symbolic link for B, and B is a
!    --  symbolic link for A), then Normalize_Pathname returns an empty  string.
     --
     --  In VMS, if Name follows the VMS syntax file specification, it is first
     --  converted into Unix syntax. If the conversion fails, Normalize_Pathname
     --  returns an empty string.
     --
     --  For case-sensitive file systems, the value of Case_Sensitive parameter
!    --  is ignored. For file systems that are not case-sensitive, such as
!    --  Windows and OpenVMS, if this parameter is set to False, then the file
!    --  and directory names are folded to lower case. This allows checking
!    --  whether two files are the same by applying this function to their names
!    --  and comparing the results. If Case_Sensitive is set to True, this
!    --  function does not change the casing of file and directory names.
  
     function Is_Absolute_Path (Name : String) return Boolean;
!    --  Returns True if Name is an absolute path name, i.e. it designates a
!    --  file or directory absolutely rather than relative to another directory.
  
     function Is_Regular_File (Name : String) return Boolean;
     --  Determines if the given string, Name, is the name of an existing
*************** pragma Elaborate_Body (OS_Lib);
*** 424,453 ****
     --  a relative path name, it is relative to the current working directory.
  
     function Is_Readable_File (Name : String) return Boolean;
!    --  Determines if the given string, Name, is the name of an existing
!    --  file that is readable. Returns True if so, False otherwise. Note
!    --  that this function simply interrogates the file attributes (e.g.
!    --  using the C function stat), so it does not indicate a situation
!    --  in which a file may not actually be readable due to some other
!    --  process having exclusive access.
  
     function Is_Writable_File (Name : String) return Boolean;
!    --  Determines if the given string, Name, is the name of an existing
!    --  file that is writable. Returns True if so, False otherwise. Note
!    --  that this function simply interrogates the file attributes (e.g.
!    --  using the C function stat), so it does not indicate a situation
!    --  in which a file may not actually be writeable due to some other
!    --  process having exclusive access.
  
     function Is_Symbolic_Link (Name : String) return Boolean;
!    --  Determines if the given string, Name, is the path of a symbolic link
!    --  on systems that support it. Returns True if so, False if the path
!    --  is not a symbolic link or if the system does not support symbolic links.
     --
     --  A symbolic link is an indirect pointer to a file; its directory entry
     --  contains the name of the file to which it is linked. Symbolic links may
     --  span file systems and may refer to directories.
  
     function Locate_Exec_On_Path
       (Exec_Name : String) return String_Access;
     --  Try to locate an executable whose name is given by Exec_Name in the
--- 454,495 ----
     --  a relative path name, it is relative to the current working directory.
  
     function Is_Readable_File (Name : String) return Boolean;
!    --  Determines if the given string, Name, is the name of an existing file
!    --  that is readable. Returns True if so, False otherwise. Note that this
!    --  function simply interrogates the file attributes (e.g. using the C
!    --  function stat), so it does not indicate a situation in which a file may
!    --  not actually be readable due to some other process having exclusive
!    --  access.
  
     function Is_Writable_File (Name : String) return Boolean;
!    --  Determines if the given string, Name, is the name of an existing file
!    --  that is writable. Returns True if so, False otherwise. Note that this
!    --  function simply interrogates the file attributes (e.g. using the C
!    --  function stat), so it does not indicate a situation in which a file may
!    --  not actually be writeable due to some other process having exclusive
!    --  access.
  
     function Is_Symbolic_Link (Name : String) return Boolean;
!    --  Determines if the given string, Name, is the path of a symbolic link on
!    --  systems that support it. Returns True if so, False if the path is not a
!    --  symbolic link or if the system does not support symbolic links.
     --
     --  A symbolic link is an indirect pointer to a file; its directory entry
     --  contains the name of the file to which it is linked. Symbolic links may
     --  span file systems and may refer to directories.
  
+    procedure Set_Writable (Name : String);
+    --  Change the permissions on the named file to make it writable
+    --  for its owner.
+ 
+    procedure Set_Read_Only (Name : String);
+    --  Change the permissions on the named file to make it non-writable
+    --  for its owner.
+ 
+    procedure Set_Executable (Name : String);
+    --  Change the permissions on the named file to make it executable
+    --  for its owner.
+ 
     function Locate_Exec_On_Path
       (Exec_Name : String) return String_Access;
     --  Try to locate an executable whose name is given by Exec_Name in the
*************** pragma Elaborate_Body (OS_Lib);
*** 462,477 ****
       (File_Name : String;
        Path      : String) return String_Access;
     --  Try to locate a regular file whose name is given by File_Name in the
!    --  directories listed in  Path. If a file is found, its full pathname is
     --  returned; otherwise, a null pointer is returned. If the File_Name given
     --  is an absolute pathname, then Locate_Regular_File just checks that the
     --  file exists and is a regular file. Otherwise, if the File_Name given
!    --  includes directory information, Locate_Regular_File first checks if
!    --  the file exists relative to the current directory. If it does not,
!    --  or if the File_Name given is a simple file name, the Path argument is
!    --  parsed according to OS conventions, and for each directory in the Path
!    --  a check is made if File_Name is a relative pathname of a regular file
!    --  from that directory.
     --
     --  Note that this function allocates some memory for the returned value.
     --  This memory needs to be deallocated after use.
--- 504,519 ----
       (File_Name : String;
        Path      : String) return String_Access;
     --  Try to locate a regular file whose name is given by File_Name in the
!    --  directories listed in Path. If a file is found, its full pathname is
     --  returned; otherwise, a null pointer is returned. If the File_Name given
     --  is an absolute pathname, then Locate_Regular_File just checks that the
     --  file exists and is a regular file. Otherwise, if the File_Name given
!    --  includes directory information, Locate_Regular_File first checks if the
!    --  file exists relative to the current directory. If it does not, or if
!    --  the File_Name given is a simple file name, the Path argument is parsed
!    --  according to OS conventions, and for each directory in the Path a check
!    --  is made if File_Name is a relative pathname of a regular file from that
!    --  directory.
     --
     --  Note that this function allocates some memory for the returned value.
     --  This memory needs to be deallocated after use.
*************** pragma Elaborate_Body (OS_Lib);
*** 497,504 ****
     --  routine (using String in place of C_File_Name) defined above.
  
     subtype C_File_Name is System.Address;
!    --  This subtype is used to document that a parameter is the address
!    --  of a null-terminated string containing the name of a file.
  
     --  All the following functions need comments ???
  
--- 539,546 ----
     --  routine (using String in place of C_File_Name) defined above.
  
     subtype C_File_Name is System.Address;
!    --  This subtype is used to document that a parameter is the address of a
!    --  null-terminated string containing the name of a file.
  
     --  All the following functions need comments ???
  
*************** pragma Elaborate_Body (OS_Lib);
*** 537,547 ****
        Success      : out Boolean);
  
     function File_Time_Stamp (Name : C_File_Name) return OS_Time;
  
     function Is_Regular_File (Name : C_File_Name) return Boolean;
- 
     function Is_Directory (Name : C_File_Name) return Boolean;
- 
     function Is_Readable_File (Name : C_File_Name) return Boolean;
     function Is_Writable_File (Name : C_File_Name) return Boolean;
     function Is_Symbolic_Link (Name : C_File_Name) return Boolean;
--- 579,588 ----
        Success      : out Boolean);
  
     function File_Time_Stamp (Name : C_File_Name) return OS_Time;
+    --  Returns Invalid_Time is Name doesn't correspond to an existing file
  
     function Is_Regular_File (Name : C_File_Name) return Boolean;
     function Is_Directory (Name : C_File_Name) return Boolean;
     function Is_Readable_File (Name : C_File_Name) return Boolean;
     function Is_Writable_File (Name : C_File_Name) return Boolean;
     function Is_Symbolic_Link (Name : C_File_Name) return Boolean;
*************** pragma Elaborate_Body (OS_Lib);
*** 556,564 ****
     ------------------
  
     subtype Argument_List is String_List;
!    --  Type used for argument list in call to Spawn. The lower bound
!    --  of the array should be 1, and the length of the array indicates
!    --  the number of arguments.
  
     subtype Argument_List_Access is String_List_Access;
     --  Type used to return Argument_List without dragging in secondary stack.
--- 597,605 ----
     ------------------
  
     subtype Argument_List is String_List;
!    --  Type used for argument list in call to Spawn. The lower bound of the
!    --  array should be 1, and the length of the array indicates the number of
!    --  arguments.
  
     subtype Argument_List_Access is String_List_Access;
     --  Type used to return Argument_List without dragging in secondary stack.
*************** pragma Elaborate_Body (OS_Lib);
*** 573,614 ****
     --  and Non_Blocking_Spawn call Normalize_Arguments automatically, but
     --  since there is a guarantee that a second call does nothing, this
     --  internal call will have no effect if Normalize_Arguments is called
!    --  before calling Spawn. The call to Normalize_Arguments assumes that
!    --  the individual referenced arguments in Argument_List are on the heap,
!    --  and may free them and reallocate if they are modified.
  
     procedure Spawn
       (Program_Name : String;
        Args         : Argument_List;
        Success      : out Boolean);
!    --  The first parameter of function Spawn is the name of the executable.
!    --  The second parameter contains the arguments to be passed to the
!    --  program. Success is False if the named program could not be spawned
!    --  or its execution completed unsuccessfully. Note that the caller will
!    --  be blocked until the execution of the spawned program is complete.
!    --  For maximum portability, use a full path name for the Program_Name
!    --  argument. On some systems (notably Unix systems) a simple file
!    --  name may also work (if the executable can be located in the path).
     --
!    --  "Spawn" should not be used in tasking applications.
     --
     --  Note: Arguments in Args that contain spaces and/or quotes such as
     --  "--GCC=gcc -v" or "--GCC=""gcc -v""" are not portable across all
!    --  operating systems, and would not have the desired effect if they
!    --  were passed directly to the operating system. To avoid this problem,
!    --  Spawn makes an internal call to Normalize_Arguments, which ensures
!    --  that such arguments are modified in a manner that ensures that the
!    --  desired effect is obtained on all operating systems. The caller may
!    --  call Normalize_Arguments explicitly before the call (e.g. to print
!    --  out the exact form of arguments passed to the operating system). In
!    --  this case the guarantee a second call to Normalize_Arguments has no
!    --  effect ensures that the internal call will not affect the result.
!    --  Note that the implicit call to Normalize_Arguments may free and
!    --  reallocate some of the individual arguments.
     --
!    --  This function will always set Success to False under VxWorks and
!    --  other similar operating systems which have no notion of the concept
!    --  of a dynamically executable file.
  
     function Spawn
       (Program_Name : String;
--- 614,658 ----
     --  and Non_Blocking_Spawn call Normalize_Arguments automatically, but
     --  since there is a guarantee that a second call does nothing, this
     --  internal call will have no effect if Normalize_Arguments is called
!    --  before calling Spawn. The call to Normalize_Arguments assumes that the
!    --  individual referenced arguments in Argument_List are on the heap, and
!    --  may free them and reallocate if they are modified.
  
     procedure Spawn
       (Program_Name : String;
        Args         : Argument_List;
        Success      : out Boolean);
!    --  This procedure spawns a program with a given list of arguments. The
!    --  first parameter of is the name of the executable. The second parameter
!    --  contains the arguments to be passed to this program. Success is False
!    --  if the named program could not be spawned or its execution completed
!    --  unsuccessfully. Note that the caller will be blocked until the
!    --  execution of the spawned program is complete. For maximum portability,
!    --  use a full path name for the Program_Name argument. On some systems
!    --  (notably Unix systems) a simple file name may also work (if the
!    --  executable can be located in the path).
     --
!    --  "Spawn" should not be used in tasking applications. Why not??? More
!    --  documentation would be helpful here ??? Is it really tasking programs,
!    --  or tasking activity that cause trouble ???
     --
     --  Note: Arguments in Args that contain spaces and/or quotes such as
     --  "--GCC=gcc -v" or "--GCC=""gcc -v""" are not portable across all
!    --  operating systems, and would not have the desired effect if they were
!    --  passed directly to the operating system. To avoid this problem, Spawn
!    --  makes an internal call to Normalize_Arguments, which ensures that such
!    --  arguments are modified in a manner that ensures that the desired effect
!    --  is obtained on all operating systems. The caller may call
!    --  Normalize_Arguments explicitly before the call (e.g. to print out the
!    --  exact form of arguments passed to the operating system). In this case
!    --  the guarantee a second call to Normalize_Arguments has no effect
!    --  ensures that the internal call will not affect the result. Note that
!    --  the implicit call to Normalize_Arguments may free and reallocate some
!    --  of the individual arguments.
     --
!    --  This function will always set Success to False under VxWorks and other
!    --  similar operating systems which have no notion of the concept of
!    --  dynamically executable file.
  
     function Spawn
       (Program_Name : String;
*************** pragma Elaborate_Body (OS_Lib);
*** 619,625 ****
--- 663,698 ----
     --  operating systems which have no notion of separately spawnable programs.
     --
     --  "Spawn" should not be used in tasking applications.
+ 
+    procedure Spawn
+      (Program_Name           : String;
+       Args                   : Argument_List;
+       Output_File_Descriptor : File_Descriptor;
+       Return_Code            : out Integer;
+       Err_To_Out             : Boolean := True);
+    --  Similar to the procedure above, but redirects the output to the file
+    --  designated by Output_File_Descriptor. If Err_To_Out is True, then the
+    --  Standard Error output is also redirected.
+    --  Return_Code is set to the status code returned by the operating system
+    --
+    --  "Spawn" should not be used in tasking applications.
+ 
+    procedure Spawn
+      (Program_Name  : String;
+       Args          : Argument_List;
+       Output_File   : String;
+       Success       : out Boolean;
+       Return_Code   : out Integer;
+       Err_To_Out    : Boolean := True);
+    --  Similar to the procedure above, but saves the output of the command to
+    --  a file with the name Output_File.
     --
+    --  Success is set to True if the command is executed and its output
+    --  successfully written to the file. If Success is True, then Return_Code
+    --  will be set to the status code returned by the operating system.
+    --  Otherwise, Return_Code is undefined.
+    --
+    --  "Spawn" should not be used in tasking applications.
  
     type Process_Id is private;
     --  A private type used to identify a process activated by the following
*************** pragma Elaborate_Body (OS_Lib);
*** 627,657 ****
     --  comparison for equality.
  
     Invalid_Pid : constant Process_Id;
!    --  A special value used to indicate errors, as described below.
  
     function Non_Blocking_Spawn
       (Program_Name : String;
        Args         : Argument_List)
        return         Process_Id;
!    --  This is a non blocking call. The Process_Id of the spawned process
!    --  is returned. Parameters are to be used as in Spawn. If Invalid_Id
!    --  is returned the program could not be spawned.
     --
     --  "Non_Blocking_Spawn" should not be used in tasking applications.
     --
!    --  This function will always return Invalid_Id under VxWorks, since
!    --  there is no notion of executables under this OS.
  
     procedure Wait_Process (Pid : out Process_Id; Success : out Boolean);
     --  Wait for the completion of any of the processes created by previous
!    --  calls to Non_Blocking_Spawn. The caller will be suspended until one
!    --  of these processes terminates (normally or abnormally). If any of
!    --  these subprocesses terminates prior to the call to Wait_Process (and
!    --  has not been returned by a previous call to Wait_Process), then the
!    --  call to Wait_Process is immediate. Pid identifies the process that
!    --  has terminated (matching the value returned from Non_Blocking_Spawn).
!    --  Success is set to True if this sub-process terminated successfully.
!    --  If Pid = Invalid_Id, there were no subprocesses left to wait on.
     --
     --  This function will always set success to False under VxWorks, since
     --  there is no notion of executables under this OS.
--- 700,730 ----
     --  comparison for equality.
  
     Invalid_Pid : constant Process_Id;
!    --  A special value used to indicate errors, as described below
  
     function Non_Blocking_Spawn
       (Program_Name : String;
        Args         : Argument_List)
        return         Process_Id;
!    --  This is a non blocking call. The Process_Id of the spawned process is
!    --  returned. Parameters are to be used as in Spawn. If Invalid_Id is
!    --  returned the program could not be spawned.
     --
     --  "Non_Blocking_Spawn" should not be used in tasking applications.
     --
!    --  This function will always return Invalid_Id under VxWorks, since there
!    --  is no notion of executables under this OS.
  
     procedure Wait_Process (Pid : out Process_Id; Success : out Boolean);
     --  Wait for the completion of any of the processes created by previous
!    --  calls to Non_Blocking_Spawn. The caller will be suspended until one of
!    --  these processes terminates (normally or abnormally). If any of these
!    --  subprocesses terminates prior to the call to Wait_Process (and has not
!    --  been returned by a previous call to Wait_Process), then the call to
!    --  Wait_Process is immediate. Pid identifies the process that has
!    --  terminated (matching the value returned from Non_Blocking_Spawn).
!    --  Success is set to True if this sub-process terminated successfully. If
!    --  Pid = Invalid_Id, there were no subprocesses left to wait on.
     --
     --  This function will always set success to False under VxWorks, since
     --  there is no notion of executables under this OS.
*************** pragma Elaborate_Body (OS_Lib);
*** 659,667 ****
     function Argument_String_To_List
       (Arg_String : String)
        return       Argument_List_Access;
!    --  Take a string that is a program and its arguments and parse it into
!    --  an Argument_List. Note that the result is allocated on the heap, and
!    --  must be freed by the programmer (when it is no longer needed) to avoid
     --  memory leaks.
  
     -------------------
--- 732,740 ----
     function Argument_String_To_List
       (Arg_String : String)
        return       Argument_List_Access;
!    --  Take a string that is a program and its arguments and parse it into an
!    --  Argument_List. Note that the result is allocated on the heap, and must
!    --  be freed by the programmer (when it is no longer needed) to avoid
     --  memory leaks.
  
     -------------------
*************** pragma Elaborate_Body (OS_Lib);
*** 669,693 ****
     -------------------
  
     function Getenv (Name : String) return String_Access;
!    --  Get the value of the environment variable. Returns an access
!    --  to the empty string if the environment variable does not exist
!    --  or has an explicit null value (in some operating systems these
!    --  are distinct cases, in others they are not; this interface
!    --  abstracts away that difference. The argument is allocated on
!    --  the heap (even in the null case), and needs to be freed explicitly
!    --  when no longer needed to avoid memory leaks.
  
     procedure Setenv (Name : String; Value : String);
     --  Set the value of the environment variable Name to Value. This call
     --  modifies the current environment, but does not modify the parent
!    --  process environment. After a call to Setenv, Getenv (Name) will
!    --  always return a String_Access referencing the same String as Value.
!    --  This is true also for the null string case (the actual effect may
!    --  be to either set an explicit null as the value, or to remove the
!    --  entry, this is operating system dependent). Note that any following
!    --  calls to Spawn will pass an environment to the spawned process that
!    --  includes the changes made by Setenv calls. This procedure is not
!    --  available under VMS.
  
     procedure OS_Exit (Status : Integer);
     pragma Import (C, OS_Exit, "__gnat_os_exit");
--- 742,765 ----
     -------------------
  
     function Getenv (Name : String) return String_Access;
!    --  Get the value of the environment variable. Returns an access to the
!    --  empty string if the environment variable does not exist or has an
!    --  explicit null value (in some operating systems these are distinct
!    --  cases, in others they are not; this interface abstracts away that
!    --  difference. The argument is allocated on the heap (even in the null
!    --  case), and needs to be freed explicitly when no longer needed to avoid
!    --  memory leaks.
  
     procedure Setenv (Name : String; Value : String);
     --  Set the value of the environment variable Name to Value. This call
     --  modifies the current environment, but does not modify the parent
!    --  process environment. After a call to Setenv, Getenv (Name) will always
!    --  return a String_Access referencing the same String as Value. This is
!    --  true also for the null string case (the actual effect may be to either
!    --  set an explicit null as the value, or to remove the entry, this is
!    --  operating system dependent). Note that any following calls to Spawn
!    --  will pass an environment to the spawned process that includes the
!    --  changes made by Setenv calls. This procedure is not available on VMS.
  
     procedure OS_Exit (Status : Integer);
     pragma Import (C, OS_Exit, "__gnat_os_exit");
*************** pragma Elaborate_Body (OS_Lib);
*** 698,734 ****
     pragma Import (C, OS_Abort, "abort");
     pragma No_Return (OS_Abort);
     --  Exit to OS signalling an abort (traceback or other appropriate
!    --  diagnostic information should be given if possible, or entry made
!    --  to the debugger if that is possible).
  
     function Errno return Integer;
     pragma Import (C, Errno, "__get_errno");
!    --  Return the task-safe last error number.
  
     procedure Set_Errno (Errno : Integer);
     pragma Import (C, Set_Errno, "__set_errno");
!    --  Set the task-safe error number.
  
     Directory_Separator : constant Character;
!    --  The character that is used to separate parts of a pathname.
  
     Path_Separator : constant Character;
!    --  The character to separate paths in an environment variable value.
  
  private
     pragma Import (C, Path_Separator, "__gnat_path_separator");
     pragma Import (C, Directory_Separator, "__gnat_dir_separator");
  
     type OS_Time is new Long_Integer;
!    --  Type used for timestamps in the compiler. This type is used to
!    --  hold time stamps, but may have a different representation than
!    --  C's time_t. This type needs to match the declaration of OS_Time
!    --  in adaint.h.
  
!    --  Add pragma Inline statements for comparison operations on OS_Time.
!    --  It would actually be nice to use pragma Import (Intrinsic) here,
!    --  but this was not properly supported till GNAT 3.15a, so that would
!    --  cause bootstrap path problems. To be changed later ???
  
     pragma Inline ("<");
     pragma Inline (">");
--- 770,808 ----
     pragma Import (C, OS_Abort, "abort");
     pragma No_Return (OS_Abort);
     --  Exit to OS signalling an abort (traceback or other appropriate
!    --  diagnostic information should be given if possible, or entry made to
!    --  the debugger if that is possible).
  
     function Errno return Integer;
     pragma Import (C, Errno, "__get_errno");
!    --  Return the task-safe last error number
  
     procedure Set_Errno (Errno : Integer);
     pragma Import (C, Set_Errno, "__set_errno");
!    --  Set the task-safe error number
  
     Directory_Separator : constant Character;
!    --  The character that is used to separate parts of a pathname
  
     Path_Separator : constant Character;
!    --  The character to separate paths in an environment variable value
  
  private
     pragma Import (C, Path_Separator, "__gnat_path_separator");
     pragma Import (C, Directory_Separator, "__gnat_dir_separator");
  
     type OS_Time is new Long_Integer;
!    --  Type used for timestamps in the compiler. This type is used to hold
!    --  time stamps, but may have a different representation than C's time_t.
!    --  This type needs to match the declaration of OS_Time in adaint.h.
  
!    --  Add pragma Inline statements for comparison operations on OS_Time. It
!    --  would actually be nice to use pragma Import (Intrinsic) here, but this
!    --  was not properly supported till GNAT 3.15a, so that would cause
!    --  bootstrap path problems. To be changed later ???
! 
!    Invalid_Time : constant OS_Time := -1;
!    --  This value should match the return valud by __gnat_file_time_*
  
     pragma Inline ("<");
     pragma Inline (">");
diff -Nrcpad gcc-3.4.3/gcc/ada/g-pehage.adb gcc-4.0.0/gcc/ada/g-pehage.adb
*** gcc-3.4.3/gcc/ada/g-pehage.adb	Tue Oct 21 13:42:04 2003
--- gcc-4.0.0/gcc/ada/g-pehage.adb	Mon Sep 13 10:18:39 2004
***************
*** 2,12 ****
  --                                                                          --
  --                         GNAT COMPILER COMPONENTS                         --
  --                                                                          --
! --        G N A T . P E R F E C T _ H A S H . G E N E R A T O R S           --
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2002-2003 Ada Core Technologies, Inc.           --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 2,12 ----
  --                                                                          --
  --                         GNAT COMPILER COMPONENTS                         --
  --                                                                          --
! --        G N A T . P E R F E C T _ H A S H _ G E N E R A T O R S           --
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2002-2004 Ada Core Technologies, Inc.           --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with GNAT.Heap_Sort_A; use GNAT.Heap_Sor
*** 38,44 ****
  with GNAT.OS_Lib;      use GNAT.OS_Lib;
  with GNAT.Table;
  
! package body GNAT.Perfect_Hash.Generators is
  
     --  We are using the algorithm of J. Czech as described in Zbigniew
     --  J. Czech, George Havas, and Bohdan S. Majewski ``An Optimal
--- 38,44 ----
  with GNAT.OS_Lib;      use GNAT.OS_Lib;
  with GNAT.Table;
  
! package body GNAT.Perfect_Hash_Generators is
  
     --  We are using the algorithm of J. Czech as described in Zbigniew
     --  J. Czech, George Havas, and Bohdan S. Majewski ``An Optimal
*************** package body GNAT.Perfect_Hash.Generator
*** 2397,2400 ****
        end case;
     end Value;
  
! end GNAT.Perfect_Hash.Generators;
--- 2397,2400 ----
        end case;
     end Value;
  
! end GNAT.Perfect_Hash_Generators;
diff -Nrcpad gcc-3.4.3/gcc/ada/g-pehage.ads gcc-4.0.0/gcc/ada/g-pehage.ads
*** gcc-3.4.3/gcc/ada/g-pehage.ads	Tue Oct 21 13:42:04 2003
--- gcc-4.0.0/gcc/ada/g-pehage.ads	Mon Sep 13 10:18:40 2004
***************
*** 2,12 ****
  --                                                                          --
  --                         GNAT COMPILER COMPONENTS                         --
  --                                                                          --
! --        G N A T . P E R F E C T _ H A S H . G E N E R A T O R S           --
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                 Copyright (C) 2002 Ada Core Technologies, Inc.           --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 2,12 ----
  --                                                                          --
  --                         GNAT COMPILER COMPONENTS                         --
  --                                                                          --
! --          G N A T . P E R F E C T _ H A S H _ G E N E R A T O R S         --
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2002-2004 Ada Core Technologies, Inc.           --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 31,46 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This package provides a single generator of static minimal perfect
! --  hash functions. No collisions occur and each item can be retrieved
! --  from the table in one probe (perfect property). The hash table
! --  size corresponds to the exact size of W and *no larger* (minimal
! --  property). The key set has to be know in advance (static
! --  property). The hash functions are also order preservering. If w2
! --  is inserted after w1 in the generator, then f (w1) < f (w2). These
! --  hashing functions are convenient for use with realtime applications.
  
! package GNAT.Perfect_Hash.Generators is
  
     Default_K_To_V : constant Float  := 2.05;
     --  Default ratio for the algorithm. When K is the number of keys,
--- 31,75 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This package provides a generator of static minimal perfect hash
! --  functions. To understand what a perfect hash function is, we
! --  define several notions. These definitions are inspired from the
! --  following paper:
  
! --    Zbigniew J. Czech, George Havas, and Bohdan S. Majewski ``An
! --    Optimal Algorithm for Generating Minimal Perfect Hash Functions'',
! --    Information Processing Letters, 43(1992) pp.257-264, Oct.1992
! 
! --  Let W be a set of m words. A hash function h is a function that
! --  maps the set of words W into some given interval of integers
! --  [0, k-1], where k is an integer, usually k >= m. h (w) where w
! --  is a word computes an address or an integer from I for the
! --  storage or the retrieval of that item. The storage area used to
! --  store items is known as a hash table. Words for which the same
! --  address is computed are called synonyms. Due to the existence
! --  of synonyms a situation called collision may arise in which two
! --  items w1 and w2 have the same address. Several schemes for
! --  resolving known. A perfect hash function is an injection from
! --  the word set W to the integer interval I with k >= m. If k = m,
! --  then h is a minimal perfect hash function. A hash function is
! --  order preserving if it puts entries into the hash table in a
! --  prespecified order.
! 
! --  A minimal perfect hash function is defined by two properties:
! 
! --    Since no collisions occur each item can be retrieved from the
! --    table in *one* probe. This represents the "perfect" property.
! 
! --    The hash table size corresponds to the exact size of W and
! --    *no larger*. This represents the "minimal" property.
! 
! --  The functions generated by this package require the key set to
! --  be known in advance (they are "static" hash functions).
! --  The hash functions are also order preservering. If w2 is inserted
! --  after w1 in the generator, then f (w1) < f (w2). These hashing
! --  functions are convenient for use with realtime applications.
! 
! package GNAT.Perfect_Hash_Generators is
  
     Default_K_To_V : constant Float  := 2.05;
     --  Default ratio for the algorithm. When K is the number of keys,
*************** package GNAT.Perfect_Hash.Generators is
*** 57,63 ****
     Default_Optimization : constant Optimization := CPU_Time;
     --  Optimize either the memory space or the execution time.
  
!    Verbose  : Boolean := False;
  
     procedure Initialize
       (Seed   : Natural;
--- 86,93 ----
     Default_Optimization : constant Optimization := CPU_Time;
     --  Optimize either the memory space or the execution time.
  
!    Verbose : Boolean := False;
!    --  Comment required ???
  
     procedure Initialize
       (Seed   : Natural;
*************** package GNAT.Perfect_Hash.Generators is
*** 183,186 ****
     --  Return the value of the component (I, J) of the table
     --  Name. When the table has only one dimension, J is ignored.
  
! end GNAT.Perfect_Hash.Generators;
--- 213,216 ----
     --  Return the value of the component (I, J) of the table
     --  Name. When the table has only one dimension, J is ignored.
  
! end GNAT.Perfect_Hash_Generators;
diff -Nrcpad gcc-3.4.3/gcc/ada/g-perhas.ads gcc-4.0.0/gcc/ada/g-perhas.ads
*** gcc-3.4.3/gcc/ada/g-perhas.ads	Tue Oct 21 13:42:04 2003
--- gcc-4.0.0/gcc/ada/g-perhas.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,67 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                  G N A T . P E R F E C T _ H A S H                       --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --              Copyright (C) 2002-2003 Ada Core Technologies, Inc.         --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- package GNAT.Perfect_Hash is
- pragma Pure (Perfect_Hash);
- 
-    --  The packages in this hierarchy implement perfect hash
-    --  functions. To understand what a perfect hash function is, we
-    --  define several notions. These definitions are inspired from the
-    --  following paper:
-    --
-    --    Zbigniew J. Czech, George Havas, and Bohdan S. Majewski ``An
-    --    Optimal Algorithm for Generating Minimal Perfect Hash Functions'',
-    --    Information Processing Letters, 43(1992) pp.257-264, Oct.1992
-    --
-    --  Let W be a set of m words. A hash function h is a function that
-    --  maps the set of words W into some given interval of integers
-    --  [0, k-1], where k is an integer, usually k >= m. h (w) where w
-    --  is a word computes an address or an integer from I for the
-    --  storage or the retrieval of that item. The storage area used to
-    --  store items is known as a hash table. Words for which the same
-    --  address is computed are called synonyms. Due to the existence
-    --  of synonyms a situation called collision may arise in which two
-    --  items w1 and w2 have the same address. Several schemes for
-    --  resolving known. A perfect hash function is an injection from
-    --  the word set W to the integer interval I with k >= m. If k = m,
-    --  then h is a minimal perfect hash function. A hash function is
-    --  order preserving if it puts entries into the hash table in a
-    --  prespecified order.
-    --
-    --  A minimal perfect hash function is defined by two properties:
-    --  * Since no collisions occur each item can be retrieved from the
-    --    table in *one* probe. This represents the "perfect" property.
-    --  * The hash table size corresponds to the exact size of W and
-    --    *no larger*. This represents the "minimal" property.
- 
- end GNAT.Perfect_Hash;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/g-regexp.adb gcc-4.0.0/gcc/ada/g-regexp.adb
*** gcc-3.4.3/gcc/ada/g-regexp.adb	Tue Oct 21 13:42:04 2003
--- gcc-4.0.0/gcc/ada/g-regexp.adb	Tue Jul  6 13:57:30 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 1999-2002 Ada Core Technologies, Inc.           --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 1999-2004 Ada Core Technologies, Inc.           --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body GNAT.Regexp is
*** 191,199 ****
           procedure Add_In_Map (C : Character);
           --  Add a character in the mapping, if it is not already defined
  
!          -----------------
!          --  Add_In_Map --
!          -----------------
  
           procedure Add_In_Map (C : Character) is
           begin
--- 191,199 ----
           procedure Add_In_Map (C : Character);
           --  Add a character in the mapping, if it is not already defined
  
!          ----------------
!          -- Add_In_Map --
!          ----------------
  
           procedure Add_In_Map (C : Character) is
           begin
*************** package body GNAT.Regexp is
*** 419,425 ****
           --  end-state) :
           --
           --  regexp   state_num | a b * empty_string
!          --  -------  ---------------------------------------
           --    a          1 (s) | 2 - - -
           --               2 (e) | - - - -
           --
--- 419,425 ----
           --  end-state) :
           --
           --  regexp   state_num | a b * empty_string
!          --  -------  ------------------------------
           --    a          1 (s) | 2 - - -
           --               2 (e) | - - - -
           --
diff -Nrcpad gcc-3.4.3/gcc/ada/g-regpat.adb gcc-4.0.0/gcc/ada/g-regpat.adb
*** gcc-3.4.3/gcc/ada/g-regpat.adb	Tue Jan 13 11:51:33 2004
--- gcc-4.0.0/gcc/ada/g-regpat.adb	Wed Dec  8 11:46:58 2004
***************
*** 7,13 ****
  --                                 B o d y                                  --
  --                                                                          --
  --               Copyright (C) 1986 by University of Toronto.               --
! --           Copyright (C) 1996-2003 Ada Core Technologies, Inc.            --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 7,13 ----
  --                                 B o d y                                  --
  --                                                                          --
  --               Copyright (C) 1986 by University of Toronto.               --
! --           Copyright (C) 1996-2004 Ada Core Technologies, Inc.            --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body GNAT.Regpat is
*** 2549,2555 ****
                          end if;
  
                          Scan := Get_Next (Program, Scan);
!                         exit when Scan = 0 or Program (Scan) /= BRANCH;
                       end loop;
  
                       exit State_Machine;
--- 2549,2555 ----
                          end if;
  
                          Scan := Get_Next (Program, Scan);
!                         exit when Scan = 0 or else Program (Scan) /= BRANCH;
                       end loop;
  
                       exit State_Machine;
*************** package body GNAT.Regpat is
*** 3406,3414 ****
       (Expression : String;
        Data       : String;
        Matches    : out Match_Array;
!       Size       : Program_Size := 0;
!       Data_First : Integer := -1;
!       Data_Last  : Positive := Positive'Last)
     is
        PM            : Pattern_Matcher (Size);
        Finalize_Size : Program_Size;
--- 3406,3414 ----
       (Expression : String;
        Data       : String;
        Matches    : out Match_Array;
!       Size       : Program_Size := Auto_Size;
!       Data_First : Integer      := -1;
!       Data_Last  : Positive     := Positive'Last)
     is
        PM            : Pattern_Matcher (Size);
        Finalize_Size : Program_Size;
*************** package body GNAT.Regpat is
*** 3426,3437 ****
     -- Match --
     -----------
  
!    function  Match
       (Expression : String;
        Data       : String;
!       Size       : Program_Size := 0;
!       Data_First : Integer := -1;
!       Data_Last  : Positive := Positive'Last) return Natural
     is
        PM         : Pattern_Matcher (Size);
        Final_Size : Program_Size; -- unused
--- 3426,3437 ----
     -- Match --
     -----------
  
!    function Match
       (Expression : String;
        Data       : String;
!       Size       : Program_Size := Auto_Size;
!       Data_First : Integer      := -1;
!       Data_Last  : Positive     := Positive'Last) return Natural
     is
        PM         : Pattern_Matcher (Size);
        Final_Size : Program_Size; -- unused
*************** package body GNAT.Regpat is
*** 3452,3460 ****
     function  Match
       (Expression : String;
        Data       : String;
!       Size       : Program_Size := 0;
!       Data_First : Integer := -1;
!       Data_Last  : Positive := Positive'Last) return Boolean
     is
        Matches    : Match_Array (0 .. 0);
        PM         : Pattern_Matcher (Size);
--- 3452,3460 ----
     function  Match
       (Expression : String;
        Data       : String;
!       Size       : Program_Size := Auto_Size;
!       Data_First : Integer      := -1;
!       Data_Last  : Positive     := Positive'Last) return Boolean
     is
        Matches    : Match_Array (0 .. 0);
        PM         : Pattern_Matcher (Size);
diff -Nrcpad gcc-3.4.3/gcc/ada/g-regpat.ads gcc-4.0.0/gcc/ada/g-regpat.ads
*** gcc-3.4.3/gcc/ada/g-regpat.ads	Thu Oct 23 11:57:52 2003
--- gcc-4.0.0/gcc/ada/g-regpat.ads	Wed May  5 10:09:54 2004
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                                                                          --
  --               Copyright (C) 1986 by University of Toronto.               --
! --           Copyright (C) 1996-2003 Ada Core Technologies, Inc.            --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 7,13 ----
  --                                 S p e c                                  --
  --                                                                          --
  --               Copyright (C) 1986 by University of Toronto.               --
! --           Copyright (C) 1996-2004 Ada Core Technologies, Inc.            --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** pragma Preelaborate (Regpat);
*** 300,318 ****
     --  This is limited by the size of a Character, as found in the
     --  byte-compiled version of regular expressions.
  
-    Max_Program_Size : constant := 2**15 - 1;
-    --  Maximum size that can be allocated for a program
- 
     Max_Curly_Repeat : constant := 32767;
     --  Maximum number of repetition for the curly operator.
     --  The digits in the {n}, {n,} and {n,m } operators can not be higher
     --  than this constant, since they have to fit on two characters in the
     --  byte-compiled version of regular expressions.
  
     type Program_Size is range 0 .. Max_Program_Size;
     for Program_Size'Size use 16;
     --  Number of bytes allocated for the byte-compiled version of a regular
!    --  expression.
  
     type Regexp_Flags is mod 256;
     for Regexp_Flags'Size use 8;
--- 300,331 ----
     --  This is limited by the size of a Character, as found in the
     --  byte-compiled version of regular expressions.
  
     Max_Curly_Repeat : constant := 32767;
     --  Maximum number of repetition for the curly operator.
     --  The digits in the {n}, {n,} and {n,m } operators can not be higher
     --  than this constant, since they have to fit on two characters in the
     --  byte-compiled version of regular expressions.
  
+    Max_Program_Size : constant := 2**15 - 1;
+    --  Maximum size that can be allocated for a program
+ 
     type Program_Size is range 0 .. Max_Program_Size;
     for Program_Size'Size use 16;
     --  Number of bytes allocated for the byte-compiled version of a regular
!    --  expression. The size required depends on the complexity of the regular
!    --  expression in a complex manner that is undocumented (other than in the
!    --  body of the Compile procedure). Normally the size is automatically set
!    --  and the programmer need not be concerned about it. There are two
!    --  exceptions to this. First in the calls to Match, it is possible to
!    --  specify a non-zero size that is known to be large enough. This can
!    --  slightly increase the efficiency by avoiding a copy. Second, in the
!    --  case of calling compile, it is possible using the procedural form
!    --  of Compile to use a single Pattern_Matcher variable for several
!    --  different expressions by setting its size sufficiently large.
! 
!    Auto_Size : constant := 0;
!    --  Used in calls to Match to indicate that the Size should be set to
!    --  a value appropriate to the expression being used automatically.
  
     type Regexp_Flags is mod 256;
     for Regexp_Flags'Size use 8;
*************** pragma Preelaborate (Regpat);
*** 368,376 ****
     --  matching a null string at position 1, which uses (1, 0)
     --  and no match at all.
  
!    ------------------------------
!    -- Pattern_Matcher Creation --
!    ------------------------------
  
     type Pattern_Matcher (Size : Program_Size) is private;
     --  Type used to represent a regular expression compiled into byte code
--- 381,394 ----
     --  matching a null string at position 1, which uses (1, 0)
     --  and no match at all.
  
!    ---------------------------------
!    -- Pattern_Matcher Compilation --
!    ---------------------------------
! 
!    --  The subprograms here are used to precompile regular expressions
!    --  for use in subsequent Match calls. Precompilation improves
!    --  efficiency if the same regular expression is to be used in
!    --  more than one Match call.
  
     type Pattern_Matcher (Size : Program_Size) is private;
     --  Type used to represent a regular expression compiled into byte code
*************** pragma Preelaborate (Regpat);
*** 381,394 ****
     function Compile
       (Expression : String;
        Flags      : Regexp_Flags := No_Flags) return Pattern_Matcher;
!    --  Compile a regular expression into internal code.
!    --  Raises Expression_Error if Expression is not a legal regular expression.
!    --  The appropriate size is calculated automatically, but this means that
!    --  the regular expression has to be compiled twice (the first time to
!    --  calculate the size, the second time to actually generate the byte code).
     --
!    --  Flags is the default value to use to set properties for Expression (case
!    --  sensitivity,...).
  
     procedure Compile
       (Matcher         : out Pattern_Matcher;
--- 399,416 ----
     function Compile
       (Expression : String;
        Flags      : Regexp_Flags := No_Flags) return Pattern_Matcher;
!    --  Compile a regular expression into internal code
     --
!    --  Raises Expression_Error if Expression is not a legal regular expression
!    --
!    --  The appropriate size is calculated automatically to correspond to the
!    --  provided expression. This is the normal default method of compilation.
!    --  Note that it is generally not possible to assign the result of two
!    --  different calls to this Compile function to the same Pattern_Matcher
!    --  variable, since the sizes will differ.
!    --
!    --  Flags is the default value to use to set properties for Expression
!    --  (e.g. case sensitivity,...).
  
     procedure Compile
       (Matcher         : out Pattern_Matcher;
*************** pragma Preelaborate (Regpat);
*** 396,406 ****
        Final_Code_Size : out Program_Size;
        Flags           : Regexp_Flags := No_Flags);
     --  Compile a regular expression into into internal code
!    --  This procedure is significantly faster than the function
!    --  Compile, as there is a known maximum size for the matcher.
!    --  This function raises Storage_Error if Matcher is too small
!    --  to hold the resulting code, or Expression_Error is Expression
!    --  is not a legal regular expression.
     --
     --  Flags is the default value to use to set properties for Expression (case
     --  sensitivity,...).
--- 418,445 ----
        Final_Code_Size : out Program_Size;
        Flags           : Regexp_Flags := No_Flags);
     --  Compile a regular expression into into internal code
! 
!    --  This procedure is significantly faster than the Compile function
!    --  since it avoids the extra step of precomputing the required size.
!    --
!    --  However, it requires the user to provide a Pattern_Matcher variable
!    --  whose size is preset to a large enough value. One advantage of this
!    --  approach, in addition to the improved efficiency, is that the same
!    --  Pattern_Matcher variable can be used to hold the compiled code for
!    --  several different regular expressions by setting a size that is
!    --  large enough to accomodate all possibilities.
!    --
!    --  In this version of the procedure call, the actual required code
!    --  size is returned. Also if Matcher.Size is zero on entry, then the
!    --  resulting code is not stored. A call with Matcher.Size set to Auto_Size
!    --  can thus be used to determine the space required for compiling the
!    --  given regular expression.
!    --
!    --  This function raises Storage_Error if Matcher is too small to hold
!    --  the resulting code (i.e. Matcher.Size has too small a value).
!    --
!    --  Expression_Error is raised if the string Expression does not contain
!    --  a valid regular expression.
     --
     --  Flags is the default value to use to set properties for Expression (case
     --  sensitivity,...).
*************** pragma Preelaborate (Regpat);
*** 410,416 ****
        Expression : String;
        Flags      : Regexp_Flags := No_Flags);
     --  Same procedure as above, expect it does not return the final
!    --  program size.
  
     function Paren_Count (Regexp : Pattern_Matcher) return Match_Count;
     pragma Inline (Paren_Count);
--- 449,455 ----
        Expression : String;
        Flags      : Regexp_Flags := No_Flags);
     --  Same procedure as above, expect it does not return the final
!    --  program size, and Matcher.Size cannot be Auto_Size.
  
     function Paren_Count (Regexp : Pattern_Matcher) return Match_Count;
     pragma Inline (Paren_Count);
*************** pragma Preelaborate (Regpat);
*** 442,524 ****
     -- Matching --
     --------------
  
!    procedure Match
!      (Expression     : String;
!       Data           : String;
!       Matches        : out Match_Array;
!       Size           : Program_Size := 0;
!       Data_First     : Integer      := -1;
!       Data_Last      : Positive     := Positive'Last);
!    --  Match Expression against Data (Data_First .. Data_Last) and store
!    --  result in Matches.
!    --
!    --  Data_First defaults to Data'First if unspecified (that is the
!    --  dummy value of -1 is interpreted to mean Data'First).
!    --
!    --  Data_Last defaults to Data'Last if unspecified (that is the
!    --  dummy value of Positive'Last is interpreted to mean Data'Last)
!    --
!    --  It is important that Data contains the whole string (or file) you
!    --  want to matched against, even if you start in the middle, since
!    --  otherwise regular expressions starting with "^" or ending with "$" will
!    --  be improperly processed.
     --
!    --  Function raises Storage_Error if Size is too small for Expression,
!    --  or Expression_Error if Expression is not a legal regular expression.
!    --  If Size is 0, then the appropriate size is automatically calculated
!    --  by this package, but this is slightly slower.
     --
     --  At most Matches'Length parenthesis are returned.
  
!    function  Match
       (Expression : String;
        Data       : String;
!       Size       : Program_Size := 0;
!       Data_First : Integer  := -1;
!       Data_Last  : Positive := Positive'Last) return Natural;
!    --  Return the position where Data matches, or (Data'First - 1) if
!    --  there is no match.
!    --
!    --  Function raises Storage_Error if Size is too small for Expression
!    --  or Expression_Error if Expression is not a legal regular expression
!    --
!    --  If Size is 0, then the appropriate size is automatically calculated
!    --  by this package, but this is slightly slower.
!    --  See description of Data_First and Data_Last above.
  
     function Match
       (Expression : String;
        Data       : String;
!       Size       : Program_Size := 0;
!       Data_First : Integer  := -1;
!       Data_Last  : Positive := Positive'Last) return Boolean;
!    --  Return True if Data matches Expression. Match raises Storage_Error
!    --  if Size is too small for Expression, or Expression_Error if Expression
!    --  is not a legal regular expression.
!    --
!    --  If Size is 0, then the appropriate size is automatically calculated
!    --  by this package, but this is slightly slower.
!    --
!    --  See description of Data_First and Data_Last above.
  
     ------------------------------------------------
!    -- Matching a pre-compiled regular expression --
     ------------------------------------------------
  
     --  The following functions are significantly faster if you need to reuse
     --  the same regular expression multiple times, since you only have to
!    --  compile it once.
  
     function  Match
       (Self       : Pattern_Matcher;
        Data       : String;
        Data_First : Integer  := -1;
        Data_Last  : Positive := Positive'Last) return Natural;
!    --  Match Data using the given pattern matcher.
!    --  Return the position where Data matches, or (Data'First - 1) if there is
!    --  no match.
!    --
!    --  See description of Data_First and Data_Last above.
  
     function  Match
       (Self       : Pattern_Matcher;
--- 481,576 ----
     -- Matching --
     --------------
  
!    --  The Match subprograms are given a regular expression in string
!    --  form, and perform the corresponding match. The following parameters
!    --  are present in all forms of the Match call.
! 
!    --    Expression contains the regular expression to be matched as a string
! 
!    --    Data contains the string to be matched
! 
!    --    Data_First is the lower bound for the match, i.e. Data (Data_First)
!    --    will be the first character to be examined. If Data_First is set to
!    --    the special value of -1 (the default), then the first character to
!    --    be examined is Data (Data_First). However, the regular expression
!    --    character ^ (start of string) still refers to the first character
!    --    of the full string (Data (Data'First)), which is why there is a
!    --    separate mechanism for specifying Data_First.
! 
!    --    Data_Last is the upper bound for the match, i.e. Data (Data_Last)
!    --    will be the last character to be examined. If Data_Last is set to
!    --    the special value of Positive'Last (the default), then the last
!    --    character to be examined is Data (Data_Last). However, the regular
!    --    expression character $ (end of string) still refers to the last
!    --    character of the full string (Data (Data'Last)), which is why there
!    --    is a separate mechanism for specifying Data_Last.
! 
!    --    Note: the use of Data_First and Data_Last is not equivalent to
!    --    simply passing a slice as Expression because of the handling of
!    --    regular expression characters ^ and $.
! 
!    --    Size is the size allocated for the compiled byte code. Normally
!    --    this is defaulted to Auto_Size which means that the appropriate
!    --    size is allocated automatically. It is possible to specify an
!    --    explicit size, which must be sufficiently large. This slightly
!    --    increases the efficiency by avoiding the extra step of computing
!    --    the appropriate size.
! 
!    --  The following exceptions can be raised in calls to Match
     --
!    --    Storage_Error is raised if a non-zero value is given for Size
!    --    and it is too small to hold the compiled byte code.
     --
+    --    Expression_Error is raised if the given expression is not a legal
+    --    regular expression.
+ 
+ 
+    procedure Match
+      (Expression : String;
+       Data       : String;
+       Matches    : out Match_Array;
+       Size       : Program_Size := Auto_Size;
+       Data_First : Integer      := -1;
+       Data_Last  : Positive     := Positive'Last);
+    --  This version returns the result of the match stored in Match_Array.
     --  At most Matches'Length parenthesis are returned.
  
!    function Match
       (Expression : String;
        Data       : String;
!       Size       : Program_Size := Auto_Size;
!       Data_First : Integer      := -1;
!       Data_Last  : Positive     := Positive'Last) return Natural;
!    --  This version returns the position where Data matches, or if there is
!    --  no match, then the value Data'First - 1.
  
     function Match
       (Expression : String;
        Data       : String;
!       Size       : Program_Size := Auto_Size;
!       Data_First : Integer      := -1;
!       Data_Last  : Positive     := Positive'Last) return Boolean;
!    --  This version returns True if the match succeeds, False otherwise
  
     ------------------------------------------------
!    -- Matching a Pre-Compiled Regular Expression --
     ------------------------------------------------
  
     --  The following functions are significantly faster if you need to reuse
     --  the same regular expression multiple times, since you only have to
!    --  compile it once. For these functions you must first compile the
!    --  expression with a call to Compile as previously described.
! 
!    --  The parameters Data, Data_First and Data_Last are as described
!    --  in the previous section.
  
     function  Match
       (Self       : Pattern_Matcher;
        Data       : String;
        Data_First : Integer  := -1;
        Data_Last  : Positive := Positive'Last) return Natural;
!    --  Match Data using the given pattern matcher. Returns the position
!    --  where Data matches, or (Data'First - 1) if there is no match.
  
     function  Match
       (Self       : Pattern_Matcher;
*************** pragma Preelaborate (Regpat);
*** 526,533 ****
        Data_First : Integer  := -1;
        Data_Last  : Positive := Positive'Last) return Boolean;
     --  Return True if Data matches using the given pattern matcher.
-    --
-    --  See description of Data_First and Data_Last above.
  
     pragma Inline (Match);
     --  All except the last one below
--- 578,583 ----
*************** pragma Preelaborate (Regpat);
*** 542,549 ****
     --  The expression matches if Matches (0) /= No_Match.
     --
     --  At most Matches'Length parenthesis are returned.
-    --
-    --  See description of Data_First and Data_Last above.
  
     -----------
     -- Debug --
--- 592,597 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/g-soccon-aix.ads gcc-4.0.0/gcc/ada/g-soccon-aix.ads
*** gcc-3.4.3/gcc/ada/g-soccon-aix.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/g-soccon-aix.ads	Mon Jan  3 15:30:02 2005
***************
*** 0 ****
--- 1,161 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --               G N A T . S O C K E T S . C O N S T A N T S                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 2000-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package provides target dependent definitions of constant for use
+ --  by the GNAT.Sockets package (g-socket.ads). This package should not be
+ --  directly with'ed by an applications program.
+ 
+ --  This is the version for AIX
+ --  Do not edit this file by hand, instead edit and re-run gen-soccon.c
+ 
+ package GNAT.Sockets.Constants is
+ 
+    --------------
+    -- Families --
+    --------------
+ 
+    AF_INET            : constant :=            2; --  IPv4 address family
+    AF_INET6           : constant :=           24; --  IPv6 address family
+ 
+    -----------
+    -- Modes --
+    -----------
+ 
+    SOCK_STREAM        : constant :=            1; --  Stream socket
+    SOCK_DGRAM         : constant :=            2; --  Datagram socket
+ 
+    -------------------
+    -- Socket errors --
+    -------------------
+ 
+    EACCES             : constant :=           13; --  Permission denied
+    EADDRINUSE         : constant :=           67; --  Address already in use
+    EADDRNOTAVAIL      : constant :=           68; --  Cannot assign address
+    EAFNOSUPPORT       : constant :=           66; --  Addr family not supported
+    EALREADY           : constant :=           56; --  Operation in progress
+    EBADF              : constant :=            9; --  Bad file descriptor
+    ECONNABORTED       : constant :=           72; --  Connection aborted
+    ECONNREFUSED       : constant :=           79; --  Connection refused
+    ECONNRESET         : constant :=           73; --  Connection reset by peer
+    EDESTADDRREQ       : constant :=           58; --  Destination addr required
+    EFAULT             : constant :=           14; --  Bad address
+    EHOSTDOWN          : constant :=           80; --  Host is down
+    EHOSTUNREACH       : constant :=           81; --  No route to host
+    EINPROGRESS        : constant :=           55; --  Operation now in progress
+    EINTR              : constant :=            4; --  Interrupted system call
+    EINVAL             : constant :=           22; --  Invalid argument
+    EIO                : constant :=            5; --  Input output error
+    EISCONN            : constant :=           75; --  Socket already connected
+    ELOOP              : constant :=           85; --  Too many symbolic lynks
+    EMFILE             : constant :=           24; --  Too many open files
+    EMSGSIZE           : constant :=           59; --  Message too long
+    ENAMETOOLONG       : constant :=           86; --  Name too long
+    ENETDOWN           : constant :=           69; --  Network is down
+    ENETRESET          : constant :=           71; --  Disconn. on network reset
+    ENETUNREACH        : constant :=           70; --  Network is unreachable
+    ENOBUFS            : constant :=           74; --  No buffer space available
+    ENOPROTOOPT        : constant :=           61; --  Protocol not available
+    ENOTCONN           : constant :=           76; --  Socket not connected
+    ENOTSOCK           : constant :=           57; --  Operation on non socket
+    EOPNOTSUPP         : constant :=           64; --  Operation not supported
+    EPFNOSUPPORT       : constant :=           65; --  Unknown protocol family
+    EPROTONOSUPPORT    : constant :=           62; --  Unknown protocol
+    EPROTOTYPE         : constant :=           60; --  Unknown protocol type
+    ESHUTDOWN          : constant :=           77; --  Cannot send once shutdown
+    ESOCKTNOSUPPORT    : constant :=           63; --  Socket type not supported
+    ETIMEDOUT          : constant :=           78; --  Connection timed out
+    ETOOMANYREFS       : constant :=          115; --  Too many references
+    EWOULDBLOCK        : constant :=           11; --  Operation would block
+ 
+    -----------------
+    -- Host errors --
+    -----------------
+ 
+    HOST_NOT_FOUND     : constant :=            1; --  Unknown host
+    TRY_AGAIN          : constant :=            2; --  Host name lookup failure
+    NO_DATA            : constant :=            4; --  No data record for name
+    NO_RECOVERY        : constant :=            3; --  Non recoverable errors
+ 
+    -------------------
+    -- Control flags --
+    -------------------
+ 
+    FIONBIO            : constant :=  -2147195266; --  Set/clear non-blocking io
+    FIONREAD           : constant :=   1074030207; --  How many bytes to read
+ 
+    --------------------
+    -- Shutdown modes --
+    --------------------
+ 
+    SHUT_RD            : constant :=            0; --  No more recv
+    SHUT_WR            : constant :=            1; --  No more send
+    SHUT_RDWR          : constant :=            2; --  No more recv/send
+ 
+    ---------------------
+    -- Protocol levels --
+    ---------------------
+ 
+    SOL_SOCKET         : constant :=        65535; --  Options for socket level
+    IPPROTO_IP         : constant :=            0; --  Dummy protocol for IP
+    IPPROTO_UDP        : constant :=           17; --  UDP
+    IPPROTO_TCP        : constant :=            6; --  TCP
+ 
+    -------------------
+    -- Request flags --
+    -------------------
+ 
+    MSG_OOB            : constant :=            1; --  Process out-of-band data
+    MSG_PEEK           : constant :=            2; --  Peek at incoming data
+    MSG_EOR            : constant :=            8; --  Send end of record
+    MSG_WAITALL        : constant :=           64; --  Wait for full reception
+    MSG_NOSIGNAL       : constant :=           -1; --  No SIGPIPE on send
+    MSG_Forced_Flags   : constant :=            0;
+ 
+    --------------------
+    -- Socket options --
+    --------------------
+ 
+    TCP_NODELAY        : constant :=            1; --  Do not coalesce packets
+    SO_SNDBUF          : constant :=         4097; --  Set/get send buffer size
+    SO_RCVBUF          : constant :=         4098; --  Set/get recv buffer size
+    SO_REUSEADDR       : constant :=            4; --  Bind reuse local address
+    SO_KEEPALIVE       : constant :=            8; --  Enable keep-alive msgs
+    SO_LINGER          : constant :=          128; --  Defer close to flush data
+    SO_ERROR           : constant :=         4103; --  Get/clear error status
+    SO_BROADCAST       : constant :=           32; --  Can send broadcast msgs
+    IP_ADD_MEMBERSHIP  : constant :=           12; --  Join a multicast group
+    IP_DROP_MEMBERSHIP : constant :=           13; --  Leave a multicast group
+    IP_MULTICAST_TTL   : constant :=           10; --  Set/get multicast TTL
+    IP_MULTICAST_LOOP  : constant :=           11; --  Set/get mcast loopback
+ 
+ end GNAT.Sockets.Constants;
diff -Nrcpad gcc-3.4.3/gcc/ada/g-soccon-darwin.ads gcc-4.0.0/gcc/ada/g-soccon-darwin.ads
*** gcc-3.4.3/gcc/ada/g-soccon-darwin.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/g-soccon-darwin.ads	Mon Jan  3 15:34:18 2005
***************
*** 0 ****
--- 1,163 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --               G N A T . S O C K E T S . C O N S T A N T S                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 2000-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package provides target dependent definitions of constant for use
+ --  by the GNAT.Sockets package (g-socket.ads). This package should not be
+ --  directly with'ed by an applications program.
+ 
+ --  This is the version for powerpc-apple-darwin7.4.1
+ --  This file is generated automatically, do not modify it by hand! Instead,
+ --  make changes to gen-soccon.c and re-run it on each target.
+ 
+ package GNAT.Sockets.Constants is
+ 
+    --------------
+    -- Families --
+    --------------
+ 
+    AF_INET            : constant :=           2; --  IPv4 address family
+    AF_INET6           : constant :=          30; --  IPv6 address family
+ 
+    -----------
+    -- Modes --
+    -----------
+ 
+    SOCK_STREAM        : constant :=           1; --  Stream socket
+    SOCK_DGRAM         : constant :=           2; --  Datagram socket
+ 
+    -------------------
+    -- Socket errors --
+    -------------------
+ 
+    EACCES             : constant :=          13; --  Permission denied
+    EADDRINUSE         : constant :=          48; --  Address already in use
+    EADDRNOTAVAIL      : constant :=          49; --  Cannot assign address
+    EAFNOSUPPORT       : constant :=          47; --  Addr family not supported
+    EALREADY           : constant :=          37; --  Operation in progress
+    EBADF              : constant :=           9; --  Bad file descriptor
+    ECONNABORTED       : constant :=          53; --  Connection aborted
+    ECONNREFUSED       : constant :=          61; --  Connection refused
+    ECONNRESET         : constant :=          54; --  Connection reset by peer
+    EDESTADDRREQ       : constant :=          39; --  Destination addr required
+    EFAULT             : constant :=          14; --  Bad address
+    EHOSTDOWN          : constant :=          64; --  Host is down
+    EHOSTUNREACH       : constant :=          65; --  No route to host
+    EINPROGRESS        : constant :=          36; --  Operation now in progress
+    EINTR              : constant :=           4; --  Interrupted system call
+    EINVAL             : constant :=          22; --  Invalid argument
+    EIO                : constant :=           5; --  Input output error
+    EISCONN            : constant :=          56; --  Socket already connected
+    ELOOP              : constant :=          62; --  Too many symbolic lynks
+    EMFILE             : constant :=          24; --  Too many open files
+    EMSGSIZE           : constant :=          40; --  Message too long
+    ENAMETOOLONG       : constant :=          63; --  Name too long
+    ENETDOWN           : constant :=          50; --  Network is down
+    ENETRESET          : constant :=          52; --  Disconn. on network reset
+    ENETUNREACH        : constant :=          51; --  Network is unreachable
+    ENOBUFS            : constant :=          55; --  No buffer space available
+    ENOPROTOOPT        : constant :=          42; --  Protocol not available
+    ENOTCONN           : constant :=          57; --  Socket not connected
+    ENOTSOCK           : constant :=          38; --  Operation on non socket
+    EOPNOTSUPP         : constant :=          45; --  Operation not supported
+    EPFNOSUPPORT       : constant :=          46; --  Unknown protocol family
+    EPROTONOSUPPORT    : constant :=          43; --  Unknown protocol
+    EPROTOTYPE         : constant :=          41; --  Unknown protocol type
+    ESHUTDOWN          : constant :=          58; --  Cannot send once shutdown
+    ESOCKTNOSUPPORT    : constant :=          44; --  Socket type not supported
+    ETIMEDOUT          : constant :=          60; --  Connection timed out
+    ETOOMANYREFS       : constant :=          59; --  Too many references
+    EWOULDBLOCK        : constant :=          35; --  Operation would block
+ 
+    -----------------
+    -- Host errors --
+    -----------------
+ 
+    HOST_NOT_FOUND     : constant :=           1; --  Unknown host
+    TRY_AGAIN          : constant :=           2; --  Host name lookup failure
+    NO_DATA            : constant :=           4; --  No data record for name
+    NO_RECOVERY        : constant :=           3; --  Non recoverable errors
+ 
+    -------------------
+    -- Control flags --
+    -------------------
+ 
+    FIONBIO            : constant := -2147195266; --  Set/clear non-blocking io
+    FIONREAD           : constant :=  1074030207; --  How many bytes to read
+ 
+    --------------------
+    -- Shutdown modes --
+    --------------------
+ 
+    SHUT_RD            : constant :=           0; --  No more recv
+    SHUT_WR            : constant :=           1; --  No more send
+    SHUT_RDWR          : constant :=           2; --  No more recv/send
+ 
+    ---------------------
+    -- Protocol levels --
+    ---------------------
+ 
+    SOL_SOCKET         : constant :=       65535; --  Options for socket level
+    IPPROTO_IP         : constant :=           0; --  Dummy protocol for IP
+    IPPROTO_UDP        : constant :=          17; --  UDP
+    IPPROTO_TCP        : constant :=           6; --  TCP
+ 
+    -------------------
+    -- Request flags --
+    -------------------
+ 
+    MSG_OOB            : constant :=           1; --  Process out-of-band data
+    MSG_PEEK           : constant :=           2; --  Peek at incoming data
+    MSG_EOR            : constant :=           8; --  Send end of record
+    MSG_WAITALL        : constant :=          64; --  Wait for full reception
+    MSG_NOSIGNAL       : constant :=          -1; --  No SIGPIPE on send
+    MSG_Forced_Flags   : constant :=           0;
+    --  Flags set on all send(2) calls
+ 
+    --------------------
+    -- Socket options --
+    --------------------
+ 
+    TCP_NODELAY        : constant :=           1; --  Do not coalesce packets
+    SO_SNDBUF          : constant :=        4097; --  Set/get send buffer size
+    SO_RCVBUF          : constant :=        4098; --  Set/get recv buffer size
+    SO_REUSEADDR       : constant :=           4; --  Bind reuse local address
+    SO_KEEPALIVE       : constant :=           8; --  Enable keep-alive msgs
+    SO_LINGER          : constant :=         128; --  Defer close to flush data
+    SO_ERROR           : constant :=        4103; --  Get/clear error status
+    SO_BROADCAST       : constant :=          32; --  Can send broadcast msgs
+    IP_ADD_MEMBERSHIP  : constant :=          12; --  Join a multicast group
+    IP_DROP_MEMBERSHIP : constant :=          13; --  Leave a multicast group
+    IP_MULTICAST_TTL   : constant :=          10; --  Set/get multicast TTL
+    IP_MULTICAST_LOOP  : constant :=          11; --  Set/get mcast loopback
+ 
+ end GNAT.Sockets.Constants;
diff -Nrcpad gcc-3.4.3/gcc/ada/g-soccon-freebsd.ads gcc-4.0.0/gcc/ada/g-soccon-freebsd.ads
*** gcc-3.4.3/gcc/ada/g-soccon-freebsd.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/g-soccon-freebsd.ads	Mon Jan  3 15:30:02 2005
***************
*** 0 ****
--- 1,161 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --               G N A T . S O C K E T S . C O N S T A N T S                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 2000-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package provides target dependent definitions of constant for use
+ --  by the GNAT.Sockets package (g-socket.ads). This package should not be
+ --  directly with'ed by an applications program.
+ 
+ --  This is the version for i386 FreeBSD
+ --  Do not edit this file by hand, instead edit and re-run gen-soccon.c
+ 
+ package GNAT.Sockets.Constants is
+ 
+    --------------
+    -- Families --
+    --------------
+ 
+    AF_INET            : constant :=            2; --  IPv4 address family
+    AF_INET6           : constant :=           28; --  IPv6 address family
+ 
+    -----------
+    -- Modes --
+    -----------
+ 
+    SOCK_STREAM        : constant :=            1; --  Stream socket
+    SOCK_DGRAM         : constant :=            2; --  Datagram socket
+ 
+    -------------------
+    -- Socket errors --
+    -------------------
+ 
+    EACCES             : constant :=           13; --  Permission denied
+    EADDRINUSE         : constant :=           48; --  Address already in use
+    EADDRNOTAVAIL      : constant :=           49; --  Cannot assign address
+    EAFNOSUPPORT       : constant :=           47; --  Addr family not supported
+    EALREADY           : constant :=           37; --  Operation in progress
+    EBADF              : constant :=            9; --  Bad file descriptor
+    ECONNABORTED       : constant :=           53; --  Connection aborted
+    ECONNREFUSED       : constant :=           61; --  Connection refused
+    ECONNRESET         : constant :=           54; --  Connection reset by peer
+    EDESTADDRREQ       : constant :=           39; --  Destination addr required
+    EFAULT             : constant :=           14; --  Bad address
+    EHOSTDOWN          : constant :=           64; --  Host is down
+    EHOSTUNREACH       : constant :=           65; --  No route to host
+    EINPROGRESS        : constant :=           36; --  Operation now in progress
+    EINTR              : constant :=            4; --  Interrupted system call
+    EINVAL             : constant :=           22; --  Invalid argument
+    EIO                : constant :=            5; --  Input output error
+    EISCONN            : constant :=           56; --  Socket already connected
+    ELOOP              : constant :=           62; --  Too many symbolic lynks
+    EMFILE             : constant :=           24; --  Too many open files
+    EMSGSIZE           : constant :=           40; --  Message too long
+    ENAMETOOLONG       : constant :=           63; --  Name too long
+    ENETDOWN           : constant :=           50; --  Network is down
+    ENETRESET          : constant :=           52; --  Disconn. on network reset
+    ENETUNREACH        : constant :=           51; --  Network is unreachable
+    ENOBUFS            : constant :=           55; --  No buffer space available
+    ENOPROTOOPT        : constant :=           42; --  Protocol not available
+    ENOTCONN           : constant :=           57; --  Socket not connected
+    ENOTSOCK           : constant :=           38; --  Operation on non socket
+    EOPNOTSUPP         : constant :=           45; --  Operation not supported
+    EPFNOSUPPORT       : constant :=           46; --  Unknown protocol family
+    EPROTONOSUPPORT    : constant :=           43; --  Unknown protocol
+    EPROTOTYPE         : constant :=           41; --  Unknown protocol type
+    ESHUTDOWN          : constant :=           58; --  Cannot send once shutdown
+    ESOCKTNOSUPPORT    : constant :=           44; --  Socket type not supported
+    ETIMEDOUT          : constant :=           60; --  Connection timed out
+    ETOOMANYREFS       : constant :=           59; --  Too many references
+    EWOULDBLOCK        : constant :=           35; --  Operation would block
+ 
+    -----------------
+    -- Host errors --
+    -----------------
+ 
+    HOST_NOT_FOUND     : constant :=            1; --  Unknown host
+    TRY_AGAIN          : constant :=            2; --  Host name lookup failure
+    NO_DATA            : constant :=            4; --  No data record for name
+    NO_RECOVERY        : constant :=            3; --  Non recoverable errors
+ 
+    -------------------
+    -- Control flags --
+    -------------------
+ 
+    FIONBIO            : constant :=  -2147195266; --  Set/clear non-blocking io
+    FIONREAD           : constant :=   1074030207; --  How many bytes to read
+ 
+    --------------------
+    -- Shutdown modes --
+    --------------------
+ 
+    SHUT_RD            : constant :=            0; --  No more recv
+    SHUT_WR            : constant :=            1; --  No more send
+    SHUT_RDWR          : constant :=            2; --  No more recv/send
+ 
+    ---------------------
+    -- Protocol levels --
+    ---------------------
+ 
+    SOL_SOCKET         : constant :=        65535; --  Options for socket level
+    IPPROTO_IP         : constant :=            0; --  Dummy protocol for IP
+    IPPROTO_UDP        : constant :=           17; --  UDP
+    IPPROTO_TCP        : constant :=            6; --  TCP
+ 
+    -------------------
+    -- Request flags --
+    -------------------
+ 
+    MSG_OOB            : constant :=            1; --  Process out-of-band data
+    MSG_PEEK           : constant :=            2; --  Peek at incoming data
+    MSG_EOR            : constant :=            8; --  Send end of record
+    MSG_WAITALL        : constant :=           64; --  Wait for full reception
+    MSG_NOSIGNAL       : constant :=           -1; --  No SIGPIPE on send
+    MSG_Forced_Flags   : constant :=            0;
+ 
+    --------------------
+    -- Socket options --
+    --------------------
+ 
+    TCP_NODELAY        : constant :=            1; --  Do not coalesce packets
+    SO_SNDBUF          : constant :=         4097; --  Set/get send buffer size
+    SO_RCVBUF          : constant :=         4098; --  Set/get recv buffer size
+    SO_REUSEADDR       : constant :=            4; --  Bind reuse local address
+    SO_KEEPALIVE       : constant :=            8; --  Enable keep-alive msgs
+    SO_LINGER          : constant :=          128; --  Defer close to flush data
+    SO_ERROR           : constant :=         4103; --  Get/clear error status
+    SO_BROADCAST       : constant :=           32; --  Can send broadcast msgs
+    IP_ADD_MEMBERSHIP  : constant :=           12; --  Join a multicast group
+    IP_DROP_MEMBERSHIP : constant :=           13; --  Leave a multicast group
+    IP_MULTICAST_TTL   : constant :=           10; --  Set/get multicast TTL
+    IP_MULTICAST_LOOP  : constant :=           11; --  Set/get mcast loopback
+ 
+ end GNAT.Sockets.Constants;
diff -Nrcpad gcc-3.4.3/gcc/ada/g-soccon-hpux.ads gcc-4.0.0/gcc/ada/g-soccon-hpux.ads
*** gcc-3.4.3/gcc/ada/g-soccon-hpux.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/g-soccon-hpux.ads	Mon Jan  3 15:30:02 2005
***************
*** 0 ****
--- 1,161 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --               G N A T . S O C K E T S . C O N S T A N T S                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 2000-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package provides target dependent definitions of constant for use
+ --  by the GNAT.Sockets package (g-socket.ads). This package should not be
+ --  directly with'ed by an applications program.
+ 
+ --  This is the version for HP/UX
+ --  Do not edit this file by hand, instead edit and re-run gen-soccon.c
+ 
+ package GNAT.Sockets.Constants is
+ 
+    --------------
+    -- Families --
+    --------------
+ 
+    AF_INET            : constant :=            2; --  IPv4 address family
+    AF_INET6           : constant :=           26; --  IPv6 address family
+ 
+    -----------
+    -- Modes --
+    -----------
+ 
+    SOCK_STREAM        : constant :=            1; --  Stream socket
+    SOCK_DGRAM         : constant :=            2; --  Datagram socket
+ 
+    -------------------
+    -- Socket errors --
+    -------------------
+ 
+    EACCES             : constant :=           13; --  Permission denied
+    EADDRINUSE         : constant :=          226; --  Address already in use
+    EADDRNOTAVAIL      : constant :=          227; --  Cannot assign address
+    EAFNOSUPPORT       : constant :=          225; --  Addr family not supported
+    EALREADY           : constant :=          244; --  Operation in progress
+    EBADF              : constant :=            9; --  Bad file descriptor
+    ECONNABORTED       : constant :=          231; --  Connection aborted
+    ECONNREFUSED       : constant :=          239; --  Connection refused
+    ECONNRESET         : constant :=          232; --  Connection reset by peer
+    EDESTADDRREQ       : constant :=          217; --  Destination addr required
+    EFAULT             : constant :=           14; --  Bad address
+    EHOSTDOWN          : constant :=          241; --  Host is down
+    EHOSTUNREACH       : constant :=          242; --  No route to host
+    EINPROGRESS        : constant :=          245; --  Operation now in progress
+    EINTR              : constant :=            4; --  Interrupted system call
+    EINVAL             : constant :=           22; --  Invalid argument
+    EIO                : constant :=            5; --  Input output error
+    EISCONN            : constant :=          234; --  Socket already connected
+    ELOOP              : constant :=          249; --  Too many symbolic lynks
+    EMFILE             : constant :=           24; --  Too many open files
+    EMSGSIZE           : constant :=          218; --  Message too long
+    ENAMETOOLONG       : constant :=          248; --  Name too long
+    ENETDOWN           : constant :=          228; --  Network is down
+    ENETRESET          : constant :=          230; --  Disconn. on network reset
+    ENETUNREACH        : constant :=          229; --  Network is unreachable
+    ENOBUFS            : constant :=          233; --  No buffer space available
+    ENOPROTOOPT        : constant :=          220; --  Protocol not available
+    ENOTCONN           : constant :=          235; --  Socket not connected
+    ENOTSOCK           : constant :=          216; --  Operation on non socket
+    EOPNOTSUPP         : constant :=          223; --  Operation not supported
+    EPFNOSUPPORT       : constant :=          224; --  Unknown protocol family
+    EPROTONOSUPPORT    : constant :=          221; --  Unknown protocol
+    EPROTOTYPE         : constant :=          219; --  Unknown protocol type
+    ESHUTDOWN          : constant :=          236; --  Cannot send once shutdown
+    ESOCKTNOSUPPORT    : constant :=          222; --  Socket type not supported
+    ETIMEDOUT          : constant :=          238; --  Connection timed out
+    ETOOMANYREFS       : constant :=          237; --  Too many references
+    EWOULDBLOCK        : constant :=          246; --  Operation would block
+ 
+    -----------------
+    -- Host errors --
+    -----------------
+ 
+    HOST_NOT_FOUND     : constant :=            1; --  Unknown host
+    TRY_AGAIN          : constant :=            2; --  Host name lookup failure
+    NO_DATA            : constant :=            4; --  No data record for name
+    NO_RECOVERY        : constant :=            3; --  Non recoverable errors
+ 
+    -------------------
+    -- Control flags --
+    -------------------
+ 
+    FIONBIO            : constant :=  -2147195266; --  Set/clear non-blocking io
+    FIONREAD           : constant :=   1074030207; --  How many bytes to read
+ 
+    --------------------
+    -- Shutdown modes --
+    --------------------
+ 
+    SHUT_RD            : constant :=            0; --  No more recv
+    SHUT_WR            : constant :=            1; --  No more send
+    SHUT_RDWR          : constant :=            2; --  No more recv/send
+ 
+    ---------------------
+    -- Protocol levels --
+    ---------------------
+ 
+    SOL_SOCKET         : constant :=        65535; --  Options for socket level
+    IPPROTO_IP         : constant :=            0; --  Dummy protocol for IP
+    IPPROTO_UDP        : constant :=           17; --  UDP
+    IPPROTO_TCP        : constant :=            6; --  TCP
+ 
+    -------------------
+    -- Request flags --
+    -------------------
+ 
+    MSG_OOB            : constant :=            1; --  Process out-of-band data
+    MSG_PEEK           : constant :=            2; --  Peek at incoming data
+    MSG_EOR            : constant :=            8; --  Send end of record
+    MSG_WAITALL        : constant :=           64; --  Wait for full reception
+    MSG_NOSIGNAL       : constant :=           -1; --  No SIGPIPE on send
+    MSG_Forced_Flags   : constant :=            0;
+ 
+    --------------------
+    -- Socket options --
+    --------------------
+ 
+    TCP_NODELAY        : constant :=            1; --  Do not coalesce packets
+    SO_SNDBUF          : constant :=         4097; --  Set/get send buffer size
+    SO_RCVBUF          : constant :=         4098; --  Set/get recv buffer size
+    SO_REUSEADDR       : constant :=            4; --  Bind reuse local address
+    SO_KEEPALIVE       : constant :=            8; --  Enable keep-alive msgs
+    SO_LINGER          : constant :=          128; --  Defer close to flush data
+    SO_ERROR           : constant :=         4103; --  Get/clear error status
+    SO_BROADCAST       : constant :=           32; --  Can send broadcast msgs
+    IP_ADD_MEMBERSHIP  : constant :=            5; --  Join a multicast group
+    IP_DROP_MEMBERSHIP : constant :=            6; --  Leave a multicast group
+    IP_MULTICAST_TTL   : constant :=            3; --  Set/get multicast TTL
+    IP_MULTICAST_LOOP  : constant :=            4; --  Set/get mcast loopback
+ 
+ end GNAT.Sockets.Constants;
diff -Nrcpad gcc-3.4.3/gcc/ada/g-soccon-interix.ads gcc-4.0.0/gcc/ada/g-soccon-interix.ads
*** gcc-3.4.3/gcc/ada/g-soccon-interix.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/g-soccon-interix.ads	Mon Jan  3 15:30:02 2005
***************
*** 0 ****
--- 1,161 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --               G N A T . S O C K E T S . C O N S T A N T S                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 2000-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package provides target dependent definitions of constant for use
+ --  by the GNAT.Sockets package (g-socket.ads). This package should not be
+ --  directly with'ed by an applications program.
+ 
+ --  This is the version for Interix
+ --  Do not edit this file by hand, instead edit and re-run gen-soccon.c
+ 
+ package GNAT.Sockets.Constants is
+ 
+    --------------
+    -- Families --
+    --------------
+ 
+    AF_INET            : constant :=            2; --  IPv4 address family
+    AF_INET6           : constant :=           -1; --  IPv6 address family
+ 
+    -----------
+    -- Modes --
+    -----------
+ 
+    SOCK_STREAM        : constant :=            1; --  Stream socket
+    SOCK_DGRAM         : constant :=            2; --  Datagram socket
+ 
+    -------------------
+    -- Socket errors --
+    -------------------
+ 
+    EACCES             : constant :=           13; --  Permission denied
+    EADDRINUSE         : constant :=           48; --  Address already in use
+    EADDRNOTAVAIL      : constant :=           49; --  Cannot assign address
+    EAFNOSUPPORT       : constant :=           47; --  Addr family not supported
+    EALREADY           : constant :=           37; --  Operation in progress
+    EBADF              : constant :=            9; --  Bad file descriptor
+    ECONNABORTED       : constant :=           53; --  Connection aborted
+    ECONNREFUSED       : constant :=           61; --  Connection refused
+    ECONNRESET         : constant :=           54; --  Connection reset by peer
+    EDESTADDRREQ       : constant :=           82; --  Destination addr required
+    EFAULT             : constant :=           14; --  Bad address
+    EHOSTDOWN          : constant :=           64; --  Host is down
+    EHOSTUNREACH       : constant :=           65; --  No route to host
+    EINPROGRESS        : constant :=           80; --  Operation now in progress
+    EINTR              : constant :=            4; --  Interrupted system call
+    EINVAL             : constant :=           22; --  Invalid argument
+    EIO                : constant :=            5; --  Input output error
+    EISCONN            : constant :=           56; --  Socket already connected
+    ELOOP              : constant :=           62; --  Too many symbolic lynks
+    EMFILE             : constant :=           24; --  Too many open files
+    EMSGSIZE           : constant :=           83; --  Message too long
+    ENAMETOOLONG       : constant :=           38; --  Name too long
+    ENETDOWN           : constant :=           50; --  Network is down
+    ENETRESET          : constant :=           52; --  Disconn. on network reset
+    ENETUNREACH        : constant :=           51; --  Network is unreachable
+    ENOBUFS            : constant :=           55; --  No buffer space available
+    ENOPROTOOPT        : constant :=           85; --  Protocol not available
+    ENOTCONN           : constant :=           57; --  Socket not connected
+    ENOTSOCK           : constant :=           81; --  Operation on non socket
+    EOPNOTSUPP         : constant :=           45; --  Operation not supported
+    EPFNOSUPPORT       : constant :=           46; --  Unknown protocol family
+    EPROTONOSUPPORT    : constant :=           43; --  Unknown protocol
+    EPROTOTYPE         : constant :=           84; --  Unknown protocol type
+    ESHUTDOWN          : constant :=           58; --  Cannot send once shutdown
+    ESOCKTNOSUPPORT    : constant :=           44; --  Socket type not supported
+    ETIMEDOUT          : constant :=           60; --  Connection timed out
+    ETOOMANYREFS       : constant :=           59; --  Too many references
+    EWOULDBLOCK        : constant :=           11; --  Operation would block
+ 
+    -----------------
+    -- Host errors --
+    -----------------
+ 
+    HOST_NOT_FOUND     : constant :=           90; --  Unknown host
+    TRY_AGAIN          : constant :=           91; --  Host name lookup failure
+    NO_DATA            : constant :=           93; --  No data record for name
+    NO_RECOVERY        : constant :=           92; --  Non recoverable errors
+ 
+    -------------------
+    -- Control flags --
+    -------------------
+ 
+    FIONBIO            : constant :=  -2147195390; --  Set/clear non-blocking io
+    FIONREAD           : constant :=   1074030081; --  How many bytes to read
+ 
+    --------------------
+    -- Shutdown modes --
+    --------------------
+ 
+    SHUT_RD            : constant :=            0; --  No more recv
+    SHUT_WR            : constant :=            1; --  No more send
+    SHUT_RDWR          : constant :=            2; --  No more recv/send
+ 
+    ---------------------
+    -- Protocol levels --
+    ---------------------
+ 
+    SOL_SOCKET         : constant :=        65535; --  Options for socket level
+    IPPROTO_IP         : constant :=            0; --  Dummy protocol for IP
+    IPPROTO_UDP        : constant :=           17; --  UDP
+    IPPROTO_TCP        : constant :=            6; --  TCP
+ 
+    -------------------
+    -- Request flags --
+    -------------------
+ 
+    MSG_OOB            : constant :=            1; --  Process out-of-band data
+    MSG_PEEK           : constant :=            2; --  Peek at incoming data
+    MSG_EOR            : constant :=            8; --  Send end of record
+    MSG_WAITALL        : constant :=           64; --  Wait for full reception
+    MSG_NOSIGNAL       : constant :=           -1; --  No SIGPIPE on send
+    MSG_Forced_Flags   : constant :=            0;
+ 
+    --------------------
+    -- Socket options --
+    --------------------
+ 
+    TCP_NODELAY        : constant :=            1; --  Do not coalesce packets
+    SO_SNDBUF          : constant :=         4097; --  Set/get send buffer size
+    SO_RCVBUF          : constant :=         4098; --  Set/get recv buffer size
+    SO_REUSEADDR       : constant :=            4; --  Bind reuse local address
+    SO_KEEPALIVE       : constant :=            8; --  Enable keep-alive msgs
+    SO_LINGER          : constant :=          128; --  Defer close to flush data
+    SO_ERROR           : constant :=         4103; --  Get/clear error status
+    SO_BROADCAST       : constant :=           32; --  Can send broadcast msgs
+    IP_ADD_MEMBERSHIP  : constant :=            5; --  Join a multicast group
+    IP_DROP_MEMBERSHIP : constant :=            6; --  Leave a multicast group
+    IP_MULTICAST_TTL   : constant :=            3; --  Set/get multicast TTL
+    IP_MULTICAST_LOOP  : constant :=            4; --  Set/get mcast loopback
+ 
+ end GNAT.Sockets.Constants;
diff -Nrcpad gcc-3.4.3/gcc/ada/g-soccon-irix.ads gcc-4.0.0/gcc/ada/g-soccon-irix.ads
*** gcc-3.4.3/gcc/ada/g-soccon-irix.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/g-soccon-irix.ads	Mon Jan  3 15:30:02 2005
***************
*** 0 ****
--- 1,161 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --               G N A T . S O C K E T S . C O N S T A N T S                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 2000-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package provides target dependent definitions of constant for use
+ --  by the GNAT.Sockets package (g-socket.ads). This package should not be
+ --  directly with'ed by an applications program.
+ 
+ --  This is the version for SGI
+ --  Do not edit this file by hand, instead edit and re-run gen-soccon.c
+ 
+ package GNAT.Sockets.Constants is
+ 
+    --------------
+    -- Families --
+    --------------
+ 
+    AF_INET            : constant :=            2; --  IPv4 address family
+    AF_INET6           : constant :=           24; --  IPv6 address family
+ 
+    -----------
+    -- Modes --
+    -----------
+ 
+    SOCK_STREAM        : constant :=            2; --  Stream socket
+    SOCK_DGRAM         : constant :=            1; --  Datagram socket
+ 
+    -------------------
+    -- Socket errors --
+    -------------------
+ 
+    EACCES             : constant :=           13; --  Permission denied
+    EADDRINUSE         : constant :=          125; --  Address already in use
+    EADDRNOTAVAIL      : constant :=          126; --  Cannot assign address
+    EAFNOSUPPORT       : constant :=          124; --  Addr family not supported
+    EALREADY           : constant :=          149; --  Operation in progress
+    EBADF              : constant :=            9; --  Bad file descriptor
+    ECONNABORTED       : constant :=          130; --  Connection aborted
+    ECONNREFUSED       : constant :=          146; --  Connection refused
+    ECONNRESET         : constant :=          131; --  Connection reset by peer
+    EDESTADDRREQ       : constant :=           96; --  Destination addr required
+    EFAULT             : constant :=           14; --  Bad address
+    EHOSTDOWN          : constant :=          147; --  Host is down
+    EHOSTUNREACH       : constant :=          148; --  No route to host
+    EINPROGRESS        : constant :=          150; --  Operation now in progress
+    EINTR              : constant :=            4; --  Interrupted system call
+    EINVAL             : constant :=           22; --  Invalid argument
+    EIO                : constant :=            5; --  Input output error
+    EISCONN            : constant :=          133; --  Socket already connected
+    ELOOP              : constant :=           90; --  Too many symbolic lynks
+    EMFILE             : constant :=           24; --  Too many open files
+    EMSGSIZE           : constant :=           97; --  Message too long
+    ENAMETOOLONG       : constant :=           78; --  Name too long
+    ENETDOWN           : constant :=          127; --  Network is down
+    ENETRESET          : constant :=          129; --  Disconn. on network reset
+    ENETUNREACH        : constant :=          128; --  Network is unreachable
+    ENOBUFS            : constant :=          132; --  No buffer space available
+    ENOPROTOOPT        : constant :=           99; --  Protocol not available
+    ENOTCONN           : constant :=          134; --  Socket not connected
+    ENOTSOCK           : constant :=           95; --  Operation on non socket
+    EOPNOTSUPP         : constant :=          122; --  Operation not supported
+    EPFNOSUPPORT       : constant :=          123; --  Unknown protocol family
+    EPROTONOSUPPORT    : constant :=          120; --  Unknown protocol
+    EPROTOTYPE         : constant :=           98; --  Unknown protocol type
+    ESHUTDOWN          : constant :=          143; --  Cannot send once shutdown
+    ESOCKTNOSUPPORT    : constant :=          121; --  Socket type not supported
+    ETIMEDOUT          : constant :=          145; --  Connection timed out
+    ETOOMANYREFS       : constant :=          144; --  Too many references
+    EWOULDBLOCK        : constant :=           11; --  Operation would block
+ 
+    -----------------
+    -- Host errors --
+    -----------------
+ 
+    HOST_NOT_FOUND     : constant :=            1; --  Unknown host
+    TRY_AGAIN          : constant :=            2; --  Host name lookup failure
+    NO_DATA            : constant :=            4; --  No data record for name
+    NO_RECOVERY        : constant :=            3; --  Non recoverable errors
+ 
+    -------------------
+    -- Control flags --
+    -------------------
+ 
+    FIONBIO            : constant :=  -2147195266; --  Set/clear non-blocking io
+    FIONREAD           : constant :=   1074030207; --  How many bytes to read
+ 
+    --------------------
+    -- Shutdown modes --
+    --------------------
+ 
+    SHUT_RD            : constant :=            0; --  No more recv
+    SHUT_WR            : constant :=            1; --  No more send
+    SHUT_RDWR          : constant :=            2; --  No more recv/send
+ 
+    ---------------------
+    -- Protocol levels --
+    ---------------------
+ 
+    SOL_SOCKET         : constant :=        65535; --  Options for socket level
+    IPPROTO_IP         : constant :=            0; --  Dummy protocol for IP
+    IPPROTO_UDP        : constant :=           17; --  UDP
+    IPPROTO_TCP        : constant :=            6; --  TCP
+ 
+    -------------------
+    -- Request flags --
+    -------------------
+ 
+    MSG_OOB            : constant :=            1; --  Process out-of-band data
+    MSG_PEEK           : constant :=            2; --  Peek at incoming data
+    MSG_EOR            : constant :=            8; --  Send end of record
+    MSG_WAITALL        : constant :=           64; --  Wait for full reception
+    MSG_NOSIGNAL       : constant :=           -1; --  No SIGPIPE on send
+    MSG_Forced_Flags   : constant :=            0;
+ 
+    --------------------
+    -- Socket options --
+    --------------------
+ 
+    TCP_NODELAY        : constant :=            1; --  Do not coalesce packets
+    SO_SNDBUF          : constant :=         4097; --  Set/get send buffer size
+    SO_RCVBUF          : constant :=         4098; --  Set/get recv buffer size
+    SO_REUSEADDR       : constant :=            4; --  Bind reuse local address
+    SO_KEEPALIVE       : constant :=            8; --  Enable keep-alive msgs
+    SO_LINGER          : constant :=          128; --  Defer close to flush data
+    SO_ERROR           : constant :=         4103; --  Get/clear error status
+    SO_BROADCAST       : constant :=           32; --  Can send broadcast msgs
+    IP_ADD_MEMBERSHIP  : constant :=           23; --  Join a multicast group
+    IP_DROP_MEMBERSHIP : constant :=           24; --  Leave a multicast group
+    IP_MULTICAST_TTL   : constant :=           21; --  Set/get multicast TTL
+    IP_MULTICAST_LOOP  : constant :=           22; --  Set/get mcast loopback
+ 
+ end GNAT.Sockets.Constants;
diff -Nrcpad gcc-3.4.3/gcc/ada/g-soccon-mingw.ads gcc-4.0.0/gcc/ada/g-soccon-mingw.ads
*** gcc-3.4.3/gcc/ada/g-soccon-mingw.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/g-soccon-mingw.ads	Mon Jan  3 15:30:02 2005
***************
*** 0 ****
--- 1,161 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --               G N A T . S O C K E T S . C O N S T A N T S                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 2000-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package provides target dependent definitions of constant for use
+ --  by the GNAT.Sockets package (g-socket.ads). This package should not be
+ --  directly with'ed by an applications program.
+ 
+ --  This is the version for MINGW32 NT
+ --  Do not edit this file by hand, instead edit and re-run gen-soccon.c
+ 
+ package GNAT.Sockets.Constants is
+ 
+    --------------
+    -- Families --
+    --------------
+ 
+    AF_INET            : constant :=            2; --  IPv4 address family
+    AF_INET6           : constant :=            3; --  IPv6 address family
+ 
+    -----------
+    -- Modes --
+    -----------
+ 
+    SOCK_STREAM        : constant :=            1; --  Stream socket
+    SOCK_DGRAM         : constant :=            2; --  Datagram socket
+ 
+    -------------------
+    -- Socket errors --
+    -------------------
+ 
+    EACCES             : constant :=        10013; --  Permission denied
+    EADDRINUSE         : constant :=        10048; --  Address already in use
+    EADDRNOTAVAIL      : constant :=        10049; --  Cannot assign address
+    EAFNOSUPPORT       : constant :=        10047; --  Addr family not supported
+    EALREADY           : constant :=        10037; --  Operation in progress
+    EBADF              : constant :=        10009; --  Bad file descriptor
+    ECONNABORTED       : constant :=        10053; --  Connection aborted
+    ECONNREFUSED       : constant :=        10061; --  Connection refused
+    ECONNRESET         : constant :=        10054; --  Connection reset by peer
+    EDESTADDRREQ       : constant :=        10039; --  Destination addr required
+    EFAULT             : constant :=        10014; --  Bad address
+    EHOSTDOWN          : constant :=        10064; --  Host is down
+    EHOSTUNREACH       : constant :=        10065; --  No route to host
+    EINPROGRESS        : constant :=        10036; --  Operation now in progress
+    EINTR              : constant :=        10004; --  Interrupted system call
+    EINVAL             : constant :=        10022; --  Invalid argument
+    EIO                : constant :=        10101; --  Input output error
+    EISCONN            : constant :=        10056; --  Socket already connected
+    ELOOP              : constant :=        10062; --  Too many symbolic lynks
+    EMFILE             : constant :=        10024; --  Too many open files
+    EMSGSIZE           : constant :=        10040; --  Message too long
+    ENAMETOOLONG       : constant :=        10063; --  Name too long
+    ENETDOWN           : constant :=        10050; --  Network is down
+    ENETRESET          : constant :=        10052; --  Disconn. on network reset
+    ENETUNREACH        : constant :=        10051; --  Network is unreachable
+    ENOBUFS            : constant :=        10055; --  No buffer space available
+    ENOPROTOOPT        : constant :=        10042; --  Protocol not available
+    ENOTCONN           : constant :=        10057; --  Socket not connected
+    ENOTSOCK           : constant :=        10038; --  Operation on non socket
+    EOPNOTSUPP         : constant :=        10045; --  Operation not supported
+    EPFNOSUPPORT       : constant :=        10046; --  Unknown protocol family
+    EPROTONOSUPPORT    : constant :=        10043; --  Unknown protocol
+    EPROTOTYPE         : constant :=        10041; --  Unknown protocol type
+    ESHUTDOWN          : constant :=        10058; --  Cannot send once shutdown
+    ESOCKTNOSUPPORT    : constant :=        10044; --  Socket type not supported
+    ETIMEDOUT          : constant :=        10060; --  Connection timed out
+    ETOOMANYREFS       : constant :=        10059; --  Too many references
+    EWOULDBLOCK        : constant :=        10035; --  Operation would block
+ 
+    -----------------
+    -- Host errors --
+    -----------------
+ 
+    HOST_NOT_FOUND     : constant :=        11001; --  Unknown host
+    TRY_AGAIN          : constant :=        11002; --  Host name lookup failure
+    NO_DATA            : constant :=        11004; --  No data record for name
+    NO_RECOVERY        : constant :=        11003; --  Non recoverable errors
+ 
+    -------------------
+    -- Control flags --
+    -------------------
+ 
+    FIONBIO            : constant :=  -2147195266; --  Set/clear non-blocking io
+    FIONREAD           : constant :=   1074030207; --  How many bytes to read
+ 
+    --------------------
+    -- Shutdown modes --
+    --------------------
+ 
+    SHUT_RD            : constant :=            0; --  No more recv
+    SHUT_WR            : constant :=            1; --  No more send
+    SHUT_RDWR          : constant :=            2; --  No more recv/send
+ 
+    ---------------------
+    -- Protocol levels --
+    ---------------------
+ 
+    SOL_SOCKET         : constant :=        65535; --  Options for socket level
+    IPPROTO_IP         : constant :=            0; --  Dummy protocol for IP
+    IPPROTO_UDP        : constant :=           17; --  UDP
+    IPPROTO_TCP        : constant :=            6; --  TCP
+ 
+    -------------------
+    -- Request flags --
+    -------------------
+ 
+    MSG_OOB            : constant :=            1; --  Process out-of-band data
+    MSG_PEEK           : constant :=            2; --  Peek at incoming data
+    MSG_EOR            : constant :=           -1; --  Send end of record
+    MSG_WAITALL        : constant :=           -1; --  Wait for full reception
+    MSG_NOSIGNAL       : constant :=           -1; --  No SIGPIPE on send
+    MSG_Forced_Flags   : constant :=            0;
+ 
+    --------------------
+    -- Socket options --
+    --------------------
+ 
+    TCP_NODELAY        : constant :=            1; --  Do not coalesce packets
+    SO_SNDBUF          : constant :=         4097; --  Set/get send buffer size
+    SO_RCVBUF          : constant :=         4098; --  Set/get recv buffer size
+    SO_REUSEADDR       : constant :=            4; --  Bind reuse local address
+    SO_KEEPALIVE       : constant :=            8; --  Enable keep-alive msgs
+    SO_LINGER          : constant :=          128; --  Defer close to flush data
+    SO_ERROR           : constant :=         4103; --  Get/clear error status
+    SO_BROADCAST       : constant :=           32; --  Can send broadcast msgs
+    IP_ADD_MEMBERSHIP  : constant :=            5; --  Join a multicast group
+    IP_DROP_MEMBERSHIP : constant :=            6; --  Leave a multicast group
+    IP_MULTICAST_TTL   : constant :=            3; --  Set/get multicast TTL
+    IP_MULTICAST_LOOP  : constant :=            4; --  Set/get mcast loopback
+ 
+ end GNAT.Sockets.Constants;
diff -Nrcpad gcc-3.4.3/gcc/ada/g-soccon-solaris.ads gcc-4.0.0/gcc/ada/g-soccon-solaris.ads
*** gcc-3.4.3/gcc/ada/g-soccon-solaris.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/g-soccon-solaris.ads	Mon Jan  3 15:30:02 2005
***************
*** 0 ****
--- 1,161 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --               G N A T . S O C K E T S . C O N S T A N T S                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 2000-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package provides target dependent definitions of constant for use
+ --  by the GNAT.Sockets package (g-socket.ads). This package should not be
+ --  directly with'ed by an applications program.
+ 
+ --  This is the version for Solaris
+ --  Do not edit this file by hand, instead edit and re-run gen-soccon.c
+ 
+ package GNAT.Sockets.Constants is
+ 
+    --------------
+    -- Families --
+    --------------
+ 
+    AF_INET            : constant :=            2; --  IPv4 address family
+    AF_INET6           : constant :=           26; --  IPv6 address family
+ 
+    -----------
+    -- Modes --
+    -----------
+ 
+    SOCK_STREAM        : constant :=            2; --  Stream socket
+    SOCK_DGRAM         : constant :=            1; --  Datagram socket
+ 
+    -------------------
+    -- Socket errors --
+    -------------------
+ 
+    EACCES             : constant :=           13; --  Permission denied
+    EADDRINUSE         : constant :=          125; --  Address already in use
+    EADDRNOTAVAIL      : constant :=          126; --  Cannot assign address
+    EAFNOSUPPORT       : constant :=          124; --  Addr family not supported
+    EALREADY           : constant :=          149; --  Operation in progress
+    EBADF              : constant :=            9; --  Bad file descriptor
+    ECONNABORTED       : constant :=          130; --  Connection aborted
+    ECONNREFUSED       : constant :=          146; --  Connection refused
+    ECONNRESET         : constant :=          131; --  Connection reset by peer
+    EDESTADDRREQ       : constant :=           96; --  Destination addr required
+    EFAULT             : constant :=           14; --  Bad address
+    EHOSTDOWN          : constant :=          147; --  Host is down
+    EHOSTUNREACH       : constant :=          148; --  No route to host
+    EINPROGRESS        : constant :=          150; --  Operation now in progress
+    EINTR              : constant :=            4; --  Interrupted system call
+    EINVAL             : constant :=           22; --  Invalid argument
+    EIO                : constant :=            5; --  Input output error
+    EISCONN            : constant :=          133; --  Socket already connected
+    ELOOP              : constant :=           90; --  Too many symbolic lynks
+    EMFILE             : constant :=           24; --  Too many open files
+    EMSGSIZE           : constant :=           97; --  Message too long
+    ENAMETOOLONG       : constant :=           78; --  Name too long
+    ENETDOWN           : constant :=          127; --  Network is down
+    ENETRESET          : constant :=          129; --  Disconn. on network reset
+    ENETUNREACH        : constant :=          128; --  Network is unreachable
+    ENOBUFS            : constant :=          132; --  No buffer space available
+    ENOPROTOOPT        : constant :=           99; --  Protocol not available
+    ENOTCONN           : constant :=          134; --  Socket not connected
+    ENOTSOCK           : constant :=           95; --  Operation on non socket
+    EOPNOTSUPP         : constant :=          122; --  Operation not supported
+    EPFNOSUPPORT       : constant :=          123; --  Unknown protocol family
+    EPROTONOSUPPORT    : constant :=          120; --  Unknown protocol
+    EPROTOTYPE         : constant :=           98; --  Unknown protocol type
+    ESHUTDOWN          : constant :=          143; --  Cannot send once shutdown
+    ESOCKTNOSUPPORT    : constant :=          121; --  Socket type not supported
+    ETIMEDOUT          : constant :=          145; --  Connection timed out
+    ETOOMANYREFS       : constant :=          144; --  Too many references
+    EWOULDBLOCK        : constant :=           11; --  Operation would block
+ 
+    -----------------
+    -- Host errors --
+    -----------------
+ 
+    HOST_NOT_FOUND     : constant :=            1; --  Unknown host
+    TRY_AGAIN          : constant :=            2; --  Host name lookup failure
+    NO_DATA            : constant :=            4; --  No data record for name
+    NO_RECOVERY        : constant :=            3; --  Non recoverable errors
+ 
+    -------------------
+    -- Control flags --
+    -------------------
+ 
+    FIONBIO            : constant :=  -2147195266; --  Set/clear non-blocking io
+    FIONREAD           : constant :=   1074030207; --  How many bytes to read
+ 
+    --------------------
+    -- Shutdown modes --
+    --------------------
+ 
+    SHUT_RD            : constant :=            0; --  No more recv
+    SHUT_WR            : constant :=            1; --  No more send
+    SHUT_RDWR          : constant :=            2; --  No more recv/send
+ 
+    ---------------------
+    -- Protocol levels --
+    ---------------------
+ 
+    SOL_SOCKET         : constant :=        65535; --  Options for socket level
+    IPPROTO_IP         : constant :=            0; --  Dummy protocol for IP
+    IPPROTO_UDP        : constant :=           17; --  UDP
+    IPPROTO_TCP        : constant :=            6; --  TCP
+ 
+    -------------------
+    -- Request flags --
+    -------------------
+ 
+    MSG_OOB            : constant :=            1; --  Process out-of-band data
+    MSG_PEEK           : constant :=            2; --  Peek at incoming data
+    MSG_EOR            : constant :=            8; --  Send end of record
+    MSG_WAITALL        : constant :=           64; --  Wait for full reception
+    MSG_NOSIGNAL       : constant :=           -1; --  No SIGPIPE on send
+    MSG_Forced_Flags   : constant :=            0;
+ 
+    --------------------
+    -- Socket options --
+    --------------------
+ 
+    TCP_NODELAY        : constant :=            1; --  Do not coalesce packets
+    SO_SNDBUF          : constant :=         4097; --  Set/get send buffer size
+    SO_RCVBUF          : constant :=         4098; --  Set/get recv buffer size
+    SO_REUSEADDR       : constant :=            4; --  Bind reuse local address
+    SO_KEEPALIVE       : constant :=            8; --  Enable keep-alive msgs
+    SO_LINGER          : constant :=          128; --  Defer close to flush data
+    SO_ERROR           : constant :=         4103; --  Get/clear error status
+    SO_BROADCAST       : constant :=           32; --  Can send broadcast msgs
+    IP_ADD_MEMBERSHIP  : constant :=           19; --  Join a multicast group
+    IP_DROP_MEMBERSHIP : constant :=           20; --  Leave a multicast group
+    IP_MULTICAST_TTL   : constant :=           17; --  Set/get multicast TTL
+    IP_MULTICAST_LOOP  : constant :=           18; --  Set/get mcast loopback
+ 
+ end GNAT.Sockets.Constants;
diff -Nrcpad gcc-3.4.3/gcc/ada/g-soccon-tru64.ads gcc-4.0.0/gcc/ada/g-soccon-tru64.ads
*** gcc-3.4.3/gcc/ada/g-soccon-tru64.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/g-soccon-tru64.ads	Mon Jan  3 15:30:02 2005
***************
*** 0 ****
--- 1,161 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --               G N A T . S O C K E T S . C O N S T A N T S                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 2000-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package provides target dependent definitions of constant for use
+ --  by the GNAT.Sockets package (g-socket.ads). This package should not be
+ --  directly with'ed by an applications program.
+ 
+ --  This is the version for OSF
+ --  Do not edit this file by hand, instead edit and re-run gen-soccon.c
+ 
+ package GNAT.Sockets.Constants is
+ 
+    --------------
+    -- Families --
+    --------------
+ 
+    AF_INET            : constant :=            2; --  IPv4 address family
+    AF_INET6           : constant :=           26; --  IPv6 address family
+ 
+    -----------
+    -- Modes --
+    -----------
+ 
+    SOCK_STREAM        : constant :=            1; --  Stream socket
+    SOCK_DGRAM         : constant :=            2; --  Datagram socket
+ 
+    -------------------
+    -- Socket errors --
+    -------------------
+ 
+    EACCES             : constant :=           13; --  Permission denied
+    EADDRINUSE         : constant :=           48; --  Address already in use
+    EADDRNOTAVAIL      : constant :=           49; --  Cannot assign address
+    EAFNOSUPPORT       : constant :=           47; --  Addr family not supported
+    EALREADY           : constant :=           37; --  Operation in progress
+    EBADF              : constant :=            9; --  Bad file descriptor
+    ECONNABORTED       : constant :=           53; --  Connection aborted
+    ECONNREFUSED       : constant :=           61; --  Connection refused
+    ECONNRESET         : constant :=           54; --  Connection reset by peer
+    EDESTADDRREQ       : constant :=           39; --  Destination addr required
+    EFAULT             : constant :=           14; --  Bad address
+    EHOSTDOWN          : constant :=           64; --  Host is down
+    EHOSTUNREACH       : constant :=           65; --  No route to host
+    EINPROGRESS        : constant :=           36; --  Operation now in progress
+    EINTR              : constant :=            4; --  Interrupted system call
+    EINVAL             : constant :=           22; --  Invalid argument
+    EIO                : constant :=            5; --  Input output error
+    EISCONN            : constant :=           56; --  Socket already connected
+    ELOOP              : constant :=           62; --  Too many symbolic lynks
+    EMFILE             : constant :=           24; --  Too many open files
+    EMSGSIZE           : constant :=           40; --  Message too long
+    ENAMETOOLONG       : constant :=           63; --  Name too long
+    ENETDOWN           : constant :=           50; --  Network is down
+    ENETRESET          : constant :=           52; --  Disconn. on network reset
+    ENETUNREACH        : constant :=           51; --  Network is unreachable
+    ENOBUFS            : constant :=           55; --  No buffer space available
+    ENOPROTOOPT        : constant :=           42; --  Protocol not available
+    ENOTCONN           : constant :=           57; --  Socket not connected
+    ENOTSOCK           : constant :=           38; --  Operation on non socket
+    EOPNOTSUPP         : constant :=           45; --  Operation not supported
+    EPFNOSUPPORT       : constant :=           46; --  Unknown protocol family
+    EPROTONOSUPPORT    : constant :=           43; --  Unknown protocol
+    EPROTOTYPE         : constant :=           41; --  Unknown protocol type
+    ESHUTDOWN          : constant :=           58; --  Cannot send once shutdown
+    ESOCKTNOSUPPORT    : constant :=           44; --  Socket type not supported
+    ETIMEDOUT          : constant :=           60; --  Connection timed out
+    ETOOMANYREFS       : constant :=           59; --  Too many references
+    EWOULDBLOCK        : constant :=           35; --  Operation would block
+ 
+    -----------------
+    -- Host errors --
+    -----------------
+ 
+    HOST_NOT_FOUND     : constant :=            1; --  Unknown host
+    TRY_AGAIN          : constant :=            2; --  Host name lookup failure
+    NO_DATA            : constant :=            4; --  No data record for name
+    NO_RECOVERY        : constant :=            3; --  Non recoverable errors
+ 
+    -------------------
+    -- Control flags --
+    -------------------
+ 
+    FIONBIO            : constant :=  -2147195266; --  Set/clear non-blocking io
+    FIONREAD           : constant :=   1074030207; --  How many bytes to read
+ 
+    --------------------
+    -- Shutdown modes --
+    --------------------
+ 
+    SHUT_RD            : constant :=            0; --  No more recv
+    SHUT_WR            : constant :=            1; --  No more send
+    SHUT_RDWR          : constant :=            2; --  No more recv/send
+ 
+    ---------------------
+    -- Protocol levels --
+    ---------------------
+ 
+    SOL_SOCKET         : constant :=        65535; --  Options for socket level
+    IPPROTO_IP         : constant :=            0; --  Dummy protocol for IP
+    IPPROTO_UDP        : constant :=           17; --  UDP
+    IPPROTO_TCP        : constant :=            6; --  TCP
+ 
+    -------------------
+    -- Request flags --
+    -------------------
+ 
+    MSG_OOB            : constant :=            1; --  Process out-of-band data
+    MSG_PEEK           : constant :=            2; --  Peek at incoming data
+    MSG_EOR            : constant :=            8; --  Send end of record
+    MSG_WAITALL        : constant :=           64; --  Wait for full reception
+    MSG_NOSIGNAL       : constant :=           -1; --  No SIGPIPE on send
+    MSG_Forced_Flags   : constant :=            0;
+ 
+    --------------------
+    -- Socket options --
+    --------------------
+ 
+    TCP_NODELAY        : constant :=            1; --  Do not coalesce packets
+    SO_SNDBUF          : constant :=         4097; --  Set/get send buffer size
+    SO_RCVBUF          : constant :=         4098; --  Set/get recv buffer size
+    SO_REUSEADDR       : constant :=            4; --  Bind reuse local address
+    SO_KEEPALIVE       : constant :=            8; --  Enable keep-alive msgs
+    SO_LINGER          : constant :=          128; --  Defer close to flush data
+    SO_ERROR           : constant :=         4103; --  Get/clear error status
+    SO_BROADCAST       : constant :=           32; --  Can send broadcast msgs
+    IP_ADD_MEMBERSHIP  : constant :=           12; --  Join a multicast group
+    IP_DROP_MEMBERSHIP : constant :=           13; --  Leave a multicast group
+    IP_MULTICAST_TTL   : constant :=           10; --  Set/get multicast TTL
+    IP_MULTICAST_LOOP  : constant :=           11; --  Set/get mcast loopback
+ 
+ end GNAT.Sockets.Constants;
diff -Nrcpad gcc-3.4.3/gcc/ada/g-soccon-unixware.ads gcc-4.0.0/gcc/ada/g-soccon-unixware.ads
*** gcc-3.4.3/gcc/ada/g-soccon-unixware.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/g-soccon-unixware.ads	Mon Jan  3 15:30:02 2005
***************
*** 0 ****
--- 1,161 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --               G N A T . S O C K E T S . C O N S T A N T S                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 2000-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package provides target dependent definitions of constant for use
+ --  by the GNAT.Sockets package (g-socket.ads). This package should not be
+ --  directly with'ed by an applications program.
+ 
+ --  This is the version for UnixWare
+ --  Do not edit this file by hand, instead edit and re-run gen-soccon.c
+ 
+ package GNAT.Sockets.Constants is
+ 
+    --------------
+    -- Families --
+    --------------
+ 
+    AF_INET            : constant :=            2; --  IPv4 address family
+    AF_INET6           : constant :=           27; --  IPv6 address family
+ 
+    -----------
+    -- Modes --
+    -----------
+ 
+    SOCK_STREAM        : constant :=            2; --  Stream socket
+    SOCK_DGRAM         : constant :=            1; --  Datagram socket
+ 
+    -------------------
+    -- Socket errors --
+    -------------------
+ 
+    EACCES             : constant :=           13; --  Permission denied
+    EADDRINUSE         : constant :=          125; --  Address already in use
+    EADDRNOTAVAIL      : constant :=          126; --  Cannot assign address
+    EAFNOSUPPORT       : constant :=          124; --  Addr family not supported
+    EALREADY           : constant :=          149; --  Operation in progress
+    EBADF              : constant :=            9; --  Bad file descriptor
+    ECONNABORTED       : constant :=          130; --  Connection aborted
+    ECONNREFUSED       : constant :=          146; --  Connection refused
+    ECONNRESET         : constant :=          131; --  Connection reset by peer
+    EDESTADDRREQ       : constant :=           96; --  Destination addr required
+    EFAULT             : constant :=           14; --  Bad address
+    EHOSTDOWN          : constant :=          147; --  Host is down
+    EHOSTUNREACH       : constant :=          148; --  No route to host
+    EINPROGRESS        : constant :=          150; --  Operation now in progress
+    EINTR              : constant :=            4; --  Interrupted system call
+    EINVAL             : constant :=           22; --  Invalid argument
+    EIO                : constant :=            5; --  Input output error
+    EISCONN            : constant :=          133; --  Socket already connected
+    ELOOP              : constant :=           90; --  Too many symbolic lynks
+    EMFILE             : constant :=           24; --  Too many open files
+    EMSGSIZE           : constant :=           97; --  Message too long
+    ENAMETOOLONG       : constant :=           78; --  Name too long
+    ENETDOWN           : constant :=          127; --  Network is down
+    ENETRESET          : constant :=          129; --  Disconn. on network reset
+    ENETUNREACH        : constant :=          128; --  Network is unreachable
+    ENOBUFS            : constant :=          132; --  No buffer space available
+    ENOPROTOOPT        : constant :=           99; --  Protocol not available
+    ENOTCONN           : constant :=          134; --  Socket not connected
+    ENOTSOCK           : constant :=           95; --  Operation on non socket
+    EOPNOTSUPP         : constant :=          122; --  Operation not supported
+    EPFNOSUPPORT       : constant :=          123; --  Unknown protocol family
+    EPROTONOSUPPORT    : constant :=          120; --  Unknown protocol
+    EPROTOTYPE         : constant :=           98; --  Unknown protocol type
+    ESHUTDOWN          : constant :=          143; --  Cannot send once shutdown
+    ESOCKTNOSUPPORT    : constant :=          121; --  Socket type not supported
+    ETIMEDOUT          : constant :=          145; --  Connection timed out
+    ETOOMANYREFS       : constant :=          144; --  Too many references
+    EWOULDBLOCK        : constant :=           11; --  Operation would block
+ 
+    -----------------
+    -- Host errors --
+    -----------------
+ 
+    HOST_NOT_FOUND     : constant :=            1; --  Unknown host
+    TRY_AGAIN          : constant :=            2; --  Host name lookup failure
+    NO_DATA            : constant :=            4; --  No data record for name
+    NO_RECOVERY        : constant :=            3; --  Non recoverable errors
+ 
+    -------------------
+    -- Control flags --
+    -------------------
+ 
+    FIONBIO            : constant :=  -2147195266; --  Set/clear non-blocking io
+    FIONREAD           : constant :=   1074030207; --  How many bytes to read
+ 
+    --------------------
+    -- Shutdown modes --
+    --------------------
+ 
+    SHUT_RD            : constant :=            0; --  No more recv
+    SHUT_WR            : constant :=            1; --  No more send
+    SHUT_RDWR          : constant :=            2; --  No more recv/send
+ 
+    ---------------------
+    -- Protocol levels --
+    ---------------------
+ 
+    SOL_SOCKET         : constant :=        65535; --  Options for socket level
+    IPPROTO_IP         : constant :=            0; --  Dummy protocol for IP
+    IPPROTO_UDP        : constant :=           17; --  UDP
+    IPPROTO_TCP        : constant :=            6; --  TCP
+ 
+    -------------------
+    -- Request flags --
+    -------------------
+ 
+    MSG_OOB            : constant :=            1; --  Process out-of-band data
+    MSG_PEEK           : constant :=            2; --  Peek at incoming data
+    MSG_EOR            : constant :=            8; --  Send end of record
+    MSG_WAITALL        : constant :=           64; --  Wait for full reception
+    MSG_NOSIGNAL       : constant :=           -1; --  No SIGPIPE on send
+    MSG_Forced_Flags   : constant :=            0;
+ 
+    --------------------
+    -- Socket options --
+    --------------------
+ 
+    TCP_NODELAY        : constant :=            1; --  Do not coalesce packets
+    SO_SNDBUF          : constant :=         4097; --  Set/get send buffer size
+    SO_RCVBUF          : constant :=         4098; --  Set/get recv buffer size
+    SO_REUSEADDR       : constant :=            4; --  Bind reuse local address
+    SO_KEEPALIVE       : constant :=            8; --  Enable keep-alive msgs
+    SO_LINGER          : constant :=          128; --  Defer close to flush data
+    SO_ERROR           : constant :=         4103; --  Get/clear error status
+    SO_BROADCAST       : constant :=           32; --  Can send broadcast msgs
+    IP_ADD_MEMBERSHIP  : constant :=           11; --  Join a multicast group
+    IP_DROP_MEMBERSHIP : constant :=           12; --  Leave a multicast group
+    IP_MULTICAST_TTL   : constant :=           16; --  Set/get multicast TTL
+    IP_MULTICAST_LOOP  : constant :=           10; --  Set/get mcast loopback
+ 
+ end GNAT.Sockets.Constants;
diff -Nrcpad gcc-3.4.3/gcc/ada/g-soccon-vms.adb gcc-4.0.0/gcc/ada/g-soccon-vms.adb
*** gcc-3.4.3/gcc/ada/g-soccon-vms.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/g-soccon-vms.adb	Mon Oct  4 14:49:35 2004
***************
*** 0 ****
--- 1,160 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --               G N A T . S O C K E T S . C O N S T A N T S                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 2000-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package provides target dependent definitions of constant for use
+ --  by the GNAT.Sockets package (g-socket.ads). This package should not be
+ --  directly with'ed by an applications program.
+ 
+ --  This is the version for Alpha/VMS
+ 
+ package GNAT.Sockets.Constants is
+ 
+    --------------
+    -- Families --
+    --------------
+ 
+    AF_INET            : constant :=            2; --  IPv4 address family
+    AF_INET6           : constant :=           26; --  IPv6 address family
+ 
+    -----------
+    -- Modes --
+    -----------
+ 
+    SOCK_STREAM        : constant :=            1; --  Stream socket
+    SOCK_DGRAM         : constant :=            2; --  Datagram socket
+ 
+    -------------------
+    -- Socket errors --
+    -------------------
+ 
+    EACCES             : constant :=           13; --  Permission denied
+    EADDRINUSE         : constant :=           48; --  Address already in use
+    EADDRNOTAVAIL      : constant :=           49; --  Cannot assign address
+    EAFNOSUPPORT       : constant :=           47; --  Addr family not supported
+    EALREADY           : constant :=           37; --  Operation in progress
+    EBADF              : constant :=            9; --  Bad file descriptor
+    ECONNABORTED       : constant :=           53; --  Connection aborted
+    ECONNREFUSED       : constant :=           61; --  Connection refused
+    ECONNRESET         : constant :=           54; --  Connection reset by peer
+    EDESTADDRREQ       : constant :=           39; --  Destination addr required
+    EFAULT             : constant :=           45; --  Bad address
+    EHOSTDOWN          : constant :=           64; --  Host is down
+    EHOSTUNREACH       : constant :=           65; --  No route to host
+    EINPROGRESS        : constant :=           36; --  Operation now in progress
+    EINTR              : constant :=            4; --  Interrupted system call
+    EINVAL             : constant :=           22; --  Invalid argument
+    EIO                : constant :=            5; --  Input output error
+    EISCONN            : constant :=           56; --  Socket already connected
+    ELOOP              : constant :=           62; --  Too many symbolic lynks
+    EMFILE             : constant :=           24; --  Too many open files
+    EMSGSIZE           : constant :=           40; --  Message too long
+    ENAMETOOLONG       : constant :=           63; --  Name too long
+    ENETDOWN           : constant :=           50; --  Network is down
+    ENETRESET          : constant :=           52; --  Disconn. on network reset
+    ENETUNREACH        : constant :=           51; --  Network is unreachable
+    ENOBUFS            : constant :=           55; --  No buffer space available
+    ENOPROTOOPT        : constant :=           42; --  Protocol not available
+    ENOTCONN           : constant :=           57; --  Socket not connected
+    ENOTSOCK           : constant :=           38; --  Operation on non socket
+    EOPNOTSUPP         : constant :=           95; --  Operation not supported
+    EPFNOSUPPORT       : constant :=           46; --  Unknown protocol family
+    EPROTONOSUPPORT    : constant :=           43; --  Unknown protocol
+    EPROTOTYPE         : constant :=           41; --  Unknown protocol type
+    ESHUTDOWN          : constant :=           58; --  Cannot send once shutdown
+    ESOCKTNOSUPPORT    : constant :=           44; --  Socket type not supported
+    ETIMEDOUT          : constant :=           60; --  Connection timed out
+    ETOOMANYREFS       : constant :=           59; --  Too many references
+    EWOULDBLOCK        : constant :=           35; --  Operation would block
+ 
+    -----------------
+    -- Host errors --
+    -----------------
+ 
+    HOST_NOT_FOUND     : constant :=            1; --  Unknown host
+    TRY_AGAIN          : constant :=            2; --  Host name lookup failure
+    NO_DATA            : constant :=            4; --  No data record for name
+    NO_RECOVERY        : constant :=            3; --  Non recoverable errors
+ 
+    -------------------
+    -- Control flags --
+    -------------------
+ 
+    FIONBIO            : constant :=  -2147195266; --  Set/clear non-blocking io
+    FIONREAD           : constant :=   1074030207; --  How many bytes to read
+ 
+    --------------------
+    -- Shutdown modes --
+    --------------------
+ 
+    SHUT_RD            : constant :=            0; --  No more recv
+    SHUT_WR            : constant :=            1; --  No more send
+    SHUT_RDWR          : constant :=            2; --  No more recv/send
+ 
+    ---------------------
+    -- Protocol levels --
+    ---------------------
+ 
+    SOL_SOCKET         : constant :=     16#FFFF#; --  Options for socket level
+    IPPROTO_IP         : constant :=            0; --  Dummy protocol for IP
+    IPPROTO_UDP        : constant :=           17; --  UDP
+    IPPROTO_TCP        : constant :=            6; --  TCP
+ 
+    -------------------
+    -- Request flags --
+    -------------------
+ 
+    MSG_OOB            : constant :=            1; --  Process out-of-band data
+    MSG_PEEK           : constant :=            2; --  Peek at incoming data
+    MSG_EOR            : constant :=            8; --  Send end of record
+    MSG_WAITALL        : constant :=           64; --  Wait for full reception
+    MSG_NOSIGNAL       : constant :=           -1; --  No SIGPIPE on send
+    MSG_Forced_Flags   : constant :=            0;
+ 
+    --------------------
+    -- Socket options --
+    --------------------
+ 
+    TCP_NODELAY        : constant :=            1; --  Do not coalesce packets
+    SO_SNDBUF          : constant :=     16#1001#; --  Set/get send buffer size
+    SO_RCVBUF          : constant :=     16#1002#; --  Set/get recv buffer size
+    SO_REUSEADDR       : constant :=     16#0004#; --  Bind reuse local address
+    SO_KEEPALIVE       : constant :=     16#0008#; --  Enable keep-alive msgs
+    SO_LINGER          : constant :=     16#0080#; --  Defer close to flush data
+    SO_ERROR           : constant :=     16#1007#; --  Get/clear error status
+    SO_BROADCAST       : constant :=     16#0020#; --  Can send broadcast msgs
+    IP_ADD_MEMBERSHIP  : constant :=           12; --  Join a multicast group
+    IP_DROP_MEMBERSHIP : constant :=           13; --  Leave a multicast group
+    IP_MULTICAST_TTL   : constant :=           10; --  Set/get multicast TTL
+    IP_MULTICAST_LOOP  : constant :=           11; --  Set/get mcast loopback
+ 
+ end GNAT.Sockets.Constants;
diff -Nrcpad gcc-3.4.3/gcc/ada/g-soccon-vxworks.ads gcc-4.0.0/gcc/ada/g-soccon-vxworks.ads
*** gcc-3.4.3/gcc/ada/g-soccon-vxworks.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/g-soccon-vxworks.ads	Mon Jan  3 15:30:02 2005
***************
*** 0 ****
--- 1,161 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --               G N A T . S O C K E T S . C O N S T A N T S                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 2000-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package provides target dependent definitions of constant for use
+ --  by the GNAT.Sockets package (g-socket.ads). This package should not be
+ --  directly with'ed by an applications program.
+ 
+ --  This is the version for VxWorks
+ --  Do not edit this file by hand, instead edit and re-run gen-soccon.c
+ 
+ package GNAT.Sockets.Constants is
+ 
+    --------------
+    -- Families --
+    --------------
+ 
+    AF_INET            : constant :=            2; --  IPv4 address family
+    AF_INET6           : constant :=           -1; --  IPv6 address family
+ 
+    -----------
+    -- Modes --
+    -----------
+ 
+    SOCK_STREAM        : constant :=            1; --  Stream socket
+    SOCK_DGRAM         : constant :=            2; --  Datagram socket
+ 
+    -------------------
+    -- Socket errors --
+    -------------------
+ 
+    EACCES             : constant :=           13; --  Permission denied
+    EADDRINUSE         : constant :=           48; --  Address already in use
+    EADDRNOTAVAIL      : constant :=           49; --  Cannot assign address
+    EAFNOSUPPORT       : constant :=           47; --  Addr family not supported
+    EALREADY           : constant :=           69; --  Operation in progress
+    EBADF              : constant :=            9; --  Bad file descriptor
+    ECONNABORTED       : constant :=           53; --  Connection aborted
+    ECONNREFUSED       : constant :=           61; --  Connection refused
+    ECONNRESET         : constant :=           54; --  Connection reset by peer
+    EDESTADDRREQ       : constant :=           40; --  Destination addr required
+    EFAULT             : constant :=           14; --  Bad address
+    EHOSTDOWN          : constant :=           67; --  Host is down
+    EHOSTUNREACH       : constant :=           65; --  No route to host
+    EINPROGRESS        : constant :=           68; --  Operation now in progress
+    EINTR              : constant :=            4; --  Interrupted system call
+    EINVAL             : constant :=           22; --  Invalid argument
+    EIO                : constant :=            5; --  Input output error
+    EISCONN            : constant :=           56; --  Socket already connected
+    ELOOP              : constant :=           64; --  Too many symbolic lynks
+    EMFILE             : constant :=           24; --  Too many open files
+    EMSGSIZE           : constant :=           36; --  Message too long
+    ENAMETOOLONG       : constant :=           26; --  Name too long
+    ENETDOWN           : constant :=           62; --  Network is down
+    ENETRESET          : constant :=           52; --  Disconn. on network reset
+    ENETUNREACH        : constant :=           51; --  Network is unreachable
+    ENOBUFS            : constant :=           55; --  No buffer space available
+    ENOPROTOOPT        : constant :=           42; --  Protocol not available
+    ENOTCONN           : constant :=           57; --  Socket not connected
+    ENOTSOCK           : constant :=           50; --  Operation on non socket
+    EOPNOTSUPP         : constant :=           45; --  Operation not supported
+    EPFNOSUPPORT       : constant :=           46; --  Unknown protocol family
+    EPROTONOSUPPORT    : constant :=           43; --  Unknown protocol
+    EPROTOTYPE         : constant :=           41; --  Unknown protocol type
+    ESHUTDOWN          : constant :=           58; --  Cannot send once shutdown
+    ESOCKTNOSUPPORT    : constant :=           44; --  Socket type not supported
+    ETIMEDOUT          : constant :=           60; --  Connection timed out
+    ETOOMANYREFS       : constant :=           59; --  Too many references
+    EWOULDBLOCK        : constant :=           70; --  Operation would block
+ 
+    -----------------
+    -- Host errors --
+    -----------------
+ 
+    HOST_NOT_FOUND     : constant :=            1; --  Unknown host
+    TRY_AGAIN          : constant :=            2; --  Host name lookup failure
+    NO_DATA            : constant :=            4; --  No data record for name
+    NO_RECOVERY        : constant :=            3; --  Non recoverable errors
+ 
+    -------------------
+    -- Control flags --
+    -------------------
+ 
+    FIONBIO            : constant :=           16; --  Set/clear non-blocking io
+    FIONREAD           : constant :=            1; --  How many bytes to read
+ 
+    --------------------
+    -- Shutdown modes --
+    --------------------
+ 
+    SHUT_RD            : constant :=            0; --  No more recv
+    SHUT_WR            : constant :=            1; --  No more send
+    SHUT_RDWR          : constant :=            2; --  No more recv/send
+ 
+    ---------------------
+    -- Protocol levels --
+    ---------------------
+ 
+    SOL_SOCKET         : constant :=        65535; --  Options for socket level
+    IPPROTO_IP         : constant :=            0; --  Dummy protocol for IP
+    IPPROTO_UDP        : constant :=           17; --  UDP
+    IPPROTO_TCP        : constant :=            6; --  TCP
+ 
+    -------------------
+    -- Request flags --
+    -------------------
+ 
+    MSG_OOB            : constant :=            1; --  Process out-of-band data
+    MSG_PEEK           : constant :=            2; --  Peek at incoming data
+    MSG_EOR            : constant :=            8; --  Send end of record
+    MSG_WAITALL        : constant :=           64; --  Wait for full reception
+    MSG_NOSIGNAL       : constant :=           -1; --  No SIGPIPE on send
+    MSG_Forced_Flags   : constant :=            0;
+ 
+    --------------------
+    -- Socket options --
+    --------------------
+ 
+    TCP_NODELAY        : constant :=            1; --  Do not coalesce packets
+    SO_SNDBUF          : constant :=         4097; --  Set/get send buffer size
+    SO_RCVBUF          : constant :=         4098; --  Set/get recv buffer size
+    SO_REUSEADDR       : constant :=            4; --  Bind reuse local address
+    SO_KEEPALIVE       : constant :=            8; --  Enable keep-alive msgs
+    SO_LINGER          : constant :=          128; --  Defer close to flush data
+    SO_ERROR           : constant :=         4103; --  Get/clear error status
+    SO_BROADCAST       : constant :=           32; --  Can send broadcast msgs
+    IP_ADD_MEMBERSHIP  : constant :=           12; --  Join a multicast group
+    IP_DROP_MEMBERSHIP : constant :=           13; --  Leave a multicast group
+    IP_MULTICAST_TTL   : constant :=           10; --  Set/get multicast TTL
+    IP_MULTICAST_LOOP  : constant :=           11; --  Set/get mcast loopback
+ 
+ end GNAT.Sockets.Constants;
diff -Nrcpad gcc-3.4.3/gcc/ada/g-soccon.ads gcc-4.0.0/gcc/ada/g-soccon.ads
*** gcc-3.4.3/gcc/ada/g-soccon.ads	Tue Oct 21 13:42:05 2003
--- gcc-4.0.0/gcc/ada/g-soccon.ads	Mon Jan  3 15:30:02 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2000-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2000-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 36,41 ****
--- 36,42 ----
  --  directly with'ed by an applications program.
  
  --  This is the version for GNU/Linux
+ --  Do not edit this file by hand, instead edit and re-run gen-soccon.c
  
  package GNAT.Sockets.Constants is
  
*************** package GNAT.Sockets.Constants is
*** 137,142 ****
--- 138,145 ----
     MSG_PEEK           : constant :=            2; --  Peek at incoming data
     MSG_EOR            : constant :=          128; --  Send end of record
     MSG_WAITALL        : constant :=          256; --  Wait for full reception
+    MSG_NOSIGNAL       : constant :=        16384; --  No SIGPIPE on send
+    MSG_Forced_Flags   : constant := MSG_NOSIGNAL;
  
     --------------------
     -- Socket options --
diff -Nrcpad gcc-3.4.3/gcc/ada/g-socket.adb gcc-4.0.0/gcc/ada/g-socket.adb
*** gcc-3.4.3/gcc/ada/g-socket.adb	Mon Jan 12 11:45:24 2004
--- gcc-4.0.0/gcc/ada/g-socket.adb	Wed Oct 27 12:27:15 2004
*************** with GNAT.Task_Lock;
*** 44,50 ****
  
  with GNAT.Sockets.Linker_Options;
  pragma Warnings (Off, GNAT.Sockets.Linker_Options);
! --  Need to include pragma Linker_Options which is platform dependent.
  
  with System; use System;
  
--- 44,50 ----
  
  with GNAT.Sockets.Linker_Options;
  pragma Warnings (Off, GNAT.Sockets.Linker_Options);
! --  Need to include pragma Linker_Options which is platform dependent
  
  with System; use System;
  
*************** package body GNAT.Sockets is
*** 117,124 ****
  
     function Resolve_Error
       (Error_Value : Integer;
!       From_Errno  : Boolean := True)
!       return        Error_Type;
     --  Associate an enumeration value (error_type) to en error value
     --  (errno). From_Errno prevents from mixing h_errno with errno.
  
--- 117,123 ----
  
     function Resolve_Error
       (Error_Value : Integer;
!       From_Errno  : Boolean := True) return Error_Type;
     --  Associate an enumeration value (error_type) to en error value
     --  (errno). From_Errno prevents from mixing h_errno with errno.
  
*************** package body GNAT.Sockets is
*** 127,149 ****
     --  Conversion functions
  
     function To_Int (F : Request_Flag_Type) return C.int;
  
     function Short_To_Network
!      (S : C.unsigned_short)
!       return C.unsigned_short;
     pragma Inline (Short_To_Network);
     --  Convert a port number into a network port number
  
     function Network_To_Short
!      (S : C.unsigned_short)
!       return C.unsigned_short
     renames Short_To_Network;
     --  Symetric operation
  
     function Image
       (Val :  Inet_Addr_VN_Type;
!       Hex :  Boolean := False)
!       return String;
     --  Output an array of inet address components either in
     --  hexadecimal or in decimal mode.
  
--- 126,149 ----
     --  Conversion functions
  
     function To_Int (F : Request_Flag_Type) return C.int;
+    --  Return the int value corresponding to the specified flags combination
+ 
+    function Set_Forced_Flags (F : C.int) return C.int;
+    --  Return F with the bits from Constants.MSG_Forced_Flags forced set
  
     function Short_To_Network
!      (S : C.unsigned_short) return C.unsigned_short;
     pragma Inline (Short_To_Network);
     --  Convert a port number into a network port number
  
     function Network_To_Short
!      (S : C.unsigned_short) return C.unsigned_short
     renames Short_To_Network;
     --  Symetric operation
  
     function Image
       (Val :  Inet_Addr_VN_Type;
!       Hex :  Boolean := False) return String;
     --  Output an array of inet address components either in
     --  hexadecimal or in decimal mode.
  
*************** package body GNAT.Sockets is
*** 172,178 ****
     --  (note hstrerror seems to be obsolete).
  
     procedure Narrow (Item : in out Socket_Set_Type);
!    --  Update Last as it may be greater than the real last socket.
  
     --  Types needed for Datagram_Socket_Stream_Type
  
--- 172,178 ----
     --  (note hstrerror seems to be obsolete).
  
     procedure Narrow (Item : in out Socket_Set_Type);
!    --  Update Last as it may be greater than the real last socket
  
     --  Types needed for Datagram_Socket_Stream_Type
  
*************** package body GNAT.Sockets is
*** 226,239 ****
     --------------------
  
     procedure Abort_Selector (Selector : Selector_Type) is
!       Buf     : Character;
!       Discard : C.int;
!       pragma Warnings (Off, Discard);
  
     begin
        --  Send an empty array to unblock C select system call
  
!       Discard := C_Write (C.int (Selector.W_Sig_Socket), Buf'Address, 1);
     end Abort_Selector;
  
     -------------------
--- 226,242 ----
     --------------------
  
     procedure Abort_Selector (Selector : Selector_Type) is
!       Buf : aliased Character := ASCII.NUL;
!       Res : C.int;
  
     begin
        --  Send an empty array to unblock C select system call
  
!       Res := C_Send (C.int (Selector.W_Sig_Socket), Buf'Address, 1,
!                      Constants.MSG_Forced_Flags);
!       if Res = Failure then
!          Raise_Socket_Error (Socket_Errno);
!       end if;
     end Abort_Selector;
  
     -------------------
*************** package body GNAT.Sockets is
*** 267,275 ****
     ---------------
  
     function Addresses
!      (E    : Host_Entry_Type;
!       N    : Positive := 1)
!       return Inet_Addr_Type
     is
     begin
        return E.Addresses (N);
--- 270,277 ----
     ---------------
  
     function Addresses
!      (E : Host_Entry_Type;
!       N : Positive := 1) return Inet_Addr_Type
     is
     begin
        return E.Addresses (N);
*************** package body GNAT.Sockets is
*** 289,297 ****
     -------------
  
     function Aliases
!      (E    : Host_Entry_Type;
!       N    : Positive := 1)
!       return String
     is
     begin
        return To_String (E.Aliases (N));
--- 291,298 ----
     -------------
  
     function Aliases
!      (E : Host_Entry_Type;
!       N : Positive := 1) return String
     is
     begin
        return To_String (E.Aliases (N));
*************** package body GNAT.Sockets is
*** 302,310 ****
     -------------
  
     function Aliases
!      (S    : Service_Entry_Type;
!       N    : Positive := 1)
!       return String
     is
     begin
        return To_String (S.Aliases (N));
--- 303,310 ----
     -------------
  
     function Aliases
!      (S : Service_Entry_Type;
!       N : Positive := 1) return String
     is
     begin
        return To_String (S.Aliases (N));
*************** package body GNAT.Sockets is
*** 431,436 ****
--- 431,440 ----
            ESet.Set,
            TPtr);
  
+       if Res = Failure then
+          Raise_Socket_Error (Socket_Errno);
+       end if;
+ 
        --  If Select was resumed because of read signalling socket,
        --  read this data and remove socket from set.
  
*************** package body GNAT.Sockets is
*** 439,446 ****
  
           declare
              Buf : Character;
           begin
!             Res := C_Read (C.int (Selector.R_Sig_Socket), Buf'Address, 1);
           end;
  
           Status := Aborted;
--- 443,455 ----
  
           declare
              Buf : Character;
+ 
           begin
!             Res := C_Recv (C.int (Selector.R_Sig_Socket), Buf'Address, 1, 0);
! 
!             if Res = Failure then
!                Raise_Socket_Error (Socket_Errno);
!             end if;
           end;
  
           Status := Aborted;
*************** package body GNAT.Sockets is
*** 456,462 ****
        Narrow (WSet);
        Narrow (ESet);
  
!       --  Reset RSet as it should be if R_Sig_Socket was not added.
  
        if Is_Empty (RSet) then
           Empty (RSet);
--- 465,471 ----
        Narrow (WSet);
        Narrow (ESet);
  
!       --  Reset RSet as it should be if R_Sig_Socket was not added
  
        if Is_Empty (RSet) then
           Empty (RSet);
*************** package body GNAT.Sockets is
*** 470,476 ****
           Empty (ESet);
        end if;
  
!       --  Deliver RSet, WSet and ESet.
  
        Empty (R_Socket_Set);
        R_Socket_Set := RSet;
--- 479,485 ----
           Empty (ESet);
        end if;
  
!       --  Deliver RSet, WSet and ESet
  
        Empty (R_Socket_Set);
        R_Socket_Set := RSet;
*************** package body GNAT.Sockets is
*** 822,829 ****
  
     function Get_Host_By_Address
       (Address : Inet_Addr_Type;
!       Family  : Family_Type := Family_Inet)
!       return    Host_Entry_Type
     is
        pragma Unreferenced (Family);
  
--- 831,837 ----
  
     function Get_Host_By_Address
       (Address : Inet_Addr_Type;
!       Family  : Family_Type := Family_Inet) return Host_Entry_Type
     is
        pragma Unreferenced (Family);
  
*************** package body GNAT.Sockets is
*** 865,871 ****
        Err : Integer;
  
     begin
!       --  Detect IP address name and redirect to Inet_Addr.
  
        if Is_IP_Address (Name) then
           return Get_Host_By_Address (Inet_Addr (Name));
--- 873,879 ----
        Err : Integer;
  
     begin
!       --  Detect IP address name and redirect to Inet_Addr
  
        if Is_IP_Address (Name) then
           return Get_Host_By_Address (Inet_Addr (Name));
*************** package body GNAT.Sockets is
*** 920,927 ****
  
     function Get_Service_By_Name
       (Name     : String;
!       Protocol : String)
!       return     Service_Entry_Type
     is
        SN  : constant C.char_array := C.To_C (Name);
        SP  : constant C.char_array := C.To_C (Protocol);
--- 928,934 ----
  
     function Get_Service_By_Name
       (Name     : String;
!       Protocol : String) return Service_Entry_Type
     is
        SN  : constant C.char_array := C.To_C (Name);
        SP  : constant C.char_array := C.To_C (Protocol);
*************** package body GNAT.Sockets is
*** 957,964 ****
  
     function Get_Service_By_Port
       (Port     : Port_Type;
!       Protocol : String)
!       return     Service_Entry_Type
     is
        SP  : constant C.char_array := C.To_C (Protocol);
        Res : Servent_Access;
--- 964,970 ----
  
     function Get_Service_By_Port
       (Port     : Port_Type;
!       Protocol : String) return Service_Entry_Type
     is
        SP  : constant C.char_array := C.To_C (Protocol);
        Res : Servent_Access;
*************** package body GNAT.Sockets is
*** 993,1000 ****
     ---------------------
  
     function Get_Socket_Name
!      (Socket : Socket_Type)
!       return   Sock_Addr_Type
     is
        Sin  : aliased Sockaddr_In;
        Len  : aliased C.int := Sin'Size / 8;
--- 999,1005 ----
     ---------------------
  
     function Get_Socket_Name
!      (Socket : Socket_Type) return Sock_Addr_Type
     is
        Sin  : aliased Sockaddr_In;
        Len  : aliased C.int := Sin'Size / 8;
*************** package body GNAT.Sockets is
*** 1018,1025 ****
     function Get_Socket_Option
       (Socket : Socket_Type;
        Level  : Level_Type := Socket_Level;
!       Name   : Option_Name)
!       return   Option_Type
     is
        use type C.unsigned_char;
  
--- 1023,1029 ----
     function Get_Socket_Option
       (Socket : Socket_Type;
        Level  : Level_Type := Socket_Level;
!       Name   : Option_Name) return Option_Type
     is
        use type C.unsigned_char;
  
*************** package body GNAT.Sockets is
*** 1087,1094 ****
  
           when Add_Membership  |
                Drop_Membership =>
!             Opt.Multiaddr := To_Inet_Addr (To_In_Addr (V8 (V8'First)));
!             Opt.Interface := To_Inet_Addr (To_In_Addr (V8 (V8'Last)));
  
           when Multicast_TTL   =>
              Opt.Time_To_Live := Integer (V1);
--- 1091,1098 ----
  
           when Add_Membership  |
                Drop_Membership =>
!             Opt.Multicast_Address := To_Inet_Addr (To_In_Addr (V8 (V8'First)));
!             Opt.Local_Interface   := To_Inet_Addr (To_In_Addr (V8 (V8'Last)));
  
           when Multicast_TTL   =>
              Opt.Time_To_Live := Integer (V1);
*************** package body GNAT.Sockets is
*** 1124,1132 ****
     -----------
  
     function Image
!      (Val  : Inet_Addr_VN_Type;
!       Hex  : Boolean := False)
!       return String
     is
        --  The largest Inet_Addr_Comp_Type image occurs with IPv4. It
        --  has at most a length of 3 plus one '.' character.
--- 1128,1135 ----
     -----------
  
     function Image
!      (Val : Inet_Addr_VN_Type;
!       Hex : Boolean := False) return String
     is
        --  The largest Inet_Addr_Comp_Type image occurs with IPv4. It
        --  has at most a length of 3 plus one '.' character.
*************** package body GNAT.Sockets is
*** 1141,1146 ****
--- 1144,1153 ----
        procedure Img16 (V : Inet_Addr_Comp_Type);
        --  Append to Buffer image of V in hexadecimal format
  
+       -----------
+       -- Img10 --
+       -----------
+ 
        procedure Img10 (V : Inet_Addr_Comp_Type) is
           Img : constant String := V'Img;
           Len : constant Natural := Img'Length - 1;
*************** package body GNAT.Sockets is
*** 1150,1155 ****
--- 1157,1166 ----
           Length := Length + Len;
        end Img10;
  
+       -----------
+       -- Img16 --
+       -----------
+ 
        procedure Img16 (V : Inet_Addr_Comp_Type) is
        begin
           Buffer (Length)     := Hex_To_Char (Natural (V / 16) + 1);
*************** package body GNAT.Sockets is
*** 1201,1207 ****
  
     function Image (Value : Sock_Addr_Type) return String is
        Port : constant String := Value.Port'Img;
- 
     begin
        return Image (Value.Addr) & ':' & Port (2 .. Port'Last);
     end Image;
--- 1212,1217 ----
*************** package body GNAT.Sockets is
*** 1282,1294 ****
  
     function Is_Set
       (Item   : Socket_Set_Type;
!       Socket : Socket_Type)
!       return   Boolean
     is
     begin
        return Item.Last /= No_Socket
          and then Socket <= Item.Last
!         and then Is_Socket_In_Set (Item.Set, C.int (Socket));
     end Is_Set;
  
     -------------------
--- 1292,1303 ----
  
     function Is_Set
       (Item   : Socket_Set_Type;
!       Socket : Socket_Type) return Boolean
     is
     begin
        return Item.Last /= No_Socket
          and then Socket <= Item.Last
!         and then Is_Socket_In_Set (Item.Set, C.int (Socket)) /= 0;
     end Is_Set;
  
     -------------------
*************** package body GNAT.Sockets is
*** 1299,1308 ****
       (Socket : Socket_Type;
        Length : Positive := 15)
     is
!       Res : C.int;
! 
     begin
-       Res := C_Listen (C.int (Socket), C.int (Length));
        if Res = Failure then
           Raise_Socket_Error (Socket_Errno);
        end if;
--- 1308,1315 ----
       (Socket : Socket_Type;
        Length : Positive := 15)
     is
!       Res : constant C.int := C_Listen (C.int (Socket), C.int (Length));
     begin
        if Res = Failure then
           Raise_Socket_Error (Socket_Errno);
        end if;
*************** package body GNAT.Sockets is
*** 1314,1320 ****
  
     procedure Narrow (Item : in out Socket_Set_Type) is
        Last : aliased C.int := C.int (Item.Last);
- 
     begin
        if Item.Set /= No_Socket_Set then
           Last_Socket_In_Set (Item.Set, Last'Unchecked_Access);
--- 1321,1326 ----
*************** package body GNAT.Sockets is
*** 1364,1375 ****
  
     procedure Raise_Host_Error (Error : Integer) is
  
!       function Error_Message return String;
        --  We do not use a C function like strerror because hstrerror
        --  that would correspond seems to be obsolete. Return
        --  appropriate string for error value.
  
!       function Error_Message return String is
        begin
           case Error is
              when Constants.HOST_NOT_FOUND => return "Host not found";
--- 1370,1385 ----
  
     procedure Raise_Host_Error (Error : Integer) is
  
!       function Host_Error_Message return String;
        --  We do not use a C function like strerror because hstrerror
        --  that would correspond seems to be obsolete. Return
        --  appropriate string for error value.
  
!       ------------------------
!       -- Host_Error_Message --
!       ------------------------
! 
!       function Host_Error_Message return String is
        begin
           case Error is
              when Constants.HOST_NOT_FOUND => return "Host not found";
*************** package body GNAT.Sockets is
*** 1378,1389 ****
              when Constants.NO_DATA        => return "No address";
              when others                   => return "Unknown error";
           end case;
!       end Error_Message;
  
     --  Start of processing for Raise_Host_Error
  
     begin
!       Ada.Exceptions.Raise_Exception (Host_Error'Identity, Error_Message);
     end Raise_Host_Error;
  
     ------------------------
--- 1388,1399 ----
              when Constants.NO_DATA        => return "No address";
              when others                   => return "Unknown error";
           end case;
!       end Host_Error_Message;
  
     --  Start of processing for Raise_Host_Error
  
     begin
!       Ada.Exceptions.Raise_Exception (Host_Error'Identity, Host_Error_Message);
     end Raise_Host_Error;
  
     ------------------------
*************** package body GNAT.Sockets is
*** 1394,1399 ****
--- 1404,1414 ----
        use type C.Strings.chars_ptr;
  
        function Image (E : Integer) return String;
+ 
+       -----------
+       -- Image --
+       -----------
+ 
        function Image (E : Integer) return String is
           Msg : String := E'Img & "] ";
        begin
*************** package body GNAT.Sockets is
*** 1401,1406 ****
--- 1416,1423 ----
           return Msg;
        end Image;
  
+    --  Start of processing for Raise_Socket_Error
+ 
     begin
        Ada.Exceptions.Raise_Exception
          (Socket_Error'Identity,
*************** package body GNAT.Sockets is
*** 1507,1515 ****
     is
        use type Ada.Streams.Stream_Element_Offset;
  
!       Res  : C.int;
!       Sin  : aliased Sockaddr_In;
!       Len  : aliased C.int := Sin'Size / 8;
  
     begin
        Res :=
--- 1524,1532 ----
     is
        use type Ada.Streams.Stream_Element_Offset;
  
!       Res : C.int;
!       Sin : aliased Sockaddr_In;
!       Len : aliased C.int := Sin'Size / 8;
  
     begin
        Res :=
*************** package body GNAT.Sockets is
*** 1537,1544 ****
  
     function Resolve_Error
       (Error_Value : Integer;
!       From_Errno  : Boolean := True)
!       return        Error_Type
     is
        use GNAT.Sockets.Constants;
  
--- 1554,1560 ----
  
     function Resolve_Error
       (Error_Value : Integer;
!       From_Errno  : Boolean := True) return Error_Type
     is
        use GNAT.Sockets.Constants;
  
*************** package body GNAT.Sockets is
*** 1608,1615 ****
     -----------------------
  
     function Resolve_Exception
!      (Occurrence : Exception_Occurrence)
!       return       Error_Type
     is
        Id    : constant Exception_Id := Exception_Identity (Occurrence);
        Msg   : constant String       := Exception_Message (Occurrence);
--- 1624,1630 ----
     -----------------------
  
     function Resolve_Exception
!      (Occurrence : Exception_Occurrence) return Error_Type
     is
        Id    : constant Exception_Id := Exception_Identity (Occurrence);
        Msg   : constant String       := Exception_Message (Occurrence);
*************** package body GNAT.Sockets is
*** 1640,1649 ****
  
        if Id = Socket_Error_Id then
           return Resolve_Error (Val);
- 
        elsif Id = Host_Error_Id then
           return Resolve_Error (Val, False);
- 
        else
           return Cannot_Resolve_Error;
        end if;
--- 1655,1662 ----
*************** package body GNAT.Sockets is
*** 1694,1700 ****
            (C.int (Socket),
             Item (Item'First)'Address,
             Item'Length,
!            To_Int (Flags));
  
        if Res = Failure then
           Raise_Socket_Error (Socket_Errno);
--- 1707,1713 ----
            (C.int (Socket),
             Item (Item'First)'Address,
             Item'Length,
!            Set_Forced_Flags (To_Int (Flags)));
  
        if Res = Failure then
           Raise_Socket_Error (Socket_Errno);
*************** package body GNAT.Sockets is
*** 1732,1738 ****
          (C.int (Socket),
           Item (Item'First)'Address,
           Item'Length,
!          To_Int (Flags),
           Sin'Unchecked_Access,
           Len);
  
--- 1745,1751 ----
          (C.int (Socket),
           Item (Item'First)'Address,
           Item'Length,
!          Set_Forced_Flags (To_Int (Flags)),
           Sin'Unchecked_Access,
           Len);
  
*************** package body GNAT.Sockets is
*** 1753,1758 ****
--- 1766,1772 ----
        Count  : out Ada.Streams.Stream_Element_Count)
     is
        Res : C.int;
+ 
     begin
        Res :=
          C_Writev
*************** package body GNAT.Sockets is
*** 1784,1789 ****
--- 1798,1817 ----
        Insert_Socket_In_Set (Item.Set, C.int (Socket));
     end Set;
  
+    ----------------------
+    -- Set_Forced_Flags --
+    ----------------------
+ 
+    function Set_Forced_Flags (F : C.int) return C.int is
+       use type C.unsigned;
+       function To_unsigned is
+         new Ada.Unchecked_Conversion (C.int, C.unsigned);
+       function To_int is
+         new Ada.Unchecked_Conversion (C.unsigned, C.int);
+    begin
+       return To_int (To_unsigned (F) or Constants.MSG_Forced_Flags);
+    end Set_Forced_Flags;
+ 
     -----------------------
     -- Set_Socket_Option --
     -----------------------
*************** package body GNAT.Sockets is
*** 1829,1836 ****
  
           when Add_Membership  |
                Drop_Membership =>
!             V8 (V8'First) := To_Int (To_In_Addr (Option.Multiaddr));
!             V8 (V8'Last)  := To_Int (To_In_Addr (Option.Interface));
              Len := V8'Size / 8;
              Add := V8'Address;
  
--- 1857,1864 ----
  
           when Add_Membership  |
                Drop_Membership =>
!             V8 (V8'First) := To_Int (To_In_Addr (Option.Multicast_Address));
!             V8 (V8'Last)  := To_Int (To_In_Addr (Option.Local_Interface));
              Len := V8'Size / 8;
              Add := V8'Address;
  
*************** package body GNAT.Sockets is
*** 1865,1886 ****
        use type C.unsigned_short;
  
     begin
-       pragma Warnings (Off);
- 
        --  Big-endian case. No conversion needed. On these platforms,
        --  htons() defaults to a null procedure.
  
        if Default_Bit_Order = High_Order_First then
           return S;
  
        --  Little-endian case. We must swap the high and low bytes of this
        --  short to make the port number network compliant.
  
        else
           return (S / 256) + (S mod 256) * 256;
        end if;
- 
-       pragma Warnings (On);
     end Short_To_Network;
  
     ---------------------
--- 1893,1915 ----
        use type C.unsigned_short;
  
     begin
        --  Big-endian case. No conversion needed. On these platforms,
        --  htons() defaults to a null procedure.
  
+       pragma Warnings (Off);
+       --  Since the test can generate "always True/False" warning
+ 
        if Default_Bit_Order = High_Order_First then
           return S;
  
+          pragma Warnings (On);
+ 
        --  Little-endian case. We must swap the high and low bytes of this
        --  short to make the port number network compliant.
  
        else
           return (S / 256) + (S mod 256) * 256;
        end if;
     end Short_To_Network;
  
     ---------------------
*************** package body GNAT.Sockets is
*** 1907,1914 ****
  
     function Stream
       (Socket  : Socket_Type;
!       Send_To : Sock_Addr_Type)
!       return    Stream_Access
     is
        S : Datagram_Socket_Stream_Access;
  
--- 1936,1942 ----
  
     function Stream
       (Socket  : Socket_Type;
!       Send_To : Sock_Addr_Type) return Stream_Access
     is
        S : Datagram_Socket_Stream_Access;
  
*************** package body GNAT.Sockets is
*** 1965,1974 ****
        --  H_Length is not used because it is currently only set to 4.
        --  H_Addrtype is always AF_INET
  
!       Result    : Host_Entry_Type
!         (Aliases_Length   => Aliases'Length - 1,
!          Addresses_Length => Addresses'Length - 1);
!       --  The last element is a null pointer.
  
        Source : C.size_t;
        Target : Natural;
--- 1993,2002 ----
        --  H_Length is not used because it is currently only set to 4.
        --  H_Addrtype is always AF_INET
  
!       Result : Host_Entry_Type
!                  (Aliases_Length   => Aliases'Length - 1,
!                   Addresses_Length => Addresses'Length - 1);
!       --  The last element is a null pointer
  
        Source : C.size_t;
        Target : Natural;
*************** package body GNAT.Sockets is
*** 2018,2034 ****
     ------------------
  
     function To_Inet_Addr
!      (Addr : In_Addr)
!       return Inet_Addr_Type
     is
        Result : Inet_Addr_Type;
- 
     begin
        Result.Sin_V4 (1) := Inet_Addr_Comp_Type (Addr.S_B1);
        Result.Sin_V4 (2) := Inet_Addr_Comp_Type (Addr.S_B2);
        Result.Sin_V4 (3) := Inet_Addr_Comp_Type (Addr.S_B3);
        Result.Sin_V4 (4) := Inet_Addr_Comp_Type (Addr.S_B4);
- 
        return Result;
     end To_Inet_Addr;
  
--- 2046,2059 ----
     ------------------
  
     function To_Inet_Addr
!      (Addr : In_Addr) return Inet_Addr_Type
     is
        Result : Inet_Addr_Type;
     begin
        Result.Sin_V4 (1) := Inet_Addr_Comp_Type (Addr.S_B1);
        Result.Sin_V4 (2) := Inet_Addr_Comp_Type (Addr.S_B2);
        Result.Sin_V4 (3) := Inet_Addr_Comp_Type (Addr.S_B3);
        Result.Sin_V4 (4) := Inet_Addr_Comp_Type (Addr.S_B4);
        return Result;
     end To_Inet_Addr;
  
*************** package body GNAT.Sockets is
*** 2087,2093 ****
  
        Result   : Service_Entry_Type
          (Aliases_Length   => Aliases'Length - 1);
!       --  The last element is a null pointer.
  
        Source : C.size_t;
        Target : Natural;
--- 2112,2118 ----
  
        Result   : Service_Entry_Type
          (Aliases_Length   => Aliases'Length - 1);
!       --  The last element is a null pointer
  
        Source : C.size_t;
        Target : Natural;
*************** package body GNAT.Sockets is
*** 2130,2137 ****
        MS : Timeval_Unit;
  
     begin
!       S  := Timeval_Unit (Val - 0.5);
!       MS := Timeval_Unit (1_000_000 * (Val - Selector_Duration (S)));
        return (S, MS);
     end To_Timeval;
  
--- 2155,2173 ----
        MS : Timeval_Unit;
  
     begin
!       --  If zero, set result as zero (otherwise it gets rounded down to -1)
! 
!       if Val = 0.0 then
!          S  := 0;
!          MS := 0;
! 
!       --  Normal case where we do round down
! 
!       else
!          S  := Timeval_Unit (Val - 0.5);
!          MS := Timeval_Unit (1_000_000 * (Val - Selector_Duration (S)));
!       end if;
! 
        return (S, MS);
     end To_Timeval;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/g-socket.ads gcc-4.0.0/gcc/ada/g-socket.ads
*** gcc-3.4.3/gcc/ada/g-socket.ads	Mon Dec  1 13:29:27 2003
--- gcc-4.0.0/gcc/ada/g-socket.ads	Thu Feb 10 13:57:01 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --              Copyright (C) 2001-2003 Ada Core Technologies, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --              Copyright (C) 2001-2005 Ada Core Technologies, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 31,56 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This package provides an interface to the sockets communication
! --  facility provided on many operating systems. This is implemented
! --  on the following platforms:
! 
! --     All native ports, except Interix, with restrictions as follows
  
! --       Multicast is available only on systems which provide support
! --       for this feature, so it is not available if Multicast is not
! --       supported, or not installed. In particular Multicast is not
! --       available with the Windows version.
  
! --       The VMS implementation has implemented using the DECC RTL Socket
! --       API, and is thus subject to limitations in the implementation of
! --       this API.
  
! --       This package is not supported on the Interix port of GNAT.
  
! --     VxWorks cross ports fully implement this package.
  
! --     This package is not yet implemented on LynxOS.
  
  with Ada.Exceptions;
  with Ada.Streams;
--- 31,53 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This package provides an interface to the sockets communication facility
! --  provided on many operating systems. This is implemented on the following
! --  platforms:
  
! --     All native ports, with restrictions as follows
  
! --       Multicast is available only on systems which provide support for this
! --       feature, so it is not available if Multicast is not supported, or not
! --       installed. In particular Multicast is not available with the Windows
! --       version.
  
! --       The VMS implementation has implemented using the DECC RTL Socket API,
! --       and is thus subject to limitations in the implementation of this API.
  
! --     VxWorks cross ports fully implement this package
  
! --     This package is not yet implemented on LynxOS or other cross ports
  
  with Ada.Exceptions;
  with Ada.Streams;
*************** package GNAT.Sockets is
*** 64,87 ****
     --  between applications. This package provides an Ada-like interface
     --  similar to that proposed as part of the BSD socket layer.
  
!    --  GNAT.Sockets has been designed with several ideas in mind.
  
!    --  This is a system independent interface. Therefore, we try as
!    --  much as possible to mask system incompatibilities. Some
!    --  functionalities are not available because there are not fully
!    --  supported on some systems.
  
!    --  This is a thick binding. For instance, a major effort has been
!    --  done to avoid using memory addresses or untyped ints. We
!    --  preferred to define streams and enumeration types. Errors are
!    --  not returned as returned values but as exceptions.
  
     --  This package provides a POSIX-compliant interface (between two
!    --  different implementations of the same routine, we adopt the one
!    --  closest to the POSIX specification). For instance, using
!    --  select(), the notification of an asynchronous connect failure
!    --  is delivered in the write socket set (POSIX) instead of the
!    --  exception socket set (NT).
  
     --  Here is a typical example of what you can do:
  
--- 61,82 ----
     --  between applications. This package provides an Ada-like interface
     --  similar to that proposed as part of the BSD socket layer.
  
!    --  GNAT.Sockets has been designed with several ideas in mind
  
!    --  This is a system independent interface. Therefore, we try as much as
!    --  possible to mask system incompatibilities. Some functionalities are not
!    --  available because there are not fully supported on some systems.
  
!    --  This is a thick binding. For instance, a major effort has been done to
!    --  avoid using memory addresses or untyped ints. We preferred to define
!    --  streams and enumeration types. Errors are not returned as returned
!    --  values but as exceptions.
  
     --  This package provides a POSIX-compliant interface (between two
!    --  different implementations of the same routine, we adopt the one closest
!    --  to the POSIX specification). For instance, using select(), the
!    --  notification of an asynchronous connect failure is delivered in the
!    --  write socket set (POSIX) instead of the exception socket set (NT).
  
     --  Here is a typical example of what you can do:
  
*************** package GNAT.Sockets is
*** 120,130 ****
     --        Address.Port := 5876;
  
     --        --  The first step is to create a socket. Once created, this
!    --        --  socket must be associated to with an address. Usually only
!    --        --  a server (Pong here) needs to bind an address explicitly.
!    --        --  Most of the time clients can skip this step because the
!    --        --  socket routines will bind an arbitrary address to an unbound
!    --        --  socket.
  
     --        Create_Socket (Server);
  
--- 115,124 ----
     --        Address.Port := 5876;
  
     --        --  The first step is to create a socket. Once created, this
!    --        --  socket must be associated to with an address. Usually only a
!    --        --  server (Pong here) needs to bind an address explicitly. Most
!    --        --  of the time clients can skip this step because the socket
!    --        --  routines will bind an arbitrary address to an unbound socket.
  
     --        Create_Socket (Server);
  
*************** package GNAT.Sockets is
*** 289,295 ****
  
     --        Channel := Stream (Socket);
  
!    --        --  Send message to server Pong.
  
     --        String'Output (Channel, "Hello world");
  
--- 283,289 ----
  
     --        Channel := Stream (Socket);
  
!    --        --  Send message to server Pong
  
     --        String'Output (Channel, "Hello world");
  
*************** package GNAT.Sockets is
*** 373,433 ****
     --  end PingPong;
  
     procedure Initialize (Process_Blocking_IO : Boolean := False);
!    --  Initialize must be called before using any other socket routines.
!    --  The Process_Blocking_IO parameter indicates whether the thread
!    --  library provides process-blocking or thread-blocking input/output
!    --  operations. In the former case (typically with FSU threads)
!    --  GNAT.Sockets should be initialized with a value of True to
!    --  provide task-blocking IO through an emulation mechanism.
!    --  Only the first call to Initialize is taken into account (further
!    --  calls will be ignored). Note that with the default value
!    --  of Process_Blocking_IO, this operation is a no-op on UNIX
!    --  platforms, but applications should make sure to call it
!    --  if portability is expected: some platforms (such as Windows)
!    --  require initialization before any other socket operations.
  
     procedure Finalize;
     --  After Finalize is called it is not possible to use any routines
     --  exported in by this package. This procedure is idempotent.
  
     type Socket_Type is private;
!    --  Sockets are used to implement a reliable bi-directional
!    --  point-to-point, stream-based connections between
!    --  hosts. No_Socket provides a special value to denote
!    --  uninitialized sockets.
  
     No_Socket : constant Socket_Type;
  
     Socket_Error : exception;
!    --  There is only one exception in this package to deal with an
!    --  error during a socket routine. Once raised, its message
!    --  contains a string describing the error code.
  
     function Image (Socket : Socket_Type) return String;
     --  Return a printable string for Socket
  
     function To_C (Socket : Socket_Type) return Integer;
!    --  Return a file descriptor to be used by external subprograms
!    --  especially the C functions that are not yet interfaced in this
!    --  package.
  
     type Family_Type is (Family_Inet, Family_Inet6);
!    --  Address family (or protocol family) identifies the
!    --  communication domain and groups protocols with similar address
!    --  formats. IPv6 will soon be supported.
  
     type Mode_Type is (Socket_Stream, Socket_Datagram);
!    --  Stream sockets provide connection-oriented byte
!    --  streams. Datagram sockets support unreliable connectionless
!    --  message based communication.
  
     type Shutmode_Type is (Shut_Read, Shut_Write, Shut_Read_Write);
!    --  When a process closes a socket, the policy is to retain any
!    --  data queued until either a delivery or a timeout expiration (in
!    --  this case, the data are discarded). A finer control is
!    --  available through shutdown. With Shut_Read, no more data can be
!    --  received from the socket. With_Write, no more data can be
!    --  transmitted. Neither transmission nor reception can be
     --  performed with Shut_Read_Write.
  
     type Port_Type is new Natural;
--- 367,422 ----
     --  end PingPong;
  
     procedure Initialize (Process_Blocking_IO : Boolean := False);
!    --  Initialize must be called before using any other socket routines. The
!    --  Process_Blocking_IO parameter indicates whether the thread library
!    --  provides process-blocking or thread-blocking input/output operations.
!    --  In the former case (typically with FSU threads) GNAT.Sockets should be
!    --  initialized with a value of True to provide task-blocking IO through an
!    --  emulation mechanism. Only the first call to Initialize is taken into
!    --  account (further calls will be ignored). Note that with the default
!    --  value of Process_Blocking_IO, this operation is a no-op on UNIX
!    --  platforms, but applications should make sure to call it if portability
!    --  is expected: some platforms (such as Windows) require initialization
!    --  before any other socket operations.
  
     procedure Finalize;
     --  After Finalize is called it is not possible to use any routines
     --  exported in by this package. This procedure is idempotent.
  
     type Socket_Type is private;
!    --  Sockets are used to implement a reliable bi-directional point-to-point,
!    --  stream-based connections between hosts. No_Socket provides a special
!    --  value to denote uninitialized sockets.
  
     No_Socket : constant Socket_Type;
  
     Socket_Error : exception;
!    --  There is only one exception in this package to deal with an error during
!    --  a socket routine. Once raised, its message contains a string describing
!    --  the error code.
  
     function Image (Socket : Socket_Type) return String;
     --  Return a printable string for Socket
  
     function To_C (Socket : Socket_Type) return Integer;
!    --  Return a file descriptor to be used by external subprograms. This is
!    --  useful for C functions that are not yet interfaced in this package.
  
     type Family_Type is (Family_Inet, Family_Inet6);
!    --  Address family (or protocol family) identifies the communication domain
!    --  and groups protocols with similar address formats. IPv6 will soon be
!    --  supported.
  
     type Mode_Type is (Socket_Stream, Socket_Datagram);
!    --  Stream sockets provide connection-oriented byte streams. Datagram
!    --  sockets support unreliable connectionless message based communication.
  
     type Shutmode_Type is (Shut_Read, Shut_Write, Shut_Read_Write);
!    --  When a process closes a socket, the policy is to retain any data queued
!    --  until either a delivery or a timeout expiration (in this case, the data
!    --  are discarded). A finer control is available through shutdown. With
!    --  Shut_Read, no more data can be received from the socket. With_Write, no
!    --  more data can be transmitted. Neither transmission nor reception can be
     --  performed with Shut_Read_Write.
  
     type Port_Type is new Natural;
*************** package GNAT.Sockets is
*** 439,449 ****
     No_Port  : constant Port_Type;
  
     type Inet_Addr_Type (Family : Family_Type := Family_Inet) is private;
!    --  An Internet address depends on an address family (IPv4 contains
!    --  4 octets and Ipv6 contains 16 octets). Any_Inet_Address is a
!    --  special value treated like a wildcard enabling all addresses.
!    --  No_Inet_Addr provides a special value to denote uninitialized
!    --  inet addresses.
  
     Any_Inet_Addr : constant Inet_Addr_Type;
     No_Inet_Addr  : constant Inet_Addr_Type;
--- 428,437 ----
     No_Port  : constant Port_Type;
  
     type Inet_Addr_Type (Family : Family_Type := Family_Inet) is private;
!    --  An Internet address depends on an address family (IPv4 contains 4
!    --  octets and Ipv6 contains 16 octets). Any_Inet_Addr is a special value
!    --  treated like a wildcard enabling all addresses. No_Inet_Addr provides a
!    --  special value to denote uninitialized inet addresses.
  
     Any_Inet_Addr : constant Inet_Addr_Type;
     No_Inet_Addr  : constant Inet_Addr_Type;
*************** package GNAT.Sockets is
*** 452,479 ****
        Addr : Inet_Addr_Type (Family);
        Port : Port_Type;
     end record;
!    --  Socket addresses fully define a socket connection with a
!    --  protocol family, an Internet address and a port. No_Sock_Addr
!    --  provides a special value for uninitialized socket addresses.
  
     No_Sock_Addr : constant Sock_Addr_Type;
  
     function Image (Value : Inet_Addr_Type) return String;
!    --  Return an image of an Internet address. IPv4 notation consists
!    --  in 4 octets in decimal format separated by dots. IPv6 notation
!    --  consists in 16 octets in hexadecimal format separated by
!    --  colons (and possibly dots).
  
     function Image (Value : Sock_Addr_Type) return String;
!    --  Return inet address image and port image separated by a colon.
  
     function Inet_Addr (Image : String) return Inet_Addr_Type;
     --  Convert address image from numbers-and-dots notation into an
     --  inet address.
  
!    --  Host entries provide complete information on a given host:
!    --  the official name, an array of alternative names or aliases and
!    --  array of network addresses.
  
     type Host_Entry_Type
       (Aliases_Length, Addresses_Length : Natural) is private;
--- 440,467 ----
        Addr : Inet_Addr_Type (Family);
        Port : Port_Type;
     end record;
!    --  Socket addresses fully define a socket connection with protocol family,
!    --  an Internet address and a port. No_Sock_Addr provides a special value
!    --  for uninitialized socket addresses.
  
     No_Sock_Addr : constant Sock_Addr_Type;
  
     function Image (Value : Inet_Addr_Type) return String;
!    --  Return an image of an Internet address. IPv4 notation consists in 4
!    --  octets in decimal format separated by dots. IPv6 notation consists in
!    --  16 octets in hexadecimal format separated by colons (and possibly
!    --  dots).
  
     function Image (Value : Sock_Addr_Type) return String;
!    --  Return inet address image and port image separated by a colon
  
     function Inet_Addr (Image : String) return Inet_Addr_Type;
     --  Convert address image from numbers-and-dots notation into an
     --  inet address.
  
!    --  Host entries provide complete information on a given host: the official
!    --  name, an array of alternative names or aliases and array of network
!    --  addresses.
  
     type Host_Entry_Type
       (Aliases_Length, Addresses_Length : Natural) is private;
*************** package GNAT.Sockets is
*** 488,529 ****
     --  Return number of addresses in host entry
  
     function Aliases
!      (E    : Host_Entry_Type;
!       N    : Positive := 1)
!       return String;
!    --  Return N'th aliases in host entry. The first index is 1.
  
     function Addresses
!      (E    : Host_Entry_Type;
!       N    : Positive := 1)
!       return Inet_Addr_Type;
!    --  Return N'th addresses in host entry. The first index is 1.
  
     Host_Error : exception;
!    --  Exception raised by the two following procedures. Once raised,
!    --  its message contains a string describing the error code. This
!    --  exception is raised when an host entry can not be retrieved.
  
     function Get_Host_By_Address
       (Address : Inet_Addr_Type;
!       Family  : Family_Type := Family_Inet)
!       return    Host_Entry_Type;
!    --  Return host entry structure for the given inet address
  
     function Get_Host_By_Name
!      (Name : String)
!       return Host_Entry_Type;
!    --  Return host entry structure for the given host name. Here name
!    --  is either a host name, or an IP address.
  
     function Host_Name return String;
     --  Return the name of the current host
  
-    --  Service entries provide complete information on a given
-    --  service: the official name, an array of alternative names or
-    --  aliases and the port number.
- 
     type Service_Entry_Type (Aliases_Length : Natural) is private;
  
     function Official_Name (S : Service_Entry_Type) return String;
     --  Return official name in service entry
--- 476,515 ----
     --  Return number of addresses in host entry
  
     function Aliases
!      (E : Host_Entry_Type;
!       N : Positive := 1) return String;
!    --  Return N'th aliases in host entry. The first index is 1
  
     function Addresses
!      (E : Host_Entry_Type;
!       N : Positive := 1) return Inet_Addr_Type;
!    --  Return N'th addresses in host entry. The first index is 1
  
     Host_Error : exception;
!    --  Exception raised by the two following procedures. Once raised, its
!    --  message contains a string describing the error code. This exception is
!    --  raised when an host entry can not be retrieved.
  
     function Get_Host_By_Address
       (Address : Inet_Addr_Type;
!       Family  : Family_Type := Family_Inet) return Host_Entry_Type;
!    --  Return host entry structure for the given Inet address. Note that no
!    --  result will be returned if there is no mapping of this IP address to a
!    --  host name in the system tables (host database, DNS or otherwise).
  
     function Get_Host_By_Name
!      (Name : String) return Host_Entry_Type;
!    --  Return host entry structure for the given host name. Here name is
!    --  either a host name, or an IP address. If Name is an IP address, this is
!    --  equivalent to Get_Host_By_Address (Inet_Addr (Name)).
  
     function Host_Name return String;
     --  Return the name of the current host
  
     type Service_Entry_Type (Aliases_Length : Natural) is private;
+    --  Service entries provide complete information on a given service: the
+    --  official name, an array of alternative names or aliases and the port
+    --  number.
  
     function Official_Name (S : Service_Entry_Type) return String;
     --  Return official name in service entry
*************** package GNAT.Sockets is
*** 538,568 ****
     --  Return number of aliases in service entry
  
     function Aliases
!      (S    : Service_Entry_Type;
!       N    : Positive := 1)
!       return String;
!    --  Return N'th aliases in service entry. The first index is 1.
  
     function Get_Service_By_Name
       (Name     : String;
!       Protocol : String)
!       return     Service_Entry_Type;
     --  Return service entry structure for the given service name
  
     function Get_Service_By_Port
       (Port     : Port_Type;
!       Protocol : String)
!       return     Service_Entry_Type;
     --  Return service entry structure for the given service port number
  
     Service_Error : exception;
  
     --  Errors are described by an enumeration type. There is only one
!    --  exception Socket_Error in this package to deal with an error
!    --  during a socket routine. Once raised, its message contains the
!    --  error code between brackets and a string describing the error code.
  
!    --  The name of the enumeration constant documents the error condition.
  
     type Error_Type is
       (Success,
--- 524,552 ----
     --  Return number of aliases in service entry
  
     function Aliases
!      (S : Service_Entry_Type;
!       N : Positive := 1) return String;
!    --  Return N'th aliases in service entry (the first index is 1)
  
     function Get_Service_By_Name
       (Name     : String;
!       Protocol : String) return Service_Entry_Type;
     --  Return service entry structure for the given service name
  
     function Get_Service_By_Port
       (Port     : Port_Type;
!       Protocol : String) return Service_Entry_Type;
     --  Return service entry structure for the given service port number
  
     Service_Error : exception;
+    --  Comment required ???
  
     --  Errors are described by an enumeration type. There is only one
!    --  exception Socket_Error in this package to deal with an error during a
!    --  socket routine. Once raised, its message contains the error code
!    --  between brackets and a string describing the error code.
  
!    --  The name of the enumeration constant documents the error condition
  
     type Error_Type is
       (Success,
*************** package GNAT.Sockets is
*** 610,619 ****
        Unknown_Server_Error,
        Cannot_Resolve_Error);
  
!    --  Get_Socket_Options and Set_Socket_Options manipulate options
!    --  associated with a socket. Options may exist at multiple
!    --  protocol levels in the communication stack. Socket_Level is the
!    --  uppermost socket level.
  
     type Level_Type is (
       Socket_Level,
--- 594,602 ----
        Unknown_Server_Error,
        Cannot_Resolve_Error);
  
!    --  Get_Socket_Options and Set_Socket_Options manipulate options associated
!    --  with a socket. Options may exist at multiple protocol levels in the
!    --  communication stack. Socket_Level is the uppermost socket level.
  
     type Level_Type is (
       Socket_Level,
*************** package GNAT.Sockets is
*** 621,629 ****
       IP_Protocol_For_UDP_Level,
       IP_Protocol_For_TCP_Level);
  
!    --  There are several options available to manipulate sockets. Each
!    --  option has a name and several values available. Most of the
!    --  time, the value is a boolean to enable or disable this option.
  
     type Option_Name is (
       Keep_Alive,      -- Enable sending of keep-alive messages
--- 604,612 ----
       IP_Protocol_For_UDP_Level,
       IP_Protocol_For_TCP_Level);
  
!    --  There are several options available to manipulate sockets. Each option
!    --  has a name and several values available. Most of the time, the value is
!    --  a boolean to enable or disable this option.
  
     type Option_Name is (
       Keep_Alive,      -- Enable sending of keep-alive messages
*************** package GNAT.Sockets is
*** 665,672 ****
  
           when Add_Membership  |
                Drop_Membership =>
!             Multiaddr : Inet_Addr_Type;
!             Interface : Inet_Addr_Type;
  
           when Multicast_TTL   =>
              Time_To_Live : Natural;
--- 648,655 ----
  
           when Add_Membership  |
                Drop_Membership =>
!             Multicast_Address : Inet_Addr_Type;
!             Local_Interface   : Inet_Addr_Type;
  
           when Multicast_TTL   =>
              Time_To_Live : Natural;
*************** package GNAT.Sockets is
*** 674,683 ****
        end case;
     end record;
  
!    --  There are several controls available to manipulate
!    --  sockets. Each option has a name and several values available.
!    --  These controls differ from the socket options in that they are
!    --  not specific to sockets but are available for any device.
  
     type Request_Name is (
        Non_Blocking_IO,  --  Cause a caller not to wait on blocking operations.
--- 657,666 ----
        end case;
     end record;
  
!    --  There are several controls available to manipulate sockets. Each option
!    --  has a name and several values available. These controls differ from the
!    --  socket options in that they are not specific to sockets but are
!    --  available for any device.
  
     type Request_Name is (
        Non_Blocking_IO,  --  Cause a caller not to wait on blocking operations.
*************** package GNAT.Sockets is
*** 694,728 ****
        end case;
     end record;
  
!    --  A request flag allows to specify the type of message
!    --  transmissions or receptions. A request flag can be a
!    --  combination of zero or more predefined request flags.
  
     type Request_Flag_Type is private;
  
     No_Request_Flag : constant Request_Flag_Type;
!    --  This flag corresponds to the normal execution of an operation.
  
     Process_Out_Of_Band_Data : constant Request_Flag_Type;
!    --  This flag requests that the receive or send function operates
!    --  on out-of-band data when the socket supports this notion (e.g.
     --  Socket_Stream).
  
     Peek_At_Incoming_Data : constant Request_Flag_Type;
     --  This flag causes the receive operation to return data from the
!    --  beginning of the receive queue without removing that data from
!    --  the queue. A subsequent receive call will return the same data.
  
     Wait_For_A_Full_Reception : constant Request_Flag_Type;
!    --  This flag requests that the operation block until the full
!    --  request is satisfied. However, the call may still return less
!    --  data than requested if a signal is caught, an error or
!    --  disconnect occurs, or the next data to be received is of a dif-
!    --  ferent type than that returned.
  
     Send_End_Of_Record : constant Request_Flag_Type;
!    --  This flag indicates that the entire message has been sent and
!    --  so this terminates the record.
  
     function "+" (L, R : Request_Flag_Type) return Request_Flag_Type;
     --  Combine flag L with flag R
--- 677,712 ----
        end case;
     end record;
  
!    --  A request flag allows to specify the type of message transmissions or
!    --  receptions. A request flag can be combination of zero or more
!    --  predefined request flags.
  
     type Request_Flag_Type is private;
  
     No_Request_Flag : constant Request_Flag_Type;
!    --  This flag corresponds to the normal execution of an operation
  
     Process_Out_Of_Band_Data : constant Request_Flag_Type;
!    --  This flag requests that the receive or send function operates on
!    --  out-of-band data when the socket supports this notion (e.g.
     --  Socket_Stream).
  
     Peek_At_Incoming_Data : constant Request_Flag_Type;
     --  This flag causes the receive operation to return data from the
!    --  beginning of the receive queue without removing that data from the
!    --  queue. A subsequent receive call will return the same data.
  
     Wait_For_A_Full_Reception : constant Request_Flag_Type;
!    --  This flag requests that the operation block until the full request is
!    --  satisfied. However, the call may still return less data than requested
!    --  if a signal is caught, an error or disconnect occurs, or the next data
!    --  to be received is of a different type than that returned. Note that
!    --  this flag depends on support in the underlying sockets implementation,
!    --  and is not supported under Windows.
  
     Send_End_Of_Record : constant Request_Flag_Type;
!    --  This flag indicates that the entire message has been sent and so this
!    --  terminates the record.
  
     function "+" (L, R : Request_Flag_Type) return Request_Flag_Type;
     --  Combine flag L with flag R
*************** package GNAT.Sockets is
*** 740,756 ****
       (Socket : out Socket_Type;
        Family : Family_Type := Family_Inet;
        Mode   : Mode_Type   := Socket_Stream);
!    --  Create an endpoint for communication. Raises Socket_Error on error.
  
     procedure Accept_Socket
       (Server  : Socket_Type;
        Socket  : out Socket_Type;
        Address : out Sock_Addr_Type);
!    --  Extract the first connection request on the queue of pending
!    --  connections, creates a new connected socket with mostly the
!    --  same properties as Server, and allocates a new socket. The
!    --  returned Address is filled in with the address of the
!    --  connection. Raises Socket_Error on error.
  
     procedure Bind_Socket
       (Socket  : Socket_Type;
--- 724,740 ----
       (Socket : out Socket_Type;
        Family : Family_Type := Family_Inet;
        Mode   : Mode_Type   := Socket_Stream);
!    --  Create an endpoint for communication. Raises Socket_Error on error
  
     procedure Accept_Socket
       (Server  : Socket_Type;
        Socket  : out Socket_Type;
        Address : out Sock_Addr_Type);
!    --  Extracts the first connection request on the queue of pending
!    --  connections, creates a new connected socket with mostly the same
!    --  properties as Server, and allocates a new socket. The returned Address
!    --  is filled in with the address of the connection. Raises Socket_Error on
!    --  error.
  
     procedure Bind_Socket
       (Socket  : Socket_Type;
*************** package GNAT.Sockets is
*** 759,765 ****
     --  Socket_Error on error.
  
     procedure Close_Socket (Socket : Socket_Type);
!    --  Close a socket and more specifically a non-connected socket.
  
     procedure Connect_Socket
       (Socket : Socket_Type;
--- 743,749 ----
     --  Socket_Error on error.
  
     procedure Close_Socket (Socket : Socket_Type);
!    --  Close a socket and more specifically a non-connected socket
  
     procedure Connect_Socket
       (Socket : Socket_Type;
*************** package GNAT.Sockets is
*** 770,778 ****
     procedure Control_Socket
       (Socket  : Socket_Type;
        Request : in out Request_Type);
!    --  Obtain or set parameter values that control the socket. This
!    --  control differs from the socket options in that they are not
!    --  specific to sockets but are available for any device.
  
     function Get_Peer_Name (Socket : Socket_Type) return Sock_Addr_Type;
     --  Return the peer or remote socket address of a socket. Raise
--- 754,762 ----
     procedure Control_Socket
       (Socket  : Socket_Type;
        Request : in out Request_Type);
!    --  Obtain or set parameter values that control the socket. This control
!    --  differs from the socket options in that they are not specific to
!    --  sockets but are available for any device.
  
     function Get_Peer_Name (Socket : Socket_Type) return Sock_Addr_Type;
     --  Return the peer or remote socket address of a socket. Raise
*************** package GNAT.Sockets is
*** 780,814 ****
  
     function Get_Socket_Name (Socket : Socket_Type) return Sock_Addr_Type;
     --  Return the local or current socket address of a socket. Return
!    --  No_Sock_Addr on error (for instance, socket closed or not
!    --  locally bound).
  
     function Get_Socket_Option
       (Socket : Socket_Type;
        Level  : Level_Type := Socket_Level;
!       Name   : Option_Name)
!       return   Option_Type;
     --  Get the options associated with a socket. Raises Socket_Error
     --  on error.
  
     procedure Listen_Socket
       (Socket : Socket_Type;
        Length : Positive := 15);
!    --  To accept connections, a socket is first created with
!    --  Create_Socket, a willingness to accept incoming connections and
!    --  a queue Length for incoming connections are specified. Raise
!    --  Socket_Error on error.
  
     procedure Receive_Socket
       (Socket : Socket_Type;
        Item   : out Ada.Streams.Stream_Element_Array;
        Last   : out Ada.Streams.Stream_Element_Offset;
        Flags  : Request_Flag_Type := No_Request_Flag);
!    --  Receive message from Socket. Last is the index value such that
!    --  Item (Last) is the last character assigned. Note that Last is
!    --  set to Item'First - 1 when the socket has been closed by
!    --  peer. This is not an error and no exception is raised. Flags
!    --  allows to control the reception. Raise Socket_Error on error.
  
     procedure Receive_Socket
       (Socket : Socket_Type;
--- 764,796 ----
  
     function Get_Socket_Name (Socket : Socket_Type) return Sock_Addr_Type;
     --  Return the local or current socket address of a socket. Return
!    --  No_Sock_Addr on error (for instance, socket closed or not locally
!    --  bound).
  
     function Get_Socket_Option
       (Socket : Socket_Type;
        Level  : Level_Type := Socket_Level;
!       Name   : Option_Name) return Option_Type;
     --  Get the options associated with a socket. Raises Socket_Error
     --  on error.
  
     procedure Listen_Socket
       (Socket : Socket_Type;
        Length : Positive := 15);
!    --  To accept connections, a socket is first created with Create_Socket,
!    --  a willingness to accept incoming connections and a queue Length for
!    --  incoming connections are specified. Raise Socket_Error on error.
  
     procedure Receive_Socket
       (Socket : Socket_Type;
        Item   : out Ada.Streams.Stream_Element_Array;
        Last   : out Ada.Streams.Stream_Element_Offset;
        Flags  : Request_Flag_Type := No_Request_Flag);
!    --  Receive message from Socket. Last is the index value such that Item
!    --  (Last) is the last character assigned. Note that Last is set to
!    --  Item'First - 1 when the socket has been closed by peer. This is not an
!    --  error and no exception is raised. Flags allows to control the
!    --  reception. Raise Socket_Error on error.
  
     procedure Receive_Socket
       (Socket : Socket_Type;
*************** package GNAT.Sockets is
*** 816,826 ****
        Last   : out Ada.Streams.Stream_Element_Offset;
        From   : out Sock_Addr_Type;
        Flags  : Request_Flag_Type := No_Request_Flag);
!    --  Receive message from Socket. If Socket is not
!    --  connection-oriented, the source address From of the message is
!    --  filled in. Last is the index value such that Item (Last) is the
!    --  last character assigned. Flags allows to control the
!    --  reception. Raises Socket_Error on error.
  
     procedure Receive_Vector
       (Socket : Socket_Type;
--- 798,807 ----
        Last   : out Ada.Streams.Stream_Element_Offset;
        From   : out Sock_Addr_Type;
        Flags  : Request_Flag_Type := No_Request_Flag);
!    --  Receive message from Socket. If Socket is not connection-oriented, the
!    --  source address From of the message is filled in. Last is the index
!    --  value such that Item (Last) is the last character assigned. Flags
!    --  allows to control the reception. Raises Socket_Error on error.
  
     procedure Receive_Vector
       (Socket : Socket_Type;
*************** package GNAT.Sockets is
*** 830,842 ****
     --  elements Vector. Count is set to the count of received stream elements.
  
     function Resolve_Exception
!      (Occurrence : Ada.Exceptions.Exception_Occurrence)
!       return       Error_Type;
!    --  When Socket_Error or Host_Error are raised, the exception
!    --  message contains the error code between brackets and a string
!    --  describing the error code. Resolve_Error extracts the error
!    --  code from an exception message and translate it into an
!    --  enumeration value.
  
     procedure Send_Socket
       (Socket : Socket_Type;
--- 811,821 ----
     --  elements Vector. Count is set to the count of received stream elements.
  
     function Resolve_Exception
!      (Occurrence : Ada.Exceptions.Exception_Occurrence) return Error_Type;
!    --  When Socket_Error or Host_Error are raised, the exception message
!    --  contains the error code between brackets and a string describing the
!    --  error code. Resolve_Error extracts the error code from an exception
!    --  message and translate it into an enumeration value.
  
     procedure Send_Socket
       (Socket : Socket_Type;
*************** package GNAT.Sockets is
*** 845,853 ****
        Flags  : Request_Flag_Type := No_Request_Flag);
     --  Transmit a message to another socket. Note that Last is set to
     --  Item'First-1 when socket has been closed by peer. This is not
!    --  considered an error and no exception is raised. Flags allows to
!    --  control the transmission. Raises Socket_Error on any other
!    --  error condition.
  
     procedure Send_Socket
       (Socket : Socket_Type;
--- 824,831 ----
        Flags  : Request_Flag_Type := No_Request_Flag);
     --  Transmit a message to another socket. Note that Last is set to
     --  Item'First-1 when socket has been closed by peer. This is not
!    --  considered an error and no exception is raised. Flags allows to control
!    --  the transmission. Raises Socket_Error on any other error condition.
  
     procedure Send_Socket
       (Socket : Socket_Type;
*************** package GNAT.Sockets is
*** 855,863 ****
        Last   : out Ada.Streams.Stream_Element_Offset;
        To     : Sock_Addr_Type;
        Flags  : Request_Flag_Type := No_Request_Flag);
!    --  Transmit a message to another socket. The address is given by
!    --  To. Flags allows to control the transmission. Raises
!    --  Socket_Error on error.
  
     procedure Send_Vector
       (Socket : Socket_Type;
--- 833,840 ----
        Last   : out Ada.Streams.Stream_Element_Offset;
        To     : Sock_Addr_Type;
        Flags  : Request_Flag_Type := No_Request_Flag);
!    --  Transmit a message to another socket. The address is given by To. Flags
!    --  allows to control the transmission. Raises Socket_Error on error.
  
     procedure Send_Vector
       (Socket : Socket_Type;
*************** package GNAT.Sockets is
*** 870,920 ****
       (Socket : Socket_Type;
        Level  : Level_Type := Socket_Level;
        Option : Option_Type);
!    --  Manipulate socket options. Raises Socket_Error on error.
  
     procedure Shutdown_Socket
       (Socket : Socket_Type;
        How    : Shutmode_Type := Shut_Read_Write);
!    --  Shutdown a connected socket. If How is Shut_Read, further
!    --  receives will be disallowed. If How is Shut_Write, further
!    --  sends will be disallowed. If how is Shut_Read_Write, further
!    --  sends and receives will be disallowed.
  
     type Stream_Access is access all Ada.Streams.Root_Stream_Type'Class;
     --  Same interface as Ada.Streams.Stream_IO
  
     function Stream
!      (Socket : Socket_Type)
!       return   Stream_Access;
     --  Create a stream associated with a stream-based socket that is
     --  already connected.
  
     function Stream
       (Socket  : Socket_Type;
!       Send_To : Sock_Addr_Type)
!       return    Stream_Access;
!    --  Create a stream associated with a datagram-based socket that is
!    --  already bound. Send_To is the socket address to which messages are
!    --  being sent.
  
     function Get_Address
!      (Stream : Stream_Access)
!       return   Sock_Addr_Type;
!    --  Return the socket address from which the last message was
!    --  received.
  
     procedure Free is new Ada.Unchecked_Deallocation
       (Ada.Streams.Root_Stream_Type'Class, Stream_Access);
     --  Destroy a stream created by one of the Stream functions above,
!    --  releasing the corresponding resources. The user is responsible
!    --  for calling this subprogram when the stream is not needed anymore.
  
     type Socket_Set_Type is limited private;
!    --  This type allows to manipulate sets of sockets. It allows to
!    --  wait for events on multiple endpoints at one time. This is an
!    --  access type on a system dependent structure. To avoid memory
!    --  leaks it is highly recommended to clean the access value with
!    --  procedure Empty.
  
     procedure Clear (Item : in out Socket_Set_Type; Socket : Socket_Type);
     --  Remove Socket from Item
--- 847,891 ----
       (Socket : Socket_Type;
        Level  : Level_Type := Socket_Level;
        Option : Option_Type);
!    --  Manipulate socket options. Raises Socket_Error on error
  
     procedure Shutdown_Socket
       (Socket : Socket_Type;
        How    : Shutmode_Type := Shut_Read_Write);
!    --  Shutdown a connected socket. If How is Shut_Read, further receives will
!    --  be disallowed. If How is Shut_Write, further sends will be disallowed.
!    --  If how is Shut_Read_Write, further sends and receives will be
!    --  disallowed.
  
     type Stream_Access is access all Ada.Streams.Root_Stream_Type'Class;
     --  Same interface as Ada.Streams.Stream_IO
  
     function Stream
!      (Socket : Socket_Type) return Stream_Access;
     --  Create a stream associated with a stream-based socket that is
     --  already connected.
  
     function Stream
       (Socket  : Socket_Type;
!       Send_To : Sock_Addr_Type) return Stream_Access;
!    --  Create a stream associated with a datagram-based socket that is already
!    --  bound. Send_To is the socket address to which messages are being sent.
  
     function Get_Address
!      (Stream : Stream_Access) return Sock_Addr_Type;
!    --  Return the socket address from which the last message was received
  
     procedure Free is new Ada.Unchecked_Deallocation
       (Ada.Streams.Root_Stream_Type'Class, Stream_Access);
     --  Destroy a stream created by one of the Stream functions above,
!    --  releasing the corresponding resources. The user is responsible for
!    --  calling this subprogram when the stream is not needed anymore.
  
     type Socket_Set_Type is limited private;
!    --  This type allows to manipulate sets of sockets. It allows to wait for
!    --  events on multiple endpoints at one time. This is an access type on a
!    --  system dependent structure. To avoid memory leaks it is highly
!    --  recommended to clean the access value with procedure Empty.
  
     procedure Clear (Item : in out Socket_Set_Type; Socket : Socket_Type);
     --  Remove Socket from Item
*************** package GNAT.Sockets is
*** 930,975 ****
     --  No_Socket when the set is empty.
  
     function Is_Empty
!      (Item  : Socket_Set_Type)
!       return  Boolean;
!    --  Return True if Item is empty
  
     function Is_Set
       (Item   : Socket_Set_Type;
!       Socket : Socket_Type)
!       return   Boolean;
!    --  Return True if Socket is present in Item
  
!    procedure Set   (Item : in out Socket_Set_Type; Socket : Socket_Type);
     --  Insert Socket into Item
  
!    --  C select() waits for a number of file descriptors to change
!    --  status. Usually, three independent sets of descriptors are
!    --  watched (read, write and exception). A timeout gives an upper
!    --  bound on the amount of time elapsed before select returns.
!    --  This function blocks until an event occurs. On some platforms,
!    --  C select can block the full process.
     --
!    --  Check_Selector provides the very same behaviour. The only
!    --  difference is that it does not watch for exception events. Note
!    --  that on some platforms it is kept process blocking in purpose.
!    --  The timeout parameter allows the user to have the behaviour he
!    --  wants. Abort_Selector allows to abort safely a Check_Selector
!    --  that is blocked forever. A special file descriptor is opened by
!    --  Create_Selector and included in each call to
!    --  Check_Selector. Abort_Selector causes an event to occur on this
!    --  descriptor in order to unblock Check_Selector. The user must
!    --  call Close_Selector to discard this special file. A reason to
!    --  abort a select operation is typically to add a socket in one of
!    --  the socket sets when the timeout is set to forever.
  
     type Selector_Type is limited private;
     type Selector_Access is access all Selector_Type;
  
!    --  Selector_Duration is a subtype of Standard.Duration because the
!    --  full range of Standard.Duration cannot be represented in the
!    --  equivalent C structure. Moreover, negative values are not
!    --  allowed to avoid system incompatibilities.
  
     Immediate : constant := 0.0;
     Forever   : constant := Duration (Integer'Last) * 1.0;
--- 901,942 ----
     --  No_Socket when the set is empty.
  
     function Is_Empty
!      (Item : Socket_Set_Type) return Boolean;
!    --  Return True iff Item is empty
  
     function Is_Set
       (Item   : Socket_Set_Type;
!       Socket : Socket_Type) return Boolean;
!    --  Return True iff Socket is present in Item
  
!    procedure Set (Item : in out Socket_Set_Type; Socket : Socket_Type);
     --  Insert Socket into Item
  
!    --  C select() waits for a number of file descriptors to change status.
!    --  Usually, three independent sets of descriptors are watched (read, write
!    --  and exception). A timeout gives an upper bound on the amount of time
!    --  elapsed before select returns. This function blocks until an event
!    --  occurs. On some platforms, C select can block the full process.
     --
!    --  Check_Selector provides the very same behaviour. The only difference is
!    --  that it does not watch for exception events. Note that on some
!    --  platforms it is kept process blocking in purpose. The timeout parameter
!    --  allows the user to have the behaviour he wants. Abort_Selector allows
!    --  to abort safely a Check_Selector that is blocked forever. A special
!    --  file descriptor is opened by Create_Selector and included in each call
!    --  to Check_Selector. Abort_Selector causes an event to occur on this
!    --  descriptor in order to unblock Check_Selector. The user must call
!    --  Close_Selector to discard this special file. A reason to abort a select
!    --  operation is typically to add a socket in one of the socket sets when
!    --  the timeout is set to forever.
  
     type Selector_Type is limited private;
     type Selector_Access is access all Selector_Type;
  
!    --  Selector_Duration is a subtype of Standard.Duration because the full
!    --  range of Standard.Duration cannot be represented in the equivalent C
!    --  structure. Moreover, negative values are not allowed to avoid system
!    --  incompatibilities.
  
     Immediate : constant := 0.0;
     Forever   : constant := Duration (Integer'Last) * 1.0;
*************** package GNAT.Sockets is
*** 990,1007 ****
        W_Socket_Set : in out Socket_Set_Type;
        Status       : out Selector_Status;
        Timeout      : Selector_Duration := Forever);
!    --  Return when one Socket in R_Socket_Set has some data to be read
!    --  or if one Socket in W_Socket_Set is ready to receive some
!    --  data. In these cases Status is set to Completed and sockets
!    --  that are ready are set in R_Socket_Set or W_Socket_Set. Status
!    --  is set to Expired if no socket was ready after a Timeout
!    --  expiration. Status is set to Aborted if an abort signal has been
!    --  received while checking socket status. As this procedure
!    --  returns when Timeout occurs, it is a design choice to keep this
!    --  procedure process blocking. Note that a Timeout of 0.0 returns
!    --  immediately. Also note that two different objects must be passed
!    --  as R_Socket_Set and W_Socket_Set (even if they contain the same
!    --  set of Sockets), or some event will be lost.
  
     procedure Check_Selector
       (Selector     : in out Selector_Type;
--- 957,973 ----
        W_Socket_Set : in out Socket_Set_Type;
        Status       : out Selector_Status;
        Timeout      : Selector_Duration := Forever);
!    --  Return when one Socket in R_Socket_Set has some data to be read or if
!    --  one Socket in W_Socket_Set is ready to receive some data. In these
!    --  cases Status is set to Completed and sockets that are ready are set in
!    --  R_Socket_Set or W_Socket_Set. Status is set to Expired if no socket was
!    --  ready after a Timeout expiration. Status is set to Aborted if an abort
!    --  signal has been received while checking socket status. As this
!    --  procedure returns when Timeout occurs, it is a design choice to keep
!    --  this procedure process blocking. Note that a Timeout of 0.0 returns
!    --  immediately. Also note that two different objects must be passed as
!    --  R_Socket_Set and W_Socket_Set (even if they contain the same set of
!    --  Sockets), or some event will be lost.
  
     procedure Check_Selector
       (Selector     : in out Selector_Type;
*************** package GNAT.Sockets is
*** 1010,1022 ****
        E_Socket_Set : in out Socket_Set_Type;
        Status       : out Selector_Status;
        Timeout      : Selector_Duration := Forever);
!    --  This refined version of Check_Selector allows to watch for
!    --  exception events (that is notifications of out-of-band
!    --  transmission and reception). As above, all of R_Socket_Set,
!    --  W_Socket_Set and E_Socket_Set must be different objects.
  
     procedure Abort_Selector (Selector : Selector_Type);
!    --  Send an abort signal to the selector.
  
  private
  
--- 976,988 ----
        E_Socket_Set : in out Socket_Set_Type;
        Status       : out Selector_Status;
        Timeout      : Selector_Duration := Forever);
!    --  This refined version of Check_Selector allows to watch for exception
!    --  events (that is notifications of out-of-band transmission and
!    --  reception). As above, all of R_Socket_Set, W_Socket_Set and
!    --  E_Socket_Set must be different objects.
  
     procedure Abort_Selector (Selector : Selector_Type);
!    --  Send an abort signal to the selector
  
  private
  
*************** private
*** 1030,1037 ****
  
     pragma Volatile (Selector_Type);
  
!    --  The two signalling sockets are used to abort a select
!    --  operation.
  
     subtype Socket_Set_Access is System.Address;
     No_Socket_Set : constant Socket_Set_Access := System.Null_Address;
--- 996,1002 ----
  
     pragma Volatile (Selector_Type);
  
!    --  The two signalling sockets are used to abort a select operation
  
     subtype Socket_Set_Access is System.Address;
     No_Socket_Set : constant Socket_Set_Access := System.Null_Address;
diff -Nrcpad gcc-3.4.3/gcc/ada/g-socthi-mingw.adb gcc-4.0.0/gcc/ada/g-socthi-mingw.adb
*** gcc-3.4.3/gcc/ada/g-socthi-mingw.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/g-socthi-mingw.adb	Wed Oct 27 12:27:15 2004
***************
*** 0 ****
--- 1,587 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                    G N A T . S O C K E T S . T H I N                     --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --              Copyright (C) 2001-2004 Ada Core Technologies, Inc.         --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package provides a target dependent thin interface to the sockets
+ --  layer for use by the GNAT.Sockets package (g-socket.ads). This package
+ --  should not be directly with'ed by an applications program.
+ 
+ --  This version is for NT.
+ 
+ with GNAT.Sockets.Constants; use GNAT.Sockets.Constants;
+ with Interfaces.C.Strings;   use Interfaces.C.Strings;
+ 
+ with System; use System;
+ 
+ package body GNAT.Sockets.Thin is
+ 
+    use type C.unsigned;
+ 
+    WSAData_Dummy : array (1 .. 512) of C.int;
+ 
+    WS_Version  : constant := 16#0101#;
+    Initialized : Boolean := False;
+ 
+    SYSNOTREADY          : constant := 10091;
+    VERNOTSUPPORTED      : constant := 10092;
+    NOTINITIALISED       : constant := 10093;
+    EDISCON              : constant := 10101;
+ 
+    function Standard_Connect
+      (S       : C.int;
+       Name    : System.Address;
+       Namelen : C.int)
+       return    C.int;
+    pragma Import (Stdcall, Standard_Connect, "connect");
+ 
+    function Standard_Select
+      (Nfds      : C.int;
+       Readfds   : Fd_Set_Access;
+       Writefds  : Fd_Set_Access;
+       Exceptfds : Fd_Set_Access;
+       Timeout   : Timeval_Access)
+       return      C.int;
+    pragma Import (Stdcall, Standard_Select, "select");
+ 
+    type Error_Type is
+      (N_EINTR,
+       N_EBADF,
+       N_EACCES,
+       N_EFAULT,
+       N_EINVAL,
+       N_EMFILE,
+       N_EWOULDBLOCK,
+       N_EINPROGRESS,
+       N_EALREADY,
+       N_ENOTSOCK,
+       N_EDESTADDRREQ,
+       N_EMSGSIZE,
+       N_EPROTOTYPE,
+       N_ENOPROTOOPT,
+       N_EPROTONOSUPPORT,
+       N_ESOCKTNOSUPPORT,
+       N_EOPNOTSUPP,
+       N_EPFNOSUPPORT,
+       N_EAFNOSUPPORT,
+       N_EADDRINUSE,
+       N_EADDRNOTAVAIL,
+       N_ENETDOWN,
+       N_ENETUNREACH,
+       N_ENETRESET,
+       N_ECONNABORTED,
+       N_ECONNRESET,
+       N_ENOBUFS,
+       N_EISCONN,
+       N_ENOTCONN,
+       N_ESHUTDOWN,
+       N_ETOOMANYREFS,
+       N_ETIMEDOUT,
+       N_ECONNREFUSED,
+       N_ELOOP,
+       N_ENAMETOOLONG,
+       N_EHOSTDOWN,
+       N_EHOSTUNREACH,
+       N_SYSNOTREADY,
+       N_VERNOTSUPPORTED,
+       N_NOTINITIALISED,
+       N_EDISCON,
+       N_HOST_NOT_FOUND,
+       N_TRY_AGAIN,
+       N_NO_RECOVERY,
+       N_NO_DATA,
+       N_OTHERS);
+ 
+    Error_Messages : constant array (Error_Type) of chars_ptr :=
+      (N_EINTR =>
+         New_String ("Interrupted system call"),
+       N_EBADF =>
+         New_String ("Bad file number"),
+       N_EACCES =>
+         New_String ("Permission denied"),
+       N_EFAULT =>
+         New_String ("Bad address"),
+       N_EINVAL =>
+         New_String ("Invalid argument"),
+       N_EMFILE =>
+         New_String ("Too many open files"),
+       N_EWOULDBLOCK =>
+         New_String ("Operation would block"),
+       N_EINPROGRESS =>
+         New_String ("Operation now in progress. This error is "
+                     & "returned if any Windows Sockets API "
+                     & "function is called while a blocking "
+                     & "function is in progress"),
+       N_EALREADY =>
+         New_String ("Operation already in progress"),
+       N_ENOTSOCK =>
+         New_String ("Socket operation on nonsocket"),
+       N_EDESTADDRREQ =>
+         New_String ("Destination address required"),
+       N_EMSGSIZE =>
+         New_String ("Message too long"),
+       N_EPROTOTYPE =>
+         New_String ("Protocol wrong type for socket"),
+       N_ENOPROTOOPT =>
+         New_String ("Protocol not available"),
+       N_EPROTONOSUPPORT =>
+         New_String ("Protocol not supported"),
+       N_ESOCKTNOSUPPORT =>
+         New_String ("Socket type not supported"),
+       N_EOPNOTSUPP =>
+         New_String ("Operation not supported on socket"),
+       N_EPFNOSUPPORT =>
+         New_String ("Protocol family not supported"),
+       N_EAFNOSUPPORT =>
+         New_String ("Address family not supported by protocol family"),
+       N_EADDRINUSE =>
+         New_String ("Address already in use"),
+       N_EADDRNOTAVAIL =>
+         New_String ("Cannot assign requested address"),
+       N_ENETDOWN =>
+         New_String ("Network is down. This error may be "
+                     & "reported at any time if the Windows "
+                     & "Sockets implementation detects an "
+                     & "underlying failure"),
+       N_ENETUNREACH =>
+         New_String ("Network is unreachable"),
+       N_ENETRESET =>
+         New_String ("Network dropped connection on reset"),
+       N_ECONNABORTED =>
+         New_String ("Software caused connection abort"),
+       N_ECONNRESET =>
+         New_String ("Connection reset by peer"),
+       N_ENOBUFS =>
+         New_String ("No buffer space available"),
+       N_EISCONN  =>
+         New_String ("Socket is already connected"),
+       N_ENOTCONN =>
+         New_String ("Socket is not connected"),
+       N_ESHUTDOWN =>
+         New_String ("Cannot send after socket shutdown"),
+       N_ETOOMANYREFS =>
+         New_String ("Too many references: cannot splice"),
+       N_ETIMEDOUT =>
+         New_String ("Connection timed out"),
+       N_ECONNREFUSED =>
+         New_String ("Connection refused"),
+       N_ELOOP =>
+         New_String ("Too many levels of symbolic links"),
+       N_ENAMETOOLONG =>
+         New_String ("File name too long"),
+       N_EHOSTDOWN =>
+         New_String ("Host is down"),
+       N_EHOSTUNREACH =>
+         New_String ("No route to host"),
+       N_SYSNOTREADY =>
+         New_String ("Returned by WSAStartup(), indicating that "
+                     & "the network subsystem is unusable"),
+       N_VERNOTSUPPORTED =>
+         New_String ("Returned by WSAStartup(), indicating that "
+                     & "the Windows Sockets DLL cannot support "
+                     & "this application"),
+       N_NOTINITIALISED =>
+         New_String ("Winsock not initialized. This message is "
+                     & "returned by any function except WSAStartup(), "
+                     & "indicating that a successful WSAStartup() has "
+                     & "not yet been performed"),
+       N_EDISCON =>
+         New_String ("Disconnect"),
+       N_HOST_NOT_FOUND =>
+         New_String ("Host not found. This message indicates "
+                     & "that the key (name, address, and so on) was not found"),
+       N_TRY_AGAIN =>
+         New_String ("Nonauthoritative host not found. This error may "
+                     & "suggest that the name service itself is not "
+                     & "functioning"),
+       N_NO_RECOVERY =>
+         New_String ("Nonrecoverable error. This error may suggest that the "
+                     & "name service itself is not functioning"),
+       N_NO_DATA =>
+         New_String ("Valid name, no data record of requested type. "
+                     & "This error indicates that the key (name, address, "
+                     & "and so on) was not found."),
+       N_OTHERS =>
+         New_String ("Unknown system error"));
+ 
+    ---------------
+    -- C_Connect --
+    ---------------
+ 
+    function C_Connect
+      (S       : C.int;
+       Name    : System.Address;
+       Namelen : C.int)
+       return    C.int
+    is
+       Res : C.int;
+ 
+    begin
+       Res := Standard_Connect (S, Name, Namelen);
+ 
+       if Res = -1 then
+          if Socket_Errno = EWOULDBLOCK then
+             Set_Socket_Errno (EINPROGRESS);
+          end if;
+       end if;
+ 
+       return Res;
+    end C_Connect;
+ 
+    -------------
+    -- C_Readv --
+    -------------
+ 
+    function C_Readv
+      (Socket : C.int;
+       Iov    : System.Address;
+       Iovcnt : C.int)
+       return  C.int
+    is
+       Res : C.int;
+       Count : C.int := 0;
+ 
+       Iovec : array (0 .. Iovcnt - 1) of Vector_Element;
+       for Iovec'Address use Iov;
+       pragma Import (Ada, Iovec);
+ 
+    begin
+       for J in Iovec'Range loop
+          Res := C_Recv
+            (Socket,
+             Iovec (J).Base.all'Address,
+             C.int (Iovec (J).Length),
+             0);
+ 
+          if Res < 0 then
+             return Res;
+          else
+             Count := Count + Res;
+          end if;
+       end loop;
+       return Count;
+    end C_Readv;
+ 
+    --------------
+    -- C_Select --
+    --------------
+ 
+    function C_Select
+      (Nfds      : C.int;
+       Readfds   : Fd_Set_Access;
+       Writefds  : Fd_Set_Access;
+       Exceptfds : Fd_Set_Access;
+       Timeout   : Timeval_Access)
+       return      C.int
+    is
+       pragma Warnings (Off, Exceptfds);
+ 
+       RFS  : constant Fd_Set_Access := Readfds;
+       WFS  : constant Fd_Set_Access := Writefds;
+       WFSC : Fd_Set_Access := No_Fd_Set;
+       EFS  : Fd_Set_Access := Exceptfds;
+       Res  : C.int;
+       S    : aliased C.int;
+       Last : aliased C.int;
+ 
+    begin
+       --  Asynchronous connection failures are notified in the
+       --  exception fd set instead of the write fd set. To ensure
+       --  POSIX compatitibility, copy write fd set into exception fd
+       --  set. Once select() returns, check any socket present in the
+       --  exception fd set and peek at incoming out-of-band data. If
+       --  the test is not successful, and the socket is present in
+       --  the initial write fd set, then move the socket from the
+       --  exception fd set to the write fd set.
+ 
+       if WFS /= No_Fd_Set then
+          --  Add any socket present in write fd set into exception fd set
+ 
+          if EFS = No_Fd_Set then
+             EFS := New_Socket_Set (WFS);
+ 
+          else
+             WFSC := New_Socket_Set (WFS);
+ 
+             Last := Nfds - 1;
+             loop
+                Get_Socket_From_Set
+                  (WFSC, S'Unchecked_Access, Last'Unchecked_Access);
+                exit when S = -1;
+                Insert_Socket_In_Set (EFS, S);
+             end loop;
+ 
+             Free_Socket_Set (WFSC);
+          end if;
+ 
+          --  Keep a copy of write fd set
+ 
+          WFSC := New_Socket_Set (WFS);
+       end if;
+ 
+       Res := Standard_Select (Nfds, RFS, WFS, EFS, Timeout);
+ 
+       if EFS /= No_Fd_Set then
+          declare
+             EFSC    : constant Fd_Set_Access := New_Socket_Set (EFS);
+             Flag    : constant C.int := MSG_PEEK + MSG_OOB;
+             Buffer  : Character;
+             Length  : C.int;
+             Fromlen : aliased C.int;
+ 
+          begin
+             Last := Nfds - 1;
+             loop
+                Get_Socket_From_Set
+                  (EFSC, S'Unchecked_Access, Last'Unchecked_Access);
+ 
+                --  No more sockets in EFSC
+ 
+                exit when S = -1;
+ 
+                --  Check out-of-band data
+ 
+                Length := C_Recvfrom
+                  (S, Buffer'Address, 1, Flag,
+                   null, Fromlen'Unchecked_Access);
+ 
+                --  If the signal is not an out-of-band data, then it
+                --  is a connection failure notification.
+ 
+                if Length = -1 then
+                   Remove_Socket_From_Set (EFS, S);
+ 
+                   --  If S is present in the initial write fd set,
+                   --  move it from exception fd set back to write fd
+                   --  set. Otherwise, ignore this event since the user
+                   --  is not watching for it.
+ 
+                   if WFSC /= No_Fd_Set
+                     and then (Is_Socket_In_Set (WFSC, S) /= 0)
+                   then
+                      Insert_Socket_In_Set (WFS, S);
+                   end if;
+                end if;
+             end loop;
+ 
+             Free_Socket_Set (EFSC);
+          end;
+ 
+          if Exceptfds = No_Fd_Set then
+             Free_Socket_Set (EFS);
+          end if;
+       end if;
+ 
+       --  Free any copy of write fd set
+ 
+       if WFSC /= No_Fd_Set then
+          Free_Socket_Set (WFSC);
+       end if;
+ 
+       return Res;
+    end C_Select;
+ 
+    --------------
+    -- C_Writev --
+    --------------
+ 
+    function C_Writev
+      (Socket : C.int;
+       Iov    : System.Address;
+       Iovcnt : C.int)
+       return   C.int
+    is
+       Res : C.int;
+       Count : C.int := 0;
+ 
+       Iovec : array (0 .. Iovcnt - 1) of Vector_Element;
+       for Iovec'Address use Iov;
+       pragma Import (Ada, Iovec);
+ 
+    begin
+       for J in Iovec'Range loop
+          Res := C_Send
+            (Socket,
+             Iovec (J).Base.all'Address,
+             C.int (Iovec (J).Length),
+             0);
+ 
+          if Res < 0 then
+             return Res;
+          else
+             Count := Count + Res;
+          end if;
+       end loop;
+       return Count;
+    end C_Writev;
+ 
+    --------------
+    -- Finalize --
+    --------------
+ 
+    procedure Finalize is
+    begin
+       if Initialized then
+          WSACleanup;
+          Initialized := False;
+       end if;
+    end Finalize;
+ 
+    ----------------
+    -- Initialize --
+    ----------------
+ 
+    procedure Initialize (Process_Blocking_IO : Boolean := False) is
+       pragma Unreferenced (Process_Blocking_IO);
+ 
+       Return_Value : Interfaces.C.int;
+ 
+    begin
+       if not Initialized then
+          Return_Value := WSAStartup (WS_Version, WSAData_Dummy'Address);
+          pragma Assert (Interfaces.C."=" (Return_Value, 0));
+          Initialized := True;
+       end if;
+    end Initialize;
+ 
+    -----------------
+    -- Set_Address --
+    -----------------
+ 
+    procedure Set_Address
+      (Sin     : Sockaddr_In_Access;
+       Address : In_Addr)
+    is
+    begin
+       Sin.Sin_Addr := Address;
+    end Set_Address;
+ 
+    ----------------
+    -- Set_Family --
+    ----------------
+ 
+    procedure Set_Family
+      (Sin    : Sockaddr_In_Access;
+       Family : C.int)
+    is
+    begin
+       Sin.Sin_Family := C.unsigned_short (Family);
+    end Set_Family;
+ 
+    ----------------
+    -- Set_Length --
+    ----------------
+ 
+    procedure Set_Length
+      (Sin : Sockaddr_In_Access;
+       Len : C.int)
+    is
+       pragma Unreferenced (Sin);
+       pragma Unreferenced (Len);
+ 
+    begin
+       null;
+    end Set_Length;
+ 
+    --------------
+    -- Set_Port --
+    --------------
+ 
+    procedure Set_Port
+      (Sin  : Sockaddr_In_Access;
+       Port : C.unsigned_short)
+    is
+    begin
+       Sin.Sin_Port := Port;
+    end Set_Port;
+ 
+    --------------------------
+    -- Socket_Error_Message --
+    --------------------------
+ 
+    function Socket_Error_Message
+      (Errno : Integer)
+      return  C.Strings.chars_ptr
+    is
+       use GNAT.Sockets.Constants;
+ 
+    begin
+       case Errno is
+          when EINTR =>           return Error_Messages (N_EINTR);
+          when EBADF =>           return Error_Messages (N_EBADF);
+          when EACCES =>          return Error_Messages (N_EACCES);
+          when EFAULT =>          return Error_Messages (N_EFAULT);
+          when EINVAL =>          return Error_Messages (N_EINVAL);
+          when EMFILE =>          return Error_Messages (N_EMFILE);
+          when EWOULDBLOCK =>     return Error_Messages (N_EWOULDBLOCK);
+          when EINPROGRESS =>     return Error_Messages (N_EINPROGRESS);
+          when EALREADY =>        return Error_Messages (N_EALREADY);
+          when ENOTSOCK =>        return Error_Messages (N_ENOTSOCK);
+          when EDESTADDRREQ =>    return Error_Messages (N_EDESTADDRREQ);
+          when EMSGSIZE =>        return Error_Messages (N_EMSGSIZE);
+          when EPROTOTYPE =>      return Error_Messages (N_EPROTOTYPE);
+          when ENOPROTOOPT =>     return Error_Messages (N_ENOPROTOOPT);
+          when EPROTONOSUPPORT => return Error_Messages (N_EPROTONOSUPPORT);
+          when ESOCKTNOSUPPORT => return Error_Messages (N_ESOCKTNOSUPPORT);
+          when EOPNOTSUPP =>      return Error_Messages (N_EOPNOTSUPP);
+          when EPFNOSUPPORT =>    return Error_Messages (N_EPFNOSUPPORT);
+          when EAFNOSUPPORT =>    return Error_Messages (N_EAFNOSUPPORT);
+          when EADDRINUSE =>      return Error_Messages (N_EADDRINUSE);
+          when EADDRNOTAVAIL =>   return Error_Messages (N_EADDRNOTAVAIL);
+          when ENETDOWN =>        return Error_Messages (N_ENETDOWN);
+          when ENETUNREACH =>     return Error_Messages (N_ENETUNREACH);
+          when ENETRESET =>       return Error_Messages (N_ENETRESET);
+          when ECONNABORTED =>    return Error_Messages (N_ECONNABORTED);
+          when ECONNRESET =>      return Error_Messages (N_ECONNRESET);
+          when ENOBUFS =>         return Error_Messages (N_ENOBUFS);
+          when EISCONN =>         return Error_Messages (N_EISCONN);
+          when ENOTCONN =>        return Error_Messages (N_ENOTCONN);
+          when ESHUTDOWN =>       return Error_Messages (N_ESHUTDOWN);
+          when ETOOMANYREFS =>    return Error_Messages (N_ETOOMANYREFS);
+          when ETIMEDOUT =>       return Error_Messages (N_ETIMEDOUT);
+          when ECONNREFUSED =>    return Error_Messages (N_ECONNREFUSED);
+          when ELOOP =>           return Error_Messages (N_ELOOP);
+          when ENAMETOOLONG =>    return Error_Messages (N_ENAMETOOLONG);
+          when EHOSTDOWN =>       return Error_Messages (N_EHOSTDOWN);
+          when EHOSTUNREACH =>    return Error_Messages (N_EHOSTUNREACH);
+          when SYSNOTREADY =>     return Error_Messages (N_SYSNOTREADY);
+          when VERNOTSUPPORTED => return Error_Messages (N_VERNOTSUPPORTED);
+          when NOTINITIALISED =>  return Error_Messages (N_NOTINITIALISED);
+          when EDISCON =>         return Error_Messages (N_EDISCON);
+          when HOST_NOT_FOUND =>  return Error_Messages (N_HOST_NOT_FOUND);
+          when TRY_AGAIN =>       return Error_Messages (N_TRY_AGAIN);
+          when NO_RECOVERY =>     return Error_Messages (N_NO_RECOVERY);
+          when NO_DATA =>         return Error_Messages (N_NO_DATA);
+          when others =>          return Error_Messages (N_OTHERS);
+       end case;
+    end Socket_Error_Message;
+ 
+ end GNAT.Sockets.Thin;
diff -Nrcpad gcc-3.4.3/gcc/ada/g-socthi-mingw.ads gcc-4.0.0/gcc/ada/g-socthi-mingw.ads
*** gcc-3.4.3/gcc/ada/g-socthi-mingw.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/g-socthi-mingw.ads	Thu Nov 25 16:14:01 2004
***************
*** 0 ****
--- 1,422 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                    G N A T . S O C K E T S . T H I N                     --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --              Copyright (C) 2001-2004 Ada Core Technologies, Inc.         --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package provides a target dependent thin interface to the sockets
+ --  layer for use by the GNAT.Sockets package (g-socket.ads). This package
+ --  should not be directly with'ed by an applications program.
+ 
+ --  This version is for NT
+ 
+ with Interfaces.C.Pointers;
+ with Interfaces.C.Strings;
+ 
+ with GNAT.Sockets.Constants;
+ 
+ with System;
+ 
+ package GNAT.Sockets.Thin is
+ 
+    package C renames Interfaces.C;
+ 
+    use type C.int;
+    --  So that we can declare the Failure constant below.
+ 
+    Success : constant C.int :=  0;
+    Failure : constant C.int := -1;
+ 
+    function Socket_Errno return Integer;
+    --  Returns last socket error number.
+ 
+    procedure Set_Socket_Errno (Errno : Integer);
+    --  Set last socket error number.
+ 
+    function Socket_Error_Message
+      (Errno : Integer)
+       return  C.Strings.chars_ptr;
+    --  Returns the error message string for the error number Errno. If
+    --  Errno is not known it returns "Unknown system error".
+ 
+    subtype Fd_Set_Access is System.Address;
+    No_Fd_Set : constant Fd_Set_Access := System.Null_Address;
+ 
+    type Timeval_Unit is new C.long;
+    pragma Convention (C, Timeval_Unit);
+ 
+    type Timeval is record
+       Tv_Sec  : Timeval_Unit;
+       Tv_Usec : Timeval_Unit;
+    end record;
+    pragma Convention (C, Timeval);
+ 
+    type Timeval_Access is access all Timeval;
+    pragma Convention (C, Timeval_Access);
+ 
+    Immediat : constant Timeval := (0, 0);
+ 
+    type Int_Access is access all C.int;
+    pragma Convention (C, Int_Access);
+    --  Access to C integers
+ 
+    type Chars_Ptr_Array is array (C.size_t range <>) of
+      aliased C.Strings.chars_ptr;
+ 
+    package Chars_Ptr_Pointers is
+       new C.Pointers (C.size_t, C.Strings.chars_ptr, Chars_Ptr_Array,
+                     C.Strings.Null_Ptr);
+    --  Arrays of C (char *)
+ 
+    type In_Addr is record
+       S_B1, S_B2, S_B3, S_B4 : C.unsigned_char;
+    end record;
+    pragma Convention (C, In_Addr);
+    --  Internet address
+ 
+    type In_Addr_Access is access all In_Addr;
+    pragma Convention (C, In_Addr_Access);
+    --  Access to internet address
+ 
+    Inaddr_Any : aliased constant In_Addr := (others => 0);
+    --  Any internet address (all the interfaces)
+ 
+    type In_Addr_Access_Array is array (C.size_t range <>)
+      of aliased In_Addr_Access;
+    pragma Convention (C, In_Addr_Access_Array);
+    package In_Addr_Access_Pointers is
+      new C.Pointers (C.size_t, In_Addr_Access, In_Addr_Access_Array, null);
+    --  Array of internet addresses
+ 
+    type Sockaddr is record
+       Sa_Family : C.unsigned_short;
+       Sa_Data   : C.char_array (1 .. 14);
+    end record;
+    pragma Convention (C, Sockaddr);
+    --  Socket address
+ 
+    type Sockaddr_Access is access all Sockaddr;
+    pragma Convention (C, Sockaddr_Access);
+    --  Access to socket address
+ 
+    type Sockaddr_In is record
+       Sin_Family : C.unsigned_short      := Constants.AF_INET;
+       Sin_Port   : C.unsigned_short      := 0;
+       Sin_Addr   : In_Addr               := Inaddr_Any;
+       Sin_Zero   : C.char_array (1 .. 8) := (others => C.char'Val (0));
+    end record;
+    pragma Convention (C, Sockaddr_In);
+    --  Internet socket address
+ 
+    type Sockaddr_In_Access is access all Sockaddr_In;
+    pragma Convention (C, Sockaddr_In_Access);
+    --  Access to internet socket address
+ 
+    procedure Set_Length
+      (Sin : Sockaddr_In_Access;
+       Len : C.int);
+    pragma Inline (Set_Length);
+    --  Set Sin.Sin_Length to Len.
+    --  On this platform, nothing is done as there is no such field.
+ 
+    procedure Set_Family
+      (Sin    : Sockaddr_In_Access;
+       Family : C.int);
+    pragma Inline (Set_Family);
+    --  Set Sin.Sin_Family to Family
+ 
+    procedure Set_Port
+      (Sin  : Sockaddr_In_Access;
+       Port : C.unsigned_short);
+    pragma Inline (Set_Port);
+    --  Set Sin.Sin_Port to Port
+ 
+    procedure Set_Address
+      (Sin     : Sockaddr_In_Access;
+       Address : In_Addr);
+    pragma Inline (Set_Address);
+    --  Set Sin.Sin_Addr to Address
+ 
+    type Hostent is record
+       H_Name      : C.Strings.chars_ptr;
+       H_Aliases   : Chars_Ptr_Pointers.Pointer;
+       H_Addrtype  : C.short;
+       H_Length    : C.short;
+       H_Addr_List : In_Addr_Access_Pointers.Pointer;
+    end record;
+    pragma Convention (C, Hostent);
+    --  Host entry
+ 
+    type Hostent_Access is access all Hostent;
+    pragma Convention (C, Hostent_Access);
+    --  Access to host entry
+ 
+    type Servent is record
+       S_Name    : C.Strings.chars_ptr;
+       S_Aliases : Chars_Ptr_Pointers.Pointer;
+       S_Port    : C.int;
+       S_Proto   : C.Strings.chars_ptr;
+    end record;
+    pragma Convention (C, Servent);
+    --  Service entry
+ 
+    type Servent_Access is access all Servent;
+    pragma Convention (C, Servent_Access);
+    --  Access to service entry
+ 
+    type Two_Int is array (0 .. 1) of C.int;
+    pragma Convention (C, Two_Int);
+    --  Used with pipe()
+ 
+    function C_Accept
+      (S       : C.int;
+       Addr    : System.Address;
+       Addrlen : access C.int) return C.int;
+ 
+    function C_Bind
+      (S       : C.int;
+       Name    : System.Address;
+       Namelen : C.int) return C.int;
+ 
+    function C_Close
+      (Fd : C.int) return C.int;
+ 
+    function C_Connect
+      (S       : C.int;
+       Name    : System.Address;
+       Namelen : C.int) return C.int;
+ 
+    function C_Gethostbyaddr
+      (Addr     : System.Address;
+       Length   : C.int;
+       Typ      : C.int) return Hostent_Access;
+ 
+    function C_Gethostbyname
+      (Name : C.char_array) return Hostent_Access;
+ 
+    function C_Gethostname
+      (Name    : System.Address;
+       Namelen : C.int) return C.int;
+ 
+    function C_Getpeername
+      (S       : C.int;
+       Name    : System.Address;
+       Namelen : access C.int) return C.int;
+ 
+    function C_Getservbyname
+      (Name  : C.char_array;
+       Proto : C.char_array) return Servent_Access;
+ 
+    function C_Getservbyport
+      (Port  : C.int;
+       Proto : C.char_array) return Servent_Access;
+ 
+    function C_Getsockname
+      (S       : C.int;
+       Name    : System.Address;
+       Namelen : access C.int) return C.int;
+ 
+    function C_Getsockopt
+      (S       : C.int;
+       Level   : C.int;
+       Optname : C.int;
+       Optval  : System.Address;
+       Optlen  : access C.int) return C.int;
+ 
+    function C_Inet_Addr
+      (Cp : C.Strings.chars_ptr) return C.int;
+ 
+    function C_Ioctl
+      (S    : C.int;
+       Req  : C.int;
+       Arg  : Int_Access) return C.int;
+ 
+    function C_Listen
+      (S       : C.int;
+       Backlog : C.int) return C.int;
+ 
+    function C_Readv
+      (Socket : C.int;
+       Iov    : System.Address;
+       Iovcnt : C.int) return C.int;
+ 
+    function C_Recv
+      (S     : C.int;
+       Buf   : System.Address;
+       Len   : C.int;
+       Flags : C.int) return C.int;
+ 
+    function C_Recvfrom
+      (S       : C.int;
+       Buf     : System.Address;
+       Len     : C.int;
+       Flags   : C.int;
+       From    : Sockaddr_In_Access;
+       Fromlen : access C.int) return C.int;
+ 
+    function C_Select
+      (Nfds      : C.int;
+       Readfds   : Fd_Set_Access;
+       Writefds  : Fd_Set_Access;
+       Exceptfds : Fd_Set_Access;
+       Timeout   : Timeval_Access) return C.int;
+ 
+    function C_Send
+      (S     : C.int;
+       Buf   : System.Address;
+       Len   : C.int;
+       Flags : C.int) return C.int;
+ 
+    function C_Sendto
+      (S     : C.int;
+       Msg   : System.Address;
+       Len   : C.int;
+       Flags : C.int;
+       To    : Sockaddr_In_Access;
+       Tolen : C.int) return C.int;
+ 
+    function C_Setsockopt
+      (S       : C.int;
+       Level   : C.int;
+       Optname : C.int;
+       Optval  : System.Address;
+       Optlen  : C.int) return C.int;
+ 
+    function C_Shutdown
+      (S    : C.int;
+       How  : C.int) return C.int;
+ 
+    function C_Socket
+      (Domain   : C.int;
+       Typ      : C.int;
+       Protocol : C.int) return C.int;
+ 
+    function C_Strerror
+      (Errnum : C.int) return C.Strings.chars_ptr;
+ 
+    function C_System
+      (Command : System.Address) return C.int;
+ 
+    function C_Writev
+      (Socket : C.int;
+       Iov    : System.Address;
+       Iovcnt : C.int) return C.int;
+ 
+    function WSAStartup
+      (WS_Version     : Interfaces.C.int;
+       WSADataAddress : System.Address) return Interfaces.C.int;
+ 
+    procedure Free_Socket_Set
+      (Set : Fd_Set_Access);
+    --  Free system-dependent socket set.
+ 
+    procedure Get_Socket_From_Set
+      (Set    : Fd_Set_Access;
+       Socket : Int_Access;
+       Last   : Int_Access);
+    --  Get last socket in Socket and remove it from the socket
+    --  set. The parameter Last is a maximum value of the largest
+    --  socket. This hint is used to avoid scanning very large socket
+    --  sets. After a call to Get_Socket_From_Set, Last is set back to
+    --  the real largest socket in the socket set.
+ 
+    procedure Insert_Socket_In_Set
+      (Set    : Fd_Set_Access;
+       Socket : C.int);
+    --  Insert socket in the socket set
+ 
+    function  Is_Socket_In_Set
+      (Set    : Fd_Set_Access;
+       Socket : C.int) return C.int;
+    --  Check whether Socket is in the socket set, return a non-zero
+    --  value if it is, zero if it is not.
+ 
+    procedure Last_Socket_In_Set
+      (Set  : Fd_Set_Access;
+       Last : Int_Access);
+    --  Find the largest socket in the socket set. This is needed for
+    --  select(). When Last_Socket_In_Set is called, parameter Last is
+    --  a maximum value of the largest socket. This hint is used to
+    --  avoid scanning very large socket sets. After the call, Last is
+    --  set back to the real largest socket in the socket set.
+ 
+    function  New_Socket_Set
+      (Set : Fd_Set_Access) return Fd_Set_Access;
+    --  Allocate a new socket set which is a system-dependent structure
+    --  and initialize by copying Set if it is non-null, by making it
+    --  empty otherwise.
+ 
+    procedure Remove_Socket_From_Set
+      (Set    : Fd_Set_Access;
+       Socket : C.int);
+    --  Remove socket from the socket set
+ 
+    procedure WSACleanup;
+ 
+    procedure Finalize;
+    procedure Initialize (Process_Blocking_IO : Boolean := False);
+ 
+ private
+    pragma Import (Stdcall, C_Accept, "accept");
+    pragma Import (Stdcall, C_Bind, "bind");
+    pragma Import (Stdcall, C_Close, "closesocket");
+    pragma Import (Stdcall, C_Gethostbyaddr, "gethostbyaddr");
+    pragma Import (Stdcall, C_Gethostbyname, "gethostbyname");
+    pragma Import (Stdcall, C_Gethostname, "gethostname");
+    pragma Import (Stdcall, C_Getpeername, "getpeername");
+    pragma Import (Stdcall, C_Getservbyname, "getservbyname");
+    pragma Import (Stdcall, C_Getservbyport, "getservbyport");
+    pragma Import (Stdcall, C_Getsockname, "getsockname");
+    pragma Import (Stdcall, C_Getsockopt, "getsockopt");
+    pragma Import (Stdcall, C_Inet_Addr, "inet_addr");
+    pragma Import (Stdcall, C_Ioctl, "ioctlsocket");
+    pragma Import (Stdcall, C_Listen, "listen");
+    pragma Import (Stdcall, C_Recv, "recv");
+    pragma Import (Stdcall, C_Recvfrom, "recvfrom");
+    pragma Import (Stdcall, C_Send, "send");
+    pragma Import (Stdcall, C_Sendto, "sendto");
+    pragma Import (Stdcall, C_Setsockopt, "setsockopt");
+    pragma Import (Stdcall, C_Shutdown, "shutdown");
+    pragma Import (Stdcall, C_Socket, "socket");
+    pragma Import (C, C_Strerror, "strerror");
+    pragma Import (C, C_System, "_system");
+    pragma Import (Stdcall, Socket_Errno, "WSAGetLastError");
+    pragma Import (Stdcall, Set_Socket_Errno, "WSASetLastError");
+    pragma Import (Stdcall, WSAStartup, "WSAStartup");
+    pragma Import (Stdcall, WSACleanup, "WSACleanup");
+ 
+    pragma Import (C, Free_Socket_Set, "__gnat_free_socket_set");
+    pragma Import (C, Get_Socket_From_Set, "__gnat_get_socket_from_set");
+    pragma Import (C, Is_Socket_In_Set, "__gnat_is_socket_in_set");
+    pragma Import (C, Last_Socket_In_Set, "__gnat_last_socket_in_set");
+    pragma Import (C, New_Socket_Set, "__gnat_new_socket_set");
+    pragma Import (C, Insert_Socket_In_Set, "__gnat_insert_socket_in_set");
+    pragma Import (C, Remove_Socket_From_Set, "__gnat_remove_socket_from_set");
+ end GNAT.Sockets.Thin;
diff -Nrcpad gcc-3.4.3/gcc/ada/g-socthi-vms.adb gcc-4.0.0/gcc/ada/g-socthi-vms.adb
*** gcc-3.4.3/gcc/ada/g-socthi-vms.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/g-socthi-vms.adb	Wed Oct 27 12:27:15 2004
***************
*** 0 ****
--- 1,553 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                    G N A T . S O C K E T S . T H I N                     --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --              Copyright (C) 2001-2004 Ada Core Technologies, Inc.         --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  Temporary version for Alpha/VMS.
+ 
+ with GNAT.OS_Lib; use GNAT.OS_Lib;
+ with GNAT.Task_Lock;
+ 
+ with Interfaces.C; use Interfaces.C;
+ 
+ package body GNAT.Sockets.Thin is
+ 
+    Non_Blocking_Sockets : constant Fd_Set_Access
+      := New_Socket_Set (No_Socket_Set);
+    --  When this package is initialized with Process_Blocking_IO set
+    --  to True, sockets are set in non-blocking mode to avoid blocking
+    --  the whole process when a thread wants to perform a blocking IO
+    --  operation. But the user can also set a socket in non-blocking
+    --  mode by purpose. In order to make a difference between these
+    --  two situations, we track the origin of non-blocking mode in
+    --  Non_Blocking_Sockets. If S is in Non_Blocking_Sockets, it has
+    --  been set in non-blocking mode by the user.
+ 
+    Quantum : constant Duration := 0.2;
+    --  When Thread_Blocking_IO is False, we set sockets in
+    --  non-blocking mode and we spend a period of time Quantum between
+    --  two attempts on a blocking operation.
+ 
+    Thread_Blocking_IO : Boolean := True;
+ 
+    Unknown_System_Error : constant C.Strings.chars_ptr :=
+      C.Strings.New_String ("Unknown system error");
+ 
+    function Syscall_Accept
+      (S       : C.int;
+       Addr    : System.Address;
+       Addrlen : access C.int) return C.int;
+    pragma Import (C, Syscall_Accept, "accept");
+ 
+    function Syscall_Connect
+      (S       : C.int;
+       Name    : System.Address;
+       Namelen : C.int) return C.int;
+    pragma Import (C, Syscall_Connect, "connect");
+ 
+    function Syscall_Ioctl
+      (S    : C.int;
+       Req  : C.int;
+       Arg  : Int_Access) return C.int;
+    pragma Import (C, Syscall_Ioctl, "ioctl");
+ 
+    function Syscall_Recv
+      (S     : C.int;
+       Msg   : System.Address;
+       Len   : C.int;
+       Flags : C.int) return C.int;
+    pragma Import (C, Syscall_Recv, "recv");
+ 
+    function Syscall_Recvfrom
+      (S       : C.int;
+       Msg     : System.Address;
+       Len     : C.int;
+       Flags   : C.int;
+       From    : Sockaddr_In_Access;
+       Fromlen : access C.int) return C.int;
+    pragma Import (C, Syscall_Recvfrom, "recvfrom");
+ 
+    function Syscall_Send
+      (S     : C.int;
+       Msg   : System.Address;
+       Len   : C.int;
+       Flags : C.int)
+       return  C.int;
+    pragma Import (C, Syscall_Send, "send");
+ 
+    function Syscall_Sendto
+      (S     : C.int;
+       Msg   : System.Address;
+       Len   : C.int;
+       Flags : C.int;
+       To    : Sockaddr_In_Access;
+       Tolen : C.int)
+       return  C.int;
+    pragma Import (C, Syscall_Sendto, "sendto");
+ 
+    function Syscall_Socket
+      (Domain, Typ, Protocol : C.int) return C.int;
+    pragma Import (C, Syscall_Socket, "socket");
+ 
+    function  Non_Blocking_Socket (S : C.int) return Boolean;
+    procedure Set_Non_Blocking_Socket (S : C.int; V : Boolean);
+ 
+    --------------
+    -- C_Accept --
+    --------------
+ 
+    function C_Accept
+      (S       : C.int;
+       Addr    : System.Address;
+       Addrlen : access C.int) return C.int
+    is
+       R   : C.int;
+       Val : aliased C.int := 1;
+ 
+       Discard : C.int;
+       pragma Warnings (Off, Discard);
+ 
+    begin
+       loop
+          R := Syscall_Accept (S, Addr, Addrlen);
+          exit when Thread_Blocking_IO
+            or else R /= Failure
+            or else Non_Blocking_Socket (S)
+            or else Errno /= Constants.EWOULDBLOCK;
+          delay Quantum;
+       end loop;
+ 
+       if not Thread_Blocking_IO
+         and then R /= Failure
+       then
+          --  A socket inherits the properties ot its server especially
+          --  the FIONBIO flag. Do not use C_Ioctl as this subprogram
+          --  tracks sockets set in non-blocking mode by user.
+ 
+          Set_Non_Blocking_Socket (R, Non_Blocking_Socket (S));
+          Discard := Syscall_Ioctl (R, Constants.FIONBIO, Val'Unchecked_Access);
+       end if;
+ 
+       return R;
+    end C_Accept;
+ 
+    ---------------
+    -- C_Connect --
+    ---------------
+ 
+    function C_Connect
+      (S       : C.int;
+       Name    : System.Address;
+       Namelen : C.int) return C.int
+    is
+       Res : C.int;
+ 
+    begin
+       Res := Syscall_Connect (S, Name, Namelen);
+ 
+       if Thread_Blocking_IO
+         or else Res /= Failure
+         or else Non_Blocking_Socket (S)
+         or else Errno /= Constants.EINPROGRESS
+       then
+          return Res;
+       end if;
+ 
+       declare
+          WSet : Fd_Set_Access;
+          Now  : aliased Timeval;
+ 
+       begin
+          WSet := New_Socket_Set (No_Socket_Set);
+          loop
+             Insert_Socket_In_Set (WSet, S);
+             Now := Immediat;
+             Res := C_Select
+               (S + 1,
+                No_Fd_Set,
+                WSet,
+                No_Fd_Set,
+                Now'Unchecked_Access);
+ 
+             exit when Res > 0;
+ 
+             if Res = Failure then
+                Free_Socket_Set (WSet);
+                return Res;
+             end if;
+ 
+             delay Quantum;
+          end loop;
+ 
+          Free_Socket_Set (WSet);
+       end;
+ 
+       Res := Syscall_Connect (S, Name, Namelen);
+ 
+       if Res = Failure
+         and then Errno = Constants.EISCONN
+       then
+          return Thin.Success;
+       else
+          return Res;
+       end if;
+    end C_Connect;
+ 
+    -------------
+    -- C_Ioctl --
+    -------------
+ 
+    function C_Ioctl
+      (S   : C.int;
+       Req : C.int;
+       Arg : Int_Access) return C.int
+    is
+    begin
+       if not Thread_Blocking_IO
+         and then Req = Constants.FIONBIO
+       then
+          if Arg.all /= 0 then
+             Set_Non_Blocking_Socket (S, True);
+          end if;
+       end if;
+ 
+       return Syscall_Ioctl (S, Req, Arg);
+    end C_Ioctl;
+ 
+    ------------
+    -- C_Recv --
+    ------------
+ 
+    function C_Recv
+      (S     : C.int;
+       Msg   : System.Address;
+       Len   : C.int;
+       Flags : C.int) return C.int
+    is
+       Res : C.int;
+ 
+    begin
+       loop
+          Res := Syscall_Recv (S, Msg, Len, Flags);
+          exit when Thread_Blocking_IO
+            or else Res /= Failure
+            or else Non_Blocking_Socket (S)
+            or else Errno /= Constants.EWOULDBLOCK;
+          delay Quantum;
+       end loop;
+ 
+       return Res;
+    end C_Recv;
+ 
+    ----------------
+    -- C_Recvfrom --
+    ----------------
+ 
+    function C_Recvfrom
+      (S       : C.int;
+       Msg     : System.Address;
+       Len     : C.int;
+       Flags   : C.int;
+       From    : Sockaddr_In_Access;
+       Fromlen : access C.int) return C.int
+    is
+       Res : C.int;
+ 
+    begin
+       loop
+          Res := Syscall_Recvfrom (S, Msg, Len, Flags, From, Fromlen);
+          exit when Thread_Blocking_IO
+            or else Res /= Failure
+            or else Non_Blocking_Socket (S)
+            or else Errno /= Constants.EWOULDBLOCK;
+          delay Quantum;
+       end loop;
+ 
+       return Res;
+    end C_Recvfrom;
+ 
+    ------------
+    -- C_Send --
+    ------------
+ 
+    function C_Send
+      (S     : C.int;
+       Msg   : System.Address;
+       Len   : C.int;
+       Flags : C.int) return C.int
+    is
+       Res : C.int;
+ 
+    begin
+       loop
+          Res := Syscall_Send (S, Msg, Len, Flags);
+          exit when Thread_Blocking_IO
+            or else Res /= Failure
+            or else Non_Blocking_Socket (S)
+            or else Errno /= Constants.EWOULDBLOCK;
+          delay Quantum;
+       end loop;
+ 
+       return Res;
+    end C_Send;
+ 
+    --------------
+    -- C_Sendto --
+    --------------
+ 
+    function C_Sendto
+      (S     : C.int;
+       Msg   : System.Address;
+       Len   : C.int;
+       Flags : C.int;
+       To    : Sockaddr_In_Access;
+       Tolen : C.int) return C.int
+    is
+       Res : C.int;
+ 
+    begin
+       loop
+          Res := Syscall_Sendto (S, Msg, Len, Flags, To, Tolen);
+          exit when Thread_Blocking_IO
+            or else Res /= Failure
+            or else Non_Blocking_Socket (S)
+            or else Errno /= Constants.EWOULDBLOCK;
+          delay Quantum;
+       end loop;
+ 
+       return Res;
+    end C_Sendto;
+ 
+    --------------
+    -- C_Socket --
+    --------------
+ 
+    function C_Socket
+      (Domain   : C.int;
+       Typ      : C.int;
+       Protocol : C.int) return C.int
+    is
+       R   : C.int;
+       Val : aliased C.int := 1;
+ 
+       Discard : C.int;
+       pragma Unreferenced (Discard);
+ 
+    begin
+       R := Syscall_Socket (Domain, Typ, Protocol);
+ 
+       if not Thread_Blocking_IO
+         and then R /= Failure
+       then
+          --  Do not use C_Ioctl as this subprogram tracks sockets set
+          --  in non-blocking mode by user.
+ 
+          Discard := Syscall_Ioctl (R, Constants.FIONBIO, Val'Unchecked_Access);
+          Set_Non_Blocking_Socket (R, False);
+       end if;
+ 
+       return R;
+    end C_Socket;
+ 
+    --------------
+    -- Finalize --
+    --------------
+ 
+    procedure Finalize is
+    begin
+       null;
+    end Finalize;
+ 
+    ----------------
+    -- Initialize --
+    ----------------
+ 
+    procedure Initialize (Process_Blocking_IO : Boolean) is
+    begin
+       Thread_Blocking_IO := not Process_Blocking_IO;
+    end Initialize;
+ 
+    -------------------------
+    -- Non_Blocking_Socket --
+    -------------------------
+ 
+    function Non_Blocking_Socket (S : C.int) return Boolean is
+       R : Boolean;
+    begin
+       Task_Lock.Lock;
+       R := (Is_Socket_In_Set (Non_Blocking_Sockets, S) /= 0);
+       Task_Lock.Unlock;
+       return R;
+    end Non_Blocking_Socket;
+ 
+    -----------------
+    -- Set_Address --
+    -----------------
+ 
+    procedure Set_Address (Sin : Sockaddr_In_Access; Address : In_Addr) is
+    begin
+       Sin.Sin_Addr   := Address;
+    end Set_Address;
+ 
+    ----------------
+    -- Set_Family --
+    ----------------
+ 
+    procedure Set_Family (Sin : Sockaddr_In_Access; Family : C.int) is
+    begin
+       Sin.Sin_Family := C.unsigned_short (Family);
+    end Set_Family;
+ 
+    ----------------
+    -- Set_Length --
+    ----------------
+ 
+    procedure Set_Length (Sin : Sockaddr_In_Access; Len : C.int) is
+       pragma Unreferenced (Sin);
+       pragma Unreferenced (Len);
+    begin
+       null;
+    end Set_Length;
+ 
+    -----------------------------
+    -- Set_Non_Blocking_Socket --
+    -----------------------------
+ 
+    procedure Set_Non_Blocking_Socket (S : C.int; V : Boolean) is
+    begin
+       Task_Lock.Lock;
+ 
+       if V then
+          Insert_Socket_In_Set (Non_Blocking_Sockets, S);
+       else
+          Remove_Socket_From_Set (Non_Blocking_Sockets, S);
+       end if;
+ 
+       Task_Lock.Unlock;
+    end Set_Non_Blocking_Socket;
+ 
+    --------------
+    -- Set_Port --
+    --------------
+ 
+    procedure Set_Port (Sin : Sockaddr_In_Access; Port : C.unsigned_short) is
+    begin
+       Sin.Sin_Port   := Port;
+    end Set_Port;
+ 
+    --------------------------
+    -- Socket_Error_Message --
+    --------------------------
+ 
+    function Socket_Error_Message
+      (Errno : Integer) return C.Strings.chars_ptr
+    is
+       use type Interfaces.C.Strings.chars_ptr;
+ 
+       C_Msg : C.Strings.chars_ptr;
+ 
+    begin
+       C_Msg := C_Strerror (C.int (Errno));
+ 
+       if C_Msg = C.Strings.Null_Ptr then
+          return Unknown_System_Error;
+       else
+          return C_Msg;
+       end if;
+    end Socket_Error_Message;
+ 
+    -------------
+    -- C_Readv --
+    -------------
+ 
+    function C_Readv
+      (Fd     : C.int;
+       Iov    : System.Address;
+       Iovcnt : C.int) return C.int
+    is
+       Res : C.int;
+       Count : C.int := 0;
+ 
+       Iovec : array (0 .. Iovcnt - 1) of Vector_Element;
+       for Iovec'Address use Iov;
+       pragma Import (Ada, Iovec);
+ 
+    begin
+       for J in Iovec'Range loop
+          Res := C_Recv
+            (Fd,
+             Iovec (J).Base.all'Address,
+             Interfaces.C.int (Iovec (J).Length),
+             0);
+ 
+          if Res < 0 then
+             return Res;
+          else
+             Count := Count + Res;
+          end if;
+       end loop;
+       return Count;
+    end C_Readv;
+ 
+    --------------
+    -- C_Writev --
+    --------------
+ 
+    function C_Writev
+      (Fd     : C.int;
+       Iov    : System.Address;
+       Iovcnt : C.int) return C.int
+    is
+       Res : C.int;
+       Count : C.int := 0;
+ 
+       Iovec : array (0 .. Iovcnt - 1) of Vector_Element;
+       for Iovec'Address use Iov;
+       pragma Import (Ada, Iovec);
+ 
+    begin
+       for J in Iovec'Range loop
+          Res := C_Send
+            (Fd,
+             Iovec (J).Base.all'Address,
+             Interfaces.C.int (Iovec (J).Length),
+             Constants.MSG_Forced_Flags);
+ 
+          if Res < 0 then
+             return Res;
+          else
+             Count := Count + Res;
+          end if;
+       end loop;
+       return Count;
+    end C_Writev;
+ 
+ end GNAT.Sockets.Thin;
diff -Nrcpad gcc-3.4.3/gcc/ada/g-socthi-vms.ads gcc-4.0.0/gcc/ada/g-socthi-vms.ads
*** gcc-3.4.3/gcc/ada/g-socthi-vms.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/g-socthi-vms.ads	Thu Nov 25 16:14:01 2004
***************
*** 0 ****
--- 1,431 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                    G N A T . S O C K E T S . T H I N                     --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --            Copyright (C) 2002-2004 Ada Core Technologies, Inc.           --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package provides a target dependent thin interface to the sockets
+ --  layer for use by the GNAT.Sockets package (g-socket.ads). This package
+ --  should not be directly with'ed by an applications program.
+ 
+ --  This is the Alpha/VMS version.
+ 
+ with Interfaces.C.Pointers;
+ 
+ with Interfaces.C.Strings;
+ with GNAT.Sockets.Constants;
+ with GNAT.OS_Lib;
+ 
+ with System;
+ 
+ package GNAT.Sockets.Thin is
+ 
+    --  ??? more comments needed ???
+ 
+    package C renames Interfaces.C;
+ 
+    use type C.int;
+    --  This is so we can declare the Failure constant below
+ 
+    Success : constant C.int :=  0;
+    Failure : constant C.int := -1;
+ 
+    function Socket_Errno return Integer renames GNAT.OS_Lib.Errno;
+    --  Returns last socket error number.
+ 
+    function Socket_Error_Message (Errno : Integer) return C.Strings.chars_ptr;
+    --  Returns the error message string for the error number Errno. If
+    --  Errno is not known it returns "Unknown system error".
+ 
+    subtype Fd_Set_Access is System.Address;
+    No_Fd_Set : constant Fd_Set_Access := System.Null_Address;
+ 
+    type Timeval_Unit is new C.int;
+    pragma Convention (C, Timeval_Unit);
+ 
+    type Timeval is record
+       Tv_Sec  : Timeval_Unit;
+       Tv_Usec : Timeval_Unit;
+    end record;
+    pragma Convention (C, Timeval);
+ 
+    type Timeval_Access is access all Timeval;
+    pragma Convention (C, Timeval_Access);
+ 
+    Immediat : constant Timeval := (0, 0);
+ 
+    type Int_Access is access all C.int;
+    pragma Convention (C, Int_Access);
+    --  Access to C integers
+ 
+    type Chars_Ptr_Array is array (C.size_t range <>) of
+      aliased C.Strings.chars_ptr;
+ 
+    package Chars_Ptr_Pointers is
+       new C.Pointers (C.size_t, C.Strings.chars_ptr, Chars_Ptr_Array,
+                       C.Strings.Null_Ptr);
+    --  Arrays of C (char *)
+ 
+    type In_Addr is record
+       S_B1, S_B2, S_B3, S_B4 : C.unsigned_char;
+    end record;
+    pragma Convention (C, In_Addr);
+    --  Internet address
+ 
+    type In_Addr_Access is access all In_Addr;
+    pragma Convention (C, In_Addr_Access);
+    --  Access to internet address
+ 
+    Inaddr_Any : aliased constant In_Addr := (others => 0);
+    --  Any internet address (all the interfaces)
+ 
+    type In_Addr_Access_Array is array (C.size_t range <>)
+      of aliased In_Addr_Access;
+    pragma Convention (C, In_Addr_Access_Array);
+ 
+    package In_Addr_Access_Pointers is
+      new C.Pointers (C.size_t, In_Addr_Access, In_Addr_Access_Array, null);
+    --  Array of internet addresses
+ 
+    type Sockaddr is record
+       Sa_Family : C.unsigned_short;
+       Sa_Data   : C.char_array (1 .. 14);
+    end record;
+    pragma Convention (C, Sockaddr);
+    --  Socket address
+ 
+    type Sockaddr_Access is access all Sockaddr;
+    pragma Convention (C, Sockaddr_Access);
+    --  Access to socket address
+ 
+    type Sockaddr_In is record
+       Sin_Family : C.unsigned_short      := Constants.AF_INET;
+       Sin_Port   : C.unsigned_short      := 0;
+       Sin_Addr   : In_Addr               := Inaddr_Any;
+       Sin_Zero   : C.char_array (1 .. 8) := (others => C.char'Val (0));
+    end record;
+    pragma Convention (C, Sockaddr_In);
+    --  Internet socket address
+ 
+    type Sockaddr_In_Access is access all Sockaddr_In;
+    pragma Convention (C, Sockaddr_In_Access);
+    --  Access to internet socket address
+ 
+    procedure Set_Length
+      (Sin : Sockaddr_In_Access;
+       Len : C.int);
+    pragma Inline (Set_Length);
+    --  Set Sin.Sin_Length to Len.
+    --  On this platform, nothing is done as there is no such field.
+ 
+    procedure Set_Family
+      (Sin    : Sockaddr_In_Access;
+       Family : C.int);
+    pragma Inline (Set_Family);
+    --  Set Sin.Sin_Family to Family
+ 
+    procedure Set_Port
+      (Sin     : Sockaddr_In_Access;
+       Port    : C.unsigned_short);
+    pragma Inline (Set_Port);
+    --  Set Sin.Sin_Port to Port
+ 
+    procedure Set_Address
+      (Sin     : Sockaddr_In_Access;
+       Address : In_Addr);
+    pragma Inline (Set_Address);
+    --  Set Sin.Sin_Addr to Address
+ 
+    type Hostent is record
+       H_Name      : C.Strings.chars_ptr;
+       H_Aliases   : Chars_Ptr_Pointers.Pointer;
+       H_Addrtype  : C.int;
+       H_Length    : C.int;
+       H_Addr_List : In_Addr_Access_Pointers.Pointer;
+    end record;
+    pragma Convention (C, Hostent);
+    --  Host entry
+ 
+    type Hostent_Access is access all Hostent;
+    pragma Convention (C, Hostent_Access);
+    --  Access to host entry
+ 
+    type Servent is record
+       S_Name    : C.Strings.chars_ptr;
+       S_Aliases : Chars_Ptr_Pointers.Pointer;
+       S_Port    : C.int;
+       S_Proto   : C.Strings.chars_ptr;
+    end record;
+    pragma Convention (C, Servent);
+    --  Service entry
+ 
+    type Servent_Access is access all Servent;
+    pragma Convention (C, Servent_Access);
+    --  Access to service entry
+ 
+    type Two_Int is array (0 .. 1) of C.int;
+    pragma Convention (C, Two_Int);
+    --  Used with pipe()
+ 
+    function C_Accept
+      (S       : C.int;
+       Addr    : System.Address;
+       Addrlen : access C.int)
+       return    C.int;
+ 
+    function C_Bind
+      (S       : C.int;
+       Name    : System.Address;
+       Namelen : C.int)
+       return    C.int;
+ 
+    function C_Close
+      (Fd   : C.int)
+       return C.int;
+ 
+    function C_Connect
+      (S       : C.int;
+       Name    : System.Address;
+       Namelen : C.int)
+       return    C.int;
+ 
+    function C_Gethostbyaddr
+      (Addr : System.Address;
+       Len  : C.int;
+       Typ  : C.int)
+       return Hostent_Access;
+ 
+    function C_Gethostbyname
+      (Name : C.char_array)
+       return Hostent_Access;
+ 
+    function C_Gethostname
+      (Name    : System.Address;
+       Namelen : C.int)
+       return    C.int;
+ 
+    function C_Getpeername
+      (S       : C.int;
+       Name    : System.Address;
+       Namelen : access C.int)
+       return    C.int;
+ 
+    function C_Getservbyname
+      (Name  : C.char_array;
+       Proto : C.char_array)
+       return Servent_Access;
+ 
+    function C_Getservbyport
+      (Port  : C.int;
+       Proto : C.char_array)
+       return Servent_Access;
+ 
+    function C_Getsockname
+      (S       : C.int;
+       Name    : System.Address;
+       Namelen : access C.int)
+       return    C.int;
+ 
+    function C_Getsockopt
+      (S       : C.int;
+       Level   : C.int;
+       Optname : C.int;
+       Optval  : System.Address;
+       Optlen  : access C.int)
+       return    C.int;
+ 
+    function C_Inet_Addr
+      (Cp   : C.Strings.chars_ptr)
+       return C.int;
+ 
+    function C_Ioctl
+      (S    : C.int;
+       Req  : C.int;
+       Arg  : Int_Access)
+       return C.int;
+ 
+    function C_Listen (S, Backlog : C.int) return C.int;
+ 
+    function C_Readv
+      (Fd     : C.int;
+       Iov    : System.Address;
+       Iovcnt : C.int)
+       return   C.int;
+ 
+    function C_Recv
+      (S     : C.int;
+       Msg   : System.Address;
+       Len   : C.int;
+       Flags : C.int)
+       return  C.int;
+ 
+    function C_Recvfrom
+      (S       : C.int;
+       Msg     : System.Address;
+       Len     : C.int;
+       Flags   : C.int;
+       From    : Sockaddr_In_Access;
+       Fromlen : access C.int)
+       return    C.int;
+ 
+    function C_Select
+      (Nfds      : C.int;
+       Readfds   : Fd_Set_Access;
+       Writefds  : Fd_Set_Access;
+       Exceptfds : Fd_Set_Access;
+       Timeout   : Timeval_Access)
+       return      C.int;
+ 
+    function C_Send
+      (S     : C.int;
+       Msg   : System.Address;
+       Len   : C.int;
+       Flags : C.int)
+       return  C.int;
+ 
+    function C_Sendto
+      (S     : C.int;
+       Msg   : System.Address;
+       Len   : C.int;
+       Flags : C.int;
+       To    : Sockaddr_In_Access;
+       Tolen : C.int)
+       return  C.int;
+ 
+    function C_Setsockopt
+      (S       : C.int;
+       Level   : C.int;
+       Optname : C.int;
+       Optval  : System.Address;
+       Optlen  : C.int)
+       return    C.int;
+ 
+    function C_Shutdown
+      (S    : C.int;
+       How  : C.int)
+       return C.int;
+ 
+    function C_Socket
+      (Domain   : C.int;
+       Typ      : C.int;
+       Protocol : C.int)
+       return     C.int;
+ 
+    function C_Strerror
+      (Errnum : C.int)
+       return   C.Strings.chars_ptr;
+ 
+    function C_System
+      (Command : System.Address)
+       return    C.int;
+ 
+    function C_Writev
+      (Fd     : C.int;
+       Iov    : System.Address;
+       Iovcnt : C.int)
+       return   C.int;
+ 
+    procedure Free_Socket_Set
+      (Set    : Fd_Set_Access);
+    --  Free system-dependent socket set.
+ 
+    procedure Get_Socket_From_Set
+      (Set    : Fd_Set_Access;
+       Socket : Int_Access;
+       Last   : Int_Access);
+    --  Get last socket in Socket and remove it from the socket
+    --  set. The parameter Last is a maximum value of the largest
+    --  socket. This hint is used to avoid scanning very large socket
+    --  sets. After a call to Get_Socket_From_Set, Last is set back to
+    --  the real largest socket in the socket set.
+ 
+    procedure Insert_Socket_In_Set
+      (Set    : Fd_Set_Access;
+       Socket : C.int);
+    --  Insert socket in the socket set.
+ 
+    function  Is_Socket_In_Set
+      (Set    : Fd_Set_Access;
+       Socket : C.int) return C.int;
+    --  Check whether Socket is in the socket set, return a non-zero
+    --  value if it is, zero if it is not.
+ 
+    procedure Last_Socket_In_Set
+      (Set    : Fd_Set_Access;
+       Last   : Int_Access);
+    --  Find the largest socket in the socket set. This is needed for
+    --  select(). When Last_Socket_In_Set is called, parameter Last is
+    --  a maximum value of the largest socket. This hint is used to
+    --  avoid scanning very large socket sets. After the call, Last is
+    --  set back to the real largest socket in the socket set.
+ 
+    function  New_Socket_Set
+      (Set    : Fd_Set_Access)
+      return   Fd_Set_Access;
+    --  Allocate a new socket set which is a system-dependent structure
+    --  and initialize by copying Set if it is non-null, by making it
+    --  empty otherwise.
+ 
+    procedure Remove_Socket_From_Set
+      (Set    : Fd_Set_Access;
+       Socket : C.int);
+    --  Remove socket from the socket set.
+ 
+    procedure Finalize;
+    procedure Initialize (Process_Blocking_IO : Boolean);
+ 
+ private
+ 
+    pragma Import (C, C_Bind,          "DECC$BIND");
+    pragma Import (C, C_Close,         "DECC$CLOSE");
+    pragma Import (C, C_Gethostbyaddr, "DECC$GETHOSTBYADDR");
+    pragma Import (C, C_Gethostbyname, "DECC$GETHOSTBYNAME");
+    pragma Import (C, C_Gethostname,   "DECC$GETHOSTNAME");
+    pragma Import (C, C_Getpeername,   "DECC$GETPEERNAME");
+    pragma Import (C, C_Getservbyname, "DECC$GETSERVBYNAME");
+    pragma Import (C, C_Getservbyport, "DECC$GETSERVBYPORT");
+    pragma Import (C, C_Getsockname,   "DECC$GETSOCKNAME");
+    pragma Import (C, C_Getsockopt,    "DECC$GETSOCKOPT");
+    pragma Import (C, C_Inet_Addr,     "DECC$INET_ADDR");
+    pragma Import (C, C_Listen,        "DECC$LISTEN");
+    pragma Import (C, C_Select,        "DECC$SELECT");
+    pragma Import (C, C_Setsockopt,    "DECC$SETSOCKOPT");
+    pragma Import (C, C_Shutdown,      "DECC$SHUTDOWN");
+    pragma Import (C, C_Strerror,      "DECC$STRERROR");
+    pragma Import (C, C_System,        "DECC$SYSTEM");
+ 
+    pragma Import (C, Free_Socket_Set, "__gnat_free_socket_set");
+    pragma Import (C, Get_Socket_From_Set, "__gnat_get_socket_from_set");
+    pragma Import (C, Is_Socket_In_Set, "__gnat_is_socket_in_set");
+    pragma Import (C, Last_Socket_In_Set, "__gnat_last_socket_in_set");
+    pragma Import (C, New_Socket_Set, "__gnat_new_socket_set");
+    pragma Import (C, Insert_Socket_In_Set, "__gnat_insert_socket_in_set");
+    pragma Import (C, Remove_Socket_From_Set, "__gnat_remove_socket_from_set");
+ end GNAT.Sockets.Thin;
diff -Nrcpad gcc-3.4.3/gcc/ada/g-socthi-vxworks.adb gcc-4.0.0/gcc/ada/g-socthi-vxworks.adb
*** gcc-3.4.3/gcc/ada/g-socthi-vxworks.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/g-socthi-vxworks.adb	Mon Aug  9 12:24:10 2004
***************
*** 0 ****
--- 1,624 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                    G N A T . S O C K E T S . T H I N                     --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --            Copyright (C) 2002-2004 Ada Core Technologies, Inc.           --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package provides a target dependent thin interface to the sockets
+ --  layer for use by the GNAT.Sockets package (g-socket.ads). This package
+ --  should not be directly with'ed by an applications program.
+ 
+ --  This version is for VxWorks
+ 
+ with GNAT.OS_Lib;  use GNAT.OS_Lib;
+ with GNAT.Task_Lock;
+ 
+ with Interfaces.C; use Interfaces.C;
+ with Unchecked_Conversion;
+ 
+ package body GNAT.Sockets.Thin is
+ 
+    Non_Blocking_Sockets : constant Fd_Set_Access :=
+                             New_Socket_Set (No_Socket_Set);
+    --  When this package is initialized with Process_Blocking_IO set
+    --  to True, sockets are set in non-blocking mode to avoid blocking
+    --  the whole process when a thread wants to perform a blocking IO
+    --  operation. But the user can also set a socket in non-blocking
+    --  mode by purpose. In order to make a difference between these
+    --  two situations, we track the origin of non-blocking mode in
+    --  Non_Blocking_Sockets. If S is in Non_Blocking_Sockets, it has
+    --  been set in non-blocking mode by the user.
+ 
+    Quantum : constant Duration := 0.2;
+    --  When Thread_Blocking_IO is False, we set sockets in
+    --  non-blocking mode and we spend a period of time Quantum between
+    --  two attempts on a blocking operation.
+ 
+    Thread_Blocking_IO : Boolean := True;
+ 
+    Unknown_System_Error : constant C.Strings.chars_ptr :=
+                             C.Strings.New_String ("Unknown system error");
+ 
+    --  The following types and variables are required to create a Hostent
+    --  record "by hand".
+ 
+    type In_Addr_Access_Array_Access is access In_Addr_Access_Array;
+ 
+    Alias_Access : constant Chars_Ptr_Pointers.Pointer :=
+                     new C.Strings.chars_ptr'(C.Strings.Null_Ptr);
+ 
+    In_Addr_Access_Array_A : constant In_Addr_Access_Array_Access :=
+                               new In_Addr_Access_Array'(new In_Addr, null);
+ 
+    In_Addr_Access_Ptr : constant In_Addr_Access_Pointers.Pointer :=
+                           In_Addr_Access_Array_A
+                             (In_Addr_Access_Array_A'First)'Access;
+ 
+    Local_Hostent : constant Hostent_Access := new Hostent;
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    --  All these require comments ???
+ 
+    function Syscall_Accept
+      (S       : C.int;
+       Addr    : System.Address;
+       Addrlen : access C.int) return C.int;
+    pragma Import (C, Syscall_Accept, "accept");
+ 
+    function Syscall_Connect
+      (S       : C.int;
+       Name    : System.Address;
+       Namelen : C.int) return C.int;
+    pragma Import (C, Syscall_Connect, "connect");
+ 
+    function Syscall_Ioctl
+      (S    : C.int;
+       Req  : C.int;
+       Arg  : Int_Access) return C.int;
+    pragma Import (C, Syscall_Ioctl, "ioctl");
+ 
+    function Syscall_Recv
+      (S     : C.int;
+       Msg   : System.Address;
+       Len   : C.int;
+       Flags : C.int) return C.int;
+    pragma Import (C, Syscall_Recv, "recv");
+ 
+    function Syscall_Recvfrom
+      (S       : C.int;
+       Msg     : System.Address;
+       Len     : C.int;
+       Flags   : C.int;
+       From    : Sockaddr_In_Access;
+       Fromlen : access C.int) return C.int;
+    pragma Import (C, Syscall_Recvfrom, "recvfrom");
+ 
+    function Syscall_Send
+      (S     : C.int;
+       Msg   : System.Address;
+       Len   : C.int;
+       Flags : C.int) return C.int;
+    pragma Import (C, Syscall_Send, "send");
+ 
+    function Syscall_Sendto
+      (S     : C.int;
+       Msg   : System.Address;
+       Len   : C.int;
+       Flags : C.int;
+       To    : Sockaddr_In_Access;
+       Tolen : C.int) return C.int;
+    pragma Import (C, Syscall_Sendto, "sendto");
+ 
+    function Syscall_Socket
+      (Domain   : C.int;
+       Typ      : C.int;
+       Protocol : C.int) return C.int;
+    pragma Import (C, Syscall_Socket, "socket");
+ 
+    function  Non_Blocking_Socket (S : C.int) return Boolean;
+    procedure Set_Non_Blocking_Socket (S : C.int; V : Boolean);
+ 
+    --------------
+    -- C_Accept --
+    --------------
+ 
+    function C_Accept
+      (S       : C.int;
+       Addr    : System.Address;
+       Addrlen : access C.int) return C.int
+    is
+       R   : C.int;
+       Val : aliased C.int := 1;
+ 
+       Res : C.int;
+       pragma Unreferenced (Res);
+ 
+    begin
+       loop
+          R := Syscall_Accept (S, Addr, Addrlen);
+          exit when Thread_Blocking_IO
+            or else R /= Failure
+            or else Non_Blocking_Socket (S)
+            or else Errno /= Constants.EWOULDBLOCK;
+          delay Quantum;
+       end loop;
+ 
+       if not Thread_Blocking_IO
+         and then R /= Failure
+       then
+          --  A socket inherits the properties ot its server especially
+          --  the FIONBIO flag. Do not use C_Ioctl as this subprogram
+          --  tracks sockets set in non-blocking mode by user.
+ 
+          Set_Non_Blocking_Socket (R, Non_Blocking_Socket (S));
+          Res := Syscall_Ioctl (R, Constants.FIONBIO, Val'Unchecked_Access);
+          --  Is it OK to ignore result ???
+       end if;
+ 
+       return R;
+    end C_Accept;
+ 
+    ---------------
+    -- C_Connect --
+    ---------------
+ 
+    function C_Connect
+      (S       : C.int;
+       Name    : System.Address;
+       Namelen : C.int) return C.int
+    is
+       Res : C.int;
+ 
+    begin
+       Res := Syscall_Connect (S, Name, Namelen);
+ 
+       if Thread_Blocking_IO
+         or else Res /= Failure
+         or else Non_Blocking_Socket (S)
+         or else Errno /= Constants.EINPROGRESS
+       then
+          return Res;
+       end if;
+ 
+       declare
+          WSet : Fd_Set_Access;
+          Now  : aliased Timeval;
+ 
+       begin
+          WSet := New_Socket_Set (No_Socket_Set);
+ 
+          loop
+             Insert_Socket_In_Set (WSet, S);
+             Now := Immediat;
+             Res := C_Select
+               (S + 1,
+                No_Fd_Set,
+                WSet,
+                No_Fd_Set,
+                Now'Unchecked_Access);
+ 
+             exit when Res > 0;
+ 
+             if Res = Failure then
+                Free_Socket_Set (WSet);
+                return Res;
+             end if;
+ 
+             delay Quantum;
+          end loop;
+ 
+          Free_Socket_Set (WSet);
+       end;
+ 
+       Res := Syscall_Connect (S, Name, Namelen);
+ 
+       if Res = Failure
+         and then Errno = Constants.EISCONN
+       then
+          return Thin.Success;
+       else
+          return Res;
+       end if;
+    end C_Connect;
+ 
+    ---------------------
+    -- C_Gethostbyaddr --
+    ---------------------
+ 
+    function C_Gethostbyaddr
+      (Addr : System.Address;
+       Len  : C.int;
+       Typ  : C.int) return Hostent_Access
+    is
+       pragma Warnings (Off, Len);
+       pragma Warnings (Off, Typ);
+ 
+       type int_Access is access int;
+       function To_Pointer is
+         new Unchecked_Conversion (System.Address, int_Access);
+ 
+       procedure VxWorks_Gethostbyaddr
+         (Addr : C.int; Buf : out C.char_array);
+       pragma Import (C, VxWorks_Gethostbyaddr, "hostGetByAddr");
+ 
+       Host_Name : C.char_array (1 .. Max_Name_Length);
+ 
+    begin
+       VxWorks_Gethostbyaddr (To_Pointer (Addr).all, Host_Name);
+ 
+       In_Addr_Access_Ptr.all.all := To_In_Addr (To_Pointer (Addr).all);
+       Local_Hostent.all.H_Name := C.Strings.New_Char_Array (Host_Name);
+ 
+       return Local_Hostent;
+    end C_Gethostbyaddr;
+ 
+    ---------------------
+    -- C_Gethostbyname --
+    ---------------------
+ 
+    function C_Gethostbyname
+      (Name : C.char_array) return Hostent_Access
+    is
+       function VxWorks_Gethostbyname
+         (Name : C.char_array) return C.int;
+       pragma Import (C, VxWorks_Gethostbyname, "hostGetByName");
+ 
+       Addr : C.int;
+ 
+    begin
+       Addr := VxWorks_Gethostbyname (Name);
+ 
+       In_Addr_Access_Ptr.all.all := To_In_Addr (Addr);
+       Local_Hostent.all.H_Name := C.Strings.New_Char_Array (To_C (Host_Name));
+ 
+       return Local_Hostent;
+    end C_Gethostbyname;
+ 
+    ---------------------
+    -- C_Getservbyname --
+    ---------------------
+ 
+    function C_Getservbyname
+      (Name  : C.char_array;
+       Proto : C.char_array) return Servent_Access
+    is
+       pragma Warnings (Off, Name);
+       pragma Warnings (Off, Proto);
+ 
+    begin
+       return null;
+    end C_Getservbyname;
+ 
+    ---------------------
+    -- C_Getservbyport --
+    ---------------------
+ 
+    function C_Getservbyport
+      (Port  : C.int;
+       Proto : C.char_array) return Servent_Access
+    is
+       pragma Warnings (Off, Port);
+       pragma Warnings (Off, Proto);
+ 
+    begin
+       return null;
+    end C_Getservbyport;
+ 
+    -------------
+    -- C_Ioctl --
+    -------------
+ 
+    function C_Ioctl
+      (S    : C.int;
+       Req  : C.int;
+       Arg  : Int_Access) return C.int
+    is
+    begin
+       if not Thread_Blocking_IO
+         and then Req = Constants.FIONBIO
+       then
+          if Arg.all /= 0 then
+             Set_Non_Blocking_Socket (S, True);
+          end if;
+       end if;
+ 
+       return Syscall_Ioctl (S, Req, Arg);
+    end C_Ioctl;
+ 
+    ------------
+    -- C_Recv --
+    ------------
+ 
+    function C_Recv
+      (S     : C.int;
+       Msg   : System.Address;
+       Len   : C.int;
+       Flags : C.int) return C.int
+    is
+       Res : C.int;
+ 
+    begin
+       loop
+          Res := Syscall_Recv (S, Msg, Len, Flags);
+          exit when Thread_Blocking_IO
+            or else Res /= Failure
+            or else Non_Blocking_Socket (S)
+            or else Errno /= Constants.EWOULDBLOCK;
+          delay Quantum;
+       end loop;
+ 
+       return Res;
+    end C_Recv;
+ 
+    ----------------
+    -- C_Recvfrom --
+    ----------------
+ 
+    function C_Recvfrom
+      (S       : C.int;
+       Msg     : System.Address;
+       Len     : C.int;
+       Flags   : C.int;
+       From    : Sockaddr_In_Access;
+       Fromlen : access C.int) return C.int
+    is
+       Res : C.int;
+ 
+    begin
+       loop
+          Res := Syscall_Recvfrom (S, Msg, Len, Flags, From, Fromlen);
+          exit when Thread_Blocking_IO
+            or else Res /= Failure
+            or else Non_Blocking_Socket (S)
+            or else Errno /= Constants.EWOULDBLOCK;
+          delay Quantum;
+       end loop;
+ 
+       return Res;
+    end C_Recvfrom;
+ 
+    ------------
+    -- C_Send --
+    ------------
+ 
+    function C_Send
+      (S     : C.int;
+       Msg   : System.Address;
+       Len   : C.int;
+       Flags : C.int) return C.int
+    is
+       Res : C.int;
+ 
+    begin
+       loop
+          Res := Syscall_Send (S, Msg, Len, Flags);
+          exit when Thread_Blocking_IO
+            or else Res /= Failure
+            or else Non_Blocking_Socket (S)
+            or else Errno /= Constants.EWOULDBLOCK;
+          delay Quantum;
+       end loop;
+ 
+       return Res;
+    end C_Send;
+ 
+    --------------
+    -- C_Sendto --
+    --------------
+ 
+    function C_Sendto
+      (S     : C.int;
+       Msg   : System.Address;
+       Len   : C.int;
+       Flags : C.int;
+       To    : Sockaddr_In_Access;
+       Tolen : C.int) return C.int
+    is
+       Res : C.int;
+ 
+    begin
+       loop
+          Res := Syscall_Sendto (S, Msg, Len, Flags, To, Tolen);
+          exit when Thread_Blocking_IO
+            or else Res /= Failure
+            or else Non_Blocking_Socket (S)
+            or else Errno /= Constants.EWOULDBLOCK;
+          delay Quantum;
+       end loop;
+ 
+       return Res;
+    end C_Sendto;
+ 
+    --------------
+    -- C_Socket --
+    --------------
+ 
+    function C_Socket
+      (Domain   : C.int;
+       Typ      : C.int;
+       Protocol : C.int) return C.int
+    is
+       R   : C.int;
+       Val : aliased C.int := 1;
+ 
+       Res : C.int;
+       pragma Unreferenced (Res);
+ 
+    begin
+       R := Syscall_Socket (Domain, Typ, Protocol);
+ 
+       if not Thread_Blocking_IO
+         and then R /= Failure
+       then
+          --  Do not use C_Ioctl as this subprogram tracks sockets set
+          --  in non-blocking mode by user.
+ 
+          Res := Syscall_Ioctl (R, Constants.FIONBIO, Val'Unchecked_Access);
+          --  Is it OK to ignore result ???
+          Set_Non_Blocking_Socket (R, False);
+       end if;
+ 
+       return R;
+    end C_Socket;
+ 
+    --------------
+    -- Finalize --
+    --------------
+ 
+    procedure Finalize is
+    begin
+       null;
+    end Finalize;
+ 
+    ----------------
+    -- Initialize --
+    ----------------
+ 
+    procedure Initialize (Process_Blocking_IO : Boolean) is
+    begin
+       Thread_Blocking_IO := not Process_Blocking_IO;
+    end Initialize;
+ 
+    -------------------------
+    -- Non_Blocking_Socket --
+    -------------------------
+ 
+    function Non_Blocking_Socket (S : C.int) return Boolean is
+       R : Boolean;
+ 
+    begin
+       Task_Lock.Lock;
+       R := (Is_Socket_In_Set (Non_Blocking_Sockets, S) /= 0);
+       Task_Lock.Unlock;
+       return R;
+    end Non_Blocking_Socket;
+ 
+    -----------------
+    -- Set_Address --
+    -----------------
+ 
+    procedure Set_Address
+      (Sin     : Sockaddr_In_Access;
+       Address : In_Addr)
+    is
+    begin
+       Sin.Sin_Addr   := Address;
+    end Set_Address;
+ 
+    ----------------
+    -- Set_Family --
+    ----------------
+ 
+    procedure Set_Family
+      (Sin    : Sockaddr_In_Access;
+       Family : C.int)
+    is
+    begin
+       Sin.Sin_Family := C.unsigned_char (Family);
+    end Set_Family;
+ 
+    ----------------
+    -- Set_Length --
+    ----------------
+ 
+    procedure Set_Length
+      (Sin : Sockaddr_In_Access;
+       Len : C.int)
+    is
+    begin
+       Sin.Sin_Length := C.unsigned_char (Len);
+    end Set_Length;
+ 
+    -----------------------------
+    -- Set_Non_Blocking_Socket --
+    -----------------------------
+ 
+    procedure Set_Non_Blocking_Socket (S : C.int; V : Boolean) is
+    begin
+       Task_Lock.Lock;
+       if V then
+          Insert_Socket_In_Set (Non_Blocking_Sockets, S);
+       else
+          Remove_Socket_From_Set (Non_Blocking_Sockets, S);
+       end if;
+ 
+       Task_Lock.Unlock;
+    end Set_Non_Blocking_Socket;
+ 
+    --------------
+    -- Set_Port --
+    --------------
+ 
+    procedure Set_Port
+      (Sin  : Sockaddr_In_Access;
+       Port : C.unsigned_short)
+    is
+    begin
+       Sin.Sin_Port   := Port;
+    end Set_Port;
+ 
+    --------------------------
+    -- Socket_Error_Message --
+    --------------------------
+ 
+    function Socket_Error_Message
+      (Errno : Integer) return C.Strings.chars_ptr
+    is
+       use type Interfaces.C.Strings.chars_ptr;
+ 
+       C_Msg : C.Strings.chars_ptr;
+ 
+    begin
+       C_Msg := C_Strerror (C.int (Errno));
+ 
+       if C_Msg = C.Strings.Null_Ptr then
+          return Unknown_System_Error;
+ 
+       else
+          return C_Msg;
+       end if;
+    end Socket_Error_Message;
+ 
+ --  Package elaboration
+ 
+ begin
+    Local_Hostent.all.H_Aliases   := Alias_Access;
+ 
+    --  VxWorks currently only supports AF_INET
+ 
+    Local_Hostent.all.H_Addrtype  := Constants.AF_INET;
+ 
+    Local_Hostent.all.H_Length    := 1;
+    Local_Hostent.all.H_Addr_List := In_Addr_Access_Ptr;
+ 
+ end GNAT.Sockets.Thin;
diff -Nrcpad gcc-3.4.3/gcc/ada/g-socthi-vxworks.ads gcc-4.0.0/gcc/ada/g-socthi-vxworks.ads
*** gcc-3.4.3/gcc/ada/g-socthi-vxworks.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/g-socthi-vxworks.ads	Wed Oct 27 12:27:15 2004
***************
*** 0 ****
--- 1,432 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                    G N A T . S O C K E T S . T H I N                     --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --            Copyright (C) 2002-2004 Ada Core Technologies, Inc.           --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package provides a target dependent thin interface to the sockets
+ --  layer for use by the GNAT.Sockets package (g-socket.ads). This package
+ --  should not be directly with'ed by an applications program.
+ 
+ --  This is the version for VxWorks
+ 
+ with Interfaces.C.Pointers;
+ 
+ with Ada.Unchecked_Conversion;
+ with Interfaces.C.Strings;
+ with GNAT.Sockets.Constants;
+ with GNAT.OS_Lib;
+ 
+ with System;
+ 
+ package GNAT.Sockets.Thin is
+ 
+    package C renames Interfaces.C;
+ 
+    use type C.int;
+    --  This is so we can declare the Failure constant below
+ 
+    Success : constant C.int :=  0;
+    Failure : constant C.int := -1;
+ 
+    function Socket_Errno return Integer renames GNAT.OS_Lib.Errno;
+    --  Returns last socket error number.
+ 
+    function Socket_Error_Message (Errno : Integer) return C.Strings.chars_ptr;
+    --  Returns the error message string for the error number Errno. If
+    --  Errno is not known it returns "Unknown system error".
+ 
+    subtype Fd_Set_Access is System.Address;
+    No_Fd_Set : constant Fd_Set_Access := System.Null_Address;
+ 
+    type Timeval_Unit is new C.int;
+    pragma Convention (C, Timeval_Unit);
+ 
+    type Timeval is record
+       Tv_Sec  : Timeval_Unit;
+       Tv_Usec : Timeval_Unit;
+    end record;
+    pragma Convention (C, Timeval);
+ 
+    type Timeval_Access is access all Timeval;
+    pragma Convention (C, Timeval_Access);
+ 
+    Immediat : constant Timeval := (0, 0);
+ 
+    type Int_Access is access all C.int;
+    pragma Convention (C, Int_Access);
+    --  Access to C integers
+ 
+    type Chars_Ptr_Array is array (C.size_t range <>) of
+      aliased C.Strings.chars_ptr;
+ 
+    package Chars_Ptr_Pointers is
+       new C.Pointers (C.size_t, C.Strings.chars_ptr, Chars_Ptr_Array,
+                       C.Strings.Null_Ptr);
+    --  Arrays of C (char *)
+ 
+    type In_Addr is record
+       S_B1, S_B2, S_B3, S_B4 : C.unsigned_char;
+    end record;
+    pragma Convention (C, In_Addr);
+    --  Internet address
+ 
+    function To_In_Addr is new Ada.Unchecked_Conversion (C.int, In_Addr);
+ 
+    type In_Addr_Access is access all In_Addr;
+    pragma Convention (C, In_Addr_Access);
+    --  Access to internet address
+ 
+    Inaddr_Any : aliased constant In_Addr := (others => 0);
+    --  Any internet address (all the interfaces)
+ 
+    type In_Addr_Access_Array is array (C.size_t range <>)
+      of aliased In_Addr_Access;
+    pragma Convention (C, In_Addr_Access_Array);
+ 
+    package In_Addr_Access_Pointers is
+      new C.Pointers (C.size_t, In_Addr_Access, In_Addr_Access_Array, null);
+    --  Array of internet addresses
+ 
+    type Sockaddr is record
+       Sa_Length : C.unsigned_char;
+       Sa_Family : C.unsigned_char;
+       Sa_Data   : C.char_array (1 .. 14);
+    end record;
+    pragma Convention (C, Sockaddr);
+    --  Socket address
+ 
+    type Sockaddr_Access is access all Sockaddr;
+    pragma Convention (C, Sockaddr_Access);
+    --  Access to socket address
+ 
+    type Sockaddr_In is record
+       Sin_Length : C.unsigned_char       := 0;
+       Sin_Family : C.unsigned_char       := Constants.AF_INET;
+       Sin_Port   : C.unsigned_short      := 0;
+       Sin_Addr   : In_Addr               := Inaddr_Any;
+       Sin_Zero   : C.char_array (1 .. 8) := (others => C.char'Val (0));
+    end record;
+    pragma Convention (C, Sockaddr_In);
+    --  Internet socket address
+ 
+    type Sockaddr_In_Access is access all Sockaddr_In;
+    pragma Convention (C, Sockaddr_In_Access);
+    --  Access to internet socket address
+ 
+    procedure Set_Length
+      (Sin : Sockaddr_In_Access;
+       Len : C.int);
+    pragma Inline (Set_Length);
+    --  Set Sin.Sin_Length to Len.
+ 
+    procedure Set_Family
+      (Sin     : Sockaddr_In_Access;
+       Family  : C.int);
+    pragma Inline (Set_Family);
+    --  Set Sin.Sin_Family to Family.
+ 
+    procedure Set_Port
+      (Sin     : Sockaddr_In_Access;
+       Port    : C.unsigned_short);
+    pragma Inline (Set_Port);
+    --  Set Sin.Sin_Port to Port.
+ 
+    procedure Set_Address
+      (Sin        : Sockaddr_In_Access;
+       Address    : In_Addr);
+    pragma Inline (Set_Address);
+    --  Set Sin.Sin_Addr to Address.
+ 
+    type Hostent is record
+       H_Name      : C.Strings.chars_ptr;
+       H_Aliases   : Chars_Ptr_Pointers.Pointer;
+       H_Addrtype  : C.int;
+       H_Length    : C.int;
+       H_Addr_List : In_Addr_Access_Pointers.Pointer;
+    end record;
+    pragma Convention (C, Hostent);
+    --  Host entry
+ 
+    type Hostent_Access is access all Hostent;
+    pragma Convention (C, Hostent_Access);
+    --  Access to host entry
+ 
+    type Servent is record
+       S_Name      : C.Strings.chars_ptr;
+       S_Aliases   : Chars_Ptr_Pointers.Pointer;
+       S_Port      : C.int;
+       S_Proto     : C.Strings.chars_ptr;
+    end record;
+    pragma Convention (C, Servent);
+    --  Service entry
+ 
+    type Servent_Access is access all Servent;
+    pragma Convention (C, Servent_Access);
+    --  Access to service entry
+ 
+    type Two_Int is array (0 .. 1) of C.int;
+    pragma Convention (C, Two_Int);
+    --  Used with pipe()
+ 
+    function C_Accept
+      (S       : C.int;
+       Addr    : System.Address;
+       Addrlen : access C.int)
+       return    C.int;
+ 
+    function C_Bind
+      (S       : C.int;
+       Name    : System.Address;
+       Namelen : C.int)
+       return    C.int;
+ 
+    function C_Close
+      (Fd   : C.int)
+       return C.int;
+ 
+    function C_Connect
+      (S       : C.int;
+       Name    : System.Address;
+       Namelen : C.int)
+       return    C.int;
+ 
+    function C_Gethostbyaddr
+      (Addr : System.Address;
+       Len  : C.int;
+       Typ  : C.int)
+       return Hostent_Access;
+ 
+    function C_Gethostbyname
+      (Name : C.char_array)
+       return Hostent_Access;
+ 
+    function C_Gethostname
+      (Name    : System.Address;
+       Namelen : C.int)
+       return    C.int;
+ 
+    function C_Getpeername
+      (S       : C.int;
+       Name    : System.Address;
+       Namelen : access C.int)
+       return    C.int;
+ 
+    function C_Getservbyname
+      (Name  : C.char_array;
+       Proto : C.char_array)
+       return Servent_Access;
+ 
+    function C_Getservbyport
+      (Port  : C.int;
+       Proto : C.char_array)
+       return Servent_Access;
+ 
+    function C_Getsockname
+      (S       : C.int;
+       Name    : System.Address;
+       Namelen : access C.int)
+       return    C.int;
+ 
+    function C_Getsockopt
+      (S       : C.int;
+       Level   : C.int;
+       Optname : C.int;
+       Optval  : System.Address;
+       Optlen  : access C.int)
+       return    C.int;
+ 
+    function C_Inet_Addr
+      (Cp   : C.Strings.chars_ptr)
+       return C.int;
+ 
+    function C_Ioctl
+      (S    : C.int;
+       Req  : C.int;
+       Arg  : Int_Access)
+       return C.int;
+ 
+    function C_Listen (S, Backlog : C.int) return C.int;
+ 
+    function C_Readv
+      (Fd     : C.int;
+       Iov    : System.Address;
+       Iovcnt : C.int)
+       return   C.int;
+ 
+    function C_Recv
+      (S     : C.int;
+       Msg   : System.Address;
+       Len   : C.int;
+       Flags : C.int)
+       return  C.int;
+ 
+    function C_Recvfrom
+      (S       : C.int;
+       Msg     : System.Address;
+       Len     : C.int;
+       Flags   : C.int;
+       From    : Sockaddr_In_Access;
+       Fromlen : access C.int)
+       return    C.int;
+ 
+    function C_Select
+      (Nfds      : C.int;
+       Readfds   : Fd_Set_Access;
+       Writefds  : Fd_Set_Access;
+       Exceptfds : Fd_Set_Access;
+       Timeout   : Timeval_Access)
+       return      C.int;
+ 
+    function C_Send
+      (S     : C.int;
+       Msg   : System.Address;
+       Len   : C.int;
+       Flags : C.int)
+       return  C.int;
+ 
+    function C_Sendto
+      (S     : C.int;
+       Msg   : System.Address;
+       Len   : C.int;
+       Flags : C.int;
+       To    : Sockaddr_In_Access;
+       Tolen : C.int)
+       return  C.int;
+ 
+    function C_Setsockopt
+      (S       : C.int;
+       Level   : C.int;
+       Optname : C.int;
+       Optval  : System.Address;
+       Optlen  : C.int)
+       return    C.int;
+ 
+    function C_Shutdown
+      (S    : C.int;
+       How  : C.int)
+       return C.int;
+ 
+    function C_Socket
+      (Domain   : C.int;
+       Typ      : C.int;
+       Protocol : C.int)
+       return     C.int;
+ 
+    function C_Strerror
+      (Errnum : C.int)
+       return   C.Strings.chars_ptr;
+ 
+    function C_System
+      (Command : System.Address)
+       return    C.int;
+ 
+    function C_Writev
+      (Fd     : C.int;
+       Iov    : System.Address;
+       Iovcnt : C.int)
+       return   C.int;
+ 
+    procedure Free_Socket_Set
+      (Set    : Fd_Set_Access);
+    --  Free system-dependent socket set
+ 
+    procedure Get_Socket_From_Set
+      (Set    : Fd_Set_Access;
+       Socket : Int_Access;
+       Last   : Int_Access);
+    --  Get last socket in Socket and remove it from the socket
+    --  set. The parameter Last is a maximum value of the largest
+    --  socket. This hint is used to avoid scanning very large socket
+    --  sets. After a call to Get_Socket_From_Set, Last is set back to
+    --  the real largest socket in the socket set.
+ 
+    procedure Insert_Socket_In_Set
+      (Set    : Fd_Set_Access;
+       Socket : C.int);
+    --  Insert socket in the socket set
+ 
+    function  Is_Socket_In_Set
+      (Set    : Fd_Set_Access;
+       Socket : C.int) return C.int;
+    --  Check whether Socket is in the socket set, return a non-zero
+    --  value if it is, zero if it is not.
+ 
+    procedure Last_Socket_In_Set
+      (Set    : Fd_Set_Access;
+       Last   : Int_Access);
+    --  Find the largest socket in the socket set. This is needed for
+    --  select(). When Last_Socket_In_Set is called, parameter Last is
+    --  a maximum value of the largest socket. This hint is used to
+    --  avoid scanning very large socket sets. After the call, Last is
+    --  set back to the real largest socket in the socket set.
+ 
+    function  New_Socket_Set
+      (Set    : Fd_Set_Access)
+      return   Fd_Set_Access;
+    --  Allocate a new socket set which is a system-dependent structure
+    --  and initialize by copying Set if it is non-null, by making it
+    --  empty otherwise.
+ 
+    procedure Remove_Socket_From_Set
+      (Set    : Fd_Set_Access;
+       Socket : C.int);
+    --  Remove socket from the socket set
+ 
+    procedure Finalize;
+    procedure Initialize (Process_Blocking_IO : Boolean);
+ 
+ private
+ 
+    pragma Import (C, C_Bind, "bind");
+    pragma Import (C, C_Close, "close");
+    pragma Import (C, C_Gethostname, "gethostname");
+    pragma Import (C, C_Getpeername, "getpeername");
+    pragma Import (C, C_Getsockname, "getsockname");
+    pragma Import (C, C_Getsockopt, "getsockopt");
+    pragma Import (C, C_Inet_Addr, "inet_addr");
+    pragma Import (C, C_Listen, "listen");
+    pragma Import (C, C_Readv, "readv");
+    pragma Import (C, C_Select, "select");
+    pragma Import (C, C_Setsockopt, "setsockopt");
+    pragma Import (C, C_Shutdown, "shutdown");
+    pragma Import (C, C_Strerror, "strerror");
+    pragma Import (C, C_System, "system");
+    pragma Import (C, C_Writev, "writev");
+ 
+    pragma Import (C, Free_Socket_Set, "__gnat_free_socket_set");
+    pragma Import (C, Get_Socket_From_Set, "__gnat_get_socket_from_set");
+    pragma Import (C, Is_Socket_In_Set, "__gnat_is_socket_in_set");
+    pragma Import (C, Last_Socket_In_Set, "__gnat_last_socket_in_set");
+    pragma Import (C, New_Socket_Set, "__gnat_new_socket_set");
+    pragma Import (C, Insert_Socket_In_Set, "__gnat_insert_socket_in_set");
+    pragma Import (C, Remove_Socket_From_Set, "__gnat_remove_socket_from_set");
+ 
+ end GNAT.Sockets.Thin;
diff -Nrcpad gcc-3.4.3/gcc/ada/g-socthi.adb gcc-4.0.0/gcc/ada/g-socthi.adb
*** gcc-3.4.3/gcc/ada/g-socthi.adb	Mon Jan 12 11:45:24 2004
--- gcc-4.0.0/gcc/ada/g-socthi.adb	Mon Oct  4 14:49:35 2004
*************** package body GNAT.Sockets.Thin is
*** 61,70 ****
--- 61,73 ----
     --  two attempts on a blocking operation.
  
     Thread_Blocking_IO : Boolean := True;
+    --  Comment required for this ???
  
     Unknown_System_Error : constant C.Strings.chars_ptr :=
                              C.Strings.New_String ("Unknown system error");
  
+    --  Comments required for following functions ???
+ 
     function Syscall_Accept
       (S       : C.int;
        Addr    : System.Address;
*************** package body GNAT.Sockets.Thin is
*** 121,126 ****
--- 124,132 ----
        Protocol : C.int) return C.int;
     pragma Import (C, Syscall_Socket, "socket");
  
+    procedure Disable_SIGPIPE (S : C.int);
+    pragma Import (C, Disable_SIGPIPE, "__gnat_disable_sigpipe");
+ 
     function  Non_Blocking_Socket (S : C.int) return Boolean;
     procedure Set_Non_Blocking_Socket (S : C.int; V : Boolean);
  
*************** package body GNAT.Sockets.Thin is
*** 160,165 ****
--- 166,172 ----
           Discard := Syscall_Ioctl (R, Constants.FIONBIO, Val'Unchecked_Access);
        end if;
  
+       Disable_SIGPIPE (R);
        return R;
     end C_Accept;
  
*************** package body GNAT.Sockets.Thin is
*** 377,383 ****
           Discard := Syscall_Ioctl (R, Constants.FIONBIO, Val'Unchecked_Access);
           Set_Non_Blocking_Socket (R, False);
        end if;
! 
        return R;
     end C_Socket;
  
--- 384,390 ----
           Discard := Syscall_Ioctl (R, Constants.FIONBIO, Val'Unchecked_Access);
           Set_Non_Blocking_Socket (R, False);
        end if;
!       Disable_SIGPIPE (R);
        return R;
     end C_Socket;
  
*************** package body GNAT.Sockets.Thin is
*** 407,413 ****
        R : Boolean;
     begin
        Task_Lock.Lock;
!       R := Is_Socket_In_Set (Non_Blocking_Sockets, S);
        Task_Lock.Unlock;
        return R;
     end Non_Blocking_Socket;
--- 414,420 ----
        R : Boolean;
     begin
        Task_Lock.Lock;
!       R := (Is_Socket_In_Set (Non_Blocking_Sockets, S) /= 0);
        Task_Lock.Unlock;
        return R;
     end Non_Blocking_Socket;
diff -Nrcpad gcc-3.4.3/gcc/ada/g-socthi.ads gcc-4.0.0/gcc/ada/g-socthi.ads
*** gcc-3.4.3/gcc/ada/g-socthi.ads	Mon Jan 12 11:45:24 2004
--- gcc-4.0.0/gcc/ada/g-socthi.ads	Wed Oct 27 12:27:16 2004
*************** package GNAT.Sockets.Thin is
*** 262,272 ****
       (S       : C.int;
        Backlog : C.int) return C.int;
  
-    function C_Read
-      (Fd    : C.int;
-       Buf   : System.Address;
-       Count : C.int) return C.int;
- 
     function C_Readv
       (Fd     : C.int;
        Iov    : System.Address;
--- 262,267 ----
*************** package GNAT.Sockets.Thin is
*** 329,339 ****
     function C_System
       (Command : System.Address) return C.int;
  
-    function C_Write
-      (Fd    : C.int;
-       Buf   : System.Address;
-       Count : C.int) return C.int;
- 
     function C_Writev
       (Fd     : C.int;
        Iov    : System.Address;
--- 324,329 ----
*************** package GNAT.Sockets.Thin is
*** 360,367 ****
  
     function  Is_Socket_In_Set
       (Set    : Fd_Set_Access;
!       Socket : C.int) return Boolean;
!    --  Check whether Socket is in the socket set
  
     procedure Last_Socket_In_Set
       (Set    : Fd_Set_Access;
--- 350,358 ----
  
     function  Is_Socket_In_Set
       (Set    : Fd_Set_Access;
!       Socket : C.int) return C.int;
!    --  Check whether Socket is in the socket set, return a non-zero
!    --  value if it is, zero if it is not.
  
     procedure Last_Socket_In_Set
       (Set    : Fd_Set_Access;
*************** private
*** 399,412 ****
     pragma Import (C, C_Getsockopt, "getsockopt");
     pragma Import (C, C_Inet_Addr, "inet_addr");
     pragma Import (C, C_Listen, "listen");
-    pragma Import (C, C_Read, "read");
     pragma Import (C, C_Readv, "readv");
     pragma Import (C, C_Select, "select");
     pragma Import (C, C_Setsockopt, "setsockopt");
     pragma Import (C, C_Shutdown, "shutdown");
     pragma Import (C, C_Strerror, "strerror");
     pragma Import (C, C_System, "system");
-    pragma Import (C, C_Write, "write");
     pragma Import (C, C_Writev, "writev");
  
     pragma Import (C, Free_Socket_Set, "__gnat_free_socket_set");
--- 390,401 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/g-soliop-mingw.ads gcc-4.0.0/gcc/ada/g-soliop-mingw.ads
*** gcc-3.4.3/gcc/ada/g-soliop-mingw.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/g-soliop-mingw.ads	Fri May 14 10:01:59 2004
***************
*** 0 ****
--- 1,43 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --          G N A T . S O C K E T S . L I N K E R _ O P T I O N S           --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --            Copyright (C) 2001-2003 Ada Core Technologies, Inc.           --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package is used to provide target specific linker_options for the
+ --  support of scokets as required by the package GNAT.Sockets.
+ 
+ --  This is the Windows/NT version of this package
+ 
+ 
+ package GNAT.Sockets.Linker_Options is
+ private
+    pragma Linker_Options ("-lwsock32");
+ end GNAT.Sockets.Linker_Options;
diff -Nrcpad gcc-3.4.3/gcc/ada/g-soliop-solaris.ads gcc-4.0.0/gcc/ada/g-soliop-solaris.ads
*** gcc-3.4.3/gcc/ada/g-soliop-solaris.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/g-soliop-solaris.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,43 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --          G N A T . S O C K E T S . L I N K E R _ O P T I O N S           --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --            Copyright (C) 2001-2003 Ada Core Technologies, Inc.           --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package is used to provide target specific linker_options for the
+ --  support of scokets as required by the package GNAT.Sockets.
+ 
+ --  This is the Solaris version of this package
+ 
+ package GNAT.Sockets.Linker_Options is
+ private
+    pragma Linker_Options ("-lnsl");
+    pragma Linker_Options ("-lsocket");
+ end GNAT.Sockets.Linker_Options;
diff -Nrcpad gcc-3.4.3/gcc/ada/g-soliop-unixware.ads gcc-4.0.0/gcc/ada/g-soliop-unixware.ads
*** gcc-3.4.3/gcc/ada/g-soliop-unixware.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/g-soliop-unixware.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,43 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --          G N A T . S O C K E T S . L I N K E R _ O P T I O N S           --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --            Copyright (C) 2002-2003 Ada Core Technologies, Inc.           --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package is used to provide target specific linker_options for the
+ --  support of scokets as required by the package GNAT.Sockets.
+ 
+ --  This is the UnixWare version of this package
+ 
+ package GNAT.Sockets.Linker_Options is
+ private
+    pragma Linker_Options ("-lnsl");
+    pragma Linker_Options ("-lsocket");
+ end GNAT.Sockets.Linker_Options;
diff -Nrcpad gcc-3.4.3/gcc/ada/g-spipat.adb gcc-4.0.0/gcc/ada/g-spipat.adb
*** gcc-3.4.3/gcc/ada/g-spipat.adb	Wed Dec  3 11:47:52 2003
--- gcc-4.0.0/gcc/ada/g-spipat.adb	Mon Oct  4 14:59:42 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 1998-2003, Ada Core Technologies, Inc.           --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 1998-2004, Ada Core Technologies, Inc.           --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body GNAT.Spitbol.Patterns is
*** 4823,4830 ****
        --  match routine must end by executing a goto to the appropriate point
        --  in the finite state machine model.
  
        Logic_Error;
! 
     end XMatch;
  
     -------------
--- 4823,4831 ----
        --  match routine must end by executing a goto to the appropriate point
        --  in the finite state machine model.
  
+       pragma Warnings (Off);
        Logic_Error;
!       pragma Warnings (On);
     end XMatch;
  
     -------------
*************** package body GNAT.Spitbol.Patterns is
*** 6309,6316 ****
        --  match routine must end by executing a goto to the appropriate point
        --  in the finite state machine model.
  
        Logic_Error;
! 
     end XMatchD;
  
  end GNAT.Spitbol.Patterns;
--- 6310,6318 ----
        --  match routine must end by executing a goto to the appropriate point
        --  in the finite state machine model.
  
+       pragma Warnings (Off);
        Logic_Error;
!       pragma Warnings (On);
     end XMatchD;
  
  end GNAT.Spitbol.Patterns;
diff -Nrcpad gcc-3.4.3/gcc/ada/g-table.adb gcc-4.0.0/gcc/ada/g-table.adb
*** gcc-3.4.3/gcc/ada/g-table.adb	Fri Dec  5 10:24:04 2003
--- gcc-4.0.0/gcc/ada/g-table.adb	Fri Mar  5 10:58:56 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 1998-2003 Ada Core Technologies, Inc.           --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 1998-2004 Ada Core Technologies, Inc.           --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body GNAT.Table is
*** 60,68 ****
--- 60,75 ----
     --  in Max. Works correctly to do an initial allocation if the table
     --  is currently null.
  
+    pragma Warnings (Off);
+    --  Turn off warnings. The following unchecked conversions are only used
+    --  internally in this package, and cannot never result in any instances
+    --  of improperly aliased pointers for the client of the package.
+ 
     function To_Address is new Unchecked_Conversion (Table_Ptr, Address);
     function To_Pointer is new Unchecked_Conversion (Address, Table_Ptr);
  
+    pragma Warnings (On);
+ 
     --------------
     -- Allocate --
     --------------
diff -Nrcpad gcc-3.4.3/gcc/ada/g-thread.adb gcc-4.0.0/gcc/ada/g-thread.adb
*** gcc-3.4.3/gcc/ada/g-thread.adb	Wed Dec  3 11:47:52 2003
--- gcc-4.0.0/gcc/ada/g-thread.adb	Mon May 17 13:20:43 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 1998-2003 Ada Core Technologies, Inc.           --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 1998-2004 Ada Core Technologies, Inc.           --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body GNAT.Threads is
*** 47,59 ****
  
     type Thread_Id_Ptr is access all Thread_Id;
  
     function To_Addr is new Unchecked_Conversion (Task_Id, Address);
     function To_Id   is new Unchecked_Conversion (Address, Task_Id);
!    function To_Id   is new Unchecked_Conversion (Address, Tasking.Task_ID);
     function To_Tid  is new Unchecked_Conversion
       (Address, Ada.Task_Identification.Task_Id);
     function To_Thread is new Unchecked_Conversion (Address, Thread_Id_Ptr);
  
     type Code_Proc is access procedure (Id : Address; Parm : Void_Ptr);
  
     task type Thread
--- 47,65 ----
  
     type Thread_Id_Ptr is access all Thread_Id;
  
+    pragma Warnings (Off);
+    --  The following unchecked conversions are aliasing safe, since they
+    --  are never used to create pointers to improperly aliased data.
+ 
     function To_Addr is new Unchecked_Conversion (Task_Id, Address);
     function To_Id   is new Unchecked_Conversion (Address, Task_Id);
!    function To_Id   is new Unchecked_Conversion (Address, Tasking.Task_Id);
     function To_Tid  is new Unchecked_Conversion
       (Address, Ada.Task_Identification.Task_Id);
     function To_Thread is new Unchecked_Conversion (Address, Thread_Id_Ptr);
  
+    pragma Warnings (On);
+ 
     type Code_Proc is access procedure (Id : Address; Parm : Void_Ptr);
  
     task type Thread
*************** package body GNAT.Threads is
*** 106,112 ****
     -----------------------
  
     procedure Unregister_Thread is
!       Self_Id : constant Tasking.Task_ID := Task_Primitives.Operations.Self;
     begin
        Self_Id.Common.State := Tasking.Terminated;
        Destroy_TSD (Self_Id.Common.Compiler_Data);
--- 112,118 ----
     -----------------------
  
     procedure Unregister_Thread is
!       Self_Id : constant Tasking.Task_Id := Task_Primitives.Operations.Self;
     begin
        Self_Id.Common.State := Tasking.Terminated;
        Destroy_TSD (Self_Id.Common.Compiler_Data);
*************** package body GNAT.Threads is
*** 119,127 ****
  
     procedure Unregister_Thread_Id (Thread : System.Address) is
        Thr : constant Thread_Id := To_Thread (Thread).all;
!       T   : Tasking.Task_ID;
  
!       use type Tasking.Task_ID;
  
     begin
        STPO.Lock_RTS;
--- 125,133 ----
  
     procedure Unregister_Thread_Id (Thread : System.Address) is
        Thr : constant Thread_Id := To_Thread (Thread).all;
!       T   : Tasking.Task_Id;
  
!       use type Tasking.Task_Id;
  
     begin
        STPO.Lock_RTS;
diff -Nrcpad gcc-3.4.3/gcc/ada/g-traceb.ads gcc-4.0.0/gcc/ada/g-traceb.ads
*** gcc-3.4.3/gcc/ada/g-traceb.ads	Tue Oct 21 13:42:05 2003
--- gcc-4.0.0/gcc/ada/g-traceb.ads	Mon Jun 28 14:36:57 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 1999-2002 Ada Core Technologies, Inc.            --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 1999-2004 Ada Core Technologies, Inc.            --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 42,47 ****
--- 42,51 ----
  --  These code locations may be converted to corresponding source locations
  --  using the external addr2line utility, or from within GDB.
  
+ --  In order to use this facility, in some cases the binder must be invoked
+ --  with -E switch (store the backtrace with exception occurence). Please
+ --  refer to gnatbind documentation for more information.
+ 
  --  To analyze the code locations later using addr2line or gdb, the necessary
  --  units must be compiled with the debugging switch -g in the usual manner.
  --  Note that it is not necessary to compile with -g to use Call_Chain. In
***************
*** 50,56 ****
  --     Compile without -g
  --     Run the program, and call Call_Chain
  --     Recompile with -g
! --     Use addr2line to interpret the absolute call locations
  
  --  This capability is currently supported on the following targets:
  
--- 54,61 ----
  --     Compile without -g
  --     Run the program, and call Call_Chain
  --     Recompile with -g
! --     Use addr2line to interpret the absolute call locations (note that
! --      addr2line expects addresses in hexadecimal format).
  
  --  This capability is currently supported on the following targets:
  
diff -Nrcpad gcc-3.4.3/gcc/ada/g-trasym-vms.adb gcc-4.0.0/gcc/ada/g-trasym-vms.adb
*** gcc-3.4.3/gcc/ada/g-trasym-vms.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/g-trasym-vms.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,282 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --             G N A T . T R A C E B A C K . S Y M B O L I C                --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --           Copyright (C) 1999-2003 Free Software Foundation, Inc.         --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  Run-time symbolic traceback support for VMS
+ 
+ with Ada.Exceptions.Traceback; use Ada.Exceptions.Traceback;
+ with Interfaces.C;
+ with System;
+ with System.Aux_DEC;
+ with System.Soft_Links;
+ with System.Traceback_Entries;
+ 
+ package body GNAT.Traceback.Symbolic is
+ 
+    pragma Warnings (Off);
+    pragma Linker_Options ("--for-linker=sys$library:trace.exe");
+ 
+    use Interfaces.C;
+    use System;
+    use System.Aux_DEC;
+    use System.Traceback_Entries;
+ 
+    subtype User_Arg_Type is Unsigned_Longword;
+    subtype Cond_Value_Type is Unsigned_Longword;
+ 
+    type ASCIC is record
+       Count : unsigned_char;
+       Data  : char_array (1 .. 255);
+    end record;
+    pragma Convention (C, ASCIC);
+ 
+    for ASCIC use record
+       Count at 0 range 0 .. 7;
+       Data  at 1 range 0 .. 8 * 255 - 1;
+    end record;
+    for ASCIC'Size use 8 * 256;
+ 
+    function Fetch_ASCIC is new Fetch_From_Address (ASCIC);
+ 
+    procedure Symbolize
+      (Status         : out Cond_Value_Type;
+       Current_PC     : in Address;
+       Adjusted_PC    : in Address;
+       Current_FP     : in Address;
+       Current_R26    : in Address;
+       Image_Name     : out Address;
+       Module_Name    : out Address;
+       Routine_Name   : out Address;
+       Line_Number    : out Integer;
+       Relative_PC    : out Address;
+       Absolute_PC    : out Address;
+       PC_Is_Valid    : out Long_Integer;
+       User_Act_Proc  : Address           := Address'Null_Parameter;
+       User_Arg_Value : User_Arg_Type     := User_Arg_Type'Null_Parameter);
+ 
+    pragma Interface (External, Symbolize);
+ 
+    pragma Import_Valued_Procedure
+      (Symbolize, "TBK$SYMBOLIZE",
+       (Cond_Value_Type, Address, Address, Address, Address,
+        Address, Address, Address, Integer,
+        Address, Address, Long_Integer,
+        Address, User_Arg_Type),
+       (Value, Value, Value, Value, Value,
+        Reference, Reference, Reference, Reference,
+        Reference, Reference, Reference,
+        Value, Value),
+        User_Act_Proc);
+ 
+    function Decode_Ada_Name (Encoded_Name : String) return String;
+    --  Decodes an Ada identifier name. Removes leading "_ada_" and trailing
+    --  __{DIGIT}+ or ${DIGIT}+, converts other "__" to '.'
+ 
+    ---------------------
+    -- Decode_Ada_Name --
+    ---------------------
+ 
+    function Decode_Ada_Name (Encoded_Name : String) return String is
+       Decoded_Name : String (1 .. Encoded_Name'Length);
+       Pos          : Integer := Encoded_Name'First;
+       Last         : Integer := Encoded_Name'Last;
+       DPos         : Integer := 1;
+ 
+    begin
+       if Pos > Last then
+          return "";
+       end if;
+ 
+       --  Skip leading _ada_
+ 
+       if Encoded_Name'Length > 4
+         and then Encoded_Name (Pos .. Pos + 4) = "_ada_"
+       then
+          Pos := Pos + 5;
+       end if;
+ 
+       --  Skip trailing __{DIGIT}+ or ${DIGIT}+
+ 
+       if Encoded_Name (Last) in '0' .. '9' then
+          for J in reverse Pos + 2 .. Last - 1 loop
+             case Encoded_Name (J) is
+                when '0' .. '9' =>
+                   null;
+                when '$' =>
+                   Last := J - 1;
+                   exit;
+                when '_' =>
+                   if Encoded_Name (J - 1) = '_' then
+                      Last := J - 2;
+                   end if;
+                   exit;
+                when others =>
+                   exit;
+             end case;
+          end loop;
+       end if;
+ 
+       --  Now just copy encoded name to decoded name, converting "__" to '.'
+ 
+       while Pos <= Last loop
+          if Encoded_Name (Pos) = '_' and then Encoded_Name (Pos + 1) = '_'
+            and then Pos /= Encoded_Name'First
+          then
+             Decoded_Name (DPos) := '.';
+             Pos := Pos + 2;
+ 
+          else
+             Decoded_Name (DPos) := Encoded_Name (Pos);
+             Pos := Pos + 1;
+          end if;
+ 
+          DPos := DPos + 1;
+       end loop;
+ 
+       return Decoded_Name (1 .. DPos - 1);
+    end Decode_Ada_Name;
+ 
+    ------------------------
+    -- Symbolic_Traceback --
+    ------------------------
+ 
+    function Symbolic_Traceback (Traceback : Tracebacks_Array) return String is
+       Status            : Cond_Value_Type;
+       Image_Name        : ASCIC;
+       Image_Name_Addr   : Address;
+       Module_Name       : ASCIC;
+       Module_Name_Addr  : Address;
+       Routine_Name      : ASCIC;
+       Routine_Name_Addr : Address;
+       Line_Number       : Integer;
+       Relative_PC       : Address;
+       Absolute_PC       : Address;
+       PC_Is_Valid       : Long_Integer;
+       Return_Address    : Address;
+       Res               : String (1 .. 256 * Traceback'Length);
+       Len               : Integer;
+ 
+    begin
+       if Traceback'Length > 0 then
+          Len := 0;
+ 
+          --  Since image computation is not thread-safe we need task lockout
+ 
+          System.Soft_Links.Lock_Task.all;
+ 
+          for J in Traceback'Range loop
+             if J = Traceback'Last then
+                Return_Address := Address_Zero;
+             else
+                Return_Address := PC_For (Traceback (J + 1));
+             end if;
+ 
+             Symbolize
+               (Status,
+                PC_For (Traceback (J)),
+                PC_For (Traceback (J)),
+                PV_For (Traceback (J)),
+                Return_Address,
+                Image_Name_Addr,
+                Module_Name_Addr,
+                Routine_Name_Addr,
+                Line_Number,
+                Relative_PC,
+                Absolute_PC,
+                PC_Is_Valid);
+ 
+             Image_Name   := Fetch_ASCIC (Image_Name_Addr);
+             Module_Name  := Fetch_ASCIC (Module_Name_Addr);
+             Routine_Name := Fetch_ASCIC (Routine_Name_Addr);
+ 
+             declare
+                First : Integer := Len + 1;
+                Last  : Integer := First + 80 - 1;
+                Pos   : Integer;
+                Routine_Name_D : String := Decode_Ada_Name
+                  (To_Ada
+                     (Routine_Name.Data (1 .. size_t (Routine_Name.Count)),
+                      False));
+ 
+             begin
+                Res (First .. Last) := (others => ' ');
+ 
+                Res (First .. First + Integer (Image_Name.Count) - 1) :=
+                  To_Ada
+                   (Image_Name.Data (1 .. size_t (Image_Name.Count)),
+                    False);
+ 
+                Res (First + 10 ..
+                     First + 10 + Integer (Module_Name.Count) - 1) :=
+                  To_Ada
+                   (Module_Name.Data (1 .. size_t (Module_Name.Count)),
+                    False);
+ 
+                Res (First + 30 ..
+                     First + 30 + Routine_Name_D'Length - 1) :=
+                  Routine_Name_D;
+ 
+                --  If routine name doesn't fit 20 characters, output
+                --  the line number on next line at 50th position
+ 
+                if Routine_Name_D'Length > 20 then
+                   Pos := First + 30 + Routine_Name_D'Length;
+                   Res (Pos) := ASCII.LF;
+                   Last := Pos + 80;
+                   Res (Pos + 1 .. Last) := (others => ' ');
+                   Pos := Pos + 51;
+                else
+                   Pos := First + 50;
+                end if;
+ 
+                Res (Pos .. Pos + Integer'Image (Line_Number)'Length - 1) :=
+                  Integer'Image (Line_Number);
+ 
+                Res (Last) := ASCII.LF;
+                Len := Last;
+             end;
+          end loop;
+ 
+          System.Soft_Links.Unlock_Task.all;
+          return Res (1 .. Len);
+ 
+       else
+          return "";
+       end if;
+    end Symbolic_Traceback;
+ 
+    function Symbolic_Traceback (E : Exception_Occurrence) return String is
+    begin
+       return Symbolic_Traceback (Tracebacks (E));
+    end Symbolic_Traceback;
+ 
+ end GNAT.Traceback.Symbolic;
diff -Nrcpad gcc-3.4.3/gcc/ada/g-trasym.ads gcc-4.0.0/gcc/ada/g-trasym.ads
*** gcc-3.4.3/gcc/ada/g-trasym.ads	Tue Oct 21 13:42:05 2003
--- gcc-4.0.0/gcc/ada/g-trasym.ads	Mon Sep 13 10:18:40 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 1999-2003 Ada Core Technologies, Inc.            --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 1999-2004 Ada Core Technologies, Inc.            --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 34,57 ****
  --  Run-time symbolic traceback support
  
  --  Note: this is only available on selected targets. Currently it is
! --  supported on Sparc/Solaris, GNU/Linux, Windows NT, HP-UX and Tru64.
  
  --  The routines provided in this package assume that your application has
  --  been compiled with debugging information turned on, since this information
  --  is used to build a symbolic traceback.
  
  --  In order to retrieve symbolic information, functions in this package will
  --  read on disk all the debug information of the executable file (found via
  --  Argument (0), so any path information needed to read the executable file
  --  need to be provided when launching the executable), and load then in
  --  memory, causing a significant cpu and memory overhead.
  
! --  This package is not intended to be used within a shared library,
! --  symbolic tracebacks are only supported for the main executable
! --  and not for shared libraries.
  
! --  You should consider using off-line symbolic traceback instead, using
! --  addr2line or gdb.
  
  with Ada.Exceptions; use Ada.Exceptions;
  
--- 34,63 ----
  --  Run-time symbolic traceback support
  
  --  Note: this is only available on selected targets. Currently it is
! --  supported on Sparc/Solaris, GNU/Linux, Windows NT, HP-UX, VMS and Tru64.
  
  --  The routines provided in this package assume that your application has
  --  been compiled with debugging information turned on, since this information
  --  is used to build a symbolic traceback.
  
+ --  It is also in some cases necessary to invoke the binder
+ --  with -E switch (store the backtrace with exception occurence). Please
+ --  refer to gnatbind documentation for more information.
+ 
  --  In order to retrieve symbolic information, functions in this package will
  --  read on disk all the debug information of the executable file (found via
  --  Argument (0), so any path information needed to read the executable file
  --  need to be provided when launching the executable), and load then in
  --  memory, causing a significant cpu and memory overhead.
  
! --  On all platforms except VMS, this package is not intended to be used
! --  within a shared library, symbolic tracebacks are only supported for the
! --  main executable and not for shared libraries. You should consider using
! --  gdb to obtain symbolic traceback in such cases.
  
! --  On VMS, there is no restriction on using this facility with shared
! --  libraries. However, the OS should be at least v7.3-1 and OS patch
! --  VMS731_TRACE-V0100 must be applied in order to use this package.
  
  with Ada.Exceptions; use Ada.Exceptions;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/g-utf_32.adb gcc-4.0.0/gcc/ada/g-utf_32.adb
*** gcc-3.4.3/gcc/ada/g-utf_32.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/g-utf_32.adb	Thu Feb 10 13:50:14 2005
***************
*** 0 ****
--- 1,1622 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --                          G N A T . U T F _ 3 2                           --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --             Copyright (C) 2005 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ pragma Style_Checks (Off);
+ --  Allow long lines in this unit
+ 
+ package body GNAT.UTF_32 is
+ 
+    ----------------------
+    -- Character Tables --
+    ----------------------
+ 
+    --  Note these tables are derived from those given in AI-285. For details
+    --  see //www.ada-auth.org/cgi-bin/cvsweb.cgi/AIs/AI-00285.TXT?rev=1.22.
+ 
+    type UTF_32_Range is record
+       Lo : UTF_32;
+       Hi : UTF_32;
+    end record;
+ 
+    type UTF_32_Ranges is array (Positive range <>) of UTF_32_Range;
+ 
+    --  The following array includes all characters considered digits, i.e.
+    --  all characters from the Unicode table with categories:
+ 
+    --    Number, Decimal Digit (Nd)
+ 
+    UTF_32_Digits : constant UTF_32_Ranges := (
+      (16#00030#, 16#00039#),  -- DIGIT ZERO .. DIGIT NINE
+      (16#00660#, 16#00669#),  -- ARABIC-INDIC DIGIT ZERO .. ARABIC-INDIC DIGIT NINE
+      (16#006F0#, 16#006F9#),  -- EXTENDED ARABIC-INDIC DIGIT ZERO .. EXTENDED ARABIC-INDIC DIGIT NINE
+      (16#00966#, 16#0096F#),  -- DEVANAGARI DIGIT ZERO .. DEVANAGARI DIGIT NINE
+      (16#009E6#, 16#009EF#),  -- BENGALI DIGIT ZERO .. BENGALI DIGIT NINE
+      (16#00A66#, 16#00A6F#),  -- GURMUKHI DIGIT ZERO .. GURMUKHI DIGIT NINE
+      (16#00AE6#, 16#00AEF#),  -- GUJARATI DIGIT ZERO .. GUJARATI DIGIT NINE
+      (16#00B66#, 16#00B6F#),  -- ORIYA DIGIT ZERO .. ORIYA DIGIT NINE
+      (16#00BE7#, 16#00BEF#),  -- TAMIL DIGIT ONE .. TAMIL DIGIT NINE
+      (16#00C66#, 16#00C6F#),  -- TELUGU DIGIT ZERO .. TELUGU DIGIT NINE
+      (16#00CE6#, 16#00CEF#),  -- KANNADA DIGIT ZERO .. KANNADA DIGIT NINE
+      (16#00D66#, 16#00D6F#),  -- MALAYALAM DIGIT ZERO .. MALAYALAM DIGIT NINE
+      (16#00E50#, 16#00E59#),  -- THAI DIGIT ZERO .. THAI DIGIT NINE
+      (16#00ED0#, 16#00ED9#),  -- LAO DIGIT ZERO .. LAO DIGIT NINE
+      (16#00F20#, 16#00F29#),  -- TIBETAN DIGIT ZERO .. TIBETAN DIGIT NINE
+      (16#01040#, 16#01049#),  -- MYANMAR DIGIT ZERO .. MYANMAR DIGIT NINE
+      (16#01369#, 16#01371#),  -- ETHIOPIC DIGIT ONE .. ETHIOPIC DIGIT NINE
+      (16#017E0#, 16#017E9#),  -- KHMER DIGIT ZERO .. KHMER DIGIT NINE
+      (16#01810#, 16#01819#),  -- MONGOLIAN DIGIT ZERO .. MONGOLIAN DIGIT NINE
+      (16#01946#, 16#0194F#),  -- LIMBU DIGIT ZERO .. LIMBU DIGIT NINE
+      (16#0FF10#, 16#0FF19#),  -- FULLWIDTH DIGIT ZERO .. FULLWIDTH DIGIT NINE
+      (16#104A0#, 16#104A9#),  -- OSMANYA DIGIT ZERO .. OSMANYA DIGIT NINE
+      (16#1D7CE#, 16#1D7FF#)); -- MATHEMATICAL BOLD DIGIT ZERO .. MATHEMATICAL MONOSPACE DIGIT NINE
+ 
+    --  The following table includes all characters considered letters, i.e.
+    --  all characters from the Unicode table with categories:
+ 
+    --    Letter, Uppercase (Lu)
+    --    Letter, Lowercase (Ll)
+    --    Letter, Titlecase (Lt)
+    --    Letter, Modifier (Lm)
+    --    Letter, Other (Lo)
+    --    Number, Letter (Nl)
+ 
+    UTF_32_Letters : constant UTF_32_Ranges := (
+      (16#00041#, 16#0005A#),  -- LATIN CAPITAL LETTER A .. LATIN CAPITAL LETTER Z
+      (16#00061#, 16#0007A#),  -- LATIN SMALL LETTER A .. LATIN SMALL LETTER Z
+      (16#000AA#, 16#000AA#),  -- FEMININE ORDINAL INDICATOR .. FEMININE ORDINAL INDICATOR
+      (16#000B5#, 16#000B5#),  -- MICRO SIGN .. MICRO SIGN
+      (16#000BA#, 16#000BA#),  -- MASCULINE ORDINAL INDICATOR .. MASCULINE ORDINAL INDICATOR
+      (16#000C0#, 16#000D6#),  -- LATIN CAPITAL LETTER A WITH GRAVE .. LATIN CAPITAL LETTER O WITH DIAERESIS
+      (16#000D8#, 16#000F6#),  -- LATIN CAPITAL LETTER O WITH STROKE .. LATIN SMALL LETTER O WITH DIAERESIS
+      (16#000F8#, 16#00236#),  -- LATIN SMALL LETTER O WITH STROKE .. LATIN SMALL LETTER T WITH CURL
+      (16#00250#, 16#002C1#),  -- LATIN SMALL LETTER TURNED A .. MODIFIER LETTER REVERSED GLOTTAL STOP
+      (16#002C6#, 16#002D1#),  -- MODIFIER LETTER CIRCUMFLEX ACCENT .. MODIFIER LETTER HALF TRIANGULAR COLON
+      (16#002E0#, 16#002E4#),  -- MODIFIER LETTER SMALL GAMMA .. MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+      (16#002EE#, 16#002EE#),  -- MODIFIER LETTER DOUBLE APOSTROPHE .. MODIFIER LETTER DOUBLE APOSTROPHE
+      (16#0037A#, 16#0037A#),  -- GREEK YPOGEGRAMMENI .. GREEK YPOGEGRAMMENI
+      (16#00386#, 16#00386#),  -- GREEK CAPITAL LETTER ALPHA WITH TONOS .. GREEK CAPITAL LETTER ALPHA WITH TONOS
+      (16#00388#, 16#0038A#),  -- GREEK CAPITAL LETTER EPSILON WITH TONOS .. GREEK CAPITAL LETTER IOTA WITH TONOS
+      (16#0038C#, 16#0038C#),  -- GREEK CAPITAL LETTER OMICRON WITH TONOS .. GREEK CAPITAL LETTER OMICRON WITH TONOS
+      (16#0038E#, 16#003A1#),  -- GREEK CAPITAL LETTER UPSILON WITH TONOS .. GREEK CAPITAL LETTER RHO
+      (16#003A3#, 16#003CE#),  -- GREEK CAPITAL LETTER SIGMA .. GREEK SMALL LETTER OMEGA WITH TONOS
+      (16#003D0#, 16#003F5#),  -- GREEK BETA SYMBOL .. GREEK LUNATE EPSILON SYMBOL
+      (16#003F7#, 16#003FB#),  -- GREEK CAPITAL LETTER SHO .. GREEK SMALL LETTER SAN
+      (16#00400#, 16#00481#),  -- CYRILLIC CAPITAL LETTER IE WITH GRAVE .. CYRILLIC SMALL LETTER KOPPA
+      (16#0048A#, 16#004CE#),  -- CYRILLIC CAPITAL LETTER SHORT I WITH TAIL .. CYRILLIC SMALL LETTER EM WITH TAIL
+      (16#004D0#, 16#004F5#),  -- CYRILLIC CAPITAL LETTER A WITH BREVE .. CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+      (16#004F8#, 16#004F9#),  -- CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS .. CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+      (16#00500#, 16#0050F#),  -- CYRILLIC CAPITAL LETTER KOMI DE .. CYRILLIC SMALL LETTER KOMI TJE
+      (16#00531#, 16#00556#),  -- ARMENIAN CAPITAL LETTER AYB .. ARMENIAN CAPITAL LETTER FEH
+      (16#00559#, 16#00559#),  -- ARMENIAN MODIFIER LETTER LEFT HALF RING .. ARMENIAN MODIFIER LETTER LEFT HALF RING
+      (16#00561#, 16#00587#),  -- ARMENIAN SMALL LETTER AYB .. ARMENIAN SMALL LIGATURE ECH YIWN
+      (16#005D0#, 16#005EA#),  -- HEBREW LETTER ALEF .. HEBREW LETTER TAV
+      (16#005F0#, 16#005F2#),  -- HEBREW LIGATURE YIDDISH DOUBLE VAV .. HEBREW LIGATURE YIDDISH DOUBLE YOD
+      (16#00621#, 16#0063A#),  -- ARABIC LETTER HAMZA .. ARABIC LETTER GHAIN
+      (16#00640#, 16#0064A#),  -- ARABIC TATWEEL .. ARABIC LETTER YEH
+      (16#0066E#, 16#0066F#),  -- ARABIC LETTER DOTLESS BEH .. ARABIC LETTER DOTLESS QAF
+      (16#00671#, 16#006D3#),  -- ARABIC LETTER ALEF WASLA .. ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+      (16#006D5#, 16#006D5#),  -- ARABIC LETTER AE .. ARABIC LETTER AE
+      (16#006E5#, 16#006E6#),  -- ARABIC SMALL WAW .. ARABIC SMALL YEH
+      (16#006EE#, 16#006EF#),  -- ARABIC LETTER DAL WITH INVERTED V .. ARABIC LETTER REH WITH INVERTED V
+      (16#006FA#, 16#006FC#),  -- ARABIC LETTER SHEEN WITH DOT BELOW .. ARABIC LETTER GHAIN WITH DOT BELOW
+      (16#006FF#, 16#006FF#),  -- ARABIC LETTER HEH WITH INVERTED V .. ARABIC LETTER HEH WITH INVERTED V
+      (16#00710#, 16#00710#),  -- SYRIAC LETTER ALAPH .. SYRIAC LETTER ALAPH
+      (16#00712#, 16#0072F#),  -- SYRIAC LETTER BETH .. SYRIAC LETTER PERSIAN DHALATH
+      (16#0074D#, 16#0074F#),  -- SYRIAC LETTER SOGDIAN ZHAIN .. SYRIAC LETTER SOGDIAN FE
+      (16#00780#, 16#007A5#),  -- THAANA LETTER HAA .. THAANA LETTER WAAVU
+      (16#007B1#, 16#007B1#),  -- THAANA LETTER NAA .. THAANA LETTER NAA
+      (16#00904#, 16#00939#),  -- DEVANAGARI LETTER SHORT A .. DEVANAGARI LETTER HA
+      (16#0093D#, 16#0093D#),  -- DEVANAGARI SIGN AVAGRAHA .. DEVANAGARI SIGN AVAGRAHA
+      (16#00950#, 16#00950#),  -- DEVANAGARI OM .. DEVANAGARI OM
+      (16#00958#, 16#00961#),  -- DEVANAGARI LETTER QA .. DEVANAGARI LETTER VOCALIC LL
+      (16#00985#, 16#0098C#),  -- BENGALI LETTER A .. BENGALI LETTER VOCALIC L
+      (16#0098F#, 16#00990#),  -- BENGALI LETTER E .. BENGALI LETTER AI
+      (16#00993#, 16#009A8#),  -- BENGALI LETTER O .. BENGALI LETTER NA
+      (16#009AA#, 16#009B0#),  -- BENGALI LETTER PA .. BENGALI LETTER RA
+      (16#009B2#, 16#009B2#),  -- BENGALI LETTER LA .. BENGALI LETTER LA
+      (16#009B6#, 16#009B9#),  -- BENGALI LETTER SHA .. BENGALI LETTER HA
+      (16#009BD#, 16#009BD#),  -- BENGALI SIGN AVAGRAHA .. BENGALI SIGN AVAGRAHA
+      (16#009DC#, 16#009DD#),  -- BENGALI LETTER RRA .. BENGALI LETTER RHA
+      (16#009DF#, 16#009E1#),  -- BENGALI LETTER YYA .. BENGALI LETTER VOCALIC LL
+      (16#009F0#, 16#009F1#),  -- BENGALI LETTER RA WITH MIDDLE DIAGONAL .. BENGALI LETTER RA WITH LOWER DIAGONAL
+      (16#00A05#, 16#00A0A#),  -- GURMUKHI LETTER A .. GURMUKHI LETTER UU
+      (16#00A0F#, 16#00A10#),  -- GURMUKHI LETTER EE .. GURMUKHI LETTER AI
+      (16#00A13#, 16#00A28#),  -- GURMUKHI LETTER OO .. GURMUKHI LETTER NA
+      (16#00A2A#, 16#00A30#),  -- GURMUKHI LETTER PA .. GURMUKHI LETTER RA
+      (16#00A32#, 16#00A33#),  -- GURMUKHI LETTER LA .. GURMUKHI LETTER LLA
+      (16#00A35#, 16#00A36#),  -- GURMUKHI LETTER VA .. GURMUKHI LETTER SHA
+      (16#00A38#, 16#00A39#),  -- GURMUKHI LETTER SA .. GURMUKHI LETTER HA
+      (16#00A59#, 16#00A5C#),  -- GURMUKHI LETTER KHHA .. GURMUKHI LETTER RRA
+      (16#00A5E#, 16#00A5E#),  -- GURMUKHI LETTER FA .. GURMUKHI LETTER FA
+      (16#00A72#, 16#00A74#),  -- GURMUKHI IRI .. GURMUKHI EK ONKAR
+      (16#00A85#, 16#00A8D#),  -- GUJARATI LETTER A .. GUJARATI VOWEL CANDRA E
+      (16#00A8F#, 16#00A91#),  -- GUJARATI LETTER E .. GUJARATI VOWEL CANDRA O
+      (16#00A93#, 16#00AA8#),  -- GUJARATI LETTER O .. GUJARATI LETTER NA
+      (16#00AAA#, 16#00AB0#),  -- GUJARATI LETTER PA .. GUJARATI LETTER RA
+      (16#00AB2#, 16#00AB3#),  -- GUJARATI LETTER LA .. GUJARATI LETTER LLA
+      (16#00AB5#, 16#00AB9#),  -- GUJARATI LETTER VA .. GUJARATI LETTER HA
+      (16#00ABD#, 16#00ABD#),  -- GUJARATI SIGN AVAGRAHA .. GUJARATI SIGN AVAGRAHA
+      (16#00AD0#, 16#00AD0#),  -- GUJARATI OM .. GUJARATI OM
+      (16#00AE0#, 16#00AE1#),  -- GUJARATI LETTER VOCALIC RR .. GUJARATI LETTER VOCALIC LL
+      (16#00B05#, 16#00B0C#),  -- ORIYA LETTER A .. ORIYA LETTER VOCALIC L
+      (16#00B0F#, 16#00B10#),  -- ORIYA LETTER E .. ORIYA LETTER AI
+      (16#00B13#, 16#00B28#),  -- ORIYA LETTER O .. ORIYA LETTER NA
+      (16#00B2A#, 16#00B30#),  -- ORIYA LETTER PA .. ORIYA LETTER RA
+      (16#00B32#, 16#00B33#),  -- ORIYA LETTER LA .. ORIYA LETTER LLA
+      (16#00B35#, 16#00B39#),  -- ORIYA LETTER VA .. ORIYA LETTER HA
+      (16#00B3D#, 16#00B3D#),  -- ORIYA SIGN AVAGRAHA .. ORIYA SIGN AVAGRAHA
+      (16#00B5C#, 16#00B5D#),  -- ORIYA LETTER RRA .. ORIYA LETTER RHA
+      (16#00B5F#, 16#00B61#),  -- ORIYA LETTER YYA .. ORIYA LETTER VOCALIC LL
+      (16#00B71#, 16#00B71#),  -- ORIYA LETTER WA .. ORIYA LETTER WA
+      (16#00B83#, 16#00B83#),  -- TAMIL SIGN VISARGA .. TAMIL SIGN VISARGA
+      (16#00B85#, 16#00B8A#),  -- TAMIL LETTER A .. TAMIL LETTER UU
+      (16#00B8E#, 16#00B90#),  -- TAMIL LETTER E .. TAMIL LETTER AI
+      (16#00B92#, 16#00B95#),  -- TAMIL LETTER O .. TAMIL LETTER KA
+      (16#00B99#, 16#00B9A#),  -- TAMIL LETTER NGA .. TAMIL LETTER CA
+      (16#00B9C#, 16#00B9C#),  -- TAMIL LETTER JA .. TAMIL LETTER JA
+      (16#00B9E#, 16#00B9F#),  -- TAMIL LETTER NYA .. TAMIL LETTER TTA
+      (16#00BA3#, 16#00BA4#),  -- TAMIL LETTER NNA .. TAMIL LETTER TA
+      (16#00BA8#, 16#00BAA#),  -- TAMIL LETTER NA .. TAMIL LETTER PA
+      (16#00BAE#, 16#00BB5#),  -- TAMIL LETTER MA .. TAMIL LETTER VA
+      (16#00BB7#, 16#00BB9#),  -- TAMIL LETTER SSA .. TAMIL LETTER HA
+      (16#00C05#, 16#00C0C#),  -- TELUGU LETTER A .. TELUGU LETTER VOCALIC L
+      (16#00C0E#, 16#00C10#),  -- TELUGU LETTER E .. TELUGU LETTER AI
+      (16#00C12#, 16#00C28#),  -- TELUGU LETTER O .. TELUGU LETTER NA
+      (16#00C2A#, 16#00C33#),  -- TELUGU LETTER PA .. TELUGU LETTER LLA
+      (16#00C35#, 16#00C39#),  -- TELUGU LETTER VA .. TELUGU LETTER HA
+      (16#00C60#, 16#00C61#),  -- TELUGU LETTER VOCALIC RR .. TELUGU LETTER VOCALIC LL
+      (16#00C85#, 16#00C8C#),  -- KANNADA LETTER A .. KANNADA LETTER VOCALIC L
+      (16#00C8E#, 16#00C90#),  -- KANNADA LETTER E .. KANNADA LETTER AI
+      (16#00C92#, 16#00CA8#),  -- KANNADA LETTER O .. KANNADA LETTER NA
+      (16#00CAA#, 16#00CB3#),  -- KANNADA LETTER PA .. KANNADA LETTER LLA
+      (16#00CB5#, 16#00CB9#),  -- KANNADA LETTER VA .. KANNADA LETTER HA
+      (16#00CBD#, 16#00CBD#),  -- KANNADA SIGN AVAGRAHA .. KANNADA SIGN AVAGRAHA
+      (16#00CDE#, 16#00CDE#),  -- KANNADA LETTER FA .. KANNADA LETTER FA
+      (16#00CE0#, 16#00CE1#),  -- KANNADA LETTER VOCALIC RR .. KANNADA LETTER VOCALIC LL
+      (16#00D05#, 16#00D0C#),  -- MALAYALAM LETTER A .. MALAYALAM LETTER VOCALIC L
+      (16#00D0E#, 16#00D10#),  -- MALAYALAM LETTER E .. MALAYALAM LETTER AI
+      (16#00D12#, 16#00D28#),  -- MALAYALAM LETTER O .. MALAYALAM LETTER NA
+      (16#00D2A#, 16#00D39#),  -- MALAYALAM LETTER PA .. MALAYALAM LETTER HA
+      (16#00D60#, 16#00D61#),  -- MALAYALAM LETTER VOCALIC RR .. MALAYALAM LETTER VOCALIC LL
+      (16#00D85#, 16#00D96#),  -- SINHALA LETTER AYANNA .. SINHALA LETTER AUYANNA
+      (16#00D9A#, 16#00DB1#),  -- SINHALA LETTER ALPAPRAANA KAYANNA .. SINHALA LETTER DANTAJA NAYANNA
+      (16#00DB3#, 16#00DBB#),  -- SINHALA LETTER SANYAKA DAYANNA .. SINHALA LETTER RAYANNA
+      (16#00DBD#, 16#00DBD#),  -- SINHALA LETTER DANTAJA LAYANNA .. SINHALA LETTER DANTAJA LAYANNA
+      (16#00DC0#, 16#00DC6#),  -- SINHALA LETTER VAYANNA .. SINHALA LETTER FAYANNA
+      (16#00E01#, 16#00E30#),  -- THAI CHARACTER KO KAI .. THAI CHARACTER SARA A
+      (16#00E32#, 16#00E33#),  -- THAI CHARACTER SARA AA .. THAI CHARACTER SARA AM
+      (16#00E40#, 16#00E46#),  -- THAI CHARACTER SARA E .. THAI CHARACTER MAIYAMOK
+      (16#00E81#, 16#00E82#),  -- LAO LETTER KO .. LAO LETTER KHO SUNG
+      (16#00E84#, 16#00E84#),  -- LAO LETTER KHO TAM .. LAO LETTER KHO TAM
+      (16#00E87#, 16#00E88#),  -- LAO LETTER NGO .. LAO LETTER CO
+      (16#00E8A#, 16#00E8A#),  -- LAO LETTER SO TAM .. LAO LETTER SO TAM
+      (16#00E8D#, 16#00E8D#),  -- LAO LETTER NYO .. LAO LETTER NYO
+      (16#00E94#, 16#00E97#),  -- LAO LETTER DO .. LAO LETTER THO TAM
+      (16#00E99#, 16#00E9F#),  -- LAO LETTER NO .. LAO LETTER FO SUNG
+      (16#00EA1#, 16#00EA3#),  -- LAO LETTER MO .. LAO LETTER LO LING
+      (16#00EA5#, 16#00EA5#),  -- LAO LETTER LO LOOT .. LAO LETTER LO LOOT
+      (16#00EA7#, 16#00EA7#),  -- LAO LETTER WO .. LAO LETTER WO
+      (16#00EAA#, 16#00EAB#),  -- LAO LETTER SO SUNG .. LAO LETTER HO SUNG
+      (16#00EAD#, 16#00EB0#),  -- LAO LETTER O .. LAO VOWEL SIGN A
+      (16#00EB2#, 16#00EB3#),  -- LAO VOWEL SIGN AA .. LAO VOWEL SIGN AM
+      (16#00EBD#, 16#00EBD#),  -- LAO SEMIVOWEL SIGN NYO .. LAO SEMIVOWEL SIGN NYO
+      (16#00EC0#, 16#00EC4#),  -- LAO VOWEL SIGN E .. LAO VOWEL SIGN AI
+      (16#00EC6#, 16#00EC6#),  -- LAO KO LA .. LAO KO LA
+      (16#00EDC#, 16#00EDD#),  -- LAO HO NO .. LAO HO MO
+      (16#00F00#, 16#00F00#),  -- TIBETAN SYLLABLE OM .. TIBETAN SYLLABLE OM
+      (16#00F40#, 16#00F47#),  -- TIBETAN LETTER KA .. TIBETAN LETTER JA
+      (16#00F49#, 16#00F6A#),  -- TIBETAN LETTER NYA .. TIBETAN LETTER FIXED-FORM RA
+      (16#00F88#, 16#00F8B#),  -- TIBETAN SIGN LCE TSA CAN .. TIBETAN SIGN GRU MED RGYINGS
+      (16#01000#, 16#01021#),  -- MYANMAR LETTER KA .. MYANMAR LETTER A
+      (16#01023#, 16#01027#),  -- MYANMAR LETTER I .. MYANMAR LETTER E
+      (16#01029#, 16#0102A#),  -- MYANMAR LETTER O .. MYANMAR LETTER AU
+      (16#01050#, 16#01055#),  -- MYANMAR LETTER SHA .. MYANMAR LETTER VOCALIC LL
+      (16#010A0#, 16#010C5#),  -- GEORGIAN CAPITAL LETTER AN .. GEORGIAN CAPITAL LETTER HOE
+      (16#010D0#, 16#010F8#),  -- GEORGIAN LETTER AN .. GEORGIAN LETTER ELIFI
+      (16#01100#, 16#01159#),  -- HANGUL CHOSEONG KIYEOK .. HANGUL CHOSEONG YEORINHIEUH
+      (16#0115F#, 16#011A2#),  -- HANGUL CHOSEONG FILLER .. HANGUL JUNGSEONG SSANGARAEA
+      (16#011A8#, 16#011F9#),  -- HANGUL JONGSEONG KIYEOK .. HANGUL JONGSEONG YEORINHIEUH
+      (16#01200#, 16#01206#),  -- ETHIOPIC SYLLABLE HA .. ETHIOPIC SYLLABLE HO
+      (16#01208#, 16#01246#),  -- ETHIOPIC SYLLABLE LA .. ETHIOPIC SYLLABLE QO
+      (16#01248#, 16#01248#),  -- ETHIOPIC SYLLABLE QWA .. ETHIOPIC SYLLABLE QWA
+      (16#0124A#, 16#0124D#),  -- ETHIOPIC SYLLABLE QWI .. ETHIOPIC SYLLABLE QWE
+      (16#01250#, 16#01256#),  -- ETHIOPIC SYLLABLE QHA .. ETHIOPIC SYLLABLE QHO
+      (16#01258#, 16#01258#),  -- ETHIOPIC SYLLABLE QHWA .. ETHIOPIC SYLLABLE QHWA
+      (16#0125A#, 16#0125D#),  -- ETHIOPIC SYLLABLE QHWI .. ETHIOPIC SYLLABLE QHWE
+      (16#01260#, 16#01286#),  -- ETHIOPIC SYLLABLE BA .. ETHIOPIC SYLLABLE XO
+      (16#01288#, 16#01288#),  -- ETHIOPIC SYLLABLE XWA .. ETHIOPIC SYLLABLE XWA
+      (16#0128A#, 16#0128D#),  -- ETHIOPIC SYLLABLE XWI .. ETHIOPIC SYLLABLE XWE
+      (16#01290#, 16#012AE#),  -- ETHIOPIC SYLLABLE NA .. ETHIOPIC SYLLABLE KO
+      (16#012B0#, 16#012B0#),  -- ETHIOPIC SYLLABLE KWA .. ETHIOPIC SYLLABLE KWA
+      (16#012B2#, 16#012B5#),  -- ETHIOPIC SYLLABLE KWI .. ETHIOPIC SYLLABLE KWE
+      (16#012B8#, 16#012BE#),  -- ETHIOPIC SYLLABLE KXA .. ETHIOPIC SYLLABLE KXO
+      (16#012C0#, 16#012C0#),  -- ETHIOPIC SYLLABLE KXWA .. ETHIOPIC SYLLABLE KXWA
+      (16#012C2#, 16#012C5#),  -- ETHIOPIC SYLLABLE KXWI .. ETHIOPIC SYLLABLE KXWE
+      (16#012C8#, 16#012CE#),  -- ETHIOPIC SYLLABLE WA .. ETHIOPIC SYLLABLE WO
+      (16#012D0#, 16#012D6#),  -- ETHIOPIC SYLLABLE PHARYNGEAL A .. ETHIOPIC SYLLABLE PHARYNGEAL O
+      (16#012D8#, 16#012EE#),  -- ETHIOPIC SYLLABLE ZA .. ETHIOPIC SYLLABLE YO
+      (16#012F0#, 16#0130E#),  -- ETHIOPIC SYLLABLE DA .. ETHIOPIC SYLLABLE GO
+      (16#01310#, 16#01310#),  -- ETHIOPIC SYLLABLE GWA .. ETHIOPIC SYLLABLE GWA
+      (16#01312#, 16#01315#),  -- ETHIOPIC SYLLABLE GWI .. ETHIOPIC SYLLABLE GWE
+      (16#01318#, 16#0131E#),  -- ETHIOPIC SYLLABLE GGA .. ETHIOPIC SYLLABLE GGO
+      (16#01320#, 16#01346#),  -- ETHIOPIC SYLLABLE THA .. ETHIOPIC SYLLABLE TZO
+      (16#01348#, 16#0135A#),  -- ETHIOPIC SYLLABLE FA .. ETHIOPIC SYLLABLE FYA
+      (16#013A0#, 16#013F4#),  -- CHEROKEE LETTER A .. CHEROKEE LETTER YV
+      (16#01401#, 16#0166C#),  -- CANADIAN SYLLABICS E .. CANADIAN SYLLABICS CARRIER TTSA
+      (16#0166F#, 16#01676#),  -- CANADIAN SYLLABICS QAI .. CANADIAN SYLLABICS NNGAA
+      (16#01681#, 16#0169A#),  -- OGHAM LETTER BEITH .. OGHAM LETTER PEITH
+      (16#016A0#, 16#016EA#),  -- RUNIC LETTER FEHU FEOH FE F .. RUNIC LETTER X
+      (16#016EE#, 16#016F0#),  -- RUNIC ARLAUG SYMBOL .. RUNIC BELGTHOR SYMBOL
+      (16#01700#, 16#0170C#),  -- TAGALOG LETTER A .. TAGALOG LETTER YA
+      (16#0170E#, 16#01711#),  -- TAGALOG LETTER LA .. TAGALOG LETTER HA
+      (16#01720#, 16#01731#),  -- HANUNOO LETTER A .. HANUNOO LETTER HA
+      (16#01740#, 16#01751#),  -- BUHID LETTER A .. BUHID LETTER HA
+      (16#01760#, 16#0176C#),  -- TAGBANWA LETTER A .. TAGBANWA LETTER YA
+      (16#0176E#, 16#01770#),  -- TAGBANWA LETTER LA .. TAGBANWA LETTER SA
+      (16#01780#, 16#017B3#),  -- KHMER LETTER KA .. KHMER INDEPENDENT VOWEL QAU
+      (16#017D7#, 16#017D7#),  -- KHMER SIGN LEK TOO .. KHMER SIGN LEK TOO
+      (16#017DC#, 16#017DC#),  -- KHMER SIGN AVAKRAHASANYA .. KHMER SIGN AVAKRAHASANYA
+      (16#01820#, 16#01877#),  -- MONGOLIAN LETTER A .. MONGOLIAN LETTER MANCHU ZHA
+      (16#01880#, 16#018A8#),  -- MONGOLIAN LETTER ALI GALI ANUSVARA ONE .. MONGOLIAN LETTER MANCHU ALI GALI BHA
+      (16#01900#, 16#0191C#),  -- LIMBU VOWEL-CARRIER LETTER .. LIMBU LETTER HA
+      (16#01950#, 16#0196D#),  -- TAI LE LETTER KA .. TAI LE LETTER AI
+      (16#01970#, 16#01974#),  -- TAI LE LETTER TONE-2 .. TAI LE LETTER TONE-6
+      (16#01D00#, 16#01D6B#),  -- LATIN LETTER SMALL CAPITAL A .. LATIN SMALL LETTER UE
+      (16#01E00#, 16#01E9B#),  -- LATIN CAPITAL LETTER A WITH RING BELOW .. LATIN SMALL LETTER LONG S WITH DOT ABOVE
+      (16#01EA0#, 16#01EF9#),  -- LATIN CAPITAL LETTER A WITH DOT BELOW .. LATIN SMALL LETTER Y WITH TILDE
+      (16#01F00#, 16#01F15#),  -- GREEK SMALL LETTER ALPHA WITH PSILI .. GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+      (16#01F18#, 16#01F1D#),  -- GREEK CAPITAL LETTER EPSILON WITH PSILI .. GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+      (16#01F20#, 16#01F45#),  -- GREEK SMALL LETTER ETA WITH PSILI .. GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+      (16#01F48#, 16#01F4D#),  -- GREEK CAPITAL LETTER OMICRON WITH PSILI .. GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+      (16#01F50#, 16#01F57#),  -- GREEK SMALL LETTER UPSILON WITH PSILI .. GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+      (16#01F59#, 16#01F59#),  -- GREEK CAPITAL LETTER UPSILON WITH DASIA .. GREEK CAPITAL LETTER UPSILON WITH DASIA
+      (16#01F5B#, 16#01F5B#),  -- GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA .. GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+      (16#01F5D#, 16#01F5D#),  -- GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA .. GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+      (16#01F5F#, 16#01F7D#),  -- GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI .. GREEK SMALL LETTER OMEGA WITH OXIA
+      (16#01F80#, 16#01FB4#),  -- GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI .. GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+      (16#01FB6#, 16#01FBC#),  -- GREEK SMALL LETTER ALPHA WITH PERISPOMENI .. GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+      (16#01FBE#, 16#01FBE#),  -- GREEK PROSGEGRAMMENI .. GREEK PROSGEGRAMMENI
+      (16#01FC2#, 16#01FC4#),  -- GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI .. GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+      (16#01FC6#, 16#01FCC#),  -- GREEK SMALL LETTER ETA WITH PERISPOMENI .. GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+      (16#01FD0#, 16#01FD3#),  -- GREEK SMALL LETTER IOTA WITH VRACHY .. GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+      (16#01FD6#, 16#01FDB#),  -- GREEK SMALL LETTER IOTA WITH PERISPOMENI .. GREEK CAPITAL LETTER IOTA WITH OXIA
+      (16#01FE0#, 16#01FEC#),  -- GREEK SMALL LETTER UPSILON WITH VRACHY .. GREEK CAPITAL LETTER RHO WITH DASIA
+      (16#01FF2#, 16#01FF4#),  -- GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI .. GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+      (16#01FF6#, 16#01FFC#),  -- GREEK SMALL LETTER OMEGA WITH PERISPOMENI .. GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+      (16#02071#, 16#02071#),  -- SUPERSCRIPT LATIN SMALL LETTER I .. SUPERSCRIPT LATIN SMALL LETTER I
+      (16#0207F#, 16#0207F#),  -- SUPERSCRIPT LATIN SMALL LETTER N .. SUPERSCRIPT LATIN SMALL LETTER N
+      (16#02102#, 16#02102#),  -- DOUBLE-STRUCK CAPITAL C .. DOUBLE-STRUCK CAPITAL C
+      (16#02107#, 16#02107#),  -- EULER CONSTANT .. EULER CONSTANT
+      (16#0210A#, 16#02113#),  -- SCRIPT SMALL G .. SCRIPT SMALL L
+      (16#02115#, 16#02115#),  -- DOUBLE-STRUCK CAPITAL N .. DOUBLE-STRUCK CAPITAL N
+      (16#02119#, 16#0211D#),  -- DOUBLE-STRUCK CAPITAL P .. DOUBLE-STRUCK CAPITAL R
+      (16#02124#, 16#02124#),  -- DOUBLE-STRUCK CAPITAL Z .. DOUBLE-STRUCK CAPITAL Z
+      (16#02126#, 16#02126#),  -- OHM SIGN .. OHM SIGN
+      (16#02128#, 16#02128#),  -- BLACK-LETTER CAPITAL Z .. BLACK-LETTER CAPITAL Z
+      (16#0212A#, 16#0212D#),  -- KELVIN SIGN .. BLACK-LETTER CAPITAL C
+      (16#0212F#, 16#02131#),  -- SCRIPT SMALL E .. SCRIPT CAPITAL F
+      (16#02133#, 16#02139#),  -- SCRIPT CAPITAL M .. INFORMATION SOURCE
+      (16#0213D#, 16#0213F#),  -- DOUBLE-STRUCK SMALL GAMMA .. DOUBLE-STRUCK CAPITAL PI
+      (16#02145#, 16#02149#),  -- DOUBLE-STRUCK ITALIC CAPITAL D .. DOUBLE-STRUCK ITALIC SMALL J
+      (16#02160#, 16#02183#),  -- ROMAN NUMERAL ONE .. ROMAN NUMERAL REVERSED ONE HUNDRED
+      (16#03005#, 16#03007#),  -- IDEOGRAPHIC ITERATION MARK .. IDEOGRAPHIC NUMBER ZERO
+      (16#03021#, 16#03029#),  -- HANGZHOU NUMERAL ONE .. HANGZHOU NUMERAL NINE
+      (16#03031#, 16#03035#),  -- VERTICAL KANA REPEAT MARK .. VERTICAL KANA REPEAT MARK LOWER HALF
+      (16#03038#, 16#0303C#),  -- HANGZHOU NUMERAL TEN .. MASU MARK
+      (16#03041#, 16#03096#),  -- HIRAGANA LETTER SMALL A .. HIRAGANA LETTER SMALL KE
+      (16#0309D#, 16#0309F#),  -- HIRAGANA ITERATION MARK .. HIRAGANA DIGRAPH YORI
+      (16#030A1#, 16#030FA#),  -- KATAKANA LETTER SMALL A .. KATAKANA LETTER VO
+      (16#030FC#, 16#030FF#),  -- KATAKANA-HIRAGANA PROLONGED SOUND MARK .. KATAKANA DIGRAPH KOTO
+      (16#03105#, 16#0312C#),  -- BOPOMOFO LETTER B .. BOPOMOFO LETTER GN
+      (16#03131#, 16#0318E#),  -- HANGUL LETTER KIYEOK .. HANGUL LETTER ARAEAE
+      (16#031A0#, 16#031B7#),  -- BOPOMOFO LETTER BU .. BOPOMOFO FINAL LETTER H
+      (16#031F0#, 16#031FF#),  -- KATAKANA LETTER SMALL KU .. KATAKANA LETTER SMALL RO
+      (16#03400#, 16#04DB5#),  -- <CJK Ideograph Extension A, First> .. <CJK Ideograph Extension A, Last>
+      (16#04E00#, 16#09FA5#),  -- <CJK Ideograph, First> .. <CJK Ideograph, Last>
+      (16#0A000#, 16#0A48C#),  -- YI SYLLABLE IT .. YI SYLLABLE YYR
+      (16#0AC00#, 16#0D7A3#),  -- <Hangul Syllable, First> .. <Hangul Syllable, Last>
+      (16#0F900#, 16#0FA2D#),  -- CJK COMPATIBILITY IDEOGRAPH-F900 .. CJK COMPATIBILITY IDEOGRAPH-FA2D
+      (16#0FA30#, 16#0FA6A#),  -- CJK COMPATIBILITY IDEOGRAPH-FA30 .. CJK COMPATIBILITY IDEOGRAPH-FA6A
+      (16#0FB00#, 16#0FB06#),  -- LATIN SMALL LIGATURE FF .. LATIN SMALL LIGATURE ST
+      (16#0FB13#, 16#0FB17#),  -- ARMENIAN SMALL LIGATURE MEN NOW .. ARMENIAN SMALL LIGATURE MEN XEH
+      (16#0FB1D#, 16#0FB1D#),  -- HEBREW LETTER YOD WITH HIRIQ .. HEBREW LETTER YOD WITH HIRIQ
+      (16#0FB1F#, 16#0FB28#),  -- HEBREW LIGATURE YIDDISH YOD YOD PATAH .. HEBREW LETTER WIDE TAV
+      (16#0FB2A#, 16#0FB36#),  -- HEBREW LETTER SHIN WITH SHIN DOT .. HEBREW LETTER ZAYIN WITH DAGESH
+      (16#0FB38#, 16#0FB3C#),  -- HEBREW LETTER TET WITH DAGESH .. HEBREW LETTER LAMED WITH DAGESH
+      (16#0FB3E#, 16#0FB3E#),  -- HEBREW LETTER MEM WITH DAGESH .. HEBREW LETTER MEM WITH DAGESH
+      (16#0FB40#, 16#0FB41#),  -- HEBREW LETTER NUN WITH DAGESH .. HEBREW LETTER SAMEKH WITH DAGESH
+      (16#0FB43#, 16#0FB44#),  -- HEBREW LETTER FINAL PE WITH DAGESH .. HEBREW LETTER PE WITH DAGESH
+      (16#0FB46#, 16#0FBB1#),  -- HEBREW LETTER TSADI WITH DAGESH .. ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
+      (16#0FBD3#, 16#0FD3D#),  -- ARABIC LETTER NG ISOLATED FORM .. ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+      (16#0FD50#, 16#0FD8F#),  -- ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM .. ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+      (16#0FD92#, 16#0FDC7#),  -- ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM .. ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+      (16#0FDF0#, 16#0FDFB#),  -- ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM .. ARABIC LIGATURE JALLAJALALOUHOU
+      (16#0FE70#, 16#0FE74#),  -- ARABIC FATHATAN ISOLATED FORM .. ARABIC KASRATAN ISOLATED FORM
+      (16#0FE76#, 16#0FEFC#),  -- ARABIC FATHA ISOLATED FORM .. ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+      (16#0FF21#, 16#0FF3A#),  -- FULLWIDTH LATIN CAPITAL LETTER A .. FULLWIDTH LATIN CAPITAL LETTER Z
+      (16#0FF41#, 16#0FF5A#),  -- FULLWIDTH LATIN SMALL LETTER A .. FULLWIDTH LATIN SMALL LETTER Z
+      (16#0FF66#, 16#0FFBE#),  -- HALFWIDTH KATAKANA LETTER WO .. HALFWIDTH HANGUL LETTER HIEUH
+      (16#0FFC2#, 16#0FFC7#),  -- HALFWIDTH HANGUL LETTER A .. HALFWIDTH HANGUL LETTER E
+      (16#0FFCA#, 16#0FFCF#),  -- HALFWIDTH HANGUL LETTER YEO .. HALFWIDTH HANGUL LETTER OE
+      (16#0FFD2#, 16#0FFD7#),  -- HALFWIDTH HANGUL LETTER YO .. HALFWIDTH HANGUL LETTER YU
+      (16#0FFDA#, 16#0FFDC#),  -- HALFWIDTH HANGUL LETTER EU .. HALFWIDTH HANGUL LETTER I
+      (16#10000#, 16#1000B#),  -- LINEAR B SYLLABLE B008 A .. LINEAR B SYLLABLE B046 JE
+      (16#1000D#, 16#10026#),  -- LINEAR B SYLLABLE B036 JO .. LINEAR B SYLLABLE B032 QO
+      (16#10028#, 16#1003A#),  -- LINEAR B SYLLABLE B060 RA .. LINEAR B SYLLABLE B042 WO
+      (16#1003C#, 16#1003D#),  -- LINEAR B SYLLABLE B017 ZA .. LINEAR B SYLLABLE B074 ZE
+      (16#1003F#, 16#1004D#),  -- LINEAR B SYLLABLE B020 ZO .. LINEAR B SYLLABLE B091 TWO
+      (16#10050#, 16#1005D#),  -- LINEAR B SYMBOL B018 .. LINEAR B SYMBOL B089
+      (16#10080#, 16#100FA#),  -- LINEAR B IDEOGRAM B100 MAN .. LINEAR B IDEOGRAM VESSEL B305
+      (16#10300#, 16#1031E#),  -- OLD ITALIC LETTER A .. OLD ITALIC LETTER UU
+      (16#10330#, 16#1034A#),  -- GOTHIC LETTER AHSA .. GOTHIC LETTER NINE HUNDRED
+      (16#10380#, 16#1039D#),  -- UGARITIC LETTER ALPA .. UGARITIC LETTER SSU
+      (16#10400#, 16#1049D#),  -- DESERET CAPITAL LETTER LONG I .. OSMANYA LETTER OO
+      (16#10800#, 16#10805#),  -- CYPRIOT SYLLABLE A .. CYPRIOT SYLLABLE JA
+      (16#10808#, 16#10808#),  -- CYPRIOT SYLLABLE JO .. CYPRIOT SYLLABLE JO
+      (16#1080A#, 16#10835#),  -- CYPRIOT SYLLABLE KA .. CYPRIOT SYLLABLE WO
+      (16#10837#, 16#10838#),  -- CYPRIOT SYLLABLE XA .. CYPRIOT SYLLABLE XE
+      (16#1083C#, 16#1083C#),  -- CYPRIOT SYLLABLE ZA .. CYPRIOT SYLLABLE ZA
+      (16#1083F#, 16#1083F#),  -- CYPRIOT SYLLABLE ZO .. CYPRIOT SYLLABLE ZO
+      (16#1D400#, 16#1D454#),  -- MATHEMATICAL BOLD CAPITAL A .. MATHEMATICAL ITALIC SMALL G
+      (16#1D456#, 16#1D49C#),  -- MATHEMATICAL ITALIC SMALL I .. MATHEMATICAL SCRIPT CAPITAL A
+      (16#1D49E#, 16#1D49F#),  -- MATHEMATICAL SCRIPT CAPITAL C .. MATHEMATICAL SCRIPT CAPITAL D
+      (16#1D4A2#, 16#1D4A2#),  -- MATHEMATICAL SCRIPT CAPITAL G .. MATHEMATICAL SCRIPT CAPITAL G
+      (16#1D4A5#, 16#1D4A6#),  -- MATHEMATICAL SCRIPT CAPITAL J .. MATHEMATICAL SCRIPT CAPITAL K
+      (16#1D4A9#, 16#1D4AC#),  -- MATHEMATICAL SCRIPT CAPITAL N .. MATHEMATICAL SCRIPT CAPITAL Q
+      (16#1D4AE#, 16#1D4B9#),  -- MATHEMATICAL SCRIPT CAPITAL S .. MATHEMATICAL SCRIPT SMALL D
+      (16#1D4BB#, 16#1D4BB#),  -- MATHEMATICAL SCRIPT SMALL F .. MATHEMATICAL SCRIPT SMALL F
+      (16#1D4BD#, 16#1D4C3#),  -- MATHEMATICAL SCRIPT SMALL H .. MATHEMATICAL SCRIPT SMALL N
+      (16#1D4C5#, 16#1D505#),  -- MATHEMATICAL SCRIPT SMALL P .. MATHEMATICAL FRAKTUR CAPITAL B
+      (16#1D507#, 16#1D50A#),  -- MATHEMATICAL FRAKTUR CAPITAL D .. MATHEMATICAL FRAKTUR CAPITAL G
+      (16#1D50D#, 16#1D514#),  -- MATHEMATICAL FRAKTUR CAPITAL J .. MATHEMATICAL FRAKTUR CAPITAL Q
+      (16#1D516#, 16#1D51C#),  -- MATHEMATICAL FRAKTUR CAPITAL S .. MATHEMATICAL FRAKTUR CAPITAL Y
+      (16#1D51E#, 16#1D539#),  -- MATHEMATICAL FRAKTUR SMALL A .. MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+      (16#1D53B#, 16#1D53E#),  -- MATHEMATICAL DOUBLE-STRUCK CAPITAL D .. MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+      (16#1D540#, 16#1D544#),  -- MATHEMATICAL DOUBLE-STRUCK CAPITAL I .. MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+      (16#1D546#, 16#1D546#),  -- MATHEMATICAL DOUBLE-STRUCK CAPITAL O .. MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+      (16#1D54A#, 16#1D550#),  -- MATHEMATICAL DOUBLE-STRUCK CAPITAL S .. MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+      (16#1D552#, 16#1D6A3#),  -- MATHEMATICAL DOUBLE-STRUCK SMALL A .. MATHEMATICAL MONOSPACE SMALL Z
+      (16#1D6A8#, 16#1D6C0#),  -- MATHEMATICAL BOLD CAPITAL ALPHA .. MATHEMATICAL BOLD CAPITAL OMEGA
+      (16#1D6C2#, 16#1D6DA#),  -- MATHEMATICAL BOLD SMALL ALPHA .. MATHEMATICAL BOLD SMALL OMEGA
+      (16#1D6DC#, 16#1D6FA#),  -- MATHEMATICAL BOLD EPSILON SYMBOL .. MATHEMATICAL ITALIC CAPITAL OMEGA
+      (16#1D6FC#, 16#1D714#),  -- MATHEMATICAL ITALIC SMALL ALPHA .. MATHEMATICAL ITALIC SMALL OMEGA
+      (16#1D716#, 16#1D734#),  -- MATHEMATICAL ITALIC EPSILON SYMBOL .. MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+      (16#1D736#, 16#1D74E#),  -- MATHEMATICAL BOLD ITALIC SMALL ALPHA .. MATHEMATICAL BOLD ITALIC SMALL OMEGA
+      (16#1D750#, 16#1D76E#),  -- MATHEMATICAL BOLD ITALIC EPSILON SYMBOL .. MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+      (16#1D770#, 16#1D788#),  -- MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA .. MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+      (16#1D78A#, 16#1D7A8#),  -- MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL .. MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+      (16#1D7AA#, 16#1D7C2#),  -- MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA .. MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+      (16#1D7C4#, 16#1D7C9#),  -- MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL .. MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL
+      (16#20000#, 16#2A6D6#),  -- <CJK Ideograph Extension B, First> .. <CJK Ideograph Extension B, Last>
+      (16#2F800#, 16#2FA1D#)); -- CJK COMPATIBILITY IDEOGRAPH-2F800 .. CJK COMPATIBILITY IDEOGRAPH-2FA1D
+ 
+    --  The following table includes all characters considered spaces, i.e.
+    --  all characters from the Unicode table with categories:
+ 
+    --    Separator, Space (Zs)
+ 
+    UTF_32_Spaces : constant UTF_32_Ranges := (
+      (16#00020#, 16#00020#),  -- SPACE .. SPACE
+      (16#000A0#, 16#000A0#),  -- NO-BREAK SPACE .. NO-BREAK SPACE
+      (16#01680#, 16#01680#),  -- OGHAM SPACE MARK .. OGHAM SPACE MARK
+      (16#0180E#, 16#0180E#),  -- MONGOLIAN VOWEL SEPARATOR .. MONGOLIAN VOWEL SEPARATOR
+      (16#02000#, 16#0200B#),  -- EN QUAD .. ZERO WIDTH SPACE
+      (16#0202F#, 16#0202F#),  -- NARROW NO-BREAK SPACE .. NARROW NO-BREAK SPACE
+      (16#0205F#, 16#0205F#),  -- MEDIUM MATHEMATICAL SPACE .. MEDIUM MATHEMATICAL SPACE
+      (16#03000#, 16#03000#)); -- IDEOGRAPHIC SPACE .. IDEOGRAPHIC SPACE
+ 
+    --  The following table includes all characters considered punctuation,
+    --  i.e. all characters from the Unicode table with categories:
+ 
+    --    Punctuation, Connector (Pc)
+ 
+    UTF_32_Punctuation : constant UTF_32_Ranges := (
+      (16#0005F#, 16#0005F#),  -- LOW LINE .. LOW LINE
+      (16#0203F#, 16#02040#),  -- UNDERTIE .. CHARACTER TIE
+      (16#02054#, 16#02054#),  -- INVERTED UNDERTIE .. INVERTED UNDERTIE
+      (16#030FB#, 16#030FB#),  -- KATAKANA MIDDLE DOT .. KATAKANA MIDDLE DOT
+      (16#0FE33#, 16#0FE34#),  -- PRESENTATION FORM FOR VERTICAL LOW LINE .. PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
+      (16#0FE4D#, 16#0FE4F#),  -- DASHED LOW LINE .. WAVY LOW LINE
+      (16#0FF3F#, 16#0FF3F#),  -- FULLWIDTH LOW LINE .. FULLWIDTH LOW LINE
+      (16#0FF65#, 16#0FF65#)); -- HALFWIDTH KATAKANA MIDDLE DOT .. HALFWIDTH KATAKANA MIDDLE DOT
+ 
+    --  The following table includes all characters considered as other format,
+    --  i.e. all characters from the Unicode table with categories:
+ 
+    --    Other, Format (Cf)
+ 
+    UTF_32_Other_Format : constant UTF_32_Ranges := (
+      (16#000AD#, 16#000AD#),  -- SOFT HYPHEN .. SOFT HYPHEN
+      (16#00600#, 16#00603#),  -- ARABIC NUMBER SIGN .. ARABIC SIGN SAFHA
+      (16#006DD#, 16#006DD#),  -- ARABIC END OF AYAH .. ARABIC END OF AYAH
+      (16#0070F#, 16#0070F#),  -- SYRIAC ABBREVIATION MARK .. SYRIAC ABBREVIATION MARK
+      (16#017B4#, 16#017B5#),  -- KHMER VOWEL INHERENT AQ .. KHMER VOWEL INHERENT AA
+      (16#0200C#, 16#0200F#),  -- ZERO WIDTH NON-JOINER .. RIGHT-TO-LEFT MARK
+      (16#0202A#, 16#0202E#),  -- LEFT-TO-RIGHT EMBEDDING .. RIGHT-TO-LEFT OVERRIDE
+      (16#02060#, 16#02063#),  -- WORD JOINER .. INVISIBLE SEPARATOR
+      (16#0206A#, 16#0206F#),  -- INHIBIT SYMMETRIC SWAPPING .. NOMINAL DIGIT SHAPES
+      (16#0FEFF#, 16#0FEFF#),  -- ZERO WIDTH NO-BREAK SPACE .. ZERO WIDTH NO-BREAK SPACE
+      (16#0FFF9#, 16#0FFFB#),  -- INTERLINEAR ANNOTATION ANCHOR .. INTERLINEAR ANNOTATION TERMINATOR
+      (16#1D173#, 16#1D17A#),  -- MUSICAL SYMBOL BEGIN BEAM .. MUSICAL SYMBOL END PHRASE
+      (16#E0001#, 16#E0001#),  -- LANGUAGE TAG .. LANGUAGE TAG
+      (16#E0020#, 16#E007F#)); -- TAG SPACE .. CANCEL TAG
+ 
+    --  The following table includes all characters considered marks i.e.
+    --  all characters from the Unicode table with categories:
+ 
+    --    Mark, Nonspacing (Mn)
+    --    Mark, Spacing Combining (Mc)
+ 
+    UTF_32_Marks : constant UTF_32_Ranges := (
+      (16#00300#, 16#00357#),  -- COMBINING GRAVE ACCENT .. COMBINING RIGHT HALF RING ABOVE
+      (16#0035D#, 16#0036F#),  -- COMBINING DOUBLE BREVE .. COMBINING LATIN SMALL LETTER X
+      (16#00483#, 16#00486#),  -- COMBINING CYRILLIC TITLO .. COMBINING CYRILLIC PSILI PNEUMATA
+      (16#00591#, 16#005A1#),  -- HEBREW ACCENT ETNAHTA .. HEBREW ACCENT PAZER
+      (16#005A3#, 16#005B9#),  -- HEBREW ACCENT MUNAH .. HEBREW POINT HOLAM
+      (16#005BB#, 16#005BD#),  -- HEBREW POINT QUBUTS .. HEBREW POINT METEG
+      (16#005BF#, 16#005BF#),  -- HEBREW POINT RAFE .. HEBREW POINT RAFE
+      (16#005C1#, 16#005C2#),  -- HEBREW POINT SHIN DOT .. HEBREW POINT SIN DOT
+      (16#005C4#, 16#005C4#),  -- HEBREW MARK UPPER DOT .. HEBREW MARK UPPER DOT
+      (16#00610#, 16#00615#),  -- ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM .. ARABIC SMALL HIGH TAH
+      (16#0064B#, 16#00658#),  -- ARABIC FATHATAN .. ARABIC MARK NOON GHUNNA
+      (16#00670#, 16#00670#),  -- ARABIC LETTER SUPERSCRIPT ALEF .. ARABIC LETTER SUPERSCRIPT ALEF
+      (16#006D6#, 16#006DC#),  -- ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA .. ARABIC SMALL HIGH SEEN
+      (16#006DF#, 16#006E4#),  -- ARABIC SMALL HIGH ROUNDED ZERO .. ARABIC SMALL HIGH MADDA
+      (16#006E7#, 16#006E8#),  -- ARABIC SMALL HIGH YEH .. ARABIC SMALL HIGH NOON
+      (16#006EA#, 16#006ED#),  -- ARABIC EMPTY CENTRE LOW STOP .. ARABIC SMALL LOW MEEM
+      (16#00711#, 16#00711#),  -- SYRIAC LETTER SUPERSCRIPT ALAPH .. SYRIAC LETTER SUPERSCRIPT ALAPH
+      (16#00730#, 16#0074A#),  -- SYRIAC PTHAHA ABOVE .. SYRIAC BARREKH
+      (16#007A6#, 16#007B0#),  -- THAANA ABAFILI .. THAANA SUKUN
+      (16#00901#, 16#00903#),  -- DEVANAGARI SIGN CANDRABINDU .. DEVANAGARI SIGN VISARGA
+      (16#0093C#, 16#0093C#),  -- DEVANAGARI SIGN NUKTA .. DEVANAGARI SIGN NUKTA
+      (16#0093E#, 16#0094D#),  -- DEVANAGARI VOWEL SIGN AA .. DEVANAGARI SIGN VIRAMA
+      (16#00951#, 16#00954#),  -- DEVANAGARI STRESS SIGN UDATTA .. DEVANAGARI ACUTE ACCENT
+      (16#00962#, 16#00963#),  -- DEVANAGARI VOWEL SIGN VOCALIC L .. DEVANAGARI VOWEL SIGN VOCALIC LL
+      (16#00981#, 16#00983#),  -- BENGALI SIGN CANDRABINDU .. BENGALI SIGN VISARGA
+      (16#009BC#, 16#009BC#),  -- BENGALI SIGN NUKTA .. BENGALI SIGN NUKTA
+      (16#009BE#, 16#009C4#),  -- BENGALI VOWEL SIGN AA .. BENGALI VOWEL SIGN VOCALIC RR
+      (16#009C7#, 16#009C8#),  -- BENGALI VOWEL SIGN E .. BENGALI VOWEL SIGN AI
+      (16#009CB#, 16#009CD#),  -- BENGALI VOWEL SIGN O .. BENGALI SIGN VIRAMA
+      (16#009D7#, 16#009D7#),  -- BENGALI AU LENGTH MARK .. BENGALI AU LENGTH MARK
+      (16#009E2#, 16#009E3#),  -- BENGALI VOWEL SIGN VOCALIC L .. BENGALI VOWEL SIGN VOCALIC LL
+      (16#00A01#, 16#00A03#),  -- GURMUKHI SIGN ADAK BINDI .. GURMUKHI SIGN VISARGA
+      (16#00A3C#, 16#00A3C#),  -- GURMUKHI SIGN NUKTA .. GURMUKHI SIGN NUKTA
+      (16#00A3E#, 16#00A42#),  -- GURMUKHI VOWEL SIGN AA .. GURMUKHI VOWEL SIGN UU
+      (16#00A47#, 16#00A48#),  -- GURMUKHI VOWEL SIGN EE .. GURMUKHI VOWEL SIGN AI
+      (16#00A4B#, 16#00A4D#),  -- GURMUKHI VOWEL SIGN OO .. GURMUKHI SIGN VIRAMA
+      (16#00A70#, 16#00A71#),  -- GURMUKHI TIPPI .. GURMUKHI ADDAK
+      (16#00A81#, 16#00A83#),  -- GUJARATI SIGN CANDRABINDU .. GUJARATI SIGN VISARGA
+      (16#00ABC#, 16#00ABC#),  -- GUJARATI SIGN NUKTA .. GUJARATI SIGN NUKTA
+      (16#00ABE#, 16#00AC5#),  -- GUJARATI VOWEL SIGN AA .. GUJARATI VOWEL SIGN CANDRA E
+      (16#00AC7#, 16#00AC9#),  -- GUJARATI VOWEL SIGN E .. GUJARATI VOWEL SIGN CANDRA O
+      (16#00ACB#, 16#00ACD#),  -- GUJARATI VOWEL SIGN O .. GUJARATI SIGN VIRAMA
+      (16#00AE2#, 16#00AE3#),  -- GUJARATI VOWEL SIGN VOCALIC L .. GUJARATI VOWEL SIGN VOCALIC LL
+      (16#00B01#, 16#00B03#),  -- ORIYA SIGN CANDRABINDU .. ORIYA SIGN VISARGA
+      (16#00B3C#, 16#00B3C#),  -- ORIYA SIGN NUKTA .. ORIYA SIGN NUKTA
+      (16#00B3E#, 16#00B43#),  -- ORIYA VOWEL SIGN AA .. ORIYA VOWEL SIGN VOCALIC R
+      (16#00B47#, 16#00B48#),  -- ORIYA VOWEL SIGN E .. ORIYA VOWEL SIGN AI
+      (16#00B4B#, 16#00B4D#),  -- ORIYA VOWEL SIGN O .. ORIYA SIGN VIRAMA
+      (16#00B56#, 16#00B57#),  -- ORIYA AI LENGTH MARK .. ORIYA AU LENGTH MARK
+      (16#00B82#, 16#00B82#),  -- TAMIL SIGN ANUSVARA .. TAMIL SIGN ANUSVARA
+      (16#00BBE#, 16#00BC2#),  -- TAMIL VOWEL SIGN AA .. TAMIL VOWEL SIGN UU
+      (16#00BC6#, 16#00BC8#),  -- TAMIL VOWEL SIGN E .. TAMIL VOWEL SIGN AI
+      (16#00BCA#, 16#00BCD#),  -- TAMIL VOWEL SIGN O .. TAMIL SIGN VIRAMA
+      (16#00BD7#, 16#00BD7#),  -- TAMIL AU LENGTH MARK .. TAMIL AU LENGTH MARK
+      (16#00C01#, 16#00C03#),  -- TELUGU SIGN CANDRABINDU .. TELUGU SIGN VISARGA
+      (16#00C3E#, 16#00C44#),  -- TELUGU VOWEL SIGN AA .. TELUGU VOWEL SIGN VOCALIC RR
+      (16#00C46#, 16#00C48#),  -- TELUGU VOWEL SIGN E .. TELUGU VOWEL SIGN AI
+      (16#00C4A#, 16#00C4D#),  -- TELUGU VOWEL SIGN O .. TELUGU SIGN VIRAMA
+      (16#00C55#, 16#00C56#),  -- TELUGU LENGTH MARK .. TELUGU AI LENGTH MARK
+      (16#00C82#, 16#00C83#),  -- KANNADA SIGN ANUSVARA .. KANNADA SIGN VISARGA
+      (16#00CBC#, 16#00CBC#),  -- KANNADA SIGN NUKTA .. KANNADA SIGN NUKTA
+      (16#00CBE#, 16#00CC4#),  -- KANNADA VOWEL SIGN AA .. KANNADA VOWEL SIGN VOCALIC RR
+      (16#00CC6#, 16#00CC8#),  -- KANNADA VOWEL SIGN E .. KANNADA VOWEL SIGN AI
+      (16#00CCA#, 16#00CCD#),  -- KANNADA VOWEL SIGN O .. KANNADA SIGN VIRAMA
+      (16#00CD5#, 16#00CD6#),  -- KANNADA LENGTH MARK .. KANNADA AI LENGTH MARK
+      (16#00D02#, 16#00D03#),  -- MALAYALAM SIGN ANUSVARA .. MALAYALAM SIGN VISARGA
+      (16#00D3E#, 16#00D43#),  -- MALAYALAM VOWEL SIGN AA .. MALAYALAM VOWEL SIGN VOCALIC R
+      (16#00D46#, 16#00D48#),  -- MALAYALAM VOWEL SIGN E .. MALAYALAM VOWEL SIGN AI
+      (16#00D4A#, 16#00D4D#),  -- MALAYALAM VOWEL SIGN O .. MALAYALAM SIGN VIRAMA
+      (16#00D57#, 16#00D57#),  -- MALAYALAM AU LENGTH MARK .. MALAYALAM AU LENGTH MARK
+      (16#00D82#, 16#00D83#),  -- SINHALA SIGN ANUSVARAYA .. SINHALA SIGN VISARGAYA
+      (16#00DCA#, 16#00DCA#),  -- SINHALA SIGN AL-LAKUNA .. SINHALA SIGN AL-LAKUNA
+      (16#00DCF#, 16#00DD4#),  -- SINHALA VOWEL SIGN AELA-PILLA .. SINHALA VOWEL SIGN KETTI PAA-PILLA
+      (16#00DD6#, 16#00DD6#),  -- SINHALA VOWEL SIGN DIGA PAA-PILLA .. SINHALA VOWEL SIGN DIGA PAA-PILLA
+      (16#00DD8#, 16#00DDF#),  -- SINHALA VOWEL SIGN GAETTA-PILLA .. SINHALA VOWEL SIGN GAYANUKITTA
+      (16#00DF2#, 16#00DF3#),  -- SINHALA VOWEL SIGN DIGA GAETTA-PILLA .. SINHALA VOWEL SIGN DIGA GAYANUKITTA
+      (16#00E31#, 16#00E31#),  -- THAI CHARACTER MAI HAN-AKAT .. THAI CHARACTER MAI HAN-AKAT
+      (16#00E34#, 16#00E3A#),  -- THAI CHARACTER SARA I .. THAI CHARACTER PHINTHU
+      (16#00E47#, 16#00E4E#),  -- THAI CHARACTER MAITAIKHU .. THAI CHARACTER YAMAKKAN
+      (16#00EB1#, 16#00EB1#),  -- LAO VOWEL SIGN MAI KAN .. LAO VOWEL SIGN MAI KAN
+      (16#00EB4#, 16#00EB9#),  -- LAO VOWEL SIGN I .. LAO VOWEL SIGN UU
+      (16#00EBB#, 16#00EBC#),  -- LAO VOWEL SIGN MAI KON .. LAO SEMIVOWEL SIGN LO
+      (16#00EC8#, 16#00ECD#),  -- LAO TONE MAI EK .. LAO NIGGAHITA
+      (16#00F18#, 16#00F19#),  -- TIBETAN ASTROLOGICAL SIGN -KHYUD PA .. TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
+      (16#00F35#, 16#00F35#),  -- TIBETAN MARK NGAS BZUNG NYI ZLA .. TIBETAN MARK NGAS BZUNG NYI ZLA
+      (16#00F37#, 16#00F37#),  -- TIBETAN MARK NGAS BZUNG SGOR RTAGS .. TIBETAN MARK NGAS BZUNG SGOR RTAGS
+      (16#00F39#, 16#00F39#),  -- TIBETAN MARK TSA -PHRU .. TIBETAN MARK TSA -PHRU
+      (16#00F3E#, 16#00F3F#),  -- TIBETAN SIGN YAR TSHES .. TIBETAN SIGN MAR TSHES
+      (16#00F71#, 16#00F84#),  -- TIBETAN VOWEL SIGN AA .. TIBETAN MARK HALANTA
+      (16#00F86#, 16#00F87#),  -- TIBETAN SIGN LCI RTAGS .. TIBETAN SIGN YANG RTAGS
+      (16#00F90#, 16#00F97#),  -- TIBETAN SUBJOINED LETTER KA .. TIBETAN SUBJOINED LETTER JA
+      (16#00F99#, 16#00FBC#),  -- TIBETAN SUBJOINED LETTER NYA .. TIBETAN SUBJOINED LETTER FIXED-FORM RA
+      (16#00FC6#, 16#00FC6#),  -- TIBETAN SYMBOL PADMA GDAN .. TIBETAN SYMBOL PADMA GDAN
+      (16#0102C#, 16#01032#),  -- MYANMAR VOWEL SIGN AA .. MYANMAR VOWEL SIGN AI
+      (16#01036#, 16#01039#),  -- MYANMAR SIGN ANUSVARA .. MYANMAR SIGN VIRAMA
+      (16#01056#, 16#01059#),  -- MYANMAR VOWEL SIGN VOCALIC R .. MYANMAR VOWEL SIGN VOCALIC LL
+      (16#01712#, 16#01714#),  -- TAGALOG VOWEL SIGN I .. TAGALOG SIGN VIRAMA
+      (16#01732#, 16#01734#),  -- HANUNOO VOWEL SIGN I .. HANUNOO SIGN PAMUDPOD
+      (16#01752#, 16#01753#),  -- BUHID VOWEL SIGN I .. BUHID VOWEL SIGN U
+      (16#01772#, 16#01773#),  -- TAGBANWA VOWEL SIGN I .. TAGBANWA VOWEL SIGN U
+      (16#017B6#, 16#017D3#),  -- KHMER VOWEL SIGN AA .. KHMER SIGN BATHAMASAT
+      (16#017DD#, 16#017DD#),  -- KHMER SIGN ATTHACAN .. KHMER SIGN ATTHACAN
+      (16#0180B#, 16#0180D#),  -- MONGOLIAN FREE VARIATION SELECTOR ONE .. MONGOLIAN FREE VARIATION SELECTOR THREE
+      (16#018A9#, 16#018A9#),  -- MONGOLIAN LETTER ALI GALI DAGALGA .. MONGOLIAN LETTER ALI GALI DAGALGA
+      (16#01920#, 16#0192B#),  -- LIMBU VOWEL SIGN A .. LIMBU SUBJOINED LETTER WA
+      (16#01930#, 16#0193B#),  -- LIMBU SMALL LETTER KA .. LIMBU SIGN SA-I
+      (16#020D0#, 16#020DC#),  -- COMBINING LEFT HARPOON ABOVE .. COMBINING FOUR DOTS ABOVE
+      (16#020E1#, 16#020E1#),  -- COMBINING LEFT RIGHT ARROW ABOVE .. COMBINING LEFT RIGHT ARROW ABOVE
+      (16#020E5#, 16#020EA#),  -- COMBINING REVERSE SOLIDUS OVERLAY .. COMBINING LEFTWARDS ARROW OVERLAY
+      (16#0302A#, 16#0302F#),  -- IDEOGRAPHIC LEVEL TONE MARK .. HANGUL DOUBLE DOT TONE MARK
+      (16#03099#, 16#0309A#),  -- COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK .. COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+      (16#0FB1E#, 16#0FB1E#),  -- HEBREW POINT JUDEO-SPANISH VARIKA .. HEBREW POINT JUDEO-SPANISH VARIKA
+      (16#0FE00#, 16#0FE0F#),  -- VARIATION SELECTOR-1 .. VARIATION SELECTOR-16
+      (16#0FE20#, 16#0FE23#),  -- COMBINING LIGATURE LEFT HALF .. COMBINING DOUBLE TILDE RIGHT HALF
+      (16#1D165#, 16#1D169#),  -- MUSICAL SYMBOL COMBINING STEM .. MUSICAL SYMBOL COMBINING TREMOLO-3
+      (16#1D16D#, 16#1D172#),  -- MUSICAL SYMBOL COMBINING AUGMENTATION DOT .. MUSICAL SYMBOL COMBINING FLAG-5
+      (16#1D17B#, 16#1D182#),  -- MUSICAL SYMBOL COMBINING ACCENT .. MUSICAL SYMBOL COMBINING LOURE
+      (16#1D185#, 16#1D18B#),  -- MUSICAL SYMBOL COMBINING DOIT .. MUSICAL SYMBOL COMBINING TRIPLE TONGUE
+      (16#1D1AA#, 16#1D1AD#),  -- MUSICAL SYMBOL COMBINING DOWN BOW .. MUSICAL SYMBOL COMBINING SNAP PIZZICATO
+      (16#E0100#, 16#E01EF#)); -- VARIATION SELECTOR-17 .. VARIATION SELECTOR-256
+ 
+    --  The following table includes all characters considered non-graphic,
+    --  i.e. all characters from the Unicode table with categories:
+ 
+    --    Other, Control (Cc)
+    --    Other, Private Use (Co)
+    --    Other, Surrogate (Cs)
+    --    Other, Format (Cf)
+    --    Separator, Line (Zl)
+    --    Separator, Paragraph (Zp)
+ 
+    --  In addition, the characters FFFE and FFFF are excluded. Note that the
+    --  defined Ada category of format effector is subsumed by the above set
+    --  of Unicode categories.
+ 
+    UTF_32_Non_Graphic : constant UTF_32_Ranges := (
+      (16#00000#, 16#0001F#),  -- <control> .. <control>
+      (16#0007F#, 16#0009F#),  -- <control> .. <control>
+      (16#000AD#, 16#000AD#),  -- SOFT HYPHEN .. SOFT HYPHEN
+      (16#00600#, 16#00603#),  -- ARABIC NUMBER SIGN .. ARABIC SIGN SAFHA
+      (16#006DD#, 16#006DD#),  -- ARABIC END OF AYAH .. ARABIC END OF AYAH
+      (16#0070F#, 16#0070F#),  -- SYRIAC ABBREVIATION MARK .. SYRIAC ABBREVIATION MARK
+      (16#017B4#, 16#017B5#),  -- KHMER VOWEL INHERENT AQ .. KHMER VOWEL INHERENT AA
+      (16#0200C#, 16#0200F#),  -- ZERO WIDTH NON-JOINER .. RIGHT-TO-LEFT MARK
+      (16#02028#, 16#0202E#),  -- LINE SEPARATOR .. RIGHT-TO-LEFT OVERRIDE
+      (16#02060#, 16#02063#),  -- WORD JOINER .. INVISIBLE SEPARATOR
+      (16#0206A#, 16#0206F#),  -- INHIBIT SYMMETRIC SWAPPING .. NOMINAL DIGIT SHAPES
+      (16#0D800#, 16#0F8FF#),  -- <Non Private Use High Surrogate, First> .. <Private Use, Last>
+      (16#0FEFF#, 16#0FEFF#),  -- ZERO WIDTH NO-BREAK SPACE .. ZERO WIDTH NO-BREAK SPACE
+      (16#0FFF9#, 16#0FFFB#),  -- INTERLINEAR ANNOTATION ANCHOR .. INTERLINEAR ANNOTATION TERMINATOR
+      (16#0FFFE#, 16#0FFFF#),  -- excluded code positions
+      (16#1D173#, 16#1D17A#),  -- MUSICAL SYMBOL BEGIN BEAM .. MUSICAL SYMBOL END PHRASE
+      (16#E0001#, 16#E0001#),  -- LANGUAGE TAG .. LANGUAGE TAG
+      (16#E0020#, 16#E007F#),  -- TAG SPACE .. CANCEL TAG
+      (16#F0000#, 16#FFFFD#),  -- <Plane 15 Private Use, First> .. <Plane 15 Private Use, Last>
+      (16#100000#, 16#10FFFD#)); -- <Plane 16 Private Use, First> .. <Plane 16 Private Use, Last>
+ 
+    --  The following two tables define the mapping to upper case. The first
+    --  table gives the ranges of lower case letters. The corresponding entry
+    --  in Uppercase_Adjust shows the amount to be added (or subtracted) from
+    --  the code value to get the corresponding upper case letter.
+ 
+    --  Note that this folding is not reversible, for example lower case
+    --  dotless i folds to normal upper case I, and that cannot be reversed.
+ 
+    Lower_Case_Letters : constant UTF_32_Ranges := (
+      (16#00061#, 16#0007A#),  -- LATIN SMALL LETTER A .. LATIN SMALL LETTER Z
+      (16#000B5#, 16#000B5#),  -- MICRO SIGN .. MICRO SIGN
+      (16#000E0#, 16#000F6#),  -- LATIN SMALL LETTER A WITH GRAVE .. LATIN SMALL LETTER O WITH DIAERESIS
+      (16#000F8#, 16#000FE#),  -- LATIN SMALL LETTER O WITH STROKE .. LATIN SMALL LETTER THORN
+      (16#000FF#, 16#000FF#),  -- LATIN SMALL LETTER Y WITH DIAERESIS .. LATIN SMALL LETTER Y WITH DIAERESIS
+      (16#00101#, 16#00101#),  -- LATIN SMALL LETTER A WITH MACRON .. LATIN SMALL LETTER A WITH MACRON
+      (16#00103#, 16#00103#),  -- LATIN SMALL LETTER A WITH BREVE .. LATIN SMALL LETTER A WITH BREVE
+      (16#00105#, 16#00105#),  -- LATIN SMALL LETTER A WITH OGONEK .. LATIN SMALL LETTER A WITH OGONEK
+      (16#00107#, 16#00107#),  -- LATIN SMALL LETTER C WITH ACUTE .. LATIN SMALL LETTER C WITH ACUTE
+      (16#00109#, 16#00109#),  -- LATIN SMALL LETTER C WITH CIRCUMFLEX .. LATIN SMALL LETTER C WITH CIRCUMFLEX
+      (16#0010B#, 16#0010B#),  -- LATIN SMALL LETTER C WITH DOT ABOVE .. LATIN SMALL LETTER C WITH DOT ABOVE
+      (16#0010D#, 16#0010D#),  -- LATIN SMALL LETTER C WITH CARON .. LATIN SMALL LETTER C WITH CARON
+      (16#0010F#, 16#0010F#),  -- LATIN SMALL LETTER D WITH CARON .. LATIN SMALL LETTER D WITH CARON
+      (16#00111#, 16#00111#),  -- LATIN SMALL LETTER D WITH STROKE .. LATIN SMALL LETTER D WITH STROKE
+      (16#00113#, 16#00113#),  -- LATIN SMALL LETTER E WITH MACRON .. LATIN SMALL LETTER E WITH MACRON
+      (16#00115#, 16#00115#),  -- LATIN SMALL LETTER E WITH BREVE .. LATIN SMALL LETTER E WITH BREVE
+      (16#00117#, 16#00117#),  -- LATIN SMALL LETTER E WITH DOT ABOVE .. LATIN SMALL LETTER E WITH DOT ABOVE
+      (16#00119#, 16#00119#),  -- LATIN SMALL LETTER E WITH OGONEK .. LATIN SMALL LETTER E WITH OGONEK
+      (16#0011B#, 16#0011B#),  -- LATIN SMALL LETTER E WITH CARON .. LATIN SMALL LETTER E WITH CARON
+      (16#0011D#, 16#0011D#),  -- LATIN SMALL LETTER G WITH CIRCUMFLEX .. LATIN SMALL LETTER G WITH CIRCUMFLEX
+      (16#0011F#, 16#0011F#),  -- LATIN SMALL LETTER G WITH BREVE .. LATIN SMALL LETTER G WITH BREVE
+      (16#00121#, 16#00121#),  -- LATIN SMALL LETTER G WITH DOT ABOVE .. LATIN SMALL LETTER G WITH DOT ABOVE
+      (16#00123#, 16#00123#),  -- LATIN SMALL LETTER G WITH CEDILLA .. LATIN SMALL LETTER G WITH CEDILLA
+      (16#00125#, 16#00125#),  -- LATIN SMALL LETTER H WITH CIRCUMFLEX .. LATIN SMALL LETTER H WITH CIRCUMFLEX
+      (16#00127#, 16#00127#),  -- LATIN SMALL LETTER H WITH STROKE .. LATIN SMALL LETTER H WITH STROKE
+      (16#00129#, 16#00129#),  -- LATIN SMALL LETTER I WITH TILDE .. LATIN SMALL LETTER I WITH TILDE
+      (16#0012B#, 16#0012B#),  -- LATIN SMALL LETTER I WITH MACRON .. LATIN SMALL LETTER I WITH MACRON
+      (16#0012D#, 16#0012D#),  -- LATIN SMALL LETTER I WITH BREVE .. LATIN SMALL LETTER I WITH BREVE
+      (16#0012F#, 16#0012F#),  -- LATIN SMALL LETTER I WITH OGONEK .. LATIN SMALL LETTER I WITH OGONEK
+      (16#00131#, 16#00131#),  -- LATIN SMALL LETTER DOTLESS I .. LATIN SMALL LETTER DOTLESS I
+      (16#00133#, 16#00133#),  -- LATIN SMALL LIGATURE IJ .. LATIN SMALL LIGATURE IJ
+      (16#00135#, 16#00135#),  -- LATIN SMALL LETTER J WITH CIRCUMFLEX .. LATIN SMALL LETTER J WITH CIRCUMFLEX
+      (16#00137#, 16#00137#),  -- LATIN SMALL LETTER K WITH CEDILLA .. LATIN SMALL LETTER K WITH CEDILLA
+      (16#0013A#, 16#0013A#),  -- LATIN SMALL LETTER L WITH ACUTE .. LATIN SMALL LETTER L WITH ACUTE
+      (16#0013C#, 16#0013C#),  -- LATIN SMALL LETTER L WITH CEDILLA .. LATIN SMALL LETTER L WITH CEDILLA
+      (16#0013E#, 16#0013E#),  -- LATIN SMALL LETTER L WITH CARON .. LATIN SMALL LETTER L WITH CARON
+      (16#00140#, 16#00140#),  -- LATIN SMALL LETTER L WITH MIDDLE DOT .. LATIN SMALL LETTER L WITH MIDDLE DOT
+      (16#00142#, 16#00142#),  -- LATIN SMALL LETTER L WITH STROKE .. LATIN SMALL LETTER L WITH STROKE
+      (16#00144#, 16#00144#),  -- LATIN SMALL LETTER N WITH ACUTE .. LATIN SMALL LETTER N WITH ACUTE
+      (16#00146#, 16#00146#),  -- LATIN SMALL LETTER N WITH CEDILLA .. LATIN SMALL LETTER N WITH CEDILLA
+      (16#00148#, 16#00148#),  -- LATIN SMALL LETTER N WITH CARON .. LATIN SMALL LETTER N WITH CARON
+      (16#0014B#, 16#0014B#),  -- LATIN SMALL LETTER ENG .. LATIN SMALL LETTER ENG
+      (16#0014D#, 16#0014D#),  -- LATIN SMALL LETTER O WITH MACRON .. LATIN SMALL LETTER O WITH MACRON
+      (16#0014F#, 16#0014F#),  -- LATIN SMALL LETTER O WITH BREVE .. LATIN SMALL LETTER O WITH BREVE
+      (16#00151#, 16#00151#),  -- LATIN SMALL LETTER O WITH DOUBLE ACUTE .. LATIN SMALL LETTER O WITH DOUBLE ACUTE
+      (16#00153#, 16#00153#),  -- LATIN SMALL LIGATURE OE .. LATIN SMALL LIGATURE OE
+      (16#00155#, 16#00155#),  -- LATIN SMALL LETTER R WITH ACUTE .. LATIN SMALL LETTER R WITH ACUTE
+      (16#00157#, 16#00157#),  -- LATIN SMALL LETTER R WITH CEDILLA .. LATIN SMALL LETTER R WITH CEDILLA
+      (16#00159#, 16#00159#),  -- LATIN SMALL LETTER R WITH CARON .. LATIN SMALL LETTER R WITH CARON
+      (16#0015B#, 16#0015B#),  -- LATIN SMALL LETTER S WITH ACUTE .. LATIN SMALL LETTER S WITH ACUTE
+      (16#0015D#, 16#0015D#),  -- LATIN SMALL LETTER S WITH CIRCUMFLEX .. LATIN SMALL LETTER S WITH CIRCUMFLEX
+      (16#0015F#, 16#0015F#),  -- LATIN SMALL LETTER S WITH CEDILLA .. LATIN SMALL LETTER S WITH CEDILLA
+      (16#00161#, 16#00161#),  -- LATIN SMALL LETTER S WITH CARON .. LATIN SMALL LETTER S WITH CARON
+      (16#00163#, 16#00163#),  -- LATIN SMALL LETTER T WITH CEDILLA .. LATIN SMALL LETTER T WITH CEDILLA
+      (16#00165#, 16#00165#),  -- LATIN SMALL LETTER T WITH CARON .. LATIN SMALL LETTER T WITH CARON
+      (16#00167#, 16#00167#),  -- LATIN SMALL LETTER T WITH STROKE .. LATIN SMALL LETTER T WITH STROKE
+      (16#00169#, 16#00169#),  -- LATIN SMALL LETTER U WITH TILDE .. LATIN SMALL LETTER U WITH TILDE
+      (16#0016B#, 16#0016B#),  -- LATIN SMALL LETTER U WITH MACRON .. LATIN SMALL LETTER U WITH MACRON
+      (16#0016D#, 16#0016D#),  -- LATIN SMALL LETTER U WITH BREVE .. LATIN SMALL LETTER U WITH BREVE
+      (16#0016F#, 16#0016F#),  -- LATIN SMALL LETTER U WITH RING ABOVE .. LATIN SMALL LETTER U WITH RING ABOVE
+      (16#00171#, 16#00171#),  -- LATIN SMALL LETTER U WITH DOUBLE ACUTE .. LATIN SMALL LETTER U WITH DOUBLE ACUTE
+      (16#00173#, 16#00173#),  -- LATIN SMALL LETTER U WITH OGONEK .. LATIN SMALL LETTER U WITH OGONEK
+      (16#00175#, 16#00175#),  -- LATIN SMALL LETTER W WITH CIRCUMFLEX .. LATIN SMALL LETTER W WITH CIRCUMFLEX
+      (16#00177#, 16#00177#),  -- LATIN SMALL LETTER Y WITH CIRCUMFLEX .. LATIN SMALL LETTER Y WITH CIRCUMFLEX
+      (16#0017A#, 16#0017A#),  -- LATIN SMALL LETTER Z WITH ACUTE .. LATIN SMALL LETTER Z WITH ACUTE
+      (16#0017C#, 16#0017C#),  -- LATIN SMALL LETTER Z WITH DOT ABOVE .. LATIN SMALL LETTER Z WITH DOT ABOVE
+      (16#0017E#, 16#0017E#),  -- LATIN SMALL LETTER Z WITH CARON .. LATIN SMALL LETTER Z WITH CARON
+      (16#0017F#, 16#0017F#),  -- LATIN SMALL LETTER LONG S .. LATIN SMALL LETTER LONG S
+      (16#00183#, 16#00183#),  -- LATIN SMALL LETTER B WITH TOPBAR .. LATIN SMALL LETTER B WITH TOPBAR
+      (16#00185#, 16#00185#),  -- LATIN SMALL LETTER TONE SIX .. LATIN SMALL LETTER TONE SIX
+      (16#00188#, 16#00188#),  -- LATIN SMALL LETTER C WITH HOOK .. LATIN SMALL LETTER C WITH HOOK
+      (16#0018C#, 16#0018C#),  -- LATIN SMALL LETTER D WITH TOPBAR .. LATIN SMALL LETTER D WITH TOPBAR
+      (16#00192#, 16#00192#),  -- LATIN SMALL LETTER F WITH HOOK .. LATIN SMALL LETTER F WITH HOOK
+      (16#00195#, 16#00195#),  -- LATIN SMALL LETTER HV .. LATIN SMALL LETTER HV
+      (16#00199#, 16#00199#),  -- LATIN SMALL LETTER K WITH HOOK .. LATIN SMALL LETTER K WITH HOOK
+      (16#0019E#, 16#0019E#),  -- LATIN SMALL LETTER N WITH LONG RIGHT LEG .. LATIN SMALL LETTER N WITH LONG RIGHT LEG
+      (16#001A1#, 16#001A1#),  -- LATIN SMALL LETTER O WITH HORN .. LATIN SMALL LETTER O WITH HORN
+      (16#001A3#, 16#001A3#),  -- LATIN SMALL LETTER OI .. LATIN SMALL LETTER OI
+      (16#001A5#, 16#001A5#),  -- LATIN SMALL LETTER P WITH HOOK .. LATIN SMALL LETTER P WITH HOOK
+      (16#001A8#, 16#001A8#),  -- LATIN SMALL LETTER TONE TWO .. LATIN SMALL LETTER TONE TWO
+      (16#001AD#, 16#001AD#),  -- LATIN SMALL LETTER T WITH HOOK .. LATIN SMALL LETTER T WITH HOOK
+      (16#001B0#, 16#001B0#),  -- LATIN SMALL LETTER U WITH HORN .. LATIN SMALL LETTER U WITH HORN
+      (16#001B4#, 16#001B4#),  -- LATIN SMALL LETTER Y WITH HOOK .. LATIN SMALL LETTER Y WITH HOOK
+      (16#001B6#, 16#001B6#),  -- LATIN SMALL LETTER Z WITH STROKE .. LATIN SMALL LETTER Z WITH STROKE
+      (16#001B9#, 16#001B9#),  -- LATIN SMALL LETTER EZH REVERSED .. LATIN SMALL LETTER EZH REVERSED
+      (16#001BD#, 16#001BD#),  -- LATIN SMALL LETTER TONE FIVE .. LATIN SMALL LETTER TONE FIVE
+      (16#001BF#, 16#001BF#),  -- LATIN LETTER WYNN .. LATIN LETTER WYNN
+      (16#001C5#, 16#001C5#),  -- LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON .. LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
+      (16#001C6#, 16#001C6#),  -- LATIN SMALL LETTER DZ WITH CARON .. LATIN SMALL LETTER DZ WITH CARON
+      (16#001C8#, 16#001C8#),  -- LATIN CAPITAL LETTER L WITH SMALL LETTER J .. LATIN CAPITAL LETTER L WITH SMALL LETTER J
+      (16#001C9#, 16#001C9#),  -- LATIN SMALL LETTER LJ .. LATIN SMALL LETTER LJ
+      (16#001CB#, 16#001CB#),  -- LATIN CAPITAL LETTER N WITH SMALL LETTER J .. LATIN CAPITAL LETTER N WITH SMALL LETTER J
+      (16#001CC#, 16#001CC#),  -- LATIN SMALL LETTER NJ .. LATIN SMALL LETTER NJ
+      (16#001CE#, 16#001CE#),  -- LATIN SMALL LETTER A WITH CARON .. LATIN SMALL LETTER A WITH CARON
+      (16#001D0#, 16#001D0#),  -- LATIN SMALL LETTER I WITH CARON .. LATIN SMALL LETTER I WITH CARON
+      (16#001D2#, 16#001D2#),  -- LATIN SMALL LETTER O WITH CARON .. LATIN SMALL LETTER O WITH CARON
+      (16#001D4#, 16#001D4#),  -- LATIN SMALL LETTER U WITH CARON .. LATIN SMALL LETTER U WITH CARON
+      (16#001D6#, 16#001D6#),  -- LATIN SMALL LETTER U WITH DIAERESIS AND MACRON .. LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+      (16#001D8#, 16#001D8#),  -- LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE .. LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+      (16#001DA#, 16#001DA#),  -- LATIN SMALL LETTER U WITH DIAERESIS AND CARON .. LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+      (16#001DC#, 16#001DC#),  -- LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE .. LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+      (16#001DD#, 16#001DD#),  -- LATIN SMALL LETTER TURNED E .. LATIN SMALL LETTER TURNED E
+      (16#001DF#, 16#001DF#),  -- LATIN SMALL LETTER A WITH DIAERESIS AND MACRON .. LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+      (16#001E1#, 16#001E1#),  -- LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON .. LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+      (16#001E3#, 16#001E3#),  -- LATIN SMALL LETTER AE WITH MACRON .. LATIN SMALL LETTER AE WITH MACRON
+      (16#001E5#, 16#001E5#),  -- LATIN SMALL LETTER G WITH STROKE .. LATIN SMALL LETTER G WITH STROKE
+      (16#001E7#, 16#001E7#),  -- LATIN SMALL LETTER G WITH CARON .. LATIN SMALL LETTER G WITH CARON
+      (16#001E9#, 16#001E9#),  -- LATIN SMALL LETTER K WITH CARON .. LATIN SMALL LETTER K WITH CARON
+      (16#001EB#, 16#001EB#),  -- LATIN SMALL LETTER O WITH OGONEK .. LATIN SMALL LETTER O WITH OGONEK
+      (16#001ED#, 16#001ED#),  -- LATIN SMALL LETTER O WITH OGONEK AND MACRON .. LATIN SMALL LETTER O WITH OGONEK AND MACRON
+      (16#001EF#, 16#001EF#),  -- LATIN SMALL LETTER EZH WITH CARON .. LATIN SMALL LETTER EZH WITH CARON
+      (16#001F2#, 16#001F2#),  -- LATIN CAPITAL LETTER D WITH SMALL LETTER Z .. LATIN CAPITAL LETTER D WITH SMALL LETTER Z
+      (16#001F3#, 16#001F3#),  -- LATIN SMALL LETTER DZ .. LATIN SMALL LETTER DZ
+      (16#001F5#, 16#001F5#),  -- LATIN SMALL LETTER G WITH ACUTE .. LATIN SMALL LETTER G WITH ACUTE
+      (16#001F9#, 16#001F9#),  -- LATIN SMALL LETTER N WITH GRAVE .. LATIN SMALL LETTER N WITH GRAVE
+      (16#001FB#, 16#001FB#),  -- LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE .. LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+      (16#001FD#, 16#001FD#),  -- LATIN SMALL LETTER AE WITH ACUTE .. LATIN SMALL LETTER AE WITH ACUTE
+      (16#001FF#, 16#001FF#),  -- LATIN SMALL LETTER O WITH STROKE AND ACUTE .. LATIN SMALL LETTER O WITH STROKE AND ACUTE
+      (16#00201#, 16#00201#),  -- LATIN SMALL LETTER A WITH DOUBLE GRAVE .. LATIN SMALL LETTER A WITH DOUBLE GRAVE
+      (16#00203#, 16#00203#),  -- LATIN SMALL LETTER A WITH INVERTED BREVE .. LATIN SMALL LETTER A WITH INVERTED BREVE
+      (16#00205#, 16#00205#),  -- LATIN SMALL LETTER E WITH DOUBLE GRAVE .. LATIN SMALL LETTER E WITH DOUBLE GRAVE
+      (16#00207#, 16#00207#),  -- LATIN SMALL LETTER E WITH INVERTED BREVE .. LATIN SMALL LETTER E WITH INVERTED BREVE
+      (16#00209#, 16#00209#),  -- LATIN SMALL LETTER I WITH DOUBLE GRAVE .. LATIN SMALL LETTER I WITH DOUBLE GRAVE
+      (16#0020B#, 16#0020B#),  -- LATIN SMALL LETTER I WITH INVERTED BREVE .. LATIN SMALL LETTER I WITH INVERTED BREVE
+      (16#0020D#, 16#0020D#),  -- LATIN SMALL LETTER O WITH DOUBLE GRAVE .. LATIN SMALL LETTER O WITH DOUBLE GRAVE
+      (16#0020F#, 16#0020F#),  -- LATIN SMALL LETTER O WITH INVERTED BREVE .. LATIN SMALL LETTER O WITH INVERTED BREVE
+      (16#00211#, 16#00211#),  -- LATIN SMALL LETTER R WITH DOUBLE GRAVE .. LATIN SMALL LETTER R WITH DOUBLE GRAVE
+      (16#00213#, 16#00213#),  -- LATIN SMALL LETTER R WITH INVERTED BREVE .. LATIN SMALL LETTER R WITH INVERTED BREVE
+      (16#00215#, 16#00215#),  -- LATIN SMALL LETTER U WITH DOUBLE GRAVE .. LATIN SMALL LETTER U WITH DOUBLE GRAVE
+      (16#00217#, 16#00217#),  -- LATIN SMALL LETTER U WITH INVERTED BREVE .. LATIN SMALL LETTER U WITH INVERTED BREVE
+      (16#00219#, 16#00219#),  -- LATIN SMALL LETTER S WITH COMMA BELOW .. LATIN SMALL LETTER S WITH COMMA BELOW
+      (16#0021B#, 16#0021B#),  -- LATIN SMALL LETTER T WITH COMMA BELOW .. LATIN SMALL LETTER T WITH COMMA BELOW
+      (16#0021D#, 16#0021D#),  -- LATIN SMALL LETTER YOGH .. LATIN SMALL LETTER YOGH
+      (16#0021F#, 16#0021F#),  -- LATIN SMALL LETTER H WITH CARON .. LATIN SMALL LETTER H WITH CARON
+      (16#00223#, 16#00223#),  -- LATIN SMALL LETTER OU .. LATIN SMALL LETTER OU
+      (16#00225#, 16#00225#),  -- LATIN SMALL LETTER Z WITH HOOK .. LATIN SMALL LETTER Z WITH HOOK
+      (16#00227#, 16#00227#),  -- LATIN SMALL LETTER A WITH DOT ABOVE .. LATIN SMALL LETTER A WITH DOT ABOVE
+      (16#00229#, 16#00229#),  -- LATIN SMALL LETTER E WITH CEDILLA .. LATIN SMALL LETTER E WITH CEDILLA
+      (16#0022B#, 16#0022B#),  -- LATIN SMALL LETTER O WITH DIAERESIS AND MACRON .. LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
+      (16#0022D#, 16#0022D#),  -- LATIN SMALL LETTER O WITH TILDE AND MACRON .. LATIN SMALL LETTER O WITH TILDE AND MACRON
+      (16#0022F#, 16#0022F#),  -- LATIN SMALL LETTER O WITH DOT ABOVE .. LATIN SMALL LETTER O WITH DOT ABOVE
+      (16#00231#, 16#00231#),  -- LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON .. LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
+      (16#00233#, 16#00233#),  -- LATIN SMALL LETTER Y WITH MACRON .. LATIN SMALL LETTER Y WITH MACRON
+      (16#00253#, 16#00253#),  -- LATIN SMALL LETTER B WITH HOOK .. LATIN SMALL LETTER B WITH HOOK
+      (16#00254#, 16#00254#),  -- LATIN SMALL LETTER OPEN O .. LATIN SMALL LETTER OPEN O
+      (16#00256#, 16#00257#),  -- LATIN SMALL LETTER D WITH TAIL .. LATIN SMALL LETTER D WITH HOOK
+      (16#00259#, 16#00259#),  -- LATIN SMALL LETTER SCHWA .. LATIN SMALL LETTER SCHWA
+      (16#0025B#, 16#0025B#),  -- LATIN SMALL LETTER OPEN E .. LATIN SMALL LETTER OPEN E
+      (16#00260#, 16#00260#),  -- LATIN SMALL LETTER G WITH HOOK .. LATIN SMALL LETTER G WITH HOOK
+      (16#00263#, 16#00263#),  -- LATIN SMALL LETTER GAMMA .. LATIN SMALL LETTER GAMMA
+      (16#00268#, 16#00268#),  -- LATIN SMALL LETTER I WITH STROKE .. LATIN SMALL LETTER I WITH STROKE
+      (16#00269#, 16#00269#),  -- LATIN SMALL LETTER IOTA .. LATIN SMALL LETTER IOTA
+      (16#0026F#, 16#0026F#),  -- LATIN SMALL LETTER TURNED M .. LATIN SMALL LETTER TURNED M
+      (16#00272#, 16#00272#),  -- LATIN SMALL LETTER N WITH LEFT HOOK .. LATIN SMALL LETTER N WITH LEFT HOOK
+      (16#00275#, 16#00275#),  -- LATIN SMALL LETTER BARRED O .. LATIN SMALL LETTER BARRED O
+      (16#00280#, 16#00280#),  -- LATIN LETTER SMALL CAPITAL R .. LATIN LETTER SMALL CAPITAL R
+      (16#00283#, 16#00283#),  -- LATIN SMALL LETTER ESH .. LATIN SMALL LETTER ESH
+      (16#00288#, 16#00288#),  -- LATIN SMALL LETTER T WITH RETROFLEX HOOK .. LATIN SMALL LETTER T WITH RETROFLEX HOOK
+      (16#0028A#, 16#0028B#),  -- LATIN SMALL LETTER UPSILON .. LATIN SMALL LETTER V WITH HOOK
+      (16#00292#, 16#00292#),  -- LATIN SMALL LETTER EZH .. LATIN SMALL LETTER EZH
+      (16#003AC#, 16#003AC#),  -- GREEK SMALL LETTER ALPHA WITH TONOS .. GREEK SMALL LETTER ALPHA WITH TONOS
+      (16#003AD#, 16#003AF#),  -- GREEK SMALL LETTER EPSILON WITH TONOS .. GREEK SMALL LETTER IOTA WITH TONOS
+      (16#003B1#, 16#003C1#),  -- GREEK SMALL LETTER ALPHA .. GREEK SMALL LETTER RHO
+      (16#003C2#, 16#003C2#),  -- GREEK SMALL LETTER FINAL SIGMA .. GREEK SMALL LETTER FINAL SIGMA
+      (16#003C3#, 16#003CB#),  -- GREEK SMALL LETTER SIGMA .. GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+      (16#003CC#, 16#003CC#),  -- GREEK SMALL LETTER OMICRON WITH TONOS .. GREEK SMALL LETTER OMICRON WITH TONOS
+      (16#003CD#, 16#003CE#),  -- GREEK SMALL LETTER UPSILON WITH TONOS .. GREEK SMALL LETTER OMEGA WITH TONOS
+      (16#003D0#, 16#003D0#),  -- GREEK BETA SYMBOL .. GREEK BETA SYMBOL
+      (16#003D1#, 16#003D1#),  -- GREEK THETA SYMBOL .. GREEK THETA SYMBOL
+      (16#003D5#, 16#003D5#),  -- GREEK PHI SYMBOL .. GREEK PHI SYMBOL
+      (16#003D6#, 16#003D6#),  -- GREEK PI SYMBOL .. GREEK PI SYMBOL
+      (16#003D9#, 16#003D9#),  -- GREEK SMALL LETTER ARCHAIC KOPPA .. GREEK SMALL LETTER ARCHAIC KOPPA
+      (16#003DB#, 16#003DB#),  -- GREEK SMALL LETTER STIGMA .. GREEK SMALL LETTER STIGMA
+      (16#003DD#, 16#003DD#),  -- GREEK SMALL LETTER DIGAMMA .. GREEK SMALL LETTER DIGAMMA
+      (16#003DF#, 16#003DF#),  -- GREEK SMALL LETTER KOPPA .. GREEK SMALL LETTER KOPPA
+      (16#003E1#, 16#003E1#),  -- GREEK SMALL LETTER SAMPI .. GREEK SMALL LETTER SAMPI
+      (16#003E3#, 16#003E3#),  -- COPTIC SMALL LETTER SHEI .. COPTIC SMALL LETTER SHEI
+      (16#003E5#, 16#003E5#),  -- COPTIC SMALL LETTER FEI .. COPTIC SMALL LETTER FEI
+      (16#003E7#, 16#003E7#),  -- COPTIC SMALL LETTER KHEI .. COPTIC SMALL LETTER KHEI
+      (16#003E9#, 16#003E9#),  -- COPTIC SMALL LETTER HORI .. COPTIC SMALL LETTER HORI
+      (16#003EB#, 16#003EB#),  -- COPTIC SMALL LETTER GANGIA .. COPTIC SMALL LETTER GANGIA
+      (16#003ED#, 16#003ED#),  -- COPTIC SMALL LETTER SHIMA .. COPTIC SMALL LETTER SHIMA
+      (16#003EF#, 16#003EF#),  -- COPTIC SMALL LETTER DEI .. COPTIC SMALL LETTER DEI
+      (16#003F0#, 16#003F0#),  -- GREEK KAPPA SYMBOL .. GREEK KAPPA SYMBOL
+      (16#003F1#, 16#003F1#),  -- GREEK RHO SYMBOL .. GREEK RHO SYMBOL
+      (16#003F2#, 16#003F2#),  -- GREEK LUNATE SIGMA SYMBOL .. GREEK LUNATE SIGMA SYMBOL
+      (16#003F5#, 16#003F5#),  -- GREEK LUNATE EPSILON SYMBOL .. GREEK LUNATE EPSILON SYMBOL
+      (16#00430#, 16#0044F#),  -- CYRILLIC SMALL LETTER A .. CYRILLIC SMALL LETTER YA
+      (16#00450#, 16#0045F#),  -- CYRILLIC SMALL LETTER IE WITH GRAVE .. CYRILLIC SMALL LETTER DZHE
+      (16#00461#, 16#00461#),  -- CYRILLIC SMALL LETTER OMEGA .. CYRILLIC SMALL LETTER OMEGA
+      (16#00463#, 16#00463#),  -- CYRILLIC SMALL LETTER YAT .. CYRILLIC SMALL LETTER YAT
+      (16#00465#, 16#00465#),  -- CYRILLIC SMALL LETTER IOTIFIED E .. CYRILLIC SMALL LETTER IOTIFIED E
+      (16#00467#, 16#00467#),  -- CYRILLIC SMALL LETTER LITTLE YUS .. CYRILLIC SMALL LETTER LITTLE YUS
+      (16#00469#, 16#00469#),  -- CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS .. CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS
+      (16#0046B#, 16#0046B#),  -- CYRILLIC SMALL LETTER BIG YUS .. CYRILLIC SMALL LETTER BIG YUS
+      (16#0046D#, 16#0046D#),  -- CYRILLIC SMALL LETTER IOTIFIED BIG YUS .. CYRILLIC SMALL LETTER IOTIFIED BIG YUS
+      (16#0046F#, 16#0046F#),  -- CYRILLIC SMALL LETTER KSI .. CYRILLIC SMALL LETTER KSI
+      (16#00471#, 16#00471#),  -- CYRILLIC SMALL LETTER PSI .. CYRILLIC SMALL LETTER PSI
+      (16#00473#, 16#00473#),  -- CYRILLIC SMALL LETTER FITA .. CYRILLIC SMALL LETTER FITA
+      (16#00475#, 16#00475#),  -- CYRILLIC SMALL LETTER IZHITSA .. CYRILLIC SMALL LETTER IZHITSA
+      (16#00477#, 16#00477#),  -- CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT .. CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+      (16#00479#, 16#00479#),  -- CYRILLIC SMALL LETTER UK .. CYRILLIC SMALL LETTER UK
+      (16#0047B#, 16#0047B#),  -- CYRILLIC SMALL LETTER ROUND OMEGA .. CYRILLIC SMALL LETTER ROUND OMEGA
+      (16#0047D#, 16#0047D#),  -- CYRILLIC SMALL LETTER OMEGA WITH TITLO .. CYRILLIC SMALL LETTER OMEGA WITH TITLO
+      (16#0047F#, 16#0047F#),  -- CYRILLIC SMALL LETTER OT .. CYRILLIC SMALL LETTER OT
+      (16#00481#, 16#00481#),  -- CYRILLIC SMALL LETTER KOPPA .. CYRILLIC SMALL LETTER KOPPA
+      (16#0048B#, 16#0048B#),  -- CYRILLIC SMALL LETTER SHORT I WITH TAIL .. CYRILLIC SMALL LETTER SHORT I WITH TAIL
+      (16#0048D#, 16#0048D#),  -- CYRILLIC SMALL LETTER SEMISOFT SIGN .. CYRILLIC SMALL LETTER SEMISOFT SIGN
+      (16#0048F#, 16#0048F#),  -- CYRILLIC SMALL LETTER ER WITH TICK .. CYRILLIC SMALL LETTER ER WITH TICK
+      (16#00491#, 16#00491#),  -- CYRILLIC SMALL LETTER GHE WITH UPTURN .. CYRILLIC SMALL LETTER GHE WITH UPTURN
+      (16#00493#, 16#00493#),  -- CYRILLIC SMALL LETTER GHE WITH STROKE .. CYRILLIC SMALL LETTER GHE WITH STROKE
+      (16#00495#, 16#00495#),  -- CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK .. CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK
+      (16#00497#, 16#00497#),  -- CYRILLIC SMALL LETTER ZHE WITH DESCENDER .. CYRILLIC SMALL LETTER ZHE WITH DESCENDER
+      (16#00499#, 16#00499#),  -- CYRILLIC SMALL LETTER ZE WITH DESCENDER .. CYRILLIC SMALL LETTER ZE WITH DESCENDER
+      (16#0049B#, 16#0049B#),  -- CYRILLIC SMALL LETTER KA WITH DESCENDER .. CYRILLIC SMALL LETTER KA WITH DESCENDER
+      (16#0049D#, 16#0049D#),  -- CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE .. CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE
+      (16#0049F#, 16#0049F#),  -- CYRILLIC SMALL LETTER KA WITH STROKE .. CYRILLIC SMALL LETTER KA WITH STROKE
+      (16#004A1#, 16#004A1#),  -- CYRILLIC SMALL LETTER BASHKIR KA .. CYRILLIC SMALL LETTER BASHKIR KA
+      (16#004A3#, 16#004A3#),  -- CYRILLIC SMALL LETTER EN WITH DESCENDER .. CYRILLIC SMALL LETTER EN WITH DESCENDER
+      (16#004A5#, 16#004A5#),  -- CYRILLIC SMALL LIGATURE EN GHE .. CYRILLIC SMALL LIGATURE EN GHE
+      (16#004A7#, 16#004A7#),  -- CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK .. CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK
+      (16#004A9#, 16#004A9#),  -- CYRILLIC SMALL LETTER ABKHASIAN HA .. CYRILLIC SMALL LETTER ABKHASIAN HA
+      (16#004AB#, 16#004AB#),  -- CYRILLIC SMALL LETTER ES WITH DESCENDER .. CYRILLIC SMALL LETTER ES WITH DESCENDER
+      (16#004AD#, 16#004AD#),  -- CYRILLIC SMALL LETTER TE WITH DESCENDER .. CYRILLIC SMALL LETTER TE WITH DESCENDER
+      (16#004AF#, 16#004AF#),  -- CYRILLIC SMALL LETTER STRAIGHT U .. CYRILLIC SMALL LETTER STRAIGHT U
+      (16#004B1#, 16#004B1#),  -- CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE .. CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
+      (16#004B3#, 16#004B3#),  -- CYRILLIC SMALL LETTER HA WITH DESCENDER .. CYRILLIC SMALL LETTER HA WITH DESCENDER
+      (16#004B5#, 16#004B5#),  -- CYRILLIC SMALL LIGATURE TE TSE .. CYRILLIC SMALL LIGATURE TE TSE
+      (16#004B7#, 16#004B7#),  -- CYRILLIC SMALL LETTER CHE WITH DESCENDER .. CYRILLIC SMALL LETTER CHE WITH DESCENDER
+      (16#004B9#, 16#004B9#),  -- CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE .. CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE
+      (16#004BB#, 16#004BB#),  -- CYRILLIC SMALL LETTER SHHA .. CYRILLIC SMALL LETTER SHHA
+      (16#004BD#, 16#004BD#),  -- CYRILLIC SMALL LETTER ABKHASIAN CHE .. CYRILLIC SMALL LETTER ABKHASIAN CHE
+      (16#004BF#, 16#004BF#),  -- CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER .. CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER
+      (16#004C2#, 16#004C2#),  -- CYRILLIC SMALL LETTER ZHE WITH BREVE .. CYRILLIC SMALL LETTER ZHE WITH BREVE
+      (16#004C4#, 16#004C4#),  -- CYRILLIC SMALL LETTER KA WITH HOOK .. CYRILLIC SMALL LETTER KA WITH HOOK
+      (16#004C6#, 16#004C6#),  -- CYRILLIC SMALL LETTER EL WITH TAIL .. CYRILLIC SMALL LETTER EL WITH TAIL
+      (16#004C8#, 16#004C8#),  -- CYRILLIC SMALL LETTER EN WITH HOOK .. CYRILLIC SMALL LETTER EN WITH HOOK
+      (16#004CA#, 16#004CA#),  -- CYRILLIC SMALL LETTER EN WITH TAIL .. CYRILLIC SMALL LETTER EN WITH TAIL
+      (16#004CC#, 16#004CC#),  -- CYRILLIC SMALL LETTER KHAKASSIAN CHE .. CYRILLIC SMALL LETTER KHAKASSIAN CHE
+      (16#004CE#, 16#004CE#),  -- CYRILLIC SMALL LETTER EM WITH TAIL .. CYRILLIC SMALL LETTER EM WITH TAIL
+      (16#004D1#, 16#004D1#),  -- CYRILLIC SMALL LETTER A WITH BREVE .. CYRILLIC SMALL LETTER A WITH BREVE
+      (16#004D3#, 16#004D3#),  -- CYRILLIC SMALL LETTER A WITH DIAERESIS .. CYRILLIC SMALL LETTER A WITH DIAERESIS
+      (16#004D5#, 16#004D5#),  -- CYRILLIC SMALL LIGATURE A IE .. CYRILLIC SMALL LIGATURE A IE
+      (16#004D7#, 16#004D7#),  -- CYRILLIC SMALL LETTER IE WITH BREVE .. CYRILLIC SMALL LETTER IE WITH BREVE
+      (16#004D9#, 16#004D9#),  -- CYRILLIC SMALL LETTER SCHWA .. CYRILLIC SMALL LETTER SCHWA
+      (16#004DB#, 16#004DB#),  -- CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS .. CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
+      (16#004DD#, 16#004DD#),  -- CYRILLIC SMALL LETTER ZHE WITH DIAERESIS .. CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
+      (16#004DF#, 16#004DF#),  -- CYRILLIC SMALL LETTER ZE WITH DIAERESIS .. CYRILLIC SMALL LETTER ZE WITH DIAERESIS
+      (16#004E1#, 16#004E1#),  -- CYRILLIC SMALL LETTER ABKHASIAN DZE .. CYRILLIC SMALL LETTER ABKHASIAN DZE
+      (16#004E3#, 16#004E3#),  -- CYRILLIC SMALL LETTER I WITH MACRON .. CYRILLIC SMALL LETTER I WITH MACRON
+      (16#004E5#, 16#004E5#),  -- CYRILLIC SMALL LETTER I WITH DIAERESIS .. CYRILLIC SMALL LETTER I WITH DIAERESIS
+      (16#004E7#, 16#004E7#),  -- CYRILLIC SMALL LETTER O WITH DIAERESIS .. CYRILLIC SMALL LETTER O WITH DIAERESIS
+      (16#004E9#, 16#004E9#),  -- CYRILLIC SMALL LETTER BARRED O .. CYRILLIC SMALL LETTER BARRED O
+      (16#004EB#, 16#004EB#),  -- CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS .. CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
+      (16#004ED#, 16#004ED#),  -- CYRILLIC SMALL LETTER E WITH DIAERESIS .. CYRILLIC SMALL LETTER E WITH DIAERESIS
+      (16#004EF#, 16#004EF#),  -- CYRILLIC SMALL LETTER U WITH MACRON .. CYRILLIC SMALL LETTER U WITH MACRON
+      (16#004F1#, 16#004F1#),  -- CYRILLIC SMALL LETTER U WITH DIAERESIS .. CYRILLIC SMALL LETTER U WITH DIAERESIS
+      (16#004F3#, 16#004F3#),  -- CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE .. CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
+      (16#004F5#, 16#004F5#),  -- CYRILLIC SMALL LETTER CHE WITH DIAERESIS .. CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+      (16#004F9#, 16#004F9#),  -- CYRILLIC SMALL LETTER YERU WITH DIAERESIS .. CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+      (16#00501#, 16#00501#),  -- CYRILLIC SMALL LETTER KOMI DE .. CYRILLIC SMALL LETTER KOMI DE
+      (16#00503#, 16#00503#),  -- CYRILLIC SMALL LETTER KOMI DJE .. CYRILLIC SMALL LETTER KOMI DJE
+      (16#00505#, 16#00505#),  -- CYRILLIC SMALL LETTER KOMI ZJE .. CYRILLIC SMALL LETTER KOMI ZJE
+      (16#00507#, 16#00507#),  -- CYRILLIC SMALL LETTER KOMI DZJE .. CYRILLIC SMALL LETTER KOMI DZJE
+      (16#00509#, 16#00509#),  -- CYRILLIC SMALL LETTER KOMI LJE .. CYRILLIC SMALL LETTER KOMI LJE
+      (16#0050B#, 16#0050B#),  -- CYRILLIC SMALL LETTER KOMI NJE .. CYRILLIC SMALL LETTER KOMI NJE
+      (16#0050D#, 16#0050D#),  -- CYRILLIC SMALL LETTER KOMI SJE .. CYRILLIC SMALL LETTER KOMI SJE
+      (16#0050F#, 16#0050F#),  -- CYRILLIC SMALL LETTER KOMI TJE .. CYRILLIC SMALL LETTER KOMI TJE
+      (16#00561#, 16#00586#),  -- ARMENIAN SMALL LETTER AYB .. ARMENIAN SMALL LETTER FEH
+      (16#01E01#, 16#01E01#),  -- LATIN SMALL LETTER A WITH RING BELOW .. LATIN SMALL LETTER A WITH RING BELOW
+      (16#01E03#, 16#01E03#),  -- LATIN SMALL LETTER B WITH DOT ABOVE .. LATIN SMALL LETTER B WITH DOT ABOVE
+      (16#01E05#, 16#01E05#),  -- LATIN SMALL LETTER B WITH DOT BELOW .. LATIN SMALL LETTER B WITH DOT BELOW
+      (16#01E07#, 16#01E07#),  -- LATIN SMALL LETTER B WITH LINE BELOW .. LATIN SMALL LETTER B WITH LINE BELOW
+      (16#01E09#, 16#01E09#),  -- LATIN SMALL LETTER C WITH CEDILLA AND ACUTE .. LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+      (16#01E0B#, 16#01E0B#),  -- LATIN SMALL LETTER D WITH DOT ABOVE .. LATIN SMALL LETTER D WITH DOT ABOVE
+      (16#01E0D#, 16#01E0D#),  -- LATIN SMALL LETTER D WITH DOT BELOW .. LATIN SMALL LETTER D WITH DOT BELOW
+      (16#01E0F#, 16#01E0F#),  -- LATIN SMALL LETTER D WITH LINE BELOW .. LATIN SMALL LETTER D WITH LINE BELOW
+      (16#01E11#, 16#01E11#),  -- LATIN SMALL LETTER D WITH CEDILLA .. LATIN SMALL LETTER D WITH CEDILLA
+      (16#01E13#, 16#01E13#),  -- LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW
+      (16#01E15#, 16#01E15#),  -- LATIN SMALL LETTER E WITH MACRON AND GRAVE .. LATIN SMALL LETTER E WITH MACRON AND GRAVE
+      (16#01E17#, 16#01E17#),  -- LATIN SMALL LETTER E WITH MACRON AND ACUTE .. LATIN SMALL LETTER E WITH MACRON AND ACUTE
+      (16#01E19#, 16#01E19#),  -- LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW
+      (16#01E1B#, 16#01E1B#),  -- LATIN SMALL LETTER E WITH TILDE BELOW .. LATIN SMALL LETTER E WITH TILDE BELOW
+      (16#01E1D#, 16#01E1D#),  -- LATIN SMALL LETTER E WITH CEDILLA AND BREVE .. LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+      (16#01E1F#, 16#01E1F#),  -- LATIN SMALL LETTER F WITH DOT ABOVE .. LATIN SMALL LETTER F WITH DOT ABOVE
+      (16#01E21#, 16#01E21#),  -- LATIN SMALL LETTER G WITH MACRON .. LATIN SMALL LETTER G WITH MACRON
+      (16#01E23#, 16#01E23#),  -- LATIN SMALL LETTER H WITH DOT ABOVE .. LATIN SMALL LETTER H WITH DOT ABOVE
+      (16#01E25#, 16#01E25#),  -- LATIN SMALL LETTER H WITH DOT BELOW .. LATIN SMALL LETTER H WITH DOT BELOW
+      (16#01E27#, 16#01E27#),  -- LATIN SMALL LETTER H WITH DIAERESIS .. LATIN SMALL LETTER H WITH DIAERESIS
+      (16#01E29#, 16#01E29#),  -- LATIN SMALL LETTER H WITH CEDILLA .. LATIN SMALL LETTER H WITH CEDILLA
+      (16#01E2B#, 16#01E2B#),  -- LATIN SMALL LETTER H WITH BREVE BELOW .. LATIN SMALL LETTER H WITH BREVE BELOW
+      (16#01E2D#, 16#01E2D#),  -- LATIN SMALL LETTER I WITH TILDE BELOW .. LATIN SMALL LETTER I WITH TILDE BELOW
+      (16#01E2F#, 16#01E2F#),  -- LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE .. LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
+      (16#01E31#, 16#01E31#),  -- LATIN SMALL LETTER K WITH ACUTE .. LATIN SMALL LETTER K WITH ACUTE
+      (16#01E33#, 16#01E33#),  -- LATIN SMALL LETTER K WITH DOT BELOW .. LATIN SMALL LETTER K WITH DOT BELOW
+      (16#01E35#, 16#01E35#),  -- LATIN SMALL LETTER K WITH LINE BELOW .. LATIN SMALL LETTER K WITH LINE BELOW
+      (16#01E37#, 16#01E37#),  -- LATIN SMALL LETTER L WITH DOT BELOW .. LATIN SMALL LETTER L WITH DOT BELOW
+      (16#01E39#, 16#01E39#),  -- LATIN SMALL LETTER L WITH DOT BELOW AND MACRON .. LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
+      (16#01E3B#, 16#01E3B#),  -- LATIN SMALL LETTER L WITH LINE BELOW .. LATIN SMALL LETTER L WITH LINE BELOW
+      (16#01E3D#, 16#01E3D#),  -- LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW
+      (16#01E3F#, 16#01E3F#),  -- LATIN SMALL LETTER M WITH ACUTE .. LATIN SMALL LETTER M WITH ACUTE
+      (16#01E41#, 16#01E41#),  -- LATIN SMALL LETTER M WITH DOT ABOVE .. LATIN SMALL LETTER M WITH DOT ABOVE
+      (16#01E43#, 16#01E43#),  -- LATIN SMALL LETTER M WITH DOT BELOW .. LATIN SMALL LETTER M WITH DOT BELOW
+      (16#01E45#, 16#01E45#),  -- LATIN SMALL LETTER N WITH DOT ABOVE .. LATIN SMALL LETTER N WITH DOT ABOVE
+      (16#01E47#, 16#01E47#),  -- LATIN SMALL LETTER N WITH DOT BELOW .. LATIN SMALL LETTER N WITH DOT BELOW
+      (16#01E49#, 16#01E49#),  -- LATIN SMALL LETTER N WITH LINE BELOW .. LATIN SMALL LETTER N WITH LINE BELOW
+      (16#01E4B#, 16#01E4B#),  -- LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW
+      (16#01E4D#, 16#01E4D#),  -- LATIN SMALL LETTER O WITH TILDE AND ACUTE .. LATIN SMALL LETTER O WITH TILDE AND ACUTE
+      (16#01E4F#, 16#01E4F#),  -- LATIN SMALL LETTER O WITH TILDE AND DIAERESIS .. LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
+      (16#01E51#, 16#01E51#),  -- LATIN SMALL LETTER O WITH MACRON AND GRAVE .. LATIN SMALL LETTER O WITH MACRON AND GRAVE
+      (16#01E53#, 16#01E53#),  -- LATIN SMALL LETTER O WITH MACRON AND ACUTE .. LATIN SMALL LETTER O WITH MACRON AND ACUTE
+      (16#01E55#, 16#01E55#),  -- LATIN SMALL LETTER P WITH ACUTE .. LATIN SMALL LETTER P WITH ACUTE
+      (16#01E57#, 16#01E57#),  -- LATIN SMALL LETTER P WITH DOT ABOVE .. LATIN SMALL LETTER P WITH DOT ABOVE
+      (16#01E59#, 16#01E59#),  -- LATIN SMALL LETTER R WITH DOT ABOVE .. LATIN SMALL LETTER R WITH DOT ABOVE
+      (16#01E5B#, 16#01E5B#),  -- LATIN SMALL LETTER R WITH DOT BELOW .. LATIN SMALL LETTER R WITH DOT BELOW
+      (16#01E5D#, 16#01E5D#),  -- LATIN SMALL LETTER R WITH DOT BELOW AND MACRON .. LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
+      (16#01E5F#, 16#01E5F#),  -- LATIN SMALL LETTER R WITH LINE BELOW .. LATIN SMALL LETTER R WITH LINE BELOW
+      (16#01E61#, 16#01E61#),  -- LATIN SMALL LETTER S WITH DOT ABOVE .. LATIN SMALL LETTER S WITH DOT ABOVE
+      (16#01E63#, 16#01E63#),  -- LATIN SMALL LETTER S WITH DOT BELOW .. LATIN SMALL LETTER S WITH DOT BELOW
+      (16#01E65#, 16#01E65#),  -- LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE .. LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
+      (16#01E67#, 16#01E67#),  -- LATIN SMALL LETTER S WITH CARON AND DOT ABOVE .. LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
+      (16#01E69#, 16#01E69#),  -- LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE .. LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
+      (16#01E6B#, 16#01E6B#),  -- LATIN SMALL LETTER T WITH DOT ABOVE .. LATIN SMALL LETTER T WITH DOT ABOVE
+      (16#01E6D#, 16#01E6D#),  -- LATIN SMALL LETTER T WITH DOT BELOW .. LATIN SMALL LETTER T WITH DOT BELOW
+      (16#01E6F#, 16#01E6F#),  -- LATIN SMALL LETTER T WITH LINE BELOW .. LATIN SMALL LETTER T WITH LINE BELOW
+      (16#01E71#, 16#01E71#),  -- LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW
+      (16#01E73#, 16#01E73#),  -- LATIN SMALL LETTER U WITH DIAERESIS BELOW .. LATIN SMALL LETTER U WITH DIAERESIS BELOW
+      (16#01E75#, 16#01E75#),  -- LATIN SMALL LETTER U WITH TILDE BELOW .. LATIN SMALL LETTER U WITH TILDE BELOW
+      (16#01E77#, 16#01E77#),  -- LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW
+      (16#01E79#, 16#01E79#),  -- LATIN SMALL LETTER U WITH TILDE AND ACUTE .. LATIN SMALL LETTER U WITH TILDE AND ACUTE
+      (16#01E7B#, 16#01E7B#),  -- LATIN SMALL LETTER U WITH MACRON AND DIAERESIS .. LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
+      (16#01E7D#, 16#01E7D#),  -- LATIN SMALL LETTER V WITH TILDE .. LATIN SMALL LETTER V WITH TILDE
+      (16#01E7F#, 16#01E7F#),  -- LATIN SMALL LETTER V WITH DOT BELOW .. LATIN SMALL LETTER V WITH DOT BELOW
+      (16#01E81#, 16#01E81#),  -- LATIN SMALL LETTER W WITH GRAVE .. LATIN SMALL LETTER W WITH GRAVE
+      (16#01E83#, 16#01E83#),  -- LATIN SMALL LETTER W WITH ACUTE .. LATIN SMALL LETTER W WITH ACUTE
+      (16#01E85#, 16#01E85#),  -- LATIN SMALL LETTER W WITH DIAERESIS .. LATIN SMALL LETTER W WITH DIAERESIS
+      (16#01E87#, 16#01E87#),  -- LATIN SMALL LETTER W WITH DOT ABOVE .. LATIN SMALL LETTER W WITH DOT ABOVE
+      (16#01E89#, 16#01E89#),  -- LATIN SMALL LETTER W WITH DOT BELOW .. LATIN SMALL LETTER W WITH DOT BELOW
+      (16#01E8B#, 16#01E8B#),  -- LATIN SMALL LETTER X WITH DOT ABOVE .. LATIN SMALL LETTER X WITH DOT ABOVE
+      (16#01E8D#, 16#01E8D#),  -- LATIN SMALL LETTER X WITH DIAERESIS .. LATIN SMALL LETTER X WITH DIAERESIS
+      (16#01E8F#, 16#01E8F#),  -- LATIN SMALL LETTER Y WITH DOT ABOVE .. LATIN SMALL LETTER Y WITH DOT ABOVE
+      (16#01E91#, 16#01E91#),  -- LATIN SMALL LETTER Z WITH CIRCUMFLEX .. LATIN SMALL LETTER Z WITH CIRCUMFLEX
+      (16#01E93#, 16#01E93#),  -- LATIN SMALL LETTER Z WITH DOT BELOW .. LATIN SMALL LETTER Z WITH DOT BELOW
+      (16#01E95#, 16#01E95#),  -- LATIN SMALL LETTER Z WITH LINE BELOW .. LATIN SMALL LETTER Z WITH LINE BELOW
+      (16#01E9B#, 16#01E9B#),  -- LATIN SMALL LETTER LONG S WITH DOT ABOVE .. LATIN SMALL LETTER LONG S WITH DOT ABOVE
+      (16#01EA1#, 16#01EA1#),  -- LATIN SMALL LETTER A WITH DOT BELOW .. LATIN SMALL LETTER A WITH DOT BELOW
+      (16#01EA3#, 16#01EA3#),  -- LATIN SMALL LETTER A WITH HOOK ABOVE .. LATIN SMALL LETTER A WITH HOOK ABOVE
+      (16#01EA5#, 16#01EA5#),  -- LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE .. LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+      (16#01EA7#, 16#01EA7#),  -- LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE .. LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
+      (16#01EA9#, 16#01EA9#),  -- LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE .. LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+      (16#01EAB#, 16#01EAB#),  -- LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE .. LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
+      (16#01EAD#, 16#01EAD#),  -- LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW .. LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+      (16#01EAF#, 16#01EAF#),  -- LATIN SMALL LETTER A WITH BREVE AND ACUTE .. LATIN SMALL LETTER A WITH BREVE AND ACUTE
+      (16#01EB1#, 16#01EB1#),  -- LATIN SMALL LETTER A WITH BREVE AND GRAVE .. LATIN SMALL LETTER A WITH BREVE AND GRAVE
+      (16#01EB3#, 16#01EB3#),  -- LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE .. LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
+      (16#01EB5#, 16#01EB5#),  -- LATIN SMALL LETTER A WITH BREVE AND TILDE .. LATIN SMALL LETTER A WITH BREVE AND TILDE
+      (16#01EB7#, 16#01EB7#),  -- LATIN SMALL LETTER A WITH BREVE AND DOT BELOW .. LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+      (16#01EB9#, 16#01EB9#),  -- LATIN SMALL LETTER E WITH DOT BELOW .. LATIN SMALL LETTER E WITH DOT BELOW
+      (16#01EBB#, 16#01EBB#),  -- LATIN SMALL LETTER E WITH HOOK ABOVE .. LATIN SMALL LETTER E WITH HOOK ABOVE
+      (16#01EBD#, 16#01EBD#),  -- LATIN SMALL LETTER E WITH TILDE .. LATIN SMALL LETTER E WITH TILDE
+      (16#01EBF#, 16#01EBF#),  -- LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE .. LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+      (16#01EC1#, 16#01EC1#),  -- LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE .. LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+      (16#01EC3#, 16#01EC3#),  -- LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE .. LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+      (16#01EC5#, 16#01EC5#),  -- LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE .. LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+      (16#01EC7#, 16#01EC7#),  -- LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW .. LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+      (16#01EC9#, 16#01EC9#),  -- LATIN SMALL LETTER I WITH HOOK ABOVE .. LATIN SMALL LETTER I WITH HOOK ABOVE
+      (16#01ECB#, 16#01ECB#),  -- LATIN SMALL LETTER I WITH DOT BELOW .. LATIN SMALL LETTER I WITH DOT BELOW
+      (16#01ECD#, 16#01ECD#),  -- LATIN SMALL LETTER O WITH DOT BELOW .. LATIN SMALL LETTER O WITH DOT BELOW
+      (16#01ECF#, 16#01ECF#),  -- LATIN SMALL LETTER O WITH HOOK ABOVE .. LATIN SMALL LETTER O WITH HOOK ABOVE
+      (16#01ED1#, 16#01ED1#),  -- LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE .. LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+      (16#01ED3#, 16#01ED3#),  -- LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE .. LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+      (16#01ED5#, 16#01ED5#),  -- LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE .. LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+      (16#01ED7#, 16#01ED7#),  -- LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE .. LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+      (16#01ED9#, 16#01ED9#),  -- LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW .. LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+      (16#01EDB#, 16#01EDB#),  -- LATIN SMALL LETTER O WITH HORN AND ACUTE .. LATIN SMALL LETTER O WITH HORN AND ACUTE
+      (16#01EDD#, 16#01EDD#),  -- LATIN SMALL LETTER O WITH HORN AND GRAVE .. LATIN SMALL LETTER O WITH HORN AND GRAVE
+      (16#01EDF#, 16#01EDF#),  -- LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE .. LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
+      (16#01EE1#, 16#01EE1#),  -- LATIN SMALL LETTER O WITH HORN AND TILDE .. LATIN SMALL LETTER O WITH HORN AND TILDE
+      (16#01EE3#, 16#01EE3#),  -- LATIN SMALL LETTER O WITH HORN AND DOT BELOW .. LATIN SMALL LETTER O WITH HORN AND DOT BELOW
+      (16#01EE5#, 16#01EE5#),  -- LATIN SMALL LETTER U WITH DOT BELOW .. LATIN SMALL LETTER U WITH DOT BELOW
+      (16#01EE7#, 16#01EE7#),  -- LATIN SMALL LETTER U WITH HOOK ABOVE .. LATIN SMALL LETTER U WITH HOOK ABOVE
+      (16#01EE9#, 16#01EE9#),  -- LATIN SMALL LETTER U WITH HORN AND ACUTE .. LATIN SMALL LETTER U WITH HORN AND ACUTE
+      (16#01EEB#, 16#01EEB#),  -- LATIN SMALL LETTER U WITH HORN AND GRAVE .. LATIN SMALL LETTER U WITH HORN AND GRAVE
+      (16#01EED#, 16#01EED#),  -- LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE .. LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
+      (16#01EEF#, 16#01EEF#),  -- LATIN SMALL LETTER U WITH HORN AND TILDE .. LATIN SMALL LETTER U WITH HORN AND TILDE
+      (16#01EF1#, 16#01EF1#),  -- LATIN SMALL LETTER U WITH HORN AND DOT BELOW .. LATIN SMALL LETTER U WITH HORN AND DOT BELOW
+      (16#01EF3#, 16#01EF3#),  -- LATIN SMALL LETTER Y WITH GRAVE .. LATIN SMALL LETTER Y WITH GRAVE
+      (16#01EF5#, 16#01EF5#),  -- LATIN SMALL LETTER Y WITH DOT BELOW .. LATIN SMALL LETTER Y WITH DOT BELOW
+      (16#01EF7#, 16#01EF7#),  -- LATIN SMALL LETTER Y WITH HOOK ABOVE .. LATIN SMALL LETTER Y WITH HOOK ABOVE
+      (16#01EF9#, 16#01EF9#),  -- LATIN SMALL LETTER Y WITH TILDE .. LATIN SMALL LETTER Y WITH TILDE
+      (16#01F00#, 16#01F07#),  -- GREEK SMALL LETTER ALPHA WITH PSILI .. GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
+      (16#01F10#, 16#01F15#),  -- GREEK SMALL LETTER EPSILON WITH PSILI .. GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+      (16#01F20#, 16#01F27#),  -- GREEK SMALL LETTER ETA WITH PSILI .. GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
+      (16#01F30#, 16#01F37#),  -- GREEK SMALL LETTER IOTA WITH PSILI .. GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
+      (16#01F40#, 16#01F45#),  -- GREEK SMALL LETTER OMICRON WITH PSILI .. GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+      (16#01F51#, 16#01F51#),  -- GREEK SMALL LETTER UPSILON WITH DASIA .. GREEK SMALL LETTER UPSILON WITH DASIA
+      (16#01F53#, 16#01F53#),  -- GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA .. GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
+      (16#01F55#, 16#01F55#),  -- GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA .. GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
+      (16#01F57#, 16#01F57#),  -- GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI .. GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+      (16#01F60#, 16#01F67#),  -- GREEK SMALL LETTER OMEGA WITH PSILI .. GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
+      (16#01F70#, 16#01F71#),  -- GREEK SMALL LETTER ALPHA WITH VARIA .. GREEK SMALL LETTER ALPHA WITH OXIA
+      (16#01F72#, 16#01F75#),  -- GREEK SMALL LETTER EPSILON WITH VARIA .. GREEK SMALL LETTER ETA WITH OXIA
+      (16#01F76#, 16#01F77#),  -- GREEK SMALL LETTER IOTA WITH VARIA .. GREEK SMALL LETTER IOTA WITH OXIA
+      (16#01F78#, 16#01F79#),  -- GREEK SMALL LETTER OMICRON WITH VARIA .. GREEK SMALL LETTER OMICRON WITH OXIA
+      (16#01F7A#, 16#01F7B#),  -- GREEK SMALL LETTER UPSILON WITH VARIA .. GREEK SMALL LETTER UPSILON WITH OXIA
+      (16#01F7C#, 16#01F7D#),  -- GREEK SMALL LETTER OMEGA WITH VARIA .. GREEK SMALL LETTER OMEGA WITH OXIA
+      (16#01F80#, 16#01F87#),  -- GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI .. GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+      (16#01F90#, 16#01F97#),  -- GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI .. GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+      (16#01FA0#, 16#01FA7#),  -- GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI .. GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+      (16#01FB0#, 16#01FB1#),  -- GREEK SMALL LETTER ALPHA WITH VRACHY .. GREEK SMALL LETTER ALPHA WITH MACRON
+      (16#01FB3#, 16#01FB3#),  -- GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI .. GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
+      (16#01FBE#, 16#01FBE#),  -- GREEK PROSGEGRAMMENI .. GREEK PROSGEGRAMMENI
+      (16#01FC3#, 16#01FC3#),  -- GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI .. GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
+      (16#01FD0#, 16#01FD1#),  -- GREEK SMALL LETTER IOTA WITH VRACHY .. GREEK SMALL LETTER IOTA WITH MACRON
+      (16#01FE0#, 16#01FE1#),  -- GREEK SMALL LETTER UPSILON WITH VRACHY .. GREEK SMALL LETTER UPSILON WITH MACRON
+      (16#01FE5#, 16#01FE5#),  -- GREEK SMALL LETTER RHO WITH DASIA .. GREEK SMALL LETTER RHO WITH DASIA
+      (16#01FF3#, 16#01FF3#),  -- GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI .. GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
+      (16#0FF41#, 16#0FF5A#),  -- FULLWIDTH LATIN SMALL LETTER A .. FULLWIDTH LATIN SMALL LETTER Z
+      (16#10428#, 16#1044D#)); -- DESERET SMALL LETTER LONG I .. DESERET SMALL LETTER ENG
+ 
+    Upper_Case_Adjust : constant array (Lower_Case_Letters'Range) of UTF_32 := (
+        -32,  -- LATIN SMALL LETTER A .. LATIN SMALL LETTER Z
+        743,  -- MICRO SIGN .. MICRO SIGN
+        -32,  -- LATIN SMALL LETTER A WITH GRAVE .. LATIN SMALL LETTER O WITH DIAERESIS
+        -32,  -- LATIN SMALL LETTER O WITH STROKE .. LATIN SMALL LETTER THORN
+        121,  -- LATIN SMALL LETTER Y WITH DIAERESIS .. LATIN SMALL LETTER Y WITH DIAERESIS
+         -1,  -- LATIN SMALL LETTER A WITH MACRON .. LATIN SMALL LETTER A WITH MACRON
+         -1,  -- LATIN SMALL LETTER A WITH BREVE .. LATIN SMALL LETTER A WITH BREVE
+         -1,  -- LATIN SMALL LETTER A WITH OGONEK .. LATIN SMALL LETTER A WITH OGONEK
+         -1,  -- LATIN SMALL LETTER C WITH ACUTE .. LATIN SMALL LETTER C WITH ACUTE
+         -1,  -- LATIN SMALL LETTER C WITH CIRCUMFLEX .. LATIN SMALL LETTER C WITH CIRCUMFLEX
+         -1,  -- LATIN SMALL LETTER C WITH DOT ABOVE .. LATIN SMALL LETTER C WITH DOT ABOVE
+         -1,  -- LATIN SMALL LETTER C WITH CARON .. LATIN SMALL LETTER C WITH CARON
+         -1,  -- LATIN SMALL LETTER D WITH CARON .. LATIN SMALL LETTER D WITH CARON
+         -1,  -- LATIN SMALL LETTER D WITH STROKE .. LATIN SMALL LETTER D WITH STROKE
+         -1,  -- LATIN SMALL LETTER E WITH MACRON .. LATIN SMALL LETTER E WITH MACRON
+         -1,  -- LATIN SMALL LETTER E WITH BREVE .. LATIN SMALL LETTER E WITH BREVE
+         -1,  -- LATIN SMALL LETTER E WITH DOT ABOVE .. LATIN SMALL LETTER E WITH DOT ABOVE
+         -1,  -- LATIN SMALL LETTER E WITH OGONEK .. LATIN SMALL LETTER E WITH OGONEK
+         -1,  -- LATIN SMALL LETTER E WITH CARON .. LATIN SMALL LETTER E WITH CARON
+         -1,  -- LATIN SMALL LETTER G WITH CIRCUMFLEX .. LATIN SMALL LETTER G WITH CIRCUMFLEX
+         -1,  -- LATIN SMALL LETTER G WITH BREVE .. LATIN SMALL LETTER G WITH BREVE
+         -1,  -- LATIN SMALL LETTER G WITH DOT ABOVE .. LATIN SMALL LETTER G WITH DOT ABOVE
+         -1,  -- LATIN SMALL LETTER G WITH CEDILLA .. LATIN SMALL LETTER G WITH CEDILLA
+         -1,  -- LATIN SMALL LETTER H WITH CIRCUMFLEX .. LATIN SMALL LETTER H WITH CIRCUMFLEX
+         -1,  -- LATIN SMALL LETTER H WITH STROKE .. LATIN SMALL LETTER H WITH STROKE
+         -1,  -- LATIN SMALL LETTER I WITH TILDE .. LATIN SMALL LETTER I WITH TILDE
+         -1,  -- LATIN SMALL LETTER I WITH MACRON .. LATIN SMALL LETTER I WITH MACRON
+         -1,  -- LATIN SMALL LETTER I WITH BREVE .. LATIN SMALL LETTER I WITH BREVE
+         -1,  -- LATIN SMALL LETTER I WITH OGONEK .. LATIN SMALL LETTER I WITH OGONEK
+       -232,  -- LATIN SMALL LETTER DOTLESS I .. LATIN SMALL LETTER DOTLESS I
+         -1,  -- LATIN SMALL LIGATURE IJ .. LATIN SMALL LIGATURE IJ
+         -1,  -- LATIN SMALL LETTER J WITH CIRCUMFLEX .. LATIN SMALL LETTER J WITH CIRCUMFLEX
+         -1,  -- LATIN SMALL LETTER K WITH CEDILLA .. LATIN SMALL LETTER K WITH CEDILLA
+         -1,  -- LATIN SMALL LETTER L WITH ACUTE .. LATIN SMALL LETTER L WITH ACUTE
+         -1,  -- LATIN SMALL LETTER L WITH CEDILLA .. LATIN SMALL LETTER L WITH CEDILLA
+         -1,  -- LATIN SMALL LETTER L WITH CARON .. LATIN SMALL LETTER L WITH CARON
+         -1,  -- LATIN SMALL LETTER L WITH MIDDLE DOT .. LATIN SMALL LETTER L WITH MIDDLE DOT
+         -1,  -- LATIN SMALL LETTER L WITH STROKE .. LATIN SMALL LETTER L WITH STROKE
+         -1,  -- LATIN SMALL LETTER N WITH ACUTE .. LATIN SMALL LETTER N WITH ACUTE
+         -1,  -- LATIN SMALL LETTER N WITH CEDILLA .. LATIN SMALL LETTER N WITH CEDILLA
+         -1,  -- LATIN SMALL LETTER N WITH CARON .. LATIN SMALL LETTER N WITH CARON
+         -1,  -- LATIN SMALL LETTER ENG .. LATIN SMALL LETTER ENG
+         -1,  -- LATIN SMALL LETTER O WITH MACRON .. LATIN SMALL LETTER O WITH MACRON
+         -1,  -- LATIN SMALL LETTER O WITH BREVE .. LATIN SMALL LETTER O WITH BREVE
+         -1,  -- LATIN SMALL LETTER O WITH DOUBLE ACUTE .. LATIN SMALL LETTER O WITH DOUBLE ACUTE
+         -1,  -- LATIN SMALL LIGATURE OE .. LATIN SMALL LIGATURE OE
+         -1,  -- LATIN SMALL LETTER R WITH ACUTE .. LATIN SMALL LETTER R WITH ACUTE
+         -1,  -- LATIN SMALL LETTER R WITH CEDILLA .. LATIN SMALL LETTER R WITH CEDILLA
+         -1,  -- LATIN SMALL LETTER R WITH CARON .. LATIN SMALL LETTER R WITH CARON
+         -1,  -- LATIN SMALL LETTER S WITH ACUTE .. LATIN SMALL LETTER S WITH ACUTE
+         -1,  -- LATIN SMALL LETTER S WITH CIRCUMFLEX .. LATIN SMALL LETTER S WITH CIRCUMFLEX
+         -1,  -- LATIN SMALL LETTER S WITH CEDILLA .. LATIN SMALL LETTER S WITH CEDILLA
+         -1,  -- LATIN SMALL LETTER S WITH CARON .. LATIN SMALL LETTER S WITH CARON
+         -1,  -- LATIN SMALL LETTER T WITH CEDILLA .. LATIN SMALL LETTER T WITH CEDILLA
+         -1,  -- LATIN SMALL LETTER T WITH CARON .. LATIN SMALL LETTER T WITH CARON
+         -1,  -- LATIN SMALL LETTER T WITH STROKE .. LATIN SMALL LETTER T WITH STROKE
+         -1,  -- LATIN SMALL LETTER U WITH TILDE .. LATIN SMALL LETTER U WITH TILDE
+         -1,  -- LATIN SMALL LETTER U WITH MACRON .. LATIN SMALL LETTER U WITH MACRON
+         -1,  -- LATIN SMALL LETTER U WITH BREVE .. LATIN SMALL LETTER U WITH BREVE
+         -1,  -- LATIN SMALL LETTER U WITH RING ABOVE .. LATIN SMALL LETTER U WITH RING ABOVE
+         -1,  -- LATIN SMALL LETTER U WITH DOUBLE ACUTE .. LATIN SMALL LETTER U WITH DOUBLE ACUTE
+         -1,  -- LATIN SMALL LETTER U WITH OGONEK .. LATIN SMALL LETTER U WITH OGONEK
+         -1,  -- LATIN SMALL LETTER W WITH CIRCUMFLEX .. LATIN SMALL LETTER W WITH CIRCUMFLEX
+         -1,  -- LATIN SMALL LETTER Y WITH CIRCUMFLEX .. LATIN SMALL LETTER Y WITH CIRCUMFLEX
+         -1,  -- LATIN SMALL LETTER Z WITH ACUTE .. LATIN SMALL LETTER Z WITH ACUTE
+         -1,  -- LATIN SMALL LETTER Z WITH DOT ABOVE .. LATIN SMALL LETTER Z WITH DOT ABOVE
+         -1,  -- LATIN SMALL LETTER Z WITH CARON .. LATIN SMALL LETTER Z WITH CARON
+       -300,  -- LATIN SMALL LETTER LONG S .. LATIN SMALL LETTER LONG S
+         -1,  -- LATIN SMALL LETTER B WITH TOPBAR .. LATIN SMALL LETTER B WITH TOPBAR
+         -1,  -- LATIN SMALL LETTER TONE SIX .. LATIN SMALL LETTER TONE SIX
+         -1,  -- LATIN SMALL LETTER C WITH HOOK .. LATIN SMALL LETTER C WITH HOOK
+         -1,  -- LATIN SMALL LETTER D WITH TOPBAR .. LATIN SMALL LETTER D WITH TOPBAR
+         -1,  -- LATIN SMALL LETTER F WITH HOOK .. LATIN SMALL LETTER F WITH HOOK
+         97,  -- LATIN SMALL LETTER HV .. LATIN SMALL LETTER HV
+         -1,  -- LATIN SMALL LETTER K WITH HOOK .. LATIN SMALL LETTER K WITH HOOK
+        130,  -- LATIN SMALL LETTER N WITH LONG RIGHT LEG .. LATIN SMALL LETTER N WITH LONG RIGHT LEG
+         -1,  -- LATIN SMALL LETTER O WITH HORN .. LATIN SMALL LETTER O WITH HORN
+         -1,  -- LATIN SMALL LETTER OI .. LATIN SMALL LETTER OI
+         -1,  -- LATIN SMALL LETTER P WITH HOOK .. LATIN SMALL LETTER P WITH HOOK
+         -1,  -- LATIN SMALL LETTER TONE TWO .. LATIN SMALL LETTER TONE TWO
+         -1,  -- LATIN SMALL LETTER T WITH HOOK .. LATIN SMALL LETTER T WITH HOOK
+         -1,  -- LATIN SMALL LETTER U WITH HORN .. LATIN SMALL LETTER U WITH HORN
+         -1,  -- LATIN SMALL LETTER Y WITH HOOK .. LATIN SMALL LETTER Y WITH HOOK
+         -1,  -- LATIN SMALL LETTER Z WITH STROKE .. LATIN SMALL LETTER Z WITH STROKE
+         -1,  -- LATIN SMALL LETTER EZH REVERSED .. LATIN SMALL LETTER EZH REVERSED
+         -1,  -- LATIN SMALL LETTER TONE FIVE .. LATIN SMALL LETTER TONE FIVE
+         56,  -- LATIN LETTER WYNN .. LATIN LETTER WYNN
+         -1,  -- LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON .. LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
+         -2,  -- LATIN SMALL LETTER DZ WITH CARON .. LATIN SMALL LETTER DZ WITH CARON
+         -1,  -- LATIN CAPITAL LETTER L WITH SMALL LETTER J .. LATIN CAPITAL LETTER L WITH SMALL LETTER J
+         -2,  -- LATIN SMALL LETTER LJ .. LATIN SMALL LETTER LJ
+         -1,  -- LATIN CAPITAL LETTER N WITH SMALL LETTER J .. LATIN CAPITAL LETTER N WITH SMALL LETTER J
+         -2,  -- LATIN SMALL LETTER NJ .. LATIN SMALL LETTER NJ
+         -1,  -- LATIN SMALL LETTER A WITH CARON .. LATIN SMALL LETTER A WITH CARON
+         -1,  -- LATIN SMALL LETTER I WITH CARON .. LATIN SMALL LETTER I WITH CARON
+         -1,  -- LATIN SMALL LETTER O WITH CARON .. LATIN SMALL LETTER O WITH CARON
+         -1,  -- LATIN SMALL LETTER U WITH CARON .. LATIN SMALL LETTER U WITH CARON
+         -1,  -- LATIN SMALL LETTER U WITH DIAERESIS AND MACRON .. LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+         -1,  -- LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE .. LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+         -1,  -- LATIN SMALL LETTER U WITH DIAERESIS AND CARON .. LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+         -1,  -- LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE .. LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+        -79,  -- LATIN SMALL LETTER TURNED E .. LATIN SMALL LETTER TURNED E
+         -1,  -- LATIN SMALL LETTER A WITH DIAERESIS AND MACRON .. LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+         -1,  -- LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON .. LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+         -1,  -- LATIN SMALL LETTER AE WITH MACRON .. LATIN SMALL LETTER AE WITH MACRON
+         -1,  -- LATIN SMALL LETTER G WITH STROKE .. LATIN SMALL LETTER G WITH STROKE
+         -1,  -- LATIN SMALL LETTER G WITH CARON .. LATIN SMALL LETTER G WITH CARON
+         -1,  -- LATIN SMALL LETTER K WITH CARON .. LATIN SMALL LETTER K WITH CARON
+         -1,  -- LATIN SMALL LETTER O WITH OGONEK .. LATIN SMALL LETTER O WITH OGONEK
+         -1,  -- LATIN SMALL LETTER O WITH OGONEK AND MACRON .. LATIN SMALL LETTER O WITH OGONEK AND MACRON
+         -1,  -- LATIN SMALL LETTER EZH WITH CARON .. LATIN SMALL LETTER EZH WITH CARON
+         -1,  -- LATIN CAPITAL LETTER D WITH SMALL LETTER Z .. LATIN CAPITAL LETTER D WITH SMALL LETTER Z
+         -2,  -- LATIN SMALL LETTER DZ .. LATIN SMALL LETTER DZ
+         -1,  -- LATIN SMALL LETTER G WITH ACUTE .. LATIN SMALL LETTER G WITH ACUTE
+         -1,  -- LATIN SMALL LETTER N WITH GRAVE .. LATIN SMALL LETTER N WITH GRAVE
+         -1,  -- LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE .. LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+         -1,  -- LATIN SMALL LETTER AE WITH ACUTE .. LATIN SMALL LETTER AE WITH ACUTE
+         -1,  -- LATIN SMALL LETTER O WITH STROKE AND ACUTE .. LATIN SMALL LETTER O WITH STROKE AND ACUTE
+         -1,  -- LATIN SMALL LETTER A WITH DOUBLE GRAVE .. LATIN SMALL LETTER A WITH DOUBLE GRAVE
+         -1,  -- LATIN SMALL LETTER A WITH INVERTED BREVE .. LATIN SMALL LETTER A WITH INVERTED BREVE
+         -1,  -- LATIN SMALL LETTER E WITH DOUBLE GRAVE .. LATIN SMALL LETTER E WITH DOUBLE GRAVE
+         -1,  -- LATIN SMALL LETTER E WITH INVERTED BREVE .. LATIN SMALL LETTER E WITH INVERTED BREVE
+         -1,  -- LATIN SMALL LETTER I WITH DOUBLE GRAVE .. LATIN SMALL LETTER I WITH DOUBLE GRAVE
+         -1,  -- LATIN SMALL LETTER I WITH INVERTED BREVE .. LATIN SMALL LETTER I WITH INVERTED BREVE
+         -1,  -- LATIN SMALL LETTER O WITH DOUBLE GRAVE .. LATIN SMALL LETTER O WITH DOUBLE GRAVE
+         -1,  -- LATIN SMALL LETTER O WITH INVERTED BREVE .. LATIN SMALL LETTER O WITH INVERTED BREVE
+         -1,  -- LATIN SMALL LETTER R WITH DOUBLE GRAVE .. LATIN SMALL LETTER R WITH DOUBLE GRAVE
+         -1,  -- LATIN SMALL LETTER R WITH INVERTED BREVE .. LATIN SMALL LETTER R WITH INVERTED BREVE
+         -1,  -- LATIN SMALL LETTER U WITH DOUBLE GRAVE .. LATIN SMALL LETTER U WITH DOUBLE GRAVE
+         -1,  -- LATIN SMALL LETTER U WITH INVERTED BREVE .. LATIN SMALL LETTER U WITH INVERTED BREVE
+         -1,  -- LATIN SMALL LETTER S WITH COMMA BELOW .. LATIN SMALL LETTER S WITH COMMA BELOW
+         -1,  -- LATIN SMALL LETTER T WITH COMMA BELOW .. LATIN SMALL LETTER T WITH COMMA BELOW
+         -1,  -- LATIN SMALL LETTER YOGH .. LATIN SMALL LETTER YOGH
+         -1,  -- LATIN SMALL LETTER H WITH CARON .. LATIN SMALL LETTER H WITH CARON
+         -1,  -- LATIN SMALL LETTER OU .. LATIN SMALL LETTER OU
+         -1,  -- LATIN SMALL LETTER Z WITH HOOK .. LATIN SMALL LETTER Z WITH HOOK
+         -1,  -- LATIN SMALL LETTER A WITH DOT ABOVE .. LATIN SMALL LETTER A WITH DOT ABOVE
+         -1,  -- LATIN SMALL LETTER E WITH CEDILLA .. LATIN SMALL LETTER E WITH CEDILLA
+         -1,  -- LATIN SMALL LETTER O WITH DIAERESIS AND MACRON .. LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
+         -1,  -- LATIN SMALL LETTER O WITH TILDE AND MACRON .. LATIN SMALL LETTER O WITH TILDE AND MACRON
+         -1,  -- LATIN SMALL LETTER O WITH DOT ABOVE .. LATIN SMALL LETTER O WITH DOT ABOVE
+         -1,  -- LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON .. LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
+         -1,  -- LATIN SMALL LETTER Y WITH MACRON .. LATIN SMALL LETTER Y WITH MACRON
+       -210,  -- LATIN SMALL LETTER B WITH HOOK .. LATIN SMALL LETTER B WITH HOOK
+       -206,  -- LATIN SMALL LETTER OPEN O .. LATIN SMALL LETTER OPEN O
+       -205,  -- LATIN SMALL LETTER D WITH TAIL .. LATIN SMALL LETTER D WITH HOOK
+       -202,  -- LATIN SMALL LETTER SCHWA .. LATIN SMALL LETTER SCHWA
+       -203,  -- LATIN SMALL LETTER OPEN E .. LATIN SMALL LETTER OPEN E
+       -205,  -- LATIN SMALL LETTER G WITH HOOK .. LATIN SMALL LETTER G WITH HOOK
+       -207,  -- LATIN SMALL LETTER GAMMA .. LATIN SMALL LETTER GAMMA
+       -209,  -- LATIN SMALL LETTER I WITH STROKE .. LATIN SMALL LETTER I WITH STROKE
+       -211,  -- LATIN SMALL LETTER IOTA .. LATIN SMALL LETTER IOTA
+       -211,  -- LATIN SMALL LETTER TURNED M .. LATIN SMALL LETTER TURNED M
+       -213,  -- LATIN SMALL LETTER N WITH LEFT HOOK .. LATIN SMALL LETTER N WITH LEFT HOOK
+       -214,  -- LATIN SMALL LETTER BARRED O .. LATIN SMALL LETTER BARRED O
+       -218,  -- LATIN LETTER SMALL CAPITAL R .. LATIN LETTER SMALL CAPITAL R
+       -218,  -- LATIN SMALL LETTER ESH .. LATIN SMALL LETTER ESH
+       -218,  -- LATIN SMALL LETTER T WITH RETROFLEX HOOK .. LATIN SMALL LETTER T WITH RETROFLEX HOOK
+       -217,  -- LATIN SMALL LETTER UPSILON .. LATIN SMALL LETTER V WITH HOOK
+       -219,  -- LATIN SMALL LETTER EZH .. LATIN SMALL LETTER EZH
+        -38,  -- GREEK SMALL LETTER ALPHA WITH TONOS .. GREEK SMALL LETTER ALPHA WITH TONOS
+        -37,  -- GREEK SMALL LETTER EPSILON WITH TONOS .. GREEK SMALL LETTER IOTA WITH TONOS
+        -32,  -- GREEK SMALL LETTER ALPHA .. GREEK SMALL LETTER RHO
+        -31,  -- GREEK SMALL LETTER FINAL SIGMA .. GREEK SMALL LETTER FINAL SIGMA
+        -32,  -- GREEK SMALL LETTER SIGMA .. GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+        -64,  -- GREEK SMALL LETTER OMICRON WITH TONOS .. GREEK SMALL LETTER OMICRON WITH TONOS
+        -63,  -- GREEK SMALL LETTER UPSILON WITH TONOS .. GREEK SMALL LETTER OMEGA WITH TONOS
+        -62,  -- GREEK BETA SYMBOL .. GREEK BETA SYMBOL
+        -57,  -- GREEK THETA SYMBOL .. GREEK THETA SYMBOL
+        -47,  -- GREEK PHI SYMBOL .. GREEK PHI SYMBOL
+        -54,  -- GREEK PI SYMBOL .. GREEK PI SYMBOL
+         -1,  -- GREEK SMALL LETTER ARCHAIC KOPPA .. GREEK SMALL LETTER ARCHAIC KOPPA
+         -1,  -- GREEK SMALL LETTER STIGMA .. GREEK SMALL LETTER STIGMA
+         -1,  -- GREEK SMALL LETTER DIGAMMA .. GREEK SMALL LETTER DIGAMMA
+         -1,  -- GREEK SMALL LETTER KOPPA .. GREEK SMALL LETTER KOPPA
+         -1,  -- GREEK SMALL LETTER SAMPI .. GREEK SMALL LETTER SAMPI
+         -1,  -- COPTIC SMALL LETTER SHEI .. COPTIC SMALL LETTER SHEI
+         -1,  -- COPTIC SMALL LETTER FEI .. COPTIC SMALL LETTER FEI
+         -1,  -- COPTIC SMALL LETTER KHEI .. COPTIC SMALL LETTER KHEI
+         -1,  -- COPTIC SMALL LETTER HORI .. COPTIC SMALL LETTER HORI
+         -1,  -- COPTIC SMALL LETTER GANGIA .. COPTIC SMALL LETTER GANGIA
+         -1,  -- COPTIC SMALL LETTER SHIMA .. COPTIC SMALL LETTER SHIMA
+         -1,  -- COPTIC SMALL LETTER DEI .. COPTIC SMALL LETTER DEI
+        -86,  -- GREEK KAPPA SYMBOL .. GREEK KAPPA SYMBOL
+        -80,  -- GREEK RHO SYMBOL .. GREEK RHO SYMBOL
+        -79,  -- GREEK LUNATE SIGMA SYMBOL .. GREEK LUNATE SIGMA SYMBOL
+        -96,  -- GREEK LUNATE EPSILON SYMBOL .. GREEK LUNATE EPSILON SYMBOL
+        -32,  -- CYRILLIC SMALL LETTER A .. CYRILLIC SMALL LETTER YA
+        -80,  -- CYRILLIC SMALL LETTER IE WITH GRAVE .. CYRILLIC SMALL LETTER DZHE
+         -1,  -- CYRILLIC SMALL LETTER OMEGA .. CYRILLIC SMALL LETTER OMEGA
+         -1,  -- CYRILLIC SMALL LETTER YAT .. CYRILLIC SMALL LETTER YAT
+         -1,  -- CYRILLIC SMALL LETTER IOTIFIED E .. CYRILLIC SMALL LETTER IOTIFIED E
+         -1,  -- CYRILLIC SMALL LETTER LITTLE YUS .. CYRILLIC SMALL LETTER LITTLE YUS
+         -1,  -- CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS .. CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS
+         -1,  -- CYRILLIC SMALL LETTER BIG YUS .. CYRILLIC SMALL LETTER BIG YUS
+         -1,  -- CYRILLIC SMALL LETTER IOTIFIED BIG YUS .. CYRILLIC SMALL LETTER IOTIFIED BIG YUS
+         -1,  -- CYRILLIC SMALL LETTER KSI .. CYRILLIC SMALL LETTER KSI
+         -1,  -- CYRILLIC SMALL LETTER PSI .. CYRILLIC SMALL LETTER PSI
+         -1,  -- CYRILLIC SMALL LETTER FITA .. CYRILLIC SMALL LETTER FITA
+         -1,  -- CYRILLIC SMALL LETTER IZHITSA .. CYRILLIC SMALL LETTER IZHITSA
+         -1,  -- CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT .. CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+         -1,  -- CYRILLIC SMALL LETTER UK .. CYRILLIC SMALL LETTER UK
+         -1,  -- CYRILLIC SMALL LETTER ROUND OMEGA .. CYRILLIC SMALL LETTER ROUND OMEGA
+         -1,  -- CYRILLIC SMALL LETTER OMEGA WITH TITLO .. CYRILLIC SMALL LETTER OMEGA WITH TITLO
+         -1,  -- CYRILLIC SMALL LETTER OT .. CYRILLIC SMALL LETTER OT
+         -1,  -- CYRILLIC SMALL LETTER KOPPA .. CYRILLIC SMALL LETTER KOPPA
+         -1,  -- CYRILLIC SMALL LETTER SHORT I WITH TAIL .. CYRILLIC SMALL LETTER SHORT I WITH TAIL
+         -1,  -- CYRILLIC SMALL LETTER SEMISOFT SIGN .. CYRILLIC SMALL LETTER SEMISOFT SIGN
+         -1,  -- CYRILLIC SMALL LETTER ER WITH TICK .. CYRILLIC SMALL LETTER ER WITH TICK
+         -1,  -- CYRILLIC SMALL LETTER GHE WITH UPTURN .. CYRILLIC SMALL LETTER GHE WITH UPTURN
+         -1,  -- CYRILLIC SMALL LETTER GHE WITH STROKE .. CYRILLIC SMALL LETTER GHE WITH STROKE
+         -1,  -- CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK .. CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK
+         -1,  -- CYRILLIC SMALL LETTER ZHE WITH DESCENDER .. CYRILLIC SMALL LETTER ZHE WITH DESCENDER
+         -1,  -- CYRILLIC SMALL LETTER ZE WITH DESCENDER .. CYRILLIC SMALL LETTER ZE WITH DESCENDER
+         -1,  -- CYRILLIC SMALL LETTER KA WITH DESCENDER .. CYRILLIC SMALL LETTER KA WITH DESCENDER
+         -1,  -- CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE .. CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE
+         -1,  -- CYRILLIC SMALL LETTER KA WITH STROKE .. CYRILLIC SMALL LETTER KA WITH STROKE
+         -1,  -- CYRILLIC SMALL LETTER BASHKIR KA .. CYRILLIC SMALL LETTER BASHKIR KA
+         -1,  -- CYRILLIC SMALL LETTER EN WITH DESCENDER .. CYRILLIC SMALL LETTER EN WITH DESCENDER
+         -1,  -- CYRILLIC SMALL LIGATURE EN GHE .. CYRILLIC SMALL LIGATURE EN GHE
+         -1,  -- CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK .. CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK
+         -1,  -- CYRILLIC SMALL LETTER ABKHASIAN HA .. CYRILLIC SMALL LETTER ABKHASIAN HA
+         -1,  -- CYRILLIC SMALL LETTER ES WITH DESCENDER .. CYRILLIC SMALL LETTER ES WITH DESCENDER
+         -1,  -- CYRILLIC SMALL LETTER TE WITH DESCENDER .. CYRILLIC SMALL LETTER TE WITH DESCENDER
+         -1,  -- CYRILLIC SMALL LETTER STRAIGHT U .. CYRILLIC SMALL LETTER STRAIGHT U
+         -1,  -- CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE .. CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
+         -1,  -- CYRILLIC SMALL LETTER HA WITH DESCENDER .. CYRILLIC SMALL LETTER HA WITH DESCENDER
+         -1,  -- CYRILLIC SMALL LIGATURE TE TSE .. CYRILLIC SMALL LIGATURE TE TSE
+         -1,  -- CYRILLIC SMALL LETTER CHE WITH DESCENDER .. CYRILLIC SMALL LETTER CHE WITH DESCENDER
+         -1,  -- CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE .. CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE
+         -1,  -- CYRILLIC SMALL LETTER SHHA .. CYRILLIC SMALL LETTER SHHA
+         -1,  -- CYRILLIC SMALL LETTER ABKHASIAN CHE .. CYRILLIC SMALL LETTER ABKHASIAN CHE
+         -1,  -- CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER .. CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER
+         -1,  -- CYRILLIC SMALL LETTER ZHE WITH BREVE .. CYRILLIC SMALL LETTER ZHE WITH BREVE
+         -1,  -- CYRILLIC SMALL LETTER KA WITH HOOK .. CYRILLIC SMALL LETTER KA WITH HOOK
+         -1,  -- CYRILLIC SMALL LETTER EL WITH TAIL .. CYRILLIC SMALL LETTER EL WITH TAIL
+         -1,  -- CYRILLIC SMALL LETTER EN WITH HOOK .. CYRILLIC SMALL LETTER EN WITH HOOK
+         -1,  -- CYRILLIC SMALL LETTER EN WITH TAIL .. CYRILLIC SMALL LETTER EN WITH TAIL
+         -1,  -- CYRILLIC SMALL LETTER KHAKASSIAN CHE .. CYRILLIC SMALL LETTER KHAKASSIAN CHE
+         -1,  -- CYRILLIC SMALL LETTER EM WITH TAIL .. CYRILLIC SMALL LETTER EM WITH TAIL
+         -1,  -- CYRILLIC SMALL LETTER A WITH BREVE .. CYRILLIC SMALL LETTER A WITH BREVE
+         -1,  -- CYRILLIC SMALL LETTER A WITH DIAERESIS .. CYRILLIC SMALL LETTER A WITH DIAERESIS
+         -1,  -- CYRILLIC SMALL LIGATURE A IE .. CYRILLIC SMALL LIGATURE A IE
+         -1,  -- CYRILLIC SMALL LETTER IE WITH BREVE .. CYRILLIC SMALL LETTER IE WITH BREVE
+         -1,  -- CYRILLIC SMALL LETTER SCHWA .. CYRILLIC SMALL LETTER SCHWA
+         -1,  -- CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS .. CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
+         -1,  -- CYRILLIC SMALL LETTER ZHE WITH DIAERESIS .. CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
+         -1,  -- CYRILLIC SMALL LETTER ZE WITH DIAERESIS .. CYRILLIC SMALL LETTER ZE WITH DIAERESIS
+         -1,  -- CYRILLIC SMALL LETTER ABKHASIAN DZE .. CYRILLIC SMALL LETTER ABKHASIAN DZE
+         -1,  -- CYRILLIC SMALL LETTER I WITH MACRON .. CYRILLIC SMALL LETTER I WITH MACRON
+         -1,  -- CYRILLIC SMALL LETTER I WITH DIAERESIS .. CYRILLIC SMALL LETTER I WITH DIAERESIS
+         -1,  -- CYRILLIC SMALL LETTER O WITH DIAERESIS .. CYRILLIC SMALL LETTER O WITH DIAERESIS
+         -1,  -- CYRILLIC SMALL LETTER BARRED O .. CYRILLIC SMALL LETTER BARRED O
+         -1,  -- CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS .. CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
+         -1,  -- CYRILLIC SMALL LETTER E WITH DIAERESIS .. CYRILLIC SMALL LETTER E WITH DIAERESIS
+         -1,  -- CYRILLIC SMALL LETTER U WITH MACRON .. CYRILLIC SMALL LETTER U WITH MACRON
+         -1,  -- CYRILLIC SMALL LETTER U WITH DIAERESIS .. CYRILLIC SMALL LETTER U WITH DIAERESIS
+         -1,  -- CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE .. CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
+         -1,  -- CYRILLIC SMALL LETTER CHE WITH DIAERESIS .. CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+         -1,  -- CYRILLIC SMALL LETTER YERU WITH DIAERESIS .. CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+         -1,  -- CYRILLIC SMALL LETTER KOMI DE .. CYRILLIC SMALL LETTER KOMI DE
+         -1,  -- CYRILLIC SMALL LETTER KOMI DJE .. CYRILLIC SMALL LETTER KOMI DJE
+         -1,  -- CYRILLIC SMALL LETTER KOMI ZJE .. CYRILLIC SMALL LETTER KOMI ZJE
+         -1,  -- CYRILLIC SMALL LETTER KOMI DZJE .. CYRILLIC SMALL LETTER KOMI DZJE
+         -1,  -- CYRILLIC SMALL LETTER KOMI LJE .. CYRILLIC SMALL LETTER KOMI LJE
+         -1,  -- CYRILLIC SMALL LETTER KOMI NJE .. CYRILLIC SMALL LETTER KOMI NJE
+         -1,  -- CYRILLIC SMALL LETTER KOMI SJE .. CYRILLIC SMALL LETTER KOMI SJE
+         -1,  -- CYRILLIC SMALL LETTER KOMI TJE .. CYRILLIC SMALL LETTER KOMI TJE
+        -48,  -- ARMENIAN SMALL LETTER AYB .. ARMENIAN SMALL LETTER FEH
+         -1,  -- LATIN SMALL LETTER A WITH RING BELOW .. LATIN SMALL LETTER A WITH RING BELOW
+         -1,  -- LATIN SMALL LETTER B WITH DOT ABOVE .. LATIN SMALL LETTER B WITH DOT ABOVE
+         -1,  -- LATIN SMALL LETTER B WITH DOT BELOW .. LATIN SMALL LETTER B WITH DOT BELOW
+         -1,  -- LATIN SMALL LETTER B WITH LINE BELOW .. LATIN SMALL LETTER B WITH LINE BELOW
+         -1,  -- LATIN SMALL LETTER C WITH CEDILLA AND ACUTE .. LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+         -1,  -- LATIN SMALL LETTER D WITH DOT ABOVE .. LATIN SMALL LETTER D WITH DOT ABOVE
+         -1,  -- LATIN SMALL LETTER D WITH DOT BELOW .. LATIN SMALL LETTER D WITH DOT BELOW
+         -1,  -- LATIN SMALL LETTER D WITH LINE BELOW .. LATIN SMALL LETTER D WITH LINE BELOW
+         -1,  -- LATIN SMALL LETTER D WITH CEDILLA .. LATIN SMALL LETTER D WITH CEDILLA
+         -1,  -- LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW
+         -1,  -- LATIN SMALL LETTER E WITH MACRON AND GRAVE .. LATIN SMALL LETTER E WITH MACRON AND GRAVE
+         -1,  -- LATIN SMALL LETTER E WITH MACRON AND ACUTE .. LATIN SMALL LETTER E WITH MACRON AND ACUTE
+         -1,  -- LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW
+         -1,  -- LATIN SMALL LETTER E WITH TILDE BELOW .. LATIN SMALL LETTER E WITH TILDE BELOW
+         -1,  -- LATIN SMALL LETTER E WITH CEDILLA AND BREVE .. LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+         -1,  -- LATIN SMALL LETTER F WITH DOT ABOVE .. LATIN SMALL LETTER F WITH DOT ABOVE
+         -1,  -- LATIN SMALL LETTER G WITH MACRON .. LATIN SMALL LETTER G WITH MACRON
+         -1,  -- LATIN SMALL LETTER H WITH DOT ABOVE .. LATIN SMALL LETTER H WITH DOT ABOVE
+         -1,  -- LATIN SMALL LETTER H WITH DOT BELOW .. LATIN SMALL LETTER H WITH DOT BELOW
+         -1,  -- LATIN SMALL LETTER H WITH DIAERESIS .. LATIN SMALL LETTER H WITH DIAERESIS
+         -1,  -- LATIN SMALL LETTER H WITH CEDILLA .. LATIN SMALL LETTER H WITH CEDILLA
+         -1,  -- LATIN SMALL LETTER H WITH BREVE BELOW .. LATIN SMALL LETTER H WITH BREVE BELOW
+         -1,  -- LATIN SMALL LETTER I WITH TILDE BELOW .. LATIN SMALL LETTER I WITH TILDE BELOW
+         -1,  -- LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE .. LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
+         -1,  -- LATIN SMALL LETTER K WITH ACUTE .. LATIN SMALL LETTER K WITH ACUTE
+         -1,  -- LATIN SMALL LETTER K WITH DOT BELOW .. LATIN SMALL LETTER K WITH DOT BELOW
+         -1,  -- LATIN SMALL LETTER K WITH LINE BELOW .. LATIN SMALL LETTER K WITH LINE BELOW
+         -1,  -- LATIN SMALL LETTER L WITH DOT BELOW .. LATIN SMALL LETTER L WITH DOT BELOW
+         -1,  -- LATIN SMALL LETTER L WITH DOT BELOW AND MACRON .. LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
+         -1,  -- LATIN SMALL LETTER L WITH LINE BELOW .. LATIN SMALL LETTER L WITH LINE BELOW
+         -1,  -- LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW
+         -1,  -- LATIN SMALL LETTER M WITH ACUTE .. LATIN SMALL LETTER M WITH ACUTE
+         -1,  -- LATIN SMALL LETTER M WITH DOT ABOVE .. LATIN SMALL LETTER M WITH DOT ABOVE
+         -1,  -- LATIN SMALL LETTER M WITH DOT BELOW .. LATIN SMALL LETTER M WITH DOT BELOW
+         -1,  -- LATIN SMALL LETTER N WITH DOT ABOVE .. LATIN SMALL LETTER N WITH DOT ABOVE
+         -1,  -- LATIN SMALL LETTER N WITH DOT BELOW .. LATIN SMALL LETTER N WITH DOT BELOW
+         -1,  -- LATIN SMALL LETTER N WITH LINE BELOW .. LATIN SMALL LETTER N WITH LINE BELOW
+         -1,  -- LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW
+         -1,  -- LATIN SMALL LETTER O WITH TILDE AND ACUTE .. LATIN SMALL LETTER O WITH TILDE AND ACUTE
+         -1,  -- LATIN SMALL LETTER O WITH TILDE AND DIAERESIS .. LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
+         -1,  -- LATIN SMALL LETTER O WITH MACRON AND GRAVE .. LATIN SMALL LETTER O WITH MACRON AND GRAVE
+         -1,  -- LATIN SMALL LETTER O WITH MACRON AND ACUTE .. LATIN SMALL LETTER O WITH MACRON AND ACUTE
+         -1,  -- LATIN SMALL LETTER P WITH ACUTE .. LATIN SMALL LETTER P WITH ACUTE
+         -1,  -- LATIN SMALL LETTER P WITH DOT ABOVE .. LATIN SMALL LETTER P WITH DOT ABOVE
+         -1,  -- LATIN SMALL LETTER R WITH DOT ABOVE .. LATIN SMALL LETTER R WITH DOT ABOVE
+         -1,  -- LATIN SMALL LETTER R WITH DOT BELOW .. LATIN SMALL LETTER R WITH DOT BELOW
+         -1,  -- LATIN SMALL LETTER R WITH DOT BELOW AND MACRON .. LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
+         -1,  -- LATIN SMALL LETTER R WITH LINE BELOW .. LATIN SMALL LETTER R WITH LINE BELOW
+         -1,  -- LATIN SMALL LETTER S WITH DOT ABOVE .. LATIN SMALL LETTER S WITH DOT ABOVE
+         -1,  -- LATIN SMALL LETTER S WITH DOT BELOW .. LATIN SMALL LETTER S WITH DOT BELOW
+         -1,  -- LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE .. LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
+         -1,  -- LATIN SMALL LETTER S WITH CARON AND DOT ABOVE .. LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
+         -1,  -- LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE .. LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
+         -1,  -- LATIN SMALL LETTER T WITH DOT ABOVE .. LATIN SMALL LETTER T WITH DOT ABOVE
+         -1,  -- LATIN SMALL LETTER T WITH DOT BELOW .. LATIN SMALL LETTER T WITH DOT BELOW
+         -1,  -- LATIN SMALL LETTER T WITH LINE BELOW .. LATIN SMALL LETTER T WITH LINE BELOW
+         -1,  -- LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW
+         -1,  -- LATIN SMALL LETTER U WITH DIAERESIS BELOW .. LATIN SMALL LETTER U WITH DIAERESIS BELOW
+         -1,  -- LATIN SMALL LETTER U WITH TILDE BELOW .. LATIN SMALL LETTER U WITH TILDE BELOW
+         -1,  -- LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW
+         -1,  -- LATIN SMALL LETTER U WITH TILDE AND ACUTE .. LATIN SMALL LETTER U WITH TILDE AND ACUTE
+         -1,  -- LATIN SMALL LETTER U WITH MACRON AND DIAERESIS .. LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
+         -1,  -- LATIN SMALL LETTER V WITH TILDE .. LATIN SMALL LETTER V WITH TILDE
+         -1,  -- LATIN SMALL LETTER V WITH DOT BELOW .. LATIN SMALL LETTER V WITH DOT BELOW
+         -1,  -- LATIN SMALL LETTER W WITH GRAVE .. LATIN SMALL LETTER W WITH GRAVE
+         -1,  -- LATIN SMALL LETTER W WITH ACUTE .. LATIN SMALL LETTER W WITH ACUTE
+         -1,  -- LATIN SMALL LETTER W WITH DIAERESIS .. LATIN SMALL LETTER W WITH DIAERESIS
+         -1,  -- LATIN SMALL LETTER W WITH DOT ABOVE .. LATIN SMALL LETTER W WITH DOT ABOVE
+         -1,  -- LATIN SMALL LETTER W WITH DOT BELOW .. LATIN SMALL LETTER W WITH DOT BELOW
+         -1,  -- LATIN SMALL LETTER X WITH DOT ABOVE .. LATIN SMALL LETTER X WITH DOT ABOVE
+         -1,  -- LATIN SMALL LETTER X WITH DIAERESIS .. LATIN SMALL LETTER X WITH DIAERESIS
+         -1,  -- LATIN SMALL LETTER Y WITH DOT ABOVE .. LATIN SMALL LETTER Y WITH DOT ABOVE
+         -1,  -- LATIN SMALL LETTER Z WITH CIRCUMFLEX .. LATIN SMALL LETTER Z WITH CIRCUMFLEX
+         -1,  -- LATIN SMALL LETTER Z WITH DOT BELOW .. LATIN SMALL LETTER Z WITH DOT BELOW
+         -1,  -- LATIN SMALL LETTER Z WITH LINE BELOW .. LATIN SMALL LETTER Z WITH LINE BELOW
+        -59,  -- LATIN SMALL LETTER LONG S WITH DOT ABOVE .. LATIN SMALL LETTER LONG S WITH DOT ABOVE
+         -1,  -- LATIN SMALL LETTER A WITH DOT BELOW .. LATIN SMALL LETTER A WITH DOT BELOW
+         -1,  -- LATIN SMALL LETTER A WITH HOOK ABOVE .. LATIN SMALL LETTER A WITH HOOK ABOVE
+         -1,  -- LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE .. LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+         -1,  -- LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE .. LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
+         -1,  -- LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE .. LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+         -1,  -- LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE .. LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
+         -1,  -- LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW .. LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+         -1,  -- LATIN SMALL LETTER A WITH BREVE AND ACUTE .. LATIN SMALL LETTER A WITH BREVE AND ACUTE
+         -1,  -- LATIN SMALL LETTER A WITH BREVE AND GRAVE .. LATIN SMALL LETTER A WITH BREVE AND GRAVE
+         -1,  -- LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE .. LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
+         -1,  -- LATIN SMALL LETTER A WITH BREVE AND TILDE .. LATIN SMALL LETTER A WITH BREVE AND TILDE
+         -1,  -- LATIN SMALL LETTER A WITH BREVE AND DOT BELOW .. LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+         -1,  -- LATIN SMALL LETTER E WITH DOT BELOW .. LATIN SMALL LETTER E WITH DOT BELOW
+         -1,  -- LATIN SMALL LETTER E WITH HOOK ABOVE .. LATIN SMALL LETTER E WITH HOOK ABOVE
+         -1,  -- LATIN SMALL LETTER E WITH TILDE .. LATIN SMALL LETTER E WITH TILDE
+         -1,  -- LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE .. LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+         -1,  -- LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE .. LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+         -1,  -- LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE .. LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+         -1,  -- LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE .. LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+         -1,  -- LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW .. LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+         -1,  -- LATIN SMALL LETTER I WITH HOOK ABOVE .. LATIN SMALL LETTER I WITH HOOK ABOVE
+         -1,  -- LATIN SMALL LETTER I WITH DOT BELOW .. LATIN SMALL LETTER I WITH DOT BELOW
+         -1,  -- LATIN SMALL LETTER O WITH DOT BELOW .. LATIN SMALL LETTER O WITH DOT BELOW
+         -1,  -- LATIN SMALL LETTER O WITH HOOK ABOVE .. LATIN SMALL LETTER O WITH HOOK ABOVE
+         -1,  -- LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE .. LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+         -1,  -- LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE .. LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+         -1,  -- LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE .. LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+         -1,  -- LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE .. LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+         -1,  -- LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW .. LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+         -1,  -- LATIN SMALL LETTER O WITH HORN AND ACUTE .. LATIN SMALL LETTER O WITH HORN AND ACUTE
+         -1,  -- LATIN SMALL LETTER O WITH HORN AND GRAVE .. LATIN SMALL LETTER O WITH HORN AND GRAVE
+         -1,  -- LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE .. LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
+         -1,  -- LATIN SMALL LETTER O WITH HORN AND TILDE .. LATIN SMALL LETTER O WITH HORN AND TILDE
+         -1,  -- LATIN SMALL LETTER O WITH HORN AND DOT BELOW .. LATIN SMALL LETTER O WITH HORN AND DOT BELOW
+         -1,  -- LATIN SMALL LETTER U WITH DOT BELOW .. LATIN SMALL LETTER U WITH DOT BELOW
+         -1,  -- LATIN SMALL LETTER U WITH HOOK ABOVE .. LATIN SMALL LETTER U WITH HOOK ABOVE
+         -1,  -- LATIN SMALL LETTER U WITH HORN AND ACUTE .. LATIN SMALL LETTER U WITH HORN AND ACUTE
+         -1,  -- LATIN SMALL LETTER U WITH HORN AND GRAVE .. LATIN SMALL LETTER U WITH HORN AND GRAVE
+         -1,  -- LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE .. LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
+         -1,  -- LATIN SMALL LETTER U WITH HORN AND TILDE .. LATIN SMALL LETTER U WITH HORN AND TILDE
+         -1,  -- LATIN SMALL LETTER U WITH HORN AND DOT BELOW .. LATIN SMALL LETTER U WITH HORN AND DOT BELOW
+         -1,  -- LATIN SMALL LETTER Y WITH GRAVE .. LATIN SMALL LETTER Y WITH GRAVE
+         -1,  -- LATIN SMALL LETTER Y WITH DOT BELOW .. LATIN SMALL LETTER Y WITH DOT BELOW
+         -1,  -- LATIN SMALL LETTER Y WITH HOOK ABOVE .. LATIN SMALL LETTER Y WITH HOOK ABOVE
+         -1,  -- LATIN SMALL LETTER Y WITH TILDE .. LATIN SMALL LETTER Y WITH TILDE
+          8,  -- GREEK SMALL LETTER ALPHA WITH PSILI .. GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
+          8,  -- GREEK SMALL LETTER EPSILON WITH PSILI .. GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+          8,  -- GREEK SMALL LETTER ETA WITH PSILI .. GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
+          8,  -- GREEK SMALL LETTER IOTA WITH PSILI .. GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
+          8,  -- GREEK SMALL LETTER OMICRON WITH PSILI .. GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+          8,  -- GREEK SMALL LETTER UPSILON WITH DASIA .. GREEK SMALL LETTER UPSILON WITH DASIA
+          8,  -- GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA .. GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
+          8,  -- GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA .. GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
+          8,  -- GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI .. GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+          8,  -- GREEK SMALL LETTER OMEGA WITH PSILI .. GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
+         74,  -- GREEK SMALL LETTER ALPHA WITH VARIA .. GREEK SMALL LETTER ALPHA WITH OXIA
+         86,  -- GREEK SMALL LETTER EPSILON WITH VARIA .. GREEK SMALL LETTER ETA WITH OXIA
+        100,  -- GREEK SMALL LETTER IOTA WITH VARIA .. GREEK SMALL LETTER IOTA WITH OXIA
+        128,  -- GREEK SMALL LETTER OMICRON WITH VARIA .. GREEK SMALL LETTER OMICRON WITH OXIA
+        112,  -- GREEK SMALL LETTER UPSILON WITH VARIA .. GREEK SMALL LETTER UPSILON WITH OXIA
+        126,  -- GREEK SMALL LETTER OMEGA WITH VARIA .. GREEK SMALL LETTER OMEGA WITH OXIA
+          8,  -- GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI .. GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+          8,  -- GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI .. GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+          8,  -- GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI .. GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+          8,  -- GREEK SMALL LETTER ALPHA WITH VRACHY .. GREEK SMALL LETTER ALPHA WITH MACRON
+          9,  -- GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI .. GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
+      -7205,  -- GREEK PROSGEGRAMMENI .. GREEK PROSGEGRAMMENI
+          9,  -- GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI .. GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
+          8,  -- GREEK SMALL LETTER IOTA WITH VRACHY .. GREEK SMALL LETTER IOTA WITH MACRON
+          8,  -- GREEK SMALL LETTER UPSILON WITH VRACHY .. GREEK SMALL LETTER UPSILON WITH MACRON
+          7,  -- GREEK SMALL LETTER RHO WITH DASIA .. GREEK SMALL LETTER RHO WITH DASIA
+          9,  -- GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI .. GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
+        -32,  -- FULLWIDTH LATIN SMALL LETTER A .. FULLWIDTH LATIN SMALL LETTER Z
+        -40); -- DESERET SMALL LETTER LONG I .. DESERET SMALL LETTER ENG
+ 
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    function Range_Search (U : UTF_32; R : UTF_32_Ranges) return Natural;
+    --  Searches the given ranges (which must be in ascending order by Lo value)
+    --  and returns the index of the matching range in R if U matches one of the
+    --  ranges. If U matches none of the ranges, returns zero.
+ 
+    ---------------------
+    -- Is_UTF_32_Digit --
+    ---------------------
+ 
+    function Is_UTF_32_Digit (U : UTF_32) return Boolean is
+    begin
+       return Range_Search (U, UTF_32_Digits) /= 0;
+    end Is_UTF_32_Digit;
+ 
+    ----------------------
+    -- Is_UTF_32_Letter --
+    ----------------------
+ 
+    function Is_UTF_32_Letter (U : UTF_32) return Boolean is
+    begin
+       return Range_Search (U, UTF_32_Letters) /= 0;
+    end Is_UTF_32_Letter;
+ 
+    -------------------------------
+    -- Is_UTF_32_Line_Terminator --
+    -------------------------------
+ 
+    function Is_UTF_32_Line_Terminator (U : UTF_32) return Boolean is
+    begin
+       return U in 10 .. 13     -- Ascii.LF Ascii.VT Ascii.FF Ascii.CR
+         or else U = 16#02028#  -- LINE SEPARATOR
+         or else U = 16#02029#; -- PARAGRAPH SEPARATOR
+    end Is_UTF_32_Line_Terminator;
+ 
+    --------------------
+    -- Is_UTF_32_Mark --
+    --------------------
+ 
+    function Is_UTF_32_Mark (U : UTF_32) return Boolean is
+    begin
+       return Range_Search (U, UTF_32_Marks) /= 0;
+    end Is_UTF_32_Mark;
+ 
+    ---------------------------
+    -- Is_UTF_32_Non_Graphic --
+    ---------------------------
+ 
+    function Is_UTF_32_Non_Graphic (U : UTF_32) return Boolean is
+    begin
+       return Range_Search (U, UTF_32_Non_Graphic) /= 0;
+    end Is_UTF_32_Non_Graphic;
+ 
+    ---------------------
+    -- Is_UTF_32_Other --
+    ---------------------
+ 
+    function Is_UTF_32_Other (U : UTF_32) return Boolean is
+    begin
+       return Range_Search (U, UTF_32_Other_Format) /= 0;
+    end Is_UTF_32_Other;
+ 
+    ---------------------------
+    -- Is_UTF_32_Punctuation --
+    ---------------------------
+ 
+    function Is_UTF_32_Punctuation (U : UTF_32) return Boolean is
+    begin
+       return Range_Search (U, UTF_32_Punctuation) /= 0;
+    end Is_UTF_32_Punctuation;
+ 
+    ---------------------
+    -- Is_UTF_32_Space --
+    ---------------------
+ 
+    function Is_UTF_32_Space (U : UTF_32) return Boolean is
+    begin
+       return Range_Search (U, UTF_32_Spaces) /= 0;
+    end Is_UTF_32_Space;
+ 
+    ------------------
+    -- Range_Search --
+    ------------------
+ 
+    function Range_Search (U : UTF_32; R : UTF_32_Ranges) return Natural is
+       Lo  : Integer;
+       Hi  : Integer;
+       Mid : Integer;
+ 
+    begin
+       Lo := R'First;
+       Hi := R'Last;
+ 
+       loop
+          Mid := (Lo + Hi) / 2;
+ 
+          if U < R (Mid).Lo then
+             Hi := Mid - 1;
+ 
+             if Hi < Lo then
+                return 0;
+             end if;
+ 
+          elsif R (Mid).Hi < U then
+             Lo := Mid + 1;
+ 
+             if Hi < Lo then
+                return 0;
+             end if;
+ 
+          else
+             return Mid;
+          end if;
+       end loop;
+    end Range_Search;
+ 
+    --------------------------
+    -- UTF_32_To_Upper_Case --
+    --------------------------
+ 
+    function UTF_32_To_Upper_Case (U : UTF_32) return UTF_32 is
+       Index : constant Integer := Range_Search (U, Lower_Case_Letters);
+    begin
+       if Index = 0 then
+          return U;
+       else
+          return U + Upper_Case_Adjust (Index);
+       end if;
+    end UTF_32_To_Upper_Case;
+ 
+ end GNAT.UTF_32;
diff -Nrcpad gcc-3.4.3/gcc/ada/g-utf_32.ads gcc-4.0.0/gcc/ada/g-utf_32.ads
*** gcc-3.4.3/gcc/ada/g-utf_32.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/g-utf_32.ads	Thu Feb 10 13:50:14 2005
***************
*** 0 ****
--- 1,124 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUNTIME COMPONENTS                          --
+ --                                                                          --
+ --                          G N A T . U T F _ 3 2                           --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --             Copyright (C) 2005 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package is an internal package that provides basic character
+ --  classification capabilities needed by the compiler for handling full
+ --  32-bit wide wide characters. We avoid the use of the actual type
+ --  Wide_Wide_Character, since we want to use these routines in the compiler
+ --  itself, and we want to be able to compile the compiler with old versions
+ --  of GNAT that did not implement Wide_Wide_Character.
+ 
+ --  This package is not available directly for use in application programs,
+ --  but it serves as the basis for GNAT.Wide_Case_Utilities and
+ --  GNAT.Wide_Wide_Case_Utilities, which can be used directly.
+ 
+ package GNAT.UTF_32 is
+ 
+    type UTF_32 is mod 2 ** 32;
+    --  The actual allowed range is 16#00_0000# .. 16#01_FFFF#
+ 
+    function Is_UTF_32_Letter (U : UTF_32) return Boolean;
+    pragma Inline (Is_UTF_32_Letter);
+    --  Returns true iff U is a letter that can be used to start an identifier.
+    --  This means that it is in one of the following categories:
+    --    Letter, Uppercase (Lu)
+    --    Letter, Lowercase (Ll)
+    --    Letter, Titlecase (Lt)
+    --    Letter, Modifier  (Lm)
+    --    Letter, Other     (Lo)
+    --    Number, Letter    (Nl)
+ 
+    function Is_UTF_32_Digit (U : UTF_32) return Boolean;
+    pragma Inline (Is_UTF_32_Digit);
+    --  Returns true iff U is a digit that can be used to extend an identifer,
+    --  which means it is in one of the following categories:
+    --    Number, Decimal_Digit (Nd)
+ 
+    function Is_UTF_32_Line_Terminator (U : UTF_32) return Boolean;
+    pragma Inline (Is_UTF_32_Line_Terminator);
+    --  Returns true iff U is an allowed line terminator for source programs,
+    --  which means it is in one of the following categories:
+    --    Separator, Line (Zl)
+    --    Separator, Paragraph (Zp)
+    --  or that it is a conventional line terminator (CR, LF, VT, FF)
+ 
+    function Is_UTF_32_Mark (U : UTF_32) return Boolean;
+    pragma Inline (Is_UTF_32_Mark);
+    --  Returns true iff U is a mark character which can be used to extend
+    --  an identifier. This means it is in one of the following categories:
+    --    Mark, Non-Spacing (Mn)
+    --    Mark, Spacing Combining (Mc)
+ 
+    function Is_UTF_32_Other (U : UTF_32) return Boolean;
+    pragma Inline (Is_UTF_32_Other);
+    --  Returns true iff U is an other format character, which means that it
+    --  can be used to extend an identifier, but is ignored for the purposes of
+    --  matching of identiers. This means that it is in one of the following
+    --  categories:
+    --    Other, Format (Cf)
+ 
+    function Is_UTF_32_Punctuation (U : UTF_32) return Boolean;
+    pragma Inline (Is_UTF_32_Punctuation);
+    --  Returns true iff U is a punctuation character that can be used to
+    --  separate pices of an identifier. This means that it is in one of the
+    --  following categories:
+    --    Punctuation, Connector (Pc)
+ 
+    function Is_UTF_32_Space (U : UTF_32) return Boolean;
+    pragma Inline (Is_UTF_32_Space);
+    --  Returns true iff U is considered a space to be ignored, which means
+    --  that it is in one of the following categories:
+    --    Separator, Space (Zs)
+ 
+    function Is_UTF_32_Non_Graphic (U : UTF_32) return Boolean;
+    pragma Inline (Is_UTF_32_Non_Graphic);
+    --  Returns true iff U is considered to be a non-graphic character,
+    --  which means that it is in one of the following categories:
+    --    Other, Control (Cc)
+    --    Other, Private Use (Co)
+    --    Other, Surrogate (Cs)
+    --    Other, Format (Cf)
+    --    Separator, Line (Zl)
+    --    Separator, Paragraph (Zp)
+    --
+    --  Note that the Ada category format effector is subsumed by the above
+    --  list of Unicode categories.
+ 
+    function UTF_32_To_Upper_Case (U : UTF_32) return UTF_32;
+    pragma Inline (UTF_32_To_Upper_Case);
+    --  If U represents a lower case letter, returns the corresponding upper
+    --  case letter, otherwise U is returned unchanged. The folding is locale
+    --  independent as defined by documents referenced in the note in section
+    --  1 of ISO/IEC 10646:2003
+ 
+ end GNAT.UTF_32;
diff -Nrcpad gcc-3.4.3/gcc/ada/g-zstspl.ads gcc-4.0.0/gcc/ada/g-zstspl.ads
*** gcc-3.4.3/gcc/ada/g-zstspl.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/g-zstspl.ads	Thu Feb 10 13:50:14 2005
***************
*** 0 ****
--- 1,46 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --           G N A T . W I D E _ W I D E _ S T R I N G _ S P L I T          --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 2002-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  Useful wide_string-manipulation routines: given a set of separators, split
+ --  a wide_string wherever the separators appear, and provide direct access
+ --  to the resulting slices. See GNAT.Array_Split for full documentation.
+ 
+ with Ada.Strings.Wide_Wide_Maps; use Ada.Strings;
+ with GNAT.Array_Split;
+ 
+ package GNAT.Wide_Wide_String_Split is new GNAT.Array_Split
+   (Element          => Wide_Wide_Character,
+    Element_Sequence => Wide_Wide_String,
+    Element_Set      => Wide_Wide_Maps.Wide_Wide_Character_Set,
+    To_Set           => Wide_Wide_Maps.To_Set,
+    Is_In            => Wide_Wide_Maps.Is_In);
diff -Nrcpad gcc-3.4.3/gcc/ada/gen-soccon.c gcc-4.0.0/gcc/ada/gen-soccon.c
*** gcc-3.4.3/gcc/ada/gen-soccon.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/gen-soccon.c	Mon Jan  3 15:30:02 2005
***************
*** 0 ****
--- 1,584 ----
+ /*****************************************************************************
+ **                                                                          **
+ **                          GNAT SYSTEM UTILITIES                           **
+ **                                                                          **
+ **                           G E N - S O C C O N                            **
+ **                                                                          **
+ **              Copyright (C) 2004 Free Software Foundation, Inc.           **
+ **                                                                          **
+ ** GNAT is free software;  you can  redistribute it  and/or modify it under **
+ ** terms of the  GNU General Public License as published  by the Free Soft- **
+ ** ware  Foundation;  either version 2,  or (at your option) any later ver- **
+ ** sion.  GNAT is distributed in the hope that it will be useful, but WITH- **
+ ** OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY **
+ ** or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License **
+ ** for  more details.  You should have  received  a copy of the GNU General **
+ ** Public License  distributed with GNAT;  see file COPYING.  If not, write **
+ ** to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, **
+ ** MA 02111-1307, USA.                                                      **
+ **                                                                          **
+ ** GNAT was originally developed  by the GNAT team at  New York University. **
+ ** Extensive contributions were provided by Ada Core Technologies Inc.      **
+ **                                                                          **
+ ******************************************************************************/
+ 
+ /* This program generates g-soccon.ads */
+ 
+ #include <stdio.h>
+ #include <string.h>
+ 
+ #include "socket.h"
+ #include <netinet/in.h>
+ #include <netinet/tcp.h>
+ #include <sys/filio.h>
+ #include <netdb.h>
+ 
+ struct line {
+   char *text;
+   char *value;
+   char *comment;
+   struct line *next;
+ };
+ 
+ struct line *first = NULL, *last = NULL;
+ 
+ #define TXT(_text) add_line(_text, NULL, NULL);
+ /* Plain text */
+ 
+ #define _NL TXT("")
+ /* Empty line */
+ 
+ #define itoad(n) itoa ("%d", n)
+ #define itoax(n) itoa ("16#%08x#", n)
+ 
+ #define CND(name,comment) add_line(#name, itoad (name), comment);
+ /* Constant (decimal) */
+ 
+ #define CNX(name,comment) add_line(#name, itoax (name), comment);
+ /* Constant (hexadecimal) */
+ 
+ #define CN_(name,comment) add_line(#name, name, comment);
+ /* Constant (generic) */
+ 
+ void output (void);
+ /* Generate output spec */
+ 
+ char *itoa (char *, int);
+ /* int to string */
+ 
+ void add_line (char *, char*, char*);
+ 
+ void main (void) {
+ 
+ TXT("------------------------------------------------------------------------------")
+ TXT("--                                                                          --")
+ TXT("--                         GNAT COMPILER COMPONENTS                         --")
+ TXT("--                                                                          --")
+ TXT("--               G N A T . S O C K E T S . C O N S T A N T S                --")
+ TXT("--                                                                          --")
+ TXT("--                                 S p e c                                  --")
+ TXT("--                                                                          --")
+ TXT("--          Copyright (C) 2000-2004 Free Software Foundation, Inc.          --")
+ TXT("--                                                                          --")
+ TXT("-- GNAT is free software;  you can  redistribute it  and/or modify it under --")
+ TXT("-- terms of the  GNU General Public License as published  by the Free Soft- --")
+ TXT("-- ware  Foundation;  either version 2,  or (at your option) any later ver- --")
+ TXT("-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --")
+ TXT("-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --")
+ TXT("-- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --")
+ TXT("-- for  more details.  You should have  received  a copy of the GNU General --")
+ TXT("-- Public License  distributed with GNAT;  see file COPYING.  If not, write --")
+ TXT("-- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --")
+ TXT("-- MA 02111-1307, USA.                                                      --")
+ TXT("--                                                                          --")
+ TXT("-- As a special exception,  if other files  instantiate  generics from this --")
+ TXT("-- unit, or you link  this unit with other files  to produce an executable, --")
+ TXT("-- this  unit  does not  by itself cause  the resulting  executable  to  be --")
+ TXT("-- covered  by the  GNU  General  Public  License.  This exception does not --")
+ TXT("-- however invalidate  any other reasons why  the executable file  might be --")
+ TXT("-- covered by the  GNU Public License.                                      --")
+ TXT("--                                                                          --")
+ TXT("-- GNAT was originally developed  by the GNAT team at  New York University. --")
+ TXT("-- Extensive contributions were provided by Ada Core Technologies Inc.      --")
+ TXT("--                                                                          --")
+ TXT("------------------------------------------------------------------------------")
+ _NL
+ TXT("--  This package provides target dependent definitions of constant for use")
+ TXT("--  by the GNAT.Sockets package (g-socket.ads). This package should not be")
+ TXT("--  directly with'ed by an applications program.")
+ _NL
+ TXT("--  This is the version for " TARGET)
+ TXT("--  This file is generated automatically, do not modify it by hand! Instead,")
+ TXT("--  make changes to gen-soccon.c and re-run it on each target.")
+ _NL
+ TXT("package GNAT.Sockets.Constants is")
+ _NL
+ TXT("   --------------")
+ TXT("   -- Families --")
+ TXT("   --------------")
+ _NL
+ 
+ #ifndef AF_INET
+ #define AF_INET -1
+ #endif
+ CND(AF_INET, "IPv4 address family")
+ 
+ #ifndef AF_INET6
+ #define AF_INET6 -1
+ #endif
+ CND(AF_INET6, "IPv6 address family")
+ _NL
+ TXT("   -----------")
+ TXT("   -- Modes --")
+ TXT("   -----------")
+ _NL
+ 
+ #ifndef SOCK_STREAM
+ #define SOCK_STREAM -1
+ #endif
+ CND(SOCK_STREAM, "Stream socket")
+ 
+ #ifndef SOCK_DGRAM
+ #define SOCK_DGRAM -1
+ #endif
+ CND(SOCK_DGRAM, "Datagram socket")
+ _NL
+ TXT("   -------------------")
+ TXT("   -- Socket errors --")
+ TXT("   -------------------")
+ _NL
+ 
+ #ifndef EACCES
+ #define EACCES -1
+ #endif
+ CND(EACCES, "Permission denied")
+ 
+ #ifndef EADDRINUSE
+ #define EADDRINUSE -1
+ #endif
+ CND(EADDRINUSE, "Address already in use")
+ 
+ #ifndef EADDRNOTAVAIL
+ #define EADDRNOTAVAIL -1
+ #endif
+ CND(EADDRNOTAVAIL, "Cannot assign address")
+ 
+ #ifndef EAFNOSUPPORT
+ #define EAFNOSUPPORT -1
+ #endif
+ CND(EAFNOSUPPORT, "Addr family not supported")
+ 
+ #ifndef EALREADY
+ #define EALREADY -1
+ #endif
+ CND(EALREADY, "Operation in progress")
+ 
+ #ifndef EBADF
+ #define EBADF -1
+ #endif
+ CND(EBADF, "Bad file descriptor")
+ 
+ #ifndef ECONNABORTED
+ #define ECONNABORTED -1
+ #endif
+ CND(ECONNABORTED, "Connection aborted")
+ 
+ #ifndef ECONNREFUSED
+ #define ECONNREFUSED -1
+ #endif
+ CND(ECONNREFUSED, "Connection refused")
+ 
+ #ifndef ECONNRESET
+ #define ECONNRESET -1
+ #endif
+ CND(ECONNRESET, "Connection reset by peer")
+ 
+ #ifndef EDESTADDRREQ
+ #define EDESTADDRREQ -1
+ #endif
+ CND(EDESTADDRREQ, "Destination addr required")
+ 
+ #ifndef EFAULT
+ #define EFAULT -1
+ #endif
+ CND(EFAULT, "Bad address")
+ 
+ #ifndef EHOSTDOWN
+ #define EHOSTDOWN -1
+ #endif
+ CND(EHOSTDOWN, "Host is down")
+ 
+ #ifndef EHOSTUNREACH
+ #define EHOSTUNREACH -1
+ #endif
+ CND(EHOSTUNREACH, "No route to host")
+ 
+ #ifndef EINPROGRESS
+ #define EINPROGRESS -1
+ #endif
+ CND(EINPROGRESS, "Operation now in progress")
+ 
+ #ifndef EINTR
+ #define EINTR -1
+ #endif
+ CND(EINTR, "Interrupted system call")
+ 
+ #ifndef EINVAL
+ #define EINVAL -1
+ #endif
+ CND(EINVAL, "Invalid argument")
+ 
+ #ifndef EIO
+ #define EIO -1
+ #endif
+ CND(EIO, "Input output error")
+ 
+ #ifndef EISCONN
+ #define EISCONN -1
+ #endif
+ CND(EISCONN, "Socket already connected")
+ 
+ #ifndef ELOOP
+ #define ELOOP -1
+ #endif
+ CND(ELOOP, "Too many symbolic lynks")
+ 
+ #ifndef EMFILE
+ #define EMFILE -1
+ #endif
+ CND(EMFILE, "Too many open files")
+ 
+ #ifndef EMSGSIZE
+ #define EMSGSIZE -1
+ #endif
+ CND(EMSGSIZE, "Message too long")
+ 
+ #ifndef ENAMETOOLONG
+ #define ENAMETOOLONG -1
+ #endif
+ CND(ENAMETOOLONG, "Name too long")
+ 
+ #ifndef ENETDOWN
+ #define ENETDOWN -1
+ #endif
+ CND(ENETDOWN, "Network is down")
+ 
+ #ifndef ENETRESET
+ #define ENETRESET -1
+ #endif
+ CND(ENETRESET, "Disconn. on network reset")
+ 
+ #ifndef ENETUNREACH
+ #define ENETUNREACH -1
+ #endif
+ CND(ENETUNREACH, "Network is unreachable")
+ 
+ #ifndef ENOBUFS
+ #define ENOBUFS -1
+ #endif
+ CND(ENOBUFS, "No buffer space available")
+ 
+ #ifndef ENOPROTOOPT
+ #define ENOPROTOOPT -1
+ #endif
+ CND(ENOPROTOOPT, "Protocol not available")
+ 
+ #ifndef ENOTCONN
+ #define ENOTCONN -1
+ #endif
+ CND(ENOTCONN, "Socket not connected")
+ 
+ #ifndef ENOTSOCK
+ #define ENOTSOCK -1
+ #endif
+ CND(ENOTSOCK, "Operation on non socket")
+ 
+ #ifndef EOPNOTSUPP
+ #define EOPNOTSUPP -1
+ #endif
+ CND(EOPNOTSUPP, "Operation not supported")
+ 
+ #ifndef EPFNOSUPPORT
+ #define EPFNOSUPPORT -1
+ #endif
+ CND(EPFNOSUPPORT, "Unknown protocol family")
+ 
+ #ifndef EPROTONOSUPPORT
+ #define EPROTONOSUPPORT -1
+ #endif
+ CND(EPROTONOSUPPORT, "Unknown protocol")
+ 
+ #ifndef EPROTOTYPE
+ #define EPROTOTYPE -1
+ #endif
+ CND(EPROTOTYPE, "Unknown protocol type")
+ 
+ #ifndef ESHUTDOWN
+ #define ESHUTDOWN -1
+ #endif
+ CND(ESHUTDOWN, "Cannot send once shutdown")
+ 
+ #ifndef ESOCKTNOSUPPORT
+ #define ESOCKTNOSUPPORT -1
+ #endif
+ CND(ESOCKTNOSUPPORT, "Socket type not supported")
+ 
+ #ifndef ETIMEDOUT
+ #define ETIMEDOUT -1
+ #endif
+ CND(ETIMEDOUT, "Connection timed out")
+ 
+ #ifndef ETOOMANYREFS
+ #define ETOOMANYREFS -1
+ #endif
+ CND(ETOOMANYREFS, "Too many references")
+ 
+ #ifndef EWOULDBLOCK
+ #define EWOULDBLOCK -1
+ #endif
+ CND(EWOULDBLOCK, "Operation would block")
+ _NL
+ TXT("   -----------------")
+ TXT("   -- Host errors --")
+ TXT("   -----------------")
+ _NL
+ 
+ #ifndef HOST_NOT_FOUND
+ #define HOST_NOT_FOUND -1
+ #endif
+ CND(HOST_NOT_FOUND, "Unknown host")
+ 
+ #ifndef TRY_AGAIN
+ #define TRY_AGAIN -1
+ #endif
+ CND(TRY_AGAIN, "Host name lookup failure")
+ 
+ #ifndef NO_DATA
+ #define NO_DATA -1
+ #endif
+ CND(NO_DATA, "No data record for name")
+ 
+ #ifndef NO_RECOVERY
+ #define NO_RECOVERY -1
+ #endif
+ CND(NO_RECOVERY, "Non recoverable errors")
+ _NL
+ TXT("   -------------------")
+ TXT("   -- Control flags --")
+ TXT("   -------------------")
+ _NL
+ 
+ #ifndef FIONBIO
+ #define FIONBIO -1
+ #endif
+ CNX(FIONBIO, "Set/clear non-blocking io")
+ 
+ #ifndef FIONREAD
+ #define FIONREAD -1
+ #endif
+ CNX(FIONREAD, "How many bytes to read")
+ _NL
+ TXT("   --------------------")
+ TXT("   -- Shutdown modes --")
+ TXT("   --------------------")
+ _NL
+ 
+ #ifndef SHUT_RD
+ #define SHUT_RD -1
+ #endif
+ CND(SHUT_RD, "No more recv")
+ 
+ #ifndef SHUT_WR
+ #define SHUT_WR -1
+ #endif
+ CND(SHUT_WR, "No more send")
+ 
+ #ifndef SHUT_RDWR
+ #define SHUT_RDWR -1
+ #endif
+ CND(SHUT_RDWR, "No more recv/send")
+ _NL
+ TXT("   ---------------------")
+ TXT("   -- Protocol levels --")
+ TXT("   ---------------------")
+ _NL
+ 
+ #ifndef SOL_SOCKET
+ #define SOL_SOCKET -1
+ #endif
+ CND(SOL_SOCKET, "Options for socket level")
+ 
+ #ifndef IPPROTO_IP
+ #define IPPROTO_IP -1
+ #endif
+ CND(IPPROTO_IP, "Dummy protocol for IP")
+ 
+ #ifndef IPPROTO_UDP
+ #define IPPROTO_UDP -1
+ #endif
+ CND(IPPROTO_UDP, "UDP")
+ 
+ #ifndef IPPROTO_TCP
+ #define IPPROTO_TCP -1
+ #endif
+ CND(IPPROTO_TCP, "TCP")
+ _NL
+ TXT("   -------------------")
+ TXT("   -- Request flags --")
+ TXT("   -------------------")
+ _NL
+ 
+ #ifndef MSG_OOB
+ #define MSG_OOB -1
+ #endif
+ CND(MSG_OOB, "Process out-of-band data")
+ 
+ #ifndef MSG_PEEK
+ #define MSG_PEEK -1
+ #endif
+ CND(MSG_PEEK, "Peek at incoming data")
+ 
+ #ifndef MSG_EOR
+ #define MSG_EOR -1
+ #endif
+ CND(MSG_EOR, "Send end of record")
+ 
+ #ifndef MSG_WAITALL
+ #define MSG_WAITALL -1
+ #endif
+ CND(MSG_WAITALL, "Wait for full reception")
+ 
+ #ifndef MSG_NOSIGNAL
+ #define MSG_NOSIGNAL -1
+ #endif
+ CND(MSG_NOSIGNAL, "No SIGPIPE on send")
+ 
+ #ifdef __linux__
+ # define MSG_Forced_Flags "MSG_NOSIGNAL"
+ #else
+ # define MSG_Forced_Flags "0"
+ #endif
+ CN_(MSG_Forced_Flags, "")
+ TXT("   --  Flags set on all send(2) calls")
+ 
+ _NL
+ TXT("   --------------------")
+ TXT("   -- Socket options --")
+ TXT("   --------------------")
+ _NL
+ 
+ #ifndef TCP_NODELAY
+ #define TCP_NODELAY -1
+ #endif
+ CND(TCP_NODELAY, "Do not coalesce packets")
+ 
+ #ifndef SO_SNDBUF
+ #define SO_SNDBUF -1
+ #endif
+ CND(SO_SNDBUF, "Set/get send buffer size")
+ 
+ #ifndef SO_RCVBUF
+ #define SO_RCVBUF -1
+ #endif
+ CND(SO_RCVBUF, "Set/get recv buffer size")
+ 
+ #ifndef SO_REUSEADDR
+ #define SO_REUSEADDR -1
+ #endif
+ CND(SO_REUSEADDR, "Bind reuse local address")
+ 
+ #ifndef SO_KEEPALIVE
+ #define SO_KEEPALIVE -1
+ #endif
+ CND(SO_KEEPALIVE, "Enable keep-alive msgs")
+ 
+ #ifndef SO_LINGER
+ #define SO_LINGER -1
+ #endif
+ CND(SO_LINGER, "Defer close to flush data")
+ 
+ #ifndef SO_ERROR
+ #define SO_ERROR -1
+ #endif
+ CND(SO_ERROR, "Get/clear error status")
+ 
+ #ifndef SO_BROADCAST
+ #define SO_BROADCAST -1
+ #endif
+ CND(SO_BROADCAST, "Can send broadcast msgs")
+ 
+ #ifndef IP_ADD_MEMBERSHIP
+ #define IP_ADD_MEMBERSHIP -1
+ #endif
+ CND(IP_ADD_MEMBERSHIP, "Join a multicast group")
+ 
+ #ifndef IP_DROP_MEMBERSHIP
+ #define IP_DROP_MEMBERSHIP -1
+ #endif
+ CND(IP_DROP_MEMBERSHIP, "Leave a multicast group")
+ 
+ #ifndef IP_MULTICAST_TTL
+ #define IP_MULTICAST_TTL -1
+ #endif
+ CND(IP_MULTICAST_TTL, "Set/get multicast TTL")
+ 
+ #ifndef IP_MULTICAST_LOOP
+ #define IP_MULTICAST_LOOP -1
+ #endif
+ CND(IP_MULTICAST_LOOP, "Set/get mcast loopback")
+ _NL
+ TXT("end GNAT.Sockets.Constants;")
+ 
+ output ();
+ }
+ 
+ void
+ output (void) {
+   int text_max = 0, value_max = 0, l;
+   struct line *p;
+   char fmt[64];
+ #define UPD_MAX(x) do { \
+   l = strlen (p->x); \
+   if (l > x ## _max) x ## _max = l; \
+ } while (0)
+ 
+   for (p = first; p != NULL; p = p->next) {
+     if (p->value != NULL) {
+       UPD_MAX(text);
+       UPD_MAX(value);
+     }
+   }
+   sprintf (fmt, "   %%-%ds : constant := %%%ds;%%s%%s\n",
+     text_max, value_max);
+ 
+   for (p = first; p != NULL; p = p->next) {
+     if (p->value == NULL) {
+       printf ("%s\n", p->text);
+     } else {
+       char *comment_sep = (strlen (p->comment) > 0)
+                           ? " --  " : "";
+       printf (fmt, p->text, p->value, comment_sep, p->comment);
+     }
+   }
+ }
+ 
+ char *
+ itoa (char *fmt, int n) {
+   char buf[32];
+   sprintf (buf, fmt, n);
+   return strdup (buf);
+ }
+ 
+ void add_line (char *_text, char *_value, char *_comment) {
+   struct line *l = (struct line *) malloc (sizeof (struct line));
+   l->text = _text;
+   l->value = _value;
+   l->comment = _comment;
+   l->next = NULL;
+   if (last == NULL)
+     first = last = l;
+   else {
+     last->next = l;
+     last = l;
+   }
+ }
diff -Nrcpad gcc-3.4.3/gcc/ada/get_targ.ads gcc-4.0.0/gcc/ada/get_targ.ads
*** gcc-3.4.3/gcc/ada/get_targ.ads	Thu Apr 24 17:54:04 2003
--- gcc-4.0.0/gcc/ada/get_targ.ads	Mon Apr 19 15:19:58 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** pragma Preelaborate (Get_Targ);
*** 81,89 ****
     function Get_Maximum_Alignment return Pos;
     pragma Import (C, Get_Maximum_Alignment, "get_target_maximum_alignment");
  
-    function Get_No_Dollar_In_Label return Boolean;
-    pragma Import (C, Get_No_Dollar_In_Label, "get_target_no_dollar_in_label");
- 
     function Get_Float_Words_BE return Nat;
     pragma Import (C, Get_Float_Words_BE, "get_float_words_be");
  
--- 81,86 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/gigi.h gcc-4.0.0/gcc/ada/gigi.h
*** gcc-3.4.3/gcc/ada/gigi.h	Tue Nov  4 12:51:46 2003
--- gcc-4.0.0/gcc/ada/gigi.h	Thu Mar 17 19:53:06 2005
***************
*** 6,12 ****
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 1992-2003 Free Software Foundation, Inc.          *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
--- 6,12 ----
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 1992-2005 Free Software Foundation, Inc.          *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
*************** extern unsigned int largest_move_alignme
*** 36,52 ****
  
  /* Declare all functions and types used by gigi.  */
  
- /* See if DECL has an RTL that is indirect via a pseudo-register or a
-    memory location and replace it with an indirect reference if so.
-    This improves the debugger's ability to display the value.  */
- extern void adjust_decl_rtl (tree);
- 
- /* Record the current code position in GNAT_NODE.  */
- extern void record_code_position (Node_Id);
- 
- /* Insert the code for GNAT_NODE at the position saved for that node.  */
- extern void insert_code_for (Node_Id);
- 
  /* Compute the alignment of the largest mode that can be used for copying
     objects.  */
  extern void gnat_compute_largest_alignment (void);
--- 36,41 ----
*************** extern void gnat_compute_largest_alignme
*** 55,74 ****
     expression that contains the last address on the stack to check. */
  extern tree emit_stack_check (tree);
  
- /* Make a TRANSFORM_EXPR to later expand GNAT_NODE into code.  */
- extern tree make_transform_expr (Node_Id);
- 
- /* Update the setjmp buffer BUF with the current stack pointer.  We assume
-    here that a __builtin_setjmp was done to BUF.  */
- extern void update_setjmp_buf (tree);
- 
  /* GNU_TYPE is a type. Determine if it should be passed by reference by
     default.  */
! extern int default_pass_by_ref (tree);
  
  /* GNU_TYPE is the type of a subprogram parameter.  Determine from the type
     if it should be passed by reference.  */
! extern int must_pass_by_ref (tree);
  
  /* Elaboration routines for the front end.  */
  extern void elab_all_gnat (void);
--- 44,56 ----
     expression that contains the last address on the stack to check. */
  extern tree emit_stack_check (tree);
  
  /* GNU_TYPE is a type. Determine if it should be passed by reference by
     default.  */
! extern bool default_pass_by_ref (tree);
  
  /* GNU_TYPE is the type of a subprogram parameter.  Determine from the type
     if it should be passed by reference.  */
! extern bool must_pass_by_ref (tree);
  
  /* Elaboration routines for the front end.  */
  extern void elab_all_gnat (void);
*************** extern void init_dummy_type (void);
*** 93,103 ****
--- 75,102 ----
     the code.  */
  extern tree gnat_to_gnu_entity (Entity_Id, tree, int);
  
+ /* Similar, but if the returned value is a COMPONENT_REF, return the
+    FIELD_DECL.  */
+ extern tree gnat_to_gnu_field_decl (Entity_Id);
+ 
  /* Given GNAT_ENTITY, an entity in the incoming GNAT tree, return a
     GCC type corresponding to that entity.  GNAT_ENTITY is assumed to
     refer to an Ada type.  */
  extern tree gnat_to_gnu_type (Entity_Id);
  
+ /* Add GNU_STMT to the current BLOCK_STMT node.  */
+ extern void add_stmt (tree);
+ 
+ /* Similar, but set the location of GNU_STMT to that of GNAT_NODE.  */
+ extern void add_stmt_with_node (tree, Node_Id);
+ 
+ /* Set the BLOCK node corresponding to the current code group to GNU_BLOCK.  */
+ extern void set_block_for_group (tree);
+ 
+ /* Add a declaration statement for GNU_DECL to the current BLOCK_STMT node.
+    Get SLOC from Entity_Id.  */
+ extern void add_decl_expr (tree, Entity_Id);
+ 
  /* Given GNAT_ENTITY, elaborate all expressions that are required to
     be elaborated at the point of its definition, but do nothing else.  */
  extern void elaborate_entity (Entity_Id);
*************** extern tree make_dummy_type (Entity_Id);
*** 113,126 ****
  extern tree get_unpadded_type (Entity_Id);
  
  /* Called when we need to protect a variable object using a save_expr.  */
! extern tree maybe_variable (tree, Node_Id);
  
  /* Create a record type that contains a field of TYPE with a starting bit
-    position so that it is aligned to ALIGN bits.  */
- /* Create a record type that contains a field of TYPE with a starting bit
     position so that it is aligned to ALIGN bits and is SIZE bytes long.  */
  extern tree make_aligning_type (tree, int, tree);
  
  /* Given a GNU tree and a GNAT list of choices, generate an expression to test
     the value passed against the list of choices.  */
  extern tree choices_to_gnu (tree, Node_Id);
--- 112,139 ----
  extern tree get_unpadded_type (Entity_Id);
  
  /* Called when we need to protect a variable object using a save_expr.  */
! extern tree maybe_variable (tree);
  
  /* Create a record type that contains a field of TYPE with a starting bit
     position so that it is aligned to ALIGN bits and is SIZE bytes long.  */
  extern tree make_aligning_type (tree, int, tree);
  
+ /* Ensure that TYPE has SIZE and ALIGN.  Make and return a new padded type
+    if needed.  We have already verified that SIZE and TYPE are large enough.
+ 
+    GNAT_ENTITY and NAME_TRAILER are used to name the resulting record and
+    to issue a warning.
+ 
+    IS_USER_TYPE is true if we must be sure we complete the original type.
+ 
+    DEFINITION is true if this type is being defined.
+ 
+    SAME_RM_SIZE is true if the RM_Size of the resulting type is to be
+    set to its TYPE_SIZE; otherwise, it's set to the RM_Size of the original
+    type.  */
+ extern tree maybe_pad_type (tree, tree, unsigned int, Entity_Id,
+ 			    const char *, bool, bool, bool);
+ 
  /* Given a GNU tree and a GNAT list of choices, generate an expression to test
     the value passed against the list of choices.  */
  extern tree choices_to_gnu (tree, Node_Id);
*************** extern tree get_entity_name (Entity_Id);
*** 149,170 ****
     SUFFIX.  */
  extern tree create_concat_name (Entity_Id, const char *);
  
! /* Flag indicating whether file names are discarded in exception messages */
! extern int discard_file_names;
! 
! /* If true, then gigi is being called on an analyzed but unexpanded
!    tree, and the only purpose of the call is to properly annotate
!    types with representation information */
! extern int type_annotate_only;
  
  /* Current file name without path */
  extern const char *ref_filename;
  
- /* List of TREE_LIST nodes representing a block stack.  TREE_VALUE
-    of each gives the variable used for the setjmp buffer in the current
-    block, if any.  */
- extern GTY(()) tree gnu_block_stack;
- 
  /* This is the main program of the back-end.  It sets up all the table
     structures and then generates code.  */
  
--- 162,175 ----
     SUFFIX.  */
  extern tree create_concat_name (Entity_Id, const char *);
  
! /* If true, then gigi is being called on an analyzed but unexpanded tree, and
!    the only purpose of the call is to properly annotate types with
!    representation information.  */
! extern bool type_annotate_only;
  
  /* Current file name without path */
  extern const char *ref_filename;
  
  /* This is the main program of the back-end.  It sets up all the table
     structures and then generates code.  */
  
*************** extern void gigi (Node_Id, int, int, str
*** 173,183 ****
  		  struct String_Entry *, Char_Code *, struct List_Header *,
  		  Int, char *, Entity_Id, Entity_Id, Entity_Id, Int);
  
- /* This function is the driver of the GNAT to GCC tree transformation process.
-    GNAT_NODE is the root of some gnat tree.  It generates code for that
-    part of the tree.  */
- extern void gnat_to_code (Node_Id);
- 
  /* GNAT_NODE is the root of some GNAT tree.  Return the root of the
     GCC tree corresponding to that GNAT tree.  Normally, no code is generated;
     we just return an equivalent tree which is used elsewhere to generate
--- 178,183 ----
*************** extern tree gnat_to_gnu (Node_Id);
*** 187,205 ****
  /* GNU_STMT is a statement.  We generate code for that statement.  */
  extern void gnat_expand_stmt (tree);
  
  /* Do the processing for the declaration of a GNAT_ENTITY, a type.  If
     a separate Freeze node exists, delay the bulk of the processing.  Otherwise
     make a GCC type for GNAT_ENTITY and set up the correspondance.  */
  
  extern void process_type (Entity_Id);
  
! /* Determine the input_filename and the input_line from the source location
!    (Sloc) of GNAT_NODE node.  Set the global variable input_filename and
!    input_line.  If WRITE_NOTE_P is true, emit a line number note. */
! extern void set_lineno (Node_Id, int);
! 
! /* Likewise, but passed a Sloc.  */
! extern void set_lineno_from_sloc (Source_Ptr, int);
  
  /* Post an error message.  MSG is the error message, properly annotated.
     NODE is the node at which to post the error and the node to use for the
--- 187,206 ----
  /* GNU_STMT is a statement.  We generate code for that statement.  */
  extern void gnat_expand_stmt (tree);
  
+ extern int gnat_gimplify_expr (tree *, tree *, tree *);
+ 
  /* Do the processing for the declaration of a GNAT_ENTITY, a type.  If
     a separate Freeze node exists, delay the bulk of the processing.  Otherwise
     make a GCC type for GNAT_ENTITY and set up the correspondance.  */
  
  extern void process_type (Entity_Id);
  
! /* Convert Sloc into *LOCUS (a location_t).  Return true if this Sloc
!    corresponds to a source code location and false if it doesn't.  In the
!    latter case, we don't update *LOCUS.  We also set the Gigi global variable
!    REF_FILENAME to the reference file name as given by sinput (i.e no
!    directory).  */
! extern bool Sloc_to_locus (Source_Ptr, location_t *);
  
  /* Post an error message.  MSG is the error message, properly annotated.
     NODE is the node at which to post the error and the node to use for the
*************** extern void set_second_error_entity (Ent
*** 231,242 ****
  /* Protect EXP from multiple evaluation.  This may make a SAVE_EXPR.  */
  extern tree protect_multiple_eval (tree);
  
- /* Signal abort, with "Gigi abort" as the error label, and error_gnat_node
-    as the relevant node that provides the location info for the error.
-    The single parameter CODE is an integer code that is included in the
-    additional error message generated. */
- extern void gigi_abort (int) ATTRIBUTE_NORETURN;
- 
  /* Initialize the table that maps GNAT codes to GCC codes for simple
     binary and unary operations.  */
  extern void init_code_table (void);
--- 232,237 ----
*************** extern Node_Id error_gnat_node;
*** 248,255 ****
  /* This is equivalent to stabilize_reference in GCC's tree.c, but we know
     how to handle our new nodes and we take an extra argument that says
     whether to force evaluation of everything.  */
! 
! extern tree gnat_stabilize_reference (tree, int);
  
  /* Highest number in the front-end node table.  */
  extern int max_gnat_nodes;
--- 243,249 ----
  /* This is equivalent to stabilize_reference in GCC's tree.c, but we know
     how to handle our new nodes and we take an extra argument that says
     whether to force evaluation of everything.  */
! extern tree gnat_stabilize_reference (tree, bool);
  
  /* Highest number in the front-end node table.  */
  extern int max_gnat_nodes;
*************** struct attrib
*** 307,313 ****
    struct attrib *next;
    enum attr_type type;
    tree name;
!   tree arg;
    Node_Id error_point;
  };
  
--- 301,307 ----
    struct attrib *next;
    enum attr_type type;
    tree name;
!   tree args;
    Node_Id error_point;
  };
  
*************** enum standard_datatypes
*** 346,354 ****
--- 340,351 ----
    ADT_get_excptr_decl,
    ADT_setjmp_decl,
    ADT_longjmp_decl,
+   ADT_update_setjmp_buf_decl,
    ADT_raise_nodefer_decl,
    ADT_begin_handler_decl,
    ADT_end_handler_decl,
+   ADT_others_decl,
+   ADT_all_others_decl,
    ADT_LAST};
  
  extern GTY(()) tree gnat_std_decls[(int) ADT_LAST];
*************** extern GTY(()) tree gnat_raise_decls[(in
*** 369,376 ****
--- 366,376 ----
  #define get_excptr_decl gnat_std_decls[(int) ADT_get_excptr_decl]
  #define setjmp_decl gnat_std_decls[(int) ADT_setjmp_decl]
  #define longjmp_decl gnat_std_decls[(int) ADT_longjmp_decl]
+ #define update_setjmp_buf_decl gnat_std_decls[(int) ADT_update_setjmp_buf_decl]
  #define raise_nodefer_decl gnat_std_decls[(int) ADT_raise_nodefer_decl]
  #define begin_handler_decl gnat_std_decls[(int) ADT_begin_handler_decl]
+ #define others_decl gnat_std_decls[(int) ADT_others_decl]
+ #define all_others_decl gnat_std_decls[(int) ADT_all_others_decl]
  #define end_handler_decl gnat_std_decls[(int) ADT_end_handler_decl]
  
  /* Routines expected by the gcc back-end. They must have exactly the same
*************** extern GTY(()) tree gnat_raise_decls[(in
*** 379,426 ****
  /* Returns non-zero if we are currently in the global binding level       */
  extern int global_bindings_p (void);
  
! /* Returns the list of declarations in the current level. Note that this list
!    is in reverse order (it has to be so for back-end compatibility).  */
! extern tree getdecls (void);
! 
! /* Nonzero if the current level needs to have a BLOCK made.  */
! extern int kept_level_p (void);
! 
! /* Enter a new binding level. The input parameter is ignored, but has to be
!    specified for back-end compatibility.  */
! extern void pushlevel (int);
! 
! /* Exit a binding level.
!    Pop the level off, and restore the state of the identifier-decl mappings
!    that were in effect when this level was entered.
  
!    If KEEP is nonzero, this level had explicit declarations, so
!    and create a "block" (a BLOCK node) for the level
!    to record its declarations and subblocks for symbol table output.
  
!    If FUNCTIONBODY is nonzero, this level is the body of a function,
!    so create a block as if KEEP were set and also clear out all
!    label names.
  
!    If REVERSE is nonzero, reverse the order of decls before putting
!    them into the BLOCK.  */
! extern tree poplevel (int, int, int);
  
  /* Insert BLOCK at the end of the list of subblocks of the
     current binding level.  This is used when a BIND_EXPR is expanded,
     to handle the BLOCK node inside the BIND_EXPR.  */
  extern void insert_block (tree);
  
! /* Set the BLOCK node for the innermost scope
!    (the one we are currently in).  */
! extern void set_block (tree);
! 
! /* Records a ..._DECL node DECL as belonging to the current lexical scope.
!    Returns the ..._DECL node. */
! extern tree pushdecl (tree);
  
! /* Create the predefined scalar types such as `integer_type_node' needed
!    in the gcc back-end and initialize the global binding level.  */
  extern void gnat_init_decl_processing (void);
  extern void init_gigi_decls (tree, tree);
  extern void gnat_init_gcc_eh (void);
--- 379,408 ----
  /* Returns non-zero if we are currently in the global binding level       */
  extern int global_bindings_p (void);
  
! /* Enter and exit a new binding level. */
! extern void gnat_pushlevel (void);
! extern void gnat_poplevel (void);
  
! /* Set SUPERCONTEXT of the BLOCK for the current binding level to FNDECL
!    and point FNDECL to this BLOCK.  */
! extern void set_current_block_context (tree);
  
! /* Set the jmpbuf_decl for the current binding level to DECL.  */
! extern void set_block_jmpbuf_decl (tree);
  
! /* Get the setjmp_decl, if any, for the current binding level.  */
! extern tree get_block_jmpbuf_decl (void);
  
  /* Insert BLOCK at the end of the list of subblocks of the
     current binding level.  This is used when a BIND_EXPR is expanded,
     to handle the BLOCK node inside the BIND_EXPR.  */
  extern void insert_block (tree);
  
! /* Records a ..._DECL node DECL as belonging to the current lexical scope
!    and uses GNAT_ENTITY for location information.  */
! extern void gnat_pushdecl (tree, Entity_Id);
  
! extern void gnat_init_stmt_group (void);
  extern void gnat_init_decl_processing (void);
  extern void init_gigi_decls (tree, tree);
  extern void gnat_init_gcc_eh (void);
*************** extern tree convert (tree, tree);
*** 459,465 ****
     GNAT_ENTITY. Such gnu tree node is always an ..._DECL node.
     If NO_CHECK is nonzero, the latter check is suppressed.
     If GNU_DECL is zero, a previous association is to be reset.  */
! extern void save_gnu_tree (Entity_Id, tree, int);
  
  /* GNAT_ENTITY is a GNAT tree node for a defining identifier.
     Return the ..._DECL node that was associated with it.  If there is no tree
--- 441,447 ----
     GNAT_ENTITY. Such gnu tree node is always an ..._DECL node.
     If NO_CHECK is nonzero, the latter check is suppressed.
     If GNU_DECL is zero, a previous association is to be reset.  */
! extern void save_gnu_tree (Entity_Id, tree, bool);
  
  /* GNAT_ENTITY is a GNAT tree node for a defining identifier.
     Return the ..._DECL node that was associated with it.  If there is no tree
*************** extern void save_gnu_tree (Entity_Id, tr
*** 467,495 ****
  extern tree get_gnu_tree (Entity_Id);
  
  /* Return nonzero if a GCC tree has been associated with GNAT_ENTITY.  */
! extern int present_gnu_tree (Entity_Id);
  
  /* Initialize tables for above routines.  */
  extern void init_gnat_to_gnu (void);
  
  /* Given a record type (RECORD_TYPE) and a chain of FIELD_DECL
     nodes (FIELDLIST), finish constructing the record or union type.
!    If HAS_REP is nonzero, this record has a rep clause; don't call
     layout_type but merely set the size and alignment ourselves.
!    If DEFER_DEBUG is nonzero, do not call the debugging routines
     on this type; it will be done later. */
! extern void finish_record_type (tree, tree, int, int);
  
  /* Returns a FUNCTION_TYPE node. RETURN_TYPE is the type returned by the
     subprogram. If it is void_type_node, then we are dealing with a procedure,
     otherwise we are dealing with a function. PARAM_DECL_LIST is a list of
     PARM_DECL nodes that are the subprogram arguments.  CICO_LIST is the
     copy-in/copy-out list to be stored into TYPE_CI_CO_LIST.
!    RETURNS_UNCONSTRAINED is nonzero if the function returns an unconstrained
!    object.  RETURNS_BY_REF is nonzero if the function returns by reference.
!    RETURNS_WITH_DSP is nonzero if the function is to return with a
!    depressed stack pointer.  */
! extern tree create_subprog_type (tree, tree, tree, int, int, int);
  
  /* Return a copy of TYPE, but safe to modify in any way.  */
  extern tree copy_type (tree);
--- 449,479 ----
  extern tree get_gnu_tree (Entity_Id);
  
  /* Return nonzero if a GCC tree has been associated with GNAT_ENTITY.  */
! extern bool present_gnu_tree (Entity_Id);
  
  /* Initialize tables for above routines.  */
  extern void init_gnat_to_gnu (void);
  
  /* Given a record type (RECORD_TYPE) and a chain of FIELD_DECL
     nodes (FIELDLIST), finish constructing the record or union type.
!    If HAS_REP is true, this record has a rep clause; don't call
     layout_type but merely set the size and alignment ourselves.
!    If DEFER_DEBUG is true, do not call the debugging routines
     on this type; it will be done later. */
! extern void finish_record_type (tree, tree, bool, bool);
  
  /* Returns a FUNCTION_TYPE node. RETURN_TYPE is the type returned by the
     subprogram. If it is void_type_node, then we are dealing with a procedure,
     otherwise we are dealing with a function. PARAM_DECL_LIST is a list of
     PARM_DECL nodes that are the subprogram arguments.  CICO_LIST is the
     copy-in/copy-out list to be stored into TYPE_CI_CO_LIST.
!    RETURNS_UNCONSTRAINED is true if the function returns an unconstrained
!    object.  RETURNS_BY_REF is true if the function returns by reference.
!    RETURNS_WITH_DSP is true if the function is to return with a
!    depressed stack pointer.  RETURNS_BY_TARGET_PTR is true if the function
!    is to be passed (as its first parameter) the address of the place to copy
!    its result.  */
! extern tree create_subprog_type (tree, tree, tree, bool, bool, bool, bool);
  
  /* Return a copy of TYPE, but safe to modify in any way.  */
  extern tree copy_type (tree);
*************** extern tree create_index_type (tree, tre
*** 500,554 ****
  
  /* Return a TYPE_DECL node. TYPE_NAME gives the name of the type (a character
     string) and TYPE is a ..._TYPE node giving its data type.
!    ARTIFICIAL_P is nonzero if this is a declaration that was generated
!    by the compiler.  DEBUG_INFO_P is nonzero if we need to write debugging
!    information about this type.  */
! extern tree create_type_decl (tree, tree, struct attrib *, int, int);
  
  /* Returns a GCC VAR_DECL node. VAR_NAME gives the name of the variable.
     ASM_NAME is its assembler name (if provided).  TYPE is
     its data type (a GCC ..._TYPE node).  VAR_INIT is the GCC tree for an
     optional initial expression; NULL_TREE if none.
  
!    CONST_FLAG is nonzero if this variable is constant.
  
!    PUBLIC_FLAG is nonzero if this definition is to be made visible outside of
     the current compilation unit. This flag should be set when processing the
     variable definitions in a package specification.  EXTERN_FLAG is nonzero
     when processing an external variable declaration (as opposed to a
     definition: no storage is to be allocated for the variable here).
     STATIC_FLAG is only relevant when not at top level.  In that case
!    it indicates whether to always allocate storage to the variable.  */
! extern tree create_var_decl (tree, tree, tree, tree, int, int, int, int,
! 			     struct attrib *);
  
  /* Given a DECL and ATTR_LIST, apply the listed attributes.  */
  extern void process_attributes (tree, struct attrib *);
  
- /* Obtain any pending elaborations and clear the old list.  */
- extern tree get_pending_elaborations (void);
- 
- /* Return nonzero if there are pending elaborations.  */
- extern int pending_elaborations_p (void);
- 
- /* Save a copy of the current pending elaboration list and make a new
-    one.  */
- extern void push_pending_elaborations (void);
- 
- /* Pop the stack of pending elaborations.  */
- extern void pop_pending_elaborations (void);
- 
- /* Return the current position in pending_elaborations so we can insert
-    elaborations after that point.  */
- extern tree get_elaboration_location (void);
- 
- /* Insert the current elaborations after ELAB, which is in some elaboration
-    list.  */
- extern void insert_elaboration_list (tree);
- 
- /* Add some pending elaborations to the current list.  */
- extern void add_pending_elaborations (tree, tree);
- 
  /* Returns a FIELD_DECL node. FIELD_NAME the field name, FIELD_TYPE is its
     type, and RECORD_TYPE is the type of the parent.  PACKED is nonzero if
     this field is in a record type with a "pragma pack".  If SIZE is nonzero
--- 484,519 ----
  
  /* Return a TYPE_DECL node. TYPE_NAME gives the name of the type (a character
     string) and TYPE is a ..._TYPE node giving its data type.
!    ARTIFICIAL_P is true if this is a declaration that was generated
!    by the compiler.  DEBUG_INFO_P is true if we need to write debugging
!    information about this type.  GNAT_NODE is used for the position of
!    the decl.  */
! extern tree create_type_decl (tree, tree, struct attrib *, bool, bool,
! 			      Node_Id);
  
  /* Returns a GCC VAR_DECL node. VAR_NAME gives the name of the variable.
     ASM_NAME is its assembler name (if provided).  TYPE is
     its data type (a GCC ..._TYPE node).  VAR_INIT is the GCC tree for an
     optional initial expression; NULL_TREE if none.
  
!    CONST_FLAG is true if this variable is constant.
  
!    PUBLIC_FLAG is true if this definition is to be made visible outside of
     the current compilation unit. This flag should be set when processing the
     variable definitions in a package specification.  EXTERN_FLAG is nonzero
     when processing an external variable declaration (as opposed to a
     definition: no storage is to be allocated for the variable here).
+ 
     STATIC_FLAG is only relevant when not at top level.  In that case
!    it indicates whether to always allocate storage to the variable.
! 
!    GNAT_NODE is used for the position of the decl.  */
! extern tree create_var_decl (tree, tree, tree, tree, bool, bool, bool, bool,
! 			     struct attrib *, Node_Id);
  
  /* Given a DECL and ATTR_LIST, apply the listed attributes.  */
  extern void process_attributes (tree, struct attrib *);
  
  /* Returns a FIELD_DECL node. FIELD_NAME the field name, FIELD_TYPE is its
     type, and RECORD_TYPE is the type of the parent.  PACKED is nonzero if
     this field is in a record type with a "pragma pack".  If SIZE is nonzero
*************** extern void add_pending_elaborations (tr
*** 558,577 ****
  extern tree create_field_decl (tree, tree, tree, int, tree, tree, int);
  
  /* Returns a PARM_DECL node. PARAM_NAME is the name of the parameter,
!    PARAM_TYPE is its type.  READONLY is nonzero if the parameter is
     readonly (either an IN parameter or an address of a pass-by-ref
     parameter). */
! extern tree create_param_decl (tree, tree, int);
  
  /* Returns a FUNCTION_DECL node.  SUBPROG_NAME is the name of the subprogram,
     ASM_NAME is its assembler name, SUBPROG_TYPE is its type (a FUNCTION_TYPE
     node), PARAM_DECL_LIST is the list of the subprogram arguments (a list of
     PARM_DECL nodes chained through the TREE_CHAIN field).
  
!    INLINE_FLAG, PUBLIC_FLAG, and EXTERN_FLAG are used to set the appropriate
!    fields in the FUNCTION_DECL.  */
! extern tree create_subprog_decl (tree, tree, tree, tree, int, int, int,
! 				 struct attrib *);
  
  /* Returns a LABEL_DECL node for LABEL_NAME.  */
  extern tree create_label_decl (tree);
--- 523,542 ----
  extern tree create_field_decl (tree, tree, tree, int, tree, tree, int);
  
  /* Returns a PARM_DECL node. PARAM_NAME is the name of the parameter,
!    PARAM_TYPE is its type.  READONLY is true if the parameter is
     readonly (either an IN parameter or an address of a pass-by-ref
     parameter). */
! extern tree create_param_decl (tree, tree, bool);
  
  /* Returns a FUNCTION_DECL node.  SUBPROG_NAME is the name of the subprogram,
     ASM_NAME is its assembler name, SUBPROG_TYPE is its type (a FUNCTION_TYPE
     node), PARAM_DECL_LIST is the list of the subprogram arguments (a list of
     PARM_DECL nodes chained through the TREE_CHAIN field).
  
!    INLINE_FLAG, PUBLIC_FLAG, EXTERN_FLAG, and ATTR_LIST are used to set the
!    appropriate fields in the FUNCTION_DECL.  GNAT_NODE gives the location.  */
! extern tree create_subprog_decl (tree, tree, tree, tree, bool, bool, bool,
! 				 struct attrib *, Node_Id);
  
  /* Returns a LABEL_DECL node for LABEL_NAME.  */
  extern tree create_label_decl (tree);
*************** extern tree create_label_decl (tree);
*** 582,589 ****
  extern void begin_subprog_body (tree);
  
  /* Finish the definition of the current subprogram and compile it all the way
!    to assembler language output.  */
! extern void end_subprog_body (void);
  
  /* Build a template of type TEMPLATE_TYPE from the array bounds of ARRAY_TYPE.
     EXPR is an expression that we can use to locate any PLACEHOLDER_EXPRs.
--- 547,555 ----
  extern void begin_subprog_body (tree);
  
  /* Finish the definition of the current subprogram and compile it all the way
!    to assembler language output.  BODY is the tree corresponding to
!    the subprogram.  */
! extern void end_subprog_body (tree);
  
  /* Build a template of type TEMPLATE_TYPE from the array bounds of ARRAY_TYPE.
     EXPR is an expression that we can use to locate any PLACEHOLDER_EXPRs.
*************** extern void update_pointer_to (tree, tre
*** 614,627 ****
  
  /* EXP is an expression for the size of an object.  If this size contains
     discriminant references, replace them with the maximum (if MAX_P) or
!    minimum (if ! MAX_P) possible value of the discriminant.  */
! extern tree max_size (tree, int);
  
  /* Remove all conversions that are done in EXP.  This includes converting
     from a padded type or to a left-justified modular type.  If TRUE_ADDRESS
!    is nonzero, always return the address of the containing object even if
     the address is not bit-aligned.  */
! extern tree remove_conversions (tree, int);
  
  /* If EXP's type is an UNCONSTRAINED_ARRAY_TYPE, return an expression that
     refers to the underlying array.  If its type has TYPE_CONTAINS_TEMPLATE_P,
--- 580,593 ----
  
  /* EXP is an expression for the size of an object.  If this size contains
     discriminant references, replace them with the maximum (if MAX_P) or
!    minimum (if !MAX_P) possible value of the discriminant.  */
! extern tree max_size (tree, bool);
  
  /* Remove all conversions that are done in EXP.  This includes converting
     from a padded type or to a left-justified modular type.  If TRUE_ADDRESS
!    is true, always return the address of the containing object even if
     the address is not bit-aligned.  */
! extern tree remove_conversions (tree, bool);
  
  /* If EXP's type is an UNCONSTRAINED_ARRAY_TYPE, return an expression that
     refers to the underlying array.  If its type has TYPE_CONTAINS_TEMPLATE_P,
*************** extern tree remove_conversions (tree, in
*** 629,636 ****
  extern tree maybe_unconstrained_array (tree);
  
  /* Return an expression that does an unchecked converstion of EXPR to TYPE.
!    If NOTRUNC_P is set, truncation operations should be suppressed.  */
! extern tree unchecked_convert (tree, tree, int);
  
  /* Prepare expr to be an argument of a TRUTH_NOT_EXPR or other logical
     operation.
--- 595,602 ----
  extern tree maybe_unconstrained_array (tree);
  
  /* Return an expression that does an unchecked converstion of EXPR to TYPE.
!    If NOTRUNC_P is true, truncation operations should be suppressed.  */
! extern tree unchecked_convert (tree, tree, bool);
  
  /* Prepare expr to be an argument of a TRUTH_NOT_EXPR or other logical
     operation.
*************** extern tree gnat_build_constructor (tree
*** 692,698 ****
  /* Return a COMPONENT_REF to access a field that is given by COMPONENT,
     an IDENTIFIER_NODE giving the name of the field, FIELD, a FIELD_DECL,
     for the field, or both.  Don't fold the result if NO_FOLD_P.  */
! extern tree build_component_ref (tree, tree, tree, int);
  
  /* Build a GCC tree to call an allocation or deallocation function.
     If GNU_OBJ is nonzero, it is an object to deallocate.  Otherwise,
--- 658,664 ----
  /* Return a COMPONENT_REF to access a field that is given by COMPONENT,
     an IDENTIFIER_NODE giving the name of the field, FIELD, a FIELD_DECL,
     for the field, or both.  Don't fold the result if NO_FOLD_P.  */
! extern tree build_component_ref (tree, tree, tree, bool);
  
  /* Build a GCC tree to call an allocation or deallocation function.
     If GNU_OBJ is nonzero, it is an object to deallocate.  Otherwise,
*************** extern tree build_component_ref (tree, t
*** 701,707 ****
     GNU_SIZE is the size of the object and ALIGN is the alignment.
     GNAT_PROC, if present is a procedure to call and GNAT_POOL is the
     storage pool to use.  If not preset, malloc and free will be used.  */
! extern tree build_call_alloc_dealloc (tree, tree, int, Entity_Id,
  				      Entity_Id, Node_Id);
  
  /* Build a GCC tree to correspond to allocating an object of TYPE whose
--- 667,673 ----
     GNU_SIZE is the size of the object and ALIGN is the alignment.
     GNAT_PROC, if present is a procedure to call and GNAT_POOL is the
     storage pool to use.  If not preset, malloc and free will be used.  */
! extern tree build_call_alloc_dealloc (tree, tree, unsigned int, Entity_Id,
  				      Entity_Id, Node_Id);
  
  /* Build a GCC tree to correspond to allocating an object of TYPE whose
*************** extern tree fill_vms_descriptor (tree, E
*** 721,726 ****
--- 687,701 ----
     should not be allocated in a register.  Return true if successful.  */
  extern bool gnat_mark_addressable (tree);
  
+ /* Implementation of the builtin_function langhook.  */
+ extern tree builtin_function (const char *, tree, int, enum built_in_class,
+ 			      const char *, tree);
+ 
+ /* Search the chain of currently reachable declarations for a builtin
+    FUNCTION_DECL node corresponding to function NAME (an IDENTIFIER_NODE).
+    Return the first node found, if any, or NULL_TREE otherwise.  */
+ extern tree builtin_decl_for (tree);
+ 
  /* This function is called by the front end to enumerate all the supported
     modes for the machine.  We pass a function which is called back with
     the following integer parameters:
*************** extern Pos get_target_double_size (void)
*** 756,762 ****
  extern Pos get_target_long_double_size (void);
  extern Pos get_target_pointer_size (void);
  extern Pos get_target_maximum_alignment (void);
- extern Boolean get_target_no_dollar_in_label (void);
  extern Nat get_float_words_be (void);
  extern Nat get_words_be (void);
  extern Nat get_bytes_be (void);
--- 731,736 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/gnat-style.texi gcc-4.0.0/gcc/ada/gnat-style.texi
*** gcc-3.4.3/gcc/ada/gnat-style.texi	Wed Jun  9 09:20:43 2004
--- gcc-4.0.0/gcc/ada/gnat-style.texi	Wed Sep  1 11:51:52 2004
*************** following is allowed:
*** 490,496 ****
  
  @item
  Conditions should use short-circuit forms (@code{and then},
! @code{or else}).
  @cindex Short-circuit forms
  
  @item
--- 490,497 ----
  
  @item
  Conditions should use short-circuit forms (@code{and then},
! @code{or else}), except when the operands are boolean variables
! or boolean constants.
  @cindex Short-circuit forms
  
  @item
*************** Complex conditions in @code{if} statemen
*** 508,513 ****
--- 509,531 ----
  @end group
  @end smallexample
  
+ @noindent
+ There are some cases where complex conditionals can be laid out
+ in manners that do not follow these rules to preserve better
+ parallelism between branches, e.g.
+ 
+ @smallexample @c adanocomment
+ @group
+       if xyz.abc (gef) = 'c'
+            or else
+          xyz.abc (gef) = 'x'
+       then
+          ...
+       end if;
+ @end group
+ @end smallexample
+ 
+ 
  @item
  Every @code{if} block is preceded and followed by a blank line, except
  where it begins or ends a @syntax{sequence_of_statements}.
*************** format:
*** 716,722 ****
  
  @noindent
  Note that the name in the header is preceded by a single space,
! not two spaces as for other comments.
  
  @item
  Every subprogram body must have a preceding @syntax{subprogram_declaration}.
--- 734,743 ----
  
  @noindent
  Note that the name in the header is preceded by a single space,
! not two spaces as for other comments. These headers are used on
! nested subprograms as well as outer level subprograms. They may
! also be used as headers for sections of comments, or collections
! of declarations that are related.
  
  @item
  Every subprogram body must have a preceding @syntax{subprogram_declaration}.
diff -Nrcpad gcc-3.4.3/gcc/ada/gnat1drv.adb gcc-4.0.0/gcc/ada/gnat1drv.adb
*** gcc-3.4.3/gcc/ada/gnat1drv.adb	Mon Jan  5 15:20:44 2004
--- gcc-4.0.0/gcc/ada/gnat1drv.adb	Thu Feb 10 13:57:00 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Output;   use Output;
*** 49,55 ****
  with Prepcomp;
  with Repinfo;  use Repinfo;
  with Restrict;
- with Rident;
  with Sem;
  with Sem_Ch8;
  with Sem_Ch12;
--- 49,54 ----
*************** procedure Gnat1drv is
*** 79,85 ****
     --  Compilation unit node for main unit
  
     Main_Kind : Node_Kind;
!    --  Kind of main compilation unit node.
  
     Back_End_Mode : Back_End.Back_End_Mode_Type;
     --  Record back end mode
--- 78,84 ----
     --  Compilation unit node for main unit
  
     Main_Kind : Node_Kind;
!    --  Kind of main compilation unit node
  
     Back_End_Mode : Back_End.Back_End_Mode_Type;
     --  Record back end mode
*************** begin
*** 127,134 ****
  
           S : Source_File_Index;
           N : Name_Id;
-          R : Restrict.Restriction_Id;
-          P : Restrict.Restriction_Parameter_Id;
  
        begin
           Name_Buffer (1 .. 10) := "system.ads";
--- 126,131 ----
*************** begin
*** 143,149 ****
                ("cannot locate file system.ads");
              raise Unrecoverable_Error;
  
!          --  Here if system.ads successfully read. Remember its source index.
  
           else
              System_Source_File_Index := S;
--- 140,146 ----
                ("cannot locate file system.ads");
              raise Unrecoverable_Error;
  
!          --  Remember source index of system.ads (which was read successfully)
  
           else
              System_Source_File_Index := S;
*************** begin
*** 156,179 ****
  
           --  Acquire configuration pragma information from Targparm
  
!          for J in Rident.Partition_Restrictions loop
!             R := Restrict.Partition_Restrictions (J);
! 
!             if Targparm.Restrictions_On_Target (J) then
!                Restrict.Restrictions (R)     := True;
!                Restrict.Restrictions_Loc (R) := System_Location;
!             end if;
!          end loop;
! 
!          for K in Rident.Restriction_Parameter_Id loop
!             P := Restrict.Restriction_Parameter_Id (K);
! 
!             if Targparm.Restriction_Parameters_On_Target (K) /= No_Uint then
!                Restrict.Restriction_Parameters (P) :=
!                  Targparm.Restriction_Parameters_On_Target (K);
!                Restrict.Restriction_Parameters_Loc (P) := System_Location;
!             end if;
!          end loop;
        end;
  
        --  Set Configurable_Run_Time mode if system.ads flag set
--- 153,159 ----
  
           --  Acquire configuration pragma information from Targparm
  
!          Restrict.Restrictions := Targparm.Restrictions_On_Target;
        end;
  
        --  Set Configurable_Run_Time mode if system.ads flag set
*************** begin
*** 182,187 ****
--- 162,175 ----
           Configurable_Run_Time_Mode := True;
        end if;
  
+       --  Set -gnatR3m mode if debug flag A set
+ 
+       if Debug_Flag_AA then
+          Back_Annotate_Rep_Info := True;
+          List_Representation_Info := 1;
+          List_Representation_Info_Mechanisms := True;
+       end if;
+ 
        --  Output copyright notice if full list mode
  
        if (Verbose_Mode or Full_List)
*************** begin
*** 190,196 ****
           Write_Eol;
           Write_Str ("GNAT ");
           Write_Str (Gnat_Version_String);
!          Write_Str (" Copyright 1992-2004 Free Software Foundation, Inc.");
           Write_Eol;
        end if;
  
--- 178,185 ----
           Write_Eol;
           Write_Str ("GNAT ");
           Write_Str (Gnat_Version_String);
!          Write_Eol;
!          Write_Str ("Copyright 1992-2005 Free Software Foundation, Inc.");
           Write_Eol;
        end if;
  
*************** begin
*** 258,266 ****
           Suppress_Options (Overflow_Check) := True;
        end if;
  
!       --  Check we have exactly one source file, this happens only in
!       --  the case where the driver is called directly, it cannot happen
!       --  when gnat1 is invoked from gcc in the normal case.
  
        if Osint.Number_Of_Files /= 1 then
           Usage;
--- 247,255 ----
           Suppress_Options (Overflow_Check) := True;
        end if;
  
!       --  Check we have exactly one source file, this happens only in the case
!       --  where the driver is called directly, it cannot happen when gnat1 is
!       --  invoked from gcc in the normal case.
  
        if Osint.Number_Of_Files /= 1 then
           Usage;
*************** begin
*** 291,317 ****
             or else Nkind (Original_Node (Unit (Main_Unit_Node)))
                             in N_Generic_Instantiation)
        then
!          declare
              Sname   : Unit_Name_Type := Unit_Name (Main_Unit);
              Src_Ind : Source_File_Index;
              Fname   : File_Name_Type;
  
!             procedure Bad_Body (Msg : String);
              --  Issue message for bad body found
  
!             procedure Bad_Body (Msg : String) is
              begin
                 Error_Msg_N (Msg, Main_Unit_Node);
                 Error_Msg_Name_1 := Fname;
                 Error_Msg_N
                   ("remove incorrect body in file{!", Main_Unit_Node);
!             end Bad_Body;
  
           begin
              Sname := Unit_Name (Main_Unit);
  
!             --  If we do not already have a body name, then get the body
!             --  name (but how can we have a body name here ???)
  
              if not Is_Body_Name (Sname) then
                 Sname := Get_Body_Name (Sname);
--- 280,312 ----
             or else Nkind (Original_Node (Unit (Main_Unit_Node)))
                             in N_Generic_Instantiation)
        then
!          Bad_Body : declare
              Sname   : Unit_Name_Type := Unit_Name (Main_Unit);
              Src_Ind : Source_File_Index;
              Fname   : File_Name_Type;
  
!             procedure Bad_Body_Error (Msg : String);
              --  Issue message for bad body found
  
!             --------------------
!             -- Bad_Body_Error --
!             --------------------
! 
!             procedure Bad_Body_Error (Msg : String) is
              begin
                 Error_Msg_N (Msg, Main_Unit_Node);
                 Error_Msg_Name_1 := Fname;
                 Error_Msg_N
                   ("remove incorrect body in file{!", Main_Unit_Node);
!             end Bad_Body_Error;
! 
!          --  Start of processing for Bad_Body
  
           begin
              Sname := Unit_Name (Main_Unit);
  
!             --  If we do not already have a body name, then get the body name
!             --  (but how can we have a body name here ???)
  
              if not Is_Body_Name (Sname) then
                 Sname := Get_Body_Name (Sname);
*************** begin
*** 322,349 ****
  
              --  Case where body is present and it is not a subunit. Exclude
              --  the subunit case, because it has nothing to do with the
!             --  package we are compiling. It is illegal for a child unit
!             --  and a subunit with the same expanded name (RM 10.2(9)) to
!             --  appear together in a partition, but there is nothing to
!             --  stop a compilation environment from having both, and the
!             --  test here simply allows that. If there is an attempt to
!             --  include both in a partition, this is diagnosed at bind time.
!             --  In Ada 83 mode this is not a warning case.
  
              if Src_Ind /= No_Source_File
                and then not Source_File_Is_Subunit (Src_Ind)
              then
                 Error_Msg_Name_1 := Sname;
  
!                --  Ada 83 case of a package body being ignored. This is not
!                --  an error as far as the Ada 83 RM is concerned, but it is
                 --  almost certainly not what is wanted so output a warning.
                 --  Give this message only if there were no errors, since
!                --  otherwise it may be incorrect (we may have misinterpreted
!                --  a junk spec as not needing a body when it really does).
  
                 if Main_Kind = N_Package_Declaration
!                  and then Ada_83
                   and then Operating_Mode = Generate_Code
                   and then Distribution_Stub_Mode /= Generate_Caller_Stub_Body
                   and then not Compilation_Errors
--- 317,350 ----
  
              --  Case where body is present and it is not a subunit. Exclude
              --  the subunit case, because it has nothing to do with the
!             --  package we are compiling. It is illegal for a child unit and a
!             --  subunit with the same expanded name (RM 10.2(9)) to appear
!             --  together in a partition, but there is nothing to stop a
!             --  compilation environment from having both, and the test here
!             --  simply allows that. If there is an attempt to include both in
!             --  a partition, this is diagnosed at bind time. In Ada 83 mode
!             --  this is not a warning case.
! 
!             --  Note: if weird file names are being used, we can have
!             --  situation where the file name that supposedly contains body,
!             --  in fact contains a spec, or we can't tell what it contains.
!             --  Skip the error message in these cases.
  
              if Src_Ind /= No_Source_File
+               and then Get_Expected_Unit_Type (Fname) = Expect_Body
                and then not Source_File_Is_Subunit (Src_Ind)
              then
                 Error_Msg_Name_1 := Sname;
  
!                --  Ada 83 case of a package body being ignored. This is not an
!                --  error as far as the Ada 83 RM is concerned, but it is
                 --  almost certainly not what is wanted so output a warning.
                 --  Give this message only if there were no errors, since
!                --  otherwise it may be incorrect (we may have misinterpreted a
!                --  junk spec as not needing a body when it really does).
  
                 if Main_Kind = N_Package_Declaration
!                  and then Ada_Version = Ada_83
                   and then Operating_Mode = Generate_Code
                   and then Distribution_Stub_Mode /= Generate_Caller_Stub_Body
                   and then not Compilation_Errors
*************** begin
*** 363,395 ****
                    if Nkind (Original_Node (Unit (Main_Unit_Node)))
                        in N_Generic_Instantiation
                    then
!                      Bad_Body
                         ("generic instantiation for % does not allow a body");
  
                    --  A library unit that is a renaming never allows a body
  
                    elsif Main_Kind in N_Renaming_Declaration then
!                      Bad_Body
                         ("renaming declaration for % does not allow a body!");
  
!                   --  Remaining cases are packages and generic packages.
!                   --  Here we only do the test if there are no previous
!                   --  errors, because if there are errors, they may lead
!                   --  us to incorrectly believe that a package does not
!                   --  allow a body when in fact it does.
  
                    elsif not Compilation_Errors then
                       if Main_Kind = N_Package_Declaration then
!                         Bad_Body ("package % does not allow a body!");
  
                       elsif Main_Kind = N_Generic_Package_Declaration then
!                         Bad_Body ("generic package % does not allow a body!");
                       end if;
                    end if;
  
                 end if;
              end if;
!          end;
        end if;
  
        --  Exit if compilation errors detected
--- 364,398 ----
                    if Nkind (Original_Node (Unit (Main_Unit_Node)))
                        in N_Generic_Instantiation
                    then
!                      Bad_Body_Error
                         ("generic instantiation for % does not allow a body");
  
                    --  A library unit that is a renaming never allows a body
  
                    elsif Main_Kind in N_Renaming_Declaration then
!                      Bad_Body_Error
                         ("renaming declaration for % does not allow a body!");
  
!                   --  Remaining cases are packages and generic packages. Here
!                   --  we only do the test if there are no previous errors,
!                   --  because if there are errors, they may lead us to
!                   --  incorrectly believe that a package does not allow a body
!                   --  when in fact it does.
  
                    elsif not Compilation_Errors then
                       if Main_Kind = N_Package_Declaration then
!                         Bad_Body_Error
!                           ("package % does not allow a body!");
  
                       elsif Main_Kind = N_Generic_Package_Declaration then
!                         Bad_Body_Error
!                           ("generic package % does not allow a body!");
                       end if;
                    end if;
  
                 end if;
              end if;
!          end Bad_Body;
        end if;
  
        --  Exit if compilation errors detected
*************** begin
*** 410,418 ****
           Exit_Program (E_Errors);
        end if;
  
!       --  Set Generate_Code on main unit and its spec. We do this even if
!       --  are not generating code, since Lib-Writ uses this to determine
!       --  which units get written in the ali file.
  
        Set_Generate_Code (Main_Unit);
  
--- 413,421 ----
           Exit_Program (E_Errors);
        end if;
  
!       --  Set Generate_Code on main unit and its spec. We do this even if are
!       --  not generating code, since Lib-Writ uses this to determine which
!       --  units get written in the ali file.
  
        Set_Generate_Code (Main_Unit);
  
*************** begin
*** 442,456 ****
        --  be generated (i.e. no -gnatc or -gnats switch was used). Check if
        --  we can in fact satisfy this request.
  
!       --  Cannot generate code if someone has turned off code generation
!       --  for any reason at all. We will try to figure out a reason below.
  
        elsif Operating_Mode /= Generate_Code then
           Back_End_Mode := Skip;
  
!       --  We can generate code for a subprogram body unless there were
!       --  missing subunits. Note that we always generate code for all
!       --  generic units (a change from some previous versions of GNAT).
  
        elsif Main_Kind = N_Subprogram_Body
          and then not Subunits_Missing
--- 445,459 ----
        --  be generated (i.e. no -gnatc or -gnats switch was used). Check if
        --  we can in fact satisfy this request.
  
!       --  Cannot generate code if someone has turned off code generation for
!       --  any reason at all. We will try to figure out a reason below.
  
        elsif Operating_Mode /= Generate_Code then
           Back_End_Mode := Skip;
  
!       --  We can generate code for a subprogram body unless there were missing
!       --  subunits. Note that we always generate code for all generic units (a
!       --  change from some previous versions of GNAT).
  
        elsif Main_Kind = N_Subprogram_Body
          and then not Subunits_Missing
*************** begin
*** 512,528 ****
           Back_End_Mode := Skip;
        end if;
  
!       --  At this stage Call_Back_End is set to indicate if the backend
!       --  should be called to generate code. If it is not set, then code
!       --  generation has been turned off, even though code was requested
!       --  by the original command. This is not an error from the user
!       --  point of view, but it is an error from the point of view of
!       --  the gcc driver, so we must exit with an error status.
  
!       --  We generate an informative message (from the gcc point of view,
!       --  it is an error message, but from the users point of view this
!       --  is not an error, just a consequence of compiling something that
!       --  cannot generate code).
  
        if Back_End_Mode = Skip then
           Write_Str ("cannot generate code for ");
--- 515,531 ----
           Back_End_Mode := Skip;
        end if;
  
!       --  At this stage Call_Back_End is set to indicate if the backend should
!       --  be called to generate code. If it is not set, then code generation
!       --  has been turned off, even though code was requested by the original
!       --  command. This is not an error from the user point of view, but it is
!       --  an error from the point of view of the gcc driver, so we must exit
!       --  with an error status.
  
!       --  We generate an informative message (from the gcc point of view, it
!       --  is an error message, but from the users point of view this is not an
!       --  error, just a consequence of compiling something that cannot
!       --  generate code).
  
        if Back_End_Mode = Skip then
           Write_Str ("cannot generate code for ");
*************** begin
*** 587,599 ****
        --  We don't call for annotations on a subunit, because to process those
        --  the back-end requires that the parent(s) be properly compiled.
  
        --  Annotation is also suppressed in the case of compiling for
        --  the Java VM, since representations are largely symbolic there.
  
        if Back_End_Mode = Declarations_Only
!         and then (not (Back_Annotate_Rep_Info or Debug_Flag_AA)
!                    or else Main_Kind = N_Subunit
!                    or else Hostparm.Java_VM)
        then
           Sem_Ch13.Validate_Unchecked_Conversions;
           Errout.Finalize;
--- 590,606 ----
        --  We don't call for annotations on a subunit, because to process those
        --  the back-end requires that the parent(s) be properly compiled.
  
+       --  Annotation is suppressed for targets where front-end layout is
+       --  enabled, because the front end determines representations.
+ 
        --  Annotation is also suppressed in the case of compiling for
        --  the Java VM, since representations are largely symbolic there.
  
        if Back_End_Mode = Declarations_Only
!         and then (not Back_Annotate_Rep_Info
!                     or else Main_Kind = N_Subunit
!                     or else Targparm.Frontend_Layout_On_Target
!                     or else Hostparm.Java_VM)
        then
           Sem_Ch13.Validate_Unchecked_Conversions;
           Errout.Finalize;
*************** begin
*** 604,612 ****
           return;
        end if;
  
!       --  Ensure that we properly register a dependency on system.ads,
!       --  since even if we do not semantically depend on this, Targparm
!       --  has read system parameters from the system.ads file.
  
        Lib.Writ.Ensure_System_Dependency;
  
--- 611,619 ----
           return;
        end if;
  
!       --  Ensure that we properly register a dependency on system.ads, since
!       --  even if we do not semantically depend on this, Targparm has read
!       --  system parameters from the system.ads file.
  
        Lib.Writ.Ensure_System_Dependency;
  
*************** begin
*** 632,653 ****
  
        Back_End.Call_Back_End (Back_End_Mode);
  
!       --  Once the backend is complete, we unlock the names table. This
!       --  call allows a few extra entries, needed for example for the file
!       --  name for the library file output.
  
        Namet.Unlock;
  
!       --  Validate unchecked conversions (using the values for size
!       --  and alignment annotated by the backend where possible).
  
        Sem_Ch13.Validate_Unchecked_Conversions;
  
!       --  Now we complete output of errors, rep info and the tree info.
!       --  These are delayed till now, since it is perfectly possible for
!       --  gigi to generate errors, modify the tree (in particular by setting
!       --  flags indicating that elaboration is required, and also to back
!       --  annotate representation information for List_Rep_Info.
  
        Errout.Finalize;
        List_Rep_Info;
--- 639,660 ----
  
        Back_End.Call_Back_End (Back_End_Mode);
  
!       --  Once the backend is complete, we unlock the names table. This call
!       --  allows a few extra entries, needed for example for the file name for
!       --  the library file output.
  
        Namet.Unlock;
  
!       --  Validate unchecked conversions (using the values for size and
!       --  alignment annotated by the backend where possible).
  
        Sem_Ch13.Validate_Unchecked_Conversions;
  
!       --  Now we complete output of errors, rep info and the tree info. These
!       --  are delayed till now, since it is perfectly possible for gigi to
!       --  generate errors, modify the tree (in particular by setting flags
!       --  indicating that elaboration is required, and also to back annotate
!       --  representation information for List_Rep_Info.
  
        Errout.Finalize;
        List_Rep_Info;
*************** begin
*** 663,673 ****
  
        Write_ALI (Object => (Back_End_Mode = Generate_Object));
  
!       --  Generate the ASIS tree after writing the ALI file, since in
!       --  ASIS mode, Write_ALI may in fact result in further tree
!       --  decoration from the original tree file. Note that we dump
!       --  the tree just before generating it, so that the dump will
!       --  exactly reflect what is written out.
  
        Treepr.Tree_Dump;
        Tree_Gen;
--- 670,680 ----
  
        Write_ALI (Object => (Back_End_Mode = Generate_Object));
  
!       --  Generate the ASIS tree after writing the ALI file, since in ASIS
!       --  mode, Write_ALI may in fact result in further tree decoration from
!       --  the original tree file. Note that we dump the tree just before
!       --  generating it, so that the dump will exactly reflect what is written
!       --  out.
  
        Treepr.Tree_Dump;
        Tree_Gen;
*************** begin
*** 690,697 ****
  
        when Storage_Error =>
  
!          --  Assume this is a bug. If it is real, the message will in
!          --  any case say Storage_Error, giving a strong hint!
  
           Comperr.Compiler_Abort ("Storage_Error");
     end;
--- 697,704 ----
  
        when Storage_Error =>
  
!          --  Assume this is a bug. If it is real, the message will in any case
!          --  say Storage_Error, giving a strong hint!
  
           Comperr.Compiler_Abort ("Storage_Error");
     end;
diff -Nrcpad gcc-3.4.3/gcc/ada/gnat_rm.texi gcc-4.0.0/gcc/ada/gnat_rm.texi
*** gcc-3.4.3/gcc/ada/gnat_rm.texi	Wed Jun  9 09:20:43 2004
--- gcc-4.0.0/gcc/ada/gnat_rm.texi	Thu Feb 10 13:57:20 2005
***************
*** 8,14 ****
  @c                                                                            o
  @c                              G N A T _ RM                                  o
  @c                                                                            o
! @c              Copyright (C) 1995-2003 Free Software Foundation              o
  @c                                                                            o
  @c                                                                            o
  @c  GNAT is maintained by Ada Core Technologies Inc (http://www.gnat.com).    o
--- 8,14 ----
  @c                                                                            o
  @c                              G N A T _ RM                                  o
  @c                                                                            o
! @c              Copyright (C) 1995-2004 Free Software Foundation              o
  @c                                                                            o
  @c                                                                            o
  @c  GNAT is maintained by Ada Core Technologies Inc (http://www.gnat.com).    o
***************
*** 16,22 ****
--- 16,26 ----
  @c oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
  
  @setfilename gnat_rm.info
+ 
+ @set FSFEDITION
+ 
  @settitle GNAT Reference Manual
+ 
  @setchapternewpage odd
  @syncodeindex fn cp
  
*************** GNAT Reference Manual
*** 62,86 ****
  
  @noindent
  GNAT, The GNU Ada 95 Compiler@*
! Version @value{gnat_version}@*
! Document revision level $Revision: 1.13.16.1 $@*
! Date: $Date: 2004/06/09 09:20:43 $
  
  @noindent
  Ada Core Technologies, Inc.
  
- @noindent
- Copyright @copyright{} 1995-2003, Free Software Foundation
- 
- @noindent
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.1
- or any later version published by the Free Software Foundation;
- with the Invariant Sections being ``GNU Free Documentation License'', with the
- Front-Cover Texts being ``GNAT Reference Manual'', and with no Back-Cover
- Texts. A copy of the license is included in the section entitled ``GNU
- Free Documentation License''.
- 
  @menu
  * About This Guide::
  * Implementation Defined Pragmas::
--- 66,76 ----
  
  @noindent
  GNAT, The GNU Ada 95 Compiler@*
! GCC version @value{version-GCC}@*
  
  @noindent
  Ada Core Technologies, Inc.
  
  @menu
  * About This Guide::
  * Implementation Defined Pragmas::
*************** Free Documentation License''.
*** 96,101 ****
--- 86,92 ----
  * Specialized Needs Annexes::
  * Implementation of Specific Ada Features::
  * Project File Reference::
+ * Obsolescent Features::
  * GNU Free Documentation License::
  * Index::
  
*************** Implementation Defined Pragmas
*** 126,131 ****
--- 117,123 ----
  * Pragma CPP_Virtual::
  * Pragma CPP_Vtable::
  * Pragma Debug::
+ * Pragma Detect_Blocking::
  * Pragma Elaboration_Checks::
  * Pragma Eliminate::
  * Pragma Export_Exception::
*************** Implementation Defined Pragmas
*** 165,175 ****
  * Pragma Obsolescent::
  * Pragma Passive::
  * Pragma Polling::
  * Pragma Propagate_Exceptions::
  * Pragma Psect_Object::
  * Pragma Pure_Function::
- * Pragma Ravenscar::
- * Pragma Restricted_Run_Time::
  * Pragma Restriction_Warnings::
  * Pragma Source_File_Name::
  * Pragma Source_File_Name_Project::
--- 157,167 ----
  * Pragma Obsolescent::
  * Pragma Passive::
  * Pragma Polling::
+ * Pragma Profile (Ravenscar)::
+ * Pragma Profile (Restricted)::
  * Pragma Propagate_Exceptions::
  * Pragma Psect_Object::
  * Pragma Pure_Function::
  * Pragma Restriction_Warnings::
  * Pragma Source_File_Name::
  * Pragma Source_File_Name_Project::
*************** Implementation Defined Attributes
*** 216,221 ****
--- 208,214 ----
  * Enum_Rep::
  * Epsilon::
  * Fixed_Value::
+ * Has_Access_Values::
  * Has_Discriminants::
  * Img::
  * Integer_Value::
*************** The Implementation of Standard I/O
*** 255,260 ****
--- 248,254 ----
  * Sequential_IO::
  * Text_IO::
  * Wide_Text_IO::
+ * Wide_Wide_Text_IO::
  * Stream_IO::
  * Shared Files::
  * Open Modes::
*************** The GNAT Library
*** 266,271 ****
--- 260,267 ----
  * Ada.Characters.Latin_9 (a-chlat9.ads)::
  * Ada.Characters.Wide_Latin_1 (a-cwila1.ads)::
  * Ada.Characters.Wide_Latin_9 (a-cwila9.ads)::
+ * Ada.Characters.Wide_Wide_Latin_1 (a-czila1.ads)::
+ * Ada.Characters.Wide_Wide_Latin_9 (a-czila9.ads)::
  * Ada.Command_Line.Remove (a-colire.ads)::
  * Ada.Command_Line.Environment (a-colien.ads)::
  * Ada.Direct_IO.C_Streams (a-diocst.ads)::
*************** The GNAT Library
*** 275,282 ****
--- 271,280 ----
  * Ada.Streams.Stream_IO.C_Streams (a-ssicst.ads)::
  * Ada.Strings.Unbounded.Text_IO (a-suteio.ads)::
  * Ada.Strings.Wide_Unbounded.Wide_Text_IO (a-swuwti.ads)::
+ * Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO (a-szuzti.ads)::
  * Ada.Text_IO.C_Streams (a-tiocst.ads)::
  * Ada.Wide_Text_IO.C_Streams (a-wtcstr.ads)::
+ * Ada.Wide_Wide_Text_IO.C_Streams (a-ztcstr.ads)::
  * GNAT.Array_Split (g-arrspl.ads)::
  * GNAT.AWK (g-awk.ads)::
  * GNAT.Bounded_Buffers (g-boubuf.ads)::
*************** The GNAT Library
*** 316,322 ****
  * GNAT.Memory_Dump (g-memdum.ads)::
  * GNAT.Most_Recent_Exception (g-moreex.ads)::
  * GNAT.OS_Lib (g-os_lib.ads)::
! * GNAT.Perfect_Hash.Generators (g-pehage.ads)::
  * GNAT.Regexp (g-regexp.ads)::
  * GNAT.Registry (g-regist.ads)::
  * GNAT.Regpat (g-regpat.ads)::
--- 314,320 ----
  * GNAT.Memory_Dump (g-memdum.ads)::
  * GNAT.Most_Recent_Exception (g-moreex.ads)::
  * GNAT.OS_Lib (g-os_lib.ads)::
! * GNAT.Perfect_Hash_Generators (g-pehage.ads)::
  * GNAT.Regexp (g-regexp.ads)::
  * GNAT.Registry (g-regist.ads)::
  * GNAT.Regpat (g-regpat.ads)::
*************** The GNAT Library
*** 339,344 ****
--- 337,343 ----
  * GNAT.Traceback (g-traceb.ads)::
  * GNAT.Traceback.Symbolic (g-trasym.ads)::
  * GNAT.Wide_String_Split (g-wistsp.ads)::
+ * GNAT.Wide_Wide_String_Split (g-zistsp.ads)::
  * Interfaces.C.Extensions (i-cexten.ads)::
  * Interfaces.C.Streams (i-cstrea.ads)::
  * Interfaces.CPP (i-cpp.ads)::
*************** The GNAT Library
*** 353,358 ****
--- 352,359 ----
  * System.Assertions (s-assert.ads)::
  * System.Memory (s-memory.ads)::
  * System.Partition_Interface (s-parint.ads)::
+ * System.Restrictions (s-restri.ads)::
+ * System.Rident (s-rident.ads)::
  * System.Task_Info (s-tasinf.ads)::
  * System.Wch_Cnv (s-wchcnv.ads)::
  * System.Wch_Con (s-wchcon.ads)::
*************** Wide_Text_IO
*** 371,376 ****
--- 372,382 ----
  * Wide_Text_IO Stream Pointer Positioning::
  * Wide_Text_IO Reading and Writing Non-Regular Files::
  
+ Wide_Wide_Text_IO
+ 
+ * Wide_Wide_Text_IO Stream Pointer Positioning::
+ * Wide_Wide_Text_IO Reading and Writing Non-Regular Files::
+ 
  Interfacing to Other Languages
  
  * Interfacing to C::
*************** Implementation of Specific Ada Features
*** 386,394 ****
--- 392,403 ----
  * GNAT Implementation of Tasking::
  * GNAT Implementation of Shared Passive Packages::
  * Code Generation for Array Aggregates::
+ * The Size of Discriminated Records with Default Discriminants::
  
  Project File Reference
  
+ Obsolescent Features
+ 
  GNU Free Documentation License
  
  Index
*************** Index
*** 399,409 ****
--- 408,428 ----
  @node About This Guide
  @unnumbered About This Guide
  
+ @ifclear PROEDITION
  @noindent
  This manual contains useful information in writing programs using the
  GNAT compiler.  It includes information on implementation dependent
  characteristics of GNAT, including all the information required by Annex
  M of the standard.
+ @end ifclear
+ 
+ @ifset PROEDITION
+ @noindent
+ This manual contains useful information in writing programs using the
+ GNAT Pro compiler.  It includes information on implementation dependent
+ characteristics of GNAT Pro, including all the information required by Annex
+ M of the standard.
+ @end ifset
  
  Ada 95 is designed to be highly portable.
  In general, a program will have the same effect even when compiled by
*************** may be non-portable.  You should follow 
*** 419,424 ****
--- 438,448 ----
  isolate and clearly document any sections of your program that make use
  of these features in a non-portable manner.
  
+ @ifset PROEDITION
+ For ease of exposition, ``GNAT Pro'' will be referred to simply as
+ ``GNAT'' in the remainder of this document.
+ @end ifset
+ 
  @menu
  * What This Reference Manual Contains::
  * Conventions::
*************** other features.
*** 492,497 ****
--- 516,527 ----
  @ref{Project File Reference}, presents the syntax and semantics
  of project files.
  
+ @item
+ @ref{Obsolescent Features} documents implementation dependent features,
+ including pragmas and attributes, which are considered obsolescent, since
+ there are other preferred ways of achieving the same results. These
+ obsolescent forms are retained for backwards compatibilty.
+ 
  @end itemize
  
  @cindex Ada 95 ISO/ANSI Standard
*************** consideration, the use of these pragmas 
*** 614,619 ****
--- 644,650 ----
  * Pragma CPP_Virtual::
  * Pragma CPP_Vtable::
  * Pragma Debug::
+ * Pragma Detect_Blocking::
  * Pragma Elaboration_Checks::
  * Pragma Eliminate::
  * Pragma Export_Exception::
*************** consideration, the use of these pragmas 
*** 653,663 ****
  * Pragma Obsolescent::
  * Pragma Passive::
  * Pragma Polling::
  * Pragma Propagate_Exceptions::
  * Pragma Psect_Object::
  * Pragma Pure_Function::
- * Pragma Ravenscar::
- * Pragma Restricted_Run_Time::
  * Pragma Restriction_Warnings::
  * Pragma Source_File_Name::
  * Pragma Source_File_Name_Project::
--- 684,694 ----
  * Pragma Obsolescent::
  * Pragma Passive::
  * Pragma Polling::
+ * Pragma Profile (Ravenscar)::
+ * Pragma Profile (Restricted)::
  * Pragma Propagate_Exceptions::
  * Pragma Psect_Object::
  * Pragma Pure_Function::
  * Pragma Restriction_Warnings::
  * Pragma Source_File_Name::
  * Pragma Source_File_Name_Project::
*************** pragma). As an example of the use of thi
*** 1099,1105 ****
  which used Fortran77 as the identifier for Fortran. Then the pragma:
  
  @smallexample @c ada
! pragma Convention_Indentifier (Fortran77, Fortran);
  @end smallexample
  
  @noindent
--- 1130,1136 ----
  which used Fortran77 as the identifier for Fortran. Then the pragma:
  
  @smallexample @c ada
! pragma Convention_Identifier (Fortran77, Fortran);
  @end smallexample
  
  @noindent
*************** with a terminating semicolon.  Pragmas a
*** 1312,1317 ****
--- 1343,1363 ----
  declarations, so you can use pragma @code{Debug} to intersperse calls to
  debug procedures in the middle of declarations.
  
+ @node Pragma Detect_Blocking
+ @unnumberedsec Pragma Detect_Blocking
+ @findex Detect_Blocking
+ @noindent
+ Syntax:
+ 
+ @smallexample @c ada
+ pragma Detect_Blocking;
+ @end smallexample
+ 
+ @noindent
+ This is a configuration pragma that forces the detection of potentially
+ blocking operations within a protected operation, and to raise Program_Error
+ if that happens.
+ 
  @node Pragma Elaboration_Checks
  @unnumberedsec Pragma Elaboration_Checks
  @cindex Elaboration control
*************** debug procedures in the middle of declar
*** 1320,1335 ****
  Syntax:
  
  @smallexample @c ada
! pragma Elaboration_Checks (RM | Static);
  @end smallexample
  
  @noindent
  This is a configuration pragma that provides control over the
  elaboration model used by the compilation affected by the
! pragma.  If the parameter is RM, then the dynamic elaboration
  model described in the Ada Reference Manual is used, as though
  the @code{-gnatE} switch had been specified on the command
! line.  If the parameter is Static, then the default GNAT static
  model is used.  This configuration pragma overrides the setting
  of the command line.  For full details on the elaboration models
  used by the GNAT compiler, see section ``Elaboration Order
--- 1366,1382 ----
  Syntax:
  
  @smallexample @c ada
! pragma Elaboration_Checks (Dynamic | Static);
  @end smallexample
  
  @noindent
  This is a configuration pragma that provides control over the
  elaboration model used by the compilation affected by the
! pragma.  If the parameter is @code{Dynamic},
! then the dynamic elaboration
  model described in the Ada Reference Manual is used, as though
  the @code{-gnatE} switch had been specified on the command
! line.  If the parameter is @code{Static}, then the default GNAT static
  model is used.  This configuration pragma overrides the setting
  of the command line.  For full details on the elaboration models
  used by the GNAT compiler, see section ``Elaboration Order
*************** pragma Eliminate (
*** 1353,1370 ****
      [Entity          =>]  IDENTIFIER |
                            SELECTED_COMPONENT |
                            STRING_LITERAL
!   [,[Parameter_Types =>]  PARAMETER_TYPES]
!   [,[Result_Type     =>]  result_SUBTYPE_NAME]
!   [,[Homonym_Number  =>]  INTEGER_LITERAL]);
  
  PARAMETER_TYPES ::= (SUBTYPE_NAME @{, SUBTYPE_NAME@})
! SUBTYPE_NAME    ::= STRING_LITERAL
  @end smallexample
  
  @noindent
  This pragma indicates that the given entity is not used outside the
! compilation unit it is defined in.  The entity may be either a subprogram
! or a variable.
  
  If the entity to be eliminated is a library level subprogram, then
  the first form of pragma @code{Eliminate} is used with only a single argument.
--- 1400,1432 ----
      [Entity          =>]  IDENTIFIER |
                            SELECTED_COMPONENT |
                            STRING_LITERAL
!     [,OVERLOADING_RESOLUTION]);
! 
! OVERLOADING_RESOLUTION ::= PARAMETER_AND_RESULT_TYPE_PROFILE |
!                            SOURCE_LOCATION
! 
! PARAMETER_AND_RESULT_TYPE_PROFILE ::= PROCEDURE_PROFILE |
!                                       FUNCTION_PROFILE
! 
! PROCEDURE_PROFILE ::= Parameter_Types => PARAMETER_TYPES
! 
! FUNCTION_PROFILE ::= [Parameter_Types => PARAMETER_TYPES,]
!                       Result_Type => result_SUBTYPE_NAME]
  
  PARAMETER_TYPES ::= (SUBTYPE_NAME @{, SUBTYPE_NAME@})
! SUBTYPE_NAME    ::= STRING_VALUE
! 
! SOURCE_LOCATION ::= Source_Location => SOURCE_TRACE
! SOURCE_TRACE    ::= STRING_VALUE
! 
! STRING_VALUE ::= STRING_LITERAL @{& STRING_LITERAL@}
  @end smallexample
  
  @noindent
  This pragma indicates that the given entity is not used outside the
! compilation unit it is defined in. The entity must be an explicitly declared
! subprogram; this includes  generic subprogram instances and
! subprograms declared in generic package instances.
  
  If the entity to be eliminated is a library level subprogram, then
  the first form of pragma @code{Eliminate} is used with only a single argument.
*************** the particular entity.  If the second ar
*** 1378,1406 ****
  correspond to the internal manner in which GNAT stores entity names (see
  compilation unit Namet in the compiler sources for details).
  
! The remaining parameters are optionally used to distinguish
! between overloaded subprograms.  There are two ways of doing this.
  
! Use @code{Parameter_Types} and @code{Result_Type} to specify the
! profile of the subprogram to be eliminated in a manner similar to that
! used for
! the extended @code{Import} and @code{Export} pragmas, except that the
! subtype names are always given as string literals, again corresponding
! to the internal manner in which GNAT stores entity names.
  
! Alternatively, the @code{Homonym_Number} parameter is used to specify
! which overloaded alternative is to be eliminated.  A value of 1 indicates
! the first subprogram (in lexical order), 2 indicates the second etc.
  
  The effect of the pragma is to allow the compiler to eliminate
  the code or data associated with the named entity.  Any reference to
  an eliminated entity outside the compilation unit it is defined in,
  causes a compile time or link time error.
  
- The parameters of this pragma may be given in any order, as long as
- the usual rules for use of named parameters and position parameters
- are used.
- 
  The intention of pragma @code{Eliminate} is to allow a program to be compiled
  in a system independent manner, with unused entities eliminated, without
  the requirement of modifying the source text.  Normally the required set
--- 1440,1494 ----
  correspond to the internal manner in which GNAT stores entity names (see
  compilation unit Namet in the compiler sources for details).
  
! The remaining parameters (OVERLOADING_RESOLUTION) are optionally used
! to distinguish between overloaded subprograms. If a pragma does not contain
! the OVERLOADING_RESOLUTION parameter(s), it is applied to all the overloaded
! subprograms denoted by the first two parameters.
  
! Use PARAMETER_AND_RESULT_TYPE_PROFILE to specify the profile of the subprogram
! to be eliminated in a manner similar to that used for the extended
! @code{Import} and @code{Export} pragmas, except that the subtype names are
! always given as strings. At the moment, this form of distinguishing
! overloaded subprograms is implemented only partially, so we do not recommend
! using it for practical subprogram elimination.
  
! Note, that in case of a parameterless procedure its profile is represented
! as @code{Parameter_Types => ("")}
! 
! Alternatively, the @code{Source_Location} parameter is used to specify
! which overloaded alternative is to be eliminated by pointing to the
! location of the DEFINING_PROGRAM_UNIT_NAME of this subprogram in the
! source text. The string literal (or concatenation of string literals)
! given as SOURCE_TRACE must have the following format:
! 
! @smallexample @c ada
! SOURCE_TRACE ::= SOURCE_LOCATION@{LBRACKET SOURCE_LOCATION RBRACKET@}
! 
! LBRACKET ::= [
! RBRACKET ::= ]
! 
! SOURCE_LOCATION ::= FILE_NAME:LINE_NUMBER
! FILE_NAME       ::= STRING_LITERAL
! LINE_NUMBER     ::= DIGIT @{DIGIT@}
! @end smallexample
! 
! SOURCE_TRACE should be the short name of the source file (with no directory
! information), and LINE_NUMBER is supposed to point to the line where the
! defining name of the subprogram is located.
! 
! For the subprograms that are not a part of generic instantiations, only one
! SOURCE_LOCATION is used. If a subprogram is declared in a package
! instantiation, SOURCE_TRACE contains two SOURCE_LOCATIONs, the first one is
! the location of the (DEFINING_PROGRAM_UNIT_NAME of the) instantiation, and the
! second one denotes the declaration of the corresponding subprogram in the
! generic package. This approach is recursively used to create SOURCE_LOCATIONs
! in case of nested instantiations.
  
  The effect of the pragma is to allow the compiler to eliminate
  the code or data associated with the named entity.  Any reference to
  an eliminated entity outside the compilation unit it is defined in,
  causes a compile time or link time error.
  
  The intention of pragma @code{Eliminate} is to allow a program to be compiled
  in a system independent manner, with unused entities eliminated, without
  the requirement of modifying the source text.  Normally the required set
*************** Note that the reason this pragma takes s
*** 1412,1417 ****
--- 1500,1509 ----
  be expected is that a pragma @code{Eliminate} can appear in a context where the
  relevant names are not visible.
  
+ Note that any change in the source files that includes removing, splitting of
+ adding lines may make the set of Eliminate pragmas using SOURCE_LOCATION
+ parameter illegal.
+ 
  @node Pragma Export_Exception
  @unnumberedsec Pragma Export_Exception
  @cindex OpenVMS
*************** as will any declaration of a scalar vari
*** 2169,2177 ****
  whether the variable is initialized may also depend on whether the package
  in which the type of the variable is declared is compiled with the pragma.
  
! The other important difference is that there is control over the value used
! for initializing scalar objects.  At bind time, you can select whether to
! initialize with invalid values (like Normalize_Scalars), or with high or
  low values, or with a specified bit pattern.  See the users guide for binder
  options for specifying these cases.
  
--- 2261,2273 ----
  whether the variable is initialized may also depend on whether the package
  in which the type of the variable is declared is compiled with the pragma.
  
! The other important difference is that you can control the value used
! for initializing scalar objects.  At bind time, you can select several
! options for initialization. You can
! initialize with invalid values (similar to Normalize_Scalars, though for
! Initialize_Scalars it is not always possible to determine the invalid
! values in complex cases like signed component fields with non-standard
! sizes). You can also initialize with high or
  low values, or with a specified bit pattern.  See the users guide for binder
  options for specifying these cases.
  
*************** behavior depends on the choice.  Of cour
*** 2182,2187 ****
--- 2278,2287 ----
  and if it does, then most likely you have an erroneous reference to an
  uninitialized value.
  
+ It is even possible to change the value at execution time eliminating even
+ the need to rebind with a different switch using an environment variable.
+ See the GNAT users guide for details.
+ 
  Note that pragma @code{Initialize_Scalars} is particularly useful in
  conjunction with the enhanced validity checking that is now provided
  in GNAT, which checks for invalid values under more conditions.
*************** users guide) in conjunction with pragma 
*** 2190,2195 ****
--- 2290,2302 ----
  provides a powerful new tool to assist in the detection of problems
  caused by uninitialized variables.
  
+ Note: the use of @code{Initialize_Scalars} has a fairly extensive
+ effect on the generated code. This may cause your code to be
+ substantially larger. It may also cause an increase in the amount
+ of stack required, so it is probably a good idea to turn on stack
+ checking (see description of stack checking in the GNAT users guide)
+ when using this pragma.
+ 
  @node Pragma Inline_Always
  @unnumberedsec Pragma Inline_Always
  @findex Inline_Always
*************** are as follows:
*** 2642,2686 ****
  @item Standard.Character
  @noindent
  Objects whose root type is Standard.Character are initialized to
! Character'Last.  This will be out of range of the subtype only if
! the subtype range excludes this value.
  
  @item Standard.Wide_Character
  @noindent
  Objects whose root type is Standard.Wide_Character are initialized to
! Wide_Character'Last.  This will be out of range of the subtype only if
! the subtype range excludes this value.
  
  @item Integer types
  @noindent
! Objects of an integer type are initialized to base_type'First, where
! base_type is the base type of the object type.  This will be out of range
! of the subtype only if the subtype range excludes this value.  For example,
! if you declare the subtype:
  
! @smallexample @c ada
! subtype Ityp is integer range 1 .. 10;
! @end smallexample
  
! @noindent
! then objects of type x will be initialized to Integer'First, a negative
! number that is certainly outside the range of subtype @code{Ityp}.
  
! @item Real types
! Objects of all real types (fixed and floating) are initialized to
! base_type'First, where base_Type is the base type of the object type.
! This will be out of range of the subtype only if the subtype range
! excludes this value.
  
  @item Modular types
! Objects of a modular type are initialized to typ'Last.  This will be out
! of range of the subtype only if the subtype excludes this value.
  
  @item Enumeration types
  Objects of an enumeration type are initialized to all one-bits, i.e.@: to
! the value @code{2 ** typ'Size - 1}.  This will be out of range of the
! enumeration subtype in all cases except where the subtype contains
! exactly 2**8, 2**16, or 2**32 elements.
  
  @end table
  
--- 2749,2808 ----
  @item Standard.Character
  @noindent
  Objects whose root type is Standard.Character are initialized to
! Character'Last unless the subtype range excludes NUL (in which case
! NUL is used). This choice will always generate an invalid value if
! one exists.
  
  @item Standard.Wide_Character
  @noindent
  Objects whose root type is Standard.Wide_Character are initialized to
! Wide_Character'Last unless the subtype range excludes NUL (in which case
! NUL is used). This choice will always generate an invalid value if
! one exists.
! 
! @item Standard.Wide_Wide_Character
! @noindent
! Objects whose root type is Standard.Wide_Wide_Character are initialized to
! the invalid value 16#FFFF_FFFF# unless the subtype range excludes NUL (in
! which case NUL is used). This choice will always generate an invalid value if
! one exists.
  
  @item Integer types
  @noindent
! Objects of an integer type are treated differently depending on whether
! negative values are present in the subtype. If no negative values are
! present, then all one bits is used as the initial value except in the
! special case where zero is excluded from the subtype, in which case
! all zero bits are used. This choice will always generate an invalid
! value if one exists.
  
! For subtypes with negative values present, the largest negative number
! is used, except in the unusual case where this largest negative number
! is in the subtype, and the largest positive number is not, in which case
! the largest positive value is used. This choice will always generate
! an invalid value if one exists.
  
! @item Floating-Point Types
! Objects of all floating-point types are initialized to all 1-bits. For
! standard IEEE format, this corresponds to a NaN (not a number) which is
! indeed an invalid value.
  
! @item Fixed-Point Types
! Objects of all fixed-point types are treated as described above for integers,
! with the rules applying to the underlying integer value used to represent
! the fixed-point value.
  
  @item Modular types
! Objects of a modular type are initialized to all one bits, except in
! the special case where zero is excluded from the subtype, in which
! case all zero bits are used. This choice will always generate an
! invalid value if one exists.
  
  @item Enumeration types
  Objects of an enumeration type are initialized to all one-bits, i.e.@: to
! the value @code{2 ** typ'Size - 1} unless the subtype excludes the literal
! whose Pos value is zero, in which case a code of zero is used. This choice
! will always generate an invalid value if one exists.
  
  @end table
  
*************** to test for an abort condition.
*** 2770,2775 ****
--- 2892,3075 ----
  Note that polling can also be enabled by use of the @code{-gnatP} switch.  See
  the @cite{GNAT User's Guide} for details.
  
+ @node Pragma Profile (Ravenscar)
+ @unnumberedsec Pragma Profile (Ravenscar)
+ @findex Ravenscar
+ @noindent
+ Syntax:
+ 
+ @smallexample @c ada
+ pragma Profile (Ravenscar);
+ @end smallexample
+ 
+ @noindent
+ A configuration pragma that establishes the following set of configuration
+ pragmas:
+ 
+ @table @code
+ @item Task_Dispatching_Policy (FIFO_Within_Priorities)
+ [RM D.2.2] Tasks are dispatched following a preemptive
+ priority-ordered scheduling policy.
+ 
+ @item Locking_Policy (Ceiling_Locking)
+ [RM D.3] While tasks and interrupts execute a protected action, they inherit
+ the ceiling priority of the corresponding protected object.
+ @c
+ @c @item Detect_Blocking
+ @c This pragma forces the detection of potentially blocking operations within a
+ @c protected operation, and to raise Program_Error if that happens.
+ @end table
+ @noindent
+ 
+ plus the following set of restrictions:
+ 
+ @table @code
+ @item Max_Entry_Queue_Length = 1
+ Defines the maximum number of calls that are queued on a (protected) entry.
+ Note that this restrictions is checked at run time. Violation of this
+ restriction results in the raising of Program_Error exception at the point of
+ the call. For the Profile (Ravenscar) the value of Max_Entry_Queue_Length is
+ always 1 and hence no task can be queued on a protected entry.
+ 
+ @item Max_Protected_Entries = 1
+ [RM D.7] Specifies the maximum number of entries per protected type. The
+ bounds of every entry family of a protected unit shall be static, or shall be
+ defined by a discriminant of a subtype whose corresponding bound is static.
+ For the Profile (Ravenscar) the value of Max_Protected_Entries is always 1.
+ 
+ @item Max_Task_Entries = 0
+ [RM D.7] Specifies the maximum number of entries
+ per task.  The bounds of every entry family
+ of a task unit shall be static, or shall be
+ defined by a discriminant of a subtype whose
+ corresponding bound is static.  A value of zero
+ indicates that no rendezvous are possible.  For
+ the Profile (Ravenscar), the value of Max_Task_Entries is always
+ 0 (zero).
+ 
+ @item No_Abort_Statements
+ [RM D.7] There are no abort_statements, and there are
+ no calls to Task_Identification.Abort_Task.
+ 
+ @item No_Asynchronous_Control
+ [RM D.7] There are no semantic dependences on the package
+ Asynchronous_Task_Control.
+ 
+ @item No_Calendar
+ There are no semantic dependencies on the package Ada.Calendar.
+ 
+ @item No_Dynamic_Attachment
+ There is no call to any of the operations defined in package Ada.Interrupts
+ (Is_Reserved, Is_Attached, Current_Handler, Attach_Handler, Exchange_Handler,
+ Detach_Handler, and Reference).
+ 
+ @item No_Dynamic_Priorities
+ [RM D.7] There are no semantic dependencies on the package Dynamic_Priorities.
+ 
+ @item No_Implicit_Heap_Allocations
+ [RM D.7] No constructs are allowed to cause implicit heap allocation.
+ 
+ @item No_Local_Protected_Objects
+ Protected objects and access types that designate
+ such objects shall be declared only at library level.
+ 
+ @item No_Protected_Type_Allocators
+ There are no allocators for protected types or
+ types containing protected subcomponents.
+ 
+ @item No_Relative_Delay
+ There are no delay_relative statements.
+ 
+ @item No_Requeue_Statements
+ Requeue statements are not allowed.
+ 
+ @item No_Select_Statements
+ There are no select_statements.
+ 
+ @item No_Task_Allocators
+ [RM D.7] There are no allocators for task types
+ or types containing task subcomponents.
+ 
+ @item No_Task_Attributes_Package
+ There are no semantic dependencies on the Ada.Task_Attributes package.
+ 
+ @item No_Task_Hierarchy
+ [RM D.7] All (non-environment) tasks depend
+ directly on the environment task of the partition.
+ 
+ @item No_Task_Termination
+ Tasks which terminate are erroneous.
+ 
+ @item Simple_Barriers
+ Entry barrier condition expressions shall be either static
+ boolean expressions or boolean objects which are declared in
+ the protected type which contains the entry.
+ @end table
+ 
+ @noindent
+ This set of configuration pragmas and restrictions correspond to the
+ definition of the ``Ravenscar Profile'' for limited tasking, devised and
+ published by the @cite{International Real-Time Ada Workshop}, 1997,
+ and whose most recent description is available at
+ @url{ftp://ftp.openravenscar.org/openravenscar/ravenscar00.pdf}.
+ 
+ The original definition of the profile was revised at subsequent IRTAW
+ meetings. It has been included in the ISO
+ @cite{Guide for the Use of the Ada Programming Language in High
+ Integrity Systems}, and has been approved by ISO/IEC/SC22/WG9 for inclusion in
+ the next revision of the standard. The formal definition given by
+ the Ada Rapporteur Group (ARG) can be found in two Ada Issues (AI-249 and
+ AI-305) available at
+ @url{http://www.ada-auth.org/cgi-bin/cvsweb.cgi/AIs/AI-00249.TXT} and
+ @url{http://www.ada-auth.org/cgi-bin/cvsweb.cgi/AIs/AI-00305.TXT}
+ respectively.
+ 
+ The above set is a superset of the restrictions provided by pragma
+ @code{Profile (Restricted)}, it includes six additional restrictions
+ (@code{Simple_Barriers}, @code{No_Select_Statements},
+ @code{No_Calendar}, @code{No_Implicit_Heap_Allocations},
+ @code{No_Relative_Delay} and @code{No_Task_Termination}).  This means
+ that pragma @code{Profile (Ravenscar)}, like the pragma
+ @code{Profile (Restricted)},
+ automatically causes the use of a simplified,
+ more efficient version of the tasking run-time system.
+ 
+ @node Pragma Profile (Restricted)
+ @unnumberedsec Pragma Profile (Restricted)
+ @findex Restricted Run Time
+ @noindent
+ Syntax:
+ 
+ @smallexample @c ada
+ pragma Profile (Restricted);
+ @end smallexample
+ 
+ @noindent
+ A configuration pragma that establishes the following set of restrictions:
+ 
+ @itemize @bullet
+ @item No_Abort_Statements
+ @item No_Entry_Queue
+ @item No_Task_Hierarchy
+ @item No_Task_Allocators
+ @item No_Dynamic_Priorities
+ @item No_Terminate_Alternatives
+ @item No_Dynamic_Attachment
+ @item No_Protected_Type_Allocators
+ @item No_Local_Protected_Objects
+ @item No_Requeue_Statements
+ @item No_Task_Attributes_Package
+ @item Max_Asynchronous_Select_Nesting =  0
+ @item Max_Task_Entries =  0
+ @item Max_Protected_Entries = 1
+ @item Max_Select_Alternatives = 0
+ @end itemize
+ 
+ @noindent
+ This set of restrictions causes the automatic selection of a simplified
+ version of the run time that provides improved performance for the
+ limited set of tasking functionality permitted by this set of restrictions.
+ 
  @node Pragma Propagate_Exceptions
  @unnumberedsec Pragma Propagate_Exceptions
  @findex Propagate_Exceptions
*************** exception is any function that has at le
*** 2869,2875 ****
  considered pure by default, since the compiler assumes that the
  @code{Address} parameter may be functioning as a pointer and that the
  referenced data may change even if the address value does not.
! Similarly, imported functions are not consdered to be pure by default,
  since there is no way of checking that they are in fact pure.  The use
  of pragma @code{Pure_Function} for such a function will override these default
  assumption, and cause the compiler to treat a designated subprogram as pure
--- 3169,3175 ----
  considered pure by default, since the compiler assumes that the
  @code{Address} parameter may be functioning as a pointer and that the
  referenced data may change even if the address value does not.
! Similarly, imported functions are not considered to be pure by default,
  since there is no way of checking that they are in fact pure.  The use
  of pragma @code{Pure_Function} for such a function will override these default
  assumption, and cause the compiler to treat a designated subprogram as pure
*************** applies to the underlying renamed functi
*** 2880,3039 ****
  disambiguate cases of overloading where some but not all functions
  in a set of overloaded functions are to be designated as pure.
  
- @node Pragma Ravenscar
- @unnumberedsec Pragma Ravenscar
- @findex Ravenscar
- @noindent
- Syntax:
- 
- @smallexample @c ada
- pragma Ravenscar;
- @end smallexample
- 
- @noindent
- A configuration pragma that establishes the following set of restrictions:
- 
- @table @code
- @item No_Abort_Statements
- [RM D.7] There are no abort_statements, and there are
- no calls to Task_Identification.Abort_Task.
- 
- @item No_Select_Statements
- There are no select_statements.
- 
- @item No_Task_Hierarchy
- [RM D.7] All (non-environment) tasks depend
- directly on the environment task of the partition.
- 
- @item No_Task_Allocators
- [RM D.7] There are no allocators for task types
- or types containing task subcomponents.
- 
- @item No_Dynamic_Priorities
- [RM D.7] There are no semantic dependencies on the package Dynamic_Priorities.
- 
- @item No_Terminate_Alternatives
- [RM D.7] There are no selective_accepts with terminate_alternatives
- 
- @item No_Dynamic_Interrupts
- There are no semantic dependencies on Ada.Interrupts.
- 
- @item No_Implicit_Heap_Allocations
- [RM D.7] No constructs are allowed to cause implicit heap allocation
- 
- @item No_Protected_Type_Allocators
- There are no allocators for protected types or
- types containing protected subcomponents.
- 
- @item No_Local_Protected_Objects
- Protected objects and access types that designate
- such objects shall be declared only at library level.
- 
- @item No_Requeue
- Requeue statements are not allowed.
- 
- @item No_Calendar
- There are no semantic dependencies on the package Ada.Calendar.
- 
- @item No_Relative_Delay
- There are no delay_relative_statements.
- 
- @item No_Task_Attributes
- There are no semantic dependencies on the Ada.Task_Attributes package and
- there are no references to the attributes Callable and Terminated [RM 9.9].
- 
- @item Boolean_Entry_Barriers
- Entry barrier condition expressions shall be boolean
- objects which are declared in the protected type
- which contains the entry.
- 
- @item Max_Asynchronous_Select_Nesting = 0
- [RM D.7] Specifies the maximum dynamic nesting level of asynchronous_selects.
- A value of zero prevents the use of any asynchronous_select.
- 
- @item Max_Task_Entries = 0
- [RM D.7] Specifies the maximum number of entries
- per task.  The bounds of every entry family
- of a task unit shall be static, or shall be
- defined by a discriminant of a subtype whose
- corresponding bound is static.  A value of zero
- indicates that no rendezvous are possible.  For
- the Ravenscar pragma, the value of Max_Task_Entries is always
- 0 (zero).
- 
- @item Max_Protected_Entries = 1
- [RM D.7] Specifies the maximum number of entries per
- protected type.  The bounds of every entry family of
- a protected unit shall be static, or shall be defined
- by a discriminant of a subtype whose corresponding
- bound is static.  For the Ravenscar pragma the value of
- Max_Protected_Entries is always 1.
- 
- @item Max_Select_Alternatives = 0
- [RM D.7] Specifies the maximum number of alternatives in a selective_accept.
- For the Ravenscar pragma the value is always 0.
- 
- @item No_Task_Termination
- Tasks which terminate are erroneous.
- 
- @item No_Entry_Queue
- No task can be queued on a protected entry.  Note that this restrictions is
- checked at run time.  The violation of this restriction generates a
- Program_Error exception.
- @end table
- 
- @noindent
- This set of restrictions corresponds to the definition of the ``Ravenscar
- Profile'' for limited tasking, devised and published by the
- @cite{International Real-Time Ada Workshop}, 1997,
- and whose most recent description is available at
- @url{ftp://ftp.openravenscar.org/openravenscar/ravenscar00.pdf}.
- 
- The above set is a superset of the restrictions provided by pragma
- @code{Restricted_Run_Time}, it includes five additional restrictions
- (@code{Boolean_Entry_Barriers}, @code{No_Select_Statements},
- @code{No_Calendar},
- @code{No_Relative_Delay} and @code{No_Task_Termination}).  This means
- that pragma @code{Ravenscar}, like the pragma @code{Restricted_Run_Time},
- automatically causes the use of a simplified, more efficient version
- of the tasking run-time system.
- 
- @node Pragma Restricted_Run_Time
- @unnumberedsec Pragma Restricted_Run_Time
- @findex Restricted_Run_Time
- @noindent
- Syntax:
- 
- @smallexample @c ada
- pragma Restricted_Run_Time;
- @end smallexample
- 
- @noindent
- A configuration pragma that establishes the following set of restrictions:
- 
- @itemize @bullet
- @item No_Abort_Statements
- @item No_Entry_Queue
- @item No_Task_Hierarchy
- @item No_Task_Allocators
- @item No_Dynamic_Priorities
- @item No_Terminate_Alternatives
- @item No_Dynamic_Interrupts
- @item No_Protected_Type_Allocators
- @item No_Local_Protected_Objects
- @item No_Requeue
- @item No_Task_Attributes
- @item Max_Asynchronous_Select_Nesting =  0
- @item Max_Task_Entries =  0
- @item Max_Protected_Entries = 1
- @item Max_Select_Alternatives = 0
- @end itemize
- 
- @noindent
- This set of restrictions causes the automatic selection of a simplified
- version of the run time that provides improved performance for the
- limited set of tasking functionality permitted by this set of restrictions.
- 
  @node Pragma Restriction_Warnings
  @unnumberedsec Pragma Restriction_Warnings
  @findex Restriction_Warnings
--- 3180,3185 ----
*************** Syntax:
*** 3167,3173 ****
  pragma Stream_Convert (
    [Entity =>] type_LOCAL_NAME,
    [Read   =>] function_NAME,
!   [Write  =>] function NAME);
  @end smallexample
  
  @noindent
--- 3313,3319 ----
  pragma Stream_Convert (
    [Entity =>] type_LOCAL_NAME,
    [Read   =>] function_NAME,
!   [Write  =>] function_NAME);
  @end smallexample
  
  @noindent
*************** pragma Unreferenced (local_Name @{, loca
*** 3684,3692 ****
  
  @noindent
  This pragma signals that the entities whose names are listed are
! deliberately not referenced. This suppresses warnings about the
  entities being unreferenced, and in addition a warning will be
! generated if one of these entities is in fact referenced.
  
  This is particularly useful for clearly signaling that a particular
  parameter is not referenced in some particular subprogram implementation
--- 3830,3841 ----
  
  @noindent
  This pragma signals that the entities whose names are listed are
! deliberately not referenced in the current source unit. This
! suppresses warnings about the
  entities being unreferenced, and in addition a warning will be
! generated if one of these entities is in fact referenced in the
! same unit as the pragma (or in the corresponding body, or one
! of its subunits).
  
  This is particularly useful for clearly signaling that a particular
  parameter is not referenced in some particular subprogram implementation
*************** consideration, you should minimize the u
*** 3933,3938 ****
--- 4082,4088 ----
  * Enum_Rep::
  * Epsilon::
  * Fixed_Value::
+ * Has_Access_Values::
  * Has_Discriminants::
  * Img::
  * Integer_Value::
*************** value is a Boolean which indicates wheth
*** 4129,4135 ****
  elaborated.  This attribute is primarily intended for internal use by the
  generated code for dynamic elaboration checking, but it can also be used
  in user programs.  The value will always be True once elaboration of all
! units has been completed.
  
  @node Elab_Body
  @unnumberedsec Elab_Body
--- 4279,4286 ----
  elaborated.  This attribute is primarily intended for internal use by the
  generated code for dynamic elaboration checking, but it can also be used
  in user programs.  The value will always be True once elaboration of all
! units has been completed.  An exception is for units which need no
! elaboration, the value is always False for such units.
  
  @node Elab_Body
  @unnumberedsec Elab_Body
*************** that there are full range checks, to ens
*** 4237,4242 ****
--- 4388,4406 ----
  This attribute is primarily intended for use in implementation of the
  input-output functions for fixed-point values.
  
+ @node Has_Access_Values
+ @unnumberedsec Has_Access_Values
+ @cindex Access values, testing for
+ @findex Has_Access_Values
+ @noindent
+ The prefix of the @code{Has_Access_Values} attribute is a type.  The result
+ is a Boolean value which is True if the is an access type, or is a composite
+ type with a component (at any nesting depth) that is an access type, and is
+ False otherwise.
+ The intended use of this attribute is in conjunction with generic
+ definitions.  If the attribute is applied to a generic private type, it
+ indicates whether or not the corresponding actual type has access values.
+ 
  @node Has_Discriminants
  @unnumberedsec Has_Discriminants
  @cindex Discriminants, testing for
*************** restrictions to produce a more efficient
*** 5947,5954 ****
  @end cartouche
  GNAT currently takes advantage of these restrictions by providing an optimized
  run time when the Ravenscar profile and the GNAT restricted run time set
! of restrictions are specified.  See pragma @code{Ravenscar} and pragma
! @code{Restricted_Run_Time} for more details.
  
  @cindex Time, monotonic
  @unnumberedsec D.8(47-49): Monotonic Time
--- 6111,6118 ----
  @end cartouche
  GNAT currently takes advantage of these restrictions by providing an optimized
  run time when the Ravenscar profile and the GNAT restricted run time set
! of restrictions are specified.  See pragma @code{Profile (Ravenscar)} and
! pragma @code{Profile (Restricted)} for more details.
  
  @cindex Time, monotonic
  @unnumberedsec D.8(47-49): Monotonic Time
*************** then all compilation units in the partit
*** 6811,6826 ****
  
  @table @code
  
! @item Boolean_Entry_Barriers
! @findex Boolean_Entry_Barriers
  This restriction ensures at compile time that barriers in entry declarations
! for protected types are restricted to references to simple boolean variables
! defined in the private part of the protected type.  No other form of entry
! barriers is permitted.  This is one of the restrictions of the Ravenscar
! profile for limited tasking (see also pragma @code{Ravenscar}).
  
! @item Max_Entry_Queue_Depth => Expr
! @findex Max_Entry_Queue_Depth
  This restriction is a declaration that any protected entry compiled in
  the scope of the restriction has at most the specified number of
  tasks waiting on the entry
--- 6975,6991 ----
  
  @table @code
  
! @item Simple_Barriers
! @findex Simple_Barriers
  This restriction ensures at compile time that barriers in entry declarations
! for protected types are restricted to either static boolean expressions or
! references to simple boolean variables defined in the private part of the
! protected type.  No other form of entry barriers is permitted.  This is one
! of the restrictions of the Ravenscar profile for limited tasking (see also
! pragma @code{Profile (Ravenscar)}).
  
! @item Max_Entry_Queue_Length => Expr
! @findex Max_Entry_Queue_Length
  This restriction is a declaration that any protected entry compiled in
  the scope of the restriction has at most the specified number of
  tasks waiting on the entry
*************** explicit dependence on the package @code
*** 6835,6850 ****
  
  @item No_Direct_Boolean_Operators
  @findex No_Direct_Boolean_Operators
! This restrcition ensures that no logical (and/or/xor) or comparison
  operators are used on operands of type Boolean (or any type derived
  from Boolean). This is intended for use in safety critical programs
  where the certification protocol requires the use of short-circuit
  (and then, or else) forms for all composite boolean operations.
  
! @item No_Dynamic_Interrupts
! @findex No_Dynamic_Interrupts
! This restriction ensures at compile time that there is no attempt to
! dynamically associate interrupts.  Only static association is allowed.
  
  @item No_Enumeration_Maps
  @findex No_Enumeration_Maps
--- 7000,7015 ----
  
  @item No_Direct_Boolean_Operators
  @findex No_Direct_Boolean_Operators
! This restriction ensures that no logical (and/or/xor) or comparison
  operators are used on operands of type Boolean (or any type derived
  from Boolean). This is intended for use in safety critical programs
  where the certification protocol requires the use of short-circuit
  (and then, or else) forms for all composite boolean operations.
  
! @item No_Dynamic_Attachment
! @findex No_Dynamic_Attachment
! This restriction ensures that there is no call to any of the operations
! defined in package Ada.Interrupts.
  
  @item No_Enumeration_Maps
  @findex No_Enumeration_Maps
*************** of exceptions when they are declared.
*** 6891,6897 ****
  This restriction ensures that the generated code does not contain any
  implicit conditionals, either by modifying the generated code where possible,
  or by rejecting any construct that would otherwise generate an implicit
! conditional.
  
  @item No_Implicit_Dynamic_Code
  @findex No_Implicit_Dynamic_Code
--- 7056,7065 ----
  This restriction ensures that the generated code does not contain any
  implicit conditionals, either by modifying the generated code where possible,
  or by rejecting any construct that would otherwise generate an implicit
! conditional. Note that this check does not include run time constraint
! checks, which on some targets may generate implicit conditionals as
! well. To control the latter, constraint checks can be suppressed in the
! normal manner.
  
  @item No_Implicit_Dynamic_Code
  @findex No_Implicit_Dynamic_Code
*************** on some targets.
*** 6940,6946 ****
  This restriction ensures at compile time no select statements of any kind
  are permitted, that is the keyword @code{select} may not appear.
  This is one of the restrictions of the Ravenscar
! profile for limited tasking (see also pragma @code{Ravenscar}).
  
  @item No_Standard_Storage_Pools
  @findex No_Standard_Storage_Pools
--- 7108,7114 ----
  This restriction ensures at compile time no select statements of any kind
  are permitted, that is the keyword @code{select} may not appear.
  This is one of the restrictions of the Ravenscar
! profile for limited tasking (see also pragma @code{Profile (Ravenscar)}).
  
  @item No_Standard_Storage_Pools
  @findex No_Standard_Storage_Pools
*************** user-defined storage pool.
*** 6951,6961 ****
  
  @item No_Streams
  @findex No_Streams
! This restriction ensures at compile time that there are no implicit or
! explicit dependencies on the package @code{Ada.Streams}.
  
! @item No_Task_Attributes
! @findex No_Task_Attributes
  This restriction ensures at compile time that there are no implicit or
  explicit dependencies on the package @code{Ada.Task_Attributes}.
  
--- 7119,7133 ----
  
  @item No_Streams
  @findex No_Streams
! This restriction ensures at compile/bind time that there are no
! stream objects created (and therefore no actual stream operations).
! This restriction does not forbid dependences on the package
! @code{Ada.Streams}. So it is permissible to with
! @code{Ada.Streams} (or another package that does so itself)
! as long as no actual stream objects are created.
  
! @item No_Task_Attributes_Package
! @findex No_Task_Attributes_Package
  This restriction ensures at compile time that there are no implicit or
  explicit dependencies on the package @code{Ada.Task_Attributes}.
  
*************** to be output either by the compiler or b
*** 6974,6981 ****
  @item No_Wide_Characters
  @findex No_Wide_Characters
  This restriction ensures at compile time that no uses of the types
! @code{Wide_Character} or @code{Wide_String}
! appear, and that no wide character literals
  appear in the program (that is literals representing characters not in
  type @code{Character}.
  
--- 7146,7154 ----
  @item No_Wide_Characters
  @findex No_Wide_Characters
  This restriction ensures at compile time that no uses of the types
! @code{Wide_Character} or @code{Wide_String} or corresponding wide
! wide types
! appear, and that no wide or wide wide string or character literals
  appear in the program (that is literals representing characters not in
  type @code{Character}.
  
*************** Similarly, the size of type @code{Rec} i
*** 8321,8327 ****
  (@code{Rec'Size} = @code{Rec'Value_Size} = 40), but
  the alignment is 4, so objects of this type will have
  their size increased to 64 bits so that it is a multiple
! of the alignment (in bits).  The reason for this decision, which is
  in accordance with the specific Implementation Advice in RM 13.3(43):
  
  @quotation
--- 8494,8500 ----
  (@code{Rec'Size} = @code{Rec'Value_Size} = 40), but
  the alignment is 4, so objects of this type will have
  their size increased to 64 bits so that it is a multiple
! of the alignment (in bits).  This decision is
  in accordance with the specific Implementation Advice in RM 13.3(43):
  
  @quotation
*************** type Integer.
*** 8367,8374 ****
  For tasks, the @code{Storage_Size} clause specifies the amount of space
  to be allocated for the task stack.  This cannot be extended, and if the
  stack is exhausted, then @code{Storage_Error} will be raised (if stack
! checking is enabled).  If the default size of 20K bytes is insufficient,
! then you need to use a @code{Storage_Size} attribute definition clause,
  or a @code{Storage_Size} pragma in the task definition to set the
  appropriate required size.  A useful technique is to include in every
  task definition a pragma of the form:
--- 8540,8546 ----
  For tasks, the @code{Storage_Size} clause specifies the amount of space
  to be allocated for the task stack.  This cannot be extended, and if the
  stack is exhausted, then @code{Storage_Error} will be raised (if stack
! checking is enabled).  Use a @code{Storage_Size} attribute definition clause,
  or a @code{Storage_Size} pragma in the task definition to set the
  appropriate required size.  A useful technique is to include in every
  task definition a pragma of the form:
*************** discrete types are as follows:
*** 8632,8639 ****
  @itemize @bullet
  @item
  The @code{Object_Size} for base subtypes reflect the natural hardware
! size in bits (run the utility @code{gnatpsta} to find those values for
! numeric types). Enumeration types and fixed-point base subtypes have
  8, 16, 32 or 64 bits for this size, depending on the range of values
  to be stored.
  
--- 8804,8811 ----
  @itemize @bullet
  @item
  The @code{Object_Size} for base subtypes reflect the natural hardware
! size in bits (run the compiler with @option{-gnatS} to find those values
! for numeric types). Enumeration types and fixed-point base subtypes have
  8, 16, 32 or 64 bits for this size, depending on the range of values
  to be stored.
  
*************** thus the same lack of restriction applie
*** 9381,9395 ****
  then a component clause for a component of type R may start on any
  specified bit boundary, and may specify a value of 49 bits or greater.
  
  The rules for other types are different for GNAT 3 and GNAT 5 versions
  (based on GCC 2 and GCC 3 respectively). In GNAT 5, larger components
  may also be placed on arbitrary boundaries, so for example, the following
  is permitted:
  
  @smallexample @c ada
!    type R is array (1 .. 79) of Boolean;
!    pragma Pack (R);
!    for R'Size use 79;
  
     type Q is record
        G, H : Boolean;
--- 9553,9571 ----
  then a component clause for a component of type R may start on any
  specified bit boundary, and may specify a value of 49 bits or greater.
  
+ Packed bit arrays that are longer than 64 bits must always be placed
+ on a storage unit (byte) boundary. Any component clause that does not
+ meet this requirement will be rejected.
+ 
  The rules for other types are different for GNAT 3 and GNAT 5 versions
  (based on GCC 2 and GCC 3 respectively). In GNAT 5, larger components
+ (other than packed arrays)
  may also be placed on arbitrary boundaries, so for example, the following
  is permitted:
  
  @smallexample @c ada
!    type R is array (1 .. 10) of Boolean;
!    for R'Size use 80;
  
     type Q is record
        G, H : Boolean;
*************** is permitted:
*** 9399,9406 ****
     for Q use record
        G at 0 range  0 ..   0;
        H at 0 range  1 ..   1;
!       L at 0 range  2 ..  80;
!       R at 0 range 81 .. 159;
     end record;
  @end smallexample
  
--- 9575,9582 ----
     for Q use record
        G at 0 range  0 ..   0;
        H at 0 range  1 ..   1;
!       L at 0 range  2 ..  81;
!       R at 0 range 82 .. 161;
     end record;
  @end smallexample
  
*************** packages without @samp{Wide_} in the nam
*** 10145,10150 ****
--- 10321,10336 ----
  @code{Wide_String} and @code{Wide_Character} instead of @code{String}
  and @code{Character}.
  
+ @item Ada.Strings.Wide_Wide_Bounded (A.4.7)
+ @itemx Ada.Strings.Wide_Wide_Fixed (A.4.7)
+ @itemx Ada.Strings.Wide_Wide_Maps (A.4.7)
+ @itemx Ada.Strings.Wide_Wide_Maps.Constants (A.4.7)
+ @itemx Ada.Strings.Wide_Wide_Unbounded (A.4.7)
+ These packages provide analogous capabilities to the corresponding
+ packages without @samp{Wide_} in the name, but operate with the types
+ @code{Wide_Wide_String} and @code{Wide_Wide_Character} instead
+ of @code{String} and @code{Character}.
+ 
  @item Ada.Synchronous_Task_Control (D.10)
  This package provides some standard facilities for controlling task
  communication in a synchronous manner.
*************** types are @code{Wide_Character} and @cod
*** 10333,10340 ****
--- 10519,10590 ----
  This package is similar to @code{Ada.Text_IO.Streams}, except that the
  types are @code{Wide_Character} and @code{Wide_String} instead of
  @code{Character} and @code{String}.
+ 
+ @item Ada.Wide_Wide_Text_IO (A.11)
+ This package is similar to @code{Ada.Text_IO}, except that the external
+ file supports wide character representations, and the internal types are
+ @code{Wide_Character} and @code{Wide_String} instead of @code{Character}
+ and @code{String}.  It contains generic subpackages listed next.
+ 
+ @item Ada.Wide_Wide_Text_IO.Decimal_IO
+ Provides input-output facilities for decimal fixed-point types
+ 
+ @item Ada.Wide_Wide_Text_IO.Enumeration_IO
+ Provides input-output facilities for enumeration types.
+ 
+ @item Ada.Wide_Wide_Text_IO.Fixed_IO
+ Provides input-output facilities for ordinary fixed-point types.
+ 
+ @item Ada.Wide_Wide_Text_IO.Float_IO
+ Provides input-output facilities for float types.  The following
+ predefined instantiations of this generic package are available:
+ 
+ @table @code
+ @item Short_Float
+ @code{Short_Float_Wide_Wide_Text_IO}
+ @item Float
+ @code{Float_Wide_Wide_Text_IO}
+ @item Long_Float
+ @code{Long_Float_Wide_Wide_Text_IO}
+ @end table
+ 
+ @item Ada.Wide_Wide_Text_IO.Integer_IO
+ Provides input-output facilities for integer types.  The following
+ predefined instantiations of this generic package are available:
+ 
+ @table @code
+ @item Short_Short_Integer
+ @code{Ada.Short_Short_Integer_Wide_Wide_Text_IO}
+ @item Short_Integer
+ @code{Ada.Short_Integer_Wide_Wide_Text_IO}
+ @item Integer
+ @code{Ada.Integer_Wide_Wide_Text_IO}
+ @item Long_Integer
+ @code{Ada.Long_Integer_Wide_Wide_Text_IO}
+ @item Long_Long_Integer
+ @code{Ada.Long_Long_Integer_Wide_Wide_Text_IO}
+ @end table
+ 
+ @item Ada.Wide_Wide_Text_IO.Modular_IO
+ Provides input-output facilities for modular (unsigned) types
+ 
+ @item Ada.Wide_Wide_Text_IO.Complex_IO (G.1.3)
+ This package is similar to @code{Ada.Text_IO.Complex_IO}, except that the
+ external file supports wide character representations.
+ 
+ @item Ada.Wide_Wide_Text_IO.Editing (F.3.4)
+ This package is similar to @code{Ada.Text_IO.Editing}, except that the
+ types are @code{Wide_Character} and @code{Wide_String} instead of
+ @code{Character} and @code{String}.
+ 
+ @item Ada.Wide_Wide_Text_IO.Streams (A.12.3)
+ This package is similar to @code{Ada.Text_IO.Streams}, except that the
+ types are @code{Wide_Character} and @code{Wide_String} instead of
+ @code{Character} and @code{String}.
  @end table
  
+ 
+ 
  @node The Implementation of Standard I/O
  @chapter The Implementation of Standard I/O
  
*************** these additional facilities are also des
*** 10374,10379 ****
--- 10624,10630 ----
  * Sequential_IO::
  * Text_IO::
  * Wide_Text_IO::
+ * Wide_Wide_Text_IO::
  * Stream_IO::
  * Shared Files::
  * Open Modes::
*************** Ada.Text_IO
*** 10393,10406 ****
  @item
  Ada.Text_IO.Complex_IO
  @item
! Ada.Text_IO.Text_Streams,
  @item
  Ada.Wide_Text_IO
  @item
! Ada.Wide_Text_IO.Complex_IO,
  @item
  Ada.Wide_Text_IO.Text_Streams
  @item
  Ada.Stream_IO
  @item
  Ada.Sequential_IO
--- 10644,10663 ----
  @item
  Ada.Text_IO.Complex_IO
  @item
! Ada.Text_IO.Text_Streams
  @item
  Ada.Wide_Text_IO
  @item
! Ada.Wide_Text_IO.Complex_IO
  @item
  Ada.Wide_Text_IO.Text_Streams
  @item
+ Ada.Wide_Wide_Text_IO
+ @item
+ Ada.Wide_Wide_Text_IO.Complex_IO
+ @item
+ Ada.Wide_Wide_Text_IO.Text_Streams
+ @item
  Ada.Stream_IO
  @item
  Ada.Sequential_IO
*************** The package @code{Ada.Strings.Wide_Unbou
*** 10767,10772 ****
--- 11024,11033 ----
  files @file{a-swuwti.ads} and @file{a-swuwti.adb} provides similar extended
  @code{Wide_Text_IO} functionality for unbounded wide strings.
  
+ The package @code{Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO} in library
+ files @file{a-szuzti.ads} and @file{a-szuzti.adb} provides similar extended
+ @code{Wide_Wide_Text_IO} functionality for unbounded wide wide strings.
+ 
  @node Wide_Text_IO
  @section Wide_Text_IO
  
*************** treated as data characters), and @code{E
*** 10938,10943 ****
--- 11199,11346 ----
  @code{False}.  Similarly, the end of file indication is not sticky, so
  it is possible to read beyond an end of file.
  
+ @node Wide_Wide_Text_IO
+ @section Wide_Wide_Text_IO
+ 
+ @noindent
+ @code{Wide_Wide_Text_IO} is similar in most respects to Text_IO, except that
+ both input and output files may contain special sequences that represent
+ wide wide character values.  The encoding scheme for a given file may be
+ specified using a FORM parameter:
+ 
+ @smallexample
+ WCEM=@var{x}
+ @end smallexample
+ 
+ @noindent
+ as part of the FORM string (WCEM = wide character encoding method),
+ where @var{x} is one of the following characters
+ 
+ @table @samp
+ @item h
+ Hex ESC encoding
+ @item u
+ Upper half encoding
+ @item s
+ Shift-JIS encoding
+ @item e
+ EUC Encoding
+ @item 8
+ UTF-8 encoding
+ @item b
+ Brackets encoding
+ @end table
+ 
+ @noindent
+ The encoding methods match those that
+ can be used in a source
+ program, but there is no requirement that the encoding method used for
+ the source program be the same as the encoding method used for files,
+ and different files may use different encoding methods.
+ 
+ The default encoding method for the standard files, and for opened files
+ for which no WCEM parameter is given in the FORM string matches the
+ wide character encoding specified for the main program (the default
+ being brackets encoding if no coding method was specified with -gnatW).
+ 
+ @table @asis
+ 
+ @item UTF-8 Coding
+ A wide character is represented using
+ UCS Transformation Format 8 (UTF-8) as defined in Annex R of ISO
+ 10646-1/Am.2.  Depending on the character value, the representation
+ is a one, two, three, or four byte sequence:
+ 
+ @smallexample
+ 16#000000#-16#00007f#: 2#0xxxxxxx#
+ 16#000080#-16#0007ff#: 2#110xxxxx# 2#10xxxxxx#
+ 16#000800#-16#00ffff#: 2#1110xxxx# 2#10xxxxxx# 2#10xxxxxx#
+ 16#010000#-16#10ffff#: 2#11110xxx# 2#10xxxxxx# 2#10xxxxxx# 2#10xxxxxx#
+ @end smallexample
+ 
+ @noindent
+ where the xxx bits correspond to the left-padded bits of the
+ 21-bit character value.  Note that all lower half ASCII characters
+ are represented as ASCII bytes and all upper half characters and
+ other wide characters are represented as sequences of upper-half
+ characters.
+ 
+ @item Brackets Coding
+ In this encoding, a wide wide character is represented by the following eight
+ character sequence if is in wide character range
+ 
+ @smallexample
+ [ " a b c d " ]
+ @end smallexample
+ 
+ and by the following ten character sequence if not
+ 
+ @smallexample
+ [ " a b c d e f " ]
+ @end smallexample
+ 
+ @noindent
+ where @code{a}, @code{b}, @code{c}, @code{d}, @code{e}, and @code{f}
+ are the four or six hexadecimal
+ characters (using uppercase letters) of the wide wide character code.  For
+ example, @code{["01A345"]} is used to represent the wide wide character
+ with code @code{16#01A345#}.
+ 
+ This scheme is compatible with use of the full Wide_Wide_Character set.
+ On input, brackets coding can also be used for upper half characters,
+ e.g.@: @code{["C1"]} for lower case a.  However, on output, brackets notation
+ is only used for wide characters with a code greater than @code{16#FF#}.
+ 
+ @end table
+ 
+ @noindent
+ If is also possible to use the other Wide_Character encoding methods,
+ such as Shift-JIS, but the other schemes cannot support the full range
+ of wide wide characters.
+ An attempt to output a character that cannot
+ be represented using the encoding scheme for the file causes
+ Constraint_Error to be raised.  An invalid wide character sequence on
+ input also causes Constraint_Error to be raised.
+ 
+ @menu
+ * Wide_Wide_Text_IO Stream Pointer Positioning::
+ * Wide_Wide_Text_IO Reading and Writing Non-Regular Files::
+ @end menu
+ 
+ @node Wide_Wide_Text_IO Stream Pointer Positioning
+ @subsection Stream Pointer Positioning
+ 
+ @noindent
+ @code{Ada.Wide_Wide_Text_IO} is similar to @code{Ada.Text_IO} in its handling
+ of stream pointer positioning (@pxref{Text_IO}).  There is one additional
+ case:
+ 
+ If @code{Ada.Wide_Wide_Text_IO.Look_Ahead} reads a character outside the
+ normal lower ASCII set (i.e.@: a character in the range:
+ 
+ @smallexample @c ada
+ Wide_Wide_Character'Val (16#0080#) .. Wide_Wide_Character'Val (16#10FFFF#)
+ @end smallexample
+ 
+ @noindent
+ then although the logical position of the file pointer is unchanged by
+ the @code{Look_Ahead} call, the stream is physically positioned past the
+ wide character sequence.  Again this is to avoid the need for buffering
+ or backup, and all @code{Wide_Wide_Text_IO} routines check the internal
+ indication that this situation has occurred so that this is not visible
+ to a normal program using @code{Wide_Wide_Text_IO}.  However, this discrepancy
+ can be observed if the wide text file shares a stream with another file.
+ 
+ @node Wide_Wide_Text_IO Reading and Writing Non-Regular Files
+ @subsection Reading and Writing Non-Regular Files
+ 
+ @noindent
+ As in the case of Text_IO, when a non-regular file is read, it is
+ assumed that the file contains no page marks (any form characters are
+ treated as data characters), and @code{End_Of_Page} always returns
+ @code{False}.  Similarly, the end of file indication is not sticky, so
+ it is possible to read beyond an end of file.
+ 
  @node Stream_IO
  @section Stream_IO
  
*************** operations.
*** 11258,11263 ****
--- 11661,11677 ----
          Form : in String := "");
   end Ada.Wide_Text_IO.C_Streams;
  
+   with Interfaces.C_Streams;
+   package Ada.Wide_Wide_Text_IO.C_Streams is
+      function C_Stream (F : File_Type)
+         return Interfaces.C_Streams.FILEs;
+      procedure Open
+        (File : in out File_Type;
+         Mode : in File_Mode;
+         C_Stream : in Interfaces.C_Streams.FILEs;
+         Form : in String := "");
+  end Ada.Wide_Wide_Text_IO.C_Streams;
+ 
   with Interfaces.C_Streams;
   package Ada.Stream_IO.C_Streams is
      function C_Stream (F : File_Type)
*************** operations.
*** 11271,11277 ****
  @end smallexample
  
  @noindent
! In each of these five packages, the @code{C_Stream} function obtains the
  @code{FILE} pointer from a currently opened Ada file.  It is then
  possible to use the @code{Interfaces.C_Streams} package to operate on
  this stream, or the stream can be passed to a C program which can
--- 11685,11691 ----
  @end smallexample
  
  @noindent
! In each of these six packages, the @code{C_Stream} function obtains the
  @code{FILE} pointer from a currently opened Ada file.  It is then
  possible to use the @code{Interfaces.C_Streams} package to operate on
  this stream, or the stream can be passed to a C program which can
*************** of GNAT, and will generate a warning mes
*** 11325,11330 ****
--- 11739,11746 ----
  * Ada.Characters.Latin_9 (a-chlat9.ads)::
  * Ada.Characters.Wide_Latin_1 (a-cwila1.ads)::
  * Ada.Characters.Wide_Latin_9 (a-cwila9.ads)::
+ * Ada.Characters.Wide_Wide_Latin_1 (a-czila1.ads)::
+ * Ada.Characters.Wide_Wide_Latin_9 (a-czila9.ads)::
  * Ada.Command_Line.Remove (a-colire.ads)::
  * Ada.Command_Line.Environment (a-colien.ads)::
  * Ada.Direct_IO.C_Streams (a-diocst.ads)::
*************** of GNAT, and will generate a warning mes
*** 11334,11341 ****
--- 11750,11759 ----
  * Ada.Streams.Stream_IO.C_Streams (a-ssicst.ads)::
  * Ada.Strings.Unbounded.Text_IO (a-suteio.ads)::
  * Ada.Strings.Wide_Unbounded.Wide_Text_IO (a-swuwti.ads)::
+ * Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO (a-szuzti.ads)::
  * Ada.Text_IO.C_Streams (a-tiocst.ads)::
  * Ada.Wide_Text_IO.C_Streams (a-wtcstr.ads)::
+ * Ada.Wide_Wide_Text_IO.C_Streams (a-ztcstr.ads)::
  * GNAT.Array_Split (g-arrspl.ads)::
  * GNAT.AWK (g-awk.ads)::
  * GNAT.Bounded_Buffers (g-boubuf.ads)::
*************** of GNAT, and will generate a warning mes
*** 11375,11381 ****
  * GNAT.Memory_Dump (g-memdum.ads)::
  * GNAT.Most_Recent_Exception (g-moreex.ads)::
  * GNAT.OS_Lib (g-os_lib.ads)::
! * GNAT.Perfect_Hash.Generators (g-pehage.ads)::
  * GNAT.Regexp (g-regexp.ads)::
  * GNAT.Registry (g-regist.ads)::
  * GNAT.Regpat (g-regpat.ads)::
--- 11793,11799 ----
  * GNAT.Memory_Dump (g-memdum.ads)::
  * GNAT.Most_Recent_Exception (g-moreex.ads)::
  * GNAT.OS_Lib (g-os_lib.ads)::
! * GNAT.Perfect_Hash_Generators (g-pehage.ads)::
  * GNAT.Regexp (g-regexp.ads)::
  * GNAT.Registry (g-regist.ads)::
  * GNAT.Regpat (g-regpat.ads)::
*************** of GNAT, and will generate a warning mes
*** 11398,11403 ****
--- 11816,11822 ----
  * GNAT.Traceback (g-traceb.ads)::
  * GNAT.Traceback.Symbolic (g-trasym.ads)::
  * GNAT.Wide_String_Split (g-wistsp.ads)::
+ * GNAT.Wide_Wide_String_Split (g-zistsp.ads)::
  * Interfaces.C.Extensions (i-cexten.ads)::
  * Interfaces.C.Streams (i-cstrea.ads)::
  * Interfaces.CPP (i-cpp.ads)::
*************** of GNAT, and will generate a warning mes
*** 11412,11417 ****
--- 11831,11838 ----
  * System.Assertions (s-assert.ads)::
  * System.Memory (s-memory.ads)::
  * System.Partition_Interface (s-parint.ads)::
+ * System.Restrictions (s-restri.ads)::
+ * System.Rident (s-rident.ads)::
  * System.Task_Info (s-tasinf.ads)::
  * System.Wch_Cnv (s-wchcnv.ads)::
  * System.Wch_Con (s-wchcon.ads)::
*************** instead of @code{Character}.  The provis
*** 11459,11464 ****
--- 11880,11913 ----
  is specifically authorized by the Ada Reference Manual
  (RM A.3(27)).
  
+ @node Ada.Characters.Wide_Wide_Latin_1 (a-czila1.ads)
+ @section @code{Ada.Characters.Wide_Wide_Latin_1} (@file{a-czila1.ads})
+ @cindex @code{Ada.Characters.Wide_Wide_Latin_1} (@file{a-czila1.ads})
+ @cindex Latin_1 constants for Wide_Wide_Character
+ 
+ @noindent
+ This child of @code{Ada.Characters}
+ provides a set of definitions corresponding to those in the
+ RM-defined package @code{Ada.Characters.Latin_1} but with the
+ types of the constants being @code{Wide_Wide_Character}
+ instead of @code{Character}.  The provision of such a package
+ is specifically authorized by the Ada Reference Manual
+ (RM A.3(27)).
+ 
+ @node Ada.Characters.Wide_Wide_Latin_9 (a-czila9.ads)
+ @section @code{Ada.Characters.Wide_Wide_Latin_9} (@file{a-czila9.ads})
+ @cindex @code{Ada.Characters.Wide_Wide_Latin_9} (@file{a-czila9.ads})
+ @cindex Latin_9 constants for Wide_Wide_Character
+ 
+ @noindent
+ This child of @code{Ada.Characters}
+ provides a set of definitions corresponding to those in the
+ GNAT defined package @code{Ada.Characters.Latin_9} but with the
+ types of the constants being @code{Wide_Wide_Character}
+ instead of @code{Character}.  The provision of such a package
+ is specifically authorized by the Ada Reference Manual
+ (RM A.3(27)).
+ 
  @node Ada.Command_Line.Remove (a-colire.ads)
  @section @code{Ada.Command_Line.Remove} (@file{a-colire.ads})
  @cindex @code{Ada.Command_Line.Remove} (@file{a-colire.ads})
*************** This package provides subprograms for Te
*** 11557,11562 ****
--- 12006,12022 ----
  wide strings, avoiding the necessity for an intermediate operation
  with ordinary wide strings.
  
+ @node Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO (a-szuzti.ads)
+ @section @code{Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO} (@file{a-szuzti.ads})
+ @cindex @code{Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO} (@file{a-szuzti.ads})
+ @cindex @code{Unbounded_Wide_Wide_String}, IO support
+ @cindex @code{Text_IO}, extensions for unbounded wide wide strings
+ 
+ @noindent
+ This package provides subprograms for Text_IO for unbounded
+ wide wide strings, avoiding the necessity for an intermediate operation
+ with ordinary wide wide strings.
+ 
  @node Ada.Text_IO.C_Streams (a-tiocst.ads)
  @section @code{Ada.Text_IO.C_Streams} (@file{a-tiocst.ads})
  @cindex @code{Ada.Text_IO.C_Streams} (@file{a-tiocst.ads})
*************** C streams and @code{Wide_Text_IO}.  The 
*** 11579,11584 ****
--- 12039,12056 ----
  extracted from a file opened on the Ada side, and an Ada file
  can be constructed from a stream opened on the C side.
  
+ @node Ada.Wide_Wide_Text_IO.C_Streams (a-ztcstr.ads)
+ @section @code{Ada.Wide_Wide_Text_IO.C_Streams} (@file{a-ztcstr.ads})
+ @cindex @code{Ada.Wide_Wide_Text_IO.C_Streams} (@file{a-ztcstr.ads})
+ @cindex C Streams, Interfacing with @code{Wide_Wide_Text_IO}
+ 
+ @noindent
+ This package provides subprograms that allow interfacing between
+ C streams and @code{Wide_Wide_Text_IO}.  The stream identifier can be
+ extracted from a file opened on the Ada side, and an Ada file
+ can be constructed from a stream opened on the C side.
+ 
+ 
  @node GNAT.Array_Split (g-arrspl.ads)
  @section @code{GNAT.Array_Split} (@file{g-arrspl.ads})
  @cindex @code{GNAT.Array_Split} (@file{g-arrspl.ads})
*************** including time/date management, file ope
*** 12015,12023 ****
  including a portable spawn procedure, and access to environment variables
  and error return codes.
  
! @node GNAT.Perfect_Hash.Generators (g-pehage.ads)
! @section @code{GNAT.Perfect_Hash.Generators} (@file{g-pehage.ads})
! @cindex @code{GNAT.Perfect_Hash.Generators} (@file{g-pehage.ads})
  @cindex Hash functions
  
  @noindent
--- 12487,12495 ----
  including a portable spawn procedure, and access to environment variables
  and error return codes.
  
! @node GNAT.Perfect_Hash_Generators (g-pehage.ads)
! @section @code{GNAT.Perfect_Hash_Generators} (@file{g-pehage.ads})
! @cindex @code{GNAT.Perfect_Hash_Generators} (@file{g-pehage.ads})
  @cindex Hash functions
  
  @noindent
*************** defines a string access and an array of 
*** 12193,12199 ****
  @cindex String splitter
  
  @noindent
! Useful string-manipulation routines: given a set of separators, split
  a string wherever the separators appear, and provide direct access
  to the resulting slices. This package is instantiated from
  @code{GNAT.Array_Split}.
--- 12665,12671 ----
  @cindex String splitter
  
  @noindent
! Useful string manipulation routines: given a set of separators, split
  a string wherever the separators appear, and provide direct access
  to the resulting slices. This package is instantiated from
  @code{GNAT.Array_Split}.
*************** name and line number information.
*** 12263,12270 ****
  @cindex Wide_String splitter
  
  @noindent
! Useful wide_string-manipulation routines: given a set of separators, split
! a wide_string wherever the separators appear, and provide direct access
  to the resulting slices. This package is instantiated from
  @code{GNAT.Array_Split}.
  
--- 12735,12753 ----
  @cindex Wide_String splitter
  
  @noindent
! Useful wide string manipulation routines: given a set of separators, split
! a wide string wherever the separators appear, and provide direct access
! to the resulting slices. This package is instantiated from
! @code{GNAT.Array_Split}.
! 
! @node GNAT.Wide_Wide_String_Split (g-zistsp.ads)
! @section @code{GNAT.Wide_Wide_String_Split} (@file{g-zistsp.ads})
! @cindex @code{GNAT.Wide_Wide_String_Split} (@file{g-zistsp.ads})
! @cindex Wide_Wide_String splitter
! 
! @noindent
! Useful wide wide string manipulation routines: given a set of separators, split
! a wide wide string wherever the separators appear, and provide direct access
  to the resulting slices. This package is instantiated from
  @code{GNAT.Array_Split}.
  
*************** This package provides facilities for par
*** 12423,12428 ****
--- 12906,12937 ----
  is used primarily in a distribution context when using Annex E
  with @code{GLADE}.
  
+ @node System.Restrictions (s-restri.ads)
+ @section @code{System.Restrictions} (@file{s-restri.ads})
+ @cindex @code{System.Restrictions} (@file{s-restri.ads})
+ @cindex Run-time restrictions access
+ 
+ @noindent
+ This package provides facilities for accessing at run-time
+ the status of restrictions specified at compile time for
+ the partition. Information is available both with regard
+ to actual restrictions specified, and with regard to
+ compiler determined information on which restrictions
+ are violated by one or more packages in the partition.
+ 
+ @node System.Rident (s-rident.ads)
+ @section @code{System.Rident} (@file{s-rident.ads})
+ @cindex @code{System.Rident} (@file{s-rident.ads})
+ @cindex Restrictions definitions
+ 
+ @noindent
+ This package provides definitions of the restrictions
+ identifiers supported by GNAT, and also the format of
+ the restrictions provided in package System.Restrictions.
+ It is not normally necessary to @code{with} this generic package
+ since the necessary instantiation is included in
+ package System.Restrictions.
+ 
  @node System.Task_Info (s-tasinf.ads)
  @section @code{System.Task_Info} (@file{s-tasinf.ads})
  @cindex @code{System.Task_Info} (@file{s-tasinf.ads})
*************** to support the @code{Task_Info} pragma
*** 12441,12447 ****
  
  @noindent
  This package provides routines for converting between
! wide characters and a representation as a value of type
  @code{Standard.String}, using a specified wide character
  encoding method.  It uses definitions in
  package @code{System.Wch_Con}.
--- 12950,12956 ----
  
  @noindent
  This package provides routines for converting between
! wide and wide wide characters and a representation as a value of type
  @code{Standard.String}, using a specified wide character
  encoding method.  It uses definitions in
  package @code{System.Wch_Con}.
*************** primarily intended to be constructed aut
*** 12549,12555 ****
  tool, although it is possible to construct them by hand.  No suitable binding
  generator tool is supplied with GNAT though.
  
- 
  Using these pragmas it is possible to achieve complete
  inter-operability between Ada tagged types and C class definitions.
  See @ref{Implementation Defined Pragmas}, for more details.
--- 13058,13063 ----
*************** provided that the data items passed are 
*** 12609,12615 ****
  values or simple record types without variants, or simple array
  types with fixed bounds.
  
- 
  @node Specialized Needs Annexes
  @chapter Specialized Needs Annexes
  
--- 13117,13122 ----
*************** The Numerics Annex is fully implemented.
*** 12641,12647 ****
  The Safety and Security annex is fully implemented.
  @end table
  
- 
  @node Implementation of Specific Ada Features
  @chapter Implementation of Specific Ada Features
  
--- 13148,13153 ----
*************** facilities.
*** 12654,12662 ****
  * GNAT Implementation of Tasking::
  * GNAT Implementation of Shared Passive Packages::
  * Code Generation for Array Aggregates::
  @end menu
  
- 
  @node Machine Code Insertions
  @section Machine Code Insertions
  
--- 13160,13168 ----
  * GNAT Implementation of Tasking::
  * GNAT Implementation of Shared Passive Packages::
  * Code Generation for Array Aggregates::
+ * The Size of Discriminated Records with Default Discriminants::
  @end menu
  
  @node Machine Code Insertions
  @section Machine Code Insertions
  
*************** including machine instructions in a subp
*** 12673,12687 ****
  @end itemize
  
  @noindent
! The two features are similar, and both closely related to the mechanism
  provided by the asm instruction in the GNU C compiler.  Full understanding
  and use of the facilities in this package requires understanding the asm
! instruction as described in
! @cite{Using and Porting the GNU Compiler Collection (GCC)} by Richard
! Stallman.  Calls to the function @code{Asm} and the procedure @code{Asm}
! have identical semantic restrictions and effects as described below.
! Both are provided so that the procedure call can be used as a statement,
! and the function call can be used to form a code_statement.
  
  The first example given in the GCC documentation is the C @code{asm}
  instruction:
--- 13179,13195 ----
  @end itemize
  
  @noindent
! The two features are similar, and both are closely related to the mechanism
  provided by the asm instruction in the GNU C compiler.  Full understanding
  and use of the facilities in this package requires understanding the asm
! instruction as described in @cite{Using the GNU Compiler Collection (GCC)}
! by Richard Stallman. The relevant section is titled ``Extensions to the C
! Language Family'' -> ``Assembler Instructions with C Expression Operands''.
! 
! Calls to the function @code{Asm} and the procedure @code{Asm} have identical
! semantic restrictions and effects as described below.  Both are provided so
! that the procedure call can be used as a statement, and the function call
! can be used to form a code_statement.
  
  The first example given in the GCC documentation is the C @code{asm}
  instruction:
*************** GNAT does not
*** 12885,12891 ****
  support this functionality when the parent contains more than one task.
  @cindex Forking a new process
  
- 
  @node Ensuring Compliance with the Real-Time Annex
  @subsection Ensuring Compliance with the Real-Time Annex
  @cindex Real-Time Systems Annex compliance
--- 13393,13398 ----
*************** a temporary (created either by the front
*** 13199,13204 ****
--- 13706,13802 ----
  that temporary will be copied onto the target.
  
  
+ @node The Size of Discriminated Records with Default Discriminants
+ @section The Size of Discriminated Records with Default Discriminants
+ 
+ @noindent
+ If a discriminated type @code{T} has discriminants with default values, it is
+ possible to declare an object of this type without providing an explicit
+ constraint:
+ 
+ @smallexample @c ada
+ @group
+ type Size is range 1..100;
+ 
+ type Rec (D : Size := 15) is record
+    Name : String (1..D);
+ end T;
+ 
+ Word : Rec;
+ @end group
+ @end smallexample
+ 
+ @noindent
+ Such an object is said to be @emph{unconstrained}.
+ The discriminant of the object
+ can be modified by a full assignment to the object, as long as it preserves the
+ relation between the value of the discriminant, and the value of the components
+ that depend on it:
+ 
+ @smallexample @c ada
+ @group
+ Word := (3, "yes");
+ 
+ Word := (5, "maybe");
+ 
+ Word := (5, "no"); -- raises Constraint_Error
+ @end group
+ @end smallexample
+ 
+ @noindent
+ In order to support this behavior efficiently, an unconstrained object is
+ given the maximum size that any value of the type requires. In the case
+ above, @code{Word} has storage for the discriminant and for
+ a @code{String} of length 100.
+ It is important to note that unconstrained objects do not require dynamic
+ allocation. It would be an improper implementation to place on the heap those
+ components whose size depends on discriminants. (This improper implementation
+ was used by some Ada83 compilers, where the @code{Name} component above
+ would have
+ been stored as a pointer to a dynamic string). Following the principle that
+ dynamic storage management should never be introduced implicitly,
+ an Ada95 compiler should reserve the full size for an unconstrained declared
+ object, and place it on the stack.
+ 
+ This maximum size approach
+ has been a source of surprise to some users, who expect the default
+ values of the discriminants to determine the size reserved for an
+ unconstrained object: ``If the default is 15, why should the object occupy
+ a larger size?''
+ The answer, of course, is that the discriminant may be later modified,
+ and its full range of values must be taken into account. This is why the
+ declaration:
+ 
+ @smallexample
+ @group
+ type Rec (D : Positive := 15) is record
+    Name : String (1..D);
+ end record;
+ 
+ Too_Large : Rec;
+ @end group
+ @end smallexample
+ 
+ @noindent
+ is flagged by the compiler with a warning:
+ an attempt to create @code{Too_Large} will raise @code{Storage_Error},
+ because the required size includes @code{Positive'Last}
+ bytes. As the first example indicates, the proper approach is to declare an
+ index type of ``reasonable'' range so that unconstrained objects are not too
+ large.
+ 
+ One final wrinkle: if the object is declared to be @code{aliased}, or if it is
+ created in the heap by means of an allocator, then it is @emph{not}
+ unconstrained:
+ it is constrained by the default values of the discriminants, and those values
+ cannot be modified by full assignment. This is because in the presence of
+ aliasing all views of the object (which may be manipulated by different tasks,
+ say) must be consistent, so it is imperative that the object, once created,
+ remain invariant.
+ 
+ 
+ 
+ 
  @node Project File Reference
  @chapter Project File Reference
  
*************** See the chapter on project files in the 
*** 13213,13218 ****
--- 13811,13817 ----
  * Reserved Words::
  * Lexical Elements::
  * Declarations::
+ * Empty declarations::
  * Typed string declarations::
  * Variables::
  * Expressions::
*************** simple_declarative_item ::=
*** 13283,13291 ****
    variable_declaration |
    typed_variable_declaration |
    attribute_declaration |
!   case_construction
  @end smallexample
  
  @node Typed string declarations
  @section Typed string declarations
  
--- 13882,13902 ----
    variable_declaration |
    typed_variable_declaration |
    attribute_declaration |
!   case_construction |
!   empty_declaration
  @end smallexample
  
+ @node Empty declarations
+ @section Empty declarations
+ 
+ @smallexample
+ empty_declaration ::=
+   @b{null} ;
+ @end smallexample
+ 
+ An empty declaration is allowed anywhere a declaration is allowed.
+ It has no effect.
+ 
  @node Typed string declarations
  @section Typed string declarations
  
*************** case_construction ::=
*** 13587,13593 ****
  
  case_item ::=
    @b{when} discrete_choice_list =>
!     @{case_construction | attribute_declaration@}
  
  discrete_choice_list ::=
    string_literal @{| string_literal@} |
--- 14198,14204 ----
  
  case_item ::=
    @b{when} discrete_choice_list =>
!     @{case_construction | attribute_declaration | empty_declaration@}
  
  discrete_choice_list ::=
    string_literal @{| string_literal@} |
*************** path_name ::=
*** 14025,14035 ****
  A path name denotes a project file. A path name can be absolute or relative.
  An absolute path name includes a sequence of directories, in the syntax of
  the host operating system, that identifies uniquely the project file in the
! file system. A relative path name identifies the directory that contains the
! project file, relative to the directory that contains the current project.
  Path names are case sensitive if file names in the host operating system
  are case sensitive.
  
  A given project name can appear only once in a context_clause.
  
  It is illegal for a project imported by a context clause to refer, directly
--- 14636,14650 ----
  A path name denotes a project file. A path name can be absolute or relative.
  An absolute path name includes a sequence of directories, in the syntax of
  the host operating system, that identifies uniquely the project file in the
! file system. A relative path name identifies the project file, relative
! to the directory that contains the current project, or relative to a
! directory listed in the environment variable ADA_PROJECT_PATH.
  Path names are case sensitive if file names in the host operating system
  are case sensitive.
  
+ The syntax of the environment variable ADA_PROJECT_PATH is a list of
+ directory names separated by colons (semicolons on Windows).
+ 
  A given project name can appear only once in a context_clause.
  
  It is illegal for a project imported by a context clause to refer, directly
*************** sequential elaboration of all its declar
*** 14068,14073 ****
--- 14683,14729 ----
  attributes and variables in the project are then used to establish the
  environment in which the gnat tool will execute.
  
+ @node Obsolescent Features
+ @chapter Obsolescent Features
+ 
+ @noindent
+ This chapter describes features that are provided by GNAT, but are
+ considered obsolescent since there are preferred ways of achieving
+ the same effect. These features are provided solely for historical
+ compatibility purposes.
+ 
+ @menu
+ * pragma No_Run_Time::
+ * pragma Ravenscar::
+ * pragma Restricted_Run_Time::
+ @end menu
+ 
+ @node pragma No_Run_Time
+ @section pragma No_Run_Time
+ 
+ The pragma @code{No_Run_Time} is used to achieve an affect similar
+ to the use of the "Zero Foot Print" configurable run time, but without
+ requiring a specially configured run time. The result of using this
+ pragma, which must be used for all units in a partition, is to restrict
+ the use of any language features requiring run-time support code. The
+ preferred usage is to use an appropriately configured run-time that
+ includes just those features that are to be made accessible.
+ 
+ @node pragma Ravenscar
+ @section pragma Ravenscar
+ 
+ The pragma @code{Ravenscar} has exactly the same effect as pragma
+ @code{Profile (Ravenscar)}. The latter usage is preferred since it
+ is part of the new Ada 2005 standard.
+ 
+ @node pragma Restricted_Run_Time
+ @section pragma Restricted_Run_Time
+ 
+ The pragma @code{Restricted_Run_Time} has exactly the same effect as
+ pragma @code{Profile (Restricted)}. The latter usage is
+ preferred since the Ada 2005 pragma @code{Profile} is intended for
+ this kind of implementation dependent addition.
+ 
  @include fdl.texi
  @c GNU Free Documentation License
  
diff -Nrcpad gcc-3.4.3/gcc/ada/gnat_ugn.texi gcc-4.0.0/gcc/ada/gnat_ugn.texi
*** gcc-3.4.3/gcc/ada/gnat_ugn.texi	Wed Jun  9 09:20:48 2004
--- gcc-4.0.0/gcc/ada/gnat_ugn.texi	Thu Feb 10 13:57:20 2005
***************
*** 7,13 ****
  @c                                                                            o
  @c                             G N A T _ U G N                                o
  @c                                                                            o
! @c          Copyright (C) 1992-2004 Ada Core Technologies, Inc.               o
  @c                                                                            o
  @c  GNAT is free software;  you can  redistribute it  and/or modify it under  o
  @c  terms of the  GNU General Public License as published  by the Free Soft-  o
--- 7,13 ----
  @c                                                                            o
  @c                             G N A T _ U G N                                o
  @c                                                                            o
! @c          Copyright (C) 1992-2005 Ada Core Technologies, Inc.               o
  @c                                                                            o
  @c  GNAT is free software;  you can  redistribute it  and/or modify it under  o
  @c  terms of the  GNU General Public License as published  by the Free Soft-  o
***************
*** 85,104 ****
  @setfilename gnat_ugn_unw.info
  @end ifset
  
  @ifset vms
! @settitle GNAT User's Guide for Native Platforms / OpenVMS Alpha
! @dircategory GNU Ada tools
! @direntry
! * GNAT User's Guide (gnat_ugn_vms) for Native Platforms / OpenVMS Alpha
! @end direntry
  @end ifset
  
! @ifset unw
! @settitle GNAT User's Guide for Native Platforms / Unix and Windows
  @direntry
! * GNAT User's Guide (gnat_ugn_unw) for Native Platforms / Unix and Windows
  @end direntry
- @end ifset
  
  @include gcc-common.texi
  
--- 85,108 ----
  @setfilename gnat_ugn_unw.info
  @end ifset
  
+ @set FSFEDITION
+ @set EDITION GNAT
+ 
+ @ifset unw
+ @set PLATFORM
+ @set FILE gnat_ugn_unw
+ @end ifset
+ 
  @ifset vms
! @set PLATFORM OpenVMS
! @set FILE gnat_ugn_vms
  @end ifset
  
! @settitle @value{EDITION} User's Guide @value{PLATFORM}
! @dircategory GNU Ada tools
  @direntry
! * @value{EDITION} User's Guide (@value{FILE}) @value{PLATFORM}
  @end direntry
  
  @include gcc-common.texi
  
***************
*** 107,125 ****
  @c %**end of header
  
  @copying
! Copyright @copyright{} 1995-2004, Free Software Foundation
  
  Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.2
  or any later version published by the Free Software Foundation;
  with the Invariant Sections being ``GNU Free Documentation License'', with the
  Front-Cover Texts being
! @ifset vms
! ``GNAT User's Guide for Native Platforms / OpenVMS Alpha'',
! @end ifset
! @ifset unw
! ``GNAT User's Guide for Native Platforms / Unix and Windows'',
! @end ifset
  and with no Back-Cover Texts.
  A copy of the license is included in the section entitled
  ``GNU Free Documentation License''.
--- 111,124 ----
  @c %**end of header
  
  @copying
! Copyright @copyright{} 1995-2005, Free Software Foundation
  
  Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.2
  or any later version published by the Free Software Foundation;
  with the Invariant Sections being ``GNU Free Documentation License'', with the
  Front-Cover Texts being
! ``@value{EDITION} User's Guide'',
  and with no Back-Cover Texts.
  A copy of the license is included in the section entitled
  ``GNU Free Documentation License''.
*************** A copy of the license is included in the
*** 127,150 ****
  
  @titlepage
  
! @title GNAT User's Guide
! @center @titlefont{for Native Platforms}
! @sp 1
  
- @flushright
- @ifset unw
- @titlefont{@i{Unix and Windows}}
- @end ifset
  @ifset vms
! @titlefont{@i{OpenVMS Alpha}}
! @end ifset
  @end flushright
  @sp 2
  
  @subtitle GNAT, The GNU Ada 95 Compiler
  @subtitle GCC version @value{version-GCC}
  
! @author Ada Core Technologies, Inc.
  
  @page
  @vskip 0pt plus 1filll
--- 126,146 ----
  
  @titlepage
  
! @title @value{EDITION} User's Guide
  
  @ifset vms
! @sp 1
! @flushright
! @titlefont{@i{@value{PLATFORM}}}
  @end flushright
+ @end ifset
+ 
  @sp 2
  
  @subtitle GNAT, The GNU Ada 95 Compiler
  @subtitle GCC version @value{version-GCC}
  
! @author AdaCore
  
  @page
  @vskip 0pt plus 1filll
*************** A copy of the license is included in the
*** 153,179 ****
  
  @end titlepage
  
- 
  @ifnottex
  @node Top, About This Guide, (dir), (dir)
! @top GNAT User's Guide
! 
! @ifset vms
! @noindent
! GNAT User's Guide for Native Platforms / OpenVMS Alpha
! @end ifset
  
- @ifset unw
  @noindent
! GNAT User's Guide for Native Platforms / Unix and Windows
! @end ifset
  
  @noindent
  GNAT, The GNU Ada 95 Compiler@*
  GCC version @value{version-GCC}@*
  
  @noindent
! Ada Core Technologies, Inc.@*
  
  @menu
  * About This Guide::
--- 149,167 ----
  
  @end titlepage
  
  @ifnottex
  @node Top, About This Guide, (dir), (dir)
! @top @value{EDITION} User's Guide
  
  @noindent
! @value{EDITION} User's Guide @value{PLATFORM}
  
  @noindent
  GNAT, The GNU Ada 95 Compiler@*
  GCC version @value{version-GCC}@*
  
  @noindent
! AdaCore@*
  
  @menu
  * About This Guide::
*************** Ada Core Technologies, Inc.@*
*** 190,195 ****
--- 178,184 ----
  * GNAT Project Manager::
  * The Cross-Referencing Tools gnatxref and gnatfind::
  * The GNAT Pretty-Printer gnatpp::
+ * The GNAT Metric Tool gnatmetric::
  * File Name Krunching Using gnatkr::
  * Preprocessing Using gnatprep::
  @ifset vms
*************** Ada Core Technologies, Inc.@*
*** 201,207 ****
  * GNAT and Libraries::
  * Using the GNU make Utility::
  @end ifclear
! * Finding Memory Problems::
  * Creating Sample Bodies Using gnatstub::
  * Other Utility Programs::
  * Running and Debugging Ada Programs::
--- 190,196 ----
  * GNAT and Libraries::
  * Using the GNU make Utility::
  @end ifclear
! * Memory Management Issues::
  * Creating Sample Bodies Using gnatstub::
  * Other Utility Programs::
  * Running and Debugging Ada Programs::
*************** Switches for gcc
*** 280,289 ****
  * Output and Error Message Control::
  * Warning Message Control::
  * Debugging and Assertion Control::
- * Run-Time Checks::
- * Stack Overflow Checking::
  * Validity Checking::
  * Style Checking::
  * Using gcc for Syntax Checking::
  * Using gcc for Semantic Checking::
  * Compiling Ada 83 Programs::
--- 269,278 ----
  * Output and Error Message Control::
  * Warning Message Control::
  * Debugging and Assertion Control::
  * Validity Checking::
  * Style Checking::
+ * Run-Time Checks::
+ * Stack Overflow Checking::
  * Using gcc for Syntax Checking::
  * Using gcc for Semantic Checking::
  * Compiling Ada 83 Programs::
*************** The GNAT Make Program gnatmake
*** 332,338 ****
  * How gnatmake Works::
  * Examples of gnatmake Usage::
  
- 
  Improving Performance
  * Performance Considerations::
  * Reducing the Size of Ada Executables with gnatelim::
--- 321,326 ----
*************** Performance Considerations
*** 343,348 ****
--- 331,337 ----
  * Optimization Levels::
  * Debugging Optimized Code::
  * Inlining of Subprograms::
+ * Optimization and Strict Aliasing::
  @ifset vms
  * Coverage Analysis::
  @end ifset
*************** GNAT Project Manager
*** 382,387 ****
--- 371,377 ----
  * Objects and Sources in Project Files::
  * Importing Projects::
  * Project Extension::
+ * Project Hierarchy Extension::
  * External References in Project Files::
  * Packages in Project Files::
  * Variables from Imported Projects::
*************** GNAT Project Manager
*** 394,400 ****
  * An Extended Example::
  * Project File Complete Syntax::
  
- 
  The Cross-Referencing Tools gnatxref and gnatfind
  
  * gnatxref Switches::
--- 384,389 ----
*************** The Cross-Referencing Tools gnatxref and
*** 404,415 ****
  * Examples of gnatxref Usage::
  * Examples of gnatfind Usage::
  
- 
  The GNAT Pretty-Printer gnatpp
  
  * Switches for gnatpp::
  * Formatting Rules::
  
  
  File Name Krunching Using gnatkr
  
--- 393,406 ----
  * Examples of gnatxref Usage::
  * Examples of gnatfind Usage::
  
  The GNAT Pretty-Printer gnatpp
  
  * Switches for gnatpp::
  * Formatting Rules::
  
+ The GNAT Metrics Tool gnatmetric
+ 
+ * Switches for gnatmetric::
  
  File Name Krunching Using gnatkr
  
*************** Cleaning Up Using gnatclean
*** 449,458 ****
  
  GNAT and Libraries
  
! * Creating an Ada Library::
! * Installing an Ada Library::
! * Using an Ada Library::
! * Creating an Ada Library to be Used in a Non-Ada Context::
  * Rebuilding the GNAT Run-Time Library::
  
  Using the GNU make Utility
--- 440,448 ----
  
  GNAT and Libraries
  
! * Introduction to Libraries in GNAT::
! * General Ada Libraries::
! * Stand-alone Ada Libraries::
  * Rebuilding the GNAT Run-Time Library::
  
  Using the GNU make Utility
*************** Using the GNU make Utility
*** 463,474 ****
  * Overcoming Command Line Length Limits::
  @end ifclear
  
! Finding Memory Problems
  
  @ifclear vms
  * The gnatmem Tool::
  @end ifclear
! * The GNAT Debug Pool Facility::
  
  @ifclear vms
  The gnatmem Tool
--- 453,469 ----
  * Overcoming Command Line Length Limits::
  @end ifclear
  
! Memory Management Issues
  
+ * Some Useful Memory Pools::
+ * The GNAT Debug Pool Facility::
  @ifclear vms
  * The gnatmem Tool::
  @end ifclear
! 
! Some Useful Memory Pools
! 
! The GNAT Debug Pool Facility
  
  @ifclear vms
  The gnatmem Tool
*************** The gnatmem Tool
*** 478,486 ****
  * Example of gnatmem Usage::
  @end ifclear
  
! The GNAT Debug Pool Facility
! 
! Creating Sample Bodies Using gnatstub
  
  * Running gnatstub::
  * Switches for gnatstub::
--- 473,479 ----
  * Example of gnatmem Usage::
  @end ifclear
  
!  Sample Bodies Using gnatstub
  
  * Running gnatstub::
  * Switches for gnatstub::
*************** Platform-Specific Information for the Ru
*** 574,584 ****
  
  * Summary of Run-Time Configurations::
  * Specifying a Run-Time Library::
- * Choosing between Native and FSU Threads Libraries::
  * Choosing the Scheduling Policy::
  * Solaris-Specific Considerations::
  * IRIX-Specific Considerations::
  * Linux-Specific Considerations::
  
  Example of Binder Output File
  
--- 567,577 ----
  
  * Summary of Run-Time Configurations::
  * Specifying a Run-Time Library::
  * Choosing the Scheduling Policy::
  * Solaris-Specific Considerations::
  * IRIX-Specific Considerations::
  * Linux-Specific Considerations::
+ * AIX-Specific Considerations::
  
  Example of Binder Output File
  
*************** Compatibility and Porting Guide
*** 615,620 ****
--- 608,616 ----
  * Compatibility with DEC Ada 83::
  * Compatibility with Other Ada 95 Systems::
  * Representation Clauses::
+ @ifset vms
+ * Transitioning from Alpha to Integrity OpenVMS::
+ @end ifset
  
  @ifset unw
  Microsoft Windows Topics
*************** Microsoft Windows Topics
*** 632,638 ****
  * GNAT and COM/DCOM Objects::
  @end ifset
  
- 
  * Index::
  @end menu
  @end ifnottex
--- 628,633 ----
*************** Microsoft Windows Topics
*** 642,657 ****
  
  @noindent
  @ifset vms
! This guide describes the use of of GNAT, a full language compiler for the Ada
! 95 programming language, implemented on HP OpenVMS Alpha platforms.
  @end ifset
  @ifclear vms
! This guide describes the use of GNAT, a compiler and software development
  toolset for the full Ada 95 programming language.
  @end ifclear
  It describes the features of the compiler and tools, and details
  how to use them to build Ada 95 applications.
  
  @menu
  * What This Guide Contains::
  * What You Should Know before Reading This Guide::
--- 637,660 ----
  
  @noindent
  @ifset vms
! This guide describes the use of @value{EDITION},
! a full language compiler for the Ada
! 95 programming language, implemented on HP's Alpha and
! Integrity (ia64) OpenVMS platforms.
  @end ifset
  @ifclear vms
! This guide describes the use of @value{EDITION},
! a compiler and software development
  toolset for the full Ada 95 programming language.
  @end ifclear
  It describes the features of the compiler and tools, and details
  how to use them to build Ada 95 applications.
  
+ @ifset PROEDITION
+ For ease of exposition, ``GNAT Pro'' will be referred to simply as
+ ``GNAT'' in the remainder of this document.
+ @end ifset
+ 
  @menu
  * What This Guide Contains::
  * What You Should Know before Reading This Guide::
*************** by GNAT.
*** 675,681 ****
  
  @item
  @ref{Compiling Using gcc}, describes how to compile
! Ada programs with @code{gcc}, the Ada compiler.
  
  @item
  @ref{Binding Using gnatbind}, describes how to
--- 678,684 ----
  
  @item
  @ref{Compiling Using gcc}, describes how to compile
! Ada programs with @command{gcc}, the Ada compiler.
  
  @item
  @ref{Binding Using gnatbind}, describes how to
*************** utility.
*** 684,696 ****
  
  @item
  @ref{Linking Using gnatlink},
! describes @code{gnatlink}, a
  program that provides for linking using the GNAT run-time library to
! construct a program. @code{gnatlink} can also incorporate foreign language
  object units into the executable.
  
  @item
! @ref{The GNAT Make Program gnatmake}, describes @code{gnatmake}, a
  utility that automatically determines the set of sources
  needed by an Ada compilation unit, and executes the necessary compilations
  binding and link.
--- 687,699 ----
  
  @item
  @ref{Linking Using gnatlink},
! describes @command{gnatlink}, a
  program that provides for linking using the GNAT run-time library to
! construct a program. @command{gnatlink} can also incorporate foreign language
  object units into the executable.
  
  @item
! @ref{The GNAT Make Program gnatmake}, describes @command{gnatmake}, a
  utility that automatically determines the set of sources
  needed by an Ada compilation unit, and executes the necessary compilations
  binding and link.
*************** way to navigate through sources.
*** 730,735 ****
--- 733,742 ----
  version of an Ada source file with control over casing, indentation,
  comment placement, and other elements of program presentation style.
  
+ @item
+ @ref{The GNAT Metric Tool gnatmetric}, shows how to compute various
+ metrics for an Ada source file, such as the number of types and subprograms,
+ and assorted complexity measures.
  
  @item
  @ref{File Name Krunching Using gnatkr}, describes the @code{gnatkr}
*************** the GNAT toolset in Makefiles.
*** 770,781 ****
  @end ifclear
  
  @item
! @ref{Finding Memory Problems}, describes
  @ifclear vms
! @command{gnatmem}, a utility that monitors dynamic allocation and deallocation
! and helps detect ``memory leaks'', and
  @end ifclear
- the GNAT Debug Pool facility, which helps detect incorrect memory references.
  
  @item
  @ref{Creating Sample Bodies Using gnatstub}, discusses @code{gnatstub},
--- 777,789 ----
  @end ifclear
  
  @item
! @ref{Memory Management Issues}, describes some useful predefined storage pools
! and in particular the GNAT Debug Pool facility, which helps detect incorrect
! memory references.
  @ifclear vms
! It also describes @command{gnatmem}, a utility that monitors dynamic
! allocation and deallocation and helps detect ``memory leaks''.
  @end ifclear
  
  @item
  @ref{Creating Sample Bodies Using gnatstub}, discusses @code{gnatstub},
*************** Microsoft Windows platform.
*** 827,833 ****
  @end ifset
  @end itemize
  
- 
  @c *************************************************
  @node What You Should Know before Reading This Guide
  @c *************************************************
--- 835,840 ----
*************** If you are using GNAT on a Windows platf
*** 934,941 ****
  the ``@code{\}'' character should be used instead.
  @end ifset
  
- 
- 
  @c ****************************
  @node Getting Started with GNAT
  @chapter Getting Started with GNAT
--- 941,946 ----
*************** All appropriate object files must be lin
*** 988,998 ****
  @end enumerate
  
  @noindent
! All three steps are most commonly handled by using the @code{gnatmake}
  utility program that, given the name of the main program, automatically
  performs the necessary compilation, binding and linking steps.
  
- 
  @node Running a Simple Ada Program
  @section Running a Simple Ada Program
  
--- 993,1002 ----
  @end enumerate
  
  @noindent
! All three steps are most commonly handled by using the @command{gnatmake}
  utility program that, given the name of the main program, automatically
  performs the necessary compilation, binding and linking steps.
  
  @node Running a Simple Ada Program
  @section Running a Simple Ada Program
  
*************** $ gcc -c hello.adb
*** 1042,1048 ****
  @end smallexample
  
  @noindent
! @code{gcc} is the command used to run the compiler. This compiler is
  capable of compiling programs in several languages, including Ada 95 and
  C. It assumes that you have given it an Ada program if the file extension is
  either @file{.ads} or @file{.adb}, and it will then call
--- 1046,1052 ----
  @end smallexample
  
  @noindent
! @command{gcc} is the command used to run the compiler. This compiler is
  capable of compiling programs in several languages, including Ada 95 and
  C. It assumes that you have given it an Ada program if the file extension is
  either @file{.ads} or @file{.adb}, and it will then call
*************** which contains additional information us
*** 1063,1070 ****
  that an Ada program is consistent.
  To build an executable file,
  use @code{gnatbind} to bind the program
! and @code{gnatlink} to link it. The
! argument to both @code{gnatbind} and @code{gnatlink} is the name of the
  @file{ALI} file, but the default extension of @file{.ali} can
  be omitted. This means that in the most common case, the argument
  is simply the name of the main program:
--- 1067,1074 ----
  that an Ada program is consistent.
  To build an executable file,
  use @code{gnatbind} to bind the program
! and @command{gnatlink} to link it. The
! argument to both @code{gnatbind} and @command{gnatlink} is the name of the
  @file{ALI} file, but the default extension of @file{.ali} can
  be omitted. This means that in the most common case, the argument
  is simply the name of the main program:
*************** Hello WORLD!
*** 1115,1121 ****
  @noindent
  appear in response to this command.
  
- 
  @c ****************************************
  @node Running a Program with Multiple Units
  @section Running a Program with Multiple Units
--- 1119,1124 ----
*************** $ gcc -c greetings.ads -gnatc
*** 1200,1206 ****
  @noindent
  Although the compilation can be done in separate steps as in the
  above example, in practice it is almost always more convenient
! to use the @code{gnatmake} tool. All you need to know in this case
  is the name of the main program's source file. The effect of the above four
  commands can be achieved with a single one:
  
--- 1203,1209 ----
  @noindent
  Although the compilation can be done in separate steps as in the
  above example, in practice it is almost always more convenient
! to use the @command{gnatmake} tool. All you need to know in this case
  is the name of the main program's source file. The effect of the above four
  commands can be achieved with a single one:
  
*************** $ gnatmake gmain.adb
*** 1209,1215 ****
  @end smallexample
  
  @noindent
! In the next section we discuss the advantages of using @code{gnatmake} in
  more detail.
  
  @c *****************************
--- 1212,1218 ----
  @end smallexample
  
  @noindent
! In the next section we discuss the advantages of using @command{gnatmake} in
  more detail.
  
  @c *****************************
*************** more detail.
*** 1218,1224 ****
  
  @noindent
  If you work on a program by compiling single components at a time using
! @code{gcc}, you typically keep track of the units you modify. In order to
  build a consistent system, you compile not only these units, but also any
  units that depend on the units you have modified.
  For example, in the preceding case,
--- 1221,1227 ----
  
  @noindent
  If you work on a program by compiling single components at a time using
! @command{gcc}, you typically keep track of the units you modify. In order to
  build a consistent system, you compile not only these units, but also any
  units that depend on the units you have modified.
  For example, in the preceding case,
*************** if the dependencies change as you change
*** 1237,1243 ****
  sure that the makefile is kept up-to-date manually, which is also an
  error-prone process.
  
! The @code{gnatmake} utility takes care of these details automatically.
  Invoke it using either one of the following forms:
  
  @smallexample
--- 1240,1246 ----
  sure that the makefile is kept up-to-date manually, which is also an
  error-prone process.
  
! The @command{gnatmake} utility takes care of these details automatically.
  Invoke it using either one of the following forms:
  
  @smallexample
*************** $ gnatmake ^gmain^GMAIN^
*** 1247,1268 ****
  
  @noindent
  The argument is the name of the file containing the main program;
! you may omit the extension. @code{gnatmake}
  examines the environment, automatically recompiles any files that need
  recompiling, and binds and links the resulting set of object files,
  generating the executable file, @file{^gmain^GMAIN.EXE^}.
  In a large program, it
! can be extremely helpful to use @code{gnatmake}, because working out by hand
  what needs to be recompiled can be difficult.
  
! Note that @code{gnatmake}
  takes into account all the Ada 95 rules that
  establish dependencies among units. These include dependencies that result
  from inlining subprogram bodies, and from
  generic instantiation. Unlike some other
! Ada make tools, @code{gnatmake} does not rely on the dependencies that were
  found by the compiler on a previous compilation, which may possibly
! be wrong when sources change. @code{gnatmake} determines the exact set of
  dependencies from scratch each time it is run.
  
  @ifset vms
--- 1250,1271 ----
  
  @noindent
  The argument is the name of the file containing the main program;
! you may omit the extension. @command{gnatmake}
  examines the environment, automatically recompiles any files that need
  recompiling, and binds and links the resulting set of object files,
  generating the executable file, @file{^gmain^GMAIN.EXE^}.
  In a large program, it
! can be extremely helpful to use @command{gnatmake}, because working out by hand
  what needs to be recompiled can be difficult.
  
! Note that @command{gnatmake}
  takes into account all the Ada 95 rules that
  establish dependencies among units. These include dependencies that result
  from inlining subprogram bodies, and from
  generic instantiation. Unlike some other
! Ada make tools, @command{gnatmake} does not rely on the dependencies that were
  found by the compiler on a previous compilation, which may possibly
! be wrong when sources change. @command{gnatmake} determines the exact set of
  dependencies from scratch each time it is run.
  
  @ifset vms
*************** startup menu).
*** 1323,1329 ****
  * Simple Debugging with GPS::
  @end menu
  
- 
  @node Building a New Program with GPS
  @subsection Building a New Program with GPS
  @noindent
--- 1326,1331 ----
*************** contained in a @emph{project} (also know
*** 1332,1338 ****
  a collection of properties such
  as source directories, identities of main subprograms, tool switches, etc.,
  and their associated values.
! (See @ref{GNAT Project Manager}, for details.)
  In order to run GPS, you will need to either create a new project
  or else open an existing one.
  
--- 1334,1340 ----
  a collection of properties such
  as source directories, identities of main subprograms, tool switches, etc.,
  and their associated values.
! See @ref{GNAT Project Manager} for details.
  In order to run GPS, you will need to either create a new project
  or else open an existing one.
  
*************** Select @code{File}, then @code{Save As},
*** 1430,1436 ****
  The file will be saved in the same directory you specified as the
  location of the default project file.
  
- 
  @item @emph{Updating the project file}
  
  You need to add the new source file to the project.
--- 1432,1437 ----
*************** Close the GPS window (or select @code{Fi
*** 1464,1471 ****
  terminate this GPS session.
  @end enumerate
  
- 
- 
  @node Simple Debugging with GPS
  @subsection Simple Debugging with GPS
  @noindent
--- 1465,1470 ----
*************** Right click on @code{N}, select @code{De
*** 1573,1579 ****
  You will see information about @code{N} appear in the @code{Debugger Data}
  pane, showing the value as 5.
  
- 
  @item @emph{Assigning a new value to a variable}
  
  Right click on the @code{N} in the @code{Debugger Data} pane, and
--- 1572,1577 ----
*************** The console window will disappear.
*** 1609,1615 ****
  @end enumerate
  @end enumerate
  
- 
  @node Introduction to Glide and GVD
  @section Introduction to Glide and GVD
  @cindex Glide
--- 1607,1612 ----
*************** Form feed, @code{16#0C#}
*** 1938,1944 ****
  
  @noindent
  Source files are in standard text file format. In addition, GNAT will
! recognize a wide variety of stream formats, in which the end of physical
  physical lines is marked by any of the following sequences:
  @code{LF}, @code{CR}, @code{CR-LF}, or @code{LF-CR}. This is useful
  in accommodating files that are imported from other operating systems.
--- 1935,1941 ----
  
  @noindent
  Source files are in standard text file format. In addition, GNAT will
! recognize a wide variety of stream formats, in which the end of
  physical lines is marked by any of the following sequences:
  @code{LF}, @code{CR}, @code{CR-LF}, or @code{LF-CR}. This is useful
  in accommodating files that are imported from other operating systems.
*************** normally it will be placed in the @file{
*** 2283,2289 ****
  file used to hold configuration
  pragmas that apply to a complete compilation environment.
  For more details on how the @file{gnat.adc} file is created and used
! @pxref{Handling of Configuration Pragmas}
  @cindex @file{gnat.adc}
  
  @ifclear vms
--- 2280,2286 ----
  file used to hold configuration
  pragmas that apply to a complete compilation environment.
  For more details on how the @file{gnat.adc} file is created and used
! see @ref{Handling of Configuration Pragmas}.
  @cindex @file{gnat.adc}
  
  @ifclear vms
*************** $ gcc -c -x ada peculiar_file_name.sim
*** 2300,2306 ****
  @end ifclear
  
  @noindent
! @code{gnatmake} handles non-standard file names in the usual manner (the
  non-standard file name for the main program is simply used as the
  argument to gnatmake). Note that if the extension is also non-standard,
  then it must be included in the gnatmake command, it may not be omitted.
--- 2297,2303 ----
  @end ifclear
  
  @noindent
! @command{gnatmake} handles non-standard file names in the usual manner (the
  non-standard file name for the main program is simply used as the
  argument to gnatmake). Note that if the extension is also non-standard,
  then it must be included in the gnatmake command, it may not be omitted.
*************** example, if the @code{make} utility is u
*** 2587,2593 ****
  the rule for an Ada object file must mention all the source files on
  which the object file depends, according to the above definition.
  The determination of the necessary
! recompilations is done automatically when one uses @code{gnatmake}.
  @end itemize
  
  @node The Ada Library Information Files
--- 2584,2590 ----
  the rule for an Ada object file must mention all the source files on
  which the object file depends, according to the above definition.
  The determination of the necessary
! recompilations is done automatically when one uses @command{gnatmake}.
  @end itemize
  
  @node The Ada Library Information Files
*************** Main program information (including prio
*** 2613,2619 ****
  as well as the wide character encoding used during compilation).
  
  @item
! List of arguments used in the @code{gcc} command for the compilation
  
  @item
  Attributes of the unit, including configuration pragmas used, an indication
--- 2610,2616 ----
  as well as the wide character encoding used during compilation).
  
  @item
! List of arguments used in the @command{gcc} command for the compilation
  
  @item
  Attributes of the unit, including configuration pragmas used, an indication
*************** in section B.4 of the Ada 95 Reference M
*** 2965,2970 ****
--- 2962,2989 ----
  Data will be passed according to the conventions described
  in section B.3 of the Ada 95 Reference Manual.
  
+ @findex C varargs function
+ @cindex Intefacing to C varargs function
+ @cindex varargs function intefacs
+ @item C varargs function
+ In C, @code{varargs} allows a function to take a variable number of
+ arguments. There is no direct equivalent in this to Ada. One
+ approach that can be used is to create a C wrapper for each
+ different profile and then interface to this C wrapper. For
+ example, to print an @code{int} value using @code{printf},
+ create a C function @code{printfi} that takes two arguments, a
+ pointer to a string and an int, and calls @code{printf}.
+ Then in the Ada program, use pragma @code{Import} to
+ interface to printfi.
+ 
+ It may work on some platforms to directly interface to
+ a @code{varargs} function by providing a specific Ada profile
+ for a a particular call. However, this does not work on
+ all platforms, since there is no guarantee that the
+ calling sequence for a two argument normal C function
+ is the same as for calling a @code{varargs} C function with
+ the same two arguments.
+ 
  @cindex Convention Default
  @findex Default
  @item Default
*************** located in this directory:
*** 3191,3197 ****
  @smallexample
  $ cat ./my_script
  #!/bin/sh
! CC $* `gcc -print-libgcc-file-name`
  $ gnatlink ada_unit file1.o file2.o --LINK=./my_script
  @end smallexample
  
--- 3210,3216 ----
  @smallexample
  $ cat ./my_script
  #!/bin/sh
! CC $* `gcc -print-file-name=libgcc.a` `gcc -print-file-name=libgcc_eh.a`
  $ gnatlink ada_unit file1.o file2.o --LINK=./my_script
  @end smallexample
  
*************** class Origin @{
*** 3259,3265 ****
  class A : public Origin @{
   public:
    void method1 (void);
!   virtual void method2 (int v);
    A();
    int   a_value;
  @};
--- 3278,3284 ----
  class A : public Origin @{
   public:
    void method1 (void);
!   void method2 (int v);
    A();
    int   a_value;
  @};
*************** directory designated by the logical name
*** 3462,3474 ****
  GNAT uses the current directory for temporary files.
  @end ifset
  
- 
  @c *************************
  @node Compiling Using gcc
! @chapter Compiling Using @code{gcc}
  
  @noindent
! This chapter discusses how to compile Ada programs using the @code{gcc}
  command. It also describes the set of switches
  that can be used to control the behavior of the compiler.
  @menu
--- 3481,3492 ----
  GNAT uses the current directory for temporary files.
  @end ifset
  
  @c *************************
  @node Compiling Using gcc
! @chapter Compiling Using @command{gcc}
  
  @noindent
! This chapter discusses how to compile Ada programs using the @command{gcc}
  command. It also describes the set of switches
  that can be used to control the behavior of the compiler.
  @menu
*************** that can be used to control the behavior
*** 3484,3490 ****
  
  @noindent
  The first step in creating an executable program is to compile the units
! of the program using the @code{gcc} command. You must compile the
  following files:
  
  @itemize @bullet
--- 3502,3508 ----
  
  @noindent
  The first step in creating an executable program is to compile the units
! of the program using the @command{gcc} command. You must compile the
  following files:
  
  @itemize @bullet
*************** having an extension
*** 3555,3561 ****
  @file{.ads} for a spec or @file{.adb} for a body).
  @ifclear vms
  You specify the
! @option{-c} switch to tell @code{gcc} to compile, but not link, the file.
  @end ifclear
  The result of a successful compilation is an object file, which has the
  same name as the source file but an extension of @file{.o} and an Ada
--- 3573,3579 ----
  @file{.ads} for a spec or @file{.adb} for a body).
  @ifclear vms
  You specify the
! @option{-c} switch to tell @command{gcc} to compile, but not link, the file.
  @end ifclear
  The result of a successful compilation is an object file, which has the
  same name as the source file but an extension of @file{.o} and an Ada
*************** file in any directory using an absolute 
*** 3566,3582 ****
  containing the directory information.
  
  @findex gnat1
! @code{gcc} is actually a driver program that looks at the extensions of
  the file arguments and loads the appropriate compiler. For example, the
  GNU C compiler is @file{cc1}, and the Ada compiler is @file{gnat1}.
  These programs are in directories known to the driver program (in some
  configurations via environment variables you set), but need not be in
! your path. The @code{gcc} driver also calls the assembler and any other
  utilities needed to complete the generation of the required object
  files.
  
! It is possible to supply several file names on the same @code{gcc}
! command. This causes @code{gcc} to call the appropriate compiler for
  each file. For example, the following command lists three separate
  files to be compiled:
  
--- 3584,3600 ----
  containing the directory information.
  
  @findex gnat1
! @command{gcc} is actually a driver program that looks at the extensions of
  the file arguments and loads the appropriate compiler. For example, the
  GNU C compiler is @file{cc1}, and the Ada compiler is @file{gnat1}.
  These programs are in directories known to the driver program (in some
  configurations via environment variables you set), but need not be in
! your path. The @command{gcc} driver also calls the assembler and any other
  utilities needed to complete the generation of the required object
  files.
  
! It is possible to supply several file names on the same @command{gcc}
! command. This causes @command{gcc} to call the appropriate compiler for
  each file. For example, the following command lists three separate
  files to be compiled:
  
*************** except for
*** 3596,3605 ****
  @end ifclear
  
  @node Switches for gcc
! @section Switches for @code{gcc}
  
  @noindent
! The @code{gcc} command accepts switches that control the
  compilation process. These switches are fully described in this section.
  First we briefly list all the switches, in alphabetical order, then we
  describe the switches in more detail in functionally grouped sections.
--- 3614,3623 ----
  @end ifclear
  
  @node Switches for gcc
! @section Switches for @command{gcc}
  
  @noindent
! The @command{gcc} command accepts switches that control the
  compilation process. These switches are fully described in this section.
  First we briefly list all the switches, in alphabetical order, then we
  describe the switches in more detail in functionally grouped sections.
*************** describe the switches in more detail in 
*** 3608,3617 ****
  * Output and Error Message Control::
  * Warning Message Control::
  * Debugging and Assertion Control::
- * Run-Time Checks::
- * Stack Overflow Checking::
  * Validity Checking::
  * Style Checking::
  * Using gcc for Syntax Checking::
  * Using gcc for Semantic Checking::
  * Compiling Ada 83 Programs::
--- 3626,3635 ----
  * Output and Error Message Control::
  * Warning Message Control::
  * Debugging and Assertion Control::
  * Validity Checking::
  * Style Checking::
+ * Run-Time Checks::
+ * Stack Overflow Checking::
  * Using gcc for Syntax Checking::
  * Using gcc for Semantic Checking::
  * Compiling Ada 83 Programs::
*************** describe the switches in more detail in 
*** 3623,3628 ****
--- 3641,3647 ----
  * Exception Handling Control::
  * Units to Sources Mapping Files::
  * Integrated Preprocessing::
+ * Code Generation Control::
  @ifset vms
  * Return Codes::
  @end ifset
*************** describe the switches in more detail in 
*** 3631,3706 ****
  @table @option
  @c !sort!
  @ifclear vms
! @cindex @option{-b} (@code{gcc})
  @item -b @var{target}
  Compile your program to run on @var{target}, which is the name of a
  system configuration. You must have a GNAT cross-compiler built if
  @var{target} is not the same as your host system.
  
  @item -B@var{dir}
! @cindex @option{-B} (@code{gcc})
  Load compiler executables (for example, @code{gnat1}, the Ada compiler)
  from @var{dir} instead of the default location. Only use this switch
  when multiple versions of the GNAT compiler are available. See the
! @code{gcc} manual page for further details. You would normally use the
  @option{-b} or @option{-V} switch instead.
  
  @item -c
! @cindex @option{-c} (@code{gcc})
  Compile. Always use this switch when compiling Ada programs.
  
! Note: for some other languages when using @code{gcc}, notably in
  the case of C and C++, it is possible to use
! use @code{gcc} without a @option{-c} switch to
  compile and link in one step. In the case of GNAT, you
  cannot use this approach, because the binder must be run
! and @code{gcc} cannot be used to run the GNAT binder.
  @end ifclear
  
  @item -fno-inline
! @cindex @option{-fno-inline} (@code{gcc})
  Suppresses all back-end inlining, even if other optimization or inlining
  switches are set.
  This includes suppression of inlining that results
  from the use of the pragma @code{Inline_Always}.
  See also @option{-gnatn} and @option{-gnatN}.
  
  @item -fstack-check
! @cindex @option{-fstack-check} (@code{gcc})
  Activates stack checking.
! See @ref{Stack Overflow Checking}, for details of the use of this option.
  
  @item ^-g^/DEBUG^
! @cindex @option{^-g^/DEBUG^} (@code{gcc})
  Generate debugging information. This information is stored in the object
  file and copied from there to the final executable file by the linker,
  where it can be read by the debugger. You must use the
  @option{^-g^/DEBUG^} switch if you plan on using the debugger.
  
  @item -gnat83
! @cindex @option{-gnat83} (@code{gcc})
  Enforce Ada 83 restrictions.
  
  @item -gnata
! @cindex @option{-gnata} (@code{gcc})
  Assertions enabled. @code{Pragma Assert} and @code{pragma Debug} to be
  activated.
  
  @item -gnatA
! @cindex @option{-gnatA} (@code{gcc})
  Avoid processing @file{gnat.adc}. If a gnat.adc file is present,
  it will be ignored.
  
  @item -gnatb
! @cindex @option{-gnatb} (@code{gcc})
  Generate brief messages to @file{stderr} even if verbose mode set.
  
  @item -gnatc
! @cindex @option{-gnatc} (@code{gcc})
  Check syntax and semantics only (no code generation attempted).
  
  @item -gnatd
! @cindex @option{-gnatd} (@code{gcc})
  Specify debug options for the compiler. The string of characters after
  the @option{-gnatd} specify the specific debug options. The possible
  characters are 0-9, a-z, A-Z, optionally preceded by a dot. See
--- 3650,3731 ----
  @table @option
  @c !sort!
  @ifclear vms
! @cindex @option{-b} (@command{gcc})
  @item -b @var{target}
  Compile your program to run on @var{target}, which is the name of a
  system configuration. You must have a GNAT cross-compiler built if
  @var{target} is not the same as your host system.
  
  @item -B@var{dir}
! @cindex @option{-B} (@command{gcc})
  Load compiler executables (for example, @code{gnat1}, the Ada compiler)
  from @var{dir} instead of the default location. Only use this switch
  when multiple versions of the GNAT compiler are available. See the
! @command{gcc} manual page for further details. You would normally use the
  @option{-b} or @option{-V} switch instead.
  
  @item -c
! @cindex @option{-c} (@command{gcc})
  Compile. Always use this switch when compiling Ada programs.
  
! Note: for some other languages when using @command{gcc}, notably in
  the case of C and C++, it is possible to use
! use @command{gcc} without a @option{-c} switch to
  compile and link in one step. In the case of GNAT, you
  cannot use this approach, because the binder must be run
! and @command{gcc} cannot be used to run the GNAT binder.
  @end ifclear
  
  @item -fno-inline
! @cindex @option{-fno-inline} (@command{gcc})
  Suppresses all back-end inlining, even if other optimization or inlining
  switches are set.
  This includes suppression of inlining that results
  from the use of the pragma @code{Inline_Always}.
  See also @option{-gnatn} and @option{-gnatN}.
  
+ @item -fno-strict-aliasing
+ @cindex @option{-fno-strict-aliasing} (@command{gcc})
+ Causes the compiler to avoid assumptions regarding non-aliasing
+ of objects of different types. See
+ @ref{Optimization and Strict Aliasing} for details.
+ 
  @item -fstack-check
! @cindex @option{-fstack-check} (@command{gcc})
  Activates stack checking.
! See @ref{Stack Overflow Checking} for details of the use of this option.
  
  @item ^-g^/DEBUG^
! @cindex @option{^-g^/DEBUG^} (@command{gcc})
  Generate debugging information. This information is stored in the object
  file and copied from there to the final executable file by the linker,
  where it can be read by the debugger. You must use the
  @option{^-g^/DEBUG^} switch if you plan on using the debugger.
  
  @item -gnat83
! @cindex @option{-gnat83} (@command{gcc})
  Enforce Ada 83 restrictions.
  
  @item -gnata
! @cindex @option{-gnata} (@command{gcc})
  Assertions enabled. @code{Pragma Assert} and @code{pragma Debug} to be
  activated.
  
  @item -gnatA
! @cindex @option{-gnatA} (@command{gcc})
  Avoid processing @file{gnat.adc}. If a gnat.adc file is present,
  it will be ignored.
  
  @item -gnatb
! @cindex @option{-gnatb} (@command{gcc})
  Generate brief messages to @file{stderr} even if verbose mode set.
  
  @item -gnatc
! @cindex @option{-gnatc} (@command{gcc})
  Check syntax and semantics only (no code generation attempted).
  
  @item -gnatd
! @cindex @option{-gnatd} (@command{gcc})
  Specify debug options for the compiler. The string of characters after
  the @option{-gnatd} specify the specific debug options. The possible
  characters are 0-9, a-z, A-Z, optionally preceded by a dot. See
*************** programmers, and these are documented at
*** 3710,3768 ****
  users guide.
  
  @item -gnatD
! @cindex @option{-gnatD} (@code{gcc})
! Output expanded source files for source level debugging. This switch
  also suppress generation of cross-reference information
  (see @option{-gnatx}).
  
  @item -gnatec=@var{path}
! @cindex @option{-gnatec} (@code{gcc})
  Specify a configuration pragma file
  @ifclear vms
  (the equal sign is optional)
  @end ifclear
! (see @ref{The Configuration Pragmas Files}).
  
  @item ^-gnateD^/DATA_PREPROCESSING=^symbol[=value]
! @cindex @option{-gnateD} (@code{gcc})
  Defines a symbol, associated with value, for preprocessing.
! (see @ref{Integrated Preprocessing})
  
  @item -gnatef
! @cindex @option{-gnatef} (@code{gcc})
  Display full source path name in brief error messages.
  
  @item -gnatem=@var{path}
! @cindex @option{-gnatem} (@code{gcc})
  Specify a mapping file
  @ifclear vms
  (the equal sign is optional)
  @end ifclear
! (see @ref{Units to Sources Mapping Files}).
  
  @item -gnatep=@var{file}
! @cindex @option{-gnatep} (@code{gcc})
  Specify a preprocessing data file
  @ifclear vms
  (the equal sign is optional)
  @end ifclear
! (see @ref{Integrated Preprocessing}).
  
  @item -gnatE
! @cindex @option{-gnatE} (@code{gcc})
  Full dynamic elaboration checks.
  
  @item -gnatf
! @cindex @option{-gnatf} (@code{gcc})
  Full errors. Multiple errors per line, all undefined references, do not
  attempt to suppress cascaded errors.
  
  @item -gnatF
! @cindex @option{-gnatF} (@code{gcc})
  Externals names are folded to all uppercase.
  
  @item -gnatg
! @cindex @option{-gnatg} (@code{gcc})
  Internal GNAT implementation mode. This should not be used for
  applications programs, it is intended only for use by the compiler
  and its run-time library. For documentation, see the GNAT sources.
--- 3735,3793 ----
  users guide.
  
  @item -gnatD
! @cindex @option{-gnatD} (@command{gcc})
! Create expanded source files for source level debugging. This switch
  also suppress generation of cross-reference information
  (see @option{-gnatx}).
  
  @item -gnatec=@var{path}
! @cindex @option{-gnatec} (@command{gcc})
  Specify a configuration pragma file
  @ifclear vms
  (the equal sign is optional)
  @end ifclear
! (@pxref{The Configuration Pragmas Files}).
  
  @item ^-gnateD^/DATA_PREPROCESSING=^symbol[=value]
! @cindex @option{-gnateD} (@command{gcc})
  Defines a symbol, associated with value, for preprocessing.
! (@pxref{Integrated Preprocessing}).
  
  @item -gnatef
! @cindex @option{-gnatef} (@command{gcc})
  Display full source path name in brief error messages.
  
  @item -gnatem=@var{path}
! @cindex @option{-gnatem} (@command{gcc})
  Specify a mapping file
  @ifclear vms
  (the equal sign is optional)
  @end ifclear
! (@pxref{Units to Sources Mapping Files}).
  
  @item -gnatep=@var{file}
! @cindex @option{-gnatep} (@command{gcc})
  Specify a preprocessing data file
  @ifclear vms
  (the equal sign is optional)
  @end ifclear
! (@pxref{Integrated Preprocessing}).
  
  @item -gnatE
! @cindex @option{-gnatE} (@command{gcc})
  Full dynamic elaboration checks.
  
  @item -gnatf
! @cindex @option{-gnatf} (@command{gcc})
  Full errors. Multiple errors per line, all undefined references, do not
  attempt to suppress cascaded errors.
  
  @item -gnatF
! @cindex @option{-gnatF} (@command{gcc})
  Externals names are folded to all uppercase.
  
  @item -gnatg
! @cindex @option{-gnatg} (@command{gcc})
  Internal GNAT implementation mode. This should not be used for
  applications programs, it is intended only for use by the compiler
  and its run-time library. For documentation, see the GNAT sources.
*************** are generated on unreferenced entities, 
*** 3771,3821 ****
  as errors.
  
  @item -gnatG
! @cindex @option{-gnatG} (@code{gcc})
  List generated expanded code in source form.
  
  @item ^-gnath^/HELP^
! @cindex @option{^-gnath^/HELP^} (@code{gcc})
  Output usage information. The output is written to @file{stdout}.
  
  @item ^-gnati^/IDENTIFIER_CHARACTER_SET=^@var{c}
! @cindex @option{^-gnati^/IDENTIFIER_CHARACTER_SET^} (@code{gcc})
  Identifier character set
  @ifclear vms
  (@var{c}=1/2/3/4/8/9/p/f/n/w).
  @end ifclear
  @ifset vms
  For details of the possible selections for @var{c},
! see @xref{Character Set Control}.
  @end ifset
  
  @item -gnatk=@var{n}
! @cindex @option{-gnatk} (@code{gcc})
  Limit file names to @var{n} (1-999) characters ^(@code{k} = krunch)^^.
  
  @item -gnatl
! @cindex @option{-gnatl} (@code{gcc})
  Output full source listing with embedded error messages.
  
  @item -gnatL
! @cindex @option{-gnatL} (@code{gcc})
  Use the longjmp/setjmp method for exception handling
  
  @item -gnatm=@var{n}
! @cindex @option{-gnatm} (@code{gcc})
  Limit number of detected error or warning messages to @var{n}
  where @var{n} is in the range 1..999_999. The default setting if
  no switch is given is 9999. Compilation is terminated if this
  limit is exceeded.
  
  @item -gnatn
! @cindex @option{-gnatn} (@code{gcc})
  Activate inlining for subprograms for which
  pragma @code{inline} is specified. This inlining is performed
  by the GCC back-end.
  
  @item -gnatN
! @cindex @option{-gnatN} (@code{gcc})
  Activate front end inlining for subprograms for which
  pragma @code{Inline} is specified. This inlining is performed
  by the front end and will be visible in the
--- 3796,3846 ----
  as errors.
  
  @item -gnatG
! @cindex @option{-gnatG} (@command{gcc})
  List generated expanded code in source form.
  
  @item ^-gnath^/HELP^
! @cindex @option{^-gnath^/HELP^} (@command{gcc})
  Output usage information. The output is written to @file{stdout}.
  
  @item ^-gnati^/IDENTIFIER_CHARACTER_SET=^@var{c}
! @cindex @option{^-gnati^/IDENTIFIER_CHARACTER_SET^} (@command{gcc})
  Identifier character set
  @ifclear vms
  (@var{c}=1/2/3/4/8/9/p/f/n/w).
  @end ifclear
  @ifset vms
  For details of the possible selections for @var{c},
! see @ref{Character Set Control}.
  @end ifset
  
  @item -gnatk=@var{n}
! @cindex @option{-gnatk} (@command{gcc})
  Limit file names to @var{n} (1-999) characters ^(@code{k} = krunch)^^.
  
  @item -gnatl
! @cindex @option{-gnatl} (@command{gcc})
  Output full source listing with embedded error messages.
  
  @item -gnatL
! @cindex @option{-gnatL} (@command{gcc})
  Use the longjmp/setjmp method for exception handling
  
  @item -gnatm=@var{n}
! @cindex @option{-gnatm} (@command{gcc})
  Limit number of detected error or warning messages to @var{n}
  where @var{n} is in the range 1..999_999. The default setting if
  no switch is given is 9999. Compilation is terminated if this
  limit is exceeded.
  
  @item -gnatn
! @cindex @option{-gnatn} (@command{gcc})
  Activate inlining for subprograms for which
  pragma @code{inline} is specified. This inlining is performed
  by the GCC back-end.
  
  @item -gnatN
! @cindex @option{-gnatN} (@command{gcc})
  Activate front end inlining for subprograms for which
  pragma @code{Inline} is specified. This inlining is performed
  by the front end and will be visible in the
*************** to specify both options. There are a few
*** 3830,3905 ****
  catches that cannot be dealt with in the front-end.
  
  @item -gnato
! @cindex @option{-gnato} (@code{gcc})
  Enable numeric overflow checking (which is not normally enabled by
  default). Not that division by zero is a separate check that is not
  controlled by this switch (division by zero checking is on by default).
  
  @item -gnatp
! @cindex @option{-gnatp} (@code{gcc})
  Suppress all checks.
  
  @item -gnatP
! @cindex @option{-gnatP} (@code{gcc})
  Enable polling. This is required on some systems (notably Windows NT) to
  obtain asynchronous abort and asynchronous transfer of control capability.
  See the description of pragma Polling in the GNAT Reference Manual for
  full details.
  
  @item -gnatq
! @cindex @option{-gnatq} (@code{gcc})
  Don't quit; try semantics, even if parse errors.
  
  @item -gnatQ
! @cindex @option{-gnatQ} (@code{gcc})
  Don't quit; generate @file{ALI} and tree files even if illegalities.
  
  @item ^-gnatR[0/1/2/3[s]]^/REPRESENTATION_INFO^
! @cindex @option{-gnatR} (@code{gcc})
  Output representation information for declared types and objects.
  
  @item -gnats
! @cindex @option{-gnats} (@code{gcc})
  Syntax check only.
  
  @item -gnatS
! @cindex @option{-gnatS} (@code{gcc})
  Print package Standard.
  
  @item -gnatt
! @cindex @option{-gnatt} (@code{gcc})
  Generate tree output file.
  
  @item ^-gnatT^/TABLE_MULTIPLIER=^@var{nnn}
! @cindex @option{^-gnatT^/TABLE_MULTIPLIER^} (@code{gcc})
  All compiler tables start at @var{nnn} times usual starting size.
  
  @item -gnatu
! @cindex @option{-gnatu} (@code{gcc})
  List units for this compilation.
  
  @item -gnatU
! @cindex @option{-gnatU} (@code{gcc})
  Tag all error messages with the unique string ``error:''
  
  @item -gnatv
! @cindex @option{-gnatv} (@code{gcc})
  Verbose mode. Full error output with source lines to @file{stdout}.
  
  @item -gnatV
! @cindex @option{-gnatV} (@code{gcc})
  Control level of validity checking. See separate section describing
  this feature.
  
  @item ^-gnatw@var{xxx}^/WARNINGS=(@var{option}[,...])^
! @cindex @option{^-gnatw^/WARNINGS^} (@code{gcc})
  Warning mode where
  ^@var{xxx} is a string of option letters that^the list of options^ denotes
  the exact warnings that
! are enabled or disabled. (see @ref{Warning Message Control})
  
  @item ^-gnatW^/WIDE_CHARACTER_ENCODING=^@var{e}
! @cindex @option{^-gnatW^/WIDE_CHARACTER_ENCODING^} (@code{gcc})
  Wide character encoding method
  @ifclear vms
  (@var{e}=n/h/u/s/e/8).
--- 3855,3930 ----
  catches that cannot be dealt with in the front-end.
  
  @item -gnato
! @cindex @option{-gnato} (@command{gcc})
  Enable numeric overflow checking (which is not normally enabled by
  default). Not that division by zero is a separate check that is not
  controlled by this switch (division by zero checking is on by default).
  
  @item -gnatp
! @cindex @option{-gnatp} (@command{gcc})
  Suppress all checks.
  
  @item -gnatP
! @cindex @option{-gnatP} (@command{gcc})
  Enable polling. This is required on some systems (notably Windows NT) to
  obtain asynchronous abort and asynchronous transfer of control capability.
  See the description of pragma Polling in the GNAT Reference Manual for
  full details.
  
  @item -gnatq
! @cindex @option{-gnatq} (@command{gcc})
  Don't quit; try semantics, even if parse errors.
  
  @item -gnatQ
! @cindex @option{-gnatQ} (@command{gcc})
  Don't quit; generate @file{ALI} and tree files even if illegalities.
  
  @item ^-gnatR[0/1/2/3[s]]^/REPRESENTATION_INFO^
! @cindex @option{-gnatR} (@command{gcc})
  Output representation information for declared types and objects.
  
  @item -gnats
! @cindex @option{-gnats} (@command{gcc})
  Syntax check only.
  
  @item -gnatS
! @cindex @option{-gnatS} (@command{gcc})
  Print package Standard.
  
  @item -gnatt
! @cindex @option{-gnatt} (@command{gcc})
  Generate tree output file.
  
  @item ^-gnatT^/TABLE_MULTIPLIER=^@var{nnn}
! @cindex @option{^-gnatT^/TABLE_MULTIPLIER^} (@command{gcc})
  All compiler tables start at @var{nnn} times usual starting size.
  
  @item -gnatu
! @cindex @option{-gnatu} (@command{gcc})
  List units for this compilation.
  
  @item -gnatU
! @cindex @option{-gnatU} (@command{gcc})
  Tag all error messages with the unique string ``error:''
  
  @item -gnatv
! @cindex @option{-gnatv} (@command{gcc})
  Verbose mode. Full error output with source lines to @file{stdout}.
  
  @item -gnatV
! @cindex @option{-gnatV} (@command{gcc})
  Control level of validity checking. See separate section describing
  this feature.
  
  @item ^-gnatw@var{xxx}^/WARNINGS=(@var{option}[,...])^
! @cindex @option{^-gnatw^/WARNINGS^} (@command{gcc})
  Warning mode where
  ^@var{xxx} is a string of option letters that^the list of options^ denotes
  the exact warnings that
! are enabled or disabled (@pxref{Warning Message Control}).
  
  @item ^-gnatW^/WIDE_CHARACTER_ENCODING=^@var{e}
! @cindex @option{^-gnatW^/WIDE_CHARACTER_ENCODING^} (@command{gcc})
  Wide character encoding method
  @ifclear vms
  (@var{e}=n/h/u/s/e/8).
*************** Wide character encoding method
*** 3909,3923 ****
  @end ifset
  
  @item -gnatx
! @cindex @option{-gnatx} (@code{gcc})
  Suppress generation of cross-reference information.
  
  @item ^-gnaty^/STYLE_CHECKS=(option,option..)^
! @cindex @option{^-gnaty^/STYLE_CHECKS^} (@code{gcc})
! Enable built-in style checks. (see @ref{Style Checking})
  
  @item ^-gnatz^/DISTRIBUTION_STUBS=^@var{m}
! @cindex @option{^-gnatz^/DISTRIBUTION_STUBS^} (@code{gcc})
  Distribution stub generation and compilation
  @ifclear vms
  (@var{m}=r/c for receiver/caller stubs).
--- 3934,3948 ----
  @end ifset
  
  @item -gnatx
! @cindex @option{-gnatx} (@command{gcc})
  Suppress generation of cross-reference information.
  
  @item ^-gnaty^/STYLE_CHECKS=(option,option..)^
! @cindex @option{^-gnaty^/STYLE_CHECKS^} (@command{gcc})
! Enable built-in style checks (@pxref{Style Checking}).
  
  @item ^-gnatz^/DISTRIBUTION_STUBS=^@var{m}
! @cindex @option{^-gnatz^/DISTRIBUTION_STUBS^} (@command{gcc})
  Distribution stub generation and compilation
  @ifclear vms
  (@var{m}=r/c for receiver/caller stubs).
*************** to be generated and compiled).
*** 3931,3944 ****
  Use the zero cost method for exception handling
  
  @item ^-I^/SEARCH=^@var{dir}
! @cindex @option{^-I^/SEARCH^} (@code{gcc})
  @cindex RTL
  Direct GNAT to search the @var{dir} directory for source files needed by
  the current compilation
  (@pxref{Search Paths and the Run-Time Library (RTL)}).
  
  @item ^-I-^/NOCURRENT_DIRECTORY^
! @cindex @option{^-I-^/NOCURRENT_DIRECTORY^} (@code{gcc})
  @cindex RTL
  Except for the source file named in the command line, do not look for source
  files in the directory containing the source file named in the command line
--- 3956,3969 ----
  Use the zero cost method for exception handling
  
  @item ^-I^/SEARCH=^@var{dir}
! @cindex @option{^-I^/SEARCH^} (@command{gcc})
  @cindex RTL
  Direct GNAT to search the @var{dir} directory for source files needed by
  the current compilation
  (@pxref{Search Paths and the Run-Time Library (RTL)}).
  
  @item ^-I-^/NOCURRENT_DIRECTORY^
! @cindex @option{^-I-^/NOCURRENT_DIRECTORY^} (@command{gcc})
  @cindex RTL
  Except for the source file named in the command line, do not look for source
  files in the directory containing the source file named in the command line
*************** This may result in less efficient code, 
*** 3956,3963 ****
  in order to compile large and/or nested @code{case} statements.
  
  @item -o @var{file}
! @cindex @option{-o} (@code{gcc})
! This switch is used in @code{gcc} to redirect the generated object file
  and its associated ALI file. Beware of this switch with GNAT, because it may
  cause the object file and ALI file to have different names which in turn
  may confuse the binder and the linker.
--- 3981,3988 ----
  in order to compile large and/or nested @code{case} statements.
  
  @item -o @var{file}
! @cindex @option{-o} (@command{gcc})
! This switch is used in @command{gcc} to redirect the generated object file
  and its associated ALI file. Beware of this switch with GNAT, because it may
  cause the object file and ALI file to have different names which in turn
  may confuse the binder and the linker.
*************** Library (RTL) ALI files.
*** 3975,3981 ****
  
  @ifclear vms
  @item -O[@var{n}]
! @cindex @option{-O} (@code{gcc})
  @var{n} controls the optimization level.
  
  @table @asis
--- 4000,4006 ----
  
  @ifclear vms
  @item -O[@var{n}]
! @cindex @option{-O} (@command{gcc})
  @var{n} controls the optimization level.
  
  @table @asis
*************** Extensive optimization
*** 3993,3999 ****
  Extensive optimization with automatic inlining of subprograms not
  specified by pragma @code{Inline}. This applies only to
  inlining within a unit. For details on control of inlining
! see @xref{Subprogram Inlining Control}.
  @end table
  @end ifclear
  
--- 4018,4024 ----
  Extensive optimization with automatic inlining of subprograms not
  specified by pragma @code{Inline}. This applies only to
  inlining within a unit. For details on control of inlining
! see @ref{Subprogram Inlining Control}.
  @end table
  @end ifclear
  
*************** usually, but not always, improves the pe
*** 4038,4071 ****
  
  @ifclear vms
  @item -pass-exit-codes
! @cindex @option{-pass-exit-codes} (@code{gcc})
  Catch exit codes from the compiler and use the most meaningful as
  exit status.
  @end ifclear
  
  @item --RTS=@var{rts-path}
! @cindex @option{--RTS} (@code{gcc})
  Specifies the default location of the runtime library. Same meaning as the
! equivalent @code{gnatmake} flag (see @ref{Switches for gnatmake}).
  
  @item ^-S^/ASM^
! @cindex @option{^-S^/ASM^} (@code{gcc})
  ^Used in place of @option{-c} to^Used to^
  cause the assembler source file to be
  generated, using @file{^.s^.S^} as the extension,
  instead of the object file.
  This may be useful if you need to examine the generated assembly code.
  
  @item ^-v^/VERBOSE^
! @cindex @option{^-v^/VERBOSE^} (@code{gcc})
! Show commands generated by the @code{gcc} driver. Normally used only for
  debugging purposes or if you need to be sure what version of the
  compiler you are executing.
  
  @ifclear vms
  @item -V @var{ver}
! @cindex @option{-V} (@code{gcc})
! Execute @var{ver} version of the compiler. This is the @code{gcc}
  version, not the GNAT version.
  @end ifclear
  
--- 4063,4102 ----
  
  @ifclear vms
  @item -pass-exit-codes
! @cindex @option{-pass-exit-codes} (@command{gcc})
  Catch exit codes from the compiler and use the most meaningful as
  exit status.
  @end ifclear
  
  @item --RTS=@var{rts-path}
! @cindex @option{--RTS} (@command{gcc})
  Specifies the default location of the runtime library. Same meaning as the
! equivalent @command{gnatmake} flag (@pxref{Switches for gnatmake}).
  
  @item ^-S^/ASM^
! @cindex @option{^-S^/ASM^} (@command{gcc})
  ^Used in place of @option{-c} to^Used to^
  cause the assembler source file to be
  generated, using @file{^.s^.S^} as the extension,
  instead of the object file.
  This may be useful if you need to examine the generated assembly code.
  
+ @item ^-fverbose-asm^/VERBOSE_ASM^
+ @cindex @option{^-fverbose-asm^/VERBOSE_ASM^} (@command{gcc})
+ ^Used in conjunction with @option{-S}^Used in place of @option{/ASM}^
+ to cause the generated assembly code file to be annotated with variable
+ names, making it significantly easier to follow.
+ 
  @item ^-v^/VERBOSE^
! @cindex @option{^-v^/VERBOSE^} (@command{gcc})
! Show commands generated by the @command{gcc} driver. Normally used only for
  debugging purposes or if you need to be sure what version of the
  compiler you are executing.
  
  @ifclear vms
  @item -V @var{ver}
! @cindex @option{-V} (@command{gcc})
! Execute @var{ver} version of the compiler. This is the @command{gcc}
  version, not the GNAT version.
  @end ifclear
  
*************** is equivalent to specifying the followin
*** 4088,4094 ****
  @end smallexample
  @end ifclear
  
- 
  @c NEED TO CHECK THIS FOR VMS
  
  @noindent
--- 4119,4124 ----
*************** as validity checking options (see descri
*** 4132,4138 ****
  @end ifclear
  @end itemize
  
- 
  @node Output and Error Message Control
  @subsection Output and Error Message Control
  @findex stderr
--- 4162,4167 ----
*************** format:
*** 4158,4164 ****
  @table @option
  @c !sort!
  @item -gnatv
! @cindex @option{-gnatv} (@code{gcc})
  @findex stdout
  @ifclear vms
  The v stands for verbose.
--- 4187,4193 ----
  @table @option
  @c !sort!
  @item -gnatv
! @cindex @option{-gnatv} (@command{gcc})
  @findex stdout
  @ifclear vms
  The v stands for verbose.
*************** prefix can be used to search for error m
*** 4185,4191 ****
  used the only source lines output are those with errors.
  
  @item -gnatl
! @cindex @option{-gnatl} (@code{gcc})
  @ifclear vms
  The @code{l} stands for list.
  @end ifclear
--- 4214,4220 ----
  used the only source lines output are those with errors.
  
  @item -gnatl
! @cindex @option{-gnatl} (@command{gcc})
  @ifclear vms
  The @code{l} stands for list.
  @end ifclear
*************** standard output is redirected, a brief s
*** 4219,4232 ****
  warning messages generated.
  
  @item -gnatU
! @cindex @option{-gnatU} (@code{gcc})
  This switch forces all error messages to be preceded by the unique
  string ``error:''. This means that error messages take a few more
  characters in space, but allows easy searching for and identification
  of error messages.
  
  @item -gnatb
! @cindex @option{-gnatb} (@code{gcc})
  @ifclear vms
  The @code{b} stands for brief.
  @end ifclear
--- 4248,4261 ----
  warning messages generated.
  
  @item -gnatU
! @cindex @option{-gnatU} (@command{gcc})
  This switch forces all error messages to be preceded by the unique
  string ``error:''. This means that error messages take a few more
  characters in space, but allows easy searching for and identification
  of error messages.
  
  @item -gnatb
! @cindex @option{-gnatb} (@command{gcc})
  @ifclear vms
  The @code{b} stands for brief.
  @end ifclear
*************** format message or full listing (which as
*** 4237,4243 ****
  @file{stdout} (the standard output file).
  
  @item -gnatm^^=^@var{n}
! @cindex @option{-gnatm} (@code{gcc})
  @ifclear vms
  The @code{m} stands for maximum.
  @end ifclear
--- 4266,4272 ----
  @file{stdout} (the standard output file).
  
  @item -gnatm^^=^@var{n}
! @cindex @option{-gnatm} (@command{gcc})
  @ifclear vms
  The @code{m} stands for maximum.
  @end ifclear
*************** compilation abandoned
*** 4253,4259 ****
  @end smallexample
  
  @item -gnatf
! @cindex @option{-gnatf} (@code{gcc})
  @cindex Error messages, suppressing
  @ifclear vms
  The @code{f} stands for full.
--- 4282,4288 ----
  @end smallexample
  
  @item -gnatf
! @cindex @option{-gnatf} (@command{gcc})
  @cindex Error messages, suppressing
  @ifclear vms
  The @code{f} stands for full.
*************** List possible interpretations for ambigu
*** 4296,4304 ****
  Additional details on incorrect parameters
  @end itemize
  
- 
  @item -gnatq
! @cindex @option{-gnatq} (@code{gcc})
  @ifclear vms
  The @code{q} stands for quit (really ``don't quit'').
  @end ifclear
--- 4325,4332 ----
  Additional details on incorrect parameters
  @end itemize
  
  @item -gnatq
! @cindex @option{-gnatq} (@command{gcc})
  @ifclear vms
  The @code{q} stands for quit (really ``don't quit'').
  @end ifclear
*************** the other hand, the semantic analyzer is
*** 4312,4318 ****
  internal fatal error when given a syntactically invalid tree.
  
  @item -gnatQ
! @cindex @option{-gnatQ} (@code{gcc})
  In normal operation mode, the @file{ALI} file is not generated if any
  illegalities are detected in the program. The use of @option{-gnatQ} forces
  generation of the @file{ALI} file. This file is marked as being in
--- 4340,4346 ----
  internal fatal error when given a syntactically invalid tree.
  
  @item -gnatQ
! @cindex @option{-gnatQ} (@command{gcc})
  In normal operation mode, the @file{ALI} file is not generated if any
  illegalities are detected in the program. The use of @option{-gnatQ} forces
  generation of the @file{ALI} file. This file is marked as being in
*************** causes the tree to be badly malformed, t
*** 4332,4338 ****
  analysis.
  
  When @option{-gnatQ} is used and the generated @file{ALI} file is marked as
! being in error, @code{gnatmake} will attempt to recompile the source when it
  finds such an @file{ALI} file, including with switch @option{-gnatc}.
  
  Note that @option{-gnatQ} has no effect if @option{-gnats} is specified,
--- 4360,4366 ----
  analysis.
  
  When @option{-gnatQ} is used and the generated @file{ALI} file is marked as
! being in error, @command{gnatmake} will attempt to recompile the source when it
  finds such an @file{ALI} file, including with switch @option{-gnatc}.
  
  Note that @option{-gnatQ} has no effect if @option{-gnats} is specified,
*************** since ALI files are never generated if @
*** 4340,4346 ****
  
  @end table
  
- 
  @node Warning Message Control
  @subsection Warning Message Control
  @cindex Warning messages
--- 4368,4373 ----
*************** Unreachable code
*** 4389,4394 ****
--- 4416,4424 ----
  Fixed-point type declarations with a null range
  
  @item
+ Direct_IO or Sequential_IO instantiated with a type that has access values
+ 
+ @item
  Variables that are never assigned a value
  
  @item
*************** Mismatching bounds in an aggregate
*** 4430,4436 ****
  @item
  Attempt to return local value by reference
  
- 
  @item
  Premature instantiation of a generic body
  
--- 4460,4465 ----
*************** Useless exception handlers
*** 4491,4497 ****
  @item
  Accidental hiding of name by child unit
  
- 
  @item
  Access before elaboration detected at compile time
  
--- 4520,4525 ----
*************** warning messages:
*** 4508,4514 ****
  @c !sort!
  @item -gnatwa
  @emph{Activate all optional errors.}
! @cindex @option{-gnatwa} (@code{gcc})
  This switch activates most optional warning messages, see remaining list
  in this section for details on optional warning messages that can be
  individually controlled.  The warnings that are not turned on by this
--- 4536,4542 ----
  @c !sort!
  @item -gnatwa
  @emph{Activate all optional errors.}
! @cindex @option{-gnatwa} (@command{gcc})
  This switch activates most optional warning messages, see remaining list
  in this section for details on optional warning messages that can be
  individually controlled.  The warnings that are not turned on by this
*************** All other optional warnings are turned o
*** 4520,4533 ****
  
  @item -gnatwA
  @emph{Suppress all optional errors.}
! @cindex @option{-gnatwA} (@code{gcc})
  This switch suppresses all optional warning messages, see remaining list
  in this section for details on optional warning messages that can be
  individually controlled.
  
  @item -gnatwc
  @emph{Activate warnings on conditionals.}
! @cindex @option{-gnatwc} (@code{gcc})
  @cindex Conditionals, constant
  This switch activates warnings for conditional expressions used in
  tests that are known to be True or False at compile time. The default
--- 4548,4561 ----
  
  @item -gnatwA
  @emph{Suppress all optional errors.}
! @cindex @option{-gnatwA} (@command{gcc})
  This switch suppresses all optional warning messages, see remaining list
  in this section for details on optional warning messages that can be
  individually controlled.
  
  @item -gnatwc
  @emph{Activate warnings on conditionals.}
! @cindex @option{-gnatwc} (@command{gcc})
  @cindex Conditionals, constant
  This switch activates warnings for conditional expressions used in
  tests that are known to be True or False at compile time. The default
*************** This warning can also be turned on using
*** 4541,4553 ****
  
  @item -gnatwC
  @emph{Suppress warnings on conditionals.}
! @cindex @option{-gnatwC} (@code{gcc})
  This switch suppresses warnings for conditional expressions used in
  tests that are known to be True or False at compile time.
  
  @item -gnatwd
  @emph{Activate warnings on implicit dereferencing.}
! @cindex @option{-gnatwd} (@code{gcc})
  If this switch is set, then the use of a prefix of an access type
  in an indexed component, slice, or selected component without an
  explicit @code{.all} will generate a warning. With this warning
--- 4569,4581 ----
  
  @item -gnatwC
  @emph{Suppress warnings on conditionals.}
! @cindex @option{-gnatwC} (@command{gcc})
  This switch suppresses warnings for conditional expressions used in
  tests that are known to be True or False at compile time.
  
  @item -gnatwd
  @emph{Activate warnings on implicit dereferencing.}
! @cindex @option{-gnatwd} (@command{gcc})
  If this switch is set, then the use of a prefix of an access type
  in an indexed component, slice, or selected component without an
  explicit @code{.all} will generate a warning. With this warning
*************** this warning option.
*** 4560,4566 ****
  
  @item -gnatwD
  @emph{Suppress warnings on implicit dereferencing.}
! @cindex @option{-gnatwD} (@code{gcc})
  @cindex Implicit dereferencing
  @cindex Dereferencing, implicit
  This switch suppresses warnings for implicit dereferences in
--- 4588,4594 ----
  
  @item -gnatwD
  @emph{Suppress warnings on implicit dereferencing.}
! @cindex @option{-gnatwD} (@command{gcc})
  @cindex Implicit dereferencing
  @cindex Dereferencing, implicit
  This switch suppresses warnings for implicit dereferences in
*************** indexed components, slices, and selected
*** 4568,4574 ****
  
  @item -gnatwe
  @emph{Treat warnings as errors.}
! @cindex @option{-gnatwe} (@code{gcc})
  @cindex Warnings, treat as error
  This switch causes warning messages to be treated as errors.
  The warning string still appears, but the warning messages are counted
--- 4596,4602 ----
  
  @item -gnatwe
  @emph{Treat warnings as errors.}
! @cindex @option{-gnatwe} (@command{gcc})
  @cindex Warnings, treat as error
  This switch causes warning messages to be treated as errors.
  The warning string still appears, but the warning messages are counted
*************** as errors, and prevent the generation of
*** 4576,4582 ****
  
  @item -gnatwf
  @emph{Activate warnings on unreferenced formals.}
! @cindex @option{-gnatwf} (@code{gcc})
  @cindex Formals, unreferenced
  This switch causes a warning to be generated if a formal parameter
  is not referenced in the body of the subprogram. This warning can
--- 4604,4610 ----
  
  @item -gnatwf
  @emph{Activate warnings on unreferenced formals.}
! @cindex @option{-gnatwf} (@command{gcc})
  @cindex Formals, unreferenced
  This switch causes a warning to be generated if a formal parameter
  is not referenced in the body of the subprogram. This warning can
*************** also be turned on using @option{-gnatwa}
*** 4584,4590 ****
  
  @item -gnatwF
  @emph{Suppress warnings on unreferenced formals.}
! @cindex @option{-gnatwF} (@code{gcc})
  This switch suppresses warnings for unreferenced formal
  parameters. Note that the
  combination @option{-gnatwu} followed by @option{-gnatwF} has the
--- 4612,4618 ----
  
  @item -gnatwF
  @emph{Suppress warnings on unreferenced formals.}
! @cindex @option{-gnatwF} (@command{gcc})
  This switch suppresses warnings for unreferenced formal
  parameters. Note that the
  combination @option{-gnatwu} followed by @option{-gnatwF} has the
*************** formals.
*** 4593,4599 ****
  
  @item -gnatwg
  @emph{Activate warnings on unrecognized pragmas.}
! @cindex @option{-gnatwg} (@code{gcc})
  @cindex Pragmas, unrecognized
  This switch causes a warning to be generated if an unrecognized
  pragma is encountered. Apart from issuing this warning, the
--- 4621,4627 ----
  
  @item -gnatwg
  @emph{Activate warnings on unrecognized pragmas.}
! @cindex @option{-gnatwg} (@command{gcc})
  @cindex Pragmas, unrecognized
  This switch causes a warning to be generated if an unrecognized
  pragma is encountered. Apart from issuing this warning, the
*************** Manual requirement that such warnings ap
*** 4604,4615 ****
  
  @item -gnatwG
  @emph{Suppress warnings on unrecognized pragmas.}
! @cindex @option{-gnatwG} (@code{gcc})
  This switch suppresses warnings for unrecognized pragmas.
  
  @item -gnatwh
  @emph{Activate warnings on hiding.}
! @cindex @option{-gnatwh} (@code{gcc})
  @cindex Hiding of Declarations
  This switch activates warnings on hiding declarations.
  A declaration is considered hiding
--- 4632,4643 ----
  
  @item -gnatwG
  @emph{Suppress warnings on unrecognized pragmas.}
! @cindex @option{-gnatwG} (@command{gcc})
  This switch suppresses warnings for unrecognized pragmas.
  
  @item -gnatwh
  @emph{Activate warnings on hiding.}
! @cindex @option{-gnatwh} (@command{gcc})
  @cindex Hiding of Declarations
  This switch activates warnings on hiding declarations.
  A declaration is considered hiding
*************** Note that @option{-gnatwa} does not affe
*** 4620,4631 ****
  
  @item -gnatwH
  @emph{Suppress warnings on hiding.}
! @cindex @option{-gnatwH} (@code{gcc})
  This switch suppresses warnings on hiding declarations.
  
  @item -gnatwi
  @emph{Activate warnings on implementation units.}
! @cindex @option{-gnatwi} (@code{gcc})
  This switch activates warnings for a @code{with} of an internal GNAT
  implementation unit, defined as any unit from the @code{Ada},
  @code{Interfaces}, @code{GNAT},
--- 4648,4659 ----
  
  @item -gnatwH
  @emph{Suppress warnings on hiding.}
! @cindex @option{-gnatwH} (@command{gcc})
  This switch suppresses warnings on hiding declarations.
  
  @item -gnatwi
  @emph{Activate warnings on implementation units.}
! @cindex @option{-gnatwi} (@command{gcc})
  This switch activates warnings for a @code{with} of an internal GNAT
  implementation unit, defined as any unit from the @code{Ada},
  @code{Interfaces}, @code{GNAT},
*************** This warning can also be turned on using
*** 4639,4651 ****
  
  @item -gnatwI
  @emph{Disable warnings on implementation units.}
! @cindex @option{-gnatwI} (@code{gcc})
  This switch disables warnings for a @code{with} of an internal GNAT
  implementation unit.
  
  @item -gnatwj
  @emph{Activate warnings on obsolescent features (Annex J).}
! @cindex @option{-gnatwj} (@code{gcc})
  @cindex Features, obsolescent
  @cindex Obsolescent features
  If this warning option is activated, then warnings are generated for
--- 4667,4679 ----
  
  @item -gnatwI
  @emph{Disable warnings on implementation units.}
! @cindex @option{-gnatwI} (@command{gcc})
  This switch disables warnings for a @code{with} of an internal GNAT
  implementation unit.
  
  @item -gnatwj
  @emph{Activate warnings on obsolescent features (Annex J).}
! @cindex @option{-gnatwj} (@command{gcc})
  @cindex Features, obsolescent
  @cindex Obsolescent features
  If this warning option is activated, then warnings are generated for
*************** of the renamed packages (like @code{Text
*** 4657,4681 ****
  would generate many annoying positive warnings. The default is that
  such warnings are not generated.
  
  @item -gnatwJ
  @emph{Suppress warnings on obsolescent features (Annex J).}
! @cindex @option{-gnatwJ} (@code{gcc})
  This switch disables warnings on use of obsolescent features.
  
  @item -gnatwk
  @emph{Activate warnings on variables that could be constants.}
! @cindex @option{-gnatwk} (@code{gcc})
  This switch activates warnings for variables that are initialized but
  never modified, and then could be declared constants.
  
  @item -gnatwK
  @emph{Suppress warnings on variables that could be constants.}
! @cindex @option{-gnatwK} (@code{gcc})
  This switch disables warnings on variables that could be declared constants.
  
  @item -gnatwl
  @emph{Activate warnings for missing elaboration pragmas.}
! @cindex @option{-gnatwl} (@code{gcc})
  @cindex Elaboration, warnings
  This switch activates warnings on missing
  @code{pragma Elaborate_All} statements.
--- 4685,4720 ----
  would generate many annoying positive warnings. The default is that
  such warnings are not generated.
  
+ In addition to the above cases, warnings are also generated for
+ GNAT features that have been provided in past versions but which
+ have been superceded (typically by features in the new Ada standard).
+ For example, @code{pragma Ravenscar} will be flagged since its
+ function is replaced by @code{pragma Profile(Ravenscar)}.
+ 
+ Note that this warning option functions differently from the
+ restriction @code{No_Obsolescent_Features} in two respects.
+ First, the restriction applies only to annex J features.
+ Second, the restriction does flag uses of package @code{ASCII}.
+ 
  @item -gnatwJ
  @emph{Suppress warnings on obsolescent features (Annex J).}
! @cindex @option{-gnatwJ} (@command{gcc})
  This switch disables warnings on use of obsolescent features.
  
  @item -gnatwk
  @emph{Activate warnings on variables that could be constants.}
! @cindex @option{-gnatwk} (@command{gcc})
  This switch activates warnings for variables that are initialized but
  never modified, and then could be declared constants.
  
  @item -gnatwK
  @emph{Suppress warnings on variables that could be constants.}
! @cindex @option{-gnatwK} (@command{gcc})
  This switch disables warnings on variables that could be declared constants.
  
  @item -gnatwl
  @emph{Activate warnings for missing elaboration pragmas.}
! @cindex @option{-gnatwl} (@command{gcc})
  @cindex Elaboration, warnings
  This switch activates warnings on missing
  @code{pragma Elaborate_All} statements.
*************** This warning is not automatically turned
*** 4688,4701 ****
  
  @item -gnatwL
  @emph{Suppress warnings for missing elaboration pragmas.}
! @cindex @option{-gnatwL} (@code{gcc})
  This switch suppresses warnings on missing pragma Elaborate_All statements.
  See the section in this guide on elaboration checking for details on
  when such pragma should be used.
  
  @item -gnatwm
  @emph{Activate warnings on modified but unreferenced variables.}
! @cindex @option{-gnatwm} (@code{gcc})
  This switch activates warnings for variables that are assigned (using
  an initialization value or with one or more assignment statements) but
  whose value is never read. The warning is suppressed for volatile
--- 4727,4740 ----
  
  @item -gnatwL
  @emph{Suppress warnings for missing elaboration pragmas.}
! @cindex @option{-gnatwL} (@command{gcc})
  This switch suppresses warnings on missing pragma Elaborate_All statements.
  See the section in this guide on elaboration checking for details on
  when such pragma should be used.
  
  @item -gnatwm
  @emph{Activate warnings on modified but unreferenced variables.}
! @cindex @option{-gnatwm} (@command{gcc})
  This switch activates warnings for variables that are assigned (using
  an initialization value or with one or more assignment statements) but
  whose value is never read. The warning is suppressed for volatile
*************** This warning can also be turned on using
*** 4705,4717 ****
  
  @item -gnatwM
  @emph{Disable warnings on modified but unreferenced variables.}
! @cindex @option{-gnatwM} (@code{gcc})
  This switch disables warnings for variables that are assigned or
  initialized, but never read.
  
  @item -gnatwn
  @emph{Set normal warnings mode.}
! @cindex @option{-gnatwn} (@code{gcc})
  This switch sets normal warning mode, in which enabled warnings are
  issued and treated as warnings rather than errors. This is the default
  mode. the switch @option{-gnatwn} can be used to cancel the effect of
--- 4744,4756 ----
  
  @item -gnatwM
  @emph{Disable warnings on modified but unreferenced variables.}
! @cindex @option{-gnatwM} (@command{gcc})
  This switch disables warnings for variables that are assigned or
  initialized, but never read.
  
  @item -gnatwn
  @emph{Set normal warnings mode.}
! @cindex @option{-gnatwn} (@command{gcc})
  This switch sets normal warning mode, in which enabled warnings are
  issued and treated as warnings rather than errors. This is the default
  mode. the switch @option{-gnatwn} can be used to cancel the effect of
*************** use of @option{-gnatg}.
*** 4722,4728 ****
  
  @item -gnatwo
  @emph{Activate warnings on address clause overlays.}
! @cindex @option{-gnatwo} (@code{gcc})
  @cindex Address Clauses, warnings
  This switch activates warnings for possibly unintended initialization
  effects of defining address clauses that cause one variable to overlap
--- 4761,4767 ----
  
  @item -gnatwo
  @emph{Activate warnings on address clause overlays.}
! @cindex @option{-gnatwo} (@command{gcc})
  @cindex Address Clauses, warnings
  This switch activates warnings for possibly unintended initialization
  effects of defining address clauses that cause one variable to overlap
*************** This warning can also be turned on using
*** 4731,4744 ****
  
  @item -gnatwO
  @emph{Suppress warnings on address clause overlays.}
! @cindex @option{-gnatwO} (@code{gcc})
  This switch suppresses warnings on possibly unintended initialization
  effects of defining address clauses that cause one variable to overlap
  another.
  
  @item -gnatwp
  @emph{Activate warnings on ineffective pragma Inlines.}
! @cindex @option{-gnatwp} (@code{gcc})
  @cindex Inlining, warnings
  This switch activates warnings for failure of front end inlining
  (activated by @option{-gnatN}) to inline a particular call. There are
--- 4770,4783 ----
  
  @item -gnatwO
  @emph{Suppress warnings on address clause overlays.}
! @cindex @option{-gnatwO} (@command{gcc})
  This switch suppresses warnings on possibly unintended initialization
  effects of defining address clauses that cause one variable to overlap
  another.
  
  @item -gnatwp
  @emph{Activate warnings on ineffective pragma Inlines.}
! @cindex @option{-gnatwp} (@command{gcc})
  @cindex Inlining, warnings
  This switch activates warnings for failure of front end inlining
  (activated by @option{-gnatN}) to inline a particular call. There are
*************** This warning can also be turned on using
*** 4748,4761 ****
  
  @item -gnatwP
  @emph{Suppress warnings on ineffective pragma Inlines.}
! @cindex @option{-gnatwP} (@code{gcc})
  This switch suppresses warnings on ineffective pragma Inlines. If the
  inlining mechanism cannot inline a call, it will simply ignore the
  request silently.
  
  @item -gnatwr
  @emph{Activate warnings on redundant constructs.}
! @cindex @option{-gnatwr} (@code{gcc})
  This switch activates warnings for redundant constructs. The following
  is the current list of constructs regarded as redundant:
  This warning can also be turned on using @option{-gnatwa}.
--- 4787,4800 ----
  
  @item -gnatwP
  @emph{Suppress warnings on ineffective pragma Inlines.}
! @cindex @option{-gnatwP} (@command{gcc})
  This switch suppresses warnings on ineffective pragma Inlines. If the
  inlining mechanism cannot inline a call, it will simply ignore the
  request silently.
  
  @item -gnatwr
  @emph{Activate warnings on redundant constructs.}
! @cindex @option{-gnatwr} (@command{gcc})
  This switch activates warnings for redundant constructs. The following
  is the current list of constructs regarded as redundant:
  This warning can also be turned on using @option{-gnatwa}.
*************** operand) which has no effect.
*** 4778,4806 ****
  Use of the operator abs on an operand that is known at compile time
  to be non-negative
  @item
- Use of an unnecessary extra level of parentheses (C-style) around conditions
- in @code{if} statements, @code{while} statements and @code{exit} statements.
- @item
  Comparison of boolean expressions to an explicit True value.
  @end itemize
  
  @item -gnatwR
  @emph{Suppress warnings on redundant constructs.}
! @cindex @option{-gnatwR} (@code{gcc})
  This switch suppresses warnings for redundant constructs.
  
  @item -gnatws
  @emph{Suppress all warnings.}
! @cindex @option{-gnatws} (@code{gcc})
  This switch completely suppresses the
  output of all warning messages from the GNAT front end.
! Note that it does not suppress warnings from the @code{gcc} back end.
  To suppress these back end warnings as well, use the switch @option{-w}
  in addition to @option{-gnatws}.
  
  @item -gnatwu
  @emph{Activate warnings on unused entities.}
! @cindex @option{-gnatwu} (@code{gcc})
  This switch activates warnings to be generated for entities that
  are declared but not referenced, and for units that are @code{with}'ed
  and not
--- 4817,4842 ----
  Use of the operator abs on an operand that is known at compile time
  to be non-negative
  @item
  Comparison of boolean expressions to an explicit True value.
  @end itemize
  
  @item -gnatwR
  @emph{Suppress warnings on redundant constructs.}
! @cindex @option{-gnatwR} (@command{gcc})
  This switch suppresses warnings for redundant constructs.
  
  @item -gnatws
  @emph{Suppress all warnings.}
! @cindex @option{-gnatws} (@command{gcc})
  This switch completely suppresses the
  output of all warning messages from the GNAT front end.
! Note that it does not suppress warnings from the @command{gcc} back end.
  To suppress these back end warnings as well, use the switch @option{-w}
  in addition to @option{-gnatws}.
  
  @item -gnatwu
  @emph{Activate warnings on unused entities.}
! @cindex @option{-gnatwu} (@command{gcc})
  This switch activates warnings to be generated for entities that
  are declared but not referenced, and for units that are @code{with}'ed
  and not
*************** a warning is also generated, noting that
*** 4817,4835 ****
  @code{with} can be moved to the body. The default is that
  such warnings are not generated.
  This switch also activates warnings on unreferenced formals
! (it is includes the effect of @option{-gnatwf}).
  This warning can also be turned on using @option{-gnatwa}.
  
  @item -gnatwU
  @emph{Suppress warnings on unused entities.}
! @cindex @option{-gnatwU} (@code{gcc})
  This switch suppresses warnings for unused entities and packages.
  It also turns off warnings on unreferenced formals (and thus includes
  the effect of @option{-gnatwF}).
  
  @item -gnatwv
  @emph{Activate warnings on unassigned variables.}
! @cindex @option{-gnatwv} (@code{gcc})
  @cindex Unassigned variable warnings
  This switch activates warnings for access to variables which
  may not be properly initialized. The default is that
--- 4853,4871 ----
  @code{with} can be moved to the body. The default is that
  such warnings are not generated.
  This switch also activates warnings on unreferenced formals
! (it includes the effect of @option{-gnatwf}).
  This warning can also be turned on using @option{-gnatwa}.
  
  @item -gnatwU
  @emph{Suppress warnings on unused entities.}
! @cindex @option{-gnatwU} (@command{gcc})
  This switch suppresses warnings for unused entities and packages.
  It also turns off warnings on unreferenced formals (and thus includes
  the effect of @option{-gnatwF}).
  
  @item -gnatwv
  @emph{Activate warnings on unassigned variables.}
! @cindex @option{-gnatwv} (@command{gcc})
  @cindex Unassigned variable warnings
  This switch activates warnings for access to variables which
  may not be properly initialized. The default is that
*************** such warnings are generated.
*** 4837,4849 ****
  
  @item -gnatwV
  @emph{Suppress warnings on unassigned variables.}
! @cindex @option{-gnatwV} (@code{gcc})
  This switch suppresses warnings for access to variables which
  may not be properly initialized.
  
  @item -gnatwx
  @emph{Activate warnings on Export/Import pragmas.}
! @cindex @option{-gnatwx} (@code{gcc})
  @cindex Export/Import pragma warnings
  This switch activates warnings on Export/Import pragmas when
  the compiler detects a possible conflict between the Ada and
--- 4873,4885 ----
  
  @item -gnatwV
  @emph{Suppress warnings on unassigned variables.}
! @cindex @option{-gnatwV} (@command{gcc})
  This switch suppresses warnings for access to variables which
  may not be properly initialized.
  
  @item -gnatwx
  @emph{Activate warnings on Export/Import pragmas.}
! @cindex @option{-gnatwx} (@command{gcc})
  @cindex Export/Import pragma warnings
  This switch activates warnings on Export/Import pragmas when
  the compiler detects a possible conflict between the Ada and
*************** generated.
*** 4855,4861 ****
  
  @item -gnatwX
  @emph{Suppress warnings on Export/Import pragmas.}
! @cindex @option{-gnatwX} (@code{gcc})
  This switch suppresses warnings on Export/Import pragmas.
  The sense of this is that you are telling the compiler that
  you know what you are doing in writing the pragma, and it
--- 4891,4897 ----
  
  @item -gnatwX
  @emph{Suppress warnings on Export/Import pragmas.}
! @cindex @option{-gnatwX} (@command{gcc})
  This switch suppresses warnings on Export/Import pragmas.
  The sense of this is that you are telling the compiler that
  you know what you are doing in writing the pragma, and it
*************** should not complain at you.
*** 4863,4869 ****
  
  @item -gnatwz
  @emph{Activate warnings on unchecked conversions.}
! @cindex @option{-gnatwz} (@code{gcc})
  @cindex Unchecked_Conversion warnings
  This switch activates warnings for unchecked conversions
  where the types are known at compile time to have different
--- 4899,4905 ----
  
  @item -gnatwz
  @emph{Activate warnings on unchecked conversions.}
! @cindex @option{-gnatwz} (@command{gcc})
  @cindex Unchecked_Conversion warnings
  This switch activates warnings for unchecked conversions
  where the types are known at compile time to have different
*************** is that such warnings are generated.
*** 4872,4878 ****
  
  @item -gnatwZ
  @emph{Suppress warnings on unchecked conversions.}
! @cindex @option{-gnatwZ} (@code{gcc})
  This switch suppresses warnings for unchecked conversions
  where the types are known at compile time to have different
  sizes.
--- 4908,4914 ----
  
  @item -gnatwZ
  @emph{Suppress warnings on unchecked conversions.}
! @cindex @option{-gnatwZ} (@command{gcc})
  This switch suppresses warnings for unchecked conversions
  where the types are known at compile time to have different
  sizes.
*************** When no switch @option{^-gnatw^/WARNINGS
*** 4911,4938 ****
  
  @table @option
  @c !sort!
- @item -gnatwB
  @item -gnatwC
- @item -gnatwK
  @item -gnatwD
! @item -gnatwL
  @item -gnatwH
  @item -gnatwi
! @item -gnatwP
  @item -gnatwn
  @item -gnatwo
  @item -gnatwz
  @item -gnatwx
  
  @end table
  
- 
  @node Debugging and Assertion Control
  @subsection Debugging and Assertion Control
  
  @table @option
  @item -gnata
! @cindex @option{-gnata} (@code{gcc})
  @findex Assert
  @findex Debug
  @cindex Assertions
--- 4947,4979 ----
  
  @table @option
  @c !sort!
  @item -gnatwC
  @item -gnatwD
! @item -gnatwF
! @item -gnatwg
  @item -gnatwH
  @item -gnatwi
! @item -gnatwJ
! @item -gnatwK
! @item -gnatwL
! @item -gnatwM
  @item -gnatwn
  @item -gnatwo
+ @item -gnatwP
+ @item -gnatwR
+ @item -gnatwU
+ @item -gnatwv
  @item -gnatwz
  @item -gnatwx
  
  @end table
  
  @node Debugging and Assertion Control
  @subsection Debugging and Assertion Control
  
  @table @option
  @item -gnata
! @cindex @option{-gnata} (@command{gcc})
  @findex Assert
  @findex Debug
  @cindex Assertions
*************** indicate validity checks that are perfor
*** 5020,5031 ****
  to the default checks described above.
  @end ifset
  
- 
  @table @option
  @c !sort!
  @item -gnatVa
  @emph{All validity checks.}
! @cindex @option{-gnatVa} (@code{gcc})
  All validity checks are turned on.
  @ifclear vms
  That is, @option{-gnatVa} is
--- 5061,5071 ----
  to the default checks described above.
  @end ifset
  
  @table @option
  @c !sort!
  @item -gnatVa
  @emph{All validity checks.}
! @cindex @option{-gnatVa} (@command{gcc})
  All validity checks are turned on.
  @ifclear vms
  That is, @option{-gnatVa} is
*************** equivalent to @option{gnatVcdfimorst}.
*** 5034,5046 ****
  
  @item -gnatVc
  @emph{Validity checks for copies.}
! @cindex @option{-gnatVc} (@code{gcc})
  The right hand side of assignments, and the initializing values of
  object declarations are validity checked.
  
  @item -gnatVd
  @emph{Default (RM) validity checks.}
! @cindex @option{-gnatVd} (@code{gcc})
  Some validity checks are done by default following normal Ada semantics
  (RM 13.9.1 (9-11)).
  A check is done in case statements that the expression is within the range
--- 5074,5086 ----
  
  @item -gnatVc
  @emph{Validity checks for copies.}
! @cindex @option{-gnatVc} (@command{gcc})
  The right hand side of assignments, and the initializing values of
  object declarations are validity checked.
  
  @item -gnatVd
  @emph{Default (RM) validity checks.}
! @cindex @option{-gnatVd} (@command{gcc})
  Some validity checks are done by default following normal Ada semantics
  (RM 13.9.1 (9-11)).
  A check is done in case statements that the expression is within the range
*************** overwriting may occur.
*** 5057,5063 ****
  
  @item -gnatVf
  @emph{Validity checks for floating-point values.}
! @cindex @option{-gnatVf} (@code{gcc})
  In the absence of this switch, validity checking occurs only for discrete
  values. If @option{-gnatVf} is specified, then validity checking also applies
  for floating-point values, and NaN's and infinities are considered invalid,
--- 5097,5103 ----
  
  @item -gnatVf
  @emph{Validity checks for floating-point values.}
! @cindex @option{-gnatVf} (@command{gcc})
  In the absence of this switch, validity checking occurs only for discrete
  values. If @option{-gnatVf} is specified, then validity checking also applies
  for floating-point values, and NaN's and infinities are considered invalid,
*************** options. For example,
*** 5072,5084 ****
  
  @item -gnatVi
  @emph{Validity checks for @code{in} mode parameters}
! @cindex @option{-gnatVi} (@code{gcc})
  Arguments for parameters of mode @code{in} are validity checked in function
  and procedure calls at the point of call.
  
  @item -gnatVm
  @emph{Validity checks for @code{in out} mode parameters.}
! @cindex @option{-gnatVm} (@code{gcc})
  Arguments for parameters of mode @code{in out} are validity checked in
  procedure calls at the point of call. The @code{'m'} here stands for
  modify, since this concerns parameters that can be modified by the call.
--- 5112,5124 ----
  
  @item -gnatVi
  @emph{Validity checks for @code{in} mode parameters}
! @cindex @option{-gnatVi} (@command{gcc})
  Arguments for parameters of mode @code{in} are validity checked in function
  and procedure calls at the point of call.
  
  @item -gnatVm
  @emph{Validity checks for @code{in out} mode parameters.}
! @cindex @option{-gnatVm} (@command{gcc})
  Arguments for parameters of mode @code{in out} are validity checked in
  procedure calls at the point of call. The @code{'m'} here stands for
  modify, since this concerns parameters that can be modified by the call.
*************** will be subject to validity checking.
*** 5089,5095 ****
  
  @item -gnatVn
  @emph{No validity checks.}
! @cindex @option{-gnatVn} (@code{gcc})
  This switch turns off all validity checking, including the default checking
  for case statements and left hand side subscripts. Note that the use of
  the switch @option{-gnatp} suppresses all run-time checks, including
--- 5129,5135 ----
  
  @item -gnatVn
  @emph{No validity checks.}
! @cindex @option{-gnatVn} (@command{gcc})
  This switch turns off all validity checking, including the default checking
  for case statements and left hand side subscripts. Note that the use of
  the switch @option{-gnatp} suppresses all run-time checks, including
*************** is used, it cancels any other @option{-g
*** 5098,5104 ****
  
  @item -gnatVo
  @emph{Validity checks for operator and attribute operands.}
! @cindex @option{-gnatVo} (@code{gcc})
  Arguments for predefined operators and attributes are validity checked.
  This includes all operators in package @code{Standard},
  the shift operators defined as intrinsic in package @code{Interfaces}
--- 5138,5144 ----
  
  @item -gnatVo
  @emph{Validity checks for operator and attribute operands.}
! @cindex @option{-gnatVo} (@command{gcc})
  Arguments for predefined operators and attributes are validity checked.
  This includes all operators in package @code{Standard},
  the shift operators defined as intrinsic in package @code{Interfaces}
*************** on individual component values for compo
*** 5107,5113 ****
  
  @item -gnatVp
  @emph{Validity checks for parameters.}
! @cindex @option{-gnatVp} (@code{gcc})
  This controls the treatment of parameters within a subprogram (as opposed
  to @option{-gnatVi} and @option{-gnatVm} which control validity testing
  of parameters on a call. If either of these call options is used, then
--- 5147,5153 ----
  
  @item -gnatVp
  @emph{Validity checks for parameters.}
! @cindex @option{-gnatVp} (@command{gcc})
  This controls the treatment of parameters within a subprogram (as opposed
  to @option{-gnatVi} and @option{-gnatVm} which control validity testing
  of parameters on a call. If either of these call options is used, then
*************** will be checked (or rechecked) within th
*** 5119,5138 ****
  
  @item -gnatVr
  @emph{Validity checks for function returns.}
! @cindex @option{-gnatVr} (@code{gcc})
  The expression in @code{return} statements in functions is validity
  checked.
  
  @item -gnatVs
  @emph{Validity checks for subscripts.}
! @cindex @option{-gnatVs} (@code{gcc})
  All subscripts expressions are checked for validity, whether they appear
  on the right side or left side (in default mode only left side subscripts
  are validity checked).
  
  @item -gnatVt
  @emph{Validity checks for tests.}
! @cindex @option{-gnatVt} (@code{gcc})
  Expressions used as conditions in @code{if}, @code{while} or @code{exit}
  statements are checked, as well as guard expressions in entry calls.
  
--- 5159,5178 ----
  
  @item -gnatVr
  @emph{Validity checks for function returns.}
! @cindex @option{-gnatVr} (@command{gcc})
  The expression in @code{return} statements in functions is validity
  checked.
  
  @item -gnatVs
  @emph{Validity checks for subscripts.}
! @cindex @option{-gnatVs} (@command{gcc})
  All subscripts expressions are checked for validity, whether they appear
  on the right side or left side (in default mode only left side subscripts
  are validity checked).
  
  @item -gnatVt
  @emph{Validity checks for tests.}
! @cindex @option{-gnatVt} (@command{gcc})
  Expressions used as conditions in @code{if}, @code{while} or @code{exit}
  statements are checked, as well as guard expressions in entry calls.
  
*************** See also the pragma @code{Validity_Check
*** 5184,5197 ****
  the validity checking mode at the program source level, and also allows for
  temporary disabling of validity checks.
  
- 
  @node Style Checking
  @subsection Style Checking
  @findex Style checking
  
  @noindent
  The @option{-gnaty^x^(option,option,...)^} switch
! @cindex @option{-gnaty} (@code{gcc})
  causes the compiler to
  enforce specified style rules. A limited set of style rules has been used
  in writing the GNAT sources themselves. This switch allows user programs
--- 5224,5236 ----
  the validity checking mode at the program source level, and also allows for
  temporary disabling of validity checks.
  
  @node Style Checking
  @subsection Style Checking
  @findex Style checking
  
  @noindent
  The @option{-gnaty^x^(option,option,...)^} switch
! @cindex @option{-gnaty} (@command{gcc})
  causes the compiler to
  enforce specified style rules. A limited set of style rules has been used
  in writing the GNAT sources themselves. This switch allows user programs
*************** permitted. This allows the construction 
*** 5276,5282 ****
  signs are used to form the top and bottom of the box.
  
  @item
! If a comment starts and ends with ``@code{--}'' is permitted as long as at
  least one blank follows the initial ``@code{--}''. Together with the preceding
  rule, this allows the construction of box comments, as shown in the following
  example:
--- 5315,5321 ----
  signs are used to form the top and bottom of the box.
  
  @item
! A comment that starts and ends with ``@code{--}'' is permitted as long as at
  least one blank follows the initial ``@code{--}''. Together with the preceding
  rule, this allows the construction of box comments, as shown in the following
  example:
*************** optional labels on @code{end} statements
*** 5297,5303 ****
  @item ^f^VTABS^
  @emph{No form feeds or vertical tabs.}
  If the ^letter f^word VTABS^ appears in the string after @option{-gnaty} then
! neither form feeds nor vertical tab characters are not permitted
  in the source text.
  
  @item ^h^HTABS^
--- 5336,5342 ----
  @item ^f^VTABS^
  @emph{No form feeds or vertical tabs.}
  If the ^letter f^word VTABS^ appears in the string after @option{-gnaty} then
! neither form feeds nor vertical tab characters are permitted
  in the source text.
  
  @item ^h^HTABS^
*************** Clear :
*** 5393,5398 ****
--- 5432,5445 ----
  @end cartouche
  @end smallexample
  
+ @item ^Lnnn^MAX_NESTING=nnn^
+ @emph{Set maximum nesting level}
+ If the sequence ^Lnnn^MAX_NESTING=nnn^, where nnn is a decimal number in
+ the range 0-999, appears in the string after @option{-gnaty} then the
+ maximum level of nesting of constructs (including subprograms, loops,
+ blocks, packages, and conditionals) may not exceed the given value. A
+ value of zero disconnects this style check.
+ 
  @item ^m^LINE_LENGTH^
  @emph{Check maximum line length.}
  If the ^letter m^word LINE_LENGTH^ appears in the string after @option{-gnaty}
*************** A unary plus or minus may not be followe
*** 5501,5506 ****
--- 5548,5561 ----
  A vertical bar must be surrounded by spaces.
  @end itemize
  
+ @item ^x^XTRA_PARENS^
+ @emph{Check extra parentheses.}
+ Check for the use of an unnecessary extra level of parentheses (C-style)
+ around conditions in @code{if} statements, @code{while} statements and
+ @code{exit} statements.
+ 
+ @end table
+ 
  @noindent
  In the above rules, appearing in column one is always permitted, that is,
  counts as meeting either a requirement for a required preceding space,
*************** Appearing at the end of a line is also a
*** 5510,5517 ****
  as meeting either a requirement for a following space, or as meeting
  a requirement for no following space.
  
- @end table
- 
  @noindent
  If any of these style rules is violated, a message is generated giving
  details on the violation. The initial characters of such messages are
--- 5565,5570 ----
*************** messages, so they normally do not preven
*** 5520,5526 ****
  file. The @option{-gnatwe} switch can be used to treat warning messages,
  including style messages, as fatal errors.
  
- @noindent
  The switch
  @ifclear vms
  @option{-gnaty} on its own (that is not
--- 5573,5578 ----
*************** the exception of ORDERED_SUBPROGRAMS,
*** 5535,5540 ****
--- 5587,5600 ----
  with an indentation level of 3. This is the standard
  checking option that is used for the GNAT sources.
  
+ The switch
+ @ifclear vms
+ @option{-gnatyN}
+ @end ifclear
+ @ifset vms
+ /STYLE_CHECKS=NONE
+ @end ifset
+ clears any previously set style checks.
  
  @node Run-Time Checks
  @subsection Run-Time Checks
*************** checking against constraints, but not ar
*** 5550,5561 ****
  integer operations (including division by zero) or checks for access
  before elaboration on subprogram calls. All other run-time checks, as
  required by the Ada 95 Reference Manual, are generated by default.
! The following @code{gcc} switches refine this default behavior:
  
  @table @option
  @c !sort!
  @item -gnatp
! @cindex @option{-gnatp} (@code{gcc})
  @cindex Suppressing checks
  @cindex Checks, suppressing
  @findex Suppress
--- 5610,5621 ----
  integer operations (including division by zero) or checks for access
  before elaboration on subprogram calls. All other run-time checks, as
  required by the Ada 95 Reference Manual, are generated by default.
! The following @command{gcc} switches refine this default behavior:
  
  @table @option
  @c !sort!
  @item -gnatp
! @cindex @option{-gnatp} (@command{gcc})
  @cindex Suppressing checks
  @cindex Checks, suppressing
  @findex Suppress
*************** of the code at the expense of safety in 
*** 5567,5573 ****
  program bugs.
  
  @item -gnato
! @cindex @option{-gnato} (@code{gcc})
  @cindex Overflow checks
  @cindex Check, overflow
  Enables overflow checking for integer operations.
--- 5627,5633 ----
  program bugs.
  
  @item -gnato
! @cindex @option{-gnato} (@command{gcc})
  @cindex Overflow checks
  @cindex Check, overflow
  Enables overflow checking for integer operations.
*************** not performed in default mode. This mean
*** 5647,5657 ****
  default settings, GNAT does not do all the checks expected from the
  language description in the Ada Reference Manual. If you want all constraint
  checks to be performed, as described in this Manual, then you must
! explicitly use the -gnato switch either on the @code{gnatmake} or
! @code{gcc} command.
  
  @item -gnatE
! @cindex @option{-gnatE} (@code{gcc})
  @cindex Elaboration checks
  @cindex Check, elaboration
  Enables dynamic checks for access-before-elaboration
--- 5707,5717 ----
  default settings, GNAT does not do all the checks expected from the
  language description in the Ada Reference Manual. If you want all constraint
  checks to be performed, as described in this Manual, then you must
! explicitly use the -gnato switch either on the @command{gnatmake} or
! @command{gcc} command.
  
  @item -gnatE
! @cindex @option{-gnatE} (@command{gcc})
  @cindex Elaboration checks
  @cindex Check, elaboration
  Enables dynamic checks for access-before-elaboration
*************** the program source.
*** 5673,5679 ****
  @cindex -fstack-check
  
  @noindent
! For most operating systems, @code{gcc} does not perform stack overflow
  checking by default. This means that if the main environment task or
  some other task exceeds the available stack space, then unpredictable
  behavior will occur.
--- 5733,5739 ----
  @cindex -fstack-check
  
  @noindent
! For most operating systems, @command{gcc} does not perform stack overflow
  checking by default. This means that if the main environment task or
  some other task exceeds the available stack space, then unpredictable
  behavior will occur.
*************** increase the amount of stack for the env
*** 5723,5734 ****
  is an operating systems issue, and must be addressed with the
  appropriate operating systems commands.
  
- 
  @node Using gcc for Syntax Checking
! @subsection Using @code{gcc} for Syntax Checking
  @table @option
  @item -gnats
! @cindex @option{-gnats} (@code{gcc})
  @ifclear vms
  
  @noindent
--- 5783,5793 ----
  is an operating systems issue, and must be addressed with the
  appropriate operating systems commands.
  
  @node Using gcc for Syntax Checking
! @subsection Using @command{gcc} for Syntax Checking
  @table @option
  @item -gnats
! @cindex @option{-gnats} (@command{gcc})
  @ifclear vms
  
  @noindent
*************** together. This is primarily used by the 
*** 5779,5790 ****
  (@pxref{Renaming Files Using gnatchop}).
  @end table
  
- 
  @node Using gcc for Semantic Checking
! @subsection Using @code{gcc} for Semantic Checking
  @table @option
  @item -gnatc
! @cindex @option{-gnatc} (@code{gcc})
  
  @ifclear vms
  @noindent
--- 5838,5848 ----
  (@pxref{Renaming Files Using gnatchop}).
  @end table
  
  @node Using gcc for Semantic Checking
! @subsection Using @command{gcc} for Semantic Checking
  @table @option
  @item -gnatc
! @cindex @option{-gnatc} (@command{gcc})
  
  @ifclear vms
  @noindent
*************** and specifications where a separate body
*** 5827,5833 ****
  @table @option
  @cindex Ada 83 compatibility
  @item -gnat83
! @cindex @option{-gnat83} (@code{gcc})
  @cindex ACVC, Ada 83 tests
  
  @noindent
--- 5885,5891 ----
  @table @option
  @cindex Ada 83 compatibility
  @item -gnat83
! @cindex @option{-gnat83} (@command{gcc})
  @cindex ACVC, Ada 83 tests
  
  @noindent
*************** For further information, please refer to
*** 5860,5866 ****
  @subsection Character Set Control
  @table @option
  @item ^-gnati^/IDENTIFIER_CHARACTER_SET=^@var{c}
! @cindex @option{^-gnati^/IDENTIFIER_CHARACTER_SET^} (@code{gcc})
  
  @noindent
  Normally GNAT recognizes the Latin-1 character set in source program
--- 5918,5924 ----
  @subsection Character Set Control
  @table @option
  @item ^-gnati^/IDENTIFIER_CHARACTER_SET=^@var{c}
! @cindex @option{^-gnati^/IDENTIFIER_CHARACTER_SET^} (@command{gcc})
  
  @noindent
  Normally GNAT recognizes the Latin-1 character set in source program
*************** allowed in identifiers
*** 5909,5915 ****
  implementation of these character sets.
  
  @item ^-gnatW^/WIDE_CHARACTER_ENCODING=^@var{e}
! @cindex @option{^-gnatW^/WIDE_CHARACTER_ENCODING^} (@code{gcc})
  Specify the method of encoding for wide characters.
  @var{e} is one of the following:
  
--- 5967,5973 ----
  implementation of these character sets.
  
  @item ^-gnatW^/WIDE_CHARACTER_ENCODING=^@var{e}
! @cindex @option{^-gnatW^/WIDE_CHARACTER_ENCODING^} (@command{gcc})
  Specify the method of encoding for wide characters.
  @var{e} is one of the following:
  
*************** UTF-8 encoding (brackets encoding also r
*** 5934,5940 ****
  Brackets encoding only (default value)
  @end table
  For full details on the these encoding
! methods see @xref{Wide Character Encodings}.
  Note that brackets coding is always accepted, even if one of the other
  options is specified, so for example @option{-gnatW8} specifies that both
  brackets and @code{UTF-8} encodings will be recognized. The units that are
--- 5992,5998 ----
  Brackets encoding only (default value)
  @end table
  For full details on the these encoding
! methods see @ref{Wide Character Encodings}.
  Note that brackets coding is always accepted, even if one of the other
  options is specified, so for example @option{-gnatW8} specifies that both
  brackets and @code{UTF-8} encodings will be recognized. The units that are
*************** parameter.
*** 5958,5964 ****
  
  @table @option
  @item ^-gnatk^/FILE_NAME_MAX_LENGTH=^@var{n}
! @cindex @option{-gnatk} (@code{gcc})
  Activates file name ``krunching''. @var{n}, a decimal integer in the range
  1-999, indicates the maximum allowable length of a file name (not
  including the @file{.ads} or @file{.adb} extension). The default is not
--- 6016,6022 ----
  
  @table @option
  @item ^-gnatk^/FILE_NAME_MAX_LENGTH=^@var{n}
! @cindex @option{-gnatk} (@command{gcc})
  Activates file name ``krunching''. @var{n}, a decimal integer in the range
  1-999, indicates the maximum allowable length of a file name (not
  including the @file{.ads} or @file{.adb} extension). The default is not
*************** to enable file name krunching.
*** 5967,5980 ****
  For the source file naming rules, @xref{File Naming Rules}.
  @end table
  
- 
  @node Subprogram Inlining Control
  @subsection Subprogram Inlining Control
  
  @table @option
  @c !sort!
  @item -gnatn
! @cindex @option{-gnatn} (@code{gcc})
  @ifclear vms
  The @code{n} here is intended to suggest the first syllable of the
  word ``inline''.
--- 6025,6037 ----
  For the source file naming rules, @xref{File Naming Rules}.
  @end table
  
  @node Subprogram Inlining Control
  @subsection Subprogram Inlining Control
  
  @table @option
  @c !sort!
  @item -gnatn
! @cindex @option{-gnatn} (@command{gcc})
  @ifclear vms
  The @code{n} here is intended to suggest the first syllable of the
  word ``inline''.
*************** If you specify this switch the compiler 
*** 5992,6001 ****
  creating an extra source dependency for the resulting object file, and
  where possible, the call will be inlined.
  For further details on when inlining is possible
! see @xref{Inlining of Subprograms}.
  
  @item -gnatN
! @cindex @option{-gnatN} (@code{gcc})
  The front end inlining activated by this switch is generally more extensive,
  and quite often more effective than the standard @option{-gnatn} inlining mode.
  It will also generate additional dependencies.
--- 6049,6058 ----
  creating an extra source dependency for the resulting object file, and
  where possible, the call will be inlined.
  For further details on when inlining is possible
! see @ref{Inlining of Subprograms}.
  
  @item -gnatN
! @cindex @option{-gnatN} (@command{gcc})
  The front end inlining activated by this switch is generally more extensive,
  and quite often more effective than the standard @option{-gnatn} inlining mode.
  It will also generate additional dependencies.
*************** to specify both options.
*** 6009,6015 ****
  
  @table @option
  @item -gnatt
! @cindex @option{-gnatt} (@code{gcc})
  @cindex Writing internal trees
  @cindex Internal trees, writing to file
  Causes GNAT to write the internal tree for a unit to a file (with the
--- 6066,6072 ----
  
  @table @option
  @item -gnatt
! @cindex @option{-gnatt} (@command{gcc})
  @cindex Writing internal trees
  @cindex Internal trees, writing to file
  Causes GNAT to write the internal tree for a unit to a file (with the
*************** these tools do the necessary compilation
*** 6020,6038 ****
  not have to specify this switch in normal operation.
  
  @item -gnatu
! @cindex @option{-gnatu} (@code{gcc})
  Print a list of units required by this compilation on @file{stdout}.
  The listing includes all units on which the unit being compiled depends
  either directly or indirectly.
  
  @ifclear vms
  @item -pass-exit-codes
! @cindex @option{-pass-exit-codes} (@code{gcc})
! If this switch is not used, the exit code returned by @code{gcc} when
  compiling multiple files indicates whether all source files have
  been successfully used to generate object files or not.
  
! When @option{-pass-exit-codes} is used, @code{gcc} exits with an extended
  exit status and allows an integrated development environment to better
  react to a compilation failure. Those exit status are:
  
--- 6077,6095 ----
  not have to specify this switch in normal operation.
  
  @item -gnatu
! @cindex @option{-gnatu} (@command{gcc})
  Print a list of units required by this compilation on @file{stdout}.
  The listing includes all units on which the unit being compiled depends
  either directly or indirectly.
  
  @ifclear vms
  @item -pass-exit-codes
! @cindex @option{-pass-exit-codes} (@command{gcc})
! If this switch is not used, the exit code returned by @command{gcc} when
  compiling multiple files indicates whether all source files have
  been successfully used to generate object files or not.
  
! When @option{-pass-exit-codes} is used, @command{gcc} exits with an extended
  exit status and allows an integrated development environment to better
  react to a compilation failure. Those exit status are:
  
*************** An object file has been generated for ev
*** 6057,6063 ****
  @cindex Debugging options
  @ifclear vms
  @item -gnatd@var{x}
! @cindex @option{-gnatd} (@code{gcc})
  Activate internal debugging switches. @var{x} is a letter or digit, or
  string of letters or digits, which specifies the type of debugging
  outputs desired. Normally these are used only for internal development
--- 6114,6120 ----
  @cindex Debugging options
  @ifclear vms
  @item -gnatd@var{x}
! @cindex @option{-gnatd} (@command{gcc})
  Activate internal debugging switches. @var{x} is a letter or digit, or
  string of letters or digits, which specifies the type of debugging
  outputs desired. Normally these are used only for internal development
*************** file @file{debug.adb}.
*** 6067,6073 ****
  @end ifclear
  
  @item -gnatG
! @cindex @option{-gnatG} (@code{gcc})
  This switch causes the compiler to generate auxiliary output containing
  a pseudo-source listing of the generated expanded code. Like most Ada
  compilers, GNAT works by first transforming the high level Ada code into
--- 6124,6130 ----
  @end ifclear
  
  @item -gnatG
! @cindex @option{-gnatG} (@command{gcc})
  This switch causes the compiler to generate auxiliary output containing
  a pseudo-source listing of the generated expanded code. Like most Ada
  compilers, GNAT works by first transforming the high level Ada code into
*************** evaluation of the expression 1.0/27.0).
*** 6151,6173 ****
  @end table
  
  @item -gnatD
! @cindex @option{-gnatD} (@code{gcc})
! This switch is used in conjunction with @option{-gnatG} to cause the expanded
! source, as described above to be written to files with names
  @file{^xxx.dg^XXX_DG^}, where @file{xxx} is the normal file name,
! for example, if the source file name is @file{hello.adb},
! then a file @file{^hello.adb.dg^HELLO.ADB_DG^} will be written.
! The debugging information generated
! by the @code{gcc} @option{^-g^/DEBUG^} switch will refer to the generated
! @file{^xxx.dg^XXX_DG^} file. This allows you to do source level debugging using
! the generated code which is sometimes useful for complex code, for example
! to find out exactly which part of a complex construction raised an
! exception. This switch also suppress generation of cross-reference
! information (see -gnatx).
  
  @ifclear vms
  @item -gnatR[0|1|2|3[s]]
! @cindex @option{-gnatR} (@code{gcc})
  This switch controls output from the compiler of a listing showing
  representation information for declared types and objects. For
  @option{-gnatR0}, no information is output (equivalent to omitting
--- 6208,6238 ----
  @end table
  
  @item -gnatD
! @cindex @option{-gnatD} (@command{gcc})
! When used in conjunction with @option{-gnatG}, this switch causes
! the expanded source, as described above for
! @option{-gnatG} to be written to files with names
  @file{^xxx.dg^XXX_DG^}, where @file{xxx} is the normal file name,
! instead of to the standard ooutput file. For
! example, if the source file name is @file{hello.adb}, then a file
! @file{^hello.adb.dg^HELLO.ADB_DG^} will be written.  The debugging
! information generated by the @command{gcc} @option{^-g^/DEBUG^} switch
! will refer to the generated @file{^xxx.dg^XXX_DG^} file. This allows
! you to do source level debugging using the generated code which is
! sometimes useful for complex code, for example to find out exactly
! which part of a complex construction raised an exception. This switch
! also suppress generation of cross-reference information (see
! @option{-gnatx}) since otherwise the cross-reference information
! would refer to the @file{^.dg^.DG^} file, which would cause
! confusion since this is not the original source file.
! 
! Note that @option{-gnatD} actually implies @option{-gnatG}
! automatically, so it is not necessary to give both options.
! In other words @option{-gnatD} is equivalent to @option{-gnatDG}).
  
  @ifclear vms
  @item -gnatR[0|1|2|3[s]]
! @cindex @option{-gnatR} (@command{gcc})
  This switch controls output from the compiler of a listing showing
  representation information for declared types and objects. For
  @option{-gnatR0}, no information is output (equivalent to omitting
*************** file is the name of the corresponding so
*** 6186,6192 ****
  @end ifclear
  @ifset vms
  @item /REPRESENTATION_INFO
! @cindex @option{/REPRESENTATION_INFO} (@code{gcc})
  This qualifier controls output from the compiler of a listing showing
  representation information for declared types and objects. For
  @option{/REPRESENTATION_INFO=NONE}, no information is output
--- 6251,6257 ----
  @end ifclear
  @ifset vms
  @item /REPRESENTATION_INFO
! @cindex @option{/REPRESENTATION_INFO} (@command{gcc})
  This qualifier controls output from the compiler of a listing showing
  representation information for declared types and objects. For
  @option{/REPRESENTATION_INFO=NONE}, no information is output
*************** file is the name of the corresponding so
*** 6209,6220 ****
  @end ifset
  
  @item -gnatS
! @cindex @option{-gnatS} (@code{gcc})
  The use of the switch @option{-gnatS} for an
  Ada compilation will cause the compiler to output a
  representation of package Standard in a form very
  close to standard Ada. It is not quite possible to
! do this and remain entirely Standard (since new
  numeric base types cannot be created in standard
  Ada), but the output is easily
  readable to any Ada programmer, and is useful to
--- 6274,6285 ----
  @end ifset
  
  @item -gnatS
! @cindex @option{-gnatS} (@command{gcc})
  The use of the switch @option{-gnatS} for an
  Ada compilation will cause the compiler to output a
  representation of package Standard in a form very
  close to standard Ada. It is not quite possible to
! do this entirely in standard Ada (since new
  numeric base types cannot be created in standard
  Ada), but the output is easily
  readable to any Ada programmer, and is useful to
*************** determine the characteristics of target 
*** 6222,6228 ****
  types in package Standard.
  
  @item -gnatx
! @cindex @option{-gnatx} (@code{gcc})
  Normally the compiler generates full cross-referencing information in
  the @file{ALI} file. This information is used by a number of tools,
  including @code{gnatfind} and @code{gnatxref}. The @option{-gnatx} switch
--- 6287,6293 ----
  types in package Standard.
  
  @item -gnatx
! @cindex @option{-gnatx} (@command{gcc})
  Normally the compiler generates full cross-referencing information in
  the @file{ALI} file. This information is used by a number of tools,
  including @code{gnatfind} and @code{gnatxref}. The @option{-gnatx} switch
*************** raised, the tables are used to control a
*** 6250,6256 ****
  subprogram invocation stack to locate the required exception
  handler. This method has considerably poorer performance for
  the propagation of exceptions, but there is no overhead for
! exception handlers if no exception is raised.
  
  The following switches can be used to control which of the
  two exception handling methods is used.
--- 6315,6325 ----
  subprogram invocation stack to locate the required exception
  handler. This method has considerably poorer performance for
  the propagation of exceptions, but there is no overhead for
! exception handlers if no exception is raised. Note that in this
! mode and in the context of mixed Ada and C/C++ programming,
! to propagate an exception through a C/C++ code, the C/C++ code
! must be compiled with the @option{-funwind-tables} GCC's
! option.
  
  The following switches can be used to control which of the
  two exception handling methods is used.
*************** two exception handling methods is used.
*** 6259,6265 ****
  @c !sort!
  
  @item -gnatL
! @cindex @option{-gnatL} (@code{gcc})
  This switch causes the longjmp/setjmp approach to be used
  for exception handling. If this is the default mechanism for the
  target (see below), then this has no effect. If the default
--- 6328,6334 ----
  @c !sort!
  
  @item -gnatL
! @cindex @option{-gnatL} (@command{gcc})
  This switch causes the longjmp/setjmp approach to be used
  for exception handling. If this is the default mechanism for the
  target (see below), then this has no effect. If the default
*************** mechanism for the target is zero cost ex
*** 6267,6280 ****
  this switch can be used to modify this default, but it must be
  used for all units in the partition, including all run-time
  library units. One way to achieve this is to use the
! @option{-a} and @option{-f} switches for @code{gnatmake}.
  This option is rarely used. One case in which it may be
  advantageous is if you have an application where exception
  raising is common and the overall performance of the
  application is improved by favoring exception propagation.
  
  @item -gnatZ
! @cindex @option{-gnatZ} (@code{gcc})
  @cindex Zero Cost Exceptions
  This switch causes the zero cost approach to be sed
  for exception handling. If this is the default mechanism for the
--- 6336,6349 ----
  this switch can be used to modify this default, but it must be
  used for all units in the partition, including all run-time
  library units. One way to achieve this is to use the
! @option{-a} and @option{-f} switches for @command{gnatmake}.
  This option is rarely used. One case in which it may be
  advantageous is if you have an application where exception
  raising is common and the overall performance of the
  application is improved by favoring exception propagation.
  
  @item -gnatZ
! @cindex @option{-gnatZ} (@command{gcc})
  @cindex Zero Cost Exceptions
  This switch causes the zero cost approach to be sed
  for exception handling. If this is the default mechanism for the
*************** mechanism for the target is longjmp/setj
*** 6283,6289 ****
  this switch can be used to modify this default, but it must be
  used for all units in the partition, including all run-time
  library units. One way to achieve this is to use the
! @option{-a} and @option{-f} switches for @code{gnatmake}.
  This option can only be used if the zero cost approach
  is available for the target in use (see below).
  @end table
--- 6352,6358 ----
  this switch can be used to modify this default, but it must be
  used for all units in the partition, including all run-time
  library units. One way to achieve this is to use the
! @option{-a} and @option{-f} switches for @command{gnatmake}.
  This option can only be used if the zero cost approach
  is available for the target in use (see below).
  @end table
*************** used by default.
*** 6307,6313 ****
  @table @option
  
  @item -gnatem^^=^@var{path}
! @cindex @option{-gnatem} (@code{gcc})
  A mapping file is a way to communicate to the compiler two mappings:
  from unit names to file names (without any directory information) and from
  file names to path names (with full directory information). These mappings
--- 6376,6382 ----
  @table @option
  
  @item -gnatem^^=^@var{path}
! @cindex @option{-gnatem} (@command{gcc})
  A mapping file is a way to communicate to the compiler two mappings:
  from unit names to file names (without any directory information) and from
  file names to path names (with full directory information). These mappings
*************** sources are read over a slow network con
*** 6319,6325 ****
  you need not be concerned with the format or use of mapping files,
  and the @option{-gnatem} switch is not a switch that you would use
  explicitly. it is intended only for use by automatic tools such as
! @code{gnatmake} running under the project file facility. The
  description here of the format of mapping files is provided
  for completeness and for possible use by other tools.
  
--- 6388,6394 ----
  you need not be concerned with the format or use of mapping files,
  and the @option{-gnatem} switch is not a switch that you would use
  explicitly. it is intended only for use by automatic tools such as
! @command{gnatmake} running under the project file facility. The
  description here of the format of mapping files is provided
  for completeness and for possible use by other tools.
  
*************** will be created.
*** 6344,6355 ****
  Several @option{-gnatem} switches may be specified; however, only the last
  one on the command line will be taken into account.
  
! When using a project file, @code{gnatmake} create a temporary mapping file
  and communicates it to the compiler using this switch.
  
  @end table
  
- 
  @node Integrated Preprocessing
  @subsection Integrated Preprocessing
  
--- 6413,6423 ----
  Several @option{-gnatem} switches may be specified; however, only the last
  one on the command line will be taken into account.
  
! When using a project file, @command{gnatmake} create a temporary mapping file
  and communicates it to the compiler using this switch.
  
  @end table
  
  @node Integrated Preprocessing
  @subsection Integrated Preprocessing
  
*************** indicates, through a text file, the prep
*** 6362,6376 ****
  @option{-gnateD} specifies or modifies the values of preprocessing symbol.
  
  @noindent
! It is recommended that @code{gnatmake} switch ^-s^/SWITCH_CHECK^ should be
  used when Integrated Preprocessing is used. The reason is that preprocessing
  with another Preprocessing Data file without changing the sources will
  not trigger recompilation without this switch.
  
  @noindent
! Note that @code{gnatmake} switch ^-m^/MINIMAL_RECOMPILATION^ will almost
  always trigger recompilation for sources that are preprocessed,
! because @code{gnatmake} cannot compute the checksum of the source after
  preprocessing.
  
  @noindent
--- 6430,6444 ----
  @option{-gnateD} specifies or modifies the values of preprocessing symbol.
  
  @noindent
! It is recommended that @command{gnatmake} switch ^-s^/SWITCH_CHECK^ should be
  used when Integrated Preprocessing is used. The reason is that preprocessing
  with another Preprocessing Data file without changing the sources will
  not trigger recompilation without this switch.
  
  @noindent
! Note that @command{gnatmake} switch ^-m^/MINIMAL_RECOMPILATION^ will almost
  always trigger recompilation for sources that are preprocessed,
! because @command{gnatmake} cannot compute the checksum of the source after
  preprocessing.
  
  @noindent
*************** preprocessing is triggered and parameter
*** 6381,6387 ****
  @table @code
  
  @item -gnatep=@var{file}
! @cindex @option{-gnatep} (@code{gcc})
  This switch indicates to the compiler the file name (without directory
  information) of the preprocessor data file to use. The preprocessor data file
  should be found in the source directories.
--- 6449,6455 ----
  @table @code
  
  @item -gnatep=@var{file}
! @cindex @option{-gnatep} (@command{gcc})
  This switch indicates to the compiler the file name (without directory
  information) of the preprocessor data file to use. The preprocessor data file
  should be found in the source directories.
*************** lines starting with the character '*'.
*** 6402,6409 ****
  
  @noindent
  After the file name or the character '*', another optional literal string
! indicating the file name of the definition file to be used for preprocessing.
! (see @ref{Form of Definitions File}. The definition files are found by the
  compiler in one of the source directories. In some cases, when compiling
  a source in a directory other than the current directory, if the definition
  file is in the current directory, it may be necessary to add the current
--- 6470,6477 ----
  
  @noindent
  After the file name or the character '*', another optional literal string
! indicating the file name of the definition file to be used for preprocessing
! (@pxref{Form of Definitions File}). The definition files are found by the
  compiler in one of the source directories. In some cases, when compiling
  a source in a directory other than the current directory, if the definition
  file is in the current directory, it may be necessary to add the current
*************** Examples of valid lines in a preprocesso
*** 6465,6471 ****
  @end smallexample
  
  @item ^-gnateD^/DATA_PREPROCESSING=^symbol[=value]
! @cindex @option{-gnateD} (@code{gcc})
  Define or redefine a preprocessing symbol, associated with value. If no value
  is given on the command line, then the value of the symbol is @code{True}.
  A symbol is an identifier, following normal Ada (case-insensitive)
--- 6533,6539 ----
  @end smallexample
  
  @item ^-gnateD^/DATA_PREPROCESSING=^symbol[=value]
! @cindex @option{-gnateD} (@command{gcc})
  Define or redefine a preprocessing symbol, associated with value. If no value
  is given on the command line, then the value of the symbol is @code{True}.
  A symbol is an identifier, following normal Ada (case-insensitive)
*************** This switch is similar to switch @option
*** 6484,6489 ****
--- 6552,6586 ----
  
  @end table
  
+ @node Code Generation Control
+ @subsection Code Generation Control
+ 
+ @noindent
+ 
+ The GCC technology provides a wide range of target dependent
+ @option{-m} switches for controlling
+ details of code generation with respect to different versions of
+ architectures. This includes variations in instruction sets (e.g.
+ different members of the power pc family), and different requirements
+ for optimal arrangement of instructions (e.g. different members of
+ the x86 family). The list of available @option{-m} switches may be
+ found in the GCC documentation.
+ 
+ Use of the these @option{-m} switches may in some cases result in improved
+ code performance.
+ 
+ The GNAT Pro technology is tested and qualified without any
+ @option{-m} switches,
+ so generally the most reliable approach is to avoid the use of these
+ switches. However, we generally expect most of these switches to work
+ successfully with GNAT Pro, and many customers have reported successful
+ use of these options.
+ 
+ Our general advice is to avoid the use of @option{-m} switches unless
+ special needs lead to requirements in this area. In particular,
+ there is no point in using @option{-m} switches to improve performance
+ unless you actually see a performance improvement.
+ 
  @ifset vms
  @node Return Codes
  @subsection Return Codes
*************** This switch is similar to switch @option
*** 6494,6503 ****
  On VMS, GNAT compiled programs return POSIX-style codes by default,
  e.g. @option{/RETURN_CODES=POSIX}.
  
! To enable VMS style return codes, GNAT LINK with the option
  @option{/RETURN_CODES=VMS}. For example:
  
  @smallexample
  GNAT LINK MYMAIN.ALI /RETURN_CODES=VMS
  @end smallexample
  
--- 6591,6601 ----
  On VMS, GNAT compiled programs return POSIX-style codes by default,
  e.g. @option{/RETURN_CODES=POSIX}.
  
! To enable VMS style return codes, use GNAT BIND and LINK with the option
  @option{/RETURN_CODES=VMS}. For example:
  
  @smallexample
+ GNAT BIND MYMAIN.ALI /RETURN_CODES=VMS
  GNAT LINK MYMAIN.ALI /RETURN_CODES=VMS
  @end smallexample
  
*************** are suitable for spawning with appropria
*** 6508,6514 ****
  
  @end ifset
  
- 
  @node Search Paths and the Run-Time Library (RTL)
  @section Search Paths and the Run-Time Library (RTL)
  
--- 6606,6611 ----
*************** The directory containing the source file
*** 6530,6536 ****
  
  @item
  Each directory named by an @option{^-I^/SOURCE_SEARCH^} switch given on the
! @code{gcc} command line, in the order given.
  
  @item
  @findex ADA_INCLUDE_PATH
--- 6627,6633 ----
  
  @item
  Each directory named by an @option{^-I^/SOURCE_SEARCH^} switch given on the
! @command{gcc} command line, in the order given.
  
  @item
  @findex ADA_INCLUDE_PATH
*************** The content of the @file{ada_source_path
*** 6578,6584 ****
  installation tree and is used to store standard libraries such as the
  GNAT Run Time Library (RTL) source files.
  @ifclear vms
! @ref{Installing an Ada Library}
  @end ifclear
  @end enumerate
  
--- 6675,6681 ----
  installation tree and is used to store standard libraries such as the
  GNAT Run Time Library (RTL) source files.
  @ifclear vms
! @ref{Installing a library}
  @end ifclear
  @end enumerate
  
*************** The compiler outputs its object files an
*** 6597,6603 ****
  working directory.
  @ifclear vms
  Caution: The object file can be redirected with the @option{-o} switch;
! however, @code{gcc} and @code{gnat1} have not been coordinated on this
  so the @file{ALI} file will not go to the right place. Therefore, you should
  avoid using the @option{-o} switch.
  @end ifclear
--- 6694,6700 ----
  working directory.
  @ifclear vms
  Caution: The object file can be redirected with the @option{-o} switch;
! however, @command{gcc} and @code{gnat1} have not been coordinated on this
  so the @file{ALI} file will not go to the right place. Therefore, you should
  avoid using the @option{-o} switch.
  @end ifclear
*************** Besides simplifying access to the RTL, a
*** 6622,6628 ****
  in compiling sources from multiple directories. This can make
  development environments much more flexible.
  
- 
  @node Order of Compilation Issues
  @section Order of Compilation Issues
  
--- 6719,6724 ----
*************** Generates a main program incorporating t
*** 6721,6727 ****
  This program is a small Ada package (body and spec) that
  must be subsequently compiled
  using the GNAT compiler. The necessary compilation step is usually
! performed automatically by @code{gnatlink}. The two most important
  functions of this program
  are to call the elaboration routines of units in an appropriate order
  and to call the main program.
--- 6817,6823 ----
  This program is a small Ada package (body and spec) that
  must be subsequently compiled
  using the GNAT compiler. The necessary compilation step is usually
! performed automatically by @command{gnatlink}. The two most important
  functions of this program
  are to call the elaboration routines of units in an appropriate order
  and to call the main program.
*************** and to call the main program.
*** 6729,6738 ****
  @item
  Determines the set of object files required by the given main program.
  This information is output in the forms of comments in the generated program,
! to be read by the @code{gnatlink} utility used to link the Ada application.
  @end enumerate
  
- 
  @node Running gnatbind
  @section Running @code{gnatbind}
  
--- 6825,6833 ----
  @item
  Determines the set of object files required by the given main program.
  This information is output in the forms of comments in the generated program,
! to be read by the @command{gnatlink} utility used to link the Ada application.
  @end enumerate
  
  @node Running gnatbind
  @section Running @code{gnatbind}
  
*************** that the given main program requires the
*** 6760,6766 ****
  file is @file{pack.ali} and whose corresponding source spec file is
  @file{pack.ads}, it attempts to locate the source file @file{pack.ads}
  (using the same search path conventions as previously described for the
! @code{gcc} command). If it can locate this source file, it checks that
  the time stamps
  or source checksums of the source and its references to in @file{ALI} files
  match. In other words, any @file{ALI} files that mentions this spec must have
--- 6855,6861 ----
  file is @file{pack.ali} and whose corresponding source spec file is
  @file{pack.ads}, it attempts to locate the source file @file{pack.ads}
  (using the same search path conventions as previously described for the
! @command{gcc} command). If it can locate this source file, it checks that
  the time stamps
  or source checksums of the source and its references to in @file{ALI} files
  match. In other words, any @file{ALI} files that mentions this spec must have
*************** program in C rather than Ada. This may f
*** 6821,6830 ****
  are generating a mixed language program with the main program in C. The
  GNAT compiler itself is an example.
  The use of the @option{^-C^/BIND_FILE=C^} switch
! for both @code{gnatbind} and @code{gnatlink} will cause the program to
  be generated in C (and compiled using the gnu C compiler).
  
- 
  @node Switches for gnatbind
  @section Switches for @command{gnatbind}
  
--- 6916,6924 ----
  are generating a mixed language program with the main program in C. The
  GNAT compiler itself is an example.
  The use of the @option{^-C^/BIND_FILE=C^} switch
! for both @code{gnatbind} and @command{gnatlink} will cause the program to
  be generated in C (and compiled using the gnu C compiler).
  
  @node Switches for gnatbind
  @section Switches for @command{gnatbind}
  
*************** See also the packages @code{GNAT.Traceba
*** 6884,6891 ****
  @code{GNAT.Traceback.Symbolic} for more information.
  @ifclear vms
  Note that on x86 ports, you must not use @option{-fomit-frame-pointer}
! @code{gcc} option.
! @end ifclear vms
  
  @item ^-F^/FORCE_ELABS_FLAGS^
  @cindex @option{^-F^/FORCE_ELABS_FLAGS^} (@command{gnatbind})
--- 6978,6985 ----
  @code{GNAT.Traceback.Symbolic} for more information.
  @ifclear vms
  Note that on x86 ports, you must not use @option{-fomit-frame-pointer}
! @command{gcc} option.
! @end ifclear
  
  @item ^-F^/FORCE_ELABS_FLAGS^
  @cindex @option{^-F^/FORCE_ELABS_FLAGS^} (@command{gnatbind})
*************** Output chosen elaboration order.
*** 6917,6929 ****
  
  @item ^-Lxxx^/BUILD_LIBRARY=xxx^
  @cindex @option{^-L^/BUILD_LIBRARY^} (@command{gnatbind})
! Binds the units for library building. In this case the adainit and
! adafinal procedures (See @pxref{Binding with Non-Ada Main Programs})
  are renamed to ^xxxinit^XXXINIT^ and
  ^xxxfinal^XXXFINAL^.
  Implies ^-n^/NOCOMPILE^.
  @ifclear vms
! (@pxref{GNAT and Libraries}, for more details.)
  @end ifclear
  @ifset vms
  On OpenVMS, these init and final procedures are exported in uppercase
--- 7011,7023 ----
  
  @item ^-Lxxx^/BUILD_LIBRARY=xxx^
  @cindex @option{^-L^/BUILD_LIBRARY^} (@command{gnatbind})
! Bind the units for library building. In this case the adainit and
! adafinal procedures (@pxref{Binding with Non-Ada Main Programs})
  are renamed to ^xxxinit^XXXINIT^ and
  ^xxxfinal^XXXFINAL^.
  Implies ^-n^/NOCOMPILE^.
  @ifclear vms
! (@xref{GNAT and Libraries}, for more details.)
  @end ifclear
  @ifset vms
  On OpenVMS, these init and final procedures are exported in uppercase
*************** Do not look for library files in the sys
*** 6961,6967 ****
  @item --RTS=@var{rts-path}
  @cindex @option{--RTS} (@code{gnatbind})
  Specifies the default location of the runtime library. Same meaning as the
! equivalent @code{gnatmake} flag (see @ref{Switches for gnatmake}).
  
  @item ^-o ^/OUTPUT=^@var{file}
  @cindex @option{^-o ^/OUTPUT^} (@command{gnatbind})
--- 7055,7061 ----
  @item --RTS=@var{rts-path}
  @cindex @option{--RTS} (@code{gnatbind})
  Specifies the default location of the runtime library. Same meaning as the
! equivalent @command{gnatmake} flag (@pxref{Switches for gnatmake}).
  
  @item ^-o ^/OUTPUT=^@var{file}
  @cindex @option{^-o ^/OUTPUT^} (@command{gnatbind})
*************** You may obtain this listing of switches 
*** 7078,7084 ****
  no arguments.
  @end ifclear
  
- 
  @node Consistency-Checking Modes
  @subsection Consistency-Checking Modes
  
--- 7172,7177 ----
*************** the resulting program is self-consistent
*** 7107,7115 ****
  If a source file has been edited since it was last compiled, and you
  specify this switch, the binder will not detect that the object
  file is out of date with respect to the source file. Note that this is the
! mode that is automatically used by @code{gnatmake} because in this
  case the checking against sources has already been performed by
! @code{gnatmake} in the course of compilation (i.e. before binding).
  
  @ifset vms
  @item /READ_SOURCES=AVAILABLE
--- 7200,7208 ----
  If a source file has been edited since it was last compiled, and you
  specify this switch, the binder will not detect that the object
  file is out of date with respect to the source file. Note that this is the
! mode that is automatically used by @command{gnatmake} because in this
  case the checking against sources has already been performed by
! @command{gnatmake} in the course of compilation (i.e. before binding).
  
  @ifset vms
  @item /READ_SOURCES=AVAILABLE
*************** with extreme care.}
*** 7209,7215 ****
  
  @noindent
  The following switches provide additional control over the elaboration
! order. For full details see @xref{Elaboration Order Handling in GNAT}.
  
  @table @option
  @item ^-p^/PESSIMISTIC_ELABORATION^
--- 7302,7308 ----
  
  @noindent
  The following switches provide additional control over the elaboration
! order. For full details see @ref{Elaboration Order Handling in GNAT}.
  
  @table @option
  @item ^-p^/PESSIMISTIC_ELABORATION^
*************** file, unless overridden by the use of th
*** 7372,7378 ****
  The output is an Ada unit in source form that can
  be compiled with GNAT unless the -C switch is used in which case the
  output is a C source file, which must be compiled using the C compiler.
! This compilation occurs automatically as part of the @code{gnatlink}
  processing.
  
  Currently the GNAT run time requires a FPU using 80 bits mode
--- 7465,7471 ----
  The output is an Ada unit in source form that can
  be compiled with GNAT unless the -C switch is used in which case the
  output is a C source file, which must be compiled using the C compiler.
! This compilation occurs automatically as part of the @command{gnatlink}
  processing.
  
  Currently the GNAT run time requires a FPU using 80 bits mode
*************** a list of ALI files can be given, and th
*** 7401,7407 ****
  consists of elaboration of these units in an appropriate order.
  @end table
  
- 
  @node Command-Line Access
  @section Command-Line Access
  
--- 7494,7499 ----
*************** required, your main program must set @co
*** 7432,7438 ****
  @code{gnat_argv} from the @code{argc} and @code{argv} values passed to
  it.
  
- 
  @node Search Paths for gnatbind
  @section Search Paths for @code{gnatbind}
  
--- 7524,7529 ----
*************** it.
*** 7440,7446 ****
  The binder takes the name of an ALI file as its argument and needs to
  locate source files as well as other ALI files to verify object consistency.
  
! For source files, it follows exactly the same search rules as @code{gcc}
  (@pxref{Search Paths and the Run-Time Library (RTL)}). For ALI files the
  directories searched are:
  
--- 7531,7537 ----
  The binder takes the name of an ALI file as its argument and needs to
  locate source files as well as other ALI files to verify object consistency.
  
! For source files, it follows exactly the same search rules as @command{gcc}
  (@pxref{Search Paths and the Run-Time Library (RTL)}). For ALI files the
  directories searched are:
  
*************** installation tree and is used to store s
*** 7502,7508 ****
  GNAT Run Time Library (RTL) unless the switch @option{-nostdlib} is
  specified.
  @ifclear vms
! @ref{Installing an Ada Library}
  @end ifclear
  @end enumerate
  
--- 7593,7599 ----
  GNAT Run Time Library (RTL) unless the switch @option{-nostdlib} is
  specified.
  @ifclear vms
! @ref{Installing a library}
  @end ifclear
  @end enumerate
  
*************** the @code{adainit} and @code{adafinal} r
*** 7601,7619 ****
  after accessing the Ada units.
  @end table
  
- 
  @c ------------------------------------
  @node Linking Using gnatlink
! @chapter Linking Using @code{gnatlink}
  @c ------------------------------------
  @findex gnatlink
  
  @noindent
! This chapter discusses @code{gnatlink}, a tool that links
  an Ada program and builds an executable file. This utility
! invokes the system linker ^(via the @code{gcc} command)^^
  with a correct list of object files and library references.
! @code{gnatlink} automatically determines the list of files and
  references for the Ada part of a program. It uses the binder file
  generated by the @command{gnatbind} to determine this list.
  
--- 7692,7709 ----
  after accessing the Ada units.
  @end table
  
  @c ------------------------------------
  @node Linking Using gnatlink
! @chapter Linking Using @command{gnatlink}
  @c ------------------------------------
  @findex gnatlink
  
  @noindent
! This chapter discusses @command{gnatlink}, a tool that links
  an Ada program and builds an executable file. This utility
! invokes the system linker ^(via the @command{gcc} command)^^
  with a correct list of object files and library references.
! @command{gnatlink} automatically determines the list of files and
  references for the Ada part of a program. It uses the binder file
  generated by the @command{gnatbind} to determine this list.
  
*************** generated by the @command{gnatbind} to d
*** 7625,7634 ****
  @end menu
  
  @node Running gnatlink
! @section Running @code{gnatlink}
  
  @noindent
! The form of the @code{gnatlink} command is
  
  @smallexample
  $ gnatlink [@var{switches}] @var{mainprog}[.ali]
--- 7715,7724 ----
  @end menu
  
  @node Running gnatlink
! @section Running @command{gnatlink}
  
  @noindent
! The form of the @command{gnatlink} command is
  
  @smallexample
  $ gnatlink [@var{switches}] @var{mainprog}[.ali]
*************** $ gnatlink [@var{switches}] @var{mainpro
*** 7636,7642 ****
  @end smallexample
  
  @noindent
! The arguments of @code{gnatlink} (switches, main @file{ALI} file,
  non-Ada objects
  or linker options) may be in any order, provided that no non-Ada object may
  be mistaken for a main @file{ALI} file.
--- 7726,7732 ----
  @end smallexample
  
  @noindent
! The arguments of @command{gnatlink} (switches, main @file{ALI} file,
  non-Ada objects
  or linker options) may be in any order, provided that no non-Ada object may
  be mistaken for a main @file{ALI} file.
*************** whose name is the concatenation of @file
*** 7647,7659 ****
  @noindent
  @file{@var{mainprog}.ali} references the ALI file of the main program.
  The @file{.ali} extension of this file can be omitted. From this
! reference, @code{gnatlink} locates the corresponding binder file
  @file{b~@var{mainprog}.adb} and, using the information in this file along
  with the list of non-Ada objects and linker options, constructs a
  linker command file to create the executable.
  
! The arguments other than the @code{gnatlink} switches and the main @file{ALI}
! file are passed to the linker uninterpreted.
  They typically include the names of
  object files for units written in other languages than Ada and any library
  references required to resolve references in any of these foreign language
--- 7737,7749 ----
  @noindent
  @file{@var{mainprog}.ali} references the ALI file of the main program.
  The @file{.ali} extension of this file can be omitted. From this
! reference, @command{gnatlink} locates the corresponding binder file
  @file{b~@var{mainprog}.adb} and, using the information in this file along
  with the list of non-Ada objects and linker options, constructs a
  linker command file to create the executable.
  
! The arguments other than the @command{gnatlink} switches and the main
! @file{ALI} file are passed to the linker uninterpreted.
  They typically include the names of
  object files for units written in other languages than Ada and any library
  references required to resolve references in any of these foreign language
*************** $ gnatlink my_prog -Wl,-Map,MAPFILE
*** 7682,7727 ****
  @end ifset
  
  Using @var{linker options} it is possible to set the program stack and
! heap size. See @ref{Setting Stack Size from gnatlink}, and
  @ref{Setting Heap Size from gnatlink}.
  
! @code{gnatlink} determines the list of objects required by the Ada
  program and prepends them to the list of objects passed to the linker.
! @code{gnatlink} also gathers any arguments set by the use of
  @code{pragma Linker_Options} and adds them to the list of arguments
  presented to the linker.
  
  @ifset vms
! @code{gnatlink} accepts the following types of extra files on the command
  line: objects (.OBJ), libraries (.OLB), sharable images (.EXE), and
  options files (.OPT). These are recognized and handled according to their
  extension.
  @end ifset
  
  @node Switches for gnatlink
! @section Switches for @code{gnatlink}
  
  @noindent
! The following switches are available with the @code{gnatlink} utility:
  
  @table @option
  @c !sort!
  
  @item ^-A^/BIND_FILE=ADA^
! @cindex @option{^-A^/BIND_FILE=ADA^} (@code{gnatlink})
  The binder has generated code in Ada. This is the default.
  
  @item ^-C^/BIND_FILE=C^
! @cindex @option{^-C^/BIND_FILE=C^} (@code{gnatlink})
  If instead of generating a file in Ada, the binder has generated one in
  C, then the linker needs to know about it. Use this switch to signal
! to @code{gnatlink} that the binder has generated C code rather than
  Ada code.
  
  @item ^-f^/FORCE_OBJECT_FILE_LIST^
  @cindex Command line length
! @cindex @option{^-f^/FORCE_OBJECT_FILE_LIST^} (@code{gnatlink})
! On some targets, the command line length is limited, and @code{gnatlink}
  will generate a separate file for the linker if the list of object files
  is too long.
  The @option{^-f^/FORCE_OBJECT_FILE_LIST^} switch forces this file
--- 7772,7817 ----
  @end ifset
  
  Using @var{linker options} it is possible to set the program stack and
! heap size. See @ref{Setting Stack Size from gnatlink} and
  @ref{Setting Heap Size from gnatlink}.
  
! @command{gnatlink} determines the list of objects required by the Ada
  program and prepends them to the list of objects passed to the linker.
! @command{gnatlink} also gathers any arguments set by the use of
  @code{pragma Linker_Options} and adds them to the list of arguments
  presented to the linker.
  
  @ifset vms
! @command{gnatlink} accepts the following types of extra files on the command
  line: objects (.OBJ), libraries (.OLB), sharable images (.EXE), and
  options files (.OPT). These are recognized and handled according to their
  extension.
  @end ifset
  
  @node Switches for gnatlink
! @section Switches for @command{gnatlink}
  
  @noindent
! The following switches are available with the @command{gnatlink} utility:
  
  @table @option
  @c !sort!
  
  @item ^-A^/BIND_FILE=ADA^
! @cindex @option{^-A^/BIND_FILE=ADA^} (@command{gnatlink})
  The binder has generated code in Ada. This is the default.
  
  @item ^-C^/BIND_FILE=C^
! @cindex @option{^-C^/BIND_FILE=C^} (@command{gnatlink})
  If instead of generating a file in Ada, the binder has generated one in
  C, then the linker needs to know about it. Use this switch to signal
! to @command{gnatlink} that the binder has generated C code rather than
  Ada code.
  
  @item ^-f^/FORCE_OBJECT_FILE_LIST^
  @cindex Command line length
! @cindex @option{^-f^/FORCE_OBJECT_FILE_LIST^} (@command{gnatlink})
! On some targets, the command line length is limited, and @command{gnatlink}
  will generate a separate file for the linker if the list of object files
  is too long.
  The @option{^-f^/FORCE_OBJECT_FILE_LIST^} switch forces this file
*************** special situations where the command lin
*** 7731,7737 ****
  
  @item ^-g^/DEBUG^
  @cindex Debugging information, including
! @cindex @option{^-g^/DEBUG^} (@code{gnatlink})
  The option to include debugging information causes the Ada bind file (in
  other words, @file{b~@var{mainprog}.adb}) to be compiled with
  @option{^-g^/DEBUG^}.
--- 7821,7827 ----
  
  @item ^-g^/DEBUG^
  @cindex Debugging information, including
! @cindex @option{^-g^/DEBUG^} (@command{gnatlink})
  The option to include debugging information causes the Ada bind file (in
  other words, @file{b~@var{mainprog}.adb}) to be compiled with
  @option{^-g^/DEBUG^}.
*************** default. The same procedure apply if a C
*** 7743,7766 ****
  are @file{b_@var{mainprog}.c} and @file{b_@var{mainprog}.o}.
  
  @item ^-n^/NOCOMPILE^
! @cindex @option{^-n^/NOCOMPILE^} (@code{gnatlink})
  Do not compile the file generated by the binder. This may be used when
  a link is rerun with different options, but there is no need to recompile
  the binder file.
  
  @item ^-v^/VERBOSE^
! @cindex @option{^-v^/VERBOSE^} (@code{gnatlink})
  Causes additional information to be output, including a full list of the
  included object files. This switch option is most useful when you want
  to see what set of object files are being used in the link step.
  
  @item ^-v -v^/VERBOSE/VERBOSE^
! @cindex @option{^-v -v^/VERBOSE/VERBOSE^} (@code{gnatlink})
  Very verbose mode. Requests that the compiler operate in verbose mode when
  it compiles the binder file, and that the system linker run in verbose mode.
  
  @item ^-o ^/EXECUTABLE=^@var{exec-name}
! @cindex @option{^-o^/EXECUTABLE^} (@code{gnatlink})
  @var{exec-name} specifies an alternate name for the generated
  executable program. If this switch is omitted, the executable has the same
  name as the main unit. For example, @code{gnatlink try.ali} creates
--- 7833,7856 ----
  are @file{b_@var{mainprog}.c} and @file{b_@var{mainprog}.o}.
  
  @item ^-n^/NOCOMPILE^
! @cindex @option{^-n^/NOCOMPILE^} (@command{gnatlink})
  Do not compile the file generated by the binder. This may be used when
  a link is rerun with different options, but there is no need to recompile
  the binder file.
  
  @item ^-v^/VERBOSE^
! @cindex @option{^-v^/VERBOSE^} (@command{gnatlink})
  Causes additional information to be output, including a full list of the
  included object files. This switch option is most useful when you want
  to see what set of object files are being used in the link step.
  
  @item ^-v -v^/VERBOSE/VERBOSE^
! @cindex @option{^-v -v^/VERBOSE/VERBOSE^} (@command{gnatlink})
  Very verbose mode. Requests that the compiler operate in verbose mode when
  it compiles the binder file, and that the system linker run in verbose mode.
  
  @item ^-o ^/EXECUTABLE=^@var{exec-name}
! @cindex @option{^-o^/EXECUTABLE^} (@command{gnatlink})
  @var{exec-name} specifies an alternate name for the generated
  executable program. If this switch is omitted, the executable has the same
  name as the main unit. For example, @code{gnatlink try.ali} creates
*************** an executable called @file{^try^TRY.EXE^
*** 7768,7795 ****
  
  @ifclear vms
  @item -b @var{target}
! @cindex @option{-b} (@code{gnatlink})
  Compile your program to run on @var{target}, which is the name of a
  system configuration. You must have a GNAT cross-compiler built if
  @var{target} is not the same as your host system.
  
  @item -B@var{dir}
! @cindex @option{-B} (@code{gnatlink})
  Load compiler executables (for example, @code{gnat1}, the Ada compiler)
  from @var{dir} instead of the default location. Only use this switch
  when multiple versions of the GNAT compiler are available. See the
! @code{gcc} manual page for further details. You would normally use the
  @option{-b} or @option{-V} switch instead.
  
  @item --GCC=@var{compiler_name}
! @cindex @option{--GCC=compiler_name} (@code{gnatlink})
  Program used for compiling the binder file. The default is
! `@code{gcc}'. You need to use quotes around @var{compiler_name} if
  @code{compiler_name} contains spaces or other separator characters. As
! an example @option{--GCC="foo -x -y"} will instruct @code{gnatlink} to use
  @code{foo -x -y} as your compiler. Note that switch @option{-c} is always
  inserted after your command name. Thus in the above example the compiler
! command that will be used by @code{gnatlink} will be @code{foo -c -x -y}.
  If several @option{--GCC=compiler_name} are used, only the last
  @var{compiler_name} is taken into account. However, all the additional
  switches are also taken into account. Thus,
--- 7858,7885 ----
  
  @ifclear vms
  @item -b @var{target}
! @cindex @option{-b} (@command{gnatlink})
  Compile your program to run on @var{target}, which is the name of a
  system configuration. You must have a GNAT cross-compiler built if
  @var{target} is not the same as your host system.
  
  @item -B@var{dir}
! @cindex @option{-B} (@command{gnatlink})
  Load compiler executables (for example, @code{gnat1}, the Ada compiler)
  from @var{dir} instead of the default location. Only use this switch
  when multiple versions of the GNAT compiler are available. See the
! @command{gcc} manual page for further details. You would normally use the
  @option{-b} or @option{-V} switch instead.
  
  @item --GCC=@var{compiler_name}
! @cindex @option{--GCC=compiler_name} (@command{gnatlink})
  Program used for compiling the binder file. The default is
! @command{gcc}. You need to use quotes around @var{compiler_name} if
  @code{compiler_name} contains spaces or other separator characters. As
! an example @option{--GCC="foo -x -y"} will instruct @command{gnatlink} to use
  @code{foo -x -y} as your compiler. Note that switch @option{-c} is always
  inserted after your command name. Thus in the above example the compiler
! command that will be used by @command{gnatlink} will be @code{foo -c -x -y}.
  If several @option{--GCC=compiler_name} are used, only the last
  @var{compiler_name} is taken into account. However, all the additional
  switches are also taken into account. Thus,
*************** switches are also taken into account. Th
*** 7797,7809 ****
  @option{--GCC="bar -x -y -z -t"}.
  
  @item --LINK=@var{name}
! @cindex @option{--LINK=} (@code{gnatlink})
  @var{name} is the name of the linker to be invoked. This is especially
  useful in mixed language programs since languages such as C++ require
  their own linker to be used. When this switch is omitted, the default
! name for the linker is (@file{gcc}). When this switch is used, the
! specified linker is called instead of (@file{gcc}) with exactly the same
! parameters that would have been passed to (@file{gcc}) so if the desired
  linker requires different parameters it is necessary to use a wrapper
  script that massages the parameters before invoking the real linker. It
  may be useful to control the exact invocation by using the verbose
--- 7887,7899 ----
  @option{--GCC="bar -x -y -z -t"}.
  
  @item --LINK=@var{name}
! @cindex @option{--LINK=} (@command{gnatlink})
  @var{name} is the name of the linker to be invoked. This is especially
  useful in mixed language programs since languages such as C++ require
  their own linker to be used. When this switch is omitted, the default
! name for the linker is @command{gcc}. When this switch is used, the
! specified linker is called instead of @command{gcc} with exactly the same
! parameters that would have been passed to @command{gcc} so if the desired
  linker requires different parameters it is necessary to use a wrapper
  script that massages the parameters before invoking the real linker. It
  may be useful to control the exact invocation by using the verbose
*************** switch.
*** 7813,7819 ****
  
  @ifset vms
  @item /DEBUG=TRACEBACK
! @cindex @code{/DEBUG=TRACEBACK} (@code{gnatlink})
  This qualifier causes sufficient information to be included in the
  executable file to allow a traceback, but does not include the full
  symbol information needed by the debugger.
--- 7903,7909 ----
  
  @ifset vms
  @item /DEBUG=TRACEBACK
! @cindex @code{/DEBUG=TRACEBACK} (@command{gnatlink})
  This qualifier causes sufficient information to be included in the
  executable file to allow a traceback, but does not include the full
  symbol information needed by the debugger.
*************** Prefer linking with object libraries ove
*** 7839,7849 ****
  @end table
  
  @node Setting Stack Size from gnatlink
! @section Setting Stack Size from @code{gnatlink}
  
  @noindent
  Under Windows systems, it is possible to specify the program stack size from
! @code{gnatlink} using either:
  
  @itemize @bullet
  
--- 7929,7939 ----
  @end table
  
  @node Setting Stack Size from gnatlink
! @section Setting Stack Size from @command{gnatlink}
  
  @noindent
  Under Windows systems, it is possible to specify the program stack size from
! @command{gnatlink} using either:
  
  @itemize @bullet
  
*************** because the coma is a separator for this
*** 7869,7879 ****
  @end itemize
  
  @node Setting Heap Size from gnatlink
! @section Setting Heap Size from @code{gnatlink}
  
  @noindent
  Under Windows systems, it is possible to specify the program heap size from
! @code{gnatlink} using either:
  
  @itemize @bullet
  
--- 7959,7969 ----
  @end itemize
  
  @node Setting Heap Size from gnatlink
! @section Setting Heap Size from @command{gnatlink}
  
  @noindent
  Under Windows systems, it is possible to specify the program heap size from
! @command{gnatlink} using either:
  
  @itemize @bullet
  
*************** because the coma is a separator for this
*** 7899,7905 ****
  @end itemize
  
  @node The GNAT Make Program gnatmake
! @chapter The GNAT Make Program @code{gnatmake}
  @findex gnatmake
  
  @menu
--- 7989,7995 ----
  @end itemize
  
  @node The GNAT Make Program gnatmake
! @chapter The GNAT Make Program @command{gnatmake}
  @findex gnatmake
  
  @menu
*************** recompiled. The dependency rules in Ada 
*** 7939,7945 ****
  in the presence of overloading, @code{use} clauses, generics and inlined
  subprograms.
  
! @code{gnatmake} automatically takes care of the third and fourth steps
  of this process. It determines which sources need to be compiled,
  compiles them, and binds and links the resulting object files.
  
--- 8029,8035 ----
  in the presence of overloading, @code{use} clauses, generics and inlined
  subprograms.
  
! @command{gnatmake} automatically takes care of the third and fourth steps
  of this process. It determines which sources need to be compiled,
  compiles them, and binds and links the resulting object files.
  
*************** accurately recomputed from the new sourc
*** 7948,7960 ****
  the GNAT compilation model makes this possible. This means that if
  changes to the source program cause corresponding changes in
  dependencies, they will always be tracked exactly correctly by
! @code{gnatmake}.
  
  @node Running gnatmake
! @section Running @code{gnatmake}
  
  @noindent
! The usual form of the @code{gnatmake} command is
  
  @smallexample
  $ gnatmake [@var{switches}] @var{file_name}
--- 8038,8050 ----
  the GNAT compilation model makes this possible. This means that if
  changes to the source program cause corresponding changes in
  dependencies, they will always be tracked exactly correctly by
! @command{gnatmake}.
  
  @node Running gnatmake
! @section Running @command{gnatmake}
  
  @noindent
! The usual form of the @command{gnatmake} command is
  
  @smallexample
  $ gnatmake [@var{switches}] @var{file_name}
*************** extension be given. A relative or absolu
*** 7977,8010 ****
  specified in a @var{file_name}, in which case, the input source file will
  be searched for in the specified directory only. Otherwise, the input
  source file will first be searched in the directory where
! @code{gnatmake} was invoked and if it is not found, it will be search on
  the source path of the compiler as described in
  @ref{Search Paths and the Run-Time Library (RTL)}.
  
! All @code{gnatmake} output (except when you specify
  @option{^-M^/DEPENDENCIES_LIST^}) is to
  @file{stderr}. The output produced by the
  @option{^-M^/DEPENDENCIES_LIST^} switch is send to
  @file{stdout}.
  
  @node Switches for gnatmake
! @section Switches for @code{gnatmake}
  
  @noindent
! You may specify any of the following switches to @code{gnatmake}:
  
  @table @option
  @c !sort!
  @ifclear vms
  @item --GCC=@var{compiler_name}
! @cindex @option{--GCC=compiler_name} (@code{gnatmake})
! Program used for compiling. The default is `@code{gcc}'. You need to use
  quotes around @var{compiler_name} if @code{compiler_name} contains
  spaces or other separator characters. As an example @option{--GCC="foo -x
! -y"} will instruct @code{gnatmake} to use @code{foo -x -y} as your
  compiler. Note that switch @option{-c} is always inserted after your
  command name. Thus in the above example the compiler command that will
! be used by @code{gnatmake} will be @code{foo -c -x -y}.
  If several @option{--GCC=compiler_name} are used, only the last
  @var{compiler_name} is taken into account. However, all the additional
  switches are also taken into account. Thus,
--- 8067,8100 ----
  specified in a @var{file_name}, in which case, the input source file will
  be searched for in the specified directory only. Otherwise, the input
  source file will first be searched in the directory where
! @command{gnatmake} was invoked and if it is not found, it will be search on
  the source path of the compiler as described in
  @ref{Search Paths and the Run-Time Library (RTL)}.
  
! All @command{gnatmake} output (except when you specify
  @option{^-M^/DEPENDENCIES_LIST^}) is to
  @file{stderr}. The output produced by the
  @option{^-M^/DEPENDENCIES_LIST^} switch is send to
  @file{stdout}.
  
  @node Switches for gnatmake
! @section Switches for @command{gnatmake}
  
  @noindent
! You may specify any of the following switches to @command{gnatmake}:
  
  @table @option
  @c !sort!
  @ifclear vms
  @item --GCC=@var{compiler_name}
! @cindex @option{--GCC=compiler_name} (@command{gnatmake})
! Program used for compiling. The default is `@command{gcc}'. You need to use
  quotes around @var{compiler_name} if @code{compiler_name} contains
  spaces or other separator characters. As an example @option{--GCC="foo -x
! -y"} will instruct @command{gnatmake} to use @code{foo -x -y} as your
  compiler. Note that switch @option{-c} is always inserted after your
  command name. Thus in the above example the compiler command that will
! be used by @command{gnatmake} will be @code{foo -c -x -y}.
  If several @option{--GCC=compiler_name} are used, only the last
  @var{compiler_name} is taken into account. However, all the additional
  switches are also taken into account. Thus,
*************** switches are also taken into account. Th
*** 8012,8043 ****
  @option{--GCC="bar -x -y -z -t"}.
  
  @item --GNATBIND=@var{binder_name}
! @cindex @option{--GNATBIND=binder_name} (@code{gnatmake})
  Program used for binding. The default is `@code{gnatbind}'. You need to
  use quotes around @var{binder_name} if @var{binder_name} contains spaces
  or other separator characters. As an example @option{--GNATBIND="bar -x
! -y"} will instruct @code{gnatmake} to use @code{bar -x -y} as your
! binder. Binder switches that are normally appended by @code{gnatmake} to
  `@code{gnatbind}' are now appended to the end of @code{bar -x -y}.
  
  @item --GNATLINK=@var{linker_name}
! @cindex @option{--GNATLINK=linker_name} (@code{gnatmake})
! Program used for linking. The default is `@code{gnatlink}'. You need to
  use quotes around @var{linker_name} if @var{linker_name} contains spaces
  or other separator characters. As an example @option{--GNATLINK="lan -x
! -y"} will instruct @code{gnatmake} to use @code{lan -x -y} as your
! linker. Linker switches that are normally appended by @code{gnatmake} to
! `@code{gnatlink}' are now appended to the end of @code{lan -x -y}.
  
  @end ifclear
  
  @item ^-a^/ALL_FILES^
! @cindex @option{^-a^/ALL_FILES^} (@code{gnatmake})
  Consider all files in the make process, even the GNAT internal system
  files (for example, the predefined Ada library files), as well as any
  locked files. Locked files are files whose ALI file is write-protected.
  By default,
! @code{gnatmake} does not check these files,
  because the assumption is that the GNAT internal files are properly up
  to date, and also that any write protected ALI files have been properly
  installed. Note that if there is an installation problem, such that one
--- 8102,8133 ----
  @option{--GCC="bar -x -y -z -t"}.
  
  @item --GNATBIND=@var{binder_name}
! @cindex @option{--GNATBIND=binder_name} (@command{gnatmake})
  Program used for binding. The default is `@code{gnatbind}'. You need to
  use quotes around @var{binder_name} if @var{binder_name} contains spaces
  or other separator characters. As an example @option{--GNATBIND="bar -x
! -y"} will instruct @command{gnatmake} to use @code{bar -x -y} as your
! binder. Binder switches that are normally appended by @command{gnatmake} to
  `@code{gnatbind}' are now appended to the end of @code{bar -x -y}.
  
  @item --GNATLINK=@var{linker_name}
! @cindex @option{--GNATLINK=linker_name} (@command{gnatmake})
! Program used for linking. The default is `@command{gnatlink}'. You need to
  use quotes around @var{linker_name} if @var{linker_name} contains spaces
  or other separator characters. As an example @option{--GNATLINK="lan -x
! -y"} will instruct @command{gnatmake} to use @code{lan -x -y} as your
! linker. Linker switches that are normally appended by @command{gnatmake} to
! `@command{gnatlink}' are now appended to the end of @code{lan -x -y}.
  
  @end ifclear
  
  @item ^-a^/ALL_FILES^
! @cindex @option{^-a^/ALL_FILES^} (@command{gnatmake})
  Consider all files in the make process, even the GNAT internal system
  files (for example, the predefined Ada library files), as well as any
  locked files. Locked files are files whose ALI file is write-protected.
  By default,
! @command{gnatmake} does not check these files,
  because the assumption is that the GNAT internal files are properly up
  to date, and also that any write protected ALI files have been properly
  installed. Note that if there is an installation problem, such that one
*************** the @code{/CHECKS=SUPPRESS_ALL /STYLE_CH
*** 8061,8067 ****
  @end ifset
  
  @item ^-b^/ACTIONS=BIND^
! @cindex @option{^-b^/ACTIONS=BIND^} (@code{gnatmake})
  Bind only. Can be combined with @option{^-c^/ACTIONS=COMPILE^} to do
  compilation and binding, but no link.
  Can be combined with @option{^-l^/ACTIONS=LINK^}
--- 8151,8157 ----
  @end ifset
  
  @item ^-b^/ACTIONS=BIND^
! @cindex @option{^-b^/ACTIONS=BIND^} (@command{gnatmake})
  Bind only. Can be combined with @option{^-c^/ACTIONS=COMPILE^} to do
  compilation and binding, but no link.
  Can be combined with @option{^-l^/ACTIONS=LINK^}
*************** may be given without extension, with the
*** 8073,8095 ****
  Project File is specified, with the ALI file extension.
  
  @item ^-c^/ACTIONS=COMPILE^
! @cindex @option{^-c^/ACTIONS=COMPILE^} (@code{gnatmake})
  Compile only. Do not perform binding, except when @option{^-b^/ACTIONS=BIND^}
  is also specified. Do not perform linking, except if both
  @option{^-b^/ACTIONS=BIND^} and
   @option{^-l^/ACTIONS=LINK^} are also specified.
  If the root unit specified by @var{file_name} is not a main unit, this is the
! default. Otherwise @code{gnatmake} will attempt binding and linking
  unless all objects are up to date and the executable is more recent than
  the objects.
  
  @item ^-C^/MAPPING^
! @cindex @option{^-C^/MAPPING^} (@code{gnatmake})
  Use a temporary mapping file. A mapping file is a way to communicate to the
  compiler two mappings: from unit names to file names (without any directory
  information) and from file names to path names (with full directory
  information). These mappings are used by the compiler to short-circuit the path
! search. When @code{gnatmake} is invoked with this switch, it will create
  a temporary mapping file, initially populated by the project manager,
  if @option{^-P^/PROJECT_FILE^} is used, otherwise initially empty.
  Each invocation of the compiler will add the newly accessed sources to the
--- 8163,8185 ----
  Project File is specified, with the ALI file extension.
  
  @item ^-c^/ACTIONS=COMPILE^
! @cindex @option{^-c^/ACTIONS=COMPILE^} (@command{gnatmake})
  Compile only. Do not perform binding, except when @option{^-b^/ACTIONS=BIND^}
  is also specified. Do not perform linking, except if both
  @option{^-b^/ACTIONS=BIND^} and
   @option{^-l^/ACTIONS=LINK^} are also specified.
  If the root unit specified by @var{file_name} is not a main unit, this is the
! default. Otherwise @command{gnatmake} will attempt binding and linking
  unless all objects are up to date and the executable is more recent than
  the objects.
  
  @item ^-C^/MAPPING^
! @cindex @option{^-C^/MAPPING^} (@command{gnatmake})
  Use a temporary mapping file. A mapping file is a way to communicate to the
  compiler two mappings: from unit names to file names (without any directory
  information) and from file names to path names (with full directory
  information). These mappings are used by the compiler to short-circuit the path
! search. When @command{gnatmake} is invoked with this switch, it will create
  a temporary mapping file, initially populated by the project manager,
  if @option{^-P^/PROJECT_FILE^} is used, otherwise initially empty.
  Each invocation of the compiler will add the newly accessed sources to the
*************** mapping file. This will improve the sour
*** 8097,8103 ****
  of the compiler.
  
  @item ^-C=^/USE_MAPPING_FILE=^@var{file}
! @cindex @option{^-C=^/USE_MAPPING^} (@code{gnatmake})
  Use a specific mapping file. The file, specified as a path name (absolute or
  relative) by this switch, should already exist, otherwise the switch is
  ineffective. The specified mapping file will be communicated to the compiler.
--- 8187,8193 ----
  of the compiler.
  
  @item ^-C=^/USE_MAPPING_FILE=^@var{file}
! @cindex @option{^-C=^/USE_MAPPING^} (@command{gnatmake})
  Use a specific mapping file. The file, specified as a path name (absolute or
  relative) by this switch, should already exist, otherwise the switch is
  ineffective. The specified mapping file will be communicated to the compiler.
*************** This switch is not compatible with a pro
*** 8106,8187 ****
  (^-j^/PROCESSES=^nnn, when nnn is greater than 1).
  
  @item ^-D ^/DIRECTORY_OBJECTS=^@var{dir}
! @cindex @option{^-D^/DIRECTORY_OBJECTS^} (@code{gnatmake})
  Put all object files and ALI file in directory @var{dir}.
  If the @option{^-D^/DIRECTORY_OBJECTS^} switch is not used, all object files
  and ALI files go in the current working directory.
  
  This switch cannot be used when using a project file.
  
  @item ^-f^/FORCE_COMPILE^
! @cindex @option{^-f^/FORCE_COMPILE^} (@code{gnatmake})
  Force recompilations. Recompile all sources, even though some object
  files may be up to date, but don't recompile predefined or GNAT internal
  files or locked files (files with a write-protected ALI file),
  unless the @option{^-a^/ALL_FILES^} switch is also specified.
  
  @item ^-F^/FULL_PATH_IN_BRIEF_MESSAGES^
! @cindex @option{^-F^/FULL_PATH_IN_BRIEF_MESSAGES^} (@code{gnatmake})
  When using project files, if some errors or warnings are detected during
  parsing and verbose mode is not in effect (no use of switch
  ^-v^/VERBOSE^), then error lines start with the full path name of the project
  file, rather than its simple file name.
  
  @item ^-i^/IN_PLACE^
! @cindex @option{^-i^/IN_PLACE^} (@code{gnatmake})
! In normal mode, @code{gnatmake} compiles all object files and ALI files
  into the current directory. If the @option{^-i^/IN_PLACE^} switch is used,
  then instead object files and ALI files that already exist are overwritten
  in place. This means that once a large project is organized into separate
! directories in the desired manner, then @code{gnatmake} will automatically
  maintain and update this organization. If no ALI files are found on the
  Ada object path (@ref{Search Paths and the Run-Time Library (RTL)}),
  the new object and ALI files are created in the
  directory containing the source being compiled. If another organization
  is desired, where objects and sources are kept in different directories,
  a useful technique is to create dummy ALI files in the desired directories.
! When detecting such a dummy file, @code{gnatmake} will be forced to recompile
! the corresponding source file, and it will be put the resulting object
! and ALI files in the directory where it found the dummy file.
  
  @item ^-j^/PROCESSES=^@var{n}
! @cindex @option{^-j^/PROCESSES^} (@code{gnatmake})
  @cindex Parallel make
  Use @var{n} processes to carry out the (re)compilations. On a
  multiprocessor machine compilations will occur in parallel. In the
  event of compilation errors, messages from various compilations might
! get interspersed (but @code{gnatmake} will give you the full ordered
  list of failing compiles at the end). If this is problematic, rerun
  the make process with n set to 1 to get a clean list of messages.
  
  @item ^-k^/CONTINUE_ON_ERROR^
! @cindex @option{^-k^/CONTINUE_ON_ERROR^} (@code{gnatmake})
  Keep going. Continue as much as possible after a compilation error. To
  ease the programmer's task in case of compilation errors, the list of
! sources for which the compile fails is given when @code{gnatmake}
  terminates.
  
! If @code{gnatmake} is invoked with several @file{file_names} and with this
  switch, if there are compilation errors when building an executable,
! @code{gnatmake} will not attempt to build the following executables.
  
  @item ^-l^/ACTIONS=LINK^
! @cindex @option{^-l^/ACTIONS=LINK^} (@code{gnatmake})
  Link only. Can be combined with @option{^-b^/ACTIONS=BIND^} to binding
  and linking. Linking will not be performed if combined with
  @option{^-c^/ACTIONS=COMPILE^}
  but not with @option{^-b^/ACTIONS=BIND^}.
  When not combined with @option{^-b^/ACTIONS=BIND^}
  all the units in the closure of the main program must have been previously
! compiled and must be up to date, and the main program need to have been bound.
  The root unit specified by @var{file_name}
  may be given without extension, with the source extension or, if no GNAT
  Project File is specified, with the ALI file extension.
  
  @item ^-m^/MINIMAL_RECOMPILATION^
! @cindex @option{^-m^/MINIMAL_RECOMPILATION^} (@code{gnatmake})
! Specifies that the minimum necessary amount of recompilations
! be performed. In this mode @code{gnatmake} ignores time
  stamp differences when the only
  modifications to a source file consist in adding/removing comments,
  empty lines, spaces or tabs. This means that if you have changed the
--- 8196,8283 ----
  (^-j^/PROCESSES=^nnn, when nnn is greater than 1).
  
  @item ^-D ^/DIRECTORY_OBJECTS=^@var{dir}
! @cindex @option{^-D^/DIRECTORY_OBJECTS^} (@command{gnatmake})
  Put all object files and ALI file in directory @var{dir}.
  If the @option{^-D^/DIRECTORY_OBJECTS^} switch is not used, all object files
  and ALI files go in the current working directory.
  
  This switch cannot be used when using a project file.
  
+ @ifclear vms
+ @item -eL
+ @cindex @option{-eL} (@command{gnatmake})
+ Follow all symbolic links when processing project files.
+ @end ifclear
+ 
  @item ^-f^/FORCE_COMPILE^
! @cindex @option{^-f^/FORCE_COMPILE^} (@command{gnatmake})
  Force recompilations. Recompile all sources, even though some object
  files may be up to date, but don't recompile predefined or GNAT internal
  files or locked files (files with a write-protected ALI file),
  unless the @option{^-a^/ALL_FILES^} switch is also specified.
  
  @item ^-F^/FULL_PATH_IN_BRIEF_MESSAGES^
! @cindex @option{^-F^/FULL_PATH_IN_BRIEF_MESSAGES^} (@command{gnatmake})
  When using project files, if some errors or warnings are detected during
  parsing and verbose mode is not in effect (no use of switch
  ^-v^/VERBOSE^), then error lines start with the full path name of the project
  file, rather than its simple file name.
  
  @item ^-i^/IN_PLACE^
! @cindex @option{^-i^/IN_PLACE^} (@command{gnatmake})
! In normal mode, @command{gnatmake} compiles all object files and ALI files
  into the current directory. If the @option{^-i^/IN_PLACE^} switch is used,
  then instead object files and ALI files that already exist are overwritten
  in place. This means that once a large project is organized into separate
! directories in the desired manner, then @command{gnatmake} will automatically
  maintain and update this organization. If no ALI files are found on the
  Ada object path (@ref{Search Paths and the Run-Time Library (RTL)}),
  the new object and ALI files are created in the
  directory containing the source being compiled. If another organization
  is desired, where objects and sources are kept in different directories,
  a useful technique is to create dummy ALI files in the desired directories.
! When detecting such a dummy file, @command{gnatmake} will be forced to
! recompile the corresponding source file, and it will be put the resulting
! object and ALI files in the directory where it found the dummy file.
  
  @item ^-j^/PROCESSES=^@var{n}
! @cindex @option{^-j^/PROCESSES^} (@command{gnatmake})
  @cindex Parallel make
  Use @var{n} processes to carry out the (re)compilations. On a
  multiprocessor machine compilations will occur in parallel. In the
  event of compilation errors, messages from various compilations might
! get interspersed (but @command{gnatmake} will give you the full ordered
  list of failing compiles at the end). If this is problematic, rerun
  the make process with n set to 1 to get a clean list of messages.
  
  @item ^-k^/CONTINUE_ON_ERROR^
! @cindex @option{^-k^/CONTINUE_ON_ERROR^} (@command{gnatmake})
  Keep going. Continue as much as possible after a compilation error. To
  ease the programmer's task in case of compilation errors, the list of
! sources for which the compile fails is given when @command{gnatmake}
  terminates.
  
! If @command{gnatmake} is invoked with several @file{file_names} and with this
  switch, if there are compilation errors when building an executable,
! @command{gnatmake} will not attempt to build the following executables.
  
  @item ^-l^/ACTIONS=LINK^
! @cindex @option{^-l^/ACTIONS=LINK^} (@command{gnatmake})
  Link only. Can be combined with @option{^-b^/ACTIONS=BIND^} to binding
  and linking. Linking will not be performed if combined with
  @option{^-c^/ACTIONS=COMPILE^}
  but not with @option{^-b^/ACTIONS=BIND^}.
  When not combined with @option{^-b^/ACTIONS=BIND^}
  all the units in the closure of the main program must have been previously
! compiled and must be up to date, and the main program needs to have been bound.
  The root unit specified by @var{file_name}
  may be given without extension, with the source extension or, if no GNAT
  Project File is specified, with the ALI file extension.
  
  @item ^-m^/MINIMAL_RECOMPILATION^
! @cindex @option{^-m^/MINIMAL_RECOMPILATION^} (@command{gnatmake})
! Specify that the minimum necessary amount of recompilations
! be performed. In this mode @command{gnatmake} ignores time
  stamp differences when the only
  modifications to a source file consist in adding/removing comments,
  empty lines, spaces or tabs. This means that if you have changed the
*************** trade-off between compilation time and a
*** 8195,8201 ****
  
  @item ^-M^/DEPENDENCIES_LIST^
  @cindex Dependencies, producing list
! @cindex @option{^-M^/DEPENDENCIES_LIST^} (@code{gnatmake})
  Check if all objects are up to date. If they are, output the object
  dependences to @file{stdout} in a form that can be directly exploited in
  a @file{Makefile}. By default, each source file is prefixed with its
--- 8291,8297 ----
  
  @item ^-M^/DEPENDENCIES_LIST^
  @cindex Dependencies, producing list
! @cindex @option{^-M^/DEPENDENCIES_LIST^} (@command{gnatmake})
  Check if all objects are up to date. If they are, output the object
  dependences to @file{stdout} in a form that can be directly exploited in
  a @file{Makefile}. By default, each source file is prefixed with its
*************** dependencies of the objects in external 
*** 8216,8222 ****
  are never reported.
  
  @item ^-n^/DO_OBJECT_CHECK^
! @cindex @option{^-n^/DO_OBJECT_CHECK^} (@code{gnatmake})
  Don't compile, bind, or link. Checks if all objects are up to date.
  If they are not, the full name of the first file that needs to be
  recompiled is printed.
--- 8312,8318 ----
  are never reported.
  
  @item ^-n^/DO_OBJECT_CHECK^
! @cindex @option{^-n^/DO_OBJECT_CHECK^} (@command{gnatmake})
  Don't compile, bind, or link. Checks if all objects are up to date.
  If they are not, the full name of the first file that needs to be
  recompiled is printed.
*************** Repeated use of this option, followed by
*** 8224,8250 ****
  file, will eventually result in recompiling all required units.
  
  @item ^-o ^/EXECUTABLE=^@var{exec_name}
! @cindex @option{^-o^/EXECUTABLE^} (@code{gnatmake})
  Output executable name. The name of the final executable program will be
  @var{exec_name}. If the @option{^-o^/EXECUTABLE^} switch is omitted the default
  name for the executable will be the name of the input file in appropriate form
  for an executable file on the host system.
  
! This switch cannot be used when invoking @code{gnatmake} with several
  @file{file_names}.
  
  @item ^-P^/PROJECT_FILE=^@var{project}
! @cindex @option{^-P^/PROJECT_FILE^} (@code{gnatmake})
  Use project file @var{project}. Only one such switch can be used.
! See @ref{gnatmake and Project Files}.
  
  @item ^-q^/QUIET^
! @cindex @option{^-q^/QUIET^} (@code{gnatmake})
  Quiet. When this flag is not set, the commands carried out by
! @code{gnatmake} are displayed.
  
  @item ^-s^/SWITCH_CHECK/^
! @cindex @option{^-s^/SWITCH_CHECK^} (@code{gnatmake})
  Recompile if compiler switches have changed since last compilation.
  All compiler switches but -I and -o are taken into account in the
  following way:
--- 8320,8346 ----
  file, will eventually result in recompiling all required units.
  
  @item ^-o ^/EXECUTABLE=^@var{exec_name}
! @cindex @option{^-o^/EXECUTABLE^} (@command{gnatmake})
  Output executable name. The name of the final executable program will be
  @var{exec_name}. If the @option{^-o^/EXECUTABLE^} switch is omitted the default
  name for the executable will be the name of the input file in appropriate form
  for an executable file on the host system.
  
! This switch cannot be used when invoking @command{gnatmake} with several
  @file{file_names}.
  
  @item ^-P^/PROJECT_FILE=^@var{project}
! @cindex @option{^-P^/PROJECT_FILE^} (@command{gnatmake})
  Use project file @var{project}. Only one such switch can be used.
! @xref{gnatmake and Project Files}.
  
  @item ^-q^/QUIET^
! @cindex @option{^-q^/QUIET^} (@command{gnatmake})
  Quiet. When this flag is not set, the commands carried out by
! @command{gnatmake} are displayed.
  
  @item ^-s^/SWITCH_CHECK/^
! @cindex @option{^-s^/SWITCH_CHECK^} (@command{gnatmake})
  Recompile if compiler switches have changed since last compilation.
  All compiler switches but -I and -o are taken into account in the
  following way:
*************** is equivalent to @option{-O -g}.
*** 8256,8310 ****
  This switch is recommended when Integrated Preprocessing is used.
  
  @item ^-u^/UNIQUE^
! @cindex @option{^-u^/UNIQUE^} (@code{gnatmake})
  Unique. Recompile at most the main files. It implies -c. Combined with
  -f, it is equivalent to calling the compiler directly. Note that using
  ^-u^/UNIQUE^ with a project file and no main has a special meaning
! (see @ref{Project Files and Main Subprograms}).
  
  @item ^-U^/ALL_PROJECTS^
! @cindex @option{^-U^/ALL_PROJECTS^} (@code{gnatmake})
  When used without a project file or with one or several mains on the command
  line, is equivalent to ^-u^/UNIQUE^. When used with a project file and no main
  on the command line, all sources of all project files are checked and compiled
  if not up to date, and libraries are rebuilt, if necessary.
  
  @item ^-v^/REASONS^
! @cindex @option{^-v^/REASONS^} (@code{gnatmake})
! Verbose. Displays the reason for all recompilations @code{gnatmake}
  decides are necessary.
  
  @item ^-vP^/MESSAGES_PROJECT_FILE=^@emph{x}
! Indicates the verbosity of the parsing of GNAT project files.
! See @ref{Switches Related to Project Files}.
  
  @item ^-X^/EXTERNAL_REFERENCE=^@var{name=value}
! Indicates that external variable @var{name} has the value @var{value}.
  The Project Manager will use this value for occurrences of
  @code{external(name)} when parsing the project file.
! See @ref{Switches Related to Project Files}.
  
  @item ^-z^/NOMAIN^
! @cindex @option{^-z^/NOMAIN^} (@code{gnatmake})
  No main subprogram. Bind and link the program even if the unit name
  given on the command line is a package name. The resulting executable
  will execute the elaboration routines of the package and its closure,
  then the finalization routines.
  
  @item ^-g^/DEBUG^
! @cindex @option{^-g^/DEBUG^} (@code{gnatmake})
  Enable debugging. This switch is simply passed to the compiler and to the
  linker.
  
  @end table
  
  @table @asis
! @item @code{gcc} @asis{switches}
  @ifclear vms
! Any uppercase switch (other than @option{-A},
! @option{-L} or
! @option{-S}) or any switch that is more than one character is passed to
! @code{gcc} (e.g. @option{-O}, @option{-gnato,} etc.)
  @end ifclear
  @ifset vms
  Any qualifier that cannot be recognized as a qualifier for @code{GNAT MAKE}
--- 8352,8413 ----
  This switch is recommended when Integrated Preprocessing is used.
  
  @item ^-u^/UNIQUE^
! @cindex @option{^-u^/UNIQUE^} (@command{gnatmake})
  Unique. Recompile at most the main files. It implies -c. Combined with
  -f, it is equivalent to calling the compiler directly. Note that using
  ^-u^/UNIQUE^ with a project file and no main has a special meaning
! (@pxref{Project Files and Main Subprograms}).
  
  @item ^-U^/ALL_PROJECTS^
! @cindex @option{^-U^/ALL_PROJECTS^} (@command{gnatmake})
  When used without a project file or with one or several mains on the command
  line, is equivalent to ^-u^/UNIQUE^. When used with a project file and no main
  on the command line, all sources of all project files are checked and compiled
  if not up to date, and libraries are rebuilt, if necessary.
  
  @item ^-v^/REASONS^
! @cindex @option{^-v^/REASONS^} (@command{gnatmake})
! Verbose. Display the reason for all recompilations @command{gnatmake}
  decides are necessary.
  
  @item ^-vP^/MESSAGES_PROJECT_FILE=^@emph{x}
! Indicate the verbosity of the parsing of GNAT project files.
! @xref{Switches Related to Project Files}.
! 
! @item ^-x^/NON_PROJECT_UNIT_COMPILATION^
! @cindex @option{^-x^/NON_PROJECT_UNIT_COMPILATION^} (@command{gnatmake})
! Indicate that sources that are not part of any Project File may be compiled.
! Normally, when using Project Files, only sources that are part of a Project
! File may be compile. When this switch is used, a source outside of all Project
! Files may be compiled. The ALI file and the object file will be put in the
! object directory of the main Project. The compilation switches used will only
! be those specified on the command line.
  
  @item ^-X^/EXTERNAL_REFERENCE=^@var{name=value}
! Indicate that external variable @var{name} has the value @var{value}.
  The Project Manager will use this value for occurrences of
  @code{external(name)} when parsing the project file.
! @xref{Switches Related to Project Files}.
  
  @item ^-z^/NOMAIN^
! @cindex @option{^-z^/NOMAIN^} (@command{gnatmake})
  No main subprogram. Bind and link the program even if the unit name
  given on the command line is a package name. The resulting executable
  will execute the elaboration routines of the package and its closure,
  then the finalization routines.
  
  @item ^-g^/DEBUG^
! @cindex @option{^-g^/DEBUG^} (@command{gnatmake})
  Enable debugging. This switch is simply passed to the compiler and to the
  linker.
  
  @end table
  
  @table @asis
! @item @command{gcc} @asis{switches}
  @ifclear vms
! Any uppercase or multi-character switch that is not a @command{gnatmake} switch
! is passed to @command{gcc} (e.g. @option{-O}, @option{-gnato,} etc.)
  @end ifclear
  @ifset vms
  Any qualifier that cannot be recognized as a qualifier for @code{GNAT MAKE}
*************** Source and library search path switches:
*** 8320,8334 ****
  @table @option
  @c !sort!
  @item ^-aI^/SOURCE_SEARCH=^@var{dir}
! @cindex @option{^-aI^/SOURCE_SEARCH^} (@code{gnatmake})
  When looking for source files also look in directory @var{dir}.
  The order in which source files search is undertaken is
  described in @ref{Search Paths and the Run-Time Library (RTL)}.
  
  @item ^-aL^/SKIP_MISSING=^@var{dir}
! @cindex @option{^-aL^/SKIP_MISSING^} (@code{gnatmake})
  Consider @var{dir} as being an externally provided Ada library.
! Instructs @code{gnatmake} to skip compilation units whose @file{.ALI}
  files have been located in directory @var{dir}. This allows you to have
  missing bodies for the units in @var{dir} and to ignore out of date bodies
  for the same units. You still need to specify
--- 8423,8437 ----
  @table @option
  @c !sort!
  @item ^-aI^/SOURCE_SEARCH=^@var{dir}
! @cindex @option{^-aI^/SOURCE_SEARCH^} (@command{gnatmake})
  When looking for source files also look in directory @var{dir}.
  The order in which source files search is undertaken is
  described in @ref{Search Paths and the Run-Time Library (RTL)}.
  
  @item ^-aL^/SKIP_MISSING=^@var{dir}
! @cindex @option{^-aL^/SKIP_MISSING^} (@command{gnatmake})
  Consider @var{dir} as being an externally provided Ada library.
! Instructs @command{gnatmake} to skip compilation units whose @file{.ALI}
  files have been located in directory @var{dir}. This allows you to have
  missing bodies for the units in @var{dir} and to ignore out of date bodies
  for the same units. You still need to specify
*************** the location of the specs for these unit
*** 8336,8372 ****
  @option{^-aI^/SOURCE_SEARCH=^@var{dir}}
  or @option{^-I^/SEARCH=^@var{dir}}.
  Note: this switch is provided for compatibility with previous versions
! of @code{gnatmake}. The easier method of causing standard libraries
  to be excluded from consideration is to write-protect the corresponding
  ALI files.
  
  @item ^-aO^/OBJECT_SEARCH=^@var{dir}
! @cindex @option{^-aO^/OBJECT_SEARCH^} (@code{gnatmake})
  When searching for library and object files, look in directory
  @var{dir}. The order in which library files are searched is described in
  @ref{Search Paths for gnatbind}.
  
  @item ^-A^/CONDITIONAL_SOURCE_SEARCH=^@var{dir}
! @cindex Search paths, for @code{gnatmake}
! @cindex @option{^-A^/CONDITIONAL_SOURCE_SEARCH^} (@code{gnatmake})
  Equivalent to @option{^-aL^/SKIP_MISSING=^@var{dir}
  ^-aI^/SOURCE_SEARCH=^@var{dir}}.
  
  @item ^-I^/SEARCH=^@var{dir}
! @cindex @option{^-I^/SEARCH^} (@code{gnatmake})
  Equivalent to @option{^-aO^/OBJECT_SEARCH=^@var{dir}
  ^-aI^/SOURCE_SEARCH=^@var{dir}}.
  
  @item ^-I-^/NOCURRENT_DIRECTORY^
! @cindex @option{^-I-^/NOCURRENT_DIRECTORY^} (@code{gnatmake})
  @cindex Source files, suppressing search
  Do not look for source files in the directory containing the source
  file named in the command line.
  Do not look for ALI or object files in the directory
! where @code{gnatmake} was invoked.
  
  @item ^-L^/LIBRARY_SEARCH=^@var{dir}
! @cindex @option{^-L^/LIBRARY_SEARCH^} (@code{gnatmake})
  @cindex Linker libraries
  Add directory @var{dir} to the list of directories in which the linker
  will search for libraries. This is equivalent to
--- 8439,8475 ----
  @option{^-aI^/SOURCE_SEARCH=^@var{dir}}
  or @option{^-I^/SEARCH=^@var{dir}}.
  Note: this switch is provided for compatibility with previous versions
! of @command{gnatmake}. The easier method of causing standard libraries
  to be excluded from consideration is to write-protect the corresponding
  ALI files.
  
  @item ^-aO^/OBJECT_SEARCH=^@var{dir}
! @cindex @option{^-aO^/OBJECT_SEARCH^} (@command{gnatmake})
  When searching for library and object files, look in directory
  @var{dir}. The order in which library files are searched is described in
  @ref{Search Paths for gnatbind}.
  
  @item ^-A^/CONDITIONAL_SOURCE_SEARCH=^@var{dir}
! @cindex Search paths, for @command{gnatmake}
! @cindex @option{^-A^/CONDITIONAL_SOURCE_SEARCH^} (@command{gnatmake})
  Equivalent to @option{^-aL^/SKIP_MISSING=^@var{dir}
  ^-aI^/SOURCE_SEARCH=^@var{dir}}.
  
  @item ^-I^/SEARCH=^@var{dir}
! @cindex @option{^-I^/SEARCH^} (@command{gnatmake})
  Equivalent to @option{^-aO^/OBJECT_SEARCH=^@var{dir}
  ^-aI^/SOURCE_SEARCH=^@var{dir}}.
  
  @item ^-I-^/NOCURRENT_DIRECTORY^
! @cindex @option{^-I-^/NOCURRENT_DIRECTORY^} (@command{gnatmake})
  @cindex Source files, suppressing search
  Do not look for source files in the directory containing the source
  file named in the command line.
  Do not look for ALI or object files in the directory
! where @command{gnatmake} was invoked.
  
  @item ^-L^/LIBRARY_SEARCH=^@var{dir}
! @cindex @option{^-L^/LIBRARY_SEARCH^} (@command{gnatmake})
  @cindex Linker libraries
  Add directory @var{dir} to the list of directories in which the linker
  will search for libraries. This is equivalent to
*************** set in the registry are not searched for
*** 8377,8391 ****
  @end ifclear
  
  @item -nostdinc
! @cindex @option{-nostdinc} (@code{gnatmake})
  Do not look for source files in the system default directory.
  
  @item -nostdlib
! @cindex @option{-nostdlib} (@code{gnatmake})
  Do not look for library files in the system default directory.
  
  @item --RTS=@var{rts-path}
! @cindex @option{--RTS} (@code{gnatmake})
  Specifies the default location of the runtime library. GNAT looks for the
  runtime
  in the following directories, and stops as soon as a valid runtime is found
--- 8480,8494 ----
  @end ifclear
  
  @item -nostdinc
! @cindex @option{-nostdinc} (@command{gnatmake})
  Do not look for source files in the system default directory.
  
  @item -nostdlib
! @cindex @option{-nostdlib} (@command{gnatmake})
  Do not look for library files in the system default directory.
  
  @item --RTS=@var{rts-path}
! @cindex @option{--RTS} (@command{gnatmake})
  Specifies the default location of the runtime library. GNAT looks for the
  runtime
  in the following directories, and stops as soon as a valid runtime is found
*************** The selected path is handled like a norm
*** 8406,8412 ****
  @end table
  
  @node Mode Switches for gnatmake
! @section Mode Switches for @code{gnatmake}
  
  @noindent
  The mode switches (referred to as @code{mode_switches}) allow the
--- 8509,8515 ----
  @end table
  
  @node Mode Switches for gnatmake
! @section Mode Switches for @command{gnatmake}
  
  @noindent
  The mode switches (referred to as @code{mode_switches}) allow the
*************** designated component of GNAT.
*** 8419,8444 ****
  @table @option
  @c !sort!
  @item -cargs @var{switches}
! @cindex @option{-cargs} (@code{gnatmake})
  Compiler switches. Here @var{switches} is a list of switches
! that are valid switches for @code{gcc}. They will be passed on to
! all compile steps performed by @code{gnatmake}.
  
  @item -bargs @var{switches}
! @cindex @option{-bargs} (@code{gnatmake})
  Binder switches. Here @var{switches} is a list of switches
  that are valid switches for @code{gnatbind}. They will be passed on to
! all bind steps performed by @code{gnatmake}.
  
  @item -largs @var{switches}
! @cindex @option{-largs} (@code{gnatmake})
  Linker switches. Here @var{switches} is a list of switches
! that are valid switches for @code{gnatlink}. They will be passed on to
! all link steps performed by @code{gnatmake}.
  
  @item -margs @var{switches}
! @cindex @option{-margs} (@code{gnatmake})
! Make switches. The switches are directly interpreted by @code{gnatmake},
  regardless of any previous occurrence of @option{-cargs}, @option{-bargs}
  or @option{-largs}.
  @end table
--- 8522,8547 ----
  @table @option
  @c !sort!
  @item -cargs @var{switches}
! @cindex @option{-cargs} (@command{gnatmake})
  Compiler switches. Here @var{switches} is a list of switches
! that are valid switches for @command{gcc}. They will be passed on to
! all compile steps performed by @command{gnatmake}.
  
  @item -bargs @var{switches}
! @cindex @option{-bargs} (@command{gnatmake})
  Binder switches. Here @var{switches} is a list of switches
  that are valid switches for @code{gnatbind}. They will be passed on to
! all bind steps performed by @command{gnatmake}.
  
  @item -largs @var{switches}
! @cindex @option{-largs} (@command{gnatmake})
  Linker switches. Here @var{switches} is a list of switches
! that are valid switches for @command{gnatlink}. They will be passed on to
! all link steps performed by @command{gnatmake}.
  
  @item -margs @var{switches}
! @cindex @option{-margs} (@command{gnatmake})
! Make switches. The switches are directly interpreted by @command{gnatmake},
  regardless of any previous occurrence of @option{-cargs}, @option{-bargs}
  or @option{-largs}.
  @end table
*************** or @option{-largs}.
*** 8448,8472 ****
  
  @noindent
  This section contains some additional useful notes on the operation
! of the @code{gnatmake} command.
  
  @itemize @bullet
  @item
! @cindex Recompilation, by @code{gnatmake}
! If @code{gnatmake} finds no ALI files, it recompiles the main program
  and all other units required by the main program.
! This means that @code{gnatmake}
  can be used for the initial compile, as well as during subsequent steps of
  the development cycle.
  
  @item
  If you enter @code{gnatmake @var{file}.adb}, where @file{@var{file}.adb}
! is a subunit or body of a generic unit, @code{gnatmake} recompiles
  @file{@var{file}.adb} (because it finds no ALI) and stops, issuing a
  warning.
  
  @item
! In @code{gnatmake} the switch @option{^-I^/SEARCH^}
  is used to specify both source and
  library file paths. Use @option{^-aI^/SOURCE_SEARCH^}
  instead if you just want to specify
--- 8551,8575 ----
  
  @noindent
  This section contains some additional useful notes on the operation
! of the @command{gnatmake} command.
  
  @itemize @bullet
  @item
! @cindex Recompilation, by @command{gnatmake}
! If @command{gnatmake} finds no ALI files, it recompiles the main program
  and all other units required by the main program.
! This means that @command{gnatmake}
  can be used for the initial compile, as well as during subsequent steps of
  the development cycle.
  
  @item
  If you enter @code{gnatmake @var{file}.adb}, where @file{@var{file}.adb}
! is a subunit or body of a generic unit, @command{gnatmake} recompiles
  @file{@var{file}.adb} (because it finds no ALI) and stops, issuing a
  warning.
  
  @item
! In @command{gnatmake} the switch @option{^-I^/SEARCH^}
  is used to specify both source and
  library file paths. Use @option{^-aI^/SOURCE_SEARCH^}
  instead if you just want to specify
*************** if you want to specify library paths
*** 8475,8495 ****
  only.
  
  @item
! @code{gnatmake} examines both an ALI file and its corresponding object file
! for consistency. If an ALI is more recent than its corresponding object,
! or if the object file is missing, the corresponding source will be recompiled.
! Note that @code{gnatmake} expects an ALI and the corresponding object file
! to be in the same directory.
! 
! @item
! @code{gnatmake} will ignore any files whose ALI file is write-protected.
  This may conveniently be used to exclude standard libraries from
  consideration and in particular it means that the use of the
  @option{^-f^/FORCE_COMPILE^} switch will not recompile these files
  unless @option{^-a^/ALL_FILES^} is also specified.
  
  @item
! @code{gnatmake} has been designed to make the use of Ada libraries
  particularly convenient. Assume you have an Ada library organized
  as follows: @i{^obj-dir^[OBJ_DIR]^} contains the objects and ALI files for
  of your Ada compilation units,
--- 8578,8591 ----
  only.
  
  @item
! @command{gnatmake} will ignore any files whose ALI file is write-protected.
  This may conveniently be used to exclude standard libraries from
  consideration and in particular it means that the use of the
  @option{^-f^/FORCE_COMPILE^} switch will not recompile these files
  unless @option{^-a^/ALL_FILES^} is also specified.
  
  @item
! @command{gnatmake} has been designed to make the use of Ada libraries
  particularly convenient. Assume you have an Ada library organized
  as follows: @i{^obj-dir^[OBJ_DIR]^} contains the objects and ALI files for
  of your Ada compilation units,
*************** $ gnatmake /SOURCE_SEARCH=@i{[INCLUDE_DI
*** 8508,8514 ****
  @end smallexample
  
  @item
! Using @code{gnatmake} along with the
  @option{^-m (minimal recompilation)^/MINIMAL_RECOMPILATION^}
  switch provides a mechanism for avoiding unnecessary rcompilations. Using
  this switch,
--- 8604,8610 ----
  @end smallexample
  
  @item
! Using @command{gnatmake} along with the
  @option{^-m (minimal recompilation)^/MINIMAL_RECOMPILATION^}
  switch provides a mechanism for avoiding unnecessary rcompilations. Using
  this switch,
*************** that the debugging information may be ou
*** 8524,8554 ****
  @end itemize
  
  @node How gnatmake Works
! @section How @code{gnatmake} Works
  
  @noindent
! Generally @code{gnatmake} automatically performs all necessary
  recompilations and you don't need to worry about how it works. However,
! it may be useful to have some basic understanding of the @code{gnatmake}
  approach and in particular to understand how it uses the results of
  previous compilations without incorrectly depending on them.
  
  First a definition: an object file is considered @dfn{up to date} if the
! corresponding ALI file exists and its time stamp predates that of the
! object file and if all the source files listed in the
  dependency section of this ALI file have time stamps matching those in
  the ALI file. This means that neither the source file itself nor any
  files that it depends on have been modified, and hence there is no need
  to recompile this file.
  
! @code{gnatmake} works by first checking if the specified main unit is up
  to date. If so, no compilations are required for the main unit. If not,
! @code{gnatmake} compiles the main program to build a new ALI file that
  reflects the latest sources. Then the ALI file of the main unit is
  examined to find all the source files on which the main program depends,
! and @code{gnatmake} recursively applies the above procedure on all these files.
  
! This process ensures that @code{gnatmake} only trusts the dependencies
  in an existing ALI file if they are known to be correct. Otherwise it
  always recompiles to determine a new, guaranteed accurate set of
  dependencies. As a result the program is compiled ``upside down'' from what may
--- 8620,8650 ----
  @end itemize
  
  @node How gnatmake Works
! @section How @command{gnatmake} Works
  
  @noindent
! Generally @command{gnatmake} automatically performs all necessary
  recompilations and you don't need to worry about how it works. However,
! it may be useful to have some basic understanding of the @command{gnatmake}
  approach and in particular to understand how it uses the results of
  previous compilations without incorrectly depending on them.
  
  First a definition: an object file is considered @dfn{up to date} if the
! corresponding ALI file exists and if all the source files listed in the
  dependency section of this ALI file have time stamps matching those in
  the ALI file. This means that neither the source file itself nor any
  files that it depends on have been modified, and hence there is no need
  to recompile this file.
  
! @command{gnatmake} works by first checking if the specified main unit is up
  to date. If so, no compilations are required for the main unit. If not,
! @command{gnatmake} compiles the main program to build a new ALI file that
  reflects the latest sources. Then the ALI file of the main unit is
  examined to find all the source files on which the main program depends,
! and @command{gnatmake} recursively applies the above procedure on all these
! files.
  
! This process ensures that @command{gnatmake} only trusts the dependencies
  in an existing ALI file if they are known to be correct. Otherwise it
  always recompiles to determine a new, guaranteed accurate set of
  dependencies. As a result the program is compiled ``upside down'' from what may
*************** be more familiar as the required order o
*** 8556,8575 ****
  systems. In particular, clients are compiled before the units on which
  they depend. The ability of GNAT to compile in any order is critical in
  allowing an order of compilation to be chosen that guarantees that
! @code{gnatmake} will recompute a correct set of new dependencies if
  necessary.
  
! When invoking @code{gnatmake} with several @var{file_names}, if a unit is
  imported by several of the executables, it will be recompiled at most once.
  
  Note: when using non-standard naming conventions
! (See @ref{Using Other File Names}), changing through a configuration pragmas
! file the version of a source and invoking @code{gnatmake} to recompile may
  have no effect, if the previous version of the source is still accessible
! by @code{gnatmake}. It may be necessary to use the switch ^-f^/FORCE_COMPILE^.
  
  @node Examples of gnatmake Usage
! @section Examples of @code{gnatmake} Usage
  
  @table @code
  @item gnatmake hello.adb
--- 8652,8672 ----
  systems. In particular, clients are compiled before the units on which
  they depend. The ability of GNAT to compile in any order is critical in
  allowing an order of compilation to be chosen that guarantees that
! @command{gnatmake} will recompute a correct set of new dependencies if
  necessary.
  
! When invoking @command{gnatmake} with several @var{file_names}, if a unit is
  imported by several of the executables, it will be recompiled at most once.
  
  Note: when using non-standard naming conventions
! (@pxref{Using Other File Names}), changing through a configuration pragmas
! file the version of a source and invoking @command{gnatmake} to recompile may
  have no effect, if the previous version of the source is still accessible
! by @command{gnatmake}. It may be necessary to use the switch
! ^-f^/FORCE_COMPILE^.
  
  @node Examples of gnatmake Usage
! @section Examples of @command{gnatmake} Usage
  
  @table @code
  @item gnatmake hello.adb
*************** and @file{^main3^MAIN3.EXE^}.
*** 8598,8608 ****
  Compile all files necessary to bind and link the main program unit
  @code{Main_Unit} (from file @file{main_unit.adb}). All compilations will
  be done with optimization level 2 and the order of elaboration will be
! listed by the binder. @code{gnatmake} will operate in quiet mode, not
  displaying commands it is executing.
  @end table
  
- 
  @c *************************
  @node Improving Performance
  @chapter Improving Performance
--- 8695,8704 ----
  Compile all files necessary to bind and link the main program unit
  @code{Main_Unit} (from file @file{main_unit.adb}). All compilations will
  be done with optimization level 2 and the order of elaboration will be
! listed by the binder. @command{gnatmake} will operate in quiet mode, not
  displaying commands it is executing.
  @end table
  
  @c *************************
  @node Improving Performance
  @chapter Improving Performance
*************** the size of program executables.
*** 8622,8628 ****
  @end menu
  @end ifnottex
  
- 
  @c *****************************
  @node Performance Considerations
  @section Performance Considerations
--- 8718,8723 ----
*************** some guidelines on debugging optimized c
*** 8672,8677 ****
--- 8767,8773 ----
  * Optimization Levels::
  * Debugging Optimized Code::
  * Inlining of Subprograms::
+ * Optimization and Strict Aliasing::
  @ifset vms
  * Coverage Analysis::
  @end ifset
*************** By default, GNAT generates all run-time 
*** 8685,8692 ****
  checking for integer operations and checks for access before elaboration on
  subprogram calls. The latter are not required in default mode, because all
  necessary checking is done at compile time.
! @cindex @option{-gnatp} (@code{gcc})
! @cindex @option{-gnato} (@code{gcc})
  Two gnat switches, @option{-gnatp} and @option{-gnato} allow this default to
  be modified. @xref{Run-Time Checks}.
  
--- 8781,8788 ----
  checking for integer operations and checks for access before elaboration on
  subprogram calls. The latter are not required in default mode, because all
  necessary checking is done at compile time.
! @cindex @option{-gnatp} (@command{gcc})
! @cindex @option{-gnato} (@command{gcc})
  Two gnat switches, @option{-gnatp} and @option{-gnato} allow this default to
  be modified. @xref{Run-Time Checks}.
  
*************** possibility of an immediate abort at any
*** 8758,8764 ****
  
  @node Optimization Levels
  @subsection Optimization Levels
! @cindex @option{^-O^/OPTIMIZE^} (@code{gcc})
  
  @noindent
  The default is optimization off. This results in the fastest compile
--- 8854,8860 ----
  
  @node Optimization Levels
  @subsection Optimization Levels
! @cindex @option{^-O^/OPTIMIZE^} (@command{gcc})
  
  @noindent
  The default is optimization off. This results in the fastest compile
*************** optimization is enabled. You can use the
*** 8771,8777 ****
  @ifset vms
  @code{OPTIMIZE} qualifier
  @end ifset
! to @code{gcc} to control the optimization level:
  
  @table @option
  @item ^-O0^/OPTIMIZE=NONE^
--- 8867,8873 ----
  @ifset vms
  @code{OPTIMIZE} qualifier
  @end ifset
! to @command{gcc} to control the optimization level:
  
  @table @option
  @item ^-O0^/OPTIMIZE=NONE^
*************** levels.
*** 8824,8831 ****
  Note regarding the use of @option{-O3}: The use of this optimization level
  is generally discouraged with GNAT, since it often results in larger
  executables which run more slowly. See further discussion of this point
! in @pxref{Inlining of Subprograms}.
! 
  
  @node Debugging Optimized Code
  @subsection Debugging Optimized Code
--- 8920,8926 ----
  Note regarding the use of @option{-O3}: The use of this optimization level
  is generally discouraged with GNAT, since it often results in larger
  executables which run more slowly. See further discussion of this point
! in @ref{Inlining of Subprograms}.
  
  @node Debugging Optimized Code
  @subsection Debugging Optimized Code
*************** Explicit temporary variables that you co
*** 8851,8857 ****
  ^level^setting^ @option{-O1} or higher.
  
  The use of the @option{^-g^/DEBUG^} switch,
! @cindex @option{^-g^/DEBUG^} (@code{gcc})
  which is needed for source-level debugging,
  affects the size of the program executable on disk,
  and indeed the debugging information can be quite large.
--- 8946,8952 ----
  ^level^setting^ @option{-O1} or higher.
  
  The use of the @option{^-g^/DEBUG^} switch,
! @cindex @option{^-g^/DEBUG^} (@command{gcc})
  which is needed for source-level debugging,
  affects the size of the program executable on disk,
  and indeed the debugging information can be quite large.
*************** on the resulting executable,
*** 8955,8961 ****
  which removes both debugging information and global symbols.
  @end ifclear
  
- 
  @node Inlining of Subprograms
  @subsection Inlining of Subprograms
  
--- 9050,9055 ----
*************** The optimization level is at least @opti
*** 8969,8975 ****
  
  @item
  The called subprogram is suitable for inlining: It must be small enough
! and not contain nested subprograms or anything else that @code{gcc}
  cannot support in inlined subprograms.
  
  @item
--- 9063,9069 ----
  
  @item
  The called subprogram is suitable for inlining: It must be small enough
! and not contain nested subprograms or anything else that @command{gcc}
  cannot support in inlined subprograms.
  
  @item
*************** The optimization level is at least @opti
*** 8994,9000 ****
  
  @item
  The called subprogram is suitable for inlining: It must be small enough
! and not contain nested subprograms or anything else @code{gcc} cannot
  support in inlined subprograms.
  
  @item
--- 9088,9094 ----
  
  @item
  The called subprogram is suitable for inlining: It must be small enough
! and not contain nested subprograms or anything else @command{gcc} cannot
  support in inlined subprograms.
  
  @item
*************** The call appears in a body (not in a pac
*** 9004,9012 ****
  There is a @code{pragma Inline} for the subprogram.
  
  @item
! @cindex @option{-gnatn} (@code{gcc})
  The @option{^-gnatn^/INLINE^} switch
! is used in the @code{gcc} command line
  @end itemize
  
  Note that specifying the @option{-gnatn} switch causes additional
--- 9098,9106 ----
  There is a @code{pragma Inline} for the subprogram.
  
  @item
! @cindex @option{-gnatn} (@command{gcc})
  The @option{^-gnatn^/INLINE^} switch
! is used in the @command{gcc} command line
  @end itemize
  
  Note that specifying the @option{-gnatn} switch causes additional
*************** is compiled, the call will be inlined if
*** 9044,9055 ****
  enough, but now @code{Main} depends on the body of @code{R} in
  @file{r.adb} as well as on the spec. This means that if this body is edited,
  the main program must be recompiled. Note that this extra dependency
! occurs whether or not the call is in fact inlined by @code{gcc}.
  
  The use of front end inlining with @option{-gnatN} generates similar
  additional dependencies.
  
! @cindex @option{^-fno-inline^/INLINE=SUPPRESS^} (@code{gcc})
  Note: The @option{^-fno-inline^/INLINE=SUPPRESS^} switch
  can be used to prevent
  all inlining. This switch overrides all other conditions and ensures
--- 9138,9149 ----
  enough, but now @code{Main} depends on the body of @code{R} in
  @file{r.adb} as well as on the spec. This means that if this body is edited,
  the main program must be recompiled. Note that this extra dependency
! occurs whether or not the call is in fact inlined by @command{gcc}.
  
  The use of front end inlining with @option{-gnatN} generates similar
  additional dependencies.
  
! @cindex @option{^-fno-inline^/INLINE=SUPPRESS^} (@command{gcc})
  Note: The @option{^-fno-inline^/INLINE=SUPPRESS^} switch
  can be used to prevent
  all inlining. This switch overrides all other conditions and ensures
*************** that you should not automatically assume
*** 9071,9076 ****
--- 9165,9385 ----
  @option{-O2}, and indeed you should use @option{-O3} only if tests show that
  it actually improves performance.
  
+ @node Optimization and Strict Aliasing
+ @subsection Optimization and Strict Aliasing
+ @cindex Aliasing
+ @cindex Strict Aliasing
+ @cindex No_Strict_Aliasing
+ 
+ @noindent
+ The strong typing capabilities of Ada allow an optimizer to generate
+ efficient code in situations where other languages would be forced to
+ make worst case assumptions preventing such optimizations. Consider
+ the following example:
+ 
+ @smallexample @c ada
+ @cartouche
+ procedure R is
+    type Int1 is new Integer;
+    type Int2 is new Integer;
+    type Int1A is access Int1;
+    type Int2A is access Int2;
+    Int1V : Int1A;
+    Int2V : Int2A;
+    ...
+ 
+ begin
+    ...
+    for J in Data'Range loop
+       if Data (J) = Int1V.all then
+          Int2V.all := Int2V.all + 1;
+       end if;
+    end loop;
+    ...
+ end R;
+ @end cartouche
+ @end smallexample
+ 
+ @noindent
+ In this example, since the variable @code{Int1V} can only access objects
+ of type @code{Int1}, and @code{Int2V} can only access objects of type
+ @code{Int2}, there is no possibility that the assignment to
+ @code{Int2V.all} affects the value of @code{Int1V.all}. This means that
+ the compiler optimizer can "know" that the value @code{Int1V.all} is constant
+ for all iterations of the loop and avoid the extra memory reference
+ required to dereference it each time through the loop.
+ 
+ This kind of optimziation, called strict aliasing analysis, is
+ triggered by specifying an optimization level of @option{-O2} or
+ higher and allows @code{GNAT} to generate more efficient code
+ when access values are involved.
+ 
+ However, although this optimization is always correct in terms of
+ the formal semantics of the Ada Reference Manual, difficulties can
+ arise if features like @code{Unchecked_Conversion} are used to break
+ the typing system. Consider the following complete program example:
+ 
+ @smallexample @c ada
+ @cartouche
+ package p1 is
+    type int1 is new integer;
+    type int2 is new integer;
+    type a1 is access int1;
+    type a2 is access int2;
+ end p1;
+ 
+ with p1; use p1;
+ package p2 is
+    function to_a2 (Input : a1) return a2;
+ end p2;
+ 
+ with Unchecked_Conversion;
+ package body p2 is
+    function to_a2 (Input : a1) return a2 is
+       function to_a2u is
+         new Unchecked_Conversion (a1, a2);
+    begin
+       return to_a2u (Input);
+    end to_a2;
+ end p2;
+ 
+ with p2; use p2;
+ with p1; use p1;
+ with Text_IO; use Text_IO;
+ procedure m is
+    v1 : a1 := new int1;
+    v2 : a2 := to_a2 (v1);
+ begin
+    v1.all := 1;
+    v2.all := 0;
+    put_line (int1'image (v1.all));
+ end;
+ @end cartouche
+ @end smallexample
+ 
+ @noindent
+ This program prints out 0 in @code{-O0} or @code{-O1}
+ mode, but it prints out 1 in @code{-O2} mode. That's
+ because in strict aliasing mode, the compiler can and
+ does assume that the assignment to @code{v2.all} could not
+ affect the value of @code{v1.all}, since different types
+ are involved.
+ 
+ This behavior is not a case of non-conformance with the standard, since
+ the Ada RM specifies that an unchecked conversion where the resulting
+ bit pattern is not a correct value of the target type can result in an
+ abnormal value and attempting to reference an abnormal value makes the
+ execution of a program erroneous.  That's the case here since the result
+ does not point to an object of type @code{int2}.  This means that the
+ effect is entirely unpredictable.
+ 
+ However, although that explanation may satisfy a language
+ lawyer, in practice an applications programmer expects an
+ unchecked conversion involving pointers to create true
+ aliases and the behavior of printing 1 seems plain wrong.
+ In this case, the strict aliasing optimization is unwelcome.
+ 
+ Indeed the compiler recognizes this possibility, and the
+ unchecked conversion generates a warning:
+ 
+ @smallexample
+ p2.adb:5:07: warning: possible aliasing problem with type "a2"
+ p2.adb:5:07: warning: use -fno-strict-aliasing switch for references
+ p2.adb:5:07: warning:  or use "pragma No_Strict_Aliasing (a2);"
+ @end smallexample
+ 
+ @noindent
+ Unfortunately the problem is recognized when compiling the body of
+ package @code{p2}, but the actual "bad" code is generated while
+ compiling the body of @code{m} and this latter compilation does not see
+ the suspicious @code{Unchecked_Conversion}.
+ 
+ As implied by the warning message, there are approaches you can use to
+ avoid the unwanted strict aliasing optimization in a case like this.
+ 
+ One possibility is to simply avoid the use of @code{-O2}, but
+ that is a bit drastic, since it throws away a number of useful
+ optimizations that do not involve strict aliasing assumptions.
+ 
+ A less drastic approach is to compile the program using the
+ option @code{-fno-strict-aliasing}. Actually it is only the
+ unit containing the dereferencing of the suspicious pointer
+ that needs to be compiled. So in this case, if we compile
+ unit @code{m} with this switch, then we get the expected
+ value of zero printed. Analyzing which units might need
+ the switch can be painful, so a more reasonable approach
+ is to compile the entire program with options @code{-O2}
+ and @code{-fno-strict-aliasing}. If the performance is
+ satisfactory with this combination of options, then the
+ advantage is that the entire issue of possible "wrong"
+ optimization due to strict aliasing is avoided.
+ 
+ To avoid the use of compiler switches, the configuration
+ pragma @code{No_Strict_Aliasing} with no parameters may be
+ used to specify that for all access types, the strict
+ aliasing optimization should be suppressed.
+ 
+ However, these approaches are still overkill, in that they causes
+ all manipulations of all access values to be deoptimized. A more
+ refined approach is to concentrate attention on the specific
+ access type identified as problematic.
+ 
+ First, if a careful analysis of uses of the pointer shows
+ that there are no possible problematic references, then
+ the warning can be suppressed by bracketing the
+ instantiation of @code{Unchecked_Conversion} to turn
+ the warning off:
+ 
+ @smallexample @c ada
+    pragma Warnings (Off);
+    function to_a2u is
+      new Unchecked_Conversion (a1, a2);
+    pragma Warnings (On);
+ @end smallexample
+ 
+ @noindent
+ Of course that approach is not appropriate for this particular
+ example, since indeed there is a problematic reference. In this
+ case we can take one of two other approaches.
+ 
+ The first possibility is to move the instantiation of unchecked
+ conversion to the unit in which the type is declared. In
+ this example, we would move the instantiation of
+ @code{Unchecked_Conversion} from the body of package
+ @code{p2} to the spec of package @code{p1}. Now the
+ warning disappears. That's because any use of the
+ access type knows there is a suspicious unchecked
+ conversion, and the strict aliasing optimization
+ is automatically suppressed for the type.
+ 
+ If it is not practical to move the unchecked conversion to the same unit
+ in which the destination access type is declared (perhaps because the
+ source type is not visible in that unit), you may use pragma
+ @code{No_Strict_Aliasing} for the type. This pragma must occur in the
+ same declarative sequence as the declaration of the access type:
+ 
+ @smallexample @c ada
+    type a2 is access int2;
+    pragma No_Strict_Aliasing (a2);
+ @end smallexample
+ 
+ @noindent
+ Here again, the compiler now knows that the strict aliasing optimization
+ should be suppressed for any reference to type @code{a2} and the
+ expected behavior is obtained.
+ 
+ Finally, note that although the compiler can generate warnings for
+ simple cases of unchecked conversions, there are tricker and more
+ indirect ways of creating type incorrect aliases which the compiler
+ cannot detect. Examples are the use of address overlays and unchecked
+ conversions involving composite types containing access types as
+ components. In such cases, no warnings are generated, but there can
+ still be aliasing problems. One safe coding practice is to forbid the
+ use of address clauses for type overlaying, and to allow unchecked
+ conversion only for primitive types. This is not really a significant
+ restriction since any possible desired effect can be achieved by
+ unchecked conversion of access values.
+ 
  @ifset vms
  @node Coverage Analysis
  @subsection Coverage Analysis
*************** being processed.
*** 9165,9171 ****
  @cindex @option{^-a^/ALL^} (@command{gnatelim})
  Also look for subprograms from the GNAT run time that can be eliminated. Note
  that when @file{gnat.adc} is produced using this switch, the entire program
! must be recompiled with switch @option{^-a^/ALL_FILES^} to @code{gnatmake}.
  
  @item ^-I^/INCLUDE_DIRS=^@var{dir}
  @cindex @option{^-I^/INCLUDE_DIRS^} (@command{gnatelim})
--- 9474,9480 ----
  @cindex @option{^-a^/ALL^} (@command{gnatelim})
  Also look for subprograms from the GNAT run time that can be eliminated. Note
  that when @file{gnat.adc} is produced using this switch, the entire program
! must be recompiled with switch @option{^-a^/ALL_FILES^} to @command{gnatmake}.
  
  @item ^-I^/INCLUDE_DIRS=^@var{dir}
  @cindex @option{^-I^/INCLUDE_DIRS^} (@command{gnatelim})
*************** file must be specified with full path.
*** 9186,9207 ****
  
  @item ^--GCC^/COMPILER^=@var{compiler_name}
  @cindex @option{^-GCC^/COMPILER^} (@command{gnatelim})
! Instructs @code{gnatelim} to use specific @code{gcc} compiler instead of one
  available on the path.
  
  @item ^--GNATMAKE^/GNATMAKE^=@var{gnatmake_name}
  @cindex @option{^--GNATMAKE^/GNATMAKE^} (@command{gnatelim})
! Instructs @code{gnatelim} to use specific @code{gnatmake} instead of one
  available on the path.
- 
- @item -d@var{x}
- @cindex @option{-d@var{x}} (@command{gnatelim})
- Activate internal debugging switches. @var{x} is a letter or digit, or
- string of letters or digits, which specifies the type of debugging
- mode desired.  Normally these are used only for internal development
- or system debugging purposes. You can find full documentation for these
- switches in the spec of the @code{Gnatelim} unit in the compiler
- source file @file{gnatelim.ads}.
  @end table
  
  @noindent
--- 9495,9507 ----
  
  @item ^--GCC^/COMPILER^=@var{compiler_name}
  @cindex @option{^-GCC^/COMPILER^} (@command{gnatelim})
! Instructs @code{gnatelim} to use specific @command{gcc} compiler instead of one
  available on the path.
  
  @item ^--GNATMAKE^/GNATMAKE^=@var{gnatmake_name}
  @cindex @option{^--GNATMAKE^/GNATMAKE^} (@command{gnatelim})
! Instructs @code{gnatelim} to use specific @command{gnatmake} instead of one
  available on the path.
  @end table
  
  @noindent
*************** the @file{gnat.adc} file. You should rec
*** 9250,9256 ****
  from scratch after that, because you need a consistent @file{gnat.adc} file
  during the entire compilation.
  
- 
  @node Making Your Executables Smaller
  @subsection Making Your Executables Smaller
  
--- 9550,9555 ----
*************** $ gnatmake ^-f main_prog^/FORCE_COMPILE 
*** 9311,9319 ****
  
  @end enumerate
  
- 
- 
- 
  @c ********************************
  @node Renaming Files Using gnatchop
  @chapter Renaming Files Using @code{gnatchop}
--- 9610,9615 ----
*************** system, you can set up a procedure where
*** 9358,9364 ****
  time you compile, regarding the source files that it writes as temporary
  files that you throw away.
  
- 
  @node Operating gnatchop in Compilation Mode
  @section Operating gnatchop in Compilation Mode
  
--- 9654,9659 ----
*************** should apply to all subsequent compilati
*** 9392,9399 ****
  environment. Using GNAT, the current directory, possibly containing a
  @file{gnat.adc} file is the representation
  of a compilation environment. For more information on the
! @file{gnat.adc} file, see the section on handling of configuration
! pragmas @pxref{Handling of Configuration Pragmas}.
  
  Second, in compilation mode, if @code{gnatchop}
  is given a file that starts with
--- 9687,9693 ----
  environment. Using GNAT, the current directory, possibly containing a
  @file{gnat.adc} file is the representation
  of a compilation environment. For more information on the
! @file{gnat.adc} file, see @ref{Handling of Configuration Pragmas}.
  
  Second, in compilation mode, if @code{gnatchop}
  is given a file that starts with
*************** generated files to refers back to the or
*** 9578,9584 ****
  The result is that all error messages refer back to the original
  unchopped file.
  In addition, the debugging information placed into the object file (when
! the @option{^-g^/DEBUG^} switch of @code{gcc} or @code{gnatmake} is specified)
  also refers back to this original file so that tools like profilers and
  debuggers will give information in terms of the original unchopped file.
  
--- 9872,9879 ----
  The result is that all error messages refer back to the original
  unchopped file.
  In addition, the debugging information placed into the object file (when
! the @option{^-g^/DEBUG^} switch of @command{gcc} or @command{gnatmake} is
! specified)
  also refers back to this original file so that tools like profilers and
  debuggers will give information in terms of the original unchopped file.
  
*************** recognized by @code{GNAT}:
*** 9673,9678 ****
--- 9968,9974 ----
     Ada_95
     C_Pass_By_Copy
     Component_Alignment
+    Detect_Blocking
     Discard_Names
     Elaboration_Checks
     Eliminate
*************** recognized by @code{GNAT}:
*** 9686,9696 ****
--- 9982,9995 ----
     Long_Float
     Normalize_Scalars
     Polling
+    Profile
+    Profile_Warnings
     Propagate_Exceptions
     Queuing_Policy
     Ravenscar
     Restricted_Run_Time
     Restrictions
+    Restrictions_Warnings
     Reviewable
     Source_File_Name
     Style_Checks
*************** all compilations performed in a given co
*** 9718,9724 ****
  GNAT also provides the @code{gnatchop} utility to provide an automatic
  way to handle configuration pragmas following the semantics for
  compilations (that is, files with multiple units), described in the RM.
! See section @pxref{Operating gnatchop in Compilation Mode} for details.
  However, for most purposes, it will be more convenient to edit the
  @file{gnat.adc} file that contains configuration pragmas directly,
  as described in the following section.
--- 10017,10023 ----
  GNAT also provides the @code{gnatchop} utility to provide an automatic
  way to handle configuration pragmas following the semantics for
  compilations (that is, files with multiple units), described in the RM.
! See @ref{Operating gnatchop in Compilation Mode} for details.
  However, for most purposes, it will be more convenient to edit the
  @file{gnat.adc} file that contains configuration pragmas directly,
  as described in the following section.
*************** pragma Extend_System (Aux_DEC);
*** 9769,9775 ****
  @noindent
  In the presence of this pragma, GNAT adds to the definition of the
  predefined package SYSTEM all the additional types and subprograms that are
! defined in DEC Ada. See @pxref{Compatibility with DEC Ada} for details.
  @end ifset
  
  @node Handling Arbitrary File Naming Conventions Using gnatname
--- 10068,10074 ----
  @noindent
  In the presence of this pragma, GNAT adds to the definition of the
  predefined package SYSTEM all the additional types and subprograms that are
! defined in DEC Ada. See @ref{Compatibility with DEC Ada} for details.
  @end ifset
  
  @node Handling Arbitrary File Naming Conventions Using gnatname
*************** does not need additional information.
*** 9795,9805 ****
  @noindent
  When the source file names do not follow the standard GNAT default file naming
  conventions, the GNAT compiler must be given additional information through
! a configuration pragmas file (see @ref{Configuration Pragmas})
  or a project file.
  When the non standard file naming conventions are well-defined,
  a small number of pragmas @code{Source_File_Name} specifying a naming pattern
! (see @ref{Alternative File Naming Schemes}) may be sufficient. However,
  if the file naming conventions are irregular or arbitrary, a number
  of pragma @code{Source_File_Name} for individual compilation units
  must be defined.
--- 10094,10104 ----
  @noindent
  When the source file names do not follow the standard GNAT default file naming
  conventions, the GNAT compiler must be given additional information through
! a configuration pragmas file (@pxref{Configuration Pragmas})
  or a project file.
  When the non standard file naming conventions are well-defined,
  a small number of pragmas @code{Source_File_Name} specifying a naming pattern
! (@pxref{Alternative File Naming Schemes}) may be sufficient. However,
  if the file naming conventions are irregular or arbitrary, a number
  of pragma @code{Source_File_Name} for individual compilation units
  must be defined.
*************** even in conjunction with one or several 
*** 10006,10012 ****
  @option{^-D^/DIRS_FILE^}. Several Naming Patterns and one excluded pattern
  are used in this example.
  
- 
  @c *****************************************
  @c * G N A T  P r o j e c t  M a n a g e r *
  @c *****************************************
--- 10305,10310 ----
*************** are used in this example.
*** 10020,10025 ****
--- 10318,10324 ----
  * Objects and Sources in Project Files::
  * Importing Projects::
  * Project Extension::
+ * Project Hierarchy Extension::
  * External References in Project Files::
  * Packages in Project Files::
  * Variables from Imported Projects::
*************** One of the specifiable properties of a p
*** 10410,10423 ****
  main subprograms.  This property is captured in the @code{Main} attribute,
  whose value is a list of strings.  If a project defines the @code{Main}
  attribute, it is not necessary to identify the main subprogram(s) when
! invoking @command{gnatmake} (see @ref{gnatmake and Project Files}).
  
  @node Executable File Names
  @unnumberedsubsubsec Executable File Names
  
  @noindent
  By default, the executable file name corresponding to a main source is
! deducted from the main source file name. Through the attributes
  @code{Executable} and @code{Executable_Suffix} of package @code{Builder},
  it is possible to change this default.
  In project @code{Debug} above, the executable file name
--- 10709,10722 ----
  main subprograms.  This property is captured in the @code{Main} attribute,
  whose value is a list of strings.  If a project defines the @code{Main}
  attribute, it is not necessary to identify the main subprogram(s) when
! invoking @command{gnatmake} (@pxref{gnatmake and Project Files}).
  
  @node Executable File Names
  @unnumberedsubsubsec Executable File Names
  
  @noindent
  By default, the executable file name corresponding to a main source is
! deduced from the main source file name. Through the attributes
  @code{Executable} and @code{Executable_Suffix} of package @code{Builder},
  it is possible to change this default.
  In project @code{Debug} above, the executable file name
*************** project Build is
*** 10489,10494 ****
--- 10788,10795 ----
          for ^Default_Switches^Default_Switches^ ("Ada")
              use ("^-g^-g^");
          for Executable ("proc") use "proc1";
+       when others =>
+         null;
      end case;
  
    end Builder;
*************** end B;
*** 10786,10792 ****
  @end smallexample
  
  Attribute @code{Locally_Removed_Files} may also be used to check if a source
! is still needed: if it is possible to build using @code{gnatmake} when such
  a source is put in attribute @code{Locally_Removed_Files} of a project P, then
  it is possible to remove the source completely from a system that includes
  project P.
--- 11087,11093 ----
  @end smallexample
  
  Attribute @code{Locally_Removed_Files} may also be used to check if a source
! is still needed: if it is possible to build using @command{gnatmake} when such
  a source is put in attribute @code{Locally_Removed_Files} of a project P, then
  it is possible to remove the source completely from a system that includes
  project P.
*************** case insensitive. The following package 
*** 10917,10927 ****
--- 11218,11234 ----
  @item
  @code{Eliminate}
  @item
+ @code{Pretty_Printer}
+ @item
+ @code{Metrics}
+ @item
  @code{gnatls}
  @item
  @code{gnatstub}
  @item
  @code{IDE}
+ @item
+ @code{Language_Processing}
  @end itemize
  
  @noindent
*************** A @emph{string expression} is either a @
*** 10959,10967 ****
  A @emph{simple string expression} is one of the following:
  @itemize @bullet
  @item A literal string; e.g.@code{"comm/my_proj.gpr"}
! @item A string-valued variable reference (see @ref{Variables})
! @item A string-valued attribute reference (see @ref{Attributes})
! @item An external reference (see @ref{External References in Project Files})
  @end itemize
  
  @noindent
--- 11266,11274 ----
  A @emph{simple string expression} is one of the following:
  @itemize @bullet
  @item A literal string; e.g.@code{"comm/my_proj.gpr"}
! @item A string-valued variable reference (@pxref{Variables})
! @item A string-valued attribute reference (@pxref{Attributes})
! @item An external reference (@pxref{External References in Project Files})
  @end itemize
  
  @noindent
*************** Variables of a string type are called @e
*** 11025,11031 ****
  variables are called @emph{untyped variables}. Typed variables are
  particularly useful in @code{case} constructions, to support conditional
  attribute declarations.
! (see @ref{case Constructions}).
  
  The string literals in the list are case sensitive and must all be different.
  They may include any graphic characters allowed in Ada, including spaces.
--- 11332,11338 ----
  variables are called @emph{untyped variables}. Typed variables are
  particularly useful in @code{case} constructions, to support conditional
  attribute declarations.
! (@pxref{case Constructions}).
  
  The string literals in the list are case sensitive and must all be different.
  They may include any graphic characters allowed in Ada, including spaces.
*************** the project's properties.  Some attribut
*** 11126,11132 ****
  others have values that are string lists.
  
  There are two categories of attributes: @emph{simple attributes}
! and @emph{associative arrays} (see @ref{Associative Array Attributes}).
  
  Legal project attribute names, and attribute names for each legal package are
  listed below. Attributes names are case-insensitive.
--- 11433,11439 ----
  others have values that are string lists.
  
  There are two categories of attributes: @emph{simple attributes}
! and @emph{associative arrays} (@pxref{Associative Array Attributes}).
  
  Legal project attribute names, and attribute names for each legal package are
  listed below. Attributes names are case-insensitive.
*************** The following attributes are defined on 
*** 11174,11180 ****
  
  @noindent
  The following attributes are defined for package  @code{Naming}
! (see @ref{Naming Schemes}):
  
  @multitable @columnfractions .4 .2 .2 .2
  @item Attribute Name @tab Category @tab Index @tab Value
--- 11481,11487 ----
  
  @noindent
  The following attributes are defined for package  @code{Naming}
! (@pxref{Naming Schemes}):
  
  @multitable @columnfractions .4 .2 .2 .2
  @item Attribute Name @tab Category @tab Index @tab Value
*************** The following attributes are defined for
*** 11220,11226 ****
  The following attributes are defined for packages @code{Builder},
  @code{Compiler}, @code{Binder},
  @code{Linker}, @code{Cross_Reference}, and @code{Finder}
! (see @ref{^Switches^Switches^ and Project Files}).
  
  @multitable @columnfractions .4 .2 .2 .2
  @item Attribute Name @tab Category @tab Index @tab Value
--- 11527,11533 ----
  The following attributes are defined for packages @code{Builder},
  @code{Compiler}, @code{Binder},
  @code{Linker}, @code{Cross_Reference}, and @code{Finder}
! (@pxref{^Switches^Switches^ and Project Files}).
  
  @multitable @columnfractions .4 .2 .2 .2
  @item Attribute Name @tab Category @tab Index @tab Value
*************** attribute declarations. String type decl
*** 11405,11411 ****
  package declarations are not allowed.
  
  The value of the case variable is often given by an external reference
! (see @ref{External References in Project Files}).
  
  @c ****************************************
  @c * Objects and Sources in Project Files *
--- 11712,11718 ----
  package declarations are not allowed.
  
  The value of the case variable is often given by an external reference
! (@pxref{External References in Project Files}).
  
  @c ****************************************
  @c * Objects and Sources in Project Files *
*************** The value of the case variable is often 
*** 11425,11431 ****
  Each project has exactly one object directory and one or more source
  directories. The source directories must contain at least one source file,
  unless  the project file explicitly specifies that no source files are present
! (see @ref{Source File Names}).
  
  @node Object Directory
  @subsection Object Directory
--- 11732,11738 ----
  Each project has exactly one object directory and one or more source
  directories. The source directories must contain at least one source file,
  unless  the project file explicitly specifies that no source files are present
! (@pxref{Source File Names}).
  
  @node Object Directory
  @subsection Object Directory
*************** contains a source file name.
*** 11558,11564 ****
  By default, if neither the attribute @code{Source_Files} nor the attribute
  @code{Source_List_File} is given an explicit value, then each file in the
  source directories that conforms to the project's naming scheme
! (see @ref{Naming Schemes}) is an immediate source of the project.
  
  A warning is issued if both attributes @code{Source_Files} and
  @code{Source_List_File} are given explicit values. In this case, the attribute
--- 11865,11871 ----
  By default, if neither the attribute @code{Source_Files} nor the attribute
  @code{Source_List_File} is given an explicit value, then each file in the
  source directories that conforms to the project's naming scheme
! (@pxref{Naming Schemes}) is an immediate source of the project.
  
  A warning is issued if both attributes @code{Source_Files} and
  @code{Source_List_File} are given explicit values. In this case, the attribute
*************** list, or the @code{"Ada"} may be absent 
*** 11591,11598 ****
  Otherwise, a project must contain at least one immediate source.
  
  Projects with no source files are useful as template packages
! (see @ref{Packages in Project Files}) for other projects; in particular to
! define a package @code{Naming} (see @ref{Naming Schemes}).
  
  @c ****************************
  @c * Importing Projects *
--- 11898,11905 ----
  Otherwise, a project must contain at least one immediate source.
  
  Projects with no source files are useful as template packages
! (@pxref{Packages in Project Files}) for other projects; in particular to
! define a package @code{Naming} (@pxref{Naming Schemes}).
  
  @c ****************************
  @c * Importing Projects *
*************** projects.
*** 11762,11767 ****
--- 12069,12146 ----
  A project is not allowed to import directly or indirectly at the same time a
  child project and any of its ancestors.
  
+ @c *******************************
+ @c * Project Hierarchy Extension *
+ @c *******************************
+ 
+ @node Project Hierarchy Extension
+ @section Project Hierarchy Extension
+ 
+ @noindent
+ When extending a large system spanning multiple projects, it is often
+ inconvenient to extend every project in the hierarchy that is impacted by a
+ small change introduced. In such cases, it is possible to create a virtual
+ extension of entire hierarchy using @code{extends all} relationship.
+ 
+ When the project is extended using @code{extends all} inheritance, all projects
+ that are imported by it, both directly and indirectly, are considered virtually
+ extended. That is, the Project Manager creates "virtual projects"
+ that extend every project in the hierarchy; all these virtual projects have
+ no sources of their own and have as object directory the object directory of
+ the root of "extending all" project.
+ 
+ It is possible to explicitly extend one or more projects in the hierarchy
+ in order to modify the sources. These extending projects must be imported by
+ the "extending all" project, which will replace the corresponding virtual
+ projects with the explicit ones.
+ 
+ When building such a project hierarchy extension, the Project Manager will
+ ensure that both modified sources and sources in virtual extending projects
+ that depend on them, are recompiled.
+ 
+ By means of example, consider the following hierarchy of projects.
+ 
+ @enumerate
+ @item
+ project A, containing package P1
+ @item
+ project B importing A and containing package P2 which depends on P1
+ @item
+ project C importing B and containing package P3 which depends on P2
+ @end enumerate
+ 
+ @noindent
+ We want to modify packages P1 and P3.
+ 
+ This project hierarchy will need to be extended as follows:
+ 
+ @enumerate
+ @item
+ Create project A1 that extends A, placing modified P1 there:
+ 
+ @smallexample @c 0projectfile
+ project A1 extends "(...)/A" is
+ end A1;
+ @end smallexample
+ 
+ @item
+ Create project C1 that "extends all" C and imports A1, placing modified
+ P3 there:
+ 
+ @smallexample @c 0projectfile
+ with "(...)/A1";
+ project C1 extends all "(...)/C" is
+ end C1;
+ @end smallexample
+ @end enumerate
+ 
+ When you build project C1, your entire modified project space will be
+ recompiled, including the virtual project B1 that has been impacted by the
+ "extending all" inheritance of project C.
+ 
+ Note that if a Library Project in the hierarchy is virtually extended,
+ the virtual project that extends the Library Project is not a Library Project.
+ 
  @c ****************************************
  @c * External References in Project Files *
  @c ****************************************
*************** an attribute declaration.
*** 11830,11836 ****
  A @emph{package} defines the settings for project-aware tools within a
  project.
  For each such tool one can declare a package; the names for these
! packages are preset (see @ref{Packages}).
  A package may contain variable declarations, attribute declarations, and case
  constructions.
  
--- 12209,12215 ----
  A @emph{package} defines the settings for project-aware tools within a
  project.
  For each such tool one can declare a package; the names for these
! packages are preset (@pxref{Packages}).
  A package may contain variable declarations, attribute declarations, and case
  constructions.
  
*************** a package from the template.
*** 11888,11894 ****
  
  In addition to the tool-oriented packages, you can also declare a package
  named @code{Naming} to establish specialized source file naming conventions
! (see @ref{Naming Schemes}).
  
  @c ************************************
  @c * Variables from Imported Projects *
--- 12267,12273 ----
  
  In addition to the tool-oriented packages, you can also declare a package
  named @code{Naming} to establish specialized source file naming conventions
! (@pxref{Naming Schemes}).
  
  @c ************************************
  @c * Variables from Imported Projects *
*************** of reasons might not be possible), you c
*** 11969,11979 ****
  naming scheme in the @code{Naming} package in your project file.
  
  @noindent
! Note that the use of pragmas described in @ref{Alternative
! File Naming Schemes} by mean of a configuration pragmas file is not
! supported when using project files. You must use the features described
! in this paragraph. You can however use specify other configuration
! pragmas (see @ref{Specifying Configuration Pragmas}).
  
  @ifclear vms
  For example, the following
--- 12348,12358 ----
  naming scheme in the @code{Naming} package in your project file.
  
  @noindent
! Note that the use of pragmas described in
! @ref{Alternative File Naming Schemes} by mean of a configuration
! pragmas file is not supported when using project files. You must use
! the features described in this paragraph. You can however use specify
! other configuration pragmas (@pxref{Specifying Configuration Pragmas}).
  
  @ifclear vms
  For example, the following
*************** The @code{Library_Dir} attribute has a s
*** 12126,12131 ****
--- 12505,12512 ----
  (absolute or relative) of the directory where the library will reside.
  It must designate an existing directory, and this directory must be
  different from the project's object directory. It also needs to be writable.
+ The directory should only be used for one library; the reason is that all
+ files contained in this directory may be deleted by the Project Manager.
  
  If both @code{Library_Name} and @code{Library_Dir} are specified and
  are legal, then the project file defines a library project.  The optional
*************** library-related attributes are checked o
*** 12133,12145 ****
  
  The @code{Library_Kind} attribute has a string value that must be one of the
  following (case insensitive): @code{"static"}, @code{"dynamic"} or
! @code{"relocatable"}. If this attribute is not specified, the library is a
! static library, that is an archive of object files that can be potentially
! linked into an static executable. Otherwise, the library may be dynamic or
  relocatable, that is a library that is loaded only at the start of execution.
- Depending on the operating system, there may or may not be a distinction
- between dynamic and relocatable libraries. For Unix and VMS Unix there is no
- such distinction.
  
  If you need to build both a static and a dynamic library, you should use two
  different object directories, since in some cases some extra code needs to
--- 12514,12524 ----
  
  The @code{Library_Kind} attribute has a string value that must be one of the
  following (case insensitive): @code{"static"}, @code{"dynamic"} or
! @code{"relocatable"} (which is a synonym for @code{"dynamic"}). If this
! attribute is not specified, the library is a static library, that is
! an archive of object files that can be potentially linked into an
! static executable. Otherwise, the library may be dynamic or
  relocatable, that is a library that is loaded only at the start of execution.
  
  If you need to build both a static and a dynamic library, you should use two
  different object directories, since in some cases some extra code needs to
*************** When @command{gnatmake} detects that a p
*** 12181,12193 ****
  is a library project file, it will check all immediate sources of the project
  and rebuild the library if any of the sources have been recompiled.
  
! When a library is built or rebuilt, an attempt is made to delete all
  files in the library directory.
  All @file{ALI} files will also be copied from the object directory to the
  library directory. To build executables, @command{gnatmake} will use the
! library rather than the individual object files. The copy of the @file{ALI}
! files are made read-only.
! 
  
  @c **********************************************
  @c * Using Third-Party Libraries through Projects
--- 12560,12596 ----
  is a library project file, it will check all immediate sources of the project
  and rebuild the library if any of the sources have been recompiled.
  
! Standard project files can import library project files. In such cases,
! the libraries will only be rebuild if some of its sources are recompiled
! because they are in the closure of some other source in an importing project.
! Sources of the library project files that are not in such a closure will
! not be checked, unless the full library is checked, because one of its sources
! needs to be recompiled.
! 
! For instance, assume the project file @code{A} imports the library project file
! @code{L}. The immediate sources of A are @file{a1.adb}, @file{a2.ads} and
! @file{a2.adb}. The immediate sources of L are @file{l1.ads}, @file{l1.adb},
! @file{l2.ads}, @file{l2.adb}.
! 
! If @file{l1.adb} has been modified, then the library associated with @code{L}
! will be rebuild when compiling all the immediate sources of @code{A} only
! if @file{a1.ads}, @file{a2.ads} or @file{a2.adb} includes a statement
! @code{"with L1;"}.
! 
! To be sure that all the sources in the library associated with @code{L} are
! up to date, and that all the sources of parject @code{A} are also up to date,
! the following two commands needs to be used:
! 
! @smallexample
! gnatmake -Pl.gpr
! gnatmake -Pa.gpr
! @end smallexample
! 
! When a library is built or rebuilt, an attempt is made first to delete all
  files in the library directory.
  All @file{ALI} files will also be copied from the object directory to the
  library directory. To build executables, @command{gnatmake} will use the
! library rather than the individual object files.
  
  @c **********************************************
  @c * Using Third-Party Libraries through Projects
*************** When a library project file is specified
*** 12819,12825 ****
  ^-l^/ACTION=LINK^ have special meanings.
  
  @itemize @bullet
! @item ^-b^/ACTION=BIND^ is only allwed for stand-alone libraries. It indicates
  to @command{gnatmake} that @command{gnatbind} should be invoked for the
  library.
  
--- 13222,13228 ----
  ^-l^/ACTION=LINK^ have special meanings.
  
  @itemize @bullet
! @item ^-b^/ACTION=BIND^ is only allowed for stand-alone libraries. It indicates
  to @command{gnatmake} that @command{gnatbind} should be invoked for the
  library.
  
*************** are project-aware:
*** 12840,12847 ****
  @command{^gnatlink^gnatlink^},
  @command{^gnatls^gnatls^},
  @command{^gnatelim^gnatelim^},
  and @command{^gnatxref^gnatxref^}. However, none of these tools can be invoked
! directly with a project file switch (@option{^-P^"-P"^}).
  They must be invoked through the @command{gnat} driver.
  
  The @command{gnat} driver is a front-end that accepts a number of commands and
--- 13243,13253 ----
  @command{^gnatlink^gnatlink^},
  @command{^gnatls^gnatls^},
  @command{^gnatelim^gnatelim^},
+ @command{^gnatpp^gnatpp^},
+ @command{^gnatmetric^gnatmetric^},
+ @command{^gnatstub^gnatstub^},
  and @command{^gnatxref^gnatxref^}. However, none of these tools can be invoked
! directly with a project file switch (@option{^-P^/PROJECT_FILE=^}).
  They must be invoked through the @command{gnat} driver.
  
  The @command{gnat} driver is a front-end that accepts a number of commands and
*************** PREP or PREPROCESS to invoke @command{^g
*** 12880,12893 ****
  @item
  PP or PRETTY to invoke @command{^gnatpp^gnatpp^}
  @item
  STUB to invoke @command{^gnatstub^gnatstub^}
  @item
  XREF to invoke @command{^gnatxref^gnatxref^}
  @end itemize
  
  @noindent
! Note that the compiler is invoked using the command
! @command{^gnatmake -f -u -c^gnatmake -f -u -c^}.
  
  @noindent
  The command may be followed by switches and arguments for the invoked
--- 13286,13314 ----
  @item
  PP or PRETTY to invoke @command{^gnatpp^gnatpp^}
  @item
+ METRIC to invoke @command{^gnatmetric^gnatmetric^}
+ @item
  STUB to invoke @command{^gnatstub^gnatstub^}
  @item
  XREF to invoke @command{^gnatxref^gnatxref^}
  @end itemize
  
  @noindent
! (note that the compiler is invoked using the command
! @command{^gnatmake -f -u -c^gnatmake -f -u -c^}).
! 
! @noindent
! On non VMS platforms, between @command{gnat} and the command, two
! special switches may be used:
! 
! @itemize @bullet
! @item
! @command{-v} to display the invocation of the tool.
! @item
! @command{-dn} to prevent the @command{gnat} driver from removing
! the temporary files it has created. These temporary files are
! configuration files and temporary file list files.
! @end itemize
  
  @noindent
  The command may be followed by switches and arguments for the invoked
*************** tool.
*** 12900,12915 ****
  @end smallexample
  
  @noindent
! In addition, for command BIND, COMP or COMPILE, FIND, ELIM, LS or LIST, LINK,
! PP or PRETTY and XREF, the project file related switches
  (@option{^-P^/PROJECT_FILE^},
  @option{^-X^/EXTERNAL_REFERENCE^} and
  @option{^-vP^/MESSAGES_PROJECT_FILE=^x}) may be used in addition to
  the switches of the invoking tool.
  
  @noindent
! For each of these commands, there is optionally a corresponding  package
! in the main project.
  
  @itemize @bullet
  @item
--- 13321,13356 ----
  @end smallexample
  
  @noindent
! Switches may also be put in text files, one switch per line, and the text
! files may be specified with their path name preceded by '@@'.
! 
! @smallexample
!    gnat bind @@args.txt main.ali
! @end smallexample
! 
! @noindent
! In addition, for commands BIND, COMP or COMPILE, FIND, ELIM, LS or LIST, LINK,
! METRIC, PP or PRETTY, STUB and XREF, the project file related switches
  (@option{^-P^/PROJECT_FILE^},
  @option{^-X^/EXTERNAL_REFERENCE^} and
  @option{^-vP^/MESSAGES_PROJECT_FILE=^x}) may be used in addition to
  the switches of the invoking tool.
  
  @noindent
! When GNAT PP or GNAT PRETTY is used with a project file, but with no source
! specified on the command line, it invokes @command{^gnatpp^gnatpp^} with all
! the immediate sources of the specified project file.
! 
! @noindent
! When GNAT METRIC is used with a project file, but with no source
! specified on the command line, it invokes @command{^gnatmetric^gnatmetric^}
! with all the immediate sources of the specified project file and with
! @option{^-d^/DIRECTORY^} with the parameter pointing to the object directory
! of the project.
! 
! @noindent
! For each of the following commands, there is optionally a corresponding
! package in the main project.
  
  @itemize @bullet
  @item
*************** package @code{Gnatls} for command LS or 
*** 12932,12941 ****
--- 13373,13390 ----
  package @code{Linker} for command LINK (invoking @code{^gnatlink^gnatlink^})
  
  @item
+ package @code{Metrics} for command METRIC
+ (invoking @code{^gnatmetric^gnatmetric^})
+ 
+ @item
  package @code{Pretty_Printer} for command PP or PRETTY
  (invoking @code{^gnatpp^gnatpp^})
  
  @item
+ package @code{Gnatstub} for command STUB
+ (invoking @code{^gnatstub^gnatstub^})
+ 
+ @item
  package @code{Cross_Reference} for command XREF (invoking
  @code{^gnatxref^gnatxref^})
  
*************** simple_name ::=
*** 13349,13355 ****
  
  @end smallexample
  
- 
  @node The Cross-Referencing Tools gnatxref and gnatfind
  @chapter  The Cross-Referencing Tools @code{gnatxref} and @code{gnatfind}
  @findex gnatxref
--- 13798,13803 ----
*************** definitions and/or references to a speci
*** 13375,13382 ****
  cross-references.
  
  To use these tools, you must not compile your application using the
! @option{-gnatx} switch on the @file{gnatmake} command line
! (see @ref{The GNAT Make Program gnatmake}). Otherwise, cross-referencing
  information will not be generated.
  
  @menu
--- 13823,13830 ----
  cross-references.
  
  To use these tools, you must not compile your application using the
! @option{-gnatx} switch on the @command{gnatmake} command line
! (@pxref{The GNAT Make Program gnatmake}). Otherwise, cross-referencing
  information will not be generated.
  
  @menu
*************** specifying @file{source*.adb} is the sam
*** 13410,13415 ****
--- 13858,13867 ----
  directory whose name starts with @file{source} and whose extension is
  @file{adb}.
  
+ You shouldn't specify any directory name, just base names. @command{gnatxref}
+ and @command{gnatfind} will be able to locate these files by themselves using
+ the source path. If you specify directories, no result is produced.
+ 
  @end table
  
  @noindent
*************** or permissions status in the file system
*** 13428,13440 ****
  @item -aIDIR
  @cindex @option{-aIDIR} (@command{gnatxref})
  When looking for source files also look in directory DIR. The order in which
! source file search is undertaken is the same as for @file{gnatmake}.
  
  @item -aODIR
  @cindex @option{-aODIR} (@command{gnatxref})
  When searching for library and object files, look in directory
  DIR. The order in which library files are searched is the same as for
! @file{gnatmake}.
  
  @item -nostdinc
  @cindex @option{-nostdinc} (@command{gnatxref})
--- 13880,13892 ----
  @item -aIDIR
  @cindex @option{-aIDIR} (@command{gnatxref})
  When looking for source files also look in directory DIR. The order in which
! source file search is undertaken is the same as for @command{gnatmake}.
  
  @item -aODIR
  @cindex @option{-aODIR} (@command{gnatxref})
  When searching for library and object files, look in directory
  DIR. The order in which library files are searched is the same as for
! @command{gnatmake}.
  
  @item -nostdinc
  @cindex @option{-nostdinc} (@command{gnatxref})
*************** Do not look for library files in the sys
*** 13447,13453 ****
  @item --RTS=@var{rts-path}
  @cindex @option{--RTS} (@command{gnatxref})
  Specifies the default location of the runtime library. Same meaning as the
! equivalent @code{gnatmake} flag (see @ref{Switches for gnatmake}).
  
  @item ^-d^/DERIVED_TYPES^
  @cindex @option{^-d^/DERIVED_TYPES^} (@command{gnatxref})
--- 13899,13905 ----
  @item --RTS=@var{rts-path}
  @cindex @option{--RTS} (@command{gnatxref})
  Specifies the default location of the runtime library. Same meaning as the
! equivalent @command{gnatmake} flag (@pxref{Switches for gnatmake}).
  
  @item ^-d^/DERIVED_TYPES^
  @cindex @option{^-d^/DERIVED_TYPES^} (@command{gnatxref})
*************** display every unused entity and 'with'ed
*** 13493,13499 ****
  @item -v
  Instead of producing the default output, @code{gnatxref} will generate a
  @file{tags} file that can be used by vi. For examples how to use this
! feature, see @xref{Examples of gnatxref Usage}. The tags file is output
  to the standard output, thus you will have to redirect it to a file.
  @end ifclear
  
--- 13945,13951 ----
  @item -v
  Instead of producing the default output, @code{gnatxref} will generate a
  @file{tags} file that can be used by vi. For examples how to use this
! feature, see @ref{Examples of gnatxref Usage}. The tags file is output
  to the standard output, thus you will have to redirect it to a file.
  @end ifclear
  
*************** where
*** 13522,13528 ****
  @table @code
  @item pattern
  An entity will be output only if it matches the regular expression found
! in @samp{pattern}, see @xref{Regular Expressions in gnatfind and gnatxref}.
  
  Omitting the pattern is equivalent to specifying @samp{*}, which
  will match any entity. Note that if you do not provide a pattern, you
--- 13974,13980 ----
  @table @code
  @item pattern
  An entity will be output only if it matches the regular expression found
! in @samp{pattern}, see @ref{Regular Expressions in gnatfind and gnatxref}.
  
  Omitting the pattern is equivalent to specifying @samp{*}, which
  will match any entity. Note that if you do not provide a pattern, you
*************** for matching purposes. At the current ti
*** 13535,13541 ****
  @item sourcefile
  @code{gnatfind} will look for references, bodies or declarations
  of symbols referenced in @file{sourcefile}, at line @samp{line}
! and column @samp{column}. See @pxref{Examples of gnatfind Usage}
  for syntax examples.
  
  @item line
--- 13987,13993 ----
  @item sourcefile
  @code{gnatfind} will look for references, bodies or declarations
  of symbols referenced in @file{sourcefile}, at line @samp{line}
! and column @samp{column}. See @ref{Examples of gnatfind Usage}
  for syntax examples.
  
  @item line
*************** or permission status in the file system 
*** 13585,13597 ****
  @item -aIDIR
  @cindex @option{-aIDIR} (@command{gnatfind})
  When looking for source files also look in directory DIR. The order in which
! source file search is undertaken is the same as for @file{gnatmake}.
  
  @item -aODIR
  @cindex @option{-aODIR} (@command{gnatfind})
  When searching for library and object files, look in directory
  DIR. The order in which library files are searched is the same as for
! @file{gnatmake}.
  
  @item -nostdinc
  @cindex @option{-nostdinc} (@command{gnatfind})
--- 14037,14049 ----
  @item -aIDIR
  @cindex @option{-aIDIR} (@command{gnatfind})
  When looking for source files also look in directory DIR. The order in which
! source file search is undertaken is the same as for @command{gnatmake}.
  
  @item -aODIR
  @cindex @option{-aODIR} (@command{gnatfind})
  When searching for library and object files, look in directory
  DIR. The order in which library files are searched is the same as for
! @command{gnatmake}.
  
  @item -nostdinc
  @cindex @option{-nostdinc} (@command{gnatfind})
*************** Do not look for library files in the sys
*** 13604,13610 ****
  @item --RTS=@var{rts-path}
  @cindex @option{--RTS} (@command{gnatfind})
  Specifies the default location of the runtime library. Same meaning as the
! equivalent @code{gnatmake} flag (see @ref{Switches for gnatmake}).
  
  @item ^-d^/DERIVED_TYPE_INFORMATION^
  @cindex @option{^-d^/DERIVED_TYPE_INFORMATION^} (@code{gnatfind})
--- 14056,14062 ----
  @item --RTS=@var{rts-path}
  @cindex @option{--RTS} (@command{gnatfind})
  Specifies the default location of the runtime library. Same meaning as the
! equivalent @command{gnatmake} flag (@pxref{Switches for gnatmake}).
  
  @item ^-d^/DERIVED_TYPE_INFORMATION^
  @cindex @option{^-d^/DERIVED_TYPE_INFORMATION^} (@code{gnatfind})
*************** point to any character in the middle of 
*** 14041,14047 ****
  
  @end table
  
- 
  @c *********************************
  @node The GNAT Pretty-Printer gnatpp
  @chapter The GNAT Pretty-Printer @command{gnatpp}
--- 14493,14498 ----
*************** error message; no output file will be ge
*** 14065,14072 ****
  If the compilation unit
  contained in the input source depends semantically upon units located
  outside the current directory, you have to provide the source search path
! when invoking @command{gnatpp}; see the description of the @command{gnatpp}
! switches below.
  
  The @command{gnatpp} command has the form
  
--- 14516,14527 ----
  If the compilation unit
  contained in the input source depends semantically upon units located
  outside the current directory, you have to provide the source search path
! when invoking @command{gnatpp}, if these units are contained in files with
! names that do not follow the GNAT file naming rules, you have to provide
! the configuration file describing the corresponding naming scheme;
! see the description of the @command{gnatpp}
! switches below. Another possibility is to use a project file and to
! call @command{gnatpp} through the @command{gnat} driver
  
  The @command{gnatpp} command has the form
  
*************** output source file
*** 14084,14094 ****
  
  @item
  @var{filename} is the name (including the extension) of the source file to
! reformat; ``wildcards'' are not permitted.  The file name may contain path
! information; it does not have to follow the GNAT file naming rules
  @end itemize
  
- 
  @menu
  * Switches for gnatpp::
  * Formatting Rules::
--- 14539,14549 ----
  
  @item
  @var{filename} is the name (including the extension) of the source file to
! reformat; ``wildcards'' or several file names on the same gnatpp command are
! allowed.  The file name may contain path information; it does not have to
! follow the GNAT file naming rules
  @end itemize
  
  @menu
  * Switches for gnatpp::
  * Formatting Rules::
*************** indicate the effect.
*** 14150,14156 ****
  * Other gnatpp Switches::
  @end menu
  
- 
  @node Alignment Control
  @subsection Alignment Control
  @cindex Alignment control in @command{gnatpp}
--- 14605,14610 ----
*************** Align @code{:=} in assignment statements
*** 14185,14197 ****
  
  @item ^-A4^/ALIGN=ARROWS^
  Align @code{=>} in associations
  @end table
  
  @noindent
  The @option{^-A^/ALIGN^} switches are mutually compatible; any combination
  is allowed.
  
- 
  @node Casing Control
  @subsection Casing Control
  @cindex Casing control in @command{gnatpp}
--- 14639,14653 ----
  
  @item ^-A4^/ALIGN=ARROWS^
  Align @code{=>} in associations
+ 
+ @item ^-A5^/ALIGN=COMPONENT_CLAUSES^
+ Align @code{at} keywords in the component clauses in record representation clauses
  @end table
  
  @noindent
  The @option{^-A^/ALIGN^} switches are mutually compatible; any combination
  is allowed.
  
  @node Casing Control
  @subsection Casing Control
  @cindex Casing control in @command{gnatpp}
*************** The @option{^-D-^/SPECIFIC_CASING^} and
*** 14286,14303 ****
  @option{^-D@var{file}^/DICTIONARY=@var{file}^} switches are mutually
  compatible.
  
- 
  @node Construct Layout Control
  @subsection Construct Layout Control
  @cindex Layout control in @command{gnatpp}
  
  @noindent
  This group of @command{gnatpp} switches controls the layout of comments and
! complex syntactic constructs.  See @ref{Formatting Comments}, for details
  on their effect.
  
  @table @option
  @cindex @option{^-c@var{n}^/COMMENTS_LAYOUT^} (@command{gnatpp})
  @item ^-c1^/COMMENTS_LAYOUT=DEFAULT^
  GNAT-style comment line indentation (this is the default).
  
--- 14742,14761 ----
  @option{^-D@var{file}^/DICTIONARY=@var{file}^} switches are mutually
  compatible.
  
  @node Construct Layout Control
  @subsection Construct Layout Control
  @cindex Layout control in @command{gnatpp}
  
  @noindent
  This group of @command{gnatpp} switches controls the layout of comments and
! complex syntactic constructs.  See @ref{Formatting Comments} for details
  on their effect.
  
  @table @option
  @cindex @option{^-c@var{n}^/COMMENTS_LAYOUT^} (@command{gnatpp})
+ @item ^-c0^/COMMENTS_LAYOUT=UNTOUCHED^
+ All the comments remain unchanged
+ 
  @item ^-c1^/COMMENTS_LAYOUT=DEFAULT^
  GNAT-style comment line indentation (this is the default).
  
*************** Compact layout
*** 14319,14331 ****
  
  @item ^-l3^/CONSTRUCT_LAYOUT=UNCOMPACT^
  Uncompact layout
  @end table
  
  @ifclear vms
  @noindent
  The @option{-c1} and @option{-c2} switches are incompatible.
  The @option{-c3} and @option{-c4} switches are compatible with each other and
! also with @option{-c1} and @option{-c2}.
  
  The @option{-l1}, @option{-l2}, and @option{-l3} switches are incompatible.
  @end ifclear
--- 14777,14796 ----
  
  @item ^-l3^/CONSTRUCT_LAYOUT=UNCOMPACT^
  Uncompact layout
+ 
+ @item ^-notab^/NOTABS^
+ All the VT characters are removed from the comment text. All the HT characters
+ are expanded with the sequences of space characters to get to the next tab
+ stops.
+ 
  @end table
  
  @ifclear vms
  @noindent
  The @option{-c1} and @option{-c2} switches are incompatible.
  The @option{-c3} and @option{-c4} switches are compatible with each other and
! also with @option{-c1} and @option{-c2}. The @option{-c0} switch disables all
! the other comment formatting switches.
  
  The @option{-l1}, @option{-l2}, and @option{-l3} switches are incompatible.
  @end ifclear
*************** indentation is set to 1 (in which case t
*** 14371,14377 ****
  line indentation is also 1)
  @end table
  
- 
  @node Other Formatting Options
  @subsection Other Formatting Options
  
--- 14836,14841 ----
*************** The same as the corresponding gcc switch
*** 14424,14431 ****
  @item ^-gnatec^/CONFIGURATION_PRAGMAS_FILE^=@var{path}
  @cindex @option{^-gnatec^/CONFIGURATION_PRAGMAS_FILE^} (@code{gnatpp})
  The same as the corresponding gcc switch
- @end table
  
  
  @node Output File Control
  @subsection Output File Control
--- 14888,14899 ----
  @item ^-gnatec^/CONFIGURATION_PRAGMAS_FILE^=@var{path}
  @cindex @option{^-gnatec^/CONFIGURATION_PRAGMAS_FILE^} (@code{gnatpp})
  The same as the corresponding gcc switch
  
+ @item ^--RTS^/RUNTIME_SYSTEM^=@var{path}
+ @cindex @option{^--RTS^/RUNTIME_SYSTEM^} (@code{gnatpp})
+ The same as the corresponding gcc switch
+ 
+ @end table
  
  @node Output File Control
  @subsection Output File Control
*************** reading or processing the input file.
*** 14467,14474 ****
--- 14935,14952 ----
  @cindex @option{^-rf^/OVERRIDING_REPLACE^} (@code{gnatpp})
  Like @option{^-r^/REPLACE^} except that if the file with the specified name
  already exists, it is overwritten.
+ 
+ @item ^-rnb^/NO_BACKUP^
+ @cindex @option{^-rnb^/NO_BACKUP^} (@code{gnatpp})
+ Replace the input source file with the reformatted output without
+ creating any backup copy of the input source.
  @end table
  
+ @noindent
+ Options @option{^-pipe^/STANDARD_OUTPUT^},
+ @option{^-o^/OUTPUT^} and
+ @option{^-of^/FORCED_OUTPUT^} are allowed only if the call to gnatpp
+ contains only one file to reformat
  
  @node Other gnatpp Switches
  @subsection Other @code{gnatpp} Switches
*************** already exists, it is overwritten.
*** 14477,14482 ****
--- 14955,14968 ----
  The additional @command{gnatpp} switches are defined in this subsection.
  
  @table @option
+ @item ^-files @var{filename}^/FILES=@var{output_file}^
+ @cindex @option{^-files^/FILES^} (@code{gnatpp})
+ Take the argument source files from the specified file. This file should be an
+ ordinary textual file containing file names separated by spaces or
+ line breaks. You can use this switch more then once in the same call to
+ @command{gnatpp}. You also can combine this switch with explicit list of
+ files.
+ 
  @item ^-v^/VERBOSE^
  @cindex @option{^-v^/VERBOSE^} (@code{gnatpp})
  Verbose mode;
*************** Warning mode;
*** 14490,14496 ****
  a required layout in the result source.
  @end table
  
- 
  @node Formatting Rules
  @section Formatting Rules
  
--- 14976,14981 ----
*************** They provide the detailed descriptions o
*** 14506,14512 ****
  * Name Casing::
  @end menu
  
- 
  @node White Space and Empty Lines
  @subsection White Space and Empty Lines
  
--- 14991,14996 ----
*************** In order to preserve a visual separation
*** 14540,14546 ****
  Likewise, if for some reason you wish to have a sequence of empty lines,
  use a sequence of empty comments instead.
  
- 
  @node Formatting Comments
  @subsection Formatting Comments
  
--- 15024,15029 ----
*************** comments may be reformatted in typical
*** 14684,14694 ****
  word processor style (that is, moving words between lines and putting as
  many words in a line as possible).
  
- 
  @node Construct Layout
  @subsection Construct Layout
  
  @noindent
  The difference between GNAT style @option{^-l1^/CONSTRUCT_LAYOUT=GNAT^}
  and compact @option{^-l2^/CONSTRUCT_LAYOUT=COMPACT^}
  layout on the one hand, and uncompact layout
--- 15167,15201 ----
  word processor style (that is, moving words between lines and putting as
  many words in a line as possible).
  
  @node Construct Layout
  @subsection Construct Layout
  
  @noindent
+ In several cases the suggested layout in the Ada Reference Manual includes
+ an extra level of indentation that many programmers prefer to avoid. The
+ affected cases include:
+ 
+ @itemize @bullet
+ 
+ @item Record type declaration (RM 3.8)
+ 
+ @item Record representation clause (RM 13.5.1)
+ 
+ @item Loop statement in case if a loop has a statement identifier (RM 5.6)
+ 
+ @item Block statement in case if a block has a statement identifier (RM 5.6)
+ @end itemize
+ 
+ @noindent
+ In compact mode (when GNAT style layout or compact layout is set),
+ the pretty printer uses one level of indentation instead
+ of two. This is achived in the record definition and record representation
+ clause cases by putting the @code{record} keyword on the same line as the
+ start of the declaration or representation clause, and in the block and loop
+ case by putting the block or loop header on the same line as the statement
+ identifier.
+ 
+ @noindent
  The difference between GNAT style @option{^-l1^/CONSTRUCT_LAYOUT=GNAT^}
  and compact @option{^-l2^/CONSTRUCT_LAYOUT=COMPACT^}
  layout on the one hand, and uncompact layout
*************** type q is
*** 14718,14723 ****
--- 15225,15246 ----
  
  @item
  @smallexample @c ada
+ for q use record
+    a at 0 range  0 .. 31;
+    b at 4 range  0 .. 31;
+ end record;
+ @end smallexample
+ @tab
+ @smallexample @c ada
+ for q use
+    record
+       a at 0 range  0 .. 31;
+       b at 4 range  0 .. 31;
+    end record;
+ @end smallexample
+ 
+ @item
+ @smallexample @c ada
  Block : declare
     A : Integer := 3;
  begin
*************** type q is record                        
*** 14762,14767 ****
--- 15285,15295 ----
  end record;                                   b : integer;
                                             end record;
  
+ for q use record                        for q use
+    a at 0 range  0 .. 31;                  record
+    b at 4 range  0 .. 31;                     a at 0 range  0 .. 31;
+ end record;                                   b at 4 range  0 .. 31;
+                                            end record;
  
  Block : declare                         Block :
     A : Integer := 3;                       declare
*************** A further difference between GNAT style 
*** 14783,14789 ****
  GNAT style layout inserts empty lines as separation for
  compound statements, return statements and bodies.
  
- 
  @node Name Casing
  @subsection Name Casing
  
--- 15311,15316 ----
*************** end Test;
*** 14976,14982 ****
--- 15503,15992 ----
  @end cartouche
  @end smallexample
  
+ @c *********************************
+ @node The GNAT Metric Tool gnatmetric
+ @chapter The GNAT Metric Tool @command{gnatmetric}
+ @findex gnatmetric
+ @cindex Metric tool
+ 
+ @noindent
+ ^The @command{gnatmetric} tool^@command{GNAT METRIC}^ is an ASIS-based utility
+ for computing various program metrics.
+ It takes an Ada source file as input and generates a file containing the
+ metrics data as output. Various switches control which
+ metrics are computed and output.
+ 
+ @command{gnatmetric} generates and uses the ASIS
+ tree for the input source and thus requires the input to be syntactically and
+ semantically legal.
+ If this condition is not met, @command{gnatmetric} will generate
+ an error message; no metric information for this file will be
+ computed and reported.
+ 
+ If the compilation unit contained in the input source depends semantically
+ upon units in files located outside the current directory, you have to provide
+ the source search path when invoking @command{gnatmetric}.
+ If it depends semantically upon units that are contained
+ in files with names that do not follow the GNAT file naming rules, you have to
+ provide the configuration file describing the corresponding naming scheme; see
+ the description of the @command{gnatmetric} switches below.
+ Alternatively, you may use a project file and invoke @command{gnatmetric}
+ through the @command{gnat} driver.
+ 
+ 
+ The @command{gnatmetric} command has the form
+ 
+ @smallexample
+ $ gnatmetric [@i{switches}] @{@i{filename}@} [@i{-cargs gcc_switches}]
+ @end smallexample
+ 
+ @noindent
+ where
+ @itemize @bullet
+ @item
+ @i{switches} specify the metrics to compute and define the destination for
+ the output
+ 
+ @item
+ Each @i{filename} is the name (including the extension) of a source
+ file to process. ``Wildcards'' are allowed, and
+ the file name may contain path information.
+ If no @i{filename} is supplied, then the @i{switches} list must contain
+ at least one
+ @option{-files} switch (@pxref{Other gnatmetric Switches}).
+ Including both a @option{-files} switch and one or more
+ @i{filename} arguments is permitted.
+ 
+ @item
+ @i{-cargs gcc_switches} is a list of switches for
+ @command{gcc}. They will be passed on to all compiler invocations made by
+ @command{gnatmetric} to generate the ASIS trees. Here you can provide
+ @option{^-I^/INCLUDE_DIRS=^} switches to form the source search path,
+ and use the @option{-gnatec} switch to set the configuration file.
+ @end itemize
+ 
+ @menu
+ * Switches for gnatmetric::
+ @end menu
  
+ @node Switches for gnatmetric
+ @section Switches for @command{gnatmetric}
+ 
+ @noindent
+ The following subsections describe the various switches accepted by
+ @command{gnatmetric}, organized by category.
+ 
+ @menu
+ * Output Files Control::
+ * Disable Metrics For Local Units::
+ * Line Metrics Control::
+ * Syntax Metrics Control::
+ * Complexity Metrics Control::
+ * Other gnatmetric Switches::
+ @end menu
+ 
+ @node Output Files Control
+ @subsection Output File Control
+ @cindex Output file control in @command{gnatmetric}
+ 
+ @noindent
+ @command{gnatmetric} has two output formats. It can generate a
+ textual (human-readable) form, and also XML. By default only textual
+ output is generated.
+ 
+ When generating the output in textual form, @command{gnatmetric} creates
+ for each Ada source file a corresponding text file
+ containing the computed metrics. By default, this file
+ is placed in the same directory as where the source file is located, and
+ its name is obtained
+ by appending the ^@file{.metrix}^@file{$METRIX}^ suffix to the name of the
+ input file.
+ 
+ All the output information generated in XML format is placed in a single
+ file. By default this file is placed in the current directory and has the
+ name ^@file{metrix.xml}^@file{METRIX$XML}^.
+ 
+ Some of the computed metrics are summed over the units passed to
+ @command{gnatmetric}; for example, the total number of lines of code.
+ By default this information is sent to @file{stdout}, but a file
+ can be specified with the @option{-og} switch.
+ 
+ The following switches control the @command{gnatmetric} output:
+ 
+ @table @option
+ @cindex @option{^-x^/XML^} (@command{gnatmetric})
+ @item ^-x^/XML^
+ Generate the XML output
+ 
+ @cindex @option{^-nt^/NO_TEXT^} (@command{gnatmetric})
+ @item ^-nt^/NO_TEXT^
+ Do not generate the output in text form (implies @option{^-x^/XML^})
+ 
+ @cindex @option{^-d^/DIRECTORY^} (@command{gnatmetric})
+ @item ^-d @var{output_dir}^/DIRECTORY=@var{output_dir}^
+ Put textual files with detailed metrics into @var{output_dir}
+ 
+ @cindex @option{^-o^/SUFFIX_DETAILS^} (@command{gnatmetric})
+ @item ^-o @var{file_suffix}^/SUFFIX_DETAILS=@var{file_suffix}^
+ Use @var{file_suffix}, instead of ^@file{.metrix}^@file{$METRIX}^
+ in the name of the output file.
+ 
+ @cindex @option{^-og^/GLOBAL_OUTPUT^} (@command{gnatmetric})
+ @item ^-og @var{file_name}^/GLOBAL_OUTPUT=@var{file_name}^
+ Put global metrics into @var{file_name}
+ 
+ @cindex @option{^-ox^/XML_OUTPUT^} (@command{gnatmetric})
+ @item ^-ox @var{file_name}^/XML_OUTPUT=@var{file_name}^
+ Put the XML output into @var{file_name} (also implies @option{^-x^/XML^})
+ 
+ @cindex @option{^-sfn^/SHORT_SOURCE_FILE_NAME^} (@command{gnatmetric})
+ @item ^-sfn^/SHORT_SOURCE_FILE_NAME^
+ Use ``short'' source file names in the output.  (The @command{gnatmetric}
+ output includes the name(s) of the Ada source file(s) from which the metrics
+ are computed.  By default each name includes the absolute path. The
+ @option{^-sfn^/SHORT_SOURCE_FILE_NAME^} switch causes @command{gnatmetric}
+ to exclude all directory information from the file names that are output.)
+ 
+ @end table
+ 
+ @node Disable Metrics For Local Units
+ @subsection Disable Metrics For Local Units
+ @cindex Disable Metrics For Local Units in @command{gnatmetric}
+ 
+ @noindent
+ @command{gnatmetric} relies on the GNAT compilation model @minus{}
+ one compilation
+ unit per one source file. It computes line metrics for the whole source
+ file, and it also computes syntax
+ and complexity metrics for the file's outermost unit.
+ 
+ By default, @command{gnatmetric} will also compute all metrics for certain
+ kinds of locally declared program units:
+ 
+ @itemize @bullet
+ @item
+ subprogram (and generic subprogram) bodies;
+ 
+ @item
+ package (and generic package) specifications and bodies;
+ 
+ @item
+ task object and type specifications and bodies;
+ 
+ @item
+ protected object and type specifications and bodies.
+ @end itemize
+ 
+ @noindent
+ These kinds of entities will be referred to as
+ @emph{eligible local program units}, or simply @emph{eligible local units},
+ @cindex Eligible local unit (for @command{gnatmetric})
+ in the discussion below.
+ 
+ Note that a subprogram declaration, generic instantiation,
+ or renaming declaration only receives metrics
+ computation when it appear as the outermost entity
+ in a source file.
+ 
+ Suppression of metrics computation for eligible local units can be
+ obtained via the following switch:
+ 
+ @table @option
+ @cindex @option{^-n@var{x}^/SUPPRESS^} (@command{gnatmetric})
+ @item ^-nolocal^/SUPPRESS=LOCAL_DETAILS^
+ Do not compute detailed metrics for eligible local program units
+ 
+ @end table
+ 
+ @node Line Metrics Control
+ @subsection Line Metrics Control
+ @cindex Line metrics control in @command{gnatmetric}
+ 
+ @noindent
+ For any (legal) source file, and for each of its
+ eligible local program units, @command{gnatmetric} computes the following
+ metrics:
+ 
+ @itemize @bullet
+ @item
+ the total number of lines;
+ 
+ @item
+ the total number of code lines (i.e., non-blank lines that are not comments)
+ 
+ @item
+ the number of comment lines
+ 
+ @item
+ the number of code lines containing end-of-line comments;
+ 
+ @item
+ the number of empty lines and lines containing only space characters and/or
+ format effectors (blank lines)
+ 
+ @end itemize
+ 
+ If @command{gnatmetric} is invoked on more than one source file, it sums the
+ values of the line metrics for all the files being processed and then
+ generates the cumulative results.
+ 
+ By default, all the line metrics are computed and reported. You can use the
+ following switches to select the specific line metrics to be computed and
+ reported (if any of these parameters is set, only explicitly specified line
+ metrics are computed).
+ 
+ @table @option
+ @cindex @option{^-la^/LINES_ALL^} (@command{gnatmetric})
+ @item ^-la^/LINES_ALL^
+ The number of all lines
+ 
+ @cindex @option{^-lcode^/CODE_LINES^} (@command{gnatmetric})
+ @item ^-lcode^/CODE_LINES^
+ The number of code lines
+ 
+ @cindex @option{^-lcomm^/COMENT_LINES^} (@command{gnatmetric})
+ @item ^-lcomm^/COMENT_LINES^
+ The number of comment lines
+ 
+ @cindex @option{^-leol^/MIXED_CODE_COMMENTS^} (@command{gnatmetric})
+ @item ^-leol^/MIXED_CODE_COMMENTS^
+ The number of code lines containing
+ end-of-line comments
+ 
+ @cindex @option{^-lb^/BLANK_LINES^} (@command{gnatmetric})
+ @item ^-lb^/BLANK_LINES^
+ The number of blank lines
+ 
+ @end table
+ 
+ 
+ @node Syntax Metrics Control
+ @subsection Syntax Metrics Control
+ @cindex Syntax metrics control in @command{gnatmetric}
+ 
+ @noindent
+ @command{gnatmetric} computes various syntactic metrics for the
+ outermost unit and for each eligible local unit:
+ 
+ @table @emph
+ @item LSLOC (``Logical Source Lines Of Code'')
+ The total number of declarations and the total number of statements
+ 
+ @item Maximal static nesting level of inner program units
+ According to
+ @cite{Ada 95 Language Reference Manual}, 10.1(1), ``A program unit is either a
+ package, a task unit, a protected unit, a
+ protected entry, a generic unit, or an explicitly declared subprogram other
+ than an enumeration literal.''
+ 
+ @item Maximal nesting level of composite syntactic constructs
+ This corresponds to the notion of the
+ maximum nesting level in the GNAT built-in style checks
+ (@pxref{Style Checking})
+ @end table
+ 
+ @noindent
+ For the outermost unit in the file, @command{gnatmetric} additionally computes
+ the following metrics:
+ 
+ @table @emph
+ @item Public subprograms
+ This metric is computed for package specifications. It is the
+ number of subprograms and generic subprograms declared in the visible
+ part (including in nested packages, protected objects, and
+ protected types).
+ 
+ @item All subprograms
+ This metric is computed for bodies and subunits. The
+ metric is equal to a total number of subprogram bodies in the compilation
+ unit.
+ Neither generic instantiations nor renamings-as-a-body nor body stubs
+ are counted. Any subprogram body is counted, independently of its nesting
+ level and enclosing constructs. Generic bodies and bodies of protected
+ subprograms are counted in the same way as ``usual'' subprogram bodies.
+ 
+ @item Public types
+ This metric is computed for package specifications and
+ generic package declarations. It is the total number of types
+ that can be referenced from outside this compilation unit, plus the
+ number of types from all the visible parts of all the visible generic packages.
+ Generic formal types are not counted.  Only types, not subtypes,
+ are included.
+ 
+ @noindent
+ Along with the total number of public types, the following
+ types are counted and reported separately:
+ 
+ @itemize @bullet
+ @item
+ Abstract types
+ 
+ @item
+ Root tagged types (abstract, non-abstract, private, non-private). Type
+ extensions are @emph{not} counted
+ 
+ @item
+ Private types (including private extensions)
+ 
+ @item
+ Task types
+ 
+ @item
+ Protected types
+ 
+ @end itemize
+ 
+ @item All types
+ This metric is computed for any compilation unit. It is equal to the total
+ number of the declarations of different types given in the compilation unit.
+ The private and the corresponding full type declaration are counted as one
+ type declaration. Incomplete type declarations and generic formal types
+ are not counted.
+ No distinction is made among different kinds of types (abstract,
+ private etc.); the total number of types is computed and reported.
+ 
+ @end table
+ 
+ @noindent
+ By default, all the syntax metrics are computed and reported. You can use the
+ following switches to select specific syntax metrics;
+ if any of these is set, only the explicitly specified metrics are computed.
+ 
+ @table @option
+ @cindex @option{^-ed^/DECLARATION_TOTAL^} (@command{gnatmetric})
+ @item ^-ed^/DECLARATION_TOTAL^
+ The total number of declarations
+ 
+ @cindex @option{^-es^/STATEMENT_TOTAL^} (@command{gnatmetric})
+ @item ^-es^/STATEMENT_TOTAL^
+ The total number of statements
+ 
+ @cindex @option{^-eps^/^} (@command{gnatmetric})
+ @item ^-eps^/INT_SUBPROGRAMS^
+ The number of public subprograms in a compilation unit
+ 
+ @cindex @option{^-eas^/SUBPROGRAMS_ALL^} (@command{gnatmetric})
+ @item ^-eas^/SUBPROGRAMS_ALL^
+ The number of all the subprograms in a compilation unit
+ 
+ @cindex @option{^-ept^/INT_TYPES^} (@command{gnatmetric})
+ @item ^-ept^/INT_TYPES^
+ The number of public types in a compilation unit
+ 
+ @cindex @option{^-eat^/TYPES_ALL^} (@command{gnatmetric})
+ @item ^-eat^/TYPES_ALL^
+ The number of all the types in a compilation unit
+ 
+ @cindex @option{^-enu^/PROGRAM_NESTING_MAX^} (@command{gnatmetric})
+ @item ^-enu^/PROGRAM_NESTING_MAX^
+ The maximal program unit nesting level
+ 
+ @cindex @option{^-ec^/CONSTRUCT_NESTING_MAX^} (@command{gnatmetric})
+ @item ^-ec^/CONSTRUCT_NESTING_MAX^
+ The maximal construct nesting level
+ 
+ @end table
+ 
+ @node Complexity Metrics Control
+ @subsection Complexity Metrics Control
+ @cindex Complexity metrics control in @command{gnatmetric}
+ 
+ @noindent
+ For a program unit that is an executable body (a subprogram body (including
+ generic bodies), task body, entry body or a package body containing
+ its own statement sequence ) @command{gnatmetric} computes the following
+ complexity metrics:
+ 
+ @itemize @bullet
+ @item
+ McCabe cyclomatic complexity;
+ 
+ @item
+ McCabe essential complexity;
+ 
+ @item
+ maximal loop nesting level
+ 
+ @end itemize
+ 
+ @noindent
+ The McCabe complexity metrics are defined
+ in @url{www.mccabe.com/pdf/nist235r.pdf}
+ 
+ According to McCabe, both control statements and short-circuit control forms
+ should be taken into account when computing cyclomatic complexity. For each
+ body, we compute three metric values:
+ 
+ @itemize @bullet
+ @item
+ the complexity introduced by control
+ statements only, without taking into account short-circuit forms,
+ 
+ @item
+ the complexity introduced by short-circuit control forms only, and
+ 
+ @item
+ the total
+ cyclomatic complexity, which is the sum of these two values.
+ @end itemize
+ 
+ @noindent
+ When computing cyclomatic and essential complexity, @command{gnatmetric} skips
+ the code in the exception handlers and in all the nested program units.
+ 
+ By default, all the complexity metrics are computed and reported.
+ For more finely-grained control you can use
+ the following switches:
+ 
+ @table @option
+ @cindex @option{^-n@var{x}^/SUPPRESS^} (@command{gnatmetric})
+ 
+ @item ^-nocc^/SUPPRESS=CYCLOMATIC_COMPLEXITY^
+ Do not compute the McCabe Cyclomatic Complexity
+ 
+ @item ^-noec^/SUPPRESS=ESSENTIAL_COMPLEXITY^
+ Do not compute the Essential Complexity
+ 
+ @item ^-nonl^/SUPPRESS=MAXIMAL_LOOP_NESTING^
+ Do not compute maximal loop nesting level
+ 
+ @item ^-ne^/SUPPRESS=EXITS_AS_GOTOS^
+ Do not consider @code{exit} statements as @code{goto}s when
+ computing Essential Complexity
+ 
+ @end table
+ 
+ @node Other gnatmetric Switches
+ @subsection Other @code{gnatmetric} Switches
+ 
+ @noindent
+ Additional @command{gnatmetric} switches are as follows:
+ 
+ @table @option
+ @item ^-files @var{filename}^/FILES=@var{filename}^
+ @cindex @option{^-files^/FILES^} (@code{gnatmetric})
+ Take the argument source files from the specified file. This file should be an
+ ordinary textual file containing file names separated by spaces or
+ line breaks. You can use this switch more then once in the same call to
+ @command{gnatmetric}. You also can combine this switch with
+ an explicit list of files.
+ 
+ @item ^-v^/VERBOSE^
+ @cindex @option{^-v^/VERBOSE^} (@code{gnatmetric})
+ Verbose mode;
+ @command{gnatmetric} generates version information and then
+ a trace of sources being procesed.
+ 
+ @item ^-dv^/DEBUG_OUTPUT^
+ @cindex @option{^-dv^/DEBUG_OUTPUT^} (@code{gnatmetric})
+ Debug mode;
+ @command{gnatmetric} generates various messages useful to understand what
+ happens during the metrics computation
+ 
+ @item ^-q^/QUIET^
+ @cindex @option{^-q^/QUIET^} (@code{gnatmetric})
+ Quiet mode.
+ @end table
  
  @c ***********************************
  @node File Name Krunching Using gnatkr
*************** Only output information about source fil
*** 15641,15646 ****
--- 16651,16663 ----
  @cindex @option{^-u^/OUTPUT=UNITS^} (@code{gnatls})
  Only output information about compilation units.
  
+ @item ^-files^/FILES^=@var{file}
+ @cindex @option{^-files^/FILES^} (@code{gnatls})
+ Take as arguments the files listed in text file @var{file}.
+ Text file @var{file} may contain empty lines that are ignored.
+ Each non empty line should contain the name of an existing file.
+ Several such switches may be specified simultaneously.
+ 
  @item ^-aO^/OBJECT_SEARCH=^@var{dir}
  @itemx ^-aI^/SOURCE_SEARCH=^@var{dir}
  @itemx ^-I^/SEARCH=^@var{dir}
*************** Only output information about compilatio
*** 15650,15666 ****
  @cindex @option{^-aI^/SOURCE_SEARCH^} (@code{gnatls})
  @cindex @option{^-I^/SEARCH^} (@code{gnatls})
  @cindex @option{^-I-^/NOCURRENT_DIRECTORY^} (@code{gnatls})
! Source path manipulation. Same meaning as the equivalent @code{gnatmake} flags
! (see @ref{Switches for gnatmake}).
  
  @item --RTS=@var{rts-path}
  @cindex @option{--RTS} (@code{gnatls})
  Specifies the default location of the runtime library. Same meaning as the
! equivalent @code{gnatmake} flag (see @ref{Switches for gnatmake}).
  
  @item ^-v^/OUTPUT=VERBOSE^
  @cindex @option{^-v^/OUTPUT=VERBOSE^} (@code{gnatls})
! Verbose mode. Output the complete source and object paths. Do not use
  the default column layout but instead use long format giving as much as
  information possible on each requested units, including special
  characteristics such as:
--- 16667,16683 ----
  @cindex @option{^-aI^/SOURCE_SEARCH^} (@code{gnatls})
  @cindex @option{^-I^/SEARCH^} (@code{gnatls})
  @cindex @option{^-I-^/NOCURRENT_DIRECTORY^} (@code{gnatls})
! Source path manipulation. Same meaning as the equivalent @command{gnatmake}
! flags (@pxref{Switches for gnatmake}).
  
  @item --RTS=@var{rts-path}
  @cindex @option{--RTS} (@code{gnatls})
  Specifies the default location of the runtime library. Same meaning as the
! equivalent @command{gnatmake} flag (@pxref{Switches for gnatmake}).
  
  @item ^-v^/OUTPUT=VERBOSE^
  @cindex @option{^-v^/OUTPUT=VERBOSE^} (@code{gnatls})
! Verbose mode. Output the complete source, object and project paths. Do not use
  the default column layout but instead use long format giving as much as
  information possible on each requested units, including special
  characteristics such as:
*************** object paths are affected by the -I swit
*** 15706,15712 ****
  @smallexample
  $ gnatls -v -I.. demo1.o
  
! GNATLS 3.10w (970212) Copyright 1999 Free Software Foundation, Inc.
  
  Source Search Path:
     <Current_Directory>
--- 16723,16730 ----
  @smallexample
  $ gnatls -v -I.. demo1.o
  
! GNATLS 5.03w (20041123-34)
! Copyright 1997-2004 Free Software Foundation, Inc.
  
  Source Search Path:
     <Current_Directory>
*************** Object Search Path:
*** 15718,15723 ****
--- 16736,16745 ----
     ../
     /home/comar/local/lib/gcc-lib/mips-sni-sysv4/2.7.2/adalib/
  
+ Project Search Path:
+    <Current_Directory>
+    /home/comar/local/lib/gnat/
+ 
  ./demo1.o
     Unit =>
       Name   => demo1
*************** Verbose mode.
*** 15897,15910 ****
  @item ^-vP^/MESSAGES_PROJECT_FILE=^@emph{x}
  @cindex @option{^-vP^/MESSAGES_PROJECT_FILE^} (@code{gnatclean})
  Indicates the verbosity of the parsing of GNAT project files.
! See @ref{Switches Related to Project Files}.
  
  @item ^-X^/EXTERNAL_REFERENCE=^@var{name=value}
  @cindex @option{^-X^/EXTERNAL_REFERENCE^} (@code{gnatclean})
  Indicates that external variable @var{name} has the value @var{value}.
  The Project Manager will use this value for occurrences of
  @code{external(name)} when parsing the project file.
! See @ref{Switches Related to Project Files}.
  
  @item ^-aO^/OBJECT_SEARCH=^@var{dir}
  @cindex @option{^-aO^/OBJECT_SEARCH^} (@code{gnatclean})
--- 16919,16932 ----
  @item ^-vP^/MESSAGES_PROJECT_FILE=^@emph{x}
  @cindex @option{^-vP^/MESSAGES_PROJECT_FILE^} (@code{gnatclean})
  Indicates the verbosity of the parsing of GNAT project files.
! @xref{Switches Related to Project Files}.
  
  @item ^-X^/EXTERNAL_REFERENCE=^@var{name=value}
  @cindex @option{^-X^/EXTERNAL_REFERENCE^} (@code{gnatclean})
  Indicates that external variable @var{name} has the value @var{value}.
  The Project Manager will use this value for occurrences of
  @code{external(name)} when parsing the project file.
! @xref{Switches Related to Project Files}.
  
  @item ^-aO^/OBJECT_SEARCH=^@var{dir}
  @cindex @option{^-aO^/OBJECT_SEARCH^} (@code{gnatclean})
*************** where @code{gnatclean} was invoked.
*** 15929,15998 ****
  @ifclear vms
  @node GNAT and Libraries
  @chapter GNAT and Libraries
! @cindex Library, building, installing
  
  @noindent
! This chapter addresses some of the issues related to building and using
! a library with GNAT. It also shows how the GNAT run-time library can be
! recompiled.
  
  @menu
! * Creating an Ada Library::
! * Installing an Ada Library::
! * Using an Ada Library::
! * Creating an Ada Library to be Used in a Non-Ada Context::
  * Rebuilding the GNAT Run-Time Library::
  @end menu
  
! @node Creating an Ada Library
! @section Creating an Ada Library
  
  @noindent
! In the GNAT environment, a library has two components:
  @itemize @bullet
  @item
  Source files.
  @item
! Compiled code and Ali files. See @ref{The Ada Library Information Files}.
  @end itemize
  
  @noindent
! In order to use other packages @ref{The GNAT Compilation Model}
! requires a certain number of sources to be available to the compiler.
! The minimal set of
! sources required includes the specs of all the packages that make up the
! visible part of the library as well as all the sources upon which they
! depend. The bodies of all visible generic units must also be provided.
  @noindent
! Although it is not strictly mandatory, it is recommended that all sources
! needed to recompile the library be provided, so that the user can make
! full use of inter-unit inlining and source-level debugging. This can also
! make the situation easier for users that need to upgrade their compilation
! toolchain and thus need to recompile the library from sources.
  
  @noindent
! The compiled code can be provided in different ways. The simplest way is
! to provide directly the set of objects produced by the compiler during
! the compilation of the library. It is also possible to group the objects
! into an archive using whatever commands are provided by the operating
! system. Finally, it is also possible to create a shared library (see
! option -shared in the GCC manual).
  
  @noindent
  There are various possibilities for compiling the units that make up the
! library: for example with a Makefile @ref{Using the GNU make Utility},
! or with a conventional script.
! For simple libraries, it is also possible to create a
! dummy main program which depends upon all the packages that comprise the
  interface of the library. This dummy main program can then be given to
! gnatmake, in order to build all the necessary objects. Here is an example
! of such a dummy program and the generic commands used to build an
! archive or a shared library.
  
  @smallexample @c ada
! @iftex
! @leftskip=.7cm
! @end iftex
  with My_Lib.Service1;
  with My_Lib.Service2;
  with My_Lib.Service3;
--- 16951,17097 ----
  @ifclear vms
  @node GNAT and Libraries
  @chapter GNAT and Libraries
! @cindex Library, building, installing, using
  
  @noindent
! This chapter describes how to build and use libraries with GNAT, and also shows
! how to recompile the GNAT run-time library. You should be familiar with the
! Project Manager facility (@pxref{GNAT Project Manager}) before reading this
! chapter.
  
  @menu
! * Introduction to Libraries in GNAT::
! * General Ada Libraries::
! * Stand-alone Ada Libraries::
  * Rebuilding the GNAT Run-Time Library::
  @end menu
  
! @node Introduction to Libraries in GNAT
! @section Introduction to Libraries in GNAT
  
  @noindent
! A library is, conceptually, a collection of objects which does not have its
! own main thread of execution, but rather provides certain services to the
! applications that use it. A library can be either statically linked with the
! application, in which case its code is directly included in the application,
! or, on platforms that support it, be dynamically linked, in which case
! its code is shared by all applications making use of this library.
! 
! GNAT supports both types of libraries.
! In the static case, the compiled code can be provided in different ways. The
! simplest approach is to provide directly the set of objects resulting from
! compilation of the library source files. Alternatively, you can group the
! objects into an archive using whatever commands are provided by the operating
! system. For the latter case, the objects are grouped into a shared library.
! 
! In the GNAT environment, a library has three types of components:
  @itemize @bullet
  @item
  Source files.
  @item
! @file{ALI} files.
! @xref{The Ada Library Information Files}.
! @item
! Object files, an archive or a shared library.
  @end itemize
  
  @noindent
! A GNAT library may expose all its source files, which is useful for
! documentation purposes. Alternatively, it may expose only the units needed by
! an external user to make use of the library. That is to say, the specs
! reflecting the library services along with all the units needed to compile
! those specs, which can include generic bodies or any body implementing an
! inlined routine. In the case of @emph{stand-alone libraries} those exposed
! units are called @emph{interface units} (@pxref{Stand-alone Ada Libraries}).
! 
! All compilation units comprising an application, including those in a library,
! need to be elaborated in an order partially defined by Ada's semantics. GNAT
! computes the elaboration order from the @file{ALI} files and this is why they
! constitute a mandatory part of GNAT libraries. Except in the case of
! @emph{stand-alone libraries}, where a specific library elaboration routine is
! produced independently of the application(s) using the library.
! 
! @node General Ada Libraries
! @section General Ada Libraries
! 
! @menu
! * Building a library::
! * Installing a library::
! * Using a library::
! @end menu
! 
! @node Building a library
! @subsection Building a library
! 
  @noindent
! The easiest way to build a library is to use the Project Manager,
! which supports a special type of project called a @emph{Library Project}
! (@pxref{Library Projects}).
! 
! A project is considered a library project, when two project-level attributes
! are defined in it: @code{Library_Name} and @code{Library_Dir}. In order to
! control different aspects of library configuration, additional optional
! project-level attributes can be specified:
! @table @code
! @item Library_Kind
! This attribute controls whether the library is to be static or dynamic
! 
! @item Library_Version
! This attribute specifies the library version; this value is used
! during dynamic linking of shared libraries to determine if the currently
! installed versions of the binaries are compatible.
! 
! @item Library_Options
! @item Library_GCC
! These attributes specify additional low-level options to be used during
! library generation, and redefine the actual application used to generate
! library.
! @end table
  
  @noindent
! The GNAT Project Manager takes full care of the library maintenance task,
! including recompilation of the source files for which objects do not exist
! or are not up to date, assembly of the library archive, and installation of
! the library (i.e., copying associated source, object and @file{ALI} files
! to the specified location).
! 
! Here is a simple library project file:
! @smallexample @c ada
! project My_Lib is
!    for Source_Dirs use ("src1", "src2");
!    for Object_Dir use "obj";
!    for Library_Name use "mylib";
!    for Library_Dir use "lib";
!    for Library_Kind use "dynamic";
! end My_lib;
! @end smallexample
  
  @noindent
+ and the compilation command to build and install the library:
+ 
+ @smallexample @c ada
+   $ gnatmake -Pmy_lib
+ @end smallexample
+ 
+ @noindent
+ It is not entirely trivial to perform manually all the steps required to
+ produce a library. We recommend that you use the GNAT Project Manager
+ for this task. In special cases where this is not desired, the necessary
+ steps are discussed below.
+ 
  There are various possibilities for compiling the units that make up the
! library: for example with a Makefile (@pxref{Using the GNU make Utility}) or
! with a conventional script. For simple libraries, it is also possible to create
! a dummy main program which depends upon all the packages that comprise the
  interface of the library. This dummy main program can then be given to
! @command{gnatmake}, which will ensure that all necessary objects are built.
  
+ After this task is accomplished, you should follow the standard procedure
+ of the underlying operating system to produce the static or shared library.
+ 
+ Here is an example of such a dummy program:
  @smallexample @c ada
! @group
  with My_Lib.Service1;
  with My_Lib.Service2;
  with My_Lib.Service3;
*************** procedure My_Lib_Dummy is
*** 16000,16007 ****
--- 17099,17110 ----
  begin
     null;
  end;
+ @end group
  @end smallexample
  
+ @noindent
+ Here are the generic commands that will build an archive or a shared library.
+ 
  @smallexample
  # compiling the library
  $ gnatmake -c my_lib_dummy.adb
*************** $ rm *.o
*** 16023,16108 ****
  # Make the ALI files read-only so that gnatmake will not try to
  # regenerate the objects that are in the library
  $ chmod -w *.ali
- 
  @end smallexample
  
  @noindent
! When the objects are grouped in an archive or a shared library, the user
! needs to specify the desired library at link time, unless a pragma
! linker_options has been used in one of the sources:
! @smallexample @c ada
! pragma Linker_Options ("-lmy_lib");
! @end smallexample
  
  @noindent
! Please note that the library must have a name of the form libxxx.a or
! libxxx.so in order to be accessed by the directive -lxxx at link
! time.
  
! @node Installing an Ada Library
! @section Installing an Ada Library
  
! @noindent
! In the GNAT model, installing a library consists in copying into a specific
! location the files that make up this library. It is possible to install
! the sources in a different directory from the other files (ALI, objects,
! archives) since the source path and the object path can easily be
! specified separately.
  
  @noindent
! For general purpose libraries, it is possible for the system
! administrator to put those libraries in the default compiler paths. To
! achieve this, he must specify their location in the configuration files
! @file{ada_source_path} and @file{ada_object_path} that must be located in
! the GNAT
! installation tree at the same place as the gcc spec file. The location of
! the gcc spec file can be determined as follows:
  @smallexample
  $ gcc -v
  @end smallexample
  
  @noindent
! The configuration files mentioned above have simple format: each line in them
! must contain one unique
! directory name. Those names are added to the corresponding path
  in their order of appearance in the file. The names can be either absolute
! or relative, in the latter case, they are relative to where theses files
  are located.
  
! @noindent
! @file{ada_source_path} and @file{ada_object_path} might actually not be
  present in a
  GNAT installation, in which case, GNAT will look for its run-time library in
! he directories @file{adainclude} for the sources and @file{adalib} for the
! objects and @file{ALI} files. When the files exist, the compiler does not
! look in @file{adainclude} and @file{adalib} at all, and thus the
  @file{ada_source_path} file
  must contain the location for the GNAT run-time sources (which can simply
  be @file{adainclude}). In the same way, the @file{ada_object_path} file must
  contain the location for the GNAT run-time objects (which can simply
  be @file{adalib}).
  
! @noindent
! You can also specify a new default path to the runtime library at compilation
! time with the switch @option{--RTS=rts-path}. You can easily choose and change
! the runtime you want your program to be compiled with. This switch is
! recognized by gcc, gnatmake, gnatbind, gnatls, gnatfind and gnatxref.
  
- @noindent
  It is possible to install a library before or after the standard GNAT
  library, by reordering the lines in the configuration files. In general, a
  library must be installed before the GNAT library if it redefines
  any part of it.
  
! @node Using an Ada Library
! @section Using an Ada Library
  
  @noindent
! In order to use a Ada library, you need to make sure that this
  library is on both your source and object path
! @ref{Search Paths and the Run-Time Library (RTL)}
! and @ref{Search Paths for gnatbind}. For
! instance, you can use the library @file{mylib} installed in
  @file{/dir/my_lib_src} and @file{/dir/my_lib_obj} with the following commands:
  
  @smallexample
--- 17126,17269 ----
  # Make the ALI files read-only so that gnatmake will not try to
  # regenerate the objects that are in the library
  $ chmod -w *.ali
  @end smallexample
  
  @noindent
! Please note that the library must have a name of the form @file{libxxx.a} or
! @file{libxxx.so} (or @file{libxxx.dll} on Windows) in order to be accessed by
! the directive @option{-lxxx} at link time.
! 
! @node Installing a library
! @subsection Installing a library
  
  @noindent
! If you use project files, library installation is part of the library build
! process. Thus no further action is needed in order to make use of the
! libraries that are built as part of the general application build. A usable
! version of the library is installed in the directory specified by the
! @code{Library_Dir} attribute of the library project file.
  
! You may want to install a library in a context different from where the library
! is built. This situation arises with third party suppliers, who may want
! to distribute a library in binary form where the user is not expected to be
! able to recompile the library. The simplest option in this case is to provide
! a project file slightly different from the one used to build the library, by
! using the @code{externally_built} attribute. For instance, the project
! file used to build the library in the previous section can be changed into the
! following one when the library is installed:
  
! @smallexample @c projectfile
! project My_Lib is
!    for Source_Dirs use ("src1", "src2");
!    for Library_Name use "mylib";
!    for Library_Dir use "lib";
!    for Library_Kind use "dynamic";
!    for Externally_Built use "true";
! end My_lib;
! @end smallexample
  
  @noindent
! This project file assumes that the directories @file{src1},
! @file{src2}, and @file{lib} exist in
! the directory containing the project file. The @code{externally_built}
! attribute makes it clear to the GNAT builder that it should not attempt to
! recompile any of the units from this library. It allows the library provider to
! restrict the source set to the minimum necessary for clients to make use of the
! library as described in the first section of this chapter. It is the
! responsibility of the library provider to install the necessary sources, ALI
! files and libraries in the directories mentioned in the project file. For
! convenience, the user's library project file should be installed in a location
! that will be searched automatically by the GNAT
! builder. These are the directories referenced in the @code{ADA_LIBRARY_PATH}
! environment variable (@pxref{Importing Projects}), and also the default GNAT
! library location that can be queried with @command{gnatls -v} and is usually of
! the form $gnat_install_root/lib/gnat.
! 
! When project files are not an option, it is also possible, but not recommended,
! to install the library so that the sources needed to use the library are on the
! Ada source path and the ALI files & libraries be on the Ada Object path (see
! @ref{Search Paths and the Run-Time Library (RTL)}. Alternatively, the system
! administrator can place general-purpose libraries in the default compiler
! paths, by specifying the libraries' location in the configuration files
! @file{ada_source_path} and @file{ada_object_path}. These configuration files
! must be located in the GNAT installation tree at the same place as the gcc spec
! file. The location of the gcc spec file can be determined as follows:
  @smallexample
  $ gcc -v
  @end smallexample
  
  @noindent
! The configuration files mentioned above have a simple format: each line
! must contain one unique directory name.
! Those names are added to the corresponding path
  in their order of appearance in the file. The names can be either absolute
! or relative; in the latter case, they are relative to where theses files
  are located.
  
! The files @file{ada_source_path} and @file{ada_object_path} might not be
  present in a
  GNAT installation, in which case, GNAT will look for its run-time library in
! the directories @file{adainclude} (for the sources) and @file{adalib} (for the
! objects and @file{ALI} files). When the files exist, the compiler does not
! look in @file{adainclude} and @file{adalib}, and thus the
  @file{ada_source_path} file
  must contain the location for the GNAT run-time sources (which can simply
  be @file{adainclude}). In the same way, the @file{ada_object_path} file must
  contain the location for the GNAT run-time objects (which can simply
  be @file{adalib}).
  
! You can also specify a new default path to the run-time library at compilation
! time with the switch @option{--RTS=rts-path}. You can thus choose / change
! the run-time library you want your program to be compiled with. This switch is
! recognized by @command{gcc}, @command{gnatmake}, @command{gnatbind},
! @command{gnatls}, @command{gnatfind} and @command{gnatxref}.
  
  It is possible to install a library before or after the standard GNAT
  library, by reordering the lines in the configuration files. In general, a
  library must be installed before the GNAT library if it redefines
  any part of it.
  
! @node Using a library
! @subsection Using a library
! 
! @noindent Once again, the project facility greatly simplifies the use of
! libraries. In this context, using a library is just a matter of adding a
! @code{with} clause in the user project. For instance, to make use of the
! library @code{My_Lib} shown in examples in earlier sections, you can
! write:
! 
! @smallexample @c projectfile
! with "my_lib";
! project My_Proj is
!   ...
! end My_Proj;
! @end smallexample
! 
! Even if you have a third-party, non-Ada library, you can still use GNAT's
! Project Manager facility to provide a wrapper for it. For example, the
! following project, when @code{with}ed by your main project, will link with the
! third-party library @file{liba.a}:
! 
! @smallexample @c projectfile
! @group
! project Liba is
!    for Source_Dirs use ();
!    for Library_Dir use "lib";
!    for Library_Name use "a";
!    for Library_Kind use "static";
! end Liba;
! @end group
! @end smallexample
  
  @noindent
! In order to use an Ada library manually, you need to make sure that this
  library is on both your source and object path
! (see @ref{Search Paths and the Run-Time Library (RTL)}
! and @ref{Search Paths for gnatbind}). Furthermore, when the objects are grouped
! in an archive or a shared library, you need to specify the desired
! library at link time.
! 
! For example, you can use the library @file{mylib} installed in
  @file{/dir/my_lib_src} and @file{/dir/my_lib_obj} with the following commands:
  
  @smallexample
*************** $ gnatmake -aI/dir/my_lib_src -aO/dir/my
*** 16111,16120 ****
  @end smallexample
  
  @noindent
! This can be simplified down to the following:
  @smallexample
  $ gnatmake my_appl
  @end smallexample
  when the following conditions are met:
  @itemize @bullet
  @item
--- 17272,17282 ----
  @end smallexample
  
  @noindent
! This can be expressed more simply:
  @smallexample
  $ gnatmake my_appl
  @end smallexample
+ @noindent
  when the following conditions are met:
  @itemize @bullet
  @item
*************** variable @code{ADA_INCLUDE_PATH}, or by 
*** 16126,16223 ****
  variable @code{ADA_OBJECTS_PATH}, or by the administrator to the file
  @file{ada_object_path}
  @item
! a pragma @code{Linker_Options}, as mentioned in @ref{Creating an Ada Library},
! has been added to the sources.
  @end itemize
- @noindent
  
! @node Creating an Ada Library to be Used in a Non-Ada Context
! @section Creating an Ada Library to be Used in a Non-Ada Context
  
! @noindent
! The previous sections detailed how to create and install a library that
! was usable from an Ada main program. Using this library in a non-Ada
! context is not possible, because the elaboration of the library is
! automatically done as part of the main program elaboration.
  
! GNAT also provides the ability to build libraries that can be used both
! in an Ada and non-Ada context.  This section describes how to build such
! a library, and then how to use it from a C program. The method for
! interfacing with the library from other languages such as Fortran for
! instance remains the same.
  
! @subsection Creating the Library
  
! @itemize @bullet
! @item Identify the units representing the interface of the library.
  
! Here is an example of simple library interface:
  
! @smallexample @c ada
! package Interface is
  
!    procedure Do_Something;
  
!    procedure Do_Something_Else;
  
! end Interface;
  @end smallexample
  
! @item Use @code{pragma Export} or @code{pragma Convention} for the
! exported entities.
  
! Our package @code{Interface} is then updated as follow:
! @smallexample @c ada
! package Interface is
  
!    procedure Do_Something;
!    pragma Export (C, Do_Something, "do_something");
  
!    procedure Do_Something_Else;
!    pragma Export (C, Do_Something_Else, "do_something_else");
  
! end Interface;
  @end smallexample
  
! @item Compile all the units composing the library.
  
! @item Bind the library objects.
  
! This step is performed by invoking gnatbind with the @option{-L<prefix>}
! switch. @code{gnatbind} will then generate the library elaboration
! procedure (named @code{<prefix>init}) and the run-time finalization
! procedure (named @code{<prefix>final}).
  
! @smallexample
! # generate the binder file in Ada
! $ gnatbind -Lmylib interface
  
! # generate the binder file in C
! $ gnatbind -C -Lmylib interface
! @end smallexample
  
! @item Compile the files generated by the binder
  
! @smallexample
! $ gcc -c b~interface.adb
! @end smallexample
  
! @item Create the library;
  
! The procedure is identical to the procedure explained in
! @ref{Creating an Ada Library},
! except that @file{b~interface.o} needs to be added to
! the list of objects.
  
! @smallexample
! # create an archive file
! $ ar cr libmylib.a b~interface.o <other object files>
  
! # create a shared library
! $ gcc -shared -o libmylib.so b~interface.o <other object files>
  @end smallexample
  
! @item Provide a ``foreign'' view of the library interface;
  
  The example below shows the content of @code{mylib_interface.h} (note
  that there is no rule for the naming of this file, any name can be used)
--- 17288,17474 ----
  variable @code{ADA_OBJECTS_PATH}, or by the administrator to the file
  @file{ada_object_path}
  @item
! a pragma @code{Linker_Options} has been added to one of the sources.
! For example:
! 
! @smallexample @c ada
! pragma Linker_Options ("-lmy_lib");
! @end smallexample
  @end itemize
  
! @node Stand-alone Ada Libraries
! @section Stand-alone Ada Libraries
! @cindex Stand-alone library, building, using
  
! @menu
! * Introduction to Stand-alone Libraries::
! * Building a Stand-alone Library::
! * Creating a Stand-alone Library to be used in a non-Ada context::
! * Restrictions in Stand-alone Libraries::
! @end menu
  
! @node Introduction to Stand-alone Libraries
! @subsection Introduction to Stand-alone Libraries
  
! @noindent
! A Stand-alone Library (abbreviated ``SAL'') is a library that contains the
! necessary code to
! elaborate the Ada units that are included in the library. In contrast with
! an ordinary library, which consists of all sources, objects and @file{ALI}
! files of the
! library, a SAL may specify a restricted subset of compilation units
! to serve as a library interface. In this case, the fully
! self-sufficient set of files will normally consist of an objects
! archive, the sources of interface units' specs, and the @file{ALI}
! files of interface units.
! If an interface spec contains a generic unit or an inlined subprogram,
! the body's
! source must also be provided; if the units that must be provided in the source
! form depend on other units, the source and @file{ALI} files of those must
! also be provided.
  
! The main purpose of a SAL is to minimize the recompilation overhead of client
! applications when a new version of the library is installed. Specifically,
! if the interface sources have not changed, client applications do not need to
! be recompiled. If, furthermore, a SAL is provided in the shared form and its
! version, controlled by @code{Library_Version} attribute, is not changed,
! then the clients do not need to be relinked.
  
! SALs also allow the library providers to minimize the amount of library source
! text exposed to the clients.  Such ``information hiding'' might be useful or
! necessary for various reasons.
  
! Stand-alone libraries are also well suited to be used in an executable whose
! main routine is not written in Ada.
  
! @node Building a Stand-alone Library
! @subsection Building a Stand-alone Library
  
! @noindent
! GNAT's Project facility provides a simple way of building and installing
! stand-alone libraries; see @ref{Stand-alone Library Projects}.
! To be a Stand-alone Library Project, in addition to the two attributes
! that make a project a Library Project (@code{Library_Name} and
! @code{Library_Dir}; see @ref{Library Projects}), the attribute
! @code{Library_Interface} must be defined.  For example:
  
! @smallexample @c projectfile
! @group
!    for Library_Dir use "lib_dir";
!    for Library_Name use "dummy";
!    for Library_Interface use ("int1", "int1.child");
! @end group
  @end smallexample
  
! @noindent
! Attribute @code{Library_Interface} has a non-empty string list value,
! each string in the list designating a unit contained in an immediate source
! of the project file.
  
! When a Stand-alone Library is built, first the binder is invoked to build
! a package whose name depends on the library name
! (@file{^b~dummy.ads/b^B$DUMMY.ADS/B^} in the example above).
! This binder-generated package includes initialization and
! finalization procedures whose
! names depend on the library name (@code{dummyinit} and @code{dummyfinal}
! in the example
! above). The object corresponding to this package is included in the library.
  
! You must ensure timely (e.g., prior to any use of interfaces in the SAL)
! calling of these procedures if a static SAL is built, or if a shared SAL
! is built
! with the project-level attribute @code{Library_Auto_Init} set to
! @code{"false"}.
  
! For a Stand-Alone Library, only the @file{ALI} files of the Interface Units
! (those that are listed in attribute @code{Library_Interface}) are copied to
! the Library Directory. As a consequence, only the Interface Units may be
! imported from Ada units outside of the library. If other units are imported,
! the binding phase will fail.
  
! The attribute @code{Library_Src_Dir} may be specified for a
! Stand-Alone Library. @code{Library_Src_Dir} is a simple attribute that has a
! single string value. Its value must be the path (absolute or relative to the
! project directory) of an existing directory. This directory cannot be the
! object directory or one of the source directories, but it can be the same as
! the library directory. The sources of the Interface
! Units of the library that are needed by an Ada client of the library will be
! copied to the designated directory, called the Interface Copy directory.
! These sources include the specs of the Interface Units, but they may also
! include bodies and subunits, when pragmas @code{Inline} or @code{Inline_Always}
! are used, or when there is a generic unit in the spec. Before the sources
! are copied to the Interface Copy directory, an attempt is made to delete all
! files in the Interface Copy directory.
! 
! Building stand-alone libraries by hand is somewhat tedious, but for those
! occasions when it is necessary here are the steps that you need to perform:
! @itemize @bullet
! @item
! Compile all library sources.
! 
! @item
! Invoke the binder with the switch @option{-n} (No Ada main program),
! with all the @file{ALI} files of the interfaces, and
! with the switch @option{-L} to give specific names to the @code{init}
! and @code{final} procedures.  For example:
! @smallexample
!   gnatbind -n int1.ali int2.ali -Lsal1
  @end smallexample
  
! @item
! Compile the binder generated file:
! @smallexample
!   gcc -c b~int2.adb
! @end smallexample
  
! @item
! Link the dynamic library with all the necessary object files,
! indicating to the linker the names of the @code{init} (and possibly
! @code{final}) procedures for automatic initialization (and finalization).
! The built library should be placed in a directory different from
! the object directory.
  
! @item
! Copy the @code{ALI} files of the interface to the library directory,
! add in this copy an indication that it is an interface to a SAL
! (i.e. add a word @option{SL} on the line in the @file{ALI} file that starts
! with letter ``P'') and make the modified copy of the @file{ALI} file
! read-only.
! @end itemize
  
! @noindent
! Using SALs is not different from using other libraries
! (see @ref{Using a library}).
  
! @node Creating a Stand-alone Library to be used in a non-Ada context
! @subsection Creating a Stand-alone Library to be used in a non-Ada context
  
! @noindent
! It is easy to adapt the SAL build procedure discussed above for use of a SAL in
! a non-Ada context.
  
! The only extra step required is to ensure that library interface subprograms
! are compatible with the main program, by means of @code{pragma Export}
! or @code{pragma Convention}.
  
! Here is an example of simple library interface for use with C main program:
  
! @smallexample @c ada
! package Interface is
  
!    procedure Do_Something;
!    pragma Export (C, Do_Something, "do_something");
  
!    procedure Do_Something_Else;
!    pragma Export (C, Do_Something_Else, "do_something_else");
! 
! end Interface;
  @end smallexample
  
! @noindent
! On the foreign language side, you must provide a ``foreign'' view of the
! library interface; remember that it should contain elaboration routines in
! addition to interface subprograms.
  
  The example below shows the content of @code{mylib_interface.h} (note
  that there is no rule for the naming of this file, any name can be used)
*************** extern void mylibfinal (void);
*** 16232,16240 ****
  extern void do_something (void);
  extern void do_something_else (void);
  @end smallexample
- @end itemize
- 
- @subsection Using the Library
  
  @noindent
  Libraries built as explained above can be used from any program, provided
--- 17483,17488 ----
*************** example) are called before the library s
*** 16243,16249 ****
  libraries can be used simultaneously, as long as the elaboration
  procedure of each library is called.
  
! Below is an example of C program that uses our @code{mylib} library.
  
  @smallexample
  #include "mylib_interface.h"
--- 17491,17497 ----
  libraries can be used simultaneously, as long as the elaboration
  procedure of each library is called.
  
! Below is an example of a C program that uses the @code{mylib} library.
  
  @smallexample
  #include "mylib_interface.h"
*************** main (void)
*** 16265,16287 ****
  @end smallexample
  
  @noindent
! Note that this same library can be used from an equivalent Ada main
! program. In addition, if the libraries are installed as detailed in
! @ref{Installing an Ada Library}, it is not necessary to invoke the
! library elaboration and finalization routines. The binder will ensure
! that this is done as part of the main program elaboration and
! finalization phases.
! 
! @subsection The Finalization Phase
! 
! @noindent
! Invoking any library finalization procedure generated by @code{gnatbind}
! shuts down the Ada run time permanently. Consequently, the finalization
! of all Ada libraries must be performed at the end of the program. No
! call to these libraries nor the Ada run time should be made past the
! finalization phase.
  
! @subsection Restrictions in Libraries
  
  @noindent
  The pragmas listed below should be used with caution inside libraries,
--- 17513,17527 ----
  @end smallexample
  
  @noindent
! Note that invoking any library finalization procedure generated by
! @code{gnatbind} shuts down the Ada run-time environment.
! Consequently, the
! finalization of all Ada libraries must be performed at the end of the program.
! No call to these libraries or to the Ada run-time library should be made
! after the finalization phase.
  
! @node Restrictions in Stand-alone Libraries
! @subsection Restrictions in Stand-alone Libraries
  
  @noindent
  The pragmas listed below should be used with caution inside libraries,
*************** as they can create incompatibilities wit
*** 16292,16323 ****
  @item pragma @code{Task_Dispatching_Policy}
  @item pragma @code{Unreserve_All_Interrupts}
  @end itemize
  When using a library that contains such pragmas, the user must make sure
  that all libraries use the same pragmas with the same values. Otherwise,
! a @code{Program_Error} will
  be raised during the elaboration of the conflicting
  libraries. The usage of these pragmas and its consequences for the user
  should therefore be well documented.
  
! Similarly, the traceback in exception occurrences mechanism should be
  enabled or disabled in a consistent manner across all libraries.
! Otherwise, a Program_Error will be raised during the elaboration of the
  conflicting libraries.
  
! If the @code{'Version} and @code{'Body_Version}
! attributes are used inside a library, then it is necessary to
! perform a @code{gnatbind} step that mentions all @file{ALI} files in all
  libraries, so that version identifiers can be properly computed.
  In practice these attributes are rarely used, so this is unlikely
  to be a consideration.
  
  @node  Rebuilding the GNAT Run-Time Library
  @section Rebuilding the GNAT Run-Time Library
  
  @noindent
  It may be useful to recompile the GNAT library in various contexts, the
  most important one being the use of partition-wide configuration pragmas
! such as Normalize_Scalar. A special Makefile called
  @code{Makefile.adalib} is provided to that effect and can be found in
  the directory containing the GNAT library. The location of this
  directory depends on the way the GNAT environment has been installed and can
--- 17532,17566 ----
  @item pragma @code{Task_Dispatching_Policy}
  @item pragma @code{Unreserve_All_Interrupts}
  @end itemize
+ 
+ @noindent
  When using a library that contains such pragmas, the user must make sure
  that all libraries use the same pragmas with the same values. Otherwise,
! @code{Program_Error} will
  be raised during the elaboration of the conflicting
  libraries. The usage of these pragmas and its consequences for the user
  should therefore be well documented.
  
! Similarly, the traceback in the exception occurrence mechanism should be
  enabled or disabled in a consistent manner across all libraries.
! Otherwise, Program_Error will be raised during the elaboration of the
  conflicting libraries.
  
! If the @code{Version} or @code{Body_Version}
! attributes are used inside a library, then you need to
! perform a @code{gnatbind} step that specifies all @file{ALI} files in all
  libraries, so that version identifiers can be properly computed.
  In practice these attributes are rarely used, so this is unlikely
  to be a consideration.
  
  @node  Rebuilding the GNAT Run-Time Library
  @section Rebuilding the GNAT Run-Time Library
+ @cindex GNAT Run-Time Library, rebuilding
  
  @noindent
  It may be useful to recompile the GNAT library in various contexts, the
  most important one being the use of partition-wide configuration pragmas
! such as @code{Normalize_Scalars}. A special Makefile called
  @code{Makefile.adalib} is provided to that effect and can be found in
  the directory containing the GNAT library. The location of this
  directory depends on the way the GNAT environment has been installed and can
*************** to use it.
*** 16340,16346 ****
  @noindent
  This chapter offers some examples of makefiles that solve specific
  problems. It does not explain how to write a makefile (see the GNU make
! documentation), nor does it try to replace the @code{gnatmake} utility
  (@pxref{The GNAT Make Program gnatmake}).
  
  All the examples in this section are specific to the GNU version of
--- 17583,17589 ----
  @noindent
  This chapter offers some examples of makefiles that solve specific
  problems. It does not explain how to write a makefile (see the GNU make
! documentation), nor does it try to replace the @command{gnatmake} utility
  (@pxref{The GNAT Make Program gnatmake}).
  
  All the examples in this section are specific to the GNU version of
*************** time of very big applications while main
*** 16369,16375 ****
  each step of the build process.
  
  The list of dependencies are handled automatically by
! @code{gnatmake}. The Makefile is simply used to call gnatmake in each of
  the appropriate directories.
  
  Note that you should also read the example on how to automatically
--- 17612,17618 ----
  each step of the build process.
  
  The list of dependencies are handled automatically by
! @command{gnatmake}. The Makefile is simply used to call gnatmake in each of
  the appropriate directories.
  
  Note that you should also read the example on how to automatically
*************** operating systems limit the length of th
*** 16570,16576 ****
  gnatmake the list of source and object directories.
  
  This example shows how you can set up environment variables, which will
! make @code{gnatmake} behave exactly as if the directories had been
  specified on the command line, but have a much higher length limit (or
  even none on most systems).
  
--- 17813,17819 ----
  gnatmake the list of source and object directories.
  
  This example shows how you can set up environment variables, which will
! make @command{gnatmake} behave exactly as if the directories had been
  specified on the command line, but have a much higher length limit (or
  even none on most systems).
  
*************** all:
*** 16624,16649 ****
  @end smallexample
  @end ifclear
  
! 
! @node Finding Memory Problems
! @chapter Finding Memory Problems
  
  @noindent
! This chapter describes
  @ifclear vms
! the @command{gnatmem} tool, which can be used to track down
! ``memory leaks'', and
  @end ifclear
- the GNAT Debug Pool facility, which can be used to detect incorrect uses of
- access values (including ``dangling references'').
  
  @menu
  @ifclear vms
  * The gnatmem Tool::
  @end ifclear
- * The GNAT Debug Pool Facility::
  @end menu
  
  
  @ifclear vms
  @node The gnatmem Tool
--- 17867,18102 ----
  @end smallexample
  @end ifclear
  
! @node Memory Management Issues
! @chapter Memory Management Issues
  
  @noindent
! This chapter describes some useful memory pools provided in the GNAT library
! and in particular the GNAT Debug Pool facility, which can be used to detect
! incorrect uses of access values (including ``dangling references'').
  @ifclear vms
! It also describes the @command{gnatmem} tool, which can be used to track down
! ``memory leaks''.
  @end ifclear
  
  @menu
+ * Some Useful Memory Pools::
+ * The GNAT Debug Pool Facility::
  @ifclear vms
  * The gnatmem Tool::
  @end ifclear
  @end menu
  
+ @node Some Useful Memory Pools
+ @section Some Useful Memory Pools
+ @findex Memory Pool
+ @cindex storage, pool
+ 
+ @noindent
+ The @code{System.Pool_Global} package offers the Unbounded_No_Reclaim_Pool
+ storage pool. Allocations use the standard system call @code{malloc} while
+ deallocations use the standard system call @code{free}. No reclamation is
+ performed when the pool goes out of scope. For performance reasons, the
+ standard default Ada allocators/deallocators do not use any explicit storage
+ pools but if they did, they could use this storage pool without any change in
+ behavior. That is why this storage pool is used  when the user
+ manages to make the default implicit allocator explicit as in this example:
+ @smallexample @c ada
+    type T1 is access Something;
+     -- no Storage pool is defined for T2
+    type T2 is access Something_Else;
+    for T2'Storage_Pool use T1'Storage_Pool;
+    -- the above is equivalent to
+    for T2'Storage_Pool use System.Pool_Global.Global_Pool_Object;
+ @end smallexample
+ 
+ @noindent
+ The @code{System.Pool_Local} package offers the Unbounded_Reclaim_Pool storage
+ pool. The allocation strategy is similar to @code{Pool_Local}'s
+ except that the all
+ storage allocated with this pool is reclaimed when the pool object goes out of
+ scope. This pool provides a explicit mechanism similar to the implicit one
+ provided by several Ada 83 compilers for allocations performed through a local
+ access type and whose purpose was to reclaim memory when exiting the
+ scope of a given local access. As an example, the following program does not
+ leak memory even though it does not perform explicit deallocation:
+ 
+ @smallexample @c ada
+ with System.Pool_Local;
+ procedure Pooloc1 is
+    procedure Internal is
+       type A is access Integer;
+       X : System.Pool_Local.Unbounded_Reclaim_Pool;
+       for A'Storage_Pool use X;
+       v : A;
+    begin
+       for I in  1 .. 50 loop
+          v := new Integer;
+       end loop;
+    end Internal;
+ begin
+    for I in  1 .. 100 loop
+       Internal;
+    end loop;
+ end Pooloc1;
+ @end smallexample
+ 
+ @noindent
+ The @code{System.Pool_Size} package implements the Stack_Bounded_Pool used when
+ @code{Storage_Size} is specified for an access type.
+ The whole storage for the pool is
+ allocated at once, usually on the stack at the point where the access type is
+ elaborated. It is automatically reclaimed when exiting the scope where the
+ access type is defined. This package is not intended to be used directly by the
+ user and it is implicitly used for each such declaration:
+ 
+ @smallexample @c ada
+    type T1 is access Something;
+    for T1'Storage_Size use 10_000;
+ @end smallexample
+ 
+ 
+ @node The GNAT Debug Pool Facility
+ @section The GNAT Debug Pool Facility
+ @findex Debug Pool
+ @cindex storage, pool, memory corruption
+ 
+ @noindent
+ The use of unchecked deallocation and unchecked conversion can easily
+ lead to incorrect memory references. The problems generated by such
+ references are usually difficult to tackle because the symptoms can be
+ very remote from the origin of the problem. In such cases, it is
+ very helpful to detect the problem as early as possible. This is the
+ purpose of the Storage Pool provided by @code{GNAT.Debug_Pools}.
+ 
+ In order to use the GNAT specific debugging pool, the user must
+ associate a debug pool object with each of the access types that may be
+ related to suspected memory problems. See Ada Reference Manual 13.11.
+ @smallexample @c ada
+ type Ptr is access Some_Type;
+ Pool : GNAT.Debug_Pools.Debug_Pool;
+ for Ptr'Storage_Pool use Pool;
+ @end smallexample
+ 
+ @noindent
+ @code{GNAT.Debug_Pools} is derived from a GNAT-specific kind of
+ pool: the @code{Checked_Pool}. Such pools, like standard Ada storage pools,
+ allow the user to redefine allocation and deallocation strategies. They
+ also provide a checkpoint for each dereference, through the use of
+ the primitive operation @code{Dereference} which is implicitly called at
+ each dereference of an access value.
+ 
+ Once an access type has been associated with a debug pool, operations on
+ values of the type may raise four distinct exceptions,
+ which correspond to four potential kinds of memory corruption:
+ @itemize @bullet
+ @item
+ @code{GNAT.Debug_Pools.Accessing_Not_Allocated_Storage}
+ @item
+ @code{GNAT.Debug_Pools.Accessing_Deallocated_Storage}
+ @item
+ @code{GNAT.Debug_Pools.Freeing_Not_Allocated_Storage}
+ @item
+ @code{GNAT.Debug_Pools.Freeing_Deallocated_Storage }
+ @end itemize
+ 
+ @noindent
+ For types associated with a Debug_Pool, dynamic allocation is performed using
+ the standard GNAT allocation routine. References to all allocated chunks of
+ memory are kept in an internal dictionary. Several deallocation strategies are
+ provided, whereupon the user can choose to release the memory to the system,
+ keep it allocated for further invalid access checks, or fill it with an easily
+ recognizable pattern for debug sessions. The memory pattern is the old IBM
+ hexadecimal convention: @code{16#DEADBEEF#}.
+ 
+ See the documentation in the file g-debpoo.ads for more information on the
+ various strategies.
+ 
+ Upon each dereference, a check is made that the access value denotes a
+ properly allocated memory location. Here is a complete example of use of
+ @code{Debug_Pools}, that includes typical instances of  memory corruption:
+ @smallexample @c ada
+ @iftex
+ @leftskip=0cm
+ @end iftex
+ with Gnat.Io; use Gnat.Io;
+ with Unchecked_Deallocation;
+ with Unchecked_Conversion;
+ with GNAT.Debug_Pools;
+ with System.Storage_Elements;
+ with Ada.Exceptions; use Ada.Exceptions;
+ procedure Debug_Pool_Test is
+ 
+    type T is access Integer;
+    type U is access all T;
+ 
+    P : GNAT.Debug_Pools.Debug_Pool;
+    for T'Storage_Pool use P;
+ 
+    procedure Free is new Unchecked_Deallocation (Integer, T);
+    function UC is new Unchecked_Conversion (U, T);
+    A, B : aliased T;
+ 
+    procedure Info is new GNAT.Debug_Pools.Print_Info(Put_Line);
+ 
+ begin
+    Info (P);
+    A := new Integer;
+    B := new Integer;
+    B := A;
+    Info (P);
+    Free (A);
+    begin
+       Put_Line (Integer'Image(B.all));
+    exception
+       when E : others => Put_Line ("raised: " & Exception_Name (E));
+    end;
+    begin
+       Free (B);
+    exception
+       when E : others => Put_Line ("raised: " & Exception_Name (E));
+    end;
+    B := UC(A'Access);
+    begin
+       Put_Line (Integer'Image(B.all));
+    exception
+       when E : others => Put_Line ("raised: " & Exception_Name (E));
+    end;
+    begin
+       Free (B);
+    exception
+       when E : others => Put_Line ("raised: " & Exception_Name (E));
+    end;
+    Info (P);
+ end Debug_Pool_Test;
+ @end smallexample
+ 
+ @noindent
+ The debug pool mechanism provides the following precise diagnostics on the
+ execution of this erroneous program:
+ @smallexample
+ Debug Pool info:
+   Total allocated bytes :  0
+   Total deallocated bytes :  0
+   Current Water Mark:  0
+   High Water Mark:  0
+ 
+ Debug Pool info:
+   Total allocated bytes :  8
+   Total deallocated bytes :  0
+   Current Water Mark:  8
+   High Water Mark:  8
+ 
+ raised: GNAT.DEBUG_POOLS.ACCESSING_DEALLOCATED_STORAGE
+ raised: GNAT.DEBUG_POOLS.FREEING_DEALLOCATED_STORAGE
+ raised: GNAT.DEBUG_POOLS.ACCESSING_NOT_ALLOCATED_STORAGE
+ raised: GNAT.DEBUG_POOLS.FREEING_NOT_ALLOCATED_STORAGE
+ Debug Pool info:
+   Total allocated bytes :  8
+   Total deallocated bytes :  4
+   Current Water Mark:  4
+   High Water Mark:  8
+ @end smallexample
  
  @ifclear vms
  @node The gnatmem Tool
*************** and #3 thanks to the more precise associ
*** 16987,17138 ****
  
  @end ifclear
  
- 
- @node The GNAT Debug Pool Facility
- @section The GNAT Debug Pool Facility
- @findex Debug Pool
- @cindex storage, pool, memory corruption
- 
- @noindent
- The use of unchecked deallocation and unchecked conversion can easily
- lead to incorrect memory references. The problems generated by such
- references are usually difficult to tackle because the symptoms can be
- very remote from the origin of the problem. In such cases, it is
- very helpful to detect the problem as early as possible. This is the
- purpose of the Storage Pool provided by @code{GNAT.Debug_Pools}.
- 
- In order to use the GNAT specific debugging pool, the user must
- associate a debug pool object with each of the access types that may be
- related to suspected memory problems. See Ada Reference Manual 13.11.
- @smallexample @c ada
- type Ptr is access Some_Type;
- Pool : GNAT.Debug_Pools.Debug_Pool;
- for Ptr'Storage_Pool use Pool;
- @end smallexample
- 
- @noindent
- @code{GNAT.Debug_Pools} is derived from a GNAT-specific kind of
- pool: the @code{Checked_Pool}. Such pools, like standard Ada storage pools,
- allow the user to redefine allocation and deallocation strategies. They
- also provide a checkpoint for each dereference, through the use of
- the primitive operation @code{Dereference} which is implicitly called at
- each dereference of an access value.
- 
- Once an access type has been associated with a debug pool, operations on
- values of the type may raise four distinct exceptions,
- which correspond to four potential kinds of memory corruption:
- @itemize @bullet
- @item
- @code{GNAT.Debug_Pools.Accessing_Not_Allocated_Storage}
- @item
- @code{GNAT.Debug_Pools.Accessing_Deallocated_Storage}
- @item
- @code{GNAT.Debug_Pools.Freeing_Not_Allocated_Storage}
- @item
- @code{GNAT.Debug_Pools.Freeing_Deallocated_Storage }
- @end itemize
- 
- @noindent
- For types associated with a Debug_Pool, dynamic allocation is performed using
- the standard
- GNAT allocation routine. References to all allocated chunks of memory
- are kept in an internal dictionary.
- Several deallocation strategies are provided, whereupon the user can choose
- to release the memory to the system, keep it allocated for further invalid
- access checks, or fill it with an easily recognizable pattern for debug
- sessions.
- The memory pattern is the old IBM hexadecimal convention: @code{16#DEADBEEF#}.
- 
- See the documentation in the file g-debpoo.ads for more information on the
- various strategies.
- 
- Upon each dereference, a check is made that the access value denotes a
- properly allocated memory location. Here is a complete example of use of
- @code{Debug_Pools}, that includes typical instances of  memory corruption:
- @smallexample @c ada
- @iftex
- @leftskip=0cm
- @end iftex
- with Gnat.Io; use Gnat.Io;
- with Unchecked_Deallocation;
- with Unchecked_Conversion;
- with GNAT.Debug_Pools;
- with System.Storage_Elements;
- with Ada.Exceptions; use Ada.Exceptions;
- procedure Debug_Pool_Test is
- 
-    type T is access Integer;
-    type U is access all T;
- 
-    P : GNAT.Debug_Pools.Debug_Pool;
-    for T'Storage_Pool use P;
- 
-    procedure Free is new Unchecked_Deallocation (Integer, T);
-    function UC is new Unchecked_Conversion (U, T);
-    A, B : aliased T;
- 
-    procedure Info is new GNAT.Debug_Pools.Print_Info(Put_Line);
- 
- begin
-    Info (P);
-    A := new Integer;
-    B := new Integer;
-    B := A;
-    Info (P);
-    Free (A);
-    begin
-       Put_Line (Integer'Image(B.all));
-    exception
-       when E : others => Put_Line ("raised: " & Exception_Name (E));
-    end;
-    begin
-       Free (B);
-    exception
-       when E : others => Put_Line ("raised: " & Exception_Name (E));
-    end;
-    B := UC(A'Access);
-    begin
-       Put_Line (Integer'Image(B.all));
-    exception
-       when E : others => Put_Line ("raised: " & Exception_Name (E));
-    end;
-    begin
-       Free (B);
-    exception
-       when E : others => Put_Line ("raised: " & Exception_Name (E));
-    end;
-    Info (P);
- end Debug_Pool_Test;
- @end smallexample
- 
- @noindent
- The debug pool mechanism provides the following precise diagnostics on the
- execution of this erroneous program:
- @smallexample
- Debug Pool info:
-   Total allocated bytes :  0
-   Total deallocated bytes :  0
-   Current Water Mark:  0
-   High Water Mark:  0
- 
- Debug Pool info:
-   Total allocated bytes :  8
-   Total deallocated bytes :  0
-   Current Water Mark:  8
-   High Water Mark:  8
- 
- raised: GNAT.DEBUG_POOLS.ACCESSING_DEALLOCATED_STORAGE
- raised: GNAT.DEBUG_POOLS.FREEING_DEALLOCATED_STORAGE
- raised: GNAT.DEBUG_POOLS.ACCESSING_NOT_ALLOCATED_STORAGE
- raised: GNAT.DEBUG_POOLS.FREEING_NOT_ALLOCATED_STORAGE
- Debug Pool info:
-   Total allocated bytes :  8
-   Total deallocated bytes :  4
-   Current Water Mark:  4
-   High Water Mark:  8
- @end smallexample
- 
- 
  @node Creating Sample Bodies Using gnatstub
  @chapter Creating Sample Bodies Using @command{gnatstub}
  @findex gnatstub
--- 18440,18445 ----
*************** by @command{gnatstub} to compile an argu
*** 17241,17247 ****
  @cindex @option{^-gnatyM^/MAX_LINE_LENGTH^} (@command{gnatstub})
  (@var{n} is a non-negative integer). Set the maximum line length in the
  body stub to @var{n}; the default is 79. The maximum value that can be
! specified is 32767.
  
  @item ^-gnaty^/STYLE_CHECKS=^@var{n}
  @cindex @option{^-gnaty^/STYLE_CHECKS=^} (@command{gnatstub})
--- 18548,18556 ----
  @cindex @option{^-gnatyM^/MAX_LINE_LENGTH^} (@command{gnatstub})
  (@var{n} is a non-negative integer). Set the maximum line length in the
  body stub to @var{n}; the default is 79. The maximum value that can be
! specified is 32767. Note that in the special case of configuration
! pragma files, the maximum is always 32767 regardless of whether or
! not this switch appears.
  
  @item ^-gnaty^/STYLE_CHECKS=^@var{n}
  @cindex @option{^-gnaty^/STYLE_CHECKS=^} (@command{gnatstub})
*************** Verbose mode: generate version informati
*** 17307,17313 ****
  
  @end table
  
- 
  @node Other Utility Programs
  @chapter Other Utility Programs
  
--- 18616,18621 ----
*************** For more information, please refer to th
*** 17502,17508 ****
  available in the @code{Glide} @result{} @code{Help} menu.
  @end ifclear
  
- 
  @node Converting Ada Files to html with gnathtml
  @section Converting Ada Files to HTML with @code{gnathtml}
  
--- 18810,18815 ----
*************** $ RUN/DEBUG <PROGRAM_NAME>
*** 17660,17667 ****
  @cindex Debugging
  
  @noindent
! This chapter discusses how to debug Ada programs. An incorrect Ada program
! may be handled in three ways by the GNAT compiler:
  
  @enumerate
  @item
--- 18967,18979 ----
  @cindex Debugging
  
  @noindent
! This chapter discusses how to debug Ada programs.
! @ifset vms
! It applies to the Alpha OpenVMS platform;
! the debugger for Integrity OpenVMS is scheduled for a subsequent release.
! @end ifset
! 
! An incorrect Ada program may be handled in three ways by the GNAT compiler:
  
  @enumerate
  @item
*************** the incorrect user program.
*** 17705,17711 ****
  
  @noindent
  @code{GDB} is a general purpose, platform-independent debugger that
! can be used to debug mixed-language programs compiled with @code{GCC},
  and in particular is capable of debugging Ada programs compiled with
  GNAT. The latest versions of @code{GDB} are Ada-aware and can handle
  complex Ada data structures.
--- 19017,19023 ----
  
  @noindent
  @code{GDB} is a general purpose, platform-independent debugger that
! can be used to debug mixed-language programs compiled with @command{gcc},
  and in particular is capable of debugging Ada programs compiled with
  GNAT. The latest versions of @code{GDB} are Ada-aware and can handle
  complex Ada data structures.
*************** The simplest command is simply @code{run
*** 17793,17799 ****
  exactly as if the debugger were not present. The following section
  describes some of the additional commands that can be given to @code{GDB}.
  
- 
  @c *******************************
  @node Introduction to GDB Commands
  @section Introduction to GDB Commands
--- 19105,19110 ----
*************** familiarity with compiler internals.
*** 18172,18178 ****
  
  @enumerate
  @item
! Run @code{gcc} with the @option{-gnatf}. This first
  switch causes all errors on a given line to be reported. In its absence,
  only the first error on a line is displayed.
  
--- 19483,19489 ----
  
  @enumerate
  @item
! Run @command{gcc} with the @option{-gnatf}. This first
  switch causes all errors on a given line to be reported. In its absence,
  only the first error on a line is displayed.
  
*************** terminates prematurely or goes into an i
*** 18182,18196 ****
  message displayed may help to pinpoint the culprit.
  
  @item
! Run @code{gcc} with the @option{^-v (verbose)^/VERBOSE^} switch. In this mode,
! @code{gcc} produces ongoing information about the progress of the
  compilation and provides the name of each procedure as code is
  generated. This switch allows you to find which Ada procedure was being
  compiled when it encountered a code generation problem.
  
  @item
  @cindex @option{-gnatdc} switch
! Run @code{gcc} with the @option{-gnatdc} switch. This is a GNAT specific
  switch that does for the front-end what @option{^-v^VERBOSE^} does
  for the back end. The system prints the name of each unit,
  either a compilation unit or nested unit, as it is being analyzed.
--- 19493,19507 ----
  message displayed may help to pinpoint the culprit.
  
  @item
! Run @command{gcc} with the @option{^-v (verbose)^/VERBOSE^} switch. In this
! mode, @command{gcc} produces ongoing information about the progress of the
  compilation and provides the name of each procedure as code is
  generated. This switch allows you to find which Ada procedure was being
  compiled when it encountered a code generation problem.
  
  @item
  @cindex @option{-gnatdc} switch
! Run @command{gcc} with the @option{-gnatdc} switch. This is a GNAT specific
  switch that does for the front-end what @option{^-v^VERBOSE^} does
  for the back end. The system prints the name of each unit,
  either a compilation unit or nested unit, as it is being analyzed.
*************** either a compilation unit or nested unit
*** 18198,18208 ****
  Finally, you can start
  @code{gdb} directly on the @code{gnat1} executable. @code{gnat1} is the
  front-end of GNAT, and can be run independently (normally it is just
! called from @code{gcc}). You can use @code{gdb} on @code{gnat1} as you
  would on a C program (but @pxref{The GNAT Debugger GDB} for caveats). The
  @code{where} command is the first line of attack; the variable
  @code{lineno} (seen by @code{print lineno}), used by the second phase of
! @code{gnat1} and by the @code{gcc} backend, indicates the source line at
  which the execution stopped, and @code{input_file name} indicates the name of
  the source file.
  @end enumerate
--- 19509,19519 ----
  Finally, you can start
  @code{gdb} directly on the @code{gnat1} executable. @code{gnat1} is the
  front-end of GNAT, and can be run independently (normally it is just
! called from @command{gcc}). You can use @code{gdb} on @code{gnat1} as you
  would on a C program (but @pxref{The GNAT Debugger GDB} for caveats). The
  @code{where} command is the first line of attack; the variable
  @code{lineno} (seen by @code{print lineno}), used by the second phase of
! @code{gnat1} and by the @command{gcc} backend, indicates the source line at
  which the execution stopped, and @code{input_file name} indicates the name of
  the source file.
  @end enumerate
*************** both language-defined children and GNAT 
*** 18280,18286 ****
  @findex GNAT
  Files with prefix @file{^g-^G-^} are children of @code{GNAT}. These are useful
  general-purpose packages, fully documented in their specifications. All
! the other @file{.c} files are modifications of common @code{gcc} files.
  @end itemize
  
  @node Getting Internal Debugging Information
--- 19591,19597 ----
  @findex GNAT
  Files with prefix @file{^g-^G-^} are children of @code{GNAT}. These are useful
  general-purpose packages, fully documented in their specifications. All
! the other @file{.c} files are modifications of common @command{gcc} files.
  @end itemize
  
  @node Getting Internal Debugging Information
*************** its information by scanning the run-time
*** 18319,18332 ****
  records of all active subprograms. Stack unwinding is one of the most
  important tools for program debugging.
  
- @noindent
  The first entry stored in traceback corresponds to the deepest calling level,
  that is to say the subprogram currently executing the instruction
  from which we want to obtain the traceback.
  
- @noindent
  Note that there is no runtime performance penalty when stack traceback
! is enabled and no exception are raised during program execution.
  
  @menu
  * Non-Symbolic Traceback::
--- 19630,19641 ----
  records of all active subprograms. Stack unwinding is one of the most
  important tools for program debugging.
  
  The first entry stored in traceback corresponds to the deepest calling level,
  that is to say the subprogram currently executing the instruction
  from which we want to obtain the traceback.
  
  Note that there is no runtime performance penalty when stack traceback
! is enabled, and no exception is raised during program execution.
  
  @menu
  * Non-Symbolic Traceback::
*************** platforms.
*** 18355,18365 ****
  A runtime non-symbolic traceback is a list of addresses of call instructions.
  To enable this feature you must use the @option{-E}
  @code{gnatbind}'s option. With this option a stack traceback is stored as part
! of exception information. It is possible to retrieve this information using the
! standard @code{Ada.Exception.Exception_Information} routine.
  
! @noindent
! Let's have a look at a simple example:
  
  @smallexample @c ada
  @cartouche
--- 19664,19673 ----
  A runtime non-symbolic traceback is a list of addresses of call instructions.
  To enable this feature you must use the @option{-E}
  @code{gnatbind}'s option. With this option a stack traceback is stored as part
! of exception information. You can retrieve this information using the
! @code{addr2line} tool.
  
! Here is a simple example:
  
  @smallexample @c ada
  @cartouche
*************** $ addr2line --exe=stb 0x401373 0x40138b 
*** 18423,18436 ****
  @end smallexample
  
  @noindent
! @code{addr2line} has a number of other useful options:
  
  @table @code
  @item --functions
  to get the function name corresponding to any location
  
  @item --demangle=gnat
! to use the @b{gnat} decoding mode for the function names. Note that
  for binutils version 2.9.x the option is simply @option{--demangle}.
  @end table
  
--- 19731,19744 ----
  @end smallexample
  
  @noindent
! The @code{addr2line} tool has several other useful options:
  
  @table @code
  @item --functions
  to get the function name corresponding to any location
  
  @item --demangle=gnat
! to use the gnat decoding mode for the function names. Note that
  for binutils version 2.9.x the option is simply @option{--demangle}.
  @end table
  
*************** From this traceback we can see that the 
*** 18451,18460 ****
  @file{stb.adb} at line 5, which was reached from a procedure call in
  @file{stb.adb} at line 10, and so on. The @file{b~std.adb} is the binder file,
  which contains the call to the main program.
! @pxref{Running gnatbind}. The remaining entries are assorted runtime routines,
  and the output will vary from platform to platform.
  
- @noindent
  It is also possible to use @code{GDB} with these traceback addresses to debug
  the program. For example, we can break at a given code location, as reported
  in the stack traceback:
--- 19759,19767 ----
  @file{stb.adb} at line 5, which was reached from a procedure call in
  @file{stb.adb} at line 10, and so on. The @file{b~std.adb} is the binder file,
  which contains the call to the main program.
! @xref{Running gnatbind}. The remaining entries are assorted runtime routines,
  and the output will vary from platform to platform.
  
  It is also possible to use @code{GDB} with these traceback addresses to debug
  the program. For example, we can break at a given code location, as reported
  in the stack traceback:
*************** end STB;
*** 18585,18597 ****
  @end smallexample
  
  @smallexample
! $ gnatmake stb
  $ stb
  
  In STB.P1 : 16#0040_F1E4# 16#0040_14F2# 16#0040_170B# 16#0040_171C#
  16#0040_1461# 16#0040_11C4# 16#0040_11F1# 16#77E8_92A4#
  @end smallexample
  
  @node Symbolic Traceback
  @subsection Symbolic Traceback
  @cindex traceback, symbolic
--- 19892,19909 ----
  @end smallexample
  
  @smallexample
! $ gnatmake -g stb
  $ stb
  
  In STB.P1 : 16#0040_F1E4# 16#0040_14F2# 16#0040_170B# 16#0040_171C#
  16#0040_1461# 16#0040_11C4# 16#0040_11F1# 16#77E8_92A4#
  @end smallexample
  
+ @noindent
+ You can then get further information by invoking the @code{addr2line}
+ tool as described earlier (note that the hexadecimal addresses
+ need to be specified in C format, with a leading ``0x'').
+ 
  @node Symbolic Traceback
  @subsection Symbolic Traceback
  @cindex traceback, symbolic
*************** end STB;
*** 18648,18654 ****
  @end smallexample
  
  @smallexample
! $ gnatmake -g stb -bargs -E -largs -lgnat -laddr2line -lintl
  $ stb
  
  0040149F in stb.p1 at stb.adb:8
--- 19960,19966 ----
  @end smallexample
  
  @smallexample
! $ gnatmake -g .\stb -bargs -E -largs -lgnat -laddr2line -lintl
  $ stb
  
  0040149F in stb.p1 at stb.adb:8
*************** $ stb
*** 18662,18668 ****
  @end smallexample
  
  @noindent
! The exact sequence of linker options may vary from platform to platform.
  The above @option{-largs} section is for Windows platforms. By contrast,
  under Unix there is no need for the @option{-largs} section.
  Differences across platforms are due to details of linker implementation.
--- 19974,19984 ----
  @end smallexample
  
  @noindent
! In the above example the ``.\'' syntax in the @command{gnatmake} command
! is currently required by @command{addr2line} for files that are in
! the current working directory.
! Moreover, the exact sequence of linker options may vary from platform
! to platform.
  The above @option{-largs} section is for Windows platforms. By contrast,
  under Unix there is no need for the @option{-largs} section.
  Differences across platforms are due to details of linker implementation.
*************** the type WIDE_CHARACTER.
*** 19122,19128 ****
  
  The floating-point types supported by GNAT are those
  supported by DEC Ada, but defaults are different, and are controlled by
! pragmas. See @pxref{Floating-Point Types and Representations} for details.
  
  @node The Package SYSTEM
  @section The Package SYSTEM
--- 20438,20444 ----
  
  The floating-point types supported by GNAT are those
  supported by DEC Ada, but defaults are different, and are controlled by
! pragmas. See @ref{Floating-Point Types and Representations} for details.
  
  @node The Package SYSTEM
  @section The Package SYSTEM
*************** and GNAT systems.
*** 20291,20297 ****
  
  @end ifset
  
- 
  @c **************************************
  @node Platform-Specific Information for the Run-Time Libraries
  @appendix Platform-Specific Information for the Run-Time Libraries
--- 21607,21612 ----
*************** and GNAT systems.
*** 20300,20316 ****
  @cindex Run-time libraries (platform-specific information)
  
  @noindent
! The GNAT run-time implementation
! may vary with respect to both the underlying threads library and
! the exception handling scheme.
  For threads support, one or more of the following are supplied:
  @itemize @bullet
  @item @b{native threads library}, a binding to the thread package from
  the underlying operating system
  
- @item @b{FSU threads library}, a binding to the Florida State University
- threads implementation, which complies fully with the requirements of Annex D
- 
  @item @b{pthreads library} (Sparc Solaris only), a binding to the Solaris
  POSIX thread package
  @end itemize
--- 21615,21627 ----
  @cindex Run-time libraries (platform-specific information)
  
  @noindent
! The GNAT run-time implementation may vary with respect to both the
! underlying threads library and the exception handling scheme.
  For threads support, one or more of the following are supplied:
  @itemize @bullet
  @item @b{native threads library}, a binding to the thread package from
  the underlying operating system
  
  @item @b{pthreads library} (Sparc Solaris only), a binding to the Solaris
  POSIX thread package
  @end itemize
*************** information about several specific platf
*** 20347,20364 ****
  @menu
  * Summary of Run-Time Configurations::
  * Specifying a Run-Time Library::
- * Choosing between Native and FSU Threads Libraries::
  * Choosing the Scheduling Policy::
  * Solaris-Specific Considerations::
  * IRIX-Specific Considerations::
  * Linux-Specific Considerations::
  @end menu
  
- 
  @node Summary of Run-Time Configurations
  @section Summary of Run-Time Configurations
  
- 
  @multitable @columnfractions .30 .70
  @item @b{alpha-openvms}
  @item @code{@ @ }@i{rts-native (default)}
--- 21658,21673 ----
  @menu
  * Summary of Run-Time Configurations::
  * Specifying a Run-Time Library::
  * Choosing the Scheduling Policy::
  * Solaris-Specific Considerations::
  * IRIX-Specific Considerations::
  * Linux-Specific Considerations::
+ * AIX-Specific Considerations::
  @end menu
  
  @node Summary of Run-Time Configurations
  @section Summary of Run-Time Configurations
  
  @multitable @columnfractions .30 .70
  @item @b{alpha-openvms}
  @item @code{@ @ }@i{rts-native (default)}
*************** information about several specific platf
*** 20379,20388 ****
  @item @code{@ @ @ @ }Tasking    @tab native Solaris threads library
  @item @code{@ @ @ @ }Exceptions @tab ZCX
  @*
- @item @code{@ @ }@i{rts-fsu}    @tab
- @item @code{@ @ @ @ }Tasking    @tab FSU threads library
- @item @code{@ @ @ @ }Exceptions @tab SJLJ
- @*
  @item @code{@ @ }@i{rts-m64}
  @item @code{@ @ @ @ }Tasking     @tab native Solaris threads library
  @item @code{@ @ @ @ }Exceptions  @tab ZCX
--- 21688,21693 ----
*************** information about several specific platf
*** 20400,20414 ****
  @*
  @item @b{x86-linux}
  @item @code{@ @ }@i{rts-native (default)}
! @item @code{@ @ @ @ }Tasking    @tab LinuxThread library
  @item @code{@ @ @ @ }Exceptions @tab ZCX
  @*
- @item @code{@ @ }@i{rts-fsu}
- @item @code{@ @ @ @ }Tasking    @tab FSU threads library
- @item @code{@ @ @ @ }Exceptions @tab SJLJ
- @*
  @item @code{@ @ }@i{rts-sjlj}
! @item @code{@ @ @ @ }Tasking    @tab LinuxThread library
  @item @code{@ @ @ @ }Exceptions @tab SJLJ
  @*
  @item @b{x86-windows}
--- 21705,21715 ----
  @*
  @item @b{x86-linux}
  @item @code{@ @ }@i{rts-native (default)}
! @item @code{@ @ @ @ }Tasking    @tab pthread library
  @item @code{@ @ @ @ }Exceptions @tab ZCX
  @*
  @item @code{@ @ }@i{rts-sjlj}
! @item @code{@ @ @ @ }Tasking    @tab pthread library
  @item @code{@ @ @ @ }Exceptions @tab SJLJ
  @*
  @item @b{x86-windows}
*************** information about several specific platf
*** 20418,20425 ****
  @*
  @end multitable
  
- 
- 
  @node Specifying a Run-Time Library
  @section Specifying a Run-Time Library
  
--- 21719,21724 ----
*************** For example on x86-linux:
*** 20458,20469 ****
       |    |                |
       |    +--- adalib <----+
       |
-      +--- rts-fsu
-      |    |
-      |    +--- adainclude
-      |    |
-      |    +--- adalib
-      |
       +--- rts-sjlj
            |
            +--- adainclude
--- 21757,21762 ----
*************** For example on x86-linux:
*** 20473,20491 ****
  @end smallexample
  
  @noindent
! If the @i{rts-fsu} library is to be selected on a permanent basis,
  these soft links can be modified with the following commands:
  
  @smallexample
  $ cd $target
  $ rm -f adainclude adalib
! $ ln -s rts-fsu/adainclude adainclude
! $ ln -s rts-fsu/adalib adalib
  @end smallexample
  
  @noindent
! Alternatively, you can specify @file{rts-fsu/adainclude} in the file
! @file{$target/ada_source_path} and @file{rts-fsu/adalib} in
  @file{$target/ada_object_path}.
  
  Selecting another run-time library temporarily can be
--- 21766,21784 ----
  @end smallexample
  
  @noindent
! If the @i{rts-sjlj} library is to be selected on a permanent basis,
  these soft links can be modified with the following commands:
  
  @smallexample
  $ cd $target
  $ rm -f adainclude adalib
! $ ln -s rts-sjlj/adainclude adainclude
! $ ln -s rts-sjlj/adalib adalib
  @end smallexample
  
  @noindent
! Alternatively, you can specify @file{rts-sjlj/adainclude} in the file
! @file{$target/ada_source_path} and @file{rts-sjlj/adalib} in
  @file{$target/ada_object_path}.
  
  Selecting another run-time library temporarily can be
*************** achieved by the regular mechanism for GN
*** 20496,20599 ****
  Set the environment variables:
  
  @smallexample
! $ ADA_INCLUDE_PATH=$target/rts-fsu/adainclude:$ADA_INCLUDE_PATH
! $ ADA_OBJECTS_PATH=$target/rts-fsu/adalib:$ADA_OBJECTS_PATH
  $ export ADA_INCLUDE_PATH ADA_OBJECTS_PATH
  @end smallexample
  
  @item
! Use @option{-aI$target/rts-fsu/adainclude}
! and @option{-aO$target/rts-fsu/adalib}
  on the @command{gnatmake} command line
  
  @item
! Use the switch @option{--RTS}; e.g., @option{--RTS=fsu}
  @cindex @option{--RTS} option
  @end itemize
  
- @noindent
- You can similarly switch to @emph{rts-sjlj}.
- 
- @node Choosing between Native and FSU Threads Libraries
- @section Choosing between Native and FSU Threads Libraries
- @cindex Native threads library
- @cindex FSU threads library
- 
- @noindent
- Some GNAT implementations offer a choice between
- native threads and FSU threads.
- 
- @itemize @bullet
- @item
- The @emph{native threads} library correspond to the standard system threads
- implementation (e.g. LinuxThreads on GNU/Linux,
- @cindex LinuxThreads library
- POSIX threads on AIX, or
- Solaris threads on Solaris). When this option is chosen, GNAT provides
- a full and accurate implementation of the core language tasking model
- as described in Chapter 9 of the Ada Reference Manual,
- but might not (and probably does not) implement
- the exact semantics as specified in @w{Annex D} (the Real-Time Systems Annex).
- @cindex Annex D (Real-Time Systems Annex) compliance
- @cindex Real-Time Systems Annex compliance
- Indeed, the reason that a choice of libraries is offered
- on a given target is because some of the
- ACATS tests for @w{Annex D} fail using the native threads library.
- As far as possible, this library is implemented
- in accordance with Ada semantics (e.g., modifying priorities as required
- to simulate ceiling locking),
- but there are often slight inaccuracies, most often in the area of
- absolutely respecting the priority rules on a single
- processor.
- Moreover, it is not possible in general to define the exact behavior,
- because the native threads implementations
- are not well enough documented.
- 
- On systems where the @code{SCHED_FIFO} POSIX scheduling policy is supported,
- @cindex POSIX scheduling policies
- @cindex @code{SCHED_FIFO} scheduling policy
- native threads will provide a behavior very close to the @w{Annex D}
- requirements (i.e., a run-till-blocked scheduler with fixed priorities), but
- on some systems (in particular GNU/Linux and Solaris), you need to have root
- privileges to use the @code{SCHED_FIFO} policy.
- 
- @item
- The @emph{FSU threads} library provides a completely accurate implementation
- of @w{Annex D}.
- Thus, operating with this library, GNAT is 100% compliant with both the core
- and all @w{Annex D}
- requirements.
- The formal validations for implementations offering
- a choice of threads packages are always carried out using the FSU
- threads option.
- @end itemize
- 
- @noindent
- From these considerations, it might seem that FSU threads are the
- better choice,
- but that is by no means always the case. The FSU threads package
- operates with all Ada tasks appearing to the system to be a single
- thread. This is often considerably more efficient than operating
- with separate threads, since for example, switching between tasks
- can be accomplished without the (in some cases considerable)
- overhead of a context switch between two system threads. However,
- it means that you may well lose concurrency at the system
- level. Notably, some system operations (such as I/O) may block all
- tasks in a program and not just the calling task. More
- significantly, the FSU threads approach likely means you cannot
- take advantage of multiple processors, since for this you need
- separate threads (or even separate processes) to operate on
- different processors.
- 
- For most programs, the native threads library is
- usually the better choice. Use the FSU threads if absolute
- conformance to @w{Annex D} is important for your application, or if
- you find that the improved efficiency of FSU threads is significant to you.
- 
- Note also that to take full advantage of Florist and Glade, it is highly
- recommended that you use native threads.
- 
- 
  @node Choosing the Scheduling Policy
  @section Choosing the Scheduling Policy
  
--- 21789,21809 ----
  Set the environment variables:
  
  @smallexample
! $ ADA_INCLUDE_PATH=$target/rts-sjlj/adainclude:$ADA_INCLUDE_PATH
! $ ADA_OBJECTS_PATH=$target/rts-sjlj/adalib:$ADA_OBJECTS_PATH
  $ export ADA_INCLUDE_PATH ADA_OBJECTS_PATH
  @end smallexample
  
  @item
! Use @option{-aI$target/rts-sjlj/adainclude}
! and @option{-aO$target/rts-sjlj/adalib}
  on the @command{gnatmake} command line
  
  @item
! Use the switch @option{--RTS}; e.g., @option{--RTS=sjlj}
  @cindex @option{--RTS} option
  @end itemize
  
  @node Choosing the Scheduling Policy
  @section Choosing the Scheduling Policy
  
*************** you should use @code{pragma Time_Slice} 
*** 20632,20639 ****
  value greater than @code{0.0}, or else use the corresponding @option{-T}
  binder option.
  
- 
- 
  @node Solaris-Specific Considerations
  @section Solaris-Specific Considerations
  @cindex Solaris Sparc threads libraries
--- 21842,21847 ----
*************** debugging 64-bit applications.
*** 20648,20660 ****
  * Building and Debugging 64-bit Applications::
  @end menu
  
- 
  @node Solaris Threads Issues
  @subsection Solaris Threads Issues
  
  @noindent
! Starting with version 3.14, GNAT under Solaris comes with a new tasking
! run-time library based on POSIX threads --- @emph{rts-pthread}.
  @cindex rts-pthread threads library
  This run-time library has the advantage of being mostly shared across all
  POSIX-compliant thread implementations, and it also provides under
--- 21856,21867 ----
  * Building and Debugging 64-bit Applications::
  @end menu
  
  @node Solaris Threads Issues
  @subsection Solaris Threads Issues
  
  @noindent
! GNAT under Solaris comes with an alternate tasking run-time library
! based on POSIX threads --- @emph{rts-pthread}.
  @cindex rts-pthread threads library
  This run-time library has the advantage of being mostly shared across all
  POSIX-compliant thread implementations, and it also provides under
*************** with respectively
*** 20672,20682 ****
  
  As explained above, the native run-time library is based on the Solaris thread
  library (@code{libthread}) and is the default library.
- The FSU run-time library is based on the FSU threads.
- @cindex FSU threads library
  
! Starting with Solaris 2.5.1, when the Solaris threads library is used
! (this is the default), programs
  compiled with GNAT can automatically take advantage of
  and can thus execute on multiple processors.
  The user can alternatively specify a processor on which the program should run
--- 21879,21886 ----
  
  As explained above, the native run-time library is based on the Solaris thread
  library (@code{libthread}) and is the default library.
  
! When the Solaris threads library is used (this is the default), programs
  compiled with GNAT can automatically take advantage of
  and can thus execute on multiple processors.
  The user can alternatively specify a processor on which the program should run
*************** Run the program on the specified process
*** 20702,20708 ****
  (where @code{_SC_NPROCESSORS_CONF} is a system variable).
  @end table
  
- 
  @node Building and Debugging 64-bit Applications
  @subsection Building and Debugging 64-bit Applications
  
--- 21906,21911 ----
*************** amounts to:
*** 20726,20733 ****
       $ gdb64 hello
  @end smallexample
  
- 
- 
  @node IRIX-Specific Considerations
  @section IRIX-Specific Considerations
  @cindex IRIX thread library
--- 21929,21934 ----
*************** See the @cite{GNAT Reference Manual} for
*** 20748,20754 ****
  The @emph{n32 ABI} compiler comes with a run-time library based on the
  kernel POSIX threads and thus does not have the limitations mentioned above.
  
- 
  @node Linux-Specific Considerations
  @section Linux-Specific Considerations
  @cindex Linux threads libraries
--- 21949,21954 ----
*************** compared to other native thread librarie
*** 20764,20770 ****
--- 21964,21987 ----
    e.g. by using @code{killpg()}.
  @end itemize
  
+ @node AIX-Specific Considerations
+ @section AIX-Specific Considerations
+ @cindex AIX resolver library
  
+ @noindent
+ On AIX, the resolver library initializes some internal structure on
+ the first call to @code{get*by*} functions, which are used to implement
+ @code{GNAT.Sockets.Get_Host_By_Name} and
+ @code{GNAT.Sockets.Get_Host_By_Addrss}.
+ If such initialization occurs within an Ada task, and the stack size for
+ the task is the default size, a stack overflow may occur.
+ 
+ To avoid this overflow, the user should either ensure that the first call
+ to @code{GNAT.Sockets.Get_Host_By_Name} or
+ @code{GNAT.Sockets.Get_Host_By_Addrss}
+ occurs in the environment task, or use @code{pragma Storage_Size} to
+ specify a sufficiently large size for the stack of the task that contains
+ this call.
  
  @c *******************************
  @node Example of Binder Output File
*************** This Appendix displays the source code f
*** 20775,20781 ****
  file generated for a simple ``Hello World'' program.
  Comments have been added for clarification purposes.
  
- 
  @smallexample @c adanocomment
  @iftex
  @leftskip=0cm
--- 21992,21997 ----
*************** and trace the elaboration routine for th
*** 21491,21497 ****
  the problem might be (more usually of course you would be debugging
  elaboration code in your own application).
  
- 
  @node Elaboration Order Handling in GNAT
  @appendix Elaboration Order Handling in GNAT
  @cindex Order of elaboration
--- 22707,22712 ----
*************** and in particular must have the capabili
*** 22421,22428 ****
  standard dynamic model of elaboration with run-time checks.
  
  In GNAT, this standard mode can be achieved either by the use of
! the @option{-gnatE} switch on the compiler (@code{gcc} or @code{gnatmake})
! command, or by the use of the configuration pragma:
  
  @smallexample @c ada
  pragma Elaboration_Checks (RM);
--- 23636,23643 ----
  standard dynamic model of elaboration with run-time checks.
  
  In GNAT, this standard mode can be achieved either by the use of
! the @option{-gnatE} switch on the compiler (@command{gcc} or
! @command{gnatmake}) command, or by the use of the configuration pragma:
  
  @smallexample @c ada
  pragma Elaboration_Checks (RM);
*************** difference, by looking at the two elabor
*** 23347,23353 ****
  and figuring out which is correct, and then adding the necessary
  @code{Elaborate_All} pragmas to ensure the desired order.
  
- 
  @node Inline Assembler
  @appendix Inline Assembler
  
--- 24562,24567 ----
*************** end Intel_CPU;
*** 24958,24965 ****
  @c END OF INLINE ASSEMBLER CHAPTER
  @c ===============================
  
- 
- 
  @c ***********************************
  @c * Compatibility and Porting Guide *
  @c ***********************************
--- 26172,26177 ----
*************** applications developed in other Ada envi
*** 24975,24983 ****
  @menu
  * Compatibility with Ada 83::
  * Implementation-dependent characteristics::
- * Compatibility with DEC Ada 83::
  * Compatibility with Other Ada 95 Systems::
  * Representation Clauses::
  @end menu
  
  @node Compatibility with Ada 83
--- 26187,26198 ----
  @menu
  * Compatibility with Ada 83::
  * Implementation-dependent characteristics::
  * Compatibility with Other Ada 95 Systems::
  * Representation Clauses::
+ * Compatibility with DEC Ada 83::
+ @ifset vms
+ * Transitioning from Alpha to Integrity OpenVMS::
+ @end ifset
  @end menu
  
  @node Compatibility with Ada 83
*************** include @code{pragma Interface} and the 
*** 25164,25170 ****
  (@code{Emax}, @code{Mantissa}, etc.), among other items.
  @end table
  
- 
  @node Implementation-dependent characteristics
  @section Implementation-dependent characteristics
  @noindent
--- 26379,26384 ----
*************** transition from certain Ada 83 compilers
*** 25185,25191 ****
  * Target-specific aspects::
  @end menu
  
- 
  @node Implementation-defined pragmas
  @subsection Implementation-defined pragmas
  
--- 26399,26404 ----
*************** incompatible with typical Ada 83 compile
*** 25283,25289 ****
  packing, the meaning of the Size attribute, and the size of access values.
  GNAT's approach to these issues is described in @ref{Representation Clauses}.
  
- 
  @node Compatibility with Other Ada 95 Systems
  @section Compatibility with Other Ada 95 Systems
  
--- 26496,26501 ----
*************** be implemented.  The description of prag
*** 25485,25491 ****
--- 26697,27088 ----
  indicates whether or not they are applicable to non-VMS systems.
  
  
+ @ifset vms
+ @node Transitioning from Alpha to Integrity OpenVMS
+ @section Transitioning from Alpha to Integrity OpenVMS
+ 
+ @menu
+ * Introduction to transitioning::
+ * Migration of 32 bit code::
+ * Taking advantage of 64 bit addressing::
+ * Technical details::
+ @end menu
+ 
+ @node Introduction to transitioning
+ @subsection Introduction to transitioning
+ 
+ @noindent
+ This guide is meant to assist users of GNAT Pro
+ for Alpha OpenVMS who are planning to transition to the IA64 architecture.
+ GNAT Pro for Open VMS Integrity has been designed to meet
+ three main goals:
+ 
+ @enumerate
+ @item
+ Providing a full conforming implementation of the Ada 95 language
+ 
+ @item
+ Allowing maximum backward compatibility, thus easing migration of existing
+ Ada source code
+ 
+ @item
+ Supplying a path for exploiting the full IA64 address range
+ @end enumerate
+ 
+ @noindent
+ Ada's strong typing semantics has made it
+ impractical to have different 32-bit and 64-bit modes. As soon as
+ one object could possibly be outside the 32-bit address space, this
+ would make it necessary for the @code{System.Address} type to be 64 bits.
+ In particular, this would cause inconsistencies if 32-bit code is
+ called from 64-bit code that raises an exception.
+ 
+ This issue has been resolved by always using 64-bit addressing
+ at the system level, but allowing for automatic conversions between
+ 32-bit and 64-bit addresses where required. Thus users who
+ do not currently require 64-bit addressing capabilities, can
+ recompile their code with only minimal changes (and indeed
+ if the code is written in portable Ada, with no assumptions about
+ the size of the @code{Address} type, then no changes at all are necessary).
+ At the same time,
+ this approach provides a simple, gradual upgrade path to future
+ use of larger memories than available for 32-bit systems.
+ Also, newly written applications or libraries will by default
+ be fully compatible with future systems exploiting 64-bit
+ addressing capabilities present in IA64.
+ 
+ @ref{Migration of 32 bit code}, will focus on porting applications
+ that do not require more than 2 GB of
+ addressable memory. This code will be referred to as
+ @emph{32-bit code}.
+ For applications intending to exploit the full ia64 address space,
+ @ref{Taking advantage of 64 bit addressing},
+ will consider further changes that may be required.
+ Such code is called @emph{64-bit code} in the
+ remainder of this guide.
+ 
+ 
+ @node Migration of 32 bit code
+ @subsection Migration of 32-bit code
+ 
+ @menu
+ * Address types::
+ * Access types::
+ * Unchecked conversions::
+ * Predefined constants::
+ * Single source compatibility::
+ * Experience with source compatibility::
+ @end menu
+ 
+ @node Address types
+ @subsubsection Address types
+ 
+ @noindent
+ To solve the problem of mixing 64-bit and 32-bit addressing,
+ while maintaining maximum backward compatibility, the following
+ approach has been taken:
+ 
+ @itemize @bullet
+ @item
+ @code{System.Address} always has a size of 64 bits
+ 
+ @item
+ @code{System.Short_Address} is a 32-bit subtype of @code{System.Address}
+ @end itemize
+ 
+ 
+ @noindent
+ Since @code{System.Short_Address} is a subtype of @code{System.Address},
+ a @code{Short_Address}
+ may be used where an @code{Address} is required, and vice versa, without
+ needing explicit type conversions.
+ By virtue of the Open VMS Integrity parameter passing conventions,
+ even imported
+ and exported subprograms that have 32-bit address parameters are
+ compatible with those that have 64-bit address parameters.
+ (See @ref{Making code 64 bit clean} for details.)
+ 
+ The areas that may need attention are those where record types have
+ been defined that contain components of the type @code{System.Address}, and
+ where objects of this type are passed to code expecting a record layout with
+ 32-bit addresses.
+ 
+ Different compilers on different platforms cannot be
+ expected to represent the same type in the same way,
+ since alignment constraints
+ and other system-dependent properties affect the compiler's decision.
+ For that reason, Ada code
+ generally uses representation clauses to specify the expected
+ layout where required.
+ 
+ If such a representation clause uses 32 bits for a component having
+ the type @code{System.Address}, GNAT Pro for OpenVMS Integrity will detect
+ that error and produce a specific diagnostic message.
+ The developer should then determine whether the representation
+ should be 64 bits or not and make either of two changes:
+ change the size to 64 bits and leave the type as @code{System.Address}, or
+ leave the size as 32 bits and change the type to @code{System.Short_Address}.
+ Since @code{Short_Address} is a subtype of @code{Address}, no changes are
+ required in any code setting or accessing the field; the compiler will
+ automatically perform any needed conversions between address
+ formats.
+ 
+ @node Access types
+ @subsubsection Access types
+ 
+ @noindent
+ By default, objects designated by access values are always
+ allocated in the 32-bit
+ address space. Thus legacy code will never contain
+ any objects that are not addressable with 32-bit addresses, and
+ the compiler will never raise exceptions as result of mixing
+ 32-bit and 64-bit addresses.
+ 
+ However, the access values themselves are represented in 64 bits, for optimum
+ performance and future compatibility with 64-bit code. As was
+ the case with @code{System.Address}, the compiler will give an error message
+ if an object or record component has a representation clause that
+ requires the access value to fit in 32 bits. In such a situation,
+ an explicit size clause for the access type, specifying 32 bits,
+ will have the desired effect.
+ 
+ General access types (declared with @code{access all}) can never be
+ 32 bits, as values of such types must be able to refer to any object
+ of the  designated type,
+ including objects residing outside the 32-bit address range.
+ Existing Ada 83 code will not contain such type definitions,
+ however, since general access types were introduced in Ada 95.
+ 
+ @node Unchecked conversions
+ @subsubsection Unchecked conversions
+ 
+ @noindent
+ In the case of an @code{Unchecked_Conversion} where the source type is a
+ 64-bit access type or the type @code{System.Address}, and the target
+ type is a 32-bit type, the compiler will generate a warning.
+ Even though the generated code will still perform the required
+ conversions, it is highly recommended in these cases to use
+ respectively a 32-bit access type or @code{System.Short_Address}
+ as the source type.
+ 
+ @node Predefined constants
+ @subsubsection Predefined constants
+ 
+ @noindent
+ The following predefined constants have changed:
+ 
+ @multitable {@code{System.Address_Size}} {2**32} {2**64}
+ @item   @b{Constant}               @tab @b{Old} @tab @b{New}
+ @item   @code{System.Word_Size}    @tab 32      @tab 64
+ @item   @code{System.Memory_Size}  @tab 2**32   @tab 2**64
+ @item   @code{System.Address_Size} @tab 32      @tab 64
+ @end multitable
+ 
+ @noindent
+ If you need to refer to the specific
+ memory size of a 32-bit implementation, instead of the
+ actual memory size, use @code{System.Short_Memory_Size}
+ rather than @code{System.Memory_Size}.
+ Similarly, references to @code{System.Address_Size} may need
+ to be replaced by @code{System.Short_Address'Size}.
+ The program @command{gnatfind} may be useful for locating
+ references to the above constants, so that you can verify that they
+ are still correct.
+ 
+ @node Single source compatibility
+ @subsubsection Single source compatibility
+ 
+ @noindent
+ In order to allow the same source code to be compiled on
+ both Alpha and IA64 platforms, GNAT Pro for Alpha/OpenVMS
+ defines @code{System.Short_Address} and System.Short_Memory_Size
+ as aliases of respectively @code{System.Address} and
+ @code{System.Memory_Size}.
+ (These aliases also leave the door open for a possible
+ future ``upgrade'' of OpenVMS Alpha to a 64-bit address space.)
+ 
+ @node Experience with source compatibility
+ @subsubsection Experience with source compatibility
+ 
+ @noindent
+ The Security Server and STARLET provide an interesting ``test case''
+ for source compatibility issues, since it is in such system code
+ where assumptions about @code{Address} size might be expected to occur.
+ Indeed, there were a small number of occasions in the Security Server
+ file @file{jibdef.ads}
+ where a representation clause for a record type specified
+ 32 bits for a component of type @code{Address}.
+ All of these errors were detected by the compiler.
+ The repair was obvious and immediate; to simply replace @code{Address} by
+ @code{Short_Address}.
+ 
+ In the case of STARLET, there were several record types that should
+ have had representation clauses but did not.  In these record types
+ there was an implicit assumption that an @code{Address} value occupied
+ 32 bits.
+ These compiled without error, but their usage resulted in run-time error
+ returns from STARLET system calls.
+ To assist in the compile-time detection of such situations, we
+ plan to include a switch to generate a warning message when a
+ record component is of type @code{Address}.
+ 
+ 
+ @c ****************************************
+ @node Taking advantage of 64 bit addressing
+ @subsection Taking advantage of 64-bit addressing
+ 
+ @menu
+ * Making code 64 bit clean::
+ * Allocating memory from the 64 bit storage pool::
+ * Restrictions on use of 64 bit objects::
+ * Using 64 bit storage pools by default::
+ * General access types::
+ * STARLET and other predefined libraries::
+ @end menu
+ 
+ @node Making code 64 bit clean
+ @subsubsection Making code 64-bit clean
+ 
+ @noindent
+ In order to prevent problems that may occur when (parts of) a
+ system start using memory outside the 32-bit address range,
+ we recommend some additional guidelines:
+ 
+ @itemize @bullet
+ @item
+ For imported subprograms that take parameters of the
+ type @code{System.Address}, ensure that these subprograms can
+ indeed handle 64-bit addresses. If not, or when in doubt,
+ change the subprogram declaration to specify
+ @code{System.Short_Address} instead.
+ 
+ @item
+ Resolve all warnings related to size mismatches in
+ unchecked conversions. Failing to do so causes
+ erroneous execution if the source object is outside
+ the 32-bit address space.
+ 
+ @item
+ (optional) Explicitly use the 32-bit storage pool
+ for access types used in a 32-bit context, or use
+ generic access types where possible
+ (@pxref{Restrictions on use of 64 bit objects}).
+ @end itemize
+ 
+ @noindent
+ If these rules are followed, the compiler will automatically insert
+ any necessary checks to ensure that no addresses or access values
+ passed to 32-bit code ever refer to objects outside the 32-bit
+ address range.
+ Any attempt to do this will raise @code{Constraint_Error}.
+ 
+ @node Allocating memory from the 64 bit storage pool
+ @subsubsection Allocating memory from the 64-bit storage pool
+ 
+ @noindent
+ For any access type @code{T} that potentially requires memory allocations
+ beyond the 32-bit address space,
+ use the following representation clause:
+ 
+ @smallexample @c ada
+    for T'Storage_Pool use System.Pool_64;
+ @end smallexample
+ 
+ 
+ @node Restrictions on use of 64 bit objects
+ @subsubsection Restrictions on use of 64-bit objects
+ 
+ @noindent
+ Taking the address of an object allocated from a 64-bit storage pool,
+ and then passing this address to a subprogram expecting
+ @code{System.Short_Address},
+ or assigning it to a variable of type @code{Short_Address}, will cause
+ @code{Constraint_Error} to be raised. In case the code is not 64-bit clean
+ (@pxref{Making code 64 bit clean}), or checks are suppressed,
+ no exception is raised and execution
+ will become erroneous.
+ 
+ @node Using 64 bit storage pools by default
+ @subsubsection Using 64-bit storage pools by default
+ 
+ @noindent
+ In some cases it may be desirable to have the compiler allocate
+ from 64-bit storage pools by default. This may be the case for
+ libraries that are 64-bit clean, but may be used in both 32-bit
+ and 64-bit contexts. For these cases the following configuration
+ pragma may be specified:
+ 
+ @smallexample @c ada
+   pragma Pool_64_Default;
+ @end smallexample
+ 
+ @noindent
+ Any code compiled in the context of this pragma will by default
+ use the @code{System.Pool_64} storage pool. This default may be overridden
+ for a specific access type @code{T} by the representation clause:
+ 
+ @smallexample @c ada
+    for T'Storage_Pool use System.Pool_32;
+ @end smallexample
+ 
+ @noindent
+ Any object whose address may be passed to a subprogram with a
+ @code{Short_Address} argument, or assigned to a variable of type
+ @code{Short_Address}, needs to be allocated from this pool.
+ 
+ @node General access types
+ @subsubsection General access types
+ 
+ @noindent
+ Objects designated by access values from a
+ general access type (declared with @code{access all}) are never allocated
+ from a 64-bit storage pool. Code that uses general access types will
+ accept objects allocated in either 32-bit or 64-bit address spaces,
+ but never allocate objects outside the 32-bit address space.
+ Using general access types ensures maximum compatibility with both
+ 32-bit and 64-bit code.
+ 
+ 
+ @node STARLET and other predefined libraries
+ @subsubsection STARLET and other predefined libraries
+ 
+ @noindent
+ All code that comes as part of GNAT is 64-bit clean, but the
+ restrictions given in @ref{Restrictions on use of 64 bit objects},
+ still apply. Look at the package
+ specifications to see in which contexts objects allocated
+ in 64-bit address space are acceptable.
+ 
+ @node Technical details
+ @subsection Technical details
  
+ @noindent
+ GNAT Pro for Open VMS Integrity takes advantage of the freedom given in the Ada
+ standard with respect to the type of @code{System.Address}. Previous versions
+ of GNAT Pro have defined this type as private and implemented it as
+ a modular type.
+ 
+ In order to allow defining @code{System.Short_Address} as a proper subtype,
+ and to match the implicit sign extension in parameter passing,
+ in GNAT Pro for Open VMS Integrity, @code{System.Address} is defined as a
+ visible (i.e., non-private) integer type.
+ Standard operations on the type, such as the binary operators ``+'', ``-'',
+ etc., that take @code{Address} operands and return an @code{Address} result,
+ have been hidden by declaring these
+ @code{abstract}, an Ada 95 feature that helps avoid the potential ambiguities
+ that would otherwise result from overloading.
+ (Note that, although @code{Address} is a visible integer type,
+ good programming practice dictates against exploiting the type's
+ integer properties such as literals, since this will compromise
+ code portability.)
+ 
+ Defining @code{Address} as a visible integer type helps achieve
+ maximum compatibility for existing Ada code,
+ without sacrificing the capabilities of the IA64 architecture.
+ @end ifset
+ 
+ 
+ @c ************************************************
  @ifset unw
  @node Microsoft Windows Topics
  @appendix Microsoft Windows Topics
*************** indicates whether or not they are applic
*** 25495,25501 ****
  
  @noindent
  This chapter describes topics that are specific to the Microsoft Windows
! platforms (NT, 95 and 98).
  
  @menu
  * Using GNAT on Windows::
--- 27092,27098 ----
  
  @noindent
  This chapter describes topics that are specific to the Microsoft Windows
! platforms (NT, 2000, and XP Professional).
  
  @menu
  * Using GNAT on Windows::
*************** platforms (NT, 95 and 98).
*** 25507,25512 ****
--- 27104,27111 ----
  * Introduction to Dynamic Link Libraries (DLLs)::
  * Using DLLs with GNAT::
  * Building DLLs with GNAT::
+ * Building DLLs with GNAT Project files::
+ * Building DLLs with gnatdll::
  * GNAT and Windows Resources::
  * Debugging a DLL::
  * GNAT and COM/DCOM Objects::
*************** platforms (NT, 95 and 98).
*** 25517,25523 ****
  
  @noindent
  One of the strengths of the GNAT technology is that its tool set
! (@code{gcc}, @code{gnatbind}, @code{gnatlink}, @code{gnatmake}, the
  @code{gdb} debugger, etc.) is used in the same way regardless of the
  platform.
  
--- 27116,27122 ----
  
  @noindent
  One of the strengths of the GNAT technology is that its tool set
! (@command{gcc}, @command{gnatbind}, @command{gnatlink}, @command{gnatmake}, the
  @code{gdb} debugger, etc.) is used in the same way regardless of the
  platform.
  
*************** calls certain Win32 routines that set th
*** 25562,25567 ****
--- 27161,27187 ----
  success. It should be possible to use @code{GetLastError} and
  @code{SetLastError} when tasking, protected record, and exception
  features are not used, but it is not guaranteed to work.
+ 
+ @item
+ It is not possible to link against Microsoft libraries except for
+ import libraries. The library must be built to be compatible with
+ @file{MSVCRT.LIB} (/MD Microsoft compiler option), @file{LIBC.LIB} and
+ @file{LIBCMT.LIB} (/ML or /MT Microsoft compiler options) are known to
+ not be compatible with the GNAT runtime. Even if the library is
+ compatible with @file{MSVCRT.LIB} it is not guaranteed to work.
+ 
+ @item
+ When the compilation environment is located on FAT32 drives, users may
+ experience recompilations of the source files that have not changed if
+ Daylight Saving Time (DST) state has changed since the last time files
+ were compiled. NTFS drives do not have this problem.
+ 
+ @item
+ No components of the GNAT toolset use any entries in the Windows
+ registry. The only entries that can be created are file associations and
+ PATH settings, provided the user has chosen to create them at installation
+ time, as well as some minimal book-keeping information needed to correctly
+ uninstall or integrate different GNAT products.
  @end itemize
  
  @node Using a network installation of GNAT
*************** application that contains a mix of Ada a
*** 25637,25643 ****
  Windows C/C++ development environment conditions your overall
  interoperability strategy.
  
! If you use @code{gcc} to compile the non-Ada part of your application,
  there are no Windows-specific restrictions that affect the overall
  interoperability with your Ada code. If you plan to use
  Microsoft tools (e.g. Microsoft Visual C/C++), you should be aware of
--- 27257,27263 ----
  Windows C/C++ development environment conditions your overall
  interoperability strategy.
  
! If you use @command{gcc} to compile the non-Ada part of your application,
  there are no Windows-specific restrictions that affect the overall
  interoperability with your Ada code. If you plan to use
  Microsoft tools (e.g. Microsoft Visual C/C++), you should be aware of
*************** are available for Windows:
*** 25713,25719 ****
  
  @noindent
  This is the default calling convention used when interfacing to C/C++
! routines compiled with either @code{gcc} or Microsoft Visual C++.
  
  In the @code{C} calling convention subprogram parameters are pushed on the
  stack by the caller from right to left. The caller itself is in charge of
--- 27333,27339 ----
  
  @noindent
  This is the default calling convention used when interfacing to C/C++
! routines compiled with either @command{gcc} or Microsoft Visual C++.
  
  In the @code{C} calling convention subprogram parameters are pushed on the
  stack by the caller from right to left. The caller itself is in charge of
*************** added at the end of the @code{Link_Name}
*** 25820,25827 ****
  Note, that in some special cases a DLL's entry point name lacks a trailing
  @code{@@}@code{@i{nn}} while the exported name generated for a call has it.
  The @code{gnatdll} tool, which creates the import library for the DLL, is able
! to handle those cases (see the description of the switches in
! @pxref{Using gnatdll} section).
  
  @node DLL Calling Convention
  @subsection @code{DLL} Calling Convention
--- 27440,27447 ----
  Note, that in some special cases a DLL's entry point name lacks a trailing
  @code{@@}@code{@i{nn}} while the exported name generated for a call has it.
  The @code{gnatdll} tool, which creates the import library for the DLL, is able
! to handle those cases (@pxref{Using gnatdll} for the description of
! the switches).
  
  @node DLL Calling Convention
  @subsection @code{DLL} Calling Convention
*************** slower since, as you will understand bel
*** 25866,25878 ****
  
  To illustrate the remainder of this section, suppose that an application
  wants to use the services of a DLL @file{API.dll}. To use the services
! provided by @file{API.dll} you must statically link against an import
! library which contains a jump table with an entry for each routine and
! variable exported by the DLL. In the Microsoft world this import library is
! called @file{API.lib}. When using GNAT this import library is called either
! @file{libAPI.a} or @file{libapi.a} (names are case insensitive).
  
! After you have statically linked your application with the import library
  and you run your application, here is what happens:
  
  @enumerate
--- 27486,27499 ----
  
  To illustrate the remainder of this section, suppose that an application
  wants to use the services of a DLL @file{API.dll}. To use the services
! provided by @file{API.dll} you must statically link against the DLL or
! an import library which contains a jump table with an entry for each
! routine and variable exported by the DLL. In the Microsoft world this
! import library is called @file{API.lib}. When using GNAT this import
! library is called either @file{libAPI.a} or @file{libapi.a} (names are
! case insensitive).
  
! After you have linked your application with the DLL or the import library
  and you run your application, here is what happens:
  
  @enumerate
*************** routines and routines in the application
*** 25900,25908 ****
  @end itemize
  
  @item
! The entries in the @file{libAPI.a} or @file{API.lib} jump table which is
! part of your application are initialized with the addresses of the routines
! and variables in @file{API.dll}.
  
  @item
  If present in @file{API.dll}, routines @code{DllMain} or
--- 27521,27530 ----
  @end itemize
  
  @item
! The entries in the jump table (from the import library @file{libAPI.a}
! or @file{API.lib} or automatically created when linking against a DLL)
! which is part of your application are initialized with the addresses
! of the routines and variables in @file{API.dll}.
  
  @item
  If present in @file{API.dll}, routines @code{DllMain} or
*************** still be relocated.
*** 25927,25934 ****
  As a side note, an interesting difference between Microsoft DLLs and
  Unix shared libraries, is the fact that on most Unix systems all public
  routines are exported by default in a Unix shared library, while under
! Windows the exported routines must be listed explicitly in a definition
! file (@pxref{The Definition File}).
  
  @node Using DLLs with GNAT
  @section Using DLLs with GNAT
--- 27549,27556 ----
  As a side note, an interesting difference between Microsoft DLLs and
  Unix shared libraries, is the fact that on most Unix systems all public
  routines are exported by default in a Unix shared library, while under
! Windows it is possible (but not required) to list exported routines in
! a definition file (@pxref{The Definition File}).
  
  @node Using DLLs with GNAT
  @section Using DLLs with GNAT
*************** The import library (@file{libAPI.a} or @
*** 25953,25959 ****
  mentioned an import library is a statically linked library containing the
  import table which will be filled at load time to point to the actual
  @file{API.dll} routines. Sometimes you don't have an import library for the
! DLL you want to use. The following sections will explain how to build one.
  
  @item
  The actual DLL, @file{API.dll}.
--- 27575,27582 ----
  mentioned an import library is a statically linked library containing the
  import table which will be filled at load time to point to the actual
  @file{API.dll} routines. Sometimes you don't have an import library for the
! DLL you want to use. The following sections will explain how to build
! one. Note that this is optional.
  
  @item
  The actual DLL, @file{API.dll}.
*************** $ gnatmake my_ada_app -largs -lAPI
*** 25969,25975 ****
  @end smallexample
  
  @noindent
! The argument @option{-largs -lAPI} at the end of the @code{gnatmake} command
  tells the GNAT linker to look first for a library named @file{API.lib}
  (Microsoft-style name) and if not found for a library named @file{libAPI.a}
  (GNAT-style name). Note that if the Ada package spec for @file{API.dll}
--- 27592,27598 ----
  @end smallexample
  
  @noindent
! The argument @option{-largs -lAPI} at the end of the @command{gnatmake} command
  tells the GNAT linker to look first for a library named @file{API.lib}
  (Microsoft-style name) and if not found for a library named @file{libAPI.a}
  (GNAT-style name). Note that if the Ada package spec for @file{API.dll}
*************** pragma Linker_Options ("-lAPI");
*** 25980,25987 ****
  @end smallexample
  
  @noindent
! you do not have to add @option{-largs -lAPI} at the end of the @code{gnatmake}
! command.
  
  If any one of the items above is missing you will have to create it
  yourself. The following sections explain how to do so using as an
--- 27603,27610 ----
  @end smallexample
  
  @noindent
! you do not have to add @option{-largs -lAPI} at the end of the
! @command{gnatmake} command.
  
  If any one of the items above is missing you will have to create it
  yourself. The following sections explain how to do so using as an
*************** subprograms, the @code{DLL} convention i
*** 26048,26054 ****
  @noindent
  If a Microsoft-style import library @file{API.lib} or a GNAT-style
  import library @file{libAPI.a} is available with @file{API.dll} you
! can skip this section. Otherwise read on.
  
  @node The Definition File
  @subsubsection The Definition File
--- 27671,27679 ----
  @noindent
  If a Microsoft-style import library @file{API.lib} or a GNAT-style
  import library @file{libAPI.a} is available with @file{API.dll} you
! can skip this section. You can also skip this section if
! @file{API.dll} is built with GNU tools as in this case it is possible
! to link directly against the DLL. Otherwise read on.
  
  @node The Definition File
  @subsubsection The Definition File
*************** $ dll2def API.dll > API.def
*** 26129,26135 ****
  to standard output the list of entry points in the DLL. Note that if
  some routines in the DLL have the @code{Stdcall} convention
  (@pxref{Windows Calling Conventions}) with stripped @code{@@}@i{nn}
! suffix then you'll have to edit @file{api.def} to add it.
  
  @noindent
  Here are some hints to find the right @code{@@}@i{nn} suffix.
--- 27754,27761 ----
  to standard output the list of entry points in the DLL. Note that if
  some routines in the DLL have the @code{Stdcall} convention
  (@pxref{Windows Calling Conventions}) with stripped @code{@@}@i{nn}
! suffix then you'll have to edit @file{api.def} to add it, and specify
! @code{-k} to @code{gnatdll} when creating the import library.
  
  @noindent
  Here are some hints to find the right @code{@@}@i{nn} suffix.
*************** See the Microsoft documentation for furt
*** 26212,26217 ****
--- 27838,27912 ----
  @section Building DLLs with GNAT
  @cindex DLLs, building
  
+ @noindent
+ This section explain how to build DLLs using the GNAT built-in DLL
+ support. With the following procedure it is straight forward to build
+ and use DLLs with GNAT.
+ 
+ @enumerate
+ 
+ @item building object files
+ 
+ The first step is to build all objects files that are to be included
+ into the DLL. This is done by using the standard @command{gnatmake} tool.
+ 
+ @item building the DLL
+ 
+ To build the DLL you must use @command{gcc}'s @code{-shared}
+ option. It is quite simple to use this method:
+ 
+ @smallexample
+ $ gcc -shared -o api.dll obj1.o obj2.o ...
+ @end smallexample
+ 
+ It is important to note that in this case all symbols found in the
+ object files are automatically exported. It is possible to restrict
+ the set of symbols to export by passing to @command{gcc} a definition
+ file, @pxref{The Definition File}. For example:
+ 
+ @smallexample
+ $ gcc -shared -o api.dll api.def obj1.o obj2.o ...
+ @end smallexample
+ 
+ If you use a definition file you must export the elaboration procedures
+ for every package that required one. Elaboration procedures are named
+ using the package name followed by "_E".
+ 
+ @item preparing DLL to be used
+ 
+ For the DLL to be used by client programs the bodies must be hidden
+ from it and the .ali set with read-only attribute. This is very important
+ otherwise GNAT will recompile all packages and will not actually use
+ the code in the DLL. For example:
+ 
+ @smallexample
+ $ mkdir apilib
+ $ copy *.ads *.ali api.dll apilib
+ $ attrib +R apilib\*.ali
+ @end smallexample
+ 
+ @end enumerate
+ 
+ At this point it is possible to use the DLL by directly linking
+ against it. Note that you must use the GNAT shared runtime when using
+ GNAT shared libraries. This is achieved by using @code{-shared} binder's
+ option.
+ 
+ @smallexample
+ $ gnatmake main -Iapilib -bargs -shared -largs -Lapilib -lAPI
+ @end smallexample
+ 
+ @node Building DLLs with GNAT Project files
+ @section Building DLLs with GNAT Project files
+ @cindex DLLs, building
+ 
+ @noindent
+ There is nothing specific to Windows in this area. @pxref{Library Projects}.
+ 
+ @node Building DLLs with gnatdll
+ @section Building DLLs with gnatdll
+ @cindex DLLs, building
+ 
  @menu
  * Limitations When Using Ada DLLs from Ada::
  * Exporting Ada Entities::
*************** See the Microsoft documentation for furt
*** 26223,26230 ****
  @end menu
  
  @noindent
! This section explains how to build DLLs containing Ada code. These DLLs
! will be referred to as Ada DLLs in the remainder of this section.
  
  The steps required to build an Ada DLL that is to be used by Ada as well as
  non-Ada applications are as follows:
--- 27918,27930 ----
  @end menu
  
  @noindent
! Note that it is prefered to use the built-in GNAT DLL support
! (@pxref{Building DLLs with GNAT}) or GNAT Project files
! (@pxref{Building DLLs with GNAT Project files}) to build DLLs.
! 
! This section explains how to build DLLs containing Ada code using
! @code{gnatdll}. These DLLs will be referred to as Ada DLLs in the
! remainder of this section.
  
  The steps required to build an Ada DLL that is to be used by Ada as well as
  non-Ada applications are as follows:
*************** skip this step if you plan to use the Ad
*** 26238,26251 ****
  
  @item
  Your Ada code must export an initialization routine which calls the routine
! @code{adainit} generated by @code{gnatbind} to perform the elaboration of
  the Ada code in the DLL (@pxref{Ada DLLs and Elaboration}). The initialization
  routine exported by the Ada DLL must be invoked by the clients of the DLL
  to initialize the DLL.
  
  @item
  When useful, the DLL should also export a finalization routine which calls
! routine @code{adafinal} generated by @code{gnatbind} to perform the
  finalization of the Ada code in the DLL (@pxref{Ada DLLs and Finalization}).
  The finalization routine exported by the Ada DLL must be invoked by the
  clients of the DLL when the DLL services are no further needed.
--- 27938,27951 ----
  
  @item
  Your Ada code must export an initialization routine which calls the routine
! @code{adainit} generated by @command{gnatbind} to perform the elaboration of
  the Ada code in the DLL (@pxref{Ada DLLs and Elaboration}). The initialization
  routine exported by the Ada DLL must be invoked by the clients of the DLL
  to initialize the DLL.
  
  @item
  When useful, the DLL should also export a finalization routine which calls
! routine @code{adafinal} generated by @command{gnatbind} to perform the
  finalization of the Ada code in the DLL (@pxref{Ada DLLs and Finalization}).
  The finalization routine exported by the Ada DLL must be invoked by the
  clients of the DLL when the DLL services are no further needed.
*************** Finally you must use @code{gnatdll} to p
*** 26263,26268 ****
--- 27963,27973 ----
  library (@pxref{Using gnatdll}).
  @end enumerate
  
+ @noindent
+ Note that a relocatable DLL stripped using the @code{strip} binutils
+ tool will not be relocatable anymore. To build a DLL without debug
+ information pass @code{-largs -s} to @code{gnatdll}.
+ 
  @node Limitations When Using Ada DLLs from Ada
  @subsection Limitations When Using Ada DLLs from Ada
  
*************** package body API is
*** 26382,26388 ****
           Fact := Fact * K;
        end loop;
        return Fact;
!       end Factorial;
  
     ...
     --  The remainder of this package body is unchanged.
--- 28087,28093 ----
           Fact := Fact * K;
        end loop;
        return Fact;
!    end Factorial;
  
     ...
     --  The remainder of this package body is unchanged.
*************** object files needed to build the DLL.
*** 26624,26633 ****
  @item -k
  @cindex @option{-k} (@code{gnatdll})
  Removes the @code{@@}@i{nn} suffix from the import library's exported
! names. You must specified this option if you want to use a
! @code{Stdcall} function in a DLL for which the @code{@@}@i{nn} suffix
! has been removed. This is the case for most of the Windows NT DLL for
! example. This option has no effect when @option{-n} option is specified.
  
  @item -l @var{file}
  @cindex @option{-l} (@code{gnatdll})
--- 28329,28339 ----
  @item -k
  @cindex @option{-k} (@code{gnatdll})
  Removes the @code{@@}@i{nn} suffix from the import library's exported
! names, but keeps them for the link names. You must specify this
! option if you want to use a @code{Stdcall} function in a DLL for which
! the @code{@@}@i{nn} suffix has been removed. This is the case for most
! of the Windows NT DLL for example. This option has no effect when
! @option{-n} option is specified.
  
  @item -l @var{file}
  @cindex @option{-l} (@code{gnatdll})
*************** $ gnatlink api -o api.jnk -mdll -Wl,--ba
*** 26708,26716 ****
  @end smallexample
  
  @noindent
! In addition to the base file, the @code{gnatlink} command generates an
  output file @file{api.jnk} which can be discarded. The @option{-mdll} switch
! asks @code{gnatlink} to generate the routines @code{DllMain} and
  @code{DllMainCRTStartup} that are called by the Windows loader when the DLL
  is loaded into memory.
  
--- 28414,28422 ----
  @end smallexample
  
  @noindent
! In addition to the base file, the @command{gnatlink} command generates an
  output file @file{api.jnk} which can be discarded. The @option{-mdll} switch
! asks @command{gnatlink} to generate the routines @code{DllMain} and
  @code{DllMainCRTStartup} that are called by the Windows loader when the DLL
  is loaded into memory.
  
*************** $ dlltool --dllname api.dll --def api.de
*** 26729,26736 ****
  
  @item
  @code{gnatdll} builds the base file using the new export table. Note that
! @code{gnatbind} must be called once again since the binder generated file
! has been deleted during the previous call to @code{gnatlink}.
  
  @smallexample
  @group
--- 28435,28442 ----
  
  @item
  @code{gnatdll} builds the base file using the new export table. Note that
! @command{gnatbind} must be called once again since the binder generated file
! has been deleted during the previous call to @command{gnatlink}.
  
  @smallexample
  @group
*************** $ windres -i myres.rc -o myres.o
*** 26899,26905 ****
  @end smallexample
  
  @noindent
! By default @code{windres} will run @code{gcc} to preprocess the @file{.rc}
  file. You can specify an alternate preprocessor (usually named
  @file{cpp.exe}) using the @code{windres} @option{--preprocessor}
  parameter. A list of all possible options may be obtained by entering
--- 28605,28611 ----
  @end smallexample
  
  @noindent
! By default @code{windres} will run @command{gcc} to preprocess the @file{.rc}
  file. You can specify an alternate preprocessor (usually named
  @file{cpp.exe}) using the @code{windres} @option{--preprocessor}
  parameter. A list of all possible options may be obtained by entering
*************** $ windres -i myres.res -o myres.o
*** 26922,26928 ****
  @noindent
  To include the resource file in your program just add the
  GNAT-compatible object file for the resource(s) to the linker
! arguments. With @code{gnatmake} this is done by using the @option{-largs}
  option:
  
  @smallexample
--- 28628,28634 ----
  @noindent
  To include the resource file in your program just add the
  GNAT-compatible object file for the resource(s) to the linker
! arguments. With @command{gnatmake} this is done by using the @option{-largs}
  option:
  
  @smallexample
*************** At this stage a breakpoint is set inside
*** 27011,27016 ****
--- 28717,28758 ----
  you can use the standard approach to debug the whole program
  (@pxref{Running and Debugging Ada Programs}).
  
+ To break on the @code{DllMain} routine it is not possible to follow
+ the procedure above. At the time the program stop on @code{ada_main}
+ the @code{DllMain} routine as already been called. Either you can use
+ the procedure below @pxref{Debugging the DLL Directly} or this procedure:
+ 
+ @enumerate 1
+ @item Launch @code{GDB} on the main program.
+ 
+ @smallexample
+ $ gdb -nw ada_main
+ @end smallexample
+ 
+ @item Load DLL symbols
+ 
+ @smallexample
+ (gdb) add-sym api.dll
+ @end smallexample
+ 
+ @item Set a breakpoint inside the DLL
+ 
+ @smallexample
+ (gdb) break ada_dll.adb:45
+ @end smallexample
+ 
+ Note that at this point it is not possible to break using the routine symbol
+ directly as the program is not yet running. The solution is to break
+ on the proper line (break in @file{ada_dll.adb} line 45).
+ 
+ @item Start the program
+ 
+ @smallexample
+ (gdb) run
+ @end smallexample
+ 
+ @end enumerate
+ 
  @node Program Built with Foreign Tools and DLL Built with GCC/GNAT
  @subsection Program Built with Foreign Tools and DLL Built with GCC/GNAT
  
*************** $ gdb -nw test.dll
*** 27052,27060 ****
  @item Set a breakpoint on a DLL subroutine.
  
  @smallexample
! (gdb) break ada_dll
  @end smallexample
  
  @item
  Specify the executable file to @code{GDB}.
  
--- 28794,28806 ----
  @item Set a breakpoint on a DLL subroutine.
  
  @smallexample
! (gdb) break ada_dll.adb:45
  @end smallexample
  
+ Note that at this point it is not possible to break using the routine symbol
+ directly as the program is not yet running. The solution is to break
+ on the proper line (break in @file{ada_dll.adb} line 45).
+ 
  @item
  Specify the executable file to @code{GDB}.
  
*************** This section is temporarily left blank.
*** 27149,27155 ****
  
  @end ifset
  
- 
  @c **********************************
  @c * GNU Free Documentation License *
  @c **********************************
--- 28895,28900 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/gnatbind.adb gcc-4.0.0/gcc/ada/gnatbind.adb
*** gcc-3.4.3/gcc/ada/gnatbind.adb	Mon Jan  5 15:20:44 2004
--- gcc-4.0.0/gcc/ada/gnatbind.adb	Thu Feb 10 13:50:32 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Binderr;  use Binderr;
*** 32,38 ****
--- 32,40 ----
  with Bindgen;  use Bindgen;
  with Bindusg;
  with Butil;    use Butil;
+ with Casing;   use Casing;
  with Csets;
+ with Debug;    use Debug;
  with Fmap;
  with Gnatvsn;  use Gnatvsn;
  with Namet;    use Namet;
*************** with Osint;    use Osint;
*** 41,51 ****
  with Osint.B;  use Osint.B;
  with Output;   use Output;
  with Rident;   use Rident;
  with Switch;   use Switch;
  with Switch.B; use Switch.B;
  with Targparm; use Targparm;
  with Types;    use Types;
- with Uintp;    use Uintp;
  
  with System.Case_Util; use System.Case_Util;
  
--- 43,53 ----
  with Osint.B;  use Osint.B;
  with Output;   use Output;
  with Rident;   use Rident;
+ with Snames;
  with Switch;   use Switch;
  with Switch.B; use Switch.B;
  with Targparm; use Targparm;
  with Types;    use Types;
  
  with System.Case_Util; use System.Case_Util;
  
*************** procedure Gnatbind is
*** 69,83 ****
     Output_File_Name_Seen : Boolean := False;
     Output_File_Name      : String_Ptr := new String'("");
  
!    L_Switch_Seen         : Boolean := False;
  
!    Mapping_File          : String_Ptr := null;
  
     procedure Scan_Bind_Arg (Argv : String);
     --  Scan and process binder specific arguments. Argv is a single argument.
     --  All the one character arguments are still handled by Switch. This
     --  routine handles -aO -aI and -I-.
  
     -------------------
     -- Scan_Bind_Arg --
     -------------------
--- 71,176 ----
     Output_File_Name_Seen : Boolean := False;
     Output_File_Name      : String_Ptr := new String'("");
  
!    L_Switch_Seen : Boolean := False;
  
!    Mapping_File : String_Ptr := null;
! 
!    procedure List_Applicable_Restrictions;
!    --  List restrictions that apply to this partition if option taken
  
     procedure Scan_Bind_Arg (Argv : String);
     --  Scan and process binder specific arguments. Argv is a single argument.
     --  All the one character arguments are still handled by Switch. This
     --  routine handles -aO -aI and -I-.
  
+    ----------------------------------
+    -- List_Applicable_Restrictions --
+    ----------------------------------
+ 
+    procedure List_Applicable_Restrictions is
+ 
+       --  Define those restrictions that should be output if the gnatbind
+       --  -r switch is used. Not all restrictions are output for the reasons
+       --  given above in the list, and this array is used to test whether
+       --  the corresponding pragma should be listed. True means that it
+       --  should not be listed.
+ 
+       No_Restriction_List : constant array (All_Restrictions) of Boolean :=
+         (No_Exceptions            => True,
+          --  Has unexpected Suppress (All_Checks) effect
+ 
+          No_Implicit_Conditionals => True,
+          --  This could modify and pessimize generated code
+ 
+          No_Implicit_Dynamic_Code => True,
+          --  This could modify and pessimize generated code
+ 
+          No_Implicit_Loops        => True,
+          --  This could modify and pessimize generated code
+ 
+          No_Recursion             => True,
+          --  Not checkable at compile time
+ 
+          No_Reentrancy            => True,
+          --  Not checkable at compile time
+ 
+          Max_Entry_Queue_Length    => True,
+          --  Not checkable at compile time
+ 
+          Max_Storage_At_Blocking  => True,
+          --  Not checkable at compile time
+ 
+          others => False);
+ 
+       Additional_Restrictions_Listed : Boolean := False;
+       --  Set True if we have listed header for restrictions
+ 
+    begin
+       --  Loop through restrictions
+ 
+       for R in All_Restrictions loop
+          if not No_Restriction_List (R) then
+ 
+             --  We list a restriction if it is not violated, or if
+             --  it is violated but the violation count is exactly known.
+ 
+             if Cumulative_Restrictions.Violated (R) = False
+               or else (R in All_Parameter_Restrictions
+                        and then
+                          Cumulative_Restrictions.Unknown (R) = False)
+             then
+                if not Additional_Restrictions_Listed then
+                   Write_Eol;
+                   Write_Line
+                     ("The following additional restrictions may be" &
+                      " applied to this partition:");
+                   Additional_Restrictions_Listed := True;
+                end if;
+ 
+                Write_Str ("pragma Restrictions (");
+ 
+                declare
+                   S : constant String := Restriction_Id'Image (R);
+                begin
+                   Name_Len := S'Length;
+                   Name_Buffer (1 .. Name_Len) := S;
+                end;
+ 
+                Set_Casing (Mixed_Case);
+                Write_Str (Name_Buffer (1 .. Name_Len));
+ 
+                if R in All_Parameter_Restrictions then
+                   Write_Str (" => ");
+                   Write_Int (Int (Cumulative_Restrictions.Count (R)));
+                end if;
+ 
+                Write_Str (");");
+                Write_Eol;
+             end if;
+          end if;
+       end loop;
+    end List_Applicable_Restrictions;
+ 
     -------------------
     -- Scan_Bind_Arg --
     -------------------
*************** procedure Gnatbind is
*** 244,251 ****
              Opt.Bind_Alternate_Main_Name := True;
              Opt.Alternate_Main_Name := new String'(Argv (3 .. Argv'Last));
  
!          --  All other options are single character and are handled
!          --  by Scan_Binder_Switches.
  
           else
              Scan_Binder_Switches (Argv);
--- 337,344 ----
              Opt.Bind_Alternate_Main_Name := True;
              Opt.Alternate_Main_Name := new String'(Argv (3 .. Argv'Last));
  
!          --  All other options are single character and are handled by
!          --  Scan_Binder_Switches.
  
           else
              Scan_Binder_Switches (Argv);
*************** begin
*** 272,278 ****
  
     declare
        Shared_Libgnat_Default : Character;
!       pragma Import (C, Shared_Libgnat_Default, "shared_libgnat_default");
  
        SHARED : constant Character := 'H';
        STATIC : constant Character := 'T';
--- 365,372 ----
  
     declare
        Shared_Libgnat_Default : Character;
!       pragma Import
!         (C, Shared_Libgnat_Default, "__gnat_shared_libgnat_default");
  
        SHARED : constant Character := 'H';
        STATIC : constant Character := 'T';
*************** begin
*** 344,361 ****
     Osint.Add_Default_Search_Dirs;
  
     --  Carry out package initializations. These are initializations which
!    --  might logically be performed at elaboration time, but Namet at
!    --  least can't be done that way (because it is used in the Compiler),
!    --  and we decide to be consistent. Like elaboration, the order in
!    --  which these calls are made is in some cases important.
  
     Csets.Initialize;
     Namet.Initialize;
  
     --  Acquire target parameters
  
     Targparm.Get_Target_Parameters;
  
     --  On OpenVMS, when -L is used, all external names used in pragmas Export
     --  are in upper case. The reason is that on OpenVMS, the macro-assembler
     --  MACASM-32, used to build Stand-Alone Libraries, only understands
--- 438,462 ----
     Osint.Add_Default_Search_Dirs;
  
     --  Carry out package initializations. These are initializations which
!    --  might logically be performed at elaboration time, but Namet at least
!    --  can't be done that way (because it is used in the Compiler), and we
!    --  decide to be consistent. Like elaboration, the order in which these
!    --  calls are made is in some cases important.
  
     Csets.Initialize;
     Namet.Initialize;
+    Snames.Initialize;
  
     --  Acquire target parameters
  
     Targparm.Get_Target_Parameters;
  
+    --  Initialize Cumulative_Restrictions with the restrictions on the target
+    --  scanned from the system.ads file. Then as we read ALI files, we will
+    --  accumulate additional restrictions specified in other files.
+ 
+    Cumulative_Restrictions := Targparm.Restrictions_On_Target;
+ 
     --  On OpenVMS, when -L is used, all external names used in pragmas Export
     --  are in upper case. The reason is that on OpenVMS, the macro-assembler
     --  MACASM-32, used to build Stand-Alone Libraries, only understands
*************** begin
*** 379,385 ****
        Write_Eol;
        Write_Str ("GNATBIND ");
        Write_Str (Gnat_Version_String);
!       Write_Str (" Copyright 1995-2004 Free Software Foundation, Inc.");
        Write_Eol;
     end if;
  
--- 480,487 ----
        Write_Eol;
        Write_Str ("GNATBIND ");
        Write_Str (Gnat_Version_String);
!       Write_Eol;
!       Write_Str ("Copyright 1995-2005 Free Software Foundation, Inc.");
        Write_Eol;
     end if;
  
*************** begin
*** 435,444 ****
  
           begin
              Id := Scan_ALI
!                     (F         => Main_Lib_File,
!                      T         => Text,
!                      Ignore_ED => Force_RM_Elaboration_Order,
!                      Err       => False);
           end;
  
           Free (Text);
--- 537,547 ----
  
           begin
              Id := Scan_ALI
!                     (F             => Main_Lib_File,
!                      T             => Text,
!                      Ignore_ED     => Force_RM_Elaboration_Order,
!                      Err           => False,
!                      Ignore_Errors => Debug_Flag_I);
           end;
  
           Free (Text);
*************** begin
*** 448,460 ****
  
        if No_Run_Time_Mode then
  
-          --  Set standard restrictions
- 
-          Restrictions_On_Target (No_Finalization)       := True;
-          Restrictions_On_Target (No_Exception_Handlers) := True;
-          Restrictions_On_Target (No_Tasking)            := True;
-          Restriction_Parameters_On_Target (Max_Tasks)   := Uint_0;
- 
           --  Set standard configuration parameters
  
           Suppress_Standard_Library_On_Target            := True;
--- 551,556 ----
*************** begin
*** 466,472 ****
        --  ALI files.
  
        for Index in ALIs.First .. ALIs.Last loop
!          ALIs.Table (Index).Interface := False;
        end loop;
  
        --  Add System.Standard_Library to list to ensure that these files are
--- 562,568 ----
        --  ALI files.
  
        for Index in ALIs.First .. ALIs.Last loop
!          ALIs.Table (Index).SAL_Interface := False;
        end loop;
  
        --  Add System.Standard_Library to list to ensure that these files are
*************** begin
*** 486,495 ****
           begin
              Id :=
                Scan_ALI
!                 (F         => Std_Lib_File,
!                  T         => Text,
!                  Ignore_ED => Force_RM_Elaboration_Order,
!                  Err       => False);
           end;
  
           Free (Text);
--- 582,592 ----
           begin
              Id :=
                Scan_ALI
!                 (F             => Std_Lib_File,
!                  T             => Text,
!                  Ignore_ED     => Force_RM_Elaboration_Order,
!                  Err           => False,
!                  Ignore_Errors => Debug_Flag_I);
           end;
  
           Free (Text);
*************** begin
*** 509,515 ****
           Error_Msg
             ("?may result in missing run-time elaboration checks");
           Error_Msg
!            ("?use -gnatE, pragma Suppress (Elaboration_Checks) instead");
        end if;
  
        --  Quit if some file needs compiling
--- 606,612 ----
           Error_Msg
             ("?may result in missing run-time elaboration checks");
           Error_Msg
!            ("?use -gnatE, pragma Suppress (Elaboration_Check) instead");
        end if;
  
        --  Quit if some file needs compiling
*************** begin
*** 539,553 ****
        Check_Consistency;
        Check_Configuration_Consistency;
  
!       --  Acquire restrictions and add them to target restrictions. After
!       --  this loop, Restrictions_On_Target entries will be set True for
!       --  all partition-wide restrictions specified in the partition.
  
!       for J in Partition_Restrictions loop
!          if Restrictions (J) = 'r' then
!             Restrictions_On_Target (J) := True;
!          end if;
!       end loop;
  
        --  Complete bind if no errors
  
--- 636,646 ----
        Check_Consistency;
        Check_Configuration_Consistency;
  
!       --  List restrictions that could be applied to this partition
  
!       if List_Restrictions then
!          List_Applicable_Restrictions;
!       end if;
  
        --  Complete bind if no errors
  
*************** begin
*** 561,567 ****
                 Write_Eol;
  
                 for J in Elab_Order.First .. Elab_Order.Last loop
!                   if not Units.Table (Elab_Order.Table (J)).Interface then
                       Write_Str ("   ");
                       Write_Unit_Name
                         (Units.Table (Elab_Order.Table (J)).Uname);
--- 654,660 ----
                 Write_Eol;
  
                 for J in Elab_Order.First .. Elab_Order.Last loop
!                   if not Units.Table (Elab_Order.Table (J)).SAL_Interface then
                       Write_Str ("   ");
                       Write_Unit_Name
                         (Units.Table (Elab_Order.Table (J)).Uname);
*************** begin
*** 587,593 ****
           Total_Warnings := Total_Warnings + Warnings_Detected;
     end;
  
!    --  All done. Set proper exit status.
  
     Finalize_Binderr;
     Namet.Finalize;
--- 680,686 ----
           Total_Warnings := Total_Warnings + Warnings_Detected;
     end;
  
!    --  All done. Set proper exit status
  
     Finalize_Binderr;
     Namet.Finalize;
diff -Nrcpad gcc-3.4.3/gcc/ada/gnatbl.c gcc-4.0.0/gcc/ada/gnatbl.c
*** gcc-3.4.3/gcc/ada/gnatbl.c	Tue Nov  4 12:51:46 2003
--- gcc-4.0.0/gcc/ada/gnatbl.c	Thu Feb 10 13:54:28 2005
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *          Copyright (C) 1992-2003 Free Software Foundation, Inc.          *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *          Copyright (C) 1992-2005 Free Software Foundation, Inc.          *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
***************
*** 24,29 ****
--- 24,33 ----
   *                                                                          *
   ****************************************************************************/
  
+ #ifdef VMS
+ #define _POSIX_EXIT 1
+ #endif
+ 
  #include "config.h"
  #include "system.h"
  
***************
*** 32,44 ****
  #endif
  #include "adaint.h"
  
- #ifdef VMS
- #ifdef exit
- #undef exit
- #endif
- #define exit __posix_exit
- #endif
- 
  /* These can be set by command line arguments */
  char *binder_path = 0;
  char *linker_path = 0;
--- 36,41 ----
*************** process_args (int *p_argc, char *argv[])
*** 138,144 ****
  
        if (! strcmp (argv[i], "-gnatbind"))
  	{
! 	  /* Explicit naming of binder.  Grab the value then remove the
  	     two arguments from the argument list. */
  	  if ( i + 1 >= *p_argc )
  	    {
--- 135,141 ----
  
        if (! strcmp (argv[i], "-gnatbind"))
  	{
! 	  /* Explicit naming of binder. Grab the value then remove the
  	     two arguments from the argument list. */
  	  if ( i + 1 >= *p_argc )
  	    {
diff -Nrcpad gcc-3.4.3/gcc/ada/gnatchop.adb gcc-4.0.0/gcc/ada/gnatchop.adb
*** gcc-3.4.3/gcc/ada/gnatchop.adb	Mon Jan  5 15:20:44 2004
--- gcc-4.0.0/gcc/ada/gnatchop.adb	Thu Feb 10 13:49:13 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 1998-2004 Ada Core Technologies, Inc.           --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 1998-2005 Ada Core Technologies, Inc.           --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with GNAT.Table;
*** 35,40 ****
--- 35,42 ----
  with Gnatvsn;
  with Hostparm;
  
+ with System.CRTL;       use System.CRTL;
+ 
  procedure Gnatchop is
  
     Terminate_Program : exception;
*************** procedure Gnatchop is
*** 182,188 ****
     --  Note that this function returns false for the last entry.
  
     procedure Sort_Units;
!    --  Sort units and set up sorted unit table.
  
     ----------------------
     -- File_Descriptors --
--- 184,190 ----
     --  Note that this function returns false for the last entry.
  
     procedure Sort_Units;
!    --  Sort units and set up sorted unit table
  
     ----------------------
     -- File_Descriptors --
*************** procedure Gnatchop is
*** 190,199 ****
  
     function dup  (handle   : File_Descriptor) return File_Descriptor;
     function dup2 (from, to : File_Descriptor) return File_Descriptor;
-    --  File descriptor based functions needed for redirecting stdin/stdout
- 
-    pragma Import (C, dup, "dup");
-    pragma Import (C, dup2, "dup2");
  
     ---------------------
     -- Local variables --
--- 192,197 ----
*************** procedure Gnatchop is
*** 332,337 ****
--- 330,353 ----
        Success : out Boolean);
     --  Write one compilation unit of the source to file
  
+    ---------
+    -- dup --
+    ---------
+ 
+    function dup  (handle   : File_Descriptor) return File_Descriptor is
+    begin
+       return File_Descriptor (System.CRTL.dup (int (handle)));
+    end dup;
+ 
+    ----------
+    -- dup2 --
+    ----------
+ 
+    function dup2 (from, to : File_Descriptor) return File_Descriptor is
+    begin
+       return File_Descriptor (System.CRTL.dup2 (int (from), int (to)));
+    end dup2;
+ 
     ---------------
     -- Error_Msg --
     ---------------
*************** procedure Gnatchop is
*** 1145,1154 ****
                 --  tools write to standard output ???
  
                 Put (Standard_Error, "GNATCHOP ");
!                Put (Standard_Error, Gnatvsn.Gnat_Version_String);
                 Put_Line
                   (Standard_Error,
!                   " Copyright 1998-2004, Ada Core Technologies Inc.");
  
              when 'w' =>
                 Overwrite_Files := True;
--- 1161,1170 ----
                 --  tools write to standard output ???
  
                 Put (Standard_Error, "GNATCHOP ");
!                Put_Line (Standard_Error, Gnatvsn.Gnat_Version_String);
                 Put_Line
                   (Standard_Error,
!                   "Copyright 1998-2005, Ada Core Technologies Inc.");
  
              when 'w' =>
                 Overwrite_Files := True;
*************** procedure Gnatchop is
*** 1316,1322 ****
  
        Unit_Sort.Sort (Natural (Unit.Last));
  
!       --  Set the Sorted_Index fields in the unit tables.
  
        for J in 1 .. SUnit_Num (Unit.Last) loop
           Unit.Table (Sorted_Units.Table (J)).Sorted_Index := J;
--- 1332,1338 ----
  
        Unit_Sort.Sort (Natural (Unit.Last));
  
!       --  Set the Sorted_Index fields in the unit tables
  
        for J in 1 .. SUnit_Num (Unit.Last) loop
           Unit.Table (Sorted_Units.Table (J)).Sorted_Index := J;
*************** procedure Gnatchop is
*** 1672,1677 ****
--- 1688,1725 ----
  --  Start of processing for gnatchop
  
  begin
+    --  Add the directory where gnatchop is invoked in front of the
+    --  path, if gnatchop is invoked with directory information.
+    --  Only do this if the platform is not VMS, where the notion of path
+    --  does not really exist.
+ 
+    if not Hostparm.OpenVMS then
+       declare
+          Command : constant String := Command_Name;
+ 
+       begin
+          for Index in reverse Command'Range loop
+             if Command (Index) = Directory_Separator then
+                declare
+                   Absolute_Dir : constant String :=
+                                    Normalize_Pathname
+                                      (Command (Command'First .. Index));
+ 
+                   PATH         : constant String :=
+                                    Absolute_Dir &
+                   Path_Separator &
+                   Getenv ("PATH").all;
+ 
+                begin
+                   Setenv ("PATH", PATH);
+                end;
+ 
+                exit;
+             end if;
+          end loop;
+       end;
+    end if;
+ 
     --  Process command line options and initialize global variables
  
     if not Scan_Arguments then
diff -Nrcpad gcc-3.4.3/gcc/ada/gnatcmd.adb gcc-4.0.0/gcc/ada/gnatcmd.adb
*** gcc-3.4.3/gcc/ada/gnatcmd.adb	Tue Oct 21 13:42:07 2003
--- gcc-4.0.0/gcc/ada/gnatcmd.adb	Wed Dec  8 11:25:39 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1996-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1996-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Csets;
*** 30,43 ****
  with MLib.Tgt; use MLib.Tgt;
  with MLib.Utl;
  with Namet;    use Namet;
! with Opt;
  with Osint;    use Osint;
  with Output;
  with Prj;      use Prj;
  with Prj.Env;
  with Prj.Ext;  use Prj.Ext;
  with Prj.Pars;
  with Prj.Util; use Prj.Util;
  with Snames;   use Snames;
  with Table;
  with Types;    use Types;
--- 30,45 ----
  with MLib.Tgt; use MLib.Tgt;
  with MLib.Utl;
  with Namet;    use Namet;
! with Opt;      use Opt;
  with Osint;    use Osint;
  with Output;
  with Prj;      use Prj;
+ with Prj.Com;
  with Prj.Env;
  with Prj.Ext;  use Prj.Ext;
  with Prj.Pars;
  with Prj.Util; use Prj.Util;
+ with Sinput.P;
  with Snames;   use Snames;
  with Table;
  with Types;    use Types;
*************** procedure GNATCmd is
*** 60,72 ****
     Current_Verbosity : Prj.Verbosity := Prj.Default;
     Tool_Package_Name : Name_Id       := No_Name;
  
     --  This flag indicates a switch -p (for gnatxref and gnatfind) for
     --  an old fashioned project file. -p cannot be used in conjonction
     --  with -P.
  
!    Old_Project_File_Used : Boolean := False;
  
!    --  A table to keep the switches from the project file
  
     package First_Switches is new Table.Table
       (Table_Component_Type => String_Access,
--- 62,78 ----
     Current_Verbosity : Prj.Verbosity := Prj.Default;
     Tool_Package_Name : Name_Id       := No_Name;
  
+    Old_Project_File_Used : Boolean := False;
     --  This flag indicates a switch -p (for gnatxref and gnatfind) for
     --  an old fashioned project file. -p cannot be used in conjonction
     --  with -P.
  
!    Max_Files_On_The_Command_Line : constant := 30; --  Arbitrary
  
!    Temp_File_Name : String_Access := null;
!    --  The name of the temporary text file to put a list of source/object
!    --  files to pass to a tool, when there are more than
!    --  Max_Files_On_The_Command_Line files.
  
     package First_Switches is new Table.Table
       (Table_Component_Type => String_Access,
*************** procedure GNATCmd is
*** 75,80 ****
--- 81,96 ----
        Table_Initial        => 20,
        Table_Increment      => 100,
        Table_Name           => "Gnatcmd.First_Switches");
+    --  A table to keep the switches from the project file
+ 
+    package Carg_Switches is new Table.Table
+      (Table_Component_Type => String_Access,
+       Table_Index_Type     => Integer,
+       Table_Low_Bound      => 1,
+       Table_Initial        => 20,
+       Table_Increment      => 100,
+       Table_Name           => "Gnatcmd.Carg_Switches");
+    --  A table to keep the switches following -cargs for ASIS tools
  
     package Library_Paths is new Table.Table (
       Table_Component_Type => String_Access,
*************** procedure GNATCmd is
*** 96,101 ****
--- 112,118 ----
     Gnatls_String    : constant String_Access := new String'("gnatls");
     Pretty_String    : constant String_Access := new String'("pretty_printer");
     Gnatstub_String  : constant String_Access := new String'("gnatstub");
+    Metric_String    : constant String_Access := new String'("metrics");
     Xref_String      : constant String_Access := new String'("cross_reference");
  
     Packages_To_Check_By_Binder   : constant String_List_Access :=
*************** procedure GNATCmd is
*** 119,124 ****
--- 136,144 ----
     Packages_To_Check_By_Gnatstub  : constant String_List_Access :=
       new String_List'((Naming_String, Gnatstub_String));
  
+    Packages_To_Check_By_Metric  : constant String_List_Access :=
+      new String_List'((Naming_String, Metric_String));
+ 
     Packages_To_Check_By_Xref      : constant String_List_Access :=
       new String_List'((Naming_String, Xref_String));
  
*************** procedure GNATCmd is
*** 140,145 ****
--- 160,182 ----
     -- Local Subprograms --
     -----------------------
  
+    procedure Add_To_Carg_Switches (Switch : String_Access);
+    --  Add a switch to the Carg_Switches table. If it is the first one,
+    --  put the switch "-cargs" at the beginning of the table.
+ 
+    procedure Check_Files;
+    --  For GNAT LIST, GNAT PRETTY and GNAT METRIC, check if a project
+    --  file is specified, without any file arguments. If it is the case,
+    --  invoke the GNAT tool with the proper list of files, derived from
+    --  the sources of the project.
+ 
+    function Check_Project
+      (Project      : Project_Id;
+       Root_Project : Project_Id) return Boolean;
+    --  Returns True if Project = Root_Project.
+    --  For GNAT METRIC, also returns True if Project is extended by
+    --  Root_Project.
+ 
     procedure Check_Relative_Executable (Name : in out String_Access);
     --  Check if an executable is specified as a relative path.
     --  If it is, and the path contains directory information, fail.
*************** procedure GNATCmd is
*** 150,157 ****
     function Configuration_Pragmas_File return Name_Id;
     --  Return an argument, if there is a configuration pragmas file to be
     --  specified for Project, otherwise return No_Name.
!    --  Used for gnatstub (GNAT STUB), gnatpp (GNAT PRETTY) and gnatelim
!    --  (GNAT ELIM).
  
     procedure Delete_Temp_Config_Files;
     --  Delete all temporary config files
--- 187,194 ----
     function Configuration_Pragmas_File return Name_Id;
     --  Return an argument, if there is a configuration pragmas file to be
     --  specified for Project, otherwise return No_Name.
!    --  Used for gnatstub (GNAT STUB), gnatpp (GNAT PRETTY), gnatelim
!    --  (GNAT ELIM), and gnatmetric (GNAT METRIC).
  
     procedure Delete_Temp_Config_Files;
     --  Delete all temporary config files
*************** procedure GNATCmd is
*** 163,168 ****
--- 200,208 ----
     procedure Non_VMS_Usage;
     --  Display usage for platforms other than VMS
  
+    procedure Process_Link;
+    --  Process GNAT LINK, when there is a project file specified.
+ 
     procedure Set_Library_For
       (Project             : Project_Id;
        There_Are_Libraries : in out Boolean);
*************** procedure GNATCmd is
*** 181,186 ****
--- 221,451 ----
     --  If it is and it includes directory information, prepend the path with
     --  Parent.This subprogram is only called when using project files.
  
+    --------------------------
+    -- Add_To_Carg_Switches --
+    --------------------------
+ 
+    procedure Add_To_Carg_Switches (Switch : String_Access) is
+    begin
+       --  If the Carg_Switches table is empty, put "-cargs" at the beginning
+ 
+       if Carg_Switches.Last = 0 then
+          Carg_Switches.Increment_Last;
+          Carg_Switches.Table (Carg_Switches.Last) := new String'("-cargs");
+       end if;
+ 
+       Carg_Switches.Increment_Last;
+       Carg_Switches.Table (Carg_Switches.Last) := Switch;
+    end Add_To_Carg_Switches;
+ 
+    -----------------
+    -- Check_Files --
+    -----------------
+ 
+    procedure Check_Files is
+       Add_Sources : Boolean := True;
+       Unit_Data   : Prj.Com.Unit_Data;
+       Subunit     : Boolean := False;
+ 
+    begin
+       --  Check if there is at least one argument that is not a switch
+ 
+       for Index in 1 .. Last_Switches.Last loop
+          if Last_Switches.Table (Index) (1) /= '-' then
+             Add_Sources := False;
+             exit;
+          end if;
+       end loop;
+ 
+       --  If all arguments were switches, add the path names of
+       --  all the sources of the main project.
+ 
+       if Add_Sources then
+          declare
+             Current_Last : constant Integer := Last_Switches.Last;
+             use Prj.Com;
+ 
+          begin
+             for Unit in 1 .. Prj.Com.Units.Last loop
+                Unit_Data := Prj.Com.Units.Table (Unit);
+ 
+                --  For gnatls, we only need to put the library units,
+                --  body or spec, but not the subunits.
+ 
+                if The_Command = List then
+                   if
+                     Unit_Data.File_Names (Body_Part).Name /= No_Name
+                   then
+                      --  There is a body; check if it is for this
+                      --  project.
+ 
+                      if Unit_Data.File_Names (Body_Part).Project =
+                        Project
+                      then
+                         Subunit := False;
+ 
+                         if Unit_Data.File_Names (Specification).Name =
+                           No_Name
+                         then
+                            --  We have a body with no spec: we need
+                            --  to check if this is a subunit, because
+                            --  gnatls will complain about subunits.
+ 
+                            declare
+                               Src_Ind : Source_File_Index;
+ 
+                            begin
+                               Src_Ind := Sinput.P.Load_Project_File
+                                 (Get_Name_String
+                                    (Unit_Data.File_Names
+                                       (Body_Part).Path));
+ 
+                               Subunit :=
+                                 Sinput.P.Source_File_Is_Subunit
+                                   (Src_Ind);
+                            end;
+                         end if;
+ 
+                         if not Subunit then
+                            Last_Switches.Increment_Last;
+                            Last_Switches.Table (Last_Switches.Last) :=
+                              new String'
+                                (Get_Name_String
+                                     (Unit_Data.File_Names
+                                          (Body_Part).Display_Name));
+                         end if;
+                      end if;
+ 
+                   elsif Unit_Data.File_Names (Specification).Name /=
+                     No_Name
+                   then
+                      --  We have a spec with no body; check if it is
+                      --  for this project.
+ 
+                      if Unit_Data.File_Names (Specification).Project =
+                        Project
+                      then
+                         Last_Switches.Increment_Last;
+                         Last_Switches.Table (Last_Switches.Last) :=
+                           new String'
+                             (Get_Name_String
+                                  (Unit_Data.File_Names
+                                       (Specification).Display_Name));
+                      end if;
+                   end if;
+ 
+                else
+                   --  For gnatpp and gnatmetric, put all sources
+                   --  of the project.
+ 
+                   for Kind in Prj.Com.Spec_Or_Body loop
+ 
+                      --  Put only sources that belong to the main
+                      --  project.
+ 
+                      if Check_Project
+                           (Unit_Data.File_Names (Kind).Project, Project)
+                      then
+                         Last_Switches.Increment_Last;
+                         Last_Switches.Table (Last_Switches.Last) :=
+                           new String'
+                             (Get_Name_String
+                                  (Unit_Data.File_Names
+                                       (Kind).Display_Path));
+                      end if;
+                   end loop;
+                end if;
+             end loop;
+ 
+             --  If the list of files is too long, create a temporary
+             --  text file that lists these files, and pass this temp
+             --  file to gnatpp or gnatmetric using switch -files=.
+ 
+             if Last_Switches.Last - Current_Last >
+               Max_Files_On_The_Command_Line
+             then
+                declare
+                   Temp_File_FD : File_Descriptor;
+                   Buffer       : String (1 .. 1_000);
+                   Len          : Natural;
+                   OK           : Boolean := True;
+ 
+                begin
+                   Create_Temp_File (Temp_File_FD, Temp_File_Name);
+ 
+                   if Temp_File_Name /= null then
+                      for Index in Current_Last + 1 ..
+                        Last_Switches.Last
+                      loop
+                         Len := Last_Switches.Table (Index)'Length;
+                         Buffer (1 .. Len) :=
+                           Last_Switches.Table (Index).all;
+                         Len := Len + 1;
+                         Buffer (Len) := ASCII.LF;
+                         Buffer (Len + 1) := ASCII.NUL;
+                         OK :=
+                           Write (Temp_File_FD,
+                                  Buffer (1)'Address,
+                                  Len) = Len;
+                         exit when not OK;
+                      end loop;
+ 
+                      if OK then
+                         Close (Temp_File_FD, OK);
+                      else
+                         Close (Temp_File_FD, OK);
+                         OK := False;
+                      end if;
+ 
+                      --  If there were any problem creating the temp
+                      --  file, then pass the list of files.
+ 
+                      if OK then
+ 
+                         --  Replace the list of files with
+                         --  "-files=<temp file name>".
+ 
+                         Last_Switches.Set_Last (Current_Last + 1);
+                         Last_Switches.Table (Last_Switches.Last) :=
+                           new String'("-files=" & Temp_File_Name.all);
+                      end if;
+                   end if;
+                end;
+             end if;
+          end;
+       end if;
+    end Check_Files;
+ 
+    -------------------
+    -- Check_Project --
+    -------------------
+ 
+    function Check_Project
+      (Project      : Project_Id;
+       Root_Project : Project_Id) return Boolean
+    is
+    begin
+       if Project = Root_Project then
+          return True;
+ 
+       elsif The_Command = Metric then
+          declare
+             Data : Project_Data := Projects.Table (Root_Project);
+ 
+          begin
+             while Data.Extends /= No_Project loop
+                if Project = Data.Extends then
+                   return True;
+                end if;
+ 
+                Data := Projects.Table (Data.Extends);
+             end loop;
+          end;
+       end if;
+ 
+       return False;
+    end Check_Project;
+ 
     -------------------------------
     -- Check_Relative_Executable --
     -------------------------------
*************** procedure GNATCmd is
*** 234,255 ****
        Success : Boolean;
  
     begin
!       if Project /= No_Project then
!          for Prj in 1 .. Projects.Last loop
!             if Projects.Table (Prj).Config_File_Temp then
!                if Opt.Verbose_Mode then
!                   Output.Write_Str ("Deleting temp configuration file """);
!                   Output.Write_Str (Get_Name_String
!                                       (Projects.Table (Prj).Config_File_Name));
!                   Output.Write_Line ("""");
                 end if;
  
!                Delete_File
!                  (Name    => Get_Name_String
!                   (Projects.Table (Prj).Config_File_Name),
!                   Success => Success);
!             end if;
!          end loop;
        end if;
     end Delete_Temp_Config_Files;
  
--- 499,530 ----
        Success : Boolean;
  
     begin
!       if not Keep_Temporary_Files then
!          if Project /= No_Project then
!             for Prj in 1 .. Projects.Last loop
!                if Projects.Table (Prj).Config_File_Temp then
!                   if Verbose_Mode then
!                      Output.Write_Str ("Deleting temp configuration file """);
!                      Output.Write_Str
!                        (Get_Name_String
!                           (Projects.Table (Prj).Config_File_Name));
!                      Output.Write_Line ("""");
!                   end if;
! 
!                   Delete_File
!                     (Name    => Get_Name_String
!                        (Projects.Table (Prj).Config_File_Name),
!                      Success => Success);
                 end if;
+             end loop;
+          end if;
  
!          --  If a temporary text file that contains a list of files for a tool
!          --  has been created, delete this temporary file.
! 
!          if Temp_File_Name /= null then
!             Delete_File (Temp_File_Name.all, Success);
!          end if;
        end if;
     end Delete_Temp_Config_Files;
  
*************** procedure GNATCmd is
*** 268,273 ****
--- 543,830 ----
        return 0;
     end Index;
  
+    ------------------
+    -- Process_Link --
+    ------------------
+ 
+    procedure Process_Link is
+       Look_For_Executable  : Boolean := True;
+       There_Are_Libraries  : Boolean := False;
+       Path_Option          : constant String_Access :=
+                                MLib.Linker_Library_Path_Option;
+       Prj                  : Project_Id := Project;
+       Arg                  : String_Access;
+       Last                 : Natural := 0;
+       Skip_Executable      : Boolean := False;
+ 
+    begin
+       --  Add the default search directories, to be able to find
+       --  libgnat in call to MLib.Utl.Lib_Directory.
+ 
+       Add_Default_Search_Dirs;
+ 
+       Library_Paths.Set_Last (0);
+ 
+       --  Check if there are library project files
+ 
+       if MLib.Tgt.Support_For_Libraries /= MLib.Tgt.None then
+          Set_Libraries (Project, There_Are_Libraries);
+       end if;
+ 
+       --  If there are, add the necessary additional switches
+ 
+       if There_Are_Libraries then
+ 
+          --  Add -L<lib_dir> -lgnarl -lgnat -Wl,-rpath,<lib_dir>
+ 
+          Last_Switches.Increment_Last;
+          Last_Switches.Table (Last_Switches.Last) :=
+            new String'("-L" & MLib.Utl.Lib_Directory);
+          Last_Switches.Increment_Last;
+          Last_Switches.Table (Last_Switches.Last) :=
+            new String'("-lgnarl");
+          Last_Switches.Increment_Last;
+          Last_Switches.Table (Last_Switches.Last) :=
+            new String'("-lgnat");
+ 
+          --  If Path_Option is not null, create the switch
+          --  ("-Wl,-rpath," or equivalent) with all the library dirs
+          --  plus the standard GNAT library dir.
+ 
+          if Path_Option /= null then
+             declare
+                Option  : String_Access;
+                Length  : Natural := Path_Option'Length;
+                Current : Natural;
+ 
+             begin
+                --  First, compute the exact length for the switch
+ 
+                for Index in
+                  Library_Paths.First .. Library_Paths.Last
+                loop
+                   --  Add the length of the library dir plus one
+                   --  for the directory separator.
+ 
+                   Length :=
+                     Length +
+                       Library_Paths.Table (Index)'Length + 1;
+                end loop;
+ 
+                --  Finally, add the length of the standard GNAT
+                --  library dir.
+ 
+                Length := Length + MLib.Utl.Lib_Directory'Length;
+                Option := new String (1 .. Length);
+                Option (1 .. Path_Option'Length) := Path_Option.all;
+                Current := Path_Option'Length;
+ 
+                --  Put each library dir followed by a dir separator
+ 
+                for Index in
+                  Library_Paths.First .. Library_Paths.Last
+                loop
+                   Option
+                     (Current + 1 ..
+                        Current +
+                          Library_Paths.Table (Index)'Length) :=
+                       Library_Paths.Table (Index).all;
+                   Current :=
+                     Current +
+                       Library_Paths.Table (Index)'Length + 1;
+                   Option (Current) := Path_Separator;
+                end loop;
+ 
+                --  Finally put the standard GNAT library dir
+ 
+                Option
+                  (Current + 1 ..
+                     Current + MLib.Utl.Lib_Directory'Length) :=
+                    MLib.Utl.Lib_Directory;
+ 
+                --  And add the switch to the last switches
+ 
+                Last_Switches.Increment_Last;
+                Last_Switches.Table (Last_Switches.Last) :=
+                  Option;
+             end;
+          end if;
+       end if;
+ 
+       --  Check if the first ALI file specified can be found, either
+       --  in the object directory of the main project or in an object
+       --  directory of a project file extended by the main project.
+       --  If the ALI file can be found, replace its name with its
+       --  absolute path.
+ 
+       Skip_Executable := False;
+ 
+       Switch_Loop : for J in 1 .. Last_Switches.Last loop
+ 
+          --  If we have an executable just reset the flag
+ 
+          if Skip_Executable then
+             Skip_Executable := False;
+ 
+          --  If -o, set flag so that next switch is not processed
+ 
+          elsif Last_Switches.Table (J).all = "-o" then
+             Skip_Executable := True;
+ 
+          --  Normal case
+ 
+          else
+             declare
+                Switch         : constant String :=
+                                   Last_Switches.Table (J).all;
+ 
+                ALI_File       : constant String (1 .. Switch'Length + 4) :=
+                                   Switch & ".ali";
+ 
+                Test_Existence : Boolean := False;
+ 
+             begin
+                Last := Switch'Length;
+ 
+                --  Skip real switches
+ 
+                if Switch'Length /= 0
+                  and then Switch (Switch'First) /= '-'
+                then
+                   --  Append ".ali" if file name does not end with it
+ 
+                   if Switch'Length <= 4
+                     or else Switch (Switch'Last - 3 .. Switch'Last)
+                     /= ".ali"
+                   then
+                      Last := ALI_File'Last;
+                   end if;
+ 
+                   --  If file name includes directory information,
+                   --  stop if ALI file exists.
+ 
+                   if Is_Absolute_Path (ALI_File (1 .. Last)) then
+                      Test_Existence := True;
+ 
+                   else
+                      for K in Switch'Range loop
+                         if Switch (K) = '/' or else
+                           Switch (K) = Directory_Separator
+                         then
+                            Test_Existence := True;
+                            exit;
+                         end if;
+                      end loop;
+                   end if;
+ 
+                   if Test_Existence then
+                      if Is_Regular_File (ALI_File (1 .. Last)) then
+                         exit Switch_Loop;
+                      end if;
+ 
+                   --  Look in object directories if ALI file exists
+ 
+                   else
+                      Project_Loop : loop
+                         declare
+                            Dir : constant String :=
+                                    Get_Name_String
+                                      (Projects.Table (Prj).
+                                               Object_Directory);
+                         begin
+                            if Is_Regular_File
+                                 (Dir &
+                                  Directory_Separator &
+                                  ALI_File (1 .. Last))
+                            then
+                               --  We have found the correct project, so we
+                               --  replace the file with the absolute path.
+ 
+                               Last_Switches.Table (J) :=
+                                 new String'
+                                   (Dir & Directory_Separator &
+                                    ALI_File (1 .. Last));
+ 
+                               --  And we are done
+ 
+                               exit Switch_Loop;
+                            end if;
+                         end;
+ 
+                         --  Go to the project being extended,
+                         --  if any.
+ 
+                         Prj := Projects.Table (Prj).Extends;
+                         exit Project_Loop when Prj = No_Project;
+                      end loop Project_Loop;
+                   end if;
+                end if;
+             end;
+          end if;
+       end loop Switch_Loop;
+ 
+       --  If a relative path output file has been specified, we add
+       --  the exec directory.
+ 
+       for J in reverse 1 .. Last_Switches.Last - 1 loop
+          if Last_Switches.Table (J).all = "-o" then
+             Check_Relative_Executable
+               (Name => Last_Switches.Table (J + 1));
+             Look_For_Executable := False;
+             exit;
+          end if;
+       end loop;
+ 
+       if Look_For_Executable then
+          for J in reverse 1 .. First_Switches.Last - 1 loop
+             if First_Switches.Table (J).all = "-o" then
+                Look_For_Executable := False;
+                Check_Relative_Executable
+                  (Name => First_Switches.Table (J + 1));
+                exit;
+             end if;
+          end loop;
+       end if;
+ 
+       --  If no executable is specified, then find the name
+       --  of the first ALI file on the command line and issue
+       --  a -o switch with the absolute path of the executable
+       --  in the exec directory.
+ 
+       if Look_For_Executable then
+          for J in 1 .. Last_Switches.Last loop
+             Arg  := Last_Switches.Table (J);
+             Last := 0;
+ 
+             if Arg'Length /= 0 and then Arg (Arg'First) /= '-' then
+                if Arg'Length > 4
+                  and then Arg (Arg'Last - 3 .. Arg'Last) = ".ali"
+                then
+                   Last := Arg'Last - 4;
+ 
+                elsif Is_Regular_File (Arg.all & ".ali") then
+                   Last := Arg'Last;
+                end if;
+ 
+                if Last /= 0 then
+                   Last_Switches.Increment_Last;
+                   Last_Switches.Table (Last_Switches.Last) :=
+                     new String'("-o");
+                   Get_Name_String
+                     (Projects.Table (Project).Exec_Directory);
+                   Last_Switches.Increment_Last;
+                   Last_Switches.Table (Last_Switches.Last) :=
+                     new String'(Name_Buffer (1 .. Name_Len) &
+                                 Directory_Separator &
+                                 Base_Name (Arg (Arg'First .. Last)) &
+                                 Get_Executable_Suffix.all);
+                   exit;
+                end if;
+             end if;
+          end loop;
+       end if;
+    end Process_Link;
+ 
     ---------------------
     -- Set_Library_For --
     ---------------------
*************** procedure GNATCmd is
*** 277,283 ****
        There_Are_Libraries : in out Boolean)
     is
        Path_Option : constant String_Access :=
!                       MLib.Tgt.Linker_Library_Path_Option;
  
     begin
        --  Case of library project
--- 834,840 ----
        There_Are_Libraries : in out Boolean)
     is
        Path_Option : constant String_Access :=
!                       MLib.Linker_Library_Path_Option;
  
     begin
        --  Case of library project
*************** procedure GNATCmd is
*** 312,318 ****
                new String'(Get_Name_String
                              (Projects.Table (Project).Library_Dir));
           end if;
- 
        end if;
     end Set_Library_For;
  
--- 869,874 ----
*************** procedure GNATCmd is
*** 336,344 ****
  
              if Sw (1) = '-' then
                 if Sw'Length >= 3
!                  and then (Sw (2) = 'A'
!                            or else Sw (2) = 'I'
!                            or else Sw (2) = 'L')
                 then
                    Start := 3;
  
--- 892,900 ----
  
              if Sw (1) = '-' then
                 if Sw'Length >= 3
!                  and then (Sw (2) = 'A' or else
!                            Sw (2) = 'I' or else
!                            Sw (2) = 'L')
                 then
                    Start := 3;
  
*************** procedure GNATCmd is
*** 347,355 ****
                    end if;
  
                 elsif Sw'Length >= 4
!                  and then (Sw (2 .. 3) = "aL"
!                            or else Sw (2 .. 3) = "aO"
!                            or else Sw (2 .. 3) = "aI")
                 then
                    Start := 4;
  
--- 903,911 ----
                    end if;
  
                 elsif Sw'Length >= 4
!                  and then (Sw (2 .. 3) = "aL" or else
!                            Sw (2 .. 3) = "aO" or else
!                            Sw (2 .. 3) = "aI")
                 then
                    Start := 4;
  
*************** procedure GNATCmd is
*** 395,401 ****
  
        for C in Command_List'Range loop
           if not Command_List (C).VMS_Only then
!             Put ("GNAT " & Command_List (C).Cname.all);
              Set_Col (25);
              Put (Command_List (C).Unixcmd.all);
  
--- 951,957 ----
  
        for C in Command_List'Range loop
           if not Command_List (C).VMS_Only then
!             Put ("gnat " & To_Lower (Command_List (C).Cname.all));
              Set_Col (25);
              Put (Command_List (C).Unixcmd.all);
  
*************** procedure GNATCmd is
*** 415,421 ****
        end loop;
  
        New_Line;
!       Put_Line ("Commands FIND, LIST, PRETTY, STUB and XREF accept " &
                  "project file switches -vPx, -Pprj and -Xnam=val");
        New_Line;
     end Non_VMS_Usage;
--- 971,977 ----
        end loop;
  
        New_Line;
!       Put_Line ("Commands find, list, metric, pretty, stub and xref accept " &
                  "project file switches -vPx, -Pprj and -Xnam=val");
        New_Line;
     end Non_VMS_Usage;
*************** begin
*** 439,447 ****
--- 995,1037 ----
  
     First_Switches.Init;
     First_Switches.Set_Last (0);
+    Carg_Switches.Init;
+    Carg_Switches.Set_Last (0);
  
     VMS_Conv.Initialize;
  
+    --  Add the directory where the GNAT driver is invoked in front of the
+    --  path, if the GNAT driver is invoked with directory information.
+    --  Only do this if the platform is not VMS, where the notion of path
+    --  does not really exist.
+ 
+    if not OpenVMS then
+       declare
+          Command : constant String := Command_Name;
+ 
+       begin
+          for Index in reverse Command'Range loop
+             if Command (Index) = Directory_Separator then
+                declare
+                   Absolute_Dir : constant String :=
+                                    Normalize_Pathname
+                                      (Command (Command'First .. Index));
+ 
+                   PATH         : constant String :=
+                                    Absolute_Dir &
+                   Path_Separator &
+                   Getenv ("PATH").all;
+ 
+                begin
+                   Setenv ("PATH", PATH);
+                end;
+ 
+                exit;
+             end if;
+          end loop;
+       end;
+    end if;
+ 
     --  If on VMS, or if VMS emulation is on, convert VMS style /qualifiers,
     --  filenames and pathnames to Unix style.
  
*************** begin
*** 458,467 ****
           return;
        else
           begin
!             if Argument_Count > 1 and then Argument (1) = "-v" then
!                Opt.Verbose_Mode := True;
!                Command_Arg := 2;
!             end if;
  
              The_Command := Real_Command_Type'Value (Argument (Command_Arg));
  
--- 1048,1070 ----
           return;
        else
           begin
!             loop
!                if Argument_Count > Command_Arg
!                  and then Argument (Command_Arg) = "-v"
!                then
!                   Verbose_Mode := True;
!                   Command_Arg := Command_Arg + 1;
! 
!                elsif Argument_Count > Command_Arg
!                  and then Argument (Command_Arg) = "-dn"
!                then
!                   Keep_Temporary_Files := True;
!                   Command_Arg := Command_Arg + 1;
! 
!                else
!                   exit;
!                end if;
!             end loop;
  
              The_Command := Real_Command_Type'Value (Argument (Command_Arg));
  
*************** begin
*** 493,502 ****
                 end;
           end;
  
           for Arg in Command_Arg + 1 .. Argument_Count loop
!             Last_Switches.Increment_Last;
!             Last_Switches.Table (Last_Switches.Last) :=
!               new String'(Argument (Arg));
           end loop;
        end if;
     end if;
--- 1096,1162 ----
                 end;
           end;
  
+          --  Get the arguments from the command line and from the eventual
+          --  argument file(s) specified on the command line.
+ 
           for Arg in Command_Arg + 1 .. Argument_Count loop
!             declare
!                The_Arg : constant String := Argument (Arg);
! 
!             begin
!                --  Check if an argument file is specified
! 
!                if The_Arg (The_Arg'First) = '@' then
!                   declare
!                      Arg_File : Ada.Text_IO.File_Type;
!                      Line     : String (1 .. 256);
!                      Last     : Natural;
! 
!                   begin
!                      --  Open the file and fail if the file cannot be found
! 
!                      begin
!                         Open
!                           (Arg_File, In_File,
!                            The_Arg (The_Arg'First + 1 .. The_Arg'Last));
! 
!                      exception
!                         when others =>
!                            Put
!                              (Standard_Error, "Cannot open argument file """);
!                            Put
!                              (Standard_Error,
!                               The_Arg (The_Arg'First + 1 .. The_Arg'Last));
! 
!                            Put_Line (Standard_Error, """");
!                            raise Error_Exit;
!                      end;
! 
!                      --  Read line by line and put the content of each
!                      --  non empty line in the Last_Switches table.
! 
!                      while not End_Of_File (Arg_File) loop
!                         Get_Line (Arg_File, Line, Last);
! 
!                         if Last /= 0 then
!                            Last_Switches.Increment_Last;
!                            Last_Switches.Table (Last_Switches.Last) :=
!                              new String'(Line (1 .. Last));
!                         end if;
!                      end loop;
! 
!                      Close (Arg_File);
!                   end;
! 
!                else
!                   --  It is not an argument file; just put the argument in
!                   --  the Last_Switches table.
! 
!                   Last_Switches.Increment_Last;
!                   Last_Switches.Table (Last_Switches.Last) :=
!                     new String'(The_Arg);
!                end if;
!             end;
           end loop;
        end if;
     end if;
*************** begin
*** 508,513 ****
--- 1168,1315 ----
        Exec_Path : String_Access;
  
     begin
+       --  First deal with built-in command(s)
+ 
+       if The_Command = Setup then
+          Process_Setup :
+          declare
+             Arg_Num : Positive := 1;
+             Argv    : String_Access;
+ 
+          begin
+             while Arg_Num <= Last_Switches.Last loop
+                Argv := Last_Switches.Table (Arg_Num);
+ 
+                if Argv (Argv'First) /= '-' then
+                   Fail ("invalid parameter """, Argv.all, """");
+ 
+                else
+                   if Argv'Length = 1 then
+                      Fail
+                        ("switch character cannot be followed by a blank");
+                   end if;
+ 
+                   --  -vPx  Specify verbosity while parsing project files
+ 
+                   if Argv'Length = 4
+                     and then Argv (Argv'First + 1 .. Argv'First + 2) = "vP"
+                   then
+                      case Argv (Argv'Last) is
+                         when '0' =>
+                            Current_Verbosity := Prj.Default;
+                         when '1' =>
+                            Current_Verbosity := Prj.Medium;
+                         when '2' =>
+                            Current_Verbosity := Prj.High;
+                         when others =>
+                            Fail ("Invalid switch: ", Argv.all);
+                      end case;
+ 
+                   --  -Pproject_file  Specify project file to be used
+ 
+                   elsif Argv (Argv'First + 1) = 'P' then
+ 
+                      --  Only one -P switch can be used
+ 
+                      if Project_File /= null then
+                         Fail
+                           (Argv.all,
+                            ": second project file forbidden (first is """,
+                            Project_File.all & """)");
+ 
+                      elsif Argv'Length = 2 then
+ 
+                         --  There is space between -P and the project file
+                         --  name. -P cannot be the last option.
+ 
+                         if Arg_Num = Last_Switches.Last then
+                            Fail ("project file name missing after -P");
+ 
+                         else
+                            Arg_Num := Arg_Num + 1;
+                            Argv := Last_Switches.Table (Arg_Num);
+ 
+                            --  After -P, there must be a project file name,
+                            --  not another switch.
+ 
+                            if Argv (Argv'First) = '-' then
+                               Fail ("project file name missing after -P");
+ 
+                            else
+                               Project_File := new String'(Argv.all);
+                            end if;
+                         end if;
+ 
+                      else
+                         --  No space between -P and project file name
+ 
+                         Project_File :=
+                           new String'(Argv (Argv'First + 2 .. Argv'Last));
+                      end if;
+ 
+                   --  -Xexternal=value Specify an external reference to be
+                   --                   used in project files
+ 
+                   elsif Argv'Length >= 5
+                     and then Argv (Argv'First + 1) = 'X'
+                   then
+                      declare
+                         Equal_Pos : constant Natural :=
+                           Index ('=', Argv (Argv'First + 2 .. Argv'Last));
+                      begin
+                         if Equal_Pos >= Argv'First + 3 and then
+                           Equal_Pos /= Argv'Last then
+                            Add
+                              (External_Name =>
+                               Argv (Argv'First + 2 .. Equal_Pos - 1),
+                               Value     => Argv (Equal_Pos + 1 .. Argv'Last));
+                         else
+                            Fail
+                              (Argv.all,
+                               " is not a valid external assignment.");
+                         end if;
+                      end;
+ 
+                   elsif Argv.all = "-v" then
+                      Verbose_Mode := True;
+ 
+                   elsif Argv.all = "-q" then
+                      Quiet_Output := True;
+ 
+                   else
+                      Fail ("invalid parameter """, Argv.all, """");
+                   end if;
+                end if;
+ 
+                Arg_Num := Arg_Num + 1;
+             end loop;
+ 
+             if Project_File = null then
+                Fail ("no project file specified");
+             end if;
+ 
+             Setup_Projects := True;
+ 
+             Prj.Pars.Set_Verbosity (To => Current_Verbosity);
+ 
+             --  Missing directories are created during processing of the
+             --  project tree.
+ 
+             Prj.Pars.Parse
+               (Project           => Project,
+                Project_File_Name => Project_File.all,
+                Packages_To_Check => All_Packages);
+ 
+             if Project = Prj.No_Project then
+                Fail ("""", Project_File.all, """ processing failed");
+             end if;
+ 
+             --  Processing is done
+ 
+             return;
+          end Process_Setup;
+       end if;
+ 
        --  Locate the executable for the command
  
        Exec_Path := Locate_Exec_On_Path (Program);
*************** begin
*** 538,543 ****
--- 1340,1346 ----
          or else The_Command = Xref
          or else The_Command = Pretty
          or else The_Command = Stub
+         or else The_Command = Metric
        then
           case The_Command is
              when Bind =>
*************** begin
*** 555,560 ****
--- 1358,1366 ----
              when List =>
                 Tool_Package_Name := Name_Gnatls;
                 Packages_To_Check := Packages_To_Check_By_Gnatls;
+             when Metric =>
+                Tool_Package_Name := Name_Metrics;
+                Packages_To_Check := Packages_To_Check_By_Metric;
              when Pretty =>
                 Tool_Package_Name := Name_Pretty_Printer;
                 Packages_To_Check := Packages_To_Check_By_Pretty;
*************** begin
*** 651,656 ****
--- 1457,1463 ----
                          Fail ("-p and -P cannot be used together");
  
                       elsif Argv'Length = 2 then
+ 
                          --  There is space between -P and the project file
                          --  name. -P cannot be the last option.
  
*************** begin
*** 738,747 ****
              Data : constant Prj.Project_Data :=
                       Prj.Projects.Table (Project);
  
!             Pkg  : constant Prj.Package_Id :=
!                               Prj.Util.Value_Of
!                                 (Name        => Tool_Package_Name,
!                                  In_Packages => Data.Decl.Packages);
  
              Element : Package_Element;
  
--- 1545,1554 ----
              Data : constant Prj.Project_Data :=
                       Prj.Projects.Table (Project);
  
!             Pkg : constant Prj.Package_Id :=
!                     Prj.Util.Value_Of
!                       (Name        => Tool_Package_Name,
!                        In_Packages => Data.Decl.Packages);
  
              Element : Package_Element;
  
*************** begin
*** 766,774 ****
  
                 --  Packages Binder (for gnatbind), Cross_Reference (for
                 --  gnatxref), Linker (for gnatlink) Finder (for gnatfind),
!                --  Pretty_Printer (for gnatpp) and Eliminate (for gnatelim)
!                --  have an attributed Switches, an associative array, indexed
!                --  by the name of the file.
                 --  They also have an attribute Default_Switches, indexed
                 --  by the name of the programming language.
  
--- 1573,1582 ----
  
                 --  Packages Binder (for gnatbind), Cross_Reference (for
                 --  gnatxref), Linker (for gnatlink) Finder (for gnatfind),
!                --  Pretty_Printer (for gnatpp) Eliminate (for gnatelim) and
!                --  Metric (for gnatmetric) have an attributed Switches,
!                --  an associative array, indexed by the name of the file.
! 
                 --  They also have an attribute Default_Switches, indexed
                 --  by the name of the programming language.
  
*************** begin
*** 777,786 ****
                       Default_Switches_Array :=
                         Prj.Util.Value_Of
                           (Name => Name_Default_Switches,
!                           In_Arrays => Packages.Table (Pkg).Decl.Arrays);
                       The_Switches := Prj.Util.Value_Of
!                        (Index => Name_Ada,
!                         In_Array => Default_Switches_Array);
                    end if;
                 end if;
  
--- 1585,1595 ----
                       Default_Switches_Array :=
                         Prj.Util.Value_Of
                           (Name => Name_Default_Switches,
!                           In_Arrays => Element.Decl.Arrays);
                       The_Switches := Prj.Util.Value_Of
!                        (Index     => Name_Ada,
!                         Src_Index => 0,
!                         In_Array  => Default_Switches_Array);
                    end if;
                 end if;
  
*************** begin
*** 840,1167 ****
  
           Prj.Env.Set_Ada_Paths (Project, Including_Libraries => False);
  
!          --  For gnatstub, gnatpp and gnatelim, create a configuration pragmas
!          --  file, if necessary.
  
           if The_Command = Pretty
             or else The_Command = Stub
             or else The_Command = Elim
           then
              declare
                 CP_File : constant Name_Id := Configuration_Pragmas_File;
- 
              begin
                 if CP_File /= No_Name then
-                   First_Switches.Increment_Last;
- 
                    if The_Command = Elim then
                       First_Switches.Table (First_Switches.Last)  :=
                         new String'("-C" & Get_Name_String (CP_File));
- 
                    else
!                      First_Switches.Table (First_Switches.Last) :=
!                        new String'("-gnatec=" & Get_Name_String (CP_File));
                    end if;
                 end if;
              end;
           end if;
  
           if The_Command = Link then
! 
!             --  Add the default search directories, to be able to find
!             --  libgnat in call to MLib.Utl.Lib_Directory.
! 
!             Add_Default_Search_Dirs;
! 
!             declare
!                There_Are_Libraries  : Boolean := False;
!                Path_Option : constant String_Access :=
!                                MLib.Tgt.Linker_Library_Path_Option;
! 
!             begin
!                Library_Paths.Set_Last (0);
! 
!                --  Check if there are library project files
! 
!                if MLib.Tgt.Support_For_Libraries /= MLib.Tgt.None then
!                   Set_Libraries (Project, There_Are_Libraries);
!                end if;
! 
!                --  If there are, add the necessary additional switches
! 
!                if There_Are_Libraries then
! 
!                   --  Add -L<lib_dir> -lgnarl -lgnat -Wl,-rpath,<lib_dir>
! 
!                   Last_Switches.Increment_Last;
!                   Last_Switches.Table (Last_Switches.Last) :=
!                     new String'("-L" & MLib.Utl.Lib_Directory);
!                   Last_Switches.Increment_Last;
!                   Last_Switches.Table (Last_Switches.Last) :=
!                     new String'("-lgnarl");
!                   Last_Switches.Increment_Last;
!                   Last_Switches.Table (Last_Switches.Last) :=
!                     new String'("-lgnat");
! 
!                   --  If Path_Option is not null, create the switch
!                   --  ("-Wl,-rpath," or equivalent) with all the library dirs
!                   --  plus the standard GNAT library dir.
! 
!                   if Path_Option /= null then
!                      declare
!                         Option : String_Access;
!                         Length : Natural := Path_Option'Length;
!                         Current : Natural;
! 
!                      begin
!                         --  First, compute the exact length for the switch
! 
!                         for Index in
!                           Library_Paths.First .. Library_Paths.Last
!                         loop
!                            --  Add the length of the library dir plus one
!                            --  for the directory separator.
! 
!                            Length :=
!                              Length +
!                              Library_Paths.Table (Index)'Length + 1;
!                         end loop;
! 
!                         --  Finally, add the length of the standard GNAT
!                         --  library dir.
! 
!                         Length := Length + MLib.Utl.Lib_Directory'Length;
!                         Option := new String (1 .. Length);
!                         Option (1 .. Path_Option'Length) := Path_Option.all;
!                         Current := Path_Option'Length;
! 
!                         --  Put each library dir followed by a dir separator
! 
!                         for Index in
!                           Library_Paths.First .. Library_Paths.Last
!                         loop
!                            Option
!                              (Current + 1 ..
!                                 Current +
!                                 Library_Paths.Table (Index)'Length) :=
!                              Library_Paths.Table (Index).all;
!                            Current :=
!                              Current +
!                              Library_Paths.Table (Index)'Length + 1;
!                            Option (Current) := Path_Separator;
!                         end loop;
! 
!                         --  Finally put the standard GNAT library dir
! 
!                         Option
!                           (Current + 1 ..
!                              Current + MLib.Utl.Lib_Directory'Length) :=
!                           MLib.Utl.Lib_Directory;
! 
!                         --  And add the switch to the last switches
! 
!                         Last_Switches.Increment_Last;
!                         Last_Switches.Table (Last_Switches.Last) :=
!                           Option;
!                      end;
!                   end if;
!                end if;
!             end;
! 
!             --  Check if the first ALI file specified can be found, either
!             --  in the object directory of the main project or in an object
!             --  directory of a project file extended by the main project.
!             --  If the ALI file can be found, replace its name with its
!             --  absolute path.
! 
!             declare
!                Skip_Executable : Boolean := False;
! 
!             begin
!                Switch_Loop : for J in 1 .. Last_Switches.Last loop
! 
!                   --  If we have an executable just reset the flag
! 
!                   if Skip_Executable then
!                      Skip_Executable := False;
! 
!                   --  If -o, set flag so that next switch is not processed
! 
!                   elsif Last_Switches.Table (J).all = "-o" then
!                      Skip_Executable := True;
! 
!                   --  Normal case
! 
!                   else
!                      declare
!                         Switch : constant String :=
!                                    Last_Switches.Table (J).all;
! 
!                         ALI_File : constant String (1 .. Switch'Length + 4) :=
!                                      Switch & ".ali";
! 
!                         Last           : Natural := Switch'Length;
!                         Test_Existence : Boolean := False;
! 
!                      begin
!                         --  Skip real switches
! 
!                         if Switch'Length /= 0 and then
!                           Switch (Switch'First) /= '-'
!                         then
!                            --  Append ".ali" if file name does not end with it
! 
!                            if Switch'Length <= 4 or else
!                              Switch (Switch'Last - 3 .. Switch'Last) /= ".ali"
!                            then
!                               Last := ALI_File'Last;
!                            end if;
! 
!                            --  If file name includes directory information,
!                            --  stop if ALI file exists.
! 
!                            if Is_Absolute_Path (ALI_File (1 .. Last)) then
!                               Test_Existence := True;
! 
!                            else
!                               for K in Switch'Range loop
!                                  if Switch (K) = '/' or else
!                                    Switch (K) = Directory_Separator
!                                  then
!                                     Test_Existence := True;
!                                     exit;
!                                  end if;
!                               end loop;
!                            end if;
! 
!                            if Test_Existence then
!                               if Is_Regular_File (ALI_File (1 .. Last)) then
!                                  exit Switch_Loop;
!                               end if;
! 
!                            else
!                               --  Look in the object directories if the ALI
!                               --  file exists.
! 
!                               declare
!                                  Prj : Project_Id := Project;
!                               begin
!                                  Project_Loop :
!                                  loop
!                                     declare
!                                        Dir : constant String :=
!                                          Get_Name_String
!                                            (Projects.Table (Prj).
!                                               Object_Directory);
!                                     begin
!                                        if Is_Regular_File
!                                          (Dir & Directory_Separator &
!                                           ALI_File (1 .. Last))
!                                        then
!                                           --  We have found the correct
!                                           --  project, so we replace the file
!                                           --  with the absolute path.
! 
!                                           Last_Switches.Table (J) :=
!                                             new String'
!                                               (Dir & Directory_Separator &
!                                                ALI_File (1 .. Last));
! 
!                                           --  And we are done
! 
!                                           exit Switch_Loop;
!                                        end if;
!                                     end;
! 
!                                     --  Go to the project being extended,
!                                     --  if any.
! 
!                                     Prj := Projects.Table (Prj).Extends;
!                                     exit Project_Loop when Prj = No_Project;
!                                  end loop Project_Loop;
!                               end;
!                            end if;
!                         end if;
!                      end;
!                   end if;
!                end loop Switch_Loop;
!             end;
! 
!             --  If a relative path output file has been specified, we add
!             --  the exec directory.
! 
!             declare
!                Look_For_Executable : Boolean := True;
! 
!             begin
! 
!                for J in reverse 1 .. Last_Switches.Last - 1 loop
!                   if Last_Switches.Table (J).all = "-o" then
!                      Check_Relative_Executable
!                        (Name => Last_Switches.Table (J + 1));
!                      Look_For_Executable := False;
!                      exit;
!                   end if;
!                end loop;
! 
!                if Look_For_Executable then
!                   for J in reverse 1 .. First_Switches.Last - 1 loop
!                      if First_Switches.Table (J).all = "-o" then
!                         Look_For_Executable := False;
!                         Check_Relative_Executable
!                           (Name => First_Switches.Table (J + 1));
!                         exit;
!                      end if;
!                   end loop;
!                end if;
! 
!                --  If no executable is specified, then find the name
!                --  of the first ALI file on the command line and issue
!                --  a -o switch with the absolute path of the executable
!                --  in the exec directory.
! 
!                if Look_For_Executable then
!                   for J in 1 .. Last_Switches.Last loop
!                      declare
!                         Arg  : constant String_Access :=
!                                  Last_Switches.Table (J);
!                         Last : Natural := 0;
! 
!                      begin
!                         if Arg'Length /= 0 and then Arg (Arg'First) /= '-' then
!                            if Arg'Length > 4
!                              and then Arg (Arg'Last - 3 .. Arg'Last) = ".ali"
!                            then
!                               Last := Arg'Last - 4;
! 
!                            elsif Is_Regular_File (Arg.all & ".ali") then
!                               Last := Arg'Last;
!                            end if;
! 
!                            if Last /= 0 then
!                               declare
!                                  Executable_Name : constant String :=
!                                    Base_Name (Arg (Arg'First .. Last));
!                               begin
!                                  Last_Switches.Increment_Last;
!                                  Last_Switches.Table (Last_Switches.Last) :=
!                                    new String'("-o");
!                                  Get_Name_String
!                                    (Projects.Table (Project).Exec_Directory);
!                                  Last_Switches.Increment_Last;
!                                  Last_Switches.Table (Last_Switches.Last) :=
!                                     new String'(Name_Buffer (1 .. Name_Len) &
!                                                   Directory_Separator &
!                                                   Executable_Name &
!                                                   Get_Executable_Suffix.all);
!                                  exit;
!                               end;
!                            end if;
!                         end if;
!                      end;
!                   end loop;
!                end if;
!             end;
           end if;
  
           if The_Command = Link or The_Command = Bind then
--- 1649,1703 ----
  
           Prj.Env.Set_Ada_Paths (Project, Including_Libraries => False);
  
!          --  For gnatstub, gnatmetric, gnatpp and gnatelim, create
!          --  a configuration pragmas file, if necessary.
  
           if The_Command = Pretty
+            or else The_Command = Metric
             or else The_Command = Stub
             or else The_Command = Elim
           then
+             --  If -cargs is one of the switches, move the following
+             --  switches to the Carg_Switches table.
+ 
+             for J in 1 .. First_Switches.Last loop
+                if First_Switches.Table (J).all = "-cargs" then
+                   for K in J + 1 .. First_Switches.Last loop
+                      Add_To_Carg_Switches (First_Switches.Table (K));
+                   end loop;
+                   First_Switches.Set_Last (J - 1);
+                   exit;
+                end if;
+             end loop;
+ 
+             for J in 1 .. Last_Switches.Last loop
+                if Last_Switches.Table (J).all = "-cargs" then
+                   for K in J + 1 .. Last_Switches.Last loop
+                      Add_To_Carg_Switches (Last_Switches.Table (K));
+                   end loop;
+                   Last_Switches.Set_Last (J - 1);
+                   exit;
+                end if;
+             end loop;
+ 
              declare
                 CP_File : constant Name_Id := Configuration_Pragmas_File;
              begin
                 if CP_File /= No_Name then
                    if The_Command = Elim then
+                      First_Switches.Increment_Last;
                       First_Switches.Table (First_Switches.Last)  :=
                         new String'("-C" & Get_Name_String (CP_File));
                    else
!                      Add_To_Carg_Switches
!                        (new String'("-gnatec=" & Get_Name_String (CP_File)));
                    end if;
                 end if;
              end;
           end if;
  
           if The_Command = Link then
!             Process_Link;
           end if;
  
           if The_Command = Link or The_Command = Bind then
*************** begin
*** 1213,1219 ****
                 --  indicate to gnatstub the name of the body file with
                 --  a -o switch.
  
!                if Data.Naming.Current_Spec_Suffix /=
                   Prj.Default_Ada_Spec_Suffix
                 then
                    if File_Index /= 0 then
--- 1749,1755 ----
                 --  indicate to gnatstub the name of the body file with
                 --  a -o switch.
  
!                if Data.Naming.Ada_Spec_Suffix /=
                   Prj.Default_Ada_Spec_Suffix
                 then
                    if File_Index /= 0 then
*************** begin
*** 1223,1236 ****
                          Last : Natural := Spec'Last;
  
                       begin
!                         Get_Name_String (Data.Naming.Current_Spec_Suffix);
  
                          if Spec'Length > Name_Len
                            and then Spec (Last - Name_Len + 1 .. Last) =
                            Name_Buffer (1 .. Name_Len)
                          then
                             Last := Last - Name_Len;
!                            Get_Name_String (Data.Naming.Current_Body_Suffix);
                             Last_Switches.Increment_Last;
                             Last_Switches.Table (Last_Switches.Last) :=
                               new String'("-o");
--- 1759,1772 ----
                          Last : Natural := Spec'Last;
  
                       begin
!                         Get_Name_String (Data.Naming.Ada_Spec_Suffix);
  
                          if Spec'Length > Name_Len
                            and then Spec (Last - Name_Len + 1 .. Last) =
                            Name_Buffer (1 .. Name_Len)
                          then
                             Last := Last - Name_Len;
!                            Get_Name_String (Data.Naming.Ada_Body_Suffix);
                             Last_Switches.Increment_Last;
                             Last_Switches.Table (Last_Switches.Last) :=
                               new String'("-o");
*************** begin
*** 1266,1279 ****
                 end if;
              end;
           end if;
        end if;
  
        --  Gather all the arguments and invoke the executable
  
        declare
           The_Args : Argument_List
!            (1 .. First_Switches.Last + Last_Switches.Last);
!          Arg_Num : Natural := 0;
        begin
           for J in 1 .. First_Switches.Last loop
              Arg_Num := Arg_Num + 1;
--- 1802,1844 ----
                 end if;
              end;
           end if;
+ 
+          --  For gnatmetric, the generated files should be put in the
+          --  object directory. This must be the first switch, because it may
+          --  be overriden by a switch in package Metrics in the project file
+          --  or by a command line option.
+ 
+          if The_Command = Metric then
+             First_Switches.Increment_Last;
+             First_Switches.Table (2 .. First_Switches.Last) :=
+               First_Switches.Table (1 .. First_Switches.Last - 1);
+             First_Switches.Table (1) :=
+               new String'("-d=" &
+                           Get_Name_String
+                             (Projects.Table (Project).Object_Directory));
+          end if;
+ 
+          --  For gnat pretty and gnat metric, if no file has been put on the
+          --  command line, call the tool with all the sources of the main
+          --  project.
+ 
+          if The_Command = Pretty or else
+             The_Command = Metric or else
+             The_Command = List
+          then
+             Check_Files;
+          end if;
        end if;
  
        --  Gather all the arguments and invoke the executable
  
        declare
           The_Args : Argument_List
!                       (1 .. First_Switches.Last +
!                             Last_Switches.Last +
!                             Carg_Switches.Last);
!          Arg_Num  : Natural := 0;
! 
        begin
           for J in 1 .. First_Switches.Last loop
              Arg_Num := Arg_Num + 1;
*************** begin
*** 1285,1290 ****
--- 1850,1860 ----
              The_Args (Arg_Num) := Last_Switches.Table (J);
           end loop;
  
+          for J in 1 .. Carg_Switches.Last loop
+             Arg_Num := Arg_Num + 1;
+             The_Args (Arg_Num) := Carg_Switches.Table (J);
+          end loop;
+ 
           --  If Display_Command is on, only display the generated command
  
           if Display_Command then
*************** begin
*** 1301,1307 ****
              raise Normal_Exit;
           end if;
  
!          if Opt.Verbose_Mode then
              Output.Write_Str (Exec_Path.all);
  
              for Arg in The_Args'Range loop
--- 1871,1877 ----
              raise Normal_Exit;
           end if;
  
!          if Verbose_Mode then
              Output.Write_Str (Exec_Path.all);
  
              for Arg in The_Args'Range loop
*************** exception
*** 1338,1342 ****
        else
           Set_Exit_Status (My_Exit_Status);
        end if;
- 
  end GNATCmd;
--- 1908,1911 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/gnatdll.adb gcc-4.0.0/gcc/ada/gnatdll.adb
*** gcc-3.4.3/gcc/ada/gnatdll.adb	Thu Apr 24 17:54:04 2003
--- gcc-4.0.0/gcc/ada/gnatdll.adb	Mon Oct  4 14:58:20 2004
***************
*** 2,12 ****
  --                                                                          --
  --                         GNAT COMPILER COMPONENTS                         --
  --                                                                          --
! --                               G N A T D L L                              --
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2002, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 2,12 ----
  --                                                                          --
  --                         GNAT COMPILER COMPONENTS                         --
  --                                                                          --
! --                              G N A T D L L                               --
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 27,51 ****
  --  GNATDLL is a Windows specific tool for building a DLL.
  --  Both relocatable and non-relocatable DLL's are supported
  
! with Ada.Text_IO;
! with Ada.Strings.Unbounded;
! with Ada.Exceptions;
! with Ada.Command_Line;
! with GNAT.OS_Lib;
! with GNAT.Command_Line;
  with Gnatvsn;
  
! with MDLL.Fil;
! with MDLL.Utl;
  
  procedure Gnatdll is
  
!    use GNAT;
!    use Ada;
!    use MDLL;
!    use Ada.Strings.Unbounded;
! 
!    use type OS_Lib.Argument_List;
  
     procedure Syntax;
     --  Print out usage
--- 27,46 ----
  --  GNATDLL is a Windows specific tool for building a DLL.
  --  Both relocatable and non-relocatable DLL's are supported
  
! with Ada.Text_IO;           use Ada.Text_IO;
! with Ada.Strings.Unbounded; use Ada.Strings.Unbounded;
! with Ada.Exceptions;        use Ada.Exceptions;
! with Ada.Command_Line;      use Ada.Command_Line;
! with GNAT.OS_Lib;           use GNAT.OS_Lib;
! with GNAT.Command_Line;     use GNAT.Command_Line;
  with Gnatvsn;
  
! with MDLL.Fil;              use MDLL.Fil;
! with MDLL.Utl;              use MDLL.Utl;
  
  procedure Gnatdll is
  
!    use type GNAT.OS_Lib.Argument_List;
  
     procedure Syntax;
     --  Print out usage
*************** procedure Gnatdll is
*** 59,65 ****
     procedure Check_Context;
     --  Check the context before runing any commands to build the library
  
!    Syntax_Error  : exception;
     --  Raised when a syntax error is detected, in this case a usage info will
     --  be displayed.
  
--- 54,60 ----
     procedure Check_Context;
     --  Check the context before runing any commands to build the library
  
!    Syntax_Error : exception;
     --  Raised when a syntax error is detected, in this case a usage info will
     --  be displayed.
  
*************** procedure Gnatdll is
*** 76,106 ****
     Default_DLL_Address : constant String := "0x11000000";
     --  Default address for non relocatable DLL (Win32)
  
!    Lib_Filename        : Unbounded_String := Null_Unbounded_String;
     --  The DLL filename that will be created (.dll)
  
!    Def_Filename        : Unbounded_String := Null_Unbounded_String;
     --  The definition filename (.def)
  
!    List_Filename       : Unbounded_String := Null_Unbounded_String;
     --  The name of the file containing the objects file to put into the DLL
  
!    DLL_Address         : Unbounded_String :=
!                            To_Unbounded_String (Default_DLL_Address);
     --  The DLL's base address
  
!    Objects_Files : Argument_List_Access := Null_Argument_List_Access;
     --  List of objects to put inside the library
  
!    Ali_Files : Argument_List_Access := Null_Argument_List_Access;
     --  For each Ada file specified, we keep arecord of the corresponding
     --  ALI file. This list of SLI files is used to build the binder program.
  
!    Options : Argument_List_Access := Null_Argument_List_Access;
!    --  A list of options set in the command line.
  
!    Largs_Options : Argument_List_Access := Null_Argument_List_Access;
!    Bargs_Options : Argument_List_Access := Null_Argument_List_Access;
     --  GNAT linker and binder args options
  
     type Build_Mode_State is (Import_Lib, Dynamic_Lib, Dynamic_Lib_Only, Nil);
--- 71,103 ----
     Default_DLL_Address : constant String := "0x11000000";
     --  Default address for non relocatable DLL (Win32)
  
!    Lib_Filename : Unbounded_String := Null_Unbounded_String;
     --  The DLL filename that will be created (.dll)
  
!    Def_Filename : Unbounded_String := Null_Unbounded_String;
     --  The definition filename (.def)
  
!    List_Filename : Unbounded_String := Null_Unbounded_String;
     --  The name of the file containing the objects file to put into the DLL
  
!    DLL_Address : Unbounded_String := To_Unbounded_String (Default_DLL_Address);
     --  The DLL's base address
  
!    Gen_Map_File : Boolean := False;
!    --  Set to True if a map file is to be generated
! 
!    Objects_Files : Argument_List_Access := MDLL.Null_Argument_List_Access;
     --  List of objects to put inside the library
  
!    Ali_Files : Argument_List_Access := MDLL.Null_Argument_List_Access;
     --  For each Ada file specified, we keep arecord of the corresponding
     --  ALI file. This list of SLI files is used to build the binder program.
  
!    Options : Argument_List_Access := MDLL.Null_Argument_List_Access;
!    --  A list of options set in the command line
  
!    Largs_Options : Argument_List_Access := MDLL.Null_Argument_List_Access;
!    Bargs_Options : Argument_List_Access := MDLL.Null_Argument_List_Access;
     --  GNAT linker and binder args options
  
     type Build_Mode_State is (Import_Lib, Dynamic_Lib, Dynamic_Lib_Only, Nil);
*************** procedure Gnatdll is
*** 109,116 ****
     --  Dynamic_Lib_Only means that only the DLL will be created (no import
     --  library).
  
!    Build_Mode             : Build_Mode_State := Nil;
!    --  Will be set when parsing the command line.
  
     Must_Build_Relocatable : Boolean := True;
     --  True means build a relocatable DLL, will be set to False if a
--- 106,113 ----
     --  Dynamic_Lib_Only means that only the DLL will be created (no import
     --  library).
  
!    Build_Mode : Build_Mode_State := Nil;
!    --  Will be set when parsing the command line
  
     Must_Build_Relocatable : Boolean := True;
     --  True means build a relocatable DLL, will be set to False if a
*************** procedure Gnatdll is
*** 121,130 ****
     ------------
  
     procedure Syntax is
!       use Text_IO;
! 
!       procedure P (Str : in String) renames Text_IO.Put_Line;
! 
     begin
        P ("Usage : gnatdll [options] [list-of-files]");
        New_Line;
--- 118,124 ----
     ------------
  
     procedure Syntax is
!       procedure P (Str : String) renames Put_Line;
     begin
        P ("Usage : gnatdll [options] [list-of-files]");
        New_Line;
*************** procedure Gnatdll is
*** 148,153 ****
--- 142,148 ----
        P ("   -a[addr]      Build non-relocatable DLL at address <addr>");
        P ("                 if <addr> is not specified use "
           & Default_DLL_Address);
+       P ("   -m            Generate map file");
        P ("   -n            No-import - do not create the import library");
        P ("   -bargs opts   opts are passed to the binder");
        P ("   -largs opts   opts are passed to the linker");
*************** procedure Gnatdll is
*** 159,167 ****
  
     procedure Check (Filename : in String) is
     begin
!       if not OS_Lib.Is_Regular_File (Filename) then
!          Exceptions.Raise_Exception (Context_Error'Identity,
!                                      "Error: " & Filename & " not found.");
        end if;
     end Check;
  
--- 154,162 ----
  
     procedure Check (Filename : in String) is
     begin
!       if not Is_Regular_File (Filename) then
!          Raise_Exception
!            (Context_Error'Identity, "Error: " & Filename & " not found.");
        end if;
     end Check;
  
*************** procedure Gnatdll is
*** 186,214 ****
        --  No, a better choice would be to use tables ???
        --  Limits on what???
  
!       Ofiles : OS_Lib.Argument_List (1 .. Max_Files);
        O      : Positive := Ofiles'First;
        --  List of object files to put in the library. O is the next entry
        --  to be used.
  
!       Afiles : OS_Lib.Argument_List (1 .. Max_Files);
        A      : Positive := Afiles'First;
!       --  List of ALI files. A is the next entry to be used.
  
!       Gopts  : OS_Lib.Argument_List (1 .. Max_Options);
        G      : Positive := Gopts'First;
!       --  List of gcc options. G is the next entry to be used.
  
!       Lopts  : OS_Lib.Argument_List (1 .. Max_Options);
        L      : Positive := Lopts'First;
        --  A list of -largs options (L is next entry to be used)
  
!       Bopts  : OS_Lib.Argument_List (1 .. Max_Options);
        B      : Positive := Bopts'First;
        --  A list of -bargs options (B is next entry to be used)
  
        Build_Import : Boolean := True;
!       --  Set to Fals if option -n if specified (no-import).
  
        --------------
        -- Add_File --
--- 181,209 ----
        --  No, a better choice would be to use tables ???
        --  Limits on what???
  
!       Ofiles : Argument_List (1 .. Max_Files);
        O      : Positive := Ofiles'First;
        --  List of object files to put in the library. O is the next entry
        --  to be used.
  
!       Afiles : Argument_List (1 .. Max_Files);
        A      : Positive := Afiles'First;
!       --  List of ALI files. A is the next entry to be used
  
!       Gopts  : Argument_List (1 .. Max_Options);
        G      : Positive := Gopts'First;
!       --  List of gcc options. G is the next entry to be used
  
!       Lopts  : Argument_List (1 .. Max_Options);
        L      : Positive := Lopts'First;
        --  A list of -largs options (L is next entry to be used)
  
!       Bopts  : Argument_List (1 .. Max_Options);
        B      : Positive := Bopts'First;
        --  A list of -bargs options (B is next entry to be used)
  
        Build_Import : Boolean := True;
!       --  Set to Fals if option -n if specified (no-import)
  
        --------------
        -- Add_File --
*************** procedure Gnatdll is
*** 216,223 ****
  
        procedure Add_File (Filename : in String) is
        begin
!          if Fil.Is_Ali (Filename) then
! 
              Check (Filename);
  
              --  Record it to generate the binder program when
--- 211,217 ----
  
        procedure Add_File (Filename : in String) is
        begin
!          if Is_Ali (Filename) then
              Check (Filename);
  
              --  Record it to generate the binder program when
*************** procedure Gnatdll is
*** 226,233 ****
              Afiles (A) := new String'(Filename);
              A := A + 1;
  
!          elsif Fil.Is_Obj (Filename) then
! 
              Check (Filename);
  
              --  Just record this object file
--- 220,226 ----
              Afiles (A) := new String'(Filename);
              A := A + 1;
  
!          elsif Is_Obj (Filename) then
              Check (Filename);
  
              --  Just record this object file
*************** procedure Gnatdll is
*** 238,244 ****
           else
              --  Unknown file type
  
!             Exceptions.Raise_Exception
                (Syntax_Error'Identity,
                 "don't know what to do with " & Filename & " !");
           end if;
--- 231,237 ----
           else
              --  Unknown file type
  
!             Raise_Exception
                (Syntax_Error'Identity,
                 "don't know what to do with " & Filename & " !");
           end if;
*************** procedure Gnatdll is
*** 249,267 ****
        -------------------------
  
        procedure Add_Files_From_List (List_Filename : in String) is
!          File   : Text_IO.File_Type;
           Buffer : String (1 .. 500);
           Last   : Natural;
  
        begin
!          Text_IO.Open (File, Text_IO.In_File, List_Filename);
  
!          while not Text_IO.End_Of_File (File) loop
!             Text_IO.Get_Line (File, Buffer, Last);
              Add_File (Buffer (1 .. Last));
           end loop;
  
!          Text_IO.Close (File);
        end Add_Files_From_List;
  
     --  Start of processing for Parse_Command_Line
--- 242,260 ----
        -------------------------
  
        procedure Add_Files_From_List (List_Filename : in String) is
!          File   : File_Type;
           Buffer : String (1 .. 500);
           Last   : Natural;
  
        begin
!          Open (File, In_File, List_Filename);
  
!          while not End_Of_File (File) loop
!             Get_Line (File, Buffer, Last);
              Add_File (Buffer (1 .. Last));
           end loop;
  
!          Close (File);
        end Add_Files_From_List;
  
     --  Start of processing for Parse_Command_Line
*************** procedure Gnatdll is
*** 272,278 ****
        --  scan gnatdll switches
  
        loop
!          case Getopt ("g h v q k a? b: d: e: l: n I:") is
  
              when ASCII.Nul =>
                 exit;
--- 265,271 ----
        --  scan gnatdll switches
  
        loop
!          case Getopt ("g h v q k a? b: d: e: l: n m I:") is
  
              when ASCII.Nul =>
                 exit;
*************** procedure Gnatdll is
*** 290,296 ****
  
                 MDLL.Verbose := True;
                 if MDLL.Quiet then
!                   Exceptions.Raise_Exception
                      (Syntax_Error'Identity,
                       "impossible to use -q and -v together.");
                 end if;
--- 283,289 ----
  
                 MDLL.Verbose := True;
                 if MDLL.Quiet then
!                   Raise_Exception
                      (Syntax_Error'Identity,
                       "impossible to use -q and -v together.");
                 end if;
*************** procedure Gnatdll is
*** 301,307 ****
  
                 MDLL.Quiet := True;
                 if MDLL.Verbose then
!                   Exceptions.Raise_Exception
                      (Syntax_Error'Identity,
                       "impossible to use -v and -q together.");
                 end if;
--- 294,300 ----
  
                 MDLL.Quiet := True;
                 if MDLL.Verbose then
!                   Raise_Exception
                      (Syntax_Error'Identity,
                       "impossible to use -v and -q together.");
                 end if;
*************** procedure Gnatdll is
*** 343,353 ****
  
                 if Def_Filename = Null_Unbounded_String then
                    Def_Filename := To_Unbounded_String
!                     (Fil.Ext_To (Parameter, "def"));
                 end if;
  
                 Build_Mode := Dynamic_Lib;
  
              when 'n' =>
  
                 Build_Import := False;
--- 336,350 ----
  
                 if Def_Filename = Null_Unbounded_String then
                    Def_Filename := To_Unbounded_String
!                     (Ext_To (Parameter, "def"));
                 end if;
  
                 Build_Mode := Dynamic_Lib;
  
+             when 'm' =>
+ 
+                Gen_Map_File := True;
+ 
              when 'n' =>
  
                 Build_Import := False;
*************** procedure Gnatdll is
*** 361,367 ****
  
              when others =>
                 raise Invalid_Switch;
- 
           end case;
        end loop;
  
--- 358,363 ----
*************** procedure Gnatdll is
*** 382,395 ****
  
        loop
           case Getopt ("*") is
- 
              when ASCII.Nul =>
                 exit;
  
              when others =>
                 Lopts (L) := new String'(Full_Switch);
                 L := L + 1;
- 
           end case;
        end loop;
  
--- 378,389 ----
*************** procedure Gnatdll is
*** 416,427 ****
           Add_Files_From_List (To_String (List_Filename));
        end if;
  
!       --  Check if the set of parameters are compatible.
  
!       if Build_Mode = Nil and then not Help and then not Verbose then
!          Exceptions.Raise_Exception
!            (Syntax_Error'Identity,
!             "nothing to do.");
        end if;
  
        --  -n option but no file specified
--- 410,419 ----
           Add_Files_From_List (To_String (List_Filename));
        end if;
  
!       --  Check if the set of parameters are compatible
  
!       if Build_Mode = Nil and then not Help and then not MDLL.Verbose then
!          Raise_Exception (Syntax_Error'Identity, "nothing to do.");
        end if;
  
        --  -n option but no file specified
*************** procedure Gnatdll is
*** 430,436 ****
          and then A = Afiles'First
          and then O = Ofiles'First
        then
!          Exceptions.Raise_Exception
             (Syntax_Error'Identity,
              "-n specified but there are no objects to build the library.");
        end if;
--- 422,428 ----
          and then A = Afiles'First
          and then O = Ofiles'First
        then
!          Raise_Exception
             (Syntax_Error'Identity,
              "-n specified but there are no objects to build the library.");
        end if;
*************** procedure Gnatdll is
*** 445,488 ****
           Build_Mode := Import_Lib;
        end if;
  
!       --  Check if only a dynamic library must be built.
  
        if Build_Mode = Dynamic_Lib and then not Build_Import then
           Build_Mode := Dynamic_Lib_Only;
        end if;
  
        if O /= Ofiles'First then
!          Objects_Files := new OS_Lib.Argument_List'(Ofiles (1 .. O - 1));
        end if;
  
        if A /= Afiles'First then
!          Ali_Files     := new OS_Lib.Argument_List'(Afiles (1 .. A - 1));
        end if;
  
        if G /= Gopts'First then
!          Options       := new OS_Lib.Argument_List'(Gopts (1 .. G - 1));
        end if;
  
        if L /= Lopts'First then
!          Largs_Options := new OS_Lib.Argument_List'(Lopts (1 .. L - 1));
        end if;
  
        if B /= Bopts'First then
!          Bargs_Options := new OS_Lib.Argument_List'(Bopts (1 .. B - 1));
        end if;
  
     exception
- 
        when Invalid_Switch    =>
!          Exceptions.Raise_Exception
             (Syntax_Error'Identity,
              Message => "Invalid Switch " & Full_Switch);
  
        when Invalid_Parameter =>
!          Exceptions.Raise_Exception
             (Syntax_Error'Identity,
              Message => "No parameter for " & Full_Switch);
- 
     end Parse_Command_Line;
  
     -------------------
--- 437,486 ----
           Build_Mode := Import_Lib;
        end if;
  
!       --  If map file is to be generated, add linker option here
! 
!       if Gen_Map_File and then Build_Mode = Import_Lib then
!          Raise_Exception
!            (Syntax_Error'Identity,
!             "Can't generate a map file for an import library.");
!       end if;
! 
!       --  Check if only a dynamic library must be built
  
        if Build_Mode = Dynamic_Lib and then not Build_Import then
           Build_Mode := Dynamic_Lib_Only;
        end if;
  
        if O /= Ofiles'First then
!          Objects_Files := new Argument_List'(Ofiles (1 .. O - 1));
        end if;
  
        if A /= Afiles'First then
!          Ali_Files     := new Argument_List'(Afiles (1 .. A - 1));
        end if;
  
        if G /= Gopts'First then
!          Options       := new Argument_List'(Gopts (1 .. G - 1));
        end if;
  
        if L /= Lopts'First then
!          Largs_Options := new Argument_List'(Lopts (1 .. L - 1));
        end if;
  
        if B /= Bopts'First then
!          Bargs_Options := new Argument_List'(Bopts (1 .. B - 1));
        end if;
  
     exception
        when Invalid_Switch    =>
!          Raise_Exception
             (Syntax_Error'Identity,
              Message => "Invalid Switch " & Full_Switch);
  
        when Invalid_Parameter =>
!          Raise_Exception
             (Syntax_Error'Identity,
              Message => "No parameter for " & Full_Switch);
     end Parse_Command_Line;
  
     -------------------
*************** procedure Gnatdll is
*** 491,497 ****
  
     procedure Check_Context is
     begin
- 
        Check (To_String (Def_Filename));
  
        --  Check that each object file specified exists and raise exception
--- 489,494 ----
*************** begin
*** 512,520 ****
     end if;
  
     if MDLL.Verbose or else Help then
!       Text_IO.New_Line;
!       Text_IO.Put_Line ("GNATDLL " & Version & " - Dynamic Libraries Builder");
!       Text_IO.New_Line;
     end if;
  
     MDLL.Utl.Locate;
--- 509,517 ----
     end if;
  
     if MDLL.Verbose or else Help then
!       New_Line;
!       Put_Line ("GNATDLL " & Version & " - Dynamic Libraries Builder");
!       New_Line;
     end if;
  
     MDLL.Utl.Locate;
*************** begin
*** 527,533 ****
        Check_Context;
  
        case Build_Mode is
- 
           when Import_Lib =>
              MDLL.Build_Import_Library
                (To_String (Lib_Filename),
--- 524,529 ----
*************** begin
*** 544,550 ****
                 To_String (Def_Filename),
                 To_String (DLL_Address),
                 Build_Import => True,
!                Relocatable  => Must_Build_Relocatable);
  
           when Dynamic_Lib_Only =>
              MDLL.Build_Dynamic_Library
--- 540,547 ----
                 To_String (Def_Filename),
                 To_String (DLL_Address),
                 Build_Import => True,
!                Relocatable  => Must_Build_Relocatable,
!                Map_File     => Gen_Map_File);
  
           when Dynamic_Lib_Only =>
              MDLL.Build_Dynamic_Library
*************** begin
*** 557,587 ****
                 To_String (Def_Filename),
                 To_String (DLL_Address),
                 Build_Import => False,
!                Relocatable  => Must_Build_Relocatable);
  
           when Nil =>
              null;
- 
        end case;
- 
     end if;
  
!    Ada.Command_Line.Set_Exit_Status (Ada.Command_Line.Success);
  
  exception
- 
     when SE : Syntax_Error =>
!       Text_IO.Put_Line ("Syntax error : " & Exceptions.Exception_Message (SE));
!       Text_IO.New_Line;
        Syntax;
!       Ada.Command_Line.Set_Exit_Status (Ada.Command_Line.Failure);
  
!    when E : Tools_Error | Context_Error =>
!       Text_IO.Put_Line (Exceptions.Exception_Message (E));
!       Ada.Command_Line.Set_Exit_Status (Ada.Command_Line.Failure);
  
     when others =>
!       Text_IO.Put_Line ("gnatdll: INTERNAL ERROR. Please report");
!       Ada.Command_Line.Set_Exit_Status (Ada.Command_Line.Failure);
! 
  end Gnatdll;
--- 554,581 ----
                 To_String (Def_Filename),
                 To_String (DLL_Address),
                 Build_Import => False,
!                Relocatable  => Must_Build_Relocatable,
!                Map_File     => Gen_Map_File);
  
           when Nil =>
              null;
        end case;
     end if;
  
!    Set_Exit_Status (Success);
  
  exception
     when SE : Syntax_Error =>
!       Put_Line ("Syntax error : " & Exception_Message (SE));
!       New_Line;
        Syntax;
!       Set_Exit_Status (Failure);
  
!    when E : MDLL.Tools_Error | Context_Error =>
!       Put_Line (Exception_Message (E));
!       Set_Exit_Status (Failure);
  
     when others =>
!       Put_Line ("gnatdll: INTERNAL ERROR. Please report");
!       Set_Exit_Status (Failure);
  end Gnatdll;
diff -Nrcpad gcc-3.4.3/gcc/ada/gnatfind.adb gcc-4.0.0/gcc/ada/gnatfind.adb
*** gcc-3.4.3/gcc/ada/gnatfind.adb	Mon Jan  5 15:20:44 2004
--- gcc-4.0.0/gcc/ada/gnatfind.adb	Thu Feb 10 13:57:00 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 1998-2004 Free Software Foundation, Inc.           --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 1998-2005 Free Software Foundation, Inc.           --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Ada.Strings.Fixed; use Ada.Strings.
*** 36,44 ****
  with Ada.Text_IO;       use Ada.Text_IO;
  with GNAT.Command_Line; use GNAT.Command_Line;
  with GNAT.Strings;      use GNAT.Strings;
! ---------------
! --  Gnatfind --
! ---------------
  
  procedure Gnatfind is
     Output_Ref      : Boolean := False;
--- 36,45 ----
  with Ada.Text_IO;       use Ada.Text_IO;
  with GNAT.Command_Line; use GNAT.Command_Line;
  with GNAT.Strings;      use GNAT.Strings;
! 
! --------------
! -- Gnatfind --
! --------------
  
  procedure Gnatfind is
     Output_Ref      : Boolean := False;
*************** procedure Gnatfind is
*** 86,95 ****
              when 'a'    =>
                 if GNAT.Command_Line.Full_Switch = "a" then
                    Read_Only := True;
- 
                 elsif GNAT.Command_Line.Full_Switch = "aI" then
                    Osint.Add_Src_Search_Dir (GNAT.Command_Line.Parameter);
- 
                 else
                    Osint.Add_Lib_Search_Dir (GNAT.Command_Line.Parameter);
                 end if;
--- 87,94 ----
*************** procedure Gnatfind is
*** 116,122 ****
              when 'n'    =>
                 if GNAT.Command_Line.Full_Switch = "nostdinc" then
                    Opt.No_Stdinc := True;
- 
                 elsif GNAT.Command_Line.Full_Switch = "nostlib" then
                    Opt.No_Stdlib := True;
                 end if;
--- 115,120 ----
*************** procedure Gnatfind is
*** 124,130 ****
              when 'p'    =>
                 declare
                    S : constant String := GNAT.Command_Line.Parameter;
- 
                 begin
                    Prj_File_Length := S'Length;
                    Prj_File (1 .. Prj_File_Length) := S;
--- 122,127 ----
*************** procedure Gnatfind is
*** 208,213 ****
--- 205,211 ----
                 end if;
  
              --  Next arguments are the files to search
+ 
              else
                 Add_Xref_File (S);
                 Wide_Search := False;
*************** procedure Gnatfind is
*** 238,245 ****
  
     procedure Write_Usage is
     begin
!       Put_Line ("GNATFIND " & Gnatvsn.Gnat_Version_String
!                 & " Copyright 1998-2004, Ada Core Technologies Inc.");
        Put_Line ("Usage: gnatfind pattern[:sourcefile[:line[:column]]] "
                  & "[file1 file2 ...]");
        New_Line;
--- 236,243 ----
  
     procedure Write_Usage is
     begin
!       Put_Line ("GNATFIND " & Gnatvsn.Gnat_Version_String);
!       Put_Line ("Copyright 1998-2005, Ada Core Technologies Inc.");
        Put_Line ("Usage: gnatfind pattern[:sourcefile[:line[:column]]] "
                  & "[file1 file2 ...]");
        New_Line;
diff -Nrcpad gcc-3.4.3/gcc/ada/gnatlbr.adb gcc-4.0.0/gcc/ada/gnatlbr.adb
*** gcc-3.4.3/gcc/ada/gnatlbr.adb	Mon Jan  5 15:20:44 2004
--- gcc-4.0.0/gcc/ada/gnatlbr.adb	Thu Feb 10 13:49:14 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** procedure GnatLbr is
*** 61,67 ****
     Make_Path : String_Access;
  
     procedure Create_Directory (Name : System.Address; Mode : Integer);
!    pragma Import (C, Create_Directory, "mkdir");
  
  begin
     if Argument_Count = 0 then
--- 61,67 ----
     Make_Path : String_Access;
  
     procedure Create_Directory (Name : System.Address; Mode : Integer);
!    pragma Import (C, Create_Directory, "decc$mkdir");
  
  begin
     if Argument_Count = 0 then
diff -Nrcpad gcc-3.4.3/gcc/ada/gnatlink.adb gcc-4.0.0/gcc/ada/gnatlink.adb
*** gcc-3.4.3/gcc/ada/gnatlink.adb	Tue Jan 13 11:51:32 2004
--- gcc-4.0.0/gcc/ada/gnatlink.adb	Thu Feb 10 13:57:00 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1996-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1996-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 29,34 ****
--- 29,35 ----
  with ALI;      use ALI;
  with Gnatvsn;  use Gnatvsn;
  with Hostparm;
+ with Indepsw;  use Indepsw;
  with Namet;    use Namet;
  with Opt;
  with Osint;    use Osint;
*************** with Ada.Command_Line;     use Ada.Comma
*** 42,47 ****
--- 43,49 ----
  with Ada.Exceptions;       use Ada.Exceptions;
  with GNAT.OS_Lib;          use GNAT.OS_Lib;
  with Interfaces.C_Streams; use Interfaces.C_Streams;
+ with Interfaces.C.Strings; use Interfaces.C.Strings;
  with System.CRTL;
  
  procedure Gnatlink is
*************** procedure Gnatlink is
*** 121,128 ****
     --  This table collects the arguments to be passed to compile the binder
     --  generated file.
  
-    subtype chars_ptr is System.Address;
- 
     Gcc : String_Access := Program_Name ("gcc");
  
     Read_Mode  : constant String := "r" & ASCII.Nul;
--- 123,128 ----
*************** procedure Gnatlink is
*** 158,165 ****
     Compile_Bind_File : Boolean := True;
     --  Set to False if bind file is not to be compiled
  
     Object_List_File_Supported : Boolean;
!    pragma Import (C, Object_List_File_Supported, "objlist_file_supported");
     --  Predicate indicating whether the linker has an option whereby the
     --  names of object files can be passed to the linker in a file.
  
--- 158,170 ----
     Compile_Bind_File : Boolean := True;
     --  Set to False if bind file is not to be compiled
  
+    Create_Map_File : Boolean := False;
+    --  Set to True by switch -M. The map file name is derived from
+    --  the ALI file name (mainprog.ali => mainprog.map).
+ 
     Object_List_File_Supported : Boolean;
!    pragma Import
!      (C, Object_List_File_Supported, "__gnat_objlist_file_supported");
     --  Predicate indicating whether the linker has an option whereby the
     --  names of object files can be passed to the linker in a file.
  
*************** procedure Gnatlink is
*** 167,197 ****
     --  Set to True to force generation of a response file
  
     function Base_Name (File_Name : in String) return String;
!    --  Return just the file name part without the extension (if present).
  
     procedure Delete (Name : in String);
!    --  Wrapper to unlink as status is ignored by this application.
  
     procedure Error_Msg (Message : in String);
     --  Output the error or warning Message
  
     procedure Exit_With_Error (Error : in String);
!    --  Output Error and exit program with a fatal condition.
  
     procedure Process_Args;
!    --  Go through all the arguments and build option tables.
  
     procedure Process_Binder_File (Name : in String);
!    --  Reads the binder file and extracts linker arguments.
! 
!    function Value (chars : chars_ptr) return String;
!    --  Return NUL-terminated string chars as an Ada string.
  
     procedure Write_Header;
!    --  Show user the program name, version and copyright.
  
     procedure Write_Usage;
!    --  Show user the program options.
  
     ---------------
     -- Base_Name --
--- 172,199 ----
     --  Set to True to force generation of a response file
  
     function Base_Name (File_Name : in String) return String;
!    --  Return just the file name part without the extension (if present)
  
     procedure Delete (Name : in String);
!    --  Wrapper to unlink as status is ignored by this application
  
     procedure Error_Msg (Message : in String);
     --  Output the error or warning Message
  
     procedure Exit_With_Error (Error : in String);
!    --  Output Error and exit program with a fatal condition
  
     procedure Process_Args;
!    --  Go through all the arguments and build option tables
  
     procedure Process_Binder_File (Name : in String);
!    --  Reads the binder file and extracts linker arguments
  
     procedure Write_Header;
!    --  Show user the program name, version and copyright
  
     procedure Write_Usage;
!    --  Show user the program options
  
     ---------------
     -- Base_Name --
*************** procedure Gnatlink is
*** 330,335 ****
--- 332,352 ----
                    Binder_Options.Table (Binder_Options.Last) :=
                      Linker_Options.Table (Linker_Options.Last);
  
+                elsif Arg'Length >= 3 and then Arg (2) = 'M' then
+                   declare
+                      Switches : String_List_Access;
+                   begin
+                      Convert (Map_File, Arg (3 .. Arg'Last), Switches);
+ 
+                      if Switches /= null then
+                         for J in Switches'Range loop
+                            Linker_Options.Increment_Last;
+                            Linker_Options.Table (Linker_Options.Last) :=
+                              Switches (J);
+                         end loop;
+                      end if;
+                   end;
+ 
                 elsif Arg'Length = 2 then
                    case Arg (2) is
                       when 'A' =>
*************** procedure Gnatlink is
*** 380,385 ****
--- 397,405 ----
                               ("Object list file not supported on this target");
                          end if;
  
+                      when 'M' =>
+                         Create_Map_File := True;
+ 
                       when 'n' =>
                          Compile_Bind_File := False;
  
*************** procedure Gnatlink is
*** 494,500 ****
                                  new String'(Arg);
                             end if;
  
!                            --  Pass to gcc for linking program.
  
                             Gcc_Linker_Options.Increment_Last;
                             Gcc_Linker_Options.Table
--- 514,520 ----
                                  new String'(Arg);
                             end if;
  
!                            --  Pass to gcc for linking program
  
                             Gcc_Linker_Options.Increment_Last;
                             Gcc_Linker_Options.Table
*************** procedure Gnatlink is
*** 591,597 ****
        --  Projected number of bytes for the linker command line
  
        Link_Max : Integer;
!       pragma Import (C, Link_Max, "link_max");
        --  Maximum number of bytes on the command line supported by the OS
        --  linker. Passed this limit the response file mechanism must be used
        --  if supported.
--- 611,617 ----
        --  Projected number of bytes for the linker command line
  
        Link_Max : Integer;
!       pragma Import (C, Link_Max, "__gnat_link_max");
        --  Maximum number of bytes on the command line supported by the OS
        --  linker. Passed this limit the response file mechanism must be used
        --  if supported.
*************** procedure Gnatlink is
*** 619,628 ****
        --  For call to Close
  
        GNAT_Static : Boolean := False;
!       --  Save state of -static option.
  
        GNAT_Shared : Boolean := False;
!       --  Save state of -shared option.
  
        Xlinker_Was_Previous : Boolean := False;
        --  Indicate that "-Xlinker" was the option preceding the current
--- 639,648 ----
        --  For call to Close
  
        GNAT_Static : Boolean := False;
!       --  Save state of -static option
  
        GNAT_Shared : Boolean := False;
!       --  Save state of -shared option
  
        Xlinker_Was_Previous : Boolean := False;
        --  Indicate that "-Xlinker" was the option preceding the current
*************** procedure Gnatlink is
*** 652,684 ****
        RB_Nlast     : Integer;             -- Slice last index
        RB_Nfirst    : Integer;             -- Slice first index
  
!       Run_Path_Option_Ptr : Address;
!       pragma Import (C, Run_Path_Option_Ptr, "run_path_option");
        --  Pointer to string representing the native linker option which
        --  specifies the path where the dynamic loader should find shared
        --  libraries. Equal to null string if this system doesn't support it.
  
!       Object_Library_Ext_Ptr : Address;
!       pragma Import (C, Object_Library_Ext_Ptr, "object_library_extension");
        --  Pointer to string specifying the default extension for
        --  object libraries, e.g. Unix uses ".a", VMS uses ".olb".
  
!       Object_File_Option_Ptr : Address;
!       pragma Import (C, Object_File_Option_Ptr, "object_file_option");
        --  Pointer to a string representing the linker option which specifies
        --  the response file.
  
        Using_GNU_Linker : Boolean;
!       pragma Import (C, Using_GNU_Linker, "using_gnu_linker");
        --  Predicate indicating whether this target uses the GNU linker. In
        --  this case we must output a GNU linker compatible response file.
  
        procedure Get_Next_Line;
        --  Read the next line from the binder file without the line
        --  terminator.
  
        function Index (S, Pattern : String) return Natural;
!       --  Return the last occurrence of Pattern in S, or 0 if none.
  
        function Is_Option_Present (Opt : in String) return Boolean;
        --  Return true if the option Opt is already present in
--- 672,710 ----
        RB_Nlast     : Integer;             -- Slice last index
        RB_Nfirst    : Integer;             -- Slice first index
  
!       Run_Path_Option_Ptr : Interfaces.C.Strings.chars_ptr;
!       pragma Import (C, Run_Path_Option_Ptr, "__gnat_run_path_option");
        --  Pointer to string representing the native linker option which
        --  specifies the path where the dynamic loader should find shared
        --  libraries. Equal to null string if this system doesn't support it.
  
!       Object_Library_Ext_Ptr : Interfaces.C.Strings.chars_ptr;
!       pragma Import
!         (C, Object_Library_Ext_Ptr, "__gnat_object_library_extension");
        --  Pointer to string specifying the default extension for
        --  object libraries, e.g. Unix uses ".a", VMS uses ".olb".
  
!       Object_File_Option_Ptr : Interfaces.C.Strings.chars_ptr;
!       pragma Import (C, Object_File_Option_Ptr, "__gnat_object_file_option");
        --  Pointer to a string representing the linker option which specifies
        --  the response file.
  
        Using_GNU_Linker : Boolean;
!       pragma Import (C, Using_GNU_Linker, "__gnat_using_gnu_linker");
        --  Predicate indicating whether this target uses the GNU linker. In
        --  this case we must output a GNU linker compatible response file.
  
+       Opening : aliased constant String := """";
+       Closing : aliased constant String := '"' & ASCII.LF;
+       --  Needed to quote object paths in object list files when GNU linker
+       --  is used.
+ 
        procedure Get_Next_Line;
        --  Read the next line from the binder file without the line
        --  terminator.
  
        function Index (S, Pattern : String) return Natural;
!       --  Return the last occurrence of Pattern in S, or 0 if none
  
        function Is_Option_Present (Opt : in String) return Boolean;
        --  Return true if the option Opt is already present in
*************** procedure Gnatlink is
*** 883,888 ****
--- 909,916 ----
           --  If target is using the GNU linker we must add a special header
           --  and footer in the response file.
           --  The syntax is : INPUT (object1.o object2.o ... )
+          --  Because the GNU linker does not like name with characters such
+          --  as '!', we must put the object paths between double quotes.
  
           if Using_GNU_Linker then
              declare
*************** procedure Gnatlink is
*** 895,910 ****
           end if;
  
           for J in Objs_Begin .. Objs_End loop
              Status := Write (Tname_FD, Linker_Objects.Table (J).all'Address,
!               Linker_Objects.Table (J).all'Length);
!             Status := Write (Tname_FD, ASCII.LF'Address, 1);
  
              Response_File_Objects.Increment_Last;
              Response_File_Objects.Table (Response_File_Objects.Last) :=
                Linker_Objects.Table (J);
           end loop;
  
!          --  handle GNU linker response file footer.
  
           if Using_GNU_Linker then
              declare
--- 923,953 ----
           end if;
  
           for J in Objs_Begin .. Objs_End loop
+ 
+             --  Opening quote for GNU linker
+ 
+             if Using_GNU_Linker then
+                Status := Write (Tname_FD, Opening'Address, 1);
+             end if;
+ 
              Status := Write (Tname_FD, Linker_Objects.Table (J).all'Address,
!                              Linker_Objects.Table (J).all'Length);
! 
!             --  Closing quote for GNU linker
! 
!             if Using_GNU_Linker then
!                Status := Write (Tname_FD, Closing'Address, 2);
! 
!             else
!                Status := Write (Tname_FD, ASCII.LF'Address, 1);
!             end if;
  
              Response_File_Objects.Increment_Last;
              Response_File_Objects.Table (Response_File_Objects.Last) :=
                Linker_Objects.Table (J);
           end loop;
  
!          --  Handle GNU linker response file footer
  
           if Using_GNU_Linker then
              declare
*************** procedure Gnatlink is
*** 966,972 ****
              --  Add binder options only if not already set on the command
              --  line. This rule is a way to control the linker options order.
  
!             elsif not Is_Option_Present (Next_Line (Nfirst .. Nlast)) then
                 if Nlast > Nfirst + 2 and then
                   Next_Line (Nfirst .. Nfirst + 1) = "-L"
                 then
--- 1009,1021 ----
              --  Add binder options only if not already set on the command
              --  line. This rule is a way to control the linker options order.
  
!             --  The following test needs comments, why is it VMS specific.
!             --  The above comment looks out of date ???
! 
!             elsif not (Hostparm.OpenVMS
!                          and then
!                        Is_Option_Present (Next_Line (Nfirst .. Nlast)))
!             then
                 if Nlast > Nfirst + 2 and then
                   Next_Line (Nfirst .. Nfirst + 1) = "-L"
                 then
*************** procedure Gnatlink is
*** 1219,1249 ****
        Status := fclose (Fd);
     end Process_Binder_File;
  
-    -----------
-    -- Value --
-    -----------
- 
-    function Value (chars : chars_ptr) return String is
-       function Strlen (chars : chars_ptr) return Natural;
-       pragma Import (C, Strlen);
- 
-    begin
-       if chars = Null_Address then
-          return "";
- 
-       else
-          declare
-             subtype Result_Type is String (1 .. Strlen (chars));
- 
-             Result : Result_Type;
-             for Result'Address use chars;
- 
-          begin
-             return Result;
-          end;
-       end if;
-    end Value;
- 
     ------------------
     -- Write_Header --
     ------------------
--- 1268,1273 ----
*************** procedure Gnatlink is
*** 1254,1260 ****
           Write_Eol;
           Write_Str ("GNATLINK ");
           Write_Str (Gnat_Version_String);
!          Write_Str (" Copyright 1995-2004 Free Software Foundation, Inc");
           Write_Eol;
        end if;
     end Write_Header;
--- 1278,1285 ----
           Write_Eol;
           Write_Str ("GNATLINK ");
           Write_Str (Gnat_Version_String);
!          Write_Eol;
!          Write_Str ("Copyright 1995-2005 Free Software Foundation, Inc");
           Write_Eol;
        end if;
     end Write_Header;
*************** procedure Gnatlink is
*** 1286,1291 ****
--- 1311,1322 ----
        Write_Line ("  -o nam     Use 'nam' as the name of the executable");
        Write_Line ("  -b target  Compile the binder source to run on target");
        Write_Line ("  -Bdir      Load compiler executables from dir");
+ 
+       if Is_Supported (Map_File) then
+          Write_Line ("  -Mmap      Create map file map");
+          Write_Line ("  -M         Create map file mainprog.map");
+       end if;
+ 
        Write_Line ("  --GCC=comp Use comp as the compiler");
        Write_Line ("  --LINK=nam Use 'nam' for the linking rather than 'gcc'");
        Write_Eol;
*************** procedure Gnatlink is
*** 1296,1301 ****
--- 1327,1364 ----
  --  Start of processing for Gnatlink
  
  begin
+    --  Add the directory where gnatlink is invoked in front of the
+    --  path, if gnatlink is invoked with directory information.
+    --  Only do this if the platform is not VMS, where the notion of path
+    --  does not really exist.
+ 
+    if not Hostparm.OpenVMS then
+       declare
+          Command : constant String := Command_Name;
+ 
+       begin
+          for Index in reverse Command'Range loop
+             if Command (Index) = Directory_Separator then
+                declare
+                   Absolute_Dir : constant String :=
+                                    Normalize_Pathname
+                                      (Command (Command'First .. Index));
+ 
+                   PATH         : constant String :=
+                                    Absolute_Dir &
+                   Path_Separator &
+                   Getenv ("PATH").all;
+ 
+                begin
+                   Setenv ("PATH", PATH);
+                end;
+ 
+                exit;
+             end if;
+          end loop;
+       end;
+    end if;
+ 
     Process_Args;
  
     if Argument_Count = 0
*************** begin
*** 1387,1395 ****
  
           T := Read_Library_Info (F, True);
  
!          --  Read it
  
!          A := Scan_ALI (F, T, Ignore_ED => False, Err => False);
  
           if A /= No_ALI_Id then
              for
--- 1450,1466 ----
  
           T := Read_Library_Info (F, True);
  
!          --  Read it. Note that we ignore errors, since we only want very
!          --  limited information from the ali file, and likely a slightly
!          --  wrong version will be just fine, though in normal operation
!          --  we don't expect this to happen!
  
!          A := Scan_ALI
!                (F,
!                 T,
!                 Ignore_ED     => False,
!                 Err           => False,
!                 Ignore_Errors => True);
  
           if A /= No_ALI_Id then
              for
*************** begin
*** 1397,1408 ****
                         Units.Table (ALIs.Table (A).First_Unit).Last_Arg
              loop
                 --  Do not compile with the front end switches except for --RTS
  
                 declare
                    Arg : String_Ptr renames Args.Table (Index);
                 begin
                    if not Is_Front_End_Switch (Arg.all)
!                     or else Arg (Arg'First + 2 .. Arg'First + 5) = "RTS="
                    then
                       Binder_Options_From_ALI.Increment_Last;
                       Binder_Options_From_ALI.Table
--- 1468,1483 ----
                         Units.Table (ALIs.Table (A).First_Unit).Last_Arg
              loop
                 --  Do not compile with the front end switches except for --RTS
+                --  if the binder generated file is in Ada.
  
                 declare
                    Arg : String_Ptr renames Args.Table (Index);
                 begin
                    if not Is_Front_End_Switch (Arg.all)
!                     or else
!                       (Ada_Bind_File
!                         and then Arg'Length > 5
!                         and then Arg (Arg'First + 2 .. Arg'First + 5) = "RTS=")
                    then
                       Binder_Options_From_ALI.Increment_Last;
                       Binder_Options_From_ALI.Table
*************** begin
*** 1438,1445 ****
     --  on Unix. On non-Unix systems executables have a suffix, so the warning
     --  will not appear. However, do not warn in the case of a cross compiler.
  
!    --  Assume that if the executable name is not gnatlink, this is a cross
!    --  tool.
  
     if Base_Name (Command_Name) = "gnatlink"
       and then Output_File_Name.all = "test"
--- 1513,1519 ----
     --  on Unix. On non-Unix systems executables have a suffix, so the warning
     --  will not appear. However, do not warn in the case of a cross compiler.
  
!    --  Assume this is a cross tool if the executable name is not gnatlink
  
     if Base_Name (Command_Name) = "gnatlink"
       and then Output_File_Name.all = "test"
*************** begin
*** 1448,1456 ****
                     & """ may conflict with shell command");
     end if;
  
     --  Perform consistency checks
  
!    --  Transform the .ali file name into the binder output file name.
  
     Make_Binder_File_Names : declare
        Fname     : constant String  := Base_Name (Ali_File_Name.all);
--- 1522,1549 ----
                     & """ may conflict with shell command");
     end if;
  
+    --  If -M switch was specified, add the switches to create the map file
+ 
+    if Create_Map_File then
+       declare
+          Map_Name : constant String := Base_Name (Ali_File_Name.all) & ".map";
+          Switches : String_List_Access;
+ 
+       begin
+          Convert (Map_File, Map_Name, Switches);
+ 
+          if Switches /= null then
+             for J in Switches'Range loop
+                Linker_Options.Increment_Last;
+                Linker_Options.Table (Linker_Options.Last) := Switches (J);
+             end loop;
+          end if;
+       end;
+    end if;
+ 
     --  Perform consistency checks
  
!    --  Transform the .ali file name into the binder output file name
  
     Make_Binder_File_Names : declare
        Fname     : constant String  := Base_Name (Ali_File_Name.all);
*************** begin
*** 1570,1576 ****
        end Bind_Step;
     end if;
  
!    --  Now, actually link the program.
  
     --  Skip this step for now on the JVM since the Java interpreter will do
     --  the actual link at run time. We might consider packing all class files
--- 1663,1669 ----
        end Bind_Step;
     end if;
  
!    --  Now, actually link the program
  
     --  Skip this step for now on the JVM since the Java interpreter will do
     --  the actual link at run time. We might consider packing all class files
diff -Nrcpad gcc-3.4.3/gcc/ada/gnatls.adb gcc-4.0.0/gcc/ada/gnatls.adb
*** gcc-3.4.3/gcc/ada/gnatls.adb	Mon Jan  5 15:20:44 2004
--- gcc-4.0.0/gcc/ada/gnatls.adb	Thu Feb 10 13:50:32 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 1992-2004 Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 1992-2005 Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Opt;         use Opt;
*** 37,50 ****
--- 37,70 ----
  with Osint;       use Osint;
  with Osint.L;     use Osint.L;
  with Output;      use Output;
+ with Rident;      use Rident;
+ with Sdefault;
+ with Snames;
  with Targparm;    use Targparm;
  with Types;       use Types;
  
+ with GNAT.Case_Util; use GNAT.Case_Util;
+ 
  procedure Gnatls is
     pragma Ident (Gnat_Static_Version_String);
  
+    Ada_Project_Path : constant String := "ADA_PROJECT_PATH";
+    --  Name of the env. variable that contains path name(s) of directories
+    --  where project files may reside.
+ 
+    --  NOTE : The following string may be used by other tools, such as GPS. So
+    --  it can only be modified if these other uses are checked and coordinated.
+ 
+    Project_Search_Path : constant String := "Project Search Path:";
+    --  Label displayed in verbose mode before the directories in the project
+    --  search path. Do not modify without checking NOTE above.
+ 
+    No_Project_Default_Dir : constant String := "-";
+ 
     Max_Column : constant := 80;
  
+    No_Obj : aliased String := "<no_obj>";
+ 
     type File_Status is (
       OK,                  --  matching timestamp
       Checksum_OK,         --  only matching checksum
*************** procedure Gnatls is
*** 87,96 ****
     Print_Unit       : Boolean := True;
     Print_Source     : Boolean := True;
     Print_Object     : Boolean := True;
!    --  Flags controlling the form of the outpout
  
!    Dependable       : Boolean := False;  --  flag -d
!    Also_Predef      : Boolean := False;
  
     Unit_Start   : Integer;
     Unit_End     : Integer;
--- 107,118 ----
     Print_Unit       : Boolean := True;
     Print_Source     : Boolean := True;
     Print_Object     : Boolean := True;
!    --  Flags controlling the form of the output
  
!    Dependable  : Boolean := False;  --  flag -d
!    Also_Predef : Boolean := False;
! 
!    Very_Verbose_Mode : Boolean := False; --  flag -V
  
     Unit_Start   : Integer;
     Unit_End     : Integer;
*************** procedure Gnatls is
*** 109,123 ****
     -- Local Subprograms --
     -----------------------
  
!    procedure Add_Lib_Dir (Dir : String; And_Save : Boolean);
!    --  Add an object directory, using Osint.Add_Lib_Search_Dir
!    --  if And_Save is False or keeping in the list First_Lib_Dir,
!    --  Last_Lib_Dir if And_Save is True.
  
!    procedure Add_Source_Dir (Dir : String; And_Save : Boolean);
!    --  Add a source directory, using Osint.Add_Src_Search_Dir
!    --  if And_Save is False or keeping in the list First_Source_Dir,
!    --  Last_Source_Dir if And_Save is True.
  
     procedure Find_General_Layout;
     --  Determine the structure of the output (multi columns or not, etc)
--- 131,141 ----
     -- Local Subprograms --
     -----------------------
  
!    procedure Add_Lib_Dir (Dir : String);
!    --  Add an object directory in the list First_Lib_Dir-Last_Lib_Dir
  
!    procedure Add_Source_Dir (Dir : String);
!    --  Add a source directory in the list First_Source_Dir-Last_Source_Dir
  
     procedure Find_General_Layout;
     --  Determine the structure of the output (multi columns or not, etc)
*************** procedure Gnatls is
*** 132,186 ****
     --  updated to the full file name if available.
  
     function Corresponding_Sdep_Entry (A : ALI_Id; U : Unit_Id) return Sdep_Id;
!    --  Give the Sdep entry corresponding to the unit U in ali record A.
  
     procedure Output_Object (O : File_Name_Type);
     --  Print out the name of the object when requested
  
     procedure Output_Source (Sdep_I : Sdep_Id);
     --  Print out the name and status of the source corresponding to this
!    --  sdep entry
  
     procedure Output_Status (FS : File_Status; Verbose : Boolean);
     --  Print out FS either in a coded form if verbose is false or in an
     --  expanded form otherwise.
  
!    procedure Output_Unit (U_Id : Unit_Id);
     --  Print out information on the unit when requested
  
     procedure Reset_Print;
     --  Reset Print flags properly when selective output is chosen
  
!    procedure Scan_Ls_Arg (Argv : String; And_Save : Boolean);
!    --  Scan and process lser specific arguments. Argv is a single argument.
  
     procedure Usage;
!    --  Print usage message.
  
     -----------------
     -- Add_Lib_Dir --
     -----------------
  
!    procedure Add_Lib_Dir (Dir : String; And_Save : Boolean) is
     begin
!       if And_Save then
!          if First_Lib_Dir = null then
!             First_Lib_Dir :=
!               new Dir_Data'
!                 (Value => new String'(Dir),
!                  Next => null);
!             Last_Lib_Dir := First_Lib_Dir;
! 
!          else
!             Last_Lib_Dir.Next :=
!               new Dir_Data'
!                 (Value => new String'(Dir),
!                  Next => null);
!             Last_Lib_Dir := Last_Lib_Dir.Next;
!          end if;
  
        else
!          Add_Lib_Search_Dir (Dir);
        end if;
     end Add_Lib_Dir;
  
--- 150,216 ----
     --  updated to the full file name if available.
  
     function Corresponding_Sdep_Entry (A : ALI_Id; U : Unit_Id) return Sdep_Id;
!    --  Give the Sdep entry corresponding to the unit U in ali record A
  
     procedure Output_Object (O : File_Name_Type);
     --  Print out the name of the object when requested
  
     procedure Output_Source (Sdep_I : Sdep_Id);
     --  Print out the name and status of the source corresponding to this
!    --  sdep entry.
  
     procedure Output_Status (FS : File_Status; Verbose : Boolean);
     --  Print out FS either in a coded form if verbose is false or in an
     --  expanded form otherwise.
  
!    procedure Output_Unit (ALI : ALI_Id; U_Id : Unit_Id);
     --  Print out information on the unit when requested
  
     procedure Reset_Print;
     --  Reset Print flags properly when selective output is chosen
  
!    procedure Scan_Ls_Arg (Argv : String);
!    --  Scan and process lser specific arguments. Argv is a single argument
  
     procedure Usage;
!    --  Print usage message
! 
!    function Image (Restriction : Restriction_Id) return String;
!    --  Returns the capitalized image of Restriction
! 
!    ---------------------------------------
!    -- GLADE specific output subprograms --
!    ---------------------------------------
! 
!    package GLADE is
! 
!       --  Any modification to this subunit requires a synchronization
!       --  with the GLADE implementation.
! 
!       procedure Output_ALI    (A : ALI_Id);
!       procedure Output_No_ALI (Afile : File_Name_Type);
! 
!    end GLADE;
  
     -----------------
     -- Add_Lib_Dir --
     -----------------
  
!    procedure Add_Lib_Dir (Dir : String) is
     begin
!       if First_Lib_Dir = null then
!          First_Lib_Dir :=
!            new Dir_Data'
!              (Value => new String'(Dir),
!               Next  => null);
!          Last_Lib_Dir := First_Lib_Dir;
  
        else
!          Last_Lib_Dir.Next :=
!            new Dir_Data'
!              (Value => new String'(Dir),
!               Next  => null);
!          Last_Lib_Dir := Last_Lib_Dir.Next;
        end if;
     end Add_Lib_Dir;
  
*************** procedure Gnatls is
*** 188,213 ****
     -- Add_Source_Dir --
     --------------------
  
!    procedure Add_Source_Dir (Dir : String; And_Save : Boolean) is
     begin
!       if And_Save then
!          if First_Source_Dir = null then
!             First_Source_Dir :=
!               new Dir_Data'
!                 (Value => new String'(Dir),
!                  Next => null);
!             Last_Source_Dir := First_Source_Dir;
! 
!          else
!             Last_Source_Dir.Next :=
!               new Dir_Data'
!                 (Value => new String'(Dir),
!                  Next => null);
!             Last_Source_Dir := Last_Source_Dir.Next;
!          end if;
  
        else
!          Add_Src_Search_Dir (Dir);
        end if;
     end Add_Source_Dir;
  
--- 218,238 ----
     -- Add_Source_Dir --
     --------------------
  
!    procedure Add_Source_Dir (Dir : String) is
     begin
!       if First_Source_Dir = null then
!          First_Source_Dir :=
!            new Dir_Data'
!              (Value => new String'(Dir),
!               Next  => null);
!          Last_Source_Dir := First_Source_Dir;
  
        else
!          Last_Source_Dir.Next :=
!            new Dir_Data'
!              (Value => new String'(Dir),
!               Next  => null);
!          Last_Source_Dir := Last_Source_Dir.Next;
        end if;
     end Add_Source_Dir;
  
*************** procedure Gnatls is
*** 271,288 ****
              end if;
  
              if Print_Object then
!                Get_Name_String (ALIs.Table (Id).Ofile_Full_Name);
!                Max_Obj_Length := Integer'Max (Max_Obj_Length, Name_Len + 1);
              end if;
           end if;
        end loop;
  
        --  Verify is output is not wider than maximum number of columns
  
!       Too_Long := Verbose_Mode or else
!         (Max_Unit_Length + Max_Src_Length + Max_Obj_Length) > Max_Column;
  
!       --  Set start and end of columns.
  
        Object_Start := 1;
        Object_End   := Object_Start - 1;
--- 296,320 ----
              end if;
  
              if Print_Object then
!                if ALIs.Table (Id).No_Object then
!                   Max_Obj_Length :=
!                     Integer'Max (Max_Obj_Length, No_Obj'Length);
!                else
!                   Get_Name_String (ALIs.Table (Id).Ofile_Full_Name);
!                   Max_Obj_Length := Integer'Max (Max_Obj_Length, Name_Len + 1);
!                end if;
              end if;
           end if;
        end loop;
  
        --  Verify is output is not wider than maximum number of columns
  
!       Too_Long :=
!         Verbose_Mode
!           or else
!             (Max_Unit_Length + Max_Src_Length + Max_Obj_Length) > Max_Column;
  
!       --  Set start and end of columns
  
        Object_Start := 1;
        Object_End   := Object_Start - 1;
*************** procedure Gnatls is
*** 352,357 ****
--- 384,818 ----
        end if;
     end Find_Status;
  
+    -----------
+    -- GLADE --
+    -----------
+ 
+    package body GLADE is
+ 
+       N_Flags   : Natural;
+       N_Indents : Natural := 0;
+ 
+       type Token_Type is
+         (T_No_ALI,
+          T_ALI,
+          T_Unit,
+          T_With,
+          T_Source,
+          T_Afile,
+          T_Ofile,
+          T_Sfile,
+          T_Name,
+          T_Main,
+          T_Kind,
+          T_Flags,
+          T_Preelaborated,
+          T_Pure,
+          T_Has_RACW,
+          T_Remote_Types,
+          T_Shared_Passive,
+          T_RCI,
+          T_Predefined,
+          T_Internal,
+          T_Is_Generic,
+          T_Procedure,
+          T_Function,
+          T_Package,
+          T_Subprogram,
+          T_Spec,
+          T_Body);
+ 
+       Image : constant array (Token_Type) of String_Access :=
+         (T_No_ALI         => new String'("No_ALI"),
+          T_ALI            => new String'("ALI"),
+          T_Unit           => new String'("Unit"),
+          T_With           => new String'("With"),
+          T_Source         => new String'("Source"),
+          T_Afile          => new String'("Afile"),
+          T_Ofile          => new String'("Ofile"),
+          T_Sfile          => new String'("Sfile"),
+          T_Name           => new String'("Name"),
+          T_Main           => new String'("Main"),
+          T_Kind           => new String'("Kind"),
+          T_Flags          => new String'("Flags"),
+          T_Preelaborated  => new String'("Preelaborated"),
+          T_Pure           => new String'("Pure"),
+          T_Has_RACW       => new String'("Has_RACW"),
+          T_Remote_Types   => new String'("Remote_Types"),
+          T_Shared_Passive => new String'("Shared_Passive"),
+          T_RCI            => new String'("RCI"),
+          T_Predefined     => new String'("Predefined"),
+          T_Internal       => new String'("Internal"),
+          T_Is_Generic     => new String'("Is_Generic"),
+          T_Procedure      => new String'("procedure"),
+          T_Function       => new String'("function"),
+          T_Package        => new String'("package"),
+          T_Subprogram     => new String'("subprogram"),
+          T_Spec           => new String'("spec"),
+          T_Body           => new String'("body"));
+ 
+       procedure Output_Name  (N : Name_Id);
+       --  Remove any encoding info (%b and %s) and output N
+ 
+       procedure Output_Afile (A : File_Name_Type);
+       procedure Output_Ofile (O : File_Name_Type);
+       procedure Output_Sfile (S : File_Name_Type);
+       --  Output various names. Check that the name is different from
+       --  no name. Otherwise, skip the output.
+ 
+       procedure Output_Token (T : Token_Type);
+       --  Output token using a specific format. That is several
+       --  indentations and:
+       --
+       --  T_No_ALI  .. T_With : <token> & " =>" & NL
+       --  T_Source  .. T_Kind : <token> & " => "
+       --  T_Flags             : <token> & " =>"
+       --  T_Preelab .. T_Body : " " & <token>
+ 
+       procedure Output_Sdep  (S : Sdep_Id);
+       procedure Output_Unit  (U : Unit_Id);
+       procedure Output_With  (W : With_Id);
+       --  Output this entry as a global section (like ALIs)
+ 
+       ------------------
+       -- Output_Afile --
+       ------------------
+ 
+       procedure Output_Afile (A : File_Name_Type) is
+       begin
+          if A /= No_File then
+             Output_Token (T_Afile);
+             Write_Name (A);
+             Write_Eol;
+          end if;
+       end Output_Afile;
+ 
+       ----------------
+       -- Output_ALI --
+       ----------------
+ 
+       procedure Output_ALI (A : ALI_Id) is
+       begin
+          Output_Token (T_ALI);
+          N_Indents := N_Indents + 1;
+ 
+          Output_Afile (ALIs.Table (A).Afile);
+          Output_Ofile (ALIs.Table (A).Ofile_Full_Name);
+          Output_Sfile (ALIs.Table (A).Sfile);
+ 
+          --  Output Main
+ 
+          if ALIs.Table (A).Main_Program /= None then
+             Output_Token (T_Main);
+ 
+             if ALIs.Table (A).Main_Program = Proc then
+                Output_Token (T_Procedure);
+             else
+                Output_Token (T_Function);
+             end if;
+ 
+             Write_Eol;
+          end if;
+ 
+          --  Output Units
+ 
+          for U in ALIs.Table (A).First_Unit .. ALIs.Table (A).Last_Unit loop
+             Output_Unit (U);
+          end loop;
+ 
+          --  Output Sdeps
+ 
+          for S in ALIs.Table (A).First_Sdep .. ALIs.Table (A).Last_Sdep loop
+             Output_Sdep (S);
+          end loop;
+ 
+          N_Indents := N_Indents - 1;
+       end Output_ALI;
+ 
+       -------------------
+       -- Output_No_ALI --
+       -------------------
+ 
+       procedure Output_No_ALI (Afile : File_Name_Type) is
+       begin
+          Output_Token (T_No_ALI);
+          N_Indents := N_Indents + 1;
+          Output_Afile (Afile);
+          N_Indents := N_Indents - 1;
+       end Output_No_ALI;
+ 
+       -----------------
+       -- Output_Name --
+       -----------------
+ 
+       procedure Output_Name (N : Name_Id) is
+       begin
+          --  Remove any encoding info (%s or %b)
+ 
+          Get_Name_String (N);
+ 
+          if Name_Len > 2
+            and then Name_Buffer (Name_Len - 1) = '%'
+          then
+             Name_Len := Name_Len - 2;
+          end if;
+ 
+          Output_Token (T_Name);
+          Write_Str (Name_Buffer (1 .. Name_Len));
+          Write_Eol;
+       end Output_Name;
+ 
+       ------------------
+       -- Output_Ofile --
+       ------------------
+ 
+       procedure Output_Ofile (O : File_Name_Type) is
+       begin
+          if O /= No_File then
+             Output_Token (T_Ofile);
+             Write_Name (O);
+             Write_Eol;
+          end if;
+       end Output_Ofile;
+ 
+       -----------------
+       -- Output_Sdep --
+       -----------------
+ 
+       procedure Output_Sdep (S : Sdep_Id) is
+       begin
+          Output_Token (T_Source);
+          Write_Name (Sdep.Table (S).Sfile);
+          Write_Eol;
+       end Output_Sdep;
+ 
+       ------------------
+       -- Output_Sfile --
+       ------------------
+ 
+       procedure Output_Sfile (S : File_Name_Type) is
+          FS : File_Name_Type := S;
+ 
+       begin
+          if FS /= No_File then
+ 
+             --  We want to output the full source name
+ 
+             FS := Full_Source_Name (FS);
+ 
+             --  There is no full source name. This occurs for instance when a
+             --  withed unit has a spec file but no body file. This situation
+             --  is not a problem for GLADE since the unit may be located on
+             --  a partition we do not want to build. However, we need to
+             --  locate the spec file and to find its full source name.
+             --  Replace the body file name with the spec file name used to
+             --  compile the current unit when possible.
+ 
+             if FS = No_File then
+                Get_Name_String (S);
+ 
+                if Name_Len > 4
+                  and then Name_Buffer (Name_Len - 3 .. Name_Len) = ".adb"
+                then
+                   Name_Buffer (Name_Len) := 's';
+                   FS := Full_Source_Name (Name_Find);
+                end if;
+             end if;
+          end if;
+ 
+          if FS /= No_File then
+             Output_Token (T_Sfile);
+             Write_Name (FS);
+             Write_Eol;
+          end if;
+       end Output_Sfile;
+ 
+       ------------------
+       -- Output_Token --
+       ------------------
+ 
+       procedure Output_Token (T : Token_Type) is
+       begin
+          if T in T_No_ALI .. T_Flags then
+             for J in 1 .. N_Indents loop
+                Write_Str ("   ");
+             end loop;
+ 
+             Write_Str (Image (T).all);
+ 
+             for J in Image (T)'Length .. 12 loop
+                Write_Char (' ');
+             end loop;
+ 
+             Write_Str ("=>");
+ 
+             if T in T_No_ALI .. T_With then
+                Write_Eol;
+             elsif T in T_Source .. T_Name then
+                Write_Char (' ');
+             end if;
+ 
+          elsif T in T_Preelaborated .. T_Body then
+             if T in T_Preelaborated .. T_Is_Generic then
+                if N_Flags = 0 then
+                   Output_Token (T_Flags);
+                end if;
+ 
+                N_Flags := N_Flags + 1;
+             end if;
+ 
+             Write_Char (' ');
+             Write_Str  (Image (T).all);
+ 
+          else
+             Write_Str  (Image (T).all);
+          end if;
+       end Output_Token;
+ 
+       -----------------
+       -- Output_Unit --
+       -----------------
+ 
+       procedure Output_Unit (U : Unit_Id) is
+       begin
+          Output_Token (T_Unit);
+          N_Indents := N_Indents + 1;
+ 
+          --  Output Name
+ 
+          Output_Name (Units.Table (U).Uname);
+ 
+          --  Output Kind
+ 
+          Output_Token (T_Kind);
+ 
+          if Units.Table (U).Unit_Kind = 'p' then
+             Output_Token (T_Package);
+          else
+             Output_Token (T_Subprogram);
+          end if;
+ 
+          if Name_Buffer (Name_Len) = 's' then
+             Output_Token (T_Spec);
+          else
+             Output_Token (T_Body);
+          end if;
+ 
+          Write_Eol;
+ 
+          --  Output source file name
+ 
+          Output_Sfile (Units.Table (U).Sfile);
+ 
+          --  Output Flags
+ 
+          N_Flags := 0;
+ 
+          if Units.Table (U).Preelab then
+             Output_Token (T_Preelaborated);
+          end if;
+ 
+          if Units.Table (U).Pure then
+             Output_Token (T_Pure);
+          end if;
+ 
+          if Units.Table (U).Has_RACW then
+             Output_Token (T_Has_RACW);
+          end if;
+ 
+          if Units.Table (U).Remote_Types then
+             Output_Token (T_Remote_Types);
+          end if;
+ 
+          if Units.Table (U).Shared_Passive then
+             Output_Token (T_Shared_Passive);
+          end if;
+ 
+          if Units.Table (U).RCI then
+             Output_Token (T_RCI);
+          end if;
+ 
+          if Units.Table (U).Predefined then
+             Output_Token (T_Predefined);
+          end if;
+ 
+          if Units.Table (U).Internal then
+             Output_Token (T_Internal);
+          end if;
+ 
+          if Units.Table (U).Is_Generic then
+             Output_Token (T_Is_Generic);
+          end if;
+ 
+          if N_Flags > 0 then
+             Write_Eol;
+          end if;
+ 
+          --  Output Withs
+ 
+          for W in Units.Table (U).First_With .. Units.Table (U).Last_With loop
+             Output_With (W);
+          end loop;
+ 
+          N_Indents := N_Indents - 1;
+       end Output_Unit;
+ 
+       -----------------
+       -- Output_With --
+       -----------------
+ 
+       procedure Output_With (W : With_Id) is
+       begin
+          Output_Token (T_With);
+          N_Indents := N_Indents + 1;
+ 
+          Output_Name (Withs.Table (W).Uname);
+ 
+          --  Output Kind
+ 
+          Output_Token (T_Kind);
+ 
+          if Name_Buffer (Name_Len) = 's' then
+             Output_Token (T_Spec);
+          else
+             Output_Token (T_Body);
+          end if;
+ 
+          Write_Eol;
+ 
+          Output_Afile (Withs.Table (W).Afile);
+          Output_Sfile (Withs.Table (W).Sfile);
+ 
+          N_Indents := N_Indents - 1;
+       end Output_With;
+ 
+    end GLADE;
+ 
+    -----------
+    -- Image --
+    -----------
+ 
+    function Image (Restriction : Restriction_Id) return String is
+       Result : String := Restriction'Img;
+       Skip   : Boolean := True;
+ 
+    begin
+       for J in Result'Range loop
+          if Skip then
+             Skip := False;
+             Result (J) := To_Upper (Result (J));
+ 
+          elsif Result (J) = '_' then
+             Skip := True;
+ 
+          else
+             Result (J) := To_Lower (Result (J));
+          end if;
+       end loop;
+ 
+       return Result;
+    end Image;
+ 
     -------------------
     -- Output_Object --
     -------------------
*************** procedure Gnatls is
*** 361,368 ****
  
     begin
        if Print_Object then
!          Get_Name_String (O);
!          Object_Name := To_Host_File_Spec (Name_Buffer (1 .. Name_Len));
           Write_Str (Object_Name.all);
  
           if Print_Source or else Print_Unit then
--- 822,834 ----
  
     begin
        if Print_Object then
!          if O /= No_File then
!             Get_Name_String (O);
!             Object_Name := To_Host_File_Spec (Name_Buffer (1 .. Name_Len));
!          else
!             Object_Name := No_Obj'Unchecked_Access;
!          end if;
! 
           Write_Str (Object_Name.all);
  
           if Print_Source or else Print_Unit then
*************** procedure Gnatls is
*** 466,472 ****
     -- Output_Unit --
     -----------------
  
!    procedure Output_Unit (U_Id : Unit_Id) is
        Kind : Character;
        U    : Unit_Record renames Units.Table (U_Id);
  
--- 932,938 ----
     -- Output_Unit --
     -----------------
  
!    procedure Output_Unit (ALI : ALI_Id; U_Id : Unit_Id) is
        Kind : Character;
        U    : Unit_Record renames Units.Table (U_Id);
  
*************** procedure Gnatls is
*** 481,489 ****
  
           else
              Write_Str ("Unit => ");
!             Write_Eol; Write_Str ("     Name   => ");
              Write_Str (Name_Buffer (1 .. Name_Len));
!             Write_Eol; Write_Str ("     Kind   => ");
  
              if Units.Table (U_Id).Unit_Kind = 'p' then
                 Write_Str ("package ");
--- 947,957 ----
  
           else
              Write_Str ("Unit => ");
!             Write_Eol;
!             Write_Str ("     Name   => ");
              Write_Str (Name_Buffer (1 .. Name_Len));
!             Write_Eol;
!             Write_Str ("     Kind   => ");
  
              if Units.Table (U_Id).Unit_Kind = 'p' then
                 Write_Str ("package ");
*************** procedure Gnatls is
*** 499,514 ****
           end if;
  
           if Verbose_Mode then
!             if U.Preelab        or
!                U.No_Elab        or
!                U.Pure           or
!                U.Elaborate_Body or
!                U.Remote_Types   or
!                U.Shared_Passive or
!                U.RCI            or
!                U.Predefined
              then
!                Write_Eol; Write_Str ("     Flags  =>");
  
                 if U.Preelab then
                    Write_Str (" Preelaborable");
--- 967,990 ----
           end if;
  
           if Verbose_Mode then
!             if U.Preelab             or
!                U.No_Elab             or
!                U.Pure                or
!                U.Dynamic_Elab        or
!                U.Has_RACW            or
!                U.Remote_Types        or
!                U.Shared_Passive      or
!                U.RCI                 or
!                U.Predefined          or
!                U.Internal            or
!                U.Is_Generic          or
!                U.Init_Scalars        or
!                U.SAL_Interface       or
!                U.Body_Needed_For_SAL or
!                U.Elaborate_Body
              then
!                Write_Eol;
!                Write_Str ("     Flags  =>");
  
                 if U.Preelab then
                    Write_Str (" Preelaborable");
*************** procedure Gnatls is
*** 522,527 ****
--- 998,1047 ----
                    Write_Str (" Pure");
                 end if;
  
+                if U.Dynamic_Elab then
+                   Write_Str (" Dynamic_Elab");
+                end if;
+ 
+                if U.Has_RACW then
+                   Write_Str (" Has_RACW");
+                end if;
+ 
+                if U.Remote_Types then
+                   Write_Str (" Remote_Types");
+                end if;
+ 
+                if U.Shared_Passive then
+                   Write_Str (" Shared_Passive");
+                end if;
+ 
+                if U.RCI then
+                   Write_Str (" RCI");
+                end if;
+ 
+                if U.Predefined then
+                   Write_Str (" Predefined");
+                end if;
+ 
+                if U.Internal then
+                   Write_Str (" Internal");
+                end if;
+ 
+                if U.Is_Generic then
+                   Write_Str (" Is_Generic");
+                end if;
+ 
+                if U.Init_Scalars then
+                   Write_Str (" Init_Scalars");
+                end if;
+ 
+                if U.SAL_Interface then
+                   Write_Str (" SAL_Interface");
+                end if;
+ 
+                if U.Body_Needed_For_SAL then
+                   Write_Str (" Body_Needed_For_SAL");
+                end if;
+ 
                 if U.Elaborate_Body then
                    Write_Str (" Elaborate Body");
                 end if;
*************** procedure Gnatls is
*** 538,552 ****
                    Write_Str (" Predefined");
                 end if;
  
-                if U.RCI then
-                   Write_Str (" Remote_Call_Interface");
-                end if;
              end if;
           end if;
  
           if Print_Source then
              if Too_Long then
!                Write_Eol; Write_Str ("   ");
              else
                 Write_Str (Spaces (Unit_Start + Name_Len + 1 .. Unit_End));
              end if;
--- 1058,1133 ----
                    Write_Str (" Predefined");
                 end if;
  
              end if;
+ 
+             declare
+                Restrictions : constant Restrictions_Info :=
+                                 ALIs.Table (ALI).Restrictions;
+ 
+             begin
+                --  If the source was compiled with pragmas Restrictions,
+                --  Display these restrictions.
+ 
+                if Restrictions.Set /= (All_Restrictions => False) then
+                   Write_Eol;
+                   Write_Str ("     pragma Restrictions  =>");
+ 
+                   --  For boolean restrictions, just display the name of the
+                   --  restriction; for valued restrictions, also display the
+                   --  restriction value.
+ 
+                   for Restriction in All_Restrictions loop
+                      if Restrictions.Set (Restriction) then
+                         Write_Eol;
+                         Write_Str ("       ");
+                         Write_Str (Image (Restriction));
+ 
+                         if Restriction in All_Parameter_Restrictions then
+                            Write_Str (" =>");
+                            Write_Str (Restrictions.Value (Restriction)'Img);
+                         end if;
+                      end if;
+                   end loop;
+                end if;
+ 
+                --  If the unit violates some Restrictions, display the list of
+                --  these restrictions.
+ 
+                if Restrictions.Violated /= (All_Restrictions => False) then
+                   Write_Eol;
+                   Write_Str ("     Restrictions violated =>");
+ 
+                   --  For boolean restrictions, just display the name of the
+                   --  restriction; for valued restrictions, also display the
+                   --  restriction value.
+ 
+                   for Restriction in All_Restrictions loop
+                      if Restrictions.Violated (Restriction) then
+                         Write_Eol;
+                         Write_Str ("       ");
+                         Write_Str (Image (Restriction));
+ 
+                         if Restriction in All_Parameter_Restrictions then
+                            if Restrictions.Count (Restriction) > 0 then
+                               Write_Str (" =>");
+ 
+                               if Restrictions.Unknown (Restriction) then
+                                  Write_Str (" at least");
+                               end if;
+ 
+                               Write_Str (Restrictions.Count (Restriction)'Img);
+                            end if;
+                         end if;
+                      end if;
+                   end loop;
+                end if;
+             end;
           end if;
  
           if Print_Source then
              if Too_Long then
!                Write_Eol;
!                Write_Str ("   ");
              else
                 Write_Str (Spaces (Unit_Start + Name_Len + 1 .. Unit_End));
              end if;
*************** procedure Gnatls is
*** 572,578 ****
     -- Scan_Ls_Arg --
     -------------------
  
!    procedure Scan_Ls_Arg (Argv : String; And_Save : Boolean) is
     begin
        pragma Assert (Argv'First = 1);
  
--- 1153,1162 ----
     -- Scan_Ls_Arg --
     -------------------
  
!    procedure Scan_Ls_Arg (Argv : String) is
!       FD  : File_Descriptor;
!       Len : Integer;
! 
     begin
        pragma Assert (Argv'First = 1);
  
*************** procedure Gnatls is
*** 581,587 ****
        end if;
  
        if Argv (1) = '-' then
- 
           if Argv'Length = 1 then
              Fail ("switch character cannot be followed by a blank");
  
--- 1165,1170 ----
*************** procedure Gnatls is
*** 600,622 ****
           --  Processing for -Idir
  
           elsif Argv (2) = 'I' then
!             Add_Source_Dir (Argv (3 .. Argv'Last), And_Save);
!             Add_Lib_Dir (Argv (3 .. Argv'Last), And_Save);
  
           --  Processing for -aIdir (to gcc this is like a -I switch)
  
           elsif Argv'Length >= 3 and then Argv (2 .. 3) = "aI" then
!             Add_Source_Dir (Argv (4 .. Argv'Last), And_Save);
  
           --  Processing for -aOdir
  
           elsif Argv'Length >= 3 and then Argv (2 .. 3) = "aO" then
!             Add_Lib_Dir (Argv (4 .. Argv'Last), And_Save);
  
           --  Processing for -aLdir (to gnatbind this is like a -aO switch)
  
           elsif Argv'Length >= 3 and then Argv (2 .. 3) = "aL" then
!             Add_Lib_Dir (Argv (4 .. Argv'Last), And_Save);
  
           --  Processing for -nostdinc
  
--- 1183,1205 ----
           --  Processing for -Idir
  
           elsif Argv (2) = 'I' then
!             Add_Source_Dir (Argv (3 .. Argv'Last));
!             Add_Lib_Dir (Argv (3 .. Argv'Last));
  
           --  Processing for -aIdir (to gcc this is like a -I switch)
  
           elsif Argv'Length >= 3 and then Argv (2 .. 3) = "aI" then
!             Add_Source_Dir (Argv (4 .. Argv'Last));
  
           --  Processing for -aOdir
  
           elsif Argv'Length >= 3 and then Argv (2 .. 3) = "aO" then
!             Add_Lib_Dir (Argv (4 .. Argv'Last));
  
           --  Processing for -aLdir (to gnatbind this is like a -aO switch)
  
           elsif Argv'Length >= 3 and then Argv (2 .. 3) = "aL" then
!             Add_Lib_Dir (Argv (4 .. Argv'Last));
  
           --  Processing for -nostdinc
  
*************** procedure Gnatls is
*** 634,643 ****
--- 1217,1284 ----
                 when 'o' => Reset_Print; Print_Object := True;
                 when 'v' => Verbose_Mode              := True;
                 when 'd' => Dependable                := True;
+                when 'V' => Very_Verbose_Mode         := True;
  
                 when others => null;
              end case;
  
+          --  Processing for -files=file
+ 
+          elsif Argv'Length > 7 and then Argv (1 .. 7) = "-files=" then
+             FD := Open_Read (Argv (8 .. Argv'Last), GNAT.OS_Lib.Text);
+ 
+             if FD = Invalid_FD then
+                Osint.Fail ("could not find text file """ &
+                            Argv (8 .. Argv'Last) & '"');
+             end if;
+ 
+             Len := Integer (File_Length (FD));
+ 
+             declare
+                Buffer : String (1 .. Len + 1);
+                Index  : Positive := 1;
+                Last   : Positive;
+ 
+             begin
+                --  Read the file
+ 
+                Len := Read (FD, Buffer (1)'Address, Len);
+                Buffer (Buffer'Last) := ASCII.NUL;
+                Close (FD);
+ 
+                --  Scan the file line by line
+ 
+                while Index < Buffer'Last loop
+ 
+                   --  Find the end of line
+ 
+                   Last := Index;
+ 
+                   while Last <= Buffer'Last
+                     and then Buffer (Last) /= ASCII.LF
+                     and then Buffer (Last) /= ASCII.CR
+                   loop
+                      Last := Last + 1;
+                   end loop;
+ 
+                   --  Ignore empty lines
+ 
+                   if Last > Index then
+                      Add_File (Buffer (Index .. Last - 1));
+                   end if;
+ 
+                   Index := Last;
+ 
+                   --  Find the beginning of the next line
+ 
+                   while Buffer (Index) = ASCII.CR or else
+                         Buffer (Index) = ASCII.LF
+                   loop
+                      Index := Index + 1;
+                   end loop;
+                end loop;
+             end;
+ 
           --  Processing for --RTS=path
  
           elsif Argv'Length >= 5 and then Argv (1 .. 5) = "--RTS" then
*************** procedure Gnatls is
*** 707,715 ****
     -----------
  
     procedure Usage is
- 
-    --  Start of processing for Usage
- 
     begin
        --  Usage line
  
--- 1348,1353 ----
*************** procedure Gnatls is
*** 726,795 ****
  
        --  Line for -a
  
!       Write_Str ("  -a        also output relevant predefined units");
        Write_Eol;
  
        --  Line for -u
  
!       Write_Str ("  -u        output only relevant unit names");
        Write_Eol;
  
        --  Line for -h
  
!       Write_Str ("  -h        output this help message");
        Write_Eol;
  
        --  Line for -s
  
!       Write_Str ("  -s        output only relevant source names");
        Write_Eol;
  
        --  Line for -o
  
!       Write_Str ("  -o        output only relevant object names");
        Write_Eol;
  
        --  Line for -d
  
!       Write_Str ("  -d        output sources on which specified units depend");
        Write_Eol;
  
        --  Line for -v
  
!       Write_Str ("  -v        verbose output, full path and unit information");
        Write_Eol;
        Write_Eol;
  
        --  Line for -aI switch
  
!       Write_Str ("  -aIdir    specify source files search path");
        Write_Eol;
  
        --  Line for -aO switch
  
!       Write_Str ("  -aOdir    specify object files search path");
        Write_Eol;
  
        --  Line for -I switch
  
!       Write_Str ("  -Idir     like -aIdir -aOdir");
        Write_Eol;
  
        --  Line for -I- switch
  
!       Write_Str ("  -I-       do not look for sources & object files");
        Write_Str (" in the default directory");
        Write_Eol;
  
        --  Line for -nostdinc
  
!       Write_Str ("  -nostdinc do not look for source files");
        Write_Str (" in the system default directory");
        Write_Eol;
  
        --  Line for --RTS
  
!       Write_Str ("  --RTS=dir specify the default source and object search"
                   & " path");
        Write_Eol;
  
--- 1364,1440 ----
  
        --  Line for -a
  
!       Write_Str ("  -a         also output relevant predefined units");
        Write_Eol;
  
        --  Line for -u
  
!       Write_Str ("  -u         output only relevant unit names");
        Write_Eol;
  
        --  Line for -h
  
!       Write_Str ("  -h         output this help message");
        Write_Eol;
  
        --  Line for -s
  
!       Write_Str ("  -s         output only relevant source names");
        Write_Eol;
  
        --  Line for -o
  
!       Write_Str ("  -o         output only relevant object names");
        Write_Eol;
  
        --  Line for -d
  
!       Write_Str ("  -d         output sources on which specified units " &
!                                "depend");
        Write_Eol;
  
        --  Line for -v
  
!       Write_Str ("  -v         verbose output, full path and unit " &
!                                "information");
        Write_Eol;
        Write_Eol;
  
+       --  Line for -files=
+ 
+       Write_Str ("  -files=fil files are listed in text file 'fil'");
+       Write_Eol;
+ 
        --  Line for -aI switch
  
!       Write_Str ("  -aIdir     specify source files search path");
        Write_Eol;
  
        --  Line for -aO switch
  
!       Write_Str ("  -aOdir     specify object files search path");
        Write_Eol;
  
        --  Line for -I switch
  
!       Write_Str ("  -Idir      like -aIdir -aOdir");
        Write_Eol;
  
        --  Line for -I- switch
  
!       Write_Str ("  -I-        do not look for sources & object files");
        Write_Str (" in the default directory");
        Write_Eol;
  
        --  Line for -nostdinc
  
!       Write_Str ("  -nostdinc  do not look for source files");
        Write_Str (" in the system default directory");
        Write_Eol;
  
        --  Line for --RTS
  
!       Write_Str ("  --RTS=dir  specify the default source and object search"
                   & " path");
        Write_Eol;
  
*************** procedure Gnatls is
*** 806,832 ****
           Output_Status (ST, Verbose => True);
           Write_Eol;
        end loop;
- 
     end Usage;
  
!    --   Start of processing for Gnatls
  
  begin
     --  Initialize standard packages
  
     Namet.Initialize;
     Csets.Initialize;
  
!    --  Use low level argument routines to avoid dragging in the secondary stack
  
     Next_Arg := 1;
- 
     Scan_Args : while Next_Arg < Arg_Count loop
        declare
           Next_Argv : String (1 .. Len_Arg (Next_Arg));
        begin
           Fill_Arg (Next_Argv'Address, Next_Arg);
!          Scan_Ls_Arg (Next_Argv, And_Save => True);
        end;
  
        Next_Arg := Next_Arg + 1;
--- 1451,1476 ----
           Output_Status (ST, Verbose => True);
           Write_Eol;
        end loop;
     end Usage;
  
! --  Start of processing for Gnatls
  
  begin
     --  Initialize standard packages
  
     Namet.Initialize;
     Csets.Initialize;
+    Snames.Initialize;
  
!    --  Loop to scan out arguments
  
     Next_Arg := 1;
     Scan_Args : while Next_Arg < Arg_Count loop
        declare
           Next_Argv : String (1 .. Len_Arg (Next_Arg));
        begin
           Fill_Arg (Next_Argv'Address, Next_Arg);
!          Scan_Ls_Arg (Next_Argv);
        end;
  
        Next_Arg := Next_Arg + 1;
*************** begin
*** 852,866 ****
     if Verbose_Mode then
        Targparm.Get_Target_Parameters;
  
-       --  WARNING: the output of gnatls -v is used during the compilation
-       --  and installation of GLADE to recreate sdefault.adb and locate
-       --  the libgnat.a to use. Any change in the output of gnatls -v must
-       --  be synchronized with the GLADE Dist/config.sdefault shell script.
- 
        Write_Eol;
        Write_Str ("GNATLS ");
        Write_Str (Gnat_Version_String);
!       Write_Str (" Copyright 1997-2004 Free Software Foundation, Inc.");
        Write_Eol;
        Write_Eol;
        Write_Str ("Source Search Path:");
--- 1496,1506 ----
     if Verbose_Mode then
        Targparm.Get_Target_Parameters;
  
        Write_Eol;
        Write_Str ("GNATLS ");
        Write_Str (Gnat_Version_String);
!       Write_Eol;
!       Write_Str ("Copyright 1997-2005 Free Software Foundation, Inc.");
        Write_Eol;
        Write_Eol;
        Write_Str ("Source Search Path:");
*************** begin
*** 898,903 ****
--- 1538,1643 ----
        end loop;
  
        Write_Eol;
+       Write_Eol;
+       Write_Str (Project_Search_Path);
+       Write_Eol;
+       Write_Str ("   <Current_Directory>");
+       Write_Eol;
+ 
+       declare
+          Project_Path : constant String_Access := Getenv (Ada_Project_Path);
+ 
+          Lib    : constant String :=
+                     Directory_Separator & "lib" & Directory_Separator;
+ 
+          First : Natural;
+          Last  : Natural;
+ 
+          Add_Default_Dir : Boolean := True;
+ 
+       begin
+          --  If there is a project path, display each directory in the path
+ 
+          if Project_Path.all /= "" then
+             First := Project_Path'First;
+ 
+             loop
+                while First <= Project_Path'Last
+                  and then (Project_Path (First) = Path_Separator)
+                loop
+                   First := First + 1;
+                end loop;
+ 
+                exit when First > Project_Path'Last;
+ 
+                Last := First;
+ 
+                while Last < Project_Path'Last
+                  and then Project_Path (Last + 1) /= Path_Separator
+                loop
+                   Last := Last + 1;
+                end loop;
+ 
+                --  If the directory is No_Default_Project_Dir, set
+                --  Add_Default_Dir to False
+ 
+                if Project_Path (First .. Last) = No_Project_Default_Dir then
+                   Add_Default_Dir := False;
+ 
+                elsif First /= Last or else Project_Path (First) /= '.' then
+ 
+                   --  If the directory is ".", skip it as it is the current
+                   --  directory and it is already the first directory in the
+                   --  project path.
+ 
+                   Write_Str ("   ");
+                   Write_Str (Project_Path (First .. Last));
+                   Write_Eol;
+                end if;
+ 
+                First := Last + 1;
+             end loop;
+          end if;
+ 
+          --  Add the default dir, except if "-" was one of the "directories"
+          --  specified in ADA_PROJECT_DIR.
+ 
+          if Add_Default_Dir then
+             Name_Len := 0;
+             Add_Str_To_Name_Buffer (Sdefault.Search_Dir_Prefix.all);
+ 
+             --  On Windows, make sure that all directory separators are '\'
+ 
+             if Directory_Separator /= '/' then
+                for J in 1 .. Name_Len loop
+                   if Name_Buffer (J) = '/' then
+                      Name_Buffer (J) := Directory_Separator;
+                   end if;
+                end loop;
+             end if;
+ 
+             --  Find the sequence "/lib/"
+ 
+             while Name_Len >= Lib'Length
+               and then Name_Buffer (Name_Len - 4 .. Name_Len) /= Lib
+             loop
+                Name_Len := Name_Len - 1;
+             end loop;
+ 
+             --  If the sequence "/lib"/ was found, display the default
+             --  directory <prefix>/lib/gnat/.
+ 
+             if Name_Len >= 5 then
+                Write_Str ("   ");
+                Write_Str (Name_Buffer (1 .. Name_Len));
+                Write_Str ("gnat");
+                Write_Char (Directory_Separator);
+                Write_Eol;
+             end if;
+          end if;
+       end;
+ 
+       Write_Eol;
     end if;
  
     --  Output usage information when requested
*************** begin
*** 921,935 ****
  
     while More_Lib_Files loop
        Main_File := Next_Main_Lib_File;
!       Ali_File := Full_Lib_File_Name (Lib_File_Name (Main_File));
  
        if Ali_File = No_File then
!          Write_Str ("Can't find library info for ");
!          Get_Name_String (Main_File);
!          Write_Char ('"');
!          Write_Str (Name_Buffer (1 .. Name_Len));
!          Write_Char ('"');
!          Write_Eol;
  
        else
           Ali_File := Strip_Directory (Ali_File);
--- 1661,1680 ----
  
     while More_Lib_Files loop
        Main_File := Next_Main_Lib_File;
!       Ali_File  := Full_Lib_File_Name (Lib_File_Name (Main_File));
  
        if Ali_File = No_File then
!          if Very_Verbose_Mode then
!             GLADE.Output_No_ALI (Lib_File_Name (Main_File));
! 
!          else
!             Write_Str ("Can't find library info for ");
!             Get_Name_String (Main_File);
!             Write_Char ('"'); -- "
!             Write_Str (Name_Buffer (1 .. Name_Len));
!             Write_Char ('"'); -- "
!             Write_Eol;
!          end if;
  
        else
           Ali_File := Strip_Directory (Ali_File);
*************** begin
*** 943,949 ****
              begin
                 Discard :=
                   Scan_ALI
!                    (Ali_File, Text, Ignore_ED => False, Err => False);
              end;
  
              Free (Text);
--- 1688,1698 ----
              begin
                 Discard :=
                   Scan_ALI
!                    (Ali_File,
!                     Text,
!                     Ignore_ED     => False,
!                     Err           => False,
!                     Ignore_Errors => True);
              end;
  
              Free (Text);
*************** begin
*** 951,957 ****
--- 1700,1715 ----
        end if;
     end loop;
  
+    if Very_Verbose_Mode then
+       for A in ALIs.First .. ALIs.Last loop
+          GLADE.Output_ALI (A);
+       end loop;
+ 
+       return;
+    end if;
+ 
     Find_General_Layout;
+ 
     for Id in ALIs.First .. ALIs.Last loop
        declare
           Last_U : Unit_Id;
*************** begin
*** 960,966 ****
           Get_Name_String (Units.Table (ALIs.Table (Id).First_Unit).Uname);
  
           if Also_Predef or else not Is_Internal_Unit then
!             Output_Object (ALIs.Table (Id).Ofile_Full_Name);
  
              --  In verbose mode print all main units in the ALI file, otherwise
              --  just print the first one to ease columnwise printout
--- 1718,1728 ----
           Get_Name_String (Units.Table (ALIs.Table (Id).First_Unit).Uname);
  
           if Also_Predef or else not Is_Internal_Unit then
!             if ALIs.Table (Id).No_Object then
!                Output_Object (No_File);
!             else
!                Output_Object (ALIs.Table (Id).Ofile_Full_Name);
!             end if;
  
              --  In verbose mode print all main units in the ALI file, otherwise
              --  just print the first one to ease columnwise printout
*************** begin
*** 979,985 ****
                    Write_Eol;
                 end if;
  
!                Output_Unit (U);
  
                 --  Output source now, unless if it will be done as part of
                 --  outputing dependencies.
--- 1741,1747 ----
                    Write_Eol;
                 end if;
  
!                Output_Unit (Id, U);
  
                 --  Output source now, unless if it will be done as part of
                 --  outputing dependencies.
*************** begin
*** 989,1002 ****
                 end if;
              end loop;
  
!             --  Print out list of dependable units
  
              if Dependable and then Print_Source then
                 if Verbose_Mode then
                    Write_Str ("depends upon");
                    Write_Eol;
                    Write_Str ("   ");
- 
                 else
                    Write_Eol;
                 end if;
--- 1751,1763 ----
                 end if;
              end loop;
  
!             --  Print out list of units on which this unit depends (D lines)
  
              if Dependable and then Print_Source then
                 if Verbose_Mode then
                    Write_Str ("depends upon");
                    Write_Eol;
                    Write_Str ("   ");
                 else
                    Write_Eol;
                 end if;
diff -Nrcpad gcc-3.4.3/gcc/ada/gnatmem.adb gcc-4.0.0/gcc/ada/gnatmem.adb
*** gcc-3.4.3/gcc/ada/gnatmem.adb	Mon Jan  5 15:20:44 2004
--- gcc-4.0.0/gcc/ada/gnatmem.adb	Thu Feb 10 13:57:00 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 1997-2004, Ada Core Technologies, Inc.           --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 1997-2005, Ada Core Technologies, Inc.           --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 37,45 ****
  --        The running my_prog will produce a file named gmem.out that will be
  --        parsed by gnatmem.
  
! --      - Record a reference to the allocated memory on each allocation call.
  
! --      - Suppress this reference on deallocation.
  
  --      - At the end of the program, remaining references are potential leaks.
  --        sort them out the best possible way in order to locate the root of
--- 37,45 ----
  --        The running my_prog will produce a file named gmem.out that will be
  --        parsed by gnatmem.
  
! --      - Record a reference to the allocated memory on each allocation call
  
! --      - Suppress this reference on deallocation
  
  --      - At the end of the program, remaining references are potential leaks.
  --        sort them out the best possible way in order to locate the root of
***************
*** 55,61 ****
  
  with Gnatvsn; use Gnatvsn;
  
- 
  with Ada.Text_IO;             use Ada.Text_IO;
  with Ada.Float_Text_IO;
  with Ada.Integer_Text_IO;
--- 55,60 ----
*************** procedure Gnatmem is
*** 90,96 ****
     --  These need comments, and should be on separate lines ???
  
     function Read_Next return Storage_Elmt;
!    --  Reads next dynamic storage operation from the log file.
  
     function Mem_Image (X : Storage_Count) return String;
     --  X is a size in storage_element. Returns a value
--- 89,95 ----
     --  These need comments, and should be on separate lines ???
  
     function Read_Next return Storage_Elmt;
!    --  Reads next dynamic storage operation from the log file
  
     function Mem_Image (X : Storage_Count) return String;
     --  X is a size in storage_element. Returns a value
*************** procedure Gnatmem is
*** 147,155 ****
     Tmp_Alloc   : Allocation;
     Quiet_Mode  : Boolean := False;
  
!    -------------------------------
!    --  Allocation roots sorting --
!    -------------------------------
  
     Sort_Order : String (1 .. 3) := "nwh";
     --  This is the default order in which sorting criteria will be applied
--- 146,154 ----
     Tmp_Alloc   : Allocation;
     Quiet_Mode  : Boolean := False;
  
!    ------------------------------
!    -- Allocation Roots Sorting --
!    ------------------------------
  
     Sort_Order : String (1 .. 3) := "nwh";
     --  This is the default order in which sorting criteria will be applied
*************** procedure Gnatmem is
*** 233,240 ****
     begin
        New_Line;
        Put ("GNATMEM ");
!       Put (Gnat_Version_String);
!       Put_Line (" Copyright 1997-2004 Free Software Foundation, Inc.");
        New_Line;
  
        Put_Line ("Usage: gnatmem switches [depth] exename");
--- 232,239 ----
     begin
        New_Line;
        Put ("GNATMEM ");
!       Put_Line (Gnat_Version_String);
!       Put_Line ("Copyright 1997-2005 Free Software Foundation, Inc.");
        New_Line;
  
        Put_Line ("Usage: gnatmem switches [depth] exename");
diff -Nrcpad gcc-3.4.3/gcc/ada/gnatname.adb gcc-4.0.0/gcc/ada/gnatname.adb
*** gcc-3.4.3/gcc/ada/gnatname.adb	Mon Jan  5 15:20:44 2004
--- gcc-4.0.0/gcc/ada/gnatname.adb	Thu Feb 10 13:57:00 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 2001-2004 Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 2001-2005 Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 25,36 ****
--- 25,38 ----
  ------------------------------------------------------------------------------
  
  with Gnatvsn;
+ with Hostparm;
  with Opt;
  with Osint;    use Osint;
  with Output;   use Output;
  with Prj.Makr;
  with Table;
  
+ with Ada.Command_Line;  use Ada.Command_Line;
  with Ada.Text_IO;       use Ada.Text_IO;
  with GNAT.Command_Line; use GNAT.Command_Line;
  with GNAT.OS_Lib;       use GNAT.OS_Lib;
*************** procedure Gnatname is
*** 168,176 ****
           Version_Output := True;
           Output.Write_Eol;
           Output.Write_Str ("GNATNAME ");
!          Output.Write_Str (Gnatvsn.Gnat_Version_String);
           Output.Write_Line
!            (" Copyright 2001-2004 Free Software Foundation, Inc.");
        end if;
     end Output_Version;
  
--- 170,178 ----
           Version_Output := True;
           Output.Write_Eol;
           Output.Write_Str ("GNATNAME ");
!          Output.Write_Line (Gnatvsn.Gnat_Version_String);
           Output.Write_Line
!            ("Copyright 2001-2005 Free Software Foundation, Inc.");
        end if;
     end Output_Version;
  
*************** procedure Gnatname is
*** 229,235 ****
              when 'v' =>
                 if Opt.Verbose_Mode then
                    Very_Verbose := True;
- 
                 else
                    Opt.Verbose_Mode := True;
                 end if;
--- 231,236 ----
*************** procedure Gnatname is
*** 296,301 ****
--- 297,334 ----
  --  Start of processing for Gnatname
  
  begin
+    --  Add the directory where gnatname is invoked in front of the
+    --  path, if gnatname is invoked with directory information.
+    --  Only do this if the platform is not VMS, where the notion of path
+    --  does not really exist.
+ 
+    if not Hostparm.OpenVMS then
+       declare
+          Command : constant String := Command_Name;
+ 
+       begin
+          for Index in reverse Command'Range loop
+             if Command (Index) = Directory_Separator then
+                declare
+                   Absolute_Dir : constant String :=
+                                    Normalize_Pathname
+                                      (Command (Command'First .. Index));
+ 
+                   PATH         : constant String :=
+                                    Absolute_Dir &
+                   Path_Separator &
+                   Getenv ("PATH").all;
+ 
+                begin
+                   Setenv ("PATH", PATH);
+                end;
+ 
+                exit;
+             end if;
+          end loop;
+       end;
+    end if;
+ 
     --  Initialize tables
  
     Excluded_Patterns.Set_Last (0);
diff -Nrcpad gcc-3.4.3/gcc/ada/gnatsym.adb gcc-4.0.0/gcc/ada/gnatsym.adb
*** gcc-3.4.3/gcc/ada/gnatsym.adb	Mon Jan  5 15:20:44 2004
--- gcc-4.0.0/gcc/ada/gnatsym.adb	Wed Dec  8 11:46:29 2004
*************** procedure Gnatsym is
*** 111,117 ****
           Write_Eol;
           Write_Str ("GNATSYMB ");
           Write_Str (Gnat_Version_String);
!          Write_Str (" Copyright 2003-2004 Free Software Foundation, Inc");
           Write_Eol;
           Copyright_Displayed := True;
        end if;
--- 111,118 ----
           Write_Eol;
           Write_Str ("GNATSYMB ");
           Write_Str (Gnat_Version_String);
!          Write_Eol;
!          Write_Str ("Copyright 2003-2004 Free Software Foundation, Inc");
           Write_Eol;
           Copyright_Displayed := True;
        end if;
*************** procedure Gnatsym is
*** 124,130 ****
     procedure Parse_Cmd_Line is
     begin
        loop
!          case GNAT.Command_Line.Getopt ("c C q r: s: v V:") is
              when ASCII.NUL =>
                 exit;
  
--- 125,131 ----
     procedure Parse_Cmd_Line is
     begin
        loop
!          case GNAT.Command_Line.Getopt ("c C q r: R s: v V:") is
              when ASCII.NUL =>
                 exit;
  
*************** procedure Gnatsym is
*** 141,146 ****
--- 142,150 ----
                 Reference_Symbol_File_Name :=
                   new String'(GNAT.Command_Line.Parameter);
  
+             when 'R' =>
+                Symbol_Policy := Restricted;
+ 
              when 's' =>
                 Symbol_File_Name := new String'(GNAT.Command_Line.Parameter);
  
*************** procedure Gnatsym is
*** 183,192 ****
     begin
        Write_Line ("gnatsym [options] object_file {object_file}");
        Write_Eol;
!       Write_Line ("   -c       Compliant policy");
!       Write_Line ("   -C       Controlled policy");
        Write_Line ("   -q       Quiet mode");
        Write_Line ("   -r<ref>  Reference symbol file name");
        Write_Line ("   -s<sym>  Symbol file name");
        Write_Line ("   -v       Verbose mode");
        Write_Line ("   -V<ver>  Version");
--- 187,197 ----
     begin
        Write_Line ("gnatsym [options] object_file {object_file}");
        Write_Eol;
!       Write_Line ("   -c       Compliant symbol policy");
!       Write_Line ("   -C       Controlled symbol policy");
        Write_Line ("   -q       Quiet mode");
        Write_Line ("   -r<ref>  Reference symbol file name");
+       Write_Line ("   -R       Restricted symbol policy");
        Write_Line ("   -s<sym>  Symbol file name");
        Write_Line ("   -v       Verbose mode");
        Write_Line ("   -V<ver>  Version");
diff -Nrcpad gcc-3.4.3/gcc/ada/gnatvsn.ads gcc-4.0.0/gcc/ada/gnatvsn.ads
*** gcc-3.4.3/gcc/ada/gnatvsn.ads	Wed Dec  3 11:47:53 2003
--- gcc-4.0.0/gcc/ada/gnatvsn.ads	Mon Oct 18 21:47:21 2004
*************** package Gnatvsn is
*** 45,51 ****
     --  Static string identifying this version, that can be used as an argument
     --  to e.g. pragma Ident.
  
!    type Gnat_Build_Type is (FSF, Public);
     --  See Get_Gnat_Build_Type below for the meaning of these values.
  
     function Get_Gnat_Build_Type return Gnat_Build_Type;
--- 45,51 ----
     --  Static string identifying this version, that can be used as an argument
     --  to e.g. pragma Ident.
  
!    type Gnat_Build_Type is (FSF, Public, GAP);
     --  See Get_Gnat_Build_Type below for the meaning of these values.
  
     function Get_Gnat_Build_Type return Gnat_Build_Type;
*************** package Gnatvsn is
*** 63,68 ****
--- 63,71 ----
     --       The binder will output informational messages, and the bug box
     --       generated by the package Comperr will give appropriate bug
     --       submission instructions.
+    --
+    --    GAP
+    --       GNAT Academic Program, similar to Public.
  
     Ver_Len_Max : constant := 32;
     --  Longest possible length for Gnat_Version_String in this or any
*************** package Gnatvsn is
*** 71,77 ****
     --  value should never be decreased in the future, but it would be
     --  OK to increase it if absolutely necessary.
  
!    Library_Version : constant String := "3.4";
     --  Library version. This value must be updated whenever any change to the
     --  compiler affects the library formats in such a way as to obsolete
     --  previously compiled library modules.
--- 74,80 ----
     --  value should never be decreased in the future, but it would be
     --  OK to increase it if absolutely necessary.
  
!    Library_Version : constant String := "4.0";
     --  Library version. This value must be updated whenever any change to the
     --  compiler affects the library formats in such a way as to obsolete
     --  previously compiled library modules.
*************** package Gnatvsn is
*** 82,88 ****
     Verbose_Library_Version : constant String := "GNAT Lib v" & Library_Version;
     --  Version string stored in e.g. ALI files.
  
!    ASIS_Version_Number : constant := 2;
     --  ASIS Version. This is used to check for consistency between the compiler
     --  used to generate trees, and an ASIS application that is reading the
     --  trees. It must be updated (incremented) whenever a change is made to
--- 85,91 ----
     Verbose_Library_Version : constant String := "GNAT Lib v" & Library_Version;
     --  Version string stored in e.g. ALI files.
  
!    ASIS_Version_Number : constant := 4;
     --  ASIS Version. This is used to check for consistency between the compiler
     --  used to generate trees, and an ASIS application that is reading the
     --  trees. It must be updated (incremented) whenever a change is made to
diff -Nrcpad gcc-3.4.3/gcc/ada/gnatxref.adb gcc-4.0.0/gcc/ada/gnatxref.adb
*** gcc-3.4.3/gcc/ada/gnatxref.adb	Mon Jan  5 15:20:44 2004
--- gcc-4.0.0/gcc/ada/gnatxref.adb	Fri Nov 19 11:25:05 2004
*************** procedure Gnatxref is
*** 209,216 ****
  
     procedure Write_Usage is
     begin
!       Put_Line ("GNATXREF " & Gnatvsn.Gnat_Version_String
!                 & " Copyright 1998-2004, Ada Core Technologies Inc.");
        Put_Line ("Usage: gnatxref [switches] file1 file2 ...");
        New_Line;
        Put_Line ("  file ... list of source files to xref, " &
--- 209,216 ----
  
     procedure Write_Usage is
     begin
!       Put_Line ("GNATXREF " & Gnatvsn.Gnat_Version_String);
!       Put_Line ("Copyright 1998-2004, Ada Core Technologies Inc.");
        Put_Line ("Usage: gnatxref [switches] file1 file2 ...");
        New_Line;
        Put_Line ("  file ... list of source files to xref, " &
diff -Nrcpad gcc-3.4.3/gcc/ada/gpr2make.adb gcc-4.0.0/gcc/ada/gpr2make.adb
*** gcc-3.4.3/gcc/ada/gpr2make.adb	Tue Oct 21 13:42:08 2003
--- gcc-4.0.0/gcc/ada/gpr2make.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,34 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                              G P R 2 M A K E                             --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --        Copyright (C) 2002-2003 Free Software Foundation, Inc.            --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- with Bld;
- 
- procedure Gpr2make is
- begin
-    --  The real work is done in package Bld.
- 
-    Bld.Gpr2make;
- end Gpr2make;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/gpr2make.ads gcc-4.0.0/gcc/ada/gpr2make.ads
*** gcc-3.4.3/gcc/ada/gpr2make.ads	Tue Oct 21 13:42:08 2003
--- gcc-4.0.0/gcc/ada/gpr2make.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,30 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                              G P R 2 M A K E                             --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --        Copyright (C) 2002 Free Software Foundation, Inc.                 --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- procedure Gpr2make;
- --  The driver for the gpr2make tool. This utility is a Makefile generator
- --  to help building multi-language applications, using multi-language
- --  GNAT project files.
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/gprcmd.adb gcc-4.0.0/gcc/ada/gprcmd.adb
*** gcc-3.4.3/gcc/ada/gprcmd.adb	Mon Jan  5 15:20:44 2004
--- gcc-4.0.0/gcc/ada/gprcmd.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,465 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                               G P R C M D                                --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --         Copyright (C) 2002-2004 Free Software Foundation, Inc.           --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  A utility used by Makefile.generic to handle multi-language builds.
- --  gprcmd provides a set of commands so that the makefiles do not need
- --  to depend on unix utilities not available on all targets.
- 
- --  The list of commands recognized by gprcmd are:
- 
- --    pwd          display current directory
- --    to_lower     display next argument in lower case
- --    to_absolute  convert pathnames to absolute directories when needed
- --    cat          dump contents of a given file
- --    extend       handle recursive directories ("/**" notation)
- --    deps         post process dependency makefiles
- --    stamp        copy file time stamp from file1 to file2
- --    prefix       get the prefix of the GNAT installation
- 
- with Gnatvsn;
- with Osint;   use Osint;
- with Namet;   use Namet;
- 
- with Ada.Characters.Handling;   use Ada.Characters.Handling;
- with Ada.Command_Line;          use Ada.Command_Line;
- with Ada.Text_IO;               use Ada.Text_IO;
- with GNAT.OS_Lib;               use GNAT.OS_Lib;
- with GNAT.Directory_Operations; use GNAT.Directory_Operations;
- with GNAT.Regpat;               use GNAT.Regpat;
- 
- 
- procedure Gprcmd is
- 
-    --  ??? comments are thin throughout this unit
- 
- 
-    procedure Cat (File : String);
-    --  Print the contents of file on standard output.
-    --  If the file cannot be read, exit the process with an error code.
- 
-    procedure Check_Args (Condition : Boolean);
-    --  If Condition is false, print the usage, and exit the process.
- 
-    procedure Deps (Objext : String; File : String; GCC : Boolean);
-    --  Process $(CC) dependency file. If GCC is True, add a rule so that make
-    --  will not complain when a file is removed/added. If GCC is False, add a
-    --  rule to recompute the dependency file when needed
- 
-    procedure Extend (Dir : String);
-    --  If Dir ends with /**, Put all subdirs recursively on standard output,
-    --  otherwise put Dir.
- 
-    procedure Usage;
-    --  Display the command line options and exit the process.
- 
-    procedure Copy_Time_Stamp (From, To : String);
-    --  Copy file time stamp from file From to file To.
- 
-    ---------
-    -- Cat --
-    ---------
- 
-    procedure Cat (File : String) is
-       FD     : File_Descriptor;
-       Buffer : String_Access;
-       Length : Integer;
- 
-    begin
-       FD := Open_Read (File, Fmode => Binary);
- 
-       if FD = Invalid_FD then
-          OS_Exit (2);
-       end if;
- 
-       Length := Integer (File_Length (FD));
-       Buffer := new String (1 .. Length);
-       Length := Read (FD, Buffer.all'Address, Length);
-       Close (FD);
-       Put (Buffer.all);
-       Free (Buffer);
-    end Cat;
- 
-    ----------------
-    -- Check_Args --
-    ----------------
- 
-    procedure Check_Args (Condition : Boolean) is
-    begin
-       if not Condition then
-          Usage;
-       end if;
-    end Check_Args;
- 
-    ---------------------
-    -- Copy_Time_Stamp --
-    ---------------------
- 
-    procedure Copy_Time_Stamp (From, To : String) is
-       function Copy_Attributes
-         (From, To : String;
-          Mode     : Integer) return Integer;
-       pragma Import (C, Copy_Attributes, "__gnat_copy_attribs");
-       --  Mode = 0 - copy only time stamps.
-       --  Mode = 1 - copy time stamps and read/write/execute attributes
- 
-       FD : File_Descriptor;
- 
-    begin
-       if not Is_Regular_File (From) then
-          return;
-       end if;
- 
-       FD := Create_File (To, Fmode => Binary);
- 
-       if FD = Invalid_FD then
-          OS_Exit (2);
-       end if;
- 
-       Close (FD);
- 
-       if Copy_Attributes (From & ASCII.NUL, To & ASCII.NUL, 0) /= 0 then
-          OS_Exit (2);
-       end if;
-    end Copy_Time_Stamp;
- 
-    ----------
-    -- Deps --
-    ----------
- 
-    procedure Deps (Objext : String; File : String; GCC : Boolean) is
-       Colon      : constant String := ':' & ASCII.LF;
-       NL         : constant String := (1 => ASCII.LF);
-       Base       : constant String := ' ' & Base_Name (File) & ": ";
-       FD         : File_Descriptor;
-       Buffer     : String_Access;
-       Length     : Integer;
-       Obj_Regexp : constant Pattern_Matcher :=
-                      Compile ("^.*\" & Objext & ": ");
-       Matched    : Match_Array (0 .. 0);
-       Start      : Natural;
-       First      : Natural;
-       Last       : Natural;
- 
-    begin
-       FD := Open_Read_Write (File, Fmode => Binary);
- 
-       if FD = Invalid_FD then
-          return;
-       end if;
- 
-       Length := Integer (File_Length (FD));
-       Buffer := new String (1 .. Length);
-       Length := Read (FD, Buffer.all'Address, Length);
- 
-       if GCC then
-          Lseek (FD, 0, Seek_End);
-       else
-          Close (FD);
-          FD := Create_File (File, Fmode => Binary);
-       end if;
- 
-       Start := Buffer'First;
- 
-       while Start <= Buffer'Last loop
- 
-          --  Parse Buffer line by line
- 
-          while Start < Buffer'Last
-            and then (Buffer (Start) = ASCII.CR
-                      or else Buffer (Start) = ASCII.LF)
-          loop
-             Start := Start + 1;
-          end loop;
- 
-          Last := Start;
- 
-          while Last < Buffer'Last
-            and then Buffer (Last + 1) /= ASCII.CR
-            and then Buffer (Last + 1) /= ASCII.LF
-          loop
-             Last := Last + 1;
-          end loop;
- 
-          Match (Obj_Regexp, Buffer (Start .. Last), Matched);
- 
-          if GCC then
-             if Matched (0) = No_Match then
-                First := Start;
-             else
-                First := Matched (0).Last + 1;
-             end if;
- 
-             Length := Write (FD, Buffer (First)'Address, Last - First + 1);
- 
-             if Start = Last or else Buffer (Last) = '\' then
-                Length := Write (FD, NL (1)'Address, NL'Length);
-             else
-                Length := Write (FD, Colon (1)'Address, Colon'Length);
-             end if;
- 
-          else
-             if Matched (0) = No_Match then
-                First := Start;
-             else
-                Length :=
-                  Write (FD, Buffer (Start)'Address,
-                         Matched (0).Last - Start - 1);
-                Length := Write (FD, Base (Base'First)'Address, Base'Length);
-                First := Matched (0).Last + 1;
-             end if;
- 
-             Length := Write (FD, Buffer (First)'Address, Last - First + 1);
-             Length := Write (FD, NL (1)'Address, NL'Length);
-          end if;
- 
-          Start := Last + 1;
-       end loop;
- 
-       Close (FD);
-       Free (Buffer);
-    end Deps;
- 
-    ------------
-    -- Extend --
-    ------------
- 
-    procedure Extend (Dir : String) is
- 
-       procedure Recursive_Extend (D : String);
-       --  Recursively display all subdirectories of D
- 
-       ----------------------
-       -- Recursive_Extend --
-       ----------------------
- 
-       procedure Recursive_Extend (D : String) is
-          Iter   : Dir_Type;
-          Buffer : String (1 .. 8192);
-          Last   : Natural;
- 
-       begin
-          Open (Iter, D);
- 
-          loop
-             Read (Iter, Buffer, Last);
- 
-             exit when Last = 0;
- 
-             if Buffer (1 .. Last) /= "."
-               and then Buffer (1 .. Last) /= ".."
-             then
-                declare
-                   Abs_Dir : constant String := D & Buffer (1 .. Last);
- 
-                begin
-                   if Is_Directory (Abs_Dir)
-                     and then not Is_Symbolic_Link (Abs_Dir)
-                   then
-                      Put (' ' & Abs_Dir);
-                      Recursive_Extend (Abs_Dir & '/');
-                   end if;
-                end;
-             end if;
-          end loop;
- 
-          Close (Iter);
- 
-       exception
-          when Directory_Error =>
-             null;
-       end Recursive_Extend;
- 
-    --  Start of processing for Extend
- 
-    begin
-       if Dir'Length < 3
-         or else (Dir (Dir'Last - 2) /= '/'
-                  and then Dir (Dir'Last - 2) /= Directory_Separator)
-         or else Dir (Dir'Last - 1 .. Dir'Last) /= "**"
-       then
-          Put (Dir);
-          return;
-       end if;
- 
-       declare
-          D : constant String := Dir (Dir'First .. Dir'Last - 2);
-       begin
-          Put (D);
-          Recursive_Extend (D);
-       end;
-    end Extend;
- 
-    -----------
-    -- Usage --
-    -----------
- 
-    procedure Usage is
-    begin
-       Put_Line (Standard_Error, "usage: gprcmd cmd [arguments]");
-       Put_Line (Standard_Error, "where cmd is one of the following commands:");
-       Put_Line (Standard_Error, "  pwd         " &
-                                 "display current directory");
-       Put_Line (Standard_Error, "  to_lower    " &
-                                 "display next argument in lower case");
-       Put_Line (Standard_Error, "  to_absolute " &
-                                 "convert pathnames to absolute " &
-                                 "directories when needed");
-       Put_Line (Standard_Error, "  cat         " &
-                                 "dump contents of a given file");
-       Put_Line (Standard_Error, "  extend      " &
-                                 "handle recursive directories " &
-                                 "(""/**"" notation)");
-       Put_Line (Standard_Error, "  deps        " &
-                                 "post process dependency makefiles");
-       Put_Line (Standard_Error, "  stamp       " &
-                                 "copy file time stamp from file1 to file2");
-       OS_Exit (1);
-    end Usage;
- 
- --  Start of processing for Gprcmd
- 
- begin
-    Check_Args (Argument_Count > 0);
- 
-    declare
-       Cmd : constant String := Argument (1);
- 
-    begin
-       if Cmd = "-v" then
- 
-          --  Should this be on Standard_Error ???
- 
-          Put (Standard_Error, "GPRCMD ");
-          Put (Standard_Error, Gnatvsn.Gnat_Version_String);
-          Put_Line (Standard_Error,
-                    " Copyright 2002-2004, Free Software Fundation, Inc.");
-          Usage;
- 
-       elsif Cmd = "pwd" then
-          Put (Format_Pathname (Get_Current_Dir, UNIX));
- 
-       elsif Cmd = "cat" then
-          Check_Args (Argument_Count = 2);
-          Cat (Argument (2));
- 
-       elsif Cmd = "to_lower" then
-          Check_Args (Argument_Count >= 2);
- 
-          for J in 2 .. Argument_Count loop
-             Put (To_Lower (Argument (J)));
- 
-             if J < Argument_Count then
-                Put (' ');
-             end if;
-          end loop;
- 
-       elsif Cmd = "to_absolute" then
-          Check_Args (Argument_Count > 2);
- 
-          declare
-             Dir : constant String := Argument (2);
- 
-          begin
-             for J in 3 .. Argument_Count loop
-                if Is_Absolute_Path (Argument (J)) then
-                   Put (Format_Pathname (Argument (J), UNIX));
-                else
-                   Put (Format_Pathname (Normalize_Pathname (Argument (J), Dir),
-                                         UNIX));
-                end if;
- 
-                if J < Argument_Count then
-                   Put (' ');
-                end if;
-             end loop;
-          end;
- 
-       elsif Cmd = "extend" then
-          Check_Args (Argument_Count >= 2);
- 
-          declare
-             Dir : constant String := Argument (2);
- 
-          begin
-             for J in 3 .. Argument_Count loop
-                if Is_Absolute_Path (Argument (J)) then
-                   Extend (Format_Pathname (Argument (J), UNIX));
-                else
-                   Extend
-                     (Format_Pathname (Normalize_Pathname (Argument (J), Dir),
-                                       UNIX));
-                end if;
- 
-                if J < Argument_Count then
-                   Put (' ');
-                end if;
-             end loop;
-          end;
- 
-       elsif Cmd = "deps" then
-          Check_Args (Argument_Count in 3 .. 4);
-          Deps (Argument (2), Argument (3), GCC => Argument_Count = 4);
- 
-       elsif Cmd = "stamp" then
-          Check_Args (Argument_Count = 3);
-          Copy_Time_Stamp (Argument (2), Argument (3));
- 
-       elsif Cmd = "prefix" then
- 
-          --  Find the GNAT prefix. gprcmd is found in <prefix>/bin.
-          --  So we find the full path of gprcmd, verify that it is in a
-          --  subdirectory "bin", and return the <prefix> if it is the case.
-          --  Otherwise, nothing is returned.
- 
-          Find_Program_Name;
- 
-          declare
-             Path  : constant String_Access :=
-                       Locate_Exec_On_Path (Name_Buffer (1 .. Name_Len));
-             Index : Natural;
- 
-          begin
-             if Path /= null then
-                Index := Path'Last;
- 
-                while Index >= Path'First + 4 loop
-                   exit when Path (Index) = Directory_Separator;
-                   Index := Index - 1;
-                end loop;
- 
-                if Index > Path'First + 5
-                  and then Path (Index - 3 .. Index - 1) = "bin"
-                  and then Path (Index - 4) = Directory_Separator
-                then
-                   --  We have found the <prefix>, return it
- 
-                   Put (Path (Path'First .. Index - 5));
-                end if;
-             end if;
-          end;
-       end if;
-    end;
- end Gprcmd;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/gprep.adb gcc-4.0.0/gcc/ada/gprep.adb
*** gcc-3.4.3/gcc/ada/gprep.adb	Mon Jan  5 15:20:44 2004
--- gcc-4.0.0/gcc/ada/gprep.adb	Mon Jan  3 15:32:18 2005
*************** with Snames;
*** 39,47 ****
  with Stringt;  use Stringt;
  with Types;    use Types;
  
! with Ada.Text_IO;       use Ada.Text_IO;
  with GNAT.Command_Line;
! with GNAT.OS_Lib;       use GNAT.OS_Lib;
  
  package body GPrep is
  
--- 39,49 ----
  with Stringt;  use Stringt;
  with Types;    use Types;
  
! with Ada.Text_IO;               use Ada.Text_IO;
! with GNAT.Case_Util;            use GNAT.Case_Util;
  with GNAT.Command_Line;
! with GNAT.Directory_Operations; use GNAT.Directory_Operations;
! with GNAT.OS_Lib;               use GNAT.OS_Lib;
  
  package body GPrep is
  
*************** package body GPrep is
*** 52,60 ****
     -- Argument Line Data --
     ------------------------
  
!    Infile_Name  : String_Access;
!    Outfile_Name : String_Access;
!    Deffile_Name : String_Access;
  
     Source_Ref_Pragma : Boolean := False;
     --  Record command line options (set if -r switch set)
--- 54,68 ----
     -- Argument Line Data --
     ------------------------
  
!    Infile_Name  : Name_Id := No_Name;
!    Outfile_Name : Name_Id := No_Name;
!    Deffile_Name : Name_Id := No_Name;
! 
!    Output_Directory : Name_Id := No_Name;
!    --  Used when the specified output is an existing directory
! 
!    Input_Directory : Name_Id := No_Name;
!    --  Used when the specified input and output are existing directories
  
     Source_Ref_Pragma : Boolean := False;
     --  Record command line options (set if -r switch set)
*************** package body GPrep is
*** 62,67 ****
--- 70,80 ----
     Text_Outfile : aliased Ada.Text_IO.File_Type;
     Outfile      : constant File_Access := Text_Outfile'Access;
  
+    File_Name_Buffer_Initial_Size : constant := 50;
+    File_Name_Buffer : String_Access :=
+                         new String (1 .. File_Name_Buffer_Initial_Size);
+    --  A buffer to build output file names from input file names.
+ 
     -----------------
     -- Subprograms --
     -----------------
*************** package body GPrep is
*** 69,74 ****
--- 82,90 ----
     procedure Display_Copyright;
     --  Display the copyright notice
  
+    procedure Obsolescent_Check (S : Source_Ptr);
+    --  Null procedure, needed by instantiation of Scng below
+ 
     procedure Post_Scan;
     --  Null procedure, needed by instantiation of Scng below
  
*************** package body GPrep is
*** 78,88 ****
        Errutil.Error_Msg_S,
        Errutil.Error_Msg_SC,
        Errutil.Error_Msg_SP,
        Errutil.Style);
     --  The scanner for the preprocessor
  
     procedure Process_Command_Line_Symbol_Definition (S : String);
!    --  Process a -D switch on ther command line
  
     procedure Put_Char_To_Outfile (C : Character);
     --  Output one character to the output file.
--- 94,119 ----
        Errutil.Error_Msg_S,
        Errutil.Error_Msg_SC,
        Errutil.Error_Msg_SP,
+       Obsolescent_Check,
        Errutil.Style);
     --  The scanner for the preprocessor
  
+    function Is_ASCII_Letter (C : Character) return Boolean;
+    --  True if C is in 'a' .. 'z' or in 'A' .. 'Z'
+ 
+    procedure Double_File_Name_Buffer;
+    --  Double the size of the file name buffer.
+ 
+    procedure Preprocess_Infile_Name;
+    --  When the specified output is a directory, preprocess the infile name
+    --  for symbol substitution, to get the output file name.
+ 
+    procedure Process_Files;
+    --  Process the single input file or all the files in the directory tree
+    --  rooted at the input directory.
+ 
     procedure Process_Command_Line_Symbol_Definition (S : String);
!    --  Process a -D switch on the command line
  
     procedure Put_Char_To_Outfile (C : Character);
     --  Output one character to the output file.
*************** package body GPrep is
*** 105,124 ****
     procedure Display_Copyright is
     begin
        if not Copyright_Displayed then
!          Write_Line ("GNAT Preprocessor " &
!                      Gnatvsn.Gnat_Version_String &
!                      " Copyright 1996-2004 Free Software Foundation, Inc.");
           Copyright_Displayed := True;
        end if;
     end Display_Copyright;
  
     --------------
     -- Gnatprep --
     --------------
  
     procedure Gnatprep is
-       Infile : Source_File_Index;
- 
     begin
        --  Do some initializations (order is important here!)
  
--- 136,165 ----
     procedure Display_Copyright is
     begin
        if not Copyright_Displayed then
!          Write_Line ("GNAT Preprocessor " & Gnatvsn.Gnat_Version_String);
!          Write_Line ("Copyright 1996-2004 Free Software Foundation, Inc.");
           Copyright_Displayed := True;
        end if;
     end Display_Copyright;
  
+    -----------------------------
+    -- Double_File_Name_Buffer --
+    -----------------------------
+ 
+    procedure Double_File_Name_Buffer is
+       New_Buffer : constant String_Access :=
+                      new String (1 .. 2 * File_Name_Buffer'Length);
+    begin
+       New_Buffer (File_Name_Buffer'Range) := File_Name_Buffer.all;
+       Free (File_Name_Buffer);
+       File_Name_Buffer := New_Buffer;
+    end Double_File_Name_Buffer;
+ 
     --------------
     -- Gnatprep --
     --------------
  
     procedure Gnatprep is
     begin
        --  Do some initializations (order is important here!)
  
*************** package body GPrep is
*** 156,167 ****
  
        --  Test we had all the arguments needed
  
!       if Infile_Name = null then
           --  No input file specified, just output the usage and exit
  
           Usage;
           return;
!       elsif Outfile_Name = null then
           --  No output file specified, just output the usage and exit
  
           Usage;
--- 197,209 ----
  
        --  Test we had all the arguments needed
  
!       if Infile_Name = No_Name then
           --  No input file specified, just output the usage and exit
  
           Usage;
           return;
! 
!       elsif Outfile_Name = No_Name then
           --  No output file specified, just output the usage and exit
  
           Usage;
*************** package body GPrep is
*** 178,190 ****
  
        --  If we have a definition file, parse it
  
!       if Deffile_Name /= null then
           declare
              Deffile : Source_File_Index;
  
           begin
              Errutil.Initialize;
!             Deffile := Sinput.C.Load_File (Deffile_Name.all);
  
              --  Set Main_Source_File to the definition file for the benefit of
              --  Errutil.Finalize.
--- 220,232 ----
  
        --  If we have a definition file, parse it
  
!       if Deffile_Name /= No_Name then
           declare
              Deffile : Source_File_Index;
  
           begin
              Errutil.Initialize;
!             Deffile := Sinput.C.Load_File (Get_Name_String (Deffile_Name));
  
              --  Set Main_Source_File to the definition file for the benefit of
              --  Errutil.Finalize.
*************** package body GPrep is
*** 193,199 ****
  
              if Deffile = No_Source_File then
                 Fail ("unable to find definition file """,
!                      Deffile_Name.all,
                       """");
              end if;
  
--- 235,241 ----
  
              if Deffile = No_Source_File then
                 Fail ("unable to find definition file """,
!                      Get_Name_String (Deffile_Name),
                       """");
              end if;
  
*************** package body GPrep is
*** 208,214 ****
  
        if Total_Errors_Detected > 0 then
           Errutil.Finalize (Source_Type => "definition");
!          Fail ("errors in definition file """, Deffile_Name.all, """");
        end if;
  
        --  If -s switch was specified, print a sorted list of symbol names and
--- 250,257 ----
  
        if Total_Errors_Detected > 0 then
           Errutil.Finalize (Source_Type => "definition");
!          Fail ("errors in definition file """,
!                Get_Name_String (Deffile_Name), """");
        end if;
  
        --  If -s switch was specified, print a sorted list of symbol names and
*************** package body GPrep is
*** 218,285 ****
           Prep.List_Symbols (Foreword => "");
        end if;
  
!       --  Load the input file
! 
!       Infile := Sinput.C.Load_File (Infile_Name.all);
! 
!       if Infile = No_Source_File then
!          Fail ("unable to find input file """, Infile_Name.all, """");
!       end if;
! 
!       --  Set Main_Source_File to the input file for the benefit of
!       --  Errutil.Finalize.
! 
!       Sinput.Main_Source_File := Infile;
! 
!       Scanner.Initialize_Scanner (No_Unit, Infile);
! 
!       --  If an output file were specified, create it; fails if this did not
!       --  work.
! 
!       if Outfile_Name /= null then
!          begin
!             Create (Text_Outfile, Out_File, Outfile_Name.all);
! 
!          exception
!             when others =>
!                Fail
!                  ("unable to create output file """, Outfile_Name.all, """");
!          end;
!       end if;
! 
!       --  Output the SFN pragma if asked to
! 
!       if Source_Ref_Pragma then
!          Put_Line (Outfile.all, "pragma Source_Reference (1, """ &
!                    Get_Name_String (Sinput.File_Name (Infile)) &
!                    """);");
!       end if;
  
!       --  Preprocess the input file
  
!       Prep.Preprocess;
  
!       --  In verbose mode, if there is no error, report it
  
!       if Opt.Verbose_Mode and then Err_Vars.Total_Errors_Detected = 0 then
!          Errutil.Finalize (Source_Type => "input");
        end if;
  
!       --  If we had some errors, delete the output file, and report the errors,
  
!       if Err_Vars.Total_Errors_Detected > 0 then
!          if Outfile /= Standard_Output then
!             Delete (Text_Outfile);
!          end if;
  
!          Errutil.Finalize (Source_Type => "input");
  
!       --  otherwise, close the output file, and we are done.
  
!       elsif Outfile /= Standard_Output then
!          Close (Text_Outfile);
!       end if;
!    end Gnatprep;
  
     ------------------------
     -- New_EOL_To_Outfile --
--- 261,297 ----
           Prep.List_Symbols (Foreword => "");
        end if;
  
!       Output_Directory := No_Name;
!       Input_Directory  := No_Name;
  
!       --  Check if the specified output is an existing directory
  
!       if Is_Directory (Get_Name_String (Outfile_Name)) then
!          Output_Directory := Outfile_Name;
  
!          --  As the output is an existing directory, check if the input too
!          --  is a directory.
  
!          if Is_Directory (Get_Name_String (Infile_Name)) then
!             Input_Directory := Infile_Name;
!          end if;
        end if;
  
!       --  And process the single input or the files in the directory tree
!       --  rooted at the input directory.
  
!       Process_Files;
  
!    end Gnatprep;
  
!    ---------------------
!    -- Is_ASCII_Letter --
!    ---------------------
  
!    function Is_ASCII_Letter (C : Character) return Boolean is
!    begin
!       return C in 'A' .. 'Z' or else C in 'a' .. 'z';
!    end Is_ASCII_Letter;
  
     ------------------------
     -- New_EOL_To_Outfile --
*************** package body GPrep is
*** 290,295 ****
--- 302,318 ----
        New_Line (Outfile.all);
     end New_EOL_To_Outfile;
  
+    -----------------------
+    -- Obsolescent_Check --
+    -----------------------
+ 
+    procedure Obsolescent_Check (S : Source_Ptr) is
+       pragma Warnings (Off, S);
+    begin
+       null;
+    end Obsolescent_Check;
+ 
+ 
     ---------------
     -- Post_Scan --
     ---------------
*************** package body GPrep is
*** 299,304 ****
--- 322,433 ----
        null;
     end Post_Scan;
  
+    ----------------------------
+    -- Preprocess_Infile_Name --
+    ----------------------------
+ 
+    procedure Preprocess_Infile_Name is
+       Len    : Natural;
+       First  : Positive := 1;
+       Last   : Natural;
+       Symbol : Name_Id;
+       Data   : Symbol_Data;
+ 
+    begin
+       --  Initialize the buffer with the name of the input file
+ 
+       Get_Name_String (Infile_Name);
+       Len := Name_Len;
+ 
+       while File_Name_Buffer'Length < Len loop
+          Double_File_Name_Buffer;
+       end loop;
+ 
+       File_Name_Buffer (1 .. Len) := Name_Buffer (1 .. Len);
+ 
+       --  Look for possible symbols in the file name
+ 
+       while First < Len loop
+ 
+          --  A symbol starts with a dollar sign followed by a letter
+ 
+          if File_Name_Buffer (First) = '$' and then
+            Is_ASCII_Letter (File_Name_Buffer (First + 1))
+          then
+             Last := First + 1;
+ 
+             --  Find the last letter of the symbol
+ 
+             while Last < Len and then
+                Is_ASCII_Letter (File_Name_Buffer (Last + 1))
+             loop
+                Last := Last + 1;
+             end loop;
+ 
+             --  Get the symbol name id
+ 
+             Name_Len := Last - First;
+             Name_Buffer (1 .. Name_Len) :=
+               File_Name_Buffer (First + 1 .. Last);
+             To_Lower (Name_Buffer (1 .. Name_Len));
+             Symbol := Name_Find;
+ 
+             --  And look for this symbol name in the symbol table
+ 
+             for Index in 1 .. Symbol_Table.Last (Mapping) loop
+                Data := Mapping.Table (Index);
+ 
+                if Data.Symbol = Symbol then
+ 
+                   --  We found the symbol. If its value is not a string,
+                   --  replace the symbol in the file name with the value of
+                   --  the symbol.
+ 
+                   if not Data.Is_A_String then
+                      String_To_Name_Buffer (Data.Value);
+ 
+                      declare
+                         Sym_Len : constant Positive := Last - First + 1;
+                         Offset : constant Integer := Name_Len - Sym_Len;
+                         New_Len : constant Natural := Len + Offset;
+ 
+                      begin
+                         while New_Len > File_Name_Buffer'Length loop
+                            Double_File_Name_Buffer;
+                         end loop;
+ 
+                         File_Name_Buffer (Last + 1 + Offset .. New_Len) :=
+                           File_Name_Buffer (Last + 1 .. Len);
+                         Len := New_Len;
+                         Last := Last + Offset;
+                         File_Name_Buffer (First .. Last) :=
+                           Name_Buffer (1 .. Name_Len);
+                      end;
+                   end if;
+ 
+                   exit;
+                end if;
+             end loop;
+ 
+             --  Skip over the symbol name or its value: we are not checking
+             --  for another symbol name in the value.
+ 
+             First := Last + 1;
+ 
+          else
+             First := First + 1;
+          end if;
+       end loop;
+ 
+       --  We now have the output file name in the buffer. Get the output
+       --  path and put it in Outfile_Name.
+ 
+       Get_Name_String (Output_Directory);
+       Add_Char_To_Name_Buffer (Directory_Separator);
+       Add_Str_To_Name_Buffer (File_Name_Buffer (1 .. Len));
+       Outfile_Name := Name_Find;
+    end Preprocess_Infile_Name;
+ 
     --------------------------------------------
     -- Process_Command_Line_Symbol_Definition --
     --------------------------------------------
*************** package body GPrep is
*** 326,331 ****
--- 455,682 ----
        Mapping.Table (Symbol) := Data;
     end Process_Command_Line_Symbol_Definition;
  
+    -------------------
+    -- Process_Files --
+    -------------------
+ 
+    procedure Process_Files is
+ 
+       procedure Process_One_File;
+       --  Process input file Infile_Name and put the result in file
+       --  Outfile_Name.
+ 
+       procedure Recursive_Process (In_Dir : String; Out_Dir : String);
+       --  Process recursively files in In_Dir. Results go to Out_Dir.
+ 
+       ----------------------
+       -- Process_One_File --
+       ----------------------
+ 
+       procedure Process_One_File is
+          Infile : Source_File_Index;
+ 
+       begin
+          --  Create the output file; fails if this does not work.
+ 
+          begin
+             Create (Text_Outfile, Out_File, Get_Name_String (Outfile_Name));
+ 
+          exception
+             when others =>
+                Fail
+                  ("unable to create output file """,
+                   Get_Name_String (Outfile_Name), """");
+          end;
+ 
+          --  Load the input file
+ 
+          Infile := Sinput.C.Load_File (Get_Name_String (Infile_Name));
+ 
+          if Infile = No_Source_File then
+             Fail ("unable to find input file """,
+                   Get_Name_String (Infile_Name), """");
+          end if;
+ 
+          --  Set Main_Source_File to the input file for the benefit of
+          --  Errutil.Finalize.
+ 
+          Sinput.Main_Source_File := Infile;
+ 
+          Scanner.Initialize_Scanner (No_Unit, Infile);
+ 
+          --  Output the SFN pragma if asked to
+ 
+          if Source_Ref_Pragma then
+             Put_Line (Outfile.all, "pragma Source_Reference (1, """ &
+                       Get_Name_String (Sinput.File_Name (Infile)) &
+                       """);");
+          end if;
+ 
+          --  Preprocess the input file
+ 
+          Prep.Preprocess;
+ 
+          --  In verbose mode, if there is no error, report it
+ 
+          if Opt.Verbose_Mode and then Err_Vars.Total_Errors_Detected = 0 then
+             Errutil.Finalize (Source_Type => "input");
+          end if;
+ 
+          --  If we had some errors, delete the output file, and report
+          --  the errors.
+ 
+          if Err_Vars.Total_Errors_Detected > 0 then
+             if Outfile /= Standard_Output then
+                Delete (Text_Outfile);
+             end if;
+ 
+             Errutil.Finalize (Source_Type => "input");
+ 
+             OS_Exit (0);
+ 
+          --  otherwise, close the output file, and we are done.
+ 
+          elsif Outfile /= Standard_Output then
+             Close (Text_Outfile);
+          end if;
+       end Process_One_File;
+ 
+       -----------------------
+       -- Recursive_Process --
+       -----------------------
+ 
+       procedure Recursive_Process (In_Dir : String; Out_Dir : String) is
+          Dir_In : Dir_Type;
+          Name : String (1 .. 255);
+          Last : Natural;
+          In_Dir_Name  : Name_Id;
+          Out_Dir_Name : Name_Id;
+ 
+          procedure Set_Directory_Names;
+          --  Establish or reestablish the current input and output directories
+ 
+          -------------------------
+          -- Set_Directory_Names --
+          -------------------------
+ 
+          procedure Set_Directory_Names is
+          begin
+             Input_Directory := In_Dir_Name;
+             Output_Directory := Out_Dir_Name;
+          end Set_Directory_Names;
+ 
+       begin
+          --  Open the current input directory
+ 
+          begin
+             Open (Dir_In, In_Dir);
+ 
+          exception
+             when Directory_Error =>
+                Fail ("could not read directory " & In_Dir);
+          end;
+ 
+          --  Set the new input and output directory names
+ 
+          Name_Len := In_Dir'Length;
+          Name_Buffer (1 .. Name_Len) := In_Dir;
+          In_Dir_Name := Name_Find;
+          Name_Len := Out_Dir'Length;
+          Name_Buffer (1 .. Name_Len) := Out_Dir;
+          Out_Dir_Name := Name_Find;
+ 
+          Set_Directory_Names;
+ 
+          --  Traverse the input directory
+          loop
+             Read (Dir_In, Name, Last);
+             exit when Last = 0;
+ 
+             if Name (1 .. Last) /= "." and then Name (1 .. Last) /= ".." then
+                declare
+                   Input : constant String :=
+                             In_Dir & Directory_Separator & Name (1 .. Last);
+                   Output : constant String :=
+                              Out_Dir & Directory_Separator & Name (1 .. Last);
+ 
+                begin
+                   --  If input is an ordinary file, process it
+ 
+                   if Is_Regular_File (Input) then
+                      --  First get the output file name
+ 
+                      Name_Len := Last;
+                      Name_Buffer (1 .. Name_Len) := Name (1 .. Last);
+                      Infile_Name := Name_Find;
+                      Preprocess_Infile_Name;
+ 
+                      --  Set the input file name and process the file
+ 
+                      Name_Len := Input'Length;
+                      Name_Buffer (1 .. Name_Len) := Input;
+                      Infile_Name := Name_Find;
+                      Process_One_File;
+ 
+                   elsif Is_Directory (Input) then
+                      --  Input is a directory. If the corresponding output
+                      --  directory does not already exist, create it.
+ 
+                      if not Is_Directory (Output) then
+                         begin
+                            Make_Dir (Dir_Name => Output);
+ 
+                         exception
+                            when Directory_Error =>
+                               Fail ("could not create directory """,
+                                     Output, """");
+                         end;
+                      end if;
+ 
+                      --  And process this new input directory
+ 
+                      Recursive_Process (Input, Output);
+ 
+                      --  Reestablish the input and output directory names
+                      --  that have been modified by the recursive call.
+ 
+                      Set_Directory_Names;
+                   end if;
+                end;
+             end if;
+          end loop;
+       end Recursive_Process;
+ 
+    begin
+       if Output_Directory = No_Name then
+          --  If the output is not a directory, fail if the input is
+          --  an existing directory, to avoid possible problems.
+ 
+          if Is_Directory (Get_Name_String (Infile_Name)) then
+             Fail ("input file """ & Get_Name_String (Infile_Name) &
+                   """ is a directory");
+          end if;
+ 
+          --  Just process the single input file
+ 
+          Process_One_File;
+ 
+       elsif Input_Directory = No_Name then
+          --  Get the output file name from the input file name, and process
+          --  the single input file.
+ 
+          Preprocess_Infile_Name;
+          Process_One_File;
+ 
+       else
+          --  Recursively process files in the directory tree rooted at the
+          --  input directory.
+ 
+          Recursive_Process
+            (In_Dir => Get_Name_String (Input_Directory),
+             Out_Dir => Get_Name_String (Output_Directory));
+       end if;
+    end Process_Files;
+ 
     -------------------------
     -- Put_Char_To_Outfile --
     -------------------------
*************** package body GPrep is
*** 397,408 ****
           begin
              exit when S'Length = 0;
  
!             if Infile_Name = null then
!                Infile_Name := new String'(S);
!             elsif Outfile_Name = null then
!                Outfile_Name := new String'(S);
!             elsif Deffile_Name = null then
!                Deffile_Name := new String'(S);
              else
                 Fail ("too many arguments specifed");
              end if;
--- 748,762 ----
           begin
              exit when S'Length = 0;
  
!             Name_Len := S'Length;
!             Name_Buffer (1 .. Name_Len) := S;
! 
!             if Infile_Name = No_Name then
!                Infile_Name := Name_Find;
!             elsif Outfile_Name = No_Name then
!                Outfile_Name := Name_Find;
!             elsif Deffile_Name = No_Name then
!                Deffile_Name := Name_Find;
              else
                 Fail ("too many arguments specifed");
              end if;
diff -Nrcpad gcc-3.4.3/gcc/ada/gprmake.adb gcc-4.0.0/gcc/ada/gprmake.adb
*** gcc-3.4.3/gcc/ada/gprmake.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/gprmake.adb	Mon May  3 11:58:34 2004
***************
*** 0 ****
--- 1,36 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                             G P R M A K E                                --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --        Copyright (C) 2004 Free Software Foundation, Inc.                 --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  The driver for the gprmake tool.
+ 
+ with Makegpr;
+ 
+ procedure Gprmake is
+ begin
+    --  The code is in Makegpr
+ 
+    Makegpr.Gprmake;
+ end Gprmake;
diff -Nrcpad gcc-3.4.3/gcc/ada/gsocket.h gcc-4.0.0/gcc/ada/gsocket.h
*** gcc-3.4.3/gcc/ada/gsocket.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/gsocket.h	Thu Jan 27 11:52:46 2005
***************
*** 0 ****
--- 1,67 ----
+ /****************************************************************************
+  *                                                                          *
+  *                         GNAT COMPILER COMPONENTS                         *
+  *                                                                          *
+  *                               S O C K E T                                *
+  *                                                                          *
+  *                              C Header File                               *
+  *                                                                          *
+  *            Copyright (C) 2004, Free Software Foundation, Inc.            *
+  *                                                                          *
+  * GNAT is free software;  you can  redistribute it  and/or modify it under *
+  * terms of the  GNU General Public License as published  by the Free Soft- *
+  * ware  Foundation;  either version 2,  or (at your option) any later ver- *
+  * sion.  GNAT is distributed in the hope that it will be useful, but WITH- *
+  * OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY *
+  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License *
+  * for  more details.  You should have  received  a copy of the GNU General *
+  * Public License  distributed with GNAT;  see file COPYING.  If not, write *
+  * to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, *
+  * MA 02111-1307, USA.                                                      *
+  *                                                                          *
+  * As a  special  exception,  if you  link  this file  with other  files to *
+  * produce an executable,  this file does not by itself cause the resulting *
+  * executable to be covered by the GNU General Public License. This except- *
+  * ion does not  however invalidate  any other reasons  why the  executable *
+  * file might be covered by the  GNU Public License.                        *
+  *                                                                          *
+  * GNAT was originally developed  by the GNAT team at  New York University. *
+  * Extensive contributions were provided by Ada Core Technologies Inc.      *
+  *                                                                          *
+  ****************************************************************************/
+ 
+ #ifdef __vxworks
+ #include "vxWorks.h"
+ #endif
+ 
+ #ifdef IN_RTS
+ #include "tconfig.h"
+ #include "tsystem.h"
+ 
+ #if defined (WINNT)
+ #define FD_SETSIZE 1024
+ #include <windows.h>
+ 
+ #ifdef __MINGW32__
+ #include "mingw32.h"
+ #if STD_MINGW
+ #include <winsock.h>
+ #else
+ #include <windows32/sockets.h>
+ #endif
+ #endif
+ #endif
+ 
+ #if defined (VMS)
+ #define FD_SETSIZE 4096
+ #include <sys/time.h>
+ #endif
+ 
+ #else
+ #include "config.h"
+ #include "system.h"
+ #endif
+ 
+ #if !(defined (VMS) || defined (__MINGW32__) || defined(__rtems__))
+ # include <sys/socket.h>
+ #endif
diff -Nrcpad gcc-3.4.3/gcc/ada/i-c.adb gcc-4.0.0/gcc/ada/i-c.adb
*** gcc-3.4.3/gcc/ada/i-c.adb	Thu Apr 24 17:54:05 2003
--- gcc-4.0.0/gcc/ada/i-c.adb	Thu Feb 10 13:50:25 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2001 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Interfaces.C is
*** 63,68 ****
--- 63,94 ----
        return False;
     end Is_Nul_Terminated;
  
+    --  Case of char16_array
+ 
+    function Is_Nul_Terminated (Item : char16_array) return Boolean is
+    begin
+       for J in Item'Range loop
+          if Item (J) = char16_nul then
+             return True;
+          end if;
+       end loop;
+ 
+       return False;
+    end Is_Nul_Terminated;
+ 
+    --  Case of char32_array
+ 
+    function Is_Nul_Terminated (Item : char32_array) return Boolean is
+    begin
+       for J in Item'Range loop
+          if Item (J) = char32_nul then
+             return True;
+          end if;
+       end loop;
+ 
+       return False;
+    end Is_Nul_Terminated;
+ 
     ------------
     -- To_Ada --
     ------------
*************** package body Interfaces.C is
*** 78,85 ****
  
     function To_Ada
       (Item     : char_array;
!       Trim_Nul : Boolean := True)
!       return     String
     is
        Count : Natural;
        From  : size_t;
--- 104,110 ----
  
     function To_Ada
       (Item     : char_array;
!       Trim_Nul : Boolean := True) return String
     is
        Count : Natural;
        From  : size_t;
*************** package body Interfaces.C is
*** 119,128 ****
     --  Convert char_array to String (procedure form)
  
     procedure To_Ada
!      (Item       : char_array;
!       Target     : out String;
!       Count      : out Natural;
!       Trim_Nul   : Boolean := True)
     is
        From : size_t;
        To   : Positive;
--- 144,153 ----
     --  Convert char_array to String (procedure form)
  
     procedure To_Ada
!      (Item     : char_array;
!       Target   : out String;
!       Count    : out Natural;
!       Trim_Nul : Boolean := True)
     is
        From : size_t;
        To   : Positive;
*************** package body Interfaces.C is
*** 173,180 ****
  
     function To_Ada
       (Item     : wchar_array;
!       Trim_Nul : Boolean := True)
!       return     Wide_String
     is
        Count : Natural;
        From  : size_t;
--- 198,204 ----
  
     function To_Ada
       (Item     : wchar_array;
!       Trim_Nul : Boolean := True) return Wide_String
     is
        Count : Natural;
        From  : size_t;
*************** package body Interfaces.C is
*** 214,226 ****
     --  Convert wchar_array to Wide_String (procedure form)
  
     procedure To_Ada
!      (Item       : wchar_array;
!       Target     : out Wide_String;
!       Count      : out Natural;
!       Trim_Nul   : Boolean := True)
     is
!       From   : size_t;
!       To     : Positive;
  
     begin
        if Trim_Nul then
--- 238,250 ----
     --  Convert wchar_array to Wide_String (procedure form)
  
     procedure To_Ada
!      (Item     : wchar_array;
!       Target   : out Wide_String;
!       Count    : out Natural;
!       Trim_Nul : Boolean := True)
     is
!       From : size_t;
!       To   : Positive;
  
     begin
        if Trim_Nul then
*************** package body Interfaces.C is
*** 254,260 ****
--- 278,469 ----
              To   := To + 1;
           end loop;
        end if;
+    end To_Ada;
+ 
+    --  Convert char16_t to Wide_Character
+ 
+    function To_Ada (Item : char16_t) return Wide_Character is
+    begin
+       return Wide_Character'Val (char16_t'Pos (Item));
+    end To_Ada;
+ 
+    --  Convert char16_array to Wide_String (function form)
+ 
+    function To_Ada
+      (Item     : char16_array;
+       Trim_Nul : Boolean := True) return Wide_String
+    is
+       Count : Natural;
+       From  : size_t;
+ 
+    begin
+       if Trim_Nul then
+          From := Item'First;
+ 
+          loop
+             if From > Item'Last then
+                raise Terminator_Error;
+             elsif Item (From) = char16_t'Val (0) then
+                exit;
+             else
+                From := From + 1;
+             end if;
+          end loop;
+ 
+          Count := Natural (From - Item'First);
+ 
+       else
+          Count := Item'Length;
+       end if;
+ 
+       declare
+          R : Wide_String (1 .. Count);
+ 
+       begin
+          for J in R'Range loop
+             R (J) := To_Ada (Item (size_t (J) + (Item'First - 1)));
+          end loop;
+ 
+          return R;
+       end;
+    end To_Ada;
+ 
+    --  Convert char16_array to Wide_String (procedure form)
+ 
+    procedure To_Ada
+      (Item     : char16_array;
+       Target   : out Wide_String;
+       Count    : out Natural;
+       Trim_Nul : Boolean := True)
+    is
+       From : size_t;
+       To   : Positive;
+ 
+    begin
+       if Trim_Nul then
+          From := Item'First;
+          loop
+             if From > Item'Last then
+                raise Terminator_Error;
+             elsif Item (From) = char16_t'Val (0) then
+                exit;
+             else
+                From := From + 1;
+             end if;
+          end loop;
+ 
+          Count := Natural (From - Item'First);
+ 
+       else
+          Count := Item'Length;
+       end if;
+ 
+       if Count > Target'Length then
+          raise Constraint_Error;
+ 
+       else
+          From := Item'First;
+          To   := Target'First;
+ 
+          for J in 1 .. Count loop
+             Target (To) := To_Ada (Item (From));
+             From := From + 1;
+             To   := To + 1;
+          end loop;
+       end if;
+    end To_Ada;
+ 
+    --  Convert char32_t to Wide_Wide_Character
+ 
+    function To_Ada (Item : char32_t) return Wide_Wide_Character is
+    begin
+       return Wide_Wide_Character'Val (char32_t'Pos (Item));
+    end To_Ada;
+ 
+    --  Convert char32_array to Wide_Wide_String (function form)
+ 
+    function To_Ada
+      (Item     : char32_array;
+       Trim_Nul : Boolean := True) return Wide_Wide_String
+    is
+       Count : Natural;
+       From  : size_t;
+ 
+    begin
+       if Trim_Nul then
+          From := Item'First;
+ 
+          loop
+             if From > Item'Last then
+                raise Terminator_Error;
+             elsif Item (From) = char32_t'Val (0) then
+                exit;
+             else
+                From := From + 1;
+             end if;
+          end loop;
+ 
+          Count := Natural (From - Item'First);
+ 
+       else
+          Count := Item'Length;
+       end if;
+ 
+       declare
+          R : Wide_Wide_String (1 .. Count);
+ 
+       begin
+          for J in R'Range loop
+             R (J) := To_Ada (Item (size_t (J) + (Item'First - 1)));
+          end loop;
+ 
+          return R;
+       end;
+    end To_Ada;
+ 
+    --  Convert char32_array to Wide_Wide_String (procedure form)
+ 
+    procedure To_Ada
+      (Item     : char32_array;
+       Target   : out Wide_Wide_String;
+       Count    : out Natural;
+       Trim_Nul : Boolean := True)
+    is
+       From : size_t;
+       To   : Positive;
+ 
+    begin
+       if Trim_Nul then
+          From := Item'First;
+          loop
+             if From > Item'Last then
+                raise Terminator_Error;
+             elsif Item (From) = char32_t'Val (0) then
+                exit;
+             else
+                From := From + 1;
+             end if;
+          end loop;
+ 
+          Count := Natural (From - Item'First);
+ 
+       else
+          Count := Item'Length;
+       end if;
+ 
+       if Count > Target'Length then
+          raise Constraint_Error;
+ 
+       else
+          From := Item'First;
+          To   := Target'First;
  
+          for J in 1 .. Count loop
+             Target (To) := To_Ada (Item (From));
+             From := From + 1;
+             To   := To + 1;
+          end loop;
+       end if;
     end To_Ada;
  
     ----------
*************** package body Interfaces.C is
*** 272,279 ****
  
     function To_C
       (Item       : String;
!       Append_Nul : Boolean := True)
!       return       char_array
     is
     begin
        if Append_Nul then
--- 481,487 ----
  
     function To_C
       (Item       : String;
!       Append_Nul : Boolean := True) return char_array
     is
     begin
        if Append_Nul then
*************** package body Interfaces.C is
*** 289,309 ****
              return R;
           end;
  
!       else -- Append_Nul is False
  
!          --  A nasty case, if the string is null, we must return
!          --  a null char_array. The lower bound of this array is
!          --  required to be zero (RM B.3(50)) but that is of course
!          --  impossible given that size_t is unsigned. This needs
!          --  ARG resolution, but for now GNAT returns bounds 1 .. 0
  
           if Item'Length = 0 then
!             declare
!                R : char_array (1 .. 0);
  
!             begin
!                return R;
!             end;
  
           else
              declare
--- 497,515 ----
              return R;
           end;
  
!       --  Append_Nul False
  
!       else
!          --  A nasty case, if the string is null, we must return a null
!          --  char_array. The lower bound of this array is required to be zero
!          --  (RM B.3(50)) but that is of course impossible given that size_t
!          --  is unsigned. According to Ada 2005 AI-258, the result is to raise
!          --  Constraint_Error.
  
           if Item'Length = 0 then
!             raise Constraint_Error;
  
!          --  Normal case
  
           else
              declare
*************** package body Interfaces.C is
*** 366,373 ****
  
     function To_C
       (Item       : Wide_String;
!       Append_Nul : Boolean := True)
!       return       wchar_array
     is
     begin
        if Append_Nul then
--- 572,578 ----
  
     function To_C
       (Item       : Wide_String;
!       Append_Nul : Boolean := True) return wchar_array
     is
     begin
        if Append_Nul then
*************** package body Interfaces.C is
*** 384,406 ****
           end;
  
        else
!          --  A nasty case, if the string is null, we must return
!          --  a null char_array. The lower bound of this array is
!          --  required to be zero (RM B.3(50)) but that is of course
!          --  impossible given that size_t is unsigned. This needs
!          --  ARG resolution, but for now GNAT returns bounds 1 .. 0
  
           if Item'Length = 0 then
              declare
!                R : wchar_array (1 .. 0);
  
              begin
                 return R;
              end;
  
           else
              declare
!                R : wchar_array (0 .. Item'Length - 1);
  
              begin
                 for J in size_t range 0 .. Item'Length - 1 loop
--- 589,693 ----
           end;
  
        else
!          --  A nasty case, if the string is null, we must return a null
!          --  wchar_array. The lower bound of this array is required to be zero
!          --  (RM B.3(50)) but that is of course impossible given that size_t
!          --  is unsigned. According to Ada 2005 AI-258, the result is to raise
!          --  Constraint_Error.
  
           if Item'Length = 0 then
+             raise Constraint_Error;
+ 
+          else
              declare
!                R : wchar_array (0 .. Item'Length - 1);
  
              begin
+                for J in size_t range 0 .. Item'Length - 1 loop
+                   R (J) := To_C (Item (Integer (J) + Item'First));
+                end loop;
+ 
                 return R;
              end;
+          end if;
+       end if;
+    end To_C;
+ 
+    --  Convert Wide_String to wchar_array (procedure form)
+ 
+    procedure To_C
+      (Item       : Wide_String;
+       Target     : out wchar_array;
+       Count      : out size_t;
+       Append_Nul : Boolean := True)
+    is
+       To : size_t;
+ 
+    begin
+       if Target'Length < Item'Length then
+          raise Constraint_Error;
+ 
+       else
+          To := Target'First;
+          for From in Item'Range loop
+             Target (To) := To_C (Item (From));
+             To := To + 1;
+          end loop;
+ 
+          if Append_Nul then
+             if To > Target'Last then
+                raise Constraint_Error;
+             else
+                Target (To) := wide_nul;
+                Count := Item'Length + 1;
+             end if;
+ 
+          else
+             Count := Item'Length;
+          end if;
+       end if;
+    end To_C;
+ 
+    --  Convert Wide_Character to char16_t
+ 
+    function To_C (Item : Wide_Character) return char16_t is
+    begin
+       return char16_t'Val (Wide_Character'Pos (Item));
+    end To_C;
+ 
+    --  Convert Wide_String to char16_array (function form)
+ 
+    function To_C
+      (Item       : Wide_String;
+       Append_Nul : Boolean := True) return char16_array
+    is
+    begin
+       if Append_Nul then
+          declare
+             R : char16_array (0 .. Item'Length);
+ 
+          begin
+             for J in Item'Range loop
+                R (size_t (J - Item'First)) := To_C (Item (J));
+             end loop;
+ 
+             R (R'Last) := char16_t'Val (0);
+             return R;
+          end;
+ 
+       else
+          --  A nasty case, if the string is null, we must return a null
+          --  char16_array. The lower bound of this array is required to be zero
+          --  (RM B.3(50)) but that is of course impossible given that size_t
+          --  is unsigned. According to Ada 2005 AI-258, the result is to raise
+          --  Constraint_Error.
+ 
+          if Item'Length = 0 then
+             raise Constraint_Error;
  
           else
              declare
!                R : char16_array (0 .. Item'Length - 1);
  
              begin
                 for J in size_t range 0 .. Item'Length - 1 loop
*************** package body Interfaces.C is
*** 413,423 ****
        end if;
     end To_C;
  
!    --  Convert Wide_String to wchar_array (procedure form)
  
     procedure To_C
       (Item       : Wide_String;
!       Target     : out wchar_array;
        Count      : out size_t;
        Append_Nul : Boolean := True)
     is
--- 700,710 ----
        end if;
     end To_C;
  
!    --  Convert Wide_String to char16_array (procedure form)
  
     procedure To_C
       (Item       : Wide_String;
!       Target     : out char16_array;
        Count      : out size_t;
        Append_Nul : Boolean := True)
     is
*************** package body Interfaces.C is
*** 438,444 ****
              if To > Target'Last then
                 raise Constraint_Error;
              else
!                Target (To) := wide_nul;
                 Count := Item'Length + 1;
              end if;
  
--- 725,818 ----
              if To > Target'Last then
                 raise Constraint_Error;
              else
!                Target (To) := char16_t'Val (0);
!                Count := Item'Length + 1;
!             end if;
! 
!          else
!             Count := Item'Length;
!          end if;
!       end if;
!    end To_C;
! 
!    --  Convert Wide_Character to char32_t
! 
!    function To_C (Item : Wide_Wide_Character) return char32_t is
!    begin
!       return char32_t'Val (Wide_Wide_Character'Pos (Item));
!    end To_C;
! 
!    --  Convert Wide_Wide_String to char32_array (function form)
! 
!    function To_C
!      (Item       : Wide_Wide_String;
!       Append_Nul : Boolean := True) return char32_array
!    is
!    begin
!       if Append_Nul then
!          declare
!             R : char32_array (0 .. Item'Length);
! 
!          begin
!             for J in Item'Range loop
!                R (size_t (J - Item'First)) := To_C (Item (J));
!             end loop;
! 
!             R (R'Last) := char32_t'Val (0);
!             return R;
!          end;
! 
!       else
!          --  A nasty case, if the string is null, we must return a null
!          --  char32_array. The lower bound of this array is required to be zero
!          --  (RM B.3(50)) but that is of course impossible given that size_t
!          --  is unsigned. According to Ada 2005 AI-258, the result is to raise
!          --  Constraint_Error.
! 
!          if Item'Length = 0 then
!             raise Constraint_Error;
! 
!          else
!             declare
!                R : char32_array (0 .. Item'Length - 1);
! 
!             begin
!                for J in size_t range 0 .. Item'Length - 1 loop
!                   R (J) := To_C (Item (Integer (J) + Item'First));
!                end loop;
! 
!                return R;
!             end;
!          end if;
!       end if;
!    end To_C;
! 
!    --  Convert Wide_Wide_String to char32_array (procedure form)
! 
!    procedure To_C
!      (Item       : Wide_Wide_String;
!       Target     : out char32_array;
!       Count      : out size_t;
!       Append_Nul : Boolean := True)
!    is
!       To : size_t;
! 
!    begin
!       if Target'Length < Item'Length then
!          raise Constraint_Error;
! 
!       else
!          To := Target'First;
!          for From in Item'Range loop
!             Target (To) := To_C (Item (From));
!             To := To + 1;
!          end loop;
! 
!          if Append_Nul then
!             if To > Target'Last then
!                raise Constraint_Error;
!             else
!                Target (To) := char32_t'Val (0);
                 Count := Item'Length + 1;
              end if;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/i-c.ads gcc-4.0.0/gcc/ada/i-c.ads
*** gcc-3.4.3/gcc/ada/i-c.ads	Tue Oct 21 13:42:08 2003
--- gcc-4.0.0/gcc/ada/i-c.ads	Thu Feb 10 13:50:25 2005
***************
*** 6,37 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
! --                                                                          --
! -- This specification is derived from the Ada Reference Manual for use with --
! -- GNAT. The copyright notice above, and the license provisions that follow --
! -- apply solely to the  contents of the part following the private keyword. --
! --                                                                          --
! -- GNAT is free software;  you can  redistribute it  and/or modify it under --
! -- terms of the  GNU General Public License as published  by the Free Soft- --
! -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
! -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
! -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
! -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
! -- for  more details.  You should have  received  a copy of the GNU General --
! -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
! -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
! -- MA 02111-1307, USA.                                                      --
! --                                                                          --
! -- As a special exception,  if other files  instantiate  generics from this --
! -- unit, or you link  this unit with other files  to produce an executable, --
! -- this  unit  does not  by itself cause  the resulting  executable  to  be --
! -- covered  by the  GNU  General  Public  License.  This exception does not --
! -- however invalidate  any other reasons why  the executable file  might be --
! -- covered by the  GNU Public License.                                      --
! --                                                                          --
! -- GNAT was originally developed  by the GNAT team at  New York University. --
! -- Extensive contributions were provided by Ada Core Technologies Inc.      --
  --                                                                          --
  ------------------------------------------------------------------------------
  
--- 6,15 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! -- This specification is adapted from the Ada Reference Manual for use with --
! -- GNAT.  In accordance with the copyright of that document, you can freely --
! -- copy and modify this specification,  provided that if you redistribute a --
! -- modified version,  any changes that you have made are clearly indicated. --
  --                                                                          --
  ------------------------------------------------------------------------------
  
*************** pragma Pure (C);
*** 50,59 ****
     --  Signed and Unsigned Integers. Note that in GNAT, we have ensured that
     --  the standard predefined Ada types correspond to the standard C types
  
     type int   is new Integer;
     type short is new Short_Integer;
!    type long  is range -(2 ** (System.Parameters.long_bits - 1))
!      .. +(2 ** (System.Parameters.long_bits - 1)) - 1;
  
     type signed_char is range SCHAR_MIN .. SCHAR_MAX;
     for signed_char'Size use CHAR_BIT;
--- 28,41 ----
     --  Signed and Unsigned Integers. Note that in GNAT, we have ensured that
     --  the standard predefined Ada types correspond to the standard C types
  
+    --  Note: the Integer qualifications used in the declaration of type long
+    --  avoid ambiguities when compiling in the presence of s-auxdec.ads and
+    --  a non-private system.address type.
+ 
     type int   is new Integer;
     type short is new Short_Integer;
!    type long  is range -(2 ** (System.Parameters.long_bits - Integer'(1)))
!      .. +(2 ** (System.Parameters.long_bits - Integer'(1))) - 1;
  
     type signed_char is range SCHAR_MIN .. SCHAR_MAX;
     for signed_char'Size use CHAR_BIT;
*************** pragma Pure (C);
*** 67,75 ****
  
     subtype plain_char is unsigned_char; -- ??? should be parametrized
  
     type ptrdiff_t is
!      range -(2 ** (Standard'Address_Size - 1)) ..
!            +(2 ** (Standard'Address_Size - 1) - 1);
  
     type size_t is mod 2 ** Standard'Address_Size;
  
--- 49,61 ----
  
     subtype plain_char is unsigned_char; -- ??? should be parametrized
  
+    --  Note: the Integer qualifications used in the declaration of ptrdiff_t
+    --  avoid ambiguities when compiling in the presence of s-auxdec.ads and
+    --  a non-private system.address type.
+ 
     type ptrdiff_t is
!      range -(2 ** (Standard'Address_Size - Integer'(1))) ..
!            +(2 ** (Standard'Address_Size - Integer'(1)) - 1);
  
     type size_t is mod 2 ** Standard'Address_Size;
  
*************** pragma Pure (C);
*** 96,121 ****
     function Is_Nul_Terminated (Item : in char_array) return Boolean;
  
     function To_C
!      (Item       : in String;
!       Append_Nul : in Boolean := True)
!       return       char_array;
  
     function To_Ada
!      (Item     : in char_array;
!       Trim_Nul : in Boolean := True)
!       return     String;
  
     procedure To_C
!      (Item       : in String;
        Target     : out char_array;
        Count      : out size_t;
!       Append_Nul : in Boolean := True);
  
     procedure To_Ada
!      (Item     : in char_array;
        Target   : out String;
        Count    : out Natural;
!       Trim_Nul : in Boolean := True);
  
     ------------------------------------
     -- Wide Character and Wide String --
--- 82,105 ----
     function Is_Nul_Terminated (Item : in char_array) return Boolean;
  
     function To_C
!      (Item       : String;
!       Append_Nul : Boolean := True) return char_array;
  
     function To_Ada
!      (Item     : char_array;
!       Trim_Nul : Boolean := True) return String;
  
     procedure To_C
!      (Item       : String;
        Target     : out char_array;
        Count      : out size_t;
!       Append_Nul : Boolean := True);
  
     procedure To_Ada
!      (Item     : char_array;
        Target   : out String;
        Count    : out Natural;
!       Trim_Nul : Boolean := True);
  
     ------------------------------------
     -- Wide Character and Wide String --
*************** pragma Pure (C);
*** 126,162 ****
  
     wide_nul : constant wchar_t := wchar_t'First;
  
!    function To_C   (Item : in Wide_Character) return wchar_t;
!    function To_Ada (Item : in wchar_t)        return Wide_Character;
  
     type wchar_array is array (size_t range <>) of aliased wchar_t;
  
!    function Is_Nul_Terminated (Item : in wchar_array) return Boolean;
  
     function To_C
!      (Item       : in Wide_String;
!       Append_Nul : in Boolean := True)
!       return       wchar_array;
  
     function To_Ada
!      (Item     : in wchar_array;
!       Trim_Nul : in Boolean := True)
!       return     Wide_String;
  
     procedure To_C
!      (Item       : in Wide_String;
        Target     : out wchar_array;
        Count      : out size_t;
!       Append_Nul : in Boolean := True);
  
     procedure To_Ada
!      (Item     : in wchar_array;
        Target   : out Wide_String;
        Count    : out Natural;
!       Trim_Nul : in Boolean := True);
  
     Terminator_Error : exception;
  
! private
!    --  No private declarations required
  end Interfaces.C;
--- 110,230 ----
  
     wide_nul : constant wchar_t := wchar_t'First;
  
!    function To_C   (Item : Wide_Character) return wchar_t;
!    function To_Ada (Item : wchar_t)        return Wide_Character;
  
     type wchar_array is array (size_t range <>) of aliased wchar_t;
  
!    function Is_Nul_Terminated (Item : wchar_array) return Boolean;
  
     function To_C
!      (Item       : Wide_String;
!       Append_Nul : Boolean := True) return wchar_array;
  
     function To_Ada
!      (Item     : wchar_array;
!       Trim_Nul : Boolean := True) return Wide_String;
  
     procedure To_C
!      (Item       : Wide_String;
        Target     : out wchar_array;
        Count      : out size_t;
!       Append_Nul : Boolean := True);
  
     procedure To_Ada
!      (Item     : wchar_array;
        Target   : out Wide_String;
        Count    : out Natural;
!       Trim_Nul : Boolean := True);
  
     Terminator_Error : exception;
  
!    --  The remaining declarations are for Ada 2005 (AI-285)
! 
!    --  ISO/IEC 10646:2003 compatible types defined by SC22/WG14 document N1010
! 
!    type char16_t is new Wide_Character;
!    pragma Ada_05 (char16_t);
! 
!    char16_nul : constant char16_t := char16_t'Val (0);
!    pragma Ada_05 (char16_nul);
! 
!    function To_C (Item : Wide_Character) return char16_t;
!    pragma Ada_05 (To_C);
! 
!    function To_Ada (Item : char16_t) return Wide_Character;
!    pragma Ada_05 (To_Ada);
! 
!    type char16_array is array (size_t range <>) of aliased char16_t;
!    pragma Ada_05 (char16_array);
! 
!    function Is_Nul_Terminated (Item : char16_array) return Boolean;
!    pragma Ada_05 (Is_Nul_Terminated);
! 
!    function To_C
!      (Item       : Wide_String;
!       Append_Nul : Boolean := True) return char16_array;
!    pragma Ada_05 (To_C);
! 
!    function To_Ada
!      (Item     : char16_array;
!       Trim_Nul : Boolean := True) return Wide_String;
!    pragma Ada_05 (To_Ada);
! 
!    procedure To_C
!      (Item       : Wide_String;
!       Target     : out char16_array;
!       Count      : out size_t;
!       Append_Nul : Boolean := True);
!    pragma Ada_05 (To_C);
! 
!    procedure To_Ada
!      (Item     : char16_array;
!       Target   : out Wide_String;
!       Count    : out Natural;
!       Trim_Nul : Boolean := True);
!    pragma Ada_05 (To_Ada);
! 
!    type char32_t is new Wide_Wide_Character;
!    pragma Ada_05 (char32_t);
! 
!    char32_nul : constant char32_t := char32_t'Val (0);
!    pragma Ada_05 (char32_nul);
! 
!    function To_C (Item : Wide_Wide_Character) return char32_t;
!    pragma Ada_05 (To_C);
! 
!    function To_Ada (Item : char32_t) return Wide_Wide_Character;
!    pragma Ada_05 (To_Ada);
! 
!    type char32_array is array (size_t range <>) of aliased char32_t;
!    pragma Ada_05 (char32_array);
! 
!    function Is_Nul_Terminated (Item : char32_array) return Boolean;
!    pragma Ada_05 (Is_Nul_Terminated);
! 
!    function To_C
!      (Item       : Wide_Wide_String;
!       Append_Nul : Boolean := True) return char32_array;
!    pragma Ada_05 (To_C);
! 
!    function To_Ada
!      (Item     : char32_array;
!       Trim_Nul : Boolean := True) return Wide_Wide_String;
!    pragma Ada_05 (To_Ada);
! 
!    procedure To_C
!      (Item       : Wide_Wide_String;
!       Target     : out char32_array;
!       Count      : out size_t;
!       Append_Nul : Boolean := True);
!    pragma Ada_05 (To_C);
! 
!    procedure To_Ada
!      (Item     : char32_array;
!       Target   : out Wide_Wide_String;
!       Count    : out Natural;
!       Trim_Nul : Boolean := True);
!    pragma Ada_05 (To_Ada);
! 
  end Interfaces.C;
diff -Nrcpad gcc-3.4.3/gcc/ada/i-cobol.adb gcc-4.0.0/gcc/ada/i-cobol.adb
*** gcc-3.4.3/gcc/ada/i-cobol.adb	Tue Oct 21 13:42:08 2003
--- gcc-4.0.0/gcc/ada/i-cobol.adb	Thu Feb 10 13:57:01 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Interfaces.COBOL is
*** 107,114 ****
     function To_Display
       (Item   : Integer_64;
        Format : Display_Format;
!       Length : Natural)
!       return   Numeric;
     --  This function converts the given integer value into display format,
     --  using the given format, with the length in bytes of the result given
     --  by the last parameter. This is the non-generic implementation of
--- 107,113 ----
     function To_Display
       (Item   : Integer_64;
        Format : Display_Format;
!       Length : Natural) return Numeric;
     --  This function converts the given integer value into display format,
     --  using the given format, with the length in bytes of the result given
     --  by the last parameter. This is the non-generic implementation of
*************** package body Interfaces.COBOL is
*** 118,125 ****
     function To_Packed
       (Item   : Integer_64;
        Format : Packed_Format;
!       Length : Natural)
!       return   Packed_Decimal;
     --  This function converts the given integer value into packed format,
     --  using the given format, with the length in digits of the result given
     --  by the last parameter. This is the non-generic implementation of
--- 117,123 ----
     function To_Packed
       (Item   : Integer_64;
        Format : Packed_Format;
!       Length : Natural) return Packed_Decimal;
     --  This function converts the given integer value into packed format,
     --  using the given format, with the length in digits of the result given
     --  by the last parameter. This is the non-generic implementation of
*************** package body Interfaces.COBOL is
*** 128,142 ****
  
     function Valid_Numeric
       (Item   : Numeric;
!       Format : Display_Format)
!       return   Boolean;
     --  This is the non-generic implementation of Decimal_Conversions.Valid
     --  for the display case.
  
     function Valid_Packed
       (Item   : Packed_Decimal;
!       Format : Packed_Format)
!       return   Boolean;
     --  This is the non-generic implementation of Decimal_Conversions.Valid
     --  for the packed case.
  
--- 126,138 ----
  
     function Valid_Numeric
       (Item   : Numeric;
!       Format : Display_Format) return Boolean;
     --  This is the non-generic implementation of Decimal_Conversions.Valid
     --  for the display case.
  
     function Valid_Packed
       (Item   : Packed_Decimal;
!       Format : Packed_Format) return Boolean;
     --  This is the non-generic implementation of Decimal_Conversions.Valid
     --  for the packed case.
  
*************** package body Interfaces.COBOL is
*** 146,153 ****
  
     function Binary_To_Decimal
       (Item   : Byte_Array;
!       Format : Binary_Format)
!       return   Integer_64
     is
        Len : constant Natural := Item'Length;
  
--- 142,148 ----
  
     function Binary_To_Decimal
       (Item   : Byte_Array;
!       Format : Binary_Format) return Integer_64
     is
        Len : constant Natural := Item'Length;
  
*************** package body Interfaces.COBOL is
*** 229,236 ****
  
     function Numeric_To_Decimal
       (Item   : Numeric;
!       Format : Display_Format)
!       return   Integer_64
     is
        pragma Unsuppress (Range_Check);
        Sign   : COBOL_Character := COBOL_Plus;
--- 224,230 ----
  
     function Numeric_To_Decimal
       (Item   : Numeric;
!       Format : Display_Format) return Integer_64
     is
        pragma Unsuppress (Range_Check);
        Sign   : COBOL_Character := COBOL_Plus;
*************** package body Interfaces.COBOL is
*** 288,295 ****
  
     function Packed_To_Decimal
       (Item   : Packed_Decimal;
!       Format : Packed_Format)
!       return   Integer_64
     is
        pragma Unsuppress (Range_Check);
        Result : Integer_64 := 0;
--- 282,288 ----
  
     function Packed_To_Decimal
       (Item   : Packed_Decimal;
!       Format : Packed_Format) return Integer_64
     is
        pragma Unsuppress (Range_Check);
        Result : Integer_64 := 0;
*************** package body Interfaces.COBOL is
*** 449,456 ****
     function To_Display
       (Item   : Integer_64;
        Format : Display_Format;
!       Length : Natural)
!       return   Numeric
     is
        Result : Numeric (1 .. Length);
        Val    : Integer_64 := Item;
--- 442,448 ----
     function To_Display
       (Item   : Integer_64;
        Format : Display_Format;
!       Length : Natural) return Numeric
     is
        Result : Numeric (1 .. Length);
        Val    : Integer_64 := Item;
*************** package body Interfaces.COBOL is
*** 560,567 ****
     function To_Packed
       (Item   : Integer_64;
        Format : Packed_Format;
!       Length : Natural)
!       return   Packed_Decimal
     is
        Result : Packed_Decimal (1 .. Length);
        Val    : Integer_64;
--- 552,558 ----
     function To_Packed
       (Item   : Integer_64;
        Format : Packed_Format;
!       Length : Natural) return Packed_Decimal
     is
        Result : Packed_Decimal (1 .. Length);
        Val    : Integer_64;
*************** package body Interfaces.COBOL is
*** 628,637 ****
  
     function Valid_Numeric
       (Item   : Numeric;
!       Format : Display_Format)
!       return   Boolean
     is
     begin
        --  All character positions except first and last must be Digits.
        --  This is true for all the formats.
  
--- 619,631 ----
  
     function Valid_Numeric
       (Item   : Numeric;
!       Format : Display_Format) return Boolean
     is
     begin
+       if Item'Length = 0 then
+          return False;
+       end if;
+ 
        --  All character positions except first and last must be Digits.
        --  This is true for all the formats.
  
*************** package body Interfaces.COBOL is
*** 677,684 ****
  
     function Valid_Packed
       (Item   : Packed_Decimal;
!       Format : Packed_Format)
!       return   Boolean
     is
     begin
        case Packed_Representation is
--- 671,677 ----
  
     function Valid_Packed
       (Item   : Packed_Decimal;
!       Format : Packed_Format) return Boolean
     is
     begin
        case Packed_Representation is
*************** package body Interfaces.COBOL is
*** 716,732 ****
  
        function Length (Format : Binary_Format) return Natural is
           pragma Warnings (Off, Format);
- 
        begin
           if Num'Digits <= 2 then
              return 1;
- 
           elsif Num'Digits <= 4 then
              return 2;
- 
           elsif Num'Digits <= 9 then
              return 4;
- 
           else -- Num'Digits in 10 .. 18
              return 8;
           end if;
--- 709,721 ----
*************** package body Interfaces.COBOL is
*** 752,759 ****
        --  Note that the tests here are all compile time checks
  
        function Length
!         (Format : Packed_Format)
!          return   Natural
        is
           pragma Warnings (Off, Format);
  
--- 741,747 ----
        --  Note that the tests here are all compile time checks
  
        function Length
!         (Format : Packed_Format) return Natural
        is
           pragma Warnings (Off, Format);
  
*************** package body Interfaces.COBOL is
*** 770,777 ****
  
        function To_Binary
          (Item   : Num;
!          Format : Binary_Format)
!          return   Byte_Array
        is
        begin
           --  Note: all these tests are compile time tests
--- 758,764 ----
  
        function To_Binary
          (Item   : Num;
!          Format : Binary_Format) return Byte_Array
        is
        begin
           --  Note: all these tests are compile time tests
*************** package body Interfaces.COBOL is
*** 820,826 ****
           pragma Unsuppress (Range_Check);
        begin
           return Binary'Integer_Value (Item);
- 
        exception
           when Constraint_Error =>
              raise Conversion_Error;
--- 807,812 ----
*************** package body Interfaces.COBOL is
*** 832,845 ****
  
        function To_Decimal
          (Item   : Byte_Array;
!          Format : Binary_Format)
!          return   Num
        is
           pragma Unsuppress (Range_Check);
- 
        begin
           return Num'Fixed_Value (Binary_To_Decimal (Item, Format));
- 
        exception
           when Constraint_Error =>
              raise Conversion_Error;
--- 818,828 ----
  
        function To_Decimal
          (Item   : Byte_Array;
!          Format : Binary_Format) return Num
        is
           pragma Unsuppress (Range_Check);
        begin
           return Num'Fixed_Value (Binary_To_Decimal (Item, Format));
        exception
           when Constraint_Error =>
              raise Conversion_Error;
*************** package body Interfaces.COBOL is
*** 851,860 ****
  
        function To_Decimal (Item : Binary) return Num is
           pragma Unsuppress (Range_Check);
- 
        begin
           return Num'Fixed_Value (Item);
- 
        exception
           when Constraint_Error =>
              raise Conversion_Error;
--- 834,841 ----
*************** package body Interfaces.COBOL is
*** 885,894 ****
  
        function To_Decimal (Item : Long_Binary) return Num is
           pragma Unsuppress (Range_Check);
- 
        begin
           return Num'Fixed_Value (Item);
- 
        exception
           when Constraint_Error =>
              raise Conversion_Error;
--- 866,873 ----
*************** package body Interfaces.COBOL is
*** 900,913 ****
  
        function To_Decimal
          (Item   : Packed_Decimal;
!          Format : Packed_Format)
!          return   Num
        is
           pragma Unsuppress (Range_Check);
- 
        begin
           return Num'Fixed_Value (Packed_To_Decimal (Item, Format));
- 
        exception
           when Constraint_Error =>
              raise Conversion_Error;
--- 879,889 ----
  
        function To_Decimal
          (Item   : Packed_Decimal;
!          Format : Packed_Format) return Num
        is
           pragma Unsuppress (Range_Check);
        begin
           return Num'Fixed_Value (Packed_To_Decimal (Item, Format));
        exception
           when Constraint_Error =>
              raise Conversion_Error;
*************** package body Interfaces.COBOL is
*** 919,936 ****
  
        function To_Display
          (Item   : Num;
!          Format : Display_Format)
!          return   Numeric
        is
           pragma Unsuppress (Range_Check);
- 
        begin
           return
             To_Display
               (Integer_64'Integer_Value (Item),
                Format,
                Length (Format));
- 
        exception
           when Constraint_Error =>
              raise Conversion_Error;
--- 895,909 ----
  
        function To_Display
          (Item   : Num;
!          Format : Display_Format) return Numeric
        is
           pragma Unsuppress (Range_Check);
        begin
           return
             To_Display
               (Integer_64'Integer_Value (Item),
                Format,
                Length (Format));
        exception
           when Constraint_Error =>
              raise Conversion_Error;
*************** package body Interfaces.COBOL is
*** 942,951 ****
  
        function To_Long_Binary (Item : Num) return Long_Binary is
           pragma Unsuppress (Range_Check);
- 
        begin
           return Long_Binary'Integer_Value (Item);
- 
        exception
           when Constraint_Error =>
              raise Conversion_Error;
--- 915,922 ----
*************** package body Interfaces.COBOL is
*** 957,974 ****
  
        function To_Packed
          (Item   : Num;
!          Format : Packed_Format)
!          return   Packed_Decimal
        is
           pragma Unsuppress (Range_Check);
- 
        begin
           return
             To_Packed
               (Integer_64'Integer_Value (Item),
                Format,
                Length (Format));
- 
        exception
           when Constraint_Error =>
              raise Conversion_Error;
--- 928,942 ----
  
        function To_Packed
          (Item   : Num;
!          Format : Packed_Format) return Packed_Decimal
        is
           pragma Unsuppress (Range_Check);
        begin
           return
             To_Packed
               (Integer_64'Integer_Value (Item),
                Format,
                Length (Format));
        exception
           when Constraint_Error =>
              raise Conversion_Error;
*************** package body Interfaces.COBOL is
*** 980,995 ****
  
        function Valid
          (Item   : Byte_Array;
!          Format : Binary_Format)
!          return   Boolean
        is
           Val : Num;
           pragma Unreferenced (Val);
- 
        begin
           Val := To_Decimal (Item, Format);
           return True;
- 
        exception
           when Conversion_Error =>
              return False;
--- 948,960 ----
  
        function Valid
          (Item   : Byte_Array;
!          Format : Binary_Format) return Boolean
        is
           Val : Num;
           pragma Unreferenced (Val);
        begin
           Val := To_Decimal (Item, Format);
           return True;
        exception
           when Conversion_Error =>
              return False;
*************** package body Interfaces.COBOL is
*** 1001,1008 ****
  
        function Valid
          (Item   : Numeric;
!          Format : Display_Format)
!          return   Boolean
        is
        begin
           return Valid_Numeric (Item, Format);
--- 966,972 ----
  
        function Valid
          (Item   : Numeric;
!          Format : Display_Format) return Boolean
        is
        begin
           return Valid_Numeric (Item, Format);
*************** package body Interfaces.COBOL is
*** 1014,1021 ****
  
        function Valid
          (Item   : Packed_Decimal;
!          Format : Packed_Format)
!          return   Boolean
        is
        begin
           return Valid_Packed (Item, Format);
--- 978,984 ----
  
        function Valid
          (Item   : Packed_Decimal;
!          Format : Packed_Format) return Boolean
        is
        begin
           return Valid_Packed (Item, Format);
diff -Nrcpad gcc-3.4.3/gcc/ada/i-cobol.ads gcc-4.0.0/gcc/ada/i-cobol.ads
*** gcc-3.4.3/gcc/ada/i-cobol.ads	Thu Apr 24 17:54:05 2003
--- gcc-4.0.0/gcc/ada/i-cobol.ads	Mon Feb  2 12:31:53 2004
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                             (ASCII Version)                              --
  --                                                                          --
! --          Copyright (C) 1993-2000 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                             (ASCII Version)                              --
  --                                                                          --
! --          Copyright (C) 1993-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** package Interfaces.COBOL is
*** 457,463 ****
        pragma Inline (To_Binary);
        pragma Inline (To_Decimal);
        pragma Inline (To_Display);
-       pragma Inline (To_Decimal);
        pragma Inline (To_Long_Binary);
        pragma Inline (Valid);
  
--- 457,462 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/i-cpoint.adb gcc-4.0.0/gcc/ada/i-cpoint.adb
*** gcc-3.4.3/gcc/ada/i-cpoint.adb	Thu Apr 24 17:54:05 2003
--- gcc-4.0.0/gcc/ada/i-cpoint.adb	Fri Mar  5 10:58:56 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2001 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Interfaces.C.Pointers is
*** 55,61 ****
     -- "+" --
     ---------
  
!    function "+" (Left : in Pointer;   Right : in ptrdiff_t) return Pointer is
     begin
        if Left = null then
           raise Pointer_Error;
--- 55,61 ----
     -- "+" --
     ---------
  
!    function "+" (Left : Pointer; Right : ptrdiff_t) return Pointer is
     begin
        if Left = null then
           raise Pointer_Error;
*************** package body Interfaces.C.Pointers is
*** 64,70 ****
        return To_Pointer (To_Addr (Left) + To_Addr (Elmt_Size * Right));
     end "+";
  
!    function "+" (Left : in ptrdiff_t; Right : in Pointer) return Pointer is
     begin
        if Right = null then
           raise Pointer_Error;
--- 64,70 ----
        return To_Pointer (To_Addr (Left) + To_Addr (Elmt_Size * Right));
     end "+";
  
!    function "+" (Left : ptrdiff_t; Right : Pointer) return Pointer is
     begin
        if Right = null then
           raise Pointer_Error;
*************** package body Interfaces.C.Pointers is
*** 77,83 ****
     -- "-" --
     ---------
  
!    function "-" (Left : in Pointer; Right : in ptrdiff_t) return Pointer is
     begin
        if Left = null then
           raise Pointer_Error;
--- 77,83 ----
     -- "-" --
     ---------
  
!    function "-" (Left : Pointer; Right : ptrdiff_t) return Pointer is
     begin
        if Left = null then
           raise Pointer_Error;
*************** package body Interfaces.C.Pointers is
*** 86,92 ****
        return To_Pointer (To_Addr (Left) - To_Addr (Right * Elmt_Size));
     end "-";
  
!    function "-" (Left : in Pointer; Right : in Pointer) return ptrdiff_t is
     begin
        if Left = null or else Right = null then
           raise Pointer_Error;
--- 86,92 ----
        return To_Pointer (To_Addr (Left) - To_Addr (Right * Elmt_Size));
     end "-";
  
!    function "-" (Left : Pointer; Right : Pointer) return ptrdiff_t is
     begin
        if Left = null or else Right = null then
           raise Pointer_Error;
*************** package body Interfaces.C.Pointers is
*** 100,108 ****
     ----------------
  
     procedure Copy_Array
!      (Source  : in Pointer;
!       Target  : in Pointer;
!       Length  : in ptrdiff_t)
     is
        T : Pointer := Target;
        S : Pointer := Source;
--- 100,108 ----
     ----------------
  
     procedure Copy_Array
!      (Source  : Pointer;
!       Target  : Pointer;
!       Length  : ptrdiff_t)
     is
        T : Pointer := Target;
        S : Pointer := Source;
*************** package body Interfaces.C.Pointers is
*** 125,134 ****
     ---------------------------
  
     procedure Copy_Terminated_Array
!      (Source     : in Pointer;
!       Target     : in Pointer;
!       Limit      : in ptrdiff_t := ptrdiff_t'Last;
!       Terminator : in Element := Default_Terminator)
     is
        S : Pointer   := Source;
        T : Pointer   := Target;
--- 125,134 ----
     ---------------------------
  
     procedure Copy_Terminated_Array
!      (Source     : Pointer;
!       Target     : Pointer;
!       Limit      : ptrdiff_t := ptrdiff_t'Last;
!       Terminator : Element := Default_Terminator)
     is
        S : Pointer   := Source;
        T : Pointer   := Target;
*************** package body Interfaces.C.Pointers is
*** 172,180 ****
     -----------
  
     function Value
!      (Ref        : in Pointer;
!       Terminator : in Element := Default_Terminator)
!       return       Element_Array
     is
        P : Pointer;
        L : constant Index_Base := Index'First;
--- 172,179 ----
     -----------
  
     function Value
!      (Ref        : Pointer;
!       Terminator : Element := Default_Terminator) return Element_Array
     is
        P : Pointer;
        L : constant Index_Base := Index'First;
*************** package body Interfaces.C.Pointers is
*** 207,215 ****
     end Value;
  
     function Value
!      (Ref    : in Pointer;
!       Length : in ptrdiff_t)
!       return   Element_Array
     is
        L : Index_Base;
        H : Index_Base;
--- 206,213 ----
     end Value;
  
     function Value
!      (Ref    : Pointer;
!       Length : ptrdiff_t) return Element_Array
     is
        L : Index_Base;
        H : Index_Base;
*************** package body Interfaces.C.Pointers is
*** 255,263 ****
     --------------------
  
     function Virtual_Length
!      (Ref        : in Pointer;
!       Terminator : in Element := Default_Terminator)
!       return       ptrdiff_t
     is
        P : Pointer;
        C : ptrdiff_t;
--- 253,260 ----
     --------------------
  
     function Virtual_Length
!      (Ref        : Pointer;
!       Terminator : Element := Default_Terminator) return ptrdiff_t
     is
        P : Pointer;
        C : ptrdiff_t;
diff -Nrcpad gcc-3.4.3/gcc/ada/i-cpoint.ads gcc-4.0.0/gcc/ada/i-cpoint.ads
*** gcc-3.4.3/gcc/ada/i-cpoint.ads	Thu Apr 24 17:54:05 2003
--- gcc-4.0.0/gcc/ada/i-cpoint.ads	Fri Mar  5 10:58:56 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1993-2000 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1993-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** pragma Preelaborate (Pointers);
*** 46,60 ****
  
     type Pointer is access all Element;
  
     function Value
!      (Ref        : in Pointer;
!       Terminator : in Element := Default_Terminator)
!       return       Element_Array;
  
     function Value
!      (Ref    : in Pointer;
!       Length : in ptrdiff_t)
!       return   Element_Array;
  
     Pointer_Error : exception;
  
--- 46,62 ----
  
     type Pointer is access all Element;
  
+    pragma No_Strict_Aliasing (Pointer);
+    --  We turn off any strict aliasing assumptions for the pointer type,
+    --  since it is possible to create "improperly" aliased values.
+ 
     function Value
!      (Ref        : Pointer;
!       Terminator : Element := Default_Terminator) return Element_Array;
  
     function Value
!      (Ref    : Pointer;
!       Length : ptrdiff_t) return Element_Array;
  
     Pointer_Error : exception;
  
*************** pragma Preelaborate (Pointers);
*** 62,71 ****
     -- C-style Pointer Arithmetic --
     --------------------------------
  
!    function "+" (Left : in Pointer;   Right : in ptrdiff_t) return Pointer;
!    function "+" (Left : in ptrdiff_t; Right : in Pointer)   return Pointer;
!    function "-" (Left : in Pointer;   Right : in ptrdiff_t) return Pointer;
!    function "-" (Left : in Pointer;   Right : in Pointer)   return ptrdiff_t;
  
     procedure Increment (Ref : in out Pointer);
     procedure Decrement (Ref : in out Pointer);
--- 64,73 ----
     -- C-style Pointer Arithmetic --
     --------------------------------
  
!    function "+" (Left : Pointer;   Right : ptrdiff_t) return Pointer;
!    function "+" (Left : ptrdiff_t; Right : Pointer)   return Pointer;
!    function "-" (Left : Pointer;   Right : ptrdiff_t) return Pointer;
!    function "-" (Left : Pointer;   Right : Pointer)   return ptrdiff_t;
  
     procedure Increment (Ref : in out Pointer);
     procedure Decrement (Ref : in out Pointer);
*************** pragma Preelaborate (Pointers);
*** 76,95 ****
     pragma Convention (Intrinsic, Decrement);
  
     function Virtual_Length
!      (Ref        : in Pointer;
!       Terminator : in Element := Default_Terminator)
!       return       ptrdiff_t;
  
     procedure Copy_Terminated_Array
!      (Source     : in Pointer;
!       Target     : in Pointer;
!       Limit      : in ptrdiff_t := ptrdiff_t'Last;
!       Terminator : in Element := Default_Terminator);
  
     procedure Copy_Array
!      (Source  : in Pointer;
!       Target  : in Pointer;
!       Length  : in ptrdiff_t);
  
  private
     pragma Inline ("+");
--- 78,96 ----
     pragma Convention (Intrinsic, Decrement);
  
     function Virtual_Length
!      (Ref        : Pointer;
!       Terminator : Element := Default_Terminator) return ptrdiff_t;
  
     procedure Copy_Terminated_Array
!      (Source     : Pointer;
!       Target     : Pointer;
!       Limit      : ptrdiff_t := ptrdiff_t'Last;
!       Terminator : Element := Default_Terminator);
  
     procedure Copy_Array
!      (Source  : Pointer;
!       Target  : Pointer;
!       Length  : ptrdiff_t);
  
  private
     pragma Inline ("+");
diff -Nrcpad gcc-3.4.3/gcc/ada/i-cpp-vms.adb gcc-4.0.0/gcc/ada/i-cpp-vms.adb
*** gcc-3.4.3/gcc/ada/i-cpp-vms.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/i-cpp-vms.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,346 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --                       I N T E R F A C E S . C P P                        --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --         Copyright (C) 2000-2004, Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the OpenVMS/Alpha DEC C++ (cxx) version of this package
+ 
+ with Ada.Tags;                use Ada.Tags;
+ with System;                  use System;
+ with System.Storage_Elements; use System.Storage_Elements;
+ with Unchecked_Conversion;
+ 
+ package body Interfaces.CPP is
+ 
+    subtype Cstring is String (Positive);
+    type Cstring_Ptr is access all Cstring;
+    type Tag_Table is array (Natural range <>) of Vtable_Ptr;
+    pragma Suppress_Initialization (Tag_Table);
+ 
+    type Type_Specific_Data is record
+       Idepth        : Natural;
+       Expanded_Name : Cstring_Ptr;
+       External_Tag  : Cstring_Ptr;
+       HT_Link       : Tag;
+       Ancestor_Tags : Tag_Table (Natural);
+    end record;
+ 
+    type Vtable_Entry is record
+      Pfn    : System.Address;
+    end record;
+ 
+    type Type_Specific_Data_Ptr is access all Type_Specific_Data;
+    type Vtable_Entry_Array is array (Positive range <>) of Vtable_Entry;
+ 
+    type VTable is record
+       Prims_Ptr : Vtable_Entry_Array (Positive);
+       TSD       : Type_Specific_Data_Ptr;
+       --  Location of TSD is unknown so it got moved here to be out of the
+       --  way of Prims_Ptr. Find it later. ???
+    end record;
+ 
+    --------------------------------------------------------
+    -- Unchecked Conversions for Tag, Vtable_Ptr, and TSD --
+    --------------------------------------------------------
+ 
+    function To_Type_Specific_Data_Ptr is
+      new Unchecked_Conversion (Address, Type_Specific_Data_Ptr);
+ 
+    function To_Address is
+      new Unchecked_Conversion (Type_Specific_Data_Ptr, Address);
+ 
+    ---------------------------------------------
+    -- Unchecked Conversions for String Fields --
+    ---------------------------------------------
+ 
+    function To_Cstring_Ptr is
+      new Unchecked_Conversion (Address, Cstring_Ptr);
+ 
+    function To_Address is
+      new Unchecked_Conversion (Cstring_Ptr, Address);
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    function Length (Str : Cstring_Ptr) return Natural;
+    --  Length of string represented by the given pointer (treating the
+    --  string as a C-style string, which is Nul terminated).
+ 
+    --------------------
+    -- Displaced_This --
+    --------------------
+ 
+    function Displaced_This
+     (Current_This : System.Address;
+      Vptr         : Vtable_Ptr;
+      Position     : Positive) return System.Address
+    is
+       pragma Warnings (Off, Vptr);
+       pragma Warnings (Off, Position);
+    begin
+       return Current_This;
+       --        + Storage_Offset (Vptr.Prims_Ptr (Position).Delta1);
+       --  why is above line commented out ???
+    end Displaced_This;
+ 
+    -----------------------
+    -- CPP_CW_Membership --
+    -----------------------
+ 
+    function CPP_CW_Membership
+      (Obj_Tag : Vtable_Ptr;
+       Typ_Tag : Vtable_Ptr) return Boolean
+    is
+       Pos : constant Integer := Obj_Tag.TSD.Idepth - Typ_Tag.TSD.Idepth;
+    begin
+       return Pos >= 0 and then Obj_Tag.TSD.Ancestor_Tags (Pos) = Typ_Tag;
+    end CPP_CW_Membership;
+ 
+    ---------------------------
+    -- CPP_Get_Expanded_Name --
+    ---------------------------
+ 
+    function CPP_Get_Expanded_Name (T : Vtable_Ptr) return Address is
+    begin
+       return To_Address (T.TSD.Expanded_Name);
+    end CPP_Get_Expanded_Name;
+ 
+    --------------------------
+    -- CPP_Get_External_Tag --
+    --------------------------
+ 
+    function CPP_Get_External_Tag (T : Vtable_Ptr) return Address is
+    begin
+       return To_Address (T.TSD.External_Tag);
+    end CPP_Get_External_Tag;
+ 
+    -------------------------------
+    -- CPP_Get_Inheritance_Depth --
+    -------------------------------
+ 
+    function CPP_Get_Inheritance_Depth (T : Vtable_Ptr) return Natural is
+    begin
+       return T.TSD.Idepth;
+    end CPP_Get_Inheritance_Depth;
+ 
+    -----------------------
+    -- CPP_Get_RC_Offset --
+    -----------------------
+ 
+    function CPP_Get_RC_Offset (T : Vtable_Ptr) return SSE.Storage_Offset is
+       pragma Warnings (Off, T);
+    begin
+       return 0;
+    end CPP_Get_RC_Offset;
+ 
+    -----------------------------
+    -- CPP_Get_Prim_Op_Address --
+    -----------------------------
+ 
+    function CPP_Get_Prim_Op_Address
+      (T        : Vtable_Ptr;
+       Position : Positive) return Address
+    is
+    begin
+       return T.Prims_Ptr (Position).Pfn;
+    end CPP_Get_Prim_Op_Address;
+ 
+    -------------------------------
+    -- CPP_Get_Remotely_Callable --
+    -------------------------------
+ 
+    function CPP_Get_Remotely_Callable (T : Vtable_Ptr) return Boolean is
+       pragma Warnings (Off, T);
+    begin
+       return True;
+    end CPP_Get_Remotely_Callable;
+ 
+    -----------------
+    -- CPP_Get_TSD --
+    -----------------
+ 
+    function CPP_Get_TSD  (T : Vtable_Ptr) return Address is
+    begin
+       return To_Address (T.TSD);
+    end CPP_Get_TSD;
+ 
+    --------------------
+    -- CPP_Inherit_DT --
+    --------------------
+ 
+    procedure CPP_Inherit_DT
+     (Old_T       : Vtable_Ptr;
+      New_T       : Vtable_Ptr;
+      Entry_Count : Natural)
+    is
+    begin
+       if Old_T /= null then
+          New_T.Prims_Ptr (1 .. Entry_Count) :=
+            Old_T.Prims_Ptr (1 .. Entry_Count);
+       end if;
+    end CPP_Inherit_DT;
+ 
+    ---------------------
+    -- CPP_Inherit_TSD --
+    ---------------------
+ 
+    procedure CPP_Inherit_TSD
+      (Old_TSD : Address;
+       New_Tag : Vtable_Ptr)
+    is
+       TSD : constant Type_Specific_Data_Ptr :=
+               To_Type_Specific_Data_Ptr (Old_TSD);
+ 
+       New_TSD : Type_Specific_Data renames New_Tag.TSD.all;
+ 
+    begin
+       if TSD /= null then
+          New_TSD.Idepth := TSD.Idepth + 1;
+          New_TSD.Ancestor_Tags (1 .. New_TSD.Idepth)
+            := TSD.Ancestor_Tags (0 .. TSD.Idepth);
+       else
+          New_TSD.Idepth := 0;
+       end if;
+ 
+       New_TSD.Ancestor_Tags (0) := New_Tag;
+    end CPP_Inherit_TSD;
+ 
+    ---------------------------
+    -- CPP_Set_Expanded_Name --
+    ---------------------------
+ 
+    procedure CPP_Set_Expanded_Name (T : Vtable_Ptr; Value : Address) is
+    begin
+       T.TSD.Expanded_Name := To_Cstring_Ptr (Value);
+    end CPP_Set_Expanded_Name;
+ 
+    --------------------------
+    -- CPP_Set_External_Tag --
+    --------------------------
+ 
+    procedure CPP_Set_External_Tag (T : Vtable_Ptr; Value : Address) is
+    begin
+       T.TSD.External_Tag := To_Cstring_Ptr (Value);
+    end CPP_Set_External_Tag;
+ 
+    -------------------------------
+    -- CPP_Set_Inheritance_Depth --
+    -------------------------------
+ 
+    procedure CPP_Set_Inheritance_Depth
+      (T     : Vtable_Ptr;
+       Value : Natural)
+    is
+    begin
+       T.TSD.Idepth := Value;
+    end CPP_Set_Inheritance_Depth;
+ 
+    -----------------------------
+    -- CPP_Set_Prim_Op_Address --
+    -----------------------------
+ 
+    procedure CPP_Set_Prim_Op_Address
+      (T        : Vtable_Ptr;
+       Position : Positive;
+       Value    : Address)
+    is
+    begin
+       T.Prims_Ptr (Position).Pfn := Value;
+    end CPP_Set_Prim_Op_Address;
+ 
+    -----------------------
+    -- CPP_Set_RC_Offset --
+    -----------------------
+ 
+    procedure CPP_Set_RC_Offset (T : Vtable_Ptr; Value : SSE.Storage_Offset) is
+       pragma Warnings (Off, T);
+       pragma Warnings (Off, Value);
+    begin
+       null;
+    end CPP_Set_RC_Offset;
+ 
+    -------------------------------
+    -- CPP_Set_Remotely_Callable --
+    -------------------------------
+ 
+    procedure CPP_Set_Remotely_Callable (T : Vtable_Ptr; Value : Boolean) is
+       pragma Warnings (Off, T);
+       pragma Warnings (Off, Value);
+    begin
+       null;
+    end CPP_Set_Remotely_Callable;
+ 
+    -----------------
+    -- CPP_Set_TSD --
+    -----------------
+ 
+    procedure CPP_Set_TSD (T : Vtable_Ptr; Value : Address) is
+    begin
+       T.TSD := To_Type_Specific_Data_Ptr (Value);
+    end CPP_Set_TSD;
+ 
+    -------------------
+    -- Expanded_Name --
+    -------------------
+ 
+    function Expanded_Name (T : Vtable_Ptr) return String is
+       Result : constant Cstring_Ptr := T.TSD.Expanded_Name;
+    begin
+       return Result (1 .. Length (Result));
+    end Expanded_Name;
+ 
+    ------------------
+    -- External_Tag --
+    ------------------
+ 
+    function External_Tag (T : Vtable_Ptr) return String is
+       Result : constant Cstring_Ptr := T.TSD.External_Tag;
+    begin
+       return Result (1 .. Length (Result));
+    end External_Tag;
+ 
+    ------------
+    -- Length --
+    ------------
+ 
+    function Length (Str : Cstring_Ptr) return Natural is
+       Len : Integer := 1;
+ 
+    begin
+       while Str (Len) /= ASCII.Nul loop
+          Len := Len + 1;
+       end loop;
+ 
+       return Len - 1;
+    end Length;
+ 
+ end Interfaces.CPP;
diff -Nrcpad gcc-3.4.3/gcc/ada/i-cpp.adb gcc-4.0.0/gcc/ada/i-cpp.adb
*** gcc-3.4.3/gcc/ada/i-cpp.adb	Tue Oct 21 13:42:08 2003
--- gcc-4.0.0/gcc/ada/i-cpp.adb	Thu Feb 10 13:50:43 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 32,44 ****
  ------------------------------------------------------------------------------
  
  with Ada.Tags;                use Ada.Tags;
- with Interfaces.C;            use Interfaces.C;
  with System;                  use System;
  with System.Storage_Elements; use System.Storage_Elements;
- with Unchecked_Conversion;
  
  package body Interfaces.CPP is
  
     subtype Cstring is String (Positive);
     type Cstring_Ptr is access all Cstring;
     type Tag_Table is array (Natural range <>) of Vtable_Ptr;
--- 32,68 ----
  ------------------------------------------------------------------------------
  
  with Ada.Tags;                use Ada.Tags;
  with System;                  use System;
  with System.Storage_Elements; use System.Storage_Elements;
  
  package body Interfaces.CPP is
  
+ --  Structure of the Dispatch Table
+ 
+ --           +-----------------------+
+ --           |     Offset_To_Top     |
+ --           +-----------------------+
+ --           | Typeinfo_Ptr/TSD_Ptr  |----> Type Specific Data
+ --  Tag ---> +-----------------------+      +-------------------+
+ --           |        table of       |      | inheritance depth |
+ --           :     primitive ops     :      +-------------------+
+ --           |        pointers       |      |   expanded name   |
+ --           +-----------------------+      +-------------------+
+ --                                          |   external tag    |
+ --                                          +-------------------+
+ --                                          |   Hash table link |
+ --                                          +-------------------+
+ --                                          | Remotely Callable |
+ --                                          +-------------------+
+ --                                          | Rec Ctrler offset |
+ --                                          +-------------------+
+ --                                          | table of          |
+ --                                          :   ancestor        :
+ --                                          |      tags         |
+ --                                          +-------------------+
+ 
+    --  The declarations below need (extensive) comments ???
+ 
     subtype Cstring is String (Positive);
     type Cstring_Ptr is access all Cstring;
     type Tag_Table is array (Natural range <>) of Vtable_Ptr;
*************** package body Interfaces.CPP is
*** 53,84 ****
     end record;
  
     type Vtable_Entry is record
!      Pfn    : System.Address;
     end record;
  
-    type Type_Specific_Data_Ptr is access all Type_Specific_Data;
     type Vtable_Entry_Array is array (Positive range <>) of Vtable_Entry;
  
     type VTable is record
!       Unused1   : C.short;
!       Unused2   : C.short;
!       TSD       : Type_Specific_Data_Ptr;
!       Prims_Ptr : Vtable_Entry_Array (Positive);
     end record;
  
!    --------------------------------------------------------
!    -- Unchecked Conversions for Tag, Vtable_Ptr, and TSD --
!    --------------------------------------------------------
! 
!    function To_Type_Specific_Data_Ptr is
!      new Unchecked_Conversion (Address, Type_Specific_Data_Ptr);
  
!    function To_Address is
!      new Unchecked_Conversion (Type_Specific_Data_Ptr, Address);
  
!    ---------------------------------------------
!    -- Unchecked Conversions for String Fields --
!    ---------------------------------------------
  
     function To_Cstring_Ptr is
       new Unchecked_Conversion (Address, Cstring_Ptr);
--- 77,111 ----
     end record;
  
     type Vtable_Entry is record
!      Pfn : System.Address;
     end record;
  
     type Vtable_Entry_Array is array (Positive range <>) of Vtable_Entry;
  
     type VTable is record
!       --  Offset_To_Top : Integer;
!       --  Typeinfo_Ptr  : System.Address; -- TSD is currently also here???
!       Prims_Ptr  : Vtable_Entry_Array (Positive);
     end record;
+    --  Note: See comment in a-tags.adb explaining why the components
+    --        Offset_To_Top and Typeinfo_Ptr have been commented out.
+    --  -----------------------------------------------------------------------
+    --  The size of the Prims_Ptr array actually depends on the tagged type to
+    --  which it applies. For each tagged type, the expander computes the
+    --  actual array size, allocates the Dispatch_Table record accordingly, and
+    --  generates code that displaces the base of the record after the
+    --  Typeinfo_Ptr component. For this reason the first two components have
+    --  been commented in the previous declaration. The access to these
+    --  components is done by means of local functions.
  
!    ---------------------------
!    -- Unchecked Conversions --
!    ---------------------------
  
!    type Int_Ptr is access Integer;
  
!    function To_Int_Ptr is
!       new Unchecked_Conversion (System.Address, Int_Ptr);
  
     function To_Cstring_Ptr is
       new Unchecked_Conversion (Address, Cstring_Ptr);
*************** package body Interfaces.CPP is
*** 91,98 ****
     -----------------------
  
     function Length (Str : Cstring_Ptr) return Natural;
!    --  Length of string represented by the given pointer (treating the
!    --  string as a C-style string, which is Nul terminated).
  
     -----------------------
     -- CPP_CW_Membership --
--- 118,137 ----
     -----------------------
  
     function Length (Str : Cstring_Ptr) return Natural;
!    --  Length of string represented by the given pointer (treating the string
!    --  as a C-style string, which is Nul terminated).
! 
!    function Offset_To_Top (T : Vtable_Ptr) return Integer;
!    --  Returns the current value of the offset_to_top component available in
!    --  the prologue of the dispatch table.
! 
!    function Typeinfo_Ptr (T : Vtable_Ptr) return System.Address;
!    --  Returns the current value of the typeinfo_ptr component available in
!    --  the prologue of the dispatch table.
! 
!    pragma Unreferenced (Offset_To_Top);
!    pragma Unreferenced (Typeinfo_Ptr);
!    --  These functions will be used for full compatibility with the C++ ABI
  
     -----------------------
     -- CPP_CW_Membership --
*************** package body Interfaces.CPP is
*** 100,111 ****
  
     function CPP_CW_Membership
       (Obj_Tag : Vtable_Ptr;
!       Typ_Tag : Vtable_Ptr)
!       return Boolean
     is
!       Pos : constant Integer := Obj_Tag.TSD.Idepth - Typ_Tag.TSD.Idepth;
     begin
!       return Pos >= 0 and then Obj_Tag.TSD.Ancestor_Tags (Pos) = Typ_Tag;
     end CPP_CW_Membership;
  
     ---------------------------
--- 139,149 ----
  
     function CPP_CW_Membership
       (Obj_Tag : Vtable_Ptr;
!       Typ_Tag : Vtable_Ptr) return Boolean
     is
!       Pos : constant Integer := TSD (Obj_Tag).Idepth - TSD (Typ_Tag).Idepth;
     begin
!       return Pos >= 0 and then TSD (Obj_Tag).Ancestor_Tags (Pos) = Typ_Tag;
     end CPP_CW_Membership;
  
     ---------------------------
*************** package body Interfaces.CPP is
*** 114,120 ****
  
     function CPP_Get_Expanded_Name (T : Vtable_Ptr) return Address is
     begin
!       return To_Address (T.TSD.Expanded_Name);
     end CPP_Get_Expanded_Name;
  
     --------------------------
--- 152,158 ----
  
     function CPP_Get_Expanded_Name (T : Vtable_Ptr) return Address is
     begin
!       return To_Address (TSD (T).Expanded_Name);
     end CPP_Get_Expanded_Name;
  
     --------------------------
*************** package body Interfaces.CPP is
*** 123,129 ****
  
     function CPP_Get_External_Tag (T : Vtable_Ptr) return Address is
     begin
!       return To_Address (T.TSD.External_Tag);
     end CPP_Get_External_Tag;
  
     -------------------------------
--- 161,167 ----
  
     function CPP_Get_External_Tag (T : Vtable_Ptr) return Address is
     begin
!       return To_Address (TSD (T).External_Tag);
     end CPP_Get_External_Tag;
  
     -------------------------------
*************** package body Interfaces.CPP is
*** 132,138 ****
  
     function CPP_Get_Inheritance_Depth (T : Vtable_Ptr) return Natural is
     begin
!       return T.TSD.Idepth;
     end CPP_Get_Inheritance_Depth;
  
     -------------------------
--- 170,176 ----
  
     function CPP_Get_Inheritance_Depth (T : Vtable_Ptr) return Natural is
     begin
!       return TSD (T).Idepth;
     end CPP_Get_Inheritance_Depth;
  
     -------------------------
*************** package body Interfaces.CPP is
*** 141,148 ****
  
     function CPP_Get_Prim_Op_Address
       (T        : Vtable_Ptr;
!       Position : Positive)
!       return Address is
     begin
        return T.Prims_Ptr (Position).Pfn;
     end CPP_Get_Prim_Op_Address;
--- 179,186 ----
  
     function CPP_Get_Prim_Op_Address
       (T        : Vtable_Ptr;
!       Position : Positive) return Address
!    is
     begin
        return T.Prims_Ptr (Position).Pfn;
     end CPP_Get_Prim_Op_Address;
*************** package body Interfaces.CPP is
*** 153,159 ****
  
     function CPP_Get_RC_Offset (T : Vtable_Ptr) return SSE.Storage_Offset is
        pragma Warnings (Off, T);
- 
     begin
        return 0;
     end CPP_Get_RC_Offset;
--- 191,196 ----
*************** package body Interfaces.CPP is
*** 164,170 ****
  
     function CPP_Get_Remotely_Callable (T : Vtable_Ptr) return Boolean is
        pragma Warnings (Off, T);
- 
     begin
        return True;
     end CPP_Get_Remotely_Callable;
--- 201,206 ----
*************** package body Interfaces.CPP is
*** 174,181 ****
     -----------------
  
     function CPP_Get_TSD  (T : Vtable_Ptr) return Address is
     begin
!       return To_Address (T.TSD);
     end CPP_Get_TSD;
  
     --------------------
--- 210,220 ----
     -----------------
  
     function CPP_Get_TSD  (T : Vtable_Ptr) return Address is
+       use type System.Storage_Elements.Storage_Offset;
+       TSD_Ptr : constant Addr_Ptr :=
+                   To_Addr_Ptr (To_Address (T) - CPP_DT_Typeinfo_Ptr_Size);
     begin
!       return TSD_Ptr.all;
     end CPP_Get_TSD;
  
     --------------------
*************** package body Interfaces.CPP is
*** 202,222 ****
       (Old_TSD : Address;
        New_Tag : Vtable_Ptr)
     is
!       TSD : constant Type_Specific_Data_Ptr
!         := To_Type_Specific_Data_Ptr (Old_TSD);
  
!       New_TSD : Type_Specific_Data renames New_Tag.TSD.all;
  
     begin
!       if TSD /= null then
!          New_TSD.Idepth := TSD.Idepth + 1;
!          New_TSD.Ancestor_Tags (1 .. New_TSD.Idepth)
!            := TSD.Ancestor_Tags (0 .. TSD.Idepth);
        else
!          New_TSD.Idepth := 0;
        end if;
  
!       New_TSD.Ancestor_Tags (0) := New_Tag;
     end CPP_Inherit_TSD;
  
     ---------------------------
--- 241,262 ----
       (Old_TSD : Address;
        New_Tag : Vtable_Ptr)
     is
!       Old_TSD_Ptr : constant Type_Specific_Data_Ptr :=
!                       To_Type_Specific_Data_Ptr (Old_TSD);
  
!       New_TSD_Ptr : constant Type_Specific_Data_Ptr :=
!                       TSD (New_Tag);
  
     begin
!       if Old_TSD_Ptr /= null then
!          New_TSD_Ptr.Idepth := Old_TSD_Ptr.Idepth + 1;
!          New_TSD_Ptr.Ancestor_Tags (1 .. New_TSD_Ptr.Idepth) :=
!            Old_TSD_Ptr.Ancestor_Tags (0 .. Old_TSD_Ptr.Idepth);
        else
!          New_TSD_Ptr.Idepth := 0;
        end if;
  
!       New_TSD_Ptr.Ancestor_Tags (0) := New_Tag;
     end CPP_Inherit_TSD;
  
     ---------------------------
*************** package body Interfaces.CPP is
*** 225,231 ****
  
     procedure CPP_Set_Expanded_Name (T : Vtable_Ptr; Value : Address) is
     begin
!       T.TSD.Expanded_Name := To_Cstring_Ptr (Value);
     end CPP_Set_Expanded_Name;
  
     --------------------------
--- 265,271 ----
  
     procedure CPP_Set_Expanded_Name (T : Vtable_Ptr; Value : Address) is
     begin
!       TSD (T).Expanded_Name := To_Cstring_Ptr (Value);
     end CPP_Set_Expanded_Name;
  
     --------------------------
*************** package body Interfaces.CPP is
*** 234,240 ****
  
     procedure CPP_Set_External_Tag (T : Vtable_Ptr; Value : Address) is
     begin
!       T.TSD.External_Tag := To_Cstring_Ptr (Value);
     end CPP_Set_External_Tag;
  
     -------------------------------
--- 274,280 ----
  
     procedure CPP_Set_External_Tag (T : Vtable_Ptr; Value : Address) is
     begin
!       TSD (T).External_Tag := To_Cstring_Ptr (Value);
     end CPP_Set_External_Tag;
  
     -------------------------------
*************** package body Interfaces.CPP is
*** 246,252 ****
        Value : Natural)
     is
     begin
!       T.TSD.Idepth := Value;
     end CPP_Set_Inheritance_Depth;
  
     -----------------------------
--- 286,292 ----
        Value : Natural)
     is
     begin
!       TSD (T).Idepth := Value;
     end CPP_Set_Inheritance_Depth;
  
     -----------------------------
*************** package body Interfaces.CPP is
*** 269,275 ****
     procedure CPP_Set_RC_Offset (T : Vtable_Ptr; Value : SSE.Storage_Offset) is
        pragma Warnings (Off, T);
        pragma Warnings (Off, Value);
- 
     begin
        null;
     end CPP_Set_RC_Offset;
--- 309,314 ----
*************** package body Interfaces.CPP is
*** 281,287 ****
     procedure CPP_Set_Remotely_Callable (T : Vtable_Ptr; Value : Boolean) is
        pragma Warnings (Off, T);
        pragma Warnings (Off, Value);
- 
     begin
        null;
     end CPP_Set_Remotely_Callable;
--- 320,325 ----
*************** package body Interfaces.CPP is
*** 291,298 ****
     -----------------
  
     procedure CPP_Set_TSD (T : Vtable_Ptr; Value : Address) is
     begin
!       T.TSD := To_Type_Specific_Data_Ptr (Value);
     end CPP_Set_TSD;
  
     --------------------
--- 329,339 ----
     -----------------
  
     procedure CPP_Set_TSD (T : Vtable_Ptr; Value : Address) is
+       use type System.Storage_Elements.Storage_Offset;
+       TSD_Ptr : constant Addr_Ptr :=
+                   To_Addr_Ptr (To_Address (T) - CPP_DT_Typeinfo_Ptr_Size);
     begin
!       TSD_Ptr.all := Value;
     end CPP_Set_TSD;
  
     --------------------
*************** package body Interfaces.CPP is
*** 320,327 ****
     -------------------
  
     function Expanded_Name (T : Vtable_Ptr) return String is
!       Result : constant Cstring_Ptr := T.TSD.Expanded_Name;
! 
     begin
        return Result (1 .. Length (Result));
     end Expanded_Name;
--- 361,367 ----
     -------------------
  
     function Expanded_Name (T : Vtable_Ptr) return String is
!       Result : constant Cstring_Ptr := TSD (T).Expanded_Name;
     begin
        return Result (1 .. Length (Result));
     end Expanded_Name;
*************** package body Interfaces.CPP is
*** 331,338 ****
     ------------------
  
     function External_Tag (T : Vtable_Ptr) return String is
!       Result : constant Cstring_Ptr := T.TSD.External_Tag;
! 
     begin
        return Result (1 .. Length (Result));
     end External_Tag;
--- 371,377 ----
     ------------------
  
     function External_Tag (T : Vtable_Ptr) return String is
!       Result : constant Cstring_Ptr := TSD (T).External_Tag;
     begin
        return Result (1 .. Length (Result));
     end External_Tag;
*************** package body Interfaces.CPP is
*** 351,354 ****
--- 390,428 ----
  
        return Len - 1;
     end Length;
+ 
+    ------------------
+    -- Offset_To_Top --
+    ------------------
+ 
+    function Offset_To_Top (T : Vtable_Ptr) return Integer is
+       use type System.Storage_Elements.Storage_Offset;
+ 
+       TSD_Ptr : constant Int_Ptr
+         := To_Int_Ptr (To_Address (T) - CPP_DT_Prologue_Size);
+    begin
+       return TSD_Ptr.all;
+    end Offset_To_Top;
+ 
+    ------------------
+    -- Typeinfo_Ptr --
+    ------------------
+ 
+    function Typeinfo_Ptr (T : Vtable_Ptr) return System.Address is
+       use type System.Storage_Elements.Storage_Offset;
+       TSD_Ptr : constant Addr_Ptr :=
+                   To_Addr_Ptr (To_Address (T) - CPP_DT_Typeinfo_Ptr_Size);
+    begin
+       return TSD_Ptr.all;
+    end Typeinfo_Ptr;
+ 
+    ---------
+    -- TSD --
+    ---------
+ 
+    function TSD (T : Vtable_Ptr) return Type_Specific_Data_Ptr is
+    begin
+       return To_Type_Specific_Data_Ptr (CPP_Get_TSD (T));
+    end TSD;
+ 
  end Interfaces.CPP;
diff -Nrcpad gcc-3.4.3/gcc/ada/i-cpp.ads gcc-4.0.0/gcc/ada/i-cpp.ads
*** gcc-3.4.3/gcc/ada/i-cpp.ads	Thu Apr 24 17:54:05 2003
--- gcc-4.0.0/gcc/ada/i-cpp.ads	Thu Feb 10 13:50:44 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2000, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 33,62 ****
  
  --  Definitions for interfacing to C++ classes
  
  with System;
  with System.Storage_Elements;
  
  package Interfaces.CPP is
  
-    package S   renames System;
-    package SSE renames System.Storage_Elements;
- 
-    --  This package corresponds to Ada.Tags but applied to tagged types
-    --  which are 'imported' from C++ and correspond to exactly to a C++
-    --  Class.  GNAT doesn't know about the structure od the C++ dispatch
-    --  table (Vtable) but always access it through the procedural interface
-    --  defined below, thus the implementation of this package (the body) can
-    --  be customized to another C++ compiler without any change in the
-    --  compiler code itself as long as this procedural interface is
-    --  respected. Note that Ada.Tags defines a very similar procedural
-    --  interface to the regular Ada Dispatch Table.
- 
     type Vtable_Ptr is private;
  
     function Expanded_Name (T : Vtable_Ptr) return String;
     function External_Tag  (T : Vtable_Ptr) return String;
  
  private
  
     procedure CPP_Set_Prim_Op_Address
       (T        : Vtable_Ptr;
--- 33,72 ----
  
  --  Definitions for interfacing to C++ classes
  
+ --  This package corresponds to Ada.Tags but applied to tagged types which are
+ --  are imported from C++ and correspond exactly to a C++ Class. The code that
+ --  the GNAT front end generates does not know about the structure of the C++
+ --  dispatch table (Vtable) but always accesses it through the procedural
+ --  interface defined in this package, thus the implementation of this package
+ --  (the body) can be customized to another C++ compiler without any change in
+ --  the compiler code itself as long as this procedural interface is respected.
+ --  Note that Ada.Tags defines a very similar procedural interface to the
+ --  regular Ada Dispatch Table.
+ 
  with System;
  with System.Storage_Elements;
+ with Unchecked_Conversion;
  
  package Interfaces.CPP is
  
     type Vtable_Ptr is private;
  
     function Expanded_Name (T : Vtable_Ptr) return String;
     function External_Tag  (T : Vtable_Ptr) return String;
  
  private
+    package S   renames System;
+    package SSE renames System.Storage_Elements;
+ 
+    type Vtable;
+    type Vtable_Ptr is access all Vtable;
+ 
+    type Type_Specific_Data;
+    type Type_Specific_Data_Ptr is access all Type_Specific_Data;
+ 
+    --  These subprograms are in the private part. They are never accessed
+    --  directly except from compiler generated code, which has access to
+    --  private components of packages via the Rtsfind interface.
  
     procedure CPP_Set_Prim_Op_Address
       (T        : Vtable_Ptr;
*************** private
*** 98,103 ****
--- 108,118 ----
                                (2 * (Standard'Address_Size / S.Storage_Unit));
     --  Size of the first part of the dispatch table
  
+    CPP_DT_Typeinfo_Ptr_Size : constant SSE.Storage_Count :=
+                             SSE.Storage_Count
+                               (Standard'Address_Size / System.Storage_Unit);
+    --  Size of the Typeinfo_Ptr field of the Dispatch Table.
+ 
     CPP_DT_Entry_Size : constant SSE.Storage_Count :=
                           SSE.Storage_Count
                             (1 * (Standard'Address_Size / S.Storage_Unit));
*************** private
*** 110,116 ****
  
     CPP_TSD_Entry_Size : constant SSE.Storage_Count :=
                            SSE.Storage_Count
!                             (Standard'Address_Size / S.Storage_Unit);
     --  Size of each ancestor tag entry in the TSD
  
     procedure CPP_Inherit_DT
--- 125,131 ----
  
     CPP_TSD_Entry_Size : constant SSE.Storage_Count :=
                            SSE.Storage_Count
!                             (1 * (Standard'Address_Size / S.Storage_Unit));
     --  Size of each ancestor tag entry in the TSD
  
     procedure CPP_Inherit_DT
*************** private
*** 171,178 ****
     --  compatible with MI.
     --  (used for virtual function calls)
  
!    type Vtable;
!    type Vtable_Ptr is access all Vtable;
  
     pragma Inline (CPP_Set_Prim_Op_Address);
     pragma Inline (CPP_Get_Prim_Op_Address);
--- 186,206 ----
     --  compatible with MI.
     --  (used for virtual function calls)
  
!    function TSD (T : Vtable_Ptr) return Type_Specific_Data_Ptr;
!    --  This function is conceptually equivalent to Get_TSD, but
!    --  returning a Type_Specific_Data_Ptr type (rather than an Address)
!    --  simplifies the implementation of the other subprograms.
! 
!    type Addr_Ptr is access System.Address;
! 
!    function To_Address is
!      new Unchecked_Conversion (Vtable_Ptr, System.Address);
! 
!    function To_Addr_Ptr is
!       new Unchecked_Conversion (System.Address, Addr_Ptr);
! 
!    function To_Type_Specific_Data_Ptr is
!      new Unchecked_Conversion (System.Address, Type_Specific_Data_Ptr);
  
     pragma Inline (CPP_Set_Prim_Op_Address);
     pragma Inline (CPP_Get_Prim_Op_Address);
*************** private
*** 189,193 ****
--- 217,222 ----
     pragma Inline (CPP_Set_Remotely_Callable);
     pragma Inline (CPP_Get_Remotely_Callable);
     pragma Inline (Displaced_This);
+    pragma Inline (TSD);
  
  end Interfaces.CPP;
diff -Nrcpad gcc-3.4.3/gcc/ada/i-cstrea-vms.adb gcc-4.0.0/gcc/ada/i-cstrea-vms.adb
*** gcc-3.4.3/gcc/ada/i-cstrea-vms.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/i-cstrea-vms.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,255 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                 I N T E R F A C E S . C _ S T R E A M S                  --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 1996-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the Alpha/VMS version.
+ 
+ with Unchecked_Conversion;
+ package body Interfaces.C_Streams is
+ 
+    use type System.CRTL.size_t;
+ 
+    --  As the functions fread, fwrite and setvbuf are too big to be inlined,
+    --  they are just wrappers to the following implementation functions.
+ 
+    function fread_impl
+      (buffer : voids;
+       size   : size_t;
+       count  : size_t;
+       stream : FILEs) return size_t;
+ 
+    function fread_impl
+      (buffer : voids;
+       index  : size_t;
+       size   : size_t;
+       count  : size_t;
+       stream : FILEs) return size_t;
+ 
+    function fwrite_impl
+      (buffer : voids;
+       size   : size_t;
+       count  : size_t;
+       stream : FILEs) return size_t;
+ 
+    function setvbuf_impl
+      (stream : FILEs;
+       buffer : chars;
+       mode   : int;
+       size   : size_t) return int;
+ 
+    ------------
+    -- fread --
+    ------------
+ 
+    function fread_impl
+      (buffer : voids;
+       size   : size_t;
+       count  : size_t;
+       stream : FILEs) return size_t
+    is
+       Get_Count : size_t := 0;
+ 
+       type Buffer_Type is array (size_t range 1 .. count,
+                                  size_t range 1 .. size) of Character;
+       type Buffer_Access is access Buffer_Type;
+       function To_BA is new Unchecked_Conversion (voids, Buffer_Access);
+ 
+       BA : constant Buffer_Access := To_BA (buffer);
+       Ch : int;
+ 
+    begin
+       --  This Fread goes with the Fwrite below.
+       --  The C library fread sometimes can't read fputc generated files.
+ 
+       for C in 1 .. count loop
+          for S in 1 .. size loop
+             Ch := fgetc (stream);
+ 
+             if Ch = EOF then
+                return Get_Count;
+             end if;
+ 
+             BA.all (C, S) := Character'Val (Ch);
+          end loop;
+ 
+          Get_Count := Get_Count + 1;
+       end loop;
+ 
+       return Get_Count;
+    end fread_impl;
+ 
+    function fread_impl
+      (buffer : voids;
+       index  : size_t;
+       size   : size_t;
+       count  : size_t;
+       stream : FILEs) return size_t
+    is
+       Get_Count : size_t := 0;
+ 
+       type Buffer_Type is array (size_t range 1 .. count,
+                                  size_t range 1 .. size) of Character;
+       type Buffer_Access is access Buffer_Type;
+       function To_BA is new Unchecked_Conversion (voids, Buffer_Access);
+ 
+       BA : constant Buffer_Access := To_BA (buffer);
+       Ch : int;
+ 
+    begin
+       --  This Fread goes with the Fwrite below.
+       --  The C library fread sometimes can't read fputc generated files.
+ 
+       for C in 1 + index .. count + index loop
+          for S in 1 .. size loop
+             Ch := fgetc (stream);
+ 
+             if Ch = EOF then
+                return Get_Count;
+             end if;
+ 
+             BA.all (C, S) := Character'Val (Ch);
+          end loop;
+ 
+          Get_Count := Get_Count + 1;
+       end loop;
+ 
+       return Get_Count;
+    end fread_impl;
+ 
+    function fread
+      (buffer : voids;
+       size   : size_t;
+       count  : size_t;
+       stream : FILEs) return size_t
+    is
+    begin
+       return fread_impl (buffer, size, count, stream);
+    end fread;
+ 
+    function fread
+      (buffer : voids;
+       index  : size_t;
+       size   : size_t;
+       count  : size_t;
+       stream : FILEs) return size_t
+    is
+    begin
+       return fread_impl (buffer, index, size, count, stream);
+    end fread;
+ 
+    ------------
+    -- fwrite --
+    ------------
+ 
+    function fwrite_impl
+      (buffer : voids;
+       size   : size_t;
+       count  : size_t;
+       stream : FILEs) return size_t
+    is
+       Put_Count : size_t := 0;
+ 
+       type Buffer_Type is array (size_t range 1 .. count,
+                                  size_t range 1 .. size) of Character;
+       type Buffer_Access is access Buffer_Type;
+       function To_BA is new Unchecked_Conversion (voids, Buffer_Access);
+ 
+       BA : constant Buffer_Access := To_BA (buffer);
+ 
+    begin
+       --  Fwrite on VMS has the undesirable effect of always generating at
+       --  least one record of output per call, regardless of buffering.  To
+       --  get around this, we do multiple fputc calls instead.
+ 
+       for C in 1 .. count loop
+          for S in 1 .. size loop
+             if fputc (Character'Pos (BA.all (C, S)), stream) = EOF then
+                return Put_Count;
+             end if;
+          end loop;
+ 
+          Put_Count := Put_Count + 1;
+       end loop;
+ 
+       return Put_Count;
+    end fwrite_impl;
+ 
+    function fwrite
+      (buffer : voids;
+       size   : size_t;
+       count  : size_t;
+       stream : FILEs) return size_t
+    is
+    begin
+       return fwrite_impl (buffer, size, count, stream);
+    end fwrite;
+ 
+    -------------
+    -- setvbuf --
+    -------------
+ 
+    function setvbuf_impl
+      (stream : FILEs;
+       buffer : chars;
+       mode   : int;
+       size   : size_t) return int
+    is
+       use type System.Address;
+ 
+    begin
+       --  In order for the above fwrite hack to work, we must always buffer
+       --  stdout and stderr. Is_regular_file on VMS cannot detect when
+       --  these are redirected to a file, so checking for that condition
+       --  doesnt help.
+ 
+       if mode = IONBF
+         and then (stream = stdout or else stream = stderr)
+       then
+          return System.CRTL.setvbuf
+            (stream, buffer, IOLBF, System.CRTL.size_t (size));
+       else
+          return System.CRTL.setvbuf
+            (stream, buffer, mode, System.CRTL.size_t (size));
+       end if;
+    end setvbuf_impl;
+ 
+    function setvbuf
+      (stream : FILEs;
+       buffer : chars;
+       mode   : int;
+       size   : size_t) return int
+    is
+    begin
+       return setvbuf_impl (stream, buffer, mode, size);
+    end setvbuf;
+ 
+ end Interfaces.C_Streams;
diff -Nrcpad gcc-3.4.3/gcc/ada/i-cstrin.adb gcc-4.0.0/gcc/ada/i-cstrin.adb
*** gcc-3.4.3/gcc/ada/i-cstrin.adb	Tue Oct 21 13:42:08 2003
--- gcc-4.0.0/gcc/ada/i-cstrin.adb	Mon Jan  3 15:38:35 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Unchecked_Conversion;
*** 38,43 ****
--- 38,49 ----
  
  package body Interfaces.C.Strings is
  
+    --  Note that the type chars_ptr has a pragma No_Strict_Aliasing in
+    --  the spec, to prevent any assumptions about aliasing for values
+    --  of this type, since arbitrary addresses can be converted, and it
+    --  is quite likely that this type will in fact be used for aliasing
+    --  values of other types.
+ 
     function To_chars_ptr is
        new Unchecked_Conversion (Address, chars_ptr);
  
*************** package body Interfaces.C.Strings is
*** 99,105 ****
     -- New_Char_Array --
     --------------------
  
!    function New_Char_Array (Chars : in char_array) return chars_ptr is
        Index   : size_t;
        Pointer : chars_ptr;
  
--- 105,111 ----
     -- New_Char_Array --
     --------------------
  
!    function New_Char_Array (Chars : char_array) return chars_ptr is
        Index   : size_t;
        Pointer : chars_ptr;
  
*************** package body Interfaces.C.Strings is
*** 135,141 ****
     -- New_String --
     ----------------
  
!    function New_String (Str : in String) return chars_ptr is
     begin
        return New_Char_Array (To_C (Str));
     end New_String;
--- 141,147 ----
     -- New_String --
     ----------------
  
!    function New_String (Str : String) return chars_ptr is
     begin
        return New_Char_Array (To_C (Str));
     end New_String;
*************** package body Interfaces.C.Strings is
*** 177,183 ****
     -- Strlen --
     ------------
  
!    function Strlen (Item : in chars_ptr) return size_t is
        Item_Index : size_t := 0;
  
     begin
--- 183,189 ----
     -- Strlen --
     ------------
  
!    function Strlen (Item : chars_ptr) return size_t is
        Item_Index : size_t := 0;
  
     begin
*************** package body Interfaces.C.Strings is
*** 199,207 ****
     ------------------
  
     function To_Chars_Ptr
!      (Item      : in char_array_access;
!       Nul_Check : in Boolean := False)
!       return      chars_ptr
     is
     begin
        if Item = null then
--- 205,212 ----
     ------------------
  
     function To_Chars_Ptr
!      (Item      : char_array_access;
!       Nul_Check : Boolean := False) return chars_ptr
     is
     begin
        if Item = null then
*************** package body Interfaces.C.Strings is
*** 212,218 ****
           raise Terminator_Error;
        else
           return To_chars_ptr (Item (Item'First)'Address);
- 
        end if;
     end To_Chars_Ptr;
  
--- 217,222 ----
*************** package body Interfaces.C.Strings is
*** 221,229 ****
     ------------
  
     procedure Update
!      (Item   : in chars_ptr;
!       Offset : in size_t;
!       Chars  : in char_array;
        Check  : Boolean := True)
     is
        Index : chars_ptr := Item + Offset;
--- 225,233 ----
     ------------
  
     procedure Update
!      (Item   : chars_ptr;
!       Offset : size_t;
!       Chars  : char_array;
        Check  : Boolean := True)
     is
        Index : chars_ptr := Item + Offset;
*************** package body Interfaces.C.Strings is
*** 240,259 ****
     end Update;
  
     procedure Update
!      (Item   : in chars_ptr;
!       Offset : in size_t;
!       Str    : in String;
!       Check  : in Boolean := True)
     is
     begin
!       Update (Item, Offset, To_C (Str), Check);
     end Update;
  
     -----------
     -- Value --
     -----------
  
!    function Value (Item : in chars_ptr) return char_array is
        Result : char_array (0 .. Strlen (Item));
  
     begin
--- 244,269 ----
     end Update;
  
     procedure Update
!      (Item   : chars_ptr;
!       Offset : size_t;
!       Str    : String;
!       Check  : Boolean := True)
     is
     begin
!       --  Note: in RM 95, the Append_Nul => False parameter is omitted. But
!       --  this has the unintended consequence of truncating the string after
!       --  an update. As discussed in Ada 2005 AI-242, this was unintended,
!       --  and should be corrected. Since this is a clear error, it seems
!       --  appropriate to apply the correction in Ada 95 mode as well.
! 
!       Update (Item, Offset, To_C (Str, Append_Nul => False), Check);
     end Update;
  
     -----------
     -- Value --
     -----------
  
!    function Value (Item : chars_ptr) return char_array is
        Result : char_array (0 .. Strlen (Item));
  
     begin
*************** package body Interfaces.C.Strings is
*** 271,279 ****
     end Value;
  
     function Value
!      (Item   : in chars_ptr;
!       Length : in size_t)
!       return   char_array
     is
     begin
        if Item = Null_Ptr then
--- 281,288 ----
     end Value;
  
     function Value
!      (Item   : chars_ptr;
!       Length : size_t) return char_array
     is
     begin
        if Item = Null_Ptr then
*************** package body Interfaces.C.Strings is
*** 304,321 ****
        end;
     end Value;
  
!    function Value (Item : in chars_ptr) return String is
     begin
        return To_Ada (Value (Item));
     end Value;
  
!    --  As per AI-00177, this is equivalent to
!    --          To_Ada (Value (Item, Length) & nul);
! 
!    function Value (Item : in chars_ptr; Length : in size_t) return String is
        Result : char_array (0 .. Length);
  
     begin
        if Item = Null_Ptr then
           raise Dereference_Error;
        end if;
--- 313,330 ----
        end;
     end Value;
  
!    function Value (Item : chars_ptr) return String is
     begin
        return To_Ada (Value (Item));
     end Value;
  
!    function Value (Item : chars_ptr; Length : size_t) return String is
        Result : char_array (0 .. Length);
  
     begin
+       --  As per AI-00177, this is equivalent to
+       --          To_Ada (Value (Item, Length) & nul);
+ 
        if Item = Null_Ptr then
           raise Dereference_Error;
        end if;
diff -Nrcpad gcc-3.4.3/gcc/ada/i-cstrin.ads gcc-4.0.0/gcc/ada/i-cstrin.ads
*** gcc-3.4.3/gcc/ada/i-cstrin.ads	Tue Oct 21 13:42:08 2003
--- gcc-4.0.0/gcc/ada/i-cstrin.ads	Fri Mar  5 10:58:56 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1993-2002 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1993-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** pragma Preelaborate (Strings);
*** 40,45 ****
--- 40,54 ----
  
     type char_array_access is access all char_array;
  
+    pragma Warnings (Off);
+    pragma No_Strict_Aliasing (char_array_access);
+    pragma Warnings (On);
+    --  Since this type is used for external interfacing, with the pointer
+    --  coming from who knows where, it seems a good idea to turn off any
+    --  strict aliasing assumptions for this type. We turn off warnings for
+    --  this pragma to deal with being compiled with an earlier GNAT version
+    --  that does not recognize this pragma.
+ 
     type chars_ptr is private;
  
     type chars_ptr_array is array (size_t range <>) of chars_ptr;
*************** pragma Preelaborate (Strings);
*** 47,96 ****
     Null_Ptr : constant chars_ptr;
  
     function To_Chars_Ptr
!      (Item      : in char_array_access;
!       Nul_Check : in Boolean := False)
!       return      chars_ptr;
  
!    function New_Char_Array (Chars : in char_array) return chars_ptr;
  
!    function New_String (Str : in String) return chars_ptr;
  
     procedure Free (Item : in out chars_ptr);
  
     Dereference_Error : exception;
  
!    function Value (Item : in chars_ptr) return char_array;
  
     function Value
!      (Item   : in chars_ptr;
!       Length : in size_t)
!       return   char_array;
  
!    function Value (Item : in chars_ptr) return String;
  
     function Value
!      (Item   : in chars_ptr;
!       Length : in size_t)
!       return   String;
  
!    function Strlen (Item : in chars_ptr) return size_t;
  
     procedure Update
!      (Item   : in chars_ptr;
!       Offset : in size_t;
!       Chars  : in char_array;
        Check  : Boolean := True);
  
     procedure Update
!      (Item   : in chars_ptr;
!       Offset : in size_t;
!       Str    : in String;
!       Check  : in Boolean := True);
  
     Update_Error : exception;
  
  private
     type chars_ptr is access all Character;
  
     Null_Ptr : constant chars_ptr := null;
  end Interfaces.C.Strings;
--- 56,107 ----
     Null_Ptr : constant chars_ptr;
  
     function To_Chars_Ptr
!      (Item      : char_array_access;
!       Nul_Check : Boolean := False) return chars_ptr;
  
!    function New_Char_Array (Chars : char_array) return chars_ptr;
  
!    function New_String (Str : String) return chars_ptr;
  
     procedure Free (Item : in out chars_ptr);
  
     Dereference_Error : exception;
  
!    function Value (Item : chars_ptr) return char_array;
  
     function Value
!      (Item   : chars_ptr;
!       Length : size_t) return char_array;
  
!    function Value (Item : chars_ptr) return String;
  
     function Value
!      (Item   : chars_ptr;
!       Length : size_t) return String;
  
!    function Strlen (Item : chars_ptr) return size_t;
  
     procedure Update
!      (Item   : chars_ptr;
!       Offset : size_t;
!       Chars  : char_array;
        Check  : Boolean := True);
  
     procedure Update
!      (Item   : chars_ptr;
!       Offset : size_t;
!       Str    : String;
!       Check  : Boolean := True);
  
     Update_Error : exception;
  
  private
     type chars_ptr is access all Character;
  
+    pragma No_Strict_Aliasing (chars_ptr);
+    --  Since this type is used for external interfacing, with the pointer
+    --  coming from who knows where, it seems a good idea to turn off any
+    --  strict aliasing assumptions for this type.
+ 
     Null_Ptr : constant chars_ptr := null;
  end Interfaces.C.Strings;
diff -Nrcpad gcc-3.4.3/gcc/ada/i-os2thr.ads gcc-4.0.0/gcc/ada/i-os2thr.ads
*** gcc-3.4.3/gcc/ada/i-os2thr.ads	Thu Apr 24 17:54:05 2003
--- gcc-4.0.0/gcc/ada/i-os2thr.ads	Tue Jul  6 13:57:30 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1993-1997 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1993-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** pragma Preelaborate (Threads);
*** 63,70 ****
        pfn     : PFNTHREAD;
        param   : PVOID;
        flag    : ULONG;
!       cbStack : ULONG)
!       return    APIRET;
     pragma Import (C, DosCreateThread, "DosCreateThread");
  
     Block_Child     : constant := 1;
--- 63,69 ----
        pfn     : PFNTHREAD;
        param   : PVOID;
        flag    : ULONG;
!       cbStack : ULONG) return APIRET;
     pragma Import (C, DosCreateThread, "DosCreateThread");
  
     Block_Child     : constant := 1;
*************** pragma Preelaborate (Threads);
*** 152,159 ****
  
     function DosGetInfoBlocks
       (Pptib : access PTIB;
!       Pppib : access PPIB)
!       return  APIRET;
     pragma Import (C, DosGetInfoBlocks, "DosGetInfoBlocks");
  
     --  Thread local memory
--- 151,157 ----
  
     function DosGetInfoBlocks
       (Pptib : access PTIB;
!       Pppib : access PPIB) return APIRET;
     pragma Import (C, DosGetInfoBlocks, "DosGetInfoBlocks");
  
     --  Thread local memory
*************** pragma Preelaborate (Threads);
*** 164,186 ****
     function DosAllocThreadLocalMemory
       (cb : ULONG;               -- Number of 4-byte DWORDs to allocate
        p  : access PVOID)        -- Address of the memory block
!    return
!       APIRET;                   -- Return Code (rc)
     pragma Import
       (Convention => C,
        Entity     => DosAllocThreadLocalMemory,
        Link_Name  => "_DosAllocThreadLocalMemory");
  
!    -----------------
!    --  Priorities --
!    -----------------
  
     function DosSetPriority
       (Scope   : ULONG;
        Class   : ULONG;
        Delta_P : IC.long;
!       PorTid  : TID)
!       return    APIRET;
     pragma Import (C, DosSetPriority, "DosSetPriority");
  
     PRTYS_PROCESS     : constant := 0;
--- 162,182 ----
     function DosAllocThreadLocalMemory
       (cb : ULONG;               -- Number of 4-byte DWORDs to allocate
        p  : access PVOID)        -- Address of the memory block
!       return APIRET;                   -- Return Code (rc)
     pragma Import
       (Convention => C,
        Entity     => DosAllocThreadLocalMemory,
        Link_Name  => "_DosAllocThreadLocalMemory");
  
!    ----------------
!    -- Priorities --
!    ----------------
  
     function DosSetPriority
       (Scope   : ULONG;
        Class   : ULONG;
        Delta_P : IC.long;
!       PorTid  : TID) return APIRET;
     pragma Import (C, DosSetPriority, "DosSetPriority");
  
     PRTYS_PROCESS     : constant := 0;
diff -Nrcpad gcc-3.4.3/gcc/ada/i-vxwork-x86.ads gcc-4.0.0/gcc/ada/i-vxwork-x86.ads
*** gcc-3.4.3/gcc/ada/i-vxwork-x86.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/i-vxwork-x86.ads	Mon Oct  4 15:01:52 2004
***************
*** 0 ****
--- 1,213 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
+ --                                                                          --
+ --                      I N T E R F A C E S . V X W O R K S                 --
+ --                                                                          --
+ --                                   S p e c                                --
+ --                                                                          --
+ --             Copyright (C) 1999-2004 Ada Core Technologies, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the x86 VxWorks version of this package
+ 
+ --  This package provides a limited binding to the VxWorks API
+ --  In particular, it interfaces with the VxWorks hardware interrupt
+ --  facilities, allowing the use of low-latency direct-vectored
+ --  interrupt handlers. Note that such handlers have a variety of
+ --  restrictions regarding system calls and language constructs. In particular,
+ --  the use of exception handlers and functions returning variable-length
+ --  objects cannot be used. Less restrictive, but higher-latency handlers can
+ --  be written using Ada protected procedures, Ada 83 style interrupt entries,
+ --  or by signalling an Ada task from within an interrupt handler using a
+ --  binary semaphore as described in the VxWorks Programmer's Manual.
+ --
+ --  For complete documentation of the operations in this package, please
+ --  consult the VxWorks Programmer's Manual and VxWorks Reference Manual.
+ 
+ with System.VxWorks;
+ 
+ package Interfaces.VxWorks is
+    pragma Preelaborate (VxWorks);
+ 
+    ------------------------------------------------------------------------
+    --  Here is a complete example that shows how to handle the Interrupt 0x33
+    --  with a direct-vectored interrupt handler in Ada using this package:
+ 
+    --  with Interfaces.VxWorks; use Interfaces.VxWorks;
+    --  with System;
+    --
+    --  package P is
+    --
+    --     Count : Integer;
+    --     pragma Atomic (Count);
+    --
+    --     procedure Handler (Parameter : System.Address);
+    --
+    --  end P;
+    --
+    --  package body P is
+    --
+    --     procedure Handler (Parameter : System.Address) is
+    --     begin
+    --        Count := Count + 1;
+    --        logMsg ("received an interrupt" & ASCII.LF & ASCII.Nul);
+    --     end Handler;
+    --  end P;
+    --
+    --  with Interfaces.VxWorks; use Interfaces.VxWorks;
+    --  with Ada.Text_IO; use Ada.Text_IO;
+    --  with Ada.Interrupts;
+    --  with Machine_Code; use Machine_Code;
+    --
+    --  with P; use P;
+    --  procedure Useint is
+    --     --  Be sure to use a reasonable interrupt number for the target
+    --     --  board!
+    --     --  This one is an unreserved interrupt for the Pentium 3 BSP
+    --     Interrupt : constant := 16#33#;
+    --
+    --     task T;
+    --
+    --     S : STATUS;
+    --
+    --     task body T is
+    --     begin
+    --        loop
+    --           Put_Line ("Generating an interrupt...");
+    --           delay 1.0;
+    --
+    --           --  Generate interrupt, using interrupt number
+    --           Asm ("int %0",
+    --                Inputs =>
+    --                  Ada.Interrupts.Interrupt_ID'Asm_Input
+    --                    ("i", Interrupt));
+    --        end loop;
+    --     end T;
+    --
+    --  begin
+    --     S := intConnect (INUM_TO_IVEC (Interrupt), Handler'Access);
+    --
+    --     loop
+    --        delay 2.0;
+    --        Put_Line ("value of count:" & P.Count'Img);
+    --     end loop;
+    --  end Useint;
+    -------------------------------------
+ 
+    subtype int is Integer;
+ 
+    type STATUS is new int;
+    --  Equivalent of the C type STATUS
+ 
+    OK    : constant STATUS := 0;
+    ERROR : constant STATUS := -1;
+ 
+    type VOIDFUNCPTR is access procedure (parameter : System.Address);
+    type Interrupt_Vector is new System.Address;
+    type Exception_Vector is new System.Address;
+ 
+    function intConnect
+      (vector    : Interrupt_Vector;
+       handler   : VOIDFUNCPTR;
+       parameter : System.Address := System.Null_Address) return STATUS;
+    --  Binding to the C routine intConnect. Use this to set up an
+    --  user handler. The routine generates a wrapper around the user
+    --  handler to save and restore context
+ 
+    function intVecGet
+      (Vector : Interrupt_Vector) return VOIDFUNCPTR;
+    --  Binding to the C routine intVecGet. Use this to get the
+    --  existing handler for later restoral
+ 
+    procedure intVecSet
+      (Vector  : Interrupt_Vector;
+       Handler : VOIDFUNCPTR);
+    --  Binding to the C routine intVecSet. Use this to restore a
+    --  handler obtained using intVecGet
+ 
+    procedure intVecGet2
+      (vector       : Interrupt_Vector;
+       pFunction    : out VOIDFUNCPTR;
+       pIdtGate     : access int;
+       pIdtSelector : access int);
+    --  Binding to the C routine intVecGet2. Use this to get the
+    --  existing handler for later restoral
+ 
+    procedure intVecSet2
+      (vector       : Interrupt_Vector;
+       pFunction    : VOIDFUNCPTR;
+       pIdtGate     : access int;
+       pIdtSelector : access int);
+    --  Binding to the C routine intVecSet2. Use this to restore a
+    --  handler obtained using intVecGet2
+ 
+    function INUM_TO_IVEC (intNum : int) return Interrupt_Vector;
+    --  Equivalent to the C macro INUM_TO_IVEC used to convert an interrupt
+    --  number to an interrupt vector
+ 
+    procedure logMsg
+      (fmt : String; arg1, arg2, arg3, arg4, arg5, arg6 : int := 0);
+    --  Binding to the C routine logMsg. Note that it is the caller's
+    --  responsibility to ensure that fmt is a null-terminated string
+    --  (e.g logMsg ("Interrupt" & ASCII.NUL))
+ 
+    type FP_CONTEXT is private;
+    --  Floating point context save and restore. Handlers using floating
+    --  point must be bracketed with these calls. The pFpContext parameter
+    --  should be an object of type FP_CONTEXT that is
+    --  declared local to the handler.
+    --  See the VxWorks Intel Architecture Supplement regarding
+    --  these routines.
+ 
+    procedure fppRestore (pFpContext : in out FP_CONTEXT);
+    --  Restore floating point context - old style
+ 
+    procedure fppSave (pFpContext : in out FP_CONTEXT);
+    --  Save floating point context - old style
+ 
+    procedure fppXrestore (pFpContext : in out FP_CONTEXT);
+    --  Restore floating point context - new style
+ 
+    procedure fppXsave (pFpContext : in out FP_CONTEXT);
+    --  Save floating point context - new style
+ 
+ private
+ 
+    type FP_CONTEXT is new System.VxWorks.FP_CONTEXT;
+    --  Target-dependent floating point context type
+ 
+    pragma Import (C, intConnect, "intConnect");
+    pragma Import (C, intVecGet, "intVecGet");
+    pragma Import (C, intVecSet, "intVecSet");
+    pragma Import (C, intVecGet2, "intVecGet2");
+    pragma Import (C, intVecSet2, "intVecSet2");
+    pragma Import (C, INUM_TO_IVEC, "__gnat_inum_to_ivec");
+    pragma Import (C, logMsg, "logMsg");
+    pragma Import (C, fppRestore, "fppRestore");
+    pragma Import (C, fppSave, "fppSave");
+    pragma Import (C, fppXrestore, "fppXrestore");
+    pragma Import (C, fppXsave, "fppXsave");
+ end Interfaces.VxWorks;
diff -Nrcpad gcc-3.4.3/gcc/ada/impunit.adb gcc-4.0.0/gcc/ada/impunit.adb
*** gcc-3.4.3/gcc/ada/impunit.adb	Mon Jan 12 11:45:24 2004
--- gcc-4.0.0/gcc/ada/impunit.adb	Thu Feb 10 13:50:14 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 2000-2004 Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 2000-2005 Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 26,50 ****
  
  with Lib;   use Lib;
  with Namet; use Namet;
- with Opt;   use Opt;
  
  package body Impunit is
  
     subtype File_Name_8 is String (1 .. 8);
     type File_List is array (Nat range <>) of File_Name_8;
  
!    --  The following is a giant string containing the concenated names
!    --  of all non-implementation internal files, i.e. the complete list
!    --  of files for internal units which a program may legitimately WITH.
  
!    --  Note that this list should match the list of units documented in
!    --  the "GNAT Library" section of the GNAT Reference Manual.
  
!    Non_Imp_File_Names : constant File_List := (
  
!    -----------------------------------------------
!    -- Ada Hierarchy Units from Reference Manual --
!    -----------------------------------------------
  
       "a-astaco",    -- Ada.Asynchronous_Task_Control
       "a-calend",    -- Ada.Calendar
--- 26,54 ----
  
  with Lib;   use Lib;
  with Namet; use Namet;
  
  package body Impunit is
  
     subtype File_Name_8 is String (1 .. 8);
     type File_List is array (Nat range <>) of File_Name_8;
  
!    ------------------
!    -- Ada 95 Units --
!    ------------------
  
!    --  The following is a giant string list containing the names of all
!    --  non-implementation internal files, i.e. the complete list of files for
!    --  internal units which a program may legitimately WITH when operating in
!    --  either Ada 95 or Ada 05 mode.
  
!    --  Note that this list should match the list of units documented in the
!    --  "GNAT Library" section of the GNAT Reference Manual.
  
!    Non_Imp_File_Names_95 : constant File_List := (
! 
!    ------------------------------------------------------
!    -- Ada Hierarchy Units from Ada-83 Reference Manual --
!    ------------------------------------------------------
  
       "a-astaco",    -- Ada.Asynchronous_Task_Control
       "a-calend",    -- Ada.Calendar
*************** package body Impunit is
*** 121,127 ****
       "a-nlelfu",    -- Ada.Numerics.Long_Elementary_Functions
       "a-nllcef",    -- Ada.Long_Long_Complex_Elementary_Functions
       "a-nllefu",    -- Ada.Numerics.Long_Long_Elementary_Functions
!      "a-nltcty",    -- Ada.Numerics.Long_Long_Complex_Types
       "a-nscefu",    -- Ada.Short_Complex_Elementary_Functions
       "a-nscoty",    -- Ada.Numerics.Short_Complex_Types
       "a-nselfu",    -- Ada.Numerics.Short_Elementary_Functions
--- 125,131 ----
       "a-nlelfu",    -- Ada.Numerics.Long_Elementary_Functions
       "a-nllcef",    -- Ada.Long_Long_Complex_Elementary_Functions
       "a-nllefu",    -- Ada.Numerics.Long_Long_Elementary_Functions
!      "a-nllcty",    -- Ada.Numerics.Long_Long_Complex_Types
       "a-nscefu",    -- Ada.Short_Complex_Elementary_Functions
       "a-nscoty",    -- Ada.Numerics.Short_Complex_Types
       "a-nselfu",    -- Ada.Numerics.Short_Elementary_Functions
*************** package body Impunit is
*** 143,148 ****
--- 147,153 ----
       "a-cwila9",    -- Ada.Characters.Wide_Latin_9
       "a-diocst",    -- Ada.Direct_IO.C_Streams
       "a-einuoc",    -- Ada.Exceptions.Is_Null_Occurrence
+      "a-elchha",    -- Ada.Exceptions.Last_Chance_Handler
       "a-exctra",    -- Ada.Exceptions.Traceback
       "a-siocst",    -- Ada.Sequential_IO.C_Streams
       "a-ssicst",    -- Ada.Streams.Stream_IO.C_Streams
*************** package body Impunit is
*** 223,230 ****
       "g-memdum",    -- GNAT.Memory_Dump
       "g-moreex",    -- GNAT.Most_Recent_Exception
       "g-os_lib",    -- GNAT.Os_Lib
!      "g-pehage",    -- GNAT.Perfect_Hash.Generators
!      "g-perhas",    -- GNAT.Perfect_Hash
       "g-regexp",    -- GNAT.Regexp
       "g-regist",    -- GNAT.Registry
       "g-regpat",    -- GNAT.Regpat
--- 228,234 ----
       "g-memdum",    -- GNAT.Memory_Dump
       "g-moreex",    -- GNAT.Most_Recent_Exception
       "g-os_lib",    -- GNAT.Os_Lib
!      "g-pehage",    -- GNAT.Perfect_Hash_Generators
       "g-regexp",    -- GNAT.Regexp
       "g-regist",    -- GNAT.Registry
       "g-regpat",    -- GNAT.Regpat
*************** package body Impunit is
*** 297,332 ****
       "s-assert",    -- System.Assertions
       "s-memory",    -- System.Memory
       "s-parint",    -- System.Partition_Interface
       "s-tasinf",    -- System.Task_Info
       "s-wchcnv",    -- System.Wch_Cnv
       "s-wchcon");   -- System.Wch_Con
  
!    -------------------------
!    -- Implementation_Unit --
!    -------------------------
  
!    function Implementation_Unit (U : Unit_Number_Type) return Boolean is
!       Fname : constant File_Name_Type := Unit_File_Name (U);
  
!    begin
!       --  All units are OK in GNAT mode
  
!       if GNAT_Mode then
!          return False;
!       end if;
  
!       --  If length of file name is greater than 12, definitely OK!
        --  The value 12 here is an 8 char name with extension .ads.
  
        if Length_Of_Name (Fname) > 12 then
!          return False;
        end if;
  
        --  Otherwise test file name
  
        Get_Name_String (Fname);
  
!       --  Definitely OK if file name does not start with a- g- s- i-
  
        if Name_Len < 3
          or else Name_Buffer (2) /= '-'
--- 301,434 ----
       "s-assert",    -- System.Assertions
       "s-memory",    -- System.Memory
       "s-parint",    -- System.Partition_Interface
+      "s-pooglo",    -- System.Pool_Global
+      "s-pooloc",    -- System.Pool_Local
+      "s-restri",    -- System.Restrictions
+      "s-rident",    -- System.Rident
       "s-tasinf",    -- System.Task_Info
       "s-wchcnv",    -- System.Wch_Cnv
       "s-wchcon");   -- System.Wch_Con
  
!    --------------------
!    -- Ada 2005 Units --
!    --------------------
  
!    --  The following units should be used only in Ada 05 mode
  
!    Non_Imp_File_Names_05 : constant File_List := (
  
!    --------------------------------------------------------
!    -- Ada Hierarchy Units from Ada 2005 Reference Manual --
!    --------------------------------------------------------
  
!      "a-cdlili",    -- Ada.Containers.Doubly_Linked_Lists
!      "a-cgaaso",    -- Ada.Containers.Generic_Anonymous_Array_Sort
!      "a-cgarso",    -- Ada.Containers.Generic_Array_Sort
!      "a-cgcaso",    -- Ada.Containers.Generic_Constrained_Array_Sort
!      "a-chtgke",    -- Ada.Containers.Hash_Tables.Generic_Keys
!      "a-chtgop",    -- Ada.Containers.Hash_Tables.Generic_Operations
!      "a-cidlli",    -- Ada.Containers.Indefinite_Doubly_Linked_Lists
!      "a-cihama",    -- Ada.Containers.Indefinite_Hashed_Maps
!      "a-cihase",    -- Ada.Containers.Indefinite_Hashed_Sets
!      "a-ciorma",    -- Ada.Containers.Indefinite_Ordered_Maps
!      "a-ciormu",    -- Ada.Containers.Indefinite_Ordered_Multisets
!      "a-ciorse",    -- Ada.Containers.Indefinite_Ordered_Sets
!      "a-cohama",    -- Ada.Containers.Hashed_Maps
!      "a-cohase",    -- Ada.Containers.Hashed_Sets
!      "a-cohata",    -- Ada.Containers.Hash_Tables
!      "a-coinve",    -- Ada.Containers.Indefinite_Vectors
!      "a-contai",    -- Ada.Containers
!      "a-convec",    -- Ada.Containers.Vectors
!      "a-coorma",    -- Ada.Containers.Ordered_Maps
!      "a-coormu",    -- Ada.Containers.Ordered_Multisets
!      "a-coorse",    -- Ada.Containers.Ordered_Sets
!      "a-coprnu",    -- Ada.Containers.Prime_Numbers
!      "a-crbltr",    -- Ada.Containers.Red_Black_Trees
!      "a-crbtgk",    -- Ada.Containers.Red_Black_Trees.Generic_Keys
!      "a-crbtgo",    -- Ada.Containers.Red_Black_Trees.Generic_Operations
!      "a-direct",    -- Ada.Directories
!      "a-rbtgso",    -- Ada.Containers.Red_Black_Trees.Generic_Set_Operations
!      "a-secain",    -- Ada.Strings.Equal_Case_Insensitive
!      "a-shcain",    -- Ada.Strings.Hash_Case_Insensitive
!      "a-slcain",    -- Ada.Strings.Less_Case_Insensitive
!      "a-strhas",    -- Ada.Strings.Hash
!      "a-stunha",    -- Ada.Strings.Unbounded.Hash
!      "a-stwiha",    -- Ada.Strings.Wide_Hash
!      "a-stzbou",    -- Ada.Strings.Wide_Wide_Bounded
!      "a-stzfix",    -- Ada.Strings.Wide_Wide_Fixed
!      "a-stzhas",    -- Ada.Strings.Wide_Wide_Hash
!      "a-stzmap",    -- Ada.Strings.Wide_Wide_Maps
!      "a-stzunb",    -- Ada.Strings.Wide_Wide_Unbounded
!      "a-swunha",    -- Ada.Strings.Wide_Unbounded.Hash
!      "a-szmzco",    -- Ada.Strings.Wide_Wide_Maps.Wide_Wide_Constants;
!      "a-szunha",    -- Ada.Strings.Wide_Wide_Unbounded.Hash
!      "a-tiunio",    -- Ada.Text_IO.Unbounded_IO;
!      "a-wwunio",    -- Ada.Wide_Text_IO.Wide_Unbounded_IO;
!      "a-zttest",    -- Ada.Wide_Wide_Text_IO.Text_Streams
!      "a-ztexio",    -- Ada.Wide_Wide_Text_IO
!      "a-zzunio",    -- Ada.Wide_Wide_Text_IO.Wide_Wide_Unbounded_IO
! 
!    ------------------------------------------------------
!    -- RM Required Additions to Ada 2005 for GNAT Types --
!    ------------------------------------------------------
! 
!      "a-lfztio",    -- Ada.Long_Float_Wide_Wide_Text_IO
!      "a-liztio",    -- Ada.Long_Integer_Wide_Wide_Text_IO
!      "a-llfzti",    -- Ada.Long_Long_Float_Wide_Wide_Text_IO
!      "a-llizti",    -- Ada.Long_Long_Integer_Wide_Wide_Text_IO
!      "a-sfztio",    -- Ada.Short_Float_Wide_Wide_Text_IO
!      "a-siztio",    -- Ada.Short_Integer_Wide_Wide_Text_IO
!      "a-ssizti",    -- Ada.Short_Short_Integer_Wide_Wide_Text_IO
!      "a-ztcstr",    -- Ada.Wide_Wide_Text_IO.C_Streams
! 
!    ----------------------------------------
!    -- GNAT Defined Additions to Ada 2005 --
!    ----------------------------------------
! 
!      "a-chzla1",    -- Ada.Characters.Wide_Wide_Latin_1
!      "a-chzla9",    -- Ada.Characters.Wide_Wide_Latin_9
!      "a-szuzti",    -- Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO
! 
!    ---------------------------
!    -- GNAT Special IO Units --
!    ---------------------------
! 
!    --  See Ada 95 section for further information. These packages are for the
!    --  implementation of the Wide_Wide_Text_IO generic packages.
! 
!      "a-ztdeio",    -- Ada.Wide_Wide_Text_IO.Decimal_IO
!      "a-ztenio",    -- Ada.Wide_Wide_Text_IO.Enumeration_IO
!      "a-ztfiio",    -- Ada.Wide_Wide_Text_IO.Fixed_IO
!      "a-ztflio",    -- Ada.Wide_Wide_Text_IO.Float_IO
!      "a-ztinio",    -- Ada.Wide_Wide_Text_IO.Integer_IO
!      "a-ztmoio",    -- Ada.Wide_Wide_Text_IO.Modular_IO
! 
!    ------------------------
!    -- GNAT Library Units --
!    ------------------------
! 
!      "g-zstspl");   -- GNAT.Wide_Wide_String_Split
! 
!    ----------------------
!    -- Get_Kind_Of_Unit --
!    ----------------------
! 
!    function Get_Kind_Of_Unit (U : Unit_Number_Type) return Kind_Of_Unit is
!       Fname : constant File_Name_Type := Unit_File_Name (U);
! 
!    begin
!       --  If length of file name is greater than 12, not predefined.
        --  The value 12 here is an 8 char name with extension .ads.
  
        if Length_Of_Name (Fname) > 12 then
!          return Not_Predefined_Unit;
        end if;
  
        --  Otherwise test file name
  
        Get_Name_String (Fname);
  
!       --  Not predefined if file name does not start with a- g- s- i-
  
        if Name_Len < 3
          or else Name_Buffer (2) /= '-'
*************** package body Impunit is
*** 338,351 ****
                     and then
                   Name_Buffer (1) /= 's')
        then
!          return False;
        end if;
  
!       --  Definitely OK if file name does not end in .ads. This can
        --  happen when non-standard file names are being used.
  
        if Name_Buffer (Name_Len - 3 .. Name_Len) /= ".ads" then
!          return False;
        end if;
  
        --  Otherwise normalize file name to 8 characters
--- 440,453 ----
                     and then
                   Name_Buffer (1) /= 's')
        then
!          return Not_Predefined_Unit;
        end if;
  
!       --  Not predefined if file name does not end in .ads. This can
        --  happen when non-standard file names are being used.
  
        if Name_Buffer (Name_Len - 3 .. Name_Len) /= ".ads" then
!          return Not_Predefined_Unit;
        end if;
  
        --  Otherwise normalize file name to 8 characters
*************** package body Impunit is
*** 356,397 ****
           Name_Buffer (Name_Len) := ' ';
        end loop;
  
!       --  Definitely OK if name is in list
  
!       for J in Non_Imp_File_Names'Range loop
!          if Name_Buffer (1 .. 8) = Non_Imp_File_Names (J) then
!             return False;
           end if;
        end loop;
  
!       --  Only remaining special possibilities are children of
!       --  System.RPC and System.Garlic and special files of the
!       --  form System.Aux...
  
        Get_Name_String (Unit_Name (U));
  
        if Name_Len > 12
          and then Name_Buffer (1 .. 11) = "system.rpc."
        then
!          return False;
        end if;
  
        if Name_Len > 15
          and then Name_Buffer (1 .. 14) = "system.garlic."
        then
!          return False;
        end if;
  
        if Name_Len > 11
          and then Name_Buffer (1 .. 10) = "system.aux"
        then
!          return False;
        end if;
  
        --  All tests failed, this is definitely an implementation unit
  
!       return True;
! 
!    end Implementation_Unit;
  
  end Impunit;
--- 458,505 ----
           Name_Buffer (Name_Len) := ' ';
        end loop;
  
!       --  See if name is in 95 list
  
!       for J in Non_Imp_File_Names_95'Range loop
!          if Name_Buffer (1 .. 8) = Non_Imp_File_Names_95 (J) then
!             return Ada_95_Unit;
           end if;
        end loop;
  
!       --  See if name is in 05 list
! 
!       for J in Non_Imp_File_Names_05'Range loop
!          if Name_Buffer (1 .. 8) = Non_Imp_File_Names_05 (J) then
!             return Ada_05_Unit;
!          end if;
!       end loop;
! 
!       --  Only remaining special possibilities are children of System.RPC and
!       --  System.Garlic and special files of the form System.Aux...
  
        Get_Name_String (Unit_Name (U));
  
        if Name_Len > 12
          and then Name_Buffer (1 .. 11) = "system.rpc."
        then
!          return Ada_95_Unit;
        end if;
  
        if Name_Len > 15
          and then Name_Buffer (1 .. 14) = "system.garlic."
        then
!          return Ada_95_Unit;
        end if;
  
        if Name_Len > 11
          and then Name_Buffer (1 .. 10) = "system.aux"
        then
!          return Ada_95_Unit;
        end if;
  
        --  All tests failed, this is definitely an implementation unit
  
!       return Implementation_Unit;
!    end Get_Kind_Of_Unit;
  
  end Impunit;
diff -Nrcpad gcc-3.4.3/gcc/ada/impunit.ads gcc-4.0.0/gcc/ada/impunit.ads
*** gcc-3.4.3/gcc/ada/impunit.ads	Thu Apr 24 17:54:05 2003
--- gcc-4.0.0/gcc/ada/impunit.ads	Thu Feb 10 13:50:14 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2000 Free Software Foundation, Inc.            --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2000-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 26,42 ****
  
  --  This package contains data and functions used to determine if a given
  --  unit is an internal unit intended only for use by the implementation
! --  and which should not be directly WITH'ed by user code.
  
  with Types; use Types;
  
  package Impunit is
  
!    function Implementation_Unit (U : Unit_Number_Type) return Boolean;
!    --  Given the unit number of a unit, this function determines if it is a
!    --  unit that is intended to be used only internally by the implementation.
!    --  This is used for posting warnings for improper WITH's of such units
!    --  (such WITH's are allowed without warnings only in GNAT_Mode set by
!    --  the use of -gnatg). True is returned if a warning should be posted.
  
  end Impunit;
--- 26,61 ----
  
  --  This package contains data and functions used to determine if a given
  --  unit is an internal unit intended only for use by the implementation
! --  and which should not be directly WITH'ed by user code. It also checks
! --  for Ada 05 units that should only be WITH'ed in Ada 05 mode.
  
  with Types; use Types;
  
  package Impunit is
  
!    type Kind_Of_Unit is
!      (Implementation_Unit,
!       --  Unit from predefined library intended to be used only by the
!       --  compiler generated code, or from the implementation of the run time.
!       --  Use of such a unit generates a warning unless the client is compiled
!       --  with the -gnatg switch. If we are being super strict, this should be
!       --  an error for the case of Ada units, but that seems over strenuous.
! 
!       Not_Predefined_Unit,
!       --  This is not a predefined unit, so no checks are needed
! 
!       Ada_95_Unit,
!       --  This unit is defined in the Ada 95 RM, and can be freely with'ed
!       --  in both Ada 95 mode and Ada 05 mode. Note that in Ada 83 mode, no
!       --  child units are allowed, so you can't even name such a unit.
! 
!       Ada_05_Unit);
!    --  This unit is defined in the Ada 05 RM. Withing this unit from a
!    --  Ada 95 mode program will generate a warning (again, strictly speaking
!    --  this should be an error, but that seems over-strenuous).
! 
!    function Get_Kind_Of_Unit (U : Unit_Number_Type) return Kind_Of_Unit;
!    --  Given the unit number of a unit, this function determines the type
!    --  of the unit, as defined above.
  
  end Impunit;
diff -Nrcpad gcc-3.4.3/gcc/ada/indepsw-aix.adb gcc-4.0.0/gcc/ada/indepsw-aix.adb
*** gcc-3.4.3/gcc/ada/indepsw-aix.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/indepsw-aix.adb	Mon Aug  9 12:24:25 2004
***************
*** 0 ****
--- 1,69 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                              I N D E P S W                               --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                              (AIX version)                               --
+ --                                                                          --
+ --            Copyright (C) 2004 Free Software Foundation, Inc.             --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the AIX version
+ 
+ package body Indepsw is
+ 
+    Map_Switch : aliased constant String := "-Wl,-b,map:";
+ 
+    -------------
+    -- Convert --
+    -------------
+ 
+    procedure Convert
+      (Switch   : Switch_Kind;
+       Argument : String;
+       To       : out String_List_Access)
+    is
+    begin
+       case Switch is
+          when Map_File =>
+             To := new Argument_List'(1 => new String'(Map_Switch & Argument));
+       end case;
+    end Convert;
+ 
+    ------------------
+    -- Is_Supported --
+    ------------------
+ 
+    function Is_Supported (Switch : Switch_Kind) return Boolean is
+    begin
+       case Switch is
+          when Map_File =>
+             return True;
+       end case;
+    end Is_Supported;
+ 
+ end Indepsw;
diff -Nrcpad gcc-3.4.3/gcc/ada/indepsw-linux.adb gcc-4.0.0/gcc/ada/indepsw-linux.adb
*** gcc-3.4.3/gcc/ada/indepsw-linux.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/indepsw-linux.adb	Mon Aug  9 12:24:25 2004
***************
*** 0 ****
--- 1,69 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                              I N D E P S W                               --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                            (GNU/Linux version)                           --
+ --                                                                          --
+ --            Copyright (C) 2004 Free Software Foundation, Inc.             --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the GNU/Linux version
+ 
+ package body Indepsw is
+ 
+    Map_Switch : aliased constant String := "-Wl,-Map,";
+ 
+    -------------
+    -- Convert --
+    -------------
+ 
+    procedure Convert
+      (Switch   : Switch_Kind;
+       Argument : String;
+       To       : out String_List_Access)
+    is
+    begin
+       case Switch is
+          when Map_File =>
+             To := new Argument_List'(1 => new String'(Map_Switch & Argument));
+       end case;
+    end Convert;
+ 
+    ------------------
+    -- Is_Supported --
+    ------------------
+ 
+    function Is_Supported (Switch : Switch_Kind) return Boolean is
+    begin
+       case Switch is
+          when Map_File =>
+             return True;
+       end case;
+    end Is_Supported;
+ 
+ end Indepsw;
diff -Nrcpad gcc-3.4.3/gcc/ada/indepsw-mingw.adb gcc-4.0.0/gcc/ada/indepsw-mingw.adb
*** gcc-3.4.3/gcc/ada/indepsw-mingw.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/indepsw-mingw.adb	Mon Aug  9 12:24:25 2004
***************
*** 0 ****
--- 1,69 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                              I N D E P S W                               --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                            (Windows version)                             --
+ --                                                                          --
+ --            Copyright (C) 2004 Free Software Foundation, Inc.             --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the Windows version
+ 
+ package body Indepsw is
+ 
+    Map_Switch : aliased constant String := "-Wl,-Map,";
+ 
+    -------------
+    -- Convert --
+    -------------
+ 
+    procedure Convert
+      (Switch   : Switch_Kind;
+       Argument : String;
+       To       : out String_List_Access)
+    is
+    begin
+       case Switch is
+          when Map_File =>
+             To := new Argument_List'(1 => new String'(Map_Switch & Argument));
+       end case;
+    end Convert;
+ 
+    ------------------
+    -- Is_Supported --
+    ------------------
+ 
+    function Is_Supported (Switch : Switch_Kind) return Boolean is
+    begin
+       case Switch is
+          when Map_File =>
+             return True;
+       end case;
+    end Is_Supported;
+ 
+ end Indepsw;
diff -Nrcpad gcc-3.4.3/gcc/ada/indepsw.adb gcc-4.0.0/gcc/ada/indepsw.adb
*** gcc-3.4.3/gcc/ada/indepsw.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/indepsw.adb	Mon Aug  9 12:24:25 2004
***************
*** 0 ****
--- 1,69 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                              I N D E P S W                               --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --              Copyright (C) 2004 Free Software Foundation, Inc.           --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the default version: no switches are supported
+ 
+ with Output; use Output;
+ 
+ package body Indepsw is
+ 
+    -------------
+    -- Convert --
+    -------------
+ 
+    procedure Convert
+      (Switch   : Switch_Kind;
+       Argument : String;
+       To       : out String_List_Access)
+    is
+       pragma Unreferenced (Argument);
+    begin
+       case Switch is
+          when others =>
+             Write_Str ("warning: ");
+             Write_Line (No_Support_For (Switch).all);
+             To := null;
+       end case;
+    end Convert;
+ 
+    ------------------
+    -- Is_Supported --
+    ------------------
+ 
+    function Is_Supported (Switch : Switch_Kind) return Boolean is
+       pragma Unreferenced (Switch);
+    begin
+       return False;
+    end Is_Supported;
+ 
+ end Indepsw;
diff -Nrcpad gcc-3.4.3/gcc/ada/indepsw.ads gcc-4.0.0/gcc/ada/indepsw.ads
*** gcc-3.4.3/gcc/ada/indepsw.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/indepsw.ads	Mon Aug  9 12:24:25 2004
***************
*** 0 ****
--- 1,84 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                              I N D E P S W                               --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --            Copyright (C) 2004 Free Software Foundation, Inc.             --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  GNATLINK platform-independent switches
+ 
+ --  Used to convert GNAT switches to their platform-dependent switch
+ --  equivalent for the underlying linker.
+ 
+ with GNAT.OS_Lib; use GNAT.OS_Lib;
+ 
+ package Indepsw is
+ 
+    type Switch_Kind is
+    --  Independent switches currently supported
+ 
+      (Map_File);
+       --  Produce a map file. The path name of the map file to produce
+       --  is given as an argument.
+ 
+    procedure Convert
+      (Switch   : Switch_Kind;
+       Argument : String;
+       To       : out String_List_Access);
+    --  Convert Switch to the platform-dependent linker switch (with or without
+    --  additional arguments) To. Issue a warning if Switch is not supported
+    --  for the platform; in this case, To is set to null.
+ 
+    function Is_Supported (Switch : Switch_Kind) return Boolean;
+    --  Return True for each independent switch supported by the platform.
+ 
+ private
+    --  Default warning messages when the switches are not supported by the
+    --  implementation. These are in the spec so that the platform specific
+    --  bodies do not need to redefine them.
+ 
+    Map_File_Not_Supported : aliased String :=
+      "the underlying linker does not allow the output of a map file";
+ 
+    No_Support_For : constant array (Switch_Kind) of String_Access :=
+                       (Map_File => Map_File_Not_Supported'Access);
+    --  All implementations of procedure Convert should include a case
+    --  statements with a "when others =>" choice that output the default
+    --  warning message:
+ 
+    --   case Switch is
+    --      when ... =>
+    --         ...
+    --      when others =>
+    --         Write_Str ("warning: ");
+    --         Write_Line (No_Support_For (Switch).all);
+    --         To := null;
+    --   end case;
+ 
+ end Indepsw;
diff -Nrcpad gcc-3.4.3/gcc/ada/init.c gcc-4.0.0/gcc/ada/init.c
*** gcc-3.4.3/gcc/ada/init.c	Thu Apr  8 17:40:06 2004
--- gcc-4.0.0/gcc/ada/init.c	Thu Feb 10 15:43:53 2005
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *          Copyright (C) 1992-2003 Free Software Foundation, Inc.          *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *          Copyright (C) 1992-2005, Free Software Foundation, Inc.         *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
***************
*** 39,44 ****
--- 39,48 ----
      installed by this file are used to handle resulting signals that come
      from these probes failing (i.e. touching protected pages) */
  
+ /* This file should be kept synchronized with 2sinit.ads, 2sinit.adb, and
+    5zinit.adb. All these files implement the required functionality for
+    different targets. */
+ 
  /* The following include is here to meet the published VxWorks requirement
     that the __vxworks header appear before any other include. */
  #ifdef __vxworks
*************** int   __gl_num_interrupt_states     = 0;
*** 107,112 ****
--- 111,117 ----
  int   __gl_unreserve_all_interrupts = 0;
  int   __gl_exception_tracebacks     = 0;
  int   __gl_zero_cost_exceptions     = 0;
+ int   __gl_detect_blocking          = 0;
  
  /* Indication of whether synchronous signal handler has already been
     installed by a previous call to adainit */
*************** __gnat_get_interrupt_state (int intrup)
*** 154,159 ****
--- 159,167 ----
     binder file is not in the shared library. Global references across library
     boundaries like this are not handled correctly in all systems.  */
  
+ /* For detailed description of the parameters to this routine, see the
+    section titled Run-Time Globals in package Bindgen (bindgen.adb) */
+ 
  void
  __gnat_set_globals (int main_priority,
                      int time_slice_val,
*************** __gnat_set_globals (int main_priority,
*** 166,172 ****
                      int num_interrupt_states,
                      int unreserve_all_interrupts,
                      int exception_tracebacks,
!                     int zero_cost_exceptions)
  {
    static int already_called = 0;
  
--- 174,181 ----
                      int num_interrupt_states,
                      int unreserve_all_interrupts,
                      int exception_tracebacks,
!                     int zero_cost_exceptions,
!                     int detect_blocking)
  {
    static int already_called = 0;
  
*************** __gnat_set_globals (int main_priority,
*** 229,234 ****
--- 238,244 ----
    __gl_task_dispatching_policy  = task_dispatching_policy;
    __gl_unreserve_all_interrupts = unreserve_all_interrupts;
    __gl_exception_tracebacks     = exception_tracebacks;
+   __gl_detect_blocking          = detect_blocking;
  
    /* ??? __gl_zero_cost_exceptions is new in 3.15 and is referenced from
       a-except.adb, which is also part of the compiler sources. Since the
*************** __gnat_set_globals (int main_priority,
*** 255,260 ****
--- 265,315 ----
     at all; the intention is that this be replaced by system specific
     code where initialization is required. */
  
+ /* Notes on the Zero Cost Exceptions scheme and its impact on the signal
+    handlers implemented below :
+ 
+    What we call Zero Cost Exceptions is implemented using the GCC eh
+    circuitry, even if the underlying implementation is setjmp/longjmp
+    based. In any case ...
+ 
+    The GCC unwinder expects to be dealing with call return addresses, since
+    this is the "nominal" case of what we retrieve while unwinding a regular
+    call chain. To evaluate if a handler applies at some point in this chain,
+    the propagation engine needs to determine what region the corresponding
+    call instruction pertains to. The return address may not be attached to the
+    same region as the call, so the unwinder unconditionally substracts "some"
+    amount to the return addresses it gets to search the region tables. The
+    exact amount is computed to ensure that the resulting address is inside the
+    call instruction, and is thus target dependant (think about delay slots for
+    instance).
+ 
+    When we raise an exception from a signal handler, e.g. to transform a
+    SIGSEGV into Storage_Error, things need to appear as if the signal handler
+    had been "called" by the instruction which triggered the signal, so that
+    exception handlers that apply there are considered. What the unwinder will
+    retrieve as the return address from the signal handler is what it will find
+    as the faulting instruction address in the corresponding signal context
+    pushed by the kernel. Leaving this address untouched may loose, because if
+    the triggering instruction happens to be the very first of a region, the
+    later adjustements performed by the unwinder would yield an address outside
+    that region. We need to compensate for those adjustments at some point,
+    which we currently do in the GCC unwinding fallback macro.
+ 
+    The thread at http://gcc.gnu.org/ml/gcc-patches/2004-05/msg00343.html
+    describes a couple of issues with our current approach. Basically: on some
+    targets the adjustment to apply depends on the triggering signal, which is
+    not easily accessible from the macro, and we actually do not tackle this as
+    of today. Besides, other languages, e.g. Java, deal with this by performing
+    the adjustment in the signal handler before the raise, so our adjustments
+    may break those front-ends.
+ 
+    To have it all right, we should either find a way to deal with the signal
+    variants from the macro and convert Java on all targets (ugh), or remove
+    our macro adjustments and update our signal handlers a-la-java way.  The
+    latter option appears the simplest, although some targets have their share
+    of subtleties to account for.  See for instance the syscall(SYS_sigaction)
+    story in libjava/include/i386-signal.h.  */
+ 
  /***********************************/
  /* __gnat_initialize (AIX Version) */
  /***********************************/
*************** __gnat_install_handler (void)
*** 348,354 ****
  }
  
  void
! __gnat_initialize (void)
  {
  }
  
--- 403,409 ----
  }
  
  void
! __gnat_initialize (void *eh ATTRIBUTE_UNUSED)
  {
  }
  
*************** extern void __gnat_install_handler (void
*** 363,369 ****
  /* For RTEMS, each bsp will provide a custom __gnat_install_handler (). */
  
  void
! __gnat_initialize (void)
  {
     __gnat_install_handler ();
  }
--- 418,424 ----
  /* For RTEMS, each bsp will provide a custom __gnat_install_handler (). */
  
  void
! __gnat_initialize (void *eh ATTRIBUTE_UNUSED)
  {
     __gnat_install_handler ();
  }
*************** __gnat_install_handler (void)
*** 469,475 ****
       signal that might cause a scheduling event! */
  
    act.sa_handler = (void (*) (int)) __gnat_error_handler;
!   act.sa_flags = SA_ONSTACK | SA_RESTART | SA_NODEFER | SA_SIGINFO;
    sigemptyset (&act.sa_mask);
  
    /* Do not install handlers if interrupt state is "System" */
--- 524,530 ----
       signal that might cause a scheduling event! */
  
    act.sa_handler = (void (*) (int)) __gnat_error_handler;
!   act.sa_flags = SA_RESTART | SA_NODEFER | SA_SIGINFO;
    sigemptyset (&act.sa_mask);
  
    /* Do not install handlers if interrupt state is "System" */
*************** __gnat_install_handler (void)
*** 488,494 ****
  }
  
  void
! __gnat_initialize (void)
  {
  }
  
--- 543,549 ----
  }
  
  void
! __gnat_initialize (void *eh ATTRIBUTE_UNUSED)
  {
  }
  
*************** __gnat_machine_state_length (void)
*** 520,526 ****
  /* __gnat_initialize (HPUX Version) */
  /************************************/
  
! #elif defined (hpux)
  
  #include <signal.h>
  
--- 575,581 ----
  /* __gnat_initialize (HPUX Version) */
  /************************************/
  
! #elif defined (__hpux__)
  
  #include <signal.h>
  
*************** __gnat_install_handler (void)
*** 602,608 ****
  }
  
  void
! __gnat_initialize (void)
  {
  }
  
--- 657,663 ----
  }
  
  void
! __gnat_initialize (void *eh ATTRIBUTE_UNUSED)
  {
  }
  
*************** __gnat_install_handler (void)
*** 751,757 ****
  }
  
  void
! __gnat_initialize (void)
  {
  }
  
--- 806,812 ----
  }
  
  void
! __gnat_initialize (void *eh ATTRIBUTE_UNUSED)
  {
  }
  
*************** __gnat_initialize (void)
*** 762,907 ****
  #elif defined (__MINGW32__)
  #include <windows.h>
  
- static LONG WINAPI __gnat_error_handler (PEXCEPTION_POINTERS);
- 
- /* __gnat_initialize (mingw32).  */
- 
- static LONG WINAPI
- __gnat_error_handler (PEXCEPTION_POINTERS info)
- {
-   static int recurse;
-   struct Exception_Data *exception;
-   const char *msg;
- 
-   switch (info->ExceptionRecord->ExceptionCode)
-     {
-     case EXCEPTION_ACCESS_VIOLATION:
-       /* If the failing address isn't maximally-aligned or if we've
- 	 recursed, this is a program error.  */
-       if ((info->ExceptionRecord->ExceptionInformation[1] & 3) != 0
- 	  || recurse)
- 	{
- 	  exception = &program_error;
- 	  msg = "EXCEPTION_ACCESS_VIOLATION";
- 	}
-       else
- 	{
- 	  /* See if the page before the faulting page is accessible.  Do that
- 	     by trying to access it. */
- 	  recurse++;
- 	  * ((volatile char *) (info->ExceptionRecord->ExceptionInformation[1]
- 				+ 4096));
- 	  exception = &storage_error;
- 	  msg = "stack overflow (or erroneous memory access)";
- 	}
-       break;
- 
-     case EXCEPTION_ARRAY_BOUNDS_EXCEEDED:
-       exception = &constraint_error;
-       msg = "EXCEPTION_ARRAY_BOUNDS_EXCEEDED";
-       break;
- 
-     case EXCEPTION_DATATYPE_MISALIGNMENT:
-       exception = &constraint_error;
-       msg = "EXCEPTION_DATATYPE_MISALIGNMENT";
-       break;
- 
-     case EXCEPTION_FLT_DENORMAL_OPERAND:
-       exception = &constraint_error;
-       msg = "EXCEPTION_FLT_DENORMAL_OPERAND";
-       break;
- 
-     case EXCEPTION_FLT_DIVIDE_BY_ZERO:
-       exception = &constraint_error;
-       msg = "EXCEPTION_FLT_DENORMAL_OPERAND";
-       break;
- 
-     case EXCEPTION_FLT_INVALID_OPERATION:
-       exception = &constraint_error;
-       msg = "EXCEPTION_FLT_INVALID_OPERATION";
-       break;
- 
-     case EXCEPTION_FLT_OVERFLOW:
-       exception = &constraint_error;
-       msg = "EXCEPTION_FLT_OVERFLOW";
-       break;
- 
-     case EXCEPTION_FLT_STACK_CHECK:
-       exception = &program_error;
-       msg = "EXCEPTION_FLT_STACK_CHECK";
-       break;
- 
-     case EXCEPTION_FLT_UNDERFLOW:
-       exception = &constraint_error;
-       msg = "EXCEPTION_FLT_UNDERFLOW";
-       break;
- 
-     case EXCEPTION_INT_DIVIDE_BY_ZERO:
-       exception = &constraint_error;
-       msg = "EXCEPTION_INT_DIVIDE_BY_ZERO";
-       break;
- 
-     case EXCEPTION_INT_OVERFLOW:
-       exception = &constraint_error;
-       msg = "EXCEPTION_INT_OVERFLOW";
-       break;
- 
-     case EXCEPTION_INVALID_DISPOSITION:
-       exception = &program_error;
-       msg = "EXCEPTION_INVALID_DISPOSITION";
-       break;
- 
-     case EXCEPTION_NONCONTINUABLE_EXCEPTION:
-       exception = &program_error;
-       msg = "EXCEPTION_NONCONTINUABLE_EXCEPTION";
-       break;
- 
-     case EXCEPTION_PRIV_INSTRUCTION:
-       exception = &program_error;
-       msg = "EXCEPTION_PRIV_INSTRUCTION";
-       break;
- 
-     case EXCEPTION_SINGLE_STEP:
-       exception = &program_error;
-       msg = "EXCEPTION_SINGLE_STEP";
-       break;
- 
-     case EXCEPTION_STACK_OVERFLOW:
-       exception = &storage_error;
-       msg = "EXCEPTION_STACK_OVERFLOW";
-       break;
- 
-    default:
-       exception = &program_error;
-       msg = "unhandled signal";
-     }
- 
-   recurse = 0;
-   Raise_From_Signal_Handler (exception, msg);
-   return 0; /* This is never reached, avoid compiler warning */
- }
- 
  void
  __gnat_install_handler (void)
  {
-   SetUnhandledExceptionFilter (__gnat_error_handler);
-   __gnat_handler_installed = 1;
  }
  
  void
! __gnat_initialize (void)
  {
- 
     /* Initialize floating-point coprocessor. This call is needed because
        the MS libraries default to 64-bit precision instead of 80-bit
        precision, and we require the full precision for proper operation,
        given that we have set Max_Digits etc with this in mind */
- 
     __gnat_init_float ();
  
!    /* initialize a lock for a process handle list - see a-adaint.c for the
        implementation of __gnat_portable_no_block_spawn, __gnat_portable_wait */
     __gnat_plist_init();
  }
  
  /***************************************/
--- 817,843 ----
  #elif defined (__MINGW32__)
  #include <windows.h>
  
  void
  __gnat_install_handler (void)
  {
  }
  
  void
! __gnat_initialize (void *eh ATTRIBUTE_UNUSED)
  {
     /* Initialize floating-point coprocessor. This call is needed because
        the MS libraries default to 64-bit precision instead of 80-bit
        precision, and we require the full precision for proper operation,
        given that we have set Max_Digits etc with this in mind */
     __gnat_init_float ();
  
!    /* Initialize a lock for a process handle list - see a-adaint.c for the
        implementation of __gnat_portable_no_block_spawn, __gnat_portable_wait */
     __gnat_plist_init();
+ 
+    /* Install the Structured Exception handler.  */
+    if (eh)
+      __gnat_install_SEH_handler (eh);
  }
  
  /***************************************/
*************** __gnat_install_handler (void)
*** 972,978 ****
  }
  
  void
! __gnat_initialize (void)
  {
     __gnat_init_float ();
  }
--- 908,914 ----
  }
  
  void
! __gnat_initialize (void *eh ATTRIBUTE_UNUSED)
  {
     __gnat_init_float ();
  }
*************** __gnat_initialize (void)
*** 984,990 ****
  #elif defined (__Lynx__)
  
  void
! __gnat_initialize (void)
  {
     __gnat_init_float ();
  }
--- 920,926 ----
  #elif defined (__Lynx__)
  
  void
! __gnat_initialize (void *eh ATTRIBUTE_UNUSED)
  {
     __gnat_init_float ();
  }
*************** __gnat_install_handler (void)
*** 1006,1012 ****
  #elif defined (__EMX__) /* OS/2 dependent initialization */
  
  void
! __gnat_initialize (void)
  {
  }
  
--- 942,948 ----
  #elif defined (__EMX__) /* OS/2 dependent initialization */
  
  void
! __gnat_initialize (void *eh ATTRIBUTE_UNUSED)
  {
  }
  
*************** struct Machine_State
*** 1044,1049 ****
--- 980,997 ----
  
  static void __gnat_error_handler (int, int, sigcontext_t *);
  
+ /* We are not setting the SA_SIGINFO bit in the sigaction flags when
+    connecting that handler, with the effects described in the sigaction
+    man page:
+ 
+           SA_SIGINFO [...]
+           If cleared and the signal is caught, the first argument is
+           also the signal number but the second argument is the signal
+           code identifying the cause of the signal. The third argument
+           points to a sigcontext_t structure containing the receiving
+ 	  process's context when the signal was delivered.
+ */
+ 
  static void
  __gnat_error_handler (int sig, int code, sigcontext_t *sc)
  {
*************** __gnat_error_handler (int sig, int code,
*** 1069,1076 ****
  	  exception = &program_error; /* ??? storage_error ??? */
  	  msg = "SIGSEGV: (Autogrow for file failed)";
  	}
!       else if (code == EACCES)
  	{
  	  /* ??? Re-add smarts to further verify that we launched
  		 the stack into a guard page, not an attempt to
  		 write to .text or something */
--- 1017,1029 ----
  	  exception = &program_error; /* ??? storage_error ??? */
  	  msg = "SIGSEGV: (Autogrow for file failed)";
  	}
!       else if (code == EACCES || code == EEXIST)
  	{
+ 	  /* ??? We handle stack overflows here, some of which do trigger
+ 	         SIGSEGV + EEXIST on Irix 6.5 although EEXIST is not part of
+ 	         the documented valid codes for SEGV in the signal(5) man
+ 	         page.  */
+ 
  	  /* ??? Re-add smarts to further verify that we launched
  		 the stack into a guard page, not an attempt to
  		 write to .text or something */
*************** __gnat_install_handler (void)
*** 1156,1162 ****
  }
  
  void
! __gnat_initialize (void)
  {
  }
  
--- 1109,1115 ----
  }
  
  void
! __gnat_initialize (void *eh ATTRIBUTE_UNUSED)
  {
  }
  
*************** __gnat_install_handler (void)
*** 1264,1270 ****
  }
  
  void
! __gnat_initialize (void)
  {
  }
  
--- 1217,1223 ----
  }
  
  void
! __gnat_initialize (void *eh ATTRIBUTE_UNUSED)
  {
  }
  
*************** __gnat_initialize (void)
*** 1274,1284 ****
--- 1227,1250 ----
  
  #elif defined (VMS)
  
+ #ifdef __IA64
+ #define lib_get_curr_invo_context LIB$I64_GET_CURR_INVO_CONTEXT
+ #define lib_get_prev_invo_context LIB$I64_GET_PREV_INVO_CONTEXT
+ #define lib_get_invo_handle LIB$I64_GET_INVO_HANDLE
+ #else
+ #define lib_get_curr_invo_context LIB$GET_CURR_INVO_CONTEXT
+ #define lib_get_prev_invo_context LIB$GET_PREV_INVO_CONTEXT
+ #define lib_get_invo_handle LIB$GET_INVO_HANDLE
+ #endif
+ 
+ #if defined (IN_RTS) && !defined (__IA64)
+ 
  /* The prehandler actually gets control first on a condition. It swaps the
     stack pointer and calls the handler (__gnat_error_handler). */
  extern long __gnat_error_prehandler (void);
  
  extern char *__gnat_error_prehandler_stack;   /* Alternate signal stack */
+ #endif
  
  /* Conditions that don't have an Ada exception counterpart must raise
     Non_Ada_Error.  Since this is defined in s-auxdec, it should only be
*************** extern char *__gnat_error_prehandler_sta
*** 1290,1296 ****
  extern struct Exception_Data Non_Ada_Error;
  
  #define Coded_Exception system__vms_exception_table__coded_exception
! extern struct Exception_Data *Coded_Exception (int);
  #endif
  
  /* Define macro symbols for the VMS conditions that become Ada exceptions.
--- 1256,1265 ----
  extern struct Exception_Data Non_Ada_Error;
  
  #define Coded_Exception system__vms_exception_table__coded_exception
! extern struct Exception_Data *Coded_Exception (Exception_Code);
! 
! #define Base_Code_In system__vms_exception_table__base_code_in
! extern Exception_Code Base_Code_In (Exception_Code);
  #endif
  
  /* Define macro symbols for the VMS conditions that become Ada exceptions.
*************** long
*** 1320,1325 ****
--- 1289,1296 ----
  __gnat_error_handler (int *sigargs, void *mechargs)
  {
    struct Exception_Data *exception = 0;
+   Exception_Code base_code;
+ 
    char *msg = "";
    char message[256];
    long prvhnd;
*************** __gnat_error_handler (int *sigargs, void
*** 1347,1360 ****
      case 1381050: /* Nickerson bug #33 ??? */
        return SS$_RESIGNAL;
  
      case 11829410: /* Resignalled as Use_Error for CE10VRC */
        return SS$_RESIGNAL;
  
    }
  
  #ifdef IN_RTS
!   /* See if it's an imported exception. Mask off severity bits. */
!   exception = Coded_Exception (sigargs[1] & 0xfffffff8);
    if (exception)
      {
        msgdesc.len = 256;
--- 1318,1337 ----
      case 1381050: /* Nickerson bug #33 ??? */
        return SS$_RESIGNAL;
  
+     case 20480426: /* RDB-E-STREAM_EOF */
+       return SS$_RESIGNAL;
+ 
      case 11829410: /* Resignalled as Use_Error for CE10VRC */
        return SS$_RESIGNAL;
  
    }
  
  #ifdef IN_RTS
!   /* See if it's an imported exception. Beware that registered exceptions
!      are bound to their base code, with the severity bits masked off.  */
!   base_code = Base_Code_In ((Exception_Code) sigargs [1]);
!   exception = Coded_Exception (base_code);
! 
    if (exception)
      {
        msgdesc.len = 256;
*************** __gnat_error_handler (int *sigargs, void
*** 1367,1373 ****
        exception->Name_Length = 19;
        /* The full name really should be get sys$getmsg returns. ??? */
        exception->Full_Name = "IMPORTED_EXCEPTION";
!       exception->Import_Code = sigargs[1] & 0xfffffff8;
      }
  #endif
  
--- 1344,1350 ----
        exception->Name_Length = 19;
        /* The full name really should be get sys$getmsg returns. ??? */
        exception->Full_Name = "IMPORTED_EXCEPTION";
!       exception->Import_Code = base_code;
      }
  #endif
  
*************** __gnat_error_handler (int *sigargs, void
*** 1443,1452 ****
    mstate = (long *) (*Get_Machine_State_Addr) ();
    if (mstate != 0)
      {
!       LIB$GET_CURR_INVO_CONTEXT (&curr_icb);
!       LIB$GET_PREV_INVO_CONTEXT (&curr_icb);
!       LIB$GET_PREV_INVO_CONTEXT (&curr_icb);
!       curr_invo_handle = LIB$GET_INVO_HANDLE (&curr_icb);
        *mstate = curr_invo_handle;
      }
    Raise_From_Signal_Handler (exception, msg);
--- 1420,1429 ----
    mstate = (long *) (*Get_Machine_State_Addr) ();
    if (mstate != 0)
      {
!       lib_get_curr_invo_context (&curr_icb);
!       lib_get_prev_invo_context (&curr_icb);
!       lib_get_prev_invo_context (&curr_icb);
!       curr_invo_handle = lib_get_invo_handle (&curr_icb);
        *mstate = curr_invo_handle;
      }
    Raise_From_Signal_Handler (exception, msg);
*************** void
*** 1456,1461 ****
--- 1433,1439 ----
  __gnat_install_handler (void)
  {
    long prvhnd;
+ #if defined (IN_RTS) && !defined (__IA64)
    char *c;
  
    c = (char *) xmalloc (2049);
*************** __gnat_install_handler (void)
*** 1464,1474 ****
  
    /* __gnat_error_prehandler is an assembly function.  */
    SYS$SETEXV (1, __gnat_error_prehandler, 3, &prvhnd);
    __gnat_handler_installed = 1;
  }
  
  void
! __gnat_initialize(void)
  {
  }
  
--- 1442,1455 ----
  
    /* __gnat_error_prehandler is an assembly function.  */
    SYS$SETEXV (1, __gnat_error_prehandler, 3, &prvhnd);
+ #else
+   SYS$SETEXV (1, __gnat_error_handler, 3, &prvhnd);
+ #endif
    __gnat_handler_installed = 1;
  }
  
  void
! __gnat_initialize(void *eh ATTRIBUTE_UNUSED)
  {
  }
  
*************** __gnat_initialize(void)
*** 1481,1494 ****
  #include <signal.h>
  #include <unistd.h>
  
  static void
! __gnat_error_handler (sig, code, sc)
!      int sig;
!      int code;
!      struct sigcontext *sc;
  {
    struct Exception_Data *exception;
!   char *msg;
  
    switch (sig)
      {
--- 1462,1475 ----
  #include <signal.h>
  #include <unistd.h>
  
+ static void __gnat_error_handler (int, int, struct sigcontext *);
+ 
  static void
! __gnat_error_handler (int sig, int code __attribute__ ((unused)),
! 		      struct sigcontext *sc __attribute__ ((unused)))
  {
    struct Exception_Data *exception;
!   const char *msg;
  
    switch (sig)
      {
*************** __gnat_install_handler ()
*** 1539,1548 ****
    (void) sigaction (SIGBUS,  &act, NULL);
  }
  
- void __gnat_init_float ();
- 
  void
! __gnat_initialize ()
  {
     __gnat_install_handler ();
  
--- 1520,1527 ----
    (void) sigaction (SIGBUS,  &act, NULL);
  }
  
  void
! __gnat_initialize (void *eh ATTRIBUTE_UNUSED)
  {
     __gnat_install_handler ();
  
*************** __gnat_initialize ()
*** 1565,1570 ****
--- 1544,1553 ----
  #include <intLib.h>
  #include <iv.h>
  
+ #ifdef VTHREADS
+ #include "private/vThreadsP.h"
+ #endif
+ 
  extern int __gnat_inum_to_ivec (int);
  static void __gnat_error_handler (int, int, struct sigcontext *);
  void __gnat_map_signal (int);
*************** __gnat_inum_to_ivec (int num)
*** 1590,1595 ****
--- 1573,1590 ----
    return INUM_TO_IVEC (num);
  }
  
+ /* VxWorks expects the field excCnt to be zeroed when a signal is handled.
+    The VxWorks version of longjmp does this; gcc's builtin_longjmp does not */
+ void
+ __gnat_clear_exception_count (void)
+ {
+ #ifdef VTHREADS
+   WIND_TCB *currentTask = (WIND_TCB *) taskIdSelf();
+ 
+   currentTask->vThreads.excCnt = 0;
+ #endif
+ }
+ 
  /* Exported to 5zintman.adb in order to handle different signal
     to exception mappings in different VxWorks versions */
  void
*************** __gnat_map_signal (int sig)
*** 1604,1631 ****
        exception = &constraint_error;
        msg = "SIGFPE";
        break;
      case SIGILL:
        exception = &constraint_error;
!       msg = "SIGILL";
        break;
      case SIGSEGV:
!       exception = &program_error;
!       msg = "SIGSEGV";
        break;
      case SIGBUS:
- #ifdef VTHREADS
        exception = &storage_error;
        msg = "SIGBUS: possible stack overflow";
  #else
        exception = &program_error;
        msg = "SIGBUS";
- #endif
        break;
      default:
        exception = &program_error;
        msg = "unhandled signal";
      }
  
    Raise_From_Signal_Handler (exception, msg);
  }
  
--- 1599,1637 ----
        exception = &constraint_error;
        msg = "SIGFPE";
        break;
+ #ifdef VTHREADS
      case SIGILL:
        exception = &constraint_error;
!       msg = "Floating point exception or SIGILL";
        break;
      case SIGSEGV:
!       exception = &storage_error;
!       msg = "SIGSEGV: possible stack overflow";
        break;
      case SIGBUS:
        exception = &storage_error;
        msg = "SIGBUS: possible stack overflow";
+       break;
  #else
+     case SIGILL:
+       exception = &constraint_error;
+       msg = "SIGILL";
+       break;
+     case SIGSEGV:
+       exception = &program_error;
+       msg = "SIGSEGV";
+       break;
+     case SIGBUS:
        exception = &program_error;
        msg = "SIGBUS";
        break;
+ #endif
      default:
        exception = &program_error;
        msg = "unhandled signal";
      }
  
+   __gnat_clear_exception_count ();
    Raise_From_Signal_Handler (exception, msg);
  }
  
*************** __gnat_error_handler (int sig, int code,
*** 1643,1653 ****
    sigdelset (&mask, sig);
    sigprocmask (SIG_SETMASK, &mask, NULL);
  
-   /* VxWorks will suspend the task when it gets a hardware exception.  We
-      take the liberty of resuming the task for the application. */
-   if (taskIsSuspended (taskIdSelf ()) != 0)
-     taskResume (taskIdSelf ());
- 
    __gnat_map_signal (sig);
  
  }
--- 1649,1654 ----
*************** void
*** 1681,1688 ****
  __gnat_init_float (void)
  {
    /* Disable overflow/underflow exceptions on the PPC processor, this is needed
!      to get correct Ada semantic.  */
! #if defined (_ARCH_PPC) && !defined (_SOFT_FLOAT)
    asm ("mtfsb0 25");
    asm ("mtfsb0 26");
  #endif
--- 1682,1691 ----
  __gnat_init_float (void)
  {
    /* Disable overflow/underflow exceptions on the PPC processor, this is needed
!      to get correct Ada semantics.  Note that for AE653 vThreads, the HW
!      overflow settings are an OS configuration issue.  The instructions
!      below have no effect */
! #if defined (_ARCH_PPC) && !defined (_SOFT_FLOAT) && !defined (VTHREADS)
    asm ("mtfsb0 25");
    asm ("mtfsb0 26");
  #endif
*************** __gnat_init_float (void)
*** 1708,1731 ****
  }
  
  void
! __gnat_initialize (void)
  {
    __gnat_init_float ();
  
!   /* Assume an environment task stack size of 20kB.
  
!      Using a constant is necessary because we do not want each Ada application
!      to depend on the optional taskShow library,
!      which is required to get the actual stack information.
  
!      The consequence of this is that with -fstack-check
!      the environment task must have an actual stack size
!      of at least 20kB and the usable size will be about 14kB.
!   */
  
!   __gnat_set_stack_size (14336);
!   /* Allow some head room for the stack checking code, and for
!      stack space consumed during initialization */
  }
  
  /********************************/
--- 1711,1773 ----
  }
  
  void
! __gnat_initialize (void *eh ATTRIBUTE_UNUSED)
  {
    __gnat_init_float ();
  
!   /* On targets where we might be using the ZCX scheme, we need to register
!      the frame tables.
  
!      For applications loaded as a set of "modules", the crtstuff objects
!      linked in (crtbegin/end) are tailored to provide this service a-la C++
!      constructor fashion, typically triggered by the VxWorks loader.  This is
!      achieved by way of a special variable declaration in the crt object, the
!      name of which has been deduced by analyzing the output of the "munching"
!      step documented for C++.  The de-registration is handled symetrically,
!      a-la C++ destructor fashion and typically triggered by the dynamic
!      unloader.  Note that since the tables shall be registered against a
!      common datastructure, libgcc should be one of the modules (vs beeing
!      partially linked against all the others at build time) and shall be
!      loaded first.
  
!      For applications linked with the kernel, the scheme above would lead to
!      duplicated symbols because the VxWorks kernel build "munches" by default.
!      To prevent those conflicts, we link against crtbegin/endS objects that
!      don't include the special variable and directly call the appropriate
!      function here. We'll never unload that, so there is no de-registration to
!      worry about.
  
!      For whole applications loaded as a single module, we may use one scheme
!      or the other, except for the mixed Ada/C++ case in which the first scheme
!      would fail for the same reason as in the linked-with-kernel situation.
! 
!      We can differentiate by looking at the __module_has_ctors value provided
!      by each class of crt objects. As of today, selecting the crt set with the
!      ctors/dtors capabilities (first scheme above) is triggered by adding
!      "-dynamic" to the gcc *link* command line options. Selecting the other
!      set of crt objects is achieved by "-static" instead.
! 
!      This is a first approach, tightly synchronized with a number of GCC
!      configuration and crtstuff changes. We need to ensure that those changes
!      are there to activate this circuitry.  */
! 
! #if (__GNUC__ >= 3) && (defined (_ARCH_PPC) || defined (__ppc))
!  {
!    /* The scheme described above is only useful for the actual ZCX case, and
!       we don't want any reference to the crt provided symbols otherwise.  We
!       may not link with any of the crt objects in the non-ZCX case, e.g. from
!       documented procedures instructing the use of -nostdlib, and references
!       to the ctors symbols here would just remain unsatisfied.
! 
!       We have no way to avoid those references in the right conditions in this
!       C module, because we have nothing like a IN_ZCX_RTS macro.  This aspect
!       is then deferred to an Ada routine, which can do that based on a test
!       against a constant System flag value.  */
! 
!    extern void __gnat_vxw_setup_for_eh (void);
!    __gnat_vxw_setup_for_eh ();
!  }
! #endif
  }
  
  /********************************/
*************** __gnat_install_handler(void)
*** 1792,1798 ****
  }
  
  void
! __gnat_initialize (void)
  {
    __gnat_install_handler ();
    __gnat_init_float ();
--- 1834,1840 ----
  }
  
  void
! __gnat_initialize (void *eh ATTRIBUTE_UNUSED)
  {
    __gnat_install_handler ();
    __gnat_init_float ();
*************** __gnat_initialize (void)
*** 1808,1814 ****
  /***************************************/
  
  void
! __gnat_initialize (void)
  {
  }
  
--- 1850,1856 ----
  /***************************************/
  
  void
! __gnat_initialize (void *eh ATTRIBUTE_UNUSED)
  {
  }
  
diff -Nrcpad gcc-3.4.3/gcc/ada/inline.adb gcc-4.0.0/gcc/ada/inline.adb
*** gcc-3.4.3/gcc/ada/inline.adb	Mon Jan  5 15:20:44 2004
--- gcc-4.0.0/gcc/ada/inline.adb	Tue Jul  6 13:57:30 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Inline is
*** 467,472 ****
--- 467,488 ----
           return;
        end if;
  
+       --  If the instance appears within a generic subprogram there is nothing
+       --  to finalize either.
+ 
+       declare
+          S : Entity_Id;
+       begin
+          S := Scope (Inst);
+          while Present (S) and then S /= Standard_Standard loop
+             if Is_Generic_Subprogram (S) then
+                return;
+             end if;
+ 
+             S := Scope (S);
+          end loop;
+       end;
+ 
        Elmt := First_Elmt (To_Clean);
  
        while Present (Elmt) loop
*************** package body Inline is
*** 685,693 ****
        end if;
     end Analyze_Inlined_Bodies;
  
!    --------------------------------
!    --  Check_Body_For_Inlining --
!    --------------------------------
  
     procedure Check_Body_For_Inlining (N : Node_Id; P : Entity_Id) is
        Bname : Unit_Name_Type;
--- 701,709 ----
        end if;
     end Analyze_Inlined_Bodies;
  
!    -----------------------------
!    -- Check_Body_For_Inlining --
!    -----------------------------
  
     procedure Check_Body_For_Inlining (N : Node_Id; P : Entity_Id) is
        Bname : Unit_Name_Type;
diff -Nrcpad gcc-3.4.3/gcc/ada/interfac-vms.ads gcc-4.0.0/gcc/ada/interfac-vms.ads
*** gcc-3.4.3/gcc/ada/interfac-vms.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/interfac-vms.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,194 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                           I N T E R F A C E S                            --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 2002-2003 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the implementation dependent sections of this file.      --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the OpenVMS version of this package which adds Float_Representation
+ --  pragmas to the IEEE floating point types to ensure they remain IEEE in
+ --  the presence of a configuration pragma Float_Representation (Vax_Float).
+ 
+ --  It assumes integer sizes of 8, 16, 32 and 64 are available, and that IEEE
+ --  floating-point formats are available.
+ 
+ package Interfaces is
+ pragma Pure (Interfaces);
+ 
+    type Integer_8  is range -2 **  7 .. 2 **  7 - 1;
+    for Integer_8'Size use  8;
+ 
+    type Integer_16 is range -2 ** 15 .. 2 ** 15 - 1;
+    for Integer_16'Size use 16;
+ 
+    type Integer_32 is range -2 ** 31 .. 2 ** 31 - 1;
+    for Integer_32'Size use 32;
+ 
+    type Integer_64 is range -2 ** 63 .. 2 ** 63 - 1;
+    for Integer_64'Size use 64;
+ 
+    type Unsigned_8  is mod 2 **  8;
+    for Unsigned_8'Size use  8;
+ 
+    type Unsigned_16 is mod 2 ** 16;
+    for Unsigned_16'Size use 16;
+ 
+    type Unsigned_32 is mod 2 ** 32;
+    for Unsigned_32'Size use 32;
+ 
+    type Unsigned_64 is mod 2 ** 64;
+    for Unsigned_64'Size use 64;
+ 
+    function Shift_Left
+      (Value  : Unsigned_8;
+       Amount : Natural)
+      return    Unsigned_8;
+ 
+    function Shift_Right
+      (Value  : Unsigned_8;
+       Amount : Natural)
+       return   Unsigned_8;
+ 
+    function Shift_Right_Arithmetic
+      (Value  : Unsigned_8;
+       Amount : Natural)
+       return   Unsigned_8;
+ 
+    function Rotate_Left
+      (Value  : Unsigned_8;
+       Amount : Natural)
+       return   Unsigned_8;
+ 
+    function Rotate_Right
+      (Value  : Unsigned_8;
+       Amount : Natural)
+       return   Unsigned_8;
+ 
+    function Shift_Left
+      (Value  : Unsigned_16;
+       Amount : Natural)
+      return    Unsigned_16;
+ 
+    function Shift_Right
+      (Value  : Unsigned_16;
+       Amount : Natural)
+       return   Unsigned_16;
+ 
+    function Shift_Right_Arithmetic
+      (Value  : Unsigned_16;
+       Amount : Natural)
+       return   Unsigned_16;
+ 
+    function Rotate_Left
+      (Value  : Unsigned_16;
+       Amount : Natural)
+       return   Unsigned_16;
+ 
+    function Rotate_Right
+      (Value  : Unsigned_16;
+       Amount : Natural)
+       return   Unsigned_16;
+ 
+    function Shift_Left
+      (Value  : Unsigned_32;
+       Amount : Natural)
+      return    Unsigned_32;
+ 
+    function Shift_Right
+      (Value  : Unsigned_32;
+       Amount : Natural)
+       return   Unsigned_32;
+ 
+    function Shift_Right_Arithmetic
+      (Value  : Unsigned_32;
+       Amount : Natural)
+       return   Unsigned_32;
+ 
+    function Rotate_Left
+      (Value  : Unsigned_32;
+       Amount : Natural)
+       return   Unsigned_32;
+ 
+    function Rotate_Right
+      (Value  : Unsigned_32;
+       Amount : Natural)
+       return   Unsigned_32;
+ 
+    function Shift_Left
+      (Value  : Unsigned_64;
+       Amount : Natural)
+      return    Unsigned_64;
+ 
+    function Shift_Right
+      (Value  : Unsigned_64;
+       Amount : Natural)
+       return   Unsigned_64;
+ 
+    function Shift_Right_Arithmetic
+      (Value  : Unsigned_64;
+       Amount : Natural)
+       return   Unsigned_64;
+ 
+    function Rotate_Left
+      (Value  : Unsigned_64;
+       Amount : Natural)
+       return   Unsigned_64;
+ 
+    function Rotate_Right
+      (Value  : Unsigned_64;
+       Amount : Natural)
+       return   Unsigned_64;
+ 
+    pragma Import (Intrinsic, Shift_Left);
+    pragma Import (Intrinsic, Shift_Right);
+    pragma Import (Intrinsic, Shift_Right_Arithmetic);
+    pragma Import (Intrinsic, Rotate_Left);
+    pragma Import (Intrinsic, Rotate_Right);
+ 
+    --  Floating point types. We use the digits value to define the IEEE
+    --  forms, otherwise a configuration pragma specifying VAX float can
+    --  default the digits to an illegal value for IEEE.
+    --  Note: it is harmless, and explicitly permitted, to include additional
+    --  types in interfaces, so it is not wrong to have IEEE_Extended_Float
+    --  defined even if the extended format is not available.
+ 
+    type IEEE_Float_32       is digits 6;
+    pragma Float_Representation (IEEE_Float, IEEE_Float_32);
+ 
+    type IEEE_Float_64       is digits 15;
+    pragma Float_Representation (IEEE_Float, IEEE_Float_64);
+ 
+    type IEEE_Extended_Float is digits 15;
+    pragma Float_Representation (IEEE_Float, IEEE_Extended_Float);
+ 
+ end Interfaces;
diff -Nrcpad gcc-3.4.3/gcc/ada/interfac.ads gcc-4.0.0/gcc/ada/interfac.ads
*** gcc-3.4.3/gcc/ada/interfac.ads	Tue Oct 21 13:42:09 2003
--- gcc-4.0.0/gcc/ada/interfac.ads	Wed Dec  8 11:49:38 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** pragma Pure (Interfaces);
*** 69,171 ****
  
     function Shift_Left
       (Value  : Unsigned_8;
!       Amount : Natural)
!       return   Unsigned_8;
  
     function Shift_Right
       (Value  : Unsigned_8;
!       Amount : Natural)
!       return   Unsigned_8;
  
     function Shift_Right_Arithmetic
       (Value  : Unsigned_8;
!       Amount : Natural)
!       return   Unsigned_8;
  
     function Rotate_Left
       (Value  : Unsigned_8;
!       Amount : Natural)
!       return   Unsigned_8;
  
     function Rotate_Right
       (Value  : Unsigned_8;
!       Amount : Natural)
!       return   Unsigned_8;
  
     function Shift_Left
       (Value  : Unsigned_16;
!       Amount : Natural)
!      return    Unsigned_16;
  
     function Shift_Right
       (Value  : Unsigned_16;
!       Amount : Natural)
!       return   Unsigned_16;
  
     function Shift_Right_Arithmetic
       (Value  : Unsigned_16;
!       Amount : Natural)
!       return   Unsigned_16;
  
     function Rotate_Left
       (Value  : Unsigned_16;
!       Amount : Natural)
!       return   Unsigned_16;
  
     function Rotate_Right
       (Value  : Unsigned_16;
!       Amount : Natural)
!       return   Unsigned_16;
  
     function Shift_Left
       (Value  : Unsigned_32;
!       Amount : Natural)
!      return    Unsigned_32;
  
     function Shift_Right
       (Value  : Unsigned_32;
!       Amount : Natural)
!       return   Unsigned_32;
  
     function Shift_Right_Arithmetic
       (Value  : Unsigned_32;
!       Amount : Natural)
!       return   Unsigned_32;
  
     function Rotate_Left
       (Value  : Unsigned_32;
!       Amount : Natural)
!       return   Unsigned_32;
  
     function Rotate_Right
       (Value  : Unsigned_32;
!       Amount : Natural)
!       return   Unsigned_32;
  
     function Shift_Left
       (Value  : Unsigned_64;
!       Amount : Natural)
!      return    Unsigned_64;
  
     function Shift_Right
       (Value  : Unsigned_64;
!       Amount : Natural)
!       return   Unsigned_64;
  
     function Shift_Right_Arithmetic
       (Value  : Unsigned_64;
!       Amount : Natural)
!       return   Unsigned_64;
  
     function Rotate_Left
       (Value  : Unsigned_64;
!       Amount : Natural)
!       return   Unsigned_64;
  
     function Rotate_Right
       (Value  : Unsigned_64;
!       Amount : Natural)
!       return   Unsigned_64;
  
     pragma Import (Intrinsic, Shift_Left);
     pragma Import (Intrinsic, Shift_Right);
--- 69,151 ----
  
     function Shift_Left
       (Value  : Unsigned_8;
!       Amount : Natural) return Unsigned_8;
  
     function Shift_Right
       (Value  : Unsigned_8;
!       Amount : Natural) return Unsigned_8;
  
     function Shift_Right_Arithmetic
       (Value  : Unsigned_8;
!       Amount : Natural) return Unsigned_8;
  
     function Rotate_Left
       (Value  : Unsigned_8;
!       Amount : Natural) return Unsigned_8;
  
     function Rotate_Right
       (Value  : Unsigned_8;
!       Amount : Natural) return Unsigned_8;
  
     function Shift_Left
       (Value  : Unsigned_16;
!       Amount : Natural) return    Unsigned_16;
  
     function Shift_Right
       (Value  : Unsigned_16;
!       Amount : Natural) return Unsigned_16;
  
     function Shift_Right_Arithmetic
       (Value  : Unsigned_16;
!       Amount : Natural) return Unsigned_16;
  
     function Rotate_Left
       (Value  : Unsigned_16;
!       Amount : Natural) return Unsigned_16;
  
     function Rotate_Right
       (Value  : Unsigned_16;
!       Amount : Natural) return Unsigned_16;
  
     function Shift_Left
       (Value  : Unsigned_32;
!       Amount : Natural) return Unsigned_32;
  
     function Shift_Right
       (Value  : Unsigned_32;
!       Amount : Natural) return Unsigned_32;
  
     function Shift_Right_Arithmetic
       (Value  : Unsigned_32;
!       Amount : Natural) return Unsigned_32;
  
     function Rotate_Left
       (Value  : Unsigned_32;
!       Amount : Natural) return Unsigned_32;
  
     function Rotate_Right
       (Value  : Unsigned_32;
!       Amount : Natural) return Unsigned_32;
  
     function Shift_Left
       (Value  : Unsigned_64;
!       Amount : Natural) return Unsigned_64;
  
     function Shift_Right
       (Value  : Unsigned_64;
!       Amount : Natural) return Unsigned_64;
  
     function Shift_Right_Arithmetic
       (Value  : Unsigned_64;
!       Amount : Natural) return Unsigned_64;
  
     function Rotate_Left
       (Value  : Unsigned_64;
!       Amount : Natural) return Unsigned_64;
  
     function Rotate_Right
       (Value  : Unsigned_64;
!       Amount : Natural) return Unsigned_64;
  
     pragma Import (Intrinsic, Shift_Left);
     pragma Import (Intrinsic, Shift_Right);
diff -Nrcpad gcc-3.4.3/gcc/ada/krunch.adb gcc-4.0.0/gcc/ada/krunch.adb
*** gcc-3.4.3/gcc/ada/krunch.adb	Thu Apr 24 17:54:06 2003
--- gcc-4.0.0/gcc/ada/krunch.adb	Thu Feb 10 13:50:27 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2000 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** is
*** 44,49 ****
--- 44,50 ----
     Krlen    : Natural;
     Num_Seps : Natural;
     Startloc : Natural;
+    J        : Natural;
  
  begin
     --  Deal with special predefined children cases. Startloc is the first
*************** begin
*** 64,69 ****
--- 65,79 ----
        Curlen := Len - 12;
        Krlen  := 8;
  
+    elsif Len >= 23
+      and then Buffer (1 .. 22) = "ada-wide_wide_text_io-"
+    then
+       Startloc := 3;
+       Buffer (2 .. 5) := "-zt-";
+       Buffer (6 .. Len - 17) := Buffer (23 .. Len);
+       Curlen := Len - 17;
+       Krlen := 8;
+ 
     elsif Len >= 4 and then Buffer (1 .. 4) = "ada-" then
        Startloc := 3;
        Buffer (2 .. Len - 2) := Buffer (4 .. Len);
*************** begin
*** 138,143 ****
--- 148,173 ----
        return;
     end if;
  
+    --  If string contains Wide_Wide, replace by a single z
+ 
+    J := Startloc;
+    while J <= Curlen - 8 loop
+       if Buffer (J .. J + 8) = "wide_wide"
+         and then (J = Startloc
+                     or else Buffer (J - 1) = '-'
+                     or else Buffer (J - 1) = '_')
+         and then (J + 8 = Curlen
+                     or else Buffer (J + 9) = '-'
+                     or else Buffer (J + 9) = '_')
+       then
+          Buffer (J) := 'z';
+          Buffer (J + 1 .. Curlen - 8) := Buffer (J + 9 .. Curlen);
+          Curlen := Curlen - 8;
+       end if;
+ 
+       J := J + 1;
+    end loop;
+ 
     --  For now, refuse to krunch a name that contains an ESC character (wide
     --  character sequence) since it's too much trouble to do this right ???
  
*************** begin
*** 152,158 ****
     --  the krunching process, and then we eliminate them as the last step
  
     Num_Seps := 0;
- 
     for J in Startloc .. Curlen loop
        if Buffer (J) = '-' or else Buffer (J) = '_' then
           Buffer (J) := ' ';
--- 182,187 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/krunch.ads gcc-4.0.0/gcc/ada/krunch.ads
*** gcc-3.4.3/gcc/ada/krunch.ads	Thu Apr 24 17:54:06 2003
--- gcc-4.0.0/gcc/ada/krunch.ads	Thu Feb 10 13:50:27 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-1997 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 111,117 ****
  
  --    a-wtflio
  
! --  This is the only irregularity required (so far!) to keep the file names
  --  unique in the standard predefined libraries.
  
  procedure Krunch
--- 111,122 ----
  
  --    a-wtflio
  
! --  More problems arise with Wide_Wide, so we replace this sequence by
! --  a z (which is not used much) and also (as in the Wide_Text_IO case),
! --  we replace the prefix ada.wide_wide_text_io- by a-zt- and then
! --  the normal crunching rules are applied.
! 
! --  These are the only irregularity required (so far!) to keep the file names
  --  unique in the standard predefined libraries.
  
  procedure Krunch
diff -Nrcpad gcc-3.4.3/gcc/ada/lang-specs.h gcc-4.0.0/gcc/ada/lang-specs.h
*** gcc-3.4.3/gcc/ada/lang-specs.h	Wed Dec  3 11:47:52 2003
--- gcc-4.0.0/gcc/ada/lang-specs.h	Wed Dec  8 11:25:14 2004
***************
*** 6,12 ****
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *           Copyright (C) 1992-2003 Free Software Foundation, Inc.         *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
--- 6,12 ----
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *           Copyright (C) 1992-2004 Free Software Foundation, Inc.         *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
***************
*** 27,43 ****
  /* This is the contribution to the `default_compilers' array in gcc.c for
     GNAT.  */
  
!   {".ads", "@ada", 0},
!   {".adb", "@ada", 0},
    {"@ada",
     "\
   %{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\
!  %{!gnatc*:%{!gnatz*:%{!gnats*:%{!S:%{!c:\
!     %eone of -c, -S, -gnatc, -gnatz, or -gnats is required for Ada}}}}}\
!  gnat1 %{I*} %{k8:-gnatk8} %{w:-gnatws} %1 %{!Q:-quiet} %{nostdinc*}\
      %{nostdlib*}\
      -dumpbase %{.adb:%b.adb}%{.ads:%b.ads}%{!.adb:%{!.ads:%b.ada}}\
!     %{g*} %{O*} %{W*} %{w} %{p} %{pg:-p} %{m*} %{a} %{f*} %{d*}\
      %{!S:%{o*:%w%*-gnatO}} \
      %i %{S:%W{o*}%{!o*:-o %b.s}} \
!     %{!gnatc*:%{!gnatz*:%{!gnats*:%(invoke_as)}}}", 0},
--- 27,43 ----
  /* This is the contribution to the `default_compilers' array in gcc.c for
     GNAT.  */
  
!   {".ads", "@ada", 0, 0, 0},
!   {".adb", "@ada", 0, 0, 0},
    {"@ada",
     "\
   %{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\
!  %{!S:%{!c:%e-c or -S required for Ada}}\
!  gnat1 %{I*} %{k8:-gnatk8} %{w:-gnatws} %{!Q:-quiet} %{nostdinc*}\
      %{nostdlib*}\
      -dumpbase %{.adb:%b.adb}%{.ads:%b.ads}%{!.adb:%{!.ads:%b.ada}}\
!     %{O*} %{W*} %{w} %{p} %{pg:-p} %{a} %{f*} %{d*} %{g*&m*} %1\
      %{!S:%{o*:%w%*-gnatO}} \
      %i %{S:%W{o*}%{!o*:-o %b.s}} \
!     %{gnatc*|gnats*: -o %j} %{-param*} \
!     %{!gnatc*:%{!gnats*:%(invoke_as)}}", 0, 0, 0},
diff -Nrcpad gcc-3.4.3/gcc/ada/lang.opt gcc-4.0.0/gcc/ada/lang.opt
*** gcc-3.4.3/gcc/ada/lang.opt	Fri Nov 14 16:49:19 2003
--- gcc-4.0.0/gcc/ada/lang.opt	Thu Mar 17 15:06:47 2005
*************** nostdlib
*** 57,64 ****
  Ada
  ; Don't look for object files
  
! fRTS
! Ada RejectNegative
  
  gant
  Ada Joined Undocumented
--- 57,64 ----
  Ada
  ; Don't look for object files
  
! fRTS=
! Ada Joined RejectNegative
  
  gant
  Ada Joined Undocumented
diff -Nrcpad gcc-3.4.3/gcc/ada/layout.adb gcc-4.0.0/gcc/ada/layout.adb
*** gcc-3.4.3/gcc/ada/layout.adb	Tue Oct 21 13:42:09 2003
--- gcc-4.0.0/gcc/ada/layout.adb	Tue Jul  6 13:57:30 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Layout is
*** 993,998 ****
--- 993,1004 ----
                 Decl := Parent (Parent (Entity (N)));
                 Size := (Discrim, Size.Nod);
                 Vtyp := Defining_Identifier (Decl);
+ 
+                --  Ensure that we get a private type's full type
+ 
+                if Present (Underlying_Type (Vtyp)) then
+                   Vtyp := Underlying_Type (Vtyp);
+                end if;
              end if;
  
              Typ := Etype (N);
*************** package body Layout is
*** 1980,1990 ****
  
              else
                 declare
!                   EsizV   : SO_Ref;
!                   RM_SizV : Node_Id;
!                   Dchoice : Node_Id;
!                   Discrim : Node_Id;
!                   Dtest   : Node_Id;
  
                 begin
                    RM_Siz_Expr := Empty;
--- 1986,1998 ----
  
              else
                 declare
!                   EsizV    : SO_Ref;
!                   RM_SizV  : Node_Id;
!                   Dchoice  : Node_Id;
!                   Discrim  : Node_Id;
!                   Dtest    : Node_Id;
!                   D_List   : List_Id;
!                   D_Entity : Entity_Id;
  
                 begin
                    RM_Siz_Expr := Empty;
*************** package body Layout is
*** 2052,2067 ****
                       --  Otherwise construct the appropriate test
  
                       else
-                         --  Discriminant to be tested
- 
-                         Discrim :=
-                           Make_Selected_Component (Loc,
-                             Prefix        =>
-                               Make_Identifier (Loc, Chars => Vname),
-                             Selector_Name =>
-                               New_Occurrence_Of
-                                 (Entity (Name (Vpart)), Loc));
- 
                          --  The test to be used in general is a call to the
                          --  discriminant checking function. However, it is
                          --  definitely worth special casing the very common
--- 2060,2065 ----
*************** package body Layout is
*** 2072,2077 ****
--- 2070,2085 ----
                          if No (Next (Dchoice))
                            and then Nkind (Dchoice) /= N_Range
                          then
+                            --  Discriminant to be tested
+ 
+                            Discrim :=
+                              Make_Selected_Component (Loc,
+                                Prefix        =>
+                                  Make_Identifier (Loc, Chars => Vname),
+                                Selector_Name =>
+                                  New_Occurrence_Of
+                                    (Entity (Name (Vpart)), Loc));
+ 
                             Dtest :=
                               Make_Op_Eq (Loc,
                                 Left_Opnd  => Discrim,
*************** package body Layout is
*** 2083,2088 ****
--- 2091,2115 ----
                          --  False when the passed discriminant value matches.
  
                          else
+                            --  The checking function takes all of the type's
+                            --  discriminants as parameters, so a list of all
+                            --  the selected discriminants must be constructed.
+ 
+                            D_List := New_List;
+                            D_Entity := First_Discriminant (E);
+                            while Present (D_Entity) loop
+                               Append (
+                                 Make_Selected_Component (Loc,
+                                   Prefix        =>
+                                     Make_Identifier (Loc, Chars => Vname),
+                                   Selector_Name =>
+                                     New_Occurrence_Of
+                                       (D_Entity, Loc)),
+                                 D_List);
+ 
+                               D_Entity := Next_Discriminant (D_Entity);
+                            end loop;
+ 
                             Dtest :=
                               Make_Op_Not (Loc,
                                 Right_Opnd =>
*************** package body Layout is
*** 2091,2097 ****
                                       New_Occurrence_Of
                                         (Dcheck_Function (Var), Loc),
                                     Parameter_Associations =>
!                                      New_List (Discrim)));
                          end if;
  
                          RM_Siz_Expr :=
--- 2118,2124 ----
                                       New_Occurrence_Of
                                         (Dcheck_Function (Var), Loc),
                                     Parameter_Associations =>
!                                      D_List));
                          end if;
  
                          RM_Siz_Expr :=
*************** package body Layout is
*** 2320,2326 ****
              end;
           end if;
  
!          Set_Prim_Alignment (E);
  
        --  Scalar types: set size and alignment
  
--- 2347,2353 ----
              end;
           end if;
  
!          Set_Elem_Alignment (E);
  
        --  Scalar types: set size and alignment
  
*************** package body Layout is
*** 2385,2393 ****
              end if;
           end if;
  
!          Set_Prim_Alignment (E);
  
!       --  Non-primitive types
  
        else
           --  If RM_Size is known, set Esize if not known
--- 2412,2420 ----
              end if;
           end if;
  
!          Set_Elem_Alignment (E);
  
!       --  Non-elementary (composite) types
  
        else
           --  If RM_Size is known, set Esize if not known
*************** package body Layout is
*** 2837,2846 ****
     end Set_Discrete_RM_Size;
  
     ------------------------
!    -- Set_Prim_Alignment --
     ------------------------
  
!    procedure Set_Prim_Alignment (E : Entity_Id) is
     begin
        --  Do not set alignment for packed array types, unless we are doing
        --  front end layout, because otherwise this is always handled in the
--- 2864,2873 ----
     end Set_Discrete_RM_Size;
  
     ------------------------
!    -- Set_Elem_Alignment --
     ------------------------
  
!    procedure Set_Elem_Alignment (E : Entity_Id) is
     begin
        --  Do not set alignment for packed array types, unless we are doing
        --  front end layout, because otherwise this is always handled in the
*************** package body Layout is
*** 2903,2909 ****
              Init_Alignment (E, A);
           end if;
        end;
!    end Set_Prim_Alignment;
  
     ----------------------
     -- SO_Ref_From_Expr --
--- 2930,2936 ----
              Init_Alignment (E, A);
           end if;
        end;
!    end Set_Elem_Alignment;
  
     ----------------------
     -- SO_Ref_From_Expr --
diff -Nrcpad gcc-3.4.3/gcc/ada/layout.ads gcc-4.0.0/gcc/ada/layout.ads
*** gcc-3.4.3/gcc/ada/layout.ads	Thu Apr 24 17:54:06 2003
--- gcc-4.0.0/gcc/ada/layout.ads	Tue Jul  6 13:57:30 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2000-2001 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2000-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Layout is
*** 68,77 ****
     --  types, the RM_Size is simply set to zero. This routine also sets
     --  the Is_Constrained flag in Def_Id.
  
!    procedure Set_Prim_Alignment (E : Entity_Id);
!    --  The front end always sets alignments for primitive types by calling this
!    --  procedure. Note that we have to do this for discrete types (since the
!    --  Alignment attribute is static), so we might as well do it for all
!    --  scalar types, since the processing is the same.
  
  end Layout;
--- 68,77 ----
     --  types, the RM_Size is simply set to zero. This routine also sets
     --  the Is_Constrained flag in Def_Id.
  
!    procedure Set_Elem_Alignment (E : Entity_Id);
!    --  The front end always sets alignments for elementary types by calling
!    --  this procedure. Note that we have to do this for discrete types (since
!    --  the Alignment attribute is static), so we might as well do it for all
!    --  elementary types, since the processing is the same.
  
  end Layout;
diff -Nrcpad gcc-3.4.3/gcc/ada/lib-load.adb gcc-4.0.0/gcc/ada/lib-load.adb
*** gcc-3.4.3/gcc/ada/lib-load.adb	Mon Nov 24 14:27:57 2003
--- gcc-4.0.0/gcc/ada/lib-load.adb	Mon Jun  7 14:16:20 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Sinfo;    use Sinfo;
*** 43,49 ****
  with Sinput;   use Sinput;
  with Sinput.L; use Sinput.L;
  with Stand;    use Stand;
- with Targparm; use Targparm;
  with Tbuild;   use Tbuild;
  with Uname;    use Uname;
  
--- 43,48 ----
*************** package body Lib.Load is
*** 55,62 ****
  
     function Spec_Is_Irrelevant
       (Spec_Unit : Unit_Number_Type;
!       Body_Unit : Unit_Number_Type)
!       return      Boolean;
     --  The Spec_Unit and Body_Unit parameters are the unit numbers of the
     --  spec file that corresponds to the main unit which is a body. This
     --  function determines if the spec file is irrelevant and will be
--- 54,60 ----
  
     function Spec_Is_Irrelevant
       (Spec_Unit : Unit_Number_Type;
!       Body_Unit : Unit_Number_Type) return Boolean;
     --  The Spec_Unit and Body_Unit parameters are the unit numbers of the
     --  spec file that corresponds to the main unit which is a body. This
     --  function determines if the spec file is irrelevant and will be
*************** package body Lib.Load is
*** 73,80 ****
  
     function Create_Dummy_Package_Unit
       (With_Node : Node_Id;
!       Spec_Name : Unit_Name_Type)
!       return      Unit_Number_Type
     is
        Unum         : Unit_Number_Type;
        Cunit_Entity : Entity_Id;
--- 71,77 ----
  
     function Create_Dummy_Package_Unit
       (With_Node : Node_Id;
!       Spec_Name : Unit_Name_Type) return Unit_Number_Type
     is
        Unum         : Unit_Number_Type;
        Cunit_Entity : Entity_Id;
*************** package body Lib.Load is
*** 100,108 ****
        --  Child package
  
        else
- 
-          --  Nkind (Name (With_Node)) = N_Expanded_Name
- 
           Cunit_Entity :=
             Make_Defining_Identifier (No_Location,
               Chars => Chars (Selector_Name (Name (With_Node))));
--- 97,102 ----
*************** package body Lib.Load is
*** 117,123 ****
             Make_Designator (No_Location,
               Name => New_Copy_Tree (Prefix (Name (With_Node))),
               Identifier => New_Occurrence_Of (Cunit_Entity, No_Location));
- 
        end if;
  
        Set_Scope (Cunit_Entity, Standard_Standard);
--- 111,116 ----
*************** package body Lib.Load is
*** 149,155 ****
          Cunit           => Cunit,
          Cunit_Entity    => Cunit_Entity,
          Dependency_Num  => 0,
-         Dependent_Unit  => False,
          Dynamic_Elab    => False,
          Error_Location  => Sloc (With_Node),
          Expected_Unit   => Spec_Name,
--- 142,147 ----
*************** package body Lib.Load is
*** 159,164 ****
--- 151,157 ----
          Ident_String    => Empty,
          Loading         => False,
          Main_Priority   => Default_Main_Priority,
+         Munit_Index     => 0,
          Serial_Number   => 0,
          Source_Index    => No_Source_File,
          Unit_File_Name  => Get_File_Name (Spec_Name, Subunit => False),
*************** package body Lib.Load is
*** 213,219 ****
        Units.Table (Main_Unit).Unit_File_Name := Fname;
  
        if Fname /= No_File then
- 
           Main_Source_File := Load_Source_File (Fname);
           Current_Error_Source_File := Main_Source_File;
  
--- 206,211 ----
*************** package body Lib.Load is
*** 221,236 ****
             Cunit           => Empty,
             Cunit_Entity    => Empty,
             Dependency_Num  => 0,
-            Dependent_Unit  => True,
             Dynamic_Elab    => False,
             Error_Location  => No_Location,
             Expected_Unit   => No_Name,
             Fatal_Error     => False,
             Generate_Code   => False,
             Has_RACW        => False,
-            Loading         => True,
             Ident_String    => Empty,
             Main_Priority   => Default_Main_Priority,
             Serial_Number   => 0,
             Source_Index    => Main_Source_File,
             Unit_File_Name  => Fname,
--- 213,228 ----
             Cunit           => Empty,
             Cunit_Entity    => Empty,
             Dependency_Num  => 0,
             Dynamic_Elab    => False,
             Error_Location  => No_Location,
             Expected_Unit   => No_Name,
             Fatal_Error     => False,
             Generate_Code   => False,
             Has_RACW        => False,
             Ident_String    => Empty,
+            Loading         => True,
             Main_Priority   => Default_Main_Priority,
+            Munit_Index     => 0,
             Serial_Number   => 0,
             Source_Index    => Main_Source_File,
             Unit_File_Name  => Fname,
*************** package body Lib.Load is
*** 249,256 ****
        Error_Node : Node_Id;
        Subunit    : Boolean;
        Corr_Body  : Unit_Number_Type := No_Unit;
!       Renamings  : Boolean          := False)
!       return       Unit_Number_Type
     is
        Calling_Unit : Unit_Number_Type;
        Uname_Actual : Unit_Name_Type;
--- 241,247 ----
        Error_Node : Node_Id;
        Subunit    : Boolean;
        Corr_Body  : Unit_Number_Type := No_Unit;
!       Renamings  : Boolean          := False) return Unit_Number_Type
     is
        Calling_Unit : Unit_Number_Type;
        Uname_Actual : Unit_Name_Type;
*************** package body Lib.Load is
*** 259,297 ****
        Fname        : File_Name_Type;
        Src_Ind      : Source_File_Index;
  
-       procedure Set_Load_Unit_Dependency (U : Unit_Number_Type);
-       --  Sets the Dependent_Unit flag unless we have a predefined unit
-       --  being loaded in High_Integrity_Mode. In this case we do not want
-       --  to create a dependency, since we have loaded the unit only
-       --  to inline stuff from it. If this is not the case, an error
-       --  message will be issued in Rtsfind in any case.
- 
-       ------------------------------
-       -- Set_Load_Unit_Dependency --
-       ------------------------------
- 
-       procedure Set_Load_Unit_Dependency (U : Unit_Number_Type) is
-       begin
-          --  Differentiate between pragma No_Run_Time mode (that can be
-          --  used with a standard installation), and HI-E mode which comes
-          --  with a special installation.
- 
-          --  For Configurable_Run_Time_Mode set by a pragma, we do not want to
-          --  create a dependency since the binder would generate references to
-          --  these units. In the case of configurable run-time, we do want to
-          --  establish this dependency.
- 
-          if Configurable_Run_Time_Mode
-            and then not Configurable_Run_Time_On_Target
-            and then not Debug_Flag_YY
-            and then Is_Internal_File_Name (Unit_File_Name (U))
-          then
-             null;
-          else
-             Units.Table (U).Dependent_Unit := True;
-          end if;
-       end Set_Load_Unit_Dependency;
- 
     --  Start of processing for Load_Unit
  
     begin
--- 250,255 ----
*************** package body Lib.Load is
*** 340,353 ****
                       Par := Prefix (Par);
                    end loop;
  
!                   if Nkind (Par) = N_Selected_Component then
!                      --  some intermediate parent is a renaming.
  
                       Set_Entity (Selector_Name (Par), Cunit_Entity (Unump));
  
!                   else
!                      --  the ultimate parent is a renaming.
  
                       Set_Entity (Par, Cunit_Entity (Unump));
                    end if;
                 end;
--- 298,311 ----
                       Par := Prefix (Par);
                    end loop;
  
!                   --  Case of some intermediate parent is a renaming
  
+                   if Nkind (Par) = N_Selected_Component then
                       Set_Entity (Selector_Name (Par), Cunit_Entity (Unump));
  
!                   --  Case where the ultimate parent is a renaming
  
+                   else
                       Set_Entity (Par, Cunit_Entity (Unump));
                    end if;
                 end;
*************** package body Lib.Load is
*** 470,476 ****
        --  then we have the problem that the file does not contain the unit that
        --  is needed. We simply treat this as a file not found condition.
  
!       if Unum > Units.Last then
           for J in Units.First .. Units.Last loop
              if Fname = Units.Table (J).Unit_File_Name then
                 if Debug_Flag_L then
--- 428,437 ----
        --  then we have the problem that the file does not contain the unit that
        --  is needed. We simply treat this as a file not found condition.
  
!       --  We skip this test in multiple unit per file mode since in this
!       --  case we can have multiple units from the same source file.
! 
!       if Unum > Units.Last and then Multiple_Unit_Index = 0 then
           for J in Units.First .. Units.Last loop
              if Fname = Units.Table (J).Unit_File_Name then
                 if Debug_Flag_L then
*************** package body Lib.Load is
*** 481,487 ****
                 end if;
  
                 if Present (Error_Node) then
- 
                    if Is_Predefined_File_Name (Fname) then
                       Error_Msg_Name_1 := Uname_Actual;
                       Error_Msg
--- 442,447 ----
*************** package body Lib.Load is
*** 519,525 ****
           --  legitimately occurs (e.g. two package bodies that contain
           --  inlined subprogram referenced by the other).
  
!          --  Ada0Y (AI-50217): We also ignore limited_with clauses, because
           --  their purpose is precisely to create legal circular structures.
  
           if Loading (Unum)
--- 479,485 ----
           --  legitimately occurs (e.g. two package bodies that contain
           --  inlined subprogram referenced by the other).
  
!          --  Ada 2005 (AI-50217): We also ignore limited_with clauses, because
           --  their purpose is precisely to create legal circular structures.
  
           if Loading (Unum)
*************** package body Lib.Load is
*** 551,560 ****
           end if;
  
           Load_Stack.Decrement_Last;
-          Set_Load_Unit_Dependency (Unum);
           return Unum;
  
!       --  File is not already in table, so try to open it
  
        else
           if Debug_Flag_L then
--- 511,519 ----
           end if;
  
           Load_Stack.Decrement_Last;
           return Unum;
  
!       --  Unit is not already in table, so try to open the file
  
        else
           if Debug_Flag_L then
*************** package body Lib.Load is
*** 578,584 ****
                Cunit           => Empty,
                Cunit_Entity    => Empty,
                Dependency_Num  => 0,
-               Dependent_Unit  => False,
                Dynamic_Elab    => False,
                Error_Location  => Sloc (Error_Node),
                Expected_Unit   => Uname_Actual,
--- 537,542 ----
*************** package body Lib.Load is
*** 588,593 ****
--- 546,552 ----
                Ident_String    => Empty,
                Loading         => True,
                Main_Priority   => Default_Main_Priority,
+               Munit_Index     => 0,
                Serial_Number   => 0,
                Source_Index    => Src_Ind,
                Unit_File_Name  => Fname,
*************** package body Lib.Load is
*** 596,604 ****
  
              --  Parse the new unit
  
!             Initialize_Scanner (Unum, Source_Index (Unum));
!             Discard_List (Par (Configuration_Pragmas => False));
!             Set_Loading (Unum, False);
  
              --  If spec is irrelevant, then post errors and quit
  
--- 555,570 ----
  
              --  Parse the new unit
  
!             declare
!                Save_Index : constant Nat := Multiple_Unit_Index;
!             begin
!                Multiple_Unit_Index := Get_Unit_Index (Uname_Actual);
!                Units.Table (Unum).Munit_Index := Multiple_Unit_Index;
!                Initialize_Scanner (Unum, Source_Index (Unum));
!                Discard_List (Par (Configuration_Pragmas => False));
!                Multiple_Unit_Index := Save_Index;
!                Set_Loading (Unum, False);
!             end;
  
              --  If spec is irrelevant, then post errors and quit
  
*************** package body Lib.Load is
*** 627,633 ****
              --  Remove load stack entry and return the entry in the file table
  
              Load_Stack.Decrement_Last;
-             Set_Load_Unit_Dependency (Unum);
              return Unum;
  
           --  Case of file not found
--- 593,598 ----
*************** package body Lib.Load is
*** 705,715 ****
  
     function Spec_Is_Irrelevant
       (Spec_Unit : Unit_Number_Type;
!       Body_Unit : Unit_Number_Type)
!       return      Boolean
     is
        Sunit : constant Node_Id := Cunit (Spec_Unit);
        Bunit : constant Node_Id := Cunit (Body_Unit);
     begin
        --  The spec is irrelevant if the body is a subprogram body, and the
        --  spec is other than a subprogram spec or generic subprogram spec.
--- 670,680 ----
  
     function Spec_Is_Irrelevant
       (Spec_Unit : Unit_Number_Type;
!       Body_Unit : Unit_Number_Type) return Boolean
     is
        Sunit : constant Node_Id := Cunit (Spec_Unit);
        Bunit : constant Node_Id := Cunit (Body_Unit);
+ 
     begin
        --  The spec is irrelevant if the body is a subprogram body, and the
        --  spec is other than a subprogram spec or generic subprogram spec.
diff -Nrcpad gcc-3.4.3/gcc/ada/lib-load.ads gcc-4.0.0/gcc/ada/lib-load.ads
*** gcc-3.4.3/gcc/ada/lib-load.ads	Tue Oct 21 13:42:09 2003
--- gcc-4.0.0/gcc/ada/lib-load.ads	Mon Feb  9 14:56:04 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Lib.Load is
*** 109,116 ****
        Error_Node : Node_Id;
        Subunit    : Boolean;
        Corr_Body  : Unit_Number_Type := No_Unit;
!       Renamings  : Boolean          := False)
!       return       Unit_Number_Type;
     --  This function loads and parses the unit specified by Load_Name (or
     --  returns the unit number for the previously constructed units table
     --  entry if this is not the first call for this unit). Required indicates
--- 109,115 ----
        Error_Node : Node_Id;
        Subunit    : Boolean;
        Corr_Body  : Unit_Number_Type := No_Unit;
!       Renamings  : Boolean          := False) return Unit_Number_Type;
     --  This function loads and parses the unit specified by Load_Name (or
     --  returns the unit number for the previously constructed units table
     --  entry if this is not the first call for this unit). Required indicates
*************** package Lib.Load is
*** 151,158 ****
  
     function Create_Dummy_Package_Unit
       (With_Node : Node_Id;
!       Spec_Name : Unit_Name_Type)
!       return      Unit_Number_Type;
     --  With_Node is the Node_Id of a with statement for which the file could
     --  not be found, and Spec_Name is the corresponding unit name. This call
     --  creates a dummy package unit so that compilation can continue without
--- 150,156 ----
  
     function Create_Dummy_Package_Unit
       (With_Node : Node_Id;
!       Spec_Name : Unit_Name_Type) return Unit_Number_Type;
     --  With_Node is the Node_Id of a with statement for which the file could
     --  not be found, and Spec_Name is the corresponding unit name. This call
     --  creates a dummy package unit so that compilation can continue without
diff -Nrcpad gcc-3.4.3/gcc/ada/lib-writ.adb gcc-4.0.0/gcc/ada/lib-writ.adb
*** gcc-3.4.3/gcc/ada/lib-writ.adb	Mon Jan  5 15:20:44 2004
--- gcc-4.0.0/gcc/ada/lib-writ.adb	Mon Jan  3 15:32:16 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Osint;    use Osint;
*** 41,46 ****
--- 41,47 ----
  with Osint.C;  use Osint.C;
  with Par;
  with Restrict; use Restrict;
+ with Rident;   use Rident;
  with Scn;      use Scn;
  with Sinfo;    use Sinfo;
  with Sinput;   use Sinput;
*************** with System.WCh_Con; use System.WCh_Con;
*** 52,57 ****
--- 53,66 ----
  
  package body Lib.Writ is
  
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    procedure Write_Unit_Name (N : Node_Id);
+    --  Used to write out the unit name for R (pragma Restriction) lines
+    --  for uses of Restriction (No_Dependence => unit-name).
+ 
     ----------------------------------
     -- Add_Preprocessing_Dependency --
     ----------------------------------
*************** package body Lib.Writ is
*** 67,73 ****
           Cunit           => Empty,
           Cunit_Entity    => Empty,
           Dependency_Num  => 0,
-          Dependent_Unit  => True,
           Dynamic_Elab    => False,
           Fatal_Error     => False,
           Generate_Code   => False,
--- 76,81 ----
*************** package body Lib.Writ is
*** 75,80 ****
--- 83,89 ----
           Ident_String    => Empty,
           Loading         => False,
           Main_Priority   => -1,
+          Munit_Index     => 0,
           Serial_Number   => 0,
           Version         => 0,
           Error_Location  => No_Location);
*************** package body Lib.Writ is
*** 91,98 ****
        System_Fname : File_Name_Type;
        --  File name for system spec if needed for dummy entry
  
-       Save_Style : constant Boolean := Style_Check;
- 
     begin
        --  Nothing to do if we already compiled System
  
--- 100,105 ----
*************** package body Lib.Writ is
*** 122,128 ****
          Cunit           => Empty,
          Cunit_Entity    => Empty,
          Dependency_Num  => 0,
-         Dependent_Unit  => True,
          Dynamic_Elab    => False,
          Fatal_Error     => False,
          Generate_Code   => False,
--- 129,134 ----
*************** package body Lib.Writ is
*** 130,135 ****
--- 136,142 ----
          Ident_String    => Empty,
          Loading         => False,
          Main_Priority   => -1,
+         Munit_Index     => 0,
          Serial_Number   => 0,
          Version         => 0,
          Error_Location  => No_Location);
*************** package body Lib.Writ is
*** 137,146 ****
        --  Parse system.ads so that the checksum is set right
        --  Style checks are not applied.
  
!       Style_Check := False;
!       Initialize_Scanner (Units.Last, System_Source_File_Index);
!       Discard_List (Par (Configuration_Pragmas => False));
!       Style_Check := Save_Style;
     end Ensure_System_Dependency;
  
     ---------------
--- 144,160 ----
        --  Parse system.ads so that the checksum is set right
        --  Style checks are not applied.
  
!       declare
!          Save_Mindex : constant Nat := Multiple_Unit_Index;
!          Save_Style  : constant Boolean := Style_Check;
!       begin
!          Multiple_Unit_Index := 0;
!          Style_Check := False;
!          Initialize_Scanner (Units.Last, System_Source_File_Index);
!          Discard_List (Par (Configuration_Pragmas => False));
!          Style_Check := Save_Style;
!          Multiple_Unit_Index := Save_Mindex;
!       end;
     end Ensure_System_Dependency;
  
     ---------------
*************** package body Lib.Writ is
*** 214,220 ****
           Item := First (Context_Items (Cunit));
           while Present (Item) loop
  
!             --  Ada0Y (AI-50217): limited with_clauses do not create
              --  dependencies
  
              if Nkind (Item) = N_With_Clause
--- 228,234 ----
           Item := First (Context_Items (Cunit));
           while Present (Item) loop
  
!             --  Ada 2005 (AI-50217): limited with_clauses do not create
              --  dependencies
  
              if Nkind (Item) = N_With_Clause
*************** package body Lib.Writ is
*** 592,597 ****
--- 606,612 ----
           Pname      : constant Unit_Name_Type :=
                          Get_Parent_Spec_Name (Unit_Name (Main_Unit));
           Body_Fname : File_Name_Type;
+          Body_Index : Nat;
  
        begin
           --  Loop to build the with table. A with on the main unit itself
*************** package body Lib.Writ is
*** 610,616 ****
  
              if Unit_Name (J) /= No_Name
                and then (With_Flags (J) or else Unit_Name (J) = Pname)
-               and then Units.Table (J).Dependent_Unit
              then
                 Num_Withs := Num_Withs + 1;
                 With_Table (Num_Withs) := J;
--- 625,630 ----
*************** package body Lib.Writ is
*** 645,669 ****
  
                 if Is_Spec_Name (Uname) then
                    Body_Fname :=
!                     Get_File_Name (Get_Body_Name (Uname), Subunit => False);
                 else
                    Body_Fname := Get_File_Name (Uname, Subunit => False);
                 end if;
  
                 --  A package is considered to have a body if it requires
                 --  a body or if a body is present in Ada 83 mode.
  
                 if Body_Required (Cunit)
!                  or else (Ada_83
                             and then Full_Source_Name (Body_Fname) /= No_File)
                 then
                    Write_Info_Name (Body_Fname);
                    Write_Info_Tab (49);
!                   Write_Info_Name (Lib_File_Name (Body_Fname));
                 else
                    Write_Info_Name (Fname);
                    Write_Info_Tab (49);
!                   Write_Info_Name (Lib_File_Name (Fname));
                 end if;
  
                 if Elab_Flags (Unum) then
--- 659,698 ----
  
                 if Is_Spec_Name (Uname) then
                    Body_Fname :=
!                     Get_File_Name
!                       (Get_Body_Name (Uname),
!                        Subunit => False, May_Fail => True);
! 
!                   Body_Index :=
!                     Get_Unit_Index
!                       (Get_Body_Name (Uname));
! 
!                   if Body_Fname = No_File then
!                      Body_Fname := Get_File_Name (Uname, Subunit => False);
!                      Body_Index := Get_Unit_Index (Uname);
!                   end if;
! 
                 else
                    Body_Fname := Get_File_Name (Uname, Subunit => False);
+                   Body_Index := Get_Unit_Index (Uname);
                 end if;
  
                 --  A package is considered to have a body if it requires
                 --  a body or if a body is present in Ada 83 mode.
  
                 if Body_Required (Cunit)
!                  or else (Ada_Version = Ada_83
                             and then Full_Source_Name (Body_Fname) /= No_File)
                 then
                    Write_Info_Name (Body_Fname);
                    Write_Info_Tab (49);
!                   Write_Info_Name
!                     (Lib_File_Name (Body_Fname, Body_Index));
                 else
                    Write_Info_Name (Fname);
                    Write_Info_Tab (49);
!                   Write_Info_Name
!                     (Lib_File_Name (Fname, Munit_Index (Unum)));
                 end if;
  
                 if Elab_Flags (Unum) then
*************** package body Lib.Writ is
*** 683,689 ****
           end loop;
        end Write_With_Lines;
  
!    --  Start of processing for Writ_ALI
  
     begin
        --  We never write an ALI file if the original operating mode was
--- 712,718 ----
           end loop;
        end Write_With_Lines;
  
!    --  Start of processing for Write_ALI
  
     begin
        --  We never write an ALI file if the original operating mode was
*************** package body Lib.Writ is
*** 835,840 ****
--- 864,873 ----
           Write_Info_Str (" CE");
        end if;
  
+       if Opt.Detect_Blocking then
+          Write_Info_Str (" DB");
+       end if;
+ 
        if Opt.Float_Format /= ' ' then
           Write_Info_Str (" F");
  
*************** package body Lib.Writ is
*** 910,937 ****
             or else Unit = Main_Unit
           then
              if not Has_No_Elaboration_Code (Cunit (Unit)) then
!                Violations (No_ELaboration_Code) := True;
              end if;
           end if;
        end loop;
  
!       --  Output restrictions line
  
        Write_Info_Initiate ('R');
        Write_Info_Char (' ');
  
!       for J in All_Restrictions loop
!          if Main_Restrictions (J) then
              Write_Info_Char ('r');
!          elsif Violations (J) then
              Write_Info_Char ('v');
           else
              Write_Info_Char ('n');
           end if;
        end loop;
  
        Write_Info_EOL;
  
        --  Output interrupt state lines
  
        for J in Interrupt_States.First .. Interrupt_States.Last loop
--- 943,1013 ----
             or else Unit = Main_Unit
           then
              if not Has_No_Elaboration_Code (Cunit (Unit)) then
!                Main_Restrictions.Violated (No_Elaboration_Code) := True;
              end if;
           end if;
        end loop;
  
!       --  Output first restrictions line
  
        Write_Info_Initiate ('R');
        Write_Info_Char (' ');
  
!       --  First the information for the boolean restrictions
! 
!       for R in All_Boolean_Restrictions loop
!          if Main_Restrictions.Set (R)
!            and then not Restriction_Warnings (R)
!          then
              Write_Info_Char ('r');
!          elsif Main_Restrictions.Violated (R) then
              Write_Info_Char ('v');
           else
              Write_Info_Char ('n');
           end if;
        end loop;
  
+       --  And now the information for the parameter restrictions
+ 
+       for RP in All_Parameter_Restrictions loop
+          if Main_Restrictions.Set (RP)
+            and then not Restriction_Warnings (RP)
+          then
+             Write_Info_Char ('r');
+             Write_Info_Nat (Nat (Main_Restrictions.Value (RP)));
+          else
+             Write_Info_Char ('n');
+          end if;
+ 
+          if not Main_Restrictions.Violated (RP)
+            or else RP not in Checked_Parameter_Restrictions
+          then
+             Write_Info_Char ('n');
+          else
+             Write_Info_Char ('v');
+             Write_Info_Nat (Nat (Main_Restrictions.Count (RP)));
+ 
+             if Main_Restrictions.Unknown (RP) then
+                Write_Info_Char ('+');
+             end if;
+          end if;
+       end loop;
+ 
        Write_Info_EOL;
  
+       --  Output R lines for No_Dependence entries
+ 
+       for J in No_Dependence.First .. No_Dependence.Last loop
+          if In_Extended_Main_Source_Unit (No_Dependence.Table (J).Unit)
+            and then not No_Dependence.Table (J).Warn
+          then
+             Write_Info_Initiate ('R');
+             Write_Info_Char (' ');
+             Write_Unit_Name (No_Dependence.Table (J).Unit);
+             Write_Info_EOL;
+          end if;
+       end loop;
+ 
        --  Output interrupt state lines
  
        for J in Interrupt_States.First .. Interrupt_States.Last loop
*************** package body Lib.Writ is
*** 992,1002 ****
              Write_Info_Initiate ('D');
              Write_Info_Char (' ');
  
!             --  Normal case of a dependent unit entry with a source index
  
!             if Sind /= No_Source_File
!               and then Units.Table (Unum).Dependent_Unit
!             then
                 Write_Info_Name (File_Name (Sind));
                 Write_Info_Tab (25);
                 Write_Info_Str (String (Time_Stamp (Sind)));
--- 1068,1076 ----
              Write_Info_Initiate ('D');
              Write_Info_Char (' ');
  
!             --  Normal case of a unit entry with a source index
  
!             if Sind /= No_Source_File then
                 Write_Info_Name (File_Name (Sind));
                 Write_Info_Tab (25);
                 Write_Info_Str (String (Time_Stamp (Sind)));
*************** package body Lib.Writ is
*** 1028,1035 ****
                    Write_Info_Name (Reference_Name (Sind));
                 end if;
  
!             --  Case where there is no source index (happens for missing files)
!             --  Also come here for non-dependent units.
  
              else
                 Write_Info_Name (Unit_File_Name (Unum));
--- 1102,1109 ----
                    Write_Info_Name (Reference_Name (Sind));
                 end if;
  
!                --  Case where there is no source index (happens for missing
!                --  files). In this case we write a dummy time stamp.
  
              else
                 Write_Info_Name (Unit_File_Name (Unum));
*************** package body Lib.Writ is
*** 1046,1052 ****
        Output_References;
        Write_Info_Terminate;
        Close_Output_Library_Info;
- 
     end Write_ALI;
  
  end Lib.Writ;
--- 1120,1142 ----
        Output_References;
        Write_Info_Terminate;
        Close_Output_Library_Info;
     end Write_ALI;
  
+    ---------------------
+    -- Write_Unit_Name --
+    ---------------------
+ 
+    procedure Write_Unit_Name (N : Node_Id) is
+    begin
+       if Nkind (N) = N_Identifier then
+          Write_Info_Name (Chars (N));
+ 
+       else
+          pragma Assert (Nkind (N) = N_Selected_Component);
+          Write_Unit_Name (Prefix (N));
+          Write_Info_Char ('.');
+          Write_Unit_Name (Selector_Name (N));
+       end if;
+    end Write_Unit_Name;
+ 
  end Lib.Writ;
diff -Nrcpad gcc-3.4.3/gcc/ada/lib-writ.ads gcc-4.0.0/gcc/ada/lib-writ.ads
*** gcc-3.4.3/gcc/ada/lib-writ.ads	Mon Jan  5 15:20:44 2004
--- gcc-4.0.0/gcc/ada/lib-writ.ads	Mon Jan  3 15:32:16 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Lib.Writ is
*** 32,41 ****
     -- Format of Library Information --
     -----------------------------------
  
-    --  Note: the contents of the ali file are summarized in the GNAT
-    --  user's guide, so if any non-trivial changes are made to this
-    --  section, they should be reflected in the user's guide.
- 
     --  This section  describes the format of the library information that is
     --  associated with object files. The exact method of this association is
     --  potentially implementation dependent and is described and implemented
--- 32,37 ----
*************** package Lib.Writ is
*** 50,55 ****
--- 46,93 ----
  
     --    Key_Character parameter parameter ...
  
+    --  The following sections describe the format of these lines in detail
+ 
+    --------------------------------------
+    -- Making Changes to the ALI Format --
+    --------------------------------------
+ 
+    --  A number of tools use ali.adb to parse ali files. This means
+    --  that changes to this format can cause old versions of these tools
+    --  to be incompatible with new versions of the compiler. Any changes
+    --  to ali file formats must be carefully evaluated to understand any
+    --  such possible conflicts, and in particular, it is very undesirable
+    --  to create conflicts between older versions of GPS and newer versions
+    --  of the compiler.
+ 
+    --  If the following guidelines are respected, downward compatibility
+    --  problems (old tools reading new ali files) should be minimized:
+ 
+    --    The basic key character format must be kept.
+ 
+    --    The V line must be the first line, this is checked by ali.adb
+    --    even in Ignore_Errors mode, and is used to verify that the file
+    --    at hand is indeed likely intended to be an ali file.
+ 
+    --    The P line must be present, though may be modified in contents
+    --    according to remaining guidelines. Again, ali.adb assumes the
+    --    P line is present even in Ignore_Errors mode.
+ 
+    --    New modifiers can generally be added (in particular adding new
+    --    two letter modifiers to the P or U lines is always safe)
+ 
+    --    Adding entirely new lines (with a new key letter) to the ali
+    --    file is always safe, at any point (other than before the V
+    --    line), since suchy lines will be ignored.
+ 
+    --  Following the guidelines in this section should ensure that this
+    --  problem is minimized and that old tools will be able to deal
+    --  successfully with new ali formats. Note that this does not apply
+    --  to the compiler itself, which always requires consistency between
+    --  the ali files and the binder. That is because one of the main
+    --  functions of the binder is to ensure consistency of the partition,
+    --  and this can be compromised if the ali files are inconsistent.
+ 
     ------------------
     -- Header Lines --
     ------------------
*************** package Lib.Writ is
*** 72,77 ****
--- 110,119 ----
     --      library info described in this package, or modifications to
     --      calling sequences, or to the way that data is represented.
  
+    --    Note: the V line absolutely must be the first line, and no change
+    --    to the ALI format should change this, since even in Ignore_Errors
+    --    mode, Scan_ALI insists on finding a V line.
+ 
     --  ---------------------
     --  -- M  Main Program --
     --  ---------------------
*************** package Lib.Writ is
*** 139,144 ****
--- 181,189 ----
     --              format will be correct and complete. Note that NO is
     --              always present if CE is present.
     --
+    --         DB   Detect_Blocking pragma is in effect for all units in
+    --              this file.
+    --
     --         FD   Configuration pragmas apply to all the units in this
     --              file specifying a possibly non-standard floating point
     --              format (VAX float with Long_Float using D_Float)
*************** package Lib.Writ is
*** 201,216 ****
     --      possible cases. These values are checked for consistency by the
     --      binder and then copied to the generated binder output file.
  
     --  ---------------------
     --  -- R  Restrictions --
     --  ---------------------
  
!    --    R <<restriction-characters>>
  
!    --      This line records information regarding restrictions. The
!    --      parameter is a string of characters, one for each entry in
!    --      Restrict.Compilation_Unit_Restrictions, in order. There are
!    --      three settings possible settings for each restriction:
  
     --        r   Restricted. Unit was compiled under control of a pragma
     --            Restrictions for the corresponding restriction. In
--- 246,271 ----
     --      possible cases. These values are checked for consistency by the
     --      binder and then copied to the generated binder output file.
  
+    --    Note: The P line must be present. Even in Ignore_Errors mode,
+    --    Scan_ALI insists on finding a P line. So if changes are made to
+    --    the ALI format, they should not include removing the P line!
+ 
     --  ---------------------
     --  -- R  Restrictions --
     --  ---------------------
  
!    --  The first R line records the status of restrictions generated by pragma
!    --  Restrictions encountered, as well as information on what the compiler
!    --  has been able to determine with respect to restrictions violations.
!    --  The format is:
  
!    --    R <<restriction-characters>> <<restriction-param-id-entries>>
! 
!    --      The first parameter is a string of characters that records
!    --      information regarding restrictions that do not take parameter
!    --      not take parameter values. It is a string of characters, one
!    --      character for each value (in order) in All_Boolean_Restrictions.
!    --      There are three possible settings for each restriction:
  
     --        r   Restricted. Unit was compiled under control of a pragma
     --            Restrictions for the corresponding restriction. In
*************** package Lib.Writ is
*** 231,236 ****
--- 286,358 ----
     --      has "v", which is not permitted, since these restrictions
     --      are partition-wide.
  
+    --  The second parameter, which immediately follows the first (with
+    --  no separating space) gives restriction information for identifiers
+    --  for which a parameter is given.
+ 
+    --      The parameter is a string of entries, one for each value in
+    --      Restrict.All_Parameter_Restrictions. Each entry has two
+    --      components in sequence, the first indicating whether or not
+    --      there is a restriction, and the second indicating whether
+    --      or not the compiler detected violations. In the boolean case
+    --      it is not necessary to separate these, since if a restriction
+    --      is set, and violated, that is an error. But in the parameter
+    --      case, this is not true. For example, we can have a unit with
+    --      a pragma Restrictions (Max_Tasks => 4), where the compiler
+    --      can detect that there are exactly three tasks declared. Both
+    --      of these pieces of information must be passed to the binder.
+    --      The parameter of 4 is important in case the total number of
+    --      tasks in the partition is greater than 4. The parameter of
+    --      3 is important in case some other unit has a restrictions
+    --      pragma with Max_Tasks=>2.
+ 
+    --      The component for the presence of restriction has one of two
+    --      possible forms:
+ 
+    --         n   No pragma for this restriction is present in the
+    --             set of units for this ali file.
+ 
+    --         rN  At least one pragma for this restriction is present
+    --             in the set of units for this ali file. The value N
+    --             is the minimum parameter value encountered in any
+    --             such pragma. N is in the range of Integer (a value
+    --             larger than N'Last causes the pragma to be ignored).
+ 
+    --      The component for the violation detection has one of three
+    --      possible forms:
+ 
+    --         n   No violations were detected by the compiler
+ 
+    --         vN  A violation was detected. N is either the maximum or total
+    --             count of violations (depending on the checking type) in
+    --             all the units represented by the ali file). Note that
+    --             this setting is only allowed for restrictions that are
+    --             in Checked_[Max|Sum]_Parameter_Restrictions. The value
+    --             here is known to be exact by the compiler and is in the
+    --             range of Natural.
+ 
+    --         vN+ A violation was detected. The compiler cannot determine
+    --             the exact count of violations, but it is at least N.
+ 
+    --      There are no spaces within the parameter string, so the entry
+    --      described above in the header of this section for Max_Tasks would
+    --      appear as the string r4v3.
+ 
+    --      Note: The restrictions line is required to be present. Even in
+    --      Ignore_Errors mode, Scan_ALI expects to find an R line and will
+    --      signal a fatal error if it is missing. This means that future
+    --      changes to the ALI file format must retain the R line.
+ 
+    --  Subsequent R lines are present only if pragma Restriction No_Dependence
+    --  is used. There is one such line for each such pragma appearing in the
+    --  extended main unit. The format is
+ 
+    --    R unit_name
+ 
+    --      Here the unit name is in all lower case. The components of the unit
+    --      name are separated by periods. The names themselves are in encoded
+    --      form, as documented in Namet.
+ 
     --  ------------------------
     --  -- I Interrupt States --
     --  ------------------------
*************** package Lib.Writ is
*** 349,359 ****
     --      One of these lines is present for each unit that is mentioned in
     --      an explicit with clause by the current unit. The first parameter
     --      is the unit name in internal format. The second parameter is the
!    --      file name of the file that must be compiled to compile this unit
!    --      (which is usually the file for the body, except for packages
!    --      which have no body). The third parameter is the file name of the
!    --      library information file that contains the results of compiling
!    --      this unit. The optional modifiers are used as follows:
     --
     --        E   pragma Elaborate applies to this unit
     --
--- 471,483 ----
     --      One of these lines is present for each unit that is mentioned in
     --      an explicit with clause by the current unit. The first parameter
     --      is the unit name in internal format. The second parameter is the
!    --      file name of the file that must be compiled to compile this unit.
!    --      It is usually the file for the body, except for packages
!    --      which have no body; for units that need a body, if the source file
!    --      for the body cannot be found, the file name of the spec is used
!    --      instead. The third parameter is the file name of the library
!    --      information file that contains the results of compiling this unit.
!    --      The optional modifiers are used as follows:
     --
     --        E   pragma Elaborate applies to this unit
     --
diff -Nrcpad gcc-3.4.3/gcc/ada/lib-xref.adb gcc-4.0.0/gcc/ada/lib-xref.adb
*** gcc-3.4.3/gcc/ada/lib-xref.adb	Mon Jan 12 11:45:24 2004
--- gcc-4.0.0/gcc/ada/lib-xref.adb	Thu Feb 10 13:50:25 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1998-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1998-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Lib.Util; use Lib.Util;
*** 32,38 ****
--- 32,41 ----
  with Namet;    use Namet;
  with Nlists;   use Nlists;
  with Opt;      use Opt;
+ with Restrict; use Restrict;
+ with Rident;   use Rident;
  with Sem_Prag; use Sem_Prag;
+ with Sem_Util; use Sem_Util;
  with Sinfo;    use Sinfo;
  with Sinput;   use Sinput;
  with Snames;   use Snames;
*************** package body Lib.Xref is
*** 198,206 ****
--- 201,278 ----
        Def  : Source_Ptr;
        Ent  : Entity_Id;
  
+       function Is_On_LHS (Node : Node_Id) return Boolean;
+       --  Used to check if a node is on the left hand side of an
+       --  assignment. The following cases are handled:
+       --
+       --   Variable  Node is a direct descendant of an assignment
+       --             statement.
+       --
+       --   Prefix    Of an indexed or selected component that is
+       --             present in a subtree rooted by an assignment
+       --             statement. There is no restriction of nesting
+       --             of components, thus cases such as A.B(C).D are
+       --             handled properly.
+ 
+       ---------------
+       -- Is_On_LHS --
+       ---------------
+ 
+       --  Couldn't we use Is_Lvalue or whatever it is called ???
+ 
+       function Is_On_LHS (Node : Node_Id) return Boolean is
+          N : Node_Id := Node;
+ 
+       begin
+          --  Only identifiers are considered, is this necessary???
+ 
+          if Nkind (N) /= N_Identifier then
+             return False;
+          end if;
+ 
+          --  Reach the assignment statement subtree root. In the
+          --  case of a variable being a direct descendant of an
+          --  assignment statement, the loop is skiped.
+ 
+          while Nkind (Parent (N)) /= N_Assignment_Statement loop
+ 
+             --  Check whether the parent is a component and the
+             --  current node is its prefix.
+ 
+             if (Nkind (Parent (N)) = N_Selected_Component
+                   or else
+                 Nkind (Parent (N)) = N_Indexed_Component)
+               and then Prefix (Parent (N)) = N
+             then
+                N := Parent (N);
+             else
+                return False;
+             end if;
+          end loop;
+ 
+          --  Parent (N) is an assignment statement, check whether
+          --  N is its name.
+ 
+          return Name (Parent (N)) = N;
+       end Is_On_LHS;
+ 
+    --  Start of processing for Generate_Reference
+ 
     begin
        pragma Assert (Nkind (E) in N_Entity);
  
+       --  Check for obsolescent reference to ASCII
+ 
+       if E = Standard_ASCII then
+          Check_Restriction (No_Obsolescent_Features, N);
+       end if;
+ 
+       --  Warn if reference to Ada 2005 entity not in Ada 2005 mode
+ 
+       if Is_Ada_2005 (E) and then Ada_Version < Ada_05 then
+          Error_Msg_NE ("& is only defined in Ada 2005?", N, E);
+       end if;
+ 
        --  Never collect references if not in main source unit. However,
        --  we omit this test if Typ is 'e' or 'k', since these entries are
        --  really structural, and it is useful to have them in units
*************** package body Lib.Xref is
*** 243,253 ****
           --  For a variable that appears on the left side of an
           --  assignment statement, we set the Referenced_As_LHS
           --  flag since this is indeed a left hand side.
  
           if Ekind (E) = E_Variable
!            and then Nkind (Parent (N)) = N_Assignment_Statement
!            and then Name (Parent (N)) = N
!            and then No (Renamed_Object (E))
           then
              Set_Referenced_As_LHS (E);
  
--- 315,325 ----
           --  For a variable that appears on the left side of an
           --  assignment statement, we set the Referenced_As_LHS
           --  flag since this is indeed a left hand side.
+          --  We also set the Referenced_As_LHS flag of a prefix
+          --  of selected or indexed component.
  
           if Ekind (E) = E_Variable
!            and then Is_On_LHS (N)
           then
              Set_Referenced_As_LHS (E);
  
*************** package body Lib.Xref is
*** 269,284 ****
           then
              null;
  
           --  Any other occurrence counts as referencing the entity
  
           else
              Set_Referenced (E);
           end if;
  
!          --  Check for pragma Unreferenced given
! 
!          if Has_Pragma_Unreferenced (E) then
  
              --  A reference as a named parameter in a call does not count
              --  as a violation of pragma Unreferenced for this purpose.
  
--- 341,379 ----
           then
              null;
  
+          --  Constant completion does not count as a reference
+ 
+          elsif Typ = 'c'
+            and then Ekind (E) = E_Constant
+          then
+             null;
+ 
+          --  Record representation clause does not count as a reference
+ 
+          elsif Nkind (N) = N_Identifier
+            and then Nkind (Parent (N)) = N_Record_Representation_Clause
+          then
+             null;
+ 
+          --  Discriminants do not need to produce a reference to record type
+ 
+          elsif Typ = 'd'
+            and then Nkind (Parent (N)) = N_Discriminant_Specification
+          then
+             null;
+ 
           --  Any other occurrence counts as referencing the entity
  
           else
              Set_Referenced (E);
           end if;
  
!          --  Check for pragma Unreferenced given and reference is within
!          --  this source unit (occasion for possible warning to be issued)
  
+          if Has_Pragma_Unreferenced (E)
+            and then In_Same_Extended_Unit (E, N)
+          then
              --  A reference as a named parameter in a call does not count
              --  as a violation of pragma Unreferenced for this purpose.
  
*************** package body Lib.Xref is
*** 297,302 ****
--- 392,421 ----
              then
                 null;
  
+             --  For entry formals, we want to place the warning on the
+             --  corresponding entity in the accept statement. The current
+             --  scope is the body of the accept, so we find the formal
+             --  whose name matches that of the entry formal (there is no
+             --  link between the two entities, and the one in the accept
+             --  statement is only used for conformance checking).
+ 
+             elsif Ekind (Scope (E)) = E_Entry then
+                declare
+                   BE : Entity_Id;
+ 
+                begin
+                   BE := First_Entity (Current_Scope);
+                   while Present (BE) loop
+                      if Chars (BE) = Chars (E) then
+                         Error_Msg_NE
+                           ("?pragma Unreferenced given for&", N, BE);
+                         exit;
+                      end if;
+ 
+                      Next_Entity (BE);
+                   end loop;
+                end;
+ 
              --  Here we issue the warning, since this is a real reference
  
              else
*************** package body Lib.Xref is
*** 1145,1160 ****
  
                    --  Special handling for access parameter
  
!                   if Ekind (Etype (XE.Ent)) = E_Anonymous_Access_Type
!                     and then Is_Formal (XE.Ent)
!                   then
!                      Ctyp := 'p';
  
!                   --  Special handling for Boolean
  
!                   elsif Ctyp = 'e' and then Is_Boolean_Type (Ent) then
!                      Ctyp := 'b';
!                   end if;
                 end if;
  
                 --  Special handling for abstract types and operations.
--- 1264,1288 ----
  
                    --  Special handling for access parameter
  
!                   declare
!                      K : constant Entity_Kind := Ekind (Etype (XE.Ent));
  
!                   begin
!                      if (K = E_Anonymous_Access_Type
!                            or else
!                          K = E_Anonymous_Access_Subprogram_Type
!                             or else K =
!                          E_Anonymous_Access_Protected_Subprogram_Type)
!                        and then Is_Formal (XE.Ent)
!                      then
!                         Ctyp := 'p';
  
!                         --  Special handling for Boolean
! 
!                      elsif Ctyp = 'e' and then Is_Boolean_Type (Ent) then
!                         Ctyp := 'b';
!                      end if;
!                   end;
                 end if;
  
                 --  Special handling for abstract types and operations.
diff -Nrcpad gcc-3.4.3/gcc/ada/lib-xref.ads gcc-4.0.0/gcc/ada/lib-xref.ads
*** gcc-3.4.3/gcc/ada/lib-xref.ads	Tue Oct 21 13:42:09 2003
--- gcc-4.0.0/gcc/ada/lib-xref.ads	Wed Apr 21 10:10:31 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1998-2003, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1998-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Lib.Xref is
*** 395,400 ****
--- 395,402 ----
  
        E_Access_Subprogram_Type           => 'P',
        E_Access_Protected_Subprogram_Type => 'P',
+       E_Anonymous_Access_Subprogram_Type => ' ',
+       E_Anonymous_Access_Protected_Subprogram_Type => ' ',
        E_Anonymous_Access_Type            => ' ',
        E_Array_Type                       => 'A',
        E_Array_Subtype                    => 'A',
diff -Nrcpad gcc-3.4.3/gcc/ada/lib.adb gcc-4.0.0/gcc/ada/lib.adb
*** gcc-3.4.3/gcc/ada/lib.adb	Mon Nov 24 14:27:57 2003
--- gcc-4.0.0/gcc/ada/lib.adb	Fri Jun 25 16:39:28 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Uname;   use Uname;
*** 50,55 ****
--- 50,58 ----
  
  package body Lib is
  
+    Switch_Storing_Enabled : Boolean := True;
+    --  Set to False by Disable_Switch_Storing
+ 
     -----------------------
     -- Local Subprograms --
     -----------------------
*************** package body Lib is
*** 83,93 ****
        return Units.Table (U).Dependency_Num;
     end Dependency_Num;
  
-    function Dependent_Unit (U : Unit_Number_Type) return Boolean is
-    begin
-       return Units.Table (U).Dependent_Unit;
-    end Dependent_Unit;
- 
     function Dynamic_Elab (U : Unit_Number_Type) return Boolean is
     begin
        return Units.Table (U).Dynamic_Elab;
--- 86,91 ----
*************** package body Lib is
*** 133,138 ****
--- 131,141 ----
        return Units.Table (U).Main_Priority;
     end Main_Priority;
  
+    function Munit_Index (U : Unit_Number_Type) return Nat is
+    begin
+       return Units.Table (U).Munit_Index;
+    end Munit_Index;
+ 
     function Source_Index (U : Unit_Number_Type) return Source_File_Index is
     begin
        return Units.Table (U).Source_Index;
*************** package body Lib is
*** 403,408 ****
--- 406,416 ----
        return Compilation_Switches.Last;
     end Compilation_Switches_Last;
  
+    procedure Disable_Switch_Storing is
+    begin
+       Switch_Storing_Enabled := False;
+    end Disable_Switch_Storing;
+ 
     ------------------------------
     -- Earlier_In_Extended_Unit --
     ------------------------------
*************** package body Lib is
*** 596,602 ****
        end if;
  
        --  If S was No_Location, or was not in the table, we must be in the
!       --  main source unit (and the value is not got put into the table yet)
  
        return Main_Unit;
     end Get_Source_Unit;
--- 604,610 ----
        end if;
  
        --  If S was No_Location, or was not in the table, we must be in the
!       --  main source unit (and the value has not got put into the table yet)
  
        return Main_Unit;
     end Get_Source_Unit;
*************** package body Lib is
*** 640,646 ****
  
        else
           return
!            In_Same_Extended_Unit (Sloc (N), Sloc (Cunit (Main_Unit)));
        end if;
     end In_Extended_Main_Code_Unit;
  
--- 648,654 ----
  
        else
           return
!            In_Same_Extended_Unit (N, Cunit (Main_Unit));
        end if;
     end In_Extended_Main_Code_Unit;
  
*************** package body Lib is
*** 765,770 ****
--- 773,785 ----
     -- In_Same_Extended_Unit --
     ---------------------------
  
+    function In_Same_Extended_Unit
+      (N1, N2 : Node_Or_Entity_Id) return Boolean
+    is
+    begin
+       return Check_Same_Extended_Unit (Sloc (N1), Sloc (N2)) /= No;
+    end In_Same_Extended_Unit;
+ 
     function In_Same_Extended_Unit (S1, S2 : Source_Ptr) return Boolean is
     begin
        return Check_Same_Extended_Unit (S1, S2) /= No;
*************** package body Lib is
*** 798,804 ****
  
     function Increment_Serial_Number return Nat is
        TSN : Int renames Units.Table (Current_Sem_Unit).Serial_Number;
- 
     begin
        TSN := TSN + 1;
        return TSN;
--- 813,818 ----
*************** package body Lib is
*** 915,932 ****
  
     procedure Store_Compilation_Switch (Switch : String) is
     begin
!       Compilation_Switches.Increment_Last;
!       Compilation_Switches.Table (Compilation_Switches.Last) :=
!         new String'(Switch);
  
!       --  Fix up --RTS flag which has been transformed by the gcc driver
!       --  into -fRTS
  
!       if Switch'Last >= Switch'First + 4
!         and then Switch (Switch'First .. Switch'First + 4) = "-fRTS"
!       then
!          Compilation_Switches.Table
!            (Compilation_Switches.Last) (Switch'First + 1) := '-';
        end if;
     end Store_Compilation_Switch;
  
--- 929,948 ----
  
     procedure Store_Compilation_Switch (Switch : String) is
     begin
!       if Switch_Storing_Enabled then
!          Compilation_Switches.Increment_Last;
!          Compilation_Switches.Table (Compilation_Switches.Last) :=
!            new String'(Switch);
  
!          --  Fix up --RTS flag which has been transformed by the gcc driver
!          --  into -fRTS
  
!          if Switch'Last >= Switch'First + 4
!            and then Switch (Switch'First .. Switch'First + 4) = "-fRTS"
!          then
!             Compilation_Switches.Table
!               (Compilation_Switches.Last) (Switch'First + 1) := '-';
!          end if;
        end if;
     end Store_Compilation_Switch;
  
*************** package body Lib is
*** 941,946 ****
--- 957,972 ----
          (Option => S, Unit => Current_Sem_Unit);
     end Store_Linker_Option_String;
  
+    -------------------------------
+    -- Synchronize_Serial_Number --
+    -------------------------------
+ 
+    procedure Synchronize_Serial_Number is
+       TSN : Int renames Units.Table (Current_Sem_Unit).Serial_Number;
+    begin
+       TSN := TSN + 1;
+    end Synchronize_Serial_Number;
+ 
     ---------------
     -- Tree_Read --
     ---------------
diff -Nrcpad gcc-3.4.3/gcc/ada/lib.ads gcc-4.0.0/gcc/ada/lib.ads
*** gcc-3.4.3/gcc/ada/lib.ads	Mon Dec  8 10:33:15 2003
--- gcc-4.0.0/gcc/ada/lib.ads	Mon Jan  3 15:43:23 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Lib is
*** 262,267 ****
--- 262,271 ----
     --      Set when the entry is created by a call to Lib.Load and then cannot
     --      be changed.
  
+    --    Munit_Index
+    --      The index of the unit within the file for multiple unit per file
+    --      mode. Set to zero in normal single unit per file mode.
+ 
     --    Error_Location
     --      This is copied from the Sloc field of the Enode argument passed
     --      to Load_Unit. It refers to the enclosing construct which caused
*************** package Lib is
*** 357,370 ****
     --      then called to reflect the contributions of any unit on which this
     --      unit is semantically dependent.
  
-    --    Dependent_Unit
-    --      This is a Boolean flag, which is set True to indicate that this
-    --      entry is for a semantically dependent unit. This flag is nearly
-    --      always set True, the only exception is for a unit that is loaded
-    --      by an Rtsfind request in High_Integrity_Mode, where the entity that
-    --      is obtained by Rtsfind.RTE is for an inlined subprogram or other
-    --      entity for which a dependency need not be created.
- 
     --  The units table is reset to empty at the start of the compilation of
     --  each main unit by Lib.Initialize. Entries are then added by calls to
     --  the Lib.Load procedure. The following subprograms are used to access
--- 361,366 ----
*************** package Lib is
*** 377,383 ****
  
     function Cunit            (U : Unit_Number_Type) return Node_Id;
     function Cunit_Entity     (U : Unit_Number_Type) return Entity_Id;
-    function Dependent_Unit   (U : Unit_Number_Type) return Boolean;
     function Dependency_Num   (U : Unit_Number_Type) return Nat;
     function Dynamic_Elab     (U : Unit_Number_Type) return Boolean;
     function Error_Location   (U : Unit_Number_Type) return Source_Ptr;
--- 373,378 ----
*************** package Lib is
*** 388,393 ****
--- 383,389 ----
     function Has_RACW         (U : Unit_Number_Type) return Boolean;
     function Loading          (U : Unit_Number_Type) return Boolean;
     function Main_Priority    (U : Unit_Number_Type) return Int;
+    function Munit_Index      (U : Unit_Number_Type) return Nat;
     function Source_Index     (U : Unit_Number_Type) return Source_File_Index;
     function Unit_File_Name   (U : Unit_Number_Type) return File_Name_Type;
     function Unit_Name        (U : Unit_Number_Type) return Unit_Name_Type;
*************** package Lib is
*** 453,467 ****
     --  same value for each argument.
  
     function In_Same_Code_Unit (N1, N2 : Node_Or_Entity_Id) return Boolean;
!    pragma Inline (In_Same_Source_Unit);
     --  Determines if the two nodes or entities N1 and N2 are in the same
     --  code unit, the criterion being that Get_Code_Unit yields the same
     --  value for each argument.
  
     function In_Same_Extended_Unit (S1, S2 : Source_Ptr) return Boolean;
     --  Determines if the two source locations S1 and S2 are in the same
     --  extended unit, where an extended unit is defined as a unit and all
!    --  its subunits (considered recursively, i.e. subunits or subunits are
     --  included). Returns true if S1 and S2 are in the same extended unit
     --  and False otherwise.
  
--- 449,472 ----
     --  same value for each argument.
  
     function In_Same_Code_Unit (N1, N2 : Node_Or_Entity_Id) return Boolean;
!    pragma Inline (In_Same_Code_Unit);
     --  Determines if the two nodes or entities N1 and N2 are in the same
     --  code unit, the criterion being that Get_Code_Unit yields the same
     --  value for each argument.
  
+    function In_Same_Extended_Unit (N1, N2 : Node_Or_Entity_Id) return Boolean;
+    pragma Inline (In_Same_Extended_Unit);
+    --  Determines if two nodes or entities N1 and N2 are in the same
+    --  extended unit, where an extended unit is defined as a unit and all
+    --  its subunits (considered recursively, i.e. subunits of subunits are
+    --  included). Returns true if S1 and S2 are in the same extended unit
+    --  and False otherwise.
+ 
     function In_Same_Extended_Unit (S1, S2 : Source_Ptr) return Boolean;
+    pragma Inline (In_Same_Extended_Unit);
     --  Determines if the two source locations S1 and S2 are in the same
     --  extended unit, where an extended unit is defined as a unit and all
!    --  its subunits (considered recursively, i.e. subunits of subunits are
     --  included). Returns true if S1 and S2 are in the same extended unit
     --  and False otherwise.
  
*************** package Lib is
*** 522,529 ****
     --  Increment Serial_Number field for current unit, and return the
     --  incremented value.
  
     procedure Replace_Linker_Option_String
!      (S : String_Id; Match_String : String);
     --  Replace an existing Linker_Option if the prefix Match_String
     --  matches, otherwise call Store_Linker_Option_String.
  
--- 527,544 ----
     --  Increment Serial_Number field for current unit, and return the
     --  incremented value.
  
+    procedure Synchronize_Serial_Number;
+    --  This function increments the Serial_Number field for the current
+    --  unit but does not return the incremented value. This is used when
+    --  there is a situation where one path of control increments a serial
+    --  number (using Increment_Serial_Number), and the other path does not
+    --  and it is important to keep the serial numbers synchronized in the
+    --  two cases (e.g. when the references in a package and a client must
+    --  be kept consistent).
+ 
     procedure Replace_Linker_Option_String
!      (S            : String_Id;
!       Match_String : String);
     --  Replace an existing Linker_Option if the prefix Match_String
     --  matches, otherwise call Store_Linker_Option_String.
  
*************** package Lib is
*** 531,536 ****
--- 546,556 ----
     --  Called to register a compilation switch, either front-end or
     --  back-end, which may influence the generated output file(s).
  
+    procedure Disable_Switch_Storing;
+    --  Disable the registration of compilation switches with
+    --  Store_Compilation_Switch. This is used to not register switches added
+    --  automatically by the gcc driver.
+ 
     procedure Store_Linker_Option_String (S : String_Id);
     --  This procedure is called to register the string from a pragma
     --  Linker_Option. The argument is the Id of the string to register.
*************** package Lib is
*** 541,551 ****
     procedure Lock;
     --  Lock internal tables before calling back end
  
-    procedure Tree_Write;
-    --  Writes out internal tables to current tree file using Tree_Write
- 
     procedure Tree_Read;
!    --  Initializes internal tables from current tree file using Tree_Read
  
     function Is_Loaded (Uname : Unit_Name_Type) return Boolean;
     --  Determines if unit with given name is already loaded, i.e. there is
--- 561,573 ----
     procedure Lock;
     --  Lock internal tables before calling back end
  
     procedure Tree_Read;
!    --  Initializes internal tables from current tree file using the relevant
!    --  Table.Tree_Read routines.
! 
!    procedure Tree_Write;
!    --  Writes out internal tables to current tree file using the relevant
!    --  Table.Tree_Write routines.
  
     function Is_Loaded (Uname : Unit_Name_Type) return Boolean;
     --  Determines if unit with given name is already loaded, i.e. there is
*************** private
*** 607,619 ****
     pragma Inline (Cunit);
     pragma Inline (Cunit_Entity);
     pragma Inline (Dependency_Num);
-    pragma Inline (Dependent_Unit);
     pragma Inline (Fatal_Error);
     pragma Inline (Generate_Code);
     pragma Inline (Has_RACW);
     pragma Inline (Increment_Serial_Number);
     pragma Inline (Loading);
     pragma Inline (Main_Priority);
     pragma Inline (Set_Cunit);
     pragma Inline (Set_Cunit_Entity);
     pragma Inline (Set_Fatal_Error);
--- 629,641 ----
     pragma Inline (Cunit);
     pragma Inline (Cunit_Entity);
     pragma Inline (Dependency_Num);
     pragma Inline (Fatal_Error);
     pragma Inline (Generate_Code);
     pragma Inline (Has_RACW);
     pragma Inline (Increment_Serial_Number);
     pragma Inline (Loading);
     pragma Inline (Main_Priority);
+    pragma Inline (Munit_Index);
     pragma Inline (Set_Cunit);
     pragma Inline (Set_Cunit_Entity);
     pragma Inline (Set_Fatal_Error);
*************** private
*** 629,640 ****
     type Unit_Record is record
        Unit_File_Name   : File_Name_Type;
        Unit_Name        : Unit_Name_Type;
        Expected_Unit    : Unit_Name_Type;
        Source_Index     : Source_File_Index;
        Cunit            : Node_Id;
        Cunit_Entity     : Entity_Id;
        Dependency_Num   : Int;
-       Dependent_Unit   : Boolean;
        Fatal_Error      : Boolean;
        Generate_Code    : Boolean;
        Has_RACW         : Boolean;
--- 651,662 ----
     type Unit_Record is record
        Unit_File_Name   : File_Name_Type;
        Unit_Name        : Unit_Name_Type;
+       Munit_Index      : Nat;
        Expected_Unit    : Unit_Name_Type;
        Source_Index     : Source_File_Index;
        Cunit            : Node_Id;
        Cunit_Entity     : Entity_Id;
        Dependency_Num   : Int;
        Fatal_Error      : Boolean;
        Generate_Code    : Boolean;
        Has_RACW         : Boolean;
diff -Nrcpad gcc-3.4.3/gcc/ada/link.c gcc-4.0.0/gcc/ada/link.c
*** gcc-3.4.3/gcc/ada/link.c	Mon Jan 12 11:45:24 2004
--- gcc-4.0.0/gcc/ada/link.c	Wed Oct 27 12:28:43 2004
***************
*** 30,39 ****
   *                                                                          *
   ****************************************************************************/
  
! /*  This file contains parameterizations used by gnatlink.adb in handling   */
! /*  very long linker lines in systems where there are limitations on the    */
! /*  argument length when the command line is used to pass items to the      */
! /*  linker                                                                  */
  
  #include <string.h>
  
--- 30,38 ----
   *                                                                          *
   ****************************************************************************/
  
! /*  This file contains host-specific parameters describing the behaviour    */
! /*  of the linker. It is used by gnatlink as well as all tools that use     */
! /*  Mlib.                                                                   */
  
  #include <string.h>
  
***************
*** 83,195 ****
  #define STATIC 'T'
  
  #if defined (__osf__)
! const char *object_file_option = "-Wl,-input,";
! const char *run_path_option = "-Wl,-rpath,";
! int link_max = 10000;
! unsigned char objlist_file_supported = 1;
! char shared_libgnat_default = STATIC;
! unsigned char using_gnu_linker = 0;
! const char *object_library_extension = ".a";
  
  #elif defined (sgi)
! const char *object_file_option = "-Wl,-objectlist,";
! const char *run_path_option = "-Wl,-rpath,";
! int link_max = 5000;
! unsigned char objlist_file_supported = 1;
! char shared_libgnat_default = STATIC;
! unsigned char using_gnu_linker = 0;
! const char *object_library_extension = ".a";
  
  #elif defined (__WIN32)
! const char *object_file_option = "";
! const char *run_path_option = "";
! int link_max = 30000;
! unsigned char objlist_file_supported = 1;
! char shared_libgnat_default = STATIC;
! unsigned char using_gnu_linker = 1;
! const char *object_library_extension = ".a";
  
  #elif defined (__INTERIX)
! const char *object_file_option = "";
! const char *run_path_option = "";
! int link_max = 5000;
! unsigned char objlist_file_supported = 1;
! char shared_libgnat_default = STATIC;
! unsigned char using_gnu_linker = 1;
! const char *object_library_extension = ".a";
  
! #elif defined (hpux)
! const char *object_file_option = "-Wl,-c,";
! const char *run_path_option = "-Wl,+b,";
! int link_max = 5000;
! unsigned char objlist_file_supported = 1;
! char shared_libgnat_default = STATIC;
! unsigned char using_gnu_linker = 0;
! const char *object_library_extension = ".a";
  
  #elif defined (_AIX)
! const char *object_file_option = "-Wl,-f,";
! const char *run_path_option = "";
! int link_max = 15000;
! const unsigned char objlist_file_supported = 1;
! char shared_libgnat_default = STATIC;
! unsigned char using_gnu_linker = 0;
! const char *object_library_extension = ".a";
  
  #elif defined (VMS)
! const char *object_file_option = "";
! const char *run_path_option = "";
! char shared_libgnat_default = STATIC;
! int link_max = 2147483647;
! unsigned char objlist_file_supported = 0;
! unsigned char using_gnu_linker = 0;
! const char *object_library_extension = ".olb";
  
  #elif defined (sun)
! const char *object_file_option = "";
! const char *run_path_option = "-R";
! char shared_libgnat_default = STATIC;
! int link_max = 2147483647;
! unsigned char objlist_file_supported = 0;
! unsigned char using_gnu_linker = 0;
! const char *object_library_extension = ".a";
  
  #elif defined (__FreeBSD__)
! char *object_file_option = "";
! char *run_path_option = "";
! char shared_libgnat_default = STATIC;
! int link_max = 2147483647;
! unsigned char objlist_file_supported = 0;
! unsigned char using_gnu_linker = 0;
! char *object_library_extension = ".a";
  
  #elif defined (linux)
! const char *object_file_option = "";
! const char *run_path_option = "-Wl,-rpath,";
! char shared_libgnat_default = STATIC;
! int link_max = 8192;
! unsigned char objlist_file_supported = 1;
! unsigned char using_gnu_linker = 1;
! const char *object_library_extension = ".a";
  
  #elif defined (__svr4__) && defined (i386)
! const char *object_file_option = "";
! const char *run_path_option = "";
! char shared_libgnat_default = STATIC;
! int link_max = 2147483647;
! unsigned char objlist_file_supported = 0;
! unsigned char using_gnu_linker = 0;
! const char *object_library_extension = ".a";
  
  #else
  
  /*  These are the default settings for all other systems. No response file
      is supported, the shared library default is STATIC.  */
! const char *run_path_option = "";
! const char *object_file_option = "";
! char shared_libgnat_default = STATIC;
! int link_max = 2147483647;
! unsigned char objlist_file_supported = 0;
! unsigned char using_gnu_linker = 0;
! const char *object_library_extension = ".a";
  #endif
--- 82,194 ----
  #define STATIC 'T'
  
  #if defined (__osf__)
! const char *__gnat_object_file_option = "-Wl,-input,";
! const char *__gnat_run_path_option = "-Wl,-rpath,";
! int __gnat_link_max = 10000;
! unsigned char __gnat_objlist_file_supported = 1;
! char __gnat_shared_libgnat_default = STATIC;
! unsigned char __gnat_using_gnu_linker = 0;
! const char *__gnat_object_library_extension = ".a";
  
  #elif defined (sgi)
! const char *__gnat_object_file_option = "-Wl,-objectlist,";
! const char *__gnat_run_path_option = "-Wl,-rpath,";
! int __gnat_link_max = 5000;
! unsigned char __gnat_objlist_file_supported = 1;
! char __gnat_shared_libgnat_default = STATIC;
! unsigned char __gnat_using_gnu_linker = 0;
! const char *__gnat_object_library_extension = ".a";
  
  #elif defined (__WIN32)
! const char *__gnat_object_file_option = "";
! const char *__gnat_run_path_option = "";
! int __gnat_link_max = 30000;
! unsigned char __gnat_objlist_file_supported = 1;
! char __gnat_shared_libgnat_default = STATIC;
! unsigned char __gnat_using_gnu_linker = 1;
! const char *__gnat_object_library_extension = ".a";
  
  #elif defined (__INTERIX)
! const char *__gnat_object_file_option = "";
! const char *__gnat_run_path_option = "";
! int __gnat_link_max = 5000;
! unsigned char __gnat_objlist_file_supported = 1;
! char __gnat_shared_libgnat_default = STATIC;
! unsigned char __gnat_using_gnu_linker = 1;
! const char *__gnat_object_library_extension = ".a";
  
! #elif defined (__hpux__)
! const char *__gnat_object_file_option = "-Wl,-c,";
! const char *__gnat_run_path_option = "-Wl,+b,";
! int __gnat_link_max = 5000;
! unsigned char __gnat_objlist_file_supported = 1;
! char __gnat_shared_libgnat_default = STATIC;
! unsigned char __gnat_using_gnu_linker = 0;
! const char *__gnat_object_library_extension = ".a";
  
  #elif defined (_AIX)
! const char *__gnat_object_file_option = "-Wl,-f,";
! const char *__gnat_run_path_option = "";
! int __gnat_link_max = 15000;
! const unsigned char __gnat_objlist_file_supported = 1;
! char __gnat_shared_libgnat_default = STATIC;
! unsigned char __gnat_using_gnu_linker = 0;
! const char *__gnat_object_library_extension = ".a";
  
  #elif defined (VMS)
! const char *__gnat_object_file_option = "";
! const char *__gnat_run_path_option = "";
! char __gnat_shared_libgnat_default = STATIC;
! int __gnat_link_max = 2147483647;
! unsigned char __gnat_objlist_file_supported = 0;
! unsigned char __gnat_using_gnu_linker = 0;
! const char *__gnat_object_library_extension = ".olb";
  
  #elif defined (sun)
! const char *__gnat_object_file_option = "";
! const char *__gnat_run_path_option = "-Wl,-R";
! char __gnat_shared_libgnat_default = STATIC;
! int __gnat_link_max = 2147483647;
! unsigned char __gnat_objlist_file_supported = 0;
! unsigned char __gnat_using_gnu_linker = 0;
! const char *__gnat_object_library_extension = ".a";
  
  #elif defined (__FreeBSD__)
! char *__gnat_object_file_option = "";
! char *__gnat_run_path_option = "-Wl,-rpath,";
! char __gnat_shared_libgnat_default = STATIC;
! int __gnat_link_max = 8192;
! unsigned char __gnat_objlist_file_supported = 1;
! unsigned char __gnat_using_gnu_linker = 1;
! char *__gnat_object_library_extension = ".a";
  
  #elif defined (linux)
! const char *__gnat_object_file_option = "";
! const char *__gnat_run_path_option = "-Wl,-rpath,";
! char __gnat_shared_libgnat_default = STATIC;
! int __gnat_link_max = 8192;
! unsigned char __gnat_objlist_file_supported = 1;
! unsigned char __gnat_using_gnu_linker = 1;
! const char *__gnat_object_library_extension = ".a";
  
  #elif defined (__svr4__) && defined (i386)
! const char *__gnat_object_file_option = "";
! const char *__gnat_run_path_option = "";
! char __gnat_shared_libgnat_default = STATIC;
! int __gnat_link_max = 2147483647;
! unsigned char __gnat_objlist_file_supported = 0;
! unsigned char __gnat_using_gnu_linker = 0;
! const char *__gnat_object_library_extension = ".a";
  
  #else
  
  /*  These are the default settings for all other systems. No response file
      is supported, the shared library default is STATIC.  */
! const char *__gnat_run_path_option = "";
! const char *__gnat_object_file_option = "";
! char __gnat_shared_libgnat_default = STATIC;
! int __gnat_link_max = 2147483647;
! unsigned char __gnat_objlist_file_supported = 0;
! unsigned char __gnat_using_gnu_linker = 0;
! const char *__gnat_object_library_extension = ".a";
  #endif
diff -Nrcpad gcc-3.4.3/gcc/ada/make.adb gcc-4.0.0/gcc/ada/make.adb
*** gcc-3.4.3/gcc/ada/make.adb	Tue Jan 13 11:51:33 2004
--- gcc-4.0.0/gcc/ada/make.adb	Thu Feb 10 13:54:58 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Fname.UF; use Fname.UF;
*** 35,40 ****
--- 35,41 ----
  with Gnatvsn;  use Gnatvsn;
  with Hostparm; use Hostparm;
  with Makeusg;
+ with Makeutl;  use Makeutl;
  with MLib.Prj;
  with MLib.Tgt; use MLib.Tgt;
  with MLib.Utl;
*************** with Namet;    use Namet;
*** 42,53 ****
  with Opt;      use Opt;
  with Osint.M;  use Osint.M;
  with Osint;    use Osint;
- with Gnatvsn;
  with Output;   use Output;
  with Prj;      use Prj;
  with Prj.Com;
  with Prj.Env;
- with Prj.Ext;
  with Prj.Pars;
  with Prj.Util;
  with SFN_Scan;
--- 43,52 ----
*************** package body Make is
*** 120,140 ****
     --  reinitialized, the elements between Q.First and Q.Last - 1 are unmarked.
  
     procedure Init_Q;
!    --  Must be called to (re)initialize the Q.
  
     procedure Insert_Q
       (Source_File : File_Name_Type;
!       Source_Unit : Unit_Name_Type := No_Name);
!    --  Inserts Source_File at the end of Q. Provide Source_Unit when
!    --  possible for external use (gnatdist).
  
     function Empty_Q return Boolean;
!    --  Returns True if Q is empty.
  
     procedure Extract_From_Q
!      (Source_File : out File_Name_Type;
!       Source_Unit : out Unit_Name_Type);
!    --  Extracts the first element from the Q.
  
     procedure Insert_Project_Sources
       (The_Project  : Project_Id;
--- 119,141 ----
     --  reinitialized, the elements between Q.First and Q.Last - 1 are unmarked.
  
     procedure Init_Q;
!    --  Must be called to (re)initialize the Q
  
     procedure Insert_Q
       (Source_File : File_Name_Type;
!       Source_Unit : Unit_Name_Type := No_Name;
!       Index       : Int            := 0);
!    --  Inserts Source_File at the end of Q. Provide Source_Unit when possible
!    --  for external use (gnatdist). Provide index for multi-unit sources.
  
     function Empty_Q return Boolean;
!    --  Returns True if Q is empty
  
     procedure Extract_From_Q
!      (Source_File  : out File_Name_Type;
!       Source_Unit  : out Unit_Name_Type;
!       Source_Index : out Int);
!    --  Extracts the first element from the Q
  
     procedure Insert_Project_Sources
       (The_Project  : Project_Id;
*************** package body Make is
*** 149,158 ****
     --  from projects being extended.
  
     First_Q_Initialization : Boolean := True;
!    --  Will be set to false after Init_Q has been called once.
  
     Q_Front : Natural;
!    --  Points to the first valid element in the Q.
  
     Unique_Compile : Boolean := False;
     --  Set to True if -u or -U or a project file with no main is used
--- 150,159 ----
     --  from projects being extended.
  
     First_Q_Initialization : Boolean := True;
!    --  Will be set to false after Init_Q has been called once
  
     Q_Front : Natural;
!    --  Points to the first valid element in the Q
  
     Unique_Compile : Boolean := False;
     --  Set to True if -u or -U or a project file with no main is used
*************** package body Make is
*** 164,175 ****
     --  Used to detect multiple --RTS= switches
  
     type Q_Record is record
!       File : File_Name_Type;
!       Unit : Unit_Name_Type;
     end record;
     --  File is the name of the file to compile. Unit is for gnatdist
     --  use in order to easily get the unit name of a file to compile
!    --  when its name is krunched or declared in gnat.adc.
  
     package Q is new Table.Table (
       Table_Component_Type => Q_Record,
--- 165,178 ----
     --  Used to detect multiple --RTS= switches
  
     type Q_Record is record
!       File  : File_Name_Type;
!       Unit  : Unit_Name_Type;
!       Index : Int;
     end record;
     --  File is the name of the file to compile. Unit is for gnatdist
     --  use in order to easily get the unit name of a file to compile
!    --  when its name is krunched or declared in gnat.adc. Index, when not 0,
!    --  is the index of the unit in a multi-unit source.
  
     package Q is new Table.Table (
       Table_Component_Type => Q_Record,
*************** package body Make is
*** 178,209 ****
       Table_Initial        => 4000,
       Table_Increment      => 100,
       Table_Name           => "Make.Q");
!    --  This is the actual Q.
! 
! 
!    --  Package Mains is used to store the mains specified on the command line
!    --  and to retrieve them when a project file is used, to verify that the
!    --  files exist and that they belong to a project file.
! 
!    package Mains is
! 
!       --  Mains are stored in a table. An index is used to retrieve the mains
!       --  from the table.
! 
!       procedure Add_Main (Name : String);
!       --  Add one main to the table
! 
!       procedure Delete;
!       --  Empty the table
! 
!       procedure Reset;
!       --  Reset the index to the beginning of the table
! 
!       function Next_Main return String;
!       --  Increase the index and return the next main.
!       --  If table is exhausted, return an empty string.
! 
!    end Mains;
  
     --  The following instantiations and variables are necessary to save what
     --  is found on the command line, in case there is a project file specified.
--- 181,187 ----
       Table_Initial        => 4000,
       Table_Increment      => 100,
       Table_Name           => "Make.Q");
!    --  This is the actual Q
  
     --  The following instantiations and variables are necessary to save what
     --  is found on the command line, in case there is a project file specified.
*************** package body Make is
*** 272,290 ****
       Table_Increment      => 100,
       Table_Name           => "Make.Library_Projs");
  
-    type Linker_Options_Data is record
-       Project : Project_Id;
-       Options : String_List_Id;
-    end record;
- 
-    package Linker_Opts is new Table.Table (
-      Table_Component_Type => Linker_Options_Data,
-      Table_Index_Type     => Integer,
-      Table_Low_Bound      => 1,
-      Table_Initial        => 10,
-      Table_Increment      => 100,
-      Table_Name           => "Make.Linker_Opts");
- 
     --  Two variables to keep the last binder and linker switch index
     --  in tables Binder_Switches and Linker_Switches, before adding
     --  switches from the project file (if any) and switches from the
--- 250,255 ----
*************** package body Make is
*** 318,324 ****
     --  Avoid calling Change_Dir if the current working directory is already
     --  this directory
  
!    --  Packages of project files where unknown attributes are errors.
  
     Naming_String   : aliased String := "naming";
     Builder_String  : aliased String := "builder";
--- 283,289 ----
     --  Avoid calling Change_Dir if the current working directory is already
     --  this directory
  
!    --  Packages of project files where unknown attributes are errors
  
     Naming_String   : aliased String := "naming";
     Builder_String  : aliased String := "builder";
*************** package body Make is
*** 372,378 ****
       Table_Initial        => 20,
       Table_Increment      => 100,
       Table_Name           => "Make.Bad_Compilation");
!    --  Full name of all the source files for which compilation fails.
  
     Do_Compile_Step : Boolean := True;
     Do_Bind_Step    : Boolean := True;
--- 337,343 ----
       Table_Initial        => 20,
       Table_Increment      => 100,
       Table_Name           => "Make.Bad_Compilation");
!    --  Full name of all the source files for which compilation fails
  
     Do_Compile_Step : Boolean := True;
     Do_Bind_Step    : Boolean := True;
*************** package body Make is
*** 381,398 ****
     --  Can be set to False with the switches -c, -b and -l.
     --  These flags are reset to True for each invokation of procedure Gnatmake.
  
!    Shared_String : aliased String := "-shared";
  
!    No_Shared_Switch  : aliased Argument_List := (1 .. 0 => null);
!    Shared_Switch     : aliased Argument_List := (1 => Shared_String'Access);
!    Bind_Shared       : Argument_List_Access := No_Shared_Switch'Access;
     --  Switch to added in front of gnatbind switches. By default no switch is
     --  added. Switch "-shared" is added if there is a non-static Library
     --  Project File.
  
-    Bind_Shared_Known : Boolean := False;
-    --  Set to True after the first time Bind_Shared is computed
- 
     Shared_Libgcc : aliased String := "-shared-libgcc";
  
     No_Shared_Libgcc_Switch : aliased Argument_List := (1 .. 0 => null);
--- 346,361 ----
     --  Can be set to False with the switches -c, -b and -l.
     --  These flags are reset to True for each invokation of procedure Gnatmake.
  
!    Shared_String           : aliased String := "-shared";
!    Force_Elab_Flags_String : aliased String := "-F";
  
!    No_Shared_Switch : aliased Argument_List := (1 .. 0 => null);
!    Shared_Switch    : aliased Argument_List := (1 => Shared_String'Access);
!    Bind_Shared      : Argument_List_Access := No_Shared_Switch'Access;
     --  Switch to added in front of gnatbind switches. By default no switch is
     --  added. Switch "-shared" is added if there is a non-static Library
     --  Project File.
  
     Shared_Libgcc : aliased String := "-shared-libgcc";
  
     No_Shared_Libgcc_Switch : aliased Argument_List := (1 .. 0 => null);
*************** package body Make is
*** 415,421 ****
     --  and is set to True whenever one of the source of the executable is
     --  compiled, or has already been compiled for another executable.
  
!    Max_Header : constant := 200; --  Arbitrary
  
     type Header_Num is range 1 .. Max_Header;
     --  Header_Num for the hash table Obsoleted below
--- 378,386 ----
     --  and is set to True whenever one of the source of the executable is
     --  compiled, or has already been compiled for another executable.
  
!    Max_Header : constant := 200;
!    --  This needs a proper comment, it used to say "arbitrary"
!    --  that's not an adequate comment ???
  
     type Header_Num is range 1 .. Max_Header;
     --  Header_Num for the hash table Obsoleted below
*************** package body Make is
*** 445,451 ****
        This       : Name_Id;
        Depends_On : Name_Id;
     end record;
!    --  Components of table Dependencies below.
  
     package Dependencies is new Table.Table (
       Table_Component_Type => Dependency,
--- 410,416 ----
        This       : Name_Id;
        Depends_On : Name_Id;
     end record;
!    --  Components of table Dependencies below
  
     package Dependencies is new Table.Table (
       Table_Component_Type => Dependency,
*************** package body Make is
*** 494,513 ****
     --  pragmas file to be specified for For_Project,
     --  otherwise return an empty argument list.
  
-    ----------------------
-    -- Marking Routines --
-    ----------------------
- 
-    Marking_Label : Byte := 1;
-    --  Value to mark the source files
- 
-    procedure Mark (Source_File : File_Name_Type);
-    --  Mark Source_File. Marking is used to signal that Source_File has
-    --  already been inserted in the Q.
- 
-    function Is_Marked (Source_File : File_Name_Type) return Boolean;
-    --  Returns True if Source_File was previously marked.
- 
     -------------------
     -- Misc Routines --
     -------------------
--- 459,464 ----
*************** package body Make is
*** 521,530 ****
     --  between the call to Compile_Sources and List_Depend.)
  
     procedure Inform (N : Name_Id := No_Name; Msg : String);
!    --  Prints out the program name followed by a colon, N and S.
  
     procedure List_Bad_Compilations;
!    --  Prints out the list of all files for which the compilation failed.
  
     procedure Verbose_Msg
       (N1     : Name_Id;
--- 472,481 ----
     --  between the call to Compile_Sources and List_Depend.)
  
     procedure Inform (N : Name_Id := No_Name; Msg : String);
!    --  Prints out the program name followed by a colon, N and S
  
     procedure List_Bad_Compilations;
!    --  Prints out the list of all files for which the compilation failed
  
     procedure Verbose_Msg
       (N1     : Name_Id;
*************** package body Make is
*** 533,541 ****
        S2     : String  := "";
        Prefix : String  := "  -> ");
     --  If the verbose flag (Verbose_Mode) is set then print Prefix to standard
!    --  output followed by N1 and S1. If N2 /= No_Name then N2 is then printed
!    --  after S1. S2 is printed last. Both N1 and N2 are printed in quotation
!    --  marks.
  
     Usage_Needed : Boolean := True;
     --  Flag used to make sure Makeusg is call at most once
--- 484,491 ----
        S2     : String  := "";
        Prefix : String  := "  -> ");
     --  If the verbose flag (Verbose_Mode) is set then print Prefix to standard
!    --  output followed by N1 and S1. If N2 /= No_Name then N2 is printed after
!    --  S1. S2 is printed last. Both N1 and N2 are printed in quotation marks.
  
     Usage_Needed : Boolean := True;
     --  Flag used to make sure Makeusg is call at most once
*************** package body Make is
*** 545,558 ****
     --  Set Usage_Needed to False.
  
     procedure Debug_Msg (S : String; N : Name_Id);
!    --  If Debug.Debug_Flag_W is set outputs string S followed by name N.
! 
!    type Project_Array is array (Positive range <>) of Project_Id;
!    No_Projects : constant Project_Array := (1 .. 0 => No_Project);
  
     procedure Recursive_Compute_Depth
       (Project : Project_Id;
-       Visited : Project_Array;
        Depth   : Natural);
     --  Compute depth of Project and of the projects it depends on
  
--- 495,504 ----
     --  Set Usage_Needed to False.
  
     procedure Debug_Msg (S : String; N : Name_Id);
!    --  If Debug.Debug_Flag_W is set outputs string S followed by name N
  
     procedure Recursive_Compute_Depth
       (Project : Project_Id;
        Depth   : Natural);
     --  Compute depth of Project and of the projects it depends on
  
*************** package body Make is
*** 589,604 ****
     --  Check what steps (Compile, Bind, Link) must be executed.
     --  Set the step flags accordingly.
  
-    function Is_External_Assignment (Argv : String) return Boolean;
-    --  Verify that an external assignment switch is syntactically correct.
-    --  Correct forms are
-    --      -Xname=value
-    --      -X"name=other value"
-    --  Assumptions: 'First = 1, Argv (1 .. 2) = "-X"
-    --  When this function returns True, the external assignment has
-    --  been entered by a call to Prj.Ext.Add, so that in a project
-    --  file, External ("name") will return "value".
- 
     function In_Ada_Lib_Dir  (File : File_Name_Type) return Boolean;
     --  Get directory prefix of this file and get lib mark stored in name
     --  table for this directory. Then check if an Ada lib mark has been set.
--- 535,540 ----
*************** package body Make is
*** 619,624 ****
--- 555,561 ----
     function Switches_Of
       (Source_File      : Name_Id;
        Source_File_Name : String;
+       Source_Index     : Int;
        Naming           : Naming_Data;
        In_Package       : Package_Id;
        Allow_ALI        : Boolean) return Variable_Value;
*************** package body Make is
*** 629,644 ****
     --  the extension ".ali". If there is no switches for either names, try the
     --  default switches for Ada. If all failed, return No_Variable_Value.
  
-    procedure Test_If_Relative_Path
-      (Switch             : in out String_Access;
-       Parent             : String_Access;
-       Including_L_Switch : Boolean := True);
-    --  Test if Switch is a relative search path switch.
-    --  If it is, fail if Parent is null, otherwise prepend the path with
-    --  Parent. This subprogram is only called when using project files.
-    --  For gnatbind switches, Including_L_Switch is False, because the
-    --  argument of the -L switch is not a path.
- 
     function Is_In_Object_Directory
       (Source_File   : File_Name_Type;
        Full_Lib_File : File_Name_Type) return Boolean;
--- 566,571 ----
*************** package body Make is
*** 658,664 ****
     Saved_Gcc       : String_Access := null;
     Saved_Gnatbind  : String_Access := null;
     Saved_Gnatlink  : String_Access := null;
!    --  Given by the command line. Will be used, if non null.
  
     Gcc_Path        : String_Access :=
                         GNAT.OS_Lib.Locate_Exec_On_Path (Gcc.all);
--- 585,591 ----
     Saved_Gcc       : String_Access := null;
     Saved_Gnatbind  : String_Access := null;
     Saved_Gnatlink  : String_Access := null;
!    --  Given by the command line. Will be used, if non null
  
     Gcc_Path        : String_Access :=
                         GNAT.OS_Lib.Locate_Exec_On_Path (Gcc.all);
*************** package body Make is
*** 684,690 ****
     --  Set to True when compiling with -gnats
  
     Display_Executed_Programs : Boolean := True;
!    --  Set to True if name of commands should be output on stderr.
  
     Output_File_Name_Seen : Boolean := False;
     --  Set to True after having scanned the file_name for
--- 611,617 ----
     --  Set to True when compiling with -gnats
  
     Display_Executed_Programs : Boolean := True;
!    --  Set to True if name of commands should be output on stderr
  
     Output_File_Name_Seen : Boolean := False;
     --  Set to True after having scanned the file_name for
*************** package body Make is
*** 695,708 ****
     --  switch "-D obj_dir".
  
     Object_Directory_Path : String_Access := null;
!    --  The path name of the object directory, set with switch -D.
  
     type Make_Program_Type is (None, Compiler, Binder, Linker);
  
     Program_Args : Make_Program_Type := None;
     --  Used to indicate if we are scanning gnatmake, gcc, gnatbind, or gnatbind
!    --  options within the gnatmake command line.
!    --  Used in Scan_Make_Arg only, but must be a global variable.
  
     Temporary_Config_File : Boolean := False;
     --  Set to True when there is a temporary config file used for a project
--- 622,635 ----
     --  switch "-D obj_dir".
  
     Object_Directory_Path : String_Access := null;
!    --  The path name of the object directory, set with switch -D
  
     type Make_Program_Type is (None, Compiler, Binder, Linker);
  
     Program_Args : Make_Program_Type := None;
     --  Used to indicate if we are scanning gnatmake, gcc, gnatbind, or gnatbind
!    --  options within the gnatmake command line. Used in Scan_Make_Arg only,
!    --  but must be global since value preserved from one call to another.
  
     Temporary_Config_File : Boolean := False;
     --  Set to True when there is a temporary config file used for a project
*************** package body Make is
*** 711,716 ****
--- 638,644 ----
     procedure Add_Switches
       (The_Package : Package_Id;
        File_Name   : String;
+       Index       : Int;
        Program     : Make_Program_Type);
     procedure Add_Switch
       (S             : String_Access;
*************** package body Make is
*** 731,743 ****
     --  added at the beginning of the command line.
  
     procedure Check
!      (Source_File : File_Name_Type;
!       The_Args    : Argument_List;
!       Lib_File    : File_Name_Type;
!       Read_Only   : Boolean;
!       ALI         : out ALI_Id;
!       O_File      : out File_Name_Type;
!       O_Stamp     : out Time_Stamp_Type);
     --  Determines whether the library file Lib_File is up-to-date or not. The
     --  full name (with path information) of the object file corresponding to
     --  Lib_File is returned in O_File. Its time stamp is saved in O_Stamp.
--- 659,672 ----
     --  added at the beginning of the command line.
  
     procedure Check
!      (Source_File  : File_Name_Type;
!       Source_Index : Int;
!       The_Args     : Argument_List;
!       Lib_File     : File_Name_Type;
!       Read_Only    : Boolean;
!       ALI          : out ALI_Id;
!       O_File       : out File_Name_Type;
!       O_Stamp      : out Time_Stamp_Type);
     --  Determines whether the library file Lib_File is up-to-date or not. The
     --  full name (with path information) of the object file corresponding to
     --  Lib_File is returned in O_File. Its time stamp is saved in O_Stamp.
*************** package body Make is
*** 758,765 ****
     --  Otherwise O_File is No_File.
  
     procedure Collect_Arguments
!      (Source_File : File_Name_Type;
!       Args        : Argument_List);
     --  Collect all arguments for a source to be compiled, including those
     --  that come from a project file.
  
--- 687,695 ----
     --  Otherwise O_File is No_File.
  
     procedure Collect_Arguments
!      (Source_File  : File_Name_Type;
!       Source_Index : Int;
!       Args         : Argument_List);
     --  Collect all arguments for a source to be compiled, including those
     --  that come from a project file.
  
*************** package body Make is
*** 829,837 ****
        else
           while Last_Argument + Args'Length > Arguments'Last loop
              declare
!                New_Arguments : Argument_List_Access :=
!                  new Argument_List (1 .. Arguments'Last * 2);
! 
              begin
                 New_Arguments (1 .. Last_Argument) :=
                   Arguments (1 .. Last_Argument);
--- 759,766 ----
        else
           while Last_Argument + Args'Length > Arguments'Last loop
              declare
!                New_Arguments : constant Argument_List_Access :=
!                                  new Argument_List (1 .. Arguments'Last * 2);
              begin
                 New_Arguments (1 .. Last_Argument) :=
                   Arguments (1 .. Last_Argument);
*************** package body Make is
*** 862,868 ****
     begin
        Add_Lib_Search_Dir (N);
  
!       if Opt.Verbose_Mode then
           Write_Str ("Adding object directory """);
           Write_Str (N);
           Write_Str (""".");
--- 791,797 ----
     begin
        Add_Lib_Search_Dir (N);
  
!       if Verbose_Mode then
           Write_Str ("Adding object directory """);
           Write_Str (N);
           Write_Str (""".");
*************** package body Make is
*** 878,884 ****
     begin
        Add_Src_Search_Dir (N);
  
!       if Opt.Verbose_Mode then
           Write_Str ("Adding source directory """);
           Write_Str (N);
           Write_Str (""".");
--- 807,813 ----
     begin
        Add_Src_Search_Dir (N);
  
!       if Verbose_Mode then
           Write_Str ("Adding source directory """);
           Write_Str (N);
           Write_Str (""".");
*************** package body Make is
*** 998,1008 ****
     procedure Add_Switches
       (The_Package : Package_Id;
        File_Name   : String;
        Program     : Make_Program_Type)
     is
!       Switches      : Variable_Value;
!       Switch_List   : String_List_Id;
!       Element       : String_Element;
  
     begin
        if File_Name'Length > 0 then
--- 927,938 ----
     procedure Add_Switches
       (The_Package : Package_Id;
        File_Name   : String;
+       Index       : Int;
        Program     : Make_Program_Type)
     is
!       Switches    : Variable_Value;
!       Switch_List : String_List_Id;
!       Element     : String_Element;
  
     begin
        if File_Name'Length > 0 then
*************** package body Make is
*** 1012,1017 ****
--- 942,948 ----
             Switches_Of
             (Source_File      => Name_Find,
              Source_File_Name => File_Name,
+             Source_Index     => Index,
              Naming           => Projects.Table (Main_Project).Naming,
              In_Package       => The_Package,
              Allow_ALI        =>
*************** package body Make is
*** 1037,1043 ****
                          --  modified.
  
                       begin
!                         if Opt.Verbose_Mode then
                             Write_Str ("   Adding ");
                             Write_Line (Argv);
                          end if;
--- 968,974 ----
                          --  modified.
  
                       begin
!                         if Verbose_Mode then
                             Write_Str ("   Adding ");
                             Write_Line (Argv);
                          end if;
*************** package body Make is
*** 1059,1065 ****
                       --  We need a copy, because Name_Buffer may be modified
  
                    begin
!                      if Opt.Verbose_Mode then
                          Write_Str ("   Adding ");
                          Write_Line (Argv);
                       end if;
--- 990,996 ----
                       --  We need a copy, because Name_Buffer may be modified
  
                    begin
!                      if Verbose_Mode then
                          Write_Str ("   Adding ");
                          Write_Line (Argv);
                       end if;
*************** package body Make is
*** 1160,1172 ****
     -----------
  
     procedure Check
!      (Source_File : File_Name_Type;
!       The_Args    : Argument_List;
!       Lib_File    : File_Name_Type;
!       Read_Only   : Boolean;
!       ALI         : out ALI_Id;
!       O_File      : out File_Name_Type;
!       O_Stamp     : out Time_Stamp_Type)
     is
        function First_New_Spec (A : ALI_Id) return File_Name_Type;
        --  Looks in the with table entries of A and returns the spec file name
--- 1091,1104 ----
     -----------
  
     procedure Check
!      (Source_File  : File_Name_Type;
!       Source_Index : Int;
!       The_Args     : Argument_List;
!       Lib_File     : File_Name_Type;
!       Read_Only    : Boolean;
!       ALI          : out ALI_Id;
!       O_File       : out File_Name_Type;
!       O_Stamp      : out Time_Stamp_Type)
     is
        function First_New_Spec (A : ALI_Id) return File_Name_Type;
        --  Looks in the with table entries of A and returns the spec file name
*************** package body Make is
*** 1275,1287 ****
        --  Full name of current library file
  
        Full_Obj_File : File_Name_Type;
!       --  Full name of the object file corresponding to Lib_File.
  
        Lib_Stamp : Time_Stamp_Type;
!       --  Time stamp of the current ada library file.
  
        Obj_Stamp : Time_Stamp_Type;
!       --  Time stamp of the current object file.
  
        Modified_Source : File_Name_Type;
        --  The first source in Lib_File whose current time stamp differs
--- 1207,1219 ----
        --  Full name of current library file
  
        Full_Obj_File : File_Name_Type;
!       --  Full name of the object file corresponding to Lib_File
  
        Lib_Stamp : Time_Stamp_Type;
!       --  Time stamp of the current ada library file
  
        Obj_Stamp : Time_Stamp_Type;
!       --  Time stamp of the current object file
  
        Modified_Source : File_Name_Type;
        --  The first source in Lib_File whose current time stamp differs
*************** package body Make is
*** 1317,1327 ****
        if Read_Only then
           declare
              Saved_Check_Object_Consistency : constant Boolean :=
!                                                Opt.Check_Object_Consistency;
           begin
!             Opt.Check_Object_Consistency := False;
              Text := Read_Library_Info (Lib_File);
!             Opt.Check_Object_Consistency := Saved_Check_Object_Consistency;
           end;
  
        else
--- 1249,1259 ----
        if Read_Only then
           declare
              Saved_Check_Object_Consistency : constant Boolean :=
!                                                Check_Object_Consistency;
           begin
!             Check_Object_Consistency := False;
              Text := Read_Library_Info (Lib_File);
!             Check_Object_Consistency := Saved_Check_Object_Consistency;
           end;
  
        else
*************** package body Make is
*** 1384,1390 ****
           --  Don't take Ali file into account if it was generated without
           --  object.
  
!          if Opt.Operating_Mode /= Opt.Check_Semantics
             and then ALIs.Table (ALI).No_Object
           then
              Verbose_Msg (Full_Lib_File, "has no corresponding object");
--- 1316,1322 ----
           --  Don't take Ali file into account if it was generated without
           --  object.
  
!          if Operating_Mode /= Check_Semantics
             and then ALIs.Table (ALI).No_Object
           then
              Verbose_Msg (Full_Lib_File, "has no corresponding object");
*************** package body Make is
*** 1394,1404 ****
  
           --  Check for matching compiler switches if needed
  
!          if Opt.Check_Switches then
  
              --  First, collect all the switches
  
!             Collect_Arguments (Source_File, The_Args);
  
              Prev_Switch := Dummy_Switch;
  
--- 1326,1336 ----
  
           --  Check for matching compiler switches if needed
  
!          if Check_Switches then
  
              --  First, collect all the switches
  
!             Collect_Arguments (Source_File, Source_Index, The_Args);
  
              Prev_Switch := Dummy_Switch;
  
*************** package body Make is
*** 1465,1471 ****
                 end loop;
  
                 if not Switch_Found then
!                   if Opt.Verbose_Mode then
                       Verbose_Msg (ALIs.Table (ALI).Sfile,
                                    "switch mismatch """ &
                                    Switches_To_Check.Table (J).all & '"');
--- 1397,1403 ----
                 end loop;
  
                 if not Switch_Found then
!                   if Verbose_Mode then
                       Verbose_Msg (ALIs.Table (ALI).Sfile,
                                    "switch mismatch """ &
                                    Switches_To_Check.Table (J).all & '"');
*************** package body Make is
*** 1480,1486 ****
                Integer (Units.Table (ALIs.Table (ALI).First_Unit).Last_Arg -
                         Units.Table (ALIs.Table (ALI).First_Unit).First_Arg + 1)
              then
!                if Opt.Verbose_Mode then
                    Verbose_Msg (ALIs.Table (ALI).Sfile,
                                 "different number of switches");
  
--- 1412,1418 ----
                Integer (Units.Table (ALIs.Table (ALI).First_Unit).Last_Arg -
                         Units.Table (ALIs.Table (ALI).First_Unit).First_Arg + 1)
              then
!                if Verbose_Mode then
                    Verbose_Msg (ALIs.Table (ALI).Sfile,
                                 "different number of switches");
  
*************** package body Make is
*** 1516,1522 ****
           if Modified_Source /= No_File then
              ALI := No_ALI_Id;
  
!             if Opt.Verbose_Mode then
                 Source_Name := Full_Source_Name (Modified_Source);
  
                 if Source_Name /= No_File then
--- 1448,1454 ----
           if Modified_Source /= No_File then
              ALI := No_ALI_Id;
  
!             if Verbose_Mode then
                 Source_Name := Full_Source_Name (Modified_Source);
  
                 if Source_Name /= No_File then
*************** package body Make is
*** 1532,1538 ****
              if New_Spec /= No_File then
                 ALI := No_ALI_Id;
  
!                if Opt.Verbose_Mode then
                    Source_Name := Full_Source_Name (New_Spec);
  
                    if Source_Name /= No_File then
--- 1464,1470 ----
              if New_Spec /= No_File then
                 ALI := No_ALI_Id;
  
!                if Verbose_Mode then
                    Source_Name := Full_Source_Name (New_Spec);
  
                    if Source_Name /= No_File then
*************** package body Make is
*** 1706,1718 ****
        O_File  := No_File;
        O_Stamp := (others => ' ');
  
!       --  Process linker options from the ALI files.
  
        for Opt in 1 .. Linker_Options.Last loop
           Check_File (Linker_Options.Table (Opt).Name);
        end loop;
  
!       --  Process options given on the command line.
  
        for Opt in Linker_Switches.First .. Linker_Switches.Last loop
  
--- 1638,1650 ----
        O_File  := No_File;
        O_Stamp := (others => ' ');
  
!       --  Process linker options from the ALI files
  
        for Opt in 1 .. Linker_Options.Last loop
           Check_File (Linker_Options.Table (Opt).Name);
        end loop;
  
!       --  Process options given on the command line
  
        for Opt in Linker_Switches.First .. Linker_Switches.Last loop
  
*************** package body Make is
*** 1761,1768 ****
     -----------------------
  
     procedure Collect_Arguments
!      (Source_File : File_Name_Type;
!       Args        : Argument_List)
     is
     begin
        Arguments_Collected := True;
--- 1693,1701 ----
     -----------------------
  
     procedure Collect_Arguments
!      (Source_File  : File_Name_Type;
!       Source_Index : Int;
!       Args         : Argument_List)
     is
     begin
        Arguments_Collected := True;
*************** package body Make is
*** 1785,1794 ****
                 Project          => Arguments_Project,
                 Path             => Arguments_Path_Name);
  
!             --  If the source is not a source of a project file,
!             --  we simply add the saved gcc switches.
  
              if Arguments_Project = No_Project then
  
                 Add_Arguments (The_Saved_Gcc_Switches.all);
  
--- 1718,1734 ----
                 Project          => Arguments_Project,
                 Path             => Arguments_Path_Name);
  
!             --  If the source is not a source of a project file, check if
!             --  this is allowed.
  
              if Arguments_Project = No_Project then
+                if not External_Unit_Compilation_Allowed then
+                   Make_Failed ("external source (", Source_File_Name,
+                                ") is not part of any project; cannot be " &
+                                "compiled without gnatmake switch -x");
+                end if;
+ 
+                --  If it is allowed, simply add the saved gcc switches
  
                 Add_Arguments (The_Saved_Gcc_Switches.all);
  
*************** package body Make is
*** 1843,1848 ****
--- 1783,1789 ----
                    Switches := Switches_Of
                      (Source_File      => Source_File,
                       Source_File_Name => Source_File_Name,
+                      Source_Index     => Source_Index,
                       Naming           => Data.Naming,
                       In_Package       => Compiler_Package,
                       Allow_ALI        => False);
*************** package body Make is
*** 1941,1946 ****
--- 1882,1888 ----
        Most_Recent_Obj_Stamp : out Time_Stamp_Type;
        Main_Unit             : out Boolean;
        Compilation_Failures  : out Natural;
+       Main_Index            : Int      := 0;
        Check_Readonly_Files  : Boolean  := False;
        Do_Not_Execute        : Boolean  := False;
        Force_Compilations    : Boolean  := False;
*************** package body Make is
*** 1949,1963 ****
        Initialize_ALI_Data   : Boolean  := True;
        Max_Process           : Positive := 1)
     is
-       function Compile
-         (S    : Name_Id;
-          L    : Name_Id;
-          Args : Argument_List) return Process_Id;
-       --  Compiles S using Args. If S is a GNAT predefined source
-       --  "-gnatpg" is added to Args. Non blocking call. L corresponds to the
-       --  expected library file name. Process_Id of the process spawned to
-       --  execute the compile.
- 
        No_Mapping_File : constant Natural := 0;
  
        type Compilation_Data is record
--- 1891,1896 ----
*************** package body Make is
*** 1972,1978 ****
        end record;
  
        Running_Compile : array (1 .. Max_Process) of Compilation_Data;
!       --  Used to save information about outstanding compilations.
  
        Outstanding_Compiles : Natural := 0;
        --  Current number of outstanding compiles
--- 1905,1911 ----
        end record;
  
        Running_Compile : array (1 .. Max_Process) of Compilation_Data;
!       --  Used to save information about outstanding compilations
  
        Outstanding_Compiles : Natural := 0;
        --  Current number of outstanding compiles
*************** package body Make is
*** 1993,2002 ****
        --  Full name of the current library file
  
        Obj_File : File_Name_Type;
!       --  Full name of the object file corresponding to Lib_File.
  
        Obj_Stamp : Time_Stamp_Type;
!       --  Time stamp of the current object file.
  
        Sfile : File_Name_Type;
        --  Contains the source file of the units withed by Source_File
--- 1926,1935 ----
        --  Full name of the current library file
  
        Obj_File : File_Name_Type;
!       --  Full name of the object file corresponding to Lib_File
  
        Obj_Stamp : Time_Stamp_Type;
!       --  Time stamp of the current object file
  
        Sfile : File_Name_Type;
        --  Contains the source file of the units withed by Source_File
*************** package body Make is
*** 2004,2009 ****
--- 1937,1944 ----
        ALI : ALI_Id;
        --  ALI Id of the current ALI file
  
+       --  Comment following declarations ???
+ 
        Read_Only : Boolean := False;
  
        Compilation_OK  : Boolean;
*************** package body Make is
*** 2015,2024 ****
        Mfile : Natural := No_Mapping_File;
  
        Need_To_Check_Standard_Library : Boolean :=
!         Check_Readonly_Files and not Unique_Compile;
  
        Mapping_File_Arg : String_Access;
  
        procedure Add_Process
          (Pid    : Process_Id;
           Sfile  : File_Name_Type;
--- 1950,1962 ----
        Mfile : Natural := No_Mapping_File;
  
        Need_To_Check_Standard_Library : Boolean :=
!                                          Check_Readonly_Files
!                                            and not Unique_Compile;
  
        Mapping_File_Arg : String_Access;
  
+       Process_Created : Boolean := False;
+ 
        procedure Add_Process
          (Pid    : Process_Id;
           Sfile  : File_Name_Type;
*************** package body Make is
*** 2046,2054 ****
        --  resp. No_File, No_File and No_Name  if there were no compilations
        --  to wait for.
  
!       procedure Collect_Arguments_And_Compile (Source_File : File_Name_Type);
        --  Collect arguments from project file (if any) and compile
  
        package Good_ALI is new Table.Table (
          Table_Component_Type => ALI_Id,
          Table_Index_Type     => Natural,
--- 1984,2009 ----
        --  resp. No_File, No_File and No_Name  if there were no compilations
        --  to wait for.
  
!       function Bad_Compilation_Count return Natural;
!       --  Returns the number of compilation failures
! 
!       procedure Check_Standard_Library;
!       --  Check if s-stalib.adb needs to be compiled
! 
!       procedure Collect_Arguments_And_Compile
!         (Source_File : File_Name_Type; Source_Index : Int);
        --  Collect arguments from project file (if any) and compile
  
+       function Compile
+         (S            : Name_Id;
+          L            : Name_Id;
+          Source_Index : Int;
+          Args         : Argument_List) return Process_Id;
+       --  Compiles S using Args. If S is a GNAT predefined source
+       --  "-gnatpg" is added to Args. Non blocking call. L corresponds to the
+       --  expected library file name. Process_Id of the process spawned to
+       --  execute the compile.
+ 
        package Good_ALI is new Table.Table (
          Table_Component_Type => ALI_Id,
          Table_Index_Type     => Natural,
*************** package body Make is
*** 2056,2071 ****
          Table_Initial        => 50,
          Table_Increment      => 100,
          Table_Name           => "Make.Good_ALI");
!       --  Contains the set of valid ALI files that have not yet been scanned.
! 
!       procedure Record_Good_ALI (A : ALI_Id);
!       --  Records in the previous set the Id of an ALI file.
  
        function Good_ALI_Present return Boolean;
!       --  Returns True if any ALI file was recorded in the previous set.
  
        function Get_Next_Good_ALI return ALI_Id;
!       --  Returns the next good ALI_Id record;
  
        procedure Record_Failure
          (File  : File_Name_Type;
--- 2011,2027 ----
          Table_Initial        => 50,
          Table_Increment      => 100,
          Table_Name           => "Make.Good_ALI");
!       --  Contains the set of valid ALI files that have not yet been scanned
  
        function Good_ALI_Present return Boolean;
!       --  Returns True if any ALI file was recorded in the previous set
! 
!       procedure Get_Mapping_File (Project : Project_Id);
!       --  Get a mapping file name. If there is one to be reused, reuse it.
!       --  Otherwise, create a new mapping file.
  
        function Get_Next_Good_ALI return ALI_Id;
!       --  Returns the next good ALI_Id record
  
        procedure Record_Failure
          (File  : File_Name_Type;
*************** package body Make is
*** 2075,2086 ****
        --  If Found is False then the compilation of File failed because we
        --  could not find it. Records also Unit when possible.
  
!       function Bad_Compilation_Count return Natural;
!       --  Returns the number of compilation failures.
! 
!       procedure Get_Mapping_File (Project : Project_Id);
!       --  Get a mapping file name. If there is one to be reused, reuse it.
!       --  Otherwise, create a new mapping file.
  
        -----------------
        -- Add_Process --
--- 2031,2038 ----
        --  If Found is False then the compilation of File failed because we
        --  could not find it. Records also Unit when possible.
  
!       procedure Record_Good_ALI (A : ALI_Id);
!       --  Records in the previous set the Id of an ALI file
  
        -----------------
        -- Add_Process --
*************** package body Make is
*** 2198,2215 ****
           return Bad_Compilation.Last - Bad_Compilation.First + 1;
        end Bad_Compilation_Count;
  
        -----------------------------------
        -- Collect_Arguments_And_Compile --
        -----------------------------------
  
!       procedure Collect_Arguments_And_Compile (Source_File : File_Name_Type) is
        begin
  
!          --  If arguments have not yet been collected (in Check), collect them
!          --  now.
  
           if not Arguments_Collected then
!             Collect_Arguments (Source_File, Args);
           end if;
  
           --  If we use mapping file (-P or -C switches), then get one
--- 2150,2214 ----
           return Bad_Compilation.Last - Bad_Compilation.First + 1;
        end Bad_Compilation_Count;
  
+       ----------------------------
+       -- Check_Standard_Library --
+       ----------------------------
+ 
+       procedure Check_Standard_Library is
+       begin
+          Need_To_Check_Standard_Library := False;
+ 
+          if not Targparm.Suppress_Standard_Library_On_Target then
+             declare
+                Sfile  : Name_Id;
+                Add_It : Boolean := True;
+ 
+             begin
+                Name_Len := Standard_Library_Package_Body_Name'Length;
+                Name_Buffer (1 .. Name_Len) :=
+                  Standard_Library_Package_Body_Name;
+                Sfile := Name_Enter;
+ 
+                --  If we have a special runtime, we add the standard
+                --  library only if we can find it.
+ 
+                if RTS_Switch then
+                   Add_It :=
+                     Find_File (Sfile, Osint.Source) /= No_File;
+                end if;
+ 
+                if Add_It then
+                   if Is_Marked (Sfile) then
+                      if Is_In_Obsoleted (Sfile) then
+                         Executable_Obsolete := True;
+                      end if;
+ 
+                   else
+                      Insert_Q (Sfile, Index => 0);
+                      Mark (Sfile, Index => 0);
+                   end if;
+                end if;
+             end;
+          end if;
+       end Check_Standard_Library;
+ 
        -----------------------------------
        -- Collect_Arguments_And_Compile --
        -----------------------------------
  
!       procedure Collect_Arguments_And_Compile
!         (Source_File : File_Name_Type; Source_Index : Int)
!       is
        begin
+          --  Process_Created will be set True if an attempt is made to compile
+          --  the source, that is if it is not in an externally built project.
  
!          Process_Created := False;
! 
!          --  If arguments not yet collected (in Check), collect them now
  
           if not Arguments_Collected then
!             Collect_Arguments (Source_File, Source_Index, Args);
           end if;
  
           --  If we use mapping file (-P or -C switches), then get one
*************** package body Make is
*** 2222,2276 ****
           --  check for an eventual library project, and use the full path.
  
           if Arguments_Project /= No_Project then
!             Prj.Env.Set_Ada_Paths (Arguments_Project, True);
  
!             if MLib.Tgt.Support_For_Libraries /= MLib.Tgt.None then
!                declare
!                   The_Data : Project_Data :=
!                     Projects.Table (Arguments_Project);
!                   Prj      : Project_Id   := Arguments_Project;
  
!                begin
!                   while The_Data.Extended_By /= No_Project loop
!                      Prj := The_Data.Extended_By;
!                      The_Data := Projects.Table (Prj);
!                   end loop;
  
!                   if The_Data.Library and then not The_Data.Flag1 then
!                      --  Add to the Q all sources of the project that
!                      --  have not been marked
  
!                      Insert_Project_Sources
!                        (The_Project  => Prj,
!                         All_Projects => False,
!                         Into_Q       => True);
  
!                      --  Now mark the project as processed
  
!                      Projects.Table (Prj).Flag1 := True;
!                   end if;
!                end;
!             end if;
  
!             --  Change to the object directory of the project file,
!             --  if necessary.
  
!             Change_To_Object_Directory (Arguments_Project);
  
!             Pid := Compile (Arguments_Path_Name, Lib_File,
!                             Arguments (1 .. Last_Argument));
  
           else
!             --  If this is a source outside of any project file, make sure
!             --  it will be compiled in the object directory of the main project
!             --  file.
  
              if Main_Project /= No_Project then
                 Change_To_Object_Directory (Arguments_Project);
              end if;
  
!             Pid := Compile (Full_Source_File, Lib_File,
                              Arguments (1 .. Last_Argument));
           end if;
        end Collect_Arguments_And_Compile;
  
--- 2221,2283 ----
           --  check for an eventual library project, and use the full path.
  
           if Arguments_Project /= No_Project then
!             if not Projects.Table (Arguments_Project).Externally_Built then
!                Prj.Env.Set_Ada_Paths (Arguments_Project, True);
  
!                if not Unique_Compile
!                  and then MLib.Tgt.Support_For_Libraries /= MLib.Tgt.None
!                then
!                   declare
!                      The_Data : Project_Data :=
!                                   Projects.Table (Arguments_Project);
  
!                      Prj : Project_Id := Arguments_Project;
  
!                   begin
!                      while The_Data.Extended_By /= No_Project loop
!                         Prj := The_Data.Extended_By;
!                         The_Data := Projects.Table (Prj);
!                      end loop;
  
!                      if The_Data.Library
!                        and then not The_Data.Need_To_Build_Lib
!                      then
!                         --  Add to the Q all sources of the project that
!                         --  have not been marked
  
!                         Insert_Project_Sources
!                           (The_Project  => Prj,
!                            All_Projects => False,
!                            Into_Q       => True);
  
!                         --  Now mark the project as processed
  
!                         Projects.Table (Prj).Need_To_Build_Lib := True;
!                      end if;
!                   end;
!                end if;
  
!                --  Change to the object directory of the project file,
!                --  if necessary.
  
!                Change_To_Object_Directory (Arguments_Project);
! 
!                Pid := Compile (Arguments_Path_Name, Lib_File, Source_Index,
!                                Arguments (1 .. Last_Argument));
!                Process_Created := True;
!             end if;
  
           else
!             --  If this is a source outside of any project file, make sure it
!             --  will be compiled in object directory of the main project file.
  
              if Main_Project /= No_Project then
                 Change_To_Object_Directory (Arguments_Project);
              end if;
  
!             Pid := Compile (Full_Source_File, Lib_File, Source_Index,
                              Arguments (1 .. Last_Argument));
+             Process_Created := True;
           end if;
        end Collect_Arguments_And_Compile;
  
*************** package body Make is
*** 2279,2289 ****
        -------------
  
        function Compile
!         (S    : Name_Id;
!          L    : Name_Id;
!          Args : Argument_List) return Process_Id
        is
!          Comp_Args : Argument_List (Args'First .. Args'Last + 8);
           Comp_Next : Integer := Args'First;
           Comp_Last : Integer;
  
--- 2286,2297 ----
        -------------
  
        function Compile
!         (S            : Name_Id;
!          L            : Name_Id;
!          Source_Index : Int;
!          Args         : Argument_List) return Process_Id
        is
!          Comp_Args : Argument_List (Args'First .. Args'Last + 9);
           Comp_Next : Integer := Args'First;
           Comp_Last : Integer;
  
*************** package body Make is
*** 2393,2401 ****
              Comp_Args (Comp_Last) := Ada_Flag_2;
           end if;
  
!          if L /= Strip_Directory (L) or else Object_Directory_Path /= null then
  
!             --  Build -o argument.
  
              Get_Name_String (L);
  
--- 2401,2421 ----
              Comp_Args (Comp_Last) := Ada_Flag_2;
           end if;
  
!          if Source_Index /= 0 then
!             declare
!                Num : constant String := Source_Index'Img;
!             begin
!                Comp_Last := Comp_Last + 1;
!                Comp_Args (Comp_Last) :=
!                  new String'("-gnateI" & Num (Num'First + 1 .. Num'Last));
!             end;
!          end if;
  
!          if Source_Index /= 0 or else
!            L /= Strip_Directory (L) or else
!            Object_Directory_Path /= null
!          then
!             --  Build -o argument
  
              Get_Name_String (L);
  
*************** package body Make is
*** 2437,2442 ****
--- 2457,2465 ----
  
           GNAT.OS_Lib.Normalize_Arguments (Comp_Args (Args'First .. Comp_Last));
  
+          Comp_Last := Comp_Last + 1;
+          Comp_Args (Comp_Last) := new String'("-gnatez");
+ 
           Display (Gcc.all, Comp_Args (Args'First .. Comp_Last));
  
           if Gcc_Path = null then
*************** package body Make is
*** 2530,2536 ****
     begin
        pragma Assert (Args'First = 1);
  
!       --  Package and Queue initializations.
  
        Good_ALI.Init;
        Output.Set_Standard_Error;
--- 2553,2559 ----
     begin
        pragma Assert (Args'First = 1);
  
!       --  Package and Queue initializations
  
        Good_ALI.Init;
        Output.Set_Standard_Error;
*************** package body Make is
*** 2545,2561 ****
        end if;
  
        --  The following two flags affect the behavior of ALI.Set_Source_Table.
!       --  We set Opt.Check_Source_Files to True to ensure that source file
!       --  time stamps are checked, and we set Opt.All_Sources to False to
        --  avoid checking the presence of the source files listed in the
        --  source dependency section of an ali file (which would be a mistake
        --  since the ali file may be obsolete).
  
!       Opt.Check_Source_Files := True;
!       Opt.All_Sources        := False;
  
!       Insert_Q (Main_Source);
!       Mark (Main_Source);
  
        First_Compiled_File   := No_File;
        Most_Recent_Obj_File  := No_File;
--- 2568,2589 ----
        end if;
  
        --  The following two flags affect the behavior of ALI.Set_Source_Table.
!       --  We set Check_Source_Files to True to ensure that source file
!       --  time stamps are checked, and we set All_Sources to False to
        --  avoid checking the presence of the source files listed in the
        --  source dependency section of an ali file (which would be a mistake
        --  since the ali file may be obsolete).
  
!       Check_Source_Files := True;
!       All_Sources        := False;
  
!       --  Only insert in the Q if it is not already done, to avoid simultaneous
!       --  compilations if -jnnn is used.
! 
!       if not Is_Marked (Main_Source, Main_Index) then
!          Insert_Q (Main_Source, Index => Main_Index);
!          Mark (Main_Source, Main_Index);
!       end if;
  
        First_Compiled_File   := No_File;
        Most_Recent_Obj_File  := No_File;
*************** package body Make is
*** 2588,2744 ****
           --  up all the available processes.
  
           if not Empty_Q and then Outstanding_Compiles < Max_Process then
!             Extract_From_Q (Source_File, Source_Unit);
!             Full_Source_File := Osint.Full_Source_Name (Source_File);
!             Lib_File         := Osint.Lib_File_Name (Source_File);
!             Full_Lib_File    := Osint.Full_Lib_File_Name (Lib_File);
  
!             --  If this source has already been compiled, the executable is
!             --  obsolete.
  
!             if Is_In_Obsoleted (Source_File) then
!                Executable_Obsolete := True;
!             end if;
  
!             --  If the library file is an Ada library skip it
  
!             if Full_Lib_File /= No_File
!               and then In_Ada_Lib_Dir (Full_Lib_File)
!             then
!                Verbose_Msg (Lib_File, "is in an Ada library", Prefix => "  ");
  
!             --  If the library file is a read-only library skip it, but only
!             --  if, when using project files, this library file is in the
!             --  right object directory (a read-only ALI file in the object
!             --  directory of a project being extended should not be skipped).
  
!             elsif Full_Lib_File /= No_File
!               and then not Check_Readonly_Files
!               and then Is_Readonly_Library (Full_Lib_File)
!               and then Is_In_Object_Directory (Source_File, Full_Lib_File)
!             then
!                Verbose_Msg
!                  (Lib_File, "is a read-only library", Prefix => "  ");
  
!             --  The source file that we are checking cannot be located
  
!             elsif Full_Source_File = No_File then
!                Record_Failure (Source_File, Source_Unit, False);
  
!             --  Source and library files can be located but are internal
!             --  files
  
!             elsif not Check_Readonly_Files
!               and then Full_Lib_File /= No_File
!               and then Is_Internal_File_Name (Source_File)
!             then
  
!                if Force_Compilations then
!                   Fail
!                     ("not allowed to compile """ &
!                      Get_Name_String (Source_File) &
!                      """; use -a switch, or compile file with " &
!                      """-gnatg"" switch");
!                end if;
  
!                Verbose_Msg
!                  (Lib_File, "is an internal library", Prefix => "  ");
  
!             --  The source file that we are checking can be located
  
!             else
!                Arguments_Collected := False;
  
!                --  Don't waste any time if we have to recompile anyway
  
!                Obj_Stamp       := Empty_Time_Stamp;
!                Need_To_Compile := Force_Compilations;
  
!                if not Force_Compilations then
!                   Read_Only :=
!                     Full_Lib_File /= No_File
!                     and then not Check_Readonly_Files
!                     and then Is_Readonly_Library (Full_Lib_File);
!                   Check (Source_File, Args, Lib_File, Read_Only,
!                          ALI, Obj_File, Obj_Stamp);
!                   Need_To_Compile := (ALI = No_ALI_Id);
!                end if;
  
!                if not Need_To_Compile then
  
!                   --  The ALI file is up-to-date. Record its Id.
  
!                   Record_Good_ALI (ALI);
  
!                   --  Record the time stamp of the most recent object file
!                   --  as long as no (re)compilations are needed.
  
!                   if First_Compiled_File = No_File
!                     and then (Most_Recent_Obj_File = No_File
!                               or else Obj_Stamp > Most_Recent_Obj_Stamp)
!                   then
!                      Most_Recent_Obj_File  := Obj_File;
!                      Most_Recent_Obj_Stamp := Obj_Stamp;
!                   end if;
  
!                else
!                   --  Is this the first file we have to compile?
  
!                   if First_Compiled_File = No_File then
!                      First_Compiled_File  := Full_Source_File;
!                      Most_Recent_Obj_File := No_File;
  
!                      if Do_Not_Execute then
!                         exit Make_Loop;
                       end if;
-                   end if;
- 
-                   if In_Place_Mode then
  
!                      --  If the library file was not found, then save the
!                      --  library file near the source file.
  
!                      if Full_Lib_File = No_File then
!                         Get_Name_String (Full_Source_File);
  
!                         for J in reverse 1 .. Name_Len loop
!                            if Name_Buffer (J) = '.' then
!                               Name_Buffer (J + 1 .. J + 3) := "ali";
!                               Name_Len := J + 3;
!                               exit;
!                            end if;
!                         end loop;
  
!                         Lib_File := Name_Find;
  
!                      --  If the library file was found, then save the
!                      --  library file in the same place.
  
-                      else
-                         Lib_File := Full_Lib_File;
                       end if;
  
!                   end if;
! 
!                   --  Start the compilation and record it. We can do this
!                   --  because there is at least one free process.
  
!                   Collect_Arguments_And_Compile (Source_File);
  
!                   --  Make sure we could successfully start the compilation
  
!                   if Pid = Invalid_Pid then
!                      Record_Failure (Full_Source_File, Source_Unit);
!                   else
!                      Add_Process
!                        (Pid,
!                         Full_Source_File,
!                         Lib_File,
!                         Source_Unit,
!                         Mfile);
                    end if;
                 end if;
!             end if;
           end if;
  
           --  PHASE 2: Now check if we should wait for a compilation to
--- 2616,2773 ----
           --  up all the available processes.
  
           if not Empty_Q and then Outstanding_Compiles < Max_Process then
!             declare
!                Source_Index : Int;
!                --  Index of the current unit in the current source file
  
!             begin
!                Extract_From_Q (Source_File, Source_Unit, Source_Index);
!                Full_Source_File := Osint.Full_Source_Name (Source_File);
!                Lib_File         := Osint.Lib_File_Name
!                  (Source_File, Source_Index);
!                Full_Lib_File    := Osint.Full_Lib_File_Name (Lib_File);
  
!                --  If this source has already been compiled, the executable is
!                --  obsolete.
  
!                if Is_In_Obsoleted (Source_File) then
!                   Executable_Obsolete := True;
!                end if;
  
!                --  If the library file is an Ada library skip it
  
!                if Full_Lib_File /= No_File
!                  and then In_Ada_Lib_Dir (Full_Lib_File)
!                then
!                   Verbose_Msg
!                     (Lib_File, "is in an Ada library", Prefix => "  ");
  
!                   --  If the library file is a read-only library skip it, but
!                   --  only if, when using project files, this library file is
!                   --  in the right object directory (a read-only ALI file
!                   --  in the object directory of a project being extended
!                   --  should not be skipped).
  
!                elsif Full_Lib_File /= No_File
!                  and then not Check_Readonly_Files
!                  and then Is_Readonly_Library (Full_Lib_File)
!                  and then Is_In_Object_Directory (Source_File, Full_Lib_File)
!                then
!                   Verbose_Msg
!                     (Lib_File, "is a read-only library", Prefix => "  ");
  
!                   --  The source file that we are checking cannot be located
  
!                elsif Full_Source_File = No_File then
!                   Record_Failure (Source_File, Source_Unit, False);
  
!                   --  Source and library files can be located but are internal
!                   --  files
  
!                elsif not Check_Readonly_Files
!                  and then Full_Lib_File /= No_File
!                  and then Is_Internal_File_Name (Source_File)
!                then
!                   if Force_Compilations then
!                      Fail
!                        ("not allowed to compile """ &
!                         Get_Name_String (Source_File) &
!                         """; use -a switch, or compile file with " &
!                         """-gnatg"" switch");
!                   end if;
  
!                   Verbose_Msg
!                     (Lib_File, "is an internal library", Prefix => "  ");
  
!                --  The source file that we are checking can be located
  
!                else
!                   Arguments_Collected := False;
  
!                   --  Don't waste any time if we have to recompile anyway
  
!                   Obj_Stamp       := Empty_Time_Stamp;
!                   Need_To_Compile := Force_Compilations;
  
!                   if not Force_Compilations then
!                      Read_Only :=
!                        Full_Lib_File /= No_File
!                        and then not Check_Readonly_Files
!                        and then Is_Readonly_Library (Full_Lib_File);
!                      Check (Source_File, Source_Index, Args, Lib_File,
!                             Read_Only, ALI, Obj_File, Obj_Stamp);
!                      Need_To_Compile := (ALI = No_ALI_Id);
!                   end if;
  
!                   if not Need_To_Compile then
  
!                      --  The ALI file is up-to-date. Record its Id
  
!                      Record_Good_ALI (ALI);
  
!                      --  Record the time stamp of the most recent object file
!                      --  as long as no (re)compilations are needed.
  
!                      if First_Compiled_File = No_File
!                        and then (Most_Recent_Obj_File = No_File
!                                    or else Obj_Stamp > Most_Recent_Obj_Stamp)
!                      then
!                         Most_Recent_Obj_File  := Obj_File;
!                         Most_Recent_Obj_Stamp := Obj_Stamp;
!                      end if;
  
!                   else
!                      --  Is this the first file we have to compile?
  
!                      if First_Compiled_File = No_File then
!                         First_Compiled_File  := Full_Source_File;
!                         Most_Recent_Obj_File := No_File;
  
!                         if Do_Not_Execute then
!                            exit Make_Loop;
!                         end if;
                       end if;
  
!                      if In_Place_Mode then
  
!                         --  If the library file was not found, then save the
!                         --  library file near the source file.
  
!                         if Full_Lib_File = No_File then
!                            Lib_File := Osint.Lib_File_Name
!                              (Full_Source_File, Source_Index);
  
!                            --  If the library file was found, then save the
!                            --  library file in the same place.
  
!                         else
!                            Lib_File := Full_Lib_File;
!                         end if;
  
                       end if;
  
!                      --  Start the compilation and record it. We can do this
!                      --  because there is at least one free process.
  
!                      Collect_Arguments_And_Compile (Source_File, Source_Index);
  
!                      --  Make sure we could successfully start the compilation
  
!                      if Process_Created then
!                         if Pid = Invalid_Pid then
!                            Record_Failure (Full_Source_File, Source_Unit);
!                         else
!                            Add_Process
!                              (Pid,
!                               Full_Source_File,
!                               Lib_File,
!                               Source_Unit,
!                               Mfile);
!                         end if;
!                      end if;
                    end if;
                 end if;
!             end;
           end if;
  
           --  PHASE 2: Now check if we should wait for a compilation to
*************** package body Make is
*** 2764,2785 ****
  
                 declare
                    Saved_Object_Consistency : constant Boolean :=
!                                                Opt.Check_Object_Consistency;
  
                 begin
                    --  If compilation was not OK, or if output is not an
                    --  object file and we don't do the bind step, don't check
                    --  for object consistency.
  
!                   Opt.Check_Object_Consistency :=
!                     Opt.Check_Object_Consistency
                      and Compilation_OK
                      and (Output_Is_Object or Do_Bind_Step);
                    Text := Read_Library_Info (Lib_File);
  
                    --  Restore Check_Object_Consistency to its initial value
  
!                   Opt.Check_Object_Consistency := Saved_Object_Consistency;
                 end;
  
                 --  If an ALI file was generated by this compilation, scan
--- 2793,2814 ----
  
                 declare
                    Saved_Object_Consistency : constant Boolean :=
!                                                Check_Object_Consistency;
  
                 begin
                    --  If compilation was not OK, or if output is not an
                    --  object file and we don't do the bind step, don't check
                    --  for object consistency.
  
!                   Check_Object_Consistency :=
!                     Check_Object_Consistency
                      and Compilation_OK
                      and (Output_Is_Object or Do_Bind_Step);
                    Text := Read_Library_Info (Lib_File);
  
                    --  Restore Check_Object_Consistency to its initial value
  
!                   Check_Object_Consistency := Saved_Object_Consistency;
                 end;
  
                 --  If an ALI file was generated by this compilation, scan
*************** package body Make is
*** 2808,2814 ****
  
                 --  If we could not read the ALI file that was just generated
                 --  then there could be a problem reading either the ALI or the
!                --  corresponding object file (if Opt.Check_Object_Consistency
                 --  is set Read_Library_Info checks that the time stamp of the
                 --  object file is more recent than that of the ALI). For an
                 --  example of problems caught by this test see [6625-009].
--- 2837,2843 ----
  
                 --  If we could not read the ALI file that was just generated
                 --  then there could be a problem reading either the ALI or the
!                --  corresponding object file (if Check_Object_Consistency
                 --  is set Read_Library_Info checks that the time stamp of the
                 --  object file is more recent than that of the ALI). For an
                 --  example of problems caught by this test see [6625-009].
*************** package body Make is
*** 2835,2933 ****
           while Good_ALI_Present loop
              ALI := Get_Next_Good_ALI;
  
!             --  If we are processing the library file corresponding to the
!             --  main source file check if this source can be a main unit.
! 
!             if ALIs.Table (ALI).Sfile = Main_Source then
!                Main_Unit := ALIs.Table (ALI).Main_Program /= None;
!             end if;
! 
!             --  The following adds the standard library (s-stalib) to the
!             --  list of files to be handled by gnatmake: this file and any
!             --  files it depends on are always included in every bind,
!             --  even if they are not in the explicit dependency list.
!             --  Of course, it is not added if Suppress_Standard_Library
!             --  is True.
! 
!             --  However, to avoid annoying output about s-stalib.ali being
!             --  read only, when "-v" is used, we add the standard library
!             --  only when "-a" is used.
! 
!             if Need_To_Check_Standard_Library then
!                Need_To_Check_Standard_Library := False;
! 
!                if not Targparm.Suppress_Standard_Library_On_Target then
!                   declare
!                      Sfile  : Name_Id;
!                      Add_It : Boolean := True;
  
!                   begin
!                      Name_Len := Standard_Library_Package_Body_Name'Length;
!                      Name_Buffer (1 .. Name_Len) :=
!                        Standard_Library_Package_Body_Name;
!                      Sfile := Name_Enter;
  
!                      --  If we have a special runtime, we add the standard
!                      --  library only if we can find it.
  
!                      if Opt.RTS_Switch then
!                         Add_It := Find_File (Sfile, Osint.Source) /= No_File;
!                      end if;
  
!                      if Add_It then
!                         if Is_Marked (Sfile) then
!                            if Is_In_Obsoleted (Sfile) then
!                               Executable_Obsolete := True;
!                            end if;
  
!                         else
!                            Insert_Q (Sfile);
!                            Mark (Sfile);
!                         end if;
!                      end if;
!                   end;
                 end if;
-             end if;
  
!             --  Now insert in the Q the unmarked source files (i.e. those
!             --  which have never been inserted in the Q and hence never
!             --  considered). Only do that if Unique_Compile is False.
  
!             if not Unique_Compile then
!                for J in
!                  ALIs.Table (ALI).First_Unit .. ALIs.Table (ALI).Last_Unit
!                loop
!                   for K in
!                     Units.Table (J).First_With .. Units.Table (J).Last_With
                    loop
!                      Sfile := Withs.Table (K).Sfile;
!                      Add_Dependency (ALIs.Table (ALI).Sfile, Sfile);
  
!                      if Is_In_Obsoleted (Sfile) then
!                         Executable_Obsolete := True;
!                      end if;
  
!                      if Sfile = No_File then
!                         Debug_Msg ("Skipping generic:", Withs.Table (K).Uname);
  
!                      elsif Is_Marked (Sfile) then
!                         Debug_Msg ("Skipping marked file:", Sfile);
  
!                      elsif not Check_Readonly_Files
!                        and then Is_Internal_File_Name (Sfile)
!                      then
!                         Debug_Msg ("Skipping internal file:", Sfile);
  
!                      else
!                         Insert_Q (Sfile, Withs.Table (K).Uname);
!                         Mark (Sfile);
!                      end if;
                    end loop;
!                end loop;
!             end if;
           end loop;
  
!          if Opt.Display_Compilation_Progress then
              Write_Str ("completed ");
              Write_Int (Int (Q_Front));
              Write_Str (" out of ");
--- 2864,2944 ----
           while Good_ALI_Present loop
              ALI := Get_Next_Good_ALI;
  
!             declare
!                Source_Index : Int := Unit_Index_Of (ALIs.Table (ALI).Afile);
  
!             begin
!                --  If we are processing the library file corresponding to the
!                --  main source file check if this source can be a main unit.
  
!                if ALIs.Table (ALI).Sfile = Main_Source and then
!                  Source_Index = Main_Index
!                then
!                   Main_Unit := ALIs.Table (ALI).Main_Program /= None;
!                end if;
  
!                --  The following adds the standard library (s-stalib) to the
!                --  list of files to be handled by gnatmake: this file and any
!                --  files it depends on are always included in every bind,
!                --  even if they are not in the explicit dependency list.
!                --  Of course, it is not added if Suppress_Standard_Library
!                --  is True.
  
!                --  However, to avoid annoying output about s-stalib.ali being
!                --  read only, when "-v" is used, we add the standard library
!                --  only when "-a" is used.
  
!                if Need_To_Check_Standard_Library then
!                   Check_Standard_Library;
                 end if;
  
!                --  Now insert in the Q the unmarked source files (i.e. those
!                --  which have never been inserted in the Q and hence never
!                --  considered). Only do that if Unique_Compile is False.
  
!                if not Unique_Compile then
!                   for J in
!                     ALIs.Table (ALI).First_Unit .. ALIs.Table (ALI).Last_Unit
                    loop
!                      for K in
!                        Units.Table (J).First_With .. Units.Table (J).Last_With
!                      loop
!                         Sfile := Withs.Table (K).Sfile;
!                         Add_Dependency (ALIs.Table (ALI).Sfile, Sfile);
  
!                         if Is_In_Obsoleted (Sfile) then
!                            Executable_Obsolete := True;
!                         end if;
  
!                         if Sfile = No_File then
!                            Debug_Msg
!                              ("Skipping generic:", Withs.Table (K).Uname);
  
!                         else
!                            Source_Index :=
!                              Unit_Index_Of (Withs.Table (K).Afile);
  
!                            if Is_Marked (Sfile, Source_Index) then
!                               Debug_Msg ("Skipping marked file:", Sfile);
  
!                            elsif not Check_Readonly_Files
!                              and then Is_Internal_File_Name (Sfile)
!                            then
!                               Debug_Msg ("Skipping internal file:", Sfile);
! 
!                            else
!                               Insert_Q
!                                 (Sfile, Withs.Table (K).Uname, Source_Index);
!                               Mark (Sfile, Source_Index);
!                            end if;
!                         end if;
!                      end loop;
                    end loop;
!                end if;
!             end;
           end loop;
  
!          if Display_Compilation_Progress then
              Write_Str ("completed ");
              Write_Int (Int (Q_Front));
              Write_Str (" out of ");
*************** package body Make is
*** 2972,2978 ****
        function Absolute_Path
          (Path    : Name_Id;
           Project : Project_Id) return String;
!       --  Returns an absolute path for a configuration pragmas file.
  
        -------------------
        -- Absolute_Path --
--- 2983,2989 ----
        function Absolute_Path
          (Path    : Name_Id;
           Project : Project_Id) return String;
!       --  Returns an absolute path for a configuration pragmas file
  
        -------------------
        -- Absolute_Path --
*************** package body Make is
*** 3158,3164 ****
        if (not Debug.Debug_Flag_N) and Main_Project /= No_Project then
           for Project in 1 .. Projects.Last loop
              if Projects.Table (Project).Config_File_Temp then
!                if Opt.Verbose_Mode then
                    Write_Str ("Deleting temp configuration file """);
                    Write_Str (Get_Name_String
                               (Projects.Table (Project).Config_File_Name));
--- 3169,3175 ----
        if (not Debug.Debug_Flag_N) and Main_Project /= No_Project then
           for Project in 1 .. Projects.Last loop
              if Projects.Table (Project).Config_File_Temp then
!                if Verbose_Mode then
                    Write_Str ("Deleting temp configuration file """);
                    Write_Str (Get_Name_String
                               (Projects.Table (Project).Config_File_Name));
*************** package body Make is
*** 3196,3234 ****
  
           for J in Args'Range loop
  
!             --  Do not display the mapping file argument automatically
!             --  created when using a project file.
  
!             if Main_Project = No_Project
!               or else Debug.Debug_Flag_N
!               or else Args (J)'Length < 8
!               or else
!                 Args (J)(Args (J)'First .. Args (J)'First + 6) /= "-gnatem"
!             then
!                --  When -dn is not specified, do not display the config
!                --  pragmas switch (-gnatec) for the temporary file created
!                --  by the project manager (always the first -gnatec switch).
!                --  Reset Temporary_Config_File to False so that the eventual
!                --  other -gnatec switches will be displayed.
  
!                if (not Debug.Debug_Flag_N)
!                  and then Temporary_Config_File
!                  and then Args (J)'Length > 7
!                  and then Args (J)(Args (J)'First .. Args (J)'First + 6)
!                             = "-gnatec"
                 then
!                   Temporary_Config_File := False;
  
!                --  Do not display the -F=mapping_file switch for gnatbind,
!                --  if -dn is not specified.
  
!                elsif Debug.Debug_Flag_N
!                  or else Args (J)'Length < 4
!                  or else Args (J)(Args (J)'First .. Args (J)'First + 2) /=
!                            "-F="
!                then
!                   Write_Str (" ");
!                   Write_Str (Args (J).all);
                 end if;
              end if;
           end loop;
--- 3207,3250 ----
  
           for J in Args'Range loop
  
!             --  Never display -gnatez
  
!             if Args (J).all /= "-gnatez" then
  
!                --  Do not display the mapping file argument automatically
!                --  created when using a project file.
! 
!                if Main_Project = No_Project
!                  or else Debug.Debug_Flag_N
!                  or else Args (J)'Length < 8
!                  or else
!                    Args (J) (Args (J)'First .. Args (J)'First + 6) /= "-gnatem"
                 then
!                   --  When -dn is not specified, do not display the config
!                   --  pragmas switch (-gnatec) for the temporary file created
!                   --  by the project manager (always the first -gnatec switch).
!                   --  Reset Temporary_Config_File to False so that the eventual
!                   --  other -gnatec switches will be displayed.
  
!                   if (not Debug.Debug_Flag_N)
!                     and then Temporary_Config_File
!                     and then Args (J)'Length > 7
!                     and then Args (J) (Args (J)'First .. Args (J)'First + 6)
!                     = "-gnatec"
!                   then
!                      Temporary_Config_File := False;
  
!                      --  Do not display the -F=mapping_file switch for
!                      --  gnatbind, if -dn is not specified.
! 
!                   elsif Debug.Debug_Flag_N
!                     or else Args (J)'Length < 4
!                     or else
!                       Args (J) (Args (J)'First .. Args (J)'First + 2) /= "-F="
!                   then
!                      Write_Str (" ");
!                      Write_Str (Args (J).all);
!                   end if;
                 end if;
              end if;
           end loop;
*************** package body Make is
*** 3317,3351 ****
     --------------------
  
     procedure Extract_From_Q
!      (Source_File : out File_Name_Type;
!       Source_Unit : out Unit_Name_Type)
     is
!       File : constant File_Name_Type := Q.Table (Q_Front).File;
!       Unit : constant Unit_Name_Type := Q.Table (Q_Front).Unit;
  
     begin
        if Debug.Debug_Flag_Q then
           Write_Str ("   Q := Q - [ ");
           Write_Name (File);
           Write_Str (" ]");
           Write_Eol;
        end if;
  
        Q_Front := Q_Front + 1;
!       Source_File := File;
!       Source_Unit := Unit;
     end Extract_From_Q;
  
-    -----------------
-    -- Make_Failed --
-    -----------------
- 
-    procedure Make_Failed (S1 : String; S2 : String := ""; S3 : String := "") is
-    begin
-       Delete_All_Temp_Files;
-       Osint.Fail (S1, S2, S3);
-    end Make_Failed;
- 
     --------------
     -- Gnatmake --
     --------------
--- 3333,3366 ----
     --------------------
  
     procedure Extract_From_Q
!      (Source_File  : out File_Name_Type;
!       Source_Unit  : out Unit_Name_Type;
!       Source_Index : out Int)
     is
!       File  : constant File_Name_Type := Q.Table (Q_Front).File;
!       Unit  : constant Unit_Name_Type := Q.Table (Q_Front).Unit;
!       Index : constant Int            := Q.Table (Q_Front).Index;
  
     begin
        if Debug.Debug_Flag_Q then
           Write_Str ("   Q := Q - [ ");
           Write_Name (File);
+ 
+          if Index /= 0 then
+             Write_Str (", ");
+             Write_Int (Index);
+          end if;
+ 
           Write_Str (" ]");
           Write_Eol;
        end if;
  
        Q_Front := Q_Front + 1;
!       Source_File  := File;
!       Source_Unit  := Unit;
!       Source_Index := Index;
     end Extract_From_Q;
  
     --------------
     -- Gnatmake --
     --------------
*************** package body Make is
*** 3377,3382 ****
--- 3392,3750 ----
        --  The current working directory, used to modify some relative path
        --  switches on the command line when a project file is used.
  
+       Current_Main_Index : Int := 0;
+       --  If not zero, the index of the current main unit in its source file
+ 
+       There_Are_Stand_Alone_Libraries : Boolean := False;
+       --  Set to True when there are Stand-Alone Libraries, so that gnatbind
+       --  is invoked with the -F switch to force checking of elaboration flags.
+ 
+       Mapping_Path : Name_Id := No_Name;
+       --  The path name of the mapping file
+ 
+       Discard : Boolean;
+ 
+       procedure Check_Mains;
+       --  Check that the main subprograms do exist and that they all
+       --  belong to the same project file.
+ 
+       procedure Create_Binder_Mapping_File
+         (Args : in out Argument_List; Last_Arg : in out Natural);
+       --  Create a binder mapping file and add the necessary switch
+ 
+       -----------------
+       -- Check_Mains --
+       -----------------
+ 
+       procedure Check_Mains is
+          Real_Main_Project : Project_Id := No_Project;
+          --  The project of the first main
+ 
+          Proj              : Project_Id := No_Project;
+          --  The project of the current main
+ 
+          Data              : Project_Data;
+ 
+          Real_Path         : String_Access;
+ 
+       begin
+          Mains.Reset;
+ 
+          --  Check each main
+ 
+          loop
+             declare
+                Main      : constant String := Mains.Next_Main;
+                --  The name specified on the command line may include
+                --  directory information.
+ 
+                File_Name : constant String := Base_Name (Main);
+                --  The simple file name of the current main main
+ 
+             begin
+                exit when Main = "";
+ 
+                --  Get the project of the current main
+ 
+                Proj := Prj.Env.Project_Of (File_Name, Main_Project);
+ 
+                --  Fail if the current main is not a source of a
+                --  project.
+ 
+                if Proj = No_Project then
+                   Make_Failed
+                     ("""" & Main &
+                      """ is not a source of any project");
+ 
+                else
+                   --  If there is directory information, check that
+                   --  the source exists and, if it does, that the path
+                   --  is the actual path of a source of a project.
+ 
+                   if Main /= File_Name then
+                      Data := Projects.Table (Main_Project);
+ 
+                      Real_Path :=
+                        Locate_Regular_File
+                          (Main &
+                           Get_Name_String
+                             (Data.Naming.Ada_Body_Suffix),
+                           "");
+                      if Real_Path = null then
+                         Real_Path :=
+                           Locate_Regular_File
+                             (Main &
+                              Get_Name_String
+                                (Data.Naming.Ada_Spec_Suffix),
+                              "");
+                      end if;
+ 
+                      if Real_Path = null then
+                         Real_Path :=
+                           Locate_Regular_File (Main, "");
+                      end if;
+ 
+                      --  Fail if the file cannot be found
+ 
+                      if Real_Path = null then
+                         Make_Failed
+                           ("file """ & Main & """ does not exist");
+                      end if;
+ 
+                      declare
+                         Project_Path : constant String :=
+                                          Prj.Env.File_Name_Of_Library_Unit_Body
+                                            (Name              => File_Name,
+                                             Project           => Main_Project,
+                                             Main_Project_Only => False,
+                                             Full_Path         => True);
+                         Normed_Path  : constant String :=
+                                          Normalize_Pathname
+                                            (Real_Path.all,
+                                             Case_Sensitive => False);
+                         Proj_Path    : constant String :=
+                                          Normalize_Pathname
+                                            (Project_Path,
+                                             Case_Sensitive => False);
+ 
+                      begin
+                         Free (Real_Path);
+ 
+                         --  Fail if it is not the correct path
+ 
+                         if Normed_Path /= Proj_Path then
+                            if Verbose_Mode then
+                               Write_Str (Normed_Path);
+                               Write_Str (" /= ");
+                               Write_Line (Proj_Path);
+                            end if;
+ 
+                            Make_Failed
+                              ("""" & Main &
+                               """ is not a source of any project");
+                         end if;
+                      end;
+                   end if;
+ 
+                   if not Unique_Compile then
+ 
+                      --  Record the project, if it is the first main
+ 
+                      if Real_Main_Project = No_Project then
+                         Real_Main_Project := Proj;
+ 
+                      elsif Proj /= Real_Main_Project then
+ 
+                         --  Fail, as the current main is not a source
+                         --  of the same project as the first main.
+ 
+                         Make_Failed
+                           ("""" & Main &
+                            """ is not a source of project " &
+                            Get_Name_String
+                              (Projects.Table
+                                 (Real_Main_Project).Name));
+                      end if;
+                   end if;
+                end if;
+ 
+                --  If -u and -U are not used, we may have mains that
+                --  are sources of a project that is not the one
+                --  specified with switch -P.
+ 
+                if not Unique_Compile then
+                   Main_Project := Real_Main_Project;
+                end if;
+             end;
+          end loop;
+       end Check_Mains;
+ 
+       --------------------------------
+       -- Create_Binder_Mapping_File --
+       --------------------------------
+ 
+       procedure Create_Binder_Mapping_File
+         (Args : in out Argument_List; Last_Arg : in out Natural)
+       is
+          Mapping_FD : File_Descriptor := Invalid_FD;
+          --  A File Descriptor for an eventual mapping file
+ 
+          ALI_Unit     : Name_Id := No_Name;
+          --  The unit name of an ALI file
+ 
+          ALI_Name     : Name_Id := No_Name;
+          --  The file name of the ALI file
+ 
+          ALI_Project  : Project_Id := No_Project;
+          --  The project of the ALI file
+ 
+          Bytes        : Integer;
+          OK           : Boolean := True;
+ 
+          Status       : Boolean;
+          --  For call to Close
+ 
+       begin
+          Tempdir.Create_Temp_File (Mapping_FD, Mapping_Path);
+ 
+          if Mapping_FD /= Invalid_FD then
+ 
+             --  Traverse all units
+ 
+             for J in Prj.Com.Units.First .. Prj.Com.Units.Last loop
+                declare
+                   Unit : constant Prj.Com.Unit_Data :=
+                            Prj.Com.Units.Table (J);
+                   use Prj.Com;
+ 
+                begin
+                   if Unit.Name /= No_Name then
+ 
+                      --  If there is a body, put it in the mapping
+ 
+                      if Unit.File_Names (Body_Part).Name /= No_Name
+                        and then Unit.File_Names (Body_Part).Project
+                        /= No_Project
+                      then
+                         Get_Name_String (Unit.Name);
+                         Name_Buffer
+                           (Name_Len + 1 .. Name_Len + 2) := "%b";
+                         Name_Len := Name_Len + 2;
+                         ALI_Unit := Name_Find;
+                         ALI_Name :=
+                           Lib_File_Name
+                             (Unit.File_Names (Body_Part).Name);
+                         ALI_Project :=
+                           Unit.File_Names (Body_Part).Project;
+ 
+                         --  Otherwise, if there is a spec, put it
+                         --  in the mapping.
+ 
+                      elsif Unit.File_Names (Specification).Name
+                        /= No_Name
+                        and then Unit.File_Names
+                          (Specification).Project
+                          /= No_Project
+                      then
+                         Get_Name_String (Unit.Name);
+                         Name_Buffer
+                           (Name_Len + 1 .. Name_Len + 2) := "%s";
+                         Name_Len := Name_Len + 2;
+                         ALI_Unit := Name_Find;
+                         ALI_Name := Lib_File_Name
+                           (Unit.File_Names (Specification).Name);
+                         ALI_Project :=
+                           Unit.File_Names (Specification).Project;
+ 
+                      else
+                         ALI_Name := No_Name;
+                      end if;
+ 
+                      --  If we have something to put in the mapping
+                      --  then we do it now. However, if the project
+                      --  is extended, we don't put anything in the
+                      --  mapping file, because we do not know where
+                      --  the ALI file is: it might be in the ext-
+                      --  ended project obj dir as well as in the
+                      --  extending project obj dir.
+ 
+                      if ALI_Name /= No_Name
+                        and then
+                          Projects.Table (ALI_Project).Extended_By = No_Project
+                        and then
+                          Projects.Table (ALI_Project).Extends = No_Project
+                      then
+                         --  First line is the unit name
+ 
+                         Get_Name_String (ALI_Unit);
+                         Name_Len := Name_Len + 1;
+                         Name_Buffer (Name_Len) := ASCII.LF;
+                         Bytes :=
+                           Write
+                             (Mapping_FD,
+                              Name_Buffer (1)'Address,
+                              Name_Len);
+                         OK := Bytes = Name_Len;
+ 
+                         exit when not OK;
+ 
+                         --  Second line it the ALI file name
+ 
+                         Get_Name_String (ALI_Name);
+                         Name_Len := Name_Len + 1;
+                         Name_Buffer (Name_Len) := ASCII.LF;
+                         Bytes :=
+                           Write
+                             (Mapping_FD,
+                              Name_Buffer (1)'Address,
+                              Name_Len);
+                         OK := Bytes = Name_Len;
+ 
+                         exit when not OK;
+ 
+                         --  Third line it the ALI path name,
+                         --  concatenation of the project
+                         --  directory with the ALI file name.
+ 
+                         declare
+                            ALI : constant String :=
+                                    Get_Name_String (ALI_Name);
+                         begin
+                            Get_Name_String
+                              (Projects.Table (ALI_Project).
+                                 Object_Directory);
+ 
+                            if Name_Buffer (Name_Len) /=
+                              Directory_Separator
+                            then
+                               Name_Len := Name_Len + 1;
+                               Name_Buffer (Name_Len) :=
+                                 Directory_Separator;
+                            end if;
+ 
+                            Name_Buffer
+                              (Name_Len + 1 ..
+                                 Name_Len + ALI'Length) := ALI;
+                            Name_Len :=
+                              Name_Len + ALI'Length + 1;
+                            Name_Buffer (Name_Len) := ASCII.LF;
+                            Bytes :=
+                              Write
+                                (Mapping_FD,
+                                 Name_Buffer (1)'Address,
+                                 Name_Len);
+                            OK := Bytes = Name_Len;
+                         end;
+ 
+                         --  If OK is False, it means we were unable
+                         --  to write a line. No point in continuing
+                         --  with the other units.
+ 
+                         exit when not OK;
+                      end if;
+                   end if;
+                end;
+             end loop;
+ 
+             Close (Mapping_FD, Status);
+ 
+             OK := OK and Status;
+ 
+             --  If the creation of the mapping file was successful,
+             --  we add the switch to the arguments of gnatbind.
+ 
+             if OK then
+                Last_Arg := Last_Arg + 1;
+                Args (Last_Arg) :=
+                  new String'("-F=" & Get_Name_String (Mapping_Path));
+             end if;
+          end if;
+       end Create_Binder_Mapping_File;
+ 
+    --  Start of processing for Gnatmake
+ 
+    --  This body is very long, should be broken down ???
+ 
     begin
        Gnatmake_Called := True;
  
*************** package body Make is
*** 3392,3398 ****
  
        Bind_Shared := No_Shared_Switch'Access;
        Link_With_Shared_Libgcc := No_Shared_Libgcc_Switch'Access;
-       Bind_Shared_Known := False;
  
        Failed_Links.Set_Last (0);
        Successful_Links.Set_Last (0);
--- 3760,3765 ----
*************** package body Make is
*** 3405,3411 ****
           --  Do not check for an object file (".o") when compiling to
           --  Java bytecode since ".class" files are generated instead.
  
!          Opt.Check_Object_Consistency := False;
        end if;
  
        --  Special case when switch -B was specified
--- 3772,3778 ----
           --  Do not check for an object file (".o") when compiling to
           --  Java bytecode since ".class" files are generated instead.
  
!          Check_Object_Consistency := False;
        end if;
  
        --  Special case when switch -B was specified
*************** package body Make is
*** 3456,3461 ****
--- 3823,3831 ----
              end loop;
           end if;
  
+       elsif Main_Index /= 0 and then Osint.Number_Of_Files > 1 then
+          Make_Failed ("cannot specify several mains with a multi-unit index");
+ 
        elsif Main_Project /= No_Project then
  
           --  If the main project file is a library project file, main(s)
*************** package body Make is
*** 3474,3616 ****
                 --  project file and, if there are several mains, each of them
                 --  is a source of the same project file.
  
!                Mains.Reset;
! 
!                declare
!                   Real_Main_Project : Project_Id := No_Project;
!                   --  The project of the first main
! 
!                   Proj : Project_Id := No_Project;
!                   --  The project of the current main
! 
!                begin
!                   --  Check each main
! 
!                   loop
!                      declare
!                         Main : constant String := Mains.Next_Main;
!                         --  The name specified on the command line may include
!                         --  directory information.
! 
!                         File_Name : constant String := Base_Name (Main);
!                         --  The simple file name of the current main main
! 
!                      begin
!                         exit when Main = "";
! 
!                         --  Get the project of the current main
! 
!                         Proj := Prj.Env.Project_Of (File_Name, Main_Project);
! 
!                         --  Fail if the current main is not a source of a
!                         --  project.
! 
!                         if Proj = No_Project then
!                            Make_Failed
!                              ("""" & Main &
!                               """ is not a source of any project");
! 
!                         else
!                            --  If there is directory information, check that
!                            --  the source exists and, if it does, that the path
!                            --  is the actual path of a source of a project.
! 
!                            if Main /= File_Name then
!                               declare
!                                  Data : constant Project_Data :=
!                                           Projects.Table (Main_Project);
! 
!                                  Project_Path : constant String :=
!                                    Prj.Env.File_Name_Of_Library_Unit_Body
!                                      (Name              => File_Name,
!                                       Project           => Main_Project,
!                                       Main_Project_Only => False,
!                                       Full_Path         => True);
!                                  Real_Path : String_Access :=
!                                    Locate_Regular_File
!                                      (Main &
!                                       Get_Name_String
!                                         (Data.Naming.Current_Body_Suffix),
!                                       "");
!                               begin
!                                  if Real_Path = null then
!                                     Real_Path :=
!                                       Locate_Regular_File
!                                         (Main &
!                                          Get_Name_String
!                                            (Data.Naming.Current_Spec_Suffix),
!                                          "");
!                                  end if;
! 
!                                  if Real_Path = null then
!                                     Real_Path :=
!                                       Locate_Regular_File (Main, "");
!                                  end if;
! 
!                                  --  Fail if the file cannot be found
! 
!                                  if Real_Path = null then
!                                     Make_Failed
!                                       ("file """ & Main & """ does not exist");
!                                  end if;
! 
!                                  declare
!                                     Normed_Path : constant String :=
!                                       Normalize_Pathname
!                                         (Real_Path.all,
!                                          Case_Sensitive => False);
!                                  begin
!                                     Free (Real_Path);
! 
!                                     --  Fail if it is not the correct path
! 
!                                     if Normed_Path /= Project_Path then
!                                        if Verbose_Mode then
!                                           Write_Str (Normed_Path);
!                                           Write_Str (" /= ");
!                                           Write_Line (Project_Path);
!                                        end if;
! 
!                                        Make_Failed
!                                          ("""" & Main &
!                                           """ is not a source of any project");
!                                     end if;
!                                  end;
!                               end;
!                            end if;
! 
!                            if not Unique_Compile then
! 
!                               --  Record the project, if it is the first main
! 
!                               if Real_Main_Project = No_Project then
!                                  Real_Main_Project := Proj;
! 
!                               elsif Proj /= Real_Main_Project then
! 
!                                  --  Fail, as the current main is not a source
!                                  --  of the same project as the first main.
! 
!                                  Make_Failed
!                                    ("""" & Main &
!                                     """ is not a source of project " &
!                                     Get_Name_String
!                                       (Projects.Table
!                                          (Real_Main_Project).Name));
!                               end if;
!                            end if;
!                         end if;
! 
!                         --  If -u and -U are not used, we may have mains that
!                         --  are sources of a project that is not the one
!                         --  specified with switch -P.
! 
!                         if not Unique_Compile then
!                            Main_Project := Real_Main_Project;
!                         end if;
!                      end;
!                   end loop;
!                end;
              end if;
  
           --  If no mains have been specified on the command line,
--- 3844,3850 ----
                 --  project file and, if there are several mains, each of them
                 --  is a source of the same project file.
  
!                Check_Mains;
              end if;
  
           --  If no mains have been specified on the command line,
*************** package body Make is
*** 3619,3624 ****
--- 3853,3863 ----
           --  the sources of the project file as mains.
  
           else
+             if Main_Index /= 0 then
+                Make_Failed ("cannot specify a multi-unit index but no main " &
+                             "on the command line");
+             end if;
+ 
              declare
                 Value : String_List_Id := Projects.Table (Main_Project).Mains;
  
*************** package body Make is
*** 3713,3719 ****
                             At_Least_One_Main := True;
                             Osint.Add_File
                               (Get_Name_String
!                                 (String_Elements.Table (Value).Value));
                          end if;
  
                          Value := String_Elements.Table (Value).Next;
--- 3952,3959 ----
                             At_Least_One_Main := True;
                             Osint.Add_File
                               (Get_Name_String
!                                 (String_Elements.Table (Value).Value),
!                               Index => String_Elements.Table (Value).Index);
                          end if;
  
                          Value := String_Elements.Table (Value).Next;
*************** package body Make is
*** 3734,3747 ****
           end if;
        end if;
  
!       if Opt.Verbose_Mode then
           Write_Eol;
           Write_Str ("GNATMAKE ");
           Write_Str (Gnatvsn.Gnat_Version_String);
!          Write_Str (" Copyright 1995-2004 Free Software Foundation, Inc.");
           Write_Eol;
        end if;
  
        if Osint.Number_Of_Files = 0 then
           if Main_Project /= No_Project
             and then Projects.Table (Main_Project).Library
--- 3974,3995 ----
           end if;
        end if;
  
!       if Verbose_Mode then
           Write_Eol;
           Write_Str ("GNATMAKE ");
           Write_Str (Gnatvsn.Gnat_Version_String);
!          Write_Eol;
!          Write_Str ("Copyright 1995-2004 Free Software Foundation, Inc.");
           Write_Eol;
        end if;
  
+       if Main_Project /= No_Project
+         and then Projects.Table (Main_Project).Externally_Built
+       then
+          Make_Failed
+            ("nothing to do for a main project that is externally built");
+       end if;
+ 
        if Osint.Number_Of_Files = 0 then
           if Main_Project /= No_Project
             and then Projects.Table (Main_Project).Library
*************** package body Make is
*** 3778,3785 ****
  
        --  If -M was specified, behave as if -n was specified
  
!       if Opt.List_Dependencies then
!          Opt.Do_Not_Execute := True;
        end if;
  
        --  Note that Osint.Next_Main_Source will always return the (possibly
--- 4026,4033 ----
  
        --  If -M was specified, behave as if -n was specified
  
!       if List_Dependencies then
!          Do_Not_Execute := True;
        end if;
  
        --  Note that Osint.Next_Main_Source will always return the (possibly
*************** package body Make is
*** 3787,3797 ****
  
        Main_Source_File := Next_Main_Source;
  
        Add_Switch ("-I-", Binder, And_Save => True);
        Add_Switch ("-I-", Compiler, And_Save => True);
  
        if Main_Project = No_Project then
!          if Opt.Look_In_Primary_Dir then
  
              Add_Switch
                ("-I" &
--- 4035,4049 ----
  
        Main_Source_File := Next_Main_Source;
  
+       if Current_File_Index /= No_Index then
+          Main_Index := Current_File_Index;
+       end if;
+ 
        Add_Switch ("-I-", Binder, And_Save => True);
        Add_Switch ("-I-", Compiler, And_Save => True);
  
        if Main_Project = No_Project then
!          if Look_In_Primary_Dir then
  
              Add_Switch
                ("-I" &
*************** package body Make is
*** 3815,3889 ****
           --  sources for other compilation units, when there are extending
           --  projects.
  
!          Opt.Look_In_Primary_Dir := False;
        end if;
  
        --  If the user wants a program without a main subprogram, add the
        --  appropriate switch to the binder.
  
!       if Opt.No_Main_Subprogram then
           Add_Switch ("-z", Binder, And_Save => True);
        end if;
  
        if Main_Project /= No_Project then
  
!          if Projects.Table (Main_Project).Object_Directory = No_Name then
!             Make_Failed ("no sources to compile");
!          end if;
  
!          --  Change the current directory to the object directory of the main
!          --  project.
  
!          begin
!             Project_Object_Directory := No_Project;
!             Change_To_Object_Directory (Main_Project);
  
!          exception
!             when Directory_Error =>
  
!                --  This should never happen. But, if it does, display the
!                --  content of the parent directory of the obj dir.
  
!                declare
!                   Parent : constant Dir_Name_Str :=
!                     Dir_Name
!                       (Get_Name_String
!                            (Projects.Table (Main_Project).Object_Directory));
!                   Dir : Dir_Type;
!                   Str : String (1 .. 200);
!                   Last : Natural;
  
!                begin
!                   Write_Str ("Contents of directory """);
!                   Write_Str (Parent);
!                   Write_Line (""":");
  
!                   Open (Dir, Parent);
  
!                   loop
!                      Read (Dir, Str, Last);
!                      exit when Last = 0;
!                      Write_Str ("   ");
!                      Write_Line (Str (1 .. Last));
!                   end loop;
  
!                   Close (Dir);
  
!                exception
!                   when X : others =>
!                      Write_Line ("(unexpected exception)");
!                      Write_Line (Exception_Information (X));
  
!                      if Is_Open (Dir) then
!                         Close (Dir);
!                      end if;
!                end;
  
!                Make_Failed ("unable to change working directory to """,
!                             Get_Name_String
!                              (Projects.Table (Main_Project).Object_Directory),
!                             """");
!          end;
  
           --  Source file lookups should be cached for efficiency.
           --  Source files are not supposed to change.
--- 4067,4143 ----
           --  sources for other compilation units, when there are extending
           --  projects.
  
!          Look_In_Primary_Dir := False;
        end if;
  
        --  If the user wants a program without a main subprogram, add the
        --  appropriate switch to the binder.
  
!       if No_Main_Subprogram then
           Add_Switch ("-z", Binder, And_Save => True);
        end if;
  
        if Main_Project /= No_Project then
  
!          if Projects.Table (Main_Project).Object_Directory /= No_Name then
  
!             --  Change the current directory to the object directory of
!             --  the main project.
  
!             begin
!                Project_Object_Directory := No_Project;
!                Change_To_Object_Directory (Main_Project);
  
!             exception
!                when Directory_Error =>
  
!                   --  This should never happen. But, if it does, display the
!                   --  content of the parent directory of the obj dir.
  
!                   declare
!                      Parent : constant Dir_Name_Str :=
!                                 Dir_Name
!                                   (Get_Name_String
!                                      (Projects.Table
!                                         (Main_Project).Object_Directory));
  
!                      Dir  : Dir_Type;
!                      Str  : String (1 .. 200);
!                      Last : Natural;
  
!                   begin
!                      Write_Str ("Contents of directory """);
!                      Write_Str (Parent);
!                      Write_Line (""":");
  
!                      Open (Dir, Parent);
  
!                      loop
!                         Read (Dir, Str, Last);
!                         exit when Last = 0;
!                         Write_Str ("   ");
!                         Write_Line (Str (1 .. Last));
!                      end loop;
  
!                      Close (Dir);
  
!                   exception
!                      when X : others =>
!                         Write_Line ("(unexpected exception)");
!                         Write_Line (Exception_Information (X));
  
!                         if Is_Open (Dir) then
!                            Close (Dir);
!                         end if;
!                   end;
! 
!                   Make_Failed
!                     ("unable to change working directory to """,
!                      Get_Name_String
!                        (Projects.Table (Main_Project).Object_Directory),
!                      """");
!             end;
!          end if;
  
           --  Source file lookups should be cached for efficiency.
           --  Source files are not supposed to change.
*************** package body Make is
*** 3951,3957 ****
  
                    --  We only output the main source file if there is only one
  
!                   if Opt.Verbose_Mode and then Osint.Number_Of_Files = 1 then
                       Write_Str ("Main source file: """);
                       Write_Str (Main_Unit_File_Name
                                  (Pos + 1 .. Main_Unit_File_Name'Last));
--- 4205,4211 ----
  
                    --  We only output the main source file if there is only one
  
!                   if Verbose_Mode and then Osint.Number_Of_Files = 1 then
                       Write_Str ("Main source file: """);
                       Write_Str (Main_Unit_File_Name
                                  (Pos + 1 .. Main_Unit_File_Name'Last));
*************** package body Make is
*** 3971,3977 ****
                 --  switches (if any).
  
                 if Osint.Number_Of_Files = 1 then
!                   if Opt.Verbose_Mode then
                       Write_Str ("Adding gnatmake switches for """);
                       Write_Str (Main_Unit_File_Name);
                       Write_Line (""".");
--- 4225,4231 ----
                 --  switches (if any).
  
                 if Osint.Number_Of_Files = 1 then
!                   if Verbose_Mode then
                       Write_Str ("Adding gnatmake switches for """);
                       Write_Str (Main_Unit_File_Name);
                       Write_Line (""".");
*************** package body Make is
*** 3979,3984 ****
--- 4233,4239 ----
  
                    Add_Switches
                      (File_Name   => Main_Unit_File_Name,
+                      Index       => Main_Index,
                       The_Package => Builder_Package,
                       Program     => None);
  
*************** package body Make is
*** 3993,3998 ****
--- 4248,4254 ----
                       Defaults : constant Variable_Value :=
                         Prj.Util.Value_Of
                           (Name                    => Name_Ada,
+                           Index                   => 0,
                            Attribute_Or_Array_Name => Name_Default_Switches,
                            In_Package              => Builder_Package);
  
*************** package body Make is
*** 4004,4010 ****
  
                    begin
                       if Defaults /= Nil_Variable_Value then
!                         if (not Opt.Quiet_Output)
                            and then Switches /= No_Array_Element
                          then
                             Write_Line
--- 4260,4266 ----
  
                    begin
                       if Defaults /= Nil_Variable_Value then
!                         if (not Quiet_Output)
                            and then Switches /= No_Array_Element
                          then
                             Write_Line
*************** package body Make is
*** 4017,4026 ****
  
                          Add_Switches
                            (File_Name   => " ",
                             The_Package => Builder_Package,
                             Program     => None);
  
!                      elsif (not Opt.Quiet_Output)
                         and then Switches /= No_Array_Element
                       then
                          Write_Line
--- 4273,4283 ----
  
                          Add_Switches
                            (File_Name   => " ",
+                            Index       => 0,
                             The_Package => Builder_Package,
                             Program     => None);
  
!                      elsif (not Quiet_Output)
                         and then Switches /= No_Array_Element
                       then
                          Write_Line
*************** package body Make is
*** 4046,4052 ****
              --  Add binder switches from the project file for the first main
  
              if Do_Bind_Step and Binder_Package /= No_Package then
!                if Opt.Verbose_Mode then
                    Write_Str ("Adding binder switches for """);
                    Write_Str (Main_Unit_File_Name);
                    Write_Line (""".");
--- 4303,4309 ----
              --  Add binder switches from the project file for the first main
  
              if Do_Bind_Step and Binder_Package /= No_Package then
!                if Verbose_Mode then
                    Write_Str ("Adding binder switches for """);
                    Write_Str (Main_Unit_File_Name);
                    Write_Line (""".");
*************** package body Make is
*** 4054,4059 ****
--- 4311,4317 ----
  
                 Add_Switches
                   (File_Name   => Main_Unit_File_Name,
+                   Index       => Main_Index,
                    The_Package => Binder_Package,
                    Program     => Binder);
              end if;
*************** package body Make is
*** 4061,4067 ****
              --  Add linker switches from the project file for the first main
  
              if Do_Link_Step and Linker_Package /= No_Package then
!                if Opt.Verbose_Mode then
                    Write_Str ("Adding linker switches for""");
                    Write_Str (Main_Unit_File_Name);
                    Write_Line (""".");
--- 4319,4325 ----
              --  Add linker switches from the project file for the first main
  
              if Do_Link_Step and Linker_Package /= No_Package then
!                if Verbose_Mode then
                    Write_Str ("Adding linker switches for""");
                    Write_Str (Main_Unit_File_Name);
                    Write_Line (""".");
*************** package body Make is
*** 4069,4074 ****
--- 4327,4333 ----
  
                 Add_Switches
                   (File_Name   => Main_Unit_File_Name,
+                   Index       => Main_Index,
                    The_Package => Linker_Package,
                    Program     => Linker);
              end if;
*************** package body Make is
*** 4087,4093 ****
              Make_Failed ("*** make failed.");
        end;
  
!       Display_Commands (not Opt.Quiet_Output);
  
        Check_Steps;
  
--- 4346,4352 ----
              Make_Failed ("*** make failed.");
        end;
  
!       Display_Commands (not Quiet_Output);
  
        Check_Steps;
  
*************** package body Make is
*** 4097,4121 ****
           --  put all the project sources in the queue, and flag the project
           --  so that the library is generated.
  
!          if MLib.Tgt.Support_For_Libraries /= MLib.Tgt.None then
              for Proj in Projects.First .. Projects.Last loop
                 if Projects.Table (Proj).Library then
!                   Projects.Table (Proj).Flag1 :=
!                     not MLib.Tgt.Library_Exists_For (Proj);
  
!                   if Projects.Table (Proj).Flag1 then
!                      if Opt.Verbose_Mode then
!                         Write_Str
!                           ("Library file does not exist for project """);
!                         Write_Str
!                           (Get_Name_String (Projects.Table (Proj).Name));
!                         Write_Line ("""");
!                      end if;
  
!                      Insert_Project_Sources
!                        (The_Project  => Proj,
!                         All_Projects => False,
!                         Into_Q       => True);
                    end if;
                 end if;
              end loop;
--- 4356,4396 ----
           --  put all the project sources in the queue, and flag the project
           --  so that the library is generated.
  
!          if not Unique_Compile
!            and then MLib.Tgt.Support_For_Libraries /= MLib.Tgt.None
!          then
              for Proj in Projects.First .. Projects.Last loop
                 if Projects.Table (Proj).Library then
!                   Projects.Table (Proj).Need_To_Build_Lib :=
!                     (not MLib.Tgt.Library_Exists_For (Proj))
!                     and then (not Projects.Table (Proj).Externally_Built);
  
!                   if Projects.Table (Proj).Need_To_Build_Lib then
  
!                      --  If there is no object directory, then it will be
!                      --  impossible to build the library. So fail immediately.
! 
!                      if Projects.Table (Proj).Object_Directory = No_Name then
!                         Make_Failed
!                           ("no object files to build library for project """,
!                            Get_Name_String (Projects.Table (Proj).Name),
!                            """");
!                         Projects.Table (Proj).Need_To_Build_Lib := False;
! 
!                      else
!                         if Verbose_Mode then
!                            Write_Str
!                              ("Library file does not exist for project """);
!                            Write_Str
!                              (Get_Name_String (Projects.Table (Proj).Name));
!                            Write_Line ("""");
!                         end if;
! 
!                         Insert_Project_Sources
!                           (The_Project  => Proj,
!                            All_Projects => False,
!                            Into_Q       => True);
!                      end if;
                    end if;
                 end if;
              end loop;
*************** package body Make is
*** 4280,4286 ****
        --  precedence.
  
        if Saved_Maximum_Processes = 0 then
!          Saved_Maximum_Processes := Opt.Maximum_Processes;
        end if;
  
        --  Allocate as many temporary mapping file names as the maximum
--- 4555,4561 ----
        --  precedence.
  
        if Saved_Maximum_Processes = 0 then
!          Saved_Maximum_Processes := Maximum_Processes;
        end if;
  
        --  Allocate as many temporary mapping file names as the maximum
*************** package body Make is
*** 4300,4323 ****
  
        Bad_Compilation.Init;
  
        --  Here is where the make process is started
  
        --  We do the same process for each main
  
        Multiple_Main_Loop : for N_File in 1 .. Osint.Number_Of_Files loop
  
-          --  Increase the marking label to be sure to check sources
-          --  for all executables.
- 
-          Marking_Label := Marking_Label + 1;
- 
-          --  Make sure it is not 0, which is the default value for
-          --  a file that has never been marked.
- 
-          if Marking_Label = 0 then
-             Marking_Label := 1;
-          end if;
- 
           --  First, find the executable name and path
  
           Executable          := No_File;
--- 4575,4588 ----
  
        Bad_Compilation.Init;
  
+       Current_Main_Index := Main_Index;
+ 
        --  Here is where the make process is started
  
        --  We do the same process for each main
  
        Multiple_Main_Loop : for N_File in 1 .. Osint.Number_Of_Files loop
  
           --  First, find the executable name and path
  
           Executable          := No_File;
*************** package body Make is
*** 4345,4383 ****
                 Name_Len := Linker_Switches.Table (J + 1)'Length;
                 Name_Buffer (1 .. Name_Len) :=
                   Linker_Switches.Table (J + 1).all;
- 
-                --  Put in canonical case to detect suffixs such as ".EXE" on
-                --  Windows or VMS.
- 
-                Canonical_Case_File_Name (Name_Buffer (1 .. Name_Len));
- 
-                --  If target has an executable suffix and it has not been
-                --  specified then it is added here.
- 
-                if Executable_Suffix'Length /= 0
-                  and then Name_Buffer
-                           (Name_Len - Executable_Suffix'Length + 1 .. Name_Len)
-                              /= Executable_Suffix
-                then
-                   --  Get back the original name to keep the case on Windows
- 
-                   Name_Buffer (1 .. Name_Len) :=
-                     Linker_Switches.Table (J + 1).all;
- 
-                   --  Add the executable suffix
- 
-                   Name_Buffer (Name_Len + 1 ..
-                                        Name_Len + Executable_Suffix'Length) :=
-                       Executable_Suffix;
-                   Name_Len := Name_Len + Executable_Suffix'Length;
- 
-                else
-                   --  Get back the original name to keep the case on Windows
- 
-                   Name_Buffer (1 .. Name_Len) :=
-                     Linker_Switches.Table (J + 1).all;
-                end if;
- 
                 Executable := Name_Enter;
  
                 Verbose_Msg (Executable, "final executable");
--- 4610,4615 ----
*************** package body Make is
*** 4401,4407 ****
                 --  "main.2.ada", when the body termination is ".2.ada".
  
                 Executable := Prj.Util.Executable_Of
!                                         (Main_Project, Main_Source_File);
              end if;
           end if;
  
--- 4633,4639 ----
                 --  "main.2.ada", when the body termination is ".2.ada".
  
                 Executable := Prj.Util.Executable_Of
!                                (Main_Project, Main_Source_File, Main_Index);
              end if;
           end if;
  
*************** package body Make is
*** 4433,4445 ****
  
                    Name_Buffer (Name_Len + 1 ..
                                         Name_Len + Exec_File_Name'Length) :=
!                       Exec_File_Name;
                    Name_Len := Name_Len + Exec_File_Name'Length;
                    Executable := Name_Find;
                    Non_Std_Executable := True;
                 end if;
              end;
- 
           end if;
  
           if Do_Compile_Step then
--- 4665,4677 ----
  
                    Name_Buffer (Name_Len + 1 ..
                                         Name_Len + Exec_File_Name'Length) :=
!                     Exec_File_Name;
! 
                    Name_Len := Name_Len + Exec_File_Name'Length;
                    Executable := Name_Find;
                    Non_Std_Executable := True;
                 end if;
              end;
           end if;
  
           if Do_Compile_Step then
*************** package body Make is
*** 4451,4457 ****
                 Youngest_Obj_Stamp  : Time_Stamp_Type;
  
                 Executable_Stamp : Time_Stamp_Type;
!                --  Executable is the final executable program.
  
                 Library_Rebuilt : Boolean := False;
  
--- 4683,4689 ----
                 Youngest_Obj_Stamp  : Time_Stamp_Type;
  
                 Executable_Stamp : Time_Stamp_Type;
!                --  Executable is the final executable program
  
                 Library_Rebuilt : Boolean := False;
  
*************** package body Make is
*** 4469,4484 ****
                    Most_Recent_Obj_File  => Youngest_Obj_File,
                    Most_Recent_Obj_Stamp => Youngest_Obj_Stamp,
                    Main_Unit             => Is_Main_Unit,
                    Compilation_Failures  => Compilation_Failures,
!                   Check_Readonly_Files  => Opt.Check_Readonly_Files,
!                   Do_Not_Execute        => Opt.Do_Not_Execute,
!                   Force_Compilations    => Opt.Force_Compilations,
!                   In_Place_Mode         => Opt.In_Place_Mode,
!                   Keep_Going            => Opt.Keep_Going,
                    Initialize_ALI_Data   => True,
                    Max_Process           => Saved_Maximum_Processes);
  
!                if Opt.Verbose_Mode then
                    Write_Str ("End of compilation");
                    Write_Eol;
                 end if;
--- 4701,4717 ----
                    Most_Recent_Obj_File  => Youngest_Obj_File,
                    Most_Recent_Obj_Stamp => Youngest_Obj_Stamp,
                    Main_Unit             => Is_Main_Unit,
+                   Main_Index            => Current_Main_Index,
                    Compilation_Failures  => Compilation_Failures,
!                   Check_Readonly_Files  => Check_Readonly_Files,
!                   Do_Not_Execute        => Do_Not_Execute,
!                   Force_Compilations    => Force_Compilations,
!                   In_Place_Mode         => In_Place_Mode,
!                   Keep_Going            => Keep_Going,
                    Initialize_ALI_Data   => True,
                    Max_Process           => Saved_Maximum_Processes);
  
!                if Verbose_Mode then
                    Write_Str ("End of compilation");
                    Write_Eol;
                 end if;
*************** package body Make is
*** 4491,4499 ****
                   Total_Compilation_Failures + Compilation_Failures;
  
                 if Total_Compilation_Failures /= 0 then
!                   if Opt.Keep_Going then
                       goto Next_Main;
- 
                    else
                       List_Bad_Compilations;
                       raise Compilation_Failed;
--- 4724,4731 ----
                   Total_Compilation_Failures + Compilation_Failures;
  
                 if Total_Compilation_Failures /= 0 then
!                   if Keep_Going then
                       goto Next_Main;
                    else
                       List_Bad_Compilations;
                       raise Compilation_Failed;
*************** package body Make is
*** 4522,4534 ****
  
                       for Proj1 in Projects.First .. Projects.Last loop
  
                          if Projects.Table (Proj1).Library
!                           and then not Projects.Table (Proj1).Flag1
                          then
                             MLib.Prj.Check_Library (Proj1);
                          end if;
  
!                         if Projects.Table (Proj1).Flag1 then
                             Library_Projs.Increment_Last;
                             Current := Library_Projs.Last;
                             Depth := Projects.Table (Proj1).Depth;
--- 4754,4771 ----
  
                       for Proj1 in Projects.First .. Projects.Last loop
  
+                         if Projects.Table (Proj1).Standalone_Library then
+                            There_Are_Stand_Alone_Libraries := True;
+                         end if;
+ 
                          if Projects.Table (Proj1).Library
!                           and then not Projects.Table (Proj1).Need_To_Build_Lib
!                           and then not Projects.Table (Proj1).Externally_Built
                          then
                             MLib.Prj.Check_Library (Proj1);
                          end if;
  
!                         if Projects.Table (Proj1).Need_To_Build_Lib then
                             Library_Projs.Increment_Last;
                             Current := Library_Projs.Last;
                             Depth := Projects.Table (Proj1).Depth;
*************** package body Make is
*** 4545,4551 ****
                             end loop;
  
                             Library_Projs.Table (Current) := Proj1;
!                            Projects.Table (Proj1).Flag1 := False;
                          end if;
                       end loop;
                    end;
--- 4782,4788 ----
                             end loop;
  
                             Library_Projs.Table (Current) := Proj1;
!                            Projects.Table (Proj1).Need_To_Build_Lib := False;
                          end if;
                       end loop;
                    end;
*************** package body Make is
*** 4563,4569 ****
                    end loop;
                 end if;
  
!                if Opt.List_Dependencies then
                    if First_Compiled_File /= No_File then
                       Inform
                         (First_Compiled_File,
--- 4800,4806 ----
                    end loop;
                 end if;
  
!                if List_Dependencies then
                    if First_Compiled_File /= No_File then
                       Inform
                         (First_Compiled_File,
*************** package body Make is
*** 4574,4586 ****
  
                 elsif First_Compiled_File = No_File
                   and then not Do_Bind_Step
!                  and then not Opt.Quiet_Output
                   and then not Library_Rebuilt
                   and then Osint.Number_Of_Files = 1
                 then
                    Inform (Msg => "objects up to date.");
  
!                elsif Opt.Do_Not_Execute
                   and then First_Compiled_File /= No_File
                 then
                    Write_Name (First_Compiled_File);
--- 4811,4823 ----
  
                 elsif First_Compiled_File = No_File
                   and then not Do_Bind_Step
!                  and then not Quiet_Output
                   and then not Library_Rebuilt
                   and then Osint.Number_Of_Files = 1
                 then
                    Inform (Msg => "objects up to date.");
  
!                elsif Do_Not_Execute
                   and then First_Compiled_File /= No_File
                 then
                    Write_Name (First_Compiled_File);
*************** package body Make is
*** 4598,4605 ****
  
                 --    4) Made unit cannot be a main unit
  
!                if (Opt.Do_Not_Execute
!                    or Opt.List_Dependencies
                     or not Do_Bind_Step
                     or not Is_Main_Unit)
                   and then not No_Main_Subprogram
--- 4835,4842 ----
  
                 --    4) Made unit cannot be a main unit
  
!                if (Do_Not_Execute
!                    or List_Dependencies
                     or not Do_Bind_Step
                     or not Is_Main_Unit)
                   and then not No_Main_Subprogram
*************** package body Make is
*** 4659,4665 ****
                    --  and otherwise motivate the relink/rebind.
  
                    if not Executable_Obsolete then
!                      if not Opt.Quiet_Output then
                          Inform (Executable, "up to date.");
                       end if;
  
--- 4896,4902 ----
                    --  and otherwise motivate the relink/rebind.
  
                    if not Executable_Obsolete then
!                      if not Quiet_Output then
                          Inform (Executable, "up to date.");
                       end if;
  
*************** package body Make is
*** 4714,4720 ****
  
           begin
              Src_File      := Strip_Directory (Main_Source_File);
!             ALI_File      := Lib_File_Name (Src_File);
              Main_ALI_File := Full_Lib_File_Name (ALI_File);
  
              --  When In_Place_Mode, the library file can be located in the
--- 4951,4957 ----
  
           begin
              Src_File      := Strip_Directory (Main_Source_File);
!             ALI_File      := Lib_File_Name (Src_File, Current_Main_Index);
              Main_ALI_File := Full_Lib_File_Name (ALI_File);
  
              --  When In_Place_Mode, the library file can be located in the
*************** package body Make is
*** 4722,4728 ****
              --  library path. In this case, use the corresponding library file
              --  name.
  
!             if Main_ALI_File = No_File and then Opt.In_Place_Mode then
                 Get_Name_String (Get_Directory (Full_Source_Name (Src_File)));
                 Get_Name_String_And_Append (ALI_File);
                 Main_ALI_File := Name_Find;
--- 4959,4965 ----
              --  library path. In this case, use the corresponding library file
              --  name.
  
!             if Main_ALI_File = No_File and then In_Place_Mode then
                 Get_Name_String (Get_Directory (Full_Source_Name (Src_File)));
                 Get_Name_String_And_Append (ALI_File);
                 Main_ALI_File := Name_Find;
*************** package body Make is
*** 4737,4795 ****
           if Do_Bind_Step then
              Bind_Step : declare
                 Args : Argument_List
!                         (Binder_Switches.First .. Binder_Switches.Last + 1);
                 --  The arguments for the invocation of gnatbind
  
                 Last_Arg : Natural := Binder_Switches.Last;
                 --  Index of the last argument in Args
  
!                Mapping_FD : File_Descriptor := Invalid_FD;
!                --  A File Descriptor for an eventual mapping file
! 
!                Mapping_Path : Name_Id := No_Name;
!                --  The path name of the mapping file
! 
!                ALI_Unit : Name_Id := No_Name;
!                --  The unit name of an ALI file
! 
!                ALI_Name : Name_Id := No_Name;
!                --  The file name of the ALI file
! 
!                ALI_Project  : Project_Id := No_Project;
!                --  The project of the ALI file
! 
!                Bytes : Integer;
!                OK    : Boolean := True;
! 
!                Status : Boolean;
!                --  For call to Close
  
              begin
!                --  If it is the first time the bind step is performed,
!                --  check if there are shared libraries, so that gnatbind is
!                --  called with -shared.
  
!                if not Bind_Shared_Known then
!                   if Main_Project /= No_Project
!                      and then MLib.Tgt.Support_For_Libraries /= MLib.Tgt.None
!                   then
!                      for Proj in Projects.First .. Projects.Last loop
!                         if Projects.Table (Proj).Library and then
!                           Projects.Table (Proj).Library_Kind /= Static
!                         then
!                            Bind_Shared := Shared_Switch'Access;
  
!                            if GCC_Version >= 3 then
!                               Link_With_Shared_Libgcc :=
!                                 Shared_Libgcc_Switch'Access;
!                            end if;
  
!                            exit;
!                         end if;
!                      end loop;
!                   end if;
  
!                   Bind_Shared_Known := True;
                 end if;
  
                 --  Get all the binder switches
--- 4974,5026 ----
           if Do_Bind_Step then
              Bind_Step : declare
                 Args : Argument_List
!                         (Binder_Switches.First .. Binder_Switches.Last + 2);
                 --  The arguments for the invocation of gnatbind
  
                 Last_Arg : Natural := Binder_Switches.Last;
                 --  Index of the last argument in Args
  
!                Shared_Libs : Boolean := False;
!                --  Set to True when there are shared library project files or
!                --  when gnatbind is invoked with -shared.
  
              begin
!                --  Check if there are shared libraries, so that gnatbind is
!                --  called with -shared. Check also if gnatbind is called with
!                --  -shared, so that gnatlink is called with -shared-libgcc
!                --  for GCC version 3 and above, ensuring that the shared
!                --  version of libgcc will be used.
  
!                if Main_Project /= No_Project
!                  and then MLib.Tgt.Support_For_Libraries /= MLib.Tgt.None
!                then
!                   for Proj in Projects.First .. Projects.Last loop
!                      if Projects.Table (Proj).Library and then
!                        Projects.Table (Proj).Library_Kind /= Static
!                      then
!                         Shared_Libs := True;
!                         Bind_Shared := Shared_Switch'Access;
!                         exit;
!                      end if;
!                   end loop;
!                end if;
  
!                --  Check now for switch -shared
  
!                if not Shared_Libs then
!                   for J in Binder_Switches.First .. Last_Arg loop
!                      if Binder_Switches.Table (J).all = "-shared" then
!                         Shared_Libs := True;
!                         exit;
!                      end if;
!                   end loop;
!                end if;
  
!                --  If there are shared libraries, invoke gnatlink with
!                --  -shared-libgcc if GCC version is 3 or more.
! 
!                if Shared_Libs and then GCC_Version >= 3 then
!                   Link_With_Shared_Libgcc := Shared_Libgcc_Switch'Access;
                 end if;
  
                 --  Get all the binder switches
*************** package body Make is
*** 4798,4803 ****
--- 5029,5039 ----
                    Args (J) := Binder_Switches.Table (J);
                 end loop;
  
+                if There_Are_Stand_Alone_Libraries then
+                   Last_Arg := Last_Arg + 1;
+                   Args (Last_Arg) := Force_Elab_Flags_String'Access;
+                end if;
+ 
                 if Main_Project /= No_Project then
  
                    --  Put all the source directories in ADA_INCLUDE_PATH,
*************** package body Make is
*** 4808,4971 ****
                    --  If switch -C was specified, create a binder mapping file
  
                    if Create_Mapping_File then
!                      Tempdir.Create_Temp_File (Mapping_FD, Mapping_Path);
! 
!                      if Mapping_FD /= Invalid_FD then
! 
!                         --  Traverse all units
! 
!                         for J in Prj.Com.Units.First .. Prj.Com.Units.Last loop
!                            declare
!                               Unit : constant Prj.Com.Unit_Data :=
!                                        Prj.Com.Units.Table (J);
!                               use Prj.Com;
! 
!                            begin
!                               if Unit.Name /= No_Name then
! 
!                                  --  If there is a body, put it in the mapping
! 
!                                  if Unit.File_Names (Body_Part).Name /= No_Name
!                                    and then Unit.File_Names (Body_Part).Project
!                                                   /= No_Project
!                                  then
!                                     Get_Name_String (Unit.Name);
!                                     Name_Buffer
!                                       (Name_Len + 1 .. Name_Len + 2) := "%b";
!                                     Name_Len := Name_Len + 2;
!                                     ALI_Unit := Name_Find;
!                                     ALI_Name :=
!                                       Lib_File_Name
!                                         (Unit.File_Names (Body_Part).Name);
!                                     ALI_Project :=
!                                       Unit.File_Names (Body_Part).Project;
! 
!                                  --  Otherwise, if there is a spec, put it
!                                  --  in the mapping.
! 
!                                  elsif Unit.File_Names (Specification).Name
!                                                  /= No_Name
!                                    and then Unit.File_Names
!                                              (Specification).Project
!                                                 /= No_Project
!                                  then
!                                     Get_Name_String (Unit.Name);
!                                     Name_Buffer
!                                       (Name_Len + 1 .. Name_Len + 2) := "%s";
!                                     Name_Len := Name_Len + 2;
!                                     ALI_Unit := Name_Find;
!                                     ALI_Name := Lib_File_Name
!                                         (Unit.File_Names (Specification).Name);
!                                     ALI_Project :=
!                                       Unit.File_Names (Specification).Project;
! 
!                                  else
!                                     ALI_Name := No_Name;
!                                  end if;
! 
!                                  --  If we have something to put in the mapping
!                                  --  then we do it now. However, if the project
!                                  --  is extended, we don't put anything in the
!                                  --  mapping file, because we do not know where
!                                  --  the ALI file is: it might be in the ext-
!                                  --  ended project obj dir as well as in the
!                                  --  extending project obj dir.
! 
!                                  if ALI_Name /= No_Name
!                                     and then Projects.Table
!                                                (ALI_Project).Extended_By
!                                                         = No_Project
!                                     and then Projects.Table
!                                                (ALI_Project).Extends
!                                                         = No_Project
!                                  then
!                                     --  First line is the unit name
! 
!                                     Get_Name_String (ALI_Unit);
!                                     Name_Len := Name_Len + 1;
!                                     Name_Buffer (Name_Len) := ASCII.LF;
!                                     Bytes :=
!                                       Write
!                                         (Mapping_FD,
!                                          Name_Buffer (1)'Address,
!                                          Name_Len);
!                                     OK := Bytes = Name_Len;
! 
!                                     if OK then
! 
!                                        --  Second line it the ALI file name
! 
!                                        Get_Name_String (ALI_Name);
!                                        Name_Len := Name_Len + 1;
!                                        Name_Buffer (Name_Len) := ASCII.LF;
!                                        Bytes :=
!                                          Write
!                                            (Mapping_FD,
!                                             Name_Buffer (1)'Address,
!                                             Name_Len);
!                                        OK := Bytes = Name_Len;
!                                     end if;
! 
!                                     if OK then
! 
!                                        --  Third line it the ALI path name,
!                                        --  concatenation of the project
!                                        --  directory with the ALI file name.
! 
!                                        declare
!                                           ALI : constant String :=
!                                                   Get_Name_String (ALI_Name);
!                                        begin
!                                           Get_Name_String
!                                             (Projects.Table (ALI_Project).
!                                                Object_Directory);
! 
!                                           if Name_Buffer (Name_Len) /=
!                                             Directory_Separator
!                                           then
!                                              Name_Len := Name_Len + 1;
!                                              Name_Buffer (Name_Len) :=
!                                                Directory_Separator;
!                                           end if;
! 
!                                           Name_Buffer
!                                             (Name_Len + 1 ..
!                                                Name_Len + ALI'Length) := ALI;
!                                           Name_Len :=
!                                             Name_Len + ALI'Length + 1;
!                                           Name_Buffer (Name_Len) := ASCII.LF;
!                                           Bytes :=
!                                             Write
!                                               (Mapping_FD,
!                                                Name_Buffer (1)'Address,
!                                                Name_Len);
!                                           OK := Bytes = Name_Len;
!                                        end;
!                                     end if;
! 
!                                     --  If OK is False, it means we were unable
!                                     --  to write a line. No point in continuing
!                                     --  with the other units.
! 
!                                     exit when not OK;
!                                  end if;
!                               end if;
!                            end;
!                         end loop;
! 
!                         Close (Mapping_FD, Status);
! 
!                         OK := OK and Status;
! 
!                         --  If the creation of the mapping file was successful,
!                         --  we add the switch to the arguments of gnatbind.
! 
!                         if OK then
!                            Last_Arg := Last_Arg + 1;
!                            Args (Last_Arg) := new String'
!                                       ("-F=" & Get_Name_String (Mapping_Path));
!                         end if;
!                      end if;
                    end if;
  
                 end if;
--- 5044,5050 ----
                    --  If switch -C was specified, create a binder mapping file
  
                    if Create_Mapping_File then
!                      Create_Binder_Mapping_File (Args, Last_Arg);
                    end if;
  
                 end if;
*************** package body Make is
*** 4983,4989 ****
                       if not Debug.Debug_Flag_N
                         and then Mapping_Path /= No_Name
                       then
!                         Delete_File (Get_Name_String (Mapping_Path), OK);
                       end if;
  
                       --  And reraise the exception
--- 5062,5068 ----
                       if not Debug.Debug_Flag_N
                         and then Mapping_Path /= No_Name
                       then
!                         Delete_File (Get_Name_String (Mapping_Path), Discard);
                       end if;
  
                       --  And reraise the exception
*************** package body Make is
*** 4995,5001 ****
                 --  if one was created.
  
                 if not Debug.Debug_Flag_N and then Mapping_Path /= No_Name then
!                   Delete_File (Get_Name_String (Mapping_Path), OK);
                 end if;
              end Bind_Step;
           end if;
--- 5074,5080 ----
                 --  if one was created.
  
                 if not Debug.Debug_Flag_N and then Mapping_Path /= No_Name then
!                   Delete_File (Get_Name_String (Mapping_Path), Discard);
                 end if;
              end Bind_Step;
           end if;
*************** package body Make is
*** 5005,5011 ****
                 There_Are_Libraries  : Boolean := False;
                 Linker_Switches_Last : constant Integer := Linker_Switches.Last;
                 Path_Option : constant String_Access :=
!                                MLib.Tgt.Linker_Library_Path_Option;
                 Current : Natural;
                 Proj2   : Project_Id;
                 Depth   : Natural;
--- 5084,5090 ----
                 There_Are_Libraries  : Boolean := False;
                 Linker_Switches_Last : constant Integer := Linker_Switches.Last;
                 Path_Option : constant String_Access :=
!                                MLib.Linker_Library_Path_Option;
                 Current : Natural;
                 Proj2   : Project_Id;
                 Depth   : Natural;
*************** package body Make is
*** 5095,5102 ****
  
                       if Run_Path_Option and Path_Option /= null then
                          declare
!                            Option : String_Access;
!                            Length : Natural := Path_Option'Length;
                             Current : Natural;
  
                          begin
--- 5174,5181 ----
  
                       if Run_Path_Option and Path_Option /= null then
                          declare
!                            Option  : String_Access;
!                            Length  : Natural := Path_Option'Length;
                             Current : Natural;
  
                          begin
*************** package body Make is
*** 5160,5254 ****
                    --  other than the main project
  
                    declare
!                      Linker_Package : Package_Id;
!                      Options : Variable_Value;
! 
!                   begin
!                      Linker_Opts.Init;
! 
!                      for Index in 1 .. Projects.Last loop
!                         if Index /= Main_Project then
!                            Linker_Package :=
!                              Prj.Util.Value_Of
!                                (Name => Name_Linker,
!                                 In_Packages =>
!                                   Projects.Table (Index).Decl.Packages);
!                            Options :=
!                              Prj.Util.Value_Of
!                                (Name => Name_Ada,
!                                 Attribute_Or_Array_Name => Name_Linker_Options,
!                                 In_Package => Linker_Package);
! 
!                            --  If attribute is present, add the project with
!                            --  the attribute to table Linker_Opts.
! 
!                            if Options /= Nil_Variable_Value then
!                               Linker_Opts.Increment_Last;
!                               Linker_Opts.Table (Linker_Opts.Last) :=
!                                 (Project => Index, Options => Options.Values);
!                            end if;
!                         end if;
!                      end loop;
!                   end;
  
-                   declare
-                      Opt1    : Linker_Options_Data;
-                      Opt2    : Linker_Options_Data;
-                      Depth   : Natural;
-                      Options : String_List_Id;
-                      Option  : Name_Id;
                    begin
!                      --  Sort the project by increasing depths
! 
!                      for Index in 1 .. Linker_Opts.Last loop
!                         Opt1 := Linker_Opts.Table (Index);
!                         Depth := Projects.Table (Opt1.Project).Depth;
! 
!                         for J in Index + 1 .. Linker_Opts.Last loop
!                            Opt2 := Linker_Opts.Table (J);
! 
!                            if
!                              Projects.Table (Opt2.Project).Depth < Depth
!                            then
!                               Linker_Opts.Table (Index) := Opt2;
!                               Linker_Opts.Table (J) := Opt1;
!                               Opt1 := Opt2;
!                               Depth :=
!                                 Projects.Table (Opt1.Project).Depth;
!                            end if;
!                         end loop;
! 
!                         --  If Dir_Path has not been computed for this project,
!                         --  do it now.
! 
!                         if Projects.Table (Opt1.Project).Dir_Path = null then
!                            Projects.Table (Opt1.Project).Dir_Path :=
!                              new String'
!                                (Get_Name_String
!                                   (Projects.Table (Opt1.Project). Directory));
!                         end if;
! 
!                         Options := Opt1.Options;
! 
!                         --  Add each of the options to the linker switches
! 
!                         while Options /= Nil_String loop
!                            Option := String_Elements.Table (Options).Value;
!                            Options := String_Elements.Table (Options).Next;
!                            Linker_Switches.Increment_Last;
!                            Linker_Switches.Table (Linker_Switches.Last) :=
!                              new String'(Get_Name_String (Option));
! 
!                            --  Object files and -L switches specified with
!                            --  relative paths and must be converted to
!                            --  absolute paths.
! 
!                            Test_If_Relative_Path
!                              (Switch =>
!                                 Linker_Switches.Table (Linker_Switches.Last),
!                               Parent => Projects.Table (Opt1.Project).Dir_Path,
!                               Including_L_Switch => True);
!                         end loop;
                       end loop;
                    end;
                 end if;
--- 5239,5252 ----
                    --  other than the main project
  
                    declare
!                      Linker_Options : constant String_List :=
!                        Linker_Options_Switches (Main_Project);
  
                    begin
!                      for Option in Linker_Options'Range loop
!                         Linker_Switches.Increment_Last;
!                         Linker_Switches.Table (Linker_Switches.Last) :=
!                           Linker_Options (Option);
                       end loop;
                    end;
                 end if;
*************** package body Make is
*** 5300,5306 ****
  
                    exception
                       when Link_Failed =>
!                         if Osint.Number_Of_Files = 1 or not Opt.Keep_Going then
                             raise;
  
                          else
--- 5298,5304 ----
  
                    exception
                       when Link_Failed =>
!                         if Osint.Number_Of_Files = 1 or not Keep_Going then
                             raise;
  
                          else
*************** package body Make is
*** 5316,5322 ****
              end Link_Step;
           end if;
  
!          --  We go to here when we skip the bind and link steps.
  
           <<Next_Main>>
  
--- 5314,5320 ----
              end Link_Step;
           end if;
  
!          --  We go to here when we skip the bind and link steps
  
           <<Next_Main>>
  
*************** package body Make is
*** 5325,5330 ****
--- 5323,5332 ----
           if N_File < Osint.Number_Of_Files then
              Main_Source_File := Next_Main_Source;
  
+             if Current_File_Index /= No_Index then
+                Main_Index := Current_File_Index;
+             end if;
+ 
              if Main_Project /= No_Project then
  
                 --  Find the file name of the main unit
*************** package body Make is
*** 5402,5408 ****
                    --  if any.
  
                    if Do_Bind_Step and Binder_Package /= No_Package then
!                      if Opt.Verbose_Mode then
                          Write_Str ("Adding binder switches for """);
                          Write_Str (Main_Unit_File_Name);
                          Write_Line (""".");
--- 5404,5410 ----
                    --  if any.
  
                    if Do_Bind_Step and Binder_Package /= No_Package then
!                      if Verbose_Mode then
                          Write_Str ("Adding binder switches for """);
                          Write_Str (Main_Unit_File_Name);
                          Write_Line (""".");
*************** package body Make is
*** 5410,5415 ****
--- 5412,5418 ----
  
                       Add_Switches
                         (File_Name   => Main_Unit_File_Name,
+                         Index       => Main_Index,
                          The_Package => Binder_Package,
                          Program     => Binder);
                    end if;
*************** package body Make is
*** 5418,5424 ****
                    --  if any.
  
                    if Do_Link_Step and Linker_Package /= No_Package then
!                      if Opt.Verbose_Mode then
                          Write_Str ("Adding linker switches for""");
                          Write_Str (Main_Unit_File_Name);
                          Write_Line (""".");
--- 5421,5427 ----
                    --  if any.
  
                    if Do_Link_Step and Linker_Package /= No_Package then
!                      if Verbose_Mode then
                          Write_Str ("Adding linker switches for""");
                          Write_Str (Main_Unit_File_Name);
                          Write_Line (""".");
*************** package body Make is
*** 5426,5431 ****
--- 5429,5435 ----
  
                       Add_Switches
                         (File_Name   => Main_Unit_File_Name,
+                         Index       => Main_Index,
                          The_Package => Linker_Package,
                          Program     => Linker);
                    end if;
*************** package body Make is
*** 5477,5482 ****
--- 5481,5491 ----
                 end;
              end if;
           end if;
+ 
+          --  Remove all marks to be sure to check sources for all executables,
+          --  as the switches may be different and -s may be in use.
+ 
+          Delete_All_Marks;
        end loop Multiple_Main_Loop;
  
        if Failed_Links.Last > 0 then
*************** package body Make is
*** 5530,5536 ****
        when X : others =>
           Write_Line (Exception_Information (X));
           Make_Failed ("INTERNAL ERROR. Please report.");
- 
     end Gnatmake;
  
     ----------
--- 5539,5544 ----
*************** package body Make is
*** 5549,5555 ****
     function In_Ada_Lib_Dir (File : File_Name_Type) return Boolean is
        D : constant Name_Id := Get_Directory (File);
        B : constant Byte    := Get_Name_Table_Byte (D);
- 
     begin
        return (B and Ada_Lib_Dir) /= 0;
     end In_Ada_Lib_Dir;
--- 5557,5562 ----
*************** package body Make is
*** 5641,5657 ****
     ----------------
  
     procedure Initialize is
-       Next_Arg : Positive;
- 
     begin
        --  Override default initialization of Check_Object_Consistency
        --  since this is normally False for GNATBIND, but is True for
        --  GNATMAKE since we do not need to check source consistency
        --  again once GNATMAKE has looked at the sources to check.
  
!       Opt.Check_Object_Consistency := True;
  
!       --  Package initializations. The order of calls is important here.
  
        Output.Set_Standard_Error;
  
--- 5648,5662 ----
     ----------------
  
     procedure Initialize is
     begin
        --  Override default initialization of Check_Object_Consistency
        --  since this is normally False for GNATBIND, but is True for
        --  GNATMAKE since we do not need to check source consistency
        --  again once GNATMAKE has looked at the sources to check.
  
!       Check_Object_Consistency := True;
  
!       --  Package initializations. The order of calls is important here
  
        Output.Set_Standard_Error;
  
*************** package body Make is
*** 5672,5681 ****
  
        Mains.Delete;
  
!       Next_Arg := 1;
!       Scan_Args : while Next_Arg <= Argument_Count loop
           Scan_Make_Arg (Argument (Next_Arg), And_Save => True);
-          Next_Arg := Next_Arg + 1;
        end loop Scan_Args;
  
        if Usage_Requested then
--- 5677,5718 ----
  
        Mains.Delete;
  
!       --  Add the directory where gnatmake is invoked in front of the
!       --  path, if gnatmake is invoked with directory information.
!       --  Only do this if the platform is not VMS, where the notion of path
!       --  does not really exist.
! 
!       if not OpenVMS then
!          declare
!             Command : constant String := Command_Name;
! 
!          begin
!             for Index in reverse Command'Range loop
!                if Command (Index) = Directory_Separator then
!                   declare
!                      Absolute_Dir : constant String :=
!                                       Normalize_Pathname
!                                         (Command (Command'First .. Index));
! 
!                      PATH : constant String :=
!                                       Absolute_Dir &
!                                       Path_Separator &
!                                       Getenv ("PATH").all;
! 
!                   begin
!                      Setenv ("PATH", PATH);
!                   end;
! 
!                   exit;
!                end if;
!             end loop;
!          end;
!       end if;
! 
!       --  Scan the switches and arguments
! 
!       Scan_Args : for Next_Arg in 1 .. Argument_Count loop
           Scan_Make_Arg (Argument (Next_Arg), And_Save => True);
        end loop Scan_Args;
  
        if Usage_Requested then
*************** package body Make is
*** 5689,5702 ****
  
        --  Test for trailing -o switch
  
!       elsif Opt.Output_File_Name_Present
          and then not Output_File_Name_Seen
        then
           Make_Failed ("output file name missing after -o");
  
        --  Test for trailing -D switch
  
!       elsif Opt.Object_Directory_Present
          and then not Object_Directory_Seen then
           Make_Failed ("object directory missing after -D");
        end if;
--- 5726,5739 ----
  
        --  Test for trailing -o switch
  
!       elsif Output_File_Name_Present
          and then not Output_File_Name_Seen
        then
           Make_Failed ("output file name missing after -o");
  
        --  Test for trailing -D switch
  
!       elsif Object_Directory_Present
          and then not Object_Directory_Seen then
           Make_Failed ("object directory missing after -D");
        end if;
*************** package body Make is
*** 5730,5736 ****
  
           --  A project file was specified by a -P switch
  
!          if Opt.Verbose_Mode then
              Write_Eol;
              Write_Str ("Parsing Project File """);
              Write_Str (Project_File_Name.all);
--- 5767,5773 ----
  
           --  A project file was specified by a -P switch
  
!          if Verbose_Mode then
              Write_Eol;
              Write_Str ("Parsing Project File """);
              Write_Str (Project_File_Name.all);
*************** package body Make is
*** 5740,5746 ****
  
           --  Avoid looking in the current directory for ALI files
  
!          --  Opt.Look_In_Primary_Dir := False;
  
           --  Set the project parsing verbosity to whatever was specified
           --  by a possible -vP switch.
--- 5777,5783 ----
  
           --  Avoid looking in the current directory for ALI files
  
!          --  Look_In_Primary_Dir := False;
  
           --  Set the project parsing verbosity to whatever was specified
           --  by a possible -vP switch.
*************** package body Make is
*** 5759,5765 ****
              Make_Failed ("""", Project_File_Name.all, """ processing failed");
           end if;
  
!          if Opt.Verbose_Mode then
              Write_Eol;
              Write_Str ("Parsing of Project File """);
              Write_Str (Project_File_Name.all);
--- 5796,5802 ----
              Make_Failed ("""", Project_File_Name.all, """ processing failed");
           end if;
  
!          if Verbose_Mode then
              Write_Eol;
              Write_Str ("Parsing of Project File """);
              Write_Str (Project_File_Name.all);
*************** package body Make is
*** 5775,5782 ****
  
           --  Compute depth of each project
  
           Recursive_Compute_Depth
!            (Main_Project, Visited => No_Projects, Depth => 0);
  
        else
  
--- 5812,5824 ----
  
           --  Compute depth of each project
  
+          for Proj in 1 .. Projects.Last loop
+             Projects.Table (Proj).Seen := False;
+             Projects.Table (Proj).Depth := 0;
+          end loop;
+ 
           Recursive_Compute_Depth
!            (Main_Project, Depth => 1);
  
        else
  
*************** package body Make is
*** 5806,5819 ****
  
        Project_Object_Directory := No_Project;
  
-       --  Set the marking label to a value that is not zero
- 
-       Marking_Label := 1;
     end Initialize;
  
!    -----------------------------------
!    -- Insert_Project_Sources_Into_Q --
!    -----------------------------------
  
     procedure Insert_Project_Sources
       (The_Project  : Project_Id;
--- 5848,5858 ----
  
        Project_Object_Directory := No_Project;
  
     end Initialize;
  
!    ----------------------------
!    -- Insert_Project_Sources --
!    ----------------------------
  
     procedure Insert_Project_Sources
       (The_Project  : Project_Id;
*************** package body Make is
*** 5941,5947 ****
              --  is not marked.
  
              if Sfile /= No_Name and then not Is_Marked (Sfile) then
!                if Opt.Verbose_Mode then
                    Write_Str ("Adding """);
                    Write_Str (Get_Name_String (Sfile));
                    Write_Line (""" to the queue");
--- 5980,5986 ----
              --  is not marked.
  
              if Sfile /= No_Name and then not Is_Marked (Sfile) then
!                if Verbose_Mode then
                    Write_Str ("Adding """);
                    Write_Str (Get_Name_String (Sfile));
                    Write_Line (""" to the queue");
*************** package body Make is
*** 5959,5965 ****
              --  queue. This will allow parallel compilation processes if -jx
              --  switch is used.
  
!             if Opt.Verbose_Mode then
                 Write_Str ("Adding """);
                 Write_Str (Get_Name_String (Sfile));
                 Write_Line (""" as if on the command line");
--- 5998,6004 ----
              --  queue. This will allow parallel compilation processes if -jx
              --  switch is used.
  
!             if Verbose_Mode then
                 Write_Str ("Adding """);
                 Write_Str (Get_Name_String (Sfile));
                 Write_Line (""" as if on the command line");
*************** package body Make is
*** 5977,6038 ****
  
     procedure Insert_Q
       (Source_File : File_Name_Type;
!       Source_Unit : Unit_Name_Type := No_Name)
     is
     begin
        if Debug.Debug_Flag_Q then
           Write_Str ("   Q := Q + [ ");
           Write_Name (Source_File);
           Write_Str (" ] ");
           Write_Eol;
        end if;
  
!       Q.Table (Q.Last).File := Source_File;
!       Q.Table (Q.Last).Unit := Source_Unit;
        Q.Increment_Last;
     end Insert_Q;
  
-    ----------------------------
-    -- Is_External_Assignment --
-    ----------------------------
- 
-    function Is_External_Assignment (Argv : String) return Boolean is
-       Start     : Positive := 3;
-       Finish    : Natural := Argv'Last;
-       Equal_Pos : Natural;
- 
-    begin
-       if Argv'Last < 5 then
-          return False;
- 
-       elsif Argv (3) = '"' then
-          if Argv (Argv'Last) /= '"' or else Argv'Last < 7 then
-             return False;
-          else
-             Start := 4;
-             Finish := Argv'Last - 1;
-          end if;
-       end if;
- 
-       Equal_Pos := Start;
- 
-       while Equal_Pos <= Finish and then Argv (Equal_Pos) /= '=' loop
-          Equal_Pos := Equal_Pos + 1;
-       end loop;
- 
-       if Equal_Pos = Start
-         or else Equal_Pos >= Finish
-       then
-          return False;
- 
-       else
-          Prj.Ext.Add
-            (External_Name => Argv (Start .. Equal_Pos - 1),
-             Value         => Argv (Equal_Pos + 1 .. Finish));
-          return True;
-       end if;
-    end Is_External_Assignment;
- 
     ---------------------
     -- Is_In_Obsoleted --
     ---------------------
--- 6016,6045 ----
  
     procedure Insert_Q
       (Source_File : File_Name_Type;
!       Source_Unit : Unit_Name_Type := No_Name;
!       Index       : Int            := 0)
     is
     begin
        if Debug.Debug_Flag_Q then
           Write_Str ("   Q := Q + [ ");
           Write_Name (Source_File);
+ 
+          if Index /= 0 then
+             Write_Str (", ");
+             Write_Int (Index);
+          end if;
+ 
           Write_Str (" ] ");
           Write_Eol;
        end if;
  
!       Q.Table (Q.Last) :=
!         (File  => Source_File,
!          Unit  => Source_Unit,
!          Index => Index);
        Q.Increment_Last;
     end Insert_Q;
  
     ---------------------
     -- Is_In_Obsoleted --
     ---------------------
*************** package body Make is
*** 6153,6167 ****
        return True;
     end Is_In_Object_Directory;
  
-    ---------------
-    -- Is_Marked --
-    ---------------
- 
-    function Is_Marked (Source_File : File_Name_Type) return Boolean is
-    begin
-       return Get_Name_Table_Byte (Source_File) = Marking_Label;
-    end Is_Marked;
- 
     ----------
     -- Link --
     ----------
--- 6160,6165 ----
*************** package body Make is
*** 6229,6235 ****
  
           --  We have to provide the full library file name in In_Place_Mode
  
!          if Opt.In_Place_Mode then
              Lib_Name := Full_Lib_File_Name (Lib_Name);
           end if;
  
--- 6227,6233 ----
  
           --  We have to provide the full library file name in In_Place_Mode
  
!          if In_Place_Mode then
              Lib_Name := Full_Lib_File_Name (Lib_Name);
           end if;
  
*************** package body Make is
*** 6249,6255 ****
              then
                 null;
              else
!                if not Opt.Quiet_Output then
                    Src_Name := Full_Source_Name (Src_Name);
                 end if;
  
--- 6247,6253 ----
              then
                 null;
              else
!                if not Quiet_Output then
                    Src_Name := Full_Source_Name (Src_Name);
                 end if;
  
*************** package body Make is
*** 6275,6350 ****
        Set_Standard_Error;
     end List_Depend;
  
!    -----------
!    -- Mains --
!    -----------
! 
!    package body Mains is
! 
!       package Names is new Table.Table
!         (Table_Component_Type => File_Name_Type,
!          Table_Index_Type     => Integer,
!          Table_Low_Bound      => 1,
!          Table_Initial        => 10,
!          Table_Increment      => 100,
!          Table_Name           => "Make.Mains.Names");
!       --  The table that stores the main
! 
!       Current : Natural := 0;
!       --  The index of the last main retrieved from the table
! 
!       --------------
!       -- Add_Main --
!       --------------
! 
!       procedure Add_Main (Name : String) is
!       begin
!          Name_Len := 0;
!          Add_Str_To_Name_Buffer (Name);
!          Names.Increment_Last;
!          Names.Table (Names.Last) := Name_Find;
!       end Add_Main;
! 
!       ------------
!       -- Delete --
!       ------------
! 
!       procedure Delete is
!       begin
!          Names.Set_Last (0);
!          Reset;
!       end Delete;
! 
!       ---------------
!       -- Next_Main --
!       ---------------
! 
!       function Next_Main return String is
!       begin
!          if Current >= Names.Last then
!             return "";
! 
!          else
!             Current := Current + 1;
!             return Get_Name_String (Names.Table (Current));
!          end if;
!       end Next_Main;
! 
!       procedure Reset is
!       begin
!          Current := 0;
!       end Reset;
! 
!    end Mains;
! 
!    ----------
!    -- Mark --
!    ----------
  
!    procedure Mark (Source_File : File_Name_Type) is
     begin
!       Set_Name_Table_Byte (Source_File, Marking_Label);
!    end Mark;
  
     --------------------
     -- Mark_Directory --
--- 6273,6287 ----
        Set_Standard_Error;
     end List_Depend;
  
!    -----------------
!    -- Make_Failed --
!    -----------------
  
!    procedure Make_Failed (S1 : String; S2 : String := ""; S3 : String := "") is
     begin
!       Delete_All_Temp_Files;
!       Osint.Fail (S1, S2, S3);
!    end Make_Failed;
  
     --------------------
     -- Mark_Directory --
*************** package body Make is
*** 6358,6364 ****
        B : Byte;
  
     begin
!       --  Dir last character is supposed to be a directory separator.
  
        Name_Len := Dir'Length;
        Name_Buffer (1 .. Name_Len) := Dir;
--- 6295,6301 ----
        B : Byte;
  
     begin
!       --  Dir last character is supposed to be a directory separator
  
        Name_Len := Dir'Length;
        Name_Buffer (1 .. Name_Len) := Dir;
*************** package body Make is
*** 6381,6406 ****
  
     procedure Recursive_Compute_Depth
       (Project : Project_Id;
-       Visited : Project_Array;
        Depth   : Natural)
     is
        List : Project_List;
        Proj : Project_Id;
-       OK : Boolean;
-       New_Visited : constant Project_Array := Visited & Project;
  
     begin
!       --  Nothing to do if there is no project
  
!       if Project = No_Project then
           return;
        end if;
  
!       --  If current depth of project is lower than Depth, adjust it
  
!       if Projects.Table (Project).Depth < Depth then
!          Projects.Table (Project).Depth := Depth;
!       end if;
  
        List := Projects.Table (Project).Imported_Projects;
  
--- 6318,6345 ----
  
     procedure Recursive_Compute_Depth
       (Project : Project_Id;
        Depth   : Natural)
     is
        List : Project_List;
        Proj : Project_Id;
  
     begin
!       --  Nothing to do if there is no project or if the project has already
!       --  been seen or if the depth is large enough.
  
!       if Project = No_Project
!         or else Projects.Table (Project).Seen
!         or else Projects.Table (Project).Depth >= Depth
!       then
           return;
        end if;
  
!       Projects.Table (Project).Depth := Depth;
  
!       --  Mark the project as Seen to avoid endless loop caused by limited
!       --  withs.
! 
!       Projects.Table (Project).Seen := True;
  
        List := Projects.Table (Project).Imported_Projects;
  
*************** package body Make is
*** 6409,6442 ****
        while List /= Empty_Project_List loop
           Proj := Project_Lists.Table (List).Project;
           List := Project_Lists.Table (List).Next;
! 
!          OK := True;
! 
!          --  To avoid endless loops due to cycles with limited widts,
!          --  do not revisit a project that is already in the chain of imports
!          --  that brought us here.
! 
!          for J in Visited'Range loop
!             if Visited (J) = Proj then
!                OK := False;
!                exit;
!             end if;
!          end loop;
! 
!          if OK then
!             Recursive_Compute_Depth
!               (Project => Proj,
!                Visited => New_Visited,
!                Depth => Depth + 1);
!          end if;
        end loop;
  
        --  Visit a project being extended, if any
  
        Recursive_Compute_Depth
          (Project => Projects.Table (Project).Extends,
!          Visited => New_Visited,
!          Depth => Depth + 1);
     end Recursive_Compute_Depth;
  
     -----------------------
--- 6348,6367 ----
        while List /= Empty_Project_List loop
           Proj := Project_Lists.Table (List).Project;
           List := Project_Lists.Table (List).Next;
!          Recursive_Compute_Depth
!            (Project => Proj,
!             Depth => Depth + 1);
        end loop;
  
        --  Visit a project being extended, if any
  
        Recursive_Compute_Depth
          (Project => Projects.Table (Project).Extends,
!          Depth   => Depth + 1);
! 
!       --  Reset the Seen flag, as we leave this project
! 
!       Projects.Table (Project).Seen := False;
     end Recursive_Compute_Depth;
  
     -----------------------
*************** package body Make is
*** 6479,6485 ****
        --  flag (that is we have seen a -o), then the next argument is
        --  the name of the output executable.
  
!       elsif Opt.Output_File_Name_Present
          and then not Output_File_Name_Seen
        then
           Output_File_Name_Seen := True;
--- 6404,6410 ----
        --  flag (that is we have seen a -o), then the next argument is
        --  the name of the output executable.
  
!       elsif Output_File_Name_Present
          and then not Output_File_Name_Seen
        then
           Output_File_Name_Seen := True;
*************** package body Make is
*** 6493,6517 ****
              --  Automatically add the executable suffix if it has not been
              --  specified explicitly.
  
!             if Executable_Suffix'Length /= 0
!               and then (Argv'Length <= Executable_Suffix'Length
!                         or else Argv (Argv'Last - Executable_Suffix'Length + 1
!                                         .. Argv'Last) /= Executable_Suffix)
!             then
!                Add_Switch
!                  (Argv & Executable_Suffix,
!                   Linker,
!                   And_Save => And_Save);
!             else
!                Add_Switch (Argv, Linker, And_Save => And_Save);
!             end if;
           end if;
  
        --  If the previous switch has set the Object_Directory_Present flag
        --  (that is we have seen a -D), then the next argument is
        --  the path name of the object directory..
  
!       elsif Opt.Object_Directory_Present
          and then not Object_Directory_Seen
        then
           Object_Directory_Seen := True;
--- 6418,6454 ----
              --  Automatically add the executable suffix if it has not been
              --  specified explicitly.
  
!             declare
!                Canonical_Argv : String := Argv;
!             begin
!                --  Get the file name in canonical case to accept as is
!                --  names ending with ".EXE" on VMS and Windows.
! 
!                Canonical_Case_File_Name (Canonical_Argv);
! 
!                if Executable_Suffix'Length /= 0
!                  and then (Canonical_Argv'Length <= Executable_Suffix'Length
!                         or else Canonical_Argv
!                                   (Canonical_Argv'Last -
!                                    Executable_Suffix'Length + 1
!                                    .. Canonical_Argv'Last)
!                                 /= Executable_Suffix)
!                then
!                   Add_Switch
!                     (Argv & Executable_Suffix,
!                      Linker,
!                      And_Save => And_Save);
!                else
!                   Add_Switch (Argv, Linker, And_Save => And_Save);
!                end if;
!             end;
           end if;
  
        --  If the previous switch has set the Object_Directory_Present flag
        --  (that is we have seen a -D), then the next argument is
        --  the path name of the object directory..
  
!       elsif Object_Directory_Present
          and then not Object_Directory_Seen
        then
           Object_Directory_Seen := True;
*************** package body Make is
*** 6581,6587 ****
  
           if Argv'Length > 2 and then Argv (1 .. 2) = "-I" then
              if Argv (3 .. Argv'Last) = "-" then
!                Opt.Look_In_Primary_Dir := False;
  
              elsif Program_Args = Compiler then
                 if Argv (3 .. Argv'Last) /= "-" then
--- 6518,6524 ----
  
           if Argv'Length > 2 and then Argv (1 .. 2) = "-I" then
              if Argv (3 .. Argv'Last) = "-" then
!                Look_In_Primary_Dir := False;
  
              elsif Program_Args = Compiler then
                 if Argv (3 .. Argv'Last) /= "-" then
*************** package body Make is
*** 6683,6691 ****
  
                 --  Valid --RTS switch
  
!                Opt.No_Stdinc := True;
!                Opt.No_Stdlib := True;
!                Opt.RTS_Switch := True;
  
                 declare
                    Src_Path_Name : constant String_Ptr :=
--- 6620,6628 ----
  
                 --  Valid --RTS switch
  
!                No_Stdinc := True;
!                No_Stdlib := True;
!                RTS_Switch := True;
  
                 declare
                    Src_Path_Name : constant String_Ptr :=
*************** package body Make is
*** 6737,6743 ****
           --  -I-
  
           elsif Argv (2 .. Argv'Last) = "I-" then
!             Opt.Look_In_Primary_Dir := False;
  
           --  Forbid  -?-  or  -??-  where ? is any character
  
--- 6674,6680 ----
           --  -I-
  
           elsif Argv (2 .. Argv'Last) = "I-" then
!             Look_In_Primary_Dir := False;
  
           --  Forbid  -?-  or  -??-  where ? is any character
  
*************** package body Make is
*** 6796,6809 ****
           elsif Argv (2) = 'L' then
              Add_Switch (Argv, Linker, And_Save => And_Save);
  
!          --  For -gxxxxx,-pg,-mxxx: give the switch to both the compiler and
!          --  the linker (except for -gnatxxx which is only for the compiler)
  
           elsif
             (Argv (2) = 'g' and then (Argv'Last < 5
                                         or else Argv (2 .. 5) /= "gnat"))
               or else Argv (2 .. Argv'Last) = "pg"
               or else (Argv (2) = 'm' and then Argv'Last > 2)
           then
              Add_Switch (Argv, Compiler, And_Save => And_Save);
              Add_Switch (Argv, Linker, And_Save => And_Save);
--- 6733,6751 ----
           elsif Argv (2) = 'L' then
              Add_Switch (Argv, Linker, And_Save => And_Save);
  
!          --  For -gxxxxx, -pg, -mxxx, -fxxx: give the switch to both the
!          --  compiler and the linker (except for -gnatxxx which is only for
!          --  the compiler). Some of the -mxxx (for example -m64) and -fxxx
!          --  (for example -ftest-coverage for gcov) need to be used when
!          --  compiling the binder generated files, and using all these gcc
!          --  switches for the binder generated files should not be a problem.
  
           elsif
             (Argv (2) = 'g' and then (Argv'Last < 5
                                         or else Argv (2 .. 5) /= "gnat"))
               or else Argv (2 .. Argv'Last) = "pg"
               or else (Argv (2) = 'm' and then Argv'Last > 2)
+              or else (Argv (2) = 'f' and then Argv'Last > 2)
           then
              Add_Switch (Argv, Compiler, And_Save => And_Save);
              Add_Switch (Argv, Linker, And_Save => And_Save);
*************** package body Make is
*** 6835,6841 ****
           elsif Argv (2) = 'd'
             and then Argv'Last = 2
           then
!             Opt.Display_Compilation_Progress := True;
  
           --  -i
  
--- 6777,6783 ----
           elsif Argv (2) = 'd'
             and then Argv'Last = 2
           then
!             Display_Compilation_Progress := True;
  
           --  -i
  
*************** package body Make is
*** 6862,6868 ****
           elsif Argv (2) = 'm'
             and then Argv'Last = 2
           then
!             Opt.Minimal_Recompilation := True;
  
           --  -u
  
--- 6804,6810 ----
           elsif Argv (2) = 'm'
             and then Argv'Last = 2
           then
!             Minimal_Recompilation := True;
  
           --  -u
  
*************** package body Make is
*** 6870,6876 ****
             and then Argv'Last = 2
           then
              Unique_Compile   := True;
!             Opt.Compile_Only := True;
              Do_Bind_Step     := False;
              Do_Link_Step     := False;
  
--- 6812,6818 ----
             and then Argv'Last = 2
           then
              Unique_Compile   := True;
!             Compile_Only := True;
              Do_Bind_Step     := False;
              Do_Link_Step     := False;
  
*************** package body Make is
*** 6881,6887 ****
           then
              Unique_Compile_All_Projects := True;
              Unique_Compile   := True;
!             Opt.Compile_Only := True;
              Do_Bind_Step     := False;
              Do_Link_Step     := False;
  
--- 6823,6829 ----
           then
              Unique_Compile_All_Projects := True;
              Unique_Compile   := True;
!             Compile_Only := True;
              Do_Bind_Step     := False;
              Do_Link_Step     := False;
  
*************** package body Make is
*** 6962,6970 ****
              --  step are not executed.
  
              Add_Switch (Argv, Compiler, And_Save => And_Save);
!             Opt.Operating_Mode := Opt.Check_Semantics;
!             Opt.Check_Object_Consistency := False;
!             Opt.Compile_Only             := True;
              Do_Bind_Step                 := False;
              Do_Link_Step                 := False;
  
--- 6904,6912 ----
              --  step are not executed.
  
              Add_Switch (Argv, Compiler, And_Save => And_Save);
!             Operating_Mode := Check_Semantics;
!             Check_Object_Consistency := False;
!             Compile_Only             := True;
              Do_Bind_Step                 := False;
              Do_Link_Step                 := False;
  
*************** package body Make is
*** 6973,6979 ****
              --  Don't pass -nostdlib to gnatlink, it will disable
              --  linking with all standard library files.
  
!             Opt.No_Stdlib := True;
  
              Add_Switch (Argv, Compiler, And_Save => And_Save);
              Add_Switch (Argv, Binder, And_Save => And_Save);
--- 6915,6921 ----
              --  Don't pass -nostdlib to gnatlink, it will disable
              --  linking with all standard library files.
  
!             No_Stdlib := True;
  
              Add_Switch (Argv, Compiler, And_Save => And_Save);
              Add_Switch (Argv, Binder, And_Save => And_Save);
*************** package body Make is
*** 6982,7000 ****
  
              --  Pass -nostdinc to the Compiler and to gnatbind
  
!             Opt.No_Stdinc := True;
              Add_Switch (Argv, Compiler, And_Save => And_Save);
              Add_Switch (Argv, Binder, And_Save => And_Save);
  
              --  By default all switches with more than one character
              --  or one character switches which are not in 'a' .. 'z'
!             --  (except 'C', 'F', and 'M') are passed to the compiler,
              --  unless we are dealing with a debug switch (starts with 'd')
  
           elsif Argv (2) /= 'd'
             and then Argv (2 .. Argv'Last) /= "C"
             and then Argv (2 .. Argv'Last) /= "F"
             and then Argv (2 .. Argv'Last) /= "M"
             and then (Argv'Length > 2 or else Argv (2) not in 'a' .. 'z')
           then
              Add_Switch (Argv, Compiler, And_Save => And_Save);
--- 6924,6945 ----
  
              --  Pass -nostdinc to the Compiler and to gnatbind
  
!             No_Stdinc := True;
              Add_Switch (Argv, Compiler, And_Save => And_Save);
              Add_Switch (Argv, Binder, And_Save => And_Save);
  
              --  By default all switches with more than one character
              --  or one character switches which are not in 'a' .. 'z'
!             --  (except 'C', 'F', 'M' and 'B') are passed to the compiler,
              --  unless we are dealing with a debug switch (starts with 'd')
+             --  or an extended gnatmake switch (starts with 'e').
  
           elsif Argv (2) /= 'd'
+            and then Argv (2) /= 'e'
             and then Argv (2 .. Argv'Last) /= "C"
             and then Argv (2 .. Argv'Last) /= "F"
             and then Argv (2 .. Argv'Last) /= "M"
+            and then Argv (2 .. Argv'Last) /= "B"
             and then (Argv'Length > 2 or else Argv (2) not in 'a' .. 'z')
           then
              Add_Switch (Argv, Compiler, And_Save => And_Save);
*************** package body Make is
*** 7020,7025 ****
--- 6965,6971 ----
     function Switches_Of
       (Source_File      : Name_Id;
        Source_File_Name : String;
+       Source_Index     : Int;
        Naming           : Naming_Data;
        In_Package       : Package_Id;
        Allow_ALI        : Boolean) return Variable_Value
*************** package body Make is
*** 7041,7057 ****
     begin
        Switches :=
          Prj.Util.Value_Of
!         (Index => Source_File,
!          In_Array => Switches_Array);
  
        if Switches = Nil_Variable_Value then
           declare
              Name        : String (1 .. Source_File_Name'Length + 3);
              Last        : Positive := Source_File_Name'Length;
              Spec_Suffix : constant String :=
!                             Get_Name_String (Naming.Current_Spec_Suffix);
              Body_Suffix : constant String :=
!                             Get_Name_String (Naming.Current_Body_Suffix);
              Truncated   : Boolean := False;
  
           begin
--- 6987,7004 ----
     begin
        Switches :=
          Prj.Util.Value_Of
!           (Index     => Source_File,
!            Src_Index => Source_Index,
!            In_Array  => Switches_Array);
  
        if Switches = Nil_Variable_Value then
           declare
              Name        : String (1 .. Source_File_Name'Length + 3);
              Last        : Positive := Source_File_Name'Length;
              Spec_Suffix : constant String :=
!                             Get_Name_String (Naming.Ada_Spec_Suffix);
              Body_Suffix : constant String :=
!                             Get_Name_String (Naming.Ada_Body_Suffix);
              Truncated   : Boolean := False;
  
           begin
*************** package body Make is
*** 7079,7086 ****
                 Name_Buffer (1 .. Name_Len) := Name (1 .. Last);
                 Switches :=
                   Prj.Util.Value_Of
!                  (Index => Name_Find,
!                   In_Array => Switches_Array);
  
                 if Switches = Nil_Variable_Value
                   and then Allow_ALI
--- 7026,7034 ----
                 Name_Buffer (1 .. Name_Len) := Name (1 .. Last);
                 Switches :=
                   Prj.Util.Value_Of
!                    (Index     => Name_Find,
!                     Src_Index => 0,
!                     In_Array  => Switches_Array);
  
                 if Switches = Nil_Variable_Value
                   and then Allow_ALI
*************** package body Make is
*** 7096,7195 ****
                    Name_Buffer (1 .. Name_Len) := Name (1 .. Name_Len);
                    Switches :=
                      Prj.Util.Value_Of
!                        (Index => Name_Find,
!                         In_Array => Switches_Array);
                 end if;
              end if;
           end;
        end if;
  
        if Switches = Nil_Variable_Value then
!          Switches := Prj.Util.Value_Of
!                                 (Index => Name_Ada, In_Array => Defaults);
        end if;
  
        return Switches;
     end Switches_Of;
  
-    ---------------------------
-    -- Test_If_Relative_Path --
-    ---------------------------
- 
-    procedure Test_If_Relative_Path
-      (Switch             : in out String_Access;
-       Parent             : String_Access;
-       Including_L_Switch : Boolean := True)
-    is
-    begin
-       if Switch /= null then
- 
-          declare
-             Sw : String (1 .. Switch'Length);
-             Start : Positive;
- 
-          begin
-             Sw := Switch.all;
- 
-             if Sw (1) = '-' then
-                if Sw'Length >= 3
-                  and then (Sw (2) = 'A'
-                            or else Sw (2) = 'I'
-                            or else (Including_L_Switch and then Sw (2) = 'L'))
-                then
-                   Start := 3;
- 
-                   if Sw = "-I-" then
-                      return;
-                   end if;
- 
-                elsif Sw'Length >= 4
-                  and then (Sw (2 .. 3) = "aL"
-                            or else Sw (2 .. 3) = "aO"
-                            or else Sw (2 .. 3) = "aI")
-                then
-                   Start := 4;
- 
-                else
-                   return;
-                end if;
- 
-                --  Because relative path arguments to --RTS= may be relative
-                --  to the search directory prefix, those relative path
-                --  arguments are not converted.
- 
-                if not Is_Absolute_Path (Sw (Start .. Sw'Last)) then
-                   if Parent = null or else Parent'Length = 0 then
-                      Make_Failed
-                        ("relative search path switches (""",
-                         Sw,
-                         """) are not allowed");
- 
-                   else
-                      Switch :=
-                        new String'
-                          (Sw (1 .. Start - 1) &
-                           Parent.all &
-                           Directory_Separator &
-                           Sw (Start .. Sw'Last));
-                   end if;
-                end if;
- 
-             else
-                if not Is_Absolute_Path (Sw) then
-                   if Parent = null or else Parent'Length = 0 then
-                      Make_Failed
-                        ("relative paths (""", Sw, """) are not allowed");
- 
-                   else
-                      Switch :=
-                        new String'(Parent.all & Directory_Separator & Sw);
-                   end if;
-                end if;
-             end if;
-          end;
-       end if;
-    end Test_If_Relative_Path;
- 
     -----------
     -- Usage --
     -----------
--- 7044,7068 ----
                    Name_Buffer (1 .. Name_Len) := Name (1 .. Name_Len);
                    Switches :=
                      Prj.Util.Value_Of
!                       (Index     => Name_Find,
!                        Src_Index => 0,
!                        In_Array  => Switches_Array);
                 end if;
              end if;
           end;
        end if;
  
        if Switches = Nil_Variable_Value then
!          Switches :=
!            Prj.Util.Value_Of
!              (Index     => Name_Ada,
!               Src_Index => 0,
!               In_Array  => Defaults);
        end if;
  
        return Switches;
     end Switches_Of;
  
     -----------
     -- Usage --
     -----------
*************** package body Make is
*** 7214,7220 ****
        Prefix : String := "  -> ")
     is
     begin
!       if not Opt.Verbose_Mode then
           return;
        end if;
  
--- 7087,7093 ----
        Prefix : String := "  -> ")
     is
     begin
!       if not Verbose_Mode then
           return;
        end if;
  
*************** package body Make is
*** 7235,7241 ****
     end Verbose_Msg;
  
  begin
-    Prj.Com.Fail := Make_Failed'Access;
-    MLib.Fail    := Make_Failed'Access;
     --  Make sure that in case of failure, the temp files will be deleted
  end Make;
--- 7108,7116 ----
     end Verbose_Msg;
  
  begin
     --  Make sure that in case of failure, the temp files will be deleted
+ 
+    Prj.Com.Fail    := Make_Failed'Access;
+    MLib.Fail       := Make_Failed'Access;
+    Makeutl.Do_Fail := Make_Failed'Access;
  end Make;
diff -Nrcpad gcc-3.4.3/gcc/ada/make.ads gcc-4.0.0/gcc/ada/make.ads
*** gcc-3.4.3/gcc/ada/make.ads	Tue Oct 21 13:42:09 2003
--- gcc-4.0.0/gcc/ada/make.ads	Wed May  5 10:09:54 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Make is
*** 112,117 ****
--- 112,118 ----
        Most_Recent_Obj_Stamp : out Time_Stamp_Type;
        Main_Unit             : out Boolean;
        Compilation_Failures  : out Natural;
+       Main_Index            : Int      := 0;
        Check_Readonly_Files  : Boolean  := False;
        Do_Not_Execute        : Boolean  := False;
        Force_Compilations    : Boolean  := False;
*************** package Make is
*** 148,153 ****
--- 149,158 ----
     --    Compilation_Failures is a count of compilation failures. This count
     --    is used to extract compilation failure reports with Extract_Failure.
     --
+    --    Main_Index, when not zero, is the index of the main unit in source
+    --    file Main_Source which is a multi-unit source.
+    --    Zero indicates that Main_Source is a single unit source file.
+    --
     --    Check_Readonly_Files set it to True to compile source files
     --    which library files are read-only. When compiling GNAT predefined
     --    files the "-gnatg" flag is used.
diff -Nrcpad gcc-3.4.3/gcc/ada/makegpr.adb gcc-4.0.0/gcc/ada/makegpr.adb
*** gcc-3.4.3/gcc/ada/makegpr.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/makegpr.adb	Mon Jan  3 15:36:25 2005
***************
*** 0 ****
--- 1,4168 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                              M A K E G P R                               --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 2004 Free Software Foundation, Inc.               --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Command_Line;  use Ada.Command_Line;
+ with Ada.Strings.Fixed; use Ada.Strings.Fixed;
+ with Ada.Text_IO;       use Ada.Text_IO;
+ with Ada.Unchecked_Deallocation;
+ 
+ with Csets;
+ with Gnatvsn;
+ 
+ with GNAT.Directory_Operations; use GNAT.Directory_Operations;
+ with GNAT.Dynamic_Tables;
+ with GNAT.Expect;               use GNAT.Expect;
+ with GNAT.HTable;
+ with GNAT.OS_Lib;               use GNAT.OS_Lib;
+ with GNAT.Regpat;               use GNAT.Regpat;
+ 
+ with Makeutl;          use Makeutl;
+ with MLib.Tgt;         use MLib.Tgt;
+ with Namet;            use Namet;
+ with Output;           use Output;
+ with Opt;              use Opt;
+ with Osint;            use Osint;
+ with Prj;              use Prj;
+ with Prj.Com;          use Prj.Com;
+ with Prj.Pars;
+ with Prj.Util;         use Prj.Util;
+ with Snames;           use Snames;
+ with System;
+ with System.Case_Util; use System.Case_Util;
+ with Table;
+ with Types;            use Types;
+ 
+ package body Makegpr is
+ 
+    Max_In_Archives : constant := 50;
+    --  The maximum number of arguments for a single invocation of the
+    --  Archive Indexer (ar).
+ 
+    Cpp_Linker : constant String := "c++linker";
+    --  The name of a linking script, built one the fly, when there are C++
+    --  sources and the C++ compiler is not g++.
+ 
+    No_Argument : aliased Argument_List := (1 .. 0 => null);
+    --  Null argument list representing case of no arguments
+ 
+    FD : Process_Descriptor;
+    --  The process descriptor used when invoking a non GNU compiler with -M
+    --  and getting the output with GNAT.Expect.
+ 
+    Line_Matcher : constant Pattern_Matcher := Compile ("^.*?\n", Single_Line);
+    --  Pattern for GNAT.Expect for the invocation of a non GNU compiler with -M
+ 
+    Name_Ide              : Name_Id;
+    Name_Compiler_Command : Name_Id;
+    --  Names of package IDE and its attribute Compiler_Command.
+    --  Set up by Initialize.
+ 
+    Unique_Compile : Boolean := False;
+    --  True when switch -u is used on the command line
+ 
+    type Source_Index_Rec is record
+       Project : Project_Id;
+       Id      : Other_Source_Id;
+       Found   : Boolean := False;
+    end record;
+    --  Used as Source_Indexes component to check if archive needs to be rebuilt
+ 
+    type Source_Index_Array is array (Positive range <>) of Source_Index_Rec;
+    type Source_Indexes_Ref is access Source_Index_Array;
+ 
+    procedure Free is new Ada.Unchecked_Deallocation
+      (Source_Index_Array, Source_Indexes_Ref);
+ 
+    Initial_Source_Index_Count : constant Positive := 20;
+    Source_Indexes : Source_Indexes_Ref :=
+      new Source_Index_Array (1 .. Initial_Source_Index_Count);
+    --  A list of the Other_Source_Ids of a project file, with an indication
+    --  that they have been found in the archive dependency file.
+ 
+    Last_Source : Natural := 0;
+    --  The index of the last valid component of Source_Indexes
+ 
+    Compiler_Names : array (First_Language_Indexes) of String_Access;
+    --  The names of the compilers to be used. Set up by Get_Compiler.
+    --  Used to display the commands spawned.
+ 
+    Gnatmake_String       : constant String_Access := new String'("gnatmake");
+    GCC_String            : constant String_Access := new String'("gcc");
+    G_Plus_Plus_String    : constant String_Access := new String'("g++");
+ 
+    Default_Compiler_Names : constant array
+      (First_Language_Indexes range
+         Ada_Language_Index .. C_Plus_Plus_Language_Index)
+      of String_Access :=
+        (Ada_Language_Index         => Gnatmake_String,
+         C_Language_Index           => GCC_String,
+         C_Plus_Plus_Language_Index => G_Plus_Plus_String);
+ 
+    Compiler_Paths : array (First_Language_Indexes) of String_Access;
+    --  The path names of the compiler to be used. Set up by Get_Compiler.
+    --  Used to spawn compiling/linking processes.
+ 
+    Compiler_Is_Gcc : array (First_Language_Indexes) of Boolean;
+    --  An indication that a compiler is a GCC compiler, to be able to use
+    --  specific GCC switches.
+ 
+    Archive_Builder_Path : String_Access := null;
+    --  The path name of the archive builder (ar). To be used when spawning
+    --  ar commands.
+ 
+    Archive_Indexer_Path : String_Access := null;
+    --  The path name of the archive indexer (ranlib), if it exists.
+ 
+    Copyright_Output : Boolean := False;
+    Usage_Output     : Boolean := False;
+    --  Flags to avoid multiple displays of Copyright notice and of Usage
+ 
+    Output_File_Name           : String_Access := null;
+    --  The name given after a switch -o
+ 
+    Output_File_Name_Expected  : Boolean := False;
+    --  True when last switch was -o
+ 
+    Project_File_Name          : String_Access := null;
+    --  The name of the project file specified with switch -P
+ 
+    Project_File_Name_Expected : Boolean := False;
+    --  True when last switch was -P
+ 
+    Naming_String   : aliased String := "naming";
+    Builder_String  : aliased String := "builder";
+    Compiler_String : aliased String := "compiler";
+    Binder_String   : aliased String := "binder";
+    Linker_String   : aliased String := "linker";
+    --  Name of packages to be checked when parsing/processing project files
+ 
+    List_Of_Packages : aliased String_List :=
+      (Naming_String   'Access,
+       Builder_String  'Access,
+       Compiler_String 'Access,
+       Binder_String   'Access,
+       Linker_String   'Access);
+    Packages_To_Check : constant String_List_Access := List_Of_Packages'Access;
+    --  List of the packages to be checked when parsing/processing project files
+ 
+    Main_Project : Project_Id;
+    --  The project id of the main project
+ 
+    type Processor is (None, Linker, Compiler);
+    Current_Processor : Processor := None;
+    --  This variable changes when switches -*args are used
+ 
+    Current_Language  : Language_Index := Ada_Language_Index;
+    --  The compiler language to consider when Processor is Compiler
+ 
+    package Comp_Opts is new GNAT.Dynamic_Tables
+      (Table_Component_Type => String_Access,
+       Table_Index_Type     => Integer,
+       Table_Low_Bound      => 1,
+       Table_Initial        => 20,
+       Table_Increment      => 100);
+    Options : array (First_Language_Indexes) of Comp_Opts.Instance;
+    --  Tables to store compiling options for the different compilers
+ 
+    package Linker_Options is new Table.Table
+      (Table_Component_Type => String_Access,
+       Table_Index_Type     => Integer,
+       Table_Low_Bound      => 1,
+       Table_Initial        => 20,
+       Table_Increment      => 100,
+       Table_Name           => "Makegpr.Linker_Options");
+    --  Table to store the linking options
+ 
+    package Library_Opts is new Table.Table
+      (Table_Component_Type => String_Access,
+       Table_Index_Type     => Integer,
+       Table_Low_Bound      => 1,
+       Table_Initial        => 20,
+       Table_Increment      => 100,
+       Table_Name           => "Makegpr.Library_Opts");
+    --  Table to store the linking options
+ 
+    package Ada_Mains is new Table.Table
+      (Table_Component_Type => String_Access,
+       Table_Index_Type     => Integer,
+       Table_Low_Bound      => 1,
+       Table_Initial        => 20,
+       Table_Increment      => 100,
+       Table_Name           => "Makegpr.Ada_Mains");
+    --  Table to store the Ada mains, either specified on the command line
+    --  or found in attribute Main of the main project file.
+ 
+    package Other_Mains is new Table.Table
+      (Table_Component_Type => Other_Source,
+       Table_Index_Type     => Integer,
+       Table_Low_Bound      => 1,
+       Table_Initial        => 20,
+       Table_Increment      => 100,
+       Table_Name           => "Makegpr.Other_Mains");
+    --  Table to store the mains of languages other than Ada, either specified
+    --  on the command line or found in attribute Main of the main project file.
+ 
+    package Sources_Compiled is new GNAT.HTable.Simple_HTable
+      (Header_Num => Header_Num,
+       Element    => Boolean,
+       No_Element => False,
+       Key        => Name_Id,
+       Hash       => Hash,
+       Equal      => "=");
+ 
+    package X_Switches is new Table.Table
+      (Table_Component_Type => String_Access,
+       Table_Index_Type     => Integer,
+       Table_Low_Bound      => 1,
+       Table_Initial        => 2,
+       Table_Increment      => 100,
+       Table_Name           => "Makegpr.X_Switches");
+    --  Table to store the -X switches to be passed to gnatmake
+ 
+    Initial_Argument_Count : constant Positive := 20;
+    type Boolean_Array is array (Positive range <>) of Boolean;
+    type Booleans is access Boolean_Array;
+ 
+    procedure Free is new Ada.Unchecked_Deallocation (Boolean_Array, Booleans);
+ 
+    Arguments : Argument_List_Access :=
+      new Argument_List (1 .. Initial_Argument_Count);
+    --  Used to store lists of arguments to be used when spawning a process
+ 
+    Arguments_Displayed : Booleans :=
+      new Boolean_Array (1 .. Initial_Argument_Count);
+    --  For each argument in Arguments, indicate if the argument should be
+    --  displayed when procedure Display_Command is called.
+ 
+    Last_Argument : Natural := 0;
+    --  Index of the last valid argument in Arguments
+ 
+    package Cache_Args is new Table.Table
+      (Table_Component_Type => String_Access,
+       Table_Index_Type     => Integer,
+       Table_Low_Bound      => 1,
+       Table_Initial        => 200,
+       Table_Increment      => 50,
+       Table_Name           => "Makegpr.Cache_Args");
+    --  A table to cache arguments, to avoid multiple allocation of the same
+    --  strings. It is not possible to use a hash table, because String is
+    --  an unconstrained type.
+ 
+    --  Various switches used when spawning processes:
+ 
+    Dash_B_String     : aliased  String := "-B";
+    Dash_B            : constant String_Access := Dash_B_String'Access;
+    Dash_c_String     : aliased  String := "-c";
+    Dash_c            : constant String_Access := Dash_c_String'Access;
+    Dash_cargs_String : aliased  String := "-cargs";
+    Dash_cargs        : constant String_Access := Dash_cargs_String'Access;
+    Dash_f_String     : aliased  String := "-f";
+    Dash_f            : constant String_Access := Dash_f_String'Access;
+    Dash_k_String     : aliased  String := "-k";
+    Dash_k            : constant String_Access := Dash_k_String'Access;
+    Dash_largs_String : aliased  String := "-largs";
+    Dash_largs        : constant String_Access := Dash_largs_String'Access;
+    Dash_M_String     : aliased  String := "-M";
+    Dash_M            : constant String_Access := Dash_M_String'Access;
+    Dash_margs_String : aliased  String := "-margs";
+    Dash_margs        : constant String_Access := Dash_margs_String'Access;
+    Dash_o_String     : aliased  String := "-o";
+    Dash_o            : constant String_Access := Dash_o_String'Access;
+    Dash_P_String     : aliased  String := "-P";
+    Dash_P            : constant String_Access := Dash_P_String'Access;
+    Dash_q_String     : aliased  String := "-q";
+    Dash_q            : constant String_Access := Dash_q_String'Access;
+    Dash_u_String     : aliased  String := "-u";
+    Dash_u            : constant String_Access := Dash_u_String'Access;
+    Dash_v_String     : aliased  String := "-v";
+    Dash_v            : constant String_Access := Dash_v_String'Access;
+    Dash_vP1_String   : aliased  String := "-vP1";
+    Dash_vP1          : constant String_Access := Dash_vP1_String'Access;
+    Dash_vP2_String   : aliased  String := "-vP2";
+    Dash_vP2          : constant String_Access := Dash_vP2_String'Access;
+    Dash_x_String     : aliased  String := "-x";
+    Dash_x            : constant String_Access := Dash_x_String'Access;
+    r_String          : aliased  String := "r";
+    r                 : constant String_Access := r_String'Access;
+ 
+    CPATH : constant String := "CPATH";
+    --  The environment variable to set when compiler is a GCC compiler
+    --  to indicate the include directory path.
+ 
+    Current_Include_Paths : array (First_Language_Indexes) of String_Access;
+    --  A cache for the paths of included directories, to avoid setting
+    --  env var CPATH unnecessarily.
+ 
+    C_Plus_Plus_Is_Used : Boolean := False;
+    --  True when there are sources in C++
+ 
+    Link_Options_Switches : Argument_List_Access := null;
+    --  The link options coming from the attributes Linker'Linker_Options in
+    --  project files imported, directly or indirectly, by the main project.
+ 
+    Total_Number_Of_Errors : Natural := 0;
+    --  Used when Keep_Going is True (switch -k) to keep the total number
+    --  of compilation/linking errors, to report at the end of execution.
+ 
+    Need_To_Rebuild_Global_Archive : Boolean := False;
+ 
+    Error_Header : constant String := "*** ERROR: ";
+    --  The beginning of error message, when Keep_Going is True
+ 
+    Need_To_Relink : Boolean := False;
+    --  True when an executable of a language other than Ada need to be linked
+ 
+    Global_Archive_Exists : Boolean := False;
+    --  True if there is a non empty global archive, to prevent creation
+    --  of such archives.
+ 
+    Path_Option : String_Access;
+    --  The path option switch, when supported
+ 
+    package Lib_Path is new Table.Table
+      (Table_Component_Type => Character,
+       Table_Index_Type     => Integer,
+       Table_Low_Bound      => 1,
+       Table_Initial        => 200,
+       Table_Increment      => 50,
+       Table_Name           => "Makegpr.Lib_Path");
+    --  A table to compute the path to put in the path option switch, when it
+    --  is supported.
+ 
+    procedure Add_Archives (For_Gnatmake : Boolean);
+    --  Add to Arguments the list of archives for linking an executable
+ 
+    procedure Add_Argument (Arg : String_Access; Display : Boolean);
+    procedure Add_Argument (Arg : String; Display : Boolean);
+    --  Add an argument to Arguments. Reallocate if necessary.
+ 
+    procedure Add_Arguments (Args : Argument_List; Display : Boolean);
+    --  Add a list of arguments to Arguments. Reallocate if necessary
+ 
+    procedure Add_Option (Arg : String);
+    --  Add a switch for the Ada, C or C++ compiler, or for the linker.
+    --  The table where this option is stored depends on the values of
+    --  Current_Processor and Current_Language.
+ 
+    procedure Add_Search_Directories
+      (Data     : Project_Data;
+       Language : First_Language_Indexes);
+    --  Either add to the Arguments the necessary -I switches needed to
+    --  compile, or, when compiler is gcc/g++, set up the C*INCLUDE_PATH
+    --  environment variable, if necessary.
+ 
+    procedure Add_Source_Id (Project : Project_Id; Id : Other_Source_Id);
+    --  Add a source id to Source_Indexes, with Found set to False
+ 
+    procedure Add_Switches
+      (Data      : Project_Data;
+       Proc      : Processor;
+       Language  : Language_Index;
+       File_Name : Name_Id);
+    --  Add to Arguments the switches, if any, for a source (attribute Switches)
+    --  or language (attribute Default_Switches), coming from package Compiler
+    --  or Linker (depending on Proc) of a specified project file.
+ 
+    procedure Build_Global_Archive;
+    --  Build the archive for the main project
+ 
+    procedure Build_Library (Project : Project_Id; Unconditionally : Boolean);
+    --  Build the library for a library project. If Unconditionally is
+    --  False, first check if the library is up to date, and build it only
+    --  if it is not.
+ 
+    procedure Check (Option : String);
+    --  Check that a switch coming from a project file is not the concatenation
+    --  of several valid switch, for example "-g -v". If it is, issue a warning.
+ 
+    procedure Check_Archive_Builder;
+    --  Check if the archive builder (ar) is there
+ 
+    procedure Check_Compilation_Needed
+      (Source          : Other_Source;
+       Need_To_Compile : out Boolean);
+    --  Check if a source of a language other than Ada needs to be compiled or
+    --  recompiled.
+ 
+    procedure Check_For_C_Plus_Plus;
+    --  Check if C++ is used in at least one project
+ 
+    procedure Compile
+      (Source_Id    : Other_Source_Id;
+       Data         : Project_Data;
+       Local_Errors : in out Boolean);
+    --  Compile one non-Ada source
+ 
+    procedure Compile_Individual_Sources;
+    --  Compile the sources specified on the command line, when in
+    --  Unique_Compile mode.
+ 
+    procedure Compile_Link_With_Gnatmake (Mains_Specified : Boolean);
+    --  Compile/Link with gnatmake when there are Ada sources in the main
+    --  project. Arguments may already contain options to be used by
+    --  gnatmake. Used for both Ada mains and mains of other languages.
+    --  When Compile_Only is True, do not use the linking options
+ 
+    procedure Compile_Sources;
+    --  Compile the sources of languages other than Ada, if necessary
+ 
+    procedure Copyright;
+    --  Output the Copyright notice
+ 
+    procedure Create_Archive_Dependency_File
+      (Name         : String;
+       First_Source : Other_Source_Id);
+    --  Create the archive dependency file for a library project
+ 
+    procedure Create_Global_Archive_Dependency_File (Name : String);
+    --  Create the archive depenency file for the main project
+ 
+    procedure Display_Command
+      (Name  : String;
+       Path  : String_Access;
+       CPATH : String_Access := null);
+    --  Display the command for a spawned process, if in Verbose_Mode or
+    --  not in Quiet_Output.
+ 
+    procedure Get_Compiler (For_Language : First_Language_Indexes);
+    --  Find the compiler name and path name for a specified programming
+    --  language, if not already done. Results are in the corresponding
+    --  elements of arrays Compiler_Names and Compiler_Paths. Name of compiler
+    --  is found in package IDE of the main project, or defaulted.
+    --  Fail if compiler cannot be found on the path. For the Ada language,
+    --  gnatmake, rather than the Ada compiler is returned.
+ 
+    procedure Get_Imported_Directories
+      (Project : Project_Id;
+       Data    : in out Project_Data);
+    --  Find the necessary switches -I to be used when compiling sources
+    --  of languages other than Ada, in a specified project file. Cache the
+    --  result in component Imported_Directories_Switches of the project data.
+    --  For gcc/g++ compilers, get the value of the C*_INCLUDE_PATH, instead.
+ 
+    procedure Initialize;
+    --  Do the necessary package initialization and process the command line
+    --  arguments.
+ 
+    function Is_Included_In_Global_Archive
+      (Object_Name : Name_Id;
+       Project     : Project_Id) return Boolean;
+    --  Return True if the object Object_Name is not overridden by a source
+    --  in a project extending project Project.
+ 
+    procedure Link_Executables;
+    --  Link executables
+ 
+    procedure Report_Error (S1 : String; S2 : String := ""; S3 : String := "");
+    --  Report an error. If Keep_Going is False, just call Osint.Fail.
+    --  If Keep_Going is True, display the error and increase the total number
+    --  of errors.
+ 
+    procedure Report_Total_Errors (Kind : String);
+    --  If Total_Number_Of_Errors is not zero, report it, and fail
+ 
+    procedure Scan_Arg (Arg : String);
+    --  Process one command line argument
+ 
+    function Strip_CR_LF (Text : String) return String;
+    --  Remove characters ASCII.CR and ASCII.LF from a String
+ 
+    procedure Usage;
+    --  Display the usage
+ 
+    ------------------
+    -- Add_Archives --
+    ------------------
+ 
+    procedure Add_Archives (For_Gnatmake : Boolean) is
+       Last_Arg : constant Natural := Last_Argument;
+       --  The position of the last argument before adding the archives.
+       --  Used to reverse the order of the arguments added when processing
+       --  the archives.
+ 
+       procedure Recursive_Add_Archives (Project : Project_Id);
+       --  Recursive procedure to add the archive of a project file, if any,
+       --  then call itself for the project imported.
+ 
+       ----------------------------
+       -- Recursive_Add_Archives --
+       ----------------------------
+ 
+       procedure Recursive_Add_Archives (Project : Project_Id) is
+          Data     : Project_Data;
+          Imported : Project_List;
+          Prj      : Project_Id;
+ 
+          procedure Add_Archive_Path;
+          --  For a library project or the main project, add the archive
+          --  path to the arguments.
+ 
+          ----------------------
+          -- Add_Archive_Path --
+          ----------------------
+ 
+          procedure Add_Archive_Path is
+             Increment : Positive;
+             Prev_Last : Positive;
+ 
+          begin
+             if Data.Library then
+ 
+                --  If it is a library project file, nothing to do if
+                --  gnatmake will be invoked, because gnatmake will take
+                --  care of it, even if the library is not an Ada library.
+ 
+                if not For_Gnatmake then
+                   if Data.Library_Kind = Static then
+                      Add_Argument
+                        (Get_Name_String (Data.Library_Dir) &
+                         Directory_Separator &
+                         "lib" & Get_Name_String (Data.Library_Name) &
+                         '.' & Archive_Ext,
+                         Verbose_Mode);
+ 
+                   else
+                      --  As we first insert in the reverse order,
+                      --  -L<dir> is put after -l<lib>
+ 
+                      Add_Argument
+                        ("-l" & Get_Name_String (Data.Library_Name),
+                         Verbose_Mode);
+ 
+                      Get_Name_String (Data.Library_Dir);
+ 
+                      Add_Argument
+                        ("-L" & Name_Buffer (1 .. Name_Len),
+                         Verbose_Mode);
+ 
+                      --  If there is a run path option, prepend this
+                      --  directory to the library path. It is probable
+                      --  that the order of the directories in the path
+                      --  option is not important, but just in case
+                      --  put the directories in the same order as the
+                      --  libraries.
+ 
+                      if Path_Option /= null then
+ 
+                         --  If it is not the first directory, make room
+                         --  at the beginning of the table, including
+                         --  for a path separator.
+ 
+                         if Lib_Path.Last > 0 then
+                            Increment := Name_Len + 1;
+                            Prev_Last := Lib_Path.Last;
+                            Lib_Path.Set_Last (Prev_Last + Increment);
+ 
+                            for Index in reverse 1 .. Prev_Last loop
+                               Lib_Path.Table (Index + Increment) :=
+                                 Lib_Path.Table (Index);
+                            end loop;
+ 
+                            Lib_Path.Table (Increment) := Path_Separator;
+ 
+                         else
+                            --  If it is the first directory, just set
+                            --  Last to the length of the directory.
+ 
+                            Lib_Path.Set_Last (Name_Len);
+                         end if;
+ 
+                         --  Put the directory at the beginning of the
+                         --  table.
+ 
+                         for Index in 1 .. Name_Len loop
+                            Lib_Path.Table (Index) := Name_Buffer (Index);
+                         end loop;
+                      end if;
+                   end if;
+                end if;
+ 
+             --  For a non-library project, the only archive needed
+             --  is the one for the main project, if there is one.
+ 
+             elsif Project = Main_Project and then Global_Archive_Exists then
+                Add_Argument
+                  (Get_Name_String (Data.Object_Directory) &
+                   Directory_Separator &
+                   "lib" & Get_Name_String (Data.Name) &
+                   '.' & Archive_Ext,
+                   Verbose_Mode);
+             end if;
+          end Add_Archive_Path;
+ 
+       begin
+          --  Nothing to do when there is no project specified
+ 
+          if Project /= No_Project then
+             Data := Projects.Table (Project);
+ 
+             --  Nothing to do if the project has already been processed
+ 
+             if not Data.Seen then
+ 
+                --  Mark the project as processed, to avoid processing it again
+ 
+                Projects.Table (Project).Seen := True;
+ 
+                Recursive_Add_Archives (Data.Extends);
+ 
+                Imported := Data.Imported_Projects;
+ 
+                --  Call itself recursively for all imported projects
+ 
+                while Imported /= Empty_Project_List loop
+                   Prj := Project_Lists.Table (Imported).Project;
+ 
+                   if Prj /= No_Project then
+                      while Projects.Table (Prj).Extended_By /= No_Project loop
+                         Prj := Projects.Table (Prj).Extended_By;
+                      end loop;
+ 
+                      Recursive_Add_Archives (Prj);
+                   end if;
+ 
+                   Imported := Project_Lists.Table (Imported).Next;
+                end loop;
+ 
+                --  If there is sources of language other than Ada in this
+                --  project, add the path of the archive to Arguments.
+ 
+                if Project = Main_Project
+                  or else Data.Other_Sources_Present
+                then
+                   Add_Archive_Path;
+                end if;
+             end if;
+          end if;
+       end Recursive_Add_Archives;
+ 
+    --  Start of processing for Add_Archives
+ 
+    begin
+       --  First, mark all projects as not processed
+ 
+       for Project in 1 .. Projects.Last loop
+          Projects.Table (Project).Seen := False;
+       end loop;
+ 
+       --  Take care of the run path option
+ 
+       if Path_Option = null then
+          Path_Option := MLib.Linker_Library_Path_Option;
+       end if;
+ 
+       Lib_Path.Set_Last (0);
+ 
+       --  Add archives in the reverse order
+ 
+       Recursive_Add_Archives (Main_Project);
+ 
+       --  And reverse the order
+ 
+       declare
+          First : Positive := Last_Arg + 1;
+          Last  : Natural  := Last_Argument;
+          Temp  : String_Access;
+ 
+       begin
+          while First < Last loop
+             Temp := Arguments (First);
+             Arguments (First) := Arguments (Last);
+             Arguments (Last)  := Temp;
+             First := First + 1;
+             Last := Last - 1;
+          end loop;
+       end;
+    end Add_Archives;
+ 
+    ------------------
+    -- Add_Argument --
+    ------------------
+ 
+    procedure Add_Argument (Arg : String_Access; Display : Boolean) is
+    begin
+       --  Nothing to do if no argument is specified or if argument is empty
+ 
+       if Arg /= null or else Arg'Length = 0 then
+ 
+          --  Reallocate arrays if necessary
+ 
+          if Last_Argument = Arguments'Last then
+             declare
+                New_Arguments : constant Argument_List_Access :=
+                                  new Argument_List
+                                    (1 .. Last_Argument +
+                                            Initial_Argument_Count);
+ 
+                New_Arguments_Displayed : constant Booleans :=
+                                            new Boolean_Array
+                                              (1 .. Last_Argument +
+                                                      Initial_Argument_Count);
+ 
+             begin
+                New_Arguments (Arguments'Range) := Arguments.all;
+ 
+                --  To avoid deallocating the strings, nullify all components
+                --  of Arguments before calling Free.
+ 
+                Arguments.all := (others => null);
+ 
+                Free (Arguments);
+                Arguments := New_Arguments;
+ 
+                New_Arguments_Displayed (Arguments_Displayed'Range) :=
+                  Arguments_Displayed.all;
+                Free (Arguments_Displayed);
+                Arguments_Displayed := New_Arguments_Displayed;
+             end;
+          end if;
+ 
+          --  Add the argument and its display indication
+ 
+          Last_Argument := Last_Argument + 1;
+          Arguments (Last_Argument) := Arg;
+          Arguments_Displayed (Last_Argument) := Display;
+       end if;
+    end Add_Argument;
+ 
+    procedure Add_Argument (Arg : String; Display : Boolean) is
+       Argument : String_Access := null;
+ 
+    begin
+       --  Nothing to do if argument is empty
+ 
+       if Arg'Length > 0 then
+          --  Check if the argument is already in the Cache_Args table.
+          --  If it is already there, reuse the allocated value.
+ 
+          for Index in 1 .. Cache_Args.Last loop
+             if Cache_Args.Table (Index).all = Arg then
+                Argument := Cache_Args.Table (Index);
+                exit;
+             end if;
+          end loop;
+ 
+          --  If the argument is not in the cache, create a new entry in the
+          --  cache.
+ 
+          if Argument = null then
+             Argument := new String'(Arg);
+             Cache_Args.Increment_Last;
+             Cache_Args.Table (Cache_Args.Last) := Argument;
+          end if;
+ 
+          --  And add the argument
+ 
+          Add_Argument (Argument, Display);
+       end if;
+    end Add_Argument;
+ 
+    -------------------
+    -- Add_Arguments --
+    -------------------
+ 
+    procedure Add_Arguments (Args : Argument_List; Display : Boolean) is
+    begin
+       --  Reallocate the arrays, if necessary
+ 
+       if Last_Argument + Args'Length > Arguments'Last then
+          declare
+             New_Arguments : constant Argument_List_Access :=
+                               new Argument_List
+                                     (1 .. Last_Argument + Args'Length +
+                                           Initial_Argument_Count);
+ 
+             New_Arguments_Displayed : constant Booleans :=
+                                         new Boolean_Array
+                                               (1 .. Last_Argument +
+                                                     Args'Length +
+                                                     Initial_Argument_Count);
+ 
+          begin
+             New_Arguments (1 .. Last_Argument) :=
+               Arguments (1 .. Last_Argument);
+ 
+             --  To avoid deallocating the strings, nullify all components
+             --  of Arguments before calling Free.
+ 
+             Arguments.all := (others => null);
+             Free (Arguments);
+ 
+             Arguments := New_Arguments;
+             New_Arguments_Displayed (1 .. Last_Argument) :=
+               Arguments_Displayed (1 .. Last_Argument);
+             Free (Arguments_Displayed);
+             Arguments_Displayed := New_Arguments_Displayed;
+          end;
+       end if;
+ 
+       --  Add the new arguments and the display indications
+ 
+       Arguments (Last_Argument + 1 .. Last_Argument + Args'Length) := Args;
+       Arguments_Displayed (Last_Argument + 1 .. Last_Argument + Args'Length) :=
+         (others => Display);
+       Last_Argument := Last_Argument + Args'Length;
+    end Add_Arguments;
+ 
+    ----------------
+    -- Add_Option --
+    ----------------
+ 
+    procedure Add_Option (Arg : String) is
+       Option : constant String_Access := new String'(Arg);
+ 
+    begin
+       case Current_Processor is
+          when None =>
+             null;
+ 
+          when Linker =>
+ 
+             --  Add option to the linker table
+ 
+             Linker_Options.Increment_Last;
+             Linker_Options.Table (Linker_Options.Last) := Option;
+ 
+          when Compiler =>
+ 
+             --  Add option to the compiler option table, depending on the
+             --  value of Current_Language.
+ 
+             Comp_Opts.Increment_Last (Options (Current_Language));
+             Options (Current_Language).Table
+               (Comp_Opts.Last (Options (Current_Language))) := Option;
+ 
+       end case;
+    end Add_Option;
+ 
+    -------------------
+    -- Add_Source_Id --
+    -------------------
+ 
+    procedure Add_Source_Id (Project : Project_Id; Id : Other_Source_Id) is
+    begin
+       --  Reallocate the array, if necessary
+ 
+       if Last_Source = Source_Indexes'Last then
+          declare
+             New_Indexes : constant Source_Indexes_Ref :=
+                             new Source_Index_Array
+                               (1 .. Source_Indexes'Last +
+                                       Initial_Source_Index_Count);
+          begin
+             New_Indexes (Source_Indexes'Range) := Source_Indexes.all;
+             Free (Source_Indexes);
+             Source_Indexes := New_Indexes;
+          end;
+       end if;
+ 
+       Last_Source := Last_Source + 1;
+       Source_Indexes (Last_Source) := (Project, Id, False);
+    end Add_Source_Id;
+ 
+    ----------------------------
+    -- Add_Search_Directories --
+    ----------------------------
+ 
+    procedure Add_Search_Directories
+      (Data     : Project_Data;
+       Language : First_Language_Indexes)
+    is
+    begin
+       --  If a GNU compiler is used, set the CPATH environment variable,
+       --  if it does not already has the correct value.
+ 
+       if Compiler_Is_Gcc (Language) then
+          if Current_Include_Paths (Language) /= Data.Include_Path then
+             Current_Include_Paths (Language) := Data.Include_Path;
+             Setenv (CPATH, Data.Include_Path.all);
+          end if;
+ 
+       else
+          Add_Arguments (Data.Imported_Directories_Switches.all, Verbose_Mode);
+       end if;
+    end Add_Search_Directories;
+ 
+    ------------------
+    -- Add_Switches --
+    ------------------
+ 
+    procedure Add_Switches
+      (Data      : Project_Data;
+       Proc      : Processor;
+       Language  : Language_Index;
+       File_Name : Name_Id)
+    is
+       Switches       : Variable_Value;
+       --  The switches, if any, for the file/language
+ 
+       Pkg            : Package_Id;
+       --  The id of the package where to look for the switches
+ 
+       Defaults       : Array_Element_Id;
+       --  The Default_Switches associative array
+ 
+       Switches_Array : Array_Element_Id;
+       --  The Switches associative array
+ 
+       Element_Id     : String_List_Id;
+       Element        : String_Element;
+ 
+    begin
+       --  First, choose the proper package
+ 
+       case Proc is
+          when None =>
+             raise Program_Error;
+ 
+          when Linker =>
+             Pkg := Value_Of (Name_Linker, Data.Decl.Packages);
+ 
+          when Compiler =>
+             Pkg := Value_Of (Name_Compiler, Data.Decl.Packages);
+       end case;
+ 
+       if Pkg /= No_Package then
+          --  Get the Switches ("file name"), if they exist
+ 
+          Switches_Array := Prj.Util.Value_Of
+            (Name      => Name_Switches,
+             In_Arrays => Packages.Table (Pkg).Decl.Arrays);
+ 
+          Switches :=
+            Prj.Util.Value_Of
+              (Index     => File_Name,
+               Src_Index => 0,
+               In_Array  => Switches_Array);
+ 
+          --  Otherwise, get the Default_Switches ("language"), if they exist
+ 
+          if Switches = Nil_Variable_Value then
+             Defaults := Prj.Util.Value_Of
+               (Name      => Name_Default_Switches,
+                In_Arrays => Packages.Table (Pkg).Decl.Arrays);
+             Switches := Prj.Util.Value_Of
+               (Index     => Language_Names.Table (Language),
+                Src_Index => 0,
+                In_Array  => Defaults);
+          end if;
+ 
+          --  If there are switches, add them to Arguments
+ 
+          if Switches /= Nil_Variable_Value then
+             Element_Id := Switches.Values;
+             while Element_Id /= Nil_String loop
+                Element := String_Elements.Table (Element_Id);
+ 
+                if Element.Value /= No_Name then
+                   Get_Name_String (Element.Value);
+ 
+                   if not Quiet_Output then
+ 
+                      --  When not in quiet output (no -q), check that the
+                      --  switch is not the concatenation of several valid
+                      --  switches, such as "-g -v". If it is, issue a warning.
+ 
+                      Check (Option => Name_Buffer (1 .. Name_Len));
+                   end if;
+ 
+                   Add_Argument (Name_Buffer (1 .. Name_Len), True);
+                end if;
+ 
+                Element_Id := Element.Next;
+             end loop;
+          end if;
+       end if;
+    end Add_Switches;
+ 
+    --------------------------
+    -- Build_Global_Archive --
+    --------------------------
+ 
+    procedure Build_Global_Archive is
+       Data      : Project_Data := Projects.Table (Main_Project);
+       Source_Id : Other_Source_Id;
+       Source    : Other_Source;
+       Success   : Boolean;
+ 
+       Archive_Name : constant String :=
+         "lib" & Get_Name_String (Data.Name) & '.' & Archive_Ext;
+       --  The name of the archive file for this project
+ 
+       Archive_Dep_Name : constant String :=
+         "lib" & Get_Name_String (Data.Name) & ".deps";
+       --  The name of the archive dependency file for this project
+ 
+       Need_To_Rebuild : Boolean := Need_To_Rebuild_Global_Archive;
+       --  When True, archive will be rebuilt
+ 
+       File : Prj.Util.Text_File;
+ 
+       Object_Path  : Name_Id;
+       Time_Stamp   : Time_Stamp_Type;
+ 
+       Saved_Last_Argument : Natural;
+       First_Object        : Natural;
+ 
+       Discard : Boolean;
+ 
+    begin
+       Check_Archive_Builder;
+ 
+       Change_Dir (Get_Name_String (Data.Object_Directory));
+ 
+       if not Need_To_Rebuild then
+          if Verbose_Mode then
+             Write_Str  ("   Checking ");
+             Write_Line (Archive_Name);
+          end if;
+ 
+          --  If the archive does not exist, of course it needs to be built
+ 
+          if not Is_Regular_File (Archive_Name) then
+             Need_To_Rebuild := True;
+ 
+             if Verbose_Mode then
+                Write_Line ("      -> archive does not exist");
+             end if;
+ 
+          --  Archive does exist
+ 
+          else
+             --  Check the archive dependency file
+ 
+             Open (File, Archive_Dep_Name);
+ 
+             --  If the archive dependency file does not exist, we need to
+             --  to rebuild the archive and to create its dependency file.
+ 
+             if not Is_Valid (File) then
+                Need_To_Rebuild := True;
+ 
+                if Verbose_Mode then
+                   Write_Str  ("      -> archive dependency file ");
+                   Write_Str  (Archive_Dep_Name);
+                   Write_Line (" does not exist");
+                end if;
+ 
+             else
+                --  Put all sources of language other than Ada in
+                --  Source_Indexes.
+ 
+                for Proj in 1 .. Projects.Last loop
+                   Data := Projects.Table (Proj);
+ 
+                   if not Data.Library then
+                      Last_Source := 0;
+                      Source_Id := Data.First_Other_Source;
+ 
+                      while Source_Id /= No_Other_Source loop
+                         Add_Source_Id (Proj, Source_Id);
+                         Source_Id := Other_Sources.Table (Source_Id).Next;
+                      end loop;
+                   end if;
+                end loop;
+ 
+                --  Read the dependency file, line by line
+ 
+                while not End_Of_File (File) loop
+                   Get_Line (File, Name_Buffer, Name_Len);
+ 
+                   --  First line is the path of the object file
+ 
+                   Object_Path := Name_Find;
+                   Source_Id := No_Other_Source;
+ 
+                   --  Check if this object file is for a source of this project
+ 
+                   for S in 1 .. Last_Source loop
+                      Source_Id := Source_Indexes (S).Id;
+                      Source := Other_Sources.Table (Source_Id);
+ 
+                      if (not Source_Indexes (S).Found)
+                        and then Source.Object_Path = Object_Path
+                      then
+                         --  We have found the object file: get the source
+                         --  data, and mark it as found.
+ 
+                         Source_Indexes (S).Found := True;
+                         exit;
+                      end if;
+                   end loop;
+ 
+                   --  If it is not for a source of this project, then the
+                   --  archive needs to be rebuilt.
+ 
+                   if Source_Id = No_Other_Source then
+                      Need_To_Rebuild := True;
+                      if Verbose_Mode then
+                         Write_Str  ("      -> ");
+                         Write_Str  (Get_Name_String (Object_Path));
+                         Write_Line (" is not an object of any project");
+                      end if;
+ 
+                      exit;
+                   end if;
+ 
+                   --  The second line is the time stamp of the object file.
+                   --  If there is no next line, then the dependency file is
+                   --  truncated, and the archive need to be rebuilt.
+ 
+                   if End_Of_File (File) then
+                      Need_To_Rebuild := True;
+ 
+                      if Verbose_Mode then
+                         Write_Str  ("      -> archive dependency file ");
+                         Write_Line (" is truncated");
+                      end if;
+ 
+                      exit;
+                   end if;
+ 
+                   Get_Line (File, Name_Buffer, Name_Len);
+ 
+                   --  If the line has the wrong number of characters, then
+                   --  the dependency file is incorrectly formatted, and the
+                   --  archive needs to be rebuilt.
+ 
+                   if Name_Len /= Time_Stamp_Length then
+                      Need_To_Rebuild := True;
+ 
+                      if Verbose_Mode then
+                         Write_Str  ("      -> archive dependency file ");
+                         Write_Line (" is incorrectly formatted (time stamp)");
+                      end if;
+ 
+                      exit;
+                   end if;
+ 
+                   Time_Stamp := Time_Stamp_Type (Name_Buffer (1 .. Name_Len));
+ 
+                   --  If the time stamp in the dependency file is different
+                   --  from the time stamp of the object file, then the archive
+                   --  needs to be rebuilt.
+ 
+                   if Time_Stamp /= Source.Object_TS then
+                      Need_To_Rebuild := True;
+ 
+                      if Verbose_Mode then
+                         Write_Str  ("      -> time stamp of ");
+                         Write_Str  (Get_Name_String (Object_Path));
+                         Write_Str  (" is incorrect in the archive");
+                         Write_Line (" dependency file");
+                      end if;
+ 
+                      exit;
+                   end if;
+                end loop;
+ 
+                Close (File);
+             end if;
+          end if;
+       end if;
+ 
+       if not Need_To_Rebuild then
+          if Verbose_Mode then
+             Write_Line  ("      -> up to date");
+          end if;
+ 
+          --  No need to create a global archive, if there is no object
+          --  file to put into.
+ 
+          Global_Archive_Exists := Last_Source /= 0;
+ 
+       --  Archive needs to be rebuilt
+ 
+       else
+          --  If archive already exists, first delete it
+ 
+          --  Comment needed on why we discard result???
+ 
+          if Is_Regular_File (Archive_Name) then
+             Delete_File (Archive_Name, Discard);
+          end if;
+ 
+          Last_Argument := 0;
+ 
+          --  Start with the options found in MLib.Tgt (usually just "rc")
+ 
+          Add_Arguments (Archive_Builder_Options.all, True);
+ 
+          --  Followed by the archive name
+ 
+          Add_Argument (Archive_Name, True);
+ 
+          First_Object := Last_Argument;
+ 
+          --  Followed by all the object files of the non library projects
+ 
+          for Proj in 1 .. Projects.Last loop
+             Data := Projects.Table (Proj);
+ 
+             if not Data.Library then
+                Source_Id := Data.First_Other_Source;
+ 
+                while Source_Id /= No_Other_Source loop
+                   Source := Other_Sources.Table (Source_Id);
+ 
+                   --  Only include object file name that have not been
+                   --  overriden in extending projects.
+ 
+                   if Is_Included_In_Global_Archive
+                        (Source.Object_Name, Proj)
+                   then
+                      Add_Argument
+                        (Get_Name_String (Source.Object_Path), Verbose_Mode);
+                   end if;
+ 
+                   Source_Id := Source.Next;
+                end loop;
+             end if;
+          end loop;
+ 
+          --  No need to create a global archive, if there is no object
+          --  file to put into.
+ 
+          Global_Archive_Exists := Last_Argument > First_Object;
+ 
+          if Global_Archive_Exists then
+ 
+             --  If the archive is built, then linking will need to occur
+             --  unconditionally.
+ 
+             Need_To_Relink := True;
+ 
+             --  Spawn the archive builder (ar)
+ 
+             Saved_Last_Argument := Last_Argument;
+             Last_Argument := First_Object + Max_In_Archives;
+             loop
+                if Last_Argument > Saved_Last_Argument then
+                   Last_Argument := Saved_Last_Argument;
+                end if;
+ 
+                Display_Command (Archive_Builder, Archive_Builder_Path);
+ 
+                Spawn
+                  (Archive_Builder_Path.all,
+                   Arguments (1 .. Last_Argument),
+                   Success);
+ 
+                exit when not Success;
+ 
+                exit when Last_Argument = Saved_Last_Argument;
+ 
+                Arguments (1) := r;
+                Arguments (3 .. Saved_Last_Argument - Last_Argument + 2) :=
+                  Arguments (Last_Argument + 1 .. Saved_Last_Argument);
+                Saved_Last_Argument := Saved_Last_Argument - Last_Argument + 2;
+             end loop;
+ 
+             --  If the archive was built, run the archive indexer (ranlib)
+             --  if there is one.
+ 
+             if Success then
+ 
+                --  If the archive was built, run the archive indexer (ranlib),
+                --  if there is one.
+ 
+                if Archive_Indexer_Path /= null then
+                   Last_Argument := 0;
+                   Add_Argument (Archive_Name, True);
+ 
+                   Display_Command (Archive_Indexer, Archive_Indexer_Path);
+ 
+                   Spawn
+                     (Archive_Indexer_Path.all, Arguments (1 .. 1), Success);
+ 
+                   if not Success then
+ 
+                      --  Running ranlib failed, delete the dependency file,
+                      --  if it exists.
+ 
+                      if Is_Regular_File (Archive_Dep_Name) then
+                         Delete_File (Archive_Dep_Name, Success);
+                      end if;
+ 
+                      --  And report the error
+ 
+                      Report_Error
+                        ("running" & Archive_Indexer & " for project """,
+                         Get_Name_String (Data.Name),
+                         """ failed");
+                      return;
+                   end if;
+                end if;
+ 
+                --  The archive was correctly built, create its dependency file
+ 
+                Create_Global_Archive_Dependency_File (Archive_Dep_Name);
+ 
+             --  Building the archive failed, delete dependency file if one
+             --  exists.
+ 
+             else
+                if Is_Regular_File (Archive_Dep_Name) then
+                   Delete_File (Archive_Dep_Name, Success);
+                end if;
+ 
+                --  And report the error
+ 
+                Report_Error
+                  ("building archive for project """,
+                   Get_Name_String (Data.Name),
+                   """ failed");
+             end if;
+          end if;
+       end if;
+    end Build_Global_Archive;
+ 
+    -------------------
+    -- Build_Library --
+    -------------------
+ 
+    procedure Build_Library (Project : Project_Id; Unconditionally : Boolean) is
+       Data      : constant Project_Data := Projects.Table (Project);
+       Source_Id : Other_Source_Id;
+       Source    : Other_Source;
+ 
+       Archive_Name : constant String :=
+                        "lib" & Get_Name_String (Data.Name) & '.' & Archive_Ext;
+       --  The name of the archive file for this project
+ 
+       Archive_Dep_Name : constant String :=
+                            "lib" & Get_Name_String (Data.Name) & ".deps";
+       --  The name of the archive dependency file for this project
+ 
+       Need_To_Rebuild : Boolean := Unconditionally;
+       --  When True, archive will be rebuilt
+ 
+       File : Prj.Util.Text_File;
+ 
+       Object_Name : Name_Id;
+       Time_Stamp  : Time_Stamp_Type;
+       Driver_Name : Name_Id := No_Name;
+ 
+       Lib_Opts : Argument_List_Access := No_Argument'Unrestricted_Access;
+    begin
+       Check_Archive_Builder;
+ 
+       --  If Unconditionally is False, check if the archive need to be built
+ 
+       if not Need_To_Rebuild then
+          if Verbose_Mode then
+             Write_Str  ("   Checking ");
+             Write_Line (Archive_Name);
+          end if;
+ 
+          --  If the archive does not exist, of course it needs to be built
+ 
+          if not Is_Regular_File (Archive_Name) then
+             Need_To_Rebuild := True;
+ 
+             if Verbose_Mode then
+                Write_Line ("      -> archive does not exist");
+             end if;
+ 
+          --  Archive does exist
+ 
+          else
+             --  Check the archive dependency file
+ 
+             Open (File, Archive_Dep_Name);
+ 
+             --  If the archive dependency file does not exist, we need to
+             --  to rebuild the archive and to create its dependency file.
+ 
+             if not Is_Valid (File) then
+                Need_To_Rebuild := True;
+ 
+                if Verbose_Mode then
+                   Write_Str  ("      -> archive dependency file ");
+                   Write_Str  (Archive_Dep_Name);
+                   Write_Line (" does not exist");
+                end if;
+ 
+             else
+                --  Put all sources of language other than Ada in Source_Indexes
+ 
+                Last_Source := 0;
+                Source_Id := Data.First_Other_Source;
+ 
+                while Source_Id /= No_Other_Source loop
+                   Add_Source_Id (Project, Source_Id);
+                   Source_Id := Other_Sources.Table (Source_Id).Next;
+                end loop;
+ 
+                --  Read the dependency file, line by line
+ 
+                while not End_Of_File (File) loop
+                   Get_Line (File, Name_Buffer, Name_Len);
+ 
+                   --  First line is the name of an object file
+ 
+                   Object_Name := Name_Find;
+                   Source_Id := No_Other_Source;
+ 
+                   --  Check if this object file is for a source of this project
+ 
+                   for S in 1 .. Last_Source loop
+                      if (not Source_Indexes (S).Found) and then
+                        Other_Sources.Table
+                          (Source_Indexes (S).Id).Object_Name =
+                        Object_Name
+                      then
+                         --  We have found the object file: get the source
+                         --  data, and mark it as found.
+ 
+                         Source_Id := Source_Indexes (S).Id;
+                         Source := Other_Sources.Table (Source_Id);
+                         Source_Indexes (S).Found := True;
+                         exit;
+                      end if;
+                   end loop;
+ 
+                   --  If it is not for a source of this project, then the
+                   --  archive needs to be rebuilt.
+ 
+                   if Source_Id = No_Other_Source then
+                      Need_To_Rebuild := True;
+ 
+                      if Verbose_Mode then
+                         Write_Str  ("      -> ");
+                         Write_Str  (Get_Name_String (Object_Name));
+                         Write_Line (" is not an object of the project");
+                      end if;
+ 
+                      exit;
+                   end if;
+ 
+                   --  The second line is the time stamp of the object file.
+                   --  If there is no next line, then the dependency file is
+                   --  truncated, and the archive need to be rebuilt.
+ 
+                   if End_Of_File (File) then
+                      Need_To_Rebuild := True;
+ 
+                      if Verbose_Mode then
+                         Write_Str  ("      -> archive dependency file ");
+                         Write_Line (" is truncated");
+                      end if;
+ 
+                      exit;
+                   end if;
+ 
+                   Get_Line (File, Name_Buffer, Name_Len);
+ 
+                   --  If the line has the wrong number of character, then
+                   --  the dependency file is incorrectly formatted, and the
+                   --  archive needs to be rebuilt.
+ 
+                   if Name_Len /= Time_Stamp_Length then
+                      Need_To_Rebuild := True;
+ 
+                      if Verbose_Mode then
+                         Write_Str  ("      -> archive dependency file ");
+                         Write_Line (" is incorrectly formatted (time stamp)");
+                      end if;
+ 
+                      exit;
+                   end if;
+ 
+                   Time_Stamp := Time_Stamp_Type (Name_Buffer (1 .. Name_Len));
+ 
+                   --  If the time stamp in the dependency file is different
+                   --  from the time stamp of the object file, then the archive
+                   --  needs to be rebuilt.
+ 
+                   if Time_Stamp /= Source.Object_TS then
+                      Need_To_Rebuild := True;
+ 
+                      if Verbose_Mode then
+                         Write_Str  ("      -> time stamp of ");
+                         Write_Str  (Get_Name_String (Object_Name));
+                         Write_Str  (" is incorrect in the archive");
+                         Write_Line (" dependency file");
+                      end if;
+ 
+                      exit;
+                   end if;
+                end loop;
+ 
+                Close (File);
+ 
+                if not Need_To_Rebuild then
+ 
+                   --  Now, check if all object files of the project have been
+                   --  accounted for. If any of them is not in the dependency
+                   --  file, the archive needs to be rebuilt.
+ 
+                   for Index in 1 .. Last_Source loop
+                      if not Source_Indexes (Index).Found then
+                         Need_To_Rebuild := True;
+ 
+                         if Verbose_Mode then
+                            Source_Id := Source_Indexes (Index).Id;
+                            Source := Other_Sources.Table (Source_Id);
+                            Write_Str  ("      -> ");
+                            Write_Str  (Get_Name_String (Source.Object_Name));
+                            Write_Str  (" is not in the archive ");
+                            Write_Line ("dependency file");
+                         end if;
+ 
+                         exit;
+                      end if;
+                   end loop;
+                end if;
+ 
+                if (not Need_To_Rebuild) and Verbose_Mode then
+                   Write_Line ("      -> up to date");
+                end if;
+             end if;
+          end if;
+       end if;
+ 
+       --  Build the library if necessary
+ 
+       if Need_To_Rebuild then
+ 
+          --  If a library is built, then linking will need to occur
+          --  unconditionally.
+ 
+          Need_To_Relink := True;
+ 
+          Last_Argument := 0;
+ 
+          --  If there are sources in Ada, then gnatmake will build the
+          --  library, so nothing to do.
+ 
+          if not Data.Languages (Ada_Language_Index) then
+ 
+             --  Get all the object files of the project
+ 
+             Source_Id := Data.First_Other_Source;
+ 
+             while Source_Id /= No_Other_Source loop
+                Source := Other_Sources.Table (Source_Id);
+                Add_Argument
+                  (Get_Name_String (Source.Object_Name), Verbose_Mode);
+                Source_Id := Source.Next;
+             end loop;
+ 
+             --  If it is a library, it need to be built it the same way
+             --  Ada libraries are built.
+ 
+             if Data.Library_Kind = Static then
+                MLib.Build_Library
+                  (Ofiles      => Arguments (1 .. Last_Argument),
+                   Afiles      => No_Argument,
+                   Output_File => Get_Name_String (Data.Library_Name),
+                   Output_Dir  => Get_Name_String (Data.Library_Dir));
+ 
+             else
+                --  Link with g++ if C++ is one of the languages, otherwise
+                --  building the library may fail with unresolved symbols.
+ 
+                if C_Plus_Plus_Is_Used then
+                   if Compiler_Names (C_Plus_Plus_Language_Index) = null then
+                      Get_Compiler (C_Plus_Plus_Language_Index);
+                   end if;
+ 
+                   if Compiler_Is_Gcc (C_Plus_Plus_Language_Index) then
+                      Name_Len := 0;
+                      Add_Str_To_Name_Buffer
+                        (Compiler_Names (C_Plus_Plus_Language_Index).all);
+                      Driver_Name := Name_Find;
+                   end if;
+                end if;
+ 
+                --  If Library_Options is specified, add these options
+ 
+                declare
+                   Library_Options : constant Variable_Value :=
+                                       Value_Of
+                                         (Name_Library_Options,
+                                          Data.Decl.Attributes);
+ 
+                begin
+                   if not Library_Options.Default then
+                      declare
+                         Current : String_List_Id := Library_Options.Values;
+                         Element : String_Element;
+ 
+                      begin
+                         while Current /= Nil_String loop
+                            Element := String_Elements.Table (Current);
+                            Get_Name_String (Element.Value);
+ 
+                            if Name_Len /= 0 then
+                               Library_Opts.Increment_Last;
+                               Library_Opts.Table (Library_Opts.Last) :=
+                                 new String'(Name_Buffer (1 .. Name_Len));
+                            end if;
+ 
+                            Current := Element.Next;
+                         end loop;
+                      end;
+                   end if;
+ 
+                   Lib_Opts :=
+                     new Argument_List'(Argument_List
+                        (Library_Opts.Table (1 .. Library_Opts.Last)));
+                end;
+ 
+                MLib.Tgt.Build_Dynamic_Library
+                  (Ofiles       => Arguments (1 .. Last_Argument),
+                   Foreign      => Arguments (1 .. Last_Argument),
+                   Afiles       => No_Argument,
+                   Options      => No_Argument,
+                   Options_2    => Lib_Opts.all,
+                   Interfaces   => No_Argument,
+                   Lib_Filename => Get_Name_String (Data.Library_Name),
+                   Lib_Dir      => Get_Name_String (Data.Library_Dir),
+                   Symbol_Data  => No_Symbols,
+                   Driver_Name  => Driver_Name,
+                   Lib_Version  => "",
+                   Auto_Init    => False);
+             end if;
+          end if;
+ 
+          --  Create fake empty archive, so we can check its time stamp later
+ 
+          declare
+             Archive : Ada.Text_IO.File_Type;
+             use Ada.Text_IO;
+          begin
+             Create (Archive, Out_File, Archive_Name);
+             Close (Archive);
+          end;
+ 
+          Create_Archive_Dependency_File
+            (Archive_Dep_Name, Data.First_Other_Source);
+       end if;
+    end Build_Library;
+ 
+    -----------
+    -- Check --
+    -----------
+ 
+    procedure Check (Option : String) is
+       First : Positive := Option'First;
+       Last  : Natural;
+ 
+    begin
+       for Index in Option'First + 1 .. Option'Last - 1 loop
+          if Option (Index) = ' ' and then Option (Index + 1) = '-' then
+             Write_Str ("warning: switch """);
+             Write_Str (Option);
+             Write_Str (""" is suspicious; consider using ");
+ 
+             Last := First;
+             while Last <= Option'Last loop
+                if Option (Last) = ' ' then
+                   if First /= Option'First then
+                      Write_Str (", ");
+                   end if;
+ 
+                   Write_Char ('"');
+                   Write_Str (Option (First .. Last - 1));
+                   Write_Char ('"');
+ 
+                   while Last <= Option'Last and then Option (Last) = ' ' loop
+                      Last := Last + 1;
+                   end loop;
+ 
+                   First := Last;
+ 
+                else
+                   if Last = Option'Last then
+                      if First /= Option'First then
+                         Write_Str (", ");
+                      end if;
+ 
+                      Write_Char ('"');
+                      Write_Str (Option (First .. Last));
+                      Write_Char ('"');
+                   end if;
+ 
+                   Last := Last + 1;
+                end if;
+             end loop;
+ 
+             Write_Line (" instead");
+             exit;
+          end if;
+       end loop;
+    end Check;
+ 
+    ---------------------------
+    -- Check_Archive_Builder --
+    ---------------------------
+ 
+    procedure Check_Archive_Builder is
+    begin
+       --  First, make sure that the archive builder (ar) is on the path
+ 
+       if Archive_Builder_Path = null then
+          Archive_Builder_Path := Locate_Exec_On_Path (Archive_Builder);
+ 
+          if Archive_Builder_Path = null then
+             Osint.Fail
+               ("unable to locate archive builder """,
+                Archive_Builder,
+                """");
+          end if;
+ 
+          --  If there is an archive indexer (ranlib), try to locate it on the
+          --  path. Don't fail if it is not found.
+ 
+          if Archive_Indexer /= "" then
+             Archive_Indexer_Path := Locate_Exec_On_Path (Archive_Indexer);
+          end if;
+       end if;
+    end Check_Archive_Builder;
+ 
+    ------------------------------
+    -- Check_Compilation_Needed --
+    ------------------------------
+ 
+    procedure Check_Compilation_Needed
+      (Source          : Other_Source;
+       Need_To_Compile : out Boolean)
+    is
+       Source_Name : constant String := Get_Name_String (Source.File_Name);
+       Source_Path : constant String := Get_Name_String (Source.Path_Name);
+       Object_Name : constant String := Get_Name_String (Source.Object_Name);
+       Dep_Name    : constant String := Get_Name_String (Source.Dep_Name);
+ 
+       Source_In_Dependencies : Boolean := False;
+       --  Set True if source was found in dependency file of its object file
+ 
+       Dep_File : Prj.Util.Text_File;
+       Start    : Natural;
+       Finish   : Natural;
+ 
+    begin
+       --  Assume the worst, so that statement "return;" may be used if there
+       --  is any problem.
+ 
+       Need_To_Compile := True;
+ 
+       if Verbose_Mode then
+          Write_Str  ("   Checking ");
+          Write_Str  (Source_Name);
+          Write_Line (" ... ");
+       end if;
+ 
+       --  If object file does not exist, of course source need to be compiled
+ 
+       if Source.Object_TS = Empty_Time_Stamp then
+          if Verbose_Mode then
+             Write_Str  ("      -> object file ");
+             Write_Str  (Object_Name);
+             Write_Line (" does not exist");
+          end if;
+ 
+          return;
+       end if;
+ 
+       --  If the object file has been created before the last modification
+       --  of the source, the source need to be recompiled.
+ 
+       if Source.Object_TS < Source.Source_TS then
+          if Verbose_Mode then
+             Write_Str  ("      -> object file ");
+             Write_Str  (Object_Name);
+             Write_Line (" has time stamp earlier than source");
+          end if;
+ 
+          return;
+       end if;
+ 
+       --  If there is no dependency file, then the source needs to be
+       --  recompiled and the dependency file need to be created.
+ 
+       if Source.Dep_TS = Empty_Time_Stamp then
+          if Verbose_Mode then
+             Write_Str  ("      -> dependency file ");
+             Write_Str  (Dep_Name);
+             Write_Line (" does not exist");
+          end if;
+ 
+          return;
+       end if;
+ 
+       --  The source needs to be recompiled if the source has been modified
+       --  after the dependency file has been created.
+ 
+       if Source.Dep_TS < Source.Source_TS then
+          if Verbose_Mode then
+             Write_Str  ("      -> dependency file ");
+             Write_Str  (Dep_Name);
+             Write_Line (" has time stamp earlier than source");
+          end if;
+ 
+          return;
+       end if;
+ 
+       --  Look for all dependencies
+ 
+       Open (Dep_File, Dep_Name);
+ 
+       --  If dependency file cannot be open, we need to recompile the source
+ 
+       if not Is_Valid (Dep_File) then
+          if Verbose_Mode then
+             Write_Str  ("      -> could not open dependency file ");
+             Write_Line (Dep_Name);
+          end if;
+ 
+          return;
+       end if;
+ 
+       declare
+          End_Of_File_Reached : Boolean := False;
+ 
+       begin
+          loop
+             if End_Of_File (Dep_File) then
+                End_Of_File_Reached := True;
+                exit;
+             end if;
+ 
+             Get_Line (Dep_File, Name_Buffer, Name_Len);
+ 
+             exit when Name_Len > 0 and then Name_Buffer (1) /= '#';
+          end loop;
+ 
+          --  If dependency file contains only empty lines or comments, then
+          --  dependencies are unknown, and the source needs to be recompiled.
+ 
+          if End_Of_File_Reached then
+             if Verbose_Mode then
+                Write_Str  ("      -> dependency file ");
+                Write_Str  (Dep_Name);
+                Write_Line (" is empty");
+             end if;
+ 
+             Close (Dep_File);
+             return;
+          end if;
+       end;
+ 
+       Start  := 1;
+       Finish := Index (Name_Buffer (1 .. Name_Len), ": ");
+ 
+       --  First line must start with name of object file, followed by colon
+ 
+       if Finish = 0 or else Name_Buffer (1 .. Finish - 1) /= Object_Name then
+          if Verbose_Mode then
+             Write_Str  ("      -> dependency file ");
+             Write_Str  (Dep_Name);
+             Write_Line (" has wrong format");
+          end if;
+ 
+          Close (Dep_File);
+          return;
+ 
+       else
+          Start := Finish + 2;
+ 
+          --  Process each line
+ 
+          Line_Loop : loop
+             declare
+                Line : constant String  := Name_Buffer (1 .. Name_Len);
+                Last : constant Natural := Name_Len;
+ 
+             begin
+                Name_Loop : loop
+ 
+                   --  Find the beginning of the next source path name
+ 
+                   while Start < Last and then Line (Start) = ' ' loop
+                      Start := Start + 1;
+                   end loop;
+ 
+                   --  Go to next line when there is a continuation character \
+                   --  at the end of the line.
+ 
+                   exit Name_Loop when Start = Last
+                                    and then Line (Start) = '\';
+ 
+                   --  We should not be at the end of the line, without
+                   --  a continuation character \.
+ 
+                   if Start = Last then
+                      if Verbose_Mode then
+                         Write_Str  ("      -> dependency file ");
+                         Write_Str  (Dep_Name);
+                         Write_Line (" has wrong format");
+                      end if;
+ 
+                      Close (Dep_File);
+                      return;
+                   end if;
+ 
+                   --  Look for the end of the source path name
+ 
+                   Finish := Start;
+                   while Finish < Last and then Line (Finish + 1) /= ' ' loop
+                      Finish := Finish + 1;
+                   end loop;
+ 
+                   --  Check this source
+ 
+                   declare
+                      Src_Name : constant String :=
+                                   Normalize_Pathname
+                                     (Name           => Line (Start .. Finish),
+                                      Case_Sensitive => False);
+                      Src_TS   : Time_Stamp_Type;
+ 
+                   begin
+                      --  If it is original source, set Source_In_Dependencies
+ 
+                      if Src_Name = Source_Path then
+                         Source_In_Dependencies := True;
+                      end if;
+ 
+                      Name_Len := 0;
+                      Add_Str_To_Name_Buffer (Src_Name);
+                      Src_TS := File_Stamp (Name_Find);
+ 
+                      --  If the source does not exist, we need to recompile
+ 
+                      if Src_TS = Empty_Time_Stamp then
+                         if Verbose_Mode then
+                            Write_Str  ("      -> source ");
+                            Write_Str  (Src_Name);
+                            Write_Line (" does not exist");
+                         end if;
+ 
+                         Close (Dep_File);
+                         return;
+ 
+                      --  If the source has been modified after the object file,
+                      --  we need to recompile.
+ 
+                      elsif Src_TS > Source.Object_TS then
+                         if Verbose_Mode then
+                            Write_Str  ("      -> source ");
+                            Write_Str  (Src_Name);
+                            Write_Line
+                              (" has time stamp later than object file");
+                         end if;
+ 
+                         Close (Dep_File);
+                         return;
+                      end if;
+                   end;
+ 
+                   --  If the source path name ends the line, we are done.
+ 
+                   exit Line_Loop when Finish = Last;
+ 
+                   --  Go get the next source on the line
+ 
+                   Start := Finish + 1;
+                end loop Name_Loop;
+             end;
+ 
+             --  If we are here, we had a continuation character \ at the end
+             --  of the line, so we continue with the next line.
+ 
+             Get_Line (Dep_File, Name_Buffer, Name_Len);
+             Start := 1;
+          end loop Line_Loop;
+       end if;
+ 
+       Close (Dep_File);
+ 
+       --  If the original sources were not in the dependency file, then we
+       --  need to recompile. It may mean that we are using a different source
+       --  (different variant) for this object file.
+ 
+       if not Source_In_Dependencies then
+          if Verbose_Mode then
+             Write_Str  ("      -> source ");
+             Write_Str  (Source_Path);
+             Write_Line (" is not in the dependencies");
+          end if;
+ 
+          return;
+       end if;
+ 
+       --  If we are here, then everything is OK, and we don't need
+       --  to recompile.
+ 
+       if Verbose_Mode then
+          Write_Line ("      -> up to date");
+       end if;
+ 
+       Need_To_Compile := False;
+    end Check_Compilation_Needed;
+ 
+    ---------------------------
+    -- Check_For_C_Plus_Plus --
+    ---------------------------
+ 
+    procedure Check_For_C_Plus_Plus is
+    begin
+       C_Plus_Plus_Is_Used := False;
+ 
+       for Project in 1 .. Projects.Last loop
+          if
+            Projects.Table (Project).Languages (C_Plus_Plus_Language_Index)
+          then
+             C_Plus_Plus_Is_Used := True;
+             exit;
+          end if;
+       end loop;
+    end Check_For_C_Plus_Plus;
+ 
+    -------------
+    -- Compile --
+    -------------
+ 
+    procedure Compile
+      (Source_Id    : Other_Source_Id;
+       Data         : in Project_Data;
+       Local_Errors : in out Boolean)
+    is
+       Source  : Other_Source := Other_Sources.Table (Source_Id);
+       Success : Boolean;
+       CPATH   : String_Access := null;
+ 
+    begin
+       --  If the compiler is not known yet, get its path name
+ 
+       if Compiler_Names (Source.Language) = null then
+          Get_Compiler (Source.Language);
+       end if;
+ 
+       --  For non GCC compilers, get the dependency file, first calling the
+       --  compiler with the switch -M.
+ 
+       if not Compiler_Is_Gcc (Source.Language) then
+          Last_Argument := 0;
+ 
+          --  Add the source name, preceded by -M
+ 
+          Add_Argument (Dash_M, True);
+          Add_Argument (Get_Name_String (Source.Path_Name), True);
+ 
+          --  Add the compiling switches for this source found in
+          --  package Compiler of the project file, if they exist.
+ 
+          Add_Switches
+            (Data, Compiler, Source.Language, Source.File_Name);
+ 
+          --  Add the compiling switches for the language specified
+          --  on the command line, if any.
+ 
+          for
+            J in 1 .. Comp_Opts.Last (Options (Source.Language))
+          loop
+             Add_Argument (Options (Source.Language).Table (J), True);
+          end loop;
+ 
+          --  Finally, add imported directory switches for this project file
+ 
+          Add_Search_Directories (Data, Source.Language);
+ 
+          --  And invoke the compiler using GNAT.Expect
+ 
+          Display_Command
+            (Compiler_Names (Source.Language).all,
+             Compiler_Paths (Source.Language));
+ 
+          begin
+             Non_Blocking_Spawn
+               (FD,
+                Compiler_Paths (Source.Language).all,
+                Arguments (1 .. Last_Argument),
+                Buffer_Size => 0,
+                Err_To_Out => True);
+ 
+             declare
+                Dep_File : Ada.Text_IO.File_Type;
+                Result   : Expect_Match;
+                Status   : Integer;
+ 
+             begin
+                --  Create the dependency file
+ 
+                Create (Dep_File, Out_File, Get_Name_String (Source.Dep_Name));
+ 
+                loop
+                   Expect (FD, Result, Line_Matcher);
+ 
+                   exit when Result = Expect_Timeout;
+ 
+                   declare
+                      S : constant String := Strip_CR_LF (Expect_Out (FD));
+ 
+                   begin
+                      --  Each line of the output is put in the dependency
+                      --  file, including errors. If there are errors, the
+                      --  syntax of the dependency file will be incorrect and
+                      --  recompilation will occur automatically the next time
+                      --  the dependencies are checked.
+ 
+                      Put_Line (Dep_File, S);
+                   end;
+                end loop;
+ 
+                --  If we are here, it means we had a timeout, so the
+                --  dependency file may be incomplete. It is safer to
+                --  delete it, otherwise the dependencies may be wrong.
+ 
+                Close (FD, Status);
+                Close (Dep_File);
+                Delete_File (Get_Name_String (Source.Dep_Name), Success);
+ 
+             exception
+             when Process_Died =>
+ 
+                   --  This is the normal outcome. Just close the file
+ 
+                   Close (FD, Status);
+                   Close (Dep_File);
+ 
+             when others =>
+ 
+                   --  Something wrong happened. It is safer to delete the
+                   --  dependency file, otherwise the dependencies may be wrong.
+ 
+                   Close (FD, Status);
+ 
+                   if Is_Open (Dep_File) then
+                      Close (Dep_File);
+                   end if;
+ 
+                   Delete_File (Get_Name_String (Source.Dep_Name), Success);
+             end;
+ 
+          exception
+                --  If we cannot spawn the compiler, then the dependencies are
+                --  not updated. It is safer then to delete the dependency file,
+                --  otherwise the dependencies may be wrong.
+ 
+             when Invalid_Process =>
+                Delete_File (Get_Name_String (Source.Dep_Name), Success);
+          end;
+       end if;
+ 
+       Last_Argument := 0;
+ 
+       --  For GCC compilers, make sure the language is always specified to
+       --  to the GCC driver, in case the extension is not recognized by the
+       --  GCC driver as a source of the language.
+ 
+       if Compiler_Is_Gcc (Source.Language) then
+          Add_Argument (Dash_x, Verbose_Mode);
+          Add_Argument
+            (Get_Name_String (Language_Names.Table (Source.Language)),
+             Verbose_Mode);
+       end if;
+ 
+       Add_Argument (Dash_c, True);
+ 
+       --  Add the compiling switches for this source found in
+       --  package Compiler of the project file, if they exist.
+ 
+       Add_Switches
+         (Data, Compiler, Source.Language, Source.File_Name);
+ 
+       --  Specify the source to be compiled
+ 
+       Add_Argument (Get_Name_String (Source.Path_Name), True);
+ 
+       --  If non static library project, compile with the PIC option if there
+       --  is one (when there is no PIC option, function MLib.Tgt.PIC_Option
+       --  returns an empty string, and Add_Argument with an empty string has
+       --  no effect).
+ 
+       if Data.Library and then Data.Library_Kind /= Static then
+          Add_Argument (PIC_Option, True);
+       end if;
+ 
+       --  Indicate the name of the object
+ 
+       Add_Argument (Dash_o, True);
+       Add_Argument (Get_Name_String (Source.Object_Name), True);
+ 
+       --  When compiler is GCC, use the magic switch that creates
+       --  the dependency file in the correct format.
+ 
+       if Compiler_Is_Gcc (Source.Language) then
+          Add_Argument
+            ("-Wp,-MD," & Get_Name_String (Source.Dep_Name),
+             Verbose_Mode);
+       end if;
+ 
+       --  Add the compiling switches for the language specified
+       --  on the command line, if any.
+ 
+       for J in 1 .. Comp_Opts.Last (Options (Source.Language)) loop
+          Add_Argument (Options (Source.Language).Table (J), True);
+       end loop;
+ 
+       --  Finally, add the imported directory switches for this
+       --  project file (or, for gcc compilers, set up the CPATH env var
+       --  if needed).
+ 
+       Add_Search_Directories (Data, Source.Language);
+ 
+       --  Set CPATH, if compiler is GCC
+ 
+       if Compiler_Is_Gcc (Source.Language) then
+          CPATH := Current_Include_Paths (Source.Language);
+       end if;
+ 
+       --  And invoke the compiler
+ 
+       Display_Command
+         (Name  => Compiler_Names (Source.Language).all,
+          Path  => Compiler_Paths (Source.Language),
+          CPATH => CPATH);
+ 
+       Spawn
+         (Compiler_Paths (Source.Language).all,
+          Arguments (1 .. Last_Argument),
+          Success);
+ 
+       --  Case of successful compilation
+ 
+       if Success then
+ 
+          --  Update the time stamp of the object file
+ 
+          Source.Object_TS := File_Stamp (Source.Object_Name);
+ 
+          --  Do some sanity checks
+ 
+          if Source.Object_TS = Empty_Time_Stamp then
+             Local_Errors := True;
+             Report_Error
+               ("object file ",
+                Get_Name_String (Source.Object_Name),
+                " has not been created");
+ 
+          elsif Source.Object_TS < Source.Source_TS then
+             Local_Errors := True;
+             Report_Error
+               ("object file ",
+                Get_Name_String (Source.Object_Name),
+                " has not been modified");
+ 
+          else
+             --  Everything looks fine, update the Other_Sources table
+ 
+             Other_Sources.Table (Source_Id) := Source;
+          end if;
+ 
+       --  Compilation failed
+ 
+       else
+          Local_Errors := True;
+          Report_Error
+            ("compilation of ",
+             Get_Name_String (Source.Path_Name),
+             " failed");
+       end if;
+    end Compile;
+ 
+    --------------------------------
+    -- Compile_Individual_Sources --
+    --------------------------------
+ 
+    procedure Compile_Individual_Sources is
+       Data         : Project_Data := Projects.Table (Main_Project);
+       Source_Id    : Other_Source_Id;
+       Source       : Other_Source;
+       Source_Name  : Name_Id;
+       Project_Name : String := Get_Name_String (Data.Name);
+       Dummy        : Boolean := False;
+ 
+       Ada_Is_A_Language : constant Boolean :=
+                             Data.Languages (Ada_Language_Index);
+ 
+    begin
+       Ada_Mains.Init;
+       To_Mixed (Project_Name);
+       Compile_Only := True;
+ 
+       Get_Imported_Directories (Main_Project, Data);
+       Projects.Table (Main_Project) := Data;
+ 
+       --  Compilation will occur in the object directory
+ 
+       Change_Dir (Get_Name_String (Data.Object_Directory));
+ 
+       if not Data.Other_Sources_Present then
+          if Ada_Is_A_Language then
+             Mains.Reset;
+ 
+             loop
+                declare
+                   Main : constant String := Mains.Next_Main;
+                begin
+                   exit when Main'Length = 0;
+                   Ada_Mains.Increment_Last;
+                   Ada_Mains.Table (Ada_Mains.Last) := new String'(Main);
+                end;
+             end loop;
+ 
+          else
+             Osint.Fail
+               ("project ", Project_Name, " contains no source");
+          end if;
+ 
+       else
+          Mains.Reset;
+ 
+          loop
+             declare
+                Main : constant String := Mains.Next_Main;
+             begin
+                Name_Len := Main'Length;
+                exit when Name_Len = 0;
+                Name_Buffer (1 .. Name_Len) := Main;
+                Canonical_Case_File_Name (Name_Buffer (1 .. Name_Len));
+                Source_Name := Name_Find;
+ 
+                if not Sources_Compiled.Get (Source_Name) then
+                   Sources_Compiled.Set (Source_Name, True);
+                   Source_Id := Data.First_Other_Source;
+ 
+                   while Source_Id /= No_Other_Source loop
+                      Source := Other_Sources.Table (Source_Id);
+                      exit when Source.File_Name = Source_Name;
+                      Source_Id := Source.Next;
+                   end loop;
+ 
+                   if Source_Id = No_Other_Source then
+                      if Ada_Is_A_Language then
+                         Ada_Mains.Increment_Last;
+                         Ada_Mains.Table (Ada_Mains.Last) := new String'(Main);
+ 
+                      else
+                         Report_Error
+                           (Main,
+                            " is not a valid source of project ",
+                            Project_Name);
+                      end if;
+ 
+                   else
+                      Compile (Source_Id, Data, Dummy);
+                   end if;
+                end if;
+             end;
+          end loop;
+       end if;
+ 
+       if Ada_Mains.Last > 0 then
+ 
+          --  Invoke gnatmake for all Ada sources
+ 
+          Last_Argument := 0;
+          Add_Argument (Dash_u, True);
+ 
+          for Index in 1 .. Ada_Mains.Last loop
+             Add_Argument (Ada_Mains.Table (Index), True);
+          end loop;
+ 
+          Compile_Link_With_Gnatmake (Mains_Specified => False);
+       end if;
+    end Compile_Individual_Sources;
+ 
+    --------------------------------
+    -- Compile_Link_With_Gnatmake --
+    --------------------------------
+ 
+    procedure Compile_Link_With_Gnatmake (Mains_Specified : Boolean) is
+       Data    : constant Project_Data := Projects.Table (Main_Project);
+       Success : Boolean;
+ 
+    begin
+       --  Array Arguments may already contain some arguments, so we don't
+       --  set Last_Argument to 0.
+ 
+       --  Get the gnatmake to invoke
+ 
+       Get_Compiler (Ada_Language_Index);
+ 
+       --  Specify the project file
+ 
+       Add_Argument (Dash_P, True);
+       Add_Argument (Get_Name_String (Data.Path_Name), True);
+ 
+       --  Add the -X switches, if any
+ 
+       for Index in 1 .. X_Switches.Last loop
+          Add_Argument (X_Switches.Table (Index), True);
+       end loop;
+ 
+       --  If Mains_Specified is True, find the mains in package Mains
+ 
+       if Mains_Specified then
+          Mains.Reset;
+ 
+          loop
+             declare
+                Main : constant String := Mains.Next_Main;
+             begin
+                exit when Main'Length = 0;
+                Add_Argument (Main, True);
+             end;
+          end loop;
+       end if;
+ 
+       --  Specify output file name, if any was specified on the command line
+ 
+       if Output_File_Name /= null then
+          Add_Argument (Dash_o, True);
+          Add_Argument (Output_File_Name, True);
+       end if;
+ 
+       --  Transmit some switches to gnatmake
+ 
+       --  -c
+ 
+       if Compile_Only then
+          Add_Argument (Dash_c, True);
+       end if;
+ 
+       --  -k
+ 
+       if Keep_Going then
+          Add_Argument (Dash_k, True);
+       end if;
+ 
+       --  -f
+ 
+       if Force_Compilations then
+          Add_Argument (Dash_f, True);
+       end if;
+ 
+       --  -v
+ 
+       if Verbose_Mode then
+          Add_Argument (Dash_v, True);
+       end if;
+ 
+       --  -q
+ 
+       if Quiet_Output then
+          Add_Argument (Dash_q, True);
+       end if;
+ 
+       --  -vP1 and -vP2
+ 
+       case Current_Verbosity is
+          when Default =>
+             null;
+ 
+          when Medium =>
+             Add_Argument (Dash_vP1, True);
+ 
+          when High =>
+             Add_Argument (Dash_vP2, True);
+       end case;
+ 
+       --  If there are compiling options for Ada, transmit them to gnatmake
+ 
+       if Comp_Opts.Last (Options (Ada_Language_Index)) /= 0 then
+          Add_Argument (Dash_cargs, True);
+ 
+          for Arg in 1 .. Comp_Opts.Last (Options (Ada_Language_Index)) loop
+             Add_Argument (Options (Ada_Language_Index).Table (Arg), True);
+          end loop;
+       end if;
+ 
+       if not Compile_Only then
+ 
+          --  Linking options
+ 
+          if Linker_Options.Last /= 0 then
+             Add_Argument (Dash_largs, True);
+          else
+             Add_Argument (Dash_largs, Verbose_Mode);
+          end if;
+ 
+          --  Add the archives
+ 
+          Add_Archives (For_Gnatmake => True);
+ 
+          --  If there are linking options from the command line,
+          --  transmit them to gnatmake.
+ 
+          for Arg in 1 .. Linker_Options.Last loop
+             Add_Argument (Linker_Options.Table (Arg), True);
+          end loop;
+       end if;
+ 
+       --  And invoke gnatmake
+ 
+       Display_Command
+         (Compiler_Names (Ada_Language_Index).all,
+          Compiler_Paths (Ada_Language_Index));
+ 
+       Spawn
+         (Compiler_Paths (Ada_Language_Index).all,
+          Arguments (1 .. Last_Argument),
+          Success);
+ 
+       --  Report an error if call to gnatmake failed
+ 
+       if not Success then
+          Report_Error
+            ("invocation of ",
+             Compiler_Names (Ada_Language_Index).all,
+             " failed");
+       end if;
+ 
+    end Compile_Link_With_Gnatmake;
+ 
+    ---------------------
+    -- Compile_Sources --
+    ---------------------
+ 
+    procedure Compile_Sources is
+       Data         : Project_Data;
+       Source_Id    : Other_Source_Id;
+       Source       : Other_Source;
+ 
+       Local_Errors : Boolean := False;
+       --  Set to True when there is a compilation error. Used only when
+       --  Keep_Going is True, to inhibit the building of the archive.
+ 
+       Need_To_Compile : Boolean;
+       --  Set to True when a source needs to be compiled/recompiled.
+ 
+       Need_To_Rebuild_Archive : Boolean := Force_Compilations;
+       --  True when the archive needs to be built/rebuilt unconditionally
+ 
+    begin
+       --  Loop through project files
+ 
+       for Project in 1 .. Projects.Last loop
+          Local_Errors := False;
+          Data := Projects.Table (Project);
+ 
+          --  Nothing to do when no sources of language other than Ada
+ 
+          if (not Data.Virtual) and then Data.Other_Sources_Present then
+ 
+             --  If the imported directory switches are unknown, compute them
+ 
+             if not Data.Include_Data_Set then
+                Get_Imported_Directories (Project, Data);
+                Data.Include_Data_Set := True;
+                Projects.Table (Project) := Data;
+             end if;
+ 
+             Need_To_Rebuild_Archive := Force_Compilations;
+ 
+             --  Compilation will occur in the object directory
+ 
+             Change_Dir (Get_Name_String (Data.Object_Directory));
+ 
+             Source_Id := Data.First_Other_Source;
+ 
+             --  Process each source one by one
+ 
+             while Source_Id /= No_Other_Source loop
+                Source := Other_Sources.Table (Source_Id);
+                Need_To_Compile := Force_Compilations;
+ 
+                --  Check if compilation is needed
+ 
+                if not Need_To_Compile then
+                   Check_Compilation_Needed (Source, Need_To_Compile);
+                end if;
+ 
+                --  Proceed, if compilation is needed
+ 
+                if Need_To_Compile then
+ 
+                   --  If a source is compiled/recompiled, of course the
+                   --  archive will need to be built/rebuilt.
+ 
+                   Need_To_Rebuild_Archive := True;
+                   Compile (Source_Id, Data, Local_Errors);
+                end if;
+ 
+                --  Next source, if any
+ 
+                Source_Id := Source.Next;
+             end loop;
+ 
+             if Need_To_Rebuild_Archive and then (not Data.Library) then
+                Need_To_Rebuild_Global_Archive := True;
+             end if;
+ 
+             --  If there was no compilation error and -c was not used,
+             --  build / rebuild the archive if necessary.
+ 
+             if not Local_Errors
+               and then Data.Library
+               and then not Data.Languages (Ada_Language_Index)
+               and then not Compile_Only
+             then
+                Build_Library (Project, Need_To_Rebuild_Archive);
+             end if;
+          end if;
+       end loop;
+    end Compile_Sources;
+ 
+    ---------------
+    -- Copyright --
+    ---------------
+ 
+    procedure Copyright is
+    begin
+       --  Only output the Copyright notice once
+ 
+       if not Copyright_Output then
+          Copyright_Output := True;
+          Write_Eol;
+          Write_Str ("GPRMAKE ");
+          Write_Str (Gnatvsn.Gnat_Version_String);
+          Write_Str (" Copyright 2004 Free Software Foundation, Inc.");
+          Write_Eol;
+       end if;
+    end Copyright;
+ 
+    ------------------------------------
+    -- Create_Archive_Dependency_File --
+    ------------------------------------
+ 
+    procedure Create_Archive_Dependency_File
+      (Name         : String;
+       First_Source : Other_Source_Id)
+    is
+       Source_Id : Other_Source_Id := First_Source;
+       Source    : Other_Source;
+       Dep_File  : Ada.Text_IO.File_Type;
+       use Ada.Text_IO;
+ 
+    begin
+       --  Create the file in Append mode, to avoid automatic insertion of
+       --  an end of line if file is empty.
+ 
+       Create (Dep_File, Append_File, Name);
+ 
+       while Source_Id /= No_Other_Source loop
+          Source := Other_Sources.Table (Source_Id);
+          Put_Line (Dep_File, Get_Name_String (Source.Object_Name));
+          Put_Line (Dep_File, String (Source.Object_TS));
+          Source_Id := Source.Next;
+       end loop;
+ 
+       Close (Dep_File);
+ 
+    exception
+       when others =>
+          if Is_Open (Dep_File) then
+             Close (Dep_File);
+          end if;
+    end Create_Archive_Dependency_File;
+ 
+    -------------------------------------------
+    -- Create_Global_Archive_Dependency_File --
+    -------------------------------------------
+ 
+    procedure Create_Global_Archive_Dependency_File (Name : String) is
+       Source_Id : Other_Source_Id;
+       Source    : Other_Source;
+       Dep_File  : Ada.Text_IO.File_Type;
+ 
+       use Ada.Text_IO;
+ 
+    begin
+       --  Create the file in Append mode, to avoid automatic insertion of
+       --  an end of line if file is empty.
+ 
+       Create (Dep_File, Append_File, Name);
+ 
+       --  Get all the object files of non-Ada sources in non-library projects
+ 
+       for Project in 1 .. Projects.Last loop
+          if not Projects.Table (Project).Library then
+             Source_Id := Projects.Table (Project).First_Other_Source;
+ 
+             while Source_Id /= No_Other_Source loop
+                Source := Other_Sources.Table (Source_Id);
+ 
+                --  Put only those object files that are in the global archive
+ 
+                if Is_Included_In_Global_Archive
+                     (Source.Object_Name, Project)
+                then
+                   Put_Line (Dep_File, Get_Name_String (Source.Object_Path));
+                   Put_Line (Dep_File, String (Source.Object_TS));
+                end if;
+ 
+                Source_Id := Source.Next;
+             end loop;
+          end if;
+       end loop;
+ 
+       Close (Dep_File);
+ 
+    exception
+       when others =>
+          if Is_Open (Dep_File) then
+             Close (Dep_File);
+          end if;
+    end Create_Global_Archive_Dependency_File;
+ 
+    ---------------------
+    -- Display_Command --
+    ---------------------
+ 
+    procedure Display_Command
+      (Name  : String;
+       Path  : String_Access;
+       CPATH : String_Access := null)
+    is
+    begin
+       --  Only display the command in Verbose Mode (-v) or when
+       --  not in Quiet Output (no -q).
+ 
+       if Verbose_Mode or (not Quiet_Output) then
+ 
+          --  In Verbose Mode output the full path of the spawned process
+ 
+          if Verbose_Mode then
+             if CPATH /= null then
+                Write_Str  ("CPATH = ");
+                Write_Line (CPATH.all);
+             end if;
+ 
+             Write_Str (Path.all);
+ 
+          else
+             Write_Str (Name);
+          end if;
+ 
+          --  Display only the arguments for which the display flag is set
+          --  (in Verbose Mode, the display flag is set for all arguments)
+ 
+          for Arg in 1 .. Last_Argument loop
+             if Arguments_Displayed (Arg) then
+                Write_Char (' ');
+                Write_Str (Arguments (Arg).all);
+             end if;
+          end loop;
+ 
+          Write_Eol;
+       end if;
+    end Display_Command;
+ 
+    ------------------
+    -- Get_Compiler --
+    ------------------
+ 
+    procedure Get_Compiler (For_Language : First_Language_Indexes) is
+       Data : constant Project_Data := Projects.Table (Main_Project);
+ 
+       Ide : constant Package_Id :=
+         Value_Of (Name_Ide, In_Packages => Data.Decl.Packages);
+       --  The id of the package IDE in the project file
+ 
+       Compiler : constant Variable_Value :=
+         Value_Of
+           (Name                    => Language_Names.Table (For_Language),
+            Index                   => 0,
+            Attribute_Or_Array_Name => Name_Compiler_Command,
+            In_Package              => Ide);
+       --  The value of Compiler_Command ("language") in package IDE, if defined
+ 
+    begin
+       --  No need to do it again if the compiler is known for this language
+ 
+       if Compiler_Names (For_Language) = null then
+ 
+          --  If compiler command is not defined for this language in package
+          --  IDE, use the default compiler for this language.
+ 
+          if Compiler = Nil_Variable_Value then
+             if For_Language in Default_Compiler_Names'Range then
+                Compiler_Names (For_Language) :=
+                  Default_Compiler_Names (For_Language);
+ 
+             else
+                Osint.Fail
+                  ("unknow compiler name for language """,
+                   Get_Name_String (Language_Names.Table (For_Language)),
+                   """");
+             end if;
+ 
+          else
+             Compiler_Names (For_Language) :=
+               new String'(Get_Name_String (Compiler.Value));
+          end if;
+ 
+          --  Check we have a GCC compiler (name ends with "gcc" or "g++")
+ 
+          declare
+             Comp_Name : constant String := Compiler_Names (For_Language).all;
+             Last3     : String (1 .. 3);
+          begin
+             if Comp_Name'Length >= 3 then
+                Last3 := Comp_Name (Comp_Name'Last - 2 .. Comp_Name'Last);
+                Compiler_Is_Gcc (For_Language) :=
+                  (Last3 = "gcc") or (Last3 = "g++");
+             else
+                Compiler_Is_Gcc (For_Language) := False;
+             end if;
+          end;
+ 
+          --  Locate the compiler on the path
+ 
+          Compiler_Paths (For_Language) :=
+            Locate_Exec_On_Path (Compiler_Names (For_Language).all);
+ 
+          --  Fail if compiler cannot be found
+ 
+          if Compiler_Paths (For_Language) = null then
+             if For_Language = Ada_Language_Index then
+                Osint.Fail
+                  ("unable to locate """,
+                   Compiler_Names (For_Language).all,
+                   """");
+ 
+             else
+                Osint.Fail
+                  ("unable to locate " &
+                   Get_Name_String (Language_Names.Table (For_Language)),
+                   " compiler """, Compiler_Names (For_Language).all & '"');
+             end if;
+          end if;
+       end if;
+    end Get_Compiler;
+ 
+    ------------------------------
+    -- Get_Imported_Directories --
+    ------------------------------
+ 
+    procedure Get_Imported_Directories
+      (Project : Project_Id;
+       Data    : in out Project_Data)
+    is
+       Imported_Projects : Project_List := Data.Imported_Projects;
+ 
+       Path_Length : Natural := 0;
+       Position    : Natural := 0;
+ 
+       procedure Add (Source_Dirs : String_List_Id);
+       --  Add a list of source directories
+ 
+       procedure Recursive_Get_Dirs (Prj : Project_Id);
+       --  Recursive procedure to get the source directories of this project
+       --  file and of the project files it imports, in the correct order.
+ 
+       ---------
+       -- Add --
+       ---------
+ 
+       procedure Add (Source_Dirs : String_List_Id) is
+          Element_Id : String_List_Id := Source_Dirs;
+          Element    : String_Element;
+          Add_Arg    : Boolean := True;
+ 
+       begin
+          --  Add each source directory path name, preceded by "-I" to Arguments
+ 
+          while Element_Id /= Nil_String loop
+             Element := String_Elements.Table (Element_Id);
+ 
+             if Element.Value /= No_Name then
+                Get_Name_String (Element.Value);
+ 
+                if Name_Len > 0 then
+                   --  Remove a trailing directory separator: this may cause
+                   --  problems on Windows.
+ 
+                   if Name_Len > 1
+                     and then Name_Buffer (Name_Len) = Directory_Separator
+                   then
+                      Name_Len := Name_Len - 1;
+                   end if;
+ 
+                   declare
+                      Arg : constant String :=
+                              "-I" & Name_Buffer (1 .. Name_Len);
+                   begin
+                      --  Check if directory is already in the list.
+                      --  If it is, no need to put it again.
+ 
+                      for Index in 1 .. Last_Argument loop
+                         if Arguments (Index).all = Arg then
+                            Add_Arg := False;
+                            exit;
+                         end if;
+                      end loop;
+ 
+                      if Add_Arg then
+                         if Path_Length /= 0 then
+                            Path_Length := Path_Length + 1;
+                         end if;
+ 
+                         Path_Length := Path_Length + Name_Len;
+ 
+                         Add_Argument (Arg, True);
+                      end if;
+                   end;
+                end if;
+             end if;
+ 
+             Element_Id := Element.Next;
+          end loop;
+       end Add;
+ 
+       ------------------------
+       -- Recursive_Get_Dirs --
+       ------------------------
+ 
+       procedure Recursive_Get_Dirs (Prj : Project_Id) is
+          Data     : Project_Data;
+          Imported : Project_List;
+ 
+       begin
+          --  Nothing to do if project is undefined
+ 
+          if Prj /= No_Project then
+             Data := Projects.Table (Prj);
+ 
+             --  Nothing to do if project has already been processed
+ 
+             if not Data.Seen then
+ 
+                --  Mark the project as processed, to avoid multiple processing
+                --  of the same project.
+ 
+                Projects.Table (Prj).Seen := True;
+ 
+                --  Add the source directories of this project
+ 
+                if not Data.Virtual then
+                   Add (Data.Source_Dirs);
+                end if;
+ 
+                Recursive_Get_Dirs (Data.Extends);
+ 
+                Imported := Data.Imported_Projects;
+ 
+                --  Call itself for all imported projects, if any
+ 
+                while Imported /= Empty_Project_List loop
+                   Recursive_Get_Dirs (Project_Lists.Table (Imported).Project);
+                   Imported := Project_Lists.Table (Imported).Next;
+                end loop;
+             end if;
+          end if;
+       end Recursive_Get_Dirs;
+ 
+    --  Start of processing for Get_Imported_Directories
+ 
+    begin
+       --  First, mark all project as not processed
+ 
+       for J in 1 .. Projects.Last loop
+          Projects.Table (J).Seen := False;
+       end loop;
+ 
+       --  Empty Arguments
+ 
+       Last_Argument := 0;
+ 
+       --  Process this project individually, project data are already known
+ 
+       Projects.Table (Project).Seen := True;
+ 
+       Add (Data.Source_Dirs);
+ 
+       Recursive_Get_Dirs (Data.Extends);
+ 
+       while Imported_Projects /= Empty_Project_List loop
+          Recursive_Get_Dirs (Project_Lists.Table (Imported_Projects).Project);
+          Imported_Projects := Project_Lists.Table (Imported_Projects).Next;
+       end loop;
+ 
+       Data.Imported_Directories_Switches :=
+         new Argument_List'(Arguments (1 .. Last_Argument));
+ 
+       --  Create the Include_Path, from the Arguments
+ 
+       Data.Include_Path := new String (1 .. Path_Length);
+       Data.Include_Path (1 .. Arguments (1)'Length - 2) :=
+         Arguments (1)(Arguments (1)'First + 2 .. Arguments (1)'Last);
+       Position := Arguments (1)'Length - 2;
+ 
+       for Arg in 2 .. Last_Argument loop
+          Position := Position + 1;
+          Data.Include_Path (Position) := Path_Separator;
+          Data.Include_Path
+            (Position + 1 .. Position + Arguments (Arg)'Length - 2) :=
+            Arguments (Arg)(Arguments (Arg)'First + 2 .. Arguments (Arg)'Last);
+          Position := Position + Arguments (Arg)'Length - 2;
+       end loop;
+ 
+       Last_Argument := 0;
+    end Get_Imported_Directories;
+ 
+    -------------
+    -- Gprmake --
+    -------------
+ 
+    procedure Gprmake is
+    begin
+       Makegpr.Initialize;
+ 
+       if Verbose_Mode then
+          Write_Eol;
+          Write_Str ("Parsing Project File """);
+          Write_Str (Project_File_Name.all);
+          Write_Str (""".");
+          Write_Eol;
+       end if;
+ 
+       --  Parse and process project files for other languages (not for Ada)
+ 
+       Prj.Pars.Parse
+         (Project           => Main_Project,
+          Project_File_Name => Project_File_Name.all,
+          Packages_To_Check => Packages_To_Check);
+ 
+       --  Fail if parsing/processing was unsuccessful
+ 
+       if Main_Project = No_Project then
+          Osint.Fail ("""", Project_File_Name.all, """ processing failed");
+       end if;
+ 
+       if Verbose_Mode then
+          Write_Eol;
+          Write_Str ("Parsing of Project File """);
+          Write_Str (Project_File_Name.all);
+          Write_Str (""" is finished.");
+          Write_Eol;
+       end if;
+ 
+       --  If -f was specified, we will certainly need to link (except when
+       --  -u or -c were specified, of course).
+ 
+       Need_To_Relink := Force_Compilations;
+ 
+       if Unique_Compile then
+          if Mains.Number_Of_Mains = 0 then
+             Osint.Fail
+               ("No source specified to compile in 'unique compile' mode");
+          else
+             Compile_Individual_Sources;
+             Report_Total_Errors ("compilation");
+          end if;
+ 
+       else
+          declare
+             Data : constant Prj.Project_Data := Projects.Table (Main_Project);
+          begin
+             if Data.Library and then Mains.Number_Of_Mains /= 0 then
+                Osint.Fail
+                  ("Cannot specify mains on the command line " &
+                   "for a Library Project");
+             end if;
+ 
+             --  First check for C++, to link libraries with g++,
+             --  rather than gcc.
+ 
+             Check_For_C_Plus_Plus;
+ 
+             --  Compile sources and build archives for library project,
+             --  if necessary.
+ 
+             Compile_Sources;
+ 
+             --  When Keep_Going is True, if we had some errors, fail now,
+             --  reporting the number of compilation errors.
+             --  Do not attempt to link.
+ 
+             Report_Total_Errors ("compilation");
+ 
+             --  If -c was not specified, link the executables,
+             --  if there are any.
+ 
+             if not Compile_Only and then not Data.Library then
+                Build_Global_Archive;
+                Link_Executables;
+             end if;
+ 
+             --  When Keep_Going is True, if we had some errors, fail, reporting
+             --  the number of linking errors.
+ 
+             Report_Total_Errors ("linking");
+          end;
+       end if;
+    end Gprmake;
+ 
+    ----------------
+    -- Initialize --
+    ----------------
+ 
+    procedure Initialize is
+    begin
+       --  Do some necessary package initializations
+ 
+       Csets.Initialize;
+       Namet.Initialize;
+       Snames.Initialize;
+       Prj.Initialize;
+       Mains.Delete;
+ 
+       --  Set Name_Ide and Name_Compiler_Command
+ 
+       Name_Len := 0;
+       Add_Str_To_Name_Buffer ("ide");
+       Name_Ide := Name_Find;
+ 
+       Name_Len := 0;
+       Add_Str_To_Name_Buffer ("compiler_command");
+       Name_Compiler_Command := Name_Find;
+ 
+       --  Make sure the -X switch table is empty
+ 
+       X_Switches.Set_Last (0);
+ 
+       --  Get the command line arguments
+ 
+       Scan_Args : for Next_Arg in 1 .. Argument_Count loop
+          Scan_Arg (Argument (Next_Arg));
+       end loop Scan_Args;
+ 
+       --  Fail if command line ended with "-P"
+ 
+       if Project_File_Name_Expected then
+          Osint.Fail ("project file name missing after -P");
+ 
+       --  Or if it ended with "-o"
+ 
+       elsif Output_File_Name_Expected then
+          Osint.Fail ("output file name missing after -o");
+       end if;
+ 
+       --  If no project file was specified, display the usage and fail
+ 
+       if Project_File_Name = null then
+          Usage;
+          Exit_Program (E_Success);
+       end if;
+ 
+       --  To be able of finding libgnat.a in MLib.Tgt, we need to have the
+       --  default search dirs established in Osint.
+ 
+       Osint.Add_Default_Search_Dirs;
+    end Initialize;
+ 
+    -----------------------------------
+    -- Is_Included_In_Global_Archive --
+    -----------------------------------
+ 
+    function Is_Included_In_Global_Archive
+      (Object_Name : Name_Id;
+       Project     : Project_Id) return Boolean
+    is
+       Data   : Project_Data := Projects.Table (Project);
+       Source : Other_Source_Id;
+ 
+    begin
+       while Data.Extended_By /= No_Project loop
+          Data := Projects.Table (Data.Extended_By);
+          Source := Data.First_Other_Source;
+ 
+          while Source /= No_Other_Source loop
+             if Other_Sources.Table (Source).Object_Name = Object_Name then
+                return False;
+             else
+                Source := Other_Sources.Table (Source).Next;
+             end if;
+          end loop;
+       end loop;
+ 
+       return True;
+    end Is_Included_In_Global_Archive;
+ 
+    ----------------------
+    -- Link_Executables --
+    ----------------------
+ 
+    procedure Link_Executables is
+       Data : constant Project_Data := Projects.Table (Main_Project);
+ 
+       Mains_Specified : constant Boolean := Mains.Number_Of_Mains /= 0;
+       --  True if main sources were specified on the command line
+ 
+       Object_Dir : constant String := Get_Name_String (Data.Object_Directory);
+       --  Path of the object directory of the main project
+ 
+       Source_Id : Other_Source_Id;
+       Source    : Other_Source;
+       Success   : Boolean;
+ 
+       Linker_Name : String_Access;
+       Linker_Path : String_Access;
+       --  The linker name and path, when linking is not done by gnatlink
+ 
+       Link_Done   : Boolean := False;
+       --  Set to True when the linker is invoked directly (not through
+       --  gnatmake) to be able to report if mains were up to date at the end
+       --  of execution.
+ 
+       procedure Add_C_Plus_Plus_Link_For_Gnatmake;
+       --  Add the --LINK= switch for gnatlink, depending on the C++ compiler
+ 
+       procedure Check_Time_Stamps (Exec_Time_Stamp : Time_Stamp_Type);
+       --  Check if there is an archive that is more recent than the executable
+       --  to decide if we need to relink.
+ 
+       procedure Choose_C_Plus_Plus_Link_Process;
+       --  If the C++ compiler is not g++, create the correct script to link
+ 
+       procedure Link_Foreign
+         (Main    : String;
+          Main_Id : Name_Id;
+          Source  : Other_Source);
+       --  Link a non-Ada main, when there is no Ada code
+ 
+       ---------------------------------------
+       -- Add_C_Plus_Plus_Link_For_Gnatmake --
+       ---------------------------------------
+ 
+       procedure Add_C_Plus_Plus_Link_For_Gnatmake is
+       begin
+          if Compiler_Is_Gcc (C_Plus_Plus_Language_Index) then
+             Add_Argument
+               ("--LINK=" & Compiler_Names (C_Plus_Plus_Language_Index).all,
+                Verbose_Mode);
+ 
+          else
+             Add_Argument
+               ("--LINK=" &
+                Object_Dir & Directory_Separator &
+                Cpp_Linker,
+                Verbose_Mode);
+          end if;
+       end Add_C_Plus_Plus_Link_For_Gnatmake;
+ 
+       -----------------------
+       -- Check_Time_Stamps --
+       -----------------------
+ 
+       procedure Check_Time_Stamps (Exec_Time_Stamp : Time_Stamp_Type) is
+          Prj_Data : Project_Data;
+ 
+       begin
+          for Prj in 1 .. Projects.Last loop
+             Prj_Data := Projects.Table (Prj);
+ 
+             --  There is an archive only in project
+             --  files with sources other than Ada
+             --  sources.
+ 
+             if Data.Other_Sources_Present then
+                declare
+                   Archive_Path : constant String :=
+                                    Get_Name_String
+                                      (Prj_Data.Object_Directory) &
+                   Directory_Separator &
+                   "lib" &
+                   Get_Name_String (Prj_Data.Name) &
+                     '.' & Archive_Ext;
+                   Archive_TS   : Time_Stamp_Type;
+                begin
+                   Name_Len := 0;
+                   Add_Str_To_Name_Buffer
+                     (Archive_Path);
+                   Archive_TS := File_Stamp (Name_Find);
+ 
+                   --  If the archive is later than the
+                   --  executable, we need to relink.
+ 
+                   if Archive_TS /=  Empty_Time_Stamp
+                     and then
+                       Exec_Time_Stamp < Archive_TS
+                   then
+                      Need_To_Relink := True;
+ 
+                      if Verbose_Mode then
+                         Write_Str ("      -> ");
+                         Write_Str (Archive_Path);
+                         Write_Str (" has time stamp ");
+                         Write_Str ("later than ");
+                         Write_Line ("executable");
+                      end if;
+ 
+                      exit;
+                   end if;
+                end;
+             end if;
+          end loop;
+       end Check_Time_Stamps;
+ 
+       -------------------------------------
+       -- Choose_C_Plus_Plus_Link_Process --
+       -------------------------------------
+ 
+       procedure Choose_C_Plus_Plus_Link_Process is
+       begin
+          if Compiler_Names (C_Plus_Plus_Language_Index) = null then
+             Get_Compiler (C_Plus_Plus_Language_Index);
+          end if;
+ 
+          if not Compiler_Is_Gcc (C_Plus_Plus_Language_Index) then
+             Change_Dir (Object_Dir);
+ 
+             declare
+                File : Ada.Text_IO.File_Type;
+                use Ada.Text_IO;
+ 
+             begin
+                Create (File, Out_File, Cpp_Linker);
+ 
+                Put_Line (File, "#!/bin/sh");
+ 
+                Put_Line (File, "LIBGCC=`gcc -print-libgcc-file-name`");
+                Put_Line
+                  (File,
+                   Compiler_Names (C_Plus_Plus_Language_Index).all &
+                   " $* ${LIBGCC}");
+ 
+                Close (File);
+                Set_Executable (Cpp_Linker);
+             end;
+          end if;
+       end Choose_C_Plus_Plus_Link_Process;
+ 
+       ------------------
+       -- Link_Foreign --
+       ------------------
+ 
+       procedure Link_Foreign
+         (Main    : String;
+          Main_Id : Name_Id;
+          Source  : Other_Source)
+       is
+          Executable_Name : constant String :=
+                              Get_Name_String
+                                (Executable_Of
+                                   (Project  => Main_Project,
+                                    Main     => Main_Id,
+                                    Index    => 0,
+                                    Ada_Main => False));
+          --  File name of the executable
+ 
+          Executable_Path : constant String :=
+                              Get_Name_String
+                                (Data.Exec_Directory) &
+                                 Directory_Separator &
+                                 Executable_Name;
+          --  Path name of the executable
+ 
+          Exec_Time_Stamp : Time_Stamp_Type;
+ 
+       begin
+          --  Now, check if the executable is up to date. It is considered
+          --  up to date if its time stamp is not earlier that the time stamp
+          --  of any archive. Only do that if we don't know if we need to link.
+ 
+          if not Need_To_Relink then
+ 
+             --  Get the time stamp of the executable
+ 
+             Name_Len := 0;
+             Add_Str_To_Name_Buffer (Executable_Path);
+             Exec_Time_Stamp := File_Stamp (Name_Find);
+ 
+             if Verbose_Mode then
+                Write_Str  ("   Checking executable ");
+                Write_Line (Executable_Name);
+             end if;
+ 
+             --  If executable does not exist, we need to link
+ 
+             if Exec_Time_Stamp = Empty_Time_Stamp then
+                Need_To_Relink := True;
+ 
+                if Verbose_Mode then
+                   Write_Line ("      -> not found");
+                end if;
+ 
+             --  Otherwise, get the time stamps of each archive. If one of
+             --  them is found later than the executable, we need to relink.
+ 
+             else
+                Check_Time_Stamps (Exec_Time_Stamp);
+             end if;
+ 
+             --  If Need_To_Relink is False, we are done
+ 
+             if Verbose_Mode and (not Need_To_Relink) then
+                Write_Line ("      -> up to date");
+             end if;
+          end if;
+ 
+          --  Prepare to link
+ 
+          if Need_To_Relink then
+             Link_Done := True;
+ 
+             Last_Argument := 0;
+ 
+             --  Specify the executable path name
+ 
+             Add_Argument (Dash_o, True);
+             Add_Argument
+               (Get_Name_String (Data.Exec_Directory) &
+                Directory_Separator &
+                Get_Name_String
+                  (Executable_Of
+                     (Project  => Main_Project,
+                      Main     => Main_Id,
+                      Index    => 0,
+                      Ada_Main => False)),
+                True);
+ 
+             --  Specify the object file of the main source
+ 
+             Add_Argument
+               (Object_Dir & Directory_Separator &
+                Get_Name_String (Source.Object_Name),
+                True);
+ 
+             --  Add all the archives, in a correct order
+ 
+             Add_Archives (For_Gnatmake => False);
+ 
+             --  Add the switches specified in package Linker of
+             --  the main project.
+ 
+             Add_Switches
+               (Data      => Data,
+                Proc      => Linker,
+                Language  => Source.Language,
+                File_Name => Main_Id);
+ 
+             --  Add the switches specified in attribute
+             --  Linker_Options of packages Linker.
+ 
+             if Link_Options_Switches = null then
+                Link_Options_Switches :=
+                  new Argument_List'
+                    (Linker_Options_Switches (Main_Project));
+             end if;
+ 
+             Add_Arguments (Link_Options_Switches.all, True);
+ 
+             --  Add the linking options specified on the
+             --  command line.
+ 
+             for Arg in 1 ..  Linker_Options.Last loop
+                Add_Argument (Linker_Options.Table (Arg), True);
+             end loop;
+ 
+             --  If there are shared libraries and the run path
+             --  option is supported, add the run path switch.
+ 
+             if Lib_Path.Last > 0 then
+                Add_Argument
+                  (Path_Option.all &
+                   String (Lib_Path.Table (1 .. Lib_Path.Last)),
+                   Verbose_Mode);
+             end if;
+ 
+             --  And invoke the linker
+ 
+             Display_Command (Linker_Name.all, Linker_Path);
+             Spawn
+               (Linker_Path.all,
+                Arguments (1 .. Last_Argument),
+                Success);
+ 
+             if not Success then
+                Report_Error ("could not link ", Main);
+             end if;
+          end if;
+       end Link_Foreign;
+ 
+    --  Start of processing of Link_Executables
+ 
+    begin
+       --  If no mains specified, get mains from attribute Main, if it exists
+ 
+       if not Mains_Specified then
+          declare
+             Element_Id : String_List_Id := Data.Mains;
+             Element    : String_Element;
+ 
+          begin
+             while Element_Id /= Nil_String loop
+                Element := String_Elements.Table (Element_Id);
+ 
+                if Element.Value /= No_Name then
+                   Mains.Add_Main (Get_Name_String (Element.Value));
+                end if;
+ 
+                Element_Id := Element.Next;
+             end loop;
+          end;
+       end if;
+ 
+       if Mains.Number_Of_Mains = 0 then
+ 
+          --  If the attribute Main is an empty list or not specified,
+          --  there is nothing to do.
+ 
+          if Verbose_Mode then
+             Write_Line ("No main to link");
+          end if;
+          return;
+       end if;
+ 
+       --  Check if -o was used for several mains
+ 
+       if Output_File_Name /= null and then Mains.Number_Of_Mains > 1 then
+          Osint.Fail ("cannot specify an executable name for several mains");
+       end if;
+ 
+       --  Check how we are going to do the link
+ 
+       if not Data.Other_Sources_Present then
+ 
+          --  Only Ada sources in the main project, and even maybe not
+ 
+          if not Data.Languages (Ada_Language_Index) then
+ 
+             --  Fail if the main project has no source of any language
+ 
+             Osint.Fail
+               ("project """,
+                Get_Name_String (Data.Name),
+                """ has no sources, so no main can be linked");
+ 
+          else
+             --  Only Ada sources in the main project, call gnatmake directly
+ 
+             Last_Argument := 0;
+ 
+             --  Choose correct linker if there is C++ code in other projects
+ 
+             if C_Plus_Plus_Is_Used then
+                Choose_C_Plus_Plus_Link_Process;
+                Add_Argument (Dash_largs, Verbose_Mode);
+                Add_C_Plus_Plus_Link_For_Gnatmake;
+                Add_Argument (Dash_margs, Verbose_Mode);
+             end if;
+ 
+             Compile_Link_With_Gnatmake (Mains_Specified);
+          end if;
+ 
+       else
+          --  There are other language sources. First check if there are also
+          --  sources in Ada.
+ 
+          if Data.Languages (Ada_Language_Index) then
+ 
+             --  There is a mix of Ada and other language sources in the main
+             --  project. Any main that is not a source of the other languages
+             --  will be deemed to be an Ada main.
+ 
+             --  Find the mains of the other languages and the Ada mains.
+ 
+             Mains.Reset;
+             Ada_Mains.Set_Last (0);
+             Other_Mains.Set_Last (0);
+ 
+             --  For each main
+ 
+             loop
+                declare
+                   Main    : constant String := Mains.Next_Main;
+                   Main_Id : Name_Id;
+ 
+                begin
+                   exit when Main'Length = 0;
+ 
+                   --  Get the main file name
+ 
+                   Name_Len := 0;
+                   Add_Str_To_Name_Buffer (Main);
+                   Canonical_Case_File_Name (Name_Buffer (1 .. Name_Len));
+                   Main_Id := Name_Find;
+                   Source_Id := Data.First_Other_Source;
+ 
+                   --  Check if it is a source of a language other than Ada
+ 
+                   while Source_Id /= No_Other_Source loop
+                      Source := Other_Sources.Table (Source_Id);
+                      exit when Source.File_Name = Main_Id;
+                      Source_Id := Source.Next;
+                   end loop;
+ 
+                   --  If it is not, put it in the list of Ada mains
+ 
+                   if Source_Id = No_Other_Source then
+                      Ada_Mains.Increment_Last;
+                      Ada_Mains.Table (Ada_Mains.Last) := new String'(Main);
+ 
+                   --  Otherwise, put it in the list of other mains
+ 
+                   else
+                      Other_Mains.Increment_Last;
+                      Other_Mains.Table (Other_Mains.Last) := Source;
+                   end if;
+                end;
+             end loop;
+ 
+             --  If C++ is one of the other language, create the shell script
+             --  to do the link.
+ 
+             if C_Plus_Plus_Is_Used then
+                Choose_C_Plus_Plus_Link_Process;
+             end if;
+ 
+             --  Call gnatmake with the necessary switches for each non-Ada
+             --  main, if there are some.
+ 
+             for Main in 1 .. Other_Mains.Last loop
+                declare
+                   Source : constant Other_Source := Other_Mains.Table (Main);
+ 
+                begin
+                   Last_Argument := 0;
+ 
+                   --  Add -o if -o was specified
+ 
+                   if Output_File_Name = null then
+                      Add_Argument (Dash_o, True);
+                      Add_Argument
+                        (Get_Name_String
+                           (Executable_Of
+                              (Project  => Main_Project,
+                               Main     => Other_Mains.Table (Main).File_Name,
+                               Index    => 0,
+                               Ada_Main => False)),
+                         True);
+                   end if;
+ 
+                   --  Call gnatmake with the -B switch
+ 
+                   Add_Argument (Dash_B, True);
+ 
+                   --  Add to the linking options the object file of the source
+ 
+                   Add_Argument (Dash_largs, Verbose_Mode);
+                   Add_Argument
+                     (Get_Name_String (Source.Object_Name), Verbose_Mode);
+ 
+                   --  If C++ is one of the language, add the --LINK switch
+                   --  to the linking switches.
+ 
+                   if C_Plus_Plus_Is_Used then
+                      Add_C_Plus_Plus_Link_For_Gnatmake;
+                   end if;
+ 
+                   --  Add -margs so that the following switches are for
+                   --  gnatmake
+ 
+                   Add_Argument (Dash_margs, Verbose_Mode);
+ 
+                   --  And link with gnatmake
+ 
+                   Compile_Link_With_Gnatmake (Mains_Specified => False);
+                end;
+             end loop;
+ 
+             --  If there are also Ada mains, call gnatmake for all these mains
+ 
+             if Ada_Mains.Last /= 0 then
+                Last_Argument := 0;
+ 
+                --  Put all the Ada mains as the first arguments
+ 
+                for Main in 1 .. Ada_Mains.Last loop
+                   Add_Argument (Ada_Mains.Table (Main).all, True);
+                end loop;
+ 
+                --  If C++ is one of the languages, add the --LINK switch to
+                --  the linking switches.
+ 
+                if Data.Languages (C_Plus_Plus_Language_Index) then
+                   Add_Argument (Dash_largs, Verbose_Mode);
+                   Add_C_Plus_Plus_Link_For_Gnatmake;
+                   Add_Argument (Dash_margs, Verbose_Mode);
+                end if;
+ 
+                --  And link with gnatmake
+ 
+                Compile_Link_With_Gnatmake (Mains_Specified => False);
+             end if;
+ 
+          else
+             --  No Ada source in main project
+ 
+             --  First, get the linker to invoke
+ 
+             if Data.Languages (C_Plus_Plus_Language_Index) then
+                Get_Compiler (C_Plus_Plus_Language_Index);
+                Linker_Name := Compiler_Names (C_Plus_Plus_Language_Index);
+                Linker_Path := Compiler_Paths (C_Plus_Plus_Language_Index);
+ 
+             else
+                Get_Compiler (C_Language_Index);
+                Linker_Name := Compiler_Names (C_Language_Index);
+                Linker_Path := Compiler_Paths (C_Language_Index);
+             end if;
+ 
+             Link_Done := False;
+ 
+             Mains.Reset;
+ 
+             --  Get each main, check if it is a source of the main project,
+             --  and if it is, invoke the linker.
+ 
+             loop
+                declare
+                   Main : constant String := Mains.Next_Main;
+                   Main_Id : Name_Id;
+                begin
+                   exit when Main'Length = 0;
+ 
+                   --  Get the file name of the main
+ 
+                   Name_Len := 0;
+                   Add_Str_To_Name_Buffer (Main);
+                   Canonical_Case_File_Name (Name_Buffer (1 .. Name_Len));
+                   Main_Id := Name_Find;
+                   Source_Id := Data.First_Other_Source;
+ 
+                   --  Check if it is a source of the main project file
+ 
+                   while Source_Id /= No_Other_Source loop
+                      Source := Other_Sources.Table (Source_Id);
+                      exit when Source.File_Name = Main_Id;
+                      Source_Id := Source.Next;
+                   end loop;
+ 
+                   --  Report an error if it is not
+ 
+                   if Source_Id = No_Other_Source then
+                      Report_Error
+                        (Main, "is not a source of project ",
+                         Get_Name_String (Data.Name));
+ 
+                   else
+                      Link_Foreign (Main, Main_Id, Source);
+                   end if;
+                end;
+             end loop;
+ 
+             --  If no linking was done, report it, except in Quiet Output
+ 
+             if (Verbose_Mode or (not Quiet_Output)) and (not Link_Done) then
+                Osint.Write_Program_Name;
+ 
+                if Mains.Number_Of_Mains = 1 then
+ 
+                   --  If there is only one executable, report its name too
+ 
+                   Write_Str (": """);
+                   Mains.Reset;
+ 
+                   declare
+                      Main    : constant String := Mains.Next_Main;
+                      Main_Id : Name_Id;
+                   begin
+                      Name_Len := 0;
+                      Add_Str_To_Name_Buffer (Main);
+                      Main_Id := Name_Find;
+                      Write_Str
+                        (Get_Name_String
+                           (Executable_Of
+                              (Project  => Main_Project,
+                               Main     => Main_Id,
+                               Index    => 0,
+                               Ada_Main => False)));
+                      Write_Line (""" up to date");
+                   end;
+ 
+                else
+                   Write_Line (": all executables up to date");
+                end if;
+             end if;
+          end if;
+       end if;
+    end Link_Executables;
+ 
+    ------------------
+    -- Report_Error --
+    ------------------
+ 
+    procedure Report_Error
+      (S1 : String;
+       S2 : String := "";
+       S3 : String := "")
+    is
+    begin
+       --  If Keep_Going is True, output error message preceded by error header
+ 
+       if Keep_Going then
+          Total_Number_Of_Errors := Total_Number_Of_Errors + 1;
+          Write_Str (Error_Header);
+          Write_Str (S1);
+          Write_Str (S2);
+          Write_Str (S3);
+          Write_Eol;
+ 
+       --  Otherwise just fail
+ 
+       else
+          Osint.Fail (S1, S2, S3);
+       end if;
+    end Report_Error;
+ 
+    -------------------------
+    -- Report_Total_Errors --
+    -------------------------
+ 
+    procedure Report_Total_Errors (Kind : String) is
+    begin
+       if Total_Number_Of_Errors /= 0 then
+          if Total_Number_Of_Errors = 1 then
+             Osint.Fail
+               ("One ", Kind, " error");
+ 
+          else
+             Osint.Fail
+               ("Total of" & Total_Number_Of_Errors'Img,
+                ' ' & Kind & " errors");
+          end if;
+       end if;
+    end Report_Total_Errors;
+ 
+    --------------
+    -- Scan_Arg --
+    --------------
+ 
+    procedure Scan_Arg (Arg : String) is
+    begin
+       pragma Assert (Arg'First = 1);
+ 
+       if Arg'Length = 0 then
+          return;
+       end if;
+ 
+       --  If preceding switch was -P, a project file name need to be
+       --  specified, not a switch.
+ 
+       if Project_File_Name_Expected then
+          if Arg (1) = '-' then
+             Osint.Fail ("project file name missing after -P");
+          else
+             Project_File_Name_Expected := False;
+             Project_File_Name := new String'(Arg);
+          end if;
+ 
+       --  If preceding switch was -o, an executable name need to be
+       --  specified, not a switch.
+ 
+       elsif Output_File_Name_Expected then
+          if Arg (1) = '-' then
+             Osint.Fail ("output file name missing after -o");
+          else
+             Output_File_Name_Expected := False;
+             Output_File_Name := new String'(Arg);
+          end if;
+ 
+       --  Set the processor/language for the following switches
+ 
+       --  -cargs: Ada compiler arguments
+ 
+       elsif Arg = "-cargs" then
+          Current_Language  := Ada_Language_Index;
+          Current_Processor := Compiler;
+ 
+       elsif Arg'Length > 7 and then Arg (1 .. 7) = "-cargs:" then
+          Name_Len := 0;
+          Add_Str_To_Name_Buffer (Arg (8 .. Arg'Last));
+          To_Lower (Name_Buffer (1 .. Name_Len));
+ 
+          declare
+             Lang : constant Name_Id := Name_Find;
+          begin
+             Current_Language := Language_Indexes.Get (Lang);
+ 
+             if Current_Language = No_Language_Index then
+                Add_Language_Name (Lang);
+                Current_Language := Last_Language_Index;
+             end if;
+ 
+             Current_Processor := Compiler;
+          end;
+ 
+       elsif Arg = "-largs" then
+          Current_Processor := Linker;
+ 
+       --  -gargs: gprmake
+ 
+       elsif Arg = "-gargs" then
+          Current_Processor := None;
+ 
+       --  A special test is needed for the -o switch within a -largs since
+       --  that is another way to specify the name of the final executable.
+ 
+       elsif Current_Processor = Linker and then Arg = "-o" then
+          Osint.Fail
+            ("switch -o not allowed within a -largs. Use -o directly.");
+ 
+       --  If current processor is not gprmake directly, store the option in
+       --  the appropriate table.
+ 
+       elsif Current_Processor /= None then
+          Add_Option (Arg);
+ 
+       --  Switches start with '-'
+ 
+       elsif Arg (1) = '-' then
+          if Arg = "-c" then
+             Compile_Only := True;
+ 
+          elsif Arg = "-f" then
+             Force_Compilations := True;
+ 
+          elsif Arg = "-h" then
+             Usage;
+ 
+          elsif Arg = "-k" then
+             Keep_Going := True;
+ 
+          elsif Arg = "-o" then
+             if Output_File_Name /= null then
+                Osint.Fail ("cannot specify several -o switches");
+ 
+             else
+                Output_File_Name_Expected := True;
+             end if;
+ 
+          elsif Arg'Length >= 2 and then Arg (2) = 'P' then
+             if Project_File_Name /= null then
+                Osint.Fail ("cannot have several project files specified");
+ 
+             elsif Arg'Length = 2 then
+                Project_File_Name_Expected := True;
+ 
+             else
+                Project_File_Name := new String'(Arg (3 .. Arg'Last));
+             end if;
+ 
+          elsif Arg = "-q" then
+             Quiet_Output := True;
+ 
+          elsif Arg = "-u" then
+             Unique_Compile := True;
+             Compile_Only   := True;
+ 
+          elsif Arg = "-v" then
+             Verbose_Mode := True;
+             Copyright;
+ 
+          elsif Arg'Length = 4 and then Arg (1 .. 3) = "-vP"
+            and then Arg (4) in '0' .. '2'
+          then
+             case Arg (4) is
+                when '0' =>
+                   Current_Verbosity := Prj.Default;
+                when '1' =>
+                   Current_Verbosity := Prj.Medium;
+                when '2' =>
+                   Current_Verbosity := Prj.High;
+                when others =>
+                   null;
+             end case;
+ 
+          elsif Arg'Length >= 3 and then Arg (2) = 'X'
+            and then Is_External_Assignment (Arg)
+          then
+             --  Is_External_Assignment has side effects when it returns True
+ 
+             --  Record the -X switch, so that they can be passed to gnatmake,
+             --  if gnatmake is called.
+ 
+             X_Switches.Increment_Last;
+             X_Switches.Table (X_Switches.Last) := new String'(Arg);
+ 
+          else
+             Osint.Fail ("illegal option """, Arg, """");
+          end if;
+ 
+       else
+          --  Not a switch: must be a main
+ 
+          Mains.Add_Main (Arg);
+       end if;
+    end Scan_Arg;
+ 
+    -----------------
+    -- Strip_CR_LF --
+    -----------------
+ 
+    function Strip_CR_LF (Text : String) return String is
+       To       : String (1 .. Text'Length);
+       Index_To : Natural := 0;
+ 
+    begin
+       for Index in Text'Range loop
+          if (Text (Index) /= ASCII.CR) and then (Text (Index) /= ASCII.LF) then
+             Index_To := Index_To + 1;
+             To (Index_To) := Text (Index);
+          end if;
+       end loop;
+ 
+       return To (1 .. Index_To);
+    end Strip_CR_LF;
+ 
+    -----------
+    -- Usage --
+    -----------
+ 
+    procedure Usage is
+    begin
+       if not Usage_Output then
+          Usage_Output := True;
+          Copyright;
+ 
+          Write_Str ("Usage: ");
+          Osint.Write_Program_Name;
+          Write_Str (" -P<project file> [opts]  [name] {");
+ 
+          for Lang in First_Language_Indexes loop
+             Write_Str ("[-cargs:lang opts] ");
+          end loop;
+ 
+          Write_Str ("[-largs opts] [-gargs opts]}");
+          Write_Eol;
+          Write_Eol;
+          Write_Str ("  name is zero or more file names");
+          Write_Eol;
+          Write_Eol;
+ 
+          --  GPRMAKE switches
+ 
+          Write_Str ("gprmake switches:");
+          Write_Eol;
+ 
+          --  Line for -c
+ 
+          Write_Str ("  -c       Compile only");
+          Write_Eol;
+ 
+          --  Line for -f
+ 
+          Write_Str ("  -f       Force recompilations");
+          Write_Eol;
+ 
+          --  Line for -k
+ 
+          Write_Str ("  -k       Keep going after compilation errors");
+          Write_Eol;
+ 
+          --  Line for -o
+ 
+          Write_Str ("  -o name  Choose an alternate executable name");
+          Write_Eol;
+ 
+          --  Line for -P
+ 
+          Write_Str ("  -Pproj   Use GNAT Project File proj");
+          Write_Eol;
+ 
+          --  Line for -q
+ 
+          Write_Str ("  -q       Be quiet/terse");
+          Write_Eol;
+ 
+          --  Line for -u
+ 
+          Write_Str
+            ("  -u       Unique compilation. Only compile the given files");
+          Write_Eol;
+ 
+          --  Line for -v
+ 
+          Write_Str ("  -v       Verbose output");
+          Write_Eol;
+ 
+          --  Line for -vPx
+ 
+          Write_Str ("  -vPx     Specify verbosity when parsing Project Files");
+          Write_Eol;
+ 
+          --  Line for -X
+ 
+          Write_Str ("  -Xnm=val Specify an external reference for " &
+                     "Project Files");
+          Write_Eol;
+          Write_Eol;
+ 
+          --  Line for -cargs
+ 
+          Write_Line ("  -cargs opts     opts are passed to the Ada compiler");
+ 
+          --  Line for -cargs:lang
+ 
+          Write_Line ("  -cargs:<lang> opts");
+          Write_Line ("     opts are passed to the compiler " &
+                      "for language < lang > ");
+ 
+          --  Line for -largs
+ 
+          Write_Str ("  -largs opts    opts are passed to the linker");
+          Write_Eol;
+ 
+          --  Line for -gargs
+ 
+          Write_Str ("  -gargs opts    opts directly interpreted by gprmake");
+          Write_Eol;
+          Write_Eol;
+ 
+       end if;
+    end Usage;
+ 
+ begin
+    Makeutl.Do_Fail := Report_Error'Access;
+ end Makegpr;
diff -Nrcpad gcc-3.4.3/gcc/ada/makegpr.ads gcc-4.0.0/gcc/ada/makegpr.ads
*** gcc-3.4.3/gcc/ada/makegpr.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/makegpr.ads	Mon May  3 11:58:34 2004
***************
*** 0 ****
--- 1,35 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                              M A K E G P R                               --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 2004 Free Software Foundation, Inc.               --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  The following package implements the facilities to compile, bind and/or
+ --  link a set of Ada and non Ada sources, specified in Project Files.
+ 
+ package Makegpr is
+ 
+    procedure Gprmake;
+    --  The driver of gprmake.
+ 
+ end Makegpr;
diff -Nrcpad gcc-3.4.3/gcc/ada/makeusg.adb gcc-4.0.0/gcc/ada/makeusg.adb
*** gcc-3.4.3/gcc/ada/makeusg.adb	Mon Jan  5 15:20:45 2004
--- gcc-4.0.0/gcc/ada/makeusg.adb	Mon May 10 16:18:53 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** begin
*** 88,93 ****
--- 88,104 ----
     Write_Str ("  -D dir   Specify dir as the object directory");
     Write_Eol;
  
+    --  Line for -eI
+ 
+    Write_Str ("  -eI      Index of unit in multi-unit source file");
+    Write_Eol;
+ 
+    --  Line for -eL
+ 
+    Write_Str ("  -eL      Follow symbolic links when processing " &
+               "project files");
+    Write_Eol;
+ 
     --  Line for -f
  
     Write_Str ("  -f       Force recompilations of non predefined units");
*************** begin
*** 180,185 ****
--- 191,202 ----
     Write_Str ("  -vPx     Specify verbosity when parsing GNAT Project Files");
     Write_Eol;
  
+    --  Line for -x
+ 
+    Write_Str ("  -x       " &
+               "Allow compilation of needed units external to the projects");
+    Write_Eol;
+ 
     --  Line for -X
  
     Write_Str ("  -Xnm=val Specify an external reference for GNAT " &
diff -Nrcpad gcc-3.4.3/gcc/ada/makeutl.adb gcc-4.0.0/gcc/ada/makeutl.adb
*** gcc-3.4.3/gcc/ada/makeutl.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/makeutl.adb	Mon May 10 16:18:52 2004
***************
*** 0 ****
--- 1,509 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                              M A K E U T L                               --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 2004 Free Software Foundation, Inc.               --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Namet;    use Namet;
+ with Osint;    use Osint;
+ with Prj;      use Prj;
+ with Prj.Ext;
+ with Prj.Util;
+ with Snames;   use Snames;
+ with Table;
+ with Types;    use Types;
+ 
+ with System.HTable;
+ 
+ package body Makeutl is
+ 
+    type Mark_Key is record
+       File  : File_Name_Type;
+       Index : Int;
+    end record;
+    --  Identify either a mono-unit source (when Index = 0) or a specific unit
+    --  in a multi-unit source.
+ 
+    --  There follow many global undocumented declarations, comments needed ???
+ 
+    Max_Mask_Num : constant := 2048;
+ 
+    subtype Mark_Num is Union_Id range 0 .. Max_Mask_Num - 1;
+ 
+    function Hash (Key : Mark_Key) return Mark_Num;
+ 
+    package Marks is new System.HTable.Simple_HTable
+      (Header_Num => Mark_Num,
+       Element    => Boolean,
+       No_Element => False,
+       Key        => Mark_Key,
+       Hash       => Hash,
+       Equal      => "=");
+    --  A hash table to keep tracks of the marked units.
+ 
+    type Linker_Options_Data is record
+       Project : Project_Id;
+       Options : String_List_Id;
+    end record;
+ 
+    Linker_Option_Initial_Count : constant := 20;
+ 
+    Linker_Options_Buffer : String_List_Access :=
+      new String_List (1 .. Linker_Option_Initial_Count);
+ 
+    Last_Linker_Option : Natural := 0;
+ 
+    package Linker_Opts is new Table.Table (
+      Table_Component_Type => Linker_Options_Data,
+      Table_Index_Type     => Integer,
+      Table_Low_Bound      => 1,
+      Table_Initial        => 10,
+      Table_Increment      => 100,
+      Table_Name           => "Make.Linker_Opts");
+ 
+    procedure Add_Linker_Option (Option : String);
+ 
+    -----------------------
+    -- Add_Linker_Option --
+    -----------------------
+ 
+    procedure Add_Linker_Option (Option : String) is
+    begin
+       if Option'Length > 0 then
+          if Last_Linker_Option = Linker_Options_Buffer'Last then
+             declare
+                New_Buffer : constant String_List_Access :=
+                               new String_List
+                                 (1 .. Linker_Options_Buffer'Last +
+                                         Linker_Option_Initial_Count);
+             begin
+                New_Buffer (Linker_Options_Buffer'Range) :=
+                  Linker_Options_Buffer.all;
+                Linker_Options_Buffer.all := (others => null);
+                Free (Linker_Options_Buffer);
+                Linker_Options_Buffer := New_Buffer;
+             end;
+          end if;
+ 
+          Last_Linker_Option := Last_Linker_Option + 1;
+          Linker_Options_Buffer (Last_Linker_Option) := new String'(Option);
+       end if;
+    end Add_Linker_Option;
+ 
+    ----------------------
+    -- Delete_All_Marks --
+    ----------------------
+ 
+    procedure Delete_All_Marks is
+    begin
+       Marks.Reset;
+    end Delete_All_Marks;
+ 
+    ----------
+    -- Hash --
+    ----------
+ 
+    function Hash (Key : Mark_Key) return Mark_Num is
+    begin
+       return Union_Id (Key.File) mod Max_Mask_Num;
+    end Hash;
+ 
+    ----------------------------
+    -- Is_External_Assignment --
+    ----------------------------
+ 
+    function Is_External_Assignment (Argv : String) return Boolean is
+       Start     : Positive := 3;
+       Finish    : Natural := Argv'Last;
+       Equal_Pos : Natural;
+ 
+    begin
+       if Argv'Last < 5 then
+          return False;
+ 
+       elsif Argv (3) = '"' then
+          if Argv (Argv'Last) /= '"' or else Argv'Last < 7 then
+             return False;
+          else
+             Start := 4;
+             Finish := Argv'Last - 1;
+          end if;
+       end if;
+ 
+       Equal_Pos := Start;
+ 
+       while Equal_Pos <= Finish and then Argv (Equal_Pos) /= '=' loop
+          Equal_Pos := Equal_Pos + 1;
+       end loop;
+ 
+       if Equal_Pos = Start
+         or else Equal_Pos >= Finish
+       then
+          return False;
+       else
+          Prj.Ext.Add
+            (External_Name => Argv (Start .. Equal_Pos - 1),
+             Value         => Argv (Equal_Pos + 1 .. Finish));
+          return True;
+       end if;
+    end Is_External_Assignment;
+ 
+    ---------------
+    -- Is_Marked --
+    ---------------
+ 
+    function Is_Marked
+      (Source_File : File_Name_Type;
+       Index       : Int := 0) return Boolean
+    is
+    begin
+       return Marks.Get (K => (File => Source_File, Index => Index));
+    end Is_Marked;
+ 
+    -----------------------------
+    -- Linker_Options_Switches --
+    -----------------------------
+ 
+    function Linker_Options_Switches
+      (Project  : Project_Id) return String_List
+    is
+       procedure Recursive_Add_Linker_Options (Proj : Project_Id);
+       --  The recursive routine used to add linker options
+ 
+       ----------------------------------
+       -- Recursive_Add_Linker_Options --
+       ----------------------------------
+ 
+       procedure Recursive_Add_Linker_Options (Proj : Project_Id) is
+          Data           : Project_Data;
+          Linker_Package : Package_Id;
+          Options        : Variable_Value;
+          Imported       : Project_List;
+ 
+       begin
+          if Proj /= No_Project then
+             Data := Projects.Table (Proj);
+ 
+             if not Data.Seen then
+                Projects.Table (Proj).Seen := True;
+                Imported := Data.Imported_Projects;
+ 
+                while Imported /= Empty_Project_List loop
+                   Recursive_Add_Linker_Options
+                     (Project_Lists.Table (Imported).Project);
+                   Imported := Project_Lists.Table (Imported).Next;
+                end loop;
+ 
+                if Proj /= Project then
+                   Linker_Package :=
+                     Prj.Util.Value_Of
+                       (Name => Name_Linker,
+                        In_Packages => Data.Decl.Packages);
+                   Options :=
+                     Prj.Util.Value_Of
+                       (Name => Name_Ada,
+                        Index => 0,
+                        Attribute_Or_Array_Name => Name_Linker_Options,
+                        In_Package => Linker_Package);
+ 
+                   --  If attribute is present, add the project with
+                   --  the attribute to table Linker_Opts.
+ 
+                   if Options /= Nil_Variable_Value then
+                      Linker_Opts.Increment_Last;
+                      Linker_Opts.Table (Linker_Opts.Last) :=
+                        (Project => Proj, Options => Options.Values);
+                   end if;
+                end if;
+             end if;
+          end if;
+       end Recursive_Add_Linker_Options;
+ 
+    --  Start of processing for Linker_Options_Switches
+ 
+    begin
+       Linker_Opts.Init;
+ 
+       for Index in 1 .. Projects.Last loop
+          Projects.Table (Index).Seen := False;
+       end loop;
+ 
+       Recursive_Add_Linker_Options (Project);
+ 
+       Last_Linker_Option := 0;
+ 
+       for Index in reverse 1 .. Linker_Opts.Last loop
+          declare
+             Options : String_List_Id := Linker_Opts.Table (Index).Options;
+             Proj    : constant Project_Id :=
+               Linker_Opts.Table (Index).Project;
+             Option  : Name_Id;
+ 
+          begin
+             --  If Dir_Path has not been computed for this project, do it now
+ 
+             if Projects.Table (Proj).Dir_Path = null then
+                Projects.Table (Proj).Dir_Path :=
+                  new String'
+                    (Get_Name_String (Projects.Table (Proj). Directory));
+             end if;
+ 
+             while Options /= Nil_String loop
+                Option := String_Elements.Table (Options).Value;
+                Options := String_Elements.Table (Options).Next;
+                Add_Linker_Option (Get_Name_String (Option));
+ 
+                --  Object files and -L switches specified with
+                --  relative paths and must be converted to
+                --  absolute paths.
+ 
+                Test_If_Relative_Path
+                  (Switch =>
+                     Linker_Options_Buffer (Last_Linker_Option),
+                   Parent => Projects.Table (Proj).Dir_Path,
+                   Including_L_Switch => True);
+             end loop;
+          end;
+       end loop;
+ 
+       return Linker_Options_Buffer (1 .. Last_Linker_Option);
+    end Linker_Options_Switches;
+ 
+    -----------
+    -- Mains --
+    -----------
+ 
+    package body Mains is
+ 
+       package Names is new Table.Table
+         (Table_Component_Type => File_Name_Type,
+          Table_Index_Type     => Integer,
+          Table_Low_Bound      => 1,
+          Table_Initial        => 10,
+          Table_Increment      => 100,
+          Table_Name           => "Makeutl.Mains.Names");
+       --  The table that stores the mains
+ 
+       Current : Natural := 0;
+       --  The index of the last main retrieved from the table
+ 
+       --------------
+       -- Add_Main --
+       --------------
+ 
+       procedure Add_Main (Name : String) is
+       begin
+          Name_Len := 0;
+          Add_Str_To_Name_Buffer (Name);
+          Names.Increment_Last;
+          Names.Table (Names.Last) := Name_Find;
+       end Add_Main;
+ 
+       ------------
+       -- Delete --
+       ------------
+ 
+       procedure Delete is
+       begin
+          Names.Set_Last (0);
+          Reset;
+       end Delete;
+ 
+       ---------------
+       -- Next_Main --
+       ---------------
+ 
+       function Next_Main return String is
+       begin
+          if Current >= Names.Last then
+             return "";
+ 
+          else
+             Current := Current + 1;
+             return Get_Name_String (Names.Table (Current));
+          end if;
+       end Next_Main;
+ 
+       ---------------------
+       -- Number_Of_Mains --
+       ---------------------
+ 
+       function Number_Of_Mains return Natural is
+       begin
+          return Names.Last;
+       end Number_Of_Mains;
+ 
+       -----------
+       -- Reset --
+       -----------
+ 
+       procedure Reset is
+       begin
+          Current := 0;
+       end Reset;
+ 
+    end Mains;
+ 
+    ----------
+    -- Mark --
+    ----------
+ 
+    procedure Mark (Source_File : File_Name_Type; Index : Int := 0) is
+    begin
+       Marks.Set (K => (File => Source_File, Index => Index), E => True);
+    end Mark;
+ 
+    ---------------------------
+    -- Test_If_Relative_Path --
+    ---------------------------
+ 
+    procedure Test_If_Relative_Path
+      (Switch             : in out String_Access;
+       Parent             : String_Access;
+       Including_L_Switch : Boolean := True)
+    is
+    begin
+       if Switch /= null then
+          declare
+             Sw : String (1 .. Switch'Length);
+             Start : Positive;
+ 
+          begin
+             Sw := Switch.all;
+ 
+             if Sw (1) = '-' then
+                if Sw'Length >= 3
+                  and then (Sw (2) = 'A'
+                            or else Sw (2) = 'I'
+                            or else (Including_L_Switch and then Sw (2) = 'L'))
+                then
+                   Start := 3;
+ 
+                   if Sw = "-I-" then
+                      return;
+                   end if;
+ 
+                elsif Sw'Length >= 4
+                  and then (Sw (2 .. 3) = "aL"
+                            or else Sw (2 .. 3) = "aO"
+                            or else Sw (2 .. 3) = "aI")
+                then
+                   Start := 4;
+ 
+                else
+                   return;
+                end if;
+ 
+                --  Because relative path arguments to --RTS= may be relative
+                --  to the search directory prefix, those relative path
+                --  arguments are not converted.
+ 
+                if not Is_Absolute_Path (Sw (Start .. Sw'Last)) then
+                   if Parent = null or else Parent'Length = 0 then
+                      Do_Fail
+                        ("relative search path switches (""",
+                         Sw,
+                         """) are not allowed");
+ 
+                   else
+                      Switch :=
+                        new String'
+                          (Sw (1 .. Start - 1) &
+                           Parent.all &
+                           Directory_Separator &
+                           Sw (Start .. Sw'Last));
+                   end if;
+                end if;
+ 
+             else
+                if not Is_Absolute_Path (Sw) then
+                   if Parent = null or else Parent'Length = 0 then
+                      Do_Fail
+                        ("relative paths (""", Sw, """) are not allowed");
+ 
+                   else
+                      Switch :=
+                        new String'(Parent.all & Directory_Separator & Sw);
+                   end if;
+                end if;
+             end if;
+          end;
+       end if;
+    end Test_If_Relative_Path;
+ 
+    -------------------
+    -- Unit_Index_Of --
+    -------------------
+ 
+    function Unit_Index_Of (ALI_File : File_Name_Type) return Int is
+       Start  : Natural;
+       Finish : Natural;
+       Result : Int := 0;
+ 
+    begin
+       Get_Name_String (ALI_File);
+ 
+       --  First, find the last dot
+ 
+       Finish := Name_Len;
+ 
+       while Finish >= 1 and then Name_Buffer (Finish) /= '.' loop
+          Finish := Finish - 1;
+       end loop;
+ 
+       if Finish = 1 then
+          return 0;
+       end if;
+ 
+       --  Now check that the dot is preceded by digits
+ 
+       Start := Finish;
+       Finish := Finish - 1;
+ 
+       while Start >= 1 and then Name_Buffer (Start - 1) in '0' .. '9' loop
+          Start := Start - 1;
+       end loop;
+ 
+       --  If there is no difits, or if the digits are not preceded by
+       --  the character that precedes a unit index, this is not the ALI file
+       --  of a unit in a multi-unit source.
+ 
+       if Start > Finish
+         or else Start = 1
+         or else Name_Buffer (Start - 1) /= Multi_Unit_Index_Character
+       then
+          return 0;
+       end if;
+ 
+       --  Build the index from the digit(s)
+ 
+       while Start <= Finish loop
+          Result := Result * 10 +
+                      Character'Pos (Name_Buffer (Start)) - Character'Pos ('0');
+          Start := Start + 1;
+       end loop;
+ 
+       return Result;
+    end Unit_Index_Of;
+ 
+ end Makeutl;
diff -Nrcpad gcc-3.4.3/gcc/ada/makeutl.ads gcc-4.0.0/gcc/ada/makeutl.ads
*** gcc-3.4.3/gcc/ada/makeutl.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/makeutl.ads	Mon May 10 16:18:52 2004
***************
*** 0 ****
--- 1,117 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                              M A K E U T L                               --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 2004 Free Software Foundation, Inc.               --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Osint;
+ with Prj;   use Prj;
+ with Types; use Types;
+ 
+ with GNAT.OS_Lib; use GNAT.OS_Lib;
+ 
+ package Makeutl is
+ 
+    type Fail_Proc is access procedure
+      (S1 : String;
+       S2 : String := "";
+       S3 : String := "");
+    Do_Fail : Fail_Proc := Osint.Fail'Access;
+    --  Comment required ???
+ 
+    function Unit_Index_Of (ALI_File : File_Name_Type) return Int;
+    --  Find the index of a unit in a source file. Return zero if the file
+    --  is not a multi-unit source file.
+ 
+    function Is_External_Assignment (Argv : String) return Boolean;
+    --  Verify that an external assignment switch is syntactically correct
+    --
+    --  Correct forms are:
+    --
+    --      -Xname=value
+    --      -X"name=other value"
+    --
+    --  Assumptions: 'First = 1, Argv (1 .. 2) = "-X"
+    --  When this function returns True, the external assignment has
+    --  been entered by a call to Prj.Ext.Add, so that in a project
+    --  file, External ("name") will return "value".
+ 
+    function Linker_Options_Switches (Project  : Project_Id) return String_List;
+    --  Comment required ???
+ 
+    --  Package Mains is used to store the mains specified on the command line
+    --  and to retrieve them when a project file is used, to verify that the
+    --  files exist and that they belong to a project file.
+ 
+    package Mains is
+ 
+       --  Mains are stored in a table. An index is used to retrieve the mains
+       --  from the table.
+ 
+       procedure Add_Main (Name : String);
+       --  Add one main to the table
+ 
+       procedure Delete;
+       --  Empty the table
+ 
+       procedure Reset;
+       --  Reset the index to the beginning of the table
+ 
+       function Next_Main return String;
+       --  Increase the index and return the next main.
+       --  If table is exhausted, return an empty string.
+ 
+       function Number_Of_Mains return Natural;
+       --  Returns the number of mains added with Add_Main since the last call
+       --  to Delete.
+ 
+    end Mains;
+ 
+    procedure Test_If_Relative_Path
+      (Switch             : in out String_Access;
+       Parent             : String_Access;
+       Including_L_Switch : Boolean := True);
+    --  Test if Switch is a relative search path switch.
+    --  If it is, fail if Parent is null, otherwise prepend the path with
+    --  Parent. This subprogram is only called when using project files.
+    --  For gnatbind switches, Including_L_Switch is False, because the
+    --  argument of the -L switch is not a path.
+ 
+    ----------------------
+    -- Marking Routines --
+    ----------------------
+ 
+    procedure Mark (Source_File : File_Name_Type; Index : Int := 0);
+    --  Mark a unit, identified by its source file and, when Index is not 0,
+    --  the index of the unit in the source file. Marking is used to signal
+    --  that the unit has already been inserted in the Q.
+ 
+    function Is_Marked
+      (Source_File : File_Name_Type;
+       Index       : Int := 0) return Boolean;
+    --  Returns True if the unit was previously marked.
+ 
+    procedure Delete_All_Marks;
+    --  Remove all file/index couples marked
+ 
+ end Makeutl;
diff -Nrcpad gcc-3.4.3/gcc/ada/mdll-utl.adb gcc-4.0.0/gcc/ada/mdll-utl.adb
*** gcc-3.4.3/gcc/ada/mdll-utl.adb	Fri Nov 14 10:24:43 2003
--- gcc-4.0.0/gcc/ada/mdll-utl.adb	Mon Apr 19 15:20:00 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body MDLL.Utl is
*** 308,360 ****
     begin
        --  dlltool
  
-       Dlltool_Exec := OS_Lib.Locate_Exec_On_Path (Dlltool_Name);
- 
        if Dlltool_Exec = null then
!          Exceptions.Raise_Exception
!            (Tools_Error'Identity, Dlltool_Name & " not found in path");
  
!       elsif Verbose then
!          Text_IO.Put_Line ("using " & Dlltool_Exec.all);
        end if;
  
        --  gcc
  
-       Gcc_Exec     := OS_Lib.Locate_Exec_On_Path (Gcc_Name);
- 
        if Gcc_Exec = null then
!          Exceptions.Raise_Exception
!            (Tools_Error'Identity, Gcc_Name & " not found in path");
  
!       elsif Verbose then
!          Text_IO.Put_Line ("using " & Gcc_Exec.all);
        end if;
  
        --  gnatbind
  
-       Gnatbind_Exec     := OS_Lib.Locate_Exec_On_Path (Gnatbind_Name);
- 
        if Gnatbind_Exec = null then
!          Exceptions.Raise_Exception
!            (Tools_Error'Identity, Gnatbind_Name & " not found in path");
  
!       elsif Verbose then
!          Text_IO.Put_Line ("using " & Gnatbind_Exec.all);
        end if;
  
        --  gnatlink
  
-       Gnatlink_Exec     := OS_Lib.Locate_Exec_On_Path (Gnatlink_Name);
- 
        if Gnatlink_Exec = null then
!          Exceptions.Raise_Exception
!            (Tools_Error'Identity, Gnatlink_Name & " not found in path");
  
!       elsif Verbose then
!          Text_IO.Put_Line ("using " & Gnatlink_Exec.all);
!          Text_IO.New_Line;
!       end if;
  
     end Locate;
  
  end MDLL.Utl;
--- 308,367 ----
     begin
        --  dlltool
  
        if Dlltool_Exec = null then
!          Dlltool_Exec := OS_Lib.Locate_Exec_On_Path (Dlltool_Name);
  
!          if Dlltool_Exec = null then
!             Exceptions.Raise_Exception
!               (Tools_Error'Identity, Dlltool_Name & " not found in path");
! 
!          elsif Verbose then
!             Text_IO.Put_Line ("using " & Dlltool_Exec.all);
!          end if;
        end if;
  
        --  gcc
  
        if Gcc_Exec = null then
!          Gcc_Exec := OS_Lib.Locate_Exec_On_Path (Gcc_Name);
  
!          if Gcc_Exec = null then
!             Exceptions.Raise_Exception
!               (Tools_Error'Identity, Gcc_Name & " not found in path");
! 
!          elsif Verbose then
!             Text_IO.Put_Line ("using " & Gcc_Exec.all);
!          end if;
        end if;
  
        --  gnatbind
  
        if Gnatbind_Exec = null then
!          Gnatbind_Exec := OS_Lib.Locate_Exec_On_Path (Gnatbind_Name);
  
!          if Gnatbind_Exec = null then
!             Exceptions.Raise_Exception
!               (Tools_Error'Identity, Gnatbind_Name & " not found in path");
! 
!          elsif Verbose then
!             Text_IO.Put_Line ("using " & Gnatbind_Exec.all);
!          end if;
        end if;
  
        --  gnatlink
  
        if Gnatlink_Exec = null then
!          Gnatlink_Exec := OS_Lib.Locate_Exec_On_Path (Gnatlink_Name);
  
!          if Gnatlink_Exec = null then
!             Exceptions.Raise_Exception
!               (Tools_Error'Identity, Gnatlink_Name & " not found in path");
  
+          elsif Verbose then
+             Text_IO.Put_Line ("using " & Gnatlink_Exec.all);
+             Text_IO.New_Line;
+          end if;
+       end if;
     end Locate;
  
  end MDLL.Utl;
diff -Nrcpad gcc-3.4.3/gcc/ada/mdll.adb gcc-4.0.0/gcc/ada/mdll.adb
*** gcc-3.4.3/gcc/ada/mdll.adb	Mon Jan  5 15:20:45 2004
--- gcc-4.0.0/gcc/ada/mdll.adb	Mon Sep 13 10:18:40 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body MDLL is
*** 52,58 ****
        Def_Filename  : String;
        Lib_Address   : String  := "";
        Build_Import  : Boolean := False;
!       Relocatable   : Boolean := False)
     is
  
        use type OS_Lib.Argument_List;
--- 52,59 ----
        Def_Filename  : String;
        Lib_Address   : String  := "";
        Build_Import  : Boolean := False;
!       Relocatable   : Boolean := False;
!       Map_File      : Boolean := False)
     is
  
        use type OS_Lib.Argument_List;
*************** package body MDLL is
*** 70,75 ****
--- 71,77 ----
        Lib_Opt  : aliased String := "-mdll";
        Out_Opt  : aliased String := "-o";
        Adr_Opt  : aliased String := "-Wl,--image-base=" & Lib_Address;
+       Map_Opt  : aliased String := "-Wl,-Map," & Lib_Filename & ".map";
  
        L_Afiles : Argument_List := Afiles;
        --  Local afiles list. This list can be reordered to ensure that the
*************** package body MDLL is
*** 97,108 ****
  
        procedure Build_Reloc_DLL is
           --  Objects plus the export table (.exp) file
- 
           Objects_Exp_File : constant OS_Lib.Argument_List
             := Exp_File'Unchecked_Access & Ofiles;
  
           Success : Boolean;
- 
        begin
           if not Quiet then
              Text_IO.Put_Line ("building relocatable DLL...");
--- 99,108 ----
*************** package body MDLL is
*** 147,156 ****
  
           --  5) Build the dynamic library
  
!          Utl.Gcc (Output_File => Dll_File,
!                   Files       => Objects_Exp_File,
!                   Options     => Adr_Opt'Unchecked_Access & All_Options,
!                   Build_Lib   => True);
  
           OS_Lib.Delete_File (Exp_File, Success);
           OS_Lib.Delete_File (Bas_File, Success);
--- 147,166 ----
  
           --  5) Build the dynamic library
  
!          declare
!             Params : OS_Lib.Argument_List :=
!                        Adr_Opt'Unchecked_Access & All_Options;
!          begin
!             if Map_File then
!                Params := Map_Opt'Unchecked_Access & Params;
!             end if;
! 
!             Utl.Gcc
!               (Output_File => Dll_File,
!                Files       => Objects_Exp_File,
!                Options     => Params,
!                Build_Lib   => True);
!          end;
  
           OS_Lib.Delete_File (Exp_File, Success);
           OS_Lib.Delete_File (Bas_File, Success);
*************** package body MDLL is
*** 234,240 ****
           Utl.Gnatbind (L_Afiles, Options & Bargs_Options);
  
           declare
!             Params : constant OS_Lib.Argument_List :=
                         Out_Opt'Unchecked_Access &
                         Dll_File'Unchecked_Access &
                         Lib_Opt'Unchecked_Access &
--- 244,250 ----
           Utl.Gnatbind (L_Afiles, Options & Bargs_Options);
  
           declare
!             Params : OS_Lib.Argument_List :=
                         Out_Opt'Unchecked_Access &
                         Dll_File'Unchecked_Access &
                         Lib_Opt'Unchecked_Access &
*************** package body MDLL is
*** 243,248 ****
--- 253,262 ----
                         Ofiles &
                         All_Options;
           begin
+             if Map_File then
+                Params := Map_Opt'Unchecked_Access & Params;
+             end if;
+ 
              Utl.Gnatlink (L_Afiles (L_Afiles'Last).all, Params);
           end;
  
*************** package body MDLL is
*** 285,294 ****
  
           --  Build the DLL
  
!          Utl.Gcc (Output_File => Dll_File,
!                   Files       => Exp_File'Unchecked_Access & Ofiles,
!                   Options     => Adr_Opt'Unchecked_Access & All_Options,
!                   Build_Lib   => True);
  
           OS_Lib.Delete_File (Exp_File, Success);
  
--- 299,317 ----
  
           --  Build the DLL
  
!          declare
!             Params : OS_Lib.Argument_List :=
!                        Adr_Opt'Unchecked_Access & All_Options;
!          begin
!             if Map_File then
!                Params :=  Map_Opt'Unchecked_Access & Params;
!             end if;
! 
!             Utl.Gcc (Output_File => Dll_File,
!                      Files       => Exp_File'Unchecked_Access & Ofiles,
!                      Options     => Params,
!                      Build_Lib   => True);
!          end;
  
           OS_Lib.Delete_File (Exp_File, Success);
  
*************** package body MDLL is
*** 330,336 ****
           Utl.Gnatbind (L_Afiles, Options & Bargs_Options);
  
           declare
!             Params : constant OS_Lib.Argument_List :=
                         Out_Opt'Unchecked_Access &
                         Dll_File'Unchecked_Access &
                         Lib_Opt'Unchecked_Access &
--- 353,359 ----
           Utl.Gnatbind (L_Afiles, Options & Bargs_Options);
  
           declare
!             Params : OS_Lib.Argument_List :=
                         Out_Opt'Unchecked_Access &
                         Dll_File'Unchecked_Access &
                         Lib_Opt'Unchecked_Access &
*************** package body MDLL is
*** 339,344 ****
--- 362,371 ----
                         Ofiles &
                         All_Options;
           begin
+             if Map_File then
+                Params := Map_Opt'Unchecked_Access & Params;
+             end if;
+ 
              Utl.Gnatlink (L_Afiles (L_Afiles'Last).all, Params);
           end;
  
*************** package body MDLL is
*** 370,376 ****
        end if;
  
        case Relocatable is
- 
           when True =>
              if L_Afiles'Length = 0 then
                 Build_Reloc_DLL;
--- 397,402 ----
*************** package body MDLL is
*** 384,390 ****
              else
                 Ada_Build_Non_Reloc_DLL;
              end if;
- 
        end case;
     end Build_Dynamic_Library;
  
--- 410,415 ----
*************** package body MDLL is
*** 408,420 ****
        --------------------------
  
        procedure Build_Import_Library (Def_Base_Filename : String) is
- 
           Def_File : String renames Def_Filename;
           Dll_File : constant String := Def_Base_Filename & ".dll";
           Lib_File : constant String := "lib" & Base_Filename & ".a";
  
        begin
- 
           if not Quiet then
              Text_IO.Put_Line ("Building import library...");
              Text_IO.Put_Line ("make " & Lib_File &
--- 433,443 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/mdll.ads gcc-4.0.0/gcc/ada/mdll.ads
*** gcc-3.4.3/gcc/ada/mdll.ads	Thu Apr 24 17:54:06 2003
--- gcc-4.0.0/gcc/ada/mdll.ads	Mon Sep 13 10:18:40 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2001 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 28,33 ****
--- 28,34 ----
  --  to build Windows DLL
  
  with GNAT.OS_Lib;
+ --  Should have USE here ???
  
  package MDLL is
  
*************** package MDLL is
*** 36,55 ****
  
     Null_Argument_List : constant Argument_List := (1 .. 0 => new String'(""));
  
!    Null_Argument_List_Access : Argument_List_Access
!      := new Argument_List (1 .. 0);
  
!    Tools_Error    : exception;
  
!    Verbose        : Boolean := False;
!    Quiet          : Boolean := False;
  
     --  Kill_Suffix is used by dlltool to know whether or not the @nn suffix
     --  should be removed from the exported names. When Kill_Suffix is set to
     --  True then dlltool -k option is used.
  
-    Kill_Suffix    : Boolean := False;
- 
     procedure Build_Dynamic_Library
       (Ofiles        : Argument_List;
        Afiles        : Argument_List;
--- 37,57 ----
  
     Null_Argument_List : constant Argument_List := (1 .. 0 => new String'(""));
  
!    Null_Argument_List_Access : Argument_List_Access :=
!                                  new Argument_List (1 .. 0);
  
!    Tools_Error : exception;
!    --  Commment required
  
!    Verbose : Boolean := False;
!    Quiet   : Boolean := False;
!    --  Comment required ???
  
+    Kill_Suffix : Boolean := False;
     --  Kill_Suffix is used by dlltool to know whether or not the @nn suffix
     --  should be removed from the exported names. When Kill_Suffix is set to
     --  True then dlltool -k option is used.
  
     procedure Build_Dynamic_Library
       (Ofiles        : Argument_List;
        Afiles        : Argument_List;
*************** package MDLL is
*** 60,73 ****
        Def_Filename  : String;
        Lib_Address   : String  := "";
        Build_Import  : Boolean := False;
!       Relocatable   : Boolean := False);
     --  Build a DLL and the import library to link against the DLL.
     --  this function handles relocatable and non relocatable DLL.
     --  If the Afiles argument list contains some Ada units then it will
     --  generate the right adainit and adafinal and integrate it in the DLL.
     --  If the Afiles argument list is empty (there is only some object files
     --  provided) then it will not try to build a binder file. This is ok to
!    --  build DLL containing no Ada code.
  
     procedure Build_Import_Library
       (Lib_Filename : String;
--- 62,77 ----
        Def_Filename  : String;
        Lib_Address   : String  := "";
        Build_Import  : Boolean := False;
!       Relocatable   : Boolean := False;
!       Map_File      : Boolean := False);
     --  Build a DLL and the import library to link against the DLL.
     --  this function handles relocatable and non relocatable DLL.
     --  If the Afiles argument list contains some Ada units then it will
     --  generate the right adainit and adafinal and integrate it in the DLL.
     --  If the Afiles argument list is empty (there is only some object files
     --  provided) then it will not try to build a binder file. This is ok to
!    --  build DLL containing no Ada code. If Map_File is set to True, a map
!    --  file named Lib_Filename & ".map" will be created.
  
     procedure Build_Import_Library
       (Lib_Filename : String;
diff -Nrcpad gcc-3.4.3/gcc/ada/memtrack.adb gcc-4.0.0/gcc/ada/memtrack.adb
*** gcc-3.4.3/gcc/ada/memtrack.adb	Thu Jan 15 17:24:17 2004
--- gcc-4.0.0/gcc/ada/memtrack.adb	Mon Mar 29 12:03:10 2004
***************
*** 31,37 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This version contains allocation tracking capability.
  
  --  The object file corresponding to this instrumented version is to be found
  --  in libgmem.
--- 31,37 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This version contains allocation tracking capability
  
  --  The object file corresponding to this instrumented version is to be found
  --  in libgmem.
*************** package body System.Memory is
*** 235,240 ****
--- 235,241 ----
  
     procedure Free (Ptr : System.Address) is
        Addr : aliased constant System.Address := Ptr;
+ 
     begin
        Lock_Task.all;
  
*************** package body System.Memory is
*** 265,271 ****
           c_free (Ptr);
  
           First_Call := True;
- 
        end if;
  
        Unlock_Task.all;
--- 266,271 ----
*************** package body System.Memory is
*** 280,289 ****
--- 280,291 ----
        if Needs_Init then
           Needs_Init := False;
           Gmemfile := fopen (Gmemfname, "wb" & ASCII.NUL);
+ 
           if Gmemfile = System.Null_Address then
              Put_Line ("Couldn't open gnatmem log file for writing");
              OS_Exit (255);
           end if;
+ 
           fwrite ("GMEM DUMP" & ASCII.LF, 10, 1, Gmemfile);
        end if;
     end Gmem_Initialize;
*************** package body System.Memory is
*** 295,308 ****
     function Realloc
       (Ptr : System.Address; Size : size_t) return System.Address
     is
!       Result : System.Address;
     begin
        if Size = size_t'Last then
           Raise_Exception (Storage_Error'Identity, "object too large");
        end if;
  
        Abort_Defer.all;
!       Result := c_realloc (Ptr, Size);
        Abort_Undefer.all;
  
        if Result = System.Null_Address then
--- 297,363 ----
     function Realloc
       (Ptr : System.Address; Size : size_t) return System.Address
     is
!       Addr : aliased constant System.Address := Ptr;
!       Result : aliased System.Address;
! 
     begin
+       --  For the purposes of allocations logging, we treat realloc as a free
+       --  followed by malloc. This is not exactly accurate, but is a good way
+       --  to fit it into malloc/free-centered reports.
+ 
        if Size = size_t'Last then
           Raise_Exception (Storage_Error'Identity, "object too large");
        end if;
  
        Abort_Defer.all;
!       Lock_Task.all;
! 
!       if First_Call then
!          First_Call := False;
! 
!          --  We first log deallocation call
! 
!          Gmem_Initialize;
!          Call_Chain (Tracebk'Address, Max_Call_Stack, Num_Calls,
!                      Skip_Frames => 2);
!          fputc (Character'Pos ('D'), Gmemfile);
!          fwrite (Addr'Address, Address_Size, 1, Gmemfile);
!          fwrite (Num_Calls'Address, Integer'Max_Size_In_Storage_Elements, 1,
!                  Gmemfile);
! 
!          for J in Tracebk'First .. Tracebk'First + Num_Calls - 1 loop
!             declare
!                Ptr : System.Address := PC_For (Tracebk (J));
!             begin
!                fwrite (Ptr'Address, Address_Size, 1, Gmemfile);
!             end;
!          end loop;
! 
!          --  Now perform actual realloc
! 
!          Result := c_realloc (Ptr, Size);
! 
!          --   Log allocation call using the same backtrace
! 
!          fputc (Character'Pos ('A'), Gmemfile);
!          fwrite (Result'Address, Address_Size, 1, Gmemfile);
!          fwrite (Size'Address, size_t'Max_Size_In_Storage_Elements, 1,
!                  Gmemfile);
!          fwrite (Num_Calls'Address, Integer'Max_Size_In_Storage_Elements, 1,
!                  Gmemfile);
! 
!          for J in Tracebk'First .. Tracebk'First + Num_Calls - 1 loop
!             declare
!                Ptr : System.Address := PC_For (Tracebk (J));
!             begin
!                fwrite (Ptr'Address, Address_Size, 1, Gmemfile);
!             end;
!          end loop;
! 
!          First_Call := True;
!       end if;
! 
!       Unlock_Task.all;
        Abort_Undefer.all;
  
        if Result = System.Null_Address then
diff -Nrcpad gcc-3.4.3/gcc/ada/mingw32.h gcc-4.0.0/gcc/ada/mingw32.h
*** gcc-3.4.3/gcc/ada/mingw32.h	Wed Oct 22 07:59:32 2003
--- gcc-4.0.0/gcc/ada/mingw32.h	Thu Nov 25 16:14:01 2004
***************
*** 6,12 ****
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *            Copyright (C) 2002, Free Software Foundation, Inc.            *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
--- 6,12 ----
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 2002-2004, Free Software Foundation, Inc.         *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
***************
*** 49,54 ****
--- 49,56 ----
  
  #define OLD_MINGW (!(STD_MINGW))
  
+ #ifndef MAXPATHLEN
  #define MAXPATHLEN MAX_PATH
+ #endif
  
  #endif /* _MINGW32_H */
diff -Nrcpad gcc-3.4.3/gcc/ada/misc.c gcc-4.0.0/gcc/ada/misc.c
*** gcc-3.4.3/gcc/ada/misc.c	Tue Mar  9 02:59:53 2004
--- gcc-4.0.0/gcc/ada/misc.c	Thu Apr  7 06:51:30 2005
***************
*** 6,12 ****
   *                                                                          *
   *                           C Implementation File                          *
   *                                                                          *
!  *          Copyright (C) 1992-2004 Free Software Foundation, Inc.          *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
--- 6,12 ----
   *                                                                          *
   *                           C Implementation File                          *
   *                                                                          *
!  *          Copyright (C) 1992-2005, Free Software Foundation, Inc.         *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
***************
*** 48,53 ****
--- 48,55 ----
  #include "ggc.h"
  #include "flags.h"
  #include "debug.h"
+ #include "cgraph.h"
+ #include "tree-inline.h"
  #include "insn-codes.h"
  #include "insn-flags.h"
  #include "insn-config.h"
*************** extern FILE *asm_out_file;
*** 84,94 ****
     move instruction.  */
  unsigned int largest_move_alignment;
  
- static size_t gnat_tree_size		(enum tree_code);
  static bool gnat_init			(void);
  static void gnat_finish_incomplete_decl	(tree);
  static unsigned int gnat_init_options	(unsigned int, const char **);
  static int gnat_handle_option		(size_t, const char *, int);
  static HOST_WIDE_INT gnat_get_alias_set	(tree);
  static void gnat_print_decl		(FILE *, tree, int);
  static void gnat_print_type		(FILE *, tree, int);
--- 86,96 ----
     move instruction.  */
  unsigned int largest_move_alignment;
  
  static bool gnat_init			(void);
  static void gnat_finish_incomplete_decl	(tree);
  static unsigned int gnat_init_options	(unsigned int, const char **);
  static int gnat_handle_option		(size_t, const char *, int);
+ static bool gnat_post_options		(const char **);
  static HOST_WIDE_INT gnat_get_alias_set	(tree);
  static void gnat_print_decl		(FILE *, tree, int);
  static void gnat_print_type		(FILE *, tree, int);
*************** static int gnat_eh_type_covers		(tree, t
*** 98,149 ****
  static void gnat_parse_file		(int);
  static rtx gnat_expand_expr		(tree, rtx, enum machine_mode, int,
  					 rtx *);
  static void internal_error_function	(const char *, va_list *);
  static void gnat_adjust_rli		(record_layout_info);
  
! /* Structure giving our language-specific hooks.  */
  
  #undef  LANG_HOOKS_NAME
  #define LANG_HOOKS_NAME			"GNU Ada"
  #undef  LANG_HOOKS_IDENTIFIER_SIZE
  #define LANG_HOOKS_IDENTIFIER_SIZE	sizeof (struct tree_identifier)
- #undef  LANG_HOOKS_TREE_SIZE
- #define LANG_HOOKS_TREE_SIZE		gnat_tree_size
  #undef  LANG_HOOKS_INIT
  #define LANG_HOOKS_INIT			gnat_init
  #undef  LANG_HOOKS_INIT_OPTIONS
  #define LANG_HOOKS_INIT_OPTIONS		gnat_init_options
  #undef  LANG_HOOKS_HANDLE_OPTION
  #define LANG_HOOKS_HANDLE_OPTION	gnat_handle_option
! #undef LANG_HOOKS_PARSE_FILE
  #define LANG_HOOKS_PARSE_FILE		gnat_parse_file
! #undef LANG_HOOKS_HONOR_READONLY
! #define LANG_HOOKS_HONOR_READONLY	1
! #undef LANG_HOOKS_FINISH_INCOMPLETE_DECL
  #define LANG_HOOKS_FINISH_INCOMPLETE_DECL gnat_finish_incomplete_decl
! #undef LANG_HOOKS_GET_ALIAS_SET
  #define LANG_HOOKS_GET_ALIAS_SET	gnat_get_alias_set
! #undef LANG_HOOKS_EXPAND_EXPR
  #define LANG_HOOKS_EXPAND_EXPR		gnat_expand_expr
! #undef LANG_HOOKS_MARK_ADDRESSABLE
  #define LANG_HOOKS_MARK_ADDRESSABLE	gnat_mark_addressable
! #undef LANG_HOOKS_TRUTHVALUE_CONVERSION
  #define LANG_HOOKS_TRUTHVALUE_CONVERSION gnat_truthvalue_conversion
! #undef LANG_HOOKS_PRINT_DECL
  #define LANG_HOOKS_PRINT_DECL		gnat_print_decl
! #undef LANG_HOOKS_PRINT_TYPE
  #define LANG_HOOKS_PRINT_TYPE		gnat_print_type
! #undef LANG_HOOKS_DECL_PRINTABLE_NAME
  #define LANG_HOOKS_DECL_PRINTABLE_NAME	gnat_printable_name
! #undef LANG_HOOKS_TYPE_FOR_MODE
  #define LANG_HOOKS_TYPE_FOR_MODE	gnat_type_for_mode
! #undef LANG_HOOKS_TYPE_FOR_SIZE
  #define LANG_HOOKS_TYPE_FOR_SIZE	gnat_type_for_size
! #undef LANG_HOOKS_SIGNED_TYPE
  #define LANG_HOOKS_SIGNED_TYPE		gnat_signed_type
! #undef LANG_HOOKS_UNSIGNED_TYPE
  #define LANG_HOOKS_UNSIGNED_TYPE	gnat_unsigned_type
! #undef LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE
  #define LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE gnat_signed_or_unsigned_type
  
  const struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
--- 100,165 ----
  static void gnat_parse_file		(int);
  static rtx gnat_expand_expr		(tree, rtx, enum machine_mode, int,
  					 rtx *);
+ static void gnat_expand_body		(tree);
  static void internal_error_function	(const char *, va_list *);
  static void gnat_adjust_rli		(record_layout_info);
+ static tree gnat_type_max_size		(tree);
  
! /* Definitions for our language-specific hooks.  */
  
  #undef  LANG_HOOKS_NAME
  #define LANG_HOOKS_NAME			"GNU Ada"
  #undef  LANG_HOOKS_IDENTIFIER_SIZE
  #define LANG_HOOKS_IDENTIFIER_SIZE	sizeof (struct tree_identifier)
  #undef  LANG_HOOKS_INIT
  #define LANG_HOOKS_INIT			gnat_init
  #undef  LANG_HOOKS_INIT_OPTIONS
  #define LANG_HOOKS_INIT_OPTIONS		gnat_init_options
  #undef  LANG_HOOKS_HANDLE_OPTION
  #define LANG_HOOKS_HANDLE_OPTION	gnat_handle_option
! #undef  LANG_HOOKS_POST_OPTIONS
! #define LANG_HOOKS_POST_OPTIONS		gnat_post_options
! #undef  LANG_HOOKS_PARSE_FILE
  #define LANG_HOOKS_PARSE_FILE		gnat_parse_file
! #undef  LANG_HOOKS_HASH_TYPES
! #define LANG_HOOKS_HASH_TYPES		false
! #undef  LANG_HOOKS_GETDECLS
! #define LANG_HOOKS_GETDECLS		lhd_return_null_tree_v
! #undef  LANG_HOOKS_PUSHDECL
! #define LANG_HOOKS_PUSHDECL		lhd_return_tree
! #undef  LANG_HOOKS_FINISH_INCOMPLETE_DECL
  #define LANG_HOOKS_FINISH_INCOMPLETE_DECL gnat_finish_incomplete_decl
! #undef	LANG_HOOKS_REDUCE_BIT_FIELD_OPERATIONS
! #define LANG_HOOKS_REDUCE_BIT_FIELD_OPERATIONS true
! #undef  LANG_HOOKS_GET_ALIAS_SET
  #define LANG_HOOKS_GET_ALIAS_SET	gnat_get_alias_set
! #undef  LANG_HOOKS_EXPAND_EXPR
  #define LANG_HOOKS_EXPAND_EXPR		gnat_expand_expr
! #undef  LANG_HOOKS_MARK_ADDRESSABLE
  #define LANG_HOOKS_MARK_ADDRESSABLE	gnat_mark_addressable
! #undef  LANG_HOOKS_TRUTHVALUE_CONVERSION
  #define LANG_HOOKS_TRUTHVALUE_CONVERSION gnat_truthvalue_conversion
! #undef  LANG_HOOKS_PRINT_DECL
  #define LANG_HOOKS_PRINT_DECL		gnat_print_decl
! #undef  LANG_HOOKS_PRINT_TYPE
  #define LANG_HOOKS_PRINT_TYPE		gnat_print_type
! #undef  LANG_HOOKS_TYPE_MAX_SIZE
! #define LANG_HOOKS_TYPE_MAX_SIZE	gnat_type_max_size
! #undef  LANG_HOOKS_DECL_PRINTABLE_NAME
  #define LANG_HOOKS_DECL_PRINTABLE_NAME	gnat_printable_name
! #undef  LANG_HOOKS_CALLGRAPH_EXPAND_FUNCTION
! #define LANG_HOOKS_CALLGRAPH_EXPAND_FUNCTION gnat_expand_body
! #undef  LANG_HOOKS_GIMPLIFY_EXPR
! #define LANG_HOOKS_GIMPLIFY_EXPR	gnat_gimplify_expr
! #undef  LANG_HOOKS_TYPE_FOR_MODE
  #define LANG_HOOKS_TYPE_FOR_MODE	gnat_type_for_mode
! #undef  LANG_HOOKS_TYPE_FOR_SIZE
  #define LANG_HOOKS_TYPE_FOR_SIZE	gnat_type_for_size
! #undef  LANG_HOOKS_SIGNED_TYPE
  #define LANG_HOOKS_SIGNED_TYPE		gnat_signed_type
! #undef  LANG_HOOKS_UNSIGNED_TYPE
  #define LANG_HOOKS_UNSIGNED_TYPE	gnat_unsigned_type
! #undef  LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE
  #define LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE gnat_signed_or_unsigned_type
  
  const struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
*************** const struct lang_hooks lang_hooks = LAN
*** 156,164 ****
  
  #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE,
  
! const char tree_code_type[] = {
  #include "tree.def"
!   'x',
  #include "ada-tree.def"
  };
  #undef DEFTREECODE
--- 172,180 ----
  
  #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE,
  
! const enum tree_code_class tree_code_type[] = {
  #include "tree.def"
!   tcc_exceptional,
  #include "ada-tree.def"
  };
  #undef DEFTREECODE
*************** extern char **gnat_argv;
*** 201,207 ****
  
  
  /* Declare functions we use as part of startup.  */
! extern void __gnat_initialize	(void);
  extern void adainit		(void);
  extern void _ada_gnat1drv	(void);
  
--- 217,223 ----
  
  
  /* Declare functions we use as part of startup.  */
! extern void __gnat_initialize	(void *);
  extern void adainit		(void);
  extern void _ada_gnat1drv	(void);
  
*************** static void
*** 211,225 ****
  gnat_parse_file (int set_yydebug ATTRIBUTE_UNUSED)
  {
    /* call the target specific initializations */
!   __gnat_initialize();
  
    /* Call the front-end elaboration procedures */
    adainit ();
  
-   immediate_size_expand = 1;
- 
    /* Call the front end */
    _ada_gnat1drv ();
  }
  
  /* Decode all the language specific options that cannot be decoded by GCC.
--- 227,242 ----
  gnat_parse_file (int set_yydebug ATTRIBUTE_UNUSED)
  {
    /* call the target specific initializations */
!   __gnat_initialize (NULL);
  
    /* Call the front-end elaboration procedures */
    adainit ();
  
    /* Call the front end */
    _ada_gnat1drv ();
+ 
+   cgraph_finalize_compilation_unit ();
+   cgraph_optimize ();
  }
  
  /* Decode all the language specific options that cannot be decoded by GCC.
*************** gnat_handle_option (size_t scode, const 
*** 272,284 ****
        gnat_argc++;
        break;
  
!     case OPT_fRTS:
        gnat_argv[gnat_argc] = xstrdup ("-fRTS");
        gnat_argc++;
        break;
  
      case OPT_gant:
!       warning ("`-gnat' misspelled as `-gant'");
  
        /* ... fall through ... */
  
--- 289,301 ----
        gnat_argc++;
        break;
  
!     case OPT_fRTS_:
        gnat_argv[gnat_argc] = xstrdup ("-fRTS");
        gnat_argc++;
        break;
  
      case OPT_gant:
!       warning ("%<-gnat%> misspelled as %<-gant%>");
  
        /* ... fall through ... */
  
*************** gnat_handle_option (size_t scode, const 
*** 305,315 ****
--- 322,336 ----
    return 1;
  }
  
+ static bool tree_sra_requested = false;
+ 
  /* Initialize for option processing.  */
  
  static unsigned int
  gnat_init_options (unsigned int argc, const char **argv)
  {
+   int i;
+ 
    /* Initialize gnat_argv with save_argv size.  */
    gnat_argv = (char **) xmalloc ((argc + 1) * sizeof (argv[0]));
    gnat_argv[0] = xstrdup (argv[0]);     /* name of the command */
*************** gnat_init_options (unsigned int argc, co
*** 318,326 ****
--- 339,380 ----
    save_argc = argc;
    save_argv = argv;
  
+   /* Uninitialized really means uninitialized in Ada.  */
+   flag_zero_initialized_in_bss = 0;
+ 
+   /* Find last option mentioning Tree-SRA.  */
+   for (i = argc - 1; i > 0; i--)
+     if (strcmp(argv[i], "-ftree-sra") == 0)
+       {
+ 	tree_sra_requested = true;
+ 	break;
+       }
+     else if (strcmp(argv[i], "-fno-tree-sra") == 0)
+       break;
+ 
    return CL_Ada;
  }
  
+ /* Post-switch processing.  */
+ 
+ bool
+ gnat_post_options (const char **pfilename ATTRIBUTE_UNUSED)
+ {
+   flag_inline_trees = 1;
+ 
+   if (!flag_no_inline)
+     flag_no_inline = 1;
+   if (flag_inline_functions)
+     flag_inline_trees = 2;
+ 
+   /* Do not enable Tree-SRA unless specifically requested as it
+      is known to badly interact with some Ada constructs.  */
+   if (!tree_sra_requested)
+     flag_tree_sra = 0;
+ 
+   return false;
+ }
+ 
  /* Here is the function to handle the compiler error processing in GCC.  */
  
  static void
*************** internal_error_function (const char *msg
*** 334,340 ****
    vsprintf (buffer, msgid, *ap);
  
    /* Go up to the first newline.  */
!   for (p = buffer; *p != 0; p++)
      if (*p == '\n')
        {
  	*p = '\0';
--- 388,394 ----
    vsprintf (buffer, msgid, *ap);
  
    /* Go up to the first newline.  */
!   for (p = buffer; *p; p++)
      if (*p == '\n')
        {
  	*p = '\0';
*************** internal_error_function (const char *msg
*** 348,373 ****
    Compiler_Abort (fp, -1);
  }
  
- /* Langhook for tree_size: Determine size of our 'x' and 'c' nodes.  */
- 
- static size_t
- gnat_tree_size (enum tree_code code)
- {
-   switch (code)
-     {
-     case GNAT_LOOP_ID:
-       return sizeof (struct tree_loop_id);
-     default:
-       abort ();
-     }
-   /* NOTREACHED */
- }
- 
  /* Perform all the initialization steps that are language-specific.  */
  
  static bool
  gnat_init (void)
  {
    /* Performs whatever initialization steps needed by the language-dependent
       lexical analyzer.  */
    gnat_init_decl_processing ();
--- 402,415 ----
    Compiler_Abort (fp, -1);
  }
  
  /* Perform all the initialization steps that are language-specific.  */
  
  static bool
  gnat_init (void)
  {
+   /* Initialize translations and the outer statement group.  */
+   gnat_init_stmt_group ();
+ 
    /* Performs whatever initialization steps needed by the language-dependent
       lexical analyzer.  */
    gnat_init_decl_processing ();
*************** gnat_init (void)
*** 396,402 ****
  static void
  gnat_finish_incomplete_decl (tree dont_care ATTRIBUTE_UNUSED)
  {
!   gigi_abort (202);
  }
  
  /* Compute the alignment of the largest mode that can be used for copying
--- 438,444 ----
  static void
  gnat_finish_incomplete_decl (tree dont_care ATTRIBUTE_UNUSED)
  {
!   abort ();
  }
  
  /* Compute the alignment of the largest mode that can be used for copying
*************** gnat_print_type (FILE *file, tree node, 
*** 491,497 ****
        break;
  
      case ENUMERAL_TYPE:
!       print_node (file, "RM size", TYPE_RM_SIZE_ENUM (node), indent + 4);
        break;
  
      case INTEGER_TYPE:
--- 533,539 ----
        break;
  
      case ENUMERAL_TYPE:
!       print_node (file, "RM size", TYPE_RM_SIZE_NUM (node), indent + 4);
        break;
  
      case INTEGER_TYPE:
*************** gnat_print_type (FILE *file, tree node, 
*** 505,511 ****
        else
  	print_node (file, "index type", TYPE_INDEX_TYPE (node), indent + 4);
  
!       print_node (file, "RM size", TYPE_RM_SIZE_INT (node), indent + 4);
        break;
  
      case ARRAY_TYPE:
--- 547,553 ----
        else
  	print_node (file, "index type", TYPE_INDEX_TYPE (node), indent + 4);
  
!       print_node (file, "RM size", TYPE_RM_SIZE_NUM (node), indent + 4);
        break;
  
      case ARRAY_TYPE:
*************** gnat_printable_name (tree decl, int verb
*** 548,554 ****
  }
  
  /* Expands GNAT-specific GCC tree nodes.  The only ones we support
!    here are TRANSFORM_EXPR, ALLOCATE_EXPR, USE_EXPR and NULL_EXPR.  */
  
  static rtx
  gnat_expand_expr (tree exp, rtx target, enum machine_mode tmode,
--- 590,596 ----
  }
  
  /* Expands GNAT-specific GCC tree nodes.  The only ones we support
!    here are  and NULL_EXPR.  */
  
  static rtx
  gnat_expand_expr (tree exp, rtx target, enum machine_mode tmode,
*************** gnat_expand_expr (tree exp, rtx target, 
*** 556,562 ****
  {
    tree type = TREE_TYPE (exp);
    tree new;
-   rtx result;
  
    /* If this is a statement, call the expansion routine for statements.  */
    if (IS_STMT (exp))
--- 598,603 ----
*************** gnat_expand_expr (tree exp, rtx target, 
*** 568,615 ****
    /* Update EXP to be the new expression to expand.  */
    switch (TREE_CODE (exp))
      {
!     case TRANSFORM_EXPR:
!       gnat_to_code (TREE_COMPLEXITY (exp));
!       return const0_rtx;
!       break;
! 
!     case NULL_EXPR:
!       expand_expr (TREE_OPERAND (exp, 0), const0_rtx, VOIDmode, 0);
! 
!       /* We aren't going to be doing anything with this memory, but allocate
! 	 it anyway.  If it's variable size, make a bogus address.  */
!       if (! host_integerp (TYPE_SIZE_UNIT (type), 1))
! 	result = gen_rtx_MEM (BLKmode, virtual_stack_vars_rtx);
!       else
! 	result = assign_temp (type, 0, TREE_ADDRESSABLE (exp), 1);
! 
!       return result;
! 
      case ALLOCATE_EXPR:
        return
  	allocate_dynamic_stack_space
  	  (expand_expr (TREE_OPERAND (exp, 0), NULL_RTX, TYPE_MODE (sizetype),
  			EXPAND_NORMAL),
  	   NULL_RTX, tree_low_cst (TREE_OPERAND (exp, 1), 1));
! 
!     case USE_EXPR:
!       if (target != const0_rtx)
! 	gigi_abort (203);
! 
!       /* First write a volatile ASM_INPUT to prevent anything from being
! 	 moved.  */
!       result = gen_rtx_ASM_INPUT (VOIDmode, "");
!       MEM_VOLATILE_P (result) = 1;
!       emit_insn (result);
! 
!       result = expand_expr (TREE_OPERAND (exp, 0), NULL_RTX, VOIDmode,
! 			    modifier);
!       emit_insn (gen_rtx_USE (VOIDmode, result));
!       return target;
! 
!     case GNAT_NOP_EXPR:
!       return expand_expr_real (build1 (NOP_EXPR, type, TREE_OPERAND (exp, 0)),
! 			       target, tmode, modifier, alt_rtl);
  
      case UNCONSTRAINED_ARRAY_REF:
        /* If we are evaluating just for side-effects, just evaluate our
--- 609,622 ----
    /* Update EXP to be the new expression to expand.  */
    switch (TREE_CODE (exp))
      {
! #if 0
      case ALLOCATE_EXPR:
        return
  	allocate_dynamic_stack_space
  	  (expand_expr (TREE_OPERAND (exp, 0), NULL_RTX, TYPE_MODE (sizetype),
  			EXPAND_NORMAL),
  	   NULL_RTX, tree_low_cst (TREE_OPERAND (exp, 1), 1));
! #endif
  
      case UNCONSTRAINED_ARRAY_REF:
        /* If we are evaluating just for side-effects, just evaluate our
*************** gnat_expand_expr (tree exp, rtx target, 
*** 622,633 ****
        /* ... fall through ... */
  
      default:
!       gigi_abort (201);
      }
  
    return expand_expr_real (new, target, tmode, modifier, alt_rtl);
  }
  
  /* Adjusts the RLI used to layout a record after all the fields have been
     added.  We only handle the packed case and cause it to use the alignment
     that will pad the record at the end.  */
--- 629,651 ----
        /* ... fall through ... */
  
      default:
!       abort ();
      }
  
    return expand_expr_real (new, target, tmode, modifier, alt_rtl);
  }
  
+ /* Generate the RTL for the body of GNU_DECL.  */
+ 
+ static void
+ gnat_expand_body (tree gnu_decl)
+ {
+   if (!DECL_INITIAL (gnu_decl) || DECL_INITIAL (gnu_decl) == error_mark_node)
+     return;
+ 
+   tree_rest_of_compilation (gnu_decl);
+ }
+ 
  /* Adjusts the RLI used to layout a record after all the fields have been
     added.  We only handle the packed case and cause it to use the alignment
     that will pad the record at the end.  */
*************** gnat_adjust_rli (record_layout_info rli 
*** 656,707 ****
      rli->record_align = record_align;
  #endif
  }
- 
- /* Make a TRANSFORM_EXPR to later expand GNAT_NODE into code.  */
- 
- tree
- make_transform_expr (Node_Id gnat_node)
- {
-   tree gnu_result = build (TRANSFORM_EXPR, void_type_node);
- 
-   TREE_SIDE_EFFECTS (gnu_result) = 1;
-   TREE_COMPLEXITY (gnu_result) = gnat_node;
-   return gnu_result;
- }
- 
- /* Update the setjmp buffer BUF with the current stack pointer.  We assume
-    here that a __builtin_setjmp was done to BUF.  */
- 
- void
- update_setjmp_buf (tree buf)
- {
-   enum machine_mode sa_mode = Pmode;
-   rtx stack_save;
- 
- #ifdef HAVE_save_stack_nonlocal
-   if (HAVE_save_stack_nonlocal)
-     sa_mode = insn_data[(int) CODE_FOR_save_stack_nonlocal].operand[0].mode;
- #endif
- #ifdef STACK_SAVEAREA_MODE
-   sa_mode = STACK_SAVEAREA_MODE (SAVE_NONLOCAL);
- #endif
- 
-   stack_save
-     = gen_rtx_MEM (sa_mode,
- 		   memory_address
- 		   (sa_mode,
- 		    plus_constant (expand_expr
- 				   (build_unary_op (ADDR_EXPR, NULL_TREE, buf),
- 				    NULL_RTX, VOIDmode, 0),
- 				   2 * GET_MODE_SIZE (Pmode))));
- 
- #ifdef HAVE_setjmp
-   if (HAVE_setjmp)
-     emit_insn (gen_setjmp ());
- #endif
- 
-   emit_stack_save (SAVE_NONLOCAL, &stack_save, NULL_RTX);
- }
  
  /* These routines are used in conjunction with GCC exception handling.  */
  
--- 674,679 ----
*************** gnat_eh_type_covers (tree a, tree b)
*** 727,841 ****
    return (a == b || a == integer_zero_node);
  }
  
- /* See if DECL has an RTL that is indirect via a pseudo-register or a
-    memory location and replace it with an indirect reference if so.
-    This improves the debugger's ability to display the value.  */
- 
- void
- adjust_decl_rtl (tree decl)
- {
-   tree new_type;
- 
-   /* If this decl is already indirect, don't do anything.  This should
-      mean that the decl cannot be indirect, but there's no point in
-      adding an abort to check that.  */
-   if (TREE_CODE (decl) != CONST_DECL
-       && ! DECL_BY_REF_P (decl)
-       && (GET_CODE (DECL_RTL (decl)) == MEM
- 	  && (GET_CODE (XEXP (DECL_RTL (decl), 0)) == MEM
- 	      || (GET_CODE (XEXP (DECL_RTL (decl), 0)) == REG
- 		  && (REGNO (XEXP (DECL_RTL (decl), 0))
- 		      > LAST_VIRTUAL_REGISTER))))
-       /* We can't do this if the reference type's mode is not the same
- 	 as the current mode, which means this may not work on mixed 32/64
- 	 bit systems.  */
-       && (new_type = build_reference_type (TREE_TYPE (decl))) != 0
-       && TYPE_MODE (new_type) == GET_MODE (XEXP (DECL_RTL (decl), 0))
-       /* If this is a PARM_DECL, we can only do it if DECL_INCOMING_RTL
- 	 is also an indirect and of the same mode and if the object is
- 	 readonly, the latter condition because we don't want to upset the
- 	 handling of CICO_LIST.  */
-       && (TREE_CODE (decl) != PARM_DECL
- 	  || (GET_CODE (DECL_INCOMING_RTL (decl)) == MEM
- 	      && (TYPE_MODE (new_type)
- 		  == GET_MODE (XEXP (DECL_INCOMING_RTL (decl), 0)))
- 	      && TREE_READONLY (decl))))
-     {
-       new_type
- 	= build_qualified_type (new_type,
- 				(TYPE_QUALS (new_type) | TYPE_QUAL_CONST));
- 
-       DECL_POINTS_TO_READONLY_P (decl) = TREE_READONLY (decl);
-       DECL_BY_REF_P (decl) = 1;
-       SET_DECL_RTL (decl, XEXP (DECL_RTL (decl), 0));
-       TREE_TYPE (decl) = new_type;
-       DECL_MODE (decl) = TYPE_MODE (new_type);
-       DECL_ALIGN (decl) = TYPE_ALIGN (new_type);
-       DECL_SIZE (decl) = TYPE_SIZE (new_type);
- 
-       if (TREE_CODE (decl) == PARM_DECL)
- 	DECL_INCOMING_RTL (decl) = XEXP (DECL_INCOMING_RTL (decl), 0);
- 
-       /* If DECL_INITIAL was set, it should be updated to show that
- 	 the decl is initialized to the address of that thing.
- 	 Otherwise, just set it to the address of this decl.
- 	 It needs to be set so that GCC does not think the decl is
- 	 unused.  */
-       DECL_INITIAL (decl)
- 	= build1 (ADDR_EXPR, new_type,
- 		  DECL_INITIAL (decl) != 0 ? DECL_INITIAL (decl) : decl);
-     }
- }
- 
- /* Record the current code position in GNAT_NODE.  */
- 
- void
- record_code_position (Node_Id gnat_node)
- {
-   if (global_bindings_p ())
-     {
-       /* Make a dummy entry so multiple things at the same location don't
- 	 end up in the same place.  */
-       add_pending_elaborations (NULL_TREE, NULL_TREE);
-       save_gnu_tree (gnat_node, get_elaboration_location (), 1);
-     }
-   else
-     /* Always emit another insn in case marking the last insn
-        addressable needs some fixups and also for above reason.  */
-     save_gnu_tree (gnat_node,
- 		   build (RTL_EXPR, void_type_node, NULL_TREE,
- 			  (tree) emit_note (NOTE_INSN_DELETED)),
- 		   1);
- }
- 
- /* Insert the code for GNAT_NODE at the position saved for that node.  */
- 
- void
- insert_code_for (Node_Id gnat_node)
- {
-   if (global_bindings_p ())
-     {
-       push_pending_elaborations ();
-       gnat_to_code (gnat_node);
-       Check_Elaboration_Code_Allowed (gnat_node);
-       insert_elaboration_list (get_gnu_tree (gnat_node));
-       pop_pending_elaborations ();
-     }
-   else
-     {
-       rtx insns;
- 
-       do_pending_stack_adjust ();
-       start_sequence ();
-       mark_all_temps_used ();
-       gnat_to_code (gnat_node);
-       do_pending_stack_adjust ();
-       insns = get_insns ();
-       end_sequence ();
-       emit_insn_after (insns, RTL_EXPR_RTL (get_gnu_tree (gnat_node)));
-     }
- }
- 
  /* Get the alias set corresponding to a type or expression.  */
  
  static HOST_WIDE_INT
--- 699,704 ----
*************** gnat_get_alias_set (tree type)
*** 856,893 ****
    return -1;
  }
  
  /* GNU_TYPE is a type. Determine if it should be passed by reference by
     default.  */
  
! int
  default_pass_by_ref (tree gnu_type)
  {
-   CUMULATIVE_ARGS cum;
- 
-   INIT_CUMULATIVE_ARGS (cum, NULL_TREE, NULL_RTX, 0, 2);
- 
    /* We pass aggregates by reference if they are sufficiently large.  The
       choice of constant here is somewhat arbitrary.  We also pass by
       reference if the target machine would either pass or return by
       reference.  Strictly speaking, we need only check the return if this
       is an In Out parameter, but it's probably best to err on the side of
       passing more things by reference.  */
!   return (0
! #ifdef FUNCTION_ARG_PASS_BY_REFERENCE
! 	  || FUNCTION_ARG_PASS_BY_REFERENCE (cum, TYPE_MODE (gnu_type),
! 					     gnu_type, 1)
! #endif
! 	  || targetm.calls.return_in_memory (gnu_type, NULL_TREE)
! 	  || (AGGREGATE_TYPE_P (gnu_type)
! 	      && (! host_integerp (TYPE_SIZE (gnu_type), 1)
! 		  || 0 < compare_tree_int (TYPE_SIZE (gnu_type),
! 					   8 * TYPE_ALIGN (gnu_type)))));
  }
  
  /* GNU_TYPE is the type of a subprogram parameter.  Determine from the type if
     it should be passed by reference. */
  
! int
  must_pass_by_ref (tree gnu_type)
  {
    /* We pass only unconstrained objects, those required by the language
--- 719,765 ----
    return -1;
  }
  
+ /* GNU_TYPE is a type.  Return its maxium size in bytes, if known.  */
+ 
+ static tree
+ gnat_type_max_size (gnu_type)
+      tree gnu_type;
+ {
+   return max_size (TYPE_SIZE_UNIT (gnu_type), true);
+ }
+ 
  /* GNU_TYPE is a type. Determine if it should be passed by reference by
     default.  */
  
! bool
  default_pass_by_ref (tree gnu_type)
  {
    /* We pass aggregates by reference if they are sufficiently large.  The
       choice of constant here is somewhat arbitrary.  We also pass by
       reference if the target machine would either pass or return by
       reference.  Strictly speaking, we need only check the return if this
       is an In Out parameter, but it's probably best to err on the side of
       passing more things by reference.  */
! 
!   if (pass_by_reference (NULL, TYPE_MODE (gnu_type), gnu_type, 1))
!     return true;
! 
!   if (targetm.calls.return_in_memory (gnu_type, NULL_TREE))
!     return true;
! 
!   if (AGGREGATE_TYPE_P (gnu_type)
!       && (!host_integerp (TYPE_SIZE (gnu_type), 1)
! 	  || 0 < compare_tree_int (TYPE_SIZE (gnu_type),
! 				   8 * TYPE_ALIGN (gnu_type))))
!     return true;
! 
!   return false;
  }
  
  /* GNU_TYPE is the type of a subprogram parameter.  Determine from the type if
     it should be passed by reference. */
  
! bool
  must_pass_by_ref (tree gnu_type)
  {
    /* We pass only unconstrained objects, those required by the language
*************** must_pass_by_ref (tree gnu_type)
*** 897,903 ****
       not have such objects.  */
    return (TREE_CODE (gnu_type) == UNCONSTRAINED_ARRAY_TYPE
  	  || (AGGREGATE_TYPE_P (gnu_type) && TYPE_BY_REFERENCE_P (gnu_type))
! 	  || (TYPE_SIZE (gnu_type) != 0
  	      && TREE_CODE (TYPE_SIZE (gnu_type)) != INTEGER_CST));
  }
  
--- 769,775 ----
       not have such objects.  */
    return (TREE_CODE (gnu_type) == UNCONSTRAINED_ARRAY_TYPE
  	  || (AGGREGATE_TYPE_P (gnu_type) && TYPE_BY_REFERENCE_P (gnu_type))
! 	  || (TYPE_SIZE (gnu_type)
  	      && TREE_CODE (TYPE_SIZE (gnu_type)) != INTEGER_CST));
  }
  
*************** fp_size_to_prec (int size)
*** 1004,1007 ****
  
    abort ();
  }
- 
--- 876,878 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/mlib-prj.adb gcc-4.0.0/gcc/ada/mlib-prj.adb
*** gcc-3.4.3/gcc/ada/mlib-prj.adb	Mon Jan  5 15:20:45 2004
--- gcc-4.0.0/gcc/ada/mlib-prj.adb	Thu Feb 10 13:50:33 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --              Copyright (C) 2001-2003, Ada Core Technologies, Inc.        --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --              Copyright (C) 2001-2005, Ada Core Technologies, Inc.        --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Prj.Env;  use Prj.Env;
*** 39,44 ****
--- 39,45 ----
  with Prj.Util; use Prj.Util;
  with Sinput.P;
  with Snames;   use Snames;
+ with Switch;   use Switch;
  with Table;
  with Types;    use Types;
  
*************** package body MLib.Prj is
*** 70,75 ****
--- 71,79 ----
     S_Dec_Ads : Name_Id := No_Name;
     --  Name_Id for "dec.ads"
  
+    G_Trasym_Ads : Name_Id := No_Name;
+    --  Name_Id for "g-trasym.ads"
+ 
     No_Argument_List : aliased String_List := (1 .. 0 => null);
     No_Argument      : constant String_List_Access := No_Argument_List'Access;
  
*************** package body MLib.Prj is
*** 105,115 ****
        Table_Increment      => 100);
  
     package Objects_Htable is new GNAT.HTable.Simple_HTable
!      (Header_Num => Com.Header_Num,
        Element    => Boolean,
        No_Element => False,
        Key        => Name_Id,
!       Hash       => Com.Hash,
        Equal      => "=");
  
     --  List of non-Ada object files
--- 109,119 ----
        Table_Increment      => 100);
  
     package Objects_Htable is new GNAT.HTable.Simple_HTable
!      (Header_Num => Header_Num,
        Element    => Boolean,
        No_Element => False,
        Key        => Name_Id,
!       Hash       => Hash,
        Equal      => "=");
  
     --  List of non-Ada object files
*************** package body MLib.Prj is
*** 151,192 ****
     --  All the ALI file in the library
  
     package Library_ALIs is new GNAT.HTable.Simple_HTable
!      (Header_Num => Com.Header_Num,
        Element    => Boolean,
        No_Element => False,
        Key        => Name_Id,
!       Hash       => Com.Hash,
        Equal      => "=");
  
     --  The ALI files in the interface sets
  
     package Interface_ALIs is new GNAT.HTable.Simple_HTable
!      (Header_Num => Com.Header_Num,
        Element    => Boolean,
        No_Element => False,
        Key        => Name_Id,
!       Hash       => Com.Hash,
        Equal      => "=");
  
     --  The ALI files that have been processed to check if the corresponding
     --  library unit is in the interface set.
  
     package Processed_ALIs is new GNAT.HTable.Simple_HTable
!      (Header_Num => Com.Header_Num,
        Element    => Boolean,
        No_Element => False,
        Key        => Name_Id,
!       Hash       => Com.Hash,
        Equal      => "=");
  
     --  The projects imported directly or indirectly.
  
     package Processed_Projects is new GNAT.HTable.Simple_HTable
!      (Header_Num => Com.Header_Num,
        Element    => Boolean,
        No_Element => False,
        Key        => Name_Id,
!       Hash       => Com.Hash,
        Equal      => "=");
  
     --  The library projects imported directly or indirectly.
--- 155,196 ----
     --  All the ALI file in the library
  
     package Library_ALIs is new GNAT.HTable.Simple_HTable
!      (Header_Num => Header_Num,
        Element    => Boolean,
        No_Element => False,
        Key        => Name_Id,
!       Hash       => Hash,
        Equal      => "=");
  
     --  The ALI files in the interface sets
  
     package Interface_ALIs is new GNAT.HTable.Simple_HTable
!      (Header_Num => Header_Num,
        Element    => Boolean,
        No_Element => False,
        Key        => Name_Id,
!       Hash       => Hash,
        Equal      => "=");
  
     --  The ALI files that have been processed to check if the corresponding
     --  library unit is in the interface set.
  
     package Processed_ALIs is new GNAT.HTable.Simple_HTable
!      (Header_Num => Header_Num,
        Element    => Boolean,
        No_Element => False,
        Key        => Name_Id,
!       Hash       => Hash,
        Equal      => "=");
  
     --  The projects imported directly or indirectly.
  
     package Processed_Projects is new GNAT.HTable.Simple_HTable
!      (Header_Num => Header_Num,
        Element    => Boolean,
        No_Element => False,
        Key        => Name_Id,
!       Hash       => Hash,
        Equal      => "=");
  
     --  The library projects imported directly or indirectly.
*************** package body MLib.Prj is
*** 307,312 ****
--- 311,320 ----
        Libdecgnat_Needed : Boolean := False;
        --  On OpenVMS, set to True if library needs to be linked with libdecgnat
  
+       Gtrasymobj_Needed : Boolean := False;
+       --  On OpenVMS, set to True if library needs to be linked with
+       --  g-trasym.obj.
+ 
        Data : Project_Data := Projects.Table (For_Project);
  
        Object_Directory_Path : constant String :=
*************** package body MLib.Prj is
*** 316,324 ****
  
        Project_Name : constant String := Get_Name_String (Data.Name);
  
-       DLL_Address  : constant String_Access :=
-                        new String'(Default_DLL_Address);
- 
        Current_Dir  : constant String := Get_Current_Dir;
  
        Lib_Filename : String_Access;
--- 324,329 ----
*************** package body MLib.Prj is
*** 353,358 ****
--- 358,366 ----
        Copy_Dir : Name_Id;
        --  Directory where to copy ALI files and possibly interface sources
  
+       First_ALI : Name_Id := No_Name;
+       --  Store the ALI file name of a source of the library (the first found)
+ 
        procedure Add_ALI_For (Source : Name_Id);
        --  Add the name of the ALI file corresponding to Source to the
        --  Arguments.
*************** package body MLib.Prj is
*** 368,374 ****
        --  to link with -lgnarl (this is the case when there is a dependency
        --  on s-osinte.ads). On OpenVMS, set Libdecgnat_Needed if the ALI file
        --  indicates that there is a need to link with -ldecgnat (this is the
!       --  case when there is a dependency on dec.ads).
  
        procedure Process (The_ALI : File_Name_Type);
        --  Check if the closure of a library unit which is or should be in the
--- 376,383 ----
        --  to link with -lgnarl (this is the case when there is a dependency
        --  on s-osinte.ads). On OpenVMS, set Libdecgnat_Needed if the ALI file
        --  indicates that there is a need to link with -ldecgnat (this is the
!       --  case when there is a dependency on dec.ads), and set
!       --  Gtrasymobj_Needed if there is a dependency on g-trasym.ads.
  
        procedure Process (The_ALI : File_Name_Type);
        --  Check if the closure of a library unit which is or should be in the
*************** package body MLib.Prj is
*** 385,399 ****
        -----------------
  
        procedure Add_ALI_For (Source : Name_Id) is
!          ALI : constant String := ALI_File_Name (Get_Name_String (Source));
!       begin
!          Add_Argument (ALI);
  
!          --  Add the ALI file name to the library ALIs
  
           Name_Len := 0;
           Add_Str_To_Name_Buffer (S => ALI);
!          Library_ALIs.Set (Name_Find, True);
        end Add_ALI_For;
  
        ---------------
--- 394,422 ----
        -----------------
  
        procedure Add_ALI_For (Source : Name_Id) is
!          ALI    : constant String := ALI_File_Name (Get_Name_String (Source));
!          ALI_Id : Name_Id;
  
!       begin
!          if Bind then
!             Add_Argument (ALI);
!          end if;
  
           Name_Len := 0;
           Add_Str_To_Name_Buffer (S => ALI);
!          ALI_Id := Name_Find;
! 
!          --  Add the ALI file name to the library ALIs
! 
!          if Bind then
!             Library_ALIs.Set (ALI_Id, True);
!          end if;
! 
!          --  Set First_ALI, if not already done
! 
!          if First_ALI = No_Name then
!             First_ALI := ALI_Id;
!          end if;
        end Add_ALI_For;
  
        ---------------
*************** package body MLib.Prj is
*** 486,497 ****
           Text     : Text_Buffer_Ptr;
           Id       : ALI.ALI_Id;
  
-          pragma Warnings (Off, Id);
-          --  Comment needed ???
- 
        begin
           if not Libgnarl_Needed or
!            (Hostparm.OpenVMS and then (not Libdecgnat_Needed))
           then
              --  Scan the ALI file
  
--- 509,519 ----
           Text     : Text_Buffer_Ptr;
           Id       : ALI.ALI_Id;
  
        begin
           if not Libgnarl_Needed or
!            (Hostparm.OpenVMS and then
!               ((not Libdecgnat_Needed) or
!                (not Gtrasymobj_Needed)))
           then
              --  Scan the ALI file
  
*************** package body MLib.Prj is
*** 516,525 ****
                 if ALI.Sdep.Table (Index).Sfile = S_Osinte_Ads then
                    Libgnarl_Needed := True;
  
!                elsif Hostparm.OpenVMS and then
!                      ALI.Sdep.Table (Index).Sfile = S_Dec_Ads
!                then
!                   Libdecgnat_Needed := True;
                 end if;
              end loop;
           end if;
--- 538,550 ----
                 if ALI.Sdep.Table (Index).Sfile = S_Osinte_Ads then
                    Libgnarl_Needed := True;
  
!                elsif Hostparm.OpenVMS then
!                   if ALI.Sdep.Table (Index).Sfile = S_Dec_Ads then
!                      Libdecgnat_Needed := True;
! 
!                   elsif ALI.Sdep.Table (Index).Sfile = G_Trasym_Ads then
!                      Gtrasymobj_Needed := True;
!                   end if;
                 end if;
              end loop;
           end if;
*************** package body MLib.Prj is
*** 648,666 ****
              Element  : Project_Element;
  
           begin
!             --  Nothing to do if process has already been processed.
  
              if not Processed_Projects.Get (Data.Name) then
                 Processed_Projects.Set (Data.Name, True);
  
!                --  If it is a library project, add it to Library_Projs
! 
!                if Project /= For_Project and then Data.Library then
!                   Library_Projs.Increment_Last;
!                   Library_Projs.Table (Library_Projs.Last) := Project;
!                end if;
! 
!                --  Call Process_Project recursively for any imported project
  
                 while Imported /= Empty_Project_List loop
                    Element := Project_Lists.Table (Imported);
--- 673,686 ----
              Element  : Project_Element;
  
           begin
!             --  Nothing to do if process has already been processed
  
              if not Processed_Projects.Get (Data.Name) then
                 Processed_Projects.Set (Data.Name, True);
  
!                --  Call Process_Project recursively for any imported project.
!                --  We first process the imported projects to guarantee that
!                --  we have a proper reverse order for the libraries.
  
                 while Imported /= Empty_Project_List loop
                    Element := Project_Lists.Table (Imported);
*************** package body MLib.Prj is
*** 671,739 ****
  
                    Imported := Element.Next;
                 end loop;
              end if;
           end Process_Project;
  
        --  Start of processing for Process_Imported_Libraries
  
        begin
!          --  Build list of library projects imported directly or indirectly
  
           Process_Project (For_Project);
  
!          --  If there are more that one library project file, make sure
!          --  that if libA depends on libB, libB is first in order.
! 
!          if Library_Projs.Last > 1 then
!             declare
!                Index : Integer := 1;
!                Proj1 : Project_Id;
!                Proj2 : Project_Id;
!                List  : Project_List := Empty_Project_List;
! 
!             begin
!                Library_Loop : while Index < Library_Projs.Last loop
!                   Proj1 := Library_Projs.Table (Index);
!                   List  := Projects.Table (Proj1).Imported_Projects;
! 
!                   List_Loop : while List /= Empty_Project_List loop
!                      Proj2 := Project_Lists.Table (List).Project;
! 
!                      for J in Index + 1 .. Library_Projs.Last loop
!                         if Proj2 = Library_Projs.Table (J) then
!                            Library_Projs.Table (J) := Proj1;
!                            Library_Projs.Table (Index) := Proj2;
!                            exit List_Loop;
!                         end if;
!                      end loop;
! 
!                      List := Project_Lists.Table (List).Next;
!                   end loop List_Loop;
! 
!                   if List = Empty_Project_List then
!                      Index := Index + 1;
!                   end if;
!                end loop Library_Loop;
!             end;
!          end if;
! 
!          --  Now that we have a correct order, add the -L and -l switches and,
!          --  if the Rpath option is supported, add the directory to the Rpath.
  
!          for Index in 1 .. Library_Projs.Last loop
              Current := Library_Projs.Table (Index);
  
              Opts.Increment_Last;
              Opts.Table (Opts.Last) :=
!               new String'
!                 ("-L" &
!                  Get_Name_String
!                    (Projects.Table (Current).Library_Dir));
  
              if Path_Option /= null then
!                Add_Rpath
!                   (Get_Name_String
!                      (Projects.Table (Current).Library_Dir));
              end if;
  
              Opts.Increment_Last;
--- 691,730 ----
  
                    Imported := Element.Next;
                 end loop;
+ 
+                --  If it is a library project, add it to Library_Projs
+ 
+                if Project /= For_Project and then Data.Library then
+                   Library_Projs.Increment_Last;
+                   Library_Projs.Table (Library_Projs.Last) := Project;
+                end if;
+ 
              end if;
           end Process_Project;
  
        --  Start of processing for Process_Imported_Libraries
  
        begin
!          --  Build list of library projects imported directly or indirectly,
!          --  in the reverse order.
  
           Process_Project (For_Project);
  
!          --  Add the -L and -l switches and, if the Rpath option is supported,
!          --  add the directory to the Rpath.
!          --  As the library projects are in the wrong order, process from the
!          --  last to the first.
  
!          for Index in reverse 1 .. Library_Projs.Last loop
              Current := Library_Projs.Table (Index);
  
+             Get_Name_String (Projects.Table (Current).Library_Dir);
              Opts.Increment_Last;
              Opts.Table (Opts.Last) :=
!               new String'("-L" & Name_Buffer (1 .. Name_Len));
  
              if Path_Option /= null then
!                Add_Rpath (Name_Buffer (1 .. Name_Len));
              end if;
  
              Opts.Increment_Last;
*************** package body MLib.Prj is
*** 760,776 ****
        --  of "s-osinte.ads".
  
        if S_Osinte_Ads = No_Name then
!          Name_Len := 12;
!          Name_Buffer (1 .. Name_Len) := "s-osinte.ads";
           S_Osinte_Ads := Name_Find;
        end if;
  
        if S_Dec_Ads = No_Name then
!          Name_Len := 7;
!          Name_Buffer (1 .. Name_Len) := "dec.ads";
           S_Dec_Ads := Name_Find;
        end if;
  
        --  We work in the object directory
  
        Change_Dir (Object_Directory_Path);
--- 751,773 ----
        --  of "s-osinte.ads".
  
        if S_Osinte_Ads = No_Name then
!          Name_Len := 0;
!          Add_Str_To_Name_Buffer ("s-osinte.ads");
           S_Osinte_Ads := Name_Find;
        end if;
  
        if S_Dec_Ads = No_Name then
!          Name_Len := 0;
!          Add_Str_To_Name_Buffer ("dec.ads");
           S_Dec_Ads := Name_Find;
        end if;
  
+       if G_Trasym_Ads = No_Name then
+          Name_Len := 0;
+          Add_Str_To_Name_Buffer ("g-trasym.ads");
+          G_Trasym_Ads := Name_Find;
+       end if;
+ 
        --  We work in the object directory
  
        Change_Dir (Object_Directory_Path);
*************** package body MLib.Prj is
*** 834,840 ****
                       if Defaults /= No_Array_Element then
                          Switches :=
                            Value_Of
!                             (Index => Name_Ada, In_Array => Defaults);
  
                          if not Switches.Default then
                             Switch := Switches.Values;
--- 831,839 ----
                       if Defaults /= No_Array_Element then
                          Switches :=
                            Value_Of
!                             (Index     => Name_Ada,
!                              Src_Index => 0,
!                              In_Array  => Defaults);
  
                          if not Switches.Default then
                             Switch := Switches.Values;
*************** package body MLib.Prj is
*** 850,908 ****
                    end;
                 end if;
              end;
  
!             --  Get all the ALI files of the project file
  
!             declare
!                Unit : Unit_Data;
  
!             begin
!                Library_ALIs.Reset;
!                Interface_ALIs.Reset;
!                Processed_ALIs.Reset;
!                for Source in 1 .. Com.Units.Last loop
!                   Unit := Com.Units.Table (Source);
  
!                   if Unit.File_Names (Body_Part).Name /= No_Name
!                     and then Unit.File_Names (Body_Part).Path /= Slash
                    then
!                      if
!                        Check_Project (Unit.File_Names (Body_Part).Project)
!                      then
!                         if Unit.File_Names (Specification).Name = No_Name then
!                            declare
!                               Src_Ind : Source_File_Index;
  
!                            begin
!                               Src_Ind := Sinput.P.Load_Project_File
!                                 (Get_Name_String
!                                    (Unit.File_Names
!                                       (Body_Part).Path));
  
!                               --  Add the ALI file only if it is not a subunit
  
!                               if
!                               not Sinput.P.Source_File_Is_Subunit (Src_Ind)
!                               then
!                                  Add_ALI_For
!                                    (Unit.File_Names (Body_Part).Name);
!                               end if;
!                            end;
  
!                         else
!                            Add_ALI_For (Unit.File_Names (Body_Part).Name);
!                         end if;
                       end if;
  
!                   elsif Unit.File_Names (Specification).Name /= No_Name
!                     and then Unit.File_Names (Specification).Path /= Slash
!                     and then Check_Project
!                       (Unit.File_Names (Specification).Project)
!                   then
!                      Add_ALI_For (Unit.File_Names (Specification).Name);
                    end if;
!                end loop;
!             end;
  
              --  Set the paths
  
--- 849,960 ----
                    end;
                 end if;
              end;
+          end if;
  
!          --  Get all the ALI files of the project file. We do that even if
!          --  Bind is False, so that First_ALI is set.
  
!          declare
!             Unit : Unit_Data;
  
!          begin
!             Library_ALIs.Reset;
!             Interface_ALIs.Reset;
!             Processed_ALIs.Reset;
  
!             for Source in 1 .. Com.Units.Last loop
!                Unit := Com.Units.Table (Source);
! 
!                if Unit.File_Names (Body_Part).Name /= No_Name
!                  and then Unit.File_Names (Body_Part).Path /= Slash
!                then
!                   if
!                     Check_Project (Unit.File_Names (Body_Part).Project)
                    then
!                      if Unit.File_Names (Specification).Name = No_Name then
!                         declare
!                            Src_Ind : Source_File_Index;
  
!                         begin
!                            Src_Ind := Sinput.P.Load_Project_File
!                              (Get_Name_String
!                                 (Unit.File_Names
!                                    (Body_Part).Path));
  
!                            --  Add the ALI file only if it is not a subunit
  
!                            if
!                            not Sinput.P.Source_File_Is_Subunit (Src_Ind)
!                            then
!                               Add_ALI_For
!                                 (Unit.File_Names (Body_Part).Name);
!                               exit when not Bind;
!                            end if;
!                         end;
  
!                      else
!                         Add_ALI_For (Unit.File_Names (Body_Part).Name);
!                         exit when not Bind;
                       end if;
+                   end if;
  
!                elsif Unit.File_Names (Specification).Name /= No_Name
!                  and then Unit.File_Names (Specification).Path /= Slash
!                  and then Check_Project
!                    (Unit.File_Names (Specification).Project)
!                then
!                   Add_ALI_For (Unit.File_Names (Specification).Name);
!                   exit when not Bind;
!                end if;
!             end loop;
!          end;
! 
!          --  Continue setup and call gnatbind if Bind is True
! 
!          if Bind then
! 
!             --  Get an eventual --RTS from the ALI file
! 
!             if First_ALI /= No_Name then
!                declare
!                   use Types;
!                   T : Text_Buffer_Ptr;
!                   A : ALI_Id;
! 
!                begin
!                   --  Load the ALI file
! 
!                   T := Read_Library_Info (First_ALI, True);
! 
!                   --  Read it
! 
!                   A := Scan_ALI
!                          (First_ALI, T, Ignore_ED => False, Err => False);
! 
!                   if A /= No_ALI_Id then
!                      for Index in
!                        ALI.Units.Table
!                          (ALI.ALIs.Table (A).First_Unit).First_Arg ..
!                        ALI.Units.Table
!                          (ALI.ALIs.Table (A).First_Unit).Last_Arg
!                      loop
!                         --  Look for --RTS. If found, add the switch to call
!                         --  gnatbind.
! 
!                         declare
!                            Arg : String_Ptr renames Args.Table (Index);
!                         begin
!                            if
!                              Arg (Arg'First + 2 .. Arg'First + 5) = "RTS="
!                            then
!                               Add_Argument (Arg.all);
!                               exit;
!                            end if;
!                         end;
!                      end loop;
                    end if;
!                end;
!             end if;
  
              --  Set the paths
  
*************** package body MLib.Prj is
*** 922,928 ****
                 Com.Fail ("could not bind standalone library ",
                           Get_Name_String (Data.Library_Name));
              end if;
- 
           end if;
  
           --  Compile the binder generated file only if Link is true
--- 974,979 ----
*************** package body MLib.Prj is
*** 958,963 ****
--- 1009,1060 ----
                 Add_Argument (PIC_Option);
              end if;
  
+             --  Get the back-end switches and --RTS from the ALI file
+ 
+             if First_ALI /= No_Name then
+                declare
+                   use Types;
+                   T : Text_Buffer_Ptr;
+                   A : ALI_Id;
+ 
+                begin
+                   --  Load the ALI file
+ 
+                   T := Read_Library_Info (First_ALI, True);
+ 
+                   --  Read it
+ 
+                   A := Scan_ALI
+                          (First_ALI, T, Ignore_ED => False, Err => False);
+ 
+                   if A /= No_ALI_Id then
+                      for Index in
+                        ALI.Units.Table
+                          (ALI.ALIs.Table (A).First_Unit).First_Arg ..
+                        ALI.Units.Table
+                          (ALI.ALIs.Table (A).First_Unit).Last_Arg
+                      loop
+                         --  Do not compile with the front end switches except
+                         --  for --RTS.
+ 
+                         declare
+                            Arg : String_Ptr renames Args.Table (Index);
+                         begin
+                            if not Is_Front_End_Switch (Arg.all)
+                              or else
+                                Arg (Arg'First + 2 .. Arg'First + 5) = "RTS="
+                            then
+                               Add_Argument (Arg.all);
+                            end if;
+                         end;
+                      end loop;
+                   end if;
+                end;
+             end if;
+ 
+             --  Now that all the arguments are set, compile the binder
+             --  generated file.
+ 
              Display (Gcc);
              GNAT.OS_Lib.Spawn
                (Gcc_Path.all, Arguments (1 .. Argument_Number), Success);
*************** package body MLib.Prj is
*** 1081,1089 ****
                          --  If in the object directory of an extended project,
                          --  do not consider generated object files.
  
!                         if In_Main_Object_Directory or else
!                           Last < 5 or else
!                           Filename (1 .. B_Start'Length) /= B_Start
                          then
                             Name_Len := Last;
                             Name_Buffer (1 .. Name_Len) := Filename (1 .. Last);
--- 1178,1186 ----
                          --  If in the object directory of an extended project,
                          --  do not consider generated object files.
  
!                         if In_Main_Object_Directory
!                           or else Last < 5
!                           or else Filename (1 .. B_Start'Length) /= B_Start
                          then
                             Name_Len := Last;
                             Name_Buffer (1 .. Name_Len) := Filename (1 .. Last);
*************** package body MLib.Prj is
*** 1112,1125 ****
                                        new String'(ALI_File);
  
                                      --  Find out if for this ALI file,
!                                     --  libgnarl or libdecgnat (on OpenVMS)
!                                     --  is necessary.
  
                                      Check_Libs (ALI_File);
  
                                   else
!                                     --  The object file is a foreign object
!                                     --  file.
  
                                      Foreigns.Increment_Last;
                                      Foreigns.Table (Foreigns.Last) :=
--- 1209,1221 ----
                                        new String'(ALI_File);
  
                                      --  Find out if for this ALI file,
!                                     --  libgnarl or libdecgnat or g-trasym.obj
!                                     --  (on OpenVMS) is necessary.
  
                                      Check_Libs (ALI_File);
  
                                   else
!                                     --  Object file is a foreign object file
  
                                      Foreigns.Increment_Last;
                                      Foreigns.Table (Foreigns.Last) :=
*************** package body MLib.Prj is
*** 1175,1180 ****
--- 1271,1282 ----
              end if;
           end if;
  
+          if Gtrasymobj_Needed then
+             Opts.Increment_Last;
+             Opts.Table (Opts.Last) :=
+               new String'(Lib_Directory & "/g-trasym.obj");
+          end if;
+ 
           if Libdecgnat_Needed then
              Opts.Increment_Last;
              Opts.Table (Opts.Last) :=
*************** package body MLib.Prj is
*** 1223,1229 ****
           if Object_Files'Length = 0 then
              Com.Fail ("no object files for library """ &
                        Lib_Filename.all & '"');
- 
           end if;
  
           if not Opt.Quiet_Output then
--- 1325,1330 ----
*************** package body MLib.Prj is
*** 1318,1336 ****
              Data := Projects.Table (For_Project);
  
              declare
!                Interface : String_List_Id := Data.Lib_Interface_ALIs;
!                ALI       : File_Name_Type;
  
              begin
!                while Interface /= Nil_String loop
!                   ALI := String_Elements.Table (Interface).Value;
                    Interface_ALIs.Set (ALI, True);
!                   Get_Name_String (String_Elements.Table (Interface).Value);
                    Add_Argument (Name_Buffer (1 .. Name_Len));
!                   Interface := String_Elements.Table (Interface).Next;
                 end loop;
  
!                Interface := Data.Lib_Interface_ALIs;
  
                 if not Opt.Quiet_Output then
  
--- 1419,1437 ----
              Data := Projects.Table (For_Project);
  
              declare
!                Iface : String_List_Id := Data.Lib_Interface_ALIs;
!                ALI   : File_Name_Type;
  
              begin
!                while Iface /= Nil_String loop
!                   ALI := String_Elements.Table (Iface).Value;
                    Interface_ALIs.Set (ALI, True);
!                   Get_Name_String (String_Elements.Table (Iface).Value);
                    Add_Argument (Name_Buffer (1 .. Name_Len));
!                   Iface := String_Elements.Table (Iface).Next;
                 end loop;
  
!                Iface := Data.Lib_Interface_ALIs;
  
                 if not Opt.Quiet_Output then
  
*************** package body MLib.Prj is
*** 1338,1347 ****
                    --  library that is needed by an interface should also be an
                    --  interface. If it is not the case, output a warning.
  
!                   while Interface /= Nil_String loop
!                      ALI := String_Elements.Table (Interface).Value;
                       Process (ALI);
!                      Interface := String_Elements.Table (Interface).Next;
                    end loop;
                 end if;
              end;
--- 1439,1448 ----
                    --  library that is needed by an interface should also be an
                    --  interface. If it is not the case, output a warning.
  
!                   while Iface /= Nil_String loop
!                      ALI := String_Elements.Table (Iface).Value;
                       Process (ALI);
!                      Iface := String_Elements.Table (Iface).Next;
                    end loop;
                 end if;
              end;
*************** package body MLib.Prj is
*** 1355,1362 ****
           Copy_Dir := Projects.Table (For_Project).Library_Dir;
           Clean (Copy_Dir);
  
!          --  Call the procedure to build the library, depending on the build
!          --  mode.
  
           case The_Build_Mode is
              when Dynamic | Relocatable =>
--- 1456,1462 ----
           Copy_Dir := Projects.Table (For_Project).Library_Dir;
           Clean (Copy_Dir);
  
!          --  Call procedure to build the library, depending on the build mode
  
           case The_Build_Mode is
              when Dynamic | Relocatable =>
*************** package body MLib.Prj is
*** 1365,1378 ****
                    Foreign       => Foreign_Objects.all,
                    Afiles        => Ali_Files.all,
                    Options       => Options.all,
                    Interfaces    => Arguments (1 .. Argument_Number),
                    Lib_Filename  => Lib_Filename.all,
                    Lib_Dir       => Lib_Dirpath.all,
                    Symbol_Data   => Data.Symbol_Data,
                    Driver_Name   => Driver_Name,
-                   Lib_Address   => DLL_Address.all,
                    Lib_Version   => Lib_Version.all,
-                   Relocatable   => The_Build_Mode = Relocatable,
                    Auto_Init     => Data.Lib_Auto_Init);
  
              when Static =>
--- 1465,1477 ----
                    Foreign       => Foreign_Objects.all,
                    Afiles        => Ali_Files.all,
                    Options       => Options.all,
+                   Options_2     => No_Argument_List,
                    Interfaces    => Arguments (1 .. Argument_Number),
                    Lib_Filename  => Lib_Filename.all,
                    Lib_Dir       => Lib_Dirpath.all,
                    Symbol_Data   => Data.Symbol_Data,
                    Driver_Name   => Driver_Name,
                    Lib_Version   => Lib_Version.all,
                    Auto_Init     => Data.Lib_Auto_Init);
  
              when Static =>
*************** package body MLib.Prj is
*** 1386,1396 ****
                 null;
           end case;
  
!          --  We need to copy the ALI files from the object directory
!          --  to the library directory, so that the linker find them there,
!          --  and does not need to look in the object directory where it would
!          --  also find the object files; and we don't want that: we want the
!          --  linker to use the library.
  
           --  Copy the ALI files and make the copies read-only. For interfaces,
           --  mark the copies as interfaces.
--- 1485,1495 ----
                 null;
           end case;
  
!          --  We need to copy the ALI files from the object directory to
!          --  the library directory, so that the linker find them there,
!          --  and does not need to look in the object directory where it
!          --  would also find the object files; and we don't want that:
!          --  we want the linker to use the library.
  
           --  Copy the ALI files and make the copies read-only. For interfaces,
           --  mark the copies as interfaces.
*************** package body MLib.Prj is
*** 1406,1413 ****
             and then Projects.Table (For_Project).Library_Src_Dir /= No_Name
           then
              --  Clean the interface copy directory, if it is not also the
!             --  library directory. If it is also the library directory, it has
!             --  already been cleaned before the generation of the library.
  
              if Projects.Table (For_Project).Library_Src_Dir /= Copy_Dir then
                 Copy_Dir := Projects.Table (For_Project).Library_Src_Dir;
--- 1505,1512 ----
             and then Projects.Table (For_Project).Library_Src_Dir /= No_Name
           then
              --  Clean the interface copy directory, if it is not also the
!             --  library directory. If it is also the library directory, it
!             --  has already been cleaned before generation of the library.
  
              if Projects.Table (For_Project).Library_Src_Dir /= Copy_Dir then
                 Copy_Dir := Projects.Table (For_Project).Library_Src_Dir;
*************** package body MLib.Prj is
*** 1443,1449 ****
  
     procedure Check_Context is
     begin
!       --  check that each object file exists
  
        for F in Object_Files'Range loop
           Check (Object_Files (F).all);
--- 1542,1548 ----
  
     procedure Check_Context is
     begin
!       --  Check that each object file exists
  
        for F in Object_Files'Range loop
           Check (Object_Files (F).all);
*************** package body MLib.Prj is
*** 1458,1464 ****
        Data : constant Project_Data := Projects.Table (For_Project);
  
     begin
!       if Data.Library and not Data.Flag1 then
           declare
              Current  : constant Dir_Name_Str := Get_Current_Dir;
              Lib_Name : constant Name_Id := Library_File_Name_For (For_Project);
--- 1557,1569 ----
        Data : constant Project_Data := Projects.Table (For_Project);
  
     begin
!       --  No need to build the library if there is no object directory,
!       --  hence no object files to build the library.
! 
!       if Data.Library
!         and then not Data.Need_To_Build_Lib
!         and then Data.Object_Directory /= No_Name
!       then
           declare
              Current  : constant Dir_Name_Str := Get_Current_Dir;
              Lib_Name : constant Name_Id := Library_File_Name_For (For_Project);
*************** package body MLib.Prj is
*** 1494,1515 ****
                 if Is_Obj (Name_Buffer (1 .. Name_Len))
                    and then Name_Buffer (1 .. B_Start'Length) /= B_Start
                 then
- 
                    --  Get the object file time stamp
  
                    Obj_TS := File_Stamp (Name_Find);
  
!                   --  If library file time stamp is earlier, set Flag1 and
!                   --  return. String comparaison is used, otherwise time stamps
!                   --  may be too close and the comparaison would return True,
!                   --  which would trigger an unnecessary rebuild of the
!                   --  library.
  
                    if String (Lib_TS) < String (Obj_TS) then
  
                       --  Library must be rebuilt
  
!                      Projects.Table (For_Project).Flag1 := True;
                       exit;
                    end if;
                 end if;
--- 1599,1619 ----
                 if Is_Obj (Name_Buffer (1 .. Name_Len))
                    and then Name_Buffer (1 .. B_Start'Length) /= B_Start
                 then
                    --  Get the object file time stamp
  
                    Obj_TS := File_Stamp (Name_Find);
  
!                   --  If library file time stamp is earlier, set
!                   --  Need_To_Build_Lib and return. String comparaison is used,
!                   --  otherwise time stamps may be too close and the
!                   --  comparaison would return True, which would trigger
!                   --  an unnecessary rebuild of the library.
  
                    if String (Lib_TS) < String (Obj_TS) then
  
                       --  Library must be rebuilt
  
!                      Projects.Table (For_Project).Need_To_Build_Lib := True;
                       exit;
                    end if;
                 end if;
*************** package body MLib.Prj is
*** 1534,1542 ****
  
        Disregard : Boolean;
  
-       procedure Set_Writable (Name : System.Address);
-       pragma Import (C, Set_Writable, "__gnat_set_writable");
- 
     begin
        Get_Name_String (Directory);
  
--- 1638,1643 ----
*************** package body MLib.Prj is
*** 1563,1570 ****
           exit when Last = 0;
  
           if Is_Regular_File (Name (1 .. Last)) then
!             Name (Last + 1) := ASCII.NUL;
!             Set_Writable (Name (1)'Address);
              Delete_File (Name (1 .. Last), Disregard);
           end if;
        end loop;
--- 1664,1670 ----
           exit when Last = 0;
  
           if Is_Regular_File (Name (1 .. Last)) then
!             Set_Writable (Name (1 .. Last));
              Delete_File (Name (1 .. Last), Disregard);
           end if;
        end loop;
diff -Nrcpad gcc-3.4.3/gcc/ada/mlib-tgt-aix.adb gcc-4.0.0/gcc/ada/mlib-tgt-aix.adb
*** gcc-3.4.3/gcc/ada/mlib-tgt-aix.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/mlib-tgt-aix.adb	Wed Oct 27 12:27:51 2004
***************
*** 0 ****
--- 1,388 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                             M L I B . T G T                              --
+ --                              (AIX Version)                               --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --           Copyright (C) 2003-2004, Ada Core Technologies, Inc.           --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package provides a set of target dependent routines to build
+ --  static, dynamic or relocatable libraries.
+ 
+ --  This is the AIX version of the body.
+ 
+ with Ada.Strings.Fixed; use Ada.Strings.Fixed;
+ with GNAT.OS_Lib;       use GNAT.OS_Lib;
+ 
+ with MLib.Fil;
+ with MLib.Utl;
+ with Namet;    use Namet;
+ with Osint;    use Osint;
+ with Opt;
+ with Output;   use Output;
+ with Prj.Com;
+ with Prj.Util; use Prj.Util;
+ 
+ package body MLib.Tgt is
+ 
+    No_Arguments        : aliased Argument_List         := (1 .. 0 => null);
+    Empty_Argument_List : constant Argument_List_Access := No_Arguments'Access;
+ 
+    Wl_Initfini_String  : constant String := "-Wl,-binitfini:";
+ 
+    Init_Fini_List      :  constant Argument_List_Access :=
+                             new Argument_List'(1 => null);
+    --  Used to put switch for automatic elaboration/finalization
+ 
+    Bexpall : aliased String := "-Wl,-bexpall";
+    Bexpall_Option : constant String_Access := Bexpall'Access;
+    --  The switch to export all symbols
+ 
+    Lpthreads : aliased String := "-lpthreads";
+    Native_Thread_Options : aliased Argument_List := (1 => Lpthreads'Access);
+    --  The switch to use when linking a library against libgnarl when using
+    --  Native threads.
+ 
+    Lgthreads : aliased String := "-lgthreads";
+    Lmalloc   : aliased String := "-lmalloc";
+    FSU_Thread_Options : aliased Argument_List :=
+                           (1 => Lgthreads'Access, 2 => Lmalloc'Access);
+    --  The switches to use when linking a library against libgnarl when using
+    --  FSU threads.
+ 
+    Thread_Options : Argument_List_Access := Empty_Argument_List;
+    --  Designate the thread switches to used when linking a library against
+    --  libgnarl. Depends on the thread library (Native or FSU). Resolved for
+    --  the first library linked against libgnarl.
+ 
+    ---------------------
+    -- Archive_Builder --
+    ---------------------
+ 
+    function Archive_Builder return String is
+    begin
+       return "ar";
+    end Archive_Builder;
+ 
+    -----------------------------
+    -- Archive_Builder_Options --
+    -----------------------------
+ 
+    function Archive_Builder_Options return String_List_Access is
+    begin
+       return new String_List'(1 => new String'("cr"));
+    end Archive_Builder_Options;
+ 
+    -----------------
+    -- Archive_Ext --
+    -----------------
+ 
+    function Archive_Ext return String is
+    begin
+       return "a";
+    end Archive_Ext;
+ 
+    ---------------------
+    -- Archive_Indexer --
+    ---------------------
+ 
+    function Archive_Indexer return String is
+    begin
+       return "ranlib";
+    end Archive_Indexer;
+ 
+    -----------------------------
+    -- Archive_Indexer_Options --
+    -----------------------------
+ 
+    function Archive_Indexer_Options return String_List_Access is
+    begin
+       return new String_List (1 .. 0);
+    end Archive_Indexer_Options;
+ 
+    ---------------------------
+    -- Build_Dynamic_Library --
+    ---------------------------
+ 
+    procedure Build_Dynamic_Library
+      (Ofiles       : Argument_List;
+       Foreign      : Argument_List;
+       Afiles       : Argument_List;
+       Options      : Argument_List;
+       Options_2    : Argument_List;
+       Interfaces   : Argument_List;
+       Lib_Filename : String;
+       Lib_Dir      : String;
+       Symbol_Data  : Symbol_Record;
+       Driver_Name  : Name_Id := No_Name;
+       Lib_Version  : String  := "";
+       Auto_Init    : Boolean := False)
+    is
+       pragma Unreferenced (Foreign);
+       pragma Unreferenced (Afiles);
+       pragma Unreferenced (Interfaces);
+       pragma Unreferenced (Symbol_Data);
+       pragma Unreferenced (Lib_Version);
+ 
+       Lib_File : constant String :=
+                    Lib_Dir & Directory_Separator & "lib" &
+                    MLib.Fil.Ext_To (Lib_Filename, DLL_Ext);
+       --  The file name of the library
+ 
+       Init_Fini : Argument_List_Access := Empty_Argument_List;
+       --  The switch for automatic initialization of Stand-Alone Libraries.
+       --  Changed to a real switch when Auto_Init is True.
+ 
+       Thread_Opts : Argument_List_Access := Empty_Argument_List;
+       --  Set to Thread_Options if -lgnarl is found in the Options
+ 
+    begin
+       if Opt.Verbose_Mode then
+          Write_Str ("building relocatable shared library ");
+          Write_Line (Lib_File);
+       end if;
+ 
+       --  If specified, add automatic elaboration/finalization
+ 
+       if Auto_Init then
+          Init_Fini := Init_Fini_List;
+          Init_Fini (1) :=
+            new String'(Wl_Initfini_String & Lib_Filename & "init:" &
+                        Lib_Filename & "final");
+       end if;
+ 
+       --  Look for -lgnarl in Options. If found, set the thread options.
+ 
+       for J in Options'Range loop
+          if Options (J).all = "-lgnarl" then
+ 
+             --  If Thread_Options is null, read s-osinte.ads to discover the
+             --  thread library and set Thread_Options accordingly.
+ 
+             if Thread_Options = null then
+                declare
+                   File : Text_File;
+                   Line : String (1 .. 100);
+                   Last : Natural;
+ 
+                begin
+                   Open
+                     (File, Include_Dir_Default_Prefix & "/s-osinte.ads");
+ 
+                   while not End_Of_File (File) loop
+                      Get_Line (File, Line, Last);
+ 
+                      if Index (Line (1 .. Last), "-lpthreads") /= 0 then
+                         Thread_Options := Native_Thread_Options'Access;
+                         exit;
+ 
+                      elsif Index (Line (1 .. Last), "-lgthreads") /= 0 then
+                         Thread_Options := FSU_Thread_Options'Access;
+                         exit;
+                      end if;
+                   end loop;
+ 
+                   Close (File);
+ 
+                   if Thread_Options = null then
+                      Prj.Com.Fail ("cannot find the thread library in use");
+                   end if;
+ 
+                exception
+                   when others =>
+                      Prj.Com.Fail ("cannot open s-osinte.ads");
+                end;
+             end if;
+ 
+             Thread_Opts := Thread_Options;
+             exit;
+          end if;
+       end loop;
+ 
+       --  Finally, call GCC (or the driver specified) to build the library
+ 
+       MLib.Utl.Gcc
+         (Output_File => Lib_File,
+          Objects     => Ofiles,
+          Options     => Options & Bexpall_Option & Init_Fini.all,
+          Driver_Name => Driver_Name,
+          Options_2   => Options_2 & Thread_Opts.all);
+    end Build_Dynamic_Library;
+ 
+    -------------
+    -- DLL_Ext --
+    -------------
+ 
+    function DLL_Ext return String is
+    begin
+       return "a";
+    end DLL_Ext;
+ 
+    --------------------
+    -- Dynamic_Option --
+    --------------------
+ 
+    function Dynamic_Option return String is
+    begin
+       return "-shared";
+    end Dynamic_Option;
+ 
+    -------------------
+    -- Is_Object_Ext --
+    -------------------
+ 
+    function Is_Object_Ext (Ext : String) return Boolean is
+    begin
+       return Ext = ".o";
+    end Is_Object_Ext;
+ 
+    --------------
+    -- Is_C_Ext --
+    --------------
+ 
+    function Is_C_Ext (Ext : String) return Boolean is
+    begin
+       return Ext = ".c";
+    end Is_C_Ext;
+ 
+    --------------------
+    -- Is_Archive_Ext --
+    --------------------
+ 
+    function Is_Archive_Ext (Ext : String) return Boolean is
+    begin
+       return Ext = ".a";
+    end Is_Archive_Ext;
+ 
+    -------------
+    -- Libgnat --
+    -------------
+ 
+    function Libgnat return String is
+    begin
+       return "libgnat.a";
+    end Libgnat;
+ 
+    ------------------------
+    -- Library_Exists_For --
+    ------------------------
+ 
+    function Library_Exists_For (Project : Project_Id) return Boolean is
+    begin
+       if not Projects.Table (Project).Library then
+          Prj.Com.Fail ("INTERNAL ERROR: Library_Exists_For called " &
+                        "for non library project");
+          return False;
+ 
+       else
+          declare
+             Lib_Dir  : constant String :=
+                          Get_Name_String
+                            (Projects.Table (Project).Library_Dir);
+             Lib_Name : constant String :=
+                          Get_Name_String
+                            (Projects.Table (Project).Library_Name);
+ 
+          begin
+             if Projects.Table (Project).Library_Kind = Static then
+                return Is_Regular_File
+                  (Lib_Dir & Directory_Separator & "lib" &
+                   Fil.Ext_To (Lib_Name, Archive_Ext));
+ 
+             else
+                return Is_Regular_File
+                  (Lib_Dir & Directory_Separator & "lib" &
+                   Fil.Ext_To (Lib_Name, DLL_Ext));
+             end if;
+          end;
+       end if;
+    end Library_Exists_For;
+ 
+    ---------------------------
+    -- Library_File_Name_For --
+    ---------------------------
+ 
+    function Library_File_Name_For (Project : Project_Id) return Name_Id is
+    begin
+       if not Projects.Table (Project).Library then
+          Prj.Com.Fail ("INTERNAL ERROR: Library_File_Name_For called " &
+                        "for non library project");
+          return No_Name;
+ 
+       else
+          declare
+             Lib_Name : constant String :=
+               Get_Name_String (Projects.Table (Project).Library_Name);
+ 
+          begin
+             Name_Len := 3;
+             Name_Buffer (1 .. Name_Len) := "lib";
+ 
+             if Projects.Table (Project).Library_Kind = Static then
+                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, Archive_Ext));
+ 
+             else
+                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, DLL_Ext));
+             end if;
+ 
+             return Name_Find;
+          end;
+       end if;
+    end Library_File_Name_For;
+ 
+    ----------------
+    -- Object_Ext --
+    ----------------
+ 
+    function Object_Ext return String is
+    begin
+       return "o";
+    end Object_Ext;
+ 
+    ----------------
+    -- PIC_Option --
+    ----------------
+ 
+    function PIC_Option return String is
+    begin
+       return "-fPIC";
+    end PIC_Option;
+ 
+    -----------------------------------------------
+    -- Standalone_Library_Auto_Init_Is_Supported --
+    -----------------------------------------------
+ 
+    function Standalone_Library_Auto_Init_Is_Supported return Boolean is
+    begin
+       return True;
+    end Standalone_Library_Auto_Init_Is_Supported;
+ 
+    ---------------------------
+    -- Support_For_Libraries --
+    ---------------------------
+ 
+    function Support_For_Libraries return Library_Support is
+    begin
+       return Full;
+    end Support_For_Libraries;
+ 
+ end MLib.Tgt;
diff -Nrcpad gcc-3.4.3/gcc/ada/mlib-tgt-darwin.adb gcc-4.0.0/gcc/ada/mlib-tgt-darwin.adb
*** gcc-3.4.3/gcc/ada/mlib-tgt-darwin.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/mlib-tgt-darwin.adb	Wed Oct 27 12:27:51 2004
***************
*** 0 ****
--- 1,366 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                             M L I B . T G T                              --
+ --                             (Darwin Version)                             --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --              Copyright (C) 2001-2004, Free Software Foundation, Inc.     --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package provides a set of target dependent routines to build
+ --  static, dynamic and shared libraries.
+ 
+ --  This is the Darwin version of the body.
+ 
+ with MLib.Fil;
+ with MLib.Utl;
+ with Namet;  use Namet;
+ with Opt;
+ with Output; use Output;
+ with Prj.Com;
+ with System;
+ 
+ package body MLib.Tgt is
+ 
+    use GNAT;
+    use MLib;
+ 
+    No_Arguments        : aliased Argument_List         := (1 .. 0 => null);
+    Empty_Argument_List : constant Argument_List_Access := No_Arguments'Access;
+ 
+    Wl_Init_String : aliased String         := "-Wl,-init";
+    Wl_Init        : constant String_Access := Wl_Init_String'Access;
+    Wl_Fini_String : aliased String         := "-Wl,-fini";
+    Wl_Fini        : constant String_Access := Wl_Fini_String'Access;
+ 
+    Init_Fini_List :  constant Argument_List_Access :=
+                        new Argument_List'(1 => Wl_Init,
+                                           2 => null,
+                                           3 => Wl_Fini,
+                                           4 => null);
+    --  Used to put switches for automatic elaboration/finalization
+ 
+    ---------------------
+    -- Archive_Builder --
+    ---------------------
+ 
+    function Archive_Builder return String is
+    begin
+       return "ar";
+    end Archive_Builder;
+ 
+    -----------------------------
+    -- Archive_Builder_Options --
+    -----------------------------
+ 
+    function Archive_Builder_Options return String_List_Access is
+    begin
+       return new String_List'(1 => new String'("cr"));
+    end Archive_Builder_Options;
+ 
+    -----------------
+    -- Archive_Ext --
+    -----------------
+ 
+    function Archive_Ext return  String is
+    begin
+       return "a";
+    end Archive_Ext;
+ 
+    ---------------------
+    -- Archive_Indexer --
+    ---------------------
+ 
+    function Archive_Indexer return String is
+    begin
+       return "ranlib";
+    end Archive_Indexer;
+ 
+    -----------------------------
+    -- Archive_Indexer_Options --
+    -----------------------------
+ 
+    function Archive_Indexer_Options return String_List_Access is
+    begin
+       return new String_List'(1 => new String'("-c"));
+    end Archive_Indexer_Options;
+ 
+    ---------------------------
+    -- Build_Dynamic_Library --
+    ---------------------------
+ 
+    procedure Build_Dynamic_Library
+      (Ofiles       : Argument_List;
+       Foreign      : Argument_List;
+       Afiles       : Argument_List;
+       Options      : Argument_List;
+       Options_2    : Argument_List;
+       Interfaces   : Argument_List;
+       Lib_Filename : String;
+       Lib_Dir      : String;
+       Symbol_Data  : Symbol_Record;
+       Driver_Name  : Name_Id := No_Name;
+       Lib_Version  : String  := "";
+       Auto_Init    : Boolean := False)
+    is
+       pragma Unreferenced (Foreign);
+       pragma Unreferenced (Afiles);
+       pragma Unreferenced (Interfaces);
+       pragma Unreferenced (Symbol_Data);
+ 
+       Lib_File : constant String :=
+                    Lib_Dir & Directory_Separator & "lib" &
+                    Fil.Ext_To (Lib_Filename, DLL_Ext);
+ 
+       Version_Arg          : String_Access;
+       Symbolic_Link_Needed : Boolean := False;
+ 
+       Init_Fini : Argument_List_Access := Empty_Argument_List;
+ 
+    begin
+       if Opt.Verbose_Mode then
+          Write_Str ("building relocatable shared library ");
+          Write_Line (Lib_File);
+       end if;
+ 
+       --  If specified, add automatic elaboration/finalization
+ 
+       if Auto_Init then
+          Init_Fini := Init_Fini_List;
+          Init_Fini (2) := new String'("-Wl," & Lib_Filename & "init");
+          Init_Fini (4) := new String'("-Wl," & Lib_Filename & "final");
+       end if;
+ 
+       if Lib_Version = "" then
+          Utl.Gcc
+            (Output_File => Lib_File,
+             Objects     => Ofiles,
+             Options     => Options & Init_Fini.all,
+             Driver_Name => Driver_Name,
+             Options_2   => Options_2);
+ 
+       else
+          Version_Arg := new String'("-Wl,-flat_namespace"); -- ???
+ 
+          if Is_Absolute_Path (Lib_Version) then
+             Utl.Gcc
+               (Output_File => Lib_Version,
+                Objects     => Ofiles,
+                Options     => Options & Version_Arg & Init_Fini.all,
+                Driver_Name => Driver_Name,
+                Options_2   => Options_2);
+             Symbolic_Link_Needed := Lib_Version /= Lib_File;
+ 
+          else
+             Utl.Gcc
+               (Output_File => Lib_Dir & Directory_Separator & Lib_Version,
+                Objects     => Ofiles,
+                Options     => Options & Version_Arg & Init_Fini.all,
+                Driver_Name => Driver_Name,
+                Options_2   => Options_2);
+             Symbolic_Link_Needed :=
+               Lib_Dir & Directory_Separator & Lib_Version /= Lib_File;
+          end if;
+ 
+          if Symbolic_Link_Needed then
+             declare
+                Success : Boolean;
+                Oldpath : String (1 .. Lib_Version'Length + 1);
+                Newpath : String (1 .. Lib_File'Length + 1);
+ 
+                Result : Integer;
+                pragma Unreferenced (Result);
+ 
+                function Symlink
+                  (Oldpath : System.Address;
+                   Newpath : System.Address) return Integer;
+                pragma Import (C, Symlink, "__gnat_symlink");
+ 
+             begin
+                Oldpath (1 .. Lib_Version'Length) := Lib_Version;
+                Oldpath (Oldpath'Last)            := ASCII.NUL;
+                Newpath (1 .. Lib_File'Length)    := Lib_File;
+                Newpath (Newpath'Last)            := ASCII.NUL;
+ 
+                Delete_File (Lib_File, Success);
+ 
+                Result := Symlink (Oldpath'Address, Newpath'Address);
+             end;
+          end if;
+       end if;
+    end Build_Dynamic_Library;
+ 
+    -------------
+    -- DLL_Ext --
+    -------------
+ 
+    function DLL_Ext return String is
+    begin
+       return "dylib";
+    end DLL_Ext;
+ 
+    --------------------
+    -- Dynamic_Option --
+    --------------------
+ 
+    function Dynamic_Option return String is
+    begin
+       return "-dynamiclib";
+    end Dynamic_Option;
+ 
+    -------------------
+    -- Is_Object_Ext --
+    -------------------
+ 
+    function Is_Object_Ext (Ext : String) return Boolean is
+    begin
+       return Ext = ".o";
+    end Is_Object_Ext;
+ 
+    --------------
+    -- Is_C_Ext --
+    --------------
+ 
+    function Is_C_Ext (Ext : String) return Boolean is
+    begin
+       return Ext = ".c";
+    end Is_C_Ext;
+ 
+    --------------------
+    -- Is_Archive_Ext --
+    --------------------
+ 
+    function Is_Archive_Ext (Ext : String) return Boolean is
+    begin
+       return Ext = ".a" or else Ext = ".dyld";
+    end Is_Archive_Ext;
+ 
+    -------------
+    -- Libgnat --
+    -------------
+ 
+    function Libgnat return String is
+    begin
+       return "libgnat.a";
+    end Libgnat;
+ 
+    ------------------------
+    -- Library_Exists_For --
+    ------------------------
+ 
+    function Library_Exists_For (Project : Project_Id) return Boolean is
+    begin
+       if not Projects.Table (Project).Library then
+          Prj.Com.Fail ("INTERNAL ERROR: Library_Exists_For called " &
+                        "for non library project");
+          return False;
+ 
+       else
+          declare
+             Lib_Dir : constant String :=
+               Get_Name_String (Projects.Table (Project).Library_Dir);
+             Lib_Name : constant String :=
+               Get_Name_String (Projects.Table (Project).Library_Name);
+ 
+          begin
+             if Projects.Table (Project).Library_Kind = Static then
+                return Is_Regular_File
+                  (Lib_Dir & Directory_Separator & "lib" &
+                   Fil.Ext_To (Lib_Name, Archive_Ext));
+ 
+             else
+                return Is_Regular_File
+                  (Lib_Dir & Directory_Separator & "lib" &
+                   Fil.Ext_To (Lib_Name, DLL_Ext));
+             end if;
+          end;
+       end if;
+    end Library_Exists_For;
+ 
+    ---------------------------
+    -- Library_File_Name_For --
+    ---------------------------
+ 
+    function Library_File_Name_For (Project : Project_Id) return Name_Id is
+    begin
+       if not Projects.Table (Project).Library then
+          Prj.Com.Fail ("INTERNAL ERROR: Library_File_Name_For called " &
+                        "for non library project");
+          return No_Name;
+ 
+       else
+          declare
+             Lib_Name : constant String :=
+               Get_Name_String (Projects.Table (Project).Library_Name);
+ 
+          begin
+             Name_Len := 3;
+             Name_Buffer (1 .. Name_Len) := "lib";
+ 
+             if Projects.Table (Project).Library_Kind = Static then
+                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, Archive_Ext));
+ 
+             else
+                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, DLL_Ext));
+             end if;
+ 
+             return Name_Find;
+          end;
+       end if;
+    end Library_File_Name_For;
+ 
+    ----------------
+    -- Object_Ext --
+    ----------------
+ 
+    function Object_Ext return String is
+    begin
+       return "o";
+    end Object_Ext;
+ 
+    ----------------
+    -- PIC_Option --
+    ----------------
+ 
+    function PIC_Option return String is
+    begin
+       return "-fPIC";
+    end PIC_Option;
+ 
+    -----------------------------------------------
+    -- Standalone_Library_Auto_Init_Is_Supported --
+    -----------------------------------------------
+ 
+    function Standalone_Library_Auto_Init_Is_Supported return Boolean is
+    begin
+       return True;
+    end Standalone_Library_Auto_Init_Is_Supported;
+ 
+    ---------------------------
+    -- Support_For_Libraries --
+    ---------------------------
+ 
+    function Support_For_Libraries return Library_Support is
+    begin
+       return Full;
+    end Support_For_Libraries;
+ 
+ end MLib.Tgt;
diff -Nrcpad gcc-3.4.3/gcc/ada/mlib-tgt-hpux.adb gcc-4.0.0/gcc/ada/mlib-tgt-hpux.adb
*** gcc-3.4.3/gcc/ada/mlib-tgt-hpux.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/mlib-tgt-hpux.adb	Wed Oct 27 12:27:52 2004
***************
*** 0 ****
--- 1,369 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                             M L I B . T G T                              --
+ --                             (HP-UX Version)                              --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --           Copyright (C) 2003-2004, Ada Core Technologies, Inc.           --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package provides a set of target dependent routines to build
+ --  libraries (static only on HP-UX).
+ 
+ --  This is the HP-UX version of the body.
+ 
+ with MLib.Fil;
+ with MLib.Utl;
+ with Namet;  use Namet;
+ with Opt;
+ with Output; use Output;
+ with Prj.Com;
+ with System;
+ 
+ package body MLib.Tgt is
+ 
+    No_Arguments        : aliased Argument_List         := (1 .. 0 => null);
+    Empty_Argument_List : constant Argument_List_Access := No_Arguments'Access;
+ 
+    Wl_Init_String : aliased String         := "-Wl,+init";
+    Wl_Init        : constant String_Access := Wl_Init_String'Access;
+    Wl_Fini_String : aliased String         := "-Wl,+fini";
+    Wl_Fini        : constant String_Access := Wl_Fini_String'Access;
+ 
+    Init_Fini_List :  constant Argument_List_Access :=
+                        new Argument_List'(1 => Wl_Init,
+                                           2 => null,
+                                           3 => Wl_Fini,
+                                           4 => null);
+    --  Used to put switches for automatic elaboration/finalization
+    ---------------------
+    -- Archive_Builder --
+    ---------------------
+ 
+    function Archive_Builder return String is
+    begin
+       return "ar";
+    end Archive_Builder;
+ 
+    -----------------------------
+    -- Archive_Builder_Options --
+    -----------------------------
+ 
+    function Archive_Builder_Options return String_List_Access is
+    begin
+       return new String_List'(1 => new String'("cr"));
+    end Archive_Builder_Options;
+ 
+    -----------------
+    -- Archive_Ext --
+    -----------------
+ 
+    function Archive_Ext return String is
+    begin
+       return "a";
+    end Archive_Ext;
+ 
+    ---------------------
+    -- Archive_Indexer --
+    ---------------------
+ 
+    function Archive_Indexer return String is
+    begin
+       return "ranlib";
+    end Archive_Indexer;
+ 
+    -----------------------------
+    -- Archive_Indexer_Options --
+    -----------------------------
+ 
+    function Archive_Indexer_Options return String_List_Access is
+    begin
+       return new String_List (1 .. 0);
+    end Archive_Indexer_Options;
+ 
+    ---------------------------
+    -- Build_Dynamic_Library --
+    ---------------------------
+ 
+    procedure Build_Dynamic_Library
+      (Ofiles       : Argument_List;
+       Foreign      : Argument_List;
+       Afiles       : Argument_List;
+       Options      : Argument_List;
+       Options_2    : Argument_List;
+       Interfaces   : Argument_List;
+       Lib_Filename : String;
+       Lib_Dir      : String;
+       Symbol_Data  : Symbol_Record;
+       Driver_Name  : Name_Id := No_Name;
+       Lib_Version  : String  := "";
+       Auto_Init    : Boolean := False)
+    is
+       pragma Unreferenced (Foreign);
+       pragma Unreferenced (Afiles);
+       pragma Unreferenced (Interfaces);
+       pragma Unreferenced (Symbol_Data);
+ 
+       Lib_File : constant String :=
+                    Lib_Dir & Directory_Separator & "lib" &
+                    MLib.Fil.Ext_To (Lib_Filename, DLL_Ext);
+ 
+       Version_Arg          : String_Access;
+       Symbolic_Link_Needed : Boolean := False;
+ 
+       Init_Fini : Argument_List_Access := Empty_Argument_List;
+ 
+       Common_Options : constant Argument_List :=
+                          Options & new String'(PIC_Option);
+       --  Common set of options to the gcc command performing the link.
+       --  On HPUX, this command eventually resorts to collect2, which may
+       --  generate a C file and compile it on the fly. This compilation shall
+       --  also generate position independant code for the final link to
+       --  succeed.
+    begin
+       if Opt.Verbose_Mode then
+          Write_Str ("building relocatable shared library ");
+          Write_Line (Lib_File);
+       end if;
+ 
+       --  If specified, add automatic elaboration/finalization
+ 
+       if Auto_Init then
+          Init_Fini := Init_Fini_List;
+          Init_Fini (2) := new String'("-Wl," & Lib_Filename & "init");
+          Init_Fini (4) := new String'("-Wl," & Lib_Filename & "final");
+       end if;
+ 
+       if Lib_Version = "" then
+          MLib.Utl.Gcc
+            (Output_File => Lib_File,
+             Objects     => Ofiles,
+             Options     => Common_Options & Init_Fini.all,
+             Options_2   => Options_2,
+             Driver_Name => Driver_Name);
+ 
+       else
+          Version_Arg := new String'("-Wl,+h," & Lib_Version);
+ 
+          if Is_Absolute_Path (Lib_Version) then
+             MLib.Utl.Gcc
+               (Output_File => Lib_Version,
+                Objects     => Ofiles,
+                Options     => Common_Options & Version_Arg & Init_Fini.all,
+                Options_2   => Options_2,
+                Driver_Name => Driver_Name);
+             Symbolic_Link_Needed := Lib_Version /= Lib_File;
+ 
+          else
+             MLib.Utl.Gcc
+               (Output_File => Lib_Dir & Directory_Separator & Lib_Version,
+                Objects     => Ofiles,
+                Options     => Common_Options & Version_Arg & Init_Fini.all,
+                Options_2   => Options_2,
+                Driver_Name => Driver_Name);
+             Symbolic_Link_Needed :=
+               Lib_Dir & Directory_Separator & Lib_Version /= Lib_File;
+          end if;
+ 
+          if Symbolic_Link_Needed then
+             declare
+                Success : Boolean;
+                Oldpath : String (1 .. Lib_Version'Length + 1);
+                Newpath : String (1 .. Lib_File'Length + 1);
+ 
+                Result : Integer;
+                pragma Unreferenced (Result);
+ 
+                function Symlink
+                  (Oldpath : System.Address;
+                   Newpath : System.Address) return Integer;
+                pragma Import (C, Symlink, "__gnat_symlink");
+ 
+             begin
+                Oldpath (1 .. Lib_Version'Length) := Lib_Version;
+                Oldpath (Oldpath'Last)            := ASCII.NUL;
+                Newpath (1 .. Lib_File'Length)    := Lib_File;
+                Newpath (Newpath'Last)            := ASCII.NUL;
+ 
+                Delete_File (Lib_File, Success);
+ 
+                Result := Symlink (Oldpath'Address, Newpath'Address);
+             end;
+          end if;
+       end if;
+    end Build_Dynamic_Library;
+ 
+    -------------
+    -- DLL_Ext --
+    -------------
+ 
+    function DLL_Ext return String is
+    begin
+       return "sl";
+    end DLL_Ext;
+ 
+    --------------------
+    -- Dynamic_Option --
+    --------------------
+ 
+    function Dynamic_Option return String is
+    begin
+       return "-shared";
+    end Dynamic_Option;
+ 
+    -------------------
+    -- Is_Object_Ext --
+    -------------------
+ 
+    function Is_Object_Ext (Ext : String) return Boolean is
+    begin
+       return Ext = ".o";
+    end Is_Object_Ext;
+ 
+    --------------
+    -- Is_C_Ext --
+    --------------
+ 
+    function Is_C_Ext (Ext : String) return Boolean is
+    begin
+       return Ext = ".c";
+    end Is_C_Ext;
+ 
+    --------------------
+    -- Is_Archive_Ext --
+    --------------------
+ 
+    function Is_Archive_Ext (Ext : String) return Boolean is
+    begin
+       return Ext = ".a" or else Ext = ".so";
+    end Is_Archive_Ext;
+ 
+    -------------
+    -- Libgnat --
+    -------------
+ 
+    function Libgnat return String is
+    begin
+       return "libgnat.a";
+    end Libgnat;
+ 
+    ------------------------
+    -- Library_Exists_For --
+    ------------------------
+ 
+    function Library_Exists_For (Project : Project_Id) return Boolean is
+    begin
+       if not Projects.Table (Project).Library then
+          Prj.Com.Fail ("INTERNAL ERROR: Library_Exists_For called " &
+                        "for non library project");
+          return False;
+ 
+       else
+          declare
+             Lib_Dir : constant String :=
+               Get_Name_String (Projects.Table (Project).Library_Dir);
+             Lib_Name : constant String :=
+               Get_Name_String (Projects.Table (Project).Library_Name);
+ 
+          begin
+             if Projects.Table (Project).Library_Kind = Static then
+                return Is_Regular_File
+                  (Lib_Dir & Directory_Separator & "lib" &
+                   Fil.Ext_To (Lib_Name, Archive_Ext));
+ 
+             else
+                return Is_Regular_File
+                  (Lib_Dir & Directory_Separator & "lib" &
+                   Fil.Ext_To (Lib_Name, DLL_Ext));
+             end if;
+          end;
+       end if;
+    end Library_Exists_For;
+ 
+    ---------------------------
+    -- Library_File_Name_For --
+    ---------------------------
+ 
+    function Library_File_Name_For (Project : Project_Id) return Name_Id is
+    begin
+       if not Projects.Table (Project).Library then
+          Prj.Com.Fail ("INTERNAL ERROR: Library_File_Name_For called " &
+                        "for non library project");
+          return No_Name;
+ 
+       else
+          declare
+             Lib_Name : constant String :=
+               Get_Name_String (Projects.Table (Project).Library_Name);
+ 
+          begin
+             Name_Len := 3;
+             Name_Buffer (1 .. Name_Len) := "lib";
+ 
+             if Projects.Table (Project).Library_Kind = Static then
+                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, Archive_Ext));
+ 
+             else
+                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, DLL_Ext));
+             end if;
+ 
+             return Name_Find;
+          end;
+       end if;
+    end Library_File_Name_For;
+ 
+    ----------------
+    -- Object_Ext --
+    ----------------
+ 
+    function Object_Ext return String is
+    begin
+       return "o";
+    end Object_Ext;
+ 
+    ----------------
+    -- PIC_Option --
+    ----------------
+ 
+    function PIC_Option return String is
+    begin
+       return "-fPIC";
+    end PIC_Option;
+ 
+    -----------------------------------------------
+    -- Standalone_Library_Auto_Init_Is_Supported --
+    -----------------------------------------------
+ 
+    function Standalone_Library_Auto_Init_Is_Supported return Boolean is
+    begin
+       return True;
+    end Standalone_Library_Auto_Init_Is_Supported;
+ 
+    ---------------------------
+    -- Support_For_Libraries --
+    ---------------------------
+ 
+    function Support_For_Libraries return Library_Support is
+    begin
+       return Full;
+    end Support_For_Libraries;
+ 
+ end MLib.Tgt;
diff -Nrcpad gcc-3.4.3/gcc/ada/mlib-tgt-irix.adb gcc-4.0.0/gcc/ada/mlib-tgt-irix.adb
*** gcc-3.4.3/gcc/ada/mlib-tgt-irix.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/mlib-tgt-irix.adb	Wed Oct 27 12:27:51 2004
***************
*** 0 ****
--- 1,409 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                             M L I B . T G T                              --
+ --                              (IRIX Version)                              --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --           Copyright (C) 2003-2004, Ada Core Technologies, Inc.           --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package provides a set of target dependent routines to build
+ --  static, dynamic and shared libraries.
+ 
+ --  This is the IRIX version of the body.
+ 
+ with MLib.Fil;
+ with MLib.Utl;
+ with Namet;  use Namet;
+ with Opt;
+ with Output; use Output;
+ with Prj.Com;
+ with System;
+ 
+ package body MLib.Tgt is
+ 
+    No_Arguments        : aliased Argument_List         := (1 .. 0 => null);
+    Empty_Argument_List : constant Argument_List_Access := No_Arguments'Access;
+ 
+    Wl_Init_String : aliased String         := "-Wl,-init";
+    Wl_Init        : constant String_Access := Wl_Init_String'Access;
+    Wl_Fini_String : aliased String         := "-Wl,-fini";
+    Wl_Fini        : constant String_Access := Wl_Fini_String'Access;
+ 
+    Init_Fini_List :  constant Argument_List_Access :=
+                        new Argument_List'(1 => Wl_Init,
+                                           2 => null,
+                                           3 => Wl_Fini,
+                                           4 => null);
+    --  Used to put switches for automatic elaboration/finalization
+ 
+    ---------------------
+    -- Archive_Builder --
+    ---------------------
+ 
+    function Archive_Builder return String is
+    begin
+       return "ar";
+    end Archive_Builder;
+ 
+    -----------------------------
+    -- Archive_Builder_Options --
+    -----------------------------
+ 
+    function Archive_Builder_Options return String_List_Access is
+    begin
+       return new String_List'(1 => new String'("cr"));
+    end Archive_Builder_Options;
+ 
+    -----------------
+    -- Archive_Ext --
+    -----------------
+ 
+    function Archive_Ext return String is
+    begin
+       return "a";
+    end Archive_Ext;
+ 
+    ---------------------
+    -- Archive_Indexer --
+    ---------------------
+ 
+    function Archive_Indexer return String is
+    begin
+       return "ranlib";
+    end Archive_Indexer;
+ 
+    -----------------------------
+    -- Archive_Indexer_Options --
+    -----------------------------
+ 
+    function Archive_Indexer_Options return String_List_Access is
+    begin
+       return new String_List (1 .. 0);
+    end Archive_Indexer_Options;
+ 
+    ---------------------------
+    -- Build_Dynamic_Library --
+    ---------------------------
+ 
+    procedure Build_Dynamic_Library
+      (Ofiles       : Argument_List;
+       Foreign      : Argument_List;
+       Afiles       : Argument_List;
+       Options      : Argument_List;
+       Options_2    : Argument_List;
+       Interfaces   : Argument_List;
+       Lib_Filename : String;
+       Lib_Dir      : String;
+       Symbol_Data  : Symbol_Record;
+       Driver_Name  : Name_Id := No_Name;
+       Lib_Version  : String  := "";
+       Auto_Init    : Boolean := False)
+    is
+       pragma Unreferenced (Foreign);
+       pragma Unreferenced (Afiles);
+       pragma Unreferenced (Interfaces);
+       pragma Unreferenced (Symbol_Data);
+ 
+       Lib_File : constant String :=
+                    Lib_Dir & Directory_Separator & "lib" &
+                    MLib.Fil.Ext_To (Lib_Filename, DLL_Ext);
+ 
+       Version_Arg          : String_Access;
+       Symbolic_Link_Needed : Boolean := False;
+ 
+       Init_Fini : Argument_List_Access := Empty_Argument_List;
+ 
+       N_Options    : Argument_List := Options;
+       Options_Last : Natural := N_Options'Last;
+       --  After moving -lxxx to Options_2, N_Options up to index Options_Last
+       --  will contain the Options to pass to MLib.Utl.Gcc.
+ 
+       Real_Options_2 : Argument_List (1 .. Options'Length + Options_2'Length);
+       Real_Options_2_Last : Natural := 0;
+       --  Real_Options_2 up to index Real_Options_2_Last will contain the
+       --  Options_2 to pass to MLib.Utl.Gcc.
+ 
+    begin
+       if Opt.Verbose_Mode then
+          Write_Str ("building relocatable shared library ");
+          Write_Line (Lib_File);
+       end if;
+ 
+       --  If specified, add automatic elaboration/finalization
+ 
+       if Auto_Init then
+          Init_Fini := Init_Fini_List;
+          Init_Fini (2) := new String'("-Wl," & Lib_Filename & "init");
+          Init_Fini (4) := new String'("-Wl," & Lib_Filename & "final");
+       end if;
+ 
+       --  Move all -lxxx to Options_2
+ 
+       declare
+          Index : Natural := N_Options'First;
+          Arg   : String_Access;
+ 
+       begin
+          while Index <= Options_Last loop
+             Arg := N_Options (Index);
+ 
+             if Arg'Length > 2
+               and then Arg (Arg'First .. Arg'First + 1) = "-l"
+             then
+                Real_Options_2_Last := Real_Options_2_Last + 1;
+                Real_Options_2 (Real_Options_2_Last) := Arg;
+                N_Options (Index .. Options_Last - 1) :=
+                  N_Options (Index + 1 .. Options_Last);
+                Options_Last := Options_Last - 1;
+ 
+             else
+                Index := Index + 1;
+             end if;
+          end loop;
+       end;
+ 
+       --  Add to Real_Options_2 the argument Options_2
+ 
+       Real_Options_2
+         (Real_Options_2_Last + 1 .. Real_Options_2_Last + Options_2'Length) :=
+         Options_2;
+       Real_Options_2_Last := Real_Options_2_Last + Options_2'Length;
+ 
+       if Lib_Version = "" then
+          MLib.Utl.Gcc
+            (Output_File => Lib_File,
+             Objects     => Ofiles,
+             Options     => N_Options (N_Options'First .. Options_Last) &
+                            Init_Fini.all,
+             Driver_Name => Driver_Name,
+             Options_2   => Real_Options_2 (1 .. Real_Options_2_Last));
+ 
+       else
+          Version_Arg := new String'("-Wl,-soname," & Lib_Version);
+ 
+          if Is_Absolute_Path (Lib_Version) then
+             MLib.Utl.Gcc
+               (Output_File => Lib_Version,
+                Objects     => Ofiles,
+                Options     => N_Options (N_Options'First .. Options_Last) &
+                               Version_Arg & Init_Fini.all,
+                Driver_Name => Driver_Name,
+                Options_2   => Real_Options_2 (1 .. Real_Options_2_Last));
+             Symbolic_Link_Needed := Lib_Version /= Lib_File;
+ 
+          else
+             MLib.Utl.Gcc
+               (Output_File => Lib_Dir & Directory_Separator & Lib_Version,
+                Objects     => Ofiles,
+                Options     => N_Options (N_Options'First .. Options_Last) &
+                               Version_Arg & Init_Fini.all,
+                Driver_Name => Driver_Name,
+                Options_2   => Real_Options_2 (1 .. Real_Options_2_Last));
+             Symbolic_Link_Needed :=
+               Lib_Dir & Directory_Separator & Lib_Version /= Lib_File;
+          end if;
+ 
+          if Symbolic_Link_Needed then
+             declare
+                Success : Boolean;
+                Oldpath : String (1 .. Lib_Version'Length + 1);
+                Newpath : String (1 .. Lib_File'Length + 1);
+ 
+                Result : Integer;
+                pragma Unreferenced (Result);
+ 
+                function Symlink
+                  (Oldpath : System.Address;
+                   Newpath : System.Address)
+                   return    Integer;
+                pragma Import (C, Symlink, "__gnat_symlink");
+ 
+             begin
+                Oldpath (1 .. Lib_Version'Length) := Lib_Version;
+                Oldpath (Oldpath'Last)            := ASCII.NUL;
+                Newpath (1 .. Lib_File'Length)    := Lib_File;
+                Newpath (Newpath'Last)            := ASCII.NUL;
+ 
+                Delete_File (Lib_File, Success);
+ 
+                Result := Symlink (Oldpath'Address, Newpath'Address);
+             end;
+          end if;
+       end if;
+    end Build_Dynamic_Library;
+ 
+    -------------
+    -- DLL_Ext --
+    -------------
+ 
+    function DLL_Ext return String is
+    begin
+       return "so";
+    end DLL_Ext;
+ 
+    --------------------
+    -- Dynamic_Option --
+    --------------------
+ 
+    function Dynamic_Option return String is
+    begin
+       return "-shared";
+    end Dynamic_Option;
+ 
+    -------------------
+    -- Is_Object_Ext --
+    -------------------
+ 
+    function Is_Object_Ext (Ext : String) return Boolean is
+    begin
+       return Ext = ".o";
+    end Is_Object_Ext;
+ 
+    --------------
+    -- Is_C_Ext --
+    --------------
+ 
+    function Is_C_Ext (Ext : String) return Boolean is
+    begin
+       return Ext = ".c";
+    end Is_C_Ext;
+ 
+    --------------------
+    -- Is_Archive_Ext --
+    --------------------
+ 
+    function Is_Archive_Ext (Ext : String) return Boolean is
+    begin
+       return Ext = ".a" or else Ext = ".so";
+    end Is_Archive_Ext;
+ 
+    -------------
+    -- Libgnat --
+    -------------
+ 
+    function Libgnat return String is
+    begin
+       return "libgnat.a";
+    end Libgnat;
+ 
+    ------------------------
+    -- Library_Exists_For --
+    ------------------------
+ 
+    function Library_Exists_For (Project : Project_Id) return Boolean is
+    begin
+       if not Projects.Table (Project).Library then
+          Prj.Com.Fail ("INTERNAL ERROR: Library_Exists_For called " &
+                        "for non library project");
+          return False;
+ 
+       else
+          declare
+             Lib_Dir : constant String :=
+               Get_Name_String (Projects.Table (Project).Library_Dir);
+             Lib_Name : constant String :=
+               Get_Name_String (Projects.Table (Project).Library_Name);
+ 
+          begin
+             if Projects.Table (Project).Library_Kind = Static then
+                return Is_Regular_File
+                  (Lib_Dir & Directory_Separator & "lib" &
+                   Fil.Ext_To (Lib_Name, Archive_Ext));
+ 
+             else
+                return Is_Regular_File
+                  (Lib_Dir & Directory_Separator & "lib" &
+                   Fil.Ext_To (Lib_Name, DLL_Ext));
+             end if;
+          end;
+       end if;
+    end Library_Exists_For;
+ 
+    ---------------------------
+    -- Library_File_Name_For --
+    ---------------------------
+ 
+    function Library_File_Name_For (Project : Project_Id) return Name_Id is
+    begin
+       if not Projects.Table (Project).Library then
+          Prj.Com.Fail ("INTERNAL ERROR: Library_File_Name_For called " &
+                        "for non library project");
+          return No_Name;
+ 
+       else
+          declare
+             Lib_Name : constant String :=
+               Get_Name_String (Projects.Table (Project).Library_Name);
+ 
+          begin
+             Name_Len := 3;
+             Name_Buffer (1 .. Name_Len) := "lib";
+ 
+             if Projects.Table (Project).Library_Kind = Static then
+                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, Archive_Ext));
+ 
+             else
+                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, DLL_Ext));
+             end if;
+ 
+             return Name_Find;
+          end;
+       end if;
+    end Library_File_Name_For;
+ 
+    ----------------
+    -- Object_Ext --
+    ----------------
+ 
+    function Object_Ext return String is
+    begin
+       return "o";
+    end Object_Ext;
+ 
+    ----------------
+    -- PIC_Option --
+    ----------------
+ 
+    function PIC_Option return String is
+    begin
+       return "-fPIC";
+    end PIC_Option;
+ 
+    -----------------------------------------------
+    -- Standalone_Library_Auto_Init_Is_Supported --
+    -----------------------------------------------
+ 
+    function Standalone_Library_Auto_Init_Is_Supported return Boolean is
+    begin
+       return True;
+    end Standalone_Library_Auto_Init_Is_Supported;
+ 
+    ---------------------------
+    -- Support_For_Libraries --
+    ---------------------------
+ 
+    function Support_For_Libraries return Library_Support is
+    begin
+       return Full;
+    end Support_For_Libraries;
+ 
+ end MLib.Tgt;
diff -Nrcpad gcc-3.4.3/gcc/ada/mlib-tgt-linux.adb gcc-4.0.0/gcc/ada/mlib-tgt-linux.adb
*** gcc-3.4.3/gcc/ada/mlib-tgt-linux.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/mlib-tgt-linux.adb	Wed Oct 27 12:27:52 2004
***************
*** 0 ****
--- 1,366 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                             M L I B . T G T                              --
+ --                           (GNU/Linux Version)                            --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --              Copyright (C) 2001-2004, Free Software Foundation, Inc.     --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package provides a set of target dependent routines to build
+ --  static, dynamic and shared libraries.
+ 
+ --  This is the GNU/Linux version of the body.
+ 
+ with MLib.Fil;
+ with MLib.Utl;
+ with Namet;  use Namet;
+ with Opt;
+ with Output; use Output;
+ with Prj.Com;
+ with System;
+ 
+ package body MLib.Tgt is
+ 
+    use GNAT;
+    use MLib;
+ 
+    No_Arguments        : aliased Argument_List         := (1 .. 0 => null);
+    Empty_Argument_List : constant Argument_List_Access := No_Arguments'Access;
+ 
+    Wl_Init_String : aliased String         := "-Wl,-init";
+    Wl_Init        : constant String_Access := Wl_Init_String'Access;
+    Wl_Fini_String : aliased String         := "-Wl,-fini";
+    Wl_Fini        : constant String_Access := Wl_Fini_String'Access;
+ 
+    Init_Fini_List :  constant Argument_List_Access :=
+                        new Argument_List'(1 => Wl_Init,
+                                           2 => null,
+                                           3 => Wl_Fini,
+                                           4 => null);
+    --  Used to put switches for automatic elaboration/finalization
+ 
+    ---------------------
+    -- Archive_Builder --
+    ---------------------
+ 
+    function Archive_Builder return String is
+    begin
+       return "ar";
+    end Archive_Builder;
+ 
+    -----------------------------
+    -- Archive_Builder_Options --
+    -----------------------------
+ 
+    function Archive_Builder_Options return String_List_Access is
+    begin
+       return new String_List'(1 => new String'("cr"));
+    end Archive_Builder_Options;
+ 
+    -----------------
+    -- Archive_Ext --
+    -----------------
+ 
+    function Archive_Ext return  String is
+    begin
+       return "a";
+    end Archive_Ext;
+ 
+    ---------------------
+    -- Archive_Indexer --
+    ---------------------
+ 
+    function Archive_Indexer return String is
+    begin
+       return "ranlib";
+    end Archive_Indexer;
+ 
+    -----------------------------
+    -- Archive_Indexer_Options --
+    -----------------------------
+ 
+    function Archive_Indexer_Options return String_List_Access is
+    begin
+       return new String_List (1 .. 0);
+    end Archive_Indexer_Options;
+ 
+    ---------------------------
+    -- Build_Dynamic_Library --
+    ---------------------------
+ 
+    procedure Build_Dynamic_Library
+      (Ofiles       : Argument_List;
+       Foreign      : Argument_List;
+       Afiles       : Argument_List;
+       Options      : Argument_List;
+       Options_2    : Argument_List;
+       Interfaces   : Argument_List;
+       Lib_Filename : String;
+       Lib_Dir      : String;
+       Symbol_Data  : Symbol_Record;
+       Driver_Name  : Name_Id := No_Name;
+       Lib_Version  : String  := "";
+       Auto_Init    : Boolean := False)
+    is
+       pragma Unreferenced (Foreign);
+       pragma Unreferenced (Afiles);
+       pragma Unreferenced (Interfaces);
+       pragma Unreferenced (Symbol_Data);
+ 
+       Lib_File : constant String :=
+                    Lib_Dir & Directory_Separator & "lib" &
+                    Fil.Ext_To (Lib_Filename, DLL_Ext);
+ 
+       Version_Arg          : String_Access;
+       Symbolic_Link_Needed : Boolean := False;
+ 
+       Init_Fini : Argument_List_Access := Empty_Argument_List;
+ 
+    begin
+       if Opt.Verbose_Mode then
+          Write_Str ("building relocatable shared library ");
+          Write_Line (Lib_File);
+       end if;
+ 
+       --  If specified, add automatic elaboration/finalization
+ 
+       if Auto_Init then
+          Init_Fini := Init_Fini_List;
+          Init_Fini (2) := new String'("-Wl," & Lib_Filename & "init");
+          Init_Fini (4) := new String'("-Wl," & Lib_Filename & "final");
+       end if;
+ 
+       if Lib_Version = "" then
+          Utl.Gcc
+            (Output_File => Lib_File,
+             Objects     => Ofiles,
+             Options     => Options & Init_Fini.all,
+             Driver_Name => Driver_Name,
+             Options_2   => Options_2);
+ 
+       else
+          Version_Arg := new String'("-Wl,-soname," & Lib_Version);
+ 
+          if Is_Absolute_Path (Lib_Version) then
+             Utl.Gcc
+               (Output_File => Lib_Version,
+                Objects     => Ofiles,
+                Options     => Options & Version_Arg & Init_Fini.all,
+                Driver_Name => Driver_Name,
+                Options_2   => Options_2);
+             Symbolic_Link_Needed := Lib_Version /= Lib_File;
+ 
+          else
+             Utl.Gcc
+               (Output_File => Lib_Dir & Directory_Separator & Lib_Version,
+                Objects     => Ofiles,
+                Options     => Options & Version_Arg & Init_Fini.all,
+                Driver_Name => Driver_Name,
+                Options_2   => Options_2);
+             Symbolic_Link_Needed :=
+               Lib_Dir & Directory_Separator & Lib_Version /= Lib_File;
+          end if;
+ 
+          if Symbolic_Link_Needed then
+             declare
+                Success : Boolean;
+                Oldpath : String (1 .. Lib_Version'Length + 1);
+                Newpath : String (1 .. Lib_File'Length + 1);
+ 
+                Result : Integer;
+                pragma Unreferenced (Result);
+ 
+                function Symlink
+                  (Oldpath : System.Address;
+                   Newpath : System.Address) return Integer;
+                pragma Import (C, Symlink, "__gnat_symlink");
+ 
+             begin
+                Oldpath (1 .. Lib_Version'Length) := Lib_Version;
+                Oldpath (Oldpath'Last)            := ASCII.NUL;
+                Newpath (1 .. Lib_File'Length)    := Lib_File;
+                Newpath (Newpath'Last)            := ASCII.NUL;
+ 
+                Delete_File (Lib_File, Success);
+ 
+                Result := Symlink (Oldpath'Address, Newpath'Address);
+             end;
+          end if;
+       end if;
+    end Build_Dynamic_Library;
+ 
+    -------------
+    -- DLL_Ext --
+    -------------
+ 
+    function DLL_Ext return String is
+    begin
+       return "so";
+    end DLL_Ext;
+ 
+    --------------------
+    -- Dynamic_Option --
+    --------------------
+ 
+    function Dynamic_Option return String is
+    begin
+       return "-shared";
+    end Dynamic_Option;
+ 
+    -------------------
+    -- Is_Object_Ext --
+    -------------------
+ 
+    function Is_Object_Ext (Ext : String) return Boolean is
+    begin
+       return Ext = ".o";
+    end Is_Object_Ext;
+ 
+    --------------
+    -- Is_C_Ext --
+    --------------
+ 
+    function Is_C_Ext (Ext : String) return Boolean is
+    begin
+       return Ext = ".c";
+    end Is_C_Ext;
+ 
+    --------------------
+    -- Is_Archive_Ext --
+    --------------------
+ 
+    function Is_Archive_Ext (Ext : String) return Boolean is
+    begin
+       return Ext = ".a" or else Ext = ".so";
+    end Is_Archive_Ext;
+ 
+    -------------
+    -- Libgnat --
+    -------------
+ 
+    function Libgnat return String is
+    begin
+       return "libgnat.a";
+    end Libgnat;
+ 
+    ------------------------
+    -- Library_Exists_For --
+    ------------------------
+ 
+    function Library_Exists_For (Project : Project_Id) return Boolean is
+    begin
+       if not Projects.Table (Project).Library then
+          Prj.Com.Fail ("INTERNAL ERROR: Library_Exists_For called " &
+                        "for non library project");
+          return False;
+ 
+       else
+          declare
+             Lib_Dir : constant String :=
+               Get_Name_String (Projects.Table (Project).Library_Dir);
+             Lib_Name : constant String :=
+               Get_Name_String (Projects.Table (Project).Library_Name);
+ 
+          begin
+             if Projects.Table (Project).Library_Kind = Static then
+                return Is_Regular_File
+                  (Lib_Dir & Directory_Separator & "lib" &
+                   Fil.Ext_To (Lib_Name, Archive_Ext));
+ 
+             else
+                return Is_Regular_File
+                  (Lib_Dir & Directory_Separator & "lib" &
+                   Fil.Ext_To (Lib_Name, DLL_Ext));
+             end if;
+          end;
+       end if;
+    end Library_Exists_For;
+ 
+    ---------------------------
+    -- Library_File_Name_For --
+    ---------------------------
+ 
+    function Library_File_Name_For (Project : Project_Id) return Name_Id is
+    begin
+       if not Projects.Table (Project).Library then
+          Prj.Com.Fail ("INTERNAL ERROR: Library_File_Name_For called " &
+                        "for non library project");
+          return No_Name;
+ 
+       else
+          declare
+             Lib_Name : constant String :=
+               Get_Name_String (Projects.Table (Project).Library_Name);
+ 
+          begin
+             Name_Len := 3;
+             Name_Buffer (1 .. Name_Len) := "lib";
+ 
+             if Projects.Table (Project).Library_Kind = Static then
+                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, Archive_Ext));
+ 
+             else
+                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, DLL_Ext));
+             end if;
+ 
+             return Name_Find;
+          end;
+       end if;
+    end Library_File_Name_For;
+ 
+    ----------------
+    -- Object_Ext --
+    ----------------
+ 
+    function Object_Ext return String is
+    begin
+       return "o";
+    end Object_Ext;
+ 
+    ----------------
+    -- PIC_Option --
+    ----------------
+ 
+    function PIC_Option return String is
+    begin
+       return "-fPIC";
+    end PIC_Option;
+ 
+    -----------------------------------------------
+    -- Standalone_Library_Auto_Init_Is_Supported --
+    -----------------------------------------------
+ 
+    function Standalone_Library_Auto_Init_Is_Supported return Boolean is
+    begin
+       return True;
+    end Standalone_Library_Auto_Init_Is_Supported;
+ 
+    ---------------------------
+    -- Support_For_Libraries --
+    ---------------------------
+ 
+    function Support_For_Libraries return Library_Support is
+    begin
+       return Full;
+    end Support_For_Libraries;
+ 
+ end MLib.Tgt;
diff -Nrcpad gcc-3.4.3/gcc/ada/mlib-tgt-lynxos.adb gcc-4.0.0/gcc/ada/mlib-tgt-lynxos.adb
*** gcc-3.4.3/gcc/ada/mlib-tgt-lynxos.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/mlib-tgt-lynxos.adb	Thu Feb 10 14:04:42 2005
***************
*** 0 ****
--- 1,274 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                             M L I B . T G T                              --
+ --                             (LynxOS Version)                             --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --           Copyright (C) 2003-2004 Free Software Foundation, Inc.         --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package provides a set of target dependent routines to build
+ --  static libraries.
+ 
+ --  This is the LynxOS version of the body
+ 
+ with MLib.Fil;
+ with Namet;  use Namet;
+ with Prj.Com;
+ 
+ package body MLib.Tgt is
+ 
+    ---------------------
+    -- Archive_Builder --
+    ---------------------
+ 
+    function Archive_Builder return String is
+    begin
+       return "ar";
+    end Archive_Builder;
+ 
+    -----------------------------
+    -- Archive_Builder_Options --
+    -----------------------------
+ 
+    function Archive_Builder_Options return String_List_Access is
+    begin
+       return new String_List'(1 => new String'("cr"));
+    end Archive_Builder_Options;
+ 
+    -----------------
+    -- Archive_Ext --
+    -----------------
+ 
+    function Archive_Ext return String is
+    begin
+       return "a";
+    end Archive_Ext;
+ 
+    ---------------------
+    -- Archive_Indexer --
+    ---------------------
+ 
+    function Archive_Indexer return String is
+    begin
+       return "ranlib";
+    end Archive_Indexer;
+ 
+    -----------------------------
+    -- Archive_Indexer_Options --
+    -----------------------------
+ 
+    function Archive_Indexer_Options return String_List_Access is
+    begin
+       return new String_List (1 .. 0);
+    end Archive_Indexer_Options;
+ 
+    ---------------------------
+    -- Build_Dynamic_Library --
+    ---------------------------
+ 
+    procedure Build_Dynamic_Library
+      (Ofiles       : Argument_List;
+       Foreign      : Argument_List;
+       Afiles       : Argument_List;
+       Options      : Argument_List;
+       Options_2    : Argument_List;
+       Interfaces   : Argument_List;
+       Lib_Filename : String;
+       Lib_Dir      : String;
+       Symbol_Data  : Symbol_Record;
+       Driver_Name  : Name_Id := No_Name;
+       Lib_Version  : String  := "";
+       Auto_Init    : Boolean := False)
+    is
+       pragma Unreferenced (Ofiles);
+       pragma Unreferenced (Foreign);
+       pragma Unreferenced (Afiles);
+       pragma Unreferenced (Options);
+       pragma Unreferenced (Options_2);
+       pragma Unreferenced (Interfaces);
+       pragma Unreferenced (Lib_Filename);
+       pragma Unreferenced (Lib_Dir);
+       pragma Unreferenced (Symbol_Data);
+       pragma Unreferenced (Driver_Name);
+       pragma Unreferenced (Lib_Version);
+       pragma Unreferenced (Auto_Init);
+ 
+    begin
+       null;
+    end Build_Dynamic_Library;
+ 
+    -------------
+    -- DLL_Ext --
+    -------------
+ 
+    function DLL_Ext return String is
+    begin
+       return "";
+    end DLL_Ext;
+ 
+    --------------------
+    -- Dynamic_Option --
+    --------------------
+ 
+    function Dynamic_Option return String is
+    begin
+       return "";
+    end Dynamic_Option;
+ 
+    -------------------
+    -- Is_Object_Ext --
+    -------------------
+ 
+    function Is_Object_Ext (Ext : String) return Boolean is
+    begin
+       return Ext = ".o";
+    end Is_Object_Ext;
+ 
+    --------------
+    -- Is_C_Ext --
+    --------------
+ 
+    function Is_C_Ext (Ext : String) return Boolean is
+    begin
+       return Ext = ".c";
+    end Is_C_Ext;
+ 
+    --------------------
+    -- Is_Archive_Ext --
+    --------------------
+ 
+    function Is_Archive_Ext (Ext : String) return Boolean is
+    begin
+       return Ext = ".a";
+    end Is_Archive_Ext;
+ 
+    -------------
+    -- Libgnat --
+    -------------
+ 
+    function Libgnat return String is
+    begin
+       return "libgnat.a";
+    end Libgnat;
+ 
+    ------------------------
+    -- Library_Exists_For --
+    ------------------------
+ 
+    function Library_Exists_For (Project : Project_Id) return Boolean is
+    begin
+       if not Projects.Table (Project).Library then
+          Prj.Com.Fail ("INTERNAL ERROR: Library_Exists_For called " &
+                        "for non library project");
+          return False;
+ 
+       else
+          declare
+             Lib_Dir : constant String :=
+               Get_Name_String (Projects.Table (Project).Library_Dir);
+             Lib_Name : constant String :=
+               Get_Name_String (Projects.Table (Project).Library_Name);
+ 
+          begin
+             if Projects.Table (Project).Library_Kind = Static then
+                return Is_Regular_File
+                  (Lib_Dir & Directory_Separator & "lib" &
+                   Fil.Ext_To (Lib_Name, Archive_Ext));
+ 
+             else
+                return Is_Regular_File
+                  (Lib_Dir & Directory_Separator & "lib" &
+                   Fil.Ext_To (Lib_Name, DLL_Ext));
+             end if;
+          end;
+       end if;
+    end Library_Exists_For;
+ 
+    ---------------------------
+    -- Library_File_Name_For --
+    ---------------------------
+ 
+    function Library_File_Name_For (Project : Project_Id) return Name_Id is
+    begin
+       if not Projects.Table (Project).Library then
+          Prj.Com.Fail ("INTERNAL ERROR: Library_File_Name_For called " &
+                        "for non library project");
+          return No_Name;
+ 
+       else
+          declare
+             Lib_Name : constant String :=
+               Get_Name_String (Projects.Table (Project).Library_Name);
+ 
+          begin
+             Name_Len := 3;
+             Name_Buffer (1 .. Name_Len) := "lib";
+ 
+             if Projects.Table (Project).Library_Kind = Static then
+                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, Archive_Ext));
+ 
+             else
+                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, DLL_Ext));
+             end if;
+ 
+             return Name_Find;
+          end;
+       end if;
+    end Library_File_Name_For;
+ 
+    ----------------
+    -- Object_Ext --
+    ----------------
+ 
+    function Object_Ext return String is
+    begin
+       return "o";
+    end Object_Ext;
+ 
+    ----------------
+    -- PIC_Option --
+    ----------------
+ 
+    function PIC_Option return String is
+    begin
+       return "";
+    end PIC_Option;
+ 
+    -----------------------------------------------
+    -- Standalone_Library_Auto_Init_Is_Supported --
+    -----------------------------------------------
+ 
+    function Standalone_Library_Auto_Init_Is_Supported return Boolean is
+    begin
+       return False;
+    end Standalone_Library_Auto_Init_Is_Supported;
+ 
+    ---------------------------
+    -- Support_For_Libraries --
+    ---------------------------
+ 
+    function Support_For_Libraries return Library_Support is
+    begin
+       return Static_Only;
+    end Support_For_Libraries;
+ 
+ end MLib.Tgt;
diff -Nrcpad gcc-3.4.3/gcc/ada/mlib-tgt-mingw.adb gcc-4.0.0/gcc/ada/mlib-tgt-mingw.adb
*** gcc-3.4.3/gcc/ada/mlib-tgt-mingw.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/mlib-tgt-mingw.adb	Wed Oct 27 12:27:52 2004
***************
*** 0 ****
--- 1,296 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                             M L I B . T G T                              --
+ --                            (Windows Version)                             --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 2002-2004, Free Software Foundation, Inc.         --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package provides a set of target dependent routines to build
+ --  static, dynamic and shared libraries.
+ 
+ --  This is the Windows version of the body. Works only with GCC versions
+ --  supporting the "-shared" option.
+ 
+ with Namet;  use Namet;
+ with Opt;
+ with Output; use Output;
+ with Prj.Com;
+ 
+ with GNAT.OS_Lib; use GNAT.OS_Lib;
+ 
+ with MLib.Fil;
+ with MLib.Utl;
+ 
+ package body MLib.Tgt is
+ 
+    package Files renames MLib.Fil;
+    package Tools renames MLib.Utl;
+ 
+    ---------------------
+    -- Archive_Builder --
+    ---------------------
+ 
+    function Archive_Builder return String is
+    begin
+       return "ar";
+    end Archive_Builder;
+ 
+    -----------------------------
+    -- Archive_Builder_Options --
+    -----------------------------
+ 
+    function Archive_Builder_Options return String_List_Access is
+    begin
+       return new String_List'(1 => new String'("cr"));
+    end Archive_Builder_Options;
+ 
+    -----------------
+    -- Archive_Ext --
+    -----------------
+ 
+    function Archive_Ext return  String is
+    begin
+       return "a";
+    end Archive_Ext;
+ 
+    ---------------------
+    -- Archive_Indexer --
+    ---------------------
+ 
+    function Archive_Indexer return String is
+    begin
+       return "ranlib";
+    end Archive_Indexer;
+ 
+    -----------------------------
+    -- Archive_Indexer_Options --
+    -----------------------------
+ 
+    function Archive_Indexer_Options return String_List_Access is
+    begin
+       return new String_List (1 .. 0);
+    end Archive_Indexer_Options;
+ 
+    ---------------------------
+    -- Build_Dynamic_Library --
+    ---------------------------
+ 
+    procedure Build_Dynamic_Library
+      (Ofiles       : Argument_List;
+       Foreign      : Argument_List;
+       Afiles       : Argument_List;
+       Options      : Argument_List;
+       Options_2    : Argument_List;
+       Interfaces   : Argument_List;
+       Lib_Filename : String;
+       Lib_Dir      : String;
+       Symbol_Data  : Symbol_Record;
+       Driver_Name  : Name_Id := No_Name;
+       Lib_Version  : String  := "";
+       Auto_Init    : Boolean := False)
+    is
+       pragma Unreferenced (Foreign);
+       pragma Unreferenced (Afiles);
+       pragma Unreferenced (Auto_Init);
+       pragma Unreferenced (Symbol_Data);
+       pragma Unreferenced (Interfaces);
+       pragma Unreferenced (Lib_Version);
+ 
+       Lib_File : constant String :=
+                    Lib_Dir & Directory_Separator &
+                    Files.Ext_To (Lib_Filename, DLL_Ext);
+ 
+    --  Start of processing for Build_Dynamic_Library
+ 
+    begin
+       if Opt.Verbose_Mode then
+          Write_Str ("building relocatable shared library ");
+          Write_Line (Lib_File);
+       end if;
+ 
+       Tools.Gcc
+         (Output_File => Lib_File,
+          Objects     => Ofiles,
+          Options     => Tools.No_Argument_List,
+          Options_2   => Options & Options_2,
+          Driver_Name => Driver_Name);
+    end Build_Dynamic_Library;
+ 
+    -------------
+    -- DLL_Ext --
+    -------------
+ 
+    function DLL_Ext return String is
+    begin
+       return "dll";
+    end DLL_Ext;
+ 
+    --------------------
+    -- Dynamic_Option --
+    --------------------
+ 
+    function Dynamic_Option return String is
+    begin
+       return "-shared";
+    end Dynamic_Option;
+ 
+    -------------------
+    -- Is_Object_Ext --
+    -------------------
+ 
+    function Is_Object_Ext (Ext : String) return Boolean is
+    begin
+       return Ext = ".o";
+    end Is_Object_Ext;
+ 
+    --------------
+    -- Is_C_Ext --
+    --------------
+ 
+    function Is_C_Ext (Ext : String) return Boolean is
+    begin
+       return Ext = ".c";
+    end Is_C_Ext;
+ 
+    --------------------
+    -- Is_Archive_Ext --
+    --------------------
+ 
+    function Is_Archive_Ext (Ext : String) return Boolean is
+    begin
+       return Ext = ".a" or else Ext = ".dll";
+    end Is_Archive_Ext;
+ 
+    -------------
+    -- Libgnat --
+    -------------
+ 
+    function Libgnat return String is
+    begin
+       return "libgnat.a";
+    end Libgnat;
+ 
+    ------------------------
+    -- Library_Exists_For --
+    ------------------------
+ 
+    function Library_Exists_For (Project : Project_Id) return Boolean is
+    begin
+       if not Projects.Table (Project).Library then
+          Prj.Com.Fail ("INTERNAL ERROR: Library_Exists_For called " &
+                        "for non library project");
+          return False;
+ 
+       else
+          declare
+             Lib_Dir : constant String :=
+                         Get_Name_String
+                           (Projects.Table (Project).Library_Dir);
+             Lib_Name : constant String :=
+                          Get_Name_String
+                            (Projects.Table (Project).Library_Name);
+ 
+          begin
+             if Projects.Table (Project).Library_Kind = Static then
+                return Is_Regular_File
+                  (Lib_Dir & Directory_Separator & "lib" &
+                   MLib.Fil.Ext_To (Lib_Name, Archive_Ext));
+ 
+             else
+                return Is_Regular_File
+                  (Lib_Dir & Directory_Separator &
+                   MLib.Fil.Ext_To (Lib_Name, DLL_Ext));
+             end if;
+          end;
+       end if;
+    end Library_Exists_For;
+ 
+    ---------------------------
+    -- Library_File_Name_For --
+    ---------------------------
+ 
+    function Library_File_Name_For (Project : Project_Id) return Name_Id is
+    begin
+       if not Projects.Table (Project).Library then
+          Prj.Com.Fail ("INTERNAL ERROR: Library_File_Name_For called " &
+                        "for non library project");
+          return No_Name;
+ 
+       else
+          declare
+             Lib_Name : constant String :=
+               Get_Name_String (Projects.Table (Project).Library_Name);
+ 
+          begin
+             if Projects.Table (Project).Library_Kind = Static then
+                Name_Len := 3;
+                Name_Buffer (1 .. Name_Len) := "lib";
+                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, Archive_Ext));
+ 
+             else
+                Name_Len := 0;
+                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, DLL_Ext));
+             end if;
+ 
+             return Name_Find;
+          end;
+       end if;
+    end Library_File_Name_For;
+ 
+    ----------------
+    -- Object_Ext --
+    ----------------
+ 
+    function Object_Ext return String is
+    begin
+       return "o";
+    end Object_Ext;
+ 
+    ----------------
+    -- PIC_Option --
+    ----------------
+ 
+    function PIC_Option return String is
+    begin
+       return "";
+    end PIC_Option;
+ 
+    -----------------------------------------------
+    -- Standalone_Library_Auto_Init_Is_Supported --
+    -----------------------------------------------
+ 
+    function Standalone_Library_Auto_Init_Is_Supported return Boolean is
+    begin
+       return False;
+    end Standalone_Library_Auto_Init_Is_Supported;
+ 
+    ---------------------------
+    -- Support_For_Libraries --
+    ---------------------------
+ 
+    function Support_For_Libraries return Library_Support is
+    begin
+       return Full;
+    end Support_For_Libraries;
+ 
+ end MLib.Tgt;
diff -Nrcpad gcc-3.4.3/gcc/ada/mlib-tgt-solaris.adb gcc-4.0.0/gcc/ada/mlib-tgt-solaris.adb
*** gcc-3.4.3/gcc/ada/mlib-tgt-solaris.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/mlib-tgt-solaris.adb	Wed Oct 27 12:27:52 2004
***************
*** 0 ****
--- 1,363 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                             M L I B . T G T                              --
+ --                            (Solaris Version)                             --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --              Copyright (C) 2002-2004 Free Software Foundation, Inc.      --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package provides a set of target dependent routines to build
+ --  static, dynamic and shared libraries.
+ 
+ --  This is the Solaris version of the body
+ 
+ with MLib.Fil;
+ with MLib.Utl;
+ with Namet;  use Namet;
+ with Opt;
+ with Output; use Output;
+ with Prj.Com;
+ with System;
+ 
+ package body MLib.Tgt is
+ 
+    No_Arguments        : aliased Argument_List         := (1 .. 0 => null);
+    Empty_Argument_List : constant Argument_List_Access := No_Arguments'Access;
+ 
+    Wl_Init_String : constant String         := "-Wl,-zinitarray=";
+    Wl_Fini_String : constant String         := "-Wl,-zfiniarray=";
+ 
+    Init_Fini_List :  constant Argument_List_Access :=
+                        new Argument_List'(1 => null,
+                                           2 => null);
+ 
+    --  Used to put switches for automatic elaboration/finalization
+ 
+    ---------------------
+    -- Archive_Builder --
+    ---------------------
+ 
+    function Archive_Builder return String is
+    begin
+       return "ar";
+    end Archive_Builder;
+ 
+    -----------------------------
+    -- Archive_Builder_Options --
+    -----------------------------
+ 
+    function Archive_Builder_Options return String_List_Access is
+    begin
+       return new String_List'(1 => new String'("cr"));
+    end Archive_Builder_Options;
+ 
+    -----------------
+    -- Archive_Ext --
+    -----------------
+ 
+    function Archive_Ext return  String is
+    begin
+       return "a";
+    end Archive_Ext;
+ 
+    ---------------------
+    -- Archive_Indexer --
+    ---------------------
+ 
+    function Archive_Indexer return String is
+    begin
+       return "ranlib";
+    end Archive_Indexer;
+ 
+    -----------------------------
+    -- Archive_Indexer_Options --
+    -----------------------------
+ 
+    function Archive_Indexer_Options return String_List_Access is
+    begin
+       return new String_List (1 .. 0);
+    end Archive_Indexer_Options;
+ 
+    ---------------------------
+    -- Build_Dynamic_Library --
+    ---------------------------
+ 
+    procedure Build_Dynamic_Library
+      (Ofiles       : Argument_List;
+       Foreign      : Argument_List;
+       Afiles       : Argument_List;
+       Options      : Argument_List;
+       Options_2    : Argument_List;
+       Interfaces   : Argument_List;
+       Lib_Filename : String;
+       Lib_Dir      : String;
+       Symbol_Data  : Symbol_Record;
+       Driver_Name  : Name_Id := No_Name;
+       Lib_Version  : String  := "";
+       Auto_Init    : Boolean := False)
+    is
+       pragma Unreferenced (Foreign);
+       pragma Unreferenced (Afiles);
+       pragma Unreferenced (Interfaces);
+       pragma Unreferenced (Symbol_Data);
+ 
+       Lib_File : constant String :=
+                    Lib_Dir & Directory_Separator & "lib" &
+                    Fil.Ext_To (Lib_Filename, DLL_Ext);
+ 
+       Version_Arg          : String_Access;
+       Symbolic_Link_Needed : Boolean := False;
+ 
+       Init_Fini : Argument_List_Access := Empty_Argument_List;
+ 
+    begin
+       if Opt.Verbose_Mode then
+          Write_Str ("building relocatable shared library ");
+          Write_Line (Lib_File);
+       end if;
+ 
+       --  If specified, add automatic elaboration/finalization
+ 
+       if Auto_Init then
+          Init_Fini := Init_Fini_List;
+          Init_Fini (1) :=
+            new String'(Wl_Init_String & Lib_Filename & "init");
+          Init_Fini (2) :=
+            new String'(Wl_Fini_String & Lib_Filename & "final");
+       end if;
+ 
+       if Lib_Version = "" then
+          Utl.Gcc
+            (Output_File => Lib_File,
+             Objects     => Ofiles,
+             Options     => Options & Init_Fini.all,
+             Options_2   => Options_2,
+             Driver_Name => Driver_Name);
+ 
+       else
+          Version_Arg := new String'("-Wl,-h," & Lib_Version);
+ 
+          if Is_Absolute_Path (Lib_Version) then
+             Utl.Gcc
+               (Output_File => Lib_Version,
+                Objects     => Ofiles,
+                Options     => Options & Version_Arg & Init_Fini.all,
+                Options_2   => Options_2,
+                Driver_Name => Driver_Name);
+             Symbolic_Link_Needed := Lib_Version /= Lib_File;
+ 
+          else
+             Utl.Gcc
+               (Output_File => Lib_Dir & Directory_Separator & Lib_Version,
+                Objects     => Ofiles,
+                Options     => Options & Version_Arg & Init_Fini.all,
+                Options_2   => Options_2,
+                Driver_Name => Driver_Name);
+             Symbolic_Link_Needed :=
+               Lib_Dir & Directory_Separator & Lib_Version /= Lib_File;
+          end if;
+ 
+          if Symbolic_Link_Needed then
+             declare
+                Success : Boolean;
+                Oldpath : String (1 .. Lib_Version'Length + 1);
+                Newpath : String (1 .. Lib_File'Length + 1);
+ 
+                Result : Integer;
+                pragma Unreferenced (Result);
+ 
+                function Symlink
+                  (Oldpath : System.Address;
+                   Newpath : System.Address)
+                   return    Integer;
+                pragma Import (C, Symlink, "__gnat_symlink");
+ 
+             begin
+                Oldpath (1 .. Lib_Version'Length) := Lib_Version;
+                Oldpath (Oldpath'Last)            := ASCII.NUL;
+                Newpath (1 .. Lib_File'Length)    := Lib_File;
+                Newpath (Newpath'Last)            := ASCII.NUL;
+ 
+                Delete_File (Lib_File, Success);
+ 
+                Result := Symlink (Oldpath'Address, Newpath'Address);
+             end;
+          end if;
+       end if;
+    end Build_Dynamic_Library;
+ 
+    -------------
+    -- DLL_Ext --
+    -------------
+ 
+    function DLL_Ext return String is
+    begin
+       return "so";
+    end DLL_Ext;
+ 
+    --------------------
+    -- Dynamic_Option --
+    --------------------
+ 
+    function Dynamic_Option return String is
+    begin
+       return "-shared";
+    end Dynamic_Option;
+ 
+    -------------------
+    -- Is_Object_Ext --
+    -------------------
+ 
+    function Is_Object_Ext (Ext : String) return Boolean is
+    begin
+       return Ext = ".o";
+    end Is_Object_Ext;
+ 
+    --------------
+    -- Is_C_Ext --
+    --------------
+ 
+    function Is_C_Ext (Ext : String) return Boolean is
+    begin
+       return Ext = ".c";
+    end Is_C_Ext;
+ 
+    --------------------
+    -- Is_Archive_Ext --
+    --------------------
+ 
+    function Is_Archive_Ext (Ext : String) return Boolean is
+    begin
+       return Ext = ".a" or else Ext = ".so";
+    end Is_Archive_Ext;
+ 
+    -------------
+    -- Libgnat --
+    -------------
+ 
+    function Libgnat return String is
+    begin
+       return "libgnat.a";
+    end Libgnat;
+ 
+    ------------------------
+    -- Library_Exists_For --
+    ------------------------
+ 
+    function Library_Exists_For (Project : Project_Id) return Boolean is
+    begin
+       if not Projects.Table (Project).Library then
+          Prj.Com.Fail ("INTERNAL ERROR: Library_Exists_For called " &
+                        "for non library project");
+          return False;
+ 
+       else
+          declare
+             Lib_Dir : constant String :=
+               Get_Name_String (Projects.Table (Project).Library_Dir);
+             Lib_Name : constant String :=
+               Get_Name_String (Projects.Table (Project).Library_Name);
+ 
+          begin
+             if Projects.Table (Project).Library_Kind = Static then
+                return Is_Regular_File
+                  (Lib_Dir & Directory_Separator & "lib" &
+                   Fil.Ext_To (Lib_Name, Archive_Ext));
+ 
+             else
+                return Is_Regular_File
+                  (Lib_Dir & Directory_Separator & "lib" &
+                   Fil.Ext_To (Lib_Name, DLL_Ext));
+             end if;
+          end;
+       end if;
+    end Library_Exists_For;
+ 
+    ---------------------------
+    -- Library_File_Name_For --
+    ---------------------------
+ 
+    function Library_File_Name_For (Project : Project_Id) return Name_Id is
+    begin
+       if not Projects.Table (Project).Library then
+          Prj.Com.Fail ("INTERNAL ERROR: Library_File_Name_For called " &
+                        "for non library project");
+          return No_Name;
+ 
+       else
+          declare
+             Lib_Name : constant String :=
+               Get_Name_String (Projects.Table (Project).Library_Name);
+ 
+          begin
+             Name_Len := 3;
+             Name_Buffer (1 .. Name_Len) := "lib";
+ 
+             if Projects.Table (Project).Library_Kind = Static then
+                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, Archive_Ext));
+ 
+             else
+                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, DLL_Ext));
+             end if;
+ 
+             return Name_Find;
+          end;
+       end if;
+    end Library_File_Name_For;
+ 
+    ----------------
+    -- Object_Ext --
+    ----------------
+ 
+    function Object_Ext return String is
+    begin
+       return "o";
+    end Object_Ext;
+ 
+    ----------------
+    -- PIC_Option --
+    ----------------
+ 
+    function PIC_Option return String is
+    begin
+       return "-fPIC";
+    end PIC_Option;
+ 
+    -----------------------------------------------
+    -- Standalone_Library_Auto_Init_Is_Supported --
+    -----------------------------------------------
+ 
+    function Standalone_Library_Auto_Init_Is_Supported return Boolean is
+    begin
+       return True;
+    end Standalone_Library_Auto_Init_Is_Supported;
+ 
+    ---------------------------
+    -- Support_For_Libraries --
+    ---------------------------
+ 
+    function Support_For_Libraries return Library_Support is
+    begin
+       return Full;
+    end Support_For_Libraries;
+ 
+ end MLib.Tgt;
diff -Nrcpad gcc-3.4.3/gcc/ada/mlib-tgt-tru64.adb gcc-4.0.0/gcc/ada/mlib-tgt-tru64.adb
*** gcc-3.4.3/gcc/ada/mlib-tgt-tru64.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/mlib-tgt-tru64.adb	Wed Oct 27 12:27:51 2004
***************
*** 0 ****
--- 1,380 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                             M L I B . T G T                              --
+ --                             (True64 Version)                             --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --              Copyright (C) 2002-2004 Free Software Foundation, Inc.      --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package provides a set of target dependent routines to build
+ --  static, dynamic and shared libraries.
+ 
+ --  This is the True64 version of the body.
+ 
+ with MLib.Fil;
+ with MLib.Utl;
+ with Namet;  use Namet;
+ with Opt;
+ with Output; use Output;
+ with Prj.Com;
+ with System;
+ 
+ package body MLib.Tgt is
+ 
+    use GNAT;
+    use MLib;
+ 
+    Expect_Unresolved : aliased String := "-Wl,-expect_unresolved,*";
+ 
+    No_Arguments        : aliased Argument_List         := (1 .. 0 => null);
+    Empty_Argument_List : constant Argument_List_Access := No_Arguments'Access;
+ 
+    Wl_Init_String : aliased String         := "-Wl,-init";
+    Wl_Init        : constant String_Access := Wl_Init_String'Access;
+    Wl_Fini_String : aliased String         := "-Wl,-fini";
+    Wl_Fini        : constant String_Access := Wl_Fini_String'Access;
+ 
+    Init_Fini_List :  constant Argument_List_Access :=
+                        new Argument_List'(1 => Wl_Init,
+                                           2 => null,
+                                           3 => Wl_Fini,
+                                           4 => null);
+    --  Used to put switches for automatic elaboration/finalization
+ 
+    ---------------------
+    -- Archive_Builder --
+    ---------------------
+ 
+    function Archive_Builder return String is
+    begin
+       return "ar";
+    end Archive_Builder;
+ 
+    -----------------------------
+    -- Archive_Builder_Options --
+    -----------------------------
+ 
+    function Archive_Builder_Options return String_List_Access is
+    begin
+       return new String_List'(1 => new String'("cr"));
+    end Archive_Builder_Options;
+ 
+    -----------------
+    -- Archive_Ext --
+    -----------------
+ 
+    function Archive_Ext return  String is
+    begin
+       return "a";
+    end Archive_Ext;
+ 
+    ---------------------
+    -- Archive_Indexer --
+    ---------------------
+ 
+    function Archive_Indexer return String is
+    begin
+       return "ranlib";
+    end Archive_Indexer;
+ 
+    -----------------------------
+    -- Archive_Indexer_Options --
+    -----------------------------
+ 
+    function Archive_Indexer_Options return String_List_Access is
+    begin
+       return new String_List (1 .. 0);
+    end Archive_Indexer_Options;
+ 
+    ---------------------------
+    -- Build_Dynamic_Library --
+    ---------------------------
+ 
+    procedure Build_Dynamic_Library
+      (Ofiles       : Argument_List;
+       Foreign      : Argument_List;
+       Afiles       : Argument_List;
+       Options      : Argument_List;
+       Options_2    : Argument_List;
+       Interfaces   : Argument_List;
+       Lib_Filename : String;
+       Lib_Dir      : String;
+       Symbol_Data  : Symbol_Record;
+       Driver_Name  : Name_Id := No_Name;
+       Lib_Version  : String  := "";
+       Auto_Init    : Boolean := False)
+    is
+       pragma Unreferenced (Foreign);
+       pragma Unreferenced (Afiles);
+       pragma Unreferenced (Interfaces);
+       pragma Unreferenced (Symbol_Data);
+ 
+       Lib_File : constant String :=
+                    Lib_Dir & Directory_Separator & "lib" &
+                    Fil.Ext_To (Lib_Filename, DLL_Ext);
+ 
+       Version_Arg          : String_Access;
+       Symbolic_Link_Needed : Boolean := False;
+ 
+       Init_Fini : Argument_List_Access := Empty_Argument_List;
+ 
+    begin
+       if Opt.Verbose_Mode then
+          Write_Str ("building relocatable shared library ");
+          Write_Line (Lib_File);
+       end if;
+ 
+       --  If specified, add automatic elaboration/finalization
+ 
+       if Auto_Init then
+          Init_Fini := Init_Fini_List;
+          Init_Fini (2) := new String'("-Wl," & Lib_Filename & "init");
+          Init_Fini (4) := new String'("-Wl," & Lib_Filename & "final");
+       end if;
+ 
+       if Lib_Version = "" then
+          Utl.Gcc
+            (Output_File => Lib_File,
+             Objects     => Ofiles,
+             Options     =>
+               Options &
+               Expect_Unresolved'Access &
+               Init_Fini.all,
+             Options_2   => Options_2,
+             Driver_Name => Driver_Name);
+ 
+       else
+          Version_Arg := new String'("-Wl,-soname," & Lib_Version);
+ 
+          if Is_Absolute_Path (Lib_Version) then
+             Utl.Gcc
+               (Output_File => Lib_Version,
+                Objects     => Ofiles,
+                Options     =>
+                  Options &
+                  Version_Arg &
+                  Expect_Unresolved'Access &
+                  Init_Fini.all,
+                Options_2   => Options_2,
+                Driver_Name => Driver_Name);
+             Symbolic_Link_Needed := Lib_Version /= Lib_File;
+ 
+          else
+             Utl.Gcc
+               (Output_File => Lib_Dir & Directory_Separator & Lib_Version,
+                Objects     => Ofiles,
+                Options     =>
+                  Options &
+                  Version_Arg &
+                  Expect_Unresolved'Access &
+                  Init_Fini.all,
+                Options_2   => Options_2,
+                Driver_Name => Driver_Name);
+             Symbolic_Link_Needed :=
+               Lib_Dir & Directory_Separator & Lib_Version /= Lib_File;
+          end if;
+ 
+          if Symbolic_Link_Needed then
+             declare
+                Success : Boolean;
+                Oldpath : String (1 .. Lib_Version'Length + 1);
+                Newpath : String (1 .. Lib_File'Length + 1);
+ 
+                Result : Integer;
+                pragma Unreferenced (Result);
+ 
+                function Symlink
+                  (Oldpath : System.Address;
+                   Newpath : System.Address)
+                   return    Integer;
+                pragma Import (C, Symlink, "__gnat_symlink");
+ 
+             begin
+                Oldpath (1 .. Lib_Version'Length) := Lib_Version;
+                Oldpath (Oldpath'Last)            := ASCII.NUL;
+                Newpath (1 .. Lib_File'Length)    := Lib_File;
+                Newpath (Newpath'Last)            := ASCII.NUL;
+ 
+                Delete_File (Lib_File, Success);
+ 
+                Result := Symlink (Oldpath'Address, Newpath'Address);
+             end;
+          end if;
+       end if;
+    end Build_Dynamic_Library;
+ 
+    -------------
+    -- DLL_Ext --
+    -------------
+ 
+    function DLL_Ext return String is
+    begin
+       return "so";
+    end DLL_Ext;
+ 
+    --------------------
+    -- Dynamic_Option --
+    --------------------
+ 
+    function Dynamic_Option return String is
+    begin
+       return "-shared";
+    end Dynamic_Option;
+ 
+    -------------------
+    -- Is_Object_Ext --
+    -------------------
+ 
+    function Is_Object_Ext (Ext : String) return Boolean is
+    begin
+       return Ext = ".o";
+    end Is_Object_Ext;
+ 
+    --------------
+    -- Is_C_Ext --
+    --------------
+ 
+    function Is_C_Ext (Ext : String) return Boolean is
+    begin
+       return Ext = ".c";
+    end Is_C_Ext;
+ 
+    --------------------
+    -- Is_Archive_Ext --
+    --------------------
+ 
+    function Is_Archive_Ext (Ext : String) return Boolean is
+    begin
+       return Ext = ".a" or else Ext = ".so";
+    end Is_Archive_Ext;
+ 
+    -------------
+    -- Libgnat --
+    -------------
+ 
+    function Libgnat return String is
+    begin
+       return "libgnat.a";
+    end Libgnat;
+ 
+    ------------------------
+    -- Library_Exists_For --
+    ------------------------
+ 
+    function Library_Exists_For (Project : Project_Id) return Boolean is
+    begin
+       if not Projects.Table (Project).Library then
+          Prj.Com.Fail ("INTERNAL ERROR: Library_Exists_For called " &
+                        "for non library project");
+          return False;
+ 
+       else
+          declare
+             Lib_Dir : constant String :=
+               Get_Name_String (Projects.Table (Project).Library_Dir);
+             Lib_Name : constant String :=
+               Get_Name_String (Projects.Table (Project).Library_Name);
+ 
+          begin
+             if Projects.Table (Project).Library_Kind = Static then
+                return Is_Regular_File
+                  (Lib_Dir & Directory_Separator & "lib" &
+                   Fil.Ext_To (Lib_Name, Archive_Ext));
+ 
+             else
+                return Is_Regular_File
+                  (Lib_Dir & Directory_Separator & "lib" &
+                   Fil.Ext_To (Lib_Name, DLL_Ext));
+             end if;
+          end;
+       end if;
+    end Library_Exists_For;
+ 
+    ---------------------------
+    -- Library_File_Name_For --
+    ---------------------------
+ 
+    function Library_File_Name_For (Project : Project_Id) return Name_Id is
+    begin
+       if not Projects.Table (Project).Library then
+          Prj.Com.Fail ("INTERNAL ERROR: Library_File_Name_For called " &
+                        "for non library project");
+          return No_Name;
+ 
+       else
+          declare
+             Lib_Name : constant String :=
+               Get_Name_String (Projects.Table (Project).Library_Name);
+ 
+          begin
+             Name_Len := 3;
+             Name_Buffer (1 .. Name_Len) := "lib";
+ 
+             if Projects.Table (Project).Library_Kind = Static then
+                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, Archive_Ext));
+ 
+             else
+                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, DLL_Ext));
+             end if;
+ 
+             return Name_Find;
+          end;
+       end if;
+    end Library_File_Name_For;
+ 
+    ----------------
+    -- Object_Ext --
+    ----------------
+ 
+    function Object_Ext return String is
+    begin
+       return "o";
+    end Object_Ext;
+ 
+    ----------------
+    -- PIC_Option --
+    ----------------
+ 
+    function PIC_Option return String is
+    begin
+       return "";
+    end PIC_Option;
+ 
+    -----------------------------------------------
+    -- Standalone_Library_Auto_Init_Is_Supported --
+    -----------------------------------------------
+ 
+    function Standalone_Library_Auto_Init_Is_Supported return Boolean is
+    begin
+       return True;
+    end Standalone_Library_Auto_Init_Is_Supported;
+ 
+    ---------------------------
+    -- Support_For_Libraries --
+    ---------------------------
+ 
+    function Support_For_Libraries return Library_Support is
+    begin
+       return Full;
+    end Support_For_Libraries;
+ 
+ end MLib.Tgt;
diff -Nrcpad gcc-3.4.3/gcc/ada/mlib-tgt-vms-alpha.adb gcc-4.0.0/gcc/ada/mlib-tgt-vms-alpha.adb
*** gcc-3.4.3/gcc/ada/mlib-tgt-vms-alpha.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/mlib-tgt-vms-alpha.adb	Wed Oct 27 12:27:52 2004
***************
*** 0 ****
--- 1,704 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                             M L I B . T G T                              --
+ --                           (Alpha VMS Version)                            --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 2003-2004, Free Software Foundation, Inc.         --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the Alpha VMS version of the body
+ 
+ with Ada.Characters.Handling; use Ada.Characters.Handling;
+ 
+ with GNAT.Directory_Operations;  use GNAT.Directory_Operations;
+ with GNAT.OS_Lib;                use GNAT.OS_Lib;
+ 
+ with MLib.Fil;
+ with MLib.Utl;
+ with Namet;             use Namet;
+ with Opt;               use Opt;
+ with Output;            use Output;
+ with Prj.Com;
+ with System;            use System;
+ with System.Case_Util;  use System.Case_Util;
+ 
+ package body MLib.Tgt is
+ 
+    use GNAT;
+ 
+    Empty_Argument_List : aliased Argument_List := (1 .. 0 => null);
+    Additional_Objects  : Argument_List_Access := Empty_Argument_List'Access;
+    --  Used to add the generated auto-init object files for auto-initializing
+    --  stand-alone libraries.
+ 
+    Macro_Name   : constant String := "mcr gnu:[bin]gcc -c -x assembler";
+    --  The name of the command to invoke the macro-assembler
+ 
+    VMS_Options : Argument_List := (1 .. 1 => null);
+ 
+    Gnatsym_Name : constant String := "gnatsym";
+ 
+    Gnatsym_Path : String_Access;
+ 
+    Arguments : Argument_List_Access := null;
+    Last_Argument : Natural := 0;
+ 
+    Success : Boolean := False;
+ 
+    Shared_Libgcc : aliased String := "-shared-libgcc";
+ 
+    No_Shared_Libgcc_Switch : aliased Argument_List := (1 .. 0 => null);
+    Shared_Libgcc_Switch    : aliased Argument_List :=
+                                (1 => Shared_Libgcc'Access);
+    Link_With_Shared_Libgcc : Argument_List_Access :=
+                                No_Shared_Libgcc_Switch'Access;
+ 
+    ------------------------------
+    -- Target dependent section --
+    ------------------------------
+ 
+    function Popen (Command, Mode : System.Address) return System.Address;
+    pragma Import (C, Popen);
+ 
+    function Pclose (File : System.Address) return Integer;
+    pragma Import (C, Pclose);
+ 
+    ---------------------
+    -- Archive_Builder --
+    ---------------------
+ 
+    function Archive_Builder return String is
+    begin
+       return "ar";
+    end Archive_Builder;
+ 
+    -----------------------------
+    -- Archive_Builder_Options --
+    -----------------------------
+ 
+    function Archive_Builder_Options return String_List_Access is
+    begin
+       return new String_List'(1 => new String'("cr"));
+    end Archive_Builder_Options;
+ 
+    -----------------
+    -- Archive_Ext --
+    -----------------
+ 
+    function Archive_Ext return String is
+    begin
+       return "olb";
+    end Archive_Ext;
+ 
+    ---------------------
+    -- Archive_Indexer --
+    ---------------------
+ 
+    function Archive_Indexer return String is
+    begin
+       return "ranlib";
+    end Archive_Indexer;
+ 
+    -----------------------------
+    -- Archive_Indexer_Options --
+    -----------------------------
+ 
+    function Archive_Indexer_Options return String_List_Access is
+    begin
+       return new String_List (1 .. 0);
+    end Archive_Indexer_Options;
+ 
+    ---------------------------
+    -- Build_Dynamic_Library --
+    ---------------------------
+ 
+    procedure Build_Dynamic_Library
+      (Ofiles       : Argument_List;
+       Foreign      : Argument_List;
+       Afiles       : Argument_List;
+       Options      : Argument_List;
+       Options_2    : Argument_List;
+       Interfaces   : Argument_List;
+       Lib_Filename : String;
+       Lib_Dir      : String;
+       Symbol_Data  : Symbol_Record;
+       Driver_Name  : Name_Id := No_Name;
+       Lib_Version  : String  := "";
+       Auto_Init    : Boolean := False)
+    is
+       pragma Unreferenced (Foreign);
+       pragma Unreferenced (Afiles);
+ 
+       Lib_File : constant String :=
+                    Lib_Dir & Directory_Separator & "lib" &
+                    Fil.Ext_To (Lib_Filename, DLL_Ext);
+ 
+       Opts      : Argument_List := Options;
+       Last_Opt  : Natural       := Opts'Last;
+       Opts2     : Argument_List (Options'Range);
+       Last_Opt2 : Natural       := Opts2'First - 1;
+ 
+       Inter : constant Argument_List := Interfaces;
+ 
+       function Is_Interface (Obj_File : String) return Boolean;
+       --  For a Stand-Alone Library, returns True if Obj_File is the object
+       --  file name of an interface of the SAL. For other libraries, always
+       --  return True.
+ 
+       function Option_File_Name return String;
+       --  Returns Symbol_File, if not empty. Otherwise, returns "symvec.opt"
+ 
+       function Version_String return String;
+       --  Returns Lib_Version if not empty, otherwise returns "1".
+       --  Fails gnatmake if Lib_Version is not the image of a positive number.
+ 
+       ------------------
+       -- Is_Interface --
+       ------------------
+ 
+       function Is_Interface (Obj_File : String) return Boolean is
+          ALI : constant String :=
+                  Fil.Ext_To
+                   (Filename => To_Lower (Base_Name (Obj_File)),
+                    New_Ext  => "ali");
+ 
+       begin
+          if Inter'Length = 0 then
+             return True;
+ 
+          elsif ALI'Length > 2 and then
+                ALI (ALI'First .. ALI'First + 1) = "b$"
+          then
+             return True;
+ 
+          else
+             for J in Inter'Range loop
+                if Inter (J).all = ALI then
+                   return True;
+                end if;
+             end loop;
+ 
+             return False;
+          end if;
+       end Is_Interface;
+ 
+       ----------------------
+       -- Option_File_Name --
+       ----------------------
+ 
+       function Option_File_Name return String is
+       begin
+          if Symbol_Data.Symbol_File = No_Name then
+             return "symvec.opt";
+          else
+             Get_Name_String (Symbol_Data.Symbol_File);
+             To_Lower (Name_Buffer (1 .. Name_Len));
+             return Name_Buffer (1 .. Name_Len);
+          end if;
+       end Option_File_Name;
+ 
+       --------------------
+       -- Version_String --
+       --------------------
+ 
+       function Version_String return String is
+          Version : Integer := 0;
+       begin
+          if Lib_Version = "" then
+             return "1";
+ 
+          else
+             begin
+                Version := Integer'Value (Lib_Version);
+ 
+                if Version <= 0 then
+                   raise Constraint_Error;
+                end if;
+ 
+                return Lib_Version;
+ 
+             exception
+                when Constraint_Error =>
+                   Fail ("illegal version """, Lib_Version,
+                         """ (on VMS version must be a positive number)");
+                   return "";
+             end;
+          end if;
+       end Version_String;
+ 
+       Opt_File_Name  : constant String := Option_File_Name;
+       Version        : constant String := Version_String;
+       For_Linker_Opt : String_Access;
+ 
+    --  Start of processing for Build_Dynamic_Library
+ 
+    begin
+       --  Invoke gcc with -shared-libgcc, but only for GCC 3 or higher
+ 
+       if GCC_Version >= 3 then
+          Link_With_Shared_Libgcc := Shared_Libgcc_Switch'Access;
+       else
+          Link_With_Shared_Libgcc := No_Shared_Libgcc_Switch'Access;
+       end if;
+ 
+       --  If option file name does not ends with ".opt", append "/OPTIONS"
+       --  to its specification for the VMS linker.
+ 
+       if Opt_File_Name'Length > 4
+         and then
+           Opt_File_Name (Opt_File_Name'Last - 3 .. Opt_File_Name'Last) = ".opt"
+       then
+          For_Linker_Opt := new String'("--for-linker=" & Opt_File_Name);
+       else
+          For_Linker_Opt :=
+            new String'("--for-linker=" & Opt_File_Name & "/OPTIONS");
+       end if;
+ 
+       VMS_Options (VMS_Options'First) := For_Linker_Opt;
+ 
+       for J in Inter'Range loop
+          To_Lower (Inter (J).all);
+       end loop;
+ 
+       --  "gnatsym" is necessary for building the option file
+ 
+       if Gnatsym_Path = null then
+          Gnatsym_Path := OS_Lib.Locate_Exec_On_Path (Gnatsym_Name);
+ 
+          if Gnatsym_Path = null then
+             Fail (Gnatsym_Name, " not found in path");
+          end if;
+       end if;
+ 
+       --  For auto-initialization of a stand-alone library, we create
+       --  a macro-assembly file and we invoke the macro-assembler.
+ 
+       if Auto_Init then
+          declare
+             Macro_File_Name : constant String := Lib_Filename & "$init.asm";
+             Macro_File      : File_Descriptor;
+             Init_Proc       : String := Lib_Filename & "INIT";
+             Popen_Result    : System.Address;
+             Pclose_Result   : Integer;
+             Len             : Natural;
+             OK              : Boolean := True;
+ 
+             Command  : constant String :=
+                          Macro_Name & " " & Macro_File_Name & ASCII.NUL;
+             --  The command to invoke the assembler on the generated auto-init
+             --  assembly file.
+ 
+             Mode : constant String := "r" & ASCII.NUL;
+             --  The mode for the invocation of Popen
+ 
+          begin
+             To_Upper (Init_Proc);
+ 
+             if Verbose_Mode then
+                Write_Str ("Creating auto-init assembly file """);
+                Write_Str (Macro_File_Name);
+                Write_Line ("""");
+             end if;
+ 
+             --  Create and write the auto-init assembly file
+ 
+             declare
+                First_Line : constant String :=
+                               ASCII.HT & ".section LIB$INITIALIZE,GBL,NOWRT" &
+                ASCII.LF;
+                Second_Line : constant String :=
+                                ASCII.HT & ".long " & Init_Proc & ASCII.LF;
+                --  First and second lines of the auto-init assembly file
+ 
+             begin
+                Macro_File := Create_File (Macro_File_Name, Text);
+                OK := Macro_File /= Invalid_FD;
+ 
+                if OK then
+                   Len := Write
+                     (Macro_File, First_Line (First_Line'First)'Address,
+                      First_Line'Length);
+                   OK := Len = First_Line'Length;
+                end if;
+ 
+                if OK then
+                   Len := Write
+                     (Macro_File, Second_Line (Second_Line'First)'Address,
+                      Second_Line'Length);
+                   OK := Len = Second_Line'Length;
+                end if;
+ 
+                if OK then
+                   Close (Macro_File, OK);
+                end if;
+ 
+                if not OK then
+                   Fail ("creation of auto-init assembly file """,
+                         Macro_File_Name, """ failed");
+                end if;
+             end;
+ 
+             --  Invoke the macro-assembler
+ 
+             if Verbose_Mode then
+                Write_Str ("Assembling auto-init assembly file """);
+                Write_Str (Macro_File_Name);
+                Write_Line ("""");
+             end if;
+ 
+             Popen_Result := Popen (Command (Command'First)'Address,
+                                    Mode (Mode'First)'Address);
+ 
+             if Popen_Result = Null_Address then
+                Fail ("assembly of auto-init assembly file """,
+                      Macro_File_Name, """ failed");
+             end if;
+ 
+             --  Wait for the end of execution of the macro-assembler
+ 
+             Pclose_Result := Pclose (Popen_Result);
+ 
+             if Pclose_Result < 0 then
+                Fail ("assembly of auto init assembly file """,
+                      Macro_File_Name, """ failed");
+             end if;
+ 
+             --  Add the generated object file to the list of objects to be
+             --  included in the library.
+ 
+             Additional_Objects :=
+               new Argument_List'
+                 (1 => new String'(Lib_Filename & "$init.obj"));
+          end;
+       end if;
+ 
+       --  Allocate the argument list and put the symbol file name, the
+       --  reference (if any) and the policy (if not autonomous).
+ 
+       Arguments := new Argument_List (1 .. Ofiles'Length + 8);
+ 
+       Last_Argument := 0;
+ 
+       --  Verbosity
+ 
+       if Verbose_Mode then
+          Last_Argument := Last_Argument + 1;
+          Arguments (Last_Argument) := new String'("-v");
+       end if;
+ 
+       --  Version number (major ID)
+ 
+       if Lib_Version /= "" then
+          Last_Argument := Last_Argument + 1;
+          Arguments (Last_Argument) := new String'("-V");
+          Last_Argument := Last_Argument + 1;
+          Arguments (Last_Argument) := new String'(Version);
+       end if;
+ 
+       --  Symbol file
+ 
+       Last_Argument := Last_Argument + 1;
+       Arguments (Last_Argument) := new String'("-s");
+       Last_Argument := Last_Argument + 1;
+       Arguments (Last_Argument) := new String'(Opt_File_Name);
+ 
+       --  Reference Symbol File
+ 
+       if Symbol_Data.Reference /= No_Name then
+          Last_Argument := Last_Argument + 1;
+          Arguments (Last_Argument) := new String'("-r");
+          Last_Argument := Last_Argument + 1;
+          Arguments (Last_Argument) :=
+            new String'(Get_Name_String (Symbol_Data.Reference));
+       end if;
+ 
+       --  Policy
+ 
+       case Symbol_Data.Symbol_Policy is
+          when Autonomous =>
+             null;
+ 
+          when Compliant =>
+             Last_Argument := Last_Argument + 1;
+             Arguments (Last_Argument) := new String'("-c");
+ 
+          when Controlled =>
+             Last_Argument := Last_Argument + 1;
+             Arguments (Last_Argument) := new String'("-C");
+ 
+          when Restricted =>
+             Last_Argument := Last_Argument + 1;
+             Arguments (Last_Argument) := new String'("-R");
+       end case;
+ 
+       --  Add each relevant object file
+ 
+       for Index in Ofiles'Range loop
+          if Is_Interface (Ofiles (Index).all) then
+             Last_Argument := Last_Argument + 1;
+             Arguments (Last_Argument) := new String'(Ofiles (Index).all);
+          end if;
+       end loop;
+ 
+       --  Spawn gnatsym
+ 
+       Spawn (Program_Name => Gnatsym_Path.all,
+              Args         => Arguments (1 .. Last_Argument),
+              Success      => Success);
+ 
+       if not Success then
+          Fail ("unable to create symbol file for library """,
+                Lib_Filename, """");
+       end if;
+ 
+       Free (Arguments);
+ 
+       --  Move all the -l switches from Opts to Opts2
+ 
+       declare
+          Index : Natural := Opts'First;
+          Opt   : String_Access;
+ 
+       begin
+          while Index <= Last_Opt loop
+             Opt := Opts (Index);
+ 
+             if Opt'Length > 2 and then
+               Opt (Opt'First .. Opt'First + 1) = "-l"
+             then
+                if Index < Last_Opt then
+                   Opts (Index .. Last_Opt - 1) :=
+                     Opts (Index + 1 .. Last_Opt);
+                end if;
+ 
+                Last_Opt := Last_Opt - 1;
+ 
+                Last_Opt2 := Last_Opt2 + 1;
+                Opts2 (Last_Opt2) := Opt;
+ 
+             else
+                Index := Index + 1;
+             end if;
+          end loop;
+       end;
+ 
+       --  Invoke gcc to build the library
+ 
+       Utl.Gcc
+         (Output_File => Lib_File,
+          Objects     => Ofiles & Additional_Objects.all,
+          Options     => VMS_Options,
+          Options_2   => Link_With_Shared_Libgcc.all &
+                         Opts (Opts'First .. Last_Opt) &
+                         Opts2 (Opts2'First .. Last_Opt2) & Options_2,
+          Driver_Name => Driver_Name);
+ 
+       --  The auto-init object file need to be deleted, so that it will not
+       --  be included in the library as a regular object file, otherwise
+       --  it will be included twice when the library will be built next
+       --  time, which may lead to errors.
+ 
+       if Auto_Init then
+          declare
+             Auto_Init_Object_File_Name : constant String :=
+                                            Lib_Filename & "$init.obj";
+             Disregard : Boolean;
+ 
+          begin
+             if Verbose_Mode then
+                Write_Str ("deleting auto-init object file """);
+                Write_Str (Auto_Init_Object_File_Name);
+                Write_Line ("""");
+             end if;
+ 
+             Delete_File (Auto_Init_Object_File_Name, Success => Disregard);
+          end;
+       end if;
+    end Build_Dynamic_Library;
+ 
+    -------------
+    -- DLL_Ext --
+    -------------
+ 
+    function DLL_Ext return String is
+    begin
+       return "exe";
+    end DLL_Ext;
+ 
+    --------------------
+    -- Dynamic_Option --
+    --------------------
+ 
+    function Dynamic_Option return String is
+    begin
+       return "-shared";
+    end Dynamic_Option;
+ 
+    -------------------
+    -- Is_Object_Ext --
+    -------------------
+ 
+    function Is_Object_Ext (Ext : String) return Boolean is
+    begin
+       return Ext = ".obj";
+    end Is_Object_Ext;
+ 
+    --------------
+    -- Is_C_Ext --
+    --------------
+ 
+    function Is_C_Ext (Ext : String) return Boolean is
+    begin
+       return Ext = ".c";
+    end Is_C_Ext;
+ 
+    --------------------
+    -- Is_Archive_Ext --
+    --------------------
+ 
+    function Is_Archive_Ext (Ext : String) return Boolean is
+    begin
+       return Ext = ".olb" or else Ext = ".exe";
+    end Is_Archive_Ext;
+ 
+    -------------
+    -- Libgnat --
+    -------------
+ 
+    function Libgnat return String is
+       Libgnat_A : constant String := "libgnat.a";
+       Libgnat_Olb : constant String := "libgnat.olb";
+ 
+    begin
+       Name_Len := Libgnat_A'Length;
+       Name_Buffer (1 .. Name_Len) := Libgnat_A;
+ 
+       if Osint.Find_File (Name_Enter, Osint.Library) /= No_File then
+          return Libgnat_A;
+ 
+       else
+          return Libgnat_Olb;
+       end if;
+    end Libgnat;
+ 
+    ------------------------
+    -- Library_Exists_For --
+    ------------------------
+ 
+    function Library_Exists_For (Project : Project_Id) return Boolean is
+    begin
+       if not Projects.Table (Project).Library then
+          Fail ("INTERNAL ERROR: Library_Exists_For called " &
+                "for non library project");
+          return False;
+ 
+       else
+          declare
+             Lib_Dir : constant String :=
+               Get_Name_String (Projects.Table (Project).Library_Dir);
+             Lib_Name : constant String :=
+               Get_Name_String (Projects.Table (Project).Library_Name);
+ 
+          begin
+             if Projects.Table (Project).Library_Kind = Static then
+                return Is_Regular_File
+                  (Lib_Dir & Directory_Separator & "lib" &
+                   Fil.Ext_To (Lib_Name, Archive_Ext));
+ 
+             else
+                return Is_Regular_File
+                  (Lib_Dir & Directory_Separator & "lib" &
+                   Fil.Ext_To (Lib_Name, DLL_Ext));
+             end if;
+          end;
+       end if;
+    end Library_Exists_For;
+ 
+    ---------------------------
+    -- Library_File_Name_For --
+    ---------------------------
+ 
+    function Library_File_Name_For (Project : Project_Id) return Name_Id is
+    begin
+       if not Projects.Table (Project).Library then
+          Prj.Com.Fail ("INTERNAL ERROR: Library_File_Name_For called " &
+                        "for non library project");
+          return No_Name;
+ 
+       else
+          declare
+             Lib_Name : constant String :=
+               Get_Name_String (Projects.Table (Project).Library_Name);
+ 
+          begin
+             Name_Len := 3;
+             Name_Buffer (1 .. Name_Len) := "lib";
+ 
+             if Projects.Table (Project).Library_Kind = Static then
+                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, Archive_Ext));
+ 
+             else
+                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, DLL_Ext));
+             end if;
+ 
+             return Name_Find;
+          end;
+       end if;
+    end Library_File_Name_For;
+ 
+    ----------------
+    -- Object_Ext --
+    ----------------
+ 
+    function Object_Ext return String is
+    begin
+       return "obj";
+    end Object_Ext;
+ 
+    ----------------
+    -- PIC_Option --
+    ----------------
+ 
+    function PIC_Option return String is
+    begin
+       return "";
+    end PIC_Option;
+ 
+    -----------------------------------------------
+    -- Standalone_Library_Auto_Init_Is_Supported --
+    -----------------------------------------------
+ 
+    function Standalone_Library_Auto_Init_Is_Supported return Boolean is
+    begin
+       return True;
+    end Standalone_Library_Auto_Init_Is_Supported;
+ 
+    ---------------------------
+    -- Support_For_Libraries --
+    ---------------------------
+ 
+    function Support_For_Libraries return Library_Support is
+    begin
+       return Full;
+    end Support_For_Libraries;
+ 
+ end MLib.Tgt;
diff -Nrcpad gcc-3.4.3/gcc/ada/mlib-tgt-vms-ia64.adb gcc-4.0.0/gcc/ada/mlib-tgt-vms-ia64.adb
*** gcc-3.4.3/gcc/ada/mlib-tgt-vms-ia64.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/mlib-tgt-vms-ia64.adb	Thu Feb 10 13:49:15 2005
***************
*** 0 ****
--- 1,737 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                             M L I B . T G T                              --
+ --                         (Integrity VMS Version)                          --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --            Copyright (C) 2004-2005 Free Software Foundation, Inc.        --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the Integrity VMS version of the body
+ 
+ with Ada.Characters.Handling; use Ada.Characters.Handling;
+ 
+ with GNAT.Directory_Operations;  use GNAT.Directory_Operations;
+ with GNAT.OS_Lib;                use GNAT.OS_Lib;
+ 
+ with MLib.Fil;
+ with MLib.Utl;
+ with Namet;             use Namet;
+ with Opt;               use Opt;
+ with Output;            use Output;
+ with Prj.Com;
+ with System;            use System;
+ with System.Case_Util;  use System.Case_Util;
+ 
+ package body MLib.Tgt is
+ 
+    use GNAT;
+ 
+    Empty_Argument_List : aliased Argument_List := (1 .. 0 => null);
+    Additional_Objects  : Argument_List_Access := Empty_Argument_List'Access;
+    --  Used to add the generated auto-init object files for auto-initializing
+    --  stand-alone libraries.
+ 
+    Macro_Name   : constant String := "mcr gnu:[bin]gcc -c -x assembler";
+    --  The name of the command to invoke the macro-assembler
+ 
+    VMS_Options : Argument_List := (1 .. 1 => null);
+ 
+    Gnatsym_Name : constant String := "gnatsym";
+ 
+    Gnatsym_Path : String_Access;
+ 
+    Arguments : Argument_List_Access := null;
+    Last_Argument : Natural := 0;
+ 
+    Success : Boolean := False;
+ 
+    Shared_Libgcc : aliased String := "-shared-libgcc";
+ 
+    No_Shared_Libgcc_Switch : aliased Argument_List := (1 .. 0 => null);
+    Shared_Libgcc_Switch    : aliased Argument_List :=
+                                (1 => Shared_Libgcc'Access);
+    Link_With_Shared_Libgcc : Argument_List_Access :=
+                                No_Shared_Libgcc_Switch'Access;
+ 
+    ------------------------------
+    -- Target dependent section --
+    ------------------------------
+ 
+    function Popen (Command, Mode : System.Address) return System.Address;
+    pragma Import (C, Popen, "decc$popen");
+ 
+    function Pclose (File : System.Address) return Integer;
+    pragma Import (C, Pclose, "decc$pclose");
+ 
+    ---------------------
+    -- Archive_Builder --
+    ---------------------
+ 
+    function Archive_Builder return String is
+    begin
+       return "ar";
+    end Archive_Builder;
+ 
+    -----------------------------
+    -- Archive_Builder_Options --
+    -----------------------------
+ 
+    function Archive_Builder_Options return String_List_Access is
+    begin
+       return new String_List'(1 => new String'("cr"));
+    end Archive_Builder_Options;
+ 
+    -----------------
+    -- Archive_Ext --
+    -----------------
+ 
+    function Archive_Ext return String is
+    begin
+       return "olb";
+    end Archive_Ext;
+ 
+    ---------------------
+    -- Archive_Indexer --
+    ---------------------
+ 
+    function Archive_Indexer return String is
+    begin
+       return "ranlib";
+    end Archive_Indexer;
+ 
+    -----------------------------
+    -- Archive_Indexer_Options --
+    -----------------------------
+ 
+    function Archive_Indexer_Options return String_List_Access is
+    begin
+       return new String_List (1 .. 0);
+    end Archive_Indexer_Options;
+ 
+    ---------------------------
+    -- Build_Dynamic_Library --
+    ---------------------------
+ 
+    procedure Build_Dynamic_Library
+      (Ofiles       : Argument_List;
+       Foreign      : Argument_List;
+       Afiles       : Argument_List;
+       Options      : Argument_List;
+       Options_2    : Argument_List;
+       Interfaces   : Argument_List;
+       Lib_Filename : String;
+       Lib_Dir      : String;
+       Symbol_Data  : Symbol_Record;
+       Driver_Name  : Name_Id := No_Name;
+       Lib_Version  : String  := "";
+       Auto_Init    : Boolean := False)
+    is
+       pragma Unreferenced (Foreign);
+       pragma Unreferenced (Afiles);
+ 
+       Lib_File : constant String :=
+                    Lib_Dir & Directory_Separator & "lib" &
+                    Fil.Ext_To (Lib_Filename, DLL_Ext);
+ 
+       Opts      : Argument_List := Options;
+       Last_Opt  : Natural       := Opts'Last;
+       Opts2     : Argument_List (Options'Range);
+       Last_Opt2 : Natural       := Opts2'First - 1;
+ 
+       Inter : constant Argument_List := Interfaces;
+ 
+       function Is_Interface (Obj_File : String) return Boolean;
+       --  For a Stand-Alone Library, returns True if Obj_File is the object
+       --  file name of an interface of the SAL. For other libraries, always
+       --  return True.
+ 
+       function Option_File_Name return String;
+       --  Returns Symbol_File, if not empty. Otherwise, returns "symvec.opt"
+ 
+       function Version_String return String;
+       --  Returns Lib_Version if not empty, otherwise returns "1".
+       --  Fails gnatmake if Lib_Version is not the image of a positive number.
+ 
+       ------------------
+       -- Is_Interface --
+       ------------------
+ 
+       function Is_Interface (Obj_File : String) return Boolean is
+          ALI : constant String :=
+                  Fil.Ext_To
+                   (Filename => To_Lower (Base_Name (Obj_File)),
+                    New_Ext  => "ali");
+ 
+       begin
+          if Inter'Length = 0 then
+             return True;
+ 
+          elsif ALI'Length > 2 and then
+                ALI (ALI'First .. ALI'First + 1) = "b$"
+          then
+             return True;
+ 
+          else
+             for J in Inter'Range loop
+                if Inter (J).all = ALI then
+                   return True;
+                end if;
+             end loop;
+ 
+             return False;
+          end if;
+       end Is_Interface;
+ 
+       ----------------------
+       -- Option_File_Name --
+       ----------------------
+ 
+       function Option_File_Name return String is
+       begin
+          if Symbol_Data.Symbol_File = No_Name then
+             return "symvec.opt";
+          else
+             Get_Name_String (Symbol_Data.Symbol_File);
+             To_Lower (Name_Buffer (1 .. Name_Len));
+             return Name_Buffer (1 .. Name_Len);
+          end if;
+       end Option_File_Name;
+ 
+       --------------------
+       -- Version_String --
+       --------------------
+ 
+       function Version_String return String is
+          Version : Integer := 0;
+       begin
+          if Lib_Version = "" then
+             return "1";
+ 
+          else
+             begin
+                Version := Integer'Value (Lib_Version);
+ 
+                if Version <= 0 then
+                   raise Constraint_Error;
+                end if;
+ 
+                return Lib_Version;
+ 
+             exception
+                when Constraint_Error =>
+                   Fail ("illegal version """, Lib_Version,
+                         """ (on VMS version must be a positive number)");
+                   return "";
+             end;
+          end if;
+       end Version_String;
+ 
+       Opt_File_Name  : constant String := Option_File_Name;
+       Version        : constant String := Version_String;
+       For_Linker_Opt : String_Access;
+ 
+    --  Start of processing for Build_Dynamic_Library
+ 
+    begin
+       --  Invoke gcc with -shared-libgcc, but only for GCC 3 or higher
+ 
+       if GCC_Version >= 3 then
+          Link_With_Shared_Libgcc := Shared_Libgcc_Switch'Access;
+       else
+          Link_With_Shared_Libgcc := No_Shared_Libgcc_Switch'Access;
+       end if;
+ 
+       --  Option file must end with ".opt"
+ 
+       if Opt_File_Name'Length > 4
+         and then
+           Opt_File_Name (Opt_File_Name'Last - 3 .. Opt_File_Name'Last) = ".opt"
+       then
+          For_Linker_Opt := new String'("--for-linker=" & Opt_File_Name);
+       else
+          Fail ("Options File """, Opt_File_Name, """ must end with .opt");
+       end if;
+ 
+       VMS_Options (VMS_Options'First) := For_Linker_Opt;
+ 
+       for J in Inter'Range loop
+          To_Lower (Inter (J).all);
+       end loop;
+ 
+       --  "gnatsym" is necessary for building the option file
+ 
+       if Gnatsym_Path = null then
+          Gnatsym_Path := OS_Lib.Locate_Exec_On_Path (Gnatsym_Name);
+ 
+          if Gnatsym_Path = null then
+             Fail (Gnatsym_Name, " not found in path");
+          end if;
+       end if;
+ 
+       --  For auto-initialization of a stand-alone library, we create
+       --  a macro-assembly file and we invoke the macro-assembler.
+ 
+       if Auto_Init then
+          declare
+             Macro_File_Name : constant String := Lib_Filename & "$init.asm";
+             Macro_File      : File_Descriptor;
+             Init_Proc       : String := Lib_Filename & "INIT";
+             Popen_Result    : System.Address;
+             Pclose_Result   : Integer;
+             Len             : Natural;
+             OK              : Boolean := True;
+ 
+             Command  : constant String :=
+                          Macro_Name & " " & Macro_File_Name & ASCII.NUL;
+             --  The command to invoke the assembler on the generated auto-init
+             --  assembly file.
+ 
+             Mode : constant String := "r" & ASCII.NUL;
+             --  The mode for the invocation of Popen
+ 
+          begin
+             To_Upper (Init_Proc);
+ 
+             if Verbose_Mode then
+                Write_Str ("Creating auto-init assembly file """);
+                Write_Str (Macro_File_Name);
+                Write_Line ("""");
+             end if;
+ 
+             --  Create and write the auto-init assembly file
+ 
+             declare
+                First_Line : constant String :=
+                  ASCII.HT &
+                  ".type " & Init_Proc & "#, @function" &
+                  ASCII.LF;
+                Second_Line : constant String :=
+                  ASCII.HT &
+                  ".global " & Init_Proc & "#" &
+                  ASCII.LF;
+                Third_Line : constant String :=
+                  ASCII.HT &
+                  ".global LIB$INITIALIZE#" &
+                  ASCII.LF;
+                Fourth_Line : constant String :=
+                  ASCII.HT &
+                  ".section LIB$INITIALIZE#,""a"",@progbits" &
+                  ASCII.LF;
+                Fifth_Line : constant String :=
+                  ASCII.HT &
+                  "data4 @fptr(" & Init_Proc & "#)" &
+                   ASCII.LF;
+ 
+             begin
+                Macro_File := Create_File (Macro_File_Name, Text);
+                OK := Macro_File /= Invalid_FD;
+ 
+                if OK then
+                   Len := Write
+                     (Macro_File, First_Line (First_Line'First)'Address,
+                      First_Line'Length);
+                   OK := Len = First_Line'Length;
+                end if;
+ 
+                if OK then
+                   Len := Write
+                     (Macro_File, Second_Line (Second_Line'First)'Address,
+                      Second_Line'Length);
+                   OK := Len = Second_Line'Length;
+                end if;
+ 
+                if OK then
+                   Len := Write
+                     (Macro_File, Third_Line (Third_Line'First)'Address,
+                      Third_Line'Length);
+                   OK := Len = Third_Line'Length;
+                end if;
+ 
+                if OK then
+                   Len := Write
+                     (Macro_File, Fourth_Line (Fourth_Line'First)'Address,
+                      Fourth_Line'Length);
+                   OK := Len = Fourth_Line'Length;
+                end if;
+ 
+                if OK then
+                   Len := Write
+                     (Macro_File, Fifth_Line (Fifth_Line'First)'Address,
+                      Fifth_Line'Length);
+                   OK := Len = Fifth_Line'Length;
+                end if;
+ 
+                if OK then
+                   Close (Macro_File, OK);
+                end if;
+ 
+                if not OK then
+                   Fail ("creation of auto-init assembly file """,
+                         Macro_File_Name, """ failed");
+                end if;
+             end;
+ 
+             --  Invoke the macro-assembler
+ 
+             if Verbose_Mode then
+                Write_Str ("Assembling auto-init assembly file """);
+                Write_Str (Macro_File_Name);
+                Write_Line ("""");
+             end if;
+ 
+             Popen_Result := Popen (Command (Command'First)'Address,
+                                    Mode (Mode'First)'Address);
+ 
+             if Popen_Result = Null_Address then
+                Fail ("assembly of auto-init assembly file """,
+                      Macro_File_Name, """ failed");
+             end if;
+ 
+             --  Wait for the end of execution of the macro-assembler
+ 
+             Pclose_Result := Pclose (Popen_Result);
+ 
+             if Pclose_Result < 0 then
+                Fail ("assembly of auto init assembly file """,
+                      Macro_File_Name, """ failed");
+             end if;
+ 
+             --  Add the generated object file to the list of objects to be
+             --  included in the library.
+ 
+             Additional_Objects :=
+               new Argument_List'
+                 (1 => new String'(Lib_Filename & "$init.obj"));
+          end;
+       end if;
+ 
+       --  Allocate the argument list and put the symbol file name, the
+       --  reference (if any) and the policy (if not autonomous).
+ 
+       Arguments := new Argument_List (1 .. Ofiles'Length + 8);
+ 
+       Last_Argument := 0;
+ 
+       --  Verbosity
+ 
+       if Verbose_Mode then
+          Last_Argument := Last_Argument + 1;
+          Arguments (Last_Argument) := new String'("-v");
+       end if;
+ 
+       --  Version number (major ID)
+ 
+       if Lib_Version /= "" then
+          Last_Argument := Last_Argument + 1;
+          Arguments (Last_Argument) := new String'("-V");
+          Last_Argument := Last_Argument + 1;
+          Arguments (Last_Argument) := new String'(Version);
+       end if;
+ 
+       --  Symbol file
+ 
+       Last_Argument := Last_Argument + 1;
+       Arguments (Last_Argument) := new String'("-s");
+       Last_Argument := Last_Argument + 1;
+       Arguments (Last_Argument) := new String'(Opt_File_Name);
+ 
+       --  Reference Symbol File
+ 
+       if Symbol_Data.Reference /= No_Name then
+          Last_Argument := Last_Argument + 1;
+          Arguments (Last_Argument) := new String'("-r");
+          Last_Argument := Last_Argument + 1;
+          Arguments (Last_Argument) :=
+            new String'(Get_Name_String (Symbol_Data.Reference));
+       end if;
+ 
+       --  Policy
+ 
+       case Symbol_Data.Symbol_Policy is
+          when Autonomous =>
+             null;
+ 
+          when Compliant =>
+             Last_Argument := Last_Argument + 1;
+             Arguments (Last_Argument) := new String'("-c");
+ 
+          when Controlled =>
+             Last_Argument := Last_Argument + 1;
+             Arguments (Last_Argument) := new String'("-C");
+ 
+          when Restricted =>
+             Last_Argument := Last_Argument + 1;
+             Arguments (Last_Argument) := new String'("-R");
+       end case;
+ 
+       --  Add each relevant object file
+ 
+       for Index in Ofiles'Range loop
+          if Is_Interface (Ofiles (Index).all) then
+             Last_Argument := Last_Argument + 1;
+             Arguments (Last_Argument) := new String'(Ofiles (Index).all);
+          end if;
+       end loop;
+ 
+       --  Spawn gnatsym
+ 
+       Spawn (Program_Name => Gnatsym_Path.all,
+              Args         => Arguments (1 .. Last_Argument),
+              Success      => Success);
+ 
+       if not Success then
+          Fail ("unable to create symbol file for library """,
+                Lib_Filename, """");
+       end if;
+ 
+       Free (Arguments);
+ 
+       --  Move all the -l switches from Opts to Opts2
+ 
+       declare
+          Index : Natural := Opts'First;
+          Opt   : String_Access;
+ 
+       begin
+          while Index <= Last_Opt loop
+             Opt := Opts (Index);
+ 
+             if Opt'Length > 2 and then
+               Opt (Opt'First .. Opt'First + 1) = "-l"
+             then
+                if Index < Last_Opt then
+                   Opts (Index .. Last_Opt - 1) :=
+                     Opts (Index + 1 .. Last_Opt);
+                end if;
+ 
+                Last_Opt := Last_Opt - 1;
+ 
+                Last_Opt2 := Last_Opt2 + 1;
+                Opts2 (Last_Opt2) := Opt;
+ 
+             else
+                Index := Index + 1;
+             end if;
+          end loop;
+       end;
+ 
+       --  Invoke gcc to build the library
+ 
+       Utl.Gcc
+         (Output_File => Lib_File,
+          Objects     => Ofiles & Additional_Objects.all,
+          Options     => VMS_Options,
+          Options_2   => Link_With_Shared_Libgcc.all &
+                         Opts (Opts'First .. Last_Opt) &
+                         Opts2 (Opts2'First .. Last_Opt2) & Options_2,
+          Driver_Name => Driver_Name);
+ 
+       --  The auto-init object file need to be deleted, so that it will not
+       --  be included in the library as a regular object file, otherwise
+       --  it will be included twice when the library will be built next
+       --  time, which may lead to errors.
+ 
+       if Auto_Init then
+          declare
+             Auto_Init_Object_File_Name : constant String :=
+                                            Lib_Filename & "$init.obj";
+             Disregard : Boolean;
+ 
+          begin
+             if Verbose_Mode then
+                Write_Str ("deleting auto-init object file """);
+                Write_Str (Auto_Init_Object_File_Name);
+                Write_Line ("""");
+             end if;
+ 
+             Delete_File (Auto_Init_Object_File_Name, Success => Disregard);
+          end;
+       end if;
+    end Build_Dynamic_Library;
+ 
+    -------------
+    -- DLL_Ext --
+    -------------
+ 
+    function DLL_Ext return String is
+    begin
+       return "exe";
+    end DLL_Ext;
+ 
+    --------------------
+    -- Dynamic_Option --
+    --------------------
+ 
+    function Dynamic_Option return String is
+    begin
+       return "-shared";
+    end Dynamic_Option;
+ 
+    -------------------
+    -- Is_Object_Ext --
+    -------------------
+ 
+    function Is_Object_Ext (Ext : String) return Boolean is
+    begin
+       return Ext = ".obj";
+    end Is_Object_Ext;
+ 
+    --------------
+    -- Is_C_Ext --
+    --------------
+ 
+    function Is_C_Ext (Ext : String) return Boolean is
+    begin
+       return Ext = ".c";
+    end Is_C_Ext;
+ 
+    --------------------
+    -- Is_Archive_Ext --
+    --------------------
+ 
+    function Is_Archive_Ext (Ext : String) return Boolean is
+    begin
+       return Ext = ".olb" or else Ext = ".exe";
+    end Is_Archive_Ext;
+ 
+    -------------
+    -- Libgnat --
+    -------------
+ 
+    function Libgnat return String is
+       Libgnat_A : constant String := "libgnat.a";
+       Libgnat_Olb : constant String := "libgnat.olb";
+ 
+    begin
+       Name_Len := Libgnat_A'Length;
+       Name_Buffer (1 .. Name_Len) := Libgnat_A;
+ 
+       if Osint.Find_File (Name_Enter, Osint.Library) /= No_File then
+          return Libgnat_A;
+ 
+       else
+          return Libgnat_Olb;
+       end if;
+    end Libgnat;
+ 
+    ------------------------
+    -- Library_Exists_For --
+    ------------------------
+ 
+    function Library_Exists_For (Project : Project_Id) return Boolean is
+    begin
+       if not Projects.Table (Project).Library then
+          Fail ("INTERNAL ERROR: Library_Exists_For called " &
+                "for non library project");
+          return False;
+ 
+       else
+          declare
+             Lib_Dir : constant String :=
+               Get_Name_String (Projects.Table (Project).Library_Dir);
+             Lib_Name : constant String :=
+               Get_Name_String (Projects.Table (Project).Library_Name);
+ 
+          begin
+             if Projects.Table (Project).Library_Kind = Static then
+                return Is_Regular_File
+                  (Lib_Dir & Directory_Separator & "lib" &
+                   Fil.Ext_To (Lib_Name, Archive_Ext));
+ 
+             else
+                return Is_Regular_File
+                  (Lib_Dir & Directory_Separator & "lib" &
+                   Fil.Ext_To (Lib_Name, DLL_Ext));
+             end if;
+          end;
+       end if;
+    end Library_Exists_For;
+ 
+    ---------------------------
+    -- Library_File_Name_For --
+    ---------------------------
+ 
+    function Library_File_Name_For (Project : Project_Id) return Name_Id is
+    begin
+       if not Projects.Table (Project).Library then
+          Prj.Com.Fail ("INTERNAL ERROR: Library_File_Name_For called " &
+                        "for non library project");
+          return No_Name;
+ 
+       else
+          declare
+             Lib_Name : constant String :=
+               Get_Name_String (Projects.Table (Project).Library_Name);
+ 
+          begin
+             Name_Len := 3;
+             Name_Buffer (1 .. Name_Len) := "lib";
+ 
+             if Projects.Table (Project).Library_Kind = Static then
+                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, Archive_Ext));
+ 
+             else
+                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, DLL_Ext));
+             end if;
+ 
+             return Name_Find;
+          end;
+       end if;
+    end Library_File_Name_For;
+ 
+    ----------------
+    -- Object_Ext --
+    ----------------
+ 
+    function Object_Ext return String is
+    begin
+       return "obj";
+    end Object_Ext;
+ 
+    ----------------
+    -- PIC_Option --
+    ----------------
+ 
+    function PIC_Option return String is
+    begin
+       return "";
+    end PIC_Option;
+ 
+    -----------------------------------------------
+    -- Standalone_Library_Auto_Init_Is_Supported --
+    -----------------------------------------------
+ 
+    function Standalone_Library_Auto_Init_Is_Supported return Boolean is
+    begin
+       return True;
+    end Standalone_Library_Auto_Init_Is_Supported;
+ 
+    ---------------------------
+    -- Support_For_Libraries --
+    ---------------------------
+ 
+    function Support_For_Libraries return Library_Support is
+    begin
+       return Full;
+    end Support_For_Libraries;
+ 
+ end MLib.Tgt;
diff -Nrcpad gcc-3.4.3/gcc/ada/mlib-tgt-vxworks.adb gcc-4.0.0/gcc/ada/mlib-tgt-vxworks.adb
*** gcc-3.4.3/gcc/ada/mlib-tgt-vxworks.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/mlib-tgt-vxworks.adb	Wed Oct 27 12:27:52 2004
***************
*** 0 ****
--- 1,315 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                             M L I B . T G T                              --
+ --                            (VxWorks Version)                             --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --           Copyright (C) 2003-2004 Free Software Foundation, Inc.         --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package provides a set of target dependent routines to build
+ --  static libraries.
+ 
+ --  This is the VxWorks version of the body
+ 
+ with MLib.Fil;
+ with Namet;  use Namet;
+ with Prj.Com;
+ with Sdefault;
+ 
+ package body MLib.Tgt is
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    function Get_Target_Suffix return String;
+    --  Returns the required suffix for some utilities
+    --  (such as ar and ranlib) that depend on the real target.
+ 
+    ---------------------
+    -- Archive_Builder --
+    ---------------------
+ 
+    function Archive_Builder return String is
+    begin
+       return "ar" & Get_Target_Suffix;
+    end Archive_Builder;
+ 
+    -----------------------------
+    -- Archive_Builder_Options --
+    -----------------------------
+ 
+    function Archive_Builder_Options return String_List_Access is
+    begin
+       return new String_List'(1 => new String'("cr"));
+    end Archive_Builder_Options;
+ 
+    -----------------
+    -- Archive_Ext --
+    -----------------
+ 
+    function Archive_Ext return String is
+    begin
+       return "a";
+    end Archive_Ext;
+ 
+    ---------------------
+    -- Archive_Indexer --
+    ---------------------
+ 
+    function Archive_Indexer return String is
+    begin
+       return "ranlib" & Get_Target_Suffix;
+    end Archive_Indexer;
+ 
+    -----------------------------
+    -- Archive_Indexer_Options --
+    -----------------------------
+ 
+    function Archive_Indexer_Options return String_List_Access is
+    begin
+       return new String_List (1 .. 0);
+    end Archive_Indexer_Options;
+ 
+    ---------------------------
+    -- Build_Dynamic_Library --
+    ---------------------------
+ 
+    procedure Build_Dynamic_Library
+      (Ofiles       : Argument_List;
+       Foreign      : Argument_List;
+       Afiles       : Argument_List;
+       Options      : Argument_List;
+       Options_2    : Argument_List;
+       Interfaces   : Argument_List;
+       Lib_Filename : String;
+       Lib_Dir      : String;
+       Symbol_Data  : Symbol_Record;
+       Driver_Name  : Name_Id := No_Name;
+       Lib_Version  : String  := "";
+       Auto_Init    : Boolean := False)
+    is
+       pragma Unreferenced (Ofiles);
+       pragma Unreferenced (Foreign);
+       pragma Unreferenced (Afiles);
+       pragma Unreferenced (Options);
+       pragma Unreferenced (Options_2);
+       pragma Unreferenced (Interfaces);
+       pragma Unreferenced (Lib_Filename);
+       pragma Unreferenced (Lib_Dir);
+       pragma Unreferenced (Symbol_Data);
+       pragma Unreferenced (Driver_Name);
+       pragma Unreferenced (Lib_Version);
+       pragma Unreferenced (Auto_Init);
+ 
+    begin
+       null;
+    end Build_Dynamic_Library;
+ 
+    -------------
+    -- DLL_Ext --
+    -------------
+ 
+    function DLL_Ext return String is
+    begin
+       return "";
+    end DLL_Ext;
+ 
+    --------------------
+    -- Dynamic_Option --
+    --------------------
+ 
+    function Dynamic_Option return String is
+    begin
+       return "";
+    end Dynamic_Option;
+ 
+    -----------------------------
+    -- Get_Target_Suffix --
+    -----------------------------
+ 
+    function Get_Target_Suffix return String is
+       Target_Name : constant String_Ptr := Sdefault.Target_Name;
+       Index       : Positive   := Target_Name'First;
+ 
+    begin
+       while Index < Target_Name'Last
+         and then Target_Name (Index + 1) /= '-'
+       loop
+          Index := Index + 1;
+       end loop;
+ 
+       if Target_Name (Target_Name'First .. Index) = "m68k" then
+          return "68k";
+       elsif Target_Name (Target_Name'First .. Index) = "mips" then
+          return "mips";
+       elsif Target_Name (Target_Name'First .. Index) = "powerpc" then
+          return "ppc";
+       elsif Target_Name (Target_Name'First .. Index) = "sparc" then
+          return "sparc";
+       elsif Target_Name (Target_Name'First .. Index) = "sparc64" then
+          return "sparc64";
+       elsif Target_Name (Target_Name'First .. Index) = "xscale" then
+          return "arm";
+       else
+          return "";
+       end if;
+    end Get_Target_Suffix;
+ 
+    -------------------
+    -- Is_Object_Ext --
+    -------------------
+ 
+    function Is_Object_Ext (Ext : String) return Boolean is
+    begin
+       return Ext = ".o";
+    end Is_Object_Ext;
+ 
+    --------------
+    -- Is_C_Ext --
+    --------------
+ 
+    function Is_C_Ext (Ext : String) return Boolean is
+    begin
+       return Ext = ".c";
+    end Is_C_Ext;
+ 
+    --------------------
+    -- Is_Archive_Ext --
+    --------------------
+ 
+    function Is_Archive_Ext (Ext : String) return Boolean is
+    begin
+       return Ext = ".a";
+    end Is_Archive_Ext;
+ 
+    -------------
+    -- Libgnat --
+    -------------
+ 
+    function Libgnat return String is
+    begin
+       return "libgnat.a";
+    end Libgnat;
+ 
+    ------------------------
+    -- Library_Exists_For --
+    ------------------------
+ 
+    function Library_Exists_For (Project : Project_Id) return Boolean is
+    begin
+       if not Projects.Table (Project).Library then
+          Prj.Com.Fail ("INTERNAL ERROR: Library_Exists_For called " &
+                        "for non library project");
+          return False;
+ 
+       else
+          declare
+             Lib_Dir : constant String :=
+               Get_Name_String (Projects.Table (Project).Library_Dir);
+             Lib_Name : constant String :=
+               Get_Name_String (Projects.Table (Project).Library_Name);
+ 
+          begin
+             if Projects.Table (Project).Library_Kind = Static then
+                return Is_Regular_File
+                  (Lib_Dir & Directory_Separator & "lib" &
+                   Fil.Ext_To (Lib_Name, Archive_Ext));
+ 
+             else
+                return Is_Regular_File
+                  (Lib_Dir & Directory_Separator & "lib" &
+                   Fil.Ext_To (Lib_Name, DLL_Ext));
+             end if;
+          end;
+       end if;
+    end Library_Exists_For;
+ 
+    ---------------------------
+    -- Library_File_Name_For --
+    ---------------------------
+ 
+    function Library_File_Name_For (Project : Project_Id) return Name_Id is
+    begin
+       if not Projects.Table (Project).Library then
+          Prj.Com.Fail ("INTERNAL ERROR: Library_File_Name_For called " &
+                        "for non library project");
+          return No_Name;
+ 
+       else
+          declare
+             Lib_Name : constant String :=
+               Get_Name_String (Projects.Table (Project).Library_Name);
+ 
+          begin
+             Name_Len := 3;
+             Name_Buffer (1 .. Name_Len) := "lib";
+ 
+             if Projects.Table (Project).Library_Kind = Static then
+                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, Archive_Ext));
+ 
+             else
+                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, DLL_Ext));
+             end if;
+ 
+             return Name_Find;
+          end;
+       end if;
+    end Library_File_Name_For;
+ 
+    ----------------
+    -- Object_Ext --
+    ----------------
+ 
+    function Object_Ext return String is
+    begin
+       return "o";
+    end Object_Ext;
+ 
+    ----------------
+    -- PIC_Option --
+    ----------------
+ 
+    function PIC_Option return String is
+    begin
+       return "";
+    end PIC_Option;
+ 
+    -----------------------------------------------
+    -- Standalone_Library_Auto_Init_Is_Supported --
+    -----------------------------------------------
+ 
+    function Standalone_Library_Auto_Init_Is_Supported return Boolean is
+    begin
+       return False;
+    end Standalone_Library_Auto_Init_Is_Supported;
+ 
+    ---------------------------
+    -- Support_For_Libraries --
+    ---------------------------
+ 
+    function Support_For_Libraries return Library_Support is
+    begin
+       return Static_Only;
+    end Support_For_Libraries;
+ 
+ end MLib.Tgt;
diff -Nrcpad gcc-3.4.3/gcc/ada/mlib-tgt.adb gcc-4.0.0/gcc/ada/mlib-tgt.adb
*** gcc-3.4.3/gcc/ada/mlib-tgt.adb	Mon Jan  5 15:20:45 2004
--- gcc-4.0.0/gcc/ada/mlib-tgt.adb	Wed Oct 27 12:27:53 2004
***************
*** 7,13 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --              Copyright (C) 2001-2003, Ada Core Technologies, Inc.        --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 7,13 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --              Copyright (C) 2001-2004, Ada Core Technologies, Inc.        --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body MLib.Tgt is
*** 67,72 ****
--- 67,81 ----
        return "ranlib";
     end Archive_Indexer;
  
+    -----------------------------
+    -- Archive_Indexer_Options --
+    -----------------------------
+ 
+    function Archive_Indexer_Options return String_List_Access is
+    begin
+       return new String_List (1 .. 0);
+    end Archive_Indexer_Options;
+ 
     ---------------------------
     -- Build_Dynamic_Library --
     ---------------------------
*************** package body MLib.Tgt is
*** 76,118 ****
        Foreign      : Argument_List;
        Afiles       : Argument_List;
        Options      : Argument_List;
        Interfaces   : Argument_List;
        Lib_Filename : String;
        Lib_Dir      : String;
        Symbol_Data  : Symbol_Record;
        Driver_Name  : Name_Id := No_Name;
-       Lib_Address  : String  := "";
        Lib_Version  : String  := "";
-       Relocatable  : Boolean := False;
        Auto_Init    : Boolean := False)
     is
        pragma Unreferenced (Ofiles);
        pragma Unreferenced (Foreign);
        pragma Unreferenced (Afiles);
        pragma Unreferenced (Options);
        pragma Unreferenced (Interfaces);
        pragma Unreferenced (Lib_Filename);
        pragma Unreferenced (Lib_Dir);
        pragma Unreferenced (Symbol_Data);
        pragma Unreferenced (Driver_Name);
-       pragma Unreferenced (Lib_Address);
        pragma Unreferenced (Lib_Version);
-       pragma Unreferenced (Relocatable);
        pragma Unreferenced (Auto_Init);
  
     begin
        null;
     end Build_Dynamic_Library;
  
-    -------------------------
-    -- Default_DLL_Address --
-    -------------------------
- 
-    function Default_DLL_Address return String is
-    begin
-       return "";
-    end Default_DLL_Address;
- 
     -------------
     -- DLL_Ext --
     -------------
--- 85,116 ----
        Foreign      : Argument_List;
        Afiles       : Argument_List;
        Options      : Argument_List;
+       Options_2    : Argument_List;
        Interfaces   : Argument_List;
        Lib_Filename : String;
        Lib_Dir      : String;
        Symbol_Data  : Symbol_Record;
        Driver_Name  : Name_Id := No_Name;
        Lib_Version  : String  := "";
        Auto_Init    : Boolean := False)
     is
        pragma Unreferenced (Ofiles);
        pragma Unreferenced (Foreign);
        pragma Unreferenced (Afiles);
        pragma Unreferenced (Options);
+       pragma Unreferenced (Options_2);
        pragma Unreferenced (Interfaces);
        pragma Unreferenced (Lib_Filename);
        pragma Unreferenced (Lib_Dir);
        pragma Unreferenced (Symbol_Data);
        pragma Unreferenced (Driver_Name);
        pragma Unreferenced (Lib_Version);
        pragma Unreferenced (Auto_Init);
  
     begin
        null;
     end Build_Dynamic_Library;
  
     -------------
     -- DLL_Ext --
     -------------
*************** package body MLib.Tgt is
*** 190,204 ****
        return No_Name;
     end Library_File_Name_For;
  
-    --------------------------------
-    -- Linker_Library_Path_Option --
-    --------------------------------
- 
-    function Linker_Library_Path_Option return String_Access is
-    begin
-       return null;
-    end Linker_Library_Path_Option;
- 
     ----------------
     -- Object_Ext --
     ----------------
--- 188,193 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/mlib-tgt.ads gcc-4.0.0/gcc/ada/mlib-tgt.ads
*** gcc-3.4.3/gcc/ada/mlib-tgt.ads	Thu Nov 20 09:54:00 2003
--- gcc-4.0.0/gcc/ada/mlib-tgt.ads	Wed Oct 27 12:27:53 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --              Copyright (C) 2001-2003, Ada Core Technologies, Inc.        --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --              Copyright (C) 2001-2004, Ada Core Technologies, Inc.        --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package MLib.Tgt is
*** 64,73 ****
     --  Returns the name of the program, if any, that generates an index
     --  to the contents of an archive, usually "ranlib".
  
!    function Default_DLL_Address return String;
!    --  Default address for non relocatable DLL.
!    --  For OSes where a dynamic library is always relocatable,
!    --  this function returns an empty string.
  
     function Dynamic_Option return String;
     --  gcc option to create a dynamic library.
--- 64,71 ----
     --  Returns the name of the program, if any, that generates an index
     --  to the contents of an archive, usually "ranlib".
  
!    function Archive_Indexer_Options return String_List_Access;
!    --  A list of options to invoke the Archive_Indexer, usually empty.
  
     function Dynamic_Option return String;
     --  gcc option to create a dynamic library.
*************** package MLib.Tgt is
*** 86,92 ****
  
     function DLL_Ext return String;
     --  System dependent dynamic library extension, without leading dot.
!    --  On Unix, returns "so", on Windows, returns "dll".
  
     function PIC_Option return String;
     --  Position independent code option
--- 84,91 ----
  
     function DLL_Ext return String;
     --  System dependent dynamic library extension, without leading dot.
!    --  On Windows, returns "dll". On Unix, usually returns "so", but not
!    --  always, e.g. on HP-UX the extension for shared libraries is "sl".
  
     function PIC_Option return String;
     --  Position independent code option
*************** package MLib.Tgt is
*** 95,143 ****
     --  Returns True iff Ext is an object file extension
  
     function Is_C_Ext (Ext : String) return Boolean;
!    --  Returns True iff Ext is a C file extension.
  
     function Is_Archive_Ext (Ext : String) return Boolean;
     --  Returns True iff Ext is an extension for a library
  
-    function Linker_Library_Path_Option return String_Access;
-    --  Linker option to specify to the linker the library directory path.
-    --  If non null, the library directory path is to be appended.
-    --  Should be deallocated by the caller, when no longer needed.
- 
     procedure Build_Dynamic_Library
       (Ofiles       : Argument_List;
        Foreign      : Argument_List;
        Afiles       : Argument_List;
        Options      : Argument_List;
        Interfaces   : Argument_List;
        Lib_Filename : String;
        Lib_Dir      : String;
        Symbol_Data  : Symbol_Record;
        Driver_Name  : Name_Id := No_Name;
-       Lib_Address  : String  := "";
        Lib_Version  : String  := "";
-       Relocatable  : Boolean := False;
        Auto_Init    : Boolean := False);
!    --  Build a dynamic/relocatable library.
     --
!    --  Ofiles is the list of all object files in the library.
!    --  Foreign is the list of non Ada object files (also included in Ofiles).
!    --  Afiles is the list of ALI files for the Ada object files.
!    --  Options is a list of options to be passed to the tool (gcc or other)
!    --  that effectively builds the dynamic library.
     --
     --  Interfaces is the list of ALI files for the interfaces of a SAL.
     --  It is empty if the library is not a SAL.
     --
     --  Lib_Filename is the name of the library, without any prefix or
!    --  extension. For example, on Unix, if Lib_Filename is "toto", the name of
!    --  the library file will be "libtoto.so".
!    --
!    --  Lib_Dir is the directory path where the library will be located.
     --
!    --  Lib_Address is the base address of the library for a non relocatable
!    --  library, given as an hexadecimal string.
     --
     --  For OSes that support symbolic links, Lib_Version, if non null,
     --  is the actual file name of the library. For example on Unix, if
--- 94,138 ----
     --  Returns True iff Ext is an object file extension
  
     function Is_C_Ext (Ext : String) return Boolean;
!    --  Returns True iff Ext is a C file extension
  
     function Is_Archive_Ext (Ext : String) return Boolean;
     --  Returns True iff Ext is an extension for a library
  
     procedure Build_Dynamic_Library
       (Ofiles       : Argument_List;
        Foreign      : Argument_List;
        Afiles       : Argument_List;
        Options      : Argument_List;
+       Options_2    : Argument_List;
        Interfaces   : Argument_List;
        Lib_Filename : String;
        Lib_Dir      : String;
        Symbol_Data  : Symbol_Record;
        Driver_Name  : Name_Id := No_Name;
        Lib_Version  : String  := "";
        Auto_Init    : Boolean := False);
!    --  Build a dynamic/relocatable library
     --
!    --  Ofiles is the list of all object files in the library
!    --
!    --  Foreign is the list of non Ada object files (also included in Ofiles)
!    --
!    --  Afiles is the list of ALI files for the Ada object files
!    --
!    --  Options and Options_2 are lists of options to be passed to the tool
!    --  (gcc or other) that effectively builds the dynamic library. Options
!    --  are passed before the object files, Options_2 are passed after the
!    --  object files.
     --
     --  Interfaces is the list of ALI files for the interfaces of a SAL.
     --  It is empty if the library is not a SAL.
     --
     --  Lib_Filename is the name of the library, without any prefix or
!    --  extension. For example, on Unix, if Lib_Filename is "toto", the
!    --  name of the library file will be "libtoto.so".
     --
!    --  Lib_Dir is the directory path where the library will be located
     --
     --  For OSes that support symbolic links, Lib_Version, if non null,
     --  is the actual file name of the library. For example on Unix, if
*************** package MLib.Tgt is
*** 145,155 ****
     --  "libtoto.so" will be a symbolic link to "libtoto.so.2.1" which
     --  will be the actual library file.
     --
-    --  Relocatable indicates if the library should be relocatable or not,
-    --  for those OSes that actually support non relocatable dynamic libraries.
-    --  Relocatable indicates that automatic elaboration/finalization must be
-    --  indicated to the linker, if possible.
-    --
     --  Symbol_Data is used for some patforms, including VMS, to generate
     --  the symbols to be exported by the library.
     --
--- 140,145 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/mlib-utl.adb gcc-4.0.0/gcc/ada/mlib-utl.adb
*** gcc-3.4.3/gcc/ada/mlib-utl.adb	Tue Oct 21 13:42:10 2003
--- gcc-4.0.0/gcc/ada/mlib-utl.adb	Wed Oct 27 12:27:53 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --              Copyright (C) 2002-2003, Ada Core Technologies, Inc.        --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --              Copyright (C) 2002-2004, Ada Core Technologies, Inc.        --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with GNAT;     use GNAT;
*** 36,52 ****
  
  package body MLib.Utl is
  
!    Initialized   : Boolean := False;
  
!    Gcc_Name      : constant String := "gcc";
!    Gcc_Exec      : OS_Lib.String_Access;
  
!    Ar_Name       : OS_Lib.String_Access;
!    Ar_Exec       : OS_Lib.String_Access;
!    Ar_Options    : OS_Lib.String_List_Access;
  
!    Ranlib_Name   : OS_Lib.String_Access;
!    Ranlib_Exec   : OS_Lib.String_Access := null;
  
     procedure Initialize;
     --  Look for the tools in the path and record the full path for each one
--- 36,53 ----
  
  package body MLib.Utl is
  
!    Initialized : Boolean := False;
  
!    Gcc_Name : constant String := "gcc";
!    Gcc_Exec : OS_Lib.String_Access;
  
!    Ar_Name    : OS_Lib.String_Access;
!    Ar_Exec    : OS_Lib.String_Access;
!    Ar_Options : OS_Lib.String_List_Access;
  
!    Ranlib_Name    : OS_Lib.String_Access;
!    Ranlib_Exec    : OS_Lib.String_Access := null;
!    Ranlib_Options : OS_Lib.String_List_Access := null;
  
     procedure Initialize;
     --  Look for the tools in the path and record the full path for each one
*************** package body MLib.Utl is
*** 64,73 ****
        Success   : Boolean;
  
        Line_Length : Natural := 0;
-       Max_Line_Length : constant := 200; --  arbitrary
  
     begin
!       Initialize;
  
        Arguments :=
          new String_List (1 .. 1 + Ar_Options'Length + Objects'Length);
--- 65,73 ----
        Success   : Boolean;
  
        Line_Length : Natural := 0;
  
     begin
!       Utl.Initialize;
  
        Arguments :=
          new String_List (1 .. 1 + Ar_Options'Length + Objects'Length);
*************** package body MLib.Utl is
*** 82,90 ****
           Line_Length := Ar_Name'Length;
  
           for J in Arguments'Range loop
              --  Make sure the Output buffer does not overflow
  
!             if Line_Length + 1 + Arguments (J)'Length > Max_Line_Length then
                 Write_Eol;
                 Line_Length := 0;
              end if;
--- 82,93 ----
           Line_Length := Ar_Name'Length;
  
           for J in Arguments'Range loop
+ 
              --  Make sure the Output buffer does not overflow
  
!             if Line_Length + 1 + Arguments (J)'Length >
!                  Integer (Opt.Max_Line_Length)
!             then
                 Write_Eol;
                 Line_Length := 0;
              end if;
*************** package body MLib.Utl is
*** 114,120 ****
  
           OS_Lib.Spawn
             (Ranlib_Exec.all,
!             (1 => Arguments (Ar_Options'Length + 1)),
              Success);
  
           if not Success then
--- 117,123 ----
  
           OS_Lib.Spawn
             (Ranlib_Exec.all,
!             Ranlib_Options.all & (Arguments (Ar_Options'Length + 1)),
              Success);
  
           if not Success then
*************** package body MLib.Utl is
*** 154,161 ****
       (Output_File : String;
        Objects     : Argument_List;
        Options     : Argument_List;
!       Driver_Name : Name_Id       := No_Name;
!       Options_2   : Argument_List := No_Argument_List)
     is
        Arguments :
          OS_Lib.Argument_List
--- 157,164 ----
       (Output_File : String;
        Objects     : Argument_List;
        Options     : Argument_List;
!       Options_2   : Argument_List;
!       Driver_Name : Name_Id := No_Name)
     is
        Arguments :
          OS_Lib.Argument_List
*************** package body MLib.Utl is
*** 175,181 ****
  
        Driver  : String_Access;
     begin
!       Initialize;
  
        if Driver_Name = No_Name then
           Driver := Gcc_Exec;
--- 178,184 ----
  
        Driver  : String_Access;
     begin
!       Utl.Initialize;
  
        if Driver_Name = No_Name then
           Driver := Gcc_Exec;
*************** package body MLib.Utl is
*** 282,287 ****
--- 285,292 ----
                 Write_Line (Ranlib_Exec.all);
              end if;
           end if;
+ 
+          Ranlib_Options := Archive_Indexer_Options;
        end if;
     end Initialize;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/mlib-utl.ads gcc-4.0.0/gcc/ada/mlib-utl.ads
*** gcc-3.4.3/gcc/ada/mlib-utl.ads	Tue Oct 21 13:42:10 2003
--- gcc-4.0.0/gcc/ada/mlib-utl.ads	Mon Oct  4 14:53:51 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2001-2003, Ada Core Technologies, Inc           --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2001-2004, Ada Core Technologies, Inc           --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package MLib.Utl is
*** 40,47 ****
       (Output_File : String;
        Objects     : Argument_List;
        Options     : Argument_List;
!       Driver_Name : Name_Id       := No_Name;
!       Options_2   : Argument_List := No_Argument_List);
     --  Driver_Name indicates the "driver" to invoke; by default, the "driver"
     --  is gcc.
     --  This procedure invokes the driver to create a shared library.
--- 40,47 ----
       (Output_File : String;
        Objects     : Argument_List;
        Options     : Argument_List;
!       Options_2   : Argument_List;
!       Driver_Name : Name_Id := No_Name);
     --  Driver_Name indicates the "driver" to invoke; by default, the "driver"
     --  is gcc.
     --  This procedure invokes the driver to create a shared library.
diff -Nrcpad gcc-3.4.3/gcc/ada/mlib.adb gcc-4.0.0/gcc/ada/mlib.adb
*** gcc-3.4.3/gcc/ada/mlib.adb	Tue Oct 21 13:42:10 2003
--- gcc-4.0.0/gcc/ada/mlib.adb	Thu Feb 10 13:50:33 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 1999-2003, Ada Core Technologies, Inc.           --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 1999-2005, Ada Core Technologies, Inc.           --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 25,30 ****
--- 25,31 ----
  ------------------------------------------------------------------------------
  
  with Ada.Characters.Handling; use Ada.Characters.Handling;
+ with Interfaces.C.Strings;
  
  with Hostparm;
  with Opt;
*************** with MLib.Utl; use MLib.Utl;
*** 36,43 ****
  with GNAT.Directory_Operations; use GNAT.Directory_Operations;
  with GNAT.OS_Lib;               use GNAT.OS_Lib;
  
- with System;
- 
  package body MLib is
  
     -------------------
--- 37,42 ----
*************** package body MLib is
*** 102,113 ****
        To         : Name_Id;
        Interfaces : String_List)
     is
!       Success   : Boolean := False;
!       To_Dir    : constant String := Get_Name_String (To);
!       Interface : Boolean := False;
! 
!       procedure Set_Readonly (Name : System.Address);
!       pragma Import (C, Set_Readonly, "__gnat_set_readonly");
  
        procedure Verbose_Copy (Index : Positive);
        --  In verbose mode, output a message that the indexed file is copied
--- 101,109 ----
        To         : Name_Id;
        Interfaces : String_List)
     is
!       Success      : Boolean := False;
!       To_Dir       : constant String := Get_Name_String (To);
!       Is_Interface : Boolean := False;
  
        procedure Verbose_Copy (Index : Positive);
        --  In verbose mode, output a message that the indexed file is copied
*************** package body MLib is
*** 158,168 ****
  
                 --  Check if this is one of the interface ALIs
  
!                Interface := False;
  
                 for Index in Interfaces'Range loop
                    if File_Name = Interfaces (Index).all then
!                      Interface := True;
                       exit;
                    end if;
                 end loop;
--- 154,164 ----
  
                 --  Check if this is one of the interface ALIs
  
!                Is_Interface := False;
  
                 for Index in Interfaces'Range loop
                    if File_Name = Interfaces (Index).all then
!                      Is_Interface := True;
                       exit;
                    end if;
                 end loop;
*************** package body MLib is
*** 171,177 ****
                 --  the interface indication at the end of the P line.
                 --  Do not copy ALI files that are not Interfaces.
  
!                if Interface then
                    Success := False;
                    Verbose_Copy (Index);
  
--- 167,173 ----
                 --  the interface indication at the end of the P line.
                 --  Do not copy ALI files that are not Interfaces.
  
!                if Is_Interface then
                    Success := False;
                    Verbose_Copy (Index);
  
*************** package body MLib is
*** 263,269 ****
                                Success := Status and Actual_Len = Len + 3;
  
                                if Success then
!                                  Set_Readonly (Name_Buffer'Address);
                                end if;
                             end if;
                          end if;
--- 259,266 ----
                                Success := Status and Actual_Len = Len + 3;
  
                                if Success then
!                                  Set_Read_Only (
!                                    Name_Buffer (1 .. Name_Len - 1));
                                end if;
                             end if;
                          end if;
*************** package body MLib is
*** 285,297 ****
        end if;
     end Copy_ALI_Files;
  
  --  Package elaboration
  
  begin
!    if Hostparm.OpenVMS then
! 
!       --  Copy_Attributes always fails on VMS
  
        Preserve := None;
     end if;
  end MLib;
--- 282,315 ----
        end if;
     end Copy_ALI_Files;
  
+    --------------------------------
+    -- Linker_Library_Path_Option --
+    --------------------------------
+ 
+    function Linker_Library_Path_Option return String_Access is
+ 
+       Run_Path_Option_Ptr : Interfaces.C.Strings.chars_ptr;
+       pragma Import (C, Run_Path_Option_Ptr, "__gnat_run_path_option");
+       --  Pointer to string representing the native linker option which
+       --  specifies the path where the dynamic loader should find shared
+       --  libraries. Equal to null string if this system doesn't support it.
+ 
+       S : constant String := Interfaces.C.Strings.Value (Run_Path_Option_Ptr);
+ 
+    begin
+       if S'Length = 0 then
+          return null;
+       else
+          return new String'(S);
+       end if;
+    end Linker_Library_Path_Option;
+ 
  --  Package elaboration
  
  begin
!    --  Copy_Attributes always fails on VMS
  
+    if Hostparm.OpenVMS then
        Preserve := None;
     end if;
  end MLib;
diff -Nrcpad gcc-3.4.3/gcc/ada/mlib.ads gcc-4.0.0/gcc/ada/mlib.ads
*** gcc-3.4.3/gcc/ada/mlib.ads	Tue Oct 21 13:42:10 2003
--- gcc-4.0.0/gcc/ada/mlib.ads	Mon Apr 19 15:20:01 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 1999-2003, Ada Core Technologies, Inc.           --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 1999-2004, Ada Core Technologies, Inc.           --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package MLib is
*** 65,70 ****
--- 65,75 ----
     --  Copy all ALI files Files to directory To.
     --  Mark Interfaces ALI files as interfaces, if any.
  
+    function Linker_Library_Path_Option return String_Access;
+    --  Linker option to specify to the linker the library directory path.
+    --  If non null, the library directory path is to be appended.
+    --  Should be deallocated by the caller, when no longer needed.
+ 
  private
  
     Preserve : Attribute := Time_Stamps;
diff -Nrcpad gcc-3.4.3/gcc/ada/namet.adb gcc-4.0.0/gcc/ada/namet.adb
*** gcc-3.4.3/gcc/ada/namet.adb	Tue Oct 21 13:42:10 2003
--- gcc-4.0.0/gcc/ada/namet.adb	Thu Feb 10 13:50:27 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Namet is
*** 139,156 ****
  
     begin
        if Debug_Flag_H then
- 
           for J in F'Range loop
              F (J) := 0;
           end loop;
  
!          for I in Hash_Index_Type loop
!             if Hash_Table (I) = No_Name then
                 F (0) := F (0) + 1;
  
              else
                 Write_Str ("Hash_Table (");
!                Write_Int (Int (I));
                 Write_Str (") has ");
  
                 declare
--- 139,155 ----
  
     begin
        if Debug_Flag_H then
           for J in F'Range loop
              F (J) := 0;
           end loop;
  
!          for J in Hash_Index_Type loop
!             if Hash_Table (J) = No_Name then
                 F (0) := F (0) + 1;
  
              else
                 Write_Str ("Hash_Table (");
!                Write_Int (Int (J));
                 Write_Str (") has ");
  
                 declare
*************** package body Namet is
*** 160,166 ****
  
                 begin
                    C := 0;
!                   N := Hash_Table (I);
  
                    while N /= No_Name loop
                       N := Name_Entries.Table (N).Hash_Link;
--- 159,165 ----
  
                 begin
                    C := 0;
!                   N := Hash_Table (J);
  
                    while N /= No_Name loop
                       N := Name_Entries.Table (N).Hash_Link;
*************** package body Namet is
*** 177,183 ****
                       F (Max_Chain_Length) := F (Max_Chain_Length) + 1;
                    end if;
  
!                   N := Hash_Table (I);
  
                    while N /= No_Name loop
                       S := Name_Entries.Table (N).Name_Chars_Index;
--- 176,182 ----
                       F (Max_Chain_Length) := F (Max_Chain_Length) + 1;
                    end if;
  
!                   N := Hash_Table (J);
  
                    while N /= No_Name loop
                       S := Name_Entries.Table (N).Name_Chars_Index;
*************** package body Namet is
*** 196,222 ****
  
           Write_Eol;
  
!          for I in Int range 0 .. Max_Chain_Length loop
!             if F (I) /= 0 then
                 Write_Str ("Number of hash chains of length ");
  
!                if I < 10 then
                    Write_Char (' ');
                 end if;
  
!                Write_Int (I);
  
!                if I = Max_Chain_Length then
                    Write_Str (" or greater");
                 end if;
  
                 Write_Str (" = ");
!                Write_Int (F (I));
                 Write_Eol;
  
!                if I /= 0 then
!                   Nsyms := Nsyms + F (I);
!                   Probes := Probes + F (I) * (1 + I) * 100;
                 end if;
              end if;
           end loop;
--- 195,221 ----
  
           Write_Eol;
  
!          for J in Int range 0 .. Max_Chain_Length loop
!             if F (J) /= 0 then
                 Write_Str ("Number of hash chains of length ");
  
!                if J < 10 then
                    Write_Char (' ');
                 end if;
  
!                Write_Int (J);
  
!                if J = Max_Chain_Length then
                    Write_Str (" or greater");
                 end if;
  
                 Write_Str (" = ");
!                Write_Int (F (J));
                 Write_Eol;
  
!                if J /= 0 then
!                   Nsyms := Nsyms + F (J);
!                   Probes := Probes + F (J) * (1 + J) * 100;
                 end if;
              end if;
           end loop;
*************** package body Namet is
*** 274,282 ****
  
           procedure Copy_One_Character;
           --  Copy a character from Name_Buffer to New_Buf. Includes case
!          --  of copying a Uhh or Whhhh sequence and decoding it.
  
!          function Hex (N : Natural) return Natural;
           --  Scans past N digits using Old pointer and returns hex value
  
           procedure Insert_Character (C : Character);
--- 273,281 ----
  
           procedure Copy_One_Character;
           --  Copy a character from Name_Buffer to New_Buf. Includes case
!          --  of copying a Uhh,Whhhh,WWhhhhhhhh sequence and decoding it.
  
!          function Hex (N : Natural) return Word;
           --  Scans past N digits using Old pointer and returns hex value
  
           procedure Insert_Character (C : Character);
*************** package body Namet is
*** 302,307 ****
--- 301,315 ----
                 Old := Old + 1;
                 Insert_Character (Character'Val (Hex (2)));
  
+             --  WW (wide wide character insertion)
+ 
+             elsif C = 'W'
+               and then Old < Name_Len
+               and then Name_Buffer (Old + 1) = 'W'
+             then
+                Old := Old + 2;
+                Widechar.Set_Wide (Char_Code (Hex (8)), New_Buf, New_Len);
+ 
              --  W (wide character insertion)
  
              elsif C = 'W'
*************** package body Namet is
*** 324,331 ****
           -- Hex --
           ---------
  
!          function Hex (N : Natural) return Natural is
!             T : Natural := 0;
              C : Character;
  
           begin
--- 332,339 ----
           -- Hex --
           ---------
  
!          function Hex (N : Natural) return Word is
!             T : Word := 0;
              C : Character;
  
           begin
*************** package body Namet is
*** 493,499 ****
        elsif Name_Buffer (1) = 'Q' then
           Get_Decoded_Name_String (Id);
  
!       --  Only remaining issue is U/W sequences
  
        else
           Get_Name_String (Id);
--- 501,507 ----
        elsif Name_Buffer (1) = 'Q' then
           Get_Decoded_Name_String (Id);
  
!       --  Only remaining issue is U/W/WW sequences
  
        else
           Get_Name_String (Id);
*************** package body Namet is
*** 503,508 ****
--- 511,518 ----
              if Name_Buffer (P + 1) in 'A' .. 'Z' then
                 P := P + 1;
  
+             --  Uhh encoding
+ 
              elsif Name_Buffer (P) = 'U' then
                 for J in reverse P + 3 .. P + Name_Len loop
                    Name_Buffer (J + 3) := Name_Buffer (J);
*************** package body Namet is
*** 517,534 ****
                 Name_Buffer (P + 5) := ']';
                 P := P + 6;
  
!             elsif Name_Buffer (P) = 'W' then
!                Name_Buffer (P + 8 .. P + Name_Len + 5) :=
                   Name_Buffer (P + 5 .. Name_Len);
!                Name_Buffer (P + 5) := Name_Buffer (P + 4);
!                Name_Buffer (P + 4) := Name_Buffer (P + 3);
!                Name_Buffer (P + 3) := Name_Buffer (P + 2);
!                Name_Buffer (P + 2) := Name_Buffer (P + 1);
                 Name_Buffer (P)     := '[';
                 Name_Buffer (P + 1) := '"';
                 Name_Buffer (P + 6) := '"';
                 Name_Buffer (P + 7) := ']';
!                Name_Len := Name_Len + 5;
                 P := P + 8;
  
              else
--- 527,564 ----
                 Name_Buffer (P + 5) := ']';
                 P := P + 6;
  
!             --  WWhhhhhhhh encoding
! 
!             elsif Name_Buffer (P) = 'W'
!               and then P + 9 <= Name_Len
!               and then Name_Buffer (P + 1) = 'W'
!               and then Name_Buffer (P + 2) not in 'A' .. 'Z'
!               and then Name_Buffer (P + 2) /= '_'
!             then
!                Name_Buffer (P + 12 .. Name_Len + 2) :=
!                  Name_Buffer (P + 10 .. Name_Len);
!                Name_Buffer (P)     := '[';
!                Name_Buffer (P + 1) := '"';
!                Name_Buffer (P + 10) := '"';
!                Name_Buffer (P + 11) := ']';
!                Name_Len := Name_Len + 2;
!                P := P + 12;
! 
!             --  Whhhh encoding
! 
!             elsif Name_Buffer (P) = 'W'
!               and then P < Name_Len
!               and then Name_Buffer (P + 1) not in 'A' .. 'Z'
!               and then Name_Buffer (P + 1) /= '_'
!             then
!                Name_Buffer (P + 8 .. P + Name_Len + 3) :=
                   Name_Buffer (P + 5 .. Name_Len);
!                Name_Buffer (P + 2 .. P + 5) := Name_Buffer (P + 1 .. P + 4);
                 Name_Buffer (P)     := '[';
                 Name_Buffer (P + 1) := '"';
                 Name_Buffer (P + 6) := '"';
                 Name_Buffer (P + 7) := ']';
!                Name_Len := Name_Len + 3;
                 P := P + 8;
  
              else
*************** package body Namet is
*** 560,565 ****
--- 590,597 ----
     -- Get_Name_String --
     ---------------------
  
+    --  Procedure version leaving result in Name_Buffer, length in Name_Len
+ 
     procedure Get_Name_String (Id : Name_Id) is
        S : Int;
  
*************** package body Namet is
*** 574,579 ****
--- 606,617 ----
        end loop;
     end Get_Name_String;
  
+    ---------------------
+    -- Get_Name_String --
+    ---------------------
+ 
+    --  Function version returning a string
+ 
     function Get_Name_String (Id : Name_Id) return String is
        S : Int;
  
*************** package body Namet is
*** 656,700 ****
     ----------
  
     function Hash return Hash_Index_Type is
-       subtype Int_0_12 is Int range 0 .. 12;
-       --  Used to avoid when others on case jump below
- 
-       Even_Name_Len : Integer;
-       --  Last even numbered position (used for >12 case)
- 
     begin
- 
-       --  Special test for 12 (rather than counting on a when others for the
-       --  case statement below) avoids some Ada compilers converting the case
-       --  statement into successive jumps.
- 
-       --  The case of a name longer than 12 characters is handled by taking
-       --  the first 6 odd numbered characters and the last 6 even numbered
-       --  characters
- 
-       if Name_Len > 12 then
-          Even_Name_Len := (Name_Len) / 2 * 2;
- 
-          return ((((((((((((
-            Character'Pos (Name_Buffer (01))) * 2 +
-            Character'Pos (Name_Buffer (Even_Name_Len - 10))) * 2 +
-            Character'Pos (Name_Buffer (03))) * 2 +
-            Character'Pos (Name_Buffer (Even_Name_Len - 08))) * 2 +
-            Character'Pos (Name_Buffer (05))) * 2 +
-            Character'Pos (Name_Buffer (Even_Name_Len - 06))) * 2 +
-            Character'Pos (Name_Buffer (07))) * 2 +
-            Character'Pos (Name_Buffer (Even_Name_Len - 04))) * 2 +
-            Character'Pos (Name_Buffer (09))) * 2 +
-            Character'Pos (Name_Buffer (Even_Name_Len - 02))) * 2 +
-            Character'Pos (Name_Buffer (11))) * 2 +
-            Character'Pos (Name_Buffer (Even_Name_Len))) mod Hash_Num;
-       end if;
- 
        --  For the cases of 1-12 characters, all characters participate in the
        --  hash. The positioning is randomized, with the bias that characters
        --  later on participate fully (i.e. are added towards the right side).
  
!       case Int_0_12 (Name_Len) is
  
           when 0 =>
              return 0;
--- 694,705 ----
     ----------
  
     function Hash return Hash_Index_Type is
     begin
        --  For the cases of 1-12 characters, all characters participate in the
        --  hash. The positioning is randomized, with the bias that characters
        --  later on participate fully (i.e. are added towards the right side).
  
!       case Name_Len is
  
           when 0 =>
              return 0;
*************** package body Namet is
*** 813,818 ****
--- 818,843 ----
                Character'Pos (Name_Buffer (10))) * 2 +
                Character'Pos (Name_Buffer (12))) mod Hash_Num;
  
+          --  Names longer than 12 characters are handled by taking the first
+          --  6 odd numbered characters and the last 6 even numbered characters.
+ 
+          when others => declare
+                Even_Name_Len : constant Integer := (Name_Len) / 2 * 2;
+          begin
+             return ((((((((((((
+               Character'Pos (Name_Buffer (01))) * 2 +
+               Character'Pos (Name_Buffer (Even_Name_Len - 10))) * 2 +
+               Character'Pos (Name_Buffer (03))) * 2 +
+               Character'Pos (Name_Buffer (Even_Name_Len - 08))) * 2 +
+               Character'Pos (Name_Buffer (05))) * 2 +
+               Character'Pos (Name_Buffer (Even_Name_Len - 06))) * 2 +
+               Character'Pos (Name_Buffer (07))) * 2 +
+               Character'Pos (Name_Buffer (Even_Name_Len - 04))) * 2 +
+               Character'Pos (Name_Buffer (09))) * 2 +
+               Character'Pos (Name_Buffer (Even_Name_Len - 02))) * 2 +
+               Character'Pos (Name_Buffer (11))) * 2 +
+               Character'Pos (Name_Buffer (Even_Name_Len))) mod Hash_Num;
+          end;
        end case;
     end Hash;
  
*************** package body Namet is
*** 821,827 ****
     ----------------
  
     procedure Initialize is
- 
     begin
        Name_Chars.Init;
        Name_Entries.Init;
--- 846,851 ----
*************** package body Namet is
*** 853,864 ****
--- 877,896 ----
     -- Is_Internal_Name --
     ----------------------
  
+    --  Version taking an argument
+ 
     function Is_Internal_Name (Id : Name_Id) return Boolean is
     begin
        Get_Name_String (Id);
        return Is_Internal_Name;
     end Is_Internal_Name;
  
+    ----------------------
+    -- Is_Internal_Name --
+    ----------------------
+ 
+    --  Version taking its input from Name_Buffer
+ 
     function Is_Internal_Name return Boolean is
     begin
        if Name_Buffer (1) = '_'
*************** package body Namet is
*** 905,910 ****
--- 937,954 ----
          and then C /= 'X';
     end Is_OK_Internal_Letter;
  
+    ----------------------
+    -- Is_Operator_Name --
+    ----------------------
+ 
+    function Is_Operator_Name (Id : Name_Id) return Boolean is
+       S : Int;
+    begin
+       pragma Assert (Id in Name_Entries.First .. Name_Entries.Last);
+       S := Name_Entries.Table (Id).Name_Chars_Index;
+       return Name_Chars.Table (S + 1) = 'O';
+    end Is_Operator_Name;
+ 
     --------------------
     -- Length_Of_Name --
     --------------------
*************** package body Namet is
*** 1021,1028 ****
  
                 S := Name_Entries.Table (New_Id).Name_Chars_Index;
  
!                for I in 1 .. Name_Len loop
!                   if Name_Chars.Table (S + Int (I)) /= Name_Buffer (I) then
                       goto No_Match;
                    end if;
                 end loop;
--- 1065,1072 ----
  
                 S := Name_Entries.Table (New_Id).Name_Chars_Index;
  
!                for J in 1 .. Name_Len loop
!                   if Name_Chars.Table (S + Int (J)) /= Name_Buffer (J) then
                       goto No_Match;
                    end if;
                 end loop;
*************** package body Namet is
*** 1057,1065 ****
  
           --  Set corresponding string entry in the Name_Chars table
  
!          for I in 1 .. Name_Len loop
              Name_Chars.Increment_Last;
!             Name_Chars.Table (Name_Chars.Last) := Name_Buffer (I);
           end loop;
  
           Name_Chars.Increment_Last;
--- 1101,1109 ----
  
           --  Set corresponding string entry in the Name_Chars table
  
!          for J in 1 .. Name_Len loop
              Name_Chars.Increment_Last;
!             Name_Chars.Table (Name_Chars.Last) := Name_Buffer (J);
           end loop;
  
           Name_Chars.Increment_Last;
*************** package body Namet is
*** 1118,1159 ****
  
     procedure Store_Encoded_Character (C : Char_Code) is
  
!       procedure Set_Hex_Chars (N : Natural);
        --  Stores given value, which is in the range 0 .. 255, as two hex
!       --  digits (using lower case a-f) in Name_Buffer, incrementing Name_Len
  
!       procedure Set_Hex_Chars (N : Natural) is
!          Hexd : constant String := "0123456789abcdef";
  
        begin
           Name_Buffer (Name_Len + 1) := Hexd (N / 16 + 1);
           Name_Buffer (Name_Len + 2) := Hexd (N mod 16 + 1);
           Name_Len := Name_Len + 2;
        end Set_Hex_Chars;
  
     begin
        Name_Len := Name_Len + 1;
  
        if In_Character_Range (C) then
           declare
              CC : constant Character := Get_Character (C);
- 
           begin
              if CC in 'a' .. 'z' or else CC in '0' .. '9' then
                 Name_Buffer (Name_Len) := CC;
- 
              else
                 Name_Buffer (Name_Len) := 'U';
!                Set_Hex_Chars (Natural (C));
              end if;
           end;
  
        else
           Name_Buffer (Name_Len) := 'W';
!          Set_Hex_Chars (Natural (C) / 256);
!          Set_Hex_Chars (Natural (C) mod 256);
        end if;
- 
     end Store_Encoded_Character;
  
     --------------------------------------
--- 1162,1215 ----
  
     procedure Store_Encoded_Character (C : Char_Code) is
  
!       procedure Set_Hex_Chars (C : Char_Code);
        --  Stores given value, which is in the range 0 .. 255, as two hex
!       --  digits (using lower case a-f) in Name_Buffer, incrementing Name_Len.
  
!       -------------------
!       -- Set_Hex_Chars --
!       -------------------
  
+       procedure Set_Hex_Chars (C : Char_Code) is
+          Hexd : constant String := "0123456789abcdef";
+          N    : constant Natural := Natural (C);
        begin
           Name_Buffer (Name_Len + 1) := Hexd (N / 16 + 1);
           Name_Buffer (Name_Len + 2) := Hexd (N mod 16 + 1);
           Name_Len := Name_Len + 2;
        end Set_Hex_Chars;
  
+    --  Start of processing for Store_Encoded_Character
+ 
     begin
        Name_Len := Name_Len + 1;
  
        if In_Character_Range (C) then
           declare
              CC : constant Character := Get_Character (C);
           begin
              if CC in 'a' .. 'z' or else CC in '0' .. '9' then
                 Name_Buffer (Name_Len) := CC;
              else
                 Name_Buffer (Name_Len) := 'U';
!                Set_Hex_Chars (C);
              end if;
           end;
  
+       elsif In_Wide_Character_Range (C) then
+          Name_Buffer (Name_Len) := 'W';
+          Set_Hex_Chars (C / 256);
+          Set_Hex_Chars (C mod 256);
+ 
        else
           Name_Buffer (Name_Len) := 'W';
!          Name_Len := Name_Len + 1;
!          Name_Buffer (Name_Len) := 'W';
!          Set_Hex_Chars (C / 2 ** 24);
!          Set_Hex_Chars ((C / 2 ** 16) mod 256);
!          Set_Hex_Chars ((C / 256) mod 256);
!          Set_Hex_Chars (C mod 256);
        end if;
     end Store_Encoded_Character;
  
     --------------------------------------
diff -Nrcpad gcc-3.4.3/gcc/ada/namet.ads gcc-4.0.0/gcc/ada/namet.ads
*** gcc-3.4.3/gcc/ada/namet.ads	Tue Oct 21 13:42:10 2003
--- gcc-4.0.0/gcc/ada/namet.ads	Thu Feb 10 13:50:27 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Namet is
*** 48,64 ****
  
  --  The forms of the entries are as follows:
  
! --    Identifiers        Stored with upper case letters folded to lower case.
! --                       Upper half (16#80# bit set) and wide characters are
! --                       stored in an encoded form (Uhh for upper half and
! --                       Whhhh for wide characters, as provided by the routine
! --                       Store_Encoded_Character, where hh are hex digits for
! --                       the character code using lower case a-f). Normally
! --                       the use of U or W in other internal names is avoided,
! --                       but these letters may be used in internal names
! --                       (without this special meaning), if the appear as
! --                       the last character of the name, or they are followed
! --                       by an upper case letter or an underscore.
  
  
  --    Operator symbols   Stored with an initial letter O, and the remainder
--- 48,65 ----
  
  --  The forms of the entries are as follows:
  
! --    Identifiers Stored with upper case letters folded to lower case. Upper
! --                       half (16#80# bit set) and wide characters are stored
! --                       in an encoded form (Uhh for upper half char, Whhhh
! --                       for wide characters, WWhhhhhhhh as provided by the
! --                       routine Store_Encoded_Character, where hh are hex
! --                       digits for the character code using lower case a-f).
! --                       Normally the use of U or W in other internal names is
! --                       avoided, but these letters may be used in internal
! --                       names (without this special meaning), if they appear
! --                       as the last character of the name, or they are
! --                       followed by an upper case letter (other than the WW
! --                       sequence), or an underscore.
  
  
  --    Operator symbols   Stored with an initial letter O, and the remainder
*************** package Namet is
*** 73,79 ****
  --    Character literals Character literals have names that are used only for
  --                       debugging and error message purposes. The form is a
  --                       upper case Q followed by a single lower case letter,
! --                       or by a Uxx or Wxxxx encoding as described for
  --                       identifiers. The Set_Character_Literal_Name procedure
  --                       should be used to construct these encodings. Normally
  --                       the use of O in other internal names is avoided, but
--- 74,80 ----
  --    Character literals Character literals have names that are used only for
  --                       debugging and error message purposes. The form is a
  --                       upper case Q followed by a single lower case letter,
! --                       or by a Uxx/Wxxxx/WWxxxxxxx encoding as described for
  --                       identifiers. The Set_Character_Literal_Name procedure
  --                       should be used to construct these encodings. Normally
  --                       the use of O in other internal names is avoided, but
*************** package Namet is
*** 83,91 ****
  --                       underscore.
  
  --    Unit names         Stored with upper case letters folded to lower case,
! --                       using Uhh/Whhhh encoding as described for identifiers,
! --                       and a %s or %b suffix for specs/bodies. See package
! --                       Uname for further details.
  
  --    File names         Are stored in the form provided by Osint. Typically
  --                       they may include wide character escape sequences and
--- 84,92 ----
  --                       underscore.
  
  --    Unit names         Stored with upper case letters folded to lower case,
! --                       using Uhh/Whhhh/WWhhhhhhhh encoding as described for
! --                       identifiers, and a %s or %b suffix for specs/bodies.
! --                       See package Uname for further details.
  
  --    File names         Are stored in the form provided by Osint. Typically
  --                       they may include wide character escape sequences and
*************** package Namet is
*** 100,111 ****
  --                       characters may appear for such entries.
  
  --  Note: the encodings Uhh (upper half characters), Whhhh (wide characters),
! --  and Qx (character literal names) are described in the spec, since they
! --  are visible throughout the system (e.g. in debugging output). However,
! --  no code should depend on these particular encodings, so it should be
! --  possible to change the encodings by making changes only to the Namet
! --  specification (to change these comments) and the body (which actually
! --  implements the encodings).
  
  --  The names are hashed so that a given name appears only once in the table,
  --  except that names entered with Name_Enter as opposed to Name_Find are
--- 101,112 ----
  --                       characters may appear for such entries.
  
  --  Note: the encodings Uhh (upper half characters), Whhhh (wide characters),
! --  WWhhhhhhhh (wide wide characters) and Qx (character literal names) are
! --  described in the spec, since they are visible throughout the system (e.g.
! --  in debugging output). However, no code should depend on these particular
! --  encodings, so it should be possible to change the encodings by making
! --  changes only to the Namet specification (to change these comments) and the
! --  body (which actually implements the encodings).
  
  --  The names are hashed so that a given name appears only once in the table,
  --  except that names entered with Name_Enter as opposed to Name_Find are
*************** package Namet is
*** 118,136 ****
  
  --  Two values, one of type Int and one of type Byte, are stored with each
  --  names table entry and subprograms are provided for setting and retrieving
! --  these associated values. The usage of these values is up to the client.
! --  In the compiler, the Int field is used to point to a chain of potentially
! --  visible entities (see Sem.Ch8 for details), and the Byte field is used
! --  to hold the Token_Type value for reserved words (see Sem for details).
! --  In the binder, the Byte field is unused, and the Int field is used in
! --  various ways depending on the name involved (see binder documentation).
  
     Name_Buffer : String (1 .. 16*1024);
     --  This buffer is used to set the name to be stored in the table for the
     --  Name_Find call, and to retrieve the name for the Get_Name_String call.
!    --  The plus 1 in the length allows for cases of adding ASCII.NUL. The
!    --  16K here is intended to be an infinite value that ensures that we
!    --  never overflow the buffer (names this long are too absurd to worry!)
  
     Name_Len : Natural;
     --  Length of name stored in Name_Buffer. Used as an input parameter for
--- 119,137 ----
  
  --  Two values, one of type Int and one of type Byte, are stored with each
  --  names table entry and subprograms are provided for setting and retrieving
! --  these associated values. The usage of these values is up to the client. In
! --  the compiler, the Int field is used to point to a chain of potentially
! --  visible entities (see Sem.Ch8 for details), and the Byte field is used to
! --  hold the Token_Type value for reserved words (see Sem for details). In the
! --  binder, the Byte field is unused, and the Int field is used in various
! --  ways depending on the name involved (see binder documentation).
  
     Name_Buffer : String (1 .. 16*1024);
     --  This buffer is used to set the name to be stored in the table for the
     --  Name_Find call, and to retrieve the name for the Get_Name_String call.
!    --  The plus 1 in the length allows for cases of adding ASCII.NUL. The 16K
!    --  here is intended to be an infinite value that ensures that we never
!    --  overflow the buffer (names this long are too absurd to worry!)
  
     Name_Len : Natural;
     --  Length of name stored in Name_Buffer. Used as an input parameter for
*************** package Namet is
*** 147,155 ****
  
     procedure Get_Name_String (Id : Name_Id);
     --  Get_Name_String is used to retrieve the string associated with an entry
!    --  in the names table. The resulting string is stored in Name_Buffer
!    --  and Name_Len is set. It is an error to call Get_Name_String with one
!    --  of the special name Id values (No_Name or Error_Name).
  
     function Get_Name_String (Id : Name_Id) return String;
     --  This functional form returns the result as a string without affecting
--- 148,156 ----
  
     procedure Get_Name_String (Id : Name_Id);
     --  Get_Name_String is used to retrieve the string associated with an entry
!    --  in the names table. The resulting string is stored in Name_Buffer and
!    --  Name_Len is set. It is an error to call Get_Name_String with one of the
!    --  special name Id values (No_Name or Error_Name).
  
     function Get_Name_String (Id : Name_Id) return String;
     --  This functional form returns the result as a string without affecting
*************** package Namet is
*** 157,174 ****
  
     procedure Get_Unqualified_Name_String (Id : Name_Id);
     --  Similar to the above except that qualification (as defined in unit
!    --  Exp_Dbug) is removed (including both preceding __ delimited names,
!    --  and also the suffixes used to indicate package body entities and to
     --  distinguish between overloaded entities). Note that names are not
!    --  qualified until just before the call to gigi, so this routine is
!    --  only needed by processing that occurs after gigi has been called.
!    --  This includes all ASIS processing, since ASIS works on the tree
!    --  written after gigi has been called.
  
     procedure Get_Name_String_And_Append (Id : Name_Id);
!    --  Like Get_Name_String but the resulting characters are appended to
!    --  the current contents of the entry stored in Name_Buffer, and Name_Len
!    --  is incremented to include the added characters.
  
     procedure Get_Decoded_Name_String (Id : Name_Id);
     --  Same calling sequence an interface as Get_Name_String, except that the
--- 158,175 ----
  
     procedure Get_Unqualified_Name_String (Id : Name_Id);
     --  Similar to the above except that qualification (as defined in unit
!    --  Exp_Dbug) is removed (including both preceding __ delimited names, and
!    --  also the suffixes used to indicate package body entities and to
     --  distinguish between overloaded entities). Note that names are not
!    --  qualified until just before the call to gigi, so this routine is only
!    --  needed by processing that occurs after gigi has been called. This
!    --  includes all ASIS processing, since ASIS works on the tree written
!    --  after gigi has been called.
  
     procedure Get_Name_String_And_Append (Id : Name_Id);
!    --  Like Get_Name_String but the resulting characters are appended to the
!    --  current contents of the entry stored in Name_Buffer, and Name_Len is
!    --  incremented to include the added characters.
  
     procedure Get_Decoded_Name_String (Id : Name_Id);
     --  Same calling sequence an interface as Get_Name_String, except that the
*************** package Namet is
*** 179,200 ****
  
     procedure Get_Unqualified_Decoded_Name_String (Id : Name_Id);
     --  Similar to the above except that qualification (as defined in unit
!    --  Exp_Dbug) is removed (including both preceding __ delimited names,
!    --  and also the suffix used to indicate package body entities). Note
!    --  that names are not qualified until just before the call to gigi, so
!    --  this routine is only needed by processing that occurs after gigi has
!    --  been called. This includes all ASIS processing, since ASIS works on
!    --  the tree written after gigi has been called.
  
     procedure Get_Decoded_Name_String_With_Brackets (Id : Name_Id);
     --  This routine is similar to Decoded_Name, except that the brackets
!    --  notation (Uhh replaced by ["hh"], Whhhh replaced by ["hhhh"]) is
!    --  used for all non-lower half characters, regardless of the setting
!    --  of Opt.Wide_Character_Encoding_Method, and also in that characters
!    --  in the range 16#80# .. 16#FF# are converted to brackets notation
!    --  in all cases. This routine can be used when there is a requirement
!    --  for a canonical representation not affected by the character set
!    --  options (e.g. in the binder generation of symbols).
  
     function Get_Name_Table_Byte (Id : Name_Id) return Byte;
     pragma Inline (Get_Name_Table_Byte);
--- 180,202 ----
  
     procedure Get_Unqualified_Decoded_Name_String (Id : Name_Id);
     --  Similar to the above except that qualification (as defined in unit
!    --  Exp_Dbug) is removed (including both preceding __ delimited names, and
!    --  also the suffix used to indicate package body entities). Note that
!    --  names are not qualified until just before the call to gigi, so this
!    --  routine is only needed by processing that occurs after gigi has been
!    --  called. This includes all ASIS processing, since ASIS works on the tree
!    --  written after gigi has been called.
  
     procedure Get_Decoded_Name_String_With_Brackets (Id : Name_Id);
     --  This routine is similar to Decoded_Name, except that the brackets
!    --  notation (Uhh replaced by ["hh"], Whhhh replaced by ["hhhh"],
!    --  WWhhhhhhhh replaced by ["hhhhhhhh"]) is used for all non-lower half
!    --  characters, regardless of how Opt.Wide_Character_Encoding_Method is
!    --  set, and also in that characters in the range 16#80# .. 16#FF# are
!    --  converted to brackets notation in all cases. This routine can be used
!    --  when there is a requirement for a canonical representation not affected
!    --  by the character set options (e.g. in the binder generation of
!    --  symbols).
  
     function Get_Name_Table_Byte (Id : Name_Id) return Byte;
     pragma Inline (Get_Name_Table_Byte);
*************** package Namet is
*** 204,213 ****
     pragma Inline (Get_Name_Table_Info);
     --  Fetches the Int value associated with the given name
  
     procedure Initialize;
     --  Initializes the names table, including initializing the first 26
!    --  entries in the table (for the 1-character lower case names a-z)
!    --  Note that Initialize must not be called if Tree_Read is used.
  
     procedure Lock;
     --  Lock name table before calling back end. Space for up to 10 extra
--- 206,219 ----
     pragma Inline (Get_Name_Table_Info);
     --  Fetches the Int value associated with the given name
  
+    function Is_Operator_Name (Id : Name_Id) return Boolean;
+    --  Returns True if name given is of the form of an operator (that
+    --  is, it starts with an upper case O).
+ 
     procedure Initialize;
     --  Initializes the names table, including initializing the first 26
!    --  entries in the table (for the 1-character lower case names a-z) Note
!    --  that Initialize must not be called if Tree_Read is used.
  
     procedure Lock;
     --  Lock name table before calling back end. Space for up to 10 extra
*************** package Namet is
*** 215,222 ****
  
     procedure Unlock;
     --  Unlocks the name table to allow use of the 10 extra names and 1000
!    --  extra characters reserved by the Lock call. See gnat1drv for details
!    --  of the need for this.
  
     function Length_Of_Name (Id : Name_Id) return Nat;
     pragma Inline (Length_Of_Name);
--- 221,228 ----
  
     procedure Unlock;
     --  Unlocks the name table to allow use of the 10 extra names and 1000
!    --  extra characters reserved by the Lock call. See gnat1drv for details of
!    --  the need for this.
  
     function Length_Of_Name (Id : Name_Id) return Nat;
     pragma Inline (Length_Of_Name);
*************** package Namet is
*** 226,243 ****
     --  Length_Of_Name does not affect the contents of Name_Len and Name_Buffer.
  
     function Name_Chars_Address return System.Address;
!    --  Return starting address of name characters table (used in Back_End
!    --  call to Gigi).
  
     function Name_Find return Name_Id;
!    --  Name_Find is called with a string stored in Name_Buffer whose length
!    --  is in Name_Len (i.e. the characters of the name are in subscript
!    --  positions 1 to Name_Len in Name_Buffer). It searches the names
!    --  table to see if the string has already been stored. If so the Id of
!    --  the existing entry is returned. Otherwise a new entry is created with
!    --  its Name_Table_Info field set to zero. The contents of Name_Buffer
!    --  and Name_Len are not modified by this call. Note that it is permissible
!    --  for Name_Len to be set to zero to lookup the null name string.
  
     function Name_Enter return Name_Id;
     --  Name_Enter has the same calling interface as Name_Find. The difference
--- 232,249 ----
     --  Length_Of_Name does not affect the contents of Name_Len and Name_Buffer.
  
     function Name_Chars_Address return System.Address;
!    --  Return starting address of name characters table (used in Back_End call
!    --  to Gigi).
  
     function Name_Find return Name_Id;
!    --  Name_Find is called with a string stored in Name_Buffer whose length is
!    --  in Name_Len (i.e. the characters of the name are in subscript positions
!    --  1 to Name_Len in Name_Buffer). It searches the names table to see if
!    --  the string has already been stored. If so the Id of the existing entry
!    --  is returned. Otherwise a new entry is created with its Name_Table_Info
!    --  field set to zero. The contents of Name_Buffer and Name_Len are not
!    --  modified by this call. Note that it is permissible for Name_Len to be
!    --  set to zero to lookup the null name string.
  
     function Name_Enter return Name_Id;
     --  Name_Enter has the same calling interface as Name_Find. The difference
*************** package Namet is
*** 251,257 ****
     --  hashing by Name_Find in any case.
  
     function Name_Entries_Address return System.Address;
!    --  Return starting address of Names table. Used in Back_End call to Gigi.
  
     function Name_Entries_Count return Nat;
     --  Return current number of entries in the names table
--- 257,263 ----
     --  hashing by Name_Find in any case.
  
     function Name_Entries_Address return System.Address;
!    --  Return starting address of Names table (used in Back_End call to Gigi)
  
     function Name_Entries_Count return Nat;
     --  Return current number of entries in the names table
*************** package Namet is
*** 270,285 ****
     --  with an underscore. This call destroys the value of Name_Len and
     --  Name_Buffer (it loads these as for Get_Name_String).
     --
!    --  Note: if the name is qualified (has a double underscore), then
!    --  only the final entity name is considered, not the qualifying
!    --  names. Consider for example that the name:
     --
     --    pkg__B_1__xyz
     --
!    --  is not an internal name, because the B comes from the internal
!    --  name of a qualifying block, but the xyz means that this was
!    --  indeed a declared identifier called "xyz" within this block
!    --  and there is nothing internal about that name.
  
     function Is_Internal_Name return Boolean;
     --  Like the form with an Id argument, except that the name to be tested is
--- 276,291 ----
     --  with an underscore. This call destroys the value of Name_Len and
     --  Name_Buffer (it loads these as for Get_Name_String).
     --
!    --  Note: if the name is qualified (has a double underscore), then only the
!    --  final entity name is considered, not the qualifying names. Consider for
!    --  example that the name:
     --
     --    pkg__B_1__xyz
     --
!    --  is not an internal name, because the B comes from the internal name of
!    --  a qualifying block, but the xyz means that this was indeed a declared
!    --  identifier called "xyz" within this block and there is nothing internal
!    --  about that name.
  
     function Is_Internal_Name return Boolean;
     --  Like the form with an Id argument, except that the name to be tested is
*************** package Namet is
*** 291,298 ****
     --  the name table info entries associated with current entries in the
     --  names table. There is no harm in keeping the names entries themselves
     --  from one compilation to another, but we can't keep the entity info,
!    --  since this refers to tree nodes, which are destroyed between each
!    --  main source file.
  
     procedure Add_Char_To_Name_Buffer (C : Character);
     pragma Inline (Add_Char_To_Name_Buffer);
--- 297,304 ----
     --  the name table info entries associated with current entries in the
     --  names table. There is no harm in keeping the names entries themselves
     --  from one compilation to another, but we can't keep the entity info,
!    --  since this refers to tree nodes, which are destroyed between each main
!    --  source file.
  
     procedure Add_Char_To_Name_Buffer (C : Character);
     pragma Inline (Add_Char_To_Name_Buffer);
*************** package Namet is
*** 324,342 ****
     --  Stores given character code at the end of Name_Buffer, updating the
     --  value in Name_Len appropriately. Lower case letters and digits are
     --  stored unchanged. Other 8-bit characters are stored using the Uhh
!    --  encoding (hh = hex code), and other 16-bit wide-character values
!    --  are stored using the Whhhh (hhhh = hex code) encoding. Note that
!    --  this procedure does not fold upper case letters (they are stored
!    --  using the Uhh encoding). If folding is required, it must be done
     --  by the caller prior to the call.
  
     procedure Tree_Read;
!    --  Initializes internal tables from current tree file using Tree_Read.
!    --  Note that Initialize should not be called if Tree_Read is used.
!    --  Tree_Read includes all necessary initialization.
  
     procedure Tree_Write;
!    --  Writes out internal tables to current tree file using Tree_Write
  
     procedure Get_Last_Two_Chars (N : Name_Id; C1, C2 : out Character);
     --  Obtains last two characters of a name. C1 is last but one character
--- 330,350 ----
     --  Stores given character code at the end of Name_Buffer, updating the
     --  value in Name_Len appropriately. Lower case letters and digits are
     --  stored unchanged. Other 8-bit characters are stored using the Uhh
!    --  encoding (hh = hex code), other 16-bit wide character values are stored
!    --  using the Whhhh (hhhh = hex code) encoding, and other 32-bit wide wide
!    --  character values are stored using the WWhhhhhhhh (hhhhhhhh = hex code).
!    --  Note that this procedure does not fold upper case letters (they are
!    --  stored using the Uhh encoding). If folding is required, it must be done
     --  by the caller prior to the call.
  
     procedure Tree_Read;
!    --  Initializes internal tables from current tree file using the relevant
!    --  Table.Tree_Read routines. Note that Initialize should not be called if
!    --  Tree_Read is used. Tree_Read includes all necessary initialization.
  
     procedure Tree_Write;
!    --  Writes out internal tables to current tree file using the relevant
!    --  Table.Tree_Write routines.
  
     procedure Get_Last_Two_Chars (N : Name_Id; C1, C2 : out Character);
     --  Obtains last two characters of a name. C1 is last but one character
*************** package Namet is
*** 371,380 ****
  
  private
  
!    --  This table stores the actual string names. Although logically there
!    --  is no need for a terminating character (since the length is stored
!    --  in the name entry table), we still store a NUL character at the end
!    --  of every name (for convenience in interfacing to the C world).
  
     package Name_Chars is new Table.Table (
       Table_Component_Type => Character,
--- 379,388 ----
  
  private
  
!    --  This table stores the actual string names. Although logically there is
!    --  no need for a terminating character (since the length is stored in the
!    --  name entry table), we still store a NUL character at the end of every
!    --  name (for convenience in interfacing to the C world).
  
     package Name_Chars is new Table.Table (
       Table_Component_Type => Character,
*************** private
*** 386,395 ****
  
     type Name_Entry is record
        Name_Chars_Index : Int;
!       --  Starting location of characters in the Name_Chars table minus
!       --  one (i.e. pointer to character just before first character). The
!       --  reason for the bias of one is that indexes in Name_Buffer are
!       --  one's origin, so this avoids unnecessary adds and subtracts of 1.
  
        Name_Len : Short;
        --  Length of this name in characters
--- 394,403 ----
  
     type Name_Entry is record
        Name_Chars_Index : Int;
!       --  Starting location of characters in the Name_Chars table minus one
!       --  (i.e. pointer to character just before first character). The reason
!       --  for the bias of one is that indexes in Name_Buffer are one's origin,
!       --  so this avoids unnecessary adds and subtracts of 1.
  
        Name_Len : Short;
        --  Length of this name in characters
diff -Nrcpad gcc-3.4.3/gcc/ada/nlists.adb gcc-4.0.0/gcc/ada/nlists.adb
*** gcc-3.4.3/gcc/ada/nlists.adb	Thu Apr 24 17:54:07 2003
--- gcc-4.0.0/gcc/ada/nlists.adb	Wed Dec  8 11:48:04 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2001 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Nlists is
*** 106,119 ****
     -- Local Subprograms --
     -----------------------
  
-    procedure Prepend_Debug (Node : Node_Id; To : List_Id);
-    pragma Inline (Prepend_Debug);
-    --  Output debug information if Debug_Flag_N set
- 
-    procedure Remove_Next_Debug (Node : Node_Id);
-    pragma Inline (Remove_Next_Debug);
-    --  Output debug information if Debug_Flag_N set
- 
     procedure Set_First (List : List_Id; To : Node_Id);
     pragma Inline (Set_First);
     --  Sets First field of list header List to reference To
--- 106,111 ----
*************** package body Nlists is
*** 155,160 ****
--- 147,156 ----
        pragma Inline (Append_Debug);
        --  Output debug information if Debug_Flag_N set
  
+       ------------------
+       -- Append_Debug --
+       ------------------
+ 
        procedure Append_Debug is
        begin
           if Debug_Flag_N then
*************** package body Nlists is
*** 202,207 ****
--- 198,207 ----
        pragma Inline (Append_List_Debug);
        --  Output debug information if Debug_Flag_N set
  
+       -----------------------
+       -- Append_List_Debug --
+       -----------------------
+ 
        procedure Append_List_Debug is
        begin
           if Debug_Flag_N then
*************** package body Nlists is
*** 288,296 ****
     -- First --
     -----------
  
-    --  This subprogram is deliberately placed early on, out of alphabetical
-    --  order, so that it can be properly inlined from within this unit.
- 
     function First (List : List_Id) return Node_Id is
     begin
        if List = No_List then
--- 288,293 ----
*************** package body Nlists is
*** 349,354 ****
--- 346,355 ----
        pragma Inline (Insert_After_Debug);
        --  Output debug information if Debug_Flag_N set
  
+       ------------------------
+       -- Insert_After_Debug --
+       ------------------------
+ 
        procedure Insert_After_Debug is
        begin
           if Debug_Flag_N then
*************** package body Nlists is
*** 403,408 ****
--- 404,413 ----
        pragma Inline (Insert_Before_Debug);
        --  Output debug information if Debug_Flag_N set
  
+       -------------------------
+       -- Insert_Before_Debug --
+       -------------------------
+ 
        procedure Insert_Before_Debug is
        begin
           if Debug_Flag_N then
*************** package body Nlists is
*** 457,462 ****
--- 462,471 ----
        pragma Inline (Insert_List_After_Debug);
        --  Output debug information if Debug_Flag_N set
  
+       -----------------------------
+       -- Insert_List_After_Debug --
+       -----------------------------
+ 
        procedure Insert_List_After_Debug is
        begin
           if Debug_Flag_N then
*************** package body Nlists is
*** 520,525 ****
--- 529,538 ----
        pragma Inline (Insert_List_Before_Debug);
        --  Output debug information if Debug_Flag_N set
  
+       ------------------------------
+       -- Insert_List_Before_Debug --
+       ------------------------------
+ 
        procedure Insert_List_Before_Debug is
        begin
           if Debug_Flag_N then
*************** package body Nlists is
*** 604,612 ****
     -- Last --
     ----------
  
-    --  This subprogram is deliberately placed early on, out of alphabetical
-    --  order, so that it can be properly inlined from within this unit.
- 
     function Last (List : List_Id) return Node_Id is
     begin
        pragma Assert (List in First_List_Id .. Lists.Last);
--- 617,622 ----
*************** package body Nlists is
*** 779,784 ****
--- 789,798 ----
        pragma Inline (New_List_Debug);
        --  Output debugging information if Debug_Flag_N is set
  
+       --------------------
+       -- New_List_Debug --
+       --------------------
+ 
        procedure New_List_Debug is
        begin
           if Debug_Flag_N then
*************** package body Nlists is
*** 816,821 ****
--- 830,839 ----
        pragma Inline (New_List_Debug);
        --  Output debugging information if Debug_Flag_N is set
  
+       --------------------
+       -- New_List_Debug --
+       --------------------
+ 
        procedure New_List_Debug is
        begin
           if Debug_Flag_N then
*************** package body Nlists is
*** 856,862 ****
  
     function New_List (Node1, Node2 : Node_Id) return List_Id is
        L : constant List_Id := New_List (Node1);
- 
     begin
        Append (Node2, L);
        return L;
--- 874,879 ----
*************** package body Nlists is
*** 864,870 ****
  
     function New_List (Node1, Node2, Node3 : Node_Id) return List_Id is
        L : constant List_Id := New_List (Node1);
- 
     begin
        Append (Node2, L);
        Append (Node3, L);
--- 881,886 ----
*************** package body Nlists is
*** 873,879 ****
  
     function New_List (Node1, Node2, Node3, Node4 : Node_Id) return List_Id is
        L : constant List_Id := New_List (Node1);
- 
     begin
        Append (Node2, L);
        Append (Node3, L);
--- 889,894 ----
*************** package body Nlists is
*** 886,896 ****
        Node2 : Node_Id;
        Node3 : Node_Id;
        Node4 : Node_Id;
!       Node5 : Node_Id)
!       return  List_Id
     is
        L : constant List_Id := New_List (Node1);
- 
     begin
        Append (Node2, L);
        Append (Node3, L);
--- 901,909 ----
        Node2 : Node_Id;
        Node3 : Node_Id;
        Node4 : Node_Id;
!       Node5 : Node_Id) return List_Id
     is
        L : constant List_Id := New_List (Node1);
     begin
        Append (Node2, L);
        Append (Node3, L);
*************** package body Nlists is
*** 905,915 ****
        Node3 : Node_Id;
        Node4 : Node_Id;
        Node5 : Node_Id;
!       Node6 : Node_Id)
!       return  List_Id
     is
        L : constant List_Id := New_List (Node1);
- 
     begin
        Append (Node2, L);
        Append (Node3, L);
--- 918,926 ----
        Node3 : Node_Id;
        Node4 : Node_Id;
        Node5 : Node_Id;
!       Node6 : Node_Id) return List_Id
     is
        L : constant List_Id := New_List (Node1);
     begin
        Append (Node2, L);
        Append (Node3, L);
*************** package body Nlists is
*** 923,931 ****
     -- Next --
     ----------
  
-    --  This subprogram is deliberately placed early on, out of alphabetical
-    --  order, so that it can be properly inlined from within this unit.
- 
     function Next (Node : Node_Id) return Node_Id is
     begin
        pragma Assert (Is_List_Member (Node));
--- 934,939 ----
*************** package body Nlists is
*** 958,964 ****
        loop
           N := Next (N);
           exit when Nkind (N) /= N_Pragma
!                     and then
                     Nkind (N) /= N_Null_Statement;
        end loop;
  
--- 966,972 ----
        loop
           N := Next (N);
           exit when Nkind (N) /= N_Pragma
!                      and then
                     Nkind (N) /= N_Null_Statement;
        end loop;
  
*************** package body Nlists is
*** 974,982 ****
     -- No --
     --------
  
-    --  This subprogram is deliberately placed early on, out of alphabetical
-    --  order, so that it can be properly inlined from within this unit.
- 
     function No (List : List_Id) return Boolean is
     begin
        return List = No_List;
--- 982,987 ----
*************** package body Nlists is
*** 999,1008 ****
     begin
        if U in Node_Range then
           return Parent (Node_Id (U));
- 
        elsif U in List_Range then
           return Parent (List_Id (U));
- 
        else
           return 99_999_999;
        end if;
--- 1004,1011 ----
*************** package body Nlists is
*** 1041,1046 ****
--- 1044,1070 ----
     procedure Prepend (Node : Node_Id; To : List_Id) is
        F : constant Node_Id := First (To);
  
+       procedure Prepend_Debug;
+       pragma Inline (Prepend_Debug);
+       --  Output debug information if Debug_Flag_N set
+ 
+       -------------------
+       -- Prepend_Debug --
+       -------------------
+ 
+       procedure Prepend_Debug is
+       begin
+          if Debug_Flag_N then
+             Write_Str ("Prepend node ");
+             Write_Int (Int (Node));
+             Write_Str (" to list ");
+             Write_Int (Int (To));
+             Write_Eol;
+          end if;
+       end Prepend_Debug;
+ 
+    --  Start of processing for Prepend_Debug
+ 
     begin
        pragma Assert (not Is_List_Member (Node));
  
*************** package body Nlists is
*** 1048,1054 ****
           return;
        end if;
  
!       pragma Debug (Prepend_Debug (Node, To));
  
        if No (F) then
           Set_Last (To, Node);
--- 1072,1078 ----
           return;
        end if;
  
!       pragma Debug (Prepend_Debug);
  
        if No (F) then
           Set_Last (To, Node);
*************** package body Nlists is
*** 1065,1085 ****
        Set_List_Link (Node, To);
     end Prepend;
  
-    -------------------
-    -- Prepend_Debug --
-    -------------------
- 
-    procedure Prepend_Debug (Node : Node_Id; To : List_Id) is
-    begin
-       if Debug_Flag_N then
-          Write_Str ("Prepend node ");
-          Write_Int (Int (Node));
-          Write_Str (" to list ");
-          Write_Int (Int (To));
-          Write_Eol;
-       end if;
-    end Prepend_Debug;
- 
     ----------------
     -- Prepend_To --
     ----------------
--- 1089,1094 ----
*************** package body Nlists is
*** 1102,1110 ****
     -- Prev --
     ----------
  
-    --  This subprogram is deliberately placed early on, out of alphabetical
-    --  order, so that it can be properly inlined from within this unit.
- 
     function Prev (Node : Node_Id) return Node_Id is
     begin
        pragma Assert (Is_List_Member (Node));
--- 1111,1116 ----
*************** package body Nlists is
*** 1160,1165 ****
--- 1166,1175 ----
        pragma Inline (Remove_Debug);
        --  Output debug information if Debug_Flag_N set
  
+       ------------------
+       -- Remove_Debug --
+       ------------------
+ 
        procedure Remove_Debug is
        begin
           if Debug_Flag_N then
*************** package body Nlists is
*** 1201,1206 ****
--- 1211,1220 ----
        pragma Inline (Remove_Head_Debug);
        --  Output debug information if Debug_Flag_N set
  
+       -----------------------
+       -- Remove_Head_Debug --
+       -----------------------
+ 
        procedure Remove_Head_Debug is
        begin
           if Debug_Flag_N then
*************** package body Nlists is
*** 1245,1250 ****
--- 1259,1283 ----
     function Remove_Next (Node : Node_Id) return Node_Id is
        Nxt : constant Node_Id := Next (Node);
  
+       procedure Remove_Next_Debug;
+       pragma Inline (Remove_Next_Debug);
+       --  Output debug information if Debug_Flag_N set
+ 
+       -----------------------
+       -- Remove_Next_Debug --
+       -----------------------
+ 
+       procedure Remove_Next_Debug is
+       begin
+          if Debug_Flag_N then
+             Write_Str ("Remove next node after ");
+             Write_Int (Int (Node));
+             Write_Eol;
+          end if;
+       end Remove_Next_Debug;
+ 
+    --  Start of processing for Remove_Next
+ 
     begin
        if Present (Nxt) then
           declare
*************** package body Nlists is
*** 1252,1258 ****
              LC   : constant List_Id := List_Containing (Node);
  
           begin
!             pragma Debug (Remove_Next_Debug (Node));
              Set_Next (Node, Nxt2);
  
              if No (Nxt2) then
--- 1285,1291 ----
              LC   : constant List_Id := List_Containing (Node);
  
           begin
!             pragma Debug (Remove_Next_Debug);
              Set_Next (Node, Nxt2);
  
              if No (Nxt2) then
*************** package body Nlists is
*** 1269,1294 ****
        return Nxt;
     end Remove_Next;
  
-    -----------------------
-    -- Remove_Next_Debug --
-    -----------------------
- 
-    procedure Remove_Next_Debug (Node : Node_Id) is
-    begin
-       if Debug_Flag_N then
-          Write_Str ("Remove next node after ");
-          Write_Int (Int (Node));
-          Write_Eol;
-       end if;
-    end Remove_Next_Debug;
- 
     ---------------
     -- Set_First --
     ---------------
  
-    --  This subprogram is deliberately placed early on, out of alphabetical
-    --  order, so that it can be properly inlined from within this unit.
- 
     procedure Set_First (List : List_Id; To : Node_Id) is
     begin
        Lists.Table (List).First := To;
--- 1302,1311 ----
*************** package body Nlists is
*** 1298,1306 ****
     -- Set_Last --
     --------------
  
-    --  This subprogram is deliberately placed early on, out of alphabetical
-    --  order, so that it can be properly inlined from within this unit.
- 
     procedure Set_Last (List : List_Id; To : Node_Id) is
     begin
        Lists.Table (List).Last := To;
--- 1315,1320 ----
*************** package body Nlists is
*** 1310,1318 ****
     -- Set_List_Link --
     -------------------
  
-    --  This subprogram is deliberately placed early on, out of alphabetical
-    --  order, so that it can be properly inlined from within this unit.
- 
     procedure Set_List_Link (Node : Node_Id; To : List_Id) is
     begin
        Nodes.Table (Node).Link := Union_Id (To);
--- 1324,1329 ----
*************** package body Nlists is
*** 1322,1330 ****
     -- Set_Next --
     --------------
  
-    --  This subprogram is deliberately placed early on, out of alphabetical
-    --  order, so that it can be properly inlined from within this unit.
- 
     procedure Set_Next (Node : Node_Id; To : Node_Id) is
     begin
        Next_Node.Table (Node) := To;
--- 1333,1338 ----
*************** package body Nlists is
*** 1344,1352 ****
     -- Set_Prev --
     --------------
  
-    --  This subprogram is deliberately placed early on, out of alphabetical
-    --  order, so that it can be properly inlined from within this unit.
- 
     procedure Set_Prev (Node : Node_Id; To : Node_Id) is
     begin
        Prev_Node.Table (Node) := To;
--- 1352,1357 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/nlists.ads gcc-4.0.0/gcc/ada/nlists.ads
*** gcc-3.4.3/gcc/ada/nlists.ads	Tue Oct 21 13:42:10 2003
--- gcc-4.0.0/gcc/ada/nlists.ads	Mon Jan  3 15:43:23 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Nlists is
*** 89,96 ****
        Node2 : Node_Id;
        Node3 : Node_Id;
        Node4 : Node_Id;
!       Node5 : Node_Id)
!       return  List_Id;
     --  Build a new list initially containing the five given nodes
  
     function New_List
--- 89,95 ----
        Node2 : Node_Id;
        Node3 : Node_Id;
        Node4 : Node_Id;
!       Node5 : Node_Id) return List_Id;
     --  Build a new list initially containing the five given nodes
  
     function New_List
*************** package Nlists is
*** 99,107 ****
        Node3 : Node_Id;
        Node4 : Node_Id;
        Node5 : Node_Id;
!       Node6 : Node_Id)
!       return  List_Id;
!    --  Build a new list initially containing the five given nodes
  
     function New_Copy_List (List : List_Id) return List_Id;
     --  Creates a new list containing copies (made with Atree.New_Copy) of every
--- 98,105 ----
        Node3 : Node_Id;
        Node4 : Node_Id;
        Node5 : Node_Id;
!       Node6 : Node_Id) return List_Id;
!    --  Build a new list initially containing the six given nodes
  
     function New_Copy_List (List : List_Id) return List_Id;
     --  Creates a new list containing copies (made with Atree.New_Copy) of every
*************** package Nlists is
*** 174,184 ****
  
     function Prev (Node : Node_Id) return Node_Id;
     pragma Inline (Prev);
!    --  This function returns the previous node on a node list list, or Empty if
!    --  Node is the first element of the node list. The argument must be a
!    --  member of a node list. Note that the implementation does not maintain
!    --  back pointers, so this function potentially requires traversal of the
!    --  entire list, or more accurately of the part of the list preceding Node.
  
     function Pick (List : List_Id; Index : Pos) return Node_Id;
     --  Given a list, picks out the Index'th entry (1 = first entry). The
--- 172,181 ----
  
     function Prev (Node : Node_Id) return Node_Id;
     pragma Inline (Prev);
!    --  This function returns the previous node on a node list list, or Empty
!    --  if Node is the first element of the node list. The argument must be
!    --  a member of a node list. Note: the implementation does maintain back
!    --  pointers, so this function executes quickly in constant time.
  
     function Pick (List : List_Id; Index : Pos) return Node_Id;
     --  Given a list, picks out the Index'th entry (1 = first entry). The
*************** package Nlists is
*** 193,200 ****
     --  This function returns the previous node on a node list, skipping any
     --  pragmas. If Node is the first element of the list, or if the only
     --  elements preceding it are pragmas, then Empty is returned. The
!    --  argument must be a member of a node list. Like Prev, this function
!    --  may require expensive traversal of the head section of the list.
  
     procedure Prev_Non_Pragma (Node : in out Node_Id);
     pragma Inline (Prev_Non_Pragma);
--- 190,198 ----
     --  This function returns the previous node on a node list, skipping any
     --  pragmas. If Node is the first element of the list, or if the only
     --  elements preceding it are pragmas, then Empty is returned. The
!    --  argument must be a member of a node list. Note: the implementation
!    --  does maintain back pointers, so this function executes quickly in
!    --  constant time.
  
     procedure Prev_Non_Pragma (Node : in out Node_Id);
     pragma Inline (Prev_Non_Pragma);
*************** package Nlists is
*** 261,267 ****
     --  List is reset to be the empty node list.
  
     procedure Prepend (Node : Node_Id; To : List_Id);
-    pragma Inline (Prepend);
     --  Prepends Node at the start of node list To. Node must be a non-empty
     --  node that is not already a member of a node list, and To must be a
     --  node list. An attempt to prepend an error node is ignored without
--- 259,264 ----
*************** package Nlists is
*** 281,287 ****
     --  is empty, then Empty is returned.
  
     function Remove_Next (Node : Node_Id) return Node_Id;
-    pragma Inline (Remove_Next);
     --  Removes the item immediately following the given node, and returns it
     --  as the result. If Node is the last element of the list, then Empty is
     --  returned. Node must be a member of a list. Unlike Remove, Remove_Next
--- 278,283 ----
*************** package Nlists is
*** 296,307 ****
     --  Called to lock tables before back end is called
  
     procedure Tree_Read;
!    --  Initializes internal tables from current tree file using Tree_Read.
!    --  Note that Initialize should not be called if Tree_Read is used.
!    --  Tree_Read includes all necessary initialization.
  
     procedure Tree_Write;
!    --  Writes out internal tables to current tree file using Tree_Write
  
     function Parent (List : List_Id) return Node_Id;
     pragma Inline (Parent);
--- 292,304 ----
     --  Called to lock tables before back end is called
  
     procedure Tree_Read;
!    --  Initializes internal tables from current tree file using the relevant
!    --  Table.Tree_Read routines. Note that Initialize should not be called if
!    --  Tree_Read is used. Tree_Read includes all necessary initialization.
  
     procedure Tree_Write;
!    --  Writes out internal tables to current tree file using the relevant
!    --  Table.Tree_Write routines.
  
     function Parent (List : List_Id) return Node_Id;
     pragma Inline (Parent);
diff -Nrcpad gcc-3.4.3/gcc/ada/opt.adb gcc-4.0.0/gcc/ada/opt.adb
*** gcc-3.4.3/gcc/ada/opt.adb	Mon Nov 24 14:27:57 2003
--- gcc-4.0.0/gcc/ada/opt.adb	Mon Sep 13 10:18:40 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Opt is
*** 49,55 ****
  
     procedure Register_Opt_Config_Switches is
     begin
!       Ada_83_Config                         := Ada_83;
        Dynamic_Elaboration_Checks_Config     := Dynamic_Elaboration_Checks;
        Exception_Locations_Suppressed_Config := Exception_Locations_Suppressed;
        Extensions_Allowed_Config             := Extensions_Allowed;
--- 49,55 ----
  
     procedure Register_Opt_Config_Switches is
     begin
!       Ada_Version_Config                    := Ada_Version;
        Dynamic_Elaboration_Checks_Config     := Dynamic_Elaboration_Checks;
        Exception_Locations_Suppressed_Config := Exception_Locations_Suppressed;
        Extensions_Allowed_Config             := Extensions_Allowed;
*************** package body Opt is
*** 65,72 ****
  
     procedure Restore_Opt_Config_Switches (Save : Config_Switches_Type) is
     begin
!       Ada_83                         := Save.Ada_83;
!       Ada_95                         := not Ada_83;
        Dynamic_Elaboration_Checks     := Save.Dynamic_Elaboration_Checks;
        Exception_Locations_Suppressed := Save.Exception_Locations_Suppressed;
        Extensions_Allowed             := Save.Extensions_Allowed;
--- 65,71 ----
  
     procedure Restore_Opt_Config_Switches (Save : Config_Switches_Type) is
     begin
!       Ada_Version                    := Save.Ada_Version;
        Dynamic_Elaboration_Checks     := Save.Dynamic_Elaboration_Checks;
        Exception_Locations_Suppressed := Save.Exception_Locations_Suppressed;
        Extensions_Allowed             := Save.Extensions_Allowed;
*************** package body Opt is
*** 82,88 ****
  
     procedure Save_Opt_Config_Switches (Save : out Config_Switches_Type) is
     begin
!       Save.Ada_83                         := Ada_83;
        Save.Dynamic_Elaboration_Checks     := Dynamic_Elaboration_Checks;
        Save.Exception_Locations_Suppressed := Exception_Locations_Suppressed;
        Save.Extensions_Allowed             := Extensions_Allowed;
--- 81,87 ----
  
     procedure Save_Opt_Config_Switches (Save : out Config_Switches_Type) is
     begin
!       Save.Ada_Version                    := Ada_Version;
        Save.Dynamic_Elaboration_Checks     := Dynamic_Elaboration_Checks;
        Save.Exception_Locations_Suppressed := Exception_Locations_Suppressed;
        Save.Extensions_Allowed             := Extensions_Allowed;
*************** package body Opt is
*** 99,106 ****
     procedure Set_Opt_Config_Switches (Internal_Unit : Boolean) is
     begin
        if Internal_Unit then
!          Ada_83                     := False;
!          Ada_95                     := True;
           Dynamic_Elaboration_Checks := False;
           Extensions_Allowed         := True;
           External_Name_Exp_Casing   := As_Is;
--- 98,104 ----
     procedure Set_Opt_Config_Switches (Internal_Unit : Boolean) is
     begin
        if Internal_Unit then
!          Ada_Version                := Ada_Version_Runtime;
           Dynamic_Elaboration_Checks := False;
           Extensions_Allowed         := True;
           External_Name_Exp_Casing   := As_Is;
*************** package body Opt is
*** 108,115 ****
           Use_VADS_Size              := False;
  
        else
!          Ada_83                     := Ada_83_Config;
!          Ada_95                     := not Ada_83_Config;
           Dynamic_Elaboration_Checks := Dynamic_Elaboration_Checks_Config;
           Extensions_Allowed         := Extensions_Allowed_Config;
           External_Name_Exp_Casing   := External_Name_Exp_Casing_Config;
--- 106,112 ----
           Use_VADS_Size              := False;
  
        else
!          Ada_Version                := Ada_Version_Config;
           Dynamic_Elaboration_Checks := Dynamic_Elaboration_Checks_Config;
           Extensions_Allowed         := Extensions_Allowed_Config;
           External_Name_Exp_Casing   := External_Name_Exp_Casing_Config;
*************** package body Opt is
*** 127,132 ****
--- 124,130 ----
  
     procedure Tree_Read is
        Tree_Version_String_Len : Nat;
+       Ada_Version_Config_Val  : Nat;
  
     begin
        Tree_Read_Int  (Tree_ASIS_Version_Number);
*************** package body Opt is
*** 139,150 ****
        Tree_Read_Bool (Verbose_Mode);
        Tree_Read_Data (Warning_Mode'Address,
                        Warning_Mode_Type'Object_Size / Storage_Unit);
!       Tree_Read_Bool (Ada_83_Config);
        Tree_Read_Bool (All_Errors_Mode);
        Tree_Read_Bool (Assertions_Enabled);
        Tree_Read_Bool (Enable_Overflow_Checks);
        Tree_Read_Bool (Full_List);
  
        --  Read version string: we have to check the length first
  
        Tree_Read_Int (Tree_Version_String_Len);
--- 137,150 ----
        Tree_Read_Bool (Verbose_Mode);
        Tree_Read_Data (Warning_Mode'Address,
                        Warning_Mode_Type'Object_Size / Storage_Unit);
!       Tree_Read_Int  (Ada_Version_Config_Val);
        Tree_Read_Bool (All_Errors_Mode);
        Tree_Read_Bool (Assertions_Enabled);
        Tree_Read_Bool (Enable_Overflow_Checks);
        Tree_Read_Bool (Full_List);
  
+       Ada_Version_Config := Ada_Version_Type'Val (Ada_Version_Config_Val);
+ 
        --  Read version string: we have to check the length first
  
        Tree_Read_Int (Tree_Version_String_Len);
*************** package body Opt is
*** 198,204 ****
        Tree_Write_Bool (Verbose_Mode);
        Tree_Write_Data (Warning_Mode'Address,
                         Warning_Mode_Type'Object_Size / Storage_Unit);
!       Tree_Write_Bool (Ada_83_Config);
        Tree_Write_Bool (All_Errors_Mode);
        Tree_Write_Bool (Assertions_Enabled);
        Tree_Write_Bool (Enable_Overflow_Checks);
--- 198,204 ----
        Tree_Write_Bool (Verbose_Mode);
        Tree_Write_Data (Warning_Mode'Address,
                         Warning_Mode_Type'Object_Size / Storage_Unit);
!       Tree_Write_Int  (Ada_Version_Type'Pos (Ada_Version_Config));
        Tree_Write_Bool (All_Errors_Mode);
        Tree_Write_Bool (Assertions_Enabled);
        Tree_Write_Bool (Enable_Overflow_Checks);
diff -Nrcpad gcc-3.4.3/gcc/ada/opt.ads gcc-4.0.0/gcc/ada/opt.ads
*** gcc-3.4.3/gcc/ada/opt.ads	Tue Jan 13 11:51:33 2004
--- gcc-4.0.0/gcc/ada/opt.ads	Thu Feb 10 13:50:32 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Opt is
*** 60,74 ****
     --  GNATBIND, GNATLINK
     --  Set True if binder file to be generated in Ada rather than C
  
!    Ada_95 : Boolean := True;
     --  GNAT
!    --  Set True if operating in Ada 95 mode
!    --  Set False if operating in Ada 83 mode
  
!    Ada_83 : Boolean := False;
     --  GNAT
!    --  Set True if operating in Ada 83 mode
!    --  Set False if operating in Ada 95 mode
  
     Ada_Final_Suffix : constant String := "final";
     Ada_Final_Name : String_Ptr := new String'("ada" & Ada_Final_Suffix);
--- 60,80 ----
     --  GNATBIND, GNATLINK
     --  Set True if binder file to be generated in Ada rather than C
  
!    type Ada_Version_Type is (Ada_83, Ada_95, Ada_05);
!    --  Versions of Ada for Ada_Version below. Note that these are ordered,
!    --  so that tests like Ada_Version >= Ada_95 are legitimate and useful.
! 
!    Ada_Version_Default : Ada_Version_Type := Ada_95;
     --  GNAT
!    --  Default Ada version if no switch given
  
!    Ada_Version : Ada_Version_Type := Ada_Version_Default;
     --  GNAT
!    --  Current Ada version for compiler
! 
!    Ada_Version_Runtime : Ada_Version_Type := Ada_05;
!    --  GNAT
!    --  Ada version used to compile the runtime
  
     Ada_Final_Suffix : constant String := "final";
     Ada_Final_Name : String_Ptr := new String'("ada" & Ada_Final_Suffix);
*************** package Opt is
*** 247,263 ****
  
     Create_Mapping_File : Boolean := False;
     --  GNATMAKE
!    --  Set to True (-C switch) to indicate that gnatmake
!    --  invokes the compiler with a mapping file (-gnatem compiler switch).
  
     subtype Debug_Level_Value is Nat range 0 .. 3;
     Debugger_Level : Debug_Level_Value := 0;
     --  GNATBIND
!    --  The value given to the -g parameter.
!    --  The default value for -g with no value is 2
!    --  This is usually ignored by GNATBIND, except in the VMS version
!    --  where it is passed as an argument to __gnat_initialize to trigger
!    --  the activation of the remote debugging interface (is this true???).
  
     Debug_Generated_Code : Boolean := False;
     --  GNAT
--- 253,269 ----
  
     Create_Mapping_File : Boolean := False;
     --  GNATMAKE
!    --  Set to True (-C switch) to indicate that gnatmake will invoke
!    --  the compiler with a mapping file (-gnatem compiler switch).
  
     subtype Debug_Level_Value is Nat range 0 .. 3;
     Debugger_Level : Debug_Level_Value := 0;
     --  GNATBIND
!    --  The value given to the -g parameter. The default value for -g with
!    --  no value is 2. This is usually ignored by GNATBIND, except in the
!    --  VMS version where it is passed as an argument to __gnat_initialize
!    --  to trigger the activation of the remote debugging interface.
!    --  Is this still true ???
  
     Debug_Generated_Code : Boolean := False;
     --  GNAT
*************** package Opt is
*** 265,270 ****
--- 271,281 ----
     --  of the original source code. Causes debugging information to be
     --  written with respect to the generated code file that is written.
  
+    Default_Exit_Status : Int := 0;
+    --  GNATBIND
+    --  Set the default exit status value. Set by the -Xnnn switch for the
+    --  binder.
+ 
     Default_Sec_Stack_Size : Int := -1;
     --  GNATBIND
     --  Set to default secondary stack size in units of kilobytes. Set by
*************** package Opt is
*** 272,282 ****
     --  default was set by the binder, and that the default should be the
     --  initial value of System.Secondary_Stack.Default_Secondary_Stack_Size.
  
     Display_Compilation_Progress : Boolean := False;
     --  GNATMAKE
     --  Set True (-d switch) to display information on progress while compiling
!    --  files. Internal flag to be used in conjunction with an IDE such as
!    --  Glide.
  
     type Distribution_Stub_Mode_Type is
     --  GNAT
--- 283,297 ----
     --  default was set by the binder, and that the default should be the
     --  initial value of System.Secondary_Stack.Default_Secondary_Stack_Size.
  
+    Detect_Blocking : Boolean := False;
+    --  GNAT
+    --  Set True to force the run time to raise Program_Error if calls to
+    --  potentially blocking operations are detected from protected actions.
+ 
     Display_Compilation_Progress : Boolean := False;
     --  GNATMAKE
     --  Set True (-d switch) to display information on progress while compiling
!    --  files. Internal flag to be used in conjunction with an IDE (e.g GPS).
  
     type Distribution_Stub_Mode_Type is
     --  GNAT
*************** package Opt is
*** 369,375 ****
     Extensions_Allowed : Boolean := False;
     --  GNAT
     --  Set to True by switch -gnatX if GNAT specific language extensions
!    --  are allowed. For example, "with type" is a GNAT extension.
  
     type External_Casing_Type is (
       As_Is,       -- External names cased as they appear in the Ada source
--- 384,390 ----
     Extensions_Allowed : Boolean := False;
     --  GNAT
     --  Set to True by switch -gnatX if GNAT specific language extensions
!    --  are allowed. For example, "limited with" is a GNAT extension.
  
     type External_Casing_Type is (
       As_Is,       -- External names cased as they appear in the Ada source
*************** package Opt is
*** 398,403 ****
--- 413,423 ----
     --  effect if an explicit Link_Name is supplied (a link name is always
     --  used exactly as given).
  
+    External_Unit_Compilation_Allowed : Boolean := False;
+    --  GNATMAKE
+    --  When True (set by gnatmake switch -x), allow compilation of sources
+    --  that are not part of any project file.
+ 
     Float_Format : Character := ' ';
     --  GNAT
     --  A non-blank value indicates that a Float_Format pragma has been
*************** package Opt is
*** 450,457 ****
     GCC_Version : constant Nat := get_gcc_version;
     --  GNATMAKE
     --  Indicates which version of gcc is in use (2 = 2.8.1, 3 = 3.x).
-    --  Used in particular to decide if gcc switch -shared-libgcc should be
-    --  used (it cannot be used for 2.8.1).
  
     Global_Discard_Names : Boolean := False;
     --  GNAT, GNATBIND
--- 470,475 ----
*************** package Opt is
*** 483,489 ****
     --    'p'  PC (US, IBM page 437)
     --    '8'  PC (European, IBM page 850)
     --    'f'  Full upper set (all distinct)
!    --    'n'  No upper characters (Ada/83 rules)
     --    'w'  Latin-1 plus wide characters allowed in identifiers
     --
     --  The setting affects the set of letters allowed in identifiers and the
--- 501,507 ----
     --    'p'  PC (US, IBM page 437)
     --    '8'  PC (European, IBM page 850)
     --    'f'  Full upper set (all distinct)
!    --    'n'  No upper characters (Ada 83 rules)
     --    'w'  Latin-1 plus wide characters allowed in identifiers
     --
     --  The setting affects the set of letters allowed in identifiers and the
*************** package Opt is
*** 526,531 ****
--- 544,553 ----
     --  then elaboration flag checks are to be generated in the binder
     --  generated file.
  
+    Follow_Links : Boolean := False;
+    --  GNATMAKE
+    --  Set to True (-eL) to process the project files in trusted mode
+ 
     Front_End_Inlining : Boolean := False;
     --  GNAT
     --  Set True to activate inlining by front-end expansion.
*************** package Opt is
*** 547,552 ****
--- 569,579 ----
     --  When True signals gnatmake to ignore compilation errors and keep
     --  processing sources until there is no more work.
  
+    Keep_Temporary_Files : Boolean := False;
+    --  GNATCMD
+    --  When True the temporary files created by the GNAT driver are not
+    --  deleted. Set by switch -dn or qualifier /KEEP_TEMPORARY_FILES.
+ 
     Link_Only : Boolean := False;
     --  GNATMAKE
     --  Set to True to skip compile and bind steps
*************** package Opt is
*** 634,639 ****
--- 661,671 ----
     --  Set to True when either Compile_Only, Bind_Only or Link_Only is
     --  set to True.
  
+    Main_Index : Int := 0;
+    --  GNATMAKE
+    --  This is set to non-zero by gnatmake switch -eInnn to indicate that
+    --  the main program is the nnn unit in a multi-unit source file.
+ 
     Mapping_File_Name : String_Ptr := null;
     --  GNAT
     --  File name of mapping between unit names, file names and path names.
*************** package Opt is
*** 650,655 ****
--- 682,696 ----
     --  extension, as set by the appropriate switch. If no switch is given,
     --  then this value is initialized by Osint to the appropriate value.
  
+    Max_Line_Length : Int := Hostparm.Max_Line_Length;
+    --  This is a copy of Max_Line_Length used by the scanner. It is usually
+    --  set to be a copy of Hostparm.Max_Line_Length, and is used to check
+    --  the maximum line length in the scanner when style checking is inactive.
+    --  The only time it is set to a different value is during the scanning of
+    --  configuration pragma files, where we want to turn off all checking and
+    --  in particular we want to allow long lines. So we reset this value to
+    --  Column_Number'Last during scanning of configuration pragma files.
+ 
     Maximum_Processes : Positive := 1;
     --  GNATMAKE
     --  Maximum number of processes that should be spawned to carry out
*************** package Opt is
*** 659,671 ****
     --  GNATMAKE
     --  Set to True if minimal recompilation mode requested.
  
!    No_Stdlib : Boolean := False;
!    --  GNATMAKE, GNATBIND, GNATFIND, GNATXREF
!    --  Set to True if no default library search dirs added to search list.
! 
!    No_Stdinc : Boolean := False;
!    --  GNAT, GNATBIND, GNATMAKE, GNATFIND, GNATXREF
!    --  Set to True if no default source search dirs added to search list.
  
     No_Main_Subprogram : Boolean := False;
     --  GNATMAKE, GNATBIND
--- 700,712 ----
     --  GNATMAKE
     --  Set to True if minimal recompilation mode requested.
  
!    Multiple_Unit_Index : Int;
!    --  GNAT
!    --  This is set non-zero if the current unit is being compiled in multiple
!    --  unit per file mode, meaning that the current unit is selected from the
!    --  sequence of units in the current source file, using the value stored
!    --  in this variable (e.g. 2 = select second unit in file). A value of
!    --  zero indicates that we are in normal (one unit per file) mode.
  
     No_Main_Subprogram : Boolean := False;
     --  GNATMAKE, GNATBIND
*************** package Opt is
*** 677,682 ****
--- 718,735 ----
     --  This flag is set True if a No_Run_Time pragma is encountered. See
     --  spec of Rtsfind for a full description of handling of this pragma.
  
+    No_Stdinc : Boolean := False;
+    --  GNAT, GNATBIND, GNATMAKE, GNATFIND, GNATXREF
+    --  Set to True if no default source search dirs added to search list
+ 
+    No_Stdlib : Boolean := False;
+    --  GNATMAKE, GNATBIND, GNATFIND, GNATXREF
+    --  Set to True if no default library search dirs added to search list
+ 
+    No_Strict_Aliasing : Boolean := False;
+    --  GNAT
+    --  Set True if pragma No_Strict_Aliasing with no parameters encountered
+ 
     Normalize_Scalars : Boolean := False;
     --  GNAT, GNATBIND
     --  Set True if a pragma Normalize_Scalars applies to the current unit.
*************** package Opt is
*** 793,798 ****
--- 846,856 ----
     --  Set True if generated code uses the System.Secondary_Stack package.
     --  For the binder, set if any unit uses the secondary stack package.
  
+    Setup_Projects : Boolean := False;
+    --  GNAT DRIVER
+    --  Set to True for GNAT SETUP: the Project Manager creates non existing
+    --  object, library and exec directories.
+ 
     Shared_Libgnat : Boolean;
     --  GNATBIND
     --  Set to True if a shared libgnat is requested by using the -shared
*************** package Opt is
*** 1055,1069 ****
     --  command line switches, or by the use of appropriate configuration
     --  pragmas in the gnat.adc file.
  
!    Ada_83_Config : Boolean;
     --  GNAT
!    --  This is the value of the configuration switch for Ada 83 mode, as set
!    --  by the command line switch -gnat83, and possibly modified by the use
!    --  of configuration pragmas Ada_95 and Ada_83 in the gnat.adc file. This
!    --  switch is used to set the initial value for Ada_83 mode at the start
     --  of analysis of a unit. Note however, that the setting of this flag
     --  is ignored for internal and predefined units (which are always compiled
!    --  in Ada 95 mode).
  
     Dynamic_Elaboration_Checks_Config : Boolean := False;
     --  GNAT
--- 1113,1127 ----
     --  command line switches, or by the use of appropriate configuration
     --  pragmas in the gnat.adc file.
  
!    Ada_Version_Config : Ada_Version_Type;
     --  GNAT
!    --  This is the value of the configuration switch for the Ada 83 mode, as
!    --  set by the command line switches -gnat83/95/05, and possibly modified
!    --  by the use of configuration pragmas Ada_83/Ada95/Ada05. This switch
!    --  is used to set the initial value for Ada_Version mode at the start
     --  of analysis of a unit. Note however, that the setting of this flag
     --  is ignored for internal and predefined units (which are always compiled
!    --  in the most up to date version of Ada).
  
     Dynamic_Elaboration_Checks_Config : Boolean := False;
     --  GNAT
*************** package Opt is
*** 1195,1201 ****
  private
  
     type Config_Switches_Type is record
!       Ada_83                         : Boolean;
        Dynamic_Elaboration_Checks     : Boolean;
        Exception_Locations_Suppressed : Boolean;
        Extensions_Allowed             : Boolean;
--- 1253,1259 ----
  private
  
     type Config_Switches_Type is record
!       Ada_Version                    : Ada_Version_Type;
        Dynamic_Elaboration_Checks     : Boolean;
        Exception_Locations_Suppressed : Boolean;
        Extensions_Allowed             : Boolean;
diff -Nrcpad gcc-3.4.3/gcc/ada/osint-c.adb gcc-4.0.0/gcc/ada/osint-c.adb
*** gcc-3.4.3/gcc/ada/osint-c.adb	Tue Oct 21 13:42:10 2003
--- gcc-4.0.0/gcc/ada/osint-c.adb	Thu Apr  1 10:04:38 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 2001-2003 Free Software Foundation, Inc.           --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 2001-2004 Free Software Foundation, Inc.           --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Osint.C is
*** 43,50 ****
  
     function Create_Auxiliary_File
       (Src    : File_Name_Type;
!       Suffix : String)
!       return   File_Name_Type;
     --  Common processing for Creat_Repinfo_File and Create_Debug_File.
     --  Src is the file name used to create the required output file and
     --  Suffix is the desired suffic (dg/rep for debug/repinfo file).
--- 43,49 ----
  
     function Create_Auxiliary_File
       (Src    : File_Name_Type;
!       Suffix : String) return File_Name_Type;
     --  Common processing for Creat_Repinfo_File and Create_Debug_File.
     --  Src is the file name used to create the required output file and
     --  Suffix is the desired suffic (dg/rep for debug/repinfo file).
*************** package body Osint.C is
*** 52,58 ****
     procedure Set_Library_Info_Name;
     --  Sets a default ali file name from the main compiler source name.
     --  This is used by Create_Output_Library_Info, and by the version of
!    --  Read_Library_Info that takes a default file name.
  
     ----------------------
     -- Close_Debug_File --
--- 51,58 ----
     procedure Set_Library_Info_Name;
     --  Sets a default ali file name from the main compiler source name.
     --  This is used by Create_Output_Library_Info, and by the version of
!    --  Read_Library_Info that takes a default file name. The name is in
!    --  Name_Buffer (with length in Name_Len) on return from the call
  
     ----------------------
     -- Close_Debug_File --
*************** package body Osint.C is
*** 60,65 ****
--- 60,66 ----
  
     procedure Close_Debug_File is
        Status : Boolean;
+ 
     begin
        Close (Output_FD, Status);
  
*************** package body Osint.C is
*** 76,81 ****
--- 77,83 ----
  
     procedure Close_Output_Library_Info is
        Status : Boolean;
+ 
     begin
        Close (Output_FD, Status);
  
*************** package body Osint.C is
*** 92,97 ****
--- 94,100 ----
  
     procedure Close_Repinfo_File is
        Status : Boolean;
+ 
     begin
        Close (Output_FD, Status);
  
*************** package body Osint.C is
*** 108,115 ****
  
     function Create_Auxiliary_File
       (Src    : File_Name_Type;
!       Suffix : String)
!       return   File_Name_Type
     is
        Result : File_Name_Type;
  
--- 111,117 ----
  
     function Create_Auxiliary_File
       (Src    : File_Name_Type;
!       Suffix : String) return   File_Name_Type
     is
        Result : File_Name_Type;
  
*************** package body Osint.C is
*** 256,273 ****
        --  To compare them, remove file name directories and extensions.
  
        if Output_Object_File_Name /= null then
           --  Make sure there is a dot at Dot_Index. This may not be the case
           --  if the source file name has no extension.
  
           Name_Buffer (Dot_Index) := '.';
  
           declare
              Name : constant String  := Name_Buffer (1 .. Dot_Index);
              Len  : constant Natural := Dot_Index;
  
           begin
!             Name_Buffer (1 .. Output_Object_File_Name'Length)
!                := Output_Object_File_Name.all;
              Dot_Index := 0;
  
              for J in reverse Output_Object_File_Name'Range loop
--- 258,293 ----
        --  To compare them, remove file name directories and extensions.
  
        if Output_Object_File_Name /= null then
+ 
           --  Make sure there is a dot at Dot_Index. This may not be the case
           --  if the source file name has no extension.
  
           Name_Buffer (Dot_Index) := '.';
  
+          --  If we are in multiple unit per file mode, then add ~nnn
+          --  extension to the name before doing the comparison.
+ 
+          if Multiple_Unit_Index /= 0 then
+             declare
+                Exten : constant String := Name_Buffer (Dot_Index .. Name_Len);
+             begin
+                Name_Len := Dot_Index - 1;
+                Add_Char_To_Name_Buffer (Multi_Unit_Index_Character);
+                Add_Nat_To_Name_Buffer (Multiple_Unit_Index);
+                Dot_Index := Name_Len + 1;
+                Add_Str_To_Name_Buffer (Exten);
+             end;
+          end if;
+ 
+          --  Remove extension preparing to replace it
+ 
           declare
              Name : constant String  := Name_Buffer (1 .. Dot_Index);
              Len  : constant Natural := Dot_Index;
  
           begin
!             Name_Buffer (1 .. Output_Object_File_Name'Length) :=
!               Output_Object_File_Name.all;
              Dot_Index := 0;
  
              for J in reverse Output_Object_File_Name'Range loop
*************** package body Osint.C is
*** 277,284 ****
                 end if;
              end loop;
  
              pragma Assert (Dot_Index /= 0);
!             --  We check for the extension elsewhere
  
              if Name /= Name_Buffer (Dot_Index - Len + 1 .. Dot_Index) then
                 Fail ("incorrect object file name");
--- 297,307 ----
                 end if;
              end loop;
  
+             --  Dot_Index should be zero now (we check for extension elsewhere)
+ 
              pragma Assert (Dot_Index /= 0);
! 
!             --  Check name of object file is what we expect
  
              if Name /= Name_Buffer (Dot_Index - Len + 1 .. Dot_Index) then
                 Fail ("incorrect object file name");
diff -Nrcpad gcc-3.4.3/gcc/ada/osint.adb gcc-4.0.0/gcc/ada/osint.adb
*** gcc-3.4.3/gcc/ada/osint.adb	Thu Apr  8 17:26:54 2004
--- gcc-4.0.0/gcc/ada/osint.adb	Tue Jul 20 10:26:51 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Osint is
*** 520,526 ****
     -- Add_File --
     --------------
  
!    procedure Add_File (File_Name : String) is
     begin
        Number_File_Names := Number_File_Names + 1;
  
--- 520,526 ----
     -- Add_File --
     --------------
  
!    procedure Add_File (File_Name : String; Index : Int := No_Index) is
     begin
        Number_File_Names := Number_File_Names + 1;
  
*************** package body Osint is
*** 530,538 ****
  
        if Number_File_Names > File_Names'Last then
           File_Names := new File_Name_Array'(File_Names.all & File_Names.all);
        end if;
  
!       File_Names (Number_File_Names) := new String'(File_Name);
     end Add_File;
  
     ------------------------
--- 530,541 ----
  
        if Number_File_Names > File_Names'Last then
           File_Names := new File_Name_Array'(File_Names.all & File_Names.all);
+          File_Indexes :=
+            new File_Index_Array'(File_Indexes.all & File_Indexes.all);
        end if;
  
!       File_Names   (Number_File_Names) := new String'(File_Name);
!       File_Indexes (Number_File_Names) := Index;
     end Add_File;
  
     ------------------------
*************** package body Osint is
*** 670,675 ****
--- 673,687 ----
        end if;
     end Create_File_And_Check;
  
+    ------------------------
+    -- Current_File_Index --
+    ------------------------
+ 
+    function Current_File_Index return Int is
+    begin
+       return File_Indexes (Current_File_Name_Index);
+    end Current_File_Index;
+ 
     --------------------------------
     -- Current_Library_File_Stamp --
     --------------------------------
*************** package body Osint is
*** 750,762 ****
        return Name_Enter;
     end Executable_Name;
  
!    -------------------------
     -- Executable_Prefix --
!    -------------------------
  
     function Executable_Prefix return String_Ptr is
-       Exec_Name : String (1 .. Len_Arg (0));
- 
        function Get_Install_Dir (Exec : String) return String_Ptr;
        --  S is the executable name preceeded by the absolute or relative
        --  path, e.g. "c:\usr\bin\gcc.exe" or "..\bin\gcc".
--- 762,772 ----
        return Name_Enter;
     end Executable_Name;
  
!    -----------------------
     -- Executable_Prefix --
!    -----------------------
  
     function Executable_Prefix return String_Ptr is
        function Get_Install_Dir (Exec : String) return String_Ptr;
        --  S is the executable name preceeded by the absolute or relative
        --  path, e.g. "c:\usr\bin\gcc.exe" or "..\bin\gcc".
*************** package body Osint is
*** 790,810 ****
     --  Start of processing for Executable_Prefix
  
     begin
!       Osint.Fill_Arg (Exec_Name'Address, 0);
  
        --  First determine if a path prefix was placed in front of the
        --  executable name.
  
        for J in reverse Exec_Name'Range loop
           if Is_Directory_Separator (Exec_Name (J)) then
!             return Get_Install_Dir (Exec_Name);
           end if;
        end loop;
  
        --  If we come here, the user has typed the executable name with no
        --  directory prefix.
  
!       return Get_Install_Dir (GNAT.OS_Lib.Locate_Exec_On_Path (Exec_Name).all);
     end Executable_Prefix;
  
     ------------------
--- 800,824 ----
     --  Start of processing for Executable_Prefix
  
     begin
!       if Exec_Name = null then
!          Exec_Name := new String (1 .. Len_Arg (0));
!          Osint.Fill_Arg (Exec_Name (1)'Address, 0);
!       end if;
  
        --  First determine if a path prefix was placed in front of the
        --  executable name.
  
        for J in reverse Exec_Name'Range loop
           if Is_Directory_Separator (Exec_Name (J)) then
!             return Get_Install_Dir (Exec_Name.all);
           end if;
        end loop;
  
        --  If we come here, the user has typed the executable name with no
        --  directory prefix.
  
!       return Get_Install_Dir
!         (GNAT.OS_Lib.Locate_Exec_On_Path (Exec_Name.all).all);
     end Executable_Prefix;
  
     ------------------
*************** package body Osint is
*** 1015,1027 ****
  
        if Command_Name (Cindex2) in '0' .. '9' then
           for J in reverse Cindex1 .. Cindex2 loop
- 
-             exit when Command_Name (J) not in '0' .. '9';
- 
              if Command_Name (J) = '.' or Command_Name (J) = ';' then
                 Cindex2 := J - 1;
                 exit;
              end if;
           end loop;
        end if;
  
--- 1029,1040 ----
  
        if Command_Name (Cindex2) in '0' .. '9' then
           for J in reverse Cindex1 .. Cindex2 loop
              if Command_Name (J) = '.' or Command_Name (J) = ';' then
                 Cindex2 := J - 1;
                 exit;
              end if;
+ 
+             exit when Command_Name (J) not in '0' .. '9';
           end loop;
        end if;
  
*************** package body Osint is
*** 1163,1171 ****
        return Src_Search_Directories.Table (Primary_Directory);
     end Get_Primary_Src_Search_Directory;
  
!    -------------------------
!    --  Get_RTS_Search_Dir --
!    -------------------------
  
     function Get_RTS_Search_Dir
       (Search_Dir : String;
--- 1176,1184 ----
        return Src_Search_Directories.Table (Primary_Directory);
     end Get_Primary_Src_Search_Directory;
  
!    ------------------------
!    -- Get_RTS_Search_Dir --
!    ------------------------
  
     function Get_RTS_Search_Dir
       (Search_Dir : String;
*************** package body Osint is
*** 1415,1441 ****
     -------------------
  
     function Lib_File_Name
!      (Source_File : File_Name_Type)
!       return        File_Name_Type
     is
-       Fptr : Natural;
-       --  Pointer to location to set extension in place
- 
     begin
        Get_Name_String (Source_File);
-       Fptr := Name_Len + 1;
  
        for J in reverse 2 .. Name_Len loop
           if Name_Buffer (J) = '.' then
!             Fptr := J;
              exit;
           end if;
        end loop;
  
!       Name_Buffer (Fptr) := '.';
!       Name_Buffer (Fptr + 1 .. Fptr + ALI_Suffix'Length) := ALI_Suffix.all;
!       Name_Buffer (Fptr + ALI_Suffix'Length + 1) := ASCII.NUL;
!       Name_Len := Fptr + ALI_Suffix'Length;
        return Name_Find;
     end Lib_File_Name;
  
--- 1428,1453 ----
     -------------------
  
     function Lib_File_Name
!      (Source_File : File_Name_Type;
!       Munit_Index : Nat := 0) return File_Name_Type
     is
     begin
        Get_Name_String (Source_File);
  
        for J in reverse 2 .. Name_Len loop
           if Name_Buffer (J) = '.' then
!             Name_Len := J - 1;
              exit;
           end if;
        end loop;
  
!       if Munit_Index /= 0 then
!          Add_Char_To_Name_Buffer (Multi_Unit_Index_Character);
!          Add_Nat_To_Name_Buffer (Munit_Index);
!       end if;
! 
!       Add_Char_To_Name_Buffer ('.');
!       Add_Str_To_Name_Buffer (ALI_Suffix.all);
        return Name_Find;
     end Lib_File_Name;
  
*************** package body Osint is
*** 1818,1825 ****
--- 1830,1847 ----
        --  "alpha-dec-vxworks-"
  
        while Name_Len > 0  loop
+ 
+          --  All done if we find the last hyphen
+ 
           if Name_Buffer (Name_Len) = '-' then
              exit;
+ 
+          --  If directory separator found, we don't want to look further
+          --  since in this case, no prefix has been found.
+ 
+          elsif Is_Directory_Separator (Name_Buffer (Name_Len)) then
+             Name_Len := 0;
+             exit;
           end if;
  
           Name_Len := Name_Len - 1;
*************** package body Osint is
*** 2156,2162 ****
           type Actual_Source_Ptr is access Actual_Source_Buffer;
           --  This is the pointer type for the physical buffer allocated
  
!          Actual_Ptr : Actual_Source_Ptr := new Actual_Source_Buffer;
           --  And this is the actual physical buffer
  
        begin
--- 2178,2184 ----
           type Actual_Source_Ptr is access Actual_Source_Buffer;
           --  This is the pointer type for the physical buffer allocated
  
!          Actual_Ptr : constant Actual_Source_Ptr := new Actual_Source_Buffer;
           --  And this is the actual physical buffer
  
        begin
*************** package body Osint is
*** 2182,2190 ****
--- 2204,2217 ----
           declare
              pragma Suppress (All_Checks);
  
+             pragma Warnings (Off);
+             --  This use of unchecked conversion is aliasing safe
+ 
              function To_Source_Buffer_Ptr is new
                Unchecked_Conversion (Address, Source_Buffer_Ptr);
  
+             pragma Warnings (On);
+ 
           begin
              Src := To_Source_Buffer_Ptr (Actual_Ptr (0)'Address);
           end;
*************** begin
*** 2773,2778 ****
--- 2800,2812 ----
        Identifier_Character_Set := Get_Default_Identifier_Character_Set;
        Maximum_File_Name_Length := Get_Maximum_File_Name_Length;
  
+       --  On VMS, '~' is not allowed in file names. Change the multi unit
+       --  index character to '$'.
+ 
+       if Hostparm.OpenVMS then
+          Multi_Unit_Index_Character := '$';
+       end if;
+ 
        --  Following should be removed by having above function return
        --  Integer'Last as indication of no maximum instead of -1 ???
  
*************** begin
*** 2786,2792 ****
        Lib_Search_Directories.Set_Last (Primary_Directory);
        Lib_Search_Directories.Table (Primary_Directory) := new String'("");
  
!       Initialize;
     end Initialization;
  
  end Osint;
--- 2820,2826 ----
        Lib_Search_Directories.Set_Last (Primary_Directory);
        Lib_Search_Directories.Table (Primary_Directory) := new String'("");
  
!       Osint.Initialize;
     end Initialization;
  
  end Osint;
diff -Nrcpad gcc-3.4.3/gcc/ada/osint.ads gcc-4.0.0/gcc/ada/osint.ads
*** gcc-3.4.3/gcc/ada/osint.ads	Mon Jan  5 15:20:45 2004
--- gcc-4.0.0/gcc/ada/osint.ads	Mon May 10 16:18:53 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** pragma Elaborate (GNAT.OS_Lib);
*** 36,41 ****
--- 36,46 ----
  
  package Osint is
  
+    Multi_Unit_Index_Character : Character := '~';
+    --  The character before the index of the unit in a multi-unit source,
+    --  in ALI and object file names. This is not a constant, because it is
+    --  changed to '$' on VMS.
+ 
     Ada_Include_Path          : constant String := "ADA_INCLUDE_PATH";
     Ada_Objects_Path          : constant String := "ADA_OBJECTS_PATH";
     Project_Include_Path_File : constant String := "ADA_PRJ_INCLUDE_FILE";
*************** package Osint is
*** 52,60 ****
     type File_Type is (Source, Library, Config, Definition, Preprocessing_Data);
  
     function Find_File
!      (N :    File_Name_Type;
!       T :    File_Type)
!       return File_Name_Type;
     --  Finds a source, library or config file depending on the value
     --  of T following the directory search order rules unless N is the
     --  name of the file just read with Next_Main_File and already
--- 57,64 ----
     type File_Type is (Source, Library, Config, Definition, Preprocessing_Data);
  
     function Find_File
!      (N : File_Name_Type;
!       T : File_Type) return File_Name_Type;
     --  Finds a source, library or config file depending on the value
     --  of T following the directory search order rules unless N is the
     --  name of the file just read with Next_Main_File and already
*************** package Osint is
*** 88,96 ****
     function Number_Of_Files return Int;
     --  gives the total number of filenames found on the command line.
  
!    procedure Add_File (File_Name : String);
     --  Called by the subprogram processing the command line for each
!    --  file name found.
  
     procedure Find_Program_Name;
     --  Put simple name of current program being run (excluding the directory
--- 92,106 ----
     function Number_Of_Files return Int;
     --  gives the total number of filenames found on the command line.
  
!    No_Index : constant := -1;
!    --  Value used in Add_File to indicate that no index is specified
!    --  for a main.
! 
!    procedure Add_File (File_Name : String; Index : Int := No_Index);
     --  Called by the subprogram processing the command line for each
!    --  file name found. The index, when not defaulted to No_Index
!    --  is the index of the subprogram in its source, zero indicating
!    --  that the source is not multi-unit.
  
     procedure Find_Program_Name;
     --  Put simple name of current program being run (excluding the directory
*************** package Osint is
*** 155,162 ****
  
     function To_Canonical_File_List
       (Wildcard_Host_File : String;
!       Only_Dirs          : Boolean)
!       return               String_Access_List_Access;
     --  Expand a wildcard host syntax file or directory specification (e.g. on
     --  a VMS host, any file or directory spec that contains:
     --  "*", or "%", or "...")
--- 165,171 ----
  
     function To_Canonical_File_List
       (Wildcard_Host_File : String;
!       Only_Dirs          : Boolean) return String_Access_List_Access;
     --  Expand a wildcard host syntax file or directory specification (e.g. on
     --  a VMS host, any file or directory spec that contains:
     --  "*", or "%", or "...")
*************** package Osint is
*** 165,172 ****
  
     function To_Canonical_Dir_Spec
       (Host_Dir     : String;
!       Prefix_Style : Boolean)
!       return         String_Access;
     --  Convert a host syntax directory specification (e.g. on a VMS host:
     --  "SYS$DEVICE:[DIR]") to canonical (Unix) syntax (e.g. "/sys$device/dir").
     --  If Prefix_Style then make it a valid file specification prefix.
--- 174,180 ----
  
     function To_Canonical_Dir_Spec
       (Host_Dir     : String;
!       Prefix_Style : Boolean) return String_Access;
     --  Convert a host syntax directory specification (e.g. on a VMS host:
     --  "SYS$DEVICE:[DIR]") to canonical (Unix) syntax (e.g. "/sys$device/dir").
     --  If Prefix_Style then make it a valid file specification prefix.
*************** package Osint is
*** 176,205 ****
     --  this simply means the spec has a trailing slash ("/").
  
     function To_Canonical_File_Spec
!      (Host_File : String)
!       return      String_Access;
     --  Convert a host syntax file specification (e.g. on a VMS host:
     --  "SYS$DEVICE:[DIR]FILE.EXT;69 to canonical (Unix) syntax (e.g.
     --  "/sys$device/dir/file.ext.69").
  
     function To_Canonical_Path_Spec
!      (Host_Path : String)
!       return      String_Access;
     --  Convert a host syntax Path specification (e.g. on a VMS host:
     --  "SYS$DEVICE:[BAR],DISK$USER:[FOO] to canonical (Unix) syntax (e.g.
     --  "/sys$device/foo:disk$user/foo").
  
     function To_Host_Dir_Spec
       (Canonical_Dir : String;
!       Prefix_Style  : Boolean)
!       return          String_Access;
     --  Convert a canonical syntax directory specification to host syntax.
     --  The Prefix_Style flag is currently ignored but should be set to
     --  False.
  
     function To_Host_File_Spec
!      (Canonical_File : String)
!       return           String_Access;
     --  Convert a canonical syntax file specification to host syntax.
  
     function Relocate_Path
--- 184,209 ----
     --  this simply means the spec has a trailing slash ("/").
  
     function To_Canonical_File_Spec
!      (Host_File : String) return String_Access;
     --  Convert a host syntax file specification (e.g. on a VMS host:
     --  "SYS$DEVICE:[DIR]FILE.EXT;69 to canonical (Unix) syntax (e.g.
     --  "/sys$device/dir/file.ext.69").
  
     function To_Canonical_Path_Spec
!      (Host_Path : String) return String_Access;
     --  Convert a host syntax Path specification (e.g. on a VMS host:
     --  "SYS$DEVICE:[BAR],DISK$USER:[FOO] to canonical (Unix) syntax (e.g.
     --  "/sys$device/foo:disk$user/foo").
  
     function To_Host_Dir_Spec
       (Canonical_Dir : String;
!       Prefix_Style  : Boolean) return String_Access;
     --  Convert a canonical syntax directory specification to host syntax.
     --  The Prefix_Style flag is currently ignored but should be set to
     --  False.
  
     function To_Host_File_Spec
!      (Canonical_File : String) return String_Access;
     --  Convert a canonical syntax file specification to host syntax.
  
     function Relocate_Path
*************** package Osint is
*** 209,217 ****
     --  replace the Prefix substring with the root installation directory.
     --  By default, try to compute the root installation directory by looking
     --  at the executable name as it was typed on the command line and, if
!    --  needed, use the PATH environment variable.
!    --  If the above computation fails, return Path.
!    --  This function assumes that Prefix'First = Path'First
  
     function Shared_Lib (Name : String) return String;
     --  Returns the runtime shared library in the form -l<name>-<version> where
--- 213,220 ----
     --  replace the Prefix substring with the root installation directory.
     --  By default, try to compute the root installation directory by looking
     --  at the executable name as it was typed on the command line and, if
!    --  needed, use the PATH environment variable. If the above computation
!    --  fails, return Path. This function assumes Prefix'First = Path'First.
  
     function Shared_Lib (Name : String) return String;
     --  Returns the runtime shared library in the form -l<name>-<version> where
*************** package Osint is
*** 243,251 ****
  
     procedure Get_Next_Dir_In_Path_Init
       (Search_Path : String_Access);
!    function  Get_Next_Dir_In_Path
!      (Search_Path : String_Access)
!       return        String_Access;
     --  These subprograms are used to parse out the directory names in a
     --  search path specified by a Search_Path argument. The procedure
     --  initializes an internal pointer to point to the initial directory
--- 246,253 ----
  
     procedure Get_Next_Dir_In_Path_Init
       (Search_Path : String_Access);
!    function Get_Next_Dir_In_Path
!      (Search_Path : String_Access) return String_Access;
     --  These subprograms are used to parse out the directory names in a
     --  search path specified by a Search_Path argument. The procedure
     --  initializes an internal pointer to point to the initial directory
*************** package Osint is
*** 280,290 ****
     --  directories. These files, located in Sdefault.Search_Dir_Prefix, do
     --  not necessarily exist.
  
     function Read_Default_Search_Dirs
       (Search_Dir_Prefix       : String_Access;
        Search_File             : String_Access;
!       Search_Dir_Default_Name : String_Access)
!       return                    String_Access;
     --  Read and return the default search directories from the file located
     --  in Search_Dir_Prefix (as modified by update_path) and named Search_File.
     --  If no such file exists or an error occurs then instead return the
--- 282,295 ----
     --  directories. These files, located in Sdefault.Search_Dir_Prefix, do
     --  not necessarily exist.
  
+    Exec_Name : String_Ptr;
+    --  Executable name as typed by the user (used to compute the
+    --  executable prefix).
+ 
     function Read_Default_Search_Dirs
       (Search_Dir_Prefix       : String_Access;
        Search_File             : String_Access;
!       Search_Dir_Default_Name : String_Access) return String_Access;
     --  Read and return the default search directories from the file located
     --  in Search_Dir_Prefix (as modified by update_path) and named Search_File.
     --  If no such file exists or an error occurs then instead return the
*************** package Osint is
*** 292,299 ****
  
     function Get_RTS_Search_Dir
       (Search_Dir : String;
!       File_Type  : Search_File_Type)
!       return       String_Ptr;
     --  This function retrieves the paths to the search (resp. lib) dirs and
     --  return them. The search dir can be absolute or relative. If the search
     --  dir contains Include_Search_File (resp. Object_Search_File), then this
--- 297,303 ----
  
     function Get_RTS_Search_Dir
       (Search_Dir : String;
!       File_Type  : Search_File_Type) return String_Ptr;
     --  This function retrieves the paths to the search (resp. lib) dirs and
     --  return them. The search dir can be absolute or relative. If the search
     --  dir contains Include_Search_File (resp. Object_Search_File), then this
*************** package Osint is
*** 381,390 ****
     --  every single time the routines are called unless you have previously
     --  called Source_File_Data (Cache => True). See below.
  
     function Matching_Full_Source_Name
!      (N    : File_Name_Type;
!       T    : Time_Stamp_Type)
!       return File_Name_Type;
     --  Same semantics than Full_Source_Name but will search on the source
     --  path until a source file with time stamp matching T is found. If
     --  none is found returns No_File.
--- 385,396 ----
     --  every single time the routines are called unless you have previously
     --  called Source_File_Data (Cache => True). See below.
  
+    function Current_File_Index return Int;
+    --  Return the index in its source file of the current main unit
+ 
     function Matching_Full_Source_Name
!      (N : File_Name_Type;
!       T : Time_Stamp_Type) return File_Name_Type;
     --  Same semantics than Full_Source_Name but will search on the source
     --  path until a source file with time stamp matching T is found. If
     --  none is found returns No_File.
*************** package Osint is
*** 440,447 ****
  
     function Read_Library_Info
       (Lib_File  : File_Name_Type;
!       Fatal_Err : Boolean := False)
!       return      Text_Buffer_Ptr;
     --  Allocates a Text_Buffer of appropriate length and reads in the entire
     --  source of the library information from the library information file
     --  whose name is given by the parameter Name.
--- 446,452 ----
  
     function Read_Library_Info
       (Lib_File  : File_Name_Type;
!       Fatal_Err : Boolean := False) return Text_Buffer_Ptr;
     --  Allocates a Text_Buffer of appropriate length and reads in the entire
     --  source of the library information from the library information file
     --  whose name is given by the parameter Name.
*************** package Osint is
*** 492,502 ****
     --  file directory lookup penalty is incurred every single time this
     --  routine is called.
  
!    function Lib_File_Name (Source_File : File_Name_Type) return File_Name_Type;
     --  Given the name of a source file, returns the name of the corresponding
     --  library information file. This may be the name of the object file, or
     --  of a separate file used to store the library information. In either case
     --  the returned result is suitable for use in a call to Read_Library_Info.
     --  Note: this subprogram is in this section because it is used by the
     --  compiler to determine the proper library information names to be placed
     --  in the generated library information file.
--- 497,511 ----
     --  file directory lookup penalty is incurred every single time this
     --  routine is called.
  
!    function Lib_File_Name
!      (Source_File : File_Name_Type;
!       Munit_Index : Nat := 0) return File_Name_Type;
     --  Given the name of a source file, returns the name of the corresponding
     --  library information file. This may be the name of the object file, or
     --  of a separate file used to store the library information. In either case
     --  the returned result is suitable for use in a call to Read_Library_Info.
+    --  The Munit_Index is the unit index in multiple unit per file mode, or
+    --  zero in normal single unit per file mode (used to add ~nnn suffix).
     --  Note: this subprogram is in this section because it is used by the
     --  compiler to determine the proper library information names to be placed
     --  in the generated library information file.
*************** private
*** 573,578 ****
--- 582,592 ----
     --  extensible, because when using project files, there may be
     --  more files than arguments on the command line.
  
+    type File_Index_Array is array (Int range <>) of Int;
+    type File_Index_Array_Ptr is access File_Index_Array;
+    File_Indexes : File_Index_Array_Ptr :=
+                     new File_Index_Array (1 .. Int (Argument_Count) + 2);
+ 
     Current_File_Name_Index : Int := 0;
     --  The index in File_Names of the last file opened by Next_Main_Source
     --  or Next_Main_Lib_File. The value 0 indicates that no files have been
diff -Nrcpad gcc-3.4.3/gcc/ada/par-ch10.adb gcc-4.0.0/gcc/ada/par-ch10.adb
*** gcc-3.4.3/gcc/ada/par-ch10.adb	Thu Nov 20 09:54:00 2003
--- gcc-4.0.0/gcc/ada/par-ch10.adb	Mon Jun  7 14:16:22 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** pragma Style_Checks (All_Checks);
*** 30,36 ****
  
  with Fname;    use Fname;
  with Fname.UF; use Fname.UF;
- with Hostparm; use Hostparm;
  with Uname;    use Uname;
  
  separate (Par)
--- 30,35 ----
*************** package body Ch10 is
*** 302,308 ****
           else
              if Operating_Mode = Check_Syntax and then Token = Tok_EOF then
                 Error_Msg_SC ("?file contains no compilation units");
- 
              else
                 Error_Msg_SC ("compilation unit expected");
                 Cunit_Error_Flag := True;
--- 301,306 ----
*************** package body Ch10 is
*** 334,348 ****
           --  contained subprogram bodies), by knowing that that the file we
           --  are compiling has a name that requires a body to be found.
  
-          --  However, we do not do this check if we are operating in syntax
-          --  checking only mode, because in that case there may be multiple
-          --  units in the same file, and the file name is not a reliable guide.
- 
           Save_Scan_State (Scan_State);
           Scan; -- past Package keyword
  
           if Token /= Tok_Body
-            and then Operating_Mode /= Check_Syntax
             and then
               Get_Expected_Unit_Type
                 (File_Name (Current_Source_File)) = Expect_Body
--- 332,341 ----
*************** package body Ch10 is
*** 521,527 ****
              Unit_Node := Specification (Unit_Node);
  
           elsif Nkind (Unit_Node) = N_Subprogram_Renaming_Declaration then
!             if Ada_83 then
                 Error_Msg_N
                   ("(Ada 83) library unit renaming not allowed", Unit_Node);
              end if;
--- 514,520 ----
              Unit_Node := Specification (Unit_Node);
  
           elsif Nkind (Unit_Node) = N_Subprogram_Renaming_Declaration then
!             if Ada_Version = Ada_83 then
                 Error_Msg_N
                   ("(Ada 83) library unit renaming not allowed", Unit_Node);
              end if;
*************** package body Ch10 is
*** 615,621 ****
  
        --  Ada 83 error checks
  
!       if Ada_83 then
  
           --  Check we did not with any child units
  
--- 608,614 ----
  
        --  Ada 83 error checks
  
!       if Ada_Version = Ada_83 then
  
           --  Check we did not with any child units
  
*************** package body Ch10 is
*** 666,683 ****
           elsif Operating_Mode = Check_Syntax then
              return Comp_Unit_Node;
  
           --  Otherwise we have an error. We suppress the error message
           --  if we already had a fatal error, since this stops junk
           --  cascaded messages in some situations.
  
           else
              if not Fatal_Error (Current_Source_Unit) then
- 
                 if Token in Token_Class_Cunit then
                    Error_Msg_SC
                      ("end of file expected, " &
                       "file can have only one compilation unit");
- 
                 else
                    Error_Msg_SC ("end of file expected");
                 end if;
--- 659,697 ----
           elsif Operating_Mode = Check_Syntax then
              return Comp_Unit_Node;
  
+          --  We also allow multiple units if we are in multiple unit mode
+ 
+          elsif Multiple_Unit_Index /= 0 then
+ 
+             --  Skip tokens to end of file, so that the -gnatl listing
+             --  will be complete in this situation, but no need to parse
+             --  the remaining units; no style checking either.
+ 
+             declare
+                Save_Style_Check : constant Boolean := Style_Check;
+ 
+             begin
+                Style_Check := False;
+ 
+                while Token /= Tok_EOF loop
+                   Scan;
+                end loop;
+ 
+                Style_Check := Save_Style_Check;
+             end;
+ 
+             return Comp_Unit_Node;
+ 
           --  Otherwise we have an error. We suppress the error message
           --  if we already had a fatal error, since this stops junk
           --  cascaded messages in some situations.
  
           else
              if not Fatal_Error (Current_Source_Unit) then
                 if Token in Token_Class_Cunit then
                    Error_Msg_SC
                      ("end of file expected, " &
                       "file can have only one compilation unit");
                 else
                    Error_Msg_SC ("end of file expected");
                 end if;
*************** package body Ch10 is
*** 707,713 ****
        when Error_Resync =>
           Set_Fatal_Error (Current_Source_Unit);
           return Error;
- 
     end P_Compilation_Unit;
  
     --------------------------
--- 721,726 ----
*************** package body Ch10 is
*** 749,764 ****
     --  CONTEXT_ITEM ::= WITH_CLAUSE | USE_CLAUSE | WITH_TYPE_CLAUSE
  
     --  WITH_CLAUSE ::=
!    --    with library_unit_NAME {,library_unit_NAME};
  
     --  WITH_TYPE_CLAUSE ::=
     --    with type type_NAME is access; | with type type_NAME is tagged;
  
     --  Error recovery: Cannot raise Error_Resync
  
     function P_Context_Clause return List_Id is
        Item_List   : List_Id;
        Has_Limited : Boolean := False;
        With_Node   : Node_Id;
        First_Flag  : Boolean;
  
--- 762,781 ----
     --  CONTEXT_ITEM ::= WITH_CLAUSE | USE_CLAUSE | WITH_TYPE_CLAUSE
  
     --  WITH_CLAUSE ::=
!    --  [LIMITED] [PRIVATE]  with library_unit_NAME {,library_unit_NAME};
!    --  Note: the two qualifiers are Ada 2005 extensions.
  
     --  WITH_TYPE_CLAUSE ::=
     --    with type type_NAME is access; | with type type_NAME is tagged;
+    --  Note: this form is obsolete (old GNAT extension).
  
     --  Error recovery: Cannot raise Error_Resync
  
     function P_Context_Clause return List_Id is
        Item_List   : List_Id;
        Has_Limited : Boolean := False;
+       Has_Private : Boolean := False;
+       Scan_State  : Saved_Scan_State;
        With_Node   : Node_Id;
        First_Flag  : Boolean;
  
*************** package body Ch10 is
*** 782,813 ****
  
           --  Processing for WITH clause
  
!          --  Ada0Y (AI-50217): First check for LIMITED WITH
  
           if Token = Tok_Limited then
              Has_Limited := True;
              Scan; -- past LIMITED
  
              --  In the context, LIMITED can only appear in a with_clause
  
              if Token /= Tok_With then
                 Error_Msg_SC ("unexpected LIMITED ignored");
              end if;
  
!             if not Extensions_Allowed then
!                Error_Msg_SP ("`LIMITED WITH` is an Ada0X extension");
  
!                if OpenVMS then
!                   Error_Msg_SP
!                     ("\unit must be compiled with " &
!                      "'/'E'X'T'E'N'S'I'O'N'S'_'A'L'L'O'W'E'D qualifier");
!                else
!                   Error_Msg_SP
!                     ("\unit must be compiled with -gnatX switch");
!                end if;
              end if;
           else
              Has_Limited := False;
           end if;
  
           if Token = Tok_With then
--- 799,851 ----
  
           --  Processing for WITH clause
  
!          --  Ada 2005 (AI-50217, AI-262): First check for LIMITED WITH,
!          --  PRIVATE WITH, or both.
  
           if Token = Tok_Limited then
              Has_Limited := True;
+             Has_Private := False;
              Scan; -- past LIMITED
  
              --  In the context, LIMITED can only appear in a with_clause
  
+             if Token = Tok_Private then
+                Has_Private := True;
+                Scan;  -- past PRIVATE
+             end if;
+ 
              if Token /= Tok_With then
                 Error_Msg_SC ("unexpected LIMITED ignored");
              end if;
  
!             if Ada_Version < Ada_05 then
!                Error_Msg_SP ("LIMITED WITH is an Ada 2005 extension");
!                Error_Msg_SP
!                  ("\unit must be compiled with -gnat05 switch");
!             end if;
  
!          elsif Token = Tok_Private then
!             Has_Limited := False;
!             Has_Private := True;
!             Save_Scan_State (Scan_State);
!             Scan;  -- past PRIVATE
! 
!             if Token /= Tok_With then
! 
!                --  Keyword is beginning of private child unit
! 
!                Restore_Scan_State (Scan_State); -- to PRIVATE
!                return Item_List;
! 
!             elsif Ada_Version < Ada_05 then
!                Error_Msg_SP ("PRIVATE WITH is an Ada 2005 extension");
!                Error_Msg_SP
!                  ("\unit must be compiled with -gnat05 switch");
              end if;
+ 
           else
              Has_Limited := False;
+             Has_Private := False;
           end if;
  
           if Token = Tok_With then
*************** package body Ch10 is
*** 815,833 ****
  
              if Token = Tok_Type then
  
!                --  WITH TYPE is an extension
  
                 if not Extensions_Allowed then
!                   Error_Msg_SP ("`WITH TYPE` is a non-standard extension");
! 
!                   if OpenVMS then
!                      Error_Msg_SP
!                        ("\unit must be compiled with " &
!                         "'/'E'X'T'E'N'S'I'O'N'S'_'A'L'L'O'W'E'D qualifier");
!                   else
!                      Error_Msg_SP
!                        ("\unit must be compiled with -gnatX switch");
!                   end if;
                 end if;
  
                 Scan;  -- past TYPE
--- 853,863 ----
  
              if Token = Tok_Type then
  
!                --  WITH TYPE is an GNAT specific extension
  
                 if not Extensions_Allowed then
!                   Error_Msg_SP ("`WITH TYPE` is a 'G'N'A'T extension");
!                   Error_Msg_SP ("\unit must be compiled with -gnatX switch");
                 end if;
  
                 Scan;  -- past TYPE
*************** package body Ch10 is
*** 868,876 ****
--- 898,924 ----
                    Set_Name (With_Node, P_Qualified_Simple_Name);
                    Set_First_Name (With_Node, First_Flag);
                    Set_Limited_Present (With_Node, Has_Limited);
+                   Set_Private_Present (With_Node, Has_Private);
                    First_Flag := False;
+ 
+                   --  All done if no comma
+ 
                    exit when Token /= Tok_Comma;
+ 
+                   --  If comma is followed by compilation unit token
+                   --  or by USE, or PRAGMA, then it should have been a
+                   --  semicolon after all
+ 
+                   Save_Scan_State (Scan_State);
                    Scan; -- past comma
+ 
+                   if Token in Token_Class_Cunit
+                     or else Token = Tok_Use
+                     or else Token = Tok_Pragma
+                   then
+                      Restore_Scan_State (Scan_State);
+                      exit;
+                   end if;
                 end loop;
  
                 Set_Last_Name (With_Node, True);
diff -Nrcpad gcc-3.4.3/gcc/ada/par-ch11.adb gcc-4.0.0/gcc/ada/par-ch11.adb
*** gcc-3.4.3/gcc/ada/par-ch11.adb	Tue Oct 21 13:42:10 2003
--- gcc-4.0.0/gcc/ada/par-ch11.adb	Mon Jun  7 14:16:22 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Ch11 is
*** 104,110 ****
           Scan; -- past identifier
  
           if Token = Tok_Colon then
!             if Ada_83 then
                 Error_Msg_SP ("(Ada 83) choice parameter not allowed!");
              end if;
  
--- 104,110 ----
           Scan; -- past identifier
  
           if Token = Tok_Colon then
!             if Ada_Version = Ada_83 then
                 Error_Msg_SP ("(Ada 83) choice parameter not allowed!");
              end if;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/par-ch12.adb gcc-4.0.0/gcc/ada/par-ch12.adb
*** gcc-3.4.3/gcc/ada/par-ch12.adb	Thu Oct 30 11:50:12 2003
--- gcc-4.0.0/gcc/ada/par-ch12.adb	Thu Feb 10 13:50:44 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Ch12 is
*** 200,206 ****
--- 200,214 ----
           Set_Specification (Gen_Decl, P_Package (Pf_Spcn));
        else
           Gen_Decl := New_Node (N_Generic_Subprogram_Declaration, Gen_Sloc);
+ 
           Set_Specification (Gen_Decl, P_Subprogram_Specification);
+ 
+          if Nkind (Defining_Unit_Name (Specification (Gen_Decl))) =
+                                              N_Defining_Program_Unit_Name
+            and then Scope.Last > 0
+          then
+             Error_Msg_SP ("child unit allowed only at library level");
+          end if;
           TF_Semicolon;
        end if;
  
*************** package body Ch12 is
*** 800,807 ****
--- 808,822 ----
     -----------------------------------------
  
     --  FORMAL_SUBPROGRAM_DECLARATION ::=
+    --    FORMAL_CONCRETE_SUBPROGRAM_DECLARATION
+    --  | FORMAL_ABSTRACT_SUBPROGRAM_DECLARATION
+ 
+    --  FORMAL_CONCRETE_SUBPROGRAM_DECLARATION ::=
     --    with SUBPROGRAM_SPECIFICATION [is SUBPROGRAM_DEFAULT];
  
+    --  FORMAL_ABSTRACT_SUBPROGRAM_DECLARATION ::=
+    --    with SUBPROGRAM_SPECIFICATION is abstract [SUBPROGRAM_DEFAULT];
+ 
     --  SUBPROGRAM_DEFAULT ::= DEFAULT_NAME | <>
  
     --  DEFAULT_NAME ::= NAME
*************** package body Ch12 is
*** 809,840 ****
     --  The caller has checked that the initial tokens are WITH FUNCTION or
     --  WITH PROCEDURE, and the initial WITH has been scanned out.
  
-    --  Note: we separate this into two procedures because the name is allowed
-    --  to be an operator symbol for a function, but not for a procedure.
- 
     --  Error recovery: cannot raise Error_Resync
  
     function P_Formal_Subprogram_Declaration return Node_Id is
!       Def_Node : Node_Id;
  
     begin
-       Def_Node := New_Node (N_Formal_Subprogram_Declaration, Prev_Token_Ptr);
-       Set_Specification (Def_Node, P_Subprogram_Specification);
- 
        if Token = Tok_Is then
           T_Is; -- past IS, skip extra IS or ";"
  
!          if Token = Tok_Box then
              Set_Box_Present (Def_Node, True);
              Scan; -- past <>
  
           else
              Set_Default_Name (Def_Node, P_Name);
           end if;
  
        end if;
  
-       T_Semicolon;
        return Def_Node;
     end P_Formal_Subprogram_Declaration;
  
--- 824,878 ----
     --  The caller has checked that the initial tokens are WITH FUNCTION or
     --  WITH PROCEDURE, and the initial WITH has been scanned out.
  
     --  Error recovery: cannot raise Error_Resync
  
     function P_Formal_Subprogram_Declaration return Node_Id is
!       Prev_Sloc : constant Source_Ptr := Prev_Token_Ptr;
!       Spec_Node : constant Node_Id    := P_Subprogram_Specification;
!       Def_Node  : Node_Id;
  
     begin
        if Token = Tok_Is then
           T_Is; -- past IS, skip extra IS or ";"
  
!          if Token = Tok_Abstract then
!             Def_Node :=
!               New_Node (N_Formal_Abstract_Subprogram_Declaration, Prev_Sloc);
!             Scan; -- past ABSTRACT
! 
!             if Ada_Version < Ada_05 then
!                Error_Msg_SP
!                  ("formal abstract subprograms are an Ada 2005 extension");
!                Error_Msg_SP ("\unit must be compiled with -gnat05 switch");
!             end if;
! 
!          else
!             Def_Node :=
!               New_Node (N_Formal_Concrete_Subprogram_Declaration, Prev_Sloc);
!          end if;
! 
!          Set_Specification (Def_Node, Spec_Node);
! 
!          if Token = Tok_Semicolon then
!             Scan; -- past ";"
! 
!          elsif Token = Tok_Box then
              Set_Box_Present (Def_Node, True);
              Scan; -- past <>
+             T_Semicolon;
  
           else
              Set_Default_Name (Def_Node, P_Name);
+             T_Semicolon;
           end if;
  
+       else
+          Def_Node :=
+            New_Node (N_Formal_Concrete_Subprogram_Declaration, Prev_Sloc);
+          Set_Specification (Def_Node, Spec_Node);
+          T_Semicolon;
        end if;
  
        return Def_Node;
     end P_Formal_Subprogram_Declaration;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/par-ch2.adb gcc-4.0.0/gcc/ada/par-ch2.adb
*** gcc-3.4.3/gcc/ada/par-ch2.adb	Thu Oct 30 11:50:12 2003
--- gcc-4.0.0/gcc/ada/par-ch2.adb	Thu Feb 10 13:50:28 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Ch2 is
*** 54,59 ****
--- 54,74 ----
        --  All set if we do indeed have an identifier
  
        if Token = Tok_Identifier then
+ 
+          --  Ada 2005 (AI-284): Compiling in Ada95 mode we notify
+          --  that interface, overriding, and synchronized are
+          --  new reserved words
+ 
+          if Ada_Version = Ada_95 then
+             if Token_Name = Name_Overriding
+               or else Token_Name = Name_Synchronized
+               or else (Token_Name = Name_Interface
+                         and then Prev_Token /= Tok_Pragma)
+             then
+                Error_Msg_N ("& is a reserved word in Ada 2005?", Token_Node);
+             end if;
+          end if;
+ 
           Ident_Node := Token_Node;
           Scan; -- past Identifier
           return Ident_Node;
*************** package body Ch2 is
*** 251,259 ****
           Style.Check_Pragma_Name;
        end if;
  
!       Ident_Node := P_Identifier;
        Set_Chars (Pragma_Node, Pragma_Name);
-       Delete_Node (Ident_Node);
  
        --  See if special INTERFACE/IMPORT check is required
  
--- 266,286 ----
           Style.Check_Pragma_Name;
        end if;
  
!       --  Ada 2005 (AI-284): INTERFACE is a new reserved word but it is
!       --  allowed as a pragma name.
! 
!       if Ada_Version >= Ada_05
!         and then Token = Tok_Interface
!       then
!          Pragma_Name := Name_Interface;
!          Ident_Node  := Token_Node;
!          Scan; -- past INTERFACE
!       else
!          Ident_Node := P_Identifier;
!          Delete_Node (Ident_Node);
!       end if;
! 
        Set_Chars (Pragma_Node, Pragma_Name);
  
        --  See if special INTERFACE/IMPORT check is required
  
diff -Nrcpad gcc-3.4.3/gcc/ada/par-ch3.adb gcc-4.0.0/gcc/ada/par-ch3.adb
*** gcc-3.4.3/gcc/ada/par-ch3.adb	Mon Jan 12 11:45:24 2004
--- gcc-4.0.0/gcc/ada/par-ch3.adb	Thu Feb 10 13:50:33 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Ch3 is
*** 174,180 ****
        --  separate declaration (but not use) of a reserved identifier.
  
        if Token = Tok_Identifier then
!          null;
  
        --  If we have a reserved identifier, manufacture an identifier with
        --  a corresponding name after posting an appropriate error message
--- 174,193 ----
        --  separate declaration (but not use) of a reserved identifier.
  
        if Token = Tok_Identifier then
! 
!          --  Ada 2005 (AI-284): Compiling in Ada95 mode we notify
!          --  that interface, overriding, and synchronized are
!          --  new reserved words
! 
!          if Ada_Version = Ada_95 then
!             if Token_Name = Name_Overriding
!               or else Token_Name = Name_Synchronized
!               or else (Token_Name = Name_Interface
!                         and then Prev_Token /= Tok_Pragma)
!             then
!                Error_Msg_N ("& is a reserved word in Ada 2005?", Token_Node);
!             end if;
!          end if;
  
        --  If we have a reserved identifier, manufacture an identifier with
        --  a corresponding name after posting an appropriate error message
*************** package body Ch3 is
*** 387,393 ****
        loop
           case Token is
  
!             when Tok_Access =>
                 Typedef_Node := P_Access_Type_Definition;
                 TF_Semicolon;
                 exit;
--- 400,407 ----
        loop
           case Token is
  
!             when Tok_Access |
!                  Tok_Not    => --  Ada 2005 (AI-231)
                 Typedef_Node := P_Access_Type_Definition;
                 TF_Semicolon;
                 exit;
*************** package body Ch3 is
*** 563,569 ****
                 --  LIMITED RECORD or LIMITED NULL RECORD
  
                 if Token = Tok_Record or else Token = Tok_Null then
!                   if Ada_83 then
                       Error_Msg_SP
                         ("(Ada 83) limited record declaration not allowed!");
                    end if;
--- 577,583 ----
                 --  LIMITED RECORD or LIMITED NULL RECORD
  
                 if Token = Tok_Record or else Token = Tok_Null then
!                   if Ada_Version = Ada_83 then
                       Error_Msg_SP
                         ("(Ada 83) limited record declaration not allowed!");
                    end if;
*************** package body Ch3 is
*** 720,734 ****
     --------------------------------
  
     --  SUBTYPE_DECLARATION ::=
!    --    subtype DEFINING_IDENTIFIER is SUBTYPE_INDICATION;
  
     --  The caller has checked that the initial token is SUBTYPE
  
     --  Error recovery: can raise Error_Resync
  
     function P_Subtype_Declaration return Node_Id is
!       Decl_Node : Node_Id;
! 
     begin
        Decl_Node := New_Node (N_Subtype_Declaration, Token_Ptr);
        Scan; -- past SUBTYPE
--- 734,748 ----
     --------------------------------
  
     --  SUBTYPE_DECLARATION ::=
!    --    subtype DEFINING_IDENTIFIER is [NULL_EXCLUSION] SUBTYPE_INDICATION;
  
     --  The caller has checked that the initial token is SUBTYPE
  
     --  Error recovery: can raise Error_Resync
  
     function P_Subtype_Declaration return Node_Id is
!       Decl_Node        : Node_Id;
!       Not_Null_Present : Boolean := False;
     begin
        Decl_Node := New_Node (N_Subtype_Declaration, Token_Ptr);
        Scan; -- past SUBTYPE
*************** package body Ch3 is
*** 740,746 ****
           Scan; -- past NEW
        end if;
  
!       Set_Subtype_Indication (Decl_Node, P_Subtype_Indication);
        TF_Semicolon;
        return Decl_Node;
     end P_Subtype_Declaration;
--- 754,764 ----
           Scan; -- past NEW
        end if;
  
!       Not_Null_Present := P_Null_Exclusion; --  Ada 2005 (AI-231)
!       Set_Null_Exclusion_Present (Decl_Node, Not_Null_Present);
! 
!       Set_Subtype_Indication
!         (Decl_Node, P_Subtype_Indication (Not_Null_Present));
        TF_Semicolon;
        return Decl_Node;
     end P_Subtype_Declaration;
*************** package body Ch3 is
*** 749,765 ****
     -- 3.2.2  Subtype Indication --
     -------------------------------
  
!    --  SUBTYPE_INDICATION ::= SUBTYPE_MARK [CONSTRAINT]
  
     --  Error recovery: can raise Error_Resync
  
!    function P_Subtype_Indication return Node_Id is
!       Type_Node : Node_Id;
  
     begin
        if Token = Tok_Identifier or else Token = Tok_Operator_Symbol then
           Type_Node := P_Subtype_Mark;
!          return P_Subtype_Indication (Type_Node);
  
        else
           --  Check for error of using record definition and treat it nicely,
--- 767,809 ----
     -- 3.2.2  Subtype Indication --
     -------------------------------
  
!    --  SUBTYPE_INDICATION ::=
!    --    [NOT NULL] SUBTYPE_MARK [CONSTRAINT]
  
     --  Error recovery: can raise Error_Resync
  
!    function P_Null_Exclusion return Boolean is
!    begin
!       if Token /= Tok_Not then
!          return False;
! 
!       else
!          if Ada_Version < Ada_05 then
!             Error_Msg_SP
!               ("null-excluding access is an Ada 2005 extension");
!             Error_Msg_SP ("\unit must be compiled with -gnat05 switch");
!          end if;
! 
!          Scan; --  past NOT
! 
!          if Token = Tok_Null then
!             Scan; --  past NULL
!          else
!             Error_Msg_SP ("NULL expected");
!          end if;
! 
!          return True;
!       end if;
!    end P_Null_Exclusion;
! 
!    function P_Subtype_Indication
!      (Not_Null_Present : Boolean := False) return Node_Id is
!       Type_Node        : Node_Id;
  
     begin
        if Token = Tok_Identifier or else Token = Tok_Operator_Symbol then
           Type_Node := P_Subtype_Mark;
!          return P_Subtype_Indication (Type_Node, Not_Null_Present);
  
        else
           --  Check for error of using record definition and treat it nicely,
*************** package body Ch3 is
*** 782,790 ****
  
     --  Error recovery: can raise Error_Resync
  
!    function P_Subtype_Indication (Subtype_Mark : Node_Id) return Node_Id is
!       Indic_Node  : Node_Id;
!       Constr_Node : Node_Id;
  
     begin
        Constr_Node := P_Constraint_Opt;
--- 826,836 ----
  
     --  Error recovery: can raise Error_Resync
  
!    function P_Subtype_Indication
!      (Subtype_Mark     : Node_Id;
!       Not_Null_Present : Boolean := False) return Node_Id is
!       Indic_Node       : Node_Id;
!       Constr_Node      : Node_Id;
  
     begin
        Constr_Node := P_Constraint_Opt;
*************** package body Ch3 is
*** 792,797 ****
--- 838,847 ----
        if No (Constr_Node) then
           return Subtype_Mark;
        else
+          if Not_Null_Present then
+             Error_Msg_SP ("constrained null-exclusion not allowed");
+          end if;
+ 
           Indic_Node := New_Node (N_Subtype_Indication, Sloc (Subtype_Mark));
           Set_Subtype_Mark (Indic_Node, Check_Subtype_Mark (Subtype_Mark));
           Set_Constraint (Indic_Node, Constr_Node);
*************** package body Ch3 is
*** 978,986 ****
     --  This routine scans out a declaration starting with an identifier:
  
     --  OBJECT_DECLARATION ::=
!    --    DEFINING_IDENTIFIER_LIST : [constant] [aliased]
!    --      SUBTYPE_INDICATION [:= EXPRESSION];
!    --  | DEFINING_IDENTIFIER_LIST : [constant] [aliased]
     --      ARRAY_TYPE_DEFINITION [:= EXPRESSION];
  
     --  NUMBER_DECLARATION ::=
--- 1028,1036 ----
     --  This routine scans out a declaration starting with an identifier:
  
     --  OBJECT_DECLARATION ::=
!    --    DEFINING_IDENTIFIER_LIST : [aliased] [constant]
!    --      [NULL_EXCLUSION] SUBTYPE_INDICATION [:= EXPRESSION];
!    --  | DEFINING_IDENTIFIER_LIST : [aliased] [constant]
     --      ARRAY_TYPE_DEFINITION [:= EXPRESSION];
  
     --  NUMBER_DECLARATION ::=
*************** package body Ch3 is
*** 988,993 ****
--- 1038,1044 ----
  
     --  OBJECT_RENAMING_DECLARATION ::=
     --    DEFINING_IDENTIFIER : SUBTYPE_MARK renames object_NAME;
+    --  | DEFINING_IDENTIFIER : ACCESS_DEFINITION renames object_NAME;
  
     --  EXCEPTION_RENAMING_DECLARATION ::=
     --    DEFINING_IDENTIFIER : exception renames exception_NAME;
*************** package body Ch3 is
*** 1016,1030 ****
        Done    : out Boolean;
        In_Spec : Boolean)
     is
!       Decl_Node  : Node_Id;
!       Type_Node  : Node_Id;
!       Ident_Sloc : Source_Ptr;
!       Scan_State : Saved_Scan_State;
!       List_OK    : Boolean := True;
!       Ident      : Nat;
!       Init_Expr  : Node_Id;
!       Init_Loc   : Source_Ptr;
!       Con_Loc    : Source_Ptr;
  
        Idents : array (Int range 1 .. 4096) of Entity_Id;
        --  Used to save identifiers in the identifier list. The upper bound
--- 1067,1083 ----
        Done    : out Boolean;
        In_Spec : Boolean)
     is
!       Acc_Node         : Node_Id;
!       Decl_Node        : Node_Id;
!       Type_Node        : Node_Id;
!       Ident_Sloc       : Source_Ptr;
!       Scan_State       : Saved_Scan_State;
!       List_OK          : Boolean := True;
!       Ident            : Nat;
!       Init_Expr        : Node_Id;
!       Init_Loc         : Source_Ptr;
!       Con_Loc          : Source_Ptr;
!       Not_Null_Present : Boolean := False;
  
        Idents : array (Int range 1 .. 4096) of Entity_Id;
        --  Used to save identifiers in the identifier list. The upper bound
*************** package body Ch3 is
*** 1239,1244 ****
--- 1292,1302 ----
              Init_Expr := Init_Expr_Opt;
  
              if Present (Init_Expr) then
+                if Not_Null_Present then
+                   Error_Msg_SP ("null-exclusion not allowed in "
+                                 & "numeric expression");
+                end if;
+ 
                 Decl_Node := New_Node (N_Number_Declaration, Ident_Sloc);
                 Set_Expression (Decl_Node, Init_Expr);
  
*************** package body Ch3 is
*** 1262,1269 ****
                 if Token = Tok_Array then
                    Set_Object_Definition
                      (Decl_Node, P_Array_Type_Definition);
                 else
!                   Set_Object_Definition (Decl_Node, P_Subtype_Indication);
                 end if;
  
                 if Token = Tok_Renames then
--- 1320,1332 ----
                 if Token = Tok_Array then
                    Set_Object_Definition
                      (Decl_Node, P_Array_Type_Definition);
+ 
                 else
!                   Not_Null_Present := P_Null_Exclusion; --  Ada 2005 (AI-231)
!                   Set_Null_Exclusion_Present (Decl_Node, Not_Null_Present);
! 
!                   Set_Object_Definition (Decl_Node,
!                      P_Subtype_Indication (Not_Null_Present));
                 end if;
  
                 if Token = Tok_Renames then
*************** package body Ch3 is
*** 1305,1312 ****
              if Token = Tok_Array then
                 Set_Object_Definition
                   (Decl_Node, P_Array_Type_Definition);
              else
!                Set_Object_Definition (Decl_Node, P_Subtype_Indication);
              end if;
  
           --  Array case
--- 1368,1379 ----
              if Token = Tok_Array then
                 Set_Object_Definition
                   (Decl_Node, P_Array_Type_Definition);
+ 
              else
!                Not_Null_Present := P_Null_Exclusion; --  Ada 2005 (AI-231)
!                Set_Null_Exclusion_Present (Decl_Node, Not_Null_Present);
!                Set_Object_Definition (Decl_Node,
!                   P_Subtype_Indication (Not_Null_Present));
              end if;
  
           --  Array case
*************** package body Ch3 is
*** 1315,1320 ****
--- 1382,1479 ----
              Decl_Node := New_Node (N_Object_Declaration, Ident_Sloc);
              Set_Object_Definition (Decl_Node, P_Array_Type_Definition);
  
+          --  Ada 2005 (AI-254)
+ 
+          elsif Token = Tok_Not then
+ 
+             --  OBJECT_DECLARATION ::=
+             --    DEFINING_IDENTIFIER_LIST : [aliased] [constant]
+             --      [NULL_EXCLUSION] SUBTYPE_INDICATION [:= EXPRESSION];
+ 
+             --  OBJECT_RENAMING_DECLARATION ::=
+             --    ...
+             --  | DEFINING_IDENTIFIER : ACCESS_DEFINITION renames object_NAME;
+ 
+             Not_Null_Present := P_Null_Exclusion; --  Ada 2005 (AI-231)
+ 
+             if Token = Tok_Access then
+                if Ada_Version < Ada_05 then
+                   Error_Msg_SP
+                     ("generalized use of anonymous access types " &
+                      "is an Ada 2005 extension");
+                   Error_Msg_SP ("\unit must be compiled with -gnat05 switch");
+                end if;
+ 
+                Acc_Node := P_Access_Definition (Not_Null_Present);
+ 
+                if Token /= Tok_Renames then
+                   Error_Msg_SC ("'RENAMES' expected");
+                   raise Error_Resync;
+                end if;
+ 
+                Scan; --  past renames
+                No_List;
+                Decl_Node :=
+                  New_Node (N_Object_Renaming_Declaration, Ident_Sloc);
+                Set_Access_Definition (Decl_Node, Acc_Node);
+                Set_Name (Decl_Node, P_Name);
+ 
+             else
+                Type_Node := P_Subtype_Mark;
+ 
+                --  Object renaming declaration
+ 
+                if Token_Is_Renames then
+                   Error_Msg_SP
+                     ("null-exclusion not allowed in object renamings");
+                   raise Error_Resync;
+ 
+                --  Object declaration
+ 
+                else
+                   Decl_Node := New_Node (N_Object_Declaration, Ident_Sloc);
+                   Set_Null_Exclusion_Present (Decl_Node, Not_Null_Present);
+                   Set_Object_Definition
+                     (Decl_Node,
+                      P_Subtype_Indication (Type_Node, Not_Null_Present));
+ 
+                   --  RENAMES at this point means that we had the combination
+                   --  of a constraint on the Type_Node and renames, which is
+                   --  illegal
+ 
+                   if Token_Is_Renames then
+                      Error_Msg_N ("constraint not allowed in object renaming "
+                                   & "declaration",
+                                   Constraint (Object_Definition (Decl_Node)));
+                      raise Error_Resync;
+                   end if;
+                end if;
+             end if;
+ 
+          --  Ada 2005 (AI-230): Access Definition case
+ 
+          elsif Token = Tok_Access then
+             if Ada_Version < Ada_05 then
+                Error_Msg_SP
+                  ("generalized use of anonymous access types " &
+                   "is an Ada 2005 extension");
+                Error_Msg_SP ("\unit must be compiled with -gnat05 switch");
+             end if;
+ 
+             Acc_Node := P_Access_Definition (Null_Exclusion_Present => False);
+ 
+             if Token /= Tok_Renames then
+                Error_Msg_SC ("'RENAMES' expected");
+                raise Error_Resync;
+             end if;
+ 
+             Scan; --  past renames
+             No_List;
+             Decl_Node :=
+               New_Node (N_Object_Renaming_Declaration, Ident_Sloc);
+             Set_Access_Definition (Decl_Node, Acc_Node);
+             Set_Name (Decl_Node, P_Name);
+ 
           --  Subtype indication case
  
           else
*************** package body Ch3 is
*** 1333,1340 ****
  
              else
                 Decl_Node := New_Node (N_Object_Declaration, Ident_Sloc);
                 Set_Object_Definition
!                  (Decl_Node, P_Subtype_Indication (Type_Node));
  
                 --  RENAMES at this point means that we had the combination of
                 --  a constraint on the Type_Node and renames, which is illegal
--- 1492,1501 ----
  
              else
                 Decl_Node := New_Node (N_Object_Declaration, Ident_Sloc);
+                Set_Null_Exclusion_Present (Decl_Node, Not_Null_Present);
                 Set_Object_Definition
!                  (Decl_Node,
!                   P_Subtype_Indication (Type_Node, Not_Null_Present));
  
                 --  RENAMES at this point means that we had the combination of
                 --  a constraint on the Type_Node and renames, which is illegal
*************** package body Ch3 is
*** 1421,1427 ****
     -------------------------------------------------------------------------
  
     --  DERIVED_TYPE_DEFINITION ::=
!    --    [abstract] new parent_SUBTYPE_INDICATION [RECORD_EXTENSION_PART]
  
     --  PRIVATE_EXTENSION_DECLARATION ::=
     --     type DEFINING_IDENTIFIER [DISCRIMINANT_PART] is
--- 1582,1589 ----
     -------------------------------------------------------------------------
  
     --  DERIVED_TYPE_DEFINITION ::=
!    --    [abstract] new [NULL_EXCLUSION] parent_SUBTYPE_INDICATION
!    --    [RECORD_EXTENSION_PART]
  
     --  PRIVATE_EXTENSION_DECLARATION ::=
     --     type DEFINING_IDENTIFIER [DISCRIMINANT_PART] is
*************** package body Ch3 is
*** 1440,1448 ****
     --  Error recovery: can raise Error_Resync;
  
     function P_Derived_Type_Def_Or_Private_Ext_Decl return Node_Id is
!       Typedef_Node  : Node_Id;
!       Typedecl_Node : Node_Id;
! 
     begin
        Typedef_Node := New_Node (N_Derived_Type_Definition, Token_Ptr);
        T_New;
--- 1602,1610 ----
     --  Error recovery: can raise Error_Resync;
  
     function P_Derived_Type_Def_Or_Private_Ext_Decl return Node_Id is
!       Typedef_Node     : Node_Id;
!       Typedecl_Node    : Node_Id;
!       Not_Null_Present : Boolean := False;
     begin
        Typedef_Node := New_Node (N_Derived_Type_Definition, Token_Ptr);
        T_New;
*************** package body Ch3 is
*** 1452,1458 ****
           Scan;
        end if;
  
!       Set_Subtype_Indication (Typedef_Node, P_Subtype_Indication);
  
        --  Deal with record extension, note that we assume that a WITH is
        --  missing in the case of "type X is new Y record ..." or in the
--- 1614,1623 ----
           Scan;
        end if;
  
!       Not_Null_Present := P_Null_Exclusion; --  Ada 2005 (AI-231)
!       Set_Null_Exclusion_Present (Typedef_Node, Not_Null_Present);
!       Set_Subtype_Indication (Typedef_Node,
!          P_Subtype_Indication (Not_Null_Present));
  
        --  Deal with record extension, note that we assume that a WITH is
        --  missing in the case of "type X is new Y record ..." or in the
*************** package body Ch3 is
*** 1763,1769 ****
        Typedef_Node : Node_Id;
  
     begin
!       if Ada_83 then
           Error_Msg_SC ("(Ada 83): modular types not allowed");
        end if;
  
--- 1928,1934 ----
        Typedef_Node : Node_Id;
  
     begin
!       if Ada_Version = Ada_83 then
           Error_Msg_SC ("(Ada 83): modular types not allowed");
        end if;
  
*************** package body Ch3 is
*** 1892,1898 ****
        Check_Simple_Expression_In_Ada_83 (Delta_Node);
  
        if Token = Tok_Digits then
!          if Ada_83 then
              Error_Msg_SC ("(Ada 83) decimal fixed type not allowed!");
           end if;
  
--- 2057,2063 ----
        Check_Simple_Expression_In_Ada_83 (Delta_Node);
  
        if Token = Tok_Digits then
!          if Ada_Version = Ada_83 then
              Error_Msg_SC ("(Ada 83) decimal fixed type not allowed!");
           end if;
  
*************** package body Ch3 is
*** 2011,2028 ****
     --  DISCRETE_SUBTYPE_DEFINITION ::=
     --    DISCRETE_SUBTYPE_INDICATION | RANGE
  
!    --  COMPONENT_DEFINITION ::= [aliased] SUBTYPE_INDICATION
  
     --  The caller has checked that the initial token is ARRAY
  
     --  Error recovery: can raise Error_Resync
  
     function P_Array_Type_Definition return Node_Id is
!       Array_Loc    : Source_Ptr;
!       CompDef_Node : Node_Id;
!       Def_Node     : Node_Id;
!       Subs_List    : List_Id;
!       Scan_State   : Saved_Scan_State;
  
     begin
        Array_Loc := Token_Ptr;
--- 2176,2196 ----
     --  DISCRETE_SUBTYPE_DEFINITION ::=
     --    DISCRETE_SUBTYPE_INDICATION | RANGE
  
!    --  COMPONENT_DEFINITION ::=
!    --    [aliased] [NULL_EXCLUSION] SUBTYPE_INDICATION | ACCESS_DEFINITION
  
     --  The caller has checked that the initial token is ARRAY
  
     --  Error recovery: can raise Error_Resync
  
     function P_Array_Type_Definition return Node_Id is
!       Array_Loc        : Source_Ptr;
!       CompDef_Node     : Node_Id;
!       Def_Node         : Node_Id;
!       Not_Null_Present : Boolean := False;
!       Subs_List        : List_Id;
!       Scan_State       : Saved_Scan_State;
!       Aliased_Present  : Boolean := False;
  
     begin
        Array_Loc := Token_Ptr;
*************** package body Ch3 is
*** 2082,2093 ****
  
        CompDef_Node := New_Node (N_Component_Definition, Token_Ptr);
  
        if Token = Tok_Aliased then
!          Set_Aliased_Present (CompDef_Node, True);
           Scan; -- past ALIASED
        end if;
  
!       Set_Subtype_Indication (CompDef_Node, P_Subtype_Indication);
        Set_Component_Definition (Def_Node, CompDef_Node);
  
        return Def_Node;
--- 2250,2293 ----
  
        CompDef_Node := New_Node (N_Component_Definition, Token_Ptr);
  
+       if Token_Name = Name_Aliased then
+          Check_95_Keyword (Tok_Aliased, Tok_Identifier);
+       end if;
+ 
        if Token = Tok_Aliased then
!          Aliased_Present := True;
           Scan; -- past ALIASED
        end if;
  
!       Not_Null_Present := P_Null_Exclusion; --  Ada 2005 (AI-231/AI-254)
! 
!       --  Ada 2005 (AI-230): Access Definition case
! 
!       if Token = Tok_Access then
!          if Ada_Version < Ada_05 then
!             Error_Msg_SP
!               ("generalized use of anonymous access types " &
!                "is an Ada 2005 extension");
!             Error_Msg_SP ("\unit must be compiled with -gnat05 switch");
!          end if;
! 
!          if Aliased_Present then
!             Error_Msg_SP ("ALIASED not allowed here");
!          end if;
! 
!          Set_Subtype_Indication     (CompDef_Node, Empty);
!          Set_Aliased_Present        (CompDef_Node, False);
!          Set_Access_Definition      (CompDef_Node,
!            P_Access_Definition (Not_Null_Present));
!       else
! 
!          Set_Access_Definition      (CompDef_Node, Empty);
!          Set_Aliased_Present        (CompDef_Node, Aliased_Present);
!          Set_Null_Exclusion_Present (CompDef_Node, Not_Null_Present);
!          Set_Subtype_Indication     (CompDef_Node,
!            P_Subtype_Indication (Not_Null_Present));
!       end if;
! 
        Set_Component_Definition (Def_Node, CompDef_Node);
  
        return Def_Node;
*************** package body Ch3 is
*** 2228,2235 ****
           Scan; -- past the left paren
  
           if Token = Tok_Box then
! 
!             if Ada_83 then
                 Error_Msg_SC ("(Ada 83) unknown discriminant not allowed!");
              end if;
  
--- 2428,2434 ----
           Scan; -- past the left paren
  
           if Token = Tok_Box then
!             if Ada_Version = Ada_83 then
                 Error_Msg_SC ("(Ada 83) unknown discriminant not allowed!");
              end if;
  
*************** package body Ch3 is
*** 2252,2258 ****
     --    (DISCRIMINANT_SPECIFICATION {; DISCRIMINANT_SPECIFICATION})
  
     --  DISCRIMINANT_SPECIFICATION ::=
!    --    DEFINING_IDENTIFIER_LIST : SUBTYPE_MARK
     --      [:= DEFAULT_EXPRESSION]
     --  | DEFINING_IDENTIFIER_LIST : ACCESS_DEFINITION
     --      [:= DEFAULT_EXPRESSION]
--- 2451,2457 ----
     --    (DISCRIMINANT_SPECIFICATION {; DISCRIMINANT_SPECIFICATION})
  
     --  DISCRIMINANT_SPECIFICATION ::=
!    --    DEFINING_IDENTIFIER_LIST : [NULL_EXCLUSION] SUBTYPE_MARK
     --      [:= DEFAULT_EXPRESSION]
     --  | DEFINING_IDENTIFIER_LIST : ACCESS_DEFINITION
     --      [:= DEFAULT_EXPRESSION]
*************** package body Ch3 is
*** 2267,2272 ****
--- 2466,2472 ----
        Ident_Sloc         : Source_Ptr;
        Scan_State         : Saved_Scan_State;
        Num_Idents         : Nat;
+       Not_Null_Present   : Boolean;
        Ident              : Nat;
  
        Idents : array (Int range 1 .. 4096) of Entity_Id;
*************** package body Ch3 is
*** 2309,2327 ****
                 Specification_Node :=
                   New_Node (N_Discriminant_Specification, Ident_Sloc);
                 Set_Defining_Identifier (Specification_Node, Idents (Ident));
  
                 if Token = Tok_Access then
!                   if Ada_83 then
                       Error_Msg_SC
                         ("(Ada 83) access discriminant not allowed!");
                    end if;
  
                    Set_Discriminant_Type
!                     (Specification_Node, P_Access_Definition);
                 else
                    Set_Discriminant_Type
                      (Specification_Node, P_Subtype_Mark);
                    No_Constraint;
                 end if;
  
                 Set_Expression
--- 2509,2532 ----
                 Specification_Node :=
                   New_Node (N_Discriminant_Specification, Ident_Sloc);
                 Set_Defining_Identifier (Specification_Node, Idents (Ident));
+                Not_Null_Present := P_Null_Exclusion; -- Ada 2005 (AI-231)
  
                 if Token = Tok_Access then
!                   if Ada_Version = Ada_83 then
                       Error_Msg_SC
                         ("(Ada 83) access discriminant not allowed!");
                    end if;
  
                    Set_Discriminant_Type
!                     (Specification_Node,
!                      P_Access_Definition (Not_Null_Present));
                 else
+ 
                    Set_Discriminant_Type
                      (Specification_Node, P_Subtype_Mark);
                    No_Constraint;
+                   Set_Null_Exclusion_Present  -- Ada 2005 (AI-231)
+                     (Specification_Node, Not_Null_Present);
                 end if;
  
                 Set_Expression
*************** package body Ch3 is
*** 2724,2730 ****
     --    DEFINING_IDENTIFIER_LIST : COMPONENT_DEFINITION
     --      [:= DEFAULT_EXPRESSION];
  
!    --  COMPONENT_DEFINITION ::= [aliased] SUBTYPE_INDICATION
  
     --  Error recovery: cannot raise Error_Resync, if an error occurs,
     --  the scan is positioned past the following semicolon.
--- 2929,2936 ----
     --    DEFINING_IDENTIFIER_LIST : COMPONENT_DEFINITION
     --      [:= DEFAULT_EXPRESSION];
  
!    --  COMPONENT_DEFINITION ::=
!    --    [aliased] [NULL_EXCLUSION] SUBTYPE_INDICATION | ACCESS_DEFINITION
  
     --  Error recovery: cannot raise Error_Resync, if an error occurs,
     --  the scan is positioned past the following semicolon.
*************** package body Ch3 is
*** 2733,2744 ****
     --  items, do we need to add this capability sometime in the future ???
  
     procedure P_Component_Items (Decls : List_Id) is
!       CompDef_Node : Node_Id;
!       Decl_Node    : Node_Id;
!       Scan_State   : Saved_Scan_State;
!       Num_Idents   : Nat;
!       Ident        : Nat;
!       Ident_Sloc   : Source_Ptr;
  
        Idents : array (Int range 1 .. 4096) of Entity_Id;
        --  This array holds the list of defining identifiers. The upper bound
--- 2939,2952 ----
     --  items, do we need to add this capability sometime in the future ???
  
     procedure P_Component_Items (Decls : List_Id) is
!       Aliased_Present  : Boolean := False;
!       CompDef_Node     : Node_Id;
!       Decl_Node        : Node_Id;
!       Scan_State       : Saved_Scan_State;
!       Not_Null_Present : Boolean := False;
!       Num_Idents       : Nat;
!       Ident            : Nat;
!       Ident_Sloc       : Source_Ptr;
  
        Idents : array (Int range 1 .. 4096) of Entity_Id;
        --  This array holds the list of defining identifiers. The upper bound
*************** package body Ch3 is
*** 2796,2811 ****
              end if;
  
              if Token = Tok_Aliased then
                 Scan; -- past ALIASED
-                Set_Aliased_Present (CompDef_Node, True);
              end if;
  
!             if Token = Tok_Array then
!                Error_Msg_SC ("anonymous arrays not allowed as components");
!                raise Error_Resync;
              end if;
  
-             Set_Subtype_Indication   (CompDef_Node, P_Subtype_Indication);
              Set_Component_Definition (Decl_Node, CompDef_Node);
              Set_Expression           (Decl_Node, Init_Expr_Opt);
  
--- 3004,3049 ----
              end if;
  
              if Token = Tok_Aliased then
+                Aliased_Present := True;
                 Scan; -- past ALIASED
              end if;
  
!             Not_Null_Present := P_Null_Exclusion; -- Ada 2005 (AI-231/AI-254)
! 
!             --  Ada 2005 (AI-230): Access Definition case
! 
!             if Token = Tok_Access then
!                if Ada_Version < Ada_05 then
!                   Error_Msg_SP
!                     ("generalized use of anonymous access types " &
!                      "is an Ada 2005 extension");
!                   Error_Msg_SP ("\unit must be compiled with -gnat05 switch");
!                end if;
! 
!                if Aliased_Present then
!                   Error_Msg_SP ("ALIASED not allowed here");
!                end if;
! 
!                Set_Subtype_Indication (CompDef_Node, Empty);
!                Set_Aliased_Present    (CompDef_Node, False);
!                Set_Access_Definition  (CompDef_Node,
!                  P_Access_Definition (Not_Null_Present));
!             else
! 
!                Set_Access_Definition      (CompDef_Node, Empty);
!                Set_Aliased_Present        (CompDef_Node, Aliased_Present);
!                Set_Null_Exclusion_Present (CompDef_Node, Not_Null_Present);
! 
!                if Token = Tok_Array then
!                   Error_Msg_SC
!                     ("anonymous arrays not allowed as components");
!                   raise Error_Resync;
!                end if;
! 
!                Set_Subtype_Indication (CompDef_Node,
!                  P_Subtype_Indication (Not_Null_Present));
              end if;
  
              Set_Component_Definition (Decl_Node, CompDef_Node);
              Set_Expression           (Decl_Node, Init_Expr_Opt);
  
*************** package body Ch3 is
*** 3050,3075 ****
     --  | ACCESS_TO_SUBPROGRAM_DEFINITION
  
     --  ACCESS_TO_OBJECT_DEFINITION ::=
!    --    access [GENERAL_ACCESS_MODIFIER] SUBTYPE_INDICATION
  
     --  GENERAL_ACCESS_MODIFIER ::= all | constant
  
     --  ACCESS_TO_SUBPROGRAM_DEFINITION
!    --    access [protected] procedure PARAMETER_PROFILE
!    --  | access [protected] function PARAMETER_AND_RESULT_PROFILE
  
     --  PARAMETER_PROFILE ::= [FORMAL_PART]
  
     --  PARAMETER_AND_RESULT_PROFILE ::= [FORMAL_PART] RETURN SUBTYPE_MARK
  
!    --  The caller has checked that the initial token is ACCESS
  
     --  Error recovery: can raise Error_Resync
  
!    function P_Access_Type_Definition return Node_Id is
!       Prot_Flag     : Boolean;
!       Access_Loc    : Source_Ptr;
!       Type_Def_Node : Node_Id;
  
        procedure Check_Junk_Subprogram_Name;
        --  Used in access to subprogram definition cases to check for an
--- 3288,3318 ----
     --  | ACCESS_TO_SUBPROGRAM_DEFINITION
  
     --  ACCESS_TO_OBJECT_DEFINITION ::=
!    --    [NULL_EXCLUSION] access [GENERAL_ACCESS_MODIFIER] SUBTYPE_INDICATION
  
     --  GENERAL_ACCESS_MODIFIER ::= all | constant
  
     --  ACCESS_TO_SUBPROGRAM_DEFINITION
!    --    [NULL_EXCLUSION] access [protected] procedure PARAMETER_PROFILE
!    --  | [NULL_EXCLUSION] access [protected] function
!    --    PARAMETER_AND_RESULT_PROFILE
  
     --  PARAMETER_PROFILE ::= [FORMAL_PART]
  
     --  PARAMETER_AND_RESULT_PROFILE ::= [FORMAL_PART] RETURN SUBTYPE_MARK
  
!    --  Ada 2005 (AI-254): If Header_Already_Parsed then the caller has already
!    --  parsed the null_exclusion part and has also removed the ACCESS token;
!    --  otherwise the caller has just checked that the initial token is ACCESS
  
     --  Error recovery: can raise Error_Resync
  
!    function P_Access_Type_Definition
!      (Header_Already_Parsed : Boolean := False) return Node_Id is
!       Access_Loc            : constant Source_Ptr := Token_Ptr;
!       Prot_Flag             : Boolean;
!       Not_Null_Present      : Boolean := False;
!       Type_Def_Node         : Node_Id;
  
        procedure Check_Junk_Subprogram_Name;
        --  Used in access to subprogram definition cases to check for an
*************** package body Ch3 is
*** 3096,3103 ****
     --  Start of processing for P_Access_Type_Definition
  
     begin
!       Access_Loc := Token_Ptr;
!       Scan; -- past ACCESS
  
        if Token_Name = Name_Protected then
           Check_95_Keyword (Tok_Protected, Tok_Procedure);
--- 3339,3348 ----
     --  Start of processing for P_Access_Type_Definition
  
     begin
!       if not Header_Already_Parsed then
!          Not_Null_Present := P_Null_Exclusion;         --  Ada 2005 (AI-231)
!          Scan; -- past ACCESS
!       end if;
  
        if Token_Name = Name_Protected then
           Check_95_Keyword (Tok_Protected, Tok_Procedure);
*************** package body Ch3 is
*** 3108,3135 ****
  
        if Prot_Flag then
           Scan; -- past PROTECTED
           if Token /= Tok_Procedure and then Token /= Tok_Function then
              Error_Msg_SC ("FUNCTION or PROCEDURE expected");
           end if;
        end if;
  
        if Token = Tok_Procedure then
!          if Ada_83 then
              Error_Msg_SC ("(Ada 83) access to procedure not allowed!");
           end if;
  
           Type_Def_Node := New_Node (N_Access_Procedure_Definition, Access_Loc);
           Scan; -- past PROCEDURE
           Check_Junk_Subprogram_Name;
           Set_Parameter_Specifications (Type_Def_Node, P_Parameter_Profile);
           Set_Protected_Present (Type_Def_Node, Prot_Flag);
  
        elsif Token = Tok_Function then
!          if Ada_83 then
              Error_Msg_SC ("(Ada 83) access to function not allowed!");
           end if;
  
           Type_Def_Node := New_Node (N_Access_Function_Definition, Access_Loc);
           Scan; -- past FUNCTION
           Check_Junk_Subprogram_Name;
           Set_Parameter_Specifications (Type_Def_Node, P_Parameter_Profile);
--- 3353,3383 ----
  
        if Prot_Flag then
           Scan; -- past PROTECTED
+ 
           if Token /= Tok_Procedure and then Token /= Tok_Function then
              Error_Msg_SC ("FUNCTION or PROCEDURE expected");
           end if;
        end if;
  
        if Token = Tok_Procedure then
!          if Ada_Version = Ada_83 then
              Error_Msg_SC ("(Ada 83) access to procedure not allowed!");
           end if;
  
           Type_Def_Node := New_Node (N_Access_Procedure_Definition, Access_Loc);
+          Set_Null_Exclusion_Present (Type_Def_Node, Not_Null_Present);
           Scan; -- past PROCEDURE
           Check_Junk_Subprogram_Name;
           Set_Parameter_Specifications (Type_Def_Node, P_Parameter_Profile);
           Set_Protected_Present (Type_Def_Node, Prot_Flag);
  
        elsif Token = Tok_Function then
!          if Ada_Version = Ada_83 then
              Error_Msg_SC ("(Ada 83) access to function not allowed!");
           end if;
  
           Type_Def_Node := New_Node (N_Access_Function_Definition, Access_Loc);
+          Set_Null_Exclusion_Present (Type_Def_Node, Not_Null_Present);
           Scan; -- past FUNCTION
           Check_Junk_Subprogram_Name;
           Set_Parameter_Specifications (Type_Def_Node, P_Parameter_Profile);
*************** package body Ch3 is
*** 3141,3149 ****
        else
           Type_Def_Node :=
             New_Node (N_Access_To_Object_Definition, Access_Loc);
  
           if Token = Tok_All or else Token = Tok_Constant then
!             if Ada_83 then
                 Error_Msg_SC ("(Ada 83) access modifier not allowed!");
              end if;
  
--- 3389,3398 ----
        else
           Type_Def_Node :=
             New_Node (N_Access_To_Object_Definition, Access_Loc);
+          Set_Null_Exclusion_Present (Type_Def_Node, Not_Null_Present);
  
           if Token = Tok_All or else Token = Tok_Constant then
!             if Ada_Version = Ada_83 then
                 Error_Msg_SC ("(Ada 83) access modifier not allowed!");
              end if;
  
*************** package body Ch3 is
*** 3157,3163 ****
              Scan; -- past ALL or CONSTANT
           end if;
  
!          Set_Subtype_Indication (Type_Def_Node, P_Subtype_Indication);
        end if;
  
        return Type_Def_Node;
--- 3406,3413 ----
              Scan; -- past ALL or CONSTANT
           end if;
  
!          Set_Subtype_Indication (Type_Def_Node,
!             P_Subtype_Indication (Not_Null_Present));
        end if;
  
        return Type_Def_Node;
*************** package body Ch3 is
*** 3185,3204 ****
     -- 3.10  Access Definition --
     -----------------------------
  
!    --  ACCESS_DEFINITION ::= access SUBTYPE_MARK
  
!    --  The caller has checked that the initial token is ACCESS
  
     --  Error recovery: cannot raise Error_Resync
  
!    function P_Access_Definition return Node_Id is
!       Def_Node : Node_Id;
  
     begin
        Def_Node := New_Node (N_Access_Definition, Token_Ptr);
        Scan; -- past ACCESS
!       Set_Subtype_Mark (Def_Node, P_Subtype_Mark);
!       No_Constraint;
        return Def_Node;
     end P_Access_Definition;
  
--- 3435,3510 ----
     -- 3.10  Access Definition --
     -----------------------------
  
!    --  ACCESS_DEFINITION ::=
!    --    [NULL_EXCLUSION] access [GENERAL_ACCESS_MODIFIER] SUBTYPE_MARK
!    --  | ACCESS_TO_SUBPROGRAM_DEFINITION
!    --
!    --  ACCESS_TO_SUBPROGRAM_DEFINITION
!    --    [NULL_EXCLUSION] access [protected] procedure PARAMETER_PROFILE
!    --  | [NULL_EXCLUSION] access [protected] function
!    --    PARAMETER_AND_RESULT_PROFILE
  
!    --  The caller has parsed the null-exclusion part and it has also checked
!    --  that the next token is ACCESS
  
     --  Error recovery: cannot raise Error_Resync
  
!    function P_Access_Definition
!      (Null_Exclusion_Present : Boolean) return Node_Id is
!       Def_Node  : Node_Id;
!       Subp_Node : Node_Id;
  
     begin
        Def_Node := New_Node (N_Access_Definition, Token_Ptr);
        Scan; -- past ACCESS
! 
!       --  Ada 2005 (AI-254/AI-231)
! 
!       if Ada_Version >= Ada_05 then
! 
!          --  Ada 2005 (AI-254): Access_To_Subprogram_Definition
! 
!          if Token = Tok_Protected
!            or else Token = Tok_Procedure
!            or else Token = Tok_Function
!          then
!             Subp_Node :=
!               P_Access_Type_Definition (Header_Already_Parsed => True);
!             Set_Null_Exclusion_Present (Subp_Node, Null_Exclusion_Present);
!             Set_Access_To_Subprogram_Definition (Def_Node, Subp_Node);
! 
!          --  Ada 2005 (AI-231)
!          --  [NULL_EXCLUSION] access [GENERAL_ACCESS_MODIFIER] SUBTYPE_MARK
! 
!          else
!             Set_Null_Exclusion_Present (Def_Node, Null_Exclusion_Present);
! 
!             if Token = Tok_All then
!                Scan; -- past ALL
!                Set_All_Present (Def_Node);
! 
!             elsif Token = Tok_Constant then
!                Scan; -- past CONSTANT
!                Set_Constant_Present (Def_Node);
!             end if;
! 
!             Set_Subtype_Mark (Def_Node, P_Subtype_Mark);
!             No_Constraint;
!          end if;
! 
!       --  Ada 95
! 
!       else
!          --  Ada 2005 (AI-254): The null-exclusion present is never present
!          --  in Ada 83 and Ada 95
! 
!          pragma Assert (Null_Exclusion_Present = False);
! 
!          Set_Null_Exclusion_Present (Def_Node, False);
!          Set_Subtype_Mark (Def_Node, P_Subtype_Mark);
!          No_Constraint;
!       end if;
! 
        return Def_Node;
     end P_Access_Definition;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/par-ch4.adb gcc-4.0.0/gcc/ada/par-ch4.adb
*** gcc-3.4.3/gcc/ada/par-ch4.adb	Mon Dec  8 10:33:15 2003
--- gcc-4.0.0/gcc/ada/par-ch4.adb	Mon Jan  3 15:32:15 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** pragma Style_Checks (All_Checks);
*** 28,35 ****
  --  Turn off subprogram body ordering check. Subprograms are in order
  --  by RM section rather than alphabetical
  
- with Hostparm; use Hostparm;
- 
  separate (Par)
  package body Ch4 is
  
--- 28,33 ----
*************** package body Ch4 is
*** 427,432 ****
--- 425,433 ----
                 elsif Token = Tok_Access then
                    Attr_Name := Name_Access;
  
+                elsif Token = Tok_Mod and then Ada_Version = Ada_05 then
+                   Attr_Name := Name_Mod;
+ 
                 elsif Apostrophe_Should_Be_Semicolon then
                    Expr_Form := EF_Name;
                    return Name_Node;
*************** package body Ch4 is
*** 1128,1134 ****
     --  Error recovery: can raise Error_Resync
  
     --  Note: POSITIONAL_ARRAY_AGGREGATE rule has been extended to give support
!    --        to Ada0Y limited aggregates (AI-287)
  
     function P_Aggregate_Or_Paren_Expr return Node_Id is
        Aggregate_Node : Node_Id;
--- 1129,1135 ----
     --  Error recovery: can raise Error_Resync
  
     --  Note: POSITIONAL_ARRAY_AGGREGATE rule has been extended to give support
!    --        to Ada 2005 limited aggregates (AI-287)
  
     function P_Aggregate_Or_Paren_Expr return Node_Id is
        Aggregate_Node : Node_Id;
*************** package body Ch4 is
*** 1167,1180 ****
              end if;
           end if;
  
!          --  Ada0Y (AI-287): The box notation is allowed only with named
           --  notation because positional notation might be error prone. For
           --  example, in "(X, <>, Y, <>)", there is no type associated with
           --  the boxes, so you might not be leaving out the components you
           --  thought you were leaving out.
  
!          if Extensions_Allowed and then Token = Tok_Box then
!             Error_Msg_SC ("(Ada 0Y) box notation only allowed with "
                            & "named notation");
              Scan; --  past BOX
              Aggregate_Node := New_Node (N_Aggregate, Lparen_Sloc);
--- 1168,1181 ----
              end if;
           end if;
  
!          --  Ada 2005 (AI-287): The box notation is allowed only with named
           --  notation because positional notation might be error prone. For
           --  example, in "(X, <>, Y, <>)", there is no type associated with
           --  the boxes, so you might not be leaving out the components you
           --  thought you were leaving out.
  
!          if Ada_Version >= Ada_05 and then Token = Tok_Box then
!             Error_Msg_SC ("(Ada 2005) box notation only allowed with "
                            & "named notation");
              Scan; --  past BOX
              Aggregate_Node := New_Node (N_Aggregate, Lparen_Sloc);
*************** package body Ch4 is
*** 1194,1200 ****
                 return Error;
              end if;
  
!             if Ada_83 then
                 Error_Msg_SC ("(Ada 83) extension aggregate not allowed");
              end if;
  
--- 1195,1201 ----
                 return Error;
              end if;
  
!             if Ada_Version = Ada_83 then
                 Error_Msg_SC ("(Ada 83) extension aggregate not allowed");
              end if;
  
*************** package body Ch4 is
*** 1391,1397 ****
     --  Error recovery: can raise Error_Resync
  
     --  Note: RECORD_COMPONENT_ASSOCIATION and ARRAY_COMPONENT_ASSOCIATION
!    --        rules have been extended to give support to Ada0Y limited
     --        aggregates (AI-287)
  
     function P_Record_Or_Array_Component_Association return Node_Id is
--- 1392,1398 ----
     --  Error recovery: can raise Error_Resync
  
     --  Note: RECORD_COMPONENT_ASSOCIATION and ARRAY_COMPONENT_ASSOCIATION
!    --        rules have been extended to give support to Ada 2005 limited
     --        aggregates (AI-287)
  
     function P_Record_Or_Array_Component_Association return Node_Id is
*************** package body Ch4 is
*** 1405,1425 ****
  
        if Token = Tok_Box then
  
!          --  Ada0Y (AI-287): The box notation is used to indicate the default
!          --  initialization of limited aggregate components
  
!          if not Extensions_Allowed then
              Error_Msg_SP
!               ("(Ada 0Y) limited aggregates are an Ada0X extension");
! 
!             if OpenVMS then
!                Error_Msg_SP
!                  ("\unit must be compiled with " &
!                   "'/'E'X'T'E'N'S'I'O'N'S'_'A'L'L'O'W'E'D qualifier");
!             else
!                Error_Msg_SP
!                  ("\unit must be compiled with -gnatX switch");
!             end if;
           end if;
  
           Set_Box_Present (Assoc_Node);
--- 1406,1418 ----
  
        if Token = Tok_Box then
  
!          --  Ada 2005(AI-287): The box notation is used to indicate the
!          --  default initialization of limited aggregate components
  
!          if Ada_Version < Ada_05 then
              Error_Msg_SP
!               ("limited aggregate is an Ada 2005 extension");
!             Error_Msg_SP ("\unit must be compiled with -gnat05 switch");
           end if;
  
           Set_Box_Present (Assoc_Node);
*************** package body Ch4 is
*** 2318,2324 ****
  
     function  P_Qualified_Expression (Subtype_Mark : Node_Id) return Node_Id is
        Qual_Node : Node_Id;
- 
     begin
        Qual_Node := New_Node (N_Qualified_Expression, Prev_Token_Ptr);
        Set_Subtype_Mark (Qual_Node, Check_Subtype_Mark (Subtype_Mark));
--- 2311,2316 ----
*************** package body Ch4 is
*** 2331,2356 ****
     --------------------
  
     --  ALLOCATOR ::=
!    --   new SUBTYPE_INDICATION | new QUALIFIED_EXPRESSION
  
     --  The caller has checked that the initial token is NEW
  
     --  Error recovery: can raise Error_Resync
  
     function P_Allocator return Node_Id is
!       Alloc_Node  : Node_Id;
!       Type_Node   : Node_Id;
  
     begin
        Alloc_Node := New_Node (N_Allocator, Token_Ptr);
        T_New;
        Type_Node := P_Subtype_Mark_Resync;
  
        if Token = Tok_Apostrophe then
           Scan; -- past apostrophe
           Set_Expression (Alloc_Node, P_Qualified_Expression (Type_Node));
        else
!          Set_Expression (Alloc_Node, P_Subtype_Indication (Type_Node));
        end if;
  
        return Alloc_Node;
--- 2323,2356 ----
     --------------------
  
     --  ALLOCATOR ::=
!    --    new [NULL_EXCLUSION] SUBTYPE_INDICATION | new QUALIFIED_EXPRESSION
  
     --  The caller has checked that the initial token is NEW
  
     --  Error recovery: can raise Error_Resync
  
     function P_Allocator return Node_Id is
!       Alloc_Node             : Node_Id;
!       Type_Node              : Node_Id;
!       Null_Exclusion_Present : Boolean;
  
     begin
        Alloc_Node := New_Node (N_Allocator, Token_Ptr);
        T_New;
+ 
+       --  Scan Null_Exclusion if present (Ada 2005 (AI-231))
+ 
+       Null_Exclusion_Present := P_Null_Exclusion;
+       Set_Null_Exclusion_Present (Alloc_Node, Null_Exclusion_Present);
        Type_Node := P_Subtype_Mark_Resync;
  
        if Token = Tok_Apostrophe then
           Scan; -- past apostrophe
           Set_Expression (Alloc_Node, P_Qualified_Expression (Type_Node));
        else
!          Set_Expression
!            (Alloc_Node,
!             P_Subtype_Indication (Type_Node, Null_Exclusion_Present));
        end if;
  
        return Alloc_Node;
diff -Nrcpad gcc-3.4.3/gcc/ada/par-ch5.adb gcc-4.0.0/gcc/ada/par-ch5.adb
*** gcc-3.4.3/gcc/ada/par-ch5.adb	Thu Oct 30 11:50:12 2003
--- gcc-4.0.0/gcc/ada/par-ch5.adb	Fri Nov 19 10:56:52 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Ch5 is
*** 1268,1277 ****
        --  Otherwise check for redundant parens
  
        else
!          if Warn_On_Redundant_Constructs
             and then Paren_Count (Cond) > 0
           then
!             Error_Msg_F ("redundant parentheses?", Cond);
           end if;
  
           --  And return the result
--- 1268,1277 ----
        --  Otherwise check for redundant parens
  
        else
!          if Style_Check
             and then Paren_Count (Cond) > 0
           then
!             Style.Check_Xtra_Parens (First_Sloc (Cond));
           end if;
  
           --  And return the result
*************** package body Ch5 is
*** 1877,1882 ****
--- 1877,1883 ----
        Goto_Node := New_Node (N_Goto_Statement, Token_Ptr);
        Scan; -- past GOTO (or TO)
        Set_Name (Goto_Node, P_Qualified_Simple_Name_Resync);
+       Append_Elmt (Goto_Node, Goto_List);
        No_Constraint;
        TF_Semicolon;
        return Goto_Node;
*************** package body Ch5 is
*** 1979,1985 ****
  
        --  Check for misplacement of later vs basic declarations in Ada 83
  
!       if Ada_83 then
           Decl := First (Decls);
  
           --  Loop through sequence of basic declarative items
--- 1980,1986 ----
  
        --  Check for misplacement of later vs basic declarations in Ada 83
  
!       if Ada_Version = Ada_83 then
           Decl := First (Decls);
  
           --  Loop through sequence of basic declarative items
*************** package body Ch5 is
*** 2002,2008 ****
                    if Nkind (Decl) not in N_Later_Decl_Item
                      and then Nkind (Decl) /= N_Pragma
                    then
!                      if Ada_83 then
                          Error_Msg_Sloc := Body_Sloc;
                          Error_Msg_N
                            ("(Ada 83) decl cannot appear after body#", Decl);
--- 2003,2009 ----
                    if Nkind (Decl) not in N_Later_Decl_Item
                      and then Nkind (Decl) /= N_Pragma
                    then
!                      if Ada_Version = Ada_83 then
                          Error_Msg_Sloc := Body_Sloc;
                          Error_Msg_N
                            ("(Ada 83) decl cannot appear after body#", Decl);
diff -Nrcpad gcc-3.4.3/gcc/ada/par-ch6.adb gcc-4.0.0/gcc/ada/par-ch6.adb
*** gcc-3.4.3/gcc/ada/par-ch6.adb	Thu Oct 30 11:50:12 2003
--- gcc-4.0.0/gcc/ada/par-ch6.adb	Mon Jun  7 14:16:22 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Ch6 is
*** 735,741 ****
              Error_Msg_SP ("child unit allowed only at library level");
              raise Error_Resync;
  
!          elsif Ada_83 then
              Error_Msg_SP ("(Ada 83) child unit not allowed!");
  
           end if;
--- 735,741 ----
              Error_Msg_SP ("child unit allowed only at library level");
              raise Error_Resync;
  
!          elsif Ada_Version = Ada_83 then
              Error_Msg_SP ("(Ada 83) child unit not allowed!");
  
           end if;
*************** package body Ch6 is
*** 839,845 ****
     --  FORMAL_PART ::= (PARAMETER_SPECIFICATION {; PARAMETER_SPECIFICATION})
  
     --  PARAMETER_SPECIFICATION ::=
!    --    DEFINING_IDENTIFIER_LIST : MODE SUBTYPE_MARK
     --      [:= DEFAULT_EXPRESSION]
     --  | DEFINING_IDENTIFIER_LIST : ACCESS_DEFINITION
     --      [:= DEFAULT_EXPRESSION]
--- 839,845 ----
     --  FORMAL_PART ::= (PARAMETER_SPECIFICATION {; PARAMETER_SPECIFICATION})
  
     --  PARAMETER_SPECIFICATION ::=
!    --    DEFINING_IDENTIFIER_LIST : MODE [NULL_EXCLUSION] SUBTYPE_MARK
     --      [:= DEFAULT_EXPRESSION]
     --  | DEFINING_IDENTIFIER_LIST : ACCESS_DEFINITION
     --      [:= DEFAULT_EXPRESSION]
*************** package body Ch6 is
*** 857,862 ****
--- 857,863 ----
        Num_Idents         : Nat;
        Ident              : Nat;
        Ident_Sloc         : Source_Ptr;
+       Not_Null_Present   : Boolean := False;
  
        Idents : array (Int range 1 .. 4096) of Entity_Id;
        --  This array holds the list of defining identifiers. The upper bound
*************** package body Ch6 is
*** 865,871 ****
  
     begin
        Specification_List := New_List;
- 
        Specification_Loop : loop
           begin
              if Token = Tok_Pragma then
--- 866,871 ----
*************** package body Ch6 is
*** 953,969 ****
                 Specification_Node :=
                   New_Node (N_Parameter_Specification, Ident_Sloc);
                 Set_Defining_Identifier (Specification_Node, Idents (Ident));
  
                 if Token = Tok_Access then
!                   if Ada_83 then
                       Error_Msg_SC ("(Ada 83) access parameters not allowed");
                    end if;
  
!                   Set_Parameter_Type
!                     (Specification_Node, P_Access_Definition);
  
                 else
!                   P_Mode (Specification_Node);
  
                    if Token = Tok_Procedure
                         or else
--- 953,984 ----
                 Specification_Node :=
                   New_Node (N_Parameter_Specification, Ident_Sloc);
                 Set_Defining_Identifier (Specification_Node, Idents (Ident));
+                Not_Null_Present := P_Null_Exclusion;     --  Ada 2005 (AI-231)
  
                 if Token = Tok_Access then
!                   Set_Null_Exclusion_Present
!                     (Specification_Node, Not_Null_Present);
! 
!                   if Ada_Version = Ada_83 then
                       Error_Msg_SC ("(Ada 83) access parameters not allowed");
                    end if;
  
!                   Set_Parameter_Type (Specification_Node,
!                     P_Access_Definition (Not_Null_Present));
  
                 else
!                   if Token = Tok_In or else Token = Tok_Out then
!                      if Not_Null_Present then
!                         Error_Msg_SC
!                           ("ACCESS must be placed after the parameter mode");
!                      end if;
! 
!                      P_Mode (Specification_Node);
!                      Not_Null_Present := P_Null_Exclusion; -- Ada 2005 (AI-231)
!                   end if;
! 
!                   Set_Null_Exclusion_Present
!                     (Specification_Node, Not_Null_Present);
  
                    if Token = Tok_Procedure
                         or else
diff -Nrcpad gcc-3.4.3/gcc/ada/par-ch8.adb gcc-4.0.0/gcc/ada/par-ch8.adb
*** gcc-3.4.3/gcc/ada/par-ch8.adb	Thu Apr 24 17:54:07 2003
--- gcc-4.0.0/gcc/ada/par-ch8.adb	Mon Jun  7 14:16:23 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2001 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Ch8 is
*** 110,116 ****
        Use_Node := New_Node (N_Use_Type_Clause, Prev_Token_Ptr);
        Set_Subtype_Marks (Use_Node, New_List);
  
!       if Ada_83 then
           Error_Msg_SC ("(Ada 83) use type not allowed!");
        end if;
  
--- 110,116 ----
        Use_Node := New_Node (N_Use_Type_Clause, Prev_Token_Ptr);
        Set_Subtype_Marks (Use_Node, New_List);
  
!       if Ada_Version = Ada_83 then
           Error_Msg_SC ("(Ada 83) use type not allowed!");
        end if;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/par-ch9.adb gcc-4.0.0/gcc/ada/par-ch9.adb
*** gcc-3.4.3/gcc/ada/par-ch9.adb	Thu Oct 30 11:50:12 2003
--- gcc-4.0.0/gcc/ada/par-ch9.adb	Mon Jun  7 14:16:23 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Ch9 is
*** 770,776 ****
           --  Exception handlers not allowed in Ada 95 node
  
           if Present (Exception_Handlers (Hand_Seq)) then
!             if Ada_83 then
                 Error_Msg_N
                   ("(Ada 83) exception handlers in accept not allowed",
                    First_Non_Pragma (Exception_Handlers (Hand_Seq)));
--- 770,776 ----
           --  Exception handlers not allowed in Ada 95 node
  
           if Present (Exception_Handlers (Hand_Seq)) then
!             if Ada_Version = Ada_83 then
                 Error_Msg_N
                   ("(Ada 83) exception handlers in accept not allowed",
                    First_Non_Pragma (Exception_Handlers (Hand_Seq)));
*************** package body Ch9 is
*** 1258,1264 ****
           --  Else error
  
           else
!             if Ada_83 then
                 Error_Msg_BC ("OR or ELSE expected");
              else
                 Error_Msg_BC ("OR or ELSE or THEN ABORT expected");
--- 1258,1264 ----
           --  Else error
  
           else
!             if Ada_Version = Ada_83 then
                 Error_Msg_BC ("OR or ELSE expected");
              else
                 Error_Msg_BC ("OR or ELSE or THEN ABORT expected");
*************** package body Ch9 is
*** 1578,1584 ****
        Abortable_Part_Node := New_Node (N_Abortable_Part, Token_Ptr);
        T_Abort; -- scan past ABORT
  
!       if Ada_83 then
           Error_Msg_SP ("(Ada 83) asynchronous select not allowed!");
        end if;
  
--- 1578,1584 ----
        Abortable_Part_Node := New_Node (N_Abortable_Part, Token_Ptr);
        T_Abort; -- scan past ABORT
  
!       if Ada_Version = Ada_83 then
           Error_Msg_SP ("(Ada 83) asynchronous select not allowed!");
        end if;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/par-labl.adb gcc-4.0.0/gcc/ada/par-labl.adb
*** gcc-3.4.3/gcc/ada/par-labl.adb	Tue Oct 21 13:42:10 2003
--- gcc-4.0.0/gcc/ada/par-labl.adb	Thu Jul 15 20:34:36 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** procedure Labl is
*** 51,56 ****
--- 51,61 ----
     --  Checks the rule in RM-5.1(11), which requires distinct identifiers
     --  for all the labels in a given body.
  
+    procedure Find_Natural_Loops;
+    --  Recognizes loops created by backward gotos, and rewrites the
+    --  corresponding statements into a proper loop, for optimization
+    --  purposes (for example, to control reclaiming local storage).
+ 
     ---------------------------
     -- Check_Distinct_Labels --
     ---------------------------
*************** procedure Labl is
*** 145,150 ****
--- 150,478 ----
        return Result;
     end Find_Enclosing_Body_Or_Block;
  
+    ------------------------
+    -- Find_Natural_Loops --
+    ------------------------
+ 
+    procedure Find_Natural_Loops is
+       Node_List : constant Elist_Id := New_Elmt_List;
+       N         : Elmt_Id;
+       Succ      : Elmt_Id;
+ 
+       function Goto_Id (Goto_Node : Node_Id) return Name_Id;
+       --  Find Name_Id of goto statement, which may be an expanded name.
+ 
+       function Matches
+         (Label_Node : Node_Id;
+          Goto_Node  : Node_Id) return Boolean;
+       --  A label and a goto are candidates for a loop if the names match,
+       --  and both nodes appear in the same body. In addition, both must
+       --  appear in the same statement list. If they are not in the same
+       --  statement list, the goto is from within an nested structure, and
+       --  the label is not a header. We ignore the case where the goto is
+       --  within a conditional structure, and capture only infinite loops.
+ 
+       procedure Merge;
+       --  Merge labels and goto statements in order of increasing sloc value.
+       --  Discard labels of loop and block statements.
+ 
+       procedure No_Header (N : Elmt_Id);
+       --  The label N is known not to be a loop header. Scan forward and
+       --  remove all subsequent goto's that may have this node as a target.
+ 
+       procedure Process_Goto (N : Elmt_Id);
+       --  N is a forward jump. Scan forward and remove all subsequent goto's
+       --  that may have the same target, to preclude spurious loops.
+ 
+       procedure Rewrite_As_Loop
+         (Loop_Header : Node_Id;
+          Loop_End    : Node_Id);
+       --  Given a label and a backwards goto, rewrite intervening statements
+       --  as a loop. Remove the label from the node list, and rewrite the
+       --  goto with the body of the new loop.
+ 
+       procedure Try_Loop (N : Elmt_Id);
+       --  N is a label that may be a loop header. Scan forward to find some
+       --  backwards goto with which to make a loop. Do nothing if there is
+       --  an intervening label that is not part of a loop, or more than one
+       --  goto with this target.
+ 
+       -------------
+       -- Goto_Id --
+       -------------
+ 
+       function Goto_Id (Goto_Node : Node_Id) return Name_Id is
+       begin
+          if Nkind (Name (Goto_Node)) = N_Identifier then
+             return Chars (Name (Goto_Node));
+ 
+          elsif Nkind (Name (Goto_Node)) = N_Selected_Component then
+             return Chars (Selector_Name (Name (Goto_Node)));
+          else
+ 
+             --  In case of error, return Id that can't match anything
+ 
+             return Name_Null;
+          end if;
+       end Goto_Id;
+ 
+       -------------
+       -- Matches --
+       -------------
+ 
+       function Matches
+         (Label_Node : Node_Id;
+          Goto_Node  :  Node_Id) return Boolean
+       is
+       begin
+          return Chars (Identifier (Label_Node)) = Goto_Id (Goto_Node)
+            and then Find_Enclosing_Body (Label_Node) =
+                     Find_Enclosing_Body (Goto_Node);
+       end Matches;
+ 
+       -----------
+       -- Merge --
+       -----------
+ 
+       procedure Merge is
+          L1 : Elmt_Id;
+          G1 : Elmt_Id;
+ 
+       begin
+          L1 := First_Elmt (Label_List);
+          G1 := First_Elmt (Goto_List);
+ 
+          while Present (L1)
+            and then Present (G1)
+          loop
+             if Sloc (Node (L1)) < Sloc (Node (G1)) then
+ 
+                --  Optimization: remove labels of loops and blocks, which
+                --  play no role in what follows.
+ 
+                if Nkind (Node (L1)) /= N_Loop_Statement
+                  and then Nkind (Node (L1)) /= N_Block_Statement
+                then
+                   Append_Elmt (Node (L1), Node_List);
+                end if;
+ 
+                Next_Elmt (L1);
+ 
+             else
+                Append_Elmt (Node (G1), Node_List);
+                Next_Elmt (G1);
+             end if;
+          end loop;
+ 
+          while Present (L1) loop
+             Append_Elmt (Node (L1), Node_List);
+             Next_Elmt (L1);
+          end loop;
+ 
+          while Present (G1) loop
+             Append_Elmt (Node (G1), Node_List);
+             Next_Elmt (G1);
+          end loop;
+       end Merge;
+ 
+       ---------------
+       -- No_Header --
+       ---------------
+ 
+       procedure No_Header (N : Elmt_Id) is
+          S1, S2 : Elmt_Id;
+ 
+       begin
+          S1 := Next_Elmt (N);
+          while Present (S1) loop
+             S2 := Next_Elmt (S1);
+             if Nkind (Node (S1)) = N_Goto_Statement
+               and then Matches (Node (N), Node (S1))
+             then
+                Remove_Elmt (Node_List, S1);
+             end if;
+ 
+             S1 := S2;
+          end loop;
+       end No_Header;
+ 
+       ------------------
+       -- Process_Goto --
+       ------------------
+ 
+       procedure Process_Goto (N : Elmt_Id) is
+          Goto1 : constant Node_Id := Node (N);
+          Goto2 : Node_Id;
+          S, S1 : Elmt_Id;
+ 
+       begin
+          S := Next_Elmt (N);
+ 
+          while Present (S) loop
+             S1 := Next_Elmt (S);
+             Goto2 := Node (S);
+ 
+             if Nkind (Goto2) = N_Goto_Statement
+               and then Goto_Id (Goto1) = Goto_Id (Goto2)
+               and then Find_Enclosing_Body (Goto1) =
+                        Find_Enclosing_Body (Goto2)
+             then
+ 
+                --  Goto2 may have the same target, remove it from
+                --  consideration.
+ 
+                Remove_Elmt (Node_List, S);
+             end if;
+ 
+             S := S1;
+          end loop;
+       end Process_Goto;
+ 
+       ---------------------
+       -- Rewrite_As_Loop --
+       ---------------------
+ 
+       procedure Rewrite_As_Loop
+         (Loop_Header : Node_Id;
+          Loop_End    : Node_Id)
+       is
+          Loop_Body : constant List_Id := New_List;
+          Loop_Stmt : constant Node_Id :=
+                        New_Node (N_Loop_Statement, Sloc (Loop_Header));
+          Stat      : Node_Id;
+          Next_Stat : Node_Id;
+       begin
+          Stat := Next (Loop_Header);
+          while Stat /= Loop_End loop
+             Next_Stat := Next (Stat);
+             Remove (Stat);
+             Append (Stat, Loop_Body);
+             Stat := Next_Stat;
+          end loop;
+ 
+          Set_Statements (Loop_Stmt, Loop_Body);
+          Set_Identifier (Loop_Stmt, Identifier (Loop_Header));
+ 
+          Remove (Loop_Header);
+          Rewrite (Loop_End, Loop_Stmt);
+          Error_Msg_N
+            ("code between label and backwards goto rewritten as loop?",
+              Loop_End);
+       end Rewrite_As_Loop;
+ 
+       --------------
+       -- Try_Loop --
+       --------------
+ 
+       procedure Try_Loop (N : Elmt_Id) is
+          Source : Elmt_Id;
+          Found  : Boolean := False;
+          S1     : Elmt_Id;
+ 
+       begin
+          S1 := Next_Elmt (N);
+          while Present (S1) loop
+             if Nkind (Node (S1)) = N_Goto_Statement
+               and then Matches (Node (N), Node (S1))
+             then
+                if not Found then
+                   if Parent (Node (N)) = Parent (Node (S1)) then
+                      Source := S1;
+                      Found  := True;
+ 
+                   else
+                      --  The goto is within some nested structure
+ 
+                      No_Header (N);
+                      return;
+                   end if;
+ 
+                else
+                   --  More than one goto with the same target
+ 
+                   No_Header (N);
+                   return;
+                end if;
+ 
+             elsif Nkind (Node (S1)) = N_Label
+               and then not Found
+             then
+                --  Intervening label before possible end of loop. Current
+                --  label is not a candidate. This is conservative, because
+                --  the label might not be the target of any jumps, but not
+                --  worth dealing with useless labels!
+ 
+                No_Header (N);
+                return;
+ 
+             else
+                --  If the node is a loop_statement, it corresponds to a
+                --  label-goto pair rewritten as a loop. Continue forward scan.
+ 
+                null;
+             end if;
+ 
+             Next_Elmt (S1);
+          end loop;
+ 
+          if Found then
+             Rewrite_As_Loop (Node (N), Node (Source));
+             Remove_Elmt (Node_List, N);
+             Remove_Elmt (Node_List, Source);
+          end if;
+       end Try_Loop;
+ 
+    begin
+       --  Start of processing for Find_Natural_Loops
+ 
+       Merge;
+ 
+       N := First_Elmt (Node_List);
+       while Present (N) loop
+          Succ := Next_Elmt (N);
+ 
+          if Nkind (Node (N)) = N_Label then
+             if No (Succ) then
+                exit;
+ 
+             elsif Nkind (Node (Succ)) = N_Label then
+                Try_Loop (Succ);
+ 
+                --  If a loop was found, the label has been removed, and
+                --  the following goto rewritten as the loop body.
+ 
+                Succ := Next_Elmt (N);
+ 
+                if Nkind (Node (Succ)) = N_Label then
+ 
+                   --  Following label was not removed, so current label
+                   --  is not a candidate header.
+ 
+                   No_Header (N);
+ 
+                else
+ 
+                   --  Following label was part of inner loop. Current
+                   --  label is still a candidate.
+ 
+                   Try_Loop (N);
+                   Succ := Next_Elmt (N);
+                end if;
+ 
+             elsif Nkind (Node (Succ)) = N_Goto_Statement then
+                Try_Loop (N);
+                Succ := Next_Elmt (N);
+             end if;
+ 
+          elsif Nkind (Node (N)) = N_Goto_Statement then
+             Process_Goto (N);
+             Succ := Next_Elmt (N);
+          end if;
+ 
+          N := Succ;
+       end loop;
+    end Find_Natural_Loops;
+ 
  --  Start of processing for Par.Labl
  
  begin
*************** begin
*** 204,207 ****
--- 532,537 ----
           Next_Elmt (Next_Label_Elmt);
     end loop;
  
+    Find_Natural_Loops;
+ 
  end Labl;
diff -Nrcpad gcc-3.4.3/gcc/ada/par-load.adb gcc-4.0.0/gcc/ada/par-load.adb
*** gcc-3.4.3/gcc/ada/par-load.adb	Mon Nov 24 14:27:57 2003
--- gcc-4.0.0/gcc/ada/par-load.adb	Mon Mar 29 12:03:14 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** procedure Load is
*** 89,104 ****
  
     function Same_File_Name_Except_For_Case
       (Expected_File_Name : File_Name_Type;
!       Actual_File_Name   : File_Name_Type)
!       return               Boolean;
     --  Given an actual file name and an expected file name (the latter being
     --  derived from the unit name), determine if they are the same except for
     --  possibly different casing of letters.
  
     function Same_File_Name_Except_For_Case
       (Expected_File_Name : File_Name_Type;
!       Actual_File_Name   : File_Name_Type)
!       return               Boolean
     is
     begin
        Get_Name_String (Actual_File_Name);
--- 89,106 ----
  
     function Same_File_Name_Except_For_Case
       (Expected_File_Name : File_Name_Type;
!       Actual_File_Name   : File_Name_Type) return Boolean;
     --  Given an actual file name and an expected file name (the latter being
     --  derived from the unit name), determine if they are the same except for
     --  possibly different casing of letters.
  
+    ------------------------------------
+    -- Same_File_Name_Except_For_Case --
+    ------------------------------------
+ 
     function Same_File_Name_Except_For_Case
       (Expected_File_Name : File_Name_Type;
!       Actual_File_Name   : File_Name_Type) return Boolean
     is
     begin
        Get_Name_String (Actual_File_Name);
*************** begin
*** 148,154 ****
     --  Next step, make sure that the unit name matches the file name
     --  and issue a warning message if not. We only output this for the
     --  main unit, since for other units it is more serious and is
!    --  caught in a separate test below.
  
     File_Name :=
       Get_File_Name
--- 150,158 ----
     --  Next step, make sure that the unit name matches the file name
     --  and issue a warning message if not. We only output this for the
     --  main unit, since for other units it is more serious and is
!    --  caught in a separate test below. We also inhibit the message in
!    --  multiple unit per file mode, because in this case the relation
!    --  between file name and unit name is broken.
  
     File_Name :=
       Get_File_Name
*************** begin
*** 156,161 ****
--- 160,166 ----
          Subunit => Nkind (Unit (Cunit (Cur_Unum))) = N_Subunit);
  
     if Cur_Unum = Main_Unit
+      and then Multiple_Unit_Index = 0
       and then File_Name /= Unit_File_Name (Cur_Unum)
       and then (File_Names_Case_Sensitive
                  or not Same_File_Name_Except_For_Case
*************** begin
*** 336,342 ****
        if Unum /= No_Unit then
           Set_Library_Unit (Curunit, Cunit (Unum));
        end if;
- 
     end if;
  
     --  Now we load with'ed units, with style/validity checks turned off
--- 341,346 ----
*************** begin
*** 350,356 ****
  
     Context_Node := First (Context_Items (Curunit));
     while Present (Context_Node) loop
- 
        if Nkind (Context_Node) = N_With_Clause then
           With_Node := Context_Node;
           Spec_Name := Get_Unit_Name (With_Node);
--- 354,359 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/par-prag.adb gcc-4.0.0/gcc/ada/par-prag.adb
*** gcc-3.4.3/gcc/ada/par-prag.adb	Tue Nov  4 12:51:46 2003
--- gcc-4.0.0/gcc/ada/par-prag.adb	Thu Feb 10 13:50:26 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 32,37 ****
--- 32,39 ----
  
  with Fname.UF; use Fname.UF;
  with Osint;    use Osint;
+ with Rident;   use Rident;
+ with Restrict; use Restrict;
  with Stringt;  use Stringt;
  with Stylesw;  use Stylesw;
  with Uintp;    use Uintp;
*************** separate (Par)
*** 41,46 ****
--- 43,49 ----
  
  function Prag (Pragma_Node : Node_Id; Semi : Source_Ptr) return Node_Id is
     Pragma_Name : constant Name_Id    := Chars (Pragma_Node);
+    Prag_Id     : constant Pragma_Id  := Get_Pragma_Id (Pragma_Name);
     Pragma_Sloc : constant Source_Ptr := Sloc (Pragma_Node);
     Arg_Count   : Nat;
     Arg_Node    : Node_Id;
*************** function Prag (Pragma_Node : Node_Id; Se
*** 83,88 ****
--- 86,99 ----
     --  Same as Check_Optional_Identifier, except that the name is required
     --  to be present and to match the given Id value.
  
+    procedure Process_Restrictions_Or_Restriction_Warnings;
+    --  Common processing for Restrictions and Restriction_Warnings pragmas.
+    --  This routine only processes the case of No_Obsolescent_Features,
+    --  which is the only restriction that has syntactic effects. No general
+    --  error checking is done, since this will be done in Sem_Prag. The
+    --  other case processed is pragma Restrictions No_Dependence, since
+    --  otherwise this is done too late.
+ 
     ----------
     -- Arg1 --
     ----------
*************** function Prag (Pragma_Node : Node_Id; Se
*** 196,204 ****
        end if;
     end Check_Required_Identifier;
  
!    ----------
!    -- Prag --
!    ----------
  
  begin
     Error_Msg_Name_1 := Pragma_Name;
--- 207,246 ----
        end if;
     end Check_Required_Identifier;
  
!    --------------------------------------------------
!    -- Process_Restrictions_Or_Restriction_Warnings --
!    --------------------------------------------------
! 
!    procedure Process_Restrictions_Or_Restriction_Warnings is
!       Arg  : Node_Id;
!       Id   : Name_Id;
!       Expr : Node_Id;
! 
!    begin
!       Arg := Arg1;
!       while Present (Arg) loop
!          Id := Chars (Arg);
!          Expr := Expression (Arg);
! 
!          if Id = No_Name
!            and then Nkind (Expr) = N_Identifier
!            and then Get_Restriction_Id (Chars (Expr)) = No_Obsolescent_Features
!          then
!             Set_Restriction (No_Obsolescent_Features, Pragma_Node);
!             Restriction_Warnings (No_Obsolescent_Features) :=
!               Prag_Id = Pragma_Restriction_Warnings;
! 
!          elsif Id = Name_No_Dependence then
!             Set_Restriction_No_Dependence
!               (Unit => Expr,
!                Warn  => Prag_Id = Pragma_Restriction_Warnings);
!          end if;
! 
!          Next (Arg);
!       end loop;
!    end Process_Restrictions_Or_Restriction_Warnings;
! 
! --  Start if processing for Prag
  
  begin
     Error_Msg_Name_1 := Pragma_Name;
*************** begin
*** 207,213 ****
     --  it is a semantic error, not a syntactic one (we have already checked
     --  the syntax for the unrecognized pragma as required by (RM 2.8(11)).
  
!    if not Is_Pragma_Name (Chars (Pragma_Node)) then
        return Pragma_Node;
     end if;
  
--- 249,255 ----
     --  it is a semantic error, not a syntactic one (we have already checked
     --  the syntax for the unrecognized pragma as required by (RM 2.8(11)).
  
!    if Prag_Id = Unknown_Pragma then
        return Pragma_Node;
     end if;
  
*************** begin
*** 234,264 ****
  
     --  Remaining processing is pragma dependent
  
!    case Get_Pragma_Id (Pragma_Name) is
  
        ------------
        -- Ada_83 --
        ------------
  
        --  This pragma must be processed at parse time, since we want to set
!       --  the Ada 83 and Ada 95 switches properly at parse time to recognize
!       --  Ada 83 syntax or Ada 95 syntax as appropriate.
  
        when Pragma_Ada_83 =>
!          Ada_83 := True;
!          Ada_95 := False;
  
        ------------
        -- Ada_95 --
        ------------
  
        --  This pragma must be processed at parse time, since we want to set
!       --  the Ada 83 and Ada_95 switches properly at parse time to recognize
!       --  Ada 83 syntax or Ada 95 syntax as appropriate.
  
        when Pragma_Ada_95 =>
!          Ada_83 := False;
!          Ada_95 := True;
  
        -----------
        -- Debug --
--- 276,318 ----
  
     --  Remaining processing is pragma dependent
  
!    case Prag_Id is
  
        ------------
        -- Ada_83 --
        ------------
  
        --  This pragma must be processed at parse time, since we want to set
!       --  the Ada version properly at parse time to recognize the appropriate
!       --  Ada version syntax.
  
        when Pragma_Ada_83 =>
!          Ada_Version := Ada_83;
  
        ------------
        -- Ada_95 --
        ------------
  
        --  This pragma must be processed at parse time, since we want to set
!       --  the Ada version properly at parse time to recognize the appropriate
!       --  Ada version syntax.
  
        when Pragma_Ada_95 =>
!          Ada_Version := Ada_95;
! 
!       ------------
!       -- Ada_05 --
!       ------------
! 
!       --  This pragma must be processed at parse time, since we want to set
!       --  the Ada version properly at parse time to recognize the appropriate
!       --  Ada version syntax. However, it is only the zero argument form that
!       --  must be processed at parse time.
! 
!       when Pragma_Ada_05 =>
!          if Arg_Count = 0 then
!             Ada_Version := Ada_05;
!          end if;
  
        -----------
        -- Debug --
*************** begin
*** 307,313 ****
           Check_Arg_Count (1);
           Check_No_Identifier (Arg1);
           Check_Arg_Is_On_Or_Off (Arg1);
!          Opt.Extensions_Allowed := (Chars (Expression (Arg1)) = Name_On);
  
        ----------------
        -- List (2.8) --
--- 361,374 ----
           Check_Arg_Count (1);
           Check_No_Identifier (Arg1);
           Check_Arg_Is_On_Or_Off (Arg1);
! 
!          if Chars (Expression (Arg1)) = Name_On then
!             Extensions_Allowed := True;
!             Ada_Version := Ada_Version_Type'Last;
!          else
!             Extensions_Allowed := False;
!             Ada_Version := Ada_Version_Type'Min (Ada_Version, Ada_95);
!          end if;
  
        ----------------
        -- List (2.8) --
*************** begin
*** 353,358 ****
--- 414,451 ----
           List_Pragmas.Increment_Last;
           List_Pragmas.Table (List_Pragmas.Last) := (Page, Semi);
  
+          ------------------
+          -- Restrictions --
+          ------------------
+ 
+          --  pragma Restrictions (RESTRICTION {, RESTRICTION});
+ 
+          --  RESTRICTION ::=
+          --    restriction_IDENTIFIER
+          --  | restriction_parameter_IDENTIFIER => EXPRESSION
+ 
+          --  We process the case of No_Obsolescent_Features, since this has
+          --  a syntactic effect that we need to detect at parse time (the use
+          --  of replacement characters such as colon for pound sign).
+ 
+          when Pragma_Restrictions =>
+             Process_Restrictions_Or_Restriction_Warnings;
+ 
+          --------------------------
+          -- Restriction_Warnings --
+          --------------------------
+ 
+          --  pragma Restriction_Warnings (RESTRICTION {, RESTRICTION});
+ 
+          --  RESTRICTION ::=
+          --    restriction_IDENTIFIER
+          --  | restriction_parameter_IDENTIFIER => EXPRESSION
+ 
+          --  See above comment for pragma Restrictions
+ 
+          when Pragma_Restriction_Warnings =>
+             Process_Restrictions_Or_Restriction_Warnings;
+ 
        ----------------------------------------------------------
        -- Source_File_Name and Source_File_Name_Project (GNAT) --
        ----------------------------------------------------------
*************** begin
*** 360,384 ****
        --  These two pragmas have the same syntax and semantics.
        --  There are five forms of these pragmas:
  
!       --  pragma Source_File_Name (
        --    [UNIT_NAME      =>] unit_NAME,
!       --     BODY_FILE_NAME =>  STRING_LITERAL);
  
!       --  pragma Source_File_Name (
        --    [UNIT_NAME      =>] unit_NAME,
!       --     SPEC_FILE_NAME =>  STRING_LITERAL);
  
!       --  pragma Source_File_Name (
        --     BODY_FILE_NAME  => STRING_LITERAL
        --  [, DOT_REPLACEMENT => STRING_LITERAL]
        --  [, CASING          => CASING_SPEC]);
  
!       --  pragma Source_File_Name (
        --     SPEC_FILE_NAME  => STRING_LITERAL
        --  [, DOT_REPLACEMENT => STRING_LITERAL]
        --  [, CASING          => CASING_SPEC]);
  
!       --  pragma Source_File_Name (
        --     SUBUNIT_FILE_NAME  => STRING_LITERAL
        --  [, DOT_REPLACEMENT    => STRING_LITERAL]
        --  [, CASING             => CASING_SPEC]);
--- 453,479 ----
        --  These two pragmas have the same syntax and semantics.
        --  There are five forms of these pragmas:
  
!       --  pragma Source_File_Name[_Project] (
        --    [UNIT_NAME      =>] unit_NAME,
!       --     BODY_FILE_NAME =>  STRING_LITERAL
!       --    [, [INDEX =>] INTEGER_LITERAL]);
  
!       --  pragma Source_File_Name[_Project] (
        --    [UNIT_NAME      =>] unit_NAME,
!       --     SPEC_FILE_NAME =>  STRING_LITERAL
!       --    [, [INDEX =>] INTEGER_LITERAL]);
  
!       --  pragma Source_File_Name[_Project] (
        --     BODY_FILE_NAME  => STRING_LITERAL
        --  [, DOT_REPLACEMENT => STRING_LITERAL]
        --  [, CASING          => CASING_SPEC]);
  
!       --  pragma Source_File_Name[_Project] (
        --     SPEC_FILE_NAME  => STRING_LITERAL
        --  [, DOT_REPLACEMENT => STRING_LITERAL]
        --  [, CASING          => CASING_SPEC]);
  
!       --  pragma Source_File_Name[_Project] (
        --     SUBUNIT_FILE_NAME  => STRING_LITERAL
        --  [, DOT_REPLACEMENT    => STRING_LITERAL]
        --  [, CASING             => CASING_SPEC]);
*************** begin
*** 410,415 ****
--- 505,512 ----
              Dot   : String_Ptr;
              Cas   : Casing_Type;
              Nast  : Nat;
+             Expr  : Node_Id;
+             Index : Nat;
  
              function Get_Fname (Arg : Node_Id) return Name_Id;
              --  Process file name from unit name form of pragma
*************** begin
*** 520,526 ****
           --  Source_File_Name_Project pragmas.
  
           begin
- 
              if Get_Pragma_Id (Pragma_Name) = Pragma_Source_File_Name then
                 if Project_File_In_Use = In_Use then
                    Error_Msg
--- 617,622 ----
*************** begin
*** 536,542 ****
                    Error_Msg
                      ("pragma Source_File_Name_Project should only be used " &
                       "with a project file", Pragma_Sloc);
- 
                 else
                    Project_File_In_Use := In_Use;
                 end if;
--- 632,637 ----
*************** begin
*** 569,575 ****
                    return Error;
                 end if;
  
!                Check_Arg_Count (2);
  
                 Check_Optional_Identifier (Arg1, Name_Unit_Name);
                 Unam := Get_Unit_Name (Expr1);
--- 664,693 ----
                    return Error;
                 end if;
  
!                --  Process index argument if present
! 
!                if Arg_Count = 3 then
!                   Expr := Expression (Arg3);
! 
!                   if Nkind (Expr) /= N_Integer_Literal
!                     or else not UI_Is_In_Int_Range (Intval (Expr))
!                     or else Intval (Expr) > 999
!                     or else Intval (Expr) <= 0
!                   then
!                      Error_Msg
!                        ("pragma% index must be integer literal" &
!                         " in range 1 .. 999", Sloc (Expr));
!                      raise Error_Resync;
!                   else
!                      Index := UI_To_Int (Intval (Expr));
!                   end if;
! 
!                --  No index argument present
! 
!                else
!                   Check_Arg_Count (2);
!                   Index := 0;
!                end if;
  
                 Check_Optional_Identifier (Arg1, Name_Unit_Name);
                 Unam := Get_Unit_Name (Expr1);
*************** begin
*** 577,586 ****
                 Check_Arg_Is_String_Literal (Arg2);
  
                 if Chars (Arg2) = Name_Spec_File_Name then
!                   Set_File_Name (Get_Spec_Name (Unam), Get_Fname (Arg2));
  
                 elsif Chars (Arg2) = Name_Body_File_Name then
!                   Set_File_Name (Unam, Get_Fname (Arg2));
  
                 else
                    Error_Msg_N
--- 695,706 ----
                 Check_Arg_Is_String_Literal (Arg2);
  
                 if Chars (Arg2) = Name_Spec_File_Name then
!                   Set_File_Name
!                     (Get_Spec_Name (Unam), Get_Fname (Arg2), Index);
  
                 elsif Chars (Arg2) = Name_Body_File_Name then
!                   Set_File_Name
!                     (Unam, Get_Fname (Arg2), Index);
  
                 else
                    Error_Msg_N
*************** begin
*** 628,641 ****
                 if Nast /= 1 then
                    Error_Msg_N
                      ("file name pattern must have exactly one * character",
!                      Arg2);
                    return Pragma_Node;
                 end if;
  
                 --  Set defaults for Casing and Dot_Separator parameters
  
                 Cas := All_Lower_Case;
- 
                 Dot := new String'(".");
  
                 --  Process second and third arguments if present
--- 748,760 ----
                 if Nast /= 1 then
                    Error_Msg_N
                      ("file name pattern must have exactly one * character",
!                      Arg1);
                    return Pragma_Node;
                 end if;
  
                 --  Set defaults for Casing and Dot_Separator parameters
  
                 Cas := All_Lower_Case;
                 Dot := new String'(".");
  
                 --  Process second and third arguments if present
*************** begin
*** 703,709 ****
                   ("file name required for first % pragma in file",
                    Pragma_Sloc);
                 raise Error_Resync;
- 
              else
                 Fname := No_Name;
              end if;
--- 822,827 ----
*************** begin
*** 887,892 ****
--- 1005,1011 ----
             Pragma_Component_Alignment          |
             Pragma_Controlled                   |
             Pragma_Convention                   |
+            Pragma_Detect_Blocking              |
             Pragma_Discard_Names                |
             Pragma_Eliminate                    |
             Pragma_Elaborate                    |
*************** begin
*** 940,949 ****
             Pragma_No_Return                    |
             Pragma_Obsolescent                  |
             Pragma_No_Run_Time                  |
             Pragma_Normalize_Scalars            |
             Pragma_Optimize                     |
             Pragma_Optional_Overriding          |
-            Pragma_Overriding                   |
             Pragma_Pack                         |
             Pragma_Passive                      |
             Pragma_Polling                      |
--- 1059,1068 ----
             Pragma_No_Return                    |
             Pragma_Obsolescent                  |
             Pragma_No_Run_Time                  |
+            Pragma_No_Strict_Aliasing           |
             Pragma_Normalize_Scalars            |
             Pragma_Optimize                     |
             Pragma_Optional_Overriding          |
             Pragma_Pack                         |
             Pragma_Passive                      |
             Pragma_Polling                      |
*************** begin
*** 951,956 ****
--- 1070,1077 ----
             Pragma_Persistent_Object            |
             Pragma_Preelaborate                 |
             Pragma_Priority                     |
+            Pragma_Profile                      |
+            Pragma_Profile_Warnings             |
             Pragma_Propagate_Exceptions         |
             Pragma_Psect_Object                 |
             Pragma_Pure                         |
*************** begin
*** 958,965 ****
             Pragma_Queuing_Policy               |
             Pragma_Remote_Call_Interface        |
             Pragma_Remote_Types                 |
-            Pragma_Restrictions                 |
-            Pragma_Restriction_Warnings         |
             Pragma_Restricted_Run_Time          |
             Pragma_Ravenscar                    |
             Pragma_Reviewable                   |
--- 1079,1084 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/par-util.adb gcc-4.0.0/gcc/ada/par-util.adb
*** gcc-3.4.3/gcc/ada/par-util.adb	Thu Oct 30 11:50:12 2003
--- gcc-4.0.0/gcc/ada/par-util.adb	Fri Jun 25 16:39:29 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 24,31 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Csets; use Csets;
! with Uintp; use Uintp;
  
  with GNAT.Spelling_Checker; use GNAT.Spelling_Checker;
  
--- 24,32 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Csets;   use Csets;
! with Stylesw; use Stylesw;
! with Uintp;   use Uintp;
  
  with GNAT.Spelling_Checker; use GNAT.Spelling_Checker;
  
*************** package body Util is
*** 114,120 ****
        end if;
  
        if Is_Bad_Spelling_Of (Name_Buffer (1 .. Name_Len), S) then
- 
           for J in 1 .. S'Last loop
              M1 (P1 + J - 1) := Fold_Upper (S (J));
           end loop;
--- 115,120 ----
*************** package body Util is
*** 126,132 ****
        else
           return False;
        end if;
- 
     end Bad_Spelling_Of;
  
     ----------------------
--- 126,131 ----
*************** package body Util is
*** 195,201 ****
     procedure Check_Simple_Expression_In_Ada_83 (E : Node_Id) is
     begin
        if Expr_Form = EF_Non_Simple then
!          if Ada_83 then
              Error_Msg_N ("(Ada 83) this expression must be parenthesized!", E);
           end if;
        end if;
--- 194,200 ----
     procedure Check_Simple_Expression_In_Ada_83 (E : Node_Id) is
     begin
        if Expr_Form = EF_Non_Simple then
!          if Ada_Version = Ada_83 then
              Error_Msg_N ("(Ada 83) this expression must be parenthesized!", E);
           end if;
        end if;
*************** package body Util is
*** 360,366 ****
  
     procedure Discard_Junk_List (L : List_Id) is
        pragma Warnings (Off, L);
- 
     begin
        null;
     end Discard_Junk_List;
--- 359,364 ----
*************** package body Util is
*** 371,377 ****
  
     procedure Discard_Junk_Node (N : Node_Id) is
        pragma Warnings (Off, N);
- 
     begin
        null;
     end Discard_Junk_Node;
--- 369,374 ----
*************** package body Util is
*** 627,632 ****
--- 624,638 ----
     procedure Push_Scope_Stack is
     begin
        Scope.Increment_Last;
+ 
+       if Style_Check_Max_Nesting_Level
+         and then Scope.Last = Style_Max_Nesting_Level + 1
+       then
+          Error_Msg
+            ("(style) maximum nesting level exceeded",
+             First_Non_Blank_Location);
+       end if;
+ 
        Scope.Table (Scope.Last).Junk := False;
        Scope.Table (Scope.Last).Node := Empty;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/par.adb gcc-4.0.0/gcc/ada/par.adb
*** gcc-3.4.3/gcc/ada/par.adb	Thu Oct 30 11:50:12 2003
--- gcc-4.0.0/gcc/ada/par.adb	Mon Jan  3 15:40:30 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Style;
*** 46,51 ****
--- 46,55 ----
  with Table;
  with Tbuild;   use Tbuild;
  
+ ---------
+ -- Par --
+ ---------
+ 
  function Par (Configuration_Pragmas : Boolean) return List_Id is
  
     Num_Library_Units : Natural := 0;
*************** function Par (Configuration_Pragmas : Bo
*** 391,396 ****
--- 395,405 ----
     SS_Whtm           : constant SS_Rec := SS_Rec'(F, F, F, F, F, F, T, F);
     SS_Unco           : constant SS_Rec := SS_Rec'(F, F, F, F, F, F, F, T);
  
+    Goto_List : Elist_Id;
+    --  List of goto nodes appearing in the current compilation. Used to
+    --  recognize natural loops and convert them into bona fide loops for
+    --  optimization purposes.
+ 
     Label_List : Elist_Id;
     --  List of label nodes for labels appearing in the current compilation.
     --  Used by Par.Labl to construct the corresponding implicit declarations.
*************** function Par (Configuration_Pragmas : Bo
*** 515,520 ****
--- 524,533 ----
     --  corresponding to their name, and return an ID value for the Node or
     --  List that is created.
  
+    -------------
+    -- Par.Ch2 --
+    -------------
+ 
     package Ch2 is
        function P_Pragma                               return Node_Id;
  
*************** function Par (Configuration_Pragmas : Bo
*** 535,540 ****
--- 548,557 ----
        --  Parses optional pragmas and appends them to the List
     end Ch2;
  
+    -------------
+    -- Par.Ch3 --
+    -------------
+ 
     package Ch3 is
        Missing_Begin_Msg : Error_Msg_Id;
        --  This variable is set by a call to P_Declarative_Part. Normally it
*************** function Par (Configuration_Pragmas : Bo
*** 545,552 ****
        --  variable, then the caller can change it to an appropriate missing
        --  begin message if indeed the BEGIN is missing.
  
-       function P_Access_Definition                    return Node_Id;
-       function P_Access_Type_Definition               return Node_Id;
        function P_Array_Type_Definition                return Node_Id;
        function P_Basic_Declarative_Items              return List_Id;
        function P_Constraint_Opt                       return Node_Id;
--- 562,567 ----
*************** function Par (Configuration_Pragmas : Bo
*** 560,570 ****
        function P_Range_Or_Subtype_Mark                return Node_Id;
        function P_Range_Constraint                     return Node_Id;
        function P_Record_Definition                    return Node_Id;
-       function P_Subtype_Indication                   return Node_Id;
        function P_Subtype_Mark                         return Node_Id;
        function P_Subtype_Mark_Resync                  return Node_Id;
        function P_Unknown_Discriminant_Part_Opt        return Boolean;
  
        procedure P_Component_Items (Decls : List_Id);
        --  Scan out one or more component items and append them to the
        --  given list. Only scans out more than one declaration in the
--- 575,595 ----
        function P_Range_Or_Subtype_Mark                return Node_Id;
        function P_Range_Constraint                     return Node_Id;
        function P_Record_Definition                    return Node_Id;
        function P_Subtype_Mark                         return Node_Id;
        function P_Subtype_Mark_Resync                  return Node_Id;
        function P_Unknown_Discriminant_Part_Opt        return Boolean;
  
+       function P_Access_Definition
+         (Null_Exclusion_Present : Boolean) return Node_Id;
+       --  Ada 2005 (AI-231/AI-254): The caller parses the null-exclusion part
+       --  and indicates if it was present
+ 
+       function P_Access_Type_Definition
+         (Header_Already_Parsed : Boolean := False) return Node_Id;
+       --  Ada 2005 (AI-254): The formal is used to indicate if the caller has
+       --  parsed the null_exclusion part. In this case the caller has also
+       --  removed the ACCESS token
+ 
        procedure P_Component_Items (Decls : List_Id);
        --  Scan out one or more component items and append them to the
        --  given list. Only scans out more than one declaration in the
*************** function Par (Configuration_Pragmas : Bo
*** 576,581 ****
--- 601,615 ----
        --  treatment of errors in case a reserved word is scanned. See the
        --  declaration of this type for details.
  
+       function P_Null_Exclusion return Boolean;
+       --  Ada 2005 (AI-231): Parse the null-excluding part. True indicates
+       --  that the null-excluding part was present.
+ 
+       function P_Subtype_Indication
+         (Not_Null_Present : Boolean := False) return Node_Id;
+       --  Ada 2005 (AI-231): The flag Not_Null_Present indicates that the
+       --  null-excluding part has been scanned out and it was present.
+ 
        function Init_Expr_Opt (P : Boolean := False) return Node_Id;
        --  If an initialization expression is present (:= expression), then
        --  it is scanned out and returned, otherwise Empty is returned if no
*************** function Par (Configuration_Pragmas : Bo
*** 590,606 ****
        --  Token is known to be a declaration token (in Token_Class_Declk)
        --  on entry, so there definition is a declaration to be scanned.
  
!       function P_Subtype_Indication (Subtype_Mark : Node_Id) return Node_Id;
        --  This version of P_Subtype_Indication is called when the caller has
        --  already scanned out the subtype mark which is passed as a parameter.
  
        function P_Subtype_Mark_Attribute (Type_Node : Node_Id) return Node_Id;
        --  Parse a subtype mark attribute. The caller has already parsed the
        --  subtype mark, which is passed in as the argument, and has checked
        --  that the current token is apostrophe.
- 
     end Ch3;
  
     package Ch4 is
        function P_Aggregate                            return Node_Id;
        function P_Expression                           return Node_Id;
--- 624,647 ----
        --  Token is known to be a declaration token (in Token_Class_Declk)
        --  on entry, so there definition is a declaration to be scanned.
  
!       function P_Subtype_Indication
!         (Subtype_Mark     : Node_Id;
!          Not_Null_Present : Boolean := False) return Node_Id;
        --  This version of P_Subtype_Indication is called when the caller has
        --  already scanned out the subtype mark which is passed as a parameter.
+       --  Ada 2005 (AI-231): The flag Not_Null_Present indicates that the
+       --  null-excluding part has been scanned out and it was present.
  
        function P_Subtype_Mark_Attribute (Type_Node : Node_Id) return Node_Id;
        --  Parse a subtype mark attribute. The caller has already parsed the
        --  subtype mark, which is passed in as the argument, and has checked
        --  that the current token is apostrophe.
     end Ch3;
  
+    -------------
+    -- Par.Ch4 --
+    -------------
+ 
     package Ch4 is
        function P_Aggregate                            return Node_Id;
        function P_Expression                           return Node_Id;
*************** function Par (Configuration_Pragmas : Bo
*** 618,628 ****
           return         Node_Id;
        --  This routine scans out a qualified expression when the caller has
        --  already scanned out the name and apostrophe of the construct.
- 
     end Ch4;
  
!    package Ch5 is
  
        function P_Statement_Name (Name_Node : Node_Id) return Node_Id;
        --  Given a node representing a name (which is a call), converts it
        --  to the syntactically corresponding procedure call statement.
--- 659,671 ----
           return         Node_Id;
        --  This routine scans out a qualified expression when the caller has
        --  already scanned out the name and apostrophe of the construct.
     end Ch4;
  
!    -------------
!    -- Par.Ch5 --
!    -------------
  
+    package Ch5 is
        function P_Statement_Name (Name_Node : Node_Id) return Node_Id;
        --  Given a node representing a name (which is a call), converts it
        --  to the syntactically corresponding procedure call statement.
*************** function Par (Configuration_Pragmas : Bo
*** 634,642 ****
        procedure Parse_Decls_Begin_End (Parent : Node_Id);
        --  Parses declarations and handled statement sequence, setting
        --  fields of Parent node appropriately.
- 
     end Ch5;
  
     package Ch6 is
        function P_Designator                           return Node_Id;
        function P_Defining_Program_Unit_Name           return Node_Id;
--- 677,688 ----
        procedure Parse_Decls_Begin_End (Parent : Node_Id);
        --  Parses declarations and handled statement sequence, setting
        --  fields of Parent node appropriately.
     end Ch5;
  
+    -------------
+    -- Par.Ch6 --
+    -------------
+ 
     package Ch6 is
        function P_Designator                           return Node_Id;
        function P_Defining_Program_Unit_Name           return Node_Id;
*************** function Par (Configuration_Pragmas : Bo
*** 654,662 ****
        --  PROCEDURE or FUNCTION. The parameter indicates which possible
        --  possible kinds of construct (body, spec, instantiation etc.)
        --  are permissible in the current context.
- 
     end Ch6;
  
     package Ch7 is
        function P_Package (Pf_Flags : Pf_Rec) return Node_Id;
        --  Scans out any construct starting with the keyword PACKAGE. The
--- 700,711 ----
        --  PROCEDURE or FUNCTION. The parameter indicates which possible
        --  possible kinds of construct (body, spec, instantiation etc.)
        --  are permissible in the current context.
     end Ch6;
  
+    -------------
+    -- Par.Ch7 --
+    -------------
+ 
     package Ch7 is
        function P_Package (Pf_Flags : Pf_Rec) return Node_Id;
        --  Scans out any construct starting with the keyword PACKAGE. The
*************** function Par (Configuration_Pragmas : Bo
*** 664,673 ****
--- 713,730 ----
        --  instantiation etc.) are permissible in the current context.
     end Ch7;
  
+    -------------
+    -- Par.Ch8 --
+    -------------
+ 
     package Ch8 is
        function P_Use_Clause                           return Node_Id;
     end Ch8;
  
+    -------------
+    -- Par.Ch9 --
+    -------------
+ 
     package Ch9 is
        function P_Abort_Statement                      return Node_Id;
        function P_Abortable_Part                       return Node_Id;
*************** function Par (Configuration_Pragmas : Bo
*** 681,686 ****
--- 738,747 ----
        function P_Terminate_Alternative                return Node_Id;
     end Ch9;
  
+    --------------
+    -- Par.Ch10 --
+    --------------
+ 
     package Ch10 is
        function P_Compilation_Unit                     return Node_Id;
        --  Note: this function scans a single compilation unit, and
*************** function Par (Configuration_Pragmas : Bo
*** 692,699 ****
--- 753,768 ----
        --  for end of file and there may be more compilation units to
        --  scan. The caller can uniquely detect this situation by the
        --  fact that Token is not set to Tok_EOF on return.
+       --
+       --  The Ignore parameter is normally set False. It is set True
+       --  in multiple unit per file mode if we are skipping past a unit
+       --  that we are not interested in.
     end Ch10;
  
+    --------------
+    -- Par.Ch11 --
+    --------------
+ 
     package Ch11 is
        function P_Handled_Sequence_Of_Statements       return Node_Id;
        function P_Raise_Statement                      return Node_Id;
*************** function Par (Configuration_Pragmas : Bo
*** 702,715 ****
        --  Parses the partial construct EXCEPTION followed by a list of
        --  exception handlers which appears in a number of productions,
        --  and returns the list of exception handlers.
- 
     end Ch11;
  
     package Ch12 is
        function P_Generic                              return Node_Id;
        function P_Generic_Actual_Part_Opt              return List_Id;
     end Ch12;
  
     package Ch13 is
        function P_Representation_Clause                return Node_Id;
  
--- 771,791 ----
        --  Parses the partial construct EXCEPTION followed by a list of
        --  exception handlers which appears in a number of productions,
        --  and returns the list of exception handlers.
     end Ch11;
  
+    --------------
+    -- Par.Ch12 --
+    --------------
+ 
     package Ch12 is
        function P_Generic                              return Node_Id;
        function P_Generic_Actual_Part_Opt              return List_Id;
     end Ch12;
  
+    --------------
+    -- Par.Ch13 --
+    --------------
+ 
     package Ch13 is
        function P_Representation_Clause                return Node_Id;
  
*************** function Par (Configuration_Pragmas : Bo
*** 730,743 ****
     --    At clause is parsed by P_At_Clause (13.1)
     --    Mod clause is parsed by P_Mod_Clause (13.5.1)
  
!    ------------------
!    -- End Handling --
!    ------------------
  
     --  Routines for handling end lines, including scope recovery
  
     package Endh is
- 
        function Check_End return Boolean;
        --  Called when an end sequence is required. In the absence of an error
        --  situation, Token contains Tok_End on entry, but in a missing end
--- 806,818 ----
     --    At clause is parsed by P_At_Clause (13.1)
     --    Mod clause is parsed by P_Mod_Clause (13.5.1)
  
!    --------------
!    -- Par.Endh --
!    --------------
  
     --  Routines for handling end lines, including scope recovery
  
     package Endh is
        function Check_End return Boolean;
        --  Called when an end sequence is required. In the absence of an error
        --  situation, Token contains Tok_End on entry, but in a missing end
*************** function Par (Configuration_Pragmas : Bo
*** 765,776 ****
        --  only be used in cases where the only appropriate terminator is end.
        --  If Parent is non-empty, then if a correct END line is encountered,
        --  the End_Label field of Parent is set appropriately.
- 
     end Endh;
  
!    ------------------------------------
!    -- Resynchronization After Errors --
!    ------------------------------------
  
     --  These procedures are used to resynchronize after errors. Following an
     --  error which is not immediately locally recoverable, the exception
--- 840,850 ----
        --  only be used in cases where the only appropriate terminator is end.
        --  If Parent is non-empty, then if a correct END line is encountered,
        --  the End_Label field of Parent is set appropriately.
     end Endh;
  
!    --------------
!    -- Par.Sync --
!    --------------
  
     --  These procedures are used to resynchronize after errors. Following an
     --  error which is not immediately locally recoverable, the exception
*************** function Par (Configuration_Pragmas : Bo
*** 783,789 ****
     --  Multiple_Errors_Per_Line is set in Options.
  
     package Sync is
- 
        procedure Resync_Choice;
        --  Used if an error occurs scanning a choice. The scan pointer is
        --  advanced to the next vertical bar, arrow, or semicolon, whichever
--- 857,862 ----
*************** function Par (Configuration_Pragmas : Bo
*** 828,839 ****
        procedure Resync_Cunit;
        --  Synchronize to next token which could be the start of a compilation
        --  unit, or to the end of file token.
- 
     end Sync;
  
!    -------------------------
!    -- Token Scan Routines --
!    -------------------------
  
     --  Routines to check for expected tokens
  
--- 901,911 ----
        procedure Resync_Cunit;
        --  Synchronize to next token which could be the start of a compilation
        --  unit, or to the end of file token.
     end Sync;
  
!    --------------
!    -- Par.Tchk --
!    --------------
  
     --  Routines to check for expected tokens
  
*************** function Par (Configuration_Pragmas : Bo
*** 900,914 ****
        procedure TF_Semicolon;
        procedure TF_Then;
        procedure TF_Use;
- 
     end Tchk;
  
!    ----------------------
!    -- Utility Routines --
!    ----------------------
  
     package Util is
- 
        function Bad_Spelling_Of (T : Token_Type) return Boolean;
        --  This function is called in an error situation. It checks if the
        --  current token is an identifier whose name is a plausible bad
--- 972,984 ----
        procedure TF_Semicolon;
        procedure TF_Then;
        procedure TF_Use;
     end Tchk;
  
!    --------------
!    -- Par.Util --
!    --------------
  
     package Util is
        function Bad_Spelling_Of (T : Token_Type) return Boolean;
        --  This function is called in an error situation. It checks if the
        --  current token is an identifier whose name is a plausible bad
*************** function Par (Configuration_Pragmas : Bo
*** 1035,1046 ****
  
        function Token_Is_At_End_Of_Line return Boolean;
        --  Determines if the current token is the last token on the line
- 
     end Util;
  
!    ---------------------------------------
!    -- Specialized Syntax Check Routines --
!    ---------------------------------------
  
     function Prag (Pragma_Node : Node_Id; Semi : Source_Ptr) return Node_Id;
     --  This function is passed a tree for a pragma that has been scanned out.
--- 1105,1117 ----
  
        function Token_Is_At_End_Of_Line return Boolean;
        --  Determines if the current token is the last token on the line
     end Util;
  
!    --------------
!    -- Par.Prag --
!    --------------
! 
!    --  The processing for pragmas is split off from chapter 2
  
     function Prag (Pragma_Node : Node_Id; Semi : Source_Ptr) return Node_Id;
     --  This function is passed a tree for a pragma that has been scanned out.
*************** function Par (Configuration_Pragmas : Bo
*** 1059,1067 ****
     --  the scanning of the semicolon so that it will be scanned using the
     --  settings from the Style_Checks pragma preceding it.
  
!    -------------------------
!    -- Subsidiary Routines --
!    -------------------------
  
     procedure Labl;
     --  This procedure creates implicit label declarations for all label that
--- 1130,1138 ----
     --  the scanning of the semicolon so that it will be scanned using the
     --  settings from the Style_Checks pragma preceding it.
  
!    --------------
!    -- Par.Labl --
!    --------------
  
     procedure Labl;
     --  This procedure creates implicit label declarations for all label that
*************** function Par (Configuration_Pragmas : Bo
*** 1071,1076 ****
--- 1142,1151 ----
     --  label is declared (e.g. a sequence of statements is not yet attached
     --  to its containing scope at the point a label in the sequence is found)
  
+    --------------
+    -- Par.Load --
+    --------------
+ 
     procedure Load;
     --  This procedure loads all subsidiary units that are required by this
     --  unit, including with'ed units, specs for bodies, and parents for child
*************** function Par (Configuration_Pragmas : Bo
*** 1125,1143 ****
     procedure Labl is separate;
     procedure Load is separate;
  
!    ---------
!    -- Par --
!    ---------
! 
! --  This function is the parse routine called at the outer level. It parses
! --  the current compilation unit and adds implicit label declarations.
  
  begin
     --  Deal with configuration pragmas case first
  
     if Configuration_Pragmas then
        declare
-          Ecount  : constant Int     := Serious_Errors_Detected;
           Pragmas : constant List_Id := Empty_List;
           P_Node  : Node_Id;
  
--- 1200,1213 ----
     procedure Labl is separate;
     procedure Load is separate;
  
! --  Start of processing for Par
  
  begin
+ 
     --  Deal with configuration pragmas case first
  
     if Configuration_Pragmas then
        declare
           Pragmas : constant List_Id := Empty_List;
           P_Node  : Node_Id;
  
*************** begin
*** 1153,1172 ****
              else
                 P_Node := P_Pragma;
  
!                if Serious_Errors_Detected > Ecount then
!                   return Error_List;
!                end if;
  
!                if Chars (P_Node) > Last_Configuration_Pragma_Name
!                  and then Chars (P_Node) /= Name_Source_Reference
!                then
!                   Error_Msg_SC
!                     ("only configuration pragmas allowed " &
!                      "in configuration file");
!                   return Error_List;
!                end if;
  
!                Append (P_Node, Pragmas);
              end if;
           end loop;
        end;
--- 1223,1251 ----
              else
                 P_Node := P_Pragma;
  
!                if Nkind (P_Node) = N_Pragma then
  
!                   --  Give error if bad pragma
  
!                   if Chars (P_Node) > Last_Configuration_Pragma_Name
!                     and then Chars (P_Node) /= Name_Source_Reference
!                   then
!                      if Is_Pragma_Name (Chars (P_Node)) then
!                         Error_Msg_N
!                           ("only configuration pragmas allowed " &
!                            "in configuration file", P_Node);
!                      else
!                         Error_Msg_N
!                           ("unrecognized pragma in configuration file",
!                            P_Node);
!                      end if;
! 
!                   --  Pragma is OK config pragma, so collect it
! 
!                   else
!                      Append (P_Node, Pragmas);
!                   end if;
!                end if;
              end if;
           end loop;
        end;
*************** begin
*** 1176,1218 ****
     else
        Save_Opt_Config_Switches (Save_Config_Switches);
  
!       --  Special processing for language defined units. For this purpose
!       --  we do NOT consider the renamings in annex J as predefined. That
!       --  allows users to compile their own versions of these files, and
!       --  in particular, in the VMS implementation, the DEC versions can
!       --  be substituted for the standard Ada 95 versions.
! 
!       if Is_Predefined_File_Name
!            (Fname => File_Name (Current_Source_File),
!             Renamings_Included => False)
!       then
!          Set_Opt_Config_Switches
!            (Is_Internal_File_Name (File_Name (Current_Source_File)));
! 
!          --  If this is the main unit, disallow compilation unless the -gnatg
!          --  (GNAT mode) switch is set (from a user point of view, the rule is
!          --  that language defined units cannot be recompiled).
! 
!          --  However, an exception is s-rpc, and its children. We test this
!          --  by looking at the character after the minus, the rule is that
!          --  System.RPC and its children are the only children in System
!          --  whose second level name can start with the letter r.
! 
!          Get_Name_String (File_Name (Current_Source_File));
! 
!          if (Name_Len < 3 or else Name_Buffer (1 .. 3) /= "s-r")
!            and then Current_Source_Unit = Main_Unit
!            and then not GNAT_Mode
!            and then Operating_Mode = Generate_Code
!          then
!             Error_Msg_SC ("language defined units may not be recompiled");
!          end if;
!       end if;
! 
!       --  The following loop runs more than once only in syntax check mode
!       --  where we allow multiple compilation units in the same file.
  
!       loop
           Set_Opt_Config_Switches
             (Is_Internal_File_Name (File_Name (Current_Source_File)));
  
--- 1255,1266 ----
     else
        Save_Opt_Config_Switches (Save_Config_Switches);
  
!       --  The following loop runs more than once in syntax check mode
!       --  where we allow multiple compilation units in the same file
!       --  and in Multiple_Unit_Per_file mode where we skip units till
!       --  we get to the unit we want.
  
!       for Ucount in Pos loop
           Set_Opt_Config_Switches
             (Is_Internal_File_Name (File_Name (Current_Source_File)));
  
*************** begin
*** 1225,1238 ****
           SIS_Entry_Active := False;
           Last_Resync_Point := No_Location;
  
           Label_List := New_Elmt_List;
-          Discard_Node (P_Compilation_Unit);
  
!          --  If we are not at an end of file, then this means that we are
!          --  in syntax scan mode, and we can have another compilation unit,
!          --  otherwise we will exit from the loop.
  
-          exit when Token = Tok_EOF;
           Restore_Opt_Config_Switches (Save_Config_Switches);
        end loop;
  
--- 1273,1392 ----
           SIS_Entry_Active := False;
           Last_Resync_Point := No_Location;
  
+          Goto_List  := New_Elmt_List;
           Label_List := New_Elmt_List;
  
!          --  If in multiple unit per file mode, skip past ignored unit
! 
!          if Ucount < Multiple_Unit_Index then
! 
!             --  We skip in syntax check only mode, since we don't want
!             --  to do anything more than skip past the unit and ignore it.
!             --  This causes processing like setting up a unit table entry
!             --  to be skipped.
! 
!             declare
!                Save_Operating_Mode : constant Operating_Mode_Type :=
!                                        Operating_Mode;
! 
!                Save_Style_Check : constant Boolean := Style_Check;
! 
!             begin
!                Operating_Mode := Check_Syntax;
!                Style_Check := False;
!                Discard_Node (P_Compilation_Unit);
!                Operating_Mode := Save_Operating_Mode;
!                Style_Check := Save_Style_Check;
! 
!                --  If we are at an end of file, and not yet at the right
!                --  unit, then we have a fatal error. The unit is missing.
! 
!                if Token = Tok_EOF then
!                   Error_Msg_SC ("file has too few compilation units");
!                   raise Unrecoverable_Error;
!                end if;
!             end;
! 
!             --  Here if we are not skipping a file in multiple unit per file
!             --  mode. Parse the unit that we are interested in. Note that in
!             --  check syntax mode we are interested in all units in the file.
! 
!          else
!             declare
!                Comp_Unit_Node : constant Node_Id := P_Compilation_Unit;
! 
!             begin
!                --  If parsing was successful and we are not in check syntax
!                --  mode, check that language defined units are compiled in
!                --  GNAT mode. For this purpose we do NOT consider renamings
!                --  in annex J as predefined. That allows users to compile
!                --  their own versions of these files, and in particular,
!                --  in the VMS implementation, the DEC versions can be
!                --  substituted for the standard Ada 95 versions. Another
!                --  exception is System.RPC and its children. This allows
!                --  a user to supply their own communication layer.
! 
!                if Comp_Unit_Node /= Error
!                  and then Operating_Mode = Generate_Code
!                  and then Current_Source_Unit = Main_Unit
!                  and then not GNAT_Mode
!                then
!                   declare
!                      Uname : constant String :=
!                                Get_Name_String
!                                  (Unit_Name (Current_Source_Unit));
!                      Name : String (1 .. Uname'Length - 2);
! 
!                   begin
!                      --  Because Unit_Name includes "%s" or "%b", we need to
!                      --  strip the last two characters to get the real unit
!                      --  name.
! 
!                      Name := Uname (Uname'First .. Uname'Last - 2);
! 
!                      if (Name = "ada"                    or else
!                          Name = "calendar"               or else
!                          Name = "interfaces"             or else
!                          Name = "system"                 or else
!                          Name = "machine_code"           or else
!                          Name = "unchecked_conversion"   or else
!                          Name = "unchecked_deallocation"
!                            or else (Name'Length > 4
!                                      and then
!                                        Name (Name'First .. Name'First + 3) =
!                                                                  "ada.")
!                            or else (Name'Length > 11
!                                      and then
!                                        Name (Name'First .. Name'First + 10) =
!                                                                  "interfaces.")
!                            or else (Name'Length > 7
!                                      and then
!                                        Name (Name'First .. Name'First + 6) =
!                                                                  "system."))
!                        and then Name /= "system.rpc"
!                        and then
!                          (Name'Length < 11
!                             or else Name (Name'First .. Name'First + 10) /=
!                                                                  "system.rpc.")
!                      then
!                         Error_Msg
!                           ("language defined units may not be recompiled",
!                            Sloc (Unit (Comp_Unit_Node)));
!                      end if;
!                   end;
!                end if;
!             end;
! 
!             --  All done if at end of file
! 
!             exit when Token = Tok_EOF;
! 
!             --  If we are not at an end of file, it means we are in syntax
!             --  check only mode, and we keep the loop going to parse all
!             --  remaining units in the file.
! 
!          end if;
  
           Restore_Opt_Config_Switches (Save_Config_Switches);
        end loop;
  
*************** begin
*** 1260,1264 ****
        Set_Comes_From_Source_Default (False);
        return Empty_List;
     end if;
- 
  end Par;
--- 1414,1417 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/prj-attr-pm.adb gcc-4.0.0/gcc/ada/prj-attr-pm.adb
*** gcc-3.4.3/gcc/ada/prj-attr-pm.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/prj-attr-pm.adb	Fri Sep 17 13:46:12 2004
***************
*** 0 ****
--- 1,68 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                          P R J . A T T R . P M                           --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package body Prj.Attr.PM is
+ 
+    -------------------
+    -- Add_Attribute --
+    -------------------
+ 
+    procedure Add_Attribute
+      (To_Package     : Package_Node_Id;
+       Attribute_Name : Name_Id;
+       Attribute_Node : out Attribute_Node_Id)
+    is
+    begin
+       --  Only add the attribute if the package is already defined
+ 
+       if To_Package /= Empty_Package then
+          Attrs.Increment_Last;
+          Attrs.Table (Attrs.Last) :=
+            (Name              => Attribute_Name,
+             Var_Kind          => Undefined,
+             Optional_Index    => False,
+             Attr_Kind         => Unknown,
+             Next              =>
+               Package_Attributes.Table (To_Package.Value).First_Attribute);
+          Package_Attributes.Table (To_Package.Value).First_Attribute :=
+            Attrs.Last;
+          Attribute_Node := (Value => Attrs.Last);
+       end if;
+    end Add_Attribute;
+ 
+    -------------------------
+    -- Add_Unknown_Package --
+    -------------------------
+ 
+    procedure Add_Unknown_Package (Name : Name_Id; Id : out Package_Node_Id) is
+    begin
+       Package_Attributes.Increment_Last;
+       Id := (Value => Package_Attributes.Last);
+       Package_Attributes.Table (Id.Value) :=
+         (Name => Name, Known => False, First_Attribute => Empty_Attr);
+    end Add_Unknown_Package;
+ 
+ end Prj.Attr.PM;
diff -Nrcpad gcc-3.4.3/gcc/ada/prj-attr-pm.ads gcc-4.0.0/gcc/ada/prj-attr-pm.ads
*** gcc-3.4.3/gcc/ada/prj-attr-pm.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/prj-attr-pm.ads	Fri Sep 17 13:46:12 2004
***************
*** 0 ****
--- 1,45 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                          P R J . A T T R . P M                           --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Types; use Types;
+ 
+ package Prj.Attr.PM is
+    --  The following procedures are not secure and should only be used by the
+    --  Project Manager, that is the packages of the Prj or MLib hierarchies.
+ 
+    procedure Add_Unknown_Package (Name : Name_Id; Id : out Package_Node_Id);
+    --  Add a new unknown package. The Name cannot be the name of a predefined
+    --  or already registered package, but this is not checked.
+ 
+    procedure Add_Attribute
+      (To_Package     : Package_Node_Id;
+       Attribute_Name : Name_Id;
+       Attribute_Node : out Attribute_Node_Id);
+    --  Add an attribute to the list for package To_Package. Attribute_Name
+    --  cannot be the name of an existing attribute of the package, but this is
+    --  not checked. Does nothing if To_Package is Empty_Package.
+ 
+ end Prj.Attr.PM;
diff -Nrcpad gcc-3.4.3/gcc/ada/prj-attr.adb gcc-4.0.0/gcc/ada/prj-attr.adb
*** gcc-3.4.3/gcc/ada/prj-attr.adb	Thu Nov 20 09:54:00 2003
--- gcc-4.0.0/gcc/ada/prj-attr.adb	Wed Dec  8 11:25:43 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2001-2003 Free Software Foundation, Inc.       --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2001-2004 Free Software Foundation, Inc.       --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 24,45 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Ada.Characters.Handling; use Ada.Characters.Handling;
! with Namet;     use Namet;
! with Osint;     use Osint;
! with Output;    use Output;
  
  package body Prj.Attr is
  
     --  Names end with '#'
  
     --  Package names are preceded by 'P'
  
!    --  Attribute names are preceded by two letters
  
     --  The first letter is one of
     --    'S' for Single
!    --    'L' for list
  
     --  The second letter is one of
     --    'V' for single variable
--- 24,51 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Namet;   use Namet;
! with Osint;
! with Prj.Com; use Prj.Com;
! with Table;
! 
! with System.Case_Util; use System.Case_Util;
  
  package body Prj.Attr is
  
+    --  Data for predefined attributes and packages
+ 
     --  Names end with '#'
  
     --  Package names are preceded by 'P'
  
!    --  Attribute names are preceded by two letters:
  
     --  The first letter is one of
     --    'S' for Single
!    --    's' for Single with optional index
!    --    'L' for List
!    --    'l' for List of strings with optional indexes
  
     --  The second letter is one of
     --    'V' for single variable
*************** package body Prj.Attr is
*** 47,52 ****
--- 53,59 ----
     --    'a' for case insensitive associative array
     --    'b' for associative array, case insensitive if file names are case
     --        insensitive
+    --    'c' same as 'b', with optional index
  
     --  End is indicated by two consecutive '#'.
  
*************** package body Prj.Attr is
*** 72,80 ****
       "SVlibrary_symbol_file#" &
       "SVlibrary_symbol_policy#" &
       "SVlibrary_reference_symbol_file#" &
!      "LVmain#" &
       "LVlanguages#" &
       "SVmain_language#" &
  
     --  package Naming
  
--- 79,89 ----
       "SVlibrary_symbol_file#" &
       "SVlibrary_symbol_policy#" &
       "SVlibrary_reference_symbol_file#" &
!      "lVmain#" &
       "LVlanguages#" &
       "SVmain_language#" &
+      "LVada_roots#" &
+      "SVexternally_built#" &
  
     --  package Naming
  
*************** package body Prj.Attr is
*** 86,95 ****
       "SVseparate_suffix#" &
       "SVcasing#" &
       "SVdot_replacement#" &
!      "SAspecification#" &
!      "SAspec#" &
!      "SAimplementation#" &
!      "SAbody#" &
       "Laspecification_exceptions#" &
       "Laimplementation_exceptions#" &
  
--- 95,104 ----
       "SVseparate_suffix#" &
       "SVcasing#" &
       "SVdot_replacement#" &
!      "sAspecification#" &
!      "sAspec#" &
!      "sAimplementation#" &
!      "sAbody#" &
       "Laspecification_exceptions#" &
       "Laimplementation_exceptions#" &
  
*************** package body Prj.Attr is
*** 97,111 ****
  
       "Pcompiler#" &
       "Ladefault_switches#" &
!      "Lbswitches#" &
       "SVlocal_configuration_pragmas#" &
  
     --  package Builder
  
       "Pbuilder#" &
       "Ladefault_switches#" &
!      "Lbswitches#" &
!      "SAexecutable#" &
       "SVexecutable_suffix#" &
       "SVglobal_configuration_pragmas#" &
  
--- 106,120 ----
  
       "Pcompiler#" &
       "Ladefault_switches#" &
!      "Lcswitches#" &
       "SVlocal_configuration_pragmas#" &
  
     --  package Builder
  
       "Pbuilder#" &
       "Ladefault_switches#" &
!      "Lcswitches#" &
!      "Scexecutable#" &
       "SVexecutable_suffix#" &
       "SVglobal_configuration_pragmas#" &
  
*************** package body Prj.Attr is
*** 118,130 ****
  
       "Pbinder#" &
       "Ladefault_switches#" &
!      "Lbswitches#" &
  
     --  package Linker
  
       "Plinker#" &
       "Ladefault_switches#" &
!      "Lbswitches#" &
       "LVlinker_options#" &
  
     --  package Cross_Reference
--- 127,139 ----
  
       "Pbinder#" &
       "Ladefault_switches#" &
!      "Lcswitches#" &
  
     --  package Linker
  
       "Plinker#" &
       "Ladefault_switches#" &
!      "Lcswitches#" &
       "LVlinker_options#" &
  
     --  package Cross_Reference
*************** package body Prj.Attr is
*** 157,162 ****
--- 166,177 ----
       "Ladefault_switches#" &
       "Lbswitches#" &
  
+    --  package Metrics
+ 
+      "Pmetrics#" &
+      "Ladefault_switches#" &
+      "Lbswitches#" &
+ 
     --  package Ide
  
       "Pide#" &
*************** package body Prj.Attr is
*** 171,198 ****
       "SVvcs_file_check#" &
       "SVvcs_log_check#" &
  
       "#";
  
     ----------------
     -- Initialize --
     ----------------
  
     procedure Initialize is
!       Start             : Positive           := Initialization_Data'First;
!       Finish            : Positive           := Start;
!       Current_Package   : Package_Node_Id    := Empty_Package;
!       Current_Attribute : Attribute_Node_Id  := Empty_Attribute;
!       Is_An_Attribute   : Boolean            := False;
!       Kind_1            : Variable_Kind      := Undefined;
!       Kind_2            : Attribute_Kind     := Single;
!       Package_Name      : Name_Id            := No_Name;
!       Attribute_Name    : Name_Id            := No_Name;
!       First_Attribute   : Attribute_Node_Id  := Attribute_First;
  
     begin
        --  Make sure the two tables are empty
  
!       Attributes.Init;
        Package_Attributes.Init;
  
        while Initialization_Data (Start) /= '#' loop
--- 186,306 ----
       "SVvcs_file_check#" &
       "SVvcs_log_check#" &
  
+    --  package Language_Processing
+ 
+      "Planguage_processing#" &
+      "Lacompiler_driver#" &
+      "Sacompiler_kind#" &
+      "Ladependency_option#" &
+      "Lacompute_dependency#" &
+      "Lainclude_option#" &
+      "Sabinder_driver#" &
+      "SVdefault_linker#" &
+ 
       "#";
  
+    Initialized : Boolean := False;
+    --  A flag to avoid multiple initialization
+ 
+    function Name_Id_Of (Name : String) return Name_Id;
+    --  Returns the Name_Id for Name in lower case
+ 
+    -----------------------
+    -- Attribute_Kind_Of --
+    -----------------------
+ 
+    function Attribute_Kind_Of
+      (Attribute : Attribute_Node_Id) return Attribute_Kind
+    is
+    begin
+       if Attribute = Empty_Attribute then
+          return Unknown;
+       else
+          return Attrs.Table (Attribute.Value).Attr_Kind;
+       end if;
+    end Attribute_Kind_Of;
+ 
+    -----------------------
+    -- Attribute_Name_Of --
+    -----------------------
+ 
+    function Attribute_Name_Of (Attribute : Attribute_Node_Id) return Name_Id is
+    begin
+       if Attribute = Empty_Attribute then
+          return No_Name;
+       else
+          return Attrs.Table (Attribute.Value).Name;
+       end if;
+    end Attribute_Name_Of;
+ 
+    --------------------------
+    -- Attribute_Node_Id_Of --
+    --------------------------
+ 
+    function Attribute_Node_Id_Of
+      (Name        : Name_Id;
+       Starting_At : Attribute_Node_Id) return Attribute_Node_Id
+    is
+       Id : Attr_Node_Id := Starting_At.Value;
+ 
+    begin
+       while Id /= Empty_Attr
+         and then Attrs.Table (Id).Name /= Name
+       loop
+          Id := Attrs.Table (Id).Next;
+       end loop;
+ 
+       return (Value => Id);
+    end Attribute_Node_Id_Of;
+ 
     ----------------
     -- Initialize --
     ----------------
  
     procedure Initialize is
!       Start             : Positive          := Initialization_Data'First;
!       Finish            : Positive          := Start;
!       Current_Package   : Pkg_Node_Id       := Empty_Pkg;
!       Current_Attribute : Attr_Node_Id      := Empty_Attr;
!       Is_An_Attribute   : Boolean           := False;
!       Var_Kind          : Variable_Kind     := Undefined;
!       Optional_Index    : Boolean           := False;
!       Attr_Kind            : Attribute_Kind := Single;
!       Package_Name      : Name_Id           := No_Name;
!       Attribute_Name    : Name_Id           := No_Name;
!       First_Attribute   : Attr_Node_Id      := Attr.First_Attribute;
! 
!       function Attribute_Location return String;
!       --  Returns a string depending if we are in the project level attributes
!       --  or in the attributes of a package.
! 
!       ------------------------
!       -- Attribute_Location --
!       ------------------------
! 
!       function Attribute_Location return String is
!       begin
!          if Package_Name = No_Name then
!             return "project level attributes";
! 
!          else
!             return "attribute of package """ &
!             Get_Name_String (Package_Name) & """";
!          end if;
!       end Attribute_Location;
! 
!    --  Start of processing for Initialize
  
     begin
+       --  Don't allow Initialize action to be repeated
+ 
+       if Initialized then
+          return;
+       end if;
+ 
        --  Make sure the two tables are empty
  
!       Attrs.Init;
        Package_Attributes.Init;
  
        while Initialization_Data (Start) /= '#' loop
*************** package body Prj.Attr is
*** 209,241 ****
                    Finish := Finish + 1;
                 end loop;
  
!                Name_Len := Finish - Start;
!                Name_Buffer (1 .. Name_Len) :=
!                  To_Lower (Initialization_Data (Start .. Finish - 1));
!                Package_Name := Name_Find;
  
!                for Index in Package_First .. Package_Attributes.Last loop
                    if Package_Name = Package_Attributes.Table (Index).Name then
!                      Write_Line ("Duplicate package name """ &
!                                  Initialization_Data (Start .. Finish - 1) &
!                                  """ in Prj.Attr body.");
!                      raise Program_Error;
                    end if;
                 end loop;
  
                 Is_An_Attribute := False;
!                Current_Attribute := Empty_Attribute;
                 Package_Attributes.Increment_Last;
                 Current_Package := Package_Attributes.Last;
!                Package_Attributes.Table (Current_Package).Name :=
!                  Package_Name;
                 Start := Finish + 1;
  
              when 'S' =>
!                Kind_1 := Single;
  
              when 'L' =>
!                Kind_1 := List;
  
              when others =>
                 raise Program_Error;
--- 317,358 ----
                    Finish := Finish + 1;
                 end loop;
  
!                Package_Name :=
!                  Name_Id_Of (Initialization_Data (Start .. Finish - 1));
  
!                for Index in First_Package .. Package_Attributes.Last loop
                    if Package_Name = Package_Attributes.Table (Index).Name then
!                      Osint.Fail ("duplicate name """,
!                            Initialization_Data (Start .. Finish - 1),
!                            """ in predefined packages.");
                    end if;
                 end loop;
  
                 Is_An_Attribute := False;
!                Current_Attribute := Empty_Attr;
                 Package_Attributes.Increment_Last;
                 Current_Package := Package_Attributes.Last;
!                Package_Attributes.Table (Current_Package) :=
!                  (Name            => Package_Name,
!                   Known           => True,
!                   First_Attribute => Empty_Attr);
                 Start := Finish + 1;
  
              when 'S' =>
!                Var_Kind       := Single;
!                Optional_Index := False;
! 
!             when 's' =>
!                Var_Kind       := Single;
!                Optional_Index := True;
  
              when 'L' =>
!                Var_Kind       := List;
!                Optional_Index := False;
! 
!             when 'l' =>
!                Var_Kind         := List;
!                Optional_Index := True;
  
              when others =>
                 raise Program_Error;
*************** package body Prj.Attr is
*** 248,266 ****
              Start := Start + 1;
              case Initialization_Data (Start) is
                 when 'V' =>
!                   Kind_2 := Single;
  
                 when 'A' =>
!                   Kind_2 := Associative_Array;
  
                 when 'a' =>
!                   Kind_2 := Case_Insensitive_Associative_Array;
  
                 when 'b' =>
!                   if File_Names_Case_Sensitive then
!                      Kind_2 := Case_Insensitive_Associative_Array;
                    else
!                      Kind_2 := Case_Insensitive_Associative_Array;
                    end if;
  
                 when others =>
--- 365,391 ----
              Start := Start + 1;
              case Initialization_Data (Start) is
                 when 'V' =>
!                   Attr_Kind := Single;
  
                 when 'A' =>
!                   Attr_Kind := Associative_Array;
  
                 when 'a' =>
!                   Attr_Kind := Case_Insensitive_Associative_Array;
  
                 when 'b' =>
!                   if Osint.File_Names_Case_Sensitive then
!                      Attr_Kind := Associative_Array;
                    else
!                      Attr_Kind := Case_Insensitive_Associative_Array;
!                   end if;
! 
!                when 'c' =>
!                   if Osint.File_Names_Case_Sensitive then
!                      Attr_Kind := Optional_Index_Associative_Array;
!                   else
!                      Attr_Kind :=
!                        Optional_Index_Case_Insensitive_Associative_Array;
                    end if;
  
                 when others =>
*************** package body Prj.Attr is
*** 274,318 ****
                 Finish := Finish + 1;
              end loop;
  
!             Name_Len := Finish - Start;
!             Name_Buffer (1 .. Name_Len) :=
!               To_Lower (Initialization_Data (Start .. Finish - 1));
!             Attribute_Name := Name_Find;
!             Attributes.Increment_Last;
!             if Current_Attribute = Empty_Attribute then
!                First_Attribute := Attributes.Last;
  
!                if Current_Package /= Empty_Package then
                    Package_Attributes.Table (Current_Package).First_Attribute
!                     := Attributes.Last;
                 end if;
  
              else
                 --  Check that there are no duplicate attributes
  
!                for Index in First_Attribute .. Attributes.Last - 1 loop
!                   if Attribute_Name =
!                     Attributes.Table (Index).Name then
!                      Write_Line ("Duplicate attribute name """ &
!                                  Initialization_Data (Start .. Finish - 1) &
!                                  """ in Prj.Attr body.");
!                      raise Program_Error;
                    end if;
                 end loop;
  
!                Attributes.Table (Current_Attribute).Next :=
!                  Attributes.Last;
              end if;
  
!             Current_Attribute := Attributes.Last;
!             Attributes.Table (Current_Attribute) :=
!               (Name    => Attribute_Name,
!                Kind_1  => Kind_1,
!                Kind_2  => Kind_2,
!                Next    => Empty_Attribute);
              Start := Finish + 1;
           end if;
        end loop;
     end Initialize;
  
  end Prj.Attr;
--- 399,744 ----
                 Finish := Finish + 1;
              end loop;
  
!             Attribute_Name :=
!               Name_Id_Of (Initialization_Data (Start .. Finish - 1));
!             Attrs.Increment_Last;
  
!             if Current_Attribute = Empty_Attr then
!                First_Attribute := Attrs.Last;
! 
!                if Current_Package /= Empty_Pkg then
                    Package_Attributes.Table (Current_Package).First_Attribute
!                     := Attrs.Last;
                 end if;
  
              else
                 --  Check that there are no duplicate attributes
  
!                for Index in First_Attribute .. Attrs.Last - 1 loop
!                   if Attribute_Name = Attrs.Table (Index).Name then
!                      Osint.Fail ("duplicate attribute """,
!                            Initialization_Data (Start .. Finish - 1),
!                            """ in " & Attribute_Location);
                    end if;
                 end loop;
  
!                Attrs.Table (Current_Attribute).Next :=
!                  Attrs.Last;
              end if;
  
!             Current_Attribute := Attrs.Last;
!             Attrs.Table (Current_Attribute) :=
!               (Name           => Attribute_Name,
!                Var_Kind       => Var_Kind,
!                Optional_Index => Optional_Index,
!                Attr_Kind      => Attr_Kind,
!                Next           => Empty_Attr);
              Start := Finish + 1;
           end if;
        end loop;
+ 
+       Initialized := True;
     end Initialize;
  
+    ----------------
+    -- Name_Id_Of --
+    ----------------
+ 
+    function Name_Id_Of (Name : String) return Name_Id is
+    begin
+       Name_Len := 0;
+       Add_Str_To_Name_Buffer (Name);
+       To_Lower (Name_Buffer (1 .. Name_Len));
+       return Name_Find;
+    end Name_Id_Of;
+ 
+    --------------------
+    -- Next_Attribute --
+    --------------------
+ 
+    function Next_Attribute
+      (After : Attribute_Node_Id) return Attribute_Node_Id
+    is
+    begin
+       if After = Empty_Attribute then
+          return Empty_Attribute;
+       else
+          return (Value => Attrs.Table (After.Value).Next);
+       end if;
+    end Next_Attribute;
+ 
+    -----------------------
+    -- Optional_Index_Of --
+    -----------------------
+ 
+    function Optional_Index_Of (Attribute : Attribute_Node_Id) return Boolean is
+    begin
+       if Attribute = Empty_Attribute then
+          return False;
+       else
+          return Attrs.Table (Attribute.Value).Optional_Index;
+       end if;
+    end Optional_Index_Of;
+ 
+    ------------------------
+    -- Package_Node_Id_Of --
+    ------------------------
+ 
+    function Package_Node_Id_Of (Name : Name_Id) return Package_Node_Id is
+    begin
+       for Index in Package_Attributes.First .. Package_Attributes.Last loop
+          if Package_Attributes.Table (Index).Name = Name then
+             return (Value => Index);
+          end if;
+       end loop;
+ 
+       --  If there is no package with this name, return Empty_Package
+ 
+       return Empty_Package;
+    end Package_Node_Id_Of;
+ 
+    ----------------------------
+    -- Register_New_Attribute --
+    ----------------------------
+ 
+    procedure Register_New_Attribute
+      (Name               : String;
+       In_Package         : Package_Node_Id;
+       Attr_Kind          : Defined_Attribute_Kind;
+       Var_Kind           : Defined_Variable_Kind;
+       Index_Is_File_Name : Boolean := False;
+       Opt_Index          : Boolean := False)
+    is
+       Attr_Name       : Name_Id;
+       First_Attr      : Attr_Node_Id := Empty_Attr;
+       Curr_Attr       : Attr_Node_Id;
+       Real_Attr_Kind  : Attribute_Kind;
+ 
+    begin
+       if Name'Length = 0 then
+          Fail ("cannot register an attribute with no name");
+          raise Project_Error;
+       end if;
+ 
+       if In_Package = Empty_Package then
+          Fail ("attempt to add attribute """, Name,
+                """ to an undefined package");
+          raise Project_Error;
+       end if;
+ 
+       Attr_Name := Name_Id_Of (Name);
+ 
+       First_Attr :=
+         Package_Attributes.Table (In_Package.Value).First_Attribute;
+ 
+       --  Check if attribute name is a duplicate
+ 
+       Curr_Attr := First_Attr;
+       while Curr_Attr /= Empty_Attr loop
+          if Attrs.Table (Curr_Attr).Name = Attr_Name then
+             Fail ("duplicate attribute name """, Name,
+                   """ in package """ &
+                   Get_Name_String
+                     (Package_Attributes.Table (In_Package.Value).Name) &
+                   """");
+             raise Project_Error;
+          end if;
+ 
+          Curr_Attr := Attrs.Table (Curr_Attr).Next;
+       end loop;
+ 
+       Real_Attr_Kind := Attr_Kind;
+ 
+       --  If Index_Is_File_Name, change the attribute kind if necessary
+ 
+       if Index_Is_File_Name and then not Osint.File_Names_Case_Sensitive then
+          case Attr_Kind is
+             when Associative_Array =>
+                Real_Attr_Kind := Case_Insensitive_Associative_Array;
+ 
+             when Optional_Index_Associative_Array =>
+                Real_Attr_Kind :=
+                  Optional_Index_Case_Insensitive_Associative_Array;
+ 
+             when others =>
+                null;
+          end case;
+       end if;
+ 
+       --  Add the new attribute
+ 
+       Attrs.Increment_Last;
+       Attrs.Table (Attrs.Last) :=
+         (Name           => Attr_Name,
+          Var_Kind       => Var_Kind,
+          Optional_Index => Opt_Index,
+          Attr_Kind      => Real_Attr_Kind,
+          Next           => First_Attr);
+       Package_Attributes.Table (In_Package.Value).First_Attribute :=
+         Attrs.Last;
+    end Register_New_Attribute;
+ 
+    --------------------------
+    -- Register_New_Package --
+    --------------------------
+ 
+    procedure Register_New_Package (Name : String; Id : out Package_Node_Id) is
+       Pkg_Name : Name_Id;
+ 
+    begin
+       if Name'Length = 0 then
+          Fail ("cannot register a package with no name");
+          Id := Empty_Package;
+          return;
+       end if;
+ 
+       Pkg_Name := Name_Id_Of (Name);
+ 
+       for Index in Package_Attributes.First .. Package_Attributes.Last loop
+          if Package_Attributes.Table (Index).Name = Pkg_Name then
+             Fail ("cannot register a package with a non unique name""",
+                   Name, """");
+             Id := Empty_Package;
+             return;
+          end if;
+       end loop;
+ 
+       Package_Attributes.Increment_Last;
+       Id := (Value => Package_Attributes.Last);
+       Package_Attributes.Table (Package_Attributes.Last) :=
+         (Name => Pkg_Name, Known => True, First_Attribute => Empty_Attr);
+    end Register_New_Package;
+ 
+    procedure Register_New_Package
+      (Name       : String;
+       Attributes : Attribute_Data_Array)
+    is
+       Pkg_Name   : Name_Id;
+       Attr_Name  : Name_Id;
+       First_Attr : Attr_Node_Id := Empty_Attr;
+       Curr_Attr  : Attr_Node_Id;
+       Attr_Kind  : Attribute_Kind;
+ 
+    begin
+       if Name'Length = 0 then
+          Fail ("cannot register a package with no name");
+          raise Project_Error;
+       end if;
+ 
+       Pkg_Name := Name_Id_Of (Name);
+ 
+       for Index in Package_Attributes.First .. Package_Attributes.Last loop
+          if Package_Attributes.Table (Index).Name = Pkg_Name then
+             Fail ("cannot register a package with a non unique name""",
+                   Name, """");
+             raise Project_Error;
+          end if;
+       end loop;
+ 
+       for Index in Attributes'Range loop
+          Attr_Name := Name_Id_Of (Attributes (Index).Name);
+ 
+          Curr_Attr := First_Attr;
+          while Curr_Attr /= Empty_Attr loop
+             if Attrs.Table (Curr_Attr).Name = Attr_Name then
+                Fail ("duplicate attribute name """, Attributes (Index).Name,
+                      """ in new package """ & Name & """");
+                raise Project_Error;
+             end if;
+ 
+             Curr_Attr := Attrs.Table (Curr_Attr).Next;
+          end loop;
+ 
+          Attr_Kind := Attributes (Index).Attr_Kind;
+ 
+          if Attributes (Index).Index_Is_File_Name
+            and then not Osint.File_Names_Case_Sensitive
+          then
+             case Attr_Kind is
+                when Associative_Array =>
+                   Attr_Kind := Case_Insensitive_Associative_Array;
+ 
+                when Optional_Index_Associative_Array =>
+                   Attr_Kind :=
+                     Optional_Index_Case_Insensitive_Associative_Array;
+ 
+                when others =>
+                   null;
+             end case;
+          end if;
+ 
+          Attrs.Increment_Last;
+          Attrs.Table (Attrs.Last) :=
+            (Name           => Attr_Name,
+             Var_Kind       => Attributes (Index).Var_Kind,
+             Optional_Index => Attributes (Index).Opt_Index,
+             Attr_Kind      => Attr_Kind,
+             Next           => First_Attr);
+          First_Attr := Attrs.Last;
+       end loop;
+ 
+       Package_Attributes.Increment_Last;
+       Package_Attributes.Table (Package_Attributes.Last) :=
+         (Name => Pkg_Name, Known => True, First_Attribute => First_Attr);
+    end Register_New_Package;
+ 
+    ---------------------------
+    -- Set_Attribute_Kind_Of --
+    ---------------------------
+ 
+    procedure Set_Attribute_Kind_Of
+      (Attribute : Attribute_Node_Id;
+       To        : Attribute_Kind)
+    is
+    begin
+       if Attribute /= Empty_Attribute then
+          Attrs.Table (Attribute.Value).Attr_Kind := To;
+       end if;
+    end Set_Attribute_Kind_Of;
+ 
+    --------------------------
+    -- Set_Variable_Kind_Of --
+    --------------------------
+ 
+    procedure Set_Variable_Kind_Of
+      (Attribute : Attribute_Node_Id;
+       To        : Variable_Kind)
+    is
+    begin
+       if Attribute /= Empty_Attribute then
+          Attrs.Table (Attribute.Value).Var_Kind := To;
+       end if;
+    end Set_Variable_Kind_Of;
+ 
+    ----------------------
+    -- Variable_Kind_Of --
+    ----------------------
+ 
+    function Variable_Kind_Of
+      (Attribute : Attribute_Node_Id) return Variable_Kind
+    is
+    begin
+       if Attribute = Empty_Attribute then
+          return Undefined;
+       else
+          return Attrs.Table (Attribute.Value).Var_Kind;
+       end if;
+    end Variable_Kind_Of;
+ 
+    ------------------------
+    -- First_Attribute_Of --
+    ------------------------
+ 
+    function First_Attribute_Of
+      (Pkg : Package_Node_Id) return Attribute_Node_Id
+    is
+    begin
+       if Pkg = Empty_Package then
+          return Empty_Attribute;
+       else
+          return
+            (Value => Package_Attributes.Table (Pkg.Value).First_Attribute);
+       end if;
+    end First_Attribute_Of;
+ 
  end Prj.Attr;
diff -Nrcpad gcc-3.4.3/gcc/ada/prj-attr.ads gcc-4.0.0/gcc/ada/prj-attr.ads
*** gcc-3.4.3/gcc/ada/prj-attr.ads	Tue Oct 21 13:42:12 2003
--- gcc-4.0.0/gcc/ada/prj-attr.ads	Mon Oct  4 14:58:21 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2001-2002 Free Software Foundation, Inc.       --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2001-2004 Free Software Foundation, Inc.       --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 24,39 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This package defines allowed packages and attributes in GNAT project files
  
  with Types; use Types;
- with Table;
  
  package Prj.Attr is
  
!    --  Define the allowed attributes
  
!    --  All these declarations are uncommented, they all need comments ???
  
     Attributes_Initial   : constant := 50;
     Attributes_Increment : constant := 50;
--- 24,207 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This package defines packages and attributes in GNAT project files.
! --  There are predefined packages and attributes.
! --  It is also possible to define new packages with their attributes.
  
  with Types; use Types;
  
  package Prj.Attr is
  
!    procedure Initialize;
!    --  Initialize the predefined project level attributes and the predefined
!    --  packages and their attribute. This procedure should be called by
!    --  Prj.Initialize.
  
!    type Attribute_Kind is
!      (Unknown,
!       Single,
!       Associative_Array,
!       Optional_Index_Associative_Array,
!       Case_Insensitive_Associative_Array,
!       Optional_Index_Case_Insensitive_Associative_Array);
!    --  Characteristics of an attribute. Optional_Index indicates that there
!    --  may be an optional index in the index of the associative array, as in
!    --     for Switches ("files.ada" at 2) use ...
! 
!    subtype Defined_Attribute_Kind is Attribute_Kind
!      range Single .. Optional_Index_Case_Insensitive_Associative_Array;
!    --  Subset of Attribute_Kinds that may be used for the attributes that is
!    --  used when defining a new package.
! 
!    Max_Attribute_Name_Length : constant := 64;
!    --  The maximum length of attribute names
! 
!    subtype Attribute_Name_Length is
!      Positive range 1 .. Max_Attribute_Name_Length;
! 
!    type Attribute_Data (Name_Length : Attribute_Name_Length := 1) is record
!       Name : String (1 .. Name_Length);
!       --  The name of the attribute
! 
!       Attr_Kind  : Defined_Attribute_Kind;
!       --  The type of the attribute
! 
!       Index_Is_File_Name : Boolean;
!       --  For associative arrays, indicate if the index is a file name, so
!       --  that the attribute kind may be modified depending on the case
!       --  sensitivity of file names. This is only taken into account when
!       --  Attr_Kind is Associative_Array or Optional_Index_Associative_Array.
! 
!       Opt_Index : Boolean;
!       --  True if there may be an optional index in the value of the index,
!       --  as in:
!       --    "file.ada" at 2
!       --    ("main.adb", "file.ada" at 1)
! 
!       Var_Kind : Defined_Variable_Kind;
!       --  The attribute value kind: single or list
! 
!    end record;
!    --  Name and characteristics of an attribute in a package registered
!    --  explicitly with Register_New_Package (see below).
! 
!    type Attribute_Data_Array is array (Positive range <>) of Attribute_Data;
!    --  A list of attribute name/characteristics to be used as parameter of
!    --  procedure Register_New_Package below.
! 
!    --  In the subprograms below, when it is specified that the subprogram
!    --  "fails", procedure Prj.Com.Fail is called. Unless it is specified
!    --  otherwise, if Prj.Com.Fail returns, exception Prj.Prj_Error is raised.
! 
!    procedure Register_New_Package
!      (Name       : String;
!       Attributes : Attribute_Data_Array);
!    --  Add a new package with its attributes. This procedure can only be
!    --  called after Initialize, but before any other call to a service of
!    --  the Project Manager. Fail if the name of the package is empty or not
!    --  unique, or if the names of the attributes are not different.
! 
!    ----------------
!    -- Attributes --
!    ----------------
! 
!    type Attribute_Node_Id is private;
!    --  The type to refers to an attribute, self-initialized
! 
!    Empty_Attribute : constant Attribute_Node_Id;
!    --  Indicates no attribute. Default value of Attribute_Node_Id objects.
! 
!    Attribute_First : constant Attribute_Node_Id;
!    --  First attribute node id of project level attributes
! 
!    function Attribute_Node_Id_Of
!      (Name        : Name_Id;
!       Starting_At : Attribute_Node_Id) return Attribute_Node_Id;
!    --  Returns the node id of an attribute at the project level or in
!    --  a package. Starting_At indicates the first known attribute node where
!    --  to start the search. Returns Empty_Attribute if the attribute cannot
!    --  be found.
! 
!    function Attribute_Kind_Of
!      (Attribute : Attribute_Node_Id) return Attribute_Kind;
!    --  Returns the attribute kind of a known attribute. Returns Unknown if
!    --  Attribute is Empty_Attribute.
! 
!    procedure Set_Attribute_Kind_Of
!      (Attribute : Attribute_Node_Id;
!       To        : Attribute_Kind);
!    --  Set the attribute kind of a known attribute. Does nothing if
!    --  Attribute is Empty_Attribute.
! 
!    function Attribute_Name_Of (Attribute : Attribute_Node_Id) return Name_Id;
!    --  Returns the name of a known attribute. Returns No_Name if Attribute is
!    --  Empty_Attribute.
! 
!    function Variable_Kind_Of
!      (Attribute : Attribute_Node_Id) return Variable_Kind;
!    --  Returns the variable kind of a known attribute. Returns Undefined if
!    --  Attribute is Empty_Attribute.
! 
!    procedure Set_Variable_Kind_Of
!      (Attribute : Attribute_Node_Id;
!       To        : Variable_Kind);
!    --  Set the variable kind of a known attribute. Does nothing if Attribute is
!    --  Empty_Attribute.
! 
!    function Optional_Index_Of (Attribute : Attribute_Node_Id) return Boolean;
!    --  Returns True if Attribute is a known attribute and may have an
!    --  optional index. Returns False otherwise.
! 
!    function Next_Attribute
!      (After : Attribute_Node_Id) return Attribute_Node_Id;
!    --  Returns the attribute that follow After in the list of project level
!    --  attributes or the list of attributes in a package.
!    --  Returns Empty_Attribute if After is either Empty_Attribute or is the
!    --  last of the list.
! 
!    --------------
!    -- Packages --
!    --------------
! 
!    type Package_Node_Id is private;
!    --  Type to refer to a package, self initialized
! 
!    Empty_Package : constant Package_Node_Id;
!    --  Default value of Package_Node_Id objects
! 
!    procedure Register_New_Package (Name : String; Id : out Package_Node_Id);
!    --  Add a new package. Fails if Name (the package name) is empty or is
!    --  already the name of a package, and set Id to Empty_Package,
!    --  if Prj.Com.Fail returns. Initially, the new package has no attributes.
!    --  Id may be used to add attributes using procedure Register_New_Attribute
!    --  below.
! 
!    procedure Register_New_Attribute
!      (Name               : String;
!       In_Package         : Package_Node_Id;
!       Attr_Kind          : Defined_Attribute_Kind;
!       Var_Kind           : Defined_Variable_Kind;
!       Index_Is_File_Name : Boolean := False;
!       Opt_Index          : Boolean := False);
!    --  Add a new attribute to registered package In_Package. Fails if Name
!    --  (the attribute name) is empty, if In_Package is Empty_Package or if
!    --  the attribute name has a duplicate name. See definition of type
!    --  Attribute_Data above for the meaning of parameters Attr_Kind, Var_Kind,
!    --  Index_Is_File_Name and Opt_Index.
! 
!    function Package_Node_Id_Of (Name : Name_Id) return Package_Node_Id;
!    --  Returns the package node id of the package with name Name. Returns
!    --  Empty_Package if there is no package with this name.
! 
!    function First_Attribute_Of
!      (Pkg : Package_Node_Id) return Attribute_Node_Id;
!    --  Returns the first attribute in the list of attributes of package Pkg.
!    --  Returns Empty_Attribute if Pkg is Empty_Package.
! 
! private
!    ----------------
!    -- Attributes --
!    ----------------
  
     Attributes_Initial   : constant := 50;
     Attributes_Increment : constant := 50;
*************** package Prj.Attr is
*** 41,78 ****
     Attribute_Node_Low_Bound  : constant := 0;
     Attribute_Node_High_Bound : constant := 099_999_999;
  
!    type Attribute_Node_Id is
       range Attribute_Node_Low_Bound .. Attribute_Node_High_Bound;
  
!    First_Attribute_Node_Id : constant Attribute_Node_Id :=
!                                Attribute_Node_Low_Bound + 1;
  
!    Empty_Attribute : constant Attribute_Node_Id :=
!                        Attribute_Node_Low_Bound;
  
!    type Attribute_Kind is
!      (Single,
!       Associative_Array,
!       Case_Insensitive_Associative_Array);
  
!    type Attribute_Record is record
!       Name     : Name_Id;
!       Kind_1   : Variable_Kind;
!       Kind_2   : Attribute_Kind;
!       Next     : Attribute_Node_Id;
!    end record;
  
!    package Attributes is
!       new Table.Table (Table_Component_Type => Attribute_Record,
!                        Table_Index_Type     => Attribute_Node_Id,
!                        Table_Low_Bound      => First_Attribute_Node_Id,
!                        Table_Initial        => Attributes_Initial,
!                        Table_Increment      => Attributes_Increment,
!                        Table_Name           => "Prj.Attr.Attributes");
  
     Attribute_First : constant Attribute_Node_Id := First_Attribute_Node_Id;
  
!    --  Define the allowed packages
  
     Packages_Initial   : constant := 10;
     Packages_Increment : constant := 50;
--- 209,237 ----
     Attribute_Node_Low_Bound  : constant := 0;
     Attribute_Node_High_Bound : constant := 099_999_999;
  
!    type Attr_Node_Id is
       range Attribute_Node_Low_Bound .. Attribute_Node_High_Bound;
+    --  Index type for table Attrs in the body
  
!    type Attribute_Node_Id is record
!       Value : Attr_Node_Id := Attribute_Node_Low_Bound;
!    end record;
!    --  Full declaration of self-initialized private type
  
!    Empty_Attr : constant Attr_Node_Id := Attribute_Node_Low_Bound;
  
!    Empty_Attribute : constant Attribute_Node_Id := (Value => Empty_Attr);
  
!    First_Attribute : constant Attr_Node_Id := Attribute_Node_Low_Bound + 1;
  
!    First_Attribute_Node_Id : constant Attribute_Node_Id :=
!                                (Value => First_Attribute);
  
     Attribute_First : constant Attribute_Node_Id := First_Attribute_Node_Id;
  
!    --------------
!    -- Packages --
!    --------------
  
     Packages_Initial   : constant := 10;
     Packages_Increment : constant := 50;
*************** package Prj.Attr is
*** 80,110 ****
     Package_Node_Low_Bound  : constant := 0;
     Package_Node_High_Bound : constant := 099_999_999;
  
!    type Package_Node_Id is
       range Package_Node_Low_Bound .. Package_Node_High_Bound;
  
!    First_Package_Node_Id : constant Package_Node_Id :=
!                              Package_Node_Low_Bound + 1;
  
!    Empty_Package : constant Package_Node_Id := Package_Node_Low_Bound;
  
     type Package_Record is record
        Name            : Name_Id;
!       First_Attribute : Attribute_Node_Id;
     end record;
  
     package Package_Attributes is
        new Table.Table (Table_Component_Type => Package_Record,
!                        Table_Index_Type     => Package_Node_Id,
!                        Table_Low_Bound      => First_Package_Node_Id,
                         Table_Initial        => Packages_Initial,
                         Table_Increment      => Packages_Increment,
                         Table_Name           => "Prj.Attr.Packages");
! 
!    Package_First : constant Package_Node_Id := First_Package_Node_Id;
! 
!    procedure Initialize;
!    --  Initialize the two tables above (Attributes and Package_Attributes).
!    --  This procedure should be called by Prj.Initialize.
  
  end Prj.Attr;
--- 239,304 ----
     Package_Node_Low_Bound  : constant := 0;
     Package_Node_High_Bound : constant := 099_999_999;
  
!    type Pkg_Node_Id is
       range Package_Node_Low_Bound .. Package_Node_High_Bound;
+    --  Index type for table Package_Attributes in the body
  
!    type Package_Node_Id is record
!       Value : Pkg_Node_Id := Package_Node_Low_Bound;
!    end record;
!    --  Full declaration of self-initialized private type
  
!    Empty_Pkg : constant Pkg_Node_Id := Package_Node_Low_Bound;
! 
!    Empty_Package : constant Package_Node_Id := (Value => Empty_Pkg);
! 
!    First_Package : constant Pkg_Node_Id := Package_Node_Low_Bound + 1;
! 
!    First_Package_Node_Id  : constant Package_Node_Id :=
!                               (Value => First_Package);
! 
!    Package_First : constant Package_Node_Id := First_Package_Node_Id;
! 
!    ----------------
!    -- Attributes --
!    ----------------
! 
!    type Attribute_Record is record
!       Name           : Name_Id;
!       Var_Kind       : Variable_Kind;
!       Optional_Index : Boolean;
!       Attr_Kind      : Attribute_Kind;
!       Next           : Attr_Node_Id;
!    end record;
!    --  Data for an attribute
! 
!    package Attrs is
!       new Table.Table (Table_Component_Type => Attribute_Record,
!                        Table_Index_Type     => Attr_Node_Id,
!                        Table_Low_Bound      => First_Attribute,
!                        Table_Initial        => Attributes_Initial,
!                        Table_Increment      => Attributes_Increment,
!                        Table_Name           => "Prj.Attr.Attrs");
!    --  The table of the attributes
! 
!    --------------
!    -- Packages --
!    --------------
  
     type Package_Record is record
        Name            : Name_Id;
!       Known           : Boolean := True;
!       First_Attribute : Attr_Node_Id;
     end record;
+    --  Data for a package
  
     package Package_Attributes is
        new Table.Table (Table_Component_Type => Package_Record,
!                        Table_Index_Type     => Pkg_Node_Id,
!                        Table_Low_Bound      => First_Package,
                         Table_Initial        => Packages_Initial,
                         Table_Increment      => Packages_Increment,
                         Table_Name           => "Prj.Attr.Packages");
!    --  The table of the packages
  
  end Prj.Attr;
diff -Nrcpad gcc-3.4.3/gcc/ada/prj-com.adb gcc-4.0.0/gcc/ada/prj-com.adb
*** gcc-3.4.3/gcc/ada/prj-com.adb	Tue Oct 21 13:42:12 2003
--- gcc-4.0.0/gcc/ada/prj-com.adb	Wed Dec  8 11:25:43 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2000-2003 Free Software Foundation, Inc.       --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2000-2004 Free Software Foundation, Inc.       --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Prj.Com is
*** 33,43 ****
     -- Hash --
     ----------
  
-    function Hash (Name : Name_Id) return Header_Num is
-    begin
-       return Hash (Get_Name_String (Name));
-    end Hash;
- 
     function Hash (Name : String_Id) return Header_Num is
     begin
        String_To_Name_Buffer (Name);
--- 33,38 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/prj-com.ads gcc-4.0.0/gcc/ada/prj-com.ads
*** gcc-3.4.3/gcc/ada/prj-com.ads	Tue Oct 21 13:42:12 2003
--- gcc-4.0.0/gcc/ada/prj-com.ads	Wed Dec  8 11:25:43 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2000-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2000-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Prj.Com is
*** 56,61 ****
--- 56,62 ----
  
     type File_Name_Data is record
        Name         : Name_Id := No_Name;
+       Index        : Int     := 0;
        Display_Name : Name_Id := No_Name;
        Path         : Name_Id := No_Name;
        Display_Path : Name_Id := No_Name;
*************** package Prj.Com is
*** 83,94 ****
        Table_Increment      => 100,
        Table_Name           => "Prj.Com.Units");
  
-    type Header_Num is range 0 .. 2047;
- 
-    function Hash is new GNAT.HTable.Hash (Header_Num => Header_Num);
- 
-    function Hash (Name : Name_Id) return Header_Num;
- 
     function Hash (Name : String_Id) return Header_Num;
  
     package Units_Htable is new GNAT.HTable.Simple_HTable
--- 84,89 ----
*************** package Prj.Com is
*** 98,102 ****
--- 93,114 ----
        Key        => Name_Id,
        Hash       => Hash,
        Equal      => "=");
+    --  Mapping of unit names to indexes in the Units table
+ 
+    type Unit_Project is record
+       Unit    : Unit_Id    := No_Unit;
+       Project : Project_Id := No_Project;
+    end record;
+ 
+    No_Unit_Project : constant Unit_Project := (No_Unit, No_Project);
+ 
+    package Files_Htable is new GNAT.HTable.Simple_HTable
+      (Header_Num => Header_Num,
+       Element    => Unit_Project,
+       No_Element => No_Unit_Project,
+       Key        => Name_Id,
+       Hash       => Hash,
+       Equal      => "=");
+    --  Mapping of file names to indexes in the Units table
  
  end Prj.Com;
diff -Nrcpad gcc-3.4.3/gcc/ada/prj-dect.adb gcc-4.0.0/gcc/ada/prj-dect.adb
*** gcc-3.4.3/gcc/ada/prj-dect.adb	Mon Dec  8 10:33:15 2003
--- gcc-4.0.0/gcc/ada/prj-dect.adb	Mon Sep 13 10:18:40 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 2001-2003 Free Software Foundation, Inc          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 2001-2004 Free Software Foundation, Inc          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 24,38 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Err_Vars; use Err_Vars;
! with Namet;    use Namet;
! with Prj.Err;  use Prj.Err;
! with Prj.Strt; use Prj.Strt;
! with Prj.Tree; use Prj.Tree;
! with Scans;    use Scans;
  with Snames;
! with Types;    use Types;
! with Prj.Attr; use Prj.Attr;
  
  package body Prj.Dect is
  
--- 24,41 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Err_Vars;    use Err_Vars;
! with Namet;       use Namet;
! with Opt;         use Opt;
! with Prj.Err;     use Prj.Err;
! with Prj.Strt;    use Prj.Strt;
! with Prj.Tree;    use Prj.Tree;
! with Scans;       use Scans;
  with Snames;
! with Types;       use Types;
! with Prj.Attr;    use Prj.Attr;
! with Prj.Attr.PM; use Prj.Attr.PM;
! with Uintp;       use Uintp;
  
  package body Prj.Dect is
  
*************** package body Prj.Dect is
*** 121,126 ****
--- 124,132 ----
        Current_Attribute      : Attribute_Node_Id := First_Attribute;
        Full_Associative_Array : Boolean           := False;
        Attribute_Name         : Name_Id           := No_Name;
+       Optional_Index         : Boolean           := False;
+       Pkg_Id                 : Package_Node_Id   := Empty_Package;
+       Warning                : Boolean           := False;
  
     begin
        Attribute := Default_Project_Node (Of_Kind => N_Attribute_Declaration);
*************** package body Prj.Dect is
*** 147,173 ****
  
           --  Find the attribute
  
!          while Current_Attribute /= Empty_Attribute
!            and then
!              Attributes.Table (Current_Attribute).Name /= Token_Name
!          loop
!             Current_Attribute := Attributes.Table (Current_Attribute).Next;
!          end loop;
  
!          --  If not a valid attribute name, issue an error, or a warning
!          --  if inside a package that does not need to be checked.
  
           if Current_Attribute = Empty_Attribute then
!             declare
!                Message : constant String :=
!                  "undefined attribute """ &
!                  Get_Name_String (Name_Of (Attribute)) & '"';
  
!                Warning : Boolean :=
!                  Current_Package /= Empty_Node
!                  and then Current_Packages_To_Check /= All_Packages;
  
-             begin
                 if Warning then
  
                    --  Check that we are not in a package to check
--- 153,180 ----
  
           --  Find the attribute
  
!          Current_Attribute :=
!            Attribute_Node_Id_Of (Token_Name, First_Attribute);
  
!          --  If the attribute cannot be found, create the attribute if inside
!          --  an unknown package.
  
           if Current_Attribute = Empty_Attribute then
!             if Current_Package /= Empty_Node
!               and then Expression_Kind_Of (Current_Package) = Ignored
!             then
!                Pkg_Id := Package_Id_Of (Current_Package);
!                Add_Attribute (Pkg_Id, Token_Name, Current_Attribute);
!                Error_Msg_Name_1 := Token_Name;
!                Error_Msg ("?unknown attribute {", Token_Ptr);
  
!             else
!                --  If not a valid attribute name, issue an error, or a warning
!                --  if inside a package that does not need to be checked.
! 
!                Warning := Current_Package /= Empty_Node and then
!                           Current_Packages_To_Check /= All_Packages;
  
                 if Warning then
  
                    --  Check that we are not in a package to check
*************** package body Prj.Dect is
*** 184,201 ****
                    end loop;
                 end if;
  
                 if Warning then
!                   Error_Msg ('?' & Message, Token_Ptr);
  
                 else
!                   Error_Msg (Message, Token_Ptr);
                 end if;
!             end;
  
           --  Set, if appropriate the index case insensitivity flag
  
!          elsif Attributes.Table (Current_Attribute).Kind_2 =
!            Case_Insensitive_Associative_Array
           then
              Set_Case_Insensitive (Attribute, To => True);
           end if;
--- 191,211 ----
                    end loop;
                 end if;
  
+                Error_Msg_Name_1 := Token_Name;
+ 
                 if Warning then
!                   Error_Msg ("?undefined attribute {", Token_Ptr);
  
                 else
!                   Error_Msg ("undefined attribute {", Token_Ptr);
                 end if;
!             end if;
  
           --  Set, if appropriate the index case insensitivity flag
  
!          elsif Attribute_Kind_Of (Current_Attribute) in
!                  Case_Insensitive_Associative_Array ..
!                  Optional_Index_Case_Insensitive_Associative_Array
           then
              Set_Case_Insensitive (Attribute, To => True);
           end if;
*************** package body Prj.Dect is
*** 205,211 ****
  
        --  Change obsolete names of attributes to the new names
  
!       case Name_Of (Attribute) is
           when Snames.Name_Specification =>
              Set_Name_Of (Attribute, To => Snames.Name_Spec);
  
--- 215,224 ----
  
        --  Change obsolete names of attributes to the new names
  
!       if Current_Package /= Empty_Node
!         and then Expression_Kind_Of (Current_Package) /= Ignored
!       then
!          case Name_Of (Attribute) is
           when Snames.Name_Specification =>
              Set_Name_Of (Attribute, To => Snames.Name_Spec);
  
*************** package body Prj.Dect is
*** 220,242 ****
  
           when others =>
              null;
!       end case;
  
        --  Associative array attributes
  
        if Token = Tok_Left_Paren then
  
           --  If the attribute is not an associative array attribute, report
!          --  an error.
  
           if Current_Attribute /= Empty_Attribute
!            and then Attributes.Table (Current_Attribute).Kind_2 = Single
           then
              Error_Msg ("the attribute """ &
                         Get_Name_String
!                           (Attributes.Table (Current_Attribute).Name) &
                         """ cannot be an associative array",
                         Location_Of (Attribute));
           end if;
  
           Scan; --  past the left parenthesis
--- 233,260 ----
  
           when others =>
              null;
!          end case;
!       end if;
  
        --  Associative array attributes
  
        if Token = Tok_Left_Paren then
  
           --  If the attribute is not an associative array attribute, report
!          --  an error. If this information is still unknown, set the kind
!          --  to Associative_Array.
  
           if Current_Attribute /= Empty_Attribute
!            and then Attribute_Kind_Of (Current_Attribute) = Single
           then
              Error_Msg ("the attribute """ &
                         Get_Name_String
!                           (Attribute_Name_Of (Current_Attribute)) &
                         """ cannot be an associative array",
                         Location_Of (Attribute));
+ 
+          elsif Attribute_Kind_Of (Current_Attribute) = Unknown then
+             Set_Attribute_Kind_Of (Current_Attribute, To => Associative_Array);
           end if;
  
           Scan; --  past the left parenthesis
*************** package body Prj.Dect is
*** 245,250 ****
--- 263,303 ----
           if Token = Tok_String_Literal then
              Set_Associative_Array_Index_Of (Attribute, Token_Name);
              Scan; --  past the literal string index
+ 
+             if Token = Tok_At then
+                case Attribute_Kind_Of (Current_Attribute) is
+                   when Optional_Index_Associative_Array |
+                        Optional_Index_Case_Insensitive_Associative_Array =>
+                      Scan;
+                      Expect (Tok_Integer_Literal, "integer literal");
+ 
+                      if Token = Tok_Integer_Literal then
+ 
+                         --  Set the source index value from given literal
+ 
+                         declare
+                            Index : constant Int :=
+                                      UI_To_Int (Int_Literal_Value);
+                         begin
+                            if Index = 0 then
+                               Error_Msg ("index cannot be zero", Token_Ptr);
+                            else
+                               Set_Source_Index_Of (Attribute, To => Index);
+                            end if;
+                         end;
+ 
+                         Scan;
+                      end if;
+ 
+                   when others =>
+                      Error_Msg ("index not allowed here", Token_Ptr);
+                      Scan;
+ 
+                      if Token = Tok_Integer_Literal then
+                         Scan;
+                      end if;
+                end case;
+             end if;
           end if;
  
           Expect (Tok_Right_Paren, "`)`");
*************** package body Prj.Dect is
*** 260,268 ****
  
           if Current_Attribute /= Empty_Attribute
             and then
!              Attributes.Table (Current_Attribute).Kind_2 /= Single
           then
!             Full_Associative_Array := True;
           end if;
        end if;
  
--- 313,326 ----
  
           if Current_Attribute /= Empty_Attribute
             and then
!              Attribute_Kind_Of (Current_Attribute) /= Single
           then
!             if Attribute_Kind_Of (Current_Attribute) = Unknown then
!                Set_Attribute_Kind_Of (Current_Attribute, To => Single);
! 
!             else
!                Full_Associative_Array := True;
!             end if;
           end if;
        end if;
  
*************** package body Prj.Dect is
*** 270,276 ****
  
        if Current_Attribute /= Empty_Attribute then
           Set_Expression_Kind_Of
!            (Attribute, To => Attributes.Table (Current_Attribute).Kind_1);
        end if;
  
        Expect (Tok_Use, "USE");
--- 328,335 ----
  
        if Current_Attribute /= Empty_Attribute then
           Set_Expression_Kind_Of
!            (Attribute, To => Variable_Kind_Of (Current_Attribute));
!          Optional_Index := Optional_Index_Of (Current_Attribute);
        end if;
  
        Expect (Tok_Use, "USE");
*************** package body Prj.Dect is
*** 439,445 ****
                 Parse_Expression
                   (Expression      => Expression,
                    Current_Project => Current_Project,
!                   Current_Package => Current_Package);
                 Set_Expression_Of (Attribute, To => Expression);
  
                 --  If the expression is legal, but not of the right kind
--- 498,505 ----
                 Parse_Expression
                   (Expression      => Expression,
                    Current_Project => Current_Project,
!                   Current_Package => Current_Package,
!                   Optional_Index  => Optional_Index);
                 Set_Expression_Of (Attribute, To => Expression);
  
                 --  If the expression is legal, but not of the right kind
*************** package body Prj.Dect is
*** 447,461 ****
  
                 if Current_Attribute /= Empty_Attribute
                   and then Expression /= Empty_Node
!                  and then Attributes.Table (Current_Attribute).Kind_1 /=
                   Expression_Kind_Of (Expression)
                 then
!                   Error_Msg
!                     ("wrong expression kind for attribute """ &
!                      Get_Name_String
!                        (Attributes.Table (Current_Attribute).Name) &
!                      """",
!                      Expression_Location);
                 end if;
              end;
           end if;
--- 507,528 ----
  
                 if Current_Attribute /= Empty_Attribute
                   and then Expression /= Empty_Node
!                  and then Variable_Kind_Of (Current_Attribute) /=
                   Expression_Kind_Of (Expression)
                 then
!                   if  Variable_Kind_Of (Current_Attribute) = Undefined then
!                      Set_Variable_Kind_Of
!                        (Current_Attribute,
!                         To => Expression_Kind_Of (Expression));
! 
!                   else
!                      Error_Msg
!                        ("wrong expression kind for attribute """ &
!                         Get_Name_String
!                           (Attribute_Name_Of (Current_Attribute)) &
!                         """",
!                         Expression_Location);
!                   end if;
                 end if;
              end;
           end if;
*************** package body Prj.Dect is
*** 495,501 ****
  
        First_Declarative_Item : Project_Node_Id := Empty_Node;
  
!       First_Choice : Project_Node_Id := Empty_Node;
  
     begin
        Case_Construction  :=
--- 562,571 ----
  
        First_Declarative_Item : Project_Node_Id := Empty_Node;
  
!       First_Choice           : Project_Node_Id := Empty_Node;
! 
!       When_Others            : Boolean := False;
!       --  Set to True when there is a "when others =>" clause
  
     begin
        Case_Construction  :=
*************** package body Prj.Dect is
*** 572,577 ****
--- 642,648 ----
           Scan;
  
           if Token = Tok_Others then
+             When_Others := True;
  
              --  Scan past "others"
  
*************** package body Prj.Dect is
*** 621,627 ****
           end if;
        end loop When_Loop;
  
!       End_Case_Construction;
  
        Expect (Tok_End, "`END CASE`");
        Remove_Next_End_Node;
--- 692,700 ----
           end if;
        end loop When_Loop;
  
!       End_Case_Construction
!         (Check_All_Labels => not When_Others and not Quiet_Output,
!          Case_Location    => Location_Of (Case_Construction));
  
        Expect (Tok_End, "`END CASE`");
        Remove_Next_End_Node;
*************** package body Prj.Dect is
*** 700,705 ****
--- 773,782 ----
                 Set_End_Of_Line (Current_Declaration);
                 Set_Previous_Line_Node (Current_Declaration);
  
+             when Tok_Null =>
+ 
+                Scan; --  past "null"
+ 
              when Tok_Package =>
  
                 --  Package declaration
*************** package body Prj.Dect is
*** 800,825 ****
        --  Scan past "package"
  
        Scan;
- 
        Expect (Tok_Identifier, "identifier");
  
        if Token = Tok_Identifier then
  
           Set_Name_Of (Package_Declaration, To => Token_Name);
  
!          for Index in Package_Attributes.First .. Package_Attributes.Last loop
!             if Token_Name = Package_Attributes.Table (Index).Name then
!                First_Attribute :=
!                  Package_Attributes.Table (Index).First_Attribute;
!                Current_Package := Index;
!                exit;
!             end if;
!          end loop;
  
!          if Current_Package  = Empty_Package then
              Error_Msg ("?""" &
                         Get_Name_String (Name_Of (Package_Declaration)) &
!                        """ is not an allowed package name",
                         Token_Ptr);
  
              --  Set the package declaration to "ignored" so that it is not
--- 877,897 ----
        --  Scan past "package"
  
        Scan;
        Expect (Tok_Identifier, "identifier");
  
        if Token = Tok_Identifier then
  
           Set_Name_Of (Package_Declaration, To => Token_Name);
  
!          Current_Package := Package_Node_Id_Of (Token_Name);
  
!          if Current_Package  /= Empty_Package then
!             First_Attribute := First_Attribute_Of (Current_Package);
! 
!          else
              Error_Msg ("?""" &
                         Get_Name_String (Name_Of (Package_Declaration)) &
!                        """ is not a known package name",
                         Token_Ptr);
  
              --  Set the package declaration to "ignored" so that it is not
*************** package body Prj.Dect is
*** 827,863 ****
  
              Set_Expression_Kind_Of (Package_Declaration, Ignored);
  
!          else
!             Set_Package_Id_Of (Package_Declaration, To => Current_Package);
  
!             declare
!                Current : Project_Node_Id := First_Package_Of (Current_Project);
  
!             begin
!                while Current /= Empty_Node
!                  and then Name_Of (Current) /= Token_Name
!                loop
!                   Current := Next_Package_In_Project (Current);
!                end loop;
  
!                if Current /= Empty_Node then
!                   Error_Msg
!                     ("package """ &
!                      Get_Name_String (Name_Of (Package_Declaration)) &
!                      """ is declared twice in the same project",
!                      Token_Ptr);
  
!                else
!                   --  Add the package to the project list
  
!                   Set_Next_Package_In_Project
!                     (Package_Declaration,
!                      To => First_Package_Of (Current_Project));
!                   Set_First_Package_Of
!                     (Current_Project, To => Package_Declaration);
!                end if;
!             end;
!          end if;
  
           --  Scan past the package name
  
--- 899,938 ----
  
              Set_Expression_Kind_Of (Package_Declaration, Ignored);
  
!             --  Add the unknown package in the list of packages
  
!             Add_Unknown_Package (Token_Name, Current_Package);
!          end if;
  
!          Set_Package_Id_Of (Package_Declaration, To => Current_Package);
  
!          declare
!             Current : Project_Node_Id := First_Package_Of (Current_Project);
  
!          begin
!             while Current /= Empty_Node
!               and then Name_Of (Current) /= Token_Name
!             loop
!                Current := Next_Package_In_Project (Current);
!             end loop;
  
!             if Current /= Empty_Node then
!                Error_Msg
!                  ("package """ &
!                   Get_Name_String (Name_Of (Package_Declaration)) &
!                   """ is declared twice in the same project",
!                   Token_Ptr);
! 
!             else
!                --  Add the package to the project list
! 
!                Set_Next_Package_In_Project
!                  (Package_Declaration,
!                   To => First_Package_Of (Current_Project));
!                Set_First_Package_Of
!                  (Current_Project, To => Package_Declaration);
!             end if;
!          end;
  
           --  Scan past the package name
  
*************** package body Prj.Dect is
*** 1225,1231 ****
        Parse_Expression
          (Expression      => Expression,
           Current_Project => Current_Project,
!          Current_Package => Current_Package);
        Set_Expression_Of (Variable, To => Expression);
  
        if Expression /= Empty_Node then
--- 1300,1307 ----
        Parse_Expression
          (Expression      => Expression,
           Current_Project => Current_Project,
!          Current_Package => Current_Package,
!          Optional_Index  => False);
        Set_Expression_Of (Variable, To => Expression);
  
        if Expression /= Empty_Node then
diff -Nrcpad gcc-3.4.3/gcc/ada/prj-env.adb gcc-4.0.0/gcc/ada/prj-env.adb
*** gcc-3.4.3/gcc/ada/prj-env.adb	Mon Oct 27 14:27:17 2003
--- gcc-4.0.0/gcc/ada/prj-env.adb	Wed Dec  8 11:25:43 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Prj.Com;  use Prj.Com;
*** 32,38 ****
  with Table;
  with Tempdir;
  
! with GNAT.OS_Lib; use GNAT.OS_Lib;
  
  package body Prj.Env is
  
--- 32,39 ----
  with Table;
  with Tempdir;
  
! with GNAT.Directory_Operations; use GNAT.Directory_Operations;
! with GNAT.OS_Lib;               use GNAT.OS_Lib;
  
  package body Prj.Env is
  
*************** package body Prj.Env is
*** 61,85 ****
     --  platforms, except on VMS where the logical names are deassigned, thus
     --  avoiding the pollution of the environment of the caller.
  
!    package Namings is new Table.Table (
!      Table_Component_Type => Naming_Data,
!      Table_Index_Type     => Naming_Id,
!      Table_Low_Bound      => 1,
!      Table_Initial        => 5,
!      Table_Increment      => 100,
!      Table_Name           => "Prj.Env.Namings");
  
     Default_Naming : constant Naming_Id := Namings.First;
  
     Fill_Mapping_File : Boolean := True;
  
!    package Path_Files is new Table.Table (
!      Table_Component_Type => Name_Id,
!      Table_Index_Type     => Natural,
!      Table_Low_Bound      => 1,
!      Table_Initial        => 50,
!      Table_Increment      => 50,
!      Table_Name           => "Prj.Env.Path_Files");
     --  Table storing all the temp path file names.
     --  Used by Delete_All_Path_Files.
  
--- 62,86 ----
     --  platforms, except on VMS where the logical names are deassigned, thus
     --  avoiding the pollution of the environment of the caller.
  
!    package Namings is new Table.Table
!      (Table_Component_Type => Naming_Data,
!       Table_Index_Type     => Naming_Id,
!       Table_Low_Bound      => 1,
!       Table_Initial        => 5,
!       Table_Increment      => 100,
!       Table_Name           => "Prj.Env.Namings");
  
     Default_Naming : constant Naming_Id := Namings.First;
  
     Fill_Mapping_File : Boolean := True;
  
!    package Path_Files is new Table.Table
!      (Table_Component_Type => Name_Id,
!       Table_Index_Type     => Natural,
!       Table_Low_Bound      => 1,
!       Table_Initial        => 50,
!       Table_Increment      => 50,
!       Table_Name           => "Prj.Env.Path_Files");
     --  Table storing all the temp path file names.
     --  Used by Delete_All_Path_Files.
  
*************** package body Prj.Env is
*** 87,92 ****
--- 88,111 ----
     --  A Boolean array type used in Create_Mapping_File to select the projects
     --  in the closure of a specific project.
  
+    package Source_Paths is new Table.Table
+      (Table_Component_Type => Name_Id,
+       Table_Index_Type     => Natural,
+       Table_Low_Bound      => 1,
+       Table_Initial        => 50,
+       Table_Increment      => 50,
+       Table_Name           => "Prj.Env.Source_Paths");
+    --  A table to store the source dirs before creating the source path file
+ 
+    package Object_Paths is new Table.Table
+      (Table_Component_Type => Name_Id,
+       Table_Index_Type     => Natural,
+       Table_Low_Bound      => 1,
+       Table_Initial        => 50,
+       Table_Increment      => 50,
+       Table_Name           => "Prj.Env.Source_Paths");
+    --  A table to store the object dirs, before creating the object path file
+ 
     -----------------------
     -- Local Subprograms --
     -----------------------
*************** package body Prj.Env is
*** 109,124 ****
     --  If Ada_Path_Length /= 0, prepend a Path_Separator character to
     --  Path.
  
!    procedure Add_To_Path_File
!      (Source_Dirs : String_List_Id;
!       Path_File   : File_Descriptor);
!    --  Add to Ada_Path_Buffer all the source directories in string list
     --  Source_Dirs, if any. Increment Ada_Path_Length.
  
!    procedure Add_To_Path_File
!      (Path      : String;
!       Path_File : File_Descriptor);
!    --  Add Path to path file
  
     procedure Create_New_Path_File
       (Path_FD   : out File_Descriptor;
--- 128,143 ----
     --  If Ada_Path_Length /= 0, prepend a Path_Separator character to
     --  Path.
  
!    procedure Add_To_Source_Path (Source_Dirs : String_List_Id);
!    --  Add to Ada_Path_B all the source directories in string list
     --  Source_Dirs, if any. Increment Ada_Path_Length.
  
!    procedure Add_To_Object_Path (Object_Dir : Name_Id);
!    --  Add Object_Dir to object path table. Make sure it is not duplicate
!    --  and it is the last one in the current table.
! 
!    function Contains_ALI_Files (Dir : Name_Id) return Boolean;
!    --  Return True if there is at least one ALI file in the directory Dir
  
     procedure Create_New_Path_File
       (Path_FD   : out File_Descriptor;
*************** package body Prj.Env is
*** 261,270 ****
                     and then
                     (not Including_Libraries or else not Data.Library))
                 then
!                   --  For a library project, add the library directory
  
                    if Data.Library then
!                      Add_To_Path (Get_Name_String (Data.Library_Dir));
  
                    else
                       --  For a non library project, add the object directory
--- 280,297 ----
                     and then
                     (not Including_Libraries or else not Data.Library))
                 then
!                   --  For a library project, add the library directory,
!                   --  if there is no object directory or if it contains ALI
!                   --  files; otherwise add the object directory.
  
                    if Data.Library then
!                      if Data.Object_Directory = No_Name
!                        or else Contains_ALI_Files (Data.Library_Dir)
!                      then
!                         Add_To_Path (Get_Name_String (Data.Library_Dir));
!                      else
!                         Add_To_Path (Get_Name_String (Data.Object_Directory));
!                      end if;
  
                    else
                       --  For a non library project, add the object directory
*************** package body Prj.Env is
*** 311,316 ****
--- 338,372 ----
        return Projects.Table (Project).Ada_Objects_Path;
     end Ada_Objects_Path;
  
+    ------------------------
+    -- Add_To_Object_Path --
+    ------------------------
+ 
+    procedure Add_To_Object_Path (Object_Dir : Name_Id) is
+    begin
+       --  Check if the directory is already in the table
+ 
+       for Index in 1 .. Object_Paths.Last loop
+ 
+          --  If it is, remove it, and add it as the last one
+ 
+          if Object_Paths.Table (Index) = Object_Dir then
+             for Index2 in Index + 1 .. Object_Paths.Last loop
+                Object_Paths.Table (Index2 - 1) :=
+                  Object_Paths.Table (Index2);
+             end loop;
+ 
+             Object_Paths.Table (Object_Paths.Last) := Object_Dir;
+             return;
+          end if;
+       end loop;
+ 
+       --  The directory is not already in the table, add it
+ 
+       Object_Paths.Increment_Last;
+       Object_Paths.Table (Object_Paths.Last) := Object_Dir;
+    end Add_To_Object_Path;
+ 
     -----------------
     -- Add_To_Path --
     -----------------
*************** package body Prj.Env is
*** 318,328 ****
     procedure Add_To_Path (Source_Dirs : String_List_Id) is
        Current    : String_List_Id := Source_Dirs;
        Source_Dir : String_Element;
- 
     begin
        while Current /= Nil_String loop
           Source_Dir := String_Elements.Table (Current);
!          Add_To_Path (Get_Name_String (Source_Dir.Value));
           Current := Source_Dir.Next;
        end loop;
     end Add_To_Path;
--- 374,383 ----
     procedure Add_To_Path (Source_Dirs : String_List_Id) is
        Current    : String_List_Id := Source_Dirs;
        Source_Dir : String_Element;
     begin
        while Current /= Nil_String loop
           Source_Dir := String_Elements.Table (Current);
!          Add_To_Path (Get_Name_String (Source_Dir.Display_Value));
           Current := Source_Dir.Next;
        end loop;
     end Add_To_Path;
*************** package body Prj.Env is
*** 341,348 ****
--- 396,405 ----
  
        function Is_Present (Path : String; Dir : String) return Boolean is
           Last : constant Integer := Path'Last - Dir'Length + 1;
+ 
        begin
           for J in Path'First .. Last loop
+ 
              --  Note: the order of the conditions below is important, since
              --  it ensures a minimal number of string comparisons.
  
*************** package body Prj.Env is
*** 360,367 ****
--- 417,427 ----
           return False;
        end Is_Present;
  
+    --  Start of processing for Add_To_Path
+ 
     begin
        if Is_Present (Ada_Path_Buffer (1 .. Ada_Path_Length), Dir) then
+ 
           --  Dir is already in the path, nothing to do
  
           return;
*************** package body Prj.Env is
*** 370,375 ****
--- 430,436 ----
        Min_Len := Ada_Path_Length + Dir'Length;
  
        if Ada_Path_Length > 0 then
+ 
           --  Add 1 for the Path_Separator character
  
           Min_Len := Min_Len + 1;
*************** package body Prj.Env is
*** 402,442 ****
        Ada_Path_Length := Ada_Path_Length + Dir'Length;
     end Add_To_Path;
  
!    ----------------------
!    -- Add_To_Path_File --
!    ----------------------
  
!    procedure Add_To_Path_File
!      (Source_Dirs : String_List_Id;
!       Path_File   : File_Descriptor)
!    is
        Current    : String_List_Id := Source_Dirs;
        Source_Dir : String_Element;
  
     begin
        while Current /= Nil_String loop
           Source_Dir := String_Elements.Table (Current);
!          Add_To_Path_File (Get_Name_String (Source_Dir.Value), Path_File);
!          Current := Source_Dir.Next;
!       end loop;
!    end Add_To_Path_File;
  
!    procedure Add_To_Path_File
!      (Path      : String;
!       Path_File : File_Descriptor)
!    is
!       Line : String (1 .. Path'Length + 1);
!       Len  : Natural;
  
!    begin
!       Line (1 .. Path'Length) := Path;
!       Line (Line'Last) := ASCII.LF;
!       Len := Write (Path_File, Line (1)'Address, Line'Length);
  
!       if Len /= Line'Length then
!          Prj.Com.Fail ("disk full");
!       end if;
!    end Add_To_Path_File;
  
     -----------------------
     -- Body_Path_Name_Of --
--- 463,505 ----
        Ada_Path_Length := Ada_Path_Length + Dir'Length;
     end Add_To_Path;
  
!    ------------------------
!    -- Add_To_Source_Path --
!    ------------------------
  
!    procedure Add_To_Source_Path (Source_Dirs : String_List_Id) is
        Current    : String_List_Id := Source_Dirs;
        Source_Dir : String_Element;
+       Add_It     : Boolean;
  
     begin
+       --  Add each source directory
+ 
        while Current /= Nil_String loop
           Source_Dir := String_Elements.Table (Current);
!          Add_It := True;
  
!          --  Check if the source directory is already in the table
  
!          for Index in 1 .. Source_Paths.Last loop
!             --  If it is already, no need to add it
  
!             if Source_Paths.Table (Index) = Source_Dir.Value then
!                Add_It := False;
!                exit;
!             end if;
!          end loop;
! 
!          if Add_It then
!             Source_Paths.Increment_Last;
!             Source_Paths.Table (Source_Paths.Last) := Source_Dir.Value;
!          end if;
! 
!          --  Next source directory
! 
!          Current := Source_Dir.Next;
!       end loop;
!    end Add_To_Source_Path;
  
     -----------------------
     -- Body_Path_Name_Of --
*************** package body Prj.Env is
*** 490,500 ****
           end;
        end if;
  
!       --  Returned the value stored
  
        return Namet.Get_Name_String (Data.File_Names (Body_Part).Path);
     end Body_Path_Name_Of;
  
     --------------------------------
     -- Create_Config_Pragmas_File --
     --------------------------------
--- 553,602 ----
           end;
        end if;
  
!       --  Returned the stored value
  
        return Namet.Get_Name_String (Data.File_Names (Body_Part).Path);
     end Body_Path_Name_Of;
  
+    ------------------------
+    -- Contains_ALI_Files --
+    ------------------------
+ 
+    function Contains_ALI_Files (Dir : Name_Id) return Boolean is
+       Dir_Name : constant String := Get_Name_String (Dir);
+       Direct : Dir_Type;
+       Name   : String (1 .. 1_000);
+       Last   : Natural;
+       Result : Boolean := False;
+ 
+    begin
+       Open (Direct, Dir_Name);
+ 
+       --  For each file in the directory, check if it is an ALI file
+ 
+       loop
+          Read (Direct, Name, Last);
+          exit when Last = 0;
+          Canonical_Case_File_Name (Name (1 .. Last));
+          Result := Last >= 5 and then Name (Last - 3 .. Last) = ".ali";
+          exit when Result;
+       end loop;
+ 
+       Close (Direct);
+       return Result;
+ 
+    exception
+       --  If there is any problem, close the directory if open and return
+       --  True; the library directory will be added to the path.
+ 
+       when others =>
+          if Is_Open (Direct) then
+             Close (Direct);
+          end if;
+ 
+          return True;
+    end Contains_ALI_Files;
+ 
     --------------------------------
     -- Create_Config_Pragmas_File --
     --------------------------------
*************** package body Prj.Env is
*** 521,526 ****
--- 623,631 ----
        --  For call to Close
  
        procedure Check (Project : Project_Id);
+       --  Recursive procedure that put in the config pragmas file any non
+       --  standard naming schemes, if it is not already in the file, then call
+       --  itself for any imported project.
  
        procedure Check_Temp_File;
        --  Check that a temporary file has been opened.
*************** package body Prj.Env is
*** 530,541 ****
        procedure Put
          (Unit_Name : Name_Id;
           File_Name : Name_Id;
!          Unit_Kind : Spec_Or_Body);
!       --  Put an SFN pragma in the temporary file.
  
        procedure Put (File : File_Descriptor; S : String);
- 
        procedure Put_Line (File : File_Descriptor; S : String);
  
        -----------
        -- Check --
--- 635,647 ----
        procedure Put
          (Unit_Name : Name_Id;
           File_Name : Name_Id;
!          Unit_Kind : Spec_Or_Body;
!          Index     : Int);
!       --  Put an SFN pragma in the temporary file
  
        procedure Put (File : File_Descriptor; S : String);
        procedure Put_Line (File : File_Descriptor; S : String);
+       --  Output procedures, analogous to normal Text_IO procs of same name
  
        -----------
        -- Check --
*************** package body Prj.Env is
*** 597,603 ****
                   (File, "pragma Source_File_Name_Project");
                 Put_Line
                   (File, "  (Spec_File_Name  => ""*" &
!                   Namet.Get_Name_String (Data.Naming.Current_Spec_Suffix) &
                    """,");
                 Put_Line
                   (File, "   Casing          => " &
--- 703,709 ----
                   (File, "pragma Source_File_Name_Project");
                 Put_Line
                   (File, "  (Spec_File_Name  => ""*" &
!                   Namet.Get_Name_String (Data.Naming.Ada_Spec_Suffix) &
                    """,");
                 Put_Line
                   (File, "   Casing          => " &
*************** package body Prj.Env is
*** 613,619 ****
                   (File, "pragma Source_File_Name_Project");
                 Put_Line
                   (File, "  (Body_File_Name  => ""*" &
!                   Namet.Get_Name_String (Data.Naming.Current_Body_Suffix) &
                    """,");
                 Put_Line
                   (File, "   Casing          => " &
--- 719,725 ----
                   (File, "pragma Source_File_Name_Project");
                 Put_Line
                   (File, "  (Body_File_Name  => ""*" &
!                   Namet.Get_Name_String (Data.Naming.Ada_Body_Suffix) &
                    """,");
                 Put_Line
                   (File, "   Casing          => " &
*************** package body Prj.Env is
*** 626,632 ****
                 --  and maybe separate
  
                 if
!                  Data.Naming.Current_Body_Suffix /= Data.Naming.Separate_Suffix
                 then
                    Put_Line
                      (File, "pragma Source_File_Name_Project");
--- 732,738 ----
                 --  and maybe separate
  
                 if
!                  Data.Naming.Ada_Body_Suffix /= Data.Naming.Separate_Suffix
                 then
                    Put_Line
                      (File, "pragma Source_File_Name_Project");
*************** package body Prj.Env is
*** 688,694 ****
        procedure Put
          (Unit_Name : Name_Id;
           File_Name : Name_Id;
!          Unit_Kind : Spec_Or_Body)
        is
        begin
           --  A temporary file needs to be open
--- 794,801 ----
        procedure Put
          (Unit_Name : Name_Id;
           File_Name : Name_Id;
!          Unit_Kind : Spec_Or_Body;
!          Index     : Int)
        is
        begin
           --  A temporary file needs to be open
*************** package body Prj.Env is
*** 707,713 ****
           end if;
  
           Put (File, Namet.Get_Name_String (File_Name));
!          Put_Line (File, """);");
        end Put;
  
        procedure Put (File : File_Descriptor; S : String) is
--- 814,827 ----
           end if;
  
           Put (File, Namet.Get_Name_String (File_Name));
!          Put (File, """");
! 
!          if Index /= 0 then
!             Put (File, ", Index =>");
!             Put (File, Index'Img);
!          end if;
! 
!          Put_Line (File, ");");
        end Put;
  
        procedure Put (File : File_Descriptor; S : String) is
*************** package body Prj.Env is
*** 734,740 ****
           Last : Natural;
  
        begin
!          --  Add an ASCII.LF to the string. As this gnat.adc is supposed to
           --  be used only by the compiler, we don't care about the characters
           --  for the end of line. In fact we could have put a space, but
           --  it is more convenient to be able to read gnat.adc during
--- 848,854 ----
           Last : Natural;
  
        begin
!          --  Add an ASCII.LF to the string. As this config file is supposed to
           --  be used only by the compiler, we don't care about the characters
           --  for the end of line. In fact we could have put a space, but
           --  it is more convenient to be able to read gnat.adc during
*************** package body Prj.Env is
*** 777,789 ****
                 if Unit.File_Names (Specification).Needs_Pragma then
                    Put (Unit.Name,
                         Unit.File_Names (Specification).Name,
!                        Specification);
                 end if;
  
                 if Unit.File_Names (Body_Part).Needs_Pragma then
                    Put (Unit.Name,
                         Unit.File_Names (Body_Part).Name,
!                        Body_Part);
                 end if;
  
                 Current_Unit := Current_Unit + 1;
--- 891,905 ----
                 if Unit.File_Names (Specification).Needs_Pragma then
                    Put (Unit.Name,
                         Unit.File_Names (Specification).Name,
!                        Specification,
!                        Unit.File_Names (Specification).Index);
                 end if;
  
                 if Unit.File_Names (Body_Part).Needs_Pragma then
                    Put (Unit.Name,
                         Unit.File_Names (Body_Part).Name,
!                        Body_Part,
!                        Unit.File_Names (Body_Part).Index);
                 end if;
  
                 Current_Unit := Current_Unit + 1;
*************** package body Prj.Env is
*** 1000,1006 ****
        if not Status then
           Prj.Com.Fail ("disk full");
        end if;
- 
     end Create_Mapping_File;
  
     --------------------------
--- 1116,1121 ----
*************** package body Prj.Env is
*** 1071,1080 ****
  
        Extended_Spec_Name : String :=
                               Name & Namet.Get_Name_String
!                                       (Data.Naming.Current_Spec_Suffix);
        Extended_Body_Name : String :=
                               Name & Namet.Get_Name_String
!                                       (Data.Naming.Current_Body_Suffix);
  
        Unit : Unit_Data;
  
--- 1186,1195 ----
  
        Extended_Spec_Name : String :=
                               Name & Namet.Get_Name_String
!                                       (Data.Naming.Ada_Spec_Suffix);
        Extended_Body_Name : String :=
                               Name & Namet.Get_Name_String
!                                       (Data.Naming.Ada_Body_Suffix);
  
        Unit : Unit_Data;
  
*************** package body Prj.Env is
*** 1118,1124 ****
        --  this loop will be run only once.
  
        loop
!          --  For every unit
  
           for Current in reverse Units.First .. Units.Last loop
              Unit := Units.Table (Current);
--- 1233,1240 ----
        --  this loop will be run only once.
  
        loop
!          --  Loop through units
!          --  Should have comment explaining reverse ???
  
           for Current in reverse Units.First .. Units.Last loop
              Unit := Units.Table (Current);
*************** package body Prj.Env is
*** 1130,1136 ****
              then
                 declare
                    Current_Name : constant Name_Id :=
!                     Unit.File_Names (Body_Part).Name;
  
                 begin
                    --  Case of a body present
--- 1246,1252 ----
              then
                 declare
                    Current_Name : constant Name_Id :=
!                                    Unit.File_Names (Body_Part).Name;
  
                 begin
                    --  Case of a body present
*************** package body Prj.Env is
*** 1193,1199 ****
              then
                 declare
                    Current_Name : constant Name_Id :=
!                     Unit.File_Names (Specification).Name;
  
                 begin
                    --  Case of spec present
--- 1309,1315 ----
              then
                 declare
                    Current_Name : constant Name_Id :=
!                                    Unit.File_Names (Specification).Name;
  
                 begin
                    --  Case of spec present
*************** package body Prj.Env is
*** 1206,1213 ****
                          Write_Eol;
                       end if;
  
!                      --  If name same as the original name, return original
!                      --  name.
  
                       if Unit.Name = The_Original_Name
                         or else Current_Name = The_Original_Name
--- 1322,1328 ----
                          Write_Eol;
                       end if;
  
!                      --  If name same as original name, return original name
  
                       if Unit.Name = The_Original_Name
                         or else Current_Name = The_Original_Name
*************** package body Prj.Env is
*** 1216,1226 ****
                             Write_Line ("   OK");
                          end if;
  
- 
                          if Full_Path then
                             return Get_Name_String
                               (Unit.File_Names (Specification).Path);
- 
                          else
                             return Get_Name_String (Current_Name);
                          end if;
--- 1331,1339 ----
*************** package body Prj.Env is
*** 1236,1242 ****
                          if Full_Path then
                             return Get_Name_String
                               (Unit.File_Names (Specification).Path);
- 
                          else
                             return Extended_Spec_Name;
                          end if;
--- 1349,1354 ----
*************** package body Prj.Env is
*** 1420,1432 ****
              The_String : String_Element;
  
           begin
!             --  Call action with the name of every source directorie
  
!             while Current /= Nil_String loop
!                The_String := String_Elements.Table (Current);
!                Action (Get_Name_String (The_String.Value));
!                Current := The_String.Next;
!             end loop;
           end;
  
           --  If we are extending a project, visit it
--- 1532,1547 ----
              The_String : String_Element;
  
           begin
!             --  If there are Ada sources, call action with the name of every
!             --  source directory.
  
!             if Projects.Table (Project).Ada_Sources_Present then
!                while Current /= Nil_String loop
!                   The_String := String_Elements.Table (Current);
!                   Action (Get_Name_String (The_String.Value));
!                   Current := The_String.Next;
!                end loop;
!             end if;
           end;
  
           --  If we are extending a project, visit it
*************** package body Prj.Env is
*** 1461,1466 ****
--- 1576,1583 ----
        Path             : out Name_Id)
     is
     begin
+       --  Body below could use some comments ???
+ 
        if Current_Verbosity > Default then
           Write_Str ("Getting Reference_Of (""");
           Write_Str (Source_File_Name);
*************** package body Prj.Env is
*** 1518,1524 ****
  
                 return;
              end if;
- 
           end loop;
        end;
  
--- 1635,1640 ----
*************** package body Prj.Env is
*** 1535,1544 ****
     -- Initialize --
     ----------------
  
     procedure Initialize is
     begin
-       --  There is nothing to do anymore
- 
        null;
     end Initialize;
  
--- 1651,1661 ----
     -- Initialize --
     ----------------
  
+    --  This is a place holder for possible required initialization in
+    --  the future. In the current version no initialization is required.
+ 
     procedure Initialize is
     begin
        null;
     end Initialize;
  
*************** package body Prj.Env is
*** 1546,1564 ****
     -- Path_Name_Of_Library_Unit_Body --
     ------------------------------------
  
     function Path_Name_Of_Library_Unit_Body
       (Name    : String;
        Project : Project_Id) return String
     is
!       Data : constant Project_Data := Projects.Table (Project);
        Original_Name : String := Name;
  
        Extended_Spec_Name : String :=
                               Name & Namet.Get_Name_String
!                                      (Data.Naming.Current_Spec_Suffix);
        Extended_Body_Name : String :=
                               Name & Namet.Get_Name_String
!                                      (Data.Naming.Current_Body_Suffix);
  
        First   : Unit_Id := Units.First;
        Current : Unit_Id;
--- 1663,1683 ----
     -- Path_Name_Of_Library_Unit_Body --
     ------------------------------------
  
+    --  Could use some comments in the body here ???
+ 
     function Path_Name_Of_Library_Unit_Body
       (Name    : String;
        Project : Project_Id) return String
     is
!       Data          : constant Project_Data := Projects.Table (Project);
        Original_Name : String := Name;
  
        Extended_Spec_Name : String :=
                               Name & Namet.Get_Name_String
!                                      (Data.Naming.Ada_Spec_Suffix);
        Extended_Body_Name : String :=
                               Name & Namet.Get_Name_String
!                                      (Data.Naming.Ada_Body_Suffix);
  
        First   : Unit_Id := Units.First;
        Current : Unit_Id;
*************** package body Prj.Env is
*** 1651,1657 ****
                    return Spec_Path_Name_Of (Current);
  
                 elsif Current_Name = Extended_Spec_Name then
- 
                    if Current_Verbosity = High then
                       Write_Line ("   OK");
                    end if;
--- 1770,1775 ----
*************** package body Prj.Env is
*** 1675,1680 ****
--- 1793,1800 ----
     -- Print_Sources --
     -------------------
  
+    --  Could use some comments in this body ???
+ 
     procedure Print_Sources is
        Unit : Unit_Data;
  
*************** package body Prj.Env is
*** 1721,1727 ****
                (Namet.Get_Name_String
                 (Unit.File_Names (Body_Part).Name));
           end if;
- 
        end loop;
  
        Write_Line ("end of List of Sources.");
--- 1841,1846 ----
*************** package body Prj.Env is
*** 1743,1752 ****
  
        Extended_Spec_Name : String :=
                               Name & Namet.Get_Name_String
!                                       (Data.Naming.Current_Spec_Suffix);
        Extended_Body_Name : String :=
                               Name & Namet.Get_Name_String
!                                       (Data.Naming.Current_Body_Suffix);
  
        Unit : Unit_Data;
  
--- 1862,1871 ----
  
        Extended_Spec_Name : String :=
                               Name & Namet.Get_Name_String
!                                       (Data.Naming.Ada_Spec_Suffix);
        Extended_Body_Name : String :=
                               Name & Namet.Get_Name_String
!                                       (Data.Naming.Ada_Body_Suffix);
  
        Unit : Unit_Data;
  
*************** package body Prj.Env is
*** 1842,1925 ****
        Status : Boolean;
        --  For calls to Close
  
!       procedure Add (Project : Project_Id);
        --  Add all the source/object directories of a project to the path only
!       --  if this project has not been visited. Calls itself recursively for
!       --  projects being extended, and imported projects.
  
        ---------
        -- Add --
        ---------
  
!       procedure Add (Project : Project_Id) is
!       begin
!          --  If Seen is False, then the project has not yet been visited
  
!          if not Projects.Table (Project).Seen then
!             Projects.Table (Project).Seen := True;
  
!             declare
!                Data : constant Project_Data := Projects.Table (Project);
!                List : Project_List := Data.Imported_Projects;
  
!             begin
!                if Process_Source_Dirs then
  
!                   --  Add to path all source directories of this project
  
!                   Add_To_Path_File (Data.Source_Dirs, Source_FD);
!                end if;
  
!                if Process_Object_Dirs then
  
!                   --  Add to path the object directory of this project
!                   --  except if we don't include library project and
!                   --  this is a library project.
  
!                   if (Data.Library and then Including_Libraries)
!                     or else
!                      (Data.Object_Directory /= No_Name
!                         and then
!                          (not Including_Libraries or else not Data.Library))
!                   then
!                      --  For a library project, add the library directory
  
!                      if Data.Library then
!                         declare
!                            New_Path : constant String :=
!                                         Get_Name_String (Data.Library_Dir);
  
!                         begin
!                            Add_To_Path_File (New_Path, Object_FD);
!                         end;
  
!                      else
!                         --  For a non library project, add the object directory
  
!                         declare
!                            New_Path : constant String :=
!                              Get_Name_String (Data.Object_Directory);
!                         begin
!                            Add_To_Path_File (New_Path, Object_FD);
!                         end;
                       end if;
                    end if;
-                end if;
  
!                --  Call Add to the project being extended, if any
  
!                if Data.Extends /= No_Project then
!                   Add (Data.Extends);
!                end if;
  
!                --  Call Add for each imported project, if any
  
!                while List /= Empty_Project_List loop
!                   Add (Project_Lists.Table (List).Project);
!                   List := Project_Lists.Table (List).Next;
!                end loop;
!             end;
!          end if;
        end Add;
  
     --  Start of processing for Set_Ada_Paths
--- 1961,2069 ----
        Status : Boolean;
        --  For calls to Close
  
!       Len : Natural;
! 
!       procedure Add (Proj : Project_Id);
        --  Add all the source/object directories of a project to the path only
!       --  if this project has not been visited. Calls an internal procedure
!       --  recursively for projects being extended, and imported projects.
  
        ---------
        -- Add --
        ---------
  
!       procedure Add (Proj : Project_Id) is
  
!          procedure Recursive_Add (Project : Project_Id);
!          --  Recursive procedure to add the source/object paths of extended/
!          --  imported projects.
  
!          -------------------
!          -- Recursive_Add --
!          -------------------
  
!          procedure Recursive_Add (Project : Project_Id) is
!          begin
!             --  If Seen is False, then the project has not yet been visited
  
!             if not Projects.Table (Project).Seen then
!                Projects.Table (Project).Seen := True;
  
!                declare
!                   Data : constant Project_Data := Projects.Table (Project);
!                   List : Project_List := Data.Imported_Projects;
  
!                begin
!                   if Process_Source_Dirs then
  
!                      --  Add to path all source directories of this project
!                      --  if there are Ada sources.
  
!                      if Projects.Table (Project).Ada_Sources_Present then
!                         Add_To_Source_Path (Data.Source_Dirs);
!                      end if;
!                   end if;
  
!                   if Process_Object_Dirs then
  
!                      --  Add to path the object directory of this project
!                      --  except if we don't include library project and
!                      --  this is a library project.
  
!                      if (Data.Library and then Including_Libraries)
!                        or else
!                          (Data.Object_Directory /= No_Name
!                           and then
!                             (not Including_Libraries or else not Data.Library))
!                      then
!                         --  For a library project, add the library directory
!                         --  if there is no object directory or if the library
!                         --  directory contains ALI files; otherwise add the
!                         --  object directory.
  
!                         if Data.Library then
!                            if Data.Object_Directory = No_Name
!                              or else Contains_ALI_Files (Data.Library_Dir)
!                            then
!                               Add_To_Object_Path (Data.Library_Dir);
!                            else
!                               Add_To_Object_Path (Data.Object_Directory);
!                            end if;
! 
!                         --  For a non-library project, add the object
!                         --  directory, if it is not a virtual project.
! 
!                         elsif not Data.Virtual then
!                            Add_To_Object_Path (Data.Object_Directory);
!                         end if;
                       end if;
                    end if;
  
!                   --  Call Add to the project being extended, if any
  
!                   if Data.Extends /= No_Project then
!                      Recursive_Add (Data.Extends);
!                   end if;
  
!                   --  Call Add for each imported project, if any
  
!                   while List /= Empty_Project_List loop
!                      Recursive_Add (Project_Lists.Table (List).Project);
!                      List := Project_Lists.Table (List).Next;
!                   end loop;
!                end;
!             end if;
!          end Recursive_Add;
! 
!       begin
!          Source_Paths.Set_Last (0);
!          Object_Paths.Set_Last (0);
! 
!          for Index in 1 .. Projects.Last loop
!             Projects.Table (Index).Seen := False;
!          end loop;
! 
!          Recursive_Add (Proj);
        end Add;
  
     --  Start of processing for Set_Ada_Paths
*************** package body Prj.Env is
*** 1960,1975 ****
        --  then call the recursive procedure Add for Project.
  
        if Process_Source_Dirs or Process_Object_Dirs then
-          for Index in 1 .. Projects.Last loop
-             Projects.Table (Index).Seen := False;
-          end loop;
- 
           Add (Project);
        end if;
  
!       --  Close any file that has been created.
  
        if Source_FD /= Invalid_FD then
           Close (Source_FD, Status);
  
           if not Status then
--- 2104,2126 ----
        --  then call the recursive procedure Add for Project.
  
        if Process_Source_Dirs or Process_Object_Dirs then
           Add (Project);
        end if;
  
!       --  Write and close any file that has been created.
  
        if Source_FD /= Invalid_FD then
+          for Index in 1 .. Source_Paths.Last loop
+             Get_Name_String (Source_Paths.Table (Index));
+             Name_Len := Name_Len + 1;
+             Name_Buffer (Name_Len) := ASCII.LF;
+             Len := Write (Source_FD, Name_Buffer (1)'Address, Name_Len);
+ 
+             if Len /= Name_Len then
+                Prj.Com.Fail ("disk full");
+             end if;
+          end loop;
+ 
           Close (Source_FD, Status);
  
           if not Status then
*************** package body Prj.Env is
*** 1978,1983 ****
--- 2129,2145 ----
        end if;
  
        if Object_FD /= Invalid_FD then
+          for Index in 1 .. Object_Paths.Last loop
+             Get_Name_String (Object_Paths.Table (Index));
+             Name_Len := Name_Len + 1;
+             Name_Buffer (Name_Len) := ASCII.LF;
+             Len := Write (Object_FD, Name_Buffer (1)'Address, Name_Len);
+ 
+             if Len /= Name_Len then
+                Prj.Com.Fail ("disk full");
+             end if;
+          end loop;
+ 
           Close (Object_FD, Status);
  
           if not Status then
*************** package body Prj.Env is
*** 1988,1995 ****
        --  Set the env vars, if they need to be changed, and set the
        --  corresponding flags.
  
!       if
!         Current_Source_Path_File /= Projects.Table (Project).Include_Path_File
        then
           Current_Source_Path_File :=
             Projects.Table (Project).Include_Path_File;
--- 2150,2157 ----
        --  Set the env vars, if they need to be changed, and set the
        --  corresponding flags.
  
!       if Current_Source_Path_File /=
!            Projects.Table (Project).Include_Path_File
        then
           Current_Source_Path_File :=
             Projects.Table (Project).Include_Path_File;
*************** package body Prj.Env is
*** 2110,2115 ****
--- 2272,2280 ----
        return Result;
     end Ultimate_Extension_Of;
  
+ --  Package initialization
+ --  What is relationshiop to procedure Initialize
+ 
  begin
     Path_Files.Set_Last (0);
  end Prj.Env;
diff -Nrcpad gcc-3.4.3/gcc/ada/prj-env.ads gcc-4.0.0/gcc/ada/prj-env.ads
*** gcc-3.4.3/gcc/ada/prj-env.ads	Mon Oct 27 14:27:17 2003
--- gcc-4.0.0/gcc/ada/prj-env.ads	Mon Apr 19 15:20:02 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2001-2003 Free Software Foundation, Inc        --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2001-2004 Free Software Foundation, Inc        --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 24,38 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This package implements services for Project-aware tools, related
! --  to the environment (gnat.adc, ADA_INCLUDE_PATH, ADA_OBJECTS_PATH)
  
  with GNAT.OS_Lib; use GNAT.OS_Lib;
  
  package Prj.Env is
  
     procedure Initialize;
!    --  Put Standard_Naming_Data into Namings table (called by Prj.Initialize)
  
     procedure Print_Sources;
     --  Output the list of sources, after Project files have been scanned
--- 24,39 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This package implements services for Project-aware tools, mostly related
! --  to the environment (configuration pragma files, path files, mapping files).
  
  with GNAT.OS_Lib; use GNAT.OS_Lib;
  
  package Prj.Env is
  
     procedure Initialize;
!    --  Called by Prj.Initialize to perform required initialization
!    --  steps for this package.
  
     procedure Print_Sources;
     --  Output the list of sources, after Project files have been scanned
diff -Nrcpad gcc-3.4.3/gcc/ada/prj-err.adb gcc-4.0.0/gcc/ada/prj-err.adb
*** gcc-3.4.3/gcc/ada/prj-err.adb	Tue Oct 21 13:42:12 2003
--- gcc-4.0.0/gcc/ada/prj-err.adb	Mon Jan  3 15:32:18 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Stringt; use Stringt;
*** 31,36 ****
--- 31,46 ----
  
  package body Prj.Err is
  
+    -----------------------
+    -- Obsolescent_Check --
+    -----------------------
+ 
+    procedure Obsolescent_Check (S : Source_Ptr) is
+       pragma Warnings (Off, S);
+    begin
+       null;
+    end Obsolescent_Check;
+ 
     ---------------
     -- Post_Scan --
     ---------------
diff -Nrcpad gcc-3.4.3/gcc/ada/prj-err.ads gcc-4.0.0/gcc/ada/prj-err.ads
*** gcc-3.4.3/gcc/ada/prj-err.ads	Tue Oct 21 13:42:12 2003
--- gcc-4.0.0/gcc/ada/prj-err.ads	Mon Jan  3 15:32:18 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Prj.Err is
*** 58,69 ****
     --  file before using any of the other routines in the package.
  
     procedure Finalize (Source_Type : String := "project")
!                renames Errutil.Finalize;
     --  Finalize processing of error messages for one file and output message
     --  indicating the number of detected errors.
  
     procedure Error_Msg (Msg : String; Flag_Location : Source_Ptr)
!                renames Errutil.Error_Msg;
     --  Output a message at specified location.
  
     procedure Error_Msg_S (Msg : String) renames Errutil.Error_Msg_S;
--- 58,69 ----
     --  file before using any of the other routines in the package.
  
     procedure Finalize (Source_Type : String := "project")
!      renames Errutil.Finalize;
     --  Finalize processing of error messages for one file and output message
     --  indicating the number of detected errors.
  
     procedure Error_Msg (Msg : String; Flag_Location : Source_Ptr)
!      renames Errutil.Error_Msg;
     --  Output a message at specified location.
  
     procedure Error_Msg_S (Msg : String) renames Errutil.Error_Msg_S;
*************** package Prj.Err is
*** 85,100 ****
     --  Instantiation of the generic style package, needed for the instantiation
     --  of the generic scanner below.
  
     procedure Post_Scan;
     --  Convert an Ada operator symbol into a standard string
  
     package Scanner is new Scng
!      (Post_Scan    => Post_Scan,
!       Error_Msg    => Error_Msg,
!       Error_Msg_S  => Error_Msg_S,
!       Error_Msg_SC => Error_Msg_SC,
!       Error_Msg_SP => Error_Msg_SP,
!       Style        => Style);
     --  Instantiation of the generic scanner
  
  end Prj.Err;
--- 85,104 ----
     --  Instantiation of the generic style package, needed for the instantiation
     --  of the generic scanner below.
  
+    procedure Obsolescent_Check (S : Source_Ptr);
+    --  Dummy null procedure for Scng instantiation
+ 
     procedure Post_Scan;
     --  Convert an Ada operator symbol into a standard string
  
     package Scanner is new Scng
!      (Post_Scan         => Post_Scan,
!       Error_Msg         => Error_Msg,
!       Error_Msg_S       => Error_Msg_S,
!       Error_Msg_SC      => Error_Msg_SC,
!       Error_Msg_SP      => Error_Msg_SP,
!       Obsolescent_Check => Obsolescent_Check,
!       Style             => Style);
     --  Instantiation of the generic scanner
  
  end Prj.Err;
diff -Nrcpad gcc-3.4.3/gcc/ada/prj-ext.adb gcc-4.0.0/gcc/ada/prj-ext.adb
*** gcc-3.4.3/gcc/ada/prj-ext.adb	Tue Oct 21 13:42:12 2003
--- gcc-4.0.0/gcc/ada/prj-ext.adb	Wed Dec  8 11:25:43 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2000-2003 Free Software Foundation, Inc.       --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2000-2004 Free Software Foundation, Inc.       --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 26,32 ****
  
  with Namet;   use Namet;
  with Osint;   use Osint;
! with Prj.Com; use Prj.Com;
  with Types;   use Types;
  
  with GNAT.HTable;
--- 26,32 ----
  
  with Namet;   use Namet;
  with Osint;   use Osint;
! with Sdefault;
  with Types;   use Types;
  
  with GNAT.HTable;
*************** with GNAT.OS_Lib; use GNAT.OS_Lib;
*** 34,39 ****
--- 34,53 ----
  
  package body Prj.Ext is
  
+    Ada_Project_Path : constant String := "ADA_PROJECT_PATH";
+    --  Name of the env. variable that contains path name(s) of directories
+    --  where project files may reside.
+ 
+    Prj_Path : constant String_Access := Getenv (Ada_Project_Path);
+    --  The path name(s) of directories where project files may reside.
+    --  May be empty.
+ 
+    No_Project_Default_Dir : constant String := "-";
+ 
+    Current_Project_Path : String_Access;
+    --  The project path; initialized during elaboration of package
+    --  Contains at least the current working directory.
+ 
     package Htable is new GNAT.HTable.Simple_HTable
       (Header_Num => Header_Num,
        Element    => Name_Id,
*************** package body Prj.Ext is
*** 91,96 ****
--- 105,119 ----
        return False;
     end Check;
  
+    ------------------
+    -- Project_Path --
+    ------------------
+ 
+    function Project_Path return String is
+    begin
+       return Current_Project_Path.all;
+    end Project_Path;
+ 
     -----------
     -- Reset --
     -----------
*************** package body Prj.Ext is
*** 100,105 ****
--- 123,138 ----
        Htable.Reset;
     end Reset;
  
+    ----------------------
+    -- Set_Project_Path --
+    ----------------------
+ 
+    procedure Set_Project_Path (New_Path : String) is
+    begin
+       Free (Current_Project_Path);
+       Current_Project_Path := new String'(New_Path);
+    end Set_Project_Path;
+ 
     --------------
     -- Value_Of --
     --------------
*************** package body Prj.Ext is
*** 144,147 ****
--- 177,253 ----
        end;
     end Value_Of;
  
+ begin
+    --  Initialize Current_Project_Path during package elaboration
+ 
+    declare
+       Add_Default_Dir : Boolean := True;
+       First           : Positive;
+       Last            : Positive;
+ 
+    begin
+       --  The current directory is always first
+ 
+       Name_Len := 1;
+       Name_Buffer (Name_Len) := '.';
+ 
+       --  If env. var. is defined and not empty, add its content
+ 
+       if Prj_Path.all /= "" then
+          Name_Len := Name_Len + 1;
+          Name_Buffer (Name_Len) := Path_Separator;
+ 
+          Add_Str_To_Name_Buffer (Prj_Path.all);
+ 
+          --  Scan the directory path to see if "-" is one of the directories.
+          --  Remove each occurence of "-" and set Add_Default_Dir to False.
+ 
+          First := 3;
+          loop
+             while First <= Name_Len
+               and then (Name_Buffer (First) = Path_Separator)
+             loop
+                First := First + 1;
+             end loop;
+ 
+             exit when First > Name_Len;
+ 
+             Last := First;
+ 
+             while Last < Name_Len
+               and then Name_Buffer (Last + 1) /= Path_Separator
+             loop
+                Last := Last + 1;
+             end loop;
+ 
+             --  If the directory is "-", set Add_Default_Dir to False and
+             --  remove from path.
+ 
+             if Name_Buffer (First .. Last) = No_Project_Default_Dir then
+                Add_Default_Dir := False;
+ 
+                for J in Last + 1 .. Name_Len loop
+                   Name_Buffer (J - No_Project_Default_Dir'Length - 1) :=
+                     Name_Buffer (J);
+                end loop;
+ 
+                Name_Len := Name_Len - No_Project_Default_Dir'Length - 1;
+             end if;
+ 
+             First := Last + 1;
+          end loop;
+       end if;
+ 
+       --  Set the initial value of Current_Project_Path
+ 
+       if Add_Default_Dir then
+          Current_Project_Path :=
+            new String'(Name_Buffer (1 .. Name_Len) & Path_Separator &
+                        Sdefault.Search_Dir_Prefix.all & ".." &
+                        Directory_Separator & ".." & Directory_Separator &
+                        ".." & Directory_Separator & "gnat");
+       else
+          Current_Project_Path := new String'(Name_Buffer (1 .. Name_Len));
+       end if;
+    end;
  end Prj.Ext;
diff -Nrcpad gcc-3.4.3/gcc/ada/prj-ext.ads gcc-4.0.0/gcc/ada/prj-ext.ads
*** gcc-3.4.3/gcc/ada/prj-ext.ads	Tue Oct 21 13:42:12 2003
--- gcc-4.0.0/gcc/ada/prj-ext.ads	Wed Dec  8 11:25:43 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2000-2003 Free Software Foundation, Inc.       --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2000-2004 Free Software Foundation, Inc.       --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Types; use Types;
*** 31,36 ****
--- 31,46 ----
  
  package Prj.Ext is
  
+    function Project_Path return String;
+    --  Return the current value of the project path, either the value set
+    --  during elaboration of the package or, if procedure Set_Project_Path has
+    --  been called, the value set by the last call to Set_Project_Path.
+ 
+    procedure Set_Project_Path (New_Path : String);
+    --  Give a new value to the project path. The new value New_Path should
+    --  always start with the current directory (".") and the path separators
+    --  should be the correct ones for the platform.
+ 
     procedure Add
       (External_Name : String;
        Value         : String);
diff -Nrcpad gcc-3.4.3/gcc/ada/prj-makr.adb gcc-4.0.0/gcc/ada/prj-makr.adb
*** gcc-3.4.3/gcc/ada/prj-makr.adb	Tue Oct 21 13:42:12 2003
--- gcc-4.0.0/gcc/ada/prj-makr.adb	Thu Feb 10 13:55:43 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Prj.Com;
*** 34,51 ****
  with Prj.Part;
  with Prj.PP;
  with Prj.Tree; use Prj.Tree;
  with Snames;   use Snames;
  with Table;    use Table;
  
  with Ada.Characters.Handling;   use Ada.Characters.Handling;
  with GNAT.Directory_Operations; use GNAT.Directory_Operations;
- with GNAT.Expect;               use GNAT.Expect;
  with GNAT.OS_Lib;               use GNAT.OS_Lib;
  with GNAT.Regexp;               use GNAT.Regexp;
! with GNAT.Regpat;               use GNAT.Regpat;
  
  package body Prj.Makr is
  
     Non_Empty_Node : constant Project_Node_Id := 1;
     --  Used for the With_Clause of the naming project
  
--- 34,60 ----
  with Prj.Part;
  with Prj.PP;
  with Prj.Tree; use Prj.Tree;
+ with Prj.Util; use Prj.Util;
  with Snames;   use Snames;
  with Table;    use Table;
  
  with Ada.Characters.Handling;   use Ada.Characters.Handling;
  with GNAT.Directory_Operations; use GNAT.Directory_Operations;
  with GNAT.OS_Lib;               use GNAT.OS_Lib;
  with GNAT.Regexp;               use GNAT.Regexp;
! 
! with System.Case_Util;          use System.Case_Util;
! with System.CRTL;
  
  package body Prj.Makr is
  
+    function Dup (Fd : File_Descriptor) return File_Descriptor;
+ 
+    procedure Dup2 (Old_Fd, New_Fd : File_Descriptor);
+ 
+    Gcc : constant String := "gcc";
+    Gcc_Path : String_Access := null;
+ 
     Non_Empty_Node : constant Project_Node_Id := 1;
     --  Used for the With_Clause of the naming project
  
*************** package body Prj.Makr is
*** 54,64 ****
     Naming_File_Suffix      : constant String := "_naming";
     Source_List_File_Suffix : constant String := "_source_list.txt";
  
!    Output_FD   : File_Descriptor;
!    --  To save the project file and its naming project file.
  
     procedure Write_Eol;
!    --  Output an empty line.
  
     procedure Write_A_Char (C : Character);
     --  Write one character to Output_FD
--- 63,73 ----
     Naming_File_Suffix      : constant String := "_naming";
     Source_List_File_Suffix : constant String := "_source_list.txt";
  
!    Output_FD : File_Descriptor;
!    --  To save the project file and its naming project file
  
     procedure Write_Eol;
!    --  Output an empty line
  
     procedure Write_A_Char (C : Character);
     --  Write one character to Output_FD
*************** package body Prj.Makr is
*** 74,79 ****
--- 83,108 ----
        Table_Increment      => 10,
        Table_Name           => "Prj.Makr.Processed_Directories");
  
+    ---------
+    -- Dup --
+    ---------
+ 
+    function Dup  (Fd : File_Descriptor) return File_Descriptor is
+    begin
+       return File_Descriptor (System.CRTL.dup (Integer (Fd)));
+    end Dup;
+ 
+    ----------
+    -- Dup2 --
+    ----------
+ 
+    procedure Dup2 (Old_Fd, New_Fd : File_Descriptor) is
+       Fd : Integer;
+       pragma Warnings (Off, Fd);
+    begin
+       Fd := System.CRTL.dup2 (Integer (Old_Fd), Integer (New_Fd));
+    end Dup2;
+ 
     ----------
     -- Make --
     ----------
*************** package body Prj.Makr is
*** 123,143 ****
  
        Source_List_FD : File_Descriptor;
  
-       Matcher : constant Pattern_Matcher :=
-                   Compile (Expression => "expected|Unit.*\)|No such");
- 
        Args : Argument_List  (1 .. Preproc_Switches'Length + 6);
- --                 (1 => new String'("-c"),
- --                  2 => new String'("-gnats"),
- --                  3 => new String'("-gnatu"),
- --                  4 => new String'("-x"),
- --                  5 => new String'("ada"),
- --                  6 => null);
  
        type SFN_Pragma is record
!          Unit : String_Access;
!          File : String_Access;
!          Spec : Boolean;
        end record;
  
        package SFN_Pragmas is new Table.Table
--- 152,164 ----
  
        Source_List_FD : File_Descriptor;
  
        Args : Argument_List  (1 .. Preproc_Switches'Length + 6);
  
        type SFN_Pragma is record
!          Unit  : Name_Id;
!          File  : Name_Id;
!          Index : Int := 0;
!          Spec  : Boolean;
        end record;
  
        package SFN_Pragmas is new Table.Table
*************** package body Prj.Makr is
*** 158,177 ****
        -----------------------
  
        procedure Process_Directory (Dir_Name : String; Recursively : Boolean) is
!          Matched  : Matched_Type := False;
!          Str      : String (1 .. 2_000);
!          Last     : Natural;
!          Dir      : Dir_Type;
!          Process  : Boolean := True;
  
!       begin
!          if Opt.Verbose_Mode then
!             Output.Write_Str ("Processing directory """);
!             Output.Write_Str (Dir_Name);
!             Output.Write_Line ("""");
!          end if;
  
!          --  Avoid processing several times the same directory.
  
           for Index in 1 .. Processed_Directories.Last loop
              if Processed_Directories.Table (Index).all = Dir_Name then
--- 179,198 ----
        -----------------------
  
        procedure Process_Directory (Dir_Name : String; Recursively : Boolean) is
!          Matched : Matched_Type := False;
!          Str     : String (1 .. 2_000);
!          Canon   : String (1 .. 2_000);
!          Last    : Natural;
!          Dir     : Dir_Type;
!          Process : Boolean := True;
  
!          Temp_File_Name         : String_Access := null;
!          Save_Last_Pragma_Index : Natural := 0;
!          File_Name_Id           : Name_Id := No_Name;
!          SFN_Prag               : SFN_Pragma;
  
!       begin
!          --  Avoid processing the same directory more than once
  
           for Index in 1 .. Processed_Directories.Last loop
              if Processed_Directories.Table (Index).all = Dir_Name then
*************** package body Prj.Makr is
*** 181,195 ****
           end loop;
  
           if Process then
              Processed_Directories. Increment_Last;
              Processed_Directories.Table (Processed_Directories.Last) :=
                new String'(Dir_Name);
!             --  Get the source file names from the directory.
!             --  Fails if the directory does not exist.
  
              begin
                 Open (Dir, Dir_Name);
- 
              exception
                 when Directory_Error =>
                    Prj.Com.Fail ("cannot open directory """, Dir_Name, """");
--- 202,222 ----
           end loop;
  
           if Process then
+             if Opt.Verbose_Mode then
+                Output.Write_Str ("Processing directory """);
+                Output.Write_Str (Dir_Name);
+                Output.Write_Line ("""");
+             end if;
+ 
              Processed_Directories. Increment_Last;
              Processed_Directories.Table (Processed_Directories.Last) :=
                new String'(Dir_Name);
! 
!             --  Get the source file names from the directory. Fails if the
!             --  directory does not exist.
  
              begin
                 Open (Dir, Dir_Name);
              exception
                 when Directory_Error =>
                    Prj.Com.Fail ("cannot open directory """, Dir_Name, """");
*************** package body Prj.Makr is
*** 197,217 ****
  
              --  Process each regular file in the directory
  
!             loop
                 Read (Dir, Str, Last);
!                exit when Last = 0;
  
                 if Is_Regular_File
                   (Dir_Name & Directory_Separator & Str (1 .. Last))
                 then
                    Matched := True;
  
                    --  First, check if the file name matches at least one of
                    --  the excluded expressions;
  
                    for Index in Excluded_Expressions'Range loop
                       if
!                        Match (Str (1 .. Last), Excluded_Expressions (Index))
                       then
                          Matched := Excluded;
                          exit;
--- 224,255 ----
  
              --  Process each regular file in the directory
  
!             File_Loop : loop
                 Read (Dir, Str, Last);
!                exit File_Loop when Last = 0;
! 
!                --  Copy the file name and put it in canonical case to match
!                --  against the patterns that have themselves already been put
!                --  in canonical case.
! 
!                Canon (1 .. Last) := Str (1 .. Last);
!                Canonical_Case_File_Name (Canon (1 .. Last));
  
                 if Is_Regular_File
                   (Dir_Name & Directory_Separator & Str (1 .. Last))
                 then
                    Matched := True;
  
+                   Name_Len := Last;
+                   Name_Buffer (1 .. Name_Len) := Str (1 .. Last);
+                   File_Name_Id := Name_Find;
+ 
                    --  First, check if the file name matches at least one of
                    --  the excluded expressions;
  
                    for Index in Excluded_Expressions'Range loop
                       if
!                        Match (Canon (1 .. Last), Excluded_Expressions (Index))
                       then
                          Matched := Excluded;
                          exit;
*************** package body Prj.Makr is
*** 227,233 ****
  
                       for Index in Regular_Expressions'Range loop
                          if
!                           Match (Str (1 .. Last), Regular_Expressions (Index))
                          then
                             Matched := True;
                             exit;
--- 265,272 ----
  
                       for Index in Regular_Expressions'Range loop
                          if
!                           Match
!                             (Canon (1 .. Last), Regular_Expressions (Index))
                          then
                             Matched := True;
                             exit;
*************** package body Prj.Makr is
*** 240,246 ****
                    then
                       Output.Write_Str ("   Checking """);
                       Output.Write_Str (Str (1 .. Last));
!                      Output.Write_Str (""": ");
                    end if;
  
                    --  If the file name matches one of the regular expressions,
--- 279,285 ----
                    then
                       Output.Write_Str ("   Checking """);
                       Output.Write_Str (Str (1 .. Last));
!                      Output.Write_Line (""": ");
                    end if;
  
                    --  If the file name matches one of the regular expressions,
*************** package body Prj.Makr is
*** 248,294 ****
  
                    if Matched = True then
                       declare
!                         PD     : Process_Descriptor;
!                         Result : Expect_Match;
  
                       begin
                          Args (Args'Last) := new String'
!                                                   (Dir_Name &
!                                                    Directory_Separator &
!                                                    Str (1 .. Last));
  
                          begin
!                            Non_Blocking_Spawn
!                              (PD, "gcc", Args, Err_To_Out => True);
!                            Expect (PD, Result, Matcher);
  
!                         exception
!                            when Process_Died =>
                                if Opt.Verbose_Mode then
!                                  Output.Write_Str ("(process died) ");
                                end if;
  
!                               Result := Expect_Timeout;
!                         end;
  
!                         if Result /= Expect_Timeout then
  
!                            --  If we got a unit name, this is a valid source
!                            --  file.
  
!                            declare
!                               S : constant String := Expect_Out_Match (PD);
  
!                            begin
!                               if S'Length >= 13
!                                 and then S (S'First .. S'First + 3) = "Unit"
                                then
                                   if Opt.Verbose_Mode then
!                                     Output.Write_Str
!                                       (S (S'Last - 4 .. S'Last - 1));
!                                     Output.Write_Str (" of ");
                                      Output.Write_Line
!                                       (S (S'First + 5 .. S'Last - 7));
                                   end if;
  
                                   if Project_File then
--- 287,469 ----
  
                    if Matched = True then
                       declare
!                         FD : File_Descriptor;
!                         Success : Boolean;
!                         Saved_Output : File_Descriptor;
!                         Saved_Error  : File_Descriptor;
  
                       begin
+                         --  If we don't have the path of the compiler yet,
+                         --  get it now. The compiler name may have a prefix,
+                         --  so we get the potentially prefixed name.
+ 
+                         if Gcc_Path = null then
+                            declare
+                               Prefix_Gcc : String_Access :=
+                                              Program_Name (Gcc);
+                            begin
+                               Gcc_Path :=
+                                 Locate_Exec_On_Path (Prefix_Gcc.all);
+                               Free (Prefix_Gcc);
+                            end;
+ 
+                            if Gcc_Path = null then
+                               Prj.Com.Fail ("could not locate " & Gcc);
+                            end if;
+                         end if;
+ 
+                         --  If we don't have yet the file name of the
+                         --  temporary file, get it now.
+ 
+                         if Temp_File_Name = null then
+                            Create_Temp_File (FD, Temp_File_Name);
+ 
+                            if FD = Invalid_FD then
+                               Prj.Com.Fail
+                                 ("could not create temporary file");
+                            end if;
+ 
+                            Close (FD);
+                            Delete_File (Temp_File_Name.all, Success);
+                         end if;
+ 
                          Args (Args'Last) := new String'
!                           (Dir_Name &
!                            Directory_Separator &
!                            Str (1 .. Last));
! 
!                         --  Create the temporary file
! 
!                         FD := Create_Output_Text_File
!                           (Name => Temp_File_Name.all);
! 
!                         if FD = Invalid_FD then
!                            Prj.Com.Fail
!                              ("could not create temporary file");
!                         end if;
! 
!                         --  Save the standard output and error
! 
!                         Saved_Output := Dup (Standout);
!                         Saved_Error  := Dup (Standerr);
! 
!                         --  Set standard output and error to the temporary file
! 
!                         Dup2 (FD, Standout);
!                         Dup2 (FD, Standerr);
! 
!                         --  And spawn the compiler
! 
!                         Spawn (Gcc_Path.all, Args, Success);
! 
!                         --  Restore the standard output and error
! 
!                         Dup2 (Saved_Output, Standout);
!                         Dup2 (Saved_Error, Standerr);
! 
!                         --  Close the temporary file
! 
!                         Close (FD);
! 
!                         --  And close the saved standard output and error to
!                         --  avoid too many file descriptors.
! 
!                         Close (Saved_Output);
!                         Close (Saved_Error);
! 
!                         --  Now that standard output is restored, check if
!                         --  the compiler ran correctly.
! 
!                         --  Read the lines of the temporary file:
!                         --  they should contain the kind and name of the unit.
! 
!                         declare
!                            File      : Text_File;
!                            Text_Line : String (1 .. 1_000);
!                            Text_Last : Natural;
  
                          begin
!                            Open (File, Temp_File_Name.all);
  
!                            if not Is_Valid (File) then
!                               Prj.Com.Fail
!                                 ("could not read temporary file");
!                            end if;
! 
!                            Save_Last_Pragma_Index := SFN_Pragmas.Last;
! 
!                            if End_Of_File (File) then
                                if Opt.Verbose_Mode then
!                                  if not Success then
!                                     Output.Write_Str ("      (process died) ");
!                                  end if;
                                end if;
  
!                            else
!                               Line_Loop : while not End_Of_File (File) loop
!                                  Get_Line (File, Text_Line, Text_Last);
  
!                                  --  Find the first closing parenthesis
  
!                                  Char_Loop : for J in 1 .. Text_Last loop
!                                     if Text_Line (J) = ')' then
!                                        if J >= 13 and then
!                                          Text_Line (1 .. 4) = "Unit"
!                                        then
!                                           --  Add entry to SFN_Pragmas table
  
!                                           Name_Len := J - 12;
!                                           Name_Buffer (1 .. Name_Len) :=
!                                             Text_Line (6 .. J - 7);
!                                           SFN_Prag :=
!                                             (Unit  => Name_Find,
!                                              File  => File_Name_Id,
!                                              Index => 0,
!                                              Spec  => Text_Line (J - 5 .. J) =
!                                                         "(spec)");
  
!                                           SFN_Pragmas.Increment_Last;
!                                           SFN_Pragmas.Table
!                                             (SFN_Pragmas.Last) := SFN_Prag;
!                                        end if;
!                                        exit Char_Loop;
!                                     end if;
!                                  end loop Char_Loop;
!                               end loop Line_Loop;
!                            end if;
! 
!                            if Save_Last_Pragma_Index = SFN_Pragmas.Last then
!                               if Opt.Verbose_Mode then
!                                  Output.Write_Line ("      not a unit");
!                               end if;
! 
!                            else
!                               if SFN_Pragmas.Last >
!                                    Save_Last_Pragma_Index + 1
                                then
+                                  for Index in Save_Last_Pragma_Index + 1 ..
+                                                 SFN_Pragmas.Last
+                                  loop
+                                     SFN_Pragmas.Table (Index).Index :=
+                                       Int (Index - Save_Last_Pragma_Index);
+                                  end loop;
+                               end if;
+ 
+                               for Index in Save_Last_Pragma_Index + 1 ..
+                                              SFN_Pragmas.Last
+                               loop
+                                  SFN_Prag := SFN_Pragmas.Table (Index);
+ 
                                   if Opt.Verbose_Mode then
!                                     if SFN_Prag.Spec then
!                                        Output.Write_Str ("      spec of ");
! 
!                                     else
!                                        Output.Write_Str ("      body of ");
!                                     end if;
! 
                                      Output.Write_Line
!                                       (Get_Name_String (SFN_Prag.Unit));
                                   end if;
  
                                   if Project_File then
*************** package body Prj.Makr is
*** 299,326 ****
                                      declare
                                         Decl_Item : constant Project_Node_Id :=
                                           Default_Project_Node
!                                          (Of_Kind =>
!                                             N_Declarative_Item);
  
                                         Attribute : constant Project_Node_Id :=
                                           Default_Project_Node
!                                          (Of_Kind =>
!                                             N_Attribute_Declaration);
  
                                         Expression : constant Project_Node_Id :=
                                           Default_Project_Node
!                                          (Of_Kind => N_Expression,
!                                           And_Expr_Kind => Single);
  
                                         Term : constant Project_Node_Id :=
                                           Default_Project_Node
!                                          (Of_Kind => N_Term,
!                                           And_Expr_Kind => Single);
  
                                         Value : constant Project_Node_Id :=
                                           Default_Project_Node
!                                          (Of_Kind => N_Literal_String,
!                                           And_Expr_Kind => Single);
  
                                      begin
                                         Set_Next_Declarative_Item
--- 474,501 ----
                                      declare
                                         Decl_Item : constant Project_Node_Id :=
                                           Default_Project_Node
!                                            (Of_Kind =>
!                                                 N_Declarative_Item);
  
                                         Attribute : constant Project_Node_Id :=
                                           Default_Project_Node
!                                            (Of_Kind =>
!                                                 N_Attribute_Declaration);
  
                                         Expression : constant Project_Node_Id :=
                                           Default_Project_Node
!                                            (Of_Kind => N_Expression,
!                                             And_Expr_Kind => Single);
  
                                         Term : constant Project_Node_Id :=
                                           Default_Project_Node
!                                            (Of_Kind => N_Term,
!                                             And_Expr_Kind => Single);
  
                                         Value : constant Project_Node_Id :=
                                           Default_Project_Node
!                                            (Of_Kind => N_Literal_String,
!                                             And_Expr_Kind => Single);
  
                                      begin
                                         Set_Next_Declarative_Item
*************** package body Prj.Makr is
*** 332,340 ****
                                         Set_Current_Item_Node
                                           (Decl_Item, To => Attribute);
  
!                                        if
!                                          S (S'Last - 5 .. S'Last) = "(spec)"
!                                        then
                                            Set_Name_Of
                                              (Attribute, To => Name_Spec);
                                         else
--- 507,515 ----
                                         Set_Current_Item_Node
                                           (Decl_Item, To => Attribute);
  
!                                        --  Is it a spec or a body?
! 
!                                        if SFN_Prag.Spec then
                                            Set_Name_Of
                                              (Attribute, To => Name_Spec);
                                         else
*************** package body Prj.Makr is
*** 343,413 ****
                                               To => Name_Body);
                                         end if;
  
!                                        Name_Len := S'Last - S'First - 11;
!                                        Name_Buffer (1 .. Name_Len) :=
!                                          (To_Lower
!                                             (S (S'First + 5 .. S'Last - 7)));
                                         Set_Associative_Array_Index_Of
                                           (Attribute, To => Name_Find);
  
                                         Set_Expression_Of
                                           (Attribute, To => Expression);
!                                        Set_First_Term (Expression, To => Term);
                                         Set_Current_Term (Term, To => Value);
  
!                                        Name_Len := Last;
!                                        Name_Buffer (1 .. Name_Len) :=
!                                          Str (1 .. Last);
                                         Set_String_Value_Of
!                                          (Value, To => Name_Find);
                                      end;
  
!                                     --  Add source file name to source list
!                                     --  file.
! 
!                                     Last := Last + 1;
!                                     Str (Last) := ASCII.LF;
! 
!                                     if Write (Source_List_FD,
!                                               Str (1)'Address,
!                                               Last) /= Last
!                                     then
!                                        Prj.Com.Fail ("disk full");
!                                     end if;
!                                  else
!                                     --  Add an entry in the SFN_Pragmas table
  
!                                     SFN_Pragmas.Increment_Last;
!                                     SFN_Pragmas.Table (SFN_Pragmas.Last) :=
!                                       (Unit => new String'
!                                          (S (S'First + 5 .. S'Last - 7)),
!                                        File => new String'(Str (1 .. Last)),
!                                        Spec => S (S'Last - 5 .. S'Last)
!                                        = "(spec)");
!                                  end if;
  
!                               else
!                                  if Opt.Verbose_Mode then
!                                     Output.Write_Line ("not a unit");
                                   end if;
                                end if;
-                            end;
- 
-                         else
-                            if Opt.Verbose_Mode then
-                               Output.Write_Line ("not a unit");
                             end if;
-                         end if;
  
!                         Close (PD);
                       end;
  
                    else
!                      if Matched = False then
!                         --  Look if this is a foreign source
  
                          for Index in Foreign_Expressions'Range loop
!                            if Match (Str (1 .. Last),
                                       Foreign_Expressions (Index))
                             then
                                Matched := True;
--- 518,576 ----
                                               To => Name_Body);
                                         end if;
  
!                                        --  Get the name of the unit
! 
!                                        Get_Name_String (SFN_Prag.Unit);
!                                        To_Lower (Name_Buffer (1 .. Name_Len));
                                         Set_Associative_Array_Index_Of
                                           (Attribute, To => Name_Find);
  
                                         Set_Expression_Of
                                           (Attribute, To => Expression);
!                                        Set_First_Term
!                                          (Expression, To => Term);
                                         Set_Current_Term (Term, To => Value);
  
!                                        --  And set the name of the file
! 
                                         Set_String_Value_Of
!                                          (Value, To => File_Name_Id);
!                                        Set_Source_Index_Of
!                                          (Value, To => SFN_Prag.Index);
                                      end;
+                                  end if;
+                               end loop;
  
!                               if Project_File then
!                                  --  Add source file name to source list
!                                  --  file.
  
!                                  Last := Last + 1;
!                                  Str (Last) := ASCII.LF;
  
!                                  if Write (Source_List_FD,
!                                            Str (1)'Address,
!                                            Last) /= Last
!                                  then
!                                     Prj.Com.Fail ("disk full");
                                   end if;
                                end if;
                             end if;
  
!                            Close (File);
! 
!                            Delete_File (Temp_File_Name.all, Success);
!                         end;
                       end;
  
+                   --  File name matches none of the regular expressions
+ 
                    else
!                      --  If file is not excluded, see if this is foreign source
  
+                      if Matched /= Excluded then
                          for Index in Foreign_Expressions'Range loop
!                            if Match (Canon (1 .. Last),
                                       Foreign_Expressions (Index))
                             then
                                Matched := True;
*************** package body Prj.Makr is
*** 445,451 ****
                       end if;
                    end if;
                 end if;
!             end loop;
  
              Close (Dir);
           end if;
--- 608,614 ----
                       end if;
                    end if;
                 end if;
!             end loop File_Loop;
  
              Close (Dir);
           end if;
*************** package body Prj.Makr is
*** 533,538 ****
--- 696,802 ----
           Output_Name (1 .. Path_Last) := To_Lower (Path_Name (1 .. Path_Last));
           Output_Name_Last := Path_Last - Project_File_Extension'Length;
  
+          --  If there is already a project file with the specified name, parse
+          --  it to get the components that are not automatically generated.
+ 
+          if Is_Regular_File (Output_Name (1 .. Path_Last)) then
+             if Opt.Verbose_Mode then
+                Output.Write_Str ("Parsing already existing project file """);
+                Output.Write_Str (Output_Name (1 .. Output_Name_Last));
+                Output.Write_Line ("""");
+             end if;
+ 
+             Part.Parse
+               (Project                => Project_Node,
+                Project_File_Name      => Output_Name (1 .. Output_Name_Last),
+                Always_Errout_Finalize => False);
+ 
+             --  Fail if parsing was not successful
+ 
+             if Project_Node = Empty_Node then
+                Fail ("parsing of existing project file failed");
+ 
+             else
+                --  If parsing was successful, remove the components that are
+                --  automatically generated, if any, so that they will be
+                --  unconditionally added later.
+ 
+                --  Remove the with clause for the naming project file
+ 
+                declare
+                   With_Clause : Project_Node_Id :=
+                                   First_With_Clause_Of (Project_Node);
+                   Previous    : Project_Node_Id := Empty_Node;
+ 
+                begin
+                   while With_Clause /= Empty_Node loop
+                      if Tree.Name_Of (With_Clause) = Project_Naming_Id then
+                         if Previous = Empty_Node then
+                            Set_First_With_Clause_Of
+                              (Project_Node,
+                               To => Next_With_Clause_Of (With_Clause));
+                         else
+                            Set_Next_With_Clause_Of
+                              (Previous,
+                               To => Next_With_Clause_Of (With_Clause));
+                         end if;
+ 
+                         exit;
+                      end if;
+ 
+                      Previous := With_Clause;
+                      With_Clause := Next_With_Clause_Of (With_Clause);
+                   end loop;
+                end;
+ 
+                --  Remove attribute declarations of Source_Files,
+                --  Source_List_File, Source_Dirs, and the declaration of
+                --  package Naming, if they exist.
+ 
+                declare
+                   Declaration  : Project_Node_Id :=
+                                    First_Declarative_Item_Of
+                                      (Project_Declaration_Of
+                                        (Project_Node));
+                   Previous     : Project_Node_Id := Empty_Node;
+                   Current_Node : Project_Node_Id := Empty_Node;
+ 
+                begin
+                   while Declaration /= Empty_Node loop
+                      Current_Node := Current_Item_Node (Declaration);
+ 
+                      if (Kind_Of (Current_Node) = N_Attribute_Declaration
+                            and then
+                             (Tree.Name_Of (Current_Node) = Name_Source_Files
+                                or else Tree.Name_Of (Current_Node) =
+                                                  Name_Source_List_File
+                                or else Tree.Name_Of (Current_Node) =
+                                                  Name_Source_Dirs))
+                        or else
+                        (Kind_Of (Current_Node) = N_Package_Declaration
+                           and then Tree.Name_Of (Current_Node) = Name_Naming)
+                      then
+                         if Previous = Empty_Node then
+                            Set_First_Declarative_Item_Of
+                              (Project_Declaration_Of (Project_Node),
+                               To => Next_Declarative_Item (Declaration));
+ 
+                         else
+                            Set_Next_Declarative_Item
+                              (Previous,
+                               To => Next_Declarative_Item (Declaration));
+                         end if;
+ 
+                      else
+                         Previous := Declaration;
+                      end if;
+ 
+                      Declaration := Next_Declarative_Item (Declaration);
+                   end loop;
+                end;
+             end if;
+          end if;
+ 
           if Directory_Last /= 0 then
              Output_Name (1 .. Output_Name_Last - Directory_Last) :=
                Output_Name (Directory_Last + 1 .. Output_Name_Last);
*************** package body Prj.Makr is
*** 612,618 ****
  
           declare
              Discard : Boolean;
- 
           begin
              Delete_File
                (Source_List_Path (1 .. Source_List_Last),
--- 876,881 ----
*************** package body Prj.Makr is
*** 647,653 ****
           begin
              Excluded_Expressions (Index) :=
                Compile (Pattern => Excluded_Patterns (Index).all, Glob => True);
- 
           exception
              when Error_In_Regexp =>
                 Prj.Com.Fail
--- 910,915 ----
*************** package body Prj.Makr is
*** 667,673 ****
           begin
              Foreign_Expressions (Index) :=
                Compile (Pattern => Foreign_Patterns (Index).all, Glob => True);
- 
           exception
              when Error_In_Regexp =>
                 Prj.Com.Fail
--- 929,934 ----
*************** package body Prj.Makr is
*** 705,808 ****
              Output.Write_Line ("""");
           end if;
  
-          --  If there is already a project file with the specified name,
-          --  parse it to get the components that are not automatically
-          --  generated.
- 
-          if Is_Regular_File (Output_Name (1 .. Output_Name_Last)) then
-             if Opt.Verbose_Mode then
-                Output.Write_Str ("Parsing already existing project file """);
-                Output.Write_Str (Output_Name (1 .. Output_Name_Last));
-                Output.Write_Line ("""");
-             end if;
- 
-             Part.Parse
-               (Project           => Project_Node,
-                Project_File_Name => Output_Name (1 .. Output_Name_Last),
-                Always_Errout_Finalize => False);
- 
-             --  If parsing was successful, remove the components that are
-             --  automatically generated, if any, so that they will be
-             --  unconditionally added later.
- 
-             if Project_Node /= Empty_Node then
- 
-                --  Remove the with clause for the naming project file
- 
-                declare
-                   With_Clause : Project_Node_Id :=
-                     First_With_Clause_Of (Project_Node);
-                   Previous    : Project_Node_Id := Empty_Node;
- 
-                begin
-                   while With_Clause /= Empty_Node loop
-                      if Tree.Name_Of (With_Clause) = Project_Naming_Id then
-                         if Previous = Empty_Node then
-                            Set_First_With_Clause_Of
-                              (Project_Node,
-                               To => Next_With_Clause_Of (With_Clause));
-                         else
-                            Set_Next_With_Clause_Of
-                              (Previous,
-                               To => Next_With_Clause_Of (With_Clause));
-                         end if;
- 
-                         exit;
-                      end if;
- 
-                      Previous := With_Clause;
-                      With_Clause := Next_With_Clause_Of (With_Clause);
-                   end loop;
-                end;
- 
-                --  Remove attribute declarations of Source_Files,
-                --  Source_List_File, Source_Dirs, and the declaration of
-                --  package Naming, if they exist.
- 
-                declare
-                   Declaration  : Project_Node_Id :=
-                                    First_Declarative_Item_Of
-                                      (Project_Declaration_Of
-                                        (Project_Node));
-                   Previous     : Project_Node_Id := Empty_Node;
-                   Current_Node : Project_Node_Id := Empty_Node;
- 
-                begin
-                   while Declaration /= Empty_Node loop
-                      Current_Node := Current_Item_Node (Declaration);
- 
-                      if (Kind_Of (Current_Node) = N_Attribute_Declaration
-                            and then
-                            (Tree.Name_Of (Current_Node) = Name_Source_Files
-                              or else Tree.Name_Of (Current_Node) =
-                                                Name_Source_List_File
-                               or else Tree.Name_Of (Current_Node) =
-                               Name_Source_Dirs))
-                        or else
-                        (Kind_Of (Current_Node) = N_Package_Declaration
-                           and then Tree.Name_Of (Current_Node) = Name_Naming)
-                      then
-                         if Previous = Empty_Node then
-                            Set_First_Declarative_Item_Of
-                              (Project_Declaration_Of (Project_Node),
-                               To => Next_Declarative_Item (Declaration));
- 
-                         else
-                            Set_Next_Declarative_Item
-                              (Previous,
-                               To => Next_Declarative_Item (Declaration));
-                         end if;
- 
-                      else
-                         Previous := Declaration;
-                      end if;
- 
-                      Declaration := Next_Declarative_Item (Declaration);
-                   end loop;
-                end;
-             end if;
-          end if;
- 
           --  If there were no already existing project file, or if the parsing
           --  was unsuccessful, create an empty project node with the correct
           --  name and its project declaration node.
--- 966,971 ----
*************** package body Prj.Makr is
*** 1142,1148 ****
                 Write_A_String ("pragma Source_File_Name");
                 Write_Eol;
                 Write_A_String ("  (");
!                Write_A_String (SFN_Pragmas.Table (Index).Unit.all);
                 Write_A_String (",");
                 Write_Eol;
  
--- 1305,1312 ----
                 Write_A_String ("pragma Source_File_Name");
                 Write_Eol;
                 Write_A_String ("  (");
!                Write_A_String
!                  (Get_Name_String (SFN_Pragmas.Table (Index).Unit));
                 Write_A_String (",");
                 Write_Eol;
  
*************** package body Prj.Makr is
*** 1153,1160 ****
                    Write_A_String ("   Body_File_Name => """);
                 end if;
  
!                Write_A_String (SFN_Pragmas.Table (Index).File.all);
!                Write_A_String (""");");
                 Write_Eol;
              end loop;
  
--- 1317,1333 ----
                    Write_A_String ("   Body_File_Name => """);
                 end if;
  
!                Write_A_String
!                  (Get_Name_String (SFN_Pragmas.Table (Index).File));
! 
!                Write_A_String ("""");
! 
!                if SFN_Pragmas.Table (Index).Index /= 0 then
!                   Write_A_String (", Index =>");
!                   Write_A_String (SFN_Pragmas.Table (Index).Index'Img);
!                end if;
! 
!                Write_A_String (");");
                 Write_Eol;
              end loop;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/prj-nmsc.adb gcc-4.0.0/gcc/ada/prj-nmsc.adb
*** gcc-3.4.3/gcc/ada/prj-nmsc.adb	Mon Jan  5 15:20:45 2004
--- gcc-4.0.0/gcc/ada/prj-nmsc.adb	Wed Dec  8 11:25:43 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2000-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2000-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Prj.Err;
*** 38,43 ****
--- 38,44 ----
  with Prj.Util; use Prj.Util;
  with Sinput.P;
  with Snames;   use Snames;
+ with Table;    use Table;
  with Types;    use Types;
  
  with Ada.Characters.Handling;    use Ada.Characters.Handling;
*************** with GNAT.HTable;
*** 52,60 ****
  
  package body Prj.Nmsc is
  
!    Error_Report    : Put_Line_Access := null;
  
!    ALI_Suffix : constant String := ".ali";
  
     type Name_Location is record
        Name     : Name_Id;
--- 53,66 ----
  
  package body Prj.Nmsc is
  
!    Error_Report : Put_Line_Access := null;
!    --  Set to point to error reporting procedure
  
!    ALI_Suffix   : constant String := ".ali";
!    --  File suffix for ali files
! 
!    Object_Suffix : constant String := Get_Object_Suffix.all;
!    --  File suffix for object files
  
     type Name_Location is record
        Name     : Name_Id;
*************** package body Prj.Nmsc is
*** 63,70 ****
     end record;
     --  Information about file names found in string list attribute
     --  Source_Files or in a source list file, stored in hash table
!    --  Source_Names, used by procedure
!    --  Ada_Check.Get_Path_Names_And_Record_Sources.
  
     No_Name_Location : constant Name_Location :=
       (Name => No_Name, Location => No_Location, Found => False);
--- 69,75 ----
     end record;
     --  Information about file names found in string list attribute
     --  Source_Files or in a source list file, stored in hash table
!    --  Source_Names, used by procedure Get_Path_Names_And_Record_Sources.
  
     No_Name_Location : constant Name_Location :=
       (Name => No_Name, Location => No_Location, Found => False);
*************** package body Prj.Nmsc is
*** 78,85 ****
        Equal      => "=");
     --  Hash table to store file names found in string list attribute
     --  Source_Files or in a source list file, stored in hash table
!    --  Source_Names, used by procedure
!    --  Ada_Check.Get_Path_Names_And_Record_Sources.
  
     package Recursive_Dirs is new GNAT.HTable.Simple_HTable
       (Header_Num => Header_Num,
--- 83,89 ----
        Equal      => "=");
     --  Hash table to store file names found in string list attribute
     --  Source_Files or in a source list file, stored in hash table
!    --  Source_Names, used by procedure Get_Path_Names_And_Record_Sources.
  
     package Recursive_Dirs is new GNAT.HTable.Simple_HTable
       (Header_Num => Header_Num,
*************** package body Prj.Nmsc is
*** 92,109 ****
     --  several times, and to avoid cycles that may be introduced by symbolic
     --  links.
  
!    function ALI_File_Name (Source : String) return String;
!    --  Return the ALI file name corresponding to a source.
  
!    procedure Check_Ada_Naming_Scheme
!      (Project : Project_Id;
!       Naming  : Naming_Data);
!    --  Check that the package Naming is correct.
  
     procedure Check_Ada_Name
       (Name : String;
        Unit : out Name_Id);
!    --  Check that a name is a valid Ada unit name.
  
     procedure Error_Msg
       (Project       : Project_Id;
--- 96,216 ----
     --  several times, and to avoid cycles that may be introduced by symbolic
     --  links.
  
!    type Ada_Naming_Exception_Id is new Nat;
!    No_Ada_Naming_Exception : constant Ada_Naming_Exception_Id := 0;
  
!    type Unit_Info is record
!       Kind : Spec_Or_Body;
!       Unit : Name_Id;
!       Next : Ada_Naming_Exception_Id := No_Ada_Naming_Exception;
!    end record;
!    --  No_Unit : constant Unit_Info :=
!    --              (Specification, No_Name, No_Ada_Naming_Exception);
! 
!    package Ada_Naming_Exception_Table is new Table.Table
!      (Table_Component_Type => Unit_Info,
!       Table_Index_Type     => Ada_Naming_Exception_Id,
!       Table_Low_Bound      => 1,
!       Table_Initial        => 20,
!       Table_Increment      => 100,
!       Table_Name           => "Prj.Nmsc.Ada_Naming_Exception_Table");
! 
!    package Ada_Naming_Exceptions is new GNAT.HTable.Simple_HTable
!      (Header_Num => Header_Num,
!       Element    => Ada_Naming_Exception_Id,
!       No_Element => No_Ada_Naming_Exception,
!       Key        => Name_Id,
!       Hash       => Hash,
!       Equal      => "=");
!    --  A hash table to store naming exceptions for Ada. For each file name
!    --  there is one or several unit in table Ada_Naming_Exception_Table.
! 
!    function Hash (Unit : Unit_Info) return Header_Num;
! 
!    type Name_And_Index is record
!       Name  : Name_Id := No_Name;
!       Index : Int     := 0;
!    end record;
!    No_Name_And_Index : constant Name_And_Index :=
!                          (Name => No_Name, Index => 0);
! 
!    package Reverse_Ada_Naming_Exceptions is new GNAT.HTable.Simple_HTable
!      (Header_Num => Header_Num,
!       Element    => Name_And_Index,
!       No_Element => No_Name_And_Index,
!       Key        => Unit_Info,
!       Hash       => Hash,
!       Equal      => "=");
!    --  A table to check if a unit with an exceptional name will hide
!    --  a source with a file name following the naming convention.
! 
!    function ALI_File_Name (Source : String) return String;
!    --  Return the ALI file name corresponding to a source
  
     procedure Check_Ada_Name
       (Name : String;
        Unit : out Name_Id);
!    --  Check that a name is a valid Ada unit name
! 
!    procedure Check_Naming_Scheme
!      (Data    : in out Project_Data;
!       Project : Project_Id);
!    --  Check the naming scheme part of Data
! 
!    procedure Check_Ada_Naming_Scheme_Validity
!      (Project : Project_Id;
!       Naming  : Naming_Data);
!    --  Check that the package Naming is correct
! 
!    procedure Check_For_Source
!      (File_Name        : Name_Id;
!       Path_Name        : Name_Id;
!       Project          : Project_Id;
!       Data             : in out Project_Data;
!       Location         : Source_Ptr;
!       Language         : Language_Index;
!       Suffix           : String;
!       Naming_Exception : Boolean);
!    --  Check if a file in a source directory is a source for a specific
!    --  language other than Ada. Comments required for parameters ???
! 
!    procedure Check_If_Externally_Built
!      (Project : Project_Id;
!       Data    : in out Project_Data);
!    --  ??? comment required
! 
!    procedure Check_Library_Attributes
!      (Project   : Project_Id;
!       Data      : in out Project_Data);
!    --  ??? comment required
! 
!    procedure Check_Package_Naming
!      (Project : Project_Id;
!       Data    : in out Project_Data);
!    --  ??? comment required
! 
!    procedure Check_Programming_Languages (Data : in out Project_Data);
!    --  ??? comment required
! 
!    function Check_Project
!      (P            : Project_Id;
!       Root_Project : Project_Id;
!       Extending    : Boolean) return Boolean;
!    --  Returns True if P is Root_Project or, if Extending is True, a project
!    --  extended by Root_Project.
! 
!    procedure Check_Stand_Alone_Library
!      (Project   : Project_Id;
!       Data      : in out Project_Data;
!       Extending : Boolean);
! 
!    function Compute_Directory_Last (Dir : String) return Natural;
!    --  Return the index of the last significant character in Dir. This is used
!    --  to avoid duplicates '/' at the end of directory names
! 
!    function Body_Suffix_Of
!      (Language : Language_Index; In_Project : Project_Data)
!       return String;
  
     procedure Error_Msg
       (Project       : Project_Id;
*************** package body Prj.Nmsc is
*** 113,127 ****
     --  Prj.Err.Error_Msg. Otherwise, disregard Flag_Location and use
     --  Error_Report.
  
     procedure Get_Unit
       (Canonical_File_Name : Name_Id;
        Naming              : Naming_Data;
        Unit_Name           : out Name_Id;
        Unit_Kind           : out Spec_Or_Body;
        Needs_Pragma        : out Boolean);
     --  Find out, from a file name, the unit name, the unit kind and if a
     --  specific SFN pragma is needed. If the file name corresponds to no
!    --  unit, then Unit_Name will be No_Name.
  
     function Is_Illegal_Suffix
       (Suffix                          : String;
--- 220,265 ----
     --  Prj.Err.Error_Msg. Otherwise, disregard Flag_Location and use
     --  Error_Report.
  
+    procedure Find_Sources
+      (Project      : Project_Id;
+       Data         : in out Project_Data;
+       For_Language : Language_Index;
+       Follow_Links : Boolean := False);
+    --  Find all the sources in all of the source directories of a project for
+    --  a specified language.
+ 
+    procedure Free_Ada_Naming_Exceptions;
+    --  Free the internal hash tables used for checking naming exceptions
+ 
+    procedure Get_Directories
+      (Project : Project_Id;
+       Data    : in out Project_Data);
+    --  Get the object directory, the exec directory and the source directories
+    --  of a project.
+ 
+    procedure Get_Mains (Project : Project_Id; Data : in out Project_Data);
+    --  Get the mains of a project from attribute Main, if it exists, and put
+    --  them in the project data.
+ 
+    procedure Get_Sources_From_File
+      (Path     : String;
+       Location : Source_Ptr;
+       Project  : Project_Id);
+    --  Get the list of sources from a text file and put them in hash table
+    --  Source_Names.
+ 
     procedure Get_Unit
       (Canonical_File_Name : Name_Id;
        Naming              : Naming_Data;
+       Exception_Id        : out Ada_Naming_Exception_Id;
        Unit_Name           : out Name_Id;
        Unit_Kind           : out Spec_Or_Body;
        Needs_Pragma        : out Boolean);
     --  Find out, from a file name, the unit name, the unit kind and if a
     --  specific SFN pragma is needed. If the file name corresponds to no
!    --  unit, then Unit_Name will be No_Name. If the file is a multi-unit source
!    --  or an exception to the naming scheme, then Exception_Id is set to
!    --  the unit or units that the source contains.
  
     function Is_Illegal_Suffix
       (Suffix                          : String;
*************** package body Prj.Nmsc is
*** 129,155 ****
     --  Returns True if the string Suffix cannot be used as
     --  a spec suffix, a body suffix or a separate suffix.
  
-    procedure Record_Source
-      (File_Name       : Name_Id;
-       Path_Name       : Name_Id;
-       Project         : Project_Id;
-       Data            : in out Project_Data;
-       Location        : Source_Ptr;
-       Current_Source  : in out String_List_Id;
-       Source_Recorded : in out Boolean);
-    --  Put a unit in the list of units of a project, if the file name
-    --  corresponds to a valid unit name.
- 
-    procedure Show_Source_Dirs (Project : Project_Id);
-    --  List all the source directories of a project.
- 
     procedure Locate_Directory
       (Name    : Name_Id;
        Parent  : Name_Id;
        Dir     : out Name_Id;
        Display : out Name_Id);
!    --  Locate a directory.
!    --  Returns No_Name if directory does not exist.
  
     function Path_Name_Of
       (File_Name : Name_Id;
--- 267,288 ----
     --  Returns True if the string Suffix cannot be used as
     --  a spec suffix, a body suffix or a separate suffix.
  
     procedure Locate_Directory
       (Name    : Name_Id;
        Parent  : Name_Id;
        Dir     : out Name_Id;
        Display : out Name_Id);
!    --  Locate a directory (returns No_Name for Dir and Display if directory
!    --  does not exist). Name is the directory name. Parent is the root
!    --  directory, if Name is a relative path name. Dir is the canonical case
!    --  path name of the directory, Display is the directory path name for
!    --  display purposes.
! 
!    procedure Look_For_Sources
!      (Project      : Project_Id;
!       Data         : in out Project_Data;
!       Follow_Links : Boolean);
!    --  Comment required ???
  
     function Path_Name_Of
       (File_Name : Name_Id;
*************** package body Prj.Nmsc is
*** 157,278 ****
     --  Returns the path name of a (non project) file.
     --  Returns an empty string if file cannot be found.
  
     function Project_Extends
       (Extending : Project_Id;
        Extended  : Project_Id) return Boolean;
!    --  Returns True if Extending is extending directly or indirectly Extended.
  
!    procedure Check_Naming_Scheme
!      (Data    : in out Project_Data;
!       Project : Project_Id);
!    --  Check the naming scheme part of Data
  
!    type Unit_Info is record
!       Kind : Spec_Or_Body;
!       Unit : Name_Id;
!    end record;
!    No_Unit : constant Unit_Info := (Specification, No_Name);
  
!    package Naming_Exceptions is new GNAT.HTable.Simple_HTable
!      (Header_Num => Header_Num,
!       Element    => Unit_Info,
!       No_Element => No_Unit,
!       Key        => Name_Id,
!       Hash       => Hash,
!       Equal      => "=");
  
!    function Hash (Unit : Unit_Info) return Header_Num;
  
!    package Reverse_Naming_Exceptions is new GNAT.HTable.Simple_HTable
!      (Header_Num => Header_Num,
!       Element    => Name_Id,
!       No_Element => No_Name,
!       Key        => Unit_Info,
!       Hash       => Hash,
!       Equal      => "=");
!    --  A table to check if a unit with an exceptional name will hide
!    --  a source with a file name following the naming convention.
  
!    procedure Prepare_Naming_Exceptions
!      (List : Array_Element_Id;
!       Kind : Spec_Or_Body);
!    --  Prepare the internal hash tables used for checking naming exceptions.
!    --  Insert all elements of List in the tables.
  
!    procedure Free_Naming_Exceptions;
!    --  Free the internal hash tables used for checking naming exceptions
  
!    function Compute_Directory_Last (Dir : String) return Natural;
!    --  Return the index of the last significant character in Dir. This is used
!    --  to avoid duplicates '/' at the end of directory names
  
!    ----------------------------
!    -- Compute_Directory_Last --
!    ----------------------------
  
-    function Compute_Directory_Last (Dir : String) return Natural is
     begin
!       if Dir'Length > 1
!         and then (Dir (Dir'Last - 1) = Directory_Separator
!                   or else Dir (Dir'Last - 1) = '/')
!       then
!          return Dir'Last - 1;
!       else
!          return Dir'Last;
        end if;
-    end Compute_Directory_Last;
  
  
!    -------------------------------
!    -- Prepare_Naming_Exceptions --
!    -------------------------------
  
!    procedure Prepare_Naming_Exceptions
!      (List : Array_Element_Id;
!       Kind : Spec_Or_Body)
     is
!       Current : Array_Element_Id := List;
!       Element : Array_Element;
  
     begin
!       while Current /= No_Array_Element loop
!          Element := Array_Elements.Table (Current);
  
!          if Element.Index /= No_Name then
!             Naming_Exceptions.Set
!               (Element.Value.Value,
!                (Kind => Kind, Unit => Element.Index));
!             Reverse_Naming_Exceptions.Set
!               ((Kind => Kind, Unit => Element.Index),
!                Element.Value.Value);
           end if;
  
!          Current := Element.Next;
        end loop;
-    end Prepare_Naming_Exceptions;
  
!    ----------
!    -- Hash --
!    ----------
  
!    function Hash (Unit : Unit_Info) return Header_Num is
     begin
!       return Header_Num (Unit.Unit mod 2048);
!    end Hash;
  
!    ----------------------------
!    -- Free_Naming_Exceptions --
!    ----------------------------
  
-    procedure Free_Naming_Exceptions is
     begin
!       Naming_Exceptions.Reset;
!       Reverse_Naming_Exceptions.Reset;
!    end Free_Naming_Exceptions;
  
!    -------------------------
     -- Check_Naming_Scheme --
!    -------------------------
  
     procedure Check_Naming_Scheme
       (Data    : in out Project_Data;
--- 290,1008 ----
     --  Returns the path name of a (non project) file.
     --  Returns an empty string if file cannot be found.
  
+    procedure Prepare_Ada_Naming_Exceptions
+      (List : Array_Element_Id;
+       Kind : Spec_Or_Body);
+    --  Prepare the internal hash tables used for checking naming exceptions
+    --  for Ada. Insert all elements of List in the tables.
+ 
     function Project_Extends
       (Extending : Project_Id;
        Extended  : Project_Id) return Boolean;
!    --  Returns True if Extending is extending Extended either directly or
!    --  indirectly.
  
!    procedure Record_Ada_Source
!      (File_Name       : Name_Id;
!       Path_Name       : Name_Id;
!       Project         : Project_Id;
!       Data            : in out Project_Data;
!       Location        : Source_Ptr;
!       Current_Source  : in out String_List_Id;
!       Source_Recorded : in out Boolean;
!       Follow_Links    : Boolean);
!    --  Put a unit in the list of units of a project, if the file name
!    --  corresponds to a valid unit name.
  
!    procedure Record_Other_Sources
!      (Project           : Project_Id;
!       Data              : in out Project_Data;
!       Language          : Language_Index;
!       Naming_Exceptions : Boolean);
!    --  Record the sources of a language in a project.
!    --  When Naming_Exceptions is True, mark the found sources as such, to
!    --  later remove those that are not named in a list of sources.
  
!    procedure Show_Source_Dirs (Project : Project_Id);
!    --  List all the source directories of a project
  
!    function Suffix_For
!      (Language : Language_Index;
!       Naming   : Naming_Data) return Name_Id;
!    --  Get the suffix for the source of a language from a package naming.
!    --  If not specified, return the default for the language.
  
!    procedure Warn_If_Not_Sources
!      (Project     : Project_Id;
!       Conventions : Array_Element_Id;
!       Specs       : Boolean;
!       Extending   : Boolean);
!    --  Check that individual naming conventions apply to immediate
!    --  sources of the project; if not, issue a warning.
  
!    -------------------
!    -- ALI_File_Name --
!    -------------------
  
!    function ALI_File_Name (Source : String) return String is
!    begin
!       --  If the source name has an extension, then replace it with
!       --  the ALI suffix.
  
!       for Index in reverse Source'First + 1 .. Source'Last loop
!          if Source (Index) = '.' then
!             return Source (Source'First .. Index - 1) & ALI_Suffix;
!          end if;
!       end loop;
  
!       --  If there is no dot, or if it is the first character, just add the
!       --  ALI suffix.
! 
!       return Source & ALI_Suffix;
!    end ALI_File_Name;
! 
!    -----------
!    -- Check --
!    -----------
! 
!    procedure Check
!      (Project      : Project_Id;
!       Report_Error : Put_Line_Access;
!       Follow_Links : Boolean)
!    is
!       Data         : Project_Data := Projects.Table (Project);
! 
!       Extending    : Boolean := False;
  
     begin
!       Error_Report := Report_Error;
! 
!       Recursive_Dirs.Reset;
! 
!       --  Object, exec and source directories
! 
!       Get_Directories (Project, Data);
! 
!       --  Get the programming languages
! 
!       Check_Programming_Languages (Data);
! 
!       --  Library attributes
! 
!       Check_Library_Attributes (Project, Data);
! 
!       Check_If_Externally_Built (Project, Data);
! 
!       if Current_Verbosity = High then
!          Show_Source_Dirs (Project);
        end if;
  
+       Check_Package_Naming (Project, Data);
  
!       Extending := Data.Extends /= No_Project;
  
!       Check_Naming_Scheme (Data, Project);
! 
!       Prepare_Ada_Naming_Exceptions (Data.Naming.Bodies, Body_Part);
!       Prepare_Ada_Naming_Exceptions (Data.Naming.Specs,  Specification);
! 
!       --  Find the sources
! 
!       if Data.Source_Dirs /= Nil_String then
!          Look_For_Sources (Project, Data, Follow_Links);
!       end if;
! 
!       if Data.Ada_Sources_Present then
! 
!          --  Check that all individual naming conventions apply to sources of
!          --  this project file.
! 
!          Warn_If_Not_Sources
!            (Project, Data.Naming.Bodies,
!             Specs     => False,
!             Extending => Extending);
!          Warn_If_Not_Sources
!            (Project, Data.Naming.Specs,
!             Specs     => True,
!             Extending => Extending);
!       end if;
! 
! 
!       --  If it is a library project file, check if it is a standalone library
! 
!       if Data.Library then
!          Check_Stand_Alone_Library (Project, Data, Extending);
!       end if;
! 
!       --  Put the list of Mains, if any, in the project data
! 
!       Get_Mains (Project, Data);
! 
!       --  Update the project data in the Projects table
! 
!       Projects.Table (Project) := Data;
! 
!       Free_Ada_Naming_Exceptions;
!    end Check;
! 
!    --------------------
!    -- Check_Ada_Name --
!    --------------------
! 
!    procedure Check_Ada_Name
!      (Name : String;
!       Unit : out Name_Id)
     is
!       The_Name        : String := Name;
!       Real_Name       : Name_Id;
!       Need_Letter     : Boolean := True;
!       Last_Underscore : Boolean := False;
!       OK              : Boolean := The_Name'Length > 0;
  
     begin
!       To_Lower (The_Name);
  
!       Name_Len := The_Name'Length;
!       Name_Buffer (1 .. Name_Len) := The_Name;
!       Real_Name := Name_Find;
! 
!       --  Check first that the given name is not an Ada reserved word
! 
!       if Get_Name_Table_Byte (Real_Name) /= 0
!         and then Real_Name /= Name_Project
!         and then Real_Name /= Name_Extends
!         and then Real_Name /= Name_External
!       then
!          Unit := No_Name;
! 
!          if Current_Verbosity = High then
!             Write_Str (The_Name);
!             Write_Line (" is an Ada reserved word.");
           end if;
  
!          return;
!       end if;
! 
!       for Index in The_Name'Range loop
!          if Need_Letter then
! 
!             --  We need a letter (at the beginning, and following a dot),
!             --  but we don't have one.
! 
!             if Is_Letter (The_Name (Index)) then
!                Need_Letter := False;
! 
!             else
!                OK := False;
! 
!                if Current_Verbosity = High then
!                   Write_Int  (Types.Int (Index));
!                   Write_Str  (": '");
!                   Write_Char (The_Name (Index));
!                   Write_Line ("' is not a letter.");
!                end if;
! 
!                exit;
!             end if;
! 
!          elsif Last_Underscore
!            and then (The_Name (Index) = '_' or else The_Name (Index) = '.')
!          then
!             --  Two underscores are illegal, and a dot cannot follow
!             --  an underscore.
! 
!             OK := False;
! 
!             if Current_Verbosity = High then
!                Write_Int  (Types.Int (Index));
!                Write_Str  (": '");
!                Write_Char (The_Name (Index));
!                Write_Line ("' is illegal here.");
!             end if;
! 
!             exit;
! 
!          elsif The_Name (Index) = '.' then
! 
!             --  We need a letter after a dot
! 
!             Need_Letter := True;
! 
!          elsif The_Name (Index) = '_' then
!             Last_Underscore := True;
! 
!          else
!             --  We need an letter or a digit
! 
!             Last_Underscore := False;
! 
!             if not Is_Alphanumeric (The_Name (Index)) then
!                OK := False;
! 
!                if Current_Verbosity = High then
!                   Write_Int  (Types.Int (Index));
!                   Write_Str  (": '");
!                   Write_Char (The_Name (Index));
!                   Write_Line ("' is not alphanumeric.");
!                end if;
! 
!                exit;
!             end if;
!          end if;
        end loop;
  
!       --  Cannot end with an underscore or a dot
  
!       OK := OK and then not Need_Letter and then not Last_Underscore;
! 
!       if OK then
!          Unit := Real_Name;
! 
!       else
!          --  Signal a problem with No_Name
! 
!          Unit := No_Name;
!       end if;
!    end Check_Ada_Name;
! 
!    --------------------------------------
!    -- Check_Ada_Naming_Scheme_Validity --
!    --------------------------------------
! 
!    procedure Check_Ada_Naming_Scheme_Validity
!      (Project : Project_Id;
!       Naming  : Naming_Data)
!    is
     begin
!       --  Only check if we are not using the standard naming scheme
  
!       if Naming /= Standard_Naming_Data then
!          declare
!             Dot_Replacement       : constant String :=
!                                      Get_Name_String
!                                        (Naming.Dot_Replacement);
! 
!             Spec_Suffix : constant String :=
!                                      Get_Name_String
!                                        (Naming.Ada_Spec_Suffix);
! 
!             Body_Suffix : constant String :=
!                                      Get_Name_String
!                                        (Naming.Ada_Body_Suffix);
! 
!             Separate_Suffix       : constant String :=
!                                      Get_Name_String
!                                        (Naming.Separate_Suffix);
! 
!          begin
!             --  Dot_Replacement cannot
!             --   - be empty
!             --   - start or end with an alphanumeric
!             --   - be a single '_'
!             --   - start with an '_' followed by an alphanumeric
!             --   - contain a '.' except if it is "."
! 
!             if Dot_Replacement'Length = 0
!               or else Is_Alphanumeric
!                         (Dot_Replacement (Dot_Replacement'First))
!               or else Is_Alphanumeric
!                         (Dot_Replacement (Dot_Replacement'Last))
!               or else (Dot_Replacement (Dot_Replacement'First) = '_'
!                         and then
!                         (Dot_Replacement'Length = 1
!                           or else
!                            Is_Alphanumeric
!                              (Dot_Replacement (Dot_Replacement'First + 1))))
!               or else (Dot_Replacement'Length > 1
!                          and then
!                            Index (Source => Dot_Replacement,
!                                   Pattern => ".") /= 0)
!             then
!                Error_Msg
!                  (Project,
!                   '"' & Dot_Replacement &
!                   """ is illegal for Dot_Replacement.",
!                   Naming.Dot_Repl_Loc);
!             end if;
! 
!             --  Suffixes cannot
!             --   - be empty
! 
!             if Is_Illegal_Suffix
!                  (Spec_Suffix, Dot_Replacement = ".")
!             then
!                Err_Vars.Error_Msg_Name_1 := Naming.Ada_Spec_Suffix;
!                Error_Msg
!                  (Project,
!                   "{ is illegal for Spec_Suffix",
!                   Naming.Spec_Suffix_Loc);
!             end if;
! 
!             if Is_Illegal_Suffix
!                  (Body_Suffix, Dot_Replacement = ".")
!             then
!                Err_Vars.Error_Msg_Name_1 := Naming.Ada_Body_Suffix;
!                Error_Msg
!                  (Project,
!                   "{ is illegal for Body_Suffix",
!                   Naming.Body_Suffix_Loc);
!             end if;
! 
!             if Body_Suffix /= Separate_Suffix then
!                if Is_Illegal_Suffix
!                     (Separate_Suffix, Dot_Replacement = ".")
!                then
!                   Err_Vars.Error_Msg_Name_1 := Naming.Separate_Suffix;
!                   Error_Msg
!                     (Project,
!                      "{ is illegal for Separate_Suffix",
!                      Naming.Sep_Suffix_Loc);
!                end if;
!             end if;
! 
!             --  Spec_Suffix cannot have the same termination as
!             --  Body_Suffix or Separate_Suffix
! 
!             if Spec_Suffix'Length <= Body_Suffix'Length
!               and then
!                 Body_Suffix (Body_Suffix'Last -
!                              Spec_Suffix'Length + 1 ..
!                              Body_Suffix'Last) = Spec_Suffix
!             then
!                Error_Msg
!                  (Project,
!                   "Body_Suffix (""" &
!                   Body_Suffix &
!                   """) cannot end with" &
!                   " Spec_Suffix  (""" &
!                   Spec_Suffix & """).",
!                   Naming.Body_Suffix_Loc);
!             end if;
! 
!             if Body_Suffix /= Separate_Suffix
!               and then Spec_Suffix'Length <= Separate_Suffix'Length
!               and then
!                 Separate_Suffix
!                   (Separate_Suffix'Last - Spec_Suffix'Length + 1
!                     ..
!                    Separate_Suffix'Last) = Spec_Suffix
!             then
!                Error_Msg
!                  (Project,
!                   "Separate_Suffix (""" &
!                   Separate_Suffix &
!                   """) cannot end with" &
!                   " Spec_Suffix (""" &
!                   Spec_Suffix & """).",
!                   Naming.Sep_Suffix_Loc);
!             end if;
!          end;
!       end if;
!    end Check_Ada_Naming_Scheme_Validity;
! 
!    ----------------------
!    -- Check_For_Source --
!    ----------------------
! 
!    procedure Check_For_Source
!      (File_Name        : Name_Id;
!       Path_Name        : Name_Id;
!       Project          : Project_Id;
!       Data             : in out Project_Data;
!       Location         : Source_Ptr;
!       Language         : Language_Index;
!       Suffix           : String;
!       Naming_Exception : Boolean)
!    is
!       Name : String := Get_Name_String (File_Name);
!       Real_Location : Source_Ptr := Location;
  
     begin
!       Canonical_Case_File_Name (Name);
  
!       --  A file is a source of a language if Naming_Exception is True (case
!       --  of naming exceptions) or if its file name ends with the suffix.
! 
!       if Naming_Exception or else
!         (Name'Length > Suffix'Length and then
!          Name (Name'Last - Suffix'Length + 1 .. Name'Last) = Suffix)
!       then
!          if Real_Location = No_Location then
!             Real_Location := Data.Location;
!          end if;
! 
!          declare
!             Path : String := Get_Name_String (Path_Name);
! 
!             Path_Id : Name_Id;
!             --  The path name id (in canonical case)
! 
!             File_Id : Name_Id;
!             --  The file name id (in canonical case)
! 
!             Obj_Id : Name_Id;
!             --  The object file name
! 
!             Obj_Path_Id : Name_Id;
!             --  The object path name
! 
!             Dep_Id : Name_Id;
!             --  The dependency file name
! 
!             Dep_Path_Id : Name_Id;
!             --  The dependency path name
! 
!             Dot_Pos : Natural := 0;
!             --  Position of the last dot in Name
! 
!             Source    : Other_Source;
!             Source_Id : Other_Source_Id := Data.First_Other_Source;
! 
!          begin
!             Canonical_Case_File_Name (Path);
! 
!             --  Get the file name id
! 
!             Name_Len := Name'Length;
!             Name_Buffer (1 .. Name_Len) := Name;
!             File_Id := Name_Find;
! 
!             --  Get the path name id
! 
!             Name_Len := Path'Length;
!             Name_Buffer (1 .. Name_Len) := Path;
!             Path_Id := Name_Find;
! 
!             --  Find the position of the last dot
! 
!             for J in reverse Name'Range loop
!                if Name (J) = '.' then
!                   Dot_Pos := J;
!                   exit;
!                end if;
!             end loop;
! 
!             if Dot_Pos <= Name'First then
!                Dot_Pos := Name'Last + 1;
!             end if;
! 
!             --  Compute the object file name
! 
!             Get_Name_String (File_Id);
!             Name_Len := Dot_Pos - Name'First;
! 
!             for J in Object_Suffix'Range loop
!                Name_Len := Name_Len + 1;
!                Name_Buffer (Name_Len) := Object_Suffix (J);
!             end loop;
! 
!             Obj_Id := Name_Find;
! 
!             --  Compute the object path name
! 
!             Get_Name_String (Data.Object_Directory);
! 
!             if Name_Buffer (Name_Len) /= Directory_Separator and then
!               Name_Buffer (Name_Len) /= '/'
!             then
!                Name_Len := Name_Len + 1;
!                Name_Buffer (Name_Len) := Directory_Separator;
!             end if;
! 
!             Add_Str_To_Name_Buffer (Get_Name_String (Obj_Id));
!             Obj_Path_Id := Name_Find;
! 
!             --  Compute the dependency file name
! 
!             Get_Name_String (File_Id);
!             Name_Len := Dot_Pos - Name'First + 1;
!             Name_Buffer (Name_Len) := '.';
!             Name_Len := Name_Len + 1;
!             Name_Buffer (Name_Len) := 'd';
!             Dep_Id := Name_Find;
! 
!             --  Compute the dependency path name
! 
!             Get_Name_String (Data.Object_Directory);
! 
!             if Name_Buffer (Name_Len) /= Directory_Separator and then
!               Name_Buffer (Name_Len) /= '/'
!             then
!                Name_Len := Name_Len + 1;
!                Name_Buffer (Name_Len) := Directory_Separator;
!             end if;
! 
!             Add_Str_To_Name_Buffer (Get_Name_String (Dep_Id));
!             Dep_Path_Id := Name_Find;
! 
!             --  Check if source is already in the list of source for this
!             --  project: it may have already been specified as a naming
!             --  exception for the same language or an other language, or
!             --  they may be two identical file names in different source
!             --  directories.
! 
!             while Source_Id /= No_Other_Source loop
!                Source := Other_Sources.Table (Source_Id);
!                Source_Id := Source.Next;
! 
!                if Source.File_Name = File_Id then
! 
!                   --  Two sources of different languages cannot have the same
!                   --  file name.
! 
!                   if Source.Language /= Language then
!                      Error_Msg_Name_1 := File_Name;
!                      Error_Msg
!                        (Project,
!                         "{ cannot be a source of several languages",
!                         Real_Location);
!                      return;
! 
!                   --  No problem if a file has already been specified as
!                   --  a naming exception of this language.
! 
!                   elsif Source.Path_Name = Path_Id then
! 
!                      --  Reset the naming exception flag, if this is not a
!                      --  naming exception.
! 
!                      if not Naming_Exception then
!                         Other_Sources.Table (Source_Id).Naming_Exception :=
!                           False;
!                      end if;
! 
!                      return;
! 
!                   --  There are several files with the same names, but the
!                   --  order of the source directories is known (no /**):
!                   --  only the first one encountered is kept, the other ones
!                   --  are ignored.
! 
!                   elsif Data.Known_Order_Of_Source_Dirs then
!                      return;
! 
!                   --  But it is an error if the order of the source directories
!                   --  is not known.
! 
!                   else
!                      Error_Msg_Name_1 := File_Name;
!                      Error_Msg
!                        (Project,
!                         "{ is found in several source directories",
!                         Real_Location);
!                      return;
!                   end if;
! 
!                --  Two sources with different file names cannot have the same
!                --  object file name.
! 
!                elsif Source.Object_Name = Obj_Id then
!                   Error_Msg_Name_1 := File_Id;
!                   Error_Msg_Name_2 := Source.File_Name;
!                   Error_Msg_Name_3 := Obj_Id;
!                   Error_Msg
!                        (Project,
!                         "{ and { have the same object file {",
!                         Real_Location);
!                      return;
!                end if;
!             end loop;
! 
!             if Current_Verbosity = High then
!                Write_Str ("      found ");
!                Display_Language_Name (Language);
!                Write_Str (" source """);
!                Write_Str (Get_Name_String (File_Name));
!                Write_Line ("""");
!                Write_Str ("      object path = ");
!                Write_Line (Get_Name_String (Obj_Path_Id));
!             end if;
! 
!             --  Create the Other_Source record
! 
!             Source :=
!               (Language         => Language,
!                File_Name        => File_Id,
!                Path_Name        => Path_Id,
!                Source_TS        => File_Stamp (Path_Id),
!                Object_Name      => Obj_Id,
!                Object_Path      => Obj_Path_Id,
!                Object_TS        => File_Stamp (Obj_Path_Id),
!                Dep_Name         => Dep_Id,
!                Dep_Path         => Dep_Path_Id,
!                Dep_TS           => File_Stamp (Dep_Path_Id),
!                Naming_Exception => Naming_Exception,
!                Next             => No_Other_Source);
! 
!             --  And add it to the Other_Sources table
! 
!             Other_Sources.Increment_Last;
!             Other_Sources.Table (Other_Sources.Last) := Source;
! 
!             --  There are sources of languages other than Ada in this project
! 
!             Data.Other_Sources_Present := True;
! 
!             --  And there are sources of this language in this project
! 
!             Set (Language, True, Data);
! 
!             --  Add this source to the list of sources of languages other than
!             --  Ada of the project.
! 
!             if Data.First_Other_Source = No_Other_Source then
!                Data.First_Other_Source := Other_Sources.Last;
! 
!             else
!                Other_Sources.Table (Data.Last_Other_Source).Next :=
!                  Other_Sources.Last;
!             end if;
! 
!             Data.Last_Other_Source  := Other_Sources.Last;
!          end;
!       end if;
!    end Check_For_Source;
! 
!    -------------------------------
!    -- Check_If_Externally_Built --
!    -------------------------------
! 
!    procedure Check_If_Externally_Built
!      (Project : Project_Id; Data : in out Project_Data)
!    is
!       Externally_Built : constant Variable_Value :=
!                            Util.Value_Of
!                              (Name_Externally_Built, Data.Decl.Attributes);
! 
!    begin
!       if not Externally_Built.Default then
!          Get_Name_String (Externally_Built.Value);
!          To_Lower (Name_Buffer (1 .. Name_Len));
! 
!          if Name_Buffer (1 .. Name_Len) = "true" then
!             Data.Externally_Built := True;
! 
!          elsif Name_Buffer (1 .. Name_Len) /= "false" then
!             Error_Msg (Project,
!                        "Externally_Built may only be true or false",
!                        Externally_Built.Location);
!          end if;
!       end if;
! 
!       if Current_Verbosity = High then
!          Write_Str ("Project is ");
! 
!          if not Data.Externally_Built then
!             Write_Str ("not ");
!          end if;
! 
!          Write_Line ("externally built.");
!       end if;
!    end Check_If_Externally_Built;
! 
!    -----------------------------
     -- Check_Naming_Scheme --
!    -----------------------------
  
     procedure Check_Naming_Scheme
       (Data    : in out Project_Data;
*************** package body Prj.Nmsc is
*** 284,290 ****
        Naming : Package_Element;
  
        procedure Check_Unit_Names (List : Array_Element_Id);
!       --  Check that a list of unit names contains only valid names.
  
        ----------------------
        -- Check_Unit_Names --
--- 1014,1020 ----
        Naming : Package_Element;
  
        procedure Check_Unit_Names (List : Array_Element_Id);
!       --  Check that a list of unit names contains only valid names
  
        ----------------------
        -- Check_Unit_Names --
*************** package body Prj.Nmsc is
*** 450,458 ****
                                     Get_Name_String (Casing_String.Value);
                 begin
                    declare
!                      Casing : constant Casing_Type := Value (Casing_Image);
                    begin
!                      Data.Naming.Casing := Casing;
                    end;
  
                 exception
--- 1180,1197 ----
                                     Get_Name_String (Casing_String.Value);
                 begin
                    declare
!                      Casing_Value : constant Casing_Type :=
!                                       Value (Casing_Image);
                    begin
!                      --  Ignore Casing on platforms where file names are
!                      --  case-insensitive.
! 
!                      if not File_Names_Case_Sensitive then
!                         Data.Naming.Casing := All_Lower_Case;
! 
!                      else
!                         Data.Naming.Casing := Casing_Value;
!                      end if;
                    end;
  
                 exception
*************** package body Prj.Nmsc is
*** 488,511 ****
           declare
              Ada_Spec_Suffix : constant Variable_Value :=
                                  Prj.Util.Value_Of
!                                  (Index => Name_Ada,
!                                   In_Array => Data.Naming.Spec_Suffix);
  
           begin
              if Ada_Spec_Suffix.Kind = Single
                and then Get_Name_String (Ada_Spec_Suffix.Value) /= ""
              then
!                Data.Naming.Current_Spec_Suffix := Ada_Spec_Suffix.Value;
                 Data.Naming.Spec_Suffix_Loc := Ada_Spec_Suffix.Location;
  
              else
!                Data.Naming.Current_Spec_Suffix := Default_Ada_Spec_Suffix;
              end if;
           end;
  
           if Current_Verbosity = High then
              Write_Str  ("  Spec_Suffix = """);
!             Write_Str  (Get_Name_String (Data.Naming.Current_Spec_Suffix));
              Write_Char ('"');
              Write_Eol;
           end if;
--- 1227,1253 ----
           declare
              Ada_Spec_Suffix : constant Variable_Value :=
                                  Prj.Util.Value_Of
!                                   (Index     => Name_Ada,
!                                    Src_Index => 0,
!                                    In_Array  => Data.Naming.Spec_Suffix);
  
           begin
              if Ada_Spec_Suffix.Kind = Single
                and then Get_Name_String (Ada_Spec_Suffix.Value) /= ""
              then
!                Get_Name_String (Ada_Spec_Suffix.Value);
!                Canonical_Case_File_Name (Name_Buffer (1 .. Name_Len));
!                Data.Naming.Ada_Spec_Suffix := Name_Find;
                 Data.Naming.Spec_Suffix_Loc := Ada_Spec_Suffix.Location;
  
              else
!                Data.Naming.Ada_Spec_Suffix := Default_Ada_Spec_Suffix;
              end if;
           end;
  
           if Current_Verbosity = High then
              Write_Str  ("  Spec_Suffix = """);
!             Write_Str  (Get_Name_String (Data.Naming.Ada_Spec_Suffix));
              Write_Char ('"');
              Write_Eol;
           end if;
*************** package body Prj.Nmsc is
*** 515,538 ****
           declare
              Ada_Body_Suffix : constant Variable_Value :=
                Prj.Util.Value_Of
!               (Index => Name_Ada,
!                In_Array => Data.Naming.Body_Suffix);
  
           begin
              if Ada_Body_Suffix.Kind = Single
                and then Get_Name_String (Ada_Body_Suffix.Value) /= ""
              then
!                Data.Naming.Current_Body_Suffix := Ada_Body_Suffix.Value;
                 Data.Naming.Body_Suffix_Loc := Ada_Body_Suffix.Location;
  
              else
!                Data.Naming.Current_Body_Suffix := Default_Ada_Body_Suffix;
              end if;
           end;
  
           if Current_Verbosity = High then
              Write_Str  ("  Body_Suffix = """);
!             Write_Str  (Get_Name_String (Data.Naming.Current_Body_Suffix));
              Write_Char ('"');
              Write_Eol;
           end if;
--- 1257,1283 ----
           declare
              Ada_Body_Suffix : constant Variable_Value :=
                Prj.Util.Value_Of
!                 (Index     => Name_Ada,
!                  Src_Index => 0,
!                  In_Array  => Data.Naming.Body_Suffix);
  
           begin
              if Ada_Body_Suffix.Kind = Single
                and then Get_Name_String (Ada_Body_Suffix.Value) /= ""
              then
!                Get_Name_String (Ada_Body_Suffix.Value);
!                Canonical_Case_File_Name (Name_Buffer (1 .. Name_Len));
!                Data.Naming.Ada_Body_Suffix := Name_Find;
                 Data.Naming.Body_Suffix_Loc := Ada_Body_Suffix.Location;
  
              else
!                Data.Naming.Ada_Body_Suffix := Default_Ada_Body_Suffix;
              end if;
           end;
  
           if Current_Verbosity = High then
              Write_Str  ("  Body_Suffix = """);
!             Write_Str  (Get_Name_String (Data.Naming.Ada_Body_Suffix));
              Write_Char ('"');
              Write_Eol;
           end if;
*************** package body Prj.Nmsc is
*** 548,564 ****
           begin
              if Ada_Sep_Suffix.Default then
                 Data.Naming.Separate_Suffix :=
!                  Data.Naming.Current_Body_Suffix;
  
              else
!                if Get_Name_String (Ada_Sep_Suffix.Value) = "" then
                    Error_Msg
                      (Project,
                       "Separate_Suffix cannot be empty",
                       Ada_Sep_Suffix.Location);
  
                 else
!                   Data.Naming.Separate_Suffix := Ada_Sep_Suffix.Value;
                    Data.Naming.Sep_Suffix_Loc  := Ada_Sep_Suffix.Location;
                 end if;
              end if;
--- 1293,1312 ----
           begin
              if Ada_Sep_Suffix.Default then
                 Data.Naming.Separate_Suffix :=
!                  Data.Naming.Ada_Body_Suffix;
  
              else
!                Get_Name_String (Ada_Sep_Suffix.Value);
! 
!                if Name_Len = 0 then
                    Error_Msg
                      (Project,
                       "Separate_Suffix cannot be empty",
                       Ada_Sep_Suffix.Location);
  
                 else
!                   Canonical_Case_File_Name (Name_Buffer (1 .. Name_Len));
!                   Data.Naming.Separate_Suffix := Name_Find;
                    Data.Naming.Sep_Suffix_Loc  := Ada_Sep_Suffix.Location;
                 end if;
              end if;
*************** package body Prj.Nmsc is
*** 573,2146 ****
  
           --  Check if Data.Naming is valid
  
!          Check_Ada_Naming_Scheme (Project, Data.Naming);
  
        else
!          Data.Naming.Current_Spec_Suffix := Default_Ada_Spec_Suffix;
!          Data.Naming.Current_Body_Suffix := Default_Ada_Body_Suffix;
!          Data.Naming.Separate_Suffix     := Default_Ada_Body_Suffix;
        end if;
     end Check_Naming_Scheme;
  
!    ---------------
!    -- Ada_Check --
!    ---------------
  
!    procedure Ada_Check
!      (Project      : Project_Id;
!       Report_Error : Put_Line_Access)
     is
!       Data         : Project_Data;
!       Languages    : Variable_Value := Nil_Variable_Value;
  
!       Extending    : Boolean := False;
  
!       function Check_Project (P : Project_Id) return Boolean;
!       --  Returns True if P is Project or a project extended by Project
  
!       procedure Find_Sources;
!       --  Find all the sources in all of the source directories
!       --  of a project.
  
!       procedure Get_Path_Names_And_Record_Sources;
!       --  Find the path names of the source files in the Source_Names table
!       --  in the source directories and record those that are Ada sources.
  
!       procedure Get_Sources_From_File
!         (Path     : String;
!          Location : Source_Ptr);
!       --  Get the sources of a project from a text file
  
!       procedure Warn_If_Not_Sources
!         (Conventions : Array_Element_Id;
!          Specs       : Boolean);
!       --  Check that individual naming conventions apply to immediate
!       --  sources of the project; if not, issue a warning.
  
!       -------------------
!       -- Check_Project --
!       -------------------
  
!       function Check_Project (P : Project_Id) return Boolean is
!       begin
!          if P = Project then
!             return True;
!          elsif Extending then
!             declare
!                Data : Project_Data := Projects.Table (Project);
  
!             begin
!                while Data.Extends /= No_Project loop
!                   if P = Data.Extends then
!                      return True;
                    end if;
  
!                   Data := Projects.Table (Data.Extends);
!                end loop;
!             end;
!          end if;
! 
!          return False;
!       end Check_Project;
! 
!       ------------------
!       -- Find_Sources --
!       ------------------
  
!       procedure Find_Sources is
!          Source_Dir      : String_List_Id := Data.Source_Dirs;
!          Element         : String_Element;
!          Dir             : Dir_Type;
!          Current_Source  : String_List_Id := Nil_String;
!          Source_Recorded : Boolean := False;
  
!       begin
           if Current_Verbosity = High then
!             Write_Line ("Looking for sources:");
           end if;
  
!          --  For each subdirectory
! 
!          while Source_Dir /= Nil_String loop
!             begin
!                Source_Recorded := False;
!                Element := String_Elements.Table (Source_Dir);
!                if Element.Value /= No_Name then
!                   declare
!                      Source_Directory : constant String :=
!                        Get_Name_String (Element.Value);
! 
!                   begin
!                      if Current_Verbosity = High then
!                         Write_Str ("Source_Dir = ");
!                         Write_Line (Source_Directory);
!                      end if;
! 
!                      --  We look to every entry in the source directory
  
!                      Open (Dir, Source_Directory);
  
!                      --  Canonical_Case_File_Name (Source_Directory);
  
!                      loop
!                         Read (Dir, Name_Buffer, Name_Len);
  
!                         if Current_Verbosity = High then
!                            Write_Str  ("   Checking ");
!                            Write_Line (Name_Buffer (1 .. Name_Len));
!                         end if;
  
!                         exit when Name_Len = 0;
  
!                         --  Canonical_Case_File_Name
!                         --    (Name_Buffer (1 .. Name_Len));
  
!                         declare
!                            File_Name : constant Name_Id := Name_Find;
!                            Dir       : constant String :=
!                                          Source_Directory &
!                                          Directory_Separator;
!                            Dir_Last  : constant Natural :=
!                                          Compute_Directory_Last (Dir);
!                            Path      : constant String :=
!                                   Normalize_Pathname
!                                     (Name      => Name_Buffer (1 .. Name_Len),
!                                      Directory => Dir (Dir'First .. Dir_Last));
!                            Path_Name : Name_Id;
  
!                         begin
!                            if Is_Regular_File (Path) then
  
!                               Name_Len := Path'Length;
!                               Name_Buffer (1 .. Name_Len) := Path;
!                               Path_Name := Name_Find;
  
!                               --  We attempt to register it as a source.
!                               --  However, there is no error if the file
!                               --  does not contain a valid source.
!                               --  But there is an error if we have a
!                               --  duplicate unit name.
  
!                               Record_Source
!                                 (File_Name       => File_Name,
!                                  Path_Name       => Path_Name,
!                                  Project         => Project,
!                                  Data            => Data,
!                                  Location        => No_Location,
!                                  Current_Source  => Current_Source,
!                                  Source_Recorded => Source_Recorded);
!                            end if;
!                         end;
!                      end loop;
  
!                      Close (Dir);
!                   end;
!                end if;
  
!             exception
!                when Directory_Error =>
!                   null;
!             end;
  
!             if Source_Recorded then
!                String_Elements.Table (Source_Dir).Flag := True;
              end if;
- 
-             Source_Dir := Element.Next;
-          end loop;
- 
-          if Current_Verbosity = High then
-             Write_Line ("end Looking for sources.");
           end if;
  
!          --  If we have looked for sources and found none, then
!          --  it is an error, except if it is an extending project.
!          --  If a non extending project is not supposed to contain
!          --  any source, then we never call Find_Sources.
  
!          if Data.Extends = No_Project
!            and then Current_Source = Nil_String
           then
!             Error_Msg
!               (Project,
!                "there are no Ada sources in this project",
!                Data.Location);
           end if;
-       end Find_Sources;
  
!       ---------------------------------------
!       -- Get_Path_Names_And_Record_Sources --
!       ---------------------------------------
! 
!       procedure Get_Path_Names_And_Record_Sources is
!          Source_Dir : String_List_Id := Data.Source_Dirs;
!          Element    : String_Element;
!          Path       : Name_Id;
! 
!          Dir      : Dir_Type;
!          Name     : Name_Id;
!          Canonical_Name : Name_Id;
!          Name_Str : String (1 .. 1_024);
!          Last     : Natural := 0;
!          NL       : Name_Location;
  
!          Current_Source : String_List_Id := Nil_String;
  
!          First_Error : Boolean := True;
  
!          Source_Recorded : Boolean := False;
  
!       begin
!          --  We look in all source directories for this file name
  
!          while Source_Dir /= Nil_String loop
!             Source_Recorded := False;
!             Element := String_Elements.Table (Source_Dir);
  
!             declare
!                Dir_Path : constant String := Get_Name_String (Element.Value);
!             begin
                 if Current_Verbosity = High then
!                   Write_Str ("checking directory """);
!                   Write_Str (Dir_Path);
!                   Write_Line ("""");
                 end if;
  
!                Open (Dir, Dir_Path);
! 
!                loop
!                   Read (Dir, Name_Str, Last);
!                   exit when Last = 0;
!                   Name_Len := Last;
!                   Name_Buffer (1 .. Name_Len) := Name_Str (1 .. Last);
!                   Name := Name_Find;
!                   Canonical_Case_File_Name (Name_Str (1 .. Last));
!                   Name_Len := Last;
!                   Name_Buffer (1 .. Name_Len) := Name_Str (1 .. Last);
!                   Canonical_Name := Name_Find;
!                   NL := Source_Names.Get (Canonical_Name);
! 
!                   if NL /= No_Name_Location and then not NL.Found then
!                      NL.Found := True;
!                      Source_Names.Set (Canonical_Name, NL);
!                      Name_Len := Dir_Path'Length;
!                      Name_Buffer (1 .. Name_Len) := Dir_Path;
!                      Add_Char_To_Name_Buffer (Directory_Separator);
!                      Add_Str_To_Name_Buffer (Name_Str (1 .. Last));
!                      Path := Name_Find;
  
!                      if Current_Verbosity = High then
!                         Write_Str  ("  found ");
!                         Write_Line (Get_Name_String (Name));
!                      end if;
  
!                      --  Register the source if it is an Ada compilation unit..
  
!                      Record_Source
!                        (File_Name       => Name,
!                         Path_Name       => Path,
!                         Project         => Project,
!                         Data            => Data,
!                         Location        => NL.Location,
!                         Current_Source  => Current_Source,
!                         Source_Recorded => Source_Recorded);
!                   end if;
!                end loop;
  
!                Close (Dir);
!             end;
  
!             if Source_Recorded then
!                String_Elements.Table (Source_Dir).Flag := True;
!             end if;
  
!             Source_Dir := Element.Next;
!          end loop;
  
!          --  It is an error if a source file name in a source list or
!          --  in a source list file is not found.
  
!          NL := Source_Names.Get_First;
  
!          while NL /= No_Name_Location loop
!             if not NL.Found then
!                Err_Vars.Error_Msg_Name_1 := NL.Name;
  
!                if First_Error then
!                   Error_Msg
!                     (Project,
!                      "source file { cannot be found",
!                      NL.Location);
!                   First_Error := False;
  
!                else
!                   Error_Msg
!                     (Project,
!                      "\source file { cannot be found",
!                      NL.Location);
!                end if;
              end if;
  
!             NL := Source_Names.Get_Next;
!          end loop;
!       end Get_Path_Names_And_Record_Sources;
! 
!       ---------------------------
!       -- Get_Sources_From_File --
!       ---------------------------
! 
!       procedure Get_Sources_From_File
!         (Path     : String;
!          Location : Source_Ptr)
!       is
!          File           : Prj.Util.Text_File;
!          Line           : String (1 .. 250);
!          Last           : Natural;
!          Source_Name    : Name_Id;
  
-       begin
-          if Current_Verbosity = High then
-             Write_Str  ("Opening """);
-             Write_Str  (Path);
-             Write_Line (""".");
           end if;
  
!          --  We open the file
! 
!          Prj.Util.Open (File, Path);
! 
!          if not Prj.Util.Is_Valid (File) then
!             Error_Msg (Project, "file does not exist", Location);
!          else
!             Source_Names.Reset;
  
!             while not Prj.Util.End_Of_File (File) loop
!                Prj.Util.Get_Line (File, Line, Last);
  
!                --  If the line is not empty and does not start with "--",
!                --  then it should contain a file name. However, if the
!                --  file name does not exist, it may be for another language
!                --  and we don't fail.
  
!                if Last /= 0
!                  and then (Last = 1 or else Line (1 .. 2) /= "--")
!                then
!                   Name_Len := Last;
!                   Name_Buffer (1 .. Name_Len) := Line (1 .. Last);
!                   Canonical_Case_File_Name (Name_Buffer (1 .. Name_Len));
!                   Source_Name := Name_Find;
!                   Source_Names.Set
!                     (K => Source_Name,
!                      E =>
!                        (Name     => Source_Name,
!                         Location => Location,
!                         Found    => False));
!                end if;
!             end loop;
  
!             Prj.Util.Close (File);
  
           end if;
  
!          Get_Path_Names_And_Record_Sources;
! 
!          --  We should have found at least one source.
!          --  If not, report an error.
  
!          if Data.Sources = Nil_String then
!             Error_Msg (Project,
!                        "there are no Ada sources in this project",
!                        Location);
!          end if;
!       end Get_Sources_From_File;
  
!       -------------------------
!       -- Warn_If_Not_Sources --
!       -------------------------
  
!       procedure Warn_If_Not_Sources
!         (Conventions : Array_Element_Id;
!          Specs       : Boolean)
!       is
!          Conv          : Array_Element_Id := Conventions;
!          Unit          : Name_Id;
!          The_Unit_Id   : Unit_Id;
!          The_Unit_Data : Unit_Data;
!          Location      : Source_Ptr;
  
!       begin
!          while Conv /= No_Array_Element loop
!             Unit := Array_Elements.Table (Conv).Index;
!             Error_Msg_Name_1 := Unit;
!             Get_Name_String (Unit);
!             To_Lower (Name_Buffer (1 .. Name_Len));
!             Unit := Name_Find;
!             The_Unit_Id := Units_Htable.Get (Unit);
!             Location := Array_Elements.Table (Conv).Value.Location;
  
!             if The_Unit_Id = Prj.Com.No_Unit then
!                Error_Msg
!                  (Project,
!                   "?unknown unit {",
!                   Location);
  
!             else
!                The_Unit_Data := Units.Table (The_Unit_Id);
  
!                if Specs then
!                   if not Check_Project
!                     (The_Unit_Data.File_Names (Specification).Project)
!                   then
!                      Error_Msg
!                        (Project,
!                         "?unit{ has no spec in this project",
!                         Location);
!                   end if;
  
!                else
!                   if not Check_Project
!                     (The_Unit_Data.File_Names (Com.Body_Part).Project)
!                   then
!                      Error_Msg
!                        (Project,
!                         "?unit{ has no body in this project",
!                         Location);
                    end if;
-                end if;
-             end if;
- 
-             Conv := Array_Elements.Table (Conv).Next;
-          end loop;
-       end Warn_If_Not_Sources;
- 
-    --  Start of processing for Ada_Check
- 
-    begin
-       Language_Independent_Check (Project, Report_Error);
  
!       Error_Report    := Report_Error;
  
!       Data      := Projects.Table (Project);
!       Extending := Data.Extends /= No_Project;
!       Languages := Prj.Util.Value_Of (Name_Languages, Data.Decl.Attributes);
  
!       Data.Naming.Current_Language := Name_Ada;
!       Data.Sources_Present         := Data.Source_Dirs /= Nil_String;
  
-       if not Languages.Default then
           declare
!             Current   : String_List_Id := Languages.Values;
!             Element   : String_Element;
!             Ada_Found : Boolean := False;
  
           begin
!             Look_For_Ada : while Current /= Nil_String loop
!                Element := String_Elements.Table (Current);
!                Get_Name_String (Element.Value);
!                To_Lower (Name_Buffer (1 .. Name_Len));
  
!                if Name_Buffer (1 .. Name_Len) = "ada" then
!                   Ada_Found := True;
!                   exit Look_For_Ada;
                 end if;
  
                 Current := Element.Next;
!             end loop Look_For_Ada;
! 
!             if not Ada_Found then
! 
!                --  Mark the project file as having no sources for Ada
! 
!                Data.Sources_Present := False;
!             end if;
           end;
-       end if;
- 
-       Check_Naming_Scheme (Data, Project);
- 
-       Prepare_Naming_Exceptions (Data.Naming.Bodies, Body_Part);
-       Prepare_Naming_Exceptions (Data.Naming.Specs,  Specification);
  
!       --  If we have source directories, then find the sources
  
!       if Data.Sources_Present then
!          if Data.Source_Dirs = Nil_String then
!             Data.Sources_Present := False;
  
!          else
!             declare
!                Sources : constant Variable_Value :=
!                            Util.Value_Of
!                              (Name_Source_Files,
!                               Data.Decl.Attributes);
  
!                Source_List_File : constant Variable_Value :=
!                                     Util.Value_Of
!                                       (Name_Source_List_File,
!                                        Data.Decl.Attributes);
  
!                Locally_Removed : constant Variable_Value :=
!                            Util.Value_Of
!                              (Name_Locally_Removed_Files,
!                               Data.Decl.Attributes);
  
  
!             begin
!                pragma Assert
!                  (Sources.Kind = List,
!                     "Source_Files is not a list");
  
!                pragma Assert
!                  (Source_List_File.Kind = Single,
!                     "Source_List_File is not a single string");
  
!                if not Sources.Default then
!                   if not Source_List_File.Default then
!                      Error_Msg
!                        (Project,
!                         "?both variables source_files and " &
!                         "source_list_file are present",
!                         Source_List_File.Location);
                    end if;
  
!                   --  Sources is a list of file names
  
!                   declare
!                      Current        : String_List_Id := Sources.Values;
!                      Element        : String_Element;
!                      Location       : Source_Ptr;
!                      Name           : Name_Id;
  
!                   begin
!                      Source_Names.Reset;
  
!                      Data.Sources_Present := Current /= Nil_String;
  
!                      while Current /= Nil_String loop
!                         Element := String_Elements.Table (Current);
!                         Get_Name_String (Element.Value);
!                         Canonical_Case_File_Name
!                           (Name_Buffer (1 .. Name_Len));
!                         Name := Name_Find;
  
!                         --  If the element has no location, then use the
!                         --  location of Sources to report possible errors.
  
!                         if Element.Location = No_Location then
!                            Location := Sources.Location;
  
!                         else
!                            Location := Element.Location;
!                         end if;
  
!                         Source_Names.Set
!                           (K => Name,
!                            E =>
!                              (Name     => Name,
!                               Location => Location,
!                               Found    => False));
  
!                         Current := Element.Next;
!                      end loop;
  
!                      Get_Path_Names_And_Record_Sources;
!                   end;
  
!                   --  No source_files specified.
!                   --  We check Source_List_File has been specified.
  
!                elsif not Source_List_File.Default then
  
!                   --  Source_List_File is the name of the file
!                   --  that contains the source file names
  
!                   declare
!                      Source_File_Path_Name : constant String :=
!                        Path_Name_Of
!                        (Source_List_File.Value,
!                         Data.Directory);
  
!                   begin
!                      if Source_File_Path_Name'Length = 0 then
!                         Err_Vars.Error_Msg_Name_1 := Source_List_File.Value;
!                         Error_Msg
!                           (Project,
!                            "file with sources { does not exist",
!                            Source_List_File.Location);
  
!                      else
!                         Get_Sources_From_File
!                           (Source_File_Path_Name,
!                            Source_List_File.Location);
!                      end if;
!                   end;
  
!                else
!                   --  Neither Source_Files nor Source_List_File has been
!                   --  specified.
!                   --  Find all the files that satisfy
!                   --  the naming scheme in all the source directories.
  
!                   Find_Sources;
!                end if;
  
!                --  If there are sources that are locally removed, mark them as
!                --  such in the Units table.
  
!                if not Locally_Removed.Default then
!                   --  Sources can be locally removed only in extending
!                   --  project files.
  
!                   if Data.Extends = No_Project then
!                      Error_Msg
!                        (Project,
!                         "Locally_Removed_Files can only be used " &
!                         "in an extending project file",
!                         Locally_Removed.Location);
  
!                   else
!                      declare
!                         Current        : String_List_Id :=
!                                            Locally_Removed.Values;
!                         Element        : String_Element;
!                         Location       : Source_Ptr;
!                         OK             : Boolean;
!                         Unit           : Unit_Data;
!                         Name           : Name_Id;
!                         Extended       : Project_Id;
  
!                      begin
!                         while Current /= Nil_String loop
!                            Element := String_Elements.Table (Current);
!                            Get_Name_String (Element.Value);
!                            Canonical_Case_File_Name
!                              (Name_Buffer (1 .. Name_Len));
!                            Name := Name_Find;
  
!                            --  If the element has no location, then use the
!                            --  location of Locally_Removed to report
!                            --  possible errors.
  
!                            if Element.Location = No_Location then
!                               Location := Locally_Removed.Location;
  
!                            else
!                               Location := Element.Location;
!                            end if;
  
!                            OK := False;
  
!                            for Index in 1 .. Units.Last loop
!                               Unit := Units.Table (Index);
  
!                               if
!                                 Unit.File_Names (Specification).Name = Name
!                               then
!                                  OK := True;
  
!                                  --  Check that this is from a project that
!                                  --  the current project extends, but not the
!                                  --  current project.
  
!                                  Extended := Unit.File_Names
!                                                     (Specification).Project;
  
!                                  if Extended = Project then
!                                     Error_Msg
!                                       (Project,
!                                        "cannot remove a source " &
!                                        "of the same project",
!                                        Location);
  
!                                  elsif
!                                    Project_Extends (Project, Extended)
!                                  then
!                                     Unit.File_Names
!                                       (Specification).Path := Slash;
!                                     Unit.File_Names
!                                       (Specification).Needs_Pragma := False;
!                                     Units.Table (Index) := Unit;
!                                     Add_Forbidden_File_Name
!                                       (Unit.File_Names (Specification).Name);
!                                     exit;
  
!                                  else
!                                     Error_Msg
!                                       (Project,
!                                        "cannot remove a source from " &
!                                        "another project",
!                                        Location);
!                                  end if;
  
!                               elsif
!                                 Unit.File_Names (Body_Part).Name = Name
!                               then
!                                  OK := True;
  
!                                  --  Check that this is from a project that
!                                  --  the current project extends, but not the
!                                  --  current project.
  
!                                  Extended := Unit.File_Names
!                                                     (Body_Part).Project;
  
!                                  if Extended = Project then
!                                     Error_Msg
!                                       (Project,
!                                        "cannot remove a source " &
!                                        "of the same project",
!                                        Location);
  
!                                  elsif
!                                    Project_Extends (Project, Extended)
!                                  then
!                                     Unit.File_Names (Body_Part).Path := Slash;
!                                     Unit.File_Names (Body_Part).Needs_Pragma
!                                       := False;
!                                     Units.Table (Index) := Unit;
!                                     Add_Forbidden_File_Name
!                                       (Unit.File_Names (Body_Part).Name);
!                                     exit;
!                                  end if;
  
!                               end if;
!                            end loop;
  
!                            if not OK then
!                               Err_Vars.Error_Msg_Name_1 := Name;
!                               Error_Msg (Project, "unknown file {", Location);
!                            end if;
  
!                            Current := Element.Next;
!                         end loop;
!                      end;
!                   end if;
!                end if;
!             end;
!          end if;
!       end if;
  
!       if Data.Sources_Present then
  
!          --  Check that all individual naming conventions apply to
!          --  sources of this project file.
  
!          Warn_If_Not_Sources (Data.Naming.Bodies, Specs => False);
!          Warn_If_Not_Sources (Data.Naming.Specs,  Specs => True);
!       end if;
  
!       --  If it is a library project file, check if it is a standalone library
  
!       if Data.Library then
!          Standalone_Library : declare
!             Lib_Interfaces : constant Prj.Variable_Value :=
!                                Prj.Util.Value_Of
!                                  (Snames.Name_Library_Interface,
!                                   Data.Decl.Attributes);
!             Lib_Auto_Init  : constant Prj.Variable_Value :=
!                                Prj.Util.Value_Of
!                                  (Snames.Name_Library_Auto_Init,
!                                   Data.Decl.Attributes);
  
!             Lib_Src_Dir : constant Prj.Variable_Value :=
!                             Prj.Util.Value_Of
!                               (Snames.Name_Library_Src_Dir,
!                                Data.Decl.Attributes);
  
!             Lib_Symbol_File : constant Prj.Variable_Value :=
!                                 Prj.Util.Value_Of
!                                   (Snames.Name_Library_Symbol_File,
!                                    Data.Decl.Attributes);
  
!             Lib_Symbol_Policy : constant Prj.Variable_Value :=
!                                   Prj.Util.Value_Of
!                                     (Snames.Name_Library_Symbol_Policy,
!                                      Data.Decl.Attributes);
  
!             Lib_Ref_Symbol_File : constant Prj.Variable_Value :=
!                                   Prj.Util.Value_Of
!                                     (Snames.Name_Library_Reference_Symbol_File,
!                                      Data.Decl.Attributes);
  
!             Auto_Init_Supported : constant Boolean :=
!                                     MLib.Tgt.
!                                      Standalone_Library_Auto_Init_Is_Supported;
  
!             OK : Boolean := True;
  
           begin
!             pragma Assert (Lib_Interfaces.Kind = List);
! 
!             --  It is a stand-alone library project file if attribute
!             --  Library_Interface is defined.
! 
!             if not Lib_Interfaces.Default then
!                declare
!                   Interfaces : String_List_Id := Lib_Interfaces.Values;
!                   Interface_ALIs : String_List_Id := Nil_String;
!                   Unit : Name_Id;
!                   The_Unit_Id : Unit_Id;
!                   The_Unit_Data : Unit_Data;
! 
!                   procedure Add_ALI_For (Source : Name_Id);
!                   --  Add an ALI file name to the list of Interface ALIs
  
!                   -----------------
!                   -- Add_ALI_For --
!                   -----------------
  
!                   procedure Add_ALI_For (Source : Name_Id) is
!                   begin
!                      Get_Name_String (Source);
  
!                      declare
!                         ALI : constant String :=
!                                 ALI_File_Name (Name_Buffer (1 .. Name_Len));
!                         ALI_Name_Id : Name_Id;
!                      begin
!                         Name_Len := ALI'Length;
!                         Name_Buffer (1 .. Name_Len) := ALI;
!                         ALI_Name_Id := Name_Find;
  
!                         String_Elements.Increment_Last;
!                         String_Elements.Table (String_Elements.Last) :=
!                           (Value    => ALI_Name_Id,
!                            Display_Value => No_Name,
!                            Location => String_Elements.Table
!                                                          (Interfaces).Location,
!                            Flag     => False,
!                            Next     => Interface_ALIs);
!                         Interface_ALIs := String_Elements.Last;
!                      end;
!                   end Add_ALI_For;
  
!                begin
!                   Data.Standalone_Library := True;
  
!                   --  Library_Interface cannot be an empty list
  
!                   if Interfaces = Nil_String then
                       Error_Msg
                         (Project,
!                         "Library_Interface cannot be an empty list",
!                         Lib_Interfaces.Location);
!                   end if;
! 
!                   --  Process each unit name specified in the attribute
!                   --  Library_Interface.
! 
!                   while Interfaces /= Nil_String loop
!                      Get_Name_String
!                        (String_Elements.Table (Interfaces).Value);
!                      To_Lower (Name_Buffer (1 .. Name_Len));
! 
!                      if Name_Len = 0 then
!                         Error_Msg
!                           (Project,
!                            "an interface cannot be an empty string",
!                            String_Elements.Table (Interfaces).Location);
! 
!                      else
!                         Unit := Name_Find;
!                         Error_Msg_Name_1 := Unit;
!                         The_Unit_Id := Units_Htable.Get (Unit);
  
!                         if The_Unit_Id = Prj.Com.No_Unit then
!                            Error_Msg
!                              (Project,
!                               "unknown unit {",
!                               String_Elements.Table (Interfaces).Location);
  
!                         else
!                            --  Check that the unit is part of the project
  
!                            The_Unit_Data := Units.Table (The_Unit_Id);
  
                             if The_Unit_Data.File_Names
!                                 (Com.Body_Part).Name /= No_Name
!                              and then The_Unit_Data.File_Names
!                                         (Com.Body_Part).Path /= Slash
                             then
!                               if Check_Project
!                                  (The_Unit_Data.File_Names (Body_Part).Project)
!                               then
!                                  --  There is a body for this unit.
!                                  --  If there is no spec, we need to check
!                                  --  that it is not a subunit.
! 
!                                  if The_Unit_Data.File_Names
!                                       (Specification).Name = No_Name
!                                  then
!                                     declare
!                                        Src_Ind : Source_File_Index;
  
!                                     begin
!                                        Src_Ind := Sinput.P.Load_Project_File
!                                                    (Get_Name_String
!                                                       (The_Unit_Data.File_Names
!                                                          (Body_Part).Path));
  
!                                        if Sinput.P.Source_File_Is_Subunit
!                                                      (Src_Ind)
!                                        then
!                                           Error_Msg
!                                             (Project,
!                                              "{ is a subunit; " &
!                                              "it cannot be an interface",
!                                              String_Elements.Table
!                                                (Interfaces).Location);
!                                        end if;
!                                     end;
                                   end if;
! 
!                                  --  The unit is not a subunit, so we add
!                                  --  to the Interface ALIs the ALI file
!                                  --  corresponding to the body.
! 
!                                  Add_ALI_For
!                                    (The_Unit_Data.File_Names (Body_Part).Name);
! 
!                               else
!                                  Error_Msg
!                                    (Project,
!                                     "{ is not an unit of this project",
!                                     String_Elements.Table
!                                       (Interfaces).Location);
!                               end if;
! 
!                            elsif The_Unit_Data.File_Names
!                                    (Com.Specification).Name /= No_Name
!                               and then The_Unit_Data.File_Names
!                                          (Com.Specification).Path /= Slash
!                               and then Check_Project
!                                          (The_Unit_Data.File_Names
!                                             (Specification).Project)
! 
!                            then
!                               --  The unit is part of the project, it has
!                               --  a spec, but no body. We add to the Interface
!                               --  ALIs the ALI file corresponding to the spec.
! 
!                               Add_ALI_For
!                                (The_Unit_Data.File_Names (Specification).Name);
! 
!                            else
!                               Error_Msg
!                                 (Project,
!                                  "{ is not an unit of this project",
!                                  String_Elements.Table (Interfaces).Location);
                             end if;
-                         end if;
- 
-                      end if;
- 
-                      Interfaces := String_Elements.Table (Interfaces).Next;
-                   end loop;
- 
-                   --  Put the list of Interface ALIs in the project data
- 
-                   Data.Lib_Interface_ALIs := Interface_ALIs;
- 
-                   --  Check value of attribute Library_Auto_Init and set
-                   --  Lib_Auto_Init accordingly.
- 
-                   if Lib_Auto_Init.Default then
-                      --  If no attribute Library_Auto_Init is declared, then
-                      --  set auto init only if it is supported.
- 
-                      Data.Lib_Auto_Init := Auto_Init_Supported;
- 
-                   else
-                      Get_Name_String (Lib_Auto_Init.Value);
-                      To_Lower (Name_Buffer (1 .. Name_Len));
  
!                      if Name_Buffer (1 .. Name_Len) = "false" then
!                         Data.Lib_Auto_Init := False;
  
!                      elsif Name_Buffer (1 .. Name_Len) = "true" then
!                         if Auto_Init_Supported then
!                            Data.Lib_Auto_Init := True;
  
                          else
-                            --  Library_Auto_Init cannot be "true" if auto init
-                            --  is not supported
- 
                             Error_Msg
                               (Project,
!                               "library auto init not supported " &
!                               "on this platform",
!                               Lib_Auto_Init.Location);
                          end if;
  
                       else
                          Error_Msg
                            (Project,
!                            "invalid value for attribute Library_Auto_Init",
!                            Lib_Auto_Init.Location);
                       end if;
                    end if;
-                end;
- 
-                --  If attribute Library_Src_Dir is defined and not the
-                --  empty string, check if the directory exist and is not
-                --  the object directory or one of the source directories.
-                --  This is the directory where copies of the interface
-                --  sources will be copied. Note that this directory may be
-                --  the library directory.
- 
-                if Lib_Src_Dir.Value /= Empty_String then
-                   declare
-                      Dir_Id : constant Name_Id := Lib_Src_Dir.Value;
- 
-                   begin
-                      Locate_Directory
-                        (Dir_Id, Data.Display_Directory,
-                         Data.Library_Src_Dir,
-                         Data.Display_Library_Src_Dir);
- 
-                      --  If directory does not exist, report an error
- 
-                      if Data.Library_Src_Dir = No_Name then
  
!                         --  Get the absolute name of the library directory
!                         --  that does not exist, to report an error.
! 
!                         declare
!                            Dir_Name : constant String :=
!                                         Get_Name_String (Dir_Id);
! 
!                         begin
!                            if Is_Absolute_Path (Dir_Name) then
!                               Err_Vars.Error_Msg_Name_1 := Dir_Id;
  
!                            else
!                               Get_Name_String (Data.Directory);
  
!                               if Name_Buffer (Name_Len) /=
!                                 Directory_Separator
!                               then
!                                  Name_Len := Name_Len + 1;
!                                  Name_Buffer (Name_Len) :=
!                                    Directory_Separator;
!                               end if;
  
!                               Name_Buffer
!                                 (Name_Len + 1 ..
!                                    Name_Len + Dir_Name'Length) :=
!                                   Dir_Name;
!                               Name_Len := Name_Len + Dir_Name'Length;
!                               Err_Vars.Error_Msg_Name_1 := Name_Find;
!                            end if;
  
!                            --  Report the error
  
!                            Error_Msg
!                              (Project,
!                               "Directory { does not exist",
!                               Lib_Src_Dir.Location);
!                         end;
  
!                      --  Report an error if it is the same as the object
!                      --  directory.
  
!                      elsif Data.Library_Src_Dir = Data.Object_Directory then
!                         Error_Msg
!                           (Project,
!                            "directory to copy interfaces cannot be " &
!                            "the object directory",
!                            Lib_Src_Dir.Location);
!                         Data.Library_Src_Dir := No_Name;
  
!                      --  Check if it is the same as one of the source
!                      --  directories.
  
!                      else
!                         declare
!                            Src_Dirs : String_List_Id := Data.Source_Dirs;
!                            Src_Dir  : String_Element;
  
!                         begin
!                            while Src_Dirs /= Nil_String loop
!                               Src_Dir := String_Elements.Table (Src_Dirs);
!                               Src_Dirs := Src_Dir.Next;
  
!                               --  Report an error if it is one of the
!                               --  source directories.
  
!                               if Data.Library_Src_Dir = Src_Dir.Value then
!                                  Error_Msg
!                                    (Project,
!                                     "directory to copy interfaces cannot " &
!                                     "be one of the source directories",
!                                     Lib_Src_Dir.Location);
!                                  Data.Library_Src_Dir := No_Name;
!                                  exit;
!                               end if;
!                            end loop;
!                         end;
  
!                         if Data.Library_Src_Dir /= No_Name
!                           and then Current_Verbosity = High
!                         then
!                            Write_Str ("Directory to copy interfaces =""");
!                            Write_Str (Get_Name_String (Data.Library_Dir));
!                            Write_Line ("""");
!                         end if;
!                      end if;
!                   end;
                 end if;
  
!                if not Lib_Symbol_File.Default then
!                   Data.Symbol_Data.Symbol_File := Lib_Symbol_File.Value;
  
!                   Get_Name_String (Lib_Symbol_File.Value);
  
!                   if Name_Len = 0 then
!                      Error_Msg
!                        (Project,
!                         "symbol file name cannot be an empty string",
!                         Lib_Symbol_File.Location);
  
!                   else
!                      OK := not Is_Absolute_Path (Name_Buffer (1 .. Name_Len));
  
!                      if OK then
!                         for J in 1 .. Name_Len loop
!                            if Name_Buffer (J) = '/'
!                              or else Name_Buffer (J) = Directory_Separator
!                            then
!                               OK := False;
!                               exit;
!                            end if;
!                         end loop;
!                      end if;
  
!                      if not OK then
!                         Error_Msg_Name_1 := Lib_Symbol_File.Value;
!                         Error_Msg
!                           (Project,
!                            "symbol file name { is illegal. " &
!                            "Name canot include directory info.",
!                            Lib_Symbol_File.Location);
!                      end if;
!                   end if;
!                end if;
  
-                if not Lib_Symbol_Policy.Default then
                    declare
!                      Value : constant String :=
!                                To_Lower
!                                  (Get_Name_String (Lib_Symbol_Policy.Value));
  
                    begin
!                      if Value = "autonomous" or else Value = "default" then
!                         Data.Symbol_Data.Symbol_Policy := Autonomous;
! 
!                      elsif Value = "compliant" then
!                         Data.Symbol_Data.Symbol_Policy := Compliant;
! 
!                      elsif Value = "controlled" then
!                         Data.Symbol_Data.Symbol_Policy := Controlled;
  
                       else
!                         Error_Msg
!                           (Project,
!                            "illegal value for Library_Symbol_Policy",
!                            Lib_Symbol_Policy.Location);
!                      end if;
!                   end;
!                end if;
  
!                if Lib_Ref_Symbol_File.Default then
!                   if Data.Symbol_Data.Symbol_Policy /= Autonomous then
!                      Error_Msg
!                        (Project,
!                         "a reference symbol file need to be defined",
!                         Lib_Symbol_Policy.Location);
!                   end if;
  
!                else
!                   Data.Symbol_Data.Reference := Lib_Ref_Symbol_File.Value;
  
!                   Get_Name_String (Lib_Symbol_File.Value);
  
-                   if Name_Len = 0 then
                       Error_Msg
                         (Project,
!                         "reference symbol file name cannot be an empty string",
!                         Lib_Symbol_File.Location);
  
!                   else
!                      OK := not Is_Absolute_Path (Name_Buffer (1 .. Name_Len));
  
!                      if OK then
!                         for J in 1 .. Name_Len loop
!                            if Name_Buffer (J) = '/'
!                              or else Name_Buffer (J) = Directory_Separator
!                            then
!                               OK := False;
!                               exit;
!                            end if;
!                         end loop;
!                      end if;
  
!                      if not OK then
!                         Error_Msg_Name_1 := Lib_Ref_Symbol_File.Value;
!                         Error_Msg
!                           (Project,
!                            "reference symbol file { name is illegal. " &
!                            "Name canot include directory info.",
!                            Lib_Ref_Symbol_File.Location);
!                      end if;
  
!                      if not Is_Regular_File
!                        (Get_Name_String (Data.Object_Directory) &
!                         Directory_Separator &
!                         Get_Name_String (Lib_Ref_Symbol_File.Value))
!                      then
!                         Error_Msg_Name_1 := Lib_Ref_Symbol_File.Value;
!                         Error_Msg
!                           (Project,
!                            "library reference symbol file { does not exist",
!                            Lib_Ref_Symbol_File.Location);
!                      end if;
  
!                      if Data.Symbol_Data.Symbol_File /= No_Name then
!                         declare
!                            Symbol : String :=
!                                       Get_Name_String
!                                         (Data.Symbol_Data.Symbol_File);
  
!                            Reference : String :=
!                                          Get_Name_String
!                                            (Data.Symbol_Data.Reference);
  
!                         begin
!                            Canonical_Case_File_Name (Symbol);
!                            Canonical_Case_File_Name (Reference);
  
!                            if Symbol = Reference then
!                               Error_Msg
!                                 (Project,
!                                  "reference symbol file and symbol file " &
!                                  "cannot be the same file",
!                                  Lib_Ref_Symbol_File.Location);
!                            end if;
!                         end;
!                      end if;
                    end if;
                 end if;
!             end if;
!          end Standalone_Library;
!       end if;
! 
!       --  Put the list of Mains, if any, in the project data
! 
!       declare
!          Mains : constant Variable_Value :=
!                    Prj.Util.Value_Of (Name_Main, Data.Decl.Attributes);
! 
!       begin
!          Data.Mains := Mains.Values;
! 
!          --  If no Mains were specified, and if we are an extending
!          --  project, inherit the Mains from the project we are extending.
! 
!          if Mains.Default then
!             if Data.Extends /= No_Project then
!                Data.Mains := Projects.Table (Data.Extends).Mains;
!             end if;
! 
!          --  In a library project file, Main cannot be specified
! 
!          elsif Data.Library then
!             Error_Msg
!               (Project,
!                "a library project file cannot have Main specified",
!                Mains.Location);
!          end if;
!       end;
! 
!       Projects.Table (Project) := Data;
! 
!       Free_Naming_Exceptions;
!    end Ada_Check;
! 
!    -------------------
!    -- ALI_File_Name --
!    -------------------
! 
!    function ALI_File_Name (Source : String) return String is
!    begin
!       --  If the source name has an extension, then replace it with
!       --  the ALI suffix.
! 
!       for Index in reverse Source'First + 1 .. Source'Last loop
!          if Source (Index) = '.' then
!             return Source (Source'First .. Index - 1) & ALI_Suffix;
           end if;
-       end loop;
- 
-       --  If there is no dot, or if it is the first character, just add the
-       --  ALI suffix.
  
!       return Source & ALI_Suffix;
!    end ALI_File_Name;
! 
!    --------------------
!    -- Check_Ada_Name --
!    --------------------
! 
!    procedure Check_Ada_Name
!      (Name : String;
!       Unit : out Name_Id)
!    is
!       The_Name        : String := Name;
!       Real_Name       : Name_Id;
!       Need_Letter     : Boolean := True;
!       Last_Underscore : Boolean := False;
!       OK              : Boolean := The_Name'Length > 0;
  
!    begin
!       To_Lower (The_Name);
  
!       Name_Len := The_Name'Length;
!       Name_Buffer (1 .. Name_Len) := The_Name;
!       Real_Name := Name_Find;
  
!       --  Check first that the given name is not an Ada reserved word
  
!       if Get_Name_Table_Byte (Real_Name) /= 0
!         and then Real_Name /= Name_Project
!         and then Real_Name /= Name_Extends
!         and then Real_Name /= Name_External
!       then
!          Unit := No_Name;
  
!          if Current_Verbosity = High then
!             Write_Str (The_Name);
!             Write_Line (" is an Ada reserved word.");
           end if;
  
!          return;
!       end if;
  
!       for Index in The_Name'Range loop
!          if Need_Letter then
  
!             --  We need a letter (at the beginning, and following a dot),
!             --  but we don't have one.
  
!             if Is_Letter (The_Name (Index)) then
!                Need_Letter := False;
  
              else
!                OK := False;
  
!                if Current_Verbosity = High then
!                   Write_Int  (Types.Int (Index));
!                   Write_Str  (": '");
!                   Write_Char (The_Name (Index));
!                   Write_Line ("' is not a letter.");
                 end if;
  
!                exit;
              end if;
  
!          elsif Last_Underscore
!            and then (The_Name (Index) = '_' or else The_Name (Index) = '.')
!          then
!             --  Two underscores are illegal, and a dot cannot follow
!             --  an underscore.
  
!             OK := False;
  
!             if Current_Verbosity = High then
!                Write_Int  (Types.Int (Index));
!                Write_Str  (": '");
!                Write_Char (The_Name (Index));
!                Write_Line ("' is illegal here.");
!             end if;
  
!             exit;
  
!          elsif The_Name (Index) = '.' then
  
!             --  We need a letter after a dot
  
!             Need_Letter := True;
  
!          elsif The_Name (Index) = '_' then
!             Last_Underscore := True;
  
!          else
!             --  We need an letter or a digit
  
!             Last_Underscore := False;
  
!             if not Is_Alphanumeric (The_Name (Index)) then
!                OK := False;
  
!                if Current_Verbosity = High then
!                   Write_Int  (Types.Int (Index));
!                   Write_Str  (": '");
!                   Write_Char (The_Name (Index));
!                   Write_Line ("' is not alphanumeric.");
                 end if;
- 
-                exit;
              end if;
           end if;
!       end loop;
! 
!       --  Cannot end with an underscore or a dot
! 
!       OK := OK and then not Need_Letter and then not Last_Underscore;
  
!       if OK then
!          Unit := Real_Name;
  
        else
!          --  Signal a problem with No_Name
! 
!          Unit := No_Name;
        end if;
!    end Check_Ada_Name;
  
!    -----------------------------
!    -- Check_Ada_Naming_Scheme --
!    -----------------------------
  
!    procedure Check_Ada_Naming_Scheme
!      (Project : Project_Id;
!       Naming  : Naming_Data)
     is
     begin
!       --  Only check if we are not using the standard naming scheme
! 
!       if Naming /= Standard_Naming_Data then
!          declare
!             Dot_Replacement       : constant String :=
!                                      Get_Name_String
!                                        (Naming.Dot_Replacement);
! 
!             Spec_Suffix : constant String :=
!                                      Get_Name_String
!                                        (Naming.Current_Spec_Suffix);
! 
!             Body_Suffix : constant String :=
!                                      Get_Name_String
!                                        (Naming.Current_Body_Suffix);
! 
!             Separate_Suffix       : constant String :=
!                                      Get_Name_String
!                                        (Naming.Separate_Suffix);
! 
!          begin
!             --  Dot_Replacement cannot
!             --   - be empty
!             --   - start or end with an alphanumeric
!             --   - be a single '_'
!             --   - start with an '_' followed by an alphanumeric
!             --   - contain a '.' except if it is "."
! 
!             if Dot_Replacement'Length = 0
!               or else Is_Alphanumeric
!                         (Dot_Replacement (Dot_Replacement'First))
!               or else Is_Alphanumeric
!                         (Dot_Replacement (Dot_Replacement'Last))
!               or else (Dot_Replacement (Dot_Replacement'First) = '_'
!                         and then
!                         (Dot_Replacement'Length = 1
!                           or else
!                            Is_Alphanumeric
!                              (Dot_Replacement (Dot_Replacement'First + 1))))
!               or else (Dot_Replacement'Length > 1
!                          and then
!                            Index (Source => Dot_Replacement,
!                                   Pattern => ".") /= 0)
!             then
!                Error_Msg
!                  (Project,
!                   '"' & Dot_Replacement &
!                   """ is illegal for Dot_Replacement.",
!                   Naming.Dot_Repl_Loc);
!             end if;
! 
!             --  Suffixes cannot
!             --   - be empty
! 
!             if Is_Illegal_Suffix
!                  (Spec_Suffix, Dot_Replacement = ".")
!             then
!                Err_Vars.Error_Msg_Name_1 := Naming.Current_Spec_Suffix;
!                Error_Msg
!                  (Project,
!                   "{ is illegal for Spec_Suffix",
!                   Naming.Spec_Suffix_Loc);
!             end if;
! 
!             if Is_Illegal_Suffix
!                  (Body_Suffix, Dot_Replacement = ".")
!             then
!                Err_Vars.Error_Msg_Name_1 := Naming.Current_Body_Suffix;
!                Error_Msg
!                  (Project,
!                   "{ is illegal for Body_Suffix",
!                   Naming.Body_Suffix_Loc);
!             end if;
! 
!             if Body_Suffix /= Separate_Suffix then
!                if Is_Illegal_Suffix
!                     (Separate_Suffix, Dot_Replacement = ".")
!                then
!                   Err_Vars.Error_Msg_Name_1 := Naming.Separate_Suffix;
!                   Error_Msg
!                     (Project,
!                      "{ is illegal for Separate_Suffix",
!                      Naming.Sep_Suffix_Loc);
!                end if;
!             end if;
! 
!             --  Spec_Suffix cannot have the same termination as
!             --  Body_Suffix or Separate_Suffix
! 
!             if Spec_Suffix'Length <= Body_Suffix'Length
!               and then
!                 Body_Suffix (Body_Suffix'Last -
!                              Spec_Suffix'Length + 1 ..
!                              Body_Suffix'Last) = Spec_Suffix
!             then
!                Error_Msg
!                  (Project,
!                   "Body_Suffix (""" &
!                   Body_Suffix &
!                   """) cannot end with" &
!                   " Spec_Suffix  (""" &
!                   Spec_Suffix & """).",
!                   Naming.Body_Suffix_Loc);
!             end if;
! 
!             if Body_Suffix /= Separate_Suffix
!               and then Spec_Suffix'Length <= Separate_Suffix'Length
!               and then
!                 Separate_Suffix
!                   (Separate_Suffix'Last - Spec_Suffix'Length + 1
!                     ..
!                    Separate_Suffix'Last) = Spec_Suffix
!             then
!                Error_Msg
!                  (Project,
!                   "Separate_Suffix (""" &
!                   Separate_Suffix &
!                   """) cannot end with" &
!                   " Spec_Suffix (""" &
!                   Spec_Suffix & """).",
!                   Naming.Sep_Suffix_Loc);
!             end if;
!          end;
        end if;
!    end Check_Ada_Naming_Scheme;
  
     ---------------
     -- Error_Msg --
--- 1321,2427 ----
  
           --  Check if Data.Naming is valid
  
!          Check_Ada_Naming_Scheme_Validity (Project, Data.Naming);
  
        else
!          Data.Naming.Ada_Spec_Suffix := Default_Ada_Spec_Suffix;
!          Data.Naming.Ada_Body_Suffix := Default_Ada_Body_Suffix;
!          Data.Naming.Separate_Suffix := Default_Ada_Body_Suffix;
        end if;
     end Check_Naming_Scheme;
  
!    ------------------------------
!    -- Check_Library_Attributes --
!    ------------------------------
  
!    procedure Check_Library_Attributes
!      (Project : Project_Id; Data : in out Project_Data)
     is
!       Attributes : constant Prj.Variable_Id := Data.Decl.Attributes;
  
!       Lib_Dir : constant Prj.Variable_Value :=
!                   Prj.Util.Value_Of (Snames.Name_Library_Dir, Attributes);
  
!       Lib_Name : constant Prj.Variable_Value :=
!                    Prj.Util.Value_Of (Snames.Name_Library_Name, Attributes);
  
!       Lib_Version : constant Prj.Variable_Value :=
!                       Prj.Util.Value_Of
!                         (Snames.Name_Library_Version, Attributes);
  
!       The_Lib_Kind : constant Prj.Variable_Value :=
!                        Prj.Util.Value_Of
!                          (Snames.Name_Library_Kind, Attributes);
  
!    begin
!       --  Special case of extending project
  
!       if Data.Extends /= No_Project then
!          declare
!             Extended_Data : constant Project_Data :=
!                               Projects.Table (Data.Extends);
  
!          begin
!             --  If the project extended is a library project, we inherit
!             --  the library name, if it is not redefined; we check that
!             --  the library directory is specified; and we reset the
!             --  library flag for the extended project.
  
!             if Extended_Data.Library then
!                if Lib_Name.Default then
!                   Data.Library_Name := Extended_Data.Library_Name;
!                end if;
  
!                if Lib_Dir.Default then
!                   if not Data.Virtual then
!                      Error_Msg
!                        (Project,
!                         "a project extending a library project must " &
!                         "specify an attribute Library_Dir",
!                         Data.Location);
                    end if;
+                end if;
  
!                Projects.Table (Data.Extends).Library := False;
!             end if;
!          end;
!       end if;
  
!       pragma Assert (Lib_Dir.Kind = Single);
  
!       if Lib_Dir.Value = Empty_String then
           if Current_Verbosity = High then
!             Write_Line ("No library directory");
           end if;
  
!       else
!          --  Find path name, check that it is a directory
  
!          Locate_Directory
!            (Lib_Dir.Value, Data.Display_Directory,
!             Data.Library_Dir, Data.Display_Library_Dir);
  
!          if Data.Library_Dir = No_Name then
  
!             --  Get the absolute name of the library directory that
!             --  does not exist, to report an error.
  
!             declare
!                Dir_Name : constant String := Get_Name_String (Lib_Dir.Value);
  
!             begin
!                if Is_Absolute_Path (Dir_Name) then
!                   Err_Vars.Error_Msg_Name_1 := Lib_Dir.Value;
  
!                else
!                   Get_Name_String (Data.Display_Directory);
  
!                   if Name_Buffer (Name_Len) /= Directory_Separator then
!                      Name_Len := Name_Len + 1;
!                      Name_Buffer (Name_Len) := Directory_Separator;
!                   end if;
  
!                   Name_Buffer
!                     (Name_Len + 1 .. Name_Len + Dir_Name'Length) :=
!                     Dir_Name;
!                   Name_Len := Name_Len + Dir_Name'Length;
!                   Err_Vars.Error_Msg_Name_1 := Name_Find;
!                end if;
  
!                --  Report the error
  
!                Error_Msg
!                  (Project,
!                   "library directory { does not exist",
!                   Lib_Dir.Location);
!             end;
  
!          --  comment ???
  
!          elsif Data.Library_Dir = Data.Object_Directory then
!             Error_Msg
!               (Project,
!                "library directory cannot be the same " &
!                "as object directory",
!                Lib_Dir.Location);
!             Data.Library_Dir := No_Name;
!             Data.Display_Library_Dir := No_Name;
  
!          --  comment ???
  
!          else
!             if Current_Verbosity = High then
!                Write_Str ("Library directory =""");
!                Write_Str (Get_Name_String (Data.Display_Library_Dir));
!                Write_Line ("""");
              end if;
           end if;
+       end if;
  
!       pragma Assert (Lib_Name.Kind = Single);
  
!       if Lib_Name.Value = Empty_String then
!          if Current_Verbosity = High
!            and then Data.Library_Name = No_Name
           then
!             Write_Line ("No library name");
           end if;
  
!       else
!          --  There is no restriction on the syntax of library names
  
!          Data.Library_Name := Lib_Name.Value;
!       end if;
  
!       if Data.Library_Name /= No_Name
!         and then Current_Verbosity = High
!       then
!          Write_Str ("Library name = """);
!          Write_Str (Get_Name_String (Data.Library_Name));
!          Write_Line ("""");
!       end if;
  
!       Data.Library :=
!         Data.Library_Dir /= No_Name
!         and then
!       Data.Library_Name /= No_Name;
  
!       if Data.Library then
!          if MLib.Tgt.Support_For_Libraries = MLib.Tgt.None then
!             Error_Msg
!               (Project,
!                "?libraries are not supported on this platform",
!                Lib_Name.Location);
!             Data.Library := False;
  
!          else
!             pragma Assert (Lib_Version.Kind = Single);
  
!             if Lib_Version.Value = Empty_String then
                 if Current_Verbosity = High then
!                   Write_Line ("No library version specified");
                 end if;
  
!             else
!                Data.Lib_Internal_Name := Lib_Version.Value;
!             end if;
  
!             pragma Assert (The_Lib_Kind.Kind = Single);
  
!             if The_Lib_Kind.Value = Empty_String then
!                if Current_Verbosity = High then
!                   Write_Line ("No library kind specified");
!                end if;
  
!             else
!                Get_Name_String (The_Lib_Kind.Value);
  
!                declare
!                   Kind_Name : constant String :=
!                                 To_Lower (Name_Buffer (1 .. Name_Len));
  
!                   OK : Boolean := True;
  
!                begin
!                   if Kind_Name = "static" then
!                      Data.Library_Kind := Static;
  
!                   elsif Kind_Name = "dynamic" then
!                      Data.Library_Kind := Dynamic;
  
!                   elsif Kind_Name = "relocatable" then
!                      Data.Library_Kind := Relocatable;
  
!                   else
!                      Error_Msg
!                        (Project,
!                         "illegal value for Library_Kind",
!                         The_Lib_Kind.Location);
!                      OK := False;
!                   end if;
  
!                   if Current_Verbosity = High and then OK then
!                      Write_Str ("Library kind = ");
!                      Write_Line (Kind_Name);
!                   end if;
  
!                   if Data.Library_Kind /= Static and then
!                     MLib.Tgt.Support_For_Libraries = MLib.Tgt.Static_Only
!                   then
!                      Error_Msg
!                        (Project,
!                         "only static libraries are supported " &
!                         "on this platform",
!                         The_Lib_Kind.Location);
!                      Data.Library := False;
!                   end if;
!                end;
              end if;
  
!             if Data.Library and then Current_Verbosity = High then
!                Write_Line ("This is a library project file");
!             end if;
  
           end if;
+       end if;
+    end Check_Library_Attributes;
  
!    --------------------------
!    -- Check_Package_Naming --
!    --------------------------
  
!    procedure Check_Package_Naming
!      (Project : Project_Id; Data : in out Project_Data)
!    is
!       Naming_Id : constant Package_Id :=
!                     Util.Value_Of (Name_Naming, Data.Decl.Packages);
  
!       Naming : Package_Element;
  
!    begin
!       --  If there is a package Naming, we will put in Data.Naming
!       --  what is in this package Naming.
  
!       if Naming_Id /= No_Package then
!          Naming := Packages.Table (Naming_Id);
  
+          if Current_Verbosity = High then
+             Write_Line ("Checking ""Naming"".");
           end if;
  
!          --  Check Spec_Suffix
  
!          declare
!             Spec_Suffixs : Array_Element_Id :=
!                              Util.Value_Of
!                                (Name_Spec_Suffix,
!                                 Naming.Decl.Arrays);
  
!             Suffix  : Array_Element_Id;
!             Element : Array_Element;
!             Suffix2 : Array_Element_Id;
  
!          begin
!             --  If some suffixs have been specified, we make sure that
!             --  for each language for which a default suffix has been
!             --  specified, there is a suffix specified, either the one
!             --  in the project file or if there were none, the default.
  
!             if Spec_Suffixs /= No_Array_Element then
!                Suffix := Data.Naming.Spec_Suffix;
  
!                while Suffix /= No_Array_Element loop
!                   Element := Array_Elements.Table (Suffix);
!                   Suffix2 := Spec_Suffixs;
  
!                   while Suffix2 /= No_Array_Element loop
!                      exit when Array_Elements.Table (Suffix2).Index =
!                        Element.Index;
!                      Suffix2 := Array_Elements.Table (Suffix2).Next;
!                   end loop;
  
!                   --  There is a registered default suffix, but no
!                   --  suffix specified in the project file.
!                   --  Add the default to the array.
  
!                   if Suffix2 = No_Array_Element then
!                      Array_Elements.Increment_Last;
!                      Array_Elements.Table (Array_Elements.Last) :=
!                        (Index                => Element.Index,
!                         Src_Index            => Element.Src_Index,
!                         Index_Case_Sensitive => False,
!                         Value                => Element.Value,
!                         Next                 => Spec_Suffixs);
!                      Spec_Suffixs := Array_Elements.Last;
                    end if;
  
!                   Suffix := Element.Next;
!                end loop;
  
!                --  Put the resulting array as the specification suffixs
  
!                Data.Naming.Spec_Suffix := Spec_Suffixs;
!             end if;
!          end;
  
           declare
!             Current : Array_Element_Id := Data.Naming.Spec_Suffix;
!             Element : Array_Element;
  
           begin
!             while Current /= No_Array_Element loop
!                Element := Array_Elements.Table (Current);
!                Get_Name_String (Element.Value.Value);
  
!                if Name_Len = 0 then
!                   Error_Msg
!                     (Project,
!                      "Spec_Suffix cannot be empty",
!                      Element.Value.Location);
                 end if;
  
+                Array_Elements.Table (Current) := Element;
                 Current := Element.Next;
!             end loop;
           end;
  
!          --  Check Body_Suffix
  
!          declare
!             Impl_Suffixs : Array_Element_Id :=
!               Util.Value_Of
!                 (Name_Body_Suffix,
!                  Naming.Decl.Arrays);
  
!             Suffix       : Array_Element_Id;
!             Element      : Array_Element;
!             Suffix2      : Array_Element_Id;
  
!          begin
!             --  If some suffixes have been specified, we make sure that
!             --  for each language for which a default suffix has been
!             --  specified, there is a suffix specified, either the one
!             --  in the project file or if there were noe, the default.
  
!             if Impl_Suffixs /= No_Array_Element then
!                Suffix := Data.Naming.Body_Suffix;
  
+                while Suffix /= No_Array_Element loop
+                   Element := Array_Elements.Table (Suffix);
+                   Suffix2 := Impl_Suffixs;
  
!                   while Suffix2 /= No_Array_Element loop
!                      exit when Array_Elements.Table (Suffix2).Index =
!                        Element.Index;
!                      Suffix2 := Array_Elements.Table (Suffix2).Next;
!                   end loop;
  
!                   --  There is a registered default suffix, but no suffix was
!                   --  specified in the project file. Add the default to the
!                   --  array.
  
!                   if Suffix2 = No_Array_Element then
!                      Array_Elements.Increment_Last;
!                      Array_Elements.Table (Array_Elements.Last) :=
!                        (Index                => Element.Index,
!                         Src_Index            => Element.Src_Index,
!                         Index_Case_Sensitive => False,
!                         Value                => Element.Value,
!                         Next                 => Impl_Suffixs);
!                      Impl_Suffixs := Array_Elements.Last;
                    end if;
  
!                   Suffix := Element.Next;
!                end loop;
  
!                --  Put the resulting array as the implementation suffixs
  
!                Data.Naming.Body_Suffix := Impl_Suffixs;
!             end if;
!          end;
  
!          declare
!             Current : Array_Element_Id := Data.Naming.Body_Suffix;
!             Element : Array_Element;
  
!          begin
!             while Current /= No_Array_Element loop
!                Element := Array_Elements.Table (Current);
!                Get_Name_String (Element.Value.Value);
  
!                if Name_Len = 0 then
!                   Error_Msg
!                     (Project,
!                      "Body_Suffix cannot be empty",
!                      Element.Value.Location);
!                end if;
  
!                Array_Elements.Table (Current) := Element;
!                Current := Element.Next;
!             end loop;
!          end;
  
!          --  Get the exceptions, if any
  
!          Data.Naming.Specification_Exceptions :=
!            Util.Value_Of
!              (Name_Specification_Exceptions,
!               In_Arrays => Naming.Decl.Arrays);
  
!          Data.Naming.Implementation_Exceptions :=
!            Util.Value_Of
!              (Name_Implementation_Exceptions,
!               In_Arrays => Naming.Decl.Arrays);
!       end if;
!    end Check_Package_Naming;
  
!    ---------------------------------
!    -- Check_Programming_Languages --
!    ---------------------------------
  
!    procedure Check_Programming_Languages (Data : in out Project_Data) is
!       Languages : Variable_Value := Nil_Variable_Value;
  
!    begin
!       Languages := Prj.Util.Value_Of (Name_Languages, Data.Decl.Attributes);
!       Data.Ada_Sources_Present   := Data.Source_Dirs /= Nil_String;
!       Data.Other_Sources_Present := Data.Source_Dirs /= Nil_String;
  
!       if Data.Source_Dirs /= Nil_String then
  
!          --  Check if languages are specified in this project
  
!          if Languages.Default then
  
!             --  Attribute Languages is not specified. So, it defaults to
!             --  a project of language Ada only.
  
!             Data.Languages (Ada_Language_Index) := True;
  
!             --  No sources of languages other than Ada
  
!             Data.Other_Sources_Present := False;
  
!          else
!             declare
!                Current   : String_List_Id := Languages.Values;
!                Element   : String_Element;
!                Lang_Name : Name_Id;
!                Index     : Language_Index;
  
!             begin
!                --  Assume that there is no language specified yet
  
!                Data.Other_Sources_Present := False;
!                Data.Ada_Sources_Present   := False;
  
!                --  Look through all the languages specified in attribute
!                --  Languages, if any
  
!                while Current /= Nil_String loop
!                   Element := String_Elements.Table (Current);
!                   Get_Name_String (Element.Value);
!                   To_Lower (Name_Buffer (1 .. Name_Len));
!                   Lang_Name := Name_Find;
!                   Index := Language_Indexes.Get (Lang_Name);
  
!                   if Index = No_Language_Index then
!                      Add_Language_Name (Lang_Name);
!                      Index := Last_Language_Index;
!                   end if;
  
!                   Set (Index, True, Data);
!                   Set (Language_Processing => Default_Language_Processing_Data,
!                        For_Language        => Index,
!                        In_Project          => Data);
  
!                   if Index = Ada_Language_Index then
!                      Data.Ada_Sources_Present := True;
  
!                   else
!                      Data.Other_Sources_Present := True;
!                   end if;
  
!                   Current := Element.Next;
!                end loop;
!             end;
!          end if;
!       end if;
!    end Check_Programming_Languages;
  
!    -------------------
!    -- Check_Project --
!    -------------------
  
!    function Check_Project
!      (P            : Project_Id;
!       Root_Project : Project_Id;
!       Extending    : Boolean) return Boolean
!    is
!    begin
!       if P = Root_Project then
!          return True;
  
!       elsif Extending then
!          declare
!             Data : Project_Data := Projects.Table (Root_Project);
  
!          begin
!             while Data.Extends /= No_Project loop
!                if P = Data.Extends then
!                   return True;
!                end if;
  
!                Data := Projects.Table (Data.Extends);
!             end loop;
!          end;
!       end if;
  
!       return False;
!    end Check_Project;
  
!    -------------------------------
!    -- Check_Stand_Alone_Library --
!    -------------------------------
  
!    procedure Check_Stand_Alone_Library
!      (Project   : Project_Id;
!       Data      : in out Project_Data;
!       Extending : Boolean)
!    is
!       Lib_Interfaces      : constant Prj.Variable_Value :=
!                               Prj.Util.Value_Of
!                                 (Snames.Name_Library_Interface,
!                                  Data.Decl.Attributes);
  
!       Lib_Auto_Init       : constant Prj.Variable_Value :=
!                               Prj.Util.Value_Of
!                                 (Snames.Name_Library_Auto_Init,
!                                  Data.Decl.Attributes);
  
!       Lib_Src_Dir         : constant Prj.Variable_Value :=
!                               Prj.Util.Value_Of
!                                 (Snames.Name_Library_Src_Dir,
!                                  Data.Decl.Attributes);
  
!       Lib_Symbol_File     : constant Prj.Variable_Value :=
!                               Prj.Util.Value_Of
!                                 (Snames.Name_Library_Symbol_File,
!                                  Data.Decl.Attributes);
  
!       Lib_Symbol_Policy   : constant Prj.Variable_Value :=
!                               Prj.Util.Value_Of
!                                 (Snames.Name_Library_Symbol_Policy,
!                                  Data.Decl.Attributes);
  
!       Lib_Ref_Symbol_File : constant Prj.Variable_Value :=
!                               Prj.Util.Value_Of
!                                 (Snames.Name_Library_Reference_Symbol_File,
!                                  Data.Decl.Attributes);
  
!       Auto_Init_Supported : constant Boolean :=
!                               MLib.Tgt.
!                                 Standalone_Library_Auto_Init_Is_Supported;
  
!       OK : Boolean := True;
  
!    begin
!       pragma Assert (Lib_Interfaces.Kind = List);
  
!       --  It is a stand-alone library project file if attribute
!       --  Library_Interface is defined.
  
!       if not Lib_Interfaces.Default then
!          SAL_Library : declare
!             Interfaces     : String_List_Id := Lib_Interfaces.Values;
!             Interface_ALIs : String_List_Id := Nil_String;
!             Unit           : Name_Id;
!             The_Unit_Id    : Unit_Id;
!             The_Unit_Data  : Unit_Data;
  
!             procedure Add_ALI_For (Source : Name_Id);
!             --  Add an ALI file name to the list of Interface ALIs
  
!             -----------------
!             -- Add_ALI_For --
!             -----------------
  
!             procedure Add_ALI_For (Source : Name_Id) is
!             begin
!                Get_Name_String (Source);
  
!                declare
!                   ALI         : constant String :=
!                     ALI_File_Name (Name_Buffer (1 .. Name_Len));
!                   ALI_Name_Id : Name_Id;
!                begin
!                   Name_Len := ALI'Length;
!                   Name_Buffer (1 .. Name_Len) := ALI;
!                   ALI_Name_Id := Name_Find;
  
!                   String_Elements.Increment_Last;
!                   String_Elements.Table (String_Elements.Last) :=
!                     (Value         => ALI_Name_Id,
!                      Index         => 0,
!                      Display_Value => ALI_Name_Id,
!                      Location      => String_Elements.Table
!                        (Interfaces).Location,
!                      Flag          => False,
!                      Next          => Interface_ALIs);
!                   Interface_ALIs := String_Elements.Last;
!                end;
!             end Add_ALI_For;
  
!          --  Start of processing for SAL_Library
  
           begin
!             Data.Standalone_Library := True;
  
!             --  Library_Interface cannot be an empty list
  
!             if Interfaces = Nil_String then
!                Error_Msg
!                  (Project,
!                   "Library_Interface cannot be an empty list",
!                   Lib_Interfaces.Location);
!             end if;
  
!             --  Process each unit name specified in the attribute
!             --  Library_Interface.
  
!             while Interfaces /= Nil_String loop
!                Get_Name_String
!                  (String_Elements.Table (Interfaces).Value);
!                To_Lower (Name_Buffer (1 .. Name_Len));
  
!                if Name_Len = 0 then
!                   Error_Msg
!                     (Project,
!                      "an interface cannot be an empty string",
!                      String_Elements.Table (Interfaces).Location);
  
!                else
!                   Unit := Name_Find;
!                   Error_Msg_Name_1 := Unit;
!                   The_Unit_Id := Units_Htable.Get (Unit);
  
!                   if The_Unit_Id = Prj.Com.No_Unit then
                       Error_Msg
                         (Project,
!                         "unknown unit {",
!                         String_Elements.Table (Interfaces).Location);
  
!                   else
!                      --  Check that the unit is part of the project
  
!                      The_Unit_Data := Units.Table (The_Unit_Id);
  
!                      if The_Unit_Data.File_Names
!                        (Com.Body_Part).Name /= No_Name
!                        and then The_Unit_Data.File_Names
!                          (Com.Body_Part).Path /= Slash
!                      then
!                         if Check_Project
!                           (The_Unit_Data.File_Names (Body_Part).Project,
!                            Project, Extending)
!                         then
!                            --  There is a body for this unit.
!                            --  If there is no spec, we need to check
!                            --  that it is not a subunit.
  
                             if The_Unit_Data.File_Names
!                              (Specification).Name = No_Name
                             then
!                               declare
!                                  Src_Ind : Source_File_Index;
  
!                               begin
!                                  Src_Ind := Sinput.P.Load_Project_File
!                                    (Get_Name_String
!                                       (The_Unit_Data.File_Names
!                                          (Body_Part).Path));
  
!                                  if Sinput.P.Source_File_Is_Subunit
!                                    (Src_Ind)
!                                  then
!                                     Error_Msg
!                                       (Project,
!                                        "{ is a subunit; " &
!                                        "it cannot be an interface",
!                                        String_Elements.Table
!                                          (Interfaces).Location);
                                   end if;
!                               end;
                             end if;
  
!                            --  The unit is not a subunit, so we add
!                            --  to the Interface ALIs the ALI file
!                            --  corresponding to the body.
  
!                            Add_ALI_For
!                              (The_Unit_Data.File_Names (Body_Part).Name);
  
                          else
                             Error_Msg
                               (Project,
!                               "{ is not an unit of this project",
!                               String_Elements.Table
!                                 (Interfaces).Location);
                          end if;
  
+                      elsif The_Unit_Data.File_Names
+                        (Com.Specification).Name /= No_Name
+                        and then The_Unit_Data.File_Names
+                          (Com.Specification).Path /= Slash
+                        and then Check_Project
+                          (The_Unit_Data.File_Names
+                               (Specification).Project,
+                           Project, Extending)
+ 
+                      then
+                         --  The unit is part of the project, it has
+                         --  a spec, but no body. We add to the Interface
+                         --  ALIs the ALI file corresponding to the spec.
+ 
+                         Add_ALI_For
+                           (The_Unit_Data.File_Names (Specification).Name);
+ 
                       else
                          Error_Msg
                            (Project,
!                            "{ is not an unit of this project",
!                            String_Elements.Table (Interfaces).Location);
                       end if;
                    end if;
  
!                end if;
  
!                Interfaces := String_Elements.Table (Interfaces).Next;
!             end loop;
  
!             --  Put the list of Interface ALIs in the project data
  
!             Data.Lib_Interface_ALIs := Interface_ALIs;
  
!             --  Check value of attribute Library_Auto_Init and set
!             --  Lib_Auto_Init accordingly.
  
!             if Lib_Auto_Init.Default then
  
!                --  If no attribute Library_Auto_Init is declared, then
!                --  set auto init only if it is supported.
  
!                Data.Lib_Auto_Init := Auto_Init_Supported;
  
!             else
!                Get_Name_String (Lib_Auto_Init.Value);
!                To_Lower (Name_Buffer (1 .. Name_Len));
  
!                if Name_Buffer (1 .. Name_Len) = "false" then
!                   Data.Lib_Auto_Init := False;
  
!                elsif Name_Buffer (1 .. Name_Len) = "true" then
!                   if Auto_Init_Supported then
!                      Data.Lib_Auto_Init := True;
  
!                   else
!                      --  Library_Auto_Init cannot be "true" if auto init
!                      --  is not supported
  
!                      Error_Msg
!                        (Project,
!                         "library auto init not supported " &
!                         "on this platform",
!                         Lib_Auto_Init.Location);
!                   end if;
  
!                else
!                   Error_Msg
!                     (Project,
!                      "invalid value for attribute Library_Auto_Init",
!                      Lib_Auto_Init.Location);
                 end if;
+             end if;
+          end SAL_Library;
  
!          --  If attribute Library_Src_Dir is defined and not the
!          --  empty string, check if the directory exist and is not
!          --  the object directory or one of the source directories.
!          --  This is the directory where copies of the interface
!          --  sources will be copied. Note that this directory may be
!          --  the library directory.
  
!          if Lib_Src_Dir.Value /= Empty_String then
!             declare
!                Dir_Id : constant Name_Id := Lib_Src_Dir.Value;
  
!             begin
!                Locate_Directory
!                  (Dir_Id, Data.Display_Directory,
!                   Data.Library_Src_Dir,
!                   Data.Display_Library_Src_Dir);
  
!                --  If directory does not exist, report an error
  
!                if Data.Library_Src_Dir = No_Name then
  
!                   --  Get the absolute name of the library directory
!                   --  that does not exist, to report an error.
  
                    declare
!                      Dir_Name : constant String :=
!                        Get_Name_String (Dir_Id);
  
                    begin
!                      if Is_Absolute_Path (Dir_Name) then
!                         Err_Vars.Error_Msg_Name_1 := Dir_Id;
  
                       else
!                         Get_Name_String (Data.Directory);
  
!                         if Name_Buffer (Name_Len) /=
!                           Directory_Separator
!                         then
!                            Name_Len := Name_Len + 1;
!                            Name_Buffer (Name_Len) :=
!                              Directory_Separator;
!                         end if;
  
!                         Name_Buffer
!                           (Name_Len + 1 ..
!                              Name_Len + Dir_Name'Length) :=
!                             Dir_Name;
!                         Name_Len := Name_Len + Dir_Name'Length;
!                         Err_Vars.Error_Msg_Name_1 := Name_Find;
!                      end if;
  
!                      --  Report the error
  
                       Error_Msg
                         (Project,
!                         "Directory { does not exist",
!                         Lib_Src_Dir.Location);
!                   end;
  
!                   --  Report an error if it is the same as the object
!                   --  directory.
  
!                elsif Data.Library_Src_Dir = Data.Object_Directory then
!                   Error_Msg
!                     (Project,
!                      "directory to copy interfaces cannot be " &
!                      "the object directory",
!                      Lib_Src_Dir.Location);
!                   Data.Library_Src_Dir := No_Name;
  
!                   --  Check if it is same as one of the source directories
  
!                else
!                   declare
!                      Src_Dirs : String_List_Id := Data.Source_Dirs;
!                      Src_Dir  : String_Element;
  
!                   begin
!                      while Src_Dirs /= Nil_String loop
!                         Src_Dir := String_Elements.Table (Src_Dirs);
!                         Src_Dirs := Src_Dir.Next;
  
!                         --  Report error if it is one of the source directories
  
!                         if Data.Library_Src_Dir = Src_Dir.Value then
!                            Error_Msg
!                              (Project,
!                               "directory to copy interfaces cannot " &
!                               "be one of the source directories",
!                               Lib_Src_Dir.Location);
!                            Data.Library_Src_Dir := No_Name;
!                            exit;
!                         end if;
!                      end loop;
!                   end;
  
!                   --  pages of code follow here with no comments at all ???
! 
!                   if Data.Library_Src_Dir /= No_Name
!                     and then Current_Verbosity = High
!                   then
!                      Write_Str ("Directory to copy interfaces =""");
!                      Write_Str (Get_Name_String (Data.Library_Dir));
!                      Write_Line ("""");
                    end if;
                 end if;
!             end;
           end if;
  
!          if not Lib_Symbol_Policy.Default then
!             declare
!                Value : constant String :=
!                  To_Lower
!                    (Get_Name_String (Lib_Symbol_Policy.Value));
  
!             begin
!                if Value = "autonomous" or else Value = "default" then
!                   Data.Symbol_Data.Symbol_Policy := Autonomous;
  
!                elsif Value = "compliant" then
!                   Data.Symbol_Data.Symbol_Policy := Compliant;
  
!                elsif Value = "controlled" then
!                   Data.Symbol_Data.Symbol_Policy := Controlled;
  
!                elsif Value = "restricted" then
!                   Data.Symbol_Data.Symbol_Policy := Restricted;
  
!                else
!                   Error_Msg
!                     (Project,
!                      "illegal value for Library_Symbol_Policy",
!                      Lib_Symbol_Policy.Location);
!                end if;
!             end;
           end if;
  
!          if Lib_Symbol_File.Default then
!             if Data.Symbol_Data.Symbol_Policy = Restricted then
!                Error_Msg
!                  (Project,
!                   "Library_Symbol_File needs to be defined when " &
!                   "symbol policy is Restricted",
!                   Lib_Symbol_Policy.Location);
!             end if;
  
!          else
!             Data.Symbol_Data.Symbol_File := Lib_Symbol_File.Value;
  
!             Get_Name_String (Lib_Symbol_File.Value);
  
!             if Name_Len = 0 then
!                Error_Msg
!                  (Project,
!                   "symbol file name cannot be an empty string",
!                   Lib_Symbol_File.Location);
  
              else
!                OK := not Is_Absolute_Path (Name_Buffer (1 .. Name_Len));
  
!                if OK then
!                   for J in 1 .. Name_Len loop
!                      if Name_Buffer (J) = '/'
!                        or else Name_Buffer (J) = Directory_Separator
!                      then
!                         OK := False;
!                         exit;
!                      end if;
!                   end loop;
                 end if;
  
!                if not OK then
!                   Error_Msg_Name_1 := Lib_Symbol_File.Value;
!                   Error_Msg
!                     (Project,
!                      "symbol file name { is illegal. " &
!                      "Name canot include directory info.",
!                      Lib_Symbol_File.Location);
!                end if;
              end if;
+          end if;
  
!          if Lib_Ref_Symbol_File.Default then
!             if Data.Symbol_Data.Symbol_Policy = Compliant
!               or else Data.Symbol_Data.Symbol_Policy = Controlled
!             then
!                Error_Msg
!                  (Project,
!                   "a reference symbol file need to be defined",
!                   Lib_Symbol_Policy.Location);
!             end if;
  
!          else
!             Data.Symbol_Data.Reference := Lib_Ref_Symbol_File.Value;
  
!             Get_Name_String (Lib_Ref_Symbol_File.Value);
  
!             if Name_Len = 0 then
!                Error_Msg
!                  (Project,
!                   "reference symbol file name cannot be an empty string",
!                   Lib_Symbol_File.Location);
  
!             else
!                OK := not Is_Absolute_Path (Name_Buffer (1 .. Name_Len));
  
!                if OK then
!                   for J in 1 .. Name_Len loop
!                      if Name_Buffer (J) = '/'
!                        or else Name_Buffer (J) = Directory_Separator
!                      then
!                         OK := False;
!                         exit;
!                      end if;
!                   end loop;
!                end if;
  
!                if not OK then
!                   Error_Msg_Name_1 := Lib_Ref_Symbol_File.Value;
!                   Error_Msg
!                     (Project,
!                      "reference symbol file { name is illegal. " &
!                      "Name canot include directory info.",
!                      Lib_Ref_Symbol_File.Location);
!                end if;
  
!                if not Is_Regular_File
!                  (Get_Name_String (Data.Object_Directory) &
!                   Directory_Separator &
!                   Get_Name_String (Lib_Ref_Symbol_File.Value))
!                then
!                   Error_Msg_Name_1 := Lib_Ref_Symbol_File.Value;
!                   Error_Msg
!                     (Project,
!                      "library reference symbol file { does not exist",
!                      Lib_Ref_Symbol_File.Location);
!                end if;
  
!                if Data.Symbol_Data.Symbol_File /= No_Name then
!                   declare
!                      Symbol    : String :=
!                        Get_Name_String
!                          (Data.Symbol_Data.Symbol_File);
  
!                      Reference : String :=
!                        Get_Name_String
!                          (Data.Symbol_Data.Reference);
  
!                   begin
!                      Canonical_Case_File_Name (Symbol);
!                      Canonical_Case_File_Name (Reference);
  
!                      if Symbol = Reference then
!                         Error_Msg
!                           (Project,
!                            "reference symbol file and symbol file " &
!                            "cannot be the same file",
!                            Lib_Ref_Symbol_File.Location);
!                      end if;
!                   end;
                 end if;
              end if;
           end if;
!       end if;
!    end Check_Stand_Alone_Library;
  
!    ----------------------------
!    -- Compute_Directory_Last --
!    ----------------------------
  
+    function Compute_Directory_Last (Dir : String) return Natural is
+    begin
+       if Dir'Length > 1
+         and then (Dir (Dir'Last - 1) = Directory_Separator
+                   or else Dir (Dir'Last - 1) = '/')
+       then
+          return Dir'Last - 1;
        else
!          return Dir'Last;
        end if;
!    end Compute_Directory_Last;
  
!    --------------------
!    -- Body_Suffix_Of --
!    --------------------
  
!    function Body_Suffix_Of
!      (Language   : Language_Index;
!       In_Project : Project_Data) return String
     is
+       Suffix_Id : constant Name_Id := Suffix_Of (Language, In_Project);
     begin
!       if Suffix_Id /= No_Name then
!          return Get_Name_String (Suffix_Id);
!       else
!          return "." & Get_Name_String (Language_Names.Table (Language));
        end if;
!    end Body_Suffix_Of;
  
     ---------------
     -- Error_Msg --
*************** package body Prj.Nmsc is
*** 2195,2210 ****
           return;
        end if;
  
!       if Msg (First) = '\' then
! 
!          --  Continuation character, ignore.
  
           First := First + 1;
  
!       elsif Msg (First) = '?' then
! 
!          --  Warning character. It is always the first one in this package
  
           First := First + 1;
           Add ("Warning: ");
        end if;
--- 2476,2489 ----
           return;
        end if;
  
!       --  Ignore continuation character
  
+       if Msg (First) = '\' then
           First := First + 1;
  
!       --  Warniung character is always the first one in this package
  
+       elsif Msg (First) = '?' then
           First := First + 1;
           Add ("Warning: ");
        end if;
*************** package body Prj.Nmsc is
*** 2212,2218 ****
        for Index in First .. Msg'Last loop
           if Msg (Index) = '{' or else Msg (Index) = '%' then
  
!             --  Include a name between double quotes.
  
              Msg_Name := Msg_Name + 1;
              Add ('"');
--- 2491,2497 ----
        for Index in First .. Msg'Last loop
           if Msg (Index) = '{' or else Msg (Index) = '%' then
  
!             --  Include a name between double quotes
  
              Msg_Name := Msg_Name + 1;
              Add ('"');
*************** package body Prj.Nmsc is
*** 2236,2565 ****
        Error_Report (Error_Buffer (1 .. Error_Last), Project);
     end Error_Msg;
  
!    --------------
!    -- Get_Unit --
!    --------------
  
!    procedure Get_Unit
!      (Canonical_File_Name : Name_Id;
!       Naming              : Naming_Data;
!       Unit_Name           : out Name_Id;
!       Unit_Kind           : out Spec_Or_Body;
!       Needs_Pragma        : out Boolean)
     is
!       function Check_Exception (Canonical : Name_Id) return Boolean;
!       pragma Inline (Check_Exception);
!       --  Check if Canonical is one of the exceptions in List.
!       --  Returns True if Get_Unit should exit
! 
!       ---------------------
!       -- Check_Exception --
!       ---------------------
! 
!       function Check_Exception (Canonical : Name_Id) return Boolean is
!          Info     : Unit_Info := Naming_Exceptions.Get (Canonical);
!          VMS_Name : Name_Id;
! 
!       begin
!          if Info = No_Unit then
!             if Hostparm.OpenVMS then
!                VMS_Name := Canonical;
!                Get_Name_String (VMS_Name);
! 
!                if Name_Buffer (Name_Len) = '.' then
!                   Name_Len := Name_Len - 1;
!                   VMS_Name := Name_Find;
!                end if;
! 
!                Info := Naming_Exceptions.Get (VMS_Name);
!             end if;
! 
!             if Info = No_Unit then
!                return False;
!             end if;
!          end if;
! 
!          Unit_Kind := Info.Kind;
!          Unit_Name := Info.Unit;
!          Needs_Pragma := True;
!          return True;
!       end Check_Exception;
! 
!    --  Start of processing for Get_Unit
  
     begin
!       Needs_Pragma := False;
! 
!       if Check_Exception (Canonical_File_Name) then
!          return;
        end if;
  
!       Get_Name_String (Canonical_File_Name);
! 
!       declare
!          File          : String := Name_Buffer (1 .. Name_Len);
!          First         : constant Positive := File'First;
!          Last          : Natural           := File'Last;
!          Standard_GNAT : Boolean;
! 
!       begin
!          Standard_GNAT :=
!            Naming.Current_Spec_Suffix = Default_Ada_Spec_Suffix
!              and then Naming.Current_Body_Suffix = Default_Ada_Body_Suffix;
! 
!          --  Check if the end of the file name is Specification_Append
! 
!          Get_Name_String (Naming.Current_Spec_Suffix);
! 
!          if File'Length > Name_Len
!            and then File (Last - Name_Len + 1 .. Last) =
!                                                 Name_Buffer (1 .. Name_Len)
!          then
!             --  We have a spec
! 
!             Unit_Kind := Specification;
!             Last := Last - Name_Len;
! 
!             if Current_Verbosity = High then
!                Write_Str  ("   Specification: ");
!                Write_Line (File (First .. Last));
!             end if;
! 
!          else
!             Get_Name_String (Naming.Current_Body_Suffix);
! 
!             --  Check if the end of the file name is Body_Append
! 
!             if File'Length > Name_Len
!               and then File (Last - Name_Len + 1 .. Last) =
!                                                 Name_Buffer (1 .. Name_Len)
!             then
!                --  We have a body
! 
!                Unit_Kind := Body_Part;
!                Last := Last - Name_Len;
! 
!                if Current_Verbosity = High then
!                   Write_Str  ("   Body: ");
!                   Write_Line (File (First .. Last));
!                end if;
! 
!             elsif Naming.Separate_Suffix /= Naming.Current_Spec_Suffix then
!                Get_Name_String (Naming.Separate_Suffix);
! 
!                --  Check if the end of the file name is Separate_Append
! 
!                if File'Length > Name_Len
!                  and then File (Last - Name_Len + 1 .. Last) =
!                                                 Name_Buffer (1 .. Name_Len)
!                then
!                   --  We have a separate (a body)
! 
!                   Unit_Kind := Body_Part;
!                   Last := Last - Name_Len;
! 
!                   if Current_Verbosity = High then
!                      Write_Str  ("   Separate: ");
!                      Write_Line (File (First .. Last));
!                   end if;
! 
!                else
!                   Last := 0;
!                end if;
! 
!             else
!                Last := 0;
!             end if;
!          end if;
! 
!          if Last = 0 then
! 
!             --  This is not a source file
! 
!             Unit_Name := No_Name;
!             Unit_Kind := Specification;
! 
!             if Current_Verbosity = High then
!                Write_Line ("   Not a valid file name.");
!             end if;
! 
!             return;
!          end if;
! 
!          Get_Name_String (Naming.Dot_Replacement);
!          Standard_GNAT :=
!            Standard_GNAT and then Name_Buffer (1 .. Name_Len) = "-";
  
!          if Name_Buffer (1 .. Name_Len) /= "." then
  
!             --  If Dot_Replacement is not a single dot,
!             --  then there should not be any dot in the name.
  
!             for Index in First .. Last loop
!                if File (Index) = '.' then
                    if Current_Verbosity = High then
!                      Write_Line
!                        ("   Not a valid file name (some dot not replaced).");
                    end if;
  
!                   Unit_Name := No_Name;
!                   return;
! 
!                end if;
!             end loop;
! 
!             --  Replace the substring Dot_Replacement with dots
! 
!             declare
!                Index : Positive := First;
  
!             begin
!                while Index <= Last - Name_Len + 1 loop
  
!                   if File (Index .. Index + Name_Len - 1) =
!                     Name_Buffer (1 .. Name_Len)
!                   then
!                      File (Index) := '.';
  
!                      if Name_Len > 1 and then Index < Last then
!                         File (Index + 1 .. Last - Name_Len + 1) :=
!                           File (Index + Name_Len .. Last);
                       end if;
  
!                      Last := Last - Name_Len + 1;
!                   end if;
! 
!                   Index := Index + 1;
!                end loop;
!             end;
!          end if;
! 
!          --  Check if the casing is right
! 
!          declare
!             Src : String := File (First .. Last);
! 
!          begin
!             case Naming.Casing is
!                when All_Lower_Case =>
!                   Fixed.Translate
!                     (Source  => Src,
!                      Mapping => Lower_Case_Map);
! 
!                when All_Upper_Case =>
!                   Fixed.Translate
!                     (Source  => Src,
!                      Mapping => Upper_Case_Map);
! 
!                when Mixed_Case | Unknown =>
!                   null;
!             end case;
! 
!             if Src /= File (First .. Last) then
!                if Current_Verbosity = High then
!                   Write_Line ("   Not a valid file name (casing).");
!                end if;
! 
!                Unit_Name := No_Name;
!                return;
!             end if;
! 
!             --  We put the name in lower case
! 
!             Fixed.Translate
!               (Source  => Src,
!                Mapping => Lower_Case_Map);
  
!             --  In the standard GNAT naming scheme, check for special cases:
!             --  children or separates of A, G, I or S, and run time sources.
  
!             if Standard_GNAT and then Src'Length >= 3 then
!                declare
!                   S1 : constant Character := Src (Src'First);
!                   S2 : constant Character := Src (Src'First + 1);
  
!                begin
!                   if S1 = 'a' or else S1 = 'g'
!                     or else S1 = 'i' or else S1 = 's'
!                   then
!                      --  Children or separates of packages A, G, I or S
  
!                      if (Hostparm.OpenVMS and then S2 = '$')
!                        or else (not Hostparm.OpenVMS and then S2 = '~')
!                      then
!                         Src (Src'First + 1) := '.';
  
!                      --  If it is potentially a run time source, disable
!                      --  filling of the mapping file to avoid warnings.
  
!                      elsif S2 = '.' then
!                         Set_Mapping_File_Initial_State_To_Empty;
!                      end if;
  
!                   end if;
                 end;
              end if;
  
!             if Current_Verbosity = High then
!                Write_Str  ("      ");
!                Write_Line (Src);
!             end if;
! 
!             --  Now, we check if this name is a valid unit name
! 
!             Check_Ada_Name (Name => Src, Unit => Unit_Name);
           end;
  
!       end;
!    end Get_Unit;
  
!    -----------------------
!    -- Is_Illegal_Suffix --
!    -----------------------
  
!    function Is_Illegal_Suffix
!      (Suffix                          : String;
!       Dot_Replacement_Is_A_Single_Dot : Boolean) return Boolean
!    is
!    begin
!       if Suffix'Length = 0 or else Index (Suffix, ".") = 0 then
!          return True;
        end if;
  
!       --  If dot replacement is a single dot, and first character of
!       --  suffix is also a dot
! 
!       if Dot_Replacement_Is_A_Single_Dot
!         and then Suffix (Suffix'First) = '.'
!       then
!          for Index in Suffix'First + 1 .. Suffix'Last loop
! 
!             --  If there is another dot
  
!             if Suffix (Index) = '.' then
  
!                --  It is illegal to have a letter following the initial dot
  
!                return Is_Letter (Suffix (Suffix'First + 1));
!             end if;
!          end loop;
        end if;
! 
!       --  Everything is OK
! 
!       return False;
!    end Is_Illegal_Suffix;
  
     --------------------------------
!    -- Language_Independent_Check --
     --------------------------------
  
!    procedure Language_Independent_Check
!      (Project      : Project_Id;
!       Report_Error : Put_Line_Access)
     is
        Last_Source_Dir : String_List_Id  := Nil_String;
-       Data            : Project_Data    := Projects.Table (Project);
  
        procedure Find_Source_Dirs (From : Name_Id; Location : Source_Ptr);
        --  Find one or several source directories, and add them
--- 2515,2694 ----
        Error_Report (Error_Buffer (1 .. Error_Last), Project);
     end Error_Msg;
  
!    ------------------
!    -- Find_Sources --
!    ------------------
  
!    procedure Find_Sources
!      (Project      : Project_Id;
!       Data         : in out Project_Data;
!       For_Language : Language_Index;
!       Follow_Links : Boolean := False)
     is
!       Source_Dir      : String_List_Id := Data.Source_Dirs;
!       Element         : String_Element;
!       Dir             : Dir_Type;
!       Current_Source  : String_List_Id := Nil_String;
!       Source_Recorded : Boolean := False;
  
     begin
!       if Current_Verbosity = High then
!          Write_Line ("Looking for sources:");
        end if;
  
!       --  For each subdirectory
  
!       while Source_Dir /= Nil_String loop
!          begin
!             Source_Recorded := False;
!             Element := String_Elements.Table (Source_Dir);
!             if Element.Value /= No_Name then
!                Get_Name_String (Element.Display_Value);
  
!                declare
!                   Source_Directory : constant String :=
!                     Name_Buffer (1 .. Name_Len) & Directory_Separator;
!                   Dir_Last  : constant Natural :=
!                      Compute_Directory_Last (Source_Directory);
  
!                begin
                    if Current_Verbosity = High then
!                      Write_Str ("Source_Dir = ");
!                      Write_Line (Source_Directory);
                    end if;
  
!                   --  We look to every entry in the source directory
  
!                   Open (Dir, Source_Directory
!                                (Source_Directory'First .. Dir_Last));
  
!                   loop
!                      Read (Dir, Name_Buffer, Name_Len);
  
!                      if Current_Verbosity = High then
!                         Write_Str  ("   Checking ");
!                         Write_Line (Name_Buffer (1 .. Name_Len));
                       end if;
  
!                      exit when Name_Len = 0;
  
!                      declare
!                         File_Name : constant Name_Id := Name_Find;
!                         Path      : constant String :=
!                           Normalize_Pathname
!                             (Name      => Name_Buffer (1 .. Name_Len),
!                              Directory => Source_Directory
!                                (Source_Directory'First .. Dir_Last),
!                              Resolve_Links => Follow_Links,
!                              Case_Sensitive => True);
!                         Path_Name : Name_Id;
  
!                      begin
!                         Name_Len := Path'Length;
!                         Name_Buffer (1 .. Name_Len) := Path;
!                         Path_Name := Name_Find;
  
!                         if For_Language = Ada_Language_Index then
  
!                            --  We attempt to register it as a source. However,
!                            --  there is no error if the file does not contain
!                            --  a valid source. But there is an error if we have
!                            --  a duplicate unit name.
  
!                            Record_Ada_Source
!                              (File_Name       => File_Name,
!                               Path_Name       => Path_Name,
!                               Project         => Project,
!                               Data            => Data,
!                               Location        => No_Location,
!                               Current_Source  => Current_Source,
!                               Source_Recorded => Source_Recorded,
!                               Follow_Links    => Follow_Links);
  
!                         else
!                            Check_For_Source
!                              (File_Name        => File_Name,
!                               Path_Name        => Path_Name,
!                               Project          => Project,
!                               Data             => Data,
!                               Location         => No_Location,
!                               Language         => For_Language,
!                               Suffix           =>
!                                 Body_Suffix_Of (For_Language, Data),
!                               Naming_Exception => False);
!                         end if;
!                      end;
!                   end loop;
  
!                   Close (Dir);
                 end;
              end if;
  
!          exception
!             when Directory_Error =>
!                null;
           end;
  
!          if Source_Recorded then
!             String_Elements.Table (Source_Dir).Flag := True;
!          end if;
  
!          Source_Dir := Element.Next;
!       end loop;
  
!       if Current_Verbosity = High then
!          Write_Line ("end Looking for sources.");
        end if;
  
!       if For_Language = Ada_Language_Index then
  
!          --  If we have looked for sources and found none, then
!          --  it is an error, except if it is an extending project.
!          --  If a non extending project is not supposed to contain
!          --  any source, then we never call Find_Sources.
  
!          if Current_Source /= Nil_String then
!             Data.Ada_Sources_Present := True;
  
!          elsif Data.Extends = No_Project then
!             Error_Msg
!               (Project,
!                "there are no Ada sources in this project",
!                Data.Location);
!          end if;
        end if;
!    end Find_Sources;
  
     --------------------------------
!    -- Free_Ada_Naming_Exceptions --
     --------------------------------
  
!    procedure Free_Ada_Naming_Exceptions is
!    begin
!       Ada_Naming_Exception_Table.Set_Last (0);
!       Ada_Naming_Exceptions.Reset;
!       Reverse_Ada_Naming_Exceptions.Reset;
!    end Free_Ada_Naming_Exceptions;
! 
!    ---------------------
!    -- Get_Directories --
!    ---------------------
! 
!    procedure Get_Directories
!      (Project : Project_Id;
!       Data    : in out Project_Data)
     is
+       Object_Dir : constant Variable_Value :=
+                      Util.Value_Of (Name_Object_Dir, Data.Decl.Attributes);
+ 
+       Exec_Dir   : constant Variable_Value :=
+                      Util.Value_Of (Name_Exec_Dir, Data.Decl.Attributes);
+ 
+       Source_Dirs : constant Variable_Value :=
+                       Util.Value_Of
+                         (Name_Source_Dirs, Data.Decl.Attributes);
+ 
        Last_Source_Dir : String_List_Id  := Nil_String;
  
        procedure Find_Source_Dirs (From : Name_Id; Location : Source_Ptr);
        --  Find one or several source directories, and add them
*************** package body Prj.Nmsc is
*** 2573,2582 ****
           Directory : constant String := Get_Name_String (From);
           Element   : String_Element;
  
-          Canonical_Directory_Id : Name_Id;
-          pragma Unreferenced (Canonical_Directory_Id);
-          --  Is this in fact being used for anything useful ???
- 
           procedure Recursive_Find_Dirs (Path : Name_Id);
           --  Find all the subdirectories (recursively) of Path and add them
           --  to the list of source directories of the project.
--- 2702,2707 ----
*************** package body Prj.Nmsc is
*** 2593,2728 ****
              Element  : String_Element;
              Found    : Boolean := False;
  
!             Canonical_Path : Name_Id := No_Name;
  
           begin
!             Get_Name_String (Path);
              Canonical_Case_File_Name (Name_Buffer (1 .. Name_Len));
  
!             declare
!                The_Path : constant String :=
!                             Normalize_Pathname
!                               (Name => Name_Buffer (1 .. Name_Len)) &
!                                Directory_Separator;
  
!                The_Path_Last : constant Natural :=
!                                  Compute_Directory_Last (The_Path);
  
!             begin
!                Name_Len := The_Path_Last - The_Path'First + 1;
!                Name_Buffer (1 .. Name_Len) :=
!                  The_Path (The_Path'First .. The_Path_Last);
!                Canonical_Path := Name_Find;
  
!                --  To avoid processing the same directory several times, check
!                --  if the directory is already in Recursive_Dirs. If it is,
!                --  then there is nothing to do, just return. If it is not, put
!                --  it there and continue recursive processing.
  
!                if Recursive_Dirs.Get (Canonical_Path) then
!                   return;
  
!                else
!                   Recursive_Dirs.Set (Canonical_Path, True);
                 end if;
  
!                --  Check if directory is already in list
! 
!                while List /= Nil_String loop
!                   Element := String_Elements.Table (List);
! 
!                   if Element.Value /= No_Name then
!                      Get_Name_String (Element.Value);
!                      Found :=
!                        The_Path (The_Path'First .. The_Path_Last) =
!                        Name_Buffer (1 .. Name_Len);
!                      exit when Found;
!                   end if;
! 
!                   List := Element.Next;
!                end loop;
! 
!                --  If directory is not already in list, put it there
! 
!                if not Found then
!                   if Current_Verbosity = High then
!                      Write_Str  ("   ");
!                      Write_Line (The_Path (The_Path'First .. The_Path_Last));
!                   end if;
  
!                   String_Elements.Increment_Last;
!                   Element :=
!                     (Value    => Canonical_Path,
!                      Display_Value => No_Name,
!                      Location => No_Location,
!                      Flag     => False,
!                      Next     => Nil_String);
  
!                   --  Case of first source directory
  
!                   if Last_Source_Dir = Nil_String then
!                      Data.Source_Dirs := String_Elements.Last;
  
!                      --  Here we already have source directories.
  
!                   else
!                      --  Link the previous last to the new one
  
!                      String_Elements.Table (Last_Source_Dir).Next :=
!                        String_Elements.Last;
!                   end if;
  
!                   --  And register this source directory as the new last
  
!                   Last_Source_Dir  := String_Elements.Last;
!                   String_Elements.Table (Last_Source_Dir) := Element;
                 end if;
  
!                --  Now look for subdirectories. We do that even when this
!                --  directory is already in the list, because some of its
!                --  subdirectories may not be in the list yet.
  
!                Open (Dir, The_Path (The_Path'First .. The_Path_Last));
  
!                loop
!                   Read (Dir, Name, Last);
!                   exit when Last = 0;
  
!                   if Name (1 .. Last) /= "."
!                     and then Name (1 .. Last) /= ".."
!                   then
!                      --  Avoid . and ..
  
!                      if Current_Verbosity = High then
!                         Write_Str  ("   Checking ");
!                         Write_Line (Name (1 .. Last));
!                      end if;
  
!                      declare
!                         Path_Name : String :=
!                                       Normalize_Pathname
!                                         (Name      => Name (1 .. Last),
!                                          Directory =>
!                                            The_Path
!                                             (The_Path'First .. The_Path_Last));
  
!                      begin
!                         Canonical_Case_File_Name (Path_Name);
  
!                         if Is_Directory (Path_Name) then
  
!                            --  We have found a new subdirectory, call self
  
!                            Name_Len := Path_Name'Length;
!                            Name_Buffer (1 .. Name_Len) := Path_Name;
!                            Recursive_Find_Dirs (Name_Find);
!                         end if;
!                      end;
!                   end if;
!                end loop;
  
!                Close (Dir);
!             end;
  
           exception
              when Directory_Error =>
--- 2718,2848 ----
              Element  : String_Element;
              Found    : Boolean := False;
  
!             Non_Canonical_Path : Name_Id := No_Name;
!             Canonical_Path     : Name_Id := No_Name;
! 
!             The_Path : constant String :=
!                          Normalize_Pathname (Get_Name_String (Path)) &
!                          Directory_Separator;
! 
!             The_Path_Last : constant Natural :=
!                               Compute_Directory_Last (The_Path);
  
           begin
!             Name_Len := The_Path_Last - The_Path'First + 1;
!             Name_Buffer (1 .. Name_Len) :=
!               The_Path (The_Path'First .. The_Path_Last);
!             Non_Canonical_Path := Name_Find;
!             Get_Name_String (Non_Canonical_Path);
              Canonical_Case_File_Name (Name_Buffer (1 .. Name_Len));
+             Canonical_Path := Name_Find;
  
!             --  To avoid processing the same directory several times, check
!             --  if the directory is already in Recursive_Dirs. If it is,
!             --  then there is nothing to do, just return. If it is not, put
!             --  it there and continue recursive processing.
  
!             if Recursive_Dirs.Get (Canonical_Path) then
!                return;
  
!             else
!                Recursive_Dirs.Set (Canonical_Path, True);
!             end if;
  
!             --  Check if directory is already in list
  
!             while List /= Nil_String loop
!                Element := String_Elements.Table (List);
  
!                if Element.Value /= No_Name then
!                   Found := Element.Value = Canonical_Path;
!                   exit when Found;
                 end if;
  
!                List := Element.Next;
!             end loop;
  
!             --  If directory is not already in list, put it there
  
!             if not Found then
!                if Current_Verbosity = High then
!                   Write_Str  ("   ");
!                   Write_Line (The_Path (The_Path'First .. The_Path_Last));
!                end if;
  
!                String_Elements.Increment_Last;
!                Element :=
!                  (Value    => Canonical_Path,
!                   Display_Value => Non_Canonical_Path,
!                   Location => No_Location,
!                   Flag     => False,
!                   Next     => Nil_String,
!                   Index    => 0);
  
!                --  Case of first source directory
  
!                if Last_Source_Dir = Nil_String then
!                   Data.Source_Dirs := String_Elements.Last;
  
!                   --  Here we already have source directories
  
!                else
!                   --  Link the previous last to the new one
  
!                   String_Elements.Table (Last_Source_Dir).Next :=
!                     String_Elements.Last;
                 end if;
  
!                --  And register this source directory as the new last
  
!                Last_Source_Dir  := String_Elements.Last;
!                String_Elements.Table (Last_Source_Dir) := Element;
!             end if;
  
!             --  Now look for subdirectories. We do that even when this
!             --  directory is already in the list, because some of its
!             --  subdirectories may not be in the list yet.
  
!             Open (Dir, The_Path (The_Path'First .. The_Path_Last));
  
!             loop
!                Read (Dir, Name, Last);
!                exit when Last = 0;
  
!                if Name (1 .. Last) /= "."
!                  and then Name (1 .. Last) /= ".."
!                then
!                   --  Avoid . and .. directories
  
!                   if Current_Verbosity = High then
!                      Write_Str  ("   Checking ");
!                      Write_Line (Name (1 .. Last));
!                   end if;
  
!                   declare
!                      Path_Name : constant String :=
!                                    Normalize_Pathname
!                                      (Name      => Name (1 .. Last),
!                                       Directory =>
!                                         The_Path
!                                           (The_Path'First .. The_Path_Last),
!                                       Resolve_Links  => False,
!                                       Case_Sensitive => True);
  
!                   begin
!                      if Is_Directory (Path_Name) then
  
!                         --  We have found a new subdirectory, call self
  
!                         Name_Len := Path_Name'Length;
!                         Name_Buffer (1 .. Name_Len) := Path_Name;
!                         Recursive_Find_Dirs (Name_Find);
!                      end if;
!                   end;
!                end if;
!             end loop;
! 
!             Close (Dir);
  
           exception
              when Directory_Error =>
*************** package body Prj.Nmsc is
*** 2734,2752 ****
        begin
           if Current_Verbosity = High then
              Write_Str ("Find_Source_Dirs (""");
-          end if;
- 
-          Get_Name_String (From);
-          Canonical_Case_File_Name (Name_Buffer (1 .. Name_Len));
- 
-          --  Directory    := Name_Buffer (1 .. Name_Len);
-          --  Why is above line commented out ???
- 
-          Canonical_Directory_Id := Name_Find;
-          --  What is purpose of above assignment ???
-          --  Are we sure it is being used ???
- 
-          if Current_Verbosity = High then
              Write_Str (Directory);
              Write_Line (""")");
           end if;
--- 2854,2859 ----
*************** package body Prj.Nmsc is
*** 2789,2795 ****
                              Normalize_Pathname
                                (Name      => Get_Name_String (Base_Dir),
                                 Directory =>
!                                  Get_Name_String (Data.Display_Directory));
  
              begin
                 if Root_Dir'Length = 0 then
--- 2896,2904 ----
                              Normalize_Pathname
                                (Name      => Get_Name_String (Base_Dir),
                                 Directory =>
!                                  Get_Name_String (Data.Display_Directory),
!                                Resolve_Links  => False,
!                                Case_Sensitive => True);
  
              begin
                 if Root_Dir'Length = 0 then
*************** package body Prj.Nmsc is
*** 2808,2815 ****
                    end if;
  
                 else
!                   --  We have an existing directory,
!                   --  we register it and all of its subdirectories.
  
                    if Current_Verbosity = High then
                       Write_Line ("Looking for source directories:");
--- 2917,2924 ----
                    end if;
  
                 else
!                   --  We have an existing directory, we register it and all
!                   --  of its subdirectories.
  
                    if Current_Verbosity = High then
                       Write_Line ("Looking for source directories:");
*************** package body Prj.Nmsc is
*** 2829,2839 ****
  
           else
              declare
!                Path_Name : Name_Id;
                 Display_Path_Name : Name_Id;
              begin
                 Locate_Directory
                   (From, Data.Display_Directory, Path_Name, Display_Path_Name);
                 if Path_Name = No_Name then
                    Err_Vars.Error_Msg_Name_1 := From;
  
--- 2938,2950 ----
  
           else
              declare
!                Path_Name         : Name_Id;
                 Display_Path_Name : Name_Id;
+ 
              begin
                 Locate_Directory
                   (From, Data.Display_Directory, Path_Name, Display_Path_Name);
+ 
                 if Path_Name = No_Name then
                    Err_Vars.Error_Msg_Name_1 := From;
  
*************** package body Prj.Nmsc is
*** 2848,2855 ****
                          "{ is not a valid directory",
                          Location);
                    end if;
-                else
  
                    --  As it is an existing directory, we add it to
                    --  the list of directories.
  
--- 2959,2966 ----
                          "{ is not a valid directory",
                          Location);
                    end if;
  
+                else
                    --  As it is an existing directory, we add it to
                    --  the list of directories.
  
*************** package body Prj.Nmsc is
*** 2880,2957 ****
           end if;
        end Find_Source_Dirs;
  
!    --  Start of processing for Language_Independent_Check
  
     begin
-       if Data.Language_Independent_Checked then
-          return;
-       end if;
- 
-       Data.Language_Independent_Checked := True;
- 
-       Error_Report := Report_Error;
- 
-       Recursive_Dirs.Reset;
- 
        if Current_Verbosity = High then
           Write_Line ("Starting to look for directories");
        end if;
  
        --  Check the object directory
  
!       declare
!          Object_Dir : constant Variable_Value :=
!                         Util.Value_Of (Name_Object_Dir, Data.Decl.Attributes);
  
!       begin
!          pragma Assert (Object_Dir.Kind = Single,
!                         "Object_Dir is not a single string");
  
!          --  We set the object directory to its default
  
!          Data.Object_Directory   := Data.Directory;
!          Data.Display_Object_Dir := Data.Display_Directory;
  
!          if Object_Dir.Value /= Empty_String then
  
!             Get_Name_String (Object_Dir.Value);
  
!             if Name_Len = 0 then
!                Error_Msg
!                  (Project,
!                   "Object_Dir cannot be empty",
!                   Object_Dir.Location);
  
!             else
!                --  We check that the specified object directory
!                --  does exist.
  
!                Locate_Directory
!                  (Object_Dir.Value, Data.Display_Directory,
!                   Data.Object_Directory, Data.Display_Object_Dir);
  
!                if Data.Object_Directory = No_Name then
!                   --  The object directory does not exist, report an error
!                   Err_Vars.Error_Msg_Name_1 := Object_Dir.Value;
!                   Error_Msg
!                     (Project,
!                      "the object directory { cannot be found",
!                      Data.Location);
  
!                   --  Do not keep a nil Object_Directory. Set it to the
!                   --  specified (relative or absolute) path.
!                   --  This is for the benefit of tools that recover from
!                   --  errors; for example, these tools could create the
!                   --  non existent directory.
  
!                   Data.Display_Object_Dir := Object_Dir.Value;
!                   Get_Name_String (Object_Dir.Value);
!                   Canonical_Case_File_Name (Name_Buffer (1 .. Name_Len));
!                   Data.Object_Directory := Name_Find;
!                end if;
              end if;
           end if;
!       end;
  
        if Current_Verbosity = High then
           if Data.Object_Directory = No_Name then
--- 2991,3051 ----
           end if;
        end Find_Source_Dirs;
  
!    --  Start of processing for Get_Directories
  
     begin
        if Current_Verbosity = High then
           Write_Line ("Starting to look for directories");
        end if;
  
        --  Check the object directory
  
!       pragma Assert (Object_Dir.Kind = Single,
!                      "Object_Dir is not a single string");
  
!       --  We set the object directory to its default
  
!       Data.Object_Directory   := Data.Directory;
!       Data.Display_Object_Dir := Data.Display_Directory;
  
!       if Object_Dir.Value /= Empty_String then
!          Get_Name_String (Object_Dir.Value);
  
!          if Name_Len = 0 then
!             Error_Msg
!               (Project,
!                "Object_Dir cannot be empty",
!                Object_Dir.Location);
  
!          else
!             --  We check that the specified object directory does exist
  
!             Locate_Directory
!               (Object_Dir.Value, Data.Display_Directory,
!                Data.Object_Directory, Data.Display_Object_Dir);
  
!             if Data.Object_Directory = No_Name then
  
!                --  The object directory does not exist, report an error
  
!                Err_Vars.Error_Msg_Name_1 := Object_Dir.Value;
!                Error_Msg
!                  (Project,
!                   "the object directory { cannot be found",
!                   Data.Location);
  
!                --  Do not keep a nil Object_Directory. Set it to the specified
!                --  (relative or absolute) path. This is for the benefit of
!                --  tools that recover from errors; for example, these tools
!                --  could create the non existent directory.
  
!                Data.Display_Object_Dir := Object_Dir.Value;
!                Get_Name_String (Object_Dir.Value);
!                Canonical_Case_File_Name (Name_Buffer (1 .. Name_Len));
!                Data.Object_Directory := Name_Find;
              end if;
           end if;
!       end if;
  
        if Current_Verbosity = High then
           if Data.Object_Directory = No_Name then
*************** package body Prj.Nmsc is
*** 2965,3011 ****
  
        --  Check the exec directory
  
!       declare
!          Exec_Dir : constant Variable_Value :=
!                       Util.Value_Of (Name_Exec_Dir, Data.Decl.Attributes);
  
!       begin
!          pragma Assert (Exec_Dir.Kind = Single,
!                         "Exec_Dir is not a single string");
  
!          --  We set the object directory to its default
  
!          Data.Exec_Directory   := Data.Object_Directory;
!          Data.Display_Exec_Dir := Data.Display_Object_Dir;
  
!          if Exec_Dir.Value /= Empty_String then
  
!             Get_Name_String (Exec_Dir.Value);
  
!             if Name_Len = 0 then
                 Error_Msg
                   (Project,
!                   "Exec_Dir cannot be empty",
!                   Exec_Dir.Location);
! 
!             else
!                --  We check that the specified object directory
!                --  does exist.
! 
!                Locate_Directory
!                  (Exec_Dir.Value, Data.Directory,
!                   Data.Exec_Directory, Data.Display_Exec_Dir);
! 
!                if Data.Exec_Directory = No_Name then
!                   Err_Vars.Error_Msg_Name_1 := Exec_Dir.Value;
!                   Error_Msg
!                     (Project,
!                      "the exec directory { cannot be found",
!                      Data.Location);
!                end if;
              end if;
           end if;
!       end;
  
        if Current_Verbosity = High then
           if Data.Exec_Directory = No_Name then
--- 3059,3098 ----
  
        --  Check the exec directory
  
!       pragma Assert (Exec_Dir.Kind = Single,
!                      "Exec_Dir is not a single string");
  
!       --  We set the object directory to its default
  
!       Data.Exec_Directory   := Data.Object_Directory;
!       Data.Display_Exec_Dir := Data.Display_Object_Dir;
  
!       if Exec_Dir.Value /= Empty_String then
!          Get_Name_String (Exec_Dir.Value);
  
!          if Name_Len = 0 then
!             Error_Msg
!               (Project,
!                "Exec_Dir cannot be empty",
!                Exec_Dir.Location);
  
!          else
!             --  We check that the specified object directory
!             --  does exist.
  
!             Locate_Directory
!               (Exec_Dir.Value, Data.Directory,
!                Data.Exec_Directory, Data.Display_Exec_Dir);
! 
!             if Data.Exec_Directory = No_Name then
!                Err_Vars.Error_Msg_Name_1 := Exec_Dir.Value;
                 Error_Msg
                   (Project,
!                   "the exec directory { cannot be found",
!                   Data.Location);
              end if;
           end if;
!       end if;
  
        if Current_Verbosity = High then
           if Data.Exec_Directory = No_Name then
*************** package body Prj.Nmsc is
*** 3019,3545 ****
  
        --  Look for the source directories
  
!       declare
!          Source_Dirs : constant Variable_Value :=
!                          Util.Value_Of
!                            (Name_Source_Dirs, Data.Decl.Attributes);
! 
!       begin
!          if Current_Verbosity = High then
!             Write_Line ("Starting to look for source directories");
!          end if;
! 
!          pragma Assert (Source_Dirs.Kind = List,
!                           "Source_Dirs is not a list");
! 
!          if Source_Dirs.Default then
! 
!             --  No Source_Dirs specified: the single source directory
!             --  is the one containing the project file
! 
!             String_Elements.Increment_Last;
!             Data.Source_Dirs := String_Elements.Last;
!             String_Elements.Table (Data.Source_Dirs) :=
!               (Value    => Data.Directory,
!                Display_Value => Data.Display_Directory,
!                Location => No_Location,
!                Flag     => False,
!                Next     => Nil_String);
  
!             if Current_Verbosity = High then
!                Write_Line ("Single source directory:");
!                Write_Str ("    """);
!                Write_Str (Get_Name_String (Data.Display_Directory));
!                Write_Line ("""");
!             end if;
  
!          elsif Source_Dirs.Values = Nil_String then
  
!             --  If Source_Dirs is an empty string list, this means
!             --  that this project contains no source. For projects that
!             --  don't extend other projects, this also means that there is no
!             --  need for an object directory, if not specified.
  
!             if Data.Extends = No_Project
!               and then  Data.Object_Directory = Data.Directory
!             then
!                Data.Object_Directory := No_Name;
!             end if;
  
!             Data.Source_Dirs     := Nil_String;
!             Data.Sources_Present := False;
  
!          else
!             declare
!                Source_Dir : String_List_Id := Source_Dirs.Values;
!                Element    : String_Element;
  
!             begin
!                --  We will find the source directories for each
!                --  element of the list
  
!                while Source_Dir /= Nil_String loop
!                   Element := String_Elements.Table (Source_Dir);
!                   Find_Source_Dirs (Element.Value, Element.Location);
!                   Source_Dir := Element.Next;
!                end loop;
!             end;
           end if;
  
!          if Current_Verbosity = High then
!             Write_Line ("Putting source directories in canonical cases");
!          end if;
  
           declare
!             Current : String_List_Id := Data.Source_Dirs;
!             Element : String_Element;
  
           begin
!             while Current /= Nil_String loop
!                Element := String_Elements.Table (Current);
!                if Element.Value /= No_Name then
!                   Element.Display_Value := Element.Value;
!                   Get_Name_String (Element.Value);
!                   Canonical_Case_File_Name (Name_Buffer (1 .. Name_Len));
!                   Element.Value := Name_Find;
!                   String_Elements.Table (Current) := Element;
!                end if;
  
!                Current := Element.Next;
              end loop;
           end;
!       end;
  
!       --  Library attributes
  
        declare
!          Attributes : constant Prj.Variable_Id := Data.Decl.Attributes;
! 
!          Lib_Dir : constant Prj.Variable_Value :=
!                      Prj.Util.Value_Of (Snames.Name_Library_Dir, Attributes);
! 
!          Lib_Name : constant Prj.Variable_Value :=
!                       Prj.Util.Value_Of (Snames.Name_Library_Name, Attributes);
  
!          Lib_Version : constant Prj.Variable_Value :=
!                          Prj.Util.Value_Of
!                            (Snames.Name_Library_Version, Attributes);
  
!          The_Lib_Kind : constant Prj.Variable_Value :=
!                           Prj.Util.Value_Of
!                             (Snames.Name_Library_Kind, Attributes);
  
!       begin
!          --  Special case of extending project
  
!          if Data.Extends /= No_Project then
!             declare
!                Extended_Data : constant Project_Data :=
!                  Projects.Table (Data.Extends);
  
!             begin
!                --  If the project extended is a library project, we inherit
!                --  the library name, if it is not redefined; we check that
!                --  the library directory is specified; and we reset the
!                --  library flag for the extended project.
  
!                if Extended_Data.Library then
!                   if Lib_Name.Default then
!                      Data.Library_Name := Extended_Data.Library_Name;
!                   end if;
  
!                   if Lib_Dir.Default then
  
!                      --  If the extending project is a virtual project, we
!                      --  put the error message in the library project that
!                      --  is extended, rather than in the extending all project.
!                      --  Of course, we cannot put it in the virtual extending
!                      --  project, because it has no source.
  
!                      if Data.Virtual then
!                         Error_Msg_Name_1 := Extended_Data.Name;
  
!                         Error_Msg
!                           (Project,
!                            "library project % cannot be virtually extended",
!                            Extended_Data.Location);
  
!                      else
!                         Error_Msg
!                           (Project,
!                            "a project extending a library project must " &
!                            "specify an attribute Library_Dir",
!                            Data.Location);
!                      end if;
!                   end if;
  
!                   Projects.Table (Data.Extends).Library := False;
!                end if;
!             end;
!          end if;
  
!          pragma Assert (Lib_Dir.Kind = Single);
  
!          if Lib_Dir.Value = Empty_String then
  
!             if Current_Verbosity = High then
!                Write_Line ("No library directory");
!             end if;
  
!          else
!             --  Find path name, check that it is a directory
  
!             Locate_Directory
!               (Lib_Dir.Value, Data.Display_Directory,
!                Data.Library_Dir, Data.Display_Library_Dir);
  
!             if Data.Library_Dir = No_Name then
  
!                --  Get the absolute name of the library directory that
!                --  does not exist, to report an error.
  
!                declare
!                   Dir_Name : constant String :=
!                     Get_Name_String (Lib_Dir.Value);
!                begin
!                   if Is_Absolute_Path (Dir_Name) then
!                      Err_Vars.Error_Msg_Name_1 := Lib_Dir.Value;
  
!                   else
!                      Get_Name_String (Data.Display_Directory);
  
!                      if Name_Buffer (Name_Len) /= Directory_Separator then
!                         Name_Len := Name_Len + 1;
!                         Name_Buffer (Name_Len) := Directory_Separator;
!                      end if;
  
!                      Name_Buffer
!                        (Name_Len + 1 .. Name_Len + Dir_Name'Length) :=
!                        Dir_Name;
!                      Name_Len := Name_Len + Dir_Name'Length;
!                      Err_Vars.Error_Msg_Name_1 := Name_Find;
!                   end if;
  
!                   --  Report the error
  
!                   Error_Msg
!                     (Project,
!                      "library directory { does not exist",
!                      Lib_Dir.Location);
!                end;
  
!             elsif Data.Library_Dir = Data.Object_Directory then
!                Error_Msg
!                  (Project,
!                   "library directory cannot be the same " &
!                   "as object directory",
!                   Lib_Dir.Location);
!                Data.Library_Dir := No_Name;
!                Data.Display_Library_Dir := No_Name;
  
!             else
!                if Current_Verbosity = High then
!                   Write_Str ("Library directory =""");
!                   Write_Str (Get_Name_String (Data.Display_Library_Dir));
!                   Write_Line ("""");
!                end if;
              end if;
           end if;
  
!          pragma Assert (Lib_Name.Kind = Single);
  
!          if Lib_Name.Value = Empty_String then
!             if Current_Verbosity = High
!               and then Data.Library_Name = No_Name
!             then
!                Write_Line ("No library name");
!             end if;
  
!          else
!             --  There is no restriction on the syntax of library names
  
!             Data.Library_Name := Lib_Name.Value;
!          end if;
  
!          if Data.Library_Name /= No_Name
!            and then Current_Verbosity = High
!          then
!             Write_Str ("Library name = """);
!             Write_Str (Get_Name_String (Data.Library_Name));
!             Write_Line ("""");
!          end if;
  
!          Data.Library :=
!            Data.Library_Dir /= No_Name
!              and then
!            Data.Library_Name /= No_Name;
  
!          if Data.Library then
!             if MLib.Tgt.Support_For_Libraries = MLib.Tgt.None then
!                Error_Msg
!                  (Project,
!                   "?libraries are not supported on this platform",
!                   Lib_Name.Location);
!                Data.Library := False;
  
!             else
!                pragma Assert (Lib_Version.Kind = Single);
  
!                if Lib_Version.Value = Empty_String then
!                   if Current_Verbosity = High then
!                      Write_Line ("No library version specified");
!                   end if;
  
!                else
!                   Data.Lib_Internal_Name := Lib_Version.Value;
!                end if;
  
!                pragma Assert (The_Lib_Kind.Kind = Single);
  
!                if The_Lib_Kind.Value = Empty_String then
!                   if Current_Verbosity = High then
!                      Write_Line ("No library kind specified");
!                   end if;
  
!                else
!                   Get_Name_String (The_Lib_Kind.Value);
  
!                   declare
!                      Kind_Name : constant String :=
!                                    To_Lower (Name_Buffer (1 .. Name_Len));
  
!                      OK : Boolean := True;
  
!                   begin
!                      if Kind_Name = "static" then
!                         Data.Library_Kind := Static;
  
!                      elsif Kind_Name = "dynamic" then
!                         Data.Library_Kind := Dynamic;
  
!                      elsif Kind_Name = "relocatable" then
!                         Data.Library_Kind := Relocatable;
  
!                      else
!                         Error_Msg
!                           (Project,
!                            "illegal value for Library_Kind",
!                            The_Lib_Kind.Location);
!                         OK := False;
!                      end if;
  
!                      if Current_Verbosity = High and then OK then
!                         Write_Str ("Library kind = ");
!                         Write_Line (Kind_Name);
!                      end if;
  
!                      if Data.Library_Kind /= Static and then
!                        MLib.Tgt.Support_For_Libraries = MLib.Tgt.Static_Only
!                      then
!                         Error_Msg
!                           (Project,
!                            "only static libraries are supported " &
!                            "on this platform",
!                           The_Lib_Kind.Location);
!                         Data.Library := False;
!                      end if;
!                   end;
!                end if;
  
!                if Data.Library and then Current_Verbosity = High then
!                   Write_Line ("This is a library project file");
                 end if;
  
              end if;
           end if;
-       end;
- 
-       if Current_Verbosity = High then
-          Show_Source_Dirs (Project);
-       end if;
- 
-       declare
-          Naming_Id : constant Package_Id :=
-                        Util.Value_Of (Name_Naming, Data.Decl.Packages);
  
!          Naming    : Package_Element;
  
!       begin
!          --  If there is a package Naming, we will put in Data.Naming
!          --  what is in this package Naming.
  
!          if Naming_Id /= No_Package then
!             Naming := Packages.Table (Naming_Id);
  
              if Current_Verbosity = High then
!                Write_Line ("Checking ""Naming"".");
              end if;
  
!             --  Check Spec_Suffix
! 
!             declare
!                Spec_Suffixs : Array_Element_Id :=
!                                 Util.Value_Of
!                                   (Name_Spec_Suffix,
!                                    Naming.Decl.Arrays);
!                Suffix  : Array_Element_Id;
!                Element : Array_Element;
!                Suffix2 : Array_Element_Id;
! 
!             begin
!                --  If some suffixs have been specified, we make sure that
!                --  for each language for which a default suffix has been
!                --  specified, there is a suffix specified, either the one
!                --  in the project file or if there were none, the default.
! 
!                if Spec_Suffixs /= No_Array_Element then
!                   Suffix := Data.Naming.Spec_Suffix;
! 
!                   while Suffix /= No_Array_Element loop
!                      Element := Array_Elements.Table (Suffix);
!                      Suffix2 := Spec_Suffixs;
  
!                      while Suffix2 /= No_Array_Element loop
!                         exit when Array_Elements.Table (Suffix2).Index =
!                           Element.Index;
!                         Suffix2 := Array_Elements.Table (Suffix2).Next;
!                      end loop;
  
!                      --  There is a registered default suffix, but no
!                      --  suffix specified in the project file.
!                      --  Add the default to the array.
  
!                      if Suffix2 = No_Array_Element then
!                         Array_Elements.Increment_Last;
!                         Array_Elements.Table (Array_Elements.Last) :=
!                           (Index => Element.Index,
!                            Index_Case_Sensitive => False,
!                            Value => Element.Value,
!                            Next  => Spec_Suffixs);
!                         Spec_Suffixs := Array_Elements.Last;
!                      end if;
  
!                      Suffix := Element.Next;
!                   end loop;
  
!                   --  Put the resulting array as the specification suffixs
  
-                   Data.Naming.Spec_Suffix := Spec_Suffixs;
                 end if;
!             end;
  
              declare
!                Current : Array_Element_Id := Data.Naming.Spec_Suffix;
!                Element : Array_Element;
  
              begin
!                while Current /= No_Array_Element loop
!                   Element := Array_Elements.Table (Current);
!                   Get_Name_String (Element.Value.Value);
  
!                   if Name_Len = 0 then
!                      Error_Msg
!                        (Project,
!                         "Spec_Suffix cannot be empty",
!                         Element.Value.Location);
                    end if;
  
!                   Array_Elements.Table (Current) := Element;
!                   Current := Element.Next;
                 end loop;
              end;
  
!             --  Check Body_Suffix
  
!             declare
!                Impl_Suffixs : Array_Element_Id :=
!                                 Util.Value_Of
!                                   (Name_Body_Suffix,
!                                    Naming.Decl.Arrays);
  
!                Suffix  : Array_Element_Id;
!                Element : Array_Element;
!                Suffix2 : Array_Element_Id;
  
!             begin
!                --  If some suffixs have been specified, we make sure that
!                --  for each language for which a default suffix has been
!                --  specified, there is a suffix specified, either the one
!                --  in the project file or if there were noe, the default.
  
!                if Impl_Suffixs /= No_Array_Element then
!                   Suffix := Data.Naming.Body_Suffix;
  
!                   while Suffix /= No_Array_Element loop
!                      Element := Array_Elements.Table (Suffix);
!                      Suffix2 := Impl_Suffixs;
  
!                      while Suffix2 /= No_Array_Element loop
!                         exit when Array_Elements.Table (Suffix2).Index =
!                           Element.Index;
!                         Suffix2 := Array_Elements.Table (Suffix2).Next;
!                      end loop;
  
!                      --  There is a registered default suffix, but no
!                      --  suffix specified in the project file.
!                      --  Add the default to the array.
  
!                      if Suffix2 = No_Array_Element then
!                         Array_Elements.Increment_Last;
!                         Array_Elements.Table (Array_Elements.Last) :=
!                           (Index => Element.Index,
!                            Index_Case_Sensitive => False,
!                            Value => Element.Value,
!                            Next  => Impl_Suffixs);
!                         Impl_Suffixs := Array_Elements.Last;
!                      end if;
  
!                      Suffix := Element.Next;
!                   end loop;
  
!                   --  Put the resulting array as the implementation suffixs
  
!                   Data.Naming.Body_Suffix := Impl_Suffixs;
!                end if;
!             end;
  
!             declare
!                Current : Array_Element_Id := Data.Naming.Body_Suffix;
!                Element : Array_Element;
  
!             begin
!                while Current /= No_Array_Element loop
!                   Element := Array_Elements.Table (Current);
!                   Get_Name_String (Element.Value.Value);
  
-                   if Name_Len = 0 then
-                      Error_Msg
-                        (Project,
-                         "Body_Suffix cannot be empty",
-                         Element.Value.Location);
                    end if;
  
!                   Array_Elements.Table (Current) := Element;
!                   Current := Element.Next;
!                end loop;
!             end;
  
!             --  Get the exceptions, if any
  
!             Data.Naming.Specification_Exceptions :=
!               Util.Value_Of
!                 (Name_Specification_Exceptions,
!                  In_Arrays => Naming.Decl.Arrays);
  
-             Data.Naming.Implementation_Exceptions :=
-               Util.Value_Of
-                 (Name_Implementation_Exceptions,
-                  In_Arrays => Naming.Decl.Arrays);
-          end if;
        end;
  
!       Projects.Table (Project) := Data;
!    end Language_Independent_Check;
  
     ----------------------
     -- Locate_Directory --
--- 3106,3593 ----
  
        --  Look for the source directories
  
!       if Current_Verbosity = High then
!          Write_Line ("Starting to look for source directories");
!       end if;
  
!       pragma Assert (Source_Dirs.Kind = List, "Source_Dirs is not a list");
  
!       if Source_Dirs.Default then
  
!          --  No Source_Dirs specified: the single source directory
!          --  is the one containing the project file
  
!          String_Elements.Increment_Last;
!          Data.Source_Dirs := String_Elements.Last;
!          String_Elements.Table (Data.Source_Dirs) :=
!            (Value         => Data.Directory,
!             Display_Value => Data.Display_Directory,
!             Location      => No_Location,
!             Flag          => False,
!             Next          => Nil_String,
!             Index         => 0);
  
!          if Current_Verbosity = High then
!             Write_Line ("Single source directory:");
!             Write_Str ("    """);
!             Write_Str (Get_Name_String (Data.Display_Directory));
!             Write_Line ("""");
!          end if;
  
!       elsif Source_Dirs.Values = Nil_String then
  
!          --  If Source_Dirs is an empty string list, this means
!          --  that this project contains no source. For projects that
!          --  don't extend other projects, this also means that there is no
!          --  need for an object directory, if not specified.
  
!          if Data.Extends = No_Project
!            and then  Data.Object_Directory = Data.Directory
!          then
!             Data.Object_Directory := No_Name;
           end if;
  
!          Data.Source_Dirs           := Nil_String;
!          Data.Ada_Sources_Present   := False;
!          Data.Other_Sources_Present := False;
  
+       else
           declare
!             Source_Dir : String_List_Id := Source_Dirs.Values;
!             Element    : String_Element;
  
           begin
!             --  We will find the source directories for each
!             --  element of the list
  
!             while Source_Dir /= Nil_String loop
!                Element := String_Elements.Table (Source_Dir);
!                Find_Source_Dirs (Element.Value, Element.Location);
!                Source_Dir := Element.Next;
              end loop;
           end;
!       end if;
  
!       if Current_Verbosity = High then
!          Write_Line ("Putting source directories in canonical cases");
!       end if;
  
        declare
!          Current : String_List_Id := Data.Source_Dirs;
!          Element : String_Element;
  
!       begin
!          while Current /= Nil_String loop
!             Element := String_Elements.Table (Current);
!             if Element.Value /= No_Name then
!                Get_Name_String (Element.Value);
!                Canonical_Case_File_Name (Name_Buffer (1 .. Name_Len));
!                Element.Value := Name_Find;
!                String_Elements.Table (Current) := Element;
!             end if;
  
!             Current := Element.Next;
!          end loop;
!       end;
  
!    end Get_Directories;
  
!    ---------------
!    -- Get_Mains --
!    ---------------
  
!    procedure Get_Mains (Project : Project_Id; Data : in out Project_Data) is
!       Mains : constant Variable_Value :=
!                 Prj.Util.Value_Of (Name_Main, Data.Decl.Attributes);
  
!    begin
!       Data.Mains := Mains.Values;
  
!       --  If no Mains were specified, and if we are an extending
!       --  project, inherit the Mains from the project we are extending.
  
!       if Mains.Default then
!          if Data.Extends /= No_Project then
!             Data.Mains := Projects.Table (Data.Extends).Mains;
!          end if;
  
!       --  In a library project file, Main cannot be specified
  
!       elsif Data.Library then
!          Error_Msg
!            (Project,
!             "a library project file cannot have Main specified",
!             Mains.Location);
!       end if;
!    end Get_Mains;
  
!    ---------------------------
!    -- Get_Sources_From_File --
!    ---------------------------
  
!    procedure Get_Sources_From_File
!      (Path     : String;
!       Location : Source_Ptr;
!       Project  : Project_Id)
!    is
!       File        : Prj.Util.Text_File;
!       Line        : String (1 .. 250);
!       Last        : Natural;
!       Source_Name : Name_Id;
  
!    begin
!       Source_Names.Reset;
  
!       if Current_Verbosity = High then
!          Write_Str  ("Opening """);
!          Write_Str  (Path);
!          Write_Line (""".");
!       end if;
  
!       --  Open the file
  
!       Prj.Util.Open (File, Path);
  
!       if not Prj.Util.Is_Valid (File) then
!          Error_Msg (Project, "file does not exist", Location);
!       else
!          --  Read the lines one by one
  
!          while not Prj.Util.End_Of_File (File) loop
!             Prj.Util.Get_Line (File, Line, Last);
  
!             --  A non empty, non comment line should contain a file name
  
!             if Last /= 0
!               and then (Last = 1 or else Line (1 .. 2) /= "--")
!             then
!                --  ??? we should check that there is no directory information
  
!                Name_Len := Last;
!                Name_Buffer (1 .. Name_Len) := Line (1 .. Last);
!                Canonical_Case_File_Name (Name_Buffer (1 .. Name_Len));
!                Source_Name := Name_Find;
!                Source_Names.Set
!                  (K => Source_Name,
!                   E =>
!                     (Name     => Source_Name,
!                      Location => Location,
!                      Found    => False));
!             end if;
!          end loop;
  
!          Prj.Util.Close (File);
  
!       end if;
!    end Get_Sources_From_File;
  
!    --------------
!    -- Get_Unit --
!    --------------
  
!    procedure Get_Unit
!      (Canonical_File_Name : Name_Id;
!       Naming              : Naming_Data;
!       Exception_Id        : out Ada_Naming_Exception_Id;
!       Unit_Name           : out Name_Id;
!       Unit_Kind           : out Spec_Or_Body;
!       Needs_Pragma        : out Boolean)
!    is
!       Info_Id  : Ada_Naming_Exception_Id
!         := Ada_Naming_Exceptions.Get (Canonical_File_Name);
!       VMS_Name : Name_Id;
  
!    begin
!       if Info_Id = No_Ada_Naming_Exception then
!          if Hostparm.OpenVMS then
!             VMS_Name := Canonical_File_Name;
!             Get_Name_String (VMS_Name);
  
!             if Name_Buffer (Name_Len) = '.' then
!                Name_Len := Name_Len - 1;
!                VMS_Name := Name_Find;
              end if;
+ 
+             Info_Id := Ada_Naming_Exceptions.Get (VMS_Name);
           end if;
  
!       end if;
  
!       if Info_Id /= No_Ada_Naming_Exception then
!          Exception_Id := Info_Id;
!          Unit_Name := No_Name;
!          Unit_Kind := Specification;
!          Needs_Pragma := True;
!          return;
!       end if;
  
!       Needs_Pragma := False;
!       Exception_Id := No_Ada_Naming_Exception;
  
!       Get_Name_String (Canonical_File_Name);
  
!       declare
!          File          : String := Name_Buffer (1 .. Name_Len);
!          First         : constant Positive := File'First;
!          Last          : Natural           := File'Last;
!          Standard_GNAT : Boolean;
  
!       begin
!          Standard_GNAT :=
!            Naming.Ada_Spec_Suffix = Default_Ada_Spec_Suffix
!              and then Naming.Ada_Body_Suffix = Default_Ada_Body_Suffix;
  
!          --  Check if the end of the file name is Specification_Append
  
!          Get_Name_String (Naming.Ada_Spec_Suffix);
  
!          if File'Length > Name_Len
!            and then File (Last - Name_Len + 1 .. Last) =
!                                                 Name_Buffer (1 .. Name_Len)
!          then
!             --  We have a spec
  
!             Unit_Kind := Specification;
!             Last := Last - Name_Len;
  
!             if Current_Verbosity = High then
!                Write_Str  ("   Specification: ");
!                Write_Line (File (First .. Last));
!             end if;
  
!          else
!             Get_Name_String (Naming.Ada_Body_Suffix);
  
!             --  Check if the end of the file name is Body_Append
  
!             if File'Length > Name_Len
!               and then File (Last - Name_Len + 1 .. Last) =
!                                                 Name_Buffer (1 .. Name_Len)
!             then
!                --  We have a body
  
!                Unit_Kind := Body_Part;
!                Last := Last - Name_Len;
  
!                if Current_Verbosity = High then
!                   Write_Str  ("   Body: ");
!                   Write_Line (File (First .. Last));
!                end if;
  
!             elsif Naming.Separate_Suffix /= Naming.Ada_Spec_Suffix then
!                Get_Name_String (Naming.Separate_Suffix);
  
!                --  Check if the end of the file name is Separate_Append
  
!                if File'Length > Name_Len
!                  and then File (Last - Name_Len + 1 .. Last) =
!                                                 Name_Buffer (1 .. Name_Len)
!                then
!                   --  We have a separate (a body)
  
!                   Unit_Kind := Body_Part;
!                   Last := Last - Name_Len;
  
!                   if Current_Verbosity = High then
!                      Write_Str  ("   Separate: ");
!                      Write_Line (File (First .. Last));
!                   end if;
  
!                else
!                   Last := 0;
                 end if;
  
+             else
+                Last := 0;
              end if;
           end if;
  
!          if Last = 0 then
  
!             --  This is not a source file
  
!             Unit_Name := No_Name;
!             Unit_Kind := Specification;
  
              if Current_Verbosity = High then
!                Write_Line ("   Not a valid file name.");
              end if;
  
!             return;
!          end if;
  
!          Get_Name_String (Naming.Dot_Replacement);
!          Standard_GNAT :=
!            Standard_GNAT and then Name_Buffer (1 .. Name_Len) = "-";
  
!          if Name_Buffer (1 .. Name_Len) /= "." then
  
!             --  If Dot_Replacement is not a single dot, then there should
!             --  not be any dot in the name.
  
!             for Index in First .. Last loop
!                if File (Index) = '.' then
!                   if Current_Verbosity = High then
!                      Write_Line
!                        ("   Not a valid file name (some dot not replaced).");
!                   end if;
  
!                   Unit_Name := No_Name;
!                   return;
  
                 end if;
!             end loop;
! 
!             --  Replace the substring Dot_Replacement with dots
  
              declare
!                Index : Positive := First;
  
              begin
!                while Index <= Last - Name_Len + 1 loop
  
!                   if File (Index .. Index + Name_Len - 1) =
!                     Name_Buffer (1 .. Name_Len)
!                   then
!                      File (Index) := '.';
! 
!                      if Name_Len > 1 and then Index < Last then
!                         File (Index + 1 .. Last - Name_Len + 1) :=
!                           File (Index + Name_Len .. Last);
!                      end if;
! 
!                      Last := Last - Name_Len + 1;
                    end if;
  
!                   Index := Index + 1;
                 end loop;
              end;
+          end if;
  
!          --  Check if the casing is right
  
!          declare
!             Src : String := File (First .. Last);
  
!          begin
!             case Naming.Casing is
!                when All_Lower_Case =>
!                   Fixed.Translate
!                     (Source  => Src,
!                      Mapping => Lower_Case_Map);
  
!                when All_Upper_Case =>
!                   Fixed.Translate
!                     (Source  => Src,
!                      Mapping => Upper_Case_Map);
  
!                when Mixed_Case | Unknown =>
!                   null;
!             end case;
  
!             if Src /= File (First .. Last) then
!                if Current_Verbosity = High then
!                   Write_Line ("   Not a valid file name (casing).");
!                end if;
  
!                Unit_Name := No_Name;
!                return;
!             end if;
  
!             --  We put the name in lower case
  
!             Fixed.Translate
!               (Source  => Src,
!                Mapping => Lower_Case_Map);
  
!             --  In the standard GNAT naming scheme, check for special cases:
!             --  children or separates of A, G, I or S, and run time sources.
  
!             if Standard_GNAT and then Src'Length >= 3 then
!                declare
!                   S1 : constant Character := Src (Src'First);
!                   S2 : constant Character := Src (Src'First + 1);
  
!                begin
!                   if S1 = 'a' or else S1 = 'g'
!                     or else S1 = 'i' or else S1 = 's'
!                   then
!                      --  Children or separates of packages A, G, I or S
  
!                      if (Hostparm.OpenVMS and then S2 = '$')
!                        or else (not Hostparm.OpenVMS and then S2 = '~')
!                      then
!                         Src (Src'First + 1) := '.';
  
!                      --  If it is potentially a run time source, disable
!                      --  filling of the mapping file to avoid warnings.
! 
!                      elsif S2 = '.' then
!                         Set_Mapping_File_Initial_State_To_Empty;
!                      end if;
  
                    end if;
+                end;
+             end if;
  
!             if Current_Verbosity = High then
!                Write_Str  ("      ");
!                Write_Line (Src);
!             end if;
  
!             --  Now, we check if this name is a valid unit name
  
!             Check_Ada_Name (Name => Src, Unit => Unit_Name);
!          end;
  
        end;
+    end Get_Unit;
  
!    ----------
!    -- Hash --
!    ----------
! 
!    function Hash (Unit : Unit_Info) return Header_Num is
!    begin
!       return Header_Num (Unit.Unit mod 2048);
!    end Hash;
! 
!    -----------------------
!    -- Is_Illegal_Suffix --
!    -----------------------
! 
!    function Is_Illegal_Suffix
!      (Suffix                          : String;
!       Dot_Replacement_Is_A_Single_Dot : Boolean) return Boolean
!    is
!    begin
!       if Suffix'Length = 0 or else Index (Suffix, ".") = 0 then
!          return True;
!       end if;
! 
!       --  If dot replacement is a single dot, and first character of
!       --  suffix is also a dot
! 
!       if Dot_Replacement_Is_A_Single_Dot
!         and then Suffix (Suffix'First) = '.'
!       then
!          for Index in Suffix'First + 1 .. Suffix'Last loop
! 
!             --  If there is another dot
! 
!             if Suffix (Index) = '.' then
! 
!                --  It is illegal to have a letter following the initial dot
! 
!                return Is_Letter (Suffix (Suffix'First + 1));
!             end if;
!          end loop;
!       end if;
! 
!       --  Everything is OK
! 
!       return False;
!    end Is_Illegal_Suffix;
  
     ----------------------
     -- Locate_Directory --
*************** package body Prj.Nmsc is
*** 3552,3559 ****
--- 3600,3609 ----
        Display : out Name_Id)
     is
        The_Name   : constant String := Get_Name_String (Name);
+ 
        The_Parent : constant String :=
                       Get_Name_String (Parent) & Directory_Separator;
+ 
        The_Parent_Last : constant Natural :=
                       Compute_Directory_Last (The_Parent);
  
*************** package body Prj.Nmsc is
*** 3573,3585 ****
           if Is_Directory (The_Name) then
              declare
                 Normed : constant String :=
!                  Normalize_Pathname (The_Name);
  
              begin
                 Name_Len := Normed'Length;
                 Name_Buffer (1 .. Name_Len) := Normed;
                 Display := Name_Find;
!                Canonical_Case_File_Name (Name_Buffer (1 .. Name_Len));
                 Dir := Name_Find;
              end;
           end if;
--- 3623,3646 ----
           if Is_Directory (The_Name) then
              declare
                 Normed : constant String :=
!                           Normalize_Pathname
!                             (The_Name,
!                              Resolve_Links  => False,
!                              Case_Sensitive => True);
! 
!                Canonical_Path : constant String :=
!                                   Normalize_Pathname
!                                     (Normed,
!                                      Resolve_Links  => True,
!                                      Case_Sensitive => False);
  
              begin
                 Name_Len := Normed'Length;
                 Name_Buffer (1 .. Name_Len) := Normed;
                 Display := Name_Find;
! 
!                Name_Len := Canonical_Path'Length;
!                Name_Buffer (1 .. Name_Len) := Canonical_Path;
                 Dir := Name_Find;
              end;
           end if;
*************** package body Prj.Nmsc is
*** 3594,3606 ****
              if Is_Directory (Full_Path) then
                 declare
                    Normed : constant String :=
!                              Normalize_Pathname (Full_Path);
  
                 begin
                    Name_Len := Normed'Length;
                    Name_Buffer (1 .. Name_Len) := Normed;
                    Display := Name_Find;
!                   Canonical_Case_File_Name (Name_Buffer (1 .. Name_Len));
                    Dir := Name_Find;
                 end;
              end if;
--- 3655,3678 ----
              if Is_Directory (Full_Path) then
                 declare
                    Normed : constant String :=
!                              Normalize_Pathname
!                                (Full_Path,
!                                 Resolve_Links  => False,
!                                 Case_Sensitive => True);
! 
!                   Canonical_Path : constant String :=
!                                      Normalize_Pathname
!                                        (Normed,
!                                         Resolve_Links  => True,
!                                         Case_Sensitive => False);
  
                 begin
                    Name_Len := Normed'Length;
                    Name_Buffer (1 .. Name_Len) := Normed;
                    Display := Name_Find;
! 
!                   Name_Len := Canonical_Path'Length;
!                   Name_Buffer (1 .. Name_Len) := Canonical_Path;
                    Dir := Name_Find;
                 end;
              end if;
*************** package body Prj.Nmsc is
*** 3608,3613 ****
--- 3680,4328 ----
        end if;
     end Locate_Directory;
  
+    ----------------------
+    -- Look_For_Sources --
+    ----------------------
+ 
+    procedure Look_For_Sources
+      (Project      : Project_Id;
+       Data         : in out Project_Data;
+       Follow_Links : Boolean)
+    is
+       procedure Get_Path_Names_And_Record_Sources (Follow_Links : Boolean);
+       --  Find the path names of the source files in the Source_Names table
+       --  in the source directories and record those that are Ada sources.
+ 
+       procedure Get_Sources_From_File
+         (Path     : String;
+          Location : Source_Ptr);
+       --  Get the sources of a project from a text file
+ 
+       ---------------------------------------
+       -- Get_Path_Names_And_Record_Sources --
+       ---------------------------------------
+ 
+       procedure Get_Path_Names_And_Record_Sources (Follow_Links : Boolean) is
+          Source_Dir : String_List_Id := Data.Source_Dirs;
+          Element    : String_Element;
+          Path       : Name_Id;
+ 
+          Dir      : Dir_Type;
+          Name     : Name_Id;
+          Canonical_Name : Name_Id;
+          Name_Str : String (1 .. 1_024);
+          Last     : Natural := 0;
+          NL       : Name_Location;
+ 
+          Current_Source : String_List_Id := Nil_String;
+ 
+          First_Error : Boolean := True;
+ 
+          Source_Recorded : Boolean := False;
+ 
+       begin
+          --  We look in all source directories for the file names in the
+          --  hash table Source_Names
+ 
+          while Source_Dir /= Nil_String loop
+             Source_Recorded := False;
+             Element := String_Elements.Table (Source_Dir);
+ 
+             declare
+                Dir_Path : constant String := Get_Name_String (Element.Value);
+             begin
+                if Current_Verbosity = High then
+                   Write_Str ("checking directory """);
+                   Write_Str (Dir_Path);
+                   Write_Line ("""");
+                end if;
+ 
+                Open (Dir, Dir_Path);
+ 
+                loop
+                   Read (Dir, Name_Str, Last);
+                   exit when Last = 0;
+                   Name_Len := Last;
+                   Name_Buffer (1 .. Name_Len) := Name_Str (1 .. Last);
+                   Name := Name_Find;
+                   Canonical_Case_File_Name (Name_Str (1 .. Last));
+                   Name_Len := Last;
+                   Name_Buffer (1 .. Name_Len) := Name_Str (1 .. Last);
+                   Canonical_Name := Name_Find;
+                   NL := Source_Names.Get (Canonical_Name);
+ 
+                   if NL /= No_Name_Location and then not NL.Found then
+                      NL.Found := True;
+                      Source_Names.Set (Canonical_Name, NL);
+                      Name_Len := Dir_Path'Length;
+                      Name_Buffer (1 .. Name_Len) := Dir_Path;
+ 
+                      if Name_Buffer (Name_Len) /= Directory_Separator then
+                         Add_Char_To_Name_Buffer (Directory_Separator);
+                      end if;
+ 
+                      Add_Str_To_Name_Buffer (Name_Str (1 .. Last));
+                      Path := Name_Find;
+ 
+                      if Current_Verbosity = High then
+                         Write_Str  ("  found ");
+                         Write_Line (Get_Name_String (Name));
+                      end if;
+ 
+                      --  Register the source if it is an Ada compilation unit
+ 
+                      Record_Ada_Source
+                        (File_Name       => Name,
+                         Path_Name       => Path,
+                         Project         => Project,
+                         Data            => Data,
+                         Location        => NL.Location,
+                         Current_Source  => Current_Source,
+                         Source_Recorded => Source_Recorded,
+                         Follow_Links    => Follow_Links);
+                   end if;
+                end loop;
+ 
+                Close (Dir);
+             end;
+ 
+             if Source_Recorded then
+                String_Elements.Table (Source_Dir).Flag := True;
+             end if;
+ 
+             Source_Dir := Element.Next;
+          end loop;
+ 
+          --  It is an error if a source file name in a source list or
+          --  in a source list file is not found.
+ 
+          NL := Source_Names.Get_First;
+ 
+          while NL /= No_Name_Location loop
+             if not NL.Found then
+                Err_Vars.Error_Msg_Name_1 := NL.Name;
+ 
+                if First_Error then
+                   Error_Msg
+                     (Project,
+                      "source file { cannot be found",
+                      NL.Location);
+                   First_Error := False;
+ 
+                else
+                   Error_Msg
+                     (Project,
+                      "\source file { cannot be found",
+                      NL.Location);
+                end if;
+             end if;
+ 
+             NL := Source_Names.Get_Next;
+          end loop;
+       end Get_Path_Names_And_Record_Sources;
+ 
+       ---------------------------
+       -- Get_Sources_From_File --
+       ---------------------------
+ 
+       procedure Get_Sources_From_File
+         (Path     : String;
+          Location : Source_Ptr)
+       is
+       begin
+          --  Get the list of sources from the file and put them in hash table
+          --  Source_Names.
+ 
+          Get_Sources_From_File (Path, Location, Project);
+ 
+          --  Look in the source directories to find those sources
+ 
+          Get_Path_Names_And_Record_Sources (Follow_Links);
+ 
+          --  We should have found at least one source.
+          --  If not, report an error.
+ 
+          if Data.Sources = Nil_String then
+             Error_Msg (Project,
+                        "there are no Ada sources in this project",
+                        Location);
+          end if;
+       end Get_Sources_From_File;
+ 
+    begin
+       if Data.Ada_Sources_Present then
+          declare
+             Sources          : constant Variable_Value :=
+                                  Util.Value_Of
+                                    (Name_Source_Files,
+                                     Data.Decl.Attributes);
+ 
+             Source_List_File : constant Variable_Value :=
+                                  Util.Value_Of
+                                    (Name_Source_List_File,
+                                     Data.Decl.Attributes);
+ 
+             Locally_Removed  : constant Variable_Value :=
+                                  Util.Value_Of
+                                    (Name_Locally_Removed_Files,
+                                     Data.Decl.Attributes);
+ 
+          begin
+             pragma Assert
+               (Sources.Kind = List,
+                "Source_Files is not a list");
+ 
+             pragma Assert
+               (Source_List_File.Kind = Single,
+                "Source_List_File is not a single string");
+ 
+             if not Sources.Default then
+                if not Source_List_File.Default then
+                   Error_Msg
+                     (Project,
+                      "?both variables source_files and " &
+                      "source_list_file are present",
+                      Source_List_File.Location);
+                end if;
+ 
+                --  Sources is a list of file names
+ 
+                declare
+                   Current  : String_List_Id := Sources.Values;
+                   Element  : String_Element;
+                   Location : Source_Ptr;
+                   Name     : Name_Id;
+ 
+                begin
+                   Source_Names.Reset;
+ 
+                   Data.Ada_Sources_Present := Current /= Nil_String;
+ 
+                   while Current /= Nil_String loop
+                      Element := String_Elements.Table (Current);
+                      Get_Name_String (Element.Value);
+                      Canonical_Case_File_Name (Name_Buffer (1 .. Name_Len));
+                      Name := Name_Find;
+ 
+                      --  If the element has no location, then use the
+                      --  location of Sources to report possible errors.
+ 
+                      if Element.Location = No_Location then
+                         Location := Sources.Location;
+                      else
+                         Location := Element.Location;
+                      end if;
+ 
+                      Source_Names.Set
+                        (K => Name,
+                         E =>
+                           (Name     => Name,
+                            Location => Location,
+                            Found    => False));
+ 
+                      Current := Element.Next;
+                   end loop;
+ 
+                   Get_Path_Names_And_Record_Sources (Follow_Links);
+                end;
+ 
+                --  No source_files specified
+ 
+                --  We check Source_List_File has been specified
+ 
+             elsif not Source_List_File.Default then
+ 
+                --  Source_List_File is the name of the file
+                --  that contains the source file names
+ 
+                declare
+                   Source_File_Path_Name : constant String :=
+                                             Path_Name_Of
+                                               (Source_List_File.Value,
+                                                Data.Directory);
+ 
+                begin
+                   if Source_File_Path_Name'Length = 0 then
+                      Err_Vars.Error_Msg_Name_1 := Source_List_File.Value;
+                      Error_Msg
+                        (Project,
+                         "file with sources { does not exist",
+                         Source_List_File.Location);
+ 
+                   else
+                      Get_Sources_From_File
+                        (Source_File_Path_Name,
+                         Source_List_File.Location);
+                   end if;
+                end;
+ 
+             else
+                --  Neither Source_Files nor Source_List_File has been
+                --  specified. Find all the files that satisfy the naming
+                --  scheme in all the source directories.
+ 
+                Find_Sources
+                  (Project, Data, Ada_Language_Index, Follow_Links);
+             end if;
+ 
+             --  If there are sources that are locally removed, mark them as
+             --  such in the Units table.
+ 
+             if not Locally_Removed.Default then
+ 
+                --  Sources can be locally removed only in extending
+                --  project files.
+ 
+                if Data.Extends = No_Project then
+                   Error_Msg
+                     (Project,
+                      "Locally_Removed_Files can only be used " &
+                      "in an extending project file",
+                      Locally_Removed.Location);
+ 
+                else
+                   declare
+                      Current  : String_List_Id := Locally_Removed.Values;
+                      Element  : String_Element;
+                      Location : Source_Ptr;
+                      OK       : Boolean;
+                      Unit     : Unit_Data;
+                      Name     : Name_Id;
+                      Extended : Project_Id;
+ 
+                   begin
+                      while Current /= Nil_String loop
+                         Element := String_Elements.Table (Current);
+                         Get_Name_String (Element.Value);
+                         Canonical_Case_File_Name (Name_Buffer (1 .. Name_Len));
+                         Name := Name_Find;
+ 
+                         --  If the element has no location, then use the
+                         --  location of Locally_Removed to report
+                         --  possible errors.
+ 
+                         if Element.Location = No_Location then
+                            Location := Locally_Removed.Location;
+                         else
+                            Location := Element.Location;
+                         end if;
+ 
+                         OK := False;
+ 
+                         for Index in 1 .. Units.Last loop
+                            Unit := Units.Table (Index);
+ 
+                            if Unit.File_Names (Specification).Name = Name then
+                               OK := True;
+ 
+                               --  Check that this is from a project that
+                               --  the current project extends, but not the
+                               --  current project.
+ 
+                               Extended := Unit.File_Names
+                                 (Specification).Project;
+ 
+                               if Extended = Project then
+                                  Error_Msg
+                                    (Project,
+                                     "cannot remove a source " &
+                                     "of the same project",
+                                     Location);
+ 
+                               elsif
+                                 Project_Extends (Project, Extended)
+                               then
+                                  Unit.File_Names
+                                    (Specification).Path := Slash;
+                                  Unit.File_Names
+                                    (Specification).Needs_Pragma := False;
+                                  Units.Table (Index) := Unit;
+                                  Add_Forbidden_File_Name
+                                    (Unit.File_Names (Specification).Name);
+                                  exit;
+ 
+                               else
+                                  Error_Msg
+                                    (Project,
+                                     "cannot remove a source from " &
+                                     "another project",
+                                     Location);
+                               end if;
+ 
+                            elsif
+                              Unit.File_Names (Body_Part).Name = Name
+                            then
+                               OK := True;
+ 
+                               --  Check that this is from a project that
+                               --  the current project extends, but not the
+                               --  current project.
+ 
+                               Extended := Unit.File_Names
+                                 (Body_Part).Project;
+ 
+                               if Extended = Project then
+                                  Error_Msg
+                                    (Project,
+                                     "cannot remove a source " &
+                                     "of the same project",
+                                     Location);
+ 
+                               elsif
+                                 Project_Extends (Project, Extended)
+                               then
+                                  Unit.File_Names (Body_Part).Path := Slash;
+                                  Unit.File_Names (Body_Part).Needs_Pragma
+                                    := False;
+                                  Units.Table (Index) := Unit;
+                                  Add_Forbidden_File_Name
+                                    (Unit.File_Names (Body_Part).Name);
+                                  exit;
+                               end if;
+ 
+                            end if;
+                         end loop;
+ 
+                         if not OK then
+                            Err_Vars.Error_Msg_Name_1 := Name;
+                            Error_Msg (Project, "unknown file {", Location);
+                         end if;
+ 
+                         Current := Element.Next;
+                      end loop;
+                   end;
+                end if;
+             end if;
+          end;
+       end if;
+ 
+       if Data.Other_Sources_Present then
+ 
+          --  Set Source_Present to False. It will be set back to True
+          --  whenever a source is found.
+ 
+          Data.Other_Sources_Present := False;
+          for Lang in Ada_Language_Index + 1 .. Last_Language_Index loop
+ 
+             --  For each language (other than Ada) in the project file
+ 
+             if Is_Present (Lang, Data) then
+ 
+                --  Reset the indication that there are sources of this
+                --  language. It will be set back to True whenever we find a
+                --  source of the language.
+ 
+                Set (Lang, False, Data);
+ 
+                --  First, get the source suffix for the language
+ 
+                Set (Suffix       => Suffix_For (Lang, Data.Naming),
+                     For_Language => Lang,
+                     In_Project   => Data);
+ 
+                --  Then, deal with the naming exceptions, if any
+ 
+                Source_Names.Reset;
+ 
+                declare
+                   Naming_Exceptions : constant Variable_Value :=
+                     Value_Of
+                       (Index     => Language_Names.Table (Lang),
+                        Src_Index => 0,
+                        In_Array  => Data.Naming.Implementation_Exceptions);
+                   Element_Id        : String_List_Id;
+                   Element           : String_Element;
+                   File_Id           : Name_Id;
+                   Source_Found      : Boolean := False;
+ 
+                begin
+                   --  If there are naming exceptions, look through them one
+                   --  by one.
+ 
+                   if Naming_Exceptions /= Nil_Variable_Value then
+                      Element_Id := Naming_Exceptions.Values;
+ 
+                      while Element_Id /= Nil_String loop
+                         Element := String_Elements.Table (Element_Id);
+                         Get_Name_String (Element.Value);
+                         Canonical_Case_File_Name
+                           (Name_Buffer (1 .. Name_Len));
+                         File_Id := Name_Find;
+ 
+                         --  Put each naming exception in the Source_Names
+                         --  hash table, but if there are repetition, don't
+                         --  bother after the first instance.
+ 
+                         if
+                           Source_Names.Get (File_Id) = No_Name_Location
+                         then
+                            Source_Found := True;
+                            Source_Names.Set
+                              (File_Id,
+                               (Name     => File_Id,
+                                Location => Element.Location,
+                                Found    => False));
+                         end if;
+ 
+                         Element_Id := Element.Next;
+                      end loop;
+ 
+                      --  If there is at least one naming exception, record
+                      --  those that are found in the source directories.
+ 
+                      if Source_Found then
+                         Record_Other_Sources
+                           (Project           => Project,
+                            Data              => Data,
+                            Language          => Lang,
+                            Naming_Exceptions => True);
+                      end if;
+ 
+                   end if;
+                end;
+ 
+                --  Now, check if a list of sources is declared either through
+                --  a string list (attribute Source_Files) or a text file
+                --  (attribute Source_List_File). If a source list is declared,
+                --  we will consider only those naming exceptions that are
+                --  on the list.
+ 
+                declare
+                   Sources          : constant Variable_Value :=
+                                        Util.Value_Of
+                                          (Name_Source_Files,
+                                           Data.Decl.Attributes);
+ 
+                   Source_List_File : constant Variable_Value :=
+                                        Util.Value_Of
+                                          (Name_Source_List_File,
+                                           Data.Decl.Attributes);
+ 
+                begin
+                   pragma Assert
+                     (Sources.Kind = List,
+                      "Source_Files is not a list");
+ 
+                   pragma Assert
+                     (Source_List_File.Kind = Single,
+                      "Source_List_File is not a single string");
+ 
+                   if not Sources.Default then
+                      if not Source_List_File.Default then
+                         Error_Msg
+                           (Project,
+                            "?both variables source_files and " &
+                            "source_list_file are present",
+                            Source_List_File.Location);
+                      end if;
+ 
+                      --  Sources is a list of file names
+ 
+                      declare
+                         Current  : String_List_Id := Sources.Values;
+                         Element  : String_Element;
+                         Location : Source_Ptr;
+                         Name     : Name_Id;
+ 
+                      begin
+                         Source_Names.Reset;
+ 
+                         --  Put all the sources in the Source_Names hash table
+ 
+                         while Current /= Nil_String loop
+                            Element := String_Elements.Table (Current);
+                            Get_Name_String (Element.Value);
+                            Canonical_Case_File_Name
+                              (Name_Buffer (1 .. Name_Len));
+                            Name := Name_Find;
+ 
+                            --  If the element has no location, then use the
+                            --  location of Sources to report possible errors.
+ 
+                            if Element.Location = No_Location then
+                               Location := Sources.Location;
+                            else
+                               Location := Element.Location;
+                            end if;
+ 
+                            Source_Names.Set
+                              (K => Name,
+                               E =>
+                                 (Name     => Name,
+                                  Location => Location,
+                                  Found    => False));
+ 
+                            Current := Element.Next;
+                         end loop;
+ 
+                         --  And look for their directories
+ 
+                         Record_Other_Sources
+                           (Project           => Project,
+                            Data              => Data,
+                            Language          => Lang,
+                            Naming_Exceptions => False);
+                      end;
+ 
+                      --  No source_files specified
+ 
+                      --  We check if Source_List_File has been specified
+ 
+                   elsif not Source_List_File.Default then
+ 
+                      --  Source_List_File is the name of the file
+                      --  that contains the source file names
+ 
+                      declare
+                         Source_File_Path_Name : constant String :=
+                           Path_Name_Of
+                             (Source_List_File.Value,
+                              Data.Directory);
+ 
+                      begin
+                         if Source_File_Path_Name'Length = 0 then
+                            Err_Vars.Error_Msg_Name_1 :=
+                              Source_List_File.Value;
+                            Error_Msg
+                              (Project,
+                               "file with sources { does not exist",
+                               Source_List_File.Location);
+ 
+                         else
+                            --  Read the file, putting each source in the
+                            --  Source_Names hash table.
+ 
+                            Get_Sources_From_File
+                              (Source_File_Path_Name,
+                               Source_List_File.Location,
+                               Project);
+ 
+                            --  And look for their directories
+ 
+                            Record_Other_Sources
+                              (Project           => Project,
+                               Data              => Data,
+                               Language          => Lang,
+                               Naming_Exceptions => False);
+                         end if;
+                      end;
+ 
+                   --  Neither Source_Files nor Source_List_File was specified
+ 
+                   else
+                      --  Find all the files that satisfy the naming scheme in
+                      --  all the source directories. All the naming exceptions
+                      --  that effectively exist are also part of the source
+                      --  of this language.
+ 
+                      Find_Sources (Project, Data, Lang);
+                   end if;
+                end;
+             end if;
+          end loop;
+       end if;
+    end Look_For_Sources;
+ 
     ------------------
     -- Path_Name_Of --
     ------------------
*************** package body Prj.Nmsc is
*** 3617,3622 ****
--- 4332,4338 ----
        Directory : Name_Id) return String
     is
        Result : String_Access;
+ 
        The_Directory : constant String := Get_Name_String (Directory);
  
     begin
*************** package body Prj.Nmsc is
*** 3633,3638 ****
--- 4349,4392 ----
        end if;
     end Path_Name_Of;
  
+    -------------------------------
+    -- Prepare_Ada_Naming_Exceptions --
+    -------------------------------
+ 
+    procedure Prepare_Ada_Naming_Exceptions
+      (List : Array_Element_Id;
+       Kind : Spec_Or_Body)
+    is
+       Current : Array_Element_Id := List;
+       Element : Array_Element;
+ 
+       Unit : Unit_Info;
+ 
+    begin
+       --  Traverse the list
+ 
+       while Current /= No_Array_Element loop
+          Element := Array_Elements.Table (Current);
+ 
+          if Element.Index /= No_Name then
+             Unit :=
+               (Kind => Kind,
+                Unit => Element.Index,
+                Next => No_Ada_Naming_Exception);
+             Reverse_Ada_Naming_Exceptions.Set
+               (Unit, (Element.Value.Value, Element.Value.Index));
+             Unit.Next := Ada_Naming_Exceptions.Get (Element.Value.Value);
+             Ada_Naming_Exception_Table.Increment_Last;
+             Ada_Naming_Exception_Table.Table
+               (Ada_Naming_Exception_Table.Last) := Unit;
+             Ada_Naming_Exceptions.Set
+               (Element.Value.Value, Ada_Naming_Exception_Table.Last);
+          end if;
+ 
+          Current := Element.Next;
+       end loop;
+    end Prepare_Ada_Naming_Exceptions;
+ 
     ---------------------
     -- Project_Extends --
     ---------------------
*************** package body Prj.Nmsc is
*** 3655,3690 ****
        end loop;
     end Project_Extends;
  
!    -------------------
!    -- Record_Source --
!    -------------------
  
!    procedure Record_Source
       (File_Name       : Name_Id;
        Path_Name       : Name_Id;
        Project         : Project_Id;
        Data            : in out Project_Data;
        Location        : Source_Ptr;
        Current_Source  : in out String_List_Id;
!       Source_Recorded : in out Boolean)
     is
        Canonical_File_Name : Name_Id;
        Canonical_Path_Name : Name_Id;
        Unit_Name    : Name_Id;
        Unit_Kind    : Spec_Or_Body;
        Needs_Pragma : Boolean;
  
!       The_Location    : Source_Ptr     := Location;
        Previous_Source : constant String_List_Id := Current_Source;
!       Except_Name     : Name_Id        := No_Name;
  
     begin
        Get_Name_String (File_Name);
        Canonical_Case_File_Name (Name_Buffer (1 .. Name_Len));
        Canonical_File_Name := Name_Find;
!       Get_Name_String (Path_Name);
!       Canonical_Case_File_Name (Name_Buffer (1 .. Name_Len));
!       Canonical_Path_Name := Name_Find;
  
        --  Find out the unit name, the unit kind and if it needs
        --  a specific SFN pragma.
--- 4409,4463 ----
        end loop;
     end Project_Extends;
  
!    -----------------------
!    -- Record_Ada_Source --
!    -----------------------
  
!    procedure Record_Ada_Source
       (File_Name       : Name_Id;
        Path_Name       : Name_Id;
        Project         : Project_Id;
        Data            : in out Project_Data;
        Location        : Source_Ptr;
        Current_Source  : in out String_List_Id;
!       Source_Recorded : in out Boolean;
!       Follow_Links    : Boolean)
     is
        Canonical_File_Name : Name_Id;
        Canonical_Path_Name : Name_Id;
+ 
+       Exception_Id : Ada_Naming_Exception_Id;
        Unit_Name    : Name_Id;
        Unit_Kind    : Spec_Or_Body;
+       Unit_Index   : Int := 0;
+       Info         : Unit_Info;
+       Name_Index   : Name_And_Index;
        Needs_Pragma : Boolean;
  
!       The_Location    : Source_Ptr              := Location;
        Previous_Source : constant String_List_Id := Current_Source;
!       Except_Name     : Name_And_Index          := No_Name_And_Index;
! 
!       Unit_Prj : Unit_Project;
! 
!       File_Name_Recorded : Boolean := False;
  
     begin
        Get_Name_String (File_Name);
        Canonical_Case_File_Name (Name_Buffer (1 .. Name_Len));
        Canonical_File_Name := Name_Find;
! 
!       declare
!          Canonical_Path : constant String :=
!                             Normalize_Pathname
!                               (Get_Name_String (Path_Name),
!                                Resolve_Links => Follow_Links,
!                                Case_Sensitive => False);
!       begin
!          Name_Len := 0;
!          Add_Str_To_Name_Buffer (Canonical_Path);
!          Canonical_Path_Name := Name_Find;
!       end;
  
        --  Find out the unit name, the unit kind and if it needs
        --  a specific SFN pragma.
*************** package body Prj.Nmsc is
*** 3692,3702 ****
        Get_Unit
          (Canonical_File_Name => Canonical_File_Name,
           Naming              => Data.Naming,
           Unit_Name           => Unit_Name,
           Unit_Kind           => Unit_Kind,
           Needs_Pragma        => Needs_Pragma);
  
!       if Unit_Name = No_Name then
           if Current_Verbosity = High then
              Write_Str  ("   """);
              Write_Str  (Get_Name_String (Canonical_File_Name));
--- 4465,4478 ----
        Get_Unit
          (Canonical_File_Name => Canonical_File_Name,
           Naming              => Data.Naming,
+          Exception_Id        => Exception_Id,
           Unit_Name           => Unit_Name,
           Unit_Kind           => Unit_Kind,
           Needs_Pragma        => Needs_Pragma);
  
!       if Exception_Id = No_Ada_Naming_Exception and then
!         Unit_Name = No_Name
!       then
           if Current_Verbosity = High then
              Write_Str  ("   """);
              Write_Str  (Get_Name_String (Canonical_File_Name));
*************** package body Prj.Nmsc is
*** 3709,3722 ****
  
           if not Needs_Pragma then
              Except_Name :=
!               Reverse_Naming_Exceptions.Get ((Unit_Kind, Unit_Name));
  
!             if Except_Name /= No_Name then
                 if Current_Verbosity = High then
                    Write_Str  ("   """);
                    Write_Str  (Get_Name_String (Canonical_File_Name));
                    Write_Str  (""" contains a unit that is found in """);
!                   Write_Str  (Get_Name_String (Except_Name));
                    Write_Line (""" (ignored).");
                 end if;
  
--- 4485,4499 ----
  
           if not Needs_Pragma then
              Except_Name :=
!               Reverse_Ada_Naming_Exceptions.Get
!                 ((Unit_Kind, Unit_Name, No_Ada_Naming_Exception));
  
!             if Except_Name /= No_Name_And_Index then
                 if Current_Verbosity = High then
                    Write_Str  ("   """);
                    Write_Str  (Get_Name_String (Canonical_File_Name));
                    Write_Str  (""" contains a unit that is found in """);
!                   Write_Str  (Get_Name_String (Except_Name.Name));
                    Write_Line (""" (ignored).");
                 end if;
  
*************** package body Prj.Nmsc is
*** 3728,3852 ****
              end if;
           end if;
  
!          --  Put the file name in the list of sources of the project
  
!          String_Elements.Increment_Last;
!          String_Elements.Table (String_Elements.Last) :=
!            (Value         => Canonical_File_Name,
!             Display_Value => File_Name,
!             Location      => No_Location,
!             Flag          => False,
!             Next          => Nil_String);
  
!          if Current_Source = Nil_String then
!             Data.Sources := String_Elements.Last;
  
!          else
!             String_Elements.Table (Current_Source).Next :=
!               String_Elements.Last;
!          end if;
  
!          Current_Source := String_Elements.Last;
  
!          --  Put the unit in unit list
  
           declare
!             The_Unit      : Unit_Id := Units_Htable.Get (Unit_Name);
!             The_Unit_Data : Unit_Data;
  
           begin
              if Current_Verbosity = High then
!                Write_Str  ("Putting ");
!                Write_Str  (Get_Name_String (Unit_Name));
!                Write_Line (" in the unit list.");
              end if;
  
!             --  The unit is already in the list, but may be it is
!             --  only the other unit kind (spec or body), or what is
!             --  in the unit list is a unit of a project we are extending.
  
!             if The_Unit /= Prj.Com.No_Unit then
!                The_Unit_Data := Units.Table (The_Unit);
  
!                if The_Unit_Data.File_Names (Unit_Kind).Name = No_Name
!                  or else Project_Extends
!                            (Data.Extends,
!                             The_Unit_Data.File_Names (Unit_Kind).Project)
                 then
!                   if The_Unit_Data.File_Names (Unit_Kind).Path = Slash then
!                      Remove_Forbidden_File_Name
!                        (The_Unit_Data.File_Names (Unit_Kind).Name);
!                   end if;
  
!                   The_Unit_Data.File_Names (Unit_Kind) :=
!                     (Name         => Canonical_File_Name,
!                      Display_Name => File_Name,
!                      Path         => Canonical_Path_Name,
!                      Display_Path => Path_Name,
!                      Project      => Project,
!                      Needs_Pragma => Needs_Pragma);
!                   Units.Table (The_Unit) := The_Unit_Data;
!                   Source_Recorded := True;
  
!                elsif The_Unit_Data.File_Names (Unit_Kind).Project = Project
!                  and then (Data.Known_Order_Of_Source_Dirs or else
!                            The_Unit_Data.File_Names (Unit_Kind).Path =
!                                                           Canonical_Path_Name)
!                then
!                   if Previous_Source = Nil_String then
!                      Data.Sources := Nil_String;
!                   else
!                      String_Elements.Table (Previous_Source).Next :=
!                        Nil_String;
!                      String_Elements.Decrement_Last;
                    end if;
  
!                   Current_Source := Previous_Source;
  
!                else
!                   --  It is an error to have two units with the same name
!                   --  and the same kind (spec or body).
  
!                   if The_Location = No_Location then
!                      The_Location := Projects.Table (Project).Location;
!                   end if;
  
!                   Err_Vars.Error_Msg_Name_1 := Unit_Name;
!                   Error_Msg (Project, "duplicate source {", The_Location);
  
!                   Err_Vars.Error_Msg_Name_1 :=
!                     Projects.Table
!                       (The_Unit_Data.File_Names (Unit_Kind).Project).Name;
!                   Err_Vars.Error_Msg_Name_2 :=
!                     The_Unit_Data.File_Names (Unit_Kind).Path;
!                   Error_Msg (Project, "\   project file {, {", The_Location);
  
!                   Err_Vars.Error_Msg_Name_1 := Projects.Table (Project).Name;
!                   Err_Vars.Error_Msg_Name_2 := Canonical_Path_Name;
!                   Error_Msg (Project, "\   project file {, {", The_Location);
  
                 end if;
  
!             --  It is a new unit, create a new record
  
!             else
!                Units.Increment_Last;
!                The_Unit := Units.Last;
!                Units_Htable.Set (Unit_Name, The_Unit);
!                The_Unit_Data.Name := Unit_Name;
!                The_Unit_Data.File_Names (Unit_Kind) :=
!                  (Name         => Canonical_File_Name,
!                   Display_Name => File_Name,
!                   Path         => Canonical_Path_Name,
!                   Display_Path => Path_Name,
!                   Project      => Project,
!                   Needs_Pragma => Needs_Pragma);
!                Units.Table (The_Unit) := The_Unit_Data;
!                Source_Recorded := True;
!             end if;
           end;
        end if;
!    end Record_Source;
  
     ----------------------
     -- Show_Source_Dirs --
--- 4505,4853 ----
              end if;
           end if;
  
!          loop
!             if Exception_Id /= No_Ada_Naming_Exception then
!                Info := Ada_Naming_Exception_Table.Table (Exception_Id);
!                Exception_Id := Info.Next;
!                Info.Next := No_Ada_Naming_Exception;
!                Name_Index := Reverse_Ada_Naming_Exceptions.Get (Info);
  
!                Unit_Name  := Info.Unit;
!                Unit_Index := Name_Index.Index;
!                Unit_Kind  := Info.Kind;
!             end if;
  
!             --  Put the file name in the list of sources of the project
  
!             if not File_Name_Recorded then
!                String_Elements.Increment_Last;
!                String_Elements.Table (String_Elements.Last) :=
!                  (Value         => Canonical_File_Name,
!                   Display_Value => File_Name,
!                   Location      => No_Location,
!                   Flag          => False,
!                   Next          => Nil_String,
!                   Index         => Unit_Index);
!             end if;
  
!             if Current_Source = Nil_String then
!                Data.Sources := String_Elements.Last;
!             else
!                String_Elements.Table (Current_Source).Next :=
!                  String_Elements.Last;
!             end if;
  
!             Current_Source := String_Elements.Last;
! 
!             --  Put the unit in unit list
! 
!             declare
!                The_Unit      : Unit_Id := Units_Htable.Get (Unit_Name);
!                The_Unit_Data : Unit_Data;
! 
!             begin
!                if Current_Verbosity = High then
!                   Write_Str  ("Putting ");
!                   Write_Str  (Get_Name_String (Unit_Name));
!                   Write_Line (" in the unit list.");
!                end if;
! 
!                --  The unit is already in the list, but may be it is
!                --  only the other unit kind (spec or body), or what is
!                --  in the unit list is a unit of a project we are extending.
! 
!                if The_Unit /= Prj.Com.No_Unit then
!                   The_Unit_Data := Units.Table (The_Unit);
! 
!                   if The_Unit_Data.File_Names (Unit_Kind).Name = No_Name
!                     or else Project_Extends
!                       (Data.Extends,
!                        The_Unit_Data.File_Names (Unit_Kind).Project)
!                   then
!                      if The_Unit_Data.File_Names (Unit_Kind).Path = Slash then
!                         Remove_Forbidden_File_Name
!                           (The_Unit_Data.File_Names (Unit_Kind).Name);
!                      end if;
! 
!                      --  Record the file name in the hash table Files_Htable
! 
!                      Unit_Prj := (Unit => The_Unit, Project => Project);
!                      Files_Htable.Set (Canonical_File_Name, Unit_Prj);
! 
!                      The_Unit_Data.File_Names (Unit_Kind) :=
!                        (Name         => Canonical_File_Name,
!                         Index        => Unit_Index,
!                         Display_Name => File_Name,
!                         Path         => Canonical_Path_Name,
!                         Display_Path => Path_Name,
!                         Project      => Project,
!                         Needs_Pragma => Needs_Pragma);
!                      Units.Table (The_Unit) := The_Unit_Data;
!                      Source_Recorded := True;
! 
!                   elsif The_Unit_Data.File_Names (Unit_Kind).Project = Project
!                     and then (Data.Known_Order_Of_Source_Dirs or else
!                               The_Unit_Data.File_Names (Unit_Kind).Path =
!                                 Canonical_Path_Name)
!                   then
!                      if Previous_Source = Nil_String then
!                         Data.Sources := Nil_String;
!                      else
!                         String_Elements.Table (Previous_Source).Next :=
!                           Nil_String;
!                         String_Elements.Decrement_Last;
!                      end if;
! 
!                      Current_Source := Previous_Source;
! 
!                   else
!                      --  It is an error to have two units with the same name
!                      --  and the same kind (spec or body).
! 
!                      if The_Location = No_Location then
!                         The_Location := Projects.Table (Project).Location;
!                      end if;
! 
!                      Err_Vars.Error_Msg_Name_1 := Unit_Name;
!                      Error_Msg (Project, "duplicate source {", The_Location);
! 
!                      Err_Vars.Error_Msg_Name_1 :=
!                        Projects.Table
!                          (The_Unit_Data.File_Names (Unit_Kind).Project).Name;
!                      Err_Vars.Error_Msg_Name_2 :=
!                        The_Unit_Data.File_Names (Unit_Kind).Path;
!                      Error_Msg
!                        (Project, "\   project file {, {", The_Location);
! 
!                      Err_Vars.Error_Msg_Name_1 :=
!                        Projects.Table (Project).Name;
!                      Err_Vars.Error_Msg_Name_2 := Canonical_Path_Name;
!                      Error_Msg
!                        (Project, "\   project file {, {", The_Location);
!                   end if;
! 
!                --  It is a new unit, create a new record
! 
!                else
!                   --  First, check if there is no other unit with this file
!                   --  name in another project. If it is, report an error.
!                   --  Of course, we do that only for the first unit in the
!                   --  source file.
! 
!                   Unit_Prj := Files_Htable.Get (Canonical_File_Name);
! 
!                   if not File_Name_Recorded and then
!                     Unit_Prj /= No_Unit_Project
!                   then
!                      Error_Msg_Name_1 := File_Name;
!                      Error_Msg_Name_2 :=
!                        Projects.Table (Unit_Prj.Project).Name;
!                      Error_Msg
!                        (Project,
!                         "{ is already a source of project {",
!                         Location);
! 
!                   else
!                      Units.Increment_Last;
!                      The_Unit := Units.Last;
!                      Units_Htable.Set (Unit_Name, The_Unit);
!                      Unit_Prj := (Unit => The_Unit, Project => Project);
!                      Files_Htable.Set (Canonical_File_Name, Unit_Prj);
!                      The_Unit_Data.Name := Unit_Name;
!                      The_Unit_Data.File_Names (Unit_Kind) :=
!                        (Name         => Canonical_File_Name,
!                         Index        => Unit_Index,
!                         Display_Name => File_Name,
!                         Path         => Canonical_Path_Name,
!                         Display_Path => Path_Name,
!                         Project      => Project,
!                         Needs_Pragma => Needs_Pragma);
!                      Units.Table (The_Unit) := The_Unit_Data;
!                      Source_Recorded := True;
!                   end if;
!                end if;
!             end;
! 
!             exit when Exception_Id = No_Ada_Naming_Exception;
!             File_Name_Recorded := True;
!          end loop;
!       end if;
!    end Record_Ada_Source;
! 
!    --------------------------
!    -- Record_Other_Sources --
!    --------------------------
! 
!    procedure Record_Other_Sources
!      (Project           : Project_Id;
!       Data              : in out Project_Data;
!       Language          : Language_Index;
!       Naming_Exceptions : Boolean)
!    is
!       Source_Dir : String_List_Id := Data.Source_Dirs;
!       Element    : String_Element;
!       Path       : Name_Id;
! 
!       Dir            : Dir_Type;
!       Canonical_Name : Name_Id;
! 
!       Name_Str : String (1 .. 1_024);
!       Last     : Natural := 0;
!       NL       : Name_Location;
! 
!       First_Error : Boolean := True;
! 
!       Suffix : constant String := Body_Suffix_Of (Language, Data);
! 
!    begin
!       while Source_Dir /= Nil_String loop
!          Element := String_Elements.Table (Source_Dir);
  
           declare
!             Dir_Path : constant String := Get_Name_String (Element.Value);
  
           begin
              if Current_Verbosity = High then
!                Write_Str ("checking directory """);
!                Write_Str (Dir_Path);
!                Write_Str (""" for ");
! 
!                if Naming_Exceptions then
!                   Write_Str ("naming exceptions");
! 
!                else
!                   Write_Str ("sources");
!                end if;
! 
!                Write_Str (" of Language ");
!                Display_Language_Name (Language);
              end if;
  
!             Open (Dir, Dir_Path);
  
!             loop
!                Read (Dir, Name_Str, Last);
!                exit when Last = 0;
  
!                if Is_Regular_File
!                  (Dir_Path & Directory_Separator & Name_Str (1 .. Last))
                 then
!                   Name_Len := Last;
!                   Name_Buffer (1 .. Name_Len) := Name_Str (1 .. Last);
!                   Canonical_Case_File_Name (Name_Buffer (1 .. Name_Len));
!                   Canonical_Name := Name_Find;
!                   NL := Source_Names.Get (Canonical_Name);
  
!                   if NL /= No_Name_Location then
!                      if NL.Found then
!                         if not Data.Known_Order_Of_Source_Dirs then
!                            Error_Msg_Name_1 := Canonical_Name;
!                            Error_Msg
!                              (Project,
!                               "{ is found in several source directories",
!                               NL.Location);
!                         end if;
  
!                      else
!                         NL.Found := True;
!                         Source_Names.Set (Canonical_Name, NL);
!                         Name_Len := Dir_Path'Length;
!                         Name_Buffer (1 .. Name_Len) := Dir_Path;
!                         Add_Char_To_Name_Buffer (Directory_Separator);
!                         Add_Str_To_Name_Buffer (Name_Str (1 .. Last));
!                         Path := Name_Find;
! 
!                         Check_For_Source
!                           (File_Name        => Canonical_Name,
!                            Path_Name        => Path,
!                            Project          => Project,
!                            Data             => Data,
!                            Location         => NL.Location,
!                            Language         => Language,
!                            Suffix           => Suffix,
!                            Naming_Exception => Naming_Exceptions);
!                      end if;
                    end if;
+                end if;
+             end loop;
  
!             Close (Dir);
!          end;
  
!          Source_Dir := Element.Next;
!       end loop;
  
!       if not Naming_Exceptions then
!          NL := Source_Names.Get_First;
  
!          --  It is an error if a source file name in a source list or
!          --  in a source list file is not found.
  
!          while NL /= No_Name_Location loop
!             if not NL.Found then
!                Err_Vars.Error_Msg_Name_1 := NL.Name;
  
!                if First_Error then
!                   Error_Msg
!                     (Project,
!                      "source file { cannot be found",
!                      NL.Location);
!                   First_Error := False;
  
+                else
+                   Error_Msg
+                     (Project,
+                      "\source file { cannot be found",
+                      NL.Location);
                 end if;
+             end if;
  
!             NL := Source_Names.Get_Next;
!          end loop;
  
!          --  Any naming exception of this language that is not in a list
!          --  of sources must be removed.
! 
!          declare
!             Source_Id : Other_Source_Id := Data.First_Other_Source;
!             Prev_Id   : Other_Source_Id := No_Other_Source;
!             Source    : Other_Source;
! 
!          begin
!             while Source_Id /= No_Other_Source loop
!                Source := Other_Sources.Table (Source_Id);
! 
!                if Source.Language = Language
!                  and then Source.Naming_Exception
!                then
!                   if Current_Verbosity = High then
!                      Write_Str ("Naming exception """);
!                      Write_Str (Get_Name_String (Source.File_Name));
!                      Write_Str (""" is not in the list of sources,");
!                      Write_Line (" so it is removed.");
!                   end if;
! 
!                   if Prev_Id = No_Other_Source then
!                      Data.First_Other_Source := Source.Next;
! 
!                   else
!                      Other_Sources.Table (Prev_Id).Next := Source.Next;
!                   end if;
! 
!                   Source_Id := Source.Next;
! 
!                   if Source_Id = No_Other_Source then
!                      Data.Last_Other_Source := Prev_Id;
!                   end if;
! 
!                else
!                   Prev_Id := Source_Id;
!                   Source_Id := Source.Next;
!                end if;
!             end loop;
           end;
        end if;
!    end Record_Other_Sources;
  
     ----------------------
     -- Show_Source_Dirs --
*************** package body Prj.Nmsc is
*** 3869,3872 ****
--- 4870,4981 ----
        Write_Line ("end Source_Dirs.");
     end Show_Source_Dirs;
  
+    ----------------
+    -- Suffix_For --
+    ----------------
+ 
+    function Suffix_For
+      (Language : Language_Index;
+       Naming   : Naming_Data) return Name_Id
+    is
+       Suffix : constant Variable_Value :=
+         Value_Of
+           (Index     => Language_Names.Table (Language),
+            Src_Index => 0,
+            In_Array  => Naming.Body_Suffix);
+    begin
+       --  If no suffix for this language in package Naming, use the default
+ 
+       if Suffix = Nil_Variable_Value then
+          Name_Len := 0;
+ 
+          case Language is
+             when Ada_Language_Index =>
+                Add_Str_To_Name_Buffer (".adb");
+ 
+             when C_Language_Index =>
+                Add_Str_To_Name_Buffer (".c");
+ 
+             when C_Plus_Plus_Language_Index =>
+                Add_Str_To_Name_Buffer (".cc");
+ 
+             when others =>
+                return No_Name;
+          end case;
+ 
+       --  Otherwise use the one specified
+ 
+       else
+          Get_Name_String (Suffix.Value);
+       end if;
+ 
+       Canonical_Case_File_Name (Name_Buffer (1 .. Name_Len));
+       return Name_Find;
+    end Suffix_For;
+ 
+    -------------------------
+    -- Warn_If_Not_Sources --
+    -------------------------
+ 
+    --  comments needed in this body ???
+ 
+    procedure Warn_If_Not_Sources
+      (Project     : Project_Id;
+       Conventions : Array_Element_Id;
+       Specs       : Boolean;
+       Extending   : Boolean)
+    is
+       Conv          : Array_Element_Id := Conventions;
+       Unit          : Name_Id;
+       The_Unit_Id   : Unit_Id;
+       The_Unit_Data : Unit_Data;
+       Location      : Source_Ptr;
+ 
+    begin
+       while Conv /= No_Array_Element loop
+          Unit := Array_Elements.Table (Conv).Index;
+          Error_Msg_Name_1 := Unit;
+          Get_Name_String (Unit);
+          To_Lower (Name_Buffer (1 .. Name_Len));
+          Unit := Name_Find;
+          The_Unit_Id := Units_Htable.Get (Unit);
+          Location := Array_Elements.Table (Conv).Value.Location;
+ 
+          if The_Unit_Id = Prj.Com.No_Unit then
+             Error_Msg
+               (Project,
+                "?unknown unit {",
+                Location);
+ 
+          else
+             The_Unit_Data := Units.Table (The_Unit_Id);
+ 
+             if Specs then
+                if not Check_Project
+                  (The_Unit_Data.File_Names (Specification).Project,
+                   Project, Extending)
+                then
+                   Error_Msg
+                     (Project,
+                      "?unit{ has no spec in this project",
+                      Location);
+                end if;
+ 
+             else
+                if not Check_Project
+                  (The_Unit_Data.File_Names (Com.Body_Part).Project,
+                   Project, Extending)
+                then
+                   Error_Msg
+                     (Project,
+                      "?unit{ has no body in this project",
+                      Location);
+                end if;
+             end if;
+          end if;
+ 
+          Conv := Array_Elements.Table (Conv).Next;
+       end loop;
+    end Warn_If_Not_Sources;
+ 
  end Prj.Nmsc;
diff -Nrcpad gcc-3.4.3/gcc/ada/prj-nmsc.ads gcc-4.0.0/gcc/ada/prj-nmsc.ads
*** gcc-3.4.3/gcc/ada/prj-nmsc.ads	Tue Oct 21 13:42:12 2003
--- gcc-4.0.0/gcc/ada/prj-nmsc.ads	Wed Dec  8 11:25:45 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2000-2003 Free Software Foundation, Inc.       --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2000-2004 Free Software Foundation, Inc.       --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 24,50 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  Check the Naming Scheme of a project file, find the directories
! --  and the source files.
  
  private package Prj.Nmsc is
  
!    procedure Ada_Check
!      (Project      : Project_Id;
!       Report_Error : Put_Line_Access);
!    --  Call Language_Independent_Check.
!    --  Check the naming scheme for Ada.
!    --  Find the Ada source files if any.
!    --  If Report_Error is null , use the standard error reporting mechanism
!    --  (Errout). Otherwise, report errors using Report_Error.
  
!    procedure Language_Independent_Check
       (Project      : Project_Id;
!       Report_Error : Put_Line_Access);
!    --  Check the object directory and the source directories.
!    --  Check the library attributes, including the library directory if any.
!    --  Get the set of specification and implementation suffixs, if any.
     --  If Report_Error is null , use the standard error reporting mechanism
     --  (Errout). Otherwise, report errors using Report_Error.
  
  end Prj.Nmsc;
--- 24,60 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  Check the Naming Scheme of a project file, find the source files.
  
  private package Prj.Nmsc is
  
!    --  It would be nicer to have a higher level statement of what these
!    --  procedures do (related to their names), rather than just an english
!    --  language summary of the implementation ???
  
!    procedure Check
       (Project      : Project_Id;
!       Report_Error : Put_Line_Access;
!       Follow_Links : Boolean);
!    --  Check the object directory and the source directories
!    --
!    --  Check the library attributes, including the library directory if any
!    --
!    --  Get the set of specification and implementation suffixes, if any
!    --
!    --  Check the naming scheme for Ada
!    --
!    --  Find the Ada source files if any
!    --
!    --  Check the naming scheme for the supported languages (c, c++, ...) other
!    --  than Ada. Find the source files if any.
!    --
     --  If Report_Error is null , use the standard error reporting mechanism
     --  (Errout). Otherwise, report errors using Report_Error.
+    --
+    --  If Follow_Links is False, it is assumed that the project doesn't contain
+    --  any file duplicated through symbolic links (although the latter are
+    --  still valid if they point to a file which is outside of the project),
+    --  and that no directory has a name which is a valid source name.
  
  end Prj.Nmsc;
diff -Nrcpad gcc-3.4.3/gcc/ada/prj-pars.adb gcc-4.0.0/gcc/ada/prj-pars.adb
*** gcc-3.4.3/gcc/ada/prj-pars.adb	Tue Oct 21 13:42:12 2003
--- gcc-4.0.0/gcc/ada/prj-pars.adb	Wed Dec  8 11:25:45 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2001-2002 Free Software Foundation, Inc.       --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2001-2004 Free Software Foundation, Inc.       --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 26,34 ****
  
  with Ada.Exceptions; use Ada.Exceptions;
  
! with Prj.Err;  use Prj.Err;
  with Output;   use Output;
  with Prj.Com;  use Prj.Com;
  with Prj.Part;
  with Prj.Proc;
  with Prj.Tree; use Prj.Tree;
--- 26,35 ----
  
  with Ada.Exceptions; use Ada.Exceptions;
  
! with Opt;
  with Output;   use Output;
  with Prj.Com;  use Prj.Com;
+ with Prj.Err;  use Prj.Err;
  with Prj.Part;
  with Prj.Proc;
  with Prj.Tree; use Prj.Tree;
*************** package body Prj.Pars is
*** 64,70 ****
             (Project           => The_Project,
              Success           => Success,
              From_Project_Node => Project_Tree,
!             Report_Error      => null);
           Prj.Err.Finalize;
  
           if not Success then
--- 65,72 ----
             (Project           => The_Project,
              Success           => Success,
              From_Project_Node => Project_Tree,
!             Report_Error      => null,
!             Follow_Links      => Opt.Follow_Links);
           Prj.Err.Finalize;
  
           if not Success then
diff -Nrcpad gcc-3.4.3/gcc/ada/prj-pars.ads gcc-4.0.0/gcc/ada/prj-pars.ads
*** gcc-3.4.3/gcc/ada/prj-pars.ads	Tue Oct 21 13:42:12 2003
--- gcc-4.0.0/gcc/ada/prj-pars.ads	Wed Dec  8 11:25:45 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2000-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2000-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 24,46 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  Implements the parsing of project files.
  
  with GNAT.OS_Lib; use GNAT.OS_Lib;
  
  package Prj.Pars is
  
     procedure Set_Verbosity (To : Verbosity);
!    --  Set the verbosity when parsing the project files.
  
     procedure Parse
       (Project           : out Project_Id;
        Project_File_Name : String;
        Packages_To_Check : String_List_Access := All_Packages);
     --  Parse a project files and all its imported project files.
     --  If parsing is successful, Project_Id is the project ID
     --  of the main project file; otherwise, Project_Id is set
     --  to No_Project.
     --  Packages_To_Check indicates the packages where any unknown attribute
     --  produces an error. For other packages, an unknown attribute produces
     --  a warning.
--- 24,48 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  Implements the parsing of project files
  
  with GNAT.OS_Lib; use GNAT.OS_Lib;
  
  package Prj.Pars is
  
     procedure Set_Verbosity (To : Verbosity);
!    --  Set the verbosity when parsing the project files
  
     procedure Parse
       (Project           : out Project_Id;
        Project_File_Name : String;
        Packages_To_Check : String_List_Access := All_Packages);
     --  Parse a project files and all its imported project files.
+    --
     --  If parsing is successful, Project_Id is the project ID
     --  of the main project file; otherwise, Project_Id is set
     --  to No_Project.
+    --
     --  Packages_To_Check indicates the packages where any unknown attribute
     --  produces an error. For other packages, an unknown attribute produces
     --  a warning.
diff -Nrcpad gcc-3.4.3/gcc/ada/prj-part.adb gcc-4.0.0/gcc/ada/prj-part.adb
*** gcc-3.4.3/gcc/ada/prj-part.adb	Mon Dec  8 10:33:15 2003
--- gcc-4.0.0/gcc/ada/prj-part.adb	Wed Dec  8 11:25:45 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 26,37 ****
  
  with Err_Vars; use Err_Vars;
  with Namet;    use Namet;
! with Opt;
  with Osint;    use Osint;
  with Output;   use Output;
  with Prj.Com;  use Prj.Com;
  with Prj.Dect;
  with Prj.Err;  use Prj.Err;
  with Scans;    use Scans;
  with Sinput;   use Sinput;
  with Sinput.P; use Sinput.P;
--- 26,38 ----
  
  with Err_Vars; use Err_Vars;
  with Namet;    use Namet;
! with Opt;      use Opt;
  with Osint;    use Osint;
  with Output;   use Output;
  with Prj.Com;  use Prj.Com;
  with Prj.Dect;
  with Prj.Err;  use Prj.Err;
+ with Prj.Ext;  use Prj.Ext;
  with Scans;    use Scans;
  with Sinput;   use Sinput;
  with Sinput.P; use Sinput.P;
*************** package body Prj.Part is
*** 53,70 ****
  
     Dir_Sep  : Character renames GNAT.OS_Lib.Directory_Separator;
  
-    Project_Path : String_Access;
-    --  The project path; initialized during package elaboration.
-    --  Contains at least the current working directory.
- 
-    Ada_Project_Path : constant String := "ADA_PROJECT_PATH";
-    --  Name of the env. variable that contains path name(s) of directories
-    --  where project files may reside.
- 
-    Prj_Path : constant String_Access := Getenv (Ada_Project_Path);
-    --  The path name(s) of directories where project files may reside.
-    --  May be empty.
- 
     type Extension_Origin is (None, Extending_Simple, Extending_All);
     --  Type of parameter From_Extended for procedures Parse_Single_Project and
     --  Post_Parse_Context_Clause. Extending_All means that we are parsing the
--- 54,59 ----
*************** package body Prj.Part is
*** 97,109 ****
     --  projects. These imported projects will be effectively parsed after the
     --  name of the current project has been extablished.
  
!    type Name_And_Id is record
!       Name : Name_Id;
!       Id   : Project_Node_Id;
     end record;
  
     package Project_Stack is new Table.Table
!      (Table_Component_Type => Name_And_Id,
        Table_Index_Type     => Nat,
        Table_Low_Bound      => 1,
        Table_Initial        => 10,
--- 86,99 ----
     --  projects. These imported projects will be effectively parsed after the
     --  name of the current project has been extablished.
  
!    type Names_And_Id is record
!       Path_Name           : Name_Id;
!       Canonical_Path_Name : Name_Id;
!       Id                  : Project_Node_Id;
     end record;
  
     package Project_Stack is new Table.Table
!      (Table_Component_Type => Names_And_Id,
        Table_Index_Type     => Nat,
        Table_Low_Bound      => 1,
        Table_Initial        => 10,
*************** package body Prj.Part is
*** 160,185 ****
       (Context_Clause    : With_Id;
        Imported_Projects : out Project_Node_Id;
        Project_Directory : Name_Id;
!       From_Extended     : Extension_Origin);
     --  Parse the imported projects that have been stored in table Withs,
     --  if any. From_Extended is used for the call to Parse_Single_Project
!    --  below.
  
     procedure Parse_Single_Project
       (Project       : out Project_Node_Id;
        Path_Name     : String;
        Extended      : Boolean;
!       From_Extended : Extension_Origin);
     --  Parse a project file.
     --  Recursive procedure: it calls itself for imported and extended
     --  projects. When From_Extended is not None, if the project has already
     --  been parsed and is an extended project A, return the ultimate
!    --  (not extended) project that extends A.
  
     function Project_Path_Name_Of
       (Project_File_Name : String;
!       Directory         : String)
!       return              String;
     --  Returns the path name of a project file. Returns an empty string
     --  if project file cannot be found.
  
--- 150,179 ----
       (Context_Clause    : With_Id;
        Imported_Projects : out Project_Node_Id;
        Project_Directory : Name_Id;
!       From_Extended     : Extension_Origin;
!       In_Limited        : Boolean);
     --  Parse the imported projects that have been stored in table Withs,
     --  if any. From_Extended is used for the call to Parse_Single_Project
!    --  below. When In_Limited is True, the importing path includes at least
!    --  one "limited with".
  
     procedure Parse_Single_Project
       (Project       : out Project_Node_Id;
+       Extends_All   : out Boolean;
        Path_Name     : String;
        Extended      : Boolean;
!       From_Extended : Extension_Origin;
!       In_Limited    : Boolean);
     --  Parse a project file.
     --  Recursive procedure: it calls itself for imported and extended
     --  projects. When From_Extended is not None, if the project has already
     --  been parsed and is an extended project A, return the ultimate
!    --  (not extended) project that extends A. When In_Limited is True,
!    --  the importing path includes at least one "limited with".
  
     function Project_Path_Name_Of
       (Project_File_Name : String;
!       Directory         : String) return String;
     --  Returns the path name of a project file. Returns an empty string
     --  if project file cannot be found.
  
*************** package body Prj.Part is
*** 431,436 ****
--- 425,431 ----
        Store_Comments         : Boolean := False)
     is
        Current_Directory : constant String := Get_Current_Dir;
+       Dummy : Boolean;
  
     begin
        --  Save the Packages_To_Check in Prj, so that it is visible from
*************** package body Prj.Part is
*** 442,448 ****
  
        if Current_Verbosity >= Medium then
           Write_Str ("ADA_PROJECT_PATH=""");
!          Write_Str (Project_Path.all);
           Write_Line ("""");
        end if;
  
--- 437,443 ----
  
        if Current_Verbosity >= Medium then
           Write_Str ("ADA_PROJECT_PATH=""");
!          Write_Str (Project_Path);
           Write_Line ("""");
        end if;
  
*************** package body Prj.Part is
*** 467,475 ****
  
           Parse_Single_Project
             (Project       => Project,
              Path_Name     => Path_Name,
              Extended      => False,
!             From_Extended => None);
  
           --  If Project is an extending-all project, create the eventual
           --  virtual extending projects and check that there are no illegally
--- 462,472 ----
  
           Parse_Single_Project
             (Project       => Project,
+             Extends_All   => Dummy,
              Path_Name     => Path_Name,
              Extended      => False,
!             From_Extended => None,
!             In_Limited    => False);
  
           --  If Project is an extending-all project, create the eventual
           --  virtual extending projects and check that there are no illegally
*************** package body Prj.Part is
*** 523,533 ****
                             Virtual_Hash.Remove (Imported);
                             Declaration := Project_Declaration_Of (Imported);
                          end loop;
- 
-                      elsif Virtual_Hash.Get (Imported) /= Empty_Node then
-                         Error_Msg
-                           ("this project cannot be imported directly",
-                            Location_Of (With_Clause));
                       end if;
  
                    end if;
--- 520,525 ----
*************** package body Prj.Part is
*** 665,671 ****
       (Context_Clause    : With_Id;
        Imported_Projects : out Project_Node_Id;
        Project_Directory : Name_Id;
!       From_Extended     : Extension_Origin)
     is
        Current_With_Clause : With_Id := Context_Clause;
  
--- 657,664 ----
       (Context_Clause    : With_Id;
        Imported_Projects : out Project_Node_Id;
        Project_Directory : Name_Id;
!       From_Extended     : Extension_Origin;
!       In_Limited        : Boolean)
     is
        Current_With_Clause : With_Id := Context_Clause;
  
*************** package body Prj.Part is
*** 678,683 ****
--- 671,677 ----
  
        Current_With : With_Record;
        Limited_With : Boolean := False;
+       Extends_All  : Boolean := False;
  
     begin
        Imported_Projects := Empty_Node;
*************** package body Prj.Part is
*** 686,692 ****
           Current_With := Withs.Table (Current_With_Clause);
           Current_With_Clause := Current_With.Next;
  
!          Limited_With := Current_With.Limited_With;
  
           declare
              Original_Path : constant String :=
--- 680,686 ----
           Current_With := Withs.Table (Current_With_Clause);
           Current_With_Clause := Current_With.Next;
  
!          Limited_With := In_Limited or Current_With.Limited_With;
  
           declare
              Original_Path : constant String :=
*************** package body Prj.Part is
*** 697,702 ****
--- 691,702 ----
                                       (Original_Path,
                                        Project_Directory_Path);
  
+             Resolved_Path : constant String :=
+                               Normalize_Pathname
+                                 (Imported_Path_Name,
+                                  Resolve_Links => True,
+                                  Case_Sensitive => True);
+ 
              Withed_Project : Project_Node_Id := Empty_Node;
  
           begin
*************** package body Prj.Part is
*** 713,719 ****
  
                 if Project_Stack.Last > 1 then
                    for Index in reverse 1 .. Project_Stack.Last loop
!                      Error_Msg_Name_1 := Project_Stack.Table (Index).Name;
                       Error_Msg ("\imported by {", Current_With.Location);
                    end loop;
                 end if;
--- 713,719 ----
  
                 if Project_Stack.Last > 1 then
                    for Index in reverse 1 .. Project_Stack.Last loop
!                      Error_Msg_Name_1 := Project_Stack.Table (Index).Path_Name;
                       Error_Msg ("\imported by {", Current_With.Location);
                    end loop;
                 end if;
*************** package body Prj.Part is
*** 740,767 ****
                   (Current_Project, Current_With.Path);
                 Set_Location_Of (Current_Project, Current_With.Location);
  
!                --  If this is a "limited with", check if we have
!                --  a circularity; if we have one, get the project id
!                --  of the limited imported project file, and don't
!                --  parse it.
  
                 if Limited_With and then Project_Stack.Last > 1 then
                    declare
-                      Normed : constant String :=
-                                 Normalize_Pathname (Imported_Path_Name);
                       Canonical_Path_Name : Name_Id;
  
                    begin
!                      Name_Len := Normed'Length;
!                      Name_Buffer (1 .. Name_Len) := Normed;
                       Canonical_Path_Name := Name_Find;
  
                       for Index in 1 .. Project_Stack.Last loop
!                         if Project_Stack.Table (Index).Name =
!                           Canonical_Path_Name
                          then
                             --  We have found the limited imported project,
!                            --  get its project id, and don't parse it.
  
                             Withed_Project := Project_Stack.Table (Index).Id;
                             exit;
--- 740,765 ----
                   (Current_Project, Current_With.Path);
                 Set_Location_Of (Current_Project, Current_With.Location);
  
!                --  If this is a "limited with", check if we have a circularity.
!                --  If we have one, get the project id of the limited imported
!                --  project file, and do not parse it.
  
                 if Limited_With and then Project_Stack.Last > 1 then
                    declare
                       Canonical_Path_Name : Name_Id;
  
                    begin
!                      Name_Len := Resolved_Path'Length;
!                      Name_Buffer (1 .. Name_Len) := Resolved_Path;
!                      Canonical_Case_File_Name (Name_Buffer (1 .. Name_Len));
                       Canonical_Path_Name := Name_Find;
  
                       for Index in 1 .. Project_Stack.Last loop
!                         if Project_Stack.Table (Index).Canonical_Path_Name =
!                              Canonical_Path_Name
                          then
                             --  We have found the limited imported project,
!                            --  get its project id, and do not parse it.
  
                             Withed_Project := Project_Stack.Table (Index).Id;
                             exit;
*************** package body Prj.Part is
*** 775,783 ****
                 if Withed_Project = Empty_Node then
                    Parse_Single_Project
                      (Project       => Withed_Project,
                       Path_Name     => Imported_Path_Name,
                       Extended      => False,
!                      From_Extended => From_Extended);
                 end if;
  
                 if Withed_Project = Empty_Node then
--- 773,786 ----
                 if Withed_Project = Empty_Node then
                    Parse_Single_Project
                      (Project       => Withed_Project,
+                      Extends_All   => Extends_All,
                       Path_Name     => Imported_Path_Name,
                       Extended      => False,
!                      From_Extended => From_Extended,
!                      In_Limited    => Limited_With);
! 
!                else
!                   Extends_All := Is_Extending_All (Withed_Project);
                 end if;
  
                 if Withed_Project = Empty_Node then
*************** package body Prj.Part is
*** 802,810 ****
                       To           => Withed_Project,
                       Limited_With => Limited_With);
                    Set_Name_Of (Current_Project, Name_Of (Withed_Project));
!                   Name_Len := Imported_Path_Name'Length;
!                   Name_Buffer (1 .. Name_Len) := Imported_Path_Name;
                    Set_Path_Name_Of (Current_Project, Name_Find);
                 end if;
              end if;
           end;
--- 805,818 ----
                       To           => Withed_Project,
                       Limited_With => Limited_With);
                    Set_Name_Of (Current_Project, Name_Of (Withed_Project));
! 
!                   Name_Len := Resolved_Path'Length;
!                   Name_Buffer (1 .. Name_Len) := Resolved_Path;
                    Set_Path_Name_Of (Current_Project, Name_Find);
+ 
+                   if Extends_All then
+                      Set_Is_Extending_All (Current_Project);
+                   end if;
                 end if;
              end if;
           end;
*************** package body Prj.Part is
*** 817,825 ****
  
     procedure Parse_Single_Project
       (Project       : out Project_Node_Id;
        Path_Name     : String;
        Extended      : Boolean;
!       From_Extended : Extension_Origin)
     is
        Normed_Path_Name    : Name_Id;
        Canonical_Path_Name : Name_Id;
--- 825,835 ----
  
     procedure Parse_Single_Project
       (Project       : out Project_Node_Id;
+       Extends_All   : out Boolean;
        Path_Name     : String;
        Extended      : Boolean;
!       From_Extended : Extension_Origin;
!       In_Limited    : Boolean)
     is
        Normed_Path_Name    : Name_Id;
        Canonical_Path_Name : Name_Id;
*************** package body Prj.Part is
*** 827,832 ****
--- 837,844 ----
        Project_Scan_State  : Saved_Project_Scan_State;
        Source_Index        : Source_File_Index;
  
+       Extending : Boolean := False;
+ 
        Extended_Project    : Project_Node_Id := Empty_Node;
  
        A_Project_Name_And_Node : Tree_Private_Part.Project_Name_And_Node :=
*************** package body Prj.Part is
*** 843,872 ****
        Project_Comment_State : Tree.Comment_State;
  
     begin
        declare
!          Normed : String := Normalize_Pathname (Path_Name);
        begin
!          Name_Len := Normed'Length;
!          Name_Buffer (1 .. Name_Len) := Normed;
           Normed_Path_Name := Name_Find;
!          Canonical_Case_File_Name (Normed);
!          Name_Len := Normed'Length;
!          Name_Buffer (1 .. Name_Len) := Normed;
           Canonical_Path_Name := Name_Find;
        end;
  
        --  Check for a circular dependency
  
        for Index in 1 .. Project_Stack.Last loop
!          if Canonical_Path_Name = Project_Stack.Table (Index).Name then
              Error_Msg ("circular dependency detected", Token_Ptr);
              Error_Msg_Name_1 := Normed_Path_Name;
              Error_Msg ("\  { is imported by", Token_Ptr);
  
              for Current in reverse 1 .. Project_Stack.Last loop
!                Error_Msg_Name_1 := Project_Stack.Table (Current).Name;
  
!                if Error_Msg_Name_1 /= Canonical_Path_Name then
                    Error_Msg
                      ("\  { which itself is imported by", Token_Ptr);
  
--- 855,895 ----
        Project_Comment_State : Tree.Comment_State;
  
     begin
+       Extends_All := False;
+ 
        declare
!          Normed_Path    : constant String := Normalize_Pathname
!                             (Path_Name, Resolve_Links => False,
!                              Case_Sensitive           => True);
!          Canonical_Path : constant String := Normalize_Pathname
!                             (Normed_Path, Resolve_Links => True,
!                              Case_Sensitive             => False);
! 
        begin
!          Name_Len := Normed_Path'Length;
!          Name_Buffer (1 .. Name_Len) := Normed_Path;
           Normed_Path_Name := Name_Find;
!          Name_Len := Canonical_Path'Length;
!          Name_Buffer (1 .. Name_Len) := Canonical_Path;
           Canonical_Path_Name := Name_Find;
        end;
  
        --  Check for a circular dependency
  
        for Index in 1 .. Project_Stack.Last loop
!          if Canonical_Path_Name =
!               Project_Stack.Table (Index).Canonical_Path_Name
!          then
              Error_Msg ("circular dependency detected", Token_Ptr);
              Error_Msg_Name_1 := Normed_Path_Name;
              Error_Msg ("\  { is imported by", Token_Ptr);
  
              for Current in reverse 1 .. Project_Stack.Last loop
!                Error_Msg_Name_1 := Project_Stack.Table (Current).Path_Name;
  
!                if Project_Stack.Table (Current).Canonical_Path_Name /=
!                     Canonical_Path_Name
!                then
                    Error_Msg
                      ("\  { which itself is imported by", Token_Ptr);
  
*************** package body Prj.Part is
*** 884,906 ****
        --  Put the new path name on the stack
  
        Project_Stack.Increment_Last;
!       Project_Stack.Table (Project_Stack.Last).Name := Canonical_Path_Name;
  
!       --  Check if the project file has already been parsed.
  
        while
          A_Project_Name_And_Node /= Tree_Private_Part.No_Project_Name_And_Node
        loop
!          if
!            Path_Name_Of (A_Project_Name_And_Node.Node) = Canonical_Path_Name
!          then
              if Extended then
  
                 if A_Project_Name_And_Node.Extended then
                    Error_Msg
                      ("cannot extend the same project file several times",
                       Token_Ptr);
- 
                 else
                    Error_Msg
                      ("cannot extend an already imported project file",
--- 907,928 ----
        --  Put the new path name on the stack
  
        Project_Stack.Increment_Last;
!       Project_Stack.Table (Project_Stack.Last).Path_Name := Normed_Path_Name;
!       Project_Stack.Table (Project_Stack.Last).Canonical_Path_Name :=
!         Canonical_Path_Name;
  
!       --  Check if the project file has already been parsed
  
        while
          A_Project_Name_And_Node /= Tree_Private_Part.No_Project_Name_And_Node
        loop
!          if A_Project_Name_And_Node.Canonical_Path = Canonical_Path_Name then
              if Extended then
  
                 if A_Project_Name_And_Node.Extended then
                    Error_Msg
                      ("cannot extend the same project file several times",
                       Token_Ptr);
                 else
                    Error_Msg
                      ("cannot extend an already imported project file",
*************** package body Prj.Part is
*** 908,924 ****
                 end if;
  
              elsif A_Project_Name_And_Node.Extended then
!                --  If the imported project is an extended project A, and we are
!                --  in an extended project, replace A with the ultimate project
!                --  extending A.
  
                 if From_Extended /= None then
                    declare
                       Decl : Project_Node_Id :=
!                        Project_Declaration_Of
!                          (A_Project_Name_And_Node.Node);
!                      Prj : Project_Node_Id :=
!                        Extending_Project_Of (Decl);
                    begin
                       loop
                          Decl := Project_Declaration_Of (Prj);
--- 930,950 ----
                 end if;
  
              elsif A_Project_Name_And_Node.Extended then
!                Extends_All :=
!                  Is_Extending_All (A_Project_Name_And_Node.Node);
! 
!                --  If the imported project is an extended project A,
!                --  and we are in an extended project, replace A with the
!                --  ultimate project extending A.
  
                 if From_Extended /= None then
                    declare
                       Decl : Project_Node_Id :=
!                               Project_Declaration_Of
!                                 (A_Project_Name_And_Node.Node);
! 
!                      Prj  : Project_Node_Id := Extending_Project_Of (Decl);
! 
                    begin
                       loop
                          Decl := Project_Declaration_Of (Prj);
*************** package body Prj.Part is
*** 950,956 ****
        Source_Index := Load_Project_File (Path_Name);
        Tree.Save (Project_Comment_State);
  
!       --  if we cannot find it, we stop
  
        if Source_Index = No_Source_File then
           Project := Empty_Node;
--- 976,982 ----
        Source_Index := Load_Project_File (Path_Name);
        Tree.Save (Project_Comment_State);
  
!       --  If we cannot find it, we stop
  
        if Source_Index = No_Source_File then
           Project := Empty_Node;
*************** package body Prj.Part is
*** 1002,1008 ****
        --  Clear the Buffer
  
        Buffer_Last := 0;
- 
        loop
           Expect (Tok_Identifier, "identifier");
  
--- 1028,1033 ----
*************** package body Prj.Part is
*** 1034,1039 ****
--- 1059,1085 ----
           Scan;
        end loop;
  
+       --  See if this is an extending project
+ 
+       if Token = Tok_Extends then
+ 
+          --  Make sure that gnatmake will use mapping files
+ 
+          Create_Mapping_File := True;
+ 
+          --  We are extending another project
+ 
+          Extending := True;
+ 
+          Scan; -- scan past EXTENDS
+ 
+          if Token = Tok_All then
+             Extends_All := True;
+             Set_Is_Extending_All (Project);
+             Scan; --  scan past ALL
+          end if;
+       end if;
+ 
        --  If the name is well formed, Buffer_Last is > 0
  
        if Buffer_Last > 0 then
*************** package body Prj.Part is
*** 1081,1087 ****
           begin
              --  Extending_All is always propagated
  
!             if From_Extended = Extending_All then
                 From_Ext := Extending_All;
  
              --  Otherwise, From_Extended is set to Extending_Single if the
--- 1127,1133 ----
           begin
              --  Extending_All is always propagated
  
!             if From_Extended = Extending_All or else Extends_All then
                 From_Ext := Extending_All;
  
              --  Otherwise, From_Extended is set to Extending_Single if the
*************** package body Prj.Part is
*** 1095,1107 ****
                (Context_Clause    => First_With,
                 Imported_Projects => Imported_Projects,
                 Project_Directory => Project_Directory,
!                From_Extended     => From_Ext);
              Set_First_With_Clause_Of (Project, Imported_Projects);
           end;
  
           declare
!             Project_Name : Name_Id :=
!                              Tree_Private_Part.Projects_Htable.Get_First.Name;
  
           begin
              --  Check if we already have a project with this name
--- 1141,1155 ----
                (Context_Clause    => First_With,
                 Imported_Projects => Imported_Projects,
                 Project_Directory => Project_Directory,
!                From_Extended     => From_Ext,
!                In_Limited        => In_Limited);
              Set_First_With_Clause_Of (Project, Imported_Projects);
           end;
  
           declare
!             Name_And_Node : Tree_Private_Part.Project_Name_And_Node :=
!                               Tree_Private_Part.Projects_Htable.Get_First;
!             Project_Name : Name_Id := Name_And_Node.Name;
  
           begin
              --  Check if we already have a project with this name
*************** package body Prj.Part is
*** 1109,1121 ****
              while Project_Name /= No_Name
                and then Project_Name /= Name_Of_Project
              loop
!                Project_Name := Tree_Private_Part.Projects_Htable.Get_Next.Name;
              end loop;
  
              --  Report an error if we already have a project with this name
  
              if Project_Name /= No_Name then
!                Error_Msg ("duplicate project name", Token_Ptr);
  
              else
                 --  Otherwise, add the name of the project to the hash table, so
--- 1157,1173 ----
              while Project_Name /= No_Name
                and then Project_Name /= Name_Of_Project
              loop
!                Name_And_Node := Tree_Private_Part.Projects_Htable.Get_Next;
!                Project_Name := Name_And_Node.Name;
              end loop;
  
              --  Report an error if we already have a project with this name
  
              if Project_Name /= No_Name then
!                Error_Msg_Name_1 := Project_Name;
!                Error_Msg ("duplicate project name {", Location_Of (Project));
!                Error_Msg_Name_1 := Path_Name_Of (Name_And_Node.Node);
!                Error_Msg ("\already in {", Location_Of (Project));
  
              else
                 --  Otherwise, add the name of the project to the hash table, so
*************** package body Prj.Part is
*** 1124,1152 ****
  
                 Tree_Private_Part.Projects_Htable.Set
                   (K => Name_Of_Project,
!                   E => (Name     => Name_Of_Project,
!                         Node     => Project,
!                         Extended => Extended));
              end if;
           end;
  
        end if;
  
!       if Token = Tok_Extends then
! 
!          --  Make sure that gnatmake will use mapping files
! 
!          Opt.Create_Mapping_File := True;
! 
!          --  We are extending another project
! 
!          Scan; -- scan past EXTENDS
! 
!          if Token = Tok_All then
!             Set_Is_Extending_All (Project);
!             Scan; --  scan past ALL
!          end if;
! 
           Expect (Tok_String_Literal, "literal string");
  
           if Token = Tok_String_Literal then
--- 1176,1191 ----
  
                 Tree_Private_Part.Projects_Htable.Set
                   (K => Name_Of_Project,
!                   E => (Name           => Name_Of_Project,
!                         Node           => Project,
!                         Canonical_Path => Canonical_Path_Name,
!                         Extended       => Extended));
              end if;
           end;
  
        end if;
  
!       if Extending then
           Expect (Tok_String_Literal, "literal string");
  
           if Token = Tok_String_Literal then
*************** package body Prj.Part is
*** 1176,1210 ****
  
                    if Project_Stack.Last > 1 then
                       Error_Msg_Name_1 :=
!                        Project_Stack.Table (Project_Stack.Last).Name;
                       Error_Msg ("\extended by {", Token_Ptr);
  
                       for Index in reverse 1 .. Project_Stack.Last - 1 loop
!                         Error_Msg_Name_1 := Project_Stack.Table (Index).Name;
                          Error_Msg ("\imported by {", Token_Ptr);
                       end loop;
                    end if;
  
                 else
                    declare
!                      From_Extended : Extension_Origin := None;
  
                    begin
!                      if Is_Extending_All (Project) then
!                         From_Extended := Extending_All;
                       end if;
  
                       Parse_Single_Project
                         (Project       => Extended_Project,
                          Path_Name     => Extended_Project_Path_Name,
                          Extended      => True,
!                         From_Extended => From_Extended);
                    end;
  
                    --  A project that extends an extending-all project is also
                    --  an extending-all project.
  
!                   if Is_Extending_All (Extended_Project) then
                       Set_Is_Extending_All (Project);
                    end if;
                 end if;
--- 1215,1254 ----
  
                    if Project_Stack.Last > 1 then
                       Error_Msg_Name_1 :=
!                        Project_Stack.Table (Project_Stack.Last).Path_Name;
                       Error_Msg ("\extended by {", Token_Ptr);
  
                       for Index in reverse 1 .. Project_Stack.Last - 1 loop
!                         Error_Msg_Name_1 :=
!                           Project_Stack.Table (Index).Path_Name;
                          Error_Msg ("\imported by {", Token_Ptr);
                       end loop;
                    end if;
  
                 else
                    declare
!                      From_Ext : Extension_Origin := None;
  
                    begin
!                      if From_Extended = Extending_All or else Extends_All then
!                         From_Ext := Extending_All;
                       end if;
  
                       Parse_Single_Project
                         (Project       => Extended_Project,
+                         Extends_All   => Extends_All,
                          Path_Name     => Extended_Project_Path_Name,
                          Extended      => True,
!                         From_Extended => From_Ext,
!                         In_Limited    => In_Limited);
                    end;
  
                    --  A project that extends an extending-all project is also
                    --  an extending-all project.
  
!                   if Extended_Project /= Empty_Node
!                     and then Is_Extending_All (Extended_Project)
!                   then
                       Set_Is_Extending_All (Project);
                    end if;
                 end if;
*************** package body Prj.Part is
*** 1226,1239 ****
              With_Clause_Loop :
              while With_Clause /= Empty_Node loop
                 Imported := Project_Node_Of (With_Clause);
-                With_Clause := Next_With_Clause_Of (With_Clause);
  
!                if Is_Extending_All (Imported) then
                    Error_Msg_Name_1 := Name_Of (Imported);
                    Error_Msg ("cannot import extending-all project {",
                               Token_Ptr);
                    exit With_Clause_Loop;
                 end if;
              end loop With_Clause_Loop;
           end;
        end if;
--- 1270,1284 ----
              With_Clause_Loop :
              while With_Clause /= Empty_Node loop
                 Imported := Project_Node_Of (With_Clause);
  
!                if Is_Extending_All (With_Clause) then
                    Error_Msg_Name_1 := Name_Of (Imported);
                    Error_Msg ("cannot import extending-all project {",
                               Token_Ptr);
                    exit With_Clause_Loop;
                 end if;
+ 
+                With_Clause := Next_With_Clause_Of (With_Clause);
              end loop With_Clause_Loop;
           end;
        end if;
*************** package body Prj.Part is
*** 1301,1307 ****
           Project_Declaration : Project_Node_Id := Empty_Node;
  
        begin
!          --  No need to Scan past "is", Prj.Dect.Parse will do it.
  
           Prj.Dect.Parse
             (Declarations    => Project_Declaration,
--- 1346,1352 ----
           Project_Declaration : Project_Node_Id := Empty_Node;
  
        begin
!          --  No need to Scan past "is", Prj.Dect.Parse will do it
  
           Prj.Dect.Parse
             (Declarations    => Project_Declaration,
*************** package body Prj.Part is
*** 1533,1540 ****
  
     function Project_Path_Name_Of
       (Project_File_Name : String;
!       Directory         : String)
!       return              String
     is
        Result : String_Access;
  
--- 1578,1584 ----
  
     function Project_Path_Name_Of
       (Project_File_Name : String;
!       Directory         : String) return String
     is
        Result : String_Access;
  
*************** package body Prj.Part is
*** 1562,1568 ****
             Locate_Regular_File
             (File_Name => Directory & Directory_Separator &
                Project_File_Name & Project_File_Extension,
!             Path      => Project_Path.all);
  
           --  Then we try <directory>/<file_name>
  
--- 1606,1612 ----
             Locate_Regular_File
             (File_Name => Directory & Directory_Separator &
                Project_File_Name & Project_File_Extension,
!             Path      => Project_Path);
  
           --  Then we try <directory>/<file_name>
  
*************** package body Prj.Part is
*** 1578,1584 ****
                Locate_Regular_File
                (File_Name => Directory & Directory_Separator &
                   Project_File_Name,
!                Path      => Project_Path.all);
           end if;
        end if;
  
--- 1622,1628 ----
                Locate_Regular_File
                (File_Name => Directory & Directory_Separator &
                   Project_File_Name,
!                Path      => Project_Path);
           end if;
        end if;
  
*************** package body Prj.Part is
*** 1595,1601 ****
           Result :=
             Locate_Regular_File
             (File_Name => Project_File_Name & Project_File_Extension,
!             Path      => Project_Path.all);
        end if;
  
        if Result = null then
--- 1639,1645 ----
           Result :=
             Locate_Regular_File
             (File_Name => Project_File_Name & Project_File_Extension,
!             Path      => Project_Path);
        end if;
  
        if Result = null then
*************** package body Prj.Part is
*** 1610,1616 ****
           Result :=
             Locate_Regular_File
             (File_Name => Project_File_Name,
!             Path      => Project_Path.all);
        end if;
  
        --  If we cannot find the project file, we return an empty string
--- 1654,1660 ----
           Result :=
             Locate_Regular_File
             (File_Name => Project_File_Name,
!             Path      => Project_Path);
        end if;
  
        --  If we cannot find the project file, we return an empty string
*************** package body Prj.Part is
*** 1620,1641 ****
  
        else
           declare
!             Final_Result : String :=
!                              GNAT.OS_Lib.Normalize_Pathname (Result.all);
           begin
              Free (Result);
-             Canonical_Case_File_Name (Final_Result);
              return Final_Result;
           end;
        end if;
     end Project_Path_Name_Of;
  
- begin
-    --  Initialize Project_Path during package elaboration
- 
-    if Prj_Path.all = "" then
-       Project_Path := new String'(".");
-    else
-       Project_Path := new String'("." & Path_Separator & Prj_Path.all);
-    end if;
  end Prj.Part;
--- 1664,1679 ----
  
        else
           declare
!             Final_Result : constant String :=
!                              GNAT.OS_Lib.Normalize_Pathname
!                                (Result.all,
!                                 Resolve_Links  => False,
!                                 Case_Sensitive => True);
           begin
              Free (Result);
              return Final_Result;
           end;
        end if;
     end Project_Path_Name_Of;
  
  end Prj.Part;
diff -Nrcpad gcc-3.4.3/gcc/ada/prj-pp.adb gcc-4.0.0/gcc/ada/prj-pp.adb
*** gcc-3.4.3/gcc/ada/prj-pp.adb	Mon Jan  5 15:20:45 2004
--- gcc-4.0.0/gcc/ada/prj-pp.adb	Wed May  5 10:09:55 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2001-2003 Free Software Foundation, Inc.       --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2001-2004 Free Software Foundation, Inc.       --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Prj.PP is
*** 454,459 ****
--- 454,464 ----
                    pragma Debug (Indicate_Tested (N_Literal_String));
                    Output_String (String_Value_Of (Node));
  
+                   if Source_Index_Of (Node) /= 0 then
+                      Write_String (" at ");
+                      Write_String (Source_Index_Of (Node)'Img);
+                   end if;
+ 
                 when N_Attribute_Declaration =>
                    pragma Debug (Indicate_Tested (N_Attribute_Declaration));
                    Print (First_Comment_Before (Node), Indent);
*************** package body Prj.PP is
*** 464,469 ****
--- 469,480 ----
                    if Associative_Array_Index_Of (Node) /= No_Name then
                       Write_String (" (");
                       Output_String (Associative_Array_Index_Of (Node));
+ 
+                      if Source_Index_Of (Node) /= 0 then
+                         Write_String (" at ");
+                         Write_String (Source_Index_Of (Node)'Img);
+                      end if;
+ 
                       Write_String (")");
                    end if;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/prj-proc.adb gcc-4.0.0/gcc/ada/prj-proc.adb
*** gcc-3.4.3/gcc/ada/prj-proc.adb	Mon Nov 17 14:58:16 2003
--- gcc-4.0.0/gcc/ada/prj-proc.adb	Wed Dec  8 11:25:46 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Opt;
*** 30,39 ****
  with Osint;    use Osint;
  with Output;   use Output;
  with Prj.Attr; use Prj.Attr;
- with Prj.Com;  use Prj.Com;
  with Prj.Err;  use Prj.Err;
  with Prj.Ext;  use Prj.Ext;
  with Prj.Nmsc; use Prj.Nmsc;
  
  with GNAT.Case_Util; use GNAT.Case_Util;
  with GNAT.HTable;
--- 30,39 ----
  with Osint;    use Osint;
  with Output;   use Output;
  with Prj.Attr; use Prj.Attr;
  with Prj.Err;  use Prj.Err;
  with Prj.Ext;  use Prj.Ext;
  with Prj.Nmsc; use Prj.Nmsc;
+ with Snames;
  
  with GNAT.Case_Util; use GNAT.Case_Util;
  with GNAT.HTable;
*************** package body Prj.Proc is
*** 62,67 ****
--- 62,73 ----
     --  Add all attributes, starting with First, with their default
     --  values to the package or project with declarations Decl.
  
+    procedure Check
+      (Project      : in out Project_Id;
+       Follow_Links : Boolean);
+    --  Set all projects to not checked, then call Recursive_Check for the
+    --  main project Project. Project is set to No_Project if errors occurred.
+ 
     function Expression
       (Project           : Project_Id;
        From_Project_Node : Project_Node_Id;
*************** package body Prj.Proc is
*** 101,111 ****
     --  recursively for all imported projects and a extended project, if any.
     --  Then process the declarative items of the project.
  
!    procedure Check (Project : in out Project_Id);
!    --  Set all projects to not checked, then call Recursive_Check for the
!    --  main project Project. Project is set to No_Project if errors occurred.
! 
!    procedure Recursive_Check (Project : Project_Id);
     --  If Project is not marked as checked, mark it as checked, call
     --  Check_Naming_Scheme for the project, then call itself for a
     --  possible extended project and all the imported projects of Project.
--- 107,115 ----
     --  recursively for all imported projects and a extended project, if any.
     --  Then process the declarative items of the project.
  
!    procedure Recursive_Check
!      (Project      : Project_Id;
!       Follow_Links : Boolean);
     --  If Project is not marked as checked, mark it as checked, call
     --  Check_Naming_Scheme for the project, then call itself for a
     --  possible extended project and all the imported projects of Project.
*************** package body Prj.Proc is
*** 118,124 ****
     begin
        if To_Exp = Types.No_Name or else To_Exp = Empty_String then
  
!          --  To_Exp is nil or empty. The result is Str.
  
           To_Exp := Str;
  
--- 122,128 ----
     begin
        if To_Exp = Types.No_Name or else To_Exp = Empty_String then
  
!          --  To_Exp is nil or empty. The result is Str
  
           To_Exp := Str;
  
*************** package body Prj.Proc is
*** 146,163 ****
        First   : Attribute_Node_Id)
     is
        The_Attribute  : Attribute_Node_Id := First;
-       Attribute_Data : Attribute_Record;
  
     begin
        while The_Attribute /= Empty_Attribute loop
!          Attribute_Data := Attributes.Table (The_Attribute);
! 
!          if Attribute_Data.Kind_2 = Single then
              declare
                 New_Attribute : Variable_Value;
  
              begin
!                case Attribute_Data.Kind_1 is
  
                    --  Undefined should not happen
  
--- 150,164 ----
        First   : Attribute_Node_Id)
     is
        The_Attribute  : Attribute_Node_Id := First;
  
     begin
        while The_Attribute /= Empty_Attribute loop
!          if Attribute_Kind_Of (The_Attribute) = Single then
              declare
                 New_Attribute : Variable_Value;
  
              begin
!                case Variable_Kind_Of (The_Attribute) is
  
                    --  Undefined should not happen
  
*************** package body Prj.Proc is
*** 174,180 ****
                          Kind     => Single,
                          Location => No_Location,
                          Default  => True,
!                         Value    => Empty_String);
  
                    --  List attributes have a default value of nil list
  
--- 175,182 ----
                          Kind     => Single,
                          Location => No_Location,
                          Default  => True,
!                         Value    => Empty_String,
!                         Index    => 0);
  
                    --  List attributes have a default value of nil list
  
*************** package body Prj.Proc is
*** 191,203 ****
                 Variable_Elements.Increment_Last;
                 Variable_Elements.Table (Variable_Elements.Last) :=
                   (Next  => Decl.Attributes,
!                   Name  => Attribute_Data.Name,
                    Value => New_Attribute);
                 Decl.Attributes := Variable_Elements.Last;
              end;
           end if;
  
!          The_Attribute := Attributes.Table (The_Attribute).Next;
        end loop;
     end Add_Attributes;
  
--- 193,205 ----
                 Variable_Elements.Increment_Last;
                 Variable_Elements.Table (Variable_Elements.Last) :=
                   (Next  => Decl.Attributes,
!                   Name  => Attribute_Name_Of (The_Attribute),
                    Value => New_Attribute);
                 Decl.Attributes := Variable_Elements.Last;
              end;
           end if;
  
!          The_Attribute := Next_Attribute (After => The_Attribute);
        end loop;
     end Add_Attributes;
  
*************** package body Prj.Proc is
*** 205,211 ****
     -- Check --
     -----------
  
!    procedure Check (Project : in out Project_Id) is
     begin
        --  Make sure that all projects are marked as not checked
  
--- 207,216 ----
     -- Check --
     -----------
  
!    procedure Check
!      (Project      : in out Project_Id;
!       Follow_Links : Boolean)
!    is
     begin
        --  Make sure that all projects are marked as not checked
  
*************** package body Prj.Proc is
*** 213,220 ****
           Projects.Table (Index).Checked := False;
        end loop;
  
!       Recursive_Check (Project);
! 
     end Check;
  
     ----------------
--- 218,224 ----
           Projects.Table (Index).Checked := False;
        end loop;
  
!       Recursive_Check (Project, Follow_Links);
     end Check;
  
     ----------------
*************** package body Prj.Proc is
*** 238,244 ****
        --  The returned result
  
        Last : String_List_Id := Nil_String;
!       --  Reference to the last string elements in Result, when Kind is List.
  
     begin
        Result.Project := Project;
--- 242,248 ----
        --  The returned result
  
        Last : String_List_Id := Nil_String;
!       --  Reference to the last string elements in Result, when Kind is List
  
     begin
        Result.Project := Project;
*************** package body Prj.Proc is
*** 264,269 ****
--- 268,274 ----
  
                    when Single =>
                       Add (Result.Value, String_Value_Of (The_Current_Term));
+                      Result.Index := Source_Index_Of (The_Current_Term);
  
                    when List =>
  
*************** package body Prj.Proc is
*** 271,278 ****
  
                       if Last = Nil_String then
  
!                         --  This can happen in an expression such as
!                         --  () & "toto"
  
                          Result.Values := String_Elements.Last;
  
--- 276,282 ----
  
                       if Last = Nil_String then
  
!                         --  This can happen in an expression like () & "toto"
  
                          Result.Values := String_Elements.Last;
  
*************** package body Prj.Proc is
*** 284,294 ****
                       Last := String_Elements.Last;
                       String_Elements.Table (Last) :=
                         (Value    => String_Value_Of (The_Current_Term),
                          Display_Value => No_Name,
                          Location => Location_Of (The_Current_Term),
                          Flag     => False,
                          Next     => Nil_String);
- 
                 end case;
  
              when N_Literal_String_List =>
--- 288,298 ----
                       Last := String_Elements.Last;
                       String_Elements.Table (Last) :=
                         (Value    => String_Value_Of (The_Current_Term),
+                         Index    => Source_Index_Of (The_Current_Term),
                          Display_Value => No_Name,
                          Location => Location_Of (The_Current_Term),
                          Flag     => False,
                          Next     => Nil_String);
                 end case;
  
              when N_Literal_String_List =>
*************** package body Prj.Proc is
*** 331,337 ****
                          Display_Value => No_Name,
                          Location => Value.Location,
                          Flag     => False,
!                         Next     => Nil_String);
  
                       loop
                          --  Add the other element of the literal string list
--- 335,342 ----
                          Display_Value => No_Name,
                          Location => Value.Location,
                          Flag     => False,
!                         Next     => Nil_String,
!                         Index    => Value.Index);
  
                       loop
                          --  Add the other element of the literal string list
*************** package body Prj.Proc is
*** 359,365 ****
                             Display_Value => No_Name,
                             Location => Value.Location,
                             Flag     => False,
!                            Next     => Nil_String);
                       end loop;
  
                    end if;
--- 364,371 ----
                             Display_Value => No_Name,
                             Location => Value.Location,
                             Flag     => False,
!                            Next     => Nil_String,
!                            Index    => Value.Index);
                       end loop;
  
                    end if;
*************** package body Prj.Proc is
*** 549,555 ****
                                   Kind     => Single,
                                   Location => No_Location,
                                   Default  => True,
!                                  Value    => Empty_String);
                             end if;
                          end if;
                       end;
--- 555,562 ----
                                   Kind     => Single,
                                   Location => No_Location,
                                   Default  => True,
!                                  Value    => Empty_String,
!                                  Index    => 0);
                             end if;
                          end if;
                       end;
*************** package body Prj.Proc is
*** 612,618 ****
                                   Display_Value => No_Name,
                                   Location => Location_Of (The_Current_Term),
                                   Flag     => False,
!                                  Next     => Nil_String);
  
                             when List =>
  
--- 619,626 ----
                                   Display_Value => No_Name,
                                   Location => Location_Of (The_Current_Term),
                                   Flag     => False,
!                                  Next     => Nil_String,
!                                  Index    => 0);
  
                             when List =>
  
*************** package body Prj.Proc is
*** 642,648 ****
                                         Location => Location_Of
                                                            (The_Current_Term),
                                         Flag     => False,
!                                        Next     => Nil_String);
                                      The_List :=
                                        String_Elements.Table (The_List).Next;
                                   end loop;
--- 650,657 ----
                                         Location => Location_Of
                                                            (The_Current_Term),
                                         Flag     => False,
!                                        Next     => Nil_String,
!                                        Index    => 0);
                                      The_List :=
                                        String_Elements.Table (The_List).Next;
                                   end loop;
*************** package body Prj.Proc is
*** 714,720 ****
                             Display_Value => No_Name,
                             Location => Location_Of (The_Current_Term),
                             Flag     => False,
!                            Next     => Nil_String);
  
                    end case;
                 end;
--- 723,730 ----
                             Display_Value => No_Name,
                             Location => Location_Of (The_Current_Term),
                             Flag     => False,
!                            Next     => Nil_String,
!                            Index    => 0);
  
                    end case;
                 end;
*************** package body Prj.Proc is
*** 744,754 ****
       (Project   : Project_Id;
        With_Name : Name_Id) return Project_Id
     is
!       Data : constant Project_Data := Projects.Table (Project);
!       List : Project_List          := Data.Imported_Projects;
  
     begin
!       --  First check if it is the name of a extended project
  
        if Data.Extends /= No_Project
          and then Projects.Table (Data.Extends).Name = With_Name
--- 754,766 ----
       (Project   : Project_Id;
        With_Name : Name_Id) return Project_Id
     is
!       Data        : constant Project_Data := Projects.Table (Project);
!       List        : Project_List          := Data.Imported_Projects;
!       Result      : Project_Id := No_Project;
!       Temp_Result : Project_Id := No_Project;
  
     begin
!       --  First check if it is the name of an extended project
  
        if Data.Extends /= No_Project
          and then Projects.Table (Data.Extends).Name = With_Name
*************** package body Prj.Proc is
*** 758,777 ****
        else
           --  Then check the name of each imported project
  
!          while List /= Empty_Project_List
!            and then
!              Projects.Table
!                (Project_Lists.Table (List).Project).Name /= With_Name
  
-          loop
              List := Project_Lists.Table (List).Next;
           end loop;
  
           pragma Assert
!            (List /= Empty_Project_List,
             "project not found");
  
!          return Project_Lists.Table (List).Project;
        end if;
     end Imported_Or_Extended_Project_From;
  
--- 770,809 ----
        else
           --  Then check the name of each imported project
  
!          while List /= Empty_Project_List loop
!             Result := Project_Lists.Table (List).Project;
! 
!             --  If the project is directly imported, then returns its ID
! 
!             if Projects.Table (Result).Name = With_Name then
!                return Result;
!             end if;
! 
!             --  If a project extending the project is imported, then keep
!             --  this extending project as a possibility. It will be the
!             --  returned ID if the project is not imported directly.
! 
!             declare
!                Proj : Project_Id := Projects.Table (Result).Extends;
!             begin
!                while Proj /= No_Project loop
!                   if Projects.Table (Proj).Name = With_Name then
!                      Temp_Result := Result;
!                      exit;
!                   end if;
! 
!                   Proj := Projects.Table (Proj).Extends;
!                end loop;
!             end;
  
              List := Project_Lists.Table (List).Next;
           end loop;
  
           pragma Assert
!            (Temp_Result /= No_Project,
             "project not found");
  
!          return Temp_Result;
        end if;
     end Imported_Or_Extended_Project_From;
  
*************** package body Prj.Proc is
*** 815,824 ****
       (Project           : out Project_Id;
        Success           : out Boolean;
        From_Project_Node : Project_Node_Id;
!       Report_Error      : Put_Line_Access)
     is
!       Obj_Dir   : Name_Id;
!       Extending : Project_Id;
  
     begin
        Error_Report := Report_Error;
--- 847,858 ----
       (Project           : out Project_Id;
        Success           : out Boolean;
        From_Project_Node : Project_Node_Id;
!       Report_Error      : Put_Line_Access;
!       Follow_Links      : Boolean := True)
     is
!       Obj_Dir    : Name_Id;
!       Extending  : Project_Id;
!       Extending2 : Project_Id;
  
     begin
        Error_Report := Report_Error;
*************** package body Prj.Proc is
*** 838,844 ****
           Extended_By       => No_Project);
  
        if Project /= No_Project then
!          Check (Project);
        end if;
  
        --  If main project is an extending all project, set the object
--- 872,878 ----
           Extended_By       => No_Project);
  
        if Project /= No_Project then
!          Check (Project, Follow_Links);
        end if;
  
        --  If main project is an extending all project, set the object
*************** package body Prj.Proc is
*** 860,936 ****
           end;
        end if;
  
!       --  Check that no extended project shares its object directory with
!       --  another project.
  
        if Project /= No_Project then
!          for Extended in 1 .. Projects.Last loop
!             Extending := Projects.Table (Extended).Extended_By;
  
              if Extending /= No_Project then
!                Obj_Dir := Projects.Table (Extended).Object_Directory;
  
!                for Prj in 1 .. Projects.Last loop
!                   if Prj /= Extended
!                     and then Projects.Table (Prj).Sources_Present
!                     and then Projects.Table (Prj).Object_Directory = Obj_Dir
                    then
!                      if Projects.Table (Extending).Virtual then
!                         Error_Msg_Name_1 := Projects.Table (Extended).Name;
  
                          if Error_Report = null then
                             Error_Msg
!                              ("project % cannot be extended by " &
!                               "a virtual project",
!                               Projects.Table (Extending).Location);
  
                          else
                             Error_Report
                               ("project """ &
                                Get_Name_String (Error_Msg_Name_1) &
!                               """ cannot be extended by a virtual project",
                                Project);
                          end if;
  
                       else
!                         Error_Msg_Name_1 := Projects.Table (Extending).Name;
!                         Error_Msg_Name_2 := Projects.Table (Extended).Name;
  
                          if Error_Report = null then
!                            Error_Msg ("project % cannot extend project %",
!                                       Projects.Table (Extending).Location);
  
                          else
                             Error_Report
                               ("project """ &
                                Get_Name_String (Error_Msg_Name_1) &
                                """ cannot extend project """ &
!                               Get_Name_String (Error_Msg_Name_2) & '"',
                                Project);
                          end if;
                       end if;
  
!                      Error_Msg_Name_1 := Projects.Table (Extended).Name;
!                      Error_Msg_Name_2 := Projects.Table (Prj).Name;
! 
!                      if Error_Report = null then
!                         Error_Msg
!                           ("\project % has the same object directory " &
!                            "as project %",
!                            Projects.Table (Extending).Location);
! 
!                      else
!                         Error_Report
!                           ("project """ &
!                              Get_Name_String (Error_Msg_Name_1) &
!                              """ has the same object directory as project """ &
!                              Get_Name_String (Error_Msg_Name_2) & '"',
!                            Project);
!                      end if;
  
!                      Project := No_Project;
!                      exit;
!                   end if;
                 end loop;
              end if;
           end loop;
--- 894,981 ----
           end;
        end if;
  
!       --  Check that no extending project shares its object directory with
!       --  the project(s) it extends.
  
        if Project /= No_Project then
!          for Proj in 1 .. Projects.Last loop
!             Extending := Projects.Table (Proj).Extended_By;
  
              if Extending /= No_Project then
!                Obj_Dir := Projects.Table (Proj).Object_Directory;
  
!                --  Check that a project being extended does not share its
!                --  object directory with any project that extends it, directly
!                --  or indirectly, including a virtual extending project.
! 
!                --  Start with the project directly extending it
! 
!                Extending2 := Extending;
! 
!                while Extending2 /= No_Project loop
! 
! --  why is this code commented out ???
! 
! --                if ((Process_Languages = Ada_Language
! --                     and then
! --                       Projects.Table (Extending2).Ada_Sources_Present)
! --                    or else
! --                      (Process_Languages = Other_Languages
! --                       and then
! --                         Projects.Table (Extending2).Other_Sources_Present))
! 
!                   if Projects.Table (Extending2).Ada_Sources_Present
!                     and then
!                      Projects.Table (Extending2).Object_Directory = Obj_Dir
                    then
!                      if Projects.Table (Extending2).Virtual then
!                         Error_Msg_Name_1 := Projects.Table (Proj).Name;
  
                          if Error_Report = null then
                             Error_Msg
!                              ("project % cannot be extended by a virtual " &
!                               "project with the same object directory",
!                               Projects.Table (Proj).Location);
  
                          else
                             Error_Report
                               ("project """ &
                                Get_Name_String (Error_Msg_Name_1) &
!                               """ cannot be extended by a virtual " &
!                               "project with the same object directory",
                                Project);
                          end if;
  
                       else
!                         Error_Msg_Name_1 :=
!                           Projects.Table (Extending2).Name;
!                         Error_Msg_Name_2 := Projects.Table (Proj).Name;
  
                          if Error_Report = null then
!                            Error_Msg
!                              ("project % cannot extend project %",
!                               Projects.Table (Extending2).Location);
!                            Error_Msg
!                              ("\they share the same object directory",
!                               Projects.Table (Extending2).Location);
  
                          else
                             Error_Report
                               ("project """ &
                                Get_Name_String (Error_Msg_Name_1) &
                                """ cannot extend project """ &
!                               Get_Name_String (Error_Msg_Name_2) & """",
!                               Project);
!                            Error_Report
!                              ("they share the same object directory",
                                Project);
                          end if;
                       end if;
+                   end if;
  
!                   --  Continue with the next extending project, if any
  
!                   Extending2 := Projects.Table (Extending2).Extended_By;
                 end loop;
              end if;
           end loop;
*************** package body Prj.Proc is
*** 1038,1045 ****
                          Add_Attributes
                            (Project,
                             Packages.Table (New_Pkg).Decl,
!                            Package_Attributes.Table
!                              (Package_Id_Of (Current_Item)).First_Attribute);
  
                          --  And process declarative items of the new package
  
--- 1083,1090 ----
                          Add_Attributes
                            (Project,
                             Packages.Table (New_Pkg).Decl,
!                            First_Attribute_Of
!                              (Package_Id_Of (Current_Item)));
  
                          --  And process declarative items of the new package
  
*************** package body Prj.Proc is
*** 1218,1226 ****
                          --  Copy each array element
  
                          while Orig_Element /= No_Array_Element loop
!                            --  If it is the first element ...
  
                             if Prev_Element = No_Array_Element then
                                --  And there is no array element declared yet,
                                --  create a new first array element.
  
--- 1263,1273 ----
                          --  Copy each array element
  
                          while Orig_Element /= No_Array_Element loop
! 
!                            --  Case of first element
  
                             if Prev_Element = No_Array_Element then
+ 
                                --  And there is no array element declared yet,
                                --  create a new first array element.
  
*************** package body Prj.Proc is
*** 1275,1280 ****
--- 1322,1328 ----
                             Prev_Element := New_Element;
  
                             --  Go to the next element in the original array
+ 
                             Orig_Element :=
                               Array_Elements.Table (Orig_Element).Next;
                          end loop;
*************** package body Prj.Proc is
*** 1568,1573 ****
--- 1616,1622 ----
  
                                Array_Elements.Table (The_Array_Element) :=
                                  (Index  => Index_Name,
+                                  Src_Index => Source_Index_Of (Current_Item),
                                   Index_Case_Sensitive =>
                                   not Case_Insensitive (Current_Item),
                                   Value  => New_Value,
*************** package body Prj.Proc is
*** 1752,1758 ****
     -- Recursive_Check --
     ---------------------
  
!    procedure Recursive_Check (Project : Project_Id) is
        Data                  : Project_Data;
        Imported_Project_List : Project_List := Empty_Project_List;
  
--- 1801,1810 ----
     -- Recursive_Check --
     ---------------------
  
!    procedure Recursive_Check
!      (Project           : Project_Id;
!       Follow_Links      : Boolean)
!    is
        Data                  : Project_Data;
        Imported_Project_List : Project_List := Empty_Project_List;
  
*************** package body Prj.Proc is
*** 1773,1786 ****
           --  Call itself for a possible extended project.
           --  (if there is no extended project, then nothing happens).
  
!          Recursive_Check (Data.Extends);
  
           --  Call itself for all imported projects
  
           Imported_Project_List := Data.Imported_Projects;
           while Imported_Project_List /= Empty_Project_List loop
              Recursive_Check
!               (Project_Lists.Table (Imported_Project_List).Project);
              Imported_Project_List :=
                Project_Lists.Table (Imported_Project_List).Next;
           end loop;
--- 1825,1839 ----
           --  Call itself for a possible extended project.
           --  (if there is no extended project, then nothing happens).
  
!          Recursive_Check (Data.Extends, Follow_Links);
  
           --  Call itself for all imported projects
  
           Imported_Project_List := Data.Imported_Projects;
           while Imported_Project_List /= Empty_Project_List loop
              Recursive_Check
!               (Project_Lists.Table (Imported_Project_List).Project,
!                Follow_Links);
              Imported_Project_List :=
                Project_Lists.Table (Imported_Project_List).Next;
           end loop;
*************** package body Prj.Proc is
*** 1791,1797 ****
              Write_Line ("""");
           end if;
  
!          Prj.Nmsc.Ada_Check (Project, Error_Report);
        end if;
     end Recursive_Check;
  
--- 1844,1850 ----
              Write_Line ("""");
           end if;
  
!          Prj.Nmsc.Check (Project, Error_Report, Follow_Links);
        end if;
     end Recursive_Check;
  
*************** package body Prj.Proc is
*** 1812,1822 ****
  
        else
           declare
!             Processed_Data   : Project_Data := Empty_Project;
!             Imported         : Project_List := Empty_Project_List;
!             Declaration_Node : Project_Node_Id := Empty_Node;
!             Name             : constant Name_Id :=
!                                  Name_Of (From_Project_Node);
  
           begin
              Project := Processed_Projects.Get (Name);
--- 1865,1874 ----
  
        else
           declare
!             Processed_Data   : Project_Data     := Empty_Project;
!             Imported         : Project_List     := Empty_Project_List;
!             Declaration_Node : Project_Node_Id  := Empty_Node;
!             Name             : constant Name_Id := Name_Of (From_Project_Node);
  
           begin
              Project := Processed_Projects.Get (Name);
*************** package body Prj.Proc is
*** 1923,1929 ****
  
              --  If it is an extending project, inherit all packages
              --  from the extended project that are not explicitely defined
!             --  or renamed.
  
              if Processed_Data.Extends /= No_Project then
                 Processed_Data := Projects.Table (Project);
--- 1975,1982 ----
  
              --  If it is an extending project, inherit all packages
              --  from the extended project that are not explicitely defined
!             --  or renamed. Also inherit the languages, if attribute Languages
!             --  is not explicitely defined.
  
              if Processed_Data.Extends /= No_Project then
                 Processed_Data := Projects.Table (Project);
*************** package body Prj.Proc is
*** 1936,1941 ****
--- 1989,1998 ----
                    Element     : Package_Element;
                    First       : constant Package_Id :=
                                    Processed_Data.Decl.Packages;
+                   Attribute1  : Variable_Id;
+                   Attribute2  : Variable_Id;
+                   Attr_Value1 : Variable;
+                   Attr_Value2  : Variable;
  
                 begin
                    while Extended_Pkg /= No_Package loop
*************** package body Prj.Proc is
*** 1963,1968 ****
--- 2020,2071 ----
  
                       Extended_Pkg := Element.Next;
                    end loop;
+ 
+                   --  Check if attribute Languages is declared in the
+                   --  extending project.
+ 
+                   Attribute1 := Processed_Data.Decl.Attributes;
+                   while Attribute1 /= No_Variable loop
+                      Attr_Value1 := Variable_Elements.Table (Attribute1);
+                      exit when Attr_Value1.Name = Snames.Name_Languages;
+                      Attribute1 := Attr_Value1.Next;
+                   end loop;
+ 
+                   if Attribute1 = No_Variable or else
+                      Attr_Value1.Value.Default
+                   then
+                      --  Attribute Languages is not declared in the extending
+                      --  project. Check if it is declared in the project being
+                      --  extended.
+ 
+                      Attribute2 :=
+                        Projects.Table (Processed_Data.Extends).Decl.Attributes;
+ 
+                      while Attribute2 /= No_Variable loop
+                         Attr_Value2 := Variable_Elements.Table (Attribute2);
+                         exit when Attr_Value2.Name = Snames.Name_Languages;
+                         Attribute2 := Attr_Value2.Next;
+                      end loop;
+ 
+                      if Attribute2 /= No_Variable and then
+                         not Attr_Value2.Value.Default
+                      then
+                         --  As attribute Languages is declared in the project
+                         --  being extended, copy its value for the extending
+                         --  project.
+ 
+                         if Attribute1 = No_Variable then
+                            Variable_Elements.Increment_Last;
+                            Attribute1 := Variable_Elements.Last;
+                            Attr_Value1.Next := Processed_Data.Decl.Attributes;
+                            Processed_Data.Decl.Attributes := Attribute1;
+                         end if;
+ 
+                         Attr_Value1.Name := Snames.Name_Languages;
+                         Attr_Value1.Value := Attr_Value2.Value;
+                         Variable_Elements.Table (Attribute1) := Attr_Value1;
+                      end if;
+                   end if;
                 end;
  
                 Projects.Table (Project) := Processed_Data;
diff -Nrcpad gcc-3.4.3/gcc/ada/prj-proc.ads gcc-4.0.0/gcc/ada/prj-proc.ads
*** gcc-3.4.3/gcc/ada/prj-proc.ads	Tue Oct 21 13:42:12 2003
--- gcc-4.0.0/gcc/ada/prj-proc.ads	Wed Dec  8 11:25:46 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2001-2003 Free Software Foundation, Inc.       --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2001-2004 Free Software Foundation, Inc.       --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Prj.Proc is
*** 36,44 ****
       (Project           : out Project_Id;
        Success           : out Boolean;
        From_Project_Node : Project_Node_Id;
!       Report_Error      : Put_Line_Access);
     --  Process a project file tree into project file data structures.
     --  If Report_Error is null, use the error reporting mechanism.
     --  Otherwise, report errors using Report_Error.
  
  end Prj.Proc;
--- 36,52 ----
       (Project           : out Project_Id;
        Success           : out Boolean;
        From_Project_Node : Project_Node_Id;
!       Report_Error      : Put_Line_Access;
!       Follow_Links      : Boolean := True);
     --  Process a project file tree into project file data structures.
     --  If Report_Error is null, use the error reporting mechanism.
     --  Otherwise, report errors using Report_Error.
+    --
+    --  If Follow_Links is False, it is assumed that the project doesn't contain
+    --  any file duplicated through symbolic links (although the latter are
+    --  still valid if they point to a file which is outside of the project),
+    --  and that no directory has a name which is a valid source name.
+    --
+    --  Process is a bit of a junk name, how about Process_Project_Tree???
  
  end Prj.Proc;
diff -Nrcpad gcc-3.4.3/gcc/ada/prj-strt.adb gcc-4.0.0/gcc/ada/prj-strt.adb
*** gcc-3.4.3/gcc/ada/prj-strt.adb	Tue Oct 21 13:42:12 2003
--- gcc-4.0.0/gcc/ada/prj-strt.adb	Thu Jul 15 20:34:37 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Scans;     use Scans;
*** 33,38 ****
--- 33,39 ----
  with Snames;
  with Table;
  with Types;     use Types;
+ with Uintp;     use Uintp;
  
  package body Prj.Strt is
  
*************** package body Prj.Strt is
*** 115,121 ****
       (Term            : out Project_Node_Id;
        Expr_Kind       : in out Variable_Kind;
        Current_Project : Project_Node_Id;
!       Current_Package : Project_Node_Id);
     --  Recursive procedure to parse one term or several terms concatenated
     --  using "&".
  
--- 116,123 ----
       (Term            : out Project_Node_Id;
        Expr_Kind       : in out Variable_Kind;
        Current_Project : Project_Node_Id;
!       Current_Package : Project_Node_Id;
!       Optional_Index  : Boolean);
     --  Recursive procedure to parse one term or several terms concatenated
     --  using "&".
  
*************** package body Prj.Strt is
*** 175,186 ****
           --  Check if the identifier is one of the attribute identifiers in the
           --  context (package or project level attributes).
  
!          while Current_Attribute /= Empty_Attribute
!            and then
!              Attributes.Table (Current_Attribute).Name /= Token_Name
!          loop
!             Current_Attribute := Attributes.Table (Current_Attribute).Next;
!          end loop;
  
           --  If the identifier is not allowed, report an error
  
--- 177,184 ----
           --  Check if the identifier is one of the attribute identifiers in the
           --  context (package or project level attributes).
  
!          Current_Attribute :=
!            Attribute_Node_Id_Of (Token_Name, Starting_At => First_Attribute);
  
           --  If the identifier is not allowed, report an error
  
*************** package body Prj.Strt is
*** 199,207 ****
              Set_Project_Node_Of (Reference, To => Current_Project);
              Set_Package_Node_Of (Reference, To => Current_Package);
              Set_Expression_Kind_Of
!               (Reference, To => Attributes.Table (Current_Attribute).Kind_1);
              Set_Case_Insensitive
!               (Reference, To => Attributes.Table (Current_Attribute).Kind_2 =
                                            Case_Insensitive_Associative_Array);
  
              --  Scan past the attribute name
--- 197,205 ----
              Set_Project_Node_Of (Reference, To => Current_Project);
              Set_Package_Node_Of (Reference, To => Current_Package);
              Set_Expression_Kind_Of
!               (Reference, To => Variable_Kind_Of (Current_Attribute));
              Set_Case_Insensitive
!               (Reference, To => Attribute_Kind_Of (Current_Attribute) =
                                            Case_Insensitive_Associative_Array);
  
              --  Scan past the attribute name
*************** package body Prj.Strt is
*** 210,216 ****
  
              --  If the attribute is an associative array, get the index
  
!             if Attributes.Table (Current_Attribute).Kind_2 /= Single then
                 Expect (Tok_Left_Paren, "`(`");
  
                 if Token = Tok_Left_Paren then
--- 208,214 ----
  
              --  If the attribute is an associative array, get the index
  
!             if Attribute_Kind_Of (Current_Attribute) /= Single then
                 Expect (Tok_Left_Paren, "`(`");
  
                 if Token = Tok_Left_Paren then
*************** package body Prj.Strt is
*** 258,265 ****
     -- End_Case_Construction --
     ---------------------------
  
!    procedure End_Case_Construction is
     begin
        --  If this is the only case construction, empty the tables
  
        if Choice_Lasts.Last = 1 then
--- 256,304 ----
     -- End_Case_Construction --
     ---------------------------
  
!    procedure End_Case_Construction
!      (Check_All_Labels   : Boolean;
!       Case_Location      : Source_Ptr)
!    is
!       Non_Used : Natural := 0;
!       First_Non_Used : Choice_Node_Id := First_Choice_Node_Id;
     begin
+       --  First, if Check_All_Labels is True, check if all values
+       --  of the string type have been used.
+ 
+       if Check_All_Labels then
+          for Choice in Choice_First .. Choices.Last loop
+                if not Choices.Table (Choice).Already_Used then
+                   Non_Used := Non_Used + 1;
+ 
+                   if Non_Used = 1 then
+                      First_Non_Used := Choice;
+                   end if;
+                end if;
+          end loop;
+ 
+          --  If only one is not used, report a single warning for this value
+ 
+          if Non_Used = 1 then
+             Error_Msg_Name_1 := Choices.Table (First_Non_Used).The_String;
+             Error_Msg ("?value { is not used as label", Case_Location);
+ 
+          --  If several are not used, report a warning for each one of them
+ 
+          elsif Non_Used > 1 then
+             Error_Msg
+               ("?the following values are not used as labels:",
+                Case_Location);
+ 
+             for Choice in First_Non_Used .. Choices.Last loop
+                if not Choices.Table (Choice).Already_Used then
+                   Error_Msg_Name_1 := Choices.Table (Choice).The_String;
+                   Error_Msg ("\?{", Case_Location);
+                end if;
+             end loop;
+          end if;
+       end if;
+ 
        --  If this is the only case construction, empty the tables
  
        if Choice_Lasts.Last = 1 then
*************** package body Prj.Strt is
*** 454,460 ****
     procedure Parse_Expression
       (Expression      : out Project_Node_Id;
        Current_Project : Project_Node_Id;
!       Current_Package : Project_Node_Id)
     is
        First_Term      : Project_Node_Id := Empty_Node;
        Expression_Kind : Variable_Kind := Undefined;
--- 493,500 ----
     procedure Parse_Expression
       (Expression      : out Project_Node_Id;
        Current_Project : Project_Node_Id;
!       Current_Package : Project_Node_Id;
!       Optional_Index  : Boolean)
     is
        First_Term      : Project_Node_Id := Empty_Node;
        Expression_Kind : Variable_Kind := Undefined;
*************** package body Prj.Strt is
*** 470,476 ****
        Terms (Term            => First_Term,
               Expr_Kind       => Expression_Kind,
               Current_Project => Current_Project,
!              Current_Package => Current_Package);
  
        --  Set the first term and the expression kind
  
--- 510,517 ----
        Terms (Term            => First_Term,
               Expr_Kind       => Expression_Kind,
               Current_Project => Current_Project,
!              Current_Package => Current_Package,
!              Optional_Index  => Optional_Index);
  
        --  Set the first term and the expression kind
  
*************** package body Prj.Strt is
*** 606,620 ****
  
                    --  First, look if it can be a package name
  
!                   for Index in Package_First .. Package_Attributes.Last loop
!                      if Package_Attributes.Table (Index).Name =
!                                                       Names.Table (1).Name
!                      then
!                         First_Attribute :=
!                           Package_Attributes.Table (Index).First_Attribute;
!                         exit;
!                      end if;
!                   end loop;
  
                    --  Now, look if it can be a project name
  
--- 647,655 ----
  
                    --  First, look if it can be a package name
  
!                   First_Attribute :=
!                     First_Attribute_Of
!                       (Package_Node_Id_Of (Names.Table (1).Name));
  
                    --  Now, look if it can be a project name
  
*************** package body Prj.Strt is
*** 763,770 ****
                                --  package.
  
                                First_Attribute :=
!                                 Package_Attributes.Table
!                                 (Package_Id_Of (The_Package)).First_Attribute;
                             end if;
                          end if;
                       end if;
--- 798,805 ----
                                --  package.
  
                                First_Attribute :=
!                                 First_Attribute_Of
!                                   (Package_Id_Of (The_Package));
                             end if;
                          end if;
                       end if;
*************** package body Prj.Strt is
*** 1077,1083 ****
       (Term            : out Project_Node_Id;
        Expr_Kind       : in out Variable_Kind;
        Current_Project : Project_Node_Id;
!       Current_Package : Project_Node_Id)
     is
        Next_Term          : Project_Node_Id := Empty_Node;
        Term_Id            : Project_Node_Id := Empty_Node;
--- 1112,1119 ----
       (Term            : out Project_Node_Id;
        Expr_Kind       : in out Variable_Kind;
        Current_Project : Project_Node_Id;
!       Current_Package : Project_Node_Id;
!       Optional_Index  : Boolean)
     is
        Next_Term          : Project_Node_Id := Empty_Node;
        Term_Id            : Project_Node_Id := Empty_Node;
*************** package body Prj.Strt is
*** 1143,1149 ****
                    Current_Location := Token_Ptr;
                    Parse_Expression (Expression      => Next_Expression,
                                      Current_Project => Current_Project,
!                                     Current_Package => Current_Package);
  
                    --  The expression kind is String list, report an error
  
--- 1179,1186 ----
                    Current_Location := Token_Ptr;
                    Parse_Expression (Expression      => Next_Expression,
                                      Current_Project => Current_Project,
!                                     Current_Package => Current_Package,
!                                     Optional_Index  => Optional_Index);
  
                    --  The expression kind is String list, report an error
  
*************** package body Prj.Strt is
*** 1199,1204 ****
--- 1236,1274 ----
  
              Scan;
  
+             --  Check for possible index expression
+ 
+             if Token = Tok_At then
+                if not Optional_Index then
+                   Error_Msg ("index not allowed here", Token_Ptr);
+                   Scan;
+ 
+                   if Token = Tok_Integer_Literal then
+                      Scan;
+                   end if;
+ 
+                --  Set the index value
+ 
+                else
+                   Scan;
+                   Expect (Tok_Integer_Literal, "integer literal");
+ 
+                   if Token = Tok_Integer_Literal then
+                      declare
+                         Index : constant Int := UI_To_Int (Int_Literal_Value);
+                      begin
+                         if Index = 0 then
+                            Error_Msg ("index cannot be zero", Token_Ptr);
+                         else
+                            Set_Source_Index_Of (Term_Id, To => Index);
+                         end if;
+                      end;
+ 
+                      Scan;
+                   end if;
+                end if;
+             end if;
+ 
           when Tok_Identifier =>
              Current_Location := Token_Ptr;
  
*************** package body Prj.Strt is
*** 1292,1298 ****
           Terms (Term            => Next_Term,
                  Expr_Kind       => Expr_Kind,
                  Current_Project => Current_Project,
!                 Current_Package => Current_Package);
  
           --  And link the next term to this term
  
--- 1362,1369 ----
           Terms (Term            => Next_Term,
                  Expr_Kind       => Expr_Kind,
                  Current_Project => Current_Project,
!                 Current_Package => Current_Package,
!                 Optional_Index  => Optional_Index);
  
           --  And link the next term to this term
  
diff -Nrcpad gcc-3.4.3/gcc/ada/prj-strt.ads gcc-4.0.0/gcc/ada/prj-strt.ads
*** gcc-3.4.3/gcc/ada/prj-strt.ads	Tue Oct 21 13:42:12 2003
--- gcc-4.0.0/gcc/ada/prj-strt.ads	Fri Jun 11 10:47:36 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2001-2003 Free Software Foundation, Inc.       --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2001-2004 Free Software Foundation, Inc.       --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** private package Prj.Strt is
*** 53,63 ****
     --  into a table to be checked against the case labels of the
     --  case construction.
  
!    procedure End_Case_Construction;
     --  This procedure is called at the end of a case construction
     --  to remove the case labels and to restore the previous state.
     --  In particular, in the case of nested case constructions,
     --  the case labels of the enclosing case construction are restored.
  
     procedure Parse_Choice_List
       (First_Choice : out Project_Node_Id);
--- 53,68 ----
     --  into a table to be checked against the case labels of the
     --  case construction.
  
!    procedure End_Case_Construction
!      (Check_All_Labels   : Boolean;
!       Case_Location      : Source_Ptr);
     --  This procedure is called at the end of a case construction
     --  to remove the case labels and to restore the previous state.
     --  In particular, in the case of nested case constructions,
     --  the case labels of the enclosing case construction are restored.
+    --  When When_Others is False and we are not in quiet output, a warning
+    --  is emitted for each value of the case variable string type that has
+    --  not been specified.
  
     procedure Parse_Choice_List
       (First_Choice : out Project_Node_Id);
*************** private package Prj.Strt is
*** 70,76 ****
     procedure Parse_Expression
       (Expression      : out Project_Node_Id;
        Current_Project : Project_Node_Id;
!       Current_Package : Project_Node_Id);
     --  Parse a simple string expression or a string list expression.
     --  Current_Project is the node of the project file being parsed.
     --  Current_Package is the node of the package being parsed,
--- 75,82 ----
     procedure Parse_Expression
       (Expression      : out Project_Node_Id;
        Current_Project : Project_Node_Id;
!       Current_Package : Project_Node_Id;
!       Optional_Index  : Boolean);
     --  Parse a simple string expression or a string list expression.
     --  Current_Project is the node of the project file being parsed.
     --  Current_Package is the node of the package being parsed,
diff -Nrcpad gcc-3.4.3/gcc/ada/prj-tree.adb gcc-4.0.0/gcc/ada/prj-tree.adb
*** gcc-3.4.3/gcc/ada/prj-tree.adb	Mon Dec  8 10:33:15 2003
--- gcc-4.0.0/gcc/ada/prj-tree.adb	Mon May 10 16:18:53 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2001-2003 Free Software Foundation, Inc.       --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2001-2004 Free Software Foundation, Inc.       --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Prj.Tree is
*** 111,116 ****
--- 111,117 ----
              Packages         => Empty_Node,
              Pkg_Id           => Empty_Package,
              Name             => No_Name,
+             Src_Index        => 0,
              Path_Name        => No_Name,
              Value            => No_Name,
              Field1           => Empty_Node,
*************** package body Prj.Tree is
*** 157,162 ****
--- 158,164 ----
                 Packages         => Empty_Node,
                 Pkg_Id           => Empty_Package,
                 Name             => No_Name,
+                Src_Index        => 0,
                 Path_Name        => No_Name,
                 Value            => Comments.Table (J).Value,
                 Field1           => Empty_Node,
*************** package body Prj.Tree is
*** 204,210 ****
        Comments.Set_Last (0);
     end Add_Comments;
  
- 
     --------------------------------
     -- Associative_Array_Index_Of --
     --------------------------------
--- 206,211 ----
*************** package body Prj.Tree is
*** 310,315 ****
--- 311,317 ----
           Packages         => Empty_Node,
           Pkg_Id           => Empty_Package,
           Name             => No_Name,
+          Src_Index        => 0,
           Path_Name        => No_Name,
           Value            => No_Name,
           Field1           => Empty_Node,
*************** package body Prj.Tree is
*** 379,384 ****
--- 381,387 ----
           Packages         => Empty_Node,
           Pkg_Id           => Empty_Package,
           Name             => No_Name,
+          Src_Index        => 0,
           Path_Name        => No_Name,
           Value            => No_Name,
           Field1           => Empty_Node,
*************** package body Prj.Tree is
*** 411,416 ****
--- 414,420 ----
                 Packages         => Empty_Node,
                 Pkg_Id           => Empty_Package,
                 Name             => No_Name,
+                Src_Index        => 0,
                 Path_Name        => No_Name,
                 Value            => No_Name,
                 Field1           => Empty_Node,
*************** package body Prj.Tree is
*** 441,446 ****
--- 445,451 ----
                    Packages         => Empty_Node,
                    Pkg_Id           => Empty_Package,
                    Name             => No_Name,
+                   Src_Index        => 0,
                    Path_Name        => No_Name,
                    Value            => Comments.Table (J).Value,
                    Field1           => Empty_Node,
*************** package body Prj.Tree is
*** 933,939 ****
        pragma Assert
          (Node /= Empty_Node
            and then
!             Project_Nodes.Table (Node).Kind = N_Project);
        return Project_Nodes.Table (Node).Flag2;
     end Is_Extending_All;
  
--- 938,946 ----
        pragma Assert
          (Node /= Empty_Node
            and then
!            (Project_Nodes.Table (Node).Kind = N_Project
!               or else
!             Project_Nodes.Table (Node).Kind = N_With_Clause));
        return Project_Nodes.Table (Node).Flag2;
     end Is_Extending_All;
  
*************** package body Prj.Tree is
*** 1242,1249 ****
     function Project_File_Includes_Unkept_Comments
       (Node : Project_Node_Id) return Boolean
     is
!       Declaration : constant Project_Node_Id :=
!         Project_Declaration_Of (Node);
     begin
        return Project_Nodes.Table (Declaration).Flag1;
     end Project_File_Includes_Unkept_Comments;
--- 1249,1255 ----
     function Project_File_Includes_Unkept_Comments
       (Node : Project_Node_Id) return Boolean
     is
!       Declaration : constant Project_Node_Id := Project_Declaration_Of (Node);
     begin
        return Project_Nodes.Table (Declaration).Flag1;
     end Project_File_Includes_Unkept_Comments;
*************** package body Prj.Tree is
*** 1329,1335 ****
     ----------
  
     procedure Save (S : out Comment_State) is
!       Cmts : Comments_Ptr := new Comment_Array (1 .. Comments.Last);
     begin
        for J in 1 .. Comments.Last loop
           Cmts (J) := Comments.Table (J);
--- 1335,1342 ----
     ----------
  
     procedure Save (S : out Comment_State) is
!       Cmts : constant Comments_Ptr := new Comment_Array (1 .. Comments.Last);
! 
     begin
        for J in 1 .. Comments.Last loop
           Cmts (J) := Comments.Table (J);
*************** package body Prj.Tree is
*** 1393,1399 ****
                 elsif End_Of_Line_Node /= Empty_Node then
                    declare
                       Zones : constant Project_Node_Id :=
!                        Comment_Zones_Of (End_Of_Line_Node);
                    begin
                       Project_Nodes.Table (Zones).Value := Comment_Id;
                    end;
--- 1400,1406 ----
                 elsif End_Of_Line_Node /= Empty_Node then
                    declare
                       Zones : constant Project_Node_Id :=
!                                Comment_Zones_Of (End_Of_Line_Node);
                    begin
                       Project_Nodes.Table (Zones).Value := Comment_Id;
                    end;
*************** package body Prj.Tree is
*** 1722,1729 ****
       (Node : Project_Node_Id;
        To   : Project_Node_Id)
     is
!       Zone : constant Project_Node_Id :=
!                 Comment_Zones_Of (Node);
     begin
        Project_Nodes.Table (Zone).Field2 := To;
     end Set_First_Comment_After;
--- 1729,1735 ----
       (Node : Project_Node_Id;
        To   : Project_Node_Id)
     is
!       Zone : constant Project_Node_Id := Comment_Zones_Of (Node);
     begin
        Project_Nodes.Table (Zone).Field2 := To;
     end Set_First_Comment_After;
*************** package body Prj.Tree is
*** 1736,1743 ****
       (Node : Project_Node_Id;
        To   : Project_Node_Id)
     is
!       Zone : constant Project_Node_Id :=
!                 Comment_Zones_Of (Node);
     begin
        Project_Nodes.Table (Zone).Comments := To;
     end Set_First_Comment_After_End;
--- 1742,1748 ----
       (Node : Project_Node_Id;
        To   : Project_Node_Id)
     is
!       Zone : constant Project_Node_Id := Comment_Zones_Of (Node);
     begin
        Project_Nodes.Table (Zone).Comments := To;
     end Set_First_Comment_After_End;
*************** package body Prj.Tree is
*** 1751,1758 ****
        To   : Project_Node_Id)
  
     is
!       Zone : constant Project_Node_Id :=
!                 Comment_Zones_Of (Node);
     begin
        Project_Nodes.Table (Zone).Field1 := To;
     end Set_First_Comment_Before;
--- 1756,1762 ----
        To   : Project_Node_Id)
  
     is
!       Zone : constant Project_Node_Id := Comment_Zones_Of (Node);
     begin
        Project_Nodes.Table (Zone).Field1 := To;
     end Set_First_Comment_Before;
*************** package body Prj.Tree is
*** 1765,1772 ****
       (Node : Project_Node_Id;
        To   : Project_Node_Id)
     is
!       Zone : constant Project_Node_Id :=
!                 Comment_Zones_Of (Node);
     begin
        Project_Nodes.Table (Zone).Field2 := To;
     end Set_First_Comment_Before_End;
--- 1769,1775 ----
       (Node : Project_Node_Id;
        To   : Project_Node_Id)
     is
!       Zone : constant Project_Node_Id := Comment_Zones_Of (Node);
     begin
        Project_Nodes.Table (Zone).Field2 := To;
     end Set_First_Comment_Before_End;
*************** package body Prj.Tree is
*** 1951,1957 ****
        pragma Assert
          (Node /= Empty_Node
            and then
!             Project_Nodes.Table (Node).Kind = N_Project);
        Project_Nodes.Table (Node).Flag2 := True;
     end Set_Is_Extending_All;
  
--- 1954,1962 ----
        pragma Assert
          (Node /= Empty_Node
            and then
!             (Project_Nodes.Table (Node).Kind = N_Project
!                or else
!              Project_Nodes.Table (Node).Kind = N_With_Clause));
        Project_Nodes.Table (Node).Flag2 := True;
     end Set_Is_Extending_All;
  
*************** package body Prj.Tree is
*** 2275,2282 ****
       (Node : Project_Node_Id;
        To   : Boolean)
     is
!       Declaration : constant Project_Node_Id :=
!         Project_Declaration_Of (Node);
     begin
        Project_Nodes.Table (Declaration).Flag1 := To;
     end Set_Project_File_Includes_Unkept_Comments;
--- 2280,2286 ----
       (Node : Project_Node_Id;
        To   : Boolean)
     is
!       Declaration : constant Project_Node_Id := Project_Declaration_Of (Node);
     begin
        Project_Nodes.Table (Declaration).Flag1 := To;
     end Set_Project_File_Includes_Unkept_Comments;
*************** package body Prj.Tree is
*** 2324,2329 ****
--- 2328,2351 ----
        Project_Nodes.Table (Node).Field1 := To;
     end Set_Project_Of_Renamed_Package_Of;
  
+    -------------------------
+    -- Set_Source_Index_Of --
+    -------------------------
+ 
+    procedure Set_Source_Index_Of
+      (Node : Project_Node_Id;
+       To   : Int)
+    is
+    begin
+       pragma Assert
+         (Node /= Empty_Node
+           and then
+            (Project_Nodes.Table (Node).Kind = N_Literal_String
+             or else
+             Project_Nodes.Table (Node).Kind = N_Attribute_Declaration));
+       Project_Nodes.Table (Node).Src_Index := To;
+    end Set_Source_Index_Of;
+ 
     ------------------------
     -- Set_String_Type_Of --
     ------------------------
*************** package body Prj.Tree is
*** 2339,2346 ****
              (Project_Nodes.Table (Node).Kind = N_Variable_Reference
                 or else
               Project_Nodes.Table (Node).Kind = N_Typed_Variable_Declaration)
!            and then
!             Project_Nodes.Table (To).Kind    = N_String_Type_Declaration);
  
        if Project_Nodes.Table (Node).Kind = N_Variable_Reference then
           Project_Nodes.Table (Node).Field3 := To;
--- 2361,2368 ----
              (Project_Nodes.Table (Node).Kind = N_Variable_Reference
                 or else
               Project_Nodes.Table (Node).Kind = N_Typed_Variable_Declaration)
!           and then
!             Project_Nodes.Table (To).Kind = N_String_Type_Declaration);
  
        if Project_Nodes.Table (Node).Kind = N_Variable_Reference then
           Project_Nodes.Table (Node).Field3 := To;
*************** package body Prj.Tree is
*** 2369,2381 ****
        Project_Nodes.Table (Node).Value := To;
     end Set_String_Value_Of;
  
     --------------------
     -- String_Type_Of --
     --------------------
  
!    function String_Type_Of
!      (Node : Project_Node_Id) return Project_Node_Id
!    is
     begin
        pragma Assert
          (Node /= Empty_Node
--- 2391,2416 ----
        Project_Nodes.Table (Node).Value := To;
     end Set_String_Value_Of;
  
+    ---------------------
+    -- Source_Index_Of --
+    ---------------------
+ 
+    function Source_Index_Of (Node : Project_Node_Id) return Int is
+    begin
+       pragma Assert
+         (Node /= Empty_Node
+           and then
+             (Project_Nodes.Table (Node).Kind = N_Literal_String
+               or else
+              Project_Nodes.Table (Node).Kind = N_Attribute_Declaration));
+       return Project_Nodes.Table (Node).Src_Index;
+    end Source_Index_Of;
+ 
     --------------------
     -- String_Type_Of --
     --------------------
  
!    function String_Type_Of (Node : Project_Node_Id) return Project_Node_Id is
     begin
        pragma Assert
          (Node /= Empty_Node
*************** package body Prj.Tree is
*** 2451,2455 ****
        return Unkept_Comments;
     end There_Are_Unkept_Comments;
  
- 
  end Prj.Tree;
--- 2486,2489 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/prj-tree.ads gcc-4.0.0/gcc/ada/prj-tree.ads
*** gcc-3.4.3/gcc/ada/prj-tree.ads	Mon Dec  8 10:33:15 2003
--- gcc-4.0.0/gcc/ada/prj-tree.ads	Wed Dec  8 11:25:48 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2001-2003 Free Software Foundation, Inc.       --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2001-2004 Free Software Foundation, Inc.       --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 24,35 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This package defines the structure of the Project File tree.
  
  with GNAT.HTable;
  
  with Prj.Attr; use Prj.Attr;
- with Prj.Com;  use Prj.Com;
  with Table;    use Table;
  with Types;    use Types;
  
--- 24,34 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This package defines the structure of the Project File tree
  
  with GNAT.HTable;
  
  with Prj.Attr; use Prj.Attr;
  with Table;    use Table;
  with Types;    use Types;
  
*************** package Prj.Tree is
*** 150,156 ****
     --  this node.
  
     procedure Remove_Next_End_Node;
!    --  Remove the top of the end node stack.
  
     ------------------------
     -- Comment Processing --
--- 149,155 ----
     --  this node.
  
     procedure Remove_Next_End_Node;
!    --  Remove the top of the end node stack
  
     ------------------------
     -- Comment Processing --
*************** package Prj.Tree is
*** 172,184 ****
     --  A table to store the comments that may be stored is the tree
  
     procedure Scan;
!    --  Scan the tokens and accumulate comments.
  
     type Comment_Location is
       (Before, After, Before_End, After_End, End_Of_Line);
  
     procedure Add_Comments (To : Project_Node_Id; Where : Comment_Location);
!    --  Add comments to this node.
  
     ----------------------
     -- Access Functions --
--- 171,183 ----
     --  A table to store the comments that may be stored is the tree
  
     procedure Scan;
!    --  Scan the tokens and accumulate comments
  
     type Comment_Location is
       (Before, After, Before_End, After_End, End_Of_Line);
  
     procedure Add_Comments (To : Project_Node_Id; Where : Comment_Location);
!    --  Add comments to this node
  
     ----------------------
     -- Access Functions --
*************** package Prj.Tree is
*** 235,241 ****
  
     function Directory_Of (Node : Project_Node_Id) return Name_Id;
     pragma Inline (Directory_Of);
!    --  Only valid for N_Project nodes.
  
     function Expression_Kind_Of (Node : Project_Node_Id) return Variable_Kind;
     pragma Inline (Expression_Kind_Of);
--- 234,240 ----
  
     function Directory_Of (Node : Project_Node_Id) return Name_Id;
     pragma Inline (Directory_Of);
!    --  Only valid for N_Project nodes
  
     function Expression_Kind_Of (Node : Project_Node_Id) return Variable_Kind;
     pragma Inline (Expression_Kind_Of);
*************** package Prj.Tree is
*** 245,251 ****
  
     function Is_Extending_All (Node  : Project_Node_Id) return Boolean;
     pragma Inline (Is_Extending_All);
!    --  Only valid for N_Project
  
     function First_Variable_Of
       (Node : Project_Node_Id) return Variable_Node_Id;
--- 244,250 ----
  
     function Is_Extending_All (Node  : Project_Node_Id) return Boolean;
     pragma Inline (Is_Extending_All);
!    --  Only valid for N_Project and N_With_Clause
  
     function First_Variable_Of
       (Node : Project_Node_Id) return Variable_Node_Id;
*************** package Prj.Tree is
*** 263,274 ****
  
     function Path_Name_Of (Node : Project_Node_Id) return Name_Id;
     pragma Inline (Path_Name_Of);
!    --  Only valid for N_Project and N_With_Clause nodes.
  
     function String_Value_Of (Node : Project_Node_Id) return Name_Id;
     pragma Inline (String_Value_Of);
     --  Only valid for N_With_Clause, N_Literal_String nodes or N_Comment
  
     function First_With_Clause_Of
       (Node : Project_Node_Id) return Project_Node_Id;
     pragma Inline (First_With_Clause_Of);
--- 262,277 ----
  
     function Path_Name_Of (Node : Project_Node_Id) return Name_Id;
     pragma Inline (Path_Name_Of);
!    --  Only valid for N_Project and N_With_Clause nodes
  
     function String_Value_Of (Node : Project_Node_Id) return Name_Id;
     pragma Inline (String_Value_Of);
     --  Only valid for N_With_Clause, N_Literal_String nodes or N_Comment
  
+    function Source_Index_Of (Node : Project_Node_Id) return Int;
+    pragma Inline (Source_Index_Of);
+    --  Only valid for N_Literal_String and N_Attribute_Declaration nodes
+ 
     function First_With_Clause_Of
       (Node : Project_Node_Id) return Project_Node_Id;
     pragma Inline (First_With_Clause_Of);
*************** package Prj.Tree is
*** 694,699 ****
--- 697,707 ----
        To   : Project_Node_Id);
     pragma Inline (Set_Package_Node_Of);
  
+    procedure Set_Source_Index_Of
+      (Node : Project_Node_Id;
+       To   : Int);
+    pragma Inline (Set_Source_Index_Of);
+ 
     procedure Set_String_Type_Of
       (Node : Project_Node_Id;
        To   : Project_Node_Id);
*************** package Prj.Tree is
*** 773,778 ****
--- 781,790 ----
           Name : Name_Id := No_Name;
           --  See below for what Project_Node_Kind it is used
  
+          Src_Index : Int := 0;
+          --  Index of a unit in a multi-unit source.
+          --  Onli for some N_Attribute_Declaration and N_Literal_String.
+ 
           Path_Name : Name_Id := No_Name;
           --  See below for what Project_Node_Kind it is used
  
*************** package Prj.Tree is
*** 798,804 ****
           --    N_Project - it indicates that there are comments in the project
           --                source that cannot be kept in the tree.
           --    N_Project_Declaration
!          --              - it indixates that there are unkept comment in the
           --                project.
  
           Flag2 : Boolean := False;
--- 810,816 ----
           --    N_Project - it indicates that there are comments in the project
           --                source that cannot be kept in the tree.
           --    N_Project_Declaration
!          --              - it indicates that there are unkept comments in the
           --                project.
  
           Flag2 : Boolean := False;
*************** package Prj.Tree is
*** 807,812 ****
--- 819,827 ----
           --                project.
           --    N_Comment - it indicates that the comment is followed by an
           --                empty line.
+          --    N_With_Clause
+          --              - it indicates that the originally imported project
+          --                is an extending all project.
  
           Comments : Project_Node_Id := Empty_Node;
           --  For nodes other that N_Comment_Zones or N_Comment, designates the
*************** package Prj.Tree is
*** 1030,1041 ****
           Node : Project_Node_Id;
           --  Node of the project in table Project_Nodes
  
           Extended : Boolean;
           --  True when the project is being extended by another project
        end record;
  
        No_Project_Name_And_Node : constant Project_Name_And_Node :=
!         (Name => No_Name, Node => Empty_Node, Extended => True);
  
        package Projects_Htable is new GNAT.HTable.Simple_HTable
          (Header_Num => Header_Num,
--- 1045,1062 ----
           Node : Project_Node_Id;
           --  Node of the project in table Project_Nodes
  
+          Canonical_Path : Name_Id;
+          --  Resolved and canonical path of the project file
+ 
           Extended : Boolean;
           --  True when the project is being extended by another project
        end record;
  
        No_Project_Name_And_Node : constant Project_Name_And_Node :=
!         (Name           => No_Name,
!          Node           => Empty_Node,
!          Canonical_Path => No_Name,
!          Extended       => True);
  
        package Projects_Htable is new GNAT.HTable.Simple_HTable
          (Header_Num => Header_Num,
diff -Nrcpad gcc-3.4.3/gcc/ada/prj-util.adb gcc-4.0.0/gcc/ada/prj-util.adb
*** gcc-3.4.3/gcc/ada/prj-util.adb	Mon Jan  5 15:20:45 2004
--- gcc-4.0.0/gcc/ada/prj-util.adb	Wed Dec  8 11:25:48 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2001-2003 Free Software Foundation, Inc.       --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2001-2004 Free Software Foundation, Inc.       --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Prj.Util is
*** 74,80 ****
     -------------------
  
     function Executable_Of
!      (Project : Project_Id; Main : Name_Id) return Name_Id
     is
        pragma Assert (Project /= No_Project);
  
--- 74,83 ----
     -------------------
  
     function Executable_Of
!      (Project  : Project_Id;
!       Main     : Name_Id;
!       Index    : Int;
!       Ada_Main : Boolean := True) return Name_Id
     is
        pragma Assert (Project /= No_Project);
  
*************** package body Prj.Util is
*** 89,100 ****
--- 92,105 ----
        Executable : Variable_Value :=
                       Prj.Util.Value_Of
                         (Name                    => Main,
+                         Index                   => Index,
                          Attribute_Or_Array_Name => Name_Executable,
                          In_Package              => Builder_Package);
  
        Executable_Suffix : constant Variable_Value :=
                              Prj.Util.Value_Of
                                (Name                    => Main,
+                                Index                   => 0,
                                 Attribute_Or_Array_Name =>
                                   Name_Executable_Suffix,
                                 In_Package              => Builder_Package);
*************** package body Prj.Util is
*** 102,117 ****
        Body_Append : constant String := Get_Name_String
                                            (Projects.Table
                                              (Project).
!                                               Naming.Current_Body_Suffix);
  
        Spec_Append : constant String := Get_Name_String
                                            (Projects.Table
                                              (Project).
!                                                Naming.Current_Spec_Suffix);
  
     begin
        if Builder_Package /= No_Package then
!          if Executable = Nil_Variable_Value then
              Get_Name_String (Main);
  
              --  Try as index the name minus the implementation suffix or minus
--- 107,122 ----
        Body_Append : constant String := Get_Name_String
                                            (Projects.Table
                                              (Project).
!                                               Naming.Ada_Body_Suffix);
  
        Spec_Append : constant String := Get_Name_String
                                            (Projects.Table
                                              (Project).
!                                                Naming.Ada_Spec_Suffix);
  
     begin
        if Builder_Package /= No_Package then
!          if Executable = Nil_Variable_Value and Ada_Main then
              Get_Name_String (Main);
  
              --  Try as index the name minus the implementation suffix or minus
*************** package body Prj.Util is
*** 126,134 ****
                            Projects.Table (Project).Naming;
  
                 Spec_Suffix : constant String :=
!                                Get_Name_String (Naming.Current_Spec_Suffix);
                 Body_Suffix : constant String :=
!                                Get_Name_String (Naming.Current_Body_Suffix);
  
                 Truncated : Boolean := False;
  
--- 131,139 ----
                            Projects.Table (Project).Naming;
  
                 Spec_Suffix : constant String :=
!                                Get_Name_String (Naming.Ada_Spec_Suffix);
                 Body_Suffix : constant String :=
!                                Get_Name_String (Naming.Ada_Body_Suffix);
  
                 Truncated : Boolean := False;
  
*************** package body Prj.Util is
*** 156,161 ****
--- 161,167 ----
                    Executable :=
                      Prj.Util.Value_Of
                        (Name                    => Name_Find,
+                        Index                   => 0,
                         Attribute_Or_Array_Name => Name_Executable,
                         In_Package              => Builder_Package);
                 end if;
*************** package body Prj.Util is
*** 212,218 ****
        --  otherwise remove any suffix ('.' followed by other characters), if
        --  there is one.
  
!       if Name_Len > Body_Append'Length
           and then Name_Buffer (Name_Len - Body_Append'Length + 1 .. Name_Len) =
                      Body_Append
        then
--- 218,224 ----
        --  otherwise remove any suffix ('.' followed by other characters), if
        --  there is one.
  
!       if Ada_Main and then Name_Len > Body_Append'Length
           and then Name_Buffer (Name_Len - Body_Append'Length + 1 .. Name_Len) =
                      Body_Append
        then
*************** package body Prj.Util is
*** 220,226 ****
  
           Name_Len := Name_Len - Body_Append'Length;
  
!       elsif Name_Len > Spec_Append'Length
           and then Name_Buffer (Name_Len - Spec_Append'Length + 1 .. Name_Len) =
                      Spec_Append
        then
--- 226,232 ----
  
           Name_Len := Name_Len - Body_Append'Length;
  
!       elsif Ada_Main and then Name_Len > Spec_Append'Length
           and then Name_Buffer (Name_Len - Spec_Append'Length + 1 .. Name_Len) =
                      Spec_Append
        then
*************** package body Prj.Util is
*** 379,386 ****
  
     function Value_Of
       (Variable : Variable_Value;
!       Default  : String)
!       return     String
     is
     begin
        if Variable.Kind /= Single
--- 385,391 ----
  
     function Value_Of
       (Variable : Variable_Value;
!       Default  : String) return String
     is
     begin
        if Variable.Kind /= Single
*************** package body Prj.Util is
*** 394,402 ****
     end Value_Of;
  
     function Value_Of
!      (Index    : Name_Id;
!       In_Array : Array_Element_Id)
!       return     Name_Id
     is
        Current    : Array_Element_Id := In_Array;
        Element    : Array_Element;
--- 399,406 ----
     end Value_Of;
  
     function Value_Of
!      (Index     : Name_Id;
!       In_Array  : Array_Element_Id) return Name_Id
     is
        Current    : Array_Element_Id := In_Array;
        Element    : Array_Element;
*************** package body Prj.Util is
*** 431,439 ****
     end Value_Of;
  
     function Value_Of
!      (Index    : Name_Id;
!       In_Array : Array_Element_Id)
!       return     Variable_Value
     is
        Current : Array_Element_Id := In_Array;
        Element : Array_Element;
--- 435,443 ----
     end Value_Of;
  
     function Value_Of
!      (Index     : Name_Id;
!       Src_Index : Int := 0;
!       In_Array  : Array_Element_Id) return Variable_Value
     is
        Current : Array_Element_Id := In_Array;
        Element : Array_Element;
*************** package body Prj.Util is
*** 455,461 ****
        while Current /= No_Array_Element loop
           Element := Array_Elements.Table (Current);
  
!          if Real_Index = Element.Index then
              return Element.Value;
           else
              Current := Element.Next;
--- 459,467 ----
        while Current /= No_Array_Element loop
           Element := Array_Elements.Table (Current);
  
!          if Real_Index = Element.Index and then
!            Src_Index = Element.Src_Index
!          then
              return Element.Value;
           else
              Current := Element.Next;
*************** package body Prj.Util is
*** 467,475 ****
  
     function Value_Of
       (Name                    : Name_Id;
        Attribute_Or_Array_Name : Name_Id;
!       In_Package              : Package_Id)
!       return                    Variable_Value
     is
        The_Array     : Array_Element_Id;
        The_Attribute : Variable_Value := Nil_Variable_Value;
--- 473,481 ----
  
     function Value_Of
       (Name                    : Name_Id;
+       Index                   : Int := 0;
        Attribute_Or_Array_Name : Name_Id;
!       In_Package              : Package_Id) return Variable_Value
     is
        The_Array     : Array_Element_Id;
        The_Attribute : Variable_Value := Nil_Variable_Value;
*************** package body Prj.Util is
*** 485,492 ****
                In_Arrays => Packages.Table (In_Package).Decl.Arrays);
           The_Attribute :=
             Value_Of
!              (Index    => Name,
!               In_Array => The_Array);
  
           --  If there is no array element, look for a variable
  
--- 491,499 ----
                In_Arrays => Packages.Table (In_Package).Decl.Arrays);
           The_Attribute :=
             Value_Of
!              (Index     => Name,
!               Src_Index => Index,
!               In_Array  => The_Array);
  
           --  If there is no array element, look for a variable
  
*************** package body Prj.Util is
*** 504,511 ****
     function Value_Of
       (Index     : Name_Id;
        In_Array  : Name_Id;
!       In_Arrays : Array_Id)
!       return      Name_Id
     is
        Current : Array_Id := In_Arrays;
        The_Array : Array_Data;
--- 511,517 ----
     function Value_Of
       (Index     : Name_Id;
        In_Array  : Name_Id;
!       In_Arrays : Array_Id) return Name_Id
     is
        Current : Array_Id := In_Arrays;
        The_Array : Array_Data;
*************** package body Prj.Util is
*** 525,532 ****
  
     function Value_Of
       (Name      : Name_Id;
!       In_Arrays : Array_Id)
!       return      Array_Element_Id
     is
        Current    : Array_Id := In_Arrays;
        The_Array  : Array_Data;
--- 531,537 ----
  
     function Value_Of
       (Name      : Name_Id;
!       In_Arrays : Array_Id) return Array_Element_Id
     is
        Current    : Array_Id := In_Arrays;
        The_Array  : Array_Data;
*************** package body Prj.Util is
*** 547,554 ****
  
     function Value_Of
       (Name        : Name_Id;
!       In_Packages : Package_Id)
!       return        Package_Id
     is
        Current : Package_Id := In_Packages;
        The_Package : Package_Element;
--- 552,558 ----
  
     function Value_Of
       (Name        : Name_Id;
!       In_Packages : Package_Id) return Package_Id
     is
        Current : Package_Id := In_Packages;
        The_Package : Package_Element;
*************** package body Prj.Util is
*** 566,573 ****
  
     function Value_Of
       (Variable_Name : Name_Id;
!       In_Variables  : Variable_Id)
!       return          Variable_Value
     is
        Current      : Variable_Id := In_Variables;
        The_Variable : Variable;
--- 570,576 ----
  
     function Value_Of
       (Variable_Name : Name_Id;
!       In_Variables  : Variable_Id) return Variable_Value
     is
        Current      : Variable_Id := In_Variables;
        The_Variable : Variable;
diff -Nrcpad gcc-3.4.3/gcc/ada/prj-util.ads gcc-4.0.0/gcc/ada/prj-util.ads
*** gcc-3.4.3/gcc/ada/prj-util.ads	Tue Oct 21 13:42:12 2003
--- gcc-4.0.0/gcc/ada/prj-util.ads	Wed May  5 10:09:55 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2001-2003 Free Software Foundation, Inc.       --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2001-2004 Free Software Foundation, Inc.       --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with GNAT.OS_Lib; use GNAT.OS_Lib;
*** 33,39 ****
  package Prj.Util is
  
     function Executable_Of
!      (Project : Project_Id; Main : Name_Id) return Name_Id;
     --  Return the value of the attribute Builder'Executable for file Main in
     --  the project Project, if it exists. If there is no attribute Executable
     --  for Main, remove the suffix from Main; then, if the attribute
--- 33,42 ----
  package Prj.Util is
  
     function Executable_Of
!      (Project  : Project_Id;
!       Main     : Name_Id;
!       Index    : Int;
!       Ada_Main : Boolean := True) return Name_Id;
     --  Return the value of the attribute Builder'Executable for file Main in
     --  the project Project, if it exists. If there is no attribute Executable
     --  for Main, remove the suffix from Main; then, if the attribute
*************** package Prj.Util is
*** 42,56 ****
  
     function Value_Of
       (Variable : Variable_Value;
!       Default  : String)
!       return     String;
     --  Get the value of a single string variable. If Variable is
     --  Nil_Variable_Value, is a string list or is defaulted, return Default.
  
     function Value_Of
       (Index    : Name_Id;
!       In_Array : Array_Element_Id)
!       return     Name_Id;
     --  Get a single string array component. Returns No_Name if there is no
     --  component Index, if In_Array is null, or if the component is a String
     --  list. Depending on the attribute (only attributes may be associative
--- 45,57 ----
  
     function Value_Of
       (Variable : Variable_Value;
!       Default  : String) return String;
     --  Get the value of a single string variable. If Variable is
     --  Nil_Variable_Value, is a string list or is defaulted, return Default.
  
     function Value_Of
       (Index    : Name_Id;
!       In_Array : Array_Element_Id) return Name_Id;
     --  Get a single string array component. Returns No_Name if there is no
     --  component Index, if In_Array is null, or if the component is a String
     --  list. Depending on the attribute (only attributes may be associative
*************** package Prj.Util is
*** 59,67 ****
     --  associative array.
  
     function Value_Of
!      (Index    : Name_Id;
!       In_Array : Array_Element_Id)
!       return     Variable_Value;
     --  Get a string array component (single String or String list).
     --  Returns Nil_Variable_Value if there is no component Index
     --  or if In_Array is null.
--- 60,68 ----
     --  associative array.
  
     function Value_Of
!      (Index     : Name_Id;
!       Src_Index : Int := 0;
!       In_Array  : Array_Element_Id) return Variable_Value;
     --  Get a string array component (single String or String list).
     --  Returns Nil_Variable_Value if there is no component Index
     --  or if In_Array is null.
*************** package Prj.Util is
*** 73,81 ****
  
     function Value_Of
       (Name                    : Name_Id;
        Attribute_Or_Array_Name : Name_Id;
!       In_Package              : Package_Id)
!       return                    Variable_Value;
     --  In a specific package,
     --   - if there exists an array Attribute_Or_Array_Name with an index
     --     Name, returns the corresponding component (depending on the
--- 74,82 ----
  
     function Value_Of
       (Name                    : Name_Id;
+       Index                   : Int := 0;
        Attribute_Or_Array_Name : Name_Id;
!       In_Package              : Package_Id) return Variable_Value;
     --  In a specific package,
     --   - if there exists an array Attribute_Or_Array_Name with an index
     --     Name, returns the corresponding component (depending on the
*************** package Prj.Util is
*** 89,120 ****
     function Value_Of
       (Index     : Name_Id;
        In_Array  : Name_Id;
!       In_Arrays : Array_Id)
!       return      Name_Id;
     --  Get a string array component in an array of an array list.
     --  Returns No_Name if there is no component Index, if In_Arrays is null, if
     --  In_Array is not found in In_Arrays or if the component is a String list.
  
     function Value_Of
       (Name      : Name_Id;
!       In_Arrays : Array_Id)
!       return      Array_Element_Id;
     --  Returns a specified array in an array list. Returns No_Array_Element
     --  if In_Arrays is null or if Name is not the name of an array in
     --  In_Arrays. The caller must ensure that Name is in lower case.
  
     function Value_Of
       (Name        : Name_Id;
!       In_Packages : Package_Id)
!       return        Package_Id;
     --  Returns a specified package in a package list. Returns No_Package
     --  if In_Packages is null or if Name is not the name of a package in
     --  Package_List. The caller must ensure that Name is in lower case.
  
     function Value_Of
       (Variable_Name : Name_Id;
!       In_Variables  : Variable_Id)
!       return          Variable_Value;
     --  Returns a specified variable in a variable list. Returns null if
     --  In_Variables is null or if Variable_Name is not the name of a
     --  variable in In_Variables. Caller must ensure that Name is lower case.
--- 90,117 ----
     function Value_Of
       (Index     : Name_Id;
        In_Array  : Name_Id;
!       In_Arrays : Array_Id) return Name_Id;
     --  Get a string array component in an array of an array list.
     --  Returns No_Name if there is no component Index, if In_Arrays is null, if
     --  In_Array is not found in In_Arrays or if the component is a String list.
  
     function Value_Of
       (Name      : Name_Id;
!       In_Arrays : Array_Id) return Array_Element_Id;
     --  Returns a specified array in an array list. Returns No_Array_Element
     --  if In_Arrays is null or if Name is not the name of an array in
     --  In_Arrays. The caller must ensure that Name is in lower case.
  
     function Value_Of
       (Name        : Name_Id;
!       In_Packages : Package_Id) return Package_Id;
     --  Returns a specified package in a package list. Returns No_Package
     --  if In_Packages is null or if Name is not the name of a package in
     --  Package_List. The caller must ensure that Name is in lower case.
  
     function Value_Of
       (Variable_Name : Name_Id;
!       In_Variables  : Variable_Id) return Variable_Value;
     --  Returns a specified variable in a variable list. Returns null if
     --  In_Variables is null or if Variable_Name is not the name of a
     --  variable in In_Variables. Caller must ensure that Name is lower case.
diff -Nrcpad gcc-3.4.3/gcc/ada/prj.adb gcc-4.0.0/gcc/ada/prj.adb
*** gcc-3.4.3/gcc/ada/prj.adb	Mon Dec  8 10:33:15 2003
--- gcc-4.0.0/gcc/ada/prj.adb	Wed Dec  8 11:25:42 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2001-2003 Free Software Foundation, Inc.       --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2001-2004 Free Software Foundation, Inc.       --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 27,32 ****
--- 27,33 ----
  with Ada.Characters.Handling; use Ada.Characters.Handling;
  
  with Namet;    use Namet;
+ with Output;   use Output;
  with Osint;    use Osint;
  with Prj.Attr;
  with Prj.Com;
*************** with Prj.Env;
*** 34,47 ****
  with Prj.Err;  use Prj.Err;
  with Scans;    use Scans;
  with Snames;   use Snames;
  
! with GNAT.OS_Lib; use GNAT.OS_Lib;
  
  package body Prj is
  
     The_Empty_String : Name_Id;
  
!    Ada_Language     : constant Name_Id := Name_Ada;
  
     subtype Known_Casing is Casing_Type range All_Upper_Case .. Mixed_Case;
  
--- 35,50 ----
  with Prj.Err;  use Prj.Err;
  with Scans;    use Scans;
  with Snames;   use Snames;
+ with Uintp;    use Uintp;
  
! with GNAT.Case_Util; use GNAT.Case_Util;
! with GNAT.OS_Lib;    use GNAT.OS_Lib;
  
  package body Prj is
  
     The_Empty_String : Name_Id;
  
!    Name_C_Plus_Plus : Name_Id;
  
     subtype Known_Casing is Casing_Type range All_Upper_Case .. Mixed_Case;
  
*************** package body Prj is
*** 56,70 ****
       First_Name_Id + Character'Pos ('-');
  
     Std_Naming_Data : Naming_Data :=
!      (Current_Language          => No_Name,
!       Dot_Replacement           => Standard_Dot_Replacement,
        Dot_Repl_Loc              => No_Location,
        Casing                    => All_Lower_Case,
        Spec_Suffix               => No_Array_Element,
!       Current_Spec_Suffix       => No_Name,
        Spec_Suffix_Loc           => No_Location,
        Body_Suffix               => No_Array_Element,
!       Current_Body_Suffix       => No_Name,
        Body_Suffix_Loc           => No_Location,
        Separate_Suffix           => No_Name,
        Sep_Suffix_Loc            => No_Location,
--- 59,74 ----
       First_Name_Id + Character'Pos ('-');
  
     Std_Naming_Data : Naming_Data :=
!      (Dot_Replacement           => Standard_Dot_Replacement,
        Dot_Repl_Loc              => No_Location,
        Casing                    => All_Lower_Case,
        Spec_Suffix               => No_Array_Element,
!       Ada_Spec_Suffix           => No_Name,
        Spec_Suffix_Loc           => No_Location,
+       Impl_Suffixes             => No_Impl_Suffixes,
+       Supp_Suffixes             => No_Supp_Language_Index,
        Body_Suffix               => No_Array_Element,
!       Ada_Body_Suffix           => No_Name,
        Body_Suffix_Loc           => No_Location,
        Separate_Suffix           => No_Name,
        Sep_Suffix_Loc            => No_Location,
*************** package body Prj is
*** 74,84 ****
        Implementation_Exceptions => No_Array_Element);
  
     Project_Empty : constant Project_Data :=
!      (First_Referred_By              => No_Project,
        Name                           => No_Name,
        Path_Name                      => No_Name,
-       Virtual                        => False,
        Display_Path_Name              => No_Name,
        Location                       => No_Location,
        Mains                          => Nil_String,
        Directory                      => No_Name,
--- 78,91 ----
        Implementation_Exceptions => No_Array_Element);
  
     Project_Empty : constant Project_Data :=
!      (Externally_Built               => False,
!       Languages                      => No_Languages,
!       Supp_Languages                 => No_Supp_Language_Index,
!       First_Referred_By              => No_Project,
        Name                           => No_Name,
        Path_Name                      => No_Name,
        Display_Path_Name              => No_Name,
+       Virtual                        => False,
        Location                       => No_Location,
        Mains                          => Nil_String,
        Directory                      => No_Name,
*************** package body Prj is
*** 92,104 ****
        Library_Name                   => No_Name,
        Library_Kind                   => Static,
        Lib_Internal_Name              => No_Name,
-       Lib_Elaboration                => False,
        Standalone_Library             => False,
        Lib_Interface_ALIs             => Nil_String,
        Lib_Auto_Init                  => False,
        Symbol_Data                    => No_Symbols,
!       Sources_Present                => True,
        Sources                        => Nil_String,
        Source_Dirs                    => Nil_String,
        Known_Order_Of_Source_Dirs     => True,
        Object_Directory               => No_Name,
--- 99,116 ----
        Library_Name                   => No_Name,
        Library_Kind                   => Static,
        Lib_Internal_Name              => No_Name,
        Standalone_Library             => False,
        Lib_Interface_ALIs             => Nil_String,
        Lib_Auto_Init                  => False,
        Symbol_Data                    => No_Symbols,
!       Ada_Sources_Present            => True,
!       Other_Sources_Present          => True,
        Sources                        => Nil_String,
+       First_Other_Source             => No_Other_Source,
+       Last_Other_Source              => No_Other_Source,
+       Imported_Directories_Switches  => null,
+       Include_Path                   => null,
+       Include_Data_Set               => False,
        Source_Dirs                    => Nil_String,
        Known_Order_Of_Source_Dirs     => True,
        Object_Directory               => No_Name,
*************** package body Prj is
*** 108,113 ****
--- 120,129 ----
        Extends                        => No_Project,
        Extended_By                    => No_Project,
        Naming                         => Std_Naming_Data,
+       First_Language_Processing      => Default_First_Language_Processing_Data,
+       Supp_Language_Processing       => No_Supp_Language_Index,
+       Default_Linker                 => No_Name,
+       Default_Linker_Path            => No_Name,
        Decl                           => No_Declarations,
        Imported_Projects              => Empty_Project_List,
        Ada_Include_Path               => null,
*************** package body Prj is
*** 121,131 ****
        Language_Independent_Checked   => False,
        Checked                        => False,
        Seen                           => False,
!       Flag1                          => False,
!       Flag2                          => False,
        Depth                          => 0,
        Unkept_Comments                => False);
  
     -------------------
     -- Add_To_Buffer --
     -------------------
--- 137,158 ----
        Language_Independent_Checked   => False,
        Checked                        => False,
        Seen                           => False,
!       Need_To_Build_Lib              => False,
        Depth                          => 0,
        Unkept_Comments                => False);
  
+    -----------------------
+    -- Add_Language_Name --
+    -----------------------
+ 
+    procedure Add_Language_Name (Name : Name_Id) is
+    begin
+       Last_Language_Index := Last_Language_Index + 1;
+       Language_Indexes.Set (Name, Last_Language_Index);
+       Language_Names.Increment_Last;
+       Language_Names.Table (Last_Language_Index) := Name;
+    end Add_Language_Name;
+ 
     -------------------
     -- Add_To_Buffer --
     -------------------
*************** package body Prj is
*** 150,162 ****
        Buffer_Last := Buffer_Last + S'Length;
     end Add_To_Buffer;
  
     -------------------
     -- Empty_Project --
     -------------------
  
     function Empty_Project return Project_Data is
     begin
!       Initialize;
        return Project_Empty;
     end Empty_Project;
  
--- 177,200 ----
        Buffer_Last := Buffer_Last + S'Length;
     end Add_To_Buffer;
  
+    ---------------------------
+    -- Display_Language_Name --
+    ---------------------------
+ 
+    procedure Display_Language_Name (Language : Language_Index) is
+    begin
+       Get_Name_String (Language_Names.Table (Language));
+       To_Upper (Name_Buffer (1 .. 1));
+       Write_Str (Name_Buffer (1 .. Name_Len));
+    end Display_Language_Name;
+ 
     -------------------
     -- Empty_Project --
     -------------------
  
     function Empty_Project return Project_Data is
     begin
!       Prj.Initialize;
        return Project_Empty;
     end Empty_Project;
  
*************** package body Prj is
*** 190,198 ****
     is
  
        procedure Check (Project : Project_Id);
!       --  Check if a project has already been seen.
!       --  If not seen, mark it as seen, call Action,
!       --  and check all its imported projects.
  
        procedure Check (Project : Project_Id) is
           List : Project_List;
--- 228,239 ----
     is
  
        procedure Check (Project : Project_Id);
!       --  Check if a project has already been seen. If not seen, mark it as
!       --  Seen, Call Action, and check all its imported projects.
! 
!       -----------
!       -- Check --
!       -----------
  
        procedure Check (Project : Project_Id) is
           List : Project_List;
*************** package body Prj is
*** 210,215 ****
--- 251,258 ----
           end if;
        end Check;
  
+    --  Start of procecessing for For_Every_Project_Imported
+ 
     begin
        for Project in Projects.First .. Projects.Last loop
           Projects.Table (Project).Seen := False;
*************** package body Prj is
*** 218,223 ****
--- 261,275 ----
        Check (Project => By);
     end For_Every_Project_Imported;
  
+    ----------
+    -- Hash --
+    ----------
+ 
+    function Hash (Name : Name_Id) return Header_Num is
+    begin
+       return Hash (Get_Name_String (Name));
+    end Hash;
+ 
     -----------
     -- Image --
     -----------
*************** package body Prj is
*** 235,240 ****
--- 287,293 ----
     begin
        if not Initialized then
           Initialized := True;
+          Uintp.Initialize;
           Name_Len := 0;
           The_Empty_String := Name_Find;
           Empty_Name := The_Empty_String;
*************** package body Prj is
*** 247,257 ****
           Name_Len := 1;
           Name_Buffer (1) := '/';
           Slash := Name_Find;
!          Std_Naming_Data.Current_Spec_Suffix := Default_Ada_Spec_Suffix;
!          Std_Naming_Data.Current_Body_Suffix := Default_Ada_Body_Suffix;
           Std_Naming_Data.Separate_Suffix     := Default_Ada_Body_Suffix;
           Register_Default_Naming_Scheme
!            (Language            => Ada_Language,
              Default_Spec_Suffix => Default_Ada_Spec_Suffix,
              Default_Body_Suffix => Default_Ada_Body_Suffix);
           Prj.Env.Initialize;
--- 300,314 ----
           Name_Len := 1;
           Name_Buffer (1) := '/';
           Slash := Name_Find;
!          Name_Len := 3;
!          Name_Buffer (1 .. 3) := "c++";
!          Name_C_Plus_Plus := Name_Find;
! 
!          Std_Naming_Data.Ada_Spec_Suffix := Default_Ada_Spec_Suffix;
!          Std_Naming_Data.Ada_Body_Suffix := Default_Ada_Body_Suffix;
           Std_Naming_Data.Separate_Suffix     := Default_Ada_Body_Suffix;
           Register_Default_Naming_Scheme
!            (Language            => Name_Ada,
              Default_Spec_Suffix => Default_Ada_Spec_Suffix,
              Default_Body_Suffix => Default_Ada_Body_Suffix);
           Prj.Env.Initialize;
*************** package body Prj is
*** 259,267 ****
--- 316,406 ----
           Set_Name_Table_Byte (Name_Project,  Token_Type'Pos (Tok_Project));
           Set_Name_Table_Byte (Name_Extends,  Token_Type'Pos (Tok_Extends));
           Set_Name_Table_Byte (Name_External, Token_Type'Pos (Tok_External));
+ 
+          Language_Indexes.Reset;
+          Last_Language_Index := No_Language_Index;
+          Language_Names.Init;
+          Add_Language_Name (Name_Ada);
+          Add_Language_Name (Name_C);
+          Add_Language_Name (Name_C_Plus_Plus);
        end if;
     end Initialize;
  
+    ----------------
+    -- Is_Present --
+    ----------------
+ 
+    function Is_Present
+      (Language   : Language_Index;
+       In_Project : Project_Data) return Boolean
+    is
+    begin
+       case Language is
+          when No_Language_Index =>
+             return False;
+ 
+          when First_Language_Indexes =>
+             return In_Project.Languages (Language);
+ 
+          when others =>
+             declare
+                Supp : Supp_Language;
+                Supp_Index : Supp_Language_Index := In_Project.Supp_Languages;
+ 
+             begin
+                while Supp_Index /= No_Supp_Language_Index loop
+                   Supp := Present_Languages.Table (Supp_Index);
+ 
+                   if Supp.Index = Language then
+                      return Supp.Present;
+                   end if;
+ 
+                   Supp_Index := Supp.Next;
+                end loop;
+ 
+                return False;
+             end;
+       end case;
+    end Is_Present;
+ 
+    ---------------------------------
+    -- Language_Processing_Data_Of --
+    ---------------------------------
+ 
+    function Language_Processing_Data_Of
+      (Language   : Language_Index;
+       In_Project : Project_Data) return Language_Processing_Data
+    is
+    begin
+       case Language is
+          when No_Language_Index =>
+             return Default_Language_Processing_Data;
+ 
+          when First_Language_Indexes =>
+             return In_Project.First_Language_Processing (Language);
+ 
+          when others =>
+             declare
+                Supp : Supp_Language_Data;
+                Supp_Index : Supp_Language_Index :=
+                  In_Project.Supp_Language_Processing;
+ 
+             begin
+                while Supp_Index /= No_Supp_Language_Index loop
+                   Supp := Supp_Languages.Table (Supp_Index);
+ 
+                   if Supp.Index = Language then
+                      return Supp.Data;
+                   end if;
+ 
+                   Supp_Index := Supp.Next;
+                end loop;
+ 
+                return Default_Language_Processing_Data;
+             end;
+       end case;
+    end Language_Processing_Data_Of;
+ 
     ------------------------------------
     -- Register_Default_Naming_Scheme --
     ------------------------------------
*************** package body Prj is
*** 306,318 ****
  
        if not Found then
           Element :=
!            (Index => Lang,
              Index_Case_Sensitive => False,
              Value => (Project  => No_Project,
                        Kind     => Single,
                        Location => No_Location,
                        Default  => False,
!                       Value    => Default_Spec_Suffix),
              Next  => Std_Naming_Data.Spec_Suffix);
           Array_Elements.Increment_Last;
           Array_Elements.Table (Array_Elements.Last) := Element;
--- 445,459 ----
  
        if not Found then
           Element :=
!            (Index     => Lang,
!             Src_Index => 0,
              Index_Case_Sensitive => False,
              Value => (Project  => No_Project,
                        Kind     => Single,
                        Location => No_Location,
                        Default  => False,
!                       Value    => Default_Spec_Suffix,
!                       Index    => 0),
              Next  => Std_Naming_Data.Spec_Suffix);
           Array_Elements.Increment_Last;
           Array_Elements.Table (Array_Elements.Last) := Element;
*************** package body Prj is
*** 342,354 ****
  
        if not Found then
           Element :=
!            (Index => Lang,
              Index_Case_Sensitive => False,
              Value => (Project  => No_Project,
                        Kind     => Single,
                        Location => No_Location,
                        Default  => False,
!                       Value    => Default_Body_Suffix),
              Next  => Std_Naming_Data.Body_Suffix);
           Array_Elements.Increment_Last;
           Array_Elements.Table (Array_Elements.Last) := Element;
--- 483,497 ----
  
        if not Found then
           Element :=
!            (Index     => Lang,
!             Src_Index => 0,
              Index_Case_Sensitive => False,
              Value => (Project  => No_Project,
                        Kind     => Single,
                        Location => No_Location,
                        Default  => False,
!                       Value    => Default_Body_Suffix,
!                       Index    => 0),
              Next  => Std_Naming_Data.Body_Suffix);
           Array_Elements.Increment_Last;
           Array_Elements.Table (Array_Elements.Last) := Element;
*************** package body Prj is
*** 356,364 ****
        end if;
     end Register_Default_Naming_Scheme;
  
!    ------------
!    --  Reset --
!    ------------
  
     procedure Reset is
     begin
--- 499,507 ----
        end if;
     end Register_Default_Naming_Scheme;
  
!    -----------
!    -- Reset --
!    -----------
  
     procedure Reset is
     begin
*************** package body Prj is
*** 370,375 ****
--- 513,519 ----
        String_Elements.Init;
        Prj.Com.Units.Init;
        Prj.Com.Units_Htable.Reset;
+       Prj.Com.Files_Htable.Reset;
     end Reset;
  
     ------------------------
*************** package body Prj is
*** 377,403 ****
     ------------------------
  
     function Same_Naming_Scheme
!      (Left, Right : Naming_Data)
!       return        Boolean
     is
     begin
        return Left.Dot_Replacement = Right.Dot_Replacement
          and then Left.Casing = Right.Casing
!         and then Left.Current_Spec_Suffix = Right.Current_Spec_Suffix
!         and then Left.Current_Body_Suffix = Right.Current_Body_Suffix
          and then Left.Separate_Suffix = Right.Separate_Suffix;
     end Same_Naming_Scheme;
  
     --------------------------
     -- Standard_Naming_Data --
     --------------------------
  
     function Standard_Naming_Data return Naming_Data is
     begin
!       Initialize;
        return Std_Naming_Data;
     end Standard_Naming_Data;
  
     -----------
     -- Value --
     -----------
--- 521,713 ----
     ------------------------
  
     function Same_Naming_Scheme
!      (Left, Right : Naming_Data) return Boolean
     is
     begin
        return Left.Dot_Replacement = Right.Dot_Replacement
          and then Left.Casing = Right.Casing
!         and then Left.Ada_Spec_Suffix = Right.Ada_Spec_Suffix
!         and then Left.Ada_Body_Suffix = Right.Ada_Body_Suffix
          and then Left.Separate_Suffix = Right.Separate_Suffix;
     end Same_Naming_Scheme;
  
+    ---------
+    -- Set --
+    ---------
+ 
+    procedure Set
+      (Language   : Language_Index;
+       Present    : Boolean;
+       In_Project : in out Project_Data)
+    is
+    begin
+       case Language is
+          when No_Language_Index =>
+             null;
+ 
+          when First_Language_Indexes =>
+             In_Project.Languages (Language) := Present;
+ 
+          when others =>
+             declare
+                Supp : Supp_Language;
+                Supp_Index : Supp_Language_Index := In_Project.Supp_Languages;
+ 
+             begin
+                while Supp_Index /= No_Supp_Language_Index loop
+                   Supp := Present_Languages.Table (Supp_Index);
+ 
+                   if Supp.Index = Language then
+                      Present_Languages.Table (Supp_Index).Present := Present;
+                      return;
+                   end if;
+ 
+                   Supp_Index := Supp.Next;
+                end loop;
+ 
+                Supp := (Index => Language, Present => Present,
+                         Next  => In_Project.Supp_Languages);
+                Present_Languages.Increment_Last;
+                Supp_Index := Present_Languages.Last;
+                Present_Languages.Table (Supp_Index) := Supp;
+                In_Project.Supp_Languages := Supp_Index;
+             end;
+       end case;
+    end Set;
+ 
+    procedure Set
+      (Language_Processing : in Language_Processing_Data;
+       For_Language        : Language_Index;
+       In_Project          : in out Project_Data)
+    is
+    begin
+       case For_Language is
+          when No_Language_Index =>
+             null;
+ 
+          when First_Language_Indexes =>
+             In_Project.First_Language_Processing (For_Language) :=
+               Language_Processing;
+ 
+          when others =>
+             declare
+                Supp : Supp_Language_Data;
+                Supp_Index : Supp_Language_Index :=
+                  In_Project.Supp_Language_Processing;
+ 
+             begin
+                while Supp_Index /= No_Supp_Language_Index loop
+                   Supp := Supp_Languages.Table (Supp_Index);
+ 
+                   if Supp.Index = For_Language then
+                      Supp_Languages.Table (Supp_Index).Data :=
+                        Language_Processing;
+                      return;
+                   end if;
+ 
+                   Supp_Index := Supp.Next;
+                end loop;
+ 
+                Supp := (Index => For_Language, Data => Language_Processing,
+                         Next  => In_Project.Supp_Language_Processing);
+                Supp_Languages.Increment_Last;
+                Supp_Index := Supp_Languages.Last;
+                Supp_Languages.Table (Supp_Index) := Supp;
+                In_Project.Supp_Language_Processing := Supp_Index;
+             end;
+       end case;
+    end Set;
+ 
+    procedure Set
+      (Suffix       : Name_Id;
+       For_Language : Language_Index;
+       In_Project   : in out Project_Data)
+    is
+    begin
+       case For_Language is
+          when No_Language_Index =>
+             null;
+ 
+          when First_Language_Indexes =>
+             In_Project.Naming.Impl_Suffixes (For_Language) := Suffix;
+ 
+          when others =>
+             declare
+                Supp : Supp_Suffix;
+                Supp_Index : Supp_Language_Index :=
+                  In_Project.Naming.Supp_Suffixes;
+ 
+             begin
+                while Supp_Index /= No_Supp_Language_Index loop
+                   Supp := Supp_Suffix_Table.Table (Supp_Index);
+ 
+                   if Supp.Index = For_Language then
+                      Supp_Suffix_Table.Table (Supp_Index).Suffix := Suffix;
+                      return;
+                   end if;
+ 
+                   Supp_Index := Supp.Next;
+                end loop;
+ 
+                Supp := (Index => For_Language, Suffix => Suffix,
+                         Next  => In_Project.Naming.Supp_Suffixes);
+                Supp_Suffix_Table.Increment_Last;
+                Supp_Index := Supp_Suffix_Table.Last;
+                Supp_Suffix_Table.Table (Supp_Index) := Supp;
+                In_Project.Naming.Supp_Suffixes := Supp_Index;
+             end;
+       end case;
+    end Set;
+ 
+ 
     --------------------------
     -- Standard_Naming_Data --
     --------------------------
  
     function Standard_Naming_Data return Naming_Data is
     begin
!       Prj.Initialize;
        return Std_Naming_Data;
     end Standard_Naming_Data;
  
+    ---------------
+    -- Suffix_Of --
+    ---------------
+ 
+    function Suffix_Of
+      (Language   : Language_Index;
+       In_Project : Project_Data) return Name_Id
+    is
+    begin
+       case Language is
+          when No_Language_Index =>
+             return No_Name;
+ 
+          when First_Language_Indexes =>
+             return In_Project.Naming.Impl_Suffixes (Language);
+ 
+          when others =>
+             declare
+                Supp : Supp_Suffix;
+                Supp_Index : Supp_Language_Index :=
+                  In_Project.Naming.Supp_Suffixes;
+ 
+             begin
+                while Supp_Index /= No_Supp_Language_Index loop
+                   Supp := Supp_Suffix_Table.Table (Supp_Index);
+ 
+                   if Supp.Index = Language then
+                      return Supp.Suffix;
+                   end if;
+ 
+                   Supp_Index := Supp.Next;
+                end loop;
+ 
+                return No_Name;
+             end;
+       end case;
+    end  Suffix_Of;
+ 
     -----------
     -- Value --
     -----------
diff -Nrcpad gcc-3.4.3/gcc/ada/prj.ads gcc-4.0.0/gcc/ada/prj.ads
*** gcc-3.4.3/gcc/ada/prj.ads	Mon Dec  8 10:33:15 2003
--- gcc-4.0.0/gcc/ada/prj.ads	Wed Dec  8 11:25:42 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2001-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2001-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Types;  use Types;
*** 37,47 ****
  
  with GNAT.OS_Lib; use GNAT.OS_Lib;
  
  package Prj is
  
     Empty_Name : Name_Id;
!    --  Name_Id for an empty name (no characters).
!    --  Initialized by procedure Initialize.
  
     All_Packages : constant String_List_Access := null;
     --  Default value of parameter Packages of procedures Parse, in Prj.Pars and
--- 37,49 ----
  
  with GNAT.OS_Lib; use GNAT.OS_Lib;
  
+ with System.HTable; use System.HTable;
+ 
  package Prj is
  
     Empty_Name : Name_Id;
!    --  Name_Id for an empty name (no characters). Initialized by the call
!    --  to procedure Initialize.
  
     All_Packages : constant String_List_Access := null;
     --  Default value of parameter Packages of procedures Parse, in Prj.Pars and
*************** package Prj is
*** 52,60 ****
     --  normally forbidden for project names, there cannot be any name clash.
  
     Project_File_Extension : String := ".gpr";
!    --  The standard project file name extension.
!    --  It is not a constant, because Canonical_Case_File_Name is called
!    --  on this variable in the body of Prj.
  
     Default_Ada_Spec_Suffix : Name_Id;
     --  The Name_Id for the standard GNAT suffix for Ada spec source file
--- 54,61 ----
     --  normally forbidden for project names, there cannot be any name clash.
  
     Project_File_Extension : String := ".gpr";
!    --  The standard project file name extension. It is not a constant, because
!    --  Canonical_Case_File_Name is called on this variable in the body of Prj.
  
     Default_Ada_Spec_Suffix : Name_Id;
     --  The Name_Id for the standard GNAT suffix for Ada spec source file
*************** package Prj is
*** 67,72 ****
--- 68,257 ----
     Slash : Name_Id;
     --  "/", used as the path of locally removed files
  
+    type Language_Index is new Nat;
+ 
+    No_Language_Index           : constant Language_Index := 0;
+    First_Language_Index        : constant Language_Index := 1;
+    First_Language_Indexes_Last : constant Language_Index := 5;
+ 
+    Ada_Language_Index         : constant Language_Index :=
+                                   First_Language_Index;
+    C_Language_Index           : constant Language_Index :=
+                                   Ada_Language_Index + 1;
+    C_Plus_Plus_Language_Index : constant Language_Index :=
+                                   C_Language_Index + 1;
+ 
+    Last_Language_Index : Language_Index := No_Language_Index;
+ 
+    subtype First_Language_Indexes is Language_Index
+       range First_Language_Index .. First_Language_Indexes_Last;
+ 
+    type Header_Num is range 0 .. 2047;
+ 
+    function Hash is new System.HTable.Hash (Header_Num => Header_Num);
+ 
+    function Hash (Name : Name_Id) return Header_Num;
+ 
+    package Language_Indexes is new System.HTable.Simple_HTable
+      (Header_Num => Header_Num,
+       Element    => Language_Index,
+       No_Element => No_Language_Index,
+       Key        => Name_Id,
+       Hash       => Hash,
+       Equal      => "=");
+    --  Mapping of language names to language indexes
+ 
+    package Language_Names is new Table.Table
+      (Table_Component_Type => Name_Id,
+       Table_Index_Type     => Language_Index,
+       Table_Low_Bound      => 1,
+       Table_Initial        => 4,
+       Table_Increment      => 100,
+       Table_Name           => "Prj.Language_Names");
+    --  The table for the name of programming languages
+ 
+    procedure Add_Language_Name (Name : Name_Id);
+ 
+    procedure Display_Language_Name (Language : Language_Index);
+ 
+    type Languages_In_Project is array (First_Language_Indexes) of Boolean;
+    --  Set of supported languages used in a project
+ 
+    No_Languages : constant Languages_In_Project := (others => False);
+    --  No supported languages are used
+ 
+    type Supp_Language_Index is new Nat;
+    No_Supp_Language_Index  : constant Supp_Language_Index := 0;
+ 
+    type Supp_Language is record
+       Index   : Language_Index := No_Language_Index;
+       Present : Boolean := False;
+       Next    : Supp_Language_Index := No_Supp_Language_Index;
+    end record;
+ 
+    package Present_Languages is new Table.Table
+      (Table_Component_Type => Supp_Language,
+       Table_Index_Type     => Supp_Language_Index,
+       Table_Low_Bound      => 1,
+       Table_Initial        => 4,
+       Table_Increment      => 100,
+       Table_Name           => "Prj.Present_Languages");
+    --  The table for the presence of languages with an index that is outside
+    --  of First_Language_Indexes.
+ 
+    type Impl_Suffix_Array is array (First_Language_Indexes) of Name_Id;
+    --  Suffixes for the non spec sources of the different supported languages
+    --  in a project.
+ 
+    No_Impl_Suffixes : constant Impl_Suffix_Array := (others => No_Name);
+    --  A default value for the non spec source suffixes
+ 
+    type Supp_Suffix is record
+       Index   : Language_Index := No_Language_Index;
+       Suffix  : Name_Id := No_Name;
+       Next    : Supp_Language_Index := No_Supp_Language_Index;
+    end record;
+ 
+    package Supp_Suffix_Table is new Table.Table
+      (Table_Component_Type => Supp_Suffix,
+       Table_Index_Type     => Supp_Language_Index,
+       Table_Low_Bound      => 1,
+       Table_Initial        => 4,
+       Table_Increment      => 100,
+       Table_Name           => "Prj.Supp_Suffix_Table");
+    --  The table for the presence of languages with an index that is outside
+    --  of First_Language_Indexes.
+ 
+    type Language_Kind is (GNU, other);
+ 
+    type Name_List_Index is new Nat;
+    No_Name_List            : constant Name_List_Index := 0;
+ 
+    type Name_Node is record
+       Name : Name_Id         := No_Name;
+       Next : Name_List_Index := No_Name_List;
+    end record;
+ 
+    package Name_Lists is new Table.Table
+      (Table_Component_Type => Name_Node,
+       Table_Index_Type     => Name_List_Index,
+       Table_Low_Bound      => 1,
+       Table_Initial        => 10,
+       Table_Increment      => 100,
+       Table_Name           => "Prj.Name_Lists");
+    --  The table for lists of names used in package Language_Processing
+ 
+    type Language_Processing_Data is record
+       Compiler_Drivers     : Name_List_Index := No_Name_List;
+       Compiler_Paths       : Name_Id         := No_Name;
+       Compiler_Kinds       : Language_Kind   := GNU;
+       Dependency_Options   : Name_List_Index := No_Name_List;
+       Compute_Dependencies : Name_List_Index := No_Name_List;
+       Include_Options      : Name_List_Index := No_Name_List;
+       Binder_Drivers       : Name_Id         := No_Name;
+       Binder_Driver_Paths  : Name_Id         := No_Name;
+    end record;
+ 
+    Default_Language_Processing_Data :
+      constant Language_Processing_Data :=
+        (Compiler_Drivers     => No_Name_List,
+         Compiler_Paths       => No_Name,
+         Compiler_Kinds       => GNU,
+         Dependency_Options   => No_Name_List,
+         Compute_Dependencies => No_Name_List,
+         Include_Options      => No_Name_List,
+         Binder_Drivers       => No_Name,
+         Binder_Driver_Paths  => No_Name);
+ 
+    type First_Language_Processing_Data is
+      array (First_Language_Indexes) of Language_Processing_Data;
+ 
+    Default_First_Language_Processing_Data : First_Language_Processing_Data :=
+      (others => Default_Language_Processing_Data);
+ 
+    type Supp_Language_Data is record
+       Index : Language_Index := No_Language_Index;
+       Data  : Language_Processing_Data := Default_Language_Processing_Data;
+       Next  : Supp_Language_Index := No_Supp_Language_Index;
+    end record;
+ 
+    package Supp_Languages is new Table.Table
+      (Table_Component_Type => Supp_Language_Data,
+       Table_Index_Type     => Supp_Language_Index,
+       Table_Low_Bound      => 1,
+       Table_Initial        => 4,
+       Table_Increment      => 100,
+       Table_Name           => "Prj.Supp_Languages");
+    --  The table for language data when there are more languages than
+    --  in First_Language_Indexes.
+ 
+    type Other_Source_Id is new Nat;
+    No_Other_Source : constant Other_Source_Id := 0;
+    type Other_Source is record
+       Language         : Language_Index;       --  language of the source
+       File_Name        : Name_Id;              --  source file simple name
+       Path_Name        : Name_Id;              --  source full path name
+       Source_TS        : Time_Stamp_Type;      --  source file time stamp
+       Object_Name      : Name_Id;              --  object file simple name
+       Object_Path      : Name_Id;              --  object full path name
+       Object_TS        : Time_Stamp_Type;      --  object file time stamp
+       Dep_Name         : Name_Id;              --  dependency file simple name
+       Dep_Path         : Name_Id;              --  dependency full path name
+       Dep_TS           : Time_Stamp_Type;      --  dependency file time stamp
+       Naming_Exception : Boolean := False;     --  True if a naming exception
+       Next             : Other_Source_Id := No_Other_Source;
+    end record;
+    --  Data for a source in a language other than Ada
+ 
+    package Other_Sources is new Table.Table
+      (Table_Component_Type => Other_Source,
+       Table_Index_Type     => Other_Source_Id,
+       Table_Low_Bound      => 1,
+       Table_Initial        => 200,
+       Table_Increment      => 100,
+       Table_Name           => "Prj.Other_Sources");
+    --  The table for sources of languages other than Ada
+ 
     type Verbosity is (Default, Medium, High);
     --  Verbosity when parsing GNAT Project Files
     --    Default is default (very quiet, if no errors).
*************** package Prj is
*** 74,82 ****
     --    High is extremely verbose.
  
     type Lib_Kind is (Static, Dynamic, Relocatable);
! 
!    type Policy is (Autonomous, Compliant, Controlled);
!    --  See explaination about this type in package Symbol
  
     type Symbol_Record is record
        Symbol_File   : Name_Id := No_Name;
--- 259,271 ----
     --    High is extremely verbose.
  
     type Lib_Kind is (Static, Dynamic, Relocatable);
!    type Policy is (Autonomous, Compliant, Controlled, Restricted);
!    --  Type to specify the symbol policy, when symbol control is supported.
!    --  See full explanation about this type in package Symbols.
!    --  Autonomous: Create a symbol file without considering any reference
!    --  Compliant: Try to be as compatible as possible with an existing ref
!    --  Controlled: Fail if symbols are not the same as those in the reference
!    --  Restricted: Restrict the symbols to those in the symbol file
  
     type Symbol_Record is record
        Symbol_File   : Name_Id := No_Name;
*************** package Prj is
*** 89,96 ****
--- 278,287 ----
       (Symbol_File   => No_Name,
        Reference     => No_Name,
        Symbol_Policy => Autonomous);
+    --  The default value of the symbol data
  
     function Empty_String return Name_Id;
+    --  Return the Name_Id for an empty string ""
  
     type Project_Id is new Nat;
     No_Project : constant Project_Id := 0;
*************** package Prj is
*** 100,105 ****
--- 291,297 ----
     Nil_String : constant String_List_Id := 0;
     type String_Element is record
        Value    : Name_Id        := No_Name;
+       Index    : Int            := 0;
        Display_Value : Name_Id   := No_Name;
        Location : Source_Ptr     := No_Location;
        Flag     : Boolean        := False;
*************** package Prj is
*** 121,126 ****
--- 313,321 ----
     type Variable_Kind is (Undefined, List, Single);
     --  Different kinds of variables
  
+    subtype Defined_Variable_Kind is Variable_Kind range List .. Single;
+    --  The defined kinds of variables
+ 
     Ignored : constant Variable_Kind := Single;
     --  Used to indicate that a package declaration must be ignored
     --  while processing the project tree (unknown package name).
*************** package Prj is
*** 136,145 ****
              Values : String_List_Id := Nil_String;
           when Single =>
              Value : Name_Id := No_Name;
        end case;
     end record;
!    --  Values for variables and array elements.
!    --  Default is True if the current value is the default one for the variable
  
     Nil_Variable_Value : constant Variable_Value :=
       (Project  => No_Project,
--- 331,341 ----
              Values : String_List_Id := Nil_String;
           when Single =>
              Value : Name_Id := No_Name;
+             Index : Int     := 0;
        end case;
     end record;
!    --  Values for variables and array elements. Default is True if the
!    --  current value is the default one for the variable
  
     Nil_Variable_Value : constant Variable_Value :=
       (Project  => No_Project,
*************** package Prj is
*** 170,175 ****
--- 366,372 ----
     No_Array_Element : constant Array_Element_Id := 0;
     type Array_Element is record
        Index                : Name_Id;
+       Src_Index            : Int := 0;
        Index_Case_Sensitive : Boolean := True;
        Value                : Variable_Value;
        Next                 : Array_Element_Id := No_Array_Element;
*************** package Prj is
*** 214,226 ****
        Arrays     : Array_Id    := No_Array;
        Packages   : Package_Id  := No_Package;
     end record;
  
     No_Declarations : constant Declarations :=
       (Variables  => No_Variable,
        Attributes => No_Variable,
        Arrays     => No_Array,
        Packages   => No_Package);
!    --  Declarations. Used in project structures and packages (what for???)
  
     type Package_Element is record
        Name   : Name_Id      := No_Name;
--- 411,425 ----
        Arrays     : Array_Id    := No_Array;
        Packages   : Package_Id  := No_Package;
     end record;
+    --  Contains the declarations (variables, single and array attributes,
+    --  packages) for a project or a package in a project.
  
     No_Declarations : constant Declarations :=
       (Variables  => No_Variable,
        Attributes => No_Variable,
        Arrays     => No_Array,
        Packages   => No_Package);
!    --  Default value of Declarations: indicates that there is no declarations.
  
     type Package_Element is record
        Name   : Name_Id      := No_Name;
*************** package Prj is
*** 249,256 ****
     --  The following record contains data for a naming scheme
  
     type Naming_Data is record
-       Current_Language : Name_Id := No_Name;
-       --  The programming language being currently considered
  
        Dot_Replacement : Name_Id := No_Name;
        --  The string to replace '.' in the source file name (for Ada).
--- 448,453 ----
*************** package Prj is
*** 267,339 ****
        --  source file name of a spec.
        --  Indexed by the programming language.
  
!       Current_Spec_Suffix : Name_Id := No_Name;
!       --  The "spec" suffix of the current programming language
  
        Spec_Suffix_Loc : Source_Ptr := No_Location;
        --  The position in the project file source where
!       --  Current_Spec_Suffix is defined.
  
        Body_Suffix : Array_Element_Id := No_Array_Element;
        --  The string to append to the unit name for the
        --  source file name of a body.
        --  Indexed by the programming language.
  
!       Current_Body_Suffix : Name_Id := No_Name;
!       --  The "body" suffix of the current programming language
  
        Body_Suffix_Loc : Source_Ptr := No_Location;
        --  The position in the project file source where
!       --  Current_Body_Suffix is defined.
  
        Separate_Suffix : Name_Id := No_Name;
!       --  The string to append to the unit name for the
!       --  source file name of an Ada subunit.
  
        Sep_Suffix_Loc : Source_Ptr := No_Location;
!       --  The position in the project file source where
!       --  Separate_Suffix is defined.
  
        Specs : Array_Element_Id := No_Array_Element;
!       --  An associative array mapping individual specs
!       --  to source file names. Specific to Ada.
  
        Bodies : Array_Element_Id := No_Array_Element;
!       --  An associative array mapping individual bodies
!       --  to source file names. Specific to Ada.
  
        Specification_Exceptions : Array_Element_Id := No_Array_Element;
!       --  An associative array listing spec file names that don't have the
!       --  spec suffix. Not used by Ada. Indexed by the programming language
!       --  name.
  
        Implementation_Exceptions : Array_Element_Id := No_Array_Element;
!       --  An associative array listing body file names that don't have the
!       --  body suffix. Not used by Ada. Indexed by the programming language
!       --  name.
  
     end record;
  
     function Standard_Naming_Data return Naming_Data;
     pragma Inline (Standard_Naming_Data);
!    --  The standard GNAT naming scheme.
  
     function Same_Naming_Scheme
!      (Left, Right : Naming_Data)
!       return        Boolean;
     --  Returns True if Left and Right are the same naming scheme
     --  not considering Specs and Bodies.
  
     type Project_List is new Nat;
     Empty_Project_List : constant Project_List := 0;
!    --  A list of project files.
  
     type Project_Element is record
        Project : Project_Id   := No_Project;
        Next    : Project_List := Empty_Project_List;
     end record;
!    --  Element in a list of project file.
!    --  Next is the id of the next project file in the list.
  
     package Project_Lists is new Table.Table
       (Table_Component_Type => Project_Element,
--- 464,535 ----
        --  source file name of a spec.
        --  Indexed by the programming language.
  
!       Ada_Spec_Suffix : Name_Id := No_Name;
!       --  The suffix of the Ada spec sources
  
        Spec_Suffix_Loc : Source_Ptr := No_Location;
        --  The position in the project file source where
!       --  Ada_Spec_Suffix is defined.
! 
!       Impl_Suffixes    : Impl_Suffix_Array   := No_Impl_Suffixes;
!       Supp_Suffixes    : Supp_Language_Index := No_Supp_Language_Index;
!       --  The source suffixes of the different languages
  
        Body_Suffix : Array_Element_Id := No_Array_Element;
        --  The string to append to the unit name for the
        --  source file name of a body.
        --  Indexed by the programming language.
  
!       Ada_Body_Suffix : Name_Id := No_Name;
!       --  The suffix of the Ada body sources
  
        Body_Suffix_Loc : Source_Ptr := No_Location;
        --  The position in the project file source where
!       --  Ada_Body_Suffix is defined.
  
        Separate_Suffix : Name_Id := No_Name;
!       --  String to append to unit name for source file name of an Ada subunit.
  
        Sep_Suffix_Loc : Source_Ptr := No_Location;
!       --  Position in the project file source where Separate_Suffix is defined.
  
        Specs : Array_Element_Id := No_Array_Element;
!       --  An associative array mapping individual specs to source file names.
!       --  This is specific to Ada.
  
        Bodies : Array_Element_Id := No_Array_Element;
!       --  An associative array mapping individual bodies to source file names.
!       --  This is specific to Ada.
  
        Specification_Exceptions : Array_Element_Id := No_Array_Element;
!       --  An associative array listing spec file names that do not have the
!       --  spec suffix. Not used by Ada. Indexed by programming language name.
  
        Implementation_Exceptions : Array_Element_Id := No_Array_Element;
!       --  An associative array listing body file names that do not have the
!       --  body suffix. Not used by Ada. Indexed by programming language name.
  
     end record;
  
     function Standard_Naming_Data return Naming_Data;
     pragma Inline (Standard_Naming_Data);
!    --  The standard GNAT naming scheme
  
     function Same_Naming_Scheme
!      (Left, Right : Naming_Data) return Boolean;
     --  Returns True if Left and Right are the same naming scheme
     --  not considering Specs and Bodies.
  
     type Project_List is new Nat;
     Empty_Project_List : constant Project_List := 0;
!    --  A list of project files
  
     type Project_Element is record
        Project : Project_Id   := No_Project;
        Next    : Project_List := Empty_Project_List;
     end record;
!    --  Element in a list of project files. Next is the id of the next
!    --  project file in the list.
  
     package Project_Lists is new Table.Table
       (Table_Component_Type => Project_Element,
*************** package Prj is
*** 342,382 ****
        Table_Initial        => 100,
        Table_Increment      => 100,
        Table_Name           => "Prj.Project_Lists");
!    --  The table that contains the lists of project files.
  
     --  The following record describes a project file representation
  
     type Project_Data is record
        First_Referred_By  : Project_Id := No_Project;
        --  The project, if any, that was the first to be known
        --  as importing or extending this project.
        --  Set by Prj.Proc.Process.
  
        Name : Name_Id := No_Name;
!       --  The name of the project.
!       --  Set by Prj.Proc.Process.
  
        Path_Name : Name_Id := No_Name;
!       --  The path name of the project file.
!       --  Set by Prj.Proc.Process.
  
        Virtual : Boolean := False;
        --  True for virtual extending projects
  
-       Display_Path_Name : Name_Id := No_Name;
- 
        Location : Source_Ptr := No_Location;
!       --  The location in the project file source of the
!       --  reserved word project.
!       --  Set by Prj.Proc.Process.
  
        Mains : String_List_Id := Nil_String;
!       --  The list of mains as specified by attribute Main.
!       --  Set by Prj.Nmsc.Ada_Check.
  
        Directory : Name_Id := No_Name;
!       --  The directory where the project file resides.
!       --  Set by Prj.Proc.Process.
  
        Display_Directory : Name_Id := No_Name;
  
--- 538,581 ----
        Table_Initial        => 100,
        Table_Increment      => 100,
        Table_Name           => "Prj.Project_Lists");
!    --  The table that contains the lists of project files
  
     --  The following record describes a project file representation
  
     type Project_Data is record
+       Externally_Built : Boolean := False;
+ 
+       Languages      : Languages_In_Project := No_Languages;
+       Supp_Languages : Supp_Language_Index  := No_Supp_Language_Index;
+       --  Indicate the different languages of the source of this project
+ 
        First_Referred_By  : Project_Id := No_Project;
        --  The project, if any, that was the first to be known
        --  as importing or extending this project.
        --  Set by Prj.Proc.Process.
  
        Name : Name_Id := No_Name;
!       --  The name of the project. Set by Prj.Proc.Process.
  
        Path_Name : Name_Id := No_Name;
!       --  The path name of the project file. Set by Prj.Proc.Process.
! 
!       Display_Path_Name : Name_Id := No_Name;
!       --  The path name used for display purposes. May be different from
!       --  Path_Name for platforms where the file names are case-insensitive.
  
        Virtual : Boolean := False;
        --  True for virtual extending projects
  
        Location : Source_Ptr := No_Location;
!       --  The location in the project file source of the reserved word
!       --  project. Set by Prj.Proc.Process.
  
        Mains : String_List_Id := Nil_String;
!       --  List of mains specified by attribute Main. Set by Prj.Nmsc.Check.
  
        Directory : Name_Id := No_Name;
!       --  Directory where the project file resides. Set by Prj.Proc.Process.
  
        Display_Directory : Name_Id := No_Name;
  
*************** package Prj is
*** 393,398 ****
--- 592,600 ----
        --  Set by Prj.Nmsc.Language_Independent_Check.
  
        Display_Library_Dir : Name_Id := No_Name;
+       --  The name of the library directory, for display purposes.
+       --  May be different from Library_Dir for platforms where the file names
+       --  are case-insensitive.
  
        Library_Src_Dir : Name_Id := No_Name;
        --  If a library project, directory where the sources and the ALI files
*************** package Prj is
*** 402,407 ****
--- 604,612 ----
        --  Set by Prj.Nmsc.Language_Independent_Check.
  
        Display_Library_Src_Dir : Name_Id := No_Name;
+       --  The name of the library source directory, for display purposes.
+       --  May be different from Library_Src_Dir for platforms where the file
+       --  names are case-insensitive.
  
        Library_Name : Name_Id := No_Name;
        --  If a library project, name of the library
*************** package Prj is
*** 415,455 ****
        --  If a library project, internal name store inside the library
        --  Set by Prj.Nmsc.Language_Independent_Check.
  
-       Lib_Elaboration : Boolean := False;
-       --  If a library project, indicate if <lib>init and <lib>final
-       --  procedures need to be defined.
-       --  Set by Prj.Nmsc.Language_Independent_Check.
- 
        Standalone_Library : Boolean := False;
        --  Indicate that this is a Standalone Library Project File.
!       --  Set by Prj.Nmsc.Ada_Check.
  
        Lib_Interface_ALIs : String_List_Id := Nil_String;
        --  For Standalone Library Project Files, indicate the list
!       --  of Interface ALI files.
!       --  Set by Prj.Nmsc.Ada_Check.
  
!       Lib_Auto_Init  : Boolean := False;
        --  For non static Standalone Library Project Files, indicate if
        --  the library initialisation should be automatic.
  
        Symbol_Data : Symbol_Record := No_Symbols;
        --  Symbol file name, reference symbol file name, symbol policy
  
!       Sources_Present : Boolean := True;
!       --  A flag that indicates if there are sources in this project file.
!       --  There are no sources if 1) Source_Dirs is specified as an
!       --  empty list, 2) Source_Files is specified as an empty list, or
!       --  3) the current language is not in the list of the specified
!       --  Languages.
  
        Sources : String_List_Id := Nil_String;
!       --  The list of all the source file names.
!       --  Set by Prj.Nmsc.Check_Naming_Scheme.
  
        Source_Dirs : String_List_Id := Nil_String;
        --  The list of all the source directories.
!       --  Set by Prj.Nmsc.Check_Naming_Scheme.
  
        Known_Order_Of_Source_Dirs : Boolean := True;
        --  False, if there is any /** in the Source_Dirs, because in this case
--- 620,672 ----
        --  If a library project, internal name store inside the library
        --  Set by Prj.Nmsc.Language_Independent_Check.
  
        Standalone_Library : Boolean := False;
        --  Indicate that this is a Standalone Library Project File.
!       --  Set by Prj.Nmsc.Check.
  
        Lib_Interface_ALIs : String_List_Id := Nil_String;
        --  For Standalone Library Project Files, indicate the list
!       --  of Interface ALI files. Set by Prj.Nmsc.Check.
  
!       Lib_Auto_Init : Boolean := False;
        --  For non static Standalone Library Project Files, indicate if
        --  the library initialisation should be automatic.
  
        Symbol_Data : Symbol_Record := No_Symbols;
        --  Symbol file name, reference symbol file name, symbol policy
  
!       Ada_Sources_Present : Boolean := True;
!       --  A flag that indicates if there are Ada sources in this project file.
!       --  There are no sources if any of the following is true:
!       --    1) Source_Dirs is specified as an empty list
!       --    2) Source_Files is specified as an empty list
!       --    3) Ada is not in the list of the specified Languages
! 
!       Other_Sources_Present : Boolean := True;
!       --  A flag that indicates that there are non-Ada sources in this project
  
        Sources : String_List_Id := Nil_String;
!       --  The list of all the source file names. Set by
!       --  Prj.Nmsc.Check_Ada_Naming_Scheme.
! 
!       First_Other_Source : Other_Source_Id := No_Other_Source;
!       Last_Other_Source  : Other_Source_Id := No_Other_Source;
!       --  Head and tail of the list of sources of languages other than Ada
! 
!       Imported_Directories_Switches : Argument_List_Access := null;
!       --  List of the -I switches to be used when compiling sources of
!       --  languages other than Ada.
! 
!       Include_Path : String_Access := null;
!       --  Value to be used as CPATH, when using a GCC, instead of a list of
!       --  -I switches.
! 
!       Include_Data_Set : Boolean := False;
!       --  Set True when Imported_Directories_Switches or Include_Path are set
  
        Source_Dirs : String_List_Id := Nil_String;
        --  The list of all the source directories.
!       --  Set by Prj.Nmsc.Language_Independent_Check.
  
        Known_Order_Of_Source_Dirs : Boolean := True;
        --  False, if there is any /** in the Source_Dirs, because in this case
*************** package Prj is
*** 458,508 ****
  
        Object_Directory : Name_Id := No_Name;
        --  The object directory of this project file.
!       --  Set by Prj.Nmsc.Check_Naming_Scheme.
  
        Display_Object_Dir : Name_Id := No_Name;
  
!       Exec_Directory   : Name_Id := No_Name;
!       --  The exec directory of this project file.
!       --  Default is equal to Object_Directory.
!       --  Set by Prj.Nmsc.Check_Naming_Scheme.
  
        Display_Exec_Dir : Name_Id := No_Name;
  
        Extends : Project_Id := No_Project;
        --  The reference of the project file, if any, that this
!       --  project file extends.
!       --  Set by Prj.Proc.Process.
  
        Extended_By : Project_Id := No_Project;
        --  The reference of the project file, if any, that
!       --  extends this project file.
!       --  Set by Prj.Proc.Process.
  
        Naming : Naming_Data := Standard_Naming_Data;
        --  The naming scheme of this project file.
        --  Set by Prj.Nmsc.Check_Naming_Scheme.
  
        Decl : Declarations := No_Declarations;
!       --  The declarations (variables, attributes and packages)
!       --  of this project file.
!       --  Set by Prj.Proc.Process.
  
        Imported_Projects : Project_List := Empty_Project_List;
        --  The list of all directly imported projects, if any.
        --  Set by Prj.Proc.Process.
  
!       Ada_Include_Path  : String_Access := null;
        --  The cached value of ADA_INCLUDE_PATH for this project file.
        --  Do not use this field directly outside of the compiler, use
!       --  Prj.Env.Ada_Include_Path instead.
!       --  Set by Prj.Env.Ada_Include_Path.
  
!       Ada_Objects_Path  : String_Access := null;
        --  The cached value of ADA_OBJECTS_PATH for this project file.
        --  Do not use this field directly outside of the compiler, use
!       --  Prj.Env.Ada_Objects_Path instead.
!       --  Set by Prj.Env.Ada_Objects_Path
  
        Include_Path_File : Name_Id := No_Name;
        --  The cached value of the source path temp file for this project file.
--- 675,734 ----
  
        Object_Directory : Name_Id := No_Name;
        --  The object directory of this project file.
!       --  Set by Prj.Nmsc.Language_Independent_Check.
  
        Display_Object_Dir : Name_Id := No_Name;
+       --  The name of the object directory, for display purposes.
+       --  May be different from Object_Directory for platforms where the file
+       --  names are case-insensitive.
  
!       Exec_Directory : Name_Id := No_Name;
!       --  The exec directory of this project file. Default is equal to
!       --  Object_Directory. Set by Prj.Nmsc.Language_Independent_Check.
  
        Display_Exec_Dir : Name_Id := No_Name;
+       --  The name of the exec directory, for display purposes.
+       --  May be different from Exec_Directory for platforms where the file
+       --  names are case-insensitive.
  
        Extends : Project_Id := No_Project;
        --  The reference of the project file, if any, that this
!       --  project file extends. Set by Prj.Proc.Process.
  
        Extended_By : Project_Id := No_Project;
        --  The reference of the project file, if any, that
!       --  extends this project file. Set by Prj.Proc.Process.
  
        Naming : Naming_Data := Standard_Naming_Data;
        --  The naming scheme of this project file.
        --  Set by Prj.Nmsc.Check_Naming_Scheme.
  
+       First_Language_Processing : First_Language_Processing_Data :=
+         Default_First_Language_Processing_Data;
+ 
+       Supp_Language_Processing      : Supp_Language_Index :=
+                                        No_Supp_Language_Index;
+ 
+       Default_Linker                : Name_Id := No_Name;
+       Default_Linker_Path           : Name_Id := No_Name;
+ 
        Decl : Declarations := No_Declarations;
!       --  The declarations (variables, attributes and packages) of this
!       --  project file. Set by Prj.Proc.Process.
  
        Imported_Projects : Project_List := Empty_Project_List;
        --  The list of all directly imported projects, if any.
        --  Set by Prj.Proc.Process.
  
!       Ada_Include_Path : String_Access := null;
        --  The cached value of ADA_INCLUDE_PATH for this project file.
        --  Do not use this field directly outside of the compiler, use
!       --  Prj.Env.Ada_Include_Path instead. Set by Prj.Env.Ada_Include_Path.
  
!       Ada_Objects_Path : String_Access := null;
        --  The cached value of ADA_OBJECTS_PATH for this project file.
        --  Do not use this field directly outside of the compiler, use
!       --  Prj.Env.Ada_Objects_Path instead. Set by Prj.Env.Ada_Objects_Path
  
        Include_Path_File : Name_Id := No_Name;
        --  The cached value of the source path temp file for this project file.
*************** package Prj is
*** 510,522 ****
  
        Objects_Path_File_With_Libs : Name_Id := No_Name;
        --  The cached value of the object path temp file (including library
!       --  dirs) for this project file.
!       --  Set by gnatmake (Prj.Env.Set_Ada_Paths).
  
        Objects_Path_File_Without_Libs : Name_Id := No_Name;
        --  The cached value of the object path temp file (excluding library
!       --  dirs) for this project file.
!       --  Set by gnatmake (Prj.Env.Set_Ada_Paths).
  
        Config_File_Name : Name_Id := No_Name;
        --  The name of the configuration pragmas file, if any.
--- 736,746 ----
  
        Objects_Path_File_With_Libs : Name_Id := No_Name;
        --  The cached value of the object path temp file (including library
!       --  dirs) for this project file. Set by gnatmake (Prj.Env.Set_Ada_Paths).
  
        Objects_Path_File_Without_Libs : Name_Id := No_Name;
        --  The cached value of the object path temp file (excluding library
!       --  dirs) for this project file. Set by gnatmake (Prj.Env.Set_Ada_Paths).
  
        Config_File_Name : Name_Id := No_Name;
        --  The name of the configuration pragmas file, if any.
*************** package Prj is
*** 534,554 ****
        Language_Independent_Checked : Boolean := False;
        --  A flag that indicates that the project file has been checked
        --  for language independent features: Object_Directory,
!       --  Source_Directories, Library, non empty Naming Suffixs.
  
        Checked : Boolean := False;
        --  A flag to avoid checking repetitively the naming scheme of
!       --  this project file.
!       --  Set by Prj.Nmsc.Check_Naming_Scheme.
  
!       Seen  : Boolean := False;
!       Flag1 : Boolean := False;
!       Flag2 : Boolean := False;
!       --  Various flags that are used in an ad hoc manner
!       --  That's really not a good enough comment ??? we need to know what
!       --  these flags are used for, and give them proper names. If Flag1
!       --  and Flag2 have multiple uses, then either we use multiple fields
!       --  or a renaming scheme.
  
        Depth : Natural := 0;
        --  The maximum depth of a project in the project graph.
--- 758,776 ----
        Language_Independent_Checked : Boolean := False;
        --  A flag that indicates that the project file has been checked
        --  for language independent features: Object_Directory,
!       --  Source_Directories, Library, non empty Naming Suffixes.
  
        Checked : Boolean := False;
        --  A flag to avoid checking repetitively the naming scheme of
!       --  this project file. Set by Prj.Nmsc.Check_Ada_Naming_Scheme.
  
!       Seen                           : Boolean := False;
!       --  A flag to mark a project as "visited" to avoid processing the same
!       --  project several time.
! 
!       Need_To_Build_Lib : Boolean := False;
!       --  Indicates that the library of a Library Project needs to be built or
!       --  rebuilt.
  
        Depth : Natural := 0;
        --  The maximum depth of a project in the project graph.
*************** package Prj is
*** 560,567 ****
  
     end record;
  
     function Empty_Project return Project_Data;
!    --  Return the representation of an empty project.
  
     package Projects is new Table.Table (
       Table_Component_Type => Project_Data,
--- 782,830 ----
  
     end record;
  
+    function Is_Present
+      (Language   : Language_Index;
+       In_Project : Project_Data) return Boolean;
+    --  Return True when Language is one of the languages used in
+    --  project Project.
+ 
+    procedure Set
+      (Language   : Language_Index;
+       Present    : Boolean;
+       In_Project : in out Project_Data);
+    --  Indicate if Language is or not a language used in project Project
+ 
+    function Language_Processing_Data_Of
+      (Language   : Language_Index;
+       In_Project : Project_Data) return Language_Processing_Data;
+    --  Return the Language_Processing_Data for language Language in project
+    --  In_Project. Return the default when no Language_Processing_Data are
+    --  defined for the language.
+ 
+    procedure Set
+      (Language_Processing : Language_Processing_Data;
+       For_Language        : Language_Index;
+       In_Project          : in out Project_Data);
+    --  Set the Language_Processing_Data for language Language in project
+    --  In_Project.
+ 
+    function Suffix_Of
+      (Language   : Language_Index;
+       In_Project : Project_Data) return Name_Id;
+    --  Return the suffix for language Language in project In_Project. Return
+    --  No_Name when no suffix is defined for the language.
+ 
+    procedure Set
+      (Suffix       : Name_Id;
+       For_Language : Language_Index;
+       In_Project   : in out Project_Data);
+    --  Set the suffix for language Language in project In_Project
+ 
+    Project_Error : exception;
+    --  Raised by some subprograms in Prj.Attr.
+ 
     function Empty_Project return Project_Data;
!    --  Return the representation of an empty project
  
     package Projects is new Table.Table (
       Table_Component_Type => Project_Data,
*************** package Prj is
*** 570,581 ****
       Table_Initial        => 100,
       Table_Increment      => 100,
       Table_Name           => "Prj.Projects");
!    --  The set of all project files.
  
     type Put_Line_Access is access procedure
       (Line    : String;
        Project : Project_Id);
!    --  Use to customize error reporting in Prj.Proc and Prj.Nmsc.
  
     procedure Expect (The_Token : Token_Type; Token_Image : String);
     --  Check that the current token is The_Token. If it is not, then
--- 833,844 ----
       Table_Initial        => 100,
       Table_Increment      => 100,
       Table_Name           => "Prj.Projects");
!    --  The set of all project files
  
     type Put_Line_Access is access procedure
       (Line    : String;
        Project : Project_Id);
!    --  Use to customize error reporting in Prj.Proc and Prj.Nmsc
  
     procedure Expect (The_Token : Token_Type; Token_Image : String);
     --  Check that the current token is The_Token. If it is not, then
*************** package Prj is
*** 590,599 ****
     --  project file tree. Initialize must be called before the call to Reset.
  
     procedure Register_Default_Naming_Scheme
!      (Language : Name_Id;
        Default_Spec_Suffix : Name_Id;
        Default_Body_Suffix : Name_Id);
!    --  Register the default suffixs for a given language. These extensions
     --  will be ignored if the user has specified a new naming scheme in a
     --  project file.
     --
--- 853,862 ----
     --  project file tree. Initialize must be called before the call to Reset.
  
     procedure Register_Default_Naming_Scheme
!      (Language            : Name_Id;
        Default_Spec_Suffix : Name_Id;
        Default_Body_Suffix : Name_Id);
!    --  Register the default suffixes for a given language. These extensions
     --  will be ignored if the user has specified a new naming scheme in a
     --  project file.
     --
*************** package Prj is
*** 617,622 ****
--- 880,886 ----
  private
  
     Initial_Buffer_Size : constant := 100;
+    --  Initial size for extensible buffer used below
  
     Buffer : String_Access := new String (1 .. Initial_Buffer_Size);
     --  An extensible character buffer to store names. Used in Prj.Part and
diff -Nrcpad gcc-3.4.3/gcc/ada/raise.c gcc-4.0.0/gcc/ada/raise.c
*** gcc-3.4.3/gcc/ada/raise.c	Tue Nov  4 12:51:46 2003
--- gcc-4.0.0/gcc/ada/raise.c	Fri Nov 19 10:54:52 2004
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *             Copyright (C) 1992-2003, Free Software Foundation, Inc.      *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *             Copyright (C) 1992-2004, Free Software Foundation, Inc.      *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
*************** db_accepted_codes (void)
*** 152,158 ****
  
    if (accepted_codes == -1)
      {
!       char * db_env = getenv ("EH_DEBUG");
  
        accepted_codes = db_env ? (atoi (db_env) | DB_ERR) : 0;
        /* Arranged for ERR stuff to always be visible when the variable
--- 152,158 ----
  
    if (accepted_codes == -1)
      {
!       char * db_env = (char *) getenv ("EH_DEBUG");
  
        accepted_codes = db_env ? (atoi (db_env) | DB_ERR) : 0;
        /* Arranged for ERR stuff to always be visible when the variable
*************** db_phases (int phases)
*** 467,513 ****
  */
  
  
! /* This is the structure of exception objects as built by the GNAT runtime
!    library (a-exexpr.adb). The layouts should exactly match, and the "common"
!    header is mandated by the exception handling ABI.  */
  
  typedef struct
  {
    _Unwind_Exception common;
    /* ABI header, maximally aligned. */
- 
-   _Unwind_Ptr id;
-   /* Id of the exception beeing propagated, filled by Propagate_Exception.
- 
-      This is compared against the ttype entries associated with actions in the
-      examined context to see if one of these actions matches.  */
- 
-   bool handled_by_others;
-   /* Indicates wether a "when others" may catch this exception, also filled by
-      Propagate_Exception.
- 
-      This is used to decide if a GNAT_OTHERS ttype entry matches.  */
- 
-   int  n_cleanups_to_trigger;
-   /* Number of cleanups on the propagation way for the occurrence. This is
-      initialized to 0 by Propagate_Exception and computed by the personality
-      routine during the first phase of the propagation (incremented for each
-      context in which only cleanup actions match).
- 
-      This is used by Propagate_Exception when the occurrence is not handled,
-      to control a forced unwinding phase aimed at triggering all the cleanups
-      before calling Unhandled_Exception_Terminate.
- 
-      This is also used by __gnat_eh_personality to identify the point at which
-      the notification routine shall be called for a handled occurrence.  */
  } _GNAT_Exception;
  
  /* The two constants below are specific ttype identifiers for special
!    exception ids. Their value is currently hardcoded at the gigi level
!    (see N_Exception_Handler).  */
  
! #define GNAT_OTHERS      ((_Unwind_Ptr) 0x0)
! #define GNAT_ALL_OTHERS  ((_Unwind_Ptr) 0x1)
  
  /* Describe the useful region data associated with an unwind context.  */
  
--- 467,492 ----
  */
  
  
! /* This is an incomplete "proxy" of the structure of exception objects as
!    built by the GNAT runtime library. Accesses to other fields than the common
!    header are performed through subprogram calls to aleviate the need of an
!    exact counterpart here and potential alignment/size issues for the common
!    header. See a-exexpr.adb.  */
  
  typedef struct
  {
    _Unwind_Exception common;
    /* ABI header, maximally aligned. */
  } _GNAT_Exception;
  
  /* The two constants below are specific ttype identifiers for special
!    exception ids.  Their type should match what a-exexpr exports.  */
  
! extern const int __gnat_others_value;
! #define GNAT_OTHERS      ((_Unwind_Ptr) &__gnat_others_value)
! 
! extern const int __gnat_all_others_value;
! #define GNAT_ALL_OTHERS  ((_Unwind_Ptr) &__gnat_all_others_value)
  
  /* Describe the useful region data associated with an unwind context.  */
  
*************** db_action_for (action_descriptor *action
*** 677,683 ****
       {
       case unknown:
         db (DB_ACTIONS, "lpad @ 0x%x, record @ 0x%x\n",
! 	   ip, action->landing_pad, action->table_entry);
         break;
  
       case nothing:
--- 656,662 ----
       {
       case unknown:
         db (DB_ACTIONS, "lpad @ 0x%x, record @ 0x%x\n",
! 	   action->landing_pad, action->table_entry);
         break;
  
       case nothing:
*************** get_call_site_action_for (_Unwind_Contex
*** 846,851 ****
--- 825,888 ----
  
  #endif
  
+ /* With CHOICE an exception choice representing an "exception - when"
+    argument, and PROPAGATED_EXCEPTION a pointer to the currently propagated
+    occurrence, return true iif the latter matches the former, that is, if
+    PROPAGATED_EXCEPTION is caught by the handling code controlled by CHOICE.
+    This takes care of the special Non_Ada_Error case on VMS.  */
+ 
+ #define Is_Handled_By_Others  __gnat_is_handled_by_others
+ #define Language_For          __gnat_language_for
+ #define Import_Code_For       __gnat_import_code_for
+ #define EID_For               __gnat_eid_for
+ #define Adjust_N_Cleanups_For __gnat_adjust_n_cleanups_for
+ 
+ extern bool Is_Handled_By_Others (_Unwind_Ptr eid);
+ extern char Language_For (_Unwind_Ptr eid);
+ 
+ extern Exception_Code Import_Code_For (_Unwind_Ptr eid);
+ 
+ extern Exception_Id EID_For (_GNAT_Exception * e);
+ extern void Adjust_N_Cleanups_For (_GNAT_Exception * e, int n);
+ 
+ static int
+ is_handled_by (_Unwind_Ptr choice, _GNAT_Exception * propagated_exception)
+ {
+   /* Pointer to the GNAT exception data corresponding to the propagated
+      occurrence.  */
+   _Unwind_Ptr E = (_Unwind_Ptr) EID_For (propagated_exception);
+ 
+   /* Base matching rules: An exception data (id) matches itself, "when
+      all_others" matches anything and "when others" matches anything unless
+      explicitely stated otherwise in the propagated occurrence.  */
+ 
+   bool is_handled =
+     choice == E
+     || choice == GNAT_ALL_OTHERS
+     || (choice == GNAT_OTHERS && Is_Handled_By_Others (E));
+ 
+   /* In addition, on OpenVMS, Non_Ada_Error matches VMS exceptions, and we
+      may have different exception data pointers that should match for the
+      same condition code, if both an export and an import have been
+      registered.  The import code for both the choice and the propagated
+      occurrence are expected to have been masked off regarding severity
+      bits already (at registration time for the former and from within the
+      low level exception vector for the latter).  */
+ #ifdef VMS
+   #define Non_Ada_Error system__aux_dec__non_ada_error
+   extern struct Exception_Data Non_Ada_Error;
+ 
+   is_handled |=
+     (Language_For (E) == 'V'
+      && choice != GNAT_OTHERS && choice != GNAT_ALL_OTHERS
+      && ((Language_For (choice) == 'V' && Import_Code_For (choice) != 0
+ 	  && Import_Code_For (choice) == Import_Code_For (E))
+ 	 || choice == (_Unwind_Ptr)&Non_Ada_Error));
+ #endif
+ 
+   return is_handled;
+ }
+ 
  /* Fill out the ACTION to be taken from propagating UW_EXCEPTION up to
     UW_CONTEXT in REGION.  */
  
*************** get_action_description_for (_Unwind_Cont
*** 907,920 ****
  	    {
  	      /* See if the filter we have is for an exception which matches
  		 the one we are propagating.  */
! 	      _Unwind_Ptr eid = get_ttype_entry_for (region, ar_filter);
  
! 	      if (eid == gnat_exception->id
! 		  || eid == GNAT_ALL_OTHERS
! 		  || (eid == GNAT_OTHERS && gnat_exception->handled_by_others))
  		{
  		  action->ttype_filter = ar_filter;
! 		  action->ttype_entry = eid;
  		  action->kind = handler;
  		  return;
  		}
--- 944,955 ----
  	    {
  	      /* See if the filter we have is for an exception which matches
  		 the one we are propagating.  */
! 	      _Unwind_Ptr choice = get_ttype_entry_for (region, ar_filter);
  
! 	      if (is_handled_by (choice, gnat_exception))
  		{
  		  action->ttype_filter = ar_filter;
! 		  action->ttype_entry = choice;
  		  action->kind = handler;
  		  return;
  		}
*************** __gnat_eh_personality (int uw_version,
*** 1021,1027 ****
      {
        if (action.kind == cleanup)
  	{
! 	  gnat_exception->n_cleanups_to_trigger ++;
  	  return _URC_CONTINUE_UNWIND;
  	}
        else
--- 1056,1062 ----
      {
        if (action.kind == cleanup)
  	{
! 	  Adjust_N_Cleanups_For (gnat_exception, 1);
  	  return _URC_CONTINUE_UNWIND;
  	}
        else
*************** __gnat_eh_personality (int uw_version,
*** 1045,1051 ****
       Ada.Exceptions.Exception_Propagation to decide wether unwinding should
       proceed further or Unhandled_Exception_Terminate should be called.  */
    if (action.kind == cleanup)
!     gnat_exception->n_cleanups_to_trigger --;
  
    setup_to_install
      (uw_context, uw_exception, action.landing_pad, action.ttype_filter);
--- 1080,1086 ----
       Ada.Exceptions.Exception_Propagation to decide wether unwinding should
       proceed further or Unhandled_Exception_Terminate should be called.  */
    if (action.kind == cleanup)
!     Adjust_N_Cleanups_For (gnat_exception, -1);
  
    setup_to_install
      (uw_context, uw_exception, action.landing_pad, action.ttype_filter);
*************** __gnat_Unwind_ForcedUnwind (_Unwind_Exce
*** 1107,1112 ****
--- 1142,1150 ----
     be using the GCC eh mechanism for the compiler, however, so expect these
     functions never to be called.  */
  
+ /* We don't want fancy_abort here.  */
+ #undef abort
+ 
  _Unwind_Reason_Code
  __gnat_Unwind_RaiseException (_Unwind_Exception *e ATTRIBUTE_UNUSED)
  {
diff -Nrcpad gcc-3.4.3/gcc/ada/raise.h gcc-4.0.0/gcc/ada/raise.h
*** gcc-3.4.3/gcc/ada/raise.h	Fri Oct 24 13:02:42 2003
--- gcc-4.0.0/gcc/ada/raise.h	Thu Feb 10 13:54:45 2005
***************
*** 6,12 ****
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 1992-2003, Free Software Foundation, Inc.         *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
--- 6,12 ----
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 1992-2005, Free Software Foundation, Inc.         *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
***************
*** 30,42 ****
   *                                                                          *
   ****************************************************************************/
  
  struct Exception_Data
  {
    char  Handled_By_Others;
    char Lang;
    int Name_Length;
    char *Full_Name, Htable_Ptr;
!   int Import_Code;
  };
  
  typedef struct Exception_Data *Exception_Id;
--- 30,46 ----
   *                                                                          *
   ****************************************************************************/
  
+ 
+ typedef unsigned Exception_Code;
+ /* C counterpart of what System.Standard_Library defines.  */
+ 
  struct Exception_Data
  {
    char  Handled_By_Others;
    char Lang;
    int Name_Length;
    char *Full_Name, Htable_Ptr;
!   Exception_Code Import_Code;
  };
  
  typedef struct Exception_Data *Exception_Id;
*************** extern void set_gnat_exit_status	(int);
*** 61,69 ****
  extern void __gnat_set_globals		(int, int,
  						 char, char, char, char,
  						 char *, char *,
! 						 int, int, int, int);
! extern void __gnat_initialize		(void);
  extern void __gnat_init_float		(void);
  extern void __gnat_install_handler	(void);
  
  extern int gnat_exit_status;
--- 65,74 ----
  extern void __gnat_set_globals		(int, int,
  						 char, char, char, char,
  						 char *, char *,
! 						 int, int, int, int, int);
! extern void __gnat_initialize		(void *);
  extern void __gnat_init_float		(void);
  extern void __gnat_install_handler	(void);
+ extern void __gnat_install_SEH_handler  (void *);
  
  extern int gnat_exit_status;
diff -Nrcpad gcc-3.4.3/gcc/ada/repinfo.adb gcc-4.0.0/gcc/ada/repinfo.adb
*** gcc-3.4.3/gcc/ada/repinfo.adb	Tue Oct 21 13:42:13 2003
--- gcc-4.0.0/gcc/ada/repinfo.adb	Wed Dec  8 11:26:04 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1999-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1999-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 31,52 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Alloc;    use Alloc;
! with Atree;    use Atree;
! with Casing;   use Casing;
! with Debug;    use Debug;
! with Einfo;    use Einfo;
! with Lib;      use Lib;
! with Namet;    use Namet;
! with Opt;      use Opt;
! with Output;   use Output;
! with Sinfo;    use Sinfo;
! with Sinput;   use Sinput;
! with Snames;   use Snames;
! with Stand;    use Stand;
! with Table;    use Table;
! with Uname;    use Uname;
! with Urealp;   use Urealp;
  
  package body Repinfo is
  
--- 31,52 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Alloc;  use Alloc;
! with Atree;  use Atree;
! with Casing; use Casing;
! with Debug;  use Debug;
! with Einfo;  use Einfo;
! with Lib;    use Lib;
! with Namet;  use Namet;
! with Opt;    use Opt;
! with Output; use Output;
! with Sinfo;  use Sinfo;
! with Sinput; use Sinput;
! with Snames; use Snames;
! with Stand;  use Stand;
! with Table;  use Table;
! with Uname;  use Uname;
! with Urealp; use Urealp;
  
  package body Repinfo is
  
*************** package body Repinfo is
*** 199,211 ****
     -- Create_Discrim_Ref --
     ------------------------
  
!    function Create_Discrim_Ref
!      (Discr : Entity_Id)
!       return  Node_Ref
!    is
        N : constant Uint := Discriminant_Number (Discr);
        T : Nat;
- 
     begin
        Rep_Table.Increment_Last;
        T := Rep_Table.Last;
--- 199,207 ----
     -- Create_Discrim_Ref --
     ------------------------
  
!    function Create_Discrim_Ref (Discr : Entity_Id) return Node_Ref is
        N : constant Uint := Discriminant_Number (Discr);
        T : Nat;
     begin
        Rep_Table.Increment_Last;
        T := Rep_Table.Last;
*************** package body Repinfo is
*** 220,231 ****
     -- Create_Dynamic_SO_Ref --
     ---------------------------
  
!    function Create_Dynamic_SO_Ref
!      (E    : Entity_Id)
!       return Dynamic_SO_Ref
!    is
        T : Nat;
- 
     begin
        Dynamic_SO_Entity_Table.Increment_Last;
        T := Dynamic_SO_Entity_Table.Last;
--- 216,223 ----
     -- Create_Dynamic_SO_Ref --
     ---------------------------
  
!    function Create_Dynamic_SO_Ref (E : Entity_Id) return Dynamic_SO_Ref is
        T : Nat;
     begin
        Dynamic_SO_Entity_Table.Increment_Last;
        T := Dynamic_SO_Entity_Table.Last;
*************** package body Repinfo is
*** 241,251 ****
       (Expr : TCode;
        Op1  : Node_Ref_Or_Val;
        Op2  : Node_Ref_Or_Val := No_Uint;
!       Op3  : Node_Ref_Or_Val := No_Uint)
!       return  Node_Ref
     is
        T : Nat;
- 
     begin
        Rep_Table.Increment_Last;
        T := Rep_Table.Last;
--- 233,241 ----
       (Expr : TCode;
        Op1  : Node_Ref_Or_Val;
        Op2  : Node_Ref_Or_Val := No_Uint;
!       Op3  : Node_Ref_Or_Val := No_Uint) return Node_Ref
     is
        T : Nat;
     begin
        Rep_Table.Increment_Last;
        T := Rep_Table.Last;
*************** package body Repinfo is
*** 253,259 ****
        Rep_Table.Table (T).Op1  := Op1;
        Rep_Table.Table (T).Op2  := Op2;
        Rep_Table.Table (T).Op3  := Op3;
- 
        return UI_From_Int (-T);
     end Create_Node;
  
--- 243,248 ----
*************** package body Repinfo is
*** 261,270 ****
     -- Get_Dynamic_SO_Entity --
     ---------------------------
  
!    function Get_Dynamic_SO_Entity
!      (U    : Dynamic_SO_Ref)
!       return Entity_Id
!    is
     begin
        return Dynamic_SO_Entity_Table.Table (-UI_To_Int (U));
     end Get_Dynamic_SO_Entity;
--- 250,256 ----
     -- Get_Dynamic_SO_Entity --
     ---------------------------
  
!    function Get_Dynamic_SO_Entity (U : Dynamic_SO_Ref) return Entity_Id is
     begin
        return Dynamic_SO_Entity_Table.Table (-UI_To_Int (U));
     end Get_Dynamic_SO_Entity;
*************** package body Repinfo is
*** 304,310 ****
     procedure List_Array_Info (Ent : Entity_Id) is
     begin
        List_Type_Info (Ent);
- 
        Write_Str ("for ");
        List_Name (Ent);
        Write_Str ("'Component_Size use ");
--- 290,295 ----
*************** package body Repinfo is
*** 330,338 ****
  
        function Find_Declaration (E : Entity_Id) return Node_Id is
           Decl : Node_Id;
        begin
           Decl := Parent (E);
- 
           while Present (Decl)
             and then  Nkind (Decl) /= N_Package_Body
             and then Nkind (Decl) /= N_Subprogram_Declaration
--- 315,323 ----
  
        function Find_Declaration (E : Entity_Id) return Node_Id is
           Decl : Node_Id;
+ 
        begin
           Decl := Parent (E);
           while Present (Decl)
             and then  Nkind (Decl) /= N_Package_Body
             and then Nkind (Decl) /= N_Subprogram_Declaration
*************** package body Repinfo is
*** 972,982 ****
        Col : Nat;
  
     begin
-       if Debug_Flag_AA then
-          List_Representation_Info := 3;
-          List_Representation_Info_Mechanisms := True;
-       end if;
- 
        if List_Representation_Info /= 0
          or else List_Representation_Info_Mechanisms
        then
--- 957,962 ----
*************** package body Repinfo is
*** 1094,1102 ****
     ---------------
  
     function Rep_Value
!      (Val  : Node_Ref_Or_Val;
!       D    : Discrim_List)
!       return Uint
     is
        function B (Val : Boolean) return Uint;
        --  Returns Uint_0 for False, Uint_1 for True
--- 1074,1081 ----
     ---------------
  
     function Rep_Value
!      (Val : Node_Ref_Or_Val;
!       D   : Discrim_List) return Uint
     is
        function B (Val : Boolean) return Uint;
        --  Returns Uint_0 for False, Uint_1 for True
diff -Nrcpad gcc-3.4.3/gcc/ada/repinfo.ads gcc-4.0.0/gcc/ada/repinfo.ads
*** gcc-3.4.3/gcc/ada/repinfo.ads	Thu Apr 24 17:54:08 2003
--- gcc-4.0.0/gcc/ada/repinfo.ads	Mon Jan  3 15:43:23 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1999-2001 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1999-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Repinfo is
*** 73,79 ****
     -- Back-Annotation by Gigi --
     -----------------------------
  
!    --  The following interface is used by gigi if Backend_Layout is True.
  
     --  As part of the processing in gigi, the types are laid out and
     --  appropriate values computed for the sizes and component positions
--- 73,79 ----
     -- Back-Annotation by Gigi --
     -----------------------------
  
!    --  The following interface is used by gigi if Backend_Layout is True
  
     --  As part of the processing in gigi, the types are laid out and
     --  appropriate values computed for the sizes and component positions
*************** package Repinfo is
*** 177,196 ****
     --  The following declarations are for use by gigi for back annotation
  
     function Create_Node
!      (Expr  : TCode;
!       Op1   : Node_Ref_Or_Val;
!       Op2   : Node_Ref_Or_Val := No_Uint;
!       Op3   : Node_Ref_Or_Val := No_Uint)
!       return  Node_Ref;
     --  Creates a node with using the tree code defined by Expr and from
     --  1-3 operands as required (unused operands set as shown to No_Uint)
     --  Note that this call can be used to create a discriminant reference
     --  by using (Expr => Discrim_Val, Op1 => discriminant_number).
  
!    function Create_Discrim_Ref
!      (Discr : Entity_Id)
!       return  Node_Ref;
!    --  Creates a refrerence to the discriminant whose entity is Discr.
  
     --------------------------------------------------------
     -- Front-End Interface for Dynamic Size/Offset Values --
--- 177,193 ----
     --  The following declarations are for use by gigi for back annotation
  
     function Create_Node
!      (Expr : TCode;
!       Op1  : Node_Ref_Or_Val;
!       Op2  : Node_Ref_Or_Val := No_Uint;
!       Op3  : Node_Ref_Or_Val := No_Uint) return Node_Ref;
     --  Creates a node with using the tree code defined by Expr and from
     --  1-3 operands as required (unused operands set as shown to No_Uint)
     --  Note that this call can be used to create a discriminant reference
     --  by using (Expr => Discrim_Val, Op1 => discriminant_number).
  
!    function Create_Discrim_Ref (Discr : Entity_Id) return Node_Ref;
!    --  Creates a refrerence to the discriminant whose entity is Discr
  
     --------------------------------------------------------
     -- Front-End Interface for Dynamic Size/Offset Values --
*************** package Repinfo is
*** 249,265 ****
     --  Given a SO_Ref (Uint) value, returns True iff the SO_Ref value
     --  represents a static Size/Offset value (i.e. it is non-negative).
  
!    function Create_Dynamic_SO_Ref
!      (E    : Entity_Id)
!       return Dynamic_SO_Ref;
     --  Given the Entity_Id for a constant (case 1), the Node_Id for an
     --  expression (case 2), or the Entity_Id for a function (case 3),
     --  this function returns a (negative) Uint value that can be used
     --  to retrieve the entity or expression for later use.
  
!    function Get_Dynamic_SO_Entity
!      (U    : Dynamic_SO_Ref)
!       return Entity_Id;
     --  Retrieve the Node_Id or Entity_Id stored by a previous call to
     --  Create_Dynamic_SO_Ref. The approach is that the front end makes
     --  the necessary Create_Dynamic_SO_Ref calls to associate the node
--- 246,258 ----
     --  Given a SO_Ref (Uint) value, returns True iff the SO_Ref value
     --  represents a static Size/Offset value (i.e. it is non-negative).
  
!    function Create_Dynamic_SO_Ref (E : Entity_Id) return Dynamic_SO_Ref;
     --  Given the Entity_Id for a constant (case 1), the Node_Id for an
     --  expression (case 2), or the Entity_Id for a function (case 3),
     --  this function returns a (negative) Uint value that can be used
     --  to retrieve the entity or expression for later use.
  
!    function Get_Dynamic_SO_Entity (U : Dynamic_SO_Ref) return Entity_Id;
     --  Retrieve the Node_Id or Entity_Id stored by a previous call to
     --  Create_Dynamic_SO_Ref. The approach is that the front end makes
     --  the necessary Create_Dynamic_SO_Ref calls to associate the node
*************** package Repinfo is
*** 274,282 ****
     --  Type used to represent list of discriminant values
  
     function Rep_Value
!      (Val  : Node_Ref_Or_Val;
!       D    : Discrim_List)
!       return Uint;
     --  Given the contents of a First_Bit_Position or Esize field containing
     --  a node reference (i.e. a negative Uint value) and D, the list of
     --  discriminant values, returns the interpreted value of this field.
--- 267,274 ----
     --  Type used to represent list of discriminant values
  
     function Rep_Value
!      (Val : Node_Ref_Or_Val;
!       D   : Discrim_List) return Uint;
     --  Given the contents of a First_Bit_Position or Esize field containing
     --  a node reference (i.e. a negative Uint value) and D, the list of
     --  discriminant values, returns the interpreted value of this field.
*************** package Repinfo is
*** 285,291 ****
     --  also returned unmodified.
  
     procedure Tree_Read;
!    --  Read in the value of the Rep_Table
  
     ------------------------
     -- Compiler Interface --
--- 277,284 ----
     --  also returned unmodified.
  
     procedure Tree_Read;
!    --  Initializes internal tables from current tree file using the relevant
!    --  Table.Tree_Read routines.
  
     ------------------------
     -- Compiler Interface --
*************** package Repinfo is
*** 295,301 ****
     --  Procedure to list representation information
  
     procedure Tree_Write;
!    --  Write out the value of the Rep_Table
  
     --------------------------
     -- Debugging Procedures --
--- 288,295 ----
     --  Procedure to list representation information
  
     procedure Tree_Write;
!    --  Writes out internal tables to current tree file using the relevant
!    --  Table.Tree_Write routines.
  
     --------------------------
     -- Debugging Procedures --
diff -Nrcpad gcc-3.4.3/gcc/ada/restrict.adb gcc-4.0.0/gcc/ada/restrict.adb
*** gcc-3.4.3/gcc/ada/restrict.adb	Tue Oct 21 13:42:13 2003
--- gcc-4.0.0/gcc/ada/restrict.adb	Mon Jan  3 15:32:17 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Fname;    use Fname;
*** 31,41 ****
--- 31,54 ----
  with Fname.UF; use Fname.UF;
  with Lib;      use Lib;
  with Namet;    use Namet;
+ with Opt;      use Opt;
+ with Sinfo;    use Sinfo;
  with Sinput;   use Sinput;
+ with Snames;   use Snames;
  with Uname;    use Uname;
  
  package body Restrict is
  
+    Restricted_Profile_Result : Boolean := False;
+    --  This switch memoizes the result of Restricted_Profile function
+    --  calls for improved efficiency. Its setting is valid only if
+    --  Restricted_Profile_Cached is True. Note that if this switch
+    --  is ever set True, it need never be turned off again.
+ 
+    Restricted_Profile_Cached : Boolean := False;
+    --  This flag is set to True if the Restricted_Profile_Result
+    --  contains the correct cached result of Restricted_Profile calls.
+ 
     -----------------------
     -- Local Subprograms --
     -----------------------
*************** package body Restrict is
*** 48,53 ****
--- 61,70 ----
     --  in the Names table, and this table will be locked if we are
     --  generating a message from gigi.
  
+    function Same_Unit (U1, U2 : Node_Id) return Boolean;
+    --  Returns True iff U1 and U2 represent the same library unit. Used for
+    --  handling of No_Dependence => Unit restriction case.
+ 
     function Suppress_Restriction_Message (N : Node_Id) return Boolean;
     --  N is the node for a possible restriction violation message, but
     --  the message is to be suppressed if this is an internal file and
*************** package body Restrict is
*** 59,69 ****
  
     function Abort_Allowed return Boolean is
     begin
!       if Restrictions (No_Abort_Statements)
!         and then Restriction_Parameters (Max_Asynchronous_Select_Nesting) = 0
        then
           return False;
- 
        else
           return True;
        end if;
--- 76,86 ----
  
     function Abort_Allowed return Boolean is
     begin
!       if Restrictions.Set (No_Abort_Statements)
!         and then Restrictions.Set (Max_Asynchronous_Select_Nesting)
!         and then Restrictions.Value (Max_Asynchronous_Select_Nesting) = 0
        then
           return False;
        else
           return True;
        end if;
*************** package body Restrict is
*** 79,85 ****
        --  Even in the error case it is a bit dubious, either gigi needs
        --  the table locked or it does not! ???
  
!       if Restrictions (No_Elaboration_Code)
          and then not Suppress_Restriction_Message (N)
        then
           Namet.Unlock;
--- 96,102 ----
        --  Even in the error case it is a bit dubious, either gigi needs
        --  the table locked or it does not! ???
  
!       if Restrictions.Set (No_Elaboration_Code)
          and then not Suppress_Restriction_Message (N)
        then
           Namet.Unlock;
*************** package body Restrict is
*** 110,122 ****
           declare
              Fnam : constant File_Name_Type :=
                       Get_File_Name (U, Subunit => False);
-             R_Id : Restriction_Id;
  
           begin
              if not Is_Predefined_File_Name (Fnam) then
                 return;
  
!             --  Ada child unit spec, needs checking against list
  
              else
                 --  Pad name to 8 characters with blanks
--- 127,138 ----
           declare
              Fnam : constant File_Name_Type :=
                       Get_File_Name (U, Subunit => False);
  
           begin
              if not Is_Predefined_File_Name (Fnam) then
                 return;
  
!             --  Predefined spec, needs checking against list
  
              else
                 --  Pad name to 8 characters with blanks
*************** package body Restrict is
*** 133,162 ****
                    if Name_Len = 8
                      and then Name_Buffer (1 .. 8) = Unit_Array (J).Filenm
                    then
!                      R_Id := Unit_Array (J).Res_Id;
!                      Violations (R_Id) := True;
! 
!                      if Restrictions (R_Id) then
!                         declare
!                            S : constant String := Restriction_Id'Image (R_Id);
! 
!                         begin
!                            Error_Msg_Unit_1 := U;
! 
!                            Error_Msg_N
!                              ("|dependence on $ not allowed,", N);
! 
!                            Name_Buffer (1 .. S'Last) := S;
!                            Name_Len := S'Length;
!                            Set_Casing (All_Lower_Case);
!                            Error_Msg_Name_1 := Name_Enter;
!                            Error_Msg_Sloc := Restrictions_Loc (R_Id);
! 
!                            Error_Msg_N
!                              ("\|violates pragma Restriction (%) #", N);
!                            return;
!                         end;
!                      end if;
                    end if;
                 end loop;
              end if;
--- 149,155 ----
                    if Name_Len = 8
                      and then Name_Buffer (1 .. 8) = Unit_Array (J).Filenm
                    then
!                      Check_Restriction (Unit_Array (J).Res_Id, N);
                    end if;
                 end loop;
              end if;
*************** package body Restrict is
*** 168,387 ****
     -- Check_Restriction --
     -----------------------
  
!    --  Case of simple identifier (no parameter)
! 
!    procedure Check_Restriction (R : Restriction_Id; N : Node_Id) is
        Rimage : constant String := Restriction_Id'Image (R);
  
!    begin
!       Violations (R) := True;
  
!       if (Restrictions (R) or Restriction_Warnings (R))
!         and then not Suppress_Restriction_Message (N)
!       then
!          --  Output proper message. If this is just a case of
!          --  a restriction warning, then we output a warning msg
  
!          if not Restrictions (R) then
!             Restriction_Msg
!               ("?violation of restriction %", Rimage, N);
  
!          --  If this is a real restriction violation, then generate
!          --  a non-serious message with appropriate location.
  
!          else
!             Error_Msg_Sloc := Restrictions_Loc (R);
  
!             --  If we have a location for the Restrictions pragma, output it
  
!             if Error_Msg_Sloc > No_Location
!               or else Error_Msg_Sloc = System_Location
!             then
!                Restriction_Msg
!                  ("|violation of restriction %#", Rimage, N);
  
!             --  Otherwise restriction was implicit (e.g. set by another pragma)
  
              else
!                Restriction_Msg
!                  ("|violation of implicit restriction %", Rimage, N);
              end if;
           end if;
!       end if;
!    end Check_Restriction;
  
!    --  Case where a parameter is present, with a count
  
-    procedure Check_Restriction
-      (R : Restriction_Parameter_Id;
-       V : Uint;
-       N : Node_Id)
-    is
     begin
!       if Restriction_Parameters (R) /= No_Uint
!         and then V > Restriction_Parameters (R)
!         and then not Suppress_Restriction_Message (N)
        then
!          declare
!             S : constant String := Restriction_Parameter_Id'Image (R);
!          begin
!             Name_Buffer (1 .. S'Last) := S;
!             Name_Len := S'Length;
!             Set_Casing (All_Lower_Case);
!             Error_Msg_Name_1 := Name_Enter;
!             Error_Msg_Sloc := Restriction_Parameters_Loc (R);
!             Error_Msg_N ("|maximum value exceeded for restriction %#", N);
!          end;
        end if;
-    end Check_Restriction;
  
!    --  Case where a parameter is present, no count given
  
!    procedure Check_Restriction
!      (R : Restriction_Parameter_Id;
!       N : Node_Id)
!    is
!    begin
!       if Restriction_Parameters (R) = Uint_0
!         and then not Suppress_Restriction_Message (N)
        then
!          declare
!             S : constant String := Restriction_Parameter_Id'Image (R);
!          begin
!             Name_Buffer (1 .. S'Last) := S;
!             Name_Len := S'Length;
!             Set_Casing (All_Lower_Case);
!             Error_Msg_Name_1 := Name_Enter;
!             Error_Msg_Sloc := Restriction_Parameters_Loc (R);
!             Error_Msg_N ("|maximum value exceeded for restriction %#", N);
!          end;
        end if;
     end Check_Restriction;
  
!    -------------------------------------------
!    -- Compilation_Unit_Restrictions_Restore --
!    -------------------------------------------
  
-    procedure Compilation_Unit_Restrictions_Restore
-      (R : Save_Compilation_Unit_Restrictions)
-    is
     begin
!       for J in Compilation_Unit_Restrictions loop
!          Restrictions (J) := R (J);
        end loop;
!    end Compilation_Unit_Restrictions_Restore;
  
     ----------------------------------------
!    -- Compilation_Unit_Restrictions_Save --
     ----------------------------------------
  
!    function Compilation_Unit_Restrictions_Save
!      return Save_Compilation_Unit_Restrictions
     is
!       R : Save_Compilation_Unit_Restrictions;
  
     begin
!       for J in Compilation_Unit_Restrictions loop
!          R (J) := Restrictions (J);
!          Restrictions (J) := False;
        end loop;
  
        return R;
!    end Compilation_Unit_Restrictions_Save;
  
     ------------------------
     -- Get_Restriction_Id --
     ------------------------
  
     function Get_Restriction_Id
!      (N    : Name_Id)
!       return Restriction_Id
     is
-       J : Restriction_Id;
- 
     begin
        Get_Name_String (N);
        Set_Casing (All_Upper_Case);
  
!       J := Restriction_Id'First;
!       while J /= Not_A_Restriction_Id loop
           declare
              S : constant String := Restriction_Id'Image (J);
- 
           begin
!             exit when S = Name_Buffer (1 .. Name_Len);
           end;
- 
-          J := Restriction_Id'Succ (J);
        end loop;
  
!       return J;
     end Get_Restriction_Id;
  
     ----------------------------------
!    -- Get_Restriction_Parameter_Id --
     ----------------------------------
  
!    function Get_Restriction_Parameter_Id
!      (N    : Name_Id)
!       return Restriction_Parameter_Id
     is
!       J : Restriction_Parameter_Id;
  
     begin
!       Get_Name_String (N);
!       Set_Casing (All_Upper_Case);
  
!       J := Restriction_Parameter_Id'First;
!       while J /= Not_A_Restriction_Parameter_Id loop
!          declare
!             S : constant String := Restriction_Parameter_Id'Image (J);
  
!          begin
!             exit when S = Name_Buffer (1 .. Name_Len);
!          end;
  
!          J := Restriction_Parameter_Id'Succ (J);
!       end loop;
  
!       return J;
!    end Get_Restriction_Parameter_Id;
  
!    -------------------------------
!    -- No_Exception_Handlers_Set --
!    -------------------------------
  
!    function No_Exception_Handlers_Set return Boolean is
!    begin
!       return Restrictions (No_Exception_Handlers);
!    end No_Exception_Handlers_Set;
  
     ------------------------
     -- Restricted_Profile --
     ------------------------
  
-    --  This implementation must be coordinated with Set_Restricted_Profile
- 
     function Restricted_Profile return Boolean is
     begin
!       return     Restrictions (No_Abort_Statements)
!         and then Restrictions (No_Asynchronous_Control)
!         and then Restrictions (No_Entry_Queue)
!         and then Restrictions (No_Task_Hierarchy)
!         and then Restrictions (No_Task_Allocators)
!         and then Restrictions (No_Dynamic_Priorities)
!         and then Restrictions (No_Terminate_Alternatives)
!         and then Restrictions (No_Dynamic_Interrupts)
!         and then Restrictions (No_Protected_Type_Allocators)
!         and then Restrictions (No_Local_Protected_Objects)
!         and then Restrictions (No_Requeue)
!         and then Restrictions (No_Task_Attributes)
!         and then Restriction_Parameters (Max_Asynchronous_Select_Nesting) =  0
!         and then Restriction_Parameters (Max_Task_Entries)                =  0
!         and then Restriction_Parameters (Max_Protected_Entries)           <= 1
!         and then Restriction_Parameters (Max_Select_Alternatives)         =  0;
     end Restricted_Profile;
  
     ---------------------
     -- Restriction_Msg --
     ---------------------
--- 161,492 ----
     -- Check_Restriction --
     -----------------------
  
!    procedure Check_Restriction
!      (R : Restriction_Id;
!       N : Node_Id;
!       V : Uint := Uint_Minus_1)
!    is
        Rimage : constant String := Restriction_Id'Image (R);
  
!       VV : Integer;
!       --  V converted to integer form. If V is greater than Integer'Last,
!       --  it is reset to minus 1 (unknown value).
  
!       procedure Update_Restrictions (Info : in out Restrictions_Info);
!       --  Update violation information in Info.Violated and Info.Count
  
!       -------------------------
!       -- Update_Restrictions --
!       -------------------------
  
!       procedure Update_Restrictions (Info : in out Restrictions_Info) is
!       begin
!          --  If not violated, set as violated now
  
!          if not Info.Violated (R) then
!             Info.Violated (R) := True;
  
!             if R in All_Parameter_Restrictions then
!                if VV < 0 then
!                   Info.Unknown (R) := True;
!                   Info.Count (R) := 1;
!                else
!                   Info.Count (R) := VV;
!                end if;
!             end if;
  
!          --  Otherwise if violated already and a parameter restriction,
!          --  update count by maximizing or summing depending on restriction.
  
!          elsif R in All_Parameter_Restrictions then
! 
!             --  If new value is unknown, result is unknown
! 
!             if VV < 0 then
!                Info.Unknown (R) := True;
! 
!             --  If checked by maximization, do maximization
! 
!             elsif R in Checked_Max_Parameter_Restrictions then
!                Info.Count (R) := Integer'Max (Info.Count (R), VV);
! 
!             --  If checked by adding, do add, checking for overflow
! 
!             elsif R in Checked_Add_Parameter_Restrictions then
!                declare
!                   pragma Unsuppress (Overflow_Check);
!                begin
!                   Info.Count (R) := Info.Count (R) + VV;
!                exception
!                   when Constraint_Error =>
!                      Info.Count (R) := Integer'Last;
!                      Info.Unknown (R) := True;
!                end;
! 
!             --  Should not be able to come here, known counts should only
!             --  occur for restrictions that are Checked_max or Checked_Sum.
  
              else
!                raise Program_Error;
              end if;
           end if;
!       end Update_Restrictions;
  
!    --  Start of processing for Check_Restriction
  
     begin
!       if UI_Is_In_Int_Range (V) then
!          VV := Integer (UI_To_Int (V));
!       else
!          VV := -1;
!       end if;
! 
!       --  Count can only be specified in the checked val parameter case
! 
!       pragma Assert (VV < 0 or else R in Checked_Val_Parameter_Restrictions);
! 
!       --  Nothing to do if value of zero specified for parameter restriction
! 
!       if VV = 0 then
!          return;
!       end if;
! 
!       --  Update current restrictions
! 
!       Update_Restrictions (Restrictions);
! 
!       --  If in main extended unit, update main restrictions as well
! 
!       if Current_Sem_Unit = Main_Unit
!         or else In_Extended_Main_Source_Unit (N)
        then
!          Update_Restrictions (Main_Restrictions);
        end if;
  
!       --  Nothing to do if restriction message suppressed
  
!       if Suppress_Restriction_Message (N) then
!          null;
! 
!       --  If restriction not set, nothing to do
! 
!       elsif not Restrictions.Set (R) then
!          null;
! 
!       --  Here if restriction set, check for violation (either this is a
!       --  Boolean restriction, or a parameter restriction with a value of
!       --  zero and an unknown count, or a parameter restriction with a
!       --  known value that exceeds the restriction count).
! 
!       elsif R in All_Boolean_Restrictions
!         or else (Restrictions.Unknown (R)
!                    and then Restrictions.Value (R) = 0)
!         or else Restrictions.Count (R) > Restrictions.Value (R)
        then
!          Error_Msg_Sloc := Restrictions_Loc (R);
! 
!          --  If we have a location for the Restrictions pragma, output it
! 
!          if Error_Msg_Sloc > No_Location
!            or else Error_Msg_Sloc = System_Location
!          then
!             if Restriction_Warnings (R) then
!                Restriction_Msg ("|violation of restriction %#?", Rimage, N);
!             else
!                Restriction_Msg ("|violation of restriction %#", Rimage, N);
!             end if;
! 
!          --  Otherwise we have the case of an implicit restriction
!          --  (e.g. a restriction implicitly set by another pragma)
! 
!          else
!             Restriction_Msg
!               ("|violation of implicit restriction %", Rimage, N);
!          end if;
        end if;
     end Check_Restriction;
  
!    -------------------------------------
!    -- Check_Restriction_No_Dependence --
!    -------------------------------------
! 
!    procedure Check_Restriction_No_Dependence (U : Node_Id; Err : Node_Id) is
!       DU : Node_Id;
  
     begin
!       for J in No_Dependence.First .. No_Dependence.Last loop
!          DU := No_Dependence.Table (J).Unit;
! 
!          if Same_Unit (U, DU) then
!             Error_Msg_Sloc := Sloc (DU);
!             Error_Msg_Node_1 := DU;
! 
!             if No_Dependence.Table (J).Warn then
!                Error_Msg
!                  ("?violation of restriction `No_Dependence '='> &`#",
!                   Sloc (Err));
!             else
!                Error_Msg
!                  ("|violation of restriction `No_Dependence '='> &`#",
!                   Sloc (Err));
!             end if;
! 
!             return;
!          end if;
        end loop;
!    end Check_Restriction_No_Dependence;
  
     ----------------------------------------
!    -- Cunit_Boolean_Restrictions_Restore --
     ----------------------------------------
  
!    procedure Cunit_Boolean_Restrictions_Restore
!      (R : Save_Cunit_Boolean_Restrictions)
     is
!    begin
!       for J in Cunit_Boolean_Restrictions loop
!          Restrictions.Set (J) := R (J);
!       end loop;
!    end Cunit_Boolean_Restrictions_Restore;
! 
!    -------------------------------------
!    -- Cunit_Boolean_Restrictions_Save --
!    -------------------------------------
! 
!    function Cunit_Boolean_Restrictions_Save
!      return Save_Cunit_Boolean_Restrictions
!    is
!       R : Save_Cunit_Boolean_Restrictions;
  
     begin
!       for J in Cunit_Boolean_Restrictions loop
!          R (J) := Restrictions.Set (J);
!          Restrictions.Set (J) := False;
        end loop;
  
        return R;
!    end Cunit_Boolean_Restrictions_Save;
  
     ------------------------
     -- Get_Restriction_Id --
     ------------------------
  
     function Get_Restriction_Id
!      (N : Name_Id) return Restriction_Id
     is
     begin
        Get_Name_String (N);
        Set_Casing (All_Upper_Case);
  
!       for J in All_Restrictions loop
           declare
              S : constant String := Restriction_Id'Image (J);
           begin
!             if S = Name_Buffer (1 .. Name_Len) then
!                return J;
!             end if;
           end;
        end loop;
  
!       return Not_A_Restriction_Id;
     end Get_Restriction_Id;
  
+    -------------------------------
+    -- No_Exception_Handlers_Set --
+    -------------------------------
+ 
+    function No_Exception_Handlers_Set return Boolean is
+    begin
+       return Restrictions.Set (No_Exception_Handlers);
+    end No_Exception_Handlers_Set;
+ 
     ----------------------------------
!    -- Process_Restriction_Synonyms --
     ----------------------------------
  
!    --  Note: body of this function must be coordinated with list of
!    --  renaming declarations in System.Rident.
! 
!    function Process_Restriction_Synonyms (N : Node_Id) return Name_Id
     is
!       Old_Name : constant Name_Id := Chars (N);
!       New_Name : Name_Id;
  
     begin
!       case Old_Name is
!          when Name_Boolean_Entry_Barriers =>
!             New_Name := Name_Simple_Barriers;
  
!          when Name_Max_Entry_Queue_Depth =>
!             New_Name := Name_Max_Entry_Queue_Length;
  
!          when Name_No_Dynamic_Interrupts =>
!             New_Name := Name_No_Dynamic_Attachment;
  
!          when Name_No_Requeue =>
!             New_Name := Name_No_Requeue_Statements;
  
!          when Name_No_Task_Attributes =>
!             New_Name := Name_No_Task_Attributes_Package;
  
!          when others =>
!             return Old_Name;
!       end case;
  
!       if Warn_On_Obsolescent_Feature then
!          Error_Msg_Name_1 := Old_Name;
!          Error_Msg_N ("restriction identifier % is obsolescent?", N);
!          Error_Msg_Name_1 := New_Name;
!          Error_Msg_N ("|use restriction identifier % instead", N);
!       end if;
! 
!       return New_Name;
!    end Process_Restriction_Synonyms;
  
     ------------------------
     -- Restricted_Profile --
     ------------------------
  
     function Restricted_Profile return Boolean is
     begin
!       if Restricted_Profile_Cached then
!          return Restricted_Profile_Result;
! 
!       else
!          Restricted_Profile_Result := True;
!          Restricted_Profile_Cached := True;
! 
!          declare
!             R : Restriction_Flags  renames Profile_Info (Restricted).Set;
!             V : Restriction_Values renames Profile_Info (Restricted).Value;
!          begin
!             for J in R'Range loop
!                if R (J)
!                  and then (Restrictions.Set (J) = False
!                              or else Restriction_Warnings (J)
!                              or else
!                                (J in All_Parameter_Restrictions
!                                   and then Restrictions.Value (J) > V (J)))
!                then
!                   Restricted_Profile_Result := False;
!                   exit;
!                end if;
!             end loop;
! 
!             return Restricted_Profile_Result;
!          end;
!       end if;
     end Restricted_Profile;
  
+    ------------------------
+    -- Restriction_Active --
+    ------------------------
+ 
+    function Restriction_Active (R : All_Restrictions) return Boolean is
+    begin
+       return Restrictions.Set (R);
+    end Restriction_Active;
+ 
     ---------------------
     -- Restriction_Msg --
     ---------------------
*************** package body Restrict is
*** 425,500 ****
        Error_Msg_N (B (1 .. P), N);
     end Restriction_Msg;
  
!    -------------------
!    -- Set_Ravenscar --
!    -------------------
  
!    procedure Set_Ravenscar (N : Node_Id) is
!       Loc : constant Source_Ptr := Sloc (N);
  
     begin
!       Set_Restricted_Profile (N);
!       Restrictions (Boolean_Entry_Barriers)       := True;
!       Restrictions (No_Select_Statements)         := True;
!       Restrictions (No_Calendar)                  := True;
!       Restrictions (No_Entry_Queue)               := True;
!       Restrictions (No_Relative_Delay)            := True;
!       Restrictions (No_Task_Termination)          := True;
!       Restrictions (No_Implicit_Heap_Allocations) := True;
  
!       Restrictions_Loc (Boolean_Entry_Barriers)       := Loc;
!       Restrictions_Loc (No_Select_Statements)         := Loc;
!       Restrictions_Loc (No_Calendar)                  := Loc;
!       Restrictions_Loc (No_Entry_Queue)               := Loc;
!       Restrictions_Loc (No_Relative_Delay)            := Loc;
!       Restrictions_Loc (No_Task_Termination)          := Loc;
!       Restrictions_Loc (No_Implicit_Heap_Allocations) := Loc;
!    end Set_Ravenscar;
  
!    ----------------------------
!    -- Set_Restricted_Profile --
!    ----------------------------
  
!    --  This must be coordinated with Restricted_Profile
  
!    procedure Set_Restricted_Profile (N : Node_Id) is
!       Loc : constant Source_Ptr := Sloc (N);
  
     begin
!       Restrictions (No_Abort_Statements)          := True;
!       Restrictions (No_Asynchronous_Control)      := True;
!       Restrictions (No_Entry_Queue)               := True;
!       Restrictions (No_Task_Hierarchy)            := True;
!       Restrictions (No_Task_Allocators)           := True;
!       Restrictions (No_Dynamic_Priorities)        := True;
!       Restrictions (No_Terminate_Alternatives)    := True;
!       Restrictions (No_Dynamic_Interrupts)        := True;
!       Restrictions (No_Protected_Type_Allocators) := True;
!       Restrictions (No_Local_Protected_Objects)   := True;
!       Restrictions (No_Requeue)                   := True;
!       Restrictions (No_Task_Attributes)           := True;
  
!       Restrictions_Loc (No_Abort_Statements)          := Loc;
!       Restrictions_Loc (No_Asynchronous_Control)      := Loc;
!       Restrictions_Loc (No_Entry_Queue)               := Loc;
!       Restrictions_Loc (No_Task_Hierarchy)            := Loc;
!       Restrictions_Loc (No_Task_Allocators)           := Loc;
!       Restrictions_Loc (No_Dynamic_Priorities)        := Loc;
!       Restrictions_Loc (No_Terminate_Alternatives)    := Loc;
!       Restrictions_Loc (No_Dynamic_Interrupts)        := Loc;
!       Restrictions_Loc (No_Protected_Type_Allocators) := Loc;
!       Restrictions_Loc (No_Local_Protected_Objects)   := Loc;
!       Restrictions_Loc (No_Requeue)                   := Loc;
!       Restrictions_Loc (No_Task_Attributes)           := Loc;
  
!       Restriction_Parameters (Max_Asynchronous_Select_Nesting) := Uint_0;
!       Restriction_Parameters (Max_Task_Entries)                := Uint_0;
!       Restriction_Parameters (Max_Select_Alternatives)         := Uint_0;
  
!       if Restriction_Parameters (Max_Protected_Entries) /= Uint_0 then
!          Restriction_Parameters (Max_Protected_Entries) := Uint_1;
        end if;
!    end Set_Restricted_Profile;
  
     ----------------------------------
     -- Suppress_Restriction_Message --
--- 530,707 ----
        Error_Msg_N (B (1 .. P), N);
     end Restriction_Msg;
  
!    ---------------
!    -- Same_Unit --
!    ---------------
  
!    function Same_Unit (U1, U2 : Node_Id) return Boolean is
!    begin
!       if Nkind (U1) = N_Identifier then
!          return Nkind (U2) = N_Identifier and then Chars (U1) = Chars (U2);
! 
!       elsif Nkind (U2) = N_Identifier then
!          return False;
! 
!       elsif (Nkind (U1) = N_Selected_Component
!              or else Nkind (U1) = N_Expanded_Name)
!         and then
!           (Nkind (U2) = N_Selected_Component
!            or else Nkind (U2) = N_Expanded_Name)
!       then
!          return Same_Unit (Prefix (U1), Prefix (U2))
!            and then Same_Unit (Selector_Name (U1), Selector_Name (U2));
!       else
!          return False;
!       end if;
!    end Same_Unit;
! 
!    ------------------------------
!    -- Set_Profile_Restrictions --
!    ------------------------------
! 
!    procedure Set_Profile_Restrictions
!      (P    : Profile_Name;
!       N    : Node_Id;
!       Warn : Boolean)
!    is
!       R : Restriction_Flags  renames Profile_Info (P).Set;
!       V : Restriction_Values renames Profile_Info (P).Value;
  
     begin
!       for J in R'Range loop
!          if R (J) then
!             if J in All_Boolean_Restrictions then
!                Set_Restriction (J, N);
!             else
!                Set_Restriction (J, N, V (J));
!             end if;
  
!             Restriction_Warnings (J) := Warn;
!          end if;
!       end loop;
!    end Set_Profile_Restrictions;
  
!    ---------------------
!    -- Set_Restriction --
!    ---------------------
  
!    --  Case of Boolean restriction
  
!    procedure Set_Restriction
!      (R : All_Boolean_Restrictions;
!       N : Node_Id)
!    is
!    begin
!       Restrictions.Set (R) := True;
  
+       if Restricted_Profile_Cached and Restricted_Profile_Result then
+          null;
+       else
+          Restricted_Profile_Cached := False;
+       end if;
+ 
+       --  Set location, but preserve location of system
+       --  restriction for nice error msg with run time name
+ 
+       if Restrictions_Loc (R) /= System_Location then
+          Restrictions_Loc (R) := Sloc (N);
+       end if;
+ 
+       --  Record the restriction if we are in the main unit,
+       --  or in the extended main unit. The reason that we
+       --  test separately for Main_Unit is that gnat.adc is
+       --  processed with Current_Sem_Unit = Main_Unit, but
+       --  nodes in gnat.adc do not appear to be the extended
+       --  main source unit (they probably should do ???)
+ 
+       if Current_Sem_Unit = Main_Unit
+         or else In_Extended_Main_Source_Unit (N)
+       then
+          if not Restriction_Warnings (R) then
+             Main_Restrictions.Set (R) := True;
+          end if;
+       end if;
+    end Set_Restriction;
+ 
+    --  Case of parameter restriction
+ 
+    procedure Set_Restriction
+      (R : All_Parameter_Restrictions;
+       N : Node_Id;
+       V : Integer)
+    is
     begin
!       if Restricted_Profile_Cached and Restricted_Profile_Result then
!          null;
!       else
!          Restricted_Profile_Cached := False;
!       end if;
  
!       if Restrictions.Set (R) then
!          if V < Restrictions.Value (R) then
!             Restrictions.Value (R) := V;
!             Restrictions_Loc (R) := Sloc (N);
!          end if;
  
!       else
!          Restrictions.Set (R) := True;
!          Restrictions.Value (R) := V;
!          Restrictions_Loc (R) := Sloc (N);
!       end if;
  
!       --  Record the restriction if we are in the main unit,
!       --  or in the extended main unit. The reason that we
!       --  test separately for Main_Unit is that gnat.adc is
!       --  processed with Current_Sem_Unit = Main_Unit, but
!       --  nodes in gnat.adc do not appear to be the extended
!       --  main source unit (they probably should do ???)
! 
!       if Current_Sem_Unit = Main_Unit
!         or else In_Extended_Main_Source_Unit (N)
!       then
!          if Main_Restrictions.Set (R) then
!             if V < Main_Restrictions.Value (R) then
!                Main_Restrictions.Value (R) := V;
!             end if;
! 
!          elsif not Restriction_Warnings (R) then
!             Main_Restrictions.Set (R) := True;
!             Main_Restrictions.Value (R) := V;
!          end if;
        end if;
!    end Set_Restriction;
! 
!    -----------------------------------
!    -- Set_Restriction_No_Dependence --
!    -----------------------------------
! 
!    procedure Set_Restriction_No_Dependence
!      (Unit : Node_Id;
!       Warn : Boolean)
!    is
!    begin
!       --  Loop to check for duplicate entry
! 
!       for J in No_Dependence.First .. No_Dependence.Last loop
! 
!          --  Case of entry already in table
! 
!          if Same_Unit (Unit, No_Dependence.Table (J).Unit) then
! 
!             --  Error has precedence over warning
! 
!             if not Warn then
!                No_Dependence.Table (J).Warn := False;
!             end if;
! 
!             return;
!          end if;
!       end loop;
! 
!       --  Entry is in table
! 
!       No_Dependence.Append ((Unit, Warn));
!    end Set_Restriction_No_Dependence;
  
     ----------------------------------
     -- Suppress_Restriction_Message --
*************** package body Restrict is
*** 525,532 ****
  
     function Tasking_Allowed return Boolean is
     begin
!       return Restriction_Parameters (Max_Tasks) /= 0
!         and then not Restrictions (No_Tasking);
     end Tasking_Allowed;
  
  end Restrict;
--- 732,740 ----
  
     function Tasking_Allowed return Boolean is
     begin
!       return not Restrictions.Set (No_Tasking)
!         and then (not Restrictions.Set (Max_Tasks)
!                     or else Restrictions.Value (Max_Tasks) > 0);
     end Tasking_Allowed;
  
  end Restrict;
diff -Nrcpad gcc-3.4.3/gcc/ada/restrict.ads gcc-4.0.0/gcc/ada/restrict.ads
*** gcc-3.4.3/gcc/ada/restrict.ads	Tue Oct 21 13:42:13 2003
--- gcc-4.0.0/gcc/ada/restrict.ads	Mon Jan  3 15:32:17 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 26,83 ****
  
  --  This package deals with the implementation of the Restrictions pragma
  
! with Rident;
  with Types;  use Types;
  with Uintp;  use Uintp;
  
  package Restrict is
  
!    type Restriction_Id is new Rident.Restriction_Id;
!    --  The type Restriction_Id defines the set of restriction identifiers,
!    --  which take no parameter (i.e. they are either present or not present).
!    --  The actual definition is in the separate package Rident, so that
!    --  it can easily be accessed by the binder without dragging in lots
!    --  of stuff.
! 
!    subtype All_Restrictions is
!      Restriction_Id range
!        Restriction_Id (Rident.All_Restrictions'First) ..
!        Restriction_Id (Rident.All_Restrictions'Last);
!    --  All restriction identifiers
! 
!    subtype Partition_Restrictions is
!      Restriction_Id range
!        Restriction_Id (Rident.Partition_Restrictions'First) ..
!        Restriction_Id (Rident.Partition_Restrictions'Last);
!    --  Range of restriction identifiers that are checked by the binder
! 
!    subtype Compilation_Unit_Restrictions is
!      Restriction_Id range
!        Restriction_Id (Rident.Compilation_Unit_Restrictions'First) ..
!        Restriction_Id (Rident.Compilation_Unit_Restrictions'Last);
!    --  Range of restriction identifiers not checked by binder
! 
!    type Restriction_Parameter_Id is new Rident.Restriction_Parameter_Id;
!    --  The type Restriction_Parameter_Id records cases where a parameter is
!    --  present in the corresponding pragma. The actual definition is in the
!    --  separate package Rident for consistency.
! 
!    type Restrictions_Flags is array (Restriction_Id) of Boolean;
!    --  Type used for arrays indexed by Restriction_Id.
! 
!    Restrictions : Restrictions_Flags := (others => False);
!    --  Corresponding entry is False if restriction is not active, and
!    --  True if the restriction is active, i.e. if a pragma Restrictions
!    --  has been seen anywhere. Note that we are happy to pick up any
!    --  restrictions pragmas in with'ed units, since we are required to
!    --  be consistent at link time, and we might as well find the error
!    --  at compile time. Clients must NOT use this array for checking to
!    --  see if a restriction is violated, instead it is required that the
!    --  Check_Restriction subprograms be used for this purpose. The only
!    --  legitimate direct use of this array is when the code is modified
!    --  as a result of the restriction in some way.
  
!    Restrictions_Loc : array (Restriction_Id) of Source_Ptr :=
                         (others => No_Location);
     --  Locations of Restrictions pragmas for error message purposes.
     --  Valid only if corresponding entry in Restrictions is set. A value
--- 26,48 ----
  
  --  This package deals with the implementation of the Restrictions pragma
  
! with Rident; use Rident;
! with Table;
  with Types;  use Types;
  with Uintp;  use Uintp;
  
  package Restrict is
  
!    Restrictions : Restrictions_Info;
!    --  This variable records restrictions found in any units in the main
!    --  extended unit, and in the case of restrictions checked for partition
!    --  consistency, restrictions found in any with'ed units, parent specs
!    --  etc, since we may as well check as much as we can at compile time.
!    --  These variables should not be referenced directly by clients. Instead
!    --  use Check_Restrictions to record a violation of a restriction, and
!    --  Restriction_Active to test if a given restriction is active.
  
!    Restrictions_Loc : array (All_Restrictions) of Source_Ptr :=
                         (others => No_Location);
     --  Locations of Restrictions pragmas for error message purposes.
     --  Valid only if corresponding entry in Restrictions is set. A value
*************** package Restrict is
*** 85,167 ****
     --  pragma, and a value of System_Location is used for restrictions
     --  set from package Standard by the processing in Targparm.
  
!    Main_Restrictions : Restrictions_Flags := (others => False);
!    --  This variable saves the cumulative restrictions in effect compiling
!    --  any unit that is part of the extended main unit (i.e. the compiled
!    --  unit, its spec if any, and its subunits if any). The reason we keep
!    --  track of this is for the information that goes to the binder about
!    --  restrictions that are set. The binder will identify a unit that has
!    --  a restrictions pragma for error message purposes, and we do not want
!    --  to pick up a restrictions pragma in a with'ed unit for this purpose.
! 
!    Violations : Restrictions_Flags := (others => False);
!    --  Corresponding entry is False if the restriction has not been
!    --  violated in the current main unit, and True if it has been violated.
  
!    Restriction_Warnings : Restrictions_Flags := (others => False);
     --  If one of these flags is set, then it means that violation of the
     --  corresponding restriction results only in a warning message, not
     --  in an error message, and the restriction is not otherwise enforced.
  
!    Restriction_Parameters :
!      array (Restriction_Parameter_Id) of Uint := (others => No_Uint);
!    --  This array indicates the setting of restriction parameter identifier
!    --  values. All values are initially set to No_Uint indicating that the
!    --  parameter is not set, and are set to the appropriate non-negative
!    --  value if a Restrictions pragma specifies the corresponding
!    --  restriction parameter identifier with an appropriate value.
  
!    Restriction_Parameters_Loc :
!      array (Restriction_Parameter_Id) of Source_Ptr;
!    --  Locations of Restrictions pragmas for error message purposes.
!    --  Valid only if corresponding entry in Restriction_Parameters is
!    --  set to a value other than No_Uint.
  
     type Unit_Entry is record
        Res_Id : Restriction_Id;
        Filenm : String (1 .. 8);
     end record;
  
!    type Unit_Array_Type is array (Positive range <>) of Unit_Entry;
! 
!    Unit_Array : constant Unit_Array_Type := (
!      (No_Asynchronous_Control,    "a-astaco"),
!      (No_Calendar,                "a-calend"),
!      (No_Calendar,                "calendar"),
!      (No_Delay,                   "a-calend"),
!      (No_Delay,                   "calendar"),
!      (No_Dynamic_Priorities,      "a-dynpri"),
!      (No_Finalization,            "a-finali"),
!      (No_IO,                      "a-direio"),
!      (No_IO,                      "directio"),
!      (No_IO,                      "a-sequio"),
!      (No_IO,                      "sequenio"),
!      (No_IO,                      "a-ststio"),
!      (No_IO,                      "a-textio"),
!      (No_IO,                      "text_io "),
!      (No_IO,                      "a-witeio"),
!      (No_Task_Attributes,         "a-tasatt"),
!      (No_Streams,                 "a-stream"),
!      (No_Unchecked_Conversion,    "a-unccon"),
!      (No_Unchecked_Conversion,    "unchconv"),
!      (No_Unchecked_Deallocation,  "a-uncdea"),
!      (No_Unchecked_Deallocation,  "unchdeal"));
!    --  This array defines the mapping between restriction identifiers and
!    --  predefined language files containing units for which the identifier
!    --  forbids semantic dependence.
! 
!    type Save_Compilation_Unit_Restrictions is private;
!    --  Type used for saving and restoring compilation unit restrictions.
!    --  See Compilation_Unit_Restrictions_[Save|Restore] subprograms.
  
     --  The following map has True for all GNAT pragmas. It is used to
     --  implement pragma Restrictions (No_Implementation_Restrictions)
     --  (which is why this restriction itself is excluded from the list).
  
!    Implementation_Restriction : Restrictions_Flags :=
!      (Boolean_Entry_Barriers             => True,
        No_Calendar                        => True,
!       No_Dynamic_Interrupts              => True,
        No_Enumeration_Maps                => True,
        No_Entry_Calls_In_Elaboration_Code => True,
        No_Entry_Queue                     => True,
--- 50,112 ----
     --  pragma, and a value of System_Location is used for restrictions
     --  set from package Standard by the processing in Targparm.
  
!    Main_Restrictions : Restrictions_Info;
!    --  This variable records only restrictions found in any units of the
!    --  main extended unit. These are the variables used for ali file output,
!    --  since we want the binder to be able to accurately diagnose inter-unit
!    --  restriction violations.
  
!    Restriction_Warnings : Rident.Restriction_Flags;
     --  If one of these flags is set, then it means that violation of the
     --  corresponding restriction results only in a warning message, not
     --  in an error message, and the restriction is not otherwise enforced.
+    --  Note that the flags in Restrictions are set to indicate that the
+    --  restriction is set in this case, but Main_Restrictions is never
+    --  set if Restriction_Warnings is set, so this does not look like a
+    --  restriction to the binder.
  
!    type Save_Cunit_Boolean_Restrictions is private;
!    --  Type used for saving and restoring compilation unit restrictions.
!    --  See Cunit_Boolean_Restrictions_[Save|Restore] subprograms.
  
!    --  The following declarations establish a mapping between restriction
!    --  identifiers, and the names of corresponding restriction library units.
  
     type Unit_Entry is record
        Res_Id : Restriction_Id;
        Filenm : String (1 .. 8);
     end record;
  
!    Unit_Array : constant array (Positive range <>) of Unit_Entry := (
!      (No_Asynchronous_Control,     "a-astaco"),
!      (No_Calendar,                 "a-calend"),
!      (No_Calendar,                 "calendar"),
!      (No_Delay,                    "a-calend"),
!      (No_Delay,                    "calendar"),
!      (No_Dynamic_Priorities,       "a-dynpri"),
!      (No_Finalization,             "a-finali"),
!      (No_IO,                       "a-direio"),
!      (No_IO,                       "directio"),
!      (No_IO,                       "a-sequio"),
!      (No_IO,                       "sequenio"),
!      (No_IO,                       "a-ststio"),
!      (No_IO,                       "a-textio"),
!      (No_IO,                       "text_io "),
!      (No_IO,                       "a-witeio"),
!      (No_Task_Attributes_Package,  "a-tasatt"),
!      (No_Unchecked_Conversion,     "a-unccon"),
!      (No_Unchecked_Conversion,     "unchconv"),
!      (No_Unchecked_Deallocation,   "a-uncdea"),
!      (No_Unchecked_Deallocation,   "unchdeal"));
  
     --  The following map has True for all GNAT pragmas. It is used to
     --  implement pragma Restrictions (No_Implementation_Restrictions)
     --  (which is why this restriction itself is excluded from the list).
  
!    Implementation_Restriction : array (All_Restrictions) of Boolean :=
!      (Simple_Barriers                    => True,
        No_Calendar                        => True,
!       No_Dynamic_Attachment              => True,
        No_Enumeration_Maps                => True,
        No_Entry_Calls_In_Elaboration_Code => True,
        No_Entry_Queue                     => True,
*************** package Restrict is
*** 173,184 ****
        No_Local_Protected_Objects         => True,
        No_Protected_Type_Allocators       => True,
        No_Relative_Delay                  => True,
!       No_Requeue                         => True,
        No_Secondary_Stack                 => True,
        No_Select_Statements               => True,
        No_Standard_Storage_Pools          => True,
        No_Streams                         => True,
!       No_Task_Attributes                 => True,
        No_Task_Termination                => True,
        No_Wide_Characters                 => True,
        Static_Priorities                  => True,
--- 118,129 ----
        No_Local_Protected_Objects         => True,
        No_Protected_Type_Allocators       => True,
        No_Relative_Delay                  => True,
!       No_Requeue_Statements              => True,
        No_Secondary_Stack                 => True,
        No_Select_Statements               => True,
        No_Standard_Storage_Pools          => True,
        No_Streams                         => True,
!       No_Task_Attributes_Package         => True,
        No_Task_Termination                => True,
        No_Wide_Characters                 => True,
        Static_Priorities                  => True,
*************** package Restrict is
*** 188,193 ****
--- 133,165 ----
        No_Elaboration_Code                => True,
        others                             => False);
  
+    --  The following table records entries made by Restrictions pragmas
+    --  that specify a parameter for No_Dependence. Each such pragma makes
+    --  an entry in this table.
+ 
+    --  Note: we have chosen to implement this restriction in the "syntactic"
+    --  form, where we do not check that the named package is a language defined
+    --  package, but instead we allow arbitrary package names. The discussion of
+    --  this issue is not complete in the ARG, but the sense seems to be leaning
+    --  in this direction, which makes more sense to us, since it is much more
+    --  useful, and much easier to implement.
+ 
+    type ND_Entry is record
+       Unit : Node_Id;
+       --  The unit parameter from the No_Dependence pragma
+ 
+       Warn : Boolean;
+       --  True if from Restriction_Warnings, False if from Restrictions
+    end record;
+ 
+    package No_Dependence is new Table.Table (
+      Table_Component_Type => ND_Entry,
+      Table_Index_Type     => Int,
+      Table_Low_Bound      => 0,
+      Table_Initial        => 200,
+      Table_Increment      => 200,
+      Table_Name           => "Name_No_Dependence");
+ 
     -----------------
     -- Subprograms --
     -----------------
*************** package Restrict is
*** 203,235 ****
     --  restriction (e.g. No_IO restricts the loading of unit Ada.Text_IO).
     --  If a restriction exists post error message at the given node.
  
!    procedure Check_Restriction (R : Restriction_Id; N : Node_Id);
     --  Checks that the given restriction is not set, and if it is set, an
     --  appropriate message is posted on the given node. Also records the
!    --  violation in the violations array. Note that it is mandatory to
!    --  always use this routine to check if a restriction is violated. Such
!    --  checks must never be done directly by the caller, since otherwise
!    --  they are not properly recorded in the violations array.
! 
!    procedure Check_Restriction
!      (R : Restriction_Parameter_Id;
!       V : Uint;
!       N : Node_Id);
!    --  Checks that the count in V does not exceed the maximum value of the
!    --  restriction parameter value corresponding to the given restriction
!    --  parameter identifier (if it has been set). If the count in V exceeds
!    --  the maximum, then post an error message on node N. We use this call
!    --  when we can tell the maximum usage at compile time. In other words,
!    --  we guarantee that if a call is made to this routine, then the front
!    --  end will make all necessary calls for the restriction parameter R
!    --  to ensure that we really know the maximum value used anywhere.
  
!    procedure Check_Restriction (R : Restriction_Parameter_Id; N : Node_Id);
!    --  Check that the maximum value of the restriction parameter corresponding
!    --  to the given restriction parameter identifier is not set to zero. If
!    --  it has been set to zero, post an error message on node N. We use this
!    --  call in cases where we can tell at compile time that the count must be
!    --  at least one, but we can't tell anything more.
  
     procedure Check_Elaboration_Code_Allowed (N : Node_Id);
     --  Tests to see if elaboration code is allowed by the current restrictions
--- 175,199 ----
     --  restriction (e.g. No_IO restricts the loading of unit Ada.Text_IO).
     --  If a restriction exists post error message at the given node.
  
!    procedure Check_Restriction
!      (R : Restriction_Id;
!       N : Node_Id;
!       V : Uint := Uint_Minus_1);
     --  Checks that the given restriction is not set, and if it is set, an
     --  appropriate message is posted on the given node. Also records the
!    --  violation in the appropriate internal arrays. Note that it is
!    --  mandatory to always use this routine to check if a restriction
!    --  is violated. Such checks must never be done directly by the caller,
!    --  since otherwise violations in the absence of restrictions are not
!    --  properly recorded. The value of V is relevant only for parameter
!    --  restrictions, and in this case indicates the exact count for the
!    --  violation. If the exact count is not known, V is left at its
!    --  default value of -1 which indicates an unknown count.
  
!    procedure Check_Restriction_No_Dependence (U : Node_Id; Err : Node_Id);
!    --  Called when a dependence on a unit is created (either implicitly, or by
!    --  an explicit WITH clause). U is a node for the unit involved, and Err
!    --  is the node to which an error will be attached if necessary.
  
     procedure Check_Elaboration_Code_Allowed (N : Node_Id);
     --  Tests to see if elaboration code is allowed by the current restrictions
*************** package Restrict is
*** 241,248 ****
     --  Equivalent to Check_Restriction (No_Implicit_Heap_Allocations, N).
     --  Provided for easy use by back end, which has to check this restriction.
  
!    function Compilation_Unit_Restrictions_Save
!      return Save_Compilation_Unit_Restrictions;
     --  This function saves the compilation unit restriction settings, and
     --  resets them to False. This is used e.g. when compiling a with'ed
     --  unit to avoid incorrectly propagating restrictions. Note that it
--- 205,212 ----
     --  Equivalent to Check_Restriction (No_Implicit_Heap_Allocations, N).
     --  Provided for easy use by back end, which has to check this restriction.
  
!    function Cunit_Boolean_Restrictions_Save
!      return Save_Cunit_Boolean_Restrictions;
     --  This function saves the compilation unit restriction settings, and
     --  resets them to False. This is used e.g. when compiling a with'ed
     --  unit to avoid incorrectly propagating restrictions. Note that it
*************** package Restrict is
*** 252,295 ****
     --  required to be partition wide, because it allows the restriction
     --  violation message to be given at compile time instead of link time.
  
!    procedure Compilation_Unit_Restrictions_Restore
!      (R : Save_Compilation_Unit_Restrictions);
     --  This is the corresponding restore procedure to restore restrictions
!    --  previously saved by Compilation_Unit_Restrictions_Save.
  
     function Get_Restriction_Id
!      (N    : Name_Id)
!       return Restriction_Id;
     --  Given an identifier name, determines if it is a valid restriction
     --  identifier, and if so returns the corresponding Restriction_Id
     --  value, otherwise returns Not_A_Restriction_Id.
  
-    function Get_Restriction_Parameter_Id
-      (N    : Name_Id)
-       return Restriction_Parameter_Id;
-    --  Given an identifier name, determines if it is a valid restriction
-    --  parameter identifier, and if so returns the corresponding
-    --  Restriction_Parameter_Id value, otherwise returns
-    --  Not_A_Restriction_Parameter_Id.
- 
     function No_Exception_Handlers_Set return Boolean;
     --  Test to see if current restrictions settings specify that no exception
     --  handlers are present. This function is called by Gigi when it needs to
     --  expand an AT END clean up identifier with no exception handler.
  
     function Restricted_Profile return Boolean;
!    --  Tests to see if tasking operations follow the GNAT restricted run time
!    --  profile.
  
!    procedure Set_Ravenscar (N : Node_Id);
!    --  Enables the set of restrictions for Ravenscar. N is the corresponding
!    --  pragma node, which is used for error messages on any constructs that
!    --  violate the profile.
  
!    procedure Set_Restricted_Profile (N : Node_Id);
!    --  Enables the set of restrictions for pragma Restricted_Run_Time. N is
!    --  the corresponding pragma node, which is used for error messages on
!    --  constructs that violate the profile.
  
     function Tasking_Allowed return Boolean;
     pragma Inline (Tasking_Allowed);
--- 216,284 ----
     --  required to be partition wide, because it allows the restriction
     --  violation message to be given at compile time instead of link time.
  
!    procedure Cunit_Boolean_Restrictions_Restore
!      (R : Save_Cunit_Boolean_Restrictions);
     --  This is the corresponding restore procedure to restore restrictions
!    --  previously saved by Cunit_Boolean_Restrictions_Save.
  
     function Get_Restriction_Id
!      (N : Name_Id) return Restriction_Id;
     --  Given an identifier name, determines if it is a valid restriction
     --  identifier, and if so returns the corresponding Restriction_Id
     --  value, otherwise returns Not_A_Restriction_Id.
  
     function No_Exception_Handlers_Set return Boolean;
     --  Test to see if current restrictions settings specify that no exception
     --  handlers are present. This function is called by Gigi when it needs to
     --  expand an AT END clean up identifier with no exception handler.
  
+    function Process_Restriction_Synonyms (N : Node_Id) return Name_Id;
+    --  Id is a node whose Chars field contains the name of a restriction.
+    --  If it is one of synonyms that we allow for historical purposes (for
+    --  list see System.Rident), then the proper official name is returned.
+    --  Otherwise the Chars field of the argument is returned unchanged.
+ 
+    function Restriction_Active (R : All_Restrictions) return Boolean;
+    pragma Inline (Restriction_Active);
+    --  Determines if a given restriction is active. This call should only be
+    --  used where the compiled code depends on whether the restriction is
+    --  active. Always use Check_Restriction to record a violation.
+ 
     function Restricted_Profile return Boolean;
!    --  Tests if set of restrictions corresponding to Profile (Restricted) is
!    --  currently in effect (set by pragma Profile, or by an appropriate set
!    --  of individual Restrictions pragms). Returns True only if all the
!    --  required restrictions are set.
  
!    procedure Set_Profile_Restrictions
!      (P    : Profile_Name;
!       N    : Node_Id;
!       Warn : Boolean);
!    --  Sets the set of restrictions associated with the given profile
!    --  name. N is the node of the construct to which error messages
!    --  are to be attached as required. Warn is set True for the case
!    --  of Profile_Warnings where the restrictions are set as warnings
!    --  rather than legality requirements.
  
!    procedure Set_Restriction
!      (R : All_Boolean_Restrictions;
!       N : Node_Id);
!    --  N is a node (typically a pragma node) that has the effect of setting
!    --  Boolean restriction R. The restriction is set in Restrictions, and
!    --  also in Main_Restrictions if this is the main unit.
! 
!    procedure Set_Restriction
!      (R : All_Parameter_Restrictions;
!       N : Node_Id;
!       V : Integer);
!    --  Similar to the above, except that this is used for the case of a
!    --  parameter restriction, and the corresponding value V is given.
! 
!    procedure Set_Restriction_No_Dependence
!      (Unit : Node_Id;
!       Warn : Boolean);
!    --  Sets given No_Dependence restriction in table if not there already.
!    --  Warn is True if from Restriction_Warnings, False if from Restrictions.
  
     function Tasking_Allowed return Boolean;
     pragma Inline (Tasking_Allowed);
*************** package Restrict is
*** 298,305 ****
     --  be non-zero.
  
  private
!    type Save_Compilation_Unit_Restrictions is
!      array (Compilation_Unit_Restrictions) of Boolean;
     --  Type used for saving and restoring compilation unit restrictions.
     --  See Compilation_Unit_Restrictions_[Save|Restore] subprograms.
  
--- 287,294 ----
     --  be non-zero.
  
  private
!    type Save_Cunit_Boolean_Restrictions is
!      array (Cunit_Boolean_Restrictions) of Boolean;
     --  Type used for saving and restoring compilation unit restrictions.
     --  See Compilation_Unit_Restrictions_[Save|Restore] subprograms.
  
diff -Nrcpad gcc-3.4.3/gcc/ada/rtsfind.adb gcc-4.0.0/gcc/ada/rtsfind.adb
*** gcc-3.4.3/gcc/ada/rtsfind.adb	Mon Jan  5 15:20:45 2004
--- gcc-4.0.0/gcc/ada/rtsfind.adb	Thu Feb 10 13:50:15 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Nlists;   use Nlists;
*** 40,45 ****
--- 40,46 ----
  with Nmake;    use Nmake;
  with Output;   use Output;
  with Opt;      use Opt;
+ with Restrict; use Restrict;
  with Sem;      use Sem;
  with Sem_Ch7;  use Sem_Ch7;
  with Sem_Util; use Sem_Util;
*************** package body Rtsfind is
*** 70,75 ****
--- 71,81 ----
     --  a unit is loaded to contain the defining entity for the unit, the
     --  unit name, and the unit number.
  
+    --  Note that a unit can be loaded either by a call to find an entity
+    --  within the unit (e.g. RTE), or by an explicit with of the unit. In
+    --  the latter case it is critical to make a call to Set_RTU_Loaded to
+    --  ensure that the entry in this table reflects the load.
+ 
     type RT_Unit_Table_Record is record
        Entity : Entity_Id;
        Uname  : Unit_Name_Type;
*************** package body Rtsfind is
*** 139,145 ****
  
     function Get_Unit_Name (U_Id : RTU_Id) return Unit_Name_Type;
     --  Retrieves the Unit Name given a unit id represented by its
!    --  enumaration value in RTU_Id.
  
     procedure Load_RTU
       (U_Id        : RTU_Id;
--- 145,151 ----
  
     function Get_Unit_Name (U_Id : RTU_Id) return Unit_Name_Type;
     --  Retrieves the Unit Name given a unit id represented by its
!    --  enumeration value in RTU_Id.
  
     procedure Load_RTU
       (U_Id        : RTU_Id;
*************** package body Rtsfind is
*** 147,159 ****
        Use_Setting : Boolean := False);
     --  Load the unit whose Id is given if not already loaded. The unit is
     --  loaded, analyzed, and added to the WITH list, and the entry in
!    --  RT_Unit_Table is updated to reflect the load. The second parameter
!    --  indicates the initial setting for the Is_Potentially_Use_Visible
     --  flag of the entity for the loaded unit (if it is indeed loaded).
     --  A value of False means nothing special need be done. A value of
     --  True indicates that this flag must be set to True. It is needed
     --  only in the Text_IO_Kludge procedure, which may materialize an
!    --  entity of Text_IO (or Wide_Text_IO) that was previously unknown.
     --  Id is the RE_Id value of the entity which was originally requested.
     --  Id is used only for error message detail, and if it is RE_Null, then
     --  the attempt to output the entity name is ignored.
--- 153,165 ----
        Use_Setting : Boolean := False);
     --  Load the unit whose Id is given if not already loaded. The unit is
     --  loaded, analyzed, and added to the WITH list, and the entry in
!    --  RT_Unit_Table is updated to reflect the load. Use_Setting is used
!    --  to indicate the initial setting for the Is_Potentially_Use_Visible
     --  flag of the entity for the loaded unit (if it is indeed loaded).
     --  A value of False means nothing special need be done. A value of
     --  True indicates that this flag must be set to True. It is needed
     --  only in the Text_IO_Kludge procedure, which may materialize an
!    --  entity of Text_IO (or [Wide_]Wide_Text_IO) that was previously unknown.
     --  Id is the RE_Id value of the entity which was originally requested.
     --  Id is used only for error message detail, and if it is RE_Null, then
     --  the attempt to output the entity name is ignored.
*************** package body Rtsfind is
*** 174,179 ****
--- 180,218 ----
     --  used if you are sure that the message comes directly or indirectly from
     --  a call to the RTE function.
  
+    ------------------------
+    -- Entity_Not_Defined --
+    ------------------------
+ 
+    procedure Entity_Not_Defined (Id : RE_Id) is
+    begin
+       if No_Run_Time_Mode then
+ 
+          --  If the error occurs when compiling the body of a predefined
+          --  unit for inlining purposes, the body must be illegal in this
+          --  mode, and there is no point in continuing.
+ 
+          if Is_Predefined_File_Name
+            (Unit_File_Name (Get_Source_Unit (Sloc (Current_Error_Node))))
+          then
+             Error_Msg_N
+               ("construct not allowed in no run time mode!",
+                  Current_Error_Node);
+             raise Unrecoverable_Error;
+ 
+          else
+             RTE_Error_Msg ("|construct not allowed in no run time mode");
+          end if;
+ 
+       elsif Configurable_Run_Time_Mode then
+          RTE_Error_Msg ("|construct not allowed in this configuration>");
+       else
+          RTE_Error_Msg ("run-time configuration error");
+       end if;
+ 
+       Output_Entity_Name (Id, "not defined");
+    end Entity_Not_Defined;
+ 
     -------------------
     -- Get_Unit_Name --
     -------------------
*************** package body Rtsfind is
*** 209,214 ****
--- 248,256 ----
  
           elsif U_Id in Ada_Wide_Text_IO_Child then
              Name_Buffer (17) := '.';
+ 
+          elsif U_Id in Ada_Wide_Wide_Text_IO_Child then
+             Name_Buffer (22) := '.';
           end if;
  
        elsif U_Id in Interfaces_Child then
*************** package body Rtsfind is
*** 396,425 ****
        return
          Nkind (Prf) = N_Identifier
            and then
!         (Chars (Prf) = Name_Text_IO or else Chars (Prf) = Name_Wide_Text_IO)
            and then
          Nkind (Sel) = N_Identifier
            and then
          Chars (Sel) in Text_IO_Package_Name;
     end Is_Text_IO_Kludge_Unit;
  
-    ------------------------
-    -- Entity_Not_Defined --
-    ------------------------
- 
-    procedure Entity_Not_Defined (Id : RE_Id) is
-    begin
-       if No_Run_Time_Mode then
-          RTE_Error_Msg ("|construct not allowed in no run time mode");
-       elsif Configurable_Run_Time_Mode then
-          RTE_Error_Msg ("|construct not allowed in this configuration>");
-       else
-          RTE_Error_Msg ("run-time configuration error");
-       end if;
- 
-       Output_Entity_Name (Id, "not defined");
-    end Entity_Not_Defined;
- 
     ---------------
     -- Load_Fail --
     ---------------
--- 438,454 ----
        return
          Nkind (Prf) = N_Identifier
            and then
!            (Chars (Prf) = Name_Text_IO
!               or else
!             Chars (Prf) = Name_Wide_Text_IO
!               or else
!             Chars (Prf) = Name_Wide_Wide_Text_IO)
            and then
          Nkind (Sel) = N_Identifier
            and then
          Chars (Sel) in Text_IO_Package_Name;
     end Is_Text_IO_Kludge_Unit;
  
     ---------------
     -- Load_Fail --
     ---------------
*************** package body Rtsfind is
*** 786,794 ****
        ---------------
  
        procedure Check_RPC is
-          Body_Name    : Unit_Name_Type;
-          Unum         : Unit_Number_Type;
- 
        begin
           --  Bypass this check if debug flag -gnatdR set
  
--- 815,820 ----
*************** package body Rtsfind is
*** 799,845 ****
           --  Otherwise we need the check if we are going after one of
           --  the critical entities in System.RPC in stubs mode.
  
           if (Distribution_Stub_Mode = Generate_Receiver_Stub_Body
                        or else
                          Distribution_Stub_Mode = Generate_Caller_Stub_Body)
             and then (E = RE_Do_Rpc
!                        or else E = RE_Do_Apc
!                        or else E = RE_Params_Stream_Type
!                        or else E = RE_RPC_Receiver)
           then
!             --  Load body of System.Rpc, and abort if this is the body that is
!             --  provided by GNAT, for which these features are not supported
!             --  on current target. We identify the gnat body by the presence
!             --  of a local entity called Gnat in the first declaration.
! 
!             Lib_Unit := Unit (Cunit (U.Unum));
!             Body_Name := Get_Body_Name (Get_Unit_Name (Lib_Unit));
!             Unum :=
!               Load_Unit
!                 (Load_Name  => Body_Name,
!                  Required   => False,
!                  Subunit    => False,
!                  Error_Node => Empty,
!                  Renamings  => True);
! 
!             if Unum /= No_Unit then
!                declare
!                   Decls : constant List_Id :=
!                             Declarations (Unit (Cunit (Unum)));
! 
!                begin
!                   if Present (Decls)
!                     and then Nkind (First (Decls)) = N_Object_Declaration
!                     and then
!                       Chars (Defining_Identifier (First (Decls))) = Name_Gnat
!                   then
!                      Set_Standard_Error;
!                      Write_Str ("distribution feature not supported");
!                      Write_Eol;
!                      raise Unrecoverable_Error;
!                   end if;
!                end;
!             end if;
           end if;
        end Check_RPC;
  
--- 825,857 ----
           --  Otherwise we need the check if we are going after one of
           --  the critical entities in System.RPC in stubs mode.
  
+          --  ??? Should we do this for other s-parint/s-polint entities
+          --  too?
+ 
           if (Distribution_Stub_Mode = Generate_Receiver_Stub_Body
                        or else
                          Distribution_Stub_Mode = Generate_Caller_Stub_Body)
             and then (E = RE_Do_Rpc
!                        or else
!                      E = RE_Do_Apc
!                        or else
!                      E = RE_Params_Stream_Type
!                        or else
!                      E = RE_Request_Access)
           then
!             declare
!                DSA_Implementation : constant Entity_Id :=
!                                       RTE (RE_DSA_Implementation);
!             begin
!                if Chars (Entity (Expression
!                                   (Parent (DSA_Implementation)))) = Name_No_DSA
!                then
!                   Set_Standard_Error;
!                   Write_Str ("distribution feature not supported");
!                   Write_Eol;
!                   raise Unrecoverable_Error;
!                end if;
!             end;
           end if;
        end Check_RPC;
  
*************** package body Rtsfind is
*** 975,981 ****
        --  a WITH if the current unit is part of the extended main code
        --  unit, and if we have not already added the with. The WITH is
        --  added to the appropriate unit (the current one). We do not need
!       --  to generate a WITH for an
  
     <<Found>>
        if (not U.Withed)
--- 987,993 ----
        --  a WITH if the current unit is part of the extended main code
        --  unit, and if we have not already added the with. The WITH is
        --  added to the appropriate unit (the current one). We do not need
!       --  to generate a WITH for an ????
  
     <<Found>>
        if (not U.Withed)
*************** package body Rtsfind is
*** 1003,1008 ****
--- 1015,1021 ----
  
              Mark_Rewrite_Insertion (Withn);
              Append (Withn, Context_Items (Cunit (Current_Sem_Unit)));
+             Check_Restriction_No_Dependence (Name (Withn), Current_Error_Node);
           end;
        end if;
  
*************** package body Rtsfind is
*** 1063,1068 ****
--- 1076,1130 ----
        end if;
     end RTE_Error_Msg;
  
+    ----------------
+    -- RTU_Loaded --
+    ----------------
+ 
+    function RTU_Loaded (U : RTU_Id) return Boolean is
+    begin
+       return Present (RT_Unit_Table (U).Entity);
+    end RTU_Loaded;
+ 
+    --------------------
+    -- Set_RTU_Loaded --
+    --------------------
+ 
+    procedure Set_RTU_Loaded (N : Node_Id) is
+       Loc   : constant Source_Ptr       := Sloc (N);
+       Unum  : constant Unit_Number_Type := Get_Source_Unit (Loc);
+       Uname : constant Unit_Name_Type   := Unit_Name (Unum);
+       E     : constant Entity_Id        :=
+                 Defining_Entity (Unit (Cunit (Unum)));
+    begin
+       pragma Assert (Is_Predefined_File_Name (Unit_File_Name (Unum)));
+ 
+       --  Loop through entries in RTU table looking for matching entry
+ 
+       for U_Id in RTU_Id'Range loop
+ 
+          --  Here we have a match
+ 
+          if Get_Unit_Name (U_Id) = Uname then
+             declare
+                U : RT_Unit_Table_Record renames RT_Unit_Table (U_Id);
+                --  The RT_Unit_Table entry that may need updating
+ 
+             begin
+                --  If entry is not set, set it now
+ 
+                if not Present (U.Entity) then
+                   U.Entity := E;
+                   U.Uname  := Get_Unit_Name (U_Id);
+                   U.Unum   := Unum;
+                   U.Withed := False;
+                end if;
+ 
+                return;
+             end;
+          end if;
+       end loop;
+    end Set_RTU_Loaded;
+ 
     --------------------
     -- Text_IO_Kludge --
     --------------------
*************** package body Rtsfind is
*** 1088,1093 ****
--- 1150,1163 ----
          Name_Integer_IO     => Ada_Wide_Text_IO_Integer_IO,
          Name_Modular_IO     => Ada_Wide_Text_IO_Modular_IO);
  
+       Wide_Wide_Name_Map : constant Name_Map_Type := Name_Map_Type'(
+         Name_Decimal_IO     => Ada_Wide_Wide_Text_IO_Decimal_IO,
+         Name_Enumeration_IO => Ada_Wide_Wide_Text_IO_Enumeration_IO,
+         Name_Fixed_IO       => Ada_Wide_Wide_Text_IO_Fixed_IO,
+         Name_Float_IO       => Ada_Wide_Wide_Text_IO_Float_IO,
+         Name_Integer_IO     => Ada_Wide_Wide_Text_IO_Integer_IO,
+         Name_Modular_IO     => Ada_Wide_Wide_Text_IO_Modular_IO);
+ 
     begin
        --  Nothing to do if name is not identifier or a selected component
        --  whose selector_name is not an identifier.
*************** package body Rtsfind is
*** 1106,1112 ****
  
        --  Nothing to do if name is not one of the Text_IO subpackages
        --  Otherwise look through loaded units, and if we find Text_IO
!       --  or Wide_Text_IO already loaded, then load the proper child.
  
        if Chrs in Text_IO_Package_Name then
           for U in Main_Unit .. Last_Unit loop
--- 1176,1182 ----
  
        --  Nothing to do if name is not one of the Text_IO subpackages
        --  Otherwise look through loaded units, and if we find Text_IO
!       --  or [Wide_]Wide_Text_IO already loaded, then load the proper child.
  
        if Chrs in Text_IO_Package_Name then
           for U in Main_Unit .. Last_Unit loop
*************** package body Rtsfind is
*** 1114,1130 ****
  
              if Name_Len = 12 then
  
!                --  Here is where we do the loads if we find one of the
!                --  units Ada.Text_IO or Ada.Wide_Text_IO. An interesting
!                --  detail is that these units may already be used (i.e.
!                --  their In_Use flags may be set). Normally when the In_Use
!                --  flag is set, the Is_Potentially_Use_Visible flag of all
!                --  entities in the package is set, but the new entity we
!                --  are mysteriously adding was not there to have its flag
!                --  set at the time. So that's why we pass the extra parameter
!                --  to RTU_Find, to make sure the flag does get set now.
!                --  Given that those generic packages are in fact child units,
!                --  we must indicate that they are visible.
  
                 if Name_Buffer (1 .. 12) = "a-textio.ads" then
                    Load_RTU
--- 1184,1200 ----
  
              if Name_Len = 12 then
  
!                --  Here is where we do the loads if we find one of the units
!                --  Ada.Text_IO or Ada.[Wide_]Wide_Text_IO. An interesting
!                --  detail is that these units may already be used (i.e. their
!                --  In_Use flags may be set). Normally when the In_Use flag is
!                --  set, the Is_Potentially_Use_Visible flag of all entities in
!                --  the package is set, but the new entity we are mysteriously
!                --  adding was not there to have its flag set at the time. So
!                --  that's why we pass the extra parameter to RTU_Find, to make
!                --  sure the flag does get set now. Given that those generic
!                --  packages are in fact child units, we must indicate that
!                --  they are visible.
  
                 if Name_Buffer (1 .. 12) = "a-textio.ads" then
                    Load_RTU
*************** package body Rtsfind is
*** 1139,1144 ****
--- 1209,1221 ----
                       Use_Setting => In_Use (Cunit_Entity (U)));
                    Set_Is_Visible_Child_Unit
                      (RT_Unit_Table (Wide_Name_Map (Chrs)).Entity);
+ 
+                elsif Name_Buffer (1 .. 12) = "a-ztexio.ads" then
+                   Load_RTU
+                     (Wide_Wide_Name_Map (Chrs),
+                      Use_Setting => In_Use (Cunit_Entity (U)));
+                   Set_Is_Visible_Child_Unit
+                     (RT_Unit_Table (Wide_Wide_Name_Map (Chrs)).Entity);
                 end if;
              end if;
           end loop;
diff -Nrcpad gcc-3.4.3/gcc/ada/rtsfind.ads gcc-4.0.0/gcc/ada/rtsfind.ads
*** gcc-3.4.3/gcc/ada/rtsfind.ads	Tue Nov  4 12:51:46 2003
--- gcc-4.0.0/gcc/ada/rtsfind.ads	Thu Feb 10 13:50:15 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Rtsfind is
*** 69,74 ****
--- 69,77 ----
     --    Names of the form Ada_Wide_Text_IO_xxx are second level children
     --    of Ada.Wide_Text_IO.
  
+    --    Names of the form Ada_Wide_Wide_Text_IO_xxx are second level children
+    --    of Ada.Wide_Wide_Text_IO.
+ 
     --    Names of the form Interfaces_xxx are first level children of
     --    Interfaces_CPP refers to package Interfaces.CPP
  
*************** package Rtsfind is
*** 156,161 ****
--- 159,173 ----
        Ada_Wide_Text_IO_Integer_IO,
        Ada_Wide_Text_IO_Modular_IO,
  
+       --  Children of Ada.Wide_Wide_Text_IO (for Text_IO_Kludge)
+ 
+       Ada_Wide_Wide_Text_IO_Decimal_IO,
+       Ada_Wide_Wide_Text_IO_Enumeration_IO,
+       Ada_Wide_Wide_Text_IO_Fixed_IO,
+       Ada_Wide_Wide_Text_IO_Float_IO,
+       Ada_Wide_Wide_Text_IO_Integer_IO,
+       Ada_Wide_Wide_Text_IO_Modular_IO,
+ 
        --  Interfaces
  
        Interfaces,
*************** package Rtsfind is
*** 279,284 ****
--- 291,297 ----
        System_Pack_63,
        System_Parameters,
        System_Partition_Interface,
+       System_PolyORB_Interface,
        System_Pool_Global,
        System_Pool_Empty,
        System_Pool_Local,
*************** package Rtsfind is
*** 342,348 ****
        System_Tasking_Stages);
  
     subtype Ada_Child is RTU_Id
!      range Ada_Calendar .. Ada_Wide_Text_IO_Modular_IO;
     --  Range of values for children or grand-children of Ada
  
     subtype Ada_Calendar_Child is Ada_Child
--- 355,361 ----
        System_Tasking_Stages);
  
     subtype Ada_Child is RTU_Id
!      range Ada_Calendar .. Ada_Wide_Wide_Text_IO_Modular_IO;
     --  Range of values for children or grand-children of Ada
  
     subtype Ada_Calendar_Child is Ada_Child
*************** package Rtsfind is
*** 372,377 ****
--- 385,394 ----
       range Ada_Wide_Text_IO_Decimal_IO .. Ada_Wide_Text_IO_Modular_IO;
     --  Range of values for children of Ada.Text_IO
  
+    subtype Ada_Wide_Wide_Text_IO_Child is Ada_Child
+      range Ada_Wide_Wide_Text_IO_Decimal_IO ..
+            Ada_Wide_Wide_Text_IO_Modular_IO;
+ 
     subtype Interfaces_Child is RTU_Id
       range Interfaces_CPP .. Interfaces_Packed_Decimal;
     --  Range of values for children of Interfaces
*************** package Rtsfind is
*** 449,454 ****
--- 466,478 ----
       RE_List_Controller,                 -- Ada.Finalization.List_Controller
  
       RE_Interrupt_ID,                    -- Ada.Interrupts
+      RE_Is_Reserved,                     -- Ada.Interrupts
+      RE_Is_Attached,                     -- Ada.Interrupts
+      RE_Current_Handler,                 -- Ada.Interrupts
+      RE_Attach_Handler,                  -- Ada.Interrupts
+      RE_Exchange_Handler,                -- Ada.Interrupts
+      RE_Detach_Handler,                  -- Ada.Interrupts
+      RE_Reference,                       -- Ada.Interrupts
  
       RE_Names,                           -- Ada.Interupts.Names
  
*************** package Rtsfind is
*** 488,494 ****
  
       RE_Abort_Task,                      -- Ada.Task_Identification
       RE_Current_Task,                    -- Ada.Task_Identification
!      RO_AT_Task_ID,                      -- Ada.Task_Identification
  
       RO_CA_Time,                         -- Ada.Calendar
  
--- 512,518 ----
  
       RE_Abort_Task,                      -- Ada.Task_Identification
       RE_Current_Task,                    -- Ada.Task_Identification
!      RO_AT_Task_Id,                      -- Ada.Task_Identification
  
       RO_CA_Time,                         -- Ada.Calendar
  
*************** package Rtsfind is
*** 692,697 ****
--- 716,722 ----
       RE_Image_Unsigned,                  -- System.Img_Uns
  
       RE_Image_Wide_Character,            -- System.Img_WChar
+      RE_Image_Wide_Wide_Character,       -- System.Img_WChar
  
       RE_Bind_Interrupt_To_Entry,         -- System.Interrupts
       RE_Default_Interrupt_Priority,      -- System.Interrupts
*************** package Rtsfind is
*** 996,1001 ****
--- 1021,1027 ----
       RE_Size_Type,                       -- System.Parameters
       RE_Unspecified_Size,                -- System.Parameters
  
+      RE_DSA_Implementation,              -- System.Partition_Interface
       RE_Get_Active_Partition_Id,         -- System.Partition_Interface
       RE_Get_Passive_Partition_Id,        -- System.Partition_Interface
       RE_Get_Local_Partition_Id,          -- System.Partition_Interface
*************** package Rtsfind is
*** 1003,1026 ****
       RE_Get_Unique_Remote_Pointer,       -- System.Partition_Interface
       RE_RACW_Stub_Type,                  -- System.Partition_Interface
       RE_RACW_Stub_Type_Access,           -- System.Partition_Interface
!      RE_Raise_Program_Error_For_E_4_18,  -- System.Partition_Interface
       RE_Raise_Program_Error_Unknown_Tag, -- System.Partition_Interface
       RE_Register_Passive_Package,        -- System.Partition_Interface
       RE_Register_Receiving_Stub,         -- System.Partition_Interface
!      RE_RCI_Info,                        -- System.Partition_Interface
       RE_Subprogram_Id,                   -- System.Partition_Interface
  
       RE_Global_Pool_Object,              -- System.Pool_Global
  
-      RE_Unbounded_Reclaim_Pool,          -- System.Pool_Local
- 
       RE_Stack_Bounded_Pool,              -- System.Pool_Size
  
       RE_Do_Apc,                          -- System.RPC
       RE_Do_Rpc,                          -- System.RPC
       RE_Params_Stream_Type,              -- System.RPC
       RE_Partition_ID,                    -- System.RPC
!      RE_RPC_Receiver,                    -- System.RPC
  
       RE_IS_Is1,                          -- System.Scalar_Values
       RE_IS_Is2,                          -- System.Scalar_Values
--- 1029,1184 ----
       RE_Get_Unique_Remote_Pointer,       -- System.Partition_Interface
       RE_RACW_Stub_Type,                  -- System.Partition_Interface
       RE_RACW_Stub_Type_Access,           -- System.Partition_Interface
!      RE_RAS_Proxy_Type,                  -- System.Partition_Interface
!      RE_RAS_Proxy_Type_Access,           -- System.Partition_Interface
       RE_Raise_Program_Error_Unknown_Tag, -- System.Partition_Interface
       RE_Register_Passive_Package,        -- System.Partition_Interface
       RE_Register_Receiving_Stub,         -- System.Partition_Interface
!      RE_Request_Access,                  -- System.Partition_Interface
!      RE_RCI_Locator,                     -- System.Partition_Interface
!      RE_RCI_Subp_Info,                   -- System.Partition_Interface
!      RE_RCI_Subp_Info_Array,             -- System.Partition_Interface
!      RE_Same_Partition,                  -- System.Partition_Interface
       RE_Subprogram_Id,                   -- System.Partition_Interface
+      RE_Get_RAS_Info,                    -- System.Partition_Interface
  
       RE_Global_Pool_Object,              -- System.Pool_Global
  
       RE_Stack_Bounded_Pool,              -- System.Pool_Size
  
       RE_Do_Apc,                          -- System.RPC
       RE_Do_Rpc,                          -- System.RPC
       RE_Params_Stream_Type,              -- System.RPC
       RE_Partition_ID,                    -- System.RPC
! 
!      RE_To_PolyORB_String,               -- System.PolyORB_Interface
!      RE_To_Standard_String,              -- System.PolyORB_Interface
!      RE_Caseless_String_Eq,              -- System.PolyORB_Interface
!      RE_TypeCode,                        -- System.PolyORB_Interface
!      RE_Any,                             -- System.PolyORB_Interface
!      RE_Mode_In,                         -- System.PolyORB_Interface
!      RE_Mode_Out,                        -- System.PolyORB_Interface
!      RE_Mode_Inout,                      -- System.PolyORB_Interface
!      RE_NamedValue,                      -- System.PolyORB_Interface
!      RE_Result_Name,                     -- System.PolyORB_Interface
!      RE_Object_Ref,                      -- System.PolyORB_Interface
!      RE_Create_Any,                      -- System.PolyORB_Interface
!      RE_Any_Aggregate_Build,             -- System.PolyORB_Interface
!      RE_Add_Aggregate_Element,           -- System.PolyORB_Interface
!      RE_Get_Aggregate_Element,           -- System.PolyORB_Interface
!      RE_Content_Type,                    -- System.PolyORB_Interface
!      RE_Any_Member_Type,                 -- System.PolyORB_Interface
!      RE_Get_Nested_Sequence_Length,      -- System.PolyORB_Interface
!      RE_Extract_Union_Value,             -- System.PolyORB_Interface
!      RE_NVList_Ref,                      -- System.PolyORB_Interface
!      RE_NVList_Create,                   -- System.PolyORB_Interface
!      RE_NVList_Add_Item,                 -- System.PolyORB_Interface
!      RE_Request_Create,                  -- System.PolyORB_Interface
!      RE_Request_Invoke,                  -- System.PolyORB_Interface
!      RE_Request_Arguments,               -- System.PolyORB_Interface
!      RE_Request_Set_Out,                 -- System.PolyORB_Interface
!      RE_Request_Raise_Occurrence,        -- System.PolyORB_Interface
!      RE_Nil_Exc_List,                    -- System.PolyORB_Interface
!      RE_Servant,                         -- System.PolyORB_Interface
!      RE_Copy_Any_Value,                  -- System.PolyORB_Interface
!      RE_Set_Result,                      -- System.PolyORB_Interface
!      RE_Register_Obj_Receiving_Stub,     -- System.PolyORB_Interface
!      RE_Register_Pkg_Receiving_Stub,     -- System.PolyORB_Interface
!      RE_Is_Nil,                          -- System.PolyORB_Interface
!      RE_Entity_Ptr,                      -- System.PolyORB_Interface
!      RE_Entity_Of,                       -- System.PolyORB_Interface
!      RE_Inc_Usage,                       -- System.PolyORB_Interface
!      RE_Set_Ref,                         -- System.PolyORB_Interface
!      RE_Make_Ref,                        -- System.PolyORB_Interface
!      RE_Get_Local_Address,               -- System.PolyORB_Interface
!      RE_Get_Reference,                   -- System.PolyORB_Interface
!      RE_Local_Oid_To_Address,            -- System.PolyORB_Interface
!      RE_Asynchronous_P_To_Sync_Scope,    -- System.PolyORB_Interface
!      RE_Buffer_Stream_Type,              -- System.PolyORB_Interface
!      RE_Allocate_Buffer,                 -- System.PolyORB_Interface
!      RE_Release_Buffer,                  -- System.PolyORB_Interface
!      RE_BS_To_Any,                       -- System.PolyORB_Interface
!      RE_Any_To_BS,                       -- System.PolyORB_Interface
! 
!      RE_FA_AD,                           -- System.PolyORB_Interface
!      RE_FA_AS,                           -- System.PolyORB_Interface
!      RE_FA_B,                            -- System.PolyORB_Interface
!      RE_FA_C,                            -- System.PolyORB_Interface
!      RE_FA_F,                            -- System.PolyORB_Interface
!      RE_FA_I,                            -- System.PolyORB_Interface
!      RE_FA_LF,                           -- System.PolyORB_Interface
!      RE_FA_LI,                           -- System.PolyORB_Interface
!      RE_FA_LLF,                          -- System.PolyORB_Interface
!      RE_FA_LLI,                          -- System.PolyORB_Interface
!      RE_FA_LLU,                          -- System.PolyORB_Interface
!      RE_FA_LU,                           -- System.PolyORB_Interface
!      RE_FA_SF,                           -- System.PolyORB_Interface
!      RE_FA_SI,                           -- System.PolyORB_Interface
!      RE_FA_SSI,                          -- System.PolyORB_Interface
!      RE_FA_SSU,                          -- System.PolyORB_Interface
!      RE_FA_SU,                           -- System.PolyORB_Interface
!      RE_FA_U,                            -- System.PolyORB_Interface
!      RE_FA_WC,                           -- System.PolyORB_Interface
!      RE_FA_WWC,                          -- System.PolyORB_Interface
!      RE_FA_String,                       -- System.PolyORB_Interface
!      RE_FA_ObjRef,                       -- System.PolyORB_Interface
! 
!      RE_TA_AD,                           -- System.PolyORB_Interface
!      RE_TA_AS,                           -- System.PolyORB_Interface
!      RE_TA_B,                            -- System.PolyORB_Interface
!      RE_TA_C,                            -- System.PolyORB_Interface
!      RE_TA_F,                            -- System.PolyORB_Interface
!      RE_TA_I,                            -- System.PolyORB_Interface
!      RE_TA_LF,                           -- System.PolyORB_Interface
!      RE_TA_LI,                           -- System.PolyORB_Interface
!      RE_TA_LLF,                          -- System.PolyORB_Interface
!      RE_TA_LLI,                          -- System.PolyORB_Interface
!      RE_TA_LLU,                          -- System.PolyORB_Interface
!      RE_TA_LU,                           -- System.PolyORB_Interface
!      RE_TA_SF,                           -- System.PolyORB_Interface
!      RE_TA_SI,                           -- System.PolyORB_Interface
!      RE_TA_SSI,                          -- System.PolyORB_Interface
!      RE_TA_SSU,                          -- System.PolyORB_Interface
!      RE_TA_SU,                           -- System.PolyORB_Interface
!      RE_TA_U,                            -- System.PolyORB_Interface
!      RE_TA_WC,                           -- System.PolyORB_Interface
!      RE_TA_WWC,                          -- System.PolyORB_Interface
!      RE_TA_String,                       -- System.PolyORB_Interface
!      RE_TA_ObjRef,                       -- System.PolyORB_Interface
!      RE_TA_TC,                           -- System.PolyORB_Interface
! 
!      RE_TC_Alias,                        -- System.PolyORB_Interface
!      RE_TC_Build,                        -- System.PolyORB_Interface
!      RE_Set_TC,                          -- System.PolyORB_Interface
!      RE_TC_Any,                          -- System.PolyORB_Interface
!      RE_TC_AD,                           -- System.PolyORB_Interface
!      RE_TC_AS,                           -- System.PolyORB_Interface
!      RE_TC_B,                            -- System.PolyORB_Interface
!      RE_TC_C,                            -- System.PolyORB_Interface
!      RE_TC_F,                            -- System.PolyORB_Interface
!      RE_TC_I,                            -- System.PolyORB_Interface
!      RE_TC_LF,                           -- System.PolyORB_Interface
!      RE_TC_LI,                           -- System.PolyORB_Interface
!      RE_TC_LLF,                          -- System.PolyORB_Interface
!      RE_TC_LLI,                          -- System.PolyORB_Interface
!      RE_TC_LLU,                          -- System.PolyORB_Interface
!      RE_TC_LU,                           -- System.PolyORB_Interface
!      RE_TC_SF,                           -- System.PolyORB_Interface
!      RE_TC_SI,                           -- System.PolyORB_Interface
!      RE_TC_SSI,                          -- System.PolyORB_Interface
!      RE_TC_SSU,                          -- System.PolyORB_Interface
!      RE_TC_SU,                           -- System.PolyORB_Interface
!      RE_TC_U,                            -- System.PolyORB_Interface
!      RE_TC_Void,                         -- System.PolyORB_Interface
!      RE_TC_Opaque,                       -- System.PolyORB_Interface,
!      RE_TC_WC,                           -- System.PolyORB_Interface
!      RE_TC_WWC,                          -- System.PolyORB_Interface
!      RE_TC_Array,                        -- System.PolyORB_Interface,
!      RE_TC_Sequence,                     -- System.PolyORB_Interface,
!      RE_TC_String,                       -- System.PolyORB_Interface,
!      RE_TC_Struct,                       -- System.PolyORB_Interface,
!      RE_TC_Union,                        -- System.PolyORB_Interface,
!      RE_TC_Object,                       -- System.PolyORB_Interface,
  
       RE_IS_Is1,                          -- System.Scalar_Values
       RE_IS_Is2,                          -- System.Scalar_Values
*************** package Rtsfind is
*** 1030,1035 ****
--- 1188,1197 ----
       RE_IS_Iu2,                          -- System.Scalar_Values
       RE_IS_Iu4,                          -- System.Scalar_Values
       RE_IS_Iu8,                          -- System.Scalar_Values
+      RE_IS_Iz1,                          -- System.Scalar_Values
+      RE_IS_Iz2,                          -- System.Scalar_Values
+      RE_IS_Iz4,                          -- System.Scalar_Values
+      RE_IS_Iz8,                          -- System.Scalar_Values
       RE_IS_Isf,                          -- System.Scalar_Values
       RE_IS_Ifl,                          -- System.Scalar_Values
       RE_IS_Ilf,                          -- System.Scalar_Values
*************** package Rtsfind is
*** 1049,1054 ****
--- 1211,1217 ----
       RE_Shared_Var_WOpen,                -- System.Shared_Storage
  
       RE_Abort_Undefer_Direct,            -- System.Standard_Library
+      RE_Exception_Code,                  -- System.Standard_Library
       RE_Exception_Data_Ptr,              -- System.Standard_Library
  
       RE_Integer_Address,                 -- System.Storage_Elements
*************** package Rtsfind is
*** 1082,1087 ****
--- 1245,1251 ----
       RE_I_SU,                            -- System.Stream_Attributes
       RE_I_U,                             -- System.Stream_Attributes
       RE_I_WC,                            -- System.Stream_Attributes
+      RE_I_WWC,                           -- System.Stream_Attributes
  
       RE_W_AD,                            -- System.Stream_Attributes
       RE_W_AS,                            -- System.Stream_Attributes
*************** package Rtsfind is
*** 1102,1107 ****
--- 1266,1272 ----
       RE_W_SU,                            -- System.Stream_Attributes
       RE_W_U,                             -- System.Stream_Attributes
       RE_W_WC,                            -- System.Stream_Attributes
+      RE_W_WWC,                           -- System.Stream_Attributes
  
       RE_Block_Stream_Ops_OK,             -- System.Stream_Attributes
  
*************** package Rtsfind is
*** 1109,1116 ****
       RE_Str_Concat_CC,                   -- System.String_Ops
       RE_Str_Concat_CS,                   -- System.String_Ops
       RE_Str_Concat_SC,                   -- System.String_Ops
-      RE_Str_Normalize,                   -- System.String_Ops
-      RE_Wide_Str_Normalize,              -- System.String_Ops
  
       RE_Str_Concat_3,                    -- System.String_Ops_Concat_3
  
--- 1274,1279 ----
*************** package Rtsfind is
*** 1125,1131 ****
  
       RE_Task_Procedure_Access,           -- System.Tasking
  
!      RO_ST_Task_ID,                      -- System.Tasking
  
       RE_Call_Modes,                      -- System.Tasking
       RE_Simple_Call,                     -- System.Tasking
--- 1288,1294 ----
  
       RE_Task_Procedure_Access,           -- System.Tasking
  
!      RO_ST_Task_Id,                      -- System.Tasking
  
       RE_Call_Modes,                      -- System.Tasking
       RE_Simple_Call,                     -- System.Tasking
*************** package Rtsfind is
*** 1133,1138 ****
--- 1296,1303 ----
       RE_Asynchronous_Call,               -- System.Tasking
       RE_Timed_Call,                      -- System.Tasking
  
+      RE_Ada_Task_Control_Block,          -- System.Tasking
+ 
       RE_Task_List,                       -- System.Tasking
  
       RE_Accept_Alternative,              -- System.Tasking
*************** package Rtsfind is
*** 1208,1213 ****
--- 1373,1379 ----
       RE_Value_Unsigned,                  -- System.Val_Uns
  
       RE_Value_Wide_Character,            -- System.Val_WChar
+      RE_Value_Wide_Wide_Character,       -- System.Val_WChar
  
       RE_D,                               -- System.Vax_Float_Operations
       RE_F,                               -- System.Vax_Float_Operations
*************** package Rtsfind is
*** 1256,1271 ****
--- 1422,1447 ----
       RE_Register_VMS_Exception,          -- System.VMS_Exception_Table
  
       RE_String_To_Wide_String,           -- System.WCh_StW
+      RE_String_To_Wide_Wide_String,      -- System.WCh_StW
  
       RE_Wide_String_To_String,           -- System.WCh_WtS
+      RE_Wide_Wide_String_To_String,      -- System.WCh_WtS
  
       RE_Wide_Width_Character,            -- System.WWd_Char
+      RE_Wide_Wide_Width_Character,       -- System.WWd_Char
+ 
+      RE_Wide_Wide_Width_Enumeration_8,   -- System.WWd_Enum
+      RE_Wide_Wide_Width_Enumeration_16,  -- System.WWd_Enum
+      RE_Wide_Wide_Width_Enumeration_32,  -- System.WWd_Enum
  
       RE_Wide_Width_Enumeration_8,        -- System.WWd_Enum
       RE_Wide_Width_Enumeration_16,       -- System.WWd_Enum
       RE_Wide_Width_Enumeration_32,       -- System.WWd_Enum
  
+      RE_Wide_Wide_Width_Wide_Character,  -- System.WWd_Wchar
+      RE_Wide_Wide_Width_Wide_Wide_Char,  -- System.WWd_Wchar
       RE_Wide_Width_Wide_Character,       -- System.WWd_Wchar
+      RE_Wide_Width_Wide_Wide_Character,  -- System.WWd_Wchar
  
       RE_Width_Boolean,                   -- System.Wid_Bool
  
*************** package Rtsfind is
*** 1280,1285 ****
--- 1456,1462 ----
       RE_Width_Long_Long_Unsigned,        -- System.Wid_LLU
  
       RE_Width_Wide_Character,            -- System.Wid_WChar
+      RE_Width_Wide_Wide_Character,       -- System.Wid_WChar
  
       RE_Protected_Entry_Body_Array,      -- Tasking.Protected_Objects.Entries
       RE_Protection_Entries,              -- Tasking.Protected_Objects.Entries
*************** package Rtsfind is
*** 1391,1396 ****
--- 1568,1580 ----
       RE_List_Controller                  => Ada_Finalization_List_Controller,
  
       RE_Interrupt_ID                     => Ada_Interrupts,
+      RE_Is_Reserved                      => Ada_Interrupts,
+      RE_Is_Attached                      => Ada_Interrupts,
+      RE_Current_Handler                  => Ada_Interrupts,
+      RE_Attach_Handler                   => Ada_Interrupts,
+      RE_Exchange_Handler                 => Ada_Interrupts,
+      RE_Detach_Handler                   => Ada_Interrupts,
+      RE_Reference                        => Ada_Interrupts,
  
       RE_Names                            => Ada_Interrupts_Names,
  
*************** package Rtsfind is
*** 1430,1436 ****
  
       RE_Abort_Task                       => Ada_Task_Identification,
       RE_Current_Task                     => Ada_Task_Identification,
!      RO_AT_Task_ID                       => Ada_Task_Identification,
  
       RO_CA_Time                          => Ada_Calendar,
       RO_CA_Delay_For                     => Ada_Calendar_Delays,
--- 1614,1620 ----
  
       RE_Abort_Task                       => Ada_Task_Identification,
       RE_Current_Task                     => Ada_Task_Identification,
!      RO_AT_Task_Id                       => Ada_Task_Identification,
  
       RO_CA_Time                          => Ada_Calendar,
       RO_CA_Delay_For                     => Ada_Calendar_Delays,
*************** package Rtsfind is
*** 1632,1637 ****
--- 1816,1822 ----
       RE_Image_Unsigned                   => System_Img_Uns,
  
       RE_Image_Wide_Character             => System_Img_WChar,
+      RE_Image_Wide_Wide_Character        => System_Img_WChar,
  
       RE_Bind_Interrupt_To_Entry          => System_Interrupts,
       RE_Default_Interrupt_Priority       => System_Interrupts,
*************** package Rtsfind is
*** 1936,1941 ****
--- 2121,2127 ----
       RE_Size_Type                        => System_Parameters,
       RE_Unspecified_Size                 => System_Parameters,
  
+      RE_DSA_Implementation               => System_Partition_Interface,
       RE_Get_Active_Partition_Id          => System_Partition_Interface,
       RE_Get_Passive_Partition_Id         => System_Partition_Interface,
       RE_Get_Local_Partition_Id           => System_Partition_Interface,
*************** package Rtsfind is
*** 1943,1958 ****
       RE_Get_Unique_Remote_Pointer        => System_Partition_Interface,
       RE_RACW_Stub_Type                   => System_Partition_Interface,
       RE_RACW_Stub_Type_Access            => System_Partition_Interface,
!      RE_Raise_Program_Error_For_E_4_18   => System_Partition_Interface,
       RE_Raise_Program_Error_Unknown_Tag  => System_Partition_Interface,
       RE_Register_Passive_Package         => System_Partition_Interface,
       RE_Register_Receiving_Stub          => System_Partition_Interface,
!      RE_RCI_Info                         => System_Partition_Interface,
       RE_Subprogram_Id                    => System_Partition_Interface,
  
!      RE_Global_Pool_Object               => System_Pool_Global,
  
!      RE_Unbounded_Reclaim_Pool           => System_Pool_Local,
  
       RE_Stack_Bounded_Pool               => System_Pool_Size,
  
--- 2129,2277 ----
       RE_Get_Unique_Remote_Pointer        => System_Partition_Interface,
       RE_RACW_Stub_Type                   => System_Partition_Interface,
       RE_RACW_Stub_Type_Access            => System_Partition_Interface,
!      RE_RAS_Proxy_Type                   => System_Partition_Interface,
!      RE_RAS_Proxy_Type_Access            => System_Partition_Interface,
       RE_Raise_Program_Error_Unknown_Tag  => System_Partition_Interface,
       RE_Register_Passive_Package         => System_Partition_Interface,
       RE_Register_Receiving_Stub          => System_Partition_Interface,
!      RE_Request_Access                   => System_Partition_Interface,
!      RE_RCI_Locator                      => System_Partition_Interface,
!      RE_RCI_Subp_Info                    => System_Partition_Interface,
!      RE_RCI_Subp_Info_Array              => System_Partition_Interface,
!      RE_Same_Partition                   => System_Partition_Interface,
       RE_Subprogram_Id                    => System_Partition_Interface,
+      RE_Get_RAS_Info                     => System_Partition_Interface,
  
!      RE_To_PolyORB_String                => System_PolyORB_Interface,
!      RE_To_Standard_String               => System_PolyORB_Interface,
!      RE_Caseless_String_Eq               => System_PolyORB_Interface,
!      RE_TypeCode                         => System_PolyORB_Interface,
!      RE_Any                              => System_PolyORB_Interface,
!      RE_Mode_In                          => System_PolyORB_Interface,
!      RE_Mode_Out                         => System_PolyORB_Interface,
!      RE_Mode_Inout                       => System_PolyORB_Interface,
!      RE_NamedValue                       => System_PolyORB_Interface,
!      RE_Result_Name                      => System_PolyORB_Interface,
!      RE_Object_Ref                       => System_PolyORB_Interface,
!      RE_Create_Any                       => System_PolyORB_Interface,
!      RE_Any_Aggregate_Build              => System_PolyORB_Interface,
!      RE_Add_Aggregate_Element            => System_PolyORB_Interface,
!      RE_Get_Aggregate_Element            => System_PolyORB_Interface,
!      RE_Content_Type                     => System_PolyORB_Interface,
!      RE_Any_Member_Type                  => System_PolyORB_Interface,
!      RE_Get_Nested_Sequence_Length       => System_PolyORB_Interface,
!      RE_Extract_Union_Value              => System_PolyORB_Interface,
!      RE_NVList_Ref                       => System_PolyORB_Interface,
!      RE_NVList_Create                    => System_PolyORB_Interface,
!      RE_NVList_Add_Item                  => System_PolyORB_Interface,
!      RE_Request_Create                   => System_PolyORB_Interface,
!      RE_Request_Invoke                   => System_PolyORB_Interface,
!      RE_Request_Arguments                => System_PolyORB_Interface,
!      RE_Request_Set_Out                  => System_PolyORB_Interface,
!      RE_Request_Raise_Occurrence         => System_PolyORB_Interface,
!      RE_Nil_Exc_List                     => System_PolyORB_Interface,
!      RE_Servant                          => System_PolyORB_Interface,
!      RE_Copy_Any_Value                   => System_PolyORB_Interface,
!      RE_Set_Result                       => System_PolyORB_Interface,
!      RE_Register_Obj_Receiving_Stub      => System_PolyORB_Interface,
!      RE_Register_Pkg_Receiving_Stub      => System_PolyORB_Interface,
!      RE_Is_Nil                           => System_PolyORB_Interface,
!      RE_Entity_Ptr                       => System_PolyORB_Interface,
!      RE_Entity_Of                        => System_PolyORB_Interface,
!      RE_Inc_Usage                        => System_PolyORB_Interface,
!      RE_Set_Ref                          => System_PolyORB_Interface,
!      RE_Make_Ref                         => System_PolyORB_Interface,
!      RE_Get_Local_Address                => System_PolyORB_Interface,
!      RE_Get_Reference                    => System_PolyORB_Interface,
!      RE_Local_Oid_To_Address             => System_PolyORB_Interface,
!      RE_Asynchronous_P_To_Sync_Scope     => System_PolyORB_Interface,
!      RE_Buffer_Stream_Type               => System_PolyORB_Interface,
!      RE_Allocate_Buffer                  => System_PolyORB_Interface,
!      RE_Release_Buffer                   => System_PolyORB_Interface,
!      RE_BS_To_Any                        => System_PolyORB_Interface,
!      RE_Any_To_BS                        => System_PolyORB_Interface,
  
!      RE_FA_AD                            => System_PolyORB_Interface,
!      RE_FA_AS                            => System_PolyORB_Interface,
!      RE_FA_B                             => System_PolyORB_Interface,
!      RE_FA_C                             => System_PolyORB_Interface,
!      RE_FA_F                             => System_PolyORB_Interface,
!      RE_FA_I                             => System_PolyORB_Interface,
!      RE_FA_LF                            => System_PolyORB_Interface,
!      RE_FA_LI                            => System_PolyORB_Interface,
!      RE_FA_LLF                           => System_PolyORB_Interface,
!      RE_FA_LLI                           => System_PolyORB_Interface,
!      RE_FA_LLU                           => System_PolyORB_Interface,
!      RE_FA_LU                            => System_PolyORB_Interface,
!      RE_FA_SF                            => System_PolyORB_Interface,
!      RE_FA_SI                            => System_PolyORB_Interface,
!      RE_FA_SSI                           => System_PolyORB_Interface,
!      RE_FA_SSU                           => System_PolyORB_Interface,
!      RE_FA_SU                            => System_PolyORB_Interface,
!      RE_FA_U                             => System_PolyORB_Interface,
!      RE_FA_WC                            => System_PolyORB_Interface,
!      RE_FA_WWC                           => System_PolyORB_Interface,
!      RE_FA_String                        => System_PolyORB_Interface,
!      RE_FA_ObjRef                        => System_PolyORB_Interface,
! 
!      RE_TA_AD                            => System_PolyORB_Interface,
!      RE_TA_AS                            => System_PolyORB_Interface,
!      RE_TA_B                             => System_PolyORB_Interface,
!      RE_TA_C                             => System_PolyORB_Interface,
!      RE_TA_F                             => System_PolyORB_Interface,
!      RE_TA_I                             => System_PolyORB_Interface,
!      RE_TA_LF                            => System_PolyORB_Interface,
!      RE_TA_LI                            => System_PolyORB_Interface,
!      RE_TA_LLF                           => System_PolyORB_Interface,
!      RE_TA_LLI                           => System_PolyORB_Interface,
!      RE_TA_LLU                           => System_PolyORB_Interface,
!      RE_TA_LU                            => System_PolyORB_Interface,
!      RE_TA_SF                            => System_PolyORB_Interface,
!      RE_TA_SI                            => System_PolyORB_Interface,
!      RE_TA_SSI                           => System_PolyORB_Interface,
!      RE_TA_SSU                           => System_PolyORB_Interface,
!      RE_TA_SU                            => System_PolyORB_Interface,
!      RE_TA_U                             => System_PolyORB_Interface,
!      RE_TA_WC                            => System_PolyORB_Interface,
!      RE_TA_WWC                           => System_PolyORB_Interface,
!      RE_TA_String                        => System_PolyORB_Interface,
!      RE_TA_ObjRef                        => System_PolyORB_Interface,
!      RE_TA_TC                            => System_PolyORB_Interface,
! 
!      RE_TC_Alias                         => System_PolyORB_Interface,
!      RE_TC_Build                         => System_PolyORB_Interface,
!      RE_Set_TC                           => System_PolyORB_Interface,
!      RE_TC_Any                           => System_PolyORB_Interface,
!      RE_TC_AD                            => System_PolyORB_Interface,
!      RE_TC_AS                            => System_PolyORB_Interface,
!      RE_TC_B                             => System_PolyORB_Interface,
!      RE_TC_C                             => System_PolyORB_Interface,
!      RE_TC_F                             => System_PolyORB_Interface,
!      RE_TC_I                             => System_PolyORB_Interface,
!      RE_TC_LF                            => System_PolyORB_Interface,
!      RE_TC_LI                            => System_PolyORB_Interface,
!      RE_TC_LLF                           => System_PolyORB_Interface,
!      RE_TC_LLI                           => System_PolyORB_Interface,
!      RE_TC_LLU                           => System_PolyORB_Interface,
!      RE_TC_LU                            => System_PolyORB_Interface,
!      RE_TC_SF                            => System_PolyORB_Interface,
!      RE_TC_SI                            => System_PolyORB_Interface,
!      RE_TC_SSI                           => System_PolyORB_Interface,
!      RE_TC_SSU                           => System_PolyORB_Interface,
!      RE_TC_SU                            => System_PolyORB_Interface,
!      RE_TC_U                             => System_PolyORB_Interface,
!      RE_TC_Void                          => System_PolyORB_Interface,
!      RE_TC_Opaque                        => System_PolyORB_Interface,
!      RE_TC_WC                            => System_PolyORB_Interface,
!      RE_TC_WWC                           => System_PolyORB_Interface,
!      RE_TC_Array                         => System_PolyORB_Interface,
!      RE_TC_Sequence                      => System_PolyORB_Interface,
!      RE_TC_String                        => System_PolyORB_Interface,
!      RE_TC_Struct                        => System_PolyORB_Interface,
!      RE_TC_Union                         => System_PolyORB_Interface,
!      RE_TC_Object                        => System_PolyORB_Interface,
! 
!      RE_Global_Pool_Object               => System_Pool_Global,
  
       RE_Stack_Bounded_Pool               => System_Pool_Size,
  
*************** package Rtsfind is
*** 1960,1966 ****
       RE_Do_Rpc                           => System_RPC,
       RE_Params_Stream_Type               => System_RPC,
       RE_Partition_ID                     => System_RPC,
-      RE_RPC_Receiver                     => System_RPC,
  
       RE_IS_Is1                           => System_Scalar_Values,
       RE_IS_Is2                           => System_Scalar_Values,
--- 2279,2284 ----
*************** package Rtsfind is
*** 1970,1975 ****
--- 2288,2297 ----
       RE_IS_Iu2                           => System_Scalar_Values,
       RE_IS_Iu4                           => System_Scalar_Values,
       RE_IS_Iu8                           => System_Scalar_Values,
+      RE_IS_Iz1                           => System_Scalar_Values,
+      RE_IS_Iz2                           => System_Scalar_Values,
+      RE_IS_Iz4                           => System_Scalar_Values,
+      RE_IS_Iz8                           => System_Scalar_Values,
       RE_IS_Isf                           => System_Scalar_Values,
       RE_IS_Ifl                           => System_Scalar_Values,
       RE_IS_Ilf                           => System_Scalar_Values,
*************** package Rtsfind is
*** 1989,1994 ****
--- 2311,2317 ----
       RE_Shared_Var_WOpen                 => System_Shared_Storage,
  
       RE_Abort_Undefer_Direct             => System_Standard_Library,
+      RE_Exception_Code                   => System_Standard_Library,
       RE_Exception_Data_Ptr               => System_Standard_Library,
  
       RE_Integer_Address                  => System_Storage_Elements,
*************** package Rtsfind is
*** 2022,2027 ****
--- 2345,2351 ----
       RE_I_SU                             => System_Stream_Attributes,
       RE_I_U                              => System_Stream_Attributes,
       RE_I_WC                             => System_Stream_Attributes,
+      RE_I_WWC                            => System_Stream_Attributes,
  
       RE_W_AD                             => System_Stream_Attributes,
       RE_W_AS                             => System_Stream_Attributes,
*************** package Rtsfind is
*** 2042,2053 ****
       RE_W_SU                             => System_Stream_Attributes,
       RE_W_U                              => System_Stream_Attributes,
       RE_W_WC                             => System_Stream_Attributes,
! 
       RE_Block_Stream_Ops_OK              => System_Stream_Attributes,
  
       RE_Str_Concat                       => System_String_Ops,
-      RE_Str_Normalize                    => System_String_Ops,
-      RE_Wide_Str_Normalize               => System_String_Ops,
       RE_Str_Concat_CC                    => System_String_Ops,
       RE_Str_Concat_CS                    => System_String_Ops,
       RE_Str_Concat_SC                    => System_String_Ops,
--- 2366,2375 ----
       RE_W_SU                             => System_Stream_Attributes,
       RE_W_U                              => System_Stream_Attributes,
       RE_W_WC                             => System_Stream_Attributes,
!      RE_W_WWC                            => System_Stream_Attributes,
       RE_Block_Stream_Ops_OK              => System_Stream_Attributes,
  
       RE_Str_Concat                       => System_String_Ops,
       RE_Str_Concat_CC                    => System_String_Ops,
       RE_Str_Concat_CS                    => System_String_Ops,
       RE_Str_Concat_SC                    => System_String_Ops,
*************** package Rtsfind is
*** 2065,2071 ****
  
       RE_Task_Procedure_Access            => System_Tasking,
  
!      RO_ST_Task_ID                       => System_Tasking,
  
       RE_Call_Modes                       => System_Tasking,
       RE_Simple_Call                      => System_Tasking,
--- 2387,2393 ----
  
       RE_Task_Procedure_Access            => System_Tasking,
  
!      RO_ST_Task_Id                       => System_Tasking,
  
       RE_Call_Modes                       => System_Tasking,
       RE_Simple_Call                      => System_Tasking,
*************** package Rtsfind is
*** 2073,2078 ****
--- 2395,2402 ----
       RE_Asynchronous_Call                => System_Tasking,
       RE_Timed_Call                       => System_Tasking,
  
+      RE_Ada_Task_Control_Block           => System_Tasking,
+ 
       RE_Task_List                        => System_Tasking,
  
       RE_Accept_Alternative               => System_Tasking,
*************** package Rtsfind is
*** 2148,2153 ****
--- 2472,2478 ----
       RE_Value_Unsigned                   => System_Val_Uns,
  
       RE_Value_Wide_Character             => System_Val_WChar,
+      RE_Value_Wide_Wide_Character        => System_Val_WChar,
  
       RE_D                                => System_Vax_Float_Operations,
       RE_F                                => System_Vax_Float_Operations,
*************** package Rtsfind is
*** 2196,2211 ****
--- 2521,2547 ----
       RE_Register_VMS_Exception           => System_VMS_Exception_Table,
  
       RE_String_To_Wide_String            => System_WCh_StW,
+      RE_String_To_Wide_Wide_String       => System_WCh_StW,
  
       RE_Wide_String_To_String            => System_WCh_WtS,
+      RE_Wide_Wide_String_To_String       => System_WCh_WtS,
  
+      RE_Wide_Wide_Width_Character        => System_WWd_Char,
       RE_Wide_Width_Character             => System_WWd_Char,
  
+      RE_Wide_Wide_Width_Enumeration_8    => System_WWd_Enum,
+      RE_Wide_Wide_Width_Enumeration_16   => System_WWd_Enum,
+      RE_Wide_Wide_Width_Enumeration_32   => System_WWd_Enum,
+ 
       RE_Wide_Width_Enumeration_8         => System_WWd_Enum,
       RE_Wide_Width_Enumeration_16        => System_WWd_Enum,
       RE_Wide_Width_Enumeration_32        => System_WWd_Enum,
  
+      RE_Wide_Wide_Width_Wide_Character   => System_WWd_Wchar,
+      RE_Wide_Wide_Width_Wide_Wide_Char   => System_WWd_Wchar,
+ 
       RE_Wide_Width_Wide_Character        => System_WWd_Wchar,
+      RE_Wide_Width_Wide_Wide_Character   => System_WWd_Wchar,
  
       RE_Width_Boolean                    => System_Wid_Bool,
  
*************** package Rtsfind is
*** 2220,2225 ****
--- 2556,2562 ----
       RE_Width_Long_Long_Unsigned         => System_Wid_LLU,
  
       RE_Width_Wide_Character             => System_Wid_WChar,
+      RE_Width_Wide_Wide_Character        => System_Wid_WChar,
  
       RE_Protected_Entry_Body_Array       =>
         System_Tasking_Protected_Objects_Entries,
*************** package Rtsfind is
*** 2420,2426 ****
     --
     --  If RTE returns, the returned value is the required entity
     --
!    --  If the entity is not available, then an error message is given The
     --  form of the message depends on whether we are in configurable run time
     --  mode or not. In configurable run time mode, a missing entity is not
     --  that surprising and merely says that the particular construct is not
--- 2757,2763 ----
     --
     --  If RTE returns, the returned value is the required entity
     --
!    --  If the entity is not available, then an error message is given. The
     --  form of the message depends on whether we are in configurable run time
     --  mode or not. In configurable run time mode, a missing entity is not
     --  that surprising and merely says that the particular construct is not
*************** package Rtsfind is
*** 2451,2456 ****
--- 2788,2802 ----
     --  exception and without generating an error message, i.e. if the
     --  call will obtain the desired entity without any problems.
  
+    function RTU_Loaded (U : RTU_Id) return Boolean;
+    pragma Inline (RTU_Loaded);
+    --  Returns true if indicated unit has already been successfully loaded.
+    --  If the unit has not been loaded, returns False. Note that this does
+    --  not mean that an attempt to load it subsequently would fail.
+ 
+    procedure Set_RTU_Loaded (N : Node_Id);
+    --  Register the predefined unit N as already loaded.
+ 
     procedure Text_IO_Kludge (Nam : Node_Id);
     --  In Ada 83, and hence for compatibility in Ada 9X, package Text_IO has
     --  generic subpackages (e.g. Integer_IO). They really should be child
*************** package Rtsfind is
*** 2462,2474 ****
     --  with'ed automatically. The important result of this approach is that
     --  Text_IO does not drag in all the code for the subpackages unless they
     --  are used. Our test is a little crude, and could drag in stuff when it
!    --  is not necessary, but that doesn't matter. Wide_Text_IO is handled in
!    --  a similar manner.
  
     function Is_Text_IO_Kludge_Unit (Nam : Node_Id) return Boolean;
!    --  Returns True if the given Nam is an Expanded Name, whose Prefix is
!    --  Ada, and whose selector is either Text_IO.xxx or Wide_Text_IO.xxx
!    --  where xxx is one of the subpackages of Text_IO that is specially
!    --  handled as described above for Text_IO_Kludge.
  
  end Rtsfind;
--- 2808,2820 ----
     --  with'ed automatically. The important result of this approach is that
     --  Text_IO does not drag in all the code for the subpackages unless they
     --  are used. Our test is a little crude, and could drag in stuff when it
!    --  is not necessary, but that doesn't matter. Wide_[Wide_]Text_IO is
!    --  handled in a similar manner.
  
     function Is_Text_IO_Kludge_Unit (Nam : Node_Id) return Boolean;
!    --  Returns True if the given Nam is an Expanded Name, whose Prefix is Ada,
!    --  and whose selector is either Text_IO.xxx or Wide_Text_IO.xxx or
!    --  Wide_Wide_Text_IO.xxx, where xxx is one of the subpackages of Text_IO
!    --  that is specially handled as described above for Text_IO_Kludge.
  
  end Rtsfind;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-addope.adb gcc-4.0.0/gcc/ada/s-addope.adb
*** gcc-3.4.3/gcc/ada/s-addope.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-addope.adb	Thu Apr 29 15:24:56 2004
***************
*** 0 ****
--- 1,114 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --             S Y S T E M . A D D R E S S _ O P E R A T I O N S            --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the implementation dependent sections of this file.      --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Unchecked_Conversion;
+ 
+ package body System.Address_Operations is
+ 
+    type IA is mod 2 ** Address'Size;
+    --  The type used to provide the actual desired operations
+ 
+    function I is new Unchecked_Conversion (Address, IA);
+    function A is new Unchecked_Conversion (IA, Address);
+    --  The operations are implemented by unchecked conversion to type IA,
+    --  followed by doing the intrinsic operation on the IA values, followed
+    --  by converting the result back to type Address.
+ 
+    ----------
+    -- AddA --
+    ----------
+ 
+    function AddA (Left, Right : Address) return Address is
+    begin
+       return A (I (Left) + I (Right));
+    end AddA;
+ 
+    ----------
+    -- AndA --
+    ----------
+ 
+    function AndA (Left, Right : Address) return Address is
+    begin
+       return A (I (Left) and I (Right));
+    end AndA;
+ 
+    ----------
+    -- DivA --
+    ----------
+ 
+    function DivA (Left, Right : Address) return Address is
+    begin
+       return A (I (Left) / I (Right));
+    end DivA;
+ 
+    ----------
+    -- ModA --
+    ----------
+ 
+    function ModA (Left, Right : Address) return Address is
+    begin
+       return A (I (Left) mod I (Right));
+    end ModA;
+ 
+    ---------
+    -- MulA --
+    ---------
+ 
+    function MulA (Left, Right : Address) return Address is
+    begin
+       return A (I (Left) * I (Right));
+    end MulA;
+ 
+    ---------
+    -- OrA --
+    ---------
+ 
+    function OrA (Left, Right : Address) return Address is
+    begin
+       return A (I (Left) or I (Right));
+    end OrA;
+ 
+    ----------
+    -- SubA --
+    ----------
+ 
+    function SubA (Left, Right : Address) return Address is
+    begin
+       return A (I (Left) - I (Right));
+    end SubA;
+ 
+ end System.Address_Operations;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-addope.ads gcc-4.0.0/gcc/ada/s-addope.ads
*** gcc-3.4.3/gcc/ada/s-addope.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-addope.ads	Fri Apr 23 10:58:30 2004
***************
*** 0 ****
--- 1,84 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --             S Y S T E M . A D D R E S S _ O P E R A T I O N S            --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the implementation dependent sections of this file.      --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package provides arithmetic and logical operations on type Address.
+ --  It is intended for use by other packages in the System hierarchy. For
+ --  applications requiring this capability, see System.Storage_Elements or
+ --  the operations introduced in System.Aux_DEC;
+ 
+ --  The reason we need this package is that arithmetic operations may not
+ --  be available in the case where type Address is non-private and the
+ --  operations have been made abstract in the spec of System (to avoid
+ --  inappropriate use by applications programs). In addition, the logical
+ --  operations may not be available if type Address is a signed integer.
+ 
+ package System.Address_Operations is
+ pragma Pure (Address_Operations);
+ 
+    --  The semantics of the arithmetic operations are those that apply to
+    --  a modular type with the same length as Address, i.e. they provide
+    --  twos complement wrap around arithmetic treating the address value
+    --  as an unsigned value, with no overflow checking.
+ 
+    --  Note that we do not use the infix names for these operations to
+    --  avoid problems with ambiguities coming from declarations in package
+    --  Standard (which may or may not be visible depending on the exact
+    --  form of the declaration of type System.Address).
+ 
+    function AddA (Left, Right : Address) return Address;
+    function SubA (Left, Right : Address) return Address;
+    function MulA (Left, Right : Address) return Address;
+    function DivA (Left, Right : Address) return Address;
+    function ModA (Left, Right : Address) return Address;
+ 
+    --  The semantics of the logical operations are those that apply to
+    --  a modular type with the same length as Address, i.e. they provide
+    --  bit-wise operations on all bits of the value (including the sign
+    --  bit if Address is a signed integer type).
+ 
+    function AndA (Left, Right : Address) return Address;
+    function OrA  (Left, Right : Address) return Address;
+ 
+    pragma Inline_Always (AddA);
+    pragma Inline_Always (SubA);
+    pragma Inline_Always (MulA);
+    pragma Inline_Always (DivA);
+    pragma Inline_Always (ModA);
+    pragma Inline_Always (AndA);
+    pragma Inline_Always (OrA);
+ 
+ end System.Address_Operations;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-arit64.adb gcc-4.0.0/gcc/ada/s-arit64.adb
*** gcc-3.4.3/gcc/ada/s-arit64.adb	Tue Oct 21 13:42:13 2003
--- gcc-4.0.0/gcc/ada/s-arit64.adb	Mon Jan  3 15:40:46 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body System.Arith_64 is
*** 56,65 ****
     pragma Inline ("+");
     --  Length doubling additions
  
-    function "-" (A : Uns64; B : Uns32) return Uns64;
-    pragma Inline ("-");
-    --  Length doubling subtraction
- 
     function "*" (A, B : Uns32) return Uns64;
     pragma Inline ("*");
     --  Length doubling multiplication
--- 56,61 ----
*************** package body System.Arith_64 is
*** 76,81 ****
--- 72,80 ----
     pragma Inline ("&");
     --  Concatenate hi, lo values to form 64-bit result
  
+    function Le3 (X1, X2, X3 : Uns32; Y1, Y2, Y3 : Uns32) return Boolean;
+    --  Determines if 96 bit value X1&X2&X3 <= Y1&Y2&Y3
+ 
     function Lo (A : Uns64) return Uns32;
     pragma Inline (Lo);
     --  Low order half of 64-bit value
*************** package body System.Arith_64 is
*** 84,89 ****
--- 83,91 ----
     pragma Inline (Hi);
     --  High order half of 64-bit value
  
+    procedure Sub3 (X1, X2, X3 : in out Uns32; Y1, Y2, Y3 : in Uns32);
+    --  Computes X1&X2&X3 := X1&X2&X3 - Y1&Y1&Y3 with mod 2**96 wrap
+ 
     function To_Neg_Int (A : Uns64) return Int64;
     --  Convert to negative integer equivalent. If the input is in the range
     --  0 .. 2 ** 63, then the corresponding negative signed integer (obtained
*************** package body System.Arith_64 is
*** 132,146 ****
     end "+";
  
     ---------
-    -- "-" --
-    ---------
- 
-    function "-" (A : Uns64; B : Uns32) return Uns64 is
-    begin
-       return A - Uns64 (B);
-    end "-";
- 
-    ---------
     -- "/" --
     ---------
  
--- 134,139 ----
*************** package body System.Arith_64 is
*** 239,244 ****
--- 232,250 ----
        end if;
  
        Du := Lo (T2) & Lo (T1);
+ 
+       --  Set final signs (RM 4.5.5(27-30))
+ 
+       Den_Pos := (Y < 0) = (Z < 0);
+ 
+       --  Check overflow case of largest negative number divided by 1
+ 
+       if X = Int64'First and then Du = 1 and then not Den_Pos then
+          Raise_Error;
+       end if;
+ 
+       --  Perform the actual division
+ 
        Qu := Xu / Du;
        Ru := Xu rem Du;
  
*************** package body System.Arith_64 is
*** 248,257 ****
           Qu := Qu + Uns64'(1);
        end if;
  
-       --  Set final signs (RM 4.5.5(27-30))
- 
-       Den_Pos := (Y < 0) = (Z < 0);
- 
        --  Case of dividend (X) sign positive
  
        if X >= 0 then
--- 254,259 ----
*************** package body System.Arith_64 is
*** 285,290 ****
--- 287,311 ----
        return Uns32 (Shift_Right (A, 32));
     end Hi;
  
+    ---------
+    -- Le3 --
+    ---------
+ 
+    function Le3 (X1, X2, X3 : Uns32; Y1, Y2, Y3 : Uns32) return Boolean is
+    begin
+       if X1 < Y1 then
+          return True;
+       elsif X1 > Y1 then
+          return False;
+       elsif X2 < Y2 then
+          return True;
+       elsif X2 > Y2 then
+          return False;
+       else
+          return X3 <= Y3;
+       end if;
+    end Le3;
+ 
     --------
     -- Lo --
     --------
*************** package body System.Arith_64 is
*** 382,392 ****
        Zhi : Uns32 := Hi (Zu);
        Zlo : Uns32 := Lo (Zu);
  
!       D1, D2, D3, D4 : Uns32;
!       --  The dividend, four digits (D1 is high order)
  
!       Q1, Q2 : Uns32;
!       --  The quotient, two digits (Q1 is high order)
  
        S1, S2, S3 : Uns32;
        --  Value to subtract, three digits (S1 is high order)
--- 403,413 ----
        Zhi : Uns32 := Hi (Zu);
        Zlo : Uns32 := Lo (Zu);
  
!       D : array (1 .. 4) of Uns32;
!       --  The dividend, four digits (D(1) is high order)
  
!       Qd : array (1 .. 2) of Uns32;
!       --  The quotient digits, two digits (Qd(1) is high order)
  
        S1, S2, S3 : Uns32;
        --  Value to subtract, three digits (S1 is high order)
*************** package body System.Arith_64 is
*** 408,465 ****
        --  First do the multiplication, giving the four digit dividend
  
        T1 := Xlo * Ylo;
!       D4 := Lo (T1);
!       D3 := Hi (T1);
  
        if Yhi /= 0 then
           T1 := Xlo * Yhi;
!          T2 := D3 + Lo (T1);
!          D3 := Lo (T2);
!          D2 := Hi (T1) + Hi (T2);
  
           if Xhi /= 0 then
              T1 := Xhi * Ylo;
!             T2 := D3 + Lo (T1);
!             D3 := Lo (T2);
!             T3 := D2 + Hi (T1);
              T3 := T3 + Hi (T2);
!             D2 := Lo (T3);
!             D1 := Hi (T3);
  
!             T1 := (D1 & D2) + Uns64'(Xhi * Yhi);
!             D1 := Hi (T1);
!             D2 := Lo (T1);
  
           else
!             D1 := 0;
           end if;
  
        else
           if Xhi /= 0 then
              T1 := Xhi * Ylo;
!             T2 := D3 + Lo (T1);
!             D3 := Lo (T2);
!             D2 := Hi (T1) + Hi (T2);
  
           else
!             D2 := 0;
           end if;
  
!          D1 := 0;
        end if;
  
        --  Now it is time for the dreaded multiple precision division. First
        --  an easy case, check for the simple case of a one digit divisor.
  
        if Zhi = 0 then
!          if D1 /= 0 or else D2 >= Zlo then
              Raise_Error;
  
           --  Here we are dividing at most three digits by one digit
  
           else
!             T1 := D2 & D3;
!             T2 := Lo (T1 rem Zlo) & D4;
  
              Qu := Lo (T1 / Zlo) & Lo (T2 / Zlo);
              Ru := T2 rem Zlo;
--- 429,486 ----
        --  First do the multiplication, giving the four digit dividend
  
        T1 := Xlo * Ylo;
!       D (4) := Lo (T1);
!       D (3) := Hi (T1);
  
        if Yhi /= 0 then
           T1 := Xlo * Yhi;
!          T2 := D (3) + Lo (T1);
!          D (3) := Lo (T2);
!          D (2) := Hi (T1) + Hi (T2);
  
           if Xhi /= 0 then
              T1 := Xhi * Ylo;
!             T2 := D (3) + Lo (T1);
!             D (3) := Lo (T2);
!             T3 := D (2) + Hi (T1);
              T3 := T3 + Hi (T2);
!             D (2) := Lo (T3);
!             D (1) := Hi (T3);
  
!             T1 := (D (1) & D (2)) + Uns64'(Xhi * Yhi);
!             D (1) := Hi (T1);
!             D (2) := Lo (T1);
  
           else
!             D (1) := 0;
           end if;
  
        else
           if Xhi /= 0 then
              T1 := Xhi * Ylo;
!             T2 := D (3) + Lo (T1);
!             D (3) := Lo (T2);
!             D (2) := Hi (T1) + Hi (T2);
  
           else
!             D (2) := 0;
           end if;
  
!          D (1) := 0;
        end if;
  
        --  Now it is time for the dreaded multiple precision division. First
        --  an easy case, check for the simple case of a one digit divisor.
  
        if Zhi = 0 then
!          if D (1) /= 0 or else D (2) >= Zlo then
              Raise_Error;
  
           --  Here we are dividing at most three digits by one digit
  
           else
!             T1 := D (2) & D (3);
!             T2 := Lo (T1 rem Zlo) & D (4);
  
              Qu := Lo (T1 / Zlo) & Lo (T2 / Zlo);
              Ru := T2 rem Zlo;
*************** package body System.Arith_64 is
*** 467,478 ****
  
        --  If divisor is double digit and too large, raise error
  
!       elsif (D1 & D2) >= Zu then
           Raise_Error;
  
        --  This is the complex case where we definitely have a double digit
        --  divisor and a dividend of at least three digits. We use the classical
!       --  multiple division algorithm (see  section (4.3.1) of Knuth's "The Art
        --  of Computer Programming", Vol. 2 for a description (algorithm D).
  
        else
--- 488,499 ----
  
        --  If divisor is double digit and too large, raise error
  
!       elsif (D (1) & D (2)) >= Zu then
           Raise_Error;
  
        --  This is the complex case where we definitely have a double digit
        --  divisor and a dividend of at least three digits. We use the classical
!       --  multiple division algorithm (see section (4.3.1) of Knuth's "The Art
        --  of Computer Programming", Vol. 2 for a description (algorithm D).
  
        else
*************** package body System.Arith_64 is
*** 511,625 ****
  
           --  Note that when we scale up the dividend, it still fits in four
           --  digits, since we already tested for overflow, and scaling does
!          --  not change the invariant that (D1 & D2) >= Zu.
! 
!          T1 := Shift_Left (D1 & D2, Scale);
!          D1 := Hi (T1);
!          T2 := Shift_Left (0 & D3, Scale);
!          D2 := Lo (T1) or Hi (T2);
!          T3 := Shift_Left (0 & D4, Scale);
!          D3 := Lo (T2) or Hi (T3);
!          D4 := Lo (T3);
! 
!          --  Compute first quotient digit. We have to divide three digits by
!          --  two digits, and we estimate the quotient by dividing the leading
!          --  two digits by the leading digit. Given the scaling we did above
!          --  which ensured the first bit of the divisor is set, this gives an
!          --  estimate of the quotient that is at most two too high.
! 
!          if D1 = Zhi then
!             Q1 := 2 ** 32 - 1;
!          else
!             Q1 := Lo ((D1 & D2) / Zhi);
!          end if;
! 
!          --  Compute amount to subtract
  
!          T1 := Q1 * Zlo;
!          T2 := Q1 * Zhi;
!          S3 := Lo (T1);
!          T1 := Hi (T1) + Lo (T2);
!          S2 := Lo (T1);
!          S1 := Hi (T1) + Hi (T2);
  
!          --  Adjust quotient digit if it was too high
  
!          loop
!             exit when S1 < D1;
  
!             if S1 = D1 then
!                exit when S2 < D2;
  
!                if S2 = D2 then
!                   exit when S3 <= D3;
!                end if;
              end if;
  
!             Q1 := Q1 - 1;
  
!             T1 := (S2 & S3) - Zlo;
              S3 := Lo (T1);
!             T1 := (S1 & S2) - Zhi;
              S2 := Lo (T1);
!             S1 := Hi (T1);
!          end loop;
! 
!          --  Subtract from dividend (note: do not bother to set D1 to
!          --  zero, since it is no longer needed in the calculation).
! 
!          T1 := (D2 & D3) - S3;
!          D3 := Lo (T1);
!          T1 := (D1 & Hi (T1)) - S2;
!          D2 := Lo (T1);
! 
!          --  Compute second quotient digit in same manner
! 
!          if D2 = Zhi then
!             Q2 := 2 ** 32 - 1;
!          else
!             Q2 := Lo ((D2 & D3) / Zhi);
!          end if;
! 
!          T1 := Q2 * Zlo;
!          T2 := Q2 * Zhi;
!          S3 := Lo (T1);
!          T1 := Hi (T1) + Lo (T2);
!          S2 := Lo (T1);
!          S1 := Hi (T1) + Hi (T2);
! 
!          loop
!             exit when S1 < D2;
  
!             if S1 = D2 then
!                exit when S2 < D3;
  
!                if S2 = D3 then
!                   exit when S3 <= D4;
!                end if;
!             end if;
  
!             Q2 := Q2 - 1;
  
!             T1 := (S2 & S3) - Zlo;
!             S3 := Lo (T1);
!             T1 := (S1 & S2) - Zhi;
!             S2 := Lo (T1);
!             S1 := Hi (T1);
           end loop;
  
-          T1 := (D3 & D4) - S3;
-          D4 := Lo (T1);
-          T1 := (D2 & Hi (T1)) - S2;
-          D3 := Lo (T1);
- 
           --  The two quotient digits are now set, and the remainder of the
!          --  scaled division is in (D3 & D4). To get the remainder for the
           --  original unscaled division, we rescale this dividend.
           --  We rescale the divisor as well, to make the proper comparison
           --  for rounding below.
  
!          Qu := Q1 & Q2;
!          Ru := Shift_Right (D3 & D4, Scale);
           Zu := Shift_Right (Zu, Scale);
        end if;
  
--- 532,594 ----
  
           --  Note that when we scale up the dividend, it still fits in four
           --  digits, since we already tested for overflow, and scaling does
!          --  not change the invariant that (D (1) & D (2)) >= Zu.
  
!          T1 := Shift_Left (D (1) & D (2), Scale);
!          D (1) := Hi (T1);
!          T2 := Shift_Left (0 & D (3), Scale);
!          D (2) := Lo (T1) or Hi (T2);
!          T3 := Shift_Left (0 & D (4), Scale);
!          D (3) := Lo (T2) or Hi (T3);
!          D (4) := Lo (T3);
  
!          --  Loop to compute quotient digits, runs twice for Qd(1) and Qd(2).
  
!          for J in 0 .. 1 loop
  
!             --  Compute next quotient digit. We have to divide three digits by
!             --  two digits. We estimate the quotient by dividing the leading
!             --  two digits by the leading digit. Given the scaling we did above
!             --  which ensured the first bit of the divisor is set, this gives
!             --  an estimate of the quotient that is at most two too high.
  
!             if D (J + 1) = Zhi then
!                Qd (J + 1) := 2 ** 32 - 1;
!             else
!                Qd (J + 1) := Lo ((D (J + 1) & D (J + 2)) / Zhi);
              end if;
  
!             --  Compute amount to subtract
  
!             T1 := Qd (J + 1) * Zlo;
!             T2 := Qd (J + 1) * Zhi;
              S3 := Lo (T1);
!             T1 := Hi (T1) + Lo (T2);
              S2 := Lo (T1);
!             S1 := Hi (T1) + Hi (T2);
  
!             --  Adjust quotient digit if it was too high
  
!             loop
!                exit when Le3 (S1, S2, S3, D (J + 1), D (J + 2), D (J + 3));
!                Qd (J + 1) := Qd (J + 1) - 1;
!                Sub3 (S1, S2, S3, 0, Zhi, Zlo);
!             end loop;
  
!             --  Now subtract S1&S2&S3 from D1&D2&D3 ready for next step
  
!             Sub3 (D (J + 1), D (J + 2), D (J + 3), S1, S2, S3);
           end loop;
  
           --  The two quotient digits are now set, and the remainder of the
!          --  scaled division is in D3&D4. To get the remainder for the
           --  original unscaled division, we rescale this dividend.
+ 
           --  We rescale the divisor as well, to make the proper comparison
           --  for rounding below.
  
!          Qu := Qd (1) & Qd (2);
!          Ru := Shift_Right (D (3) & D (4), Scale);
           Zu := Shift_Right (Zu, Scale);
        end if;
  
*************** package body System.Arith_64 is
*** 655,663 ****
              Q := To_Pos_Int (Qu);
           end if;
        end if;
- 
     end Scaled_Divide;
  
     -------------------------------
     -- Subtract_With_Ovflo_Check --
     -------------------------------
--- 624,655 ----
              Q := To_Pos_Int (Qu);
           end if;
        end if;
     end Scaled_Divide;
  
+    ----------
+    -- Sub3 --
+    ----------
+ 
+    procedure Sub3 (X1, X2, X3 : in out Uns32; Y1, Y2, Y3 : in Uns32) is
+    begin
+       if Y3 > X3 then
+          if X2 = 0 then
+             X1 := X1 - 1;
+          end if;
+ 
+          X2 := X2 - 1;
+       end if;
+ 
+       X3 := X3 - Y3;
+ 
+       if Y2 > X2 then
+          X1 := X1 - 1;
+       end if;
+ 
+       X2 := X2 - Y2;
+       X1 := X1 - Y1;
+    end Sub3;
+ 
     -------------------------------
     -- Subtract_With_Ovflo_Check --
     -------------------------------
diff -Nrcpad gcc-3.4.3/gcc/ada/s-arit64.ads gcc-4.0.0/gcc/ada/s-arit64.ads
*** gcc-3.4.3/gcc/ada/s-arit64.ads	Thu Apr 24 17:54:08 2003
--- gcc-4.0.0/gcc/ada/s-arit64.ads	Wed Oct 27 13:39:21 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --        Copyright (C) 1994,1995,1996 Free Software Foundation, Inc.       --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** pragma Pure (Arith_64);
*** 52,58 ****
  
     function Multiply_With_Ovflo_Check (X, Y : Int64) return Int64;
     --  Raises Constraint_Error if product of operands overflows 64
!    --  bits, otherwise returns the 64-bit signed integer difference.
  
     procedure Scaled_Divide
       (X, Y, Z : Int64;
--- 52,58 ----
  
     function Multiply_With_Ovflo_Check (X, Y : Int64) return Int64;
     --  Raises Constraint_Error if product of operands overflows 64
!    --  bits, otherwise returns the 64-bit signed integer product.
  
     procedure Scaled_Divide
       (X, Y, Z : Int64;
*************** pragma Pure (Arith_64);
*** 71,82 ****
        Q, R    : out Int64;
        Round   : Boolean);
     --  Performs the division X / (Y * Z), storing the quotient in Q and
!    --  the remainder in R. Constraint_Error is raised if Y or Z is zero.
!    --  Round indicates if the result should be rounded. If Round is False,
!    --  then Q, R are the normal quotient and remainder from a truncating
!    --  division. If Round is True, then Q is the rounded quotient. The
!    --  remainder R is not affected by the setting of the Round flag. The
!    --  result is known to be in range except for the noted possibility of
!    --  Y or Z being zero, so no other overflow checks are required.
  
  end System.Arith_64;
--- 71,81 ----
        Q, R    : out Int64;
        Round   : Boolean);
     --  Performs the division X / (Y * Z), storing the quotient in Q and
!    --  the remainder in R. Constraint_Error is raised if Y or Z is zero,
!    --  or if the quotient does not fit in 64-bits. Round indicates if the
!    --  result should be rounded. If Round is False, then Q, R are the normal
!    --  quotient and remainder from a truncating division. If Round is True,
!    --  then Q is the rounded quotient. The remainder R is not affected by the
!    --  setting of the Round flag.
  
  end System.Arith_64;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-asthan-vms-alpha.adb gcc-4.0.0/gcc/ada/s-asthan-vms-alpha.adb
*** gcc-3.4.3/gcc/ada/s-asthan-vms-alpha.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-asthan-vms-alpha.adb	Thu Feb 10 13:55:33 2005
***************
*** 0 ****
--- 1,597 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --                  S Y S T E M . A S T _ H A N D L I N G                   --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 1996-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the OpenVMS/Alpha version.
+ 
+ with System; use System;
+ 
+ with System.IO;
+ 
+ with System.Machine_Code;
+ with System.Parameters;
+ with System.Storage_Elements;
+ 
+ with System.Tasking;
+ with System.Tasking.Rendezvous;
+ with System.Tasking.Initialization;
+ with System.Tasking.Utilities;
+ 
+ with System.Task_Primitives;
+ with System.Task_Primitives.Operations;
+ with System.Task_Primitives.Operations.DEC;
+ 
+ --  with Ada.Finalization;
+ --  removed, because of problem with controlled attribute ???
+ 
+ with Ada.Task_Attributes;
+ with Ada.Task_Identification;
+ 
+ with Ada.Exceptions; use Ada.Exceptions;
+ 
+ with Ada.Unchecked_Conversion;
+ 
+ package body System.AST_Handling is
+ 
+    package ATID renames Ada.Task_Identification;
+ 
+    package SP   renames System.Parameters;
+    package ST   renames System.Tasking;
+    package STR  renames System.Tasking.Rendezvous;
+    package STI  renames System.Tasking.Initialization;
+    package STU  renames System.Tasking.Utilities;
+ 
+    package SSE  renames System.Storage_Elements;
+    package STPO renames System.Task_Primitives.Operations;
+    package STPOD renames System.Task_Primitives.Operations.DEC;
+ 
+    AST_Lock : aliased System.Task_Primitives.RTS_Lock;
+    --  This is a global lock; it is used to execute in mutual exclusion
+    --  from all other AST tasks.  It is only used by Lock_AST and
+    --  Unlock_AST.
+ 
+    procedure Lock_AST (Self_ID : ST.Task_Id);
+    --  Locks out other AST tasks. Preceding a section of code by Lock_AST and
+    --  following it by Unlock_AST creates a critical region.
+ 
+    procedure Unlock_AST (Self_ID : ST.Task_Id);
+    --  Releases lock previously set by call to Lock_AST.
+    --  All nested locks must be released before other tasks competing for the
+    --  tasking lock are released.
+ 
+    --------------
+    -- Lock_AST --
+    --------------
+ 
+    procedure Lock_AST (Self_ID : ST.Task_Id) is
+    begin
+       STI.Defer_Abort_Nestable (Self_ID);
+       STPO.Write_Lock (AST_Lock'Access, Global_Lock => True);
+    end Lock_AST;
+ 
+    ----------------
+    -- Unlock_AST --
+    ----------------
+ 
+    procedure Unlock_AST (Self_ID : ST.Task_Id) is
+    begin
+       STPO.Unlock (AST_Lock'Access, Global_Lock => True);
+       STI.Undefer_Abort_Nestable (Self_ID);
+    end Unlock_AST;
+ 
+    ---------------------------------
+    -- AST_Handler Data Structures --
+    ---------------------------------
+ 
+    --  As noted in the private part of the spec of System.Aux_DEC, the
+    --  AST_Handler type is simply a pointer to a procedure that takes
+    --  a single 64bit parameter. The following is a local copy
+    --  of that definition.
+ 
+    --  We need our own copy because we need to get our hands on this
+    --  and we cannot see the private part of System.Aux_DEC. We don't
+    --  want to be a child of Aux_Dec because of complications resulting
+    --  from the use of pragma Extend_System. We will use unchecked
+    --  conversions between the two versions of the declarations.
+ 
+    type AST_Handler is access procedure (Param : Long_Integer);
+ 
+    --  However, this declaration is somewhat misleading, since the values
+    --  referenced by AST_Handler values (all produced in this package by
+    --  calls to Create_AST_Handler) are highly stylized.
+ 
+    --  The first point is that in VMS/Alpha, procedure pointers do not in
+    --  fact point to code, but rather to a 48-byte procedure descriptor.
+    --  So a value of type AST_Handler is in fact a pointer to one of these
+    --  48-byte descriptors.
+ 
+    type Descriptor_Type is new SSE.Storage_Array (1 .. 48);
+    for  Descriptor_Type'Alignment use Standard'Maximum_Alignment;
+    pragma Warnings (Off, Descriptor_Type);
+    --  Suppress harmless warnings about alignment.
+    --  Should explain why this warning is harmless ???
+ 
+    type Descriptor_Ref is access all Descriptor_Type;
+ 
+    --  Normally, there is only one such descriptor for a given procedure, but
+    --  it works fine to make a copy of the single allocated descriptor, and
+    --  use the copy itself, and we take advantage of this in the design here.
+    --  The idea is that AST_Handler values will all point to a record with the
+    --  following structure:
+ 
+    --  Note: When we say it works fine, there is one delicate point, which
+    --  is that the code for the AST procedure itself requires the original
+    --  descriptor address.  We handle this by saving the orignal descriptor
+    --  address in this structure and restoring in Process_AST.
+ 
+    type AST_Handler_Data is record
+       Descriptor              : Descriptor_Type;
+       Original_Descriptor_Ref : Descriptor_Ref;
+       Taskid                  : ATID.Task_Id;
+       Entryno                 : Natural;
+    end record;
+ 
+    type AST_Handler_Data_Ref is access all AST_Handler_Data;
+ 
+    function To_AST_Handler is new Ada.Unchecked_Conversion
+      (AST_Handler_Data_Ref, System.Aux_DEC.AST_Handler);
+ 
+    --  Each time Create_AST_Handler is called, a new value of this record
+    --  type is created, containing a copy of the procedure descriptor for
+    --  the routine used to handle all AST's (Process_AST), and the Task_Id
+    --  and entry number parameters identifying the task entry involved.
+ 
+    --  The AST_Handler value returned is a pointer to this record. Since
+    --  the record starts with the procedure descriptor, it can be used
+    --  by the system in the normal way to call the procedure. But now
+    --  when the procedure gets control, it can determine the address of
+    --  the procedure descriptor used to call it (since the ABI specifies
+    --  that this is left sitting in register r27 on entry), and then use
+    --  that address to retrieve the Task_Id and entry number so that it
+    --  knows on which entry to queue the AST request.
+ 
+    --  The next issue is where are these records placed. Since we intend
+    --  to pass pointers to these records to asynchronous system service
+    --  routines, they have to be on the heap, which means we have to worry
+    --  about when to allocate them and deallocate them.
+ 
+    --  We solve this problem by introducing a task attribute that points to
+    --  a vector, indexed by the entry number, of AST_Handler_Data records
+    --  for a given task. The pointer itself is a controlled object allowing
+    --  us to write a finalization routine that frees the referenced vector.
+ 
+    --  An entry in this vector is either initialized (Entryno non-zero) and
+    --  can be used for any subsequent reference to the same entry, or it is
+    --  unused, marked by the Entryno value being zero.
+ 
+    type AST_Handler_Vector is array (Natural range <>) of AST_Handler_Data;
+    type AST_Handler_Vector_Ref is access all AST_Handler_Vector;
+ 
+ --  type AST_Vector_Ptr is new Ada.Finalization.Controlled with record
+ --  removed due to problem with controlled attribute, consequence is that
+ --  we have a memory leak if a task that has AST attribute entries is
+ --  terminated. ???
+ 
+    type AST_Vector_Ptr is record
+       Vector : AST_Handler_Vector_Ref;
+    end record;
+ 
+    AST_Vector_Init : AST_Vector_Ptr;
+    --  Initial value, treated as constant, Vector will be null.
+ 
+    package AST_Attribute is new Ada.Task_Attributes
+      (Attribute     => AST_Vector_Ptr,
+       Initial_Value => AST_Vector_Init);
+ 
+    use AST_Attribute;
+ 
+    -----------------------
+    -- AST Service Queue --
+    -----------------------
+ 
+    --  The following global data structures are used to queue pending
+    --  AST requests. When an AST is signalled, the AST service routine
+    --  Process_AST is called, and it makes an entry in this structure.
+ 
+    type AST_Instance is record
+       Taskid  : ATID.Task_Id;
+       Entryno : Natural;
+       Param   : Long_Integer;
+    end record;
+    --  The Taskid and Entryno indicate the entry on which this AST is to
+    --  be queued, and Param is the parameter provided from the AST itself.
+ 
+    AST_Service_Queue_Size  : constant := 256;
+    AST_Service_Queue_Limit : constant := 250;
+    type AST_Service_Queue_Index is mod AST_Service_Queue_Size;
+    --  Index used to refer to entries in the circular buffer which holds
+    --  active AST_Instance values. The upper bound reflects the maximum
+    --  number of AST instances that can be stored in the buffer. Since
+    --  these entries are immediately serviced by the high priority server
+    --  task that does the actual entry queuing, it is very unusual to have
+    --  any significant number of entries simulaneously queued.
+ 
+    AST_Service_Queue : array (AST_Service_Queue_Index) of AST_Instance;
+    pragma Volatile_Components (AST_Service_Queue);
+    --  The circular buffer used to store active AST requests.
+ 
+    AST_Service_Queue_Put : AST_Service_Queue_Index := 0;
+    AST_Service_Queue_Get : AST_Service_Queue_Index := 0;
+    pragma Atomic (AST_Service_Queue_Put);
+    pragma Atomic (AST_Service_Queue_Get);
+    --  These two variables point to the next slots in the AST_Service_Queue
+    --  to be used for putting a new entry in and taking an entry out. This
+    --  is a circular buffer, so these pointers wrap around. If the two values
+    --  are equal the buffer is currently empty. The pointers are atomic to
+    --  ensure proper synchronization between the single producer (namely the
+    --  Process_AST procedure), and the single consumer (the AST_Service_Task).
+ 
+    --------------------------------
+    -- AST Server Task Structures --
+    --------------------------------
+ 
+    --  The basic approach is that when an AST comes in, a call is made to
+    --  the Process_AST procedure. It queues the request in the service queue
+    --  and then wakes up an AST server task to perform the actual call to the
+    --  required entry. We use this intermediate server task, since the AST
+    --  procedure itself cannot wait to return, and we need some caller for
+    --  the rendezvous so that we can use the normal rendezvous mechanism.
+ 
+    --  It would work to have only one AST server task, but then we would lose
+    --  all overlap in AST processing, and furthermore, we could get priority
+    --  inversion effects resulting in starvation of AST requests.
+ 
+    --  We therefore maintain a small pool of AST server tasks. We adjust
+    --  the size of the pool dynamically to reflect traffic, so that we have
+    --  a sufficient number of server tasks to avoid starvation.
+ 
+    Max_AST_Servers : constant Natural := 16;
+    --  Maximum number of AST server tasks that can be allocated
+ 
+    Num_AST_Servers : Natural := 0;
+    --  Number of AST server tasks currently active
+ 
+    Num_Waiting_AST_Servers : Natural := 0;
+    --  This is the number of AST server tasks that are either waiting for
+    --  work, or just about to go to sleep and wait for work.
+ 
+    Is_Waiting : array (1 .. Max_AST_Servers) of Boolean := (others => False);
+    --  An array of flags showing which AST server tasks are currently waiting
+ 
+    AST_Task_Ids : array (1 .. Max_AST_Servers) of ST.Task_Id;
+    --  Task Id's of allocated AST server tasks
+ 
+    task type AST_Server_Task (Num : Natural) is
+       pragma Priority (Priority'Last);
+    end AST_Server_Task;
+    --  Declaration for AST server task. This task has no entries, it is
+    --  controlled by sleep and wakeup calls at the task primitives level.
+ 
+    type AST_Server_Task_Ptr is access all AST_Server_Task;
+    --  Type used to allocate server tasks
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    procedure Allocate_New_AST_Server;
+    --  Allocate an additional AST server task
+ 
+    procedure Process_AST (Param : Long_Integer);
+    --  This is the central routine for processing all AST's, it is referenced
+    --  as the code address of all created AST_Handler values. See detailed
+    --  description in body to understand how it works to have a single such
+    --  procedure for all AST's even though it does not get any indication of
+    --  the entry involved passed as an explicit parameter. The single explicit
+    --  parameter Param is the parameter passed by the system with the AST.
+ 
+    -----------------------------
+    -- Allocate_New_AST_Server --
+    -----------------------------
+ 
+    procedure Allocate_New_AST_Server is
+       Dummy : AST_Server_Task_Ptr;
+       pragma Unreferenced (Dummy);
+ 
+    begin
+       if Num_AST_Servers = Max_AST_Servers then
+          return;
+ 
+       else
+          --  Note: it is safe to increment Num_AST_Servers immediately, since
+          --  no one will try to activate this task until it indicates that it
+          --  is sleeping by setting its entry in Is_Waiting to True.
+ 
+          Num_AST_Servers := Num_AST_Servers + 1;
+          Dummy := new AST_Server_Task (Num_AST_Servers);
+       end if;
+    end Allocate_New_AST_Server;
+ 
+    ---------------------
+    -- AST_Server_Task --
+    ---------------------
+ 
+    task body AST_Server_Task is
+       Taskid  : ATID.Task_Id;
+       Entryno : Natural;
+       Param   : aliased Long_Integer;
+       Self_Id : constant ST.Task_Id := ST.Self;
+ 
+       pragma Volatile (Param);
+ 
+    begin
+       --  By making this task independent of master, when the environment
+       --  task is finalizing, the AST_Server_Task will be notified that it
+       --  should terminate.
+ 
+       STU.Make_Independent;
+ 
+       --  Record our task Id for access by Process_AST
+ 
+       AST_Task_Ids (Num) := Self_Id;
+ 
+       --  Note: this entire task operates with the main task lock set, except
+       --  when it is sleeping waiting for work, or busy doing a rendezvous
+       --  with an AST server. This lock protects the data structures that
+       --  are shared by multiple instances of the server task.
+ 
+       Lock_AST (Self_Id);
+ 
+       --  This is the main infinite loop of the task. We go to sleep and
+       --  wait to be woken up by Process_AST when there is some work to do.
+ 
+       loop
+          Num_Waiting_AST_Servers := Num_Waiting_AST_Servers + 1;
+ 
+          Unlock_AST (Self_Id);
+ 
+          STI.Defer_Abort (Self_Id);
+ 
+          if SP.Single_Lock then
+             STPO.Lock_RTS;
+          end if;
+ 
+          STPO.Write_Lock (Self_Id);
+ 
+          Is_Waiting (Num) := True;
+ 
+          Self_Id.Common.State := ST.AST_Server_Sleep;
+          STPO.Sleep (Self_Id, ST.AST_Server_Sleep);
+          Self_Id.Common.State := ST.Runnable;
+ 
+          STPO.Unlock (Self_Id);
+ 
+          if SP.Single_Lock then
+             STPO.Unlock_RTS;
+          end if;
+ 
+          --  If the process is finalizing, Undefer_Abort will simply end
+          --  this task.
+ 
+          STI.Undefer_Abort (Self_Id);
+ 
+          --  We are awake, there is something to do!
+ 
+          Lock_AST (Self_Id);
+          Num_Waiting_AST_Servers := Num_Waiting_AST_Servers - 1;
+ 
+          --  Loop here to service outstanding requests. We are always
+          --  locked on entry to this loop.
+ 
+          while AST_Service_Queue_Get /= AST_Service_Queue_Put loop
+             Taskid  := AST_Service_Queue (AST_Service_Queue_Get).Taskid;
+             Entryno := AST_Service_Queue (AST_Service_Queue_Get).Entryno;
+             Param   := AST_Service_Queue (AST_Service_Queue_Get).Param;
+ 
+             AST_Service_Queue_Get := AST_Service_Queue_Get + 1;
+ 
+             --  This is a manual expansion of the normal call simple code
+ 
+             declare
+                type AA is access all Long_Integer;
+                P : AA := Param'Unrestricted_Access;
+ 
+                function To_ST_Task_Id is new Ada.Unchecked_Conversion
+                  (ATID.Task_Id, ST.Task_Id);
+ 
+             begin
+                Unlock_AST (Self_Id);
+                STR.Call_Simple
+                  (Acceptor           => To_ST_Task_Id (Taskid),
+                   E                  => ST.Task_Entry_Index (Entryno),
+                   Uninterpreted_Data => P'Address);
+ 
+             exception
+                when E : others =>
+                   System.IO.Put_Line ("%Debugging event");
+                   System.IO.Put_Line (Exception_Name (E) &
+                     " raised when trying to deliver an AST.");
+ 
+                   if Exception_Message (E)'Length /= 0 then
+                      System.IO.Put_Line (Exception_Message (E));
+                   end if;
+ 
+                   System.IO.Put_Line ("Task type is " & "Receiver_Type");
+                   System.IO.Put_Line ("Task id is " & ATID.Image (Taskid));
+             end;
+ 
+             Lock_AST (Self_Id);
+          end loop;
+       end loop;
+    end AST_Server_Task;
+ 
+    ------------------------
+    -- Create_AST_Handler --
+    ------------------------
+ 
+    function Create_AST_Handler
+      (Taskid  : ATID.Task_Id;
+       Entryno : Natural) return System.Aux_DEC.AST_Handler
+    is
+       Attr_Ref : Attribute_Handle;
+ 
+       Process_AST_Ptr : constant AST_Handler := Process_AST'Access;
+       --  Reference to standard procedure descriptor for Process_AST
+ 
+       function To_Descriptor_Ref is new Ada.Unchecked_Conversion
+         (AST_Handler, Descriptor_Ref);
+ 
+       Original_Descriptor_Ref : constant Descriptor_Ref :=
+                                   To_Descriptor_Ref (Process_AST_Ptr);
+ 
+    begin
+       if ATID.Is_Terminated (Taskid) then
+          raise Program_Error;
+       end if;
+ 
+       Attr_Ref := Reference (Taskid);
+ 
+       --  Allocate another server if supply is getting low
+ 
+       if Num_Waiting_AST_Servers < 2 then
+          Allocate_New_AST_Server;
+       end if;
+ 
+       --  No point in creating more if we have zillions waiting to
+       --  be serviced.
+ 
+       while AST_Service_Queue_Put - AST_Service_Queue_Get
+          > AST_Service_Queue_Limit
+       loop
+          delay 0.01;
+       end loop;
+ 
+       --  If no AST vector allocated, or the one we have is too short, then
+       --  allocate one of right size and initialize all entries except the
+       --  one we will use to unused. Note that the assignment automatically
+       --  frees the old allocated table if there is one.
+ 
+       if Attr_Ref.Vector = null
+         or else Attr_Ref.Vector'Length < Entryno
+       then
+          Attr_Ref.Vector := new AST_Handler_Vector (1 .. Entryno);
+ 
+          for E in 1 .. Entryno loop
+             Attr_Ref.Vector (E).Descriptor :=
+               Original_Descriptor_Ref.all;
+             Attr_Ref.Vector (E).Original_Descriptor_Ref :=
+               Original_Descriptor_Ref;
+             Attr_Ref.Vector (E).Taskid  := Taskid;
+             Attr_Ref.Vector (E).Entryno := E;
+          end loop;
+       end if;
+ 
+       return To_AST_Handler (Attr_Ref.Vector (Entryno)'Unrestricted_Access);
+    end Create_AST_Handler;
+ 
+    ----------------------------
+    -- Expand_AST_Packet_Pool --
+    ----------------------------
+ 
+    procedure Expand_AST_Packet_Pool
+      (Requested_Packets : in Natural;
+       Actual_Number     : out Natural;
+       Total_Number      : out Natural)
+    is
+       pragma Unreferenced (Requested_Packets);
+    begin
+       --  The AST implementation of GNAT does not permit dynamic expansion
+       --  of the pool, so we simply add no entries and return the total. If
+       --  it is necessary to expand the allocation, then this package body
+       --  must be recompiled with a larger value for AST_Service_Queue_Size.
+ 
+       Actual_Number := 0;
+       Total_Number := AST_Service_Queue_Size;
+    end Expand_AST_Packet_Pool;
+ 
+    -----------------
+    -- Process_AST --
+    -----------------
+ 
+    procedure Process_AST (Param : Long_Integer) is
+ 
+       Handler_Data_Ptr : AST_Handler_Data_Ref;
+       --  This variable is set to the address of the descriptor through
+       --  which Process_AST is called. Since the descriptor is part of
+       --  an AST_Handler value, this is also the address of this value,
+       --  from which we can obtain the task and entry number information.
+ 
+       function To_Address is new Ada.Unchecked_Conversion
+         (ST.Task_Id, System.Address);
+ 
+    begin
+       System.Machine_Code.Asm
+         (Template => "addl $27,0,%0",
+          Outputs  => AST_Handler_Data_Ref'Asm_Output ("=r", Handler_Data_Ptr),
+          Volatile => True);
+ 
+       System.Machine_Code.Asm
+         (Template => "ldl $27,%0",
+          Inputs  => Descriptor_Ref'Asm_Input
+            ("m", Handler_Data_Ptr.Original_Descriptor_Ref),
+          Volatile => True);
+ 
+       AST_Service_Queue (AST_Service_Queue_Put) := AST_Instance'
+         (Taskid  => Handler_Data_Ptr.Taskid,
+          Entryno => Handler_Data_Ptr.Entryno,
+          Param   => Param);
+ 
+       --  OpenVMS Programming Concepts manual, chapter 8.2.3:
+       --  "Implicit synchronization can be achieved for data that is shared
+       --   for write by using only AST routines to write the data, since only
+       --   one AST can be running at any one time."
+ 
+       --  This subprogram runs at AST level so is guaranteed to be
+       --  called sequentially at a given access level.
+ 
+       AST_Service_Queue_Put := AST_Service_Queue_Put + 1;
+ 
+       --  Need to wake up processing task. If there is no waiting server
+       --  then we have temporarily run out, but things should still be
+       --  OK, since one of the active ones will eventually pick up the
+       --  service request queued in the AST_Service_Queue.
+ 
+       for J in 1 .. Num_AST_Servers loop
+          if Is_Waiting (J) then
+             Is_Waiting (J) := False;
+ 
+             --  Sleeps are handled by ASTs on VMS, so don't call Wakeup.
+ 
+             STPOD.Interrupt_AST_Handler (To_Address (AST_Task_Ids (J)));
+             exit;
+          end if;
+       end loop;
+    end Process_AST;
+ 
+ begin
+    STPO.Initialize_Lock (AST_Lock'Access, STPO.Global_Task_Level);
+ end System.AST_Handling;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-atacco.adb gcc-4.0.0/gcc/ada/s-atacco.adb
*** gcc-3.4.3/gcc/ada/s-atacco.adb	Tue Oct 21 13:42:13 2003
--- gcc-4.0.0/gcc/ada/s-atacco.adb	Thu Feb 10 13:57:23 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 31,40 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
  package body System.Address_To_Access_Conversions is
!    --  This body is now superfluous and should be removed.
!    procedure Nothing is
!    begin
!       null;
!    end Nothing;
  end System.Address_To_Access_Conversions;
--- 31,40 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
+ --  This is a dummy version of this package that is needed to solve bootstrap
+ --  problems when compiling a library that doesn't require s-atacco.adb from
+ --  a compiler that contains one.
+ 
  package body System.Address_To_Access_Conversions is
! 
  end System.Address_To_Access_Conversions;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-atacco.ads gcc-4.0.0/gcc/ada/s-atacco.ads
*** gcc-3.4.3/gcc/ada/s-atacco.ads	Tue Oct 21 13:42:13 2003
--- gcc-4.0.0/gcc/ada/s-atacco.ads	Thu Feb 10 13:57:23 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** generic
*** 41,52 ****
  package System.Address_To_Access_Conversions is
  pragma Preelaborate (Address_To_Access_Conversions);
  
     pragma Compile_Time_Warning
       (Object'Unconstrained_Array,
        "Object is unconstrained array type" & ASCII.LF &
        "To_Pointer results may not have bounds");
  
!    xyz : Boolean := Object'Constrained;
  
     type Object_Pointer is access all Object;
     for Object_Pointer'Size use Standard'Address_Size;
--- 41,63 ----
  package System.Address_To_Access_Conversions is
  pragma Preelaborate (Address_To_Access_Conversions);
  
+ pragma Elaborate_Body;
+ --  This pragma Elaborate_Body is there to ensure the requirement of what is
+ --  at the moment a dummy null body. The reason this null body is there is
+ --  that we used to have a real body, and it causes bootstrap problems with
+ --  old compilers if we try to remove the corresponding file.
+ 
     pragma Compile_Time_Warning
       (Object'Unconstrained_Array,
        "Object is unconstrained array type" & ASCII.LF &
        "To_Pointer results may not have bounds");
  
!    --  Capture constrained status, suppressing warnings, since this is
!    --  an obsolescent feature to use Constrained in this way (RM J.4).
! 
!    pragma Warnings (Off);
!    Xyz : Boolean := Object'Constrained;
!    pragma Warnings (On);
  
     type Object_Pointer is access all Object;
     for Object_Pointer'Size use Standard'Address_Size;
*************** pragma Preelaborate (Address_To_Access_C
*** 57,62 ****
     pragma Import (Intrinsic, To_Pointer);
     pragma Import (Intrinsic, To_Address);
  
- private
-    procedure Nothing;   --  For now, until body is removed ???
  end System.Address_To_Access_Conversions;
--- 68,71 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/s-auxdec-vms_64.ads gcc-4.0.0/gcc/ada/s-auxdec-vms_64.ads
*** gcc-3.4.3/gcc/ada/s-auxdec-vms_64.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-auxdec-vms_64.ads	Fri Jun 11 10:47:36 2004
***************
*** 0 ****
--- 1,592 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                       S Y S T E M . A U X _ D E C                        --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 1996-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS For A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package contains definitions that are designed to be compatible
+ --  with the extra definitions in package System for DEC Ada implementations.
+ 
+ --  These definitions can be used directly by withing this package, or merged
+ --  with System using pragma Extend_System (Aux_DEC)
+ 
+ --  This is the IPF VMS 64 bit version.
+ 
+ with Unchecked_Conversion;
+ 
+ package System.Aux_DEC is
+ pragma Elaborate_Body (Aux_DEC);
+ 
+    subtype Short_Address is Address
+      range -2 ** (32 - 1) .. +2 ** (32 - 1) - 1;
+    for Short_Address'Object_Size use 32;
+    --  This subtype allows addresses to be converted from 64 bits to 32 bits
+    --  with an appropriate range check. Note that since this is a subtype of
+    --  type System.Address, the same limitations apply to this subtype. Namely
+    --  there are no visible arithmetic operations, and integer literals are
+    --  not available.
+ 
+    Short_Memory_Size : constant := 2 ** 32;
+    --  Defined for convenience of porting.
+ 
+    type Integer_8  is range -2 **  (8 - 1) .. +2 **  (8 - 1) - 1;
+    for Integer_8'Size  use  8;
+ 
+    type Integer_16 is range -2 ** (16 - 1) .. +2 ** (16 - 1) - 1;
+    for Integer_16'Size use 16;
+ 
+    type Integer_32 is range -2 ** (32 - 1) .. +2 ** (32 - 1) - 1;
+    for Integer_32'Size use 32;
+ 
+    type Integer_64 is range -2 ** (64 - 1) .. +2 ** (64 - 1) - 1;
+    for Integer_64'Size use 64;
+ 
+    type Largest_Integer is range Min_Int .. Max_Int;
+ 
+    type AST_Handler is limited private;
+ 
+    No_AST_Handler : constant AST_Handler;
+ 
+    type Type_Class is
+      (Type_Class_Enumeration,
+       Type_Class_Integer,
+       Type_Class_Fixed_Point,
+       Type_Class_Floating_Point,
+       Type_Class_Array,
+       Type_Class_Record,
+       Type_Class_Access,
+       Type_Class_Task,             -- also in Ada 95 protected
+       Type_Class_Address);
+ 
+    function "not" (Left        : Largest_Integer) return Largest_Integer;
+    function "and" (Left, Right : Largest_Integer) return Largest_Integer;
+    function "or"  (Left, Right : Largest_Integer) return Largest_Integer;
+    function "xor" (Left, Right : Largest_Integer) return Largest_Integer;
+ 
+    Address_Zero : constant Address;
+    No_Addr      : constant Address;
+    Address_Size : constant := Standard'Address_Size;
+ 
+    function "+" (Left : Address; Right : Integer) return Address;
+    function "+" (Left : Integer; Right : Address) return Address;
+    function "-" (Left : Address; Right : Address) return Integer;
+    function "-" (Left : Address; Right : Integer) return Address;
+ 
+    generic
+       type Target is private;
+    function Fetch_From_Address (A : Address) return Target;
+ 
+    generic
+       type Target is private;
+    procedure Assign_To_Address (A : Address; T : Target);
+ 
+    --  Floating point type declarations for VAX floating point data types
+ 
+    pragma Warnings (Off);
+ 
+    type F_Float is digits 6;
+    pragma Float_Representation (VAX_Float, F_Float);
+ 
+    type D_Float is digits 9;
+    pragma Float_Representation (Vax_Float, D_Float);
+ 
+    type G_Float is digits 15;
+    pragma Float_Representation (Vax_Float, G_Float);
+ 
+    --  Floating point type declarations for IEEE floating point data types
+ 
+    type IEEE_Single_Float is digits 6;
+    pragma Float_Representation (IEEE_Float, IEEE_Single_Float);
+ 
+    type IEEE_Double_Float is digits 15;
+    pragma Float_Representation (IEEE_Float, IEEE_Double_Float);
+ 
+    pragma Warnings (On);
+ 
+    Non_Ada_Error : exception;
+ 
+    --  Hardware-oriented types and functions
+ 
+    type Bit_Array is array (Integer range <>) of Boolean;
+    pragma Pack (Bit_Array);
+ 
+    subtype Bit_Array_8  is Bit_Array (0 ..  7);
+    subtype Bit_Array_16 is Bit_Array (0 .. 15);
+    subtype Bit_Array_32 is Bit_Array (0 .. 31);
+    subtype Bit_Array_64 is Bit_Array (0 .. 63);
+ 
+    type Unsigned_Byte is range 0 .. 255;
+    for  Unsigned_Byte'Size use 8;
+ 
+    function "not" (Left        : Unsigned_Byte) return Unsigned_Byte;
+    function "and" (Left, Right : Unsigned_Byte) return Unsigned_Byte;
+    function "or"  (Left, Right : Unsigned_Byte) return Unsigned_Byte;
+    function "xor" (Left, Right : Unsigned_Byte) return Unsigned_Byte;
+ 
+    function To_Unsigned_Byte (X : Bit_Array_8) return Unsigned_Byte;
+    function To_Bit_Array_8   (X : Unsigned_Byte) return Bit_Array_8;
+ 
+    type Unsigned_Byte_Array is array (Integer range <>) of Unsigned_Byte;
+ 
+    type Unsigned_Word is range 0 .. 65535;
+    for  Unsigned_Word'Size use 16;
+ 
+    function "not" (Left        : Unsigned_Word) return Unsigned_Word;
+    function "and" (Left, Right : Unsigned_Word) return Unsigned_Word;
+    function "or"  (Left, Right : Unsigned_Word) return Unsigned_Word;
+    function "xor" (Left, Right : Unsigned_Word) return Unsigned_Word;
+ 
+    function To_Unsigned_Word (X : Bit_Array_16) return Unsigned_Word;
+    function To_Bit_Array_16  (X : Unsigned_Word) return Bit_Array_16;
+ 
+    type Unsigned_Word_Array is array (Integer range <>) of Unsigned_Word;
+ 
+    type Unsigned_Longword is range -2_147_483_648 .. 2_147_483_647;
+    for  Unsigned_Longword'Size use 32;
+ 
+    function "not" (Left        : Unsigned_Longword) return Unsigned_Longword;
+    function "and" (Left, Right : Unsigned_Longword) return Unsigned_Longword;
+    function "or"  (Left, Right : Unsigned_Longword) return Unsigned_Longword;
+    function "xor" (Left, Right : Unsigned_Longword) return Unsigned_Longword;
+ 
+    function To_Unsigned_Longword (X : Bit_Array_32) return Unsigned_Longword;
+    function To_Bit_Array_32 (X : Unsigned_Longword) return Bit_Array_32;
+ 
+    type Unsigned_Longword_Array is
+       array (Integer range <>) of Unsigned_Longword;
+ 
+    type Unsigned_32 is range 0 .. 4_294_967_295;
+    for  Unsigned_32'Size use 32;
+ 
+    function "not" (Left        : Unsigned_32) return Unsigned_32;
+    function "and" (Left, Right : Unsigned_32) return Unsigned_32;
+    function "or"  (Left, Right : Unsigned_32) return Unsigned_32;
+    function "xor" (Left, Right : Unsigned_32) return Unsigned_32;
+ 
+    function To_Unsigned_32 (X : Bit_Array_32) return Unsigned_32;
+    function To_Bit_Array_32 (X : Unsigned_32) return Bit_Array_32;
+ 
+    type Unsigned_Quadword is record
+       L0 : Unsigned_Longword;
+       L1 : Unsigned_Longword;
+    end record;
+ 
+    for Unsigned_Quadword'Size      use 64;
+    for Unsigned_Quadword'Alignment use
+      Integer'Min (8, Standard'Maximum_Alignment);
+ 
+    function "not" (Left        : Unsigned_Quadword) return Unsigned_Quadword;
+    function "and" (Left, Right : Unsigned_Quadword) return Unsigned_Quadword;
+    function "or"  (Left, Right : Unsigned_Quadword) return Unsigned_Quadword;
+    function "xor" (Left, Right : Unsigned_Quadword) return Unsigned_Quadword;
+ 
+    function To_Unsigned_Quadword (X : Bit_Array_64) return Unsigned_Quadword;
+    function To_Bit_Array_64 (X : Unsigned_Quadword) return Bit_Array_64;
+ 
+    type Unsigned_Quadword_Array is
+       array (Integer range <>) of Unsigned_Quadword;
+ 
+    function To_Address      (X : Integer)           return Address;
+    pragma Pure_Function (To_Address);
+ 
+    function To_Address_Long (X : Unsigned_Longword) return Address;
+    pragma Pure_Function (To_Address_Long);
+ 
+    function To_Integer      (X : Address)           return Integer;
+ 
+    function To_Unsigned_Longword (X : Address)     return Unsigned_Longword;
+    function To_Unsigned_Longword (X : AST_Handler) return Unsigned_Longword;
+ 
+    --  Conventional names for static subtypes of type UNSIGNED_LONGWORD
+ 
+    subtype Unsigned_1  is Unsigned_Longword range 0 .. 2** 1-1;
+    subtype Unsigned_2  is Unsigned_Longword range 0 .. 2** 2-1;
+    subtype Unsigned_3  is Unsigned_Longword range 0 .. 2** 3-1;
+    subtype Unsigned_4  is Unsigned_Longword range 0 .. 2** 4-1;
+    subtype Unsigned_5  is Unsigned_Longword range 0 .. 2** 5-1;
+    subtype Unsigned_6  is Unsigned_Longword range 0 .. 2** 6-1;
+    subtype Unsigned_7  is Unsigned_Longword range 0 .. 2** 7-1;
+    subtype Unsigned_8  is Unsigned_Longword range 0 .. 2** 8-1;
+    subtype Unsigned_9  is Unsigned_Longword range 0 .. 2** 9-1;
+    subtype Unsigned_10 is Unsigned_Longword range 0 .. 2**10-1;
+    subtype Unsigned_11 is Unsigned_Longword range 0 .. 2**11-1;
+    subtype Unsigned_12 is Unsigned_Longword range 0 .. 2**12-1;
+    subtype Unsigned_13 is Unsigned_Longword range 0 .. 2**13-1;
+    subtype Unsigned_14 is Unsigned_Longword range 0 .. 2**14-1;
+    subtype Unsigned_15 is Unsigned_Longword range 0 .. 2**15-1;
+    subtype Unsigned_16 is Unsigned_Longword range 0 .. 2**16-1;
+    subtype Unsigned_17 is Unsigned_Longword range 0 .. 2**17-1;
+    subtype Unsigned_18 is Unsigned_Longword range 0 .. 2**18-1;
+    subtype Unsigned_19 is Unsigned_Longword range 0 .. 2**19-1;
+    subtype Unsigned_20 is Unsigned_Longword range 0 .. 2**20-1;
+    subtype Unsigned_21 is Unsigned_Longword range 0 .. 2**21-1;
+    subtype Unsigned_22 is Unsigned_Longword range 0 .. 2**22-1;
+    subtype Unsigned_23 is Unsigned_Longword range 0 .. 2**23-1;
+    subtype Unsigned_24 is Unsigned_Longword range 0 .. 2**24-1;
+    subtype Unsigned_25 is Unsigned_Longword range 0 .. 2**25-1;
+    subtype Unsigned_26 is Unsigned_Longword range 0 .. 2**26-1;
+    subtype Unsigned_27 is Unsigned_Longword range 0 .. 2**27-1;
+    subtype Unsigned_28 is Unsigned_Longword range 0 .. 2**28-1;
+    subtype Unsigned_29 is Unsigned_Longword range 0 .. 2**29-1;
+    subtype Unsigned_30 is Unsigned_Longword range 0 .. 2**30-1;
+    subtype Unsigned_31 is Unsigned_Longword range 0 .. 2**31-1;
+ 
+    --  Function for obtaining global symbol values
+ 
+    function Import_Value         (Symbol : String) return Unsigned_Longword;
+    function Import_Address       (Symbol : String) return Address;
+    function Import_Largest_Value (Symbol : String) return Largest_Integer;
+ 
+    pragma Import (Intrinsic, Import_Value);
+    pragma Import (Intrinsic, Import_Address);
+    pragma Import (Intrinsic, Import_Largest_Value);
+ 
+    --  For the following declarations, note that the declaration without
+    --  a Retry_Count parameter means to retry infinitely. A value of zero
+    --  for the Retry_Count parameter means do not retry.
+ 
+    --  Interlocked-instruction procedures
+ 
+    procedure Clear_Interlocked
+      (Bit       : in out Boolean;
+       Old_Value : out Boolean);
+ 
+    procedure Set_Interlocked
+      (Bit       : in out Boolean;
+       Old_Value : out Boolean);
+ 
+    type Aligned_Word is record
+       Value : Short_Integer;
+    end record;
+ 
+    for Aligned_Word'Alignment use
+      Integer'Min (2, Standard'Maximum_Alignment);
+ 
+    procedure Clear_Interlocked
+      (Bit          : in out Boolean;
+       Old_Value    : out Boolean;
+       Retry_Count  : in Natural;
+       Success_Flag : out Boolean);
+ 
+    procedure Set_Interlocked
+      (Bit          : in out Boolean;
+       Old_Value    : out Boolean;
+       Retry_Count  : in Natural;
+       Success_Flag : out Boolean);
+ 
+    procedure Add_Interlocked
+      (Addend       : in Short_Integer;
+       Augend       : in out Aligned_Word;
+       Sign         : out Integer);
+ 
+    type Aligned_Integer is record
+       Value : Integer;
+    end record;
+ 
+    for Aligned_Integer'Alignment use
+      Integer'Min (4, Standard'Maximum_Alignment);
+ 
+    type Aligned_Long_Integer is record
+       Value : Long_Integer;
+    end record;
+ 
+    for Aligned_Long_Integer'Alignment use
+      Integer'Min (8, Standard'Maximum_Alignment);
+ 
+    --  For the following declarations, note that the declaration without
+    --  a Retry_Count parameter mean to retry infinitely. A value of zero
+    --  for the Retry_Count means do not retry.
+ 
+    procedure Add_Atomic
+      (To           : in out Aligned_Integer;
+       Amount       : in Integer);
+ 
+    procedure Add_Atomic
+      (To           : in out Aligned_Integer;
+       Amount       : in Integer;
+       Retry_Count  : in Natural;
+       Old_Value    : out Integer;
+       Success_Flag : out Boolean);
+ 
+    procedure Add_Atomic
+      (To           : in out Aligned_Long_Integer;
+       Amount       : in Long_Integer);
+ 
+    procedure Add_Atomic
+      (To           : in out Aligned_Long_Integer;
+       Amount       : in Long_Integer;
+       Retry_Count  : in Natural;
+       Old_Value    : out Long_Integer;
+       Success_Flag : out Boolean);
+ 
+    procedure And_Atomic
+      (To           : in out Aligned_Integer;
+       From         : in Integer);
+ 
+    procedure And_Atomic
+      (To           : in out Aligned_Integer;
+       From         : in Integer;
+       Retry_Count  : in Natural;
+       Old_Value    : out Integer;
+       Success_Flag : out Boolean);
+ 
+    procedure And_Atomic
+      (To           : in out Aligned_Long_Integer;
+       From         : in Long_Integer);
+ 
+    procedure And_Atomic
+      (To           : in out Aligned_Long_Integer;
+       From         : in Long_Integer;
+       Retry_Count  : in Natural;
+       Old_Value    : out Long_Integer;
+       Success_Flag : out Boolean);
+ 
+    procedure Or_Atomic
+      (To           : in out Aligned_Integer;
+       From         : in Integer);
+ 
+    procedure Or_Atomic
+      (To           : in out Aligned_Integer;
+       From         : in Integer;
+       Retry_Count  : in Natural;
+       Old_Value    : out Integer;
+       Success_Flag : out Boolean);
+ 
+    procedure Or_Atomic
+      (To           : in out Aligned_Long_Integer;
+       From         : in Long_Integer);
+ 
+    procedure Or_Atomic
+      (To           : in out Aligned_Long_Integer;
+       From         : in Long_Integer;
+       Retry_Count  : in Natural;
+       Old_Value    : out Long_Integer;
+       Success_Flag : out Boolean);
+ 
+    type Insq_Status is
+      (Fail_No_Lock, OK_Not_First, OK_First);
+ 
+    for Insq_Status use
+      (Fail_No_Lock => -1,
+       OK_Not_First => 0,
+       OK_First     => +1);
+ 
+    type Remq_Status is (
+      Fail_No_Lock,
+      Fail_Was_Empty,
+      OK_Not_Empty,
+      OK_Empty);
+ 
+    for Remq_Status use
+      (Fail_No_Lock   => -1,
+       Fail_Was_Empty => 0,
+       OK_Not_Empty   => +1,
+       OK_Empty       => +2);
+ 
+    procedure Insqhi
+      (Item   : in  Address;
+       Header : in  Address;
+       Status : out Insq_Status);
+ 
+    procedure Remqhi
+      (Header : in  Address;
+       Item   : out Address;
+       Status : out Remq_Status);
+ 
+    procedure Insqti
+      (Item   : in  Address;
+       Header : in  Address;
+       Status : out Insq_Status);
+ 
+    procedure Remqti
+      (Header : in  Address;
+       Item   : out Address;
+       Status : out Remq_Status);
+ 
+ private
+ 
+    Address_Zero : constant Address := Null_Address;
+    No_Addr      : constant Address := Null_Address;
+ 
+    --  An AST_Handler value is from a typing point of view simply a pointer
+    --  to a procedure taking a single 64bit parameter. However, this
+    --  is a bit misleading, because the data that this pointer references is
+    --  highly stylized. See body of System.AST_Handling for full details.
+ 
+    type AST_Handler is access procedure (Param : Long_Integer);
+    No_AST_Handler : constant AST_Handler := null;
+ 
+    --  Other operators have incorrect profiles. It would be nice to make
+    --  them intrinsic, since the backend can handle them, but the front
+    --  end is not prepared to deal with them, so at least inline them.
+ 
+    pragma Inline_Always ("+");
+    pragma Inline_Always ("-");
+    pragma Inline_Always ("not");
+    pragma Inline_Always ("and");
+    pragma Inline_Always ("or");
+    pragma Inline_Always ("xor");
+ 
+    --  Other inlined subprograms
+ 
+    pragma Inline_Always (Fetch_From_Address);
+    pragma Inline_Always (Assign_To_Address);
+ 
+    --  Synchronization related subprograms. These are declared to have
+    --  convention C so that the critical parameters are passed by reference.
+    --  Without this, the parameters are passed by copy, creating load/store
+    --  race conditions. We also inline them, since this seems more in the
+    --  spirit of the original (hardware intrinsic) routines.
+ 
+    pragma Convention (C, Clear_Interlocked);
+    pragma Inline_Always (Clear_Interlocked);
+ 
+    pragma Convention (C, Set_Interlocked);
+    pragma Inline_Always (Set_Interlocked);
+ 
+    pragma Convention (C, Add_Interlocked);
+    pragma Inline_Always (Add_Interlocked);
+ 
+    pragma Convention (C, Add_Atomic);
+    pragma Inline_Always (Add_Atomic);
+ 
+    pragma Convention (C, And_Atomic);
+    pragma Inline_Always (And_Atomic);
+ 
+    pragma Convention (C, Or_Atomic);
+    pragma Inline_Always (Or_Atomic);
+ 
+    --  Provide proper unchecked conversion definitions for transfer
+    --  functions. Note that we need this level of indirection because
+    --  the formal parameter name is X and not Source (and this is indeed
+    --  detectable by a program)
+ 
+    function To_Unsigned_Byte_A is new
+      Unchecked_Conversion (Bit_Array_8, Unsigned_Byte);
+ 
+    function To_Unsigned_Byte (X : Bit_Array_8) return Unsigned_Byte
+      renames To_Unsigned_Byte_A;
+ 
+    function To_Bit_Array_8_A is new
+      Unchecked_Conversion (Unsigned_Byte, Bit_Array_8);
+ 
+    function To_Bit_Array_8 (X : Unsigned_Byte) return Bit_Array_8
+      renames To_Bit_Array_8_A;
+ 
+    function To_Unsigned_Word_A is new
+      Unchecked_Conversion (Bit_Array_16, Unsigned_Word);
+ 
+    function To_Unsigned_Word (X : Bit_Array_16) return Unsigned_Word
+      renames To_Unsigned_Word_A;
+ 
+    function To_Bit_Array_16_A is new
+      Unchecked_Conversion (Unsigned_Word, Bit_Array_16);
+ 
+    function To_Bit_Array_16 (X : Unsigned_Word) return Bit_Array_16
+      renames To_Bit_Array_16_A;
+ 
+    function To_Unsigned_Longword_A is new
+      Unchecked_Conversion (Bit_Array_32, Unsigned_Longword);
+ 
+    function To_Unsigned_Longword (X : Bit_Array_32) return Unsigned_Longword
+      renames To_Unsigned_Longword_A;
+ 
+    function To_Bit_Array_32_A is new
+      Unchecked_Conversion (Unsigned_Longword, Bit_Array_32);
+ 
+    function To_Bit_Array_32 (X : Unsigned_Longword) return Bit_Array_32
+      renames To_Bit_Array_32_A;
+ 
+    function To_Unsigned_32_A is new
+      Unchecked_Conversion (Bit_Array_32, Unsigned_32);
+ 
+    function To_Unsigned_32 (X : Bit_Array_32) return Unsigned_32
+      renames To_Unsigned_32_A;
+ 
+    function To_Bit_Array_32_A is new
+      Unchecked_Conversion (Unsigned_32, Bit_Array_32);
+ 
+    function To_Bit_Array_32 (X : Unsigned_32) return Bit_Array_32
+      renames To_Bit_Array_32_A;
+ 
+    function To_Unsigned_Quadword_A is new
+      Unchecked_Conversion (Bit_Array_64, Unsigned_Quadword);
+ 
+    function To_Unsigned_Quadword (X : Bit_Array_64) return Unsigned_Quadword
+      renames To_Unsigned_Quadword_A;
+ 
+    function To_Bit_Array_64_A is new
+      Unchecked_Conversion (Unsigned_Quadword, Bit_Array_64);
+ 
+    function To_Bit_Array_64 (X : Unsigned_Quadword) return Bit_Array_64
+      renames To_Bit_Array_64_A;
+ 
+    pragma Warnings (Off);
+    --  Turn warnings off. This is needed for systems with 64-bit integers,
+    --  where some of these operations are of dubious meaning, but we do not
+    --  want warnings when we compile on such systems.
+ 
+    function To_Address_A is new
+      Unchecked_Conversion (Integer, Address);
+    pragma Pure_Function (To_Address_A);
+ 
+    function To_Address (X : Integer) return Address
+      renames To_Address_A;
+    pragma Pure_Function (To_Address);
+ 
+    function To_Address_Long_A is new
+      Unchecked_Conversion (Unsigned_Longword, Address);
+    pragma Pure_Function (To_Address_Long_A);
+ 
+    function To_Address_Long (X : Unsigned_Longword) return Address
+      renames To_Address_Long_A;
+    pragma Pure_Function (To_Address_Long);
+ 
+    function To_Integer_A is new
+      Unchecked_Conversion (Address, Integer);
+ 
+    function To_Integer (X : Address) return Integer
+      renames To_Integer_A;
+ 
+    function To_Unsigned_Longword_A is new
+      Unchecked_Conversion (Address, Unsigned_Longword);
+ 
+    function To_Unsigned_Longword (X : Address) return Unsigned_Longword
+      renames To_Unsigned_Longword_A;
+ 
+    function To_Unsigned_Longword_A is new
+      Unchecked_Conversion (AST_Handler, Unsigned_Longword);
+ 
+    function To_Unsigned_Longword (X : AST_Handler) return Unsigned_Longword
+      renames To_Unsigned_Longword_A;
+ 
+    pragma Warnings (On);
+ 
+ end System.Aux_DEC;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-auxdec.adb gcc-4.0.0/gcc/ada/s-auxdec.adb
*** gcc-3.4.3/gcc/ada/s-auxdec.adb	Tue Oct 21 13:42:13 2003
--- gcc-4.0.0/gcc/ada/s-auxdec.adb	Mon Apr 19 15:20:04 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/Or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/Or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body System.Aux_DEC is
*** 102,110 ****
     function "-" (Left : Address; Right : Address) return Integer is
        pragma Unsuppress (All_Checks);
        --  Because this can raise Constraint_Error for 64-bit addresses
- 
     begin
!       return Integer (From_A (Left - Right));
     end "-";
  
     function "-" (Left : Address; Right : Integer) return Address is
--- 102,109 ----
     function "-" (Left : Address; Right : Address) return Integer is
        pragma Unsuppress (All_Checks);
        --  Because this can raise Constraint_Error for 64-bit addresses
     begin
!       return Integer (From_A (Left) - From_A (Right));
     end "-";
  
     function "-" (Left : Address; Right : Integer) return Address is
*************** package body System.Aux_DEC is
*** 120,126 ****
        type T_Ptr is access all Target;
        function To_T_Ptr is new Unchecked_Conversion (Address, T_Ptr);
        Ptr : constant T_Ptr := To_T_Ptr (A);
- 
     begin
        return Ptr.all;
     end Fetch_From_Address;
--- 119,124 ----
*************** package body System.Aux_DEC is
*** 133,139 ****
        type T_Ptr is access all Target;
        function To_T_Ptr is new Unchecked_Conversion (Address, T_Ptr);
        Ptr : constant T_Ptr := To_T_Ptr (A);
- 
     begin
        Ptr.all := T;
     end Assign_To_Address;
--- 131,136 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/s-auxdec.ads gcc-4.0.0/gcc/ada/s-auxdec.ads
*** gcc-3.4.3/gcc/ada/s-auxdec.ads	Tue Oct 21 13:42:13 2003
--- gcc-4.0.0/gcc/ada/s-auxdec.ads	Fri Jun 11 10:47:36 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1996-2002 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1996-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Unchecked_Conversion;
*** 42,47 ****
--- 42,57 ----
  package System.Aux_DEC is
  pragma Elaborate_Body (Aux_DEC);
  
+    subtype Short_Address is Address;
+    --  In some versions of System.Aux_DEC, notably that for VMS on the
+    --  ia64, there are two address types (64-bit and 32-bit), and the
+    --  name Short_Address is used for the short address form. To avoid
+    --  difficulties (in regression tests and elsewhere) with units that
+    --  reference Short_Address, it is provided for other targets as a
+    --  synonum for the normal Address type, and, as in the case where
+    --  the lengths are different, Address and Short_Address can be
+    --  freely inter-converted.
+ 
     type Integer_8  is range -2 **  (8 - 1) .. +2 **  (8 - 1) - 1;
     for Integer_8'Size  use  8;
  
*************** private
*** 449,455 ****
     --  convention C so that the critical parameters are passed by reference.
     --  Without this, the parameters are passed by copy, creating load/store
     --  race conditions. We also inline them, since this seems more in the
!    --  spirit of the original (hardware instrinsic) routines.
  
     pragma Convention (C, Clear_Interlocked);
     pragma Inline_Always (Clear_Interlocked);
--- 459,465 ----
     --  convention C so that the critical parameters are passed by reference.
     --  Without this, the parameters are passed by copy, creating load/store
     --  race conditions. We also inline them, since this seems more in the
!    --  spirit of the original (hardware intrinsic) routines.
  
     pragma Convention (C, Clear_Interlocked);
     pragma Inline_Always (Clear_Interlocked);
diff -Nrcpad gcc-3.4.3/gcc/ada/s-bitops.adb gcc-4.0.0/gcc/ada/s-bitops.adb
*** gcc-3.4.3/gcc/ada/s-bitops.adb	Tue Oct 21 13:42:13 2003
--- gcc-4.0.0/gcc/ada/s-bitops.adb	Wed Oct 27 13:39:44 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 1996-2002 Free Software Foundation, Inc.           --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 1996-2004 Free Software Foundation, Inc.           --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body System.Bit_Ops is
*** 123,132 ****
              Bitc : constant Natural := Llen mod 8;
  
           begin
!             if Llen /= Rlen then
!                return False;
! 
!             elsif LeftB (1 .. BLen) /= RightB (1 .. BLen) then
                 return False;
  
              elsif Bitc /= 0 then
--- 123,129 ----
              Bitc : constant Natural := Llen mod 8;
  
           begin
!             if LeftB (1 .. BLen) /= RightB (1 .. BLen) then
                 return False;
  
              elsif Bitc /= 0 then
diff -Nrcpad gcc-3.4.3/gcc/ada/s-bitops.ads gcc-4.0.0/gcc/ada/s-bitops.ads
*** gcc-3.4.3/gcc/ada/s-bitops.ads	Thu Apr 24 17:54:08 2003
--- gcc-4.0.0/gcc/ada/s-bitops.ads	Wed Oct 27 13:39:44 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-1999, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package System.Bit_Ops is
*** 45,55 ****
     procedure Bit_And
       (Left   : System.Address;
        Llen   : Natural;
!       Right  : Address;
        Rlen   : Natural;
        Result : System.Address);
     --  Bitwise "and" of given bit string with result being placed in Result.
!    --  The or operation is allowed to destroy unused bits in the last byte,
     --  i.e. to leave them set in an undefined manner. Note that Left, Right
     --  and Result always have the same length in bits (Len).
  
--- 45,55 ----
     procedure Bit_And
       (Left   : System.Address;
        Llen   : Natural;
!       Right  : System.Address;
        Rlen   : Natural;
        Result : System.Address);
     --  Bitwise "and" of given bit string with result being placed in Result.
!    --  The and operation is allowed to destroy unused bits in the last byte,
     --  i.e. to leave them set in an undefined manner. Note that Left, Right
     --  and Result always have the same length in bits (Len).
  
*************** package System.Bit_Ops is
*** 77,83 ****
     procedure Bit_Or
       (Left   : System.Address;
        Llen   : Natural;
!       Right  : Address;
        Rlen   : Natural;
        Result : System.Address);
     --  Bitwise "or" of given bit string with result being placed in Result.
--- 77,83 ----
     procedure Bit_Or
       (Left   : System.Address;
        Llen   : Natural;
!       Right  : System.Address;
        Rlen   : Natural;
        Result : System.Address);
     --  Bitwise "or" of given bit string with result being placed in Result.
*************** package System.Bit_Ops is
*** 88,98 ****
     procedure Bit_Xor
       (Left   : System.Address;
        Llen   : Natural;
!       Right  : Address;
        Rlen   : Natural;
        Result : System.Address);
     --  Bitwise "xor" of given bit string with result being placed in Result.
!    --  The or operation is allowed to destroy unused bits in the last byte,
     --  i.e. to leave them set in an undefined manner. Note that Left, Right
     --  and Result always have the same length in bits (Len).
  
--- 88,98 ----
     procedure Bit_Xor
       (Left   : System.Address;
        Llen   : Natural;
!       Right  : System.Address;
        Rlen   : Natural;
        Result : System.Address);
     --  Bitwise "xor" of given bit string with result being placed in Result.
!    --  The xor operation is allowed to destroy unused bits in the last byte,
     --  i.e. to leave them set in an undefined manner. Note that Left, Right
     --  and Result always have the same length in bits (Len).
  
diff -Nrcpad gcc-3.4.3/gcc/ada/s-carsi8.adb gcc-4.0.0/gcc/ada/s-carsi8.adb
*** gcc-3.4.3/gcc/ada/s-carsi8.adb	Tue Oct 21 13:42:13 2003
--- gcc-4.0.0/gcc/ada/s-carsi8.adb	Fri Apr 23 10:58:31 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2002 Free Software Foundation, Inc.            --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 31,36 ****
--- 31,38 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
+ with System.Address_Operations; use System.Address_Operations;
+ 
  with Unchecked_Conversion;
  
  package body System.Compare_Array_Signed_8 is
*************** package body System.Compare_Array_Signed
*** 64,78 ****
       (Left      : System.Address;
        Right     : System.Address;
        Left_Len  : Natural;
!       Right_Len : Natural)
!       return      Integer
     is
        Compare_Len : constant Natural := Natural'Min (Left_Len, Right_Len);
  
     begin
        --  If operands are non-aligned, or length is too short, go by bytes
  
!       if (((Left or Right) and 2#11#) /= 0) or else Compare_Len < 4 then
           return Compare_Array_S8_Unaligned (Left, Right, Left_Len, Right_Len);
        end if;
  
--- 66,79 ----
       (Left      : System.Address;
        Right     : System.Address;
        Left_Len  : Natural;
!       Right_Len : Natural) return Integer
     is
        Compare_Len : constant Natural := Natural'Min (Left_Len, Right_Len);
  
     begin
        --  If operands are non-aligned, or length is too short, go by bytes
  
!       if ModA (OrA (Left, Right), 4) /= 0 or else Compare_Len < 4 then
           return Compare_Array_S8_Unaligned (Left, Right, Left_Len, Right_Len);
        end if;
  
*************** package body System.Compare_Array_Signed
*** 88,102 ****
           for J in 0 .. Clen4 loop
              if LeftP (J) /= RightP (J) then
                 return Compare_Array_S8_Unaligned
!                         (Left  + Address (4 * J),
!                          Right + Address (4 * J),
                           4, 4);
              end if;
           end loop;
  
           return Compare_Array_S8_Unaligned
!                   (Left      + Address (Clen4F),
!                    Right     + Address (Clen4F),
                     Left_Len  - Clen4F,
                     Right_Len - Clen4F);
        end;
--- 89,103 ----
           for J in 0 .. Clen4 loop
              if LeftP (J) /= RightP (J) then
                 return Compare_Array_S8_Unaligned
!                         (AddA (Left,  Address (4 * J)),
!                          AddA (Right, Address (4 * J)),
                           4, 4);
              end if;
           end loop;
  
           return Compare_Array_S8_Unaligned
!                   (AddA (Left,  Address (Clen4F)),
!                    AddA (Right, Address (Clen4F)),
                     Left_Len  - Clen4F,
                     Right_Len - Clen4F);
        end;
*************** package body System.Compare_Array_Signed
*** 110,117 ****
       (Left      : System.Address;
        Right     : System.Address;
        Left_Len  : Natural;
!       Right_Len : Natural)
!       return      Integer
     is
        Compare_Len : constant Natural := Natural'Min (Left_Len, Right_Len);
  
--- 111,117 ----
       (Left      : System.Address;
        Right     : System.Address;
        Left_Len  : Natural;
!       Right_Len : Natural) return Integer
     is
        Compare_Len : constant Natural := Natural'Min (Left_Len, Right_Len);
  
diff -Nrcpad gcc-3.4.3/gcc/ada/s-carsi8.ads gcc-4.0.0/gcc/ada/s-carsi8.ads
*** gcc-3.4.3/gcc/ada/s-carsi8.ads	Tue Oct 21 13:42:13 2003
--- gcc-4.0.0/gcc/ada/s-carsi8.ads	Wed Oct 27 13:39:44 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2002 Free Software Foundation, Inc.            --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package System.Compare_Array_Signed_8 is
*** 44,51 ****
       (Left      : System.Address;
        Right     : System.Address;
        Left_Len  : Natural;
!       Right_Len : Natural)
!       return      Integer;
     --  Compare the array starting at address Left of length Left_Len
     --  with the array starting at address Right of length Right_Len.
     --  The comparison is in the normal Ada semantic sense of array
--- 44,50 ----
       (Left      : System.Address;
        Right     : System.Address;
        Left_Len  : Natural;
!       Right_Len : Natural) return Integer;
     --  Compare the array starting at address Left of length Left_Len
     --  with the array starting at address Right of length Right_Len.
     --  The comparison is in the normal Ada semantic sense of array
*************** package System.Compare_Array_Signed_8 is
*** 57,65 ****
       (Left      : System.Address;
        Right     : System.Address;
        Left_Len  : Natural;
!       Right_Len : Natural)
!       return      Integer;
!    --  Same functionality as Compare_Array_U8 but always proceeds by
     --  bytes. Used when the caller knows that the operands are unaligned,
     --  or short enough that it makes no sense to go by words.
  
--- 56,63 ----
       (Left      : System.Address;
        Right     : System.Address;
        Left_Len  : Natural;
!       Right_Len : Natural) return Integer;
!    --  Same functionality as Compare_Array_S8 but always proceeds by
     --  bytes. Used when the caller knows that the operands are unaligned,
     --  or short enough that it makes no sense to go by words.
  
diff -Nrcpad gcc-3.4.3/gcc/ada/s-carun8.adb gcc-4.0.0/gcc/ada/s-carun8.adb
*** gcc-3.4.3/gcc/ada/s-carun8.adb	Tue Oct 21 13:42:13 2003
--- gcc-4.0.0/gcc/ada/s-carun8.adb	Fri Apr 23 10:58:31 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2002 Free Software Foundation, Inc.            --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 31,36 ****
--- 31,38 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
+ with System.Address_Operations; use System.Address_Operations;
+ 
  with Unchecked_Conversion;
  
  package body System.Compare_Array_Unsigned_8 is
*************** package body System.Compare_Array_Unsign
*** 63,77 ****
       (Left      : System.Address;
        Right     : System.Address;
        Left_Len  : Natural;
!       Right_Len : Natural)
!       return      Integer
     is
        Compare_Len : constant Natural := Natural'Min (Left_Len, Right_Len);
  
     begin
        --  If operands are non-aligned, or length is too short, go by bytes
  
!       if (((Left or Right) and 2#11#) /= 0) or else Compare_Len < 4 then
           return Compare_Array_U8_Unaligned (Left, Right, Left_Len, Right_Len);
        end if;
  
--- 65,78 ----
       (Left      : System.Address;
        Right     : System.Address;
        Left_Len  : Natural;
!       Right_Len : Natural) return Integer
     is
        Compare_Len : constant Natural := Natural'Min (Left_Len, Right_Len);
  
     begin
        --  If operands are non-aligned, or length is too short, go by bytes
  
!       if (ModA (OrA (Left, Right), 4) /= 0) or else Compare_Len < 4 then
           return Compare_Array_U8_Unaligned (Left, Right, Left_Len, Right_Len);
        end if;
  
*************** package body System.Compare_Array_Unsign
*** 87,101 ****
           for J in 0 .. Clen4 loop
              if LeftP (J) /= RightP (J) then
                 return Compare_Array_U8_Unaligned
!                         (Left  + Address (4 * J),
!                          Right + Address (4 * J),
                           4, 4);
              end if;
           end loop;
  
           return Compare_Array_U8_Unaligned
!                   (Left      + Address (Clen4F),
!                    Right     + Address (Clen4F),
                     Left_Len  - Clen4F,
                     Right_Len - Clen4F);
        end;
--- 88,102 ----
           for J in 0 .. Clen4 loop
              if LeftP (J) /= RightP (J) then
                 return Compare_Array_U8_Unaligned
!                         (AddA (Left,  Address (4 * J)),
!                          AddA (Right, Address (4 * J)),
                           4, 4);
              end if;
           end loop;
  
           return Compare_Array_U8_Unaligned
!                   (AddA (Left,  Address (Clen4F)),
!                    AddA (Right, Address (Clen4F)),
                     Left_Len  - Clen4F,
                     Right_Len - Clen4F);
        end;
*************** package body System.Compare_Array_Unsign
*** 109,116 ****
       (Left      : System.Address;
        Right     : System.Address;
        Left_Len  : Natural;
!       Right_Len : Natural)
!       return      Integer
     is
        Compare_Len : constant Natural := Natural'Min (Left_Len, Right_Len);
  
--- 110,116 ----
       (Left      : System.Address;
        Right     : System.Address;
        Left_Len  : Natural;
!       Right_Len : Natural) return Integer
     is
        Compare_Len : constant Natural := Natural'Min (Left_Len, Right_Len);
  
diff -Nrcpad gcc-3.4.3/gcc/ada/s-carun8.ads gcc-4.0.0/gcc/ada/s-carun8.ads
*** gcc-3.4.3/gcc/ada/s-carun8.ads	Tue Oct 21 13:42:13 2003
--- gcc-4.0.0/gcc/ada/s-carun8.ads	Mon Apr 19 15:20:05 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2002 Free Software Foundation, Inc.            --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package System.Compare_Array_Unsigned_8 
*** 44,51 ****
       (Left      : System.Address;
        Right     : System.Address;
        Left_Len  : Natural;
!       Right_Len : Natural)
!       return      Integer;
     --  Compare the array starting at address Left of length Left_Len
     --  with the array starting at address Right of length Right_Len.
     --  The comparison is in the normal Ada semantic sense of array
--- 44,50 ----
       (Left      : System.Address;
        Right     : System.Address;
        Left_Len  : Natural;
!       Right_Len : Natural) return Integer;
     --  Compare the array starting at address Left of length Left_Len
     --  with the array starting at address Right of length Right_Len.
     --  The comparison is in the normal Ada semantic sense of array
*************** package System.Compare_Array_Unsigned_8 
*** 57,64 ****
       (Left      : System.Address;
        Right     : System.Address;
        Left_Len  : Natural;
!       Right_Len : Natural)
!       return      Integer;
     --  Same functionality as Compare_Array_U8 but always proceeds by
     --  bytes. Used when the caller knows that the operands are unaligned,
     --  or short enough that it makes no sense to go by words.
--- 56,62 ----
       (Left      : System.Address;
        Right     : System.Address;
        Left_Len  : Natural;
!       Right_Len : Natural) return Integer;
     --  Same functionality as Compare_Array_U8 but always proceeds by
     --  bytes. Used when the caller knows that the operands are unaligned,
     --  or short enough that it makes no sense to go by words.
diff -Nrcpad gcc-3.4.3/gcc/ada/s-casi16.adb gcc-4.0.0/gcc/ada/s-casi16.adb
*** gcc-3.4.3/gcc/ada/s-casi16.adb	Tue Oct 21 13:42:13 2003
--- gcc-4.0.0/gcc/ada/s-casi16.adb	Fri Apr 23 10:58:31 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2002 Free Software Foundation, Inc.            --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 31,36 ****
--- 31,38 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
+ with System.Address_Operations; use System.Address_Operations;
+ 
  with Unchecked_Conversion;
  
  package body System.Compare_Array_Signed_16 is
*************** package body System.Compare_Array_Signed
*** 65,72 ****
       (Left      : System.Address;
        Right     : System.Address;
        Left_Len  : Natural;
!       Right_Len : Natural)
!       return      Integer
     is
        Clen : Natural := Natural'Min (Left_Len, Right_Len);
        --  Number of elements left to compare
--- 67,73 ----
       (Left      : System.Address;
        Right     : System.Address;
        Left_Len  : Natural;
!       Right_Len : Natural) return Integer
     is
        Clen : Natural := Natural'Min (Left_Len, Right_Len);
        --  Number of elements left to compare
*************** package body System.Compare_Array_Signed
*** 78,96 ****
     begin
        --  Go by words if possible
  
!       if ((Left or Right) and (4 - 1)) = 0 then
           while Clen > 1
             and then W (L).all = W (R).all
           loop
              Clen := Clen - 2;
!             L := L + 4;
!             R := R + 4;
           end loop;
        end if;
  
        --  Case of going by aligned half words
  
!       if ((Left or Right) and (2 - 1)) = 0 then
           while Clen /= 0 loop
              if H (L).all /= H (R).all then
                 if H (L).all > H (R).all then
--- 79,97 ----
     begin
        --  Go by words if possible
  
!       if ModA (OrA (Left, Right), 4) = 0 then
           while Clen > 1
             and then W (L).all = W (R).all
           loop
              Clen := Clen - 2;
!             L := AddA (L, 4);
!             R := AddA (R, 4);
           end loop;
        end if;
  
        --  Case of going by aligned half words
  
!       if ModA (OrA (Left, Right), 2) = 0 then
           while Clen /= 0 loop
              if H (L).all /= H (R).all then
                 if H (L).all > H (R).all then
*************** package body System.Compare_Array_Signed
*** 101,108 ****
              end if;
  
              Clen := Clen - 1;
!             L := L + 2;
!             R := R + 2;
           end loop;
  
        --  Case of going by unaligned half words
--- 102,109 ----
              end if;
  
              Clen := Clen - 1;
!             L := AddA (L, 2);
!             R := AddA (R, 2);
           end loop;
  
        --  Case of going by unaligned half words
*************** package body System.Compare_Array_Signed
*** 118,125 ****
              end if;
  
              Clen := Clen - 1;
!             L := L + 2;
!             R := R + 2;
           end loop;
        end if;
  
--- 119,126 ----
              end if;
  
              Clen := Clen - 1;
!             L := AddA (L, 2);
!             R := AddA (R, 2);
           end loop;
        end if;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/s-casi16.ads gcc-4.0.0/gcc/ada/s-casi16.ads
*** gcc-3.4.3/gcc/ada/s-casi16.ads	Tue Oct 21 13:42:13 2003
--- gcc-4.0.0/gcc/ada/s-casi16.ads	Mon Apr 19 15:20:05 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2002 Free Software Foundation, Inc.            --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package System.Compare_Array_Signed_16 i
*** 44,51 ****
       (Left      : System.Address;
        Right     : System.Address;
        Left_Len  : Natural;
!       Right_Len : Natural)
!       return      Integer;
     --  Compare the array starting at address Left of length Left_Len
     --  with the array starting at address Right of length Right_Len.
     --  The comparison is in the normal Ada semantic sense of array
--- 44,50 ----
       (Left      : System.Address;
        Right     : System.Address;
        Left_Len  : Natural;
!       Right_Len : Natural) return Integer;
     --  Compare the array starting at address Left of length Left_Len
     --  with the array starting at address Right of length Right_Len.
     --  The comparison is in the normal Ada semantic sense of array
diff -Nrcpad gcc-3.4.3/gcc/ada/s-casi32.adb gcc-4.0.0/gcc/ada/s-casi32.adb
*** gcc-3.4.3/gcc/ada/s-casi32.adb	Tue Oct 21 13:42:13 2003
--- gcc-4.0.0/gcc/ada/s-casi32.adb	Fri Apr 23 10:58:31 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2002 Free Software Foundation, Inc.            --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 31,36 ****
--- 31,38 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
+ with System.Address_Operations; use System.Address_Operations;
+ 
  with Unchecked_Conversion;
  
  package body System.Compare_Array_Signed_32 is
*************** package body System.Compare_Array_Signed
*** 60,67 ****
       (Left      : System.Address;
        Right     : System.Address;
        Left_Len  : Natural;
!       Right_Len : Natural)
!       return      Integer
     is
        Clen : Natural := Natural'Min (Left_Len, Right_Len);
        --  Number of elements left to compare
--- 62,68 ----
       (Left      : System.Address;
        Right     : System.Address;
        Left_Len  : Natural;
!       Right_Len : Natural) return Integer
     is
        Clen : Natural := Natural'Min (Left_Len, Right_Len);
        --  Number of elements left to compare
*************** package body System.Compare_Array_Signed
*** 73,79 ****
     begin
        --  Case of going by aligned words
  
!       if ((Left or Right) and (4 - 1)) = 0 then
           while Clen /= 0 loop
              if W (L).all /= W (R).all then
                 if W (L).all > W (R).all then
--- 74,80 ----
     begin
        --  Case of going by aligned words
  
!       if ModA (OrA (Left, Right), 4) = 0 then
           while Clen /= 0 loop
              if W (L).all /= W (R).all then
                 if W (L).all > W (R).all then
*************** package body System.Compare_Array_Signed
*** 84,91 ****
              end if;
  
              Clen := Clen - 1;
!             L := L + 4;
!             R := R + 4;
           end loop;
  
        --  Case of going by unaligned words
--- 85,92 ----
              end if;
  
              Clen := Clen - 1;
!             L := AddA (L, 4);
!             R := AddA (R, 4);
           end loop;
  
        --  Case of going by unaligned words
*************** package body System.Compare_Array_Signed
*** 101,108 ****
              end if;
  
              Clen := Clen - 1;
!             L := L + 4;
!             R := R + 4;
           end loop;
        end if;
  
--- 102,109 ----
              end if;
  
              Clen := Clen - 1;
!             L := AddA (L, 4);
!             R := AddA (R, 4);
           end loop;
        end if;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/s-casi32.ads gcc-4.0.0/gcc/ada/s-casi32.ads
*** gcc-3.4.3/gcc/ada/s-casi32.ads	Tue Oct 21 13:42:13 2003
--- gcc-4.0.0/gcc/ada/s-casi32.ads	Mon Apr 19 15:20:05 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2002 Free Software Foundation, Inc.            --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
diff -Nrcpad gcc-3.4.3/gcc/ada/s-casi64.adb gcc-4.0.0/gcc/ada/s-casi64.adb
*** gcc-3.4.3/gcc/ada/s-casi64.adb	Tue Oct 21 13:42:13 2003
--- gcc-4.0.0/gcc/ada/s-casi64.adb	Fri Apr 23 10:58:31 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2002 Free Software Foundation, Inc.            --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 31,36 ****
--- 31,38 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
+ with System.Address_Operations; use System.Address_Operations;
+ 
  with Unchecked_Conversion;
  
  package body System.Compare_Array_Signed_64 is
*************** package body System.Compare_Array_Signed
*** 60,67 ****
       (Left      : System.Address;
        Right     : System.Address;
        Left_Len  : Natural;
!       Right_Len : Natural)
!       return      Integer
     is
        Clen : Natural := Natural'Min (Left_Len, Right_Len);
        --  Number of elements left to compare
--- 62,68 ----
       (Left      : System.Address;
        Right     : System.Address;
        Left_Len  : Natural;
!       Right_Len : Natural) return Integer
     is
        Clen : Natural := Natural'Min (Left_Len, Right_Len);
        --  Number of elements left to compare
*************** package body System.Compare_Array_Signed
*** 71,79 ****
        --  Pointers to next elements to compare
  
     begin
!       --  Case of going by aligned words
  
!       if ((Left or Right) and (8 - 1)) = 0 then
           while Clen /= 0 loop
              if W (L).all /= W (R).all then
                 if W (L).all > W (R).all then
--- 72,80 ----
        --  Pointers to next elements to compare
  
     begin
!       --  Case of going by aligned double words
  
!       if ModA (OrA (Left, Right), 8) = 0 then
           while Clen /= 0 loop
              if W (L).all /= W (R).all then
                 if W (L).all > W (R).all then
*************** package body System.Compare_Array_Signed
*** 84,94 ****
              end if;
  
              Clen := Clen - 1;
!             L := L + 8;
!             R := R + 8;
           end loop;
  
!       --  Case of going by unaligned words
  
        else
           while Clen /= 0 loop
--- 85,95 ----
              end if;
  
              Clen := Clen - 1;
!             L := AddA (L, 8);
!             R := AddA (R, 8);
           end loop;
  
!       --  Case of going by unaligned double words
  
        else
           while Clen /= 0 loop
*************** package body System.Compare_Array_Signed
*** 101,108 ****
              end if;
  
              Clen := Clen - 1;
!             L := L + 8;
!             R := R + 8;
           end loop;
        end if;
  
--- 102,109 ----
              end if;
  
              Clen := Clen - 1;
!             L := AddA (L, 8);
!             R := AddA (R, 8);
           end loop;
        end if;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/s-casi64.ads gcc-4.0.0/gcc/ada/s-casi64.ads
*** gcc-3.4.3/gcc/ada/s-casi64.ads	Tue Oct 21 13:42:13 2003
--- gcc-4.0.0/gcc/ada/s-casi64.ads	Mon Apr 19 15:20:05 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2002 Free Software Foundation, Inc.            --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package System.Compare_Array_Signed_64 i
*** 44,51 ****
       (Left      : System.Address;
        Right     : System.Address;
        Left_Len  : Natural;
!       Right_Len : Natural)
!       return      Integer;
     --  Compare the array starting at address Left of length Left_Len
     --  with the array starting at address Right of length Right_Len.
     --  The comparison is in the normal Ada semantic sense of array
--- 44,50 ----
       (Left      : System.Address;
        Right     : System.Address;
        Left_Len  : Natural;
!       Right_Len : Natural) return Integer;
     --  Compare the array starting at address Left of length Left_Len
     --  with the array starting at address Right of length Right_Len.
     --  The comparison is in the normal Ada semantic sense of array
diff -Nrcpad gcc-3.4.3/gcc/ada/s-caun16.adb gcc-4.0.0/gcc/ada/s-caun16.adb
*** gcc-3.4.3/gcc/ada/s-caun16.adb	Tue Oct 21 13:42:13 2003
--- gcc-4.0.0/gcc/ada/s-caun16.adb	Fri Apr 23 10:58:31 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2002 Free Software Foundation, Inc.            --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 31,36 ****
--- 31,38 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
+ with System.Address_Operations; use System.Address_Operations;
+ 
  with Unchecked_Conversion;
  
  package body System.Compare_Array_Unsigned_16 is
*************** package body System.Compare_Array_Unsign
*** 65,72 ****
       (Left      : System.Address;
        Right     : System.Address;
        Left_Len  : Natural;
!       Right_Len : Natural)
!       return      Integer
     is
        Clen : Natural := Natural'Min (Left_Len, Right_Len);
        --  Number of elements left to compare
--- 67,73 ----
       (Left      : System.Address;
        Right     : System.Address;
        Left_Len  : Natural;
!       Right_Len : Natural) return Integer
     is
        Clen : Natural := Natural'Min (Left_Len, Right_Len);
        --  Number of elements left to compare
*************** package body System.Compare_Array_Unsign
*** 78,96 ****
     begin
        --  Go by words if possible
  
!       if ((Left or Right) and (4 - 1)) = 0 then
           while Clen > 1
             and then W (L).all = W (R).all
           loop
              Clen := Clen - 2;
!             L := L + 4;
!             R := R + 4;
           end loop;
        end if;
  
        --  Case of going by aligned half words
  
!       if ((Left or Right) and (2 - 1)) = 0 then
           while Clen /= 0 loop
              if H (L).all /= H (R).all then
                 if H (L).all > H (R).all then
--- 79,97 ----
     begin
        --  Go by words if possible
  
!       if ModA (OrA (Left, Right), 4) = 0 then
           while Clen > 1
             and then W (L).all = W (R).all
           loop
              Clen := Clen - 2;
!             L := AddA (L, 4);
!             R := AddA (R, 4);
           end loop;
        end if;
  
        --  Case of going by aligned half words
  
!       if ModA (OrA (Left, Right), 2) = 0 then
           while Clen /= 0 loop
              if H (L).all /= H (R).all then
                 if H (L).all > H (R).all then
*************** package body System.Compare_Array_Unsign
*** 101,108 ****
              end if;
  
              Clen := Clen - 1;
!             L := L + 2;
!             R := R + 2;
           end loop;
  
        --  Case of going by unaligned half words
--- 102,109 ----
              end if;
  
              Clen := Clen - 1;
!             L := AddA (L, 2);
!             R := AddA (R, 2);
           end loop;
  
        --  Case of going by unaligned half words
*************** package body System.Compare_Array_Unsign
*** 118,125 ****
              end if;
  
              Clen := Clen - 1;
!             L := L + 2;
!             R := R + 2;
           end loop;
        end if;
  
--- 119,126 ----
              end if;
  
              Clen := Clen - 1;
!             L := AddA (L, 2);
!             R := AddA (R, 2);
           end loop;
        end if;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/s-caun16.ads gcc-4.0.0/gcc/ada/s-caun16.ads
*** gcc-3.4.3/gcc/ada/s-caun16.ads	Tue Oct 21 13:42:13 2003
--- gcc-4.0.0/gcc/ada/s-caun16.ads	Mon Apr 19 15:20:05 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2002 Free Software Foundation, Inc.            --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package System.Compare_Array_Unsigned_16
*** 44,51 ****
       (Left      : System.Address;
        Right     : System.Address;
        Left_Len  : Natural;
!       Right_Len : Natural)
!       return      Integer;
     --  Compare the array starting at address Left of length Left_Len
     --  with the array starting at address Right of length Right_Len.
     --  The comparison is in the normal Ada semantic sense of array
--- 44,50 ----
       (Left      : System.Address;
        Right     : System.Address;
        Left_Len  : Natural;
!       Right_Len : Natural) return Integer;
     --  Compare the array starting at address Left of length Left_Len
     --  with the array starting at address Right of length Right_Len.
     --  The comparison is in the normal Ada semantic sense of array
diff -Nrcpad gcc-3.4.3/gcc/ada/s-caun32.adb gcc-4.0.0/gcc/ada/s-caun32.adb
*** gcc-3.4.3/gcc/ada/s-caun32.adb	Tue Oct 21 13:42:13 2003
--- gcc-4.0.0/gcc/ada/s-caun32.adb	Fri Apr 23 10:58:31 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2002 Free Software Foundation, Inc.            --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 31,36 ****
--- 31,38 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
+ with System.Address_Operations; use System.Address_Operations;
+ 
  with Unchecked_Conversion;
  
  package body System.Compare_Array_Unsigned_32 is
*************** package body System.Compare_Array_Unsign
*** 60,67 ****
       (Left      : System.Address;
        Right     : System.Address;
        Left_Len  : Natural;
!       Right_Len : Natural)
!       return      Integer
     is
        Clen : Natural := Natural'Min (Left_Len, Right_Len);
        --  Number of elements left to compare
--- 62,68 ----
       (Left      : System.Address;
        Right     : System.Address;
        Left_Len  : Natural;
!       Right_Len : Natural) return Integer
     is
        Clen : Natural := Natural'Min (Left_Len, Right_Len);
        --  Number of elements left to compare
*************** package body System.Compare_Array_Unsign
*** 73,79 ****
     begin
        --  Case of going by aligned words
  
!       if ((Left or Right) and (4 - 1)) = 0 then
           while Clen /= 0 loop
              if W (L).all /= W (R).all then
                 if W (L).all > W (R).all then
--- 74,80 ----
     begin
        --  Case of going by aligned words
  
!       if ModA (OrA (Left, Right), 4) = 0 then
           while Clen /= 0 loop
              if W (L).all /= W (R).all then
                 if W (L).all > W (R).all then
*************** package body System.Compare_Array_Unsign
*** 84,91 ****
              end if;
  
              Clen := Clen - 1;
!             L := L + 4;
!             R := R + 4;
           end loop;
  
        --  Case of going by unaligned words
--- 85,92 ----
              end if;
  
              Clen := Clen - 1;
!             L := AddA (L, 4);
!             R := AddA (R, 4);
           end loop;
  
        --  Case of going by unaligned words
*************** package body System.Compare_Array_Unsign
*** 101,108 ****
              end if;
  
              Clen := Clen - 1;
!             L := L + 4;
!             R := R + 4;
           end loop;
        end if;
  
--- 102,109 ----
              end if;
  
              Clen := Clen - 1;
!             L := AddA (L, 4);
!             R := AddA (R, 4);
           end loop;
        end if;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/s-caun32.ads gcc-4.0.0/gcc/ada/s-caun32.ads
*** gcc-3.4.3/gcc/ada/s-caun32.ads	Tue Oct 21 13:42:13 2003
--- gcc-4.0.0/gcc/ada/s-caun32.ads	Mon Apr 19 15:20:05 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2002 Free Software Foundation, Inc.            --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package System.Compare_Array_Unsigned_32
*** 44,51 ****
       (Left      : System.Address;
        Right     : System.Address;
        Left_Len  : Natural;
!       Right_Len : Natural)
!       return      Integer;
     --  Compare the array starting at address Left of length Left_Len
     --  with the array starting at address Right of length Right_Len.
     --  The comparison is in the normal Ada semantic sense of array
--- 44,50 ----
       (Left      : System.Address;
        Right     : System.Address;
        Left_Len  : Natural;
!       Right_Len : Natural) return Integer;
     --  Compare the array starting at address Left of length Left_Len
     --  with the array starting at address Right of length Right_Len.
     --  The comparison is in the normal Ada semantic sense of array
diff -Nrcpad gcc-3.4.3/gcc/ada/s-caun64.adb gcc-4.0.0/gcc/ada/s-caun64.adb
*** gcc-3.4.3/gcc/ada/s-caun64.adb	Tue Oct 21 13:42:13 2003
--- gcc-4.0.0/gcc/ada/s-caun64.adb	Fri Apr 23 10:58:31 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2002 Free Software Foundation, Inc.            --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 31,36 ****
--- 31,38 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
+ with System.Address_Operations; use System.Address_Operations;
+ 
  with Unchecked_Conversion;
  
  package body System.Compare_Array_Unsigned_64 is
*************** package body System.Compare_Array_Unsign
*** 59,66 ****
       (Left      : System.Address;
        Right     : System.Address;
        Left_Len  : Natural;
!       Right_Len : Natural)
!       return      Integer
     is
        Clen : Natural := Natural'Min (Left_Len, Right_Len);
        --  Number of elements left to compare
--- 61,67 ----
       (Left      : System.Address;
        Right     : System.Address;
        Left_Len  : Natural;
!       Right_Len : Natural) return Integer
     is
        Clen : Natural := Natural'Min (Left_Len, Right_Len);
        --  Number of elements left to compare
*************** package body System.Compare_Array_Unsign
*** 70,78 ****
        --  Pointers to next elements to compare
  
     begin
!       --  Case of going by aligned words
  
!       if ((Left or Right) and (8 - 1)) = 0 then
           while Clen /= 0 loop
              if W (L).all /= W (R).all then
                 if W (L).all > W (R).all then
--- 71,79 ----
        --  Pointers to next elements to compare
  
     begin
!       --  Case of going by aligned double words
  
!       if ModA (OrA (Left, Right), 8) = 0 then
           while Clen /= 0 loop
              if W (L).all /= W (R).all then
                 if W (L).all > W (R).all then
*************** package body System.Compare_Array_Unsign
*** 83,93 ****
              end if;
  
              Clen := Clen - 1;
!             L := L + 8;
!             R := R + 8;
           end loop;
  
!       --  Case of going by unaligned words
  
        else
           while Clen /= 0 loop
--- 84,94 ----
              end if;
  
              Clen := Clen - 1;
!             L := AddA (L, 8);
!             R := AddA (R, 8);
           end loop;
  
!       --  Case of going by unaligned double words
  
        else
           while Clen /= 0 loop
*************** package body System.Compare_Array_Unsign
*** 100,107 ****
              end if;
  
              Clen := Clen - 1;
!             L := L + 8;
!             R := R + 8;
           end loop;
        end if;
  
--- 101,108 ----
              end if;
  
              Clen := Clen - 1;
!             L := AddA (L, 8);
!             R := AddA (R, 8);
           end loop;
        end if;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/s-caun64.ads gcc-4.0.0/gcc/ada/s-caun64.ads
*** gcc-3.4.3/gcc/ada/s-caun64.ads	Tue Oct 21 13:42:13 2003
--- gcc-4.0.0/gcc/ada/s-caun64.ads	Mon Apr 19 15:20:05 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2002 Free Software Foundation, Inc.            --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package System.Compare_Array_Unsigned_64
*** 44,51 ****
       (Left      : System.Address;
        Right     : System.Address;
        Left_Len  : Natural;
!       Right_Len : Natural)
!       return      Integer;
     --  Compare the array starting at address Left of length Left_Len
     --  with the array starting at address Right of length Right_Len.
     --  The comparison is in the normal Ada semantic sense of array
--- 44,50 ----
       (Left      : System.Address;
        Right     : System.Address;
        Left_Len  : Natural;
!       Right_Len : Natural) return Integer;
     --  Compare the array starting at address Left of length Left_Len
     --  with the array starting at address Right of length Right_Len.
     --  The comparison is in the normal Ada semantic sense of array
diff -Nrcpad gcc-3.4.3/gcc/ada/s-crtl.ads gcc-4.0.0/gcc/ada/s-crtl.ads
*** gcc-3.4.3/gcc/ada/s-crtl.ads	Wed Dec 17 13:37:03 2003
--- gcc-4.0.0/gcc/ada/s-crtl.ads	Thu Feb 10 13:49:15 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 2003 Free Software Foundation, Inc.              --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2003-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** pragma Preelaborate (CRTL);
*** 41,46 ****
--- 41,49 ----
     subtype chars is System.Address;
     --  Pointer to null-terminated array of characters
  
+    subtype DIRs is System.Address;
+    --  Corresponds to the C type DIR*
+ 
     subtype FILEs is System.Address;
     --  Corresponds to the C type FILE*
  
*************** pragma Preelaborate (CRTL);
*** 59,64 ****
--- 62,76 ----
     procedure clearerr (stream : FILEs);
     pragma Import (C, clearerr, "clearerr");
  
+    function closedir (directory : DIRs) return Integer;
+    pragma Import (C, closedir, "closedir");
+ 
+    function dup  (handle : int) return int;
+    pragma Import (C, dup, "dup");
+ 
+    function dup2 (from, to : int) return int;
+    pragma Import (C, dup2, "dup2");
+ 
     function fclose (stream : FILEs) return int;
     pragma Import (C, fclose, "fclose");
  
*************** pragma Preelaborate (CRTL);
*** 124,129 ****
--- 136,144 ----
     procedure mktemp (template : chars);
     pragma Import (C, mktemp, "mktemp");
  
+    function opendir (file_name : String) return DIRs;
+    pragma Import (C, opendir, "opendir");
+ 
     function read (fd : int; buffer : chars; nbytes : int) return int;
     pragma Import (C, read, "read");
  
*************** pragma Preelaborate (CRTL);
*** 134,139 ****
--- 149,157 ----
     procedure rewind (stream : FILEs);
     pragma Import (C, rewind, "rewind");
  
+    procedure rmdir (dir_name : String);
+    pragma Import (C, rmdir, "rmdir");
+ 
     function setvbuf
       (stream : FILEs;
        buffer : chars;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-fatgen.adb gcc-4.0.0/gcc/ada/s-fatgen.adb
*** gcc-3.4.3/gcc/ada/s-fatgen.adb	Tue Oct 21 13:42:14 2003
--- gcc-4.0.0/gcc/ada/s-fatgen.adb	Wed Oct 27 13:55:10 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body System.Fat_Gen is
*** 81,87 ****
     -----------------------
  
     procedure Decompose (XX : T; Frac : out T; Expo : out UI);
!    --  Decomposes a floating-point number into fraction and exponent parts
  
     function Gradual_Scaling  (Adjustment : UI) return T;
     --  Like Scaling with a first argument of 1.0, but returns the smallest
--- 81,90 ----
     -----------------------
  
     procedure Decompose (XX : T; Frac : out T; Expo : out UI);
!    --  Decomposes a floating-point number into fraction and exponent parts.
!    --  Both results are signed, with Frac having the sign of XX, and UI has
!    --  the sign of the exponent. The absolute value of Frac is in the range
!    --  0.0 <= Frac < 1.0. If Frac = 0.0 or -0.0, then Expo is always zero.
  
     function Gradual_Scaling  (Adjustment : UI) return T;
     --  Like Scaling with a first argument of 1.0, but returns the smallest
*************** package body System.Fat_Gen is
*** 131,137 ****
     function Compose (Fraction : T; Exponent : UI) return T is
        Arg_Frac : T;
        Arg_Exp  : UI;
- 
     begin
        Decompose (Fraction, Arg_Frac, Arg_Exp);
        return Scaling (Arg_Frac, Exponent);
--- 134,139 ----
*************** package body System.Fat_Gen is
*** 302,313 ****
        Ex : UI := Adjustment;
  
     begin
!       if Adjustment < T'Machine_Emin then
           Y  := 2.0 ** T'Machine_Emin;
           Y1 := Y;
           Ex := Ex - T'Machine_Emin;
! 
!          while Ex <= 0 loop
              Y := T'Machine (Y / 2.0);
  
              if Y = 0.0 then
--- 304,314 ----
        Ex : UI := Adjustment;
  
     begin
!       if Adjustment < T'Machine_Emin - 1 then
           Y  := 2.0 ** T'Machine_Emin;
           Y1 := Y;
           Ex := Ex - T'Machine_Emin;
!          while Ex < 0 loop
              Y := T'Machine (Y / 2.0);
  
              if Y = 0.0 then
*************** package body System.Fat_Gen is
*** 337,349 ****
        if Radix_Digits >= T'Machine_Mantissa then
           return X;
  
        else
           L := Exponent (X) - Radix_Digits;
           Y := Truncation (Scaling (X, -L));
           Z := Scaling (Y, L);
           return Z;
        end if;
- 
     end Leading_Part;
  
     -------------
--- 338,352 ----
        if Radix_Digits >= T'Machine_Mantissa then
           return X;
  
+       elsif Radix_Digits <= 0 then
+          raise Constraint_Error;
+ 
        else
           L := Exponent (X) - Radix_Digits;
           Y := Truncation (Scaling (X, -L));
           Z := Scaling (Y, L);
           return Z;
        end if;
     end Leading_Part;
  
     -------------
*************** package body System.Fat_Gen is
*** 358,364 ****
     function Machine (X : T) return T is
        Temp : T;
        pragma Volatile (Temp);
- 
     begin
        Temp := X;
        return Temp;
--- 361,366 ----
*************** package body System.Fat_Gen is
*** 403,412 ****
           --  two, then we want to subtract half of what we would otherwise
           --  subtract, since the exponent is going to be reduced.
  
!          if X_Frac = 0.5 and then X > 0.0 then
              return X - Gradual_Scaling (X_Exp - T'Machine_Mantissa - 1);
  
!          --  Otherwise the exponent stays the same
  
           else
              return X - Gradual_Scaling (X_Exp - T'Machine_Mantissa);
--- 405,418 ----
           --  two, then we want to subtract half of what we would otherwise
           --  subtract, since the exponent is going to be reduced.
  
!          --  Note that X_Frac has the same sign as X, so if X_Frac is 0.5,
!          --  then we know that we have a positive number (and hence a
!          --  positive power of 2).
! 
!          if X_Frac = 0.5 then
              return X - Gradual_Scaling (X_Exp - T'Machine_Mantissa - 1);
  
!          --  Otherwise the exponent is unchanged
  
           else
              return X - Gradual_Scaling (X_Exp - T'Machine_Mantissa);
*************** package body System.Fat_Gen is
*** 433,438 ****
--- 439,448 ----
        P_Even   : Boolean;
  
     begin
+       if Y = 0.0 then
+          raise Constraint_Error;
+       end if;
+ 
        if X > 0.0 then
           Sign_X :=  1.0;
           Arg := X;
*************** package body System.Fat_Gen is
*** 488,494 ****
        end if;
  
        return Sign_X * IEEE_Rem;
- 
     end Remainder;
  
     --------------
--- 498,503 ----
*************** package body System.Fat_Gen is
*** 518,524 ****
        else
           return X;
        end if;
- 
     end Rounding;
  
     -------------
--- 527,532 ----
*************** package body System.Fat_Gen is
*** 583,588 ****
--- 591,597 ----
  
              --  Ex = 0
           end if;
+ 
           return Y;
        end;
     end Scaling;
*************** package body System.Fat_Gen is
*** 622,631 ****
           --  two, then we want to add half of what we would otherwise add,
           --  since the exponent is going to be reduced.
  
!          if X_Frac = 0.5 and then X < 0.0 then
              return X + Gradual_Scaling (X_Exp - T'Machine_Mantissa - 1);
  
!          --  Otherwise the exponent stays the same
  
           else
              return X + Gradual_Scaling (X_Exp - T'Machine_Mantissa);
--- 631,644 ----
           --  two, then we want to add half of what we would otherwise add,
           --  since the exponent is going to be reduced.
  
!          --  Note that X_Frac has the same sign as X, so if X_Frac is -0.5,
!          --  then we know that we have a ngeative number (and hence a
!          --  negative power of 2).
! 
!          if X_Frac = -0.5 then
              return X + Gradual_Scaling (X_Exp - T'Machine_Mantissa - 1);
  
!          --  Otherwise the exponent is unchanged
  
           else
              return X + Gradual_Scaling (X_Exp - T'Machine_Mantissa);
diff -Nrcpad gcc-3.4.3/gcc/ada/s-ficobl.ads gcc-4.0.0/gcc/ada/s-ficobl.ads
*** gcc-3.4.3/gcc/ada/s-ficobl.ads	Thu Apr 24 17:54:09 2003
--- gcc-4.0.0/gcc/ada/s-ficobl.ads	Tue Jul  6 13:57:31 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 1992-2000 Free Software Foundation, Inc.        --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 1992-2004 Free Software Foundation, Inc.        --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Interfaces.C_Streams;
*** 42,50 ****
  
  package System.File_Control_Block is
  
!    -----------------------------
!    --  Ada File Control Block --
!    -----------------------------
  
     --  The Ada file control block is an abstract extension of the root
     --  stream type. This allows a file to be treated directly as a stream
--- 42,50 ----
  
  package System.File_Control_Block is
  
!    ----------------------------
!    -- Ada File Control Block --
!    ----------------------------
  
     --  The Ada file control block is an abstract extension of the root
     --  stream type. This allows a file to be treated directly as a stream
diff -Nrcpad gcc-3.4.3/gcc/ada/s-fileio.adb gcc-4.0.0/gcc/ada/s-fileio.adb
*** gcc-3.4.3/gcc/ada/s-fileio.adb	Mon Dec 15 11:51:00 2003
--- gcc-4.0.0/gcc/ada/s-fileio.adb	Mon Jan  3 15:41:53 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body System.File_IO is
*** 60,66 ****
     type Temp_File_Record_Ptr is access all Temp_File_Record;
  
     type Temp_File_Record is record
!       Name : String (1 .. L_tmpnam + 1);
        Next : Temp_File_Record_Ptr;
     end record;
     --  One of these is allocated for each temporary file created
--- 60,66 ----
     type Temp_File_Record_Ptr is access all Temp_File_Record;
  
     type Temp_File_Record is record
!       Name : String (1 .. max_path_len + 1);
        Next : Temp_File_Record_Ptr;
     end record;
     --  One of these is allocated for each temporary file created
*************** package body System.File_IO is
*** 774,785 ****
        end;
  
        --  If we were given a stream (call from xxx.C_Streams.Open), then set
!       --  full name to null and that is all we have to do in this case so
!       --  skip to end of processing.
  
        if Stream /= NULL_Stream then
!          Fullname (1) := ASCII.Nul;
!          Full_Name_Len := 1;
  
        --  Normal case of Open or Create
  
--- 774,785 ----
        end;
  
        --  If we were given a stream (call from xxx.C_Streams.Open), then set
!       --  the full name to the given one, and skip to end of processing.
  
        if Stream /= NULL_Stream then
!          Full_Name_Len := Name'Length + 1;
!          Fullname (1 .. Full_Name_Len - 1) := Name;
!          Fullname (Full_Name_Len) := ASCII.Nul;
  
        --  Normal case of Open or Create
  
diff -Nrcpad gcc-3.4.3/gcc/ada/s-fileio.ads gcc-4.0.0/gcc/ada/s-fileio.ads
*** gcc-3.4.3/gcc/ada/s-fileio.ads	Tue Oct 21 13:42:14 2003
--- gcc-4.0.0/gcc/ada/s-fileio.ads	Thu Apr  8 13:23:50 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package System.File_IO is
*** 250,256 ****
  private
     pragma Inline (Check_Read_Status);
     pragma Inline (Check_Write_Status);
-    pragma Inline (Form);
     pragma Inline (Mode);
  
  end System.File_IO;
--- 250,255 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/s-finimp.adb gcc-4.0.0/gcc/ada/s-finimp.adb
*** gcc-3.4.3/gcc/ada/s-finimp.adb	Tue Oct 21 13:42:14 2003
--- gcc-4.0.0/gcc/ada/s-finimp.adb	Thu Feb 10 13:56:20 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 33,42 ****
  
  with Ada.Exceptions;
  with Ada.Tags;
! with Ada.Unchecked_Conversion;
  with System.Storage_Elements;
  with System.Soft_Links;
  
  package body System.Finalization_Implementation is
  
     use Ada.Exceptions;
--- 33,45 ----
  
  with Ada.Exceptions;
  with Ada.Tags;
! 
  with System.Storage_Elements;
  with System.Soft_Links;
  
+ with Unchecked_Conversion;
+ with System.Restrictions;
+ 
  package body System.Finalization_Implementation is
  
     use Ada.Exceptions;
*************** package body System.Finalization_Impleme
*** 51,66 ****
     -- Local Subprograms --
     -----------------------
  
-    function To_Finalizable_Ptr is
-      new Ada.Unchecked_Conversion (Address, Finalizable_Ptr);
- 
-    function To_Addr is
-      new Ada.Unchecked_Conversion (Finalizable_Ptr, Address);
- 
     type RC_Ptr is access all Record_Controller;
  
     function To_RC_Ptr is
!      new Ada.Unchecked_Conversion (Address, RC_Ptr);
  
     procedure Raise_Exception_No_Defer
       (E       : in Exception_Id;
--- 54,63 ----
     -- Local Subprograms --
     -----------------------
  
     type RC_Ptr is access all Record_Controller;
  
     function To_RC_Ptr is
!      new Unchecked_Conversion (Address, RC_Ptr);
  
     procedure Raise_Exception_No_Defer
       (E       : in Exception_Id;
*************** package body System.Finalization_Impleme
*** 95,103 ****
     --  Given the address (obj) of a tagged object, return a
     --  pointer to the record controller of this object.
  
!    -------------
!    --  Adjust --
!    -------------
  
     procedure Adjust (Object : in out Record_Controller) is
  
--- 92,100 ----
     --  Given the address (obj) of a tagged object, return a
     --  pointer to the record controller of this object.
  
!    ------------
!    -- Adjust --
!    ------------
  
     procedure Adjust (Object : in out Record_Controller) is
  
*************** package body System.Finalization_Impleme
*** 106,112 ****
                      Object.My_Address - Object'Address;
  
        procedure Ptr_Adjust (Ptr : in out Finalizable_Ptr);
!       --  Substract the offset to the pointer
  
        procedure Reverse_Adjust (P : Finalizable_Ptr);
        --  Ajust the components in the reverse order in which they are stored
--- 103,109 ----
                      Object.My_Address - Object'Address;
  
        procedure Ptr_Adjust (Ptr : in out Finalizable_Ptr);
!       --  Subtract the offset to the pointer
  
        procedure Reverse_Adjust (P : Finalizable_Ptr);
        --  Ajust the components in the reverse order in which they are stored
*************** package body System.Finalization_Impleme
*** 141,150 ****
     --  Start of processing for Adjust
  
     begin
!       --  Adjust the components and their finalization pointers next.
!       --  We must protect against an exception in some call to Adjust, so
!       --  we keep pointing to the list of successfully adjusted components,
!       --  which can be finalized if an exception is raised.
  
        First_Comp := Object.F;
        Object.F := null;               --  nothing adjusted yet.
--- 138,147 ----
     --  Start of processing for Adjust
  
     begin
!       --  Adjust the components and their finalization pointers next. We must
!       --  protect against an exception in some call to Adjust, so we keep
!       --  pointing to the list of successfully adjusted components, which can
!       --  be finalized if an exception is raised.
  
        First_Comp := Object.F;
        Object.F := null;               --  nothing adjusted yet.
*************** package body System.Finalization_Impleme
*** 159,166 ****
        when others =>
           --  Finalize those components that were successfully adjusted, and
           --  propagate exception. The object itself is not yet attached to
!          --  global finalization list, so we cannot rely on the outer call
!          --  to Clean to take care of these components.
  
           Finalize (Object);
           raise;
--- 156,163 ----
        when others =>
           --  Finalize those components that were successfully adjusted, and
           --  propagate exception. The object itself is not yet attached to
!          --  global finalization list, so we cannot rely on the outer call to
!          --  Clean to take care of these components.
  
           Finalize (Object);
           raise;
*************** package body System.Finalization_Impleme
*** 182,191 ****
           Obj.Next := L;
           L        := Obj'Unchecked_Access;
  
!       --  Dynamically allocated objects: they are attached to a doubly
!       --  linked list, so that an element can be finalized at any moment
!       --  by means of an unchecked deallocation. Attachement is
!       --  protected against multi-threaded access.
  
        elsif Nb_Link = 2 then
  
--- 179,188 ----
           Obj.Next := L;
           L        := Obj'Unchecked_Access;
  
!       --  Dynamically allocated objects: they are attached to a doubly linked
!       --  list, so that an element can be finalized at any moment by means of
!       --  an unchecked deallocation. Attachement is protected against
!       --  multi-threaded access.
  
        elsif Nb_Link = 2 then
  
*************** package body System.Finalization_Impleme
*** 352,361 ****
     procedure Detach_From_Final_List (Obj : in out Finalizable) is
     begin
  
!       --  When objects are not properly attached to a doubly linked
!       --  list do not try to detach them. The only case where it can
!       --  happen is when dealing with Finalize_Storage_Only objects
!       --  which are not always attached.
  
        if Obj.Next /= null and then Obj.Prev /= null then
           SSL.Lock_Task.all;
--- 349,358 ----
     procedure Detach_From_Final_List (Obj : in out Finalizable) is
     begin
  
!       --  When objects are not properly attached to a doubly linked list do
!       --  not try to detach them. The only case where it can happen is when
!       --  dealing with Finalize_Storage_Only objects which are not always
!       --  attached to the finalization list.
  
        if Obj.Next /= null and then Obj.Prev /= null then
           SSL.Lock_Task.all;
*************** package body System.Finalization_Impleme
*** 418,434 ****
        end record;
        type Ptr is access all Fake_Exception_Occurence;
  
-       --  Let's get the current exception before starting to finalize in
-       --  order to check if we are in the abort case if an exception is
-       --  raised.
- 
        function To_Ptr is new
!          Ada.Unchecked_Conversion (Exception_Occurrence_Access, Ptr);
  
!       X : constant Exception_Id :=
!             To_Ptr (System.Soft_Links.Get_Current_Excep.all).Id;
  
     begin
        while P /= null loop
           Q := P.Next;
           Finalize (P.all);
--- 415,436 ----
        end record;
        type Ptr is access all Fake_Exception_Occurence;
  
        function To_Ptr is new
!         Unchecked_Conversion (Exception_Occurrence_Access, Ptr);
  
!       X :  Exception_Id := Null_Id;
  
     begin
+       --  If abort is allowed, we get the current exception before starting
+       --  to finalize in order to check if we are in the abort case if an
+       --  exception is raised. When abort is not allowed, avoid accessing the
+       --  current exception since this can be a pretty costly operation in
+       --  programs using controlled types heavily.
+ 
+       if System.Restrictions.Abort_Allowed then
+          X := To_Ptr (System.Soft_Links.Get_Current_Excep.all).Id;
+       end if;
+ 
        while P /= null loop
           Q := P.Next;
           Finalize (P.all);
*************** package body System.Finalization_Impleme
*** 451,457 ****
     begin
        Detach_From_Final_List (Obj);
        Finalize (Obj);
- 
     exception
        when E_Occ : others => Raise_From_Finalize (null, False, E_Occ);
     end Finalize_One;
--- 453,458 ----
*************** package body System.Finalization_Impleme
*** 465,471 ****
        Offset  : SSE.Storage_Offset := RC_Offset (The_Tag);
  
     begin
- 
        --  Fetch the controller from the Parent or above if necessary
        --  when there are no controller at this level
  
--- 466,471 ----
*************** package body System.Finalization_Impleme
*** 488,494 ****
        --  ancestor corresponding to the tag "The_Tag" and that its parent
        --  is variable sized. We assume that the _controller is the first
        --  compoment right after the parent.
!       --  ??? note that it may not be true if there are new discriminants.
  
        else --  Offset = -1
  
--- 488,495 ----
        --  ancestor corresponding to the tag "The_Tag" and that its parent
        --  is variable sized. We assume that the _controller is the first
        --  compoment right after the parent.
! 
!       --  ??? note that it may not be true if there are new discriminants
  
        else --  Offset = -1
  
*************** package body System.Finalization_Impleme
*** 503,521 ****
              --  Reconstruction of a type with characteristics
              --  comparable to the original type
  
!             D : constant := Storage_Unit - 1;
  
              type Parent_Type is new SSE.Storage_Array
!               (1 .. (Parent_Size (Obj, The_Tag) + D) / Storage_Unit);
              for Parent_Type'Alignment use Address'Alignment;
  
              type Faked_Type_Of_Obj is record
                 Parent : Parent_Type;
                 Controller : Faked_Record_Controller;
              end record;
              type Obj_Ptr is access all Faked_Type_Of_Obj;
              function To_Obj_Ptr is
!               new Ada.Unchecked_Conversion (Address, Obj_Ptr);
  
           begin
              return To_RC_Ptr (To_Obj_Ptr (Obj).Controller'Address);
--- 504,524 ----
              --  Reconstruction of a type with characteristics
              --  comparable to the original type
  
!             D : constant := SSE.Storage_Offset (Storage_Unit - 1);
  
              type Parent_Type is new SSE.Storage_Array
!                    (1 .. (Parent_Size (Obj, The_Tag) + D) /
!                             SSE.Storage_Offset (Storage_Unit));
              for Parent_Type'Alignment use Address'Alignment;
  
              type Faked_Type_Of_Obj is record
                 Parent : Parent_Type;
                 Controller : Faked_Record_Controller;
              end record;
+ 
              type Obj_Ptr is access all Faked_Type_Of_Obj;
              function To_Obj_Ptr is
!               new Unchecked_Conversion (Address, Obj_Ptr);
  
           begin
              return To_RC_Ptr (To_Obj_Ptr (Obj).Controller'Address);
*************** package body System.Finalization_Impleme
*** 529,535 ****
  
     procedure Initialize (Object : in out Limited_Record_Controller) is
        pragma Warnings (Off, Object);
- 
     begin
        null;
     end Initialize;
--- 532,537 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/s-finimp.ads gcc-4.0.0/gcc/ada/s-finimp.ads
*** gcc-3.4.3/gcc/ada/s-finimp.ads	Tue Oct 21 13:42:14 2003
--- gcc-4.0.0/gcc/ada/s-finimp.ads	Thu Jul 15 20:34:41 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** pragma Elaborate_Body (Finalization_Impl
*** 137,143 ****
     --  Initialize the field My_Address to the Object'Address
  
     procedure Adjust (Object : in out Record_Controller);
!    --  Adjust the components and their finalization pointers by substracting
     --  by the offset of the target and the source addresses of the assignment.
  
     --  Inherit Finalize from Limited_Record_Controller
--- 137,143 ----
     --  Initialize the field My_Address to the Object'Address
  
     procedure Adjust (Object : in out Record_Controller);
!    --  Adjust the components and their finalization pointers by subtracting
     --  by the offset of the target and the source addresses of the assignment.
  
     --  Inherit Finalize from Limited_Record_Controller
diff -Nrcpad gcc-3.4.3/gcc/ada/s-finroo.ads gcc-4.0.0/gcc/ada/s-finroo.ads
*** gcc-3.4.3/gcc/ada/s-finroo.ads	Tue Oct 21 13:42:14 2003
--- gcc-4.0.0/gcc/ada/s-finroo.ads	Fri Mar  5 10:58:58 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 1992-2003 Free Software Foundation, Inc.        --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 1992-2004 Free Software Foundation, Inc.        --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 31,37 ****
--- 31,41 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
+ --  This unit provides the basic support for controlled (finalizable) types
+ 
  with Ada.Streams;
+ with Unchecked_Conversion;
+ 
  package System.Finalization_Root is
  pragma Preelaborate (Finalization_Root);
  
*************** pragma Preelaborate (Finalization_Root);
*** 39,44 ****
--- 43,54 ----
  
     type Finalizable_Ptr is access all Root_Controlled'Class;
  
+    function To_Finalizable_Ptr is
+      new Unchecked_Conversion (Address, Finalizable_Ptr);
+ 
+    function To_Addr is
+      new Unchecked_Conversion (Finalizable_Ptr, Address);
+ 
     type Empty_Root_Controlled is abstract tagged null record;
     --  Just for the sake of Controlled equality (see Ada.Finalization)
  
diff -Nrcpad gcc-3.4.3/gcc/ada/s-geveop.adb gcc-4.0.0/gcc/ada/s-geveop.adb
*** gcc-3.4.3/gcc/ada/s-geveop.adb	Wed Dec  3 11:47:53 2003
--- gcc-4.0.0/gcc/ada/s-geveop.adb	Fri Apr 23 10:58:31 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 31,43 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with System;                   use System;
! with System.Storage_Elements; use System.Storage_Elements;
! with Ada.Unchecked_Conversion; use Ada;
  
  package body System.Generic_Vector_Operations is
!    VU : constant Address := Vectors.Vector'Size / Storage_Unit;
!    EU : constant Address := Element_Array'Component_Size / Storage_Unit;
  
     ----------------------
     -- Binary_Operation --
--- 31,47 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with System;                    use System;
! with System.Address_Operations; use System.Address_Operations;
! with System.Storage_Elements;   use System.Storage_Elements;
! 
! with Unchecked_Conversion;
  
  package body System.Generic_Vector_Operations is
! 
!    IU : constant Integer := Integer (Storage_Unit);
!    VU : constant Address := Address (Vectors.Vector'Size / IU);
!    EU : constant Address := Address (Element_Array'Component_Size / IU);
  
     ----------------------
     -- Binary_Operation --
*************** package body System.Generic_Vector_Opera
*** 52,59 ****
        YA : Address := Y;
        --  Address of next element to process in R, X and Y
  
!       Unaligned : constant Boolean := (RA or XA or YA)  mod VU /= 0;
!       --  False iff one or more argument addresses is not aligned
  
        type Vector_Ptr is access all Vectors.Vector;
        type Element_Ptr is access all Element;
--- 56,66 ----
        YA : Address := Y;
        --  Address of next element to process in R, X and Y
  
!       VI : constant Integer_Address := To_Integer (VU);
! 
!       Unaligned : constant Integer_Address :=
!                     Boolean'Pos (ModA (OrA (OrA (RA, XA), YA), VU) /= 0) - 1;
!       --  Zero iff one or more argument addresses is not aligned, else all 1's
  
        type Vector_Ptr is access all Vectors.Vector;
        type Element_Ptr is access all Element;
*************** package body System.Generic_Vector_Opera
*** 61,83 ****
        function VP is new Unchecked_Conversion (Address, Vector_Ptr);
        function EP is new Unchecked_Conversion (Address, Element_Ptr);
  
!       SA : constant Address := XA + ((Length + 0) / VU * VU
!                            and (Boolean'Pos (Unaligned) - Address'(1)));
        --  First address of argument X to start serial processing
  
     begin
        while XA < SA loop
           VP (RA).all := Vector_Op (VP (XA).all, VP (YA).all);
!          XA := XA + VU;
!          YA := YA + VU;
!          RA := RA + VU;
        end loop;
  
        while XA < X + Length loop
           EP (RA).all := Element_Op (EP (XA).all, EP (YA).all);
!          XA := XA + EU;
!          YA := YA + EU;
!          RA := RA + EU;
        end loop;
     end Binary_Operation;
  
--- 68,91 ----
        function VP is new Unchecked_Conversion (Address, Vector_Ptr);
        function EP is new Unchecked_Conversion (Address, Element_Ptr);
  
!       SA : constant Address :=
!              AddA (XA, To_Address
!                          ((Integer_Address (Length) / VI * VI) and Unaligned));
        --  First address of argument X to start serial processing
  
     begin
        while XA < SA loop
           VP (RA).all := Vector_Op (VP (XA).all, VP (YA).all);
!          XA := AddA (XA, VU);
!          YA := AddA (YA, VU);
!          RA := AddA (RA, VU);
        end loop;
  
        while XA < X + Length loop
           EP (RA).all := Element_Op (EP (XA).all, EP (YA).all);
!          XA := AddA (XA, EU);
!          YA := AddA (YA, EU);
!          RA := AddA (RA, EU);
        end loop;
     end Binary_Operation;
  
*************** package body System.Generic_Vector_Opera
*** 93,100 ****
        XA : Address := X;
        --  Address of next element to process in R and X
  
!       Unaligned : constant Boolean := (RA or XA)  mod VU /= 0;
!       --  False iff one or more argument addresses is not aligned
  
        type Vector_Ptr is access all Vectors.Vector;
        type Element_Ptr is access all Element;
--- 101,111 ----
        XA : Address := X;
        --  Address of next element to process in R and X
  
!       VI : constant Integer_Address := To_Integer (VU);
! 
!       Unaligned : constant Integer_Address :=
!                     Boolean'Pos (ModA (OrA (RA, XA), VU) /= 0) - 1;
!       --  Zero iff one or more argument addresses is not aligned, else all 1's
  
        type Vector_Ptr is access all Vectors.Vector;
        type Element_Ptr is access all Element;
*************** package body System.Generic_Vector_Opera
*** 102,122 ****
        function VP is new Unchecked_Conversion (Address, Vector_Ptr);
        function EP is new Unchecked_Conversion (Address, Element_Ptr);
  
!       SA : constant Address := XA + ((Length + 0) / VU * VU
!                            and (Boolean'Pos (Unaligned) - Address'(1)));
        --  First address of argument X to start serial processing
  
     begin
        while XA < SA loop
           VP (RA).all := Vector_Op (VP (XA).all);
!          XA := XA + VU;
!          RA := RA + VU;
        end loop;
  
        while XA < X + Length loop
           EP (RA).all := Element_Op (EP (XA).all);
!          XA := XA + EU;
!          RA := RA + EU;
        end loop;
     end Unary_Operation;
  
--- 113,134 ----
        function VP is new Unchecked_Conversion (Address, Vector_Ptr);
        function EP is new Unchecked_Conversion (Address, Element_Ptr);
  
!       SA : constant Address :=
!              AddA (XA, To_Address
!                          ((Integer_Address (Length) / VI * VI) and Unaligned));
        --  First address of argument X to start serial processing
  
     begin
        while XA < SA loop
           VP (RA).all := Vector_Op (VP (XA).all);
!          XA := AddA (XA, VU);
!          RA := AddA (RA, VU);
        end loop;
  
        while XA < X + Length loop
           EP (RA).all := Element_Op (EP (XA).all);
!          XA := AddA (XA, EU);
!          RA := AddA (RA, EU);
        end loop;
     end Unary_Operation;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/s-gloloc-mingw.adb gcc-4.0.0/gcc/ada/s-gloloc-mingw.adb
*** gcc-3.4.3/gcc/ada/s-gloloc-mingw.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-gloloc-mingw.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,113 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                  S Y S T E M . G L O B A L _ L O C K S                   --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --           Copyright (C) 1999-2001 Ada Core Technologies, Inc.            --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This implementation is specific to NT.
+ 
+ with GNAT.Task_Lock;
+ 
+ with Interfaces.C.Strings;
+ with System.OS_Interface;
+ 
+ package body System.Global_Locks is
+ 
+    package TSL renames GNAT.Task_Lock;
+    package OSI renames System.OS_Interface;
+    package ICS renames Interfaces.C.Strings;
+ 
+    subtype Lock_File_Entry is OSI.HANDLE;
+ 
+    Last_Lock  : Lock_Type := Null_Lock;
+    Lock_Table : array (Lock_Type range 1 .. 15) of Lock_File_Entry;
+ 
+    -----------------
+    -- Create_Lock --
+    -----------------
+ 
+    procedure Create_Lock
+      (Lock : out Lock_Type;
+       Name : in String)
+    is
+       L : Lock_Type;
+ 
+    begin
+       TSL.Lock;
+       Last_Lock := Last_Lock + 1;
+       L := Last_Lock;
+       TSL.Unlock;
+ 
+       if L > Lock_Table'Last then
+          raise Lock_Error;
+       end if;
+ 
+       Lock_Table (L) :=
+         OSI.CreateMutex (null, OSI.BOOL (False), ICS.New_String (Name));
+       Lock := L;
+    end Create_Lock;
+ 
+    ------------------
+    -- Acquire_Lock --
+    ------------------
+ 
+    procedure Acquire_Lock
+      (Lock : in out Lock_Type)
+    is
+       use type OSI.DWORD;
+ 
+       Res : OSI.DWORD;
+    begin
+       Res := OSI.WaitForSingleObject (Lock_Table (Lock), OSI.Wait_Infinite);
+ 
+       if Res = OSI.WAIT_FAILED then
+          raise Lock_Error;
+       end if;
+    end Acquire_Lock;
+ 
+    ------------------
+    -- Release_Lock --
+    ------------------
+ 
+    procedure Release_Lock
+      (Lock : in out Lock_Type)
+    is
+       use type OSI.BOOL;
+ 
+       Res : OSI.BOOL;
+    begin
+       Res := OSI.ReleaseMutex (Lock_Table (Lock));
+ 
+       if Res = OSI.False then
+          raise Lock_Error;
+       end if;
+    end Release_Lock;
+ 
+ end System.Global_Locks;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-htable.adb gcc-4.0.0/gcc/ada/s-htable.adb
*** gcc-3.4.3/gcc/ada/s-htable.adb	Tue Oct 21 13:42:14 2003
--- gcc-4.0.0/gcc/ada/s-htable.adb	Tue Jul  6 13:57:31 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 1995-2002 Ada Core Technologies, Inc.            --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 1995-2004 Ada Core Technologies, Inc.            --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Ada.Unchecked_Deallocation;
*** 35,43 ****
  
  package body System.HTable is
  
!    --------------------
!    --  Static_HTable --
!    --------------------
  
     package body Static_HTable is
  
--- 35,43 ----
  
  package body System.HTable is
  
!    -------------------
!    -- Static_HTable --
!    -------------------
  
     package body Static_HTable is
  
*************** package body System.HTable is
*** 182,190 ****
  
     end Static_HTable;
  
!    --------------------
!    --  Simple_HTable --
!    --------------------
  
     package body Simple_HTable is
  
--- 182,190 ----
  
     end Static_HTable;
  
!    -------------------
!    -- Simple_HTable --
!    -------------------
  
     package body Simple_HTable is
  
*************** package body System.HTable is
*** 221,227 ****
  
        function  Get (K : Key) return Element is
           Tmp : constant Elmt_Ptr := Tab.Get (K);
- 
        begin
           if Tmp = null then
              return No_Element;
--- 221,226 ----
*************** package body System.HTable is
*** 236,242 ****
  
        function Get_First return Element is
           Tmp : constant Elmt_Ptr := Tab.Get_First;
- 
        begin
           if Tmp = null then
              return No_Element;
--- 235,240 ----
*************** package body System.HTable is
*** 260,266 ****
  
        function Get_Next return Element is
           Tmp : constant Elmt_Ptr := Tab.Get_Next;
- 
        begin
           if Tmp = null then
              return No_Element;
--- 258,263 ----
*************** package body System.HTable is
*** 318,324 ****
  
        procedure Set (K : Key; E : Element) is
           Tmp : constant Elmt_Ptr := Tab.Get (K);
- 
        begin
           if Tmp = null then
              Tab.Set (new Element_Wrapper'(K, E, null));
--- 315,320 ----
*************** package body System.HTable is
*** 348,362 ****
        function Rotate_Left (Value : Uns; Amount : Natural) return Uns;
        pragma Import (Intrinsic, Rotate_Left);
  
!       Tmp : Uns := 0;
  
     begin
        for J in Key'Range loop
!          Tmp := Rotate_Left (Tmp, 1) + Character'Pos (Key (J));
        end loop;
  
        return Header_Num'First +
!                Header_Num'Base (Tmp mod Header_Num'Range_Length);
     end Hash;
  
  end System.HTable;
--- 344,359 ----
        function Rotate_Left (Value : Uns; Amount : Natural) return Uns;
        pragma Import (Intrinsic, Rotate_Left);
  
!       Hash_Value : Uns;
  
     begin
+       Hash_Value := 0;
        for J in Key'Range loop
!          Hash_Value := Rotate_Left (Hash_Value, 3) + Character'Pos (Key (J));
        end loop;
  
        return Header_Num'First +
!                Header_Num'Base (Hash_Value mod Header_Num'Range_Length);
     end Hash;
  
  end System.HTable;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-imgwch.adb gcc-4.0.0/gcc/ada/s-imgwch.adb
*** gcc-3.4.3/gcc/ada/s-imgwch.adb	Tue Oct 21 13:42:14 2003
--- gcc-4.0.0/gcc/ada/s-imgwch.adb	Thu Feb 10 13:50:23 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body System.Img_WChar is
*** 42,50 ****
     --------------------------
  
     function Image_Wide_Character
!      (V    : Wide_Character;
!       EM   : WC_Encoding_Method)
!       return String
     is
        Val : constant Natural := Wide_Character'Pos (V);
        WS  : Wide_String (1 .. 3);
--- 42,49 ----
     --------------------------
  
     function Image_Wide_Character
!      (V  : Wide_Character;
!       EM : WC_Encoding_Method) return String
     is
        Val : constant Natural := Wide_Character'Pos (V);
        WS  : Wide_String (1 .. 3);
*************** package body System.Img_WChar is
*** 79,85 ****
  
           return Wide_String_To_String (WS, EM);
        end if;
- 
     end Image_Wide_Character;
  
  end System.Img_WChar;
--- 78,115 ----
  
           return Wide_String_To_String (WS, EM);
        end if;
     end Image_Wide_Character;
  
+    -------------------------------
+    -- Image_Wide_Wide_Character --
+    -------------------------------
+ 
+    function Image_Wide_Wide_Character
+      (V  : Wide_Wide_Character;
+       EM : WC_Encoding_Method) return String
+    is
+       Val : constant Natural := Wide_Wide_Character'Pos (V);
+       WS  : Wide_Wide_String (1 .. 3);
+ 
+    begin
+       --  If in range of standard Wide_Character, then we use the
+       --  Wide_Character routine
+ 
+       if Val <= 16#FFFF# then
+          return Image_Wide_Character (Wide_Character'Val (Val), EM);
+ 
+       --  Otherwise return an appropriate escape sequence (i.e. one matching
+       --  the convention implemented by Scn.Wide_Wide_Char). The easiest thing
+       --  is to build a wide string for the result, and then use the
+       --  Wide_Wide_Value function to build the resulting String.
+ 
+       else
+          WS (1) := ''';
+          WS (2) := V;
+          WS (3) := ''';
+ 
+          return Wide_Wide_String_To_String (WS, EM);
+       end if;
+    end Image_Wide_Wide_Character;
+ 
  end System.Img_WChar;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-imgwch.ads gcc-4.0.0/gcc/ada/s-imgwch.ads
*** gcc-3.4.3/gcc/ada/s-imgwch.ads	Thu Apr 24 17:54:10 2003
--- gcc-4.0.0/gcc/ada/s-imgwch.ads	Thu Feb 10 13:50:23 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 1992-2000 Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 1992-2005 Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 31,37 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  Wide_Character'Image
  
  with System.WCh_Con;
  
--- 31,37 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  Wide_[Wide_]Character'Image
  
  with System.WCh_Con;
  
*************** package System.Img_WChar is
*** 39,48 ****
  pragma Pure (Img_WChar);
  
     function Image_Wide_Character
!      (V    : Wide_Character;
!       EM   : System.WCh_Con.WC_Encoding_Method)
!       return String;
!    --  Computes Wode_Character'Image (V) and returns the computed result,
     --  The argument EM is a constant representing the encoding method in use.
     --  The encoding method used is guaranteed to be consistent across a
     --  given program execution and to correspond to the method used in the
--- 39,56 ----
  pragma Pure (Img_WChar);
  
     function Image_Wide_Character
!      (V  : Wide_Character;
!       EM : System.WCh_Con.WC_Encoding_Method) return String;
!    --  Computes Wide_Character'Image (V) and returns the computed result,
!    --  The argument EM is a constant representing the encoding method in use.
!    --  The encoding method used is guaranteed to be consistent across a
!    --  given program execution and to correspond to the method used in the
!    --  source programs.
! 
!    function Image_Wide_Wide_Character
!      (V  : Wide_Wide_Character;
!       EM : System.WCh_Con.WC_Encoding_Method) return String;
!    --  Computes Wide_Wide_Character'Image (V) and returns the computed result,
     --  The argument EM is a constant representing the encoding method in use.
     --  The encoding method used is guaranteed to be consistent across a
     --  given program execution and to correspond to the method used in the
diff -Nrcpad gcc-3.4.3/gcc/ada/s-inmaop-dummy.adb gcc-4.0.0/gcc/ada/s-inmaop-dummy.adb
*** gcc-3.4.3/gcc/ada/s-inmaop-dummy.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-inmaop-dummy.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,194 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                  SYSTEM.INTERRUPT_MANAGEMENT.OPERATIONS                  --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --          Copyright (C) 1992-2001 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a NO tasking version of this package.
+ 
+ package body System.Interrupt_Management.Operations is
+ 
+    --  Turn off warnings since many unused formals
+ 
+    pragma Warnings (Off);
+ 
+    ----------------------------
+    -- Thread_Block_Interrupt --
+    ----------------------------
+ 
+    procedure Thread_Block_Interrupt
+      (Interrupt : Interrupt_ID)
+    is
+    begin
+       null;
+    end Thread_Block_Interrupt;
+ 
+    ------------------------------
+    -- Thread_Unblock_Interrupt --
+    ------------------------------
+ 
+    procedure Thread_Unblock_Interrupt
+      (Interrupt : Interrupt_ID)
+    is
+    begin
+       null;
+    end Thread_Unblock_Interrupt;
+ 
+    ------------------------
+    -- Set_Interrupt_Mask --
+    ------------------------
+ 
+    procedure Set_Interrupt_Mask (Mask : access Interrupt_Mask) is
+    begin
+       null;
+    end Set_Interrupt_Mask;
+ 
+    procedure Set_Interrupt_Mask
+      (Mask  : access Interrupt_Mask;
+       OMask : access Interrupt_Mask) is
+    begin
+       null;
+    end Set_Interrupt_Mask;
+ 
+    ------------------------
+    -- Get_Interrupt_Mask --
+    ------------------------
+ 
+    procedure Get_Interrupt_Mask (Mask : access Interrupt_Mask) is
+    begin
+       null;
+    end Get_Interrupt_Mask;
+ 
+    --------------------
+    -- Interrupt_Wait --
+    --------------------
+ 
+    function Interrupt_Wait
+      (Mask : access Interrupt_Mask)
+       return Interrupt_ID
+    is
+    begin
+       return 0;
+    end Interrupt_Wait;
+ 
+    ----------------------------
+    -- Install_Default_Action --
+    ----------------------------
+ 
+    procedure Install_Default_Action (Interrupt : Interrupt_ID) is
+    begin
+       null;
+    end Install_Default_Action;
+ 
+    ---------------------------
+    -- Install_Ignore_Action --
+    ---------------------------
+ 
+    procedure Install_Ignore_Action (Interrupt : Interrupt_ID) is
+    begin
+       null;
+    end Install_Ignore_Action;
+ 
+    -------------------------
+    -- Fill_Interrupt_Mask --
+    -------------------------
+ 
+    procedure Fill_Interrupt_Mask (Mask : access Interrupt_Mask) is
+    begin
+       null;
+    end Fill_Interrupt_Mask;
+ 
+    --------------------------
+    -- Empty_Interrupt_Mask --
+    --------------------------
+ 
+    procedure Empty_Interrupt_Mask (Mask : access Interrupt_Mask) is
+    begin
+       null;
+    end Empty_Interrupt_Mask;
+ 
+    -----------------------
+    -- Add_To_Sigal_Mask --
+    -----------------------
+ 
+    procedure Add_To_Interrupt_Mask
+      (Mask      : access Interrupt_Mask;
+       Interrupt : Interrupt_ID)
+    is
+    begin
+       null;
+    end Add_To_Interrupt_Mask;
+ 
+    --------------------------------
+    -- Delete_From_Interrupt_Mask --
+    --------------------------------
+ 
+    procedure Delete_From_Interrupt_Mask
+      (Mask      : access Interrupt_Mask;
+       Interrupt : Interrupt_ID)
+    is
+    begin
+       null;
+    end Delete_From_Interrupt_Mask;
+ 
+    ---------------
+    -- Is_Member --
+    ---------------
+ 
+    function Is_Member
+      (Mask      : access Interrupt_Mask;
+       Interrupt : Interrupt_ID) return Boolean
+    is
+    begin
+       return False;
+    end Is_Member;
+ 
+    -------------------------
+    -- Copy_Interrupt_Mask --
+    -------------------------
+ 
+    procedure Copy_Interrupt_Mask
+      (X : out Interrupt_Mask;
+       Y : Interrupt_Mask)
+    is
+    begin
+       X := Y;
+    end Copy_Interrupt_Mask;
+ 
+    -------------------------
+    -- Interrupt_Self_Process --
+    -------------------------
+ 
+    procedure Interrupt_Self_Process (Interrupt : Interrupt_ID) is
+    begin
+       null;
+    end Interrupt_Self_Process;
+ 
+ end System.Interrupt_Management.Operations;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-inmaop-posix.adb gcc-4.0.0/gcc/ada/s-inmaop-posix.adb
*** gcc-3.4.3/gcc/ada/s-inmaop-posix.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-inmaop-posix.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,359 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
+ --                                                                          --
+ --                   SYSTEM.INTERRUPT_MANAGEMENT.OPERATIONS                 --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2003, Ada Core Technologies               --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a POSIX-like version of this package.
+ --  Note: this file can only be used for POSIX compliant systems.
+ 
+ with Interfaces.C;
+ --  used for int
+ --           size_t
+ --           unsigned
+ 
+ with System.OS_Interface;
+ --  used for various type, constant, and operations
+ 
+ with System.Storage_Elements;
+ --  used for To_Address
+ --           Integer_Address
+ 
+ with Unchecked_Conversion;
+ 
+ package body System.Interrupt_Management.Operations is
+ 
+    use Interfaces.C;
+    use System.OS_Interface;
+ 
+    type Interrupt_Mask_Ptr is access all Interrupt_Mask;
+ 
+    function "+" is new
+      Unchecked_Conversion (Interrupt_Mask_Ptr, sigset_t_ptr);
+ 
+    ---------------------
+    -- Local Variables --
+    ---------------------
+ 
+    Initial_Action : array (Signal) of aliased struct_sigaction;
+ 
+    Default_Action : aliased struct_sigaction;
+ 
+    Ignore_Action  : aliased struct_sigaction;
+ 
+    ----------------------------
+    -- Thread_Block_Interrupt --
+    ----------------------------
+ 
+    procedure Thread_Block_Interrupt
+      (Interrupt : Interrupt_ID)
+    is
+       Result : Interfaces.C.int;
+       Mask   : aliased sigset_t;
+ 
+    begin
+       Result := sigemptyset (Mask'Access);
+       pragma Assert (Result = 0);
+       Result := sigaddset (Mask'Access, Signal (Interrupt));
+       pragma Assert (Result = 0);
+       Result := pthread_sigmask (SIG_BLOCK, Mask'Unchecked_Access, null);
+       pragma Assert (Result = 0);
+    end Thread_Block_Interrupt;
+ 
+    ------------------------------
+    -- Thread_Unblock_Interrupt --
+    ------------------------------
+ 
+    procedure Thread_Unblock_Interrupt
+      (Interrupt : Interrupt_ID)
+    is
+       Mask   : aliased sigset_t;
+       Result : Interfaces.C.int;
+ 
+    begin
+       Result := sigemptyset (Mask'Access);
+       pragma Assert (Result = 0);
+       Result := sigaddset (Mask'Access, Signal (Interrupt));
+       pragma Assert (Result = 0);
+       Result := pthread_sigmask (SIG_UNBLOCK, Mask'Unchecked_Access, null);
+       pragma Assert (Result = 0);
+    end Thread_Unblock_Interrupt;
+ 
+    ------------------------
+    -- Set_Interrupt_Mask --
+    ------------------------
+ 
+    procedure Set_Interrupt_Mask (Mask : access Interrupt_Mask) is
+       Result   : Interfaces.C.int;
+ 
+    begin
+       Result := pthread_sigmask
+         (SIG_SETMASK, +Interrupt_Mask_Ptr (Mask), null);
+       pragma Assert (Result = 0);
+    end Set_Interrupt_Mask;
+ 
+    procedure Set_Interrupt_Mask
+      (Mask  : access Interrupt_Mask;
+       OMask : access Interrupt_Mask)
+    is
+       Result  : Interfaces.C.int;
+ 
+    begin
+       Result := pthread_sigmask
+         (SIG_SETMASK, +Interrupt_Mask_Ptr (Mask), +Interrupt_Mask_Ptr (OMask));
+       pragma Assert (Result = 0);
+    end Set_Interrupt_Mask;
+ 
+    ------------------------
+    -- Get_Interrupt_Mask --
+    ------------------------
+ 
+    procedure Get_Interrupt_Mask (Mask : access Interrupt_Mask) is
+       Result : Interfaces.C.int;
+ 
+    begin
+       Result := pthread_sigmask
+         (SIG_SETMASK, null, +Interrupt_Mask_Ptr (Mask));
+       pragma Assert (Result = 0);
+    end Get_Interrupt_Mask;
+ 
+    --------------------
+    -- Interrupt_Wait --
+    --------------------
+ 
+    function Interrupt_Wait
+      (Mask : access Interrupt_Mask)
+       return Interrupt_ID
+    is
+       Result : Interfaces.C.int;
+       Sig    : aliased Signal;
+ 
+    begin
+       Result := sigwait (Mask, Sig'Access);
+ 
+       if Result /= 0 then
+          return 0;
+       end if;
+ 
+       return Interrupt_ID (Sig);
+    end Interrupt_Wait;
+ 
+    ----------------------------
+    -- Install_Default_Action --
+    ----------------------------
+ 
+    procedure Install_Default_Action (Interrupt : Interrupt_ID) is
+       Result : Interfaces.C.int;
+ 
+    begin
+       Result := sigaction
+         (Signal (Interrupt),
+          Initial_Action (Signal (Interrupt))'Access, null);
+       pragma Assert (Result = 0);
+    end Install_Default_Action;
+ 
+    ---------------------------
+    -- Install_Ignore_Action --
+    ---------------------------
+ 
+    procedure Install_Ignore_Action (Interrupt : Interrupt_ID) is
+       Result : Interfaces.C.int;
+ 
+    begin
+       Result := sigaction (Signal (Interrupt), Ignore_Action'Access, null);
+       pragma Assert (Result = 0);
+    end Install_Ignore_Action;
+ 
+    -------------------------
+    -- Fill_Interrupt_Mask --
+    -------------------------
+ 
+    procedure Fill_Interrupt_Mask (Mask : access Interrupt_Mask) is
+       Result : Interfaces.C.int;
+ 
+    begin
+       Result := sigfillset (Mask);
+       pragma Assert (Result = 0);
+    end Fill_Interrupt_Mask;
+ 
+    --------------------------
+    -- Empty_Interrupt_Mask --
+    --------------------------
+ 
+    procedure Empty_Interrupt_Mask (Mask : access Interrupt_Mask) is
+       Result : Interfaces.C.int;
+ 
+    begin
+       Result := sigemptyset (Mask);
+       pragma Assert (Result = 0);
+    end Empty_Interrupt_Mask;
+ 
+    ---------------------------
+    -- Add_To_Interrupt_Mask --
+    ---------------------------
+ 
+    procedure Add_To_Interrupt_Mask
+      (Mask      : access Interrupt_Mask;
+       Interrupt : Interrupt_ID)
+    is
+       Result : Interfaces.C.int;
+ 
+    begin
+       Result := sigaddset (Mask, Signal (Interrupt));
+       pragma Assert (Result = 0);
+    end Add_To_Interrupt_Mask;
+ 
+    --------------------------------
+    -- Delete_From_Interrupt_Mask --
+    --------------------------------
+ 
+    procedure Delete_From_Interrupt_Mask
+      (Mask      : access Interrupt_Mask;
+       Interrupt : Interrupt_ID)
+    is
+       Result : Interfaces.C.int;
+ 
+    begin
+       Result := sigdelset (Mask, Signal (Interrupt));
+       pragma Assert (Result = 0);
+    end Delete_From_Interrupt_Mask;
+ 
+    ---------------
+    -- Is_Member --
+    ---------------
+ 
+    function Is_Member
+      (Mask      : access Interrupt_Mask;
+       Interrupt : Interrupt_ID) return Boolean
+    is
+       Result : Interfaces.C.int;
+ 
+    begin
+       Result := sigismember (Mask, Signal (Interrupt));
+       pragma Assert (Result = 0 or else Result = 1);
+       return Result = 1;
+    end Is_Member;
+ 
+    -------------------------
+    -- Copy_Interrupt_Mask --
+    -------------------------
+ 
+    procedure Copy_Interrupt_Mask
+      (X : out Interrupt_Mask;
+       Y : Interrupt_Mask)
+    is
+    begin
+       X := Y;
+    end Copy_Interrupt_Mask;
+ 
+    ----------------------------
+    -- Interrupt_Self_Process --
+    ----------------------------
+ 
+    procedure Interrupt_Self_Process (Interrupt : Interrupt_ID) is
+       Result : Interfaces.C.int;
+ 
+    begin
+       Result := kill (getpid, Signal (Interrupt));
+       pragma Assert (Result = 0);
+    end Interrupt_Self_Process;
+ 
+ begin
+ 
+    declare
+       mask    : aliased sigset_t;
+       allmask : aliased sigset_t;
+       Result  : Interfaces.C.int;
+ 
+    begin
+       for Sig in 1 .. Signal'Last loop
+          Result := sigaction
+            (Sig, null, Initial_Action (Sig)'Unchecked_Access);
+ 
+          --  ??? [assert 1]
+          --  we can't check Result here since sigaction will fail on
+          --  SIGKILL, SIGSTOP, and possibly other signals
+          --  pragma Assert (Result = 0);
+ 
+       end loop;
+ 
+       --  Setup the masks to be exported.
+ 
+       Result := sigemptyset (mask'Access);
+       pragma Assert (Result = 0);
+ 
+       Result := sigfillset (allmask'Access);
+       pragma Assert (Result = 0);
+ 
+       Default_Action.sa_flags   := 0;
+       Default_Action.sa_mask    := mask;
+       Default_Action.sa_handler :=
+         Storage_Elements.To_Address
+           (Storage_Elements.Integer_Address (SIG_DFL));
+ 
+       Ignore_Action.sa_flags   := 0;
+       Ignore_Action.sa_mask    := mask;
+       Ignore_Action.sa_handler :=
+         Storage_Elements.To_Address
+           (Storage_Elements.Integer_Address (SIG_IGN));
+ 
+       for J in Interrupt_ID loop
+ 
+          --  We need to check whether J is in Keep_Unmasked because
+          --  the index type of the Keep_Unmasked array is not always
+          --  Interrupt_ID; it may be a subtype of Interrupt_ID.
+ 
+          if J in Keep_Unmasked'Range and then Keep_Unmasked (J) then
+             Result := sigaddset (mask'Access, Signal (J));
+             pragma Assert (Result = 0);
+             Result := sigdelset (allmask'Access, Signal (J));
+             pragma Assert (Result = 0);
+          end if;
+       end loop;
+ 
+       --  The Keep_Unmasked signals should be unmasked for Environment task
+ 
+       Result := pthread_sigmask (SIG_UNBLOCK, mask'Unchecked_Access, null);
+       pragma Assert (Result = 0);
+ 
+       --  Get the signal mask of the Environment Task
+ 
+       Result := pthread_sigmask (SIG_SETMASK, null, mask'Unchecked_Access);
+       pragma Assert (Result = 0);
+ 
+       --  Setup the constants exported
+ 
+       Environment_Mask := Interrupt_Mask (mask);
+ 
+       All_Tasks_Mask := Interrupt_Mask (allmask);
+    end;
+ 
+ end System.Interrupt_Management.Operations;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-inmaop-vms.adb gcc-4.0.0/gcc/ada/s-inmaop-vms.adb
*** gcc-3.4.3/gcc/ada/s-inmaop-vms.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-inmaop-vms.adb	Mon May 17 13:20:42 2004
***************
*** 0 ****
--- 1,298 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --           S Y S T E M . I N T E R R U P T _ M A N A G E M E N T .        --
+ --                           O P E R A T I O N S                            --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a OpenVMS/Alpha version of this package.
+ 
+ with System.OS_Interface;
+ --  used for various type, constant, and operations
+ 
+ with System.Aux_DEC;
+ --  used for Short_Address
+ 
+ with System.Parameters;
+ 
+ with System.Tasking;
+ 
+ with System.Tasking.Initialization;
+ 
+ with System.Task_Primitives.Operations;
+ 
+ with System.Task_Primitives.Operations.DEC;
+ 
+ with Unchecked_Conversion;
+ 
+ package body System.Interrupt_Management.Operations is
+ 
+    use System.OS_Interface;
+    use System.Parameters;
+    use System.Tasking;
+    use type unsigned_short;
+ 
+    function To_Address is new Unchecked_Conversion (Task_Id, System.Address);
+    package POP renames System.Task_Primitives.Operations;
+ 
+    ----------------------------
+    -- Thread_Block_Interrupt --
+    ----------------------------
+ 
+    procedure Thread_Block_Interrupt (Interrupt : Interrupt_ID) is
+       pragma Warnings (Off, Interrupt);
+    begin
+       null;
+    end Thread_Block_Interrupt;
+ 
+    ------------------------------
+    -- Thread_Unblock_Interrupt --
+    ------------------------------
+ 
+    procedure Thread_Unblock_Interrupt (Interrupt : Interrupt_ID) is
+       pragma Warnings (Off, Interrupt);
+    begin
+       null;
+    end Thread_Unblock_Interrupt;
+ 
+    ------------------------
+    -- Set_Interrupt_Mask --
+    ------------------------
+ 
+    procedure Set_Interrupt_Mask (Mask : access Interrupt_Mask) is
+       pragma Warnings (Off, Mask);
+    begin
+       null;
+    end Set_Interrupt_Mask;
+ 
+    procedure Set_Interrupt_Mask
+      (Mask  : access Interrupt_Mask;
+       OMask : access Interrupt_Mask)
+    is
+       pragma Warnings (Off, Mask);
+       pragma Warnings (Off, OMask);
+    begin
+       null;
+    end Set_Interrupt_Mask;
+ 
+    ------------------------
+    -- Get_Interrupt_Mask --
+    ------------------------
+ 
+    procedure Get_Interrupt_Mask (Mask : access Interrupt_Mask) is
+       pragma Warnings (Off, Mask);
+    begin
+       null;
+    end Get_Interrupt_Mask;
+ 
+    --------------------
+    -- Interrupt_Wait --
+    --------------------
+ 
+    function To_unsigned_long is new
+      Unchecked_Conversion (System.Aux_DEC.Short_Address, unsigned_long);
+ 
+    function Interrupt_Wait (Mask : access Interrupt_Mask)
+      return Interrupt_ID
+    is
+       Self_ID : constant Task_Id := Self;
+       Iosb    : IO_Status_Block_Type := (0, 0, 0);
+       Status  : Cond_Value_Type;
+ 
+    begin
+ 
+       --  A QIO read is registered. The system call returns immediately
+       --  after scheduling an AST to be fired when the operation
+       --  completes.
+ 
+       Sys_QIO
+         (Status => Status,
+          Chan   => Rcv_Interrupt_Chan,
+          Func   => IO_READVBLK,
+          Iosb   => Iosb,
+          Astadr =>
+            POP.DEC.Interrupt_AST_Handler'Access,
+          Astprm => To_Address (Self_ID),
+          P1     => To_unsigned_long (Interrupt_Mailbox'Address),
+          P2     => Interrupt_ID'Size / 8);
+ 
+       pragma Assert ((Status and 1) = 1);
+ 
+       loop
+ 
+          --  Wait to be woken up. Could be that the AST has fired,
+          --  in which case the Iosb.Status variable will be non-zero,
+          --  or maybe the wait is being aborted.
+ 
+          POP.Sleep
+            (Self_ID,
+             System.Tasking.Interrupt_Server_Blocked_On_Event_Flag);
+ 
+          if Iosb.Status /= 0 then
+             if (Iosb.Status and 1) = 1
+               and then Mask (Signal (Interrupt_Mailbox))
+             then
+                return Interrupt_Mailbox;
+             else
+                return 0;
+             end if;
+          else
+             POP.Unlock (Self_ID);
+ 
+             if Single_Lock then
+                POP.Unlock_RTS;
+             end if;
+ 
+             System.Tasking.Initialization.Undefer_Abort (Self_ID);
+             System.Tasking.Initialization.Defer_Abort (Self_ID);
+ 
+             if Single_Lock then
+                POP.Lock_RTS;
+             end if;
+ 
+             POP.Write_Lock (Self_ID);
+          end if;
+       end loop;
+    end Interrupt_Wait;
+ 
+    ----------------------------
+    -- Install_Default_Action --
+    ----------------------------
+ 
+    procedure Install_Default_Action (Interrupt : Interrupt_ID) is
+       pragma Warnings (Off, Interrupt);
+    begin
+       null;
+    end Install_Default_Action;
+ 
+    ---------------------------
+    -- Install_Ignore_Action --
+    ---------------------------
+ 
+    procedure Install_Ignore_Action (Interrupt : Interrupt_ID) is
+       pragma Warnings (Off, Interrupt);
+    begin
+       null;
+    end Install_Ignore_Action;
+ 
+    -------------------------
+    -- Fill_Interrupt_Mask --
+    -------------------------
+ 
+    procedure Fill_Interrupt_Mask (Mask : access Interrupt_Mask) is
+    begin
+       Mask.all := (others => True);
+    end Fill_Interrupt_Mask;
+ 
+    --------------------------
+    -- Empty_Interrupt_Mask --
+    --------------------------
+ 
+    procedure Empty_Interrupt_Mask (Mask : access Interrupt_Mask) is
+    begin
+       Mask.all := (others => False);
+    end Empty_Interrupt_Mask;
+ 
+    ---------------------------
+    -- Add_To_Interrupt_Mask --
+    ---------------------------
+ 
+    procedure Add_To_Interrupt_Mask
+      (Mask      : access Interrupt_Mask;
+       Interrupt : Interrupt_ID)
+    is
+    begin
+       Mask (Signal (Interrupt)) := True;
+    end Add_To_Interrupt_Mask;
+ 
+    --------------------------------
+    -- Delete_From_Interrupt_Mask --
+    --------------------------------
+ 
+    procedure Delete_From_Interrupt_Mask
+      (Mask      : access Interrupt_Mask;
+       Interrupt : Interrupt_ID)
+    is
+    begin
+       Mask (Signal (Interrupt)) := False;
+    end Delete_From_Interrupt_Mask;
+ 
+    ---------------
+    -- Is_Member --
+    ---------------
+ 
+    function Is_Member
+      (Mask      : access Interrupt_Mask;
+       Interrupt : Interrupt_ID) return Boolean
+    is
+    begin
+       return Mask (Signal (Interrupt));
+    end Is_Member;
+ 
+    -------------------------
+    -- Copy_Interrupt_Mask --
+    -------------------------
+ 
+    procedure Copy_Interrupt_Mask
+      (X : out Interrupt_Mask;
+       Y : Interrupt_Mask)
+    is
+    begin
+       X := Y;
+    end Copy_Interrupt_Mask;
+ 
+    -------------------------
+    -- Interrupt_Self_Process --
+    -------------------------
+ 
+    procedure Interrupt_Self_Process (Interrupt : Interrupt_ID) is
+       Status : Cond_Value_Type;
+    begin
+       Sys_QIO
+         (Status => Status,
+          Chan   => Snd_Interrupt_Chan,
+          Func   => IO_WRITEVBLK,
+          P1     => To_unsigned_long (Interrupt'Address),
+          P2     => Interrupt_ID'Size / 8);
+ 
+       pragma Assert ((Status and 1) = 1);
+    end Interrupt_Self_Process;
+ 
+ begin
+    Environment_Mask := (others => False);
+    All_Tasks_Mask := (others => True);
+ 
+    for J in Interrupt_ID loop
+       if Keep_Unmasked (J) then
+          Environment_Mask (Signal (J)) := True;
+          All_Tasks_Mask (Signal (J)) := False;
+       end if;
+    end loop;
+ end System.Interrupt_Management.Operations;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-inmaop.ads gcc-4.0.0/gcc/ada/s-inmaop.ads
*** gcc-3.4.3/gcc/ada/s-inmaop.ads	Tue Oct 21 13:42:14 2003
--- gcc-4.0.0/gcc/ada/s-inmaop.ads	Mon May 10 16:18:53 2004
***************
*** 7,13 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-1998, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 7,13 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 35,112 ****
  package System.Interrupt_Management.Operations is
  
     procedure Thread_Block_Interrupt (Interrupt : Interrupt_ID);
-    --  Mask the calling thread for the interrupt
     pragma Inline (Thread_Block_Interrupt);
  
     procedure Thread_Unblock_Interrupt (Interrupt : Interrupt_ID);
-    --  Unmask the calling thread for the interrupt
     pragma Inline (Thread_Unblock_Interrupt);
  
     procedure Set_Interrupt_Mask (Mask : access Interrupt_Mask);
     --  Set the interrupt mask of the calling thread
     procedure Set_Interrupt_Mask
       (Mask  : access Interrupt_Mask;
        OMask : access Interrupt_Mask);
     --  Set the interrupt mask of the calling thread while returning the
     --  previous Mask.
-    pragma Inline (Set_Interrupt_Mask);
  
     procedure Get_Interrupt_Mask (Mask : access Interrupt_Mask);
-    --  Get the interrupt mask of the calling thread
     pragma Inline (Get_Interrupt_Mask);
  
     function Interrupt_Wait (Mask : access Interrupt_Mask) return Interrupt_ID;
-    --  Wait for the interrupts specified in Mask and return
-    --  the interrupt received. Upon error it return 0.
     pragma Inline (Interrupt_Wait);
  
     procedure Install_Default_Action (Interrupt : Interrupt_ID);
-    --  Set the sigaction of the Interrupt to default (SIG_DFL).
     pragma Inline (Install_Default_Action);
  
     procedure Install_Ignore_Action (Interrupt : Interrupt_ID);
-    --  Set the sigaction of the Interrupt to ignore (SIG_IGN).
     pragma Inline (Install_Ignore_Action);
  
     procedure Fill_Interrupt_Mask (Mask : access Interrupt_Mask);
-    --  Get a Interrupt_Mask with all the interrupt masked
     pragma Inline (Fill_Interrupt_Mask);
  
     procedure Empty_Interrupt_Mask (Mask : access Interrupt_Mask);
-    --  Get a Interrupt_Mask with all the interrupt unmasked
     pragma Inline (Empty_Interrupt_Mask);
  
     procedure Add_To_Interrupt_Mask
       (Mask      : access Interrupt_Mask;
        Interrupt : Interrupt_ID);
-    --  Mask the given interrupt in the Interrupt_Mask
     pragma Inline (Add_To_Interrupt_Mask);
  
     procedure Delete_From_Interrupt_Mask
       (Mask      : access Interrupt_Mask;
        Interrupt : Interrupt_ID);
-    --  Unmask the given interrupt in the Interrupt_Mask
     pragma Inline (Delete_From_Interrupt_Mask);
  
     function Is_Member
       (Mask      : access Interrupt_Mask;
        Interrupt : Interrupt_ID) return Boolean;
-    --  See if a given interrupt is masked in the Interrupt_Mask
     pragma Inline (Is_Member);
  
     procedure Copy_Interrupt_Mask (X : out Interrupt_Mask; Y : Interrupt_Mask);
-    --  Assigment needed for limited private type Interrupt_Mask.
     pragma Inline (Copy_Interrupt_Mask);
  
     procedure Interrupt_Self_Process (Interrupt : Interrupt_ID);
-    --  raise an Interrupt process-level
     pragma Inline (Interrupt_Self_Process);
  
     --  The following objects serve as constants, but are initialized
     --  in the body to aid portability.  These actually belong to the
     --  System.Interrupt_Management but since Interrupt_Mask is a
     --  private type we can not have them declared there.
  
     Environment_Mask : aliased Interrupt_Mask;
     --  This mask represents the mask of Environment task when this package
     --  is being elaborated, except the signals being
--- 35,116 ----
  package System.Interrupt_Management.Operations is
  
     procedure Thread_Block_Interrupt (Interrupt : Interrupt_ID);
     pragma Inline (Thread_Block_Interrupt);
+    --  Mask the calling thread for the interrupt
  
     procedure Thread_Unblock_Interrupt (Interrupt : Interrupt_ID);
     pragma Inline (Thread_Unblock_Interrupt);
+    --  Unmask the calling thread for the interrupt
  
     procedure Set_Interrupt_Mask (Mask : access Interrupt_Mask);
     --  Set the interrupt mask of the calling thread
+ 
     procedure Set_Interrupt_Mask
       (Mask  : access Interrupt_Mask;
        OMask : access Interrupt_Mask);
+    pragma Inline (Set_Interrupt_Mask);
     --  Set the interrupt mask of the calling thread while returning the
     --  previous Mask.
  
     procedure Get_Interrupt_Mask (Mask : access Interrupt_Mask);
     pragma Inline (Get_Interrupt_Mask);
+    --  Get the interrupt mask of the calling thread
  
     function Interrupt_Wait (Mask : access Interrupt_Mask) return Interrupt_ID;
     pragma Inline (Interrupt_Wait);
+    --  Wait for the interrupts specified in Mask and return
+    --  the interrupt received. Return 0 upon error.
  
     procedure Install_Default_Action (Interrupt : Interrupt_ID);
     pragma Inline (Install_Default_Action);
+    --  Set the sigaction of the Interrupt to default (SIG_DFL).
  
     procedure Install_Ignore_Action (Interrupt : Interrupt_ID);
     pragma Inline (Install_Ignore_Action);
+    --  Set the sigaction of the Interrupt to ignore (SIG_IGN).
  
     procedure Fill_Interrupt_Mask (Mask : access Interrupt_Mask);
     pragma Inline (Fill_Interrupt_Mask);
+    --  Get a Interrupt_Mask with all the interrupt masked
  
     procedure Empty_Interrupt_Mask (Mask : access Interrupt_Mask);
     pragma Inline (Empty_Interrupt_Mask);
+    --  Get a Interrupt_Mask with all the interrupt unmasked
  
     procedure Add_To_Interrupt_Mask
       (Mask      : access Interrupt_Mask;
        Interrupt : Interrupt_ID);
     pragma Inline (Add_To_Interrupt_Mask);
+    --  Mask the given interrupt in the Interrupt_Mask
  
     procedure Delete_From_Interrupt_Mask
       (Mask      : access Interrupt_Mask;
        Interrupt : Interrupt_ID);
     pragma Inline (Delete_From_Interrupt_Mask);
+    --  Unmask the given interrupt in the Interrupt_Mask
  
     function Is_Member
       (Mask      : access Interrupt_Mask;
        Interrupt : Interrupt_ID) return Boolean;
     pragma Inline (Is_Member);
+    --  See if a given interrupt is masked in the Interrupt_Mask
  
     procedure Copy_Interrupt_Mask (X : out Interrupt_Mask; Y : Interrupt_Mask);
     pragma Inline (Copy_Interrupt_Mask);
+    --  Assigment needed for limited private type Interrupt_Mask.
  
     procedure Interrupt_Self_Process (Interrupt : Interrupt_ID);
     pragma Inline (Interrupt_Self_Process);
+    --  Raise an Interrupt process-level
  
     --  The following objects serve as constants, but are initialized
     --  in the body to aid portability.  These actually belong to the
     --  System.Interrupt_Management but since Interrupt_Mask is a
     --  private type we can not have them declared there.
  
+    --  Why not make these deferred constants that are initialized using
+    --  function calls in the private part???
+ 
     Environment_Mask : aliased Interrupt_Mask;
     --  This mask represents the mask of Environment task when this package
     --  is being elaborated, except the signals being
diff -Nrcpad gcc-3.4.3/gcc/ada/s-interr-dummy.adb gcc-4.0.0/gcc/ada/s-interr-dummy.adb
*** gcc-3.4.3/gcc/ada/s-interr-dummy.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-interr-dummy.adb	Mon May 17 13:20:42 2004
***************
*** 0 ****
--- 1,307 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
+ --                                                                          --
+ --                     S Y S T E M . I N T E R R U P T S                    --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2004, Ada Core Technologies               --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is an OS/2 version of this package.
+ 
+ --  This version is a stub, for systems that
+ --  do not support interrupts (or signals).
+ 
+ with Ada.Exceptions;
+ 
+ package body System.Interrupts is
+ 
+    pragma Warnings (Off); -- kill warnings on unreferenced formals
+ 
+    use System.Tasking;
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    procedure Unimplemented;
+    --  This procedure raises a Program_Error with an appropriate message
+    --  indicating that an unimplemented feature has been used.
+ 
+    --------------------
+    -- Attach_Handler --
+    --------------------
+ 
+    procedure Attach_Handler
+      (New_Handler : Parameterless_Handler;
+       Interrupt   : Interrupt_ID;
+       Static      : Boolean := False)
+    is
+    begin
+       Unimplemented;
+    end Attach_Handler;
+ 
+    -----------------------------
+    -- Bind_Interrupt_To_Entry --
+    -----------------------------
+ 
+    procedure Bind_Interrupt_To_Entry
+      (T       : Task_Id;
+       E       : Task_Entry_Index;
+       Int_Ref : System.Address)
+    is
+    begin
+       Unimplemented;
+    end Bind_Interrupt_To_Entry;
+ 
+    ---------------------
+    -- Block_Interrupt --
+    ---------------------
+ 
+    procedure Block_Interrupt (Interrupt : Interrupt_ID) is
+    begin
+       Unimplemented;
+    end Block_Interrupt;
+ 
+    ---------------------
+    -- Current_Handler --
+    ---------------------
+ 
+    function Current_Handler
+      (Interrupt : Interrupt_ID)
+       return      Parameterless_Handler
+    is
+    begin
+       Unimplemented;
+       return null;
+    end Current_Handler;
+ 
+    --------------------
+    -- Detach_Handler --
+    --------------------
+ 
+    procedure Detach_Handler
+      (Interrupt : Interrupt_ID;
+       Static    : Boolean := False)
+    is
+    begin
+       Unimplemented;
+    end Detach_Handler;
+ 
+    ------------------------------
+    -- Detach_Interrupt_Entries --
+    ------------------------------
+ 
+    procedure Detach_Interrupt_Entries (T : Task_Id) is
+    begin
+       Unimplemented;
+    end Detach_Interrupt_Entries;
+ 
+    ----------------------
+    -- Exchange_Handler --
+    ----------------------
+ 
+    procedure Exchange_Handler
+      (Old_Handler : out Parameterless_Handler;
+       New_Handler : Parameterless_Handler;
+       Interrupt   : Interrupt_ID;
+       Static      : Boolean := False)
+    is
+    begin
+       Old_Handler := null;
+       Unimplemented;
+    end Exchange_Handler;
+ 
+    --------------
+    -- Finalize --
+    --------------
+ 
+    procedure Finalize (Object : in out Static_Interrupt_Protection) is
+    begin
+       Unimplemented;
+    end Finalize;
+ 
+    -------------------------------------
+    -- Has_Interrupt_Or_Attach_Handler --
+    -------------------------------------
+ 
+    function Has_Interrupt_Or_Attach_Handler
+      (Object : access Dynamic_Interrupt_Protection)
+       return   Boolean
+    is
+       pragma Warnings (Off, Object);
+ 
+    begin
+       Unimplemented;
+       return True;
+    end Has_Interrupt_Or_Attach_Handler;
+ 
+    function Has_Interrupt_Or_Attach_Handler
+      (Object : access Static_Interrupt_Protection)
+       return   Boolean
+    is
+       pragma Warnings (Off, Object);
+ 
+    begin
+       Unimplemented;
+       return True;
+    end Has_Interrupt_Or_Attach_Handler;
+ 
+    ----------------------
+    -- Ignore_Interrupt --
+    ----------------------
+ 
+    procedure Ignore_Interrupt (Interrupt : Interrupt_ID) is
+    begin
+       Unimplemented;
+    end Ignore_Interrupt;
+ 
+    ----------------------
+    -- Install_Handlers --
+    ----------------------
+ 
+    procedure Install_Handlers
+      (Object       : access Static_Interrupt_Protection;
+       New_Handlers : New_Handler_Array)
+    is
+    begin
+       Unimplemented;
+    end Install_Handlers;
+ 
+    ----------------
+    -- Is_Blocked --
+    ----------------
+ 
+    function Is_Blocked (Interrupt : Interrupt_ID) return Boolean is
+    begin
+       Unimplemented;
+       return True;
+    end Is_Blocked;
+ 
+    -----------------------
+    -- Is_Entry_Attached --
+    -----------------------
+ 
+    function Is_Entry_Attached (Interrupt : Interrupt_ID) return Boolean is
+    begin
+       Unimplemented;
+       return True;
+    end Is_Entry_Attached;
+ 
+    -------------------------
+    -- Is_Handler_Attached --
+    -------------------------
+ 
+    function Is_Handler_Attached (Interrupt : Interrupt_ID) return Boolean is
+    begin
+       Unimplemented;
+       return True;
+    end Is_Handler_Attached;
+ 
+    ----------------
+    -- Is_Ignored --
+    ----------------
+ 
+    function Is_Ignored (Interrupt : Interrupt_ID) return Boolean is
+    begin
+       Unimplemented;
+       return True;
+    end Is_Ignored;
+ 
+    -----------------
+    -- Is_Reserved --
+    -----------------
+ 
+    function Is_Reserved (Interrupt : Interrupt_ID) return Boolean is
+    begin
+       Unimplemented;
+       return True;
+    end Is_Reserved;
+ 
+    ---------------
+    -- Reference --
+    ---------------
+ 
+    function Reference (Interrupt : Interrupt_ID) return System.Address is
+    begin
+       Unimplemented;
+       return Interrupt'Address;
+    end Reference;
+ 
+    --------------------------------
+    -- Register_Interrupt_Handler --
+    --------------------------------
+ 
+    procedure Register_Interrupt_Handler
+      (Handler_Addr : System.Address)
+    is
+    begin
+       Unimplemented;
+    end Register_Interrupt_Handler;
+ 
+    -----------------------
+    -- Unblock_Interrupt --
+    -----------------------
+ 
+    procedure Unblock_Interrupt (Interrupt : Interrupt_ID) is
+    begin
+       Unimplemented;
+    end Unblock_Interrupt;
+ 
+    ------------------
+    -- Unblocked_By --
+    ------------------
+ 
+    function Unblocked_By (Interrupt : Interrupt_ID)
+      return System.Tasking.Task_Id is
+    begin
+       Unimplemented;
+       return null;
+    end Unblocked_By;
+ 
+    ------------------------
+    -- Unignore_Interrupt --
+    ------------------------
+ 
+    procedure Unignore_Interrupt (Interrupt : Interrupt_ID) is
+    begin
+       Unimplemented;
+    end Unignore_Interrupt;
+ 
+    -------------------
+    -- Unimplemented; --
+    -------------------
+ 
+    procedure Unimplemented is
+    begin
+       Ada.Exceptions.Raise_Exception
+         (Program_Error'Identity, "interrupts/signals not implemented");
+       raise Program_Error;
+    end Unimplemented;
+ 
+ end System.Interrupts;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-interr-sigaction.adb gcc-4.0.0/gcc/ada/s-interr-sigaction.adb
*** gcc-3.4.3/gcc/ada/s-interr-sigaction.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-interr-sigaction.adb	Tue Jul  6 13:57:29 2004
***************
*** 0 ****
--- 1,683 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                     S Y S T E M . I N T E R R U P T S                    --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --              Copyright (C) 1998-2004 Free Software Fundation             --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the IRIX & NT version of this package.
+ 
+ with Ada.Task_Identification;
+ --  used for Task_Id
+ 
+ with Ada.Exceptions;
+ --  used for Raise_Exception
+ 
+ with System.OS_Interface;
+ --  used for intr_attach
+ 
+ with System.Storage_Elements;
+ --  used for To_Address
+ --           To_Integer
+ 
+ with System.Task_Primitives.Operations;
+ --  used for Self
+ --           Sleep
+ --           Wakeup
+ --           Write_Lock
+ --           Unlock
+ 
+ with System.Tasking.Utilities;
+ --  used for Make_Independent
+ 
+ with System.Tasking.Rendezvous;
+ --  used for Call_Simple
+ 
+ with System.Tasking.Initialization;
+ --  used for Defer_Abort
+ --           Undefer_Abort
+ 
+ with System.Interrupt_Management;
+ 
+ with System.Parameters;
+ --  used for Single_Lock
+ 
+ with Interfaces.C;
+ --  used for int
+ 
+ with Unchecked_Conversion;
+ 
+ package body System.Interrupts is
+ 
+    use Parameters;
+    use Tasking;
+    use Ada.Exceptions;
+    use System.OS_Interface;
+    use Interfaces.C;
+ 
+    package STPO renames System.Task_Primitives.Operations;
+    package IMNG renames System.Interrupt_Management;
+ 
+    subtype int is Interfaces.C.int;
+ 
+    function To_System is new Unchecked_Conversion
+      (Ada.Task_Identification.Task_Id, Task_Id);
+ 
+    type Handler_Kind is (Unknown, Task_Entry, Protected_Procedure);
+ 
+    type Handler_Desc is record
+       Kind   : Handler_Kind := Unknown;
+       T      : Task_Id;
+       E      : Task_Entry_Index;
+       H      : Parameterless_Handler;
+       Static : Boolean := False;
+    end record;
+ 
+    task type Server_Task (Interrupt : Interrupt_ID) is
+       pragma Interrupt_Priority (System.Interrupt_Priority'Last);
+    end Server_Task;
+ 
+    type Server_Task_Access is access Server_Task;
+ 
+    Handlers        : array (Interrupt_ID) of Task_Id;
+    Descriptors     : array (Interrupt_ID) of Handler_Desc;
+    Interrupt_Count : array (Interrupt_ID) of Integer := (others => 0);
+ 
+    pragma Volatile_Components (Interrupt_Count);
+ 
+    procedure Attach_Handler
+      (New_Handler : Parameterless_Handler;
+       Interrupt   : Interrupt_ID;
+       Static      : Boolean;
+       Restoration : Boolean);
+    --  This internal procedure is needed to finalize protected objects
+    --  that contain interrupt handlers.
+ 
+    procedure Signal_Handler (Sig : Interrupt_ID);
+    --  This procedure is used to handle all the signals.
+ 
+    --  Type and Head, Tail of the list containing Registered Interrupt
+    --  Handlers. These definitions are used to register the handlers
+    --  specified by the pragma Interrupt_Handler.
+ 
+    --
+    --  Handler Registration:
+    --
+ 
+    type Registered_Handler;
+    type R_Link is access all Registered_Handler;
+ 
+    type Registered_Handler is record
+       H    : System.Address := System.Null_Address;
+       Next : R_Link := null;
+    end record;
+ 
+    Registered_Handlers : R_Link := null;
+ 
+    function Is_Registered (Handler : Parameterless_Handler) return Boolean;
+    --  See if the Handler has been "pragma"ed using Interrupt_Handler.
+    --  Always consider a null handler as registered.
+ 
+    type Handler_Ptr is access procedure (Sig : Interrupt_ID);
+ 
+    function TISR is new Unchecked_Conversion (Handler_Ptr, isr_address);
+ 
+    --------------------
+    -- Signal_Handler --
+    --------------------
+ 
+    procedure Signal_Handler (Sig : Interrupt_ID) is
+       Handler : Task_Id renames Handlers (Sig);
+ 
+    begin
+       if Intr_Attach_Reset and then
+         intr_attach (int (Sig), TISR (Signal_Handler'Access)) = FUNC_ERR
+       then
+          raise Program_Error;
+       end if;
+ 
+       if Handler /= null then
+          Interrupt_Count (Sig) := Interrupt_Count (Sig) + 1;
+          STPO.Wakeup (Handler, Interrupt_Server_Idle_Sleep);
+       end if;
+    end Signal_Handler;
+ 
+    -----------------
+    -- Is_Reserved --
+    -----------------
+ 
+    function Is_Reserved (Interrupt : Interrupt_ID) return Boolean is
+    begin
+       return IMNG.Reserve (IMNG.Interrupt_ID (Interrupt));
+    end Is_Reserved;
+ 
+    -----------------------
+    -- Is_Entry_Attached --
+    -----------------------
+ 
+    function Is_Entry_Attached (Interrupt : Interrupt_ID) return Boolean is
+    begin
+       if Is_Reserved (Interrupt) then
+          Raise_Exception (Program_Error'Identity, "Interrupt" &
+            Interrupt_ID'Image (Interrupt) & " is reserved");
+       end if;
+ 
+       return Descriptors (Interrupt).T /= Null_Task;
+    end Is_Entry_Attached;
+ 
+    -------------------------
+    -- Is_Handler_Attached --
+    -------------------------
+ 
+    function Is_Handler_Attached (Interrupt : Interrupt_ID) return Boolean is
+    begin
+       if Is_Reserved (Interrupt) then
+          Raise_Exception (Program_Error'Identity, "Interrupt" &
+            Interrupt_ID'Image (Interrupt) & " is reserved");
+       end if;
+ 
+       return Descriptors (Interrupt).Kind /= Unknown;
+    end Is_Handler_Attached;
+ 
+    ----------------
+    -- Is_Ignored --
+    ----------------
+ 
+    function Is_Ignored (Interrupt : Interrupt_ID) return Boolean is
+    begin
+       raise Program_Error;
+       return False;
+    end Is_Ignored;
+ 
+    ------------------
+    -- Unblocked_By --
+    ------------------
+ 
+    function Unblocked_By (Interrupt : Interrupt_ID) return Task_Id is
+    begin
+       raise Program_Error;
+       return Null_Task;
+    end Unblocked_By;
+ 
+    ----------------------
+    -- Ignore_Interrupt --
+    ----------------------
+ 
+    procedure Ignore_Interrupt (Interrupt : Interrupt_ID) is
+    begin
+       raise Program_Error;
+    end Ignore_Interrupt;
+ 
+    ------------------------
+    -- Unignore_Interrupt --
+    ------------------------
+ 
+    procedure Unignore_Interrupt (Interrupt : Interrupt_ID) is
+    begin
+       raise Program_Error;
+    end Unignore_Interrupt;
+ 
+    -------------------------------------
+    -- Has_Interrupt_Or_Attach_Handler --
+    -------------------------------------
+ 
+    function Has_Interrupt_Or_Attach_Handler
+      (Object : access Dynamic_Interrupt_Protection) return Boolean
+    is
+       pragma Unreferenced (Object);
+    begin
+       return True;
+    end Has_Interrupt_Or_Attach_Handler;
+ 
+    --------------
+    -- Finalize --
+    --------------
+ 
+    procedure Finalize (Object : in out Static_Interrupt_Protection) is
+    begin
+       --  ??? loop to be executed only when we're not doing library level
+       --  finalization, since in this case all interrupt tasks are gone.
+ 
+       for N in reverse Object.Previous_Handlers'Range loop
+          Attach_Handler
+            (New_Handler => Object.Previous_Handlers (N).Handler,
+             Interrupt   => Object.Previous_Handlers (N).Interrupt,
+             Static      => Object.Previous_Handlers (N).Static,
+             Restoration => True);
+       end loop;
+ 
+       Tasking.Protected_Objects.Entries.Finalize
+         (Tasking.Protected_Objects.Entries.Protection_Entries (Object));
+    end Finalize;
+ 
+    -------------------------------------
+    -- Has_Interrupt_Or_Attach_Handler --
+    -------------------------------------
+ 
+    function Has_Interrupt_Or_Attach_Handler
+      (Object : access Static_Interrupt_Protection) return Boolean
+    is
+       pragma Unreferenced (Object);
+    begin
+       return True;
+    end Has_Interrupt_Or_Attach_Handler;
+ 
+    ----------------------
+    -- Install_Handlers --
+    ----------------------
+ 
+    procedure Install_Handlers
+      (Object       : access Static_Interrupt_Protection;
+       New_Handlers : New_Handler_Array)
+    is
+    begin
+       for N in New_Handlers'Range loop
+ 
+          --  We need a lock around this ???
+ 
+          Object.Previous_Handlers (N).Interrupt := New_Handlers (N).Interrupt;
+          Object.Previous_Handlers (N).Static    := Descriptors
+            (New_Handlers (N).Interrupt).Static;
+ 
+          --  We call Exchange_Handler and not directly Interrupt_Manager.
+          --  Exchange_Handler so we get the Is_Reserved check.
+ 
+          Exchange_Handler
+            (Old_Handler => Object.Previous_Handlers (N).Handler,
+             New_Handler => New_Handlers (N).Handler,
+             Interrupt   => New_Handlers (N).Interrupt,
+             Static      => True);
+       end loop;
+    end Install_Handlers;
+ 
+    ---------------------
+    -- Current_Handler --
+    ---------------------
+ 
+    function Current_Handler
+      (Interrupt : Interrupt_ID) return Parameterless_Handler
+    is
+    begin
+       if Is_Reserved (Interrupt) then
+          raise Program_Error;
+       end if;
+ 
+       if Descriptors (Interrupt).Kind = Protected_Procedure then
+          return Descriptors (Interrupt).H;
+       else
+          return null;
+       end if;
+    end Current_Handler;
+ 
+    --------------------
+    -- Attach_Handler --
+    --------------------
+ 
+    procedure Attach_Handler
+      (New_Handler : Parameterless_Handler;
+       Interrupt   : Interrupt_ID;
+       Static      : Boolean := False) is
+    begin
+       Attach_Handler (New_Handler, Interrupt, Static, False);
+    end Attach_Handler;
+ 
+    procedure Attach_Handler
+      (New_Handler : Parameterless_Handler;
+       Interrupt   : Interrupt_ID;
+       Static      : Boolean;
+       Restoration : Boolean)
+    is
+       New_Task : Server_Task_Access;
+ 
+    begin
+       if Is_Reserved (Interrupt) then
+          raise Program_Error;
+       end if;
+ 
+       if not Restoration and then not Static
+ 
+          --  Tries to overwrite a static Interrupt Handler with a
+          --  dynamic Handler
+ 
+         and then (Descriptors (Interrupt).Static
+ 
+                      --  The new handler is not specified as an
+                      --  Interrupt Handler by a pragma.
+ 
+                      or else not Is_Registered (New_Handler))
+       then
+          Raise_Exception (Program_Error'Identity,
+            "Trying to overwrite a static Interrupt Handler with a " &
+            "dynamic Handler");
+       end if;
+ 
+       if Handlers (Interrupt) = null then
+          New_Task := new Server_Task (Interrupt);
+          Handlers (Interrupt) := To_System (New_Task.all'Identity);
+       end if;
+ 
+       if intr_attach (int (Interrupt),
+         TISR (Signal_Handler'Access)) = FUNC_ERR
+       then
+          raise Program_Error;
+       end if;
+ 
+       if New_Handler = null then
+ 
+          --  The null handler means we are detaching the handler
+ 
+          Descriptors (Interrupt) :=
+            (Kind => Unknown, T => null, E => 0, H => null, Static => False);
+ 
+       else
+          Descriptors (Interrupt).Kind := Protected_Procedure;
+          Descriptors (Interrupt).H := New_Handler;
+          Descriptors (Interrupt).Static := Static;
+       end if;
+    end Attach_Handler;
+ 
+    ----------------------
+    -- Exchange_Handler --
+    ----------------------
+ 
+    procedure Exchange_Handler
+      (Old_Handler : out Parameterless_Handler;
+       New_Handler : Parameterless_Handler;
+       Interrupt   : Interrupt_ID;
+       Static      : Boolean := False)
+    is
+    begin
+       if Is_Reserved (Interrupt) then
+          raise Program_Error;
+       end if;
+ 
+       if Descriptors (Interrupt).Kind = Task_Entry then
+ 
+          --  In case we have an Interrupt Entry already installed.
+          --  raise a program error. (propagate it to the caller).
+ 
+          Raise_Exception (Program_Error'Identity,
+            "An interrupt is already installed");
+       end if;
+ 
+       Old_Handler := Current_Handler (Interrupt);
+       Attach_Handler (New_Handler, Interrupt, Static);
+    end Exchange_Handler;
+ 
+    --------------------
+    -- Detach_Handler --
+    --------------------
+ 
+    procedure Detach_Handler
+      (Interrupt : Interrupt_ID;
+       Static    : Boolean := False)
+    is
+    begin
+       if Is_Reserved (Interrupt) then
+          raise Program_Error;
+       end if;
+ 
+       if Descriptors (Interrupt).Kind = Task_Entry then
+          Raise_Exception (Program_Error'Identity,
+            "Trying to detach an Interrupt Entry");
+       end if;
+ 
+       if not Static and then Descriptors (Interrupt).Static then
+          Raise_Exception (Program_Error'Identity,
+            "Trying to detach a static Interrupt Handler");
+       end if;
+ 
+       Descriptors (Interrupt) :=
+         (Kind => Unknown, T => null, E => 0, H => null, Static => False);
+ 
+       if intr_attach (int (Interrupt), null) = FUNC_ERR then
+          raise Program_Error;
+       end if;
+    end Detach_Handler;
+ 
+    ---------------
+    -- Reference --
+    ---------------
+ 
+    function Reference (Interrupt : Interrupt_ID) return System.Address is
+       Signal : constant System.Address :=
+                  System.Storage_Elements.To_Address
+                    (System.Storage_Elements.Integer_Address (Interrupt));
+ 
+    begin
+       if Is_Reserved (Interrupt) then
+ 
+          --  Only usable Interrupts can be used for binding it to an Entry
+ 
+          raise Program_Error;
+       end if;
+ 
+       return Signal;
+    end Reference;
+ 
+    --------------------------------
+    -- Register_Interrupt_Handler --
+    --------------------------------
+ 
+    procedure Register_Interrupt_Handler (Handler_Addr : System.Address) is
+    begin
+       Registered_Handlers :=
+        new Registered_Handler'(H => Handler_Addr, Next => Registered_Handlers);
+    end Register_Interrupt_Handler;
+ 
+    -------------------
+    -- Is_Registered --
+    -------------------
+ 
+    --  See if the Handler has been "pragma"ed using Interrupt_Handler.
+    --  Always consider a null handler as registered.
+ 
+    function Is_Registered (Handler : Parameterless_Handler) return Boolean is
+       Ptr : R_Link := Registered_Handlers;
+ 
+       type Fat_Ptr is record
+          Object_Addr  : System.Address;
+          Handler_Addr : System.Address;
+       end record;
+ 
+       function To_Fat_Ptr is new Unchecked_Conversion
+         (Parameterless_Handler, Fat_Ptr);
+ 
+       Fat : Fat_Ptr;
+ 
+    begin
+       if Handler = null then
+          return True;
+       end if;
+ 
+       Fat := To_Fat_Ptr (Handler);
+ 
+       while Ptr /= null loop
+ 
+          if Ptr.H = Fat.Handler_Addr then
+             return True;
+          end if;
+ 
+          Ptr := Ptr.Next;
+       end loop;
+ 
+       return False;
+    end Is_Registered;
+ 
+    -----------------------------
+    -- Bind_Interrupt_To_Entry --
+    -----------------------------
+ 
+    procedure Bind_Interrupt_To_Entry
+      (T       : Task_Id;
+       E       : Task_Entry_Index;
+       Int_Ref : System.Address)
+    is
+       Interrupt   : constant Interrupt_ID :=
+                       Interrupt_ID (Storage_Elements.To_Integer (Int_Ref));
+ 
+       New_Task : Server_Task_Access;
+ 
+    begin
+       if Is_Reserved (Interrupt) then
+          raise Program_Error;
+       end if;
+ 
+       if Descriptors (Interrupt).Kind /= Unknown then
+          Raise_Exception (Program_Error'Identity,
+            "A binding for this interrupt is already present");
+       end if;
+ 
+       if Handlers (Interrupt) = null then
+          New_Task := new Server_Task (Interrupt);
+          Handlers (Interrupt) := To_System (New_Task.all'Identity);
+       end if;
+ 
+       if intr_attach (int (Interrupt),
+         TISR (Signal_Handler'Access)) = FUNC_ERR
+       then
+          raise Program_Error;
+       end if;
+ 
+       Descriptors (Interrupt).Kind := Task_Entry;
+       Descriptors (Interrupt).T := T;
+       Descriptors (Interrupt).E := E;
+ 
+       --  Indicate the attachment of Interrupt Entry in ATCB.
+       --  This is need so that when an Interrupt Entry task terminates
+       --  the binding can be cleaned. The call to unbinding must be
+       --  make by the task before it terminates.
+ 
+       T.Interrupt_Entry := True;
+    end Bind_Interrupt_To_Entry;
+ 
+    ------------------------------
+    -- Detach_Interrupt_Entries --
+    ------------------------------
+ 
+    procedure Detach_Interrupt_Entries (T : Task_Id) is
+    begin
+       for J in Interrupt_ID loop
+          if not Is_Reserved (J) then
+             if Descriptors (J).Kind = Task_Entry
+               and then Descriptors (J).T = T
+             then
+                Descriptors (J).Kind := Unknown;
+ 
+                if intr_attach (int (J), null) = FUNC_ERR then
+                   raise Program_Error;
+                end if;
+             end if;
+          end if;
+       end loop;
+ 
+       --  Indicate in ATCB that no Interrupt Entries are attached.
+ 
+       T.Interrupt_Entry := True;
+    end Detach_Interrupt_Entries;
+ 
+    ---------------------
+    -- Block_Interrupt --
+    ---------------------
+ 
+    procedure Block_Interrupt (Interrupt : Interrupt_ID) is
+    begin
+       raise Program_Error;
+    end Block_Interrupt;
+ 
+    -----------------------
+    -- Unblock_Interrupt --
+    -----------------------
+ 
+    procedure Unblock_Interrupt (Interrupt : Interrupt_ID) is
+    begin
+       raise Program_Error;
+    end Unblock_Interrupt;
+ 
+    ----------------
+    -- Is_Blocked --
+    ----------------
+ 
+    function Is_Blocked (Interrupt : Interrupt_ID) return Boolean is
+    begin
+       raise Program_Error;
+       return False;
+    end Is_Blocked;
+ 
+    task body Server_Task is
+       Desc    : Handler_Desc renames Descriptors (Interrupt);
+       Self_Id : constant Task_Id := STPO.Self;
+       Temp    : Parameterless_Handler;
+ 
+    begin
+       Utilities.Make_Independent;
+ 
+       loop
+          while Interrupt_Count (Interrupt) > 0 loop
+             Interrupt_Count (Interrupt) := Interrupt_Count (Interrupt) - 1;
+             begin
+                case Desc.Kind is
+                   when Unknown =>
+                      null;
+                   when Task_Entry =>
+                      Rendezvous.Call_Simple (Desc.T, Desc.E, Null_Address);
+                   when Protected_Procedure =>
+                      Temp := Desc.H;
+                      Temp.all;
+                end case;
+             exception
+                when others => null;
+             end;
+          end loop;
+ 
+          Initialization.Defer_Abort (Self_Id);
+ 
+          if Single_Lock then
+             STPO.Lock_RTS;
+          end if;
+ 
+          STPO.Write_Lock (Self_Id);
+          Self_Id.Common.State := Interrupt_Server_Idle_Sleep;
+          STPO.Sleep (Self_Id, Interrupt_Server_Idle_Sleep);
+          Self_Id.Common.State := Runnable;
+          STPO.Unlock (Self_Id);
+ 
+          if Single_Lock then
+             STPO.Unlock_RTS;
+          end if;
+ 
+          Initialization.Undefer_Abort (Self_Id);
+ 
+          --  Undefer abort here to allow a window for this task
+          --  to be aborted  at the time of system shutdown.
+ 
+       end loop;
+    end Server_Task;
+ 
+ end System.Interrupts;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-interr-vms.adb gcc-4.0.0/gcc/ada/s-interr-vms.adb
*** gcc-3.4.3/gcc/ada/s-interr-vms.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-interr-vms.adb	Tue Jul  6 13:57:30 2004
***************
*** 0 ****
--- 1,1176 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                     S Y S T E M . I N T E R R U P T S                    --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --         Copyright (C) 1992-2004, Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is an OpenVMS/Alpha version of this package.
+ 
+ --  Invariants:
+ 
+ --  Once we associate a Server_Task with an interrupt, the task never
+ --  goes away, and we never remove the association.
+ 
+ --  There is no more than one interrupt per Server_Task and no more than
+ --  one Server_Task per interrupt.
+ 
+ --  Within this package, the lock L is used to protect the various status
+ --  tables. If there is a Server_Task associated with an interrupt, we use
+ --  the per-task lock of the Server_Task instead so that we protect the
+ --  status between Interrupt_Manager and Server_Task. Protection among
+ --  service requests are done using User Request to Interrupt_Manager
+ --  rendezvous.
+ 
+ with Ada.Task_Identification;
+ --  used for Task_Id type
+ 
+ with Ada.Exceptions;
+ --  used for Raise_Exception
+ 
+ with System.Task_Primitives;
+ --  used for RTS_Lock
+ --           Self
+ 
+ with System.Interrupt_Management;
+ --  used for Reserve
+ --           Interrupt_ID
+ --           Interrupt_Mask
+ --           Abort_Task_Interrupt
+ 
+ with System.Interrupt_Management.Operations;
+ --  used for Thread_Block_Interrupt
+ --           Thread_Unblock_Interrupt
+ --           Install_Default_Action
+ --           Install_Ignore_Action
+ --           Copy_Interrupt_Mask
+ --           Set_Interrupt_Mask
+ --           Empty_Interrupt_Mask
+ --           Fill_Interrupt_Mask
+ --           Add_To_Interrupt_Mask
+ --           Delete_From_Interrupt_Mask
+ --           Interrupt_Wait
+ --           Interrupt_Self_Process
+ --           Get_Interrupt_Mask
+ --           Set_Interrupt_Mask
+ --           IS_Member
+ --           Environment_Mask
+ pragma Elaborate_All (System.Interrupt_Management.Operations);
+ 
+ with System.Task_Primitives.Operations;
+ --  used for Write_Lock
+ --           Unlock
+ --           Abort
+ --           Wakeup_Task
+ --           Sleep
+ --           Initialize_Lock
+ 
+ with System.Task_Primitives.Interrupt_Operations;
+ --  used for Set_Interrupt_ID
+ 
+ with System.Storage_Elements;
+ --  used for To_Address
+ --           To_Integer
+ --           Integer_Address
+ 
+ with System.Tasking;
+ --  used for Task_Id
+ --           Task_Entry_Index
+ --           Null_Task
+ --           Self
+ --           Interrupt_Manager_ID
+ 
+ with System.Tasking.Utilities;
+ --  used for Make_Independent
+ 
+ with System.Tasking.Rendezvous;
+ --  used for Call_Simple
+ pragma Elaborate_All (System.Tasking.Rendezvous);
+ 
+ with System.Tasking.Initialization;
+ --  used for Defer_Abort
+ --           Undefer_Abort
+ 
+ with System.Parameters;
+ --  used for Single_Lock
+ 
+ with Unchecked_Conversion;
+ 
+ package body System.Interrupts is
+ 
+    use Tasking;
+    use System.Parameters;
+    use Ada.Exceptions;
+ 
+    package POP renames System.Task_Primitives.Operations;
+    package PIO renames System.Task_Primitives.Interrupt_Operations;
+    package IMNG renames System.Interrupt_Management;
+    package IMOP renames System.Interrupt_Management.Operations;
+ 
+    function To_System is new Unchecked_Conversion
+      (Ada.Task_Identification.Task_Id, Task_Id);
+ 
+    -----------------
+    -- Local Tasks --
+    -----------------
+ 
+    --  WARNING: System.Tasking.Stages performs calls to this task
+    --  with low-level constructs. Do not change this spec without synchro-
+    --  nizing it.
+ 
+    task Interrupt_Manager is
+       entry Detach_Interrupt_Entries (T : Task_Id);
+ 
+       entry Initialize (Mask : IMNG.Interrupt_Mask);
+ 
+       entry Attach_Handler
+         (New_Handler : Parameterless_Handler;
+          Interrupt   : Interrupt_ID;
+          Static      : Boolean;
+          Restoration : Boolean := False);
+ 
+       entry Exchange_Handler
+         (Old_Handler : out Parameterless_Handler;
+          New_Handler : Parameterless_Handler;
+          Interrupt   : Interrupt_ID;
+          Static      : Boolean);
+ 
+       entry Detach_Handler
+         (Interrupt   : Interrupt_ID;
+          Static      : Boolean);
+ 
+       entry Bind_Interrupt_To_Entry
+         (T         : Task_Id;
+          E         : Task_Entry_Index;
+          Interrupt : Interrupt_ID);
+ 
+       entry Block_Interrupt (Interrupt : Interrupt_ID);
+ 
+       entry Unblock_Interrupt (Interrupt : Interrupt_ID);
+ 
+       entry Ignore_Interrupt (Interrupt : Interrupt_ID);
+ 
+       entry Unignore_Interrupt (Interrupt : Interrupt_ID);
+ 
+       pragma Interrupt_Priority (System.Interrupt_Priority'Last);
+    end Interrupt_Manager;
+ 
+    task type Server_Task (Interrupt : Interrupt_ID) is
+       pragma Priority (System.Interrupt_Priority'Last);
+       --  Note: the above pragma Priority is strictly speaking improper
+       --  since it is outside the range of allowed priorities, but the
+       --  compiler treats system units specially and does not apply
+       --  this range checking rule to system units.
+ 
+    end Server_Task;
+ 
+    type Server_Task_Access is access Server_Task;
+ 
+    -------------------------------
+    -- Local Types and Variables --
+    -------------------------------
+ 
+    type Entry_Assoc is record
+       T : Task_Id;
+       E : Task_Entry_Index;
+    end record;
+ 
+    type Handler_Assoc is record
+       H      : Parameterless_Handler;
+       Static : Boolean;   --  Indicates static binding;
+    end record;
+ 
+    User_Handler : array (Interrupt_ID'Range) of Handler_Assoc :=
+                     (others => (null, Static => False));
+    pragma Volatile_Components (User_Handler);
+    --  Holds the protected procedure handler (if any) and its Static
+    --  information  for each interrupt. A handler is a Static one if
+    --  it is specified through the pragma Attach_Handler.
+    --  Attach_Handler. Otherwise, not static)
+ 
+    User_Entry : array (Interrupt_ID'Range) of Entry_Assoc :=
+                   (others => (T => Null_Task, E => Null_Task_Entry));
+    pragma Volatile_Components (User_Entry);
+    --  Holds the task and entry index (if any) for each interrupt
+ 
+    Blocked : constant array (Interrupt_ID'Range) of Boolean :=
+      (others => False);
+ --  ??? pragma Volatile_Components (Blocked);
+    --  True iff the corresponding interrupt is blocked in the process level
+ 
+    Ignored : array (Interrupt_ID'Range) of Boolean := (others => False);
+    pragma Volatile_Components (Ignored);
+    --  True iff the corresponding interrupt is blocked in the process level
+ 
+    Last_Unblocker : constant array (Interrupt_ID'Range) of Task_Id :=
+      (others => Null_Task);
+ --  ??? pragma Volatile_Components (Last_Unblocker);
+    --  Holds the ID of the last Task which Unblocked this Interrupt.
+    --  It contains Null_Task if no tasks have ever requested the
+    --  Unblocking operation or the Interrupt is currently Blocked.
+ 
+    Server_ID : array (Interrupt_ID'Range) of Task_Id :=
+                  (others => Null_Task);
+    pragma Atomic_Components (Server_ID);
+    --  Holds the Task_Id of the Server_Task for each interrupt.
+    --  Task_Id is needed to accomplish locking per Interrupt base. Also
+    --  is needed to decide whether to create a new Server_Task.
+ 
+    --  Type and Head, Tail of the list containing Registered Interrupt
+    --  Handlers. These definitions are used to register the handlers
+    --  specified by the pragma Interrupt_Handler.
+ 
+    type Registered_Handler;
+    type R_Link is access all Registered_Handler;
+ 
+    type Registered_Handler is record
+       H :    System.Address := System.Null_Address;
+       Next : R_Link := null;
+    end record;
+ 
+    Registered_Handler_Head : R_Link := null;
+    Registered_Handler_Tail : R_Link := null;
+ 
+    Access_Hold : Server_Task_Access;
+    --  variable used to allocate Server_Task using "new".
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    function Is_Registered (Handler : Parameterless_Handler) return Boolean;
+    --  See if the Handler has been "pragma"ed using Interrupt_Handler.
+    --  Always consider a null handler as registered.
+ 
+    --------------------------------
+    -- Register_Interrupt_Handler --
+    --------------------------------
+ 
+    procedure Register_Interrupt_Handler (Handler_Addr : System.Address) is
+       New_Node_Ptr : R_Link;
+    begin
+       --  This routine registers the Handler as usable for Dynamic
+       --  Interrupt Handler. Routines attaching and detaching Handler
+       --  dynamically should first consult if the Handler is rgistered.
+       --  A Program Error should be raised if it is not registered.
+ 
+       --  The pragma Interrupt_Handler can only appear in the library
+       --  level PO definition and instantiation. Therefore, we do not need
+       --  to implement Unregistering operation. Neither we need to
+       --  protect the queue structure using a Lock.
+ 
+       pragma Assert (Handler_Addr /= System.Null_Address);
+ 
+       New_Node_Ptr := new Registered_Handler;
+       New_Node_Ptr.H := Handler_Addr;
+ 
+       if Registered_Handler_Head = null then
+          Registered_Handler_Head := New_Node_Ptr;
+          Registered_Handler_Tail := New_Node_Ptr;
+ 
+       else
+          Registered_Handler_Tail.Next := New_Node_Ptr;
+          Registered_Handler_Tail := New_Node_Ptr;
+       end if;
+    end Register_Interrupt_Handler;
+ 
+    -------------------
+    -- Is_Registered --
+    -------------------
+ 
+    function Is_Registered (Handler : Parameterless_Handler) return Boolean is
+       type Fat_Ptr is record
+          Object_Addr  : System.Address;
+          Handler_Addr : System.Address;
+       end record;
+ 
+       function To_Fat_Ptr is new Unchecked_Conversion
+         (Parameterless_Handler, Fat_Ptr);
+ 
+       Ptr : R_Link;
+       Fat : Fat_Ptr;
+ 
+    begin
+       if Handler = null then
+          return True;
+       end if;
+ 
+       Fat := To_Fat_Ptr (Handler);
+ 
+       Ptr := Registered_Handler_Head;
+ 
+       while Ptr /= null loop
+          if Ptr.H = Fat.Handler_Addr then
+             return True;
+          end if;
+ 
+          Ptr := Ptr.Next;
+       end loop;
+ 
+       return False;
+ 
+    end Is_Registered;
+ 
+    -----------------
+    -- Is_Reserved --
+    -----------------
+ 
+    function Is_Reserved (Interrupt : Interrupt_ID) return Boolean is
+    begin
+       return IMNG.Reserve (IMNG.Interrupt_ID (Interrupt));
+    end Is_Reserved;
+ 
+    -----------------------
+    -- Is_Entry_Attached --
+    -----------------------
+ 
+    function Is_Entry_Attached (Interrupt : Interrupt_ID) return Boolean is
+    begin
+       if Is_Reserved (Interrupt) then
+          Raise_Exception (Program_Error'Identity, "Interrupt" &
+            Interrupt_ID'Image (Interrupt) & " is reserved");
+       end if;
+ 
+       return User_Entry (Interrupt).T /= Null_Task;
+    end Is_Entry_Attached;
+ 
+    -------------------------
+    -- Is_Handler_Attached --
+    -------------------------
+ 
+    function Is_Handler_Attached (Interrupt : Interrupt_ID) return Boolean is
+    begin
+       if Is_Reserved (Interrupt) then
+          Raise_Exception (Program_Error'Identity, "Interrupt" &
+            Interrupt_ID'Image (Interrupt) & " is reserved");
+       end if;
+ 
+       return User_Handler (Interrupt).H /= null;
+    end Is_Handler_Attached;
+ 
+    ----------------
+    -- Is_Blocked --
+    ----------------
+ 
+    function Is_Blocked (Interrupt : Interrupt_ID) return Boolean is
+    begin
+       if Is_Reserved (Interrupt) then
+          Raise_Exception (Program_Error'Identity, "Interrupt" &
+            Interrupt_ID'Image (Interrupt) & " is reserved");
+       end if;
+ 
+       return Blocked (Interrupt);
+    end Is_Blocked;
+ 
+    ----------------
+    -- Is_Ignored --
+    ----------------
+ 
+    function Is_Ignored (Interrupt : Interrupt_ID) return Boolean is
+    begin
+       if Is_Reserved (Interrupt) then
+          Raise_Exception (Program_Error'Identity, "Interrupt" &
+            Interrupt_ID'Image (Interrupt) & " is reserved");
+       end if;
+ 
+       return Ignored (Interrupt);
+    end Is_Ignored;
+ 
+    ---------------------
+    -- Current_Handler --
+    ---------------------
+ 
+    function Current_Handler
+      (Interrupt : Interrupt_ID) return Parameterless_Handler
+    is
+    begin
+       if Is_Reserved (Interrupt) then
+          Raise_Exception (Program_Error'Identity, "Interrupt" &
+            Interrupt_ID'Image (Interrupt) & " is reserved");
+       end if;
+ 
+       --  ??? Since Parameterless_Handler is not Atomic, the
+       --  current implementation is wrong. We need a new service in
+       --  Interrupt_Manager to ensure atomicity.
+ 
+       return User_Handler (Interrupt).H;
+    end Current_Handler;
+ 
+    --------------------
+    -- Attach_Handler --
+    --------------------
+ 
+    --  Calling this procedure with New_Handler = null and Static = True
+    --  means we want to detach the current handler regardless of the
+    --  previous handler's binding status (ie. do not care if it is a
+    --  dynamic or static handler).
+ 
+    --  This option is needed so that during the finalization of a PO, we
+    --  can detach handlers attached through pragma Attach_Handler.
+ 
+    procedure Attach_Handler
+      (New_Handler : Parameterless_Handler;
+       Interrupt   : Interrupt_ID;
+       Static      : Boolean := False) is
+    begin
+       if Is_Reserved (Interrupt) then
+          Raise_Exception (Program_Error'Identity, "Interrupt" &
+            Interrupt_ID'Image (Interrupt) & " is reserved");
+       end if;
+ 
+       Interrupt_Manager.Attach_Handler (New_Handler, Interrupt, Static);
+ 
+    end Attach_Handler;
+ 
+    ----------------------
+    -- Exchange_Handler --
+    ----------------------
+ 
+    --  Calling this procedure with New_Handler = null and Static = True
+    --  means we want to detach the current handler regardless of the
+    --  previous handler's binding status (ie. do not care if it is a
+    --  dynamic or static handler).
+ 
+    --  This option is needed so that during the finalization of a PO, we
+    --  can detach handlers attached through pragma Attach_Handler.
+ 
+    procedure Exchange_Handler
+      (Old_Handler : out Parameterless_Handler;
+       New_Handler : Parameterless_Handler;
+       Interrupt   : Interrupt_ID;
+       Static      : Boolean := False) is
+    begin
+       if Is_Reserved (Interrupt) then
+          Raise_Exception (Program_Error'Identity, "Interrupt" &
+            Interrupt_ID'Image (Interrupt) & " is reserved");
+       end if;
+ 
+       Interrupt_Manager.Exchange_Handler
+         (Old_Handler, New_Handler, Interrupt, Static);
+ 
+    end Exchange_Handler;
+ 
+    --------------------
+    -- Detach_Handler --
+    --------------------
+ 
+    --  Calling this procedure with Static = True means we want to Detach the
+    --  current handler regardless of the previous handler's binding status
+    --  (i.e. do not care if it is a dynamic or static handler).
+ 
+    --  This option is needed so that during the finalization of a PO, we can
+    --  detach handlers attached through pragma Attach_Handler.
+ 
+    procedure Detach_Handler
+      (Interrupt : Interrupt_ID;
+       Static    : Boolean := False)
+    is
+    begin
+       if Is_Reserved (Interrupt) then
+          Raise_Exception (Program_Error'Identity, "Interrupt" &
+            Interrupt_ID'Image (Interrupt) & " is reserved");
+       end if;
+ 
+       Interrupt_Manager.Detach_Handler (Interrupt, Static);
+    end Detach_Handler;
+ 
+    ---------------
+    -- Reference --
+    ---------------
+ 
+    function Reference (Interrupt : Interrupt_ID) return System.Address is
+    begin
+       if Is_Reserved (Interrupt) then
+          Raise_Exception (Program_Error'Identity, "Interrupt" &
+            Interrupt_ID'Image (Interrupt) & " is reserved");
+       end if;
+ 
+       return Storage_Elements.To_Address
+         (Storage_Elements.Integer_Address (Interrupt));
+    end Reference;
+ 
+    -----------------------------
+    -- Bind_Interrupt_To_Entry --
+    -----------------------------
+ 
+    --  This procedure raises a Program_Error if it tries to
+    --  bind an interrupt to which an Entry or a Procedure is
+    --  already bound.
+ 
+    procedure Bind_Interrupt_To_Entry
+      (T       : Task_Id;
+       E       : Task_Entry_Index;
+       Int_Ref : System.Address)
+    is
+       Interrupt : constant Interrupt_ID :=
+         Interrupt_ID (Storage_Elements.To_Integer (Int_Ref));
+ 
+    begin
+       if Is_Reserved (Interrupt) then
+          Raise_Exception (Program_Error'Identity, "Interrupt" &
+            Interrupt_ID'Image (Interrupt) & " is reserved");
+       end if;
+ 
+       Interrupt_Manager.Bind_Interrupt_To_Entry (T, E, Interrupt);
+ 
+    end Bind_Interrupt_To_Entry;
+ 
+    ------------------------------
+    -- Detach_Interrupt_Entries --
+    ------------------------------
+ 
+    procedure Detach_Interrupt_Entries (T : Task_Id) is
+    begin
+       Interrupt_Manager.Detach_Interrupt_Entries (T);
+    end Detach_Interrupt_Entries;
+ 
+    ---------------------
+    -- Block_Interrupt --
+    ---------------------
+ 
+    procedure Block_Interrupt (Interrupt : Interrupt_ID) is
+    begin
+       if Is_Reserved (Interrupt) then
+          Raise_Exception (Program_Error'Identity, "Interrupt" &
+            Interrupt_ID'Image (Interrupt) & " is reserved");
+       end if;
+ 
+       Interrupt_Manager.Block_Interrupt (Interrupt);
+    end Block_Interrupt;
+ 
+    -----------------------
+    -- Unblock_Interrupt --
+    -----------------------
+ 
+    procedure Unblock_Interrupt (Interrupt : Interrupt_ID) is
+    begin
+       if Is_Reserved (Interrupt) then
+          Raise_Exception (Program_Error'Identity, "Interrupt" &
+            Interrupt_ID'Image (Interrupt) & " is reserved");
+       end if;
+ 
+       Interrupt_Manager.Unblock_Interrupt (Interrupt);
+    end Unblock_Interrupt;
+ 
+    ------------------
+    -- Unblocked_By --
+    ------------------
+ 
+    function Unblocked_By
+      (Interrupt : Interrupt_ID) return System.Tasking.Task_Id is
+    begin
+       if Is_Reserved (Interrupt) then
+          Raise_Exception (Program_Error'Identity, "Interrupt" &
+            Interrupt_ID'Image (Interrupt) & " is reserved");
+       end if;
+ 
+       return Last_Unblocker (Interrupt);
+    end Unblocked_By;
+ 
+    ----------------------
+    -- Ignore_Interrupt --
+    ----------------------
+ 
+    procedure Ignore_Interrupt (Interrupt : Interrupt_ID) is
+    begin
+       if Is_Reserved (Interrupt) then
+          Raise_Exception (Program_Error'Identity, "Interrupt" &
+            Interrupt_ID'Image (Interrupt) & " is reserved");
+       end if;
+ 
+       Interrupt_Manager.Ignore_Interrupt (Interrupt);
+    end Ignore_Interrupt;
+ 
+    ------------------------
+    -- Unignore_Interrupt --
+    ------------------------
+ 
+    procedure Unignore_Interrupt (Interrupt : Interrupt_ID) is
+    begin
+       if Is_Reserved (Interrupt) then
+          Raise_Exception (Program_Error'Identity, "Interrupt" &
+            Interrupt_ID'Image (Interrupt) & " is reserved");
+       end if;
+ 
+       Interrupt_Manager.Unignore_Interrupt (Interrupt);
+    end Unignore_Interrupt;
+ 
+    -----------------------
+    -- Interrupt_Manager --
+    -----------------------
+ 
+    task body Interrupt_Manager is
+ 
+       --------------------
+       -- Local Routines --
+       --------------------
+ 
+       procedure Unprotected_Exchange_Handler
+         (Old_Handler : out Parameterless_Handler;
+          New_Handler : Parameterless_Handler;
+          Interrupt   : Interrupt_ID;
+          Static      : Boolean;
+          Restoration : Boolean := False);
+ 
+       procedure Unprotected_Detach_Handler
+         (Interrupt : Interrupt_ID;
+          Static    : Boolean);
+ 
+       ----------------------------------
+       -- Unprotected_Exchange_Handler --
+       ----------------------------------
+ 
+       procedure Unprotected_Exchange_Handler
+         (Old_Handler : out Parameterless_Handler;
+          New_Handler : Parameterless_Handler;
+          Interrupt   : Interrupt_ID;
+          Static      : Boolean;
+          Restoration : Boolean := False)
+       is
+       begin
+          if User_Entry (Interrupt).T /= Null_Task then
+             --  In case we have an Interrupt Entry already installed.
+             --  raise a program error. (propagate it to the caller).
+ 
+             Raise_Exception (Program_Error'Identity,
+               "An interrupt is already installed");
+          end if;
+ 
+          --  Note : A null handler with Static = True will
+          --  pass the following check. That is the case when we want to
+          --  Detach a handler regardless of the Static status
+          --  of the current_Handler.
+          --  We don't check anything if Restoration is True, since we
+          --  may be detaching a static handler to restore a dynamic one.
+ 
+          if not Restoration and then not Static
+             --  Tries to overwrite a static Interrupt Handler with a
+             --  dynamic Handler
+ 
+            and then (User_Handler (Interrupt).Static
+ 
+                         --  The new handler is not specified as an
+                         --  Interrupt Handler by a pragma.
+ 
+                         or else not Is_Registered (New_Handler))
+          then
+             Raise_Exception (Program_Error'Identity,
+               "Trying to overwrite a static Interrupt Handler with a " &
+               "dynamic Handler");
+          end if;
+ 
+          --  The interrupt should no longer be ingnored if
+          --  it was ever ignored.
+ 
+          Ignored (Interrupt) := False;
+ 
+          --  Save the old handler
+ 
+          Old_Handler := User_Handler (Interrupt).H;
+ 
+          --  The new handler
+ 
+          User_Handler (Interrupt).H := New_Handler;
+ 
+          if New_Handler = null then
+ 
+             --  The null handler means we are detaching the handler.
+ 
+             User_Handler (Interrupt).Static := False;
+ 
+          else
+             User_Handler (Interrupt).Static := Static;
+          end if;
+ 
+          --  Invoke a corresponding Server_Task if not yet created.
+          --  Place Task_Id info in Server_ID array.
+ 
+          if Server_ID (Interrupt) = Null_Task then
+             Access_Hold := new Server_Task (Interrupt);
+             Server_ID (Interrupt) := To_System (Access_Hold.all'Identity);
+          else
+             POP.Wakeup (Server_ID (Interrupt), Interrupt_Server_Idle_Sleep);
+          end if;
+ 
+       end Unprotected_Exchange_Handler;
+ 
+       --------------------------------
+       -- Unprotected_Detach_Handler --
+       --------------------------------
+ 
+       procedure Unprotected_Detach_Handler
+         (Interrupt   : Interrupt_ID;
+          Static      : Boolean)
+       is
+       begin
+          if User_Entry (Interrupt).T /= Null_Task then
+             --  In case we have an Interrupt Entry installed.
+             --  raise a program error. (propagate it to the caller).
+ 
+             Raise_Exception (Program_Error'Identity,
+               "An interrupt entry is already installed");
+          end if;
+ 
+          --  Note : Static = True will pass the following check. That is the
+          --  case when we want to detach a handler regardless of the static
+          --  status of the current_Handler.
+ 
+          if not Static and then User_Handler (Interrupt).Static then
+             --  Tries to detach a static Interrupt Handler.
+             --  raise a program error.
+ 
+             Raise_Exception (Program_Error'Identity,
+               "Trying to detach a static Interrupt Handler");
+          end if;
+ 
+          --  The interrupt should no longer be ignored if
+          --  it was ever ignored.
+ 
+          Ignored (Interrupt) := False;
+ 
+          --  The new handler
+ 
+          User_Handler (Interrupt).H := null;
+          User_Handler (Interrupt).Static := False;
+          IMOP.Interrupt_Self_Process (IMNG.Interrupt_ID (Interrupt));
+ 
+       end Unprotected_Detach_Handler;
+ 
+    --  Start of processing for Interrupt_Manager
+ 
+    begin
+       --  By making this task independent of master, when the process
+       --  goes away, the Interrupt_Manager will terminate gracefully.
+ 
+       System.Tasking.Utilities.Make_Independent;
+ 
+       --  Environmen task gets its own interrupt mask, saves it,
+       --  and then masks all interrupts except the Keep_Unmasked set.
+ 
+       --  During rendezvous, the Interrupt_Manager receives the old
+       --  interrupt mask of the environment task, and sets its own
+       --  interrupt mask to that value.
+ 
+       --  The environment task will call the entry of Interrupt_Manager some
+       --  during elaboration of the body of this package.
+ 
+       accept Initialize (Mask : IMNG.Interrupt_Mask) do
+          pragma Warnings (Off, Mask);
+          null;
+       end Initialize;
+ 
+       --  Note: All tasks in RTS will have all the Reserve Interrupts
+       --  being masked (except the Interrupt_Manager) and Keep_Unmasked
+       --  unmasked when created.
+ 
+       --  Abort_Task_Interrupt is one of the Interrupt unmasked
+       --  in all tasks. We mask the Interrupt in this particular task
+       --  so that "sigwait" is possible to catch an explicitely sent
+       --  Abort_Task_Interrupt from the Server_Tasks.
+ 
+       --  This sigwaiting is needed so that we make sure a Server_Task is
+       --  out of its own sigwait state. This extra synchronization is
+       --  necessary to prevent following senarios.
+ 
+       --   1) Interrupt_Manager sends an Abort_Task_Interrupt to the
+       --      Server_Task then changes its own interrupt mask (OS level).
+       --      If an interrupt (corresponding to the Server_Task) arrives
+       --      in the nean time we have the Interrupt_Manager umnasked and
+       --      the Server_Task waiting on sigwait.
+ 
+       --   2) For unbinding handler, we install a default action in the
+       --      Interrupt_Manager. POSIX.1c states that the result of using
+       --      "sigwait" and "sigaction" simaltaneously on the same interrupt
+       --      is undefined. Therefore, we need to be informed from the
+       --      Server_Task of the fact that the Server_Task is out of its
+       --      sigwait stage.
+ 
+       loop
+          --  A block is needed to absorb Program_Error exception
+ 
+          declare
+             Old_Handler : Parameterless_Handler;
+          begin
+             select
+ 
+             accept Attach_Handler
+                (New_Handler : Parameterless_Handler;
+                 Interrupt   : Interrupt_ID;
+                 Static      : Boolean;
+                 Restoration : Boolean := False)
+             do
+                Unprotected_Exchange_Handler
+                  (Old_Handler, New_Handler, Interrupt, Static, Restoration);
+             end Attach_Handler;
+ 
+             or accept Exchange_Handler
+                (Old_Handler : out Parameterless_Handler;
+                 New_Handler : Parameterless_Handler;
+                 Interrupt   : Interrupt_ID;
+                 Static      : Boolean)
+             do
+                Unprotected_Exchange_Handler
+                  (Old_Handler, New_Handler, Interrupt, Static);
+             end Exchange_Handler;
+ 
+             or accept Detach_Handler
+                (Interrupt   : Interrupt_ID;
+                 Static      : Boolean)
+             do
+                Unprotected_Detach_Handler (Interrupt, Static);
+             end Detach_Handler;
+ 
+             or accept Bind_Interrupt_To_Entry
+               (T       : Task_Id;
+                E       : Task_Entry_Index;
+                Interrupt : Interrupt_ID)
+             do
+                --  if there is a binding already (either a procedure or an
+                --  entry), raise Program_Error (propagate it to the caller).
+ 
+                if User_Handler (Interrupt).H /= null
+                  or else User_Entry (Interrupt).T /= Null_Task
+                then
+                   Raise_Exception (Program_Error'Identity,
+                     "A binding for this interrupt is already present");
+                end if;
+ 
+                --  The interrupt should no longer be ingnored if
+                --  it was ever ignored.
+ 
+                Ignored (Interrupt) := False;
+                User_Entry (Interrupt) := Entry_Assoc'(T => T, E => E);
+ 
+                --  Indicate the attachment of Interrupt Entry in ATCB.
+                --  This is need so that when an Interrupt Entry task
+                --  terminates the binding can be cleaned.
+                --  The call to unbinding must be
+                --  make by the task before it terminates.
+ 
+                T.Interrupt_Entry := True;
+ 
+                --  Invoke a corresponding Server_Task if not yet created.
+                --  Place Task_Id info in Server_ID array.
+ 
+                if Server_ID (Interrupt) = Null_Task then
+ 
+                   Access_Hold := new Server_Task (Interrupt);
+                   Server_ID (Interrupt) :=
+                     To_System (Access_Hold.all'Identity);
+                else
+                   POP.Wakeup (Server_ID (Interrupt),
+                               Interrupt_Server_Idle_Sleep);
+                end if;
+             end Bind_Interrupt_To_Entry;
+ 
+             or accept Detach_Interrupt_Entries (T : Task_Id)
+             do
+                for J in Interrupt_ID'Range loop
+                   if not Is_Reserved (J) then
+                      if User_Entry (J).T = T then
+ 
+                         --  The interrupt should no longer be ignored if
+                         --  it was ever ignored.
+ 
+                         Ignored (J) := False;
+                         User_Entry (J) :=
+                           Entry_Assoc'(T => Null_Task, E => Null_Task_Entry);
+                         IMOP.Interrupt_Self_Process (IMNG.Interrupt_ID (J));
+                      end if;
+                   end if;
+                end loop;
+ 
+                --  Indicate in ATCB that no Interrupt Entries are attached.
+ 
+                T.Interrupt_Entry := False;
+             end Detach_Interrupt_Entries;
+ 
+             or accept Block_Interrupt (Interrupt : Interrupt_ID) do
+                pragma Warnings (Off, Interrupt);
+                raise Program_Error;
+             end Block_Interrupt;
+ 
+             or accept Unblock_Interrupt (Interrupt : Interrupt_ID) do
+                pragma Warnings (Off, Interrupt);
+                raise Program_Error;
+             end Unblock_Interrupt;
+ 
+             or accept Ignore_Interrupt (Interrupt : Interrupt_ID) do
+                pragma Warnings (Off, Interrupt);
+                raise Program_Error;
+             end Ignore_Interrupt;
+ 
+             or accept Unignore_Interrupt (Interrupt : Interrupt_ID) do
+                pragma Warnings (Off, Interrupt);
+                raise Program_Error;
+             end Unignore_Interrupt;
+ 
+             end select;
+ 
+          exception
+             --  If there is a program error we just want to propagate it
+             --  to the caller and do not want to stop this task.
+ 
+             when Program_Error =>
+                null;
+ 
+             when others =>
+                pragma Assert (False);
+                null;
+          end;
+       end loop;
+    end Interrupt_Manager;
+ 
+    -----------------
+    -- Server_Task --
+    -----------------
+ 
+    task body Server_Task is
+       Self_ID         : constant Task_Id := Self;
+       Tmp_Handler     : Parameterless_Handler;
+       Tmp_ID          : Task_Id;
+       Tmp_Entry_Index : Task_Entry_Index;
+       Intwait_Mask    : aliased IMNG.Interrupt_Mask;
+ 
+    begin
+       --  By making this task independent of master, when the process
+       --  goes away, the Server_Task will terminate gracefully.
+ 
+       System.Tasking.Utilities.Make_Independent;
+ 
+       --  Install default action in system level.
+ 
+       IMOP.Install_Default_Action (IMNG.Interrupt_ID (Interrupt));
+ 
+       --  Set up the mask (also clears the event flag)
+ 
+       IMOP.Empty_Interrupt_Mask (Intwait_Mask'Access);
+       IMOP.Add_To_Interrupt_Mask
+         (Intwait_Mask'Access, IMNG.Interrupt_ID (Interrupt));
+ 
+       --  Remember the Interrupt_ID for Abort_Task.
+ 
+       PIO.Set_Interrupt_ID (IMNG.Interrupt_ID (Interrupt), Self_ID);
+ 
+       --  Note: All tasks in RTS will have all the Reserve Interrupts
+       --  being masked (except the Interrupt_Manager) and Keep_Unmasked
+       --  unmasked when created.
+ 
+       loop
+          System.Tasking.Initialization.Defer_Abort (Self_ID);
+ 
+          --  A Handler or an Entry is installed. At this point all tasks
+          --  mask for the Interrupt is masked. Catch the Interrupt using
+          --  sigwait.
+ 
+          --  This task may wake up from sigwait by receiving an interrupt
+          --  (Abort_Task_Interrupt) from the Interrupt_Manager for unbinding
+          --  a Procedure Handler or an Entry. Or it could be a wake up
+          --  from status change (Unblocked -> Blocked). If that is not
+          --  the case, we should exceute the attached Procedure or Entry.
+ 
+          if Single_Lock then
+             POP.Lock_RTS;
+          end if;
+ 
+          POP.Write_Lock (Self_ID);
+ 
+          if User_Handler (Interrupt).H = null
+            and then User_Entry (Interrupt).T = Null_Task
+          then
+             --  No Interrupt binding. If there is an interrupt,
+             --  Interrupt_Manager will take default action.
+ 
+             Self_ID.Common.State := Interrupt_Server_Idle_Sleep;
+             POP.Sleep (Self_ID, Interrupt_Server_Idle_Sleep);
+             Self_ID.Common.State := Runnable;
+ 
+          else
+             Self_ID.Common.State := Interrupt_Server_Blocked_On_Event_Flag;
+             Self_ID.Common.State := Runnable;
+ 
+             if not (Self_ID.Deferral_Level = 0
+                     and then Self_ID.Pending_ATC_Level
+                              < Self_ID.ATC_Nesting_Level)
+             then
+                if User_Handler (Interrupt).H /= null then
+                   Tmp_Handler := User_Handler (Interrupt).H;
+ 
+                   --  RTS calls should not be made with self being locked.
+ 
+                   POP.Unlock (Self_ID);
+ 
+                   if Single_Lock then
+                      POP.Unlock_RTS;
+                   end if;
+ 
+                   Tmp_Handler.all;
+ 
+                   if Single_Lock then
+                      POP.Lock_RTS;
+                   end if;
+ 
+                   POP.Write_Lock (Self_ID);
+ 
+                elsif User_Entry (Interrupt).T /= Null_Task then
+                   Tmp_ID := User_Entry (Interrupt).T;
+                   Tmp_Entry_Index := User_Entry (Interrupt).E;
+ 
+                   --  RTS calls should not be made with self being locked.
+ 
+                   POP.Unlock (Self_ID);
+ 
+                   if Single_Lock then
+                      POP.Unlock_RTS;
+                   end if;
+ 
+                   System.Tasking.Rendezvous.Call_Simple
+                     (Tmp_ID, Tmp_Entry_Index, System.Null_Address);
+ 
+                   if Single_Lock then
+                      POP.Lock_RTS;
+                   end if;
+ 
+                   POP.Write_Lock (Self_ID);
+                end if;
+             end if;
+          end if;
+ 
+          POP.Unlock (Self_ID);
+ 
+          if Single_Lock then
+             POP.Unlock_RTS;
+          end if;
+ 
+          System.Tasking.Initialization.Undefer_Abort (Self_ID);
+ 
+          --  Undefer abort here to allow a window for this task
+          --  to be aborted  at the time of system shutdown.
+       end loop;
+    end Server_Task;
+ 
+    -------------------------------------
+    -- Has_Interrupt_Or_Attach_Handler --
+    -------------------------------------
+ 
+    function Has_Interrupt_Or_Attach_Handler
+      (Object : access Dynamic_Interrupt_Protection) return Boolean
+    is
+       pragma Warnings (Off, Object);
+ 
+    begin
+       return True;
+    end Has_Interrupt_Or_Attach_Handler;
+ 
+    --------------
+    -- Finalize --
+    --------------
+ 
+    procedure Finalize (Object : in out Static_Interrupt_Protection) is
+    begin
+       --  ??? loop to be executed only when we're not doing library level
+       --  finalization, since in this case all interrupt tasks are gone.
+ 
+       if not Interrupt_Manager'Terminated then
+          for N in reverse Object.Previous_Handlers'Range loop
+             Interrupt_Manager.Attach_Handler
+               (New_Handler => Object.Previous_Handlers (N).Handler,
+                Interrupt   => Object.Previous_Handlers (N).Interrupt,
+                Static      => Object.Previous_Handlers (N).Static,
+                Restoration => True);
+          end loop;
+       end if;
+ 
+       Tasking.Protected_Objects.Entries.Finalize
+         (Tasking.Protected_Objects.Entries.Protection_Entries (Object));
+    end Finalize;
+ 
+    -------------------------------------
+    -- Has_Interrupt_Or_Attach_Handler --
+    -------------------------------------
+ 
+    function Has_Interrupt_Or_Attach_Handler
+      (Object : access Static_Interrupt_Protection) return Boolean
+    is
+       pragma Warnings (Off, Object);
+    begin
+       return True;
+    end Has_Interrupt_Or_Attach_Handler;
+ 
+    ----------------------
+    -- Install_Handlers --
+    ----------------------
+ 
+    procedure Install_Handlers
+      (Object       : access Static_Interrupt_Protection;
+       New_Handlers : New_Handler_Array)
+    is
+    begin
+       for N in New_Handlers'Range loop
+ 
+          --  We need a lock around this ???
+ 
+          Object.Previous_Handlers (N).Interrupt := New_Handlers (N).Interrupt;
+          Object.Previous_Handlers (N).Static    := User_Handler
+            (New_Handlers (N).Interrupt).Static;
+ 
+          --  We call Exchange_Handler and not directly Interrupt_Manager.
+          --  Exchange_Handler so we get the Is_Reserved check.
+ 
+          Exchange_Handler
+            (Old_Handler => Object.Previous_Handlers (N).Handler,
+             New_Handler => New_Handlers (N).Handler,
+             Interrupt   => New_Handlers (N).Interrupt,
+             Static      => True);
+       end loop;
+    end Install_Handlers;
+ 
+ --  Elaboration code for package System.Interrupts
+ begin
+ 
+    --  Get Interrupt_Manager's ID so that Abort_Interrupt can be sent.
+ 
+    Interrupt_Manager_ID := To_System (Interrupt_Manager'Identity);
+ 
+    --  During the elaboration of this package body we want RTS to
+    --  inherit the interrupt mask from the Environment Task.
+ 
+    --  The Environment Task should have gotten its mask from
+    --  the enclosing process during the RTS start up. (See
+    --  in s-inmaop.adb). Pass the Interrupt_Mask of the Environment
+    --  task to the Interrupt_Manager.
+ 
+    --  Note : At this point we know that all tasks (including
+    --  RTS internal servers) are masked for non-reserved signals
+    --  (see s-taprop.adb). Only the Interrupt_Manager will have
+    --  masks set up differently inheriting the original Environment
+    --  Task's mask.
+ 
+    Interrupt_Manager.Initialize (IMOP.Environment_Mask);
+ end System.Interrupts;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-interr-vxworks.adb gcc-4.0.0/gcc/ada/s-interr-vxworks.adb
*** gcc-3.4.3/gcc/ada/s-interr-vxworks.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-interr-vxworks.adb	Mon May 17 13:20:42 2004
***************
*** 0 ****
--- 1,1146 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                     S Y S T E M . I N T E R R U P T S                    --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --         Copyright (C) 1992-2004, Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  Invariants:
+ 
+ --  All user-handleable signals are masked at all times in all
+ --  tasks/threads except possibly for the Interrupt_Manager task.
+ 
+ --  When a user task wants to have the effect of masking/unmasking an
+ --  signal, it must call Block_Interrupt/Unblock_Interrupt, which
+ --  will have the effect of unmasking/masking the signal in the
+ --  Interrupt_Manager task.  These comments do not apply to vectored
+ --  hardware interrupts, which may be masked or unmasked using routined
+ --  interfaced to the relevant VxWorks system calls.
+ 
+ --  Once we associate a Signal_Server_Task with an signal, the task never
+ --  goes away, and we never remove the association. On the other hand, it
+ --  is more convenient to terminate an associated Interrupt_Server_Task
+ --  for a vectored hardware interrupt (since we use a binary semaphore
+ --  for synchronization with the umbrella handler).
+ 
+ --  There is no more than one signal per Signal_Server_Task and no more than
+ --  one Signal_Server_Task per signal.  The same relation holds for hardware
+ --  interrupts and Interrupt_Server_Task's at any given time.  That is,
+ --  only one non-terminated Interrupt_Server_Task exists for a give
+ --  interrupt at any time.
+ 
+ --  Within this package, the lock L is used to protect the various status
+ --  tables. If there is a Server_Task associated with a signal or interrupt,
+ --  we use the per-task lock of the Server_Task instead so that we protect the
+ --  status between Interrupt_Manager and Server_Task. Protection among
+ --  service requests are ensured via user calls to the Interrupt_Manager
+ --  entries.
+ 
+ --  This is the VxWorks version of this package, supporting vectored hardware
+ --  interrupts.
+ 
+ with Unchecked_Conversion;
+ 
+ with System.OS_Interface; use System.OS_Interface;
+ 
+ with Interfaces.VxWorks;
+ 
+ with Ada.Task_Identification;
+ --  used for Task_Id type
+ 
+ with Ada.Exceptions;
+ --  used for Raise_Exception
+ 
+ with System.Interrupt_Management;
+ --  used for Reserve
+ 
+ with System.Task_Primitives.Operations;
+ --  used for Write_Lock
+ --           Unlock
+ --           Abort
+ --           Wakeup_Task
+ --           Sleep
+ --           Initialize_Lock
+ 
+ with System.Storage_Elements;
+ --  used for To_Address
+ --           To_Integer
+ --           Integer_Address
+ 
+ with System.Tasking;
+ --  used for Task_Id
+ --           Task_Entry_Index
+ --           Null_Task
+ --           Self
+ --           Interrupt_Manager_ID
+ 
+ with System.Tasking.Utilities;
+ --  used for Make_Independent
+ 
+ with System.Tasking.Rendezvous;
+ --  used for Call_Simple
+ pragma Elaborate_All (System.Tasking.Rendezvous);
+ 
+ package body System.Interrupts is
+ 
+    use Tasking;
+    use Ada.Exceptions;
+ 
+    package POP renames System.Task_Primitives.Operations;
+ 
+    function To_Ada is new Unchecked_Conversion
+      (System.Tasking.Task_Id, Ada.Task_Identification.Task_Id);
+ 
+    function To_System is new Unchecked_Conversion
+      (Ada.Task_Identification.Task_Id, Task_Id);
+ 
+    -----------------
+    -- Local Tasks --
+    -----------------
+ 
+    --  WARNING: System.Tasking.Stages performs calls to this task
+    --  with low-level constructs. Do not change this spec without synchro-
+    --  nizing it.
+ 
+    task Interrupt_Manager is
+       entry Detach_Interrupt_Entries (T : Task_Id);
+ 
+       entry Attach_Handler
+         (New_Handler : Parameterless_Handler;
+          Interrupt   : Interrupt_ID;
+          Static      : Boolean;
+          Restoration : Boolean := False);
+ 
+       entry Exchange_Handler
+         (Old_Handler : out Parameterless_Handler;
+          New_Handler : Parameterless_Handler;
+          Interrupt   : Interrupt_ID;
+          Static      : Boolean);
+ 
+       entry Detach_Handler
+         (Interrupt : Interrupt_ID;
+          Static    : Boolean);
+ 
+       entry Bind_Interrupt_To_Entry
+         (T         : Task_Id;
+          E         : Task_Entry_Index;
+          Interrupt : Interrupt_ID);
+ 
+       pragma Interrupt_Priority (System.Interrupt_Priority'First);
+    end Interrupt_Manager;
+ 
+    task type Interrupt_Server_Task
+      (Interrupt : Interrupt_ID; Int_Sema : SEM_ID) is
+       --  Server task for vectored hardware interrupt handling
+       pragma Interrupt_Priority (System.Interrupt_Priority'First + 2);
+    end Interrupt_Server_Task;
+ 
+    type Interrupt_Task_Access is access Interrupt_Server_Task;
+ 
+    -------------------------------
+    -- Local Types and Variables --
+    -------------------------------
+ 
+    type Entry_Assoc is record
+       T : Task_Id;
+       E : Task_Entry_Index;
+    end record;
+ 
+    type Handler_Assoc is record
+       H      : Parameterless_Handler;
+       Static : Boolean;   --  Indicates static binding;
+    end record;
+ 
+    User_Handler : array (Interrupt_ID) of Handler_Assoc :=
+      (others => (null, Static => False));
+    pragma Volatile_Components (User_Handler);
+    --  Holds the protected procedure handler (if any) and its Static
+    --  information  for each interrupt or signal. A handler is static
+    --  iff it is specified through the pragma Attach_Handler.
+ 
+    User_Entry : array (Interrupt_ID) of Entry_Assoc :=
+      (others => (T => Null_Task, E => Null_Task_Entry));
+    pragma Volatile_Components (User_Entry);
+    --  Holds the task and entry index (if any) for each interrupt / signal
+ 
+    --  Type and Head, Tail of the list containing Registered Interrupt
+    --  Handlers. These definitions are used to register the handlers
+    --  specified by the pragma Interrupt_Handler.
+ 
+    type Registered_Handler;
+    type R_Link is access all Registered_Handler;
+ 
+    type Registered_Handler is record
+       H    : System.Address := System.Null_Address;
+       Next : R_Link := null;
+    end record;
+ 
+    Registered_Handler_Head : R_Link := null;
+    Registered_Handler_Tail : R_Link := null;
+ 
+    Server_ID : array (Interrupt_ID) of System.Tasking.Task_Id :=
+      (others => System.Tasking.Null_Task);
+    pragma Atomic_Components (Server_ID);
+    --  Holds the Task_Id of the Server_Task for each interrupt / signal.
+    --  Task_Id is needed to accomplish locking per interrupt base. Also
+    --  is needed to determine whether to create a new Server_Task.
+ 
+    Semaphore_ID_Map : array
+      (Interrupt_ID range 0 .. System.OS_Interface.Max_HW_Interrupt)
+       of SEM_ID := (others => 0);
+    --  Array of binary semaphores associated with vectored interrupts
+    --  Note that the last bound should be Max_HW_Interrupt, but this will raise
+    --  Storage_Error if Num_HW_Interrupts is null, so use an extra 4 bytes
+    --  instead.
+ 
+    Interrupt_Access_Hold : Interrupt_Task_Access;
+    --  Variable for allocating an Interrupt_Server_Task
+ 
+    Default_Handler : array (HW_Interrupt) of Interfaces.VxWorks.VOIDFUNCPTR;
+    --  Vectored interrupt handlers installed prior to program startup.
+    --  These are saved only when the umbrella handler is installed for
+    --  a given interrupt number.
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    procedure Check_Reserved_Interrupt (Interrupt : Interrupt_ID);
+    --  Check if Id is a reserved interrupt, and if so raise Program_Error
+    --  with an appropriate message, otherwise return.
+ 
+    procedure Finalize_Interrupt_Servers;
+    --  Unbind the handlers for hardware interrupt server tasks at program
+    --  termination.
+ 
+    function Is_Registered (Handler : Parameterless_Handler) return Boolean;
+    --  See if Handler has been "pragma"ed using Interrupt_Handler.
+    --  Always consider a null handler as registered.
+ 
+    procedure Notify_Interrupt (Param : System.Address);
+    --  Umbrella handler for vectored interrupts (not signals)
+ 
+    procedure Install_Default_Action (Interrupt : HW_Interrupt);
+    --  Restore a handler that was in place prior to program execution
+ 
+    procedure Install_Umbrella_Handler
+      (Interrupt : HW_Interrupt;
+       Handler   : Interfaces.VxWorks.VOIDFUNCPTR);
+    --  Install the runtime umbrella handler for a vectored hardware
+    --  interrupt
+ 
+    procedure Unimplemented (Feature : String);
+    pragma No_Return (Unimplemented);
+    --  Used to mark a call to an unimplemented function. Raises Program_Error
+    --  with an appropriate message noting that Feature is unimplemented.
+ 
+    --------------------
+    -- Attach_Handler --
+    --------------------
+ 
+    --  Calling this procedure with New_Handler = null and Static = True
+    --  means we want to detach the current handler regardless of the
+    --  previous handler's binding status (ie. do not care if it is a
+    --  dynamic or static handler).
+ 
+    --  This option is needed so that during the finalization of a PO, we
+    --  can detach handlers attached through pragma Attach_Handler.
+ 
+    procedure Attach_Handler
+      (New_Handler : Parameterless_Handler;
+       Interrupt   : Interrupt_ID;
+       Static      : Boolean := False) is
+    begin
+       Check_Reserved_Interrupt (Interrupt);
+       Interrupt_Manager.Attach_Handler (New_Handler, Interrupt, Static);
+    end Attach_Handler;
+ 
+    -----------------------------
+    -- Bind_Interrupt_To_Entry --
+    -----------------------------
+ 
+    --  This procedure raises a Program_Error if it tries to
+    --  bind an interrupt to which an Entry or a Procedure is
+    --  already bound.
+ 
+    procedure Bind_Interrupt_To_Entry
+      (T       : Task_Id;
+       E       : Task_Entry_Index;
+       Int_Ref : System.Address)
+    is
+       Interrupt : constant Interrupt_ID :=
+         Interrupt_ID (Storage_Elements.To_Integer (Int_Ref));
+ 
+    begin
+       Check_Reserved_Interrupt (Interrupt);
+       Interrupt_Manager.Bind_Interrupt_To_Entry (T, E, Interrupt);
+    end Bind_Interrupt_To_Entry;
+ 
+    ---------------------
+    -- Block_Interrupt --
+    ---------------------
+ 
+    procedure Block_Interrupt (Interrupt : Interrupt_ID) is
+    begin
+       Unimplemented ("Block_Interrupt");
+    end Block_Interrupt;
+ 
+    ------------------------------
+    -- Check_Reserved_Interrupt --
+    ------------------------------
+ 
+    procedure Check_Reserved_Interrupt (Interrupt : Interrupt_ID) is
+    begin
+       if Is_Reserved (Interrupt) then
+          Raise_Exception
+            (Program_Error'Identity,
+             "Interrupt" & Interrupt_ID'Image (Interrupt) & " is reserved");
+       else
+          return;
+       end if;
+    end Check_Reserved_Interrupt;
+ 
+    ---------------------
+    -- Current_Handler --
+    ---------------------
+ 
+    function Current_Handler
+      (Interrupt : Interrupt_ID) return Parameterless_Handler is
+    begin
+       Check_Reserved_Interrupt (Interrupt);
+ 
+       --  ??? Since Parameterless_Handler is not Atomic, the
+       --  current implementation is wrong. We need a new service in
+       --  Interrupt_Manager to ensure atomicity.
+ 
+       return User_Handler (Interrupt).H;
+    end Current_Handler;
+ 
+    --------------------
+    -- Detach_Handler --
+    --------------------
+ 
+    --  Calling this procedure with Static = True means we want to Detach the
+    --  current handler regardless of the previous handler's binding status
+    --  (i.e. do not care if it is a dynamic or static handler).
+ 
+    --  This option is needed so that during the finalization of a PO, we can
+    --  detach handlers attached through pragma Attach_Handler.
+ 
+    procedure Detach_Handler
+      (Interrupt : Interrupt_ID;
+       Static    : Boolean := False) is
+    begin
+       Check_Reserved_Interrupt (Interrupt);
+       Interrupt_Manager.Detach_Handler (Interrupt, Static);
+    end Detach_Handler;
+ 
+    ------------------------------
+    -- Detach_Interrupt_Entries --
+    ------------------------------
+ 
+    procedure Detach_Interrupt_Entries (T : Task_Id) is
+    begin
+       Interrupt_Manager.Detach_Interrupt_Entries (T);
+    end Detach_Interrupt_Entries;
+ 
+    ----------------------
+    -- Exchange_Handler --
+    ----------------------
+ 
+    --  Calling this procedure with New_Handler = null and Static = True
+    --  means we want to detach the current handler regardless of the
+    --  previous handler's binding status (ie. do not care if it is a
+    --  dynamic or static handler).
+ 
+    --  This option is needed so that during the finalization of a PO, we
+    --  can detach handlers attached through pragma Attach_Handler.
+ 
+    procedure Exchange_Handler
+      (Old_Handler : out Parameterless_Handler;
+       New_Handler : Parameterless_Handler;
+       Interrupt   : Interrupt_ID;
+       Static      : Boolean := False) is
+    begin
+       Check_Reserved_Interrupt (Interrupt);
+       Interrupt_Manager.Exchange_Handler
+         (Old_Handler, New_Handler, Interrupt, Static);
+    end Exchange_Handler;
+ 
+    --------------
+    -- Finalize --
+    --------------
+ 
+    procedure Finalize (Object : in out Static_Interrupt_Protection) is
+    begin
+       --  ??? loop to be executed only when we're not doing library level
+       --  finalization, since in this case all interrupt / signal tasks are
+       --  gone.
+ 
+       if not Interrupt_Manager'Terminated then
+          for N in reverse Object.Previous_Handlers'Range loop
+             Interrupt_Manager.Attach_Handler
+               (New_Handler => Object.Previous_Handlers (N).Handler,
+                Interrupt   => Object.Previous_Handlers (N).Interrupt,
+                Static      => Object.Previous_Handlers (N).Static,
+                Restoration => True);
+          end loop;
+       end if;
+ 
+       Tasking.Protected_Objects.Entries.Finalize
+         (Tasking.Protected_Objects.Entries.Protection_Entries (Object));
+    end Finalize;
+ 
+    --------------------------------
+    -- Finalize_Interrupt_Servers --
+    --------------------------------
+ 
+    --  Restore default handlers for interrupt servers.
+ 
+    --  This is called by the Interrupt_Manager task when it receives the abort
+    --  signal during program finalization.
+ 
+    procedure Finalize_Interrupt_Servers is
+       HW_Interrupts : constant Boolean := HW_Interrupt'Last >= 0;
+ 
+    begin
+       if HW_Interrupts then
+          for Int in HW_Interrupt loop
+             if Server_ID (Interrupt_ID (Int)) /= null
+               and then
+                 not Ada.Task_Identification.Is_Terminated
+                  (To_Ada (Server_ID (Interrupt_ID (Int))))
+             then
+                Interrupt_Manager.Attach_Handler
+                  (New_Handler => null,
+                   Interrupt => Interrupt_ID (Int),
+                   Static => True,
+                   Restoration => True);
+             end if;
+          end loop;
+       end if;
+    end Finalize_Interrupt_Servers;
+ 
+    -------------------------------------
+    -- Has_Interrupt_Or_Attach_Handler --
+    -------------------------------------
+ 
+    function Has_Interrupt_Or_Attach_Handler
+      (Object : access Dynamic_Interrupt_Protection)
+       return   Boolean
+    is
+       pragma Unreferenced (Object);
+ 
+    begin
+       return True;
+    end Has_Interrupt_Or_Attach_Handler;
+ 
+    function Has_Interrupt_Or_Attach_Handler
+      (Object : access Static_Interrupt_Protection)
+       return   Boolean
+    is
+       pragma Unreferenced (Object);
+ 
+    begin
+       return True;
+    end Has_Interrupt_Or_Attach_Handler;
+ 
+    ----------------------
+    -- Ignore_Interrupt --
+    ----------------------
+ 
+    procedure Ignore_Interrupt (Interrupt : Interrupt_ID) is
+    begin
+       Unimplemented ("Ignore_Interrupt");
+    end Ignore_Interrupt;
+ 
+    ----------------------------
+    -- Install_Default_Action --
+    ----------------------------
+ 
+    procedure Install_Default_Action (Interrupt : HW_Interrupt) is
+    begin
+       --  Restore original interrupt handler
+ 
+       Interfaces.VxWorks.intVecSet
+         (Interfaces.VxWorks.INUM_TO_IVEC (Integer (Interrupt)),
+          Default_Handler (Interrupt));
+       Default_Handler (Interrupt) := null;
+    end Install_Default_Action;
+ 
+    ----------------------
+    -- Install_Handlers --
+    ----------------------
+ 
+    procedure Install_Handlers
+      (Object       : access Static_Interrupt_Protection;
+       New_Handlers : New_Handler_Array) is
+    begin
+       for N in New_Handlers'Range loop
+          --  We need a lock around this ???
+ 
+          Object.Previous_Handlers (N).Interrupt := New_Handlers (N).Interrupt;
+          Object.Previous_Handlers (N).Static    := User_Handler
+            (New_Handlers (N).Interrupt).Static;
+ 
+          --  We call Exchange_Handler and not directly Interrupt_Manager.
+          --  Exchange_Handler so we get the Is_Reserved check.
+ 
+          Exchange_Handler
+            (Old_Handler => Object.Previous_Handlers (N).Handler,
+             New_Handler => New_Handlers (N).Handler,
+             Interrupt   => New_Handlers (N).Interrupt,
+             Static      => True);
+       end loop;
+    end Install_Handlers;
+ 
+    ------------------------------
+    -- Install_Umbrella_Handler --
+    ------------------------------
+ 
+    procedure Install_Umbrella_Handler
+      (Interrupt : HW_Interrupt;
+       Handler   : Interfaces.VxWorks.VOIDFUNCPTR)
+    is
+       use Interfaces.VxWorks;
+ 
+       Vec : constant Interrupt_Vector :=
+               INUM_TO_IVEC (Interfaces.VxWorks.int (Interrupt));
+ 
+       Old_Handler : constant VOIDFUNCPTR :=
+                       intVecGet
+                         (INUM_TO_IVEC (Interfaces.VxWorks.int (Interrupt)));
+ 
+       Stat : Interfaces.VxWorks.STATUS;
+       pragma Unreferenced (Stat);
+       --  ??? shouldn't we test Stat at least in a pragma Assert?
+ 
+    begin
+       --  Only install umbrella handler when no Ada handler has already been
+       --  installed. Note that the interrupt number is passed as a parameter
+       --  when an interrupt occurs, so the umbrella handler has a different
+       --  wrapper generated by intConnect for each interrupt number.
+ 
+       if Default_Handler (Interrupt) = null then
+          Stat :=
+            intConnect (Vec, Handler, System.Address (Interrupt));
+          Default_Handler (Interrupt) := Old_Handler;
+       end if;
+    end Install_Umbrella_Handler;
+ 
+    ----------------
+    -- Is_Blocked --
+    ----------------
+ 
+    function Is_Blocked (Interrupt : Interrupt_ID) return Boolean is
+    begin
+       Unimplemented ("Is_Blocked");
+       return False;
+    end Is_Blocked;
+ 
+    -----------------------
+    -- Is_Entry_Attached --
+    -----------------------
+ 
+    function Is_Entry_Attached (Interrupt : Interrupt_ID) return Boolean is
+    begin
+       Check_Reserved_Interrupt (Interrupt);
+       return User_Entry (Interrupt).T /= Null_Task;
+    end Is_Entry_Attached;
+ 
+    -------------------------
+    -- Is_Handler_Attached --
+    -------------------------
+ 
+    function Is_Handler_Attached (Interrupt : Interrupt_ID) return Boolean is
+    begin
+       Check_Reserved_Interrupt (Interrupt);
+       return User_Handler (Interrupt).H /= null;
+    end Is_Handler_Attached;
+ 
+    ----------------
+    -- Is_Ignored --
+    ----------------
+ 
+    function Is_Ignored (Interrupt : Interrupt_ID) return Boolean is
+    begin
+       Unimplemented ("Is_Ignored");
+       return False;
+    end Is_Ignored;
+ 
+    -------------------
+    -- Is_Registered --
+    -------------------
+ 
+    function Is_Registered (Handler : Parameterless_Handler) return Boolean is
+       type Fat_Ptr is record
+          Object_Addr  : System.Address;
+          Handler_Addr : System.Address;
+       end record;
+ 
+       function To_Fat_Ptr is new Unchecked_Conversion
+         (Parameterless_Handler, Fat_Ptr);
+ 
+       Ptr : R_Link;
+       Fat : Fat_Ptr;
+ 
+    begin
+       if Handler = null then
+          return True;
+       end if;
+ 
+       Fat := To_Fat_Ptr (Handler);
+ 
+       Ptr := Registered_Handler_Head;
+ 
+       while Ptr /= null loop
+          if Ptr.H = Fat.Handler_Addr then
+             return True;
+          end if;
+ 
+          Ptr := Ptr.Next;
+       end loop;
+ 
+       return False;
+    end Is_Registered;
+ 
+    -----------------
+    -- Is_Reserved --
+    -----------------
+ 
+    function Is_Reserved (Interrupt : Interrupt_ID) return Boolean is
+       use System.Interrupt_Management;
+    begin
+       return Reserve (System.Interrupt_Management.Interrupt_ID (Interrupt));
+    end Is_Reserved;
+ 
+    ----------------------
+    -- Notify_Interrupt --
+    ----------------------
+ 
+    --  Umbrella handler for vectored hardware interrupts (as opposed to
+    --  signals and exceptions).  As opposed to the signal implementation,
+    --  this handler is only installed in the vector table while there is
+    --  an active association of an Ada handler to the interrupt.
+ 
+    --  Otherwise, the handler that existed prior to program startup is
+    --  in the vector table.  This ensures that handlers installed by
+    --  the BSP are active unless explicitly replaced in the program text.
+ 
+    --  Each Interrupt_Server_Task has an associated binary semaphore
+    --  on which it pends once it's been started.  This routine determines
+    --  The appropriate semaphore and and issues a semGive call, waking
+    --  the server task.  When a handler is unbound,
+    --  System.Interrupts.Unbind_Handler issues a semFlush, and the
+    --  server task deletes its semaphore and terminates.
+ 
+    procedure Notify_Interrupt (Param : System.Address) is
+       Interrupt : constant Interrupt_ID := Interrupt_ID (Param);
+ 
+       Discard_Result : STATUS;
+       pragma Unreferenced (Discard_Result);
+ 
+    begin
+       Discard_Result := semGive (Semaphore_ID_Map (Interrupt));
+    end Notify_Interrupt;
+ 
+    ---------------
+    -- Reference --
+    ---------------
+ 
+    function Reference (Interrupt : Interrupt_ID) return System.Address is
+    begin
+       Check_Reserved_Interrupt (Interrupt);
+       return Storage_Elements.To_Address
+         (Storage_Elements.Integer_Address (Interrupt));
+    end Reference;
+ 
+    --------------------------------
+    -- Register_Interrupt_Handler --
+    --------------------------------
+ 
+    procedure Register_Interrupt_Handler (Handler_Addr : System.Address) is
+       New_Node_Ptr : R_Link;
+    begin
+       --  This routine registers a handler as usable for dynamic
+       --  interrupt handler association. Routines attaching and detaching
+       --  handlers dynamically should determine whether the handler is
+       --  registered. Program_Error should be raised if it is not registered.
+ 
+       --  Pragma Interrupt_Handler can only appear in a library
+       --  level PO definition and instantiation. Therefore, we do not need
+       --  to implement an unregister operation. Nor do we need to
+       --  protect the queue structure with a lock.
+ 
+       pragma Assert (Handler_Addr /= System.Null_Address);
+ 
+       New_Node_Ptr := new Registered_Handler;
+       New_Node_Ptr.H := Handler_Addr;
+ 
+       if Registered_Handler_Head = null then
+          Registered_Handler_Head := New_Node_Ptr;
+          Registered_Handler_Tail := New_Node_Ptr;
+ 
+       else
+          Registered_Handler_Tail.Next := New_Node_Ptr;
+          Registered_Handler_Tail := New_Node_Ptr;
+       end if;
+    end Register_Interrupt_Handler;
+ 
+    -----------------------
+    -- Unblock_Interrupt --
+    -----------------------
+ 
+    procedure Unblock_Interrupt (Interrupt : Interrupt_ID) is
+    begin
+       Unimplemented ("Unblock_Interrupt");
+    end Unblock_Interrupt;
+ 
+    ------------------
+    -- Unblocked_By --
+    ------------------
+ 
+    function Unblocked_By
+      (Interrupt : Interrupt_ID) return System.Tasking.Task_Id is
+    begin
+       Unimplemented ("Unblocked_By");
+       return Null_Task;
+    end Unblocked_By;
+ 
+    ------------------------
+    -- Unignore_Interrupt --
+    ------------------------
+ 
+    procedure Unignore_Interrupt (Interrupt : Interrupt_ID) is
+    begin
+       Unimplemented ("Unignore_Interrupt");
+    end Unignore_Interrupt;
+ 
+    -------------------
+    -- Unimplemented --
+    -------------------
+ 
+    procedure Unimplemented (Feature : String) is
+    begin
+       Raise_Exception
+         (Program_Error'Identity,
+          Feature & " not implemented on VxWorks");
+    end Unimplemented;
+ 
+    -----------------------
+    -- Interrupt_Manager --
+    -----------------------
+ 
+    task body Interrupt_Manager is
+ 
+       --------------------
+       -- Local Routines --
+       --------------------
+ 
+       procedure Bind_Handler (Interrupt : Interrupt_ID);
+       --  This procedure does not do anything if a signal is blocked.
+       --  Otherwise, we have to interrupt Server_Task for status change through
+       --  a wakeup signal.
+ 
+       procedure Unbind_Handler (Interrupt : Interrupt_ID);
+       --  This procedure does not do anything if a signal is blocked.
+       --  Otherwise, we have to interrupt Server_Task for status change
+       --  through an abort signal.
+ 
+       procedure Unprotected_Exchange_Handler
+         (Old_Handler : out Parameterless_Handler;
+          New_Handler : Parameterless_Handler;
+          Interrupt   : Interrupt_ID;
+          Static      : Boolean;
+          Restoration : Boolean := False);
+ 
+       procedure Unprotected_Detach_Handler
+         (Interrupt : Interrupt_ID;
+          Static    : Boolean);
+ 
+       ------------------
+       -- Bind_Handler --
+       ------------------
+ 
+       procedure Bind_Handler (Interrupt : Interrupt_ID) is
+       begin
+          Install_Umbrella_Handler
+            (HW_Interrupt (Interrupt), Notify_Interrupt'Access);
+       end Bind_Handler;
+ 
+       --------------------
+       -- Unbind_Handler --
+       --------------------
+ 
+       procedure Unbind_Handler (Interrupt : Interrupt_ID) is
+          S : STATUS;
+          use type STATUS;
+ 
+       begin
+          --  Hardware interrupt
+ 
+          Install_Default_Action (HW_Interrupt (Interrupt));
+ 
+          --  Flush server task off semaphore, allowing it to terminate
+ 
+          S := semFlush (Semaphore_ID_Map (Interrupt));
+          pragma Assert (S = 0);
+       end Unbind_Handler;
+ 
+       --------------------------------
+       -- Unprotected_Detach_Handler --
+       --------------------------------
+ 
+       procedure Unprotected_Detach_Handler
+         (Interrupt : Interrupt_ID;
+          Static    : Boolean)
+       is
+          Old_Handler : Parameterless_Handler;
+       begin
+          if User_Entry (Interrupt).T /= Null_Task then
+             --  If an interrupt entry is installed raise
+             --  Program_Error. (propagate it to the caller).
+ 
+             Raise_Exception (Program_Error'Identity,
+               "An interrupt entry is already installed");
+          end if;
+ 
+          --  Note : Static = True will pass the following check. This is the
+          --  case when we want to detach a handler regardless of the static
+          --  status of the Current_Handler.
+ 
+          if not Static and then User_Handler (Interrupt).Static then
+             --  Trying to detach a static Interrupt Handler.
+             --  raise Program_Error.
+ 
+             Raise_Exception (Program_Error'Identity,
+               "Trying to detach a static Interrupt Handler");
+          end if;
+ 
+          Old_Handler := User_Handler (Interrupt).H;
+ 
+          --  The new handler
+ 
+          User_Handler (Interrupt).H := null;
+          User_Handler (Interrupt).Static := False;
+ 
+          if Old_Handler /= null then
+             Unbind_Handler (Interrupt);
+          end if;
+       end Unprotected_Detach_Handler;
+ 
+       ----------------------------------
+       -- Unprotected_Exchange_Handler --
+       ----------------------------------
+ 
+       procedure Unprotected_Exchange_Handler
+         (Old_Handler : out Parameterless_Handler;
+          New_Handler : Parameterless_Handler;
+          Interrupt   : Interrupt_ID;
+          Static      : Boolean;
+          Restoration : Boolean := False) is
+       begin
+          if User_Entry (Interrupt).T /= Null_Task then
+             --  If an interrupt entry is already installed, raise
+             --  Program_Error. (propagate it to the caller).
+ 
+             Raise_Exception
+               (Program_Error'Identity,
+                "An interrupt is already installed");
+          end if;
+ 
+          --  Note : A null handler with Static = True will
+          --  pass the following check. This is the case when we want to
+          --  detach a handler regardless of the Static status
+          --  of Current_Handler.
+          --  We don't check anything if Restoration is True, since we
+          --  may be detaching a static handler to restore a dynamic one.
+ 
+          if not Restoration and then not Static
+            and then (User_Handler (Interrupt).Static
+ 
+             --  Trying to overwrite a static Interrupt Handler with a
+             --  dynamic Handler
+ 
+             --  The new handler is not specified as an
+             --  Interrupt Handler by a pragma.
+ 
+            or else not Is_Registered (New_Handler))
+          then
+             Raise_Exception
+               (Program_Error'Identity,
+                "Trying to overwrite a static Interrupt Handler with a " &
+                "dynamic Handler");
+          end if;
+ 
+          --  Save the old handler
+ 
+          Old_Handler := User_Handler (Interrupt).H;
+ 
+          --  The new handler
+ 
+          User_Handler (Interrupt).H := New_Handler;
+ 
+          if New_Handler = null then
+ 
+             --  The null handler means we are detaching the handler.
+ 
+             User_Handler (Interrupt).Static := False;
+ 
+          else
+             User_Handler (Interrupt).Static := Static;
+          end if;
+ 
+          --  Invoke a corresponding Server_Task if not yet created.
+          --  Place Task_Id info in Server_ID array.
+ 
+          if New_Handler /= null
+            and then
+             (Server_ID (Interrupt) = Null_Task
+               or else
+                 Ada.Task_Identification.Is_Terminated
+                   (To_Ada (Server_ID (Interrupt))))
+          then
+             Interrupt_Access_Hold :=
+               new Interrupt_Server_Task
+                 (Interrupt, semBCreate (SEM_Q_FIFO, SEM_EMPTY));
+             Server_ID (Interrupt) :=
+               To_System (Interrupt_Access_Hold.all'Identity);
+          end if;
+ 
+          if (New_Handler = null) and then Old_Handler /= null then
+             --  Restore default handler
+ 
+             Unbind_Handler (Interrupt);
+ 
+          elsif Old_Handler = null then
+             --  Save default handler
+ 
+             Bind_Handler (Interrupt);
+          end if;
+       end Unprotected_Exchange_Handler;
+ 
+       --  Start of processing for Interrupt_Manager
+ 
+    begin
+       --  By making this task independent of any master, when the process
+       --  goes away, the Interrupt_Manager will terminate gracefully.
+ 
+       System.Tasking.Utilities.Make_Independent;
+ 
+       loop
+          --  A block is needed to absorb Program_Error exception
+ 
+          declare
+             Old_Handler : Parameterless_Handler;
+ 
+          begin
+             select
+                accept Attach_Handler
+                  (New_Handler : Parameterless_Handler;
+                   Interrupt   : Interrupt_ID;
+                   Static      : Boolean;
+                   Restoration : Boolean := False)
+                do
+                   Unprotected_Exchange_Handler
+                     (Old_Handler, New_Handler, Interrupt, Static, Restoration);
+                end Attach_Handler;
+ 
+             or
+                accept Exchange_Handler
+                  (Old_Handler : out Parameterless_Handler;
+                   New_Handler : Parameterless_Handler;
+                   Interrupt   : Interrupt_ID;
+                   Static      : Boolean)
+                do
+                   Unprotected_Exchange_Handler
+                     (Old_Handler, New_Handler, Interrupt, Static);
+                end Exchange_Handler;
+ 
+             or
+                accept Detach_Handler
+                   (Interrupt   : Interrupt_ID;
+                    Static      : Boolean)
+                do
+                   Unprotected_Detach_Handler (Interrupt, Static);
+                end Detach_Handler;
+             or
+                accept Bind_Interrupt_To_Entry
+                  (T       : Task_Id;
+                   E       : Task_Entry_Index;
+                   Interrupt : Interrupt_ID)
+                do
+                   --  If there is a binding already (either a procedure or an
+                   --  entry), raise Program_Error (propagate it to the caller).
+ 
+                   if User_Handler (Interrupt).H /= null
+                     or else User_Entry (Interrupt).T /= Null_Task
+                   then
+                      Raise_Exception
+                        (Program_Error'Identity,
+                         "A binding for this interrupt is already present");
+                   end if;
+ 
+                   User_Entry (Interrupt) := Entry_Assoc'(T => T, E => E);
+ 
+                   --  Indicate the attachment of interrupt entry in the ATCB.
+                   --  This is needed so when an interrupt entry task terminates
+                   --  the binding can be cleaned. The call to unbinding must be
+                   --  make by the task before it terminates.
+ 
+                   T.Interrupt_Entry := True;
+ 
+                   --  Invoke a corresponding Server_Task if not yet created.
+                   --  Place Task_Id info in Server_ID array.
+ 
+                   if Server_ID (Interrupt) = Null_Task
+                     or else
+                       Ada.Task_Identification.Is_Terminated
+                         (To_Ada (Server_ID (Interrupt)))
+                   then
+                      Interrupt_Access_Hold := new Interrupt_Server_Task
+                        (Interrupt, semBCreate (SEM_Q_FIFO, SEM_EMPTY));
+                      Server_ID (Interrupt) :=
+                        To_System (Interrupt_Access_Hold.all'Identity);
+                   end if;
+ 
+                   Bind_Handler (Interrupt);
+                end Bind_Interrupt_To_Entry;
+ 
+             or
+                accept Detach_Interrupt_Entries (T : Task_Id) do
+                   for Int in Interrupt_ID'Range loop
+                      if not Is_Reserved (Int) then
+                         if User_Entry (Int).T = T then
+                            User_Entry (Int) :=
+                              Entry_Assoc'
+                                (T => Null_Task, E => Null_Task_Entry);
+                            Unbind_Handler (Int);
+                         end if;
+                      end if;
+                   end loop;
+ 
+                   --  Indicate in ATCB that no interrupt entries are attached.
+ 
+                   T.Interrupt_Entry := False;
+                end Detach_Interrupt_Entries;
+             end select;
+ 
+          exception
+             --  If there is a Program_Error we just want to propagate it to
+             --  the caller and do not want to stop this task.
+ 
+             when Program_Error =>
+                null;
+ 
+             when others =>
+                pragma Assert (False);
+                null;
+          end;
+       end loop;
+ 
+    exception
+       when Standard'Abort_Signal =>
+          --  Flush interrupt server semaphores, so they can terminate
+          Finalize_Interrupt_Servers;
+          raise;
+    end Interrupt_Manager;
+ 
+    ---------------------------
+    -- Interrupt_Server_Task --
+    ---------------------------
+ 
+    --  Server task for vectored hardware interrupt handling
+ 
+    task body Interrupt_Server_Task is
+       Self_Id         : constant Task_Id := Self;
+       Tmp_Handler     : Parameterless_Handler;
+       Tmp_ID          : Task_Id;
+       Tmp_Entry_Index : Task_Entry_Index;
+       S               : STATUS;
+ 
+       use type STATUS;
+ 
+    begin
+       System.Tasking.Utilities.Make_Independent;
+       Semaphore_ID_Map (Interrupt) := Int_Sema;
+ 
+       loop
+          --  Pend on semaphore that will be triggered by the
+          --  umbrella handler when the associated interrupt comes in
+ 
+          S := semTake (Int_Sema, WAIT_FOREVER);
+          pragma Assert (S = 0);
+ 
+          if User_Handler (Interrupt).H /= null then
+ 
+             --  Protected procedure handler
+ 
+             Tmp_Handler := User_Handler (Interrupt).H;
+             Tmp_Handler.all;
+ 
+          elsif User_Entry (Interrupt).T /= Null_Task then
+ 
+             --  Interrupt entry handler
+ 
+             Tmp_ID := User_Entry (Interrupt).T;
+             Tmp_Entry_Index := User_Entry (Interrupt).E;
+             System.Tasking.Rendezvous.Call_Simple
+               (Tmp_ID, Tmp_Entry_Index, System.Null_Address);
+ 
+          else
+             --  Semaphore has been flushed by an unbind operation in
+             --  the Interrupt_Manager. Terminate the server task.
+ 
+             --  Wait for the Interrupt_Manager to complete its work
+ 
+             POP.Write_Lock (Self_Id);
+ 
+             --  Delete the associated semaphore
+ 
+             S := semDelete (Int_Sema);
+ 
+             pragma Assert (S = 0);
+ 
+             --  Set status for the Interrupt_Manager
+ 
+             Semaphore_ID_Map (Interrupt) := 0;
+             Server_ID (Interrupt) := Null_Task;
+             POP.Unlock (Self_Id);
+ 
+             exit;
+          end if;
+       end loop;
+    end Interrupt_Server_Task;
+ 
+ begin
+    --  Get Interrupt_Manager's ID so that Abort_Interrupt can be sent.
+ 
+    Interrupt_Manager_ID := To_System (Interrupt_Manager'Identity);
+ end System.Interrupts;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-interr.adb gcc-4.0.0/gcc/ada/s-interr.adb
*** gcc-3.4.3/gcc/ada/s-interr.adb	Tue Jan 13 11:51:34 2004
--- gcc-4.0.0/gcc/ada/s-interr.adb	Tue Jul  6 13:57:32 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2003, Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2004, Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 55,61 ****
  --  one Server_Task per interrupt.
  
  with Ada.Task_Identification;
! --  used for Task_ID type
  
  with Ada.Exceptions;
  --  used for Raise_Exception
--- 55,61 ----
  --  one Server_Task per interrupt.
  
  with Ada.Task_Identification;
! --  used for Task_Id type
  
  with Ada.Exceptions;
  --  used for Raise_Exception
*************** with System.Storage_Elements;
*** 107,113 ****
  --           Integer_Address
  
  with System.Tasking;
! --  used for Task_ID
  --           Task_Entry_Index
  --           Null_Task
  --           Self
--- 107,113 ----
  --           Integer_Address
  
  with System.Tasking;
! --  used for Task_Id
  --           Task_Entry_Index
  --           Null_Task
  --           Self
*************** package body System.Interrupts is
*** 141,147 ****
     package IMOP renames System.Interrupt_Management.Operations;
  
     function To_System is new Unchecked_Conversion
!      (Ada.Task_Identification.Task_Id, Task_ID);
  
     -----------------
     -- Local Tasks --
--- 141,147 ----
     package IMOP renames System.Interrupt_Management.Operations;
  
     function To_System is new Unchecked_Conversion
!      (Ada.Task_Identification.Task_Id, Task_Id);
  
     -----------------
     -- Local Tasks --
*************** package body System.Interrupts is
*** 152,158 ****
     --  nizing it.
  
     task Interrupt_Manager is
!       entry Detach_Interrupt_Entries (T : Task_ID);
  
        entry Initialize (Mask : IMNG.Interrupt_Mask);
  
--- 152,158 ----
     --  nizing it.
  
     task Interrupt_Manager is
!       entry Detach_Interrupt_Entries (T : Task_Id);
  
        entry Initialize (Mask : IMNG.Interrupt_Mask);
  
*************** package body System.Interrupts is
*** 173,179 ****
           Static      : in Boolean);
  
        entry Bind_Interrupt_To_Entry
!         (T         : Task_ID;
           E         : Task_Entry_Index;
           Interrupt : Interrupt_ID);
  
--- 173,179 ----
           Static      : in Boolean);
  
        entry Bind_Interrupt_To_Entry
!         (T         : Task_Id;
           E         : Task_Entry_Index;
           Interrupt : Interrupt_ID);
  
*************** package body System.Interrupts is
*** 204,210 ****
     -------------------------------
  
     type Entry_Assoc is record
!       T : Task_ID;
        E : Task_Entry_Index;
     end record;
  
--- 204,210 ----
     -------------------------------
  
     type Entry_Assoc is record
!       T : Task_Id;
        E : Task_Entry_Index;
     end record;
  
*************** package body System.Interrupts is
*** 235,251 ****
     --  True iff the corresponding interrupt is blocked in the process level
  
     Last_Unblocker :
!      array (Interrupt_ID'Range) of Task_ID := (others => Null_Task);
     pragma Volatile_Components (Last_Unblocker);
     --  Holds the ID of the last Task which Unblocked this Interrupt.
     --  It contains Null_Task if no tasks have ever requested the
     --  Unblocking operation or the Interrupt is currently Blocked.
  
!    Server_ID : array (Interrupt_ID'Range) of Task_ID :=
                   (others => Null_Task);
     pragma Atomic_Components (Server_ID);
!    --  Holds the Task_ID of the Server_Task for each interrupt.
!    --  Task_ID is needed to accomplish locking per Interrupt base. Also
     --  is needed to decide whether to create a new Server_Task.
  
     --  Type and Head, Tail of the list containing Registered Interrupt
--- 235,251 ----
     --  True iff the corresponding interrupt is blocked in the process level
  
     Last_Unblocker :
!      array (Interrupt_ID'Range) of Task_Id := (others => Null_Task);
     pragma Volatile_Components (Last_Unblocker);
     --  Holds the ID of the last Task which Unblocked this Interrupt.
     --  It contains Null_Task if no tasks have ever requested the
     --  Unblocking operation or the Interrupt is currently Blocked.
  
!    Server_ID : array (Interrupt_ID'Range) of Task_Id :=
                   (others => Null_Task);
     pragma Atomic_Components (Server_ID);
!    --  Holds the Task_Id of the Server_Task for each interrupt.
!    --  Task_Id is needed to accomplish locking per Interrupt base. Also
     --  is needed to decide whether to create a new Server_Task.
  
     --  Type and Head, Tail of the list containing Registered Interrupt
*************** package body System.Interrupts is
*** 305,321 ****
     -- Bind_Interrupt_To_Entry --
     -----------------------------
  
!    --  This procedure raises a Program_Error if it tries to
!    --  bind an interrupt to which an Entry or a Procedure is
!    --  already bound.
  
     procedure Bind_Interrupt_To_Entry
!      (T       : Task_ID;
        E       : Task_Entry_Index;
        Int_Ref : System.Address)
     is
        Interrupt   : constant Interrupt_ID :=
!         Interrupt_ID (Storage_Elements.To_Integer (Int_Ref));
  
     begin
        if Is_Reserved (Interrupt) then
--- 305,320 ----
     -- Bind_Interrupt_To_Entry --
     -----------------------------
  
!    --  This procedure raises a Program_Error if it tries to bind an
!    --  interrupt to which an Entry or a Procedure is already bound.
  
     procedure Bind_Interrupt_To_Entry
!      (T       : Task_Id;
        E       : Task_Entry_Index;
        Int_Ref : System.Address)
     is
        Interrupt   : constant Interrupt_ID :=
!                       Interrupt_ID (Storage_Elements.To_Integer (Int_Ref));
  
     begin
        if Is_Reserved (Interrupt) then
*************** package body System.Interrupts is
*** 324,330 ****
        end if;
  
        Interrupt_Manager.Bind_Interrupt_To_Entry (T, E, Interrupt);
- 
     end Bind_Interrupt_To_Entry;
  
     ---------------------
--- 323,328 ----
*************** package body System.Interrupts is
*** 383,396 ****
        end if;
  
        Interrupt_Manager.Detach_Handler (Interrupt, Static);
- 
     end Detach_Handler;
  
     ------------------------------
     -- Detach_Interrupt_Entries --
     ------------------------------
  
!    procedure Detach_Interrupt_Entries (T : Task_ID) is
     begin
        Interrupt_Manager.Detach_Interrupt_Entries (T);
     end Detach_Interrupt_Entries;
--- 381,393 ----
        end if;
  
        Interrupt_Manager.Detach_Handler (Interrupt, Static);
     end Detach_Handler;
  
     ------------------------------
     -- Detach_Interrupt_Entries --
     ------------------------------
  
!    procedure Detach_Interrupt_Entries (T : Task_Id) is
     begin
        Interrupt_Manager.Detach_Interrupt_Entries (T);
     end Detach_Interrupt_Entries;
*************** package body System.Interrupts is
*** 404,411 ****
     --  previous handler's binding status (ie. do not care if it is a
     --  dynamic or static handler).
  
!    --  This option is needed so that during the finalization of a PO, we
!    --  can detach handlers attached through pragma Attach_Handler.
  
     procedure Exchange_Handler
       (Old_Handler : out Parameterless_Handler;
--- 401,408 ----
     --  previous handler's binding status (ie. do not care if it is a
     --  dynamic or static handler).
  
!    --  This option is needed so that during the finalization of a PO,
!    --  we can detach handlers attached through pragma Attach_Handler.
  
     procedure Exchange_Handler
       (Old_Handler : out Parameterless_Handler;
*************** package body System.Interrupts is
*** 421,432 ****
  
        Interrupt_Manager.Exchange_Handler
          (Old_Handler, New_Handler, Interrupt, Static);
- 
     end Exchange_Handler;
  
!    ----------------
!    --  Finalize  --
!    ----------------
  
     procedure Finalize (Object : in out Static_Interrupt_Protection) is
     begin
--- 418,428 ----
  
        Interrupt_Manager.Exchange_Handler
          (Old_Handler, New_Handler, Interrupt, Static);
     end Exchange_Handler;
  
!    --------------
!    -- Finalize --
!    --------------
  
     procedure Finalize (Object : in out Static_Interrupt_Protection) is
     begin
*************** package body System.Interrupts is
*** 451,457 ****
     -- Has_Interrupt_Or_Attach_Handler --
     -------------------------------------
  
!    --  Need comments as to why these always return True
  
     function Has_Interrupt_Or_Attach_Handler
       (Object : access Dynamic_Interrupt_Protection) return Boolean
--- 447,453 ----
     -- Has_Interrupt_Or_Attach_Handler --
     -------------------------------------
  
!    --  Need comments as to why these always return True ???
  
     function Has_Interrupt_Or_Attach_Handler
       (Object : access Dynamic_Interrupt_Protection) return Boolean
*************** package body System.Interrupts is
*** 602,608 ****
        end loop;
  
        return False;
- 
     end Is_Registered;
  
     -----------------
--- 598,603 ----
*************** package body System.Interrupts is
*** 681,687 ****
     ------------------
  
     function Unblocked_By
!      (Interrupt : Interrupt_ID) return System.Tasking.Task_ID
     is
     begin
        if Is_Reserved (Interrupt) then
--- 676,682 ----
     ------------------
  
     function Unblocked_By
!      (Interrupt : Interrupt_ID) return System.Tasking.Task_Id
     is
     begin
        if Is_Reserved (Interrupt) then
*************** package body System.Interrupts is
*** 712,729 ****
  
     task body Interrupt_Manager is
  
!       ----------------------
!       --  Local Variables --
!       ----------------------
  
        Intwait_Mask  : aliased IMNG.Interrupt_Mask;
        Ret_Interrupt : Interrupt_ID;
        Old_Mask      : aliased IMNG.Interrupt_Mask;
        Old_Handler   : Parameterless_Handler;
  
!       ---------------------
!       --  Local Routines --
!       ---------------------
  
        procedure Bind_Handler (Interrupt : Interrupt_ID);
        --  This procedure does not do anything if the Interrupt is blocked.
--- 707,724 ----
  
     task body Interrupt_Manager is
  
!       ---------------------
!       -- Local Variables --
!       ---------------------
  
        Intwait_Mask  : aliased IMNG.Interrupt_Mask;
        Ret_Interrupt : Interrupt_ID;
        Old_Mask      : aliased IMNG.Interrupt_Mask;
        Old_Handler   : Parameterless_Handler;
  
!       --------------------
!       -- Local Routines --
!       --------------------
  
        procedure Bind_Handler (Interrupt : Interrupt_ID);
        --  This procedure does not do anything if the Interrupt is blocked.
*************** package body System.Interrupts is
*** 804,810 ****
           else
              IMOP.Install_Default_Action (IMNG.Interrupt_ID (Interrupt));
           end if;
- 
        end Unbind_Handler;
  
        --------------------------------
--- 799,804 ----
*************** package body System.Interrupts is
*** 832,837 ****
--- 826,832 ----
           --  status of the current_Handler.
  
           if not Static and then User_Handler (Interrupt).Static then
+ 
              --  Tries to detach a static Interrupt Handler.
              --  raise a program error.
  
*************** package body System.Interrupts is
*** 854,860 ****
           if Old_Handler /= null then
              Unbind_Handler (Interrupt);
           end if;
- 
        end Unprotected_Detach_Handler;
  
        ----------------------------------
--- 849,854 ----
*************** package body System.Interrupts is
*** 866,872 ****
           New_Handler : Parameterless_Handler;
           Interrupt   : Interrupt_ID;
           Static      : Boolean;
!          Restoration : Boolean := False) is
        begin
           if User_Entry (Interrupt).T /= Null_Task then
  
--- 860,867 ----
           New_Handler : Parameterless_Handler;
           Interrupt   : Interrupt_ID;
           Static      : Boolean;
!          Restoration : Boolean := False)
!       is
        begin
           if User_Entry (Interrupt).T /= Null_Task then
  
*************** package body System.Interrupts is
*** 925,931 ****
           end if;
  
           --  Invoke a corresponding Server_Task if not yet created.
!          --  Place Task_ID info in Server_ID array.
  
           if Server_ID (Interrupt) = Null_Task then
  
--- 920,926 ----
           end if;
  
           --  Invoke a corresponding Server_Task if not yet created.
!          --  Place Task_Id info in Server_ID array.
  
           if Server_ID (Interrupt) = Null_Task then
  
*************** package body System.Interrupts is
*** 951,957 ****
           if Old_Handler = null then
              Bind_Handler (Interrupt);
           end if;
- 
        end Unprotected_Exchange_Handler;
  
     --  Start of processing for Interrupt_Manager
--- 946,951 ----
*************** package body System.Interrupts is
*** 1050,1056 ****
  
              or
                 accept Bind_Interrupt_To_Entry
!                  (T       : Task_ID;
                    E       : Task_Entry_Index;
                    Interrupt : Interrupt_ID)
                 do
--- 1044,1050 ----
  
              or
                 accept Bind_Interrupt_To_Entry
!                  (T       : Task_Id;
                    E       : Task_Entry_Index;
                    Interrupt : Interrupt_ID)
                 do
*************** package body System.Interrupts is
*** 1078,1086 ****
                    T.Interrupt_Entry := True;
  
                    --  Invoke a corresponding Server_Task if not yet created.
!                   --  Place Task_ID info in Server_ID array.
  
                    if Server_ID (Interrupt) = Null_Task then
                       --  When a new Server_Task is created, it should have its
                       --  signal mask set to the All_Tasks_Mask.
  
--- 1072,1081 ----
                    T.Interrupt_Entry := True;
  
                    --  Invoke a corresponding Server_Task if not yet created.
!                   --  Place Task_Id info in Server_ID array.
  
                    if Server_ID (Interrupt) = Null_Task then
+ 
                       --  When a new Server_Task is created, it should have its
                       --  signal mask set to the All_Tasks_Mask.
  
*************** package body System.Interrupts is
*** 1096,1105 ****
                 end Bind_Interrupt_To_Entry;
  
              or
!                accept Detach_Interrupt_Entries (T : Task_ID) do
                    for J in Interrupt_ID'Range loop
                       if not Is_Reserved (J) then
                          if User_Entry (J).T = T then
                             --  The interrupt should no longer be ingnored if
                             --  it was ever ignored.
  
--- 1091,1101 ----
                 end Bind_Interrupt_To_Entry;
  
              or
!                accept Detach_Interrupt_Entries (T : Task_Id) do
                    for J in Interrupt_ID'Range loop
                       if not Is_Reserved (J) then
                          if User_Entry (J).T = T then
+ 
                             --  The interrupt should no longer be ingnored if
                             --  it was ever ignored.
  
*************** package body System.Interrupts is
*** 1111,1117 ****
                       end if;
                    end loop;
  
!                   --  Indicate in ATCB that no Interrupt Entries are attached.
  
                    T.Interrupt_Entry := False;
                 end Detach_Interrupt_Entries;
--- 1107,1113 ----
                       end if;
                    end loop;
  
!                   --  Indicate in ATCB that no Interrupt Entries are attached
  
                    T.Interrupt_Entry := False;
                 end Detach_Interrupt_Entries;
*************** package body System.Interrupts is
*** 1133,1142 ****
                    if User_Handler (Interrupt).H /= null
                      or else  User_Entry (Interrupt).T /= Null_Task
                    then
!                      --  This is the case where the Server_Task is waiting on
!                      --  "sigwait." Wake it up by sending an
!                      --  Abort_Task_Interrupt so that the Server_Task waits on
!                      --  Cond.
  
                       POP.Abort_Task (Server_ID (Interrupt));
  
--- 1129,1138 ----
                    if User_Handler (Interrupt).H /= null
                      or else  User_Entry (Interrupt).T /= Null_Task
                    then
!                      --  This is the case where the Server_Task is waiting
!                      --  on "sigwait." Wake it up by sending an
!                      --  Abort_Task_Interrupt so that the Server_Task
!                      --  waits on Cond.
  
                       POP.Abort_Task (Server_ID (Interrupt));
  
*************** package body System.Interrupts is
*** 1166,1171 ****
--- 1162,1168 ----
                    then
                       --  No handler is attached. Unmask the Interrupt so that
                       --  the default action can be carried out.
+ 
                       IMOP.Thread_Unblock_Interrupt
                         (IMNG.Interrupt_ID (Interrupt));
  
*************** package body System.Interrupts is
*** 1174,1179 ****
--- 1171,1177 ----
                       --  since it was being blocked and an Interrupt Hander or
                       --  an Entry was there. Wake it up and let it change
                       --  it place of waiting according to its new state.
+ 
                       POP.Wakeup (Server_ID (Interrupt),
                         Interrupt_Server_Blocked_Interrupt_Sleep);
                    end if;
*************** package body System.Interrupts is
*** 1249,1257 ****
     task body Server_Task is
        Intwait_Mask    : aliased IMNG.Interrupt_Mask;
        Ret_Interrupt   : Interrupt_ID;
!       Self_ID         : constant Task_ID := Self;
        Tmp_Handler     : Parameterless_Handler;
!       Tmp_ID          : Task_ID;
        Tmp_Entry_Index : Task_Entry_Index;
  
     begin
--- 1247,1255 ----
     task body Server_Task is
        Intwait_Mask    : aliased IMNG.Interrupt_Mask;
        Ret_Interrupt   : Interrupt_ID;
!       Self_ID         : constant Task_Id := Self;
        Tmp_Handler     : Parameterless_Handler;
!       Tmp_ID          : Task_Id;
        Tmp_Entry_Index : Task_Entry_Index;
  
     begin
*************** package body System.Interrupts is
*** 1356,1424 ****
                 POP.Write_Lock (Self_ID);
  
              else
-                pragma Assert (Ret_Interrupt = Interrupt);
- 
                 if Single_Lock then
                    POP.Lock_RTS;
                 end if;
  
                 POP.Write_Lock (Self_ID);
  
!                --  Even though we have received an Interrupt the status may
!                --  have changed already before we got the Self_ID lock above.
!                --  Therefore we make sure a Handler or an Entry is still
!                --  there and make appropriate call.
!                --  If there is no calls to make we need to regenerate the
!                --  Interrupt in order not to lose it.
  
!                if User_Handler (Interrupt).H /= null then
!                   Tmp_Handler := User_Handler (Interrupt).H;
  
!                   --  RTS calls should not be made with self being locked.
  
!                   POP.Unlock (Self_ID);
  
!                   if Single_Lock then
!                      POP.Unlock_RTS;
!                   end if;
  
!                   Tmp_Handler.all;
  
!                   if Single_Lock then
!                      POP.Lock_RTS;
!                   end if;
  
!                   POP.Write_Lock (Self_ID);
  
!                elsif User_Entry (Interrupt).T /= Null_Task then
!                   Tmp_ID := User_Entry (Interrupt).T;
!                   Tmp_Entry_Index := User_Entry (Interrupt).E;
  
!                   --  RTS calls should not be made with self being locked.
  
!                   if Single_Lock then
!                      POP.Unlock_RTS;
!                   end if;
  
!                   POP.Unlock (Self_ID);
  
!                   System.Tasking.Rendezvous.Call_Simple
!                     (Tmp_ID, Tmp_Entry_Index, System.Null_Address);
  
!                   POP.Write_Lock (Self_ID);
  
!                   if Single_Lock then
!                      POP.Lock_RTS;
!                   end if;
  
!                else
!                   --  This is a situation that this task wake up
!                   --  receiving an Interrupt and before it get the lock
!                   --  the Interrupt is blocked. We do not
!                   --  want to lose the interrupt in this case so that
!                   --  regenerate the Interrupt to process level;
  
!                   IMOP.Interrupt_Self_Process (IMNG.Interrupt_ID (Interrupt));
                 end if;
              end if;
           end if;
--- 1354,1431 ----
                 POP.Write_Lock (Self_ID);
  
              else
                 if Single_Lock then
                    POP.Lock_RTS;
                 end if;
  
                 POP.Write_Lock (Self_ID);
  
!                if Ret_Interrupt /= Interrupt then
  
!                   --  On some systems (e.g. recent linux kernels), sigwait
!                   --  may return unexpectedly (with errno set to EINTR).
  
!                   null;
  
!                else
!                   --  Even though we have received an Interrupt the status may
!                   --  have changed already before we got the Self_ID lock above
!                   --  Therefore we make sure a Handler or an Entry is still
!                   --  there and make appropriate call.
  
!                   --  If there is no calls to make we need to regenerate the
!                   --  Interrupt in order not to lose it.
  
!                   if User_Handler (Interrupt).H /= null then
!                      Tmp_Handler := User_Handler (Interrupt).H;
  
!                      --  RTS calls should not be made with self being locked.
  
!                      POP.Unlock (Self_ID);
  
!                      if Single_Lock then
!                         POP.Unlock_RTS;
!                      end if;
  
!                      Tmp_Handler.all;
  
!                      if Single_Lock then
!                         POP.Lock_RTS;
!                      end if;
  
!                      POP.Write_Lock (Self_ID);
  
!                   elsif User_Entry (Interrupt).T /= Null_Task then
!                      Tmp_ID := User_Entry (Interrupt).T;
!                      Tmp_Entry_Index := User_Entry (Interrupt).E;
  
!                      --  RTS calls should not be made with self being locked.
  
!                      if Single_Lock then
!                         POP.Unlock_RTS;
!                      end if;
  
!                      POP.Unlock (Self_ID);
  
!                      System.Tasking.Rendezvous.Call_Simple
!                        (Tmp_ID, Tmp_Entry_Index, System.Null_Address);
! 
!                      POP.Write_Lock (Self_ID);
! 
!                      if Single_Lock then
!                         POP.Lock_RTS;
!                      end if;
! 
!                   else
!                      --  This is a situation that this task wakes up receiving
!                      --  an Interrupt and before it gets the lock the Interrupt
!                      --  is blocked. We do not want to lose the interrupt in
!                      --  this case so we regenerate the Interrupt to process
!                      --  level.
! 
!                      IMOP.Interrupt_Self_Process
!                        (IMNG.Interrupt_ID (Interrupt));
!                   end if;
                 end if;
              end if;
           end if;
*************** package body System.Interrupts is
*** 1433,1462 ****
  
           --  Undefer abort here to allow a window for this task
           --  to be aborted  at the time of system shutdown.
        end loop;
     end Server_Task;
  
  --  Elaboration code for package System.Interrupts
  
  begin
- 
     --  Get Interrupt_Manager's ID so that Abort_Interrupt can be sent.
  
     Interrupt_Manager_ID := To_System (Interrupt_Manager'Identity);
  
!    --  During the elaboration of this package body we want RTS to
!    --  inherit the interrupt mask from the Environment Task.
  
!    --  The Environment Task should have gotten its mask from
     --  the enclosing process during the RTS start up. (See
!    --  in s-inmaop.adb). Pass the Interrupt_Mask of the Environment
!    --  task to the Interrupt_Manager.
  
     --  Note : At this point we know that all tasks (including
     --  RTS internal servers) are masked for non-reserved signals
     --  (see s-taprop.adb). Only the Interrupt_Manager will have
!    --  masks set up differently inheriting the original Environment
!    --  Task's mask.
  
     Interrupt_Manager.Initialize (IMOP.Environment_Mask);
  end System.Interrupts;
--- 1440,1469 ----
  
           --  Undefer abort here to allow a window for this task
           --  to be aborted  at the time of system shutdown.
+ 
        end loop;
     end Server_Task;
  
  --  Elaboration code for package System.Interrupts
  
  begin
     --  Get Interrupt_Manager's ID so that Abort_Interrupt can be sent.
  
     Interrupt_Manager_ID := To_System (Interrupt_Manager'Identity);
  
!    --  During the elaboration of this package body we want the RTS
!    --  to inherit the interrupt mask from the Environment Task.
  
!    --  The environment task should have gotten its mask from
     --  the enclosing process during the RTS start up. (See
!    --  processing in s-inmaop.adb). Pass the Interrupt_Mask
!    --  of the environment task to the Interrupt_Manager.
  
     --  Note : At this point we know that all tasks (including
     --  RTS internal servers) are masked for non-reserved signals
     --  (see s-taprop.adb). Only the Interrupt_Manager will have
!    --  masks set up differently inheriting the original environment
!    --  task's mask.
  
     Interrupt_Manager.Initialize (IMOP.Environment_Mask);
  end System.Interrupts;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-interr.ads gcc-4.0.0/gcc/ada/s-interr.ads
*** gcc-3.4.3/gcc/ada/s-interr.ads	Tue Oct 21 13:42:14 2003
--- gcc-4.0.0/gcc/ada/s-interr.ads	Tue Jul  6 13:57:32 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 46,52 ****
  --  tasking implementation to be linked and elaborated.
  
  with System.Tasking;
! --  used for Task_ID
  
  with System.Tasking.Protected_Objects.Entries;
  --  used for Protection_Entries
--- 46,52 ----
  --  tasking implementation to be linked and elaborated.
  
  with System.Tasking;
! --  used for Task_Id
  
  with System.Tasking.Protected_Objects.Entries;
  --  used for Protection_Entries
*************** package System.Interrupts is
*** 122,146 ****
       (Interrupt : Interrupt_ID)
       return       System.Address;
  
!    ---------------------------------
!    --  Interrupt entries services --
!    ---------------------------------
  
     --  Routines needed for Interrupt Entries
-    --  Attempt to bind an Entry to an Interrupt to which a Handler is
-    --  already attached will raise a Program_Error.
  
     procedure Bind_Interrupt_To_Entry
!      (T       : System.Tasking.Task_ID;
        E       : System.Tasking.Task_Entry_Index;
        Int_Ref : System.Address);
  
!    procedure Detach_Interrupt_Entries (T : System.Tasking.Task_ID);
     --  This procedure detaches all the Interrupt Entries bound to a task.
  
!    -------------------------------
!    --  POSIX.5 signals services --
!    -------------------------------
  
     --  Routines needed for POSIX dot5 POSIX_Signals
  
--- 122,146 ----
       (Interrupt : Interrupt_ID)
       return       System.Address;
  
!    --------------------------------
!    -- Interrupt Entries Services --
!    --------------------------------
  
     --  Routines needed for Interrupt Entries
  
     procedure Bind_Interrupt_To_Entry
!      (T       : System.Tasking.Task_Id;
        E       : System.Tasking.Task_Entry_Index;
        Int_Ref : System.Address);
+    --  Bind the given interrupt to the given entry. If the interrupt is
+    --  already bound to another entry, Program_Error will be raised.
  
!    procedure Detach_Interrupt_Entries (T : System.Tasking.Task_Id);
     --  This procedure detaches all the Interrupt Entries bound to a task.
  
!    ------------------------------
!    -- POSIX.5 Signals Services --
!    ------------------------------
  
     --  Routines needed for POSIX dot5 POSIX_Signals
  
*************** package System.Interrupts is
*** 151,157 ****
  
     function Unblocked_By
       (Interrupt   : Interrupt_ID)
!       return System.Tasking.Task_ID;
     --  It returns the ID of the last Task which Unblocked this Interrupt.
     --  It returns Null_Task if no tasks have ever requested the
     --  Unblocking operation or the Interrupt is currently Blocked.
--- 151,157 ----
  
     function Unblocked_By
       (Interrupt   : Interrupt_ID)
!       return System.Tasking.Task_Id;
     --  It returns the ID of the last Task which Unblocked this Interrupt.
     --  It returns Null_Task if no tasks have ever requested the
     --  Unblocking operation or the Interrupt is currently Blocked.
*************** package System.Interrupts is
*** 177,183 ****
     --  This will make all the tasks in RTS blocked for the Interrupt.
  
     ----------------------
!    -- Protection types --
     ----------------------
  
     --  Routines and types needed to implement Interrupt_Handler and
--- 177,183 ----
     --  This will make all the tasks in RTS blocked for the Interrupt.
  
     ----------------------
!    -- Protection Types --
     ----------------------
  
     --  Routines and types needed to implement Interrupt_Handler and
diff -Nrcpad gcc-3.4.3/gcc/ada/s-intman-dummy.adb gcc-4.0.0/gcc/ada/s-intman-dummy.adb
*** gcc-3.4.3/gcc/ada/s-intman-dummy.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-intman-dummy.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,49 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --           S Y S T E M . I N T E R R U P T _ M A N A G E M E N T          --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --          Copyright (C) 1997-2002 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a NO tasking version of this package.
+ 
+ package body System.Interrupt_Management is
+ 
+    ---------------------------
+    -- Initialize_Interrupts --
+    ---------------------------
+ 
+    --  Nothing needs to be done on this platform.
+ 
+    procedure Initialize_Interrupts is
+    begin
+       null;
+    end Initialize_Interrupts;
+ 
+ end System.Interrupt_Management;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-intman-irix-athread.adb gcc-4.0.0/gcc/ada/s-intman-irix-athread.adb
*** gcc-3.4.3/gcc/ada/s-intman-irix-athread.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-intman-irix-athread.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,184 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
+ --                                                                          --
+ --           S Y S T E M . I N T E R R U P T _ M A N A G E M E N T          --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2003, Ada Core Technologies               --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is an Irix (old pthread library) version of this package.
+ 
+ --  PLEASE DO NOT add any dependences on other packages.
+ --  This package is designed to work with or without tasking support.
+ 
+ --  Make a careful study of all signals available under the OS,
+ --  to see which need to be reserved, kept always unmasked,
+ --  or kept always unmasked.
+ 
+ --  Be on the lookout for special signals that
+ --  may be used by the thread library.
+ 
+ with System.OS_Interface;
+ --  used for various Constants, Signal and types
+ 
+ with Interfaces.C;
+ --  used for "int"
+ package body System.Interrupt_Management is
+ 
+    use System.OS_Interface;
+ 
+    type Interrupt_List is array (Interrupt_ID range <>) of Interrupt_ID;
+ 
+    Exception_Interrupts : constant Interrupt_List :=
+      (SIGILL,
+       SIGABRT,
+       SIGFPE,
+       SIGSEGV,
+       SIGBUS);
+ 
+    Reserved_Interrupts : constant Interrupt_List :=
+      (0,
+       SIGTRAP,
+       SIGKILL,
+       SIGSYS,
+       SIGALRM,
+       SIGSTOP,
+       SIGPTINTR,
+       SIGPTRESCHED);
+ 
+    Abort_Signal : constant := 48;
+    --
+    --  Serious MOJO:  The SGI pthreads library only supports the
+    --                 unnamed signal number 48 for pthread_kill!
+    --
+ 
+    Unreserve_All_Interrupts : Interfaces.C.int;
+    pragma Import
+      (C, Unreserve_All_Interrupts, "__gl_unreserve_all_interrupts");
+ 
+    ----------------------
+    -- Notify_Exception --
+    ----------------------
+ 
+    --  This function identifies the Ada exception to be raised using the
+    --  information when the system received a synchronous signal.
+    --  Since this function is machine and OS dependent, different code has to
+    --  be provided for different target.
+    --  On SGI, the signal handling is done is a-init.c, even when tasking is
+    --  involved.
+ 
+    ---------------------------
+    -- Initialize_Interrupts --
+    ---------------------------
+ 
+    --  Nothing needs to be done on this platform.
+ 
+    procedure Initialize_Interrupts is
+    begin
+       null;
+    end Initialize_Interrupts;
+ 
+ begin
+    declare
+       function State (Int : Interrupt_ID) return Character;
+       pragma Import (C, State, "__gnat_get_interrupt_state");
+       --  Get interrupt state.  Defined in a-init.c
+       --  The input argument is the interrupt number,
+       --  and the result is one of the following:
+ 
+       User    : constant Character := 'u';
+       Runtime : constant Character := 'r';
+       Default : constant Character := 's';
+       --    'n'   this interrupt not set by any Interrupt_State pragma
+       --    'u'   Interrupt_State pragma set state to User
+       --    'r'   Interrupt_State pragma set state to Runtime
+       --    's'   Interrupt_State pragma set state to System (use "default"
+       --           system handler)
+ 
+       use Interfaces.C;
+ 
+    begin
+       Abort_Task_Interrupt := Abort_Signal;
+ 
+       pragma Assert (Keep_Unmasked = (Interrupt_ID'Range => False));
+       pragma Assert (Reserve = (Interrupt_ID'Range => False));
+ 
+       --  Process state of exception signals
+ 
+       for J in Exception_Interrupts'Range loop
+          if State (Exception_Interrupts (J)) /= User then
+             Keep_Unmasked (Exception_Interrupts (J)) := True;
+             Reserve (Exception_Interrupts (J)) := True;
+          end if;
+       end loop;
+ 
+       if State (Abort_Task_Interrupt) /= User then
+          Keep_Unmasked (Abort_Task_Interrupt) := True;
+          Reserve (Abort_Task_Interrupt) := True;
+       end if;
+ 
+       --  Set SIGINT to unmasked state as long as it's
+       --  not in "User" state.  Check for Unreserve_All_Interrupts last
+ 
+       if State (SIGINT) /= User then
+          Keep_Unmasked (SIGINT) := True;
+       end if;
+ 
+       --  Check all signals for state that requires keeping them
+       --  unmasked and reserved
+ 
+       for J in Interrupt_ID'Range loop
+          if State (J) = Default or else State (J) = Runtime then
+             Keep_Unmasked (J) := True;
+             Reserve (J) := True;
+          end if;
+       end loop;
+ 
+       --  Add target-specific reserved signals
+ 
+       for J in Reserved_Interrupts'Range loop
+          Reserve (Interrupt_ID (Reserved_Interrupts (J))) := True;
+       end loop;
+ 
+       --  Process pragma Unreserve_All_Interrupts. This overrides any
+       --  settings due to pragma Interrupt_State:
+ 
+       if Unreserve_All_Interrupts /= 0 then
+          Keep_Unmasked (SIGINT) := False;
+          Reserve (SIGINT) := False;
+       end if;
+ 
+       --  We do not have Signal 0 in reality. We just use this value
+       --  to identify not existing signals (see s-intnam.ads). Therefore,
+       --  Signal 0 should not be used in all signal related operations hence
+       --  mark it as reserved.
+ 
+       Reserve (0) := True;
+    end;
+ end System.Interrupt_Management;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-intman-irix.adb gcc-4.0.0/gcc/ada/s-intman-irix.adb
*** gcc-3.4.3/gcc/ada/s-intman-irix.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-intman-irix.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,152 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --           S Y S T E M . I N T E R R U P T _ M A N A G E M E N T          --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2003, Ada Core Technologies               --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a SGI Pthread version of this package.
+ 
+ --  PLEASE DO NOT add any dependences on other packages.
+ --  This package is designed to work with or without tasking support.
+ 
+ --  Make a careful study of all signals available under the OS,
+ --  to see which need to be reserved, kept always unmasked,
+ --  or kept always unmasked.
+ --  Be on the lookout for special signals that
+ --  may be used by the thread library.
+ 
+ with Interfaces.C;
+ --  used for int
+ 
+ with System.OS_Interface;
+ --  used for various Constants, Signal and types
+ 
+ package body System.Interrupt_Management is
+ 
+    use System.OS_Interface;
+ 
+    type Interrupt_List is array (Interrupt_ID range <>) of Interrupt_ID;
+    Exception_Interrupts : constant Interrupt_List :=
+      (SIGTSTP, SIGILL, SIGTRAP, SIGEMT, SIGFPE, SIGBUS, SIGSTOP, SIGKILL,
+       SIGSEGV, SIGSYS, SIGXCPU, SIGXFSZ, SIGPROF, SIGPTINTR, SIGPTRESCHED,
+       SIGABRT, SIGPIPE);
+ 
+    ---------------------------
+    -- Initialize_Interrupts --
+    ---------------------------
+ 
+    --  Nothing needs to be done on this platform
+ 
+    procedure Initialize_Interrupts is
+    begin
+       null;
+    end Initialize_Interrupts;
+ 
+    Unreserve_All_Interrupts : Interfaces.C.int;
+    pragma Import
+      (C, Unreserve_All_Interrupts, "__gl_unreserve_all_interrupts");
+ 
+    use type Interfaces.C.int;
+ 
+ begin
+    declare
+       function State (Int : Interrupt_ID) return Character;
+       pragma Import (C, State, "__gnat_get_interrupt_state");
+ 
+       --  Get interrupt state.  Defined in a-init.c
+       --  The input argument is the interrupt number,
+       --  and the result is one of the following:
+ 
+       User    : constant Character := 'u';
+       Runtime : constant Character := 'r';
+       Default : constant Character := 's';
+       --    'n'   this interrupt not set by any Interrupt_State pragma
+       --    'u'   Interrupt_State pragma set state to User
+       --    'r'   Interrupt_State pragma set state to Runtime
+       --    's'   Interrupt_State pragma set state to System (use "default"
+       --           system handler)
+ 
+    begin
+       Abort_Task_Interrupt := SIGABRT;
+ 
+       --  Change this if you want to use another signal for task abort.
+       --  SIGTERM might be a good one.
+ 
+       pragma Assert (Keep_Unmasked = (Interrupt_ID'Range => False));
+       pragma Assert (Reserve = (Interrupt_ID'Range => False));
+ 
+       --  Process state of exception signals
+ 
+       for J in Exception_Interrupts'Range loop
+          if State (Exception_Interrupts (J)) /= User then
+             Keep_Unmasked (Exception_Interrupts (J)) := True;
+             Reserve (Exception_Interrupts (J)) := True;
+          end if;
+       end loop;
+ 
+       if State (Abort_Task_Interrupt) /= User then
+          Keep_Unmasked (Abort_Task_Interrupt) := True;
+          Reserve (Abort_Task_Interrupt) := True;
+       end if;
+ 
+       --  Set SIGINT to unmasked state as long as it's
+       --  not in "User" state.  Check for Unreserve_All_Interrupts last
+ 
+       if State (SIGINT) /= User then
+          Keep_Unmasked (SIGINT) := True;
+       end if;
+ 
+       --  Check all signals for state that requires keeping them
+       --  unmasked and reserved
+ 
+       for J in Interrupt_ID'Range loop
+          if State (J) = Default or else State (J) = Runtime then
+             Keep_Unmasked (J) := True;
+             Reserve (J) := True;
+          end if;
+       end loop;
+ 
+       --  Process pragma Unreserve_All_Interrupts. This overrides any
+       --  settings due to pragma Interrupt_State:
+ 
+       if Unreserve_All_Interrupts /= 0 then
+          Keep_Unmasked (SIGINT) := False;
+          Reserve (SIGINT) := False;
+       end if;
+ 
+       --  We do not have Signal 0 in reality. We just use this value
+       --  to identify not existing signals (see s-intnam.ads). Therefore,
+       --  Signal 0 should not be used in all signal related operations hence
+       --  mark it as reserved.
+ 
+       Reserve (0) := True;
+    end;
+ end System.Interrupt_Management;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-intman-mingw.adb gcc-4.0.0/gcc/ada/s-intman-mingw.adb
*** gcc-3.4.3/gcc/ada/s-intman-mingw.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-intman-mingw.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,78 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --           S Y S T E M . I N T E R R U P T _ M A N A G E M E N T          --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --          Copyright (C) 1991-2000 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the NT version of this package
+ 
+ --  This file performs the system-dependent translation between machine
+ --  exceptions and the Ada exceptions, if any, that should be raised when they
+ --  occur.
+ 
+ --  PLEASE DO NOT add any dependences on other packages.
+ --  This package is designed to work with or without tasking support.
+ 
+ --  See the other warnings in the package specification before making any
+ --  modifications to this file.
+ 
+ --  Make a careful study of all signals available under the OS, to see which
+ --  need to be reserved, kept always unmasked, or kept always unmasked. Be on
+ --  the lookout for special signals that may be used by the thread library.
+ 
+ with System.OS_Interface; use System.OS_Interface;
+ 
+ package body System.Interrupt_Management is
+ 
+    ---------------------------
+    -- Initialize_Interrupts --
+    ---------------------------
+ 
+    --  Nothing needs to be done on this platform.
+ 
+    procedure Initialize_Interrupts is
+    begin
+       null;
+    end Initialize_Interrupts;
+ 
+ begin
+    --  "Reserve" all the interrupts, except those that are explicitely defined
+ 
+    for J in Interrupt_ID'Range loop
+       Reserve (J) := True;
+    end loop;
+ 
+    Reserve (SIGINT)  := False;
+    Reserve (SIGILL)  := False;
+    Reserve (SIGABRT) := False;
+    Reserve (SIGFPE)  := False;
+    Reserve (SIGSEGV) := False;
+    Reserve (SIGTERM) := False;
+ end System.Interrupt_Management;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-intman-posix.adb gcc-4.0.0/gcc/ada/s-intman-posix.adb
*** gcc-3.4.3/gcc/ada/s-intman-posix.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-intman-posix.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,285 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --           S Y S T E M . I N T E R R U P T _ M A N A G E M E N T          --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --          Copyright (C) 1992-2003, Free Software Foundation, Inc.         --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the POSIX threads version of this package
+ 
+ --  PLEASE DO NOT add any dependences on other packages. ??? why not ???
+ --  This package is designed to work with or without tasking support.
+ 
+ --  See the other warnings in the package specification before making
+ --  any modifications to this file.
+ 
+ --  Make a careful study of all signals available under the OS, to see which
+ --  need to be reserved, kept always unmasked, or kept always unmasked. Be on
+ --  the lookout for special signals that may be used by the thread library.
+ 
+ --  Since this is a multi target file, the signal <-> exception mapping
+ --  is simple minded. If you need a more precise and target specific
+ --  signal handling, create a new s-intman.adb that will fit your needs.
+ 
+ --  This file assumes that:
+ 
+ --    SIGFPE, SIGILL, SIGSEGV and SIGBUS exist. They are mapped as follows:
+ --      SIGPFE  => Constraint_Error
+ --      SIGILL  => Program_Error
+ --      SIGSEGV => Storage_Error
+ --      SIGBUS  => Storage_Error
+ 
+ --    SIGINT exists and will be kept unmasked unless the pragma
+ --     Unreserve_All_Interrupts is specified anywhere in the application.
+ 
+ --    System.OS_Interface contains the following:
+ --      SIGADAABORT: the signal that will be used to abort tasks.
+ --      Unmasked: the OS specific set of signals that should be unmasked in
+ --                all the threads. SIGADAABORT is unmasked by
+ --                default
+ --      Reserved: the OS specific set of signals that are reserved.
+ 
+ with Interfaces.C;
+ --  used for int and other types
+ 
+ with System.OS_Interface;
+ --  used for various Constants, Signal and types
+ 
+ package body System.Interrupt_Management is
+ 
+    use Interfaces.C;
+    use System.OS_Interface;
+ 
+    type Interrupt_List is array (Interrupt_ID range <>) of Interrupt_ID;
+    Exception_Interrupts : constant Interrupt_List :=
+      (SIGFPE, SIGILL, SIGSEGV, SIGBUS);
+ 
+    Unreserve_All_Interrupts : Interfaces.C.int;
+    pragma Import
+      (C, Unreserve_All_Interrupts, "__gl_unreserve_all_interrupts");
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    procedure Notify_Exception (signo : Signal);
+    --  This function identifies the Ada exception to be raised using
+    --  the information when the system received a synchronous signal.
+    --  Since this function is machine and OS dependent, different code
+    --  has to be provided for different target.
+ 
+    ----------------------
+    -- Notify_Exception --
+    ----------------------
+ 
+    Signal_Mask : aliased sigset_t;
+    --  The set of signals handled by Notify_Exception
+ 
+    procedure Notify_Exception (signo : Signal) is
+       Result  : Interfaces.C.int;
+ 
+    begin
+       --  With the __builtin_longjmp, the signal mask is not restored, so we
+       --  need to restore it explicitely.
+ 
+       Result := pthread_sigmask (SIG_UNBLOCK, Signal_Mask'Access, null);
+       pragma Assert (Result = 0);
+ 
+       --  Check that treatment of exception propagation here
+       --  is consistent with treatment of the abort signal in
+       --  System.Task_Primitives.Operations.
+ 
+       case signo is
+          when SIGFPE =>
+             raise Constraint_Error;
+          when SIGILL =>
+             raise Program_Error;
+          when SIGSEGV =>
+             raise Storage_Error;
+          when SIGBUS =>
+             raise Storage_Error;
+          when others =>
+             null;
+       end case;
+    end Notify_Exception;
+ 
+    ---------------------------
+    -- Initialize_Interrupts --
+    ---------------------------
+ 
+    --  Nothing needs to be done on this platform.
+ 
+    procedure Initialize_Interrupts is
+    begin
+       null;
+    end Initialize_Interrupts;
+ 
+ -------------------------
+ -- Package Elaboration --
+ -------------------------
+ 
+ begin
+    declare
+       act     : aliased struct_sigaction;
+       old_act : aliased struct_sigaction;
+       Result  : System.OS_Interface.int;
+ 
+       function State (Int : Interrupt_ID) return Character;
+       pragma Import (C, State, "__gnat_get_interrupt_state");
+       --  Get interrupt state. Defined in a-init.c
+       --  The input argument is the interrupt number,
+       --  and the result is one of the following:
+ 
+       User    : constant Character := 'u';
+       Runtime : constant Character := 'r';
+       Default : constant Character := 's';
+       --    'n'   this interrupt not set by any Interrupt_State pragma
+       --    'u'   Interrupt_State pragma set state to User
+       --    'r'   Interrupt_State pragma set state to Runtime
+       --    's'   Interrupt_State pragma set state to System (use "default"
+       --           system handler)
+ 
+    begin
+       --  Need to call pthread_init very early because it is doing signal
+       --  initializations.
+ 
+       pthread_init;
+ 
+       Abort_Task_Interrupt := SIGADAABORT;
+ 
+       act.sa_handler := Notify_Exception'Address;
+ 
+       act.sa_flags := SA_SIGINFO;
+ 
+       --  Setting SA_SIGINFO asks the kernel to pass more than just the signal
+       --  number argument to the handler when it is called. The set of extra
+       --  parameters typically includes a pointer to a structure describing
+       --  the interrupted context. Although the Notify_Exception handler does
+       --  not use this information, it is actually required for the GCC/ZCX
+       --  exception propagation scheme because on some targets (at least
+       --  alpha-tru64), the structure contents are not even filled when this
+       --  flag is not set.
+ 
+       --  On some targets, we set sa_flags to SA_NODEFER so that during the
+       --  handler execution we do not change the Signal_Mask to be masked for
+       --  the Signal.
+ 
+       --  This is a temporary fix to the problem that the Signal_Mask is
+       --  not restored after the exception (longjmp) from the handler.
+       --  The right fix should be made in sigsetjmp so that we save
+       --  the Signal_Set and restore it after a longjmp.
+ 
+       --  Since SA_NODEFER is obsolete, instead we reset explicitely
+       --  the mask in the exception handler.
+ 
+       Result := sigemptyset (Signal_Mask'Access);
+       pragma Assert (Result = 0);
+ 
+       --  Add signals that map to Ada exceptions to the mask.
+       for J in Exception_Interrupts'Range loop
+          if State (Exception_Interrupts (J)) /= Default  then
+             Result :=
+             sigaddset (Signal_Mask'Access, Signal (Exception_Interrupts (J)));
+             pragma Assert (Result = 0);
+          end if;
+       end loop;
+ 
+       act.sa_mask := Signal_Mask;
+ 
+       pragma Assert (Keep_Unmasked = (Interrupt_ID'Range => False));
+       pragma Assert (Reserve = (Interrupt_ID'Range => False));
+ 
+       --  Process state of exception signals
+       for J in Exception_Interrupts'Range loop
+          if State (Exception_Interrupts (J)) /= User then
+             Keep_Unmasked (Exception_Interrupts (J)) := True;
+             Reserve (Exception_Interrupts (J)) := True;
+ 
+             if State (Exception_Interrupts (J)) /= Default then
+                Result :=
+                  sigaction
+                  (Signal (Exception_Interrupts (J)), act'Unchecked_Access,
+                   old_act'Unchecked_Access);
+                pragma Assert (Result = 0);
+             end if;
+          end if;
+       end loop;
+ 
+       if State (Abort_Task_Interrupt) /= User then
+          Keep_Unmasked (Abort_Task_Interrupt) := True;
+          Reserve (Abort_Task_Interrupt) := True;
+       end if;
+ 
+       --  Set SIGINT to unmasked state as long as it is not in "User"
+       --  state. Check for Unreserve_All_Interrupts last
+ 
+       if State (SIGINT) /= User then
+          Keep_Unmasked (SIGINT) := True;
+          Reserve (SIGINT) := True;
+       end if;
+ 
+       --  Check all signals for state that requires keeping them
+       --  unmasked and reserved
+ 
+       for J in Interrupt_ID'Range loop
+          if State (J) = Default or else State (J) = Runtime then
+             Keep_Unmasked (J) := True;
+             Reserve (J) := True;
+          end if;
+       end loop;
+ 
+       --  Add the set of signals that must always be unmasked for this target
+ 
+       for J in Unmasked'Range loop
+          Keep_Unmasked (Interrupt_ID (Unmasked (J))) := True;
+          Reserve (Interrupt_ID (Unmasked (J))) := True;
+       end loop;
+ 
+       --  Add target-specific reserved signals
+ 
+       for J in Reserved'Range loop
+          Reserve (Interrupt_ID (Reserved (J))) := True;
+       end loop;
+ 
+       --  Process pragma Unreserve_All_Interrupts. This overrides any
+       --  settings due to pragma Interrupt_State:
+ 
+       if Unreserve_All_Interrupts /= 0 then
+          Keep_Unmasked (SIGINT) := False;
+          Reserve (SIGINT) := False;
+       end if;
+ 
+       --  We do not have Signal 0 in reality. We just use this value
+       --  to identify non-existent signals (see s-intnam.ads). Therefore,
+       --  Signal 0 should not be used in all signal related operations hence
+       --  mark it as reserved.
+ 
+       Reserve (0) := True;
+    end;
+ end System.Interrupt_Management;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-intman-solaris.adb gcc-4.0.0/gcc/ada/s-intman-solaris.adb
*** gcc-3.4.3/gcc/ada/s-intman-solaris.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-intman-solaris.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,263 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --           S Y S T E M . I N T E R R U P T _ M A N A G E M E N T          --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a Solaris version of this package.
+ 
+ --  PLEASE DO NOT add any dependences on other packages.
+ --  This package is designed to work with or without tasking support.
+ 
+ --  Make a careful study of all signals available under the OS,
+ --  to see which need to be reserved, kept always unmasked,
+ --  or kept always unmasked.
+ 
+ --  Be on the lookout for special signals that
+ --  may be used by the thread library.
+ 
+ with Interfaces.C;
+ --  used for int
+ 
+ with System.OS_Interface;
+ --  used for various Constants, Signal and types
+ 
+ package body System.Interrupt_Management is
+ 
+    use Interfaces.C;
+    use System.OS_Interface;
+ 
+    type Interrupt_List is array (Interrupt_ID range <>) of Interrupt_ID;
+ 
+    Exception_Interrupts : constant Interrupt_List :=
+      (SIGFPE, SIGILL, SIGSEGV, SIGBUS);
+ 
+    Unreserve_All_Interrupts : Interfaces.C.int;
+    pragma Import
+      (C, Unreserve_All_Interrupts, "__gl_unreserve_all_interrupts");
+ 
+    ----------------------
+    -- Notify_Exception --
+    ----------------------
+ 
+    --  This function identifies the Ada exception to be raised using
+    --  the information when the system received a synchronous signal.
+    --  Since this function is machine and OS dependent, different code
+    --  has to be provided for different target.
+ 
+    procedure Notify_Exception
+      (signo   : Signal;
+       info    : access siginfo_t;
+       context : access ucontext_t);
+ 
+    ----------------------
+    -- Notify_Exception --
+    ----------------------
+ 
+    procedure Notify_Exception
+      (signo   : Signal;
+       info    : access siginfo_t;
+       context : access ucontext_t)
+    is
+       pragma Warnings (Off, context);
+ 
+    begin
+       --  Check that treatment of exception propagation here
+       --  is consistent with treatment of the abort signal in
+       --  System.Task_Primitives.Operations.
+ 
+       case signo is
+          when SIGFPE =>
+             case info.si_code is
+                when  FPE_INTDIV |
+                      FPE_INTOVF |
+                      FPE_FLTDIV |
+                      FPE_FLTOVF |
+                      FPE_FLTUND |
+                      FPE_FLTRES |
+                      FPE_FLTINV |
+                      FPE_FLTSUB =>
+ 
+                   raise Constraint_Error;
+ 
+                when others =>
+                   pragma Assert (False);
+                   null;
+             end case;
+ 
+          when SIGILL | SIGSEGV | SIGBUS  =>
+             raise Storage_Error;
+ 
+          when others =>
+             pragma Assert (False);
+             null;
+       end case;
+    end Notify_Exception;
+ 
+    ---------------------------
+    -- Initialize_Interrupts --
+    ---------------------------
+ 
+    --  Nothing needs to be done on this platform.
+ 
+    procedure Initialize_Interrupts is
+    begin
+       null;
+    end Initialize_Interrupts;
+ 
+ ----------------------------
+ -- Package Initialization --
+ ----------------------------
+ 
+ begin
+    declare
+       act     : aliased struct_sigaction;
+       old_act : aliased struct_sigaction;
+       mask    : aliased sigset_t;
+       Result  : Interfaces.C.int;
+ 
+       function State (Int : Interrupt_ID) return Character;
+       pragma Import (C, State, "__gnat_get_interrupt_state");
+       --  Get interrupt state.  Defined in a-init.c
+       --  The input argument is the interrupt number,
+       --  and the result is one of the following:
+       --
+       User    : constant Character := 'u';
+       Runtime : constant Character := 'r';
+       Default : constant Character := 's';
+       --    'n'   this interrupt not set by any Interrupt_State pragma
+       --    'u'   Interrupt_State pragma set state to User
+       --    'r'   Interrupt_State pragma set state to Runtime
+       --    's'   Interrupt_State pragma set state to System (use "default"
+       --           system handler)
+ 
+    begin
+       --  Need to call pthread_init very early because it is doing signal
+       --  initializations.
+ 
+       pthread_init;
+ 
+       --  Change this if you want to use another signal for task abort.
+       --  SIGTERM might be a good one.
+ 
+       Abort_Task_Interrupt := SIGABRT;
+ 
+       act.sa_handler := Notify_Exception'Address;
+ 
+       --  Set sa_flags to SA_NODEFER so that during the handler execution
+       --  we do not change the Signal_Mask to be masked for the Signal.
+       --  This is a temporary fix to the problem that the Signal_Mask is
+       --  not restored after the exception (longjmp) from the handler.
+       --  The right fix should be made in sigsetjmp so that we save
+       --  the Signal_Set and restore it after a longjmp.
+ 
+       --  In that case, this field should be changed back to 0. ??? (Dong-Ik)
+ 
+       act.sa_flags := 16;
+ 
+       Result := sigemptyset (mask'Access);
+       pragma Assert (Result = 0);
+ 
+       --  ??? For the same reason explained above, we can't mask these
+       --  signals because otherwise we won't be able to catch more than
+       --  one signal.
+ 
+       act.sa_mask := mask;
+ 
+       pragma Assert (Keep_Unmasked = (Interrupt_ID'Range => False));
+       pragma Assert (Reserve = (Interrupt_ID'Range => False));
+ 
+       for J in Exception_Interrupts'Range loop
+          if State (Exception_Interrupts (J)) /= User then
+             Keep_Unmasked (Exception_Interrupts (J)) := True;
+             Reserve (Exception_Interrupts (J)) := True;
+ 
+             if State (Exception_Interrupts (J)) /= Default then
+                Result :=
+                  sigaction
+                  (Signal (Exception_Interrupts (J)), act'Unchecked_Access,
+                   old_act'Unchecked_Access);
+                pragma Assert (Result = 0);
+             end if;
+          end if;
+       end loop;
+ 
+       if State (Abort_Task_Interrupt) /= User then
+          Keep_Unmasked (Abort_Task_Interrupt) := True;
+          Reserve (Abort_Task_Interrupt) := True;
+       end if;
+ 
+       --  Set SIGINT to unmasked state as long as it's
+       --  not in "User" state.  Check for Unreserve_All_Interrupts last
+ 
+       if State (SIGINT) /= User then
+          Keep_Unmasked (SIGINT) := True;
+          Reserve (SIGINT) := True;
+       end if;
+ 
+       --  Check all signals for state that requires keeping them
+       --  unmasked and reserved
+ 
+       for J in Interrupt_ID'Range loop
+          if State (J) = Default or else State (J) = Runtime then
+             Keep_Unmasked (J) := True;
+             Reserve (J) := True;
+          end if;
+       end loop;
+ 
+       --  Add the set of signals that must always be unmasked for this target
+ 
+       for J in Unmasked'Range loop
+          Keep_Unmasked (Interrupt_ID (Unmasked (J))) := True;
+          Reserve (Interrupt_ID (Unmasked (J))) := True;
+       end loop;
+ 
+       --  Add target-specific reserved signals
+ 
+       for J in Reserved'Range loop
+          Reserve (Interrupt_ID (Reserved (J))) := True;
+       end loop;
+ 
+       --  Process pragma Unreserve_All_Interrupts. This overrides any
+       --  settings due to pragma Interrupt_State:
+ 
+       if Unreserve_All_Interrupts /= 0 then
+          Keep_Unmasked (SIGINT) := False;
+          Reserve (SIGINT) := False;
+       end if;
+ 
+       --  We do not have Signal 0 in reality. We just use this value
+       --  to identify not existing signals (see s-intnam.ads). Therefore,
+       --  Signal 0 should not be used in all signal related operations hence
+       --  mark it as reserved.
+ 
+       Reserve (0) := True;
+    end;
+ end System.Interrupt_Management;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-intman-vms.adb gcc-4.0.0/gcc/ada/s-intman-vms.adb
*** gcc-3.4.3/gcc/ada/s-intman-vms.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-intman-vms.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,88 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --           S Y S T E M . I N T E R R U P T _ M A N A G E M E N T          --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --         Copyright (C) 1992-2002, Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a OpenVMS/Alpha version of this package.
+ 
+ --  PLEASE DO NOT add any dependences on other packages.
+ --  This package is designed to work with or without tasking support.
+ 
+ --  See the other warnings in the package specification before making
+ --  any modifications to this file.
+ 
+ with System.OS_Interface;
+ --  used for various Constants, Signal and types
+ 
+ package body System.Interrupt_Management is
+ 
+    use System.OS_Interface;
+    use type unsigned_long;
+ 
+    ---------------------------
+    -- Initialize_Interrupts --
+    ---------------------------
+ 
+    procedure Initialize_Interrupts is
+       Status : Cond_Value_Type;
+ 
+    begin
+       Sys_Crembx
+         (Status => Status,
+          Prmflg => False,
+          Chan   => Rcv_Interrupt_Chan,
+          Maxmsg => Interrupt_ID'Size,
+          Bufquo => Interrupt_Bufquo,
+          Lognam => "GNAT_Interrupt_Mailbox",
+          Flags  => CMB_M_READONLY);
+ 
+       pragma Assert ((Status and 1) = 1);
+ 
+       Sys_Assign
+         (Status => Status,
+          Devnam => "GNAT_Interrupt_Mailbox",
+          Chan   => Snd_Interrupt_Chan,
+          Flags  => AGN_M_WRITEONLY);
+ 
+       pragma Assert ((Status and 1) = 1);
+    end Initialize_Interrupts;
+ 
+ begin
+    --  Unused
+ 
+    Abort_Task_Interrupt := Interrupt_ID_0;
+ 
+    Reserve := Reserve or Keep_Unmasked or Keep_Masked;
+ 
+    Reserve (Interrupt_ID_0) := True;
+ 
+    Initialize_Interrupts;
+ end System.Interrupt_Management;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-intman-vms.ads gcc-4.0.0/gcc/ada/s-intman-vms.ads
*** gcc-3.4.3/gcc/ada/s-intman-vms.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-intman-vms.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,142 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --            S Y S T E M . I N T E R R U P T _ M A N A G E M E N T         --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --          Copyright (C) 1991-2003 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the Alpha/VMS version of this package.
+ --
+ --  This package encapsulates and centralizes information about
+ --  all uses of interrupts (or signals), including the
+ --  target-dependent mapping of interrupts (or signals) to exceptions.
+ 
+ --  PLEASE DO NOT add any with-clauses to this package.
+ --  This is designed to work for both tasking and non-tasking systems,
+ --  without pulling in any of the tasking support.
+ 
+ --  PLEASE DO NOT remove the Elaborate_Body pragma from this package.
+ --  Elaboration of this package should happen early, as most other
+ --  initializations depend on it.
+ --  Forcing immediate elaboration of the body also helps to enforce
+ --  the design assumption that this is a second-level
+ --  package, just one level above System.OS_Interface, with no
+ --  cross-dependences.
+ 
+ --  PLEASE DO NOT put any subprogram declarations with arguments of
+ --  type Interrupt_ID into the visible part of this package.
+ --  The type Interrupt_ID is used to derive the type in Ada.Interrupts,
+ --  and adding more operations to that type would be illegal according
+ --  to the Ada Reference Manual.  (This is the reason why the signals sets
+ --  below are implemented as visible arrays rather than functions.)
+ 
+ with System.OS_Interface;
+ --  used for Signal
+ --           sigset_t
+ 
+ package System.Interrupt_Management is
+ 
+    pragma Elaborate_Body;
+ 
+    type Interrupt_Mask is limited private;
+ 
+    type Interrupt_ID is new System.OS_Interface.Signal;
+ 
+    type Interrupt_Set is array (Interrupt_ID) of Boolean;
+ 
+    --  The following objects serve as constants, but are initialized
+    --  in the body to aid portability.  This permits us
+    --  to use more portable names for interrupts,
+    --  where distinct names may map to the same interrupt ID value.
+    --  For example, suppose SIGRARE is a signal that is not defined on
+    --  all systems, but is always reserved when it is defined.
+    --  If we have the convention that ID zero is not used for any "real"
+    --  signals, and SIGRARE = 0 when SIGRARE is not one of the locally
+    --  supported signals, we can write
+    --     Reserved (SIGRARE) := true;
+    --  and the initialization code will be portable.
+ 
+    Abort_Task_Interrupt : Interrupt_ID;
+    --  The interrupt that is used to implement task abortion,
+    --  if an interrupt is used for that purpose.
+    --  This is one of the reserved interrupts.
+ 
+    Keep_Unmasked : Interrupt_Set := (others => False);
+    --  Keep_Unmasked (I) is true iff the interrupt I is
+    --  one that must be kept unmasked at all times,
+    --  except (perhaps) for short critical sections.
+    --  This includes interrupts that are mapped to exceptions
+    --  (see System.Interrupt_Exceptions.Is_Exception), but may also
+    --  include interrupts (e.g. timer) that need to be kept unmasked
+    --  for other reasons.
+    --  Where interrupts are implemented as OS signals, and signal masking
+    --  is per-task, the interrupt should be unmasked in ALL TASKS.
+ 
+    Reserve : Interrupt_Set := (others => False);
+    --  Reserve (I) is true iff the interrupt I is one that
+    --  cannot be permitted to be attached to a user handler.
+    --  The possible reasons are many.  For example,
+    --  it may be mapped to an exception, used to implement task abortion,
+    --  or used to implement time delays.
+ 
+    Keep_Masked : Interrupt_Set := (others => False);
+    --  Keep_Masked (I) is true iff the interrupt I must always be masked.
+    --  Where interrupts are implemented as OS signals, and signal masking
+    --  is per-task, the interrupt should be masked in ALL TASKS.
+    --  There might not be any interrupts in this class, depending on
+    --  the environment.  For example, if interrupts are OS signals
+    --  and signal masking is per-task, use of the sigwait operation
+    --  requires the signal be masked in all tasks.
+ 
+    procedure Initialize_Interrupts;
+    --  On systems where there is no signal inheritance between tasks (e.g
+    --  VxWorks, GNU/LinuxThreads), this procedure is used to initialize
+    --  interrupts handling in each task. Otherwise this function should
+    --  only be called by initialize in this package body.
+ 
+ private
+ 
+    use type System.OS_Interface.unsigned_long;
+ 
+    type Interrupt_Mask is new System.OS_Interface.sigset_t;
+ 
+    --  Interrupts on VMS are implemented with a mailbox. A QIO read is
+    --  registered on the Rcv channel and the interrupt occurs by registering
+    --  a QIO write on the Snd channel. The maximum number of pending
+    --  interrupts is arbitrarily set at 1000. One nice feature of using
+    --  a mailbox is that it is trivially extendable to cross process
+    --  interrupts.
+ 
+    Rcv_Interrupt_Chan : System.OS_Interface.unsigned_short := 0;
+    Snd_Interrupt_Chan : System.OS_Interface.unsigned_short := 0;
+    Interrupt_Mailbox  : Interrupt_ID := 0;
+    Interrupt_Bufquo   : System.OS_Interface.unsigned_long
+                         := 1000 * (Interrupt_ID'Size / 8);
+ 
+ end System.Interrupt_Management;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-intman-vxworks.adb gcc-4.0.0/gcc/ada/s-intman-vxworks.adb
*** gcc-3.4.3/gcc/ada/s-intman-vxworks.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-intman-vxworks.adb	Wed Dec  8 11:24:38 2004
***************
*** 0 ****
--- 1,183 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --           S Y S T E M . I N T E R R U P T _ M A N A G E M E N T          --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the VxWorks version of this package.
+ 
+ --  It is likely to need tailoring to fit each operating system
+ --  and machine architecture.
+ 
+ --  PLEASE DO NOT add any dependences on other packages.
+ --  This package is designed to work with or without tasking support.
+ 
+ --  See the other warnings in the package specification before making
+ --  any modifications to this file.
+ 
+ --  Make a careful study of all signals available under the OS,
+ --  to see which need to be reserved, kept always unmasked,
+ --  or kept always unmasked.
+ --  Be on the lookout for special signals that
+ --  may be used by the thread library.
+ 
+ with Interfaces.C;
+ 
+ with System.OS_Interface;
+ --  used for various Constants, Signal and types
+ 
+ package body System.Interrupt_Management is
+ 
+    use System.OS_Interface;
+    use type Interfaces.C.int;
+ 
+    type Signal_List is array (Signal_ID range <>) of Signal_ID;
+    Exception_Signals : constant Signal_List (1 .. 4) :=
+                          (SIGFPE, SIGILL, SIGSEGV, SIGBUS);
+ 
+    --  Keep these variables global so that they are initialized only once
+    --  What are "these variables" ???, I see only one
+ 
+    Exception_Action : aliased struct_sigaction;
+ 
+    procedure Map_And_Raise_Exception (signo : Signal);
+    pragma Import (C, Map_And_Raise_Exception, "__gnat_map_signal");
+    --  Map signal to Ada exception and raise it.  Different versions
+    --  of VxWorks need different mappings.
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    procedure Notify_Exception (signo : Signal);
+    --  Identify the Ada exception to be raised using
+    --  the information when the system received a synchronous signal.
+ 
+    ----------------------
+    -- Notify_Exception --
+    ----------------------
+ 
+    procedure Notify_Exception (signo : Signal) is
+       Mask   : aliased sigset_t;
+ 
+       Result : int;
+       pragma Unreferenced (Result);
+ 
+    begin
+       Result := pthread_sigmask (SIG_SETMASK, null, Mask'Unchecked_Access);
+       Result := sigdelset (Mask'Access, signo);
+       Result := pthread_sigmask (SIG_SETMASK, Mask'Unchecked_Access, null);
+ 
+       Map_And_Raise_Exception (signo);
+    end Notify_Exception;
+ 
+    ---------------------------
+    -- Initialize_Interrupts --
+    ---------------------------
+ 
+    --  Since there is no signal inheritance between VxWorks tasks, we need
+    --  to initialize signal handling in each task.
+ 
+    procedure Initialize_Interrupts is
+       Result  : int;
+       old_act : aliased struct_sigaction;
+ 
+    begin
+       for J in Exception_Signals'Range loop
+          Result :=
+            sigaction
+              (Signal (Exception_Signals (J)), Exception_Action'Access,
+               old_act'Unchecked_Access);
+          pragma Assert (Result = 0);
+       end loop;
+    end Initialize_Interrupts;
+ 
+ begin
+    declare
+       mask   : aliased sigset_t;
+       Result : int;
+ 
+       function State (Int : Interrupt_ID) return Character;
+       pragma Import (C, State, "__gnat_get_interrupt_state");
+       --  Get interrupt state.  Defined in a-init.c
+       --  The input argument is the interrupt number,
+       --  and the result is one of the following:
+ 
+       Runtime : constant Character := 'r';
+       Default : constant Character := 's';
+       --    'n'   this interrupt not set by any Interrupt_State pragma
+       --    'u'   Interrupt_State pragma set state to User
+       --    'r'   Interrupt_State pragma set state to Runtime
+       --    's'   Interrupt_State pragma set state to System (use "default"
+       --           system handler)
+ 
+    begin
+       --  Initialize signal handling
+ 
+       --  Change this if you want to use another signal for task abort.
+       --  SIGTERM might be a good one.
+ 
+       Abort_Task_Signal := SIGABRT;
+ 
+       Exception_Action.sa_handler := Notify_Exception'Address;
+       Exception_Action.sa_flags := SA_ONSTACK;
+       Result := sigemptyset (mask'Access);
+       pragma Assert (Result = 0);
+ 
+       for J in Exception_Signals'Range loop
+          Result := sigaddset (mask'Access, Signal (Exception_Signals (J)));
+          pragma Assert (Result = 0);
+       end loop;
+ 
+       Exception_Action.sa_mask := mask;
+ 
+       --  Initialize hardware interrupt handling
+ 
+       pragma Assert (Reserve = (Interrupt_ID'Range => False));
+ 
+       --  Check all interrupts for state that requires keeping them reserved
+ 
+       for J in Interrupt_ID'Range loop
+          if State (J) = Default or else State (J) = Runtime then
+             Reserve (J) := True;
+          end if;
+       end loop;
+ 
+       --  Add exception signals to the set of unmasked signals
+ 
+       for J in Exception_Signals'Range loop
+          Keep_Unmasked (Exception_Signals (J)) := True;
+       end loop;
+ 
+       --  The abort signal must also be unmasked
+ 
+       Keep_Unmasked (Abort_Task_Signal) := True;
+    end;
+ end System.Interrupt_Management;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-intman-vxworks.ads gcc-4.0.0/gcc/ada/s-intman-vxworks.ads
*** gcc-3.4.3/gcc/ada/s-intman-vxworks.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-intman-vxworks.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,123 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --            S Y S T E M . I N T E R R U P T _ M A N A G E M E N T         --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the VxWorks version of this package.
+ 
+ --  This package encapsulates and centralizes information about all
+ --  uses of interrupts (or signals), including the target-dependent
+ --  mapping of interrupts (or signals) to exceptions.
+ 
+ --  Unlike the original design, System.Interrupt_Management can only
+ --  be used for tasking systems.
+ 
+ --  PLEASE DO NOT remove the Elaborate_Body pragma from this package.
+ --  Elaboration of this package should happen early, as most other
+ --  initializations depend on it. Forcing immediate elaboration of
+ --  the body also helps to enforce the design assumption that this
+ --  is a second-level package, just one level above System.OS_Interface
+ --  with no cross-dependencies.
+ 
+ --  PLEASE DO NOT put any subprogram declarations with arguments of
+ --  type Interrupt_ID into the visible part of this package. The type
+ --  Interrupt_ID is used to derive the type in Ada.Interrupts, and
+ --  adding more operations to that type would be illegal according
+ --  to the Ada Reference Manual. This is the reason why the signals
+ --  sets are implemeneted using visible arrays rather than functions.
+ 
+ with System.OS_Interface;
+ --  used for sigset_t
+ 
+ with Interfaces.C;
+ --  used for int
+ 
+ package System.Interrupt_Management is
+ 
+    pragma Elaborate_Body;
+ 
+    type Interrupt_Mask is limited private;
+ 
+    type Interrupt_ID is new Interfaces.C.int
+      range 0 .. System.OS_Interface.Max_Interrupt;
+ 
+    type Interrupt_Set is array (Interrupt_ID) of Boolean;
+ 
+    subtype Signal_ID is Interrupt_ID
+      range 0 .. Interfaces.C."-" (System.OS_Interface.NSIG, 1);
+ 
+    type Signal_Set is array (Signal_ID) of Boolean;
+ 
+    --  The following objects serve as constants, but are initialized
+    --  in the body to aid portability.  This permits us to use more
+    --  portable names for interrupts, where distinct names may map to
+    --  the same interrupt ID value.
+    --
+    --  For example, suppose SIGRARE is a signal that is not defined on
+    --  all systems, but is always reserved when it is defined. If we
+    --  have the convention that ID zero is not used for any "real"
+    --  signals, and SIGRARE = 0 when SIGRARE is not one of the locally
+    --  supported signals, we can write
+    --     Reserved (SIGRARE) := true;
+    --  and the initialization code will be portable.
+ 
+    Abort_Task_Signal : Signal_ID;
+    --  The signal that is used to implement task abortion if
+    --  an interrupt is used for that purpose. This is one of the
+    --  reserved signals.
+ 
+    Keep_Unmasked : Signal_Set := (others => False);
+    --  Keep_Unmasked (I) is true iff the signal I is one that must
+    --  that must be kept unmasked at all times, except (perhaps) for
+    --  short critical sections. This includes signals that are
+    --  mapped to exceptions, but may also include interrupts
+    --  (e.g. timer) that need to be kept unmasked for other
+    --  reasons. Where signal masking is per-task, the signal should be
+    --  unmasked in ALL TASKS.
+ 
+    Reserve : Interrupt_Set := (others => False);
+    --  Reserve (I) is true iff the interrupt I is one that cannot be
+    --  permitted to be attached to a user handler. The possible reasons
+    --  are many. For example, it may be mapped to an exception used to
+    --  implement task abortion, or used to implement time delays.
+ 
+    procedure Initialize_Interrupts;
+    --  On systems where there is no signal inheritance between tasks (e.g
+    --  VxWorks, GNU/LinuxThreads), this procedure is used to initialize
+    --  interrupts handling in each task. Otherwise this function should
+    --  only be called by initialize in this package body.
+ 
+ private
+    type Interrupt_Mask is new System.OS_Interface.sigset_t;
+    --  In some implementation Interrupt_Mask can be represented
+    --  as a linked list.
+ 
+ end System.Interrupt_Management;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-maccod.ads gcc-4.0.0/gcc/ada/s-maccod.ads
*** gcc-3.4.3/gcc/ada/s-maccod.ads	Tue Oct 21 13:42:14 2003
--- gcc-4.0.0/gcc/ada/s-maccod.ads	Mon Jan  3 15:43:23 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 31,37 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This package provides machine code support, both for instrinsic machine
  --  operations, and also for machine code statements. See GNAT documentation
  --  for full details.
  
--- 31,37 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This package provides machine code support, both for intrinsic machine
  --  operations, and also for machine code statements. See GNAT documentation
  --  for full details.
  
*************** pragma Pure (Machine_Code);
*** 97,120 ****
       Outputs  : Asm_Output_Operand := No_Output_Operands;
       Inputs   : Asm_Input_Operand_List;
       Clobber  : String  := "";
!      Volatile : Boolean := False)
!      return     Asm_Insn;
  
     function Asm (
       Template : String;
       Outputs  : Asm_Output_Operand_List;
       Inputs   : Asm_Input_Operand := No_Input_Operands;
       Clobber  : String  := "";
!      Volatile : Boolean := False)
!      return     Asm_Insn;
  
     function Asm (
       Template : String;
       Outputs  : Asm_Output_Operand := No_Output_Operands;
       Inputs   : Asm_Input_Operand  := No_Input_Operands;
       Clobber  : String  := "";
!      Volatile : Boolean := False)
!      return     Asm_Insn;
  
     pragma Import (Intrinsic, Asm);
  
--- 97,117 ----
       Outputs  : Asm_Output_Operand := No_Output_Operands;
       Inputs   : Asm_Input_Operand_List;
       Clobber  : String  := "";
!      Volatile : Boolean := False) return Asm_Insn;
  
     function Asm (
       Template : String;
       Outputs  : Asm_Output_Operand_List;
       Inputs   : Asm_Input_Operand := No_Input_Operands;
       Clobber  : String  := "";
!      Volatile : Boolean := False) return Asm_Insn;
  
     function Asm (
       Template : String;
       Outputs  : Asm_Output_Operand := No_Output_Operands;
       Inputs   : Asm_Input_Operand  := No_Input_Operands;
       Clobber  : String  := "";
!      Volatile : Boolean := False) return Asm_Insn;
  
     pragma Import (Intrinsic, Asm);
  
diff -Nrcpad gcc-3.4.3/gcc/ada/s-mastop-irix.adb gcc-4.0.0/gcc/ada/s-mastop-irix.adb
*** gcc-3.4.3/gcc/ada/s-mastop-irix.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-mastop-irix.adb	Mon Jul 26 10:41:42 2004
***************
*** 0 ****
--- 1,446 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                     SYSTEM.MACHINE_STATE_OPERATIONS                      --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                         (Version for IRIX/MIPS)                          --
+ --                                                                          --
+ --          Copyright (C) 1999-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This version of Ada.Exceptions.Machine_State_Operations is for use on
+ --  SGI Irix systems. By means of compile time conditional calculations, it
+ --  can handle both n32/n64 and o32 modes.
+ 
+ with System.Machine_Code; use System.Machine_Code;
+ with System.Memory;
+ with System.Soft_Links; use System.Soft_Links;
+ with Unchecked_Conversion;
+ 
+ package body System.Machine_State_Operations is
+ 
+    use System.Storage_Elements;
+    use System.Exceptions;
+ 
+    --  The exc_unwind function in libexc operats on a Sigcontext
+ 
+    --  Type sigcontext_t is defined in /usr/include/sys/signal.h.
+    --  We define an equivalent Ada type here. From the comments in
+    --  signal.h:
+ 
+    --    sigcontext is not part of the ABI - so this version is used to
+    --    handle 32 and 64 bit applications - it is a constant size regardless
+    --    of compilation mode, and always returns 64 bit register values
+ 
+    type Uns32 is mod 2 ** 32;
+    type Uns64 is mod 2 ** 64;
+ 
+    type Uns32_Ptr is access all Uns32;
+    type Uns64_Array is array (Integer range <>) of Uns64;
+ 
+    type Reg_Array is array (0 .. 31) of Uns64;
+ 
+    type Sigcontext is record
+       SC_Regmask           : Uns32;          --  0
+       SC_Status            : Uns32;          --  4
+       SC_PC                : Uns64;          --  8
+       SC_Regs              : Reg_Array;      --  16
+       SC_Fpregs            : Reg_Array;      --  272
+       SC_Ownedfp           : Uns32;          --  528
+       SC_Fpc_Csr           : Uns32;          --  532
+       SC_Fpc_Eir           : Uns32;          --  536
+       SC_Ssflags           : Uns32;          --  540
+       SC_Mdhi              : Uns64;          --  544
+       SC_Mdlo              : Uns64;          --  552
+       SC_Cause             : Uns64;          --  560
+       SC_Badvaddr          : Uns64;          --  568
+       SC_Triggersave       : Uns64;          --  576
+       SC_Sigset            : Uns64;          --  584
+       SC_Fp_Rounded_Result : Uns64;          --  592
+       SC_Pancake           : Uns64_Array (0 .. 5);
+       SC_Pad               : Uns64_Array (0 .. 26);
+    end record;
+ 
+    type Sigcontext_Ptr is access all Sigcontext;
+ 
+    SC_Regs_Pos   : constant String := "16";
+    SC_Fpregs_Pos : constant String := "272";
+    --  Byte offset of the Integer and Floating Point register save areas
+    --  within the Sigcontext.
+ 
+    function To_Sigcontext_Ptr is
+      new Unchecked_Conversion (Machine_State, Sigcontext_Ptr);
+ 
+    type Addr_Int is mod 2 ** Long_Integer'Size;
+    --  An unsigned integer type whose size is the same as System.Address.
+    --  We rely on the fact that Long_Integer'Size = System.Address'Size in
+    --  all ABIs.  Type Addr_Int can be converted to Uns64.
+ 
+    function To_Code_Loc is new Unchecked_Conversion (Addr_Int, Code_Loc);
+    function To_Addr_Int is new Unchecked_Conversion (System.Address, Addr_Int);
+    function To_Uns32_Ptr is new Unchecked_Conversion (Addr_Int, Uns32_Ptr);
+ 
+    --------------------------------
+    -- ABI-Dependent Declarations --
+    --------------------------------
+ 
+    o32  : constant Boolean := System.Word_Size = 32;
+    n32  : constant Boolean := System.Word_Size = 64;
+    o32n : constant Natural := Boolean'Pos (o32);
+    n32n : constant Natural := Boolean'Pos (n32);
+    --  Flags to indicate which ABI is in effect for this compilation. For the
+    --  purposes of this unit, the n32 and n64 ABI's are identical.
+ 
+    LSC : constant Character := Character'Val (o32n * Character'Pos ('w') +
+                                               n32n * Character'Pos ('d'));
+    --  This is 'w' for o32, and 'd' for n32/n64, used for constructing the
+    --  load/store instructions used to save/restore machine instructions.
+ 
+    Roff : constant Character := Character'Val (o32n * Character'Pos ('4') +
+                                                n32n * Character'Pos ('0'));
+    --  Offset from first byte of a __uint64 register save location where
+    --  the register value is stored.  For n32/64 we store the entire 64
+    --  bit register into the uint64.  For o32, only 32 bits are stored
+    --  at an offset of 4 bytes. This is used as part of expressions with
+    --  '+' signs on both sides, so a null offset has to be '0' and not ' '
+    --  to avoid assembler syntax errors on "X + + Y" in the latter case.
+ 
+    procedure Update_GP (Scp : Sigcontext_Ptr);
+ 
+    ---------------
+    -- Update_GP --
+    ---------------
+ 
+    procedure Update_GP (Scp : Sigcontext_Ptr) is
+ 
+       type F_op  is mod 2 ** 6;
+       type F_reg is mod 2 ** 5;
+       type F_imm is new Short_Integer;
+ 
+       type I_Type is record
+          op    : F_op;
+          rs    : F_reg;
+          rt    : F_reg;
+          imm   : F_imm;
+       end record;
+ 
+       pragma Pack (I_Type);
+       for I_Type'Size use 32;
+ 
+       type I_Type_Ptr is access all I_Type;
+ 
+       LW : constant F_op := 2#100011#;
+       Reg_GP : constant := 28;
+ 
+       type Address_Int is mod 2 ** Standard'Address_Size;
+       function To_I_Type_Ptr is new
+         Unchecked_Conversion (Address_Int, I_Type_Ptr);
+ 
+       Ret_Ins : constant I_Type_Ptr := To_I_Type_Ptr (Address_Int (Scp.SC_PC));
+       GP_Ptr  : Uns32_Ptr;
+ 
+    begin
+       if Ret_Ins.op = LW and then Ret_Ins.rt = Reg_GP then
+          GP_Ptr := To_Uns32_Ptr
+            (Addr_Int (Scp.SC_Regs (Integer (Ret_Ins.rs)))
+             + Addr_Int (Ret_Ins.imm));
+          Scp.SC_Regs (Reg_GP) := Uns64 (GP_Ptr.all);
+       end if;
+    end Update_GP;
+ 
+    ----------------------------
+    -- Allocate_Machine_State --
+    ----------------------------
+ 
+    function Allocate_Machine_State return Machine_State is
+    begin
+       return Machine_State
+         (Memory.Alloc (Sigcontext'Max_Size_In_Storage_Elements));
+    end Allocate_Machine_State;
+ 
+    -------------------
+    -- Enter_Handler --
+    -------------------
+ 
+    procedure Enter_Handler (M : Machine_State; Handler : Handler_Loc) is
+       pragma Warnings (Off, M);
+       pragma Warnings (Off, Handler);
+ 
+       LOADI : constant String (1 .. 2) := 'l' & LSC;
+       --  This is "lw" in o32 mode, and "ld" in n32/n64 mode
+ 
+       LOADF : constant String (1 .. 4) := 'l' & LSC & "c1";
+       --  This is "lwc1" in o32 mode and "ldc1" in n32/n64 mode
+ 
+    begin
+       --  Restore integer registers from machine state. Note that we know
+       --  that $4 points to M, and $5 points to Handler, since this is
+       --  the standard calling sequence
+ 
+       Asm (LOADI & " $16,  16*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
+       Asm (LOADI & " $17,  17*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
+       Asm (LOADI & " $18,  18*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
+       Asm (LOADI & " $19,  19*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
+       Asm (LOADI & " $20,  20*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
+       Asm (LOADI & " $21,  21*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
+       Asm (LOADI & " $22,  22*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
+       Asm (LOADI & " $23,  23*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
+       Asm (LOADI & " $24,  24*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
+       Asm (LOADI & " $25,  25*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
+       Asm (LOADI & " $26,  26*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
+       Asm (LOADI & " $27,  27*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
+       Asm (LOADI & " $28,  28*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
+       Asm (LOADI & " $29,  29*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
+       Asm (LOADI & " $30,  30*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
+       Asm (LOADI & " $31,  31*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
+ 
+       --  Restore floating-point registers from machine state
+ 
+       Asm (LOADF & " $f16, 16*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
+       Asm (LOADF & " $f17, 17*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
+       Asm (LOADF & " $f18, 18*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
+       Asm (LOADF & " $f19, 19*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
+       Asm (LOADF & " $f20, 20*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
+       Asm (LOADF & " $f21, 21*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
+       Asm (LOADF & " $f22, 22*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
+       Asm (LOADF & " $f23, 23*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
+       Asm (LOADF & " $f24, 24*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
+       Asm (LOADF & " $f25, 25*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
+       Asm (LOADF & " $f26, 26*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
+       Asm (LOADF & " $f27, 27*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
+       Asm (LOADF & " $f28, 28*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
+       Asm (LOADF & " $f29, 29*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
+       Asm (LOADF & " $f30, 30*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
+       Asm (LOADF & " $f31, 31*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
+ 
+       --  Jump directly to the handler
+ 
+       Asm ("jr  $5");
+    end Enter_Handler;
+ 
+    ----------------
+    -- Fetch_Code --
+    ----------------
+ 
+    function Fetch_Code (Loc : Code_Loc) return Code_Loc is
+    begin
+       return Loc;
+    end Fetch_Code;
+ 
+    ------------------------
+    -- Free_Machine_State --
+    ------------------------
+ 
+    procedure Free_Machine_State (M : in out Machine_State) is
+    begin
+       Memory.Free (Address (M));
+       M := Machine_State (Null_Address);
+    end Free_Machine_State;
+ 
+    ------------------
+    -- Get_Code_Loc --
+    ------------------
+ 
+    function Get_Code_Loc (M : Machine_State) return Code_Loc is
+       SC : constant Sigcontext_Ptr := To_Sigcontext_Ptr (M);
+    begin
+       return To_Code_Loc (Addr_Int (SC.SC_PC));
+    end Get_Code_Loc;
+ 
+    --------------------------
+    -- Machine_State_Length --
+    --------------------------
+ 
+    function Machine_State_Length return Storage_Offset is
+    begin
+       return Sigcontext'Max_Size_In_Storage_Elements;
+    end Machine_State_Length;
+ 
+    ---------------
+    -- Pop_Frame --
+    ---------------
+ 
+    procedure Pop_Frame
+      (M    : Machine_State;
+       Info : Subprogram_Info_Type)
+    is
+       pragma Warnings (Off, Info);
+ 
+       Scp : constant Sigcontext_Ptr := To_Sigcontext_Ptr (M);
+ 
+       procedure Exc_Unwind (Scp : Sigcontext_Ptr; Fde : Long_Integer := 0);
+       pragma Import (C, Exc_Unwind, "exc_unwind");
+ 
+       --  ??? Calling exc_unwind in the current setup does not work and
+       --  triggers the emission of system warning messages. Why it does
+       --  not work remains to be investigated. Part of the problem is
+       --  probably a section naming issue (e.g. .eh_frame/.debug_frame).
+ 
+       --  Instead of letting the call take place for nothing and emit
+       --  messages we don't expect, we just arrange things to pretend it
+       --  occurred and failed.
+ 
+       --  ??? Until this is fixed, we shall document that the backtrace
+       --  computation facility does not work, and we inhibit the pragma below
+       --  because we arrange for the call not to be emitted and the linker
+       --  complains when a library is linked in but resolves nothing.
+ 
+       --  pragma Linker_Options ("-lexc");
+ 
+    begin
+       --  exc_unwind is apparently not thread-safe under IRIX, so protect it
+       --  against race conditions within the GNAT run time.
+       --  ??? Note that we might want to use a fine grained lock here since
+       --  Lock_Task is used in many other places.
+ 
+       Lock_Task.all;
+ 
+       if False then
+          Exc_Unwind (Scp);
+       else
+          Scp.SC_PC := 0;
+       end if;
+ 
+       Unlock_Task.all;
+ 
+       if Scp.SC_PC = 0 or else Scp.SC_PC = 1 then
+ 
+          --  A return value of 0 or 1 means exc_unwind couldn't find a parent
+          --  frame. Propagate_Exception expects a zero return address to
+          --  indicate TOS.
+ 
+          Scp.SC_PC := 0;
+ 
+       else
+          --  Set the GP to restore to the caller value (not callee value)
+          --  This is done only in o32 mode. In n32/n64 mode, GP is a normal
+          --  callee save register
+ 
+          if o32 then
+             Update_GP (Scp);
+          end if;
+ 
+          --  Adjust the return address to the call site, not the
+          --  instruction following the branch delay slot.  This may
+          --  be necessary if the last instruction of a pragma No_Return
+          --  subprogram is a call. The first instruction following the
+          --  delay slot may be the start of another subprogram. We back
+          --  off the address by 8, which points safely into the middle
+          --  of the generated subprogram code, avoiding end effects.
+ 
+          Scp.SC_PC := Scp.SC_PC - 8;
+       end if;
+    end Pop_Frame;
+ 
+    -----------------------
+    -- Set_Machine_State --
+    -----------------------
+ 
+    procedure Set_Machine_State (M : Machine_State) is
+ 
+       STOREI : constant String (1 .. 2) := 's' & LSC;
+       --  This is "sw" in o32 mode, and "sd" in n32 mode
+ 
+       STOREF : constant String (1 .. 4) := 's' & LSC & "c1";
+       --  This is "swc1" in o32 mode and "sdc1" in n32 mode
+ 
+       Scp : Sigcontext_Ptr;
+ 
+    begin
+       --  Save the integer registers. Note that we know that $4 points
+       --  to M, since that is where the first parameter is passed.
+       --  Restore integer registers from machine state. Note that we know
+       --  that $4 points to M since this is the standard calling sequence
+ 
+       <<Past_Prolog>>
+ 
+       Asm (STOREI & " $16,  16*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
+       Asm (STOREI & " $17,  17*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
+       Asm (STOREI & " $18,  18*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
+       Asm (STOREI & " $19,  19*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
+       Asm (STOREI & " $20,  20*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
+       Asm (STOREI & " $21,  21*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
+       Asm (STOREI & " $22,  22*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
+       Asm (STOREI & " $23,  23*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
+       Asm (STOREI & " $24,  24*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
+       Asm (STOREI & " $25,  25*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
+       Asm (STOREI & " $26,  26*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
+       Asm (STOREI & " $27,  27*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
+       Asm (STOREI & " $28,  28*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
+       Asm (STOREI & " $29,  29*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
+       Asm (STOREI & " $30,  30*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
+       Asm (STOREI & " $31,  31*8+" & Roff & "+" & SC_Regs_Pos & "($4)");
+ 
+       --  Restore floating-point registers from machine state
+ 
+       Asm (STOREF & " $f16, 16*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
+       Asm (STOREF & " $f17, 17*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
+       Asm (STOREF & " $f18, 18*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
+       Asm (STOREF & " $f19, 19*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
+       Asm (STOREF & " $f20, 20*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
+       Asm (STOREF & " $f21, 21*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
+       Asm (STOREF & " $f22, 22*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
+       Asm (STOREF & " $f23, 23*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
+       Asm (STOREF & " $f24, 24*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
+       Asm (STOREF & " $f25, 25*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
+       Asm (STOREF & " $f26, 26*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
+       Asm (STOREF & " $f27, 27*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
+       Asm (STOREF & " $f28, 28*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
+       Asm (STOREF & " $f29, 29*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
+       Asm (STOREF & " $f30, 30*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
+       Asm (STOREF & " $f31, 31*8+" & Roff & "+" & SC_Fpregs_Pos & "($4)");
+ 
+       --  Set the PC value for the context to a location after the
+       --  prolog has been executed.
+ 
+       Scp := To_Sigcontext_Ptr (M);
+       Scp.SC_PC := Uns64 (To_Addr_Int (Past_Prolog'Address));
+ 
+       --  We saved the state *inside* this routine, but what we want is
+       --  the state at the call site. So we need to do one pop operation.
+       --  This pop operation will properly set the PC value in the machine
+       --  state, so there is no need to save PC in the above code.
+ 
+       Pop_Frame (M, Set_Machine_State'Address);
+    end Set_Machine_State;
+ 
+    ------------------------------
+    -- Set_Signal_Machine_State --
+    ------------------------------
+ 
+    procedure Set_Signal_Machine_State
+      (M       : Machine_State;
+       Context : System.Address)
+    is
+       pragma Warnings (Off, M);
+       pragma Warnings (Off, Context);
+ 
+    begin
+       null;
+    end Set_Signal_Machine_State;
+ 
+ end System.Machine_State_Operations;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-mastop-tru64.adb gcc-4.0.0/gcc/ada/s-mastop-tru64.adb
*** gcc-3.4.3/gcc/ada/s-mastop-tru64.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-mastop-tru64.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,181 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                     SYSTEM.MACHINE_STATE_OPERATIONS                      --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                         (Version for Alpha/Dec Unix)                     --
+ --                                                                          --
+ --           Copyright (C) 1999-2003 Ada Core Technologies, Inc.            --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This version of System.Machine_State_Operations is for use on
+ --  Alpha systems running DEC Unix.
+ 
+ with System.Memory;
+ 
+ package body System.Machine_State_Operations is
+ 
+    use System.Exceptions;
+ 
+    pragma Linker_Options ("-lexc");
+    --  Needed for definitions of exc_capture_context and exc_virtual_unwind
+ 
+    ----------------------------
+    -- Allocate_Machine_State --
+    ----------------------------
+ 
+    function Allocate_Machine_State return Machine_State is
+       use System.Storage_Elements;
+ 
+       function c_machine_state_length return Storage_Offset;
+       pragma Import (C, c_machine_state_length, "__gnat_machine_state_length");
+ 
+    begin
+       return Machine_State
+         (Memory.Alloc (Memory.size_t (c_machine_state_length)));
+    end Allocate_Machine_State;
+ 
+    -------------------
+    -- Enter_Handler --
+    -------------------
+ 
+    procedure Enter_Handler (M : Machine_State; Handler : Handler_Loc) is
+       procedure c_enter_handler (M : Machine_State; Handler : Handler_Loc);
+       pragma Import (C, c_enter_handler, "__gnat_enter_handler");
+ 
+    begin
+       c_enter_handler (M, Handler);
+    end Enter_Handler;
+ 
+    ----------------
+    -- Fetch_Code --
+    ----------------
+ 
+    function Fetch_Code (Loc : Code_Loc) return Code_Loc is
+    begin
+       return Loc;
+    end Fetch_Code;
+ 
+    ------------------------
+    -- Free_Machine_State --
+    ------------------------
+ 
+    procedure Free_Machine_State (M : in out Machine_State) is
+    begin
+       Memory.Free (Address (M));
+       M := Machine_State (Null_Address);
+    end Free_Machine_State;
+ 
+    ------------------
+    -- Get_Code_Loc --
+    ------------------
+ 
+    function Get_Code_Loc (M : Machine_State) return Code_Loc is
+       Asm_Call_Size : constant := 4;
+ 
+       function c_get_code_loc (M : Machine_State) return Code_Loc;
+       pragma Import (C, c_get_code_loc, "__gnat_get_code_loc");
+ 
+       --  Code_Loc returned by c_get_code_loc is the return point but here we
+       --  want Get_Code_Loc to return the call point. Under DEC Unix a call
+       --  asm instruction takes 4 bytes. So we must remove this value from
+       --  c_get_code_loc to have the call point.
+ 
+       Loc : constant Code_Loc := c_get_code_loc (M);
+ 
+    begin
+       if Loc = 0 then
+          return 0;
+       else
+          return Loc - Asm_Call_Size;
+       end if;
+    end Get_Code_Loc;
+ 
+    --------------------------
+    -- Machine_State_Length --
+    --------------------------
+ 
+    function Machine_State_Length
+      return System.Storage_Elements.Storage_Offset
+    is
+       use System.Storage_Elements;
+ 
+       function c_machine_state_length return Storage_Offset;
+       pragma Import (C, c_machine_state_length, "__gnat_machine_state_length");
+ 
+    begin
+       return c_machine_state_length;
+    end Machine_State_Length;
+ 
+    ---------------
+    -- Pop_Frame --
+    ---------------
+ 
+    procedure Pop_Frame
+      (M    : Machine_State;
+       Info : Subprogram_Info_Type)
+    is
+       pragma Warnings (Off, Info);
+ 
+       procedure exc_virtual_unwind
+         (Fcn  : System.Address;
+          M    : Machine_State);
+       pragma Import (C, exc_virtual_unwind, "exc_virtual_unwind");
+ 
+    begin
+       exc_virtual_unwind (System.Null_Address, M);
+    end Pop_Frame;
+ 
+    -----------------------
+    -- Set_Machine_State --
+    -----------------------
+ 
+    procedure Set_Machine_State (M : Machine_State) is
+       procedure c_capture_context (M : Machine_State);
+       pragma Import (C, c_capture_context, "exc_capture_context");
+ 
+    begin
+       c_capture_context (M);
+       Pop_Frame (M, System.Null_Address);
+    end Set_Machine_State;
+ 
+    ------------------------------
+    -- Set_Signal_Machine_State --
+    ------------------------------
+ 
+    procedure Set_Signal_Machine_State
+      (M       : Machine_State;
+       Context : System.Address)
+    is
+       pragma Warnings (Off, M);
+       pragma Warnings (Off, Context);
+ 
+    begin
+       null;
+    end Set_Signal_Machine_State;
+ 
+ end System.Machine_State_Operations;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-mastop-vms.adb gcc-4.0.0/gcc/ada/s-mastop-vms.adb
*** gcc-3.4.3/gcc/ada/s-mastop-vms.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-mastop-vms.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,339 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                     SYSTEM.MACHINE_STATE_OPERATIONS                      --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                         (Version for Alpha/VMS)                          --
+ --                                                                          --
+ --          Copyright (C) 2001-2002 Ada Core Technologies, Inc.             --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This version of System.Machine_State_Operations is for use on
+ --  Alpha systems running VMS.
+ 
+ with System.Memory;
+ with System.Aux_DEC; use System.Aux_DEC;
+ with Unchecked_Conversion;
+ 
+ package body System.Machine_State_Operations is
+ 
+    use System.Exceptions;
+    subtype Cond_Value_Type is Unsigned_Longword;
+ 
+    --  Record layouts copied from Starlet.
+ 
+    type ICB_Fflags_Bits_Type is record
+       Exception_Frame : Boolean;
+       Ast_Frame       : Boolean;
+       Bottom_Of_Stack : Boolean;
+       Base_Frame      : Boolean;
+       Filler_1        : Unsigned_20;
+    end record;
+ 
+    for ICB_Fflags_Bits_Type use record
+       Exception_Frame at 0 range 0 .. 0;
+       Ast_Frame       at 0 range 1 .. 1;
+       Bottom_Of_Stack at 0 range 2 .. 2;
+       Base_Frame      at 0 range 3 .. 3;
+       Filler_1        at 0 range 4 .. 23;
+    end record;
+    for ICB_Fflags_Bits_Type'Size use 24;
+ 
+    type ICB_Hdr_Quad_Type is record
+       Context_Length : Unsigned_Longword;
+       Fflags_Bits    : ICB_Fflags_Bits_Type;
+       Block_Version  : Unsigned_Byte;
+    end record;
+ 
+    for ICB_Hdr_Quad_Type use record
+       Context_Length at 0 range 0 .. 31;
+       Fflags_Bits    at 4 range 0 .. 23;
+       Block_Version  at 7 range 0 .. 7;
+    end record;
+    for ICB_Hdr_Quad_Type'Size use 64;
+ 
+    type Invo_Context_Blk_Type is record
+ 
+       Hdr_Quad : ICB_Hdr_Quad_Type;
+       --  The first quadword contains:
+       --    o  The length of the structure in bytes (a longword field)
+       --    o  The frame flags (a 3 byte field of bits)
+       --    o  The version number (a 1 byte field)
+ 
+       Procedure_Descriptor : Unsigned_Quadword;
+       --  The address of the procedure descriptor for the procedure
+ 
+       Program_Counter : Integer_64;
+       --  The current PC of a given procedure invocation
+ 
+       Processor_Status : Integer_64;
+       --  The current PS of a given procedure invocation
+ 
+       Ireg : Unsigned_Quadword_Array (0 .. 30);
+       Freg : Unsigned_Quadword_Array (0 .. 30);
+       --  The register contents areas. 31 for scalars, 31 for float.
+ 
+       System_Defined : Unsigned_Quadword_Array (0 .. 1);
+       --  The following is an "internal" area that's reserved for use by
+       --  the operating system. It's size may vary over time.
+ 
+       --  Chfctx_Addr : Unsigned_Quadword;
+       --  Defined as a comment since it overlaps other fields
+ 
+       Filler_1             : String (1 .. 0);
+       --  Align to octaword
+    end record;
+ 
+    for Invo_Context_Blk_Type use record
+       Hdr_Quad             at   0 range 0 .. 63;
+       Procedure_Descriptor at   8 range 0 .. 63;
+       Program_Counter      at  16 range 0 .. 63;
+       Processor_Status     at  24 range 0 .. 63;
+       Ireg                 at  32 range 0 .. 1983;
+       Freg                 at 280 range 0 .. 1983;
+       System_Defined       at 528 range 0 .. 127;
+ 
+       --  Component representation spec(s) below are defined as
+       --  comments since they overlap other fields
+ 
+       --  Chfctx_Addr at 528 range 0 .. 63;
+ 
+       Filler_1 at 544 range 0 .. -1;
+    end record;
+    for Invo_Context_Blk_Type'Size use 4352;
+ 
+    subtype Invo_Handle_Type is Unsigned_Longword;
+ 
+    type Invo_Handle_Access_Type is access all Invo_Handle_Type;
+ 
+    function Fetch is new Fetch_From_Address (Code_Loc);
+ 
+    function To_Invo_Handle_Access is new Unchecked_Conversion
+      (Machine_State, Invo_Handle_Access_Type);
+ 
+    function To_Machine_State is new Unchecked_Conversion
+      (System.Address, Machine_State);
+ 
+    ----------------------------
+    -- Allocate_Machine_State --
+    ----------------------------
+ 
+    function Allocate_Machine_State return Machine_State is
+    begin
+       return To_Machine_State
+         (Memory.Alloc (Invo_Handle_Type'Max_Size_In_Storage_Elements));
+    end Allocate_Machine_State;
+ 
+    -------------------
+    -- Enter_Handler --
+    -------------------
+ 
+    procedure Enter_Handler (M : Machine_State; Handler : Handler_Loc) is
+       procedure Get_Invo_Context (
+          Result       : out Unsigned_Longword; -- return value
+          Invo_Handle  : Invo_Handle_Type;
+          Invo_Context : out Invo_Context_Blk_Type);
+ 
+       pragma Interface (External, Get_Invo_Context);
+ 
+       pragma Import_Valued_Procedure (Get_Invo_Context, "LIB$GET_INVO_CONTEXT",
+          (Unsigned_Longword, Invo_Handle_Type, Invo_Context_Blk_Type),
+          (Value, Value, Reference));
+ 
+       ICB : Invo_Context_Blk_Type;
+ 
+       procedure Goto_Unwind (
+          Status      : out Cond_Value_Type; -- return value
+          Target_Invo : Address := Address_Zero;
+          Target_PC   : Address := Address_Zero;
+          New_R0      : Unsigned_Quadword := Unsigned_Quadword'Null_Parameter;
+          New_R1      : Unsigned_Quadword := Unsigned_Quadword'Null_Parameter);
+ 
+       pragma Interface (External, Goto_Unwind);
+ 
+       pragma Import_Valued_Procedure
+         (Goto_Unwind, "SYS$GOTO_UNWIND",
+          (Cond_Value_Type, Address, Address,
+           Unsigned_Quadword, Unsigned_Quadword),
+          (Value, Reference, Reference,
+           Reference, Reference));
+ 
+       Status : Cond_Value_Type;
+ 
+    begin
+       Get_Invo_Context (Status, To_Invo_Handle_Access (M).all, ICB);
+       Goto_Unwind
+         (Status, System.Address (To_Invo_Handle_Access (M).all), Handler);
+    end Enter_Handler;
+ 
+    ----------------
+    -- Fetch_Code --
+    ----------------
+ 
+    function Fetch_Code (Loc : Code_Loc) return Code_Loc is
+    begin
+       --  The starting address is in the second longword pointed to by Loc.
+ 
+       return Fetch (System.Aux_DEC."+" (Loc, 8));
+    end Fetch_Code;
+ 
+    ------------------------
+    -- Free_Machine_State --
+    ------------------------
+ 
+    procedure Free_Machine_State (M : in out Machine_State) is
+    begin
+       Memory.Free (Address (M));
+       M := Machine_State (Null_Address);
+    end Free_Machine_State;
+ 
+    ------------------
+    -- Get_Code_Loc --
+    ------------------
+ 
+    function Get_Code_Loc (M : Machine_State) return Code_Loc is
+       procedure Get_Invo_Context (
+          Result       : out Unsigned_Longword; -- return value
+          Invo_Handle  : in  Invo_Handle_Type;
+          Invo_Context : out Invo_Context_Blk_Type);
+ 
+       pragma Interface (External, Get_Invo_Context);
+ 
+       pragma Import_Valued_Procedure (Get_Invo_Context, "LIB$GET_INVO_CONTEXT",
+          (Unsigned_Longword, Invo_Handle_Type, Invo_Context_Blk_Type),
+          (Value, Value, Reference));
+ 
+       Asm_Call_Size : constant := 4;
+       --  Under VMS a call
+       --  asm instruction takes 4 bytes. So we must remove this amount.
+ 
+       ICB : Invo_Context_Blk_Type;
+       Status : Cond_Value_Type;
+ 
+    begin
+       Get_Invo_Context (Status, To_Invo_Handle_Access (M).all, ICB);
+ 
+       if (Status and 1) /= 1 then
+          return Code_Loc (System.Null_Address);
+       end if;
+ 
+       return Code_Loc (ICB.Program_Counter - Asm_Call_Size);
+    end Get_Code_Loc;
+ 
+    --------------------------
+    -- Machine_State_Length --
+    --------------------------
+ 
+    function Machine_State_Length
+      return System.Storage_Elements.Storage_Offset
+    is
+       use System.Storage_Elements;
+ 
+    begin
+       return Invo_Handle_Type'Size / 8;
+    end Machine_State_Length;
+ 
+    ---------------
+    -- Pop_Frame --
+    ---------------
+ 
+    procedure Pop_Frame
+      (M    : Machine_State;
+       Info : Subprogram_Info_Type)
+    is
+       pragma Warnings (Off, Info);
+ 
+       procedure Get_Prev_Invo_Handle (
+          Result : out Invo_Handle_Type; -- return value
+          ICB    : in  Invo_Handle_Type);
+ 
+       pragma Interface (External, Get_Prev_Invo_Handle);
+ 
+       pragma Import_Valued_Procedure
+         (Get_Prev_Invo_Handle, "LIB$GET_PREV_INVO_HANDLE",
+          (Invo_Handle_Type, Invo_Handle_Type),
+          (Value, Value));
+ 
+       Prev_Handle : aliased Invo_Handle_Type;
+ 
+    begin
+       Get_Prev_Invo_Handle (Prev_Handle, To_Invo_Handle_Access (M).all);
+       To_Invo_Handle_Access (M).all := Prev_Handle;
+    end Pop_Frame;
+ 
+    -----------------------
+    -- Set_Machine_State --
+    -----------------------
+ 
+    procedure Set_Machine_State (M : Machine_State) is
+ 
+       procedure Get_Curr_Invo_Context
+         (Invo_Context : out Invo_Context_Blk_Type);
+ 
+       pragma Interface (External, Get_Curr_Invo_Context);
+ 
+       pragma Import_Valued_Procedure
+         (Get_Curr_Invo_Context, "LIB$GET_CURR_INVO_CONTEXT",
+          (Invo_Context_Blk_Type),
+          (Reference));
+ 
+       procedure Get_Invo_Handle (
+          Result       : out Invo_Handle_Type; -- return value
+          Invo_Context : in Invo_Context_Blk_Type);
+ 
+       pragma Interface (External, Get_Invo_Handle);
+ 
+       pragma Import_Valued_Procedure (Get_Invo_Handle, "LIB$GET_INVO_HANDLE",
+          (Invo_Handle_Type, Invo_Context_Blk_Type),
+          (Value, Reference));
+ 
+       ICB : Invo_Context_Blk_Type;
+       Invo_Handle : aliased Invo_Handle_Type;
+ 
+    begin
+       Get_Curr_Invo_Context (ICB);
+       Get_Invo_Handle (Invo_Handle, ICB);
+       To_Invo_Handle_Access (M).all := Invo_Handle;
+       Pop_Frame (M, System.Null_Address);
+    end Set_Machine_State;
+ 
+    ------------------------------
+    -- Set_Signal_Machine_State --
+    ------------------------------
+ 
+    procedure Set_Signal_Machine_State
+      (M       : Machine_State;
+       Context : System.Address)
+    is
+       pragma Warnings (Off, M);
+       pragma Warnings (Off, Context);
+ 
+    begin
+       null;
+    end Set_Signal_Machine_State;
+ 
+ end System.Machine_State_Operations;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-mastop-x86.adb gcc-4.0.0/gcc/ada/s-mastop-x86.adb
*** gcc-3.4.3/gcc/ada/s-mastop-x86.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-mastop-x86.adb	Thu Jul 15 20:34:34 2004
***************
*** 0 ****
--- 1,594 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                     SYSTEM.MACHINE_STATE_OPERATIONS                      --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                            (Version for x86)                             --
+ --                                                                          --
+ --           Copyright (C) 1999-2004 Ada Core Technologies, Inc.            --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  Note: it is very important that this unit not generate any exception
+ --  tables of any kind. Otherwise we get a nasty rtsfind recursion problem.
+ --  This means no subprograms, including implicitly generated ones.
+ 
+ with Unchecked_Conversion;
+ with System.Storage_Elements;
+ with System.Machine_Code; use System.Machine_Code;
+ with System.Memory;
+ 
+ package body System.Machine_State_Operations is
+ 
+    function "+" (Left, Right : Address) return Address;
+    pragma Import (Intrinsic, "+");
+    --  Provide addition operation on type Address (this may not be directly
+    --  available if type System.Address is non-private and the operations on
+    --  the type are made abstract to hide them from public users of System).
+ 
+    use System.Exceptions;
+ 
+    type Uns8  is mod 2 ** 8;
+    type Uns32 is mod 2 ** 32;
+ 
+    type Bits5 is mod 2 ** 5;
+    type Bits6 is mod 2 ** 6;
+ 
+    function To_Address is new Unchecked_Conversion (Uns32, Address);
+ 
+    type Uns32_Ptr is access all Uns32;
+    function To_Uns32_Ptr is new Unchecked_Conversion (Uns32,   Uns32_Ptr);
+ 
+    --  Note: the type Uns32 has an alignment of 4. However, in some cases
+    --  values of type Uns32_Ptr will not be aligned (notably in the case
+    --  where we get the immediate field from an instruction). However this
+    --  does not matter in practice, since the x86 does not require that
+    --  operands be aligned.
+ 
+    ----------------------
+    -- General Approach --
+    ----------------------
+ 
+    --  For the x86 version of this unit, the Subprogram_Info_Type values
+    --  are simply the starting code address for the subprogram. Popping
+    --  of stack frames works by analyzing the code in the prolog, and
+    --  deriving from this analysis the necessary information for restoring
+    --  the registers, including the return point.
+ 
+    ---------------------------
+    -- Description of Prolog --
+    ---------------------------
+ 
+    --  If a frame pointer is present, the prolog looks like
+ 
+    --     pushl %ebp
+    --     movl  %esp,%ebp
+    --     subl  $nnn,%esp     omitted if nnn = 0
+    --     pushl %edi          omitted if edi not used
+    --     pushl %esi          omitted if esi not used
+    --     pushl %ebx          omitted if ebx not used
+ 
+    --  If a frame pointer is not present, the prolog looks like
+ 
+    --     subl  $nnn,%esp     omitted if nnn = 0
+    --     pushl %ebp          omitted if ebp not used
+    --     pushl %edi          omitted if edi not used
+    --     pushl %esi          omitted if esi not used
+    --     pushl %ebx          omitted if ebx not used
+ 
+    --  Note: any or all of the save over call registers may be used and
+    --  if so, will be saved using pushl as shown above. The order of the
+    --  pushl instructions will be as shown above for gcc generated code,
+    --  but the code in this unit does not assume this.
+ 
+    -------------------------
+    -- Description of Call --
+    -------------------------
+ 
+    --  A call looks like:
+ 
+    --     pushl ...           push parameters
+    --     pushl ...
+    --     call  ...           perform the call
+    --     addl  $nnn,%esp     omitted if no parameters
+ 
+    --  Note that we are not absolutely guaranteed that the call is always
+    --  followed by an addl operation that readjusts %esp for this particular
+    --  call. There are two reasons for this:
+ 
+    --    1) The addl can be delayed and combined in the case where more than
+    --       one call appears in sequence. This can be suppressed by using the
+    --       switch -fno-defer-pop and for Ada code, we automatically use
+    --       this switch, but we could still be dealing with C code that was
+    --       compiled without using this switch.
+ 
+    --    2) Scheduling may result in moving the addl instruction away from
+    --       the call. It is not clear if this actually can happen at the
+    --       current time, but it is certainly conceptually possible.
+ 
+    --  The addl after the call is important, since we need to be able to
+    --  restore the proper %esp value when we pop the stack. However, we do
+    --  not try to compensate for either of the above effects. As noted above,
+    --  case 1 does not occur for Ada code, and it does not appear in practice
+    --  that case 2 occurs with any significant frequency (we have never seen
+    --  an example so far for gcc generated code).
+ 
+    --  Furthermore, it is only in the case of -fomit-frame-pointer that we
+    --  really get into trouble from not properly restoring %esp. If we have
+    --  a frame pointer, then the worst that happens is that %esp is slightly
+    --  more depressed than it should be. This could waste a bit of space on
+    --  the stack, and even in some cases cause a storage leak on the stack,
+    --  but it will not affect the functional correctness of the processing.
+ 
+    ----------------------------------------
+    -- Definitions of Instruction Formats --
+    ----------------------------------------
+ 
+    type Rcode is (eax, ecx, edx, ebx, esp, ebp, esi, edi);
+    pragma Warnings (Off, Rcode);
+    --  Code indicating which register is referenced in an instruction
+ 
+    --  The following define the format of a pushl instruction
+ 
+    Op_pushl : constant Bits5 := 2#01010#;
+ 
+    type Ins_pushl is record
+       Op  : Bits5 := Op_pushl;
+       Reg : Rcode;
+    end record;
+ 
+    for Ins_pushl use record
+       Op  at 0 range 3 .. 7;
+       Reg at 0 range 0 .. 2;
+    end record;
+ 
+    Ins_pushl_ebp : constant Ins_pushl := (Op_pushl, Reg => ebp);
+ 
+    type Ins_pushl_Ptr is access all Ins_pushl;
+ 
+    --  For the movl %esp,%ebp instruction, we only need to know the length
+    --  because we simply skip past it when we analyze the prolog.
+ 
+    Ins_movl_length : constant := 2;
+ 
+    --  The following define the format of addl/subl esp instructions
+ 
+    Op_Immed : constant Bits6 := 2#100000#;
+ 
+    Op2_addl_Immed : constant Bits5 := 2#11100#;
+    pragma Unreferenced (Op2_addl_Immed);
+ 
+    Op2_subl_Immed : constant Bits5 := 2#11101#;
+ 
+    type Word_Byte is (Word, Byte);
+    pragma Unreferenced (Byte);
+ 
+    type Ins_addl_subl_byte is record
+       Op   : Bits6;           -- Set to Op_Immed
+       w    : Word_Byte;       -- Word/Byte flag (set to 1 = byte)
+       s    : Boolean;         -- Sign extension bit (1 = extend)
+       Op2  : Bits5;           -- Secondary opcode
+       Reg  : Rcode;           -- Register
+       Imm8 : Uns8;            -- Immediate operand
+    end record;
+ 
+    for Ins_addl_subl_byte use record
+       Op   at 0 range 2 .. 7;
+       w    at 0 range 1 .. 1;
+       s    at 0 range 0 .. 0;
+       Op2  at 1 range 3 .. 7;
+       Reg  at 1 range 0 .. 2;
+       Imm8 at 2 range 0 .. 7;
+    end record;
+ 
+    type Ins_addl_subl_word is record
+       Op    : Bits6;          -- Set to Op_Immed
+       w     : Word_Byte;      -- Word/Byte flag (set to 0 = word)
+       s     : Boolean;        -- Sign extension bit (1 = extend)
+       Op2   : Bits5;          -- Secondary opcode
+       Reg   : Rcode;          -- Register
+       Imm32 : Uns32;          -- Immediate operand
+    end record;
+ 
+    for Ins_addl_subl_word use record
+       Op    at 0 range 2 .. 7;
+       w     at 0 range 1 .. 1;
+       s     at 0 range 0 .. 0;
+       Op2   at 1 range 3 .. 7;
+       Reg   at 1 range 0 .. 2;
+       Imm32 at 2 range 0 .. 31;
+    end record;
+ 
+    type Ins_addl_subl_byte_Ptr is access all Ins_addl_subl_byte;
+    type Ins_addl_subl_word_Ptr is access all Ins_addl_subl_word;
+ 
+    ---------------------
+    -- Prolog Analysis --
+    ---------------------
+ 
+    --  The analysis of the prolog answers the following questions:
+ 
+    --    1. Is %ebp used as a frame pointer?
+    --    2. How far is SP depressed (i.e. what is the stack frame size)
+    --    3. Which registers are saved in the prolog, and in what order
+ 
+    --  The following data structure stores the answers to these questions
+ 
+    subtype SOC is Rcode range ebx .. edi;
+    --  Possible save over call registers
+ 
+    SOC_Max : constant := 4;
+    --  Max number of SOC registers that can be pushed
+ 
+    type SOC_Push_Regs_Type is array (1 .. 4) of Rcode;
+    --  Used to hold the register codes of pushed SOC registers
+ 
+    type Prolog_Type is record
+ 
+       Frame_Reg : Boolean;
+       --  This is set to True if %ebp is used as a frame register, and
+       --  False otherwise (in the False case, %ebp may be saved in the
+       --  usual manner along with the other SOC registers).
+ 
+       Frame_Length : Uns32;
+       --  Amount by which ESP is decremented on entry, includes the effects
+       --  of push's of save over call registers as indicated above, e.g. if
+       --  the prolog of a routine is:
+       --
+       --    pushl %ebp
+       --    movl %esp,%ebp
+       --    subl $424,%esp
+       --    pushl %edi
+       --    pushl %esi
+       --    pushl %ebx
+       --
+       --  Then the value of Frame_Length would be 436 (424 + 3 * 4). A
+       --  precise definition is that it is:
+       --
+       --    %esp on entry   minus   %esp after last SOC push
+       --
+       --  That definition applies both in the frame pointer present and
+       --  the frame pointer absent cases.
+ 
+       Num_SOC_Push : Integer range 0 .. SOC_Max;
+       --  Number of save over call registers actually saved by pushl
+       --  instructions (other than the initial pushl to save the frame
+       --  pointer if a frame pointer is in use).
+ 
+       SOC_Push_Regs : SOC_Push_Regs_Type;
+       --  The First Num_SOC_Push entries of this array are used to contain
+       --  the codes for the SOC registers, in the order in which they were
+       --  pushed. Note that this array excludes %ebp if it is used as a frame
+       --  register, since although %ebp is still considered an SOC register
+       --  in this case, it is saved and restored by a separate mechanism.
+       --  Also we will never see %esp represented in this list. Again, it is
+       --  true that %esp is saved over call, but it is restored by a separate
+       --  mechanism.
+ 
+    end record;
+ 
+    procedure Analyze_Prolog (A : Address; Prolog : out Prolog_Type);
+    --  Given the address of the start of the prolog for a procedure,
+    --  analyze the instructions of the prolog, and set Prolog to contain
+    --  the information obtained from this analysis.
+ 
+    ----------------------------------
+    -- Machine_State_Representation --
+    ----------------------------------
+ 
+    --  The type Machine_State is defined in the body of Ada.Exceptions as
+    --  a Storage_Array of length 1 .. Machine_State_Length. But really it
+    --  has structure as defined here. We use the structureless declaration
+    --  in Ada.Exceptions to avoid this unit from being implementation
+    --  dependent. The actual definition of Machine_State is as follows:
+ 
+    type SOC_Regs_Type is array (SOC) of Uns32;
+ 
+    type MState is record
+       eip : Uns32;
+       --  The instruction pointer location (which is the return point
+       --  value from the next level down in all cases).
+ 
+       Regs : SOC_Regs_Type;
+       --  Values of the save over call registers
+    end record;
+ 
+    for MState use record
+       eip  at 0 range 0 .. 31;
+       Regs at 4 range 0 .. 5 * 32 - 1;
+    end record;
+    --  Note: the routines Enter_Handler, and Set_Machine_State reference
+    --  the fields in this structure non-symbolically.
+ 
+    type MState_Ptr is access all MState;
+ 
+    function To_MState_Ptr is
+      new Unchecked_Conversion (Machine_State, MState_Ptr);
+ 
+    ----------------------------
+    -- Allocate_Machine_State --
+    ----------------------------
+ 
+    function Allocate_Machine_State return Machine_State is
+       use System.Storage_Elements;
+ 
+    begin
+       return Machine_State
+         (Memory.Alloc (MState'Max_Size_In_Storage_Elements));
+    end Allocate_Machine_State;
+ 
+    --------------------
+    -- Analyze_Prolog --
+    --------------------
+ 
+    procedure Analyze_Prolog (A : Address; Prolog : out Prolog_Type) is
+       Ptr : Address;
+       Ppl : Ins_pushl_Ptr;
+       Pas : Ins_addl_subl_byte_Ptr;
+ 
+       function To_Ins_pushl_Ptr is
+         new Unchecked_Conversion (Address, Ins_pushl_Ptr);
+ 
+       function To_Ins_addl_subl_byte_Ptr is
+         new Unchecked_Conversion (Address, Ins_addl_subl_byte_Ptr);
+ 
+       function To_Ins_addl_subl_word_Ptr is
+         new Unchecked_Conversion (Address, Ins_addl_subl_word_Ptr);
+ 
+    begin
+       Ptr := A;
+       Prolog.Frame_Length := 0;
+ 
+       if Ptr = Null_Address then
+          Prolog.Num_SOC_Push := 0;
+          Prolog.Frame_Reg := True;
+          return;
+       end if;
+ 
+       if To_Ins_pushl_Ptr (Ptr).all = Ins_pushl_ebp then
+          Ptr := Ptr + 1 + Ins_movl_length;
+          Prolog.Frame_Reg := True;
+       else
+          Prolog.Frame_Reg := False;
+       end if;
+ 
+       Pas := To_Ins_addl_subl_byte_Ptr (Ptr);
+ 
+       if Pas.Op = Op_Immed
+         and then Pas.Op2 = Op2_subl_Immed
+         and then Pas.Reg = esp
+       then
+          if Pas.w = Word then
+             Prolog.Frame_Length := Prolog.Frame_Length +
+                                      To_Ins_addl_subl_word_Ptr (Ptr).Imm32;
+             Ptr := Ptr + 6;
+ 
+          else
+             Prolog.Frame_Length := Prolog.Frame_Length + Uns32 (Pas.Imm8);
+             Ptr := Ptr + 3;
+ 
+             --  Note: we ignore sign extension, since a sign extended
+             --  value that was negative would imply a ludicrous frame size.
+          end if;
+       end if;
+ 
+       --  Now scan push instructions for SOC registers
+ 
+       Prolog.Num_SOC_Push := 0;
+ 
+       loop
+          Ppl := To_Ins_pushl_Ptr (Ptr);
+ 
+          if Ppl.Op = Op_pushl and then Ppl.Reg in SOC then
+             Prolog.Num_SOC_Push := Prolog.Num_SOC_Push + 1;
+             Prolog.SOC_Push_Regs (Prolog.Num_SOC_Push) := Ppl.Reg;
+             Prolog.Frame_Length := Prolog.Frame_Length + 4;
+             Ptr := Ptr + 1;
+ 
+          else
+             exit;
+          end if;
+       end loop;
+ 
+    end Analyze_Prolog;
+ 
+    -------------------
+    -- Enter_Handler --
+    -------------------
+ 
+    procedure Enter_Handler (M : Machine_State; Handler : Handler_Loc) is
+    begin
+       Asm ("mov %0,%%edx", Inputs => Machine_State'Asm_Input ("r", M));
+       Asm ("mov %0,%%eax", Inputs => Handler_Loc'Asm_Input ("r", Handler));
+ 
+       Asm ("mov 4(%%edx),%%ebx");    -- M.Regs (ebx)
+       Asm ("mov 12(%%edx),%%ebp");   -- M.Regs (ebp)
+       Asm ("mov 16(%%edx),%%esi");   -- M.Regs (esi)
+       Asm ("mov 20(%%edx),%%edi");   -- M.Regs (edi)
+       Asm ("mov 8(%%edx),%%esp");    -- M.Regs (esp)
+       Asm ("jmp %*%%eax");
+    end Enter_Handler;
+ 
+    ----------------
+    -- Fetch_Code --
+    ----------------
+ 
+    function Fetch_Code (Loc : Code_Loc) return Code_Loc is
+    begin
+       return Loc;
+    end Fetch_Code;
+ 
+    ------------------------
+    -- Free_Machine_State --
+    ------------------------
+ 
+    procedure Free_Machine_State (M : in out Machine_State) is
+    begin
+       Memory.Free (Address (M));
+       M := Machine_State (Null_Address);
+    end Free_Machine_State;
+ 
+    ------------------
+    -- Get_Code_Loc --
+    ------------------
+ 
+    function Get_Code_Loc (M : Machine_State) return Code_Loc is
+ 
+       Asm_Call_Size : constant := 2;
+       --  Minimum size for a call instruction under ix86. Using the minimum
+       --  size is safe here as the call point computed from the return point
+       --  will always be inside the call instruction.
+ 
+       MS : constant MState_Ptr := To_MState_Ptr (M);
+ 
+    begin
+       if MS.eip = 0 then
+          return To_Address (MS.eip);
+       else
+          --  When doing a call the return address is pushed to the stack.
+          --  We want to return the call point address, so we subtract
+          --  Asm_Call_Size from the return address. This value is set
+          --  to 5 as an asm call takes 5 bytes on x86 architectures.
+ 
+          return To_Address (MS.eip - Asm_Call_Size);
+       end if;
+    end Get_Code_Loc;
+ 
+    --------------------------
+    -- Machine_State_Length --
+    --------------------------
+ 
+    function Machine_State_Length
+      return System.Storage_Elements.Storage_Offset
+    is
+    begin
+       return MState'Max_Size_In_Storage_Elements;
+    end Machine_State_Length;
+ 
+    ---------------
+    -- Pop_Frame --
+    ---------------
+ 
+    procedure Pop_Frame
+      (M    : Machine_State;
+       Info : Subprogram_Info_Type)
+    is
+       MS  : constant MState_Ptr := To_MState_Ptr (M);
+       PL  : Prolog_Type;
+ 
+       SOC_Ptr : Uns32;
+       --  Pointer to stack location after last SOC push
+ 
+       Rtn_Ptr : Uns32;
+       --  Pointer to stack location containing return address
+ 
+    begin
+       Analyze_Prolog (Info, PL);
+ 
+       --  Case of frame register, use EBP, safer than ESP
+ 
+       if PL.Frame_Reg then
+          SOC_Ptr := MS.Regs (ebp) - PL.Frame_Length;
+          Rtn_Ptr := MS.Regs (ebp) + 4;
+          MS.Regs (ebp) := To_Uns32_Ptr (MS.Regs (ebp)).all;
+ 
+       --  No frame pointer, use ESP, and hope we have it exactly right!
+ 
+       else
+          SOC_Ptr := MS.Regs (esp);
+          Rtn_Ptr := SOC_Ptr + PL.Frame_Length;
+       end if;
+ 
+       --  Get saved values of SOC registers
+ 
+       for J in reverse 1 .. PL.Num_SOC_Push loop
+          MS.Regs (PL.SOC_Push_Regs (J)) := To_Uns32_Ptr (SOC_Ptr).all;
+          SOC_Ptr := SOC_Ptr + 4;
+       end loop;
+ 
+       MS.eip := To_Uns32_Ptr (Rtn_Ptr).all;
+       MS.Regs (esp) := Rtn_Ptr + 4;
+    end Pop_Frame;
+ 
+    -----------------------
+    -- Set_Machine_State --
+    -----------------------
+ 
+    procedure Set_Machine_State (M : Machine_State) is
+       N : constant Asm_Output_Operand := No_Output_Operands;
+ 
+    begin
+       Asm ("mov %0,%%edx", N, Machine_State'Asm_Input ("r", M));
+ 
+       --  At this stage, we have the following situation (note that we
+       --  are assuming that the -fomit-frame-pointer switch has not been
+       --  used in compiling this procedure.
+ 
+       --     (value of M)
+       --     return point
+       --     old ebp          <------ current ebp/esp value
+ 
+       --  The values of registers ebx/esi/edi are unchanged from entry
+       --  so they have the values we want, and %edx points to the parameter
+       --  value M, so we can store these values directly.
+ 
+       Asm ("mov %%ebx,4(%%edx)");    -- M.Regs (ebx)
+       Asm ("mov %%esi,16(%%edx)");   -- M.Regs (esi)
+       Asm ("mov %%edi,20(%%edx)");   -- M.Regs (edi)
+ 
+       --  The desired value of ebp is the old value
+ 
+       Asm ("mov 0(%%ebp),%%eax");
+       Asm ("mov %%eax,12(%%edx)");   -- M.Regs (ebp)
+ 
+       --  The return point is the desired eip value
+ 
+       Asm ("mov 4(%%ebp),%%eax");
+       Asm ("mov %%eax,(%%edx)");   -- M.eip
+ 
+       --  Finally, the desired %esp value is the value at the point of
+       --  call to this routine *before* pushing the parameter value.
+ 
+       Asm ("lea 12(%%ebp),%%eax");
+       Asm ("mov %%eax,8(%%edx)");   -- M.Regs (esp)
+    end Set_Machine_State;
+ 
+    ------------------------------
+    -- Set_Signal_Machine_State --
+    ------------------------------
+ 
+    procedure Set_Signal_Machine_State
+      (M       : Machine_State;
+       Context : System.Address)
+    is
+       pragma Warnings (Off, M);
+       pragma Warnings (Off, Context);
+ 
+    begin
+       null;
+    end Set_Signal_Machine_State;
+ 
+ end System.Machine_State_Operations;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-memory-mingw.adb gcc-4.0.0/gcc/ada/s-memory-mingw.adb
*** gcc-3.4.3/gcc/ada/s-memory-mingw.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-memory-mingw.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,223 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --                         S Y S T E M . M E M O R Y                        --
+ --                                                                          --
+ --                                 B o d y                                 --
+ --                                                                          --
+ --          Copyright (C) 2001-2003 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This version provides ways to limit the amount of used memory for systems
+ --  that do not have OS support for that.
+ 
+ --  The amount of available memory available for dynamic allocation is limited
+ --  by setting the environment variable GNAT_MEMORY_LIMIT to the number of
+ --  kilobytes that can be used.
+ --
+ --  Windows is currently using this version.
+ 
+ with Ada.Exceptions;
+ with System.Soft_Links;
+ 
+ package body System.Memory is
+ 
+    use Ada.Exceptions;
+    use System.Soft_Links;
+ 
+    function c_malloc (Size : size_t) return System.Address;
+    pragma Import (C, c_malloc, "malloc");
+ 
+    procedure c_free (Ptr : System.Address);
+    pragma Import (C, c_free, "free");
+ 
+    function c_realloc
+      (Ptr : System.Address; Size : size_t) return System.Address;
+    pragma Import (C, c_realloc, "realloc");
+ 
+    function msize (Ptr : System.Address) return size_t;
+    pragma Import (C, msize, "_msize");
+ 
+    function getenv (Str : String) return System.Address;
+    pragma Import (C, getenv);
+ 
+    function atoi (Str : System.Address) return Integer;
+    pragma Import (C, atoi);
+ 
+    Available_Memory : size_t := 0;
+    --  Amount of memory that is available for heap allocations.
+    --  A value of 0 means that the amount is not yet initialized.
+ 
+    Msize_Accuracy   : constant := 4096;
+    --  Defines the amount of memory to add to requested allocation sizes,
+    --  because malloc may return a bigger block than requested. As msize
+    --  is used when by Free, it must be used on allocation as well. To
+    --  prevent underflow of available_memory we need to use a reserve.
+ 
+    procedure Check_Available_Memory (Size : size_t);
+    --  This routine must be called while holding the task lock. When the
+    --  memory limit is not yet initialized, it will be set to the value of
+    --  the GNAT_MEMORY_LIMIT environment variable or to unlimited if that
+    --  does not exist. If the size is larger than the amount of available
+    --  memory, the task lock will be freed and a storage_error exception
+    --  will be raised.
+ 
+    -----------
+    -- Alloc --
+    -----------
+ 
+    function Alloc (Size : size_t) return System.Address is
+       Result      : System.Address;
+       Actual_Size : size_t := Size;
+ 
+    begin
+       if Size = size_t'Last then
+          Raise_Exception (Storage_Error'Identity, "object too large");
+       end if;
+ 
+       --  Change size from zero to non-zero. We still want a proper pointer
+       --  for the zero case because pointers to zero length objects have to
+       --  be distinct, but we can't just go ahead and allocate zero bytes,
+       --  since some malloc's return zero for a zero argument.
+ 
+       if Size = 0 then
+          Actual_Size := 1;
+       end if;
+ 
+       Lock_Task.all;
+ 
+       if Actual_Size + Msize_Accuracy >= Available_Memory then
+          Check_Available_Memory (Size + Msize_Accuracy);
+       end if;
+ 
+       Result := c_malloc (Actual_Size);
+ 
+       if Result /= System.Null_Address then
+          Available_Memory := Available_Memory - msize (Result);
+       end if;
+ 
+       Unlock_Task.all;
+ 
+       if Result = System.Null_Address then
+          Raise_Exception (Storage_Error'Identity, "heap exhausted");
+       end if;
+ 
+       return Result;
+    end Alloc;
+ 
+    ----------------------------
+    -- Check_Available_Memory --
+    ----------------------------
+ 
+    procedure Check_Available_Memory (Size : size_t) is
+       Gnat_Memory_Limit : System.Address;
+ 
+    begin
+       if Available_Memory = 0 then
+ 
+          --  The amount of available memory hasn't been initialized yet
+ 
+          Gnat_Memory_Limit := getenv ("GNAT_MEMORY_LIMIT" & ASCII.NUL);
+ 
+          if Gnat_Memory_Limit /= System.Null_Address then
+             Available_Memory :=
+               size_t (atoi (Gnat_Memory_Limit)) * 1024 + Msize_Accuracy;
+          else
+             Available_Memory := size_t'Last;
+          end if;
+       end if;
+ 
+       if Size >= Available_Memory then
+ 
+          --  There is a memory overflow
+ 
+          Unlock_Task.all;
+          Raise_Exception
+            (Storage_Error'Identity, "heap memory limit exceeded");
+       end if;
+    end Check_Available_Memory;
+ 
+    ----------
+    -- Free --
+    ----------
+ 
+    procedure Free (Ptr : System.Address) is
+    begin
+       Lock_Task.all;
+ 
+       if Ptr /= System.Null_Address then
+          Available_Memory := Available_Memory + msize (Ptr);
+       end if;
+ 
+       c_free (Ptr);
+ 
+       Unlock_Task.all;
+    end Free;
+ 
+    -------------
+    -- Realloc --
+    -------------
+ 
+    function Realloc
+      (Ptr  : System.Address;
+       Size : size_t)
+       return System.Address
+    is
+       Result      : System.Address;
+       Actual_Size : constant size_t := Size;
+       Old_Size    : size_t;
+ 
+    begin
+       if Size = size_t'Last then
+          Raise_Exception (Storage_Error'Identity, "object too large");
+       end if;
+ 
+       Lock_Task.all;
+ 
+       Old_Size := msize (Ptr);
+ 
+       --  Conservative check - no need to try to be precise here
+ 
+       if Size + Msize_Accuracy >= Available_Memory then
+          Check_Available_Memory (Size + Msize_Accuracy);
+       end if;
+ 
+       Result := c_realloc (Ptr, Actual_Size);
+ 
+       if Result /= System.Null_Address then
+          Available_Memory := Available_Memory + Old_Size - msize (Result);
+       end if;
+ 
+       Unlock_Task.all;
+ 
+       if Result = System.Null_Address then
+          Raise_Exception (Storage_Error'Identity, "heap exhausted");
+       end if;
+ 
+       return Result;
+    end Realloc;
+ 
+ end System.Memory;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-aix-fsu.ads gcc-4.0.0/gcc/ada/s-osinte-aix-fsu.ads
*** gcc-3.4.3/gcc/ada/s-osinte-aix-fsu.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-aix-fsu.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,589 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   S Y S T E M . O S _ I N T E R F A C E                  --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2004, Free Software Foundation, Inc.      --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a AIX (FSU THREADS) version of this package
+ 
+ --  This package encapsulates all direct interfaces to OS services
+ --  that are needed by children of System.
+ 
+ --  PLEASE DO NOT add any with-clauses to this package or remove the pragma
+ --  Preelaborate. This package is designed to be a bottom-level (leaf) package.
+ 
+ with Interfaces.C;
+ with Unchecked_Conversion;
+ 
+ package System.OS_Interface is
+    pragma Preelaborate;
+    --  pragma Elaborate_Body;
+ 
+    pragma Linker_Options ("-lgthreads");
+    pragma Linker_Options ("-lmalloc");
+ 
+    subtype int            is Interfaces.C.int;
+    subtype short          is Interfaces.C.short;
+    subtype long           is Interfaces.C.long;
+    subtype unsigned       is Interfaces.C.unsigned;
+    subtype unsigned_short is Interfaces.C.unsigned_short;
+    subtype unsigned_long  is Interfaces.C.unsigned_long;
+    subtype unsigned_char  is Interfaces.C.unsigned_char;
+    subtype plain_char     is Interfaces.C.plain_char;
+    subtype size_t         is Interfaces.C.size_t;
+ 
+    -----------
+    -- Errno --
+    -----------
+ 
+    function errno return int;
+    pragma Import (C, errno, "__get_errno");
+ 
+    EAGAIN    : constant := 11;
+    EINTR     : constant := 4;
+    EINVAL    : constant := 22;
+    ENOMEM    : constant := 12;
+    ETIMEDOUT : constant := 78;
+ 
+    -------------
+    -- Signals --
+    -------------
+ 
+    Max_Interrupt : constant := 63;
+    type Signal is new int range 0 .. Max_Interrupt;
+    for Signal'Size use int'Size;
+ 
+    SIGHUP      : constant := 1; --  hangup
+    SIGINT      : constant := 2; --  interrupt (rubout)
+    SIGQUIT     : constant := 3; --  quit (ASCD FS)
+    SIGILL      : constant := 4; --  illegal instruction (not reset)
+    SIGTRAP     : constant := 5; --  trace trap (not reset)
+    SIGIOT      : constant := 6; --  IOT instruction
+    SIGABRT     : constant := 6; --  used by abort, replace SIGIOT in the future
+    SIGEMT      : constant := 7; --  EMT instruction
+    SIGFPE      : constant := 8; --  floating point exception
+    SIGKILL     : constant := 9; --  kill (cannot be caught or ignored)
+    SIGBUS      : constant := 10; --  bus error
+    SIGSEGV     : constant := 11; --  segmentation violation
+    SIGSYS      : constant := 12; --  bad argument to system call
+    SIGPIPE     : constant := 13; --  write on a pipe with no one to read it
+    SIGALRM     : constant := 14; --  alarm clock
+    SIGTERM     : constant := 15; --  software termination signal from kill
+    SIGUSR1     : constant := 30; --  user defined signal 1
+    SIGUSR2     : constant := 31; --  user defined signal 2
+    SIGCLD      : constant := 20; --  alias for SIGCHLD
+    SIGCHLD     : constant := 20; --  child status change
+    SIGPWR      : constant := 29; --  power-fail restart
+    SIGWINCH    : constant := 28; --  window size change
+    SIGURG      : constant := 16; --  urgent condition on IO channel
+    SIGPOLL     : constant := 23; --  pollable event occurred
+    SIGIO       : constant := 23; --  I/O possible (Solaris SIGPOLL alias)
+    SIGSTOP     : constant := 17; --  stop (cannot be caught or ignored)
+    SIGTSTP     : constant := 18; --  user stop requested from tty
+    SIGCONT     : constant := 19; --  stopped process has been continued
+    SIGTTIN     : constant := 21; --  background tty read attempted
+    SIGTTOU     : constant := 22; --  background tty write attempted
+    SIGVTALRM   : constant := 34; --  virtual timer expired
+    SIGPROF     : constant := 32; --  profiling timer expired
+    SIGXCPU     : constant := 24; --  CPU time limit exceeded
+    SIGXFSZ     : constant := 25; --  filesize limit exceeded
+    SIGWAITING  : constant := 39; --  m:n scheduling
+ 
+    --  the following signals are AIX specific
+    SIGMSG      : constant := 27; -- input data is in the ring buffer
+    SIGDANGER   : constant := 33; -- system crash imminent
+    SIGMIGRATE  : constant := 35; -- migrate process
+    SIGPRE      : constant := 36; -- programming exception
+    SIGVIRT     : constant := 37; -- AIX virtual time alarm
+    SIGALRM1    : constant := 38; -- m:n condition variables
+    SIGKAP      : constant := 60; -- keep alive poll from native keyboard
+    SIGGRANT    : constant := SIGKAP; -- monitor mode granted
+    SIGRETRACT  : constant := 61; -- monitor mode should be relinguished
+    SIGSOUND    : constant := 62; -- sound control has completed
+    SIGSAK      : constant := 63; -- secure attention key
+ 
+    SIGADAABORT : constant := SIGABRT;
+ 
+    type Signal_Set is array (Natural range <>) of Signal;
+ 
+    Unmasked    : constant Signal_Set :=
+      (SIGTRAP, SIGTTIN, SIGTTOU, SIGTSTP, SIGPROF);
+    Reserved    : constant Signal_Set :=
+      (SIGKILL, SIGSTOP, SIGALRM, SIGWAITING);
+ 
+    type sigset_t is private;
+ 
+    function sigaddset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigaddset, "sigaddset");
+ 
+    function sigdelset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigdelset, "sigdelset");
+ 
+    function sigfillset (set : access sigset_t) return int;
+    pragma Import (C, sigfillset, "sigfillset");
+ 
+    function sigismember (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigismember, "sigismember");
+ 
+    function sigemptyset (set : access sigset_t) return int;
+    pragma Import (C, sigemptyset, "sigemptyset");
+ 
+    type struct_sigaction is record
+       sa_handler : System.Address;
+       sa_mask    : sigset_t;
+       sa_flags   : int;
+    end record;
+    pragma Convention (C, struct_sigaction);
+    type struct_sigaction_ptr is access all struct_sigaction;
+ 
+    SA_SIGINFO  : constant := 16#0100#;
+ 
+    SIG_BLOCK   : constant := 0;
+    SIG_UNBLOCK : constant := 1;
+    SIG_SETMASK : constant := 2;
+ 
+    SIG_DFL : constant := 0;
+    SIG_IGN : constant := 1;
+ 
+    function sigaction
+      (sig  : Signal;
+       act  : struct_sigaction_ptr;
+       oact : struct_sigaction_ptr) return int;
+    pragma Import (C, sigaction, "_internal_sigaction");
+ 
+    ----------
+    -- Time --
+    ----------
+ 
+    Time_Slice_Supported : constant Boolean := True;
+    --  Indicates wether time slicing is supported (i.e FSU threads have been
+    --  compiled with DEF_RR)
+ 
+    type timespec is private;
+ 
+    type clockid_t is private;
+ 
+    CLOCK_REALTIME : constant clockid_t;
+ 
+    function clock_gettime
+      (clock_id : clockid_t;
+       tp       : access timespec) return int;
+    pragma Import (C, clock_gettime, "clock_gettime");
+ 
+    function To_Duration (TS : timespec) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timespec (D : Duration) return timespec;
+    pragma Inline (To_Timespec);
+ 
+    type struct_timeval is private;
+ 
+    function To_Duration (TV : struct_timeval) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timeval (D : Duration) return struct_timeval;
+    pragma Inline (To_Timeval);
+ 
+    -------------------------
+    -- Priority Scheduling --
+    -------------------------
+ 
+    SCHED_FIFO  : constant := 0;
+    SCHED_RR    : constant := 1;
+    SCHED_OTHER : constant := 2;
+ 
+    -------------
+    -- Process --
+    -------------
+ 
+    type pid_t is private;
+ 
+    function kill (pid : pid_t; sig : Signal) return int;
+    pragma Import (C, kill, "kill");
+ 
+    function getpid return pid_t;
+    pragma Import (C, getpid, "getpid");
+ 
+    ---------
+    -- LWP --
+    ---------
+ 
+    function lwp_self return System.Address;
+    --  lwp_self does not exist on this thread library, revert to pthread_self
+    --  which is the closest approximation (with getpid). This function is
+    --  needed to share 7staprop.adb across POSIX-like targets.
+    pragma Import (C, lwp_self, "pthread_self");
+ 
+    -------------
+    -- Threads --
+    -------------
+ 
+    type Thread_Body is access
+      function (arg : System.Address) return System.Address;
+ 
+    function Thread_Body_Access is new
+      Unchecked_Conversion (System.Address, Thread_Body);
+ 
+    type pthread_t           is private;
+    subtype Thread_Id        is pthread_t;
+ 
+    type pthread_mutex_t     is limited private;
+    type pthread_cond_t      is limited private;
+    type pthread_attr_t      is limited private;
+    type pthread_mutexattr_t is limited private;
+    type pthread_condattr_t  is limited private;
+    type pthread_key_t       is private;
+ 
+    PTHREAD_CREATE_DETACHED : constant := 1;
+ 
+    -----------
+    -- Stack --
+    -----------
+ 
+    Stack_Base_Available : constant Boolean := True;
+    --  Indicates wether the stack base is available on this target.
+    --  This allows us to share s-osinte.adb between all the FSU run time.
+    --  Note that this value can only be true if pthread_t has a complete
+    --  definition that corresponds exactly to the C header files.
+ 
+    function Get_Stack_Base (thread : pthread_t) return Address;
+    pragma Inline (Get_Stack_Base);
+    --  returns the stack base of the specified thread.
+    --  Only call this function when Stack_Base_Available is True.
+ 
+    function Get_Page_Size return size_t;
+    function Get_Page_Size return Address;
+    pragma Import (C, Get_Page_Size, "getpagesize");
+    --  returns the size of a page, or 0 if this is not relevant on this
+    --  target
+ 
+    PROT_NONE  : constant := 0;
+    PROT_READ  : constant := 1;
+    PROT_WRITE : constant := 2;
+    PROT_EXEC  : constant := 4;
+    PROT_ALL   : constant := PROT_READ + PROT_WRITE + PROT_EXEC;
+ 
+    PROT_ON    : constant := PROT_READ;
+    PROT_OFF   : constant := PROT_ALL;
+ 
+    function mprotect (addr : Address; len : size_t; prot : int) return int;
+    pragma Import (C, mprotect);
+ 
+    ---------------------------------------
+    -- Nonstandard Thread Initialization --
+    ---------------------------------------
+ 
+    procedure pthread_init;
+    --  FSU_THREADS requires pthread_init, which is nonstandard
+    --  and this should be invoked during the elaboration of s-taprop.adb
+    pragma Import (C, pthread_init, "pthread_init");
+ 
+    -------------------------
+    -- POSIX.1c  Section 3 --
+    -------------------------
+ 
+    function sigwait
+      (set : access sigset_t;
+       sig : access Signal) return int;
+    --  FSU_THREADS has a nonstandard sigwait
+ 
+    function pthread_kill
+      (thread : pthread_t;
+       sig    : Signal) return int;
+    pragma Import (C, pthread_kill, "pthread_kill");
+ 
+    --  FSU threads does not have pthread_sigmask. Instead, it redefines
+    --  sigprocmask and then uses a special syscall API to call the system
+    --  version. Doing syscalls on AiX is very difficult, so we rename the
+    --  pthread version instead.
+ 
+    type sigset_t_ptr is access all sigset_t;
+ 
+    function pthread_sigmask
+      (how  : int;
+       set  : sigset_t_ptr;
+       oset : sigset_t_ptr) return int;
+    pragma Import (C, pthread_sigmask, "_internal_sigprocmask");
+ 
+    --------------------------
+    -- POSIX.1c  Section 11 --
+    --------------------------
+ 
+    function pthread_mutexattr_init
+      (attr : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
+ 
+    function pthread_mutexattr_destroy
+      (attr : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
+ 
+    function pthread_mutex_init
+      (mutex : access pthread_mutex_t;
+       attr  : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
+ 
+    function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
+ 
+    function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
+    --  FSU_THREADS has nonstandard pthread_mutex_lock
+ 
+    function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
+    --  FSU_THREADS has nonstandard pthread_mutex_lock
+ 
+    function pthread_condattr_init
+      (attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
+ 
+    function pthread_condattr_destroy
+      (attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
+ 
+    function pthread_cond_init
+      (cond : access pthread_cond_t;
+       attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_cond_init, "pthread_cond_init");
+ 
+    function pthread_cond_destroy (cond : access pthread_cond_t) return int;
+    pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
+ 
+    function pthread_cond_signal (cond : access pthread_cond_t) return int;
+    pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
+ 
+    function pthread_cond_wait
+      (cond  : access pthread_cond_t;
+       mutex : access pthread_mutex_t) return int;
+    --  FSU_THREADS has a nonstandard pthread_cond_wait
+ 
+    function pthread_cond_timedwait
+      (cond    : access pthread_cond_t;
+       mutex   : access pthread_mutex_t;
+       abstime : access timespec) return int;
+    --  FSU_THREADS has a nonstandard pthread_cond_timedwait
+ 
+    Relative_Timed_Wait : constant Boolean := False;
+    --  pthread_cond_timedwait requires an absolute delay time
+ 
+    --------------------------
+    -- POSIX.1c  Section 13 --
+    --------------------------
+ 
+    PTHREAD_PRIO_NONE    : constant := 0;
+    PTHREAD_PRIO_PROTECT : constant := 2;
+    PTHREAD_PRIO_INHERIT : constant := 1;
+ 
+    function pthread_mutexattr_setprotocol
+      (attr     : access pthread_mutexattr_t;
+       protocol : int) return int;
+    pragma Import (C, pthread_mutexattr_setprotocol);
+ 
+    function pthread_mutexattr_setprioceiling
+      (attr        : access pthread_mutexattr_t;
+       prioceiling : int) return int;
+    pragma Import
+      (C, pthread_mutexattr_setprioceiling,
+          "pthread_mutexattr_setprio_ceiling");
+ 
+    type struct_sched_param is record
+       sched_priority : int;  --  scheduling priority
+    end record;
+ 
+    function pthread_setschedparam
+      (thread : pthread_t;
+       policy : int;
+       param  : access struct_sched_param) return int;
+    --  FSU_THREADS does not have pthread_setschedparam
+ 
+    function pthread_attr_setscope
+      (attr            : access pthread_attr_t;
+       contentionscope : int) return int;
+    pragma Import (C, pthread_attr_setscope, "pthread_attr_setscope");
+ 
+    function pthread_attr_setinheritsched
+      (attr         : access pthread_attr_t;
+       inheritsched : int) return int;
+    pragma Import (C, pthread_attr_setinheritsched);
+ 
+    function pthread_attr_setschedpolicy
+      (attr   : access pthread_attr_t;
+       policy : int) return int;
+    pragma Import (C, pthread_attr_setschedpolicy, "pthread_attr_setsched");
+ 
+    function sched_yield return int;
+    --  FSU_THREADS does not have sched_yield;
+ 
+    ---------------------------
+    -- P1003.1c - Section 16 --
+    ---------------------------
+ 
+    function pthread_attr_init (attributes : access pthread_attr_t) return int;
+    pragma Import (C, pthread_attr_init, "pthread_attr_init");
+ 
+    function pthread_attr_destroy
+      (attributes : access pthread_attr_t) return int;
+    pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
+ 
+    function pthread_attr_setdetachstate
+      (attr        : access pthread_attr_t;
+       detachstate : int) return int;
+    --  FSU_THREADS has a nonstandard pthread_attr_setdetachstate
+ 
+    function pthread_attr_setstacksize
+      (attr      : access pthread_attr_t;
+       stacksize : size_t) return int;
+    pragma Import (C, pthread_attr_setstacksize);
+ 
+    function pthread_create
+      (thread        : access pthread_t;
+       attributes    : access pthread_attr_t;
+       start_routine : Thread_Body;
+       arg           : System.Address) return int;
+    pragma Import (C, pthread_create, "pthread_create");
+ 
+    procedure pthread_exit (status : System.Address);
+    pragma Import (C, pthread_exit, "pthread_exit");
+ 
+    function pthread_self return pthread_t;
+    pragma Import (C, pthread_self, "pthread_self");
+ 
+    --------------------------
+    -- POSIX.1c  Section 17 --
+    --------------------------
+ 
+    function pthread_setspecific
+      (key   : pthread_key_t;
+       value : System.Address) return int;
+    pragma Import (C, pthread_setspecific, "pthread_setspecific");
+ 
+    function pthread_getspecific (key : pthread_key_t) return System.Address;
+    --  FSU_THREADS has a nonstandard pthread_getspecific
+ 
+    type destructor_pointer is access procedure (arg : System.Address);
+ 
+    function pthread_key_create
+      (key        : access pthread_key_t;
+       destructor : destructor_pointer) return int;
+    pragma Import (C, pthread_key_create, "pthread_key_create");
+ 
+ private
+ 
+    type sigset_t is record
+       losigs : unsigned_long;
+       hisigs : unsigned_long;
+    end record;
+    pragma Convention (C_Pass_By_Copy, sigset_t);
+ 
+    type pid_t is new int;
+ 
+    type time_t is new long;
+ 
+    type timespec is record
+       tv_sec  : time_t;
+       tv_nsec : long;
+    end record;
+    pragma Convention (C, timespec);
+ 
+    type clockid_t is new int;
+    CLOCK_REALTIME : constant clockid_t := 0;
+ 
+    type struct_timeval is record
+       tv_sec  : long;
+       tv_usec : long;
+    end record;
+    pragma Convention (C, struct_timeval);
+ 
+    type pthread_attr_t is record
+       flags           : int;
+       stacksize       : int;
+       contentionscope : int;
+       inheritsched    : int;
+       detachstate     : int;
+       sched           : int;
+       prio            : int;
+       starttime       : timespec;
+       deadline        : timespec;
+       period          : timespec;
+    end record;
+    pragma Convention (C_Pass_By_Copy, pthread_attr_t);
+ 
+    type pthread_condattr_t is record
+       flags : int;
+    end record;
+    pragma Convention (C, pthread_condattr_t);
+ 
+    type pthread_mutexattr_t is record
+       flags        : int;
+       prio_ceiling : int;
+       protocol     : int;
+    end record;
+    pragma Convention (C, pthread_mutexattr_t);
+ 
+    type sigjmp_buf is array (Integer range 0 .. 63) of int;
+ 
+    type pthread_t_struct is record
+       context    : sigjmp_buf;
+       pbody      : sigjmp_buf;
+       errno      : int;
+       ret        : int;
+       stack_base : System.Address;
+    end record;
+    pragma Convention (C, pthread_t_struct);
+ 
+    type pthread_t is access all pthread_t_struct;
+ 
+    type queue_t is record
+       head : System.Address;
+       tail : System.Address;
+    end record;
+    pragma Convention (C, queue_t);
+ 
+    type pthread_mutex_t is record
+       queue        : queue_t;
+       lock         : plain_char;
+       owner        : System.Address;
+       flags        : int;
+       prio_ceiling : int;
+       protocol     : int;
+       prev_max_ceiling_prio  : int;
+    end record;
+    pragma Convention (C, pthread_mutex_t);
+ 
+    type pthread_cond_t is record
+       queue   : queue_t;
+       flags   : int;
+       waiters : int;
+       mutex   : System.Address;
+    end record;
+    pragma Convention (C, pthread_cond_t);
+ 
+    type pthread_key_t is new int;
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-aix.adb gcc-4.0.0/gcc/ada/s-osinte-aix.adb
*** gcc-3.4.3/gcc/ada/s-osinte-aix.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-aix.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,159 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   S Y S T E M . O S _ I N T E R F A C E                  --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --          Copyright (C) 1997-2002, Free Software Fundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a AIX (Native) version of this package
+ 
+ pragma Polling (Off);
+ --  Turn off polling, we do not want ATC polling to take place during
+ --  tasking operations. It causes infinite loops and other problems.
+ 
+ with Interfaces.C;
+ 
+ package body System.OS_Interface is
+ 
+    use Interfaces.C;
+ 
+    -----------------
+    -- To_Duration --
+    -----------------
+ 
+    function To_Duration (TS : timespec) return Duration is
+    begin
+       return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9;
+    end To_Duration;
+ 
+    function To_Duration (TV : struct_timeval) return Duration is
+    begin
+       return Duration (TV.tv_sec) + Duration (TV.tv_usec) / 10#1#E6;
+    end To_Duration;
+ 
+    -----------------
+    -- To_Timespec --
+    -----------------
+ 
+    function To_Timespec (D : Duration) return timespec is
+       S : time_t;
+       F : Duration;
+ 
+    begin
+       S := time_t (Long_Long_Integer (D));
+       F := D - Duration (S);
+ 
+       --  If F has negative value due to a round-up, adjust for positive F
+       --  value.
+ 
+       if F < 0.0 then
+          S := S - 1;
+          F := F + 1.0;
+       end if;
+ 
+       return timespec'(tv_sec => S,
+                        tv_nsec => long (Long_Long_Integer (F * 10#1#E9)));
+    end To_Timespec;
+ 
+    ----------------
+    -- To_Timeval --
+    ----------------
+ 
+    function To_Timeval (D : Duration) return struct_timeval is
+       S : long;
+       F : Duration;
+ 
+    begin
+       S := long (Long_Long_Integer (D));
+       F := D - Duration (S);
+ 
+       --  If F has negative value due to a round-up, adjust for positive F
+       --  value.
+ 
+       if F < 0.0 then
+          S := S - 1;
+          F := F + 1.0;
+       end if;
+ 
+       return
+         struct_timeval'
+           (tv_sec => S,
+            tv_usec => long (Long_Long_Integer (F * 10#1#E6)));
+    end To_Timeval;
+ 
+    -------------------
+    -- clock_gettime --
+    -------------------
+ 
+    function clock_gettime
+      (clock_id : clockid_t;
+       tp       : access timespec)
+       return     int
+    is
+       pragma Warnings (Off, clock_id);
+ 
+       Result : int;
+       tv     : aliased struct_timeval;
+ 
+       function gettimeofday
+         (tv   : access struct_timeval;
+          tz   : System.Address := System.Null_Address)
+          return int;
+       pragma Import (C, gettimeofday, "gettimeofday");
+ 
+    begin
+       Result := gettimeofday (tv'Unchecked_Access);
+       tp.all := To_Timespec (To_Duration (tv));
+       return Result;
+    end clock_gettime;
+ 
+    -----------------
+    -- sched_yield --
+    -----------------
+ 
+    --  AIX Thread does not have sched_yield;
+ 
+    function sched_yield return int is
+ 
+       procedure pthread_yield;
+       pragma Import (C, pthread_yield, "sched_yield");
+ 
+    begin
+       pthread_yield;
+       return 0;
+    end sched_yield;
+ 
+    function Get_Stack_Base (thread : pthread_t) return Address is
+       pragma Warnings (Off, thread);
+ 
+    begin
+       return Null_Address;
+    end Get_Stack_Base;
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-aix.ads gcc-4.0.0/gcc/ada/s-osinte-aix.ads
*** gcc-3.4.3/gcc/ada/s-osinte-aix.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-aix.ads	Tue Jul  6 13:57:29 2004
***************
*** 0 ****
--- 1,586 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   S Y S T E M . O S _ I N T E R F A C E                  --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2004, Free Software Foundation, Inc.      --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a AIX (Native THREADS) version of this package
+ 
+ --  This package encapsulates all direct interfaces to OS services
+ --  that are needed by children of System.
+ 
+ --  PLEASE DO NOT add any with-clauses to this package or remove the pragma
+ --  Preelaborate. This package is designed to be a bottom-level (leaf) package.
+ 
+ with Interfaces.C;
+ with Unchecked_Conversion;
+ 
+ package System.OS_Interface is
+    pragma Preelaborate;
+ 
+    pragma Linker_Options ("-lpthreads");
+    pragma Linker_Options ("-lc_r");
+ 
+    subtype int            is Interfaces.C.int;
+    subtype short          is Interfaces.C.short;
+    subtype long           is Interfaces.C.long;
+    subtype unsigned       is Interfaces.C.unsigned;
+    subtype unsigned_short is Interfaces.C.unsigned_short;
+    subtype unsigned_long  is Interfaces.C.unsigned_long;
+    subtype unsigned_char  is Interfaces.C.unsigned_char;
+    subtype plain_char     is Interfaces.C.plain_char;
+    subtype size_t         is Interfaces.C.size_t;
+ 
+    -----------
+    -- Errno --
+    -----------
+ 
+    function errno return int;
+    pragma Import (C, errno, "__get_errno");
+ 
+    EAGAIN    : constant := 11;
+    EINTR     : constant := 4;
+    EINVAL    : constant := 22;
+    ENOMEM    : constant := 12;
+    ETIMEDOUT : constant := 78;
+ 
+    -------------
+    -- Signals --
+    -------------
+ 
+    Max_Interrupt : constant := 63;
+    type Signal is new int range 0 .. Max_Interrupt;
+    for Signal'Size use int'Size;
+ 
+    SIGHUP      : constant := 1; --  hangup
+    SIGINT      : constant := 2; --  interrupt (rubout)
+    SIGQUIT     : constant := 3; --  quit (ASCD FS)
+    SIGILL      : constant := 4; --  illegal instruction (not reset)
+    SIGTRAP     : constant := 5; --  trace trap (not reset)
+    SIGIOT      : constant := 6; --  IOT instruction
+    SIGABRT     : constant := 6; --  used by abort, replace SIGIOT in the future
+    SIGEMT      : constant := 7; --  EMT instruction
+    SIGFPE      : constant := 8; --  floating point exception
+    SIGKILL     : constant := 9; --  kill (cannot be caught or ignored)
+    SIGBUS      : constant := 10; --  bus error
+    SIGSEGV     : constant := 11; --  segmentation violation
+    SIGSYS      : constant := 12; --  bad argument to system call
+    SIGPIPE     : constant := 13; --  write on a pipe with no one to read it
+    SIGALRM     : constant := 14; --  alarm clock
+    SIGTERM     : constant := 15; --  software termination signal from kill
+    SIGUSR1     : constant := 30; --  user defined signal 1
+    SIGUSR2     : constant := 31; --  user defined signal 2
+    SIGCLD      : constant := 20; --  alias for SIGCHLD
+    SIGCHLD     : constant := 20; --  child status change
+    SIGPWR      : constant := 29; --  power-fail restart
+    SIGWINCH    : constant := 28; --  window size change
+    SIGURG      : constant := 16; --  urgent condition on IO channel
+    SIGPOLL     : constant := 23; --  pollable event occurred
+    SIGIO       : constant := 23; --  I/O possible (Solaris SIGPOLL alias)
+    SIGSTOP     : constant := 17; --  stop (cannot be caught or ignored)
+    SIGTSTP     : constant := 18; --  user stop requested from tty
+    SIGCONT     : constant := 19; --  stopped process has been continued
+    SIGTTIN     : constant := 21; --  background tty read attempted
+    SIGTTOU     : constant := 22; --  background tty write attempted
+    SIGVTALRM   : constant := 34; --  virtual timer expired
+    SIGPROF     : constant := 32; --  profiling timer expired
+    SIGXCPU     : constant := 24; --  CPU time limit exceeded
+    SIGXFSZ     : constant := 25; --  filesize limit exceeded
+    SIGWAITING  : constant := 39; --  m:n scheduling
+ 
+    --  the following signals are AIX specific
+    SIGMSG      : constant := 27; -- input data is in the ring buffer
+    SIGDANGER   : constant := 33; -- system crash imminent
+    SIGMIGRATE  : constant := 35; -- migrate process
+    SIGPRE      : constant := 36; -- programming exception
+    SIGVIRT     : constant := 37; -- AIX virtual time alarm
+    SIGALRM1    : constant := 38; -- m:n condition variables
+    SIGKAP      : constant := 60; -- keep alive poll from native keyboard
+    SIGGRANT    : constant := SIGKAP; -- monitor mode granted
+    SIGRETRACT  : constant := 61; -- monitor mode should be relinguished
+    SIGSOUND    : constant := 62; -- sound control has completed
+    SIGSAK      : constant := 63; -- secure attention key
+ 
+    SIGADAABORT : constant := SIGTERM;
+    --  Note: on other targets, we usually use SIGABRT, but on AiX, it
+    --  appears that SIGABRT can't be used in sigwait(), so we use SIGTERM.
+ 
+    type Signal_Set is array (Natural range <>) of Signal;
+ 
+    Unmasked    : constant Signal_Set :=
+      (SIGTRAP, SIGTTIN, SIGTTOU, SIGTSTP, SIGPROF);
+    Reserved    : constant Signal_Set := (SIGABRT, SIGKILL, SIGSTOP);
+ 
+    type sigset_t is private;
+ 
+    function sigaddset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigaddset, "sigaddset");
+ 
+    function sigdelset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigdelset, "sigdelset");
+ 
+    function sigfillset (set : access sigset_t) return int;
+    pragma Import (C, sigfillset, "sigfillset");
+ 
+    function sigismember (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigismember, "sigismember");
+ 
+    function sigemptyset (set : access sigset_t) return int;
+    pragma Import (C, sigemptyset, "sigemptyset");
+ 
+    type struct_sigaction is record
+       sa_handler : System.Address;
+       sa_mask    : sigset_t;
+       sa_flags   : int;
+    end record;
+    pragma Convention (C, struct_sigaction);
+    type struct_sigaction_ptr is access all struct_sigaction;
+ 
+    SA_SIGINFO  : constant := 16#0100#;
+ 
+    SIG_BLOCK   : constant := 0;
+    SIG_UNBLOCK : constant := 1;
+    SIG_SETMASK : constant := 2;
+ 
+    SIG_DFL : constant := 0;
+    SIG_IGN : constant := 1;
+ 
+    function sigaction
+      (sig  : Signal;
+       act  : struct_sigaction_ptr;
+       oact : struct_sigaction_ptr) return int;
+    pragma Import (C, sigaction, "sigaction");
+ 
+    ----------
+    -- Time --
+    ----------
+ 
+    Time_Slice_Supported : constant Boolean := False;
+    --  Indicates wether time slicing is supported
+ 
+    type timespec is private;
+ 
+    type clockid_t is private;
+ 
+    CLOCK_REALTIME : constant clockid_t;
+ 
+    function clock_gettime
+      (clock_id : clockid_t;
+       tp       : access timespec) return int;
+    --  AiX threads don't have clock_gettime
+    --  We instead use gettimeofday()
+ 
+    function To_Duration (TS : timespec) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timespec (D : Duration) return timespec;
+    pragma Inline (To_Timespec);
+ 
+    type struct_timezone is record
+       tz_minuteswest : int;
+       tz_dsttime     : int;
+    end record;
+    pragma Convention (C, struct_timezone);
+    type struct_timezone_ptr is access all struct_timezone;
+ 
+    type struct_timeval is private;
+    --  This is needed on systems that do not have clock_gettime()
+    --  but do have gettimeofday().
+ 
+    function To_Duration (TV : struct_timeval) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timeval (D : Duration) return struct_timeval;
+    pragma Inline (To_Timeval);
+ 
+    -------------------------
+    -- Priority Scheduling --
+    -------------------------
+ 
+    SCHED_FIFO  : constant := 1;
+    SCHED_RR    : constant := 2;
+    SCHED_OTHER : constant := 0;
+ 
+    -------------
+    -- Process --
+    -------------
+ 
+    type pid_t is private;
+ 
+    function kill (pid : pid_t; sig : Signal) return int;
+    pragma Import (C, kill, "kill");
+ 
+    function getpid return pid_t;
+    pragma Import (C, getpid, "getpid");
+ 
+    ---------
+    -- LWP --
+    ---------
+ 
+    function lwp_self return System.Address;
+    pragma Import (C, lwp_self, "thread_self");
+ 
+    -------------
+    -- Threads --
+    -------------
+ 
+    type Thread_Body is access
+      function (arg : System.Address) return System.Address;
+ 
+    function Thread_Body_Access is new
+      Unchecked_Conversion (System.Address, Thread_Body);
+ 
+    type pthread_t           is private;
+    subtype Thread_Id        is pthread_t;
+ 
+    type pthread_mutex_t     is limited private;
+    type pthread_cond_t      is limited private;
+    type pthread_attr_t      is limited private;
+    type pthread_mutexattr_t is limited private;
+    type pthread_condattr_t  is limited private;
+    type pthread_key_t       is private;
+ 
+    PTHREAD_CREATE_DETACHED : constant := 1;
+ 
+    -----------
+    -- Stack --
+    -----------
+ 
+    Stack_Base_Available : constant Boolean := False;
+    --  Indicates wether the stack base is available on this target.
+ 
+    function Get_Stack_Base (thread : pthread_t) return Address;
+    pragma Inline (Get_Stack_Base);
+    --  returns the stack base of the specified thread.
+    --  Only call this function when Stack_Base_Available is True.
+ 
+    function Get_Page_Size return size_t;
+    function Get_Page_Size return Address;
+    pragma Import (C, Get_Page_Size, "getpagesize");
+    --  returns the size of a page, or 0 if this is not relevant on this
+    --  target
+ 
+    PROT_NONE  : constant := 0;
+    PROT_READ  : constant := 1;
+    PROT_WRITE : constant := 2;
+    PROT_EXEC  : constant := 4;
+    PROT_ALL   : constant := PROT_READ + PROT_WRITE + PROT_EXEC;
+ 
+    PROT_ON    : constant := PROT_READ;
+    PROT_OFF   : constant := PROT_ALL;
+ 
+    function mprotect (addr : Address; len : size_t; prot : int) return int;
+    pragma Import (C, mprotect);
+ 
+    ---------------------------------------
+    -- Nonstandard Thread Initialization --
+    ---------------------------------------
+ 
+    --  Though not documented, pthread_init *must* be called before any other
+    --  pthread call
+ 
+    procedure pthread_init;
+    pragma Import (C, pthread_init, "pthread_init");
+ 
+    -------------------------
+    -- POSIX.1c  Section 3 --
+    -------------------------
+ 
+    function sigwait
+      (set : access sigset_t;
+       sig : access Signal) return int;
+    pragma Import (C, sigwait, "sigwait");
+ 
+    function pthread_kill
+      (thread : pthread_t;
+       sig    : Signal) return int;
+    pragma Import (C, pthread_kill, "pthread_kill");
+ 
+    type sigset_t_ptr is access all sigset_t;
+ 
+    function pthread_sigmask
+      (how  : int;
+       set  : sigset_t_ptr;
+       oset : sigset_t_ptr) return int;
+    pragma Import (C, pthread_sigmask, "sigthreadmask");
+ 
+    --------------------------
+    -- POSIX.1c  Section 11 --
+    --------------------------
+ 
+    function pthread_mutexattr_init
+      (attr : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
+ 
+    function pthread_mutexattr_destroy
+      (attr : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
+ 
+    function pthread_mutex_init
+      (mutex : access pthread_mutex_t;
+       attr  : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
+ 
+    function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
+ 
+    function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_lock, "pthread_mutex_lock");
+ 
+    function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_unlock, "pthread_mutex_unlock");
+ 
+    function pthread_condattr_init
+      (attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
+ 
+    function pthread_condattr_destroy
+      (attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
+ 
+    function pthread_cond_init
+      (cond : access pthread_cond_t;
+       attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_cond_init, "pthread_cond_init");
+ 
+    function pthread_cond_destroy (cond : access pthread_cond_t) return int;
+    pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
+ 
+    function pthread_cond_signal (cond : access pthread_cond_t) return int;
+    pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
+ 
+    function pthread_cond_wait
+      (cond  : access pthread_cond_t;
+       mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_cond_wait, "pthread_cond_wait");
+ 
+    function pthread_cond_timedwait
+      (cond    : access pthread_cond_t;
+       mutex   : access pthread_mutex_t;
+       abstime : access timespec) return int;
+    pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait");
+ 
+    Relative_Timed_Wait : constant Boolean := False;
+    --  pthread_cond_timedwait requires an absolute delay time
+ 
+    --------------------------
+    -- POSIX.1c  Section 13 --
+    --------------------------
+ 
+    PTHREAD_PRIO_NONE    : constant := 0;
+    PTHREAD_PRIO_PROTECT : constant := 0;
+    PTHREAD_PRIO_INHERIT : constant := 0;
+ 
+    function pthread_mutexattr_setprotocol
+      (attr     : access pthread_mutexattr_t;
+       protocol : int) return int;
+    pragma Import (C, pthread_mutexattr_setprotocol);
+ 
+    function pthread_mutexattr_setprioceiling
+      (attr        : access pthread_mutexattr_t;
+       prioceiling : int) return int;
+    pragma Import (C, pthread_mutexattr_setprioceiling);
+ 
+    type Array_5_Int is array (0 .. 5) of int;
+    type struct_sched_param is record
+       sched_priority : int;
+       sched_policy   : int;
+       sched_reserved : Array_5_Int;
+    end record;
+ 
+    function pthread_setschedparam
+      (thread : pthread_t;
+       policy : int;
+       param  : access struct_sched_param) return int;
+    pragma Import (C, pthread_setschedparam, "pthread_setschedparam");
+ 
+    function pthread_attr_setscope
+      (attr            : access pthread_attr_t;
+       contentionscope : int) return int;
+    pragma Import (C, pthread_attr_setscope, "pthread_attr_setscope");
+ 
+    function pthread_attr_setinheritsched
+      (attr            : access pthread_attr_t;
+       inheritsched : int) return int;
+    pragma Import (C, pthread_attr_setinheritsched);
+ 
+    function pthread_attr_setschedpolicy
+      (attr   : access pthread_attr_t;
+       policy : int) return int;
+    pragma Import (C, pthread_attr_setschedpolicy);
+ 
+    function pthread_attr_setschedparam
+      (attr        : access pthread_attr_t;
+       sched_param : int) return int;
+    pragma Import (C, pthread_attr_setschedparam);
+ 
+    function sched_yield return int;
+    --  AiX have a nonstandard sched_yield.
+ 
+    --------------------------
+    -- P1003.1c  Section 16 --
+    --------------------------
+ 
+    function pthread_attr_init (attributes : access pthread_attr_t) return int;
+    pragma Import (C, pthread_attr_init, "pthread_attr_init");
+ 
+    function pthread_attr_destroy
+      (attributes : access pthread_attr_t) return int;
+    pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
+ 
+    function pthread_attr_setdetachstate
+      (attr        : access pthread_attr_t;
+       detachstate : int) return int;
+    pragma Import (C, pthread_attr_setdetachstate);
+ 
+    function pthread_attr_setstacksize
+      (attr      : access pthread_attr_t;
+       stacksize : size_t) return int;
+    pragma Import (C, pthread_attr_setstacksize);
+ 
+    function pthread_create
+      (thread        : access pthread_t;
+       attributes    : access pthread_attr_t;
+       start_routine : Thread_Body;
+       arg           : System.Address)
+      return int;
+    pragma Import (C, pthread_create, "pthread_create");
+ 
+    procedure pthread_exit (status : System.Address);
+    pragma Import (C, pthread_exit, "pthread_exit");
+ 
+    function pthread_self return pthread_t;
+    pragma Import (C, pthread_self, "pthread_self");
+ 
+    --------------------------
+    -- POSIX.1c  Section 17 --
+    --------------------------
+ 
+    function pthread_setspecific
+      (key   : pthread_key_t;
+       value : System.Address) return int;
+    pragma Import (C, pthread_setspecific, "pthread_setspecific");
+ 
+    function pthread_getspecific (key : pthread_key_t) return System.Address;
+    pragma Import (C, pthread_getspecific, "pthread_getspecific");
+ 
+    type destructor_pointer is access
+       procedure (arg : System.Address);
+ 
+    function pthread_key_create
+      (key        : access pthread_key_t;
+       destructor : destructor_pointer) return int;
+    pragma Import (C, pthread_key_create, "pthread_key_create");
+ 
+ private
+ 
+    type sigset_t is record
+       losigs : unsigned_long;
+       hisigs : unsigned_long;
+    end record;
+    pragma Convention (C_Pass_By_Copy, sigset_t);
+ 
+    type pid_t is new int;
+ 
+    type time_t is new long;
+ 
+    type timespec is record
+       tv_sec  : time_t;
+       tv_nsec : long;
+    end record;
+    pragma Convention (C, timespec);
+ 
+    type clockid_t is new int;
+    CLOCK_REALTIME : constant clockid_t := 0;
+ 
+    type struct_timeval is record
+       tv_sec  : long;
+       tv_usec : long;
+    end record;
+    pragma Convention (C, struct_timeval);
+ 
+    type pthread_attr_t is new System.Address;
+    pragma Convention (C, pthread_attr_t);
+    --  typedef struct __pt_attr        *pthread_attr_t;
+ 
+    type pthread_condattr_t is new System.Address;
+    pragma Convention (C, pthread_condattr_t);
+    --  typedef struct __pt_attr        *pthread_condattr_t;
+ 
+    type pthread_mutexattr_t is new System.Address;
+    pragma Convention (C, pthread_mutexattr_t);
+    --  typedef struct __pt_attr        *pthread_mutexattr_t;
+ 
+    type pthread_t is new System.Address;
+    pragma Convention (C, pthread_t);
+    --  typedef void    *pthread_t;
+ 
+    type ptq_queue;
+    type ptq_queue_ptr is access all ptq_queue;
+ 
+    type ptq_queue is record
+       ptq_next : ptq_queue_ptr;
+       ptq_prev : ptq_queue_ptr;
+    end record;
+ 
+    type Array_3_Int is array (0 .. 3) of int;
+    type pthread_mutex_t is record
+         link        : ptq_queue;
+         ptmtx_lock  : int;
+         ptmtx_flags : long;
+         protocol    : int;
+         prioceiling : int;
+         ptmtx_owner : pthread_t;
+         mtx_id      : int;
+         attr        : pthread_attr_t;
+         mtx_kind    : int;
+         lock_cpt    : int;
+         reserved    : Array_3_Int;
+    end record;
+    pragma Convention (C, pthread_mutex_t);
+    type pthread_mutex_t_ptr is access pthread_mutex_t;
+ 
+    type pthread_cond_t is record
+       link         : ptq_queue;
+       ptcv_lock    : int;
+       ptcv_flags   : long;
+       ptcv_waiters : ptq_queue;
+       cv_id        : int;
+       attr         : pthread_attr_t;
+       mutex        : pthread_mutex_t_ptr;
+       cptwait      : int;
+       reserved     : int;
+    end record;
+    pragma Convention (C, pthread_cond_t);
+ 
+    type pthread_key_t is new unsigned;
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-darwin.adb gcc-4.0.0/gcc/ada/s-osinte-darwin.adb
*** gcc-3.4.3/gcc/ada/s-osinte-darwin.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-darwin.adb	Mon Jan  3 15:40:15 2005
***************
*** 0 ****
--- 1,164 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   S Y S T E M . O S _ I N T E R F A C E                  --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --           Copyright (C) 1999-2004 Free Software Foundation, Inc.         --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a Darwin Threads version of this package
+ 
+ pragma Polling (Off);
+ --  Turn off polling, we do not want ATC polling to take place during
+ --  tasking operations. It causes infinite loops and other problems.
+ 
+ with Interfaces.C;
+ 
+ package body System.OS_Interface is
+ 
+    use Interfaces.C;
+ 
+    -----------------
+    -- To_Duration --
+    -----------------
+ 
+    function To_Duration (TS : timespec) return Duration is
+    begin
+       return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9;
+    end To_Duration;
+ 
+    function To_Duration (TV : struct_timeval) return Duration is
+    begin
+       return Duration (TV.tv_sec) + Duration (TV.tv_usec) / 10#1#E6;
+    end To_Duration;
+ 
+    -----------------
+    -- To_Timespec --
+    -----------------
+ 
+    function To_Timespec (D : Duration) return timespec is
+       S : time_t;
+       F : Duration;
+ 
+    begin
+       S := time_t (Long_Long_Integer (D));
+       F := D - Duration (S);
+ 
+       --  If F has negative value due to a round-up, adjust for positive F
+       --  value.
+ 
+       if F < 0.0 then
+          S := S - 1;
+          F := F + 1.0;
+       end if;
+ 
+       return timespec'(tv_sec => S,
+         tv_nsec => int32_t (Long_Long_Integer (F * 10#1#E9)));
+    end To_Timespec;
+ 
+    ----------------
+    -- To_Timeval --
+    ----------------
+ 
+    function To_Timeval (D : Duration) return struct_timeval is
+       S : int32_t;
+       F : Duration;
+ 
+    begin
+       S := int32_t (D);
+       F := D - Duration (S);
+ 
+       --  If F has negative value due to a round-up, adjust for positive F
+       --  value.
+ 
+       if F < 0.0 then
+          S := S - 1;
+          F := F + 1.0;
+       end if;
+ 
+       return struct_timeval'
+                (Tv_Sec  => S,
+                 tv_usec => int32_t (Long_Long_Integer (F * 10#1#E6)));
+    end To_Timeval;
+ 
+    -------------------
+    -- clock_gettime --
+    -------------------
+ 
+    function clock_gettime
+      (clock_id : clockid_t;
+       tp       : access timespec) return int
+    is
+       pragma Unreferenced (clock_id);
+       Result : int;
+       tv     : aliased struct_timeval;
+ 
+       function gettimeofday
+         (tv : access struct_timeval;
+          tz : System.Address := System.Null_Address) return int;
+       pragma Import (C, gettimeofday, "gettimeofday");
+ 
+    begin
+       Result := gettimeofday (tv'Unchecked_Access);
+       tp.all := To_Timespec (To_Duration (tv));
+       return Result;
+    end clock_gettime;
+ 
+    -----------------
+    -- sched_yield --
+    -----------------
+ 
+    function sched_yield return int is
+       procedure sched_yield_base (arg : System.Address);
+       pragma Import (C, sched_yield_base, "pthread_yield_np");
+ 
+    begin
+       sched_yield_base (System.Null_Address);
+       return 0;
+    end sched_yield;
+ 
+    ------------------
+    -- pthread_init --
+    ------------------
+ 
+    procedure pthread_init is
+    begin
+       null;
+    end pthread_init;
+ 
+    ----------------
+    -- Stack_Base --
+    ----------------
+ 
+    function Get_Stack_Base (thread : pthread_t) return Address is
+       pragma Unreferenced (thread);
+    begin
+       return System.Null_Address;
+    end Get_Stack_Base;
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-darwin.ads gcc-4.0.0/gcc/ada/s-osinte-darwin.ads
*** gcc-3.4.3/gcc/ada/s-osinte-darwin.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-darwin.ads	Mon Jan  3 15:40:15 2005
***************
*** 0 ****
--- 1,587 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   S Y S T E M . O S _ I N T E R F A C E                  --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2004, Free Software Foundation, Inc.      --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is Darwin pthreads version of this package.
+ 
+ --  This package includes all direct interfaces to OS services
+ --  that are needed by children of System.
+ 
+ --  PLEASE DO NOT add any with-clauses to this package
+ --  or remove the pragma Elaborate_Body.
+ --  It is designed to be a bottom-level (leaf) package.
+ 
+ with Interfaces.C;
+ package System.OS_Interface is
+    pragma Preelaborate;
+ 
+    subtype int            is Interfaces.C.int;
+    subtype short          is Interfaces.C.short;
+    subtype long           is Interfaces.C.long;
+    subtype unsigned       is Interfaces.C.unsigned;
+    subtype unsigned_short is Interfaces.C.unsigned_short;
+    subtype unsigned_long  is Interfaces.C.unsigned_long;
+    subtype unsigned_char  is Interfaces.C.unsigned_char;
+    subtype plain_char     is Interfaces.C.plain_char;
+    subtype size_t         is Interfaces.C.size_t;
+ 
+    -----------
+    -- Errno --
+    -----------
+ 
+    function errno return int;
+    pragma Import (C, errno, "__get_errno");
+ 
+    EINTR     : constant := 4;
+    ENOMEM    : constant := 12;
+    EINVAL    : constant := 22;
+    EAGAIN    : constant := 35;
+    ETIMEDOUT : constant := 60;
+ 
+    -------------
+    -- Signals --
+    -------------
+ 
+    Max_Interrupt : constant := 31;
+    type Signal is new int range 0 .. Max_Interrupt;
+    for Signal'Size use int'Size;
+ 
+    SIGHUP     : constant := 1; --  hangup
+    SIGINT     : constant := 2; --  interrupt (rubout)
+    SIGQUIT    : constant := 3; --  quit (ASCD FS)
+    SIGILL     : constant := 4; --  illegal instruction (not reset)
+    SIGTRAP    : constant := 5; --  trace trap (not reset)
+    SIGIOT     : constant := 6; --  IOT instruction
+    SIGABRT    : constant := 6; --  used by abort, replace SIGIOT in the  future
+    SIGEMT     : constant := 7; --  EMT instruction
+    SIGFPE     : constant := 8; --  floating point exception
+    SIGKILL    : constant := 9; --  kill (cannot be caught or ignored)
+    SIGBUS     : constant := 10; --  bus error
+    SIGSEGV    : constant := 11; --  segmentation violation
+    SIGSYS     : constant := 12; --  bad argument to system call
+    SIGPIPE    : constant := 13; --  write on a pipe with no one to read it
+    SIGALRM    : constant := 14; --  alarm clock
+    SIGTERM    : constant := 15; --  software termination signal from kill
+    SIGURG     : constant := 16; --  urgent condition on IO channel
+    SIGSTOP    : constant := 17; --  stop (cannot be caught or ignored)
+    SIGTSTP    : constant := 18; --  user stop requested from tty
+    SIGCONT    : constant := 19; --  stopped process has been continued
+    SIGCHLD    : constant := 20; --  child status change
+    SIGTTIN    : constant := 21; --  background tty read attempted
+    SIGTTOU    : constant := 22; --  background tty write attempted
+    SIGIO      : constant := 23; --  I/O possible (Solaris SIGPOLL alias)
+    SIGXCPU    : constant := 24; --  CPU time limit exceeded
+    SIGXFSZ    : constant := 25; --  filesize limit exceeded
+    SIGVTALRM  : constant := 26; --  virtual timer expired
+    SIGPROF    : constant := 27; --  profiling timer expired
+    SIGWINCH   : constant := 28; --  window size change
+    SIGINFO    : constant := 29; --  information request
+    SIGUSR1    : constant := 30; --  user defined signal 1
+    SIGUSR2    : constant := 31; --  user defined signal 2
+ 
+    SIGADAABORT : constant := SIGTERM;
+    --  Change this if you want to use another signal for task abort.
+    --  SIGTERM might be a good one.
+ 
+    type Signal_Set is array (Natural range <>) of Signal;
+ 
+    Unmasked    : constant Signal_Set :=
+      (SIGTTIN, SIGTTOU, SIGSTOP, SIGTSTP);
+ 
+    Reserved    : constant Signal_Set :=
+      (SIGKILL, SIGSTOP);
+ 
+    type sigset_t is private;
+ 
+    function sigaddset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigaddset, "sigaddset");
+ 
+    function sigdelset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigdelset, "sigdelset");
+ 
+    function sigfillset (set : access sigset_t) return int;
+    pragma Import (C, sigfillset, "sigfillset");
+ 
+    function sigismember (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigismember, "sigismember");
+ 
+    function sigemptyset (set : access sigset_t) return int;
+    pragma Import (C, sigemptyset, "sigemptyset");
+ 
+    type siginfo_t is private;
+    type ucontext_t is private;
+ 
+    type Signal_Handler is access procedure
+      (signo   : Signal;
+       info    : access siginfo_t;
+       context : access ucontext_t);
+ 
+    type struct_sigaction is record
+       sa_handler : System.Address;
+       sa_mask    : sigset_t;
+       sa_flags   : int;
+    end record;
+    pragma Convention (C, struct_sigaction);
+    type struct_sigaction_ptr is access all struct_sigaction;
+ 
+    SIG_BLOCK   : constant := 1;
+    SIG_UNBLOCK : constant := 2;
+    SIG_SETMASK : constant := 3;
+ 
+    SIG_DFL : constant := 0;
+    SIG_IGN : constant := 1;
+ 
+    SA_SIGINFO : constant := 16#0040#;
+ 
+    function sigaction
+      (sig  : Signal;
+       act  : struct_sigaction_ptr;
+       oact : struct_sigaction_ptr) return int;
+    pragma Import (C, sigaction, "sigaction");
+ 
+    ----------
+    -- Time --
+    ----------
+ 
+    Time_Slice_Supported : constant Boolean := True;
+    --  Indicates wether time slicing is supported.
+ 
+    type timespec is private;
+ 
+    type clockid_t is private;
+ 
+    CLOCK_REALTIME : constant clockid_t;
+ 
+    function clock_gettime
+      (clock_id : clockid_t;
+       tp       : access timespec) return int;
+ 
+    function To_Duration (TS : timespec) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timespec (D : Duration) return timespec;
+    pragma Inline (To_Timespec);
+ 
+    type struct_timeval is private;
+ 
+    function To_Duration (TV : struct_timeval) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timeval (D : Duration) return struct_timeval;
+    pragma Inline (To_Timeval);
+ 
+    -------------------------
+    -- Priority Scheduling --
+    -------------------------
+ 
+    SCHED_OTHER : constant := 1;
+    SCHED_RR    : constant := 2;
+    SCHED_FIFO  : constant := 4;
+ 
+    -------------
+    -- Process --
+    -------------
+ 
+    type pid_t is private;
+ 
+    function kill (pid : pid_t; sig : Signal) return int;
+    pragma Import (C, kill, "kill");
+ 
+    function getpid return pid_t;
+    pragma Import (C, getpid, "getpid");
+ 
+    ---------
+    -- LWP --
+    ---------
+ 
+    function lwp_self return System.Address;
+    --  lwp_self does not exist on this thread library, revert to pthread_self
+    --  which is the closest approximation (with getpid). This function is
+    --  needed to share 7staprop.adb across POSIX-like targets.
+    pragma Import (C, lwp_self, "pthread_self");
+ 
+    -------------
+    -- Threads --
+    -------------
+ 
+    type Thread_Body is access
+      function (arg : System.Address) return System.Address;
+    type pthread_t           is private;
+    subtype Thread_Id        is pthread_t;
+ 
+    type pthread_mutex_t     is limited private;
+    type pthread_cond_t      is limited private;
+    type pthread_attr_t      is limited private;
+    type pthread_mutexattr_t is limited private;
+    type pthread_condattr_t  is limited private;
+    type pthread_key_t       is private;
+ 
+    type pthread_mutex_ptr is access all pthread_mutex_t;
+    type pthread_cond_ptr is access all pthread_cond_t;
+ 
+    PTHREAD_CREATE_DETACHED : constant := 2;
+ 
+    -----------
+    -- Stack --
+    -----------
+ 
+    Stack_Base_Available : constant Boolean := False;
+    --  Indicates wether the stack base is available on this target.
+    --  This allows us to share s-osinte.adb between all the FSU run time.
+    --  Note that this value can only be true if pthread_t has a complete
+    --  definition that corresponds exactly to the C header files.
+ 
+    function Get_Stack_Base (thread : pthread_t) return System.Address;
+    pragma Inline (Get_Stack_Base);
+    --  returns the stack base of the specified thread.
+    --  Only call this function when Stack_Base_Available is True.
+ 
+    function Get_Page_Size return size_t;
+    function Get_Page_Size return System.Address;
+    pragma Import (C, Get_Page_Size, "getpagesize");
+    --  returns the size of a page, or 0 if this is not relevant on this
+    --  target
+ 
+    PROT_NONE  : constant := 0;
+    PROT_READ  : constant := 1;
+    PROT_WRITE : constant := 2;
+    PROT_EXEC  : constant := 4;
+    PROT_ALL   : constant := PROT_READ + PROT_WRITE + PROT_EXEC;
+ 
+    PROT_ON    : constant := PROT_NONE;
+    PROT_OFF   : constant := PROT_ALL;
+ 
+    function mprotect (addr : System.Address;
+                       len : size_t;
+                       prot : int) return int;
+    pragma Import (C, mprotect);
+ 
+    ---------------------------------------
+    -- Nonstandard Thread Initialization --
+    ---------------------------------------
+ 
+    procedure pthread_init;
+ 
+    -------------------------
+    -- POSIX.1c  Section 3 --
+    -------------------------
+ 
+    function sigwait (set : access sigset_t; sig : access Signal) return int;
+    pragma Import (C, sigwait, "sigwait");
+ 
+    function pthread_kill (thread : pthread_t; sig : Signal) return int;
+    pragma Import (C, pthread_kill, "pthread_kill");
+ 
+    type sigset_t_ptr is access all sigset_t;
+ 
+    function pthread_sigmask
+      (how  : int;
+       set  : sigset_t_ptr;
+       oset : sigset_t_ptr) return int;
+    pragma Import (C, pthread_sigmask, "pthread_sigmask");
+ 
+    --------------------------
+    -- POSIX.1c  Section 11 --
+    --------------------------
+ 
+    function pthread_mutexattr_init
+      (attr : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
+ 
+    function pthread_mutexattr_destroy
+      (attr : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
+ 
+    function pthread_mutex_init
+      (mutex : access pthread_mutex_t;
+       attr  : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
+ 
+    function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
+ 
+    function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_lock, "pthread_mutex_lock");
+ 
+    function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_unlock, "pthread_mutex_unlock");
+ 
+    function pthread_condattr_init
+      (attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
+ 
+    function pthread_condattr_destroy
+      (attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
+ 
+    function pthread_cond_init
+      (cond : access pthread_cond_t;
+       attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_cond_init, "pthread_cond_init");
+ 
+    function pthread_cond_destroy (cond : access pthread_cond_t) return int;
+    pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
+ 
+    function pthread_cond_signal (cond : access pthread_cond_t) return int;
+    pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
+ 
+    function pthread_cond_wait
+      (cond  : access pthread_cond_t;
+       mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_cond_wait, "pthread_cond_wait");
+ 
+    function pthread_cond_timedwait
+      (cond    : access pthread_cond_t;
+       mutex   : access pthread_mutex_t;
+       abstime : access timespec) return int;
+    pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait");
+ 
+    Relative_Timed_Wait : constant Boolean := False;
+    --  pthread_cond_timedwait requires an absolute delay time
+ 
+    --------------------------
+    -- POSIX.1c  Section 13 --
+    --------------------------
+ 
+    PTHREAD_PRIO_NONE    : constant := 0;
+    PTHREAD_PRIO_INHERIT : constant := 1;
+    PTHREAD_PRIO_PROTECT : constant := 2;
+ 
+    function pthread_mutexattr_setprotocol
+      (attr     : access pthread_mutexattr_t;
+       protocol : int) return int;
+    pragma Import
+      (C, pthread_mutexattr_setprotocol, "pthread_mutexattr_setprotocol");
+ 
+    function pthread_mutexattr_setprioceiling
+      (attr     : access pthread_mutexattr_t;
+       prioceiling : int) return int;
+    pragma Import
+      (C, pthread_mutexattr_setprioceiling,
+       "pthread_mutexattr_setprioceiling");
+ 
+    type padding is array (int range <>) of Interfaces.C.char;
+ 
+    type struct_sched_param is record
+       sched_priority : int;  --  scheduling priority
+       opaque         : padding (1 .. 4);
+    end record;
+    pragma Convention (C, struct_sched_param);
+ 
+    function pthread_setschedparam
+      (thread : pthread_t;
+       policy : int;
+       param  : access struct_sched_param) return int;
+    pragma Import (C, pthread_setschedparam, "pthread_setschedparam");
+ 
+    function pthread_attr_setscope
+      (attr            : access pthread_attr_t;
+       contentionscope : int) return int;
+    pragma Import (C, pthread_attr_setscope, "pthread_attr_setscope");
+ 
+    function pthread_attr_setinheritsched
+      (attr            : access pthread_attr_t;
+       inheritsched : int) return int;
+    pragma Import
+      (C, pthread_attr_setinheritsched, "pthread_attr_setinheritsched");
+ 
+    function pthread_attr_setschedpolicy
+      (attr   : access pthread_attr_t;
+       policy : int) return int;
+    pragma Import (C, pthread_attr_setschedpolicy, "pthread_attr_setsched");
+ 
+    function sched_yield return int;
+ 
+    ---------------------------
+    -- P1003.1c - Section 16 --
+    ---------------------------
+ 
+    function pthread_attr_init (attributes : access pthread_attr_t) return int;
+    pragma Import (C, pthread_attr_init, "pthread_attr_init");
+ 
+    function pthread_attr_destroy
+      (attributes : access pthread_attr_t) return int;
+    pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
+ 
+    function pthread_attr_setdetachstate
+      (attr        : access pthread_attr_t;
+       detachstate : int) return int;
+    pragma Import
+      (C, pthread_attr_setdetachstate, "pthread_attr_setdetachstate");
+ 
+    function pthread_attr_setstacksize
+      (attr      : access pthread_attr_t;
+       stacksize : size_t) return int;
+    pragma Import
+      (C, pthread_attr_setstacksize, "pthread_attr_setstacksize");
+ 
+    function pthread_create
+      (thread        : access pthread_t;
+       attributes    : access pthread_attr_t;
+       start_routine : Thread_Body;
+       arg           : System.Address) return int;
+    pragma Import (C, pthread_create, "pthread_create");
+ 
+    procedure pthread_exit (status : System.Address);
+    pragma Import (C, pthread_exit, "pthread_exit");
+ 
+    function pthread_self return pthread_t;
+    pragma Import (C, pthread_self, "pthread_self");
+ 
+    --------------------------
+    -- POSIX.1c  Section 17 --
+    --------------------------
+ 
+    function pthread_setspecific
+      (key   : pthread_key_t;
+       value : System.Address) return int;
+    pragma Import (C, pthread_setspecific, "pthread_setspecific");
+ 
+    function pthread_getspecific (key : pthread_key_t) return System.Address;
+    pragma Import (C, pthread_getspecific, "pthread_getspecific");
+ 
+    type destructor_pointer is access procedure (arg : System.Address);
+ 
+    function pthread_key_create
+      (key        : access pthread_key_t;
+       destructor : destructor_pointer) return int;
+    pragma Import (C, pthread_key_create, "pthread_key_create");
+ 
+ private
+ 
+    type sigset_t is new unsigned;
+ 
+    type int32_t is new int;
+ 
+    type pid_t is new int32_t;
+ 
+    type time_t is new long;
+ 
+    type timespec is record
+       tv_sec  : time_t;
+       tv_nsec : int32_t;
+    end record;
+    pragma Convention (C, timespec);
+ 
+    type clockid_t is new int;
+    CLOCK_REALTIME : constant clockid_t := 0;
+ 
+    type struct_timeval is record
+       tv_sec  : int32_t;
+       tv_usec : int32_t;
+    end record;
+    pragma Convention (C, struct_timeval);
+ 
+    --
+    --  Darwin specific signal implementation
+    --
+    type Pad_Type is array (1 .. 7) of unsigned;
+    type siginfo_t is record
+       si_signo  : int;               --  signal number
+       si_errno  : int;               --  errno association
+       si_code   : int;               --  signal code
+       si_pid    : int;               --  sending process
+       si_uid    : unsigned;          --  sender's ruid
+       si_status : int;               --  exit value
+       si_addr   : System.Address;    --  faulting instruction
+       si_value  : System.Address;    --  signal value
+       si_band   : long;              --  band event for SIGPOLL
+       pad       : Pad_Type;          --  RFU
+    end record;
+    pragma Convention (C, siginfo_t);
+ 
+    type stack_t is record
+       ss_sp    : System.Address;
+       ss_size  : int;
+       ss_flags : int;
+    end record;
+    pragma Convention (C, stack_t);
+ 
+    type mcontext_t is new System.Address;
+ 
+    type ucontext_t is record
+       uc_onstack  : int;
+       uc_sigmask  : sigset_t;         --  Signal Mask Used By This Context
+       uc_stack    : stack_t;          --  Stack Used By This Context
+       uc_link     : System.Address;   --  Pointer To Resuming Context
+       uc_mcsize   : size_t;           --  Size of The Machine Context
+       uc_mcontext : mcontext_t;       --  Machine Specific Context
+    end record;
+    pragma Convention (C, ucontext_t);
+ 
+    --
+    --  Darwin specific pthread implementation
+    --
+    type pthread_t is new System.Address;
+ 
+    type pthread_lock_t is new long;
+ 
+    type pthread_attr_t is record
+       sig    : long;
+       opaque : padding (1 .. 36);
+    end record;
+    pragma Convention (C, pthread_attr_t);
+ 
+    type pthread_mutexattr_t is record
+       sig    : long;
+       opaque : padding (1 .. 8);
+    end record;
+    pragma Convention (C, pthread_mutexattr_t);
+ 
+    type pthread_mutex_t is record
+       sig    : long;
+       opaque : padding (1 .. 40);
+    end record;
+    pragma Convention (C, pthread_mutex_t);
+ 
+    type pthread_condattr_t is record
+       sig    : long;
+       opaque : padding (1 .. 4);
+    end record;
+    pragma Convention (C, pthread_condattr_t);
+ 
+    type pthread_cond_t is record
+       sig    : long;
+       opaque : padding (1 .. 24);
+    end record;
+    pragma Convention (C, pthread_cond_t);
+ 
+    type pthread_once_t is record
+       sig    : long;
+       opaque : padding (1 .. 4);
+    end record;
+    pragma Convention (C, pthread_once_t);
+ 
+    type pthread_key_t is new unsigned_long;
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-dummy.ads gcc-4.0.0/gcc/ada/s-osinte-dummy.ads
*** gcc-3.4.3/gcc/ada/s-osinte-dummy.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-dummy.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,53 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   S Y S T E M . O S _ I N T E R F A C E                  --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2004, Free Software Foundation, Inc.      --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the no tasking version
+ 
+ --  PLEASE DO NOT add any with-clauses to this package or remove the pragma
+ --  Preelaborate. This package is designed to be a bottom-level (leaf) package.
+ 
+ package System.OS_Interface is
+    pragma Preelaborate;
+ 
+    -------------
+    -- Signals --
+    -------------
+ 
+    Max_Interrupt : constant := 2;
+    type Signal is new Integer range 0 .. Max_Interrupt;
+ 
+    type sigset_t is new Integer;
+    type Thread_Id is new Integer;
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-freebsd.adb gcc-4.0.0/gcc/ada/s-osinte-freebsd.adb
*** gcc-3.4.3/gcc/ada/s-osinte-freebsd.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-freebsd.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,108 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                 GNU ADA RUNTIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   S Y S T E M . O S _ I N T E R F A C E                  --
+ --                                                                          --
+ --                                   B o d y                                --
+ --                                                                          --
+ --          Copyright (C) 1991-2003 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University. It is --
+ -- now maintained by Ada Core Technologies Inc. in cooperation with Florida --
+ -- State University (http://www.gnat.com).                                  --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the FreeBSD THREADS version of this package
+ 
+ with Interfaces.C; use Interfaces.C;
+ 
+ package body System.OS_Interface is
+ 
+    function Errno return int is
+       type int_ptr is access all int;
+ 
+       function internal_errno return int_ptr;
+       pragma Import (C, internal_errno, "__error");
+    begin
+       return (internal_errno.all);
+    end Errno;
+ 
+    function Get_Stack_Base (thread : pthread_t) return Address is
+       pragma Unreferenced (thread);
+    begin
+       return (0);
+    end Get_Stack_Base;
+ 
+    procedure pthread_init is
+    begin
+       null;
+    end pthread_init;
+ 
+    -----------------
+    -- To_Duration --
+    -----------------
+ 
+    function To_Duration (TS : timespec) return Duration is
+    begin
+       return Duration (TS.ts_sec) + Duration (TS.ts_nsec) / 10#1#E9;
+    end To_Duration;
+ 
+    -----------------
+    -- To_Timespec --
+    -----------------
+ 
+    function To_Timespec (D : Duration) return timespec is
+       S : time_t;
+       F : Duration;
+    begin
+       S := time_t (Long_Long_Integer (D));
+       F := D - Duration (S);
+ 
+       --  If F has negative value due to a round-up, adjust for positive F
+       --  value.
+       if F < 0.0 then S := S - 1; F := F + 1.0; end if;
+       return timespec'(ts_sec => S,
+         ts_nsec => long (Long_Long_Integer (F * 10#1#E9)));
+    end To_Timespec;
+ 
+ 
+    function To_Duration (TV : struct_timeval) return Duration is
+    begin
+       return Duration (TV.tv_sec) + Duration (TV.tv_usec) / 10#1#E6;
+    end To_Duration;
+ 
+    function To_Timeval (D : Duration) return struct_timeval is
+       S : long;
+       F : Duration;
+    begin
+       S := long (Long_Long_Integer (D));
+       F := D - Duration (S);
+ 
+       --  If F has negative value due to a round-up, adjust for positive F
+       --  value.
+       if F < 0.0 then S := S - 1; F := F + 1.0; end if;
+       return struct_timeval'(tv_sec => S,
+         tv_usec => long (Long_Long_Integer (F * 10#1#E6)));
+    end To_Timeval;
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-freebsd.ads gcc-4.0.0/gcc/ada/s-osinte-freebsd.ads
*** gcc-3.4.3/gcc/ada/s-osinte-freebsd.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-freebsd.ads	Tue Jul  6 13:57:29 2004
***************
*** 0 ****
--- 1,647 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                 GNU ADA RUNTIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   S Y S T E M . O S _ I N T E R F A C E                  --
+ --                                                                          --
+ --                                   S p e c                                --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2004, Free Software Foundation, Inc.      --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University. It is --
+ -- now maintained by Ada Core Technologies Inc. in cooperation with Florida --
+ -- State University (http://www.gnat.com).                                  --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the FreeBSD PTHREADS version of this package
+ 
+ --  This package encapsulates all direct interfaces to OS services
+ --  that are needed by children of System.
+ 
+ --  PLEASE DO NOT add any with-clauses to this package or remove the pragma
+ --  Preelaborate. This package is designed to be a bottom-level (leaf) package.
+ 
+ with Interfaces.C;
+ with Unchecked_Conversion;
+ 
+ package System.OS_Interface is
+    pragma Preelaborate;
+ 
+    pragma Linker_Options ("-pthread");
+ 
+    subtype int            is Interfaces.C.int;
+    subtype short          is Interfaces.C.short;
+    subtype long           is Interfaces.C.long;
+    subtype unsigned       is Interfaces.C.unsigned;
+    subtype unsigned_short is Interfaces.C.unsigned_short;
+    subtype unsigned_long  is Interfaces.C.unsigned_long;
+    subtype unsigned_char  is Interfaces.C.unsigned_char;
+    subtype plain_char     is Interfaces.C.plain_char;
+    subtype size_t         is Interfaces.C.size_t;
+ 
+    -----------
+    -- Errno --
+    -----------
+ 
+    function Errno return int;
+    pragma Inline (Errno);
+ 
+    EAGAIN   : constant := 35;
+    EINTR    : constant := 4;
+    EINVAL   : constant := 22;
+    ENOMEM   : constant := 12;
+    ETIMEDOUT    : constant := 60;
+ 
+    -------------
+    -- Signals --
+    -------------
+ 
+    Max_Interrupt : constant := 31;
+    type Signal is new int range 0 .. Max_Interrupt;
+    for Signal'Size use int'Size;
+ 
+    SIGHUP     : constant := 1; --  hangup
+    SIGINT     : constant := 2; --  interrupt (rubout)
+    SIGQUIT    : constant := 3; --  quit (ASCD FS)
+    SIGILL     : constant := 4; --  illegal instruction (not reset)
+    SIGTRAP    : constant := 5; --  trace trap (not reset)
+    SIGIOT     : constant := 6; --  IOT instruction
+    SIGABRT    : constant := 6; --  used by abort, replace SIGIOT in the  future
+    SIGEMT     : constant := 7; --  EMT instruction
+    SIGFPE     : constant := 8; --  floating point exception
+    SIGKILL    : constant := 9; --  kill (cannot be caught or ignored)
+    SIGBUS     : constant := 10; --  bus error
+    SIGSEGV    : constant := 11; --  segmentation violation
+    SIGSYS     : constant := 12; --  bad argument to system call
+    SIGPIPE    : constant := 13; --  write on a pipe with no one to read it
+    SIGALRM    : constant := 14; --  alarm clock
+    SIGTERM    : constant := 15; --  software termination signal from kill
+    SIGURG     : constant := 16; --  urgent condition on IO channel
+    SIGSTOP    : constant := 17; --  stop (cannot be caught or ignored)
+    SIGTSTP    : constant := 18; --  user stop requested from tty
+    SIGCONT    : constant := 19; --  stopped process has been continued
+    SIGCLD     : constant := 20; --  alias for SIGCHLD
+    SIGCHLD    : constant := 20; --  child status change
+    SIGTTIN    : constant := 21; --  background tty read attempted
+    SIGTTOU    : constant := 22; --  background tty write attempted
+    SIGIO      : constant := 23; --  I/O possible (Solaris SIGPOLL alias)
+    SIGXCPU    : constant := 24; --  CPU time limit exceeded
+    SIGXFSZ    : constant := 25; --  filesize limit exceeded
+    SIGVTALRM  : constant := 26; --  virtual timer expired
+    SIGPROF    : constant := 27; --  profiling timer expired
+    SIGWINCH   : constant := 28; --  window size change
+    SIGINFO    : constant := 29; --  information request (NetBSD/FreeBSD)
+    SIGUSR1    : constant := 30; --  user defined signal 1
+    SIGUSR2    : constant := 31; --  user defined signal 2
+ 
+    SIGADAABORT : constant := SIGABRT;
+    --  Change this if you want to use another signal for task abort.
+    --  SIGTERM might be a good one.
+ 
+    type Signal_Set is array (Natural range <>) of Signal;
+ 
+    --  Interrupts that must be unmasked at all times.  FreeBSD
+    --  pthreads will not allow an application to mask out any
+    --  interrupt needed by the threads library.
+    Unmasked : constant Signal_Set :=
+      (SIGTRAP, SIGBUS, SIGTTIN, SIGTTOU, SIGTSTP);
+ 
+    --  FreeBSD will uses SIGPROF for timing.  Do not allow a
+    --  handler to attach to this signal.
+    Reserved : constant Signal_Set := (0 .. 0 => SIGPROF);
+ 
+    type sigset_t is private;
+ 
+    function sigaddset
+      (set : access sigset_t;
+       sig : Signal) return int;
+    pragma Import (C, sigaddset, "sigaddset");
+ 
+    function sigdelset
+      (set : access sigset_t;
+       sig : Signal) return int;
+    pragma Import (C, sigdelset, "sigdelset");
+ 
+    function sigfillset (set : access sigset_t) return int;
+    pragma Import (C, sigfillset, "sigfillset");
+ 
+    function sigismember
+      (set : access sigset_t;
+       sig : Signal) return int;
+    pragma Import (C, sigismember, "sigismember");
+ 
+    function sigemptyset (set : access sigset_t) return int;
+    pragma Import (C, sigemptyset, "sigemptyset");
+ 
+    --  sigcontext is architecture dependent, so define it private
+    type struct_sigcontext is private;
+ 
+    type old_struct_sigaction is record
+       sa_handler : System.Address;
+       sa_mask    : sigset_t;
+       sa_flags   : int;
+    end record;
+    pragma Convention (C, old_struct_sigaction);
+ 
+    type new_struct_sigaction is record
+       sa_handler : System.Address;
+       sa_flags   : int;
+       sa_mask    : sigset_t;
+    end record;
+    pragma Convention (C, new_struct_sigaction);
+ 
+    subtype struct_sigaction is new_struct_sigaction;
+    type struct_sigaction_ptr is access all struct_sigaction;
+ 
+    SIG_BLOCK   : constant := 1;
+    SIG_UNBLOCK : constant := 2;
+    SIG_SETMASK : constant := 3;
+ 
+    SIG_DFL : constant := 0;
+    SIG_IGN : constant := 1;
+ 
+    SA_SIGINFO : constant := 16#0040#;
+ 
+    function sigaction
+      (sig  : Signal;
+       act  : struct_sigaction_ptr;
+       oact : struct_sigaction_ptr) return int;
+    pragma Import (C, sigaction, "sigaction");
+ 
+    ----------
+    -- Time --
+    ----------
+ 
+    Time_Slice_Supported : constant Boolean := True;
+    --  Indicates wether time slicing is supported (i.e SCHED_RR is supported)
+ 
+    type timespec is private;
+ 
+    function nanosleep (rqtp, rmtp : access timespec)  return int;
+    pragma Import (C, nanosleep, "nanosleep");
+ 
+    type clockid_t is private;
+ 
+    CLOCK_REALTIME : constant clockid_t;
+ 
+    function clock_gettime
+      (clock_id : clockid_t;
+       tp       : access timespec)
+       return int;
+    pragma Import (C, clock_gettime, "clock_gettime");
+ 
+    function To_Duration (TS : timespec) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timespec (D : Duration) return timespec;
+    pragma Inline (To_Timespec);
+ 
+    type struct_timezone is record
+       tz_minuteswest : int;
+       tz_dsttime     : int;
+    end record;
+    pragma Convention (C, struct_timezone);
+    type struct_timeval is private;
+    --  This is needed on systems that do not have clock_gettime()
+    --  but do have gettimeofday().
+ 
+    function To_Duration (TV : struct_timeval) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timeval (D : Duration) return struct_timeval;
+    pragma Inline (To_Timeval);
+ 
+    function gettimeofday
+      (tv : access struct_timeval;
+       tz : System.Address) return int;
+    pragma Import (C, gettimeofday, "gettimeofday");
+ 
+    procedure usleep (useconds : unsigned_long);
+    pragma Import (C, usleep, "usleep");
+ 
+    -------------------------
+    -- Priority Scheduling --
+    -------------------------
+ 
+    SCHED_FIFO  : constant := 1;
+    SCHED_OTHER : constant := 2;
+    SCHED_RR    : constant := 3;
+ 
+    -------------
+    -- Process --
+    -------------
+ 
+    type pid_t is private;
+ 
+    Self_PID : constant pid_t;
+ 
+    function kill (pid : pid_t; sig : Signal) return int;
+    pragma Import (C, kill, "kill");
+ 
+    function getpid return pid_t;
+    pragma Import (C, getpid, "getpid");
+ 
+    ---------
+    -- LWP --
+    ---------
+ 
+    function lwp_self return System.Address;
+    --  lwp_self does not exist on this thread library, revert to pthread_self
+    --  which is the closest approximation (with getpid). This function is
+    --  needed to share 7staprop.adb across POSIX-like targets.
+    pragma Import (C, lwp_self, "pthread_self");
+ 
+    -------------
+    -- Threads --
+    -------------
+ 
+    type Thread_Body is access
+      function (arg : System.Address) return System.Address;
+ 
+    function Thread_Body_Access is new
+      Unchecked_Conversion (System.Address, Thread_Body);
+ 
+    type pthread_t           is private;
+    subtype Thread_Id        is pthread_t;
+ 
+    type pthread_mutex_t     is limited private;
+    type pthread_cond_t      is limited private;
+    type pthread_attr_t      is limited private;
+    type pthread_mutexattr_t is limited private;
+    type pthread_condattr_t  is limited private;
+    type pthread_key_t       is private;
+ 
+    PTHREAD_CREATE_DETACHED : constant := 1;
+    PTHREAD_CREATE_JOINABLE : constant := 0;
+ 
+    -----------
+    -- Stack --
+    -----------
+ 
+    Stack_Base_Available : constant Boolean := False;
+    --  Indicates wether the stack base is available on this target.
+    --  This allows us to share s-osinte.adb between all the FSU run time.
+    --  Note that this value can only be true if pthread_t has a complete
+    --  definition that corresponds exactly to the C header files.
+ 
+    function Get_Stack_Base (thread : pthread_t) return Address;
+    pragma Inline (Get_Stack_Base);
+    --  returns the stack base of the specified thread.
+    --  Only call this function when Stack_Base_Available is True.
+ 
+    function Get_Page_Size return size_t;
+    function Get_Page_Size return Address;
+    pragma Import (C, Get_Page_Size, "getpagesize");
+    --  returns the size of a page, or 0 if this is not relevant on this
+    --  target
+ 
+    PROT_NONE  : constant := 0;
+    PROT_READ  : constant := 1;
+    PROT_WRITE : constant := 2;
+    PROT_EXEC  : constant := 4;
+    PROT_ALL   : constant := PROT_READ + PROT_WRITE + PROT_EXEC;
+ 
+    PROT_ON    : constant := PROT_NONE;
+    PROT_OFF   : constant := PROT_ALL;
+ 
+    function mprotect
+      (addr : Address; len : size_t; prot : int) return int;
+    pragma Import (C, mprotect);
+ 
+    ---------------------------------------
+    -- Nonstandard Thread Initialization --
+    ---------------------------------------
+ 
+    --  FSU_THREADS requires pthread_init, which is nonstandard and
+    --  this should be invoked during the elaboration of s-taprop.adb
+ 
+    --  FreeBSD does not require this so we provide an empty Ada body
+ 
+    procedure pthread_init;
+ 
+    -------------------------
+    -- POSIX.1c  Section 3 --
+    -------------------------
+ 
+    function sigwait
+      (set : access sigset_t;
+       sig : access Signal) return int;
+    pragma Import (C, sigwait, "sigwait");
+ 
+    function pthread_kill
+      (thread : pthread_t;
+       sig    : Signal) return int;
+    pragma Import (C, pthread_kill, "pthread_kill");
+ 
+    type sigset_t_ptr is access all sigset_t;
+ 
+    function pthread_sigmask
+      (how  : int;
+       set  : sigset_t_ptr;
+       oset : sigset_t_ptr) return int;
+    pragma Import (C, pthread_sigmask, "pthread_sigmask");
+ 
+    --------------------------
+    -- POSIX.1c  Section 11 --
+    --------------------------
+ 
+    function pthread_mutexattr_init
+      (attr : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
+ 
+    function pthread_mutexattr_destroy
+      (attr : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
+ 
+    function pthread_mutex_init
+      (mutex : access pthread_mutex_t;
+       attr  : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
+ 
+    function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
+ 
+    function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_lock, "pthread_mutex_lock");
+ 
+    function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_unlock, "pthread_mutex_unlock");
+ 
+    function pthread_condattr_init
+      (attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
+ 
+    function pthread_condattr_destroy
+      (attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
+ 
+    function pthread_cond_init
+      (cond : access pthread_cond_t;
+       attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_cond_init, "pthread_cond_init");
+ 
+    function pthread_cond_destroy (cond : access pthread_cond_t) return int;
+    pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
+ 
+    function pthread_cond_signal (cond : access pthread_cond_t) return int;
+    pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
+ 
+    function pthread_cond_wait
+      (cond  : access pthread_cond_t;
+       mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_cond_wait, "pthread_cond_wait");
+ 
+    function pthread_cond_timedwait
+      (cond    : access pthread_cond_t;
+       mutex   : access pthread_mutex_t;
+       abstime : access timespec) return int;
+    pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait");
+ 
+    Relative_Timed_Wait : constant Boolean := False;
+    --  pthread_cond_timedwait requires an absolute delay time
+ 
+    --------------------------
+    -- POSIX.1c  Section 13 --
+    --------------------------
+ 
+    PTHREAD_PRIO_NONE    : constant := 0;
+    PTHREAD_PRIO_PROTECT : constant := 2;
+    PTHREAD_PRIO_INHERIT : constant := 1;
+ 
+    function pthread_mutexattr_setprotocol
+      (attr     : access pthread_mutexattr_t;
+       protocol : int) return int;
+    pragma Import
+       (C, pthread_mutexattr_setprotocol, "pthread_mutexattr_setprotocol");
+ 
+    function pthread_mutexattr_getprotocol
+      (attr     : access pthread_mutexattr_t;
+       protocol : access int) return int;
+    pragma Import
+      (C, pthread_mutexattr_getprotocol, "pthread_mutexattr_getprotocol");
+ 
+    function pthread_mutexattr_setprioceiling
+      (attr     : access pthread_mutexattr_t;
+       prioceiling : int) return int;
+    pragma Import
+      (C, pthread_mutexattr_setprioceiling,
+       "pthread_mutexattr_setprioceiling");
+ 
+    function pthread_mutexattr_getprioceiling
+      (attr     : access pthread_mutexattr_t;
+       prioceiling : access int) return int;
+    pragma Import
+      (C, pthread_mutexattr_getprioceiling,
+       "pthread_mutexattr_getprioceiling");
+ 
+    type struct_sched_param is record
+       sched_priority : int;
+    end record;
+    pragma Convention (C, struct_sched_param);
+ 
+    function pthread_getschedparam
+      (thread : pthread_t;
+       policy : access int;
+       param  : access struct_sched_param) return int;
+    pragma Import (C, pthread_getschedparam, "pthread_getschedparam");
+ 
+    function pthread_setschedparam
+      (thread : pthread_t;
+       policy : int;
+       param  : access struct_sched_param) return int;
+    pragma Import (C, pthread_setschedparam, "pthread_setschedparam");
+ 
+    function pthread_attr_setscope
+      (attr            : access pthread_attr_t;
+       contentionscope : int) return int;
+    pragma Import (C, pthread_attr_setscope, "pthread_attr_setscope");
+ 
+    function pthread_attr_getscope
+      (attr            : access pthread_attr_t;
+       contentionscope : access int) return int;
+    pragma Import (C, pthread_attr_getscope, "pthread_attr_getscope");
+ 
+    function pthread_attr_setinheritsched
+      (attr            : access pthread_attr_t;
+       inheritsched : int) return int;
+    pragma Import
+      (C, pthread_attr_setinheritsched, "pthread_attr_setinheritsched");
+ 
+    function pthread_attr_getinheritsched
+      (attr         : access pthread_attr_t;
+       inheritsched : access int) return int;
+    pragma Import
+      (C, pthread_attr_getinheritsched, "pthread_attr_getinheritsched");
+ 
+    function pthread_attr_setschedpolicy
+      (attr   : access pthread_attr_t;
+       policy : int) return int;
+    pragma Import (C, pthread_attr_setschedpolicy,
+      "pthread_attr_setschedpolicy");
+ 
+    function pthread_attr_getschedpolicy
+      (attr   : access pthread_attr_t;
+       policy : access int) return int;
+    pragma Import (C, pthread_attr_getschedpolicy,
+      "pthread_attr_getschedpolicy");
+ 
+    function pthread_attr_setschedparam
+      (attr        : access pthread_attr_t;
+       sched_param : int) return int;
+    pragma Import (C, pthread_attr_setschedparam, "pthread_attr_setschedparam");
+ 
+    function pthread_attr_getschedparam
+      (attr        : access pthread_attr_t;
+       sched_param : access int) return int;
+    pragma Import (C, pthread_attr_getschedparam, "pthread_attr_getschedparam");
+ 
+    function sched_yield return int;
+    pragma Import (C, sched_yield, "pthread_yield");
+ 
+    --------------------------
+    -- P1003.1c  Section 16 --
+    --------------------------
+ 
+    function pthread_attr_init (attributes : access pthread_attr_t) return int;
+    pragma Import (C, pthread_attr_init, "pthread_attr_init");
+ 
+    function pthread_attr_destroy
+      (attributes : access pthread_attr_t) return int;
+    pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
+ 
+    function pthread_attr_setdetachstate
+      (attr        : access pthread_attr_t;
+       detachstate : int) return int;
+    pragma Import
+      (C, pthread_attr_setdetachstate, "pthread_attr_setdetachstate");
+ 
+    function pthread_attr_getdetachstate
+      (attr        : access pthread_attr_t;
+       detachstate : access int) return int;
+    pragma Import
+      (C, pthread_attr_getdetachstate, "pthread_attr_getdetachstate");
+ 
+    function pthread_attr_getstacksize
+      (attr      : access pthread_attr_t;
+       stacksize : access size_t) return int;
+    pragma Import
+      (C, pthread_attr_getstacksize, "pthread_attr_getstacksize");
+ 
+    function pthread_attr_setstacksize
+      (attr      : access pthread_attr_t;
+       stacksize : size_t) return int;
+    pragma Import
+      (C, pthread_attr_setstacksize, "pthread_attr_setstacksize");
+ 
+    function pthread_create
+      (thread        : access pthread_t;
+       attributes    : access pthread_attr_t;
+       start_routine : Thread_Body;
+       arg           : System.Address) return int;
+    pragma Import (C, pthread_create, "pthread_create");
+ 
+    function pthread_detach (thread : pthread_t) return int;
+    pragma Import (C, pthread_detach, "pthread_detach");
+ 
+    procedure pthread_exit (status : System.Address);
+    pragma Import (C, pthread_exit, "pthread_exit");
+ 
+    function pthread_self return pthread_t;
+    pragma Import (C, pthread_self, "pthread_self");
+ 
+    --------------------------
+    -- POSIX.1c  Section 17 --
+    --------------------------
+ 
+    function pthread_setspecific
+      (key   : pthread_key_t;
+       value : System.Address) return  int;
+    pragma Import (C, pthread_setspecific, "pthread_setspecific");
+ 
+    function pthread_getspecific (key : pthread_key_t) return System.Address;
+    pragma Import (C, pthread_getspecific, "pthread_getspecific");
+ 
+    type destructor_pointer is access
+       procedure (arg : System.Address);
+ 
+    function pthread_key_create
+      (key        : access pthread_key_t;
+       destructor : destructor_pointer) return int;
+    pragma Import (C, pthread_key_create, "pthread_key_create");
+ 
+    ------------------------------------
+    -- Non-portable Pthread Functions --
+    ------------------------------------
+ 
+    function pthread_set_name_np
+      (thread : pthread_t;
+       name   : System.Address) return int;
+    pragma Import (C, pthread_set_name_np, "pthread_set_name_np");
+ 
+ private
+ 
+    type sigset_t is array (1 .. 4) of unsigned;
+ 
+    --  In FreeBSD the component sa_handler turns out to
+    --  be one a union type, and the selector is a macro:
+    --  #define sa_handler __sigaction_u._handler
+    --  #define sa_sigaction __sigaction_u._sigaction
+ 
+    --  Should we add a signal_context type here ???
+    --  How could it be done independent of the CPU architecture ???
+    --  sigcontext type is opaque, so it is architecturally neutral.
+    --  It is always passed as an access type, so define it as an empty record
+    --  since the contents are not used anywhere.
+ 
+    type struct_sigcontext is null record;
+    pragma Convention (C, struct_sigcontext);
+ 
+    type pid_t is new int;
+    Self_PID : constant pid_t := 0;
+ 
+    type time_t is new long;
+ 
+    type timespec is record
+       ts_sec  : time_t;
+       ts_nsec : long;
+    end record;
+    pragma Convention (C, timespec);
+ 
+    type clockid_t is new int;
+    CLOCK_REALTIME : constant clockid_t := 0;
+ 
+    type struct_timeval is record
+       tv_sec  : long;
+       tv_usec : long;
+    end record;
+    pragma Convention (C, struct_timeval);
+ 
+    type pthread_t           is new System.Address;
+    type pthread_attr_t      is new System.Address;
+    type pthread_mutex_t     is new System.Address;
+    type pthread_mutexattr_t is new System.Address;
+    type pthread_cond_t      is new System.Address;
+    type pthread_condattr_t  is new System.Address;
+    type pthread_key_t       is new int;
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-fsu.adb gcc-4.0.0/gcc/ada/s-osinte-fsu.adb
*** gcc-3.4.3/gcc/ada/s-osinte-fsu.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-fsu.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,366 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   S Y S T E M . O S _ I N T E R F A C E                  --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2003, Ada Core Technologies               --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a FSU Threads version of this package
+ 
+ pragma Polling (Off);
+ --  Turn off polling, we do not want ATC polling to take place during
+ --  tasking operations. It causes infinite loops and other problems.
+ 
+ with Interfaces.C;
+ 
+ package body System.OS_Interface is
+ 
+    use Interfaces.C;
+ 
+    -----------------
+    -- To_Duration --
+    -----------------
+ 
+    function To_Duration (TS : timespec) return Duration is
+    begin
+       return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9;
+    end To_Duration;
+ 
+    function To_Duration (TV : struct_timeval) return Duration is
+    begin
+       return Duration (TV.tv_sec) + Duration (TV.tv_usec) / 10#1#E6;
+    end To_Duration;
+ 
+    -----------------
+    -- To_Timespec --
+    -----------------
+ 
+    function To_Timespec (D : Duration) return timespec is
+       S : time_t;
+       F : Duration;
+ 
+    begin
+       S := time_t (Long_Long_Integer (D));
+       F := D - Duration (S);
+ 
+       --  If F has negative value due to a round-up, adjust for positive F
+       --  value.
+ 
+       if F < 0.0 then
+          S := S - 1;
+          F := F + 1.0;
+       end if;
+ 
+       return timespec'(tv_sec  => S,
+                        tv_nsec => long (Long_Long_Integer (F * 10#1#E9)));
+    end To_Timespec;
+ 
+    ----------------
+    -- To_Timeval --
+    ----------------
+ 
+    function To_Timeval (D : Duration) return struct_timeval is
+       S : long;
+       F : Duration;
+ 
+    begin
+       S := long (Long_Long_Integer (D));
+       F := D - Duration (S);
+ 
+       --  If F has negative value due to a round-up, adjust for positive F
+       --  value.
+ 
+       if F < 0.0 then
+          S := S - 1;
+          F := F + 1.0;
+       end if;
+ 
+       return
+         struct_timeval'
+           (tv_sec  => S,
+            tv_usec => long (Long_Long_Integer (F * 10#1#E6)));
+    end To_Timeval;
+ 
+    -------------
+    -- sigwait --
+    -------------
+ 
+    --  FSU_THREADS has a nonstandard sigwait
+ 
+    function sigwait
+      (set  : access sigset_t;
+       sig  : access Signal) return int
+    is
+       Result : int;
+ 
+       function sigwait_base (set : access sigset_t) return int;
+       pragma Import (C, sigwait_base, "sigwait");
+ 
+    begin
+       Result := sigwait_base (set);
+ 
+       if Result = -1 then
+          sig.all := 0;
+          return errno;
+       end if;
+ 
+       sig.all := Signal (Result);
+       return 0;
+    end sigwait;
+ 
+    ------------------------
+    -- pthread_mutex_lock --
+    ------------------------
+ 
+    --  FSU_THREADS has nonstandard pthread_mutex_lock and unlock.
+    --  It sets errno but the standard Posix requires it to be returned.
+ 
+    function pthread_mutex_lock (mutex : access pthread_mutex_t) return int is
+       function pthread_mutex_lock_base
+         (mutex : access pthread_mutex_t) return int;
+       pragma Import (C, pthread_mutex_lock_base, "pthread_mutex_lock");
+ 
+       Result : int;
+ 
+    begin
+       Result := pthread_mutex_lock_base (mutex);
+ 
+       if Result /= 0 then
+          return errno;
+       end if;
+ 
+       return 0;
+    end pthread_mutex_lock;
+ 
+    --------------------------
+    -- pthread_mutex_unlock --
+    --------------------------
+ 
+    function pthread_mutex_unlock
+      (mutex : access pthread_mutex_t) return int
+    is
+       function pthread_mutex_unlock_base
+         (mutex : access pthread_mutex_t) return int;
+       pragma Import (C, pthread_mutex_unlock_base, "pthread_mutex_unlock");
+ 
+       Result : int;
+ 
+    begin
+       Result := pthread_mutex_unlock_base (mutex);
+ 
+       if Result /= 0 then
+          return errno;
+       end if;
+ 
+       return 0;
+    end pthread_mutex_unlock;
+ 
+    -----------------------
+    -- pthread_cond_wait --
+    -----------------------
+ 
+    --  FSU_THREADS has a nonstandard pthread_cond_wait.
+    --  The FSU_THREADS version returns EINTR when interrupted.
+ 
+    function pthread_cond_wait
+      (cond  : access pthread_cond_t;
+       mutex : access pthread_mutex_t) return int
+    is
+       function pthread_cond_wait_base
+         (cond  : access pthread_cond_t;
+          mutex : access pthread_mutex_t) return int;
+       pragma Import (C, pthread_cond_wait_base, "pthread_cond_wait");
+ 
+       Result : int;
+ 
+    begin
+       Result := pthread_cond_wait_base (cond, mutex);
+ 
+       if Result = EINTR then
+          return 0;
+       else
+          return Result;
+       end if;
+    end pthread_cond_wait;
+ 
+    ----------------------------
+    -- pthread_cond_timedwait --
+    ----------------------------
+ 
+    --  FSU_THREADS has a nonstandard pthread_cond_timedwait. The
+    --  FSU_THREADS version returns -1 and set errno to EAGAIN for timeout.
+ 
+    function pthread_cond_timedwait
+      (cond    : access pthread_cond_t;
+       mutex   : access pthread_mutex_t;
+       abstime : access timespec) return int
+    is
+       function pthread_cond_timedwait_base
+         (cond    : access pthread_cond_t;
+          mutex   : access pthread_mutex_t;
+          abstime : access timespec) return int;
+       pragma Import (C, pthread_cond_timedwait_base, "pthread_cond_timedwait");
+ 
+       Result : int;
+ 
+    begin
+       Result := pthread_cond_timedwait_base (cond, mutex, abstime);
+ 
+       if Result = -1 then
+          if errno = EAGAIN then
+             return ETIMEDOUT;
+          else
+             return EINVAL;
+          end if;
+       end if;
+ 
+       return 0;
+    end pthread_cond_timedwait;
+ 
+    ---------------------------
+    -- pthread_setschedparam --
+    ---------------------------
+ 
+    --  FSU_THREADS does not have pthread_setschedparam
+ 
+    --  This routine returns a non-negative value upon failure
+    --  but the error code can not be set conforming the POSIX standard.
+ 
+    function pthread_setschedparam
+      (thread : pthread_t;
+       policy : int;
+       param  : access struct_sched_param) return int
+    is
+       function pthread_setschedattr
+         (thread : pthread_t;
+          attr   : pthread_attr_t) return int;
+       pragma Import (C, pthread_setschedattr, "pthread_setschedattr");
+ 
+       attr   : aliased pthread_attr_t;
+       Result : int;
+ 
+    begin
+       Result := pthread_attr_init (attr'Access);
+ 
+       if Result /= 0 then
+          return Result;
+       end if;
+ 
+       attr.sched := policy;
+ 
+       --  Short-cut around pthread_attr_setprio
+ 
+       attr.prio := param.sched_priority;
+ 
+       Result := pthread_setschedattr (thread, attr);
+ 
+       if Result /= 0 then
+          return Result;
+       end if;
+ 
+       Result := pthread_attr_destroy (attr'Access);
+ 
+       if Result /= 0 then
+          return Result;
+       else
+          return 0;
+       end if;
+    end pthread_setschedparam;
+ 
+    -------------------------
+    -- pthread_getspecific --
+    -------------------------
+ 
+    --  FSU_THREADS has a nonstandard pthread_getspecific
+ 
+    function pthread_getspecific (key : pthread_key_t) return System.Address is
+       function pthread_getspecific_base
+         (key   : pthread_key_t;
+          value : access System.Address) return int;
+       pragma Import (C, pthread_getspecific_base, "pthread_getspecific");
+ 
+       Tmp    : aliased System.Address;
+       Result : int;
+ 
+    begin
+       Result := pthread_getspecific_base (key, Tmp'Access);
+ 
+       if Result /= 0 then
+          return System.Null_Address;
+       end if;
+ 
+       return Tmp;
+    end pthread_getspecific;
+ 
+    ---------------------------------
+    -- pthread_attr_setdetachstate --
+    ---------------------------------
+ 
+    function pthread_attr_setdetachstate
+      (attr        : access pthread_attr_t;
+       detachstate : int) return int
+    is
+       function pthread_attr_setdetachstate_base
+         (attr        : access pthread_attr_t;
+          detachstate : access int) return int;
+       pragma Import
+         (C, pthread_attr_setdetachstate_base, "pthread_attr_setdetachstate");
+ 
+       Tmp : aliased int := detachstate;
+ 
+    begin
+       return pthread_attr_setdetachstate_base (attr, Tmp'Access);
+    end pthread_attr_setdetachstate;
+ 
+    -----------------
+    -- sched_yield --
+    -----------------
+ 
+    --  FSU_THREADS does not have sched_yield;
+ 
+    function sched_yield return int is
+       procedure sched_yield_base (arg : System.Address);
+       pragma Import (C, sched_yield_base, "pthread_yield");
+ 
+    begin
+       sched_yield_base (System.Null_Address);
+       return 0;
+    end sched_yield;
+ 
+    ----------------
+    -- Stack_Base --
+    ----------------
+ 
+    function Get_Stack_Base (thread : pthread_t) return Address is
+    begin
+       return thread.stack_base;
+    end Get_Stack_Base;
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-hpux-dce.adb gcc-4.0.0/gcc/ada/s-osinte-hpux-dce.adb
*** gcc-3.4.3/gcc/ada/s-osinte-hpux-dce.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-hpux-dce.adb	Tue Jul  6 13:57:29 2004
***************
*** 0 ****
--- 1,530 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   S Y S T E M . O S _ I N T E R F A C E                  --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2004, Ada Core Technologies               --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a DCE version of this package.
+ --  Currently HP-UX and SNI use this file
+ 
+ pragma Polling (Off);
+ --  Turn off polling, we do not want ATC polling to take place during
+ --  tasking operations. It causes infinite loops and other problems.
+ 
+ --  This package encapsulates all direct interfaces to OS services
+ --  that are needed by children of System.
+ 
+ with Interfaces.C; use Interfaces.C;
+ 
+ package body System.OS_Interface is
+ 
+    -----------------
+    -- To_Duration --
+    -----------------
+ 
+    function To_Duration (TS : timespec) return Duration is
+    begin
+       return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9;
+    end To_Duration;
+ 
+    -----------------
+    -- To_Timespec --
+    -----------------
+ 
+    function To_Timespec (D : Duration) return timespec is
+       S : time_t;
+       F : Duration;
+ 
+    begin
+       S := time_t (Long_Long_Integer (D));
+       F := D - Duration (S);
+ 
+       --  If F has negative value due to a round-up, adjust for positive F
+       --  value.
+       if F < 0.0 then
+          S := S - 1;
+          F := F + 1.0;
+       end if;
+ 
+       return timespec'(tv_sec => S,
+                        tv_nsec => long (Long_Long_Integer (F * 10#1#E9)));
+    end To_Timespec;
+ 
+    function To_Duration (TV : struct_timeval) return Duration is
+    begin
+       return Duration (TV.tv_sec) + Duration (TV.tv_usec) / 10#1#E6;
+    end To_Duration;
+ 
+    function To_Timeval (D : Duration) return struct_timeval is
+       S : time_t;
+       F : Duration;
+    begin
+       S := time_t (Long_Long_Integer (D));
+       F := D - Duration (S);
+ 
+       --  If F has negative value due to a round-up, adjust for positive F
+       --  value.
+ 
+       if F < 0.0 then
+          S := S - 1;
+          F := F + 1.0;
+       end if;
+ 
+       return
+         struct_timeval'
+           (tv_sec => S,
+            tv_usec => time_t (Long_Long_Integer (F * 10#1#E6)));
+    end To_Timeval;
+ 
+    -------------------------
+    -- POSIX.1c  Section 3 --
+    -------------------------
+ 
+    function sigwait
+      (set : access sigset_t;
+       sig : access Signal) return int
+    is
+       Result : int;
+ 
+    begin
+       Result := sigwait (set);
+ 
+       if Result = -1 then
+          sig.all := 0;
+          return errno;
+       end if;
+ 
+       sig.all := Signal (Result);
+       return 0;
+    end sigwait;
+ 
+    --  DCE_THREADS does not have pthread_kill. Instead, we just ignore it.
+ 
+    function pthread_kill (thread : pthread_t; sig : Signal) return int is
+       pragma Unreferenced (thread, sig);
+    begin
+       return 0;
+    end pthread_kill;
+ 
+    --------------------------
+    -- POSIX.1c  Section 11 --
+    --------------------------
+ 
+    --  For all following functions, DCE Threads has a non standard behavior.
+    --  It sets errno but the standard Posix requires it to be returned.
+ 
+    function pthread_mutexattr_init
+      (attr : access pthread_mutexattr_t) return int
+    is
+       function pthread_mutexattr_create
+         (attr : access pthread_mutexattr_t) return int;
+       pragma Import (C, pthread_mutexattr_create, "pthread_mutexattr_create");
+ 
+    begin
+       if pthread_mutexattr_create (attr) /= 0 then
+          return errno;
+       else
+          return 0;
+       end if;
+    end pthread_mutexattr_init;
+ 
+    function pthread_mutexattr_destroy
+      (attr : access pthread_mutexattr_t) return int
+    is
+       function pthread_mutexattr_delete
+         (attr : access pthread_mutexattr_t) return int;
+       pragma Import (C, pthread_mutexattr_delete, "pthread_mutexattr_delete");
+ 
+    begin
+       if pthread_mutexattr_delete (attr) /= 0 then
+          return errno;
+       else
+          return 0;
+       end if;
+    end pthread_mutexattr_destroy;
+ 
+    function pthread_mutex_init
+      (mutex : access pthread_mutex_t;
+       attr  : access pthread_mutexattr_t) return int
+    is
+       function pthread_mutex_init_base
+         (mutex : access pthread_mutex_t;
+          attr  : pthread_mutexattr_t) return int;
+       pragma Import (C, pthread_mutex_init_base, "pthread_mutex_init");
+ 
+    begin
+       if pthread_mutex_init_base (mutex, attr.all) /= 0 then
+          return errno;
+       else
+          return 0;
+       end if;
+    end pthread_mutex_init;
+ 
+    function pthread_mutex_destroy
+      (mutex : access pthread_mutex_t) return int
+    is
+       function pthread_mutex_destroy_base
+         (mutex : access pthread_mutex_t) return int;
+       pragma Import (C, pthread_mutex_destroy_base, "pthread_mutex_destroy");
+ 
+    begin
+       if pthread_mutex_destroy_base (mutex) /= 0 then
+          return errno;
+       else
+          return 0;
+       end if;
+    end pthread_mutex_destroy;
+ 
+    function pthread_mutex_lock
+      (mutex : access pthread_mutex_t) return int
+    is
+       function pthread_mutex_lock_base
+         (mutex : access pthread_mutex_t) return int;
+       pragma Import (C, pthread_mutex_lock_base, "pthread_mutex_lock");
+ 
+    begin
+       if pthread_mutex_lock_base (mutex) /= 0 then
+          return errno;
+       else
+          return 0;
+       end if;
+    end pthread_mutex_lock;
+ 
+    function pthread_mutex_unlock
+      (mutex : access pthread_mutex_t) return int
+    is
+       function pthread_mutex_unlock_base
+         (mutex : access pthread_mutex_t) return int;
+       pragma Import (C, pthread_mutex_unlock_base, "pthread_mutex_unlock");
+ 
+    begin
+       if pthread_mutex_unlock_base (mutex) /= 0 then
+          return errno;
+       else
+          return 0;
+       end if;
+    end pthread_mutex_unlock;
+ 
+    function pthread_condattr_init
+      (attr : access pthread_condattr_t) return int
+    is
+       function pthread_condattr_create
+         (attr : access pthread_condattr_t) return int;
+       pragma Import (C, pthread_condattr_create, "pthread_condattr_create");
+ 
+    begin
+       if pthread_condattr_create (attr) /= 0 then
+          return errno;
+       else
+          return 0;
+       end if;
+    end pthread_condattr_init;
+ 
+    function pthread_condattr_destroy
+      (attr : access pthread_condattr_t) return int
+    is
+       function pthread_condattr_delete
+         (attr : access pthread_condattr_t) return int;
+       pragma Import (C, pthread_condattr_delete, "pthread_condattr_delete");
+ 
+    begin
+       if pthread_condattr_delete (attr) /= 0 then
+          return errno;
+       else
+          return 0;
+       end if;
+    end pthread_condattr_destroy;
+ 
+    function pthread_cond_init
+      (cond : access pthread_cond_t;
+       attr : access pthread_condattr_t) return int
+    is
+       function pthread_cond_init_base
+         (cond : access pthread_cond_t;
+          attr : pthread_condattr_t) return int;
+       pragma Import (C, pthread_cond_init_base, "pthread_cond_init");
+ 
+    begin
+       if pthread_cond_init_base (cond, attr.all) /= 0 then
+          return errno;
+       else
+          return 0;
+       end if;
+    end pthread_cond_init;
+ 
+    function pthread_cond_destroy
+      (cond : access pthread_cond_t) return int
+    is
+       function pthread_cond_destroy_base
+         (cond : access pthread_cond_t) return int;
+       pragma Import (C, pthread_cond_destroy_base, "pthread_cond_destroy");
+ 
+    begin
+       if pthread_cond_destroy_base (cond) /= 0 then
+          return errno;
+       else
+          return 0;
+       end if;
+    end pthread_cond_destroy;
+ 
+    function pthread_cond_signal
+      (cond : access pthread_cond_t) return int
+    is
+       function pthread_cond_signal_base
+         (cond : access pthread_cond_t) return int;
+       pragma Import (C, pthread_cond_signal_base, "pthread_cond_signal");
+ 
+    begin
+       if pthread_cond_signal_base (cond) /= 0 then
+          return errno;
+       else
+          return 0;
+       end if;
+    end pthread_cond_signal;
+ 
+    function pthread_cond_wait
+      (cond  : access pthread_cond_t;
+       mutex : access pthread_mutex_t) return int
+    is
+       function pthread_cond_wait_base
+         (cond  : access pthread_cond_t;
+          mutex : access pthread_mutex_t) return int;
+       pragma Import (C, pthread_cond_wait_base, "pthread_cond_wait");
+ 
+    begin
+       if pthread_cond_wait_base (cond, mutex) /= 0 then
+          return errno;
+       else
+          return 0;
+       end if;
+    end pthread_cond_wait;
+ 
+    function pthread_cond_timedwait
+      (cond    : access pthread_cond_t;
+       mutex   : access pthread_mutex_t;
+       abstime : access timespec) return int
+    is
+       function pthread_cond_timedwait_base
+         (cond    : access pthread_cond_t;
+          mutex   : access pthread_mutex_t;
+          abstime : access timespec) return int;
+       pragma Import (C, pthread_cond_timedwait_base, "pthread_cond_timedwait");
+ 
+    begin
+       if pthread_cond_timedwait_base (cond, mutex, abstime) /= 0 then
+          if errno = EAGAIN then
+             return ETIMEDOUT;
+          else
+             return errno;
+          end if;
+       else
+          return 0;
+       end if;
+    end pthread_cond_timedwait;
+ 
+    ----------------------------
+    --  POSIX.1c  Section 13  --
+    ----------------------------
+ 
+    function pthread_setschedparam
+      (thread : pthread_t;
+       policy : int;
+       param  : access struct_sched_param) return int
+    is
+       function pthread_setscheduler
+         (thread   : pthread_t;
+          policy   : int;
+          priority : int) return int;
+       pragma Import (C, pthread_setscheduler, "pthread_setscheduler");
+ 
+    begin
+       if pthread_setscheduler (thread, policy, param.sched_priority) = -1 then
+          return errno;
+       else
+          return 0;
+       end if;
+    end pthread_setschedparam;
+ 
+    function sched_yield return int is
+       procedure pthread_yield;
+       pragma Import (C, pthread_yield, "pthread_yield");
+    begin
+       pthread_yield;
+       return 0;
+    end sched_yield;
+ 
+    -----------------------------
+    --  P1003.1c - Section 16  --
+    -----------------------------
+ 
+    function pthread_attr_init
+      (attributes : access pthread_attr_t) return int
+    is
+       function pthread_attr_create
+         (attributes : access pthread_attr_t) return int;
+       pragma Import (C, pthread_attr_create, "pthread_attr_create");
+ 
+    begin
+       if pthread_attr_create (attributes) /= 0 then
+          return errno;
+       else
+          return 0;
+       end if;
+    end pthread_attr_init;
+ 
+    function pthread_attr_destroy
+      (attributes : access pthread_attr_t) return int
+    is
+       function pthread_attr_delete
+         (attributes : access pthread_attr_t) return int;
+       pragma Import (C, pthread_attr_delete, "pthread_attr_delete");
+ 
+    begin
+       if pthread_attr_delete (attributes) /= 0 then
+          return errno;
+       else
+          return 0;
+       end if;
+    end pthread_attr_destroy;
+ 
+    function pthread_attr_setstacksize
+      (attr      : access pthread_attr_t;
+       stacksize : size_t) return int
+    is
+       function pthread_attr_setstacksize_base
+         (attr      : access pthread_attr_t;
+          stacksize : size_t) return int;
+       pragma Import (C, pthread_attr_setstacksize_base,
+                      "pthread_attr_setstacksize");
+ 
+    begin
+       if pthread_attr_setstacksize_base (attr, stacksize) /= 0 then
+          return errno;
+       else
+          return 0;
+       end if;
+    end pthread_attr_setstacksize;
+ 
+    function pthread_create
+      (thread        : access pthread_t;
+       attributes    : access pthread_attr_t;
+       start_routine : Thread_Body;
+       arg           : System.Address) return int
+    is
+       function pthread_create_base
+         (thread        : access pthread_t;
+          attributes    : pthread_attr_t;
+          start_routine : Thread_Body;
+          arg           : System.Address) return int;
+       pragma Import (C, pthread_create_base, "pthread_create");
+ 
+    begin
+       if pthread_create_base
+         (thread, attributes.all, start_routine, arg) /= 0
+       then
+          return errno;
+       else
+          return 0;
+       end if;
+    end pthread_create;
+ 
+    --------------------------
+    -- POSIX.1c  Section 17 --
+    --------------------------
+ 
+    function pthread_setspecific
+      (key   : pthread_key_t;
+       value : System.Address) return int
+    is
+       function pthread_setspecific_base
+         (key   : pthread_key_t;
+          value : System.Address) return int;
+       pragma Import (C, pthread_setspecific_base, "pthread_setspecific");
+ 
+    begin
+       if pthread_setspecific_base (key, value) /= 0 then
+          return errno;
+       else
+          return 0;
+       end if;
+    end pthread_setspecific;
+ 
+    function pthread_getspecific (key : pthread_key_t) return System.Address is
+       function pthread_getspecific_base
+         (key   : pthread_key_t;
+          value : access System.Address) return  int;
+       pragma Import (C, pthread_getspecific_base, "pthread_getspecific");
+       Addr : aliased System.Address;
+ 
+    begin
+       if pthread_getspecific_base (key, Addr'Access) /= 0 then
+          return System.Null_Address;
+       else
+          return Addr;
+       end if;
+    end pthread_getspecific;
+ 
+    function pthread_key_create
+      (key        : access pthread_key_t;
+       destructor : destructor_pointer) return int
+    is
+       function pthread_keycreate
+         (key        : access pthread_key_t;
+          destructor : destructor_pointer) return int;
+       pragma Import (C, pthread_keycreate, "pthread_keycreate");
+ 
+    begin
+       if pthread_keycreate (key, destructor) /= 0 then
+          return errno;
+       else
+          return 0;
+       end if;
+    end pthread_key_create;
+ 
+    function Get_Stack_Base (thread : pthread_t) return Address is
+       pragma Warnings (Off, thread);
+    begin
+       return Null_Address;
+    end Get_Stack_Base;
+ 
+    procedure pthread_init is
+    begin
+       null;
+    end pthread_init;
+ 
+    function intr_attach (sig : int; handler : isr_address) return long is
+       function c_signal (sig : int; handler : isr_address) return long;
+       pragma Import (C, c_signal, "signal");
+    begin
+       return c_signal (sig, handler);
+    end intr_attach;
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-hpux-dce.ads gcc-4.0.0/gcc/ada/s-osinte-hpux-dce.ads
*** gcc-3.4.3/gcc/ada/s-osinte-hpux-dce.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-hpux-dce.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,495 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   S Y S T E M . O S _ I N T E R F A C E                  --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2004, Free Software Foundation, Inc.      --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the HP-UX version of this package
+ 
+ --  This package encapsulates all direct interfaces to OS services
+ --  that are needed by children of System.
+ 
+ --  PLEASE DO NOT add any with-clauses to this package or remove the pragma
+ --  Preelaborate. This package is designed to be a bottom-level (leaf) package.
+ 
+ with Interfaces.C;
+ with Unchecked_Conversion;
+ 
+ package System.OS_Interface is
+    pragma Preelaborate;
+ 
+    pragma Linker_Options ("-lcma");
+ 
+    subtype int            is Interfaces.C.int;
+    subtype short          is Interfaces.C.short;
+    subtype long           is Interfaces.C.long;
+    subtype unsigned       is Interfaces.C.unsigned;
+    subtype unsigned_short is Interfaces.C.unsigned_short;
+    subtype unsigned_long  is Interfaces.C.unsigned_long;
+    subtype unsigned_char  is Interfaces.C.unsigned_char;
+    subtype plain_char     is Interfaces.C.plain_char;
+    subtype size_t         is Interfaces.C.size_t;
+ 
+    -----------
+    -- Errno --
+    -----------
+ 
+    function errno return int;
+    pragma Import (C, errno, "__get_errno");
+ 
+    EAGAIN    : constant := 11;
+    EINTR     : constant := 4;
+    EINVAL    : constant := 22;
+    ENOMEM    : constant := 12;
+    ETIME     : constant := 52;
+    ETIMEDOUT : constant := 238;
+ 
+    FUNC_ERR : constant := -1;
+ 
+    -------------
+    -- Signals --
+    -------------
+ 
+    Max_Interrupt : constant := 44;
+    type Signal is new int range 0 .. Max_Interrupt;
+    for Signal'Size use int'Size;
+ 
+    SIGHUP     : constant := 1; --  hangup
+    SIGINT     : constant := 2; --  interrupt (rubout)
+    SIGQUIT    : constant := 3; --  quit (ASCD FS)
+    SIGILL     : constant := 4; --  illegal instruction (not reset)
+    SIGTRAP    : constant := 5; --  trace trap (not reset)
+    SIGIOT     : constant := 6; --  IOT instruction
+    SIGABRT    : constant := 6; --  used by abort, replace SIGIOT in the  future
+    SIGEMT     : constant := 7; --  EMT instruction
+    SIGFPE     : constant := 8; --  floating point exception
+    SIGKILL    : constant := 9; --  kill (cannot be caught or ignored)
+    SIGBUS     : constant := 10; --  bus error
+    SIGSEGV    : constant := 11; --  segmentation violation
+    SIGSYS     : constant := 12; --  bad argument to system call
+    SIGPIPE    : constant := 13; --  write on a pipe with no one to read it
+    SIGALRM    : constant := 14; --  alarm clock
+    SIGTERM    : constant := 15; --  software termination signal from kill
+    SIGUSR1    : constant := 16; --  user defined signal 1
+    SIGUSR2    : constant := 17; --  user defined signal 2
+    SIGCLD     : constant := 18; --  alias for SIGCHLD
+    SIGCHLD    : constant := 18; --  child status change
+    SIGPWR     : constant := 19; --  power-fail restart
+    SIGVTALRM  : constant := 20; --  virtual timer alarm
+    SIGPROF    : constant := 21; --  profiling timer alarm
+    SIGIO      : constant := 22; --  asynchronous I/O
+    SIGPOLL    : constant := 22; --  pollable event occurred
+    SIGWINCH   : constant := 23; --  window size change
+    SIGSTOP    : constant := 24; --  stop (cannot be caught or ignored)
+    SIGTSTP    : constant := 25; --  user stop requested from tty
+    SIGCONT    : constant := 26; --  stopped process has been continued
+    SIGTTIN    : constant := 27; --  background tty read attempted
+    SIGTTOU    : constant := 28; --  background tty write attempted
+    SIGURG     : constant := 29; --  urgent condition on IO channel
+    SIGLOST    : constant := 30; --  remote lock lost  (NFS)
+    SIGDIL     : constant := 32; --  DIL signal
+    SIGXCPU    : constant := 33; --  CPU time limit exceeded (setrlimit)
+    SIGXFSZ    : constant := 34; --  file size limit exceeded (setrlimit)
+ 
+    SIGADAABORT : constant := SIGABRT;
+    --  Note: on other targets, we usually use SIGABRT, but on HP/UX, it
+    --  appears that SIGABRT can't be used in sigwait(), so we use SIGTERM.
+ 
+    type Signal_Set is array (Natural range <>) of Signal;
+ 
+    Unmasked    : constant Signal_Set :=
+      (SIGBUS, SIGTRAP, SIGTTIN, SIGTTOU, SIGTSTP);
+ 
+    Reserved    : constant Signal_Set := (SIGKILL, SIGSTOP);
+ 
+    type sigset_t is private;
+ 
+    type isr_address is access procedure (sig : int);
+ 
+    function intr_attach (sig : int; handler : isr_address) return long;
+ 
+    Intr_Attach_Reset : constant Boolean := True;
+    --  True if intr_attach is reset after an interrupt handler is called
+ 
+    function sigaddset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigaddset, "sigaddset");
+ 
+    function sigdelset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigdelset, "sigdelset");
+ 
+    function sigfillset (set : access sigset_t) return int;
+    pragma Import (C, sigfillset, "sigfillset");
+ 
+    function sigismember (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigismember, "sigismember");
+ 
+    function sigemptyset (set : access sigset_t) return int;
+    pragma Import (C, sigemptyset, "sigemptyset");
+ 
+    type Signal_Handler is access procedure (signo : Signal);
+ 
+    type struct_sigaction is record
+       sa_handler : System.Address;
+       sa_mask    : sigset_t;
+       sa_flags   : int;
+    end record;
+    pragma Convention (C, struct_sigaction);
+    type struct_sigaction_ptr is access all struct_sigaction;
+ 
+    SA_RESTART  : constant  := 16#40#;
+    SA_SIGINFO  : constant  := 16#10#;
+ 
+    SIG_BLOCK   : constant  := 0;
+    SIG_UNBLOCK : constant  := 1;
+    SIG_SETMASK : constant  := 2;
+ 
+    SIG_DFL : constant := 0;
+    SIG_IGN : constant := 1;
+    SIG_ERR : constant := -1;
+ 
+    function sigaction
+      (sig  : Signal;
+       act  : struct_sigaction_ptr;
+       oact : struct_sigaction_ptr) return int;
+    pragma Import (C, sigaction, "sigaction");
+ 
+    ----------
+    -- Time --
+    ----------
+ 
+    type timespec is private;
+ 
+    function nanosleep (rqtp, rmtp : access timespec) return int;
+    pragma Import (C, nanosleep);
+ 
+    type clockid_t is private;
+ 
+    CLOCK_REALTIME : constant clockid_t;
+ 
+    function Clock_Gettime
+      (Clock_Id : clockid_t; Tp : access timespec) return int;
+    pragma Import (C, Clock_Gettime);
+ 
+    function To_Duration (TS : timespec) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timespec (D : Duration) return timespec;
+    pragma Inline (To_Timespec);
+ 
+    type struct_timeval is private;
+ 
+    function To_Duration (TV : struct_timeval) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timeval (D : Duration) return struct_timeval;
+    pragma Inline (To_Timeval);
+ 
+    -------------------------
+    -- Priority Scheduling --
+    -------------------------
+ 
+    SCHED_FIFO  : constant := 0;
+    SCHED_RR    : constant := 1;
+    SCHED_OTHER : constant := 2;
+ 
+    -------------
+    -- Process --
+    -------------
+ 
+    type pid_t is private;
+ 
+    function kill (pid : pid_t; sig : Signal) return int;
+    pragma Import (C, kill, "kill");
+ 
+    function getpid return pid_t;
+    pragma Import (C, getpid, "getpid");
+ 
+    -------------
+    -- Threads --
+    -------------
+ 
+    type Thread_Body is access
+      function (arg : System.Address) return System.Address;
+ 
+    function Thread_Body_Access is new
+      Unchecked_Conversion (System.Address, Thread_Body);
+ 
+    type pthread_t           is private;
+    subtype Thread_Id        is pthread_t;
+ 
+    type pthread_mutex_t     is limited private;
+    type pthread_cond_t      is limited private;
+    type pthread_attr_t      is limited private;
+    type pthread_mutexattr_t is limited private;
+    type pthread_condattr_t  is limited private;
+    type pthread_key_t       is private;
+ 
+    -----------
+    -- Stack --
+    -----------
+ 
+    function Get_Stack_Base (thread : pthread_t) return Address;
+    pragma Inline (Get_Stack_Base);
+    --  This is a dummy procedure to share some GNULLI files
+ 
+    ---------------------------------------
+    -- Nonstandard Thread Initialization --
+    ---------------------------------------
+ 
+    procedure pthread_init;
+    pragma Inline (pthread_init);
+    --  This is a dummy procedure to share some GNULLI files
+ 
+    -------------------------
+    -- POSIX.1c  Section 3 --
+    -------------------------
+ 
+    function sigwait (set : access sigset_t) return int;
+    pragma Import (C, sigwait, "cma_sigwait");
+ 
+    function sigwait
+      (set : access sigset_t;
+       sig : access Signal) return int;
+    pragma Inline (sigwait);
+    --  DCE_THREADS has a nonstandard sigwait
+ 
+    function pthread_kill
+      (thread : pthread_t;
+       sig    : Signal) return int;
+    pragma Inline (pthread_kill);
+    --  DCE_THREADS doesn't have pthread_kill
+ 
+    type sigset_t_ptr is access all sigset_t;
+ 
+    function pthread_sigmask
+      (how  : int;
+       set  : sigset_t_ptr;
+       oset : sigset_t_ptr) return int;
+    --  DCE THREADS does not have pthread_sigmask. Instead, it uses
+    --  sigprocmask to do the signal handling when the thread library is
+    --  sucked in.
+    pragma Import (C, pthread_sigmask, "sigprocmask");
+ 
+    --------------------------
+    -- POSIX.1c  Section 11 --
+    --------------------------
+ 
+    function pthread_mutexattr_init
+      (attr : access pthread_mutexattr_t) return int;
+    --  DCE_THREADS has a nonstandard pthread_mutexattr_init.
+ 
+    function pthread_mutexattr_destroy
+      (attr : access pthread_mutexattr_t) return int;
+    --  DCE_THREADS has a nonstandard pthread_mutexattr_destroy
+ 
+    function pthread_mutex_init
+      (mutex : access pthread_mutex_t;
+       attr  : access pthread_mutexattr_t) return int;
+    --  DCE_THREADS has a nonstandard pthread_mutex_init
+ 
+    function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
+    --  DCE_THREADS has a nonstandard pthread_mutex_destroy
+ 
+    function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
+    pragma Inline (pthread_mutex_lock);
+    --  DCE_THREADS has nonstandard pthread_mutex_lock
+ 
+    function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
+    pragma Inline (pthread_mutex_unlock);
+    --  DCE_THREADS has nonstandard pthread_mutex_lock
+ 
+    function pthread_condattr_init
+      (attr : access pthread_condattr_t) return int;
+    --  DCE_THREADS has nonstandard pthread_condattr_init
+ 
+    function pthread_condattr_destroy
+      (attr : access pthread_condattr_t) return int;
+    --  DCE_THREADS has nonstandard pthread_condattr_destroy
+ 
+    function pthread_cond_init
+      (cond : access pthread_cond_t;
+       attr : access pthread_condattr_t) return int;
+    --  DCE_THREADS has nonstandard pthread_cond_init
+ 
+    function pthread_cond_destroy (cond : access pthread_cond_t) return int;
+    --  DCE_THREADS has nonstandard pthread_cond_destroy
+ 
+    function pthread_cond_signal (cond : access pthread_cond_t) return int;
+    pragma Inline (pthread_cond_signal);
+    --  DCE_THREADS has nonstandard pthread_cond_signal
+ 
+    function pthread_cond_wait
+      (cond  : access pthread_cond_t;
+       mutex : access pthread_mutex_t) return int;
+    pragma Inline (pthread_cond_wait);
+    --  DCE_THREADS has a nonstandard pthread_cond_wait
+ 
+    function pthread_cond_timedwait
+      (cond    : access pthread_cond_t;
+       mutex   : access pthread_mutex_t;
+       abstime : access timespec) return int;
+    pragma Inline (pthread_cond_timedwait);
+    --  DCE_THREADS has a nonstandard pthread_cond_timedwait
+ 
+    --------------------------
+    -- POSIX.1c  Section 13 --
+    --------------------------
+ 
+    type struct_sched_param is record
+       sched_priority : int;  --  scheduling priority
+    end record;
+ 
+    function pthread_setschedparam
+      (thread : pthread_t;
+       policy : int;
+       param  : access struct_sched_param) return int;
+    pragma Inline (pthread_setschedparam);
+    --  DCE_THREADS has a nonstandard pthread_setschedparam
+ 
+    function sched_yield return int;
+    pragma Inline (sched_yield);
+    --  DCE_THREADS has a nonstandard sched_yield
+ 
+    ---------------------------
+    -- P1003.1c - Section 16 --
+    ---------------------------
+ 
+    function pthread_attr_init (attributes : access pthread_attr_t) return int;
+    pragma Inline (pthread_attr_init);
+    --  DCE_THREADS has a nonstandard pthread_attr_init
+ 
+    function pthread_attr_destroy
+      (attributes : access pthread_attr_t) return int;
+    pragma Inline (pthread_attr_destroy);
+    --  DCE_THREADS has a nonstandard pthread_attr_destroy
+ 
+    function pthread_attr_setstacksize
+      (attr      : access pthread_attr_t;
+       stacksize : size_t) return int;
+    pragma Inline (pthread_attr_setstacksize);
+    --  DCE_THREADS has a nonstandard pthread_attr_setstacksize
+ 
+    function pthread_create
+      (thread        : access pthread_t;
+       attributes    : access pthread_attr_t;
+       start_routine : Thread_Body;
+       arg           : System.Address) return int;
+    pragma Inline (pthread_create);
+    --  DCE_THREADS has a nonstandard pthread_create
+ 
+    procedure pthread_detach (thread : access pthread_t);
+    pragma Import (C, pthread_detach);
+ 
+    procedure pthread_exit (status : System.Address);
+    pragma Import (C, pthread_exit, "pthread_exit");
+ 
+    function pthread_self return pthread_t;
+    pragma Import (C, pthread_self, "pthread_self");
+ 
+    --------------------------
+    -- POSIX.1c  Section 17 --
+    --------------------------
+ 
+    function pthread_setspecific
+      (key   : pthread_key_t;
+       value : System.Address) return int;
+    pragma Inline (pthread_setspecific);
+    --  DCE_THREADS has a nonstandard pthread_setspecific
+ 
+    function pthread_getspecific (key : pthread_key_t) return System.Address;
+    pragma Inline (pthread_getspecific);
+    --  DCE_THREADS has a nonstandard pthread_getspecific
+ 
+    type destructor_pointer is access procedure (arg : System.Address);
+ 
+    function pthread_key_create
+      (key        : access pthread_key_t;
+       destructor : destructor_pointer) return int;
+    pragma Inline (pthread_key_create);
+    --  DCE_THREADS has a nonstandard pthread_key_create
+ 
+ private
+ 
+    type array_type_1 is array (Integer range 0 .. 7) of unsigned_long;
+    type sigset_t is record
+       X_X_sigbits : array_type_1;
+    end record;
+    pragma Convention (C, sigset_t);
+ 
+    type pid_t is new int;
+ 
+    type time_t is new long;
+ 
+    type timespec is record
+       tv_sec  : time_t;
+       tv_nsec : long;
+    end record;
+    pragma Convention (C, timespec);
+ 
+    type clockid_t is new int;
+    CLOCK_REALTIME : constant clockid_t := 1;
+ 
+    type struct_timeval is record
+       tv_sec  : time_t;
+       tv_usec : time_t;
+    end record;
+    pragma Convention (C, struct_timeval);
+ 
+    type cma_t_address is new System.Address;
+ 
+    type cma_t_handle is record
+       field1 : cma_t_address;
+       field2 : Short_Integer;
+       field3 : Short_Integer;
+    end record;
+    for cma_t_handle'Size use 64;
+ 
+    type pthread_attr_t is new cma_t_handle;
+    pragma Convention (C_Pass_By_Copy, pthread_attr_t);
+ 
+    type pthread_condattr_t is new cma_t_handle;
+    pragma Convention (C_Pass_By_Copy, pthread_condattr_t);
+ 
+    type pthread_mutexattr_t is new cma_t_handle;
+    pragma Convention (C_Pass_By_Copy, pthread_mutexattr_t);
+ 
+    type pthread_t is new cma_t_handle;
+    pragma Convention (C_Pass_By_Copy, pthread_t);
+ 
+    type pthread_mutex_t is new cma_t_handle;
+    pragma Convention (C_Pass_By_Copy, pthread_mutex_t);
+ 
+    type pthread_cond_t is new cma_t_handle;
+    pragma Convention (C_Pass_By_Copy, pthread_cond_t);
+ 
+    type pthread_key_t is new int;
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-hpux.ads gcc-4.0.0/gcc/ada/s-osinte-hpux.ads
*** gcc-3.4.3/gcc/ada/s-osinte-hpux.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-hpux.ads	Tue Jul  6 13:57:29 2004
***************
*** 0 ****
--- 1,556 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   S Y S T E M . O S _ I N T E R F A C E                  --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2004, Free Software Foundation, Inc.      --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a HPUX 11.0 (Native THREADS) version of this package
+ 
+ --  This package encapsulates all direct interfaces to OS services
+ --  that are needed by children of System.
+ 
+ --  This package encapsulates all direct interfaces to OS services
+ --  that are needed by children of System.
+ 
+ --  PLEASE DO NOT add any with-clauses to this package or remove the pragma
+ --  Preelaborate. This package is designed to be a bottom-level (leaf) package.
+ 
+ with Interfaces.C;
+ with Unchecked_Conversion;
+ 
+ package System.OS_Interface is
+    pragma Preelaborate;
+ 
+    pragma Linker_Options ("-lpthread");
+ 
+    subtype int            is Interfaces.C.int;
+    subtype short          is Interfaces.C.short;
+    subtype long           is Interfaces.C.long;
+    subtype unsigned       is Interfaces.C.unsigned;
+    subtype unsigned_short is Interfaces.C.unsigned_short;
+    subtype unsigned_long  is Interfaces.C.unsigned_long;
+    subtype unsigned_char  is Interfaces.C.unsigned_char;
+    subtype plain_char     is Interfaces.C.plain_char;
+    subtype size_t         is Interfaces.C.size_t;
+ 
+    -----------
+    -- Errno --
+    -----------
+ 
+    function errno return int;
+    pragma Import (C, errno, "__get_errno");
+ 
+    EAGAIN    : constant := 11;
+    EINTR     : constant := 4;
+    EINVAL    : constant := 22;
+    ENOMEM    : constant := 12;
+    ETIMEDOUT : constant := 238;
+ 
+    -------------
+    -- Signals --
+    -------------
+ 
+    Max_Interrupt : constant := 44;
+    type Signal is new int range 0 .. Max_Interrupt;
+    for Signal'Size use int'Size;
+ 
+    SIGHUP     : constant := 1; --  hangup
+    SIGINT     : constant := 2; --  interrupt (rubout)
+    SIGQUIT    : constant := 3; --  quit (ASCD FS)
+    SIGILL     : constant := 4; --  illegal instruction (not reset)
+    SIGTRAP    : constant := 5; --  trace trap (not reset)
+    SIGIOT     : constant := 6; --  IOT instruction
+    SIGABRT    : constant := 6; --  used by abort, replace SIGIOT in the  future
+    SIGEMT     : constant := 7; --  EMT instruction
+    SIGFPE     : constant := 8; --  floating point exception
+    SIGKILL    : constant := 9; --  kill (cannot be caught or ignored)
+    SIGBUS     : constant := 10; --  bus error
+    SIGSEGV    : constant := 11; --  segmentation violation
+    SIGSYS     : constant := 12; --  bad argument to system call
+    SIGPIPE    : constant := 13; --  write on a pipe with no one to read it
+    SIGALRM    : constant := 14; --  alarm clock
+    SIGTERM    : constant := 15; --  software termination signal from kill
+    SIGUSR1    : constant := 16; --  user defined signal 1
+    SIGUSR2    : constant := 17; --  user defined signal 2
+    SIGCLD     : constant := 18; --  alias for SIGCHLD
+    SIGCHLD    : constant := 18; --  child status change
+    SIGPWR     : constant := 19; --  power-fail restart
+    SIGVTALRM  : constant := 20; --  virtual timer alarm
+    SIGPROF    : constant := 21; --  profiling timer alarm
+    SIGIO      : constant := 22; --  asynchronous I/O
+    SIGPOLL    : constant := 22; --  pollable event occurred
+    SIGWINCH   : constant := 23; --  window size change
+    SIGSTOP    : constant := 24; --  stop (cannot be caught or ignored)
+    SIGTSTP    : constant := 25; --  user stop requested from tty
+    SIGCONT    : constant := 26; --  stopped process has been continued
+    SIGTTIN    : constant := 27; --  background tty read attempted
+    SIGTTOU    : constant := 28; --  background tty write attempted
+    SIGURG     : constant := 29; --  urgent condition on IO channel
+    SIGLOST    : constant := 30; --  remote lock lost  (NFS)
+    SIGDIL     : constant := 32; --  DIL signal
+    SIGXCPU    : constant := 33; --  CPU time limit exceeded (setrlimit)
+    SIGXFSZ    : constant := 34; --  file size limit exceeded (setrlimit)
+    SIGCANCEL  : constant := 35; --  used for pthread cancellation.
+    SIGGFAULT  : constant := 36; --  Graphics framebuffer fault
+ 
+    SIGADAABORT : constant := SIGABRT;
+    --  Note: on other targets, we usually use SIGABRT, but on HPUX, it
+    --  appears that SIGABRT can't be used in sigwait(), so we use SIGTERM.
+ 
+    type Signal_Set is array (Natural range <>) of Signal;
+ 
+    Unmasked    : constant Signal_Set :=
+      (SIGABRT, SIGPIPE, SIGBUS, SIGTRAP, SIGTTIN, SIGTTOU, SIGTSTP, SIGPROF,
+       SIGALRM, SIGVTALRM, SIGIO, SIGCHLD);
+ 
+    Reserved    : constant Signal_Set := (SIGKILL, SIGSTOP);
+ 
+    type sigset_t is private;
+ 
+    function sigaddset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigaddset, "sigaddset");
+ 
+    function sigdelset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigdelset, "sigdelset");
+ 
+    function sigfillset (set : access sigset_t) return int;
+    pragma Import (C, sigfillset, "sigfillset");
+ 
+    function sigismember (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigismember, "sigismember");
+ 
+    function sigemptyset (set : access sigset_t) return int;
+    pragma Import (C, sigemptyset, "sigemptyset");
+ 
+    type struct_sigaction is record
+       sa_handler : System.Address;
+       sa_mask    : sigset_t;
+       sa_flags   : int;
+    end record;
+    pragma Convention (C, struct_sigaction);
+    type struct_sigaction_ptr is access all struct_sigaction;
+ 
+    SA_SIGINFO  : constant := 16#10#;
+ 
+    SIG_BLOCK   : constant := 0;
+    SIG_UNBLOCK : constant := 1;
+    SIG_SETMASK : constant := 2;
+ 
+    SIG_DFL : constant := 0;
+    SIG_IGN : constant := 1;
+ 
+    function sigaction
+      (sig  : Signal;
+       act  : struct_sigaction_ptr;
+       oact : struct_sigaction_ptr) return int;
+    pragma Import (C, sigaction, "sigaction");
+ 
+    ----------
+    -- Time --
+    ----------
+ 
+    Time_Slice_Supported : constant Boolean := True;
+    --  Indicates wether time slicing is supported
+ 
+    type timespec is private;
+ 
+    type clockid_t is private;
+ 
+    CLOCK_REALTIME : constant clockid_t;
+ 
+    function clock_gettime
+      (clock_id : clockid_t;
+       tp       : access timespec) return int;
+    pragma Import (C, clock_gettime, "clock_gettime");
+ 
+    function clock_getres
+      (clock_id : clockid_t;
+       res      : access timespec) return int;
+    pragma Import (C, clock_getres, "clock_getres");
+ 
+    function To_Duration (TS : timespec) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timespec (D : Duration) return timespec;
+    pragma Inline (To_Timespec);
+ 
+    type struct_timezone is record
+       tz_minuteswest : int;
+       tz_dsttime     : int;
+    end record;
+    pragma Convention (C, struct_timezone);
+    type struct_timezone_ptr is access all struct_timezone;
+ 
+    type struct_timeval is private;
+    --  This is needed on systems that do not have clock_gettime()
+    --  but do have gettimeofday().
+ 
+    function To_Duration (TV : struct_timeval) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timeval (D : Duration) return struct_timeval;
+    pragma Inline (To_Timeval);
+ 
+    -------------------------
+    -- Priority Scheduling --
+    -------------------------
+ 
+    SCHED_FIFO  : constant := 0;
+    SCHED_RR    : constant := 1;
+    SCHED_OTHER : constant := 2;
+ 
+    -------------
+    -- Process --
+    -------------
+ 
+    type pid_t is private;
+ 
+    function kill (pid : pid_t; sig : Signal) return int;
+    pragma Import (C, kill, "kill");
+ 
+    function getpid return pid_t;
+    pragma Import (C, getpid, "getpid");
+ 
+    ---------
+    -- LWP --
+    ---------
+ 
+    function lwp_self return System.Address;
+    pragma Import (C, lwp_self, "_lwp_self");
+ 
+    -------------
+    -- Threads --
+    -------------
+ 
+    type Thread_Body is access
+      function (arg : System.Address) return System.Address;
+ 
+    function Thread_Body_Access is new
+      Unchecked_Conversion (System.Address, Thread_Body);
+ 
+    type pthread_t           is private;
+    subtype Thread_Id        is pthread_t;
+ 
+    type pthread_mutex_t     is limited private;
+    type pthread_cond_t      is limited private;
+    type pthread_attr_t      is limited private;
+    type pthread_mutexattr_t is limited private;
+    type pthread_condattr_t  is limited private;
+    type pthread_key_t       is private;
+ 
+    PTHREAD_CREATE_DETACHED : constant := 16#de#;
+ 
+    -----------
+    -- Stack --
+    -----------
+ 
+    Stack_Base_Available : constant Boolean := False;
+    --  Indicates wether the stack base is available on this target.
+ 
+    function Get_Stack_Base (thread : pthread_t) return Address;
+    pragma Inline (Get_Stack_Base);
+    --  returns the stack base of the specified thread.
+    --  Only call this function when Stack_Base_Available is True.
+ 
+    function Get_Page_Size return size_t;
+    function Get_Page_Size return Address;
+    pragma Import (C, Get_Page_Size, "getpagesize");
+    --  returns the size of a page, or 0 if this is not relevant on this
+    --  target
+ 
+    PROT_NONE  : constant := 0;
+    PROT_READ  : constant := 1;
+    PROT_WRITE : constant := 2;
+    PROT_EXEC  : constant := 4;
+    PROT_ALL   : constant := PROT_READ + PROT_WRITE + PROT_EXEC;
+ 
+    PROT_ON    : constant := PROT_READ;
+    PROT_OFF   : constant := PROT_ALL;
+ 
+    function mprotect (addr : Address; len : size_t; prot : int) return int;
+    pragma Import (C, mprotect);
+ 
+    ---------------------------------------
+    -- Nonstandard Thread Initialization --
+    ---------------------------------------
+ 
+    procedure pthread_init;
+    pragma Inline (pthread_init);
+    --  This is a dummy procedure to share some GNULLI files
+ 
+    -------------------------
+    -- POSIX.1c  Section 3 --
+    -------------------------
+ 
+    function sigwait
+      (set : access sigset_t;
+       sig : access Signal) return int;
+    pragma Import (C, sigwait, "sigwait");
+ 
+    function pthread_kill
+      (thread : pthread_t;
+       sig    : Signal) return int;
+    pragma Import (C, pthread_kill, "pthread_kill");
+ 
+    type sigset_t_ptr is access all sigset_t;
+ 
+    function pthread_sigmask
+      (how  : int;
+       set  : sigset_t_ptr;
+       oset : sigset_t_ptr) return int;
+    pragma Import (C, pthread_sigmask, "pthread_sigmask");
+ 
+    --------------------------
+    -- POSIX.1c  Section 11 --
+    --------------------------
+ 
+    function pthread_mutexattr_init
+      (attr : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
+ 
+    function pthread_mutexattr_destroy
+      (attr : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
+ 
+    function pthread_mutex_init
+      (mutex : access pthread_mutex_t;
+       attr  : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
+ 
+    function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
+ 
+    function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_lock, "pthread_mutex_lock");
+ 
+    function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_unlock, "pthread_mutex_unlock");
+ 
+    function pthread_condattr_init
+      (attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
+ 
+    function pthread_condattr_destroy
+      (attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
+ 
+    function pthread_cond_init
+      (cond : access pthread_cond_t;
+       attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_cond_init, "pthread_cond_init");
+ 
+    function pthread_cond_destroy (cond : access pthread_cond_t) return int;
+    pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
+ 
+    function pthread_cond_signal (cond : access pthread_cond_t) return int;
+    pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
+ 
+    function pthread_cond_wait
+      (cond  : access pthread_cond_t;
+       mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_cond_wait, "pthread_cond_wait");
+ 
+    function pthread_cond_timedwait
+      (cond    : access pthread_cond_t;
+       mutex   : access pthread_mutex_t;
+       abstime : access timespec) return int;
+    pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait");
+ 
+    Relative_Timed_Wait : constant Boolean := False;
+    --  pthread_cond_timedwait requires an absolute delay time
+ 
+    --------------------------
+    -- POSIX.1c  Section 13 --
+    --------------------------
+ 
+    PTHREAD_PRIO_NONE    : constant := 16#100#;
+    PTHREAD_PRIO_PROTECT : constant := 16#200#;
+    PTHREAD_PRIO_INHERIT : constant := 16#400#;
+ 
+    function pthread_mutexattr_setprotocol
+      (attr     : access pthread_mutexattr_t;
+       protocol : int) return int;
+    pragma Import (C, pthread_mutexattr_setprotocol);
+ 
+    function pthread_mutexattr_setprioceiling
+      (attr     : access pthread_mutexattr_t;
+       prioceiling : int) return int;
+    pragma Import (C, pthread_mutexattr_setprioceiling);
+ 
+    type Array_7_Int is array (0 .. 6) of int;
+    type struct_sched_param is record
+       sched_priority : int;
+       sched_reserved : Array_7_Int;
+    end record;
+ 
+    function pthread_setschedparam
+      (thread : pthread_t;
+       policy : int;
+       param  : access struct_sched_param)
+      return int;
+    pragma Import (C, pthread_setschedparam, "pthread_setschedparam");
+ 
+    function pthread_attr_setscope
+      (attr            : access pthread_attr_t;
+       contentionscope : int) return int;
+    pragma Import (C, pthread_attr_setscope, "pthread_attr_setscope");
+ 
+    function pthread_attr_setinheritsched
+      (attr         : access pthread_attr_t;
+       inheritsched : int) return int;
+    pragma Import (C, pthread_attr_setinheritsched);
+ 
+    function pthread_attr_setschedpolicy
+      (attr   : access pthread_attr_t;
+       policy : int) return int;
+    pragma Import (C, pthread_attr_setschedpolicy);
+ 
+    function sched_yield return int;
+    pragma Import (C, sched_yield, "sched_yield");
+ 
+    --------------------------
+    -- P1003.1c  Section 16 --
+    --------------------------
+ 
+    function pthread_attr_init
+      (attributes : access pthread_attr_t) return int;
+    pragma Import (C, pthread_attr_init, "__pthread_attr_init_system");
+ 
+    function pthread_attr_destroy
+      (attributes : access pthread_attr_t) return int;
+    pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
+ 
+    function pthread_attr_setdetachstate
+      (attr        : access pthread_attr_t;
+       detachstate : int) return int;
+    pragma Import (C, pthread_attr_setdetachstate);
+ 
+    function pthread_attr_setstacksize
+      (attr      : access pthread_attr_t;
+       stacksize : size_t) return int;
+    pragma Import (C, pthread_attr_setstacksize, "pthread_attr_setstacksize");
+ 
+    function pthread_create
+      (thread        : access pthread_t;
+       attributes    : access pthread_attr_t;
+       start_routine : Thread_Body;
+       arg           : System.Address) return int;
+    pragma Import (C, pthread_create, "__pthread_create_system");
+ 
+    procedure pthread_exit (status : System.Address);
+    pragma Import (C, pthread_exit, "pthread_exit");
+ 
+    function pthread_self return pthread_t;
+    pragma Import (C, pthread_self, "pthread_self");
+ 
+    --------------------------
+    -- POSIX.1c  Section 17 --
+    --------------------------
+ 
+    function pthread_setspecific
+      (key   : pthread_key_t;
+       value : System.Address) return int;
+    pragma Import (C, pthread_setspecific, "pthread_setspecific");
+ 
+    function pthread_getspecific (key : pthread_key_t) return System.Address;
+    pragma Import (C, pthread_getspecific, "pthread_getspecific");
+ 
+    type destructor_pointer is access procedure (arg : System.Address);
+ 
+    function pthread_key_create
+      (key        : access pthread_key_t;
+       destructor : destructor_pointer) return int;
+    pragma Import (C, pthread_key_create, "pthread_key_create");
+ 
+ private
+ 
+    type unsigned_int_array_8 is array (0 .. 7) of unsigned;
+    type sigset_t is record
+       sigset : unsigned_int_array_8;
+    end record;
+    pragma Convention (C_Pass_By_Copy, sigset_t);
+ 
+    type pid_t is new int;
+ 
+    type time_t is new long;
+ 
+    type timespec is record
+       tv_sec  : time_t;
+       tv_nsec : long;
+    end record;
+    pragma Convention (C, timespec);
+ 
+    type clockid_t is new int;
+    CLOCK_REALTIME : constant clockid_t := 1;
+ 
+    type struct_timeval is record
+       tv_sec  : time_t;
+       tv_usec : time_t;
+    end record;
+    pragma Convention (C, struct_timeval);
+ 
+    type pthread_attr_t is new int;
+    type pthread_condattr_t is new int;
+    type pthread_mutexattr_t is new int;
+    type pthread_t is new int;
+ 
+    type short_array is array (Natural range <>) of short;
+    type int_array is array (Natural range <>) of int;
+ 
+    type pthread_mutex_t is record
+       m_short  : short_array (0 .. 1);
+       m_int    : int;
+       m_int1   : int_array (0 .. 3);
+       m_pad    : int;  --  needed for 32 bit ABI, but *not* for 64 bit
+       m_ptr    : System.Address;
+       m_int2   : int_array (0 .. 1);
+       m_int3   : int_array (0 .. 3);
+       m_short2 : short_array (0 .. 1);
+       m_int4   : int_array (0 .. 4);
+       m_int5   : int_array (0 .. 1);
+    end record;
+    pragma Convention (C, pthread_mutex_t);
+ 
+    type pthread_cond_t is record
+       c_short : short_array (0 .. 1);
+       c_int   : int;
+       c_int1  : int_array (0 .. 3);
+       m_pad   : int;  --  needed for 32 bit ABI, but *not* for 64 bit
+       m_ptr   : System.Address;
+       c_int2  : int_array (0 .. 1);
+       c_int3  : int_array (0 .. 1);
+       c_int4  : int_array (0 .. 1);
+    end record;
+    pragma Convention (C, pthread_cond_t);
+ 
+    type pthread_key_t is new int;
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-interix.ads gcc-4.0.0/gcc/ada/s-osinte-interix.ads
*** gcc-3.4.3/gcc/ada/s-osinte-interix.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-interix.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,574 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   S Y S T E M . O S _ I N T E R F A C E                  --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2004, Free Software Foundation, Inc.      --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a OpenNT/Interix (FSU THREADS) version of this package
+ 
+ --  This package encapsulates all direct interfaces to OS services
+ --  that are needed by children of System.
+ 
+ --  PLEASE DO NOT add any with-clauses to this package or remove the pragma
+ --  Preelaborate. This package is designed to be a bottom-level (leaf) package.
+ 
+ with Interfaces.C;
+ with Unchecked_Conversion;
+ 
+ package System.OS_Interface is
+    pragma Preelaborate;
+ 
+    pragma Linker_Options ("-lgthreads");
+    pragma Linker_Options ("-lmalloc");
+ 
+    subtype int            is Interfaces.C.int;
+    subtype short          is Interfaces.C.short;
+    subtype long           is Interfaces.C.long;
+    subtype unsigned       is Interfaces.C.unsigned;
+    subtype unsigned_short is Interfaces.C.unsigned_short;
+    subtype unsigned_long  is Interfaces.C.unsigned_long;
+    subtype unsigned_char  is Interfaces.C.unsigned_char;
+    subtype plain_char     is Interfaces.C.plain_char;
+    subtype size_t         is Interfaces.C.size_t;
+ 
+    -----------
+    -- Errno --
+    -----------
+ 
+    function errno return int;
+    pragma Import (C, errno, "__get_errno");
+ 
+    EAGAIN    : constant := 11;
+    EINTR     : constant := 4;
+    EINVAL    : constant := 22;
+    ENOMEM    : constant := 12;
+    ETIMEDOUT : constant := 60;
+ 
+    -------------
+    -- Signals --
+    -------------
+ 
+    Max_Interrupt : constant := 31;
+    type Signal is new int range 0 .. Max_Interrupt;
+    for Signal'Size use int'Size;
+ 
+    SIGHUP      : constant := 1; --  hangup
+    SIGINT      : constant := 2; --  interrupt (rubout)
+    SIGQUIT     : constant := 3; --  quit (ASCD FS)
+    SIGILL      : constant := 4; --  illegal instruction (not reset)
+    SIGTRAP     : constant := 5; --  trace trap (not reset)
+    SIGIOT      : constant := 6; --  IOT instruction
+    SIGABRT     : constant := 6; --  used by abort, replace SIGIOT in the future
+    SIGEMT      : constant := 0; --  EMT instruction
+    SIGFPE      : constant := 8; --  floating point exception
+    SIGKILL     : constant := 9; --  kill (cannot be caught or ignored)
+    SIGBUS      : constant := 10; --  bus error
+    SIGSEGV     : constant := 11; --  segmentation violation
+    SIGSYS      : constant := 12;  --  bad argument to system call
+    SIGPIPE     : constant := 13; --  write on a pipe with no one to read it
+    SIGALRM     : constant := 14; --  alarm clock
+    SIGTERM     : constant := 15; --  software termination signal from kill
+    SIGUSR1     : constant := 16; --  user defined signal 1
+    SIGUSR2     : constant := 17; --  user defined signal 2
+    SIGCLD      : constant := 18; --  alias for SIGCHLD
+    SIGCHLD     : constant := 18; --  child status change
+    SIGPWR      : constant := 0; --  power-fail restart
+    SIGWINCH    : constant := 20; --  window size change
+    SIGURG      : constant := 21; --  urgent condition on IO channel
+    SIGPOLL     : constant := 22; --  pollable event occurred
+    SIGIO       : constant := 19; --  I/O possible (Solaris SIGPOLL alias)
+    SIGSTOP     : constant := 23; --  stop (cannot be caught or ignored)
+    SIGTSTP     : constant := 24; --  user stop requested from tty
+    SIGCONT     : constant := 25; --  stopped process has been continued
+    SIGTTIN     : constant := 26; --  background tty read attempted
+    SIGTTOU     : constant := 27; --  background tty write attempted
+    SIGVTALRM   : constant := 28; --  virtual timer expired
+    SIGPROF     : constant := 29; --  profiling timer expired
+    SIGXCPU     : constant := 30; --  CPU time limit exceeded
+    SIGXFSZ     : constant := 31; --  filesize limit exceeded
+ 
+    SIGADAABORT : constant := SIGABRT;
+ 
+    type Signal_Set is array (Natural range <>) of Signal;
+ 
+    Unmasked    : constant Signal_Set :=
+      (SIGTRAP, SIGALRM, SIGVTALRM, SIGTTIN, SIGTTOU, SIGTSTP, SIGPROF);
+ 
+    Reserved    : constant Signal_Set := (SIGKILL, SIGSTOP);
+ 
+    type sigset_t is private;
+ 
+    function sigaddset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigaddset, "sigaddset");
+ 
+    function sigdelset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigdelset, "sigdelset");
+ 
+    function sigfillset (set : access sigset_t) return int;
+    pragma Import (C, sigfillset, "sigfillset");
+ 
+    function sigismember (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigismember, "sigismember");
+ 
+    function sigemptyset (set : access sigset_t) return int;
+    pragma Import (C, sigemptyset, "sigemptyset");
+ 
+    type struct_sigaction is record
+       sa_handler  : System.Address;
+       sa_mask     : sigset_t;
+       sa_flags    : int;
+       sa_restorer : System.Address;
+    end record;
+    pragma Convention (C, struct_sigaction);
+    type struct_sigaction_ptr is access all struct_sigaction;
+ 
+    SIG_BLOCK   : constant := 1;
+    SIG_UNBLOCK : constant := 2;
+    SIG_SETMASK : constant := 3;
+ 
+    SIG_DFL : constant := 0;
+    SIG_IGN : constant := 1;
+ 
+    SA_SIGINFO : constant := 0;
+    --  Dummy constant for a sa_flags bit. A proper definition is needed only
+    --  for the GCC/ZCX EH scheme (see System.Interrupt_Management).
+ 
+    function sigaction
+      (sig  : Signal;
+       act  : struct_sigaction_ptr;
+       oact : struct_sigaction_ptr) return int;
+    --  FSU pthreads redefines sigaction and then uses a special syscall
+    --  API to call the system version. Doing syscalls on OpenNT is very
+    --  difficult, so we rename the pthread version instead.
+    pragma Import (C, sigaction, "pthread_wrapper_sigaction");
+ 
+    ----------
+    -- Time --
+    ----------
+ 
+    Time_Slice_Supported : constant Boolean := False;
+    --  Indicates wether time slicing is supported (i.e FSU threads have been
+    --  compiled with DEF_RR)
+ 
+    type timespec is private;
+ 
+    type clockid_t is private;
+ 
+    CLOCK_REALTIME : constant clockid_t;
+ 
+    function clock_gettime
+      (clock_id : clockid_t;
+       tp       : access timespec) return int;
+    pragma Import (C, clock_gettime, "clock_gettime");
+ 
+    function To_Duration (TS : timespec) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timespec (D : Duration) return timespec;
+    pragma Inline (To_Timespec);
+ 
+    type struct_timeval is private;
+ 
+    function To_Duration (TV : struct_timeval) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timeval (D : Duration) return struct_timeval;
+    pragma Inline (To_Timeval);
+ 
+    -------------------------
+    -- Priority Scheduling --
+    -------------------------
+ 
+    SCHED_FIFO  : constant := 0;
+    SCHED_RR    : constant := 1;
+    SCHED_OTHER : constant := 2;
+ 
+    -------------
+    -- Process --
+    -------------
+ 
+    type pid_t is private;
+ 
+    function kill (pid : pid_t; sig : Signal) return int;
+    pragma Import (C, kill, "kill");
+ 
+    function getpid return pid_t;
+    pragma Import (C, getpid, "getpid");
+ 
+    ---------
+    -- LWP --
+    ---------
+ 
+    function lwp_self return System.Address;
+    --  lwp_self does not exist on this thread library, revert to pthread_self
+    --  which is the closest approximation (with getpid). This function is
+    --  needed to share 7staprop.adb across POSIX-like targets.
+    pragma Import (C, lwp_self, "pthread_self");
+ 
+    -------------
+    -- Threads --
+    -------------
+ 
+    type Thread_Body is access
+      function (arg : System.Address) return System.Address;
+ 
+    function Thread_Body_Access is new
+      Unchecked_Conversion (System.Address, Thread_Body);
+ 
+    type pthread_t           is private;
+    subtype Thread_Id        is pthread_t;
+ 
+    type pthread_mutex_t     is limited private;
+    type pthread_cond_t      is limited private;
+    type pthread_attr_t      is limited private;
+    type pthread_mutexattr_t is limited private;
+    type pthread_condattr_t  is limited private;
+    type pthread_key_t       is private;
+ 
+    PTHREAD_CREATE_DETACHED : constant := 1;
+    PTHREAD_CREATE_JOINABLE : constant := 0;
+ 
+    -----------
+    -- Stack --
+    -----------
+ 
+    Stack_Base_Available : constant Boolean := False;
+    --  Indicates wether the stack base is available on this target.
+    --  This allows us to share s-osinte.adb between all the FSU run time.
+    --  Note that this value can only be true if pthread_t has a complete
+    --  definition that corresponds exactly to the C header files.
+ 
+    function Get_Stack_Base (thread : pthread_t) return Address;
+    pragma Inline (Get_Stack_Base);
+    --  returns the stack base of the specified thread.
+    --  Only call this function when Stack_Base_Available is True.
+ 
+    function Get_Page_Size return size_t;
+    function Get_Page_Size return Address;
+    pragma Import (C, Get_Page_Size, "getpagesize");
+    --  returns the size of a page, or 0 if this is not relevant on this
+    --  target
+ 
+    PROT_NONE  : constant := 0;
+    PROT_READ  : constant := 1;
+    PROT_WRITE : constant := 2;
+    PROT_EXEC  : constant := 4;
+    PROT_ALL   : constant := PROT_READ + PROT_WRITE + PROT_EXEC;
+ 
+    PROT_ON    : constant := PROT_NONE;
+    PROT_OFF   : constant := PROT_ALL;
+ 
+    function mprotect (addr : Address; len : size_t; prot : int) return int;
+    pragma Import (C, mprotect);
+ 
+    ---------------------------------------
+    -- Nonstandard Thread Initialization --
+    ---------------------------------------
+ 
+    procedure pthread_init;
+    --  FSU_THREADS requires pthread_init, which is nonstandard
+    --  and this should be invoked during the elaboration of s-taprop.adb
+    pragma Import (C, pthread_init, "pthread_init");
+ 
+    -------------------------
+    -- POSIX.1c  Section 3 --
+    -------------------------
+ 
+    function sigwait
+      (set : access sigset_t;
+       sig : access Signal) return int;
+    --  FSU_THREADS has a nonstandard sigwait
+ 
+    function pthread_kill
+      (thread : pthread_t;
+       sig    : Signal) return   int;
+    pragma Import (C, pthread_kill, "pthread_kill");
+ 
+    type sigset_t_ptr is access all sigset_t;
+ 
+    function pthread_sigmask
+      (how  : int;
+       set  : sigset_t_ptr;
+       oset : sigset_t_ptr) return int;
+    pragma Import (C, pthread_sigmask, "pthread_wrapper_sigprocmask");
+ 
+    --------------------------
+    -- POSIX.1c  Section 11 --
+    --------------------------
+ 
+    function pthread_mutexattr_init
+      (attr : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
+ 
+    function pthread_mutexattr_destroy
+      (attr : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
+ 
+    function pthread_mutex_init
+      (mutex : access pthread_mutex_t;
+       attr  : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
+ 
+    function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
+ 
+    function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
+    --  FSU_THREADS has nonstandard pthread_mutex_lock
+ 
+    function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
+    --  FSU_THREADS has nonstandard pthread_mutex_lock
+ 
+    function pthread_condattr_init
+      (attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
+ 
+    function pthread_condattr_destroy
+      (attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
+ 
+    function pthread_cond_init
+      (cond : access pthread_cond_t;
+       attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_cond_init, "pthread_cond_init");
+ 
+    function pthread_cond_destroy (cond : access pthread_cond_t) return int;
+    pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
+ 
+    function pthread_cond_signal (cond : access pthread_cond_t) return int;
+    pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
+ 
+    function pthread_cond_wait
+      (cond  : access pthread_cond_t;
+       mutex : access pthread_mutex_t) return int;
+    --  FSU_THREADS has a nonstandard pthread_cond_wait
+ 
+    function pthread_cond_timedwait
+      (cond    : access pthread_cond_t;
+       mutex   : access pthread_mutex_t;
+       abstime : access timespec) return int;
+    --  FSU_THREADS has a nonstandard pthread_cond_timedwait
+ 
+    Relative_Timed_Wait : constant Boolean := False;
+    --  pthread_cond_timedwait requires an absolute delay time
+ 
+    --------------------------
+    -- POSIX.1c  Section 13 --
+    --------------------------
+ 
+    PTHREAD_PRIO_NONE    : constant := 0;
+    PTHREAD_PRIO_PROTECT : constant := 2;
+    PTHREAD_PRIO_INHERIT : constant := 1;
+ 
+    function pthread_mutexattr_setprotocol
+      (attr     : access pthread_mutexattr_t;
+       protocol : int) return int;
+    pragma Import (C, pthread_mutexattr_setprotocol);
+ 
+    function pthread_mutexattr_setprioceiling
+      (attr     : access pthread_mutexattr_t;
+       prioceiling : int) return int;
+    pragma Import
+      (C, pthread_mutexattr_setprioceiling,
+       "pthread_mutexattr_setprio_ceiling");
+ 
+    type struct_sched_param is record
+       sched_priority : int;  --  scheduling priority
+    end record;
+ 
+    function pthread_setschedparam
+      (thread : pthread_t;
+       policy : int;
+       param  : access struct_sched_param) return int;
+    --  FSU_THREADS does not have pthread_setschedparam
+ 
+    function pthread_attr_setscope
+      (attr            : access pthread_attr_t;
+       contentionscope : int) return int;
+    pragma Import (C, pthread_attr_setscope, "pthread_attr_setscope");
+ 
+    function pthread_attr_setinheritsched
+      (attr         : access pthread_attr_t;
+       inheritsched : int) return int;
+    pragma Import (C, pthread_attr_setinheritsched);
+ 
+    function pthread_attr_setschedpolicy
+      (attr   : access pthread_attr_t;
+       policy : int) return int;
+    pragma Import
+     (C, pthread_attr_setschedpolicy, "pthread_attr_setsched");
+ 
+    function sched_yield return int;
+    --  FSU_THREADS does not have sched_yield;
+ 
+    ---------------------------
+    -- P1003.1c - Section 16 --
+    ---------------------------
+ 
+    function pthread_attr_init (attributes : access pthread_attr_t) return int;
+    pragma Import (C, pthread_attr_init, "pthread_attr_init");
+ 
+    function pthread_attr_destroy
+      (attributes : access pthread_attr_t) return int;
+    pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
+ 
+    function pthread_attr_setdetachstate
+      (attr        : access pthread_attr_t;
+       detachstate : int) return int;
+    --  FSU_THREADS has a nonstandard pthread_attr_setdetachstate
+ 
+    function pthread_attr_setstacksize
+      (attr      : access pthread_attr_t;
+       stacksize : size_t) return int;
+    pragma Import (C, pthread_attr_setstacksize);
+ 
+    function pthread_create
+      (thread        : access pthread_t;
+       attributes    : access pthread_attr_t;
+       start_routine : Thread_Body;
+       arg           : System.Address) return int;
+    pragma Import (C, pthread_create, "pthread_create");
+ 
+    procedure pthread_exit (status : System.Address);
+    pragma Import (C, pthread_exit, "pthread_exit");
+ 
+    function pthread_self return pthread_t;
+    pragma Import (C, pthread_self, "pthread_self");
+ 
+    --------------------------
+    -- POSIX.1c  Section 17 --
+    --------------------------
+ 
+    function pthread_setspecific
+      (key   : pthread_key_t;
+       value : System.Address) return  int;
+    pragma Import (C, pthread_setspecific, "pthread_setspecific");
+ 
+    function pthread_getspecific (key : pthread_key_t) return System.Address;
+    --  FSU_THREADS has a nonstandard pthread_getspecific
+ 
+    type destructor_pointer is access procedure (arg : System.Address);
+ 
+    function pthread_key_create
+      (key        : access pthread_key_t;
+       destructor : destructor_pointer) return int;
+    pragma Import (C, pthread_key_create, "pthread_key_create");
+ 
+ private
+ 
+    type sigset_t is new unsigned_long;
+    pragma Convention (C, sigset_t);
+ 
+    type pid_t is new int;
+ 
+    subtype time_t is long;
+ 
+    type timespec is record
+       tv_sec  : time_t;
+       tv_nsec : long;
+    end record;
+    pragma Convention (C, timespec);
+ 
+    type clockid_t is new int;
+    CLOCK_REALTIME : constant clockid_t := 0;
+ 
+    type struct_timeval is record
+       tv_sec  : time_t;
+       tv_usec : long;
+    end record;
+    pragma Convention (C, struct_timeval);
+ 
+    type pthread_attr_t is record
+       flags           : int;
+       stacksize       : int;
+       contentionscope : int;
+       inheritsched    : int;
+       detachstate     : int;
+       sched           : int;
+       prio            : int;
+       starttime       : timespec;
+       deadline        : timespec;
+       period          : timespec;
+    end record;
+    pragma Convention (C_Pass_By_Copy, pthread_attr_t);
+ 
+    type pthread_condattr_t is record
+       flags : int;
+    end record;
+    pragma Convention (C, pthread_condattr_t);
+ 
+    type pthread_mutexattr_t is record
+       flags        : int;
+       prio_ceiling : int;
+       protocol     : int;
+    end record;
+    pragma Convention (C, pthread_mutexattr_t);
+ 
+    type sigjmp_buf is array (Integer range 0 .. 17) of int;
+ 
+    type pthread_t_struct is record
+       context    : sigjmp_buf;
+       pbody      : sigjmp_buf;
+       errno      : int;
+       ret        : int;
+       stack_base : System.Address;
+    end record;
+    pragma Convention (C, pthread_t_struct);
+ 
+    type pthread_t is access all pthread_t_struct;
+ 
+    type queue_t is record
+       head : System.Address;
+       tail : System.Address;
+    end record;
+    pragma Convention (C, queue_t);
+ 
+    type pthread_mutex_t is record
+       queue                 : queue_t;
+       lock                  : plain_char;
+       owner                 : System.Address;
+       flags                 : int;
+       prio_ceiling          : int;
+       protocol              : int;
+       prev_max_ceiling_prio : int;
+    end record;
+    pragma Convention (C, pthread_mutex_t);
+ 
+    type pthread_cond_t is record
+       queue   : queue_t;
+       flags   : int;
+       waiters : int;
+       mutex   : System.Address;
+    end record;
+    pragma Convention (C, pthread_cond_t);
+ 
+    type pthread_key_t is new int;
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-irix-athread.ads gcc-4.0.0/gcc/ada/s-osinte-irix-athread.ads
*** gcc-3.4.3/gcc/ada/s-osinte-irix-athread.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-irix-athread.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,699 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
+ --                                                                          --
+ --                   S Y S T E M . O S _ I N T E R F A C E                  --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2004, Free Software Foundation, Inc.      --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is an Irix (old pthread library) version of this package
+ 
+ --  This package encapsulates all direct interfaces to OS services
+ --  that are needed by children of System.
+ 
+ --  PLEASE DO NOT add any with-clauses to this package or remove the pragma
+ --  Preelaborate. This package is designed to be a bottom-level (leaf) package.
+ 
+ with Interfaces;
+ with Interfaces.C;
+ with Interfaces.C.Strings;
+ with Unchecked_Conversion;
+ 
+ package System.OS_Interface is
+ 
+    pragma Preelaborate;
+ 
+    pragma Linker_Options ("-lathread");
+ 
+    subtype int            is Interfaces.C.int;
+    subtype short          is Interfaces.C.short;
+    subtype long           is Interfaces.C.long;
+    subtype unsigned       is Interfaces.C.unsigned;
+    subtype unsigned_short is Interfaces.C.unsigned_short;
+    subtype unsigned_long  is Interfaces.C.unsigned_long;
+    subtype unsigned_char  is Interfaces.C.unsigned_char;
+    subtype plain_char     is Interfaces.C.plain_char;
+    subtype size_t         is Interfaces.C.size_t;
+    subtype chars_ptr      is Interfaces.C.Strings.chars_ptr;
+ 
+    -----------
+    -- Errno --
+    -----------
+ 
+    function errno return int;
+    pragma Import (C, errno, "__get_errno");
+ 
+    EINTR     : constant := 4;   --  interrupted system call
+    EAGAIN    : constant := 11;  --  No more processes
+    ENOMEM    : constant := 12;  --  Not enough core
+    EINVAL    : constant := 22;  --  Invalid argument
+    ETIMEDOUT : constant := 145; --  Connection timed out
+ 
+    -------------
+    -- Signals --
+    -------------
+ 
+    Max_Interrupt : constant := 64;
+    type Signal is new int range 0 .. Max_Interrupt;
+    for Signal'Size use int'Size;
+ 
+    SIGHUP     : constant := 1; --  hangup
+    SIGINT     : constant := 2; --  interrupt (rubout)
+    SIGQUIT    : constant := 3; --  quit (ASCD FS)
+    SIGILL     : constant := 4; --  illegal instruction (not reset)
+    SIGTRAP    : constant := 5; --  trace trap (not reset)
+    SIGIOT     : constant := 6; --  IOT instruction
+    SIGABRT    : constant := 6; --  used by abort, replace SIGIOT in the
+    --                              future
+    SIGEMT     : constant := 7; --  EMT instruction
+    SIGFPE     : constant := 8; --  floating point exception
+    SIGKILL    : constant := 9; --  kill (cannot be caught or ignored)
+    SIGBUS     : constant := 10; --  bus error
+    SIGSEGV    : constant := 11; --  segmentation violation
+    SIGSYS     : constant := 12; --  bad argument to system call
+    SIGPIPE    : constant := 13; --  write on a pipe with no one to read it
+    SIGALRM    : constant := 14; --  alarm clock
+    SIGTERM    : constant := 15; --  software termination signal from kill
+    SIGUSR1    : constant := 16; --  user defined signal 1
+    SIGUSR2    : constant := 17; --  user defined signal 2
+    SIGCLD     : constant := 18; --  alias for SIGCHLD
+    SIGCHLD    : constant := 18; --  child status change
+    SIGPWR     : constant := 19; --  power-fail restart
+    SIGWINCH   : constant := 20; --  window size change
+    SIGURG     : constant := 21; --  urgent condition on IO channel
+    SIGPOLL    : constant := 22; --  pollable event occurred
+    SIGIO      : constant := 22; --  I/O possible (Solaris SIGPOLL alias)
+    SIGSTOP    : constant := 23; --  stop (cannot be caught or ignored)
+    SIGTSTP    : constant := 24; --  user stop requested from tty
+    SIGCONT    : constant := 25; --  stopped process has been continued
+    SIGTTIN    : constant := 26; --  background tty read attempted
+    SIGTTOU    : constant := 27; --  background tty write attempted
+    SIGVTALRM  : constant := 28; --  virtual timer expired
+    SIGPROF    : constant := 29; --  profiling timer expired
+    SIGXCPU    : constant := 30; --  CPU time limit exceeded
+    SIGXFSZ    : constant := 31; --  filesize limit exceeded
+    SIGK32     : constant := 32; --  reserved for kernel (IRIX)
+    SIGCKPT    : constant := 33; --  Checkpoint warning
+    SIGRESTART : constant := 34; --  Restart warning
+    SIGUME     : constant := 35; --  Uncorrectable memory error
+    --  Signals defined for Posix 1003.1c.
+    SIGPTINTR    : constant := 47;
+    SIGPTRESCHED : constant := 48;
+    --  Posix 1003.1b signals
+    SIGRTMIN   : constant := 49; --  Posix 1003.1b signals
+    SIGRTMAX   : constant := 64; --  Posix 1003.1b signals
+ 
+    type sigset_t is private;
+    type sigset_t_ptr is access all sigset_t;
+ 
+    function sigaddset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigaddset, "sigaddset");
+ 
+    function sigdelset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigdelset, "sigdelset");
+ 
+    function sigfillset (set : access sigset_t) return int;
+    pragma Import (C, sigfillset, "sigfillset");
+ 
+    function sigismember (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigismember, "sigismember");
+ 
+    function sigemptyset (set : access sigset_t) return int;
+    pragma Import (C, sigemptyset, "sigemptyset");
+ 
+    type siginfo_t is record
+       si_signo     : int;
+       si_code      : int;
+       si_errno     : int;
+       bit_field_substitute_1 : String (1 .. 116);
+    end record;
+    pragma Convention (C, siginfo_t);
+ 
+    type array_type_2 is array (Integer range 0 .. 1) of int;
+    type struct_sigaction is record
+       sa_flags     : int;
+       sa_handler   : System.Address;
+       sa_mask      : sigset_t;
+       sa_resv      : array_type_2;
+    end record;
+    pragma Convention (C, struct_sigaction);
+    type struct_sigaction_ptr is access all struct_sigaction;
+ 
+    SIG_BLOCK   : constant := 1;
+    SIG_UNBLOCK : constant := 2;
+    SIG_SETMASK : constant := 3;
+ 
+    SIG_DFL : constant := 0;
+    SIG_IGN : constant := 1;
+ 
+    function sigaction
+      (sig  : Signal;
+       act  : struct_sigaction_ptr;
+       oact : struct_sigaction_ptr := null) return int;
+    pragma Import (C, sigaction, "sigaction");
+ 
+    ----------
+    -- Time --
+    ----------
+ 
+    type time_t is new int;
+ 
+    type timespec is record
+       tv_sec  : time_t;
+       tv_nsec : long;
+    end record;
+    pragma Convention (C, timespec);
+    type timespec_ptr is access all timespec;
+ 
+    function To_Duration (TS : timespec) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timespec (D : Duration) return timespec;
+    pragma Inline (To_Timespec);
+ 
+    type timer_t is new Integer;
+    type clockid_t is private;
+ 
+    CLOCK_REALTIME  : constant clockid_t;
+    CLOCK_SGI_FAST  : constant clockid_t;
+    CLOCK_SGI_CYCLE : constant clockid_t;
+ 
+    SGI_CYCLECNTR_SIZE : constant := 165;
+    function syssgi (request : Interfaces.C.int) return Interfaces.C.ptrdiff_t;
+ 
+    pragma Import (C, syssgi, "syssgi");
+ 
+    function clock_gettime
+      (clock_id : clockid_t;
+       tp       : access timespec) return int;
+    pragma Import (C, clock_gettime, "clock_gettime");
+ 
+    function clock_getres
+      (clock_id : clockid_t; tp : access timespec) return int;
+    pragma Import (C, clock_getres, "clock_getres");
+ 
+    type struct_timeval is record
+       tv_sec  : time_t;
+       tv_usec : time_t;
+    end record;
+    pragma Convention (C, struct_timeval);
+ 
+    function To_Duration (TV : struct_timeval) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timeval (D : Duration) return struct_timeval;
+    pragma Inline (To_Timeval);
+ 
+    function gettimeofday
+      (tv : access struct_timeval;
+       tz : System.Address := System.Null_Address) return int;
+    pragma Import (C, gettimeofday, "gettimeofday");
+ 
+    -------------------------
+    -- Priority Scheduling --
+    -------------------------
+ 
+    SCHED_FIFO  : constant := 0;
+    SCHED_RR    : constant := 0;
+    SCHED_OTHER : constant := 0;
+ 
+    -------------
+    -- Process --
+    -------------
+ 
+    type pid_t is private;
+ 
+    function kill (pid : pid_t; sig : Signal) return int;
+    pragma Import (C, kill, "kill");
+ 
+    function getpid return pid_t;
+    pragma Import (C, getpid, "getpid");
+ 
+    ---------------------------------------
+    -- Nonstandard Thread Initialization --
+    ---------------------------------------
+ 
+    procedure pthread_init;
+    pragma Inline (pthread_init);
+    --  This is a dummy procedure to share some GNULLI files
+ 
+    -------------
+    -- Threads --
+    -------------
+ 
+    type Thread_Body is access
+      function (arg : System.Address) return System.Address;
+ 
+    function Thread_Body_Access is new
+      Unchecked_Conversion (System.Address, Thread_Body);
+ 
+    type pthread_t           is private; --   thread identifier
+    subtype Thread_Id        is pthread_t;
+ 
+    type pthread_mutex_t     is private; --   mutex identifier
+    type pthread_cond_t      is private; --   cond identifier
+    type pthread_attr_t      is private; --   pthread attributes
+    type pthread_mutexattr_t is private; --   mutex attributes
+    type pthread_condattr_t  is private; --   mutex attributes
+    type sem_t               is private; --   semaphore identifier
+    type pthread_key_t       is private; --   per thread key
+ 
+    subtype pthread_once_t   is int;     --   dynamic package initialization
+    subtype resource_t       is long;    --   sproc. resource info.
+    type start_addr is access function (arg : Address) return Address;
+    type sproc_start_addr is access function (arg : Address) return int;
+    type callout_addr is
+      access function (arg : Address; arg1 : Address) return Address;
+ 
+    --  SGI specific types
+ 
+    subtype sproc_t      is Address; --   sproc identifier
+    subtype sproc_attr_t is Address; --   sproc attributes
+ 
+    subtype spcb_p is Address;
+    subtype ptcb_p is Address;
+ 
+    --  Pthread Error Types
+ 
+    FUNC_OK  : constant := 0;
+    FUNC_ERR : constant := -1;
+ 
+    --  pthread run-time initialization data structure
+ 
+    type pthread_init_struct is record
+       conf_initsize       : int; --  shared area size
+       max_sproc_count     : int; --  maximum number of sprocs
+       sproc_stack_size    : size_t;  --  sproc stack size
+       os_default_priority : int; --  default IRIX pri for main process
+       os_sched_signal     : int; --  default OS scheduling signal
+       guard_pages         : int; --  number of guard pages per stack
+       init_sproc_count    : int; --  initial number of sprocs
+    end record;
+ 
+    --
+    --  Pthread Attribute Initialize / Destroy
+    --
+ 
+    function pthread_attr_init (attr : access pthread_attr_t) return int;
+    pragma Import (C, pthread_attr_init, "pthread_attr_init");
+ 
+    function pthread_attr_destroy (attr : access pthread_attr_t) return int;
+    pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
+ 
+    --
+    --  Thread Attributes
+    --
+ 
+    function pthread_attr_setstacksize
+      (attr : access pthread_attr_t; stacksize : size_t) return int;
+    pragma Import (C, pthread_attr_setstacksize, "pthread_attr_setstacksize");
+ 
+    function pthread_attr_setdetachstate
+      (attr : access pthread_attr_t; detachstate : int) return int;
+    pragma Import (C, pthread_attr_setdetachstate);
+ 
+    function pthread_attr_setname
+      (attr : access pthread_attr_t; name : chars_ptr) return int;
+    pragma Import (C, pthread_attr_setname, "pthread_attr_setname");
+ 
+    --
+    --  Thread Scheduling Attributes
+    --
+ 
+    function pthread_attr_setscope
+      (attr : access pthread_attr_t; contentionscope : int) return int;
+    pragma Import (C, pthread_attr_setscope, "pthread_attr_setscope");
+ 
+    function pthread_attr_setinheritsched
+      (attr : access pthread_attr_t; inherit : int) return int;
+    pragma Import
+      (C, pthread_attr_setinheritsched, "pthread_attr_setinheritsched");
+ 
+    function pthread_attr_setsched
+      (attr : access pthread_attr_t; scheduler : int) return int;
+    pragma Import (C, pthread_attr_setsched, "pthread_attr_setsched");
+ 
+    function  pthread_attr_setprio
+      (attr : access pthread_attr_t; priority : int) return int;
+    pragma Import (C, pthread_attr_setprio, "pthread_attr_setprio");
+ 
+    --
+    --  SGI Extensions to Thread Attributes
+    --
+ 
+    --  Bound to sproc attribute values
+ 
+    PTHREAD_BOUND     : constant := 1;
+    PTHREAD_NOT_BOUND : constant := 0;
+ 
+    function pthread_attr_setresources
+      (attr : access pthread_attr_t; resources : resource_t) return int;
+    pragma Import (C, pthread_attr_setresources, "pthread_attr_setresources");
+ 
+    function pthread_attr_set_boundtosproc
+      (attr : access pthread_attr_t; bound_to_sproc : int) return int;
+    pragma Import
+      (C, pthread_attr_set_boundtosproc, "pthread_attr_set_boundtosproc");
+ 
+    function pthread_attr_set_bsproc
+      (attr : access pthread_attr_t; bsproc : spcb_p) return int;
+    pragma Import (C, pthread_attr_set_bsproc, "pthread_attr_set_bsproc");
+ 
+    function pthread_attr_set_tslice
+      (attr        : access pthread_attr_t;
+       ts_interval : access struct_timeval) return int;
+    pragma Import (C, pthread_attr_set_tslice, "pthread_attr_set_tslice");
+ 
+    --
+    --  Thread Creation & Management
+    --
+ 
+    function pthread_create
+      (thread        : access pthread_t;
+       attr          : access pthread_attr_t;
+       start_routine : start_addr;
+       arg           : Address) return int;
+    pragma Import (C, pthread_create, "pthread_create");
+ 
+    procedure pthread_exit (status : Address);
+    pragma Import (C, pthread_exit, "pthread_exit");
+ 
+    procedure pthread_yield (arg : Address := System.Null_Address);
+    pragma Import (C, pthread_yield, "pthread_yield");
+ 
+    function pthread_self return pthread_t;
+    pragma Import (C, pthread_self, "pthread_self");
+ 
+    function pthread_kill (thread : pthread_t; sig : int) return int;
+    pragma Import (C, pthread_kill, "pthread_kill");
+ 
+    --
+    --  SGI Extensions to POSIX thread operations
+    --
+ 
+    function pthread_setprio (thread : pthread_t; priority : int) return int;
+    pragma Import (C, pthread_setprio, "pthread_setprio");
+ 
+    function pthread_suspend (thread : pthread_t) return int;
+    pragma Import (C, pthread_suspend, "pthread_suspend");
+ 
+    function pthread_resume (thread : pthread_t) return int;
+    pragma Import (C, pthread_resume, "pthread_resume");
+ 
+    function pthread_get_current_ada_tcb return Address;
+    pragma Import (C, pthread_get_current_ada_tcb);
+ 
+    function pthread_set_ada_tcb
+      (thread : pthread_t; data : Address) return int;
+    pragma Import (C, pthread_set_ada_tcb, "pthread_set_ada_tcb");
+ 
+    --  Mutex Initialization / Destruction
+ 
+    function pthread_mutexattr_init
+      (attr : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
+ 
+    function pthread_mutexattr_destroy
+      (attr : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
+ 
+    function pthread_mutexattr_setqueueorder
+      (attr : access pthread_mutexattr_t; order : int) return int;
+    pragma Import (C, pthread_mutexattr_setqueueorder);
+ 
+    function pthread_mutexattr_setceilingprio
+      (attr : access pthread_mutexattr_t; priority : int) return int;
+    pragma Import (C, pthread_mutexattr_setceilingprio);
+ 
+    --  Mutex Attributes
+ 
+    --  Threads queueing order
+ 
+    MUTEX_PRIORITY         : constant := 0; --   wait in priority order
+    MUTEX_FIFO             : constant := 1; --   first-in-first-out
+    MUTEX_PRIORITY_INHERIT : constant := 2; --   priority inhertance mutex
+    MUTEX_PRIORITY_CEILING : constant := 3; --   priority ceiling mutex
+ 
+    --  Mutex debugging options
+ 
+    MUTEX_NO_DEBUG  : constant := 0; --   no debugging on mutex
+    MUTEX_DEBUG     : constant := 1; --   debugging is on
+ 
+    --  Mutex spin on lock operations
+ 
+    MUTEX_NO_SPIN   : constant := 0;  --   no spin, try once only
+    MUTEX_SPIN_ONLY : constant := -1; --   spin forever
+    --  cnt > 0, limited spin
+    --  Mutex sharing attributes
+ 
+    MUTEX_SHARED    : constant := 0; --   shared between processes
+    MUTEX_NOTSHARED : constant := 1; --   not shared between processes
+ 
+    --  Mutex Operations
+ 
+    function pthread_mutex_init
+      (mutex : access pthread_mutex_t;
+       attr  : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
+ 
+    function pthread_mutex_destroy
+      (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
+ 
+    function pthread_mutex_lock
+      (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_lock, "pthread_mutex_lock");
+ 
+    function pthread_mutex_unlock
+      (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_unlock, "pthread_mutex_unlock");
+ 
+    --  Condition Initialization / Destruction
+ 
+    function pthread_condattr_init
+      (attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
+ 
+    function pthread_condattr_destroy
+      (attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
+ 
+    --  Condition Attributes
+ 
+    COND_PRIORITY  : constant := 0; --   wait in priority order
+    COND_FIFO      : constant := 1; --   first-in-first-out
+ 
+    --  Condition debugging options
+ 
+    COND_NO_DEBUG  : constant := 0; --   no debugging on mutex
+    COND_DEBUG     : constant := 1; --   debugging is on
+ 
+    --  Condition sharing attributes
+ 
+    COND_SHARED    : constant := 0; --   shared between processes
+    COND_NOTSHARED : constant := 1; --   not shared between processes
+ 
+    --  Condition Operations
+ 
+    function pthread_cond_init
+      (cond : access pthread_cond_t;
+       attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_cond_init, "pthread_cond_init");
+ 
+    function pthread_cond_destroy
+      (cond : access pthread_cond_t) return int;
+    pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
+ 
+    function pthread_cond_signal (cond : access pthread_cond_t) return int;
+    pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
+ 
+    function pthread_cond_wait
+      (cond  : access pthread_cond_t;
+       mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_cond_wait, "pthread_cond_wait");
+ 
+    function pthread_cond_timedwait
+      (cond    : access pthread_cond_t;
+       mutex   : access pthread_mutex_t;
+       abstime : access struct_timeval) return int;
+    pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait");
+ 
+    --  Thread-Specific Data
+ 
+    type foo_h_proc_1 is access procedure (value : Address);
+ 
+    function pthread_key_create
+      (key : access pthread_key_t; destructor : foo_h_proc_1) return int;
+    pragma Import (C, pthread_key_create, "pthread_key_create");
+ 
+    function pthread_setspecific
+      (key : pthread_key_t; value : Address) return int;
+    pragma Import (C, pthread_setspecific, "pthread_setspecific");
+ 
+    function pthread_getspecific
+      (key : pthread_key_t; value : access Address) return int;
+    pragma Import (C, pthread_getspecific, "pthread_getspecific");
+ 
+    type foo_h_proc_2 is access procedure;
+ 
+    function pthread_exec_begin (init : access pthread_init_struct) return int;
+    pragma Import (C, pthread_exec_begin, "pthread_exec_begin");
+ 
+    function sproc_create
+      (sproc_id      : access sproc_t;
+       attr          : access sproc_attr_t;
+       start_routine : sproc_start_addr;
+       arg           : Address) return int;
+    pragma Import (C, sproc_create, "sproc_create");
+ 
+    function sproc_self return sproc_t;
+    pragma Import (C, sproc_self, "sproc_self");
+ 
+    --  if equal fast TRUE is returned - common case
+    --  if not equal thread resource must NOT be null in order to compare bits
+ 
+    --
+    --  Sproc attribute initialize / destroy
+    --
+ 
+    function sproc_attr_init (attr : access sproc_attr_t) return int;
+    pragma Import (C, sproc_attr_init, "sproc_attr_init");
+ 
+    function sproc_attr_destroy (attr : access sproc_attr_t) return int;
+    pragma Import (C, sproc_attr_destroy, "sproc_attr_destroy");
+ 
+    function sproc_attr_setresources
+      (attr : access sproc_attr_t; resources : resource_t) return int;
+    pragma Import (C, sproc_attr_setresources, "sproc_attr_setresources");
+ 
+    function sproc_attr_getresources
+      (attr      : access sproc_attr_t;
+       resources : access resource_t) return int;
+    pragma Import (C, sproc_attr_getresources, "sproc_attr_getresources");
+ 
+    function sproc_attr_setcpu
+      (attr : access sproc_attr_t; cpu_num : int) return int;
+    pragma Import (C, sproc_attr_setcpu, "sproc_attr_setcpu");
+ 
+    function sproc_attr_getcpu
+      (attr : access sproc_attr_t; cpu_num : access int) return int;
+    pragma Import (C, sproc_attr_getcpu, "sproc_attr_getcpu");
+ 
+    function sproc_attr_setresident
+      (attr : access sproc_attr_t; resident : int) return int;
+    pragma Import (C, sproc_attr_setresident, "sproc_attr_setresident");
+ 
+    function sproc_attr_getresident
+      (attr : access sproc_attr_t; resident : access int) return int;
+    pragma Import (C, sproc_attr_getresident, "sproc_attr_getresident");
+ 
+    function sproc_attr_setname
+      (attr : access sproc_attr_t; name : chars_ptr) return int;
+    pragma Import (C, sproc_attr_setname, "sproc_attr_setname");
+ 
+    function sproc_attr_getname
+      (attr : access sproc_attr_t; name : chars_ptr) return int;
+    pragma Import (C, sproc_attr_getname, "sproc_attr_getname");
+ 
+    function sproc_attr_setstacksize
+      (attr : access sproc_attr_t; stacksize : size_t) return int;
+    pragma Import (C, sproc_attr_setstacksize, "sproc_attr_setstacksize");
+ 
+    function sproc_attr_getstacksize
+      (attr : access sproc_attr_t; stacksize : access size_t) return int;
+    pragma Import (C, sproc_attr_getstacksize, "sproc_attr_getstacksize");
+ 
+    function sproc_attr_setprio
+      (attr : access sproc_attr_t; priority : int) return int;
+    pragma Import (C, sproc_attr_setprio, "sproc_attr_setprio");
+ 
+    function sproc_attr_getprio
+      (attr : access sproc_attr_t; priority : access int) return int;
+    pragma Import (C, sproc_attr_getprio, "sproc_attr_getprio");
+ 
+    function sproc_attr_setbthread
+      (attr : access sproc_attr_t; bthread : ptcb_p) return int;
+    pragma Import (C, sproc_attr_setbthread, "sproc_attr_setbthread");
+ 
+    function sproc_attr_getbthread
+      (attr : access sproc_attr_t; bthread : access ptcb_p) return int;
+    pragma Import (C, sproc_attr_getbthread, "sproc_attr_getbthread");
+ 
+    SPROC_NO_RESOURCES : constant := 0;
+    SPROC_ANY_CPU      : constant := -1;
+    SPROC_MY_PRIORITY  : constant := -1;
+    SPROC_SWAPPED      : constant := 0;
+    SPROC_RESIDENT     : constant := 1;
+ 
+    type isr_address is access procedure;
+ 
+    function intr_attach (sig : int; isr : isr_address) return int;
+    pragma Import (C, intr_attach, "intr_attach");
+ 
+    Intr_Attach_Reset : constant Boolean := False;
+    --  True if intr_attach is reset after an interrupt handler is called
+ 
+    function intr_exchange
+      (sig  : int;
+       isr  : isr_address;
+       oisr : access isr_address) return int;
+    pragma Import (C, intr_exchange, "intr_exchange");
+ 
+    function intr_current_isr
+      (sig  : int;
+       oisr : access isr_address)
+      return int;
+    pragma Import (C, intr_current_isr, "intr_current_isr");
+ 
+ private
+ 
+    type clockid_t is new int;
+ 
+    CLOCK_REALTIME  : constant clockid_t := 1;
+    CLOCK_SGI_CYCLE : constant clockid_t := 2;
+    CLOCK_SGI_FAST  : constant clockid_t := 3;
+ 
+    type pthread_t           is new Address; --   thread identifier
+    type pthread_mutex_t     is new Address; --   mutex identifier
+    type pthread_cond_t      is new Address; --   cond identifier
+    type pthread_attr_t      is new Address; --   pthread attributes
+    type pthread_mutexattr_t is new Address; --   mutex attributes
+    type pthread_condattr_t  is new Address; --   mutex attributes
+    type sem_t               is new Address; --   semaphore identifier
+    type pthread_key_t       is new Address; --   per thread key
+ 
+    type sigbits_t is array (Integer range 0 .. 3) of unsigned;
+    type sigset_t is record
+       sigbits : sigbits_t;
+    end record;
+    pragma Convention (C, sigset_t);
+ 
+    type pid_t is new long;
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-irix.adb gcc-4.0.0/gcc/ada/s-osinte-irix.adb
*** gcc-3.4.3/gcc/ada/s-osinte-irix.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-irix.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,120 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   S Y S T E M . O S _ I N T E R F A C E                  --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --         Copyright (C) 1992-2002, Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the IRIX version of this package.
+ 
+ --  This package encapsulates all direct interfaces to OS services
+ --  that are needed by children of System.
+ 
+ pragma Polling (Off);
+ --  Turn off polling, we do not want ATC polling to take place during
+ --  tasking operations. It causes infinite loops and other problems.
+ 
+ with Interfaces.C; use Interfaces.C;
+ 
+ package body System.OS_Interface is
+ 
+    ------------------
+    -- pthread_init --
+    ------------------
+ 
+    procedure pthread_init is
+    begin
+       null;
+    end pthread_init;
+ 
+    -----------------
+    -- To_Duration --
+    -----------------
+ 
+    function To_Duration (TS : timespec) return Duration is
+    begin
+       return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9;
+    end To_Duration;
+ 
+    function To_Duration (TV : struct_timeval) return Duration is
+    begin
+       return Duration (TV.tv_sec) + Duration (TV.tv_usec) / 10#1#E6;
+    end To_Duration;
+ 
+    -----------------
+    -- To_Timespec --
+    -----------------
+ 
+    function To_Timespec (D : Duration) return timespec is
+       S : time_t;
+       F : Duration;
+ 
+    begin
+       S := time_t (Long_Long_Integer (D));
+       F := D - Duration (S);
+ 
+       --  If F has negative value due to a round-up, adjust for positive F
+       --  value.
+ 
+       if F < 0.0 then
+          S := S - 1;
+          F := F + 1.0;
+       end if;
+ 
+       return timespec'(tv_sec => S,
+                        tv_nsec => long (Long_Long_Integer (F * 10#1#E9)));
+    end To_Timespec;
+ 
+    ----------------
+    -- To_Timeval --
+    ----------------
+ 
+    function To_Timeval (D : Duration) return struct_timeval is
+       S : time_t;
+       F : Duration;
+ 
+    begin
+       S := time_t (Long_Long_Integer (D));
+       F := D - Duration (S);
+ 
+       --  If F has negative value due to a round-up, adjust for positive F
+       --  value.
+ 
+       if F < 0.0 then
+          S := S - 1;
+          F := F + 1.0;
+       end if;
+ 
+       return
+         struct_timeval'
+           (tv_sec => S,
+            tv_usec => time_t (Long_Long_Integer (F * 10#1#E6)));
+    end To_Timeval;
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-irix.ads gcc-4.0.0/gcc/ada/s-osinte-irix.ads
*** gcc-3.4.3/gcc/ada/s-osinte-irix.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-irix.ads	Tue Jul  6 13:57:29 2004
***************
*** 0 ****
--- 1,528 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   S Y S T E M . O S _ I N T E R F A C E                  --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2004, Free Software Foundation, Inc.      --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the SGI Pthreads version of this package
+ 
+ --  This package encapsulates all direct interfaces to OS services
+ --  that are needed by children of System.
+ 
+ --  PLEASE DO NOT add any with-clauses to this package or remove the pragma
+ --  Preelaborate. This package is designed to be a bottom-level (leaf) package.
+ 
+ with Interfaces.C;
+ with Unchecked_Conversion;
+ 
+ package System.OS_Interface is
+ 
+    pragma Preelaborate;
+ 
+    pragma Linker_Options ("-lpthread");
+ 
+    subtype int            is Interfaces.C.int;
+    subtype short          is Interfaces.C.short;
+    subtype long           is Interfaces.C.long;
+    subtype unsigned       is Interfaces.C.unsigned;
+    subtype unsigned_short is Interfaces.C.unsigned_short;
+    subtype unsigned_long  is Interfaces.C.unsigned_long;
+    subtype unsigned_char  is Interfaces.C.unsigned_char;
+    subtype plain_char     is Interfaces.C.plain_char;
+    subtype size_t         is Interfaces.C.size_t;
+ 
+    -----------
+    -- Errno --
+    -----------
+ 
+    function errno return int;
+    pragma Import (C, errno, "__get_errno");
+ 
+    EINTR     : constant := 4;   --  interrupted system call
+    EAGAIN    : constant := 11;  --  No more processes
+    ENOMEM    : constant := 12;  --  Not enough core
+    EINVAL    : constant := 22;  --  Invalid argument
+    ETIMEDOUT : constant := 145; --  Connection timed out
+ 
+    -------------
+    -- Signals --
+    -------------
+ 
+    Max_Interrupt : constant := 64;
+    type Signal is new int range 0 .. Max_Interrupt;
+    for Signal'Size use int'Size;
+ 
+    SIGHUP     : constant := 1; --  hangup
+    SIGINT     : constant := 2; --  interrupt (rubout)
+    SIGQUIT    : constant := 3; --  quit (ASCD FS)
+    SIGILL     : constant := 4; --  illegal instruction (not reset)
+    SIGTRAP    : constant := 5; --  trace trap (not reset)
+    SIGIOT     : constant := 6; --  IOT instruction
+    SIGABRT    : constant := 6; --  used by abort, replace SIGIOT in the
+    --                              future
+    SIGEMT     : constant := 7; --  EMT instruction
+    SIGFPE     : constant := 8; --  floating point exception
+    SIGKILL    : constant := 9; --  kill (cannot be caught or ignored)
+    SIGBUS     : constant := 10; --  bus error
+    SIGSEGV    : constant := 11; --  segmentation violation
+    SIGSYS     : constant := 12; --  bad argument to system call
+    SIGPIPE    : constant := 13; --  write on a pipe with no one to read it
+    SIGALRM    : constant := 14; --  alarm clock
+    SIGTERM    : constant := 15; --  software termination signal from kill
+    SIGUSR1    : constant := 16; --  user defined signal 1
+    SIGUSR2    : constant := 17; --  user defined signal 2
+    SIGCLD     : constant := 18; --  alias for SIGCHLD
+    SIGCHLD    : constant := 18; --  child status change
+    SIGPWR     : constant := 19; --  power-fail restart
+    SIGWINCH   : constant := 20; --  window size change
+    SIGURG     : constant := 21; --  urgent condition on IO channel
+    SIGPOLL    : constant := 22; --  pollable event occurred
+    SIGIO      : constant := 22; --  I/O possible (Solaris SIGPOLL alias)
+    SIGSTOP    : constant := 23; --  stop (cannot be caught or ignored)
+    SIGTSTP    : constant := 24; --  user stop requested from tty
+    SIGCONT    : constant := 25; --  stopped process has been continued
+    SIGTTIN    : constant := 26; --  background tty read attempted
+    SIGTTOU    : constant := 27; --  background tty write attempted
+    SIGVTALRM  : constant := 28; --  virtual timer expired
+    SIGPROF    : constant := 29; --  profiling timer expired
+    SIGXCPU    : constant := 30; --  CPU time limit exceeded
+    SIGXFSZ    : constant := 31; --  filesize limit exceeded
+    SIGK32     : constant := 32; --  reserved for kernel (IRIX)
+    SIGCKPT    : constant := 33; --  Checkpoint warning
+    SIGRESTART : constant := 34; --  Restart warning
+    SIGUME     : constant := 35; --  Uncorrectable memory error
+    --  Signals defined for Posix 1003.1c.
+    SIGPTINTR    : constant := 47;
+    SIGPTRESCHED : constant := 48;
+    --  Posix 1003.1b signals
+    SIGRTMIN   : constant := 49; --  Posix 1003.1b signals
+    SIGRTMAX   : constant := 64; --  Posix 1003.1b signals
+ 
+    type sigset_t is private;
+    type sigset_t_ptr is access all sigset_t;
+ 
+    function sigaddset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigaddset, "sigaddset");
+ 
+    function sigdelset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigdelset, "sigdelset");
+ 
+    function sigfillset (set : access sigset_t) return int;
+    pragma Import (C, sigfillset, "sigfillset");
+ 
+    function sigismember (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigismember, "sigismember");
+ 
+    function sigemptyset (set : access sigset_t) return int;
+    pragma Import (C, sigemptyset, "sigemptyset");
+ 
+    type array_type_2 is array (Integer range 0 .. 1) of int;
+    type struct_sigaction is record
+       sa_flags     : int;
+       sa_handler   : System.Address;
+       sa_mask      : sigset_t;
+       sa_resv      : array_type_2;
+    end record;
+    pragma Convention (C, struct_sigaction);
+ 
+    type struct_sigaction_ptr is access all struct_sigaction;
+ 
+    SIG_BLOCK   : constant := 1;
+    SIG_UNBLOCK : constant := 2;
+    SIG_SETMASK : constant := 3;
+ 
+    SIG_DFL : constant := 0;
+    SIG_IGN : constant := 1;
+ 
+    function sigaction
+      (sig  : Signal;
+       act  : struct_sigaction_ptr;
+       oact : struct_sigaction_ptr := null) return int;
+    pragma Import (C, sigaction, "sigaction");
+ 
+    ----------
+    -- Time --
+    ----------
+ 
+    type timespec is private;
+    type timespec_ptr is access all timespec;
+ 
+    type clockid_t is private;
+ 
+    CLOCK_REALTIME  : constant clockid_t;
+    CLOCK_SGI_FAST  : constant clockid_t;
+    CLOCK_SGI_CYCLE : constant clockid_t;
+ 
+    SGI_CYCLECNTR_SIZE : constant := 165;
+ 
+    function syssgi (request : Interfaces.C.int) return Interfaces.C.ptrdiff_t;
+    pragma Import (C, syssgi, "syssgi");
+ 
+    function clock_gettime
+      (clock_id : clockid_t;
+       tp       : access timespec) return int;
+    pragma Import (C, clock_gettime, "clock_gettime");
+ 
+    function clock_getres
+      (clock_id : clockid_t;
+       tp       : access timespec) return int;
+    pragma Import (C, clock_getres, "clock_getres");
+ 
+    function To_Duration (TS : timespec) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timespec (D : Duration) return timespec;
+    pragma Inline (To_Timespec);
+ 
+    type struct_timeval is private;
+ 
+    function To_Duration (TV : struct_timeval) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timeval (D : Duration) return struct_timeval;
+    pragma Inline (To_Timeval);
+ 
+    -------------------------
+    -- Priority Scheduling --
+    -------------------------
+ 
+    SCHED_FIFO  : constant := 1;
+    SCHED_RR    : constant := 2;
+    SCHED_TS    : constant := 3;
+    SCHED_OTHER : constant := 3;
+    SCHED_NP    : constant := 4;
+ 
+    function sched_get_priority_min (Policy : int) return int;
+    pragma Import (C, sched_get_priority_min, "sched_get_priority_min");
+ 
+    function sched_get_priority_max (Policy : int) return int;
+    pragma Import (C, sched_get_priority_max, "sched_get_priority_max");
+ 
+    -------------
+    -- Process --
+    -------------
+ 
+    type pid_t is private;
+ 
+    function kill (pid : pid_t; sig : Signal) return int;
+    pragma Import (C, kill, "kill");
+ 
+    function getpid return pid_t;
+    pragma Import (C, getpid, "getpid");
+ 
+    -------------
+    -- Threads --
+    -------------
+ 
+    type Thread_Body is access
+      function (arg : System.Address) return System.Address;
+ 
+    function Thread_Body_Access is new
+      Unchecked_Conversion (System.Address, Thread_Body);
+ 
+    type pthread_t           is private;
+    subtype Thread_Id        is pthread_t;
+ 
+    type pthread_mutex_t     is limited private;
+    type pthread_cond_t      is limited private;
+    type pthread_attr_t      is limited private;
+    type pthread_mutexattr_t is limited private;
+    type pthread_condattr_t  is limited private;
+    type pthread_key_t       is private;
+ 
+    PTHREAD_CREATE_DETACHED : constant := 1;
+ 
+    ---------------------------------------
+    -- Nonstandard Thread Initialization --
+    ---------------------------------------
+ 
+    procedure pthread_init;
+    pragma Inline (pthread_init);
+    --  This is a dummy procedure to share some GNULLI files
+ 
+    -------------------------
+    -- POSIX.1c  Section 3 --
+    -------------------------
+ 
+    function sigwait
+      (set : access sigset_t;
+       sig : access Signal) return int;
+    pragma Import (C, sigwait, "sigwait");
+ 
+    function pthread_kill
+      (thread : pthread_t;
+       sig    : Signal) return int;
+    pragma Import (C, pthread_kill, "pthread_kill");
+ 
+    function pthread_sigmask
+      (how  : int;
+       set  : sigset_t_ptr;
+       oset : sigset_t_ptr) return int;
+    pragma Import (C, pthread_sigmask, "pthread_sigmask");
+ 
+    --------------------------
+    -- POSIX.1c  Section 11 --
+    --------------------------
+ 
+    function pthread_mutexattr_init
+      (attr : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
+ 
+    function pthread_mutexattr_destroy
+      (attr : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
+ 
+    function pthread_mutex_init
+      (mutex : access pthread_mutex_t;
+       attr  : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
+ 
+    function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
+ 
+    function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_lock, "pthread_mutex_lock");
+ 
+    function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_unlock, "pthread_mutex_unlock");
+ 
+    function pthread_condattr_init
+      (attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
+ 
+    function pthread_condattr_destroy
+      (attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
+ 
+    function pthread_cond_init
+      (cond : access pthread_cond_t;
+       attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_cond_init, "pthread_cond_init");
+ 
+    function pthread_cond_destroy (cond : access pthread_cond_t) return int;
+    pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
+ 
+    function pthread_cond_signal (cond : access pthread_cond_t) return int;
+    pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
+ 
+    function pthread_cond_wait
+      (cond  : access pthread_cond_t;
+       mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_cond_wait, "pthread_cond_wait");
+ 
+    function pthread_cond_timedwait
+      (cond    : access pthread_cond_t;
+       mutex   : access pthread_mutex_t;
+       abstime : access timespec) return int;
+    pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait");
+ 
+    --------------------------
+    -- POSIX.1c  Section 13 --
+    --------------------------
+ 
+    PTHREAD_PRIO_NONE    : constant := 0;
+    PTHREAD_PRIO_PROTECT : constant := 2;
+    PTHREAD_PRIO_INHERIT : constant := 1;
+ 
+    function pthread_mutexattr_setprotocol
+      (attr     : access pthread_mutexattr_t;
+       protocol : int) return int;
+    pragma Import (C, pthread_mutexattr_setprotocol);
+ 
+    function pthread_mutexattr_setprioceiling
+      (attr     : access pthread_mutexattr_t;
+       prioceiling : int) return int;
+    pragma Import (C, pthread_mutexattr_setprioceiling);
+ 
+    type struct_sched_param is record
+       sched_priority : int;
+    end record;
+    pragma Convention (C, struct_sched_param);
+ 
+    function pthread_setschedparam
+      (thread : pthread_t;
+       policy : int;
+       param  : access struct_sched_param)
+      return int;
+    pragma Import (C, pthread_setschedparam, "pthread_setschedparam");
+ 
+    function pthread_attr_setscope
+      (attr            : access pthread_attr_t;
+       contentionscope : int) return int;
+    pragma Import (C, pthread_attr_setscope, "pthread_attr_setscope");
+ 
+    function pthread_attr_setinheritsched
+      (attr         : access pthread_attr_t;
+       inheritsched : int) return int;
+    pragma Import
+      (C, pthread_attr_setinheritsched, "pthread_attr_setinheritsched");
+ 
+    function pthread_attr_setschedpolicy
+      (attr   : access pthread_attr_t;
+       policy : int) return int;
+    pragma Import (C, pthread_attr_setschedpolicy);
+ 
+    function pthread_attr_setschedparam
+      (attr        : access pthread_attr_t;
+       sched_param : access struct_sched_param)
+      return int;
+    pragma Import (C, pthread_attr_setschedparam, "pthread_attr_setschedparam");
+ 
+    function sched_yield return int;
+    pragma Import (C, sched_yield, "sched_yield");
+ 
+    ---------------------------
+    -- P1003.1c - Section 16 --
+    ---------------------------
+ 
+    function pthread_attr_init (attributes : access pthread_attr_t) return int;
+    pragma Import (C, pthread_attr_init, "pthread_attr_init");
+ 
+    function pthread_attr_destroy
+      (attributes : access pthread_attr_t) return int;
+    pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
+ 
+    function pthread_attr_setdetachstate
+      (attr        : access pthread_attr_t;
+       detachstate : int) return int;
+    pragma Import (C, pthread_attr_setdetachstate);
+ 
+    function pthread_attr_setstacksize
+      (attr      : access pthread_attr_t;
+       stacksize : size_t) return int;
+    pragma Import (C, pthread_attr_setstacksize, "pthread_attr_setstacksize");
+ 
+    function pthread_create
+      (thread        : access pthread_t;
+       attributes    : access pthread_attr_t;
+       start_routine : Thread_Body;
+       arg           : System.Address) return int;
+    pragma Import (C, pthread_create, "pthread_create");
+ 
+    procedure pthread_exit (status : System.Address);
+    pragma Import (C, pthread_exit, "pthread_exit");
+ 
+    function pthread_self return pthread_t;
+    pragma Import (C, pthread_self, "pthread_self");
+ 
+    --------------------------
+    -- POSIX.1c  Section 17 --
+    --------------------------
+ 
+    function pthread_setspecific
+      (key   : pthread_key_t;
+       value : System.Address) return int;
+    pragma Import (C, pthread_setspecific, "pthread_setspecific");
+ 
+    function pthread_getspecific (key : pthread_key_t) return System.Address;
+    pragma Import (C, pthread_getspecific, "pthread_getspecific");
+ 
+    type destructor_pointer is access procedure (arg : System.Address);
+ 
+    function pthread_key_create
+      (key        : access pthread_key_t;
+       destructor : destructor_pointer) return int;
+    pragma Import (C, pthread_key_create, "pthread_key_create");
+ 
+    -------------------
+    -- SGI Additions --
+    -------------------
+ 
+    --  Non portable SGI 6.5 additions to the pthread interface must be
+    --  executed from within the context of a system scope task.
+ 
+    function pthread_setrunon_np (cpu : int) return int;
+    pragma Import (C, pthread_setrunon_np, "pthread_setrunon_np");
+ 
+ private
+ 
+    type array_type_1 is array (Integer range 0 .. 3) of unsigned;
+    type sigset_t is record
+       X_X_sigbits : array_type_1;
+    end record;
+    pragma Convention (C, sigset_t);
+ 
+    type pid_t is new long;
+ 
+    type time_t is new long;
+ 
+    type timespec is record
+       tv_sec  : time_t;
+       tv_nsec : long;
+    end record;
+    pragma Convention (C, timespec);
+ 
+    type clockid_t is new int;
+    CLOCK_REALTIME  : constant clockid_t := 1;
+    CLOCK_SGI_CYCLE : constant clockid_t := 2;
+    CLOCK_SGI_FAST  : constant clockid_t := 3;
+ 
+    type struct_timeval is record
+       tv_sec  : time_t;
+       tv_usec : time_t;
+    end record;
+    pragma Convention (C, struct_timeval);
+ 
+    type array_type_9 is array (Integer range 0 .. 4) of long;
+    type pthread_attr_t is record
+       X_X_D : array_type_9;
+    end record;
+    pragma Convention (C, pthread_attr_t);
+ 
+    type array_type_8 is array (Integer range 0 .. 1) of long;
+    type pthread_condattr_t is record
+       X_X_D : array_type_8;
+    end record;
+    pragma Convention (C, pthread_condattr_t);
+ 
+    type array_type_7 is array (Integer range 0 .. 1) of long;
+    type pthread_mutexattr_t is record
+       X_X_D : array_type_7;
+    end record;
+    pragma Convention (C, pthread_mutexattr_t);
+ 
+    type pthread_t is new unsigned;
+ 
+    type array_type_10 is array (Integer range 0 .. 7) of long;
+    type pthread_mutex_t is record
+       X_X_D : array_type_10;
+    end record;
+    pragma Convention (C, pthread_mutex_t);
+ 
+    type array_type_11 is array (Integer range 0 .. 7) of long;
+    type pthread_cond_t is record
+       X_X_D : array_type_11;
+    end record;
+    pragma Convention (C, pthread_cond_t);
+ 
+    type pthread_key_t is new int;
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-linux-alpha.ads gcc-4.0.0/gcc/ada/s-osinte-linux-alpha.ads
*** gcc-3.4.3/gcc/ada/s-osinte-linux-alpha.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-linux-alpha.ads	Thu Jan 20 18:27:10 2005
***************
*** 0 ****
--- 1,506 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   S Y S T E M . O S _ I N T E R F A C E                  --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2005, Free Software Foundation, Inc.      --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a GNU/Linux (GNU/LinuxThreads) version of this package
+ 
+ --  This package encapsulates all direct interfaces to OS services
+ --  that are needed by children of System.
+ 
+ --  PLEASE DO NOT add any with-clauses to this package or remove the pragma
+ --  Preelaborate. This package is designed to be a bottom-level (leaf) package.
+ 
+ with Interfaces.C;
+ with Unchecked_Conversion;
+ 
+ package System.OS_Interface is
+    pragma Preelaborate;
+ 
+    pragma Linker_Options ("-lpthread");
+ 
+    subtype int            is Interfaces.C.int;
+    subtype char           is Interfaces.C.char;
+    subtype short          is Interfaces.C.short;
+    subtype long           is Interfaces.C.long;
+    subtype unsigned       is Interfaces.C.unsigned;
+    subtype unsigned_short is Interfaces.C.unsigned_short;
+    subtype unsigned_long  is Interfaces.C.unsigned_long;
+    subtype unsigned_char  is Interfaces.C.unsigned_char;
+    subtype plain_char     is Interfaces.C.plain_char;
+    subtype size_t         is Interfaces.C.size_t;
+ 
+    -----------
+    -- Errno --
+    -----------
+ 
+    function errno return int;
+    pragma Import (C, errno, "__get_errno");
+ 
+    EAGAIN    : constant := 35;
+    EINTR     : constant := 4;
+    EINVAL    : constant := 22;
+    ENOMEM    : constant := 12;
+    EPERM     : constant := 1;
+    ETIMEDOUT : constant := 60;
+ 
+    -------------
+    -- Signals --
+    -------------
+ 
+    Max_Interrupt : constant := 63;
+    type Signal is new int range 0 .. Max_Interrupt;
+    for Signal'Size use int'Size;
+ 
+    SIGHUP     : constant := 1; --  hangup
+    SIGINT     : constant := 2; --  interrupt (rubout)
+    SIGQUIT    : constant := 3; --  quit (ASCD FS)
+    SIGILL     : constant := 4; --  illegal instruction (not reset)
+    SIGTRAP    : constant := 5; --  trace trap (not reset)
+    SIGIOT     : constant := 6; --  IOT instruction
+    SIGABRT    : constant := 6; --  used by abort, replace SIGIOT in the  future
+    SIGFPE     : constant := 8; --  floating point exception
+    SIGKILL    : constant := 9; --  kill (cannot be caught or ignored)
+    SIGBUS     : constant := 10; --  bus error
+    SIGSEGV    : constant := 11; --  segmentation violation
+    SIGPIPE    : constant := 13; --  write on a pipe with no one to read it
+    SIGALRM    : constant := 14; --  alarm clock
+    SIGTERM    : constant := 15; --  software termination signal from kill
+    SIGURG     : constant := 16; --  urgent condition on IO channel
+    SIGSTOP    : constant := 17; --  stop (cannot be caught or ignored)
+    SIGTSTP    : constant := 18; --  user stop requested from tty
+    SIGCONT    : constant := 19; --  stopped process has been continued
+    SIGCLD     : constant := 20; --  alias for SIGCHLD
+    SIGCHLD    : constant := 20; --  child status change
+    SIGTTIN    : constant := 21; --  background tty read attempted
+    SIGTTOU    : constant := 22; --  background tty write attempted
+    SIGIO      : constant := 23; --  I/O now possible (4.2 BSD)
+    SIGPOLL    : constant := 23; --  pollable event occurred
+    SIGXCPU    : constant := 24; --  CPU time limit exceeded
+    SIGXFSZ    : constant := 25; --  filesize limit exceeded
+    SIGVTALRM  : constant := 26; --  virtual timer expired
+    SIGPROF    : constant := 27; --  profiling timer expired
+    SIGWINCH   : constant := 28; --  window size change
+    SIGPWR     : constant := 29; --  power-fail restart
+    SIGUSR1    : constant := 30; --  user defined signal 1
+    SIGUSR2    : constant := 31; --  user defined signal 2
+ 
+    SIGLTHRRES : constant := 32; --  GNU/LinuxThreads restart signal
+    SIGLTHRCAN : constant := 33; --  GNU/LinuxThreads cancel signal
+    SIGLTHRDBG : constant := 34; --  GNU/LinuxThreads debugger signal
+ 
+    SIGADAABORT : constant := SIGABRT;
+    --  Change this if you want to use another signal for task abort.
+    --  SIGTERM might be a good one.
+ 
+    SIGUNUSED  : constant := 0;
+    SIGSTKFLT  : constant := 0;
+    SIGLOST    : constant := 0;
+    --  These don't exist for Linux/Alpha.  The constants are present
+    --  so that we can continue to use a-intnam-linux.ads.
+ 
+    type Signal_Set is array (Natural range <>) of Signal;
+ 
+    Unmasked    : constant Signal_Set := (
+       SIGTRAP,
+       --  To enable debugging on multithreaded applications, mark SIGTRAP to
+       --  be kept unmasked.
+ 
+       SIGBUS,
+ 
+       SIGTTIN, SIGTTOU, SIGTSTP,
+       --  Keep these three signals unmasked so that background processes
+       --  and IO behaves as normal "C" applications
+ 
+       SIGPROF,
+       --  To avoid confusing the profiler
+ 
+       SIGKILL, SIGSTOP,
+       --  These two signals actually cannot be masked;
+       --  POSIX simply won't allow it.
+ 
+       SIGLTHRRES, SIGLTHRCAN, SIGLTHRDBG);
+       --  These three signals are used by GNU/LinuxThreads starting from
+       --  glibc 2.1 (future 2.2).
+ 
+    Reserved    : constant Signal_Set := (SIGKILL, SIGSTOP);
+ 
+    type sigset_t is private;
+ 
+    function sigaddset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigaddset, "sigaddset");
+ 
+    function sigdelset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigdelset, "sigdelset");
+ 
+    function sigfillset (set : access sigset_t) return int;
+    pragma Import (C, sigfillset, "sigfillset");
+ 
+    function sigismember (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigismember, "sigismember");
+ 
+    function sigemptyset (set : access sigset_t) return int;
+    pragma Import (C, sigemptyset, "sigemptyset");
+ 
+    type union_type_3 is new String (1 .. 116);
+    type siginfo_t is record
+       si_signo : int;
+       si_code  : int;
+       si_errno : int;
+       X_data   : union_type_3;
+    end record;
+    pragma Convention (C, siginfo_t);
+ 
+    type struct_sigaction is record
+       sa_handler   : System.Address;
+       sa_mask      : sigset_t;
+       sa_flags     : unsigned_long;
+    end record;
+    pragma Convention (C, struct_sigaction);
+    type struct_sigaction_ptr is access all struct_sigaction;
+ 
+    type Machine_State is record
+      dummy : unsigned_long;
+    end record;
+    type Machine_State_Ptr is access all Machine_State;
+ 
+    SA_SIGINFO  : constant := 16#40#;
+ 
+    SIG_BLOCK   : constant := 0;
+    SIG_UNBLOCK : constant := 1;
+    SIG_SETMASK : constant := 2;
+ 
+    SIG_DFL : constant := 0;
+    SIG_IGN : constant := 1;
+ 
+    function sigaction
+      (sig  : Signal;
+       act  : struct_sigaction_ptr;
+       oact : struct_sigaction_ptr) return int;
+    pragma Import (C, sigaction, "sigaction");
+ 
+    ----------
+    -- Time --
+    ----------
+ 
+    type timespec is private;
+ 
+    function To_Duration (TS : timespec) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timespec (D : Duration) return timespec;
+    pragma Inline (To_Timespec);
+ 
+    type struct_timeval is private;
+ 
+    function To_Duration (TV : struct_timeval) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timeval (D : Duration) return struct_timeval;
+    pragma Inline (To_Timeval);
+ 
+    function gettimeofday
+      (tv : access struct_timeval;
+       tz : System.Address := System.Null_Address) return int;
+    pragma Import (C, gettimeofday, "gettimeofday");
+ 
+    function sysconf (name : int) return long;
+    pragma Import (C, sysconf);
+ 
+    SC_CLK_TCK : constant := 2;
+ 
+    -------------------------
+    -- Priority Scheduling --
+    -------------------------
+ 
+    SCHED_OTHER : constant := 0;
+    SCHED_FIFO  : constant := 1;
+    SCHED_RR    : constant := 2;
+ 
+    -------------
+    -- Process --
+    -------------
+ 
+    type pid_t is private;
+ 
+    function kill (pid : pid_t; sig : Signal) return int;
+    pragma Import (C, kill, "kill");
+ 
+    function getpid return pid_t;
+    pragma Import (C, getpid, "getpid");
+ 
+    -------------
+    -- Threads --
+    -------------
+ 
+    type Thread_Body is access
+      function (arg : System.Address) return System.Address;
+ 
+    function Thread_Body_Access is new
+      Unchecked_Conversion (System.Address, Thread_Body);
+ 
+    type pthread_t is new unsigned_long;
+    subtype Thread_Id        is pthread_t;
+ 
+    function To_pthread_t is new Unchecked_Conversion
+      (unsigned_long, pthread_t);
+ 
+    type pthread_mutex_t     is limited private;
+    type pthread_cond_t      is limited private;
+    type pthread_attr_t      is limited private;
+    type pthread_mutexattr_t is limited private;
+    type pthread_condattr_t  is limited private;
+    type pthread_key_t       is private;
+ 
+    PTHREAD_CREATE_DETACHED : constant := 1;
+ 
+    -----------
+    -- Stack --
+    -----------
+ 
+    function Get_Stack_Base (thread : pthread_t) return Address;
+    pragma Inline (Get_Stack_Base);
+    --  This is a dummy procedure to share some GNULLI files
+ 
+    ---------------------------------------
+    -- Nonstandard Thread Initialization --
+    ---------------------------------------
+ 
+    procedure pthread_init;
+    pragma Inline (pthread_init);
+    --  This is a dummy procedure to share some GNULLI files
+ 
+    -------------------------
+    -- POSIX.1c  Section 3 --
+    -------------------------
+ 
+    function sigwait (set : access sigset_t; sig : access Signal) return int;
+    pragma Import (C, sigwait, "sigwait");
+ 
+    function pthread_kill (thread : pthread_t; sig : Signal) return int;
+    pragma Import (C, pthread_kill, "pthread_kill");
+ 
+    type sigset_t_ptr is access all sigset_t;
+ 
+    function pthread_sigmask
+      (how  : int;
+       set  : sigset_t_ptr;
+       oset : sigset_t_ptr) return int;
+    pragma Import (C, pthread_sigmask, "pthread_sigmask");
+ 
+    --------------------------
+    -- POSIX.1c  Section 11 --
+    --------------------------
+ 
+    function pthread_mutexattr_init
+      (attr : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
+ 
+    function pthread_mutexattr_destroy
+      (attr : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
+ 
+    function pthread_mutex_init
+      (mutex : access pthread_mutex_t;
+       attr  : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
+ 
+    function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
+ 
+    function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_lock, "pthread_mutex_lock");
+ 
+    function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_unlock, "pthread_mutex_unlock");
+ 
+    function pthread_condattr_init
+      (attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
+ 
+    function pthread_condattr_destroy
+      (attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
+ 
+    function pthread_cond_init
+      (cond : access pthread_cond_t;
+       attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_cond_init, "pthread_cond_init");
+ 
+    function pthread_cond_destroy (cond : access pthread_cond_t) return int;
+    pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
+ 
+    function pthread_cond_signal (cond : access pthread_cond_t) return int;
+    pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
+ 
+    function pthread_cond_wait
+      (cond  : access pthread_cond_t;
+       mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_cond_wait, "pthread_cond_wait");
+ 
+    function pthread_cond_timedwait
+      (cond    : access pthread_cond_t;
+       mutex   : access pthread_mutex_t;
+       abstime : access timespec) return int;
+    pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait");
+ 
+    --------------------------
+    -- POSIX.1c  Section 13 --
+    --------------------------
+ 
+    type struct_sched_param is record
+       sched_priority : int;  --  scheduling priority
+    end record;
+    pragma Convention (C, struct_sched_param);
+ 
+    function pthread_setschedparam
+      (thread : pthread_t;
+       policy : int;
+       param  : access struct_sched_param) return int;
+    pragma Import (C, pthread_setschedparam, "pthread_setschedparam");
+ 
+    function pthread_attr_setschedpolicy
+      (attr   : access pthread_attr_t;
+       policy : int) return int;
+    pragma Import
+      (C, pthread_attr_setschedpolicy, "pthread_attr_setschedpolicy");
+ 
+    function sched_yield return int;
+    pragma Import (C, sched_yield, "sched_yield");
+ 
+    ---------------------------
+    -- P1003.1c - Section 16 --
+    ---------------------------
+ 
+    function pthread_attr_init
+      (attributes : access pthread_attr_t) return int;
+    pragma Import (C, pthread_attr_init, "pthread_attr_init");
+ 
+    function pthread_attr_destroy
+      (attributes : access pthread_attr_t) return int;
+    pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
+ 
+    function pthread_attr_setdetachstate
+      (attr        : access pthread_attr_t;
+       detachstate : int) return int;
+    pragma Import
+      (C, pthread_attr_setdetachstate, "pthread_attr_setdetachstate");
+ 
+    function pthread_attr_setstacksize
+      (attr      : access pthread_attr_t;
+       stacksize : size_t) return int;
+    pragma Import (C, pthread_attr_setstacksize, "pthread_attr_setstacksize");
+ 
+    function pthread_create
+      (thread        : access pthread_t;
+       attributes    : access pthread_attr_t;
+       start_routine : Thread_Body;
+       arg           : System.Address) return int;
+    pragma Import (C, pthread_create, "pthread_create");
+ 
+    procedure pthread_exit (status : System.Address);
+    pragma Import (C, pthread_exit, "pthread_exit");
+ 
+    function pthread_self return pthread_t;
+    pragma Import (C, pthread_self, "pthread_self");
+ 
+    --------------------------
+    -- POSIX.1c  Section 17 --
+    --------------------------
+ 
+    function pthread_setspecific
+      (key   : pthread_key_t;
+       value : System.Address) return int;
+    pragma Import (C, pthread_setspecific, "pthread_setspecific");
+ 
+    function pthread_getspecific (key : pthread_key_t) return System.Address;
+    pragma Import (C, pthread_getspecific, "pthread_getspecific");
+ 
+    type destructor_pointer is access procedure (arg : System.Address);
+ 
+    function pthread_key_create
+      (key        : access pthread_key_t;
+       destructor : destructor_pointer) return int;
+    pragma Import (C, pthread_key_create, "pthread_key_create");
+ 
+ private
+ 
+    type sigset_t is record
+       dum0, dum1, dum2, dum3, dum4, dum5, dum6, dum7 : unsigned_long;
+       dum8, dum9, dum10, dum11, dum12, dum13, dum14, dum15 : unsigned_long;
+    end record;
+    pragma Convention (C, sigset_t);
+ 
+    type pid_t is new int;
+ 
+    type time_t is new long;
+ 
+    type timespec is record
+       tv_sec  : time_t;
+       tv_nsec : long;
+    end record;
+    pragma Convention (C, timespec);
+ 
+    type struct_timeval is record
+       tv_sec  : time_t;
+       tv_usec : time_t;
+    end record;
+    pragma Convention (C, struct_timeval);
+ 
+    type pthread_attr_t is record
+       dum0, dum1, dum2, dum3, dum4, dum5, dum6 : unsigned_long;
+    end record;
+    pragma Convention (C, pthread_attr_t);
+ 
+    type pthread_condattr_t is record
+       dummy : int;
+    end record;
+    pragma Convention (C, pthread_condattr_t);
+ 
+    type pthread_mutexattr_t is record
+       mutexkind : int;
+    end record;
+    pragma Convention (C, pthread_mutexattr_t);
+ 
+    type pthread_mutex_t is record
+       dum0, dum1, dum2, dum3, dum4 : unsigned_long;
+    end record;
+    pragma Convention (C, pthread_mutex_t);
+ 
+    type pthread_cond_t is record
+       dum0, dum1, dum2, dum3, dum4, dum5 : unsigned_long;
+    end record;
+    pragma Convention (C, pthread_cond_t);
+ 
+    type pthread_key_t is new unsigned;
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-linux-fsu.ads gcc-4.0.0/gcc/ada/s-osinte-linux-fsu.ads
*** gcc-3.4.3/gcc/ada/s-osinte-linux-fsu.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-linux-fsu.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,599 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   S Y S T E M . O S _ I N T E R F A C E                  --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2004, Free Software Foundation, Inc.      --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a GNU/Linux (FSU THREADS) version of this package.
+ 
+ --  This package encapsulates all direct interfaces to OS services
+ --  that are needed by children of System.
+ 
+ --  PLEASE DO NOT add any with-clauses to this package or remove the pragma
+ --  Preelaborate. This package is designed to be a bottom-level (leaf) package.
+ 
+ with Interfaces.C;
+ with Unchecked_Conversion;
+ 
+ package System.OS_Interface is
+    pragma Preelaborate;
+ 
+    pragma Linker_Options ("-lgthreads");
+    pragma Linker_Options ("-lmalloc");
+ 
+    subtype int            is Interfaces.C.int;
+    subtype short          is Interfaces.C.short;
+    subtype long           is Interfaces.C.long;
+    subtype unsigned       is Interfaces.C.unsigned;
+    subtype unsigned_short is Interfaces.C.unsigned_short;
+    subtype unsigned_long  is Interfaces.C.unsigned_long;
+    subtype unsigned_char  is Interfaces.C.unsigned_char;
+    subtype plain_char     is Interfaces.C.plain_char;
+    subtype size_t         is Interfaces.C.size_t;
+ 
+    -----------
+    -- Errno --
+    -----------
+ 
+    function errno return int;
+    pragma Import (C, errno, "__get_errno");
+ 
+    EAGAIN    : constant := 11;
+    EINTR     : constant := 4;
+    EINVAL    : constant := 22;
+    ENOMEM    : constant := 12;
+    ETIMEDOUT : constant := 110;
+ 
+    -------------
+    -- Signals --
+    -------------
+ 
+    Max_Interrupt : constant := 31;
+    type Signal is new int range 0 .. Max_Interrupt;
+    for Signal'Size use int'Size;
+ 
+    SIGHUP     : constant := 1; --  hangup
+    SIGINT     : constant := 2; --  interrupt (rubout)
+    SIGQUIT    : constant := 3; --  quit (ASCD FS)
+    SIGILL     : constant := 4; --  illegal instruction (not reset)
+    SIGTRAP    : constant := 5; --  trace trap (not reset)
+    SIGIOT     : constant := 6; --  IOT instruction
+    SIGABRT    : constant := 6; --  used by abort, replace SIGIOT in the  future
+    SIGFPE     : constant := 8; --  floating point exception
+    SIGKILL    : constant := 9; --  kill (cannot be caught or ignored)
+    SIGBUS     : constant := 7; --  bus error
+    SIGSEGV    : constant := 11; --  segmentation violation
+    SIGPIPE    : constant := 13; --  write on a pipe with no one to read it
+    SIGALRM    : constant := 14; --  alarm clock
+    SIGTERM    : constant := 15; --  software termination signal from kill
+    SIGUSR1    : constant := 10; --  user defined signal 1
+    SIGUSR2    : constant := 12; --  user defined signal 2
+    SIGCLD     : constant := 17; --  alias for SIGCHLD
+    SIGCHLD    : constant := 17; --  child status change
+    SIGPWR     : constant := 30; --  power-fail restart
+    SIGWINCH   : constant := 28; --  window size change
+    SIGURG     : constant := 23; --  urgent condition on IO channel
+    SIGPOLL    : constant := 29; --  pollable event occurred
+    SIGIO      : constant := 29; --  I/O now possible (4.2 BSD)
+    SIGLOST    : constant := 29; --  File lock lost
+    SIGSTOP    : constant := 19; --  stop (cannot be caught or ignored)
+    SIGTSTP    : constant := 20; --  user stop requested from tty
+    SIGCONT    : constant := 18; --  stopped process has been continued
+    SIGTTIN    : constant := 21; --  background tty read attempted
+    SIGTTOU    : constant := 22; --  background tty write attempted
+    SIGVTALRM  : constant := 26; --  virtual timer expired
+    SIGPROF    : constant := 27; --  profiling timer expired
+    SIGXCPU    : constant := 24; --  CPU time limit exceeded
+    SIGXFSZ    : constant := 25; --  filesize limit exceeded
+    SIGUNUSED  : constant := 31; --  unused signal (GNU/Linux)
+    SIGSTKFLT  : constant := 16; --  coprocessor stack fault (GNU/Linux)
+ 
+    SIGADAABORT : constant := SIGABRT;
+    --  Change this if you want to use another signal for task abort.
+    --  SIGTERM might be a good one.
+ 
+    type Signal_Set is array (Natural range <>) of Signal;
+ 
+    Unmasked    : constant Signal_Set :=
+      (SIGTRAP, SIGBUS, SIGTTIN, SIGTTOU, SIGTSTP, SIGPROF);
+ 
+    Reserved    : constant Signal_Set :=
+      (SIGKILL, SIGSTOP, SIGALRM, SIGVTALRM, SIGUNUSED);
+ 
+    type sigset_t is private;
+ 
+    function sigaddset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigaddset, "sigaddset");
+ 
+    function sigdelset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigdelset, "sigdelset");
+ 
+    function sigfillset (set : access sigset_t) return int;
+    pragma Import (C, sigfillset, "sigfillset");
+ 
+    function sigismember (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigismember, "sigismember");
+ 
+    function sigemptyset (set : access sigset_t) return int;
+    pragma Import (C, sigemptyset, "sigemptyset");
+ 
+    type struct_sigaction is record
+       sa_handler  : System.Address;
+       sa_mask     : sigset_t;
+       sa_flags    : unsigned_long;
+       sa_restorer : System.Address;
+    end record;
+    pragma Convention (C, struct_sigaction);
+    type struct_sigaction_ptr is access all struct_sigaction;
+ 
+    type Machine_State is record
+       eip : unsigned_long;
+       ebx : unsigned_long;
+       esp : unsigned_long;
+       ebp : unsigned_long;
+       esi : unsigned_long;
+       edi : unsigned_long;
+    end record;
+    type Machine_State_Ptr is access all Machine_State;
+ 
+    SA_SIGINFO  : constant := 16#04#;
+ 
+    SIG_BLOCK   : constant := 0;
+    SIG_UNBLOCK : constant := 1;
+    SIG_SETMASK : constant := 2;
+ 
+    SIG_DFL : constant := 0;
+    SIG_IGN : constant := 1;
+ 
+    function sigaction
+      (sig  : Signal;
+       act  : struct_sigaction_ptr;
+       oact : struct_sigaction_ptr) return int;
+    pragma Import (C, sigaction, "sigaction");
+ 
+    ----------
+    -- Time --
+    ----------
+ 
+    Time_Slice_Supported : constant Boolean := False;
+    --  Indicates wether time slicing is supported (i.e FSU threads have been
+    --  compiled with DEF_RR)
+ 
+    type timespec is private;
+ 
+    type clockid_t is private;
+ 
+    CLOCK_REALTIME : constant clockid_t;
+ 
+    function clock_gettime
+      (clock_id : clockid_t;
+       tp       : access timespec) return int;
+    pragma Import (C, clock_gettime, "clock_gettime");
+ 
+    function To_Duration (TS : timespec) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timespec (D : Duration) return timespec;
+    pragma Inline (To_Timespec);
+ 
+    type struct_timeval is private;
+ 
+    function To_Duration (TV : struct_timeval) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timeval (D : Duration) return struct_timeval;
+    pragma Inline (To_Timeval);
+ 
+    -------------------------
+    -- Priority Scheduling --
+    -------------------------
+ 
+    SCHED_FIFO  : constant := 0;
+    SCHED_RR    : constant := 1;
+    SCHED_OTHER : constant := 2;
+ 
+    -------------
+    -- Process --
+    -------------
+ 
+    type pid_t is private;
+ 
+    function kill (pid : pid_t; sig : Signal) return int;
+    pragma Import (C, kill, "kill");
+ 
+    function getpid return pid_t;
+    pragma Import (C, getpid, "getpid");
+ 
+    ---------
+    -- LWP --
+    ---------
+ 
+    function lwp_self return System.Address;
+    --  lwp_self does not exist on this thread library, revert to pthread_self
+    --  which is the closest approximation (with getpid). This function is
+    --  needed to share 7staprop.adb across POSIX-like targets.
+    pragma Import (C, lwp_self, "pthread_self");
+ 
+    -------------
+    -- Threads --
+    -------------
+ 
+    type Thread_Body is access
+      function (arg : System.Address) return System.Address;
+ 
+    function Thread_Body_Access is new
+      Unchecked_Conversion (System.Address, Thread_Body);
+ 
+    type pthread_t           is private;
+    subtype Thread_Id        is pthread_t;
+ 
+    type pthread_mutex_t     is limited private;
+    type pthread_cond_t      is limited private;
+    type pthread_attr_t      is limited private;
+    type pthread_mutexattr_t is limited private;
+    type pthread_condattr_t  is limited private;
+    type pthread_key_t       is private;
+ 
+    PTHREAD_CREATE_DETACHED : constant := 1;
+ 
+    -----------
+    -- Stack --
+    -----------
+ 
+    Stack_Base_Available : constant Boolean := False;
+    --  Indicates wether the stack base is available on this target.
+    --  This allows us to share s-osinte.adb between all the FSU run time.
+    --  Note that this value can only be true if pthread_t has a complete
+    --  definition that corresponds exactly to the C header files.
+ 
+    function Get_Stack_Base (thread : pthread_t) return Address;
+    pragma Inline (Get_Stack_Base);
+    --  returns the stack base of the specified thread.
+    --  Only call this function when Stack_Base_Available is True.
+ 
+    function Get_Page_Size return size_t;
+    function Get_Page_Size return Address;
+    pragma Import (C, Get_Page_Size, "getpagesize");
+    --  returns the size of a page, or 0 if this is not relevant on this
+    --  target
+ 
+    PROT_NONE  : constant := 0;
+    PROT_READ  : constant := 1;
+    PROT_WRITE : constant := 2;
+    PROT_EXEC  : constant := 4;
+    PROT_ALL   : constant := PROT_READ + PROT_WRITE + PROT_EXEC;
+ 
+    PROT_ON    : constant := PROT_NONE;
+    PROT_OFF   : constant := PROT_ALL;
+ 
+    function mprotect (addr : Address; len : size_t; prot : int) return int;
+    pragma Import (C, mprotect);
+ 
+    ---------------------------------------
+    -- Nonstandard Thread Initialization --
+    ---------------------------------------
+ 
+    procedure pthread_init;
+    --  FSU_THREADS requires pthread_init, which is nonstandard
+    --  and this should be invoked during the elaboration of s-taprop.adb
+    pragma Import (C, pthread_init, "pthread_init");
+ 
+    -------------------------
+    -- POSIX.1c  Section 3 --
+    -------------------------
+ 
+    function sigwait
+      (set : access sigset_t;
+       sig : access Signal) return int;
+    pragma Inline (sigwait);
+    --  FSU_THREADS has a nonstandard sigwait
+ 
+    function pthread_kill
+      (thread : pthread_t;
+       sig    : Signal) return int;
+    pragma Import (C, pthread_kill, "pthread_kill");
+ 
+    --  FSU threads does not have pthread_sigmask. Instead, it uses
+    --  sigprocmask to do the signal handling when the thread library is
+    --  sucked in.
+ 
+    type sigset_t_ptr is access all sigset_t;
+ 
+    function pthread_sigmask
+      (how  : int;
+       set  : sigset_t_ptr;
+       oset : sigset_t_ptr) return int;
+    pragma Import (C, pthread_sigmask, "sigprocmask");
+ 
+    --------------------------
+    -- POSIX.1c  Section 11 --
+    --------------------------
+ 
+    function pthread_mutexattr_init
+      (attr : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
+ 
+    function pthread_mutexattr_destroy
+      (attr : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
+ 
+    function pthread_mutex_init
+      (mutex : access pthread_mutex_t;
+       attr  : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
+ 
+    function pthread_mutex_destroy
+      (mutex : access pthread_mutex_t) return  int;
+    pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
+ 
+    function pthread_mutex_lock
+      (mutex : access pthread_mutex_t) return int;
+    pragma Inline (pthread_mutex_lock);
+    --  FSU_THREADS has nonstandard pthread_mutex_lock
+ 
+    function pthread_mutex_unlock
+      (mutex : access pthread_mutex_t) return int;
+    pragma Inline (pthread_mutex_unlock);
+    --  FSU_THREADS has nonstandard pthread_mutex_lock
+ 
+    function pthread_condattr_init
+      (attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
+ 
+    function pthread_condattr_destroy
+      (attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
+ 
+    function pthread_cond_init
+      (cond : access pthread_cond_t;
+       attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_cond_init, "pthread_cond_init");
+ 
+    function pthread_cond_destroy (cond : access pthread_cond_t) return int;
+    pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
+ 
+    function pthread_cond_signal (cond : access pthread_cond_t) return int;
+    pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
+ 
+    function pthread_cond_wait
+      (cond  : access pthread_cond_t;
+       mutex : access pthread_mutex_t) return int;
+    pragma Inline (pthread_cond_wait);
+    --  FSU_THREADS has a nonstandard pthread_cond_wait
+ 
+    function pthread_cond_timedwait
+      (cond    : access pthread_cond_t;
+       mutex   : access pthread_mutex_t;
+       abstime : access timespec) return int;
+    pragma Inline (pthread_cond_timedwait);
+    --  FSU_THREADS has a nonstandard pthread_cond_timedwait
+ 
+    Relative_Timed_Wait : constant Boolean := False;
+    --  pthread_cond_timedwait requires an absolute delay time
+ 
+    --------------------------
+    -- POSIX.1c  Section 13 --
+    --------------------------
+ 
+    PTHREAD_PRIO_NONE    : constant := 0;
+    PTHREAD_PRIO_PROTECT : constant := 2;
+    PTHREAD_PRIO_INHERIT : constant := 1;
+ 
+    function pthread_mutexattr_setprotocol
+      (attr     : access pthread_mutexattr_t;
+       protocol : int) return int;
+    pragma Import (C, pthread_mutexattr_setprotocol);
+ 
+    function pthread_mutexattr_setprioceiling
+      (attr        : access pthread_mutexattr_t;
+       prioceiling : int) return int;
+    pragma Import
+      (C, pthread_mutexattr_setprioceiling,
+       "pthread_mutexattr_setprio_ceiling");
+ 
+    type struct_sched_param is record
+       sched_priority : int;  --  scheduling priority
+    end record;
+ 
+    function pthread_setschedparam
+      (thread : pthread_t;
+       policy : int;
+       param  : access struct_sched_param) return int;
+    pragma Inline (pthread_setschedparam);
+    --  FSU_THREADS does not have pthread_setschedparam
+ 
+    function pthread_attr_setscope
+      (attr            : access pthread_attr_t;
+       contentionscope : int) return int;
+    pragma Import (C, pthread_attr_setscope, "pthread_attr_setscope");
+ 
+    function pthread_attr_setinheritsched
+      (attr         : access pthread_attr_t;
+       inheritsched : int) return int;
+    pragma Import (C, pthread_attr_setinheritsched);
+ 
+    function pthread_attr_setschedpolicy
+      (attr   : access pthread_attr_t;
+       policy : int) return int;
+    pragma Import (C, pthread_attr_setschedpolicy, "pthread_attr_setsched");
+ 
+    function sched_yield return int;
+    pragma Inline (sched_yield);
+    --  FSU_THREADS does not have sched_yield;
+ 
+    ---------------------------
+    -- P1003.1c - Section 16 --
+    ---------------------------
+ 
+    function pthread_attr_init (attributes : access pthread_attr_t) return int;
+    pragma Import (C, pthread_attr_init, "pthread_attr_init");
+ 
+    function pthread_attr_destroy
+      (attributes : access pthread_attr_t) return int;
+    pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
+ 
+    function pthread_attr_setdetachstate
+      (attr        : access pthread_attr_t;
+       detachstate : int) return int;
+    pragma Inline (pthread_attr_setdetachstate);
+    --  FSU_THREADS has a nonstandard pthread_attr_setdetachstate
+ 
+    function pthread_attr_setstacksize
+      (attr      : access pthread_attr_t;
+       stacksize : size_t) return int;
+    pragma Import (C, pthread_attr_setstacksize, "pthread_attr_setstacksize");
+ 
+    function pthread_create
+      (thread        : access pthread_t;
+       attributes    : access pthread_attr_t;
+       start_routine : Thread_Body;
+       arg           : System.Address) return int;
+    pragma Import (C, pthread_create, "pthread_create");
+ 
+    procedure pthread_exit (status : System.Address);
+    pragma Import (C, pthread_exit, "pthread_exit");
+ 
+    function pthread_self return pthread_t;
+    pragma Import (C, pthread_self, "pthread_self");
+ 
+    --------------------------
+    -- POSIX.1c  Section 17 --
+    --------------------------
+ 
+    function pthread_setspecific
+      (key   : pthread_key_t;
+       value : System.Address) return int;
+    pragma Import (C, pthread_setspecific, "pthread_setspecific");
+ 
+    function pthread_getspecific (key : pthread_key_t) return System.Address;
+    pragma Inline (pthread_getspecific);
+    --  FSU_THREADS has a nonstandard pthread_getspecific
+ 
+    type destructor_pointer is access procedure (arg : System.Address);
+ 
+    function pthread_key_create
+      (key        : access pthread_key_t;
+       destructor : destructor_pointer) return int;
+    pragma Import (C, pthread_key_create, "pthread_key_create");
+ 
+ private
+ 
+    type sigset_t is array (0 .. 31) of unsigned_long;
+    pragma Convention (C, sigset_t);
+    --  This is for GNU libc version 2 but should be backward compatible with
+    --  other libc where sigset_t is smaller.
+ 
+    type pid_t is new int;
+ 
+    type time_t is new long;
+ 
+    type timespec is record
+       tv_sec  : time_t;
+       tv_nsec : long;
+    end record;
+    pragma Convention (C, timespec);
+ 
+    type clockid_t is new int;
+    CLOCK_REALTIME : constant clockid_t := 0;
+ 
+    type struct_timeval is record
+       tv_sec  : long;
+       tv_usec : long;
+    end record;
+    pragma Convention (C, struct_timeval);
+ 
+    type pthread_attr_t is record
+       flags           : int;
+       stacksize       : int;
+       contentionscope : int;
+       inheritsched    : int;
+       detachstate     : int;
+       sched           : int;
+       prio            : int;
+       starttime       : timespec;
+       deadline        : timespec;
+       period          : timespec;
+    end record;
+    pragma Convention (C_Pass_By_Copy, pthread_attr_t);
+ 
+    type pthread_condattr_t is record
+       flags : int;
+    end record;
+    pragma Convention (C, pthread_condattr_t);
+ 
+    type pthread_mutexattr_t is record
+       flags        : int;
+       prio_ceiling : int;
+       protocol     : int;
+    end record;
+    pragma Convention (C, pthread_mutexattr_t);
+ 
+    type sigjmp_buf is array (Integer range 0 .. 38) of int;
+ 
+    type pthread_t_struct is record
+       context    : sigjmp_buf;
+       pbody      : sigjmp_buf;
+       errno      : int;
+       ret        : int;
+       stack_base : System.Address;
+    end record;
+    pragma Convention (C, pthread_t_struct);
+ 
+    type pthread_t is access all pthread_t_struct;
+ 
+    type queue_t is record
+       head : System.Address;
+       tail : System.Address;
+    end record;
+    pragma Convention (C, queue_t);
+ 
+    type pthread_mutex_t is record
+       queue                 : queue_t;
+       lock                  : plain_char;
+       owner                 : System.Address;
+       flags                 : int;
+       prio_ceiling          : int;
+       protocol              : int;
+       prev_max_ceiling_prio : int;
+    end record;
+    pragma Convention (C, pthread_mutex_t);
+ 
+    type pthread_cond_t is record
+       queue        : queue_t;
+       flags        : int;
+       waiters      : int;
+       mutex        : System.Address;
+    end record;
+    pragma Convention (C, pthread_cond_t);
+ 
+    type pthread_key_t is new int;
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-linux-hppa.ads gcc-4.0.0/gcc/ada/s-osinte-linux-hppa.ads
*** gcc-3.4.3/gcc/ada/s-osinte-linux-hppa.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-linux-hppa.ads	Thu Apr  7 20:03:51 2005
***************
*** 0 ****
--- 1,533 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   S Y S T E M . O S _ I N T E R F A C E                  --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                          (GNU/Linux-HPPA Version)                        --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2005, Free Software Foundation, Inc.      --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a GNU/Linux (GNU/LinuxThreads) version of this package
+ 
+ --  This package encapsulates all direct interfaces to OS services
+ --  that are needed by children of System.
+ 
+ --  PLEASE DO NOT add any with-clauses to this package or remove the pragma
+ --  Preelaborate. This package is designed to be a bottom-level (leaf) package.
+ 
+ with Interfaces.C;
+ with Unchecked_Conversion;
+ 
+ package System.OS_Interface is
+    pragma Preelaborate;
+ 
+    pragma Linker_Options ("-lpthread");
+ 
+    subtype int            is Interfaces.C.int;
+    subtype char           is Interfaces.C.char;
+    subtype short          is Interfaces.C.short;
+    subtype long           is Interfaces.C.long;
+    subtype unsigned       is Interfaces.C.unsigned;
+    subtype unsigned_short is Interfaces.C.unsigned_short;
+    subtype unsigned_long  is Interfaces.C.unsigned_long;
+    subtype unsigned_char  is Interfaces.C.unsigned_char;
+    subtype plain_char     is Interfaces.C.plain_char;
+    subtype size_t         is Interfaces.C.size_t;
+ 
+    -----------
+    -- Errno --
+    -----------
+ 
+    function errno return int;
+    pragma Import (C, errno, "__get_errno");
+ 
+    EAGAIN    : constant := 11;
+    EINTR     : constant := 4;
+    EINVAL    : constant := 22;
+    ENOMEM    : constant := 12;
+    EPERM     : constant := 1;
+    ETIMEDOUT : constant := 238;
+ 
+    -------------
+    -- Signals --
+    -------------
+ 
+    Max_Interrupt : constant := 63;
+    type Signal is new int range 0 .. Max_Interrupt;
+    for Signal'Size use int'Size;
+ 
+    SIGHUP     : constant := 1; --  hangup
+    SIGINT     : constant := 2; --  interrupt (rubout)
+    SIGQUIT    : constant := 3; --  quit (ASCD FS)
+    SIGILL     : constant := 4; --  illegal instruction (not reset)
+    SIGTRAP    : constant := 5; --  trace trap (not reset)
+    SIGIOT     : constant := 6; --  IOT instruction
+    SIGABRT    : constant := 6; --  used by abort, replace SIGIOT in the  future
+    SIGEMT     : constant := 7; --  EMT
+    SIGFPE     : constant := 8; --  floating point exception
+    SIGKILL    : constant := 9; --  kill (cannot be caught or ignored)
+    SIGBUS     : constant := 10; --  bus error
+    SIGSEGV    : constant := 11; --  segmentation violation
+    SIGSYS     : constant := 12; --  bad system call
+    SIGPIPE    : constant := 13; --  write on a pipe with no one to read it
+    SIGALRM    : constant := 14; --  alarm clock
+    SIGTERM    : constant := 15; --  software termination signal from kill
+    SIGUSR1    : constant := 16; --  user defined signal 1
+    SIGUSR2    : constant := 17; --  user defined signal 2
+    SIGCLD     : constant := 18; --  alias for SIGCHLD
+    SIGCHLD    : constant := 18; --  child status change
+    SIGPWR     : constant := 19; --  power-fail restart
+    SIGVTALRM  : constant := 20; --  virtual timer expired
+    SIGPROF    : constant := 21; --  profiling timer expired
+    SIGPOLL    : constant := 22; --  pollable event occurred
+    SIGIO      : constant := 22; --  I/O now possible (4.2 BSD)
+    SIGWINCH   : constant := 23; --  window size change
+    SIGSTOP    : constant := 24; --  stop (cannot be caught or ignored)
+    SIGTSTP    : constant := 25; --  user stop requested from tty
+    SIGCONT    : constant := 26; --  stopped process has been continued
+    SIGTTIN    : constant := 27; --  background tty read attempted
+    SIGTTOU    : constant := 28; --  background tty write attempted
+    SIGURG     : constant := 29; --  urgent condition on IO channel
+    SIGLOST    : constant := 30; --  File lock lost
+    SIGUNUSED  : constant := 31; --  unused signal (GNU/Linux)
+    SIGXCPU    : constant := 33; --  CPU time limit exceeded
+    SIGXFSZ    : constant := 34; --  filesize limit exceeded
+    SIGSTKFLT  : constant := 36; --  coprocessor stack fault (Linux)
+    SIGLTHRRES : constant := 37; --  GNU/LinuxThreads restart signal
+    SIGLTHRCAN : constant := 38; --  GNU/LinuxThreads cancel signal
+    SIGLTHRDBG : constant := 39; --  GNU/LinuxThreads debugger signal
+ 
+    SIGADAABORT : constant := SIGABRT;
+    --  Change this if you want to use another signal for task abort.
+    --  SIGTERM might be a good one.
+ 
+    type Signal_Set is array (Natural range <>) of Signal;
+ 
+    Unmasked    : constant Signal_Set := (
+       SIGTRAP,
+       --  To enable debugging on multithreaded applications, mark SIGTRAP to
+       --  be kept unmasked.
+ 
+       SIGBUS,
+ 
+       SIGTTIN, SIGTTOU, SIGTSTP,
+       --  Keep these three signals unmasked so that background processes
+       --  and IO behaves as normal "C" applications
+ 
+       SIGPROF,
+       --  To avoid confusing the profiler
+ 
+       SIGKILL, SIGSTOP,
+       --  These two signals actually cannot be masked;
+       --  POSIX simply won't allow it.
+ 
+       SIGLTHRRES, SIGLTHRCAN, SIGLTHRDBG);
+       --  These three signals are used by GNU/LinuxThreads starting from
+       --  glibc 2.1 (future 2.2).
+ 
+    Reserved    : constant Signal_Set :=
+    --  I am not sure why the following two signals are reserved.
+    --  I guess they are not supported by this version of GNU/Linux.
+      (SIGVTALRM, SIGUNUSED);
+ 
+    type sigset_t is private;
+ 
+    function sigaddset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigaddset, "sigaddset");
+ 
+    function sigdelset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigdelset, "sigdelset");
+ 
+    function sigfillset (set : access sigset_t) return int;
+    pragma Import (C, sigfillset, "sigfillset");
+ 
+    function sigismember (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigismember, "sigismember");
+ 
+    function sigemptyset (set : access sigset_t) return int;
+    pragma Import (C, sigemptyset, "sigemptyset");
+ 
+    type union_type_3 is new String (1 .. 116);
+    type siginfo_t is record
+       si_signo : int;
+       si_code  : int;
+       si_errno : int;
+       X_data   : union_type_3;
+    end record;
+    pragma Convention (C, siginfo_t);
+ 
+    type struct_sigaction is record
+       sa_handler   : System.Address;
+       sa_flags     : unsigned_long;
+       sa_mask      : sigset_t;
+    end record;
+    pragma Convention (C, struct_sigaction);
+    type struct_sigaction_ptr is access all struct_sigaction;
+ 
+    type Machine_State is record
+       eip : unsigned_long;
+       ebx : unsigned_long;
+       esp : unsigned_long;
+       ebp : unsigned_long;
+       esi : unsigned_long;
+       edi : unsigned_long;
+    end record;
+    type Machine_State_Ptr is access all Machine_State;
+ 
+    SA_SIGINFO  : constant := 16;
+ 
+    SIG_BLOCK   : constant := 0;
+    SIG_UNBLOCK : constant := 1;
+    SIG_SETMASK : constant := 2;
+ 
+    SIG_DFL : constant := 0;
+    SIG_IGN : constant := 1;
+ 
+    function sigaction
+      (sig  : Signal;
+       act  : struct_sigaction_ptr;
+       oact : struct_sigaction_ptr) return int;
+    pragma Import (C, sigaction, "sigaction");
+ 
+    ----------
+    -- Time --
+    ----------
+ 
+    type timespec is private;
+ 
+    function To_Duration (TS : timespec) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timespec (D : Duration) return timespec;
+    pragma Inline (To_Timespec);
+ 
+    type struct_timeval is private;
+ 
+    function To_Duration (TV : struct_timeval) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timeval (D : Duration) return struct_timeval;
+    pragma Inline (To_Timeval);
+ 
+    function gettimeofday
+      (tv : access struct_timeval;
+       tz : System.Address := System.Null_Address) return int;
+    pragma Import (C, gettimeofday, "gettimeofday");
+ 
+    function sysconf (name : int) return long;
+    pragma Import (C, sysconf);
+ 
+    SC_CLK_TCK : constant := 2;
+ 
+    -------------------------
+    -- Priority Scheduling --
+    -------------------------
+ 
+    SCHED_OTHER : constant := 0;
+    SCHED_FIFO  : constant := 1;
+    SCHED_RR    : constant := 2;
+ 
+    -------------
+    -- Process --
+    -------------
+ 
+    type pid_t is private;
+ 
+    function kill (pid : pid_t; sig : Signal) return int;
+    pragma Import (C, kill, "kill");
+ 
+    function getpid return pid_t;
+    pragma Import (C, getpid, "getpid");
+ 
+    -------------
+    -- Threads --
+    -------------
+ 
+    type Thread_Body is access
+      function (arg : System.Address) return System.Address;
+ 
+    function Thread_Body_Access is new
+      Unchecked_Conversion (System.Address, Thread_Body);
+ 
+    type pthread_t is new unsigned_long;
+    subtype Thread_Id        is pthread_t;
+ 
+    function To_pthread_t is new Unchecked_Conversion
+      (unsigned_long, pthread_t);
+ 
+    type pthread_mutex_t     is limited private;
+    type pthread_cond_t      is limited private;
+    type pthread_attr_t      is limited private;
+    type pthread_mutexattr_t is limited private;
+    type pthread_condattr_t  is limited private;
+    type pthread_key_t       is private;
+ 
+    PTHREAD_CREATE_DETACHED : constant := 1;
+ 
+    -----------
+    -- Stack --
+    -----------
+ 
+    function Get_Stack_Base (thread : pthread_t) return Address;
+    pragma Inline (Get_Stack_Base);
+    --  This is a dummy procedure to share some GNULLI files
+ 
+    ---------------------------------------
+    -- Nonstandard Thread Initialization --
+    ---------------------------------------
+ 
+    procedure pthread_init;
+    pragma Inline (pthread_init);
+    --  This is a dummy procedure to share some GNULLI files
+ 
+    -------------------------
+    -- POSIX.1c  Section 3 --
+    -------------------------
+ 
+    function sigwait (set : access sigset_t; sig : access Signal) return int;
+    pragma Import (C, sigwait, "sigwait");
+ 
+    function pthread_kill (thread : pthread_t; sig : Signal) return int;
+    pragma Import (C, pthread_kill, "pthread_kill");
+ 
+    type sigset_t_ptr is access all sigset_t;
+ 
+    function pthread_sigmask
+      (how  : int;
+       set  : sigset_t_ptr;
+       oset : sigset_t_ptr) return int;
+    pragma Import (C, pthread_sigmask, "pthread_sigmask");
+ 
+    --------------------------
+    -- POSIX.1c  Section 11 --
+    --------------------------
+ 
+    function pthread_mutexattr_init
+      (attr : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
+ 
+    function pthread_mutexattr_destroy
+      (attr : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
+ 
+    function pthread_mutex_init
+      (mutex : access pthread_mutex_t;
+       attr  : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
+ 
+    function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
+ 
+    function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_lock, "pthread_mutex_lock");
+ 
+    function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_unlock, "pthread_mutex_unlock");
+ 
+    function pthread_condattr_init
+      (attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
+ 
+    function pthread_condattr_destroy
+      (attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
+ 
+    function pthread_cond_init
+      (cond : access pthread_cond_t;
+       attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_cond_init, "pthread_cond_init");
+ 
+    function pthread_cond_destroy (cond : access pthread_cond_t) return int;
+    pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
+ 
+    function pthread_cond_signal (cond : access pthread_cond_t) return int;
+    pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
+ 
+    function pthread_cond_wait
+      (cond  : access pthread_cond_t;
+       mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_cond_wait, "pthread_cond_wait");
+ 
+    function pthread_cond_timedwait
+      (cond    : access pthread_cond_t;
+       mutex   : access pthread_mutex_t;
+       abstime : access timespec) return int;
+    pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait");
+ 
+    --------------------------
+    -- POSIX.1c  Section 13 --
+    --------------------------
+ 
+    type struct_sched_param is record
+       sched_priority : int;  --  scheduling priority
+    end record;
+    pragma Convention (C, struct_sched_param);
+ 
+    function pthread_setschedparam
+      (thread : pthread_t;
+       policy : int;
+       param  : access struct_sched_param) return int;
+    pragma Import (C, pthread_setschedparam, "pthread_setschedparam");
+ 
+    function pthread_attr_setschedpolicy
+      (attr   : access pthread_attr_t;
+       policy : int) return int;
+    pragma Import
+      (C, pthread_attr_setschedpolicy, "pthread_attr_setschedpolicy");
+ 
+    function sched_yield return int;
+    pragma Import (C, sched_yield, "sched_yield");
+ 
+    ---------------------------
+    -- P1003.1c - Section 16 --
+    ---------------------------
+ 
+    function pthread_attr_init
+      (attributes : access pthread_attr_t) return int;
+    pragma Import (C, pthread_attr_init, "pthread_attr_init");
+ 
+    function pthread_attr_destroy
+      (attributes : access pthread_attr_t) return int;
+    pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
+ 
+    function pthread_attr_setdetachstate
+      (attr        : access pthread_attr_t;
+       detachstate : int) return int;
+    pragma Import
+      (C, pthread_attr_setdetachstate, "pthread_attr_setdetachstate");
+ 
+    function pthread_attr_setstacksize
+      (attr      : access pthread_attr_t;
+       stacksize : size_t) return int;
+    pragma Import (C, pthread_attr_setstacksize, "pthread_attr_setstacksize");
+ 
+    function pthread_create
+      (thread        : access pthread_t;
+       attributes    : access pthread_attr_t;
+       start_routine : Thread_Body;
+       arg           : System.Address) return int;
+    pragma Import (C, pthread_create, "pthread_create");
+ 
+    procedure pthread_exit (status : System.Address);
+    pragma Import (C, pthread_exit, "pthread_exit");
+ 
+    function pthread_self return pthread_t;
+    pragma Import (C, pthread_self, "pthread_self");
+ 
+    --------------------------
+    -- POSIX.1c  Section 17 --
+    --------------------------
+ 
+    function pthread_setspecific
+      (key   : pthread_key_t;
+       value : System.Address) return int;
+    pragma Import (C, pthread_setspecific, "pthread_setspecific");
+ 
+    function pthread_getspecific (key : pthread_key_t) return System.Address;
+    pragma Import (C, pthread_getspecific, "pthread_getspecific");
+ 
+    type destructor_pointer is access procedure (arg : System.Address);
+ 
+    function pthread_key_create
+      (key        : access pthread_key_t;
+       destructor : destructor_pointer) return int;
+    pragma Import (C, pthread_key_create, "pthread_key_create");
+ 
+ private
+ 
+    type sigset_t is array (0 .. 31) of unsigned_long;
+    pragma Convention (C, sigset_t);
+ 
+    type pid_t is new int;
+ 
+    type time_t is new long;
+ 
+    type timespec is record
+       tv_sec  : time_t;
+       tv_nsec : long;
+    end record;
+    pragma Convention (C, timespec);
+ 
+    type struct_timeval is record
+       tv_sec  : time_t;
+       tv_usec : time_t;
+    end record;
+    pragma Convention (C, struct_timeval);
+ 
+    type pthread_attr_t is record
+       detachstate   : int;
+       schedpolicy   : int;
+       schedparam    : struct_sched_param;
+       inheritsched  : int;
+       scope         : int;
+       guardsize     : size_t;
+       stackaddr_set : int;
+       stackaddr     : System.Address;
+       stacksize     : size_t;
+    end record;
+    pragma Convention (C, pthread_attr_t);
+ 
+    type pthread_condattr_t is record
+       dummy : int;
+    end record;
+    pragma Convention (C, pthread_condattr_t);
+ 
+    type pthread_mutexattr_t is record
+       mutexkind : int;
+    end record;
+    pragma Convention (C, pthread_mutexattr_t);
+ 
+    type lock_array is array (1 .. 4) of int;
+    type atomic_lock_t is record
+       lock : lock_array;
+    end record;
+    pragma Convention (C, atomic_lock_t);
+    for atomic_lock_t'Alignment use 8 * 16;
+ 
+    type struct_pthread_fast_lock is record
+       spinlock : atomic_lock_t;
+       status   : long;
+    end record;
+    pragma Convention (C, struct_pthread_fast_lock);
+ 
+    type pthread_mutex_t is record
+       m_reserved : int;
+       m_count    : int;
+       m_owner    : System.Address;
+       m_kind     : int;
+       m_lock     : struct_pthread_fast_lock;
+    end record;
+    pragma Convention (C, pthread_mutex_t);
+ 
+    type pthread_cond_t is array (0 .. 47) of unsigned_char;
+    pragma Convention (C, pthread_cond_t);
+ 
+    type pthread_key_t is new unsigned;
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-linux.ads gcc-4.0.0/gcc/ada/s-osinte-linux.ads
*** gcc-3.4.3/gcc/ada/s-osinte-linux.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-linux.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,524 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   S Y S T E M . O S _ I N T E R F A C E                  --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2004, Free Software Foundation, Inc.      --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a GNU/Linux (GNU/LinuxThreads) version of this package
+ 
+ --  This package encapsulates all direct interfaces to OS services
+ --  that are needed by children of System.
+ 
+ --  PLEASE DO NOT add any with-clauses to this package or remove the pragma
+ --  Preelaborate. This package is designed to be a bottom-level (leaf) package.
+ 
+ with Interfaces.C;
+ with Unchecked_Conversion;
+ 
+ package System.OS_Interface is
+    pragma Preelaborate;
+ 
+    pragma Linker_Options ("-lpthread");
+ 
+    subtype int            is Interfaces.C.int;
+    subtype char           is Interfaces.C.char;
+    subtype short          is Interfaces.C.short;
+    subtype long           is Interfaces.C.long;
+    subtype unsigned       is Interfaces.C.unsigned;
+    subtype unsigned_short is Interfaces.C.unsigned_short;
+    subtype unsigned_long  is Interfaces.C.unsigned_long;
+    subtype unsigned_char  is Interfaces.C.unsigned_char;
+    subtype plain_char     is Interfaces.C.plain_char;
+    subtype size_t         is Interfaces.C.size_t;
+ 
+    -----------
+    -- Errno --
+    -----------
+ 
+    function errno return int;
+    pragma Import (C, errno, "__get_errno");
+ 
+    EAGAIN    : constant := 11;
+    EINTR     : constant := 4;
+    EINVAL    : constant := 22;
+    ENOMEM    : constant := 12;
+    EPERM     : constant := 1;
+    ETIMEDOUT : constant := 110;
+ 
+    -------------
+    -- Signals --
+    -------------
+ 
+    Max_Interrupt : constant := 63;
+    type Signal is new int range 0 .. Max_Interrupt;
+    for Signal'Size use int'Size;
+ 
+    SIGHUP     : constant := 1; --  hangup
+    SIGINT     : constant := 2; --  interrupt (rubout)
+    SIGQUIT    : constant := 3; --  quit (ASCD FS)
+    SIGILL     : constant := 4; --  illegal instruction (not reset)
+    SIGTRAP    : constant := 5; --  trace trap (not reset)
+    SIGIOT     : constant := 6; --  IOT instruction
+    SIGABRT    : constant := 6; --  used by abort, replace SIGIOT in the  future
+    SIGFPE     : constant := 8; --  floating point exception
+    SIGKILL    : constant := 9; --  kill (cannot be caught or ignored)
+    SIGBUS     : constant := 7; --  bus error
+    SIGSEGV    : constant := 11; --  segmentation violation
+    SIGPIPE    : constant := 13; --  write on a pipe with no one to read it
+    SIGALRM    : constant := 14; --  alarm clock
+    SIGTERM    : constant := 15; --  software termination signal from kill
+    SIGUSR1    : constant := 10; --  user defined signal 1
+    SIGUSR2    : constant := 12; --  user defined signal 2
+    SIGCLD     : constant := 17; --  alias for SIGCHLD
+    SIGCHLD    : constant := 17; --  child status change
+    SIGPWR     : constant := 30; --  power-fail restart
+    SIGWINCH   : constant := 28; --  window size change
+    SIGURG     : constant := 23; --  urgent condition on IO channel
+    SIGPOLL    : constant := 29; --  pollable event occurred
+    SIGIO      : constant := 29; --  I/O now possible (4.2 BSD)
+    SIGLOST    : constant := 29; --  File lock lost
+    SIGSTOP    : constant := 19; --  stop (cannot be caught or ignored)
+    SIGTSTP    : constant := 20; --  user stop requested from tty
+    SIGCONT    : constant := 18; --  stopped process has been continued
+    SIGTTIN    : constant := 21; --  background tty read attempted
+    SIGTTOU    : constant := 22; --  background tty write attempted
+    SIGVTALRM  : constant := 26; --  virtual timer expired
+    SIGPROF    : constant := 27; --  profiling timer expired
+    SIGXCPU    : constant := 24; --  CPU time limit exceeded
+    SIGXFSZ    : constant := 25; --  filesize limit exceeded
+    SIGUNUSED  : constant := 31; --  unused signal (GNU/Linux)
+    SIGSTKFLT  : constant := 16; --  coprocessor stack fault (Linux)
+    SIGLTHRRES : constant := 32; --  GNU/LinuxThreads restart signal
+    SIGLTHRCAN : constant := 33; --  GNU/LinuxThreads cancel signal
+    SIGLTHRDBG : constant := 34; --  GNU/LinuxThreads debugger signal
+ 
+    SIGADAABORT : constant := SIGABRT;
+    --  Change this if you want to use another signal for task abort.
+    --  SIGTERM might be a good one.
+ 
+    type Signal_Set is array (Natural range <>) of Signal;
+ 
+    Unmasked    : constant Signal_Set := (
+       SIGTRAP,
+       --  To enable debugging on multithreaded applications, mark SIGTRAP to
+       --  be kept unmasked.
+ 
+       SIGBUS,
+ 
+       SIGTTIN, SIGTTOU, SIGTSTP,
+       --  Keep these three signals unmasked so that background processes
+       --  and IO behaves as normal "C" applications
+ 
+       SIGPROF,
+       --  To avoid confusing the profiler
+ 
+       SIGKILL, SIGSTOP,
+       --  These two signals actually cannot be masked;
+       --  POSIX simply won't allow it.
+ 
+       SIGLTHRRES, SIGLTHRCAN, SIGLTHRDBG);
+       --  These three signals are used by GNU/LinuxThreads starting from
+       --  glibc 2.1 (future 2.2).
+ 
+    Reserved    : constant Signal_Set :=
+    --  I am not sure why the following two signals are reserved.
+    --  I guess they are not supported by this version of GNU/Linux.
+      (SIGVTALRM, SIGUNUSED);
+ 
+    type sigset_t is private;
+ 
+    function sigaddset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigaddset, "sigaddset");
+ 
+    function sigdelset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigdelset, "sigdelset");
+ 
+    function sigfillset (set : access sigset_t) return int;
+    pragma Import (C, sigfillset, "sigfillset");
+ 
+    function sigismember (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigismember, "sigismember");
+ 
+    function sigemptyset (set : access sigset_t) return int;
+    pragma Import (C, sigemptyset, "sigemptyset");
+ 
+    type union_type_3 is new String (1 .. 116);
+    type siginfo_t is record
+       si_signo : int;
+       si_code  : int;
+       si_errno : int;
+       X_data   : union_type_3;
+    end record;
+    pragma Convention (C, siginfo_t);
+ 
+    type struct_sigaction is record
+       sa_handler   : System.Address;
+       sa_mask      : sigset_t;
+       sa_flags     : unsigned_long;
+       sa_restorer  : System.Address;
+    end record;
+    pragma Convention (C, struct_sigaction);
+    type struct_sigaction_ptr is access all struct_sigaction;
+ 
+    type Machine_State is record
+       eip : unsigned_long;
+       ebx : unsigned_long;
+       esp : unsigned_long;
+       ebp : unsigned_long;
+       esi : unsigned_long;
+       edi : unsigned_long;
+    end record;
+    type Machine_State_Ptr is access all Machine_State;
+ 
+    SA_SIGINFO  : constant := 16#04#;
+ 
+    SIG_BLOCK   : constant := 0;
+    SIG_UNBLOCK : constant := 1;
+    SIG_SETMASK : constant := 2;
+ 
+    SIG_DFL : constant := 0;
+    SIG_IGN : constant := 1;
+ 
+    function sigaction
+      (sig  : Signal;
+       act  : struct_sigaction_ptr;
+       oact : struct_sigaction_ptr) return int;
+    pragma Import (C, sigaction, "sigaction");
+ 
+    ----------
+    -- Time --
+    ----------
+ 
+    type timespec is private;
+ 
+    function To_Duration (TS : timespec) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timespec (D : Duration) return timespec;
+    pragma Inline (To_Timespec);
+ 
+    type struct_timeval is private;
+ 
+    function To_Duration (TV : struct_timeval) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timeval (D : Duration) return struct_timeval;
+    pragma Inline (To_Timeval);
+ 
+    function gettimeofday
+      (tv : access struct_timeval;
+       tz : System.Address := System.Null_Address) return int;
+    pragma Import (C, gettimeofday, "gettimeofday");
+ 
+    function sysconf (name : int) return long;
+    pragma Import (C, sysconf);
+ 
+    SC_CLK_TCK : constant := 2;
+ 
+    -------------------------
+    -- Priority Scheduling --
+    -------------------------
+ 
+    SCHED_OTHER : constant := 0;
+    SCHED_FIFO  : constant := 1;
+    SCHED_RR    : constant := 2;
+ 
+    -------------
+    -- Process --
+    -------------
+ 
+    type pid_t is private;
+ 
+    function kill (pid : pid_t; sig : Signal) return int;
+    pragma Import (C, kill, "kill");
+ 
+    function getpid return pid_t;
+    pragma Import (C, getpid, "getpid");
+ 
+    -------------
+    -- Threads --
+    -------------
+ 
+    type Thread_Body is access
+      function (arg : System.Address) return System.Address;
+ 
+    function Thread_Body_Access is new
+      Unchecked_Conversion (System.Address, Thread_Body);
+ 
+    type pthread_t is new unsigned_long;
+    subtype Thread_Id        is pthread_t;
+ 
+    function To_pthread_t is new Unchecked_Conversion
+      (unsigned_long, pthread_t);
+ 
+    type pthread_mutex_t     is limited private;
+    type pthread_cond_t      is limited private;
+    type pthread_attr_t      is limited private;
+    type pthread_mutexattr_t is limited private;
+    type pthread_condattr_t  is limited private;
+    type pthread_key_t       is private;
+ 
+    PTHREAD_CREATE_DETACHED : constant := 1;
+ 
+    -----------
+    -- Stack --
+    -----------
+ 
+    function Get_Stack_Base (thread : pthread_t) return Address;
+    pragma Inline (Get_Stack_Base);
+    --  This is a dummy procedure to share some GNULLI files
+ 
+    ---------------------------------------
+    -- Nonstandard Thread Initialization --
+    ---------------------------------------
+ 
+    procedure pthread_init;
+    pragma Inline (pthread_init);
+    --  This is a dummy procedure to share some GNULLI files
+ 
+    -------------------------
+    -- POSIX.1c  Section 3 --
+    -------------------------
+ 
+    function sigwait (set : access sigset_t; sig : access Signal) return int;
+    pragma Import (C, sigwait, "sigwait");
+ 
+    function pthread_kill (thread : pthread_t; sig : Signal) return int;
+    pragma Import (C, pthread_kill, "pthread_kill");
+ 
+    type sigset_t_ptr is access all sigset_t;
+ 
+    function pthread_sigmask
+      (how  : int;
+       set  : sigset_t_ptr;
+       oset : sigset_t_ptr) return int;
+    pragma Import (C, pthread_sigmask, "pthread_sigmask");
+ 
+    --------------------------
+    -- POSIX.1c  Section 11 --
+    --------------------------
+ 
+    function pthread_mutexattr_init
+      (attr : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
+ 
+    function pthread_mutexattr_destroy
+      (attr : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
+ 
+    function pthread_mutex_init
+      (mutex : access pthread_mutex_t;
+       attr  : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
+ 
+    function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
+ 
+    function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_lock, "pthread_mutex_lock");
+ 
+    function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_unlock, "pthread_mutex_unlock");
+ 
+    function pthread_condattr_init
+      (attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
+ 
+    function pthread_condattr_destroy
+      (attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
+ 
+    function pthread_cond_init
+      (cond : access pthread_cond_t;
+       attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_cond_init, "pthread_cond_init");
+ 
+    function pthread_cond_destroy (cond : access pthread_cond_t) return int;
+    pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
+ 
+    function pthread_cond_signal (cond : access pthread_cond_t) return int;
+    pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
+ 
+    function pthread_cond_wait
+      (cond  : access pthread_cond_t;
+       mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_cond_wait, "pthread_cond_wait");
+ 
+    function pthread_cond_timedwait
+      (cond    : access pthread_cond_t;
+       mutex   : access pthread_mutex_t;
+       abstime : access timespec) return int;
+    pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait");
+ 
+    --------------------------
+    -- POSIX.1c  Section 13 --
+    --------------------------
+ 
+    type struct_sched_param is record
+       sched_priority : int;  --  scheduling priority
+    end record;
+    pragma Convention (C, struct_sched_param);
+ 
+    function pthread_setschedparam
+      (thread : pthread_t;
+       policy : int;
+       param  : access struct_sched_param) return int;
+    pragma Import (C, pthread_setschedparam, "pthread_setschedparam");
+ 
+    function pthread_attr_setschedpolicy
+      (attr   : access pthread_attr_t;
+       policy : int) return int;
+    pragma Import
+      (C, pthread_attr_setschedpolicy, "pthread_attr_setschedpolicy");
+ 
+    function sched_yield return int;
+    pragma Import (C, sched_yield, "sched_yield");
+ 
+    ---------------------------
+    -- P1003.1c - Section 16 --
+    ---------------------------
+ 
+    function pthread_attr_init
+      (attributes : access pthread_attr_t) return int;
+    pragma Import (C, pthread_attr_init, "pthread_attr_init");
+ 
+    function pthread_attr_destroy
+      (attributes : access pthread_attr_t) return int;
+    pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
+ 
+    function pthread_attr_setdetachstate
+      (attr        : access pthread_attr_t;
+       detachstate : int) return int;
+    pragma Import
+      (C, pthread_attr_setdetachstate, "pthread_attr_setdetachstate");
+ 
+    function pthread_attr_setstacksize
+      (attr      : access pthread_attr_t;
+       stacksize : size_t) return int;
+    pragma Import (C, pthread_attr_setstacksize, "pthread_attr_setstacksize");
+ 
+    function pthread_create
+      (thread        : access pthread_t;
+       attributes    : access pthread_attr_t;
+       start_routine : Thread_Body;
+       arg           : System.Address) return int;
+    pragma Import (C, pthread_create, "pthread_create");
+ 
+    procedure pthread_exit (status : System.Address);
+    pragma Import (C, pthread_exit, "pthread_exit");
+ 
+    function pthread_self return pthread_t;
+    pragma Import (C, pthread_self, "pthread_self");
+ 
+    --------------------------
+    -- POSIX.1c  Section 17 --
+    --------------------------
+ 
+    function pthread_setspecific
+      (key   : pthread_key_t;
+       value : System.Address) return int;
+    pragma Import (C, pthread_setspecific, "pthread_setspecific");
+ 
+    function pthread_getspecific (key : pthread_key_t) return System.Address;
+    pragma Import (C, pthread_getspecific, "pthread_getspecific");
+ 
+    type destructor_pointer is access procedure (arg : System.Address);
+ 
+    function pthread_key_create
+      (key        : access pthread_key_t;
+       destructor : destructor_pointer) return int;
+    pragma Import (C, pthread_key_create, "pthread_key_create");
+ 
+ private
+ 
+    type sigset_t is array (0 .. 127) of unsigned_char;
+    pragma Convention (C, sigset_t);
+ 
+    type pid_t is new int;
+ 
+    type time_t is new long;
+ 
+    type timespec is record
+       tv_sec  : time_t;
+       tv_nsec : long;
+    end record;
+    pragma Convention (C, timespec);
+ 
+    type struct_timeval is record
+       tv_sec  : time_t;
+       tv_usec : time_t;
+    end record;
+    pragma Convention (C, struct_timeval);
+ 
+    type pthread_attr_t is record
+       detachstate   : int;
+       schedpolicy   : int;
+       schedparam    : struct_sched_param;
+       inheritsched  : int;
+       scope         : int;
+       guardsize     : size_t;
+       stackaddr_set : int;
+       stackaddr     : System.Address;
+       stacksize     : size_t;
+    end record;
+    pragma Convention (C, pthread_attr_t);
+ 
+    type pthread_condattr_t is record
+       dummy : int;
+    end record;
+    pragma Convention (C, pthread_condattr_t);
+ 
+    type pthread_mutexattr_t is record
+       mutexkind : int;
+    end record;
+    pragma Convention (C, pthread_mutexattr_t);
+ 
+    type struct_pthread_fast_lock is record
+       status   : long;
+       spinlock : int;
+    end record;
+    pragma Convention (C, struct_pthread_fast_lock);
+ 
+    type pthread_mutex_t is record
+       m_reserved : int;
+       m_count    : int;
+       m_owner    : System.Address;
+       m_kind     : int;
+       m_lock     : struct_pthread_fast_lock;
+    end record;
+    pragma Convention (C, pthread_mutex_t);
+ 
+    type pthread_cond_t is array (0 .. 47) of unsigned_char;
+    pragma Convention (C, pthread_cond_t);
+ 
+    type pthread_key_t is new unsigned;
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-lynxos-3.adb gcc-4.0.0/gcc/ada/s-osinte-lynxos-3.adb
*** gcc-3.4.3/gcc/ada/s-osinte-lynxos-3.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-lynxos-3.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,597 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   S Y S T E M . O S _ I N T E R F A C E                  --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --           Copyright (C) 1999-2003 Free Software Foundation, Inc.         --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a LynxOS (Native) version of this package
+ 
+ pragma Polling (Off);
+ --  Turn off polling, we do not want ATC polling to take place during
+ --  tasking operations. It causes infinite loops and other problems.
+ 
+ with Interfaces.C;
+ 
+ package body System.OS_Interface is
+ 
+    use Interfaces.C;
+ 
+    -------------------
+    -- clock_gettime --
+    -------------------
+ 
+    function clock_gettime
+      (clock_id : clockid_t;
+       tp       : access timespec)
+       return     int
+    is
+       function clock_gettime_base
+         (clock_id : clockid_t;
+          tp       : access timespec)
+          return     int;
+       pragma Import (C, clock_gettime_base, "clock_gettime");
+ 
+    begin
+       if clock_gettime_base (clock_id, tp) /= 0 then
+          return errno;
+       end if;
+ 
+       return 0;
+    end clock_gettime;
+ 
+    -----------------
+    -- To_Duration --
+    -----------------
+ 
+    function To_Duration (TS : timespec) return Duration is
+    begin
+       return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9;
+    end To_Duration;
+ 
+    function To_Duration (TV : struct_timeval) return Duration is
+    begin
+       return Duration (TV.tv_sec) + Duration (TV.tv_usec) / 10#1#E6;
+    end To_Duration;
+ 
+    -----------------
+    -- To_Timespec --
+    -----------------
+ 
+    function To_Timespec (D : Duration) return timespec is
+       S : time_t;
+       F : Duration;
+ 
+    begin
+       S := time_t (Long_Long_Integer (D));
+       F := D - Duration (S);
+ 
+       --  If F has negative value due to a round-up, adjust for positive F
+       --  value.
+ 
+       if F < 0.0 then
+          S := S - 1;
+          F := F + 1.0;
+       end if;
+ 
+       return timespec'(tv_sec => S,
+         tv_nsec => long (Long_Long_Integer (F * 10#1#E9)));
+    end To_Timespec;
+ 
+    ----------------
+    -- To_Timeval --
+    ----------------
+ 
+    function To_Timeval (D : Duration) return struct_timeval is
+       S : time_t;
+       F : Duration;
+ 
+    begin
+       S := time_t (Long_Long_Integer (D));
+       F := D - Duration (S);
+ 
+       --  If F has negative value due to a round-up, adjust for positive F
+       --  value.
+ 
+       if F < 0.0 then
+          S := S - 1;
+          F := F + 1.0;
+       end if;
+ 
+       return struct_timeval'(tv_sec => S,
+         tv_usec => time_t (Long_Long_Integer (F * 10#1#E6)));
+    end To_Timeval;
+ 
+    -------------------------
+    -- POSIX.1c  Section 3 --
+    -------------------------
+ 
+    function sigwait
+      (set :  access sigset_t;
+       sig :  access Signal)
+       return int
+    is
+       function sigwait_base
+         (set   : access sigset_t;
+          value : System.Address)
+          return  Signal;
+       pragma Import (C, sigwait_base, "sigwait");
+ 
+    begin
+       sig.all := sigwait_base (set, Null_Address);
+ 
+       if sig.all = -1 then
+          return errno;
+       end if;
+ 
+       return 0;
+    end sigwait;
+ 
+    --------------------------
+    -- POSIX.1c  Section 11 --
+    --------------------------
+ 
+    --  For all the following functions, LynxOS threads has the POSIX Draft 4
+    --  begavior; it sets errno but the standard Posix requires it to be
+    --  returned.
+ 
+    function pthread_mutexattr_init
+      (attr : access pthread_mutexattr_t)
+       return int
+    is
+       function pthread_mutexattr_create
+         (attr : access pthread_mutexattr_t)
+          return int;
+       pragma Import (C, pthread_mutexattr_create, "pthread_mutexattr_create");
+ 
+    begin
+       if pthread_mutexattr_create (attr) /= 0 then
+          return errno;
+       end if;
+ 
+       return 0;
+    end pthread_mutexattr_init;
+ 
+    function pthread_mutexattr_destroy
+      (attr : access pthread_mutexattr_t)
+       return int
+    is
+       function pthread_mutexattr_delete
+         (attr : access pthread_mutexattr_t)
+          return int;
+       pragma Import (C, pthread_mutexattr_delete, "pthread_mutexattr_delete");
+ 
+    begin
+       if pthread_mutexattr_delete (attr) /= 0 then
+          return errno;
+       end if;
+ 
+       return 0;
+    end pthread_mutexattr_destroy;
+ 
+    function pthread_mutex_init
+      (mutex : access pthread_mutex_t;
+       attr  : access pthread_mutexattr_t)
+       return  int
+    is
+       function pthread_mutex_init_base
+         (mutex : access pthread_mutex_t;
+          attr  : pthread_mutexattr_t)
+          return  int;
+       pragma Import (C, pthread_mutex_init_base, "pthread_mutex_init");
+ 
+    begin
+       if pthread_mutex_init_base (mutex, attr.all) /= 0 then
+          return errno;
+       end if;
+ 
+       return 0;
+    end pthread_mutex_init;
+ 
+    function pthread_mutex_destroy
+      (mutex : access pthread_mutex_t)
+       return  int
+    is
+       function pthread_mutex_destroy_base
+         (mutex : access pthread_mutex_t)
+          return  int;
+       pragma Import (C, pthread_mutex_destroy_base, "pthread_mutex_destroy");
+ 
+    begin
+       if pthread_mutex_destroy_base (mutex) /= 0 then
+          return errno;
+       end if;
+ 
+       return 0;
+    end pthread_mutex_destroy;
+ 
+    function pthread_mutex_lock
+      (mutex : access pthread_mutex_t)
+       return  int
+    is
+       function pthread_mutex_lock_base
+         (mutex : access pthread_mutex_t)
+          return  int;
+       pragma Import (C, pthread_mutex_lock_base, "pthread_mutex_lock");
+ 
+    begin
+       if pthread_mutex_lock_base (mutex) /= 0 then
+          return errno;
+       end if;
+ 
+       return 0;
+    end pthread_mutex_lock;
+ 
+    function pthread_mutex_unlock
+      (mutex : access pthread_mutex_t)
+       return  int
+    is
+       function pthread_mutex_unlock_base
+         (mutex : access pthread_mutex_t)
+          return  int;
+       pragma Import (C, pthread_mutex_unlock_base, "pthread_mutex_unlock");
+ 
+    begin
+       if pthread_mutex_unlock_base (mutex) /= 0 then
+          return errno;
+       end if;
+ 
+       return 0;
+    end pthread_mutex_unlock;
+ 
+    function pthread_condattr_init
+      (attr : access pthread_condattr_t)
+       return int
+    is
+       function pthread_condattr_create
+         (attr : access pthread_condattr_t)
+          return int;
+       pragma Import (C, pthread_condattr_create, "pthread_condattr_create");
+ 
+    begin
+       if pthread_condattr_create (attr) /= 0 then
+          return errno;
+       end if;
+ 
+       return 0;
+    end pthread_condattr_init;
+ 
+    function pthread_condattr_destroy
+      (attr : access pthread_condattr_t)
+       return int
+    is
+       function pthread_condattr_delete
+         (attr : access pthread_condattr_t)
+          return int;
+       pragma Import (C, pthread_condattr_delete, "pthread_condattr_delete");
+ 
+    begin
+       if pthread_condattr_delete (attr) /= 0 then
+          return errno;
+       end if;
+ 
+       return 0;
+    end pthread_condattr_destroy;
+ 
+    function pthread_cond_init
+      (cond : access pthread_cond_t;
+       attr : access pthread_condattr_t)
+       return int
+    is
+       function pthread_cond_init_base
+         (cond : access pthread_cond_t;
+          attr : pthread_condattr_t)
+          return int;
+       pragma Import (C, pthread_cond_init_base, "pthread_cond_init");
+ 
+    begin
+       if pthread_cond_init_base (cond, attr.all) /= 0 then
+          return errno;
+       end if;
+ 
+       return 0;
+    end pthread_cond_init;
+ 
+    function pthread_cond_destroy
+      (cond : access pthread_cond_t)
+       return int
+    is
+       function pthread_cond_destroy_base
+         (cond : access pthread_cond_t)
+          return int;
+       pragma Import (C, pthread_cond_destroy_base, "pthread_cond_destroy");
+ 
+    begin
+       if pthread_cond_destroy_base (cond) /= 0 then
+          return errno;
+       end if;
+ 
+       return 0;
+    end pthread_cond_destroy;
+ 
+    function pthread_cond_signal
+      (cond : access pthread_cond_t)
+       return int
+    is
+       function pthread_cond_signal_base
+         (cond : access pthread_cond_t)
+          return int;
+       pragma Import (C, pthread_cond_signal_base, "pthread_cond_signal");
+ 
+    begin
+       if pthread_cond_signal_base (cond) /= 0 then
+          return errno;
+       end if;
+ 
+       return 0;
+    end pthread_cond_signal;
+ 
+    function pthread_cond_wait
+      (cond  : access pthread_cond_t;
+       mutex : access pthread_mutex_t)
+       return  int
+    is
+       function pthread_cond_wait_base
+         (cond  : access pthread_cond_t;
+          mutex : access pthread_mutex_t)
+          return  int;
+       pragma Import (C, pthread_cond_wait_base, "pthread_cond_wait");
+ 
+    begin
+       if pthread_cond_wait_base (cond, mutex) /= 0 then
+          return errno;
+       end if;
+ 
+       return 0;
+    end pthread_cond_wait;
+ 
+    function pthread_cond_timedwait
+      (cond    : access pthread_cond_t;
+       mutex   : access pthread_mutex_t;
+       reltime : access timespec) return int
+    is
+       function pthread_cond_timedwait_base
+         (cond    : access pthread_cond_t;
+          mutex   : access pthread_mutex_t;
+          reltime : access timespec) return int;
+       pragma Import (C, pthread_cond_timedwait_base, "pthread_cond_timedwait");
+ 
+    begin
+       if pthread_cond_timedwait_base (cond, mutex, reltime) /= 0 then
+          if errno = EAGAIN then
+             return ETIMEDOUT;
+          end if;
+ 
+          return errno;
+       end if;
+ 
+       return 0;
+    end pthread_cond_timedwait;
+ 
+    --------------------------
+    -- POSIX.1c  Section 13 --
+    --------------------------
+ 
+    function pthread_setschedparam
+      (thread : pthread_t;
+       policy : int;
+       param  : access struct_sched_param)
+       return   int
+    is
+       function pthread_setscheduler
+         (thread : pthread_t;
+          policy : int;
+          prio   : int)
+          return   int;
+       pragma Import (C, pthread_setscheduler, "pthread_setscheduler");
+ 
+    begin
+       if pthread_setscheduler (thread, policy, param.sched_priority) = -1 then
+          return errno;
+       end if;
+ 
+       return 0;
+    end pthread_setschedparam;
+ 
+    function pthread_mutexattr_setprotocol
+      (attr     : access pthread_mutexattr_t;
+       protocol : int)
+       return     int
+    is
+       pragma Unreferenced (attr, protocol);
+    begin
+       return 0;
+    end pthread_mutexattr_setprotocol;
+ 
+    function pthread_mutexattr_setprioceiling
+      (attr        : access pthread_mutexattr_t;
+       prioceiling : int)
+       return        int
+    is
+       pragma Unreferenced (attr, prioceiling);
+    begin
+       return 0;
+    end pthread_mutexattr_setprioceiling;
+ 
+    function pthread_attr_setscope
+      (attr            : access pthread_attr_t;
+       contentionscope : int)
+       return            int
+    is
+       pragma Unreferenced (attr, contentionscope);
+    begin
+       return 0;
+    end pthread_attr_setscope;
+ 
+    function sched_yield return int is
+       procedure pthread_yield;
+       pragma Import (C, pthread_yield, "pthread_yield");
+ 
+    begin
+       pthread_yield;
+       return 0;
+    end sched_yield;
+ 
+    -----------------------------
+    --  P1003.1c - Section 16  --
+    -----------------------------
+ 
+    function pthread_attr_setdetachstate
+      (attr        : access pthread_attr_t;
+       detachstate : int)
+       return        int
+    is
+       pragma Unreferenced (attr, detachstate);
+    begin
+       return 0;
+    end pthread_attr_setdetachstate;
+ 
+    function pthread_create
+      (thread        : access pthread_t;
+       attributes    : access pthread_attr_t;
+       start_routine : Thread_Body;
+       arg           : System.Address)
+       return          int
+    is
+       --  The LynxOS pthread_create doesn't seems to work.
+       --  Workaround : We're using st_new instead.
+       --
+       --   function pthread_create_base
+       --     (thread        : access pthread_t;
+       --      attributes    : pthread_attr_t;
+       --      start_routine : Thread_Body;
+       --      arg           : System.Address)
+       --      return          int;
+       --   pragma Import (C, pthread_create_base, "pthread_create");
+ 
+       St : aliased st_t := attributes.st;
+ 
+       function st_new
+         (start_routine : Thread_Body;
+          arg           : System.Address;
+          attributes    : access st_t;
+          thread        : access pthread_t)
+          return          int;
+       pragma Import (C, st_new, "st_new");
+ 
+    begin
+       --  Following code would be used if above commented function worked
+ 
+       --   if pthread_create_base
+       --        (thread, attributes.all, start_routine, arg) /= 0 then
+ 
+       if st_new (start_routine, arg, St'Access, thread) /= 0 then
+          return errno;
+       end if;
+ 
+       return 0;
+    end pthread_create;
+ 
+    function pthread_detach (thread : pthread_t) return int is
+       aliased_thread : aliased pthread_t := thread;
+ 
+       function pthread_detach_base (thread : access pthread_t) return int;
+       pragma Import (C, pthread_detach_base, "pthread_detach");
+ 
+    begin
+       if pthread_detach_base (aliased_thread'Access) /= 0 then
+          return errno;
+       end if;
+ 
+       return 0;
+    end pthread_detach;
+ 
+    --------------------------
+    -- POSIX.1c  Section 17 --
+    --------------------------
+ 
+    function pthread_setspecific
+      (key   : pthread_key_t;
+       value : System.Address)
+       return  int
+    is
+       function pthread_setspecific_base
+         (key   : pthread_key_t;
+          value : System.Address)
+          return  int;
+       pragma Import (C, pthread_setspecific_base, "pthread_setspecific");
+ 
+    begin
+       if pthread_setspecific_base (key, value) /= 0 then
+          return errno;
+       end if;
+ 
+       return 0;
+    end pthread_setspecific;
+ 
+    function pthread_getspecific (key : pthread_key_t) return System.Address is
+       procedure pthread_getspecific_base
+         (key   : pthread_key_t;
+          value : access System.Address);
+       pragma Import (C, pthread_getspecific_base, "pthread_getspecific");
+ 
+       value : aliased System.Address := System.Null_Address;
+ 
+    begin
+       pthread_getspecific_base (key, value'Unchecked_Access);
+       return value;
+    end pthread_getspecific;
+ 
+    function Get_Stack_Base (thread : pthread_t) return Address is
+       pragma Warnings (Off, thread);
+ 
+    begin
+       return Null_Address;
+    end Get_Stack_Base;
+ 
+    function pthread_key_create
+      (key        : access pthread_key_t;
+       destructor : destructor_pointer)
+       return       int
+    is
+       function pthread_keycreate
+         (key        : access pthread_key_t;
+          destructor : destructor_pointer)
+          return       int;
+       pragma Import (C, pthread_keycreate, "pthread_keycreate");
+ 
+    begin
+       if pthread_keycreate (key, destructor) /= 0 then
+          return errno;
+       end if;
+ 
+       return 0;
+    end pthread_key_create;
+ 
+    procedure pthread_init is
+    begin
+       null;
+    end pthread_init;
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-lynxos-3.ads gcc-4.0.0/gcc/ada/s-osinte-lynxos-3.ads
*** gcc-3.4.3/gcc/ada/s-osinte-lynxos-3.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-lynxos-3.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,564 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   S Y S T E M . O S _ I N T E R F A C E                  --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2004, Free Software Foundation, Inc.      --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a LynxOS (Native) version of this package
+ 
+ --  This package encapsulates all direct interfaces to OS services
+ --  that are needed by children of System.
+ 
+ --  PLEASE DO NOT add any with-clauses to this package or remove the pragma
+ --  Preelaborate. This package is designed to be a bottom-level (leaf) package.
+ 
+ with Interfaces.C;
+ with Unchecked_Conversion;
+ 
+ package System.OS_Interface is
+    pragma Preelaborate;
+ 
+    pragma Linker_Options ("-mthreads");
+ 
+    subtype int            is Interfaces.C.int;
+    subtype char           is Interfaces.C.char;
+    subtype short          is Interfaces.C.short;
+    subtype long           is Interfaces.C.long;
+    subtype unsigned       is Interfaces.C.unsigned;
+    subtype unsigned_short is Interfaces.C.unsigned_short;
+    subtype unsigned_long  is Interfaces.C.unsigned_long;
+    subtype unsigned_char  is Interfaces.C.unsigned_char;
+    subtype plain_char     is Interfaces.C.plain_char;
+    subtype size_t         is Interfaces.C.size_t;
+ 
+    -----------
+    -- Errno --
+    -----------
+ 
+    function errno return int;
+    pragma Import (C, errno, "__get_errno");
+ 
+    EAGAIN    : constant := 11;
+    EINTR     : constant := 4;
+    EINVAL    : constant := 22;
+    ENOMEM    : constant := 12;
+    ETIMEDOUT : constant := 60;
+ 
+    -------------
+    -- Signals --
+    -------------
+ 
+    Max_Interrupt : constant := 63;
+    type Signal is new int range 0 .. Max_Interrupt;
+    for Signal'Size use int'Size;
+ 
+    SIGHUP      : constant := 1; --  hangup
+    SIGINT      : constant := 2; --  interrupt (rubout)
+    SIGQUIT     : constant := 3; --  quit (ASCD FS)
+    SIGILL      : constant := 4; --  illegal instruction (not reset)
+    SIGTRAP     : constant := 5; --  trace trap (not reset)
+    SIGBRK      : constant := 6; --  break
+    SIGIOT      : constant := 6; --  IOT instruction
+    SIGABRT     : constant := 6; --  used by abort, replace SIGIOT in the future
+    SIGCORE     : constant := 7; --  kill with core dump
+    SIGEMT      : constant := 7; --  EMT instruction
+    SIGFPE      : constant := 8; --  floating point exception
+    SIGKILL     : constant := 9; --  kill (cannot be caught or ignored)
+    SIGBUS      : constant := 10; --  bus error
+    SIGSEGV     : constant := 11; --  segmentation violation
+    SIGSYS      : constant := 12; --  bad argument to system call
+    SIGPIPE     : constant := 13; --  write on a pipe with no one to read it
+    SIGALRM     : constant := 14; --  alarm clock
+    SIGTERM     : constant := 15; --  software termination signal from kill
+    SIGURG      : constant := 16; --  urgent condition on IO channel
+    SIGSTOP     : constant := 17; --  stop (cannot be caught or ignored)
+    SIGTSTP     : constant := 18; --  user stop requested from tty
+    SIGCONT     : constant := 19; --  stopped process has been continued
+    SIGCLD      : constant := 20; --  alias for SIGCHLD
+    SIGCHLD     : constant := 20; --  child status change
+    SIGTTIN     : constant := 21; --  background tty read attempted
+    SIGTTOU     : constant := 22; --  background tty write attempted
+    SIGIO       : constant := 23; --  I/O possible (Solaris SIGPOLL alias)
+    SIGPOLL     : constant := 23; --  pollable event occurred
+    SIGXCPU     : constant := 24; --  CPU time limit exceeded
+    SIGXFSZ     : constant := 25; --  filesize limit exceeded
+    SIGVTALRM   : constant := 26; --  virtual timer expired
+    SIGPROF     : constant := 27; --  profiling timer expired
+    SIGWINCH    : constant := 28; --  window size change
+    SIGLOST     : constant := 29; --  SUN 4.1 compatibility
+    SIGUSR1     : constant := 30; --  user defined signal 1
+    SIGUSR2     : constant := 31; --  user defined signal 2
+    SIGPRIO     : constant := 32; --  sent to a process with its priority or
+                                  --  group is changed
+ 
+    SIGADAABORT : constant := SIGABRT;
+    --  Change this if you want to use another signal for task abort.
+    --  SIGTERM might be a good one.
+ 
+    type Signal_Set is array (Natural range <>) of Signal;
+ 
+    Unmasked    : constant Signal_Set :=
+      (SIGTRAP, SIGTTIN, SIGTTOU, SIGTSTP, SIGPROF);
+    Reserved    : constant Signal_Set := (SIGABRT, SIGKILL, SIGSTOP, SIGPRIO);
+ 
+    type sigset_t is private;
+ 
+    function sigaddset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigaddset, "sigaddset");
+ 
+    function sigdelset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigdelset, "sigdelset");
+ 
+    function sigfillset (set : access sigset_t) return int;
+    pragma Import (C, sigfillset, "sigfillset");
+ 
+    function sigismember (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigismember, "sigismember");
+ 
+    function sigemptyset (set : access sigset_t) return int;
+    pragma Import (C, sigemptyset, "sigemptyset");
+ 
+    type struct_sigaction is record
+       sa_handler : System.Address;
+       sa_mask    : sigset_t;
+       sa_flags   : int;
+    end record;
+    pragma Convention (C, struct_sigaction);
+    type struct_sigaction_ptr is access all struct_sigaction;
+ 
+    SA_SIGINFO  : constant := 16#80#;
+ 
+    SIG_BLOCK   : constant := 0;
+    SIG_UNBLOCK : constant := 1;
+    SIG_SETMASK : constant := 2;
+ 
+    SIG_DFL : constant := 0;
+    SIG_IGN : constant := 1;
+ 
+    function sigaction
+      (sig  : Signal;
+       act  : struct_sigaction_ptr;
+       oact : struct_sigaction_ptr) return int;
+    pragma Import (C, sigaction, "sigaction");
+ 
+    ----------
+    -- Time --
+    ----------
+ 
+    Time_Slice_Supported : constant Boolean := True;
+    --  Indicates wether time slicing is supported
+ 
+    type timespec is private;
+ 
+    type clockid_t is private;
+ 
+    CLOCK_REALTIME : constant clockid_t;
+ 
+    function clock_gettime
+      (clock_id : clockid_t;
+       tp       : access timespec) return int;
+    pragma Inline (clock_gettime);
+    --  LynxOS has non standard clock_gettime
+ 
+    function To_Duration (TS : timespec) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timespec (D : Duration) return timespec;
+    pragma Inline (To_Timespec);
+ 
+    type struct_timezone is record
+       tz_minuteswest : int;
+       tz_dsttime     : int;
+    end record;
+    pragma Convention (C, struct_timezone);
+    type struct_timezone_ptr is access all struct_timezone;
+ 
+    type struct_timeval is private;
+    --  This is needed on systems that do not have clock_gettime()
+    --  but do have gettimeofday().
+ 
+    function To_Duration (TV : struct_timeval) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timeval (D : Duration) return struct_timeval;
+    pragma Inline (To_Timeval);
+ 
+    -------------------------
+    -- Priority Scheduling --
+    -------------------------
+ 
+    SCHED_FIFO  : constant := 16#00200000#;
+    SCHED_RR    : constant := 16#00100000#;
+    SCHED_OTHER : constant := 16#00400000#;
+ 
+    -------------
+    -- Process --
+    -------------
+ 
+    type pid_t is private;
+ 
+    function kill (pid : pid_t; sig : Signal) return int;
+    pragma Import (C, kill, "kill");
+ 
+    function getpid return pid_t;
+    pragma Import (C, getpid, "getpid");
+ 
+    ---------
+    -- LWP --
+    ---------
+ 
+    function lwp_self return System.Address;
+    --  lwp_self does not exist on this thread library, revert to pthread_self
+    --  which is the closest approximation (with getpid). This function is
+    --  needed to share 7staprop.adb across POSIX-like targets.
+    pragma Import (C, lwp_self, "pthread_self");
+ 
+    -------------
+    -- Threads --
+    -------------
+ 
+    type Thread_Body is access
+      function (arg : System.Address) return System.Address;
+ 
+    function Thread_Body_Access is new
+      Unchecked_Conversion (System.Address, Thread_Body);
+ 
+    type pthread_t           is private;
+    subtype Thread_Id        is pthread_t;
+ 
+    type pthread_mutex_t     is limited private;
+    type pthread_cond_t      is limited private;
+    type st_t                is limited private;
+    type pthread_attr_t      is limited private;
+    type pthread_mutexattr_t is limited private;
+    type pthread_condattr_t  is limited private;
+    type pthread_key_t       is private;
+ 
+    PTHREAD_CREATE_DETACHED : constant := 0;
+ 
+    -----------
+    -- Stack --
+    -----------
+ 
+    Stack_Base_Available : constant Boolean := False;
+    --  Indicates wether the stack base is available on this target.
+ 
+    function Get_Stack_Base (thread : pthread_t) return Address;
+    pragma Inline (Get_Stack_Base);
+    --  returns the stack base of the specified thread.
+    --  Only call this function when Stack_Base_Available is True.
+ 
+    function Get_Page_Size return size_t;
+    function Get_Page_Size return Address;
+    pragma Import (C, Get_Page_Size, "getpagesize");
+    --  returns the size of a page, or 0 if this is not relevant on this
+    --  target
+ 
+    PROT_NONE  : constant := 0;
+    PROT_READ  : constant := 1;
+    PROT_WRITE : constant := 2;
+    PROT_EXEC  : constant := 4;
+    PROT_USER  : constant := 8;
+    PROT_ALL   : constant := PROT_READ + PROT_WRITE + PROT_EXEC + PROT_USER;
+ 
+    PROT_ON    : constant := PROT_READ;
+    PROT_OFF   : constant := PROT_ALL;
+ 
+    function mprotect (addr : Address; len : size_t; prot : int) return int;
+    pragma Import (C, mprotect);
+ 
+    -------------------------
+    -- POSIX.1c  Section 3 --
+    -------------------------
+ 
+    function sigwait
+      (set : access sigset_t;
+       sig : access Signal) return int;
+    pragma Inline (sigwait);
+    --  LynxOS has non standard sigwait
+ 
+    function pthread_kill (thread : pthread_t; sig : Signal) return int;
+    pragma Import (C, pthread_kill, "pthread_kill");
+ 
+    type sigset_t_ptr is access all sigset_t;
+ 
+    function pthread_sigmask
+      (how  : int;
+       set  : sigset_t_ptr;
+       oset : sigset_t_ptr) return int;
+    pragma Import (C, pthread_sigmask, "sigprocmask");
+ 
+    --------------------------
+    -- POSIX.1c  Section 11 --
+    --------------------------
+ 
+    function pthread_mutexattr_init
+      (attr : access pthread_mutexattr_t) return int;
+    pragma Inline (pthread_mutexattr_init);
+    --  LynxOS has a nonstandard pthread_mutexattr_init
+ 
+    function pthread_mutexattr_destroy
+      (attr : access pthread_mutexattr_t) return int;
+    pragma Inline (pthread_mutexattr_destroy);
+    --  Lynxos has a nonstandard pthread_mutexattr_destroy
+ 
+    function pthread_mutex_init
+      (mutex : access pthread_mutex_t;
+       attr  : access pthread_mutexattr_t) return int;
+    pragma Inline (pthread_mutex_init);
+    --  LynxOS has a nonstandard pthread_mutex_init
+ 
+    function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
+    pragma Inline (pthread_mutex_destroy);
+    --  LynxOS has a nonstandard pthread_mutex_destroy
+ 
+    function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
+    pragma Inline (pthread_mutex_lock);
+    --  LynxOS has a nonstandard pthread_mutex_lock
+ 
+    function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
+    pragma Inline (pthread_mutex_unlock);
+    --  LynxOS has a nonstandard pthread_mutex_unlock
+ 
+    function pthread_condattr_init
+      (attr : access pthread_condattr_t) return int;
+    pragma Inline (pthread_condattr_init);
+    --  LynxOS has a nonstandard pthread_condattr_init
+ 
+    function pthread_condattr_destroy
+      (attr : access pthread_condattr_t) return int;
+    pragma Inline (pthread_condattr_destroy);
+    --  LynxOS has a nonstandard pthread_condattr_destroy
+ 
+    function pthread_cond_init
+      (cond : access pthread_cond_t;
+       attr : access pthread_condattr_t) return int;
+    pragma Inline (pthread_cond_init);
+    --  LynxOS has a non standard pthread_cond_init
+ 
+    function pthread_cond_destroy (cond : access pthread_cond_t) return int;
+    pragma Inline (pthread_cond_destroy);
+    --  LynxOS has a nonstandard pthread_cond_destroy
+ 
+    function pthread_cond_signal (cond : access pthread_cond_t) return int;
+    pragma Inline (pthread_cond_signal);
+    --  LynxOS has a nonstandard pthread_cond_signal
+ 
+    function pthread_cond_wait
+      (cond  : access pthread_cond_t;
+       mutex : access pthread_mutex_t) return int;
+    pragma Inline (pthread_cond_wait);
+    --  LynxOS has a nonstandard pthread_cond_wait
+ 
+    function pthread_cond_timedwait
+      (cond    : access pthread_cond_t;
+       mutex   : access pthread_mutex_t;
+       reltime : access timespec) return int;
+    pragma Inline (pthread_cond_timedwait);
+    --  LynxOS has a nonstandard pthrad_cond_timedwait
+ 
+    Relative_Timed_Wait : constant Boolean := True;
+    --  pthread_cond_timedwait requires a relative delay time
+ 
+    --------------------------
+    -- POSIX.1c  Section 13 --
+    --------------------------
+ 
+    PTHREAD_PRIO_NONE    : constant := 0;
+    PTHREAD_PRIO_INHERIT : constant := 0;
+    PTHREAD_PRIO_PROTECT : constant := 0;
+ 
+    type struct_sched_param is record
+       sched_priority : int;  --  scheduling priority
+    end record;
+ 
+    function pthread_setschedparam
+      (thread : pthread_t;
+       policy : int;
+       param  : access struct_sched_param) return int;
+    pragma Inline (pthread_setschedparam);
+    --  LynxOS doesn't have pthread_setschedparam.
+    --  Instead, use pthread_setscheduler
+ 
+    function pthread_mutexattr_setprotocol
+      (attr     : access pthread_mutexattr_t;
+       protocol : int) return int;
+    pragma Inline (pthread_mutexattr_setprotocol);
+    --  LynxOS doesn't have pthread_mutexattr_setprotocol
+ 
+    function pthread_mutexattr_setprioceiling
+      (attr     : access pthread_mutexattr_t;
+       prioceiling : int) return int;
+    pragma Inline (pthread_mutexattr_setprioceiling);
+    --  LynxOS doesn't have pthread_mutexattr_setprioceiling
+ 
+    function pthread_attr_setscope
+      (attr            : access pthread_attr_t;
+       contentionscope : int) return int;
+    --  LynxOS doesn't have pthread_attr_setscope: all threads have system scope
+    pragma Inline (pthread_attr_setscope);
+ 
+    function pthread_attr_setschedpolicy
+      (attr   : access pthread_attr_t;
+       policy : int) return int;
+    pragma Import (C, pthread_attr_setschedpolicy, "pthread_attr_setsched");
+ 
+    function sched_yield return int;
+    --   pragma Import (C, sched_yield, "sched_yield");
+    pragma Inline (sched_yield);
+ 
+    ---------------------------
+    -- P1003.1c - Section 16 --
+    ---------------------------
+ 
+    function pthread_attr_init (attributes : access pthread_attr_t) return int;
+    pragma Import (C, pthread_attr_init, "pthread_attr_create");
+ 
+    function pthread_attr_destroy
+      (attributes : access pthread_attr_t) return int;
+    pragma Import (C, pthread_attr_destroy, "pthread_attr_delete");
+ 
+    function pthread_attr_setdetachstate
+      (attr        : access pthread_attr_t;
+       detachstate : int) return int;
+    pragma Inline (pthread_attr_setdetachstate);
+    --  LynxOS doesn't have pthread_attr_setdetachstate
+ 
+    function pthread_attr_setstacksize
+      (attr      : access pthread_attr_t;
+       stacksize : size_t) return int;
+    pragma Import (C, pthread_attr_setstacksize, "pthread_attr_setstacksize");
+ 
+    function pthread_create
+      (thread        : access pthread_t;
+       attributes    : access pthread_attr_t;
+       start_routine : Thread_Body;
+       arg           : System.Address) return int;
+    pragma Inline (pthread_create);
+    --  LynxOS has a non standard pthread_create
+ 
+    function pthread_detach (thread : pthread_t) return int;
+    pragma Inline (pthread_detach);
+ 
+    procedure pthread_exit (status : System.Address);
+    pragma Import (C, pthread_exit, "pthread_exit");
+ 
+    function pthread_self return pthread_t;
+    pragma Import (C, pthread_self, "pthread_self");
+ 
+    --------------------------
+    -- POSIX.1c  Section 17 --
+    --------------------------
+ 
+    function pthread_setspecific
+      (key   : pthread_key_t;
+       value : System.Address) return int;
+    pragma Inline (pthread_setspecific);
+    --  LynxOS has a non standard pthread_setspecific
+ 
+    function pthread_getspecific (key : pthread_key_t) return System.Address;
+    pragma Inline (pthread_getspecific);
+    --  LynxOS has a non standard pthread_getspecific
+ 
+    type destructor_pointer is access procedure (arg : System.Address);
+ 
+    function pthread_key_create
+      (key        : access pthread_key_t;
+       destructor : destructor_pointer) return int;
+    pragma Inline (pthread_key_create);
+    --  LynxOS has a non standard pthread_keycreate
+ 
+    procedure pthread_init;
+    --  This is a dummy procedure to share some GNULLI files
+ 
+ private
+ 
+    type sigbit_array is array (1 .. 2) of long;
+    type sigset_t is record
+       sa_sigbits : sigbit_array;
+    end record;
+    pragma Convention (C_Pass_By_Copy, sigset_t);
+ 
+    type pid_t is new long;
+ 
+    type time_t is new long;
+ 
+    type timespec is record
+       tv_sec  : time_t;
+       tv_nsec : long;
+    end record;
+    pragma Convention (C, timespec);
+ 
+    type clockid_t is new unsigned_char;
+    CLOCK_REALTIME : constant clockid_t := 0;
+ 
+    type struct_timeval is record
+       tv_sec  : time_t;
+       tv_usec : time_t;
+    end record;
+    pragma Convention (C, struct_timeval);
+ 
+    type st_t is record
+       stksize      : int;
+       prio         : int;
+       inheritsched : int;
+       state        : int;
+       sched        : int;
+    end record;
+    pragma Convention (C, st_t);
+ 
+    type pthread_attr_t is record
+       st                 : st_t;
+       pthread_attr_scope : int;  --  ignored
+    end record;
+    pragma Convention (C, pthread_attr_t);
+ 
+    type pthread_condattr_t is new int;
+ 
+    type pthread_mutexattr_t is new int;
+ 
+    type tid_t is new short;
+    type pthread_t is new tid_t;
+ 
+    type synch_ptr is access all pthread_mutex_t;
+    type pthread_mutex_t is record
+       w_count   : int;
+       mut_owner : int;
+       id        : unsigned;
+       next      : synch_ptr;
+    end record;
+    pragma Convention (C, pthread_mutex_t);
+ 
+    type pthread_cond_t is new pthread_mutex_t;
+ 
+    type pthread_key_t is new int;
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-lynxos.adb gcc-4.0.0/gcc/ada/s-osinte-lynxos.adb
*** gcc-3.4.3/gcc/ada/s-osinte-lynxos.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-lynxos.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,154 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   S Y S T E M . O S _ I N T E R F A C E                  --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --           Copyright (C) 2001-2002 Ada Core Technologies, Inc.            --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a LynxOS (POSIX Threads) version of this package
+ 
+ pragma Polling (Off);
+ --  Turn off polling, we do not want ATC polling to take place during
+ --  tasking operations. It causes infinite loops and other problems.
+ 
+ with Interfaces.C;
+ 
+ package body System.OS_Interface is
+ 
+    use Interfaces.C;
+ 
+    -----------------
+    -- To_Duration --
+    -----------------
+ 
+    function To_Duration (TS : timespec) return Duration is
+    begin
+       return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9;
+    end To_Duration;
+ 
+    function To_Duration (TV : struct_timeval) return Duration is
+    begin
+       return Duration (TV.tv_sec) + Duration (TV.tv_usec) / 10#1#E6;
+    end To_Duration;
+ 
+    -----------------
+    -- To_Timespec --
+    -----------------
+ 
+    function To_Timespec (D : Duration) return timespec is
+       S : time_t;
+       F : Duration;
+ 
+    begin
+       S := time_t (Long_Long_Integer (D));
+       F := D - Duration (S);
+ 
+       --  If F has negative value due to a round-up, adjust for positive F
+       --  value.
+ 
+       if F < 0.0 then
+          S := S - 1;
+          F := F + 1.0;
+       end if;
+ 
+       return timespec'(tv_sec => S,
+                        tv_nsec => long (Long_Long_Integer (F * 10#1#E9)));
+    end To_Timespec;
+ 
+    ----------------
+    -- To_Timeval --
+    ----------------
+ 
+    function To_Timeval (D : Duration) return struct_timeval is
+       S : time_t;
+       F : Duration;
+ 
+    begin
+       S := time_t (Long_Long_Integer (D));
+       F := D - Duration (S);
+ 
+       --  If F has negative value due to a round-up, adjust for positive F
+       --  value.
+ 
+       if F < 0.0 then
+          S := S - 1;
+          F := F + 1.0;
+       end if;
+ 
+       return
+         struct_timeval'
+           (tv_sec => S,
+            tv_usec => time_t (Long_Long_Integer (F * 10#1#E6)));
+    end To_Timeval;
+ 
+    -------------
+    -- sigwait --
+    -------------
+ 
+    function sigwait
+      (set :  access sigset_t;
+       sig :  access Signal)
+       return int
+    is
+       function sigwaitinfo
+         (set   : access sigset_t;
+          info  : System.Address) return Signal;
+       pragma Import (C, sigwaitinfo, "sigwaitinfo");
+ 
+    begin
+       sig.all := sigwaitinfo (set, Null_Address);
+ 
+       if sig.all = -1 then
+          return errno;
+       end if;
+ 
+       return 0;
+    end sigwait;
+ 
+    --------------------
+    -- Get_Stack_Base --
+    --------------------
+ 
+    function Get_Stack_Base (thread : pthread_t) return Address is
+       pragma Warnings (Off, thread);
+ 
+    begin
+       return Null_Address;
+    end Get_Stack_Base;
+ 
+    ------------------
+    -- pthread_init --
+    ------------------
+ 
+    procedure pthread_init is
+    begin
+       null;
+    end pthread_init;
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-lynxos.ads gcc-4.0.0/gcc/ada/s-osinte-lynxos.ads
*** gcc-3.4.3/gcc/ada/s-osinte-lynxos.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-lynxos.ads	Tue Jul  6 13:57:29 2004
***************
*** 0 ****
--- 1,592 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   S Y S T E M . O S _ I N T E R F A C E                  --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2004, Free Software Foundation, Inc.      --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a LynxOS (POSIX Threads) version of this package
+ 
+ --  This package encapsulates all direct interfaces to OS services
+ --  that are needed by children of System.
+ 
+ --  PLEASE DO NOT add any with-clauses to this package or remove the pragma
+ --  Preelaborate. This package is designed to be a bottom-level (leaf) package.
+ 
+ with Interfaces.C;
+ with Unchecked_Conversion;
+ 
+ package System.OS_Interface is
+    pragma Preelaborate;
+ 
+    pragma Linker_Options ("-mthreads");
+    --  Selects the POSIX 1.c runtime, rather than the non-threading runtime
+    --  or the deprecated legacy threads library. The -mthreads flag is
+    --  defined in patch.LynxOS and matches the definition for Lynx's gcc.
+ 
+    subtype int            is Interfaces.C.int;
+    subtype short          is Interfaces.C.short;
+    subtype long           is Interfaces.C.long;
+    subtype unsigned       is Interfaces.C.unsigned;
+    subtype unsigned_short is Interfaces.C.unsigned_short;
+    subtype unsigned_long  is Interfaces.C.unsigned_long;
+    subtype unsigned_char  is Interfaces.C.unsigned_char;
+    subtype plain_char     is Interfaces.C.plain_char;
+    subtype size_t         is Interfaces.C.size_t;
+ 
+    -----------
+    -- Errno --
+    -----------
+ 
+    function errno return int;
+    pragma Import (C, errno, "__get_errno");
+ 
+    EAGAIN    : constant := 11;
+    EINTR     : constant := 4;
+    EINVAL    : constant := 22;
+    ENOMEM    : constant := 12;
+    ETIMEDOUT : constant := 60;
+ 
+    -------------
+    -- Signals --
+    -------------
+ 
+    Max_Interrupt : constant := 63;
+ 
+    --  Max_Interrupt is the number of OS signals, as defined in:
+    --
+    --   /usr/include/sys/signal.h
+    --
+    --
+    --  The lowest numbered signal is 1, but 0 is a valid argument to some
+    --  library functions, eg. kill(2). However, 0 is not just another
+    --  signal: For instance 'I in Signal' and similar should be used with
+    --  caution.
+ 
+    type Signal is new int range 0 .. Max_Interrupt;
+    for  Signal'Size use int'Size;
+ 
+    SIGHUP        : constant := 1;  --  hangup
+    SIGINT        : constant := 2;  --  interrupt (rubout)
+    SIGQUIT       : constant := 3;  --  quit (ASCD FS)
+    SIGILL        : constant := 4;  --  illegal instruction (not reset)
+    SIGTRAP       : constant := 5;  --  trace trap (not reset)
+    SIGBRK        : constant := 6;  --  break
+    SIGIOT        : constant := 6;  --  IOT instruction
+    SIGABRT       : constant := 6;  --  used by abort, replace SIGIOT in future
+    SIGCORE       : constant := 7;  --  kill with core dump
+    SIGEMT        : constant := 7;  --  EMT instruction
+    SIGFPE        : constant := 8;  --  floating point exception
+    SIGKILL       : constant := 9;  --  kill (cannot be caught or ignored)
+    SIGBUS        : constant := 10; --  bus error
+    SIGSEGV       : constant := 11; --  segmentation violation
+    SIGSYS        : constant := 12; --  bad argument to system call
+    SIGPIPE       : constant := 13; --  write on a pipe with no one to read it
+    SIGALRM       : constant := 14; --  alarm clock
+    SIGTERM       : constant := 15; --  software termination signal from kill
+    SIGURG        : constant := 16; --  urgent condition on IO channel
+    SIGSTOP       : constant := 17; --  stop (cannot be caught or ignored)
+    SIGTSTP       : constant := 18; --  user stop requested from tty
+    SIGCONT       : constant := 19; --  stopped process has been continued
+    SIGCLD        : constant := 20; --  alias for SIGCHLD
+    SIGCHLD       : constant := 20; --  child status change
+    SIGTTIN       : constant := 21; --  background tty read attempted
+    SIGTTOU       : constant := 22; --  background tty write attempted
+    SIGIO         : constant := 23; --  I/O possible (Solaris SIGPOLL alias)
+    SIGPOLL       : constant := 23; --  pollable event occurred
+    SIGTHREADKILL : constant := 24; --  Reserved by LynxOS runtime
+    SIGXCPU       : constant := 24; --  CPU time limit exceeded
+    SIGXFSZ       : constant := 25; --  filesize limit exceeded
+    SIGVTALRM     : constant := 26; --  virtual timer expired
+    SIGPROF       : constant := 27; --  profiling timer expired
+    SIGWINCH      : constant := 28; --  window size change
+    SIGLOST       : constant := 29; --  SUN 4.1 compatibility
+    SIGUSR1       : constant := 30; --  user defined signal 1
+    SIGUSR2       : constant := 31; --  user defined signal 2
+ 
+    SIGPRIO       : constant := 32;
+    --  sent to a process with its priority or group is changed
+ 
+    SIGADAABORT : constant := SIGABRT;
+    --  Change this if you want to use another signal for task abort.
+    --  SIGTERM might be a good one.
+ 
+    type Signal_Set is array (Natural range <>) of Signal;
+ 
+    Unmasked    : constant Signal_Set :=
+      (SIGTRAP, SIGTTIN, SIGTTOU, SIGTSTP, SIGPROF, SIGTHREADKILL);
+    Reserved    : constant Signal_Set := (SIGABRT, SIGKILL, SIGSTOP, SIGPRIO);
+ 
+    type sigset_t is private;
+ 
+    function sigaddset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigaddset, "sigaddset");
+ 
+    function sigdelset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigdelset, "sigdelset");
+ 
+    function sigfillset (set : access sigset_t) return int;
+    pragma Import (C, sigfillset, "sigfillset");
+ 
+    function sigismember (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigismember, "sigismember");
+ 
+    function sigemptyset (set : access sigset_t) return int;
+    pragma Import (C, sigemptyset, "sigemptyset");
+ 
+    type struct_sigaction is record
+       sa_handler   : System.Address;
+       sa_mask      : sigset_t;
+       sa_flags     : int;
+    end record;
+    pragma Convention (C, struct_sigaction);
+    type struct_sigaction_ptr is access all struct_sigaction;
+ 
+    SA_SIGINFO  : constant := 16#80#;
+ 
+    SIG_BLOCK   : constant := 0;
+    SIG_UNBLOCK : constant := 1;
+    SIG_SETMASK : constant := 2;
+ 
+    SIG_DFL : constant := 0;
+    SIG_IGN : constant := 1;
+ 
+    function sigaction
+      (sig  : Signal;
+       act  : struct_sigaction_ptr;
+       oact : struct_sigaction_ptr) return int;
+    pragma Import (C, sigaction, "sigaction");
+ 
+    ----------
+    -- Time --
+    ----------
+ 
+    Time_Slice_Supported : constant Boolean := True;
+    --  Indicates whether time slicing is supported
+ 
+    type timespec is private;
+ 
+    type clockid_t is private;
+ 
+    CLOCK_REALTIME : constant clockid_t;
+ 
+    function clock_gettime
+      (clock_id : clockid_t;
+       tp       : access timespec) return int;
+    pragma Import (C, clock_gettime, "clock_gettime");
+ 
+    function clock_getres
+      (clock_id : clockid_t;
+       res      : access timespec) return int;
+    pragma Import (C, clock_getres, "clock_getres");
+ 
+    function To_Duration (TS : timespec) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timespec (D : Duration) return timespec;
+    pragma Inline (To_Timespec);
+ 
+    type struct_timezone is record
+       tz_minuteswest : int;
+       tz_dsttime     : int;
+    end record;
+    pragma Convention (C, struct_timezone);
+    type struct_timezone_ptr is access all struct_timezone;
+ 
+    type struct_timeval is private;
+    --  This is needed on systems that do not have clock_gettime()
+    --  but do have gettimeofday().
+ 
+    function To_Duration (TV : struct_timeval) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timeval (D : Duration) return struct_timeval;
+    pragma Inline (To_Timeval);
+ 
+    -------------------------
+    -- Priority Scheduling --
+    -------------------------
+ 
+    SCHED_FIFO  : constant := 16#200000#;
+    SCHED_RR    : constant := 16#100000#;
+    SCHED_OTHER : constant := 16#400000#;
+ 
+    -------------
+    -- Process --
+    -------------
+ 
+    type pid_t is private;
+ 
+    function kill (pid : pid_t; sig : Signal) return int;
+    pragma Import (C, kill, "kill");
+ 
+    function getpid return pid_t;
+    pragma Import (C, getpid, "getpid");
+ 
+    ---------
+    -- LWP --
+    ---------
+ 
+    function lwp_self return System.Address;
+    pragma Import (C, lwp_self, "pthread_self");
+ 
+    -------------
+    -- Threads --
+    -------------
+ 
+    type Thread_Body is access
+      function (arg : System.Address) return System.Address;
+ 
+    function Thread_Body_Access is new
+      Unchecked_Conversion (System.Address, Thread_Body);
+ 
+    type pthread_t           is private;
+    subtype Thread_Id        is pthread_t;
+ 
+    type pthread_mutex_t     is limited private;
+    type pthread_cond_t      is limited private;
+    type pthread_attr_t      is limited private;
+    type pthread_mutexattr_t is limited private;
+    type pthread_condattr_t  is limited private;
+    type pthread_key_t       is private;
+ 
+    PTHREAD_CREATE_DETACHED : constant := 1;
+    PTHREAD_CREATE_JOINABLE : constant := 0;
+ 
+    -----------
+    -- Stack --
+    -----------
+ 
+    Stack_Base_Available : constant Boolean := False;
+    --  Indicates whether the stack base is available on this target.
+ 
+    function Get_Stack_Base (thread : pthread_t) return Address;
+    pragma Inline (Get_Stack_Base);
+    --  Returns the stack base of the specified thread.
+    --  Only call this function when Stack_Base_Available is True.
+ 
+    function Get_Page_Size return size_t;
+    function Get_Page_Size return Address;
+    pragma Import (C, Get_Page_Size, "getpagesize");
+    --  Returns the size of a page, or 0 if this is not relevant on this
+    --  target
+ 
+    PROT_NONE  : constant := 1;
+    PROT_READ  : constant := 2;
+    PROT_WRITE : constant := 4;
+    PROT_EXEC  : constant := 8;
+    PROT_ALL   : constant := PROT_READ + PROT_WRITE + PROT_EXEC;
+ 
+    PROT_ON    : constant := PROT_READ;
+    PROT_OFF   : constant := PROT_ALL;
+ 
+    function mprotect (addr : Address; len : size_t; prot : int) return int;
+    pragma Import (C, mprotect);
+ 
+    ---------------------------------------
+    -- Nonstandard Thread Initialization --
+    ---------------------------------------
+ 
+    procedure pthread_init;
+    --  This is a dummy procedure to share some GNULLI files
+ 
+    -------------------------
+    -- POSIX.1c  Section 3 --
+    -------------------------
+ 
+    function sigwait
+      (set : access sigset_t;
+       sig : access Signal) return int;
+    pragma Inline (sigwait);
+    --  LynxOS has non standard sigwait
+ 
+    function pthread_kill
+      (thread : pthread_t;
+       sig    : Signal) return int;
+    pragma Import (C, pthread_kill, "pthread_kill");
+ 
+    type sigset_t_ptr is access all sigset_t;
+ 
+    function pthread_sigmask
+      (how  : int;
+       set  : sigset_t_ptr;
+       oset : sigset_t_ptr) return int;
+    pragma Import (C, pthread_sigmask, "pthread_sigmask");
+    --  The behavior of pthread_sigmask on LynxOS requires
+    --  further investigation.
+ 
+    ----------------------------
+    --  POSIX.1c  Section 11  --
+    ----------------------------
+ 
+    function pthread_mutexattr_init
+      (attr : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
+ 
+    function pthread_mutexattr_destroy
+      (attr : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
+ 
+    function pthread_mutex_init
+      (mutex : access pthread_mutex_t;
+       attr  : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
+ 
+    function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
+ 
+    function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_lock, "pthread_mutex_lock");
+ 
+    function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_unlock, "pthread_mutex_unlock");
+ 
+    function pthread_condattr_init
+      (attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
+ 
+    function pthread_condattr_destroy
+      (attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
+ 
+    function pthread_cond_init
+      (cond : access pthread_cond_t;
+       attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_cond_init, "pthread_cond_init");
+ 
+    function pthread_cond_destroy (cond : access pthread_cond_t) return int;
+    pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
+ 
+    function pthread_cond_signal (cond : access pthread_cond_t) return int;
+    pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
+ 
+    function pthread_cond_wait
+      (cond  : access pthread_cond_t;
+       mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_cond_wait, "pthread_cond_wait");
+ 
+    function pthread_cond_timedwait
+      (cond    : access pthread_cond_t;
+       mutex   : access pthread_mutex_t;
+       abstime : access timespec) return int;
+    pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait");
+ 
+    Relative_Timed_Wait : constant Boolean := False;
+    --  pthread_cond_timedwait requires an absolute delay time
+ 
+    --------------------------
+    -- POSIX.1c  Section 13 --
+    --------------------------
+ 
+    PTHREAD_PRIO_NONE    : constant := 0;
+    PTHREAD_PRIO_INHERIT : constant := 1;
+    PTHREAD_PRIO_PROTECT : constant := 2;
+ 
+    function pthread_mutexattr_setprotocol
+      (attr     : access pthread_mutexattr_t;
+       protocol : int) return int;
+    pragma Import (C, pthread_mutexattr_setprotocol);
+ 
+    function pthread_mutexattr_setprioceiling
+      (attr        : access pthread_mutexattr_t;
+       prioceiling : int) return int;
+    pragma Import (C, pthread_mutexattr_setprioceiling);
+ 
+    type struct_sched_param is record
+       sched_priority : int;
+    end record;
+ 
+    function pthread_setschedparam
+      (thread : pthread_t;
+       policy : int;
+       param  : access struct_sched_param) return int;
+    pragma Import (C, pthread_setschedparam, "pthread_setschedparam");
+ 
+    function pthread_attr_setscope
+      (attr            : access pthread_attr_t;
+       contentionscope : int) return int;
+    pragma Import (C, pthread_attr_setscope, "pthread_attr_setscope");
+ 
+    function pthread_attr_setinheritsched
+      (attr         : access pthread_attr_t;
+       inheritsched : int) return int;
+    pragma Import (C, pthread_attr_setinheritsched);
+ 
+    function pthread_attr_setschedpolicy
+      (attr   : access pthread_attr_t;
+       policy : int) return int;
+    pragma Import (C, pthread_attr_setschedpolicy);
+ 
+    function sched_yield return int;
+    pragma Import (C, sched_yield, "sched_yield");
+ 
+    --------------------------
+    -- P1003.1c  Section 16 --
+    --------------------------
+ 
+    function pthread_attr_init (attributes : access pthread_attr_t) return int;
+    pragma Import (C, pthread_attr_init, "pthread_attr_init");
+ 
+    function pthread_attr_destroy
+      (attributes : access pthread_attr_t) return int;
+    pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
+ 
+    function pthread_attr_setdetachstate
+      (attr        : access pthread_attr_t;
+       detachstate : int) return int;
+    pragma Import (C, pthread_attr_setdetachstate);
+ 
+    function pthread_attr_setstacksize
+      (attr      : access pthread_attr_t;
+       stacksize : size_t) return int;
+    pragma Import (C, pthread_attr_setstacksize);
+ 
+    function pthread_create
+      (thread        : access pthread_t;
+       attributes    : access pthread_attr_t;
+       start_routine : Thread_Body;
+       arg           : System.Address) return int;
+    pragma Import (C, pthread_create, "pthread_create");
+ 
+    procedure pthread_exit (status : System.Address);
+    pragma Import (C, pthread_exit, "pthread_exit");
+ 
+    function pthread_self return pthread_t;
+    pragma Import (C, pthread_self, "pthread_self");
+ 
+    --------------------------
+    -- POSIX.1c  Section 17 --
+    --------------------------
+ 
+    function st_setspecific
+      (key   : pthread_key_t;
+       value : System.Address) return int;
+    pragma Import (C, st_setspecific, "st_setspecific");
+ 
+    function st_getspecific
+      (key    : pthread_key_t;
+       retval : System.Address) return int;
+    pragma Import (C, st_getspecific, "st_getspecific");
+ 
+    type destructor_pointer is access procedure (arg : System.Address);
+ 
+    function st_keycreate
+      (destructor : destructor_pointer;
+       key        : access pthread_key_t) return int;
+    pragma Import (C, st_keycreate, "st_keycreate");
+ 
+ private
+ 
+    type sigset_t is record
+       X1, X2 : long;
+    end record;
+    pragma Convention (C, sigset_t);
+ 
+    type pid_t is new long;
+ 
+    type time_t is new long;
+ 
+    type timespec is record
+       tv_sec  : time_t;
+       tv_nsec : long;
+    end record;
+    pragma Convention (C, timespec);
+ 
+    type clockid_t is new unsigned_char;
+    CLOCK_REALTIME : constant clockid_t := 0;
+ 
+    type struct_timeval is record
+       tv_sec  : time_t;
+       tv_usec : time_t;
+    end record;
+    pragma Convention (C, struct_timeval);
+ 
+    type st_attr_t is record
+       stksize      : int;
+       prio         : int;
+       inheritsched : int;
+       state        : int;
+       sched        : int;
+       detachstate  : int;
+       guardsize    : int;
+    end record;
+    pragma Convention (C, st_attr_t);
+ 
+    type pthread_attr_t is record
+       pthread_attr_magic : unsigned;
+       st                 : st_attr_t;
+       pthread_attr_scope : int;
+    end record;
+    pragma Convention (C, pthread_attr_t);
+ 
+    type pthread_condattr_t is record
+       cv_magic   : unsigned;
+       cv_pshared : unsigned;
+    end record;
+    pragma Convention (C, pthread_condattr_t);
+ 
+    type pthread_mutexattr_t is record
+       m_flags   : unsigned;
+       m_prio_c  : int;
+       m_pshared : int;
+    end record;
+    pragma Convention (C, pthread_mutexattr_t);
+ 
+    type tid_t is new short;
+    type pthread_t is new tid_t;
+ 
+    type block_obj_t is new System.Address;
+    --  typedef struct _block_obj_s {
+    --     struct st_entry *b_head;
+    --  } block_obj_t;
+ 
+    type pthread_mutex_t is record
+       m_flags      : unsigned;
+       m_owner      : tid_t;
+       m_wait       : block_obj_t;
+       m_prio_c     : int;
+       m_oldprio    : int;
+       m_count      : int;
+       m_referenced : int;
+    end record;
+    pragma Convention (C, pthread_mutex_t);
+    type pthread_mutex_t_ptr is access all pthread_mutex_t;
+ 
+    type pthread_cond_t is record
+       cv_magic  : unsigned;
+       cv_wait   : block_obj_t;
+       cv_mutex  : pthread_mutex_t_ptr;
+       cv_refcnt : int;
+    end record;
+    pragma Convention (C, pthread_cond_t);
+ 
+    type pthread_key_t is new int;
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-mingw.ads gcc-4.0.0/gcc/ada/s-osinte-mingw.ads
*** gcc-3.4.3/gcc/ada/s-osinte-mingw.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-mingw.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,451 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   S Y S T E M . O S _ I N T E R F A C E                  --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2004, Free Software Foundation, Inc.      --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a NT (native) version of this package
+ 
+ --  This package encapsulates all direct interfaces to OS services
+ --  that are needed by children of System.
+ 
+ --  PLEASE DO NOT add any with-clauses to this package or remove the pragma
+ --  Preelaborate. This package is designed to be a bottom-level (leaf) package.
+ 
+ with Interfaces.C;
+ with Interfaces.C.Strings;
+ with Unchecked_Conversion;
+ 
+ package System.OS_Interface is
+ pragma Preelaborate;
+ 
+    pragma Linker_Options ("-mthreads");
+ 
+    subtype int  is Interfaces.C.int;
+    subtype long is Interfaces.C.long;
+ 
+    -------------------
+    -- General Types --
+    -------------------
+ 
+    type DWORD is new Interfaces.C.unsigned_long;
+    type WORD  is new Interfaces.C.unsigned_short;
+ 
+    --  The LARGE_INTEGER type is actually a fixed point type
+    --  that only can represent integers. The reason for this is
+    --  easier conversion to Duration or other fixed point types.
+    --  (See Operations.Clock)
+ 
+    type LARGE_INTEGER is delta 1.0 range -2.0**63 .. 2.0**63 - 1.0;
+ 
+    subtype PSZ   is Interfaces.C.Strings.chars_ptr;
+    subtype PCHAR is Interfaces.C.Strings.chars_ptr;
+    subtype PVOID is System.Address;
+ 
+    Null_Void : constant PVOID := System.Null_Address;
+ 
+    type PLONG  is access all Interfaces.C.long;
+    type PDWORD is access all DWORD;
+ 
+    type BOOL is new Boolean;
+    for BOOL'Size use Interfaces.C.unsigned_long'Size;
+ 
+    -------------------------
+    -- Handles for objects --
+    -------------------------
+ 
+    type HANDLE is new Interfaces.C.long;
+    type PHANDLE is access all HANDLE;
+ 
+    subtype Thread_Id is HANDLE;
+ 
+    -----------
+    -- Errno --
+    -----------
+ 
+    NO_ERROR : constant := 0;
+    FUNC_ERR : constant := -1;
+ 
+    -------------
+    -- Signals --
+    -------------
+ 
+    Max_Interrupt : constant := 31;
+    type Signal is new int range 0 .. Max_Interrupt;
+    for Signal'Size use int'Size;
+ 
+    SIGINT     : constant := 2; --  interrupt (Ctrl-C)
+    SIGILL     : constant := 4; --  illegal instruction (not reset)
+    SIGFPE     : constant := 8; --  floating point exception
+    SIGSEGV    : constant := 11; -- segmentation violation
+    SIGTERM    : constant := 15; -- software termination signal from kill
+    SIGBREAK   : constant := 21; -- break (Ctrl-Break)
+    SIGABRT    : constant := 22; -- used by abort, replace SIGIOT in the future
+ 
+    type sigset_t is private;
+ 
+    type isr_address is access procedure (sig : int);
+ 
+    function intr_attach (sig : int; handler : isr_address) return long;
+    pragma Import (C, intr_attach, "signal");
+ 
+    Intr_Attach_Reset : constant Boolean := True;
+    --  True if intr_attach is reset after an interrupt handler is called
+ 
+    procedure kill (sig : Signal);
+    pragma Import (C, kill, "raise");
+ 
+    ---------------------
+    -- Time Management --
+    ---------------------
+ 
+    procedure Sleep (dwMilliseconds : DWORD);
+    pragma Import (Stdcall, Sleep, External_Name => "Sleep");
+ 
+    type SYSTEMTIME is record
+       wYear         : WORD;
+       wMonth        : WORD;
+       wDayOfWeek    : WORD;
+       wDay          : WORD;
+       wHour         : WORD;
+       wMinute       : WORD;
+       wSecond       : WORD;
+       wMilliseconds : WORD;
+    end record;
+ 
+    procedure GetSystemTime (pSystemTime : access SYSTEMTIME);
+    pragma Import (Stdcall, GetSystemTime, "GetSystemTime");
+ 
+    procedure GetSystemTimeAsFileTime (lpFileTime : access Long_Long_Integer);
+    pragma Import (Stdcall, GetSystemTimeAsFileTime, "GetSystemTimeAsFileTime");
+ 
+    function SetSystemTime (pSystemTime : access SYSTEMTIME) return BOOL;
+    pragma Import (Stdcall, SetSystemTime, "SetSystemTime");
+ 
+    function FileTimeToSystemTime
+      (lpFileTime   : access Long_Long_Integer;
+       lpSystemTime : access SYSTEMTIME) return BOOL;
+    pragma Import (Stdcall, FileTimeToSystemTime, "FileTimeToSystemTime");
+ 
+    function SystemTimeToFileTime
+      (lpSystemTime : access SYSTEMTIME;
+       lpFileTime   : access Long_Long_Integer) return BOOL;
+    pragma Import (Stdcall, SystemTimeToFileTime, "SystemTimeToFileTime");
+ 
+    function FileTimeToLocalFileTime
+      (lpFileTime      : access Long_Long_Integer;
+       lpLocalFileTime : access Long_Long_Integer) return BOOL;
+    pragma Import (Stdcall, FileTimeToLocalFileTime, "FileTimeToLocalFileTime");
+ 
+    function LocalFileTimeToFileTime
+      (lpFileTime      : access Long_Long_Integer;
+       lpLocalFileTime : access Long_Long_Integer) return BOOL;
+    pragma Import (Stdcall, LocalFileTimeToFileTime, "LocalFileTimeToFileTime");
+ 
+    function QueryPerformanceCounter
+      (lpPerformanceCount : access LARGE_INTEGER) return BOOL;
+    pragma Import
+      (Stdcall, QueryPerformanceCounter, "QueryPerformanceCounter");
+ 
+    function QueryPerformanceFrequency
+      (lpFrequency : access LARGE_INTEGER) return BOOL;
+    pragma Import
+      (Stdcall, QueryPerformanceFrequency, "QueryPerformanceFrequency");
+ 
+    -------------
+    -- Threads --
+    -------------
+ 
+    type Thread_Body is access
+      function (arg : System.Address) return System.Address;
+ 
+    function Thread_Body_Access is new
+      Unchecked_Conversion (System.Address, Thread_Body);
+ 
+    procedure SwitchToThread;
+    pragma Import (Stdcall, SwitchToThread, "SwitchToThread");
+ 
+    -----------------------
+    -- Critical sections --
+    -----------------------
+ 
+    type CRITICAL_SECTION is private;
+    type PCRITICAL_SECTION is access all CRITICAL_SECTION;
+ 
+    procedure InitializeCriticalSection (pCriticalSection : PCRITICAL_SECTION);
+    pragma Import
+      (Stdcall, InitializeCriticalSection, "InitializeCriticalSection");
+ 
+    procedure EnterCriticalSection (pCriticalSection : PCRITICAL_SECTION);
+    pragma Import (Stdcall, EnterCriticalSection, "EnterCriticalSection");
+ 
+    procedure LeaveCriticalSection (pCriticalSection : PCRITICAL_SECTION);
+    pragma Import (Stdcall, LeaveCriticalSection, "LeaveCriticalSection");
+ 
+    procedure DeleteCriticalSection (pCriticalSection : PCRITICAL_SECTION);
+    pragma Import (Stdcall, DeleteCriticalSection, "DeleteCriticalSection");
+ 
+    -------------------------------------------------------------
+    -- Thread Creation, Activation, Suspension And Termination --
+    -------------------------------------------------------------
+ 
+    type PTHREAD_START_ROUTINE is access function
+      (pThreadParameter : PVOID) return DWORD;
+    pragma Convention (Stdcall, PTHREAD_START_ROUTINE);
+ 
+    function To_PTHREAD_START_ROUTINE is new
+      Unchecked_Conversion (System.Address, PTHREAD_START_ROUTINE);
+ 
+    type SECURITY_ATTRIBUTES is record
+       nLength              : DWORD;
+       pSecurityDescriptor  : PVOID;
+       bInheritHandle       : BOOL;
+    end record;
+ 
+    type PSECURITY_ATTRIBUTES is access all SECURITY_ATTRIBUTES;
+ 
+    function CreateThread
+      (pThreadAttributes    : PSECURITY_ATTRIBUTES;
+       dwStackSize          : DWORD;
+       pStartAddress        : PTHREAD_START_ROUTINE;
+       pParameter           : PVOID;
+       dwCreationFlags      : DWORD;
+       pThreadId            : PDWORD) return HANDLE;
+    pragma Import (Stdcall, CreateThread, "CreateThread");
+ 
+    function BeginThreadEx
+      (pThreadAttributes    : PSECURITY_ATTRIBUTES;
+       dwStackSize          : DWORD;
+       pStartAddress        : PTHREAD_START_ROUTINE;
+       pParameter           : PVOID;
+       dwCreationFlags      : DWORD;
+       pThreadId            : PDWORD) return HANDLE;
+    pragma Import (C, BeginThreadEx, "_beginthreadex");
+ 
+    Debug_Process              : constant := 16#00000001#;
+    Debug_Only_This_Process    : constant := 16#00000002#;
+    Create_Suspended           : constant := 16#00000004#;
+    Detached_Process           : constant := 16#00000008#;
+    Create_New_Console         : constant := 16#00000010#;
+ 
+    Create_New_Process_Group   : constant := 16#00000200#;
+ 
+    Create_No_window           : constant := 16#08000000#;
+ 
+    Profile_User               : constant := 16#10000000#;
+    Profile_Kernel             : constant := 16#20000000#;
+    Profile_Server             : constant := 16#40000000#;
+ 
+    function GetExitCodeThread
+      (hThread   : HANDLE;
+       pExitCode : PDWORD) return BOOL;
+    pragma Import (Stdcall, GetExitCodeThread, "GetExitCodeThread");
+ 
+    function ResumeThread (hThread : HANDLE) return DWORD;
+    pragma Import (Stdcall, ResumeThread, "ResumeThread");
+ 
+    function SuspendThread (hThread : HANDLE) return DWORD;
+    pragma Import (Stdcall, SuspendThread, "SuspendThread");
+ 
+    procedure ExitThread (dwExitCode : DWORD);
+    pragma Import (Stdcall, ExitThread, "ExitThread");
+ 
+    procedure EndThreadEx (dwExitCode : DWORD);
+    pragma Import (C, EndThreadEx, "_endthreadex");
+ 
+    function TerminateThread
+      (hThread    : HANDLE;
+       dwExitCode : DWORD) return BOOL;
+    pragma Import (Stdcall, TerminateThread, "TerminateThread");
+ 
+    function GetCurrentThread return HANDLE;
+    pragma Import (Stdcall, GetCurrentThread, "GetCurrentThread");
+ 
+    function GetCurrentProcess return HANDLE;
+    pragma Import (Stdcall, GetCurrentProcess, "GetCurrentProcess");
+ 
+    function GetCurrentThreadId return DWORD;
+    pragma Import (Stdcall, GetCurrentThreadId, "GetCurrentThreadId");
+ 
+    function TlsAlloc return DWORD;
+    pragma Import (Stdcall, TlsAlloc, "TlsAlloc");
+ 
+    function TlsGetValue (dwTlsIndex : DWORD) return PVOID;
+    pragma Import (Stdcall, TlsGetValue, "TlsGetValue");
+ 
+    function TlsSetValue (dwTlsIndex : DWORD; pTlsValue : PVOID) return BOOL;
+    pragma Import (Stdcall, TlsSetValue, "TlsSetValue");
+ 
+    function TlsFree (dwTlsIndex : DWORD) return BOOL;
+    pragma Import (Stdcall, TlsFree, "TlsFree");
+ 
+    TLS_Nothing : constant := DWORD'Last;
+ 
+    procedure ExitProcess (uExitCode : Interfaces.C.unsigned);
+    pragma Import (Stdcall, ExitProcess, "ExitProcess");
+ 
+    function WaitForSingleObject
+      (hHandle        : HANDLE;
+       dwMilliseconds : DWORD) return DWORD;
+    pragma Import (Stdcall, WaitForSingleObject, "WaitForSingleObject");
+ 
+    function WaitForSingleObjectEx
+      (hHandle        : HANDLE;
+       dwMilliseconds : DWORD;
+       fAlertable     : BOOL) return DWORD;
+    pragma Import (Stdcall, WaitForSingleObjectEx, "WaitForSingleObjectEx");
+ 
+    Wait_Infinite : constant := DWORD'Last;
+    WAIT_TIMEOUT  : constant := 16#0000_0102#;
+    WAIT_FAILED   : constant := 16#FFFF_FFFF#;
+ 
+    ------------------------------------
+    -- Semaphores, Events and Mutexes --
+    ------------------------------------
+ 
+    function CloseHandle (hObject : HANDLE) return BOOL;
+    pragma Import (Stdcall, CloseHandle, "CloseHandle");
+ 
+    function CreateSemaphore
+      (pSemaphoreAttributes : PSECURITY_ATTRIBUTES;
+       lInitialCount        : Interfaces.C.long;
+       lMaximumCount        : Interfaces.C.long;
+       pName                : PSZ) return HANDLE;
+    pragma Import (Stdcall, CreateSemaphore, "CreateSemaphoreA");
+ 
+    function OpenSemaphore
+      (dwDesiredAccess : DWORD;
+       bInheritHandle  : BOOL;
+       pName           : PSZ) return HANDLE;
+    pragma Import (Stdcall, OpenSemaphore, "OpenSemaphoreA");
+ 
+    function ReleaseSemaphore
+      (hSemaphore     : HANDLE;
+       lReleaseCount  : Interfaces.C.long;
+       pPreviousCount : PLONG) return BOOL;
+    pragma Import (Stdcall, ReleaseSemaphore, "ReleaseSemaphore");
+ 
+    function CreateEvent
+      (pEventAttributes : PSECURITY_ATTRIBUTES;
+       bManualReset     : BOOL;
+       bInitialState    : BOOL;
+       pName            : PSZ) return HANDLE;
+    pragma Import (Stdcall, CreateEvent, "CreateEventA");
+ 
+    function OpenEvent
+      (dwDesiredAccess : DWORD;
+       bInheritHandle  : BOOL;
+       pName           : PSZ) return HANDLE;
+    pragma Import (Stdcall, OpenEvent, "OpenEventA");
+ 
+    function SetEvent (hEvent : HANDLE) return BOOL;
+    pragma Import (Stdcall, SetEvent, "SetEvent");
+ 
+    function ResetEvent (hEvent : HANDLE) return BOOL;
+    pragma Import (Stdcall, ResetEvent, "ResetEvent");
+ 
+    function PulseEvent (hEvent : HANDLE) return BOOL;
+    pragma Import (Stdcall, PulseEvent, "PulseEvent");
+ 
+    function CreateMutex
+      (pMutexAttributes : PSECURITY_ATTRIBUTES;
+       bInitialOwner    : BOOL;
+       pName            : PSZ) return HANDLE;
+    pragma Import (Stdcall, CreateMutex, "CreateMutexA");
+ 
+    function OpenMutex
+      (dwDesiredAccess : DWORD;
+       bInheritHandle  : BOOL;
+       pName           : PSZ) return HANDLE;
+    pragma Import (Stdcall, OpenMutex, "OpenMutexA");
+ 
+    function ReleaseMutex (hMutex : HANDLE) return BOOL;
+    pragma Import (Stdcall, ReleaseMutex, "ReleaseMutex");
+ 
+    ---------------------------------------------------
+    -- Accessing properties of Threads and Processes --
+    ---------------------------------------------------
+ 
+    -----------------
+    --  Priorities --
+    -----------------
+ 
+    function SetThreadPriority
+      (hThread   : HANDLE;
+       nPriority : Interfaces.C.int) return BOOL;
+    pragma Import (Stdcall, SetThreadPriority, "SetThreadPriority");
+ 
+    function GetThreadPriority (hThread : HANDLE) return Interfaces.C.int;
+    pragma Import (Stdcall, GetThreadPriority, "GetThreadPriority");
+ 
+    function SetPriorityClass
+      (hProcess        : HANDLE;
+       dwPriorityClass : DWORD) return BOOL;
+    pragma Import (Stdcall, SetPriorityClass, "SetPriorityClass");
+ 
+    procedure SetThreadPriorityBoost
+      (hThread              : HANDLE;
+       DisablePriorityBoost : BOOL);
+    pragma Import (Stdcall, SetThreadPriorityBoost, "SetThreadPriorityBoost");
+ 
+    Normal_Priority_Class   : constant := 16#00000020#;
+    Idle_Priority_Class     : constant := 16#00000040#;
+    High_Priority_Class     : constant := 16#00000080#;
+    Realtime_Priority_Class : constant := 16#00000100#;
+ 
+    Thread_Priority_Idle          : constant := -15;
+    Thread_Priority_Lowest        : constant := -2;
+    Thread_Priority_Below_Normal  : constant := -1;
+    Thread_Priority_Normal        : constant := 0;
+    Thread_Priority_Above_Normal  : constant := 1;
+    Thread_Priority_Highest       : constant := 2;
+    Thread_Priority_Time_Critical : constant := 15;
+    Thread_Priority_Error_Return  : constant := Interfaces.C.long'Last;
+ 
+    function GetLastError return DWORD;
+    pragma Import (Stdcall, GetLastError, "GetLastError");
+ 
+ private
+ 
+    type sigset_t is new Interfaces.C.unsigned_long;
+ 
+    type CRITICAL_SECTION is record
+       DebugInfo      : System.Address;
+       --  The following three fields control entering and
+       --  exiting the critical section for the resource
+       LockCount      : Long_Integer;
+       RecursionCount : Long_Integer;
+       OwningThread   : HANDLE;
+       LockSemaphore  : HANDLE;
+       Reserved       : DWORD;
+    end record;
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-os2.adb gcc-4.0.0/gcc/ada/s-osinte-os2.adb
*** gcc-3.4.3/gcc/ada/s-osinte-os2.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-os2.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,120 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
+ --                                                                          --
+ --                   S Y S T E M . O S _ I N T E R F A C E                  --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2003, Ada Core Technologies               --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the OS/2 version of this package
+ 
+ pragma Polling (Off);
+ --  Turn off polling, we do not want ATC polling to take place during
+ --  tasking operations. It causes infinite loops and other problems.
+ 
+ with Interfaces.OS2Lib.Errors;
+ with Interfaces.OS2Lib.Synchronization;
+ 
+ package body System.OS_Interface is
+ 
+    use Interfaces;
+    use Interfaces.OS2Lib;
+    use Interfaces.OS2Lib.Synchronization;
+    use Interfaces.OS2Lib.Errors;
+ 
+    -----------
+    -- Yield --
+    -----------
+ 
+    --  Give up the remainder of the time-slice and yield the processor
+    --  to other threads of equal priority. Yield will return immediately
+    --  without giving up the current time-slice when the only threads
+    --  that are ready have a lower priority.
+ 
+    --  ???  Just giving up the current time-slice seems not to be enough
+    --  to get the thread to the end of the ready queue if OS/2 does use
+    --  a queue at all. As a partial work-around, we give up two time-slices.
+ 
+    --  This is the best we can do now, and at least is sufficient for passing
+    --  the ACVC 2.0.1 Annex D tests.
+ 
+    procedure Yield is
+    begin
+       Delay_For (0);
+       Delay_For (0);
+    end Yield;
+ 
+    ---------------
+    -- Delay_For --
+    ---------------
+ 
+    procedure Delay_For (Period : in Duration_In_Millisec) is
+       Result : APIRET;
+ 
+    begin
+       pragma Assert (Period >= 0, "GNULLI---Delay_For: negative argument");
+ 
+       --  ??? DosSleep is not the appropriate function for a delay in real
+       --  time. It only gives up some number of scheduled time-slices.
+       --  Use a timer instead or block for some semaphore with a time-out.
+       Result := DosSleep (ULONG (Period));
+ 
+       if Result = ERROR_TS_WAKEUP then
+ 
+          --  Do appropriate processing for interrupted sleep
+          --  Can we raise an exception here?
+ 
+          null;
+       end if;
+ 
+       pragma Assert (Result = NO_ERROR, "GNULLI---Error in Delay_For");
+    end Delay_For;
+ 
+    -----------
+    -- Clock --
+    -----------
+ 
+    function Clock return Duration is
+ 
+       --  Implement conversion from tick count to Duration
+       --  using fixed point arithmetic. The frequency of
+       --  the Intel 8254 timer chip is 18.2 * 2**16 Hz.
+ 
+       Tick_Duration : constant := 1.0 / (18.2 * 2**16);
+       Tick_Count    : aliased QWORD;
+ 
+    begin
+       --  Read nr of clock ticks since boot time
+ 
+       Must_Not_Fail (DosTmrQueryTime (Tick_Count'Access));
+ 
+       return Tick_Count * Tick_Duration;
+    end Clock;
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-os2.ads gcc-4.0.0/gcc/ada/s-osinte-os2.ads
*** gcc-3.4.3/gcc/ada/s-osinte-os2.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-os2.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,125 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
+ --                                                                          --
+ --                   S Y S T E M . O S _ I N T E R F A C E                  --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2004, Free Software Foundation, Inc.      --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the OS/2 version of this package
+ 
+ --  This package encapsulates all direct interfaces to OS services
+ --  that are needed by children of System.
+ 
+ --  PLEASE DO NOT add any with-clauses to this package or remove the pragma
+ --  Preelaborate. This package is designed to be a bottom-level (leaf) package.
+ 
+ with Interfaces.C;
+ 
+ package System.OS_Interface is
+    pragma Preelaborate;
+ 
+    package C renames Interfaces.C;
+ 
+    subtype int            is C.int;
+    subtype unsigned_long  is C.unsigned_long;
+ 
+    type Duration_In_Millisec is new C.long;
+    --  New type to prevent confusing time functions in this package
+    --  with time functions returning seconds or other units.
+ 
+    type Thread_Id is new unsigned_long;
+ 
+    -----------
+    -- Errno --
+    -----------
+ 
+    function errno return int;
+    pragma Import (C, errno, "__get_errno");
+ 
+    EAGAIN   : constant := 5;
+    EINTR    : constant := 13;
+    EINVAL   : constant := 14;
+    ENOMEM   : constant := 25;
+ 
+    -------------
+    -- Signals --
+    -------------
+ 
+    Max_Interrupt : constant := 15;
+    type Signal is new int range 0 .. Max_Interrupt;
+ 
+    --  Signals for OS/2, only SIGTERM used currently. The values are
+    --  fake, since OS/2 uses 32 bit exception numbers that cannot be
+    --  used to index arrays etc. The GNULLI maps these Unix-like signals
+    --  to OS/2 exception numbers.
+ 
+    --  SIGTERM is used for the abort interrupt.
+ 
+    SIGHUP     : constant := 1;  --  hangup
+    SIGINT     : constant := 2;  --  interrupt (rubout)
+    SIGQUIT    : constant := 3;  --  quit (ASCD FS)
+    SIGILL     : constant := 4;  --  illegal instruction (not reset)
+    SIGTRAP    : constant := 5;  --  trace trap (not reset)
+    SIGIOT     : constant := 6;  --  IOT instruction
+    SIGEMT     : constant := 0;  --  EMT instruction
+    SIGFPE     : constant := 8;  --  floating point exception
+    SIGKILL    : constant := 9;  --  kill (cannot be caught or ignored)
+    SIGBUS     : constant := 10; --  bus error
+    SIGSEGV    : constant := 11; --  segmentation violation
+    SIGSYS     : constant := 12; --  bad argument to system call
+    SIGPIPE    : constant := 13; --  write on a pipe with no one to read it
+    SIGALRM    : constant := 14; --  alarm clock
+    SIGTERM    : constant := 15; --  software termination signal from kill
+ 
+    subtype sigset_t is unsigned_long;
+ 
+    ----------
+    -- Time --
+    ----------
+ 
+    function Clock return Duration;
+    pragma Inline (Clock);
+    --  Clock measuring time since the epoch, which is the boot-time.
+    --  The clock resolution is approximately 838 ns.
+ 
+    procedure Delay_For (Period : in Duration_In_Millisec);
+    pragma Inline (Delay_For);
+    --  Changed Sleep to Delay_For, for consistency with System.Time_Operations
+ 
+    ----------------
+    -- Scheduling --
+    ----------------
+ 
+    --  Put the calling task at the end of the ready queue for its priority
+ 
+    procedure Yield;
+    pragma Inline (Yield);
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-posix.adb gcc-4.0.0/gcc/ada/s-osinte-posix.adb
*** gcc-3.4.3/gcc/ada/s-osinte-posix.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-posix.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,132 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   S Y S T E M . O S _ I N T E R F A C E                  --
+ --                                                                          --
+ --                                   B o d y                                --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2003, Ada Core Technologies               --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a GNU/LinuxThreads, Solaris pthread and HP-UX pthread version
+ --  of this package.
+ 
+ pragma Polling (Off);
+ --  Turn off polling, we do not want ATC polling to take place during
+ --  tasking operations. It causes infinite loops and other problems.
+ 
+ --  This package encapsulates all direct interfaces to OS services
+ --  that are needed by children of System.
+ 
+ with Interfaces.C; use Interfaces.C;
+ package body System.OS_Interface is
+ 
+    --------------------
+    -- Get_Stack_Base --
+    --------------------
+ 
+    function Get_Stack_Base (thread : pthread_t) return Address is
+       pragma Warnings (Off, thread);
+ 
+    begin
+       return Null_Address;
+    end Get_Stack_Base;
+ 
+    ------------------
+    -- pthread_init --
+    ------------------
+ 
+    procedure pthread_init is
+    begin
+       null;
+    end pthread_init;
+ 
+    -----------------
+    -- To_Duration --
+    -----------------
+ 
+    function To_Duration (TS : timespec) return Duration is
+    begin
+       return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9;
+    end To_Duration;
+ 
+    function To_Duration (TV : struct_timeval) return Duration is
+    begin
+       return Duration (TV.tv_sec) + Duration (TV.tv_usec) / 10#1#E6;
+    end To_Duration;
+ 
+    -----------------
+    -- To_Timespec --
+    -----------------
+ 
+    function To_Timespec (D : Duration) return timespec is
+       S : time_t;
+       F : Duration;
+ 
+    begin
+       S := time_t (Long_Long_Integer (D));
+       F := D - Duration (S);
+ 
+       --  If F has negative value due to a round-up, adjust for positive F
+       --  value.
+ 
+       if F < 0.0 then
+          S := S - 1;
+          F := F + 1.0;
+       end if;
+ 
+       return timespec'(tv_sec => S,
+                        tv_nsec => long (Long_Long_Integer (F * 10#1#E9)));
+    end To_Timespec;
+ 
+    ----------------
+    -- To_Timeval --
+    ----------------
+ 
+    function To_Timeval (D : Duration) return struct_timeval is
+       S : time_t;
+       F : Duration;
+ 
+    begin
+       S := time_t (Long_Long_Integer (D));
+       F := D - Duration (S);
+ 
+       --  If F has negative value due to a round-up, adjust for positive F
+       --  value.
+ 
+       if F < 0.0 then
+          S := S - 1;
+          F := F + 1.0;
+       end if;
+ 
+       return
+         struct_timeval'
+           (tv_sec  => S,
+            tv_usec => time_t (Long_Long_Integer (F * 10#1#E6)));
+    end To_Timeval;
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-rtems.adb gcc-4.0.0/gcc/ada/s-osinte-rtems.adb
*** gcc-3.4.3/gcc/ada/s-osinte-rtems.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-rtems.adb	Thu Jan 27 11:56:57 2005
***************
*** 0 ****
--- 1,121 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   S Y S T E M . O S _ I N T E R F A C E                  --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --            Copyright (C) 1991-2002 Florida State University              --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University. It is --
+ -- now maintained by Ada Core Technologies Inc. in cooperation with Florida --
+ -- State University (http://www.gnat.com).                                  --
+ --                                                                          --
+ -- The GNARL files that were developed for RTEMS are maintained by  On-Line --
+ -- Applications Research Corporation (http://www.oarcorp.com)  in  coopera- --
+ -- tion with Ada Core Technologies Inc. and Florida State University.       --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the RTEMS version of this package
+ 
+ --  This package encapsulates all direct interfaces to OS services
+ --  that are needed by children of System.
+ 
+ pragma Polling (Off);
+ --  Turn off polling, we do not want ATC polling to take place during
+ --  tasking operations. It causes infinite loops and other problems.
+ 
+ with Interfaces.C; use Interfaces.C;
+ package body System.OS_Interface is
+ 
+    -----------------
+    -- To_Duration --
+    -----------------
+ 
+    function To_Duration (TS : timespec) return Duration is
+    begin
+       return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9;
+    end To_Duration;
+ 
+    -----------------
+    -- To_Timespec --
+    -----------------
+ 
+    function To_Timespec (D : Duration) return timespec is
+       S : time_t;
+       F : Duration;
+    begin
+       S := time_t (Long_Long_Integer (D));
+       F := D - Duration (S);
+ 
+       --  If F has negative value due to round-up, adjust for positive F value
+ 
+       if F < 0.0 then S := S - 1; F := F + 1.0; end if;
+       return timespec'(tv_sec => S,
+                        tv_nsec => long (Long_Long_Integer (F * 10#1#E9)));
+    end To_Timespec;
+ 
+    function To_Duration (TV : struct_timeval) return Duration is
+    begin
+       return Duration (TV.tv_sec) + Duration (TV.tv_usec) / 10#1#E6;
+    end To_Duration;
+ 
+    function To_Timeval (D : Duration) return struct_timeval is
+       S : int;
+       F : Duration;
+    begin
+       S := int (Long_Long_Integer (D));
+       F := D - Duration (S);
+ 
+       --  If F has negative value due to a round-up, adjust for positive F
+       --  value.
+       if F < 0.0 then S := S - 1; F := F + 1.0; end if;
+       return
+         struct_timeval'
+           (tv_sec  => S,
+            tv_usec => int (Long_Long_Integer (F * 10#1#E6)));
+    end To_Timeval;
+ 
+    procedure pthread_init is
+    begin
+       null;
+    end pthread_init;
+ 
+    function Get_Stack_Base (thread : pthread_t) return Address is
+       pragma Warnings (Off, thread);
+ 
+    begin
+       return Null_Address;
+    end Get_Stack_Base;
+ 
+    function Get_Page_Size return size_t is
+    begin
+       return 0;
+    end Get_Page_Size;
+ 
+    function Get_Page_Size return Address is
+    begin
+       return 0;
+    end Get_Page_Size;
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-rtems.ads gcc-4.0.0/gcc/ada/s-osinte-rtems.ads
*** gcc-3.4.3/gcc/ada/s-osinte-rtems.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-rtems.ads	Thu Jan 27 11:56:57 2005
***************
*** 0 ****
--- 1,531 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   S Y S T E M . O S _ I N T E R F A C E                  --
+ --                                                                          --
+ --                                   S p e c                                --
+ --                                                                          --
+ --          Copyright (C) 1997-2003 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ -- The GNARL files that were developed for RTEMS are maintained by  On-Line --
+ -- Applications Research Corporation (http://www.oarcorp.com)  in  coopera- --
+ -- tion with Ada Core Technologies Inc. and Florida State University.       --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the RTEMS version of this package
+ 
+ --  These are guesses based on what I think the GNARL team will want to
+ --  call the rtems configurations.  We use CPU-rtems for the rtems
+ --  configurations.
+ 
+ --  This package encapsulates all direct interfaces to OS services
+ --  that are needed by children of System.
+ 
+ --  PLEASE DO NOT add any with-clauses to this package
+ --  or remove the pragma Elaborate_Body.
+ --  It is designed to be a bottom-level (leaf) package.
+ 
+ with Interfaces.C;
+ package System.OS_Interface is
+    pragma Preelaborate;
+ 
+    --  This interface assumes that "unsigned" is a 32-bit entity.  This
+    --  will correspond to RTEMS object ids.
+ 
+    subtype rtems_id       is Interfaces.C.unsigned;
+ 
+    subtype int            is Interfaces.C.int;
+    subtype short          is Interfaces.C.short;
+    subtype long           is Interfaces.C.long;
+    subtype unsigned       is Interfaces.C.unsigned;
+    subtype unsigned_short is Interfaces.C.unsigned_short;
+    subtype unsigned_long  is Interfaces.C.unsigned_long;
+    subtype unsigned_char  is Interfaces.C.unsigned_char;
+    subtype plain_char     is Interfaces.C.plain_char;
+    subtype size_t         is Interfaces.C.size_t;
+ 
+    -----------
+    -- Errno --
+    -----------
+ 
+    function errno return int;
+    pragma Import (C, errno, "__get_errno");
+ 
+    EAGAIN    : constant := 11;
+    EINTR     : constant := 4;
+    EINVAL    : constant := 22;
+    ENOMEM    : constant := 12;
+    ETIMEDOUT : constant := 116;
+ 
+    -------------
+    -- Signals --
+    -------------
+ 
+    Max_Interrupt : constant := 31;
+    type Signal is new int range 0 .. Max_Interrupt;
+ 
+    SIGXCPU     : constant := 0; --  XCPU
+    SIGHUP      : constant := 1; --  hangup
+    SIGINT      : constant := 2; --  interrupt (rubout)
+    SIGQUIT     : constant := 3; --  quit (ASCD FS)
+    SIGILL      : constant := 4; --  illegal instruction (not reset)
+    SIGTRAP     : constant := 5; --  trace trap (not reset)
+    SIGIOT      : constant := 6; --  IOT instruction
+    SIGABRT     : constant := 6; --  used by abort, replace SIGIOT in the future
+    SIGEMT      : constant := 7; --  EMT instruction
+    SIGFPE      : constant := 8; --  floating point exception
+    SIGKILL     : constant := 9; --  kill (cannot be caught or ignored)
+    SIGBUS      : constant := 10; --  bus error
+    SIGSEGV     : constant := 11; --  segmentation violation
+    SIGSYS      : constant := 12; --  bad argument to system call
+    SIGPIPE     : constant := 13; --  write on a pipe with no one to read it
+    SIGALRM     : constant := 14; --  alarm clock
+    SIGTERM     : constant := 15; --  software termination signal from kill
+    SIGUSR1     : constant := 16; --  user defined signal 1
+    SIGUSR2     : constant := 17; --  user defined signal 2
+ 
+    SIGADAABORT : constant := SIGABRT;
+ 
+    type Signal_Set is array (Natural range <>) of Signal;
+ 
+    Unmasked    : constant Signal_Set := (SIGTRAP, SIGALRM, SIGEMT);
+    Reserved    : constant Signal_Set := (1 .. 1 => SIGKILL);
+ 
+    type sigset_t is private;
+ 
+    function sigaddset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigaddset, "sigaddset");
+ 
+    function sigdelset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigdelset, "sigdelset");
+ 
+    function sigfillset (set : access sigset_t) return int;
+    pragma Import (C, sigfillset, "sigfillset");
+ 
+    function sigismember (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigismember, "sigismember");
+ 
+    function sigemptyset (set : access sigset_t) return int;
+    pragma Import (C, sigemptyset, "sigemptyset");
+ 
+    type struct_sigaction is record
+       sa_flags   : int;
+       sa_mask    : sigset_t;
+       sa_handler : System.Address;
+    end record;
+    pragma Convention (C, struct_sigaction);
+    type struct_sigaction_ptr is access all struct_sigaction;
+ 
+    SA_SIGINFO  : constant := 16#02#;
+ 
+    SIG_BLOCK   : constant := 1;
+    SIG_UNBLOCK : constant := 2;
+    SIG_SETMASK : constant := 3;
+ 
+    SIG_DFL : constant := 0;
+    SIG_IGN : constant := 1;
+ 
+    function sigaction
+      (sig  : Signal;
+       act  : struct_sigaction_ptr;
+       oact : struct_sigaction_ptr) return int;
+    pragma Import (C, sigaction, "sigaction");
+ 
+    ----------
+    -- Time --
+    ----------
+ 
+    Time_Slice_Supported : constant Boolean := True;
+    --  Indicates wether time slicing is supported (i.e SCHED_RR is supported)
+ 
+    type timespec is private;
+ 
+    type clockid_t is private;
+ 
+    CLOCK_REALTIME : constant clockid_t;
+ 
+    function clock_gettime
+      (clock_id : clockid_t;
+       tp       : access timespec) return int;
+    pragma Import (C, clock_gettime, "clock_gettime");
+ 
+    function To_Duration (TS : timespec) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timespec (D : Duration) return timespec;
+    pragma Inline (To_Timespec);
+ 
+    type struct_timeval is private;
+ 
+    function To_Duration (TV : struct_timeval) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timeval (D : Duration) return struct_timeval;
+    pragma Inline (To_Timeval);
+ 
+    -------------------------
+    -- Priority Scheduling --
+    -------------------------
+ 
+    SCHED_FIFO  : constant := 1;
+    SCHED_RR    : constant := 2;
+    SCHED_OTHER : constant := 0;
+ 
+    -------------
+    -- Process --
+    -------------
+ 
+    type pid_t is private;
+ 
+    function kill (pid : pid_t; sig : Signal) return int;
+    pragma Import (C, kill, "kill");
+ 
+    function getpid return pid_t;
+    pragma Import (C, getpid, "getpid");
+ 
+    ---------
+    -- LWP --
+    ---------
+ 
+    function lwp_self return System.Address;
+    --  lwp_self does not exist on this thread library, revert to pthread_self
+    --  which is the closest approximation (with getpid). This function is
+    --  needed to share 7staprop.adb across POSIX-like targets.
+    pragma Import (C, lwp_self, "pthread_self");
+ 
+    -------------
+    -- Threads --
+    -------------
+ 
+    type Thread_Body is access
+      function (arg : System.Address) return System.Address;
+ 
+    type pthread_t           is private;
+    subtype Thread_Id        is pthread_t;
+ 
+    type pthread_mutex_t     is limited private;
+    type pthread_cond_t      is limited private;
+    type pthread_attr_t      is limited private;
+    type pthread_mutexattr_t is limited private;
+    type pthread_condattr_t  is limited private;
+    type pthread_key_t       is private;
+ 
+    No_Key : constant pthread_key_t;
+ 
+    PTHREAD_CREATE_DETACHED : constant := 0;
+ 
+    -----------
+    -- Stack --
+    -----------
+ 
+    Stack_Base_Available : constant Boolean := False;
+    --  Indicates wether the stack base is available on this target.
+    --  This allows us to share s-osinte.adb between all the FSU/RTEMS
+    --  run time.
+    --  Note that this value can only be true if pthread_t has a complete
+    --  definition that corresponds exactly to the C header files.
+ 
+    function Get_Stack_Base (thread : pthread_t) return Address;
+    pragma Inline (Get_Stack_Base);
+    --  returns the stack base of the specified thread.
+    --  Only call this function when Stack_Base_Available is True.
+ 
+    --  These two functions are only needed to share s-taprop.adb with
+    --  FSU threads.
+ 
+    function Get_Page_Size return size_t;
+    function Get_Page_Size return Address;
+    --  returns the size of a page, or 0 if this is not relevant on this
+    --  target (which is the case for RTEMS)
+ 
+    PROT_ON  : constant := 0;
+    PROT_OFF : constant := 0;
+ 
+    function mprotect (addr : Address; len : size_t; prot : int) return int;
+    pragma Import (C, mprotect);
+ 
+    -----------------------------------------
+    --  Nonstandard Thread Initialization  --
+    -----------------------------------------
+ 
+    procedure pthread_init;
+    --  FSU_THREADS requires pthread_init, which is nonstandard
+    --  and this should be invoked during the elaboration of s-taprop.adb
+    --
+    --  RTEMS does not require this so we provide an empty Ada body.
+ 
+    -------------------------
+    -- POSIX.1c  Section 3 --
+    -------------------------
+ 
+    function sigwait
+      (set : access sigset_t;
+       sig : access Signal) return int;
+    pragma Import (C, sigwait, "sigwait");
+ 
+    function pthread_kill
+      (thread : pthread_t;
+       sig    : Signal) return int;
+    pragma Import (C, pthread_kill, "pthread_kill");
+ 
+    type sigset_t_ptr is access all sigset_t;
+ 
+    function pthread_sigmask
+      (how  : int;
+       set  : sigset_t_ptr;
+       oset : sigset_t_ptr) return int;
+    pragma Import (C, pthread_sigmask, "pthread_sigmask");
+ 
+    ----------------------------
+    --  POSIX.1c  Section 11  --
+    ----------------------------
+ 
+    function pthread_mutexattr_init
+      (attr : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
+ 
+    function pthread_mutexattr_destroy
+      (attr : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
+ 
+    function pthread_mutex_init
+      (mutex : access pthread_mutex_t;
+       attr  : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
+ 
+    function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
+ 
+    function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_lock, "pthread_mutex_lock");
+ 
+    function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_unlock, "pthread_mutex_unlock");
+ 
+    function pthread_condattr_init
+      (attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
+ 
+    function pthread_condattr_destroy
+      (attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
+ 
+    function pthread_cond_init
+      (cond : access pthread_cond_t;
+       attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_cond_init, "pthread_cond_init");
+ 
+    function pthread_cond_destroy (cond : access pthread_cond_t) return int;
+    pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
+ 
+    function pthread_cond_signal (cond : access pthread_cond_t) return int;
+    pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
+ 
+    function pthread_cond_wait
+      (cond  : access pthread_cond_t;
+       mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_cond_wait, "pthread_cond_wait");
+ 
+    function pthread_cond_timedwait
+      (cond    : access pthread_cond_t;
+       mutex   : access pthread_mutex_t;
+       abstime : access timespec) return int;
+    pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait");
+ 
+    Relative_Timed_Wait : constant Boolean := False;
+    --  pthread_cond_timedwait requires an absolute delay time
+ 
+    --------------------------
+    -- POSIX.1c  Section 13 --
+    --------------------------
+ 
+    PTHREAD_PRIO_NONE    : constant := 0;
+    PTHREAD_PRIO_PROTECT : constant := 2;
+    PTHREAD_PRIO_INHERIT : constant := 1;
+ 
+    function pthread_mutexattr_setprotocol
+      (attr     : access pthread_mutexattr_t;
+       protocol : int) return int;
+    pragma Import (C, pthread_mutexattr_setprotocol);
+ 
+    function pthread_mutexattr_setprioceiling
+      (attr     : access pthread_mutexattr_t;
+       prioceiling : int) return int;
+    pragma Import
+      (C, pthread_mutexattr_setprioceiling,
+       "pthread_mutexattr_setprioceiling");
+ 
+    type struct_sched_param is record
+       sched_priority      : int;
+       ss_low_priority     : timespec;
+       ss_replenish_period : timespec;
+       ss_initial_budget   : timespec;
+    end record;
+    pragma Convention (C, struct_sched_param);
+ 
+    function pthread_setschedparam
+      (thread : pthread_t;
+       policy : int;
+       param  : access struct_sched_param) return int;
+    pragma Import (C, pthread_setschedparam, "pthread_setschedparam");
+ 
+    function pthread_attr_setscope
+      (attr            : access pthread_attr_t;
+       contentionscope : int) return int;
+    pragma Import (C, pthread_attr_setscope, "pthread_attr_setscope");
+ 
+    function pthread_attr_setinheritsched
+      (attr         : access pthread_attr_t;
+       inheritsched : int) return int;
+    pragma Import (C, pthread_attr_setinheritsched);
+ 
+    function pthread_attr_setschedpolicy
+      (attr   : access pthread_attr_t;
+       policy : int) return int;
+    pragma Import (C, pthread_attr_setschedpolicy);
+ 
+    function pthread_attr_setschedparam
+      (attr        : access pthread_attr_t;
+       sched_param : int) return int;
+    pragma Import (C, pthread_attr_setschedparam);
+ 
+    function sched_yield return int;
+    pragma Import (C, sched_yield, "sched_yield");
+ 
+    ---------------------------
+    -- P1003.1c - Section 16 --
+    ---------------------------
+ 
+    function pthread_attr_init (attributes : access pthread_attr_t) return int;
+    pragma Import (C, pthread_attr_init, "pthread_attr_init");
+ 
+    function pthread_attr_destroy
+      (attributes : access pthread_attr_t) return int;
+    pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
+ 
+    function pthread_attr_setdetachstate
+      (attr        : access pthread_attr_t;
+       detachstate : int) return int;
+    pragma Import (C, pthread_attr_setdetachstate);
+ 
+    function pthread_attr_setstacksize
+      (attr      : access pthread_attr_t;
+       stacksize : size_t) return int;
+    pragma Import (C, pthread_attr_setstacksize, "pthread_attr_setstacksize");
+ 
+    function pthread_create
+      (thread        : access pthread_t;
+       attributes    : access pthread_attr_t;
+       start_routine : Thread_Body;
+       arg           : System.Address) return int;
+    pragma Import (C, pthread_create, "pthread_create");
+ 
+    procedure pthread_exit (status : System.Address);
+    pragma Import (C, pthread_exit, "pthread_exit");
+ 
+    function pthread_self return pthread_t;
+    pragma Import (C, pthread_self, "pthread_self");
+ 
+    --------------------------
+    -- POSIX.1c  Section 17 --
+    --------------------------
+ 
+    function pthread_setspecific
+      (key   : pthread_key_t;
+       value : System.Address) return int;
+    pragma Import (C, pthread_setspecific, "pthread_setspecific");
+ 
+    function pthread_getspecific (key : pthread_key_t) return System.Address;
+    pragma Import (C, pthread_getspecific, "pthread_getspecific");
+ 
+    type destructor_pointer is access procedure (arg : System.Address);
+ 
+    function pthread_key_create
+      (key        : access pthread_key_t;
+       destructor : destructor_pointer) return int;
+    pragma Import (C, pthread_key_create, "pthread_key_create");
+ 
+ private
+ 
+    type sigset_t is new int;
+ 
+    type pid_t is new int;
+ 
+    type time_t is new long;
+ 
+    type timespec is record
+       tv_sec  : time_t;
+       tv_nsec : long;
+    end record;
+    pragma Convention (C, timespec);
+ 
+    type clockid_t is new rtems_id;
+    CLOCK_REALTIME : constant clockid_t := 1;
+ 
+    type struct_timeval is record
+       tv_sec  : int;
+       tv_usec : int;
+    end record;
+    pragma Convention (C, struct_timeval);
+ 
+    type pthread_attr_t is record
+       is_initialized  : int;
+       stackaddr       : System.Address;
+       stacksize       : int;
+       contentionscope : int;
+       inheritsched    : int;
+       schedpolicy     : int;
+       schedparam      : struct_sched_param;
+       cputime_clocked_allowed : int;
+       deatchstate     : int;
+    end record;
+    pragma Convention (C, pthread_attr_t);
+ 
+    type pthread_condattr_t is record
+       flags        : int;
+    end record;
+    pragma Convention (C, pthread_condattr_t);
+ 
+    type pthread_mutexattr_t is record
+       is_initialized  : int;
+       process_shared  : int;
+       prio_ceiling    : int;
+       protocol        : int;
+       recursive       : int;
+    end record;
+    pragma Convention (C, pthread_mutexattr_t);
+ 
+    type pthread_t is new rtems_id;
+ 
+    type pthread_mutex_t is new rtems_id;
+ 
+    type pthread_cond_t is new rtems_id;
+ 
+    type pthread_key_t is new rtems_id;
+ 
+    No_Key : constant pthread_key_t := 0;
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-solaris-fsu.ads gcc-4.0.0/gcc/ada/s-osinte-solaris-fsu.ads
*** gcc-3.4.3/gcc/ada/s-osinte-solaris-fsu.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-solaris-fsu.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,667 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   S Y S T E M . O S _ I N T E R F A C E                  --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2004, Free Software Foundation, Inc.      --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a Solaris (FSU THREADS) version of this package
+ 
+ --  This package includes all direct interfaces to OS services
+ --  that are needed by children of System.
+ 
+ --  PLEASE DO NOT add any with-clauses to this package or remove the pragma
+ --  Preelaborate. This package is designed to be a bottom-level (leaf) package.
+ 
+ with Interfaces.C;
+ with Unchecked_Conversion;
+ 
+ package System.OS_Interface is
+    pragma Preelaborate;
+ 
+    pragma Linker_Options ("-lgthreads");
+    pragma Linker_Options ("-lmalloc");
+ 
+    subtype int            is Interfaces.C.int;
+    subtype short          is Interfaces.C.short;
+    subtype long           is Interfaces.C.long;
+    subtype unsigned       is Interfaces.C.unsigned;
+    subtype unsigned_short is Interfaces.C.unsigned_short;
+    subtype unsigned_long  is Interfaces.C.unsigned_long;
+    subtype unsigned_char  is Interfaces.C.unsigned_char;
+    subtype plain_char     is Interfaces.C.plain_char;
+    subtype size_t         is Interfaces.C.size_t;
+ 
+    -----------
+    -- Errno --
+    -----------
+ 
+    function errno return int;
+    pragma Import (C, errno, "__get_errno");
+ 
+    EAGAIN    : constant := 11;
+    EINTR     : constant := 4;
+    EINVAL    : constant := 22;
+    ENOMEM    : constant := 12;
+    ETIMEDOUT : constant := 145;
+ 
+    -------------
+    -- Signals --
+    -------------
+ 
+    Max_Interrupt : constant := 45;
+    type Signal is new int range 0 .. Max_Interrupt;
+    for Signal'Size use int'Size;
+ 
+    SIGHUP     : constant := 1; --  hangup
+    SIGINT     : constant := 2; --  interrupt (rubout)
+    SIGQUIT    : constant := 3; --  quit (ASCD FS)
+    SIGILL     : constant := 4; --  illegal instruction (not reset)
+    SIGTRAP    : constant := 5; --  trace trap (not reset)
+    SIGIOT     : constant := 6; --  IOT instruction
+    SIGABRT    : constant := 6; --  used by abort, replace SIGIOT in the  future
+    SIGEMT     : constant := 7; --  EMT instruction
+    SIGFPE     : constant := 8; --  floating point exception
+    SIGKILL    : constant := 9; --  kill (cannot be caught or ignored)
+    SIGBUS     : constant := 10; --  bus error
+    SIGSEGV    : constant := 11; --  segmentation violation
+    SIGSYS     : constant := 12; --  bad argument to system call
+    SIGPIPE    : constant := 13; --  write on a pipe with no one to read it
+    SIGALRM    : constant := 14; --  alarm clock
+    SIGTERM    : constant := 15; --  software termination signal from kill
+    SIGUSR1    : constant := 16; --  user defined signal 1
+    SIGUSR2    : constant := 17; --  user defined signal 2
+    SIGCLD     : constant := 18; --  alias for SIGCHLD
+    SIGCHLD    : constant := 18; --  child status change
+    SIGPWR     : constant := 19; --  power-fail restart
+    SIGWINCH   : constant := 20; --  window size change
+    SIGURG     : constant := 21; --  urgent condition on IO channel
+    SIGPOLL    : constant := 22; --  pollable event occurred
+    SIGIO      : constant := 22; --  I/O possible (Solaris SIGPOLL alias)
+    SIGSTOP    : constant := 23; --  stop (cannot be caught or ignored)
+    SIGTSTP    : constant := 24; --  user stop requested from tty
+    SIGCONT    : constant := 25; --  stopped process has been continued
+    SIGTTIN    : constant := 26; --  background tty read attempted
+    SIGTTOU    : constant := 27; --  background tty write attempted
+    SIGVTALRM  : constant := 28; --  virtual timer expired
+    SIGPROF    : constant := 29; --  profiling timer expired
+    SIGXCPU    : constant := 30; --  CPU time limit exceeded
+    SIGXFSZ    : constant := 31; --  filesize limit exceeded
+    SIGWAITING : constant := 32; --  process's lwps blocked (Solaris)
+    SIGLWP     : constant := 33; --  used by thread library (Solaris)
+    SIGFREEZE  : constant := 34; --  used by CPR (Solaris)
+    SIGTHAW    : constant := 35; --  used by CPR (Solaris)
+    SIGCANCEL  : constant := 36; --  used for thread cancel (Solaris)
+    SIGRTMIN   : constant := 38; --  first (highest-priority) realtime signal
+    SIGRTMAX   : constant := 45; --  last (lowest-priority) realtime signal
+ 
+    type Signal_Set is array (Natural range <>) of Signal;
+ 
+    Unmasked    : constant Signal_Set :=
+      (SIGTRAP, SIGLWP, SIGTTIN, SIGTTOU, SIGTSTP, SIGPROF);
+ 
+    Reserved    : constant Signal_Set :=
+      (SIGKILL, SIGSTOP, SIGALRM, SIGVTALRM, SIGWAITING, SIGRTMAX);
+ 
+    type sigset_t is private;
+ 
+    function sigaddset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigaddset, "sigaddset");
+ 
+    function sigdelset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigdelset, "sigdelset");
+ 
+    function sigfillset (set : access sigset_t) return int;
+    pragma Import (C, sigfillset, "sigfillset");
+ 
+    function sigismember (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigismember, "sigismember");
+ 
+    function sigemptyset (set : access sigset_t) return int;
+    pragma Import (C, sigemptyset, "sigemptyset");
+ 
+    type union_type_3 is new String (1 .. 116);
+    type siginfo_t is record
+       si_signo     : int;
+       si_code      : int;
+       si_errno     : int;
+       X_data       : union_type_3;
+    end record;
+    pragma Convention (C, siginfo_t);
+ 
+    --  The types mcontext_t and gregset_t are part of the ucontext_t
+    --  information, which is specific to Solaris2.4 for SPARC
+    --  The ucontext_t info seems to be used by the handler
+    --  for SIGSEGV to decide whether it is a Storage_Error (stack overflow) or
+    --  a Constraint_Error (bad pointer).  The original code that did this
+    --  is suspect, so it is not clear whether we really need this part of
+    --  the signal context information, or perhaps something else.
+    --  More analysis is needed, after which these declarations may need to
+    --  be changed.
+ 
+    EMT_TAGOVF  : constant := 1; --  tag overflow
+    FPE_INTDIV  : constant := 1; --  integer divide by zero
+    FPE_INTOVF  : constant := 2; --  integer overflow
+    FPE_FLTDIV  : constant := 3; --  floating point divide by zero
+    FPE_FLTOVF  : constant := 4; --  floating point overflow
+    FPE_FLTUND  : constant := 5; --  floating point underflow
+    FPE_FLTRES  : constant := 6; --  floating point inexact result
+    FPE_FLTINV  : constant := 7; --  invalid floating point operation
+    FPE_FLTSUB  : constant := 8; --  subscript out of range
+ 
+    SEGV_MAPERR : constant := 1; --  address not mapped to object
+    SEGV_ACCERR : constant := 2; --  invalid permissions
+ 
+    BUS_ADRALN  : constant := 1; --  invalid address alignment
+    BUS_ADRERR  : constant := 2; --  non-existent physical address
+    BUS_OBJERR  : constant := 3; --  object specific hardware error
+ 
+    ILL_ILLOPC  : constant := 1; --  illegal opcode
+    ILL_ILLOPN  : constant := 2; --  illegal operand
+    ILL_ILLADR  : constant := 3; --  illegal addressing mode
+    ILL_ILLTRP  : constant := 4; --  illegal trap
+    ILL_PRVOPC  : constant := 5; --  privileged opcode
+    ILL_PRVREG  : constant := 6; --  privileged register
+    ILL_COPROC  : constant := 7; --  co-processor
+    ILL_BADSTK  : constant := 8; --  bad stack
+ 
+    type greg_t is new int;
+ 
+    type gregset_t is array (Integer range 0 .. 18) of greg_t;
+ 
+    REG_O0 : constant := 11;
+    --  index of saved register O0 in ucontext.uc_mcontext.gregs array
+ 
+    type union_type_2 is new String (1 .. 128);
+    type record_type_1 is record
+       fpu_fr       : union_type_2;
+       fpu_q        : System.Address;
+       fpu_fsr      : unsigned;
+       fpu_qcnt     : unsigned_char;
+       fpu_q_entrysize  : unsigned_char;
+       fpu_en       : unsigned_char;
+    end record;
+    pragma Convention (C, record_type_1);
+    type array_type_7 is array (Integer range 0 .. 20) of long;
+    type mcontext_t is record
+       gregs        : gregset_t;
+       gwins        : System.Address;
+       fpregs       : record_type_1;
+       filler       : array_type_7;
+    end record;
+    pragma Convention (C, mcontext_t);
+ 
+    type record_type_2 is record
+       ss_sp        : System.Address;
+       ss_size      : int;
+       ss_flags     : int;
+    end record;
+    pragma Convention (C, record_type_2);
+    type array_type_8 is array (Integer range 0 .. 22) of long;
+    type ucontext_t is record
+       uc_flags     : unsigned_long;
+       uc_link      : System.Address;
+       uc_sigmask   : sigset_t;
+       uc_stack     : record_type_2;
+       uc_mcontext  : mcontext_t;
+       uc_filler    : array_type_8;
+    end record;
+    pragma Convention (C, ucontext_t);
+ 
+    type Signal_Handler is access procedure
+       (signo   : Signal;
+        info    : access siginfo_t;
+        context : access ucontext_t);
+ 
+    type union_type_1 is new plain_char;
+    type array_type_2 is array (Integer range 0 .. 1) of int;
+    type struct_sigaction is record
+       sa_flags     : int;
+       sa_handler   : System.Address;
+       sa_mask      : sigset_t;
+       sa_resv      : array_type_2;
+    end record;
+    pragma Convention (C, struct_sigaction);
+    type struct_sigaction_ptr is access all struct_sigaction;
+ 
+    SA_SIGINFO  : constant := 16#08#;
+ 
+    SIG_BLOCK   : constant := 1;
+    SIG_UNBLOCK : constant := 2;
+    SIG_SETMASK : constant := 3;
+ 
+    SIG_DFL : constant := 0;
+    SIG_IGN : constant := 1;
+ 
+    function sigaction
+      (sig  : Signal;
+       act  : struct_sigaction_ptr;
+       oact : struct_sigaction_ptr) return int;
+    pragma Import (C, sigaction, "sigaction");
+ 
+    ----------
+    -- Time --
+    ----------
+ 
+    Time_Slice_Supported : constant Boolean := False;
+    --  Indicates wether time slicing is supported (i.e FSU threads have been
+    --  compiled with DEF_RR)
+ 
+    type timespec is private;
+ 
+    type clockid_t is private;
+ 
+    CLOCK_REALTIME : constant clockid_t;
+ 
+    function clock_gettime
+      (clock_id : clockid_t;
+       tp       : access timespec) return int;
+    pragma Import (C, clock_gettime, "clock_gettime");
+ 
+    function To_Duration (TS : timespec) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timespec (D : Duration) return timespec;
+    pragma Inline (To_Timespec);
+ 
+    type struct_timeval is private;
+ 
+    function To_Duration (TV : struct_timeval) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timeval (D : Duration) return struct_timeval;
+    pragma Inline (To_Timeval);
+ 
+    -------------------------
+    -- Priority Scheduling --
+    -------------------------
+ 
+    SCHED_FIFO  : constant := 0;
+    SCHED_RR    : constant := 1;
+    SCHED_OTHER : constant := 2;
+ 
+    -------------
+    -- Process --
+    -------------
+ 
+    type pid_t is private;
+ 
+    function kill (pid : pid_t; sig : Signal) return int;
+    pragma Import (C, kill, "kill");
+ 
+    function getpid return pid_t;
+    pragma Import (C, getpid, "getpid");
+ 
+    ---------
+    -- LWP --
+    ---------
+ 
+    function lwp_self return System.Address;
+    --  lwp_self does not exist on this thread library, revert to pthread_self
+    --  which is the closest approximation (with getpid). This function is
+    --  needed to share 7staprop.adb across POSIX-like targets.
+    pragma Import (C, lwp_self, "pthread_self");
+ 
+    -------------
+    -- Threads --
+    -------------
+ 
+    type Thread_Body is access
+      function (arg : System.Address) return System.Address;
+ 
+    function Thread_Body_Access is new
+      Unchecked_Conversion (System.Address, Thread_Body);
+ 
+    type pthread_t           is private;
+    subtype Thread_Id        is pthread_t;
+ 
+    type pthread_mutex_t     is limited private;
+    type pthread_cond_t      is limited private;
+    type pthread_attr_t      is limited private;
+    type pthread_mutexattr_t is limited private;
+    type pthread_condattr_t  is limited private;
+    type pthread_key_t       is private;
+ 
+    PTHREAD_CREATE_DETACHED : constant := 1;
+ 
+    -----------
+    -- Stack --
+    -----------
+ 
+    Stack_Base_Available : constant Boolean := False;
+    --  Indicates wether the stack base is available on this target.
+    --  This allows us to share s-osinte.adb between all the FSU run time.
+    --  Note that this value can only be true if pthread_t has a complete
+    --  definition that corresponds exactly to the C header files.
+ 
+    function Get_Stack_Base (thread : pthread_t) return Address;
+    pragma Inline (Get_Stack_Base);
+    --  returns the stack base of the specified thread.
+    --  Only call this function when Stack_Base_Available is True.
+ 
+    function Get_Page_Size return size_t;
+    function Get_Page_Size return Address;
+    pragma Import (C, Get_Page_Size, "getpagesize");
+    --  returns the size of a page, or 0 if this is not relevant on this
+    --  target
+ 
+    PROT_NONE  : constant := 0;
+    PROT_READ  : constant := 1;
+    PROT_WRITE : constant := 2;
+    PROT_EXEC  : constant := 4;
+    PROT_ALL   : constant := PROT_READ + PROT_WRITE + PROT_EXEC;
+ 
+    PROT_ON    : constant := PROT_NONE;
+    PROT_OFF   : constant := PROT_ALL;
+ 
+    function mprotect (addr : Address; len : size_t; prot : int) return int;
+    pragma Import (C, mprotect);
+ 
+    ---------------------------------------
+    -- Nonstandard Thread Initialization --
+    ---------------------------------------
+ 
+    procedure pthread_init;
+    --  FSU_THREADS requires pthread_init, which is nonstandard
+    --  and this should be invoked during the elaboration of s-taprop.adb
+    pragma Import (C, pthread_init, "pthread_init");
+ 
+    -------------------------
+    -- POSIX.1c  Section 3 --
+    -------------------------
+ 
+    function sigwait (set : access sigset_t; sig : access Signal) return int;
+    --  FSU_THREADS has a nonstandard sigwait
+ 
+    function pthread_kill (thread : pthread_t; sig : Signal) return int;
+    pragma Import (C, pthread_kill, "pthread_kill");
+ 
+    type sigset_t_ptr is access all sigset_t;
+ 
+    function pthread_sigmask
+      (how  : int;
+       set  : sigset_t_ptr;
+       oset : sigset_t_ptr) return int;
+    pragma Import (C, pthread_sigmask, "sigprocmask");
+ 
+    --------------------------
+    -- POSIX.1c  Section 11 --
+    --------------------------
+ 
+    function pthread_mutexattr_init
+      (attr : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
+ 
+    function pthread_mutexattr_destroy
+      (attr : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
+ 
+    function pthread_mutex_init
+      (mutex : access pthread_mutex_t;
+       attr  : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
+ 
+    function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
+ 
+    function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
+    --  FSU_THREADS has nonstandard pthread_mutex_lock
+ 
+    function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
+    --  FSU_THREADS has nonstandard pthread_mutex_lock
+ 
+    function pthread_condattr_init
+      (attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
+ 
+    function pthread_condattr_destroy
+      (attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
+ 
+    function pthread_cond_init
+      (cond : access pthread_cond_t;
+       attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_cond_init, "pthread_cond_init");
+ 
+    function pthread_cond_destroy (cond : access pthread_cond_t) return int;
+    pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
+ 
+    function pthread_cond_signal (cond : access pthread_cond_t) return int;
+    pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
+ 
+    function pthread_cond_wait
+      (cond  : access pthread_cond_t;
+       mutex : access pthread_mutex_t) return int;
+    --  FSU_THREADS has a nonstandard pthread_cond_wait
+ 
+    function pthread_cond_timedwait
+      (cond    : access pthread_cond_t;
+       mutex   : access pthread_mutex_t;
+       abstime : access timespec) return int;
+    --  FSU_THREADS has a nonstandard pthread_cond_timedwait
+ 
+    Relative_Timed_Wait : constant Boolean := False;
+    --  pthread_cond_timedwait requires an absolute delay time
+ 
+    --------------------------
+    -- POSIX.1c  Section 13 --
+    --------------------------
+ 
+    PTHREAD_PRIO_NONE    : constant := 0;
+    PTHREAD_PRIO_PROTECT : constant := 2;
+    PTHREAD_PRIO_INHERIT : constant := 1;
+ 
+    function pthread_mutexattr_setprotocol
+      (attr     : access pthread_mutexattr_t;
+       protocol : int) return int;
+    pragma Import (C, pthread_mutexattr_setprotocol);
+ 
+    function pthread_mutexattr_setprioceiling
+      (attr     : access pthread_mutexattr_t;
+       prioceiling : int) return int;
+    pragma Import
+      (C, pthread_mutexattr_setprioceiling,
+       "pthread_mutexattr_setprio_ceiling");
+ 
+    type struct_sched_param is record
+       sched_priority : int;  --  scheduling priority
+    end record;
+ 
+    function pthread_setschedparam
+      (thread : pthread_t;
+       policy : int;
+       param  : access struct_sched_param) return int;
+    --  FSU_THREADS does not have pthread_setschedparam
+ 
+    function pthread_attr_setscope
+      (attr            : access pthread_attr_t;
+       contentionscope : int) return int;
+    pragma Import (C, pthread_attr_setscope, "pthread_attr_setscope");
+ 
+    function pthread_attr_setinheritsched
+      (attr            : access pthread_attr_t;
+       inheritsched : int) return int;
+    pragma Import (C, pthread_attr_setinheritsched);
+ 
+    function pthread_attr_setschedpolicy
+      (attr   : access pthread_attr_t;
+       policy : int) return int;
+    pragma Import (C, pthread_attr_setschedpolicy, "pthread_attr_setsched");
+ 
+    function sched_yield return int;
+    --  FSU_THREADS does not have sched_yield;
+ 
+    ---------------------------
+    -- P1003.1c - Section 16 --
+    ---------------------------
+ 
+    function pthread_attr_init (attributes : access pthread_attr_t) return int;
+    pragma Import (C, pthread_attr_init, "pthread_attr_init");
+ 
+    function pthread_attr_destroy
+      (attributes : access pthread_attr_t) return int;
+    pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
+ 
+    function pthread_attr_setdetachstate
+      (attr        : access pthread_attr_t;
+       detachstate : int) return int;
+    --  FSU_THREADS has a nonstandard pthread_attr_setdetachstate
+ 
+    function pthread_attr_setstacksize
+      (attr      : access pthread_attr_t;
+       stacksize : size_t) return int;
+    pragma Import (C, pthread_attr_setstacksize);
+ 
+    function pthread_create
+      (thread        : access pthread_t;
+       attributes    : access pthread_attr_t;
+       start_routine : Thread_Body;
+       arg           : System.Address) return int;
+    pragma Import (C, pthread_create, "pthread_create");
+ 
+    procedure pthread_exit (status : System.Address);
+    pragma Import (C, pthread_exit, "pthread_exit");
+ 
+    function pthread_self return pthread_t;
+    pragma Import (C, pthread_self, "pthread_self");
+ 
+    --------------------------
+    -- POSIX.1c  Section 17 --
+    --------------------------
+ 
+    function pthread_setspecific
+      (key   : pthread_key_t;
+       value : System.Address) return int;
+    pragma Import (C, pthread_setspecific, "pthread_setspecific");
+ 
+    function pthread_getspecific (key : pthread_key_t) return System.Address;
+    --  FSU_THREADS has a nonstandard pthread_getspecific
+ 
+    type destructor_pointer is access procedure (arg : System.Address);
+ 
+    function pthread_key_create
+      (key        : access pthread_key_t;
+       destructor : destructor_pointer) return int;
+    pragma Import (C, pthread_key_create, "pthread_key_create");
+ 
+ private
+ 
+    type array_type_1 is array (Integer range 0 .. 3) of unsigned_long;
+    type sigset_t is record
+       X_X_sigbits  : array_type_1;
+    end record;
+    pragma Convention (C, sigset_t);
+ 
+    type pid_t is new long;
+ 
+    type time_t is new long;
+ 
+    type timespec is record
+       tv_sec  : time_t;
+       tv_nsec : long;
+    end record;
+    pragma Convention (C, timespec);
+ 
+    type clockid_t is new int;
+    CLOCK_REALTIME : constant clockid_t := 0;
+ 
+    type struct_timeval is record
+       tv_sec  : long;
+       tv_usec : long;
+    end record;
+    pragma Convention (C, struct_timeval);
+ 
+    type pthread_attr_t is record
+       flags           : int;
+       stacksize       : int;
+       contentionscope : int;
+       inheritsched    : int;
+       detachstate     : int;
+       sched           : int;
+       prio            : int;
+       starttime       : timespec;
+       deadline        : timespec;
+       period          : timespec;
+    end record;
+    pragma Convention (C, pthread_attr_t);
+ 
+    type pthread_condattr_t is record
+       flags : int;
+    end record;
+    pragma Convention (C, pthread_condattr_t);
+ 
+    type pthread_mutexattr_t is record
+       flags        : int;
+       prio_ceiling : int;
+       protocol     : int;
+    end record;
+    pragma Convention (C, pthread_mutexattr_t);
+ 
+    type sigjmp_buf is array (Integer range 0 .. 18) of int;
+ 
+    type pthread_t_struct is record
+       context    : sigjmp_buf;
+       pbody      : sigjmp_buf;
+       errno      : int;
+       ret        : int;
+       stack_base : System.Address;
+    end record;
+    pragma Convention (C, pthread_t_struct);
+ 
+    type pthread_t is access all pthread_t_struct;
+ 
+    type queue_t is record
+       head : System.Address;
+       tail : System.Address;
+    end record;
+    pragma Convention (C, queue_t);
+ 
+    type pthread_mutex_t is record
+       queue                 : queue_t;
+       lock                  : plain_char;
+       owner                 : System.Address;
+       flags                 : int;
+       prio_ceiling          : int;
+       protocol              : int;
+       prev_max_ceiling_prio : int;
+    end record;
+    pragma Convention (C, pthread_mutex_t);
+ 
+    type pthread_cond_t is record
+       queue        : queue_t;
+       flags        : int;
+       waiters      : int;
+       mutex        : System.Address;
+    end record;
+    pragma Convention (C, pthread_cond_t);
+ 
+    type pthread_key_t is new int;
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-solaris-posix.ads gcc-4.0.0/gcc/ada/s-osinte-solaris-posix.ads
*** gcc-3.4.3/gcc/ada/s-osinte-solaris-posix.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-solaris-posix.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,539 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   S Y S T E M . O S _ I N T E R F A C E                  --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2004, Free Software Foundation, Inc.      --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a Solaris (POSIX Threads) version of this package
+ 
+ --  This package encapsulates all direct interfaces to OS services
+ --  that are needed by children of System.
+ 
+ --  PLEASE DO NOT add any with-clauses to this package or remove the pragma
+ --  Preelaborate. This package is designed to be a bottom-level (leaf) package.
+ 
+ with Interfaces.C;
+ with Unchecked_Conversion;
+ 
+ package System.OS_Interface is
+    pragma Preelaborate;
+ 
+    pragma Linker_Options ("-lposix4");
+    pragma Linker_Options ("-lpthread");
+ 
+    subtype int            is Interfaces.C.int;
+    subtype short          is Interfaces.C.short;
+    subtype long           is Interfaces.C.long;
+    subtype unsigned       is Interfaces.C.unsigned;
+    subtype unsigned_short is Interfaces.C.unsigned_short;
+    subtype unsigned_long  is Interfaces.C.unsigned_long;
+    subtype unsigned_char  is Interfaces.C.unsigned_char;
+    subtype plain_char     is Interfaces.C.plain_char;
+    subtype size_t         is Interfaces.C.size_t;
+ 
+    -----------
+    -- Errno --
+    -----------
+ 
+    function errno return int;
+    pragma Import (C, errno, "__get_errno");
+ 
+    EAGAIN    : constant := 11;
+    EINTR     : constant := 4;
+    EINVAL    : constant := 22;
+    ENOMEM    : constant := 12;
+    ETIMEDOUT : constant := 145;
+ 
+    -------------
+    -- Signals --
+    -------------
+ 
+    Max_Interrupt : constant := 45;
+    type Signal is new int range 0 .. Max_Interrupt;
+    for Signal'Size use int'Size;
+ 
+    SIGHUP      : constant := 1; --  hangup
+    SIGINT      : constant := 2; --  interrupt (rubout)
+    SIGQUIT     : constant := 3; --  quit (ASCD FS)
+    SIGILL      : constant := 4; --  illegal instruction (not reset)
+    SIGTRAP     : constant := 5; --  trace trap (not reset)
+    SIGIOT      : constant := 6; --  IOT instruction
+    SIGABRT     : constant := 6; --  used by abort, replace SIGIOT in the future
+    SIGEMT      : constant := 7; --  EMT instruction
+    SIGFPE      : constant := 8; --  floating point exception
+    SIGKILL     : constant := 9; --  kill (cannot be caught or ignored)
+    SIGBUS      : constant := 10; --  bus error
+    SIGSEGV     : constant := 11; --  segmentation violation
+    SIGSYS      : constant := 12; --  bad argument to system call
+    SIGPIPE     : constant := 13; --  write on a pipe with no one to read it
+    SIGALRM     : constant := 14; --  alarm clock
+    SIGTERM     : constant := 15; --  software termination signal from kill
+    SIGUSR1     : constant := 16; --  user defined signal 1
+    SIGUSR2     : constant := 17; --  user defined signal 2
+    SIGCLD      : constant := 18; --  alias for SIGCHLD
+    SIGCHLD     : constant := 18; --  child status change
+    SIGPWR      : constant := 19; --  power-fail restart
+    SIGWINCH    : constant := 20; --  window size change
+    SIGURG      : constant := 21; --  urgent condition on IO channel
+    SIGPOLL     : constant := 22; --  pollable event occurred
+    SIGIO       : constant := 22; --  I/O possible (Solaris SIGPOLL alias)
+    SIGSTOP     : constant := 23; --  stop (cannot be caught or ignored)
+    SIGTSTP     : constant := 24; --  user stop requested from tty
+    SIGCONT     : constant := 25; --  stopped process has been continued
+    SIGTTIN     : constant := 26; --  background tty read attempted
+    SIGTTOU     : constant := 27; --  background tty write attempted
+    SIGVTALRM   : constant := 28; --  virtual timer expired
+    SIGPROF     : constant := 29; --  profiling timer expired
+    SIGXCPU     : constant := 30; --  CPU time limit exceeded
+    SIGXFSZ     : constant := 31; --  filesize limit exceeded
+    SIGWAITING  : constant := 32; --  process's lwps blocked (Solaris)
+    SIGLWP      : constant := 33; --  used by thread library (Solaris)
+    SIGFREEZE   : constant := 34; --  used by CPR (Solaris)
+    SIGTHAW     : constant := 35; --  used by CPR (Solaris)
+    SIGCANCEL   : constant := 36; --  thread cancellation signal (libthread)
+ 
+    SIGADAABORT : constant := SIGABRT;
+ 
+    type Signal_Set is array (Natural range <>) of Signal;
+ 
+    Unmasked    : constant Signal_Set := (SIGTRAP, SIGLWP, SIGPROF);
+ 
+    --  Following signals should not be disturbed.
+    --  See c-posix-signals.c in FLORIST
+ 
+    Reserved    : constant Signal_Set :=
+      (SIGKILL, SIGSTOP, SIGWAITING, SIGCANCEL);
+ 
+    type sigset_t is private;
+ 
+    function sigaddset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigaddset, "sigaddset");
+ 
+    function sigdelset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigdelset, "sigdelset");
+ 
+    function sigfillset (set : access sigset_t) return int;
+    pragma Import (C, sigfillset, "sigfillset");
+ 
+    function sigismember (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigismember, "sigismember");
+ 
+    function sigemptyset (set : access sigset_t) return int;
+    pragma Import (C, sigemptyset, "sigemptyset");
+ 
+    type struct_sigaction is record
+       sa_flags   : int;
+       sa_handler : System.Address;
+       sa_mask    : sigset_t;
+       sa_resv1   : int;
+       sa_resv2   : int;
+    end record;
+    pragma Convention (C, struct_sigaction);
+    type struct_sigaction_ptr is access all struct_sigaction;
+ 
+    SA_SIGINFO : constant := 16#0008#;
+ 
+    SIG_BLOCK   : constant := 1;
+    SIG_UNBLOCK : constant := 2;
+    SIG_SETMASK : constant := 3;
+ 
+    SIG_DFL : constant := 0;
+    SIG_IGN : constant := 1;
+ 
+    function sigaction
+      (sig  : Signal;
+       act  : struct_sigaction_ptr;
+       oact : struct_sigaction_ptr) return int;
+    pragma Import (C, sigaction, "sigaction");
+ 
+    ----------
+    -- Time --
+    ----------
+ 
+    Time_Slice_Supported : constant Boolean := True;
+    --  Indicates wether time slicing is supported
+ 
+    type timespec is private;
+ 
+    type clockid_t is private;
+ 
+    CLOCK_REALTIME : constant clockid_t;
+ 
+    function clock_gettime
+      (clock_id : clockid_t;
+       tp       : access timespec) return int;
+    pragma Import (C, clock_gettime, "clock_gettime");
+ 
+    function To_Duration (TS : timespec) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timespec (D : Duration) return timespec;
+    pragma Inline (To_Timespec);
+ 
+    type struct_timeval is private;
+ 
+    function To_Duration (TV : struct_timeval) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timeval (D : Duration) return struct_timeval;
+    pragma Inline (To_Timeval);
+ 
+    -------------------------
+    -- Priority Scheduling --
+    -------------------------
+ 
+    SCHED_FIFO  : constant := 1;
+    SCHED_RR    : constant := 2;
+    SCHED_OTHER : constant := 0;
+ 
+    -------------
+    -- Process --
+    -------------
+ 
+    type pid_t is private;
+ 
+    function kill (pid : pid_t; sig : Signal) return int;
+    pragma Import (C, kill, "kill");
+ 
+    function getpid return pid_t;
+    pragma Import (C, getpid, "getpid");
+ 
+    ---------
+    -- LWP --
+    ---------
+ 
+    function lwp_self return System.Address;
+    pragma Import (C, lwp_self, "_lwp_self");
+ 
+    -------------
+    -- Threads --
+    -------------
+ 
+    type Thread_Body is access
+      function (arg : System.Address) return System.Address;
+ 
+    function Thread_Body_Access is new
+      Unchecked_Conversion (System.Address, Thread_Body);
+ 
+    type pthread_t           is private;
+    subtype Thread_Id        is pthread_t;
+ 
+    type pthread_mutex_t     is limited private;
+    type pthread_cond_t      is limited private;
+    type pthread_attr_t      is limited private;
+    type pthread_mutexattr_t is limited private;
+    type pthread_condattr_t  is limited private;
+    type pthread_key_t       is private;
+ 
+    PTHREAD_CREATE_DETACHED : constant := 16#40#;
+ 
+    -----------
+    -- Stack --
+    -----------
+ 
+    Stack_Base_Available : constant Boolean := False;
+    --  Indicates wether the stack base is available on this target.
+ 
+    function Get_Stack_Base (thread : pthread_t) return Address;
+    pragma Inline (Get_Stack_Base);
+    --  returns the stack base of the specified thread.
+    --  Only call this function when Stack_Base_Available is True.
+ 
+    function Get_Page_Size return size_t;
+    function Get_Page_Size return Address;
+    pragma Import (C, Get_Page_Size, "getpagesize");
+    --  returns the size of a page, or 0 if this is not relevant on this
+    --  target
+ 
+    PROT_NONE  : constant := 0;
+    PROT_READ  : constant := 1;
+    PROT_WRITE : constant := 2;
+    PROT_EXEC  : constant := 4;
+    PROT_ALL   : constant := PROT_READ + PROT_WRITE + PROT_EXEC;
+ 
+    PROT_ON    : constant := PROT_READ;
+    PROT_OFF   : constant := PROT_ALL;
+ 
+    function mprotect (addr : Address; len : size_t; prot : int) return int;
+    pragma Import (C, mprotect);
+ 
+    ---------------------------------------
+    -- Nonstandard Thread Initialization --
+    ---------------------------------------
+ 
+    procedure pthread_init;
+    --  This is a dummy procedure to share some GNULLI files
+ 
+    -------------------------
+    -- POSIX.1c  Section 3 --
+    -------------------------
+ 
+    function sigwait
+      (set : access sigset_t;
+       sig : access Signal) return int;
+    pragma Import (C, sigwait, "__posix_sigwait");
+ 
+    function pthread_kill
+      (thread : pthread_t;
+       sig    : Signal) return int;
+    pragma Import (C, pthread_kill, "pthread_kill");
+ 
+    type sigset_t_ptr is access all sigset_t;
+ 
+    function pthread_sigmask
+      (how  : int;
+       set  : sigset_t_ptr;
+       oset : sigset_t_ptr) return int;
+    pragma Import (C, pthread_sigmask, "pthread_sigmask");
+ 
+    --------------------------
+    -- POSIX.1c  Section 11 --
+    --------------------------
+ 
+    function pthread_mutexattr_init
+      (attr : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
+ 
+    function pthread_mutexattr_destroy
+      (attr : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
+ 
+    function pthread_mutex_init
+      (mutex : access pthread_mutex_t;
+       attr  : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
+ 
+    function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
+ 
+    function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_lock, "pthread_mutex_lock");
+ 
+    function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_unlock, "pthread_mutex_unlock");
+ 
+    function pthread_condattr_init
+      (attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
+ 
+    function pthread_condattr_destroy
+      (attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
+ 
+    function pthread_cond_init
+      (cond : access pthread_cond_t;
+       attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_cond_init, "pthread_cond_init");
+ 
+    function pthread_cond_destroy (cond : access pthread_cond_t) return int;
+    pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
+ 
+    function pthread_cond_signal (cond : access pthread_cond_t) return int;
+    pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
+ 
+    function pthread_cond_wait
+      (cond  : access pthread_cond_t;
+       mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_cond_wait, "pthread_cond_wait");
+ 
+    function pthread_cond_timedwait
+      (cond    : access pthread_cond_t;
+       mutex   : access pthread_mutex_t;
+       abstime : access timespec) return int;
+    pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait");
+ 
+    Relative_Timed_Wait : constant Boolean := False;
+    --  pthread_cond_timedwait requires an absolute delay time
+ 
+    --------------------------
+    -- POSIX.1c  Section 13 --
+    --------------------------
+ 
+    PTHREAD_PRIO_NONE    : constant := 0;
+    PTHREAD_PRIO_INHERIT : constant := 16#10#;
+    PTHREAD_PRIO_PROTECT : constant := 16#20#;
+ 
+    function pthread_mutexattr_setprotocol
+      (attr     : access pthread_mutexattr_t;
+       protocol : int) return int;
+    pragma Import (C, pthread_mutexattr_setprotocol);
+ 
+    function pthread_mutexattr_setprioceiling
+      (attr        : access pthread_mutexattr_t;
+       prioceiling : int) return int;
+    pragma Import (C, pthread_mutexattr_setprioceiling);
+ 
+    type Array_8_Int is array (0 .. 7) of int;
+    type struct_sched_param is record
+       sched_priority : int;
+       sched_pad      : Array_8_Int;
+    end record;
+ 
+    function pthread_setschedparam
+      (thread : pthread_t;
+       policy : int;
+       param  : access struct_sched_param) return int;
+    pragma Import (C, pthread_setschedparam, "pthread_setschedparam");
+ 
+    function pthread_attr_setscope
+      (attr            : access pthread_attr_t;
+       contentionscope : int) return int;
+    pragma Import (C, pthread_attr_setscope, "pthread_attr_setscope");
+ 
+    function pthread_attr_setinheritsched
+      (attr         : access pthread_attr_t;
+       inheritsched : int) return int;
+    pragma Import (C, pthread_attr_setinheritsched);
+ 
+    function pthread_attr_setschedpolicy
+      (attr   : access pthread_attr_t;
+       policy : int) return int;
+    pragma Import (C, pthread_attr_setschedpolicy);
+ 
+    function sched_yield return int;
+    pragma Import (C, sched_yield, "sched_yield");
+ 
+    ---------------------------
+    -- P1003.1c - Section 16 --
+    ---------------------------
+ 
+    function pthread_attr_init (attributes : access pthread_attr_t) return int;
+    pragma Import (C, pthread_attr_init, "pthread_attr_init");
+ 
+    function pthread_attr_destroy
+      (attributes : access pthread_attr_t) return int;
+    pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
+ 
+    function pthread_attr_setdetachstate
+      (attr        : access pthread_attr_t;
+       detachstate : int) return int;
+    pragma Import (C, pthread_attr_setdetachstate);
+ 
+    function pthread_attr_setstacksize
+      (attr      : access pthread_attr_t;
+       stacksize : size_t) return int;
+    pragma Import (C, pthread_attr_setstacksize);
+ 
+    function pthread_create
+      (thread        : access pthread_t;
+       attributes    : access pthread_attr_t;
+       start_routine : Thread_Body;
+       arg           : System.Address) return int;
+    pragma Import (C, pthread_create, "pthread_create");
+ 
+    procedure pthread_exit (status : System.Address);
+    pragma Import (C, pthread_exit, "pthread_exit");
+ 
+    function pthread_self return pthread_t;
+    pragma Import (C, pthread_self, "pthread_self");
+ 
+    --------------------------
+    -- POSIX.1c  Section 17 --
+    --------------------------
+ 
+    function pthread_setspecific
+      (key   : pthread_key_t;
+       value : System.Address) return int;
+    pragma Import (C, pthread_setspecific, "pthread_setspecific");
+ 
+    function pthread_getspecific (key : pthread_key_t) return System.Address;
+    pragma Import (C, pthread_getspecific, "pthread_getspecific");
+ 
+    type destructor_pointer is access procedure (arg : System.Address);
+ 
+    function pthread_key_create
+      (key        : access pthread_key_t;
+       destructor : destructor_pointer) return int;
+    pragma Import (C, pthread_key_create, "pthread_key_create");
+ 
+ private
+ 
+    type array_type_1 is array (Integer range 0 .. 3) of unsigned_long;
+    type sigset_t is record
+       X_X_sigbits  : array_type_1;
+    end record;
+    pragma Convention (C, sigset_t);
+ 
+    type pid_t is new long;
+ 
+    type time_t is new long;
+ 
+    type timespec is record
+       tv_sec  : time_t;
+       tv_nsec : long;
+    end record;
+    pragma Convention (C, timespec);
+ 
+    type clockid_t is new int;
+    CLOCK_REALTIME : constant clockid_t := 0;
+ 
+    type struct_timeval is record
+       tv_sec  : time_t;
+       tv_usec : time_t;
+    end record;
+    pragma Convention (C, struct_timeval);
+ 
+    type pthread_attr_t is record
+       pthread_attrp : System.Address;
+    end record;
+    pragma Convention (C, pthread_attr_t);
+ 
+    type pthread_condattr_t is record
+       pthread_condattrp : System.Address;
+    end record;
+    pragma Convention (C, pthread_condattr_t);
+ 
+    type pthread_mutexattr_t is record
+       pthread_mutexattrp : System.Address;
+    end record;
+    pragma Convention (C, pthread_mutexattr_t);
+ 
+    type pthread_t is new unsigned;
+ 
+    type uint64_t is mod 2 ** 64;
+ 
+    type pthread_mutex_t is record
+       pthread_mutex_flags   : uint64_t;
+       pthread_mutex_owner64 : uint64_t;
+       pthread_mutex_data    : uint64_t;
+    end record;
+    pragma Convention (C, pthread_mutex_t);
+    type pthread_mutex_t_ptr is access pthread_mutex_t;
+ 
+    type pthread_cond_t is record
+       pthread_cond_flags : uint64_t;
+       pthread_cond_data  : uint64_t;
+    end record;
+    pragma Convention (C, pthread_cond_t);
+ 
+    type pthread_key_t is new unsigned;
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-solaris.adb gcc-4.0.0/gcc/ada/s-osinte-solaris.adb
*** gcc-3.4.3/gcc/ada/s-osinte-solaris.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-solaris.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,100 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   S Y S T E M . O S _ I N T E R F A C E                  --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2003, Ada Core Technologies               --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a Solaris version of this package.
+ 
+ --  This package encapsulates all direct interfaces to OS services
+ --  that are needed by children of System.
+ 
+ pragma Polling (Off);
+ --  Turn off polling, we do not want ATC polling to take place during
+ --  tasking operations. It causes infinite loops and other problems.
+ 
+ with Interfaces.C; use Interfaces.C;
+ package body System.OS_Interface is
+ 
+    -----------------
+    -- To_Duration --
+    -----------------
+ 
+    function To_Duration (TS : timespec) return Duration is
+    begin
+       return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9;
+    end To_Duration;
+ 
+    -----------------
+    -- To_Timespec --
+    -----------------
+ 
+    function To_Timespec (D : Duration) return timespec is
+       S : time_t;
+       F : Duration;
+    begin
+       S := time_t (Long_Long_Integer (D));
+       F := D - Duration (S);
+ 
+       --  If F has negative value due to a round-up, adjust for positive F
+       --  value.
+       if F < 0.0 then S := S - 1; F := F + 1.0; end if;
+       return timespec'(tv_sec  => S,
+                        tv_nsec => long (Long_Long_Integer (F * 10#1#E9)));
+    end To_Timespec;
+ 
+    function To_Duration (TV : struct_timeval) return Duration is
+    begin
+       return Duration (TV.tv_sec) + Duration (TV.tv_usec) / 10#1#E6;
+    end To_Duration;
+ 
+    function To_Timeval (D : Duration) return struct_timeval is
+       S : long;
+       F : Duration;
+    begin
+       S := long (Long_Long_Integer (D));
+       F := D - Duration (S);
+ 
+       --  If F has negative value due to a round-up, adjust for positive F
+       --  value.
+       if F < 0.0 then S := S - 1; F := F + 1.0; end if;
+       return
+         struct_timeval'
+           (tv_sec  => S,
+            tv_usec => long (Long_Long_Integer (F * 10#1#E6)));
+    end To_Timeval;
+ 
+    procedure pthread_init is
+    begin
+       null;
+    end pthread_init;
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-solaris.ads gcc-4.0.0/gcc/ada/s-osinte-solaris.ads
*** gcc-3.4.3/gcc/ada/s-osinte-solaris.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-solaris.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,569 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   S Y S T E M . O S _ I N T E R F A C E                  --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2004, Free Software Foundation, Inc.      --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a Solaris (native) version of this package
+ 
+ --  This package includes all direct interfaces to OS services
+ --  that are needed by children of System.
+ 
+ --  PLEASE DO NOT add any with-clauses to this package or remove the pragma
+ --  Preelaborate. This package is designed to be a bottom-level (leaf) package.
+ 
+ with Interfaces.C;
+ with Unchecked_Conversion;
+ 
+ package System.OS_Interface is
+    pragma Preelaborate;
+ 
+    pragma Linker_Options ("-lposix4");
+    pragma Linker_Options ("-lthread");
+ 
+    subtype int            is Interfaces.C.int;
+    subtype short          is Interfaces.C.short;
+    subtype long           is Interfaces.C.long;
+    subtype unsigned       is Interfaces.C.unsigned;
+    subtype unsigned_short is Interfaces.C.unsigned_short;
+    subtype unsigned_long  is Interfaces.C.unsigned_long;
+    subtype unsigned_char  is Interfaces.C.unsigned_char;
+    subtype plain_char     is Interfaces.C.plain_char;
+    subtype size_t         is Interfaces.C.size_t;
+ 
+    -----------
+    -- Errno --
+    -----------
+ 
+    function errno return int;
+    pragma Import (C, errno, "__get_errno");
+ 
+    EAGAIN    : constant := 11;
+    EINTR     : constant := 4;
+    EINVAL    : constant := 22;
+    ENOMEM    : constant := 12;
+    ETIME     : constant := 62;
+    ETIMEDOUT : constant := 145;
+ 
+    -------------
+    -- Signals --
+    -------------
+ 
+    Max_Interrupt : constant := 45;
+    type Signal is new int range 0 .. Max_Interrupt;
+    for Signal'Size use int'Size;
+ 
+    SIGHUP     : constant := 1; --  hangup
+    SIGINT     : constant := 2; --  interrupt (rubout)
+    SIGQUIT    : constant := 3; --  quit (ASCD FS)
+    SIGILL     : constant := 4; --  illegal instruction (not reset)
+    SIGTRAP    : constant := 5; --  trace trap (not reset)
+    SIGIOT     : constant := 6; --  IOT instruction
+    SIGABRT    : constant := 6; --  used by abort, replace SIGIOT in the  future
+    SIGEMT     : constant := 7; --  EMT instruction
+    SIGFPE     : constant := 8; --  floating point exception
+    SIGKILL    : constant := 9; --  kill (cannot be caught or ignored)
+    SIGBUS     : constant := 10; --  bus error
+    SIGSEGV    : constant := 11; --  segmentation violation
+    SIGSYS     : constant := 12; --  bad argument to system call
+    SIGPIPE    : constant := 13; --  write on a pipe with no one to read it
+    SIGALRM    : constant := 14; --  alarm clock
+    SIGTERM    : constant := 15; --  software termination signal from kill
+    SIGUSR1    : constant := 16; --  user defined signal 1
+    SIGUSR2    : constant := 17; --  user defined signal 2
+    SIGCLD     : constant := 18; --  alias for SIGCHLD
+    SIGCHLD    : constant := 18; --  child status change
+    SIGPWR     : constant := 19; --  power-fail restart
+    SIGWINCH   : constant := 20; --  window size change
+    SIGURG     : constant := 21; --  urgent condition on IO channel
+    SIGPOLL    : constant := 22; --  pollable event occurred
+    SIGIO      : constant := 22; --  I/O possible (Solaris SIGPOLL alias)
+    SIGSTOP    : constant := 23; --  stop (cannot be caught or ignored)
+    SIGTSTP    : constant := 24; --  user stop requested from tty
+    SIGCONT    : constant := 25; --  stopped process has been continued
+    SIGTTIN    : constant := 26; --  background tty read attempted
+    SIGTTOU    : constant := 27; --  background tty write attempted
+    SIGVTALRM  : constant := 28; --  virtual timer expired
+    SIGPROF    : constant := 29; --  profiling timer expired
+    SIGXCPU    : constant := 30; --  CPU time limit exceeded
+    SIGXFSZ    : constant := 31; --  filesize limit exceeded
+    SIGWAITING : constant := 32; --  process's lwps blocked (Solaris)
+    SIGLWP     : constant := 33; --  used by thread library (Solaris)
+    SIGFREEZE  : constant := 34; --  used by CPR (Solaris)
+    SIGTHAW    : constant := 35; --  used by CPR (Solaris)
+    SIGCANCEL  : constant := 36; --  thread cancellation signal (libthread)
+ 
+    type Signal_Set is array (Natural range <>) of Signal;
+ 
+    Unmasked : constant Signal_Set := (SIGTRAP, SIGLWP, SIGPROF);
+ 
+    --  Following signals should not be disturbed.
+    --  See c-posix-signals.c in FLORIST
+ 
+    Reserved : constant Signal_Set :=
+      (SIGKILL, SIGSTOP, SIGWAITING, SIGCANCEL, SIGTRAP, SIGSEGV);
+ 
+    type sigset_t is private;
+ 
+    function sigaddset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigaddset, "sigaddset");
+ 
+    function sigdelset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigdelset, "sigdelset");
+ 
+    function sigfillset (set : access sigset_t) return int;
+    pragma Import (C, sigfillset, "sigfillset");
+ 
+    function sigismember (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigismember, "sigismember");
+ 
+    function sigemptyset (set : access sigset_t) return int;
+    pragma Import (C, sigemptyset, "sigemptyset");
+ 
+    type union_type_3 is new String (1 .. 116);
+    type siginfo_t is record
+       si_signo     : int;
+       si_code      : int;
+       si_errno     : int;
+       X_data       : union_type_3;
+    end record;
+    pragma Convention (C, siginfo_t);
+ 
+    --  The types mcontext_t and gregset_t are part of the ucontext_t
+    --  information, which is specific to Solaris2.4 for SPARC
+    --  The ucontext_t info seems to be used by the handler
+    --  for SIGSEGV to decide whether it is a Storage_Error (stack overflow) or
+    --  a Constraint_Error (bad pointer).  The original code that did this
+    --  is suspect, so it is not clear whether we really need this part of
+    --  the signal context information, or perhaps something else.
+    --  More analysis is needed, after which these declarations may need to
+    --  be changed.
+ 
+    FPE_INTDIV  : constant := 1; --  integer divide by zero
+    FPE_INTOVF  : constant := 2; --  integer overflow
+    FPE_FLTDIV  : constant := 3; --  floating point divide by zero
+    FPE_FLTOVF  : constant := 4; --  floating point overflow
+    FPE_FLTUND  : constant := 5; --  floating point underflow
+    FPE_FLTRES  : constant := 6; --  floating point inexact result
+    FPE_FLTINV  : constant := 7; --  invalid floating point operation
+    FPE_FLTSUB  : constant := 8; --  subscript out of range
+ 
+    type greg_t is new int;
+ 
+    type gregset_t is array (0 .. 18) of greg_t;
+ 
+    type union_type_2 is new String (1 .. 128);
+    type record_type_1 is record
+       fpu_fr       : union_type_2;
+       fpu_q        : System.Address;
+       fpu_fsr      : unsigned;
+       fpu_qcnt     : unsigned_char;
+       fpu_q_entrysize  : unsigned_char;
+       fpu_en       : unsigned_char;
+    end record;
+    pragma Convention (C, record_type_1);
+ 
+    type array_type_7 is array (Integer range 0 .. 20) of long;
+    type mcontext_t is record
+       gregs        : gregset_t;
+       gwins        : System.Address;
+       fpregs       : record_type_1;
+       filler       : array_type_7;
+    end record;
+    pragma Convention (C, mcontext_t);
+ 
+    type record_type_2 is record
+       ss_sp        : System.Address;
+       ss_size      : int;
+       ss_flags     : int;
+    end record;
+    pragma Convention (C, record_type_2);
+ 
+    type array_type_8 is array (Integer range 0 .. 22) of long;
+    type ucontext_t is record
+       uc_flags     : unsigned_long;
+       uc_link      : System.Address;
+       uc_sigmask   : sigset_t;
+       uc_stack     : record_type_2;
+       uc_mcontext  : mcontext_t;
+       uc_filler    : array_type_8;
+    end record;
+    pragma Convention (C, ucontext_t);
+ 
+    type Signal_Handler is access procedure
+      (signo   : Signal;
+       info    : access siginfo_t;
+       context : access ucontext_t);
+ 
+    type union_type_1 is new plain_char;
+    type array_type_2 is array (Integer range 0 .. 1) of int;
+    type struct_sigaction is record
+       sa_flags   : int;
+       sa_handler : System.Address;
+       sa_mask    : sigset_t;
+       sa_resv    : array_type_2;
+    end record;
+    pragma Convention (C, struct_sigaction);
+    type struct_sigaction_ptr is access all struct_sigaction;
+ 
+    SIG_BLOCK   : constant := 1;
+    SIG_UNBLOCK : constant := 2;
+    SIG_SETMASK : constant := 3;
+ 
+    SIG_DFL : constant := 0;
+    SIG_IGN : constant := 1;
+ 
+    function sigaction
+      (sig  : Signal;
+       act  : struct_sigaction_ptr;
+       oact : struct_sigaction_ptr) return int;
+    pragma Import (C, sigaction, "sigaction");
+ 
+    ----------
+    -- Time --
+    ----------
+ 
+    type timespec is private;
+ 
+    type clockid_t is private;
+ 
+    CLOCK_REALTIME : constant clockid_t;
+ 
+    function clock_gettime
+      (clock_id : clockid_t; tp : access timespec) return int;
+    pragma Import (C, clock_gettime, "clock_gettime");
+ 
+    function clock_getres
+      (clock_id : clockid_t; res : access timespec) return int;
+    pragma Import (C, clock_getres, "clock_getres");
+ 
+    function To_Duration (TS : timespec) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timespec (D : Duration) return timespec;
+    pragma Inline (To_Timespec);
+ 
+    type struct_timeval is private;
+    --  This is needed on systems that do not have clock_gettime()
+    --  but do have gettimeofday().
+ 
+    function To_Duration (TV : struct_timeval) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timeval (D : Duration) return struct_timeval;
+    pragma Inline (To_Timeval);
+ 
+    -------------
+    -- Process --
+    -------------
+ 
+    type pid_t is private;
+ 
+    function kill (pid : pid_t; sig : Signal) return int;
+    pragma Import (C, kill, "kill");
+ 
+    function getpid return pid_t;
+    pragma Import (C, getpid, "getpid");
+ 
+    -------------
+    -- Threads --
+    -------------
+ 
+    type Thread_Body is access
+      function (arg : System.Address) return System.Address;
+ 
+    function Thread_Body_Access is new
+      Unchecked_Conversion (System.Address, Thread_Body);
+ 
+    THR_DETACHED  : constant := 64;
+    THR_BOUND     : constant := 1;
+    THR_NEW_LWP   : constant := 2;
+    USYNC_THREAD  : constant := 0;
+ 
+    type thread_t is new unsigned;
+    subtype Thread_Id is thread_t;
+    --  These types should be commented ???
+ 
+    function To_thread_t is new Unchecked_Conversion (Integer, thread_t);
+ 
+    type mutex_t is limited private;
+ 
+    type cond_t is limited private;
+ 
+    type thread_key_t is private;
+ 
+    function thr_create
+      (stack_base    : System.Address;
+       stack_size    : size_t;
+       start_routine : Thread_Body;
+       arg           : System.Address;
+       flags         : int;
+       new_thread    : access thread_t) return int;
+    pragma Import (C, thr_create, "thr_create");
+ 
+    function thr_min_stack return size_t;
+    pragma Import (C, thr_min_stack, "thr_min_stack");
+ 
+    function thr_self return thread_t;
+    pragma Import (C, thr_self, "thr_self");
+ 
+    function mutex_init
+      (mutex : access mutex_t;
+       mtype : int;
+       arg   : System.Address) return int;
+    pragma Import (C, mutex_init, "mutex_init");
+ 
+    function mutex_destroy (mutex : access mutex_t) return int;
+    pragma Import (C, mutex_destroy, "mutex_destroy");
+ 
+    function mutex_lock (mutex : access mutex_t) return int;
+    pragma Import (C, mutex_lock, "mutex_lock");
+ 
+    function mutex_unlock (mutex : access mutex_t) return int;
+    pragma Import (C, mutex_unlock, "mutex_unlock");
+ 
+    function cond_init
+      (cond  : access cond_t;
+       ctype : int;
+       arg   : int) return int;
+    pragma Import (C, cond_init, "cond_init");
+ 
+    function cond_wait
+      (cond : access cond_t; mutex : access mutex_t) return int;
+    pragma Import (C, cond_wait, "cond_wait");
+ 
+    function cond_timedwait
+      (cond    : access cond_t;
+       mutex   : access mutex_t;
+       abstime : access timespec) return int;
+    pragma Import (C, cond_timedwait, "cond_timedwait");
+ 
+    function cond_signal (cond : access cond_t) return int;
+    pragma Import (C, cond_signal, "cond_signal");
+ 
+    function cond_destroy (cond : access cond_t) return int;
+    pragma Import (C, cond_destroy, "cond_destroy");
+ 
+    function thr_setspecific
+      (key : thread_key_t; value : System.Address) return int;
+    pragma Import (C, thr_setspecific, "thr_setspecific");
+ 
+    function thr_getspecific
+      (key   : thread_key_t;
+       value : access System.Address) return int;
+    pragma Import (C, thr_getspecific, "thr_getspecific");
+ 
+    function thr_keycreate
+      (key : access thread_key_t; destructor : System.Address) return int;
+    pragma Import (C, thr_keycreate, "thr_keycreate");
+ 
+    function thr_setprio (thread : thread_t; priority : int) return int;
+    pragma Import (C, thr_setprio, "thr_setprio");
+ 
+    procedure thr_exit (status : System.Address);
+    pragma Import (C, thr_exit, "thr_exit");
+ 
+    function thr_setconcurrency (new_level : int) return int;
+    pragma Import (C, thr_setconcurrency, "thr_setconcurrency");
+ 
+    function sigwait (set : access sigset_t; sig : access Signal) return int;
+    pragma Import (C, sigwait, "__posix_sigwait");
+ 
+    function thr_kill (thread : thread_t; sig : Signal) return int;
+    pragma Import (C, thr_kill, "thr_kill");
+ 
+    type sigset_t_ptr is access all sigset_t;
+ 
+    function thr_sigsetmask
+      (how  : int;
+       set  : sigset_t_ptr;
+       oset : sigset_t_ptr) return int;
+    pragma Import (C, thr_sigsetmask, "thr_sigsetmask");
+ 
+    function pthread_sigmask
+      (how  : int;
+       set  : sigset_t_ptr;
+       oset : sigset_t_ptr) return int;
+    pragma Import (C, pthread_sigmask, "thr_sigsetmask");
+ 
+    function thr_suspend (target_thread : thread_t) return int;
+    pragma Import (C, thr_suspend, "thr_suspend");
+ 
+    function thr_continue (target_thread : thread_t) return int;
+    pragma Import (C, thr_continue, "thr_continue");
+ 
+    procedure thr_yield;
+    pragma Import (C, thr_yield, "thr_yield");
+ 
+    ---------
+    -- LWP --
+    ---------
+ 
+    P_PID   : constant := 0;
+    P_LWPID : constant := 8;
+ 
+    PC_GETCID    : constant := 0;
+    PC_GETCLINFO : constant := 1;
+    PC_SETPARMS  : constant := 2;
+    PC_GETPARMS  : constant := 3;
+    PC_ADMIN     : constant := 4;
+ 
+    PC_CLNULL : constant := -1;
+ 
+    RT_NOCHANGE : constant := -1;
+    RT_TQINF    : constant := -2;
+    RT_TQDEF    : constant := -3;
+ 
+    PC_CLNMSZ : constant := 16;
+ 
+    PC_VERSION : constant := 1;
+ 
+    type lwpid_t is new int;
+ 
+    type pri_t is new short;
+ 
+    type id_t is new long;
+ 
+    P_MYID : constant := -1;
+    --  the specified LWP or process is the current one.
+ 
+    type struct_pcinfo is record
+       pc_cid    : id_t;
+       pc_clname : String (1 .. PC_CLNMSZ);
+       rt_maxpri : short;
+    end record;
+    pragma Convention (C, struct_pcinfo);
+ 
+    type struct_pcparms is record
+       pc_cid     : id_t;
+       rt_pri     : pri_t;
+       rt_tqsecs  : long;
+       rt_tqnsecs : long;
+    end record;
+    pragma Convention (C, struct_pcparms);
+ 
+    function priocntl
+      (ver     : int;
+       id_type : int;
+       id      : lwpid_t;
+       cmd     : int;
+       arg     : System.Address) return Interfaces.C.long;
+    pragma Import (C, priocntl, "__priocntl");
+ 
+    function lwp_self return lwpid_t;
+    pragma Import (C, lwp_self, "_lwp_self");
+ 
+    type processorid_t is new int;
+    type processorid_t_ptr is access all processorid_t;
+ 
+    --  Constants for function processor_bind
+ 
+    PBIND_QUERY : constant processorid_t := -2;
+    --  the processor bindings are not changed.
+ 
+    PBIND_NONE  : constant processorid_t := -1;
+    --  the processor bindings of the specified LWPs are cleared.
+ 
+    --  Flags for function p_online
+ 
+    PR_OFFLINE : constant int := 1;
+    --  processor is offline, as quiet as possible
+ 
+    PR_ONLINE  : constant int := 2;
+    --  processor online
+ 
+    PR_STATUS  : constant int := 3;
+    --  value passed to p_online to request status
+ 
+    function p_online (processorid : processorid_t; flag : int) return int;
+    pragma Import (C, p_online, "p_online");
+ 
+    function processor_bind
+      (id_type : int;
+       id      : id_t;
+       proc_id : processorid_t;
+       obind   : processorid_t_ptr) return int;
+    pragma Import (C, processor_bind, "processor_bind");
+ 
+    procedure pthread_init;
+    --  dummy procedure to share s-intman.adb with other Solaris targets.
+ 
+ private
+ 
+    type array_type_1 is array (0 .. 3) of unsigned_long;
+    type sigset_t is record
+       X_X_sigbits : array_type_1;
+    end record;
+    pragma Convention (C, sigset_t);
+ 
+    type pid_t is new long;
+ 
+    type time_t is new long;
+ 
+    type timespec is record
+       tv_sec  : time_t;
+       tv_nsec : long;
+    end record;
+    pragma Convention (C, timespec);
+ 
+    type clockid_t is new int;
+    CLOCK_REALTIME : constant clockid_t := 0;
+ 
+    type struct_timeval is record
+       tv_sec  : long;
+       tv_usec : long;
+    end record;
+    pragma Convention (C, struct_timeval);
+ 
+    type array_type_9 is array (0 .. 3) of unsigned_char;
+    type record_type_3 is record
+       flag  : array_type_9;
+       Xtype : unsigned_long;
+    end record;
+    pragma Convention (C, record_type_3);
+ 
+    type mutex_t is record
+       flags : record_type_3;
+       lock  : String (1 .. 8);
+       data  : String (1 .. 8);
+    end record;
+    pragma Convention (C, mutex_t);
+ 
+    type cond_t is record
+       flag  : array_type_9;
+       Xtype : unsigned_long;
+       data  : String (1 .. 8);
+    end record;
+    pragma Convention (C, cond_t);
+ 
+    type thread_key_t is new unsigned;
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-tru64.adb gcc-4.0.0/gcc/ada/s-osinte-tru64.adb
*** gcc-3.4.3/gcc/ada/s-osinte-tru64.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-tru64.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,135 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   S Y S T E M . O S _ I N T E R F A C E                  --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --         Copyright (C) 1998-2002, Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the DEC Unix version of this package.
+ 
+ --  This package encapsulates all direct interfaces to OS services
+ --  that are needed by children of System.
+ 
+ pragma Polling (Off);
+ --  Turn off polling, we do not want ATC polling to take place during
+ --  tasking operations. It causes infinite loops and other problems.
+ 
+ with Interfaces.C; use Interfaces.C;
+ with System.Machine_Code; use System.Machine_Code;
+ 
+ package body System.OS_Interface is
+ 
+    ------------------
+    -- pthread_init --
+    ------------------
+ 
+    procedure pthread_init is
+    begin
+       null;
+    end pthread_init;
+ 
+    ------------------
+    -- pthread_self --
+    ------------------
+ 
+    function pthread_self return pthread_t is
+       Self : pthread_t;
+    begin
+       Asm ("call_pal 0x9e" & ASCII.LF & ASCII.HT &
+            "bis $31, $0, %0",
+            Outputs => pthread_t'Asm_Output ("=r", Self),
+            Clobber => "$0");
+       return Self;
+    end pthread_self;
+ 
+    -----------------
+    -- To_Duration --
+    -----------------
+ 
+    function To_Duration (TS : timespec) return Duration is
+    begin
+       return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9;
+    end To_Duration;
+ 
+    function To_Duration (TV : struct_timeval) return Duration is
+    begin
+       return Duration (TV.tv_sec) + Duration (TV.tv_usec) / 10#1#E6;
+    end To_Duration;
+ 
+    -----------------
+    -- To_Timespec --
+    -----------------
+ 
+    function To_Timespec (D : Duration) return timespec is
+       S : time_t;
+       F : Duration;
+ 
+    begin
+       S := time_t (Long_Long_Integer (D));
+       F := D - Duration (S);
+ 
+       --  If F has negative value due to a round-up, adjust for positive F
+       --  value.
+ 
+       if F < 0.0 then
+          S := S - 1;
+          F := F + 1.0;
+       end if;
+ 
+       return timespec'(tv_sec => S,
+                        tv_nsec => long (Long_Long_Integer (F * 10#1#E9)));
+    end To_Timespec;
+ 
+    ----------------
+    -- To_Timeval --
+    ----------------
+ 
+    function To_Timeval (D : Duration) return struct_timeval is
+       S : time_t;
+       F : Duration;
+ 
+    begin
+       S := time_t (Long_Long_Integer (D));
+       F := D - Duration (S);
+ 
+       --  If F has negative value due to a round-up, adjust for positive F
+       --  value.
+ 
+       if F < 0.0 then
+          S := S - 1;
+          F := F + 1.0;
+       end if;
+ 
+       return
+         struct_timeval'
+           (tv_sec => S,
+            tv_usec => time_t (Long_Long_Integer (F * 10#1#E6)));
+    end To_Timeval;
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-tru64.ads gcc-4.0.0/gcc/ada/s-osinte-tru64.ads
*** gcc-3.4.3/gcc/ada/s-osinte-tru64.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-tru64.ads	Tue Jul  6 13:57:29 2004
***************
*** 0 ****
--- 1,539 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   S Y S T E M . O S _ I N T E R F A C E                  --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2004, Free Software Foundation, Inc.      --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the DEC Unix 4.0/5.1 version of this package
+ 
+ --  This package encapsulates all direct interfaces to OS services
+ --  that are needed by children of System.
+ 
+ --  PLEASE DO NOT add any with-clauses to this package or remove the pragma
+ --  Preelaborate. This package is designed to be a bottom-level (leaf) package.
+ 
+ with Interfaces.C;
+ with Unchecked_Conversion;
+ 
+ package System.OS_Interface is
+    pragma Preelaborate;
+ 
+    pragma Linker_Options ("-lpthread");
+    pragma Linker_Options ("-lmach");
+    pragma Linker_Options ("-lexc");
+    pragma Linker_Options ("-lrt");
+ 
+    subtype int            is Interfaces.C.int;
+    subtype short          is Interfaces.C.short;
+    subtype long           is Interfaces.C.long;
+    subtype unsigned       is Interfaces.C.unsigned;
+    subtype unsigned_short is Interfaces.C.unsigned_short;
+    subtype unsigned_long  is Interfaces.C.unsigned_long;
+    subtype unsigned_char  is Interfaces.C.unsigned_char;
+    subtype plain_char     is Interfaces.C.plain_char;
+    subtype size_t         is Interfaces.C.size_t;
+    subtype char_array     is Interfaces.C.char_array;
+ 
+    -----------
+    -- Errno --
+    -----------
+ 
+    function errno return int;
+    pragma Import (C, errno, "_Geterrno");
+ 
+    EAGAIN    : constant := 35;
+    EINTR     : constant := 4;
+    EINVAL    : constant := 22;
+    ENOMEM    : constant := 12;
+    ETIMEDOUT : constant := 60;
+ 
+    -------------
+    -- Signals --
+    -------------
+ 
+    Max_Interrupt : constant := 48;
+    type Signal is new int range 0 .. Max_Interrupt;
+    for Signal'Size use int'Size;
+ 
+    SIGHUP     : constant := 1; --  hangup
+    SIGINT     : constant := 2; --  interrupt (rubout)
+    SIGQUIT    : constant := 3; --  quit (ASCD FS)
+    SIGILL     : constant := 4; --  illegal instruction (not reset)
+    SIGTRAP    : constant := 5; --  trace trap (not reset)
+    SIGABRT    : constant := 6; --  used by abort, replace SIGIOT in the  future
+    SIGIOT     : constant := 6; --  abort (terminate) process
+    SIGLOST    : constant := 6; --  old BSD signal ??
+    SIGEMT     : constant := 7; --  EMT instruction
+    SIGFPE     : constant := 8; --  floating point exception
+    SIGKILL    : constant := 9; --  kill (cannot be caught or ignored)
+    SIGBUS     : constant := 10; --  bus error
+    SIGSEGV    : constant := 11; --  segmentation violation
+    SIGSYS     : constant := 12; --  bad argument to system call
+    SIGPIPE    : constant := 13; --  write on a pipe with no one to read it
+    SIGALRM    : constant := 14; --  alarm clock
+    SIGTERM    : constant := 15; --  software termination signal from kill
+    SIGURG     : constant := 16; --  urgent condition on IO channel
+    SIGIOINT   : constant := 16; --  printer to backend error signal
+    SIGSTOP    : constant := 17; --  stop (cannot be caught or ignored)
+    SIGTSTP    : constant := 18; --  user stop requested from tty
+    SIGCONT    : constant := 19; --  stopped process has been continued
+    SIGCHLD    : constant := 20; --  child status change
+    SIGTTIN    : constant := 21; --  background tty read attempted
+    SIGTTOU    : constant := 22; --  background tty write attempted
+    SIGPOLL    : constant := 23; --  I/O possible, or completed
+    SIGIO      : constant := 23; --  STREAMS version of SIGPOLL
+    SIGAIO     : constant := 23; --  base lan i/o
+    SIGPTY     : constant := 23; --  pty i/o
+    SIGXCPU    : constant := 24; --  CPU time limit exceeded
+    SIGXFSZ    : constant := 25; --  filesize limit exceeded
+    SIGVTALRM  : constant := 26; --  virtual timer expired
+    SIGPROF    : constant := 27; --  profiling timer expired
+    SIGWINCH   : constant := 28; --  window size change
+    SIGINFO    : constant := 29; --  information request
+    SIGPWR     : constant := 29; --  Power Fail/Restart -- SVID3/SVR4
+    SIGUSR1    : constant := 30; --  user defined signal 1
+    SIGUSR2    : constant := 31; --  user defined signal 2
+    SIGRESV    : constant := 32; --  reserved by Digital for future use
+ 
+    SIGADAABORT : constant := SIGABRT;
+ 
+    type Signal_Set is array (Natural range <>) of Signal;
+ 
+    Unmasked    : constant Signal_Set := (0 .. 0 => SIGTRAP);
+    Reserved    : constant Signal_Set := (SIGALRM, SIGABRT, SIGKILL, SIGSTOP);
+ 
+    type sigset_t is private;
+ 
+    function sigaddset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigaddset);
+ 
+    function sigdelset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigdelset);
+ 
+    function sigfillset (set : access sigset_t) return int;
+    pragma Import (C, sigfillset);
+ 
+    function sigismember (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigismember);
+ 
+    function sigemptyset (set : access sigset_t) return int;
+    pragma Import (C, sigemptyset);
+ 
+    type union_type_3 is new String (1 .. 116);
+    type siginfo_t is record
+       si_signo     : int;
+       si_errno     : int;
+       si_code      : int;
+       X_data       : union_type_3;
+    end record;
+    for siginfo_t'Size use 8 * 128;
+    pragma Convention (C, siginfo_t);
+ 
+    type struct_sigaction is record
+       sa_handler : System.Address;
+       sa_mask    : sigset_t;
+       sa_flags   : int;
+       sa_signo   : int;
+    end record;
+    pragma Convention (C, struct_sigaction);
+    type struct_sigaction_ptr is access all struct_sigaction;
+ 
+    SIG_BLOCK   : constant := 1;
+    SIG_UNBLOCK : constant := 2;
+    SIG_SETMASK : constant := 3;
+ 
+    SIG_DFL : constant := 0;
+    SIG_IGN : constant := 1;
+ 
+    SA_NODEFER : constant := 8;
+    SA_SIGINFO : constant := 16#40#;
+ 
+    function sigaction
+      (sig  : Signal;
+       act  : struct_sigaction_ptr;
+       oact : struct_sigaction_ptr) return int;
+    pragma Import (C, sigaction);
+ 
+    ----------
+    -- Time --
+    ----------
+ 
+    type timespec is private;
+ 
+    function nanosleep (rqtp, rmtp : access timespec)  return int;
+    pragma Import (C, nanosleep);
+ 
+    type clockid_t is private;
+ 
+    CLOCK_REALTIME : constant clockid_t;
+ 
+    function clock_gettime
+      (clock_id : clockid_t;
+       tp       : access timespec) return int;
+    pragma Import (C, clock_gettime);
+ 
+    function To_Duration (TS : timespec) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timespec (D : Duration) return timespec;
+    pragma Inline (To_Timespec);
+ 
+    type struct_timezone is record
+       tz_minuteswest : int;
+       tz_dsttime     : int;
+    end record;
+    pragma Convention (C, struct_timezone);
+    type struct_timeval is private;
+    --  This is needed on systems that do not have clock_gettime()
+    --  but do have gettimeofday().
+ 
+    function To_Duration (TV : struct_timeval) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timeval (D : Duration) return struct_timeval;
+    pragma Inline (To_Timeval);
+ 
+    -------------------------
+    -- Priority Scheduling --
+    -------------------------
+ 
+    SCHED_FIFO  : constant := 1;
+    SCHED_RR    : constant := 2;
+    SCHED_OTHER : constant := 3;
+    SCHED_LFI   : constant := 5;
+ 
+    -------------
+    -- Process --
+    -------------
+ 
+    type pid_t is private;
+ 
+    function kill (pid : pid_t; sig : Signal) return int;
+    pragma Import (C, kill);
+ 
+    function getpid return pid_t;
+    pragma Import (C, getpid);
+ 
+    BIND_NO_INHERIT  : constant := 1;
+ 
+    function bind_to_cpu
+      (pid       : pid_t;
+       cpu_mask  : unsigned_long;
+       flag      : unsigned_long := BIND_NO_INHERIT) return int;
+    pragma Import (C, bind_to_cpu);
+ 
+    -------------
+    -- Threads --
+    -------------
+ 
+    type Thread_Body is access
+      function (arg : System.Address) return System.Address;
+ 
+    function Thread_Body_Access is new
+      Unchecked_Conversion (System.Address, Thread_Body);
+ 
+    type pthread_t           is private;
+    subtype Thread_Id        is pthread_t;
+ 
+    type pthread_mutex_t     is limited private;
+    type pthread_cond_t      is limited private;
+    type pthread_attr_t      is limited private;
+    type pthread_mutexattr_t is limited private;
+    type pthread_condattr_t  is limited private;
+    type pthread_key_t       is private;
+ 
+    PTHREAD_CREATE_DETACHED : constant := 1;
+ 
+    PTHREAD_SCOPE_PROCESS : constant := 0;
+    PTHREAD_SCOPE_SYSTEM  : constant := 1;
+ 
+    PTHREAD_EXPLICIT_SCHED : constant := 1;
+ 
+    ---------------------------------------
+    -- Nonstandard Thread Initialization --
+    ---------------------------------------
+ 
+    procedure pthread_init;
+    pragma Inline (pthread_init);
+    --  This is a dummy procedure to share some GNULLI files
+ 
+    -------------------------
+    -- POSIX.1c  Section 3 --
+    -------------------------
+ 
+    function sigwait
+      (set : access sigset_t;
+       sig : access Signal) return int;
+    pragma Import (C, sigwait, "__sigwaitd10");
+ 
+    function pthread_kill
+      (thread : pthread_t;
+       sig    : Signal) return int;
+    pragma Import (C, pthread_kill);
+ 
+    type sigset_t_ptr is access all sigset_t;
+ 
+    function pthread_sigmask
+      (how  : int;
+       set  : sigset_t_ptr;
+       oset : sigset_t_ptr) return int;
+    pragma Import (C, pthread_sigmask);
+ 
+    --------------------------
+    -- POSIX.1c  Section 11 --
+    --------------------------
+ 
+    function pthread_mutexattr_init (attr : access pthread_mutexattr_t)
+      return int;
+    pragma Import (C, pthread_mutexattr_init);
+ 
+    function pthread_mutexattr_destroy
+      (attr : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutexattr_destroy);
+ 
+    function pthread_mutex_init
+      (mutex : access pthread_mutex_t;
+       attr  : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutex_init, "__pthread_mutex_init");
+ 
+    function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_destroy, "__pthread_mutex_destroy");
+ 
+    function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_lock, "__pthread_mutex_lock");
+ 
+    function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_unlock, "__pthread_mutex_unlock");
+ 
+    function pthread_condattr_init
+      (attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_condattr_init);
+ 
+    function pthread_condattr_destroy
+      (attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_condattr_destroy);
+ 
+    function pthread_cond_init
+      (cond : access pthread_cond_t;
+       attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_cond_init, "__pthread_cond_init");
+ 
+    function pthread_cond_destroy (cond : access pthread_cond_t) return int;
+    pragma Import (C, pthread_cond_destroy, "__pthread_cond_destroy");
+ 
+    function pthread_cond_signal (cond : access pthread_cond_t) return int;
+    pragma Import (C, pthread_cond_signal, "__pthread_cond_signal");
+ 
+    function pthread_cond_wait
+      (cond  : access pthread_cond_t;
+       mutex : access pthread_mutex_t) return  int;
+    pragma Import (C, pthread_cond_wait, "__pthread_cond_wait");
+ 
+    function pthread_cond_timedwait
+      (cond    : access pthread_cond_t;
+       mutex   : access pthread_mutex_t;
+       abstime : access timespec) return int;
+    pragma Import (C, pthread_cond_timedwait, "__pthread_cond_timedwait");
+ 
+    --------------------------
+    -- POSIX.1c  Section 13 --
+    --------------------------
+ 
+    function pthread_mutexattr_setprotocol
+      (attr     : access pthread_mutexattr_t;
+       protocol : int) return int;
+    pragma Import (C, pthread_mutexattr_setprotocol);
+ 
+    function pthread_mutexattr_setprioceiling
+      (attr     : access pthread_mutexattr_t;
+       prioceiling : int) return int;
+    pragma Import (C, pthread_mutexattr_setprioceiling);
+ 
+    type struct_sched_param is record
+       sched_priority : int;  --  scheduling priority
+    end record;
+ 
+    function pthread_setschedparam
+      (thread : pthread_t;
+       policy : int;
+       param  : access struct_sched_param) return int;
+    pragma Import (C, pthread_setschedparam);
+ 
+    function pthread_attr_setscope
+      (attr            : access pthread_attr_t;
+       contentionscope : int) return int;
+    pragma Import (C, pthread_attr_setscope);
+ 
+    function pthread_attr_setinheritsched
+      (attr            : access pthread_attr_t;
+       inheritsched    : int) return int;
+    pragma Import (C, pthread_attr_setinheritsched,
+      "__pthread_attr_setinheritsched");
+ 
+    function pthread_attr_setschedpolicy
+      (attr : access pthread_attr_t; policy : int) return int;
+    pragma Import (C, pthread_attr_setschedpolicy);
+ 
+    function pthread_attr_setschedparam
+      (attr        : access pthread_attr_t;
+       sched_param : access struct_sched_param) return int;
+    pragma Import (C, pthread_attr_setschedparam);
+ 
+    function sched_yield return int;
+    pragma Import (C, sched_yield);
+ 
+    --------------------------
+    -- P1003.1c  Section 16 --
+    --------------------------
+ 
+    function pthread_attr_init (attributes : access pthread_attr_t)
+      return int;
+    pragma Import (C, pthread_attr_init);
+ 
+    function pthread_attr_destroy (attributes : access pthread_attr_t)
+      return int;
+    pragma Import (C, pthread_attr_destroy);
+ 
+    function pthread_attr_setdetachstate
+      (attr        : access pthread_attr_t;
+       detachstate : int) return int;
+    pragma Import (C, pthread_attr_setdetachstate);
+ 
+    function pthread_attr_setstacksize
+      (attr      : access pthread_attr_t;
+       stacksize : size_t) return int;
+    pragma Import (C, pthread_attr_setstacksize, "__pthread_attr_setstacksize");
+ 
+    function pthread_create
+      (thread        : access pthread_t;
+       attributes    : access pthread_attr_t;
+       start_routine : Thread_Body;
+       arg           : System.Address) return int;
+    pragma Import (C, pthread_create, "__pthread_create");
+ 
+    procedure pthread_exit (status : System.Address);
+    pragma Import (C, pthread_exit, "__pthread_exit");
+ 
+    function pthread_self return pthread_t;
+    pragma Inline (pthread_self);
+ 
+    --------------------------
+    -- POSIX.1c  Section 17 --
+    --------------------------
+ 
+    function pthread_setspecific
+      (key : pthread_key_t; value : System.Address) return int;
+    pragma Import (C, pthread_setspecific, "__pthread_setspecific");
+ 
+    function pthread_getspecific (key : pthread_key_t) return System.Address;
+    pragma Import (C, pthread_getspecific, "__pthread_getspecific");
+ 
+    type destructor_pointer is access procedure (arg : System.Address);
+ 
+    function pthread_key_create
+      (key        : access pthread_key_t;
+       destructor : destructor_pointer) return int;
+    pragma Import (C, pthread_key_create);
+ 
+ private
+ 
+    type sigset_t is new unsigned_long;
+ 
+    type pid_t is new int;
+ 
+    type time_t is new int;
+ 
+    type timespec is record
+       tv_sec  : time_t;
+       tv_nsec : long;
+    end record;
+    pragma Convention (C, timespec);
+ 
+    type clockid_t is new int;
+    CLOCK_REALTIME : constant clockid_t := 1;
+ 
+    type struct_timeval is record
+       tv_sec  : time_t;
+       tv_usec : time_t;
+    end record;
+    pragma Convention (C, struct_timeval);
+ 
+    type unsigned_long_array is array (Natural range <>) of unsigned_long;
+ 
+    type pthread_t is new System.Address;
+ 
+    type pthread_cond_t is record
+       state     : unsigned;
+       valid     : unsigned;
+       name      : System.Address;
+       arg       : unsigned;
+       reserved1 : unsigned;
+       sequence  : unsigned_long;
+       block     : System.Address;
+    end record;
+    pragma Convention (C, pthread_cond_t);
+ 
+    type pthread_attr_t is record
+       valid    : long;
+       name     : System.Address;
+       arg      : unsigned_long;
+       reserved : unsigned_long_array (0 .. 18);
+    end record;
+    pragma Convention (C, pthread_attr_t);
+ 
+    type pthread_mutex_t is record
+       lock     : unsigned;
+       valid    : unsigned;
+       name     : System.Address;
+       arg      : unsigned;
+       depth    : unsigned;
+       sequence : unsigned_long;
+       owner    : unsigned_long;
+       block    : System.Address;
+    end record;
+    for pthread_mutex_t'Size use 8 * 48;
+    pragma Convention (C, pthread_mutex_t);
+ 
+    type pthread_mutexattr_t is record
+       valid    : long;
+       reserved : unsigned_long_array (0 .. 14);
+    end record;
+    pragma Convention (C, pthread_mutexattr_t);
+ 
+    type pthread_condattr_t is record
+       valid    : long;
+       reserved : unsigned_long_array (0 .. 12);
+    end record;
+    pragma Convention (C, pthread_condattr_t);
+ 
+    type pthread_key_t is new unsigned;
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-unixware.adb gcc-4.0.0/gcc/ada/s-osinte-unixware.adb
*** gcc-3.4.3/gcc/ada/s-osinte-unixware.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-unixware.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,182 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   S Y S T E M . O S _ I N T E R F A C E                  --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --           Copyright (C) 1999-2002 Free Software Foundation, Inc.         --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a UnixWare (Native) version of this package
+ 
+ pragma Polling (Off);
+ --  Turn off polling, we do not want ATC polling to take place during
+ --  tasking operations. It causes infinite loops and other problems.
+ 
+ with Interfaces.C;
+ 
+ package body System.OS_Interface is
+ 
+    use Interfaces.C;
+ 
+    -----------------
+    -- To_Duration --
+    -----------------
+ 
+    function To_Duration (TS : timespec) return Duration is
+    begin
+       return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9;
+    end To_Duration;
+ 
+    function To_Duration (TV : struct_timeval) return Duration is
+    begin
+       return Duration (TV.tv_sec) + Duration (TV.tv_usec) / 10#1#E6;
+    end To_Duration;
+ 
+    -----------------
+    -- To_Timespec --
+    -----------------
+ 
+    function To_Timespec (D : Duration) return timespec is
+       S : time_t;
+       F : Duration;
+ 
+    begin
+       S := time_t (Long_Long_Integer (D));
+       F := D - Duration (S);
+ 
+       --  If F has negative value due to a round-up, adjust for positive F
+       --  value.
+ 
+       if F < 0.0 then
+          S := S - 1;
+          F := F + 1.0;
+       end if;
+ 
+       return timespec'(tv_sec => S,
+                        tv_nsec => long (Long_Long_Integer (F * 10#1#E9)));
+    end To_Timespec;
+ 
+    ----------------
+    -- To_Timeval --
+    ----------------
+ 
+    function To_Timeval (D : Duration) return struct_timeval is
+       S : long;
+       F : Duration;
+ 
+    begin
+       S := long (Long_Long_Integer (D));
+       F := D - Duration (S);
+ 
+       --  If F has negative value due to a round-up, adjust for positive F
+       --  value.
+ 
+       if F < 0.0 then
+          S := S - 1;
+          F := F + 1.0;
+       end if;
+ 
+       return
+         struct_timeval'
+           (tv_sec => S,
+            tv_usec => long (Long_Long_Integer (F * 10#1#E6)));
+    end To_Timeval;
+ 
+    -------------------
+    -- clock_gettime --
+    -------------------
+ 
+    function clock_gettime
+      (clock_id : clockid_t;
+       tp       : access timespec)
+       return     int
+    is
+       pragma Warnings (Off, clock_id);
+ 
+       Result : int;
+       tv     : aliased struct_timeval;
+ 
+       function gettimeofday
+         (tv   : access struct_timeval;
+          tz   : System.Address := System.Null_Address)
+          return int;
+       pragma Import (C, gettimeofday, "gettimeofday");
+ 
+    begin
+       Result := gettimeofday (tv'Unchecked_Access);
+       tp.all := To_Timespec (To_Duration (tv));
+       return Result;
+    end clock_gettime;
+ 
+    ---------------------------
+    --  POSIX.1c  Section 3  --
+    ---------------------------
+ 
+    function sigwait (set : access sigset_t; sig : access Signal) return int is
+       Result : int;
+ 
+       function sigwait (set : access sigset_t) return int;
+       pragma Import (C, sigwait, "sigwait");
+ 
+    begin
+       Result := sigwait (set);
+ 
+       if Result < 0 then
+          sig.all := 0;
+          return errno;
+       end if;
+ 
+       sig.all := Signal (Result);
+       return 0;
+    end sigwait;
+ 
+    function pthread_kill (thread : pthread_t; sig : Signal) return int is
+       function pthread_kill_base
+         (thread : access pthread_t; sig : access Signal) return int;
+       pragma Import (C, pthread_kill_base, "pthread_kill");
+ 
+       thr   : aliased pthread_t := thread;
+       signo : aliased Signal := sig;
+ 
+    begin
+       return pthread_kill_base (thr'Unchecked_Access, signo'Unchecked_Access);
+    end pthread_kill;
+ 
+    function Get_Stack_Base (thread : pthread_t) return Address is
+       pragma Warnings (Off, thread);
+ 
+    begin
+       return Null_Address;
+    end Get_Stack_Base;
+ 
+    procedure pthread_init is
+    begin
+       null;
+    end pthread_init;
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-unixware.ads gcc-4.0.0/gcc/ada/s-osinte-unixware.ads
*** gcc-3.4.3/gcc/ada/s-osinte-unixware.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-unixware.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,600 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   S Y S T E M . O S _ I N T E R F A C E                  --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2004, Free Software Foundation, Inc.      --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a UnixWare (Native THREADS) version of this package
+ 
+ --  This package encapsulates all direct interfaces to OS services
+ --  that are needed by children of System.
+ 
+ --  PLEASE DO NOT add any with-clauses to this package or remove the pragma
+ --  Preelaborate. This package is designed to be a bottom-level (leaf) package.
+ 
+ with Interfaces.C;
+ with Unchecked_Conversion;
+ 
+ package System.OS_Interface is
+    pragma Preelaborate;
+ 
+    pragma Linker_Options ("-lthread");
+ 
+    subtype int            is Interfaces.C.int;
+    subtype char           is Interfaces.C.char;
+    subtype short          is Interfaces.C.short;
+    subtype long           is Interfaces.C.long;
+    subtype unsigned       is Interfaces.C.unsigned;
+    subtype unsigned_short is Interfaces.C.unsigned_short;
+    subtype unsigned_long  is Interfaces.C.unsigned_long;
+    subtype unsigned_char  is Interfaces.C.unsigned_char;
+    subtype plain_char     is Interfaces.C.plain_char;
+    subtype size_t         is Interfaces.C.size_t;
+ 
+    -----------
+    -- Errno --
+    -----------
+ 
+    function errno return int;
+    pragma Import (C, errno, "__get_errno");
+ 
+    EAGAIN    : constant := 11;
+    EINTR     : constant := 4;
+    EINVAL    : constant := 22;
+    ENOMEM    : constant := 12;
+    ETIMEDOUT : constant := 145;
+ 
+    -------------
+    -- Signals --
+    -------------
+ 
+    Max_Interrupt : constant := 34;
+    type Signal is new int range 0 .. Max_Interrupt;
+    for Signal'Size use int'Size;
+ 
+    SIGHUP      : constant := 1; --  hangup
+    SIGINT      : constant := 2; --  interrupt (rubout)
+    SIGQUIT     : constant := 3; --  quit (ASCD FS)
+    SIGILL      : constant := 4; --  illegal instruction (not reset)
+    SIGTRAP     : constant := 5; --  trace trap (not reset)
+    SIGIOT      : constant := 6; --  IOT instruction
+    SIGABRT     : constant := 6; --  used by abort, replace SIGIOT in the future
+    SIGEMT      : constant := 7; --  EMT instruction
+    SIGFPE      : constant := 8; --  floating point exception
+    SIGKILL     : constant := 9; --  kill (cannot be caught or ignored)
+    SIGBUS      : constant := 10; --  bus error
+    SIGSEGV     : constant := 11; --  segmentation violation
+    SIGSYS      : constant := 12; --  bad argument to system call
+    SIGPIPE     : constant := 13; --  write on a pipe with no one to read it
+    SIGALRM     : constant := 14; --  alarm clock
+    SIGTERM     : constant := 15; --  software termination signal from kill
+    SIGUSR1     : constant := 16; --  user defined signal 1
+    SIGUSR2     : constant := 17; --  user defined signal 2
+    SIGCLD      : constant := 18; --  alias for SIGCHLD
+    SIGCHLD     : constant := 18; --  child status change
+    SIGPWR      : constant := 19; --  power-fail restart
+    SIGWINCH    : constant := 20; --  window size change
+    SIGURG      : constant := 21; --  urgent condition on IO channel
+    SIGPOLL     : constant := 22; --  pollable event occurred
+    SIGIO       : constant := 22; --  I/O possible (Solaris SIGPOLL alias)
+    SIGSTOP     : constant := 23; --  stop (cannot be caught or ignored)
+    SIGTSTP     : constant := 24; --  user stop requested from tty
+    SIGCONT     : constant := 25; --  stopped process has been continued
+    SIGTTIN     : constant := 26; --  background tty read attempted
+    SIGTTOU     : constant := 27; --  background tty write attempted
+    SIGVTALRM   : constant := 28; --  virtual timer expired
+    SIGPROF     : constant := 29; --  profiling timer expired
+    SIGXCPU     : constant := 30; --  CPU time limit exceeded
+    SIGXFSZ     : constant := 31; --  filesize limit exceeded
+    SIGWAITING  : constant := 32; --  all LWPs blocked interruptibly notific.
+    SIGLWP      : constant := 33; --  signal reserved for thread lib impl.
+    SIGAIO      : constant := 34; --  Asynchronous I/O signal
+ 
+    SIGADAABORT : constant := SIGABRT;
+    --  Change this if you want to use another signal for task abort.
+    --  SIGTERM might be a good one.
+ 
+    type Signal_Set is array (Natural range <>) of Signal;
+ 
+    Unmasked    : constant Signal_Set :=
+      (SIGTRAP, SIGLWP, SIGWAITING, SIGTTIN, SIGTTOU, SIGTSTP, SIGPROF);
+    Reserved    : constant Signal_Set := (SIGABRT, SIGKILL, SIGSTOP);
+ 
+    type sigset_t is private;
+ 
+    function sigaddset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigaddset, "sigaddset");
+ 
+    function sigdelset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigdelset, "sigdelset");
+ 
+    function sigfillset (set : access sigset_t) return int;
+    pragma Import (C, sigfillset, "sigfillset");
+ 
+    function sigismember (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigismember, "sigismember");
+ 
+    function sigemptyset (set : access sigset_t) return int;
+    pragma Import (C, sigemptyset, "sigemptyset");
+ 
+    type struct_sigaction is record
+       sa_flags   : int;
+       sa_handler : System.Address;
+       sa_mask    : sigset_t;
+       sa_resv1   : int;
+       sa_resv2   : int;
+    end record;
+    pragma Convention (C, struct_sigaction);
+    type struct_sigaction_ptr is access all struct_sigaction;
+ 
+    SIG_BLOCK   : constant := 1;
+    SIG_UNBLOCK : constant := 2;
+    SIG_SETMASK : constant := 3;
+ 
+    SIG_DFL : constant := 0;
+    SIG_IGN : constant := 1;
+    --  SIG_ERR : constant := -1;
+    --  not used
+ 
+    function sigaction
+      (sig  : Signal;
+       act  : struct_sigaction_ptr;
+       oact : struct_sigaction_ptr) return int;
+    pragma Import (C, sigaction, "sigaction");
+ 
+    ----------
+    -- Time --
+    ----------
+ 
+    Time_Slice_Supported : constant Boolean := False;
+    --  Indicates wether time slicing is supported
+ 
+    type timespec is private;
+ 
+    type clockid_t is private;
+ 
+    CLOCK_REALTIME : constant clockid_t;
+ 
+    function clock_gettime
+      (clock_id : clockid_t;
+       tp       : access timespec) return int;
+    --  UnixWare threads don't have clock_gettime
+    --  We instead use gettimeofday()
+ 
+    function To_Duration (TS : timespec) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timespec (D : Duration) return timespec;
+    pragma Inline (To_Timespec);
+ 
+    type struct_timezone is record
+       tz_minuteswest : int;
+       tz_dsttime     : int;
+    end record;
+    pragma Convention (C, struct_timezone);
+    type struct_timezone_ptr is access all struct_timezone;
+ 
+    type struct_timeval is private;
+    --  This is needed on systems that do not have clock_gettime()
+    --  but do have gettimeofday().
+ 
+    function To_Duration (TV : struct_timeval) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timeval (D : Duration) return struct_timeval;
+    pragma Inline (To_Timeval);
+ 
+    -------------------------
+    -- Priority Scheduling --
+    -------------------------
+ 
+    SCHED_FIFO  : constant := 2;
+    SCHED_RR    : constant := 3;
+    SCHED_OTHER : constant := 1;
+ 
+    -------------
+    -- Process --
+    -------------
+ 
+    type pid_t is private;
+ 
+    function kill (pid : pid_t; sig : Signal) return int;
+    pragma Import (C, kill, "kill");
+ 
+    function getpid return pid_t;
+    pragma Import (C, getpid, "getpid");
+ 
+    ---------
+    -- LWP --
+    ---------
+ 
+    function lwp_self return System.Address;
+    pragma Import (C, lwp_self, "_lwp_self");
+ 
+    -------------
+    -- Threads --
+    -------------
+ 
+    type Thread_Body is access
+      function (arg : System.Address) return System.Address;
+ 
+    function Thread_Body_Access is new
+      Unchecked_Conversion (System.Address, Thread_Body);
+ 
+    type pthread_t           is private;
+    subtype Thread_Id        is pthread_t;
+ 
+    type pthread_mutex_t     is limited private;
+    type pthread_cond_t      is limited private;
+    type pthread_attr_t      is limited private;
+    type pthread_mutexattr_t is limited private;
+    type pthread_condattr_t  is limited private;
+    type pthread_key_t       is private;
+ 
+    PTHREAD_CREATE_DETACHED : constant := 0;
+ 
+    -----------
+    -- Stack --
+    -----------
+ 
+    Stack_Base_Available : constant Boolean := False;
+    --  Indicates wether the stack base is available on this target.
+ 
+    function Get_Stack_Base (thread : pthread_t) return Address;
+    pragma Inline (Get_Stack_Base);
+    --  returns the stack base of the specified thread.
+    --  Only call this function when Stack_Base_Available is True.
+ 
+    function Get_Page_Size return size_t;
+    function Get_Page_Size return Address;
+    pragma Import (C, Get_Page_Size, "getpagesize");
+    --  returns the size of a page, or 0 if this is not relevant on this
+    --  target
+ 
+    PROT_NONE  : constant := 0;
+    PROT_READ  : constant := 1;
+    PROT_WRITE : constant := 2;
+    PROT_EXEC  : constant := 4;
+    PROT_USER  : constant := 8;
+    PROT_ALL   : constant := PROT_READ + PROT_WRITE + PROT_EXEC + PROT_USER;
+ 
+    PROT_ON    : constant := PROT_READ;
+    PROT_OFF   : constant := PROT_ALL;
+ 
+    function mprotect (addr : Address; len : size_t; prot : int) return int;
+    pragma Import (C, mprotect);
+ 
+    -------------------------
+    -- POSIX.1c  Section 3 --
+    -------------------------
+ 
+    function sigwait (set : access sigset_t; sig : access Signal) return int;
+    pragma Inline (sigwait);
+    --  UnixWare provides a non standard sigwait
+ 
+    function pthread_kill (thread : pthread_t; sig : Signal) return int;
+    pragma Inline (pthread_kill);
+    --  UnixWare provides a non standard pthread_kill
+ 
+    type sigset_t_ptr is access all sigset_t;
+ 
+    function pthread_sigmask
+      (how  : int;
+       set  : sigset_t_ptr;
+       oset : sigset_t_ptr) return int;
+    pragma Import (C, pthread_sigmask, "pthread_sigmask");
+ 
+    --------------------------
+    -- POSIX.1c  Section 11 --
+    --------------------------
+ 
+    function pthread_mutexattr_init
+      (attr : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
+ 
+    function pthread_mutexattr_destroy
+      (attr : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
+ 
+    function pthread_mutex_init
+      (mutex : access pthread_mutex_t;
+       attr  : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
+ 
+    function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
+ 
+    function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_lock, "pthread_mutex_lock");
+ 
+    function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_unlock, "pthread_mutex_unlock");
+ 
+    function pthread_condattr_init
+      (attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
+ 
+    function pthread_condattr_destroy
+      (attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
+ 
+    function pthread_cond_init
+      (cond : access pthread_cond_t;
+       attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_cond_init, "pthread_cond_init");
+ 
+    function pthread_cond_destroy (cond : access pthread_cond_t) return int;
+    pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
+ 
+    function pthread_cond_signal (cond : access pthread_cond_t) return int;
+    pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
+ 
+    function pthread_cond_wait
+      (cond  : access pthread_cond_t;
+       mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_cond_wait, "pthread_cond_wait");
+ 
+    function pthread_cond_timedwait
+      (cond    : access pthread_cond_t;
+       mutex   : access pthread_mutex_t;
+       abstime : access timespec) return int;
+    pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait");
+ 
+    Relative_Timed_Wait : constant Boolean := False;
+    --  pthread_cond_timedwait requires an absolute delay time
+ 
+    --------------------------
+    -- POSIX.1c  Section 13 --
+    --------------------------
+ 
+    PTHREAD_PRIO_NONE    : constant := 1;
+    PTHREAD_PRIO_INHERIT : constant := 2;
+    PTHREAD_PRIO_PROTECT : constant := 3;
+ 
+    function pthread_mutexattr_setprotocol
+      (attr     : access pthread_mutexattr_t;
+       protocol : int) return int;
+    pragma Import (C, pthread_mutexattr_setprotocol);
+ 
+    function pthread_mutexattr_setprioceiling
+      (attr     : access pthread_mutexattr_t;
+       prioceiling : int) return int;
+    pragma Import (C, pthread_mutexattr_setprioceiling);
+ 
+    type sched_union is record
+       sched_fifo    : int;
+       sched_fcfs    : int;
+       sched_other   : int;
+       sched_ts      : int;
+       policy_params : long;
+    end record;
+ 
+    type struct_sched_param is record
+       sched_priority    : int;
+       sched_other_stuff : sched_union;
+    end record;
+ 
+    function pthread_setschedparam
+      (thread : pthread_t;
+       policy : int;
+       param  : access struct_sched_param) return int;
+    pragma Import (C, pthread_setschedparam, "pthread_setschedparam");
+ 
+    function pthread_attr_setscope
+      (attr            : access pthread_attr_t;
+       contentionscope : int) return int;
+    pragma Import (C, pthread_attr_setscope, "pthread_attr_setscope");
+ 
+    function pthread_attr_setinheritsched
+      (attr            : access pthread_attr_t;
+       inheritsched : int) return int;
+    pragma Import (C, pthread_attr_setinheritsched);
+ 
+    function pthread_attr_setschedpolicy
+      (attr   : access pthread_attr_t;
+       policy : int) return int;
+    pragma Import (C, pthread_attr_setschedpolicy);
+ 
+    function sched_yield return int;
+    pragma Import (C, sched_yield, "sched_yield");
+ 
+    ---------------------------
+    -- P1003.1c - Section 16 --
+    ---------------------------
+ 
+    function pthread_attr_init (attributes : access pthread_attr_t) return int;
+    pragma Import (C, pthread_attr_init, "pthread_attr_init");
+ 
+    function pthread_attr_destroy
+      (attributes : access pthread_attr_t) return int;
+    pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
+ 
+    function pthread_attr_setdetachstate
+      (attr        : access pthread_attr_t;
+       detachstate : int) return int;
+    pragma Import (C, pthread_attr_setdetachstate);
+ 
+    function pthread_attr_setstacksize
+      (attr      : access pthread_attr_t;
+       stacksize : size_t) return int;
+    pragma Import (C, pthread_attr_setstacksize);
+ 
+    function pthread_create
+      (thread        : access pthread_t;
+       attributes    : access pthread_attr_t;
+       start_routine : Thread_Body;
+       arg           : System.Address) return int;
+    pragma Import (C, pthread_create, "pthread_create");
+ 
+    procedure pthread_exit (status : System.Address);
+    pragma Import (C, pthread_exit, "pthread_exit");
+ 
+    function pthread_self return pthread_t;
+    pragma Import (C, pthread_self, "pthread_self");
+ 
+    --------------------------
+    -- POSIX.1c  Section 17 --
+    --------------------------
+ 
+    function pthread_setspecific
+      (key   : pthread_key_t;
+       value : System.Address) return int;
+    pragma Import (C, pthread_setspecific, "pthread_setspecific");
+ 
+    function pthread_getspecific (key : pthread_key_t) return System.Address;
+    pragma Import (C, pthread_getspecific, "pthread_getspecific");
+ 
+    type destructor_pointer is access procedure (arg : System.Address);
+ 
+    function pthread_key_create
+      (key        : access pthread_key_t;
+       destructor : destructor_pointer) return int;
+    pragma Import (C, pthread_key_create, "pthread_key_create");
+ 
+    procedure pthread_init;
+    --  This is a dummy procedure to share some GNULLI files
+ 
+ private
+ 
+    type sigbit_array is array (1 .. 4) of unsigned;
+    type sigset_t is record
+       sa_sigbits : sigbit_array;
+    end record;
+    pragma Convention (C_Pass_By_Copy, sigset_t);
+ 
+    type pid_t is new unsigned;
+ 
+    type time_t is new long;
+ 
+    type timespec is record
+       tv_sec       : time_t;
+       tv_nsec      : long;
+    end record;
+    pragma Convention (C, timespec);
+ 
+    type clockid_t is new int;
+    CLOCK_REALTIME : constant clockid_t := 0;
+ 
+    type struct_timeval is record
+       tv_sec       : long;
+       tv_usec      : long;
+    end record;
+    pragma Convention (C, struct_timeval);
+ 
+    type pthread_attr_t is record
+       pt_attr_status          : int;
+       pt_attr_stacksize       : size_t;
+       pt_attr_stackaddr       : System.Address;
+       pt_attr_detachstate     : int;
+       pt_attr_contentionscope : int;
+       pt_attr_inheritsched    : int;
+       pt_attr_schedpolicy     : int;
+       pt_attr_sched_param     : struct_sched_param;
+       pt_attr_tlflags         : int;
+    end record;
+    pragma Convention (C, pthread_attr_t);
+ 
+    type pthread_condattr_t is record
+       pt_condattr_status  : int;
+       pt_condattr_pshared : int;
+    end record;
+    pragma Convention (C, pthread_condattr_t);
+ 
+    type pthread_mutexattr_t is record
+       pt_mutexattr_status  : int;
+       pt_mutexattr_pshared : int;
+       pt_mutexattr_type    : int;
+    end record;
+    pragma Convention (C, pthread_mutexattr_t);
+ 
+    type thread_t is new long;
+    type pthread_t is new thread_t;
+ 
+    type thrq_elt_t;
+    type thrq_elt_t_ptr is access all thrq_elt_t;
+ 
+    type thrq_elt_t is record
+       thrq_next : thrq_elt_t_ptr;
+       thrq_prev : thrq_elt_t_ptr;
+    end record;
+    pragma Convention (C, thrq_elt_t);
+ 
+    type lwp_mutex_t is record
+       wanted : char;
+       lock   : unsigned_char;
+    end record;
+    pragma Convention (C, lwp_mutex_t);
+    pragma Volatile (lwp_mutex_t);
+ 
+    type mutex_t is record
+       m_lmutex    : lwp_mutex_t;
+       m_sync_lock : lwp_mutex_t;
+       m_type      : int;
+       m_sleepq    : thrq_elt_t;
+       filler1     : int;
+       filler2     : int;
+    end record;
+    pragma Convention (C, mutex_t);
+    pragma Volatile (mutex_t);
+ 
+    type pthread_mutex_t is record
+       pt_mutex_mutex : mutex_t;
+       pt_mutex_pid   : pid_t;
+       pt_mutex_owner : thread_t;
+       pt_mutex_depth : int;
+       pt_mutex_attr  : pthread_mutexattr_t;
+    end record;
+    pragma Convention (C, pthread_mutex_t);
+ 
+    type lwp_cond_t is record
+       wanted : char;
+    end record;
+    pragma Convention (C, lwp_cond_t);
+    pragma Volatile (lwp_cond_t);
+ 
+    type cond_t is record
+       c_lcond     : lwp_cond_t;
+       c_sync_lock : lwp_mutex_t;
+       c_type      : int;
+       c_syncq     : thrq_elt_t;
+    end record;
+    pragma Convention (C, cond_t);
+    pragma Volatile (cond_t);
+ 
+    type pthread_cond_t is record
+       pt_cond_cond : cond_t;
+       pt_cond_attr : pthread_condattr_t;
+    end record;
+    pragma Convention (C, pthread_cond_t);
+ 
+    type pthread_key_t is new unsigned;
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-vms.adb gcc-4.0.0/gcc/ada/s-osinte-vms.adb
*** gcc-3.4.3/gcc/ada/s-osinte-vms.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-vms.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,78 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   S Y S T E M . O S _ I N T E R F A C E                  --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2003, Ada Core Technologies               --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a OpenVMS/Alpha version of this package.
+ 
+ --  This package encapsulates all direct interfaces to OS services
+ --  that are needed by children of System.
+ 
+ pragma Polling (Off);
+ --  Turn off polling, we do not want ATC polling to take place during
+ --  tasking operations. It causes infinite loops and other problems.
+ 
+ with Interfaces.C; use Interfaces.C;
+ with System.Machine_Code; use System.Machine_Code;
+ 
+ package body System.OS_Interface is
+ 
+    ------------------
+    -- pthread_self --
+    ------------------
+ 
+    function pthread_self return pthread_t is
+       use ASCII;
+       Self : pthread_t;
+ 
+    begin
+       Asm ("call_pal 0x9e" & LF & HT &
+            "bis $31, $0, %0",
+            Outputs => pthread_t'Asm_Output ("=r", Self),
+            Clobber => "$0");
+       return Self;
+    end pthread_self;
+ 
+    -----------------
+    -- sched_yield --
+    -----------------
+ 
+    function sched_yield return int is
+       procedure sched_yield_base;
+       pragma Import (C, sched_yield_base, "PTHREAD_YIELD_NP");
+ 
+    begin
+       sched_yield_base;
+       return 0;
+    end sched_yield;
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-vms.ads gcc-4.0.0/gcc/ada/s-osinte-vms.ads
*** gcc-3.4.3/gcc/ada/s-osinte-vms.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-vms.ads	Tue Jul  6 13:57:30 2004
***************
*** 0 ****
--- 1,646 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   S Y S T E M . O S _ I N T E R F A C E                  --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2004, Free Software Foundation, Inc.      --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a OpenVMS/Alpha version of this package
+ 
+ --  This package encapsulates all direct interfaces to OS services
+ --  that are needed by children of System.
+ 
+ --  PLEASE DO NOT add any with-clauses to this package or remove the pragma
+ --  Preelaborate. This package is designed to be a bottom-level (leaf) package.
+ 
+ with Interfaces.C;
+ with Unchecked_Conversion;
+ 
+ package System.OS_Interface is
+    pragma Preelaborate;
+ 
+    pragma Linker_Options ("--for-linker=sys$library:pthread$rtl.exe");
+    --  Link in the DEC threads library.
+ 
+    --  pragma Linker_Options ("--for-linker=/threads_enable");
+    --  Enable upcalls and multiple kernel threads.
+ 
+    subtype int            is Interfaces.C.int;
+    subtype short          is Interfaces.C.short;
+    subtype long           is Interfaces.C.long;
+    subtype unsigned       is Interfaces.C.unsigned;
+    subtype unsigned_short is Interfaces.C.unsigned_short;
+    subtype unsigned_long  is Interfaces.C.unsigned_long;
+    subtype unsigned_char  is Interfaces.C.unsigned_char;
+    subtype plain_char     is Interfaces.C.plain_char;
+    subtype size_t         is Interfaces.C.size_t;
+ 
+    -----------------------------
+    -- Signals (Interrupt IDs) --
+    -----------------------------
+ 
+    --  Type signal has an arbitrary limit of 31
+ 
+    Max_Interrupt : constant := 31;
+    type Signal is new unsigned range 0 .. Max_Interrupt;
+    for Signal'Size use unsigned'Size;
+ 
+    type sigset_t is array (Signal) of Boolean;
+    pragma Pack (sigset_t);
+ 
+    --  Interrupt_Number_Type
+    --  Unsigned long integer denoting the number of an interrupt
+ 
+    subtype Interrupt_Number_Type is unsigned_long;
+ 
+    --  OpenVMS system services return values of type Cond_Value_Type.
+ 
+    subtype Cond_Value_Type is unsigned_long;
+    subtype Short_Cond_Value_Type is unsigned_short;
+ 
+    type IO_Status_Block_Type is record
+       Status   : Short_Cond_Value_Type;
+       Count    : unsigned_short;
+       Dev_Info : unsigned_long;
+    end record;
+ 
+    type AST_Handler is access procedure (Param : Address);
+    No_AST_Handler : constant AST_Handler := null;
+ 
+    CMB_M_READONLY  : constant := 16#00000001#;
+    CMB_M_WRITEONLY : constant := 16#00000002#;
+    AGN_M_READONLY  : constant := 16#00000001#;
+    AGN_M_WRITEONLY : constant := 16#00000002#;
+ 
+    IO_WRITEVBLK : constant := 48;  --  WRITE VIRTUAL BLOCK
+    IO_READVBLK  : constant := 49;  --  READ VIRTUAL BLOCK
+ 
+    ----------------
+    -- Sys_Assign --
+    ----------------
+    --
+    --  Assign I/O Channel
+    --
+    --  Status = returned status
+    --  Devnam = address  of  device  name  or  logical  name   string
+    --               descriptor
+    --  Chan   = address of word to receive channel number assigned
+    --  Acmode = access mode associated with channel
+    --  Mbxnam = address of mailbox logical name string descriptor, if
+    --               mailbox associated with device
+    --  Flags  = optional channel flags longword for specifying options
+    --           for the $ASSIGN operation
+    --
+ 
+    procedure Sys_Assign
+      (Status : out Cond_Value_Type;
+       Devnam : in String;
+       Chan   : out unsigned_short;
+       Acmode : in unsigned_short := 0;
+       Mbxnam : in String := String'Null_Parameter;
+       Flags  : in unsigned_long := 0);
+    pragma Interface (External, Sys_Assign);
+    pragma Import_Valued_Procedure
+      (Sys_Assign, "SYS$ASSIGN",
+       (Cond_Value_Type, String,         unsigned_short,
+        unsigned_short,  String,         unsigned_long),
+       (Value,           Descriptor (s), Reference,
+        Value,           Descriptor (s), Value),
+       Flags);
+ 
+    ----------------
+    -- Sys_Cantim --
+    ----------------
+    --
+    --  Cancel Timer
+    --
+    --  Status  = returned status
+    --  Reqidt  = ID of timer to be cancelled
+    --  Acmode  = Access mode
+    --
+    procedure Sys_Cantim
+      (Status : out Cond_Value_Type;
+       Reqidt : in Address;
+       Acmode : in unsigned);
+    pragma Interface (External, Sys_Cantim);
+    pragma Import_Valued_Procedure
+      (Sys_Cantim, "SYS$CANTIM",
+       (Cond_Value_Type, Address, unsigned),
+       (Value,           Value,   Value));
+ 
+    ----------------
+    -- Sys_Crembx --
+    ----------------
+    --
+    --  Create mailbox
+    --
+    --     Status  = returned status
+    --     Prmflg  = permanent flag
+    --     Chan    = channel
+    --     Maxmsg  = maximum message
+    --     Bufquo  = buufer quote
+    --     Promsk  = protection mast
+    --     Acmode  = access mode
+    --     Lognam  = logical name
+    --     Flags   = flags
+    --
+    procedure Sys_Crembx
+      (Status : out Cond_Value_Type;
+       Prmflg : in Boolean;
+       Chan   : out unsigned_short;
+       Maxmsg : in unsigned_long := 0;
+       Bufquo : in unsigned_long := 0;
+       Promsk : in unsigned_short := 0;
+       Acmode : in unsigned_short := 0;
+       Lognam : in String;
+       Flags  : in unsigned_long := 0);
+    pragma Interface (External, Sys_Crembx);
+    pragma Import_Valued_Procedure
+      (Sys_Crembx, "SYS$CREMBX",
+       (Cond_Value_Type, Boolean,        unsigned_short,
+        unsigned_long,   unsigned_long,  unsigned_short,
+        unsigned_short,  String,         unsigned_long),
+       (Value,           Value,          Reference,
+        Value,           Value,          Value,
+        Value,           Descriptor (s), Value));
+ 
+    -------------
+    -- Sys_QIO --
+    -------------
+    --
+    --    Queue I/O
+    --
+    --     Status = Returned status of call
+    --     EFN    = event flag to be set when I/O completes
+    --     Chan   = channel
+    --     Func   = function
+    --     Iosb   = I/O status block
+    --     Astadr = system trap to be generated when I/O completes
+    --     Astprm = AST parameter
+    --     P1-6   = optional parameters
+ 
+    procedure Sys_QIO
+      (Status : out Cond_Value_Type;
+       EFN    : in unsigned_long := 0;
+       Chan   : in unsigned_short;
+       Func   : in unsigned_long := 0;
+       Iosb   : out IO_Status_Block_Type;
+       Astadr : in AST_Handler := No_AST_Handler;
+       Astprm : in Address := Null_Address;
+       P1     : in  unsigned_long := 0;
+       P2     : in  unsigned_long := 0;
+       P3     : in  unsigned_long := 0;
+       P4     : in  unsigned_long := 0;
+       P5     : in  unsigned_long := 0;
+       P6     : in  unsigned_long := 0);
+ 
+    procedure Sys_QIO
+      (Status : out Cond_Value_Type;
+       EFN    : in unsigned_long := 0;
+       Chan   : in unsigned_short;
+       Func   : in unsigned_long := 0;
+       Iosb   : in Address := Null_Address;
+       Astadr : in AST_Handler := No_AST_Handler;
+       Astprm : in Address := Null_Address;
+       P1     : in  unsigned_long := 0;
+       P2     : in  unsigned_long := 0;
+       P3     : in  unsigned_long := 0;
+       P4     : in  unsigned_long := 0;
+       P5     : in  unsigned_long := 0;
+       P6     : in  unsigned_long := 0);
+ 
+    pragma Interface (External, Sys_QIO);
+    pragma Import_Valued_Procedure
+      (Sys_QIO, "SYS$QIO",
+       (Cond_Value_Type,      unsigned_long, unsigned_short, unsigned_long,
+        IO_Status_Block_Type, AST_Handler,   Address,
+        unsigned_long,        unsigned_long, unsigned_long,
+        unsigned_long,        unsigned_long, unsigned_long),
+       (Value,                Value,         Value,          Value,
+        Reference,            Value,         Value,
+        Value,                Value,         Value,
+        Value,                Value,         Value));
+ 
+    pragma Import_Valued_Procedure
+      (Sys_QIO, "SYS$QIO",
+       (Cond_Value_Type, unsigned_long, unsigned_short, unsigned_long,
+        Address,         AST_Handler,   Address,
+        unsigned_long,   unsigned_long, unsigned_long,
+        unsigned_long,   unsigned_long, unsigned_long),
+       (Value,           Value,         Value,          Value,
+        Value,           Value,         Value,
+        Value,           Value,         Value,
+        Value,           Value,         Value));
+ 
+    ----------------
+    -- Sys_Setimr --
+    ----------------
+    --
+    --    Set Timer
+    --
+    --     Status = Returned status of call
+    --     EFN    = event flag to be set when timer expires
+    --     Tim    = expiration time
+    --     AST    = system trap to be generated when timer expires
+    --     Redidt = returned ID of timer (e.g. to cancel timer)
+    --     Flags  = flags
+    --
+    procedure Sys_Setimr
+      (Status : out Cond_Value_Type;
+       EFN    : in unsigned_long;
+       Tim    : in Long_Integer;
+       AST    : in AST_Handler;
+       Reqidt : in Address;
+       Flags  : in unsigned_long);
+    pragma Interface (External, Sys_Setimr);
+    pragma Import_Valued_Procedure
+      (Sys_Setimr, "SYS$SETIMR",
+       (Cond_Value_Type, unsigned_long,     Long_Integer,
+        AST_Handler,     Address,           unsigned_long),
+       (Value,           Value,             Reference,
+        Value,           Value,             Value));
+ 
+    Interrupt_ID_0   : constant  := 0;
+    Interrupt_ID_1   : constant  := 1;
+    Interrupt_ID_2   : constant  := 2;
+    Interrupt_ID_3   : constant  := 3;
+    Interrupt_ID_4   : constant  := 4;
+    Interrupt_ID_5   : constant  := 5;
+    Interrupt_ID_6   : constant  := 6;
+    Interrupt_ID_7   : constant  := 7;
+    Interrupt_ID_8   : constant  := 8;
+    Interrupt_ID_9   : constant  := 9;
+    Interrupt_ID_10  : constant  := 10;
+    Interrupt_ID_11  : constant  := 11;
+    Interrupt_ID_12  : constant  := 12;
+    Interrupt_ID_13  : constant  := 13;
+    Interrupt_ID_14  : constant  := 14;
+    Interrupt_ID_15  : constant  := 15;
+    Interrupt_ID_16  : constant  := 16;
+    Interrupt_ID_17  : constant  := 17;
+    Interrupt_ID_18  : constant  := 18;
+    Interrupt_ID_19  : constant  := 19;
+    Interrupt_ID_20  : constant  := 20;
+    Interrupt_ID_21  : constant  := 21;
+    Interrupt_ID_22  : constant  := 22;
+    Interrupt_ID_23  : constant  := 23;
+    Interrupt_ID_24  : constant  := 24;
+    Interrupt_ID_25  : constant  := 25;
+    Interrupt_ID_26  : constant  := 26;
+    Interrupt_ID_27  : constant  := 27;
+    Interrupt_ID_28  : constant  := 28;
+    Interrupt_ID_29  : constant  := 29;
+    Interrupt_ID_30  : constant  := 30;
+    Interrupt_ID_31  : constant  := 31;
+ 
+    -----------
+    -- Errno --
+    -----------
+ 
+    function errno return int;
+    pragma Import (C, errno, "__get_errno");
+ 
+    EINTR  : constant := 4;   --  Interrupted system call
+    EAGAIN : constant := 11;  --  No more processes
+    ENOMEM : constant := 12;  --  Not enough core
+ 
+    -------------------------
+    -- Priority Scheduling --
+    -------------------------
+ 
+    SCHED_FIFO  : constant := 1;
+    SCHED_RR    : constant := 2;
+    SCHED_OTHER : constant := 3;
+    SCHED_BG    : constant := 4;
+    SCHED_LFI   : constant := 5;
+    SCHED_LRR   : constant := 6;
+ 
+    -------------
+    -- Process --
+    -------------
+ 
+    type pid_t is private;
+ 
+    function kill (pid : pid_t; sig : Signal) return int;
+    pragma Import (C, kill);
+ 
+    function getpid return pid_t;
+    pragma Import (C, getpid);
+ 
+    -------------
+    -- Threads --
+    -------------
+ 
+    type Thread_Body is access
+      function (arg : System.Address) return System.Address;
+ 
+    function Thread_Body_Access is new
+      Unchecked_Conversion (System.Address, Thread_Body);
+ 
+    type pthread_t           is private;
+    subtype Thread_Id        is pthread_t;
+ 
+    type pthread_mutex_t     is limited private;
+    type pthread_cond_t      is limited private;
+    type pthread_attr_t      is limited private;
+    type pthread_mutexattr_t is limited private;
+    type pthread_condattr_t  is limited private;
+    type pthread_key_t       is private;
+ 
+    PTHREAD_CREATE_JOINABLE     : constant := 0;
+    PTHREAD_CREATE_DETACHED     : constant := 1;
+ 
+    PTHREAD_CANCEL_DISABLE      : constant := 0;
+    PTHREAD_CANCEL_ENABLE       : constant := 1;
+ 
+    PTHREAD_CANCEL_DEFERRED     : constant := 0;
+    PTHREAD_CANCEL_ASYNCHRONOUS : constant := 1;
+ 
+    --  Don't use ERRORCHECK mutexes, they don't work when a thread is not
+    --  the owner.  AST's, at least, unlock others threads mutexes. Even
+    --  if the error is ignored, they don't work.
+    PTHREAD_MUTEX_NORMAL_NP     : constant := 0;
+    PTHREAD_MUTEX_RECURSIVE_NP  : constant := 1;
+    PTHREAD_MUTEX_ERRORCHECK_NP : constant := 2;
+ 
+    PTHREAD_INHERIT_SCHED       : constant := 0;
+    PTHREAD_EXPLICIT_SCHED      : constant := 1;
+ 
+    function pthread_cancel (thread : pthread_t) return int;
+    pragma Import (C, pthread_cancel, "PTHREAD_CANCEL");
+ 
+    procedure pthread_testcancel;
+    pragma Import (C, pthread_testcancel, "PTHREAD_TESTCANCEL");
+ 
+    function pthread_setcancelstate
+      (newstate : int; oldstate : access int) return int;
+    pragma Import (C, pthread_setcancelstate, "PTHREAD_SETCANCELSTATE");
+ 
+    function pthread_setcanceltype
+      (newtype : int; oldtype : access int) return int;
+    pragma Import (C, pthread_setcanceltype, "PTHREAD_SETCANCELTYPE");
+ 
+    -------------------------
+    -- POSIX.1c  Section 3 --
+    -------------------------
+ 
+    function pthread_lock_global_np return int;
+    pragma Import (C, pthread_lock_global_np, "PTHREAD_LOCK_GLOBAL_NP");
+ 
+    function pthread_unlock_global_np return int;
+    pragma Import (C, pthread_unlock_global_np, "PTHREAD_UNLOCK_GLOBAL_NP");
+ 
+    --------------------------
+    -- POSIX.1c  Section 11 --
+    --------------------------
+ 
+    function pthread_mutexattr_init
+      (attr : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutexattr_init, "PTHREAD_MUTEXATTR_INIT");
+ 
+    function pthread_mutexattr_destroy
+      (attr : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutexattr_destroy, "PTHREAD_MUTEXATTR_DESTROY");
+ 
+    function pthread_mutexattr_settype_np
+      (attr      : access pthread_mutexattr_t;
+       mutextype : int) return int;
+    pragma Import (C, pthread_mutexattr_settype_np,
+                      "PTHREAD_MUTEXATTR_SETTYPE_NP");
+ 
+    function pthread_mutex_init
+      (mutex : access pthread_mutex_t;
+       attr  : access pthread_mutexattr_t) return int;
+    pragma Import (C, pthread_mutex_init, "PTHREAD_MUTEX_INIT");
+ 
+    function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_destroy, "PTHREAD_MUTEX_DESTROY");
+ 
+    function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_lock, "PTHREAD_MUTEX_LOCK");
+ 
+    function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_mutex_unlock, "PTHREAD_MUTEX_UNLOCK");
+ 
+    function pthread_condattr_init
+      (attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_condattr_init, "PTHREAD_CONDATTR_INIT");
+ 
+    function pthread_condattr_destroy
+      (attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_condattr_destroy, "PTHREAD_CONDATTR_DESTROY");
+ 
+    function pthread_cond_init
+      (cond : access pthread_cond_t;
+       attr : access pthread_condattr_t) return int;
+    pragma Import (C, pthread_cond_init, "PTHREAD_COND_INIT");
+ 
+    function pthread_cond_destroy (cond : access pthread_cond_t) return int;
+    pragma Import (C, pthread_cond_destroy, "PTHREAD_COND_DESTROY");
+ 
+    function pthread_cond_signal (cond : access pthread_cond_t) return int;
+    pragma Import (C, pthread_cond_signal, "PTHREAD_COND_SIGNAL");
+ 
+    function pthread_cond_signal_int_np
+      (cond : access pthread_cond_t) return int;
+    pragma Import (C, pthread_cond_signal_int_np,
+                   "PTHREAD_COND_SIGNAL_INT_NP");
+ 
+    function pthread_cond_wait
+      (cond  : access pthread_cond_t;
+       mutex : access pthread_mutex_t) return int;
+    pragma Import (C, pthread_cond_wait, "PTHREAD_COND_WAIT");
+ 
+    --------------------------
+    -- POSIX.1c  Section 13 --
+    --------------------------
+ 
+    function pthread_mutexattr_setprotocol
+      (attr : access pthread_mutexattr_t; protocol : int) return int;
+    pragma Import (C, pthread_mutexattr_setprotocol,
+                      "PTHREAD_MUTEXATTR_SETPROTOCOL");
+ 
+    type struct_sched_param is record
+       sched_priority : int;  --  scheduling priority
+    end record;
+    for struct_sched_param'Size use 8*4;
+    pragma Convention (C, struct_sched_param);
+ 
+    function pthread_setschedparam
+      (thread : pthread_t;
+       policy : int;
+       param  : access struct_sched_param) return int;
+    pragma Import (C, pthread_setschedparam, "PTHREAD_SETSCHEDPARAM");
+ 
+    function pthread_attr_setscope
+      (attr            : access pthread_attr_t;
+       contentionscope : int) return int;
+    pragma Import (C, pthread_attr_setscope, "PTHREAD_ATTR_SETSCOPE");
+ 
+    function pthread_attr_setinheritsched
+      (attr            : access pthread_attr_t;
+       inheritsched : int) return int;
+    pragma Import (C, pthread_attr_setinheritsched,
+                      "PTHREAD_ATTR_SETINHERITSCHED");
+ 
+    function pthread_attr_setschedpolicy
+      (attr : access pthread_attr_t; policy : int) return int;
+    pragma Import (C, pthread_attr_setschedpolicy,
+                      "PTHREAD_ATTR_SETSCHEDPOLICY");
+ 
+    function pthread_attr_setschedparam
+      (attr        : access pthread_attr_t;
+       sched_param : int) return int;
+    pragma Import (C, pthread_attr_setschedparam, "PTHREAD_ATTR_SETSCHEDPARAM");
+ 
+    function sched_yield return int;
+ 
+    --------------------------
+    -- P1003.1c  Section 16 --
+    --------------------------
+ 
+    function pthread_attr_init (attributes : access pthread_attr_t) return int;
+    pragma Import (C, pthread_attr_init, "PTHREAD_ATTR_INIT");
+ 
+    function pthread_attr_destroy
+      (attributes : access pthread_attr_t) return int;
+    pragma Import (C, pthread_attr_destroy, "PTHREAD_ATTR_DESTROY");
+ 
+    function pthread_attr_setdetachstate
+      (attr        : access pthread_attr_t;
+       detachstate : int) return int;
+    pragma Import (C, pthread_attr_setdetachstate,
+                      "PTHREAD_ATTR_SETDETACHSTATE");
+ 
+    function pthread_attr_setstacksize
+      (attr      : access pthread_attr_t;
+       stacksize : size_t) return int;
+    pragma Import (C, pthread_attr_setstacksize, "PTHREAD_ATTR_SETSTACKSIZE");
+ 
+    function pthread_create
+      (thread        : access pthread_t;
+       attributes    : access pthread_attr_t;
+       start_routine : Thread_Body;
+       arg           : System.Address) return int;
+    pragma Import (C, pthread_create, "PTHREAD_CREATE");
+ 
+    procedure pthread_exit (status : System.Address);
+    pragma Import (C, pthread_exit, "PTHREAD_EXIT");
+ 
+    function pthread_self return pthread_t;
+ 
+    --------------------------
+    -- POSIX.1c  Section 17 --
+    --------------------------
+ 
+    function pthread_setspecific
+      (key   : pthread_key_t;
+       value : System.Address) return  int;
+    pragma Import (C, pthread_setspecific, "PTHREAD_SETSPECIFIC");
+ 
+    function pthread_getspecific (key : pthread_key_t) return System.Address;
+    pragma Import (C, pthread_getspecific, "PTHREAD_GETSPECIFIC");
+ 
+    type destructor_pointer is access procedure (arg : System.Address);
+ 
+    function pthread_key_create
+      (key        : access pthread_key_t;
+       destructor : destructor_pointer) return int;
+    pragma Import (C, pthread_key_create, "PTHREAD_KEY_CREATE");
+ 
+ private
+ 
+    type pid_t is new int;
+ 
+    type pthreadLongAddr_p is mod 2 ** Long_Integer'Size;
+ 
+    type pthreadLongAddr_t is mod 2 ** Long_Integer'Size;
+    type pthreadLongAddr_t_ptr is mod 2 ** Long_Integer'Size;
+ 
+    type pthreadLongString_t is mod 2 ** Long_Integer'Size;
+ 
+    type pthreadLongUint_t is mod 2 ** Long_Integer'Size;
+    type pthreadLongUint_array is array (Natural range <>)
+      of pthreadLongUint_t;
+ 
+    type pthread_t is mod 2 ** Long_Integer'Size;
+ 
+    type pthread_cond_t is record
+       state    : unsigned;
+       valid    : unsigned;
+       name     : pthreadLongString_t;
+       arg      : unsigned;
+       sequence : unsigned;
+       block    : pthreadLongAddr_t_ptr;
+    end record;
+    for pthread_cond_t'Size use 8*32;
+    pragma Convention (C, pthread_cond_t);
+ 
+    type pthread_attr_t is record
+       valid    : long;
+       name     : pthreadLongString_t;
+       arg      : pthreadLongUint_t;
+       reserved : pthreadLongUint_array (0 .. 18);
+    end record;
+    for pthread_attr_t'Size use 8*176;
+    pragma Convention (C, pthread_attr_t);
+ 
+    type pthread_mutex_t is record
+       lock     : unsigned;
+       valid    : unsigned;
+       name     : pthreadLongString_t;
+       arg      : unsigned;
+       sequence : unsigned;
+       block    : pthreadLongAddr_p;
+       owner    : unsigned;
+       depth    : unsigned;
+    end record;
+    for pthread_mutex_t'Size use 8*40;
+    pragma Convention (C, pthread_mutex_t);
+ 
+    type pthread_mutexattr_t is record
+       valid    : long;
+       reserved : pthreadLongUint_array (0 .. 14);
+    end record;
+    for pthread_mutexattr_t'Size use 8*128;
+    pragma Convention (C, pthread_mutexattr_t);
+ 
+    type pthread_condattr_t is record
+       valid    : long;
+       reserved : pthreadLongUint_array (0 .. 12);
+    end record;
+    for pthread_condattr_t'Size use 8*112;
+    pragma Convention (C, pthread_condattr_t);
+ 
+    type pthread_key_t is new unsigned;
+ 
+    pragma Inline (pthread_self);
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-vxworks.adb gcc-4.0.0/gcc/ada/s-osinte-vxworks.adb
*** gcc-3.4.3/gcc/ada/s-osinte-vxworks.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-vxworks.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,164 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
+ --                                                                          --
+ --                   S Y S T E M . O S _ I N T E R F A C E                  --
+ --                                                                          --
+ --                                   B o d y                                --
+ --                                                                          --
+ --             Copyright (C) 1997-2002 Free Software Foundation             --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the VxWorks version.
+ 
+ --  This package encapsulates all direct interfaces to OS services
+ --  that are needed by children of System.
+ 
+ pragma Polling (Off);
+ --  Turn off polling, we do not want ATC polling to take place during
+ --  tasking operations. It causes infinite loops and other problems.
+ 
+ package body System.OS_Interface is
+ 
+    use type Interfaces.C.int;
+ 
+    Low_Priority : constant := 255;
+    --  VxWorks native (default) lowest scheduling priority.
+ 
+    -------------
+    -- sigwait --
+    -------------
+ 
+    function sigwait
+      (set : access sigset_t;
+       sig : access Signal) return int
+    is
+       Result : int;
+ 
+       function sigwaitinfo
+         (set : access sigset_t; sigvalue : System.Address) return int;
+       pragma Import (C, sigwaitinfo, "sigwaitinfo");
+ 
+    begin
+       Result := sigwaitinfo (set, System.Null_Address);
+ 
+       if Result /= -1 then
+          sig.all := Signal (Result);
+          return 0;
+       else
+          sig.all := 0;
+          return errno;
+       end if;
+    end sigwait;
+ 
+    -----------------
+    -- To_Duration --
+    -----------------
+ 
+    function To_Duration (TS : timespec) return Duration is
+    begin
+       return Duration (TS.ts_sec) + Duration (TS.ts_nsec) / 10#1#E9;
+    end To_Duration;
+ 
+    -----------------
+    -- To_Timespec --
+    -----------------
+ 
+    function To_Timespec (D : Duration) return timespec is
+       S : time_t;
+       F : Duration;
+    begin
+       S := time_t (Long_Long_Integer (D));
+       F := D - Duration (S);
+ 
+       --  If F has negative value due to a round-up, adjust for positive F
+       --  value.
+       if F < 0.0 then
+          S := S - 1;
+          F := F + 1.0;
+       end if;
+ 
+       return timespec'(ts_sec  => S,
+                        ts_nsec => long (Long_Long_Integer (F * 10#1#E9)));
+    end To_Timespec;
+ 
+    -------------------------
+    -- To_VxWorks_Priority --
+    -------------------------
+ 
+    function To_VxWorks_Priority (Priority : in int) return int is
+    begin
+       return Low_Priority - Priority;
+    end To_VxWorks_Priority;
+ 
+    --------------------
+    -- To_Clock_Ticks --
+    --------------------
+ 
+    --  ??? - For now, we'll always get the system clock rate
+    --  since it is allowed to be changed during run-time in
+    --  VxWorks. A better method would be to provide an operation
+    --  to set it that so we can always know its value.
+    --
+    --  Another thing we should probably allow for is a resultant
+    --  tick count greater than int'Last. This should probably
+    --  be a procedure with two output parameters, one in the
+    --  range 0 .. int'Last, and another representing the overflow
+    --  count.
+ 
+    function To_Clock_Ticks (D : Duration) return int is
+       Ticks          : Long_Long_Integer;
+       Rate_Duration  : Duration;
+       Ticks_Duration : Duration;
+ 
+    begin
+       if D < 0.0 then
+          return -1;
+       end if;
+ 
+       --  Ensure that the duration can be converted to ticks
+       --  at the current clock tick rate without overflowing.
+ 
+       Rate_Duration := Duration (sysClkRateGet);
+ 
+       if D > (Duration'Last / Rate_Duration) then
+          Ticks := Long_Long_Integer (int'Last);
+       else
+          Ticks_Duration := D * Rate_Duration;
+          Ticks := Long_Long_Integer (Ticks_Duration);
+ 
+          if Ticks_Duration > Duration (Ticks) then
+             Ticks := Ticks + 1;
+          end if;
+ 
+          if Ticks > Long_Long_Integer (int'Last) then
+             Ticks := Long_Long_Integer (int'Last);
+          end if;
+       end if;
+ 
+       return int (Ticks);
+    end To_Clock_Ticks;
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osinte-vxworks.ads gcc-4.0.0/gcc/ada/s-osinte-vxworks.ads
*** gcc-3.4.3/gcc/ada/s-osinte-vxworks.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osinte-vxworks.ads	Thu Feb 10 13:57:23 2005
***************
*** 0 ****
--- 1,373 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
+ --                                                                          --
+ --                    S Y S T E M . O S _ I N T E R F A C E                 --
+ --                                                                          --
+ --                                   S p e c                                --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2005, Free Software Foundation, Inc.      --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the VxWorks version of this package
+ 
+ --  This package encapsulates all direct interfaces to OS services
+ --  that are needed by children of System.
+ 
+ --  PLEASE DO NOT add any with-clauses to this package or remove the pragma
+ --  Preelaborate. This package is designed to be a bottom-level (leaf) package.
+ 
+ with Interfaces.C;
+ with System.VxWorks;
+ 
+ package System.OS_Interface is
+    pragma Preelaborate;
+ 
+    subtype int         is Interfaces.C.int;
+    subtype short       is Short_Integer;
+    type long           is new Long_Integer;
+    type unsigned_long  is mod 2 ** long'Size;
+    type size_t         is mod 2 ** Standard'Address_Size;
+ 
+    -----------
+    -- Errno --
+    -----------
+ 
+    function errno return int;
+    pragma Import (C, errno, "errnoGet");
+ 
+    EINTR     : constant := 4;
+    EAGAIN    : constant := 35;
+    ENOMEM    : constant := 12;
+    EINVAL    : constant := 22;
+    ETIMEDOUT : constant := 60;
+ 
+    FUNC_ERR  : constant := -1;
+ 
+    ----------------------------
+    -- Signals and Interrupts --
+    ----------------------------
+ 
+    NSIG : constant := 32;
+    --  Number of signals on the target OS
+    type Signal is new int range 0 .. Interfaces.C."-" (NSIG, 1);
+ 
+    Max_HW_Interrupt : constant := System.VxWorks.Num_HW_Interrupts - 1;
+    type HW_Interrupt is new int range 0 .. Max_HW_Interrupt;
+ 
+    Max_Interrupt : constant := Max_HW_Interrupt;
+ 
+    SIGILL  : constant :=  4; --  illegal instruction (not reset)
+    SIGABRT : constant :=  6; --  used by abort, replace SIGIOT in the future
+    SIGFPE  : constant :=  8; --  floating point exception
+    SIGBUS  : constant := 10; --  bus error
+    SIGSEGV : constant := 11; --  segmentation violation
+ 
+    -----------------------------------
+    -- Signal processing definitions --
+    -----------------------------------
+ 
+    --  The how in sigprocmask().
+    SIG_BLOCK   : constant := 1;
+    SIG_UNBLOCK : constant := 2;
+    SIG_SETMASK : constant := 3;
+ 
+    --  The sa_flags in struct sigaction.
+    SA_SIGINFO   : constant := 16#0002#;
+    SA_ONSTACK   : constant := 16#0004#;
+ 
+    SIG_DFL : constant := 0;
+    SIG_IGN : constant := 1;
+ 
+    type sigset_t is private;
+ 
+    type struct_sigaction is record
+       sa_handler : System.Address;
+       sa_mask    : sigset_t;
+       sa_flags   : int;
+    end record;
+    pragma Convention (C, struct_sigaction);
+    type struct_sigaction_ptr is access all struct_sigaction;
+ 
+    function sigaddset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigaddset, "sigaddset");
+ 
+    function sigdelset (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigdelset, "sigdelset");
+ 
+    function sigfillset (set : access sigset_t) return int;
+    pragma Import (C, sigfillset, "sigfillset");
+ 
+    function sigismember (set : access sigset_t; sig : Signal) return int;
+    pragma Import (C, sigismember, "sigismember");
+ 
+    function sigemptyset (set : access sigset_t) return int;
+    pragma Import (C, sigemptyset, "sigemptyset");
+ 
+    function sigaction
+      (sig  : Signal;
+       act  : struct_sigaction_ptr;
+       oact : struct_sigaction_ptr) return int;
+    pragma Import (C, sigaction, "sigaction");
+ 
+    type isr_address is access procedure (sig : int);
+ 
+    function c_signal (sig : Signal; handler : isr_address) return isr_address;
+    pragma Import (C, c_signal, "signal");
+ 
+    function sigwait (set : access sigset_t; sig : access Signal) return int;
+    pragma Inline (sigwait);
+ 
+    type sigset_t_ptr is access all sigset_t;
+ 
+    function pthread_sigmask
+      (how  : int;
+       set  : sigset_t_ptr;
+       oset : sigset_t_ptr) return int;
+    pragma Import (C, pthread_sigmask, "sigprocmask");
+ 
+    type t_id is new long;
+    subtype Thread_Id is t_id;
+ 
+    function kill (pid : t_id; sig : Signal) return int;
+    pragma Import (C, kill, "kill");
+ 
+    --  VxWorks doesn't have getpid; taskIdSelf is the equivalent
+    --  routine.
+    function getpid return t_id;
+    pragma Import (C, getpid, "taskIdSelf");
+ 
+    ----------
+    -- Time --
+    ----------
+ 
+    type time_t is new unsigned_long;
+ 
+    type timespec is record
+       ts_sec  : time_t;
+       ts_nsec : long;
+    end record;
+    pragma Convention (C, timespec);
+ 
+    type clockid_t is private;
+ 
+    CLOCK_REALTIME : constant clockid_t;   --  System wide realtime clock
+ 
+    function To_Duration (TS : timespec) return Duration;
+    pragma Inline (To_Duration);
+ 
+    function To_Timespec (D : Duration) return timespec;
+    pragma Inline (To_Timespec);
+ 
+    function To_Clock_Ticks (D : Duration) return int;
+    --  Convert a duration value (in seconds) into clock ticks.
+ 
+    function clock_gettime
+      (clock_id : clockid_t; tp : access timespec) return int;
+    pragma Import (C, clock_gettime, "clock_gettime");
+ 
+    type ULONG is new unsigned_long;
+ 
+    procedure tickSet (ticks : ULONG);
+    pragma Import (C, tickSet, "tickSet");
+ 
+    function tickGet return ULONG;
+    pragma Import (C, tickGet, "tickGet");
+ 
+    ----------------------
+    -- Utility Routines --
+    ----------------------
+ 
+    function To_VxWorks_Priority (Priority : in int) return int;
+    pragma Inline (To_VxWorks_Priority);
+    --  Convenience routine to convert between VxWorks priority and Ada priority
+ 
+    --------------------------
+    -- VxWorks specific API --
+    --------------------------
+ 
+    subtype STATUS is int;
+    --  Equivalent of the C type STATUS
+ 
+    OK    : constant STATUS := 0;
+    ERROR : constant STATUS := Interfaces.C.int (-1);
+ 
+    function taskIdVerify (tid : t_id)  return STATUS;
+    pragma Import (C, taskIdVerify, "taskIdVerify");
+ 
+    function taskIdSelf return t_id;
+    pragma Import (C, taskIdSelf, "taskIdSelf");
+ 
+    function taskSuspend (tid : t_id) return int;
+    pragma Import (C, taskSuspend, "taskSuspend");
+ 
+    function taskResume (tid : t_id) return int;
+    pragma Import (C, taskResume, "taskResume");
+ 
+    function taskIsSuspended (tid : t_id) return int;
+    pragma Import (C, taskIsSuspended, "taskIsSuspended");
+ 
+    function taskVarAdd
+      (tid : t_id; pVar : access System.Address) return int;
+    pragma Import (C, taskVarAdd, "taskVarAdd");
+ 
+    function taskVarDelete
+      (tid : t_id; pVar : access System.Address) return int;
+    pragma Import (C, taskVarDelete, "taskVarDelete");
+ 
+    function taskVarSet
+      (tid   : t_id;
+       pVar  : access System.Address;
+       value : System.Address) return int;
+    pragma Import (C, taskVarSet, "taskVarSet");
+ 
+    function taskVarGet
+      (tid  : t_id;
+       pVar : access System.Address) return int;
+    pragma Import (C, taskVarGet, "taskVarGet");
+ 
+    function taskDelay (ticks : int) return int;
+    procedure taskDelay (ticks : int);
+    pragma Import (C, taskDelay, "taskDelay");
+ 
+    function sysClkRateGet return int;
+    pragma Import (C, sysClkRateGet, "sysClkRateGet");
+ 
+    --  Option flags for taskSpawn
+ 
+    VX_UNBREAKABLE    : constant := 16#0002#;
+    VX_FP_TASK        : constant := 16#0008#;
+    VX_FP_PRIVATE_ENV : constant := 16#0080#;
+    VX_NO_STACK_FILL  : constant := 16#0100#;
+ 
+    function taskSpawn
+      (name          : System.Address;  --  Pointer to task name
+       priority      : int;
+       options       : int;
+       stacksize     : size_t;
+       start_routine : System.Address;
+       arg1          : System.Address;
+       arg2          : int := 0;
+       arg3          : int := 0;
+       arg4          : int := 0;
+       arg5          : int := 0;
+       arg6          : int := 0;
+       arg7          : int := 0;
+       arg8          : int := 0;
+       arg9          : int := 0;
+       arg10         : int := 0) return t_id;
+    pragma Import (C, taskSpawn, "taskSpawn");
+ 
+    procedure taskDelete (tid : t_id);
+    pragma Import (C, taskDelete, "taskDelete");
+ 
+    function kernelTimeSlice (ticks : int) return int;
+    pragma Import (C, kernelTimeSlice, "kernelTimeSlice");
+ 
+    function taskPriorityGet (tid : t_id; pPriority : access int) return int;
+    pragma Import (C, taskPriorityGet, "taskPriorityGet");
+ 
+    function taskPrioritySet (tid : t_id; newPriority : int) return int;
+    pragma Import (C, taskPrioritySet, "taskPrioritySet");
+ 
+    --  Semaphore creation flags.
+ 
+    SEM_Q_FIFO         : constant := 0;
+    SEM_Q_PRIORITY     : constant := 1;
+    SEM_DELETE_SAFE    : constant := 4;  -- only valid for binary semaphore
+    SEM_INVERSION_SAFE : constant := 8;  -- only valid for binary semaphore
+ 
+    --  Semaphore initial state flags
+ 
+    SEM_EMPTY : constant := 0;
+    SEM_FULL  : constant := 1;
+ 
+    --  Semaphore take (semTake) time constants.
+ 
+    WAIT_FOREVER : constant := -1;
+    NO_WAIT      : constant := 0;
+ 
+    --  Error codes (errno).  The lower level 16 bits are the
+    --  error code, with the upper 16 bits representing the
+    --  module number in which the error occurred.  By convention,
+    --  the module number is 0 for UNIX errors.  VxWorks reserves
+    --  module numbers 1-500, with the remaining module numbers
+    --  being available for user applications.
+ 
+    M_objLib                 : constant := 61 * 2**16;
+    --  semTake() failure with ticks = NO_WAIT
+    S_objLib_OBJ_UNAVAILABLE : constant := M_objLib + 2;
+    --  semTake() timeout with ticks > NO_WAIT
+    S_objLib_OBJ_TIMEOUT     : constant := M_objLib + 4;
+ 
+    type SEM_ID is new System.Address;
+    --  typedef struct semaphore *SEM_ID;
+ 
+    --  We use two different kinds of VxWorks semaphores: mutex
+    --  and binary semaphores.  A null ID is returned when
+    --  a semaphore cannot be created.
+ 
+    function semBCreate (options : int; initial_state : int) return SEM_ID;
+    --  Create a binary semaphore. Return ID, or 0 if memory could not
+    --  be allocated.
+    pragma Import (C, semBCreate, "semBCreate");
+ 
+    function semMCreate (options : int) return SEM_ID;
+    pragma Import (C, semMCreate, "semMCreate");
+ 
+    function semDelete (Sem : SEM_ID) return int;
+    --  Delete a semaphore
+    pragma Import (C, semDelete, "semDelete");
+ 
+    function semGive (Sem : SEM_ID) return int;
+    pragma Import (C, semGive, "semGive");
+ 
+    function semTake (Sem : SEM_ID; timeout : int) return int;
+    --  Attempt to take binary semaphore.  Error is returned if operation
+    --  times out
+    pragma Import (C, semTake, "semTake");
+ 
+    function semFlush (SemID : SEM_ID) return STATUS;
+    --  Release all threads blocked on the semaphore
+    pragma Import (C, semFlush, "semFlush");
+ 
+    function taskLock return int;
+    pragma Import (C, taskLock, "taskLock");
+ 
+    function taskUnlock return int;
+    pragma Import (C, taskUnlock, "taskUnlock");
+ 
+ private
+    type sigset_t is new long;
+ 
+    type pid_t is new int;
+ 
+    ERROR_PID : constant pid_t := -1;
+ 
+    type clockid_t is new int;
+    CLOCK_REALTIME : constant clockid_t := 0;
+ 
+ end System.OS_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osprim-mingw.adb gcc-4.0.0/gcc/ada/s-osprim-mingw.adb
*** gcc-3.4.3/gcc/ada/s-osprim-mingw.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osprim-mingw.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,286 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                  S Y S T E M . O S _ P R I M I T I V E S                 --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --          Copyright (C) 1998-2003 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the NT version of this package
+ 
+ with Ada.Exceptions;
+ with Interfaces.C;
+ 
+ package body System.OS_Primitives is
+ 
+    ---------------------------
+    -- Win32 API Definitions --
+    ---------------------------
+ 
+    --  These definitions are copied from System.OS_Interface because we do not
+    --  want to depend on gnarl here.
+ 
+    type DWORD is new Interfaces.C.unsigned_long;
+ 
+    type LARGE_INTEGER is delta 1.0 range -2.0**63 .. 2.0**63 - 1.0;
+ 
+    type BOOL is new Boolean;
+    for BOOL'Size use Interfaces.C.unsigned_long'Size;
+ 
+    procedure GetSystemTimeAsFileTime (lpFileTime : access Long_Long_Integer);
+    pragma Import (Stdcall, GetSystemTimeAsFileTime, "GetSystemTimeAsFileTime");
+ 
+    function QueryPerformanceCounter
+      (lpPerformanceCount : access LARGE_INTEGER) return BOOL;
+    pragma Import
+      (Stdcall, QueryPerformanceCounter, "QueryPerformanceCounter");
+ 
+    function QueryPerformanceFrequency
+      (lpFrequency : access LARGE_INTEGER) return BOOL;
+    pragma Import
+      (Stdcall, QueryPerformanceFrequency, "QueryPerformanceFrequency");
+ 
+    procedure Sleep (dwMilliseconds : DWORD);
+    pragma Import (Stdcall, Sleep, External_Name => "Sleep");
+ 
+    ----------------------------------------
+    -- Data for the high resolution clock --
+    ----------------------------------------
+ 
+    --  Declare some pointers to access multi-word data above. This is needed
+    --  to workaround a limitation in the GNU/Linker auto-import feature used
+    --  to build the GNAT runtime DLLs. In fact the Clock and Monotonic_Clock
+    --  routines are inlined and they are using some multi-word variables.
+    --  GNU/Linker will fail to auto-import those variables when building
+    --  libgnarl.dll. The indirection level introduced here has no measurable
+    --  penalties.
+    --
+    --  Note that access variables below must not be declared as constant
+    --  otherwise the compiler optimization will remove this indirect access.
+ 
+    type DA is access all Duration;
+    --  Use to have indirect access to multi-word variables
+ 
+    type LIA is access all LARGE_INTEGER;
+    --  Use to have indirect access to multi-word variables
+ 
+    type LLIA is access all Long_Long_Integer;
+    --  Use to have indirect access to multi-word variables
+ 
+    Tick_Frequency : aliased LARGE_INTEGER;
+    TFA : constant LIA := Tick_Frequency'Access;
+    --  Holds frequency of high-performance counter used by Clock
+    --  Windows NT uses a 1_193_182 Hz counter on PCs.
+ 
+    Base_Ticks : aliased LARGE_INTEGER;
+    BTA : constant LIA := Base_Ticks'Access;
+    --  Holds the Tick count for the base time.
+ 
+    Base_Monotonic_Ticks : aliased LARGE_INTEGER;
+    BMTA : constant LIA := Base_Monotonic_Ticks'Access;
+    --  Holds the Tick count for the base monotonic time
+ 
+    Base_Clock : aliased Duration;
+    BCA : constant DA := Base_Clock'Access;
+    --  Holds the current clock for the standard clock's base time
+ 
+    Base_Monotonic_Clock : aliased Duration;
+    BMCA : constant DA := Base_Monotonic_Clock'Access;
+    --  Holds the current clock for monotonic clock's base time
+ 
+    Base_Time : aliased Long_Long_Integer;
+    BTiA : constant LLIA := Base_Time'Access;
+    --  Holds the base time used to check for system time change, used with
+    --  the standard clock.
+ 
+    procedure Get_Base_Time;
+    --  Retrieve the base time and base ticks. These values will be used by
+    --  clock to compute the current time by adding to it a fraction of the
+    --  performance counter. This is for the implementation of a
+    --  high-resolution clock. Note that this routine does not change the base
+    --  monotonic values used by the monotonic clock.
+ 
+    -----------
+    -- Clock --
+    -----------
+ 
+    --  This implementation of clock provides high resolution timer values
+    --  using QueryPerformanceCounter. This call return a 64 bits values (based
+    --  on the 8253 16 bits counter). This counter is updated every 1/1_193_182
+    --  times per seconds. The call to QueryPerformanceCounter takes 6
+    --  microsecs to complete.
+ 
+    function Clock return Duration is
+       Max_Shift            : constant Duration        := 2.0;
+       Hundreds_Nano_In_Sec : constant Long_Long_Float := 1.0E7;
+       Current_Ticks        : aliased LARGE_INTEGER;
+       Elap_Secs_Tick       : Duration;
+       Elap_Secs_Sys        : Duration;
+       Now                  : aliased Long_Long_Integer;
+ 
+    begin
+       if not QueryPerformanceCounter (Current_Ticks'Access) then
+          return 0.0;
+       end if;
+ 
+       GetSystemTimeAsFileTime (Now'Access);
+ 
+       Elap_Secs_Sys :=
+         Duration (Long_Long_Float (abs (Now - BTiA.all)) /
+                     Hundreds_Nano_In_Sec);
+ 
+       Elap_Secs_Tick :=
+         Duration (Long_Long_Float (Current_Ticks - BTA.all) /
+                   Long_Long_Float (TFA.all));
+ 
+       --  If we have a shift of more than Max_Shift seconds we resynchonize the
+       --  Clock. This is probably due to a manual Clock adjustment, an DST
+       --  adjustment or an NTP synchronisation. And we want to adjust the
+       --  time for this system (non-monotonic) clock.
+ 
+       if abs (Elap_Secs_Sys - Elap_Secs_Tick) > Max_Shift then
+          Get_Base_Time;
+ 
+          Elap_Secs_Tick :=
+            Duration (Long_Long_Float (Current_Ticks - BTA.all) /
+                      Long_Long_Float (TFA.all));
+       end if;
+ 
+       return BCA.all + Elap_Secs_Tick;
+    end Clock;
+ 
+    -------------------
+    -- Get_Base_Time --
+    -------------------
+ 
+    procedure Get_Base_Time is
+       --  The resolution for GetSystemTime is 1 millisecond.
+ 
+       --  The time to get both base times should take less than 1 millisecond.
+       --  Therefore, the elapsed time reported by GetSystemTime between both
+       --  actions should be null.
+ 
+       Max_Elapsed    : constant := 0;
+ 
+       Test_Now       : aliased Long_Long_Integer;
+ 
+       epoch_1970     : constant := 16#19D_B1DE_D53E_8000#; -- win32 UTC epoch
+       system_time_ns : constant := 100;                    -- 100 ns per tick
+       Sec_Unit       : constant := 10#1#E9;
+ 
+    begin
+       --  Here we must be sure that both of these calls are done in a short
+       --  amount of time. Both are base time and should in theory be taken
+       --  at the very same time.
+ 
+       loop
+          GetSystemTimeAsFileTime (Base_Time'Access);
+ 
+          if not QueryPerformanceCounter (Base_Ticks'Access) then
+             pragma Assert
+               (Standard.False,
+                "Could not query high performance counter in Clock");
+             null;
+          end if;
+ 
+          GetSystemTimeAsFileTime (Test_Now'Access);
+ 
+          exit when Test_Now - Base_Time = Max_Elapsed;
+       end loop;
+ 
+       Base_Clock := Duration
+         (Long_Long_Float ((Base_Time - epoch_1970) * system_time_ns) /
+          Long_Long_Float (Sec_Unit));
+    end Get_Base_Time;
+ 
+    ---------------------
+    -- Monotonic_Clock --
+    ---------------------
+ 
+    function Monotonic_Clock return Duration is
+       Current_Ticks  : aliased LARGE_INTEGER;
+       Elap_Secs_Tick : Duration;
+    begin
+       if not QueryPerformanceCounter (Current_Ticks'Access) then
+          return 0.0;
+       end if;
+ 
+       Elap_Secs_Tick :=
+         Duration (Long_Long_Float (Current_Ticks - BMTA.all) /
+                   Long_Long_Float (TFA.all));
+ 
+       return BMCA.all + Elap_Secs_Tick;
+    end Monotonic_Clock;
+ 
+    -----------------
+    -- Timed_Delay --
+    -----------------
+ 
+    procedure Timed_Delay (Time : Duration; Mode : Integer) is
+       Rel_Time   : Duration;
+       Abs_Time   : Duration;
+       Check_Time : Duration := Monotonic_Clock;
+ 
+    begin
+       if Mode = Relative then
+          Rel_Time := Time;
+          Abs_Time := Time + Check_Time;
+       else
+          Rel_Time := Time - Check_Time;
+          Abs_Time := Time;
+       end if;
+ 
+       if Rel_Time > 0.0 then
+          loop
+             Sleep (DWORD (Rel_Time * 1000.0));
+             Check_Time := Monotonic_Clock;
+ 
+             exit when Abs_Time <= Check_Time;
+ 
+             Rel_Time := Abs_Time - Check_Time;
+          end loop;
+       end if;
+    end Timed_Delay;
+ 
+ --  Package elaboration, get starting time as base
+ 
+ begin
+    if not QueryPerformanceFrequency (Tick_Frequency'Access) then
+       Ada.Exceptions.Raise_Exception
+         (Program_Error'Identity,
+          "cannot get high performance counter frequency");
+    end if;
+ 
+    Get_Base_Time;
+ 
+    --  Keep base clock and ticks for the monotonic clock. These values should
+    --  never be changed to ensure proper behavior of the monotonic clock.
+ 
+    Base_Monotonic_Clock := Base_Clock;
+    Base_Monotonic_Ticks := Base_Ticks;
+ end System.OS_Primitives;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osprim-os2.adb gcc-4.0.0/gcc/ada/s-osprim-os2.adb
*** gcc-3.4.3/gcc/ada/s-osprim-os2.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osprim-os2.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,172 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                  S Y S T E M . O S _ P R I M I T I V E S                 --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --         Copyright (C) 1998-2001 Free Software Foundation, Inc.           --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the OS/2 version of this package
+ 
+ with Interfaces.C;                      use Interfaces.C;
+ with Interfaces.OS2Lib;                 use Interfaces.OS2Lib;
+ with Interfaces.OS2Lib.Synchronization; use Interfaces.OS2Lib.Synchronization;
+ 
+ package body System.OS_Primitives is
+ 
+    ----------------
+    -- Local Data --
+    ----------------
+ 
+    Epoch_Offset    : Duration;       --  See Set_Epoch_Offset
+    Max_Tick_Count  : QWORD := 0.0;
+    --  This is needed to compensate for small glitches in the
+    --  hardware clock or the way it is read by the OS
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    procedure Set_Epoch_Offset;
+    --  Initializes the Epoch_1970_Offset to the offset of the System_Clock
+    --  relative to the Unix epoch (Jan 1, 1970), such that
+    --     Clock = System_Clock + Epoch_1970_Offset
+ 
+    function System_Clock return Duration;
+    pragma Inline (System_Clock);
+    --  Function returning value of system clock with system-dependent timebase.
+    --  For OS/2 the system clock returns the elapsed time since system boot.
+    --  The clock resolution is approximately 838 ns.
+ 
+    ------------------
+    -- System_Clock --
+    ------------------
+ 
+    function System_Clock return Duration is
+ 
+       --  Implement conversion from tick count to Duration
+       --  using fixed point arithmetic. The frequency of
+       --  the Intel 8254 timer chip is 18.2 * 2**16 Hz.
+ 
+       Tick_Duration : constant := 1.0 / (18.2 * 2**16);
+       Tick_Count    : aliased QWORD;
+ 
+    begin
+       Must_Not_Fail (DosTmrQueryTime (Tick_Count'Access));
+       --  Read nr of clock ticks since boot time
+ 
+       Max_Tick_Count := QWORD'Max (Tick_Count, Max_Tick_Count);
+ 
+       return Max_Tick_Count * Tick_Duration;
+    end System_Clock;
+ 
+    -----------
+    -- Clock --
+    -----------
+ 
+    function Clock return Duration is
+    begin
+       return System_Clock + Epoch_Offset;
+    end Clock;
+ 
+    ---------------------
+    -- Monotonic_Clock --
+    ---------------------
+ 
+    function Monotonic_Clock return Duration renames Clock;
+ 
+    ----------------------
+    -- Set_Epoch_Offset --
+    ----------------------
+ 
+    procedure Set_Epoch_Offset is
+ 
+       --  Interface to Unix C style gettimeofday
+ 
+       type timeval is record
+          tv_sec  : long;
+          tv_usec : long;
+       end record;
+ 
+       procedure gettimeofday
+         (time : access timeval;
+          zone : System.Address := System.Address'Null_Parameter);
+       pragma Import (C, gettimeofday);
+ 
+       Time_Of_Day       : aliased timeval;
+       Micro_To_Nano     : constant := 1.0E3;
+       Sec_To_Nano       : constant := 1.0E9;
+       Nanos_Since_Epoch : QWORD;
+ 
+    begin
+       gettimeofday (Time_Of_Day'Access);
+       Nanos_Since_Epoch := QWORD (Time_Of_Day.tv_sec) * Sec_To_Nano
+         + QWORD (Time_Of_Day.tv_usec) * Micro_To_Nano;
+ 
+       Epoch_Offset :=
+          Duration'(Nanos_Since_Epoch / Sec_To_Nano) - System_Clock;
+ 
+    end Set_Epoch_Offset;
+ 
+    -----------------
+    -- Timed_Delay --
+    -----------------
+ 
+    procedure Timed_Delay
+      (Time : Duration;
+       Mode : Integer)
+    is
+       Rel_Time   : Duration;
+       Abs_Time   : Duration;
+       Check_Time : Duration := Clock;
+ 
+    begin
+       if Mode = Relative then
+          Rel_Time := Time;
+          Abs_Time := Time + Check_Time;
+       else
+          Rel_Time := Time - Check_Time;
+          Abs_Time := Time;
+       end if;
+ 
+       if Rel_Time > 0.0 then
+          loop
+             Must_Not_Fail (DosSleep (ULONG (Rel_Time * 1000.0)));
+ 
+             Check_Time := Clock;
+ 
+             exit when Abs_Time <= Check_Time;
+ 
+             Rel_Time := Abs_Time - Check_Time;
+          end loop;
+       end if;
+    end Timed_Delay;
+ 
+ begin
+    Set_Epoch_Offset;
+ end System.OS_Primitives;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osprim-posix.adb gcc-4.0.0/gcc/ada/s-osprim-posix.adb
*** gcc-3.4.3/gcc/ada/s-osprim-posix.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osprim-posix.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,159 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                  S Y S T E M . O S _ P R I M I T I V E S                 --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --          Copyright (C) 1998-2003 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This version is for POSIX-like operating systems
+ 
+ package body System.OS_Primitives is
+ 
+    --  ??? These definitions are duplicated from System.OS_Interface
+    --  because we don't want to depend on any package. Consider removing
+    --  these declarations in System.OS_Interface and move these ones in
+    --  the spec.
+ 
+    type struct_timezone is record
+       tz_minuteswest  : Integer;
+       tz_dsttime   : Integer;
+    end record;
+    pragma Convention (C, struct_timezone);
+    type struct_timezone_ptr is access all struct_timezone;
+ 
+    type time_t is new Long_Integer;
+ 
+    type struct_timeval is record
+       tv_sec       : time_t;
+       tv_usec      : Long_Integer;
+    end record;
+    pragma Convention (C, struct_timeval);
+ 
+    function gettimeofday
+      (tv : access struct_timeval;
+       tz : struct_timezone_ptr) return Integer;
+    pragma Import (C, gettimeofday, "gettimeofday");
+ 
+    type timespec is record
+       tv_sec  : time_t;
+       tv_nsec : Long_Integer;
+    end record;
+    pragma Convention (C, timespec);
+ 
+    function nanosleep (rqtp, rmtp : access timespec) return Integer;
+    pragma Import (C, nanosleep, "nanosleep");
+ 
+    -----------
+    -- Clock --
+    -----------
+ 
+    function Clock return Duration is
+       TV     : aliased struct_timeval;
+ 
+       Result : Integer;
+       pragma Unreferenced (Result);
+ 
+    begin
+       Result := gettimeofday (TV'Access, null);
+       return Duration (TV.tv_sec) + Duration (TV.tv_usec) / 10#1#E6;
+    end Clock;
+ 
+    ---------------------
+    -- Monotonic_Clock --
+    ---------------------
+ 
+    function Monotonic_Clock return Duration renames Clock;
+ 
+    -----------------
+    -- To_Timespec --
+    -----------------
+ 
+    function To_Timespec (D : Duration) return timespec;
+ 
+    function To_Timespec (D : Duration) return timespec is
+       S : time_t;
+       F : Duration;
+ 
+    begin
+       S := time_t (Long_Long_Integer (D));
+       F := D - Duration (S);
+ 
+       --  If F has negative value due to a round-up, adjust for positive F
+       --  value.
+ 
+       if F < 0.0 then
+          S := S - 1;
+          F := F + 1.0;
+       end if;
+ 
+       return
+         timespec'(tv_sec  => S,
+                   tv_nsec => Long_Integer (Long_Long_Integer (F * 10#1#E9)));
+    end To_Timespec;
+ 
+    -----------------
+    -- Timed_Delay --
+    -----------------
+ 
+    procedure Timed_Delay
+      (Time : Duration;
+       Mode : Integer)
+    is
+       Request : aliased timespec;
+       Remaind : aliased timespec;
+       Rel_Time : Duration;
+       Abs_Time : Duration;
+       Check_Time : Duration := Clock;
+ 
+       Result : Integer;
+       pragma Unreferenced (Result);
+ 
+    begin
+       if Mode = Relative then
+          Rel_Time := Time;
+          Abs_Time := Time + Check_Time;
+       else
+          Rel_Time := Time - Check_Time;
+          Abs_Time := Time;
+       end if;
+ 
+       if Rel_Time > 0.0 then
+          loop
+             Request := To_Timespec (Rel_Time);
+             Result := nanosleep (Request'Access, Remaind'Access);
+             Check_Time := Clock;
+ 
+             exit when Abs_Time <= Check_Time;
+ 
+             Rel_Time := Abs_Time - Check_Time;
+          end loop;
+       end if;
+    end Timed_Delay;
+ 
+ end System.OS_Primitives;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osprim-solaris.adb gcc-4.0.0/gcc/ada/s-osprim-solaris.adb
*** gcc-3.4.3/gcc/ada/s-osprim-solaris.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osprim-solaris.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,124 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                  S Y S T E M . O S _ P R I M I T I V E S                 --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --          Copyright (C) 1998-2003 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This version uses gettimeofday and select
+ --  This file is suitable for Solaris (32 and 64 bits).
+ 
+ package body System.OS_Primitives is
+ 
+    --  ??? These definitions are duplicated from System.OS_Interface
+    --  because we don't want to depend on any package. Consider removing
+    --  these declarations in System.OS_Interface and move these ones in
+    --  the spec.
+ 
+    type struct_timeval is record
+       tv_sec  : Long_Integer;
+       tv_usec : Long_Integer;
+    end record;
+    pragma Convention (C, struct_timeval);
+ 
+    procedure gettimeofday
+      (tv : access struct_timeval;
+       tz : Address := Null_Address);
+    pragma Import (C, gettimeofday, "gettimeofday");
+ 
+    procedure C_select
+      (n         : Integer := 0;
+       readfds,
+       writefds,
+       exceptfds : Address := Null_Address;
+       timeout   : access struct_timeval);
+    pragma Import (C, C_select, "select");
+ 
+    -----------
+    -- Clock --
+    -----------
+ 
+    function Clock return Duration is
+       TV : aliased struct_timeval;
+ 
+    begin
+       gettimeofday (TV'Access);
+       return Duration (TV.tv_sec) + Duration (TV.tv_usec) / 10#1#E6;
+    end Clock;
+ 
+    ---------------------
+    -- Monotonic_Clock --
+    ---------------------
+ 
+    function Monotonic_Clock return Duration renames Clock;
+ 
+    -----------------
+    -- Timed_Delay --
+    -----------------
+ 
+    procedure Timed_Delay
+      (Time : Duration;
+       Mode : Integer)
+    is
+       Rel_Time   : Duration;
+       Abs_Time   : Duration;
+       Check_Time : Duration := Clock;
+       timeval    : aliased struct_timeval;
+ 
+    begin
+       if Mode = Relative then
+          Rel_Time := Time;
+          Abs_Time := Time + Check_Time;
+       else
+          Rel_Time := Time - Check_Time;
+          Abs_Time := Time;
+       end if;
+ 
+       if Rel_Time > 0.0 then
+          loop
+             timeval.tv_sec := Long_Integer (Rel_Time);
+ 
+             if Duration (timeval.tv_sec) > Rel_Time then
+                timeval.tv_sec := timeval.tv_sec - 1;
+             end if;
+ 
+             timeval.tv_usec :=
+               Long_Integer ((Rel_Time - Duration (timeval.tv_sec)) * 10#1#E6);
+ 
+             C_select (timeout => timeval'Unchecked_Access);
+             Check_Time := Clock;
+ 
+             exit when Abs_Time <= Check_Time;
+ 
+             Rel_Time := Abs_Time - Check_Time;
+          end loop;
+       end if;
+    end Timed_Delay;
+ 
+ end System.OS_Primitives;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osprim-unix.adb gcc-4.0.0/gcc/ada/s-osprim-unix.adb
*** gcc-3.4.3/gcc/ada/s-osprim-unix.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osprim-unix.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,124 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                  S Y S T E M . O S _ P R I M I T I V E S                 --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --          Copyright (C) 1998-2003 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This version uses gettimeofday and select
+ --  This file is suitable for OpenNT, Dec Unix and SCO UnixWare.
+ 
+ package body System.OS_Primitives is
+ 
+    --  ??? These definitions are duplicated from System.OS_Interface
+    --  because we don't want to depend on any package. Consider removing
+    --  these declarations in System.OS_Interface and move these ones in
+    --  the spec.
+ 
+    type struct_timeval is record
+       tv_sec  : Integer;
+       tv_usec : Integer;
+    end record;
+    pragma Convention (C, struct_timeval);
+ 
+    procedure gettimeofday
+      (tv : access struct_timeval;
+       tz : Address := Null_Address);
+    pragma Import (C, gettimeofday, "gettimeofday");
+ 
+    procedure C_select
+      (n         : Integer := 0;
+       readfds,
+       writefds,
+       exceptfds : Address := Null_Address;
+       timeout   : access struct_timeval);
+    pragma Import (C, C_select, "select");
+ 
+    -----------
+    -- Clock --
+    -----------
+ 
+    function Clock return Duration is
+       TV : aliased struct_timeval;
+ 
+    begin
+       gettimeofday (TV'Access);
+       return Duration (TV.tv_sec) + Duration (TV.tv_usec) / 10#1#E6;
+    end Clock;
+ 
+    ---------------------
+    -- Monotonic_Clock --
+    ---------------------
+ 
+    function Monotonic_Clock return Duration renames Clock;
+ 
+    -----------------
+    -- Timed_Delay --
+    -----------------
+ 
+    procedure Timed_Delay
+      (Time : Duration;
+       Mode : Integer)
+    is
+       Rel_Time   : Duration;
+       Abs_Time   : Duration;
+       Check_Time : Duration := Clock;
+       timeval    : aliased struct_timeval;
+ 
+    begin
+       if Mode = Relative then
+          Rel_Time := Time;
+          Abs_Time := Time + Check_Time;
+       else
+          Rel_Time := Time - Check_Time;
+          Abs_Time := Time;
+       end if;
+ 
+       if Rel_Time > 0.0 then
+          loop
+             timeval.tv_sec := Integer (Rel_Time);
+ 
+             if Duration (timeval.tv_sec) > Rel_Time then
+                timeval.tv_sec := timeval.tv_sec - 1;
+             end if;
+ 
+             timeval.tv_usec :=
+               Integer ((Rel_Time - Duration (timeval.tv_sec)) * 10#1#E6);
+ 
+             C_select (timeout => timeval'Unchecked_Access);
+             Check_Time := Clock;
+ 
+             exit when Abs_Time <= Check_Time;
+ 
+             Rel_Time := Abs_Time - Check_Time;
+          end loop;
+       end if;
+    end Timed_Delay;
+ 
+ end System.OS_Primitives;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osprim-vms.adb gcc-4.0.0/gcc/ada/s-osprim-vms.adb
*** gcc-3.4.3/gcc/ada/s-osprim-vms.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osprim-vms.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,193 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                  S Y S T E M . O S _ P R I M I T I V E S                 --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --          Copyright (C) 1998-2002 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the OpenVMS/Alpha version of this file
+ 
+ with System.Aux_DEC;
+ 
+ package body System.OS_Primitives is
+ 
+    --------------------------------------
+    -- Local functions and declarations --
+    --------------------------------------
+ 
+    function Get_GMToff return Integer;
+    pragma Import (C, Get_GMToff, "get_gmtoff");
+    --  Get the offset from GMT for this timezone
+ 
+    VMS_Epoch_Offset : constant Long_Integer :=
+                         10_000_000 *
+                           (3_506_716_800 + Long_Integer (Get_GMToff));
+    --  The offset between the Unix Epoch and the VMS Epoch
+ 
+    subtype Cond_Value_Type is System.Aux_DEC.Unsigned_Longword;
+    --  Condition Value return type
+ 
+    ----------------
+    -- Sys_Schdwk --
+    ----------------
+    --
+    --  Schedule Wakeup
+    --
+    --  status = returned status
+    --  pidadr = address of process id to be woken up
+    --  prcnam = name of process to be woken up
+    --  daytim = time to wake up
+    --  reptim = repitition interval of wakeup calls
+    --
+ 
+    procedure Sys_Schdwk
+      (
+       Status : out Cond_Value_Type;
+       Pidadr : in Address := Null_Address;
+       Prcnam : in String := String'Null_Parameter;
+       Daytim : in Long_Integer;
+       Reptim : in Long_Integer := Long_Integer'Null_Parameter
+      );
+ 
+    pragma Interface (External, Sys_Schdwk);
+    --  VMS system call to schedule a wakeup event
+    pragma Import_Valued_Procedure
+      (Sys_Schdwk, "SYS$SCHDWK",
+       (Cond_Value_Type, Address, String,         Long_Integer, Long_Integer),
+       (Value,           Value,   Descriptor (S), Reference,    Reference)
+      );
+ 
+    ----------------
+    -- Sys_Gettim --
+    ----------------
+    --
+    --  Get System Time
+    --
+    --  status = returned status
+    --  tim    = current system time
+    --
+ 
+    procedure Sys_Gettim
+      (
+       Status : out Cond_Value_Type;
+       Tim    : out OS_Time
+      );
+    --  VMS system call to get the current system time
+    pragma Interface (External, Sys_Gettim);
+    pragma Import_Valued_Procedure
+      (Sys_Gettim, "SYS$GETTIM",
+       (Cond_Value_Type, OS_Time),
+       (Value,           Reference)
+      );
+ 
+    ---------------
+    -- Sys_Hiber --
+    ---------------
+ 
+    --  Hibernate (until woken up)
+ 
+    --  status = returned status
+ 
+    procedure Sys_Hiber (Status : out Cond_Value_Type);
+    --  VMS system call to hibernate the current process
+    pragma Interface (External, Sys_Hiber);
+    pragma Import_Valued_Procedure
+      (Sys_Hiber, "SYS$HIBER",
+       (Cond_Value_Type),
+       (Value)
+      );
+ 
+    -----------
+    -- Clock --
+    -----------
+ 
+    function OS_Clock return OS_Time is
+       Status : Cond_Value_Type;
+       T      : OS_Time;
+    begin
+       Sys_Gettim (Status, T);
+       return (T);
+    end OS_Clock;
+ 
+    -----------
+    -- Clock --
+    -----------
+ 
+    function Clock return Duration is
+    begin
+       return To_Duration (OS_Clock, Absolute_Calendar);
+    end Clock;
+ 
+    ---------------------
+    -- Monotonic_Clock --
+    ---------------------
+ 
+    function Monotonic_Clock return Duration renames Clock;
+ 
+    -----------------
+    -- Timed_Delay --
+    -----------------
+ 
+    procedure Timed_Delay
+      (Time : Duration;
+       Mode : Integer)
+    is
+       Sleep_Time : OS_Time;
+       Status     : Cond_Value_Type;
+ 
+    begin
+       Sleep_Time := To_OS_Time (Time, Mode);
+       Sys_Schdwk (Status => Status, Daytim => Sleep_Time);
+       Sys_Hiber (Status);
+    end Timed_Delay;
+ 
+    -----------------
+    -- To_Duration --
+    -----------------
+ 
+    function To_Duration (T : OS_Time; Mode : Integer) return Duration is
+       pragma Warnings (Off, Mode);
+    begin
+       return Duration'Fixed_Value (T - VMS_Epoch_Offset) * 100;
+    end To_Duration;
+ 
+    ----------------
+    -- To_OS_Time --
+    ----------------
+ 
+    function To_OS_Time (D : Duration; Mode : Integer) return OS_Time is
+    begin
+       if Mode = Relative then
+          return -(Long_Integer'Integer_Value (D) / 100);
+       else
+          return Long_Integer'Integer_Value (D) / 100 + VMS_Epoch_Offset;
+       end if;
+    end To_OS_Time;
+ 
+ end System.OS_Primitives;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osprim-vms.ads gcc-4.0.0/gcc/ada/s-osprim-vms.ads
*** gcc-3.4.3/gcc/ada/s-osprim-vms.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osprim-vms.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,106 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                  S Y S T E M . O S _ P R I M I T I V E S                 --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --          Copyright (C) 1998-2003 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package provides low level primitives used to implement clock and
+ --  delays in non tasking applications on Alpha/VMS
+ 
+ --  The choice of the real clock/delay implementation (depending on whether
+ --  tasking is involved or not) is done via soft links (see s-tasoli.ads)
+ 
+ --  NEVER add any dependency to tasking packages here
+ 
+ package System.OS_Primitives is
+ 
+    subtype OS_Time is Long_Integer;
+    --  System time on VMS is used for performance reasons.
+    --  Note that OS_Time is *not* the same as Ada.Calendar.Time, the
+    --  difference being that relative OS_Time is negative, but relative
+    --  Calendar.Time is positive.
+    --  See Ada.Calendar.Delays for more information on VMS Time.
+ 
+    Max_Sensible_Delay : constant Duration :=
+                           Duration'Min (183 * 24 * 60 * 60.0,
+                                         Duration'Last);
+    --  Max of half a year delay, needed to prevent exceptions for large
+    --  delay values. It seems unlikely that any test will notice this
+    --  restriction, except in the case of applications setting the clock at
+    --  at run time (see s-tastim.adb). Also note that a larger value might
+    --  cause problems (e.g overflow, or more likely OS limitation in the
+    --  primitives used). In the case where half a year is too long (which
+    --  occurs in high integrity mode with 32-bit words, and possibly on
+    --  some specific ports of GNAT), Duration'Last is used instead.
+ 
+    function OS_Clock return OS_Time;
+    --  Returns "absolute" time, represented as an offset
+    --  relative to "the Epoch", which is Nov 17, 1858 on VMS.
+ 
+    function Clock return Duration;
+    pragma Inline (Clock);
+    --  Returns "absolute" time, represented as an offset
+    --  relative to "the Epoch", which is Jan 1, 1970 on unixes.
+    --  This implementation is affected by system's clock changes.
+ 
+    function Monotonic_Clock return Duration;
+    pragma Inline (Monotonic_Clock);
+    --  Returns "absolute" time, represented as an offset
+    --  relative to "the Epoch", which is Jan 1, 1970.
+    --  This clock implementation is immune to the system's clock changes.
+ 
+    Relative          : constant := 0;
+    Absolute_Calendar : constant := 1;
+    Absolute_RT       : constant := 2;
+    --  Values for Mode call below. Note that the compiler (exp_ch9.adb)
+    --  relies on these values. So any change here must be reflected in
+    --  corresponding changes in the compiler.
+ 
+    procedure Timed_Delay (Time : Duration; Mode : Integer);
+    --  Implements the semantics of the delay statement when no tasking is
+    --  used in the application.
+    --
+    --    Mode is one of the three values above
+    --
+    --    Time is a relative or absolute duration value, depending on Mode.
+    --
+    --  Note that currently Ada.Real_Time always uses the tasking run time, so
+    --  this procedure should never be called with Mode set to Absolute_RT.
+    --  This may change in future or bare board implementations.
+ 
+    function To_Duration (T : OS_Time; Mode : Integer) return Duration;
+    --  Convert VMS system time to Duration
+    --  Mode is one of the three values above
+ 
+    function To_OS_Time (D : Duration; Mode : Integer) return OS_Time;
+    --  Convert Duration to VMS system time
+    --  Mode is one of the three values above
+ 
+ end System.OS_Primitives;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-osprim-vxworks.adb gcc-4.0.0/gcc/ada/s-osprim-vxworks.adb
*** gcc-3.4.3/gcc/ada/s-osprim-vxworks.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-osprim-vxworks.adb	Tue Jul  6 13:57:30 2004
***************
*** 0 ****
--- 1,161 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                  S Y S T E M . O S _ P R I M I T I V E S                 --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --          Copyright (C) 1998-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This version is for VxWorks targets
+ 
+ with System.OS_Interface;
+ --  Since the thread library is part of the VxWorks kernel, using OS_Interface
+ --  is not a problem here, as long as we only use System.OS_Interface as a
+ --  set of C imported routines: using Ada routines from this package would
+ --  create a dependency on libgnarl in libgnat, which is not desirable.
+ 
+ with Interfaces.C;
+ --  used for type int
+ 
+ package body System.OS_Primitives is
+ 
+    use System.OS_Interface;
+    use type Interfaces.C.int;
+ 
+    ------------------------
+    -- Internal functions --
+    ------------------------
+ 
+    function To_Clock_Ticks (D : Duration) return int;
+    --  Convert a duration value (in seconds) into clock ticks.
+    --  Note that this routine is duplicated from System.OS_Interface since
+    --  as explained above, we do not want to depend on libgnarl
+ 
+    function To_Clock_Ticks (D : Duration) return int is
+       Ticks          : Long_Long_Integer;
+       Rate_Duration  : Duration;
+       Ticks_Duration : Duration;
+ 
+    begin
+       if D < 0.0 then
+          return -1;
+       end if;
+ 
+       --  Ensure that the duration can be converted to ticks
+       --  at the current clock tick rate without overflowing.
+ 
+       Rate_Duration := Duration (sysClkRateGet);
+ 
+       if D > (Duration'Last / Rate_Duration) then
+          Ticks := Long_Long_Integer (int'Last);
+       else
+          Ticks_Duration := D * Rate_Duration;
+          Ticks := Long_Long_Integer (Ticks_Duration);
+ 
+          if Ticks_Duration > Duration (Ticks) then
+             Ticks := Ticks + 1;
+          end if;
+ 
+          if Ticks > Long_Long_Integer (int'Last) then
+             Ticks := Long_Long_Integer (int'Last);
+          end if;
+       end if;
+ 
+       return int (Ticks);
+    end To_Clock_Ticks;
+ 
+    -----------
+    -- Clock --
+    -----------
+ 
+    function Clock return Duration is
+       TS     : aliased timespec;
+       Result : int;
+ 
+       use type Interfaces.C.int;
+ 
+    begin
+       Result := clock_gettime (CLOCK_REALTIME, TS'Unchecked_Access);
+       pragma Assert (Result = 0);
+       return Duration (TS.ts_sec) + Duration (TS.ts_nsec) / 10#1#E9;
+    end Clock;
+ 
+    ---------------------
+    -- Monotonic_Clock --
+    ---------------------
+ 
+    function Monotonic_Clock return Duration renames Clock;
+ 
+    -----------------
+    -- Timed_Delay --
+    -----------------
+ 
+    procedure Timed_Delay
+      (Time : Duration;
+       Mode : Integer)
+    is
+       Rel_Time   : Duration;
+       Abs_Time   : Duration;
+       Check_Time : Duration := Clock;
+       Ticks      : int;
+ 
+       Result     : int;
+       pragma Unreferenced (Result);
+ 
+    begin
+       if Mode = Relative then
+          Rel_Time := Time;
+          Abs_Time := Time + Check_Time;
+       else
+          Rel_Time := Time - Check_Time;
+          Abs_Time := Time;
+       end if;
+ 
+       if Rel_Time > 0.0 then
+          loop
+             Ticks := To_Clock_Ticks (Rel_Time);
+ 
+             if Mode = Relative and then Ticks < int'Last then
+                --  The first tick will delay anytime between 0 and
+                --  1 / sysClkRateGet seconds, so we need to add one to
+                --  be on the safe side.
+ 
+                Ticks := Ticks + 1;
+             end if;
+ 
+             Result := taskDelay (Ticks);
+             Check_Time := Clock;
+ 
+             exit when Abs_Time <= Check_Time;
+ 
+             Rel_Time := Abs_Time - Check_Time;
+          end loop;
+       end if;
+    end Timed_Delay;
+ 
+ end System.OS_Primitives;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-parame-ae653.ads gcc-4.0.0/gcc/ada/s-parame-ae653.ads
*** gcc-3.4.3/gcc/ada/s-parame-ae653.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-parame-ae653.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,203 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                    S Y S T E M . P A R A M E T E R S                     --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the default VxWorks AE 653 version of the package.`
+ 
+ --  This package defines some system dependent parameters for GNAT. These
+ --  are values that are referenced by the runtime library and are therefore
+ --  relevant to the target machine.
+ 
+ --  The parameters whose value is defined in the spec are not generally
+ --  expected to be changed. If they are changed, it will be necessary to
+ --  recompile the run-time library.
+ 
+ --  The parameters which are defined by functions can be changed by modifying
+ --  the body of System.Parameters in file s-parame.adb. A change to this body
+ --  requires only rebinding and relinking of the application.
+ 
+ --  Note: do not introduce any pragma Inline statements into this unit, since
+ --  otherwise the relinking and rebinding capability would be deactivated.
+ 
+ package System.Parameters is
+ pragma Pure (Parameters);
+ 
+    ---------------------------------------
+    -- Task And Stack Allocation Control --
+    ---------------------------------------
+ 
+    type Task_Storage_Size is new Integer;
+    --  Type used in tasking units for task storage size
+ 
+    type Size_Type is new Task_Storage_Size;
+    --  Type used to provide task storage size to runtime
+ 
+    Unspecified_Size : constant Size_Type := Size_Type'First;
+    --  Value used to indicate that no size type is set
+ 
+    subtype Ratio is Size_Type range -1 .. 100;
+    Dynamic : constant Size_Type := -1;
+    --  The secondary stack ratio is a constant between 0 and 100 which
+    --  determines the percentage of the allocated task stack that is
+    --  used by the secondary stack (the rest being the primary stack).
+    --  The special value of minus one indicates that the secondary
+    --  stack is to be allocated from the heap instead.
+ 
+    Sec_Stack_Ratio : constant Ratio := 50;
+    --  This constant defines the handling of the secondary stack
+ 
+    Sec_Stack_Dynamic : constant Boolean := Sec_Stack_Ratio = Dynamic;
+    --  Convenient Boolean for testing for dynamic secondary stack
+ 
+    function Default_Stack_Size return Size_Type;
+    --  Default task stack size used if none is specified
+ 
+    function Minimum_Stack_Size return Size_Type;
+    --  Minimum task stack size permitted
+ 
+    function Adjust_Storage_Size (Size : Size_Type) return Size_Type;
+    --  Given the storage size stored in the TCB, return the Storage_Size
+    --  value required by the RM for the Storage_Size attribute. The
+    --  required adjustment is as follows:
+    --
+    --    when Size = Unspecified_Size, return Default_Stack_Size
+    --    when Size < Minimum_Stack_Size, return Minimum_Stack_Size
+    --    otherwise return given Size
+ 
+    Default_Env_Stack_Size : constant Size_Type := 14_336;
+    --  Assumed size of the environment task, if no other information
+    --  is available. This value is used when stack checking is
+    --  enabled and no GNAT_STACK_LIMIT environment variable is set.
+    --  This value is chosen as the VxWorks default stack size is 20kB,
+    --  and a little more than 4kB is necessary for the run time.
+ 
+    Stack_Grows_Down  : constant Boolean := True;
+    --  This constant indicates whether the stack grows up (False) or
+    --  down (True) in memory as functions are called. It is used for
+    --  proper implementation of the stack overflow check.
+ 
+    ----------------------------------------------
+    -- Characteristics of types in Interfaces.C --
+    ----------------------------------------------
+ 
+    long_bits : constant := Long_Integer'Size;
+    --  Number of bits in type long and unsigned_long. The normal convention
+    --  is that this is the same as type Long_Integer, but this is not true
+    --  of all targets. For example, in OpenVMS long /= Long_Integer.
+ 
+    ----------------------------------------------
+    -- Behavior of Pragma Finalize_Storage_Only --
+    ----------------------------------------------
+ 
+    --  Garbage_Collected is a Boolean constant whose value indicates the
+    --  effect of the pragma Finalize_Storage_Entry on a controlled type.
+ 
+    --    Garbage_Collected = False
+ 
+    --      The system releases all storage on program termination only,
+    --      but not other garbage collection occurs, so finalization calls
+    --      are ommitted only for outer level onjects can be omitted if
+    --      pragma Finalize_Storage_Only is used.
+ 
+    --    Garbage_Collected = True
+ 
+    --      The system provides full garbage collection, so it is never
+    --      necessary to release storage for controlled objects for which
+    --      a pragma Finalize_Storage_Only is used.
+ 
+    Garbage_Collected : constant Boolean := False;
+    --  The storage mode for this system (release on program exit)
+ 
+    ---------------------
+    -- Tasking Profile --
+    ---------------------
+ 
+    --  In the following sections, constant parameters are defined to
+    --  allow some optimizations and fine tuning within the tasking run time
+    --  based on restrictions on the tasking features.
+ 
+    ----------------------
+    -- Locking Strategy --
+    ----------------------
+ 
+    Single_Lock : constant Boolean := False;
+    --  Indicates whether a single lock should be used within the tasking
+    --  run-time to protect internal structures. If True, a single lock
+    --  will be used, meaning less locking/unlocking operations, but also
+    --  more global contention. In general, Single_Lock should be set to
+    --  True on single processor machines, and to False to multi-processor
+    --  systems, but this can vary from application to application and also
+    --  depends on the scheduling policy.
+ 
+    -------------------
+    -- Task Abortion --
+    -------------------
+ 
+    No_Abort : constant Boolean := False;
+    --  This constant indicates whether abort statements and asynchronous
+    --  transfer of control (ATC) are disallowed. If set to True, it is
+    --  assumed that neither construct is used, and the run time does not
+    --  need to defer/undefer abort and check for pending actions at
+    --  completion points. A value of True for No_Abort corresponds to:
+    --  pragma Restrictions (No_Abort_Statements);
+    --  pragma Restrictions (Max_Asynchronous_Select_Nesting => 0);
+ 
+    ----------------------
+    -- Dynamic Priority --
+    ----------------------
+ 
+    Dynamic_Priority_Support : constant Boolean := True;
+    --  This constant indicates whether dynamic changes of task priorities
+    --  are allowed (True means normal RM mode in which such changes are
+    --  allowed). In particular, if this is False, then we do not need to
+    --  poll for pending base priority changes at every abort completion
+    --  point. A value of False for Dynamic_Priority_Support corresponds
+    --  to pragma Restrictions (No_Dynamic_Priorities);
+ 
+    ---------------------
+    -- Task Attributes --
+    ---------------------
+ 
+    Default_Attribute_Count : constant := 4;
+    --  Number of pre-allocated Address-sized task attributes stored in the
+    --  task control block.
+ 
+    --------------------
+    -- Runtime Traces --
+    --------------------
+ 
+    Runtime_Traces : constant Boolean := False;
+    --  This constant indicates whether the runtime outputs traces to a
+    --  predefined output or not (True means that traces are output).
+    --  See System.Traces for more details.
+ 
+ end System.Parameters;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-parame-hpux.ads gcc-4.0.0/gcc/ada/s-parame-hpux.ads
*** gcc-3.4.3/gcc/ada/s-parame-hpux.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-parame-hpux.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,202 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                    S Y S T E M . P A R A M E T E R S                     --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the HP version of this package
+ --  Blank line intentional so that it lines up exactly with default.
+ 
+ --  This package defines some system dependent parameters for GNAT. These
+ --  are values that are referenced by the runtime library and are therefore
+ --  relevant to the target machine.
+ 
+ --  The parameters whose value is defined in the spec are not generally
+ --  expected to be changed. If they are changed, it will be necessary to
+ --  recompile the run-time library.
+ 
+ --  The parameters which are defined by functions can be changed by modifying
+ --  the body of System.Parameters in file s-parame.adb. A change to this body
+ --  requires only rebinding and relinking of the application.
+ 
+ --  Note: do not introduce any pragma Inline statements into this unit, since
+ --  otherwise the relinking and rebinding capability would be deactivated.
+ 
+ package System.Parameters is
+ pragma Pure (Parameters);
+ 
+    ---------------------------------------
+    -- Task And Stack Allocation Control --
+    ---------------------------------------
+ 
+    type Task_Storage_Size is new Integer;
+    --  Type used in tasking units for task storage size
+ 
+    type Size_Type is new Task_Storage_Size;
+    --  Type used to provide task storage size to runtime
+ 
+    Unspecified_Size : constant Size_Type := Size_Type'First;
+    --  Value used to indicate that no size type is set
+ 
+    subtype Ratio is Size_Type range -1 .. 100;
+    Dynamic : constant Size_Type := -1;
+    --  The secondary stack ratio is a constant between 0 and 100 which
+    --  determines the percentage of the allocated task stack that is
+    --  used by the secondary stack (the rest being the primary stack).
+    --  The special value of minus one indicates that the secondary
+    --  stack is to be allocated from the heap instead.
+ 
+    Sec_Stack_Ratio : constant Ratio := Dynamic;
+    --  This constant defines the handling of the secondary stack
+ 
+    Sec_Stack_Dynamic : constant Boolean := Sec_Stack_Ratio = Dynamic;
+    --  Convenient Boolean for testing for dynamic secondary stack
+ 
+    function Default_Stack_Size return Size_Type;
+    --  Default task stack size used if none is specified
+ 
+    function Minimum_Stack_Size return Size_Type;
+    --  Minimum task stack size permitted
+ 
+    function Adjust_Storage_Size (Size : Size_Type) return Size_Type;
+    --  Given the storage size stored in the TCB, return the Storage_Size
+    --  value required by the RM for the Storage_Size attribute. The
+    --  required adjustment is as follows:
+    --
+    --    when Size = Unspecified_Size, return Default_Stack_Size
+    --    when Size < Minimum_Stack_Size, return Minimum_Stack_Size
+    --    otherwise return given Size
+ 
+    Default_Env_Stack_Size : constant Size_Type := 8_192_000;
+    --  Assumed size of the environment task, if no other information
+    --  is available. This value is used when stack checking is
+    --  enabled and no GNAT_STACK_LIMIT environment variable is set.
+ 
+    Stack_Grows_Down  : constant Boolean := False;
+    --  This constant indicates whether the stack grows up (False) or
+    --  down (True) in memory as functions are called. It is used for
+    --  proper implementation of the stack overflow check.
+ 
+    ----------------------------------------------
+    -- Characteristics of Types in Interfaces.C --
+    ----------------------------------------------
+ 
+    long_bits : constant := Long_Integer'Size;
+    --  Number of bits in type long and unsigned_long. The normal convention
+    --  is that this is the same as type Long_Integer, but this is not true
+    --  of all targets. For example, in OpenVMS long /= Long_Integer.
+ 
+    ----------------------------------------------
+    -- Behavior of Pragma Finalize_Storage_Only --
+    ----------------------------------------------
+ 
+    --  Garbage_Collected is a Boolean constant whose value indicates the
+    --  effect of the pragma Finalize_Storage_Entry on a controlled type.
+ 
+    --    Garbage_Collected = False
+ 
+    --      The system releases all storage on program termination only,
+    --      but not other garbage collection occurs, so finalization calls
+    --      are ommitted only for outer level onjects can be omitted if
+    --      pragma Finalize_Storage_Only is used.
+ 
+    --    Garbage_Collected = True
+ 
+    --      The system provides full garbage collection, so it is never
+    --      necessary to release storage for controlled objects for which
+    --      a pragma Finalize_Storage_Only is used.
+ 
+    Garbage_Collected : constant Boolean := False;
+    --  The storage mode for this system (release on program exit)
+ 
+    ---------------------
+    -- Tasking Profile --
+    ---------------------
+ 
+    --  In the following sections, constant parameters are defined to
+    --  allow some optimizations and fine tuning within the tasking run time
+    --  based on restrictions on the tasking features.
+ 
+    ----------------------
+    -- Locking Strategy --
+    ----------------------
+ 
+    Single_Lock : constant Boolean := False;
+    --  Indicates whether a single lock should be used within the tasking
+    --  run-time to protect internal structures. If True, a single lock
+    --  will be used, meaning less locking/unlocking operations, but also
+    --  more global contention. In general, Single_Lock should be set to
+    --  True on single processor machines, and to False to multi-processor
+    --  systems, but this can vary from application to application and also
+    --  depends on the scheduling policy.
+ 
+    -------------------
+    -- Task Abortion --
+    -------------------
+ 
+    No_Abort : constant Boolean := False;
+    --  This constant indicates whether abort statements and asynchronous
+    --  transfer of control (ATC) are disallowed. If set to True, it is
+    --  assumed that neither construct is used, and the run time does not
+    --  need to defer/undefer abort and check for pending actions at
+    --  completion points. A value of True for No_Abort corresponds to:
+    --  pragma Restrictions (No_Abort_Statements);
+    --  pragma Restrictions (Max_Asynchronous_Select_Nesting => 0);
+ 
+    ----------------------
+    -- Dynamic Priority --
+    ----------------------
+ 
+    Dynamic_Priority_Support : constant Boolean := True;
+    --  This constant indicates whether dynamic changes of task priorities
+    --  are allowed (True means normal RM mode in which such changes are
+    --  allowed). In particular, if this is False, then we do not need to
+    --  poll for pending base priority changes at every abort completion
+    --  point. A value of False for Dynamic_Priority_Support corresponds
+    --  to pragma Restrictions (No_Dynamic_Priorities);
+ 
+    ---------------------
+    -- Task Attributes --
+    ---------------------
+ 
+    Default_Attribute_Count : constant := 4;
+    --  Number of pre-allocated Address-sized task attributes stored in the
+    --  task control block.
+ 
+    --------------------
+    -- Runtime Traces --
+    --------------------
+ 
+    Runtime_Traces : constant Boolean := False;
+    --  This constant indicates whether the runtime outputs traces to a
+    --  predefined output or not (True means that traces are output).
+    --  See System.Traces for more details.
+ 
+ end System.Parameters;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-parame-linux.adb gcc-4.0.0/gcc/ada/s-parame-linux.adb
*** gcc-3.4.3/gcc/ada/s-parame-linux.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-parame-linux.adb	Wed Oct 27 12:28:07 2004
***************
*** 0 ****
--- 1,77 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                    S Y S T E M . P A R A M E T E R S                     --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 1995-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the Linux (native) specific version
+ 
+ package body System.Parameters is
+ 
+    -------------------------
+    -- Adjust_Storage_Size --
+    -------------------------
+ 
+    function Adjust_Storage_Size (Size : Size_Type) return Size_Type is
+    begin
+       if Size = Unspecified_Size then
+          return Default_Stack_Size;
+ 
+       elsif Size < Minimum_Stack_Size then
+          return Minimum_Stack_Size;
+ 
+       else
+          return Size;
+       end if;
+    end Adjust_Storage_Size;
+ 
+    ------------------------
+    -- Default_Stack_Size --
+    ------------------------
+ 
+    function Default_Stack_Size return Size_Type is
+    begin
+       return 2 * 1024 * 1024;
+    end Default_Stack_Size;
+ 
+    ------------------------
+    -- Minimum_Stack_Size --
+    ------------------------
+ 
+    function Minimum_Stack_Size return Size_Type is
+    begin
+       --  12K is required for stack-checking to work on this target, using the
+       --  System.Stack_Checking runtime facility and possibly relying on the
+       --  stack greedy GCC scheme to propagate an exception in the ZCX case.
+ 
+       return 12 * 1024;
+    end Minimum_Stack_Size;
+ 
+ end System.Parameters;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-parame-mingw.adb gcc-4.0.0/gcc/ada/s-parame-mingw.adb
*** gcc-3.4.3/gcc/ada/s-parame-mingw.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-parame-mingw.adb	Wed Oct 27 12:28:25 2004
***************
*** 0 ****
--- 1,79 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                    S Y S T E M . P A R A M E T E R S                     --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the Windows (native) specific version
+ 
+ package body System.Parameters is
+ 
+    -------------------------
+    -- Adjust_Storage_Size --
+    -------------------------
+ 
+    function Adjust_Storage_Size (Size : Size_Type) return Size_Type is
+    begin
+       if Size = Unspecified_Size then
+          return Default_Stack_Size;
+ 
+       elsif Size < Minimum_Stack_Size then
+          return Minimum_Stack_Size;
+ 
+       else
+          return Size;
+       end if;
+    end Adjust_Storage_Size;
+ 
+    ------------------------
+    -- Default_Stack_Size --
+    ------------------------
+ 
+    --  Note that on Windows this is not really the default stack size. It
+    --  is the default used for the stack checking support but there is no
+    --  way to set the thread stack size at runtime. Only the initial thread
+    --  stack size can be specified. The real stack size limit is set at
+    --  link time. See GNU/Linker --stack=x,y option.
+ 
+    function Default_Stack_Size return Size_Type is
+    begin
+       return 20 * 1024;
+    end Default_Stack_Size;
+ 
+    ------------------------
+    -- Minimum_Stack_Size --
+    ------------------------
+ 
+    function Minimum_Stack_Size return Size_Type is
+    begin
+       return 1024;
+    end Minimum_Stack_Size;
+ 
+ end System.Parameters;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-parame-os2.adb gcc-4.0.0/gcc/ada/s-parame-os2.adb
*** gcc-3.4.3/gcc/ada/s-parame-os2.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-parame-os2.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,83 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                    S Y S T E M . P A R A M E T E R S                     --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 1997-2002 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the OS/2 specific version - default stacksizes need to be large
+ 
+ package body System.Parameters is
+ 
+    ------------------------
+    -- Default_Stack_Size --
+    ------------------------
+ 
+    function Default_Stack_Size return Size_Type is
+    begin
+       --  The default stack size for extra tasks is based on the
+       --  default stack size for the main task (8 MB) and for the heap
+       --  (32 MB).
+ 
+       --  In OS/2 it doesn't hurt to define large stacks, unless
+       --  the system is configured to commit all memory reservations.
+       --  This is not a default configuration however.
+ 
+       return 1024 * 1024;
+    end Default_Stack_Size;
+ 
+    ------------------------
+    -- Minimum_Stack_Size --
+    ------------------------
+ 
+    function Minimum_Stack_Size return Size_Type is
+    begin
+       --  System functions may need 8 kB of stack, so 12 kB seems a
+       --  good minimum.
+       return 12 * 1024;
+    end Minimum_Stack_Size;
+ 
+    -------------------------
+    -- Adjust_Storage_Size --
+    -------------------------
+ 
+    function Adjust_Storage_Size (Size : Size_Type) return Size_Type is
+    begin
+       if Size = Unspecified_Size then
+          return Default_Stack_Size;
+ 
+       elsif Size < Minimum_Stack_Size then
+          return Minimum_Stack_Size;
+ 
+       else
+          return Size;
+       end if;
+    end Adjust_Storage_Size;
+ 
+ end System.Parameters;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-parame-rtems.adb gcc-4.0.0/gcc/ada/s-parame-rtems.adb
*** gcc-3.4.3/gcc/ada/s-parame-rtems.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-parame-rtems.adb	Thu Jan 27 11:56:57 2005
***************
*** 0 ****
--- 1,80 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                    S Y S T E M . P A R A M E T E R S                     --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 1997-1998 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the RTEMS specific version
+ 
+ with Interfaces.C;
+ 
+ package body System.Parameters is
+ 
+    function ada_pthread_minimum_stack_size return Interfaces.C.size_t;
+    pragma Import (C, ada_pthread_minimum_stack_size,
+      "_ada_pthread_minimum_stack_size");
+ 
+    ------------------------
+    -- Default_Stack_Size --
+    ------------------------
+ 
+    function Default_Stack_Size return Size_Type is
+    begin
+       return Size_Type (ada_pthread_minimum_stack_size);
+    end Default_Stack_Size;
+ 
+    ------------------------
+    -- Minimum_Stack_Size --
+    ------------------------
+ 
+    function Minimum_Stack_Size return Size_Type is
+ 
+    begin
+       return Size_Type (ada_pthread_minimum_stack_size);
+    end Minimum_Stack_Size;
+ 
+    -------------------------
+    -- Adjust_Storage_Size --
+    -------------------------
+ 
+    function Adjust_Storage_Size (Size : Size_Type) return Size_Type is
+    begin
+       if Size = Unspecified_Size then
+          return Default_Stack_Size;
+ 
+       elsif Size < Minimum_Stack_Size then
+          return Minimum_Stack_Size;
+ 
+       else
+          return Size;
+       end if;
+    end Adjust_Storage_Size;
+ 
+ end System.Parameters;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-parame-solaris.adb gcc-4.0.0/gcc/ada/s-parame-solaris.adb
*** gcc-3.4.3/gcc/ada/s-parame-solaris.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-parame-solaris.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,80 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                    S Y S T E M . P A R A M E T E R S                     --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 1998-2001 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the Solaris (native) specific version
+ 
+ package body System.Parameters is
+ 
+    ------------------------
+    -- Default_Stack_Size --
+    ------------------------
+ 
+    function Default_Stack_Size return Size_Type is
+    begin
+       return 100_000;
+    end Default_Stack_Size;
+ 
+    ------------------------
+    -- Minimum_Stack_Size --
+    ------------------------
+ 
+    function Minimum_Stack_Size return Size_Type is
+ 
+       thr_min_stack : constant Size_Type := 1160;
+       --  hard coded value for Solaris 8 to avoid adding dependency on
+       --  libthread for every Ada program.
+       --  This value does not really matter anyway, since this is checked
+       --  and adjusted at the library level when creating a thread.
+ 
+    begin
+       return thr_min_stack;
+    end Minimum_Stack_Size;
+ 
+    -------------------------
+    -- Adjust_Storage_Size --
+    -------------------------
+ 
+    function Adjust_Storage_Size (Size : Size_Type) return Size_Type is
+    begin
+       if Size = Unspecified_Size then
+          return Default_Stack_Size;
+ 
+       elsif Size < Minimum_Stack_Size then
+          return Minimum_Stack_Size;
+ 
+       else
+          return Size;
+       end if;
+    end Adjust_Storage_Size;
+ 
+ end System.Parameters;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-parame-vms-restrict.ads gcc-4.0.0/gcc/ada/s-parame-vms-restrict.ads
*** gcc-3.4.3/gcc/ada/s-parame-vms-restrict.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-parame-vms-restrict.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,203 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                    S Y S T E M . P A R A M E T E R S                     --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the OpenVMS version for restricted tasking.
+ 
+ --  Blank line intentional so that it lines up exactly with default.
+ 
+ --  This package defines some system dependent parameters for GNAT. These
+ --  are values that are referenced by the runtime library and are therefore
+ --  relevant to the target machine.
+ 
+ --  The parameters whose value is defined in the spec are not generally
+ --  expected to be changed. If they are changed, it will be necessary to
+ --  recompile the run-time library.
+ 
+ --  The parameters which are defined by functions can be changed by modifying
+ --  the body of System.Parameters in file s-parame.adb. A change to this body
+ --  requires only rebinding and relinking of the application.
+ 
+ --  Note: do not introduce any pragma Inline statements into this unit, since
+ --  otherwise the relinking and rebinding capability would be deactivated.
+ 
+ package System.Parameters is
+ pragma Pure (Parameters);
+ 
+    ---------------------------------------
+    -- Task And Stack Allocation Control --
+    ---------------------------------------
+ 
+    type Task_Storage_Size is new Integer;
+    --  Type used in tasking units for task storage size
+ 
+    type Size_Type is new Task_Storage_Size;
+    --  Type used to provide task storage size to runtime
+ 
+    Unspecified_Size : constant Size_Type := Size_Type'First;
+    --  Value used to indicate that no size type is set
+ 
+    subtype Ratio is Size_Type range -1 .. 100;
+    Dynamic : constant Size_Type := -1;
+    --  The secondary stack ratio is a constant between 0 and 100 which
+    --  determines the percentage of the allocated task stack that is
+    --  used by the secondary stack (the rest being the primary stack).
+    --  The special value of minus one indicates that the secondary
+    --  stack is to be allocated from the heap instead.
+ 
+    Sec_Stack_Ratio : constant Ratio := Dynamic;
+    --  This constant defines the handling of the secondary stack
+ 
+    Sec_Stack_Dynamic : constant Boolean := Sec_Stack_Ratio = Dynamic;
+    --  Convenient Boolean for testing for dynamic secondary stack
+ 
+    function Default_Stack_Size return Size_Type;
+    --  Default task stack size used if none is specified
+ 
+    function Minimum_Stack_Size return Size_Type;
+    --  Minimum task stack size permitted
+ 
+    function Adjust_Storage_Size (Size : Size_Type) return Size_Type;
+    --  Given the storage size stored in the TCB, return the Storage_Size
+    --  value required by the RM for the Storage_Size attribute. The
+    --  required adjustment is as follows:
+    --
+    --    when Size = Unspecified_Size, return Default_Stack_Size
+    --    when Size < Minimum_Stack_Size, return Minimum_Stack_Size
+    --    otherwise return given Size
+ 
+    Default_Env_Stack_Size : constant Size_Type := 8_192_000;
+    --  Assumed size of the environment task, if no other information
+    --  is available. This value is used when stack checking is
+    --  enabled and no GNAT_STACK_LIMIT environment variable is set.
+ 
+    Stack_Grows_Down  : constant Boolean := True;
+    --  This constant indicates whether the stack grows up (False) or
+    --  down (True) in memory as functions are called. It is used for
+    --  proper implementation of the stack overflow check.
+ 
+    ----------------------------------------------
+    -- Characteristics of types in Interfaces.C --
+    ----------------------------------------------
+ 
+    long_bits : constant := 32;
+    --  Number of bits in type long and unsigned_long. The normal convention
+    --  is that this is the same as type Long_Integer, but this is not true
+    --  of all targets. For example, in OpenVMS long /= Long_Integer.
+ 
+    ----------------------------------------------
+    -- Behavior of Pragma Finalize_Storage_Only --
+    ----------------------------------------------
+ 
+    --  Garbage_Collected is a Boolean constant whose value indicates the
+    --  effect of the pragma Finalize_Storage_Entry on a controlled type.
+ 
+    --    Garbage_Collected = False
+ 
+    --      The system releases all storage on program termination only,
+    --      but not other garbage collection occurs, so finalization calls
+    --      are ommitted only for outer level onjects can be omitted if
+    --      pragma Finalize_Storage_Only is used.
+ 
+    --    Garbage_Collected = True
+ 
+    --      The system provides full garbage collection, so it is never
+    --      necessary to release storage for controlled objects for which
+    --      a pragma Finalize_Storage_Only is used.
+ 
+    Garbage_Collected : constant Boolean := False;
+    --  The storage mode for this system (release on program exit)
+ 
+    ---------------------
+    -- Tasking Profile --
+    ---------------------
+ 
+    --  In the following sections, constant parameters are defined to
+    --  allow some optimizations and fine tuning within the tasking run time
+    --  based on restrictions on the tasking features.
+ 
+    ----------------------
+    -- Locking Strategy --
+    ----------------------
+ 
+    Single_Lock : constant Boolean := True;
+    --  Indicates whether a single lock should be used within the tasking
+    --  run-time to protect internal structures. If True, a single lock
+    --  will be used, meaning less locking/unlocking operations, but also
+    --  more global contention. In general, Single_Lock should be set to
+    --  True on single processor machines, and to False to multi-processor
+    --  systems, but this can vary from application to application and also
+    --  depends on the scheduling policy.
+ 
+    -------------------
+    -- Task Abortion --
+    -------------------
+ 
+    No_Abort : constant Boolean := True;
+    --  This constant indicates whether abort statements and asynchronous
+    --  transfer of control (ATC) are disallowed. If set to True, it is
+    --  assumed that neither construct is used, and the run time does not
+    --  need to defer/undefer abort and check for pending actions at
+    --  completion points. A value of True for No_Abort corresponds to:
+    --  pragma Restrictions (No_Abort_Statements);
+    --  pragma Restrictions (Max_Asynchronous_Select_Nesting => 0);
+ 
+    ----------------------
+    -- Dynamic Priority --
+    ----------------------
+ 
+    Dynamic_Priority_Support : constant Boolean := False;
+    --  This constant indicates whether dynamic changes of task priorities
+    --  are allowed (True means normal RM mode in which such changes are
+    --  allowed). In particular, if this is False, then we do not need to
+    --  poll for pending base priority changes at every abort completion
+    --  point. A value of False for Dynamic_Priority_Support corresponds
+    --  to pragma Restrictions (No_Dynamic_Priorities);
+ 
+    ---------------------
+    -- Task Attributes --
+    ---------------------
+ 
+    Default_Attribute_Count : constant := 4;
+    --  Number of pre-allocated Address-sized task attributes stored in the
+    --  task control block.
+ 
+    --------------------
+    -- Runtime Traces --
+    --------------------
+ 
+    Runtime_Traces : constant Boolean := False;
+    --  This constant indicates whether the runtime outputs traces to a
+    --  predefined output or not (True means that traces are output).
+    --  See System.Traces for more details.
+ 
+ end System.Parameters;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-parame-vms.ads gcc-4.0.0/gcc/ada/s-parame-vms.ads
*** gcc-3.4.3/gcc/ada/s-parame-vms.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-parame-vms.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,202 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                    S Y S T E M . P A R A M E T E R S                     --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the OpenVMS version.
+ --  Blank line intentional so that it lines up exactly with default.
+ 
+ --  This package defines some system dependent parameters for GNAT. These
+ --  are values that are referenced by the runtime library and are therefore
+ --  relevant to the target machine.
+ 
+ --  The parameters whose value is defined in the spec are not generally
+ --  expected to be changed. If they are changed, it will be necessary to
+ --  recompile the run-time library.
+ 
+ --  The parameters which are defined by functions can be changed by modifying
+ --  the body of System.Parameters in file s-parame.adb. A change to this body
+ --  requires only rebinding and relinking of the application.
+ 
+ --  Note: do not introduce any pragma Inline statements into this unit, since
+ --  otherwise the relinking and rebinding capability would be deactivated.
+ 
+ package System.Parameters is
+ pragma Pure (Parameters);
+ 
+    ---------------------------------------
+    -- Task And Stack Allocation Control --
+    ---------------------------------------
+ 
+    type Task_Storage_Size is new Integer;
+    --  Type used in tasking units for task storage size
+ 
+    type Size_Type is new Task_Storage_Size;
+    --  Type used to provide task storage size to runtime
+ 
+    Unspecified_Size : constant Size_Type := Size_Type'First;
+    --  Value used to indicate that no size type is set
+ 
+    subtype Ratio is Size_Type range -1 .. 100;
+    Dynamic : constant Size_Type := -1;
+    --  The secondary stack ratio is a constant between 0 and 100 which
+    --  determines the percentage of the allocated task stack that is
+    --  used by the secondary stack (the rest being the primary stack).
+    --  The special value of minus one indicates that the secondary
+    --  stack is to be allocated from the heap instead.
+ 
+    Sec_Stack_Ratio : constant Ratio := Dynamic;
+    --  This constant defines the handling of the secondary stack
+ 
+    Sec_Stack_Dynamic : constant Boolean := Sec_Stack_Ratio = Dynamic;
+    --  Convenient Boolean for testing for dynamic secondary stack
+ 
+    function Default_Stack_Size return Size_Type;
+    --  Default task stack size used if none is specified
+ 
+    function Minimum_Stack_Size return Size_Type;
+    --  Minimum task stack size permitted
+ 
+    function Adjust_Storage_Size (Size : Size_Type) return Size_Type;
+    --  Given the storage size stored in the TCB, return the Storage_Size
+    --  value required by the RM for the Storage_Size attribute. The
+    --  required adjustment is as follows:
+    --
+    --    when Size = Unspecified_Size, return Default_Stack_Size
+    --    when Size < Minimum_Stack_Size, return Minimum_Stack_Size
+    --    otherwise return given Size
+ 
+    Default_Env_Stack_Size : constant Size_Type := 8_192_000;
+    --  Assumed size of the environment task, if no other information
+    --  is available. This value is used when stack checking is
+    --  enabled and no GNAT_STACK_LIMIT environment variable is set.
+ 
+    Stack_Grows_Down  : constant Boolean := True;
+    --  This constant indicates whether the stack grows up (False) or
+    --  down (True) in memory as functions are called. It is used for
+    --  proper implementation of the stack overflow check.
+ 
+    ----------------------------------------------
+    -- Characteristics of types in Interfaces.C --
+    ----------------------------------------------
+ 
+    long_bits : constant := 32;
+    --  Number of bits in type long and unsigned_long. The normal convention
+    --  is that this is the same as type Long_Integer, but this is not true
+    --  of all targets. For example, in OpenVMS long /= Long_Integer.
+ 
+    ----------------------------------------------
+    -- Behavior of Pragma Finalize_Storage_Only --
+    ----------------------------------------------
+ 
+    --  Garbage_Collected is a Boolean constant whose value indicates the
+    --  effect of the pragma Finalize_Storage_Entry on a controlled type.
+ 
+    --    Garbage_Collected = False
+ 
+    --      The system releases all storage on program termination only,
+    --      but not other garbage collection occurs, so finalization calls
+    --      are ommitted only for outer level onjects can be omitted if
+    --      pragma Finalize_Storage_Only is used.
+ 
+    --    Garbage_Collected = True
+ 
+    --      The system provides full garbage collection, so it is never
+    --      necessary to release storage for controlled objects for which
+    --      a pragma Finalize_Storage_Only is used.
+ 
+    Garbage_Collected : constant Boolean := False;
+    --  The storage mode for this system (release on program exit)
+ 
+    ---------------------
+    -- Tasking Profile --
+    ---------------------
+ 
+    --  In the following sections, constant parameters are defined to
+    --  allow some optimizations and fine tuning within the tasking run time
+    --  based on restrictions on the tasking features.
+ 
+    ----------------------
+    -- Locking Strategy --
+    ----------------------
+ 
+    Single_Lock : constant Boolean := True;
+    --  Indicates whether a single lock should be used within the tasking
+    --  run-time to protect internal structures. If True, a single lock
+    --  will be used, meaning less locking/unlocking operations, but also
+    --  more global contention. In general, Single_Lock should be set to
+    --  True on single processor machines, and to False to multi-processor
+    --  systems, but this can vary from application to application and also
+    --  depends on the scheduling policy.
+ 
+    -------------------
+    -- Task Abortion --
+    -------------------
+ 
+    No_Abort : constant Boolean := False;
+    --  This constant indicates whether abort statements and asynchronous
+    --  transfer of control (ATC) are disallowed. If set to True, it is
+    --  assumed that neither construct is used, and the run time does not
+    --  need to defer/undefer abort and check for pending actions at
+    --  completion points. A value of True for No_Abort corresponds to:
+    --  pragma Restrictions (No_Abort_Statements);
+    --  pragma Restrictions (Max_Asynchronous_Select_Nesting => 0);
+ 
+    ----------------------
+    -- Dynamic Priority --
+    ----------------------
+ 
+    Dynamic_Priority_Support : constant Boolean := True;
+    --  This constant indicates whether dynamic changes of task priorities
+    --  are allowed (True means normal RM mode in which such changes are
+    --  allowed). In particular, if this is False, then we do not need to
+    --  poll for pending base priority changes at every abort completion
+    --  point. A value of False for Dynamic_Priority_Support corresponds
+    --  to pragma Restrictions (No_Dynamic_Priorities);
+ 
+    ---------------------
+    -- Task Attributes --
+    ---------------------
+ 
+    Default_Attribute_Count : constant := 4;
+    --  Number of pre-allocated Address-sized task attributes stored in the
+    --  task control block.
+ 
+    --------------------
+    -- Runtime Traces --
+    --------------------
+ 
+    Runtime_Traces : constant Boolean := False;
+    --  This constant indicates whether the runtime outputs traces to a
+    --  predefined output or not (True means that traces are output).
+    --  See System.Traces for more details.
+ 
+ end System.Parameters;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-parame-vxworks.ads gcc-4.0.0/gcc/ada/s-parame-vxworks.ads
*** gcc-3.4.3/gcc/ada/s-parame-vxworks.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-parame-vxworks.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,203 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                    S Y S T E M . P A R A M E T E R S                     --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the default VxWorks version of the package.`
+ 
+ --  This package defines some system dependent parameters for GNAT. These
+ --  are values that are referenced by the runtime library and are therefore
+ --  relevant to the target machine.
+ 
+ --  The parameters whose value is defined in the spec are not generally
+ --  expected to be changed. If they are changed, it will be necessary to
+ --  recompile the run-time library.
+ 
+ --  The parameters which are defined by functions can be changed by modifying
+ --  the body of System.Parameters in file s-parame.adb. A change to this body
+ --  requires only rebinding and relinking of the application.
+ 
+ --  Note: do not introduce any pragma Inline statements into this unit, since
+ --  otherwise the relinking and rebinding capability would be deactivated.
+ 
+ package System.Parameters is
+ pragma Pure (Parameters);
+ 
+    ---------------------------------------
+    -- Task And Stack Allocation Control --
+    ---------------------------------------
+ 
+    type Task_Storage_Size is new Integer;
+    --  Type used in tasking units for task storage size
+ 
+    type Size_Type is new Task_Storage_Size;
+    --  Type used to provide task storage size to runtime
+ 
+    Unspecified_Size : constant Size_Type := Size_Type'First;
+    --  Value used to indicate that no size type is set
+ 
+    subtype Ratio is Size_Type range -1 .. 100;
+    Dynamic : constant Size_Type := -1;
+    --  The secondary stack ratio is a constant between 0 and 100 which
+    --  determines the percentage of the allocated task stack that is
+    --  used by the secondary stack (the rest being the primary stack).
+    --  The special value of minus one indicates that the secondary
+    --  stack is to be allocated from the heap instead.
+ 
+    Sec_Stack_Ratio : constant Ratio := Dynamic;
+    --  This constant defines the handling of the secondary stack
+ 
+    Sec_Stack_Dynamic : constant Boolean := Sec_Stack_Ratio = Dynamic;
+    --  Convenient Boolean for testing for dynamic secondary stack
+ 
+    function Default_Stack_Size return Size_Type;
+    --  Default task stack size used if none is specified
+ 
+    function Minimum_Stack_Size return Size_Type;
+    --  Minimum task stack size permitted
+ 
+    function Adjust_Storage_Size (Size : Size_Type) return Size_Type;
+    --  Given the storage size stored in the TCB, return the Storage_Size
+    --  value required by the RM for the Storage_Size attribute. The
+    --  required adjustment is as follows:
+    --
+    --    when Size = Unspecified_Size, return Default_Stack_Size
+    --    when Size < Minimum_Stack_Size, return Minimum_Stack_Size
+    --    otherwise return given Size
+ 
+    Default_Env_Stack_Size : constant Size_Type := 14_336;
+    --  Assumed size of the environment task, if no other information
+    --  is available. This value is used when stack checking is
+    --  enabled and no GNAT_STACK_LIMIT environment variable is set.
+    --  This value is chosen as the VxWorks default stack size is 20kB,
+    --  and a little more than 4kB is necessary for the run time.
+ 
+    Stack_Grows_Down  : constant Boolean := True;
+    --  This constant indicates whether the stack grows up (False) or
+    --  down (True) in memory as functions are called. It is used for
+    --  proper implementation of the stack overflow check.
+ 
+    ----------------------------------------------
+    -- Characteristics of types in Interfaces.C --
+    ----------------------------------------------
+ 
+    long_bits : constant := Long_Integer'Size;
+    --  Number of bits in type long and unsigned_long. The normal convention
+    --  is that this is the same as type Long_Integer, but this is not true
+    --  of all targets. For example, in OpenVMS long /= Long_Integer.
+ 
+    ----------------------------------------------
+    -- Behavior of Pragma Finalize_Storage_Only --
+    ----------------------------------------------
+ 
+    --  Garbage_Collected is a Boolean constant whose value indicates the
+    --  effect of the pragma Finalize_Storage_Entry on a controlled type.
+ 
+    --    Garbage_Collected = False
+ 
+    --      The system releases all storage on program termination only,
+    --      but not other garbage collection occurs, so finalization calls
+    --      are ommitted only for outer level onjects can be omitted if
+    --      pragma Finalize_Storage_Only is used.
+ 
+    --    Garbage_Collected = True
+ 
+    --      The system provides full garbage collection, so it is never
+    --      necessary to release storage for controlled objects for which
+    --      a pragma Finalize_Storage_Only is used.
+ 
+    Garbage_Collected : constant Boolean := False;
+    --  The storage mode for this system (release on program exit)
+ 
+    ---------------------
+    -- Tasking Profile --
+    ---------------------
+ 
+    --  In the following sections, constant parameters are defined to
+    --  allow some optimizations and fine tuning within the tasking run time
+    --  based on restrictions on the tasking features.
+ 
+    ----------------------
+    -- Locking Strategy --
+    ----------------------
+ 
+    Single_Lock : constant Boolean := False;
+    --  Indicates whether a single lock should be used within the tasking
+    --  run-time to protect internal structures. If True, a single lock
+    --  will be used, meaning less locking/unlocking operations, but also
+    --  more global contention. In general, Single_Lock should be set to
+    --  True on single processor machines, and to False to multi-processor
+    --  systems, but this can vary from application to application and also
+    --  depends on the scheduling policy.
+ 
+    -------------------
+    -- Task Abortion --
+    -------------------
+ 
+    No_Abort : constant Boolean := False;
+    --  This constant indicates whether abort statements and asynchronous
+    --  transfer of control (ATC) are disallowed. If set to True, it is
+    --  assumed that neither construct is used, and the run time does not
+    --  need to defer/undefer abort and check for pending actions at
+    --  completion points. A value of True for No_Abort corresponds to:
+    --  pragma Restrictions (No_Abort_Statements);
+    --  pragma Restrictions (Max_Asynchronous_Select_Nesting => 0);
+ 
+    ----------------------
+    -- Dynamic Priority --
+    ----------------------
+ 
+    Dynamic_Priority_Support : constant Boolean := True;
+    --  This constant indicates whether dynamic changes of task priorities
+    --  are allowed (True means normal RM mode in which such changes are
+    --  allowed). In particular, if this is False, then we do not need to
+    --  poll for pending base priority changes at every abort completion
+    --  point. A value of False for Dynamic_Priority_Support corresponds
+    --  to pragma Restrictions (No_Dynamic_Priorities);
+ 
+    ---------------------
+    -- Task Attributes --
+    ---------------------
+ 
+    Default_Attribute_Count : constant := 4;
+    --  Number of pre-allocated Address-sized task attributes stored in the
+    --  task control block.
+ 
+    --------------------
+    -- Runtime Traces --
+    --------------------
+ 
+    Runtime_Traces : constant Boolean := False;
+    --  This constant indicates whether the runtime outputs traces to a
+    --  predefined output or not (True means that traces are output).
+    --  See System.Traces for more details.
+ 
+ end System.Parameters;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-parint.adb gcc-4.0.0/gcc/ada/s-parint.adb
*** gcc-3.4.3/gcc/ada/s-parint.adb	Thu Apr 24 17:54:12 2003
--- gcc-4.0.0/gcc/ada/s-parint.adb	Mon Jan  3 15:37:33 2005
***************
*** 7,13 ****
  --                                  B o d y                                 --
  --                   (Dummy body for non-distributed case)                  --
  --                                                                          --
! --          Copyright (C) 1995-2001 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 7,13 ----
  --                                  B o d y                                 --
  --                   (Dummy body for non-distributed case)                  --
  --                                                                          --
! --          Copyright (C) 1995-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body System.Partition_Interface 
*** 45,52 ****
     type Pkg_Node;
     type Pkg_List is access Pkg_Node;
     type Pkg_Node is record
!       Name : String_Access;
!       Next : Pkg_List;
     end record;
  
     Pkg_Head : Pkg_List;
--- 45,54 ----
     type Pkg_Node;
     type Pkg_List is access Pkg_Node;
     type Pkg_Node is record
!       Name          : String_Access;
!       Subp_Info     : System.Address;
!       Subp_Info_Len : Integer;
!       Next          : Pkg_List;
     end record;
  
     Pkg_Head : Pkg_List;
*************** package body System.Partition_Interface 
*** 63,71 ****
     --  String prepended in top of shared passive packages
  
     procedure Check
!      (Name    : in Unit_Name;
!       Version : in String;
!       RCI     : in Boolean := True)
     is
     begin
        null;
--- 65,73 ----
     --  String prepended in top of shared passive packages
  
     procedure Check
!      (Name    : Unit_Name;
!       Version : String;
!       RCI     : Boolean := True)
     is
     begin
        null;
*************** package body System.Partition_Interface 
*** 76,83 ****
     -----------------------------
  
     function Get_Active_Partition_ID
!      (Name : Unit_Name)
!       return System.RPC.Partition_ID
     is
        P : Pkg_List := Pkg_Head;
        N : String   := Lower (Name);
--- 78,84 ----
     -----------------------------
  
     function Get_Active_Partition_ID
!      (Name : Unit_Name) return System.RPC.Partition_ID
     is
        P : Pkg_List := Pkg_Head;
        N : String   := Lower (Name);
*************** package body System.Partition_Interface 
*** 98,107 ****
     -- Get_Active_Version --
     ------------------------
  
!    function Get_Active_Version
!      (Name : Unit_Name)
!       return String
!    is
     begin
        return "";
     end Get_Active_Version;
--- 99,105 ----
     -- Get_Active_Version --
     ------------------------
  
!    function Get_Active_Version (Name : Unit_Name) return String is
     begin
        return "";
     end Get_Active_Version;
*************** package body System.Partition_Interface 
*** 120,127 ****
     ------------------------------
  
     function Get_Passive_Partition_ID
!      (Name : Unit_Name)
!       return System.RPC.Partition_ID
     is
     begin
        return Get_Local_Partition_ID;
--- 118,124 ----
     ------------------------------
  
     function Get_Passive_Partition_ID
!      (Name : Unit_Name) return System.RPC.Partition_ID
     is
     begin
        return Get_Local_Partition_ID;
*************** package body System.Partition_Interface 
*** 131,151 ****
     -- Get_Passive_Version --
     -------------------------
  
!    function Get_Passive_Version
!      (Name : Unit_Name)
!       return String
!    is
     begin
        return "";
     end Get_Passive_Version;
  
     ------------------------------
     -- Get_RCI_Package_Receiver --
     ------------------------------
  
     function Get_RCI_Package_Receiver
!      (Name : Unit_Name)
!       return Interfaces.Unsigned_64
     is
     begin
        return 0;
--- 128,177 ----
     -- Get_Passive_Version --
     -------------------------
  
!    function Get_Passive_Version (Name : Unit_Name) return String is
     begin
        return "";
     end Get_Passive_Version;
  
+    ------------------
+    -- Get_RAS_Info --
+    ------------------
+ 
+    procedure Get_RAS_Info
+      (Name          :  Unit_Name;
+       Subp_Id       :  Subprogram_Id;
+       Proxy_Address : out Interfaces.Unsigned_64)
+    is
+       LName : constant String := Lower (Name);
+       N : Pkg_List;
+    begin
+       N := Pkg_Head;
+       while N /= null loop
+          if N.Name.all = LName then
+             declare
+                subtype Subprogram_Array is RCI_Subp_Info_Array
+                  (First_RCI_Subprogram_Id ..
+                   First_RCI_Subprogram_Id + N.Subp_Info_Len - 1);
+                Subprograms : Subprogram_Array;
+                for Subprograms'Address use N.Subp_Info;
+                pragma Import (Ada, Subprograms);
+             begin
+                Proxy_Address :=
+                  Interfaces.Unsigned_64 (Subprograms (Integer (Subp_Id)).Addr);
+                return;
+             end;
+          end if;
+          N := N.Next;
+       end loop;
+       Proxy_Address := 0;
+    end Get_RAS_Info;
+ 
     ------------------------------
     -- Get_RCI_Package_Receiver --
     ------------------------------
  
     function Get_RCI_Package_Receiver
!      (Name : Unit_Name) return Interfaces.Unsigned_64
     is
     begin
        return 0;
*************** package body System.Partition_Interface 
*** 162,181 ****
        null;
     end Get_Unique_Remote_Pointer;
  
-    ------------
-    -- Launch --
-    ------------
- 
-    procedure Launch
-      (Rsh_Command  : in String;
-       Name_Is_Host : in Boolean;
-       General_Name : in String;
-       Command_Line : in String)
-    is
-    begin
-       null;
-    end Launch;
- 
     -----------
     -- Lower --
     -----------
--- 188,193 ----
*************** package body System.Partition_Interface 
*** 195,228 ****
        return T;
     end Lower;
  
-    ------------------------------------
-    -- Raise_Program_Error_For_E_4_18 --
-    ------------------------------------
- 
-    procedure Raise_Program_Error_For_E_4_18 is
-    begin
-       Ada.Exceptions.Raise_Exception
-         (Program_Error'Identity,
-         "Illegal usage of remote access to class-wide type. See RM E.4(18)");
-    end Raise_Program_Error_For_E_4_18;
- 
     -------------------------------------
     -- Raise_Program_Error_Unknown_Tag --
     -------------------------------------
  
     procedure Raise_Program_Error_Unknown_Tag
!      (E : in Ada.Exceptions.Exception_Occurrence)
     is
     begin
        Ada.Exceptions.Raise_Exception
          (Program_Error'Identity, Ada.Exceptions.Exception_Message (E));
     end Raise_Program_Error_Unknown_Tag;
  
!    --------------
!    -- RCI_Info --
!    --------------
  
!    package body RCI_Info is
  
        -----------------------------
        -- Get_Active_Partition_ID --
--- 207,229 ----
        return T;
     end Lower;
  
     -------------------------------------
     -- Raise_Program_Error_Unknown_Tag --
     -------------------------------------
  
     procedure Raise_Program_Error_Unknown_Tag
!      (E : Ada.Exceptions.Exception_Occurrence)
     is
     begin
        Ada.Exceptions.Raise_Exception
          (Program_Error'Identity, Ada.Exceptions.Exception_Message (E));
     end Raise_Program_Error_Unknown_Tag;
  
!    -----------------
!    -- RCI_Locator --
!    -----------------
  
!    package body RCI_Locator is
  
        -----------------------------
        -- Get_Active_Partition_ID --
*************** package body System.Partition_Interface 
*** 253,270 ****
           return 0;
        end Get_RCI_Package_Receiver;
  
!    end RCI_Info;
  
     ------------------------------
     -- Register_Passive_Package --
     ------------------------------
  
     procedure Register_Passive_Package
!      (Name    : in Unit_Name;
!       Version : in String := "")
     is
     begin
!       Register_Receiving_Stub (Passive_Prefix & Name, null, Version);
     end Register_Passive_Package;
  
     -----------------------------
--- 254,272 ----
           return 0;
        end Get_RCI_Package_Receiver;
  
!    end RCI_Locator;
  
     ------------------------------
     -- Register_Passive_Package --
     ------------------------------
  
     procedure Register_Passive_Package
!      (Name    : Unit_Name;
!       Version : String := "")
     is
     begin
!       Register_Receiving_Stub
!         (Passive_Prefix & Name, null, Version, System.Null_Address, 0);
     end Register_Passive_Package;
  
     -----------------------------
*************** package body System.Partition_Interface 
*** 272,290 ****
     -----------------------------
  
     procedure Register_Receiving_Stub
!      (Name     : in Unit_Name;
!       Receiver : in RPC.RPC_Receiver;
!       Version  : in String := "")
     is
     begin
        if Pkg_Tail = null then
!          Pkg_Head := new Pkg_Node'(new String'(Lower (Name)), null);
!          Pkg_Tail := Pkg_Head;
! 
        else
!          Pkg_Tail.Next := new Pkg_Node'(new String'(Lower (Name)), null);
!          Pkg_Tail := Pkg_Tail.Next;
        end if;
     end Register_Receiving_Stub;
  
     ---------
--- 274,296 ----
     -----------------------------
  
     procedure Register_Receiving_Stub
!      (Name          : Unit_Name;
!       Receiver      : RPC_Receiver;
!       Version       : String := "";
!       Subp_Info     : System.Address;
!       Subp_Info_Len : Integer)
     is
+       N : constant Pkg_List :=
+             new Pkg_Node'(new String'(Lower (Name)),
+                           Subp_Info, Subp_Info_Len,
+                           Next => null);
     begin
        if Pkg_Tail = null then
!          Pkg_Head := N;
        else
!          Pkg_Tail.Next := N;
        end if;
+       Pkg_Tail := N;
     end Register_Receiving_Stub;
  
     ---------
*************** package body System.Partition_Interface 
*** 292,298 ****
     ---------
  
     procedure Run
!      (Main : in Main_Subprogram_Type := null)
     is
     begin
        if Main /= null then
--- 298,304 ----
     ---------
  
     procedure Run
!      (Main : Main_Subprogram_Type := null)
     is
     begin
        if Main /= null then
*************** package body System.Partition_Interface 
*** 300,303 ****
--- 306,323 ----
        end if;
     end Run;
  
+    --------------------
+    -- Same_Partition --
+    --------------------
+ 
+    function Same_Partition
+       (Left  : access RACW_Stub_Type;
+        Right : access RACW_Stub_Type) return Boolean
+    is
+       pragma Unreferenced (Left);
+       pragma Unreferenced (Right);
+    begin
+       return True;
+    end Same_Partition;
+ 
  end System.Partition_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-parint.ads gcc-4.0.0/gcc/ada/s-parint.ads
*** gcc-3.4.3/gcc/ada/s-parint.ads	Tue Oct 21 13:42:14 2003
--- gcc-4.0.0/gcc/ada/s-parint.ads	Mon Jan  3 15:37:33 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1995-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1995-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 35,40 ****
--- 35,41 ----
  --  an appropriate WITH, and the interface can be expected to remain stable.
  
  with Ada.Exceptions;
+ with Ada.Streams;
  with Interfaces;
  with System.RPC;
  
*************** package System.Partition_Interface is
*** 42,49 ****
  
     pragma Elaborate_Body;
  
     type Subprogram_Id is new Natural;
!    --  This type is used exclusively by stubs
  
     subtype Unit_Name is String;
     --  Name of Ada units
--- 43,65 ----
  
     pragma Elaborate_Body;
  
+    type DSA_Implementation_Name is (No_DSA, GARLIC_DSA, PolyORB_DSA);
+    DSA_Implementation : constant DSA_Implementation_Name := No_DSA;
+ 
+    --  RCI receiving stubs contain a table of descriptors for
+    --  all user subprograms exported by the unit.
+ 
     type Subprogram_Id is new Natural;
!    First_RCI_Subprogram_Id : constant := 2;
! 
!    type RCI_Subp_Info is record
!       Addr : System.Address;
!       --  Local address of the proxy object
!    end record;
! 
!    type RCI_Subp_Info_Access is access all RCI_Subp_Info;
!    type RCI_Subp_Info_Array is array (Integer range <>) of
!      aliased RCI_Subp_Info;
  
     subtype Unit_Name is String;
     --  Name of Ada units
*************** package System.Partition_Interface is
*** 56,146 ****
        Addr         : Interfaces.Unsigned_64;
        Asynchronous : Boolean;
     end record;
     type RACW_Stub_Type_Access is access RACW_Stub_Type;
     --  This type is used by the expansion to implement distributed objects.
     --  Do not change its definition or its layout without updating
     --  exp_dist.adb.
  
     procedure Check
!      (Name    : in Unit_Name;
!       Version : in String;
!       RCI     : in Boolean := True);
     --  Use by the main subprogram to check that a remote receiver
     --  unit has has the same version than the caller's one.
  
!    function Get_Active_Partition_ID
!      (Name : Unit_Name)
!       return RPC.Partition_ID;
!    --  Similar in some respects to RCI_Info.Get_Active_Partition_ID
  
!    function Get_Active_Version
!       (Name : Unit_Name)
!        return String;
     --  Similar in some respects to Get_Active_Partition_ID
  
     function Get_Local_Partition_ID return RPC.Partition_ID;
     --  Return the Partition_ID of the current partition
  
     function Get_Passive_Partition_ID
!      (Name : Unit_Name)
!      return RPC.Partition_ID;
     --  Return the Partition_ID of the given shared passive partition
  
     function Get_Passive_Version (Name : Unit_Name) return String;
     --  Return the version corresponding to a shared passive unit
  
     function Get_RCI_Package_Receiver
!      (Name : Unit_Name)
!       return Interfaces.Unsigned_64;
!    --  Similar in some respects to RCI_Info.Get_RCI_Package_Receiver
  
     procedure Get_Unique_Remote_Pointer
       (Handler : in out RACW_Stub_Type_Access);
     --  Get a unique pointer on a remote object
  
-    procedure Launch
-      (Rsh_Command  : in String;
-       Name_Is_Host : in Boolean;
-       General_Name : in String;
-       Command_Line : in String);
-    --  General_Name represents the name of the machine or the name of the
-    --  partition (depending on the value of Name_Is_Host). Command_Line
-    --  holds the extra options that will be given on the command line.
-    --  Rsh_Command is typically "rsh", that will be used to launch the
-    --  other partition.
- 
-    procedure Raise_Program_Error_For_E_4_18;
-    pragma No_Return (Raise_Program_Error_For_E_4_18);
-    --  Raise Program_Error with an error message explaining why it has been
-    --  raised. The rule in E.4 (18) is tricky and misleading for most users
-    --  of the distributed systems annex.
- 
     procedure Raise_Program_Error_Unknown_Tag
!      (E : in Ada.Exceptions.Exception_Occurrence);
     pragma No_Return (Raise_Program_Error_Unknown_Tag);
     --  Raise Program_Error with the same message as E one
  
     procedure Register_Receiving_Stub
!      (Name     : in Unit_Name;
!       Receiver : in RPC.RPC_Receiver;
!       Version  : in String := "");
     --  Register the fact that the Name receiving stub is now elaborated.
     --  Register the access value to the package RPC_Receiver procedure.
  
     procedure Register_Passive_Package
!      (Name    : in Unit_Name;
!       Version : in String := "");
     --  Register a passive package
  
     generic
        RCI_Name : String;
!    package RCI_Info is
        function Get_RCI_Package_Receiver return Interfaces.Unsigned_64;
        function Get_Active_Partition_ID return RPC.Partition_ID;
!    end RCI_Info;
     --  RCI package information caching
  
!    procedure Run (Main : in Main_Subprogram_Type := null);
     --  Run the main subprogram
  
  end System.Partition_Interface;
--- 72,183 ----
        Addr         : Interfaces.Unsigned_64;
        Asynchronous : Boolean;
     end record;
+ 
     type RACW_Stub_Type_Access is access RACW_Stub_Type;
     --  This type is used by the expansion to implement distributed objects.
     --  Do not change its definition or its layout without updating
     --  exp_dist.adb.
  
+    type RAS_Proxy_Type is tagged limited record
+       All_Calls_Remote : Boolean;
+       Receiver         : System.Address;
+       Subp_Id          : Subprogram_Id;
+    end record;
+ 
+    type RAS_Proxy_Type_Access is access RAS_Proxy_Type;
+    pragma No_Strict_Aliasing (RAS_Proxy_Type_Access);
+    --  This type is used by the expansion to implement distributed objects.
+    --  Do not change its definition or its layout without updating
+    --  Exp_Dist.Build_Remote_Supbrogram_Proxy_Type.
+ 
+    --  The Request_Access type is used for communication between the PCS
+    --  and the RPC receiver generated by the compiler: it contains all the
+    --  necessary information for the receiver to process an incoming call.
+ 
+    type RST_Access is access all Ada.Streams.Root_Stream_Type'Class;
+    type Request_Access is record
+       Params : RST_Access;
+       --  A stream describing the called subprogram and its parameters
+ 
+       Result : RST_Access;
+       --  A stream where the result, raised exception, or out values,
+       --  are marshalled.
+    end record;
+ 
     procedure Check
!      (Name    : Unit_Name;
!       Version : String;
!       RCI     : Boolean := True);
     --  Use by the main subprogram to check that a remote receiver
     --  unit has has the same version than the caller's one.
  
!    function Same_Partition
!       (Left  : access RACW_Stub_Type;
!        Right : access RACW_Stub_Type) return Boolean;
!    --  Determine whether Left and Right correspond to objects instantiated
!    --  on the same partition, for enforcement of E.4(19).
  
!    function Get_Active_Partition_ID (Name : Unit_Name) return RPC.Partition_ID;
!    --  Similar in some respects to RCI_Locator.Get_Active_Partition_ID
! 
!    function Get_Active_Version (Name : Unit_Name) return String;
     --  Similar in some respects to Get_Active_Partition_ID
  
     function Get_Local_Partition_ID return RPC.Partition_ID;
     --  Return the Partition_ID of the current partition
  
     function Get_Passive_Partition_ID
!      (Name : Unit_Name) return RPC.Partition_ID;
     --  Return the Partition_ID of the given shared passive partition
  
     function Get_Passive_Version (Name : Unit_Name) return String;
     --  Return the version corresponding to a shared passive unit
  
     function Get_RCI_Package_Receiver
!      (Name : Unit_Name) return Interfaces.Unsigned_64;
!    --  Similar in some respects to RCI_Locator.Get_RCI_Package_Receiver
  
     procedure Get_Unique_Remote_Pointer
       (Handler : in out RACW_Stub_Type_Access);
     --  Get a unique pointer on a remote object
  
     procedure Raise_Program_Error_Unknown_Tag
!      (E : Ada.Exceptions.Exception_Occurrence);
     pragma No_Return (Raise_Program_Error_Unknown_Tag);
     --  Raise Program_Error with the same message as E one
  
+    type RPC_Receiver is access procedure (R : Request_Access);
     procedure Register_Receiving_Stub
!      (Name          : Unit_Name;
!       Receiver      : RPC_Receiver;
!       Version       : String := "";
!       Subp_Info     : System.Address;
!       Subp_Info_Len : Integer);
     --  Register the fact that the Name receiving stub is now elaborated.
     --  Register the access value to the package RPC_Receiver procedure.
  
+    procedure Get_RAS_Info
+      (Name          :  Unit_Name;
+       Subp_Id       :  Subprogram_Id;
+       Proxy_Address : out Interfaces.Unsigned_64);
+    --  Look up the address of the proxy object for the given subprogram
+    --  in the named unit, or Null_Address if not present on the local
+    --  partition.
+ 
     procedure Register_Passive_Package
!      (Name    : Unit_Name;
!       Version : String := "");
     --  Register a passive package
  
     generic
        RCI_Name : String;
!    package RCI_Locator is
        function Get_RCI_Package_Receiver return Interfaces.Unsigned_64;
        function Get_Active_Partition_ID return RPC.Partition_ID;
!    end RCI_Locator;
     --  RCI package information caching
  
!    procedure Run (Main : Main_Subprogram_Type := null);
     --  Run the main subprogram
  
  end System.Partition_Interface;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-pooglo.ads gcc-4.0.0/gcc/ada/s-pooglo.ads
*** gcc-3.4.3/gcc/ada/s-pooglo.ads	Thu Apr 24 17:54:12 2003
--- gcc-4.0.0/gcc/ada/s-pooglo.ads	Wed Oct 27 13:41:23 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --        Copyright (C) 1992,1993,1994 Free Software Foundation, Inc.       --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --        Copyright (C) 1992-1994, 2004 Free Software Foundation, Inc.      --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** pragma Elaborate_Body;
*** 47,53 ****
     --    no automatic reclaim
     --    minimal overhead
  
!    --  Default pool in the compiler for access types globally declared
  
     type Unbounded_No_Reclaim_Pool is new
       System.Storage_Pools.Root_Storage_Pool with null record;
--- 47,54 ----
     --    no automatic reclaim
     --    minimal overhead
  
!    --  Pool simulating the allocation/deallocation strategy used by the
!    --  compiler for access types globally declared.
  
     type Unbounded_No_Reclaim_Pool is new
       System.Storage_Pools.Root_Storage_Pool with null record;
*************** pragma Elaborate_Body;
*** 68,74 ****
        Storage_Size : System.Storage_Elements.Storage_Count;
        Alignment    : System.Storage_Elements.Storage_Count);
  
!    --  Pool object for the compiler
  
     Global_Pool_Object : Unbounded_No_Reclaim_Pool;
  
--- 69,78 ----
        Storage_Size : System.Storage_Elements.Storage_Count;
        Alignment    : System.Storage_Elements.Storage_Count);
  
!    --  Pool object used by the compiler when implicit Storage Pool objects are
!    --  explicitly referred to. For instance when writing something like:
!    --     for T'Storage_Pool use Q'Storage_Pool;
!    --  and Q'Storage_Pool hasn't been defined explicitly.
  
     Global_Pool_Object : Unbounded_No_Reclaim_Pool;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/s-poosiz.adb gcc-4.0.0/gcc/ada/s-poosiz.adb
*** gcc-3.4.3/gcc/ada/s-poosiz.adb	Mon Jan  5 15:20:46 2004
--- gcc-4.0.0/gcc/ada/s-poosiz.adb	Wed Dec  8 11:49:43 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body System.Pool_Size is
*** 153,160 ****
     ----------------
  
     procedure Initialize  (Pool : in out Stack_Bounded_Pool) is
        Align : constant SSE.Storage_Count :=
!         SSE.Storage_Count'Max (SSE.Storage_Count'Alignment, Pool.Alignment);
  
     begin
        if Pool.Elmt_Size = 0 then
--- 153,167 ----
     ----------------
  
     procedure Initialize  (Pool : in out Stack_Bounded_Pool) is
+ 
+       --  Define the appropriate alignment for allocations. This is the
+       --  maximum of the requested alignment, and the alignment required
+       --  for Storage_Count values. The latter test is to ensure that we
+       --  can properly reference the linked list pointers for free lists.
+ 
        Align : constant SSE.Storage_Count :=
!                 SSE.Storage_Count'Max
!                   (SSE.Storage_Count'Alignment, Pool.Alignment);
  
     begin
        if Pool.Elmt_Size = 0 then
*************** package body System.Pool_Size is
*** 165,171 ****
           Pool.First_Empty := 1;
  
           --  Compute the size to allocate given the size of the element and
!          --  the possible Alignment clause
  
           Pool.Aligned_Elmt_Size :=
             SSE.Storage_Count'Max (SC_Size,
--- 172,178 ----
           Pool.First_Empty := 1;
  
           --  Compute the size to allocate given the size of the element and
!          --  the possible alignment requirement as defined above.
  
           Pool.Aligned_Elmt_Size :=
             SSE.Storage_Count'Max (SC_Size,
*************** package body System.Pool_Size is
*** 178,185 ****
     ------------------
  
     function  Storage_Size
!      (Pool : Stack_Bounded_Pool)
!       return SSE.Storage_Count
     is
     begin
        return Pool.Pool_Size;
--- 185,191 ----
     ------------------
  
     function  Storage_Size
!      (Pool : Stack_Bounded_Pool) return SSE.Storage_Count
     is
     begin
        return Pool.Pool_Size;
*************** package body System.Pool_Size is
*** 205,224 ****
  
        function Size
          (Pool  : Stack_Bounded_Pool;
!          Chunk : SSE.Storage_Count)
!          return SSE.Storage_Count;
        --  Fetch the field 'size' of a chunk of available storage
  
        function Next
          (Pool  : Stack_Bounded_Pool;
!          Chunk : SSE.Storage_Count)
!          return  SSE.Storage_Count;
        --  Fetch the field 'next' of a chunk of available storage
  
        function Chunk_Of
          (Pool : Stack_Bounded_Pool;
!          Addr : System.Address)
!          return SSE.Storage_Count;
        --  Give the chunk number in the pool from its Address
  
        --------------
--- 211,227 ----
  
        function Size
          (Pool  : Stack_Bounded_Pool;
!          Chunk : SSE.Storage_Count) return SSE.Storage_Count;
        --  Fetch the field 'size' of a chunk of available storage
  
        function Next
          (Pool  : Stack_Bounded_Pool;
!          Chunk : SSE.Storage_Count) return SSE.Storage_Count;
        --  Fetch the field 'next' of a chunk of available storage
  
        function Chunk_Of
          (Pool : Stack_Bounded_Pool;
!          Addr : System.Address) return SSE.Storage_Count;
        --  Give the chunk number in the pool from its Address
  
        --------------
*************** package body System.Pool_Size is
*** 284,291 ****
  
        function Chunk_Of
          (Pool : Stack_Bounded_Pool;
!          Addr : System.Address)
!          return SSE.Storage_Count
        is
        begin
           return 1 + abs (Addr - Pool.The_Pool (1)'Address);
--- 287,293 ----
  
        function Chunk_Of
          (Pool : Stack_Bounded_Pool;
!          Addr : System.Address) return SSE.Storage_Count
        is
        begin
           return 1 + abs (Addr - Pool.The_Pool (1)'Address);
*************** package body System.Pool_Size is
*** 339,346 ****
  
        function Next
          (Pool  : Stack_Bounded_Pool;
!          Chunk : SSE.Storage_Count)
!          return  SSE.Storage_Count
        is
        begin
           pragma Warnings (Off);
--- 341,347 ----
  
        function Next
          (Pool  : Stack_Bounded_Pool;
!          Chunk : SSE.Storage_Count) return SSE.Storage_Count
        is
        begin
           pragma Warnings (Off);
*************** package body System.Pool_Size is
*** 397,404 ****
  
        function Size
          (Pool  : Stack_Bounded_Pool;
!          Chunk : SSE.Storage_Count)
!          return  SSE.Storage_Count
        is
        begin
           pragma Warnings (Off);
--- 398,404 ----
  
        function Size
          (Pool  : Stack_Bounded_Pool;
!          Chunk : SSE.Storage_Count) return SSE.Storage_Count
        is
        begin
           pragma Warnings (Off);
diff -Nrcpad gcc-3.4.3/gcc/ada/s-poosiz.ads gcc-4.0.0/gcc/ada/s-poosiz.ads
*** gcc-3.4.3/gcc/ada/s-poosiz.ads	Thu Apr 24 17:54:13 2003
--- gcc-4.0.0/gcc/ada/s-poosiz.ads	Wed Dec  8 11:49:43 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --        Copyright (C) 1992,1993,1994 Free Software Foundation, Inc.       --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** pragma Elaborate_Body;
*** 66,73 ****
        end record;
  
     function Storage_Size
!      (Pool : Stack_Bounded_Pool)
!       return System.Storage_Elements.Storage_Count;
  
     procedure Allocate
       (Pool         : in out Stack_Bounded_Pool;
--- 66,72 ----
        end record;
  
     function Storage_Size
!      (Pool : Stack_Bounded_Pool) return System.Storage_Elements.Storage_Count;
  
     procedure Allocate
       (Pool         : in out Stack_Bounded_Pool;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-proinf-irix-athread.adb gcc-4.0.0/gcc/ada/s-proinf-irix-athread.adb
*** gcc-3.4.3/gcc/ada/s-proinf-irix-athread.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-proinf-irix-athread.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,221 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                 S Y S T E M . P R O G R A M  _  I N F O                  --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 1997-1999 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is an Irix (old pthread library) version of this package.
+ 
+ --  This package   contains the parameters  used by   the run-time system at
+ --  program startup.  These parameters are  isolated in this package body to
+ --  facilitate replacement by the end user.
+ --
+ --  To replace the default values, copy this source file into your build
+ --  directory, edit the file to reflect your desired behavior, and recompile
+ --  with the command:
+ --
+ --     % gcc -c -O2 -gnatpg s-proinf.adb
+ --
+ --  then relink your application as usual.
+ --
+ 
+ with GNAT.OS_Lib;
+ 
+ package body System.Program_Info is
+ 
+    Kbytes : constant := 1024;
+ 
+    Default_Initial_Sproc_Count  : constant := 0;
+    Default_Max_Sproc_Count      : constant := 128;
+    Default_Sproc_Stack_Size     : constant := 16#4000#;
+    Default_Stack_Guard_Pages    : constant := 1;
+    Default_Default_Time_Slice   : constant := 0.0;
+    Default_Default_Task_Stack   : constant := 12 * Kbytes;
+    Default_Pthread_Sched_Signal : constant := 35;
+    Default_Pthread_Arena_Size   : constant := 16#40000#;
+    Default_Os_Default_Priority  : constant := 0;
+ 
+    -------------------------
+    -- Initial_Sproc_Count --
+    -------------------------
+ 
+    function Initial_Sproc_Count return Integer is
+ 
+       function sysmp (P1 : Integer) return Integer;
+       pragma Import (C, sysmp, "sysmp", "sysmp");
+ 
+       MP_NPROCS : constant := 1; --   # processor in complex
+ 
+       Pthread_Sproc_Count : constant GNAT.OS_Lib.String_Access :=
+         GNAT.OS_Lib.Getenv ("PTHREAD_SPROC_COUNT");
+ 
+    begin
+       if Pthread_Sproc_Count.all'Length = 0 then
+          return Default_Initial_Sproc_Count;
+ 
+       elsif Pthread_Sproc_Count.all = "AUTO" then
+          return sysmp (MP_NPROCS);
+ 
+       else
+          return Integer'Value (Pthread_Sproc_Count.all);
+       end if;
+    exception
+       when others =>
+          return Default_Initial_Sproc_Count;
+    end Initial_Sproc_Count;
+ 
+    ---------------------
+    -- Max_Sproc_Count --
+    ---------------------
+ 
+    function Max_Sproc_Count return Integer is
+       Pthread_Max_Sproc_Count : constant GNAT.OS_Lib.String_Access :=
+         GNAT.OS_Lib.Getenv ("PTHREAD_MAX_SPROC_COUNT");
+ 
+    begin
+       if Pthread_Max_Sproc_Count.all'Length = 0 then
+          return Default_Max_Sproc_Count;
+       else
+          return Integer'Value (Pthread_Max_Sproc_Count.all);
+       end if;
+    exception
+       when others =>
+          return Default_Max_Sproc_Count;
+    end Max_Sproc_Count;
+ 
+    ----------------------
+    -- Sproc_Stack_Size --
+    ----------------------
+ 
+    function Sproc_Stack_Size return Integer is
+    begin
+       return Default_Sproc_Stack_Size;
+    end Sproc_Stack_Size;
+ 
+    ------------------------
+    -- Default_Time_Slice --
+    ------------------------
+ 
+    function Default_Time_Slice return Duration is
+       Pthread_Time_Slice_Sec : constant GNAT.OS_Lib.String_Access :=
+         GNAT.OS_Lib.Getenv ("PTHREAD_TIME_SLICE_SEC");
+       Pthread_Time_Slice_Usec : constant GNAT.OS_Lib.String_Access :=
+         GNAT.OS_Lib.Getenv ("PTHREAD_TIME_SLICE_USEC");
+ 
+       Val_Sec, Val_Usec : Integer := 0;
+ 
+    begin
+       if Pthread_Time_Slice_Sec.all'Length /= 0 or
+         Pthread_Time_Slice_Usec.all'Length /= 0
+       then
+          if Pthread_Time_Slice_Sec.all'Length /= 0 then
+             Val_Sec := Integer'Value (Pthread_Time_Slice_Sec.all);
+          end if;
+ 
+          if Pthread_Time_Slice_Usec.all'Length /= 0 then
+             Val_Usec := Integer'Value (Pthread_Time_Slice_Usec.all);
+          end if;
+ 
+          return Duration (Val_Sec) + Duration (Val_Usec) / 1000.0;
+       else
+          return Default_Default_Time_Slice;
+       end if;
+ 
+    exception
+       when others =>
+          return Default_Default_Time_Slice;
+    end Default_Time_Slice;
+ 
+    ------------------------
+    -- Default_Task_Stack --
+    ------------------------
+ 
+    function Default_Task_Stack return Integer is
+    begin
+       return Default_Default_Task_Stack;
+    end Default_Task_Stack;
+ 
+    -----------------------
+    -- Stack_Guard_Pages --
+    -----------------------
+ 
+    function Stack_Guard_Pages return Integer is
+       Pthread_Stack_Guard_Pages : constant GNAT.OS_Lib.String_Access :=
+         GNAT.OS_Lib.Getenv ("PTHREAD_STACK_GUARD_PAGES");
+ 
+    begin
+       if Pthread_Stack_Guard_Pages.all'Length /= 0 then
+          return Integer'Value (Pthread_Stack_Guard_Pages.all);
+       else
+          return Default_Stack_Guard_Pages;
+       end if;
+    exception
+       when others =>
+          return Default_Stack_Guard_Pages;
+    end Stack_Guard_Pages;
+ 
+    --------------------------
+    -- Pthread_Sched_Signal --
+    --------------------------
+ 
+    function Pthread_Sched_Signal return Integer is
+    begin
+       return Default_Pthread_Sched_Signal;
+    end Pthread_Sched_Signal;
+ 
+    ------------------------
+    -- Pthread_Arena_Size --
+    ------------------------
+ 
+    function Pthread_Arena_Size  return Integer is
+       Pthread_Arena_Size : constant GNAT.OS_Lib.String_Access :=
+         GNAT.OS_Lib.Getenv ("PTHREAD_ARENA_SIZE");
+ 
+    begin
+       if Pthread_Arena_Size.all'Length = 0 then
+          return Default_Pthread_Arena_Size;
+       else
+          return Integer'Value (Pthread_Arena_Size.all);
+       end if;
+    exception
+       when others =>
+          return Default_Pthread_Arena_Size;
+    end Pthread_Arena_Size;
+ 
+    -------------------------
+    -- Os_Default_Priority --
+    -------------------------
+ 
+    function Os_Default_Priority return Integer is
+    begin
+       return Default_Os_Default_Priority;
+    end Os_Default_Priority;
+ 
+ end System.Program_Info;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-proinf-irix-athread.ads gcc-4.0.0/gcc/ada/s-proinf-irix-athread.ads
*** gcc-3.4.3/gcc/ada/s-proinf-irix-athread.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-proinf-irix-athread.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,96 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                 S Y S T E M . P R O G R A M  _  I N F O                  --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 1997-2003 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package contains the definitions and routines used as parameters
+ --  to the run-time system at program startup for the SGI implementation.
+ 
+ package System.Program_Info is
+ 
+    function Initial_Sproc_Count return Integer;
+    --
+    --  The number of sproc created at program startup for scheduling
+    --  threads.
+    --
+ 
+    function Max_Sproc_Count     return Integer;
+    --
+    --  The maximum number of sprocs that can be created by the program
+    --  for servicing threads.  This limit includes both the pre-created
+    --  sprocs and those explicitly created under program control.
+    --
+ 
+    function Sproc_Stack_Size    return Integer;
+    --
+    --  The size, in bytes, of the sproc's initial stack.
+    --
+ 
+    function Default_Time_Slice  return Duration;
+    --
+    --  The default time quanta for round-robin scheduling of threads of
+    --  equal priority.  This default value can be overridden on a per-task
+    --  basis by specifying an alternate value via the implementation-defined
+    --  Task_Info pragma. See s-tasinf.ads for more information.
+    --
+ 
+    function Default_Task_Stack  return Integer;
+    --
+    --  The default stack size for each created thread.  This default value
+    --  can be overriden on a per-task basis by the language-defined
+    --  Storage_Size pragma.
+    --
+ 
+    function Stack_Guard_Pages   return Integer;
+    --
+    --  The number of non-writable, guard pages to append to the bottom of
+    --  each thread's stack.
+    --
+ 
+    function Pthread_Sched_Signal return Integer;
+    --
+    --  The signal used by the Pthreads library to affect scheduling actions
+    --  in remote sprocs.
+    --
+ 
+    function Pthread_Arena_Size  return Integer;
+    --
+    --  The size of the shared arena from which pthread locks are allocated.
+    --  See the usinit(3p) man page for more information on shared arenas.
+    --
+ 
+    function Os_Default_Priority return Integer;
+    --
+    --  The default Irix Non-Degrading priority for each sproc created to
+    --  service threads.
+    --
+ 
+ end System.Program_Info;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-restri.adb gcc-4.0.0/gcc/ada/s-restri.adb
*** gcc-3.4.3/gcc/ada/s-restri.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-restri.adb	Wed Feb  4 11:06:19 2004
***************
*** 0 ****
--- 1,148 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                  S Y S T E M . R E S T R I C T I O N S                   --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the GNU Public License.                                       --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package body System.Restrictions is
+    use Rident;
+ 
+    -------------------
+    -- Abort_Allowed --
+    -------------------
+ 
+    function Abort_Allowed return Boolean is
+    begin
+       return Run_Time_Restrictions.Violated (No_Abort_Statements)
+                or else
+              Run_Time_Restrictions.Violated (Max_Asynchronous_Select_Nesting);
+    end Abort_Allowed;
+ 
+    ---------------------
+    -- Tasking_Allowed --
+    ---------------------
+ 
+    function Tasking_Allowed return Boolean is
+    begin
+       return Run_Time_Restrictions.Violated (Max_Tasks)
+                or else
+              Run_Time_Restrictions.Violated (No_Tasking);
+    end Tasking_Allowed;
+ 
+ --  Package elaboration code (acquire restrictions)
+ 
+ begin
+    Acquire_Restrictions : declare
+ 
+       subtype Big_String is String (Positive);
+       type Big_String_Ptr is access all Big_String;
+ 
+       RString : Big_String_Ptr;
+       pragma Import (C, RString, "__gl_restrictions");
+ 
+       P : Natural := 1;
+       --  Pointer to scan string
+ 
+       C : Character;
+       --  Next character from string
+ 
+       function Get_Char return Character;
+       --  Get next character from string
+ 
+       function Get_Natural return Natural;
+       --  Scan out natural value known to be in range, updating P past it
+ 
+       --------------
+       -- Get_Char --
+       --------------
+ 
+       function Get_Char return Character is
+       begin
+          P := P + 1;
+          return RString (P - 1);
+       end Get_Char;
+ 
+       -----------------
+       -- Get_Natural --
+       -----------------
+ 
+       function Get_Natural return Natural is
+          N : Natural := 0;
+ 
+       begin
+          while RString (P) in '0' .. '9' loop
+             N := N * 10 + (Character'Pos (Get_Char) - Character'Pos ('0'));
+          end loop;
+ 
+          return N;
+       end Get_Natural;
+ 
+    --  Start of processing for Acquire_Restrictions
+ 
+    begin
+       --  Acquire data corresponding to first R line
+ 
+       for R in All_Boolean_Restrictions loop
+          C := Get_Char;
+ 
+          if C = 'v' then
+             Run_Time_Restrictions.Violated (R) := True;
+ 
+          elsif C = 'r' then
+             Run_Time_Restrictions.Set (R) := True;
+          end if;
+       end loop;
+ 
+       --  Acquire data corresponding to second R line
+ 
+       for RP in All_Parameter_Restrictions loop
+ 
+          --  Acquire restrictions pragma information
+ 
+          if Get_Char = 'r' then
+             Run_Time_Restrictions.Set (RP) := True;
+             Run_Time_Restrictions.Value (RP) := Get_Natural;
+          end if;
+ 
+          --  Acquire restrictions violations information
+ 
+          if Get_Char = 'v' then
+             Run_Time_Restrictions.Violated (RP) := True;
+             Run_Time_Restrictions.Count (RP) := Get_Natural;
+ 
+             if RString (P) = '+' then
+                Run_Time_Restrictions.Unknown (RP) := True;
+                P := P + 1;
+             end if;
+          end if;
+       end loop;
+    end Acquire_Restrictions;
+ end System.Restrictions;
+ 
diff -Nrcpad gcc-3.4.3/gcc/ada/s-restri.ads gcc-4.0.0/gcc/ada/s-restri.ads
*** gcc-3.4.3/gcc/ada/s-restri.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-restri.ads	Mon May 17 13:20:44 2004
***************
*** 0 ****
--- 1,69 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                  S Y S T E M . R E S T R I C T I O N S                   --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package provides a run-time interface for checking the set of
+ --  restrictions that applies to the current partition. The information
+ --  comes both from explicit restriction pragmas present, and also from
+ --  compile time checking.
+ 
+ --  The package simply contains an instantiation of System.Rident, but
+ --  with names discarded, so that we do not have image tables for the
+ --  large restriction enumeration types at run time.
+ 
+ with System.Rident;
+ 
+ package System.Restrictions is
+    pragma Discard_Names;
+    package Rident is new System.Rident;
+ 
+    Run_Time_Restrictions : Rident.Restrictions_Info;
+ 
+    ------------------
+    -- Subprograms --
+    -----------------
+ 
+    function Abort_Allowed return Boolean;
+    pragma Inline (Abort_Allowed);
+    --  Tests to see if abort is allowed by the current restrictions settings.
+    --  For abort to be allowed, either No_Abort_Statements must be False,
+    --  or Max_Asynchronous_Select_Nesting must be non-zero.
+ 
+    function Tasking_Allowed return Boolean;
+    pragma Inline (Tasking_Allowed);
+    --  Tests to see if tasking operations are allowed by the current
+    --  restrictions settings. For taskikng to be allowed, No_Tasking
+    --  must be False, and Max_Tasks must not be set to zero.
+ 
+ end System.Restrictions;
+ 
+ 
diff -Nrcpad gcc-3.4.3/gcc/ada/s-rident.ads gcc-4.0.0/gcc/ada/s-rident.ads
*** gcc-3.4.3/gcc/ada/s-rident.ads	Thu Nov 27 11:40:45 2003
--- gcc-4.0.0/gcc/ada/s-rident.ads	Mon Jan  3 15:32:18 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 19,24 ****
--- 19,31 ----
  -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
  -- MA 02111-1307, USA.                                                      --
  --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the GNU Public License.                                       --
+ --                                                                          --
  -- GNAT was originally developed  by the GNAT team at  New York University. --
  -- Extensive contributions were provided by Ada Core Technologies Inc.      --
  --                                                                          --
*************** generic
*** 40,55 ****
  package System.Rident is
  
     --  The following enumeration type defines the set of restriction
!    --  identifiers not taking a parameter that are implemented in GNAT.
     --  To add a new restriction identifier, add an entry with the name
     --  to be used in the pragma, and add appropriate calls to the
     --  Restrict.Check_Restriction routine.
  
!    type Restriction_Id is (
  
        --  The following cases are checked for consistency in the binder
  
!       Boolean_Entry_Barriers,                  -- GNAT (Ravenscar)
        No_Abort_Statements,                     -- (RM D.7(5), H.4(3))
        No_Access_Subprograms,                   -- (RM H.4(17))
        No_Allocators,                           -- (RM H.4(7))
--- 47,63 ----
  package System.Rident is
  
     --  The following enumeration type defines the set of restriction
!    --  identifiers that are implemented in GNAT.
! 
     --  To add a new restriction identifier, add an entry with the name
     --  to be used in the pragma, and add appropriate calls to the
     --  Restrict.Check_Restriction routine.
  
!    type Restriction_Id is
  
        --  The following cases are checked for consistency in the binder
  
!      (Simple_Barriers,                         -- GNAT (Ravenscar)
        No_Abort_Statements,                     -- (RM D.7(5), H.4(3))
        No_Access_Subprograms,                   -- (RM H.4(17))
        No_Allocators,                           -- (RM H.4(7))
*************** package System.Rident is
*** 58,64 ****
        No_Delay,                                -- (RM H.4(21))
        No_Direct_Boolean_Operators,             -- GNAT
        No_Dispatch,                             -- (RM H.4(19))
!       No_Dynamic_Interrupts,                   -- GNAT
        No_Dynamic_Priorities,                   -- (RM D.9(9))
        No_Enumeration_Maps,                     -- GNAT
        No_Entry_Calls_In_Elaboration_Code,      -- GNAT
--- 66,72 ----
        No_Delay,                                -- (RM H.4(21))
        No_Direct_Boolean_Operators,             -- GNAT
        No_Dispatch,                             -- (RM H.4(19))
!       No_Dynamic_Attachment,                   -- GNAT
        No_Dynamic_Priorities,                   -- (RM D.9(9))
        No_Enumeration_Maps,                     -- GNAT
        No_Entry_Calls_In_Elaboration_Code,      -- GNAT
*************** package System.Rident is
*** 83,95 ****
        No_Recursion,                            -- (RM H.4(22))
        No_Reentrancy,                           -- (RM H.4(23))
        No_Relative_Delay,                       -- GNAT (Ravenscar)
!       No_Requeue,                              -- GNAT
        No_Secondary_Stack,                      -- GNAT
        No_Select_Statements,                    -- GNAT (Ravenscar)
        No_Standard_Storage_Pools,               -- GNAT
        No_Streams,                              -- GNAT
        No_Task_Allocators,                      -- (RM D.7(7))
!       No_Task_Attributes,                      -- GNAT
        No_Task_Hierarchy,                       -- (RM D.7(3), H.4(3))
        No_Task_Termination,                     -- GNAT (Ravenscar)
        No_Tasking,                              -- GNAT
--- 91,103 ----
        No_Recursion,                            -- (RM H.4(22))
        No_Reentrancy,                           -- (RM H.4(23))
        No_Relative_Delay,                       -- GNAT (Ravenscar)
!       No_Requeue_Statements,                   -- GNAT
        No_Secondary_Stack,                      -- GNAT
        No_Select_Statements,                    -- GNAT (Ravenscar)
        No_Standard_Storage_Pools,               -- GNAT
        No_Streams,                              -- GNAT
        No_Task_Allocators,                      -- (RM D.7(7))
!       No_Task_Attributes_Package,              -- GNAT
        No_Task_Hierarchy,                       -- (RM D.7(3), H.4(3))
        No_Task_Termination,                     -- GNAT (Ravenscar)
        No_Tasking,                              -- GNAT
*************** package System.Rident is
*** 108,157 ****
        No_Implementation_Pragmas,               -- GNAT
        No_Implementation_Restrictions,          -- GNAT
        No_Elaboration_Code,                     -- GNAT
  
        Not_A_Restriction_Id);
  
     subtype All_Restrictions is Restriction_Id range
!      Boolean_Entry_Barriers .. No_Elaboration_Code;
!    --  All restrictions except Not_A_Restriction_Id
  
!    --  The following range of Restriction identifiers is checked for
!    --  consistency across a partition. The generated ali file is marked
!    --  for each entry to show one of three possibilities:
!    --
!    --    Corresponding restriction is set (so unit does not violate it)
!    --    Corresponding restriction is not violated
!    --    Corresponding restriction is violated
  
!    subtype Partition_Restrictions is Restriction_Id range
!      Boolean_Entry_Barriers .. Static_Storage_Size;
  
!    --  The following set of Restriction identifiers is not checked for
!    --  consistency across a partition. The generated ali file still
!    --  contains indications of the above three possibilities for the
!    --  purposes of listing applicable restrictions.
  
!    subtype Compilation_Unit_Restrictions is Restriction_Id range
!      Immediate_Reclamation .. No_Elaboration_Code;
  
!    --  The following enumeration type defines the set of restriction
!    --  parameter identifiers taking a parameter that are implemented in
!    --  GNAT. To add a new restriction parameter identifier, add an entry
!    --  with the name to be used in the pragma, and add appropriate
!    --  calls to Restrict.Check_Restriction.
  
!    --  Note: the GNAT implementation currently only accomodates restriction
!    --  parameter identifiers whose expression value is a non-negative
!    --  integer. This is true for all language defined parameters.
  
!    type Restriction_Parameter_Id is (
!      Max_Asynchronous_Select_Nesting,         -- (RM D.7(18), H.4(3))
!      Max_Entry_Queue_Depth,                   -- GNAT
!      Max_Protected_Entries,                   -- (RM D.7(14))
!      Max_Select_Alternatives,                 -- (RM D.7(12))
!      Max_Storage_At_Blocking,                 -- (RM D.7(17))
!      Max_Task_Entries,                        -- (RM D.7(13), H.4(3))
!      Max_Tasks,                               -- (RM D.7(19), H.4(3))
!      Not_A_Restriction_Parameter_Id);
  
  end System.Rident;
--- 116,395 ----
        No_Implementation_Pragmas,               -- GNAT
        No_Implementation_Restrictions,          -- GNAT
        No_Elaboration_Code,                     -- GNAT
+       No_Obsolescent_Features,                 -- Ada 2005 AI-368
+ 
+       --  The following cases require a parameter value
+ 
+       --  The following entries are fully checked at compile/bind time,
+       --  which means that the compiler can in general tell the minimum
+       --  value which could be used with a restrictions pragma. The binder
+       --  can deduce the appropriate minimum value for the partition by
+       --  taking the maximum value required by any unit.
+ 
+       Max_Protected_Entries,                   -- (RM D.7(14))
+       Max_Select_Alternatives,                 -- (RM D.7(12))
+       Max_Task_Entries,                        -- (RM D.7(13), H.4(3))
+ 
+       --  The following entries are also fully checked at compile/bind
+       --  time, and the compiler can also at least in some cases tell
+       --  the minimum value which could be used with a restriction pragma.
+       --  The difference is that the contributions are additive, so the
+       --  binder deduces this value by adding the unit contributions.
+ 
+       Max_Tasks,                               -- (RM D.7(19), H.4(3))
+ 
+       --  The following entries are checked at compile time only for
+       --  zero/nonzero entries. This means that the compiler can tell
+       --  at compile time if a restriction value of zero is (would be)
+       --  violated, but that is all. The compiler cannot distinguish
+       --  between different non-zero values.
+ 
+       Max_Asynchronous_Select_Nesting,         -- (RM D.7(18), H.4(3))
+       Max_Entry_Queue_Length,                  -- GNAT
+ 
+       --  The remaining entries are not checked at compile/bind time
+ 
+       Max_Storage_At_Blocking,                 -- (RM D.7(17))
  
        Not_A_Restriction_Id);
  
+    --  Synonyms permitted for historical purposes of compatibility.
+    --  Must be coordinated with Restrict.Process_Restriction_Synonym.
+ 
+    Boolean_Entry_Barriers : Restriction_Id renames Simple_Barriers;
+    Max_Entry_Queue_Depth  : Restriction_Id renames Max_Entry_Queue_Length;
+    No_Dynamic_Interrupts  : Restriction_Id renames No_Dynamic_Attachment;
+    No_Requeue             : Restriction_Id renames No_Requeue_Statements;
+    No_Task_Attributes     : Restriction_Id renames No_Task_Attributes_Package;
+ 
     subtype All_Restrictions is Restriction_Id range
!      Simple_Barriers .. Max_Storage_At_Blocking;
!    --  All restrictions (excluding only Not_A_Restriction_Id)
  
!    subtype All_Boolean_Restrictions is Restriction_Id range
!      Simple_Barriers .. No_Obsolescent_Features;
!    --  All restrictions which do not take a parameter
  
!    subtype Partition_Boolean_Restrictions is All_Boolean_Restrictions range
!      Simple_Barriers .. Static_Storage_Size;
!    --  Boolean restrictions that are checked for partition consistency.
!    --  Note that all parameter restrictions are checked for partition
!    --  consistency by default, so this distinction is only needed in the
!    --  case of Boolean restrictions.
  
!    subtype Cunit_Boolean_Restrictions is All_Boolean_Restrictions range
!      Immediate_Reclamation .. No_Obsolescent_Features;
!    --  Boolean restrictions that are not checked for partition consistency
!    --  and that thus apply only to the current unit. Note that for these
!    --  restrictions, the compiler does not apply restrictions found in
!    --  with'ed units, parent specs etc to the main unit.
  
!    subtype All_Parameter_Restrictions is
!      Restriction_Id range
!        Max_Protected_Entries .. Max_Storage_At_Blocking;
!    --  All restrictions that are take a parameter
  
!    subtype Checked_Parameter_Restrictions is
!      All_Parameter_Restrictions range
!        Max_Protected_Entries .. Max_Entry_Queue_Length;
!    --  These are the parameter restrictions that can be at least partially
!    --  checked at compile/binder time. Minimally, the compiler can detect
!    --  violations of a restriction pragma with a value of zero reliably.
  
!    subtype Checked_Max_Parameter_Restrictions is
!      Checked_Parameter_Restrictions range
!        Max_Protected_Entries .. Max_Task_Entries;
!    --  Restrictions with parameters that can be checked in some cases by
!    --  maximizing among statically detected instances where the compiler
!    --  can determine the count.
  
!    subtype Checked_Add_Parameter_Restrictions is
!      Checked_Parameter_Restrictions range
!        Max_Tasks .. Max_Tasks;
!    --  Restrictions with parameters that can be checked in some cases by
!    --  summing the statically detected instances where the compiler can
!    --  determine the count.
! 
!    subtype Checked_Val_Parameter_Restrictions is
!      Checked_Parameter_Restrictions range
!        Max_Protected_Entries .. Max_Tasks;
!    --  Restrictions with parameter where the count is known at least in
!    --  some cases by the compiler/binder.
! 
!    subtype Checked_Zero_Parameter_Restrictions is
!      Checked_Parameter_Restrictions range
!        Max_Asynchronous_Select_Nesting .. Max_Entry_Queue_Length;
!    --  Restrictions with parameters where the compiler can detect the use of
!    --  the feature, and hence violations of a restriction specifying a value
!    --  of zero, but cannot detect specific values other than zero/nonzero.
! 
!    subtype Unchecked_Parameter_Restrictions is
!      All_Parameter_Restrictions range
!        Max_Storage_At_Blocking .. Max_Storage_At_Blocking;
!    --  Restrictions with parameters where the compiler cannot ever detect
!    --  corresponding compile time usage, so the binder and compiler never
!    --  detect violations of any restriction.
! 
!    -------------------------------------
!    -- Restriction Status Declarations --
!    -------------------------------------
! 
!    --  The following declarations are used to record the current status
!    --  or restrictions (for the current unit, or related units, at compile
!    --  time, and for all units in a partition at bind time or run time).
! 
!    type Restriction_Flags  is array (All_Restrictions)           of Boolean;
!    type Restriction_Values is array (All_Parameter_Restrictions) of Natural;
!    type Parameter_Flags    is array (All_Parameter_Restrictions) of Boolean;
! 
!    type Restrictions_Info is record
!       Set : Restriction_Flags := (others => False);
!       --  An entry is True in the Set array if a restrictions pragma has
!       --  been encountered for the given restriction. If the value is
!       --  True for a parameter restriction, then the corresponding entry
!       --  in the Value array gives the minimum value encountered for any
!       --  such restriction.
! 
!       Value : Restriction_Values;
!       --  If the entry for a parameter restriction in Set is True (i.e. a
!       --  restrictions pragma for the restriction has been encountered), then
!       --  the corresponding entry in the Value array is the minimum value
!       --  specified by any such restrictions pragma. Note that a restrictions
!       --  pragma specifying a value greater than Int'Last is simply ignored.
! 
!       Violated : Restriction_Flags := (others => False);
!       --  An entry is True in the violations array if the compiler has
!       --  detected a violation of the restriction. For a parameter
!       --  restriction, the Count and Unknown arrays have additional
!       --  information.
! 
!       Count : Restriction_Values := (others => 0);
!       --  If an entry for a parameter restriction is True in Violated,
!       --  the corresponding entry in the Count array may record additional
!       --  information. If the actual minimum count is known (by taking
!       --  maximums, or sums, depending on the restriction), it will be
!       --  recorded in this array. If not, then the value will remain zero.
! 
!       Unknown : Parameter_Flags := (others => False);
!       --  If an entry for a parameter restriction is True in Violated,
!       --  the corresponding entry in the Unknown array may record additional
!       --  information. If the actual count is not known by the compiler (but
!       --  is known to be non-zero), then the entry in Unknown will be True.
!       --  This indicates that the value in Count is not known to be exact,
!       --  and the actual violation count may be higher.
! 
!       --  Note: If Violated (K) is True, then either Count (K) > 0 or
!       --  Unknown (K) = True. It is possible for both these to be set.
!       --  For example, if Count (K) = 3 and Unknown (K) is True, it means
!       --  that the actual violation count is at least 3 but might be higher.
!    end record;
! 
!    ----------------------------------
!    -- Profile Definitions and Data --
!    ----------------------------------
! 
!    type Profile_Name is (Ravenscar, Restricted);
!    --  Names of recognized pfofiles
! 
!    type Profile_Data is record
!       Set : Restriction_Flags;
!       --  Set to True if given restriction must be set for the profile,
!       --  and False if it need not be set (False does not mean that it
!       --  must not be set, just that it need not be set). If the flag
!       --  is True for a parameter restriction, then the Value array
!       --  gives the maximum value permitted by the profile.
! 
!       Value : Restriction_Values;
!       --  An entry in this array is meaningful only if the corresponding
!       --  flag in Set is True. In that case, the value in this array is
!       --  the maximum value of the parameter permitted by the profile.
!    end record;
! 
!    Profile_Info : array (Profile_Name) of Profile_Data :=
! 
!                      --  Restricted Profile
! 
!                     (Restricted =>
! 
!                         --  Restrictions for Restricted profile
! 
!                        (Set   =>
!                           (No_Abort_Statements             => True,
!                            No_Asynchronous_Control         => True,
!                            No_Dynamic_Attachment           => True,
!                            No_Dynamic_Priorities           => True,
!                            No_Entry_Queue                  => True,
!                            No_Local_Protected_Objects      => True,
!                            No_Protected_Type_Allocators    => True,
!                            No_Requeue_Statements           => True,
!                            No_Task_Allocators              => True,
!                            No_Task_Attributes_Package      => True,
!                            No_Task_Hierarchy               => True,
!                            No_Terminate_Alternatives       => True,
!                            Max_Asynchronous_Select_Nesting => True,
!                            Max_Protected_Entries           => True,
!                            Max_Select_Alternatives         => True,
!                            Max_Task_Entries                => True,
!                            others                          => False),
! 
!                         --  Value settings for Restricted profile
! 
!                         Value =>
!                           (Max_Asynchronous_Select_Nesting => 0,
!                            Max_Protected_Entries           => 1,
!                            Max_Select_Alternatives         => 0,
!                            Max_Task_Entries                => 0,
!                            others                          => 0)),
! 
!                      --  Ravenscar Profile
! 
!                      --  Note: the table entries here only represent the
!                      --  required restriction profile for Ravenscar. The
!                      --  full Ravenscar profile also requires:
! 
!                      --    pragma Dispatching_Policy (FIFO_Within_Priorities);
!                      --    pragma Locking_Policy (Ceiling_Locking);
!                      --    pragma Detect_Blocking
! 
!                      Ravenscar  =>
! 
!                      --  Restrictions for Ravenscar = Restricted profile ..
! 
!                        (Set   =>
!                           (No_Abort_Statements             => True,
!                            No_Asynchronous_Control         => True,
!                            No_Dynamic_Attachment           => True,
!                            No_Dynamic_Priorities           => True,
!                            No_Entry_Queue                  => True,
!                            No_Local_Protected_Objects      => True,
!                            No_Protected_Type_Allocators    => True,
!                            No_Requeue_Statements           => True,
!                            No_Task_Allocators              => True,
!                            No_Task_Attributes_Package      => True,
!                            No_Task_Hierarchy               => True,
!                            No_Terminate_Alternatives       => True,
!                            Max_Asynchronous_Select_Nesting => True,
!                            Max_Protected_Entries           => True,
!                            Max_Select_Alternatives         => True,
!                            Max_Task_Entries                => True,
! 
!                            --  plus these additional restrictions:
! 
!                            No_Calendar                     => True,
!                            No_Implicit_Heap_Allocations    => True,
!                            No_Relative_Delay               => True,
!                            No_Select_Statements            => True,
!                            No_Task_Termination             => True,
!                            Simple_Barriers                 => True,
!                            others                          => False),
! 
!                         --  Value settings for Ravenscar (same as Restricted)
! 
!                         Value =>
!                           (Max_Asynchronous_Select_Nesting => 0,
!                            Max_Protected_Entries           => 1,
!                            Max_Select_Alternatives         => 0,
!                            Max_Task_Entries                => 0,
!                            others                          => 0)));
  
  end System.Rident;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-rpc.adb gcc-4.0.0/gcc/ada/s-rpc.adb
*** gcc-3.4.3/gcc/ada/s-rpc.adb	Thu Apr 24 17:54:13 2003
--- gcc-4.0.0/gcc/ada/s-rpc.adb	Wed Apr 21 10:10:32 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Ada.Exceptions; use Ada.Exceptions;
*** 43,55 ****
  
  package body System.RPC is
  
-    GNAT : constant Boolean := True;
-    pragma Unreferenced (GNAT);
-    --  This dummy entity allows the compiler to recognize that this is the
-    --  version of this package that is supplied by GNAT, not by the user.
-    --  This is used to cause a compile time error if an attempt is made to
-    --  use features in System.RPC that are only available from a true PCS.
- 
     CRLF : constant String := ASCII.CR & ASCII.LF;
  
     Msg : constant String :=
--- 43,48 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/s-scaval.adb gcc-4.0.0/gcc/ada/s-scaval.adb
*** gcc-3.4.3/gcc/ada/s-scaval.adb	Tue Oct 21 13:42:14 2003
--- gcc-4.0.0/gcc/ada/s-scaval.adb	Thu Feb 10 13:50:17 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2003 Free Software Foundation, Inc.            --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2003-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body System.Scalar_Values is
*** 159,164 ****
--- 159,169 ----
           IS_Iu4 := 16#FFFF_FFFF#;
           IS_Iu8 := 16#FFFF_FFFF_FFFF_FFFF#;
  
+          IS_Iz1 := 16#00#;
+          IS_Iz2 := 16#0000#;
+          IS_Iz4 := 16#0000_0000#;
+          IS_Iz8 := 16#0000_0000_0000_0000#;
+ 
           IV_Isf := IS_Iu4;
           IV_Ifl := IS_Iu4;
           IV_Ilf := IS_Iu8;
*************** package body System.Scalar_Values is
*** 180,185 ****
--- 185,195 ----
           IS_Iu4 := 16#0000_0000#;
           IS_Iu8 := 16#0000_0000_0000_0000#;
  
+          IS_Iz1 := 16#00#;
+          IS_Iz2 := 16#0000#;
+          IS_Iz4 := 16#0000_0000#;
+          IS_Iz8 := 16#0000_0000_0000_0000#;
+ 
           IV_Isf := 16#FF80_0000#;
           IV_Ifl := 16#FF80_0000#;
           IV_Ilf := 16#FFF0_0000_0000_0000#;
*************** package body System.Scalar_Values is
*** 201,206 ****
--- 211,221 ----
           IS_Iu4 := 16#FFFF_FFFF#;
           IS_Iu8 := 16#FFFF_FFFF_FFFF_FFFF#;
  
+          IS_Iz1 := 16#FF#;
+          IS_Iz2 := 16#FFFF#;
+          IS_Iz4 := 16#FFFF_FFFF#;
+          IS_Iz8 := 16#FFFF_FFFF_FFFF_FFFF#;
+ 
           IV_Isf := 16#7F80_0000#;
           IV_Ifl := 16#7F80_0000#;
           IV_Ilf := 16#7FF0_0000_0000_0000#;
*************** package body System.Scalar_Values is
*** 238,243 ****
--- 253,263 ----
           IS_Iu4 := IS_Is4;
           IS_Iu8 := IS_Is8;
  
+          IS_Iz1 := IS_Is1;
+          IS_Iz2 := IS_Is2;
+          IS_Iz4 := IS_Is4;
+          IS_Iz8 := IS_Is8;
+ 
           IV_Isf := IS_Is4;
           IV_Ifl := IS_Is4;
           IV_Ilf := IS_Is8;
*************** package body System.Scalar_Values is
*** 259,266 ****
              IV_Ill := To_ByteLF (IV_Ilf);
           end;
        end if;
- 
- 
     end Initialize;
  
  end System.Scalar_Values;
--- 279,284 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/s-scaval.ads gcc-4.0.0/gcc/ada/s-scaval.ads
*** gcc-3.4.3/gcc/ada/s-scaval.ads	Tue Oct 21 13:42:14 2003
--- gcc-4.0.0/gcc/ada/s-scaval.ads	Thu Feb 10 13:50:17 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2001-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2001-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package System.Scalar_Values is
*** 53,66 ****
     --  The explicit initializations here are not really required, since these
     --  variables are always set by System.Scalar_Values.Initialize.
  
!    IS_Is1 : Byte1 := 0;           -- Initialize 1 byte signed
!    IS_Is2 : Byte2 := 0;           -- Initialize 2 byte signed
!    IS_Is4 : Byte4 := 0;           -- Initialize 4 byte signed
!    IS_Is8 : Byte8 := 0;           -- Initialize 8 byte signed
!    IS_Iu1 : Byte1 := 0;           -- Initialize 1 byte unsigned
!    IS_Iu2 : Byte2 := 0;           -- Initialize 2 byte unsigned
!    IS_Iu4 : Byte4 := 0;           -- Initialize 4 byte unsigned
!    IS_Iu8 : Byte8 := 0;           -- Initialize 8 byte unsigned
  
     --  The float definitions are aliased, because we use overlays to set them
  
--- 53,79 ----
     --  The explicit initializations here are not really required, since these
     --  variables are always set by System.Scalar_Values.Initialize.
  
!    IS_Is1 : Byte1 := 0;  -- Initialize 1 byte signed
!    IS_Is2 : Byte2 := 0;  -- Initialize 2 byte signed
!    IS_Is4 : Byte4 := 0;  -- Initialize 4 byte signed
!    IS_Is8 : Byte8 := 0;  -- Initialize 8 byte signed
!    --  For the above cases, the undefined value (set by the binder -Sin switch)
!    --  is the largest negative number (1 followed by all zero bits).
! 
!    IS_Iu1 : Byte1 := 0;  -- Initialize 1 byte unsigned
!    IS_Iu2 : Byte2 := 0;  -- Initialize 2 byte unsigned
!    IS_Iu4 : Byte4 := 0;  -- Initialize 4 byte unsigned
!    IS_Iu8 : Byte8 := 0;  -- Initialize 8 byte unsigned
!    --  For the above cases, the undefined value (set by the binder -Sin switch)
!    --  is the largest unsigned number (all 1 bits).
! 
!    IS_Iz1 : Byte1 := 0;  -- Initialize 1 byte zeroes
!    IS_Iz2 : Byte2 := 0;  -- Initialize 2 byte zeroes
!    IS_Iz4 : Byte4 := 0;  -- Initialize 4 byte zeroes
!    IS_Iz8 : Byte8 := 0;  -- Initialize 8 byte zeroes
!    --  For the above cases, the undefined value (set by the binder -Sin switch)
!    --  is the zero (all 0 bits). This is used when zero is known to be an
!    --  invalid value.
  
     --  The float definitions are aliased, because we use overlays to set them
  
diff -Nrcpad gcc-3.4.3/gcc/ada/s-secsta.adb gcc-4.0.0/gcc/ada/s-secsta.adb
*** gcc-3.4.3/gcc/ada/s-secsta.adb	Mon Jan  5 15:20:46 2004
--- gcc-4.0.0/gcc/ada/s-secsta.adb	Mon Aug  9 12:24:21 2004
*************** package body System.Secondary_Stack is
*** 54,60 ****
     --  then the secondary stack is allocated statically by grabbing a
     --  section of the primary stack and using it for this purpose.
  
!    type Memory is array (Mark_Id range <>) of SSE.Storage_Element;
     for Memory'Alignment use Standard'Maximum_Alignment;
     --  This is the type used for actual allocation of secondary stack
     --  areas. We require maximum alignment for all such allocations.
--- 54,60 ----
     --  then the secondary stack is allocated statically by grabbing a
     --  section of the primary stack and using it for this purpose.
  
!    type Memory is array (SS_Ptr range <>) of SSE.Storage_Element;
     for Memory'Alignment use Standard'Maximum_Alignment;
     --  This is the type used for actual allocation of secondary stack
     --  areas. We require maximum alignment for all such allocations.
*************** package body System.Secondary_Stack is
*** 98,113 ****
     --    +-----------------+               +------------------+
     --
  
!    type Chunk_Id (First, Last : Mark_Id);
     type Chunk_Ptr is access all Chunk_Id;
  
!    type Chunk_Id (First, Last : Mark_Id) is record
        Prev, Next : Chunk_Ptr;
        Mem        : Memory (First .. Last);
     end record;
  
     type Stack_Id is record
!       Top           : Mark_Id;
        Default_Size  : SSE.Storage_Count;
        Current_Chunk : Chunk_Ptr;
     end record;
--- 98,113 ----
     --    +-----------------+               +------------------+
     --
  
!    type Chunk_Id (First, Last : SS_Ptr);
     type Chunk_Ptr is access all Chunk_Id;
  
!    type Chunk_Id (First, Last : SS_Ptr) is record
        Prev, Next : Chunk_Ptr;
        Mem        : Memory (First .. Last);
     end record;
  
     type Stack_Id is record
!       Top           : SS_Ptr;
        Default_Size  : SSE.Storage_Count;
        Current_Chunk : Chunk_Ptr;
     end record;
*************** package body System.Secondary_Stack is
*** 134,149 ****
     --  by the following data strcuture
  
     type Fixed_Stack_Id is record
!       Top : Mark_Id;
        --  Index of next available location in Mem. This is initialized to
        --  0, and then incremented on Allocate, and Decremented on Release.
  
!       Last : Mark_Id;
        --  Length of usable Mem array, which is thus the index past the
        --  last available location in Mem. Mem (Last-1) can be used. This
        --  is used to check that the stack does not overflow.
  
!       Max : Mark_Id;
        --  Maximum value of Top. Initialized to 0, and then may be incremented
        --  on Allocate, but is never Decremented. The last used location will
        --  be Mem (Max - 1), so Max is the maximum count of used stack space.
--- 134,149 ----
     --  by the following data strcuture
  
     type Fixed_Stack_Id is record
!       Top : SS_Ptr;
        --  Index of next available location in Mem. This is initialized to
        --  0, and then incremented on Allocate, and Decremented on Release.
  
!       Last : SS_Ptr;
        --  Length of usable Mem array, which is thus the index past the
        --  last available location in Mem. Mem (Last-1) can be used. This
        --  is used to check that the stack does not overflow.
  
!       Max : SS_Ptr;
        --  Maximum value of Top. Initialized to 0, and then may be incremented
        --  on Allocate, but is never Decremented. The last used location will
        --  be Mem (Max - 1), so Max is the maximum count of used stack space.
*************** package body System.Secondary_Stack is
*** 177,185 ****
       (Addr         : out Address;
        Storage_Size : SSE.Storage_Count)
     is
!       Max_Align    : constant Mark_Id := Mark_Id (Standard'Maximum_Alignment);
!       Max_Size     : constant Mark_Id :=
!                        ((Mark_Id (Storage_Size) + Max_Align - 1) / Max_Align)
                           * Max_Align;
  
     begin
--- 177,185 ----
       (Addr         : out Address;
        Storage_Size : SSE.Storage_Count)
     is
!       Max_Align    : constant SS_Ptr := SS_Ptr (Standard'Maximum_Alignment);
!       Max_Size     : constant SS_Ptr :=
!                        ((SS_Ptr (Storage_Size) + Max_Align - 1) / Max_Align)
                           * Max_Align;
  
     begin
*************** package body System.Secondary_Stack is
*** 256,262 ****
                    Chunk.Next :=
                      new Chunk_Id
                        (First => Chunk.Last + 1,
!                        Last  => Chunk.Last + Mark_Id (Stack.Default_Size));
  
                    Chunk.Next.Prev := Chunk;
  
--- 256,262 ----
                    Chunk.Next :=
                      new Chunk_Id
                        (First => Chunk.Last + 1,
!                        Last  => Chunk.Last + SS_Ptr (Stack.Default_Size));
  
                    Chunk.Next.Prev := Chunk;
  
*************** package body System.Secondary_Stack is
*** 359,370 ****
           begin
              Put_Line (
                        "  Total size              : "
!                       & Mark_Id'Image (Fixed_Stack.Last)
                        & " bytes");
  
              Put_Line (
                        "  Current allocated space : "
!                       & Mark_Id'Image (Fixed_Stack.Top - 1)
                        & " bytes");
           end;
  
--- 359,370 ----
           begin
              Put_Line (
                        "  Total size              : "
!                       & SS_Ptr'Image (Fixed_Stack.Last)
                        & " bytes");
  
              Put_Line (
                        "  Current allocated space : "
!                       & SS_Ptr'Image (Fixed_Stack.Top - 1)
                        & " bytes");
           end;
  
*************** package body System.Secondary_Stack is
*** 391,402 ****
  
              Put_Line (
                        "  Total size              : "
!                       & Mark_Id'Image (Chunk.Last)
                        & " bytes");
  
              Put_Line (
                        "  Current allocated space : "
!                       & Mark_Id'Image (Stack.Top - 1)
                        & " bytes");
  
              Put_Line (
--- 391,402 ----
  
              Put_Line (
                        "  Total size              : "
!                       & SS_Ptr'Image (Chunk.Last)
                        & " bytes");
  
              Put_Line (
                        "  Current allocated space : "
!                       & SS_Ptr'Image (Stack.Top - 1)
                        & " bytes");
  
              Put_Line (
*************** package body System.Secondary_Stack is
*** 423,429 ****
  
        if not SS_Ratio_Dynamic then
           declare
!             Fixed_Stack : Fixed_Stack_Ptr := To_Fixed_Stack_Ptr (Stk);
  
           begin
              Fixed_Stack.Top  := 0;
--- 423,430 ----
  
        if not SS_Ratio_Dynamic then
           declare
!             Fixed_Stack : constant Fixed_Stack_Ptr :=
!                             To_Fixed_Stack_Ptr (Stk);
  
           begin
              Fixed_Stack.Top  := 0;
*************** package body System.Secondary_Stack is
*** 433,439 ****
                 Fixed_Stack.Last := 0;
              else
                 Fixed_Stack.Last :=
!                  Mark_Id (Size) - Dummy_Fixed_Stack.Mem'Position;
              end if;
           end;
  
--- 434,440 ----
                 Fixed_Stack.Last := 0;
              else
                 Fixed_Stack.Last :=
!                  SS_Ptr (Size) - Dummy_Fixed_Stack.Mem'Position;
              end if;
           end;
  
*************** package body System.Secondary_Stack is
*** 444,450 ****
              Stack : Stack_Ptr;
           begin
              Stack               := new Stack_Id;
!             Stack.Current_Chunk := new Chunk_Id (1, Mark_Id (Size));
              Stack.Top           := 1;
              Stack.Default_Size  := SSE.Storage_Count (Size);
              Stk := To_Addr (Stack);
--- 445,451 ----
              Stack : Stack_Ptr;
           begin
              Stack               := new Stack_Id;
!             Stack.Current_Chunk := new Chunk_Id (1, SS_Ptr (Size));
              Stack.Top           := 1;
              Stack.Default_Size  := SSE.Storage_Count (Size);
              Stk := To_Addr (Stack);
*************** package body System.Secondary_Stack is
*** 457,467 ****
     -------------
  
     function SS_Mark return Mark_Id is
     begin
        if SS_Ratio_Dynamic then
!          return To_Stack_Ptr (SSL.Get_Sec_Stack_Addr.all).Top;
        else
!          return To_Fixed_Stack_Ptr (SSL.Get_Sec_Stack_Addr.all).Top;
        end if;
     end SS_Mark;
  
--- 458,469 ----
     -------------
  
     function SS_Mark return Mark_Id is
+       Sstk : constant System.Address := SSL.Get_Sec_Stack_Addr.all;
     begin
        if SS_Ratio_Dynamic then
!          return (Sstk => Sstk, Sptr => To_Stack_Ptr (Sstk).Top);
        else
!          return (Sstk => Sstk, Sptr => To_Fixed_Stack_Ptr (Sstk).Top);
        end if;
     end SS_Mark;
  
*************** package body System.Secondary_Stack is
*** 472,480 ****
     procedure SS_Release (M : Mark_Id) is
     begin
        if SS_Ratio_Dynamic then
!          To_Stack_Ptr (SSL.Get_Sec_Stack_Addr.all).Top := M;
        else
!          To_Fixed_Stack_Ptr (SSL.Get_Sec_Stack_Addr.all).Top := M;
        end if;
     end SS_Release;
  
--- 474,482 ----
     procedure SS_Release (M : Mark_Id) is
     begin
        if SS_Ratio_Dynamic then
!          To_Stack_Ptr (M.Sstk).Top := M.Sptr;
        else
!          To_Fixed_Stack_Ptr (M.Sstk).Top := M.Sptr;
        end if;
     end SS_Release;
  
*************** package body System.Secondary_Stack is
*** 490,496 ****
     Stack : aliased Stack_Id;
     for Stack'Alignment use Standard'Maximum_Alignment;
  
!    Chunk : aliased Chunk_Id (1, Mark_Id (Default_Secondary_Stack_Size));
     for Chunk'Alignment use Standard'Maximum_Alignment;
  
     Chunk_Address : Address;
--- 492,498 ----
     Stack : aliased Stack_Id;
     for Stack'Alignment use Standard'Maximum_Alignment;
  
!    Chunk : aliased Chunk_Id (1, SS_Ptr (Default_Secondary_Stack_Size));
     for Chunk'Alignment use Standard'Maximum_Alignment;
  
     Chunk_Address : Address;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-secsta.ads gcc-4.0.0/gcc/ada/s-secsta.ads
*** gcc-3.4.3/gcc/ada/s-secsta.ads	Mon Jan  5 15:20:46 2004
--- gcc-4.0.0/gcc/ada/s-secsta.ads	Mon Aug  9 12:24:21 2004
*************** package System.Secondary_Stack is
*** 73,79 ****
     --  to System.Null_Address.
  
     type Mark_Id is private;
!    --  Type used to mark the stack.
  
     function SS_Mark return Mark_Id;
     --  Return the Mark corresponding to the current state of the stack
--- 73,79 ----
     --  to System.Null_Address.
  
     type Mark_Id is private;
!    --  Type used to mark the stack for mark/release processing
  
     function SS_Mark return Mark_Id;
     --  Return the Mark corresponding to the current state of the stack
*************** private
*** 102,107 ****
     --  Unused entity that is just present to ease the sharing of the pool
     --  mechanism for specific allocation/deallocation in the compiler
  
!    type Mark_Id is new SSE.Integer_Address;
  
  end System.Secondary_Stack;
--- 102,116 ----
     --  Unused entity that is just present to ease the sharing of the pool
     --  mechanism for specific allocation/deallocation in the compiler
  
!    type SS_Ptr is new SSE.Integer_Address;
!    --  Stack pointer value for secondary stack
! 
!    type Mark_Id is record
!       Sstk : System.Address;
!       Sptr : SS_Ptr;
!    end record;
!    --  A mark value contains the address of the secondary stack structure,
!    --  as returned by System.Soft_Links.Get_Sec_Stack_Addr, and a stack
!    --  pointer value corresponding to the point of the mark call.
  
  end System.Secondary_Stack;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-soflin.ads gcc-4.0.0/gcc/ada/s-soflin.ads
*** gcc-3.4.3/gcc/ada/s-soflin.ads	Tue Oct 21 13:42:14 2003
--- gcc-4.0.0/gcc/ada/s-soflin.ads	Thu Feb 10 13:57:23 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package System.Soft_Links is
*** 121,128 ****
     --  Handle task abortion (non-tasking case, does nothing). Currently,
     --  only VMS uses this.
  
!    procedure Update_Exception_NT
!      (X : EO := Current_Target_Exception);
     --  Handle exception setting. This routine is provided for targets
     --  which have built-in exception handling such as the Java Virtual
     --  Machine. Currently, only JGNAT uses this. See 4jexcept.ads for
--- 121,127 ----
     --  Handle task abortion (non-tasking case, does nothing). Currently,
     --  only VMS uses this.
  
!    procedure Update_Exception_NT (X : EO := Current_Target_Exception);
     --  Handle exception setting. This routine is provided for targets
     --  which have built-in exception handling such as the Java Virtual
     --  Machine. Currently, only JGNAT uses this. See 4jexcept.ads for
*************** package System.Soft_Links is
*** 221,228 ****
  
     function  Get_Exc_Stack_Addr_NT return Address;
     procedure Set_Exc_Stack_Addr_NT (Self_ID : Address; Addr : Address);
!    --  Self_ID is a Task_ID, but in the non-tasking case there is no
!    --  Task_ID type available, so make do with Address.
  
     Get_Exc_Stack_Addr : Get_Address_Call := Get_Exc_Stack_Addr_NT'Access;
     Set_Exc_Stack_Addr : Set_Address_Call2 := Set_Exc_Stack_Addr_NT'Access;
--- 220,227 ----
  
     function  Get_Exc_Stack_Addr_NT return Address;
     procedure Set_Exc_Stack_Addr_NT (Self_ID : Address; Addr : Address);
!    --  Self_ID is a Task_Id, but in the non-tasking case there is no
!    --  Task_Id type available, so make do with Address.
  
     Get_Exc_Stack_Addr : Get_Address_Call := Get_Exc_Stack_Addr_NT'Access;
     Set_Exc_Stack_Addr : Set_Address_Call2 := Set_Exc_Stack_Addr_NT'Access;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-solita.adb gcc-4.0.0/gcc/ada/s-solita.adb
*** gcc-3.4.3/gcc/ada/s-solita.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-solita.adb	Mon Sep 13 10:18:42 2004
***************
*** 0 ****
--- 1,189 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --             S Y S T E M . S O F T _ L I N K S . T A S K I N G            --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --             Copyright (C) 2004, Free Software Foundation, Inc.           --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ pragma Style_Checks (All_Checks);
+ --  Turn off subprogram alpha ordering check, since we group soft link
+ --  bodies and dummy soft link bodies together separately in this unit.
+ 
+ pragma Polling (Off);
+ --  Turn polling off for this package. We don't need polling during any
+ --  of the routines in this package, and more to the point, if we try
+ --  to poll it can cause infinite loops.
+ 
+ with System.Task_Primitives.Operations;
+ --  Used for Self
+ --           Timed_Delay
+ 
+ with System.Tasking;
+ --  Used for Task_Id
+ 
+ with Ada.Exceptions;
+ --  Used for Raise_Exception
+ 
+ package body System.Soft_Links.Tasking is
+ 
+    package STPO renames System.Task_Primitives.Operations;
+    package SSL  renames System.Soft_Links;
+ 
+    ----------------
+    -- Local Data --
+    ----------------
+ 
+    Initialized : Boolean := False;
+    --  Boolean flag that indicates whether the tasking soft links have
+    --  already been set.
+ 
+    -----------------------------------------------------------------
+    -- Tasking Versions of Services Needed by Non-Tasking Programs --
+    -----------------------------------------------------------------
+ 
+    function  Get_Jmpbuf_Address return  Address;
+    procedure Set_Jmpbuf_Address (Addr : Address);
+    --  Get/Set Jmpbuf_Address for current task
+ 
+    function  Get_Sec_Stack_Addr return  Address;
+    procedure Set_Sec_Stack_Addr (Addr : Address);
+    --  Get/Set location of current task's secondary stack
+ 
+    function  Get_Machine_State_Addr return Address;
+    procedure Set_Machine_State_Addr (Addr : Address);
+    --  Get/Set the address for storing the current task's machine state
+ 
+    function Get_Current_Excep return SSL.EOA;
+    --  Task-safe version of SSL.Get_Current_Excep
+ 
+    procedure Timed_Delay_T (Time : Duration; Mode : Integer);
+    --  Task-safe version of SSL.Timed_Delay
+ 
+    --------------------------
+    -- Soft-Link Get Bodies --
+    --------------------------
+ 
+    function Get_Current_Excep return SSL.EOA is
+    begin
+       return STPO.Self.Common.Compiler_Data.Current_Excep'Access;
+    end Get_Current_Excep;
+ 
+    function Get_Jmpbuf_Address return  Address is
+    begin
+       return STPO.Self.Common.Compiler_Data.Jmpbuf_Address;
+    end Get_Jmpbuf_Address;
+ 
+    function Get_Machine_State_Addr return Address is
+    begin
+       return STPO.Self.Common.Compiler_Data.Machine_State_Addr;
+    end Get_Machine_State_Addr;
+ 
+    function Get_Sec_Stack_Addr return  Address is
+    begin
+       return STPO.Self.Common.Compiler_Data.Sec_Stack_Addr;
+    end Get_Sec_Stack_Addr;
+ 
+    --------------------------
+    -- Soft-Link Set Bodies --
+    --------------------------
+ 
+    procedure Set_Jmpbuf_Address (Addr : Address) is
+    begin
+       STPO.Self.Common.Compiler_Data.Jmpbuf_Address := Addr;
+    end Set_Jmpbuf_Address;
+ 
+    procedure Set_Machine_State_Addr (Addr : Address) is
+    begin
+       STPO.Self.Common.Compiler_Data.Machine_State_Addr := Addr;
+    end Set_Machine_State_Addr;
+ 
+    procedure Set_Sec_Stack_Addr (Addr : Address) is
+    begin
+       STPO.Self.Common.Compiler_Data.Sec_Stack_Addr := Addr;
+    end Set_Sec_Stack_Addr;
+ 
+    -------------------
+    -- Timed_Delay_T --
+    -------------------
+ 
+    procedure Timed_Delay_T (Time : Duration; Mode : Integer) is
+       Self_Id : constant System.Tasking.Task_Id := STPO.Self;
+ 
+    begin
+       --  In case pragma Detect_Blocking is active then Program_Error
+       --  must be raised if this potentially blocking operation
+       --  is called from a protected operation.
+ 
+       if System.Tasking.Detect_Blocking
+         and then Self_Id.Common.Protected_Action_Nesting > 0
+       then
+          Ada.Exceptions.Raise_Exception
+            (Program_Error'Identity, "potentially blocking operation");
+       else
+          STPO.Timed_Delay (Self_Id, Time, Mode);
+       end if;
+ 
+    end Timed_Delay_T;
+ 
+    -----------------------------
+    -- Init_Tasking_Soft_Links --
+    -----------------------------
+ 
+    procedure Init_Tasking_Soft_Links is
+    begin
+       --  Set links only if not set already
+ 
+       if not Initialized then
+ 
+          --  Mark tasking soft links as initialized
+ 
+          Initialized := True;
+ 
+          --  The application being executed uses tasking so that the tasking
+          --  version of the following soft links need to be used.
+ 
+          SSL.Get_Jmpbuf_Address     := Get_Jmpbuf_Address'Access;
+          SSL.Set_Jmpbuf_Address     := Set_Jmpbuf_Address'Access;
+          SSL.Get_Sec_Stack_Addr     := Get_Sec_Stack_Addr'Access;
+          SSL.Set_Sec_Stack_Addr     := Set_Sec_Stack_Addr'Access;
+          SSL.Get_Machine_State_Addr := Get_Machine_State_Addr'Access;
+          SSL.Set_Machine_State_Addr := Set_Machine_State_Addr'Access;
+          SSL.Get_Current_Excep      := Get_Current_Excep'Access;
+          SSL.Timed_Delay            := Timed_Delay_T'Access;
+ 
+          --  No need to create a new Secondary Stack, since we will use the
+          --  default one created in s-secsta.adb
+ 
+          SSL.Set_Sec_Stack_Addr     (SSL.Get_Sec_Stack_Addr_NT);
+          SSL.Set_Jmpbuf_Address     (SSL.Get_Jmpbuf_Address_NT);
+          SSL.Set_Machine_State_Addr (SSL.Get_Machine_State_Addr_NT);
+       end if;
+    end Init_Tasking_Soft_Links;
+ 
+ end System.Soft_Links.Tasking;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-solita.ads gcc-4.0.0/gcc/ada/s-solita.ads
*** gcc-3.4.3/gcc/ada/s-solita.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-solita.ads	Mon Aug  9 12:24:25 2004
***************
*** 0 ****
--- 1,45 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --             S Y S T E M . S O F T _ L I N K S . T A S K I N G            --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --             Copyright (C) 2004, Free Software Foundation, Inc.           --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package contains the tasking versions soft links that are common
+ --  to the full and the restricted run times. The rest of the required soft
+ --  links are set by System.Tasking.Initialization and System.Tasking.Stages
+ --  (full run time) or System.Tasking.Restricted.Stages (restricted run time).
+ 
+ package System.Soft_Links.Tasking is
+ 
+    procedure Init_Tasking_Soft_Links;
+    --  Set the tasking soft links that are common to the full and the
+    --  restricted run times.
+ 
+ end System.Soft_Links.Tasking;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-stache.adb gcc-4.0.0/gcc/ada/s-stache.adb
*** gcc-3.4.3/gcc/ada/s-stache.adb	Tue Jan 13 11:51:34 2004
--- gcc-4.0.0/gcc/ada/s-stache.adb	Mon Mar 22 14:06:28 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1999-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --           Copyright (C) 1999-2004 Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 31,265 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Ada.Exceptions;
! 
! with System.Storage_Elements; use System.Storage_Elements;
! with System.Parameters; use System.Parameters;
! with System.Soft_Links;
! with System.CRTL;
  
  package body System.Stack_Checking is
- 
-    Kilobyte : constant := 1024;
- 
-    function Set_Stack_Info (Stack : access Stack_Access) return Stack_Access;
- 
-    --  The function Set_Stack_Info is the actual function that updates
-    --  the cache containing a pointer to the Stack_Info. It may also
-    --  be used for detecting asynchronous abort in combination with
-    --  Invalidate_Self_Cache.
- 
-    --  Set_Stack_Info should do the following things in order:
-    --     1) Get the Stack_Access value for the current task
-    --     2) Set Stack.all to the value obtained in 1)
-    --     3) Optionally Poll to check for asynchronous abort
- 
-    --  This order is important because if at any time a write to
-    --  the stack cache is pending, that write should be followed
-    --  by a Poll to prevent loosing signals.
- 
-    --  Note: This function must be compiled with Polling turned off
- 
-    --  Note: on systems like VxWorks and OS/2 with real thread-local storage,
-    --        Set_Stack_Info should return an access value for such local
-    --        storage. In those cases the cache will always be up-to-date.
- 
-    --  The following constants should be imported from some system-specific
-    --  constants package. The constants must be static for performance reasons.
- 
-    ----------------------------
-    -- Invalidate_Stack_Cache --
-    ----------------------------
- 
-    procedure Invalidate_Stack_Cache (Any_Stack : Stack_Access) is
-       pragma Warnings (Off, Any_Stack);
-    begin
-       Cache := Null_Stack;
-    end Invalidate_Stack_Cache;
- 
-    --------------------
-    -- Set_Stack_Info --
-    --------------------
- 
-    function Set_Stack_Info
-      (Stack : access Stack_Access) return Stack_Access
-    is
-       type Frame_Mark is null record;
-       Frame_Location : Frame_Mark;
-       Frame_Address  : constant Address := Frame_Location'Address;
- 
-       My_Stack    : Stack_Access;
-       Limit_Chars : System.Address;
-       Limit       : Integer;
- 
-    begin
-       --  The order of steps 1 .. 3 is important, see specification.
- 
-       --  1) Get the Stack_Access value for the current task
- 
-       My_Stack := Soft_Links.Get_Stack_Info.all;
- 
-       if My_Stack.Base = Null_Address then
- 
-          --  First invocation, initialize based on the assumption that
-          --  there are Environment_Stack_Size bytes available beyond
-          --  the current frame address.
- 
-          if My_Stack.Size = 0 then
-             My_Stack.Size := Storage_Offset (Default_Env_Stack_Size);
- 
-             --  When the environment variable GNAT_STACK_LIMIT is set,
-             --  set Environment_Stack_Size to that number of kB.
- 
-             Limit_Chars := System.CRTL.getenv ("GNAT_STACK_LIMIT" & ASCII.NUL);
- 
-             if Limit_Chars /= Null_Address then
-                Limit := System.CRTL.atoi (Limit_Chars);
- 
-                if Limit >= 0 then
-                   My_Stack.Size := Storage_Offset (Limit) * Kilobyte;
-                end if;
-             end if;
-          end if;
- 
-          My_Stack.Base := Frame_Address;
- 
-          if Stack_Grows_Down then
- 
-             --  Prevent wrap-around on too big stack sizes
- 
-             My_Stack.Limit := My_Stack.Base - My_Stack.Size;
- 
-             if My_Stack.Limit > My_Stack.Base then
-                My_Stack.Limit := Address'First;
-             end if;
- 
-          else
-             My_Stack.Limit := My_Stack.Base + My_Stack.Size;
- 
-             --  Prevent wrap-around on too big stack sizes
- 
-             if My_Stack.Limit < My_Stack.Base then
-                My_Stack.Limit := Address'Last;
-             end if;
-          end if;
-       end if;
- 
-       --  2) Set Stack.all to the value obtained in 1)
- 
-       Stack.all := My_Stack;
- 
-       --  3) Optionally Poll to check for asynchronous abort
- 
-       if Soft_Links.Check_Abort_Status.all /= 0 then
-          raise Standard'Abort_Signal;
-       end if;
- 
-       return My_Stack; -- Never trust the cached value, but return local copy!
-    end Set_Stack_Info;
- 
-    --------------------
-    -- Set_Stack_Size --
-    --------------------
- 
-    --  Specify the stack size for the current frame.
- 
-    procedure Set_Stack_Size
-      (Stack_Size : System.Storage_Elements.Storage_Offset)
-    is
-       My_Stack      : Stack_Access;
-       Frame_Address : constant System.Address := My_Stack'Address;
- 
-    begin
-       My_Stack := Stack_Check (Frame_Address);
- 
-       if Stack_Grows_Down then
-          My_Stack.Limit := My_Stack.Base - Stack_Size;
-       else
-          My_Stack.Limit := My_Stack.Base + Stack_Size;
-       end if;
-    end Set_Stack_Size;
- 
-    -----------------
-    -- Stack_Check --
-    -----------------
- 
-    function Stack_Check
-      (Stack_Address : System.Address) return Stack_Access
-    is
-       type Frame_Marker is null record;
-       Marker        : Frame_Marker;
-       Cached_Stack  : constant Stack_Access := Cache;
-       Frame_Address : constant System.Address := Marker'Address;
- 
-    begin
-       --  This function first does a "cheap" check which is correct
-       --  if it succeeds. In case of failure, the full check is done.
-       --  Ideally the cheap check should be done in an optimized manner,
-       --  or be inlined.
- 
-       if (Stack_Grows_Down and then
-             (Frame_Address <= Cached_Stack.Base
-                and
-              Stack_Address > Cached_Stack.Limit))
-         or else
-          (not Stack_Grows_Down and then
-             (Frame_Address >= Cached_Stack.Base
-                and
-              Stack_Address < Cached_Stack.Limit))
-       then
-          --  Cached_Stack is valid as it passed the stack check
-          return Cached_Stack;
-       end if;
- 
-       Full_Check :
-       declare
-          My_Stack : constant Stack_Access := Set_Stack_Info (Cache'Access);
-          --  At this point Stack.all might already be invalid, so
-          --  it is essential to use our local copy of Stack!
- 
-       begin
-          if (Stack_Grows_Down and then
-                (not (Frame_Address <= My_Stack.Base)))
-            or else
-             (not Stack_Grows_Down and then
-                (not (Frame_Address >= My_Stack.Base)))
-          then
-             --  The returned Base is lower than the stored one,
-             --  so assume that the original one wasn't right and use the
-             --  current Frame_Address as new one. This allows initializing
-             --  Base with the Frame_Address as approximation.
-             --  During initialization the Frame_Address will be close to
-             --  the stack base anyway: the difference should be compensated
-             --  for in the stack reserve.
- 
-             My_Stack.Base := Frame_Address;
-          end if;
- 
-          if (Stack_Grows_Down and then
-                   Stack_Address < My_Stack.Limit)
-            or else
-             (not Stack_Grows_Down and then
-                   Stack_Address > My_Stack.Limit)
-          then
-             Ada.Exceptions.Raise_Exception
-               (E       => Storage_Error'Identity,
-                Message => "stack overflow detected");
-          end if;
- 
-          return My_Stack;
-       end Full_Check;
-    end Stack_Check;
- 
-    ------------------------
-    -- Update_Stack_Cache --
-    ------------------------
- 
-    procedure Update_Stack_Cache (Stack : Stack_Access) is
-    begin
-       if not Multi_Processor then
-          Cache := Stack;
-       end if;
-    end Update_Stack_Cache;
- 
  end System.Stack_Checking;
--- 31,38 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  As noted in the spec, this dummy body is present because otherwise we
! --  have bootstrapping path problems (there used to be a real body).
  
  package body System.Stack_Checking is
  end System.Stack_Checking;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-stache.ads gcc-4.0.0/gcc/ada/s-stache.ads
*** gcc-3.4.3/gcc/ada/s-stache.ads	Tue Oct 21 13:42:14 2003
--- gcc-4.0.0/gcc/ada/s-stache.ads	Mon Mar 22 14:06:28 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --           Copyright (C) 1999-2003 Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --           Copyright (C) 1999-2004 Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 34,46 ****
  --  This package provides a system-independent implementation of stack
  --  checking using comparison with stack base and limit.
  
! with System.Storage_Elements;
  
! pragma Polling (Off);
! --  Turn off polling, we do not want polling to take place during stack
! --  checking operations. It causes infinite loops and other problems.
  
  package System.Stack_Checking is
     type Stack_Info is record
        Limit : System.Address := System.Null_Address;
        Base  : System.Address := System.Null_Address;
--- 34,52 ----
  --  This package provides a system-independent implementation of stack
  --  checking using comparison with stack base and limit.
  
! --  This package defines basic types and objects. Operations related to
! --  stack checking can be found in package System.Stack_Checking.Operations.
  
! with System.Storage_Elements;
  
  package System.Stack_Checking is
+ 
+    pragma Elaborate_Body;
+    --  This unit has a junk null body. The reason is that historically we
+    --  used to have a real body, and it causes bootstrapping path problems
+    --  to eliminate it, since the old body may still be present in the
+    --  compilation environment for a build.
+ 
     type Stack_Info is record
        Limit : System.Address := System.Null_Address;
        Base  : System.Address := System.Null_Address;
*************** package System.Stack_Checking is
*** 59,88 ****
     --  upgrowing stack) may contain any address that is part of another stack.
     --  The Stack_Access may be part of a larger data structure.
  
!    Multi_Processor        : constant Boolean := False; --  Not supported yet
! 
!    ----------------------
!    -- Client Interface --
!    ----------------------
! 
!    procedure Set_Stack_Size
!      (Stack_Size : System.Storage_Elements.Storage_Offset);
!    --  Specify the stack size for the current task.
! 
!    procedure Update_Stack_Cache (Stack : Stack_Access);
!    --  Set the stack cache for the current task. Note that this is only
!    --  for optimization purposes, nothing can be assumed about the
!    --  contents of the cache at any time, see Set_Stack_Info.
! 
!    procedure Invalidate_Stack_Cache (Any_Stack : Stack_Access);
!    --  Invalidate cache entries for the task T that owns Any_Stack.
!    --  This causes the Set_Stack_Info function to be called during
!    --  the next stack check done by T. This can be used to interrupt
!    --  task T asynchronously.
!    --  Stack_Check should be called in loops for this to work reliably.
! 
!    function Stack_Check (Stack_Address : System.Address) return Stack_Access;
!    --  This version of Stack_Check should not be inlined.
  
  private
  
--- 65,71 ----
     --  upgrowing stack) may contain any address that is part of another stack.
     --  The Stack_Access may be part of a larger data structure.
  
!    Multi_Processor : constant Boolean := False; --  Not supported yet
  
  private
  
*************** private
*** 92,105 ****
        Size  => 0);
     --  Use explicit assignment to avoid elaboration code (call to init proc).
  
!    Null_Stack       : constant Stack_Access := Null_Stack_Info'Access;
     --  Stack_Access value that will return a Stack_Base and Stack_Limit
     --  that fail any stack check.
  
-    Cache            : aliased Stack_Access := Null_Stack;
- 
-    pragma Export (C, Cache, "_gnat_stack_cache");
-    pragma Export (C, Stack_Check, "_gnat_stack_check");
-    pragma Export (C, Set_Stack_Size, "__gnat_set_stack_size");
- 
  end System.Stack_Checking;
--- 75,82 ----
        Size  => 0);
     --  Use explicit assignment to avoid elaboration code (call to init proc).
  
!    Null_Stack : constant Stack_Access := Null_Stack_Info'Access;
     --  Stack_Access value that will return a Stack_Base and Stack_Limit
     --  that fail any stack check.
  
  end System.Stack_Checking;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-stalib.ads gcc-4.0.0/gcc/ada/s-stalib.ads
*** gcc-3.4.3/gcc/ada/s-stalib.ads	Tue Oct 21 13:42:14 2003
--- gcc-4.0.0/gcc/ada/s-stalib.ads	Mon Apr 19 15:20:13 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package System.Standard_Library is
*** 97,102 ****
--- 97,116 ----
     type Exception_Data_Ptr is access all Exception_Data;
     --  An equivalent of Exception_Id that is public
  
+    type Exception_Code is mod 2 ** Integer'Size;
+    --  A scalar value bound to some exception data. Typically used for
+    --  imported or exported exceptions on VMS. Having a separate type for this
+    --  is useful to enforce consistency throughout the various run-time units
+    --  handling such codes, and having it unsigned is the most appropriate
+    --  choice for it's currently single use on VMS.
+ 
+    --  ??? The construction in Cstand has no way to access the proper type
+    --  node for Exception_Code, and currently uses Standard_Unsigned as a
+    --  fallback. The representations shall match, and the size clause below
+    --  is aimed at ensuring that.
+ 
+    for Exception_Code'Size use Integer'Size;
+ 
     --  The following record defines the underlying representation of exceptions
  
     --  WARNING! Any changes to this may need to be reflectd in the following
*************** package System.Standard_Library is
*** 131,137 ****
        --  built (by Register_Exception in s-exctab.adb) for converting between
        --  identities and names.
  
!       Import_Code : Integer;
        --  Value for imported exceptions. Needed only for the handling of
        --  Import/Export_Exception for the VMS case, but present in all
        --  implementations (we might well extend this mechanism for other
--- 145,151 ----
        --  built (by Register_Exception in s-exctab.adb) for converting between
        --  identities and names.
  
!       Import_Code : Exception_Code;
        --  Value for imported exceptions. Needed only for the handling of
        --  Import/Export_Exception for the VMS case, but present in all
        --  implementations (we might well extend this mechanism for other
diff -Nrcpad gcc-3.4.3/gcc/ada/s-stchop-vxworks.adb gcc-4.0.0/gcc/ada/s-stchop-vxworks.adb
*** gcc-3.4.3/gcc/ada/s-stchop-vxworks.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-stchop-vxworks.adb	Fri Jun 11 10:47:39 2004
***************
*** 0 ****
--- 1,234 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --     S Y S T E M . S T A C K _ C H E C K I N G . O P E R A T I O N S      --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --          Copyright (C) 1999-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the VxWorks version of this package.
+ --  This file should be kept synchronized with the general implementation
+ --  provided by s-stchop.adb.
+ 
+ pragma Restrictions (No_Elaboration_Code);
+ --  We want to guarantee the absence of elaboration code because the
+ --  binder does not handle references to this package.
+ 
+ with Ada.Exceptions;
+ 
+ with System.Storage_Elements; use System.Storage_Elements;
+ with System.Parameters; use System.Parameters;
+ with System.Soft_Links;
+ with Interfaces.C;
+ with System.OS_Interface;
+ 
+ package body System.Stack_Checking.Operations is
+ 
+    --  In order to have stack checking working appropriately on
+    --  VxWorks we need to extract the stack size information from the
+    --  VxWorks kernel itself. It means that the library for showing
+    --  task-related information needs to be linked into the VxWorks
+    --  system, when using stack checking. The TaskShow library can be
+    --  linked into the VxWorks system by either:
+    --    * defining INCLUDE_SHOW_ROUTINES in config.h when using
+    --      configuration header files, or
+    --    * selecting INCLUDE_TASK_SHOW when using the Tornado project
+    --      facility.
+ 
+    function Set_Stack_Info (Stack : access Stack_Access) return Stack_Access;
+ 
+    --  The function Set_Stack_Info is the actual function that updates
+    --  the cache containing a pointer to the Stack_Info. It may also
+    --  be used for detecting asynchronous abort in combination with
+    --  Invalidate_Self_Cache.
+ 
+    --  Set_Stack_Info should do the following things in order:
+    --     1) Get the Stack_Access value for the current task
+    --     2) Set Stack.all to the value obtained in 1)
+    --     3) Optionally Poll to check for asynchronous abort
+ 
+    --  This order is important because if at any time a write to
+    --  the stack cache is pending, that write should be followed
+    --  by a Poll to prevent loosing signals.
+ 
+    --  Note: This function must be compiled with Polling turned off
+ 
+    --  Note: on systems like VxWorks and OS/2 with real thread-local storage,
+    --        Set_Stack_Info should return an access value for such local
+    --        storage. In those cases the cache will always be up-to-date.
+ 
+    --  The following constants should be imported from some system-specific
+    --  constants package. The constants must be static for performance reasons.
+ 
+    ----------------------------
+    -- Invalidate_Stack_Cache --
+    ----------------------------
+ 
+    procedure Invalidate_Stack_Cache (Any_Stack : Stack_Access) is
+       pragma Warnings (Off, Any_Stack);
+    begin
+       Cache := Null_Stack;
+    end Invalidate_Stack_Cache;
+ 
+    --------------------
+    -- Set_Stack_Info --
+    --------------------
+ 
+    function Set_Stack_Info
+      (Stack : access Stack_Access) return Stack_Access
+    is
+ 
+       --  Task descriptor that is handled internally by the VxWorks kernel
+       type Task_Descriptor is record
+          T_Id            : Interfaces.C.int; -- task identifier
+          Td_Name         : System.Address; -- task name
+          Td_Priority     : Interfaces.C.int; -- task priority
+          Td_Status       : Interfaces.C.int; -- task status
+          Td_Options      : Interfaces.C.int; -- task option bits (see below)
+          Td_Entry        : System.Address; -- original entry point of task
+          Td_Sp           : System.Address; -- saved stack pointer
+          Td_PStackBase   : System.Address; -- the bottom of the stack
+          Td_PStackLimit  : System.Address; -- the effective end of the stack
+          Td_PStackEnd    : System.Address; -- the actual end of the stack
+          Td_StackSize    : Interfaces.C.int; -- size of stack in bytes
+          Td_StackCurrent : Interfaces.C.int; -- current stack usage in bytes
+          Td_StackHigh    : Interfaces.C.int; -- maximum stack usage in bytes
+          Td_StackMargin  : Interfaces.C.int; -- current stack margin in bytes
+          Td_ErrorStatus  : Interfaces.C.int; -- most recent task error status
+          Td_Delay        : Interfaces.C.int; -- delay/timeout ticks
+       end record;
+       pragma Convention (C, Task_Descriptor);
+ 
+       --  This VxWorks procedure fills in a specified task descriptor
+       --  for a specified task.
+       procedure TaskInfoGet (T_Id : System.OS_Interface.t_id;
+                              Task_Desc : access Task_Descriptor);
+       pragma Import (C, TaskInfoGet, "taskInfoGet");
+ 
+       My_Stack  : Stack_Access;
+       Task_Desc : aliased Task_Descriptor;
+ 
+    begin
+       --  The order of steps 1 .. 3 is important, see specification.
+ 
+       --  1) Get the Stack_Access value for the current task
+ 
+       My_Stack := Soft_Links.Get_Stack_Info.all;
+ 
+       if My_Stack.Base = Null_Address then
+ 
+          --  First invocation. Ask the VxWorks kernel about stack
+          --  values.
+          TaskInfoGet (System.OS_Interface.taskIdSelf, Task_Desc'Access);
+ 
+          My_Stack.Size := System.Storage_Elements.Storage_Offset
+            (Task_Desc.Td_StackSize);
+          My_Stack.Base := Task_Desc.Td_PStackBase;
+          My_Stack.Limit := Task_Desc.Td_PStackLimit;
+ 
+       end if;
+ 
+       --  2) Set Stack.all to the value obtained in 1)
+ 
+       Stack.all := My_Stack;
+ 
+       --  3) Optionally Poll to check for asynchronous abort
+ 
+       if Soft_Links.Check_Abort_Status.all /= 0 then
+          raise Standard'Abort_Signal;
+       end if;
+ 
+       return My_Stack; -- Never trust the cached value, but return local copy!
+    end Set_Stack_Info;
+ 
+    -----------------
+    -- Stack_Check --
+    -----------------
+ 
+    function Stack_Check
+      (Stack_Address : System.Address) return Stack_Access
+    is
+       type Frame_Marker is null record;
+       Marker        : Frame_Marker;
+       Cached_Stack  : constant Stack_Access := Cache;
+       Frame_Address : constant System.Address := Marker'Address;
+ 
+    begin
+       --  This function first does a "cheap" check which is correct
+       --  if it succeeds. In case of failure, the full check is done.
+       --  Ideally the cheap check should be done in an optimized manner,
+       --  or be inlined.
+ 
+       if (Stack_Grows_Down and then
+             (Frame_Address <= Cached_Stack.Base
+                and
+              Stack_Address > Cached_Stack.Limit))
+         or else
+          (not Stack_Grows_Down and then
+             (Frame_Address >= Cached_Stack.Base
+                and
+              Stack_Address < Cached_Stack.Limit))
+       then
+          --  Cached_Stack is valid as it passed the stack check
+          return Cached_Stack;
+       end if;
+ 
+       Full_Check :
+       declare
+          My_Stack : constant Stack_Access := Set_Stack_Info (Cache'Access);
+          --  At this point Stack.all might already be invalid, so
+          --  it is essential to use our local copy of Stack!
+ 
+       begin
+          if (Stack_Grows_Down and then
+                   Stack_Address < My_Stack.Limit)
+            or else
+             (not Stack_Grows_Down and then
+                   Stack_Address > My_Stack.Limit)
+          then
+             Ada.Exceptions.Raise_Exception
+               (E       => Storage_Error'Identity,
+                Message => "stack overflow detected");
+          end if;
+ 
+          return My_Stack;
+       end Full_Check;
+    end Stack_Check;
+ 
+    ------------------------
+    -- Update_Stack_Cache --
+    ------------------------
+ 
+    procedure Update_Stack_Cache (Stack : Stack_Access) is
+    begin
+       if not Multi_Processor then
+          Cache := Stack;
+       end if;
+    end Update_Stack_Cache;
+ 
+ end System.Stack_Checking.Operations;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-stchop.adb gcc-4.0.0/gcc/ada/s-stchop.adb
*** gcc-3.4.3/gcc/ada/s-stchop.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-stchop.adb	Mon Jun  7 14:16:33 2004
***************
*** 0 ****
--- 1,251 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --     S Y S T E M . S T A C K _ C H E C K I N G . O P E R A T I O N S      --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --          Copyright (C) 1999-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the general implementation of this package. There is a VxWorks
+ --  specific version of this package (5zstchop.adb). This file should
+ --  be kept synchronized with it.
+ 
+ pragma Restrictions (No_Elaboration_Code);
+ --  We want to guarantee the absence of elaboration code because the
+ --  binder does not handle references to this package.
+ 
+ with Ada.Exceptions;
+ 
+ with System.Storage_Elements; use System.Storage_Elements;
+ with System.Parameters; use System.Parameters;
+ with System.Soft_Links;
+ with System.CRTL;
+ 
+ package body System.Stack_Checking.Operations is
+ 
+    Kilobyte : constant := 1024;
+ 
+    function Set_Stack_Info (Stack : access Stack_Access) return Stack_Access;
+ 
+    --  The function Set_Stack_Info is the actual function that updates
+    --  the cache containing a pointer to the Stack_Info. It may also
+    --  be used for detecting asynchronous abort in combination with
+    --  Invalidate_Self_Cache.
+ 
+    --  Set_Stack_Info should do the following things in order:
+    --     1) Get the Stack_Access value for the current task
+    --     2) Set Stack.all to the value obtained in 1)
+    --     3) Optionally Poll to check for asynchronous abort
+ 
+    --  This order is important because if at any time a write to
+    --  the stack cache is pending, that write should be followed
+    --  by a Poll to prevent loosing signals.
+ 
+    --  Note: This function must be compiled with Polling turned off
+ 
+    --  Note: on systems like VxWorks and OS/2 with real thread-local storage,
+    --        Set_Stack_Info should return an access value for such local
+    --        storage. In those cases the cache will always be up-to-date.
+ 
+    --  The following constants should be imported from some system-specific
+    --  constants package. The constants must be static for performance reasons.
+ 
+    ----------------------------
+    -- Invalidate_Stack_Cache --
+    ----------------------------
+ 
+    procedure Invalidate_Stack_Cache (Any_Stack : Stack_Access) is
+       pragma Warnings (Off, Any_Stack);
+    begin
+       Cache := Null_Stack;
+    end Invalidate_Stack_Cache;
+ 
+    --------------------
+    -- Set_Stack_Info --
+    --------------------
+ 
+    function Set_Stack_Info
+      (Stack : access Stack_Access) return Stack_Access
+    is
+       type Frame_Mark is null record;
+       Frame_Location : Frame_Mark;
+       Frame_Address  : constant Address := Frame_Location'Address;
+ 
+       My_Stack    : Stack_Access;
+       Limit_Chars : System.Address;
+       Limit       : Integer;
+ 
+    begin
+       --  The order of steps 1 .. 3 is important, see specification.
+ 
+       --  1) Get the Stack_Access value for the current task
+ 
+       My_Stack := Soft_Links.Get_Stack_Info.all;
+ 
+       if My_Stack.Base = Null_Address then
+ 
+          --  First invocation, initialize based on the assumption that
+          --  there are Environment_Stack_Size bytes available beyond
+          --  the current frame address.
+ 
+          if My_Stack.Size = 0 then
+             My_Stack.Size := Storage_Offset (Default_Env_Stack_Size);
+ 
+             --  When the environment variable GNAT_STACK_LIMIT is set,
+             --  set Environment_Stack_Size to that number of kB.
+ 
+             Limit_Chars := System.CRTL.getenv ("GNAT_STACK_LIMIT" & ASCII.NUL);
+ 
+             if Limit_Chars /= Null_Address then
+                Limit := System.CRTL.atoi (Limit_Chars);
+ 
+                if Limit >= 0 then
+                   My_Stack.Size := Storage_Offset (Limit) * Kilobyte;
+                end if;
+             end if;
+          end if;
+ 
+          My_Stack.Base := Frame_Address;
+ 
+          if Stack_Grows_Down then
+ 
+             --  Prevent wrap-around on too big stack sizes
+ 
+             My_Stack.Limit := My_Stack.Base - My_Stack.Size;
+ 
+             if My_Stack.Limit > My_Stack.Base then
+                My_Stack.Limit := Address'First;
+             end if;
+ 
+          else
+             My_Stack.Limit := My_Stack.Base + My_Stack.Size;
+ 
+             --  Prevent wrap-around on too big stack sizes
+ 
+             if My_Stack.Limit < My_Stack.Base then
+                My_Stack.Limit := Address'Last;
+             end if;
+          end if;
+       end if;
+ 
+       --  2) Set Stack.all to the value obtained in 1)
+ 
+       Stack.all := My_Stack;
+ 
+       --  3) Optionally Poll to check for asynchronous abort
+ 
+       if Soft_Links.Check_Abort_Status.all /= 0 then
+          raise Standard'Abort_Signal;
+       end if;
+ 
+       return My_Stack; -- Never trust the cached value, but return local copy!
+    end Set_Stack_Info;
+ 
+    -----------------
+    -- Stack_Check --
+    -----------------
+ 
+    function Stack_Check
+      (Stack_Address : System.Address) return Stack_Access
+    is
+       type Frame_Marker is null record;
+       Marker        : Frame_Marker;
+       Cached_Stack  : constant Stack_Access := Cache;
+       Frame_Address : constant System.Address := Marker'Address;
+ 
+    begin
+       --  This function first does a "cheap" check which is correct
+       --  if it succeeds. In case of failure, the full check is done.
+       --  Ideally the cheap check should be done in an optimized manner,
+       --  or be inlined.
+ 
+       if (Stack_Grows_Down and then
+             (Frame_Address <= Cached_Stack.Base
+                and
+              Stack_Address > Cached_Stack.Limit))
+         or else
+          (not Stack_Grows_Down and then
+             (Frame_Address >= Cached_Stack.Base
+                and
+              Stack_Address < Cached_Stack.Limit))
+       then
+          --  Cached_Stack is valid as it passed the stack check
+          return Cached_Stack;
+       end if;
+ 
+       Full_Check :
+       declare
+          My_Stack : constant Stack_Access := Set_Stack_Info (Cache'Access);
+          --  At this point Stack.all might already be invalid, so
+          --  it is essential to use our local copy of Stack!
+ 
+       begin
+          if (Stack_Grows_Down and then
+                (not (Frame_Address <= My_Stack.Base)))
+            or else
+             (not Stack_Grows_Down and then
+                (not (Frame_Address >= My_Stack.Base)))
+          then
+             --  The returned Base is lower than the stored one,
+             --  so assume that the original one wasn't right and use the
+             --  current Frame_Address as new one. This allows initializing
+             --  Base with the Frame_Address as approximation.
+             --  During initialization the Frame_Address will be close to
+             --  the stack base anyway: the difference should be compensated
+             --  for in the stack reserve.
+ 
+             My_Stack.Base := Frame_Address;
+          end if;
+ 
+          if (Stack_Grows_Down and then
+                   Stack_Address < My_Stack.Limit)
+            or else
+             (not Stack_Grows_Down and then
+                   Stack_Address > My_Stack.Limit)
+          then
+             Ada.Exceptions.Raise_Exception
+               (E       => Storage_Error'Identity,
+                Message => "stack overflow detected");
+          end if;
+ 
+          return My_Stack;
+       end Full_Check;
+    end Stack_Check;
+ 
+    ------------------------
+    -- Update_Stack_Cache --
+    ------------------------
+ 
+    procedure Update_Stack_Cache (Stack : Stack_Access) is
+    begin
+       if not Multi_Processor then
+          Cache := Stack;
+       end if;
+    end Update_Stack_Cache;
+ 
+ end System.Stack_Checking.Operations;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-stchop.ads gcc-4.0.0/gcc/ada/s-stchop.ads
*** gcc-3.4.3/gcc/ada/s-stchop.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-stchop.ads	Mon Jun  7 14:16:33 2004
***************
*** 0 ****
--- 1,68 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --     S Y S T E M . S T A C K _ C H E C K I N G . O P E R A T I O N S      --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --            Copyright (C) 1999-2004 Free Software Foundation, Inc.        --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package provides a implementation of stack checking operations
+ --  using comparison with stack base and limit.
+ 
+ pragma Restrictions (No_Elaboration_Code);
+ --  We want to guarantee the absence of elaboration code because the
+ --  binder does not handle references to this package.
+ 
+ pragma Polling (Off);
+ --  Turn off polling, we do not want polling to take place during stack
+ --  checking operations. It causes infinite loops and other problems.
+ 
+ package System.Stack_Checking.Operations is
+    procedure Update_Stack_Cache (Stack : Stack_Access);
+    --  Set the stack cache for the current task. Note that this is only
+    --  for optimization purposes, nothing can be assumed about the
+    --  contents of the cache at any time, see Set_Stack_Info.
+ 
+    procedure Invalidate_Stack_Cache (Any_Stack : Stack_Access);
+    --  Invalidate cache entries for the task T that owns Any_Stack.
+    --  This causes the Set_Stack_Info function to be called during
+    --  the next stack check done by T. This can be used to interrupt
+    --  task T asynchronously.
+    --  Stack_Check should be called in loops for this to work reliably.
+ 
+    function Stack_Check (Stack_Address : System.Address) return Stack_Access;
+    --  This version of Stack_Check should not be inlined.
+ 
+ private
+ 
+    Cache : aliased Stack_Access := Null_Stack;
+ 
+    pragma Export (C, Cache, "_gnat_stack_cache");
+    pragma Export (C, Stack_Check, "_gnat_stack_check");
+ 
+ end System.Stack_Checking.Operations;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-stoele.adb gcc-4.0.0/gcc/ada/s-stoele.adb
*** gcc-3.4.3/gcc/ada/s-stoele.adb	Thu Apr 24 17:54:13 2003
--- gcc-4.0.0/gcc/ada/s-stoele.adb	Fri Apr 23 10:58:31 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --        Copyright (C) 1992,1993,1994 Free Software Foundation, Inc.       --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body System.Storage_Elements is
*** 43,73 ****
  
     function "+" (Left : Address; Right : Storage_Offset) return Address is
     begin
!       return Left + To_Address (Right);
     end "+";
  
     function "+" (Left : Storage_Offset; Right : Address) return Address is
     begin
!       return To_Address (Left) + Right;
     end "+";
  
     function "-" (Left : Address; Right : Storage_Offset) return Address is
     begin
!       return Left - To_Address (Right);
     end "-";
  
     function "-" (Left, Right : Address) return Storage_Offset is
     begin
!       return To_Offset (Left - Right);
     end "-";
  
     function "mod" (Left : Address; Right : Storage_Offset)
       return Storage_Offset is
     begin
        if Right >= 0 then
!          return Storage_Offset (Address'(Left mod Address (Right)));
        else
!          return -Storage_Offset (Address'(Left mod Address (-Right)));
        end if;
     end "mod";
  
--- 43,75 ----
  
     function "+" (Left : Address; Right : Storage_Offset) return Address is
     begin
!       return To_Address (To_Integer (Left) + To_Integer (To_Address (Right)));
     end "+";
  
     function "+" (Left : Storage_Offset; Right : Address) return Address is
     begin
!       return To_Address (To_Integer (To_Address (Left)) + To_Integer (Right));
     end "+";
  
     function "-" (Left : Address; Right : Storage_Offset) return Address is
     begin
!       return To_Address (To_Integer (Left) - To_Integer (To_Address (Right)));
     end "-";
  
     function "-" (Left, Right : Address) return Storage_Offset is
     begin
!       return To_Offset (To_Address (To_Integer (Left) - To_Integer (Right)));
     end "-";
  
     function "mod" (Left : Address; Right : Storage_Offset)
       return Storage_Offset is
     begin
        if Right >= 0 then
!          return Storage_Offset
!                   (To_Integer (Left) mod Integer_Address (Right));
        else
!          return -Storage_Offset
!                   (To_Integer (Left) mod Integer_Address (-Right));
        end if;
     end "mod";
  
diff -Nrcpad gcc-3.4.3/gcc/ada/s-stoele.ads gcc-4.0.0/gcc/ada/s-stoele.ads
*** gcc-3.4.3/gcc/ada/s-stoele.ads	Tue Oct 21 13:42:14 2003
--- gcc-4.0.0/gcc/ada/s-stoele.ads	Mon Apr 19 15:20:14 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** pragma Pure (Storage_Elements);
*** 51,62 ****
  --  and it would be unsafe to treat such functions as pure.
  
     type Storage_Offset is range
!      -(2 ** (Standard."-" (Standard'Address_Size, 1))) ..
!      +(2 ** (Standard."-" (Standard'Address_Size, 1))) - 1;
! 
!    --  Note: the reason for the qualification of "-" here by Standard is
!    --  that we have a current bug in GNAT that otherwise causes a bogus
!    --  ambiguity when this unit is analyzed in an Rtsfind context.
  
     subtype Storage_Count is Storage_Offset range 0 .. Storage_Offset'Last;
  
--- 51,58 ----
  --  and it would be unsafe to treat such functions as pure.
  
     type Storage_Offset is range
!      -(2 ** (Integer'(Standard'Address_Size) - 1)) ..
!      +(2 ** (Integer'(Standard'Address_Size) - 1)) - Long_Long_Integer'(1);
  
     subtype Storage_Count is Storage_Offset range 0 .. Storage_Offset'Last;
  
*************** pragma Pure (Storage_Elements);
*** 82,88 ****
     function "-" (Left : Address; Right : Storage_Offset) return Address;
     pragma Convention (Intrinsic, "-");
     pragma Inline_Always ("-");
!    pragma Pure_Function ("+");
  
     function "-" (Left, Right : Address) return Storage_Offset;
     pragma Convention (Intrinsic, "-");
--- 78,84 ----
     function "-" (Left : Address; Right : Storage_Offset) return Address;
     pragma Convention (Intrinsic, "-");
     pragma Inline_Always ("-");
!    pragma Pure_Function ("-");
  
     function "-" (Left, Right : Address) return Storage_Offset;
     pragma Convention (Intrinsic, "-");
*************** pragma Pure (Storage_Elements);
*** 91,98 ****
  
     function "mod"
       (Left  : Address;
!       Right : Storage_Offset)
!       return  Storage_Offset;
     pragma Convention (Intrinsic, "mod");
     pragma Inline_Always ("mod");
     pragma Pure_Function ("mod");
--- 87,93 ----
  
     function "mod"
       (Left  : Address;
!       Right : Storage_Offset) return  Storage_Offset;
     pragma Convention (Intrinsic, "mod");
     pragma Inline_Always ("mod");
     pragma Pure_Function ("mod");
diff -Nrcpad gcc-3.4.3/gcc/ada/s-stratt.adb gcc-4.0.0/gcc/ada/s-stratt.adb
*** gcc-3.4.3/gcc/ada/s-stratt.adb	Tue Oct 21 13:42:14 2003
--- gcc-4.0.0/gcc/ada/s-stratt.adb	Mon Jan  3 15:37:33 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body System.Stream_Attributes is
*** 39,45 ****
  
     Err : exception renames Ada.IO_Exceptions.End_Error;
     --  Exception raised if insufficient data read (note that the RM implies
!    --  that Data_Error might be the appropriate choice, but AI195-00132
     --  decides with a binding interpretation that End_Error is preferred).
  
     SU : constant := System.Storage_Unit;
--- 39,45 ----
  
     Err : exception renames Ada.IO_Exceptions.End_Error;
     --  Exception raised if insufficient data read (note that the RM implies
!    --  that Data_Error might be the appropriate choice, but AI95-00132
     --  decides with a binding interpretation that End_Error is preferred).
  
     SU : constant := System.Storage_Unit;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-strops.adb gcc-4.0.0/gcc/ada/s-strops.adb
*** gcc-3.4.3/gcc/ada/s-strops.adb	Tue Oct 21 13:42:14 2003
--- gcc-4.0.0/gcc/ada/s-strops.adb	Thu Feb 10 13:50:17 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body System.String_Ops is
*** 102,127 ****
        end if;
     end Str_Concat_SC;
  
-    -------------------
-    -- Str_Normalize --
-    -------------------
- 
-    procedure Str_Normalize (A : in out String) is
-    begin
-       for J in A'Range loop
-          A (J) := Character'Last;
-       end loop;
-    end Str_Normalize;
- 
-    ------------------------
-    -- Wide_Str_Normalize --
-    ------------------------
- 
-    procedure Wide_Str_Normalize (A : in out Wide_String) is
-    begin
-       for J in A'Range loop
-          A (J) := Wide_Character'Last;
-       end loop;
-    end Wide_Str_Normalize;
- 
  end System.String_Ops;
--- 102,105 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/s-strops.ads gcc-4.0.0/gcc/ada/s-strops.ads
*** gcc-3.4.3/gcc/ada/s-strops.ads	Tue Oct 21 13:42:14 2003
--- gcc-4.0.0/gcc/ada/s-strops.ads	Thu Feb 10 13:50:17 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** pragma Pure (String_Ops);
*** 49,60 ****
     function Str_Concat_CC (X, Y : Character) return String;
     --  Concatenate two characters
  
-    procedure Str_Normalize (A : in out String);
-    --  Initialize String object if pragma Normalize_Scalars is in effect.
- 
-    procedure Wide_Str_Normalize (A : in out Wide_String);
-    --  Ditto for Wide_String.
- 
-    pragma Inline (Str_Normalize);
-    pragma Inline (Wide_Str_Normalize);
  end System.String_Ops;
--- 49,52 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/s-taasde.adb gcc-4.0.0/gcc/ada/s-taasde.adb
*** gcc-3.4.3/gcc/ada/s-taasde.adb	Tue Oct 21 13:42:15 2003
--- gcc-4.0.0/gcc/ada/s-taasde.adb	Mon May 17 13:20:44 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1998-2002, Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1998-2004, Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with System.OS_Primitives;
*** 62,68 ****
  --  used for Max_Sensible_Delay
  
  with Ada.Task_Identification;
! --  used for Task_ID type
  
  with System.Parameters;
  --  used for Single_Lock
--- 62,68 ----
  --  used for Max_Sensible_Delay
  
  with Ada.Task_Identification;
! --  used for Task_Id type
  
  with System.Parameters;
  --  used for Single_Lock
*************** package body System.Tasking.Async_Delays
*** 86,94 ****
     use System.Traces.Tasking;
  
     function To_System is new Unchecked_Conversion
!      (Ada.Task_Identification.Task_Id, Task_ID);
  
!    Timer_Server_ID : ST.Task_ID;
  
     Timer_Attention : Boolean := False;
     pragma Atomic (Timer_Attention);
--- 86,94 ----
     use System.Traces.Tasking;
  
     function To_System is new Unchecked_Conversion
!      (Ada.Task_Identification.Task_Id, Task_Id);
  
!    Timer_Server_ID : ST.Task_Id;
  
     Timer_Attention : Boolean := False;
     pragma Atomic (Timer_Attention);
*************** package body System.Tasking.Async_Delays
*** 214,223 ****
       (T : Duration;
        D : Delay_Block_Access)
     is
!       Self_Id : constant Task_ID  := STPO.Self;
        Q       : Delay_Block_Access;
  
!       use type ST.Task_ID;
        --  for visibility of operator "="
  
     begin
--- 214,223 ----
       (T : Duration;
        D : Delay_Block_Access)
     is
!       Self_Id : constant Task_Id  := STPO.Self;
        Q       : Delay_Block_Access;
  
!       use type ST.Task_Id;
        --  for visibility of operator "="
  
     begin
*************** package body System.Tasking.Async_Delays
*** 319,325 ****
        Yielded          : Boolean;
        Now              : Duration;
        Dequeued         : Delay_Block_Access;
!       Dequeued_Task    : Task_ID;
  
     begin
        Timer_Server_ID := STPO.Self;
--- 319,325 ----
        Yielded          : Boolean;
        Now              : Duration;
        Dequeued         : Delay_Block_Access;
!       Dequeued_Task    : Task_Id;
  
     begin
        Timer_Server_ID := STPO.Self;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-taasde.ads gcc-4.0.0/gcc/ada/s-taasde.ads
*** gcc-3.4.3/gcc/ada/s-taasde.ads	Tue Oct 21 13:42:15 2003
--- gcc-4.0.0/gcc/ada/s-taasde.ads	Mon May 17 13:20:44 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1998-2001 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1998-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package System.Tasking.Async_Delays is
*** 117,123 ****
  private
  
     type Delay_Block is record
!       Self_Id     : Task_ID;
        --  ID of the calling task
  
        Level       : ATC_Level_Base;
--- 117,123 ----
  private
  
     type Delay_Block is record
!       Self_Id     : Task_Id;
        --  ID of the calling task
  
        Level       : ATC_Level_Base;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-taenca.adb gcc-4.0.0/gcc/ada/s-taenca.adb
*** gcc-3.4.3/gcc/ada/s-taenca.adb	Tue Jan 13 11:51:34 2004
--- gcc-4.0.0/gcc/ada/s-taenca.adb	Fri Jun 11 10:47:39 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2003, Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2004, Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body System.Tasking.Entry_Calls 
*** 113,119 ****
     --  If Single_Lock and server is a PO, take RTS_Lock on exit.
  
     procedure Unlock_And_Update_Server
!      (Self_ID    : Task_ID;
        Entry_Call : Entry_Call_Link);
     --  Similar to Unlock_Server, but services entry calls if the
     --  server is a protected object.
--- 113,119 ----
     --  If Single_Lock and server is a PO, take RTS_Lock on exit.
  
     procedure Unlock_And_Update_Server
!      (Self_ID    : Task_Id;
        Entry_Call : Entry_Call_Link);
     --  Similar to Unlock_Server, but services entry calls if the
     --  server is a protected object.
*************** package body System.Tasking.Entry_Calls 
*** 121,127 ****
     --  If Single_Lock and server is a PO, take RTS_Lock on exit.
  
     procedure Check_Pending_Actions_For_Entry_Call
!      (Self_ID    : Task_ID;
        Entry_Call : Entry_Call_Link);
     --  This procedure performs priority change of a queued call and
     --  dequeuing of an entry call when the call is cancelled.
--- 121,127 ----
     --  If Single_Lock and server is a PO, take RTS_Lock on exit.
  
     procedure Check_Pending_Actions_For_Entry_Call
!      (Self_ID    : Task_Id;
        Entry_Call : Entry_Call_Link);
     --  This procedure performs priority change of a queued call and
     --  dequeuing of an entry call when the call is cancelled.
*************** package body System.Tasking.Entry_Calls 
*** 133,139 ****
     --  and to dequeue the call if the call has been aborted.
  
     procedure Poll_Base_Priority_Change_At_Entry_Call
!      (Self_ID    : Task_ID;
        Entry_Call : Entry_Call_Link);
     pragma Inline (Poll_Base_Priority_Change_At_Entry_Call);
     --  A specialized version of Poll_Base_Priority_Change,
--- 133,139 ----
     --  and to dequeue the call if the call has been aborted.
  
     procedure Poll_Base_Priority_Change_At_Entry_Call
!      (Self_ID    : Task_Id;
        Entry_Call : Entry_Call_Link);
     pragma Inline (Poll_Base_Priority_Change_At_Entry_Call);
     --  A specialized version of Poll_Base_Priority_Change,
*************** package body System.Tasking.Entry_Calls 
*** 146,152 ****
     ---------------------
  
     procedure Check_Exception
!      (Self_ID    : Task_ID;
        Entry_Call : Entry_Call_Link)
     is
        pragma Warnings (Off, Self_ID);
--- 146,152 ----
     ---------------------
  
     procedure Check_Exception
!      (Self_ID    : Task_Id;
        Entry_Call : Entry_Call_Link)
     is
        pragma Warnings (Off, Self_ID);
*************** package body System.Tasking.Entry_Calls 
*** 154,160 ****
        use type Ada.Exceptions.Exception_Id;
  
        procedure Internal_Raise (X : Ada.Exceptions.Exception_Id);
!       pragma Import (C, Internal_Raise, "__gnat_raise_after_setup");
  
        E : constant Ada.Exceptions.Exception_Id :=
              Entry_Call.Exception_To_Raise;
--- 154,160 ----
        use type Ada.Exceptions.Exception_Id;
  
        procedure Internal_Raise (X : Ada.Exceptions.Exception_Id);
!       pragma Import (C, Internal_Raise, "__gnat_raise_with_msg");
  
        E : constant Ada.Exceptions.Exception_Id :=
              Entry_Call.Exception_To_Raise;
*************** package body System.Tasking.Entry_Calls 
*** 174,180 ****
     ------------------------------------------
  
     procedure Check_Pending_Actions_For_Entry_Call
!      (Self_ID    : Task_ID;
        Entry_Call : Entry_Call_Link) is
     begin
        pragma Assert (Self_ID = Entry_Call.Self);
--- 174,180 ----
     ------------------------------------------
  
     procedure Check_Pending_Actions_For_Entry_Call
!      (Self_ID    : Task_Id;
        Entry_Call : Entry_Call_Link) is
     begin
        pragma Assert (Self_ID = Entry_Call.Self);
*************** package body System.Tasking.Entry_Calls 
*** 213,219 ****
     -----------------
  
     procedure Lock_Server (Entry_Call : Entry_Call_Link) is
!       Test_Task         : Task_ID;
        Test_PO           : Protection_Entries_Access;
        Ceiling_Violation : Boolean;
        Failures          : Integer := 0;
--- 213,219 ----
     -----------------
  
     procedure Lock_Server (Entry_Call : Entry_Call_Link) is
!       Test_Task         : Task_Id;
        Test_PO           : Protection_Entries_Access;
        Ceiling_Violation : Boolean;
        Failures          : Integer := 0;
*************** package body System.Tasking.Entry_Calls 
*** 262,268 ****
  
                 if Ceiling_Violation then
                    declare
!                      Current_Task      : constant Task_ID := STPO.Self;
                       Old_Base_Priority : System.Any_Priority;
  
                    begin
--- 262,268 ----
  
                 if Ceiling_Violation then
                    declare
!                      Current_Task      : constant Task_Id := STPO.Self;
                       Old_Base_Priority : System.Any_Priority;
  
                    begin
*************** package body System.Tasking.Entry_Calls 
*** 315,321 ****
     ---------------------------------------------
  
     procedure Poll_Base_Priority_Change_At_Entry_Call
!      (Self_ID    : Task_ID;
        Entry_Call : Entry_Call_Link) is
     begin
        if Dynamic_Priority_Support and then Self_ID.Pending_Priority_Change then
--- 315,321 ----
     ---------------------------------------------
  
     procedure Poll_Base_Priority_Change_At_Entry_Call
!      (Self_ID    : Task_Id;
        Entry_Call : Entry_Call_Link) is
     begin
        if Dynamic_Priority_Support and then Self_ID.Pending_Priority_Change then
*************** package body System.Tasking.Entry_Calls 
*** 377,383 ****
     --------------------
  
     procedure Reset_Priority
!      (Acceptor               : Task_ID;
        Acceptor_Prev_Priority : Rendezvous_Priority) is
     begin
        pragma Assert (Acceptor = STPO.Self);
--- 377,383 ----
     --------------------
  
     procedure Reset_Priority
!      (Acceptor               : Task_Id;
        Acceptor_Prev_Priority : Rendezvous_Priority) is
     begin
        pragma Assert (Acceptor = STPO.Self);
*************** package body System.Tasking.Entry_Calls 
*** 397,403 ****
  
     procedure Try_To_Cancel_Entry_Call (Succeeded : out Boolean) is
        Entry_Call : Entry_Call_Link;
!       Self_ID    : constant Task_ID := STPO.Self;
  
        use type Ada.Exceptions.Exception_Id;
  
--- 397,403 ----
  
     procedure Try_To_Cancel_Entry_Call (Succeeded : out Boolean) is
        Entry_Call : Entry_Call_Link;
!       Self_ID    : constant Task_Id := STPO.Self;
  
        use type Ada.Exceptions.Exception_Id;
  
*************** package body System.Tasking.Entry_Calls 
*** 459,476 ****
     ------------------------------
  
     procedure Unlock_And_Update_Server
!      (Self_ID    : Task_ID;
        Entry_Call : Entry_Call_Link)
     is
        Called_PO : Protection_Entries_Access;
!       Caller    : Task_ID;
  
     begin
        if Entry_Call.Called_Task /= null then
           STPO.Unlock (Entry_Call.Called_Task);
        else
           Called_PO := To_Protection (Entry_Call.Called_PO);
!          PO_Service_Entries (Self_ID, Called_PO);
  
           if Called_PO.Pending_Action then
              Called_PO.Pending_Action := False;
--- 459,476 ----
     ------------------------------
  
     procedure Unlock_And_Update_Server
!      (Self_ID    : Task_Id;
        Entry_Call : Entry_Call_Link)
     is
        Called_PO : Protection_Entries_Access;
!       Caller    : Task_Id;
  
     begin
        if Entry_Call.Called_Task /= null then
           STPO.Unlock (Entry_Call.Called_Task);
        else
           Called_PO := To_Protection (Entry_Call.Called_PO);
!          PO_Service_Entries (Self_ID, Called_PO, False);
  
           if Called_PO.Pending_Action then
              Called_PO.Pending_Action := False;
*************** package body System.Tasking.Entry_Calls 
*** 503,509 ****
     -------------------
  
     procedure Unlock_Server (Entry_Call : Entry_Call_Link) is
!       Caller    : Task_ID;
        Called_PO : Protection_Entries_Access;
  
     begin
--- 503,509 ----
     -------------------
  
     procedure Unlock_Server (Entry_Call : Entry_Call_Link) is
!       Caller    : Task_Id;
        Called_PO : Protection_Entries_Access;
  
     begin
*************** package body System.Tasking.Entry_Calls 
*** 543,549 ****
     -------------------------
  
     procedure Wait_For_Completion (Entry_Call : Entry_Call_Link) is
!       Self_Id : constant Task_ID := Entry_Call.Self;
     begin
        --  If this is a conditional call, it should be cancelled when it
        --  becomes abortable. This is checked in the loop below.
--- 543,549 ----
     -------------------------
  
     procedure Wait_For_Completion (Entry_Call : Entry_Call_Link) is
!       Self_Id : constant Task_Id := Entry_Call.Self;
     begin
        --  If this is a conditional call, it should be cancelled when it
        --  becomes abortable. This is checked in the loop below.
*************** package body System.Tasking.Entry_Calls 
*** 600,606 ****
        Mode        : Delay_Modes;
        Yielded     : out Boolean)
     is
!       Self_Id  : constant Task_ID := Entry_Call.Self;
        Timedout : Boolean := False;
  
        use type Ada.Exceptions.Exception_Id;
--- 600,606 ----
        Mode        : Delay_Modes;
        Yielded     : out Boolean)
     is
!       Self_Id  : constant Task_Id := Entry_Call.Self;
        Timedout : Boolean := False;
  
        use type Ada.Exceptions.Exception_Id;
*************** package body System.Tasking.Entry_Calls 
*** 699,705 ****
     --------------------------
  
     procedure Wait_Until_Abortable
!      (Self_ID : Task_ID;
        Call    : Entry_Call_Link) is
     begin
        pragma Assert (Self_ID.ATC_Nesting_Level > 0);
--- 699,705 ----
     --------------------------
  
     procedure Wait_Until_Abortable
!      (Self_ID : Task_Id;
        Call    : Entry_Call_Link) is
     begin
        pragma Assert (Self_ID.ATC_Nesting_Level > 0);
diff -Nrcpad gcc-3.4.3/gcc/ada/s-taenca.ads gcc-4.0.0/gcc/ada/s-taenca.ads
*** gcc-3.4.3/gcc/ada/s-taenca.ads	Tue Oct 21 13:42:15 2003
--- gcc-4.0.0/gcc/ada/s-taenca.ads	Mon May 17 13:20:44 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --         Copyright (C) 1992-2001, Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --         Copyright (C) 1992-2004, Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package System.Tasking.Entry_Calls is
*** 59,65 ****
     --  Check_Exception must be called after calling this procedure.
  
     procedure Wait_Until_Abortable
!      (Self_ID : Task_ID;
        Call    : Entry_Call_Link);
     --  This procedure suspends the calling task until the specified entry
     --  call is queued abortably or completes.
--- 59,65 ----
     --  Check_Exception must be called after calling this procedure.
  
     procedure Wait_Until_Abortable
!      (Self_ID : Task_Id;
        Call    : Entry_Call_Link);
     --  This procedure suspends the calling task until the specified entry
     --  call is queued abortably or completes.
*************** package System.Tasking.Entry_Calls is
*** 75,81 ****
     --  On return, the call is off-queue and the ATC level is reduced by one.
  
     procedure Reset_Priority
!      (Acceptor               : Task_ID;
        Acceptor_Prev_Priority : Rendezvous_Priority);
     pragma Inline (Reset_Priority);
     --  Reset the priority of a task completing an accept statement to
--- 75,81 ----
     --  On return, the call is off-queue and the ATC level is reduced by one.
  
     procedure Reset_Priority
!      (Acceptor               : Task_Id;
        Acceptor_Prev_Priority : Rendezvous_Priority);
     pragma Inline (Reset_Priority);
     --  Reset the priority of a task completing an accept statement to
*************** package System.Tasking.Entry_Calls is
*** 83,89 ****
     --  Acceptor should always be equal to Self.
  
     procedure Check_Exception
!      (Self_ID    : Task_ID;
        Entry_Call : Entry_Call_Link);
     pragma Inline (Check_Exception);
     --  Raise any pending exception from the Entry_Call.
--- 83,89 ----
     --  Acceptor should always be equal to Self.
  
     procedure Check_Exception
!      (Self_ID    : Task_Id;
        Entry_Call : Entry_Call_Link);
     pragma Inline (Check_Exception);
     --  Raise any pending exception from the Entry_Call.
diff -Nrcpad gcc-3.4.3/gcc/ada/s-taprob.adb gcc-4.0.0/gcc/ada/s-taprob.adb
*** gcc-3.4.3/gcc/ada/s-taprob.adb	Tue Oct 21 13:42:15 2003
--- gcc-4.0.0/gcc/ada/s-taprob.adb	Mon Sep 13 10:18:41 2004
***************
*** 7,13 ****
  --                                  B o d y                                 --
  --                                                                          --
  --             Copyright (C) 1991-1994, Florida State University            --
! --             Copyright (C) 1995-2003, Ada Core Technologies               --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 7,13 ----
  --                                  B o d y                                 --
  --                                                                          --
  --             Copyright (C) 1991-1994, Florida State University            --
! --             Copyright (C) 1995-2004, Ada Core Technologies               --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** pragma Polling (Off);
*** 39,44 ****
--- 39,45 ----
  with System.Task_Primitives.Operations;
  --  used for Write_Lock
  --           Unlock
+ --           Self
  
  with System.Parameters;
  --  used for Runtime_Traces
*************** with System.Parameters;
*** 46,51 ****
--- 47,55 ----
  with System.Traces;
  --  used for Send_Trace_Info
  
+ with System.Soft_Links.Tasking;
+ --  Used for Init_Tasking_Soft_Links
+ 
  package body System.Tasking.Protected_Objects is
  
     use System.Task_Primitives.Operations;
*************** package body System.Tasking.Protected_Ob
*** 84,89 ****
--- 88,94 ----
  
     procedure Lock (Object : Protection_Access) is
        Ceiling_Violation : Boolean;
+ 
     begin
        --  The lock is made without defering abortion.
  
*************** package body System.Tasking.Protected_Ob
*** 104,109 ****
--- 109,127 ----
        if Ceiling_Violation then
           raise Program_Error;
        end if;
+ 
+       --  We are entering in a protected action, so that we increase the
+       --  protected object nesting level (if pragma Detect_Blocking is
+       --  active).
+ 
+       if Detect_Blocking then
+          declare
+             Self_Id : constant Task_Id := Self;
+          begin
+             Self_Id.Common.Protected_Action_Nesting :=
+               Self_Id.Common.Protected_Action_Nesting + 1;
+          end;
+       end if;
     end Lock;
  
     --------------------
*************** package body System.Tasking.Protected_Ob
*** 112,117 ****
--- 130,136 ----
  
     procedure Lock_Read_Only (Object : Protection_Access) is
        Ceiling_Violation : Boolean;
+ 
     begin
        Read_Lock (Object.L'Access, Ceiling_Violation);
  
*************** package body System.Tasking.Protected_Ob
*** 122,127 ****
--- 141,159 ----
        if Ceiling_Violation then
           raise Program_Error;
        end if;
+ 
+       --  We are entering in a protected action, so that we increase the
+       --  protected object nesting level (if pragma Detect_Blocking is
+       --  active).
+ 
+       if Detect_Blocking then
+          declare
+             Self_Id : constant Task_Id := Self;
+          begin
+             Self_Id.Common.Protected_Action_Nesting :=
+               Self_Id.Common.Protected_Action_Nesting + 1;
+          end;
+       end if;
     end Lock_Read_Only;
  
     ------------
*************** package body System.Tasking.Protected_Ob
*** 130,135 ****
--- 162,186 ----
  
     procedure Unlock (Object : Protection_Access) is
     begin
+       --  We are exiting from a protected action, so that we decrease the
+       --  protected object nesting level (if pragma Detect_Blocking is
+       --  active).
+ 
+       if Detect_Blocking then
+          declare
+             Self_Id : constant Task_Id := Self;
+ 
+          begin
+             --  Cannot call this procedure without being within a protected
+             --  action.
+ 
+             pragma Assert (Self_Id.Common.Protected_Action_Nesting > 0);
+ 
+             Self_Id.Common.Protected_Action_Nesting :=
+               Self_Id.Common.Protected_Action_Nesting - 1;
+          end;
+       end if;
+ 
        Unlock (Object.L'Access);
  
        if Parameters.Runtime_Traces then
*************** package body System.Tasking.Protected_Ob
*** 137,140 ****
--- 188,195 ----
        end if;
     end Unlock;
  
+ begin
+    --  Ensure that tasking soft links are set when using protected objects
+ 
+    System.Soft_Links.Tasking.Init_Tasking_Soft_Links;
  end System.Tasking.Protected_Objects;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-taprop-dummy.adb gcc-4.0.0/gcc/ada/s-taprop-dummy.adb
*** gcc-3.4.3/gcc/ada/s-taprop-dummy.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-taprop-dummy.adb	Tue Jul  6 13:57:29 2004
***************
*** 0 ****
--- 1,439 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --     S Y S T E M . T A S K _ P R I M I T I V E S . O P E R A T I O N S    --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --         Copyright (C) 1992-2004, Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a no tasking version of this package
+ 
+ --  This package contains all the GNULL primitives that interface directly
+ --  with the underlying OS.
+ 
+ pragma Polling (Off);
+ --  Turn off polling, we do not want ATC polling to take place during
+ --  tasking operations. It causes infinite loops and other problems.
+ 
+ with System.Tasking;
+ --  used for Ada_Task_Control_Block
+ --           Task_Id
+ 
+ with System.Error_Reporting;
+ --  used for Shutdown
+ 
+ package body System.Task_Primitives.Operations is
+ 
+    use System.Tasking;
+    use System.Parameters;
+ 
+    pragma Warnings (Off);
+    --  Turn off warnings since so many unreferenced parameters
+ 
+    No_Tasking : Boolean;
+    --  Comment required here ???
+ 
+    ----------------
+    -- Abort_Task --
+    ----------------
+ 
+    procedure Abort_Task (T : Task_Id) is
+    begin
+       null;
+    end Abort_Task;
+ 
+    ----------------
+    -- Check_Exit --
+    ----------------
+ 
+    --  Dummy version
+ 
+    function Check_Exit (Self_ID : ST.Task_Id) return Boolean is
+    begin
+       return True;
+    end Check_Exit;
+ 
+    --------------------
+    -- Check_No_Locks --
+    --------------------
+ 
+    function Check_No_Locks (Self_ID : ST.Task_Id) return Boolean is
+    begin
+       return True;
+    end Check_No_Locks;
+ 
+    ----------------------
+    -- Environment_Task --
+    ----------------------
+ 
+    function Environment_Task return Task_Id is
+    begin
+       return null;
+    end Environment_Task;
+ 
+    -----------------
+    -- Create_Task --
+    -----------------
+ 
+    procedure Create_Task
+      (T          : Task_Id;
+       Wrapper    : System.Address;
+       Stack_Size : System.Parameters.Size_Type;
+       Priority   : System.Any_Priority;
+       Succeeded  : out Boolean)
+    is
+    begin
+       Succeeded := False;
+    end Create_Task;
+ 
+    ----------------
+    -- Enter_Task --
+    ----------------
+ 
+    procedure Enter_Task (Self_ID : Task_Id) is
+    begin
+       null;
+    end Enter_Task;
+ 
+    ---------------
+    -- Exit_Task --
+    ---------------
+ 
+    procedure Exit_Task is
+    begin
+       null;
+    end Exit_Task;
+ 
+    -------------------
+    -- Finalize_Lock --
+    -------------------
+ 
+    procedure Finalize_Lock (L : access Lock) is
+    begin
+       null;
+    end Finalize_Lock;
+ 
+    procedure Finalize_Lock (L : access RTS_Lock) is
+    begin
+       null;
+    end Finalize_Lock;
+ 
+    ------------------
+    -- Finalize_TCB --
+    ------------------
+ 
+    procedure Finalize_TCB (T : Task_Id) is
+    begin
+       null;
+    end Finalize_TCB;
+ 
+    ------------------
+    -- Get_Priority --
+    ------------------
+ 
+    function Get_Priority (T : Task_Id) return System.Any_Priority is
+    begin
+       return 0;
+    end Get_Priority;
+ 
+    --------------------
+    -- Get_Thread_Id  --
+    --------------------
+ 
+    function Get_Thread_Id (T : ST.Task_Id) return OSI.Thread_Id is
+    begin
+       return OSI.Thread_Id (T.Common.LL.Thread);
+    end Get_Thread_Id;
+ 
+    ----------------
+    -- Initialize --
+    ----------------
+ 
+    procedure Initialize (Environment_Task : Task_Id) is
+    begin
+       null;
+    end Initialize;
+ 
+    ---------------------
+    -- Initialize_Lock --
+    ---------------------
+ 
+    procedure Initialize_Lock
+      (Prio : System.Any_Priority;
+       L    : access Lock)
+    is
+    begin
+       null;
+    end Initialize_Lock;
+ 
+    procedure Initialize_Lock (L : access RTS_Lock; Level : Lock_Level) is
+    begin
+       null;
+    end Initialize_Lock;
+ 
+    --------------------
+    -- Initialize_TCB --
+    --------------------
+ 
+    procedure Initialize_TCB (Self_ID : Task_Id; Succeeded : out Boolean) is
+    begin
+       Succeeded := False;
+    end Initialize_TCB;
+ 
+    -------------------
+    -- Is_Valid_Task --
+    -------------------
+ 
+    function Is_Valid_Task return Boolean is
+    begin
+       return False;
+    end Is_Valid_Task;
+ 
+    --------------
+    -- Lock_RTS --
+    --------------
+ 
+    procedure Lock_RTS is
+    begin
+       null;
+    end Lock_RTS;
+ 
+    ---------------------
+    -- Monotonic_Clock --
+    ---------------------
+ 
+    function Monotonic_Clock return Duration is
+    begin
+       return 0.0;
+    end Monotonic_Clock;
+ 
+    --------------
+    -- New_ATCB --
+    --------------
+ 
+    function New_ATCB (Entry_Num : Task_Entry_Index) return Task_Id is
+    begin
+       return new Ada_Task_Control_Block (Entry_Num);
+    end New_ATCB;
+ 
+    ---------------
+    -- Read_Lock --
+    ---------------
+ 
+    procedure Read_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
+    begin
+       Ceiling_Violation := False;
+    end Read_Lock;
+ 
+    -----------------------------
+    -- Register_Foreign_Thread --
+    -----------------------------
+ 
+    function Register_Foreign_Thread return Task_Id is
+    begin
+       return null;
+    end Register_Foreign_Thread;
+ 
+    -----------------
+    -- Resume_Task --
+    -----------------
+ 
+    function Resume_Task
+      (T           : ST.Task_Id;
+       Thread_Self : OSI.Thread_Id) return Boolean
+    is
+    begin
+       return False;
+    end Resume_Task;
+ 
+    -------------------
+    -- RT_Resolution --
+    -------------------
+ 
+    function RT_Resolution return Duration is
+    begin
+       return 10#1.0#E-6;
+    end RT_Resolution;
+ 
+    ----------
+    -- Self --
+    ----------
+ 
+    function Self return Task_Id is
+    begin
+       return Null_Task;
+    end Self;
+ 
+    ------------------
+    -- Set_Priority --
+    ------------------
+ 
+    procedure Set_Priority
+      (T                   : Task_Id;
+       Prio                : System.Any_Priority;
+       Loss_Of_Inheritance : Boolean := False)
+    is
+    begin
+       null;
+    end Set_Priority;
+ 
+    -----------
+    -- Sleep --
+    -----------
+ 
+    procedure Sleep (Self_ID : Task_Id; Reason  : System.Tasking.Task_States) is
+    begin
+       null;
+    end Sleep;
+ 
+    -----------------
+    -- Stack_Guard --
+    -----------------
+ 
+    procedure Stack_Guard (T : ST.Task_Id; On : Boolean) is
+    begin
+       null;
+    end Stack_Guard;
+ 
+    ------------------
+    -- Suspend_Task --
+    ------------------
+ 
+    function Suspend_Task
+      (T           : ST.Task_Id;
+       Thread_Self : OSI.Thread_Id) return Boolean
+    is
+    begin
+       return False;
+    end Suspend_Task;
+ 
+    -----------------
+    -- Timed_Delay --
+    -----------------
+ 
+    procedure Timed_Delay
+      (Self_ID : Task_Id;
+       Time    : Duration;
+       Mode    : ST.Delay_Modes)
+    is
+    begin
+       null;
+    end Timed_Delay;
+ 
+    -----------------
+    -- Timed_Sleep --
+    -----------------
+ 
+    procedure Timed_Sleep
+      (Self_ID  : Task_Id;
+       Time     : Duration;
+       Mode     : ST.Delay_Modes;
+       Reason   : System.Tasking.Task_States;
+       Timedout : out Boolean;
+       Yielded  : out Boolean)
+    is
+    begin
+       Timedout := False;
+       Yielded := False;
+    end Timed_Sleep;
+ 
+    ------------
+    -- Unlock --
+    ------------
+ 
+    procedure Unlock (L : access Lock) is
+    begin
+       null;
+    end Unlock;
+ 
+    procedure Unlock (L : access RTS_Lock; Global_Lock : Boolean := False) is
+    begin
+       null;
+    end Unlock;
+ 
+    procedure Unlock (T : Task_Id) is
+    begin
+       null;
+    end Unlock;
+ 
+    ----------------
+    -- Unlock_RTS --
+    ----------------
+ 
+    procedure Unlock_RTS is
+    begin
+       null;
+    end Unlock_RTS;
+    ------------
+    -- Wakeup --
+    ------------
+ 
+    procedure Wakeup (T : Task_Id; Reason : System.Tasking.Task_States) is
+    begin
+       null;
+    end Wakeup;
+ 
+    ----------------
+    -- Write_Lock --
+    ----------------
+ 
+    procedure Write_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
+    begin
+       Ceiling_Violation := False;
+    end Write_Lock;
+ 
+    procedure Write_Lock
+      (L           : access RTS_Lock;
+       Global_Lock : Boolean := False)
+    is
+    begin
+       null;
+    end Write_Lock;
+ 
+    procedure Write_Lock (T : Task_Id) is
+    begin
+       null;
+    end Write_Lock;
+ 
+    -----------
+    -- Yield --
+    -----------
+ 
+    procedure Yield (Do_Yield : Boolean := True) is
+    begin
+       null;
+    end Yield;
+ 
+ begin
+    --  Can't raise an exception because target independent packages try to
+    --  do an Abort_Defer, which gets a memory fault.
+ 
+    No_Tasking :=
+      System.Error_Reporting.Shutdown
+        ("Tasking not implemented on this configuration");
+ end System.Task_Primitives.Operations;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-taprop-hpux-dce.adb gcc-4.0.0/gcc/ada/s-taprop-hpux-dce.adb
*** gcc-3.4.3/gcc/ada/s-taprop-hpux-dce.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-taprop-hpux-dce.adb	Tue Jul  6 13:57:29 2004
***************
*** 0 ****
--- 1,1050 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --     S Y S T E M . T A S K _ P R I M I T I V E S . O P E R A T I O N S    --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --         Copyright (C) 1992-2004, Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a HP-UX DCE threads (HPUX 10) version of this package
+ 
+ --  This package contains all the GNULL primitives that interface directly
+ --  with the underlying OS.
+ 
+ pragma Polling (Off);
+ --  Turn off polling, we do not want ATC polling to take place during
+ --  tasking operations. It causes infinite loops and other problems.
+ 
+ with System.Tasking.Debug;
+ --  used for Known_Tasks
+ 
+ with Interfaces.C;
+ --  used for int
+ --           size_t
+ 
+ with System.Interrupt_Management;
+ --  used for Keep_Unmasked
+ --           Abort_Task_Interrupt
+ --           Interrupt_ID
+ 
+ with System.Interrupt_Management.Operations;
+ --  used for Set_Interrupt_Mask
+ --           All_Tasks_Mask
+ pragma Elaborate_All (System.Interrupt_Management.Operations);
+ 
+ with System.Parameters;
+ --  used for Size_Type
+ 
+ with System.Task_Primitives.Interrupt_Operations;
+ --  used for Get_Interrupt_ID
+ 
+ with System.Tasking;
+ --  used for Ada_Task_Control_Block
+ --           Task_Id
+ 
+ with System.Soft_Links;
+ --  used for Defer/Undefer_Abort
+ 
+ --  Note that we do not use System.Tasking.Initialization directly since
+ --  this is a higher level package that we shouldn't depend on. For example
+ --  when using the restricted run time, it is replaced by
+ --  System.Tasking.Restricted.Stages.
+ 
+ with System.OS_Primitives;
+ --  used for Delay_Modes
+ 
+ with Unchecked_Conversion;
+ with Unchecked_Deallocation;
+ 
+ package body System.Task_Primitives.Operations is
+ 
+    use System.Tasking.Debug;
+    use System.Tasking;
+    use Interfaces.C;
+    use System.OS_Interface;
+    use System.Parameters;
+    use System.OS_Primitives;
+ 
+    package PIO renames System.Task_Primitives.Interrupt_Operations;
+    package SSL renames System.Soft_Links;
+ 
+    ----------------
+    -- Local Data --
+    ----------------
+ 
+    --  The followings are logically constants, but need to be initialized
+    --  at run time.
+ 
+    Single_RTS_Lock : aliased RTS_Lock;
+    --  This is a lock to allow only one thread of control in the RTS at
+    --  a time; it is used to execute in mutual exclusion from all other tasks.
+    --  Used mainly in Single_Lock mode, but also to protect All_Tasks_List
+ 
+    ATCB_Key : aliased pthread_key_t;
+    --  Key used to find the Ada Task_Id associated with a thread
+ 
+    Environment_Task_Id : Task_Id;
+    --  A variable to hold Task_Id for the environment task
+ 
+    Unblocked_Signal_Mask : aliased sigset_t;
+    --  The set of signals that should unblocked in all tasks
+ 
+    Time_Slice_Val : Integer;
+    pragma Import (C, Time_Slice_Val, "__gl_time_slice_val");
+ 
+    Dispatching_Policy : Character;
+    pragma Import (C, Dispatching_Policy, "__gl_task_dispatching_policy");
+ 
+    --  Note: the reason that Locking_Policy is not needed is that this
+    --  is not implemented for DCE threads. The HPUX 10 port is at this
+    --  stage considered dead, and no further work is planned on it.
+ 
+    FIFO_Within_Priorities : constant Boolean := Dispatching_Policy = 'F';
+    --  Indicates whether FIFO_Within_Priorities is set
+ 
+    Foreign_Task_Elaborated : aliased Boolean := True;
+    --  Used to identified fake tasks (i.e., non-Ada Threads)
+ 
+    --------------------
+    -- Local Packages --
+    --------------------
+ 
+    package Specific is
+ 
+       procedure Initialize (Environment_Task : Task_Id);
+       pragma Inline (Initialize);
+       --  Initialize various data needed by this package
+ 
+       function Is_Valid_Task return Boolean;
+       pragma Inline (Is_Valid_Task);
+       --  Does the executing thread have a TCB?
+ 
+       procedure Set (Self_Id : Task_Id);
+       pragma Inline (Set);
+       --  Set the self id for the current task
+ 
+       function Self return Task_Id;
+       pragma Inline (Self);
+       --  Return a pointer to the Ada Task Control Block of the calling task
+ 
+    end Specific;
+ 
+    package body Specific is separate;
+    --  The body of this package is target specific
+ 
+    ---------------------------------
+    -- Support for foreign threads --
+    ---------------------------------
+ 
+    function Register_Foreign_Thread (Thread : Thread_Id) return Task_Id;
+    --  Allocate and Initialize a new ATCB for the current Thread
+ 
+    function Register_Foreign_Thread
+      (Thread : Thread_Id) return Task_Id is separate;
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    procedure Abort_Handler (Sig : Signal);
+ 
+    function To_Address is new Unchecked_Conversion (Task_Id, System.Address);
+ 
+    -------------------
+    -- Abort_Handler --
+    -------------------
+ 
+    procedure Abort_Handler (Sig : Signal) is
+       pragma Unreferenced (Sig);
+ 
+       Self_Id : constant Task_Id := Self;
+       Result  : Interfaces.C.int;
+       Old_Set : aliased sigset_t;
+ 
+    begin
+       if Self_Id.Deferral_Level = 0
+         and then Self_Id.Pending_ATC_Level < Self_Id.ATC_Nesting_Level and then
+         not Self_Id.Aborting
+       then
+          Self_Id.Aborting := True;
+ 
+          --  Make sure signals used for RTS internal purpose are unmasked
+ 
+          Result := pthread_sigmask (SIG_UNBLOCK,
+            Unblocked_Signal_Mask'Unchecked_Access, Old_Set'Unchecked_Access);
+          pragma Assert (Result = 0);
+ 
+          raise Standard'Abort_Signal;
+       end if;
+    end Abort_Handler;
+ 
+    -----------------
+    -- Stack_Guard --
+    -----------------
+ 
+    --  The underlying thread system sets a guard page at the
+    --  bottom of a thread stack, so nothing is needed.
+    --  ??? Check the comment above
+ 
+    procedure Stack_Guard (T : ST.Task_Id; On : Boolean) is
+       pragma Unreferenced (T, On);
+    begin
+       null;
+    end Stack_Guard;
+ 
+    -------------------
+    -- Get_Thread_Id --
+    -------------------
+ 
+    function Get_Thread_Id (T : ST.Task_Id) return OSI.Thread_Id is
+    begin
+       return T.Common.LL.Thread;
+    end Get_Thread_Id;
+ 
+    ----------
+    -- Self --
+    ----------
+ 
+    function Self return Task_Id renames Specific.Self;
+ 
+    ---------------------
+    -- Initialize_Lock --
+    ---------------------
+ 
+    --  Note: mutexes and cond_variables needed per-task basis are
+    --        initialized in Initialize_TCB and the Storage_Error is
+    --        handled. Other mutexes (such as RTS_Lock, Memory_Lock...)
+    --        used in RTS is initialized before any status change of RTS.
+    --        Therefore rasing Storage_Error in the following routines
+    --        should be able to be handled safely.
+ 
+    procedure Initialize_Lock
+      (Prio : System.Any_Priority;
+       L    : access Lock)
+    is
+       Attributes : aliased pthread_mutexattr_t;
+       Result     : Interfaces.C.int;
+ 
+    begin
+       Result := pthread_mutexattr_init (Attributes'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = ENOMEM then
+          raise Storage_Error;
+       end if;
+ 
+       L.Priority := Prio;
+ 
+       Result := pthread_mutex_init (L.L'Access, Attributes'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = ENOMEM then
+          raise Storage_Error;
+       end if;
+ 
+       Result := pthread_mutexattr_destroy (Attributes'Access);
+       pragma Assert (Result = 0);
+    end Initialize_Lock;
+ 
+    procedure Initialize_Lock (L : access RTS_Lock; Level : Lock_Level) is
+       pragma Unreferenced (Level);
+ 
+       Attributes : aliased pthread_mutexattr_t;
+       Result     : Interfaces.C.int;
+ 
+    begin
+       Result := pthread_mutexattr_init (Attributes'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = ENOMEM then
+          raise Storage_Error;
+       end if;
+ 
+       Result := pthread_mutex_init (L, Attributes'Access);
+ 
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = ENOMEM then
+          raise Storage_Error;
+       end if;
+ 
+       Result := pthread_mutexattr_destroy (Attributes'Access);
+       pragma Assert (Result = 0);
+    end Initialize_Lock;
+ 
+    -------------------
+    -- Finalize_Lock --
+    -------------------
+ 
+    procedure Finalize_Lock (L : access Lock) is
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_mutex_destroy (L.L'Access);
+       pragma Assert (Result = 0);
+    end Finalize_Lock;
+ 
+    procedure Finalize_Lock (L : access RTS_Lock) is
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_mutex_destroy (L);
+       pragma Assert (Result = 0);
+    end Finalize_Lock;
+ 
+    ----------------
+    -- Write_Lock --
+    ----------------
+ 
+    procedure Write_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
+       Result : Interfaces.C.int;
+ 
+    begin
+       L.Owner_Priority := Get_Priority (Self);
+ 
+       if L.Priority < L.Owner_Priority then
+          Ceiling_Violation := True;
+          return;
+       end if;
+ 
+       Result := pthread_mutex_lock (L.L'Access);
+       pragma Assert (Result = 0);
+       Ceiling_Violation := False;
+    end Write_Lock;
+ 
+    procedure Write_Lock
+      (L : access RTS_Lock; Global_Lock : Boolean := False)
+    is
+       Result : Interfaces.C.int;
+    begin
+       if not Single_Lock or else Global_Lock then
+          Result := pthread_mutex_lock (L);
+          pragma Assert (Result = 0);
+       end if;
+    end Write_Lock;
+ 
+    procedure Write_Lock (T : Task_Id) is
+       Result : Interfaces.C.int;
+    begin
+       if not Single_Lock then
+          Result := pthread_mutex_lock (T.Common.LL.L'Access);
+          pragma Assert (Result = 0);
+       end if;
+    end Write_Lock;
+ 
+    ---------------
+    -- Read_Lock --
+    ---------------
+ 
+    procedure Read_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
+    begin
+       Write_Lock (L, Ceiling_Violation);
+    end Read_Lock;
+ 
+    ------------
+    -- Unlock --
+    ------------
+ 
+    procedure Unlock (L : access Lock) is
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_mutex_unlock (L.L'Access);
+       pragma Assert (Result = 0);
+    end Unlock;
+ 
+    procedure Unlock (L : access RTS_Lock; Global_Lock : Boolean := False) is
+       Result : Interfaces.C.int;
+    begin
+       if not Single_Lock or else Global_Lock then
+          Result := pthread_mutex_unlock (L);
+          pragma Assert (Result = 0);
+       end if;
+    end Unlock;
+ 
+    procedure Unlock (T : Task_Id) is
+       Result : Interfaces.C.int;
+    begin
+       if not Single_Lock then
+          Result := pthread_mutex_unlock (T.Common.LL.L'Access);
+          pragma Assert (Result = 0);
+       end if;
+    end Unlock;
+ 
+    -----------
+    -- Sleep --
+    -----------
+ 
+    procedure Sleep
+      (Self_ID : Task_Id;
+       Reason  : System.Tasking.Task_States)
+    is
+       pragma Unreferenced (Reason);
+ 
+       Result : Interfaces.C.int;
+    begin
+       if Single_Lock then
+          Result := pthread_cond_wait
+            (Self_ID.Common.LL.CV'Access, Single_RTS_Lock'Access);
+       else
+          Result := pthread_cond_wait
+            (Self_ID.Common.LL.CV'Access, Self_ID.Common.LL.L'Access);
+       end if;
+ 
+       --  EINTR is not considered a failure
+ 
+       pragma Assert (Result = 0 or else Result = EINTR);
+    end Sleep;
+ 
+    -----------------
+    -- Timed_Sleep --
+    -----------------
+ 
+    procedure Timed_Sleep
+      (Self_ID  : Task_Id;
+       Time     : Duration;
+       Mode     : ST.Delay_Modes;
+       Reason   : System.Tasking.Task_States;
+       Timedout : out Boolean;
+       Yielded  : out Boolean)
+    is
+       pragma Unreferenced (Reason);
+ 
+       Check_Time : constant Duration := Monotonic_Clock;
+       Abs_Time   : Duration;
+       Request    : aliased timespec;
+       Result     : Interfaces.C.int;
+ 
+    begin
+       Timedout := True;
+       Yielded := False;
+ 
+       if Mode = Relative then
+          Abs_Time := Duration'Min (Time, Max_Sensible_Delay) + Check_Time;
+       else
+          Abs_Time := Duration'Min (Check_Time + Max_Sensible_Delay, Time);
+       end if;
+ 
+       if Abs_Time > Check_Time then
+          Request := To_Timespec (Abs_Time);
+ 
+          loop
+             exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level
+               or else Self_ID.Pending_Priority_Change;
+ 
+             if Single_Lock then
+                Result := pthread_cond_timedwait
+                  (Self_ID.Common.LL.CV'Access, Single_RTS_Lock'Access,
+                   Request'Access);
+ 
+             else
+                Result := pthread_cond_timedwait
+                  (Self_ID.Common.LL.CV'Access, Self_ID.Common.LL.L'Access,
+                   Request'Access);
+             end if;
+ 
+             exit when Abs_Time <= Monotonic_Clock;
+ 
+             if Result = 0 or Result = EINTR then
+ 
+                --  Somebody may have called Wakeup for us
+ 
+                Timedout := False;
+                exit;
+             end if;
+ 
+             pragma Assert (Result = ETIMEDOUT);
+          end loop;
+       end if;
+    end Timed_Sleep;
+ 
+    -----------------
+    -- Timed_Delay --
+    -----------------
+ 
+    procedure Timed_Delay
+      (Self_ID  : Task_Id;
+       Time     : Duration;
+       Mode     : ST.Delay_Modes)
+    is
+       Check_Time : constant Duration := Monotonic_Clock;
+       Abs_Time   : Duration;
+       Request    : aliased timespec;
+       Result     : Interfaces.C.int;
+ 
+    begin
+       --  The little window between deferring abort and locking Self_ID is the
+       --  only reason to check for pending abort and priority change below!
+ 
+       SSL.Abort_Defer.all;
+ 
+       if Single_Lock then
+          Lock_RTS;
+       end if;
+ 
+       Write_Lock (Self_ID);
+ 
+       if Mode = Relative then
+          Abs_Time := Time + Check_Time;
+       else
+          Abs_Time := Duration'Min (Check_Time + Max_Sensible_Delay, Time);
+       end if;
+ 
+       if Abs_Time > Check_Time then
+          Request := To_Timespec (Abs_Time);
+          Self_ID.Common.State := Delay_Sleep;
+ 
+          loop
+             if Self_ID.Pending_Priority_Change then
+                Self_ID.Pending_Priority_Change := False;
+                Self_ID.Common.Base_Priority := Self_ID.New_Base_Priority;
+                Set_Priority (Self_ID, Self_ID.Common.Base_Priority);
+             end if;
+ 
+             exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level;
+ 
+             if Single_Lock then
+                Result := pthread_cond_timedwait (Self_ID.Common.LL.CV'Access,
+                  Single_RTS_Lock'Access, Request'Access);
+             else
+                Result := pthread_cond_timedwait (Self_ID.Common.LL.CV'Access,
+                  Self_ID.Common.LL.L'Access, Request'Access);
+             end if;
+ 
+             exit when Abs_Time <= Monotonic_Clock;
+ 
+             pragma Assert (Result = 0 or else
+               Result = ETIMEDOUT or else
+               Result = EINTR);
+          end loop;
+ 
+          Self_ID.Common.State := Runnable;
+       end if;
+ 
+       Unlock (Self_ID);
+ 
+       if Single_Lock then
+          Unlock_RTS;
+       end if;
+ 
+       Result := sched_yield;
+       SSL.Abort_Undefer.all;
+    end Timed_Delay;
+ 
+    ---------------------
+    -- Monotonic_Clock --
+    ---------------------
+ 
+    function Monotonic_Clock return Duration is
+       TS     : aliased timespec;
+       Result : Interfaces.C.int;
+    begin
+       Result := Clock_Gettime (CLOCK_REALTIME, TS'Unchecked_Access);
+       pragma Assert (Result = 0);
+       return To_Duration (TS);
+    end Monotonic_Clock;
+ 
+    -------------------
+    -- RT_Resolution --
+    -------------------
+ 
+    function RT_Resolution return Duration is
+    begin
+       return 10#1.0#E-6;
+    end RT_Resolution;
+ 
+    ------------
+    -- Wakeup --
+    ------------
+ 
+    procedure Wakeup (T : Task_Id; Reason : System.Tasking.Task_States) is
+       pragma Unreferenced (Reason);
+ 
+       Result : Interfaces.C.int;
+ 
+    begin
+       Result := pthread_cond_signal (T.Common.LL.CV'Access);
+       pragma Assert (Result = 0);
+    end Wakeup;
+ 
+    -----------
+    -- Yield --
+    -----------
+ 
+    procedure Yield (Do_Yield : Boolean := True) is
+       Result : Interfaces.C.int;
+       pragma Unreferenced (Result);
+    begin
+       if Do_Yield then
+          Result := sched_yield;
+       end if;
+    end Yield;
+ 
+    ------------------
+    -- Set_Priority --
+    ------------------
+ 
+    type Prio_Array_Type is array (System.Any_Priority) of Integer;
+    pragma Atomic_Components (Prio_Array_Type);
+ 
+    Prio_Array : Prio_Array_Type;
+    --  Global array containing the id of the currently running task for
+    --  each priority.
+    --
+    --  Note: we assume that we are on a single processor with run-til-blocked
+    --  scheduling.
+ 
+    procedure Set_Priority
+      (T                   : Task_Id;
+       Prio                : System.Any_Priority;
+       Loss_Of_Inheritance : Boolean := False)
+    is
+       Result     : Interfaces.C.int;
+       Array_Item : Integer;
+       Param      : aliased struct_sched_param;
+ 
+    begin
+       Param.sched_priority  := Interfaces.C.int (Underlying_Priorities (Prio));
+ 
+       if Time_Slice_Val > 0 then
+          Result := pthread_setschedparam
+            (T.Common.LL.Thread, SCHED_RR, Param'Access);
+ 
+       elsif FIFO_Within_Priorities or else Time_Slice_Val = 0 then
+          Result := pthread_setschedparam
+            (T.Common.LL.Thread, SCHED_FIFO, Param'Access);
+ 
+       else
+          Result := pthread_setschedparam
+            (T.Common.LL.Thread, SCHED_OTHER, Param'Access);
+       end if;
+ 
+       pragma Assert (Result = 0);
+ 
+       if FIFO_Within_Priorities then
+ 
+          --  Annex D requirement [RM D.2.2 par. 9]:
+          --    If the task drops its priority due to the loss of inherited
+          --    priority, it is added at the head of the ready queue for its
+          --    new active priority.
+ 
+          if Loss_Of_Inheritance
+            and then Prio < T.Common.Current_Priority
+          then
+             Array_Item := Prio_Array (T.Common.Base_Priority) + 1;
+             Prio_Array (T.Common.Base_Priority) := Array_Item;
+ 
+             loop
+                --  Let some processes a chance to arrive
+ 
+                Yield;
+ 
+                --  Then wait for our turn to proceed
+ 
+                exit when Array_Item = Prio_Array (T.Common.Base_Priority)
+                  or else Prio_Array (T.Common.Base_Priority) = 1;
+             end loop;
+ 
+             Prio_Array (T.Common.Base_Priority) :=
+               Prio_Array (T.Common.Base_Priority) - 1;
+          end if;
+       end if;
+ 
+       T.Common.Current_Priority := Prio;
+    end Set_Priority;
+ 
+    ------------------
+    -- Get_Priority --
+    ------------------
+ 
+    function Get_Priority (T : Task_Id) return System.Any_Priority is
+    begin
+       return T.Common.Current_Priority;
+    end Get_Priority;
+ 
+    ----------------
+    -- Enter_Task --
+    ----------------
+ 
+    procedure Enter_Task (Self_ID : Task_Id) is
+    begin
+       Self_ID.Common.LL.Thread := pthread_self;
+       Specific.Set (Self_ID);
+ 
+       Lock_RTS;
+ 
+       for J in Known_Tasks'Range loop
+          if Known_Tasks (J) = null then
+             Known_Tasks (J) := Self_ID;
+             Self_ID.Known_Tasks_Index := J;
+             exit;
+          end if;
+       end loop;
+ 
+       Unlock_RTS;
+    end Enter_Task;
+ 
+    --------------
+    -- New_ATCB --
+    --------------
+ 
+    function New_ATCB (Entry_Num : Task_Entry_Index) return Task_Id is
+    begin
+       return new Ada_Task_Control_Block (Entry_Num);
+    end New_ATCB;
+ 
+    -------------------
+    -- Is_Valid_Task --
+    -------------------
+ 
+    function Is_Valid_Task return Boolean renames Specific.Is_Valid_Task;
+ 
+    -----------------------------
+    -- Register_Foreign_Thread --
+    -----------------------------
+ 
+    function Register_Foreign_Thread return Task_Id is
+    begin
+       if Is_Valid_Task then
+          return Self;
+       else
+          return Register_Foreign_Thread (pthread_self);
+       end if;
+    end Register_Foreign_Thread;
+ 
+    --------------------
+    -- Initialize_TCB --
+    --------------------
+ 
+    procedure Initialize_TCB (Self_ID : Task_Id; Succeeded : out Boolean) is
+       Mutex_Attr : aliased pthread_mutexattr_t;
+       Result     : Interfaces.C.int;
+       Cond_Attr  : aliased pthread_condattr_t;
+ 
+    begin
+       if not Single_Lock then
+          Result := pthread_mutexattr_init (Mutex_Attr'Access);
+          pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+          if Result = 0 then
+             Result := pthread_mutex_init (Self_ID.Common.LL.L'Access,
+               Mutex_Attr'Access);
+             pragma Assert (Result = 0 or else Result = ENOMEM);
+          end if;
+ 
+          if Result /= 0 then
+             Succeeded := False;
+             return;
+          end if;
+ 
+          Result := pthread_mutexattr_destroy (Mutex_Attr'Access);
+          pragma Assert (Result = 0);
+       end if;
+ 
+       Result := pthread_condattr_init (Cond_Attr'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = 0 then
+          Result := pthread_cond_init (Self_ID.Common.LL.CV'Access,
+            Cond_Attr'Access);
+          pragma Assert (Result = 0 or else Result = ENOMEM);
+       end if;
+ 
+       if Result = 0 then
+          Succeeded := True;
+       else
+          if not Single_Lock then
+             Result := pthread_mutex_destroy (Self_ID.Common.LL.L'Access);
+             pragma Assert (Result = 0);
+          end if;
+ 
+          Succeeded := False;
+       end if;
+ 
+       Result := pthread_condattr_destroy (Cond_Attr'Access);
+       pragma Assert (Result = 0);
+    end Initialize_TCB;
+ 
+    -----------------
+    -- Create_Task --
+    -----------------
+ 
+    procedure Create_Task
+      (T          : Task_Id;
+       Wrapper    : System.Address;
+       Stack_Size : System.Parameters.Size_Type;
+       Priority   : System.Any_Priority;
+       Succeeded  : out Boolean)
+    is
+       Attributes          : aliased pthread_attr_t;
+       Adjusted_Stack_Size : Interfaces.C.size_t;
+       Result              : Interfaces.C.int;
+ 
+       function Thread_Body_Access is new
+         Unchecked_Conversion (System.Address, Thread_Body);
+ 
+    begin
+       if Stack_Size = Unspecified_Size then
+          Adjusted_Stack_Size := Interfaces.C.size_t (Default_Stack_Size);
+ 
+       elsif Stack_Size < Minimum_Stack_Size then
+          Adjusted_Stack_Size := Interfaces.C.size_t (Minimum_Stack_Size);
+ 
+       else
+          Adjusted_Stack_Size := Interfaces.C.size_t (Stack_Size);
+       end if;
+ 
+       Result := pthread_attr_init (Attributes'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result /= 0 then
+          Succeeded := False;
+          return;
+       end if;
+ 
+       Result := pthread_attr_setstacksize
+         (Attributes'Access, Adjusted_Stack_Size);
+       pragma Assert (Result = 0);
+ 
+       --  Since the initial signal mask of a thread is inherited from the
+       --  creator, and the Environment task has all its signals masked, we
+       --  do not need to manipulate caller's signal mask at this point.
+       --  All tasks in RTS will have All_Tasks_Mask initially.
+ 
+       Result := pthread_create
+         (T.Common.LL.Thread'Access,
+          Attributes'Access,
+          Thread_Body_Access (Wrapper),
+          To_Address (T));
+       pragma Assert (Result = 0 or else Result = EAGAIN);
+ 
+       Succeeded := Result = 0;
+ 
+       pthread_detach (T.Common.LL.Thread'Access);
+       --  Detach the thread using pthread_detach, sinc DCE threads do not have
+       --  pthread_attr_set_detachstate.
+ 
+       Result := pthread_attr_destroy (Attributes'Access);
+       pragma Assert (Result = 0);
+ 
+       Set_Priority (T, Priority);
+    end Create_Task;
+ 
+    ------------------
+    -- Finalize_TCB --
+    ------------------
+ 
+    procedure Finalize_TCB (T : Task_Id) is
+       Result  : Interfaces.C.int;
+       Tmp     : Task_Id := T;
+       Is_Self : constant Boolean := T = Self;
+ 
+       procedure Free is new
+         Unchecked_Deallocation (Ada_Task_Control_Block, Task_Id);
+ 
+    begin
+       if not Single_Lock then
+          Result := pthread_mutex_destroy (T.Common.LL.L'Access);
+          pragma Assert (Result = 0);
+       end if;
+ 
+       Result := pthread_cond_destroy (T.Common.LL.CV'Access);
+       pragma Assert (Result = 0);
+ 
+       if T.Known_Tasks_Index /= -1 then
+          Known_Tasks (T.Known_Tasks_Index) := null;
+       end if;
+ 
+       Free (Tmp);
+ 
+       if Is_Self then
+          Specific.Set (null);
+       end if;
+    end Finalize_TCB;
+ 
+    ---------------
+    -- Exit_Task --
+    ---------------
+ 
+    procedure Exit_Task is
+    begin
+       Specific.Set (null);
+    end Exit_Task;
+ 
+    ----------------
+    -- Abort_Task --
+    ----------------
+ 
+    procedure Abort_Task (T : Task_Id) is
+    begin
+       --
+       --  Interrupt Server_Tasks may be waiting on an "event" flag (signal)
+       --
+       if T.Common.State = Interrupt_Server_Blocked_On_Event_Flag then
+          System.Interrupt_Management.Operations.Interrupt_Self_Process
+            (System.Interrupt_Management.Interrupt_ID
+              (PIO.Get_Interrupt_ID (T)));
+       end if;
+    end Abort_Task;
+ 
+    ----------------
+    -- Check_Exit --
+    ----------------
+ 
+    --  Dummy version
+ 
+    function Check_Exit (Self_ID : ST.Task_Id) return Boolean is
+       pragma Unreferenced (Self_ID);
+    begin
+       return True;
+    end Check_Exit;
+ 
+    --------------------
+    -- Check_No_Locks --
+    --------------------
+ 
+    function Check_No_Locks (Self_ID : ST.Task_Id) return Boolean is
+       pragma Unreferenced (Self_ID);
+    begin
+       return True;
+    end Check_No_Locks;
+ 
+    ----------------------
+    -- Environment_Task --
+    ----------------------
+ 
+    function Environment_Task return Task_Id is
+    begin
+       return Environment_Task_Id;
+    end Environment_Task;
+ 
+    --------------
+    -- Lock_RTS --
+    --------------
+ 
+    procedure Lock_RTS is
+    begin
+       Write_Lock (Single_RTS_Lock'Access, Global_Lock => True);
+    end Lock_RTS;
+ 
+    ----------------
+    -- Unlock_RTS --
+    ----------------
+ 
+    procedure Unlock_RTS is
+    begin
+       Unlock (Single_RTS_Lock'Access, Global_Lock => True);
+    end Unlock_RTS;
+ 
+    ------------------
+    -- Suspend_Task --
+    ------------------
+ 
+    function Suspend_Task
+      (T           : ST.Task_Id;
+       Thread_Self : Thread_Id) return Boolean
+    is
+       pragma Unreferenced (T);
+       pragma Unreferenced (Thread_Self);
+    begin
+       return False;
+    end Suspend_Task;
+ 
+    -----------------
+    -- Resume_Task --
+    -----------------
+ 
+    function Resume_Task
+      (T           : ST.Task_Id;
+       Thread_Self : Thread_Id) return Boolean
+    is
+       pragma Unreferenced (T);
+       pragma Unreferenced (Thread_Self);
+    begin
+       return False;
+    end Resume_Task;
+ 
+    ----------------
+    -- Initialize --
+    ----------------
+ 
+    procedure Initialize (Environment_Task : Task_Id) is
+       act       : aliased struct_sigaction;
+       old_act   : aliased struct_sigaction;
+       Tmp_Set   : aliased sigset_t;
+       Result    : Interfaces.C.int;
+ 
+       function State
+         (Int : System.Interrupt_Management.Interrupt_ID) return Character;
+       pragma Import (C, State, "__gnat_get_interrupt_state");
+       --  Get interrupt state. Defined in a-init.c. The input argument is
+       --  the interrupt number, and the result is one of the following:
+ 
+       Default : constant Character := 's';
+       --    'n'   this interrupt not set by any Interrupt_State pragma
+       --    'u'   Interrupt_State pragma set state to User
+       --    'r'   Interrupt_State pragma set state to Runtime
+       --    's'   Interrupt_State pragma set state to System (use "default"
+       --           system handler)
+ 
+    begin
+       Environment_Task_Id := Environment_Task;
+ 
+       --  Initialize the lock used to synchronize chain of all ATCBs
+ 
+       Initialize_Lock (Single_RTS_Lock'Access, RTS_Lock_Level);
+ 
+       Specific.Initialize (Environment_Task);
+ 
+       Enter_Task (Environment_Task);
+ 
+       --  Install the abort-signal handler
+ 
+       if State (System.Interrupt_Management.Abort_Task_Interrupt)
+                                                      /= Default
+       then
+          act.sa_flags := 0;
+          act.sa_handler := Abort_Handler'Address;
+ 
+          Result := sigemptyset (Tmp_Set'Access);
+          pragma Assert (Result = 0);
+          act.sa_mask := Tmp_Set;
+ 
+          Result :=
+            sigaction (
+              Signal (System.Interrupt_Management.Abort_Task_Interrupt),
+              act'Unchecked_Access,
+              old_act'Unchecked_Access);
+          pragma Assert (Result = 0);
+       end if;
+    end Initialize;
+ 
+    --  NOTE: Unlike other pthread implementations, we do *not* mask all
+    --  signals here since we handle signals using the process-wide primitive
+    --  signal, rather than using sigthreadmask and sigwait. The reason of
+    --  this difference is that sigwait doesn't work when some critical
+    --  signals (SIGABRT, SIGPIPE) are masked.
+ 
+ end System.Task_Primitives.Operations;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-taprop-irix-athread.adb gcc-4.0.0/gcc/ada/s-taprop-irix-athread.adb
*** gcc-3.4.3/gcc/ada/s-taprop-irix-athread.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-taprop-irix-athread.adb	Tue Jul  6 13:57:29 2004
***************
*** 0 ****
--- 1,952 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
+ --                                                                          --
+ --     S Y S T E M . T A S K _ P R I M I T I V E S . O P E R A T I O N S    --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --         Copyright (C) 1992-2004, Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is an Irix (old athread library) version of this package
+ 
+ --  This package contains all the GNULL primitives that interface directly
+ --  with the underlying OS.
+ 
+ pragma Polling (Off);
+ --  Turn off polling, we do not want ATC polling to take place during
+ --  tasking operations. It causes infinite loops and other problems.
+ 
+ with Interfaces.C;
+ --  used for int
+ --           size_t
+ 
+ with System.Tasking.Debug;
+ --  used for Known_Tasks
+ 
+ with System.Task_Info;
+ 
+ with System.Interrupt_Management;
+ --  used for Keep_Unmasked
+ --           Abort_Task_Interrupt
+ --           Interrupt_ID
+ 
+ with System.Parameters;
+ --  used for Size_Type
+ 
+ with System.Tasking;
+ --  used for Ada_Task_Control_Block
+ --           Task_Id
+ 
+ with System.Program_Info;
+ --  used for Default_Task_Stack
+ --           Default_Time_Slice
+ --           Stack_Guard_Pages
+ --           Pthread_Sched_Signal
+ --           Pthread_Arena_Size
+ 
+ with System.Soft_Links;
+ --  used for Defer/Undefer_Abort
+ 
+ --  Note that we do not use System.Tasking.Initialization directly since
+ --  this is a higher level package that we shouldn't depend on. For example
+ --  when using the restricted run time, it is replaced by
+ --  System.Tasking.Restricted.Stages.
+ 
+ with System.OS_Primitives;
+ --  used for Delay_Modes
+ 
+ with System.Storage_Elements;
+ --  used for To_Address
+ 
+ with Unchecked_Conversion;
+ with Unchecked_Deallocation;
+ 
+ package body System.Task_Primitives.Operations is
+ 
+    use System.Tasking.Debug;
+    use System.Tasking;
+    use Interfaces.C;
+    use System.OS_Interface;
+    use System.Parameters;
+    use System.OS_Primitives;
+ 
+    package SSL renames System.Soft_Links;
+ 
+    -----------------
+    -- Local Data  --
+    -----------------
+ 
+    --  The followings are logically constants, but need to be initialized
+    --  at run time.
+ 
+    Single_RTS_Lock : aliased RTS_Lock;
+    --  This is a lock to allow only one thread of control in the RTS at
+    --  a time; it is used to execute in mutual exclusion from all other tasks.
+    --  Used mainly in Single_Lock mode, but also to protect All_Tasks_List
+ 
+    Environment_Task_Id : Task_Id;
+    --  A variable to hold Task_Id for the environment task.
+ 
+    Locking_Policy : Character;
+    pragma Import (C, Locking_Policy, "__gl_locking_policy");
+ 
+    Clock_Address : constant System.Address :=
+      System.Storage_Elements.To_Address (16#200F90#);
+ 
+    RT_Clock_Id : clockid_t;
+    for RT_Clock_Id'Address use Clock_Address;
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    procedure Initialize_Athread_Library;
+ 
+    function To_Task_Id is new Unchecked_Conversion (System.Address, Task_Id);
+    function To_Address is new Unchecked_Conversion (Task_Id, System.Address);
+ 
+    -----------------
+    -- Stack_Guard --
+    -----------------
+ 
+    --  The underlying thread system sets a guard page at the
+    --  bottom of a thread stack, so nothing is needed.
+    --  ??? Check the comment above
+ 
+    procedure Stack_Guard (T : ST.Task_Id; On : Boolean) is
+       pragma Unreferenced (T);
+       pragma Unreferenced (On);
+    begin
+       null;
+    end Stack_Guard;
+ 
+    --------------------
+    -- Get_Thread_Id  --
+    --------------------
+ 
+    function Get_Thread_Id (T : ST.Task_Id) return OSI.Thread_Id is
+    begin
+       return T.Common.LL.Thread;
+    end Get_Thread_Id;
+ 
+    ----------
+    -- Self --
+    ----------
+ 
+    function Self return Task_Id is
+    begin
+       return To_Task_Id (pthread_get_current_ada_tcb);
+    end Self;
+ 
+    ---------------------
+    -- Initialize_Lock --
+    ---------------------
+ 
+    --  Note: mutexes and cond_variables needed per-task basis are
+    --        initialized in Initialize_TCB and the Storage_Error is
+    --        handled. Other mutexes (such as RTS_Lock, Memory_Lock...)
+    --        used in RTS is initialized before any status change of RTS.
+    --        Therefore rasing Storage_Error in the following routines
+    --        should be able to be handled safely.
+ 
+    procedure Initialize_Lock
+      (Prio : System.Any_Priority;
+       L    : access Lock)
+    is
+       Attributes : aliased pthread_mutexattr_t;
+       Result     : Interfaces.C.int;
+ 
+    begin
+       Result := pthread_mutexattr_init (Attributes'Access);
+ 
+       if Result = FUNC_ERR then
+          raise Storage_Error;
+       end if;
+ 
+       if Locking_Policy = 'C' then
+ 
+          Result := pthread_mutexattr_setqueueorder
+            (Attributes'Access, MUTEX_PRIORITY_CEILING);
+ 
+          pragma Assert (Result /= FUNC_ERR);
+ 
+          Result := pthread_mutexattr_setceilingprio
+             (Attributes'Access, Interfaces.C.int (Prio));
+ 
+          pragma Assert (Result /= FUNC_ERR);
+       end if;
+ 
+       Result := pthread_mutex_init (L, Attributes'Access);
+ 
+       if Result = FUNC_ERR then
+          Result := pthread_mutexattr_destroy (Attributes'Access);
+          raise Storage_Error;
+       end if;
+ 
+       Result := pthread_mutexattr_destroy (Attributes'Access);
+    end Initialize_Lock;
+ 
+    procedure Initialize_Lock (L : access RTS_Lock; Level : Lock_Level) is
+       pragma Unreferenced (Level);
+ 
+       Attributes : aliased pthread_mutexattr_t;
+       Result : Interfaces.C.int;
+ 
+    begin
+       Result := pthread_mutexattr_init (Attributes'Access);
+ 
+       if Result = FUNC_ERR then
+          raise Storage_Error;
+       end if;
+ 
+       if Locking_Policy = 'C' then
+          Result := pthread_mutexattr_setqueueorder
+            (Attributes'Access, MUTEX_PRIORITY_CEILING);
+          pragma Assert (Result /= FUNC_ERR);
+ 
+          Result := pthread_mutexattr_setceilingprio
+             (Attributes'Access, Interfaces.C.int (System.Any_Priority'Last));
+          pragma Assert (Result /= FUNC_ERR);
+       end if;
+ 
+       Result := pthread_mutex_init (L, Attributes'Access);
+ 
+       if Result = FUNC_ERR then
+          Result := pthread_mutexattr_destroy (Attributes'Access);
+          raise Storage_Error;
+       end if;
+ 
+       Result := pthread_mutexattr_destroy (Attributes'Access);
+    end Initialize_Lock;
+ 
+    -------------------
+    -- Finalize_Lock --
+    -------------------
+ 
+    procedure Finalize_Lock (L : access Lock) is
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_mutex_destroy (L);
+       pragma Assert (Result = 0);
+    end Finalize_Lock;
+ 
+    procedure Finalize_Lock (L : access RTS_Lock) is
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_mutex_destroy (L);
+       pragma Assert (Result = 0);
+    end Finalize_Lock;
+ 
+    ----------------
+    -- Write_Lock --
+    ----------------
+ 
+    procedure Write_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_mutex_lock (L);
+       Ceiling_Violation := Result = FUNC_ERR and then errno = EINVAL;
+       pragma Assert (Result /= FUNC_ERR);
+    end Write_Lock;
+ 
+    procedure Write_Lock
+      (L : access RTS_Lock; Global_Lock : Boolean := False)
+    is
+       Result : Interfaces.C.int;
+    begin
+       if not Single_Lock or else Global_Lock then
+          Result := pthread_mutex_lock (L);
+          pragma Assert (Result = 0);
+       end if;
+    end Write_Lock;
+ 
+    procedure Write_Lock (T : Task_Id) is
+       Result : Interfaces.C.int;
+    begin
+       if not Single_Lock then
+          Result := pthread_mutex_lock (T.Common.LL.L'Access);
+          pragma Assert (Result = 0);
+       end if;
+    end Write_Lock;
+ 
+    ---------------
+    -- Read_Lock --
+    ---------------
+ 
+    procedure Read_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
+    begin
+       Write_Lock (L, Ceiling_Violation);
+    end Read_Lock;
+ 
+    ------------
+    -- Unlock --
+    ------------
+ 
+    procedure Unlock (L : access Lock) is
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_mutex_unlock (L);
+       pragma Assert (Result = 0);
+    end Unlock;
+ 
+    procedure Unlock (L : access RTS_Lock; Global_Lock : Boolean := False) is
+       Result : Interfaces.C.int;
+    begin
+       if not Single_Lock or else Global_Lock then
+          Result := pthread_mutex_unlock (L);
+          pragma Assert (Result = 0);
+       end if;
+    end Unlock;
+ 
+    procedure Unlock (T : Task_Id) is
+       Result : Interfaces.C.int;
+    begin
+       if not Single_Lock then
+          Result := pthread_mutex_unlock (T.Common.LL.L'Access);
+          pragma Assert (Result = 0);
+       end if;
+    end Unlock;
+ 
+    -----------
+    -- Sleep --
+    -----------
+ 
+    procedure Sleep
+      (Self_ID  : ST.Task_Id;
+       Reason   : System.Tasking.Task_States)
+    is
+       pragma Unreferenced (Reason);
+ 
+       Result : Interfaces.C.int;
+ 
+    begin
+       if Single_Lock then
+          Result := pthread_cond_wait
+            (Self_ID.Common.LL.CV'Access, Single_RTS_Lock'Access);
+       else
+          Result := pthread_cond_wait
+            (Self_ID.Common.LL.CV'Access, Self_ID.Common.LL.L'Access);
+       end if;
+ 
+       --  EINTR is not considered a failure.
+ 
+       pragma Assert (Result = 0 or else Result = EINTR);
+    end Sleep;
+ 
+    -----------------
+    -- Timed_Sleep --
+    -----------------
+ 
+    procedure Timed_Sleep
+      (Self_ID  : Task_Id;
+       Time     : Duration;
+       Mode     : ST.Delay_Modes;
+       Reason   : System.Tasking.Task_States;
+       Timedout : out Boolean;
+       Yielded  : out Boolean)
+    is
+       pragma Unreferenced (Reason);
+ 
+       Check_Time : constant Duration := Monotonic_Clock;
+       Abs_Time   : Duration;
+       Request    : aliased struct_timeval;
+       Result     : Interfaces.C.int;
+ 
+    begin
+       Timedout := True;
+       Yielded := False;
+ 
+       if Mode = Relative then
+          Abs_Time := Duration'Min (Time, Max_Sensible_Delay) + Check_Time;
+       else
+          Abs_Time := Duration'Min (Check_Time + Max_Sensible_Delay, Time);
+       end if;
+ 
+       if Abs_Time > Check_Time then
+          Request := To_Timeval (Abs_Time);
+ 
+          loop
+             exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level
+               or else Self_ID.Pending_Priority_Change;
+ 
+             if Single_Lock then
+                Result := pthread_cond_timedwait
+                  (Self_ID.Common.LL.CV'Access, Single_RTS_Lock'Access,
+                   Request'Access);
+ 
+             else
+                Result := pthread_cond_timedwait
+                  (Self_ID.Common.LL.CV'Access, Self_ID.Common.LL.L'Access,
+                   Request'Access);
+             end if;
+ 
+             exit when Abs_Time <= Monotonic_Clock;
+ 
+             if Result = 0 or Result = EINTR then
+                --  somebody may have called Wakeup for us
+                Timedout := False;
+                exit;
+             end if;
+ 
+             pragma Assert (Result = ETIMEDOUT
+               or else (Result = -1 and then errno = EAGAIN));
+          end loop;
+       end if;
+    end Timed_Sleep;
+ 
+    -----------------
+    -- Timed_Delay --
+    -----------------
+ 
+    procedure Timed_Delay
+      (Self_ID  : Task_Id;
+       Time     : Duration;
+       Mode     : ST.Delay_Modes)
+    is
+       Check_Time : constant Duration := Monotonic_Clock;
+       Abs_Time   : Duration;
+       Request    : aliased struct_timeval;
+       Result     : Interfaces.C.int;
+ 
+    begin
+       --  Only the little window between deferring abort and
+       --  locking Self_ID is the reason we need to
+       --  check for pending abort and priority change below!
+ 
+       SSL.Abort_Defer.all;
+ 
+       if Single_Lock then
+          Lock_RTS;
+       end if;
+ 
+       Write_Lock (Self_ID);
+ 
+       if Mode = Relative then
+          Abs_Time := Time + Check_Time;
+       else
+          Abs_Time := Duration'Min (Check_Time + Max_Sensible_Delay, Time);
+       end if;
+ 
+       if Abs_Time > Check_Time then
+          Request := To_Timeval (Abs_Time);
+          Self_ID.Common.State := Delay_Sleep;
+ 
+          loop
+             if Self_ID.Pending_Priority_Change then
+                Self_ID.Pending_Priority_Change := False;
+                Self_ID.Common.Base_Priority := Self_ID.New_Base_Priority;
+                Set_Priority (Self_ID, Self_ID.Common.Base_Priority);
+             end if;
+ 
+             exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level;
+ 
+             if Single_Lock then
+                Result := pthread_cond_timedwait (Self_ID.Common.LL.CV'Access,
+                  Single_RTS_Lock'Access, Request'Access);
+             else
+                Result := pthread_cond_timedwait (Self_ID.Common.LL.CV'Access,
+                  Self_ID.Common.LL.L'Access, Request'Access);
+             end if;
+ 
+             exit when Abs_Time <= Monotonic_Clock;
+ 
+             pragma Assert (Result = 0 or else
+               Result = ETIMEDOUT or else
+               (Result = -1 and then errno = EAGAIN) or else
+               Result = EINTR);
+          end loop;
+ 
+          Self_ID.Common.State := Runnable;
+       end if;
+ 
+       Unlock (Self_ID);
+ 
+       if Single_Lock then
+          Unlock_RTS;
+       end if;
+ 
+       pthread_yield;
+       SSL.Abort_Undefer.all;
+    end Timed_Delay;
+ 
+    ---------------------
+    -- Monotonic_Clock --
+    ---------------------
+ 
+    function Monotonic_Clock return Duration is
+       type timeval is record
+          tv_sec  : Integer;
+          tv_usec : Integer;
+       end record;
+       pragma Convention (C, timeval);
+ 
+       tv : aliased timeval;
+ 
+       procedure gettimeofday (tp : access timeval);
+       pragma Import (C, gettimeofday, "gettimeofday", "gettimeofday");
+ 
+    begin
+       gettimeofday (tv'Access);
+       return Duration (tv.tv_sec) + Duration (tv.tv_usec) / 1_000_000.0;
+    end Monotonic_Clock;
+ 
+    -------------------
+    -- RT_Resolution --
+    -------------------
+ 
+    function RT_Resolution return Duration is
+    begin
+       return 10#1.0#E-6;
+    end RT_Resolution;
+ 
+    ------------
+    -- Wakeup --
+    ------------
+ 
+    procedure Wakeup
+      (T : ST.Task_Id;
+       Reason : System.Tasking.Task_States)
+    is
+       pragma Unreferenced (Reason);
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_cond_signal (T.Common.LL.CV'Access);
+       pragma Assert (Result = 0);
+    end Wakeup;
+ 
+    -----------
+    -- Yield --
+    -----------
+ 
+    procedure Yield (Do_Yield : Boolean := True) is
+    begin
+       if Do_Yield then
+          pthread_yield;
+       end if;
+    end Yield;
+ 
+    ------------------
+    -- Set_Priority --
+    ------------------
+ 
+    procedure Set_Priority
+      (T                   : Task_Id;
+       Prio                : System.Any_Priority;
+       Loss_Of_Inheritance : Boolean := False)
+    is
+       pragma Unreferenced (Loss_Of_Inheritance);
+ 
+       Result : Interfaces.C.int;
+ 
+    begin
+       T.Common.Current_Priority := Prio;
+       Result := pthread_setprio (T.Common.LL.Thread, Interfaces.C.int (Prio));
+       pragma Assert (Result /= FUNC_ERR);
+    end Set_Priority;
+ 
+    ------------------
+    -- Get_Priority --
+    ------------------
+ 
+    function Get_Priority (T : Task_Id) return System.Any_Priority is
+    begin
+       return T.Common.Current_Priority;
+    end Get_Priority;
+ 
+    ----------------
+    -- Enter_Task --
+    ----------------
+ 
+    procedure Enter_Task (Self_ID : Task_Id) is
+       Result : Interfaces.C.int;
+ 
+    begin
+       Self_ID.Common.LL.Thread := pthread_self;
+       Self_ID.Common.LL.LWP := sproc_self;
+ 
+       Result :=
+         pthread_set_ada_tcb (Self_ID.Common.LL.Thread, To_Address (Self_ID));
+ 
+       pragma Assert (Result = 0);
+ 
+       Lock_RTS;
+ 
+       for J in Known_Tasks'Range loop
+          if Known_Tasks (J) = null then
+             Known_Tasks (J) := Self_ID;
+             Self_ID.Known_Tasks_Index := J;
+             exit;
+          end if;
+       end loop;
+ 
+       Unlock_RTS;
+    end Enter_Task;
+ 
+    --------------
+    -- New_ATCB --
+    --------------
+ 
+    function New_ATCB (Entry_Num : Task_Entry_Index) return Task_Id is
+    begin
+       return new Ada_Task_Control_Block (Entry_Num);
+    end New_ATCB;
+ 
+    -------------------
+    -- Is_Valid_Task --
+    -------------------
+ 
+    function Is_Valid_Task return Boolean is
+    begin
+       return False;
+    end Is_Valid_Task;
+ 
+    -----------------------------
+    -- Register_Foreign_Thread --
+    -----------------------------
+ 
+    function Register_Foreign_Thread return Task_Id is
+    begin
+       return null;
+    end Register_Foreign_Thread;
+ 
+    --------------------
+    -- Initialize_TCB --
+    --------------------
+ 
+    procedure Initialize_TCB (Self_ID : Task_Id; Succeeded : out Boolean) is
+       Result    : Interfaces.C.int;
+       Cond_Attr : aliased pthread_condattr_t;
+ 
+    begin
+       if not Single_Lock then
+          Initialize_Lock (Self_ID.Common.LL.L'Access, ATCB_Level);
+       end if;
+ 
+       Result := pthread_condattr_init (Cond_Attr'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = 0 then
+          Result := pthread_cond_init (Self_ID.Common.LL.CV'Access,
+            Cond_Attr'Access);
+          pragma Assert (Result = 0 or else Result = ENOMEM);
+       end if;
+ 
+       if Result = 0 then
+          Succeeded := True;
+       else
+          if not Single_Lock then
+             Result := pthread_mutex_destroy (Self_ID.Common.LL.L'Access);
+             pragma Assert (Result = 0);
+          end if;
+ 
+          Succeeded := False;
+       end if;
+ 
+       Result := pthread_condattr_destroy (Cond_Attr'Access);
+       pragma Assert (Result = 0);
+    end Initialize_TCB;
+ 
+    -----------------
+    -- Create_Task --
+    -----------------
+ 
+    procedure Create_Task
+      (T          : Task_Id;
+       Wrapper    : System.Address;
+       Stack_Size : System.Parameters.Size_Type;
+       Priority   : System.Any_Priority;
+       Succeeded  : out Boolean)
+    is
+       Attributes          : aliased pthread_attr_t;
+       Adjusted_Stack_Size : Interfaces.C.size_t;
+       Result              : Interfaces.C.int;
+ 
+       function Thread_Body_Access is new
+         Unchecked_Conversion (System.Address, start_addr);
+ 
+       function To_Resource_T is new Unchecked_Conversion
+         (System.Task_Info.Resource_Vector_T, System.OS_Interface.resource_t);
+ 
+       use System.Task_Info;
+ 
+    begin
+       if Stack_Size = Unspecified_Size then
+          Adjusted_Stack_Size :=
+            Interfaces.C.size_t (System.Program_Info.Default_Task_Stack);
+ 
+       elsif Stack_Size < Minimum_Stack_Size then
+          Adjusted_Stack_Size := Interfaces.C.size_t (Minimum_Stack_Size);
+ 
+       else
+          Adjusted_Stack_Size := Interfaces.C.size_t (Stack_Size);
+       end if;
+ 
+       Result := pthread_attr_init (Attributes'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result /= 0 then
+          Succeeded := False;
+          return;
+       end if;
+ 
+       Result := pthread_attr_setdetachstate (Attributes'Access, 1);
+       pragma Assert (Result = 0);
+ 
+       Result := pthread_attr_setstacksize
+         (Attributes'Access, Adjusted_Stack_Size);
+       pragma Assert (Result = 0);
+ 
+       if T.Common.Task_Info /= null then
+          Result := pthread_attr_setresources
+            (Attributes'Access,
+             To_Resource_T (T.Common.Task_Info.Thread_Resources));
+          pragma Assert (Result /= FUNC_ERR);
+ 
+          if T.Common.Task_Info.Thread_Timeslice /= 0.0 then
+             declare
+                use System.OS_Interface;
+ 
+                Tv : aliased struct_timeval := To_Timeval
+                  (T.Common.Task_Info.Thread_Timeslice);
+             begin
+                Result := pthread_attr_set_tslice
+                  (Attributes'Access, Tv'Access);
+             end;
+          end if;
+ 
+          if T.Common.Task_Info.Bound_To_Sproc then
+             Result := pthread_attr_set_boundtosproc
+               (Attributes'Access, PTHREAD_BOUND);
+             Result := pthread_attr_set_bsproc
+               (Attributes'Access, T.Common.Task_Info.Sproc);
+          end if;
+ 
+       end if;
+ 
+       --  Since the initial signal mask of a thread is inherited from the
+       --  creator, and the Environment task has all its signals masked, we
+       --  do not need to manipulate caller's signal mask at this point.
+       --  All tasks in RTS will have All_Tasks_Mask initially.
+ 
+       Result := pthread_create
+         (T.Common.LL.Thread'Access,
+          Attributes'Access,
+          Thread_Body_Access (Wrapper),
+          To_Address (T));
+       pragma Assert (Result = 0 or else Result = EAGAIN);
+ 
+       Succeeded := Result = 0;
+ 
+       Set_Priority (T, Priority);
+ 
+       Result := pthread_attr_destroy (Attributes'Access);
+       pragma Assert (Result /= FUNC_ERR);
+    end Create_Task;
+ 
+    ------------------
+    -- Finalize_TCB --
+    ------------------
+ 
+    procedure Finalize_TCB (T : Task_Id) is
+       procedure Free is new
+         Unchecked_Deallocation (Ada_Task_Control_Block, Task_Id);
+ 
+       Result : Interfaces.C.int;
+       Tmp    : Task_Id := T;
+ 
+    begin
+       if not Single_Lock then
+          Result := pthread_mutex_destroy (T.Common.LL.L'Access);
+          pragma Assert (Result = 0);
+       end if;
+ 
+       Result := pthread_cond_destroy (T.Common.LL.CV'Access);
+       pragma Assert (Result = 0);
+ 
+       if T.Known_Tasks_Index /= -1 then
+          Known_Tasks (T.Known_Tasks_Index) := null;
+       end if;
+ 
+       Free (Tmp);
+    end Finalize_TCB;
+ 
+    ---------------
+    -- Exit_Task --
+    ---------------
+ 
+    procedure Exit_Task is
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_set_ada_tcb (pthread_self, System.Null_Address);
+       pragma Assert (Result = 0);
+    end Exit_Task;
+ 
+    ----------------
+    -- Abort_Task --
+    ----------------
+ 
+    procedure Abort_Task (T : Task_Id) is
+       Result : Interfaces.C.int;
+    begin
+       Result :=
+         pthread_kill (T.Common.LL.Thread,
+                       Interfaces.C.int
+                         (System.Interrupt_Management.Abort_Task_Interrupt));
+       pragma Assert (Result = 0);
+    end Abort_Task;
+ 
+    ----------------
+    -- Check_Exit --
+    ----------------
+ 
+    --  Dummy version
+ 
+    function Check_Exit (Self_ID : ST.Task_Id) return Boolean is
+       pragma Unreferenced (Self_ID);
+    begin
+       return True;
+    end Check_Exit;
+ 
+    --------------------
+    -- Check_No_Locks --
+    --------------------
+ 
+    function Check_No_Locks (Self_ID : ST.Task_Id) return Boolean is
+       pragma Unreferenced (Self_ID);
+    begin
+       return True;
+    end Check_No_Locks;
+ 
+    ----------------------
+    -- Environment_Task --
+    ----------------------
+ 
+    function Environment_Task return Task_Id is
+    begin
+       return Environment_Task_Id;
+    end Environment_Task;
+ 
+    --------------
+    -- Lock_RTS --
+    --------------
+ 
+    procedure Lock_RTS is
+    begin
+       Write_Lock (Single_RTS_Lock'Access, Global_Lock => True);
+    end Lock_RTS;
+ 
+    ----------------
+    -- Unlock_RTS --
+    ----------------
+ 
+    procedure Unlock_RTS is
+    begin
+       Unlock (Single_RTS_Lock'Access, Global_Lock => True);
+    end Unlock_RTS;
+ 
+    ------------------
+    -- Suspend_Task --
+    ------------------
+ 
+    function Suspend_Task
+      (T           : ST.Task_Id;
+       Thread_Self : Thread_Id) return Boolean
+    is
+    begin
+       if T.Common.LL.Thread /= Thread_Self then
+          return pthread_suspend (T.Common.LL.Thread) = 0;
+       else
+          return True;
+       end if;
+    end Suspend_Task;
+ 
+    -----------------
+    -- Resume_Task --
+    -----------------
+ 
+    function Resume_Task
+      (T           : ST.Task_Id;
+       Thread_Self : Thread_Id) return Boolean
+    is
+    begin
+       if T.Common.LL.Thread /= Thread_Self then
+          return pthread_resume (T.Common.LL.Thread) = 0;
+       else
+          return True;
+       end if;
+    end Resume_Task;
+ 
+    ----------------
+    -- Initialize --
+    ----------------
+ 
+    procedure Initialize (Environment_Task : Task_Id) is
+    begin
+       Environment_Task_Id := Environment_Task;
+ 
+       Initialize_Lock (Single_RTS_Lock'Access, RTS_Lock_Level);
+       --  Initialize the lock used to synchronize chain of all ATCBs.
+ 
+       Enter_Task (Environment_Task);
+ 
+       Set_Priority (Environment_Task,
+         Environment_Task.Common.Current_Priority);
+    end Initialize;
+ 
+    --------------------------------
+    -- Initialize_Athread_Library --
+    --------------------------------
+ 
+    procedure Initialize_Athread_Library is
+       Result : Interfaces.C.int;
+       Init   : aliased pthread_init_struct;
+ 
+       package PINF renames System.Program_Info;
+       package C    renames Interfaces.C;
+ 
+    begin
+       Init.conf_initsize       := C.int (PINF.Pthread_Arena_Size);
+       Init.max_sproc_count     := C.int (PINF.Max_Sproc_Count);
+       Init.sproc_stack_size    := C.size_t (PINF.Sproc_Stack_Size);
+       Init.os_default_priority := C.int (PINF.Os_Default_Priority);
+       Init.os_sched_signal     := C.int (PINF.Pthread_Sched_Signal);
+       Init.guard_pages         := C.int (PINF.Stack_Guard_Pages);
+       Init.init_sproc_count    := C.int (PINF.Initial_Sproc_Count);
+ 
+       Result := pthread_exec_begin (Init'Access);
+       pragma Assert (Result /= FUNC_ERR);
+ 
+       if Result = FUNC_ERR then
+          raise Storage_Error;               --  Insufficient resources
+       end if;
+    end Initialize_Athread_Library;
+ 
+ --  Package initialization
+ 
+ begin
+    Initialize_Athread_Library;
+ end System.Task_Primitives.Operations;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-taprop-irix.adb gcc-4.0.0/gcc/ada/s-taprop-irix.adb
*** gcc-3.4.3/gcc/ada/s-taprop-irix.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-taprop-irix.adb	Tue Jul  6 13:57:29 2004
***************
*** 0 ****
--- 1,1133 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --     S Y S T E M . T A S K _ P R I M I T I V E S . O P E R A T I O N S    --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --         Copyright (C) 1992-2004, Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a IRIX (pthread library) version of this package
+ 
+ --  This package contains all the GNULL primitives that interface directly
+ --  with the underlying OS.
+ 
+ pragma Polling (Off);
+ --  Turn off polling, we do not want ATC polling to take place during
+ --  tasking operations. It causes infinite loops and other problems.
+ 
+ with Interfaces.C;
+ --  used for int
+ --           size_t
+ 
+ with System.Task_Info;
+ 
+ with System.Tasking.Debug;
+ --  used for Known_Tasks
+ 
+ with System.IO;
+ --  used for Put_Line
+ 
+ with System.Interrupt_Management;
+ --  used for Keep_Unmasked
+ --           Abort_Task_Interrupt
+ --           Interrupt_ID
+ 
+ with System.Interrupt_Management.Operations;
+ --  used for Set_Interrupt_Mask
+ --           All_Tasks_Mask
+ pragma Elaborate_All (System.Interrupt_Management.Operations);
+ 
+ with System.Parameters;
+ --  used for Size_Type
+ 
+ with System.Tasking;
+ --  used for Ada_Task_Control_Block
+ --           Task_Id
+ 
+ with System.Soft_Links;
+ --  used for Defer/Undefer_Abort
+ 
+ --  Note that we do not use System.Tasking.Initialization directly since
+ --  this is a higher level package that we shouldn't depend on. For example
+ --  when using the restricted run time, it is replaced by
+ --  System.Tasking.Restricted.Stages.
+ 
+ with System.Program_Info;
+ --  used for Default_Task_Stack
+ --           Default_Time_Slice
+ --           Stack_Guard_Pages
+ --           Pthread_Sched_Signal
+ --           Pthread_Arena_Size
+ 
+ with System.OS_Interface;
+ --  used for various type, constant, and operations
+ 
+ with System.OS_Primitives;
+ --  used for Delay_Modes
+ 
+ with Unchecked_Conversion;
+ with Unchecked_Deallocation;
+ 
+ package body System.Task_Primitives.Operations is
+ 
+    use System.Tasking;
+    use System.Tasking.Debug;
+    use Interfaces.C;
+    use System.OS_Interface;
+    use System.OS_Primitives;
+    use System.Parameters;
+ 
+    package SSL renames System.Soft_Links;
+ 
+    ----------------
+    -- Local Data --
+    ----------------
+ 
+    --  The followings are logically constants, but need to be initialized
+    --  at run time.
+ 
+    Single_RTS_Lock : aliased RTS_Lock;
+    --  This is a lock to allow only one thread of control in the RTS at
+    --  a time; it is used to execute in mutual exclusion from all other tasks.
+    --  Used mainly in Single_Lock mode, but also to protect All_Tasks_List
+ 
+    ATCB_Key : aliased pthread_key_t;
+    --  Key used to find the Ada Task_Id associated with a thread
+ 
+    Environment_Task_Id : Task_Id;
+    --  A variable to hold Task_Id for the environment task
+ 
+    Locking_Policy : Character;
+    pragma Import (C, Locking_Policy, "__gl_locking_policy");
+ 
+    Real_Time_Clock_Id : constant clockid_t := CLOCK_REALTIME;
+ 
+    Unblocked_Signal_Mask : aliased sigset_t;
+ 
+    Foreign_Task_Elaborated : aliased Boolean := True;
+    --  Used to identified fake tasks (i.e., non-Ada Threads)
+ 
+    --------------------
+    -- Local Packages --
+    --------------------
+ 
+    package Specific is
+ 
+       procedure Initialize (Environment_Task : Task_Id);
+       pragma Inline (Initialize);
+       --  Initialize various data needed by this package
+ 
+       function Is_Valid_Task return Boolean;
+       pragma Inline (Is_Valid_Task);
+       --  Does executing thread have a TCB?
+ 
+       procedure Set (Self_Id : Task_Id);
+       pragma Inline (Set);
+       --  Set the self id for the current task
+ 
+       function Self return Task_Id;
+       pragma Inline (Self);
+       --  Return a pointer to the Ada Task Control Block of the calling task
+ 
+    end Specific;
+ 
+    package body Specific is separate;
+    --  The body of this package is target specific
+ 
+    ---------------------------------
+    -- Support for foreign threads --
+    ---------------------------------
+ 
+    function Register_Foreign_Thread (Thread : Thread_Id) return Task_Id;
+    --  Allocate and Initialize a new ATCB for the current Thread
+ 
+    function Register_Foreign_Thread
+      (Thread : Thread_Id) return Task_Id is separate;
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    function To_Address is new Unchecked_Conversion (Task_Id, System.Address);
+ 
+    procedure Abort_Handler (Sig : Signal);
+    --  Signal handler used to implement asynchronous abort
+ 
+    -------------------
+    -- Abort_Handler --
+    -------------------
+ 
+    procedure Abort_Handler (Sig : Signal) is
+       pragma Unreferenced (Sig);
+ 
+       T       : constant Task_Id := Self;
+       Result  : Interfaces.C.int;
+       Old_Set : aliased sigset_t;
+ 
+    begin
+       --  It is not safe to raise an exception when using ZCX and the GCC
+       --  exception handling mechanism.
+ 
+       if ZCX_By_Default and then GCC_ZCX_Support then
+          return;
+       end if;
+ 
+       if T.Deferral_Level = 0
+         and then T.Pending_ATC_Level < T.ATC_Nesting_Level
+       then
+          --  Make sure signals used for RTS internal purpose are unmasked
+ 
+          Result := pthread_sigmask
+            (SIG_UNBLOCK,
+             Unblocked_Signal_Mask'Unchecked_Access,
+             Old_Set'Unchecked_Access);
+          pragma Assert (Result = 0);
+ 
+          raise Standard'Abort_Signal;
+       end if;
+    end Abort_Handler;
+ 
+    -----------------
+    -- Stack_Guard --
+    -----------------
+ 
+    --  The underlying thread system sets a guard page at the
+    --  bottom of a thread stack, so nothing is needed.
+ 
+    procedure Stack_Guard (T : ST.Task_Id; On : Boolean) is
+       pragma Unreferenced (On);
+       pragma Unreferenced (T);
+    begin
+       null;
+    end Stack_Guard;
+ 
+    -------------------
+    -- Get_Thread_Id --
+    -------------------
+ 
+    function Get_Thread_Id (T : ST.Task_Id) return OSI.Thread_Id is
+    begin
+       return T.Common.LL.Thread;
+    end Get_Thread_Id;
+ 
+    ----------
+    -- Self --
+    ----------
+ 
+    function Self return Task_Id renames Specific.Self;
+ 
+    ---------------------
+    -- Initialize_Lock --
+    ---------------------
+ 
+    --  Note: mutexes and cond_variables needed per-task basis are
+    --        initialized in Initialize_TCB and the Storage_Error is
+    --        handled. Other mutexes (such as RTS_Lock, Memory_Lock...)
+    --        used in RTS is initialized before any status change of RTS.
+    --        Therefore rasing Storage_Error in the following routines
+    --        should be able to be handled safely.
+ 
+    procedure Initialize_Lock
+      (Prio : System.Any_Priority;
+       L    : access Lock)
+    is
+       Attributes : aliased pthread_mutexattr_t;
+       Result     : Interfaces.C.int;
+ 
+    begin
+       Result := pthread_mutexattr_init (Attributes'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = ENOMEM then
+          raise Storage_Error;
+       end if;
+ 
+       if Locking_Policy = 'C' then
+          Result := pthread_mutexattr_setprotocol
+            (Attributes'Access, PTHREAD_PRIO_PROTECT);
+          pragma Assert (Result = 0);
+ 
+          Result := pthread_mutexattr_setprioceiling
+             (Attributes'Access, Interfaces.C.int (Prio));
+          pragma Assert (Result = 0);
+       end if;
+ 
+       Result := pthread_mutex_init (L, Attributes'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = ENOMEM then
+          Result := pthread_mutexattr_destroy (Attributes'Access);
+          raise Storage_Error;
+       end if;
+ 
+       Result := pthread_mutexattr_destroy (Attributes'Access);
+       pragma Assert (Result = 0);
+    end Initialize_Lock;
+ 
+    procedure Initialize_Lock (L : access RTS_Lock; Level : Lock_Level) is
+       pragma Unreferenced (Level);
+ 
+       Attributes : aliased pthread_mutexattr_t;
+       Result : Interfaces.C.int;
+ 
+    begin
+       Result := pthread_mutexattr_init (Attributes'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = ENOMEM then
+          raise Storage_Error;
+       end if;
+ 
+       if Locking_Policy = 'C' then
+          Result := pthread_mutexattr_setprotocol
+            (Attributes'Access, PTHREAD_PRIO_PROTECT);
+          pragma Assert (Result = 0);
+ 
+          Result := pthread_mutexattr_setprioceiling
+             (Attributes'Access, Interfaces.C.int (System.Any_Priority'Last));
+          pragma Assert (Result = 0);
+       end if;
+ 
+       Result := pthread_mutex_init (L, Attributes'Access);
+ 
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = ENOMEM then
+          Result := pthread_mutexattr_destroy (Attributes'Access);
+          raise Storage_Error;
+       end if;
+ 
+       Result := pthread_mutexattr_destroy (Attributes'Access);
+    end Initialize_Lock;
+ 
+    -------------------
+    -- Finalize_Lock --
+    -------------------
+ 
+    procedure Finalize_Lock (L : access Lock) is
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_mutex_destroy (L);
+       pragma Assert (Result = 0);
+    end Finalize_Lock;
+ 
+    procedure Finalize_Lock (L : access RTS_Lock) is
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_mutex_destroy (L);
+       pragma Assert (Result = 0);
+    end Finalize_Lock;
+ 
+    ----------------
+    -- Write_Lock --
+    ----------------
+ 
+    procedure Write_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_mutex_lock (L);
+       Ceiling_Violation := Result = EINVAL;
+ 
+       --  Assumes the cause of EINVAL is a priority ceiling violation
+ 
+       pragma Assert (Result = 0 or else Result = EINVAL);
+    end Write_Lock;
+ 
+    procedure Write_Lock
+      (L           : access RTS_Lock;
+       Global_Lock : Boolean := False)
+    is
+       Result : Interfaces.C.int;
+    begin
+       if not Single_Lock or else Global_Lock then
+          Result := pthread_mutex_lock (L);
+          pragma Assert (Result = 0);
+       end if;
+    end Write_Lock;
+ 
+    procedure Write_Lock (T : Task_Id) is
+       Result : Interfaces.C.int;
+    begin
+       if not Single_Lock then
+          Result := pthread_mutex_lock (T.Common.LL.L'Access);
+          pragma Assert (Result = 0);
+       end if;
+    end Write_Lock;
+ 
+    ---------------
+    -- Read_Lock --
+    ---------------
+ 
+    procedure Read_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
+    begin
+       Write_Lock (L, Ceiling_Violation);
+    end Read_Lock;
+ 
+    ------------
+    -- Unlock --
+    ------------
+ 
+    procedure Unlock (L : access Lock) is
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_mutex_unlock (L);
+       pragma Assert (Result = 0);
+    end Unlock;
+ 
+    procedure Unlock (L : access RTS_Lock; Global_Lock : Boolean := False) is
+       Result : Interfaces.C.int;
+ 
+    begin
+       if not Single_Lock or else Global_Lock then
+          Result := pthread_mutex_unlock (L);
+          pragma Assert (Result = 0);
+       end if;
+    end Unlock;
+ 
+    procedure Unlock (T : Task_Id) is
+       Result : Interfaces.C.int;
+ 
+    begin
+       if not Single_Lock then
+          Result := pthread_mutex_unlock (T.Common.LL.L'Access);
+          pragma Assert (Result = 0);
+       end if;
+    end Unlock;
+ 
+    -----------
+    -- Sleep --
+    -----------
+ 
+    procedure Sleep
+      (Self_ID : ST.Task_Id;
+       Reason  : System.Tasking.Task_States)
+    is
+       pragma Unreferenced (Reason);
+ 
+       Result : Interfaces.C.int;
+ 
+    begin
+       if Single_Lock then
+          Result := pthread_cond_wait
+            (Self_ID.Common.LL.CV'Access, Single_RTS_Lock'Access);
+       else
+          Result := pthread_cond_wait
+            (Self_ID.Common.LL.CV'Access, Self_ID.Common.LL.L'Access);
+       end if;
+ 
+       --  EINTR is not considered a failure
+ 
+       pragma Assert (Result = 0 or else Result = EINTR);
+    end Sleep;
+ 
+    -----------------
+    -- Timed_Sleep --
+    -----------------
+ 
+    procedure Timed_Sleep
+      (Self_ID  : Task_Id;
+       Time     : Duration;
+       Mode     : ST.Delay_Modes;
+       Reason   : Task_States;
+       Timedout : out Boolean;
+       Yielded  : out Boolean)
+    is
+       pragma Unreferenced (Reason);
+ 
+       Check_Time : constant Duration := Monotonic_Clock;
+       Abs_Time   : Duration;
+       Request    : aliased timespec;
+       Result     : Interfaces.C.int;
+ 
+    begin
+       Timedout := True;
+       Yielded  := False;
+ 
+       if Mode = Relative then
+          Abs_Time := Duration'Min (Time, Max_Sensible_Delay) + Check_Time;
+       else
+          Abs_Time := Duration'Min (Check_Time + Max_Sensible_Delay, Time);
+       end if;
+ 
+       if Abs_Time > Check_Time then
+          Request := To_Timespec (Abs_Time);
+ 
+          loop
+             exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level
+               or else Self_ID.Pending_Priority_Change;
+ 
+             if Single_Lock then
+                Result := pthread_cond_timedwait
+                  (Self_ID.Common.LL.CV'Access, Single_RTS_Lock'Access,
+                   Request'Access);
+ 
+             else
+                Result := pthread_cond_timedwait
+                  (Self_ID.Common.LL.CV'Access, Self_ID.Common.LL.L'Access,
+                   Request'Access);
+             end if;
+ 
+             exit when Abs_Time <= Monotonic_Clock;
+ 
+             if Result = 0 or else errno = EINTR then
+                Timedout := False;
+                exit;
+             end if;
+          end loop;
+       end if;
+    end Timed_Sleep;
+ 
+    -----------------
+    -- Timed_Delay --
+    -----------------
+ 
+    --  This is for use in implementing delay statements, so we assume
+    --  the caller is abort-deferred but is holding no locks.
+ 
+    procedure Timed_Delay
+      (Self_ID : Task_Id;
+       Time    : Duration;
+       Mode    : ST.Delay_Modes)
+    is
+       Check_Time : constant Duration := Monotonic_Clock;
+       Abs_Time   : Duration;
+       Request    : aliased timespec;
+       Result     : Interfaces.C.int;
+ 
+    begin
+       --  The little window between deferring abort and locking Self_ID is
+       --  the only reason we need to check for pending abort and priority
+       --  change below!
+ 
+       SSL.Abort_Defer.all;
+ 
+       if Single_Lock then
+          Lock_RTS;
+       end if;
+ 
+       Write_Lock (Self_ID);
+ 
+       if Mode = Relative then
+          Abs_Time := Time + Check_Time;
+       else
+          Abs_Time := Duration'Min (Check_Time + Max_Sensible_Delay, Time);
+       end if;
+ 
+       if Abs_Time > Check_Time then
+          Request := To_Timespec (Abs_Time);
+          Self_ID.Common.State := Delay_Sleep;
+ 
+          loop
+             if Self_ID.Pending_Priority_Change then
+                Self_ID.Pending_Priority_Change := False;
+                Self_ID.Common.Base_Priority := Self_ID.New_Base_Priority;
+                Set_Priority (Self_ID, Self_ID.Common.Base_Priority);
+             end if;
+ 
+             exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level;
+ 
+             Result := pthread_cond_timedwait (Self_ID.Common.LL.CV'Access,
+               Self_ID.Common.LL.L'Access, Request'Access);
+             exit when Abs_Time <= Monotonic_Clock;
+ 
+             pragma Assert (Result = 0
+               or else Result = ETIMEDOUT
+               or else Result = EINTR);
+          end loop;
+ 
+          Self_ID.Common.State := Runnable;
+       end if;
+ 
+       Unlock (Self_ID);
+ 
+       if Single_Lock then
+          Unlock_RTS;
+       end if;
+ 
+       Yield;
+       SSL.Abort_Undefer.all;
+    end Timed_Delay;
+ 
+    ---------------------
+    -- Monotonic_Clock --
+    ---------------------
+ 
+    function Monotonic_Clock return Duration is
+       TS     : aliased timespec;
+       Result : Interfaces.C.int;
+    begin
+       Result := clock_gettime (Real_Time_Clock_Id, TS'Unchecked_Access);
+       pragma Assert (Result = 0);
+       return To_Duration (TS);
+    end Monotonic_Clock;
+ 
+    -------------------
+    -- RT_Resolution --
+    -------------------
+ 
+    function RT_Resolution return Duration is
+    begin
+       --  The clock_getres (Real_Time_Clock_Id) function appears to return
+       --  the interrupt resolution of the realtime clock and not the actual
+       --  resolution of reading the clock. Even though this last value is
+       --  only guaranteed to be 100 Hz, at least the Origin 200 appears to
+       --  have a microsecond resolution or better.
+ 
+       --  ??? We should figure out a method to return the right value on
+       --  all SGI hardware.
+ 
+       return 0.000_001;
+    end RT_Resolution;
+ 
+    ------------
+    -- Wakeup --
+    ------------
+ 
+    procedure Wakeup (T : ST.Task_Id; Reason : System.Tasking.Task_States) is
+       pragma Unreferenced (Reason);
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_cond_signal (T.Common.LL.CV'Access);
+       pragma Assert (Result = 0);
+    end Wakeup;
+ 
+    -----------
+    -- Yield --
+    -----------
+ 
+    procedure Yield (Do_Yield : Boolean := True) is
+       Result : Interfaces.C.int;
+       pragma Unreferenced (Result);
+    begin
+       if Do_Yield then
+          Result := sched_yield;
+       end if;
+    end Yield;
+ 
+    ------------------
+    -- Set_Priority --
+    ------------------
+ 
+    procedure Set_Priority
+      (T                   : Task_Id;
+       Prio                : System.Any_Priority;
+       Loss_Of_Inheritance : Boolean := False)
+    is
+       pragma Unreferenced (Loss_Of_Inheritance);
+ 
+       Result       : Interfaces.C.int;
+       Param        : aliased struct_sched_param;
+       Sched_Policy : Interfaces.C.int;
+ 
+       use type System.Task_Info.Task_Info_Type;
+ 
+       function To_Int is new Unchecked_Conversion
+         (System.Task_Info.Thread_Scheduling_Policy, Interfaces.C.int);
+ 
+    begin
+       T.Common.Current_Priority := Prio;
+       Param.sched_priority := Interfaces.C.int (Prio);
+ 
+       if T.Common.Task_Info /= null then
+          Sched_Policy := To_Int (T.Common.Task_Info.Policy);
+       else
+          Sched_Policy := SCHED_FIFO;
+       end if;
+ 
+       Result := pthread_setschedparam (T.Common.LL.Thread, Sched_Policy,
+         Param'Access);
+       pragma Assert (Result = 0);
+    end Set_Priority;
+ 
+    ------------------
+    -- Get_Priority --
+    ------------------
+ 
+    function Get_Priority (T : Task_Id) return System.Any_Priority is
+    begin
+       return T.Common.Current_Priority;
+    end Get_Priority;
+ 
+    ----------------
+    -- Enter_Task --
+    ----------------
+ 
+    procedure Enter_Task (Self_ID : Task_Id) is
+       Result : Interfaces.C.int;
+ 
+       function To_Int is new Unchecked_Conversion
+         (System.Task_Info.CPU_Number, Interfaces.C.int);
+ 
+       use System.Task_Info;
+ 
+    begin
+       Self_ID.Common.LL.Thread := pthread_self;
+       Specific.Set (Self_ID);
+ 
+       if Self_ID.Common.Task_Info /= null
+         and then Self_ID.Common.Task_Info.Scope = PTHREAD_SCOPE_SYSTEM
+         and then Self_ID.Common.Task_Info.Runon_CPU /= ANY_CPU
+       then
+          Result := pthread_setrunon_np
+            (To_Int (Self_ID.Common.Task_Info.Runon_CPU));
+          pragma Assert (Result = 0);
+       end if;
+ 
+       Lock_RTS;
+ 
+       for J in Known_Tasks'Range loop
+          if Known_Tasks (J) = null then
+             Known_Tasks (J) := Self_ID;
+             Self_ID.Known_Tasks_Index := J;
+             exit;
+          end if;
+       end loop;
+ 
+       Unlock_RTS;
+    end Enter_Task;
+ 
+    --------------
+    -- New_ATCB --
+    --------------
+ 
+    function New_ATCB (Entry_Num : Task_Entry_Index) return Task_Id is
+    begin
+       return new Ada_Task_Control_Block (Entry_Num);
+    end New_ATCB;
+ 
+    -------------------
+    -- Is_Valid_Task --
+    -------------------
+ 
+    function Is_Valid_Task return Boolean renames Specific.Is_Valid_Task;
+ 
+    -----------------------------
+    -- Register_Foreign_Thread --
+    -----------------------------
+ 
+    function Register_Foreign_Thread return Task_Id is
+    begin
+       if Is_Valid_Task then
+          return Self;
+       else
+          return Register_Foreign_Thread (pthread_self);
+       end if;
+    end Register_Foreign_Thread;
+ 
+    --------------------
+    -- Initialize_TCB --
+    --------------------
+ 
+    procedure Initialize_TCB (Self_ID : Task_Id; Succeeded : out Boolean) is
+       Result    : Interfaces.C.int;
+       Cond_Attr : aliased pthread_condattr_t;
+ 
+    begin
+       if not Single_Lock then
+          Initialize_Lock (Self_ID.Common.LL.L'Access, ATCB_Level);
+       end if;
+ 
+       Result := pthread_condattr_init (Cond_Attr'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = 0 then
+          Result := pthread_cond_init (Self_ID.Common.LL.CV'Access,
+            Cond_Attr'Access);
+          pragma Assert (Result = 0 or else Result = ENOMEM);
+       end if;
+ 
+       if Result = 0 then
+          Succeeded := True;
+       else
+          if not Single_Lock then
+             Result := pthread_mutex_destroy (Self_ID.Common.LL.L'Access);
+             pragma Assert (Result = 0);
+          end if;
+ 
+          Succeeded := False;
+       end if;
+ 
+       Result := pthread_condattr_destroy (Cond_Attr'Access);
+       pragma Assert (Result = 0);
+    end Initialize_TCB;
+ 
+    -----------------
+    -- Create_Task --
+    -----------------
+ 
+    procedure Create_Task
+      (T          : Task_Id;
+       Wrapper    : System.Address;
+       Stack_Size : System.Parameters.Size_Type;
+       Priority   : System.Any_Priority;
+       Succeeded  : out Boolean)
+    is
+       use System.Task_Info;
+ 
+       Attributes          : aliased pthread_attr_t;
+       Sched_Param         : aliased struct_sched_param;
+       Adjusted_Stack_Size : Interfaces.C.size_t;
+       Result              : Interfaces.C.int;
+ 
+       function Thread_Body_Access is new
+         Unchecked_Conversion (System.Address, Thread_Body);
+ 
+       function To_Int is new Unchecked_Conversion
+         (System.Task_Info.Thread_Scheduling_Scope, Interfaces.C.int);
+       function To_Int is new Unchecked_Conversion
+         (System.Task_Info.Thread_Scheduling_Inheritance, Interfaces.C.int);
+       function To_Int is new Unchecked_Conversion
+         (System.Task_Info.Thread_Scheduling_Policy, Interfaces.C.int);
+ 
+    begin
+       if Stack_Size = System.Parameters.Unspecified_Size then
+          Adjusted_Stack_Size :=
+            Interfaces.C.size_t (System.Program_Info.Default_Task_Stack);
+ 
+       elsif Stack_Size < Size_Type (Minimum_Stack_Size) then
+          Adjusted_Stack_Size :=
+            Interfaces.C.size_t (Minimum_Stack_Size);
+ 
+       else
+          Adjusted_Stack_Size := Interfaces.C.size_t (Stack_Size);
+       end if;
+ 
+       Result := pthread_attr_init (Attributes'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result /= 0 then
+          Succeeded := False;
+          return;
+       end if;
+ 
+       Result := pthread_attr_setdetachstate
+         (Attributes'Access, PTHREAD_CREATE_DETACHED);
+       pragma Assert (Result = 0);
+ 
+       Result := pthread_attr_setstacksize
+         (Attributes'Access, Adjusted_Stack_Size);
+       pragma Assert (Result = 0);
+ 
+       if T.Common.Task_Info /= null then
+          Result := pthread_attr_setscope
+            (Attributes'Access, To_Int (T.Common.Task_Info.Scope));
+          pragma Assert (Result = 0);
+ 
+          Result := pthread_attr_setinheritsched
+            (Attributes'Access, To_Int (T.Common.Task_Info.Inheritance));
+          pragma Assert (Result = 0);
+ 
+          Result := pthread_attr_setschedpolicy
+            (Attributes'Access, To_Int (T.Common.Task_Info.Policy));
+          pragma Assert (Result = 0);
+ 
+          Sched_Param.sched_priority :=
+            Interfaces.C.int (T.Common.Task_Info.Priority);
+ 
+          Result := pthread_attr_setschedparam
+            (Attributes'Access, Sched_Param'Access);
+          pragma Assert (Result = 0);
+       end if;
+ 
+       --  Since the initial signal mask of a thread is inherited from the
+       --  creator, and the Environment task has all its signals masked, we
+       --  do not need to manipulate caller's signal mask at this point.
+       --  All tasks in RTS will have All_Tasks_Mask initially.
+ 
+       Result := pthread_create
+         (T.Common.LL.Thread'Access,
+          Attributes'Access,
+          Thread_Body_Access (Wrapper),
+          To_Address (T));
+ 
+       if Result /= 0
+         and then T.Common.Task_Info /= null
+         and then T.Common.Task_Info.Scope = PTHREAD_SCOPE_SYSTEM
+       then
+          --  The pthread_create call may have failed because we
+          --  asked for a system scope pthread and none were
+          --  available (probably because the program was not executed
+          --  by the superuser). Let's try for a process scope pthread
+          --  instead of raising Tasking_Error.
+ 
+          System.IO.Put_Line
+            ("Request for PTHREAD_SCOPE_SYSTEM in Task_Info pragma for task");
+          System.IO.Put ("""");
+          System.IO.Put (T.Common.Task_Image (1 .. T.Common.Task_Image_Len));
+          System.IO.Put_Line (""" could not be honored. ");
+          System.IO.Put_Line ("Scope changed to PTHREAD_SCOPE_PROCESS");
+ 
+          T.Common.Task_Info.Scope := PTHREAD_SCOPE_PROCESS;
+          Result := pthread_attr_setscope
+            (Attributes'Access, To_Int (T.Common.Task_Info.Scope));
+          pragma Assert (Result = 0);
+ 
+          Result := pthread_create
+            (T.Common.LL.Thread'Access,
+             Attributes'Access,
+             Thread_Body_Access (Wrapper),
+             To_Address (T));
+       end if;
+ 
+       pragma Assert (Result = 0 or else Result = EAGAIN);
+ 
+       Succeeded := Result = 0;
+ 
+       --  The following needs significant commenting ???
+ 
+       if T.Common.Task_Info /= null then
+          T.Common.Base_Priority := T.Common.Task_Info.Priority;
+          Set_Priority (T, T.Common.Task_Info.Priority);
+       else
+          Set_Priority (T, Priority);
+       end if;
+ 
+       Result := pthread_attr_destroy (Attributes'Access);
+       pragma Assert (Result = 0);
+    end Create_Task;
+ 
+    ------------------
+    -- Finalize_TCB --
+    ------------------
+ 
+    procedure Finalize_TCB (T : Task_Id) is
+       Result  : Interfaces.C.int;
+       Tmp     : Task_Id := T;
+       Is_Self : constant Boolean := T = Self;
+ 
+       procedure Free is new
+         Unchecked_Deallocation (Ada_Task_Control_Block, Task_Id);
+ 
+    begin
+       if not Single_Lock then
+          Result := pthread_mutex_destroy (T.Common.LL.L'Access);
+          pragma Assert (Result = 0);
+       end if;
+ 
+       Result := pthread_cond_destroy (T.Common.LL.CV'Access);
+       pragma Assert (Result = 0);
+ 
+       if T.Known_Tasks_Index /= -1 then
+          Known_Tasks (T.Known_Tasks_Index) := null;
+       end if;
+ 
+       Free (Tmp);
+ 
+       if Is_Self then
+          Specific.Set (null);
+       end if;
+    end Finalize_TCB;
+ 
+    ---------------
+    -- Exit_Task --
+    ---------------
+ 
+    procedure Exit_Task is
+    begin
+       Specific.Set (null);
+    end Exit_Task;
+ 
+    ----------------
+    -- Abort_Task --
+    ----------------
+ 
+    procedure Abort_Task (T : Task_Id) is
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_kill (T.Common.LL.Thread,
+         Signal (System.Interrupt_Management.Abort_Task_Interrupt));
+       pragma Assert (Result = 0);
+    end Abort_Task;
+ 
+    ----------------
+    -- Check_Exit --
+    ----------------
+ 
+    --  Dummy version
+ 
+    function Check_Exit (Self_ID : ST.Task_Id) return Boolean is
+       pragma Unreferenced (Self_ID);
+    begin
+       return True;
+    end Check_Exit;
+ 
+    --------------------
+    -- Check_No_Locks --
+    --------------------
+ 
+    function Check_No_Locks (Self_ID : ST.Task_Id) return Boolean is
+       pragma Unreferenced (Self_ID);
+    begin
+       return True;
+    end Check_No_Locks;
+ 
+    ----------------------
+    -- Environment_Task --
+    ----------------------
+ 
+    function Environment_Task return Task_Id is
+    begin
+       return Environment_Task_Id;
+    end Environment_Task;
+ 
+    --------------
+    -- Lock_RTS --
+    --------------
+ 
+    procedure Lock_RTS is
+    begin
+       Write_Lock (Single_RTS_Lock'Access, Global_Lock => True);
+    end Lock_RTS;
+ 
+    ----------------
+    -- Unlock_RTS --
+    ----------------
+ 
+    procedure Unlock_RTS is
+    begin
+       Unlock (Single_RTS_Lock'Access, Global_Lock => True);
+    end Unlock_RTS;
+ 
+    ------------------
+    -- Suspend_Task --
+    ------------------
+ 
+    function Suspend_Task
+      (T           : ST.Task_Id;
+       Thread_Self : Thread_Id) return Boolean
+    is
+       pragma Unreferenced (T);
+       pragma Unreferenced (Thread_Self);
+    begin
+       return False;
+    end Suspend_Task;
+ 
+    -----------------
+    -- Resume_Task --
+    -----------------
+ 
+    function Resume_Task
+      (T           : ST.Task_Id;
+       Thread_Self : Thread_Id) return Boolean
+    is
+       pragma Unreferenced (T);
+       pragma Unreferenced (Thread_Self);
+    begin
+       return False;
+    end Resume_Task;
+ 
+    ----------------
+    -- Initialize --
+    ----------------
+ 
+    procedure Initialize (Environment_Task : Task_Id) is
+       act     : aliased struct_sigaction;
+       old_act : aliased struct_sigaction;
+       Tmp_Set : aliased sigset_t;
+       Result  : Interfaces.C.int;
+ 
+       function State
+         (Int : System.Interrupt_Management.Interrupt_ID) return Character;
+       pragma Import (C, State, "__gnat_get_interrupt_state");
+       --  Get interrupt state. Defined in a-init.c. The input argument is
+       --  the interrupt number, and the result is one of the following:
+ 
+       Default : constant Character := 's';
+       --    'n'   this interrupt not set by any Interrupt_State pragma
+       --    'u'   Interrupt_State pragma set state to User
+       --    'r'   Interrupt_State pragma set state to Runtime
+       --    's'   Interrupt_State pragma set state to System (use "default"
+       --           system handler)
+ 
+    begin
+       Environment_Task_Id := Environment_Task;
+ 
+       --  Initialize the lock used to synchronize chain of all ATCBs.
+ 
+       Initialize_Lock (Single_RTS_Lock'Access, RTS_Lock_Level);
+ 
+       Specific.Initialize (Environment_Task);
+ 
+       Enter_Task (Environment_Task);
+ 
+       --  Install the abort-signal handler
+ 
+       if State (System.Interrupt_Management.Abort_Task_Interrupt)
+                                                         /= Default
+       then
+          act.sa_flags := 0;
+          act.sa_handler := Abort_Handler'Address;
+ 
+          Result := sigemptyset (Tmp_Set'Access);
+          pragma Assert (Result = 0);
+          act.sa_mask := Tmp_Set;
+ 
+          Result :=
+            sigaction (
+              Signal (System.Interrupt_Management.Abort_Task_Interrupt),
+              act'Unchecked_Access,
+              old_act'Unchecked_Access);
+          pragma Assert (Result = 0);
+       end if;
+    end Initialize;
+ 
+ begin
+    declare
+       Result : Interfaces.C.int;
+ 
+    begin
+       --  Mask Environment task for all signals. The original mask of the
+       --  Environment task will be recovered by Interrupt_Server task
+       --  during the elaboration of s-interr.adb.
+ 
+       System.Interrupt_Management.Operations.Set_Interrupt_Mask
+         (System.Interrupt_Management.Operations.All_Tasks_Mask'Access);
+ 
+       --  Prepare the set of signals that should unblocked in all tasks
+ 
+       Result := sigemptyset (Unblocked_Signal_Mask'Access);
+       pragma Assert (Result = 0);
+ 
+       for J in Interrupt_Management.Interrupt_ID loop
+          if System.Interrupt_Management.Keep_Unmasked (J) then
+             Result := sigaddset (Unblocked_Signal_Mask'Access, Signal (J));
+             pragma Assert (Result = 0);
+          end if;
+       end loop;
+ 
+       --  Pick the highest resolution Clock for Clock_Realtime
+ 
+       --  ??? This code currently doesn't work (see c94007[ab] for example)
+ 
+       --  if syssgi (SGI_CYCLECNTR_SIZE) = 64 then
+       --     Real_Time_Clock_Id := CLOCK_SGI_CYCLE;
+       --  else
+       --     Real_Time_Clock_Id := CLOCK_REALTIME;
+       --  end if;
+    end;
+ end System.Task_Primitives.Operations;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-taprop-linux.adb gcc-4.0.0/gcc/ada/s-taprop-linux.adb
*** gcc-3.4.3/gcc/ada/s-taprop-linux.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-taprop-linux.adb	Tue Jul  6 13:57:29 2004
***************
*** 0 ****
--- 1,1084 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --     S Y S T E M . T A S K _ P R I M I T I V E S . O P E R A T I O N S    --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --         Copyright (C) 1992-2004, Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a GNU/Linux (GNU/LinuxThreads) version of this package
+ 
+ --  This package contains all the GNULL primitives that interface directly
+ --  with the underlying OS.
+ 
+ pragma Polling (Off);
+ --  Turn off polling, we do not want ATC polling to take place during
+ --  tasking operations. It causes infinite loops and other problems.
+ 
+ with System.Tasking.Debug;
+ --  used for Known_Tasks
+ 
+ with Interfaces.C;
+ --  used for int
+ --           size_t
+ 
+ with System.Interrupt_Management;
+ --  used for Keep_Unmasked
+ --           Abort_Task_Interrupt
+ --           Interrupt_ID
+ 
+ with System.Interrupt_Management.Operations;
+ --  used for Set_Interrupt_Mask
+ --           All_Tasks_Mask
+ pragma Elaborate_All (System.Interrupt_Management.Operations);
+ 
+ with System.Parameters;
+ --  used for Size_Type
+ 
+ with System.Tasking;
+ --  used for Ada_Task_Control_Block
+ --           Task_Id
+ 
+ with Ada.Exceptions;
+ --  used for Raise_Exception
+ --           Raise_From_Signal_Handler
+ --           Exception_Id
+ 
+ with System.Soft_Links;
+ --  used for Defer/Undefer_Abort
+ 
+ --  Note that we do not use System.Tasking.Initialization directly since
+ --  this is a higher level package that we shouldn't depend on. For example
+ --  when using the restricted run time, it is replaced by
+ --  System.Tasking.Restricted.Stages.
+ 
+ with System.OS_Primitives;
+ --  used for Delay_Modes
+ 
+ with System.Soft_Links;
+ --  used for Get_Machine_State_Addr
+ 
+ with Unchecked_Conversion;
+ with Unchecked_Deallocation;
+ 
+ package body System.Task_Primitives.Operations is
+ 
+    use System.Tasking.Debug;
+    use System.Tasking;
+    use Interfaces.C;
+    use System.OS_Interface;
+    use System.Parameters;
+    use System.OS_Primitives;
+ 
+    package SSL renames System.Soft_Links;
+ 
+    ----------------
+    -- Local Data --
+    ----------------
+ 
+    --  The followings are logically constants, but need to be initialized
+    --  at run time.
+ 
+    Single_RTS_Lock : aliased RTS_Lock;
+    --  This is a lock to allow only one thread of control in the RTS at
+    --  a time; it is used to execute in mutual exclusion from all other tasks.
+    --  Used mainly in Single_Lock mode, but also to protect All_Tasks_List
+ 
+    ATCB_Key : aliased pthread_key_t;
+    --  Key used to find the Ada Task_Id associated with a thread
+ 
+    Environment_Task_Id : Task_Id;
+    --  A variable to hold Task_Id for the environment task
+ 
+    Unblocked_Signal_Mask : aliased sigset_t;
+    --  The set of signals that should unblocked in all tasks
+ 
+    --  The followings are internal configuration constants needed
+ 
+    Priority_Ceiling_Emulation : constant Boolean := True;
+ 
+    Next_Serial_Number : Task_Serial_Number := 100;
+    --  We start at 100, to reserve some special values for
+    --  using in error checking.
+ 
+    Time_Slice_Val : Integer;
+    pragma Import (C, Time_Slice_Val, "__gl_time_slice_val");
+ 
+    Dispatching_Policy : Character;
+    pragma Import (C, Dispatching_Policy, "__gl_task_dispatching_policy");
+ 
+    FIFO_Within_Priorities : constant Boolean := Dispatching_Policy = 'F';
+    --  Indicates whether FIFO_Within_Priorities is set
+ 
+    --  The following are effectively constants, but they need to
+    --  be initialized by calling a pthread_ function.
+ 
+    Mutex_Attr   : aliased pthread_mutexattr_t;
+    Cond_Attr    : aliased pthread_condattr_t;
+ 
+    Foreign_Task_Elaborated : aliased Boolean := True;
+    --  Used to identified fake tasks (i.e., non-Ada Threads)
+ 
+    --------------------
+    -- Local Packages --
+    --------------------
+ 
+    package Specific is
+ 
+       procedure Initialize (Environment_Task : Task_Id);
+       pragma Inline (Initialize);
+       --  Initialize various data needed by this package
+ 
+       function Is_Valid_Task return Boolean;
+       pragma Inline (Is_Valid_Task);
+       --  Does executing thread have a TCB?
+ 
+       procedure Set (Self_Id : Task_Id);
+       pragma Inline (Set);
+       --  Set the self id for the current task
+ 
+       function Self return Task_Id;
+       pragma Inline (Self);
+       --  Return a pointer to the Ada Task Control Block of the calling task.
+ 
+    end Specific;
+ 
+    package body Specific is separate;
+    --  The body of this package is target specific
+ 
+    ---------------------------------
+    -- Support for foreign threads --
+    ---------------------------------
+ 
+    function Register_Foreign_Thread (Thread : Thread_Id) return Task_Id;
+    --  Allocate and Initialize a new ATCB for the current Thread
+ 
+    function Register_Foreign_Thread
+      (Thread : Thread_Id) return Task_Id is separate;
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    subtype unsigned_long is Interfaces.C.unsigned_long;
+ 
+    procedure Abort_Handler (signo : Signal);
+ 
+    function To_pthread_t is new Unchecked_Conversion
+      (unsigned_long, System.OS_Interface.pthread_t);
+ 
+    -------------------
+    -- Abort_Handler --
+    -------------------
+ 
+    procedure Abort_Handler (signo : Signal) is
+       pragma Unreferenced (signo);
+ 
+       Self_Id : constant Task_Id := Self;
+       Result  : Interfaces.C.int;
+       Old_Set : aliased sigset_t;
+ 
+    begin
+       if ZCX_By_Default and then GCC_ZCX_Support then
+          return;
+       end if;
+ 
+       if Self_Id.Deferral_Level = 0
+         and then Self_Id.Pending_ATC_Level < Self_Id.ATC_Nesting_Level
+         and then not Self_Id.Aborting
+       then
+          Self_Id.Aborting := True;
+ 
+          --  Make sure signals used for RTS internal purpose are unmasked
+ 
+          Result := pthread_sigmask (SIG_UNBLOCK,
+            Unblocked_Signal_Mask'Unchecked_Access, Old_Set'Unchecked_Access);
+          pragma Assert (Result = 0);
+ 
+          raise Standard'Abort_Signal;
+       end if;
+    end Abort_Handler;
+ 
+    --------------
+    -- Lock_RTS --
+    --------------
+ 
+    procedure Lock_RTS is
+    begin
+       Write_Lock (Single_RTS_Lock'Access, Global_Lock => True);
+    end Lock_RTS;
+ 
+    ----------------
+    -- Unlock_RTS --
+    ----------------
+ 
+    procedure Unlock_RTS is
+    begin
+       Unlock (Single_RTS_Lock'Access, Global_Lock => True);
+    end Unlock_RTS;
+ 
+    -----------------
+    -- Stack_Guard --
+    -----------------
+ 
+    --  The underlying thread system extends the memory (up to 2MB) when needed
+ 
+    procedure Stack_Guard (T : ST.Task_Id; On : Boolean) is
+       pragma Unreferenced (T);
+       pragma Unreferenced (On);
+    begin
+       null;
+    end Stack_Guard;
+ 
+    --------------------
+    -- Get_Thread_Id  --
+    --------------------
+ 
+    function Get_Thread_Id (T : ST.Task_Id) return OSI.Thread_Id is
+    begin
+       return T.Common.LL.Thread;
+    end Get_Thread_Id;
+ 
+    ----------
+    -- Self --
+    ----------
+ 
+    function Self return Task_Id renames Specific.Self;
+ 
+    ---------------------
+    -- Initialize_Lock --
+    ---------------------
+ 
+    --  Note: mutexes and cond_variables needed per-task basis are
+    --  initialized in Initialize_TCB and the Storage_Error is
+    --  handled. Other mutexes (such as RTS_Lock, Memory_Lock...)
+    --  used in RTS is initialized before any status change of RTS.
+    --  Therefore rasing Storage_Error in the following routines
+    --  should be able to be handled safely.
+ 
+    procedure Initialize_Lock
+      (Prio : System.Any_Priority;
+       L    : access Lock)
+    is
+       Result : Interfaces.C.int;
+ 
+    begin
+       if Priority_Ceiling_Emulation then
+          L.Ceiling := Prio;
+       end if;
+ 
+       Result := pthread_mutex_init (L.L'Access, Mutex_Attr'Access);
+ 
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = ENOMEM then
+          Ada.Exceptions.Raise_Exception (Storage_Error'Identity,
+            "Failed to allocate a lock");
+       end if;
+    end Initialize_Lock;
+ 
+    procedure Initialize_Lock (L : access RTS_Lock; Level : Lock_Level) is
+       pragma Unreferenced (Level);
+ 
+       Result : Interfaces.C.int;
+ 
+    begin
+       Result := pthread_mutex_init (L, Mutex_Attr'Access);
+ 
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = ENOMEM then
+          raise Storage_Error;
+       end if;
+    end Initialize_Lock;
+ 
+    -------------------
+    -- Finalize_Lock --
+    -------------------
+ 
+    procedure Finalize_Lock (L : access Lock) is
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_mutex_destroy (L.L'Access);
+       pragma Assert (Result = 0);
+    end Finalize_Lock;
+ 
+    procedure Finalize_Lock (L : access RTS_Lock) is
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_mutex_destroy (L);
+       pragma Assert (Result = 0);
+    end Finalize_Lock;
+ 
+    ----------------
+    -- Write_Lock --
+    ----------------
+ 
+    procedure Write_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
+       Result : Interfaces.C.int;
+ 
+    begin
+       if Priority_Ceiling_Emulation then
+          declare
+             Self_ID : constant Task_Id := Self;
+ 
+          begin
+             if Self_ID.Common.LL.Active_Priority > L.Ceiling then
+                Ceiling_Violation := True;
+                return;
+             end if;
+ 
+             L.Saved_Priority := Self_ID.Common.LL.Active_Priority;
+ 
+             if Self_ID.Common.LL.Active_Priority < L.Ceiling then
+                Self_ID.Common.LL.Active_Priority := L.Ceiling;
+             end if;
+ 
+             Result := pthread_mutex_lock (L.L'Access);
+             pragma Assert (Result = 0);
+             Ceiling_Violation := False;
+          end;
+ 
+       else
+          Result := pthread_mutex_lock (L.L'Access);
+          Ceiling_Violation := Result = EINVAL;
+ 
+          --  Assume the cause of EINVAL is a priority ceiling violation
+ 
+          pragma Assert (Result = 0 or else Result = EINVAL);
+       end if;
+    end Write_Lock;
+ 
+    procedure Write_Lock
+      (L           : access RTS_Lock;
+       Global_Lock : Boolean := False)
+    is
+       Result : Interfaces.C.int;
+    begin
+       if not Single_Lock or else Global_Lock then
+          Result := pthread_mutex_lock (L);
+          pragma Assert (Result = 0);
+       end if;
+    end Write_Lock;
+ 
+    procedure Write_Lock (T : Task_Id) is
+       Result : Interfaces.C.int;
+    begin
+       if not Single_Lock then
+          Result := pthread_mutex_lock (T.Common.LL.L'Access);
+          pragma Assert (Result = 0);
+       end if;
+    end Write_Lock;
+ 
+    ---------------
+    -- Read_Lock --
+    ---------------
+ 
+    procedure Read_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
+    begin
+       Write_Lock (L, Ceiling_Violation);
+    end Read_Lock;
+ 
+    ------------
+    -- Unlock --
+    ------------
+ 
+    procedure Unlock (L : access Lock) is
+       Result : Interfaces.C.int;
+ 
+    begin
+       if Priority_Ceiling_Emulation then
+          declare
+             Self_ID : constant Task_Id := Self;
+ 
+          begin
+             Result := pthread_mutex_unlock (L.L'Access);
+             pragma Assert (Result = 0);
+ 
+             if Self_ID.Common.LL.Active_Priority > L.Saved_Priority then
+                Self_ID.Common.LL.Active_Priority := L.Saved_Priority;
+             end if;
+          end;
+ 
+       else
+          Result := pthread_mutex_unlock (L.L'Access);
+          pragma Assert (Result = 0);
+       end if;
+    end Unlock;
+ 
+    procedure Unlock (L : access RTS_Lock; Global_Lock : Boolean := False) is
+       Result : Interfaces.C.int;
+    begin
+       if not Single_Lock or else Global_Lock then
+          Result := pthread_mutex_unlock (L);
+          pragma Assert (Result = 0);
+       end if;
+    end Unlock;
+ 
+    procedure Unlock (T : Task_Id) is
+       Result : Interfaces.C.int;
+    begin
+       if not Single_Lock then
+          Result := pthread_mutex_unlock (T.Common.LL.L'Access);
+          pragma Assert (Result = 0);
+       end if;
+    end Unlock;
+ 
+    -----------
+    -- Sleep --
+    -----------
+ 
+    procedure Sleep
+      (Self_ID  : Task_Id;
+       Reason   : System.Tasking.Task_States)
+    is
+       pragma Unreferenced (Reason);
+ 
+       Result : Interfaces.C.int;
+ 
+    begin
+       pragma Assert (Self_ID = Self);
+ 
+       if Single_Lock then
+          Result := pthread_cond_wait
+            (Self_ID.Common.LL.CV'Access, Single_RTS_Lock'Access);
+       else
+          Result := pthread_cond_wait
+            (Self_ID.Common.LL.CV'Access, Self_ID.Common.LL.L'Access);
+       end if;
+ 
+       --  EINTR is not considered a failure
+ 
+       pragma Assert (Result = 0 or else Result = EINTR);
+    end Sleep;
+ 
+    -----------------
+    -- Timed_Sleep --
+    -----------------
+ 
+    --  This is for use within the run-time system, so abort is
+    --  assumed to be already deferred, and the caller should be
+    --  holding its own ATCB lock.
+ 
+    procedure Timed_Sleep
+      (Self_ID  : Task_Id;
+       Time     : Duration;
+       Mode     : ST.Delay_Modes;
+       Reason   : System.Tasking.Task_States;
+       Timedout : out Boolean;
+       Yielded  : out Boolean)
+    is
+       pragma Unreferenced (Reason);
+ 
+       Check_Time : constant Duration := Monotonic_Clock;
+       Abs_Time   : Duration;
+       Request    : aliased timespec;
+       Result     : Interfaces.C.int;
+ 
+    begin
+       Timedout := True;
+       Yielded := False;
+ 
+       if Mode = Relative then
+          Abs_Time := Duration'Min (Time, Max_Sensible_Delay) + Check_Time;
+       else
+          Abs_Time := Duration'Min (Check_Time + Max_Sensible_Delay, Time);
+       end if;
+ 
+       if Abs_Time > Check_Time then
+          Request := To_Timespec (Abs_Time);
+ 
+          loop
+             exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level
+               or else Self_ID.Pending_Priority_Change;
+ 
+             if Single_Lock then
+                Result := pthread_cond_timedwait
+                  (Self_ID.Common.LL.CV'Access, Single_RTS_Lock'Access,
+                   Request'Access);
+ 
+             else
+                Result := pthread_cond_timedwait
+                  (Self_ID.Common.LL.CV'Access, Self_ID.Common.LL.L'Access,
+                   Request'Access);
+             end if;
+ 
+             exit when Abs_Time <= Monotonic_Clock;
+ 
+             if Result = 0 or Result = EINTR then
+                --  somebody may have called Wakeup for us
+                Timedout := False;
+                exit;
+             end if;
+ 
+             pragma Assert (Result = ETIMEDOUT);
+          end loop;
+       end if;
+    end Timed_Sleep;
+ 
+    -----------------
+    -- Timed_Delay --
+    -----------------
+ 
+    --  This is for use in implementing delay statements, so
+    --  we assume the caller is abort-deferred but is holding
+    --  no locks.
+ 
+    procedure Timed_Delay
+      (Self_ID  : Task_Id;
+       Time     : Duration;
+       Mode     : ST.Delay_Modes)
+    is
+       Check_Time : constant Duration := Monotonic_Clock;
+       Abs_Time   : Duration;
+       Request    : aliased timespec;
+       Result     : Interfaces.C.int;
+    begin
+ 
+       --  Only the little window between deferring abort and
+       --  locking Self_ID is the reason we need to
+       --  check for pending abort and priority change below! :(
+ 
+       SSL.Abort_Defer.all;
+ 
+       if Single_Lock then
+          Lock_RTS;
+       end if;
+ 
+       Write_Lock (Self_ID);
+ 
+       if Mode = Relative then
+          Abs_Time := Time + Check_Time;
+       else
+          Abs_Time := Duration'Min (Check_Time + Max_Sensible_Delay, Time);
+       end if;
+ 
+       if Abs_Time > Check_Time then
+          Request := To_Timespec (Abs_Time);
+          Self_ID.Common.State := Delay_Sleep;
+ 
+          loop
+             if Self_ID.Pending_Priority_Change then
+                Self_ID.Pending_Priority_Change := False;
+                Self_ID.Common.Base_Priority := Self_ID.New_Base_Priority;
+                Set_Priority (Self_ID, Self_ID.Common.Base_Priority);
+             end if;
+ 
+             exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level;
+ 
+             if Single_Lock then
+                Result := pthread_cond_timedwait (Self_ID.Common.LL.CV'Access,
+                  Single_RTS_Lock'Access, Request'Access);
+             else
+                Result := pthread_cond_timedwait (Self_ID.Common.LL.CV'Access,
+                  Self_ID.Common.LL.L'Access, Request'Access);
+             end if;
+ 
+             exit when Abs_Time <= Monotonic_Clock;
+ 
+             pragma Assert (Result = 0 or else
+               Result = ETIMEDOUT or else
+               Result = EINTR);
+          end loop;
+ 
+          Self_ID.Common.State := Runnable;
+       end if;
+ 
+       Unlock (Self_ID);
+ 
+       if Single_Lock then
+          Unlock_RTS;
+       end if;
+ 
+       Result := sched_yield;
+       SSL.Abort_Undefer.all;
+    end Timed_Delay;
+ 
+    ---------------------
+    -- Monotonic_Clock --
+    ---------------------
+ 
+    function Monotonic_Clock return Duration is
+       TV     : aliased struct_timeval;
+       Result : Interfaces.C.int;
+    begin
+       Result := gettimeofday (TV'Access, System.Null_Address);
+       pragma Assert (Result = 0);
+       return To_Duration (TV);
+    end Monotonic_Clock;
+ 
+    -------------------
+    -- RT_Resolution --
+    -------------------
+ 
+    function RT_Resolution return Duration is
+    begin
+       return 10#1.0#E-6;
+    end RT_Resolution;
+ 
+    ------------
+    -- Wakeup --
+    ------------
+ 
+    procedure Wakeup (T : Task_Id; Reason : System.Tasking.Task_States) is
+       pragma Unreferenced (Reason);
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_cond_signal (T.Common.LL.CV'Access);
+       pragma Assert (Result = 0);
+    end Wakeup;
+ 
+    -----------
+    -- Yield --
+    -----------
+ 
+    procedure Yield (Do_Yield : Boolean := True) is
+       Result : Interfaces.C.int;
+       pragma Unreferenced (Result);
+    begin
+       if Do_Yield then
+          Result := sched_yield;
+       end if;
+    end Yield;
+ 
+    ------------------
+    -- Set_Priority --
+    ------------------
+ 
+    procedure Set_Priority
+      (T                   : Task_Id;
+       Prio                : System.Any_Priority;
+       Loss_Of_Inheritance : Boolean := False)
+    is
+       pragma Unreferenced (Loss_Of_Inheritance);
+ 
+       Result : Interfaces.C.int;
+       Param  : aliased struct_sched_param;
+ 
+    begin
+       T.Common.Current_Priority := Prio;
+ 
+       if Priority_Ceiling_Emulation then
+          if T.Common.LL.Active_Priority < Prio then
+             T.Common.LL.Active_Priority := Prio;
+          end if;
+       end if;
+ 
+       --  Priorities are in range 1 .. 99 on GNU/Linux, so we map
+       --  map 0 .. 31 to 1 .. 32
+ 
+       Param.sched_priority := Interfaces.C.int (Prio) + 1;
+ 
+       if Time_Slice_Val > 0 then
+          Result := pthread_setschedparam
+            (T.Common.LL.Thread, SCHED_RR, Param'Access);
+ 
+       elsif FIFO_Within_Priorities or else Time_Slice_Val = 0 then
+          Result := pthread_setschedparam
+            (T.Common.LL.Thread, SCHED_FIFO, Param'Access);
+ 
+       else
+          Param.sched_priority := 0;
+          Result := pthread_setschedparam
+            (T.Common.LL.Thread, SCHED_OTHER, Param'Access);
+       end if;
+ 
+       pragma Assert (Result = 0 or else Result = EPERM);
+    end Set_Priority;
+ 
+    ------------------
+    -- Get_Priority --
+    ------------------
+ 
+    function Get_Priority (T : Task_Id) return System.Any_Priority is
+    begin
+       return T.Common.Current_Priority;
+    end Get_Priority;
+ 
+    ----------------
+    -- Enter_Task --
+    ----------------
+ 
+    procedure Enter_Task (Self_ID : Task_Id) is
+    begin
+       Self_ID.Common.LL.Thread := pthread_self;
+ 
+       Specific.Set (Self_ID);
+ 
+       Lock_RTS;
+ 
+       for J in Known_Tasks'Range loop
+          if Known_Tasks (J) = null then
+             Known_Tasks (J) := Self_ID;
+             Self_ID.Known_Tasks_Index := J;
+             exit;
+          end if;
+       end loop;
+ 
+       Unlock_RTS;
+    end Enter_Task;
+ 
+    --------------
+    -- New_ATCB --
+    --------------
+ 
+    function New_ATCB (Entry_Num : Task_Entry_Index) return Task_Id is
+    begin
+       return new Ada_Task_Control_Block (Entry_Num);
+    end New_ATCB;
+ 
+    -------------------
+    -- Is_Valid_Task --
+    -------------------
+ 
+    function Is_Valid_Task return Boolean renames Specific.Is_Valid_Task;
+ 
+    -----------------------------
+    -- Register_Foreign_Thread --
+    -----------------------------
+ 
+    function Register_Foreign_Thread return Task_Id is
+    begin
+       if Is_Valid_Task then
+          return Self;
+       else
+          return Register_Foreign_Thread (pthread_self);
+       end if;
+    end Register_Foreign_Thread;
+ 
+    --------------------
+    -- Initialize_TCB --
+    --------------------
+ 
+    procedure Initialize_TCB (Self_ID : Task_Id; Succeeded : out Boolean) is
+       Result : Interfaces.C.int;
+ 
+    begin
+       --  Give the task a unique serial number
+ 
+       Self_ID.Serial_Number := Next_Serial_Number;
+       Next_Serial_Number := Next_Serial_Number + 1;
+       pragma Assert (Next_Serial_Number /= 0);
+ 
+       Self_ID.Common.LL.Thread := To_pthread_t (-1);
+ 
+       if not Single_Lock then
+          Result := pthread_mutex_init (Self_ID.Common.LL.L'Access,
+            Mutex_Attr'Access);
+          pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+          if Result /= 0 then
+             Succeeded := False;
+             return;
+          end if;
+       end if;
+ 
+       Result := pthread_cond_init (Self_ID.Common.LL.CV'Access,
+         Cond_Attr'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = 0 then
+          Succeeded := True;
+       else
+          if not Single_Lock then
+             Result := pthread_mutex_destroy (Self_ID.Common.LL.L'Access);
+             pragma Assert (Result = 0);
+          end if;
+ 
+          Succeeded := False;
+       end if;
+    end Initialize_TCB;
+ 
+    -----------------
+    -- Create_Task --
+    -----------------
+ 
+    procedure Create_Task
+      (T          : Task_Id;
+       Wrapper    : System.Address;
+       Stack_Size : System.Parameters.Size_Type;
+       Priority   : System.Any_Priority;
+       Succeeded  : out Boolean)
+    is
+       Adjusted_Stack_Size : Interfaces.C.size_t;
+ 
+       Attributes : aliased pthread_attr_t;
+       Result     : Interfaces.C.int;
+ 
+    begin
+       if Stack_Size = Unspecified_Size then
+          Adjusted_Stack_Size := Interfaces.C.size_t (Default_Stack_Size);
+ 
+       elsif Stack_Size < Minimum_Stack_Size then
+          Adjusted_Stack_Size := Interfaces.C.size_t (Minimum_Stack_Size);
+ 
+       else
+          Adjusted_Stack_Size := Interfaces.C.size_t (Stack_Size);
+       end if;
+ 
+       Result := pthread_attr_init (Attributes'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result /= 0 then
+          Succeeded := False;
+          return;
+       end if;
+ 
+       Result :=
+         pthread_attr_setstacksize
+           (Attributes'Access, Adjusted_Stack_Size);
+       pragma Assert (Result = 0);
+ 
+       Result :=
+         pthread_attr_setdetachstate
+           (Attributes'Access, PTHREAD_CREATE_DETACHED);
+       pragma Assert (Result = 0);
+ 
+       --  Since the initial signal mask of a thread is inherited from the
+       --  creator, and the Environment task has all its signals masked, we
+       --  do not need to manipulate caller's signal mask at this point.
+       --  All tasks in RTS will have All_Tasks_Mask initially.
+ 
+       Result := pthread_create
+         (T.Common.LL.Thread'Access,
+          Attributes'Access,
+          Thread_Body_Access (Wrapper),
+          To_Address (T));
+       pragma Assert (Result = 0 or else Result = EAGAIN);
+ 
+       Succeeded := Result = 0;
+ 
+       Result := pthread_attr_destroy (Attributes'Access);
+       pragma Assert (Result = 0);
+ 
+       Set_Priority (T, Priority);
+    end Create_Task;
+ 
+    ------------------
+    -- Finalize_TCB --
+    ------------------
+ 
+    procedure Finalize_TCB (T : Task_Id) is
+       Result  : Interfaces.C.int;
+       Tmp     : Task_Id := T;
+       Is_Self : constant Boolean := T = Self;
+ 
+       procedure Free is new
+         Unchecked_Deallocation (Ada_Task_Control_Block, Task_Id);
+ 
+    begin
+       if not Single_Lock then
+          Result := pthread_mutex_destroy (T.Common.LL.L'Access);
+          pragma Assert (Result = 0);
+       end if;
+ 
+       Result := pthread_cond_destroy (T.Common.LL.CV'Access);
+       pragma Assert (Result = 0);
+ 
+       if T.Known_Tasks_Index /= -1 then
+          Known_Tasks (T.Known_Tasks_Index) := null;
+       end if;
+ 
+       Free (Tmp);
+ 
+       if Is_Self then
+          Specific.Set (null);
+       end if;
+    end Finalize_TCB;
+ 
+    ---------------
+    -- Exit_Task --
+    ---------------
+ 
+    procedure Exit_Task is
+    begin
+       Specific.Set (null);
+    end Exit_Task;
+ 
+    ----------------
+    -- Abort_Task --
+    ----------------
+ 
+    procedure Abort_Task (T : Task_Id) is
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_kill (T.Common.LL.Thread,
+         Signal (System.Interrupt_Management.Abort_Task_Interrupt));
+       pragma Assert (Result = 0);
+    end Abort_Task;
+ 
+    ----------------
+    -- Check_Exit --
+    ----------------
+ 
+    --  Dummy version
+ 
+    function Check_Exit (Self_ID : ST.Task_Id) return Boolean is
+       pragma Unreferenced (Self_ID);
+    begin
+       return True;
+    end Check_Exit;
+ 
+    --------------------
+    -- Check_No_Locks --
+    --------------------
+ 
+    function Check_No_Locks (Self_ID : ST.Task_Id) return Boolean is
+       pragma Unreferenced (Self_ID);
+    begin
+       return True;
+    end Check_No_Locks;
+ 
+    ----------------------
+    -- Environment_Task --
+    ----------------------
+ 
+    function Environment_Task return Task_Id is
+    begin
+       return Environment_Task_Id;
+    end Environment_Task;
+ 
+    ------------------
+    -- Suspend_Task --
+    ------------------
+ 
+    function Suspend_Task
+      (T           : ST.Task_Id;
+       Thread_Self : Thread_Id) return Boolean
+    is
+    begin
+       if T.Common.LL.Thread /= Thread_Self then
+          return pthread_kill (T.Common.LL.Thread, SIGSTOP) = 0;
+       else
+          return True;
+       end if;
+    end Suspend_Task;
+ 
+    -----------------
+    -- Resume_Task --
+    -----------------
+ 
+    function Resume_Task
+      (T           : ST.Task_Id;
+       Thread_Self : Thread_Id) return Boolean
+    is
+    begin
+       if T.Common.LL.Thread /= Thread_Self then
+          return pthread_kill (T.Common.LL.Thread, SIGCONT) = 0;
+       else
+          return True;
+       end if;
+    end Resume_Task;
+ 
+    ----------------
+    -- Initialize --
+    ----------------
+ 
+    procedure Initialize (Environment_Task : Task_Id) is
+       act     : aliased struct_sigaction;
+       old_act : aliased struct_sigaction;
+       Tmp_Set : aliased sigset_t;
+       Result  : Interfaces.C.int;
+ 
+       function State
+         (Int : System.Interrupt_Management.Interrupt_ID) return Character;
+       pragma Import (C, State, "__gnat_get_interrupt_state");
+       --  Get interrupt state.  Defined in a-init.c
+       --  The input argument is the interrupt number,
+       --  and the result is one of the following:
+ 
+       Default : constant Character := 's';
+       --    'n'   this interrupt not set by any Interrupt_State pragma
+       --    'u'   Interrupt_State pragma set state to User
+       --    'r'   Interrupt_State pragma set state to Runtime
+       --    's'   Interrupt_State pragma set state to System (use "default"
+       --           system handler)
+ 
+    begin
+       Environment_Task_Id := Environment_Task;
+ 
+       Initialize_Lock (Single_RTS_Lock'Access, RTS_Lock_Level);
+ 
+       --  Initialize the global RTS lock
+ 
+       Specific.Initialize (Environment_Task);
+ 
+       Enter_Task (Environment_Task);
+ 
+       --  Install the abort-signal handler
+ 
+       if State (System.Interrupt_Management.Abort_Task_Interrupt)
+         /= Default
+       then
+          act.sa_flags := 0;
+          act.sa_handler := Abort_Handler'Address;
+ 
+          Result := sigemptyset (Tmp_Set'Access);
+          pragma Assert (Result = 0);
+          act.sa_mask := Tmp_Set;
+ 
+          Result :=
+            sigaction
+            (Signal (Interrupt_Management.Abort_Task_Interrupt),
+             act'Unchecked_Access,
+             old_act'Unchecked_Access);
+          pragma Assert (Result = 0);
+       end if;
+    end Initialize;
+ 
+ begin
+    declare
+       Result : Interfaces.C.int;
+ 
+    begin
+       --  Mask Environment task for all signals. The original mask of the
+       --  Environment task will be recovered by Interrupt_Server task
+       --  during the elaboration of s-interr.adb.
+ 
+       System.Interrupt_Management.Operations.Set_Interrupt_Mask
+         (System.Interrupt_Management.Operations.All_Tasks_Mask'Access);
+ 
+       --  Prepare the set of signals that should unblocked in all tasks
+ 
+       Result := sigemptyset (Unblocked_Signal_Mask'Access);
+       pragma Assert (Result = 0);
+ 
+       for J in Interrupt_Management.Interrupt_ID loop
+          if System.Interrupt_Management.Keep_Unmasked (J) then
+             Result := sigaddset (Unblocked_Signal_Mask'Access, Signal (J));
+             pragma Assert (Result = 0);
+          end if;
+       end loop;
+ 
+       Result := pthread_mutexattr_init (Mutex_Attr'Access);
+       pragma Assert (Result = 0);
+ 
+       Result := pthread_condattr_init (Cond_Attr'Access);
+       pragma Assert (Result = 0);
+    end;
+ end System.Task_Primitives.Operations;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-taprop-lynxos.adb gcc-4.0.0/gcc/ada/s-taprop-lynxos.adb
*** gcc-3.4.3/gcc/ada/s-taprop-lynxos.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-taprop-lynxos.adb	Tue Jul  6 13:57:29 2004
***************
*** 0 ****
--- 1,1184 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --     S Y S T E M . T A S K _ P R I M I T I V E S . O P E R A T I O N S    --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --         Copyright (C) 1992-2004, Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a LynxOS version of this file, adapted to make
+ --  SCHED_FIFO and ceiling locking (Annex D compliance) work properly
+ 
+ --  This package contains all the GNULL primitives that interface directly
+ --  with the underlying OS.
+ 
+ pragma Polling (Off);
+ --  Turn off polling, we do not want ATC polling to take place during
+ --  tasking operations. It causes infinite loops and other problems.
+ 
+ with System.Tasking.Debug;
+ --  used for Known_Tasks
+ 
+ with System.Task_Info;
+ --  used for Task_Info_Type
+ 
+ with Interfaces.C;
+ --  used for int
+ --           size_t
+ 
+ with System.Interrupt_Management;
+ --  used for Keep_Unmasked
+ --           Abort_Task_Interrupt
+ --           Interrupt_ID
+ 
+ with System.Interrupt_Management.Operations;
+ --  used for Set_Interrupt_Mask
+ --           All_Tasks_Mask
+ pragma Elaborate_All (System.Interrupt_Management.Operations);
+ 
+ with System.Parameters;
+ --  used for Size_Type
+ 
+ with System.Tasking;
+ --  used for Ada_Task_Control_Block
+ --           Task_Id
+ 
+ with System.Soft_Links;
+ --  used for Defer/Undefer_Abort
+ 
+ --  Note that we do not use System.Tasking.Initialization directly since
+ --  this is a higher level package that we shouldn't depend on. For example
+ --  when using the restricted run time, it is replaced by
+ --  System.Tasking.Restricted.Stages.
+ 
+ with System.OS_Primitives;
+ --  used for Delay_Modes
+ 
+ with Unchecked_Deallocation;
+ 
+ package body System.Task_Primitives.Operations is
+ 
+    use System.Tasking.Debug;
+    use System.Tasking;
+    use Interfaces.C;
+    use System.OS_Interface;
+    use System.Parameters;
+    use System.OS_Primitives;
+ 
+    package SSL renames System.Soft_Links;
+ 
+    ----------------
+    -- Local Data --
+    ----------------
+ 
+    --  The followings are logically constants, but need to be initialized
+    --  at run time.
+ 
+    Single_RTS_Lock : aliased RTS_Lock;
+    --  This is a lock to allow only one thread of control in the RTS at
+    --  a time; it is used to execute in mutual exclusion from all other tasks.
+    --  Used mainly in Single_Lock mode, but also to protect All_Tasks_List
+ 
+    ATCB_Key : aliased pthread_key_t;
+    --  Key used to find the Ada Task_Id associated with a thread
+ 
+    Environment_Task_Id : Task_Id;
+    --  A variable to hold Task_Id for the environment task.
+ 
+    Locking_Policy : Character;
+    pragma Import (C, Locking_Policy, "__gl_locking_policy");
+    --  Value of the pragma Locking_Policy:
+    --    'C' for Ceiling_Locking
+    --    'I' for Inherit_Locking
+    --    ' ' for none.
+ 
+    Unblocked_Signal_Mask : aliased sigset_t;
+    --  The set of signals that should unblocked in all tasks
+ 
+    --  The followings are internal configuration constants needed.
+ 
+    Next_Serial_Number : Task_Serial_Number := 100;
+    --  We start at 100, to reserve some special values for
+    --  using in error checking.
+ 
+    Time_Slice_Val : Integer;
+    pragma Import (C, Time_Slice_Val, "__gl_time_slice_val");
+ 
+    Dispatching_Policy : Character;
+    pragma Import (C, Dispatching_Policy, "__gl_task_dispatching_policy");
+ 
+    FIFO_Within_Priorities : constant Boolean := Dispatching_Policy = 'F';
+    --  Indicates whether FIFO_Within_Priorities is set.
+ 
+    Foreign_Task_Elaborated : aliased Boolean := True;
+    --  Used to identified fake tasks (i.e., non-Ada Threads).
+ 
+    --------------------
+    -- Local Packages --
+    --------------------
+ 
+    package Specific is
+ 
+       procedure Initialize (Environment_Task : Task_Id);
+       pragma Inline (Initialize);
+       --  Initialize various data needed by this package.
+ 
+       function Is_Valid_Task return Boolean;
+       pragma Inline (Is_Valid_Task);
+       --  Does the current thread have an ATCB?
+ 
+       procedure Set (Self_Id : Task_Id);
+       pragma Inline (Set);
+       --  Set the self id for the current task.
+ 
+       function Self return Task_Id;
+       pragma Inline (Self);
+       --  Return a pointer to the Ada Task Control Block of the calling task.
+ 
+    end Specific;
+ 
+    package body Specific is separate;
+    --  The body of this package is target specific.
+ 
+    ---------------------------------
+    -- Support for foreign threads --
+    ---------------------------------
+ 
+    function Register_Foreign_Thread (Thread : Thread_Id) return Task_Id;
+    --  Allocate and Initialize a new ATCB for the current Thread.
+ 
+    function Register_Foreign_Thread
+      (Thread : Thread_Id) return Task_Id is separate;
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    procedure Abort_Handler (Sig : Signal);
+    --  Signal handler used to implement asynchronous abort.
+ 
+    procedure Set_OS_Priority (T : Task_Id; Prio : System.Any_Priority);
+    --  This procedure calls the scheduler of the OS to set thread's priority
+ 
+    -------------------
+    -- Abort_Handler --
+    -------------------
+ 
+    procedure Abort_Handler (Sig : Signal) is
+       pragma Unreferenced (Sig);
+ 
+       T       : constant Task_Id := Self;
+       Result  : Interfaces.C.int;
+       Old_Set : aliased sigset_t;
+ 
+    begin
+       --  It is not safe to raise an exception when using ZCX and the GCC
+       --  exception handling mechanism.
+ 
+       if ZCX_By_Default and then GCC_ZCX_Support then
+          return;
+       end if;
+ 
+       if T.Deferral_Level = 0
+         and then T.Pending_ATC_Level < T.ATC_Nesting_Level and then
+         not T.Aborting
+       then
+          T.Aborting := True;
+ 
+          --  Make sure signals used for RTS internal purpose are unmasked
+ 
+          Result :=
+            pthread_sigmask (SIG_UNBLOCK,
+                             Unblocked_Signal_Mask'Unchecked_Access,
+                             Old_Set'Unchecked_Access);
+          pragma Assert (Result = 0);
+ 
+          raise Standard'Abort_Signal;
+       end if;
+    end Abort_Handler;
+ 
+    -----------------
+    -- Stack_Guard --
+    -----------------
+ 
+    procedure Stack_Guard (T : ST.Task_Id; On : Boolean) is
+       Stack_Base : constant Address := Get_Stack_Base (T.Common.LL.Thread);
+       Guard_Page_Address : Address;
+ 
+       Res : Interfaces.C.int;
+ 
+    begin
+       if Stack_Base_Available then
+ 
+          --  Compute the guard page address
+ 
+          Guard_Page_Address :=
+            Stack_Base - (Stack_Base mod Get_Page_Size) + Get_Page_Size;
+ 
+          if On then
+             Res := mprotect (Guard_Page_Address, Get_Page_Size, PROT_ON);
+          else
+             Res := mprotect (Guard_Page_Address, Get_Page_Size, PROT_OFF);
+          end if;
+ 
+          pragma Assert (Res = 0);
+       end if;
+    end Stack_Guard;
+ 
+    --------------------
+    -- Get_Thread_Id  --
+    --------------------
+ 
+    function Get_Thread_Id (T : ST.Task_Id) return OSI.Thread_Id is
+    begin
+       return T.Common.LL.Thread;
+    end Get_Thread_Id;
+ 
+    ----------
+    -- Self --
+    ----------
+ 
+    function Self return Task_Id renames Specific.Self;
+ 
+    ---------------------
+    -- Initialize_Lock --
+    ---------------------
+ 
+    procedure Initialize_Lock
+      (Prio : System.Any_Priority;
+       L    : access Lock)
+    is
+       Attributes : aliased pthread_mutexattr_t;
+       Result : Interfaces.C.int;
+ 
+    begin
+       Result := pthread_mutexattr_init (Attributes'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = ENOMEM then
+          raise Storage_Error;
+       end if;
+ 
+       if Locking_Policy = 'C' then
+          L.Ceiling := Prio;
+       end if;
+ 
+       Result := pthread_mutex_init (L.Mutex'Access, Attributes'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = ENOMEM then
+          raise Storage_Error;
+       end if;
+ 
+       Result := pthread_mutexattr_destroy (Attributes'Access);
+       pragma Assert (Result = 0);
+    end Initialize_Lock;
+ 
+    procedure Initialize_Lock (L : access RTS_Lock; Level : Lock_Level) is
+       pragma Unreferenced (Level);
+ 
+       Attributes : aliased pthread_mutexattr_t;
+       Result : Interfaces.C.int;
+ 
+    begin
+       Result := pthread_mutexattr_init (Attributes'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = ENOMEM then
+          raise Storage_Error;
+       end if;
+ 
+       Result := pthread_mutex_init (L, Attributes'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = ENOMEM then
+          Result := pthread_mutexattr_destroy (Attributes'Access);
+          raise Storage_Error;
+       end if;
+ 
+       Result := pthread_mutexattr_destroy (Attributes'Access);
+       pragma Assert (Result = 0);
+    end Initialize_Lock;
+ 
+    -------------------
+    -- Finalize_Lock --
+    -------------------
+ 
+    procedure Finalize_Lock (L : access Lock) is
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_mutex_destroy (L.Mutex'Access);
+       pragma Assert (Result = 0);
+    end Finalize_Lock;
+ 
+    procedure Finalize_Lock (L : access RTS_Lock) is
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_mutex_destroy (L);
+       pragma Assert (Result = 0);
+    end Finalize_Lock;
+ 
+    ----------------
+    -- Write_Lock --
+    ----------------
+ 
+    procedure Write_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
+       Result : Interfaces.C.int;
+       T : constant Task_Id := Self;
+ 
+    begin
+       if Locking_Policy = 'C' then
+          if T.Common.Current_Priority > L.Ceiling then
+             Ceiling_Violation := True;
+             return;
+          end if;
+ 
+          L.Saved_Priority := T.Common.Current_Priority;
+ 
+          if T.Common.Current_Priority < L.Ceiling then
+             Set_OS_Priority (T, L.Ceiling);
+          end if;
+       end if;
+ 
+       Result := pthread_mutex_lock (L.Mutex'Access);
+ 
+       --  Assume that the cause of EINVAL is a priority ceiling violation
+ 
+       Ceiling_Violation := (Result = EINVAL);
+       pragma Assert (Result = 0 or else Result = EINVAL);
+    end Write_Lock;
+ 
+    --  No tricks on RTS_Locks
+ 
+    procedure Write_Lock
+      (L : access RTS_Lock; Global_Lock : Boolean := False)
+    is
+       Result : Interfaces.C.int;
+    begin
+       if not Single_Lock or else Global_Lock then
+          Result := pthread_mutex_lock (L);
+          pragma Assert (Result = 0);
+       end if;
+    end Write_Lock;
+ 
+    procedure Write_Lock (T : Task_Id) is
+       Result : Interfaces.C.int;
+    begin
+       if not Single_Lock then
+          Result := pthread_mutex_lock (T.Common.LL.L'Access);
+          pragma Assert (Result = 0);
+       end if;
+    end Write_Lock;
+ 
+    ---------------
+    -- Read_Lock --
+    ---------------
+ 
+    procedure Read_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
+    begin
+       Write_Lock (L, Ceiling_Violation);
+    end Read_Lock;
+ 
+    ------------
+    -- Unlock --
+    ------------
+ 
+    procedure Unlock (L : access Lock) is
+       Result : Interfaces.C.int;
+       T : constant Task_Id := Self;
+ 
+    begin
+       Result := pthread_mutex_unlock (L.Mutex'Access);
+       pragma Assert (Result = 0);
+ 
+       if Locking_Policy = 'C' then
+          if T.Common.Current_Priority > L.Saved_Priority then
+             Set_OS_Priority (T, L.Saved_Priority);
+          end if;
+       end if;
+    end Unlock;
+ 
+    procedure Unlock (L : access RTS_Lock; Global_Lock : Boolean := False) is
+       Result : Interfaces.C.int;
+    begin
+       if not Single_Lock or else Global_Lock then
+          Result := pthread_mutex_unlock (L);
+          pragma Assert (Result = 0);
+       end if;
+    end Unlock;
+ 
+    procedure Unlock (T : Task_Id) is
+       Result : Interfaces.C.int;
+    begin
+       if not Single_Lock then
+          Result := pthread_mutex_unlock (T.Common.LL.L'Access);
+          pragma Assert (Result = 0);
+       end if;
+    end Unlock;
+ 
+    -----------
+    -- Sleep --
+    -----------
+ 
+    procedure Sleep
+      (Self_ID : Task_Id;
+       Reason   : System.Tasking.Task_States)
+    is
+       pragma Unreferenced (Reason);
+       Result : Interfaces.C.int;
+ 
+    begin
+       if Single_Lock then
+          Result := pthread_cond_wait
+            (Self_ID.Common.LL.CV'Access, Single_RTS_Lock'Access);
+       else
+          Result := pthread_cond_wait
+            (Self_ID.Common.LL.CV'Access, Self_ID.Common.LL.L'Access);
+       end if;
+ 
+       --  EINTR is not considered a failure
+ 
+       pragma Assert (Result = 0 or else Result = EINTR);
+    end Sleep;
+ 
+    -----------------
+    -- Timed_Sleep --
+    -----------------
+ 
+    --  This is for use within the run-time system, so abort is
+    --  assumed to be already deferred, and the caller should be
+    --  holding its own ATCB lock.
+ 
+    procedure Timed_Sleep
+      (Self_ID  : Task_Id;
+       Time     : Duration;
+       Mode     : ST.Delay_Modes;
+       Reason   : Task_States;
+       Timedout : out Boolean;
+       Yielded  : out Boolean)
+    is
+       pragma Unreferenced (Reason);
+ 
+       Check_Time : constant Duration := Monotonic_Clock;
+       Rel_Time   : Duration;
+       Abs_Time   : Duration;
+       Request    : aliased timespec;
+       Result     : Interfaces.C.int;
+ 
+    begin
+       Timedout := True;
+       Yielded := False;
+ 
+       if Mode = Relative then
+          Abs_Time := Duration'Min (Time, Max_Sensible_Delay) + Check_Time;
+ 
+          if Relative_Timed_Wait then
+             Rel_Time := Duration'Min (Max_Sensible_Delay, Time);
+          end if;
+ 
+       else
+          Abs_Time := Duration'Min (Check_Time + Max_Sensible_Delay, Time);
+ 
+          if Relative_Timed_Wait then
+             Rel_Time := Duration'Min (Max_Sensible_Delay, Time - Check_Time);
+          end if;
+       end if;
+ 
+       if Abs_Time > Check_Time then
+          if Relative_Timed_Wait then
+             Request := To_Timespec (Rel_Time);
+          else
+             Request := To_Timespec (Abs_Time);
+          end if;
+ 
+          loop
+             exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level
+               or else Self_ID.Pending_Priority_Change;
+ 
+             if Single_Lock then
+                Result := pthread_cond_timedwait
+                  (Self_ID.Common.LL.CV'Access, Single_RTS_Lock'Access,
+                   Request'Access);
+ 
+             else
+                Result := pthread_cond_timedwait
+                  (Self_ID.Common.LL.CV'Access, Self_ID.Common.LL.L'Access,
+                   Request'Access);
+             end if;
+ 
+             exit when Abs_Time <= Monotonic_Clock;
+ 
+             if Result = 0 or Result = EINTR then
+ 
+                --  Somebody may have called Wakeup for us
+ 
+                Timedout := False;
+                exit;
+             end if;
+ 
+             pragma Assert (Result = ETIMEDOUT);
+          end loop;
+       end if;
+    end Timed_Sleep;
+ 
+    -----------------
+    -- Timed_Delay --
+    -----------------
+ 
+    --  This is for use in implementing delay statements, so we assume
+    --  the caller is abort-deferred but is holding no locks.
+ 
+    procedure Timed_Delay
+      (Self_ID  : Task_Id;
+       Time     : Duration;
+       Mode     : ST.Delay_Modes)
+    is
+       Check_Time : constant Duration := Monotonic_Clock;
+       Abs_Time   : Duration;
+       Rel_Time   : Duration;
+       Request    : aliased timespec;
+       Result     : Interfaces.C.int;
+ 
+    begin
+       --  Only the little window between deferring abort and
+       --  locking Self_ID is the reason we need to
+       --  check for pending abort and priority change below!
+ 
+       SSL.Abort_Defer.all;
+ 
+       if Single_Lock then
+          Lock_RTS;
+       end if;
+ 
+       --  Comments needed in code below ???
+ 
+       Write_Lock (Self_ID);
+ 
+       if Mode = Relative then
+          Abs_Time := Duration'Min (Time, Max_Sensible_Delay) + Check_Time;
+ 
+          if Relative_Timed_Wait then
+             Rel_Time := Duration'Min (Max_Sensible_Delay, Time);
+          end if;
+ 
+       else
+          Abs_Time := Duration'Min (Check_Time + Max_Sensible_Delay, Time);
+ 
+          if Relative_Timed_Wait then
+             Rel_Time := Duration'Min (Max_Sensible_Delay, Time - Check_Time);
+          end if;
+       end if;
+ 
+       if Abs_Time > Check_Time then
+          if Relative_Timed_Wait then
+             Request := To_Timespec (Rel_Time);
+          else
+             Request := To_Timespec (Abs_Time);
+          end if;
+ 
+          Self_ID.Common.State := Delay_Sleep;
+ 
+          loop
+             if Self_ID.Pending_Priority_Change then
+                Self_ID.Pending_Priority_Change := False;
+                Self_ID.Common.Base_Priority := Self_ID.New_Base_Priority;
+                Set_Priority (Self_ID, Self_ID.Common.Base_Priority);
+             end if;
+ 
+             exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level;
+ 
+             if Single_Lock then
+                Result := pthread_cond_timedwait (Self_ID.Common.LL.CV'Access,
+                  Single_RTS_Lock'Access, Request'Access);
+             else
+                Result := pthread_cond_timedwait (Self_ID.Common.LL.CV'Access,
+                  Self_ID.Common.LL.L'Access, Request'Access);
+             end if;
+ 
+             exit when Abs_Time <= Monotonic_Clock;
+ 
+             pragma Assert (Result = 0
+                              or else Result = ETIMEDOUT
+                              or else Result = EINTR);
+          end loop;
+ 
+          Self_ID.Common.State := Runnable;
+       end if;
+ 
+       Unlock (Self_ID);
+ 
+       if Single_Lock then
+          Unlock_RTS;
+       end if;
+ 
+       Result := sched_yield;
+       SSL.Abort_Undefer.all;
+    end Timed_Delay;
+ 
+    ---------------------
+    -- Monotonic_Clock --
+    ---------------------
+ 
+    function Monotonic_Clock return Duration is
+       TS     : aliased timespec;
+       Result : Interfaces.C.int;
+    begin
+       Result := clock_gettime
+         (clock_id => CLOCK_REALTIME, tp => TS'Unchecked_Access);
+       pragma Assert (Result = 0);
+       return To_Duration (TS);
+    end Monotonic_Clock;
+ 
+    -------------------
+    -- RT_Resolution --
+    -------------------
+ 
+    function RT_Resolution return Duration is
+       Res    : aliased timespec;
+       Result : Interfaces.C.int;
+    begin
+       Result := clock_getres
+         (clock_id => CLOCK_REALTIME, Res => Res'Unchecked_Access);
+       pragma Assert (Result = 0);
+       return To_Duration (Res);
+    end RT_Resolution;
+ 
+    ------------
+    -- Wakeup --
+    ------------
+ 
+    procedure Wakeup (T : Task_Id; Reason : System.Tasking.Task_States) is
+       pragma Unreferenced (Reason);
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_cond_signal (T.Common.LL.CV'Access);
+       pragma Assert (Result = 0);
+    end Wakeup;
+ 
+    -----------
+    -- Yield --
+    -----------
+ 
+    procedure Yield (Do_Yield : Boolean := True) is
+       Result : Interfaces.C.int;
+       pragma Unreferenced (Result);
+    begin
+       if Do_Yield then
+          Result := sched_yield;
+       end if;
+    end Yield;
+ 
+    ------------------
+    -- Set_Priority --
+    ------------------
+ 
+    procedure Set_OS_Priority (T : Task_Id; Prio : System.Any_Priority) is
+       Result : Interfaces.C.int;
+       Param  : aliased struct_sched_param;
+ 
+    begin
+       Param.sched_priority := Interfaces.C.int (Prio);
+ 
+       if Time_Slice_Supported and then Time_Slice_Val > 0 then
+          Result := pthread_setschedparam
+            (T.Common.LL.Thread, SCHED_RR, Param'Access);
+ 
+       elsif FIFO_Within_Priorities or else Time_Slice_Val = 0 then
+          Result := pthread_setschedparam
+            (T.Common.LL.Thread, SCHED_FIFO, Param'Access);
+ 
+       else
+          Result := pthread_setschedparam
+            (T.Common.LL.Thread, SCHED_OTHER, Param'Access);
+       end if;
+ 
+       pragma Assert (Result = 0);
+    end Set_OS_Priority;
+ 
+    type Prio_Array_Type is array (System.Any_Priority) of Integer;
+    pragma Atomic_Components (Prio_Array_Type);
+    Prio_Array : Prio_Array_Type;
+    --  Comments needed for these declarations ???
+ 
+    procedure Set_Priority
+      (T                   : Task_Id;
+       Prio                : System.Any_Priority;
+       Loss_Of_Inheritance : Boolean := False)
+    is
+       Array_Item : Integer;
+ 
+    begin
+       Set_OS_Priority (T, Prio);
+ 
+       if Locking_Policy = 'C' then
+          --  Annex D requirements: loss of inheritance puts task at the
+          --  beginning of the queue for that prio; copied from 5ztaprop
+          --  (VxWorks)
+ 
+          if Loss_Of_Inheritance
+            and then Prio < T.Common.Current_Priority then
+ 
+             Array_Item := Prio_Array (T.Common.Base_Priority) + 1;
+             Prio_Array (T.Common.Base_Priority) := Array_Item;
+ 
+             loop
+                Yield;
+                exit when Array_Item = Prio_Array (T.Common.Base_Priority)
+                  or else Prio_Array (T.Common.Base_Priority) = 1;
+             end loop;
+ 
+             Prio_Array (T.Common.Base_Priority) :=
+               Prio_Array (T.Common.Base_Priority) - 1;
+          end if;
+       end if;
+ 
+       T.Common.Current_Priority := Prio;
+    end Set_Priority;
+ 
+    ------------------
+    -- Get_Priority --
+    ------------------
+ 
+    function Get_Priority (T : Task_Id) return System.Any_Priority is
+    begin
+       return T.Common.Current_Priority;
+    end Get_Priority;
+ 
+    ----------------
+    -- Enter_Task --
+    ----------------
+ 
+    procedure Enter_Task (Self_ID : Task_Id) is
+    begin
+       Self_ID.Common.LL.Thread := pthread_self;
+       Self_ID.Common.LL.LWP := lwp_self;
+ 
+       Specific.Set (Self_ID);
+ 
+       Lock_RTS;
+ 
+       for J in Known_Tasks'Range loop
+          if Known_Tasks (J) = null then
+             Known_Tasks (J) := Self_ID;
+             Self_ID.Known_Tasks_Index := J;
+             exit;
+          end if;
+       end loop;
+ 
+       Unlock_RTS;
+    end Enter_Task;
+ 
+    --------------
+    -- New_ATCB --
+    --------------
+ 
+    function New_ATCB (Entry_Num : Task_Entry_Index) return Task_Id is
+    begin
+       return new Ada_Task_Control_Block (Entry_Num);
+    end New_ATCB;
+ 
+    -------------------
+    -- Is_Valid_Task --
+    -------------------
+ 
+    function Is_Valid_Task return Boolean renames Specific.Is_Valid_Task;
+ 
+    -----------------------------
+    -- Register_Foreign_Thread --
+    -----------------------------
+ 
+    function Register_Foreign_Thread return Task_Id is
+    begin
+       if Is_Valid_Task then
+          return Self;
+       else
+          return Register_Foreign_Thread (pthread_self);
+       end if;
+    end Register_Foreign_Thread;
+ 
+    --------------------
+    -- Initialize_TCB --
+    --------------------
+ 
+    procedure Initialize_TCB (Self_ID : Task_Id; Succeeded : out Boolean) is
+       Mutex_Attr : aliased pthread_mutexattr_t;
+       Result     : Interfaces.C.int;
+       Cond_Attr  : aliased pthread_condattr_t;
+ 
+    begin
+       --  Give the task a unique serial number
+ 
+       Self_ID.Serial_Number := Next_Serial_Number;
+       Next_Serial_Number := Next_Serial_Number + 1;
+       pragma Assert (Next_Serial_Number /= 0);
+ 
+       if not Single_Lock then
+          Result := pthread_mutexattr_init (Mutex_Attr'Access);
+          pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+          if Result = 0 then
+             Result := pthread_mutex_init (Self_ID.Common.LL.L'Access,
+               Mutex_Attr'Access);
+             pragma Assert (Result = 0 or else Result = ENOMEM);
+          end if;
+ 
+          if Result /= 0 then
+             Succeeded := False;
+             return;
+          end if;
+ 
+          Result := pthread_mutexattr_destroy (Mutex_Attr'Access);
+          pragma Assert (Result = 0);
+       end if;
+ 
+       Result := pthread_condattr_init (Cond_Attr'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = 0 then
+          Result := pthread_cond_init (Self_ID.Common.LL.CV'Access,
+            Cond_Attr'Access);
+          pragma Assert (Result = 0 or else Result = ENOMEM);
+       end if;
+ 
+       if Result = 0 then
+          Succeeded := True;
+       else
+          if not Single_Lock then
+             Result := pthread_mutex_destroy (Self_ID.Common.LL.L'Access);
+             pragma Assert (Result = 0);
+          end if;
+ 
+          Succeeded := False;
+       end if;
+ 
+       Result := pthread_condattr_destroy (Cond_Attr'Access);
+       pragma Assert (Result = 0);
+    end Initialize_TCB;
+ 
+    -----------------
+    -- Create_Task --
+    -----------------
+ 
+    procedure Create_Task
+      (T          : Task_Id;
+       Wrapper    : System.Address;
+       Stack_Size : System.Parameters.Size_Type;
+       Priority   : System.Any_Priority;
+       Succeeded  : out Boolean)
+    is
+       Attributes          : aliased pthread_attr_t;
+       Adjusted_Stack_Size : Interfaces.C.size_t;
+       Result              : Interfaces.C.int;
+ 
+       use System.Task_Info;
+ 
+    begin
+       if Stack_Size = Unspecified_Size then
+          Adjusted_Stack_Size := Interfaces.C.size_t (Default_Stack_Size);
+ 
+       elsif Stack_Size < Minimum_Stack_Size then
+          Adjusted_Stack_Size := Interfaces.C.size_t (Minimum_Stack_Size);
+ 
+       else
+          Adjusted_Stack_Size := Interfaces.C.size_t (Stack_Size);
+       end if;
+ 
+       if Stack_Base_Available then
+ 
+          --  If Stack Checking is supported then allocate 2 additional pages:
+          --
+          --  In the worst case, stack is allocated at something like
+          --  N * Get_Page_Size - epsilon, we need to add the size for 2 pages
+          --  to be sure the effective stack size is greater than what
+          --  has been asked.
+ 
+          Adjusted_Stack_Size := Adjusted_Stack_Size + 2 * Get_Page_Size;
+       end if;
+ 
+       Result := pthread_attr_init (Attributes'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result /= 0 then
+          Succeeded := False;
+          return;
+       end if;
+ 
+       Result := pthread_attr_setdetachstate
+         (Attributes'Access, PTHREAD_CREATE_DETACHED);
+       pragma Assert (Result = 0);
+ 
+       Result := pthread_attr_setstacksize
+         (Attributes'Access, Adjusted_Stack_Size);
+       pragma Assert (Result = 0);
+ 
+       if T.Common.Task_Info /= Default_Scope then
+ 
+          --  We are assuming that Scope_Type has the same values than the
+          --  corresponding C macros
+ 
+          Result := pthread_attr_setscope
+            (Attributes'Access, Task_Info_Type'Pos (T.Common.Task_Info));
+          pragma Assert (Result = 0);
+       end if;
+ 
+       --  Since the initial signal mask of a thread is inherited from the
+       --  creator, and the Environment task has all its signals masked, we
+       --  do not need to manipulate caller's signal mask at this point.
+       --  All tasks in RTS will have All_Tasks_Mask initially.
+ 
+       Result := pthread_create
+         (T.Common.LL.Thread'Access,
+          Attributes'Access,
+          Thread_Body_Access (Wrapper),
+          To_Address (T));
+       pragma Assert (Result = 0 or else Result = EAGAIN);
+ 
+       Succeeded := Result = 0;
+ 
+       Result := pthread_attr_destroy (Attributes'Access);
+       pragma Assert (Result = 0);
+ 
+       Set_Priority (T, Priority);
+    end Create_Task;
+ 
+    ------------------
+    -- Finalize_TCB --
+    ------------------
+ 
+    procedure Finalize_TCB (T : Task_Id) is
+       Result : Interfaces.C.int;
+       Tmp    : Task_Id := T;
+       Is_Self : constant Boolean := T = Self;
+ 
+       procedure Free is new
+         Unchecked_Deallocation (Ada_Task_Control_Block, Task_Id);
+ 
+    begin
+       if not Single_Lock then
+          Result := pthread_mutex_destroy (T.Common.LL.L'Access);
+          pragma Assert (Result = 0);
+       end if;
+ 
+       Result := pthread_cond_destroy (T.Common.LL.CV'Access);
+       pragma Assert (Result = 0);
+ 
+       if T.Known_Tasks_Index /= -1 then
+          Known_Tasks (T.Known_Tasks_Index) := null;
+       end if;
+ 
+       Free (Tmp);
+ 
+       if Is_Self then
+          Result := st_setspecific (ATCB_Key, System.Null_Address);
+          pragma Assert (Result = 0);
+       end if;
+ 
+    end Finalize_TCB;
+ 
+    ---------------
+    -- Exit_Task --
+    ---------------
+ 
+    procedure Exit_Task is
+    begin
+       Specific.Set (null);
+    end Exit_Task;
+ 
+    ----------------
+    -- Abort_Task --
+    ----------------
+ 
+    procedure Abort_Task (T : Task_Id) is
+       Result : Interfaces.C.int;
+    begin
+       Result :=
+         pthread_kill
+           (T.Common.LL.Thread,
+            Signal (System.Interrupt_Management.Abort_Task_Interrupt));
+       pragma Assert (Result = 0);
+    end Abort_Task;
+ 
+    ----------------
+    -- Check_Exit --
+    ----------------
+ 
+    --  Dummy versions
+ 
+    function Check_Exit (Self_ID : ST.Task_Id) return Boolean is
+       pragma Unreferenced (Self_ID);
+    begin
+       return True;
+    end Check_Exit;
+ 
+    --------------------
+    -- Check_No_Locks --
+    --------------------
+ 
+    function Check_No_Locks (Self_ID : ST.Task_Id) return Boolean is
+       pragma Unreferenced (Self_ID);
+    begin
+       return True;
+    end Check_No_Locks;
+ 
+    ----------------------
+    -- Environment_Task --
+    ----------------------
+ 
+    function Environment_Task return Task_Id is
+    begin
+       return Environment_Task_Id;
+    end Environment_Task;
+ 
+    --------------
+    -- Lock_RTS --
+    --------------
+ 
+    procedure Lock_RTS is
+    begin
+       Write_Lock (Single_RTS_Lock'Access, Global_Lock => True);
+    end Lock_RTS;
+ 
+    ----------------
+    -- Unlock_RTS --
+    ----------------
+ 
+    procedure Unlock_RTS is
+    begin
+       Unlock (Single_RTS_Lock'Access, Global_Lock => True);
+    end Unlock_RTS;
+ 
+    ------------------
+    -- Suspend_Task --
+    ------------------
+ 
+    function Suspend_Task
+      (T           : ST.Task_Id;
+       Thread_Self : Thread_Id) return Boolean
+    is
+       pragma Unreferenced (T);
+       pragma Unreferenced (Thread_Self);
+    begin
+       return False;
+    end Suspend_Task;
+ 
+    -----------------
+    -- Resume_Task --
+    -----------------
+ 
+    function Resume_Task
+      (T           : ST.Task_Id;
+       Thread_Self : Thread_Id) return Boolean
+    is
+       pragma Unreferenced (T);
+       pragma Unreferenced (Thread_Self);
+    begin
+       return False;
+    end Resume_Task;
+ 
+    ----------------
+    -- Initialize --
+    ----------------
+ 
+    procedure Initialize (Environment_Task : Task_Id) is
+       act     : aliased struct_sigaction;
+       old_act : aliased struct_sigaction;
+       Tmp_Set : aliased sigset_t;
+       Result  : Interfaces.C.int;
+ 
+       function State
+         (Int  : System.Interrupt_Management.Interrupt_ID) return Character;
+       pragma Import (C, State, "__gnat_get_interrupt_state");
+       --  Get interrupt state.  Defined in a-init.c
+       --  The input argument is the interrupt number,
+       --  and the result is one of the following:
+ 
+       Default : constant Character := 's';
+       --    'n'   this interrupt not set by any Interrupt_State pragma
+       --    'u'   Interrupt_State pragma set state to User
+       --    'r'   Interrupt_State pragma set state to Runtime
+       --    's'   Interrupt_State pragma set state to System (use "default"
+       --           system handler)
+ 
+    begin
+       Environment_Task_Id := Environment_Task;
+ 
+       --  Initialize the lock used to synchronize chain of all ATCBs.
+ 
+       Initialize_Lock (Single_RTS_Lock'Access, RTS_Lock_Level);
+ 
+       Specific.Initialize (Environment_Task);
+ 
+       Enter_Task (Environment_Task);
+ 
+       --  Install the abort-signal handler
+ 
+       if State (System.Interrupt_Management.Abort_Task_Interrupt)
+                                                      /= Default
+       then
+          act.sa_flags := 0;
+          act.sa_handler := Abort_Handler'Address;
+ 
+          Result := sigemptyset (Tmp_Set'Access);
+          pragma Assert (Result = 0);
+          act.sa_mask := Tmp_Set;
+ 
+          Result :=
+            sigaction
+            (Signal (System.Interrupt_Management.Abort_Task_Interrupt),
+             act'Unchecked_Access,
+             old_act'Unchecked_Access);
+ 
+          pragma Assert (Result = 0);
+       end if;
+    end Initialize;
+ 
+ begin
+    declare
+       Result : Interfaces.C.int;
+ 
+    begin
+       --  Mask Environment task for all signals. The original mask of the
+       --  Environment task will be recovered by Interrupt_Server task
+       --  during the elaboration of s-interr.adb.
+ 
+       System.Interrupt_Management.Operations.Set_Interrupt_Mask
+         (System.Interrupt_Management.Operations.All_Tasks_Mask'Access);
+ 
+       --  Prepare the set of signals that should unblocked in all tasks
+ 
+       Result := sigemptyset (Unblocked_Signal_Mask'Access);
+       pragma Assert (Result = 0);
+ 
+       for J in Interrupt_Management.Interrupt_ID loop
+          if System.Interrupt_Management.Keep_Unmasked (J) then
+             Result := sigaddset (Unblocked_Signal_Mask'Access, Signal (J));
+             pragma Assert (Result = 0);
+          end if;
+       end loop;
+    end;
+ end System.Task_Primitives.Operations;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-taprop-mingw.adb gcc-4.0.0/gcc/ada/s-taprop-mingw.adb
*** gcc-3.4.3/gcc/ada/s-taprop-mingw.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-taprop-mingw.adb	Thu Feb 10 13:57:21 2005
***************
*** 0 ****
--- 1,1098 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --     S Y S T E M . T A S K _ P R I M I T I V E S . O P E R A T I O N S    --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --         Copyright (C) 1992-2005, Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a NT (native) version of this package
+ 
+ --  This package contains all the GNULL primitives that interface directly
+ --  with the underlying OS.
+ 
+ pragma Polling (Off);
+ --  Turn off polling, we do not want ATC polling to take place during
+ --  tasking operations. It causes infinite loops and other problems.
+ 
+ with System.Tasking.Debug;
+ --  used for Known_Tasks
+ 
+ with Interfaces.C;
+ --  used for int
+ --           size_t
+ 
+ with Interfaces.C.Strings;
+ --  used for Null_Ptr
+ 
+ with System.OS_Interface;
+ --  used for various type, constant, and operations
+ 
+ with System.Parameters;
+ --  used for Size_Type
+ 
+ with System.Tasking;
+ --  used for Ada_Task_Control_Block
+ --           Task_Id
+ 
+ with System.Soft_Links;
+ --  used for Defer/Undefer_Abort
+ --       to initialize TSD for a C thread, in function Self
+ 
+ --  Note that we do not use System.Tasking.Initialization directly since
+ --  this is a higher level package that we shouldn't depend on. For example
+ --  when using the restricted run time, it is replaced by
+ --  System.Tasking.Restricted.Stages.
+ 
+ with System.OS_Primitives;
+ --  used for Delay_Modes
+ 
+ with System.Task_Info;
+ --  used for Unspecified_Task_Info
+ 
+ with Unchecked_Deallocation;
+ 
+ package body System.Task_Primitives.Operations is
+ 
+    use System.Tasking.Debug;
+    use System.Tasking;
+    use Interfaces.C;
+    use Interfaces.C.Strings;
+    use System.OS_Interface;
+    use System.Parameters;
+    use System.OS_Primitives;
+ 
+    pragma Link_With ("-Xlinker --stack=0x800000,0x1000");
+    --  Change the stack size (8 MB) for tasking programs on Windows. This
+    --  permit to have more than 30 tasks running at the same time. Note that
+    --  we set the stack size for non tasking programs on System unit.
+ 
+    package SSL renames System.Soft_Links;
+ 
+    ----------------
+    -- Local Data --
+    ----------------
+ 
+    Environment_Task_Id : Task_Id;
+    --  A variable to hold Task_Id for the environment task
+ 
+    Single_RTS_Lock : aliased RTS_Lock;
+    --  This is a lock to allow only one thread of control in the RTS at
+    --  a time; it is used to execute in mutual exclusion from all other tasks.
+    --  Used mainly in Single_Lock mode, but also to protect All_Tasks_List
+ 
+    Time_Slice_Val : Integer;
+    pragma Import (C, Time_Slice_Val, "__gl_time_slice_val");
+ 
+    Dispatching_Policy : Character;
+    pragma Import (C, Dispatching_Policy, "__gl_task_dispatching_policy");
+ 
+    FIFO_Within_Priorities : constant Boolean := Dispatching_Policy = 'F';
+    --  Indicates whether FIFO_Within_Priorities is set
+ 
+    Foreign_Task_Elaborated : aliased Boolean := True;
+    --  Used to identified fake tasks (i.e., non-Ada Threads)
+ 
+    ------------------------------------
+    -- The thread local storage index --
+    ------------------------------------
+ 
+    TlsIndex : DWORD;
+    pragma Export (Ada, TlsIndex);
+    --  To ensure that this variable won't be local to this package, since
+    --  in some cases, inlining forces this variable to be global anyway.
+ 
+    --------------------
+    -- Local Packages --
+    --------------------
+ 
+    package Specific is
+ 
+       function Is_Valid_Task return Boolean;
+       pragma Inline (Is_Valid_Task);
+       --  Does executing thread have a TCB?
+ 
+       procedure Set (Self_Id : Task_Id);
+       pragma Inline (Set);
+       --  Set the self id for the current task.
+ 
+    end Specific;
+ 
+    package body Specific is
+ 
+       function Is_Valid_Task return Boolean is
+       begin
+          return TlsGetValue (TlsIndex) /= System.Null_Address;
+       end Is_Valid_Task;
+ 
+       procedure Set (Self_Id : Task_Id) is
+          Succeeded : BOOL;
+       begin
+          Succeeded := TlsSetValue (TlsIndex, To_Address (Self_Id));
+          pragma Assert (Succeeded = True);
+       end Set;
+ 
+    end Specific;
+ 
+    ---------------------------------
+    -- Support for foreign threads --
+    ---------------------------------
+ 
+    function Register_Foreign_Thread (Thread : Thread_Id) return Task_Id;
+    --  Allocate and Initialize a new ATCB for the current Thread.
+ 
+    function Register_Foreign_Thread
+      (Thread : Thread_Id) return Task_Id is separate;
+ 
+    ----------------------------------
+    -- Condition Variable Functions --
+    ----------------------------------
+ 
+    procedure Initialize_Cond (Cond : access Condition_Variable);
+    --  Initialize given condition variable Cond
+ 
+    procedure Finalize_Cond (Cond : access Condition_Variable);
+    --  Finalize given condition variable Cond.
+ 
+    procedure Cond_Signal (Cond : access Condition_Variable);
+    --  Signal condition variable Cond
+ 
+    procedure Cond_Wait
+      (Cond : access Condition_Variable;
+       L    : access RTS_Lock);
+    --  Wait on conditional variable Cond, using lock L
+ 
+    procedure Cond_Timed_Wait
+      (Cond      : access Condition_Variable;
+       L         : access RTS_Lock;
+       Rel_Time  : Duration;
+       Timed_Out : out Boolean;
+       Status    : out Integer);
+    --  Do timed wait on condition variable Cond using lock L. The duration
+    --  of the timed wait is given by Rel_Time. When the condition is
+    --  signalled, Timed_Out shows whether or not a time out occurred.
+    --  Status is only valid if Timed_Out is False, in which case it
+    --  shows whether Cond_Timed_Wait completed successfully.
+ 
+    ---------------------
+    -- Initialize_Cond --
+    ---------------------
+ 
+    procedure Initialize_Cond (Cond : access Condition_Variable) is
+       hEvent : HANDLE;
+ 
+    begin
+       hEvent := CreateEvent (null, True, False, Null_Ptr);
+       pragma Assert (hEvent /= 0);
+       Cond.all := Condition_Variable (hEvent);
+    end Initialize_Cond;
+ 
+    -------------------
+    -- Finalize_Cond --
+    -------------------
+ 
+    --  No such problem here, DosCloseEventSem has been derived.
+    --  What does such refer to in above comment???
+ 
+    procedure Finalize_Cond (Cond : access Condition_Variable) is
+       Result : BOOL;
+    begin
+       Result := CloseHandle (HANDLE (Cond.all));
+       pragma Assert (Result = True);
+    end Finalize_Cond;
+ 
+    -----------------
+    -- Cond_Signal --
+    -----------------
+ 
+    procedure Cond_Signal (Cond : access Condition_Variable) is
+       Result : BOOL;
+    begin
+       Result := SetEvent (HANDLE (Cond.all));
+       pragma Assert (Result = True);
+    end Cond_Signal;
+ 
+    ---------------
+    -- Cond_Wait --
+    ---------------
+ 
+    --  Pre-assertion: Cond is posted
+    --                 L is locked.
+ 
+    --  Post-assertion: Cond is posted
+    --                  L is locked.
+ 
+    procedure Cond_Wait
+      (Cond : access Condition_Variable;
+       L    : access RTS_Lock)
+    is
+       Result      : DWORD;
+       Result_Bool : BOOL;
+ 
+    begin
+       --  Must reset Cond BEFORE L is unlocked.
+ 
+       Result_Bool := ResetEvent (HANDLE (Cond.all));
+       pragma Assert (Result_Bool = True);
+       Unlock (L);
+ 
+       --  No problem if we are interrupted here: if the condition is signaled,
+       --  WaitForSingleObject will simply not block
+ 
+       Result := WaitForSingleObject (HANDLE (Cond.all), Wait_Infinite);
+       pragma Assert (Result = 0);
+ 
+       Write_Lock (L);
+    end Cond_Wait;
+ 
+    ---------------------
+    -- Cond_Timed_Wait --
+    ---------------------
+ 
+    --  Pre-assertion: Cond is posted
+    --                 L is locked.
+ 
+    --  Post-assertion: Cond is posted
+    --                  L is locked.
+ 
+    procedure Cond_Timed_Wait
+      (Cond      : access Condition_Variable;
+       L         : access RTS_Lock;
+       Rel_Time  : Duration;
+       Timed_Out : out Boolean;
+       Status    : out Integer)
+    is
+       Time_Out_Max : constant DWORD := 16#FFFF0000#;
+       --  NT 4 cannot handle timeout values that are too large,
+       --  e.g. DWORD'Last - 1
+ 
+       Time_Out     : DWORD;
+       Result       : BOOL;
+       Wait_Result  : DWORD;
+ 
+    begin
+       --  Must reset Cond BEFORE L is unlocked.
+ 
+       Result := ResetEvent (HANDLE (Cond.all));
+       pragma Assert (Result = True);
+       Unlock (L);
+ 
+       --  No problem if we are interrupted here: if the condition is signaled,
+       --  WaitForSingleObject will simply not block
+ 
+       if Rel_Time <= 0.0 then
+          Timed_Out := True;
+          Wait_Result := 0;
+ 
+       else
+          if Rel_Time >= Duration (Time_Out_Max) / 1000 then
+             Time_Out := Time_Out_Max;
+          else
+             Time_Out := DWORD (Rel_Time * 1000);
+          end if;
+ 
+          Wait_Result := WaitForSingleObject (HANDLE (Cond.all), Time_Out);
+ 
+          if Wait_Result = WAIT_TIMEOUT then
+             Timed_Out := True;
+             Wait_Result := 0;
+          else
+             Timed_Out := False;
+          end if;
+       end if;
+ 
+       Write_Lock (L);
+ 
+       --  Ensure post-condition
+ 
+       if Timed_Out then
+          Result := SetEvent (HANDLE (Cond.all));
+          pragma Assert (Result = True);
+       end if;
+ 
+       Status := Integer (Wait_Result);
+    end Cond_Timed_Wait;
+ 
+    ------------------
+    -- Stack_Guard  --
+    ------------------
+ 
+    --  The underlying thread system sets a guard page at the
+    --  bottom of a thread stack, so nothing is needed.
+    --  ??? Check the comment above
+ 
+    procedure Stack_Guard (T : ST.Task_Id; On : Boolean) is
+       pragma Warnings (Off, T);
+       pragma Warnings (Off, On);
+ 
+    begin
+       null;
+    end Stack_Guard;
+ 
+    --------------------
+    -- Get_Thread_Id  --
+    --------------------
+ 
+    function Get_Thread_Id (T : ST.Task_Id) return OSI.Thread_Id is
+    begin
+       return T.Common.LL.Thread;
+    end Get_Thread_Id;
+ 
+    ----------
+    -- Self --
+    ----------
+ 
+    function Self return Task_Id is
+       Self_Id : constant Task_Id := To_Task_Id (TlsGetValue (TlsIndex));
+    begin
+       if Self_Id = null then
+          return Register_Foreign_Thread (GetCurrentThread);
+       else
+          return Self_Id;
+       end if;
+    end Self;
+ 
+    ---------------------
+    -- Initialize_Lock --
+    ---------------------
+ 
+    --  Note: mutexes and cond_variables needed per-task basis are
+    --  initialized in Intialize_TCB and the Storage_Error is handled.
+    --  Other mutexes (such as RTS_Lock, Memory_Lock...) used in
+    --  the RTS is initialized before any status change of RTS.
+    --  Therefore raising Storage_Error in the following routines
+    --  should be able to be handled safely.
+ 
+    procedure Initialize_Lock
+      (Prio : System.Any_Priority;
+       L    : access Lock)
+    is
+    begin
+       InitializeCriticalSection (L.Mutex'Access);
+       L.Owner_Priority := 0;
+       L.Priority := Prio;
+    end Initialize_Lock;
+ 
+    procedure Initialize_Lock (L : access RTS_Lock; Level : Lock_Level) is
+       pragma Unreferenced (Level);
+    begin
+       InitializeCriticalSection (CRITICAL_SECTION (L.all)'Unrestricted_Access);
+    end Initialize_Lock;
+ 
+    -------------------
+    -- Finalize_Lock --
+    -------------------
+ 
+    procedure Finalize_Lock (L : access Lock) is
+    begin
+       DeleteCriticalSection (L.Mutex'Access);
+    end Finalize_Lock;
+ 
+    procedure Finalize_Lock (L : access RTS_Lock) is
+    begin
+       DeleteCriticalSection (CRITICAL_SECTION (L.all)'Unrestricted_Access);
+    end Finalize_Lock;
+ 
+    ----------------
+    -- Write_Lock --
+    ----------------
+ 
+    procedure Write_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
+    begin
+       L.Owner_Priority := Get_Priority (Self);
+ 
+       if L.Priority < L.Owner_Priority then
+          Ceiling_Violation := True;
+          return;
+       end if;
+ 
+       EnterCriticalSection (L.Mutex'Access);
+ 
+       Ceiling_Violation := False;
+    end Write_Lock;
+ 
+    procedure Write_Lock
+      (L           : access RTS_Lock;
+       Global_Lock : Boolean := False)
+    is
+    begin
+       if not Single_Lock or else Global_Lock then
+          EnterCriticalSection (CRITICAL_SECTION (L.all)'Unrestricted_Access);
+       end if;
+    end Write_Lock;
+ 
+    procedure Write_Lock (T : Task_Id) is
+    begin
+       if not Single_Lock then
+          EnterCriticalSection
+            (CRITICAL_SECTION (T.Common.LL.L)'Unrestricted_Access);
+       end if;
+    end Write_Lock;
+ 
+    ---------------
+    -- Read_Lock --
+    ---------------
+ 
+    procedure Read_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
+    begin
+       Write_Lock (L, Ceiling_Violation);
+    end Read_Lock;
+ 
+    ------------
+    -- Unlock --
+    ------------
+ 
+    procedure Unlock (L : access Lock) is
+    begin
+       LeaveCriticalSection (L.Mutex'Access);
+    end Unlock;
+ 
+    procedure Unlock (L : access RTS_Lock; Global_Lock : Boolean := False) is
+    begin
+       if not Single_Lock or else Global_Lock then
+          LeaveCriticalSection (CRITICAL_SECTION (L.all)'Unrestricted_Access);
+       end if;
+    end Unlock;
+ 
+    procedure Unlock (T : Task_Id) is
+    begin
+       if not Single_Lock then
+          LeaveCriticalSection
+            (CRITICAL_SECTION (T.Common.LL.L)'Unrestricted_Access);
+       end if;
+    end Unlock;
+ 
+    -----------
+    -- Sleep --
+    -----------
+ 
+    procedure Sleep
+      (Self_ID : Task_Id;
+       Reason  : System.Tasking.Task_States)
+    is
+       pragma Unreferenced (Reason);
+ 
+    begin
+       pragma Assert (Self_ID = Self);
+ 
+       if Single_Lock then
+          Cond_Wait (Self_ID.Common.LL.CV'Access, Single_RTS_Lock'Access);
+       else
+          Cond_Wait (Self_ID.Common.LL.CV'Access, Self_ID.Common.LL.L'Access);
+       end if;
+ 
+       if Self_ID.Deferral_Level = 0
+         and then Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level
+       then
+          Unlock (Self_ID);
+          raise Standard'Abort_Signal;
+       end if;
+    end Sleep;
+ 
+    -----------------
+    -- Timed_Sleep --
+    -----------------
+ 
+    --  This is for use within the run-time system, so abort is
+    --  assumed to be already deferred, and the caller should be
+    --  holding its own ATCB lock.
+ 
+    procedure Timed_Sleep
+      (Self_ID  : Task_Id;
+       Time     : Duration;
+       Mode     : ST.Delay_Modes;
+       Reason   : System.Tasking.Task_States;
+       Timedout : out Boolean;
+       Yielded  : out Boolean)
+    is
+       pragma Unreferenced (Reason);
+       Check_Time : Duration := Monotonic_Clock;
+       Rel_Time   : Duration;
+       Abs_Time   : Duration;
+       Result     : Integer;
+ 
+       Local_Timedout : Boolean;
+ 
+    begin
+       Timedout := True;
+       Yielded  := False;
+ 
+       if Mode = Relative then
+          Rel_Time := Time;
+          Abs_Time := Duration'Min (Time, Max_Sensible_Delay) + Check_Time;
+       else
+          Rel_Time := Time - Check_Time;
+          Abs_Time := Time;
+       end if;
+ 
+       if Rel_Time > 0.0 then
+          loop
+             exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level
+               or else Self_ID.Pending_Priority_Change;
+ 
+             if Single_Lock then
+                Cond_Timed_Wait (Self_ID.Common.LL.CV'Access,
+                  Single_RTS_Lock'Access, Rel_Time, Local_Timedout, Result);
+             else
+                Cond_Timed_Wait (Self_ID.Common.LL.CV'Access,
+                  Self_ID.Common.LL.L'Access, Rel_Time, Local_Timedout, Result);
+             end if;
+ 
+             Check_Time := Monotonic_Clock;
+             exit when Abs_Time <= Check_Time;
+ 
+             if not Local_Timedout then
+ 
+                --  Somebody may have called Wakeup for us
+ 
+                Timedout := False;
+                exit;
+             end if;
+ 
+             Rel_Time := Abs_Time - Check_Time;
+          end loop;
+       end if;
+    end Timed_Sleep;
+ 
+    -----------------
+    -- Timed_Delay --
+    -----------------
+ 
+    procedure Timed_Delay
+      (Self_ID  : Task_Id;
+       Time     : Duration;
+       Mode     : ST.Delay_Modes)
+    is
+       Check_Time : Duration := Monotonic_Clock;
+       Rel_Time   : Duration;
+       Abs_Time   : Duration;
+       Result     : Integer;
+       Timedout   : Boolean;
+ 
+    begin
+       --  Only the little window between deferring abort and
+       --  locking Self_ID is the reason we need to
+       --  check for pending abort and priority change below!
+ 
+       SSL.Abort_Defer.all;
+ 
+       if Single_Lock then
+          Lock_RTS;
+       end if;
+ 
+       Write_Lock (Self_ID);
+ 
+       if Mode = Relative then
+          Rel_Time := Time;
+          Abs_Time := Time + Check_Time;
+       else
+          Rel_Time := Time - Check_Time;
+          Abs_Time := Time;
+       end if;
+ 
+       if Rel_Time > 0.0 then
+          Self_ID.Common.State := Delay_Sleep;
+ 
+          loop
+             if Self_ID.Pending_Priority_Change then
+                Self_ID.Pending_Priority_Change := False;
+                Self_ID.Common.Base_Priority := Self_ID.New_Base_Priority;
+                Set_Priority (Self_ID, Self_ID.Common.Base_Priority);
+             end if;
+ 
+             exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level;
+ 
+             if Single_Lock then
+                Cond_Timed_Wait (Self_ID.Common.LL.CV'Access,
+                  Single_RTS_Lock'Access, Rel_Time, Timedout, Result);
+             else
+                Cond_Timed_Wait (Self_ID.Common.LL.CV'Access,
+                  Self_ID.Common.LL.L'Access, Rel_Time, Timedout, Result);
+             end if;
+ 
+             Check_Time := Monotonic_Clock;
+             exit when Abs_Time <= Check_Time;
+ 
+             Rel_Time := Abs_Time - Check_Time;
+          end loop;
+ 
+          Self_ID.Common.State := Runnable;
+       end if;
+ 
+       Unlock (Self_ID);
+ 
+       if Single_Lock then
+          Unlock_RTS;
+       end if;
+ 
+       Yield;
+       SSL.Abort_Undefer.all;
+    end Timed_Delay;
+ 
+    ------------
+    -- Wakeup --
+    ------------
+ 
+    procedure Wakeup (T : Task_Id; Reason : System.Tasking.Task_States) is
+       pragma Unreferenced (Reason);
+    begin
+       Cond_Signal (T.Common.LL.CV'Access);
+    end Wakeup;
+ 
+    -----------
+    -- Yield --
+    -----------
+ 
+    procedure Yield (Do_Yield : Boolean := True) is
+    begin
+       if Do_Yield then
+          Sleep (0);
+       end if;
+    end Yield;
+ 
+    ------------------
+    -- Set_Priority --
+    ------------------
+ 
+    type Prio_Array_Type is array (System.Any_Priority) of Integer;
+    pragma Atomic_Components (Prio_Array_Type);
+ 
+    Prio_Array : Prio_Array_Type;
+    --  Global array containing the id of the currently running task for
+    --  each priority.
+    --
+    --  Note: we assume that we are on a single processor with run-til-blocked
+    --  scheduling.
+ 
+    procedure Set_Priority
+      (T                   : Task_Id;
+       Prio                : System.Any_Priority;
+       Loss_Of_Inheritance : Boolean := False)
+    is
+       Res        : BOOL;
+       Array_Item : Integer;
+ 
+    begin
+       Res := SetThreadPriority
+         (T.Common.LL.Thread, Interfaces.C.int (Underlying_Priorities (Prio)));
+       pragma Assert (Res = True);
+ 
+       if FIFO_Within_Priorities then
+ 
+          --  Annex D requirement [RM D.2.2 par. 9]:
+          --    If the task drops its priority due to the loss of inherited
+          --    priority, it is added at the head of the ready queue for its
+          --    new active priority.
+ 
+          if Loss_Of_Inheritance
+            and then Prio < T.Common.Current_Priority
+          then
+             Array_Item := Prio_Array (T.Common.Base_Priority) + 1;
+             Prio_Array (T.Common.Base_Priority) := Array_Item;
+ 
+             loop
+                --  Let some processes a chance to arrive
+ 
+                Yield;
+ 
+                --  Then wait for our turn to proceed
+ 
+                exit when Array_Item = Prio_Array (T.Common.Base_Priority)
+                  or else Prio_Array (T.Common.Base_Priority) = 1;
+             end loop;
+ 
+             Prio_Array (T.Common.Base_Priority) :=
+               Prio_Array (T.Common.Base_Priority) - 1;
+          end if;
+       end if;
+ 
+       T.Common.Current_Priority := Prio;
+    end Set_Priority;
+ 
+    ------------------
+    -- Get_Priority --
+    ------------------
+ 
+    function Get_Priority (T : Task_Id) return System.Any_Priority is
+    begin
+       return T.Common.Current_Priority;
+    end Get_Priority;
+ 
+    ----------------
+    -- Enter_Task --
+    ----------------
+ 
+    --  There were two paths were we needed to call Enter_Task :
+    --  1) from System.Task_Primitives.Operations.Initialize
+    --  2) from System.Tasking.Stages.Task_Wrapper
+    --
+    --  The thread initialisation has to be done only for the first case.
+    --
+    --  This is because the GetCurrentThread NT call does not return the
+    --  real thread handler but only a "pseudo" one. It is not possible to
+    --  release the thread handle and free the system ressources from this
+    --  "pseudo" handle. So we really want to keep the real thread handle
+    --  set in System.Task_Primitives.Operations.Create_Task during the
+    --  thread creation.
+ 
+    procedure Enter_Task (Self_ID : Task_Id) is
+       procedure Init_Float;
+       pragma Import (C, Init_Float, "__gnat_init_float");
+       --  Properly initializes the FPU for x86 systems.
+ 
+    begin
+       Specific.Set (Self_ID);
+       Init_Float;
+ 
+       Self_ID.Common.LL.Thread_Id := GetCurrentThreadId;
+ 
+       Lock_RTS;
+ 
+       for J in Known_Tasks'Range loop
+          if Known_Tasks (J) = null then
+             Known_Tasks (J) := Self_ID;
+             Self_ID.Known_Tasks_Index := J;
+             exit;
+          end if;
+       end loop;
+ 
+       Unlock_RTS;
+    end Enter_Task;
+ 
+    --------------
+    -- New_ATCB --
+    --------------
+ 
+    function New_ATCB (Entry_Num : Task_Entry_Index) return Task_Id is
+    begin
+       return new Ada_Task_Control_Block (Entry_Num);
+    end New_ATCB;
+ 
+    -------------------
+    -- Is_Valid_Task --
+    -------------------
+ 
+    function Is_Valid_Task return Boolean renames Specific.Is_Valid_Task;
+ 
+    -----------------------------
+    -- Register_Foreign_Thread --
+    -----------------------------
+ 
+    function Register_Foreign_Thread return Task_Id is
+    begin
+       if Is_Valid_Task then
+          return Self;
+       else
+          return Register_Foreign_Thread (GetCurrentThread);
+       end if;
+    end Register_Foreign_Thread;
+ 
+    --------------------
+    -- Initialize_TCB --
+    --------------------
+ 
+    procedure Initialize_TCB (Self_ID : Task_Id; Succeeded : out Boolean) is
+    begin
+       --  Initialize thread ID to 0, this is needed to detect threads that
+       --  are not yet activated.
+ 
+       Self_ID.Common.LL.Thread := 0;
+ 
+       Initialize_Cond (Self_ID.Common.LL.CV'Access);
+ 
+       if not Single_Lock then
+          Initialize_Lock (Self_ID.Common.LL.L'Access, ATCB_Level);
+       end if;
+ 
+       Succeeded := True;
+    end Initialize_TCB;
+ 
+    -----------------
+    -- Create_Task --
+    -----------------
+ 
+    procedure Create_Task
+      (T          : Task_Id;
+       Wrapper    : System.Address;
+       Stack_Size : System.Parameters.Size_Type;
+       Priority   : System.Any_Priority;
+       Succeeded  : out Boolean)
+    is
+       pragma Unreferenced (Stack_Size);
+ 
+       Initial_Stack_Size : constant := 1024;
+       --  We set the initial stack size to 1024. On Windows there is no way to
+       --  fix a task stack size. Only the initial stack size can be set, the
+       --  operating system will raise the task stack size if needed.
+ 
+       hTask          : HANDLE;
+       TaskId         : aliased DWORD;
+       pTaskParameter : System.OS_Interface.PVOID;
+       Result         : DWORD;
+       Entry_Point    : PTHREAD_START_ROUTINE;
+ 
+    begin
+       pTaskParameter := To_Address (T);
+ 
+       Entry_Point := To_PTHREAD_START_ROUTINE (Wrapper);
+ 
+       hTask := CreateThread
+          (null,
+           Initial_Stack_Size,
+           Entry_Point,
+           pTaskParameter,
+           DWORD (Create_Suspended),
+           TaskId'Unchecked_Access);
+ 
+       --  Step 1: Create the thread in blocked mode
+ 
+       if hTask = 0 then
+          raise Storage_Error;
+       end if;
+ 
+       --  Step 2: set its TCB
+ 
+       T.Common.LL.Thread := hTask;
+ 
+       --  Step 3: set its priority (child has inherited priority from parent)
+ 
+       Set_Priority (T, Priority);
+ 
+       if Time_Slice_Val = 0 or else FIFO_Within_Priorities then
+          --  Here we need Annex E semantics so we disable the NT priority
+          --  boost. A priority boost is temporarily given by the system to a
+          --  thread when it is taken out of a wait state.
+ 
+          SetThreadPriorityBoost (hTask, DisablePriorityBoost => True);
+       end if;
+ 
+       --  Step 4: Now, start it for good:
+ 
+       Result := ResumeThread (hTask);
+       pragma Assert (Result = 1);
+ 
+       Succeeded := Result = 1;
+    end Create_Task;
+ 
+    ------------------
+    -- Finalize_TCB --
+    ------------------
+ 
+    procedure Finalize_TCB (T : Task_Id) is
+       Self_ID   : Task_Id := T;
+       Result    : DWORD;
+       Succeeded : BOOL;
+       Is_Self   : constant Boolean := T = Self;
+ 
+       procedure Free is new
+         Unchecked_Deallocation (Ada_Task_Control_Block, Task_Id);
+ 
+    begin
+       if not Single_Lock then
+          Finalize_Lock (T.Common.LL.L'Access);
+       end if;
+ 
+       Finalize_Cond (T.Common.LL.CV'Access);
+ 
+       if T.Known_Tasks_Index /= -1 then
+          Known_Tasks (T.Known_Tasks_Index) := null;
+       end if;
+ 
+       if Self_ID.Common.LL.Thread /= 0 then
+ 
+          --  This task has been activated. Wait for the thread to terminate
+          --  then close it. this is needed to release system ressources.
+ 
+          Result := WaitForSingleObject (T.Common.LL.Thread, Wait_Infinite);
+          pragma Assert (Result /= WAIT_FAILED);
+          Succeeded := CloseHandle (T.Common.LL.Thread);
+          pragma Assert (Succeeded = True);
+       end if;
+ 
+       Free (Self_ID);
+ 
+       if Is_Self then
+          Specific.Set (null);
+       end if;
+    end Finalize_TCB;
+ 
+    ---------------
+    -- Exit_Task --
+    ---------------
+ 
+    procedure Exit_Task is
+    begin
+       Specific.Set (null);
+    end Exit_Task;
+ 
+    ----------------
+    -- Abort_Task --
+    ----------------
+ 
+    procedure Abort_Task (T : Task_Id) is
+       pragma Unreferenced (T);
+    begin
+       null;
+    end Abort_Task;
+ 
+    ----------------------
+    -- Environment_Task --
+    ----------------------
+ 
+    function Environment_Task return Task_Id is
+    begin
+       return Environment_Task_Id;
+    end Environment_Task;
+ 
+    --------------
+    -- Lock_RTS --
+    --------------
+ 
+    procedure Lock_RTS is
+    begin
+       Write_Lock (Single_RTS_Lock'Access, Global_Lock => True);
+    end Lock_RTS;
+ 
+    ----------------
+    -- Unlock_RTS --
+    ----------------
+ 
+    procedure Unlock_RTS is
+    begin
+       Unlock (Single_RTS_Lock'Access, Global_Lock => True);
+    end Unlock_RTS;
+ 
+    ----------------
+    -- Initialize --
+    ----------------
+ 
+    procedure Initialize (Environment_Task : Task_Id) is
+       Discard : BOOL;
+       pragma Unreferenced (Discard);
+ 
+    begin
+       Environment_Task_Id := Environment_Task;
+ 
+       if Time_Slice_Val = 0 or else FIFO_Within_Priorities then
+ 
+          --  Here we need Annex E semantics, switch the current process to the
+          --  High_Priority_Class.
+ 
+          Discard :=
+            OS_Interface.SetPriorityClass
+              (GetCurrentProcess, High_Priority_Class);
+ 
+          --  ??? In theory it should be possible to use the priority class
+          --  Realtime_Prioriry_Class but we suspect a bug in the NT scheduler
+          --  which prevents (in some obscure cases) a thread to get on top of
+          --  the running queue by another thread of lower priority. For
+          --  example cxd8002 ACATS test freeze.
+       end if;
+ 
+       TlsIndex := TlsAlloc;
+ 
+       --  Initialize the lock used to synchronize chain of all ATCBs.
+ 
+       Initialize_Lock (Single_RTS_Lock'Access, RTS_Lock_Level);
+ 
+       Environment_Task.Common.LL.Thread := GetCurrentThread;
+       Enter_Task (Environment_Task);
+    end Initialize;
+ 
+    ---------------------
+    -- Monotonic_Clock --
+    ---------------------
+ 
+    function Monotonic_Clock return Duration
+      renames System.OS_Primitives.Monotonic_Clock;
+ 
+    -------------------
+    -- RT_Resolution --
+    -------------------
+ 
+    function RT_Resolution return Duration is
+    begin
+       return 0.000_001; --  1 micro-second
+    end RT_Resolution;
+ 
+    ----------------
+    -- Check_Exit --
+    ----------------
+ 
+    --  Dummy versions.  The only currently working versions is for solaris
+    --  (native).
+ 
+    function Check_Exit (Self_ID : ST.Task_Id) return Boolean is
+       pragma Unreferenced (Self_ID);
+    begin
+       return True;
+    end Check_Exit;
+ 
+    --------------------
+    -- Check_No_Locks --
+    --------------------
+ 
+    function Check_No_Locks (Self_ID : ST.Task_Id) return Boolean is
+       pragma Unreferenced (Self_ID);
+    begin
+       return True;
+    end Check_No_Locks;
+ 
+    ------------------
+    -- Suspend_Task --
+    ------------------
+ 
+    function Suspend_Task
+      (T           : ST.Task_Id;
+       Thread_Self : Thread_Id) return Boolean
+    is
+    begin
+       if T.Common.LL.Thread /= Thread_Self then
+          return SuspendThread (T.Common.LL.Thread) = NO_ERROR;
+       else
+          return True;
+       end if;
+    end Suspend_Task;
+ 
+    -----------------
+    -- Resume_Task --
+    -----------------
+ 
+    function Resume_Task
+      (T           : ST.Task_Id;
+       Thread_Self : Thread_Id) return Boolean
+    is
+    begin
+       if T.Common.LL.Thread /= Thread_Self then
+          return ResumeThread (T.Common.LL.Thread) = NO_ERROR;
+       else
+          return True;
+       end if;
+    end Resume_Task;
+ 
+ end System.Task_Primitives.Operations;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-taprop-os2.adb gcc-4.0.0/gcc/ada/s-taprop-os2.adb
*** gcc-3.4.3/gcc/ada/s-taprop-os2.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-taprop-os2.adb	Tue Jul  6 13:57:29 2004
***************
*** 0 ****
--- 1,1152 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
+ --                                                                          --
+ --    S Y S T E M . T A S K _ P R I M I T I V E S . O P E R A T I O N S     --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --         Copyright (C) 1992-2004, Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is an OS/2 version of this package
+ 
+ --  This package contains all the GNULL primitives that interface directly
+ --  with the underlying OS.
+ 
+ pragma Polling (Off);
+ --  Turn off polling, we do not want ATC polling to take place during
+ --  tasking operations. It causes infinite loops and other problems.
+ 
+ with System.Tasking.Debug;
+ --  used for Known_Tasks
+ 
+ with Interfaces.C;
+ --  used for size_t
+ 
+ with Interfaces.C.Strings;
+ --  used for Null_Ptr
+ 
+ with Interfaces.OS2Lib.Errors;
+ with Interfaces.OS2Lib.Threads;
+ with Interfaces.OS2Lib.Synchronization;
+ 
+ with System.Parameters;
+ --  used for Size_Type
+ 
+ with System.Tasking;
+ --  used for Task_Id
+ 
+ with System.Parameters;
+ --  used for Size_Type
+ 
+ with System.Soft_Links;
+ --  used for Defer/Undefer_Abort
+ 
+ --  Note that we do not use System.Tasking.Initialization directly since
+ --  this is a higher level package that we shouldn't depend on. For example
+ --  when using the restricted run time, it is replaced by
+ --  System.Tasking.Restricted.Stages.
+ 
+ with System.OS_Primitives;
+ --  used for Delay_Modes
+ --           Clock
+ 
+ with Unchecked_Conversion;
+ with Unchecked_Deallocation;
+ 
+ package body System.Task_Primitives.Operations is
+ 
+    package IC  renames Interfaces.C;
+    package ICS renames Interfaces.C.Strings;
+    package OSP renames System.OS_Primitives;
+    package SSL renames System.Soft_Links;
+ 
+    use Interfaces.OS2Lib;
+    use Interfaces.OS2Lib.Errors;
+    use Interfaces.OS2Lib.Threads;
+    use Interfaces.OS2Lib.Synchronization;
+    use System.Parameters;
+    use System.Tasking.Debug;
+    use System.Tasking;
+    use System.OS_Interface;
+    use Interfaces.C;
+    use System.OS_Primitives;
+ 
+    ---------------------
+    -- Local Constants --
+    ---------------------
+ 
+    Max_Locks_Per_Task   : constant := 100;
+    Suppress_Owner_Check : constant Boolean := False;
+ 
+    -----------------
+    -- Local Types --
+    -----------------
+ 
+    subtype Lock_Range is Integer range 0 .. Max_Locks_Per_Task;
+ 
+    -----------------
+    -- Local Data  --
+    -----------------
+ 
+    --  The OS/2 DosAllocThreadLocalMemory API is used to allocate our TCB_Ptr.
+ 
+    --  This API reserves a small range of virtual addresses that is backed
+    --  by different physical memory for each running thread. In this case we
+    --  create a pointer at a fixed address that points to the TCB_Ptr for the
+    --  running thread. So all threads will be able to query and update their
+    --  own TCB_Ptr without destroying the TCB_Ptr of other threads.
+ 
+    type Thread_Local_Data is record
+       Self_ID           : Task_Id;    --  ID of the current thread
+       Lock_Prio_Level   : Lock_Range; --  Nr of priority changes due to locks
+ 
+       --  ... room for expansion here, if we decide to make access to
+       --  jump-buffer and exception stack more efficient in future
+    end record;
+ 
+    type Access_Thread_Local_Data is access all Thread_Local_Data;
+ 
+    --  Pointer to Thread Local Data
+    Thread_Local_Data_Ptr : aliased Access_Thread_Local_Data;
+ 
+    type PPTLD is access all Access_Thread_Local_Data;
+ 
+    Single_RTS_Lock : aliased RTS_Lock;
+    --  This is a lock to allow only one thread of control in the RTS at
+    --  a time; it is used to execute in mutual exclusion from all other tasks.
+    --  Used mainly in Single_Lock mode, but also to protect All_Tasks_List
+ 
+    Environment_Task_Id : Task_Id;
+    --  A variable to hold Task_Id for the environment task.
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    function To_PPVOID is new Unchecked_Conversion (PPTLD, PPVOID);
+    function To_Address is new Unchecked_Conversion (Task_Id, System.Address);
+    function To_PFNTHREAD is
+      new Unchecked_Conversion (System.Address, PFNTHREAD);
+ 
+    function To_MS (D : Duration) return ULONG;
+ 
+    procedure Set_Temporary_Priority
+      (T            : in Task_Id;
+       New_Priority : in System.Any_Priority);
+ 
+    -----------
+    -- To_MS --
+    -----------
+ 
+    function To_MS (D : Duration) return ULONG is
+    begin
+       return ULONG (D * 1_000);
+    end To_MS;
+ 
+    -----------
+    -- Clock --
+    -----------
+ 
+    function Monotonic_Clock return Duration renames OSP.Monotonic_Clock;
+ 
+    -------------------
+    -- RT_Resolution --
+    -------------------
+ 
+    function RT_Resolution return Duration is
+    begin
+       return 10#1.0#E-6;
+    end RT_Resolution;
+ 
+    -------------------
+    -- Abort_Handler --
+    -------------------
+ 
+    --  OS/2 only has limited support for asynchronous signals.
+    --  It seems not to be possible to jump out of an exception
+    --  handler or to change the execution context of the thread.
+    --  So asynchonous transfer of control is not supported.
+ 
+    -----------------
+    -- Stack_Guard --
+    -----------------
+ 
+    --  The underlying thread system sets a guard page at the
+    --  bottom of a thread stack, so nothing is needed.
+    --  ??? Check the comment above
+ 
+    procedure Stack_Guard (T : ST.Task_Id; On : Boolean) is
+       pragma Unreferenced (T);
+       pragma Unreferenced (On);
+    begin
+       null;
+    end Stack_Guard;
+ 
+    --------------------
+    -- Get_Thread_Id  --
+    --------------------
+ 
+    function Get_Thread_Id (T : ST.Task_Id) return OSI.Thread_Id is
+    begin
+       return OSI.Thread_Id (T.Common.LL.Thread);
+    end Get_Thread_Id;
+ 
+    ----------
+    -- Self --
+    ----------
+ 
+    function Self return Task_Id is
+       Self_ID : Task_Id renames Thread_Local_Data_Ptr.Self_ID;
+ 
+    begin
+       --  Check that the thread local data has been initialized.
+ 
+       pragma Assert
+         ((Thread_Local_Data_Ptr /= null
+           and then Thread_Local_Data_Ptr.Self_ID /= null));
+ 
+       return Self_ID;
+    end Self;
+ 
+    ---------------------
+    -- Initialize_Lock --
+    ---------------------
+ 
+    procedure Initialize_Lock
+      (Prio : System.Any_Priority;
+       L    : access Lock)
+    is
+    begin
+       if DosCreateMutexSem
+         (ICS.Null_Ptr, L.Mutex'Unchecked_Access, 0, False32) /= NO_ERROR
+       then
+          raise Storage_Error;
+       end if;
+ 
+       pragma Assert (L.Mutex /= 0, "Error creating Mutex");
+       L.Priority := Prio;
+       L.Owner_ID := Null_Address;
+    end Initialize_Lock;
+ 
+    procedure Initialize_Lock (L : access RTS_Lock; Level : Lock_Level) is
+       pragma Unreferenced (Level);
+ 
+    begin
+       if DosCreateMutexSem
+         (ICS.Null_Ptr, L.Mutex'Unchecked_Access, 0, False32) /= NO_ERROR
+       then
+          raise Storage_Error;
+       end if;
+ 
+       pragma Assert (L.Mutex /= 0, "Error creating Mutex");
+ 
+       L.Priority := System.Any_Priority'Last;
+       L.Owner_ID := Null_Address;
+    end Initialize_Lock;
+ 
+    -------------------
+    -- Finalize_Lock --
+    -------------------
+ 
+    procedure Finalize_Lock (L : access Lock) is
+    begin
+       Must_Not_Fail (DosCloseMutexSem (L.Mutex));
+    end Finalize_Lock;
+ 
+    procedure Finalize_Lock (L : access RTS_Lock) is
+    begin
+       Must_Not_Fail (DosCloseMutexSem (L.Mutex));
+    end Finalize_Lock;
+ 
+    ----------------
+    -- Write_Lock --
+    ----------------
+ 
+    procedure Write_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
+       Self_ID      : constant Task_Id := Thread_Local_Data_Ptr.Self_ID;
+       Old_Priority : constant Any_Priority :=
+                        Self_ID.Common.LL.Current_Priority;
+ 
+    begin
+       if L.Priority < Old_Priority then
+          Ceiling_Violation := True;
+          return;
+       end if;
+ 
+       Ceiling_Violation := False;
+ 
+       --  Increase priority before getting the lock
+       --  to prevent priority inversion
+ 
+       Thread_Local_Data_Ptr.Lock_Prio_Level :=
+         Thread_Local_Data_Ptr.Lock_Prio_Level + 1;
+       if L.Priority > Old_Priority then
+          Set_Temporary_Priority (Self_ID, L.Priority);
+       end if;
+ 
+       --  Request the lock and then update the lock owner data
+ 
+       Must_Not_Fail (DosRequestMutexSem (L.Mutex, SEM_INDEFINITE_WAIT));
+       L.Owner_Priority := Old_Priority;
+       L.Owner_ID := Self_ID.all'Address;
+    end Write_Lock;
+ 
+    procedure Write_Lock
+      (L           : access RTS_Lock;
+       Global_Lock : Boolean := False)
+    is
+       Self_ID      : Task_Id;
+       Old_Priority : Any_Priority;
+ 
+    begin
+       if not Single_Lock or else Global_Lock then
+          Self_ID := Thread_Local_Data_Ptr.Self_ID;
+          Old_Priority := Self_ID.Common.LL.Current_Priority;
+ 
+          --  Increase priority before getting the lock
+          --  to prevent priority inversion
+ 
+          Thread_Local_Data_Ptr.Lock_Prio_Level :=
+            Thread_Local_Data_Ptr.Lock_Prio_Level + 1;
+ 
+          if L.Priority > Old_Priority then
+             Set_Temporary_Priority (Self_ID, L.Priority);
+          end if;
+ 
+          --  Request the lock and then update the lock owner data
+ 
+          Must_Not_Fail (DosRequestMutexSem (L.Mutex, SEM_INDEFINITE_WAIT));
+          L.Owner_Priority := Old_Priority;
+          L.Owner_ID := Self_ID.all'Address;
+       end if;
+    end Write_Lock;
+ 
+    procedure Write_Lock (T : Task_Id) is
+    begin
+       if not Single_Lock then
+ 
+          --  Request the lock and then update the lock owner data
+ 
+          Must_Not_Fail
+            (DosRequestMutexSem (T.Common.LL.L.Mutex, SEM_INDEFINITE_WAIT));
+          T.Common.LL.L.Owner_ID := Null_Address;
+       end if;
+    end Write_Lock;
+ 
+    ---------------
+    -- Read_Lock --
+    ---------------
+ 
+    procedure Read_Lock
+      (L : access Lock; Ceiling_Violation : out Boolean) renames Write_Lock;
+ 
+    ------------
+    -- Unlock --
+    ------------
+ 
+    procedure Unlock (L : access Lock) is
+       Self_ID      : constant Task_Id := Thread_Local_Data_Ptr.Self_ID;
+       Old_Priority : constant Any_Priority := L.Owner_Priority;
+ 
+    begin
+       --  Check that this task holds the lock
+ 
+       pragma Assert (Suppress_Owner_Check
+         or else L.Owner_ID = Self_ID.all'Address);
+ 
+       --  Upate the owner data
+ 
+       L.Owner_ID := Null_Address;
+ 
+       --  Do the actual unlocking. No more references
+       --  to owner data of L after this point.
+ 
+       Must_Not_Fail (DosReleaseMutexSem (L.Mutex));
+ 
+       --  Reset priority after unlocking to avoid priority inversion
+ 
+       Thread_Local_Data_Ptr.Lock_Prio_Level :=
+         Thread_Local_Data_Ptr.Lock_Prio_Level - 1;
+       if L.Priority /= Old_Priority then
+          Set_Temporary_Priority (Self_ID, Old_Priority);
+       end if;
+    end Unlock;
+ 
+    procedure Unlock (L : access RTS_Lock; Global_Lock : Boolean := False) is
+       Self_ID      : Task_Id;
+       Old_Priority : Any_Priority;
+ 
+    begin
+       if not Single_Lock or else Global_Lock then
+          Self_ID := Thread_Local_Data_Ptr.Self_ID;
+          Old_Priority := L.Owner_Priority;
+          --  Check that this task holds the lock
+ 
+          pragma Assert (Suppress_Owner_Check
+            or else L.Owner_ID = Self_ID.all'Address);
+ 
+          --  Upate the owner data
+ 
+          L.Owner_ID := Null_Address;
+ 
+          --  Do the actual unlocking. No more references
+          --  to owner data of L after this point.
+ 
+          Must_Not_Fail (DosReleaseMutexSem (L.Mutex));
+ 
+          --  Reset priority after unlocking to avoid priority inversion
+ 
+          Thread_Local_Data_Ptr.Lock_Prio_Level :=
+            Thread_Local_Data_Ptr.Lock_Prio_Level - 1;
+ 
+          if L.Priority /= Old_Priority then
+             Set_Temporary_Priority (Self_ID, Old_Priority);
+          end if;
+       end if;
+    end Unlock;
+ 
+    procedure Unlock (T : Task_Id) is
+    begin
+       if not Single_Lock then
+ 
+          --  Check the owner data
+ 
+          pragma Assert (Suppress_Owner_Check
+            or else T.Common.LL.L.Owner_ID = Null_Address);
+ 
+          --  Do the actual unlocking. No more references
+          --  to owner data of T.Common.LL.L after this point.
+ 
+          Must_Not_Fail (DosReleaseMutexSem (T.Common.LL.L.Mutex));
+       end if;
+    end Unlock;
+ 
+    -----------
+    -- Sleep --
+    -----------
+ 
+    procedure Sleep
+      (Self_ID : Task_Id;
+       Reason  : System.Tasking.Task_States)
+    is
+       pragma Unreferenced (Reason);
+ 
+       Count : aliased ULONG; -- Used to store dummy result
+ 
+    begin
+       --  Must reset Cond BEFORE L is unlocked.
+ 
+       Sem_Must_Not_Fail
+         (DosResetEventSem (Self_ID.Common.LL.CV, Count'Unchecked_Access));
+ 
+       if Single_Lock then
+          Unlock_RTS;
+       else
+          Unlock (Self_ID);
+       end if;
+ 
+       --  No problem if we are interrupted here.
+       --  If the condition is signaled, DosWaitEventSem will simply not block.
+ 
+       Sem_Must_Not_Fail
+         (DosWaitEventSem (Self_ID.Common.LL.CV, SEM_INDEFINITE_WAIT));
+ 
+       --  Since L was previously accquired, lock operation should not fail.
+ 
+       if Single_Lock then
+          Lock_RTS;
+       else
+          Write_Lock (Self_ID);
+       end if;
+    end Sleep;
+ 
+    -----------------
+    -- Timed_Sleep --
+    -----------------
+ 
+    --  This is for use within the run-time system, so abort is
+    --  assumed to be already deferred, and the caller should be
+    --  holding its own ATCB lock.
+ 
+    --  Pre-assertion: Cond is posted
+    --                 Self is locked.
+ 
+    --  Post-assertion: Cond is posted
+    --                  Self is locked.
+ 
+    procedure Timed_Sleep
+      (Self_ID  : Task_Id;
+       Time     : Duration;
+       Mode     : ST.Delay_Modes;
+       Reason   : System.Tasking.Task_States;
+       Timedout : out Boolean;
+       Yielded  : out Boolean)
+    is
+       pragma Unreferenced (Reason);
+ 
+       Check_Time : constant Duration := OSP.Monotonic_Clock;
+       Rel_Time   : Duration;
+       Abs_Time   : Duration;
+       Time_Out   : ULONG;
+       Result    : APIRET;
+       Count      : aliased ULONG;  --  Used to store dummy result
+ 
+    begin
+       --  Must reset Cond BEFORE Self_ID is unlocked.
+ 
+       Sem_Must_Not_Fail
+         (DosResetEventSem (Self_ID.Common.LL.CV,
+          Count'Unchecked_Access));
+ 
+       if Single_Lock then
+          Unlock_RTS;
+       else
+          Unlock (Self_ID);
+       end if;
+ 
+       Timedout := True;
+       Yielded := False;
+ 
+       if Mode = Relative then
+          Rel_Time := Time;
+          Abs_Time := Duration'Min (Time, Max_Sensible_Delay) + Check_Time;
+       else
+          Rel_Time := Time - Check_Time;
+          Abs_Time := Time;
+       end if;
+ 
+       if Rel_Time > 0.0 then
+          loop
+             exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level
+               or else Self_ID.Pending_Priority_Change;
+ 
+             Time_Out := To_MS (Rel_Time);
+             Result := DosWaitEventSem (Self_ID.Common.LL.CV, Time_Out);
+             pragma Assert
+              ((Result = NO_ERROR or Result = ERROR_TIMEOUT
+                 or Result = ERROR_INTERRUPT));
+ 
+             --  ???
+             --  What to do with error condition ERROR_NOT_ENOUGH_MEMORY? Can
+             --  we raise an exception here?  And what about ERROR_INTERRUPT?
+             --  Should that be treated as a simple timeout?
+             --  For now, consider only ERROR_TIMEOUT to be a timeout.
+ 
+             exit when Abs_Time <= OSP.Monotonic_Clock;
+ 
+             if Result /= ERROR_TIMEOUT then
+                --  somebody may have called Wakeup for us
+                Timedout := False;
+                exit;
+             end if;
+ 
+             Rel_Time := Abs_Time - OSP.Monotonic_Clock;
+          end loop;
+       end if;
+ 
+       --  Ensure post-condition
+ 
+       if Single_Lock then
+          Lock_RTS;
+       else
+          Write_Lock (Self_ID);
+       end if;
+ 
+       if Timedout then
+          Sem_Must_Not_Fail (DosPostEventSem (Self_ID.Common.LL.CV));
+       end if;
+    end Timed_Sleep;
+ 
+    -----------------
+    -- Timed_Delay --
+    -----------------
+ 
+    procedure Timed_Delay
+      (Self_ID  : Task_Id;
+       Time     : Duration;
+       Mode     : ST.Delay_Modes)
+    is
+       Check_Time : constant Duration := OSP.Monotonic_Clock;
+       Rel_Time   : Duration;
+       Abs_Time   : Duration;
+       Timedout   : Boolean := True;
+       Time_Out   : ULONG;
+       Result     : APIRET;
+       Count      : aliased ULONG;  --  Used to store dummy result
+ 
+    begin
+       --  Only the little window between deferring abort and
+       --  locking Self_ID is the reason we need to
+       --  check for pending abort and priority change below! :(
+ 
+       SSL.Abort_Defer.all;
+ 
+       if Single_Lock then
+          Lock_RTS;
+       else
+          Write_Lock (Self_ID);
+       end if;
+ 
+       --  Must reset Cond BEFORE Self_ID is unlocked.
+ 
+       Sem_Must_Not_Fail
+         (DosResetEventSem (Self_ID.Common.LL.CV,
+          Count'Unchecked_Access));
+ 
+       if Single_Lock then
+          Unlock_RTS;
+       else
+          Unlock (Self_ID);
+       end if;
+ 
+       if Mode = Relative then
+          Rel_Time := Time;
+          Abs_Time := Time + Check_Time;
+       else
+          Rel_Time := Time - Check_Time;
+          Abs_Time := Time;
+       end if;
+ 
+       if Rel_Time > 0.0 then
+          Self_ID.Common.State := Delay_Sleep;
+ 
+          loop
+             if Self_ID.Pending_Priority_Change then
+                Self_ID.Pending_Priority_Change := False;
+                Self_ID.Common.Base_Priority := Self_ID.New_Base_Priority;
+                Set_Priority (Self_ID, Self_ID.Common.Base_Priority);
+             end if;
+ 
+             exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level;
+ 
+             Time_Out := To_MS (Rel_Time);
+             Result := DosWaitEventSem (Self_ID.Common.LL.CV, Time_Out);
+ 
+             exit when Abs_Time <= OSP.Monotonic_Clock;
+ 
+             Rel_Time := Abs_Time - OSP.Monotonic_Clock;
+          end loop;
+ 
+          Self_ID.Common.State := Runnable;
+          Timedout := Result = ERROR_TIMEOUT;
+       end if;
+ 
+       if Single_Lock then
+          Lock_RTS;
+       else
+          Write_Lock (Self_ID);
+       end if;
+ 
+       if Timedout then
+          Sem_Must_Not_Fail (DosPostEventSem (Self_ID.Common.LL.CV));
+       end if;
+ 
+       if Single_Lock then
+          Unlock_RTS;
+       else
+          Unlock (Self_ID);
+       end if;
+ 
+       System.OS_Interface.Yield;
+       SSL.Abort_Undefer.all;
+    end Timed_Delay;
+ 
+    ------------
+    -- Wakeup --
+    ------------
+ 
+    procedure Wakeup (T : Task_Id; Reason : System.Tasking.Task_States) is
+       pragma Unreferenced (Reason);
+    begin
+       Sem_Must_Not_Fail (DosPostEventSem (T.Common.LL.CV));
+    end Wakeup;
+ 
+    -----------
+    -- Yield --
+    -----------
+ 
+    procedure Yield (Do_Yield : Boolean := True) is
+    begin
+       if Do_Yield then
+          System.OS_Interface.Yield;
+       end if;
+    end Yield;
+ 
+    ----------------------------
+    -- Set_Temporary_Priority --
+    ----------------------------
+ 
+    procedure Set_Temporary_Priority
+      (T            : Task_Id;
+       New_Priority : System.Any_Priority)
+    is
+       use Interfaces.C;
+       Delta_Priority : Integer;
+ 
+    begin
+       --  When Lock_Prio_Level = 0, we always need to set the
+       --  Active_Priority. In this way we can make priority changes
+       --  due to locking independent of those caused by calling
+       --  Set_Priority.
+ 
+       if Thread_Local_Data_Ptr.Lock_Prio_Level = 0
+         or else New_Priority < T.Common.Current_Priority
+       then
+          Delta_Priority := T.Common.Current_Priority -
+            T.Common.LL.Current_Priority;
+       else
+          Delta_Priority := New_Priority - T.Common.LL.Current_Priority;
+       end if;
+ 
+       if Delta_Priority /= 0 then
+          --  ??? There is a race-condition here
+          --  The TCB is updated before the system call to make
+          --  pre-emption in the critical section less likely.
+ 
+          T.Common.LL.Current_Priority :=
+            T.Common.LL.Current_Priority + Delta_Priority;
+          Must_Not_Fail
+            (DosSetPriority (Scope   => PRTYS_THREAD,
+                             Class   => PRTYC_NOCHANGE,
+                             Delta_P => IC.long (Delta_Priority),
+                             PorTid  => T.Common.LL.Thread));
+       end if;
+    end Set_Temporary_Priority;
+ 
+    ------------------
+    -- Set_Priority --
+    ------------------
+ 
+    procedure Set_Priority
+      (T                   : Task_Id;
+       Prio                : System.Any_Priority;
+       Loss_Of_Inheritance : Boolean := False)
+    is
+       pragma Unreferenced (Loss_Of_Inheritance);
+    begin
+       T.Common.Current_Priority := Prio;
+       Set_Temporary_Priority (T, Prio);
+    end Set_Priority;
+ 
+    ------------------
+    -- Get_Priority --
+    ------------------
+ 
+    function Get_Priority (T : Task_Id) return System.Any_Priority is
+    begin
+       return T.Common.Current_Priority;
+    end Get_Priority;
+ 
+    ----------------
+    -- Enter_Task --
+    ----------------
+ 
+    procedure Enter_Task (Self_ID : Task_Id) is
+    begin
+       --  Initialize thread local data. Must be done first.
+ 
+       Thread_Local_Data_Ptr.Self_ID := Self_ID;
+       Thread_Local_Data_Ptr.Lock_Prio_Level := 0;
+ 
+       Lock_RTS;
+ 
+       for J in Known_Tasks'Range loop
+          if Known_Tasks (J) = null then
+             Known_Tasks (J) := Self_ID;
+             Self_ID.Known_Tasks_Index := J;
+             exit;
+          end if;
+       end loop;
+ 
+       Unlock_RTS;
+ 
+       --  For OS/2, we can set Self_ID.Common.LL.Thread in
+       --  Create_Task, since the thread is created suspended.
+       --  That is, there is no danger of the thread racing ahead
+       --  and trying to reference Self_ID.Common.LL.Thread before it
+       --  has been initialized.
+ 
+       --  .... Do we need to do anything with signals for OS/2 ???
+    end Enter_Task;
+ 
+    --------------
+    -- New_ATCB --
+    --------------
+ 
+    function New_ATCB (Entry_Num : Task_Entry_Index) return Task_Id is
+    begin
+       return new Ada_Task_Control_Block (Entry_Num);
+    end New_ATCB;
+ 
+    -------------------
+    -- Is_Valid_Task --
+    -------------------
+ 
+    function Is_Valid_Task return Boolean is
+    begin
+       return False;
+    end Is_Valid_Task;
+ 
+    -----------------------------
+    -- Register_Foreign_Thread --
+    -----------------------------
+ 
+    function Register_Foreign_Thread return Task_Id is
+    begin
+       return null;
+    end Register_Foreign_Thread;
+ 
+    --------------------
+    -- Initialize_TCB --
+    --------------------
+ 
+    procedure Initialize_TCB (Self_ID : Task_Id; Succeeded : out Boolean) is
+    begin
+       if DosCreateEventSem (ICS.Null_Ptr,
+         Self_ID.Common.LL.CV'Unchecked_Access, 0, True32) = NO_ERROR
+       then
+          if not Single_Lock
+            and then DosCreateMutexSem
+              (ICS.Null_Ptr,
+               Self_ID.Common.LL.L.Mutex'Unchecked_Access,
+               0,
+               False32) /= NO_ERROR
+          then
+             Succeeded := False;
+             Must_Not_Fail (DosCloseEventSem (Self_ID.Common.LL.CV));
+          else
+             Succeeded := True;
+          end if;
+ 
+          --  We now want to do the equivalent of:
+ 
+          --  Initialize_Lock
+          --    (Self_ID.Common.LL.L'Unchecked_Access, ATCB_Level);
+ 
+          --  But we avoid that because the Initialize_TCB routine has an
+          --  exception handler, and it is too early for us to deal with
+          --  installing handlers (see comment below), so we do our own
+          --  Initialize_Lock operation manually.
+ 
+          Self_ID.Common.LL.L.Priority := System.Any_Priority'Last;
+          Self_ID.Common.LL.L.Owner_ID := Null_Address;
+ 
+       else
+          Succeeded := False;
+       end if;
+ 
+       --  Note: at one time we had an exception handler here, whose code
+       --  was as follows:
+ 
+       --  exception
+ 
+       --     Assumes any failure must be due to insufficient resources
+ 
+       --     when Storage_Error =>
+       --        Must_Not_Fail (DosCloseEventSem (Self_ID.Common.LL.CV));
+       --        Succeeded := False;
+ 
+       --  but that won't work with the old exception scheme, since it would
+       --  result in messing with Jmpbuf values too early. If and when we get
+       --  switched entirely to the new zero-cost exception scheme, we could
+       --  put this handler back in!
+    end Initialize_TCB;
+ 
+    -----------------
+    -- Create_Task --
+    -----------------
+ 
+    procedure Create_Task
+      (T          : Task_Id;
+       Wrapper    : System.Address;
+       Stack_Size : System.Parameters.Size_Type;
+       Priority   : System.Any_Priority;
+       Succeeded  : out Boolean)
+    is
+       Result              : aliased APIRET;
+       Adjusted_Stack_Size : System.Parameters.Size_Type;
+       use System.Parameters;
+ 
+    begin
+       --  In OS/2 the allocated stack size should be based on the
+       --  amount of address space that should be reserved for the stack.
+       --  Actual memory will only be used when the stack is touched anyway.
+ 
+       --  The new minimum size is 12 kB, although the EMX docs
+       --  recommend a minimum size of 32 kB.  (The original was 4 kB)
+       --  Systems that use many tasks (say > 30) and require much
+       --  memory may run out of virtual address space, since OS/2
+       --  has a per-proces limit of 512 MB, of which max. 300 MB is
+       --  usable in practise.
+ 
+       if Stack_Size = Unspecified_Size then
+          Adjusted_Stack_Size := Default_Stack_Size;
+ 
+       elsif Stack_Size < Minimum_Stack_Size then
+          Adjusted_Stack_Size := Minimum_Stack_Size;
+ 
+       else
+          Adjusted_Stack_Size := Stack_Size;
+       end if;
+ 
+       --  GB970222:
+       --    Because DosCreateThread is called directly here, the
+       --    C RTL doesn't get initialized for the new thead. EMX by
+       --    default uses per-thread local heaps in addition to the
+       --    global heap. There might be other effects of by-passing the
+       --    C library here.
+ 
+       --    When using _beginthread the newly created thread is not
+       --    blocked initially. Does this matter or can I create the
+       --    thread running anyway? The LL.Thread variable will be set
+       --    anyway because the variable is passed by reference to OS/2.
+ 
+       T.Common.LL.Wrapper := To_PFNTHREAD (Wrapper);
+ 
+       --  The OS implicitly gives the new task the priority of this task.
+ 
+       T.Common.LL.Current_Priority := Self.Common.LL.Current_Priority;
+ 
+       --  If task was locked before activator task was
+       --  initialized, assume it has OS standard priority
+ 
+       if T.Common.LL.L.Owner_Priority not in Any_Priority'Range then
+          T.Common.LL.L.Owner_Priority := 1;
+       end if;
+ 
+       --  Create the thread, in blocked mode
+ 
+       Result := DosCreateThread
+         (F_ptid   => T.Common.LL.Thread'Unchecked_Access,
+          pfn      => T.Common.LL.Wrapper,
+          param    => To_Address (T),
+          flag     => Block_Child + Commit_Stack,
+          cbStack  => ULONG (Adjusted_Stack_Size));
+ 
+       Succeeded := (Result = NO_ERROR);
+ 
+       if not Succeeded then
+          return;
+       end if;
+ 
+       --  Set the new thread's priority
+       --  (child has inherited priority from parent)
+ 
+       Set_Priority (T, Priority);
+ 
+       --  Start the thread executing
+ 
+       Must_Not_Fail (DosResumeThread (T.Common.LL.Thread));
+ 
+    end Create_Task;
+ 
+    ------------------
+    -- Finalize_TCB --
+    ------------------
+ 
+    procedure Finalize_TCB (T : Task_Id) is
+       Tmp    : Task_Id := T;
+ 
+       procedure Free is new
+         Unchecked_Deallocation (Ada_Task_Control_Block, Task_Id);
+ 
+    begin
+       Must_Not_Fail (DosCloseEventSem (T.Common.LL.CV));
+ 
+       if not Single_Lock then
+          Finalize_Lock (T.Common.LL.L'Unchecked_Access);
+       end if;
+ 
+       if T.Known_Tasks_Index /= -1 then
+          Known_Tasks (T.Known_Tasks_Index) := null;
+       end if;
+ 
+       Free (Tmp);
+    end Finalize_TCB;
+ 
+    ---------------
+    -- Exit_Task --
+    ---------------
+ 
+    procedure Exit_Task is
+    begin
+       Thread_Local_Data_Ptr := null;
+    end Exit_Task;
+ 
+    ----------------
+    -- Abort_Task --
+    ----------------
+ 
+    procedure Abort_Task (T : Task_Id) is
+       pragma Unreferenced (T);
+ 
+    begin
+       null;
+ 
+       --  Task abortion not implemented yet.
+       --  Should perform other action ???
+ 
+    end Abort_Task;
+ 
+    ----------------
+    -- Check_Exit --
+    ----------------
+ 
+    --  Dummy version
+ 
+    function Check_Exit (Self_ID : ST.Task_Id) return Boolean is
+    begin
+       return Check_No_Locks (Self_ID);
+    end Check_Exit;
+ 
+    --------------------
+    -- Check_No_Locks --
+    --------------------
+ 
+    function Check_No_Locks (Self_ID : ST.Task_Id) return Boolean is
+       TLD : constant Access_Thread_Local_Data := Thread_Local_Data_Ptr;
+    begin
+       return Self_ID = TLD.Self_ID
+         and then TLD.Lock_Prio_Level = 0;
+    end Check_No_Locks;
+ 
+    ----------------------
+    -- Environment_Task --
+    ----------------------
+ 
+    function Environment_Task return Task_Id is
+    begin
+       return Environment_Task_Id;
+    end Environment_Task;
+ 
+    --------------
+    -- Lock_RTS --
+    --------------
+ 
+    procedure Lock_RTS is
+    begin
+       Write_Lock (Single_RTS_Lock'Access, Global_Lock => True);
+    end Lock_RTS;
+ 
+    ----------------
+    -- Unlock_RTS --
+    ----------------
+ 
+    procedure Unlock_RTS is
+    begin
+       Unlock (Single_RTS_Lock'Access, Global_Lock => True);
+    end Unlock_RTS;
+ 
+    ------------------
+    -- Suspend_Task --
+    ------------------
+ 
+    function Suspend_Task
+      (T           : ST.Task_Id;
+       Thread_Self : Thread_Id) return Boolean
+    is
+    begin
+       if Thread_Id (T.Common.LL.Thread) /= Thread_Self then
+          return DosSuspendThread (T.Common.LL.Thread) = NO_ERROR;
+       else
+          return True;
+       end if;
+    end Suspend_Task;
+ 
+    -----------------
+    -- Resume_Task --
+    -----------------
+ 
+    function Resume_Task
+      (T           : ST.Task_Id;
+       Thread_Self : Thread_Id) return Boolean
+    is
+    begin
+       if Thread_Id (T.Common.LL.Thread) /= Thread_Self then
+          return DosResumeThread (T.Common.LL.Thread) = NO_ERROR;
+       else
+          return True;
+       end if;
+    end Resume_Task;
+ 
+    ----------------
+    -- Initialize --
+    ----------------
+ 
+    procedure Initialize (Environment_Task : Task_Id) is
+       Succeeded : Boolean;
+    begin
+       Environment_Task_Id := Environment_Task;
+ 
+       Initialize_Lock (Single_RTS_Lock'Access, RTS_Lock_Level);
+       --  Initialize the lock used to synchronize chain of all ATCBs.
+ 
+       --  Set ID of environment task.
+ 
+       Thread_Local_Data_Ptr.Self_ID := Environment_Task;
+       Environment_Task.Common.LL.Thread := 1; --  By definition
+ 
+       --  This priority is unknown in fact.
+       --  If actual current priority is different,
+       --  it will get synchronized later on anyway.
+ 
+       Environment_Task.Common.LL.Current_Priority :=
+         Environment_Task.Common.Current_Priority;
+ 
+       --  Initialize TCB for this task.
+       --  This includes all the normal task-external initialization.
+       --  This is also done by Initialize_ATCB, why ???
+ 
+       Initialize_TCB (Environment_Task, Succeeded);
+ 
+       --  Consider raising Storage_Error,
+       --  if propagation can be tolerated ???
+ 
+       pragma Assert (Succeeded);
+ 
+       --  Do normal task-internal initialization,
+       --  which depends on an initialized TCB.
+ 
+       Enter_Task (Environment_Task);
+ 
+       --  Insert here any other special
+       --  initialization needed for the environment task.
+    end Initialize;
+ 
+ begin
+    --  Initialize pointer to task local data.
+    --  This is done once, for all tasks.
+ 
+    Must_Not_Fail (DosAllocThreadLocalMemory
+       ((Thread_Local_Data'Size + 31) / 32,  --  nr of 32-bit words
+        To_PPVOID (Thread_Local_Data_Ptr'Access)));
+ 
+    --  Initialize thread local data for main thread
+ 
+    Thread_Local_Data_Ptr.Self_ID := null;
+    Thread_Local_Data_Ptr.Lock_Prio_Level := 0;
+ end System.Task_Primitives.Operations;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-taprop-posix.adb gcc-4.0.0/gcc/ada/s-taprop-posix.adb
*** gcc-3.4.3/gcc/ada/s-taprop-posix.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-taprop-posix.adb	Tue Jul  6 13:57:30 2004
***************
*** 0 ****
--- 1,1203 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --     S Y S T E M . T A S K _ P R I M I T I V E S . O P E R A T I O N S    --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --         Copyright (C) 1992-2004, Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a POSIX-like version of this package
+ 
+ --  This package contains all the GNULL primitives that interface directly
+ --  with the underlying OS.
+ 
+ --  Note: this file can only be used for POSIX compliant systems that
+ --  implement SCHED_FIFO and Ceiling Locking correctly.
+ 
+ --  For configurations where SCHED_FIFO and priority ceiling are not a
+ --  requirement, this file can also be used (e.g AiX threads)
+ 
+ pragma Polling (Off);
+ --  Turn off polling, we do not want ATC polling to take place during
+ --  tasking operations. It causes infinite loops and other problems.
+ 
+ with System.Tasking.Debug;
+ --  used for Known_Tasks
+ 
+ with System.Task_Info;
+ --  used for Task_Info_Type
+ 
+ with Interfaces.C;
+ --  used for int
+ --           size_t
+ 
+ with System.Interrupt_Management;
+ --  used for Keep_Unmasked
+ --           Abort_Task_Interrupt
+ --           Interrupt_ID
+ 
+ with System.Interrupt_Management.Operations;
+ --  used for Set_Interrupt_Mask
+ --           All_Tasks_Mask
+ pragma Elaborate_All (System.Interrupt_Management.Operations);
+ 
+ with System.Parameters;
+ --  used for Size_Type
+ 
+ with System.Tasking;
+ --  used for Ada_Task_Control_Block
+ --           Task_Id
+ 
+ with System.Soft_Links;
+ --  used for Defer/Undefer_Abort
+ 
+ --  Note that we do not use System.Tasking.Initialization directly since
+ --  this is a higher level package that we shouldn't depend on. For example
+ --  when using the restricted run time, it is replaced by
+ --  System.Tasking.Restricted.Stages.
+ 
+ with System.OS_Primitives;
+ --  used for Delay_Modes
+ 
+ with Unchecked_Conversion;
+ with Unchecked_Deallocation;
+ 
+ package body System.Task_Primitives.Operations is
+ 
+    use System.Tasking.Debug;
+    use System.Tasking;
+    use Interfaces.C;
+    use System.OS_Interface;
+    use System.Parameters;
+    use System.OS_Primitives;
+ 
+    package SSL renames System.Soft_Links;
+ 
+    ----------------
+    -- Local Data --
+    ----------------
+ 
+    --  The followings are logically constants, but need to be initialized
+    --  at run time.
+ 
+    Single_RTS_Lock : aliased RTS_Lock;
+    --  This is a lock to allow only one thread of control in the RTS at
+    --  a time; it is used to execute in mutual exclusion from all other tasks.
+    --  Used mainly in Single_Lock mode, but also to protect All_Tasks_List
+ 
+    ATCB_Key : aliased pthread_key_t;
+    --  Key used to find the Ada Task_Id associated with a thread
+ 
+    Environment_Task_Id : Task_Id;
+    --  A variable to hold Task_Id for the environment task.
+ 
+    Locking_Policy : Character;
+    pragma Import (C, Locking_Policy, "__gl_locking_policy");
+    --  Value of the pragma Locking_Policy:
+    --    'C' for Ceiling_Locking
+    --    'I' for Inherit_Locking
+    --    ' ' for none.
+ 
+    Unblocked_Signal_Mask : aliased sigset_t;
+    --  The set of signals that should unblocked in all tasks
+ 
+    --  The followings are internal configuration constants needed.
+ 
+    Next_Serial_Number : Task_Serial_Number := 100;
+    --  We start at 100, to reserve some special values for
+    --  using in error checking.
+ 
+    Time_Slice_Val : Integer;
+    pragma Import (C, Time_Slice_Val, "__gl_time_slice_val");
+ 
+    Dispatching_Policy : Character;
+    pragma Import (C, Dispatching_Policy, "__gl_task_dispatching_policy");
+ 
+    FIFO_Within_Priorities : constant Boolean := Dispatching_Policy = 'F';
+    --  Indicates whether FIFO_Within_Priorities is set.
+ 
+    Foreign_Task_Elaborated : aliased Boolean := True;
+    --  Used to identified fake tasks (i.e., non-Ada Threads).
+ 
+    --------------------
+    -- Local Packages --
+    --------------------
+ 
+    package Specific is
+ 
+       procedure Initialize (Environment_Task : Task_Id);
+       pragma Inline (Initialize);
+       --  Initialize various data needed by this package.
+ 
+       function Is_Valid_Task return Boolean;
+       pragma Inline (Is_Valid_Task);
+       --  Does executing thread have a TCB?
+ 
+       procedure Set (Self_Id : Task_Id);
+       pragma Inline (Set);
+       --  Set the self id for the current task.
+ 
+       function Self return Task_Id;
+       pragma Inline (Self);
+       --  Return a pointer to the Ada Task Control Block of the calling task.
+ 
+    end Specific;
+ 
+    package body Specific is separate;
+    --  The body of this package is target specific.
+ 
+    ---------------------------------
+    -- Support for foreign threads --
+    ---------------------------------
+ 
+    function Register_Foreign_Thread (Thread : Thread_Id) return Task_Id;
+    --  Allocate and Initialize a new ATCB for the current Thread.
+ 
+    function Register_Foreign_Thread
+      (Thread : Thread_Id) return Task_Id is separate;
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    procedure Abort_Handler (Sig : Signal);
+    --  Signal handler used to implement asynchronous abort.
+    --  See also comment before body, below.
+ 
+    function To_Address is new Unchecked_Conversion (Task_Id, System.Address);
+ 
+    -------------------
+    -- Abort_Handler --
+    -------------------
+ 
+    --  Target-dependent binding of inter-thread Abort signal to
+    --  the raising of the Abort_Signal exception.
+ 
+    --  The technical issues and alternatives here are essentially
+    --  the same as for raising exceptions in response to other
+    --  signals (e.g. Storage_Error). See code and comments in
+    --  the package body System.Interrupt_Management.
+ 
+    --  Some implementations may not allow an exception to be propagated
+    --  out of a handler, and others might leave the signal or
+    --  interrupt that invoked this handler masked after the exceptional
+    --  return to the application code.
+ 
+    --  GNAT exceptions are originally implemented using setjmp()/longjmp().
+    --  On most UNIX systems, this will allow transfer out of a signal handler,
+    --  which is usually the only mechanism available for implementing
+    --  asynchronous handlers of this kind. However, some
+    --  systems do not restore the signal mask on longjmp(), leaving the
+    --  abort signal masked.
+ 
+    procedure Abort_Handler (Sig : Signal) is
+       pragma Warnings (Off, Sig);
+ 
+       T       : constant Task_Id := Self;
+       Result  : Interfaces.C.int;
+       Old_Set : aliased sigset_t;
+ 
+    begin
+       --  It is not safe to raise an exception when using ZCX and the GCC
+       --  exception handling mechanism.
+ 
+       if ZCX_By_Default and then GCC_ZCX_Support then
+          return;
+       end if;
+ 
+       if T.Deferral_Level = 0
+         and then T.Pending_ATC_Level < T.ATC_Nesting_Level and then
+         not T.Aborting
+       then
+          T.Aborting := True;
+ 
+          --  Make sure signals used for RTS internal purpose are unmasked
+ 
+          Result := pthread_sigmask (SIG_UNBLOCK,
+            Unblocked_Signal_Mask'Unchecked_Access, Old_Set'Unchecked_Access);
+          pragma Assert (Result = 0);
+ 
+          raise Standard'Abort_Signal;
+       end if;
+    end Abort_Handler;
+ 
+    -----------------
+    -- Stack_Guard --
+    -----------------
+ 
+    procedure Stack_Guard (T : ST.Task_Id; On : Boolean) is
+       Stack_Base : constant Address := Get_Stack_Base (T.Common.LL.Thread);
+       Guard_Page_Address : Address;
+ 
+       Res : Interfaces.C.int;
+ 
+    begin
+       if Stack_Base_Available then
+ 
+          --  Compute the guard page address
+ 
+          Guard_Page_Address :=
+            Stack_Base - (Stack_Base mod Get_Page_Size) + Get_Page_Size;
+ 
+          if On then
+             Res := mprotect (Guard_Page_Address, Get_Page_Size, PROT_ON);
+          else
+             Res := mprotect (Guard_Page_Address, Get_Page_Size, PROT_OFF);
+          end if;
+ 
+          pragma Assert (Res = 0);
+       end if;
+    end Stack_Guard;
+ 
+    --------------------
+    -- Get_Thread_Id  --
+    --------------------
+ 
+    function Get_Thread_Id (T : ST.Task_Id) return OSI.Thread_Id is
+    begin
+       return T.Common.LL.Thread;
+    end Get_Thread_Id;
+ 
+    ----------
+    -- Self --
+    ----------
+ 
+    function Self return Task_Id renames Specific.Self;
+ 
+    ---------------------
+    -- Initialize_Lock --
+    ---------------------
+ 
+    --  Note: mutexes and cond_variables needed per-task basis are
+    --        initialized in Intialize_TCB and the Storage_Error is
+    --        handled. Other mutexes (such as RTS_Lock, Memory_Lock...)
+    --        used in RTS is initialized before any status change of RTS.
+    --        Therefore rasing Storage_Error in the following routines
+    --        should be able to be handled safely.
+ 
+    procedure Initialize_Lock
+      (Prio : System.Any_Priority;
+       L    : access Lock)
+    is
+       Attributes : aliased pthread_mutexattr_t;
+       Result : Interfaces.C.int;
+ 
+    begin
+       Result := pthread_mutexattr_init (Attributes'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = ENOMEM then
+          raise Storage_Error;
+       end if;
+ 
+       if Locking_Policy = 'C' then
+          Result := pthread_mutexattr_setprotocol
+            (Attributes'Access, PTHREAD_PRIO_PROTECT);
+          pragma Assert (Result = 0);
+ 
+          Result := pthread_mutexattr_setprioceiling
+             (Attributes'Access, Interfaces.C.int (Prio));
+          pragma Assert (Result = 0);
+ 
+       elsif Locking_Policy = 'I' then
+          Result := pthread_mutexattr_setprotocol
+            (Attributes'Access, PTHREAD_PRIO_INHERIT);
+          pragma Assert (Result = 0);
+       end if;
+ 
+       Result := pthread_mutex_init (L, Attributes'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = ENOMEM then
+          raise Storage_Error;
+       end if;
+ 
+       Result := pthread_mutexattr_destroy (Attributes'Access);
+       pragma Assert (Result = 0);
+    end Initialize_Lock;
+ 
+    procedure Initialize_Lock (L : access RTS_Lock; Level : Lock_Level) is
+       pragma Warnings (Off, Level);
+ 
+       Attributes : aliased pthread_mutexattr_t;
+       Result     : Interfaces.C.int;
+ 
+    begin
+       Result := pthread_mutexattr_init (Attributes'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = ENOMEM then
+          raise Storage_Error;
+       end if;
+ 
+       if Locking_Policy = 'C' then
+          Result := pthread_mutexattr_setprotocol
+            (Attributes'Access, PTHREAD_PRIO_PROTECT);
+          pragma Assert (Result = 0);
+ 
+          Result := pthread_mutexattr_setprioceiling
+             (Attributes'Access, Interfaces.C.int (System.Any_Priority'Last));
+          pragma Assert (Result = 0);
+ 
+       elsif Locking_Policy = 'I' then
+          Result := pthread_mutexattr_setprotocol
+            (Attributes'Access, PTHREAD_PRIO_INHERIT);
+          pragma Assert (Result = 0);
+       end if;
+ 
+       Result := pthread_mutex_init (L, Attributes'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = ENOMEM then
+          Result := pthread_mutexattr_destroy (Attributes'Access);
+          raise Storage_Error;
+       end if;
+ 
+       Result := pthread_mutexattr_destroy (Attributes'Access);
+       pragma Assert (Result = 0);
+    end Initialize_Lock;
+ 
+    -------------------
+    -- Finalize_Lock --
+    -------------------
+ 
+    procedure Finalize_Lock (L : access Lock) is
+       Result : Interfaces.C.int;
+ 
+    begin
+       Result := pthread_mutex_destroy (L);
+       pragma Assert (Result = 0);
+    end Finalize_Lock;
+ 
+    procedure Finalize_Lock (L : access RTS_Lock) is
+       Result : Interfaces.C.int;
+ 
+    begin
+       Result := pthread_mutex_destroy (L);
+       pragma Assert (Result = 0);
+    end Finalize_Lock;
+ 
+    ----------------
+    -- Write_Lock --
+    ----------------
+ 
+    procedure Write_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
+       Result : Interfaces.C.int;
+ 
+    begin
+       Result := pthread_mutex_lock (L);
+ 
+       --  Assume that the cause of EINVAL is a priority ceiling violation
+ 
+       Ceiling_Violation := (Result = EINVAL);
+       pragma Assert (Result = 0 or else Result = EINVAL);
+    end Write_Lock;
+ 
+    procedure Write_Lock
+      (L           : access RTS_Lock;
+       Global_Lock : Boolean := False)
+    is
+       Result : Interfaces.C.int;
+ 
+    begin
+       if not Single_Lock or else Global_Lock then
+          Result := pthread_mutex_lock (L);
+          pragma Assert (Result = 0);
+       end if;
+    end Write_Lock;
+ 
+    procedure Write_Lock (T : Task_Id) is
+       Result : Interfaces.C.int;
+ 
+    begin
+       if not Single_Lock then
+          Result := pthread_mutex_lock (T.Common.LL.L'Access);
+          pragma Assert (Result = 0);
+       end if;
+    end Write_Lock;
+ 
+    ---------------
+    -- Read_Lock --
+    ---------------
+ 
+    procedure Read_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
+    begin
+       Write_Lock (L, Ceiling_Violation);
+    end Read_Lock;
+ 
+    ------------
+    -- Unlock --
+    ------------
+ 
+    procedure Unlock (L : access Lock) is
+       Result : Interfaces.C.int;
+ 
+    begin
+       Result := pthread_mutex_unlock (L);
+       pragma Assert (Result = 0);
+    end Unlock;
+ 
+    procedure Unlock (L : access RTS_Lock; Global_Lock : Boolean := False) is
+       Result : Interfaces.C.int;
+ 
+    begin
+       if not Single_Lock or else Global_Lock then
+          Result := pthread_mutex_unlock (L);
+          pragma Assert (Result = 0);
+       end if;
+    end Unlock;
+ 
+    procedure Unlock (T : Task_Id) is
+       Result : Interfaces.C.int;
+ 
+    begin
+       if not Single_Lock then
+          Result := pthread_mutex_unlock (T.Common.LL.L'Access);
+          pragma Assert (Result = 0);
+       end if;
+    end Unlock;
+ 
+    -----------
+    -- Sleep --
+    -----------
+ 
+    procedure Sleep
+      (Self_ID : Task_Id;
+       Reason   : System.Tasking.Task_States)
+    is
+       pragma Warnings (Off, Reason);
+ 
+       Result : Interfaces.C.int;
+ 
+    begin
+       if Single_Lock then
+          Result := pthread_cond_wait
+            (Self_ID.Common.LL.CV'Access, Single_RTS_Lock'Access);
+       else
+          Result := pthread_cond_wait
+            (Self_ID.Common.LL.CV'Access, Self_ID.Common.LL.L'Access);
+       end if;
+ 
+       --  EINTR is not considered a failure.
+ 
+       pragma Assert (Result = 0 or else Result = EINTR);
+    end Sleep;
+ 
+    -----------------
+    -- Timed_Sleep --
+    -----------------
+ 
+    --  This is for use within the run-time system, so abort is
+    --  assumed to be already deferred, and the caller should be
+    --  holding its own ATCB lock.
+ 
+    procedure Timed_Sleep
+      (Self_ID  : Task_Id;
+       Time     : Duration;
+       Mode     : ST.Delay_Modes;
+       Reason   : Task_States;
+       Timedout : out Boolean;
+       Yielded  : out Boolean)
+    is
+       pragma Warnings (Off, Reason);
+ 
+       Check_Time : constant Duration := Monotonic_Clock;
+       Rel_Time   : Duration;
+       Abs_Time   : Duration;
+       Request    : aliased timespec;
+       Result     : Interfaces.C.int;
+ 
+    begin
+       Timedout := True;
+       Yielded := False;
+ 
+       if Mode = Relative then
+          Abs_Time := Duration'Min (Time, Max_Sensible_Delay) + Check_Time;
+ 
+          if Relative_Timed_Wait then
+             Rel_Time := Duration'Min (Max_Sensible_Delay, Time);
+          end if;
+ 
+       else
+          Abs_Time := Duration'Min (Check_Time + Max_Sensible_Delay, Time);
+ 
+          if Relative_Timed_Wait then
+             Rel_Time := Duration'Min (Max_Sensible_Delay, Time - Check_Time);
+          end if;
+       end if;
+ 
+       if Abs_Time > Check_Time then
+          if Relative_Timed_Wait then
+             Request := To_Timespec (Rel_Time);
+          else
+             Request := To_Timespec (Abs_Time);
+          end if;
+ 
+          loop
+             exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level
+               or else Self_ID.Pending_Priority_Change;
+ 
+             if Single_Lock then
+                Result := pthread_cond_timedwait
+                  (Self_ID.Common.LL.CV'Access, Single_RTS_Lock'Access,
+                   Request'Access);
+ 
+             else
+                Result := pthread_cond_timedwait
+                  (Self_ID.Common.LL.CV'Access, Self_ID.Common.LL.L'Access,
+                   Request'Access);
+             end if;
+ 
+             exit when Abs_Time <= Monotonic_Clock;
+ 
+             if Result = 0 or Result = EINTR then
+ 
+                --  Somebody may have called Wakeup for us
+ 
+                Timedout := False;
+                exit;
+             end if;
+ 
+             pragma Assert (Result = ETIMEDOUT);
+          end loop;
+       end if;
+    end Timed_Sleep;
+ 
+    -----------------
+    -- Timed_Delay --
+    -----------------
+ 
+    --  This is for use in implementing delay statements, so
+    --  we assume the caller is abort-deferred but is holding
+    --  no locks.
+ 
+    procedure Timed_Delay
+      (Self_ID  : Task_Id;
+       Time     : Duration;
+       Mode     : ST.Delay_Modes)
+    is
+       Check_Time : constant Duration := Monotonic_Clock;
+       Abs_Time   : Duration;
+       Rel_Time   : Duration;
+       Request    : aliased timespec;
+       Result     : Interfaces.C.int;
+ 
+    begin
+       --  Only the little window between deferring abort and
+       --  locking Self_ID is the reason we need to
+       --  check for pending abort and priority change below! :(
+ 
+       SSL.Abort_Defer.all;
+ 
+       if Single_Lock then
+          Lock_RTS;
+       end if;
+ 
+       Write_Lock (Self_ID);
+ 
+       if Mode = Relative then
+          Abs_Time := Duration'Min (Time, Max_Sensible_Delay) + Check_Time;
+ 
+          if Relative_Timed_Wait then
+             Rel_Time := Duration'Min (Max_Sensible_Delay, Time);
+          end if;
+ 
+       else
+          Abs_Time := Duration'Min (Check_Time + Max_Sensible_Delay, Time);
+ 
+          if Relative_Timed_Wait then
+             Rel_Time := Duration'Min (Max_Sensible_Delay, Time - Check_Time);
+          end if;
+       end if;
+ 
+       if Abs_Time > Check_Time then
+          if Relative_Timed_Wait then
+             Request := To_Timespec (Rel_Time);
+          else
+             Request := To_Timespec (Abs_Time);
+          end if;
+ 
+          Self_ID.Common.State := Delay_Sleep;
+ 
+          loop
+             if Self_ID.Pending_Priority_Change then
+                Self_ID.Pending_Priority_Change := False;
+                Self_ID.Common.Base_Priority := Self_ID.New_Base_Priority;
+                Set_Priority (Self_ID, Self_ID.Common.Base_Priority);
+             end if;
+ 
+             exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level;
+ 
+             if Single_Lock then
+                Result := pthread_cond_timedwait (Self_ID.Common.LL.CV'Access,
+                  Single_RTS_Lock'Access, Request'Access);
+             else
+                Result := pthread_cond_timedwait (Self_ID.Common.LL.CV'Access,
+                  Self_ID.Common.LL.L'Access, Request'Access);
+             end if;
+ 
+             exit when Abs_Time <= Monotonic_Clock;
+ 
+             pragma Assert (Result = 0
+                              or else Result = ETIMEDOUT
+                              or else Result = EINTR);
+          end loop;
+ 
+          Self_ID.Common.State := Runnable;
+       end if;
+ 
+       Unlock (Self_ID);
+ 
+       if Single_Lock then
+          Unlock_RTS;
+       end if;
+ 
+       Result := sched_yield;
+       SSL.Abort_Undefer.all;
+    end Timed_Delay;
+ 
+    ---------------------
+    -- Monotonic_Clock --
+    ---------------------
+ 
+    function Monotonic_Clock return Duration is
+       TS     : aliased timespec;
+       Result : Interfaces.C.int;
+    begin
+       Result := clock_gettime
+         (clock_id => CLOCK_REALTIME, tp => TS'Unchecked_Access);
+       pragma Assert (Result = 0);
+       return To_Duration (TS);
+    end Monotonic_Clock;
+ 
+    -------------------
+    -- RT_Resolution --
+    -------------------
+ 
+    function RT_Resolution return Duration is
+    begin
+       return 10#1.0#E-6;
+    end RT_Resolution;
+ 
+    ------------
+    -- Wakeup --
+    ------------
+ 
+    procedure Wakeup (T : Task_Id; Reason : System.Tasking.Task_States) is
+       pragma Warnings (Off, Reason);
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_cond_signal (T.Common.LL.CV'Access);
+       pragma Assert (Result = 0);
+    end Wakeup;
+ 
+    -----------
+    -- Yield --
+    -----------
+ 
+    procedure Yield (Do_Yield : Boolean := True) is
+       Result : Interfaces.C.int;
+       pragma Unreferenced (Result);
+    begin
+       if Do_Yield then
+          Result := sched_yield;
+       end if;
+    end Yield;
+ 
+    ------------------
+    -- Set_Priority --
+    ------------------
+ 
+    procedure Set_Priority
+      (T                   : Task_Id;
+       Prio                : System.Any_Priority;
+       Loss_Of_Inheritance : Boolean := False)
+    is
+       pragma Warnings (Off, Loss_Of_Inheritance);
+ 
+       Result : Interfaces.C.int;
+       Param  : aliased struct_sched_param;
+ 
+    begin
+       T.Common.Current_Priority := Prio;
+       Param.sched_priority := Interfaces.C.int (Prio);
+ 
+       if Time_Slice_Supported and then Time_Slice_Val > 0 then
+          Result := pthread_setschedparam
+            (T.Common.LL.Thread, SCHED_RR, Param'Access);
+ 
+       elsif FIFO_Within_Priorities or else Time_Slice_Val = 0 then
+          Result := pthread_setschedparam
+            (T.Common.LL.Thread, SCHED_FIFO, Param'Access);
+ 
+       else
+          Result := pthread_setschedparam
+            (T.Common.LL.Thread, SCHED_OTHER, Param'Access);
+       end if;
+ 
+       pragma Assert (Result = 0);
+    end Set_Priority;
+ 
+    ------------------
+    -- Get_Priority --
+    ------------------
+ 
+    function Get_Priority (T : Task_Id) return System.Any_Priority is
+    begin
+       return T.Common.Current_Priority;
+    end Get_Priority;
+ 
+    ----------------
+    -- Enter_Task --
+    ----------------
+ 
+    procedure Enter_Task (Self_ID : Task_Id) is
+    begin
+       Self_ID.Common.LL.Thread := pthread_self;
+       Self_ID.Common.LL.LWP := lwp_self;
+ 
+       Specific.Set (Self_ID);
+ 
+       Lock_RTS;
+ 
+       for J in Known_Tasks'Range loop
+          if Known_Tasks (J) = null then
+             Known_Tasks (J) := Self_ID;
+             Self_ID.Known_Tasks_Index := J;
+             exit;
+          end if;
+       end loop;
+ 
+       Unlock_RTS;
+    end Enter_Task;
+ 
+    --------------
+    -- New_ATCB --
+    --------------
+ 
+    function New_ATCB (Entry_Num : Task_Entry_Index) return Task_Id is
+    begin
+       return new Ada_Task_Control_Block (Entry_Num);
+    end New_ATCB;
+ 
+    -------------------
+    -- Is_Valid_Task --
+    -------------------
+ 
+    function Is_Valid_Task return Boolean renames Specific.Is_Valid_Task;
+ 
+    -----------------------------
+    -- Register_Foreign_Thread --
+    -----------------------------
+ 
+    function Register_Foreign_Thread return Task_Id is
+    begin
+       if Is_Valid_Task then
+          return Self;
+       else
+          return Register_Foreign_Thread (pthread_self);
+       end if;
+    end Register_Foreign_Thread;
+ 
+    --------------------
+    -- Initialize_TCB --
+    --------------------
+ 
+    procedure Initialize_TCB (Self_ID : Task_Id; Succeeded : out Boolean) is
+       Mutex_Attr : aliased pthread_mutexattr_t;
+       Result     : Interfaces.C.int;
+       Cond_Attr  : aliased pthread_condattr_t;
+ 
+    begin
+       --  Give the task a unique serial number.
+ 
+       Self_ID.Serial_Number := Next_Serial_Number;
+       Next_Serial_Number := Next_Serial_Number + 1;
+       pragma Assert (Next_Serial_Number /= 0);
+ 
+       if not Single_Lock then
+          Result := pthread_mutexattr_init (Mutex_Attr'Access);
+          pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+          if Result = 0 then
+             if Locking_Policy = 'C' then
+                Result := pthread_mutexattr_setprotocol
+                  (Mutex_Attr'Access, PTHREAD_PRIO_PROTECT);
+                pragma Assert (Result = 0);
+ 
+                Result := pthread_mutexattr_setprioceiling
+                   (Mutex_Attr'Access,
+                    Interfaces.C.int (System.Any_Priority'Last));
+                pragma Assert (Result = 0);
+ 
+             elsif Locking_Policy = 'I' then
+                Result := pthread_mutexattr_setprotocol
+                  (Mutex_Attr'Access, PTHREAD_PRIO_INHERIT);
+                pragma Assert (Result = 0);
+             end if;
+ 
+             Result := pthread_mutex_init (Self_ID.Common.LL.L'Access,
+               Mutex_Attr'Access);
+             pragma Assert (Result = 0 or else Result = ENOMEM);
+          end if;
+ 
+          if Result /= 0 then
+             Succeeded := False;
+             return;
+          end if;
+ 
+          Result := pthread_mutexattr_destroy (Mutex_Attr'Access);
+          pragma Assert (Result = 0);
+       end if;
+ 
+       Result := pthread_condattr_init (Cond_Attr'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = 0 then
+          Result := pthread_cond_init (Self_ID.Common.LL.CV'Access,
+            Cond_Attr'Access);
+          pragma Assert (Result = 0 or else Result = ENOMEM);
+       end if;
+ 
+       if Result = 0 then
+          Succeeded := True;
+       else
+          if not Single_Lock then
+             Result := pthread_mutex_destroy (Self_ID.Common.LL.L'Access);
+             pragma Assert (Result = 0);
+          end if;
+ 
+          Succeeded := False;
+       end if;
+ 
+       Result := pthread_condattr_destroy (Cond_Attr'Access);
+       pragma Assert (Result = 0);
+    end Initialize_TCB;
+ 
+    -----------------
+    -- Create_Task --
+    -----------------
+ 
+    procedure Create_Task
+      (T          : Task_Id;
+       Wrapper    : System.Address;
+       Stack_Size : System.Parameters.Size_Type;
+       Priority   : System.Any_Priority;
+       Succeeded  : out Boolean)
+    is
+       Attributes          : aliased pthread_attr_t;
+       Adjusted_Stack_Size : Interfaces.C.size_t;
+       Result              : Interfaces.C.int;
+ 
+       function Thread_Body_Access is new
+         Unchecked_Conversion (System.Address, Thread_Body);
+ 
+       use System.Task_Info;
+ 
+    begin
+       if Stack_Size = Unspecified_Size then
+          Adjusted_Stack_Size := Interfaces.C.size_t (Default_Stack_Size);
+ 
+       elsif Stack_Size < Minimum_Stack_Size then
+          Adjusted_Stack_Size := Interfaces.C.size_t (Minimum_Stack_Size);
+ 
+       else
+          Adjusted_Stack_Size := Interfaces.C.size_t (Stack_Size);
+       end if;
+ 
+       if Stack_Base_Available then
+          --  If Stack Checking is supported then allocate 2 additional pages:
+          --
+          --  In the worst case, stack is allocated at something like
+          --  N * Get_Page_Size - epsilon, we need to add the size for 2 pages
+          --  to be sure the effective stack size is greater than what
+          --  has been asked.
+ 
+          Adjusted_Stack_Size := Adjusted_Stack_Size + 2 * Get_Page_Size;
+       end if;
+ 
+       Result := pthread_attr_init (Attributes'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result /= 0 then
+          Succeeded := False;
+          return;
+       end if;
+ 
+       Result := pthread_attr_setdetachstate
+         (Attributes'Access, PTHREAD_CREATE_DETACHED);
+       pragma Assert (Result = 0);
+ 
+       Result := pthread_attr_setstacksize
+         (Attributes'Access, Adjusted_Stack_Size);
+       pragma Assert (Result = 0);
+ 
+       if T.Common.Task_Info /= Default_Scope then
+ 
+          --  We are assuming that Scope_Type has the same values than the
+          --  corresponding C macros
+ 
+          Result := pthread_attr_setscope
+            (Attributes'Access, Task_Info_Type'Pos (T.Common.Task_Info));
+          pragma Assert (Result = 0);
+       end if;
+ 
+       --  Since the initial signal mask of a thread is inherited from the
+       --  creator, and the Environment task has all its signals masked, we
+       --  do not need to manipulate caller's signal mask at this point.
+       --  All tasks in RTS will have All_Tasks_Mask initially.
+ 
+       Result := pthread_create
+         (T.Common.LL.Thread'Access,
+          Attributes'Access,
+          Thread_Body_Access (Wrapper),
+          To_Address (T));
+       pragma Assert (Result = 0 or else Result = EAGAIN);
+ 
+       Succeeded := Result = 0;
+ 
+       Result := pthread_attr_destroy (Attributes'Access);
+       pragma Assert (Result = 0);
+ 
+       Set_Priority (T, Priority);
+    end Create_Task;
+ 
+    ------------------
+    -- Finalize_TCB --
+    ------------------
+ 
+    procedure Finalize_TCB (T : Task_Id) is
+       Result  : Interfaces.C.int;
+       Tmp     : Task_Id := T;
+       Is_Self : constant Boolean := T = Self;
+ 
+       procedure Free is new
+         Unchecked_Deallocation (Ada_Task_Control_Block, Task_Id);
+ 
+    begin
+       if not Single_Lock then
+          Result := pthread_mutex_destroy (T.Common.LL.L'Access);
+          pragma Assert (Result = 0);
+       end if;
+ 
+       Result := pthread_cond_destroy (T.Common.LL.CV'Access);
+       pragma Assert (Result = 0);
+ 
+       if T.Known_Tasks_Index /= -1 then
+          Known_Tasks (T.Known_Tasks_Index) := null;
+       end if;
+ 
+       Free (Tmp);
+ 
+       if Is_Self then
+          Specific.Set (null);
+       end if;
+    end Finalize_TCB;
+ 
+    ---------------
+    -- Exit_Task --
+    ---------------
+ 
+    procedure Exit_Task is
+    begin
+       --  Mark this task as unknown, so that if Self is called, it won't
+       --  return a dangling pointer.
+ 
+       Specific.Set (null);
+    end Exit_Task;
+ 
+    ----------------
+    -- Abort_Task --
+    ----------------
+ 
+    procedure Abort_Task (T : Task_Id) is
+       Result : Interfaces.C.int;
+ 
+    begin
+       Result := pthread_kill (T.Common.LL.Thread,
+         Signal (System.Interrupt_Management.Abort_Task_Interrupt));
+       pragma Assert (Result = 0);
+    end Abort_Task;
+ 
+    ----------------
+    -- Check_Exit --
+    ----------------
+ 
+    --  Dummy version
+ 
+    function Check_Exit (Self_ID : ST.Task_Id) return Boolean is
+       pragma Warnings (Off, Self_ID);
+    begin
+       return True;
+    end Check_Exit;
+ 
+    --------------------
+    -- Check_No_Locks --
+    --------------------
+ 
+    function Check_No_Locks (Self_ID : ST.Task_Id) return Boolean is
+       pragma Warnings (Off, Self_ID);
+    begin
+       return True;
+    end Check_No_Locks;
+ 
+    ----------------------
+    -- Environment_Task --
+    ----------------------
+ 
+    function Environment_Task return Task_Id is
+    begin
+       return Environment_Task_Id;
+    end Environment_Task;
+ 
+    --------------
+    -- Lock_RTS --
+    --------------
+ 
+    procedure Lock_RTS is
+    begin
+       Write_Lock (Single_RTS_Lock'Access, Global_Lock => True);
+    end Lock_RTS;
+ 
+    ----------------
+    -- Unlock_RTS --
+    ----------------
+ 
+    procedure Unlock_RTS is
+    begin
+       Unlock (Single_RTS_Lock'Access, Global_Lock => True);
+    end Unlock_RTS;
+ 
+    ------------------
+    -- Suspend_Task --
+    ------------------
+ 
+    function Suspend_Task
+      (T           : ST.Task_Id;
+       Thread_Self : Thread_Id) return Boolean
+    is
+       pragma Warnings (Off, T);
+       pragma Warnings (Off, Thread_Self);
+    begin
+       return False;
+    end Suspend_Task;
+ 
+    -----------------
+    -- Resume_Task --
+    -----------------
+ 
+    function Resume_Task
+      (T           : ST.Task_Id;
+       Thread_Self : Thread_Id) return Boolean
+    is
+       pragma Warnings (Off, T);
+       pragma Warnings (Off, Thread_Self);
+    begin
+       return False;
+    end Resume_Task;
+ 
+    ----------------
+    -- Initialize --
+    ----------------
+ 
+    procedure Initialize (Environment_Task : Task_Id) is
+       act     : aliased struct_sigaction;
+       old_act : aliased struct_sigaction;
+       Tmp_Set : aliased sigset_t;
+       Result  : Interfaces.C.int;
+ 
+       function State
+         (Int : System.Interrupt_Management.Interrupt_ID) return Character;
+       pragma Import (C, State, "__gnat_get_interrupt_state");
+       --  Get interrupt state.  Defined in a-init.c
+       --  The input argument is the interrupt number,
+       --  and the result is one of the following:
+ 
+       Default : constant Character := 's';
+       --    'n'   this interrupt not set by any Interrupt_State pragma
+       --    'u'   Interrupt_State pragma set state to User
+       --    'r'   Interrupt_State pragma set state to Runtime
+       --    's'   Interrupt_State pragma set state to System (use "default"
+       --           system handler)
+ 
+    begin
+       Environment_Task_Id := Environment_Task;
+ 
+       --  Initialize the lock used to synchronize chain of all ATCBs.
+ 
+       Initialize_Lock (Single_RTS_Lock'Access, RTS_Lock_Level);
+ 
+       Specific.Initialize (Environment_Task);
+ 
+       Enter_Task (Environment_Task);
+ 
+       --  Install the abort-signal handler
+ 
+       if State (System.Interrupt_Management.Abort_Task_Interrupt)
+         /= Default
+       then
+          act.sa_flags := 0;
+          act.sa_handler := Abort_Handler'Address;
+ 
+          Result := sigemptyset (Tmp_Set'Access);
+          pragma Assert (Result = 0);
+          act.sa_mask := Tmp_Set;
+ 
+          Result :=
+            sigaction
+            (Signal (System.Interrupt_Management.Abort_Task_Interrupt),
+             act'Unchecked_Access,
+             old_act'Unchecked_Access);
+          pragma Assert (Result = 0);
+       end if;
+    end Initialize;
+ 
+ begin
+    declare
+       Result : Interfaces.C.int;
+    begin
+       --  Mask Environment task for all signals. The original mask of the
+       --  Environment task will be recovered by Interrupt_Server task
+       --  during the elaboration of s-interr.adb.
+ 
+       System.Interrupt_Management.Operations.Set_Interrupt_Mask
+         (System.Interrupt_Management.Operations.All_Tasks_Mask'Access);
+ 
+       --  Prepare the set of signals that should unblocked in all tasks
+ 
+       Result := sigemptyset (Unblocked_Signal_Mask'Access);
+       pragma Assert (Result = 0);
+ 
+       for J in Interrupt_Management.Interrupt_ID loop
+          if System.Interrupt_Management.Keep_Unmasked (J) then
+             Result := sigaddset (Unblocked_Signal_Mask'Access, Signal (J));
+             pragma Assert (Result = 0);
+          end if;
+       end loop;
+    end;
+ end System.Task_Primitives.Operations;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-taprop-solaris.adb gcc-4.0.0/gcc/ada/s-taprop-solaris.adb
*** gcc-3.4.3/gcc/ada/s-taprop-solaris.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-taprop-solaris.adb	Tue Jul  6 13:57:30 2004
***************
*** 0 ****
--- 1,1813 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --     S Y S T E M . T A S K _ P R I M I T I V E S . O P E R A T I O N S    --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --         Copyright (C) 1992-2004, Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a Solaris (native) version of this package
+ 
+ --  This package contains all the GNULL primitives that interface directly
+ --  with the underlying OS.
+ 
+ pragma Polling (Off);
+ --  Turn off polling, we do not want ATC polling to take place during
+ --  tasking operations. It causes infinite loops and other problems.
+ 
+ with System.Tasking.Debug;
+ --  used for Known_Tasks
+ 
+ with Ada.Exceptions;
+ --  used for Raise_Exception
+ 
+ with GNAT.OS_Lib;
+ --  used for String_Access, Getenv
+ 
+ with Interfaces.C;
+ --  used for int
+ --           size_t
+ 
+ with System.Interrupt_Management;
+ --  used for Keep_Unmasked
+ --           Abort_Task_Interrupt
+ --           Interrupt_ID
+ 
+ with System.Interrupt_Management.Operations;
+ --  used for Set_Interrupt_Mask
+ --           All_Tasks_Mask
+ pragma Elaborate_All (System.Interrupt_Management.Operations);
+ 
+ with System.Parameters;
+ --  used for Size_Type
+ 
+ with System.Tasking;
+ --  used for Ada_Task_Control_Block
+ --           Task_Id
+ --           ATCB components and types
+ 
+ with System.Task_Info;
+ --  to initialize Task_Info for a C thread, in function Self
+ 
+ with System.Soft_Links;
+ --  used for Defer/Undefer_Abort
+ --       to initialize TSD for a C thread, in function Self
+ 
+ --  Note that we do not use System.Tasking.Initialization directly since
+ --  this is a higher level package that we shouldn't depend on. For example
+ --  when using the restricted run time, it is replaced by
+ --  System.Tasking.Restricted.Stages.
+ 
+ with System.OS_Primitives;
+ --  used for Delay_Modes
+ 
+ with Unchecked_Deallocation;
+ 
+ package body System.Task_Primitives.Operations is
+ 
+    use System.Tasking.Debug;
+    use System.Tasking;
+    use Interfaces.C;
+    use System.OS_Interface;
+    use System.Parameters;
+    use Ada.Exceptions;
+    use System.OS_Primitives;
+ 
+    package SSL renames System.Soft_Links;
+ 
+    ----------------
+    -- Local Data --
+    ----------------
+ 
+    --  The following are logically constants, but need to be initialized
+    --  at run time.
+ 
+    Environment_Task_Id : Task_Id;
+    --  A variable to hold Task_Id for the environment task.
+    --  If we use this variable to get the Task_Id, we need the following
+    --  ATCB_Key only for non-Ada threads.
+ 
+    Unblocked_Signal_Mask : aliased sigset_t;
+    --  The set of signals that should unblocked in all tasks
+ 
+    ATCB_Key : aliased thread_key_t;
+    --  Key used to find the Ada Task_Id associated with a thread,
+    --  at least for C threads unknown to the Ada run-time system.
+ 
+    Single_RTS_Lock : aliased RTS_Lock;
+    --  This is a lock to allow only one thread of control in the RTS at
+    --  a time; it is used to execute in mutual exclusion from all other tasks.
+    --  Used mainly in Single_Lock mode, but also to protect All_Tasks_List
+ 
+    Next_Serial_Number : Task_Serial_Number := 100;
+    --  We start at 100, to reserve some special values for
+    --  using in error checking.
+    --  The following are internal configuration constants needed.
+ 
+    ----------------------
+    -- Priority Support --
+    ----------------------
+ 
+    Priority_Ceiling_Emulation : constant Boolean := True;
+    --  controls whether we emulate priority ceiling locking
+ 
+    --  To get a scheduling close to annex D requirements, we use the real-time
+    --  class provided for LWP's and map each task/thread to a specific and
+    --  unique LWP (there is 1 thread per LWP, and 1 LWP per thread).
+ 
+    --  The real time class can only be set when the process has root
+    --  priviledges, so in the other cases, we use the normal thread scheduling
+    --  and priority handling.
+ 
+    Using_Real_Time_Class : Boolean := False;
+    --  indicates wether the real time class is being used (i.e the process
+    --  has root priviledges).
+ 
+    Prio_Param : aliased struct_pcparms;
+    --  Hold priority info (Real_Time) initialized during the package
+    --  elaboration.
+ 
+    -----------------------------------
+    -- External Configuration Values --
+    -----------------------------------
+ 
+    Time_Slice_Val : Interfaces.C.long;
+    pragma Import (C, Time_Slice_Val, "__gl_time_slice_val");
+ 
+    Locking_Policy : Character;
+    pragma Import (C, Locking_Policy, "__gl_locking_policy");
+ 
+    Dispatching_Policy : Character;
+    pragma Import (C, Dispatching_Policy, "__gl_task_dispatching_policy");
+ 
+    Foreign_Task_Elaborated : aliased Boolean := True;
+    --  Used to identified fake tasks (i.e., non-Ada Threads).
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    function sysconf (name : System.OS_Interface.int) return processorid_t;
+    pragma Import (C, sysconf, "sysconf");
+ 
+    SC_NPROCESSORS_CONF : constant System.OS_Interface.int := 14;
+ 
+    function Num_Procs
+      (name : System.OS_Interface.int := SC_NPROCESSORS_CONF)
+       return processorid_t renames sysconf;
+ 
+    procedure Abort_Handler
+      (Sig     : Signal;
+       Code    : access siginfo_t;
+       Context : access ucontext_t);
+    --  Target-dependent binding of inter-thread Abort signal to
+    --  the raising of the Abort_Signal exception.
+    --  See also comments in 7staprop.adb
+ 
+    ------------
+    -- Checks --
+    ------------
+ 
+    function Check_Initialize_Lock
+      (L     : Lock_Ptr;
+       Level : Lock_Level) return Boolean;
+    pragma Inline (Check_Initialize_Lock);
+ 
+    function Check_Lock (L : Lock_Ptr) return Boolean;
+    pragma Inline (Check_Lock);
+ 
+    function Record_Lock (L : Lock_Ptr) return Boolean;
+    pragma Inline (Record_Lock);
+ 
+    function Check_Sleep (Reason : Task_States) return Boolean;
+    pragma Inline (Check_Sleep);
+ 
+    function Record_Wakeup
+      (L      : Lock_Ptr;
+       Reason : Task_States) return Boolean;
+    pragma Inline (Record_Wakeup);
+ 
+    function Check_Wakeup
+      (T      : Task_Id;
+       Reason : Task_States) return Boolean;
+    pragma Inline (Check_Wakeup);
+ 
+    function Check_Unlock (L : Lock_Ptr) return Boolean;
+    pragma Inline (Check_Unlock);
+ 
+    function Check_Finalize_Lock (L : Lock_Ptr) return Boolean;
+    pragma Inline (Check_Finalize_Lock);
+ 
+    --------------------
+    -- Local Packages --
+    --------------------
+ 
+    package Specific is
+ 
+       procedure Initialize (Environment_Task : Task_Id);
+       pragma Inline (Initialize);
+       --  Initialize various data needed by this package.
+ 
+       function Is_Valid_Task return Boolean;
+       pragma Inline (Is_Valid_Task);
+       --  Does executing thread have a TCB?
+ 
+       procedure Set (Self_Id : Task_Id);
+       pragma Inline (Set);
+       --  Set the self id for the current task.
+ 
+       function Self return Task_Id;
+       pragma Inline (Self);
+       --  Return a pointer to the Ada Task Control Block of the calling task.
+ 
+    end Specific;
+ 
+    package body Specific is separate;
+    --  The body of this package is target specific.
+ 
+    ---------------------------------
+    -- Support for foreign threads --
+    ---------------------------------
+ 
+    function Register_Foreign_Thread (Thread : Thread_Id) return Task_Id;
+    --  Allocate and Initialize a new ATCB for the current Thread.
+ 
+    function Register_Foreign_Thread
+      (Thread : Thread_Id) return Task_Id is separate;
+ 
+    ------------
+    -- Checks --
+    ------------
+ 
+    Check_Count  : Integer := 0;
+    Lock_Count   : Integer := 0;
+    Unlock_Count : Integer := 0;
+ 
+    -------------------
+    -- Abort_Handler --
+    -------------------
+ 
+    procedure Abort_Handler
+      (Sig     : Signal;
+       Code    : access siginfo_t;
+       Context : access ucontext_t)
+    is
+       pragma Unreferenced (Sig);
+       pragma Unreferenced (Code);
+       pragma Unreferenced (Context);
+ 
+       Self_ID : constant Task_Id := Self;
+       Old_Set : aliased sigset_t;
+ 
+       Result : Interfaces.C.int;
+       pragma Unreferenced (Result);
+ 
+    begin
+       --  It is not safe to raise an exception when using ZCX and the GCC
+       --  exception handling mechanism.
+ 
+       if ZCX_By_Default and then GCC_ZCX_Support then
+          return;
+       end if;
+ 
+       if Self_ID.Deferral_Level = 0
+         and then Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level
+         and then not Self_ID.Aborting
+       then
+          Self_ID.Aborting := True;
+ 
+          --  Make sure signals used for RTS internal purpose are unmasked
+ 
+          Result := thr_sigsetmask (SIG_UNBLOCK,
+            Unblocked_Signal_Mask'Unchecked_Access, Old_Set'Unchecked_Access);
+          pragma Assert (Result = 0);
+ 
+          raise Standard'Abort_Signal;
+       end if;
+    end Abort_Handler;
+ 
+    -----------------
+    -- Stack_Guard --
+    -----------------
+ 
+    --  The underlying thread system sets a guard page at the
+    --  bottom of a thread stack, so nothing is needed.
+ 
+    procedure Stack_Guard (T : ST.Task_Id; On : Boolean) is
+       pragma Unreferenced (T);
+       pragma Unreferenced (On);
+    begin
+       null;
+    end Stack_Guard;
+ 
+    -------------------
+    -- Get_Thread_Id --
+    -------------------
+ 
+    function Get_Thread_Id (T : ST.Task_Id) return OSI.Thread_Id is
+    begin
+       return T.Common.LL.Thread;
+    end Get_Thread_Id;
+ 
+    ----------------
+    -- Initialize --
+    ----------------
+ 
+    procedure Initialize (Environment_Task : ST.Task_Id) is
+       act     : aliased struct_sigaction;
+       old_act : aliased struct_sigaction;
+       Tmp_Set : aliased sigset_t;
+       Result  : Interfaces.C.int;
+ 
+       procedure Configure_Processors;
+       --  Processors configuration
+       --  The user can specify a processor which the program should run
+       --  on to emulate a single-processor system. This can be easily
+       --  done by setting environment variable GNAT_PROCESSOR to one of
+       --  the following :
+       --
+       --    -2 : use the default configuration (run the program on all
+       --         available processors) - this is the same as having
+       --         GNAT_PROCESSOR unset
+       --    -1 : let the RTS choose one processor and run the program on
+       --         that processor
+       --    0 .. Last_Proc : run the program on the specified processor
+       --
+       --  Last_Proc is equal to the value of the system variable
+       --  _SC_NPROCESSORS_CONF, minus one.
+ 
+       procedure Configure_Processors is
+          Proc_Acc  : constant GNAT.OS_Lib.String_Access :=
+                        GNAT.OS_Lib.Getenv ("GNAT_PROCESSOR");
+          Proc      : aliased processorid_t;  --  User processor #
+          Last_Proc : processorid_t;          --  Last processor #
+ 
+       begin
+          if Proc_Acc.all'Length /= 0 then
+             --  Environment variable is defined
+ 
+             Last_Proc := Num_Procs - 1;
+ 
+             if Last_Proc /= -1 then
+                Proc := processorid_t'Value (Proc_Acc.all);
+ 
+                if Proc <= -2  or else Proc > Last_Proc then
+                   --  Use the default configuration
+                   null;
+                elsif Proc = -1 then
+                   --  Choose a processor
+ 
+                   Result := 0;
+ 
+                   while Proc < Last_Proc loop
+                      Proc := Proc + 1;
+                      Result := p_online (Proc, PR_STATUS);
+                      exit when Result = PR_ONLINE;
+                   end loop;
+ 
+                   pragma Assert (Result = PR_ONLINE);
+                   Result := processor_bind (P_PID, P_MYID, Proc, null);
+                   pragma Assert (Result = 0);
+ 
+                else
+                   --  Use user processor
+ 
+                   Result := processor_bind (P_PID, P_MYID, Proc, null);
+                   pragma Assert (Result = 0);
+                end if;
+             end if;
+          end if;
+ 
+       exception
+          when Constraint_Error =>
+ 
+             --  Illegal environment variable GNAT_PROCESSOR - ignored
+ 
+             null;
+       end Configure_Processors;
+ 
+       function State
+         (Int : System.Interrupt_Management.Interrupt_ID) return Character;
+       pragma Import (C, State, "__gnat_get_interrupt_state");
+       --  Get interrupt state.  Defined in a-init.c
+       --  The input argument is the interrupt number,
+       --  and the result is one of the following:
+ 
+       Default : constant Character := 's';
+       --    'n'   this interrupt not set by any Interrupt_State pragma
+       --    'u'   Interrupt_State pragma set state to User
+       --    'r'   Interrupt_State pragma set state to Runtime
+       --    's'   Interrupt_State pragma set state to System (use "default"
+       --           system handler)
+ 
+    --  Start of processing for Initialize
+ 
+    begin
+       Environment_Task_Id := Environment_Task;
+ 
+       --  This is done in Enter_Task, but this is too late for the
+       --  Environment Task, since we need to call Self in Check_Locks when
+       --  the run time is compiled with assertions on.
+ 
+       Specific.Initialize (Environment_Task);
+ 
+       --  Initialize the lock used to synchronize chain of all ATCBs.
+ 
+       Initialize_Lock (Single_RTS_Lock'Access, RTS_Lock_Level);
+ 
+       Enter_Task (Environment_Task);
+ 
+       --  Install the abort-signal handler
+ 
+       if State (System.Interrupt_Management.Abort_Task_Interrupt)
+         /= Default
+       then
+          --  Set sa_flags to SA_NODEFER so that during the handler execution
+          --  we do not change the Signal_Mask to be masked for the Abort_Signal
+          --  This is a temporary fix to the problem that the Signal_Mask is
+          --  not restored after the exception (longjmp) from the handler.
+          --  The right fix should be made in sigsetjmp so that we save
+          --  the Signal_Set and restore it after a longjmp.
+          --  In that case, this field should be changed back to 0. ???
+ 
+          act.sa_flags := 16;
+ 
+          act.sa_handler := Abort_Handler'Address;
+          Result := sigemptyset (Tmp_Set'Access);
+          pragma Assert (Result = 0);
+          act.sa_mask := Tmp_Set;
+ 
+          Result :=
+            sigaction (
+              Signal (System.Interrupt_Management.Abort_Task_Interrupt),
+              act'Unchecked_Access,
+              old_act'Unchecked_Access);
+          pragma Assert (Result = 0);
+       end if;
+ 
+       Configure_Processors;
+    end Initialize;
+ 
+    ---------------------
+    -- Initialize_Lock --
+    ---------------------
+ 
+    --  Note: mutexes and cond_variables needed per-task basis are
+    --        initialized in Initialize_TCB and the Storage_Error is
+    --        handled. Other mutexes (such as RTS_Lock, Memory_Lock...)
+    --        used in RTS is initialized before any status change of RTS.
+    --        Therefore rasing Storage_Error in the following routines
+    --        should be able to be handled safely.
+ 
+    procedure Initialize_Lock
+      (Prio : System.Any_Priority;
+       L    : access Lock)
+    is
+       Result : Interfaces.C.int;
+ 
+    begin
+       pragma Assert (Check_Initialize_Lock (Lock_Ptr (L), PO_Level));
+ 
+       if Priority_Ceiling_Emulation then
+          L.Ceiling := Prio;
+       end if;
+ 
+       Result := mutex_init (L.L'Access, USYNC_THREAD, System.Null_Address);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = ENOMEM then
+          Raise_Exception (Storage_Error'Identity, "Failed to allocate a lock");
+       end if;
+    end Initialize_Lock;
+ 
+    procedure Initialize_Lock
+      (L     : access RTS_Lock;
+       Level : Lock_Level)
+    is
+       Result : Interfaces.C.int;
+ 
+    begin
+       pragma Assert (Check_Initialize_Lock
+         (To_Lock_Ptr (RTS_Lock_Ptr (L)), Level));
+       Result := mutex_init (L.L'Access, USYNC_THREAD, System.Null_Address);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = ENOMEM then
+          Raise_Exception (Storage_Error'Identity, "Failed to allocate a lock");
+       end if;
+    end Initialize_Lock;
+ 
+    -------------------
+    -- Finalize_Lock --
+    -------------------
+ 
+    procedure Finalize_Lock (L : access Lock) is
+       Result : Interfaces.C.int;
+ 
+    begin
+       pragma Assert (Check_Finalize_Lock (Lock_Ptr (L)));
+       Result := mutex_destroy (L.L'Access);
+       pragma Assert (Result = 0);
+    end Finalize_Lock;
+ 
+    procedure Finalize_Lock (L : access RTS_Lock) is
+       Result : Interfaces.C.int;
+ 
+    begin
+       pragma Assert (Check_Finalize_Lock (To_Lock_Ptr (RTS_Lock_Ptr (L))));
+       Result := mutex_destroy (L.L'Access);
+       pragma Assert (Result = 0);
+    end Finalize_Lock;
+ 
+    ----------------
+    -- Write_Lock --
+    ----------------
+ 
+    procedure Write_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
+       Result : Interfaces.C.int;
+ 
+    begin
+       pragma Assert (Check_Lock (Lock_Ptr (L)));
+ 
+       if Priority_Ceiling_Emulation and then Locking_Policy = 'C' then
+          declare
+             Self_Id        : constant Task_Id := Self;
+             Saved_Priority : System.Any_Priority;
+ 
+          begin
+             if Self_Id.Common.LL.Active_Priority > L.Ceiling then
+                Ceiling_Violation := True;
+                return;
+             end if;
+ 
+             Saved_Priority := Self_Id.Common.LL.Active_Priority;
+ 
+             if Self_Id.Common.LL.Active_Priority < L.Ceiling then
+                Set_Priority (Self_Id, L.Ceiling);
+             end if;
+ 
+             Result := mutex_lock (L.L'Access);
+             pragma Assert (Result = 0);
+             Ceiling_Violation := False;
+ 
+             L.Saved_Priority := Saved_Priority;
+          end;
+ 
+       else
+          Result := mutex_lock (L.L'Access);
+          pragma Assert (Result = 0);
+          Ceiling_Violation := False;
+       end if;
+ 
+       pragma Assert (Record_Lock (Lock_Ptr (L)));
+    end Write_Lock;
+ 
+    procedure Write_Lock
+      (L          : access RTS_Lock;
+      Global_Lock : Boolean := False)
+    is
+       Result : Interfaces.C.int;
+ 
+    begin
+       if not Single_Lock or else Global_Lock then
+          pragma Assert (Check_Lock (To_Lock_Ptr (RTS_Lock_Ptr (L))));
+          Result := mutex_lock (L.L'Access);
+          pragma Assert (Result = 0);
+          pragma Assert (Record_Lock (To_Lock_Ptr (RTS_Lock_Ptr (L))));
+       end if;
+    end Write_Lock;
+ 
+    procedure Write_Lock (T : Task_Id) is
+       Result : Interfaces.C.int;
+ 
+    begin
+       if not Single_Lock then
+          pragma Assert (Check_Lock (To_Lock_Ptr (T.Common.LL.L'Access)));
+          Result := mutex_lock (T.Common.LL.L.L'Access);
+          pragma Assert (Result = 0);
+          pragma Assert (Record_Lock (To_Lock_Ptr (T.Common.LL.L'Access)));
+       end if;
+    end Write_Lock;
+ 
+    ---------------
+    -- Read_Lock --
+    ---------------
+ 
+    procedure Read_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
+    begin
+       Write_Lock (L, Ceiling_Violation);
+    end Read_Lock;
+ 
+    ------------
+    -- Unlock --
+    ------------
+ 
+    procedure Unlock (L : access Lock) is
+       Result  : Interfaces.C.int;
+ 
+    begin
+       pragma Assert (Check_Unlock (Lock_Ptr (L)));
+ 
+       if Priority_Ceiling_Emulation and then Locking_Policy = 'C' then
+          declare
+             Self_Id : constant Task_Id := Self;
+ 
+          begin
+             Result := mutex_unlock (L.L'Access);
+             pragma Assert (Result = 0);
+ 
+             if Self_Id.Common.LL.Active_Priority > L.Saved_Priority then
+                Set_Priority (Self_Id, L.Saved_Priority);
+             end if;
+          end;
+       else
+          Result := mutex_unlock (L.L'Access);
+          pragma Assert (Result = 0);
+       end if;
+    end Unlock;
+ 
+    procedure Unlock (L : access RTS_Lock; Global_Lock : Boolean := False) is
+       Result : Interfaces.C.int;
+ 
+    begin
+       if not Single_Lock or else Global_Lock then
+          pragma Assert (Check_Unlock (To_Lock_Ptr (RTS_Lock_Ptr (L))));
+          Result := mutex_unlock (L.L'Access);
+          pragma Assert (Result = 0);
+       end if;
+    end Unlock;
+ 
+    procedure Unlock (T : Task_Id) is
+       Result : Interfaces.C.int;
+ 
+    begin
+       if not Single_Lock then
+          pragma Assert (Check_Unlock (To_Lock_Ptr (T.Common.LL.L'Access)));
+          Result := mutex_unlock (T.Common.LL.L.L'Access);
+          pragma Assert (Result = 0);
+       end if;
+    end Unlock;
+ 
+    --  For the time delay implementation, we need to make sure we
+    --  achieve following criteria:
+ 
+    --  1) We have to delay at least for the amount requested.
+    --  2) We have to give up CPU even though the actual delay does not
+    --     result in blocking.
+    --  3) Except for restricted run-time systems that do not support
+    --     ATC or task abort, the delay must be interrupted by the
+    --     abort_task operation.
+    --  4) The implementation has to be efficient so that the delay overhead
+    --     is relatively cheap.
+    --  (1)-(3) are Ada requirements. Even though (2) is an Annex-D
+    --     requirement we still want to provide the effect in all cases.
+    --     The reason is that users may want to use short delays to implement
+    --     their own scheduling effect in the absence of language provided
+    --     scheduling policies.
+ 
+    ---------------------
+    -- Monotonic_Clock --
+    ---------------------
+ 
+    function Monotonic_Clock return Duration is
+       TS     : aliased timespec;
+       Result : Interfaces.C.int;
+    begin
+       Result := clock_gettime (CLOCK_REALTIME, TS'Unchecked_Access);
+       pragma Assert (Result = 0);
+       return To_Duration (TS);
+    end Monotonic_Clock;
+ 
+    -------------------
+    -- RT_Resolution --
+    -------------------
+ 
+    function RT_Resolution return Duration is
+    begin
+       return 10#1.0#E-6;
+    end RT_Resolution;
+ 
+    -----------
+    -- Yield --
+    -----------
+ 
+    procedure Yield (Do_Yield : Boolean := True) is
+    begin
+       if Do_Yield then
+          System.OS_Interface.thr_yield;
+       end if;
+    end Yield;
+ 
+    -----------
+    -- Self ---
+    -----------
+ 
+    function Self return Task_Id renames Specific.Self;
+ 
+    ------------------
+    -- Set_Priority --
+    ------------------
+ 
+    procedure Set_Priority
+      (T                   : Task_Id;
+       Prio                : System.Any_Priority;
+       Loss_Of_Inheritance : Boolean := False)
+    is
+       pragma Unreferenced (Loss_Of_Inheritance);
+ 
+       Result : Interfaces.C.int;
+       pragma Unreferenced (Result);
+ 
+       Param   : aliased struct_pcparms;
+ 
+       use Task_Info;
+ 
+    begin
+       T.Common.Current_Priority := Prio;
+ 
+       if Priority_Ceiling_Emulation then
+          T.Common.LL.Active_Priority := Prio;
+       end if;
+ 
+       if Using_Real_Time_Class then
+          Param.pc_cid := Prio_Param.pc_cid;
+          Param.rt_pri := pri_t (Prio);
+          Param.rt_tqsecs := Prio_Param.rt_tqsecs;
+          Param.rt_tqnsecs := Prio_Param.rt_tqnsecs;
+ 
+          Result := Interfaces.C.int (
+            priocntl (PC_VERSION, P_LWPID, T.Common.LL.LWP, PC_SETPARMS,
+              Param'Address));
+ 
+       else
+          if T.Common.Task_Info /= null
+            and then not T.Common.Task_Info.Bound_To_LWP
+          then
+             --  The task is not bound to a LWP, so use thr_setprio
+ 
+             Result :=
+               thr_setprio (T.Common.LL.Thread, Interfaces.C.int (Prio));
+ 
+          else
+ 
+             --  The task is bound to a LWP, use priocntl
+             --  ??? TBD
+ 
+             null;
+          end if;
+       end if;
+    end Set_Priority;
+ 
+    ------------------
+    -- Get_Priority --
+    ------------------
+ 
+    function Get_Priority (T : Task_Id) return System.Any_Priority is
+    begin
+       return T.Common.Current_Priority;
+    end Get_Priority;
+ 
+    ----------------
+    -- Enter_Task --
+    ----------------
+ 
+    procedure Enter_Task (Self_ID : Task_Id) is
+       Result    : Interfaces.C.int;
+       Proc      : processorid_t;  --  User processor #
+       Last_Proc : processorid_t;  --  Last processor #
+ 
+       use System.Task_Info;
+    begin
+       Self_ID.Common.LL.Thread := thr_self;
+ 
+       Self_ID.Common.LL.LWP := lwp_self;
+ 
+       if Self_ID.Common.Task_Info /= null then
+          if Self_ID.Common.Task_Info.New_LWP
+            and then Self_ID.Common.Task_Info.CPU /= CPU_UNCHANGED
+          then
+             Last_Proc := Num_Procs - 1;
+ 
+             if Self_ID.Common.Task_Info.CPU = ANY_CPU then
+                Result := 0;
+                Proc := 0;
+ 
+                while Proc < Last_Proc loop
+                   Result := p_online (Proc, PR_STATUS);
+                   exit when Result = PR_ONLINE;
+                   Proc := Proc + 1;
+                end loop;
+ 
+                Result := processor_bind (P_LWPID, P_MYID, Proc, null);
+                pragma Assert (Result = 0);
+ 
+             else
+                --  Use specified processor
+ 
+                if Self_ID.Common.Task_Info.CPU < 0
+                  or else Self_ID.Common.Task_Info.CPU > Last_Proc
+                then
+                   raise Invalid_CPU_Number;
+                end if;
+ 
+                Result := processor_bind
+                  (P_LWPID, P_MYID, Self_ID.Common.Task_Info.CPU, null);
+                pragma Assert (Result = 0);
+             end if;
+          end if;
+       end if;
+ 
+       Specific.Set (Self_ID);
+ 
+       --  We need the above code even if we do direct fetch of Task_Id in Self
+       --  for the main task on Sun, x86 Solaris and for gcc 2.7.2.
+ 
+       Lock_RTS;
+ 
+       for J in Known_Tasks'Range loop
+          if Known_Tasks (J) = null then
+             Known_Tasks (J) := Self_ID;
+             Self_ID.Known_Tasks_Index := J;
+             exit;
+          end if;
+       end loop;
+ 
+       Unlock_RTS;
+    end Enter_Task;
+ 
+    --------------
+    -- New_ATCB --
+    --------------
+ 
+    function New_ATCB (Entry_Num : Task_Entry_Index) return Task_Id is
+    begin
+       return new Ada_Task_Control_Block (Entry_Num);
+    end New_ATCB;
+ 
+    -------------------
+    -- Is_Valid_Task --
+    -------------------
+ 
+    function Is_Valid_Task return Boolean renames Specific.Is_Valid_Task;
+ 
+    -----------------------------
+    -- Register_Foreign_Thread --
+    -----------------------------
+ 
+    function Register_Foreign_Thread return Task_Id is
+    begin
+       if Is_Valid_Task then
+          return Self;
+       else
+          return Register_Foreign_Thread (thr_self);
+       end if;
+    end Register_Foreign_Thread;
+ 
+    --------------------
+    -- Initialize_TCB --
+    --------------------
+ 
+    procedure Initialize_TCB (Self_ID : Task_Id; Succeeded : out Boolean) is
+       Result : Interfaces.C.int := 0;
+ 
+    begin
+       --  Give the task a unique serial number.
+ 
+       Self_ID.Serial_Number := Next_Serial_Number;
+       Next_Serial_Number := Next_Serial_Number + 1;
+       pragma Assert (Next_Serial_Number /= 0);
+ 
+       Self_ID.Common.LL.Thread := To_thread_t (-1);
+ 
+       if not Single_Lock then
+          Result := mutex_init
+            (Self_ID.Common.LL.L.L'Access, USYNC_THREAD, System.Null_Address);
+          Self_ID.Common.LL.L.Level :=
+            Private_Task_Serial_Number (Self_ID.Serial_Number);
+          pragma Assert (Result = 0 or else Result = ENOMEM);
+       end if;
+ 
+       if Result = 0 then
+          Result := cond_init (Self_ID.Common.LL.CV'Access, USYNC_THREAD, 0);
+          pragma Assert (Result = 0 or else Result = ENOMEM);
+       end if;
+ 
+       if Result = 0 then
+          Succeeded := True;
+       else
+          if not Single_Lock then
+             Result := mutex_destroy (Self_ID.Common.LL.L.L'Access);
+             pragma Assert (Result = 0);
+          end if;
+ 
+          Succeeded := False;
+       end if;
+    end Initialize_TCB;
+ 
+    -----------------
+    -- Create_Task --
+    -----------------
+ 
+    procedure Create_Task
+      (T          : Task_Id;
+       Wrapper    : System.Address;
+       Stack_Size : System.Parameters.Size_Type;
+       Priority   : System.Any_Priority;
+       Succeeded  : out Boolean)
+    is
+       pragma Unreferenced (Priority);
+ 
+       Result     : Interfaces.C.int;
+       Adjusted_Stack_Size : Interfaces.C.size_t;
+       Opts       : Interfaces.C.int := THR_DETACHED;
+ 
+       Page_Size  : constant System.Parameters.Size_Type := 4096;
+       --  This constant is for reserving extra space at the
+       --  end of the stack, which can be used by the stack
+       --  checking as guard page. The idea is that we need
+       --  to have at least Stack_Size bytes available for
+       --  actual use.
+ 
+       use System.Task_Info;
+ 
+    begin
+       if Stack_Size = System.Parameters.Unspecified_Size then
+          Adjusted_Stack_Size :=
+            Interfaces.C.size_t (Default_Stack_Size + Page_Size);
+ 
+       elsif Stack_Size < Minimum_Stack_Size then
+          Adjusted_Stack_Size :=
+            Interfaces.C.size_t (Minimum_Stack_Size + Page_Size);
+ 
+       else
+          Adjusted_Stack_Size :=
+            Interfaces.C.size_t (Stack_Size + Page_Size);
+       end if;
+ 
+       --  Since the initial signal mask of a thread is inherited from the
+       --  creator, and the Environment task has all its signals masked, we
+       --  do not need to manipulate caller's signal mask at this point.
+       --  All tasks in RTS will have All_Tasks_Mask initially.
+ 
+       if T.Common.Task_Info /= null then
+          if T.Common.Task_Info.New_LWP then
+             Opts := Opts + THR_NEW_LWP;
+          end if;
+ 
+          if T.Common.Task_Info.Bound_To_LWP then
+             Opts := Opts + THR_BOUND;
+          end if;
+ 
+       else
+          Opts := THR_DETACHED + THR_BOUND;
+       end if;
+ 
+       Result := thr_create
+         (System.Null_Address,
+          Adjusted_Stack_Size,
+          Thread_Body_Access (Wrapper),
+          To_Address (T),
+          Opts,
+          T.Common.LL.Thread'Access);
+ 
+       Succeeded := Result = 0;
+       pragma Assert
+         (Result = 0
+           or else Result = ENOMEM
+           or else Result = EAGAIN);
+    end Create_Task;
+ 
+    ------------------
+    -- Finalize_TCB --
+    ------------------
+ 
+    procedure Finalize_TCB (T : Task_Id) is
+       Result : Interfaces.C.int;
+       Tmp    : Task_Id := T;
+       Is_Self : constant Boolean := T = Self;
+ 
+       procedure Free is new
+         Unchecked_Deallocation (Ada_Task_Control_Block, Task_Id);
+ 
+    begin
+       T.Common.LL.Thread := To_thread_t (0);
+ 
+       if not Single_Lock then
+          Result := mutex_destroy (T.Common.LL.L.L'Access);
+          pragma Assert (Result = 0);
+       end if;
+ 
+       Result := cond_destroy (T.Common.LL.CV'Access);
+       pragma Assert (Result = 0);
+ 
+       if T.Known_Tasks_Index /= -1 then
+          Known_Tasks (T.Known_Tasks_Index) := null;
+       end if;
+ 
+       Free (Tmp);
+ 
+       if Is_Self then
+          Specific.Set (null);
+       end if;
+    end Finalize_TCB;
+ 
+    ---------------
+    -- Exit_Task --
+    ---------------
+ 
+    --  This procedure must be called with abort deferred.
+    --  It can no longer call Self or access
+    --  the current task's ATCB, since the ATCB has been deallocated.
+ 
+    procedure Exit_Task is
+    begin
+       Specific.Set (null);
+    end Exit_Task;
+ 
+    ----------------
+    -- Abort_Task --
+    ----------------
+ 
+    procedure Abort_Task (T : Task_Id) is
+       Result : Interfaces.C.int;
+    begin
+       pragma Assert (T /= Self);
+ 
+       Result := thr_kill (T.Common.LL.Thread,
+         Signal (System.Interrupt_Management.Abort_Task_Interrupt));
+       null;
+ 
+       pragma Assert (Result = 0);
+    end Abort_Task;
+ 
+    -----------
+    -- Sleep --
+    -----------
+ 
+    procedure Sleep
+      (Self_ID : Task_Id;
+       Reason  : Task_States)
+    is
+       Result : Interfaces.C.int;
+ 
+    begin
+       pragma Assert (Check_Sleep (Reason));
+ 
+       if Dynamic_Priority_Support
+         and then Self_ID.Pending_Priority_Change
+       then
+          Self_ID.Pending_Priority_Change := False;
+          Self_ID.Common.Base_Priority := Self_ID.New_Base_Priority;
+          Set_Priority (Self_ID, Self_ID.Common.Base_Priority);
+       end if;
+ 
+       if Single_Lock then
+          Result := cond_wait
+            (Self_ID.Common.LL.CV'Access, Single_RTS_Lock.L'Access);
+       else
+          Result := cond_wait
+            (Self_ID.Common.LL.CV'Access, Self_ID.Common.LL.L.L'Access);
+       end if;
+ 
+       pragma Assert (Record_Wakeup
+         (To_Lock_Ptr (Self_ID.Common.LL.L'Access), Reason));
+       pragma Assert (Result = 0 or else Result = EINTR);
+    end Sleep;
+ 
+    --  Note that we are relying heaviliy here on the GNAT feature
+    --  that Calendar.Time, System.Real_Time.Time, Duration, and
+    --  System.Real_Time.Time_Span are all represented in the same
+    --  way, i.e., as a 64-bit count of nanoseconds.
+ 
+    --  This allows us to always pass the timeout value as a Duration.
+ 
+    --  ???
+    --  We are taking liberties here with the semantics of the delays.
+    --  That is, we make no distinction between delays on the Calendar clock
+    --  and delays on the Real_Time clock. That is technically incorrect, if
+    --  the Calendar clock happens to be reset or adjusted.
+    --  To solve this defect will require modification to the compiler
+    --  interface, so that it can pass through more information, to tell
+    --  us here which clock to use!
+ 
+    --  cond_timedwait will return if any of the following happens:
+    --  1) some other task did cond_signal on this condition variable
+    --     In this case, the return value is 0
+    --  2) the call just returned, for no good reason
+    --     This is called a "spurious wakeup".
+    --     In this case, the return value may also be 0.
+    --  3) the time delay expires
+    --     In this case, the return value is ETIME
+    --  4) this task received a signal, which was handled by some
+    --     handler procedure, and now the thread is resuming execution
+    --     UNIX calls this an "interrupted" system call.
+    --     In this case, the return value is EINTR
+ 
+    --  If the cond_timedwait returns 0 or EINTR, it is still
+    --  possible that the time has actually expired, and by chance
+    --  a signal or cond_signal occurred at around the same time.
+ 
+    --  We have also observed that on some OS's the value ETIME
+    --  will be returned, but the clock will show that the full delay
+    --  has not yet expired.
+ 
+    --  For these reasons, we need to check the clock after return
+    --  from cond_timedwait.  If the time has expired, we will set
+    --  Timedout = True.
+ 
+    --  This check might be omitted for systems on which the
+    --  cond_timedwait() never returns early or wakes up spuriously.
+ 
+    --  Annex D requires that completion of a delay cause the task
+    --  to go to the end of its priority queue, regardless of whether
+    --  the task actually was suspended by the delay. Since
+    --  cond_timedwait does not do this on Solaris, we add a call
+    --  to thr_yield at the end. We might do this at the beginning,
+    --  instead, but then the round-robin effect would not be the
+    --  same; the delayed task would be ahead of other tasks of the
+    --  same priority that awoke while it was sleeping.
+ 
+    --  For Timed_Sleep, we are expecting possible cond_signals
+    --  to indicate other events (e.g., completion of a RV or
+    --  completion of the abortable part of an async. select),
+    --  we want to always return if interrupted. The caller will
+    --  be responsible for checking the task state to see whether
+    --  the wakeup was spurious, and to go back to sleep again
+    --  in that case.  We don't need to check for pending abort
+    --  or priority change on the way in our out; that is the
+    --  caller's responsibility.
+ 
+    --  For Timed_Delay, we are not expecting any cond_signals or
+    --  other interruptions, except for priority changes and aborts.
+    --  Therefore, we don't want to return unless the delay has
+    --  actually expired, or the call has been aborted. In this
+    --  case, since we want to implement the entire delay statement
+    --  semantics, we do need to check for pending abort and priority
+    --  changes. We can quietly handle priority changes inside the
+    --  procedure, since there is no entry-queue reordering involved.
+ 
+    -----------------
+    -- Timed_Sleep --
+    -----------------
+ 
+    procedure Timed_Sleep
+      (Self_ID  : Task_Id;
+       Time     : Duration;
+       Mode     : ST.Delay_Modes;
+       Reason   : System.Tasking.Task_States;
+       Timedout : out Boolean;
+       Yielded  : out Boolean)
+    is
+       Check_Time : constant Duration := Monotonic_Clock;
+       Abs_Time   : Duration;
+       Request    : aliased timespec;
+       Result     : Interfaces.C.int;
+ 
+    begin
+       pragma Assert (Check_Sleep (Reason));
+       Timedout := True;
+       Yielded := False;
+ 
+       if Mode = Relative then
+          Abs_Time := Duration'Min (Time, Max_Sensible_Delay) + Check_Time;
+       else
+          Abs_Time := Duration'Min (Check_Time + Max_Sensible_Delay, Time);
+       end if;
+ 
+       if Abs_Time > Check_Time then
+          Request := To_Timespec (Abs_Time);
+ 
+          loop
+             exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level
+               or else (Dynamic_Priority_Support and then
+                 Self_ID.Pending_Priority_Change);
+ 
+             if Single_Lock then
+                Result := cond_timedwait (Self_ID.Common.LL.CV'Access,
+                  Single_RTS_Lock.L'Access, Request'Access);
+             else
+                Result := cond_timedwait (Self_ID.Common.LL.CV'Access,
+                  Self_ID.Common.LL.L.L'Access, Request'Access);
+             end if;
+ 
+             Yielded := True;
+ 
+             exit when Abs_Time <= Monotonic_Clock;
+ 
+             if Result = 0 or Result = EINTR then
+ 
+                --  Somebody may have called Wakeup for us
+ 
+                Timedout := False;
+                exit;
+             end if;
+ 
+             pragma Assert (Result = ETIME);
+          end loop;
+       end if;
+ 
+       pragma Assert (Record_Wakeup
+         (To_Lock_Ptr (Self_ID.Common.LL.L'Access), Reason));
+    end Timed_Sleep;
+ 
+    -----------------
+    -- Timed_Delay --
+    -----------------
+ 
+    procedure Timed_Delay
+      (Self_ID  : Task_Id;
+       Time     : Duration;
+       Mode     : ST.Delay_Modes)
+    is
+       Check_Time : constant Duration := Monotonic_Clock;
+       Abs_Time   : Duration;
+       Request    : aliased timespec;
+       Result     : Interfaces.C.int;
+       Yielded    : Boolean := False;
+ 
+    begin
+       --  Only the little window between deferring abort and
+       --  locking Self_ID is the reason we need to
+       --  check for pending abort and priority change below!
+ 
+       SSL.Abort_Defer.all;
+ 
+       if Single_Lock then
+          Lock_RTS;
+       end if;
+ 
+       Write_Lock (Self_ID);
+ 
+       if Mode = Relative then
+          Abs_Time := Time + Check_Time;
+       else
+          Abs_Time := Duration'Min (Check_Time + Max_Sensible_Delay, Time);
+       end if;
+ 
+       if Abs_Time > Check_Time then
+          Request := To_Timespec (Abs_Time);
+          Self_ID.Common.State := Delay_Sleep;
+ 
+          pragma Assert (Check_Sleep (Delay_Sleep));
+ 
+          loop
+             if Dynamic_Priority_Support and then
+               Self_ID.Pending_Priority_Change then
+                Self_ID.Pending_Priority_Change := False;
+                Self_ID.Common.Base_Priority := Self_ID.New_Base_Priority;
+                Set_Priority (Self_ID, Self_ID.Common.Base_Priority);
+             end if;
+ 
+             exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level;
+ 
+             if Single_Lock then
+                Result := cond_timedwait (Self_ID.Common.LL.CV'Access,
+                  Single_RTS_Lock.L'Access, Request'Access);
+             else
+                Result := cond_timedwait (Self_ID.Common.LL.CV'Access,
+                  Self_ID.Common.LL.L.L'Access, Request'Access);
+             end if;
+ 
+             Yielded := True;
+ 
+             exit when Abs_Time <= Monotonic_Clock;
+ 
+             pragma Assert (Result = 0 or else
+               Result = ETIME or else
+               Result = EINTR);
+          end loop;
+ 
+          pragma Assert (Record_Wakeup
+            (To_Lock_Ptr (Self_ID.Common.LL.L'Access), Delay_Sleep));
+ 
+          Self_ID.Common.State := Runnable;
+       end if;
+ 
+       Unlock (Self_ID);
+ 
+       if Single_Lock then
+          Unlock_RTS;
+       end if;
+ 
+       if not Yielded then
+          thr_yield;
+       end if;
+ 
+       SSL.Abort_Undefer.all;
+    end Timed_Delay;
+ 
+    ------------
+    -- Wakeup --
+    ------------
+ 
+    procedure Wakeup
+      (T : Task_Id;
+       Reason : Task_States)
+    is
+       Result : Interfaces.C.int;
+ 
+    begin
+       pragma Assert (Check_Wakeup (T, Reason));
+       Result := cond_signal (T.Common.LL.CV'Access);
+       pragma Assert (Result = 0);
+    end Wakeup;
+ 
+    ---------------------------
+    -- Check_Initialize_Lock --
+    ---------------------------
+ 
+    --  The following code is intended to check some of the invariant
+    --  assertions related to lock usage, on which we depend.
+ 
+    function Check_Initialize_Lock
+      (L     : Lock_Ptr;
+       Level : Lock_Level) return Boolean
+    is
+       Self_ID : constant Task_Id := Self;
+ 
+    begin
+       --  Check that caller is abort-deferred
+ 
+       if Self_ID.Deferral_Level <= 0 then
+          return False;
+       end if;
+ 
+       --  Check that the lock is not yet initialized
+ 
+       if L.Level /= 0 then
+          return False;
+       end if;
+ 
+       L.Level := Lock_Level'Pos (Level) + 1;
+       return True;
+    end Check_Initialize_Lock;
+ 
+    ----------------
+    -- Check_Lock --
+    ----------------
+ 
+    function Check_Lock (L : Lock_Ptr) return Boolean is
+       Self_ID : constant Task_Id := Self;
+       P       : Lock_Ptr;
+ 
+    begin
+       --  Check that the argument is not null
+ 
+       if L = null then
+          return False;
+       end if;
+ 
+       --  Check that L is not frozen
+ 
+       if L.Frozen then
+          return False;
+       end if;
+ 
+       --  Check that caller is abort-deferred
+ 
+       if Self_ID.Deferral_Level <= 0 then
+          return False;
+       end if;
+ 
+       --  Check that caller is not holding this lock already
+ 
+       if L.Owner = To_Owner_ID (To_Address (Self_ID)) then
+          return False;
+       end if;
+ 
+       if Single_Lock then
+          return True;
+       end if;
+ 
+       --  Check that TCB lock order rules are satisfied
+ 
+       P := Self_ID.Common.LL.Locks;
+       if P /= null then
+          if P.Level >= L.Level
+            and then (P.Level > 2 or else L.Level > 2)
+          then
+             return False;
+          end if;
+       end if;
+ 
+       return True;
+    end Check_Lock;
+ 
+    -----------------
+    -- Record_Lock --
+    -----------------
+ 
+    function Record_Lock (L : Lock_Ptr) return Boolean is
+       Self_ID : constant Task_Id := Self;
+       P       : Lock_Ptr;
+ 
+    begin
+       Lock_Count := Lock_Count + 1;
+ 
+       --  There should be no owner for this lock at this point
+ 
+       if L.Owner /= null then
+          return False;
+       end if;
+ 
+       --  Record new owner
+ 
+       L.Owner := To_Owner_ID (To_Address (Self_ID));
+ 
+       if Single_Lock then
+          return True;
+       end if;
+ 
+       --  Check that TCB lock order rules are satisfied
+ 
+       P := Self_ID.Common.LL.Locks;
+ 
+       if P /= null then
+          L.Next := P;
+       end if;
+ 
+       Self_ID.Common.LL.Locking := null;
+       Self_ID.Common.LL.Locks := L;
+       return True;
+    end Record_Lock;
+ 
+    -----------------
+    -- Check_Sleep --
+    -----------------
+ 
+    function Check_Sleep (Reason : Task_States) return Boolean is
+       pragma Unreferenced (Reason);
+ 
+       Self_ID : constant Task_Id := Self;
+       P       : Lock_Ptr;
+ 
+    begin
+       --  Check that caller is abort-deferred
+ 
+       if Self_ID.Deferral_Level <= 0 then
+          return False;
+       end if;
+ 
+       if Single_Lock then
+          return True;
+       end if;
+ 
+       --  Check that caller is holding own lock, on top of list
+ 
+       if Self_ID.Common.LL.Locks /=
+         To_Lock_Ptr (Self_ID.Common.LL.L'Access)
+       then
+          return False;
+       end if;
+ 
+       --  Check that TCB lock order rules are satisfied
+ 
+       if Self_ID.Common.LL.Locks.Next /= null then
+          return False;
+       end if;
+ 
+       Self_ID.Common.LL.L.Owner := null;
+       P := Self_ID.Common.LL.Locks;
+       Self_ID.Common.LL.Locks := Self_ID.Common.LL.Locks.Next;
+       P.Next := null;
+       return True;
+    end Check_Sleep;
+ 
+    -------------------
+    -- Record_Wakeup --
+    -------------------
+ 
+    function Record_Wakeup
+      (L      : Lock_Ptr;
+       Reason : Task_States) return Boolean
+    is
+       pragma Unreferenced (Reason);
+ 
+       Self_ID : constant Task_Id := Self;
+       P       : Lock_Ptr;
+ 
+    begin
+       --  Record new owner
+ 
+       L.Owner := To_Owner_ID (To_Address (Self_ID));
+ 
+       if Single_Lock then
+          return True;
+       end if;
+ 
+       --  Check that TCB lock order rules are satisfied
+ 
+       P := Self_ID.Common.LL.Locks;
+ 
+       if P /= null then
+          L.Next := P;
+       end if;
+ 
+       Self_ID.Common.LL.Locking := null;
+       Self_ID.Common.LL.Locks := L;
+       return True;
+    end Record_Wakeup;
+ 
+    ------------------
+    -- Check_Wakeup --
+    ------------------
+ 
+    function Check_Wakeup
+      (T      : Task_Id;
+       Reason : Task_States) return Boolean
+    is
+       Self_ID : constant Task_Id := Self;
+ 
+    begin
+       --  Is caller holding T's lock?
+ 
+       if T.Common.LL.L.Owner /= To_Owner_ID (To_Address (Self_ID)) then
+          return False;
+       end if;
+ 
+       --  Are reasons for wakeup and sleep consistent?
+ 
+       if T.Common.State /= Reason then
+          return False;
+       end if;
+ 
+       return True;
+    end Check_Wakeup;
+ 
+    ------------------
+    -- Check_Unlock --
+    ------------------
+ 
+    function Check_Unlock (L : Lock_Ptr) return Boolean is
+       Self_ID : constant Task_Id := Self;
+       P       : Lock_Ptr;
+ 
+    begin
+       Unlock_Count := Unlock_Count + 1;
+ 
+       if L = null then
+          return False;
+       end if;
+ 
+       if L.Buddy /= null then
+          return False;
+       end if;
+ 
+       if L.Level = 4 then
+          Check_Count := Unlock_Count;
+       end if;
+ 
+       if Unlock_Count - Check_Count > 1000 then
+          Check_Count := Unlock_Count;
+       end if;
+ 
+       --  Check that caller is abort-deferred
+ 
+       if Self_ID.Deferral_Level <= 0 then
+          return False;
+       end if;
+ 
+       --  Check that caller is holding this lock, on top of list
+ 
+       if Self_ID.Common.LL.Locks /= L then
+          return False;
+       end if;
+ 
+       --  Record there is no owner now
+ 
+       L.Owner := null;
+       P := Self_ID.Common.LL.Locks;
+       Self_ID.Common.LL.Locks := Self_ID.Common.LL.Locks.Next;
+       P.Next := null;
+       return True;
+    end Check_Unlock;
+ 
+    --------------------
+    -- Check_Finalize --
+    --------------------
+ 
+    function Check_Finalize_Lock (L : Lock_Ptr) return Boolean is
+       Self_ID : constant Task_Id := Self;
+ 
+    begin
+       --  Check that caller is abort-deferred
+ 
+       if Self_ID.Deferral_Level <= 0 then
+          return False;
+       end if;
+ 
+       --  Check that no one is holding this lock
+ 
+       if L.Owner /= null then
+          return False;
+       end if;
+ 
+       L.Frozen := True;
+       return True;
+    end Check_Finalize_Lock;
+ 
+    ----------------
+    -- Check_Exit --
+    ----------------
+ 
+    function Check_Exit (Self_ID : Task_Id) return Boolean is
+    begin
+       --  Check that caller is just holding Global_Task_Lock
+       --  and no other locks
+ 
+       if Self_ID.Common.LL.Locks = null then
+          return False;
+       end if;
+ 
+       --  2 = Global_Task_Level
+ 
+       if Self_ID.Common.LL.Locks.Level /= 2 then
+          return False;
+       end if;
+ 
+       if Self_ID.Common.LL.Locks.Next /= null then
+          return False;
+       end if;
+ 
+       --  Check that caller is abort-deferred
+ 
+       if Self_ID.Deferral_Level <= 0 then
+          return False;
+       end if;
+ 
+       return True;
+    end Check_Exit;
+ 
+    --------------------
+    -- Check_No_Locks --
+    --------------------
+ 
+    function Check_No_Locks (Self_ID : Task_Id) return Boolean is
+    begin
+       return Self_ID.Common.LL.Locks = null;
+    end Check_No_Locks;
+ 
+    ----------------------
+    -- Environment_Task --
+    ----------------------
+ 
+    function Environment_Task return Task_Id is
+    begin
+       return Environment_Task_Id;
+    end Environment_Task;
+ 
+    --------------
+    -- Lock_RTS --
+    --------------
+ 
+    procedure Lock_RTS is
+    begin
+       Write_Lock (Single_RTS_Lock'Access, Global_Lock => True);
+    end Lock_RTS;
+ 
+    ----------------
+    -- Unlock_RTS --
+    ----------------
+ 
+    procedure Unlock_RTS is
+    begin
+       Unlock (Single_RTS_Lock'Access, Global_Lock => True);
+    end Unlock_RTS;
+ 
+    ------------------
+    -- Suspend_Task --
+    ------------------
+ 
+    function Suspend_Task
+      (T           : ST.Task_Id;
+       Thread_Self : Thread_Id) return Boolean
+    is
+    begin
+       if T.Common.LL.Thread /= Thread_Self then
+          return thr_suspend (T.Common.LL.Thread) = 0;
+       else
+          return True;
+       end if;
+    end Suspend_Task;
+ 
+    -----------------
+    -- Resume_Task --
+    -----------------
+ 
+    function Resume_Task
+      (T           : ST.Task_Id;
+       Thread_Self : Thread_Id) return Boolean
+    is
+    begin
+       if T.Common.LL.Thread /= Thread_Self then
+          return thr_continue (T.Common.LL.Thread) = 0;
+       else
+          return True;
+       end if;
+    end Resume_Task;
+ 
+ --  Package elaboration
+ 
+ begin
+    declare
+       Result : Interfaces.C.int;
+ 
+    begin
+       --  Mask Environment task for all signals. The original mask of the
+       --  Environment task will be recovered by Interrupt_Server task
+       --  during the elaboration of s-interr.adb.
+ 
+       System.Interrupt_Management.Operations.Set_Interrupt_Mask
+         (System.Interrupt_Management.Operations.All_Tasks_Mask'Access);
+ 
+       --  Prepare the set of signals that should unblocked in all tasks
+ 
+       Result := sigemptyset (Unblocked_Signal_Mask'Access);
+       pragma Assert (Result = 0);
+ 
+       for J in Interrupt_Management.Interrupt_ID loop
+          if System.Interrupt_Management.Keep_Unmasked (J) then
+             Result := sigaddset (Unblocked_Signal_Mask'Access, Signal (J));
+             pragma Assert (Result = 0);
+          end if;
+       end loop;
+ 
+       --  We need the following code to support automatic creation of fake
+       --  ATCB's for C threads that call the Ada run-time system, even if
+       --  we use a faster way of getting Self for real Ada tasks.
+ 
+       Result := thr_keycreate (ATCB_Key'Access, System.Null_Address);
+       pragma Assert (Result = 0);
+    end;
+ 
+    if Dispatching_Policy = 'F' then
+       declare
+          Result      : Interfaces.C.long;
+          Class_Info  : aliased struct_pcinfo;
+          Secs, Nsecs : Interfaces.C.long;
+ 
+       begin
+          --  If a pragma Time_Slice is specified, takes the value in account.
+ 
+          if Time_Slice_Val > 0 then
+             --  Convert Time_Slice_Val (microseconds) into seconds and
+             --  nanoseconds
+ 
+             Secs := Time_Slice_Val / 1_000_000;
+             Nsecs := (Time_Slice_Val rem 1_000_000) * 1_000;
+ 
+          --  Otherwise, default to no time slicing (i.e run until blocked)
+ 
+          else
+             Secs := RT_TQINF;
+             Nsecs := RT_TQINF;
+          end if;
+ 
+          --  Get the real time class id.
+ 
+          Class_Info.pc_clname (1) := 'R';
+          Class_Info.pc_clname (2) := 'T';
+          Class_Info.pc_clname (3) := ASCII.NUL;
+ 
+          Result := priocntl (PC_VERSION, P_LWPID, P_MYID, PC_GETCID,
+            Class_Info'Address);
+ 
+          --  Request the real time class
+ 
+          Prio_Param.pc_cid := Class_Info.pc_cid;
+          Prio_Param.rt_pri := pri_t (Class_Info.rt_maxpri);
+          Prio_Param.rt_tqsecs := Secs;
+          Prio_Param.rt_tqnsecs := Nsecs;
+ 
+          Result := priocntl (PC_VERSION, P_LWPID, P_MYID, PC_SETPARMS,
+            Prio_Param'Address);
+ 
+          Using_Real_Time_Class := Result /= -1;
+       end;
+    end if;
+ end System.Task_Primitives.Operations;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-taprop-tru64.adb gcc-4.0.0/gcc/ada/s-taprop-tru64.adb
*** gcc-3.4.3/gcc/ada/s-taprop-tru64.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-taprop-tru64.adb	Tue Jul  6 13:57:29 2004
***************
*** 0 ****
--- 1,1130 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --     S Y S T E M . T A S K _ P R I M I T I V E S . O P E R A T I O N S    --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --         Copyright (C) 1992-2004, Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a DEC Unix 4.0d version of this package
+ 
+ --  This package contains all the GNULL primitives that interface directly
+ --  with the underlying OS.
+ 
+ pragma Polling (Off);
+ --  Turn off polling, we do not want ATC polling to take place during
+ --  tasking operations. It causes infinite loops and other problems.
+ 
+ with System.Tasking.Debug;
+ --  used for Known_Tasks
+ 
+ with System.Task_Info;
+ --  used for Task_Info_Type
+ 
+ with Interfaces;
+ --  used for Shift_Left
+ 
+ with Interfaces.C;
+ --  used for int
+ --           size_t
+ 
+ with System.Interrupt_Management;
+ --  used for Keep_Unmasked
+ --           Abort_Task_Interrupt
+ --           Interrupt_ID
+ 
+ with System.Interrupt_Management.Operations;
+ --  used for Set_Interrupt_Mask
+ --           All_Tasks_Mask
+ pragma Elaborate_All (System.Interrupt_Management.Operations);
+ 
+ with System.Parameters;
+ --  used for Size_Type
+ 
+ with System.Tasking;
+ --  used for Ada_Task_Control_Block
+ --           Task_Id
+ --           ATCB components and types
+ 
+ with System.Soft_Links;
+ --  used for Defer/Undefer_Abort
+ 
+ --  Note that we do not use System.Tasking.Initialization directly since
+ --  this is a higher level package that we shouldn't depend on. For example
+ --  when using the restricted run time, it is replaced by
+ --  System.Tasking.Restricted.Stages.
+ 
+ with System.OS_Primitives;
+ --  used for Delay_Modes
+ 
+ with Unchecked_Deallocation;
+ 
+ package body System.Task_Primitives.Operations is
+ 
+    use System.Tasking.Debug;
+    use System.Tasking;
+    use Interfaces.C;
+    use System.OS_Interface;
+    use System.Parameters;
+    use System.OS_Primitives;
+ 
+    package SSL renames System.Soft_Links;
+ 
+    ----------------
+    -- Local Data --
+    ----------------
+ 
+    --  The followings are logically constants, but need to be initialized
+    --  at run time.
+ 
+    Single_RTS_Lock : aliased RTS_Lock;
+    --  This is a lock to allow only one thread of control in the RTS at
+    --  a time; it is used to execute in mutual exclusion from all other tasks.
+    --  Used mainly in Single_Lock mode, but also to protect All_Tasks_List
+ 
+    ATCB_Key : aliased pthread_key_t;
+    --  Key used to find the Ada Task_Id associated with a thread
+ 
+    Environment_Task_Id : Task_Id;
+    --  A variable to hold Task_Id for the environment task.
+ 
+    Unblocked_Signal_Mask : aliased sigset_t;
+    --  The set of signals that should unblocked in all tasks
+ 
+    Time_Slice_Val : Integer;
+    pragma Import (C, Time_Slice_Val, "__gl_time_slice_val");
+ 
+    Locking_Policy : Character;
+    pragma Import (C, Locking_Policy, "__gl_locking_policy");
+ 
+    Dispatching_Policy : Character;
+    pragma Import (C, Dispatching_Policy, "__gl_task_dispatching_policy");
+ 
+    FIFO_Within_Priorities : constant Boolean := Dispatching_Policy = 'F';
+    --  Indicates whether FIFO_Within_Priorities is set.
+ 
+    Curpid : pid_t;
+ 
+    Foreign_Task_Elaborated : aliased Boolean := True;
+    --  Used to identified fake tasks (i.e., non-Ada Threads).
+ 
+    --------------------
+    -- Local Packages --
+    --------------------
+ 
+    package Specific is
+ 
+       procedure Initialize (Environment_Task : Task_Id);
+       pragma Inline (Initialize);
+       --  Initialize various data needed by this package.
+ 
+       function Is_Valid_Task return Boolean;
+       pragma Inline (Is_Valid_Task);
+       --  Does executing thread have a TCB?
+ 
+       procedure Set (Self_Id : Task_Id);
+       pragma Inline (Set);
+       --  Set the self id for the current task.
+ 
+       function Self return Task_Id;
+       pragma Inline (Self);
+       --  Return a pointer to the Ada Task Control Block of the calling task.
+ 
+    end Specific;
+ 
+    package body Specific is separate;
+    --  The body of this package is target specific.
+ 
+    ---------------------------------
+    -- Support for foreign threads --
+    ---------------------------------
+ 
+    function Register_Foreign_Thread (Thread : Thread_Id) return Task_Id;
+    --  Allocate and Initialize a new ATCB for the current Thread.
+ 
+    function Register_Foreign_Thread
+      (Thread : Thread_Id) return Task_Id is separate;
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    procedure Abort_Handler (Sig : Signal);
+    --  Signal handler used to implement asynchronous abortion.
+ 
+    -------------------
+    -- Abort_Handler --
+    -------------------
+ 
+    procedure Abort_Handler (Sig : Signal) is
+       pragma Unreferenced (Sig);
+ 
+       T       : constant Task_Id := Self;
+       Result  : Interfaces.C.int;
+       Old_Set : aliased sigset_t;
+ 
+    begin
+       --  It is not safe to raise an exception when using ZCX and the GCC
+       --  exception handling mechanism.
+ 
+       if ZCX_By_Default and then GCC_ZCX_Support then
+          return;
+       end if;
+ 
+       if T.Deferral_Level = 0
+         and then T.Pending_ATC_Level < T.ATC_Nesting_Level and then
+         not T.Aborting
+       then
+          T.Aborting := True;
+ 
+          --  Make sure signals used for RTS internal purpose are unmasked
+ 
+          Result := pthread_sigmask (SIG_UNBLOCK,
+            Unblocked_Signal_Mask'Unchecked_Access, Old_Set'Unchecked_Access);
+          pragma Assert (Result = 0);
+ 
+          raise Standard'Abort_Signal;
+       end if;
+    end Abort_Handler;
+ 
+    ------------------
+    -- Stack_Guard  --
+    ------------------
+ 
+    --  The underlying thread system sets a guard page at the
+    --  bottom of a thread stack, so nothing is needed.
+ 
+    procedure Stack_Guard (T : ST.Task_Id; On : Boolean) is
+       pragma Unreferenced (T);
+       pragma Unreferenced (On);
+    begin
+       null;
+    end Stack_Guard;
+ 
+    --------------------
+    -- Get_Thread_Id  --
+    --------------------
+ 
+    function Get_Thread_Id (T : ST.Task_Id) return OSI.Thread_Id is
+    begin
+       return T.Common.LL.Thread;
+    end Get_Thread_Id;
+ 
+    ----------
+    -- Self --
+    ----------
+ 
+    function Self return Task_Id renames Specific.Self;
+ 
+    ---------------------
+    -- Initialize_Lock --
+    ---------------------
+ 
+    --  Note: mutexes and cond_variables needed per-task basis are
+    --        initialized in Initialize_TCB and the Storage_Error is
+    --        handled. Other mutexes (such as RTS_Lock, Memory_Lock...)
+    --        used in RTS is initialized before any status change of RTS.
+    --        Therefore rasing Storage_Error in the following routines
+    --        should be able to be handled safely.
+ 
+    procedure Initialize_Lock
+      (Prio : System.Any_Priority;
+       L    : access Lock)
+    is
+       Attributes : aliased pthread_mutexattr_t;
+       Result     : Interfaces.C.int;
+ 
+    begin
+       Result := pthread_mutexattr_init (Attributes'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = ENOMEM then
+          raise Storage_Error;
+       end if;
+ 
+       if Locking_Policy = 'C' then
+          L.Ceiling := Interfaces.C.int (Prio);
+       end if;
+ 
+       Result := pthread_mutex_init (L.L'Access, Attributes'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = ENOMEM then
+          Result := pthread_mutexattr_destroy (Attributes'Access);
+          raise Storage_Error;
+       end if;
+ 
+       Result := pthread_mutexattr_destroy (Attributes'Access);
+       pragma Assert (Result = 0);
+    end Initialize_Lock;
+ 
+    procedure Initialize_Lock (L : access RTS_Lock; Level : Lock_Level) is
+       pragma Unreferenced (Level);
+ 
+       Attributes : aliased pthread_mutexattr_t;
+       Result     : Interfaces.C.int;
+ 
+    begin
+       Result := pthread_mutexattr_init (Attributes'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = ENOMEM then
+          raise Storage_Error;
+       end if;
+ 
+       Result := pthread_mutex_init (L, Attributes'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = ENOMEM then
+          Result := pthread_mutexattr_destroy (Attributes'Access);
+          raise Storage_Error;
+       end if;
+ 
+       Result := pthread_mutexattr_destroy (Attributes'Access);
+       pragma Assert (Result = 0);
+    end Initialize_Lock;
+ 
+    -------------------
+    -- Finalize_Lock --
+    -------------------
+ 
+    procedure Finalize_Lock (L : access Lock) is
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_mutex_destroy (L.L'Access);
+       pragma Assert (Result = 0);
+    end Finalize_Lock;
+ 
+    procedure Finalize_Lock (L : access RTS_Lock) is
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_mutex_destroy (L);
+       pragma Assert (Result = 0);
+    end Finalize_Lock;
+ 
+    ----------------
+    -- Write_Lock --
+    ----------------
+ 
+    procedure Write_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
+       Result         : Interfaces.C.int;
+       Self_ID        : Task_Id;
+       All_Tasks_Link : Task_Id;
+       Current_Prio   : System.Any_Priority;
+ 
+    begin
+       --  Perform ceiling checks only when this is the locking policy in use.
+ 
+       if Locking_Policy = 'C' then
+          Self_ID := Self;
+          All_Tasks_Link := Self_ID.Common.All_Tasks_Link;
+          Current_Prio := Get_Priority (Self_ID);
+ 
+          --  If there is no other task, no need to check priorities
+ 
+          if All_Tasks_Link /= Null_Task
+            and then L.Ceiling < Interfaces.C.int (Current_Prio)
+          then
+             Ceiling_Violation := True;
+             return;
+          end if;
+       end if;
+ 
+       Result := pthread_mutex_lock (L.L'Access);
+       pragma Assert (Result = 0);
+ 
+       Ceiling_Violation := False;
+    end Write_Lock;
+ 
+    procedure Write_Lock
+      (L : access RTS_Lock; Global_Lock : Boolean := False)
+    is
+       Result : Interfaces.C.int;
+    begin
+       if not Single_Lock or else Global_Lock then
+          Result := pthread_mutex_lock (L);
+          pragma Assert (Result = 0);
+       end if;
+    end Write_Lock;
+ 
+    procedure Write_Lock (T : Task_Id) is
+       Result : Interfaces.C.int;
+    begin
+       if not Single_Lock then
+          Result := pthread_mutex_lock (T.Common.LL.L'Access);
+          pragma Assert (Result = 0);
+       end if;
+    end Write_Lock;
+ 
+    ---------------
+    -- Read_Lock --
+    ---------------
+ 
+    procedure Read_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
+    begin
+       Write_Lock (L, Ceiling_Violation);
+    end Read_Lock;
+ 
+    ------------
+    -- Unlock --
+    ------------
+ 
+    procedure Unlock (L : access Lock) is
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_mutex_unlock (L.L'Access);
+       pragma Assert (Result = 0);
+    end Unlock;
+ 
+    procedure Unlock (L : access RTS_Lock; Global_Lock : Boolean := False) is
+       Result : Interfaces.C.int;
+    begin
+       if not Single_Lock or else Global_Lock then
+          Result := pthread_mutex_unlock (L);
+          pragma Assert (Result = 0);
+       end if;
+    end Unlock;
+ 
+    procedure Unlock (T : Task_Id) is
+       Result : Interfaces.C.int;
+    begin
+       if not Single_Lock then
+          Result := pthread_mutex_unlock (T.Common.LL.L'Access);
+          pragma Assert (Result = 0);
+       end if;
+    end Unlock;
+ 
+    -----------
+    -- Sleep --
+    -----------
+ 
+    procedure Sleep
+      (Self_ID : Task_Id;
+       Reason  : System.Tasking.Task_States)
+    is
+       pragma Unreferenced (Reason);
+ 
+       Result : Interfaces.C.int;
+ 
+    begin
+       if Single_Lock then
+          Result := pthread_cond_wait
+                      (Self_ID.Common.LL.CV'Access, Single_RTS_Lock'Access);
+       else
+          Result := pthread_cond_wait
+                      (Self_ID.Common.LL.CV'Access, Self_ID.Common.LL.L'Access);
+       end if;
+ 
+       --  EINTR is not considered a failure.
+ 
+       pragma Assert (Result = 0 or else Result = EINTR);
+    end Sleep;
+ 
+    -----------------
+    -- Timed_Sleep --
+    -----------------
+ 
+    --  This is for use within the run-time system, so abort is
+    --  assumed to be already deferred, and the caller should be
+    --  holding its own ATCB lock.
+ 
+    procedure Timed_Sleep
+      (Self_ID  : Task_Id;
+       Time     : Duration;
+       Mode     : ST.Delay_Modes;
+       Reason   : System.Tasking.Task_States;
+       Timedout : out Boolean;
+       Yielded  : out Boolean)
+    is
+       pragma Unreferenced (Reason);
+ 
+       Check_Time : constant Duration := Monotonic_Clock;
+       Abs_Time   : Duration;
+       Request    : aliased timespec;
+       Result     : Interfaces.C.int;
+ 
+    begin
+       Timedout := True;
+       Yielded := False;
+ 
+       if Mode = Relative then
+          Abs_Time := Duration'Min (Time, Max_Sensible_Delay) + Check_Time;
+       else
+          Abs_Time := Duration'Min (Check_Time + Max_Sensible_Delay, Time);
+       end if;
+ 
+       if Abs_Time > Check_Time then
+          Request := To_Timespec (Abs_Time);
+ 
+          loop
+             exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level
+               or else Self_ID.Pending_Priority_Change;
+ 
+             if Single_Lock then
+                Result := pthread_cond_timedwait
+                            (Self_ID.Common.LL.CV'Access,
+                             Single_RTS_Lock'Access,
+                             Request'Access);
+ 
+             else
+                Result := pthread_cond_timedwait
+                            (Self_ID.Common.LL.CV'Access,
+                             Self_ID.Common.LL.L'Access,
+                             Request'Access);
+             end if;
+ 
+             exit when Abs_Time <= Monotonic_Clock;
+ 
+             if Result = 0 or Result = EINTR then
+ 
+                --  Somebody may have called Wakeup for us
+ 
+                Timedout := False;
+                exit;
+             end if;
+ 
+             pragma Assert (Result = ETIMEDOUT);
+          end loop;
+       end if;
+    end Timed_Sleep;
+ 
+    -----------------
+    -- Timed_Delay --
+    -----------------
+ 
+    --  This is for use in implementing delay statements, so
+    --  we assume the caller is abort-deferred but is holding
+    --  no locks.
+ 
+    procedure Timed_Delay
+      (Self_ID  : Task_Id;
+       Time     : Duration;
+       Mode     : ST.Delay_Modes)
+    is
+       Check_Time : constant Duration := Monotonic_Clock;
+       Abs_Time   : Duration;
+       Request    : aliased timespec;
+       Result     : Interfaces.C.int;
+ 
+    begin
+       --  Only the little window between deferring abort and
+       --  locking Self_ID is the reason we need to
+       --  check for pending abort and priority change below! :(
+ 
+       SSL.Abort_Defer.all;
+ 
+       if Single_Lock then
+          Lock_RTS;
+       end if;
+ 
+       Write_Lock (Self_ID);
+ 
+       if Mode = Relative then
+          Abs_Time := Time + Check_Time;
+       else
+          Abs_Time := Duration'Min (Check_Time + Max_Sensible_Delay, Time);
+       end if;
+ 
+       if Abs_Time > Check_Time then
+          Request := To_Timespec (Abs_Time);
+          Self_ID.Common.State := Delay_Sleep;
+ 
+          loop
+             if Self_ID.Pending_Priority_Change then
+                Self_ID.Pending_Priority_Change := False;
+                Self_ID.Common.Base_Priority := Self_ID.New_Base_Priority;
+                Set_Priority (Self_ID, Self_ID.Common.Base_Priority);
+             end if;
+ 
+             exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level;
+ 
+             if Single_Lock then
+                Result := pthread_cond_timedwait
+                            (Self_ID.Common.LL.CV'Access,
+                             Single_RTS_Lock'Access,
+                             Request'Access);
+             else
+                Result := pthread_cond_timedwait (Self_ID.Common.LL.CV'Access,
+                  Self_ID.Common.LL.L'Access, Request'Access);
+             end if;
+ 
+             exit when Abs_Time <= Monotonic_Clock;
+ 
+             pragma Assert (Result = 0 or else
+               Result = ETIMEDOUT or else
+               Result = EINTR);
+          end loop;
+ 
+          Self_ID.Common.State := Runnable;
+       end if;
+ 
+       Unlock (Self_ID);
+ 
+       if Single_Lock then
+          Unlock_RTS;
+       end if;
+ 
+       Yield;
+       SSL.Abort_Undefer.all;
+    end Timed_Delay;
+ 
+    ---------------------
+    -- Monotonic_Clock --
+    ---------------------
+ 
+    function Monotonic_Clock return Duration is
+       TS     : aliased timespec;
+       Result : Interfaces.C.int;
+    begin
+       Result := clock_gettime (CLOCK_REALTIME, TS'Unchecked_Access);
+       pragma Assert (Result = 0);
+       return To_Duration (TS);
+    end Monotonic_Clock;
+ 
+    -------------------
+    -- RT_Resolution --
+    -------------------
+ 
+    function RT_Resolution return Duration is
+    begin
+       return 1.0 / 1024.0; --  Clock on DEC Alpha ticks at 1024 Hz
+    end RT_Resolution;
+ 
+    ------------
+    -- Wakeup --
+    ------------
+ 
+    procedure Wakeup (T : Task_Id; Reason : System.Tasking.Task_States) is
+       pragma Unreferenced (Reason);
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_cond_signal (T.Common.LL.CV'Access);
+       pragma Assert (Result = 0);
+    end Wakeup;
+ 
+    -----------
+    -- Yield --
+    -----------
+ 
+    procedure Yield (Do_Yield : Boolean := True) is
+       Result : Interfaces.C.int;
+       pragma Unreferenced (Result);
+    begin
+       if Do_Yield then
+          Result := sched_yield;
+       end if;
+    end Yield;
+ 
+    ------------------
+    -- Set_Priority --
+    ------------------
+ 
+    procedure Set_Priority
+      (T                   : Task_Id;
+       Prio                : System.Any_Priority;
+       Loss_Of_Inheritance : Boolean := False)
+    is
+       pragma Unreferenced (Loss_Of_Inheritance);
+ 
+       Result : Interfaces.C.int;
+       Param  : aliased struct_sched_param;
+ 
+    begin
+       T.Common.Current_Priority := Prio;
+       Param.sched_priority  := Interfaces.C.int (Underlying_Priorities (Prio));
+ 
+       if Time_Slice_Val > 0 then
+          Result := pthread_setschedparam
+                      (T.Common.LL.Thread, SCHED_RR, Param'Access);
+ 
+       elsif FIFO_Within_Priorities or else Time_Slice_Val = 0 then
+          Result := pthread_setschedparam
+                      (T.Common.LL.Thread, SCHED_FIFO, Param'Access);
+ 
+       else
+          Result := pthread_setschedparam
+                      (T.Common.LL.Thread, SCHED_OTHER, Param'Access);
+       end if;
+ 
+       pragma Assert (Result = 0);
+    end Set_Priority;
+ 
+    ------------------
+    -- Get_Priority --
+    ------------------
+ 
+    function Get_Priority (T : Task_Id) return System.Any_Priority is
+    begin
+       return T.Common.Current_Priority;
+    end Get_Priority;
+ 
+    ----------------
+    -- Enter_Task --
+    ----------------
+ 
+    procedure Enter_Task (Self_ID : Task_Id) is
+    begin
+       Self_ID.Common.LL.Thread := pthread_self;
+       Specific.Set (Self_ID);
+ 
+       Lock_RTS;
+ 
+       for J in Known_Tasks'Range loop
+          if Known_Tasks (J) = null then
+             Known_Tasks (J) := Self_ID;
+             Self_ID.Known_Tasks_Index := J;
+             exit;
+          end if;
+       end loop;
+ 
+       Unlock_RTS;
+    end Enter_Task;
+ 
+    --------------
+    -- New_ATCB --
+    --------------
+ 
+    function New_ATCB (Entry_Num : Task_Entry_Index) return Task_Id is
+    begin
+       return new Ada_Task_Control_Block (Entry_Num);
+    end New_ATCB;
+ 
+    -------------------
+    -- Is_Valid_Task --
+    -------------------
+ 
+    function Is_Valid_Task return Boolean renames Specific.Is_Valid_Task;
+ 
+    -----------------------------
+    -- Register_Foreign_Thread --
+    -----------------------------
+ 
+    function Register_Foreign_Thread return Task_Id is
+    begin
+       if Is_Valid_Task then
+          return Self;
+       else
+          return Register_Foreign_Thread (pthread_self);
+       end if;
+    end Register_Foreign_Thread;
+ 
+    --------------------
+    -- Initialize_TCB --
+    --------------------
+ 
+    procedure Initialize_TCB (Self_ID : Task_Id; Succeeded : out Boolean) is
+       Mutex_Attr : aliased pthread_mutexattr_t;
+       Result     : Interfaces.C.int;
+       Cond_Attr  : aliased pthread_condattr_t;
+ 
+    begin
+       if not Single_Lock then
+          Result := pthread_mutexattr_init (Mutex_Attr'Access);
+          pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+          if Result = 0 then
+             Result := pthread_mutex_init
+                         (Self_ID.Common.LL.L'Access, Mutex_Attr'Access);
+             pragma Assert (Result = 0 or else Result = ENOMEM);
+          end if;
+ 
+          if Result /= 0 then
+             Succeeded := False;
+             return;
+          end if;
+ 
+          Result := pthread_mutexattr_destroy (Mutex_Attr'Access);
+          pragma Assert (Result = 0);
+       end if;
+ 
+       Result := pthread_condattr_init (Cond_Attr'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = 0 then
+          Result := pthread_cond_init
+                      (Self_ID.Common.LL.CV'Access, Cond_Attr'Access);
+          pragma Assert (Result = 0 or else Result = ENOMEM);
+       end if;
+ 
+       if Result = 0 then
+          Succeeded := True;
+       else
+          if not Single_Lock then
+             Result := pthread_mutex_destroy (Self_ID.Common.LL.L'Access);
+             pragma Assert (Result = 0);
+          end if;
+ 
+          Succeeded := False;
+       end if;
+ 
+       Result := pthread_condattr_destroy (Cond_Attr'Access);
+       pragma Assert (Result = 0);
+    end Initialize_TCB;
+ 
+    -----------------
+    -- Create_Task --
+    -----------------
+ 
+    procedure Create_Task
+      (T          : Task_Id;
+       Wrapper    : System.Address;
+       Stack_Size : System.Parameters.Size_Type;
+       Priority   : System.Any_Priority;
+       Succeeded  : out Boolean)
+    is
+       Attributes          : aliased pthread_attr_t;
+       Adjusted_Stack_Size : Interfaces.C.size_t;
+       Result              : Interfaces.C.int;
+       Param               : aliased System.OS_Interface.struct_sched_param;
+ 
+       use System.Task_Info;
+ 
+    begin
+       if Stack_Size = Unspecified_Size then
+          Adjusted_Stack_Size := Interfaces.C.size_t (Default_Stack_Size);
+ 
+       elsif Stack_Size < Minimum_Stack_Size then
+          Adjusted_Stack_Size := Interfaces.C.size_t (Minimum_Stack_Size);
+ 
+       else
+          Adjusted_Stack_Size := Interfaces.C.size_t (Stack_Size);
+       end if;
+ 
+       Result := pthread_attr_init (Attributes'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result /= 0 then
+          Succeeded := False;
+          return;
+       end if;
+ 
+       Result := pthread_attr_setdetachstate
+                   (Attributes'Access, PTHREAD_CREATE_DETACHED);
+       pragma Assert (Result = 0);
+ 
+       Result := pthread_attr_setstacksize
+                   (Attributes'Access, Adjusted_Stack_Size);
+       pragma Assert (Result = 0);
+ 
+       Param.sched_priority :=
+         Interfaces.C.int (Underlying_Priorities (Priority));
+       Result := pthread_attr_setschedparam
+                   (Attributes'Access, Param'Access);
+       pragma Assert (Result = 0);
+ 
+       if Time_Slice_Val > 0 then
+          Result := pthread_attr_setschedpolicy
+                      (Attributes'Access, System.OS_Interface.SCHED_RR);
+ 
+       elsif FIFO_Within_Priorities or else Time_Slice_Val = 0 then
+          Result := pthread_attr_setschedpolicy
+                      (Attributes'Access, System.OS_Interface.SCHED_FIFO);
+ 
+       else
+          Result := pthread_attr_setschedpolicy
+                      (Attributes'Access, System.OS_Interface.SCHED_OTHER);
+       end if;
+ 
+       pragma Assert (Result = 0);
+ 
+       --  Set the scheduling parameters explicitly, since this is the
+       --  only way to force the OS to take e.g. the sched policy and scope
+       --  attributes into account.
+ 
+       Result := pthread_attr_setinheritsched
+                   (Attributes'Access, PTHREAD_EXPLICIT_SCHED);
+       pragma Assert (Result = 0);
+ 
+       T.Common.Current_Priority := Priority;
+ 
+       if T.Common.Task_Info /= null then
+          case T.Common.Task_Info.Contention_Scope is
+             when System.Task_Info.Process_Scope =>
+                Result := pthread_attr_setscope
+                            (Attributes'Access, PTHREAD_SCOPE_PROCESS);
+ 
+             when System.Task_Info.System_Scope =>
+                Result := pthread_attr_setscope
+                            (Attributes'Access, PTHREAD_SCOPE_SYSTEM);
+ 
+             when System.Task_Info.Default_Scope =>
+                Result := 0;
+          end case;
+ 
+          pragma Assert (Result = 0);
+       end if;
+ 
+       --  Since the initial signal mask of a thread is inherited from the
+       --  creator, and the Environment task has all its signals masked, we
+       --  do not need to manipulate caller's signal mask at this point.
+       --  All tasks in RTS will have All_Tasks_Mask initially.
+ 
+       Result := pthread_create
+                   (T.Common.LL.Thread'Access,
+                    Attributes'Access,
+                    Thread_Body_Access (Wrapper),
+                    To_Address (T));
+       pragma Assert (Result = 0 or else Result = EAGAIN);
+ 
+       Succeeded := Result = 0;
+ 
+       Result := pthread_attr_destroy (Attributes'Access);
+       pragma Assert (Result = 0);
+ 
+       if T.Common.Task_Info /= null then
+          --  ??? We're using a process-wide function to implement a task
+          --  specific characteristic.
+ 
+          if T.Common.Task_Info.Bind_To_Cpu_Number = 0 then
+             Result := bind_to_cpu (Curpid, 0);
+          elsif T.Common.Task_Info.Bind_To_Cpu_Number > 0 then
+             Result := bind_to_cpu
+               (Curpid,
+                Interfaces.C.unsigned_long (
+                  Interfaces.Shift_Left
+                    (Interfaces.Unsigned_64'(1),
+                     T.Common.Task_Info.Bind_To_Cpu_Number - 1)));
+             pragma Assert (Result = 0);
+          end if;
+       end if;
+    end Create_Task;
+ 
+    ------------------
+    -- Finalize_TCB --
+    ------------------
+ 
+    procedure Finalize_TCB (T : Task_Id) is
+       Result  : Interfaces.C.int;
+       Tmp     : Task_Id := T;
+       Is_Self : constant Boolean := T = Self;
+ 
+       procedure Free is new
+         Unchecked_Deallocation (Ada_Task_Control_Block, Task_Id);
+ 
+    begin
+       if not Single_Lock then
+          Result := pthread_mutex_destroy (T.Common.LL.L'Access);
+          pragma Assert (Result = 0);
+       end if;
+ 
+       Result := pthread_cond_destroy (T.Common.LL.CV'Access);
+       pragma Assert (Result = 0);
+ 
+       if T.Known_Tasks_Index /= -1 then
+          Known_Tasks (T.Known_Tasks_Index) := null;
+       end if;
+ 
+       Free (Tmp);
+ 
+       if Is_Self then
+          Specific.Set (null);
+       end if;
+    end Finalize_TCB;
+ 
+    ---------------
+    -- Exit_Task --
+    ---------------
+ 
+    procedure Exit_Task is
+    begin
+       Specific.Set (null);
+    end Exit_Task;
+ 
+    ----------------
+    -- Abort_Task --
+    ----------------
+ 
+    procedure Abort_Task (T : Task_Id) is
+       Result : Interfaces.C.int;
+    begin
+       Result :=
+         pthread_kill
+           (T.Common.LL.Thread,
+            Signal (System.Interrupt_Management.Abort_Task_Interrupt));
+       pragma Assert (Result = 0);
+    end Abort_Task;
+ 
+    ----------------
+    -- Check_Exit --
+    ----------------
+ 
+    --  Dummy version
+ 
+    function Check_Exit (Self_ID : ST.Task_Id) return Boolean is
+       pragma Unreferenced (Self_ID);
+    begin
+       return True;
+    end Check_Exit;
+ 
+    --------------------
+    -- Check_No_Locks --
+    --------------------
+ 
+    function Check_No_Locks (Self_ID : ST.Task_Id) return Boolean is
+       pragma Unreferenced (Self_ID);
+    begin
+       return True;
+    end Check_No_Locks;
+ 
+    ----------------------
+    -- Environment_Task --
+    ----------------------
+ 
+    function Environment_Task return Task_Id is
+    begin
+       return Environment_Task_Id;
+    end Environment_Task;
+ 
+    --------------
+    -- Lock_RTS --
+    --------------
+ 
+    procedure Lock_RTS is
+    begin
+       Write_Lock (Single_RTS_Lock'Access, Global_Lock => True);
+    end Lock_RTS;
+ 
+    ----------------
+    -- Unlock_RTS --
+    ----------------
+ 
+    procedure Unlock_RTS is
+    begin
+       Unlock (Single_RTS_Lock'Access, Global_Lock => True);
+    end Unlock_RTS;
+ 
+    ------------------
+    -- Suspend_Task --
+    ------------------
+ 
+    function Suspend_Task
+      (T           : ST.Task_Id;
+       Thread_Self : Thread_Id) return Boolean
+    is
+       pragma Warnings (Off, T);
+       pragma Warnings (Off, Thread_Self);
+    begin
+       return False;
+    end Suspend_Task;
+ 
+    -----------------
+    -- Resume_Task --
+    -----------------
+ 
+    function Resume_Task
+      (T           : ST.Task_Id;
+       Thread_Self : Thread_Id) return Boolean
+    is
+       pragma Warnings (Off, T);
+       pragma Warnings (Off, Thread_Self);
+    begin
+       return False;
+    end Resume_Task;
+ 
+    ----------------
+    -- Initialize --
+    ----------------
+ 
+    procedure Initialize (Environment_Task : Task_Id) is
+       act     : aliased struct_sigaction;
+       old_act : aliased struct_sigaction;
+       Tmp_Set : aliased sigset_t;
+       Result  : Interfaces.C.int;
+ 
+       function State
+         (Int : System.Interrupt_Management.Interrupt_ID) return Character;
+       pragma Import (C, State, "__gnat_get_interrupt_state");
+       --  Get interrupt state. Defined in a-init.c. The input argument is
+       --  the interrupt number, and the result is one of the following:
+ 
+       Default : constant Character := 's';
+       --    'n'   this interrupt not set by any Interrupt_State pragma
+       --    'u'   Interrupt_State pragma set state to User
+       --    'r'   Interrupt_State pragma set state to Runtime
+       --    's'   Interrupt_State pragma set state to System (use "default"
+       --           system handler)
+ 
+    begin
+       Environment_Task_Id := Environment_Task;
+ 
+       --  Initialize the lock used to synchronize chain of all ATCBs.
+ 
+       Initialize_Lock (Single_RTS_Lock'Access, RTS_Lock_Level);
+ 
+       Specific.Initialize (Environment_Task);
+ 
+       Enter_Task (Environment_Task);
+ 
+       --  Install the abort-signal handler
+ 
+       if State (System.Interrupt_Management.Abort_Task_Interrupt)
+         /= Default
+       then
+          act.sa_flags := 0;
+          act.sa_handler := Abort_Handler'Address;
+ 
+          Result := sigemptyset (Tmp_Set'Access);
+          pragma Assert (Result = 0);
+          act.sa_mask := Tmp_Set;
+ 
+          Result :=
+            sigaction
+            (Signal (System.Interrupt_Management.Abort_Task_Interrupt),
+             act'Unchecked_Access,
+             old_act'Unchecked_Access);
+          pragma Assert (Result = 0);
+       end if;
+    end Initialize;
+ 
+ begin
+    declare
+       Result : Interfaces.C.int;
+ 
+    begin
+       --  Mask Environment task for all signals. The original mask of the
+       --  Environment task will be recovered by Interrupt_Server task
+       --  during the elaboration of s-interr.adb.
+ 
+       System.Interrupt_Management.Operations.Set_Interrupt_Mask
+         (System.Interrupt_Management.Operations.All_Tasks_Mask'Access);
+ 
+       --  Prepare the set of signals that should unblocked in all tasks
+ 
+       Result := sigemptyset (Unblocked_Signal_Mask'Access);
+       pragma Assert (Result = 0);
+ 
+       for J in Interrupt_Management.Interrupt_ID loop
+          if System.Interrupt_Management.Keep_Unmasked (J) then
+             Result := sigaddset (Unblocked_Signal_Mask'Access, Signal (J));
+             pragma Assert (Result = 0);
+          end if;
+       end loop;
+    end;
+ 
+    Curpid := getpid;
+ end System.Task_Primitives.Operations;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-taprop-vms.adb gcc-4.0.0/gcc/ada/s-taprop-vms.adb
*** gcc-3.4.3/gcc/ada/s-taprop-vms.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-taprop-vms.adb	Tue Jul  6 13:57:30 2004
***************
*** 0 ****
--- 1,1000 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --     S Y S T E M . T A S K _ P R I M I T I V E S . O P E R A T I O N S    --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --         Copyright (C) 1992-2004, Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a OpenVMS/Alpha version of this package
+ 
+ --  This package contains all the GNULL primitives that interface directly
+ --  with the underlying OS.
+ 
+ pragma Polling (Off);
+ --  Turn off polling, we do not want ATC polling to take place during
+ --  tasking operations. It causes infinite loops and other problems.
+ 
+ with System.Tasking.Debug;
+ --  used for Known_Tasks
+ 
+ with Interfaces.C;
+ --  used for int
+ --           size_t
+ 
+ with System.Parameters;
+ --  used for Size_Type
+ 
+ with System.Tasking;
+ --  used for Ada_Task_Control_Block
+ --           Task_Id
+ 
+ with System.Soft_Links;
+ --  used for Defer/Undefer_Abort
+ --           Set_Exc_Stack_Addr
+ 
+ --  Note that we do not use System.Tasking.Initialization directly since
+ --  this is a higher level package that we shouldn't depend on. For example
+ --  when using the restricted run time, it is replaced by
+ --  System.Tasking.Restricted.Stages.
+ 
+ with System.OS_Primitives;
+ --  used for Delay_Modes
+ 
+ with Unchecked_Conversion;
+ with Unchecked_Deallocation;
+ 
+ package body System.Task_Primitives.Operations is
+ 
+    use System.Tasking.Debug;
+    use System.Tasking;
+    use Interfaces.C;
+    use System.OS_Interface;
+    use System.Parameters;
+    use System.OS_Primitives;
+    use type System.OS_Primitives.OS_Time;
+ 
+    package SSL renames System.Soft_Links;
+ 
+    ----------------
+    -- Local Data --
+    ----------------
+ 
+    --  The followings are logically constants, but need to be initialized
+    --  at run time.
+ 
+    Single_RTS_Lock : aliased RTS_Lock;
+    --  This is a lock to allow only one thread of control in the RTS at
+    --  a time; it is used to execute in mutual exclusion from all other tasks.
+    --  Used mainly in Single_Lock mode, but also to protect All_Tasks_List
+ 
+    ATCB_Key : aliased pthread_key_t;
+    --  Key used to find the Ada Task_Id associated with a thread
+ 
+    Environment_Task_Id : Task_Id;
+    --  A variable to hold Task_Id for the environment task.
+ 
+    Time_Slice_Val : Integer;
+    pragma Import (C, Time_Slice_Val, "__gl_time_slice_val");
+ 
+    Dispatching_Policy : Character;
+    pragma Import (C, Dispatching_Policy, "__gl_task_dispatching_policy");
+ 
+    FIFO_Within_Priorities : constant Boolean := Dispatching_Policy = 'F';
+    --  Indicates whether FIFO_Within_Priorities is set.
+ 
+    Foreign_Task_Elaborated : aliased Boolean := True;
+    --  Used to identified fake tasks (i.e., non-Ada Threads).
+ 
+    --------------------
+    -- Local Packages --
+    --------------------
+ 
+    package Specific is
+ 
+       procedure Initialize (Environment_Task : Task_Id);
+       pragma Inline (Initialize);
+       --  Initialize various data needed by this package.
+ 
+       function Is_Valid_Task return Boolean;
+       pragma Inline (Is_Valid_Task);
+       --  Does executing thread have a TCB?
+ 
+       procedure Set (Self_Id : Task_Id);
+       pragma Inline (Set);
+       --  Set the self id for the current task
+ 
+       function Self return Task_Id;
+       pragma Inline (Self);
+       --  Return a pointer to the Ada Task Control Block of the calling task
+ 
+    end Specific;
+ 
+    package body Specific is separate;
+    --  The body of this package is target specific.
+ 
+    ---------------------------------
+    -- Support for foreign threads --
+    ---------------------------------
+ 
+    function Register_Foreign_Thread (Thread : Thread_Id) return Task_Id;
+    --  Allocate and Initialize a new ATCB for the current Thread
+ 
+    function Register_Foreign_Thread
+      (Thread : Thread_Id) return Task_Id is separate;
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    function To_Task_Id is new Unchecked_Conversion (System.Address, Task_Id);
+ 
+    function To_Address is new Unchecked_Conversion (Task_Id, System.Address);
+ 
+    procedure Timer_Sleep_AST (ID : Address);
+    --  Signal the condition variable when AST fires.
+ 
+    procedure Timer_Sleep_AST (ID : Address) is
+       Result  : Interfaces.C.int;
+       Self_ID : constant Task_Id := To_Task_Id (ID);
+    begin
+       Self_ID.Common.LL.AST_Pending := False;
+       Result := pthread_cond_signal_int_np (Self_ID.Common.LL.CV'Access);
+       pragma Assert (Result = 0);
+    end Timer_Sleep_AST;
+ 
+    -----------------
+    -- Stack_Guard --
+    -----------------
+ 
+    --  The underlying thread system sets a guard page at the
+    --  bottom of a thread stack, so nothing is needed.
+    --  ??? Check the comment above
+ 
+    procedure Stack_Guard (T : ST.Task_Id; On : Boolean) is
+       pragma Unreferenced (T);
+       pragma Unreferenced (On);
+    begin
+       null;
+    end Stack_Guard;
+ 
+    --------------------
+    -- Get_Thread_Id  --
+    --------------------
+ 
+    function Get_Thread_Id (T : ST.Task_Id) return OSI.Thread_Id is
+    begin
+       return T.Common.LL.Thread;
+    end Get_Thread_Id;
+ 
+    ----------
+    -- Self --
+    ----------
+ 
+    function Self return Task_Id renames Specific.Self;
+ 
+    ---------------------
+    -- Initialize_Lock --
+    ---------------------
+ 
+    --  Note: mutexes and cond_variables needed per-task basis are
+    --  initialized in Initialize_TCB and the Storage_Error is
+    --  handled. Other mutexes (such as RTS_Lock, Memory_Lock...)
+    --  used in RTS is initialized before any status change of RTS.
+    --  Therefore rasing Storage_Error in the following routines
+    --  should be able to be handled safely.
+ 
+    procedure Initialize_Lock (Prio : System.Any_Priority; L : access Lock) is
+       Attributes : aliased pthread_mutexattr_t;
+       Result     : Interfaces.C.int;
+ 
+    begin
+       Result := pthread_mutexattr_init (Attributes'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = ENOMEM then
+          raise Storage_Error;
+       end if;
+ 
+       L.Prio_Save := 0;
+       L.Prio := Interfaces.C.int (Prio);
+ 
+       Result := pthread_mutex_init (L.L'Access, Attributes'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = ENOMEM then
+          raise Storage_Error;
+       end if;
+ 
+       Result := pthread_mutexattr_destroy (Attributes'Access);
+       pragma Assert (Result = 0);
+    end Initialize_Lock;
+ 
+    procedure Initialize_Lock (L : access RTS_Lock; Level : Lock_Level) is
+       pragma Unreferenced (Level);
+ 
+       Attributes : aliased pthread_mutexattr_t;
+       Result : Interfaces.C.int;
+ 
+    begin
+       Result := pthread_mutexattr_init (Attributes'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = ENOMEM then
+          raise Storage_Error;
+       end if;
+ 
+ --      Don't use, see comment in s-osinte.ads about ERRORCHECK mutexes???
+ --      Result := pthread_mutexattr_settype_np
+ --        (Attributes'Access, PTHREAD_MUTEX_ERRORCHECK_NP);
+ --      pragma Assert (Result = 0);
+ 
+ --      Result := pthread_mutexattr_setprotocol
+ --        (Attributes'Access, PTHREAD_PRIO_PROTECT);
+ --      pragma Assert (Result = 0);
+ 
+ --      Result := pthread_mutexattr_setprioceiling
+ --         (Attributes'Access, Interfaces.C.int (System.Any_Priority'Last));
+ --      pragma Assert (Result = 0);
+ 
+       Result := pthread_mutex_init (L, Attributes'Access);
+ 
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = ENOMEM then
+          raise Storage_Error;
+       end if;
+ 
+       Result := pthread_mutexattr_destroy (Attributes'Access);
+       pragma Assert (Result = 0);
+    end Initialize_Lock;
+ 
+    -------------------
+    -- Finalize_Lock --
+    -------------------
+ 
+    procedure Finalize_Lock (L : access Lock) is
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_mutex_destroy (L.L'Access);
+       pragma Assert (Result = 0);
+    end Finalize_Lock;
+ 
+    procedure Finalize_Lock (L : access RTS_Lock) is
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_mutex_destroy (L);
+       pragma Assert (Result = 0);
+    end Finalize_Lock;
+ 
+    ----------------
+    -- Write_Lock --
+    ----------------
+ 
+    procedure Write_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
+       Self_ID        : constant Task_Id := Self;
+       All_Tasks_Link : constant Task_Id := Self.Common.All_Tasks_Link;
+       Current_Prio   : System.Any_Priority;
+       Result         : Interfaces.C.int;
+ 
+    begin
+       Current_Prio := Get_Priority (Self_ID);
+ 
+       --  If there is no other tasks, no need to check priorities
+ 
+       if All_Tasks_Link /= Null_Task
+         and then L.Prio < Interfaces.C.int (Current_Prio)
+       then
+          Ceiling_Violation := True;
+          return;
+       end if;
+ 
+       Result := pthread_mutex_lock (L.L'Access);
+       pragma Assert (Result = 0);
+ 
+       Ceiling_Violation := False;
+ --  Why is this commented out ???
+ --      L.Prio_Save := Interfaces.C.int (Current_Prio);
+ --      Set_Priority (Self_ID, System.Any_Priority (L.Prio));
+    end Write_Lock;
+ 
+    procedure Write_Lock
+      (L           : access RTS_Lock;
+       Global_Lock : Boolean := False)
+    is
+       Result : Interfaces.C.int;
+    begin
+       if not Single_Lock or else Global_Lock then
+          Result := pthread_mutex_lock (L);
+          pragma Assert (Result = 0);
+       end if;
+    end Write_Lock;
+ 
+    procedure Write_Lock (T : Task_Id) is
+       Result : Interfaces.C.int;
+    begin
+       if not Single_Lock then
+          Result := pthread_mutex_lock (T.Common.LL.L'Access);
+          pragma Assert (Result = 0);
+       end if;
+    end Write_Lock;
+ 
+    ---------------
+    -- Read_Lock --
+    ---------------
+ 
+    procedure Read_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
+    begin
+       Write_Lock (L, Ceiling_Violation);
+    end Read_Lock;
+ 
+    ------------
+    -- Unlock --
+    ------------
+ 
+    procedure Unlock (L : access Lock) is
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_mutex_unlock (L.L'Access);
+       pragma Assert (Result = 0);
+    end Unlock;
+ 
+    procedure Unlock (L : access RTS_Lock; Global_Lock : Boolean := False) is
+       Result : Interfaces.C.int;
+    begin
+       if not Single_Lock or else Global_Lock then
+          Result := pthread_mutex_unlock (L);
+          pragma Assert (Result = 0);
+       end if;
+    end Unlock;
+ 
+    procedure Unlock (T : Task_Id) is
+       Result : Interfaces.C.int;
+    begin
+       if not Single_Lock then
+          Result := pthread_mutex_unlock (T.Common.LL.L'Access);
+          pragma Assert (Result = 0);
+       end if;
+    end Unlock;
+ 
+    -----------
+    -- Sleep --
+    -----------
+ 
+    procedure Sleep
+      (Self_ID : Task_Id;
+       Reason  : System.Tasking.Task_States)
+    is
+       pragma Unreferenced (Reason);
+       Result : Interfaces.C.int;
+ 
+    begin
+       if Single_Lock then
+          Result := pthread_cond_wait
+            (Self_ID.Common.LL.CV'Access, Single_RTS_Lock'Access);
+       else
+          Result := pthread_cond_wait
+            (Self_ID.Common.LL.CV'Access, Self_ID.Common.LL.L'Access);
+       end if;
+ 
+       --  EINTR is not considered a failure
+ 
+       pragma Assert (Result = 0 or else Result = EINTR);
+ 
+       if Self_ID.Deferral_Level = 0
+         and then Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level
+       then
+          Unlock (Self_ID);
+          raise Standard'Abort_Signal;
+       end if;
+    end Sleep;
+ 
+    -----------------
+    -- Timed_Sleep --
+    -----------------
+ 
+    procedure Timed_Sleep
+      (Self_ID  : Task_Id;
+       Time     : Duration;
+       Mode     : ST.Delay_Modes;
+       Reason   : System.Tasking.Task_States;
+       Timedout : out Boolean;
+       Yielded  : out Boolean)
+    is
+       pragma Unreferenced (Reason);
+ 
+       Sleep_Time : OS_Time;
+       Result     : Interfaces.C.int;
+       Status     : Cond_Value_Type;
+ 
+       --  The body below requires more comments ???
+ 
+    begin
+       Timedout := False;
+       Yielded := False;
+ 
+       Sleep_Time := To_OS_Time (Time, Mode);
+ 
+       if Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level
+         or else Self_ID.Pending_Priority_Change
+       then
+          return;
+       end if;
+ 
+       Self_ID.Common.LL.AST_Pending := True;
+ 
+       Sys_Setimr
+        (Status, 0, Sleep_Time,
+         Timer_Sleep_AST'Access, To_Address (Self_ID), 0);
+ 
+       if (Status and 1) /= 1 then
+          raise Storage_Error;
+       end if;
+ 
+       if Single_Lock then
+          Result := pthread_cond_wait
+            (Self_ID.Common.LL.CV'Access, Single_RTS_Lock'Access);
+          pragma Assert (Result = 0);
+ 
+       else
+          Result := pthread_cond_wait
+            (Self_ID.Common.LL.CV'Access, Self_ID.Common.LL.L'Access);
+          pragma Assert (Result = 0);
+       end if;
+ 
+       Yielded := True;
+ 
+       if not Self_ID.Common.LL.AST_Pending then
+          Timedout := True;
+       else
+          Sys_Cantim (Status, To_Address (Self_ID), 0);
+          pragma Assert ((Status and 1) = 1);
+       end if;
+    end Timed_Sleep;
+ 
+    -----------------
+    -- Timed_Delay --
+    -----------------
+ 
+    procedure Timed_Delay
+      (Self_ID : Task_Id;
+       Time    : Duration;
+       Mode    : ST.Delay_Modes)
+    is
+       Sleep_Time : OS_Time;
+       Result     : Interfaces.C.int;
+       Status     : Cond_Value_Type;
+       Yielded    : Boolean := False;
+ 
+    begin
+       --  Only the little window between deferring abort and
+       --  locking Self_ID is the reason we need to
+       --  check for pending abort and priority change below!
+ 
+       if Single_Lock then
+          Lock_RTS;
+       end if;
+ 
+       --  More comments required in body below ???
+ 
+       SSL.Abort_Defer.all;
+       Write_Lock (Self_ID);
+ 
+       if Time /= 0.0 or else Mode /= Relative then
+          Sleep_Time := To_OS_Time (Time, Mode);
+ 
+          if Mode = Relative or else OS_Clock < Sleep_Time then
+             Self_ID.Common.State := Delay_Sleep;
+             Self_ID.Common.LL.AST_Pending := True;
+ 
+             Sys_Setimr
+              (Status, 0, Sleep_Time,
+               Timer_Sleep_AST'Access, To_Address (Self_ID), 0);
+ 
+             if (Status and 1) /= 1 then
+                raise Storage_Error;
+             end if;
+ 
+             loop
+                if Self_ID.Pending_Priority_Change then
+                   Self_ID.Pending_Priority_Change := False;
+                   Self_ID.Common.Base_Priority := Self_ID.New_Base_Priority;
+                   Set_Priority (Self_ID, Self_ID.Common.Base_Priority);
+                end if;
+ 
+                if Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level then
+                   Sys_Cantim (Status, To_Address (Self_ID), 0);
+                   pragma Assert ((Status and 1) = 1);
+                   exit;
+                end if;
+ 
+                if Single_Lock then
+                   Result := pthread_cond_wait
+                     (Self_ID.Common.LL.CV'Access, Single_RTS_Lock'Access);
+                   pragma Assert (Result = 0);
+                else
+                   Result := pthread_cond_wait
+                     (Self_ID.Common.LL.CV'Access, Self_ID.Common.LL.L'Access);
+                   pragma Assert (Result = 0);
+                end if;
+ 
+                Yielded := True;
+ 
+                exit when not Self_ID.Common.LL.AST_Pending;
+             end loop;
+ 
+             Self_ID.Common.State := Runnable;
+          end if;
+       end if;
+ 
+       Unlock (Self_ID);
+ 
+       if Single_Lock then
+          Unlock_RTS;
+       end if;
+ 
+       if not Yielded then
+          Result := sched_yield;
+          pragma Assert (Result = 0);
+       end if;
+ 
+       SSL.Abort_Undefer.all;
+    end Timed_Delay;
+ 
+    ---------------------
+    -- Monotonic_Clock --
+    ---------------------
+ 
+    function Monotonic_Clock return Duration
+      renames System.OS_Primitives.Monotonic_Clock;
+ 
+    -------------------
+    -- RT_Resolution --
+    -------------------
+ 
+    function RT_Resolution return Duration is
+    begin
+       return 10#1.0#E-3;
+    end RT_Resolution;
+ 
+    ------------
+    -- Wakeup --
+    ------------
+ 
+    procedure Wakeup (T : Task_Id; Reason : System.Tasking.Task_States) is
+       pragma Unreferenced (Reason);
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_cond_signal (T.Common.LL.CV'Access);
+       pragma Assert (Result = 0);
+    end Wakeup;
+ 
+    -----------
+    -- Yield --
+    -----------
+ 
+    procedure Yield (Do_Yield : Boolean := True) is
+       Result : Interfaces.C.int;
+       pragma Unreferenced (Result);
+    begin
+       if Do_Yield then
+          Result := sched_yield;
+       end if;
+    end Yield;
+ 
+    ------------------
+    -- Set_Priority --
+    ------------------
+ 
+    procedure Set_Priority
+      (T                   : Task_Id;
+       Prio                : System.Any_Priority;
+       Loss_Of_Inheritance : Boolean := False)
+    is
+       pragma Unreferenced (Loss_Of_Inheritance);
+ 
+       Result : Interfaces.C.int;
+       Param  : aliased struct_sched_param;
+ 
+    begin
+       T.Common.Current_Priority := Prio;
+       Param.sched_priority := Interfaces.C.int (Underlying_Priorities (Prio));
+ 
+       if Time_Slice_Val > 0 then
+          Result := pthread_setschedparam
+            (T.Common.LL.Thread, SCHED_RR, Param'Access);
+ 
+       elsif FIFO_Within_Priorities or else Time_Slice_Val = 0 then
+          Result := pthread_setschedparam
+            (T.Common.LL.Thread, SCHED_FIFO, Param'Access);
+ 
+       else
+          --  SCHED_OTHER priorities are restricted to the range 8 - 15.
+          --  Since the translation from Underlying priorities results
+          --  in a range of 16 - 31, dividing by 2 gives the correct result.
+ 
+          Param.sched_priority := Param.sched_priority / 2;
+          Result := pthread_setschedparam
+            (T.Common.LL.Thread, SCHED_OTHER, Param'Access);
+       end if;
+ 
+       pragma Assert (Result = 0);
+    end Set_Priority;
+ 
+    ------------------
+    -- Get_Priority --
+    ------------------
+ 
+    function Get_Priority (T : Task_Id) return System.Any_Priority is
+    begin
+       return T.Common.Current_Priority;
+    end Get_Priority;
+ 
+    ----------------
+    -- Enter_Task --
+    ----------------
+ 
+    procedure Enter_Task (Self_ID : Task_Id) is
+    begin
+       Self_ID.Common.LL.Thread := pthread_self;
+ 
+       Specific.Set (Self_ID);
+ 
+       Lock_RTS;
+ 
+       for J in Known_Tasks'Range loop
+          if Known_Tasks (J) = null then
+             Known_Tasks (J) := Self_ID;
+             Self_ID.Known_Tasks_Index := J;
+             exit;
+          end if;
+       end loop;
+ 
+       Unlock_RTS;
+    end Enter_Task;
+ 
+    --------------
+    -- New_ATCB --
+    --------------
+ 
+    function New_ATCB (Entry_Num : Task_Entry_Index) return Task_Id is
+    begin
+       return new Ada_Task_Control_Block (Entry_Num);
+    end New_ATCB;
+ 
+    -------------------
+    -- Is_Valid_Task --
+    -------------------
+ 
+    function Is_Valid_Task return Boolean renames Specific.Is_Valid_Task;
+ 
+    -----------------------------
+    -- Register_Foreign_Thread --
+    -----------------------------
+ 
+    function Register_Foreign_Thread return Task_Id is
+    begin
+       if Is_Valid_Task then
+          return Self;
+       else
+          return Register_Foreign_Thread (pthread_self);
+       end if;
+    end Register_Foreign_Thread;
+ 
+    --------------------
+    -- Initialize_TCB --
+    --------------------
+ 
+    procedure Initialize_TCB (Self_ID : Task_Id; Succeeded : out Boolean) is
+       Mutex_Attr : aliased pthread_mutexattr_t;
+       Result     : Interfaces.C.int;
+       Cond_Attr  : aliased pthread_condattr_t;
+ 
+    begin
+       --  More comments required in body below ???
+ 
+       if not Single_Lock then
+          Result := pthread_mutexattr_init (Mutex_Attr'Access);
+          pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+          if Result = 0 then
+             Result := pthread_mutex_init (Self_ID.Common.LL.L'Access,
+               Mutex_Attr'Access);
+             pragma Assert (Result = 0 or else Result = ENOMEM);
+          end if;
+ 
+          if Result /= 0 then
+             Succeeded := False;
+             return;
+          end if;
+ 
+          Result := pthread_mutexattr_destroy (Mutex_Attr'Access);
+          pragma Assert (Result = 0);
+       end if;
+ 
+       Result := pthread_condattr_init (Cond_Attr'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = 0 then
+          Result := pthread_cond_init (Self_ID.Common.LL.CV'Access,
+            Cond_Attr'Access);
+          pragma Assert (Result = 0 or else Result = ENOMEM);
+       end if;
+ 
+       if Result = 0 then
+          Succeeded := True;
+          Self_ID.Common.LL.Exc_Stack_Ptr := new Exc_Stack_T;
+          SSL.Set_Exc_Stack_Addr
+            (To_Address (Self_ID),
+             Self_ID.Common.LL.Exc_Stack_Ptr (Exc_Stack_T'Last)'Address);
+ 
+       else
+          if not Single_Lock then
+             Result := pthread_mutex_destroy (Self_ID.Common.LL.L'Access);
+             pragma Assert (Result = 0);
+          end if;
+ 
+          Succeeded := False;
+       end if;
+ 
+       Result := pthread_condattr_destroy (Cond_Attr'Access);
+       pragma Assert (Result = 0);
+    end Initialize_TCB;
+ 
+    -----------------
+    -- Create_Task --
+    -----------------
+ 
+    procedure Create_Task
+      (T          : Task_Id;
+       Wrapper    : System.Address;
+       Stack_Size : System.Parameters.Size_Type;
+       Priority   : System.Any_Priority;
+       Succeeded  : out Boolean)
+    is
+       Attributes          : aliased pthread_attr_t;
+       Adjusted_Stack_Size : Interfaces.C.size_t;
+       Result              : Interfaces.C.int;
+ 
+       function Thread_Body_Access is new
+         Unchecked_Conversion (System.Address, Thread_Body);
+ 
+    begin
+       if Stack_Size = Unspecified_Size then
+          Adjusted_Stack_Size := Interfaces.C.size_t (Default_Stack_Size);
+ 
+       elsif Stack_Size < Minimum_Stack_Size then
+          Adjusted_Stack_Size := Interfaces.C.size_t (Minimum_Stack_Size);
+ 
+       else
+          Adjusted_Stack_Size := Interfaces.C.size_t (Stack_Size);
+       end if;
+ 
+       --  Since the initial signal mask of a thread is inherited from the
+       --  creator, we need to set our local signal mask mask all signals
+       --  during the creation operation, to make sure the new thread is
+       --  not disturbed by signals before it has set its own Task_Id.
+ 
+       Result := pthread_attr_init (Attributes'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result /= 0 then
+          Succeeded := False;
+          return;
+       end if;
+ 
+       Result := pthread_attr_setdetachstate
+         (Attributes'Access, PTHREAD_CREATE_DETACHED);
+       pragma Assert (Result = 0);
+ 
+       Result := pthread_attr_setstacksize
+         (Attributes'Access, Adjusted_Stack_Size);
+       pragma Assert (Result = 0);
+ 
+       --  This call may be unnecessary, not sure. ???
+ 
+       Result :=
+         pthread_attr_setinheritsched
+           (Attributes'Access, PTHREAD_EXPLICIT_SCHED);
+       pragma Assert (Result = 0);
+ 
+       Result := pthread_create
+         (T.Common.LL.Thread'Access,
+          Attributes'Access,
+          Thread_Body_Access (Wrapper),
+          To_Address (T));
+ 
+       --  ENOMEM is a valid run-time error.  Don't shut down.
+ 
+       pragma Assert (Result = 0
+         or else Result = EAGAIN or else Result = ENOMEM);
+ 
+       Succeeded := Result = 0;
+ 
+       Result := pthread_attr_destroy (Attributes'Access);
+       pragma Assert (Result = 0);
+ 
+       if Succeeded then
+          Set_Priority (T, Priority);
+       end if;
+    end Create_Task;
+ 
+    ------------------
+    -- Finalize_TCB --
+    ------------------
+ 
+    procedure Finalize_TCB (T : Task_Id) is
+       Result  : Interfaces.C.int;
+       Tmp     : Task_Id := T;
+       Is_Self : constant Boolean := T = Self;
+ 
+       procedure Free is new
+         Unchecked_Deallocation (Ada_Task_Control_Block, Task_Id);
+ 
+       procedure Free is new Unchecked_Deallocation
+        (Exc_Stack_T, Exc_Stack_Ptr_T);
+ 
+    begin
+       if not Single_Lock then
+          Result := pthread_mutex_destroy (T.Common.LL.L'Access);
+          pragma Assert (Result = 0);
+       end if;
+ 
+       Result := pthread_cond_destroy (T.Common.LL.CV'Access);
+       pragma Assert (Result = 0);
+ 
+       if T.Known_Tasks_Index /= -1 then
+          Known_Tasks (T.Known_Tasks_Index) := null;
+       end if;
+ 
+       Free (T.Common.LL.Exc_Stack_Ptr);
+ 
+       Free (Tmp);
+ 
+       if Is_Self then
+          Specific.Set (null);
+       end if;
+    end Finalize_TCB;
+ 
+    ---------------
+    -- Exit_Task --
+    ---------------
+ 
+    procedure Exit_Task is
+    begin
+       Specific.Set (null);
+    end Exit_Task;
+ 
+    ----------------
+    -- Abort_Task --
+    ----------------
+ 
+    procedure Abort_Task (T : Task_Id) is
+    begin
+       --  Interrupt Server_Tasks may be waiting on an event flag
+ 
+       if T.Common.State = Interrupt_Server_Blocked_On_Event_Flag then
+          Wakeup (T, Interrupt_Server_Blocked_On_Event_Flag);
+       end if;
+    end Abort_Task;
+ 
+    ----------------
+    -- Check_Exit --
+    ----------------
+ 
+    --  Dummy version
+ 
+    function Check_Exit (Self_ID : ST.Task_Id) return Boolean is
+       pragma Unreferenced (Self_ID);
+    begin
+       return True;
+    end Check_Exit;
+ 
+    --------------------
+    -- Check_No_Locks --
+    --------------------
+ 
+    function Check_No_Locks (Self_ID : ST.Task_Id) return Boolean is
+       pragma Unreferenced (Self_ID);
+    begin
+       return True;
+    end Check_No_Locks;
+ 
+    ----------------------
+    -- Environment_Task --
+    ----------------------
+ 
+    function Environment_Task return Task_Id is
+    begin
+       return Environment_Task_Id;
+    end Environment_Task;
+ 
+    --------------
+    -- Lock_RTS --
+    --------------
+ 
+    procedure Lock_RTS is
+    begin
+       Write_Lock (Single_RTS_Lock'Access, Global_Lock => True);
+    end Lock_RTS;
+ 
+    ----------------
+    -- Unlock_RTS --
+    ----------------
+ 
+    procedure Unlock_RTS is
+    begin
+       Unlock (Single_RTS_Lock'Access, Global_Lock => True);
+    end Unlock_RTS;
+ 
+    ------------------
+    -- Suspend_Task --
+    ------------------
+ 
+    function Suspend_Task
+      (T           : ST.Task_Id;
+       Thread_Self : Thread_Id) return Boolean
+    is
+       pragma Unreferenced (T);
+       pragma Unreferenced (Thread_Self);
+    begin
+       return False;
+    end Suspend_Task;
+ 
+    -----------------
+    -- Resume_Task --
+    -----------------
+ 
+    function Resume_Task
+      (T           : ST.Task_Id;
+       Thread_Self : Thread_Id) return Boolean
+    is
+       pragma Unreferenced (T);
+       pragma Unreferenced (Thread_Self);
+    begin
+       return False;
+    end Resume_Task;
+ 
+    ----------------
+    -- Initialize --
+    ----------------
+ 
+    procedure Initialize (Environment_Task : Task_Id) is
+    begin
+       Environment_Task_Id := Environment_Task;
+ 
+       --  Initialize the lock used to synchronize chain of all ATCBs
+ 
+       Initialize_Lock (Single_RTS_Lock'Access, RTS_Lock_Level);
+ 
+       Specific.Initialize (Environment_Task);
+ 
+       Enter_Task (Environment_Task);
+    end Initialize;
+ 
+ end System.Task_Primitives.Operations;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-taprop-vxworks.adb gcc-4.0.0/gcc/ada/s-taprop-vxworks.adb
*** gcc-3.4.3/gcc/ada/s-taprop-vxworks.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-taprop-vxworks.adb	Tue Jul  6 13:57:30 2004
***************
*** 0 ****
--- 1,1137 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
+ --                                                                          --
+ --     S Y S T E M . T A S K _ P R I M I T I V E S . O P E R A T I O N S    --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --         Copyright (C) 1992-2004, Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the VxWorks version of this package
+ 
+ --  This package contains all the GNULL primitives that interface directly
+ --  with the underlying OS.
+ 
+ pragma Polling (Off);
+ --  Turn off polling, we do not want ATC polling to take place during
+ --  tasking operations. It causes infinite loops and other problems.
+ 
+ with System.Tasking.Debug;
+ --  used for Known_Tasks
+ 
+ with System.Interrupt_Management;
+ --  used for Keep_Unmasked
+ --           Abort_Task_Signal
+ --           Signal_ID
+ --           Initialize_Interrupts
+ 
+ with System.Soft_Links;
+ --  used for Defer/Undefer_Abort
+ 
+ --  Note that we do not use System.Tasking.Initialization directly since
+ --  this is a higher level package that we shouldn't depend on. For example
+ --  when using the restricted run time, it is replaced by
+ --  System.Tasking.Restricted.Stages.
+ 
+ with System.OS_Interface;
+ --  used for various type, constant, and operations
+ 
+ with System.Parameters;
+ --  used for Size_Type
+ 
+ with System.Tasking;
+ --  used for Ada_Task_Control_Block
+ --           Task_Id
+ --           ATCB components and types
+ 
+ with Interfaces.C;
+ 
+ with Unchecked_Conversion;
+ with Unchecked_Deallocation;
+ 
+ package body System.Task_Primitives.Operations is
+ 
+    use System.Tasking.Debug;
+    use System.Tasking;
+    use System.OS_Interface;
+    use System.Parameters;
+    use type Interfaces.C.int;
+ 
+    package SSL renames System.Soft_Links;
+ 
+    subtype int is System.OS_Interface.int;
+ 
+    Relative : constant := 0;
+ 
+    ----------------
+    -- Local Data --
+    ----------------
+ 
+    --  The followings are logically constants, but need to be initialized
+    --  at run time.
+ 
+    Single_RTS_Lock : aliased RTS_Lock;
+    --  This is a lock to allow only one thread of control in the RTS at
+    --  a time; it is used to execute in mutual exclusion from all other tasks.
+    --  Used mainly in Single_Lock mode, but also to protect All_Tasks_List
+ 
+    ATCB_Key : aliased System.Address := System.Null_Address;
+    --  Key used to find the Ada Task_Id associated with a thread
+ 
+    ATCB_Key_Addr : System.Address := ATCB_Key'Address;
+    pragma Export (Ada, ATCB_Key_Addr, "__gnat_ATCB_key_addr");
+    --  Exported to support the temporary AE653 task registration
+    --  implementation. This mechanism is used to minimize impact on other
+    --  targets.
+ 
+    Environment_Task_Id : Task_Id;
+    --  A variable to hold Task_Id for the environment task.
+ 
+    Unblocked_Signal_Mask : aliased sigset_t;
+    --  The set of signals that should unblocked in all tasks
+ 
+    --  The followings are internal configuration constants needed.
+ 
+    Time_Slice_Val : Integer;
+    pragma Import (C, Time_Slice_Val, "__gl_time_slice_val");
+ 
+    Locking_Policy : Character;
+    pragma Import (C, Locking_Policy, "__gl_locking_policy");
+ 
+    Dispatching_Policy : Character;
+    pragma Import (C, Dispatching_Policy, "__gl_task_dispatching_policy");
+ 
+    FIFO_Within_Priorities : constant Boolean := Dispatching_Policy = 'F';
+    --  Indicates whether FIFO_Within_Priorities is set.
+ 
+    Mutex_Protocol : Priority_Type;
+ 
+    Foreign_Task_Elaborated : aliased Boolean := True;
+    --  Used to identified fake tasks (i.e., non-Ada Threads).
+ 
+    --------------------
+    -- Local Packages --
+    --------------------
+ 
+    package Specific is
+ 
+       function Is_Valid_Task return Boolean;
+       pragma Inline (Is_Valid_Task);
+       --  Does executing thread have a TCB?
+ 
+       procedure Set (Self_Id : Task_Id);
+       pragma Inline (Set);
+       --  Set the self id for the current task.
+ 
+       function Self return Task_Id;
+       pragma Inline (Self);
+       --  Return a pointer to the Ada Task Control Block of the calling task.
+ 
+    end Specific;
+ 
+    package body Specific is separate;
+    --  The body of this package is target specific.
+ 
+    ---------------------------------
+    -- Support for foreign threads --
+    ---------------------------------
+ 
+    function Register_Foreign_Thread (Thread : Thread_Id) return Task_Id;
+    --  Allocate and Initialize a new ATCB for the current Thread.
+ 
+    function Register_Foreign_Thread
+      (Thread : Thread_Id) return Task_Id is separate;
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    procedure Abort_Handler (signo : Signal);
+    --  Handler for the abort (SIGABRT) signal to handle asynchronous abortion.
+ 
+    procedure Install_Signal_Handlers;
+    --  Install the default signal handlers for the current task
+ 
+    function To_Address is new Unchecked_Conversion (Task_Id, System.Address);
+ 
+    -------------------
+    -- Abort_Handler --
+    -------------------
+ 
+    procedure Abort_Handler (signo : Signal) is
+       pragma Unreferenced (signo);
+ 
+       Self_ID : constant Task_Id := Self;
+       Result  : int;
+       Old_Set : aliased sigset_t;
+ 
+    begin
+       --  It is not safe to raise an exception when using ZCX and the GCC
+       --  exception handling mechanism.
+ 
+       if ZCX_By_Default and then GCC_ZCX_Support then
+          return;
+       end if;
+ 
+       if Self_ID.Deferral_Level = 0
+         and then Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level
+         and then not Self_ID.Aborting
+       then
+          Self_ID.Aborting := True;
+ 
+          --  Make sure signals used for RTS internal purpose are unmasked
+ 
+          Result := pthread_sigmask (SIG_UNBLOCK,
+            Unblocked_Signal_Mask'Unchecked_Access, Old_Set'Unchecked_Access);
+          pragma Assert (Result = 0);
+ 
+          raise Standard'Abort_Signal;
+       end if;
+    end Abort_Handler;
+ 
+    -----------------
+    -- Stack_Guard --
+    -----------------
+ 
+    procedure Stack_Guard (T : ST.Task_Id; On : Boolean) is
+       pragma Unreferenced (T);
+       pragma Unreferenced (On);
+ 
+    begin
+       --  Nothing needed (why not???)
+ 
+       null;
+    end Stack_Guard;
+ 
+    -------------------
+    -- Get_Thread_Id --
+    -------------------
+ 
+    function Get_Thread_Id (T : ST.Task_Id) return OSI.Thread_Id is
+    begin
+       return T.Common.LL.Thread;
+    end Get_Thread_Id;
+ 
+    ----------
+    -- Self --
+    ----------
+ 
+    function Self return Task_Id renames Specific.Self;
+ 
+    -----------------------------
+    -- Install_Signal_Handlers --
+    -----------------------------
+ 
+    procedure Install_Signal_Handlers is
+       act     : aliased struct_sigaction;
+       old_act : aliased struct_sigaction;
+       Tmp_Set : aliased sigset_t;
+       Result  : int;
+ 
+    begin
+       act.sa_flags := 0;
+       act.sa_handler := Abort_Handler'Address;
+ 
+       Result := sigemptyset (Tmp_Set'Access);
+       pragma Assert (Result = 0);
+       act.sa_mask := Tmp_Set;
+ 
+       Result :=
+         sigaction
+           (Signal (Interrupt_Management.Abort_Task_Signal),
+            act'Unchecked_Access,
+            old_act'Unchecked_Access);
+       pragma Assert (Result = 0);
+ 
+       Interrupt_Management.Initialize_Interrupts;
+    end Install_Signal_Handlers;
+ 
+    ---------------------
+    -- Initialize_Lock --
+    ---------------------
+ 
+    procedure Initialize_Lock (Prio : System.Any_Priority; L : access Lock) is
+    begin
+       L.Mutex := semMCreate (SEM_Q_PRIORITY + SEM_INVERSION_SAFE);
+       L.Prio_Ceiling := int (Prio);
+       L.Protocol := Mutex_Protocol;
+       pragma Assert (L.Mutex /= 0);
+    end Initialize_Lock;
+ 
+    procedure Initialize_Lock (L : access RTS_Lock; Level : Lock_Level) is
+       pragma Unreferenced (Level);
+ 
+    begin
+       L.Mutex := semMCreate (SEM_Q_PRIORITY + SEM_INVERSION_SAFE);
+       L.Prio_Ceiling := int (System.Any_Priority'Last);
+       L.Protocol := Mutex_Protocol;
+       pragma Assert (L.Mutex /= 0);
+    end Initialize_Lock;
+ 
+    -------------------
+    -- Finalize_Lock --
+    -------------------
+ 
+    procedure Finalize_Lock (L : access Lock) is
+       Result : int;
+ 
+    begin
+       Result := semDelete (L.Mutex);
+       pragma Assert (Result = 0);
+    end Finalize_Lock;
+ 
+    procedure Finalize_Lock (L : access RTS_Lock) is
+       Result : int;
+ 
+    begin
+       Result := semDelete (L.Mutex);
+       pragma Assert (Result = 0);
+    end Finalize_Lock;
+ 
+    ----------------
+    -- Write_Lock --
+    ----------------
+ 
+    procedure Write_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
+       Result : int;
+ 
+    begin
+       if L.Protocol = Prio_Protect
+         and then int (Self.Common.Current_Priority) > L.Prio_Ceiling
+       then
+          Ceiling_Violation := True;
+          return;
+       else
+          Ceiling_Violation := False;
+       end if;
+ 
+       Result := semTake (L.Mutex, WAIT_FOREVER);
+       pragma Assert (Result = 0);
+    end Write_Lock;
+ 
+    procedure Write_Lock
+      (L           : access RTS_Lock;
+       Global_Lock : Boolean := False)
+    is
+       Result : int;
+ 
+    begin
+       if not Single_Lock or else Global_Lock then
+          Result := semTake (L.Mutex, WAIT_FOREVER);
+          pragma Assert (Result = 0);
+       end if;
+    end Write_Lock;
+ 
+    procedure Write_Lock (T : Task_Id) is
+       Result : int;
+ 
+    begin
+       if not Single_Lock then
+          Result := semTake (T.Common.LL.L.Mutex, WAIT_FOREVER);
+          pragma Assert (Result = 0);
+       end if;
+    end Write_Lock;
+ 
+    ---------------
+    -- Read_Lock --
+    ---------------
+ 
+    procedure Read_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
+    begin
+       Write_Lock (L, Ceiling_Violation);
+    end Read_Lock;
+ 
+    ------------
+    -- Unlock --
+    ------------
+ 
+    procedure Unlock (L : access Lock) is
+       Result  : int;
+ 
+    begin
+       Result := semGive (L.Mutex);
+       pragma Assert (Result = 0);
+    end Unlock;
+ 
+    procedure Unlock (L : access RTS_Lock; Global_Lock : Boolean := False) is
+       Result : int;
+ 
+    begin
+       if not Single_Lock or else Global_Lock then
+          Result := semGive (L.Mutex);
+          pragma Assert (Result = 0);
+       end if;
+    end Unlock;
+ 
+    procedure Unlock (T : Task_Id) is
+       Result : int;
+ 
+    begin
+       if not Single_Lock then
+          Result := semGive (T.Common.LL.L.Mutex);
+          pragma Assert (Result = 0);
+       end if;
+    end Unlock;
+ 
+    -----------
+    -- Sleep --
+    -----------
+ 
+    procedure Sleep (Self_ID : Task_Id; Reason : System.Tasking.Task_States) is
+       pragma Unreferenced (Reason);
+ 
+       Result : int;
+ 
+    begin
+       pragma Assert (Self_ID = Self);
+ 
+       --  Release the mutex before sleeping.
+       if Single_Lock then
+          Result := semGive (Single_RTS_Lock.Mutex);
+       else
+          Result := semGive (Self_ID.Common.LL.L.Mutex);
+       end if;
+ 
+       pragma Assert (Result = 0);
+ 
+       --  Perform a blocking operation to take the CV semaphore.
+       --  Note that a blocking operation in VxWorks will reenable
+       --  task scheduling. When we are no longer blocked and control
+       --  is returned, task scheduling will again be disabled.
+ 
+       Result := semTake (Self_ID.Common.LL.CV, WAIT_FOREVER);
+       pragma Assert (Result = 0);
+ 
+       --  Take the mutex back.
+       if Single_Lock then
+          Result := semTake (Single_RTS_Lock.Mutex, WAIT_FOREVER);
+       else
+          Result := semTake (Self_ID.Common.LL.L.Mutex, WAIT_FOREVER);
+       end if;
+ 
+       pragma Assert (Result = 0);
+    end Sleep;
+ 
+    -----------------
+    -- Timed_Sleep --
+    -----------------
+ 
+    --  This is for use within the run-time system, so abort is
+    --  assumed to be already deferred, and the caller should be
+    --  holding its own ATCB lock.
+ 
+    procedure Timed_Sleep
+      (Self_ID  : Task_Id;
+       Time     : Duration;
+       Mode     : ST.Delay_Modes;
+       Reason   : System.Tasking.Task_States;
+       Timedout : out Boolean;
+       Yielded  : out Boolean)
+    is
+       pragma Unreferenced (Reason);
+ 
+       Orig     : constant Duration := Monotonic_Clock;
+       Absolute : Duration;
+       Ticks    : int;
+       Result   : int;
+       Wakeup   : Boolean := False;
+ 
+    begin
+       Timedout := False;
+       Yielded  := True;
+ 
+       if Mode = Relative then
+          Absolute := Orig + Time;
+ 
+          --  Systematically add one since the first tick will delay
+          --  *at most* 1 / Rate_Duration seconds, so we need to add one to
+          --  be on the safe side.
+ 
+          Ticks := To_Clock_Ticks (Time);
+ 
+          if Ticks > 0 and then Ticks < int'Last then
+             Ticks := Ticks + 1;
+          end if;
+ 
+       else
+          Absolute := Time;
+          Ticks    := To_Clock_Ticks (Time - Monotonic_Clock);
+       end if;
+ 
+       if Ticks > 0 then
+          loop
+             --  Release the mutex before sleeping.
+             if Single_Lock then
+                Result := semGive (Single_RTS_Lock.Mutex);
+             else
+                Result := semGive (Self_ID.Common.LL.L.Mutex);
+             end if;
+ 
+             pragma Assert (Result = 0);
+ 
+             --  Perform a blocking operation to take the CV semaphore.
+             --  Note that a blocking operation in VxWorks will reenable
+             --  task scheduling. When we are no longer blocked and control
+             --  is returned, task scheduling will again be disabled.
+ 
+             Result := semTake (Self_ID.Common.LL.CV, Ticks);
+ 
+             if Result = 0 then
+                --  Somebody may have called Wakeup for us
+ 
+                Wakeup := True;
+ 
+             else
+                if errno /= S_objLib_OBJ_TIMEOUT then
+                   Wakeup := True;
+                else
+                   --  If Ticks = int'last, it was most probably truncated
+                   --  so let's make another round after recomputing Ticks
+                   --  from the the absolute time.
+ 
+                   if Ticks /= int'Last then
+                      Timedout := True;
+                   else
+                      Ticks := To_Clock_Ticks (Absolute - Monotonic_Clock);
+ 
+                      if Ticks < 0 then
+                         Timedout := True;
+                      end if;
+                   end if;
+                end if;
+             end if;
+ 
+             --  Take the mutex back.
+             if Single_Lock then
+                Result := semTake (Single_RTS_Lock.Mutex, WAIT_FOREVER);
+             else
+                Result := semTake (Self_ID.Common.LL.L.Mutex, WAIT_FOREVER);
+             end if;
+ 
+             pragma Assert (Result = 0);
+ 
+             exit when Timedout or Wakeup;
+          end loop;
+ 
+       else
+          Timedout := True;
+ 
+          --  Should never hold a lock while yielding.
+          if Single_Lock then
+             Result := semGive (Single_RTS_Lock.Mutex);
+             taskDelay (0);
+             Result := semTake (Single_RTS_Lock.Mutex, WAIT_FOREVER);
+ 
+          else
+             Result := semGive (Self_ID.Common.LL.L.Mutex);
+             taskDelay (0);
+             Result := semTake (Self_ID.Common.LL.L.Mutex, WAIT_FOREVER);
+          end if;
+       end if;
+    end Timed_Sleep;
+ 
+    -----------------
+    -- Timed_Delay --
+    -----------------
+ 
+    --  This is for use in implementing delay statements, so
+    --  we assume the caller is holding no locks.
+ 
+    procedure Timed_Delay
+      (Self_ID  : Task_Id;
+       Time     : Duration;
+       Mode     : ST.Delay_Modes)
+    is
+       Orig     : constant Duration := Monotonic_Clock;
+       Absolute : Duration;
+       Ticks    : int;
+       Timedout : Boolean;
+       Result   : int;
+       Aborted  : Boolean := False;
+ 
+    begin
+       SSL.Abort_Defer.all;
+ 
+       if Mode = Relative then
+          Absolute := Orig + Time;
+          Ticks    := To_Clock_Ticks (Time);
+ 
+          if Ticks > 0 and then Ticks < int'Last then
+ 
+             --  The first tick will delay anytime between 0 and
+             --  1 / sysClkRateGet seconds, so we need to add one to
+             --  be on the safe side.
+ 
+             Ticks := Ticks + 1;
+          end if;
+ 
+       else
+          Absolute := Time;
+          Ticks    := To_Clock_Ticks (Time - Orig);
+       end if;
+ 
+       if Ticks > 0 then
+          --  Modifying State and Pending_Priority_Change, locking the TCB.
+          if Single_Lock then
+             Result := semTake (Single_RTS_Lock.Mutex, WAIT_FOREVER);
+          else
+             Result := semTake (Self_ID.Common.LL.L.Mutex, WAIT_FOREVER);
+          end if;
+ 
+          pragma Assert (Result = 0);
+ 
+          Self_ID.Common.State := Delay_Sleep;
+          Timedout := False;
+ 
+          loop
+             if Self_ID.Pending_Priority_Change then
+                Self_ID.Pending_Priority_Change := False;
+                Self_ID.Common.Base_Priority    := Self_ID.New_Base_Priority;
+                Set_Priority (Self_ID, Self_ID.Common.Base_Priority);
+             end if;
+ 
+             Aborted := Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level;
+ 
+             --  Release the TCB before sleeping
+ 
+             if Single_Lock then
+                Result := semGive (Single_RTS_Lock.Mutex);
+             else
+                Result := semGive (Self_ID.Common.LL.L.Mutex);
+             end if;
+             pragma Assert (Result = 0);
+ 
+             exit when Aborted;
+ 
+             Result := semTake (Self_ID.Common.LL.CV, Ticks);
+ 
+             if Result /= 0 then
+                --  If Ticks = int'last, it was most probably truncated
+                --  so let's make another round after recomputing Ticks
+                --  from the the absolute time.
+ 
+                if errno = S_objLib_OBJ_TIMEOUT and then Ticks /= int'Last then
+                   Timedout := True;
+                else
+                   Ticks := To_Clock_Ticks (Absolute - Monotonic_Clock);
+ 
+                   if Ticks < 0 then
+                      Timedout := True;
+                   end if;
+                end if;
+             end if;
+ 
+             --  Take back the lock after having slept, to protect further
+             --  access to Self_ID
+ 
+             if Single_Lock then
+                Result := semTake (Single_RTS_Lock.Mutex, WAIT_FOREVER);
+             else
+                Result := semTake (Self_ID.Common.LL.L.Mutex, WAIT_FOREVER);
+             end if;
+ 
+             pragma Assert (Result = 0);
+ 
+             exit when Timedout;
+          end loop;
+ 
+          Self_ID.Common.State := Runnable;
+ 
+          if Single_Lock then
+             Result := semGive (Single_RTS_Lock.Mutex);
+          else
+             Result := semGive (Self_ID.Common.LL.L.Mutex);
+          end if;
+ 
+       else
+          taskDelay (0);
+       end if;
+ 
+       SSL.Abort_Undefer.all;
+    end Timed_Delay;
+ 
+    ---------------------
+    -- Monotonic_Clock --
+    ---------------------
+ 
+    function Monotonic_Clock return Duration is
+       TS     : aliased timespec;
+       Result : int;
+    begin
+       Result := clock_gettime (CLOCK_REALTIME, TS'Unchecked_Access);
+       pragma Assert (Result = 0);
+       return To_Duration (TS);
+    end Monotonic_Clock;
+ 
+    -------------------
+    -- RT_Resolution --
+    -------------------
+ 
+    function RT_Resolution return Duration is
+    begin
+       return 1.0 / Duration (sysClkRateGet);
+    end RT_Resolution;
+ 
+    ------------
+    -- Wakeup --
+    ------------
+ 
+    procedure Wakeup (T : Task_Id; Reason : System.Tasking.Task_States) is
+       pragma Unreferenced (Reason);
+       Result : int;
+    begin
+       Result := semGive (T.Common.LL.CV);
+       pragma Assert (Result = 0);
+    end Wakeup;
+ 
+    -----------
+    -- Yield --
+    -----------
+ 
+    procedure Yield (Do_Yield : Boolean := True) is
+       pragma Unreferenced (Do_Yield);
+       Result : int;
+       pragma Unreferenced (Result);
+    begin
+       Result := taskDelay (0);
+    end Yield;
+ 
+    ------------------
+    -- Set_Priority --
+    ------------------
+ 
+    type Prio_Array_Type is array (System.Any_Priority) of Integer;
+    pragma Atomic_Components (Prio_Array_Type);
+ 
+    Prio_Array : Prio_Array_Type;
+    --  Global array containing the id of the currently running task for
+    --  each priority. Note that we assume that we are on a single processor
+    --  with run-till-blocked scheduling.
+ 
+    procedure Set_Priority
+      (T                   : Task_Id;
+       Prio                : System.Any_Priority;
+       Loss_Of_Inheritance : Boolean := False)
+    is
+       Array_Item : Integer;
+       Result     : int;
+ 
+    begin
+       Result :=
+         taskPrioritySet
+           (T.Common.LL.Thread, To_VxWorks_Priority (int (Prio)));
+       pragma Assert (Result = 0);
+ 
+       if FIFO_Within_Priorities then
+ 
+          --  Annex D requirement [RM D.2.2 par. 9]:
+          --    If the task drops its priority due to the loss of inherited
+          --    priority, it is added at the head of the ready queue for its
+          --    new active priority.
+ 
+          if Loss_Of_Inheritance
+            and then Prio < T.Common.Current_Priority
+          then
+             Array_Item := Prio_Array (T.Common.Base_Priority) + 1;
+             Prio_Array (T.Common.Base_Priority) := Array_Item;
+ 
+             loop
+                --  Give some processes a chance to arrive
+ 
+                taskDelay (0);
+ 
+                --  Then wait for our turn to proceed
+ 
+                exit when Array_Item = Prio_Array (T.Common.Base_Priority)
+                  or else Prio_Array (T.Common.Base_Priority) = 1;
+             end loop;
+ 
+             Prio_Array (T.Common.Base_Priority) :=
+               Prio_Array (T.Common.Base_Priority) - 1;
+          end if;
+       end if;
+ 
+       T.Common.Current_Priority := Prio;
+    end Set_Priority;
+ 
+    ------------------
+    -- Get_Priority --
+    ------------------
+ 
+    function Get_Priority (T : Task_Id) return System.Any_Priority is
+    begin
+       return T.Common.Current_Priority;
+    end Get_Priority;
+ 
+    ----------------
+    -- Enter_Task --
+    ----------------
+ 
+    procedure Enter_Task (Self_ID : Task_Id) is
+       procedure Init_Float;
+       pragma Import (C, Init_Float, "__gnat_init_float");
+       --  Properly initializes the FPU for PPC/MIPS systems.
+ 
+    begin
+       Self_ID.Common.LL.Thread := taskIdSelf;
+       Specific.Set (Self_ID);
+ 
+       Init_Float;
+ 
+       --  Install the signal handlers.
+       --  This is called for each task since there is no signal inheritance
+       --  between VxWorks tasks.
+ 
+       Install_Signal_Handlers;
+ 
+       Lock_RTS;
+ 
+       for J in Known_Tasks'Range loop
+          if Known_Tasks (J) = null then
+             Known_Tasks (J) := Self_ID;
+             Self_ID.Known_Tasks_Index := J;
+             exit;
+          end if;
+       end loop;
+ 
+       Unlock_RTS;
+    end Enter_Task;
+ 
+    --------------
+    -- New_ATCB --
+    --------------
+ 
+    function New_ATCB (Entry_Num : Task_Entry_Index) return Task_Id is
+    begin
+       return new Ada_Task_Control_Block (Entry_Num);
+    end New_ATCB;
+ 
+    -------------------
+    -- Is_Valid_Task --
+    -------------------
+ 
+    function Is_Valid_Task return Boolean renames Specific.Is_Valid_Task;
+ 
+    -----------------------------
+    -- Register_Foreign_Thread --
+    -----------------------------
+ 
+    function Register_Foreign_Thread return Task_Id is
+    begin
+       if Is_Valid_Task then
+          return Self;
+       else
+          return Register_Foreign_Thread (taskIdSelf);
+       end if;
+    end Register_Foreign_Thread;
+ 
+    --------------------
+    -- Initialize_TCB --
+    --------------------
+ 
+    procedure Initialize_TCB (Self_ID : Task_Id; Succeeded : out Boolean) is
+    begin
+       Self_ID.Common.LL.CV := semBCreate (SEM_Q_PRIORITY, SEM_EMPTY);
+       Self_ID.Common.LL.Thread := 0;
+ 
+       if Self_ID.Common.LL.CV = 0 then
+          Succeeded := False;
+       else
+          Succeeded := True;
+ 
+          if not Single_Lock then
+             Initialize_Lock (Self_ID.Common.LL.L'Access, ATCB_Level);
+          end if;
+       end if;
+    end Initialize_TCB;
+ 
+    -----------------
+    -- Create_Task --
+    -----------------
+ 
+    procedure Create_Task
+      (T          : Task_Id;
+       Wrapper    : System.Address;
+       Stack_Size : System.Parameters.Size_Type;
+       Priority   : System.Any_Priority;
+       Succeeded  : out Boolean)
+    is
+       Adjusted_Stack_Size : size_t;
+    begin
+       if Stack_Size = Unspecified_Size then
+          Adjusted_Stack_Size := size_t (Default_Stack_Size);
+ 
+       elsif Stack_Size < Minimum_Stack_Size then
+          Adjusted_Stack_Size := size_t (Minimum_Stack_Size);
+ 
+       else
+          Adjusted_Stack_Size := size_t (Stack_Size);
+       end if;
+ 
+       --  Ask for 4 extra bytes of stack space so that the ATCB
+       --  pointer can be stored below the stack limit, plus extra
+       --  space for the frame of Task_Wrapper.  This is so the user
+       --  gets the amount of stack requested exclusive of the needs
+       --  of the runtime.
+       --
+       --  We also have to allocate n more bytes for the task name
+       --  storage and enough space for the Wind Task Control Block
+       --  which is around 0x778 bytes.  VxWorks also seems to carve out
+       --  additional space, so use 2048 as a nice round number.
+       --  We might want to increment to the nearest page size in
+       --  case we ever support VxVMI.
+       --
+       --  XXX - we should come back and visit this so we can
+       --        set the task name to something appropriate.
+ 
+       Adjusted_Stack_Size := Adjusted_Stack_Size + 2048;
+ 
+       --  Since the initial signal mask of a thread is inherited from the
+       --  creator, and the Environment task has all its signals masked, we
+       --  do not need to manipulate caller's signal mask at this point.
+       --  All tasks in RTS will have All_Tasks_Mask initially.
+ 
+       if T.Common.Task_Image_Len = 0 then
+          T.Common.LL.Thread := taskSpawn
+            (System.Null_Address,
+             To_VxWorks_Priority (int (Priority)),
+             VX_FP_TASK,
+             Adjusted_Stack_Size,
+             Wrapper,
+             To_Address (T));
+       else
+          declare
+             Name : aliased String (1 .. T.Common.Task_Image_Len + 1);
+          begin
+             Name (1 .. Name'Last - 1) :=
+               T.Common.Task_Image (1 .. T.Common.Task_Image_Len);
+             Name (Name'Last) := ASCII.NUL;
+ 
+             T.Common.LL.Thread := taskSpawn
+               (Name'Address,
+                To_VxWorks_Priority (int (Priority)),
+                VX_FP_TASK,
+                Adjusted_Stack_Size,
+                Wrapper,
+                To_Address (T));
+          end;
+       end if;
+ 
+       if T.Common.LL.Thread = -1 then
+          Succeeded := False;
+       else
+          Succeeded := True;
+       end if;
+ 
+       Task_Creation_Hook (T.Common.LL.Thread);
+       Set_Priority (T, Priority);
+    end Create_Task;
+ 
+    ------------------
+    -- Finalize_TCB --
+    ------------------
+ 
+    procedure Finalize_TCB (T : Task_Id) is
+       Result  : int;
+       Tmp     : Task_Id          := T;
+       Is_Self : constant Boolean := (T = Self);
+ 
+       procedure Free is new
+         Unchecked_Deallocation (Ada_Task_Control_Block, Task_Id);
+ 
+    begin
+       if not Single_Lock then
+          Result := semDelete (T.Common.LL.L.Mutex);
+          pragma Assert (Result = 0);
+       end if;
+ 
+       T.Common.LL.Thread := 0;
+ 
+       Result := semDelete (T.Common.LL.CV);
+       pragma Assert (Result = 0);
+ 
+       if T.Known_Tasks_Index /= -1 then
+          Known_Tasks (T.Known_Tasks_Index) := null;
+       end if;
+ 
+       Free (Tmp);
+ 
+       if Is_Self then
+          Result := taskVarDelete (taskIdSelf, ATCB_Key'Access);
+          pragma Assert (Result /= ERROR);
+       end if;
+    end Finalize_TCB;
+ 
+    ---------------
+    -- Exit_Task --
+    ---------------
+ 
+    procedure Exit_Task is
+    begin
+       Specific.Set (null);
+    end Exit_Task;
+ 
+    ----------------
+    -- Abort_Task --
+    ----------------
+ 
+    procedure Abort_Task (T : Task_Id) is
+       Result : int;
+ 
+    begin
+       Result := kill (T.Common.LL.Thread,
+         Signal (Interrupt_Management.Abort_Task_Signal));
+       pragma Assert (Result = 0);
+    end Abort_Task;
+ 
+    ----------------
+    -- Check_Exit --
+    ----------------
+ 
+    --  Dummy version
+ 
+    function Check_Exit (Self_ID : ST.Task_Id) return Boolean is
+       pragma Unreferenced (Self_ID);
+    begin
+       return True;
+    end Check_Exit;
+ 
+    --------------------
+    -- Check_No_Locks --
+    --------------------
+ 
+    function Check_No_Locks (Self_ID : ST.Task_Id) return Boolean is
+       pragma Unreferenced (Self_ID);
+    begin
+       return True;
+    end Check_No_Locks;
+ 
+    ----------------------
+    -- Environment_Task --
+    ----------------------
+ 
+    function Environment_Task return Task_Id is
+    begin
+       return Environment_Task_Id;
+    end Environment_Task;
+ 
+    --------------
+    -- Lock_RTS --
+    --------------
+ 
+    procedure Lock_RTS is
+    begin
+       Write_Lock (Single_RTS_Lock'Access, Global_Lock => True);
+    end Lock_RTS;
+ 
+    ----------------
+    -- Unlock_RTS --
+    ----------------
+ 
+    procedure Unlock_RTS is
+    begin
+       Unlock (Single_RTS_Lock'Access, Global_Lock => True);
+    end Unlock_RTS;
+ 
+    ------------------
+    -- Suspend_Task --
+    ------------------
+ 
+    function Suspend_Task
+      (T           : ST.Task_Id;
+       Thread_Self : Thread_Id) return Boolean
+    is
+    begin
+       if T.Common.LL.Thread /= 0
+         and then T.Common.LL.Thread /= Thread_Self
+       then
+          return taskSuspend (T.Common.LL.Thread) = 0;
+       else
+          return True;
+       end if;
+    end Suspend_Task;
+ 
+    -----------------
+    -- Resume_Task --
+    -----------------
+ 
+    function Resume_Task
+      (T           : ST.Task_Id;
+       Thread_Self : Thread_Id) return Boolean
+    is
+    begin
+       if T.Common.LL.Thread /= 0
+         and then T.Common.LL.Thread /= Thread_Self
+       then
+          return taskResume (T.Common.LL.Thread) = 0;
+       else
+          return True;
+       end if;
+    end Resume_Task;
+ 
+    ----------------
+    -- Initialize --
+    ----------------
+ 
+    procedure Initialize (Environment_Task : Task_Id) is
+       Result : int;
+ 
+    begin
+       if Locking_Policy = 'C' then
+          Mutex_Protocol := Prio_Protect;
+       elsif Locking_Policy = 'I' then
+          Mutex_Protocol := Prio_Inherit;
+       else
+          Mutex_Protocol := Prio_None;
+       end if;
+ 
+       if Time_Slice_Val > 0 then
+          Result := kernelTimeSlice
+            (To_Clock_Ticks
+              (Duration (Time_Slice_Val) / Duration (1_000_000.0)));
+       end if;
+ 
+       Result := sigemptyset (Unblocked_Signal_Mask'Access);
+       pragma Assert (Result = 0);
+ 
+       for J in Interrupt_Management.Signal_ID loop
+          if System.Interrupt_Management.Keep_Unmasked (J) then
+             Result := sigaddset (Unblocked_Signal_Mask'Access, Signal (J));
+             pragma Assert (Result = 0);
+          end if;
+       end loop;
+ 
+       Environment_Task_Id := Environment_Task;
+ 
+       --  Initialize the lock used to synchronize chain of all ATCBs.
+ 
+       Initialize_Lock (Single_RTS_Lock'Access, RTS_Lock_Level);
+ 
+       Enter_Task (Environment_Task);
+    end Initialize;
+ 
+ end System.Task_Primitives.Operations;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-taprop.ads gcc-4.0.0/gcc/ada/s-taprop.ads
*** gcc-3.4.3/gcc/ada/s-taprop.ads	Tue Oct 21 13:42:15 2003
--- gcc-4.0.0/gcc/ada/s-taprop.ads	Thu Feb 10 13:57:23 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2002, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with System.Parameters;
*** 38,44 ****
  --  used for Size_Type
  
  with System.Tasking;
! --  used for Task_ID
  
  with System.OS_Interface;
  --  used for Thread_Id
--- 38,44 ----
  --  used for Size_Type
  
  with System.Tasking;
! --  used for Task_Id
  
  with System.OS_Interface;
  --  used for Thread_Id
*************** package System.Task_Primitives.Operation
*** 49,67 ****
     package ST renames System.Tasking;
     package OSI renames System.OS_Interface;
  
!    procedure Initialize (Environment_Task : ST.Task_ID);
!    pragma Inline (Initialize);
!    --  This must be called once, before any other subprograms of this
!    --  package are called.
  
     procedure Create_Task
!      (T          : ST.Task_ID;
        Wrapper    : System.Address;
        Stack_Size : System.Parameters.Size_Type;
        Priority   : System.Any_Priority;
        Succeeded  : out Boolean);
     pragma Inline (Create_Task);
!    --  Create a new low-level task with ST.Task_ID T and place other needed
     --  information in the ATCB.
     --
     --  A new thread of control is created, with a stack of at least Stack_Size
--- 49,67 ----
     package ST renames System.Tasking;
     package OSI renames System.OS_Interface;
  
!    procedure Initialize (Environment_Task : ST.Task_Id);
!    --  Perform initialization and set up of the environment task for proper
!    --  operation of the tasking run-time. This must be called once, before any
!    --  other subprograms of this package are called.
  
     procedure Create_Task
!      (T          : ST.Task_Id;
        Wrapper    : System.Address;
        Stack_Size : System.Parameters.Size_Type;
        Priority   : System.Any_Priority;
        Succeeded  : out Boolean);
     pragma Inline (Create_Task);
!    --  Create a new low-level task with ST.Task_Id T and place other needed
     --  information in the ATCB.
     --
     --  A new thread of control is created, with a stack of at least Stack_Size
*************** package System.Task_Primitives.Operation
*** 69,75 ****
     --  of control. If Stack_Size = Unspecified_Storage_Size, choose a default
     --  stack size; this may be effectively "unbounded" on some systems.
     --
!    --  The newly created low-level task is associated with the ST.Task_ID T
     --  such that any subsequent call to Self from within the context of the
     --  low-level task returns T.
     --
--- 69,75 ----
     --  of control. If Stack_Size = Unspecified_Storage_Size, choose a default
     --  stack size; this may be effectively "unbounded" on some systems.
     --
!    --  The newly created low-level task is associated with the ST.Task_Id T
     --  such that any subsequent call to Self from within the context of the
     --  low-level task returns T.
     --
*************** package System.Task_Primitives.Operation
*** 80,86 ****
     --  Succeeded is set to true unless creation of the task failed,
     --  as it may if there are insufficient resources to create another task.
  
!    procedure Enter_Task (Self_ID : ST.Task_ID);
     pragma Inline (Enter_Task);
     --  Initialize data structures specific to the calling task.
     --  Self must be the ID of the calling task.
--- 80,86 ----
     --  Succeeded is set to true unless creation of the task failed,
     --  as it may if there are insufficient resources to create another task.
  
!    procedure Enter_Task (Self_ID : ST.Task_Id);
     pragma Inline (Enter_Task);
     --  Initialize data structures specific to the calling task.
     --  Self must be the ID of the calling task.
*************** package System.Task_Primitives.Operation
*** 96,110 ****
     --  The effects of further calls to operations defined below
     --  on the task are undefined thereafter.
  
!    function New_ATCB (Entry_Num : ST.Task_Entry_Index) return ST.Task_ID;
     pragma Inline (New_ATCB);
     --  Allocate a new ATCB with the specified number of entries.
  
!    procedure Initialize_TCB (Self_ID : ST.Task_ID; Succeeded : out Boolean);
     pragma Inline (Initialize_TCB);
     --  Initialize all fields of the TCB
  
!    procedure Finalize_TCB (T : ST.Task_ID);
     pragma Inline (Finalize_TCB);
     --  Finalizes Private_Data of ATCB, and then deallocates it.
     --  This is also responsible for recovering any storage or other resources
--- 96,110 ----
     --  The effects of further calls to operations defined below
     --  on the task are undefined thereafter.
  
!    function New_ATCB (Entry_Num : ST.Task_Entry_Index) return ST.Task_Id;
     pragma Inline (New_ATCB);
     --  Allocate a new ATCB with the specified number of entries.
  
!    procedure Initialize_TCB (Self_ID : ST.Task_Id; Succeeded : out Boolean);
     pragma Inline (Initialize_TCB);
     --  Initialize all fields of the TCB
  
!    procedure Finalize_TCB (T : ST.Task_Id);
     pragma Inline (Finalize_TCB);
     --  Finalizes Private_Data of ATCB, and then deallocates it.
     --  This is also responsible for recovering any storage or other resources
*************** package System.Task_Primitives.Operation
*** 113,119 ****
     --  After it is called there should be no further
     --  reference to the ATCB that corresponds to T.
  
!    procedure Abort_Task (T : ST.Task_ID);
     pragma Inline (Abort_Task);
     --  Abort the task specified by T (the target task). This causes
     --  the target task to asynchronously raise Abort_Signal if
--- 113,119 ----
     --  After it is called there should be no further
     --  reference to the ATCB that corresponds to T.
  
!    procedure Abort_Task (T : ST.Task_Id);
     pragma Inline (Abort_Task);
     --  Abort the task specified by T (the target task). This causes
     --  the target task to asynchronously raise Abort_Signal if
*************** package System.Task_Primitives.Operation
*** 128,134 ****
  
     --  ??? modify GNARL to skip wakeup and always call Abort_Task
  
!    function Self return ST.Task_ID;
     pragma Inline (Self);
     --  Return a pointer to the Ada Task Control Block of the calling task.
  
--- 128,134 ----
  
     --  ??? modify GNARL to skip wakeup and always call Abort_Task
  
!    function Self return ST.Task_Id;
     pragma Inline (Self);
     --  Return a pointer to the Ada Task Control Block of the calling task.
  
*************** package System.Task_Primitives.Operation
*** 172,178 ****
  
     procedure Write_Lock (L : access Lock; Ceiling_Violation : out Boolean);
     procedure Write_Lock (L : access RTS_Lock; Global_Lock : Boolean := False);
!    procedure Write_Lock (T : ST.Task_ID);
     pragma Inline (Write_Lock);
     --  Lock a lock object for write access. After this operation returns,
     --  the calling task holds write permission for the lock object. No other
--- 172,178 ----
  
     procedure Write_Lock (L : access Lock; Ceiling_Violation : out Boolean);
     procedure Write_Lock (L : access RTS_Lock; Global_Lock : Boolean := False);
!    procedure Write_Lock (T : ST.Task_Id);
     pragma Inline (Write_Lock);
     --  Lock a lock object for write access. After this operation returns,
     --  the calling task holds write permission for the lock object. No other
*************** package System.Task_Primitives.Operation
*** 188,194 ****
     --  For the operation on RTS_Lock, Global_Lock should be set to True
     --  if L is a global lock (Single_RTS_Lock, Global_Task_Lock).
     --
!    --  For the operation on ST.Task_ID, the lock is the special lock object
     --  associated with that task's ATCB. This lock has effective ceiling
     --  priority high enough that it is safe to call by a task with any
     --  priority in the range System.Priority. It is implicitly initialized
--- 188,194 ----
     --  For the operation on RTS_Lock, Global_Lock should be set to True
     --  if L is a global lock (Single_RTS_Lock, Global_Task_Lock).
     --
!    --  For the operation on ST.Task_Id, the lock is the special lock object
     --  associated with that task's ATCB. This lock has effective ceiling
     --  priority high enough that it is safe to call by a task with any
     --  priority in the range System.Priority. It is implicitly initialized
*************** package System.Task_Primitives.Operation
*** 212,218 ****
     --  Write_Lock. This simplifies the implementation, but reduces the level
     --  of concurrency that can be achieved.
     --
!    --  Note that Read_Lock is not defined for RT_Lock and ST.Task_ID.
     --  That is because (1) so far Read_Lock has always been implemented
     --  the same as Write_Lock, (2) most lock usage inside the RTS involves
     --  potential write access, and (3) implementations of priority ceiling
--- 212,218 ----
     --  Write_Lock. This simplifies the implementation, but reduces the level
     --  of concurrency that can be achieved.
     --
!    --  Note that Read_Lock is not defined for RT_Lock and ST.Task_Id.
     --  That is because (1) so far Read_Lock has always been implemented
     --  the same as Write_Lock, (2) most lock usage inside the RTS involves
     --  potential write access, and (3) implementations of priority ceiling
*************** package System.Task_Primitives.Operation
*** 220,226 ****
  
     procedure Unlock (L : access Lock);
     procedure Unlock (L : access RTS_Lock; Global_Lock : Boolean := False);
!    procedure Unlock (T : ST.Task_ID);
     pragma Inline (Unlock);
     --  Unlock a locked lock object.
     --
--- 220,226 ----
  
     procedure Unlock (L : access Lock);
     procedure Unlock (L : access RTS_Lock; Global_Lock : Boolean := False);
!    procedure Unlock (T : ST.Task_Id);
     pragma Inline (Unlock);
     --  Unlock a locked lock object.
     --
*************** package System.Task_Primitives.Operation
*** 295,301 ****
     --  ones.
  
     procedure Set_Priority
!      (T : ST.Task_ID;
        Prio : System.Any_Priority;
        Loss_Of_Inheritance : Boolean := False);
     pragma Inline (Set_Priority);
--- 295,301 ----
     --  ones.
  
     procedure Set_Priority
!      (T : ST.Task_Id;
        Prio : System.Any_Priority;
        Loss_Of_Inheritance : Boolean := False);
     pragma Inline (Set_Priority);
*************** package System.Task_Primitives.Operation
*** 307,330 ****
     --  The effect should be consistent with the Ada Reference Manual.
     --  In particular, when a task lowers its priority due to the loss of
     --  inherited priority, it goes at the head of the queue for its new
!    --  priority (RM D.2.2 par 9).
!    --  Loss_Of_Inheritance helps the underlying implementation to do it
!    --  right when the OS doesn't.
  
!    function Get_Priority (T : ST.Task_ID) return System.Any_Priority;
     pragma Inline (Get_Priority);
     --  Returns the priority last set by Set_Priority for this task.
  
     function Monotonic_Clock return Duration;
     pragma Inline (Monotonic_Clock);
!    --  Returns "absolute" time, represented as an offset
!    --  relative to "the Epoch", which is Jan 1, 1970.
!    --  This clock implementation is immune to the system's clock changes.
  
     function RT_Resolution return Duration;
     pragma Inline (RT_Resolution);
!    --  Returns the resolution of the underlying clock used to implement
!    --  RT_Clock.
  
     ----------------
     -- Extensions --
--- 307,328 ----
     --  The effect should be consistent with the Ada Reference Manual.
     --  In particular, when a task lowers its priority due to the loss of
     --  inherited priority, it goes at the head of the queue for its new
!    --  priority (RM D.2.2 par 9). Loss_Of_Inheritance helps the underlying
!    --  implementation to do it right when the OS doesn't.
  
!    function Get_Priority (T : ST.Task_Id) return System.Any_Priority;
     pragma Inline (Get_Priority);
     --  Returns the priority last set by Set_Priority for this task.
  
     function Monotonic_Clock return Duration;
     pragma Inline (Monotonic_Clock);
!    --  Returns "absolute" time, represented as an offset relative to "the
!    --  Epoch", which is Jan 1, 1970. This clock implementation is immune to
!    --  the system's clock changes.
  
     function RT_Resolution return Duration;
     pragma Inline (RT_Resolution);
!    --  Returns resolution of the underlying clock used to implement RT_Clock
  
     ----------------
     -- Extensions --
*************** package System.Task_Primitives.Operation
*** 335,341 ****
     --  Pending priority changes are handled internally.
  
     procedure Sleep
!      (Self_ID : ST.Task_ID;
        Reason  : System.Tasking.Task_States);
     pragma Inline (Sleep);
     --  Wait until the current task, T,  is signaled to wake up.
--- 333,339 ----
     --  Pending priority changes are handled internally.
  
     procedure Sleep
!      (Self_ID : ST.Task_Id;
        Reason  : System.Tasking.Task_States);
     pragma Inline (Sleep);
     --  Wait until the current task, T,  is signaled to wake up.
*************** package System.Task_Primitives.Operation
*** 358,364 ****
     --  a Wakeup operation is performed for the same task.
  
     procedure Timed_Sleep
!      (Self_ID  : ST.Task_ID;
        Time     : Duration;
        Mode     : ST.Delay_Modes;
        Reason   : System.Tasking.Task_States;
--- 356,362 ----
     --  a Wakeup operation is performed for the same task.
  
     procedure Timed_Sleep
!      (Self_ID  : ST.Task_Id;
        Time     : Duration;
        Mode     : ST.Delay_Modes;
        Reason   : System.Tasking.Task_States;
*************** package System.Task_Primitives.Operation
*** 367,400 ****
     --  Combination of Sleep (above) and Timed_Delay
  
     procedure Timed_Delay
!      (Self_ID : ST.Task_ID;
        Time    : Duration;
        Mode    : ST.Delay_Modes);
     --  Implement the semantics of the delay statement. It is assumed that
     --  the caller is not abort-deferred and does not hold any locks.
  
     procedure Wakeup
!      (T      : ST.Task_ID;
        Reason : System.Tasking.Task_States);
     pragma Inline (Wakeup);
     --  Wake up task T if it is waiting on a Sleep call (of ordinary
     --  or timed variety), making it ready for execution once again.
     --  If the task T is not waiting on a Sleep, the operation has no effect.
  
!    function Environment_Task return ST.Task_ID;
     pragma Inline (Environment_Task);
     --  Return the task ID of the environment task
     --  Consider putting this into a variable visible directly
     --  by the rest of the runtime system. ???
  
!    function Get_Thread_Id (T : ST.Task_ID) return OSI.Thread_Id;
     --  Return the thread id of the specified task
  
     function Is_Valid_Task return Boolean;
     pragma Inline (Is_Valid_Task);
     --  Does the calling thread have an ATCB?
  
!    function Register_Foreign_Thread return ST.Task_ID;
     --  Allocate and initialize a new ATCB for the current thread
  
     -----------------------
--- 365,398 ----
     --  Combination of Sleep (above) and Timed_Delay
  
     procedure Timed_Delay
!      (Self_ID : ST.Task_Id;
        Time    : Duration;
        Mode    : ST.Delay_Modes);
     --  Implement the semantics of the delay statement. It is assumed that
     --  the caller is not abort-deferred and does not hold any locks.
  
     procedure Wakeup
!      (T      : ST.Task_Id;
        Reason : System.Tasking.Task_States);
     pragma Inline (Wakeup);
     --  Wake up task T if it is waiting on a Sleep call (of ordinary
     --  or timed variety), making it ready for execution once again.
     --  If the task T is not waiting on a Sleep, the operation has no effect.
  
!    function Environment_Task return ST.Task_Id;
     pragma Inline (Environment_Task);
     --  Return the task ID of the environment task
     --  Consider putting this into a variable visible directly
     --  by the rest of the runtime system. ???
  
!    function Get_Thread_Id (T : ST.Task_Id) return OSI.Thread_Id;
     --  Return the thread id of the specified task
  
     function Is_Valid_Task return Boolean;
     pragma Inline (Is_Valid_Task);
     --  Does the calling thread have an ATCB?
  
!    function Register_Foreign_Thread return ST.Task_Id;
     --  Allocate and initialize a new ATCB for the current thread
  
     -----------------------
*************** package System.Task_Primitives.Operation
*** 439,445 ****
     --  the guard page ourselves, and the procedure Stack_Guard is provided
     --  for this purpose.
  
!    procedure Stack_Guard (T : ST.Task_ID; On : Boolean);
     --  Ensure guard page is set if one is needed and the underlying thread
     --  system does not provide it. The procedure is as follows:
     --
--- 437,443 ----
     --  the guard page ourselves, and the procedure Stack_Guard is provided
     --  for this purpose.
  
!    procedure Stack_Guard (T : ST.Task_Id; On : Boolean);
     --  Ensure guard page is set if one is needed and the underlying thread
     --  system does not provide it. The procedure is as follows:
     --
*************** package System.Task_Primitives.Operation
*** 467,493 ****
     --  These interfaces have been added to assist in debugging the
     --  tasking runtime system.
  
!    function Check_Exit (Self_ID : ST.Task_ID) return Boolean;
     pragma Inline (Check_Exit);
     --  Check that the current task is holding only Global_Task_Lock.
  
!    function Check_No_Locks (Self_ID : ST.Task_ID) return Boolean;
     pragma Inline (Check_No_Locks);
     --  Check that current task is holding no locks.
  
     function Suspend_Task
!      (T           : ST.Task_ID;
!       Thread_Self : OSI.Thread_Id)
!       return        Boolean;
     --  Suspend a specific task when the underlying thread library provides
     --  such functionality, unless the thread associated with T is Thread_Self.
     --  Such functionality is needed by gdb on some targets (e.g VxWorks)
     --  Return True is the operation is successful
  
     function Resume_Task
!      (T           : ST.Task_ID;
!       Thread_Self : OSI.Thread_Id)
!       return        Boolean;
     --  Resume a specific task when the underlying thread library provides
     --  such functionality, unless the thread associated with T is Thread_Self.
     --  Such functionality is needed by gdb on some targets (e.g VxWorks)
--- 465,489 ----
     --  These interfaces have been added to assist in debugging the
     --  tasking runtime system.
  
!    function Check_Exit (Self_ID : ST.Task_Id) return Boolean;
     pragma Inline (Check_Exit);
     --  Check that the current task is holding only Global_Task_Lock.
  
!    function Check_No_Locks (Self_ID : ST.Task_Id) return Boolean;
     pragma Inline (Check_No_Locks);
     --  Check that current task is holding no locks.
  
     function Suspend_Task
!      (T           : ST.Task_Id;
!       Thread_Self : OSI.Thread_Id) return Boolean;
     --  Suspend a specific task when the underlying thread library provides
     --  such functionality, unless the thread associated with T is Thread_Self.
     --  Such functionality is needed by gdb on some targets (e.g VxWorks)
     --  Return True is the operation is successful
  
     function Resume_Task
!      (T           : ST.Task_Id;
!       Thread_Self : OSI.Thread_Id) return Boolean;
     --  Resume a specific task when the underlying thread library provides
     --  such functionality, unless the thread associated with T is Thread_Self.
     --  Such functionality is needed by gdb on some targets (e.g VxWorks)
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tarest.adb gcc-4.0.0/gcc/ada/s-tarest.adb
*** gcc-3.4.3/gcc/ada/s-tarest.adb	Tue Oct 21 13:42:15 2003
--- gcc-4.0.0/gcc/ada/s-tarest.adb	Mon Oct  4 14:51:17 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1999-2002, Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1999-2004, Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with System.Soft_Links;
*** 67,72 ****
--- 67,75 ----
  --  The GNARL must call these to be sure that all non-tasking
  --  Ada constructs will work.
  
+ with System.Soft_Links.Tasking;
+ --  Used for Init_Tasking_Soft_Links
+ 
  with System.Secondary_Stack;
  --  used for SS_Init;
  
*************** package body System.Tasking.Restricted.S
*** 105,136 ****
     --  all nested locks must be released before other tasks competing for the
     --  tasking lock are released.
  
!    --  See s-tasini.adb for more information on the following functions.
! 
!    function Get_Jmpbuf_Address return Address;
!    procedure Set_Jmpbuf_Address (Addr : Address);
! 
!    function Get_Sec_Stack_Addr return Address;
!    procedure Set_Sec_Stack_Addr (Addr : Address);
! 
!    function  Get_Machine_State_Addr return Address;
!    procedure Set_Machine_State_Addr (Addr : Address);
! 
!    function Get_Current_Excep return SSL.EOA;
! 
!    procedure Timed_Delay_T (Time : Duration; Mode : Integer);
! 
!    ------------------------
!    --  Local Subprograms --
!    ------------------------
  
!    procedure Task_Wrapper (Self_ID : Task_ID);
     --  This is the procedure that is called by the GNULL from the
     --  new context when a task is created. It waits for activation
     --  and then calls the task body procedure. When the task body
     --  procedure completes, it terminates the task.
  
!    procedure Terminate_Task (Self_ID : Task_ID);
     --  Terminate the calling task.
     --  This should only be called by the Task_Wrapper procedure.
  
--- 108,124 ----
     --  all nested locks must be released before other tasks competing for the
     --  tasking lock are released.
  
!    -----------------------
!    -- Local Subprograms --
!    -----------------------
  
!    procedure Task_Wrapper (Self_ID : Task_Id);
     --  This is the procedure that is called by the GNULL from the
     --  new context when a task is created. It waits for activation
     --  and then calls the task body procedure. When the task body
     --  procedure completes, it terminates the task.
  
!    procedure Terminate_Task (Self_ID : Task_Id);
     --  Terminate the calling task.
     --  This should only be called by the Task_Wrapper procedure.
  
*************** package body System.Tasking.Restricted.S
*** 158,202 ****
        STPO.Unlock (Global_Task_Lock'Access, Global_Lock => True);
     end Task_Unlock;
  
-    ----------------------
-    -- Soft-Link Bodies --
-    ----------------------
- 
-    function Get_Current_Excep return SSL.EOA is
-    begin
-       return STPO.Self.Common.Compiler_Data.Current_Excep'Access;
-    end Get_Current_Excep;
- 
-    function Get_Jmpbuf_Address return  Address is
-    begin
-       return STPO.Self.Common.Compiler_Data.Jmpbuf_Address;
-    end Get_Jmpbuf_Address;
- 
-    function Get_Machine_State_Addr return Address is
-    begin
-       return STPO.Self.Common.Compiler_Data.Machine_State_Addr;
-    end Get_Machine_State_Addr;
- 
-    function Get_Sec_Stack_Addr return  Address is
-    begin
-       return STPO.Self.Common.Compiler_Data.Sec_Stack_Addr;
-    end Get_Sec_Stack_Addr;
- 
-    procedure Set_Jmpbuf_Address (Addr : Address) is
-    begin
-       STPO.Self.Common.Compiler_Data.Jmpbuf_Address := Addr;
-    end Set_Jmpbuf_Address;
- 
-    procedure Set_Machine_State_Addr (Addr : Address) is
-    begin
-       STPO.Self.Common.Compiler_Data.Machine_State_Addr := Addr;
-    end Set_Machine_State_Addr;
- 
-    procedure Set_Sec_Stack_Addr (Addr : Address) is
-    begin
-       STPO.Self.Common.Compiler_Data.Sec_Stack_Addr := Addr;
-    end Set_Sec_Stack_Addr;
- 
     ------------------
     -- Task_Wrapper --
     ------------------
--- 146,151 ----
*************** package body System.Tasking.Restricted.S
*** 210,217 ****
     --  of the current thread, since it should be at a fixed offset from the
     --  stack base.
  
!    procedure Task_Wrapper (Self_ID : Task_ID) is
!       ID : Task_ID := Self_ID;
        pragma Volatile (ID);
  
        pragma Warnings (Off, ID);
--- 159,166 ----
     --  of the current thread, since it should be at a fixed offset from the
     --  stack base.
  
!    procedure Task_Wrapper (Self_ID : Task_Id) is
!       ID : Task_Id := Self_ID;
        pragma Volatile (ID);
  
        pragma Warnings (Off, ID);
*************** package body System.Tasking.Restricted.S
*** 262,276 ****
        end;
     end Task_Wrapper;
  
-    -------------------
-    -- Timed_Delay_T --
-    -------------------
- 
-    procedure Timed_Delay_T (Time : Duration; Mode : Integer) is
-    begin
-       STPO.Timed_Delay (STPO.Self, Time, Mode);
-    end Timed_Delay_T;
- 
     -----------------------
     -- Restricted GNARLI --
     -----------------------
--- 211,216 ----
*************** package body System.Tasking.Restricted.S
*** 288,295 ****
     procedure Activate_Restricted_Tasks
       (Chain_Access : Activation_Chain_Access)
     is
!       Self_ID       : constant Task_ID := STPO.Self;
!       C             : Task_ID;
        Activate_Prio : System.Any_Priority;
        Success       : Boolean;
  
--- 228,235 ----
     procedure Activate_Restricted_Tasks
       (Chain_Access : Activation_Chain_Access)
     is
!       Self_ID       : constant Task_Id := STPO.Self;
!       C             : Task_Id;
        Activate_Prio : System.Any_Priority;
        Success       : Boolean;
  
*************** package body System.Tasking.Restricted.S
*** 377,384 ****
     --  activator.
  
     procedure Complete_Restricted_Activation is
!       Self_ID   : constant Task_ID := STPO.Self;
!       Activator : constant Task_ID := Self_ID.Common.Activator;
  
     begin
        if Single_Lock then
--- 317,324 ----
     --  activator.
  
     procedure Complete_Restricted_Activation is
!       Self_ID   : constant Task_Id := STPO.Self;
!       Activator : constant Task_Id := Self_ID.Common.Activator;
  
     begin
        if Single_Lock then
*************** package body System.Tasking.Restricted.S
*** 436,441 ****
--- 376,382 ----
  
     procedure Create_Restricted_Task
       (Priority      : Integer;
+       Stack_Address : System.Address;
        Size          : System.Parameters.Size_Type;
        Task_Info     : System.Task_Info.Task_Info_Type;
        State         : Task_Procedure_Access;
*************** package body System.Tasking.Restricted.S
*** 443,464 ****
        Elaborated    : Access_Boolean;
        Chain         : in out Activation_Chain;
        Task_Image    : String;
!       Created_Task  : out Task_ID)
     is
!       T             : Task_ID;
!       Self_ID       : constant Task_ID := STPO.Self;
        Base_Priority : System.Any_Priority;
        Success       : Boolean;
  
     begin
        if Priority = Unspecified_Priority then
           Base_Priority := Self_ID.Common.Base_Priority;
        else
           Base_Priority := System.Any_Priority (Priority);
        end if;
  
-       T := New_ATCB (0);
- 
        if Single_Lock then
           Lock_RTS;
        end if;
--- 384,407 ----
        Elaborated    : Access_Boolean;
        Chain         : in out Activation_Chain;
        Task_Image    : String;
!       Created_Task  : Task_Id)
     is
!       Self_ID       : constant Task_Id := STPO.Self;
        Base_Priority : System.Any_Priority;
        Success       : Boolean;
  
     begin
+       --  Stack is not preallocated on this target, so that
+       --  Stack_Address must be null.
+ 
+       pragma Assert (Stack_Address = Null_Address);
+ 
        if Priority = Unspecified_Priority then
           Base_Priority := Self_ID.Common.Base_Priority;
        else
           Base_Priority := System.Any_Priority (Priority);
        end if;
  
        if Single_Lock then
           Lock_RTS;
        end if;
*************** package body System.Tasking.Restricted.S
*** 470,476 ****
  
        Initialize_ATCB
          (Self_ID, State, Discriminants, Self_ID, Elaborated, Base_Priority,
!          Task_Info, Size, T, Success);
  
        --  If we do our job right then there should never be any failures,
        --  which was probably said about the Titanic; so just to be safe,
--- 413,419 ----
  
        Initialize_ATCB
          (Self_ID, State, Discriminants, Self_ID, Elaborated, Base_Priority,
!          Task_Info, Size, Created_Task, Success);
  
        --  If we do our job right then there should never be any failures,
        --  which was probably said about the Titanic; so just to be safe,
*************** package body System.Tasking.Restricted.S
*** 486,496 ****
           raise Program_Error;
        end if;
  
!       T.Entry_Calls (1).Self := T;
  
!       T.Common.Task_Image_Len :=
!         Integer'Min (T.Common.Task_Image'Length, Task_Image'Length);
!       T.Common.Task_Image (1 .. T.Common.Task_Image_Len) := Task_Image;
  
        Unlock (Self_ID);
  
--- 429,440 ----
           raise Program_Error;
        end if;
  
!       Created_Task.Entry_Calls (1).Self := Created_Task;
  
!       Created_Task.Common.Task_Image_Len :=
!         Integer'Min (Created_Task.Common.Task_Image'Length, Task_Image'Length);
!       Created_Task.Common.Task_Image
!         (1 .. Created_Task.Common.Task_Image_Len) := Task_Image;
  
        Unlock (Self_ID);
  
*************** package body System.Tasking.Restricted.S
*** 501,510 ****
        --  Create TSD as early as possible in the creation of a task, since it
        --  may be used by the operation of Ada code within the task.
  
!       SSL.Create_TSD (T.Common.Compiler_Data);
!       T.Common.Activation_Link := Chain.T_ID;
!       Chain.T_ID   := T;
!       Created_Task := T;
     end Create_Restricted_Task;
  
     ---------------------------
--- 445,453 ----
        --  Create TSD as early as possible in the creation of a task, since it
        --  may be used by the operation of Ada code within the task.
  
!       SSL.Create_TSD (Created_Task.Common.Compiler_Data);
!       Created_Task.Common.Activation_Link := Chain.T_ID;
!       Chain.T_ID := Created_Task;
     end Create_Restricted_Task;
  
     ---------------------------
*************** package body System.Tasking.Restricted.S
*** 516,522 ****
     --  forever, since none of the dependent tasks are expected to terminate
  
     procedure Finalize_Global_Tasks is
!       Self_ID : constant Task_ID := STPO.Self;
  
     begin
        pragma Assert (Self_ID = STPO.Environment_Task);
--- 459,465 ----
     --  forever, since none of the dependent tasks are expected to terminate
  
     procedure Finalize_Global_Tasks is
!       Self_ID : constant Task_Id := STPO.Self;
  
     begin
        pragma Assert (Self_ID = STPO.Environment_Task);
*************** package body System.Tasking.Restricted.S
*** 542,548 ****
     -- Restricted_Terminated --
     ---------------------------
  
!    function Restricted_Terminated (T : Task_ID) return Boolean is
     begin
        return T.Common.State = Terminated;
     end Restricted_Terminated;
--- 485,491 ----
     -- Restricted_Terminated --
     ---------------------------
  
!    function Restricted_Terminated (T : Task_Id) return Boolean is
     begin
        return T.Common.State = Terminated;
     end Restricted_Terminated;
*************** package body System.Tasking.Restricted.S
*** 551,557 ****
     -- Terminate_Task --
     --------------------
  
!    procedure Terminate_Task (Self_ID : Task_ID) is
     begin
        Self_ID.Common.State := Terminated;
     end Terminate_Task;
--- 494,500 ----
     -- Terminate_Task --
     --------------------
  
!    procedure Terminate_Task (Self_ID : Task_Id) is
     begin
        Self_ID.Common.State := Terminated;
     end Terminate_Task;
*************** package body System.Tasking.Restricted.S
*** 569,595 ****
        --  Notify that the tasking run time has been elaborated so that
        --  the tasking version of the soft links can be used.
  
!       SSL.Lock_Task              := Task_Lock'Access;
!       SSL.Unlock_Task            := Task_Unlock'Access;
! 
!       SSL.Get_Jmpbuf_Address     := Get_Jmpbuf_Address'Access;
!       SSL.Set_Jmpbuf_Address     := Set_Jmpbuf_Address'Access;
!       SSL.Get_Machine_State_Addr := Get_Machine_State_Addr'Access;
!       SSL.Set_Machine_State_Addr := Set_Machine_State_Addr'Access;
!       SSL.Get_Current_Excep      := Get_Current_Excep'Access;
!       SSL.Set_Jmpbuf_Address     (SSL.Get_Jmpbuf_Address_NT);
!       SSL.Set_Machine_State_Addr (SSL.Get_Machine_State_Addr_NT);
! 
!       SSL.Get_Sec_Stack_Addr     := Get_Sec_Stack_Addr'Access;
!       SSL.Set_Sec_Stack_Addr     := Set_Sec_Stack_Addr'Access;
! 
!       --  No need to create a new Secondary Stack, since we will use the
!       --  default one created in s-secsta.adb
  
!       Set_Sec_Stack_Addr (SSL.Get_Sec_Stack_Addr_NT);
  
!       SSL.Timed_Delay            := Timed_Delay_T'Access;
!       SSL.Adafinal               := Finalize_Global_Tasks'Access;
     end Init_RTS;
  
  begin
--- 512,525 ----
        --  Notify that the tasking run time has been elaborated so that
        --  the tasking version of the soft links can be used.
  
!       SSL.Lock_Task   := Task_Lock'Access;
!       SSL.Unlock_Task := Task_Unlock'Access;
!       SSL.Adafinal    := Finalize_Global_Tasks'Access;
  
!       --  Initialize the tasking soft links (if not done yet) that are common
!       --  to the full and the restricted run times.
  
!       SSL.Tasking.Init_Tasking_Soft_Links;
     end Init_RTS;
  
  begin
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tarest.ads gcc-4.0.0/gcc/ada/s-tarest.ads
*** gcc-3.4.3/gcc/ada/s-tarest.ads	Tue Oct 21 13:42:15 2003
--- gcc-4.0.0/gcc/ada/s-tarest.ads	Mon Oct  4 14:51:17 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2003, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package System.Tasking.Restricted.Stages
*** 75,83 ****
--- 75,86 ----
     --   task type t (discr : integer);
     --   tE : aliased boolean := false;
     --   tZ : size_type := unspecified_size;
+ 
     --   type tV (discr : integer) is limited record
     --      _task_id : task_id;
+    --      _atcb : aliased system__tasking__ada_task_control_block (0);
     --   end record;
+ 
     --   procedure tB (_task : access tV);
     --   freeze tV [
     --      procedure tVIP (_init : in out tV; _master : master_id;
*************** package System.Tasking.Restricted.Stages
*** 86,111 ****
     --      begin
     --         _init.discr := discr;
     --         _init._task_id := null;
     --         create_restricted_task (unspecified_priority, tZ,
     --           unspecified_task_info, task_procedure_access!(tB'address),
     --           _init'address, tE'unchecked_access, _chain, _task_name, _init.
     --           _task_id);
     --         return;
     --      end tVIP;
-    --   ]
  
     --   _chain : aliased activation_chain;
     --   activation_chainIP (_chain);
  
     --   procedure tB (_task : access tV) is
     --      discr : integer renames _task.discr;
!    --
     --      procedure _clean is
     --      begin
     --         complete_restricted_task;
     --         finalize_list (F14b);
     --         return;
     --      end _clean;
     --   begin
     --      ...declarations...
     --      complete_restricted_activation;
--- 89,116 ----
     --      begin
     --         _init.discr := discr;
     --         _init._task_id := null;
+    --         system__tasking__ada_task_control_blockIP (_init._atcb, 0);
+    --         _init._task_id := _init._atcb'unchecked_access;
     --         create_restricted_task (unspecified_priority, tZ,
     --           unspecified_task_info, task_procedure_access!(tB'address),
     --           _init'address, tE'unchecked_access, _chain, _task_name, _init.
     --           _task_id);
     --         return;
     --      end tVIP;
  
     --   _chain : aliased activation_chain;
     --   activation_chainIP (_chain);
  
     --   procedure tB (_task : access tV) is
     --      discr : integer renames _task.discr;
! 
     --      procedure _clean is
     --      begin
     --         complete_restricted_task;
     --         finalize_list (F14b);
     --         return;
     --      end _clean;
+ 
     --   begin
     --      ...declarations...
     --      complete_restricted_activation;
*************** package System.Tasking.Restricted.Stages
*** 124,129 ****
--- 129,135 ----
  
     procedure Create_Restricted_Task
       (Priority      : Integer;
+       Stack_Address : System.Address;
        Size          : System.Parameters.Size_Type;
        Task_Info     : System.Task_Info.Task_Info_Type;
        State         : Task_Procedure_Access;
*************** package System.Tasking.Restricted.Stages
*** 131,161 ****
        Elaborated    : Access_Boolean;
        Chain         : in out Activation_Chain;
        Task_Image    : String;
!       Created_Task  : out Task_ID);
     --  Compiler interface only. Do not call from within the RTS.
     --  This must be called to create a new task.
     --
     --  Priority is the task's priority (assumed to be in the
!    --   System.Any_Priority'Range)
     --  Size is the stack size of the task to create
     --  Task_Info is the task info associated with the created task, or
!    --   Unspecified_Task_Info if none.
     --  State is the compiler generated task's procedure body
     --  Discriminants is a pointer to a limited record whose discriminants
!    --   are those of the task to create. This parameter should be passed as
!    --   the single argument to State.
     --  Elaborated is a pointer to a Boolean that must be set to true on exit
!    --   if the task could be sucessfully elaborated.
     --  Chain is a linked list of task that needs to be created. On exit,
!    --   Created_Task.Activation_Link will be Chain.T_ID, and Chain.T_ID
!    --   will be Created_Task (e.g the created task will be linked at the front
!    --   of Chain).
     --  Task_Image is a string created by the compiler that the
!    --   run time can store to ease the debugging and the
!    --   Ada.Task_Identification facility.
     --  Created_Task is the resulting task.
     --
!    --  This procedure can raise Storage_Error if the task creation failed.
  
     procedure Activate_Restricted_Tasks
       (Chain_Access : Activation_Chain_Access);
--- 137,180 ----
        Elaborated    : Access_Boolean;
        Chain         : in out Activation_Chain;
        Task_Image    : String;
!       Created_Task  : Task_Id);
     --  Compiler interface only. Do not call from within the RTS.
     --  This must be called to create a new task.
     --
     --  Priority is the task's priority (assumed to be in the
!    --  System.Any_Priority'Range)
!    --
!    --  Stack_Address is the start address of the stack associated to the
!    --  task, in case it has been preallocated by the compiler; it is equal
!    --  to Null_Address when the stack needs to be allocated by the
!    --  underlying operating system.
!    --
     --  Size is the stack size of the task to create
+    --
     --  Task_Info is the task info associated with the created task, or
!    --  Unspecified_Task_Info if none.
!    --
     --  State is the compiler generated task's procedure body
+    --
     --  Discriminants is a pointer to a limited record whose discriminants
!    --  are those of the task to create. This parameter should be passed as
!    --  the single argument to State.
!    --
     --  Elaborated is a pointer to a Boolean that must be set to true on exit
!    --  if the task could be sucessfully elaborated.
!    --
     --  Chain is a linked list of task that needs to be created. On exit,
!    --  Created_Task.Activation_Link will be Chain.T_ID, and Chain.T_ID
!    --  will be Created_Task (e.g the created task will be linked at the front
!    --  of Chain).
!    --
     --  Task_Image is a string created by the compiler that the
!    --  run time can store to ease the debugging and the
!    --  Ada.Task_Identification facility.
!    --
     --  Created_Task is the resulting task.
     --
!    --  This procedure can raise Storage_Error if the task creation fails
  
     procedure Activate_Restricted_Tasks
       (Chain_Access : Activation_Chain_Access);
*************** package System.Tasking.Restricted.Stages
*** 189,195 ****
     --  If the current task have not completed activation, this should be done
     --  now in order to wake up the activator (the environment task).
  
!    function Restricted_Terminated (T : Task_ID) return Boolean;
     --  Compiler interface only. Do not call from within the RTS.
     --  This is called by the compiler to implement the 'Terminated attribute.
     --
--- 208,214 ----
     --  If the current task have not completed activation, this should be done
     --  now in order to wake up the activator (the environment task).
  
!    function Restricted_Terminated (T : Task_Id) return Boolean;
     --  Compiler interface only. Do not call from within the RTS.
     --  This is called by the compiler to implement the 'Terminated attribute.
     --
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tasdeb.adb gcc-4.0.0/gcc/ada/s-tasdeb.adb
*** gcc-3.4.3/gcc/ada/s-tasdeb.adb	Mon Jan  5 15:20:47 2004
--- gcc-4.0.0/gcc/ada/s-tasdeb.adb	Mon May 17 13:20:44 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1997-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1997-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body System.Tasking.Debug is
*** 48,54 ****
     package STPO renames System.Task_Primitives.Operations;
  
     function To_Integer is new
!      Unchecked_Conversion (Task_ID, System.Address);
  
     type Trace_Flag_Set is array (Character) of Boolean;
  
--- 48,54 ----
     package STPO renames System.Task_Primitives.Operations;
  
     function To_Integer is new
!      Unchecked_Conversion (Task_Id, System.Address);
  
     type Trace_Flag_Set is array (Character) of Boolean;
  
*************** package body System.Tasking.Debug is
*** 80,86 ****
     ----------------
  
     procedure List_Tasks is
!       C : Task_ID;
     begin
        C := All_Tasks_List;
  
--- 80,86 ----
     ----------------
  
     procedure List_Tasks is
!       C : Task_Id;
     begin
        C := All_Tasks_List;
  
*************** package body System.Tasking.Debug is
*** 103,111 ****
     -- Print_Task_Info --
     ---------------------
  
!    procedure Print_Task_Info (T : Task_ID) is
        Entry_Call : Entry_Call_Link;
!       Parent     : Task_ID;
  
     begin
        if T = null then
--- 103,111 ----
     -- Print_Task_Info --
     ---------------------
  
!    procedure Print_Task_Info (T : Task_Id) is
        Entry_Call : Entry_Call_Link;
!       Parent     : Task_Id;
  
     begin
        if T = null then
*************** package body System.Tasking.Debug is
*** 191,197 ****
     ----------------------
  
     procedure Resume_All_Tasks (Thread_Self : OS_Interface.Thread_Id) is
!       C     : Task_ID;
        Dummy : Boolean;
        pragma Unreferenced (Dummy);
  
--- 191,197 ----
     ----------------------
  
     procedure Resume_All_Tasks (Thread_Self : OS_Interface.Thread_Id) is
!       C     : Task_Id;
        Dummy : Boolean;
        pragma Unreferenced (Dummy);
  
*************** package body System.Tasking.Debug is
*** 230,236 ****
     -----------------------
  
     procedure Suspend_All_Tasks (Thread_Self : OS_Interface.Thread_Id) is
!       C     : Task_ID;
        Dummy : Boolean;
        pragma Unreferenced (Dummy);
  
--- 230,236 ----
     -----------------------
  
     procedure Suspend_All_Tasks (Thread_Self : OS_Interface.Thread_Id) is
!       C     : Task_Id;
        Dummy : Boolean;
        pragma Unreferenced (Dummy);
  
*************** package body System.Tasking.Debug is
*** 273,282 ****
     -----------
  
     procedure Trace
!      (Self_Id  : Task_ID;
        Msg      : String;
        Flag     : Character;
!       Other_Id : Task_ID := null)
     is
     begin
        if Trace_On (Flag) then
--- 273,282 ----
     -----------
  
     procedure Trace
!      (Self_Id  : Task_Id;
        Msg      : String;
        Flag     : Character;
!       Other_Id : Task_Id := null)
     is
     begin
        if Trace_On (Flag) then
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tasdeb.ads gcc-4.0.0/gcc/ada/s-tasdeb.ads
*** gcc-3.4.3/gcc/ada/s-tasdeb.ads	Tue Oct 21 13:42:15 2003
--- gcc-4.0.0/gcc/ada/s-tasdeb.ads	Mon May 17 13:20:44 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1997-2002, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1997-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package System.Tasking.Debug is
*** 51,57 ****
     --  Write information about current task, in hexadecimal, as one line, to
     --  the standard error file.
  
!    procedure Print_Task_Info (T : Task_ID);
     --  Similar to Print_Current_Task, for a given task.
  
     procedure Set_User_State (Value : Long_Integer);
--- 51,57 ----
     --  Write information about current task, in hexadecimal, as one line, to
     --  the standard error file.
  
!    procedure Print_Task_Info (T : Task_Id);
     --  Similar to Print_Current_Task, for a given task.
  
     procedure Set_User_State (Value : Long_Integer);
*************** package System.Tasking.Debug is
*** 66,72 ****
     -- General GDB support --
     -------------------------
  
!    Known_Tasks : array (0 .. 999) of Task_ID;
     --  Global array of tasks read by gdb, and updated by
     --  Create_Task and Finalize_TCB
  
--- 66,72 ----
     -- General GDB support --
     -------------------------
  
!    Known_Tasks : array (0 .. 999) of Task_Id;
     --  Global array of tasks read by gdb, and updated by
     --  Create_Task and Finalize_TCB
  
*************** package System.Tasking.Debug is
*** 99,108 ****
     -------------------------------
  
     procedure Trace
!      (Self_Id  : Task_ID;
        Msg      : String;
        Flag     : Character;
!       Other_Id : Task_ID := null);
     --  If traces for Flag are enabled, display on Standard_Error a given
     --  message for the current task. Other_Id is an optional second task id
     --  to display.
--- 99,108 ----
     -------------------------------
  
     procedure Trace
!      (Self_Id  : Task_Id;
        Msg      : String;
        Flag     : Character;
!       Other_Id : Task_Id := null);
     --  If traces for Flag are enabled, display on Standard_Error a given
     --  message for the current task. Other_Id is an optional second task id
     --  to display.
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tasinf-irix-athread.adb gcc-4.0.0/gcc/ada/s-tasinf-irix-athread.adb
*** gcc-3.4.3/gcc/ada/s-tasinf-irix-athread.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-tasinf-irix-athread.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,312 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                     S Y S T E M . T A S K _ I N F O                      --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package body contains the routines associated with the implementation
+ --  of the Task_Info pragma.
+ 
+ --  This is the SGI specific version of this module.
+ 
+ with Interfaces.C;
+ with System.OS_Interface;
+ with System;
+ with Unchecked_Conversion;
+ 
+ package body System.Task_Info is
+ 
+    use System.OS_Interface;
+    use type Interfaces.C.int;
+ 
+    function To_Resource_T is new
+      Unchecked_Conversion (Resource_Vector_T, resource_t);
+ 
+    MP_NPROCS : constant := 1;
+ 
+    function Sysmp (Cmd : Integer) return Integer;
+    pragma Import (C, Sysmp);
+ 
+    function Num_Processors (Cmd : Integer := MP_NPROCS) return Integer
+      renames Sysmp;
+ 
+    function Geteuid return Integer;
+    pragma Import (C, Geteuid);
+ 
+    Locking_Map : constant array (Page_Locking) of Interfaces.C.int :=
+      (NOLOCK   => 0,
+       PROCLOCK => 1,
+       TXTLOCK  => 2,
+       DATLOCK  => 4);
+ 
+    -------------------------------
+    -- Resource_Vector_Functions --
+    -------------------------------
+ 
+    package body Resource_Vector_Functions is
+ 
+       ---------
+       -- "+" --
+       ---------
+ 
+       function "+" (R : Resource_T) return Resource_Vector_T is
+          Result : Resource_Vector_T  := NO_RESOURCES;
+       begin
+          Result (Resource_T'Pos (R)) := True;
+          return Result;
+       end "+";
+ 
+       function "+" (R1, R2 : Resource_T) return Resource_Vector_T is
+          Result : Resource_Vector_T  := NO_RESOURCES;
+       begin
+          Result (Resource_T'Pos (R1)) := True;
+          Result (Resource_T'Pos (R2)) := True;
+          return Result;
+       end "+";
+ 
+       function "+"
+         (R : Resource_T;
+          S : Resource_Vector_T) return Resource_Vector_T
+       is
+          Result : Resource_Vector_T := S;
+       begin
+          Result (Resource_T'Pos (R)) := True;
+          return Result;
+       end "+";
+ 
+       function "+"
+         (S : Resource_Vector_T;
+          R : Resource_T) return Resource_Vector_T
+       is
+          Result : Resource_Vector_T :=  S;
+       begin
+          Result (Resource_T'Pos (R)) := True;
+          return Result;
+       end "+";
+ 
+       function "+" (S1, S2 : Resource_Vector_T) return Resource_Vector_T is
+          Result : Resource_Vector_T;
+       begin
+          Result :=  S1 or S2;
+          return Result;
+       end "+";
+ 
+       function "-"
+         (S : Resource_Vector_T;
+          R : Resource_T) return Resource_Vector_T
+       is
+          Result : Resource_Vector_T := S;
+       begin
+          Result (Resource_T'Pos (R)) := False;
+          return Result;
+       end "-";
+ 
+    end Resource_Vector_Functions;
+ 
+    ---------------
+    -- New_Sproc --
+    ---------------
+ 
+    function New_Sproc (Attr : Sproc_Attributes) return sproc_t is
+       Sproc_Attr : aliased sproc_attr_t;
+       Sproc      : aliased sproc_t;
+       Status     : int;
+ 
+    begin
+       Status := sproc_attr_init (Sproc_Attr'Unrestricted_Access);
+ 
+       if Status = 0 then
+          Status := sproc_attr_setresources
+            (Sproc_Attr'Unrestricted_Access,
+             To_Resource_T (Attr.Sproc_Resources));
+ 
+          if Attr.CPU /= ANY_CPU then
+             if Attr.CPU > Num_Processors then
+                raise Invalid_CPU_Number;
+             end if;
+ 
+             Status := sproc_attr_setcpu
+               (Sproc_Attr'Unrestricted_Access,
+                int (Attr.CPU));
+          end if;
+ 
+          if Attr.Resident /= NOLOCK then
+             if Geteuid /= 0 then
+                raise Permission_Error;
+             end if;
+ 
+             Status := sproc_attr_setresident
+               (Sproc_Attr'Unrestricted_Access,
+                 Locking_Map (Attr.Resident));
+          end if;
+ 
+          if Attr.NDPRI /= NDP_NONE then
+ 
+ --  ??? why is this commented out, should it be removed ?
+ --          if Geteuid /= 0 then
+ --             raise Permission_Error;
+ --          end if;
+ 
+             Status :=
+               sproc_attr_setprio
+                 (Sproc_Attr'Unrestricted_Access, int (Attr.NDPRI));
+          end if;
+ 
+          Status :=
+            sproc_create
+              (Sproc'Unrestricted_Access,
+               Sproc_Attr'Unrestricted_Access,
+               null,
+               System.Null_Address);
+ 
+          if Status /= 0 then
+             Status := sproc_attr_destroy (Sproc_Attr'Unrestricted_Access);
+             raise Sproc_Create_Error;
+          end if;
+ 
+          Status := sproc_attr_destroy (Sproc_Attr'Unrestricted_Access);
+       end if;
+ 
+       if Status /= 0 then
+          raise Sproc_Create_Error;
+       end if;
+ 
+       return Sproc;
+    end New_Sproc;
+ 
+    ---------------
+    -- New_Sproc --
+    ---------------
+ 
+    function New_Sproc
+      (Sproc_Resources : Resource_Vector_T      := NO_RESOURCES;
+       CPU             : CPU_Number             := ANY_CPU;
+       Resident        : Page_Locking           := NOLOCK;
+       NDPRI           : Non_Degrading_Priority := NDP_NONE) return sproc_t
+    is
+       Attr : constant Sproc_Attributes :=
+                (Sproc_Resources, CPU, Resident, NDPRI);
+    begin
+       return New_Sproc (Attr);
+    end New_Sproc;
+ 
+    -------------------------------
+    -- Unbound_Thread_Attributes --
+    -------------------------------
+ 
+    function Unbound_Thread_Attributes
+      (Thread_Resources : Resource_Vector_T := NO_RESOURCES;
+       Thread_Timeslice : Duration          := 0.0) return Thread_Attributes
+    is
+    begin
+       return (False, Thread_Resources, Thread_Timeslice);
+    end Unbound_Thread_Attributes;
+ 
+    -----------------------------
+    -- Bound_Thread_Attributes --
+    -----------------------------
+ 
+    function Bound_Thread_Attributes
+      (Thread_Resources : Resource_Vector_T := NO_RESOURCES;
+       Thread_Timeslice : Duration          := 0.0;
+       Sproc            : sproc_t)
+       return             Thread_Attributes
+    is
+    begin
+       return (True, Thread_Resources, Thread_Timeslice, Sproc);
+    end Bound_Thread_Attributes;
+ 
+    -----------------------------
+    -- Bound_Thread_Attributes --
+    -----------------------------
+ 
+    function Bound_Thread_Attributes
+      (Thread_Resources : Resource_Vector_T      := NO_RESOURCES;
+       Thread_Timeslice : Duration               := 0.0;
+       Sproc_Resources  : Resource_Vector_T      := NO_RESOURCES;
+       CPU              : CPU_Number             := ANY_CPU;
+       Resident         : Page_Locking           := NOLOCK;
+       NDPRI            : Non_Degrading_Priority := NDP_NONE)
+       return Thread_Attributes
+    is
+       Sproc : constant sproc_t := New_Sproc
+                 (Sproc_Resources, CPU, Resident, NDPRI);
+    begin
+       return (True, Thread_Resources, Thread_Timeslice, Sproc);
+    end Bound_Thread_Attributes;
+ 
+    -----------------------------------
+    -- New_Unbound_Thread_Attributes --
+    -----------------------------------
+ 
+    function New_Unbound_Thread_Attributes
+      (Thread_Resources : Resource_Vector_T := NO_RESOURCES;
+       Thread_Timeslice : Duration          := 0.0) return Task_Info_Type
+    is
+    begin
+       return new Thread_Attributes'
+         (False, Thread_Resources, Thread_Timeslice);
+    end New_Unbound_Thread_Attributes;
+ 
+    ---------------------------------
+    -- New_Bound_Thread_Attributes --
+    ---------------------------------
+ 
+    function New_Bound_Thread_Attributes
+      (Thread_Resources : Resource_Vector_T := NO_RESOURCES;
+       Thread_Timeslice : Duration          := 0.0;
+       Sproc            : sproc_t) return Task_Info_Type
+    is
+    begin
+       return new Thread_Attributes'
+         (True, Thread_Resources, Thread_Timeslice, Sproc);
+    end  New_Bound_Thread_Attributes;
+ 
+    ---------------------------------
+    -- New_Bound_Thread_Attributes --
+    ---------------------------------
+ 
+    function New_Bound_Thread_Attributes
+      (Thread_Resources : Resource_Vector_T      := NO_RESOURCES;
+       Thread_Timeslice : Duration               := 0.0;
+       Sproc_Resources  : Resource_Vector_T      := NO_RESOURCES;
+       CPU              : CPU_Number             := ANY_CPU;
+       Resident         : Page_Locking           := NOLOCK;
+       NDPRI            : Non_Degrading_Priority := NDP_NONE)
+       return Task_Info_Type
+    is
+       Sproc : constant sproc_t := New_Sproc
+                 (Sproc_Resources, CPU, Resident, NDPRI);
+    begin
+       return new Thread_Attributes'
+         (True, Thread_Resources, Thread_Timeslice, Sproc);
+    end  New_Bound_Thread_Attributes;
+ 
+ end System.Task_Info;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tasinf-irix-athread.ads gcc-4.0.0/gcc/ada/s-tasinf-irix-athread.ads
*** gcc-3.4.3/gcc/ada/s-tasinf-irix-athread.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-tasinf-irix-athread.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,274 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                     S Y S T E M . T A S K _ I N F O                      --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package contains the definitions and routines associated with the
+ --  implementation and use of the Task_Info pragma. It is specialized
+ --  appropriately for targets that make use of this pragma.
+ 
+ --  Note: the compiler generates direct calls to this interface, via Rtsfind.
+ --  Any changes to this interface may require corresponding compiler changes.
+ 
+ --  This unit may be used directly from an application program by providing
+ --  an appropriate WITH, and the interface can be expected to remain stable.
+ 
+ --  This is the SGI (libathread) specific version of this module.
+ 
+ with System.OS_Interface;
+ 
+ package System.Task_Info is
+    pragma Elaborate_Body;
+    --  To ensure that a body is allowed
+ 
+    ---------------------------------------------------------
+    -- Binding of Tasks to sprocs and sprocs to processors --
+    ---------------------------------------------------------
+ 
+    --  The SGI implementation of the GNU Low-Level Interface (GNULLI)
+    --  implements each Ada task as a Posix thread (Pthread). The SGI
+    --  Pthread library distributes threads across one or more processes
+    --  that are members of a common share group. Irix distributes
+    --  processes across the available CPUs on a given machine. The
+    --  pragma Task_Info provides the mechanism to control the distribution
+    --  of tasks to sprocs, and sprocs to processors.
+ 
+    --  Each thread has a number of attributes that dictate it's scheduling.
+    --  These attributes are:
+ 
+    --      Bound_To_Sproc:  whether the thread is bound to a specific sproc
+    --                       for its entire lifetime.
+ 
+    --      Timeslice:       Amount of time that a thread is allowed to execute
+    --                       before the system yeilds control to another thread
+    --                       of equal priority.
+ 
+    --      Resource_Vector: A bitmask used to control the binding of threads
+    --                       to sprocs.
+    --
+ 
+    --  Each share group process (sproc)
+ 
+    --  The Task_Info pragma:
+ 
+    --    pragma Task_Info (EXPRESSION);
+ 
+    --  allows the specification on a task by task basis of a value of type
+    --  System.Task_Info.Task_Info_Type to be passed to a task when it is
+    --  created. The specification of this type, and the effect on the task
+    --  that is created is target dependent.
+ 
+    --  The Task_Info pragma appears within a task definition (compare the
+    --  definition and implementation of pragma Priority). If no such pragma
+    --  appears, then the value Task_Info_Unspecified is passed. If a pragma
+    --  is present, then it supplies an alternative value. If the argument of
+    --  the pragma is a discriminant reference, then the value can be set on
+    --  a task by task basis by supplying the appropriate discriminant value.
+ 
+    --  Note that this means that the type used for Task_Info_Type must be
+    --  suitable for use as a discriminant (i.e. a scalar or access type).
+ 
+    ----------------------
+    -- Resource Vectors --
+    ----------------------
+ 
+    --  <discussion>
+ 
+    type Resource_Vector_T is array (0 .. 31) of Boolean;
+    pragma Pack (Resource_Vector_T);
+ 
+    NO_RESOURCES : constant Resource_Vector_T := (others => False);
+ 
+    generic
+       type Resource_T is (<>);
+       --  Discrete type up to 32 entries
+ 
+    package Resource_Vector_Functions is
+       function "+"
+         (R : Resource_T) return Resource_Vector_T;
+ 
+       function "+"
+         (R1 : Resource_T;
+          R2 : Resource_T) return Resource_Vector_T;
+ 
+       function "+"
+         (R : Resource_T;
+          S : Resource_Vector_T) return Resource_Vector_T;
+ 
+       function "+"
+         (S : Resource_Vector_T;
+          R : Resource_T) return Resource_Vector_T;
+ 
+       function "+"
+         (S1 : Resource_Vector_T;
+          S2 : Resource_Vector_T) return Resource_Vector_T;
+ 
+       function "-"
+         (S : Resource_Vector_T;
+          R : Resource_T) return Resource_Vector_T;
+    end Resource_Vector_Functions;
+ 
+    ----------------------
+    -- Sproc Attributes --
+    ----------------------
+ 
+    subtype sproc_t is System.OS_Interface.sproc_t;
+ 
+    subtype CPU_Number is Integer range -1 .. Integer'Last;
+ 
+    ANY_CPU : constant CPU_Number := CPU_Number'First;
+ 
+    type Non_Degrading_Priority is range 0 .. 255;
+    --  Specification of IRIX Non Degrading Priorities.
+    --
+    --  WARNING: IRIX priorities have the reverse meaning of Ada priorities.
+    --           The lower the priority value, the greater the greater the
+    --           scheduling preference.
+    --
+    --  See the schedctl(2) man page for a complete discussion of non-degrading
+    --  priorities.
+ 
+    NDPHIMAX : constant Non_Degrading_Priority := 30;
+    NDPHIMIN : constant Non_Degrading_Priority := 39;
+    --  These priorities are higher than ALL normal user process priorities
+ 
+    subtype NDP_High is Non_Degrading_Priority range NDPHIMAX .. NDPHIMIN;
+ 
+    NDPNORMMAX : constant Non_Degrading_Priority := 40;
+    NDPNORMMIN : constant Non_Degrading_Priority := 127;
+    --  These priorities overlap normal user process priorities
+ 
+    subtype NDP_Norm is Non_Degrading_Priority range NDPNORMMAX .. NDPNORMMIN;
+ 
+    NDPLOMAX : constant Non_Degrading_Priority := 128;
+    NDPLOMIN : constant Non_Degrading_Priority := 254;
+    --  These priorities are below ALL normal user process priorities
+ 
+    NDP_NONE   : constant Non_Degrading_Priority := 255;
+ 
+    subtype NDP_LOW is Non_Degrading_Priority range NDPLOMAX .. NDPLOMIN;
+ 
+    type Page_Locking is
+       (NOLOCK,     --  Do not lock pages in memory
+        PROCLOCK,   --  Lock text and data segments into memory (process lock)
+        TXTLOCK,    --  Lock text segment into memory (text lock)
+        DATLOCK     --  Lock data segment into memory (data lock)
+       );
+ 
+    type Sproc_Attributes is record
+       Sproc_Resources : Resource_Vector_T      := NO_RESOURCES;
+       CPU             : CPU_Number             := ANY_CPU;
+       Resident        : Page_Locking           := NOLOCK;
+       NDPRI           : Non_Degrading_Priority := NDP_NONE;
+ --  ??? why is that commented out, should it be removed ?
+ --       Sproc_Slice     : Duration               := 0.0;
+ --       Deadline_Period : Duration               := 0.0;
+ --       Deadline_Alloc  : Duration               := 0.0;
+    end record;
+ 
+    Default_Sproc_Attributes : constant Sproc_Attributes :=
+       (NO_RESOURCES, ANY_CPU, NOLOCK, NDP_NONE);
+ 
+    function New_Sproc (Attr : Sproc_Attributes) return sproc_t;
+    function New_Sproc
+      (Sproc_Resources : Resource_Vector_T      := NO_RESOURCES;
+       CPU             : CPU_Number             := ANY_CPU;
+       Resident        : Page_Locking           := NOLOCK;
+       NDPRI           : Non_Degrading_Priority := NDP_NONE) return sproc_t;
+    --  Allocates a sproc_t control structure and creates the
+    --  corresponding sproc.
+ 
+    Invalid_CPU_Number : exception;
+    Permission_Error   : exception;
+    Sproc_Create_Error : exception;
+ 
+    -----------------------
+    -- Thread Attributes --
+    -----------------------
+ 
+    type Thread_Attributes (Bound_To_Sproc : Boolean) is record
+       Thread_Resources : Resource_Vector_T := NO_RESOURCES;
+ 
+       Thread_Timeslice : Duration          := 0.0;
+ 
+       case Bound_To_Sproc is
+          when False =>
+             null;
+          when True   =>
+             Sproc : sproc_t;
+       end case;
+    end record;
+ 
+    Default_Thread_Attributes : constant Thread_Attributes :=
+      (False, NO_RESOURCES, 0.0);
+ 
+    function Unbound_Thread_Attributes
+      (Thread_Resources : Resource_Vector_T := NO_RESOURCES;
+       Thread_Timeslice : Duration          := 0.0) return Thread_Attributes;
+ 
+    function Bound_Thread_Attributes
+      (Thread_Resources : Resource_Vector_T := NO_RESOURCES;
+       Thread_Timeslice : Duration          := 0.0;
+       Sproc            : sproc_t) return Thread_Attributes;
+ 
+    function Bound_Thread_Attributes
+      (Thread_Resources : Resource_Vector_T      := NO_RESOURCES;
+       Thread_Timeslice : Duration               := 0.0;
+       Sproc_Resources  : Resource_Vector_T      := NO_RESOURCES;
+       CPU              : CPU_Number             := ANY_CPU;
+       Resident         : Page_Locking           := NOLOCK;
+       NDPRI            : Non_Degrading_Priority := NDP_NONE)
+       return Thread_Attributes;
+ 
+    type Task_Info_Type is access all Thread_Attributes;
+ 
+    function New_Unbound_Thread_Attributes
+      (Thread_Resources : Resource_Vector_T := NO_RESOURCES;
+       Thread_Timeslice : Duration          := 0.0)
+       return Task_Info_Type;
+ 
+    function New_Bound_Thread_Attributes
+      (Thread_Resources : Resource_Vector_T := NO_RESOURCES;
+       Thread_Timeslice : Duration          := 0.0;
+       Sproc            : sproc_t) return Task_Info_Type;
+ 
+    function New_Bound_Thread_Attributes
+      (Thread_Resources : Resource_Vector_T      := NO_RESOURCES;
+       Thread_Timeslice : Duration               := 0.0;
+       Sproc_Resources  : Resource_Vector_T      := NO_RESOURCES;
+       CPU              : CPU_Number             := ANY_CPU;
+       Resident         : Page_Locking           := NOLOCK;
+       NDPRI            : Non_Degrading_Priority := NDP_NONE)
+       return Task_Info_Type;
+ 
+    Unspecified_Task_Info : constant Task_Info_Type := null;
+ 
+ end System.Task_Info;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tasinf-irix.ads gcc-4.0.0/gcc/ada/s-tasinf-irix.ads
*** gcc-3.4.3/gcc/ada/s-tasinf-irix.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-tasinf-irix.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,136 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                     S Y S T E M . T A S K _ I N F O                      --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package contains the definitions and routines associated with the
+ --  implementation and use of the Task_Info pragma. It is specialized
+ --  appropriately for targets that make use of this pragma.
+ 
+ --  Note: the compiler generates direct calls to this interface, via Rtsfind.
+ --  Any changes to this interface may require corresponding compiler changes.
+ 
+ --  This unit may be used directly from an application program by providing
+ --  an appropriate WITH, and the interface can be expected to remain stable.
+ 
+ --  This is the IRIX (kernel threads) version of this package
+ 
+ with Interfaces.C;
+ with System.OS_Interface;
+ 
+ package System.Task_Info is
+    pragma Elaborate_Body;
+    --  To ensure that a body is allowed
+ 
+    package OSI renames System.OS_Interface;
+ 
+    -----------------------------------------
+    -- Implementation of Task_Info Feature --
+    -----------------------------------------
+ 
+    --  Pragma Task_Info allows an application to set the underlying
+    --  pthread scheduling attributes for a specific task.
+ 
+    ------------------
+    -- Declarations --
+    ------------------
+ 
+    type Thread_Scheduling_Scope is
+      (PTHREAD_SCOPE_PROCESS, PTHREAD_SCOPE_SYSTEM);
+ 
+    for Thread_Scheduling_Scope'Size use Interfaces.C.int'Size;
+ 
+    type Thread_Scheduling_Inheritance is
+       (PTHREAD_EXPLICIT_SCHED, PTHREAD_INHERIT_SCHED);
+ 
+    for Thread_Scheduling_Inheritance'Size use Interfaces.C.int'Size;
+ 
+    type Thread_Scheduling_Policy is
+       (SCHED_FIFO,   --  The first-in-first-out real-time policy
+        SCHED_RR,     --  The round-robin real-time scheduling policy
+        SCHED_TS);    --  The timeshare earnings based scheduling policy
+ 
+    for Thread_Scheduling_Policy'Size use Interfaces.C.int'Size;
+    for Thread_Scheduling_Policy use
+       (SCHED_FIFO => 1,
+        SCHED_RR   => 2,
+        SCHED_TS   => 3);
+ 
+    function SCHED_OTHER return Thread_Scheduling_Policy renames SCHED_TS;
+ 
+    No_Specified_Priority : constant := -1;
+ 
+    subtype Thread_Scheduling_Priority is Integer range
+      No_Specified_Priority .. 255;
+ 
+    function Min (Policy : Interfaces.C.int) return Interfaces.C.int
+      renames OSI.sched_get_priority_min;
+ 
+    function Max (Policy : Interfaces.C.int) return Interfaces.C.int
+      renames OSI.sched_get_priority_max;
+ 
+    subtype FIFO_Priority is Thread_Scheduling_Priority range
+       Thread_Scheduling_Priority (Min (OSI.SCHED_FIFO)) ..
+       Thread_Scheduling_Priority (Max (OSI.SCHED_FIFO));
+ 
+    subtype RR_Priority is Thread_Scheduling_Priority range
+       Thread_Scheduling_Priority (Min (OSI.SCHED_RR)) ..
+       Thread_Scheduling_Priority (Max (OSI.SCHED_RR));
+ 
+    subtype TS_Priority is Thread_Scheduling_Priority range
+       Thread_Scheduling_Priority (Min (OSI.SCHED_TS)) ..
+       Thread_Scheduling_Priority (Max (OSI.SCHED_TS));
+ 
+    subtype OTHER_Priority is Thread_Scheduling_Priority range
+       Thread_Scheduling_Priority (Min (OSI.SCHED_OTHER)) ..
+       Thread_Scheduling_Priority (Max (OSI.SCHED_OTHER));
+ 
+    subtype CPU_Number is Integer range -1 .. Integer'Last;
+    ANY_CPU : constant CPU_Number := CPU_Number'First;
+ 
+    type Thread_Attributes is record
+       Scope       : Thread_Scheduling_Scope       := PTHREAD_SCOPE_PROCESS;
+       Inheritance : Thread_Scheduling_Inheritance := PTHREAD_EXPLICIT_SCHED;
+       Policy      : Thread_Scheduling_Policy      := SCHED_RR;
+       Priority    : Thread_Scheduling_Priority    := No_Specified_Priority;
+       Runon_CPU   : CPU_Number                    := ANY_CPU;
+    end record;
+ 
+    Default_Thread_Attributes : constant Thread_Attributes :=
+      (PTHREAD_SCOPE_PROCESS, PTHREAD_EXPLICIT_SCHED, SCHED_RR,
+        No_Specified_Priority, ANY_CPU);
+ 
+    type Task_Info_Type is access all Thread_Attributes;
+ 
+    Unspecified_Task_Info : constant Task_Info_Type := null;
+    --  Value passed to task in the absence of a Task_Info pragma
+ 
+ end System.Task_Info;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tasinf-solaris.adb gcc-4.0.0/gcc/ada/s-tasinf-solaris.adb
*** gcc-3.4.3/gcc/ada/s-tasinf-solaris.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-tasinf-solaris.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,73 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                     S Y S T E M . T A S K _ I N F O                      --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package body contains the routines associated with the implementation
+ --  of the Task_Info pragma.
+ 
+ --  This is the Solaris (native) version of this module.
+ 
+ package body System.Task_Info is
+ 
+    function Unbound_Thread_Attributes return Thread_Attributes is
+    begin
+       return (False, False);
+    end Unbound_Thread_Attributes;
+ 
+    function Bound_Thread_Attributes return Thread_Attributes is
+    begin
+       return (False, True);
+    end Bound_Thread_Attributes;
+ 
+    function Bound_Thread_Attributes (CPU : CPU_Number)
+       return Thread_Attributes is
+    begin
+       return (True, True, CPU);
+    end Bound_Thread_Attributes;
+ 
+    function New_Unbound_Thread_Attributes return Task_Info_Type is
+    begin
+       return new Thread_Attributes'(False, False);
+    end New_Unbound_Thread_Attributes;
+ 
+    function New_Bound_Thread_Attributes return Task_Info_Type is
+    begin
+       return new Thread_Attributes'(False, True);
+    end New_Bound_Thread_Attributes;
+ 
+    function New_Bound_Thread_Attributes (CPU : CPU_Number)
+       return Task_Info_Type is
+    begin
+       return new Thread_Attributes'(True, True, CPU);
+    end New_Bound_Thread_Attributes;
+ 
+ end System.Task_Info;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tasinf-solaris.ads gcc-4.0.0/gcc/ada/s-tasinf-solaris.ads
*** gcc-3.4.3/gcc/ada/s-tasinf-solaris.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-tasinf-solaris.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,142 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                     S Y S T E M . T A S K _ I N F O                      --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package contains the definitions and routines associated with the
+ --  implementation and use of the Task_Info pragma. It is specialized
+ --  appropriately for targets that make use of this pragma.
+ 
+ --  Note: the compiler generates direct calls to this interface, via Rtsfind.
+ --  Any changes to this interface may require corresponding compiler changes.
+ 
+ --  This unit may be used directly from an application program by providing
+ --  an appropriate WITH, and the interface can be expected to remain stable.
+ 
+ --  This is the Solaris (native) version of this module.
+ 
+ with System.OS_Interface;
+ 
+ package System.Task_Info is
+    pragma Elaborate_Body;
+    --  To ensure that a body is allowed
+ 
+    -----------------------------------------------------
+    -- Binding of Tasks to LWPs and LWPs to processors --
+    -----------------------------------------------------
+ 
+    --  The Solaris implementation of the GNU Low-Level Interface (GNULLI)
+    --  implements each Ada task as a Solaris thread.  The Solaris thread
+    --  library distributes threads across one or more LWPs (Light Weight
+    --  Process) that are members of the same process. Solaris distributes
+    --  processes and LWPs across the available CPUs on a given machine. The
+    --  pragma Task_Info provides the mechanism to control the distribution
+    --  of tasks to LWPs, and LWPs to processors.
+ 
+    --  Each thread has a number of attributes that dictate it's scheduling.
+    --  These attributes are:
+    --
+    --      New_LWP:       whether a new LWP is created for this thread.
+    --
+    --      Bound_To_LWP:  whether the thread is bound to a specific LWP
+    --                     for its entire lifetime.
+    --
+    --      CPU:           the CPU number associated to the LWP
+    --
+ 
+    --  The Task_Info pragma:
+ 
+    --    pragma Task_Info (EXPRESSION);
+ 
+    --  allows the specification on a task by task basis of a value of type
+    --  System.Task_Info.Task_Info_Type to be passed to a task when it is
+    --  created. The specification of this type, and the effect on the task
+    --  that is created is target dependent.
+ 
+    --  The Task_Info pragma appears within a task definition (compare the
+    --  definition and implementation of pragma Priority). If no such pragma
+    --  appears, then the value Task_Info_Unspecified is passed. If a pragma
+    --  is present, then it supplies an alternative value. If the argument of
+    --  the pragma is a discriminant reference, then the value can be set on
+    --  a task by task basis by supplying the appropriate discriminant value.
+ 
+    --  Note that this means that the type used for Task_Info_Type must be
+    --  suitable for use as a discriminant (i.e. a scalar or access type).
+ 
+    -----------------------
+    -- Thread Attributes --
+    -----------------------
+ 
+    subtype CPU_Number is System.OS_Interface.processorid_t;
+ 
+    CPU_UNCHANGED : constant CPU_Number := System.OS_Interface.PBIND_QUERY;
+    --  Do not bind the LWP to a specific processor
+ 
+    ANY_CPU       : constant CPU_Number := System.OS_Interface.PBIND_NONE;
+    --  Bind the LWP to any processor
+ 
+    Invalid_CPU_Number : exception;
+ 
+    type Thread_Attributes (New_LWP : Boolean) is record
+       Bound_To_LWP     : Boolean    := True;
+       case New_LWP is
+          when False =>
+             null;
+          when True =>
+             CPU        : CPU_Number := CPU_UNCHANGED;
+       end case;
+    end record;
+ 
+    Default_Thread_Attributes : constant Thread_Attributes := (False, True);
+ 
+    function Unbound_Thread_Attributes
+       return Thread_Attributes;
+ 
+    function Bound_Thread_Attributes
+       return Thread_Attributes;
+ 
+    function Bound_Thread_Attributes (CPU : CPU_Number)
+       return Thread_Attributes;
+ 
+    type Task_Info_Type is access all Thread_Attributes;
+ 
+    function New_Unbound_Thread_Attributes
+       return Task_Info_Type;
+ 
+    function New_Bound_Thread_Attributes
+       return Task_Info_Type;
+ 
+    function New_Bound_Thread_Attributes (CPU : CPU_Number)
+       return Task_Info_Type;
+ 
+    Unspecified_Task_Info : constant Task_Info_Type := null;
+ 
+ end System.Task_Info;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tasinf-tru64.ads gcc-4.0.0/gcc/ada/s-tasinf-tru64.ads
*** gcc-3.4.3/gcc/ada/s-tasinf-tru64.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-tasinf-tru64.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,111 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                     S Y S T E M . T A S K _ I N F O                      --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                           (Compiler Interface)                           --
+ --                                                                          --
+ --         Copyright (C) 1998-2003 Free Software Foundation, Inc.           --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package contains the definitions and routines associated with the
+ --  implementation and use of the Task_Info pragma. It is specialized
+ --  appropriately for targets that make use of this pragma.
+ 
+ --  Note: the compiler generates direct calls to this interface, via Rtsfind.
+ --  Any changes to this interface may require corresponding compiler changes.
+ 
+ --  This unit may be used directly from an application program by providing
+ --  an appropriate WITH, and the interface can be expected to remain stable.
+ 
+ --  This is a DEC Unix 4.0d version of this package.
+ 
+ package System.Task_Info is
+    pragma Elaborate_Body;
+    --  To ensure that a body is allowed
+ 
+    -----------------------------------------
+    -- Implementation of Task_Info Feature --
+    -----------------------------------------
+ 
+    --  The Task_Info pragma:
+ 
+    --    pragma Task_Info (EXPRESSION);
+ 
+    --  allows the specification on a task by task basis of a value of type
+    --  System.Task_Info.Task_Info_Type to be passed to a task when it is
+    --  created. The specification of this type, and the effect on the task
+    --  that is created is target dependent.
+ 
+    --  The Task_Info pragma appears within a task definition (compare the
+    --  definition and implementation of pragma Priority). If no such pragma
+    --  appears, then the value Task_Info_Unspecified is passed. If a pragma
+    --  is present, then it supplies an alternative value. If the argument of
+    --  the pragma is a discriminant reference, then the value can be set on
+    --  a task by task basis by supplying the appropriate discriminant value.
+ 
+    --  Note that this means that the type used for Task_Info_Type must be
+    --  suitable for use as a discriminant (i.e. a scalar or access type).
+ 
+    ------------------
+    -- Declarations --
+    ------------------
+ 
+    type Scope_Type is
+      (Process_Scope,
+       --  Contend only with threads in same process
+ 
+       System_Scope,
+       --  Contend with all threads on same CPU
+ 
+       Default_Scope);
+ 
+    type Thread_Attributes is record
+       Bind_To_Cpu_Number : Integer;
+       --   -1: Do nothing
+       --    0: Unbind
+       --  1-N: Bind all unbound threads to this CPU
+ 
+       Contention_Scope   : Scope_Type;
+    end record;
+ 
+    type Task_Info_Type is access all Thread_Attributes;
+    --  Type used for passing information to task create call, using the
+    --  Task_Info pragma. This type may be specialized for individual
+    --  implementations, but it must be a type that can be used as a
+    --  discriminant (i.e. a scalar or access type).
+ 
+    Unspecified_Thread_Attribute : aliased Thread_Attributes :=
+      Thread_Attributes'(-1, Default_Scope);
+ 
+    Unspecified_Task_Info : constant Task_Info_Type :=
+      Unspecified_Thread_Attribute'Access;
+    --  Value passed to task in the absence of a Task_Info pragma
+    --  Don't call new here because the tasking run time has not been
+    --  elaborated yet, so calling Task_Lock is unsafe.
+ 
+ end System.Task_Info;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tasini.adb gcc-4.0.0/gcc/ada/s-tasini.adb
*** gcc-3.4.3/gcc/ada/s-tasini.adb	Tue Oct 21 13:42:15 2003
--- gcc-4.0.0/gcc/ada/s-tasini.adb	Mon Jan  3 15:42:22 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2003, Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2004, Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with System.Soft_Links;
*** 60,65 ****
--- 60,68 ----
  --  used for the non-tasking routines (*_NT) that refer to global data.
  --  They are needed here before the tasking run time has been elaborated.
  
+ with System.Soft_Links.Tasking;
+ --  Used for Init_Tasking_Soft_Links
+ 
  with System.Tasking.Debug;
  --  used for Trace
  
*************** package body System.Tasking.Initializati
*** 87,95 ****
       (Ada, Current_Target_Exception, "__gnat_current_target_exception");
     --  Import this subprogram from the private part of Ada.Exceptions.
  
!    -----------------------------------------------------------------
!    -- Tasking versions of services needed by non-tasking programs --
!    -----------------------------------------------------------------
  
     procedure Task_Lock;
     --  Locks out other tasks. Preceding a section of code by Task_Lock and
--- 90,98 ----
       (Ada, Current_Target_Exception, "__gnat_current_target_exception");
     --  Import this subprogram from the private part of Ada.Exceptions.
  
!    ----------------------------------------------------------------------
!    -- Tasking versions of some services needed by non-tasking programs --
!    ----------------------------------------------------------------------
  
     procedure Task_Lock;
     --  Locks out other tasks. Preceding a section of code by Task_Lock and
*************** package body System.Tasking.Initializati
*** 104,134 ****
     --  all nested locks must be released before other tasks competing for the
     --  tasking lock are released.
  
-    function  Get_Jmpbuf_Address return  Address;
-    procedure Set_Jmpbuf_Address (Addr : Address);
-    --  Get/Set Jmpbuf_Address for current task
- 
-    function  Get_Sec_Stack_Addr return  Address;
-    procedure Set_Sec_Stack_Addr (Addr : Address);
-    --  Get/Set location of current task's secondary stack
- 
     function  Get_Exc_Stack_Addr return Address;
     --  Get the exception stack for the current task
  
     procedure Set_Exc_Stack_Addr (Self_ID : Address; Addr : Address);
!    --  Self_ID is the Task_ID of the task that gets the exception stack.
     --  For Self_ID = Null_Address, the current task gets the exception stack.
  
-    function  Get_Machine_State_Addr return Address;
-    procedure Set_Machine_State_Addr (Addr : Address);
-    --  Get/Set the address for storing the current task's machine state
- 
-    function Get_Current_Excep return SSL.EOA;
-    --  Task-safe version of SSL.Get_Current_Excep
- 
-    procedure Timed_Delay_T (Time : Duration; Mode : Integer);
-    --  Task-safe version of SSL.Timed_Delay
- 
     function Get_Stack_Info return Stack_Checking.Stack_Access;
     --  Get access to the current task's Stack_Info
  
--- 107,119 ----
     --  all nested locks must be released before other tasks competing for the
     --  tasking lock are released.
  
     function  Get_Exc_Stack_Addr return Address;
     --  Get the exception stack for the current task
  
     procedure Set_Exc_Stack_Addr (Self_ID : Address; Addr : Address);
!    --  Self_ID is the Task_Id of the task that gets the exception stack.
     --  For Self_ID = Null_Address, the current task gets the exception stack.
  
     function Get_Stack_Info return Stack_Checking.Stack_Access;
     --  Get access to the current task's Stack_Info
  
*************** package body System.Tasking.Initializati
*** 143,152 ****
     --  Local Subprograms --
     ------------------------
  
-    procedure Do_Pending_Action (Self_ID : Task_ID);
-    --  This is introduced to allow more efficient
-    --  in-line expansion of Undefer_Abort.
- 
     ----------------------------
     -- Tasking Initialization --
     ----------------------------
--- 128,133 ----
*************** package body System.Tasking.Initializati
*** 171,177 ****
  
     --  Call only with abort deferred and holding Self_ID locked.
  
!    procedure Change_Base_Priority (T : Task_ID) is
     begin
        if T.Common.Base_Priority /= T.New_Base_Priority then
           T.Common.Base_Priority := T.New_Base_Priority;
--- 152,158 ----
  
     --  Call only with abort deferred and holding Self_ID locked.
  
!    procedure Change_Base_Priority (T : Task_Id) is
     begin
        if T.Common.Base_Priority /= T.New_Base_Priority then
           T.Common.Base_Priority := T.New_Base_Priority;
*************** package body System.Tasking.Initializati
*** 184,190 ****
     ------------------------
  
     function Check_Abort_Status return Integer is
!       Self_ID : constant Task_ID := Self;
     begin
        if Self_ID /= null and then Self_ID.Deferral_Level = 0
          and then Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level
--- 165,171 ----
     ------------------------
  
     function Check_Abort_Status return Integer is
!       Self_ID : constant Task_Id := Self;
     begin
        if Self_ID /= null and then Self_ID.Deferral_Level = 0
          and then Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level
*************** package body System.Tasking.Initializati
*** 199,205 ****
     -- Defer_Abort --
     -----------------
  
!    procedure Defer_Abort (Self_ID : Task_ID) is
     begin
        if No_Abort and then not Dynamic_Priority_Support then
           return;
--- 180,186 ----
     -- Defer_Abort --
     -----------------
  
!    procedure Defer_Abort (Self_ID : Task_Id) is
     begin
        if No_Abort and then not Dynamic_Priority_Support then
           return;
*************** package body System.Tasking.Initializati
*** 240,246 ****
     -- Defer_Abort_Nestable --
     --------------------------
  
!    procedure Defer_Abort_Nestable (Self_ID : Task_ID) is
     begin
        if No_Abort and then not Dynamic_Priority_Support then
           return;
--- 221,227 ----
     -- Defer_Abort_Nestable --
     --------------------------
  
!    procedure Defer_Abort_Nestable (Self_ID : Task_Id) is
     begin
        if No_Abort and then not Dynamic_Priority_Support then
           return;
*************** package body System.Tasking.Initializati
*** 261,267 ****
     --------------------
  
     procedure Defer_Abortion is
!       Self_ID : Task_ID;
  
     begin
        if No_Abort and then not Dynamic_Priority_Support then
--- 242,248 ----
     --------------------
  
     procedure Defer_Abortion is
!       Self_ID : Task_Id;
  
     begin
        if No_Abort and then not Dynamic_Priority_Support then
*************** package body System.Tasking.Initializati
*** 278,284 ****
  
     --  Call only when holding no locks
  
!    procedure Do_Pending_Action (Self_ID : Task_ID) is
        use type Ada.Exceptions.Exception_Id;
  
     begin
--- 259,265 ----
  
     --  Call only when holding no locks
  
!    procedure Do_Pending_Action (Self_ID : Task_Id) is
        use type Ada.Exceptions.Exception_Id;
  
     begin
*************** package body System.Tasking.Initializati
*** 353,359 ****
     --  not make any reference to the ATCB after the lock is released.
     --  See also comments on Terminate_Task and Unlock.
  
!    procedure Final_Task_Unlock (Self_ID : Task_ID) is
     begin
        pragma Assert (Self_ID.Global_Task_Lock_Nesting = 1);
        Unlock (Global_Task_Lock'Access, Global_Lock => True);
--- 334,340 ----
     --  not make any reference to the ATCB after the lock is released.
     --  See also comments on Terminate_Task and Unlock.
  
!    procedure Final_Task_Unlock (Self_ID : Task_Id) is
     begin
        pragma Assert (Self_ID.Global_Task_Lock_Nesting = 1);
        Unlock (Global_Task_Lock'Access, Global_Lock => True);
*************** package body System.Tasking.Initializati
*** 364,370 ****
     --------------
  
     procedure Init_RTS is
!       Self_Id : Task_ID;
  
     begin
        --  Terminate run time (regular vs restricted) specific initialization
--- 345,351 ----
     --------------
  
     procedure Init_RTS is
!       Self_Id : Task_Id;
  
     begin
        --  Terminate run time (regular vs restricted) specific initialization
*************** package body System.Tasking.Initializati
*** 404,433 ****
           SSL.Abort_Undefer := Undefer_Abortion'Access;
        end if;
  
!       SSL.Update_Exception       := Update_Exception'Access;
!       SSL.Lock_Task              := Task_Lock'Access;
!       SSL.Unlock_Task            := Task_Unlock'Access;
!       SSL.Get_Jmpbuf_Address     := Get_Jmpbuf_Address'Access;
!       SSL.Set_Jmpbuf_Address     := Set_Jmpbuf_Address'Access;
!       SSL.Get_Sec_Stack_Addr     := Get_Sec_Stack_Addr'Access;
!       SSL.Set_Sec_Stack_Addr     := Set_Sec_Stack_Addr'Access;
!       SSL.Get_Exc_Stack_Addr     := Get_Exc_Stack_Addr'Access;
!       SSL.Set_Exc_Stack_Addr     := Set_Exc_Stack_Addr'Access;
!       SSL.Get_Machine_State_Addr := Get_Machine_State_Addr'Access;
!       SSL.Set_Machine_State_Addr := Set_Machine_State_Addr'Access;
!       SSL.Get_Current_Excep      := Get_Current_Excep'Access;
!       SSL.Timed_Delay            := Timed_Delay_T'Access;
!       SSL.Check_Abort_Status     := Check_Abort_Status'Access;
!       SSL.Get_Stack_Info         := Get_Stack_Info'Access;
!       SSL.Task_Name              := Task_Name'Access;
  
!       --  No need to create a new Secondary Stack, since we will use the
!       --  default one created in s-secsta.adb
  
!       SSL.Set_Sec_Stack_Addr     (SSL.Get_Sec_Stack_Addr_NT);
!       SSL.Set_Exc_Stack_Addr     (Null_Address, SSL.Get_Exc_Stack_Addr_NT);
!       SSL.Set_Jmpbuf_Address     (SSL.Get_Jmpbuf_Address_NT);
!       SSL.Set_Machine_State_Addr (SSL.Get_Machine_State_Addr_NT);
  
        --  Install tasking locks in the GCC runtime.
  
--- 385,405 ----
           SSL.Abort_Undefer := Undefer_Abortion'Access;
        end if;
  
!       SSL.Update_Exception   := Update_Exception'Access;
!       SSL.Lock_Task          := Task_Lock'Access;
!       SSL.Unlock_Task        := Task_Unlock'Access;
!       SSL.Get_Exc_Stack_Addr := Get_Exc_Stack_Addr'Access;
!       SSL.Set_Exc_Stack_Addr := Set_Exc_Stack_Addr'Access;
!       SSL.Check_Abort_Status := Check_Abort_Status'Access;
!       SSL.Get_Stack_Info     := Get_Stack_Info'Access;
!       SSL.Task_Name          := Task_Name'Access;
  
!       SSL.Set_Exc_Stack_Addr (Null_Address, SSL.Get_Exc_Stack_Addr_NT);
  
!       --  Initialize the tasking soft links (if not done yet) that are common
!       --  to the full and the restricted run times.
! 
!       SSL.Tasking.Init_Tasking_Soft_Links;
  
        --  Install tasking locks in the GCC runtime.
  
*************** package body System.Tasking.Initializati
*** 490,497 ****
     --  for this case is done in Terminate_Task.
  
     procedure Locked_Abort_To_Level
!      (Self_ID : Task_ID;
!       T       : Task_ID;
        L       : ATC_Level)
     is
     begin
--- 462,469 ----
     --  for this case is done in Terminate_Task.
  
     procedure Locked_Abort_To_Level
!      (Self_ID : Task_Id;
!       T       : Task_Id;
        L       : ATC_Level)
     is
     begin
*************** package body System.Tasking.Initializati
*** 590,596 ****
     --  In this version, we check if the task is held too because
     --  doing this only in Do_Pending_Action is not enough.
  
!    procedure Poll_Base_Priority_Change (Self_ID : Task_ID) is
     begin
        if Dynamic_Priority_Support and then Self_ID.Pending_Priority_Change then
  
--- 562,568 ----
     --  In this version, we check if the task is held too because
     --  doing this only in Do_Pending_Action is not enough.
  
!    procedure Poll_Base_Priority_Change (Self_ID : Task_Id) is
     begin
        if Dynamic_Priority_Support and then Self_ID.Pending_Priority_Change then
  
*************** package body System.Tasking.Initializati
*** 636,644 ****
     -- Remove_From_All_Tasks_List --
     --------------------------------
  
!    procedure Remove_From_All_Tasks_List (T : Task_ID) is
!       C        : Task_ID;
!       Previous : Task_ID;
  
     begin
        pragma Debug
--- 608,616 ----
     -- Remove_From_All_Tasks_List --
     --------------------------------
  
!    procedure Remove_From_All_Tasks_List (T : Task_Id) is
!       C        : Task_Id;
!       Previous : Task_Id;
  
     begin
        pragma Debug
*************** package body System.Tasking.Initializati
*** 670,676 ****
     -- Task_Lock --
     ---------------
  
!    procedure Task_Lock (Self_ID : Task_ID) is
     begin
        Self_ID.Global_Task_Lock_Nesting := Self_ID.Global_Task_Lock_Nesting + 1;
  
--- 642,648 ----
     -- Task_Lock --
     ---------------
  
!    procedure Task_Lock (Self_ID : Task_Id) is
     begin
        Self_ID.Global_Task_Lock_Nesting := Self_ID.Global_Task_Lock_Nesting + 1;
  
*************** package body System.Tasking.Initializati
*** 690,696 ****
     ---------------
  
     function Task_Name return String is
!       Self_Id : constant Task_ID := STPO.Self;
  
     begin
        return Self_Id.Common.Task_Image (1 .. Self_Id.Common.Task_Image_Len);
--- 662,668 ----
     ---------------
  
     function Task_Name return String is
!       Self_Id : constant Task_Id := STPO.Self;
  
     begin
        return Self_Id.Common.Task_Image (1 .. Self_Id.Common.Task_Image_Len);
*************** package body System.Tasking.Initializati
*** 700,706 ****
     -- Task_Unlock --
     -----------------
  
!    procedure Task_Unlock (Self_ID : Task_ID) is
     begin
        pragma Assert (Self_ID.Global_Task_Lock_Nesting > 0);
        Self_ID.Global_Task_Lock_Nesting := Self_ID.Global_Task_Lock_Nesting - 1;
--- 672,678 ----
     -- Task_Unlock --
     -----------------
  
!    procedure Task_Unlock (Self_ID : Task_Id) is
     begin
        pragma Assert (Self_ID.Global_Task_Lock_Nesting > 0);
        Self_ID.Global_Task_Lock_Nesting := Self_ID.Global_Task_Lock_Nesting - 1;
*************** package body System.Tasking.Initializati
*** 729,735 ****
     --  The priority change has to occur before abortion. Otherwise, it would
     --  take effect no earlier than the next abortion completion point.
  
!    procedure Undefer_Abort (Self_ID : Task_ID) is
     begin
        if No_Abort and then not Dynamic_Priority_Support then
           return;
--- 701,707 ----
     --  The priority change has to occur before abortion. Otherwise, it would
     --  take effect no earlier than the next abortion completion point.
  
!    procedure Undefer_Abort (Self_ID : Task_Id) is
     begin
        if No_Abort and then not Dynamic_Priority_Support then
           return;
*************** package body System.Tasking.Initializati
*** 765,771 ****
     --  as entry to the scope of a region with a finalizer and entry into the
     --  body of an accept-procedure.
  
!    procedure Undefer_Abort_Nestable (Self_ID : Task_ID) is
     begin
        if No_Abort and then not Dynamic_Priority_Support then
           return;
--- 737,743 ----
     --  as entry to the scope of a region with a finalizer and entry into the
     --  body of an accept-procedure.
  
!    procedure Undefer_Abort_Nestable (Self_ID : Task_Id) is
     begin
        if No_Abort and then not Dynamic_Priority_Support then
           return;
*************** package body System.Tasking.Initializati
*** 793,799 ****
     --  to reduce overhead due to multiple calls to Self.
  
     procedure Undefer_Abortion is
!       Self_ID : Task_ID;
  
     begin
        if No_Abort and then not Dynamic_Priority_Support then
--- 765,771 ----
     --  to reduce overhead due to multiple calls to Self.
  
     procedure Undefer_Abortion is
!       Self_ID : Task_Id;
  
     begin
        if No_Abort and then not Dynamic_Priority_Support then
*************** package body System.Tasking.Initializati
*** 801,808 ****
        end if;
  
        Self_ID := STPO.Self;
-       pragma Assert (Self_ID.Deferral_Level > 0);
  
        Self_ID.Deferral_Level := Self_ID.Deferral_Level - 1;
  
        if Self_ID.Deferral_Level = 0 then
--- 773,796 ----
        end if;
  
        Self_ID := STPO.Self;
  
+       if Self_ID.Deferral_Level = 0 then
+ 
+          --  In case there are different views on whether Abort is supported
+          --  between the expander and the run time, we may end up with
+          --  Self_ID.Deferral_Level being equal to zero, when called from
+          --  the procedure created by the expander that corresponds to a
+          --  task body.
+ 
+          --  In this case, there's nothing to be done
+ 
+          --  See related code in System.Tasking.Stages.Create_Task resetting
+          --  Deferral_Level when System.Restrictions.Abort_Allowed is False.
+ 
+          return;
+       end if;
+ 
+       pragma Assert (Self_ID.Deferral_Level > 0);
        Self_ID.Deferral_Level := Self_ID.Deferral_Level - 1;
  
        if Self_ID.Deferral_Level = 0 then
*************** package body System.Tasking.Initializati
*** 823,829 ****
     procedure Update_Exception
       (X : AE.Exception_Occurrence := Current_Target_Exception)
     is
!       Self_Id : constant Task_ID := Self;
        use Ada.Exceptions;
  
     begin
--- 811,817 ----
     procedure Update_Exception
       (X : AE.Exception_Occurrence := Current_Target_Exception)
     is
!       Self_Id : constant Task_Id := Self;
        use Ada.Exceptions;
  
     begin
*************** package body System.Tasking.Initializati
*** 885,895 ****
     --    if Entry_Call.State >= Was_Abortable.
  
     procedure Wakeup_Entry_Caller
!      (Self_ID    : Task_ID;
        Entry_Call : Entry_Call_Link;
        New_State  : Entry_Call_State)
     is
!       Caller : constant Task_ID := Entry_Call.Self;
  
     begin
        pragma Debug (Debug.Trace
--- 873,883 ----
     --    if Entry_Call.State >= Was_Abortable.
  
     procedure Wakeup_Entry_Caller
!      (Self_ID    : Task_Id;
        Entry_Call : Entry_Call_Link;
        New_State  : Entry_Call_State)
     is
!       Caller : constant Task_Id := Entry_Call.Self;
  
     begin
        pragma Debug (Debug.Trace
*************** package body System.Tasking.Initializati
*** 920,958 ****
     -- Soft-Link Bodies --
     ----------------------
  
-    function Get_Current_Excep return SSL.EOA is
-    begin
-       return STPO.Self.Common.Compiler_Data.Current_Excep'Access;
-    end Get_Current_Excep;
- 
     function Get_Exc_Stack_Addr return Address is
     begin
        return STPO.Self.Common.Compiler_Data.Exc_Stack_Addr;
     end Get_Exc_Stack_Addr;
  
-    function Get_Jmpbuf_Address return  Address is
-    begin
-       return STPO.Self.Common.Compiler_Data.Jmpbuf_Address;
-    end Get_Jmpbuf_Address;
- 
-    function Get_Machine_State_Addr return Address is
-    begin
-       return STPO.Self.Common.Compiler_Data.Machine_State_Addr;
-    end Get_Machine_State_Addr;
- 
-    function Get_Sec_Stack_Addr return  Address is
-    begin
-       return STPO.Self.Common.Compiler_Data.Sec_Stack_Addr;
-    end Get_Sec_Stack_Addr;
- 
     function Get_Stack_Info return Stack_Checking.Stack_Access is
     begin
        return STPO.Self.Common.Compiler_Data.Pri_Stack_Info'Access;
     end Get_Stack_Info;
  
     procedure Set_Exc_Stack_Addr (Self_ID : Address; Addr : Address) is
!       Me : Task_ID := To_Task_Id (Self_ID);
! 
     begin
        if Me = Null_Task then
           Me := STPO.Self;
--- 908,925 ----
     -- Soft-Link Bodies --
     ----------------------
  
     function Get_Exc_Stack_Addr return Address is
     begin
        return STPO.Self.Common.Compiler_Data.Exc_Stack_Addr;
     end Get_Exc_Stack_Addr;
  
     function Get_Stack_Info return Stack_Checking.Stack_Access is
     begin
        return STPO.Self.Common.Compiler_Data.Pri_Stack_Info'Access;
     end Get_Stack_Info;
  
     procedure Set_Exc_Stack_Addr (Self_ID : Address; Addr : Address) is
!       Me : Task_Id := To_Task_Id (Self_ID);
     begin
        if Me = Null_Task then
           Me := STPO.Self;
*************** package body System.Tasking.Initializati
*** 961,986 ****
        Me.Common.Compiler_Data.Exc_Stack_Addr := Addr;
     end Set_Exc_Stack_Addr;
  
-    procedure Set_Jmpbuf_Address (Addr : Address) is
-    begin
-       STPO.Self.Common.Compiler_Data.Jmpbuf_Address := Addr;
-    end Set_Jmpbuf_Address;
- 
-    procedure Set_Machine_State_Addr (Addr : Address) is
-    begin
-       STPO.Self.Common.Compiler_Data.Machine_State_Addr := Addr;
-    end Set_Machine_State_Addr;
- 
-    procedure Set_Sec_Stack_Addr (Addr : Address) is
-    begin
-       STPO.Self.Common.Compiler_Data.Sec_Stack_Addr := Addr;
-    end Set_Sec_Stack_Addr;
- 
-    procedure Timed_Delay_T (Time : Duration; Mode : Integer) is
-    begin
-       STPO.Timed_Delay (STPO.Self, Time, Mode);
-    end Timed_Delay_T;
- 
     -----------------------
     -- Soft-Link Dummies --
     -----------------------
--- 928,933 ----
*************** package body System.Tasking.Initializati
*** 990,1003 ****
     --  links will be redirected to the real subprogram by elaboration of
     --  the subprogram body where the real subprogram is declared.
  
!    procedure Finalize_Attributes (T : Task_ID) is
        pragma Warnings (Off, T);
  
     begin
        null;
     end Finalize_Attributes;
  
!    procedure Initialize_Attributes (T : Task_ID) is
        pragma Warnings (Off, T);
  
     begin
--- 937,950 ----
     --  links will be redirected to the real subprogram by elaboration of
     --  the subprogram body where the real subprogram is declared.
  
!    procedure Finalize_Attributes (T : Task_Id) is
        pragma Warnings (Off, T);
  
     begin
        null;
     end Finalize_Attributes;
  
!    procedure Initialize_Attributes (T : Task_Id) is
        pragma Warnings (Off, T);
  
     begin
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tasini.ads gcc-4.0.0/gcc/ada/s-tasini.ads
*** gcc-3.4.3/gcc/ada/s-tasini.ads	Tue Oct 21 13:42:15 2003
--- gcc-4.0.0/gcc/ada/s-tasini.ads	Mon Jan  3 15:42:22 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2001, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 36,42 ****
  
  package System.Tasking.Initialization is
  
!    procedure Remove_From_All_Tasks_List (T : Task_ID);
     --  Remove T from All_Tasks_List.
     --  Call this function with RTS_Lock taken.
  
--- 36,42 ----
  
  package System.Tasking.Initialization is
  
!    procedure Remove_From_All_Tasks_List (T : Task_Id);
     --  Remove T from All_Tasks_List.
     --  Call this function with RTS_Lock taken.
  
*************** package System.Tasking.Initialization is
*** 49,58 ****
     --  by the tasking run-time system.
     --  So far, the only example is support for Ada.Task_Attributes.
  
!    type Proc_T is access procedure (T : Task_ID);
  
!    procedure Finalize_Attributes (T : Task_ID);
!    procedure Initialize_Attributes (T : Task_ID);
  
     Finalize_Attributes_Link : Proc_T := Finalize_Attributes'Access;
     --  should be called with abortion deferred and T.L write-locked
--- 49,58 ----
     --  by the tasking run-time system.
     --  So far, the only example is support for Ada.Task_Attributes.
  
!    type Proc_T is access procedure (T : Task_Id);
  
!    procedure Finalize_Attributes (T : Task_Id);
!    procedure Initialize_Attributes (T : Task_Id);
  
     Finalize_Attributes_Link : Proc_T := Finalize_Attributes'Access;
     --  should be called with abortion deferred and T.L write-locked
*************** package System.Tasking.Initialization is
*** 106,125 ****
     --  For the sake of efficiency, the version with Self_ID as parameter
     --  should used wherever possible. These are all nestable.
  
!    --  Non-nestable inline versions  --
  
!    procedure Defer_Abort (Self_ID : Task_ID);
     pragma Inline (Defer_Abort);
  
!    procedure Undefer_Abort (Self_ID : Task_ID);
     pragma Inline (Undefer_Abort);
  
!    --  Nestable inline versions  --
  
!    procedure Defer_Abort_Nestable (Self_ID : Task_ID);
     pragma Inline (Defer_Abort_Nestable);
  
!    procedure Undefer_Abort_Nestable (Self_ID : Task_ID);
     pragma Inline (Undefer_Abort_Nestable);
  
     --  NON-INLINE versions without Self_ID for code generated by the
--- 106,125 ----
     --  For the sake of efficiency, the version with Self_ID as parameter
     --  should used wherever possible. These are all nestable.
  
!    --  Non-nestable inline versions
  
!    procedure Defer_Abort (Self_ID : Task_Id);
     pragma Inline (Defer_Abort);
  
!    procedure Undefer_Abort (Self_ID : Task_Id);
     pragma Inline (Undefer_Abort);
  
!    --  Nestable inline versions
  
!    procedure Defer_Abort_Nestable (Self_ID : Task_Id);
     pragma Inline (Defer_Abort_Nestable);
  
!    procedure Undefer_Abort_Nestable (Self_ID : Task_Id);
     pragma Inline (Undefer_Abort_Nestable);
  
     --  NON-INLINE versions without Self_ID for code generated by the
*************** package System.Tasking.Initialization is
*** 131,150 ****
     --  ?????
     --  Try to phase out all uses of the above versions.
  
     function Check_Abort_Status return Integer;
     --  Returns Boolean'Pos (True) iff abort signal should raise
     --  Standard.Abort_Signal. Only used by IRIX currently.
  
!    ---------------------------
!    --  Change Base Priority --
!    ---------------------------
  
!    procedure Change_Base_Priority (T : Task_ID);
     --  Change the base priority of T.
     --  Has to be called with the affected task's ATCB write-locked.
     --  May temporariliy release the lock.
  
!    procedure Poll_Base_Priority_Change (Self_ID : Task_ID);
     --  Has to be called with Self_ID's ATCB write-locked.
     --  May temporariliy release the lock.
     pragma Inline (Poll_Base_Priority_Change);
--- 131,158 ----
     --  ?????
     --  Try to phase out all uses of the above versions.
  
+    procedure Do_Pending_Action (Self_ID : Task_Id);
+    --  Only call with no locks, and when Self_ID.Pending_Action = True
+    --  Perform necessary pending actions (e.g. abortion, priority change).
+    --  This procedure is usually called when needed as a result of
+    --  calling Undefer_Abort, although in the case of e.g. No_Abort
+    --  restriction, it can be necessary to force execution of pending
+    --  actions.
+ 
     function Check_Abort_Status return Integer;
     --  Returns Boolean'Pos (True) iff abort signal should raise
     --  Standard.Abort_Signal. Only used by IRIX currently.
  
!    --------------------------
!    -- Change Base Priority --
!    --------------------------
  
!    procedure Change_Base_Priority (T : Task_Id);
     --  Change the base priority of T.
     --  Has to be called with the affected task's ATCB write-locked.
     --  May temporariliy release the lock.
  
!    procedure Poll_Base_Priority_Change (Self_ID : Task_Id);
     --  Has to be called with Self_ID's ATCB write-locked.
     --  May temporariliy release the lock.
     pragma Inline (Poll_Base_Priority_Change);
*************** package System.Tasking.Initialization is
*** 153,167 ****
     -- Task Lock/Unlock --
     ----------------------
  
!    procedure Task_Lock (Self_ID : Task_ID);
     pragma Inline (Task_Lock);
  
!    procedure Task_Unlock (Self_ID : Task_ID);
     pragma Inline (Task_Unlock);
     --  These are versions of Lock_Task and Unlock_Task created for use
     --  within the GNARL.
  
!    procedure Final_Task_Unlock (Self_ID : Task_ID);
     --  This version is only for use in Terminate_Task, when the task
     --  is relinquishing further rights to its own ATCB.
     --  There is a very interesting potential race condition there, where
--- 161,175 ----
     -- Task Lock/Unlock --
     ----------------------
  
!    procedure Task_Lock (Self_ID : Task_Id);
     pragma Inline (Task_Lock);
  
!    procedure Task_Unlock (Self_ID : Task_Id);
     pragma Inline (Task_Unlock);
     --  These are versions of Lock_Task and Unlock_Task created for use
     --  within the GNARL.
  
!    procedure Final_Task_Unlock (Self_ID : Task_Id);
     --  This version is only for use in Terminate_Task, when the task
     --  is relinquishing further rights to its own ATCB.
     --  There is a very interesting potential race condition there, where
*************** package System.Tasking.Initialization is
*** 171,177 ****
     --  See also comments on Terminate_Task and Unlock.
  
     procedure Wakeup_Entry_Caller
!      (Self_ID    : Task_ID;
        Entry_Call : Entry_Call_Link;
        New_State  : Entry_Call_State);
     pragma Inline (Wakeup_Entry_Caller);
--- 179,185 ----
     --  See also comments on Terminate_Task and Unlock.
  
     procedure Wakeup_Entry_Caller
!      (Self_ID    : Task_Id;
        Entry_Call : Entry_Call_Link;
        New_State  : Entry_Call_State);
     pragma Inline (Wakeup_Entry_Caller);
*************** package System.Tasking.Initialization is
*** 195,202 ****
     --    if Entry_Call.State >= Was_Abortable.
  
     procedure Locked_Abort_To_Level
!      (Self_ID : Task_ID;
!       T       : Task_ID;
        L       : ATC_Level);
     pragma Inline (Locked_Abort_To_Level);
     --  Abort a task to a specified ATC level.
--- 203,210 ----
     --    if Entry_Call.State >= Was_Abortable.
  
     procedure Locked_Abort_To_Level
!      (Self_ID : Task_Id;
!       T       : Task_Id;
        L       : ATC_Level);
     pragma Inline (Locked_Abort_To_Level);
     --  Abort a task to a specified ATC level.
diff -Nrcpad gcc-3.4.3/gcc/ada/s-taskin.adb gcc-4.0.0/gcc/ada/s-taskin.adb
*** gcc-3.4.3/gcc/ada/s-taskin.adb	Wed Dec  3 11:47:53 2003
--- gcc-4.0.0/gcc/ada/s-taskin.adb	Mon Sep 13 10:18:41 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1992-2003, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** pragma Polling (Off);
*** 38,46 ****
  with System.Task_Primitives.Operations;
  --  used for Self
  
- with Unchecked_Deallocation;
- --  To recover from failure of ATCB initialization.
- 
  with System.Storage_Elements;
  --  Needed for initializing Stack_Info.Size
  
--- 38,43 ----
*************** package body System.Tasking is
*** 51,79 ****
  
     package STPO renames System.Task_Primitives.Operations;
  
-    procedure Free is new
-      Unchecked_Deallocation (Ada_Task_Control_Block, Task_ID);
- 
     ----------
     -- Self --
     ----------
  
!    function Self return Task_ID renames STPO.Self;
  
     ---------------------
     -- Initialize_ATCB --
     ---------------------
  
     procedure Initialize_ATCB
!      (Self_ID          : Task_ID;
        Task_Entry_Point : Task_Procedure_Access;
        Task_Arg         : System.Address;
!       Parent           : Task_ID;
        Elaborated       : Access_Boolean;
        Base_Priority    : System.Any_Priority;
        Task_Info        : System.Task_Info.Task_Info_Type;
        Stack_Size       : System.Parameters.Size_Type;
!       T                : in out Task_ID;
        Success          : out Boolean) is
     begin
        T.Common.State := Unactivated;
--- 48,73 ----
  
     package STPO renames System.Task_Primitives.Operations;
  
     ----------
     -- Self --
     ----------
  
!    function Self return Task_Id renames STPO.Self;
  
     ---------------------
     -- Initialize_ATCB --
     ---------------------
  
     procedure Initialize_ATCB
!      (Self_ID          : Task_Id;
        Task_Entry_Point : Task_Procedure_Access;
        Task_Arg         : System.Address;
!       Parent           : Task_Id;
        Elaborated       : Access_Boolean;
        Base_Priority    : System.Any_Priority;
        Task_Info        : System.Task_Info.Task_Info_Type;
        Stack_Size       : System.Parameters.Size_Type;
!       T                : Task_Id;
        Success          : out Boolean) is
     begin
        T.Common.State := Unactivated;
*************** package body System.Tasking is
*** 83,95 ****
        STPO.Initialize_TCB (T, Success);
  
        if not Success then
-          Free (T);
           return;
        end if;
  
        T.Common.Parent := Parent;
        T.Common.Base_Priority := Base_Priority;
        T.Common.Current_Priority := 0;
        T.Common.Call := null;
        T.Common.Task_Arg := Task_Arg;
        T.Common.Task_Entry_Point := Task_Entry_Point;
--- 77,89 ----
        STPO.Initialize_TCB (T, Success);
  
        if not Success then
           return;
        end if;
  
        T.Common.Parent := Parent;
        T.Common.Base_Priority := Base_Priority;
        T.Common.Current_Priority := 0;
+       T.Common.Protected_Action_Nesting := 0;
        T.Common.Call := null;
        T.Common.Task_Arg := Task_Arg;
        T.Common.Task_Entry_Point := Task_Entry_Point;
*************** package body System.Tasking is
*** 146,152 ****
  
  begin
     declare
!       T             : Task_ID;
        Success       : Boolean;
        Base_Priority : Any_Priority;
  
--- 140,146 ----
  
  begin
     declare
!       T             : Task_Id;
        Success       : Boolean;
        Base_Priority : Any_Priority;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/s-taskin.ads gcc-4.0.0/gcc/ada/s-taskin.ads
*** gcc-3.4.3/gcc/ada/s-taskin.ads	Tue Oct 21 13:42:15 2003
--- gcc-4.0.0/gcc/ada/s-taskin.ads	Mon Sep 13 10:18:41 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2003, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Unchecked_Conversion;
*** 55,75 ****
  
  package System.Tasking is
  
!    --  -------------------
!    --  -- Locking Rules --
!    --  -------------------
!    --
     --  The following rules must be followed at all times, to prevent
     --  deadlock and generally ensure correct operation of locking.
!    --
     --  . Never lock a lock unless abort is deferred.
!    --
     --  . Never undefer abort while holding a lock.
!    --
     --  . Overlapping critical sections must be properly nested,
     --    and locks must be released in LIFO order.
     --    e.g., the following is not allowed:
!    --
     --         Lock (X);
     --         ...
     --         Lock (Y);
--- 55,75 ----
  
  package System.Tasking is
  
!    -------------------
!    -- Locking Rules --
!    -------------------
! 
     --  The following rules must be followed at all times, to prevent
     --  deadlock and generally ensure correct operation of locking.
! 
     --  . Never lock a lock unless abort is deferred.
! 
     --  . Never undefer abort while holding a lock.
! 
     --  . Overlapping critical sections must be properly nested,
     --    and locks must be released in LIFO order.
     --    e.g., the following is not allowed:
! 
     --         Lock (X);
     --         ...
     --         Lock (Y);
*************** package System.Tasking is
*** 77,107 ****
     --         Unlock (X);
     --         ...
     --         Unlock (Y);
!    --
     --  Locks with lower (smaller) level number cannot be locked
     --  while holding a lock with a higher level number. (The level
     --  number is the number at the left.)
!    --
     --  1. System.Tasking.PO_Simple.Protection.L (any PO lock)
     --  2. System.Tasking.Initialization.Global_Task_Lock (in body)
     --  3. System.Task_Primitives.Operations.Single_RTS_Lock
     --  4. System.Tasking.Ada_Task_Control_Block.LL.L (any TCB lock)
!    --
     --  Clearly, there can be no circular chain of hold-and-wait
     --  relationships involving locks in different ordering levels.
!    --
     --  We used to have Global_Task_Lock before Protection.L but this was
     --  clearly wrong since there can be calls to "new" inside protected
     --  operations. The new ordering prevents these failures.
!    --
     --  Sometimes we need to hold two ATCB locks at the same time. To allow
     --  us to order the locking, each ATCB is given a unique serial
     --  number. If one needs to hold locks on several ATCBs at once,
     --  the locks with lower serial numbers must be locked first.
!    --
     --  We don't always need to check the serial numbers, since
     --  the serial numbers are assigned sequentially, and so:
!    --
     --  . The parent of a task always has a lower serial number.
     --  . The activator of a task always has a lower serial number.
     --  . The environment task has a lower serial number than any other task.
--- 77,107 ----
     --         Unlock (X);
     --         ...
     --         Unlock (Y);
! 
     --  Locks with lower (smaller) level number cannot be locked
     --  while holding a lock with a higher level number. (The level
     --  number is the number at the left.)
! 
     --  1. System.Tasking.PO_Simple.Protection.L (any PO lock)
     --  2. System.Tasking.Initialization.Global_Task_Lock (in body)
     --  3. System.Task_Primitives.Operations.Single_RTS_Lock
     --  4. System.Tasking.Ada_Task_Control_Block.LL.L (any TCB lock)
! 
     --  Clearly, there can be no circular chain of hold-and-wait
     --  relationships involving locks in different ordering levels.
! 
     --  We used to have Global_Task_Lock before Protection.L but this was
     --  clearly wrong since there can be calls to "new" inside protected
     --  operations. The new ordering prevents these failures.
! 
     --  Sometimes we need to hold two ATCB locks at the same time. To allow
     --  us to order the locking, each ATCB is given a unique serial
     --  number. If one needs to hold locks on several ATCBs at once,
     --  the locks with lower serial numbers must be locked first.
! 
     --  We don't always need to check the serial numbers, since
     --  the serial numbers are assigned sequentially, and so:
! 
     --  . The parent of a task always has a lower serial number.
     --  . The activator of a task always has a lower serial number.
     --  . The environment task has a lower serial number than any other task.
*************** package System.Tasking is
*** 109,132 ****
     --    the parent always has a lower serial number than the activator.
  
     ---------------------------------
!    -- Task_ID related definitions --
     ---------------------------------
  
     type Ada_Task_Control_Block;
  
!    type Task_ID is access all Ada_Task_Control_Block;
  
!    Null_Task : constant Task_ID;
  
!    type Task_List is array (Positive range <>) of Task_ID;
  
!    function Self return Task_ID;
     pragma Inline (Self);
     --  This is the compiler interface version of this function. Do not call
     --  from the run-time system.
  
!    function To_Task_Id is new Unchecked_Conversion (System.Address, Task_ID);
!    function To_Address is new Unchecked_Conversion (Task_ID, System.Address);
  
     -----------------------
     -- Enumeration types --
--- 109,132 ----
     --    the parent always has a lower serial number than the activator.
  
     ---------------------------------
!    -- Task_Id related definitions --
     ---------------------------------
  
     type Ada_Task_Control_Block;
  
!    type Task_Id is access all Ada_Task_Control_Block;
  
!    Null_Task : constant Task_Id;
  
!    type Task_List is array (Positive range <>) of Task_Id;
  
!    function Self return Task_Id;
     pragma Inline (Self);
     --  This is the compiler interface version of this function. Do not call
     --  from the run-time system.
  
!    function To_Task_Id is new Unchecked_Conversion (System.Address, Task_Id);
!    function To_Address is new Unchecked_Conversion (Task_Id, System.Address);
  
     -----------------------
     -- Enumeration types --
*************** package System.Tasking is
*** 301,307 ****
     --      async. select statement does not need to lock anything.
  
     type Restricted_Entry_Call_Record is record
!       Self : Task_ID;
        --  ID of the caller
  
        Mode : Call_Modes;
--- 301,307 ----
     --      async. select statement does not need to lock anything.
  
     type Restricted_Entry_Call_Record is record
!       Self : Task_Id;
        --  ID of the caller
  
        Mode : Call_Modes;
*************** package System.Tasking is
*** 335,347 ****
--- 335,352 ----
     ------------------------------------
  
     type Activation_Chain is limited private;
+    --  Comment required ???
  
     type Activation_Chain_Access is access all Activation_Chain;
+    --  Comment required ???
  
     type Task_Procedure_Access is access procedure (Arg : System.Address);
  
     type Access_Boolean is access all Boolean;
  
+    Detect_Blocking : constant Boolean;
+    --  Boolean constant set True iff Detect_Blocking is active
+ 
     ----------------------------------------------
     -- Ada_Task_Control_Block (ATCB) definition --
     ----------------------------------------------
*************** package System.Tasking is
*** 360,384 ****
     --  Some protection is described in terms of tasks related to the
     --  ATCB being protected. These are:
  
!    --    Self: The task which is controlled by this ATCB.
!    --    Acceptor: A task accepting a call from Self.
!    --    Caller: A task calling an entry of Self.
!    --    Parent: The task executing the master on which Self depends.
!    --    Dependent: A task dependent on Self.
!    --    Activator: The task that created Self and initiated its activation.
!    --    Created: A task created and activated by Self.
  
     --  Note: The order of the fields is important to implement efficiently
     --  tasking support under gdb.
     --  Currently gdb relies on the order of the State, Parent, Base_Priority,
     --  Task_Image, Task_Image_Len, Call and LL fields.
  
!    ----------------------------------------------------------------------
!    --  Common ATCB section                                             --
!    --                                                                  --
!    --  This section is used by all GNARL implementations (regular and  --
!    --  restricted)                                                     --
!    ----------------------------------------------------------------------
  
     type Common_ATCB is record
        State : Task_States;
--- 365,388 ----
     --  Some protection is described in terms of tasks related to the
     --  ATCB being protected. These are:
  
!    --    Self:      The task which is controlled by this ATCB
!    --    Acceptor:  A task accepting a call from Self
!    --    Caller:    A task calling an entry of Self
!    --    Parent:    The task executing the master on which Self depends
!    --    Dependent: A task dependent on Self
!    --    Activator: The task that created Self and initiated its activation
!    --    Created:   A task created and activated by Self
  
     --  Note: The order of the fields is important to implement efficiently
     --  tasking support under gdb.
     --  Currently gdb relies on the order of the State, Parent, Base_Priority,
     --  Task_Image, Task_Image_Len, Call and LL fields.
  
!    -------------------------
!    -- Common ATCB section --
!    -------------------------
! 
!    --  Section used by all GNARL implementations (regular and restricted)
  
     type Common_ATCB is record
        State : Task_States;
*************** package System.Tasking is
*** 388,394 ****
        --  and whether it is terminated.
        --  Protection: Self.L.
  
!       Parent : Task_ID;
        --  The task on which this task depends.
        --  See also Master_Level and Master_Within.
  
--- 392,398 ----
        --  and whether it is terminated.
        --  Protection: Self.L.
  
!       Parent : Task_Id;
        --  The task on which this task depends.
        --  See also Master_Level and Master_Within.
  
*************** package System.Tasking is
*** 422,427 ****
--- 426,439 ----
        --  accepts an entry or when Created activates, at which points Self is
        --  suspended.
  
+       Protected_Action_Nesting : Natural;
+       pragma Atomic (Protected_Action_Nesting);
+       --  The dynamic level of protected action nesting for this task.
+       --  This field is needed for checking whether potentially
+       --  blocking operations are invoked from protected actions.
+       --  pragma Atomic is used because it can be read/written from
+       --  protected interrupt handlers.
+ 
        Task_Image : String (1 .. 32);
        --  Hold a string that provides a readable id for task,
        --  built from the variable of which it is a value or component.
*************** package System.Tasking is
*** 461,475 ****
        --  per-task structures.
        --  Protection: Only accessed by Self.
  
!       All_Tasks_Link : Task_ID;
        --  Used to link this task to the list of all tasks in the system.
        --  Protection: RTS_Lock.
  
!       Activation_Link : Task_ID;
        --  Used to link this task to a list of tasks to be activated.
        --  Protection: Only used by Activator.
  
!       Activator : Task_ID;
        --  The task that created this task, either by declaring it as a task
        --  object or by executing a task allocator.
        --  The value is null iff Self has completed activation.
--- 473,487 ----
        --  per-task structures.
        --  Protection: Only accessed by Self.
  
!       All_Tasks_Link : Task_Id;
        --  Used to link this task to the list of all tasks in the system.
        --  Protection: RTS_Lock.
  
!       Activation_Link : Task_Id;
        --  Used to link this task to a list of tasks to be activated.
        --  Protection: Only used by Activator.
  
!       Activator : Task_Id;
        --  The task that created this task, either by declaring it as a task
        --  object or by executing a task allocator.
        --  The value is null iff Self has completed activation.
*************** package System.Tasking is
*** 542,557 ****
     end record;
     pragma Suppress_Initialization (Restricted_Ada_Task_Control_Block);
  
!    Interrupt_Manager_ID : Task_ID;
     --  This task ID is declared here to break circular dependencies.
!    --  Also declare Interrupt_Manager_ID after Task_ID is known, to avoid
     --  generating unneeded finalization code.
  
     -----------------------
     -- List of all Tasks --
     -----------------------
  
!    All_Tasks_List : Task_ID;
     --  Global linked list of all tasks.
  
     ------------------------------------------
--- 554,569 ----
     end record;
     pragma Suppress_Initialization (Restricted_Ada_Task_Control_Block);
  
!    Interrupt_Manager_ID : Task_Id;
     --  This task ID is declared here to break circular dependencies.
!    --  Also declare Interrupt_Manager_ID after Task_Id is known, to avoid
     --  generating unneeded finalization code.
  
     -----------------------
     -- List of all Tasks --
     -----------------------
  
!    All_Tasks_List : Task_Id;
     --  Global linked list of all tasks.
  
     ------------------------------------------
*************** package System.Tasking is
*** 633,639 ****
     ----------------------------------
  
     type Entry_Call_Record is record
!       Self  : Task_ID;
        --  ID of the caller
  
        Mode : Call_Modes;
--- 645,651 ----
     ----------------------------------
  
     type Entry_Call_Record is record
!       Self  : Task_Id;
        --  ID of the caller
  
        Mode : Call_Modes;
*************** package System.Tasking is
*** 679,685 ****
        --  They are gathered together to allow for compilers that lay records
        --  out contiguously, to allow for such packing.
  
!       Called_Task : Task_ID;
        pragma Atomic (Called_Task);
        --  Use for task entry calls.
        --  The value is null if the call record is not in use.
--- 691,697 ----
        --  They are gathered together to allow for compilers that lay records
        --  out contiguously, to allow for such packing.
  
!       Called_Task : Task_Id;
        pragma Atomic (Called_Task);
        --  Use for task entry calls.
        --  The value is null if the call record is not in use.
*************** package System.Tasking is
*** 728,733 ****
--- 740,751 ----
     ------------------------------------
  
     type Access_Address is access all System.Address;
+    --  Comment on what this is used for ???
+ 
+    pragma No_Strict_Aliasing (Access_Address);
+    --  This type is used in contexts where aliasing may be an issue (see
+    --  for example s-tataat.adb), so we avoid any incorrect aliasing
+    --  assumptions.
  
     ----------------------------------------------
     -- Ada_Task_Control_Block (ATCB) definition --
*************** package System.Tasking is
*** 947,971 ****
     ---------------------
  
     procedure Initialize_ATCB
!      (Self_ID          : Task_ID;
        Task_Entry_Point : Task_Procedure_Access;
        Task_Arg         : System.Address;
!       Parent           : Task_ID;
        Elaborated       : Access_Boolean;
        Base_Priority    : System.Any_Priority;
        Task_Info        : System.Task_Info.Task_Info_Type;
        Stack_Size       : System.Parameters.Size_Type;
!       T                : in out Task_ID;
        Success          : out Boolean);
     --  Initialize fields of a TCB and link into global TCB structures
     --  Call this only with abort deferred and holding RTS_Lock.
  
  private
  
!    Null_Task : constant Task_ID := null;
  
     type Activation_Chain is record
!       T_ID : Task_ID;
     end record;
     pragma Volatile (Activation_Chain);
  
--- 965,997 ----
     ---------------------
  
     procedure Initialize_ATCB
!      (Self_ID          : Task_Id;
        Task_Entry_Point : Task_Procedure_Access;
        Task_Arg         : System.Address;
!       Parent           : Task_Id;
        Elaborated       : Access_Boolean;
        Base_Priority    : System.Any_Priority;
        Task_Info        : System.Task_Info.Task_Info_Type;
        Stack_Size       : System.Parameters.Size_Type;
!       T                : Task_Id;
        Success          : out Boolean);
     --  Initialize fields of a TCB and link into global TCB structures
     --  Call this only with abort deferred and holding RTS_Lock.
+    --  Need more documentation, mention T, and describe Success ???
  
  private
+    Null_Task : constant Task_Id := null;
  
!    GL_Detect_Blocking : Integer;
!    pragma Import (C, GL_Detect_Blocking, "__gl_detect_blocking");
!    --  Global variable exported by the binder generated file. A value
!    --  equal to 1 indicates that pragma Detect_Blocking is active,
!    --  while 0 is used for the pragma not being present.
! 
!    Detect_Blocking : constant Boolean := GL_Detect_Blocking = 1;
  
     type Activation_Chain is record
!       T_ID : Task_Id;
     end record;
     pragma Volatile (Activation_Chain);
  
diff -Nrcpad gcc-3.4.3/gcc/ada/s-taspri-dummy.ads gcc-4.0.0/gcc/ada/s-taspri-dummy.ads
*** gcc-3.4.3/gcc/ada/s-taspri-dummy.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-taspri-dummy.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,55 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                 S Y S T E M . T A S K _ P R I M I T I V E S              --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --          Copyright (C) 1991-2000 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a no tasking version of this package
+ 
+ pragma Polling (Off);
+ --  Turn off polling, we do not want ATC polling to take place during
+ --  tasking operations. It causes infinite loops and other problems.
+ 
+ package System.Task_Primitives is
+    pragma Preelaborate;
+ 
+    type Lock is new Integer;
+ 
+    type RTS_Lock is new Integer;
+ 
+    type Task_Body_Access is access procedure;
+ 
+    type Private_Data is record
+       Thread      : aliased Integer;
+       CV          : aliased Integer;
+       L           : aliased RTS_Lock;
+    end record;
+ 
+ end System.Task_Primitives;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-taspri-hpux-dce.ads gcc-4.0.0/gcc/ada/s-taspri-hpux-dce.ads
*** gcc-3.4.3/gcc/ada/s-taspri-hpux-dce.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-taspri-hpux-dce.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,89 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                 S Y S T E M . T A S K _ P R I M I T I V E S              --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --          Copyright (C) 1991-2000 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a HP-UX version of this package.
+ 
+ --  This package provides low-level support for most tasking features.
+ 
+ pragma Polling (Off);
+ --  Turn off polling, we do not want ATC polling to take place during
+ --  tasking operations. It causes infinite loops and other problems.
+ 
+ with System.OS_Interface;
+ --  used for pthread_mutex_t
+ --           pthread_cond_t
+ --           pthread_t
+ 
+ package System.Task_Primitives is
+ 
+    type Lock is limited private;
+    --  Should be used for implementation of protected objects.
+ 
+    type RTS_Lock is limited private;
+    --  Should be used inside the runtime system.
+    --  The difference between Lock and the RTS_Lock is that the later
+    --  one serves only as a semaphore so that do not check for
+    --  ceiling violations.
+ 
+    type Task_Body_Access is access procedure;
+    --  Pointer to the task body's entry point (or possibly a wrapper
+    --  declared local to the GNARL).
+ 
+    type Private_Data is limited private;
+    --  Any information that the GNULLI needs maintained on a per-task
+    --  basis.  A component of this type is guaranteed to be included
+    --  in the Ada_Task_Control_Block.
+ 
+ private
+    type Lock is record
+       L              : aliased System.OS_Interface.pthread_mutex_t;
+       Priority       : Integer;
+       Owner_Priority : Integer;
+    end record;
+ 
+    type RTS_Lock is new System.OS_Interface.pthread_mutex_t;
+    type Private_Data is record
+       Thread      : aliased System.OS_Interface.pthread_t;
+       pragma Atomic (Thread);
+       --  Thread field may be updated by two different threads of control.
+       --  (See, Enter_Task and Create_Task in s-taprop.adb).
+       --  They put the same value (thr_self value). We do not want to
+       --  use lock on those operations and the only thing we have to
+       --  make sure is that they are updated in atomic fashion.
+ 
+       CV          : aliased System.OS_Interface.pthread_cond_t;
+       L           : aliased RTS_Lock;
+       --  protection for all components is lock L
+    end record;
+ 
+ end System.Task_Primitives;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-taspri-linux.ads gcc-4.0.0/gcc/ada/s-taspri-linux.ads
*** gcc-3.4.3/gcc/ada/s-taspri-linux.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-taspri-linux.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,96 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                 S Y S T E M . T A S K _ P R I M I T I V E S              --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --           Copyright (C) 1991-2001 Free Software Foundation, Inc.         --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the GNU/Linux (GNU/LinuxThreads) version of this package.
+ 
+ --  This package provides low-level support for most tasking features.
+ 
+ pragma Polling (Off);
+ --  Turn off polling, we do not want ATC polling to take place during
+ --  tasking operations. It causes infinite loops and other problems.
+ 
+ with System.OS_Interface;
+ --  used for pthread_mutex_t
+ --           pthread_cond_t
+ --           pthread_t
+ 
+ package System.Task_Primitives is
+ 
+    type Lock is limited private;
+    --  Should be used for implementation of protected objects.
+ 
+    type RTS_Lock is limited private;
+    --  Should be used inside the runtime system.
+    --  The difference between Lock and the RTS_Lock is that the later
+    --  one serves only as a semaphore so that do not check for
+    --  ceiling violations.
+ 
+    type Task_Body_Access is access procedure;
+    --  Pointer to the task body's entry point (or possibly a wrapper
+    --  declared local to the GNARL).
+ 
+    type Private_Data is limited private;
+    --  Any information that the GNULLI needs maintained on a per-task
+    --  basis.  A component of this type is guaranteed to be included
+    --  in the Ada_Task_Control_Block.
+ 
+ private
+ 
+    type Prio_Array_Type is array (System.Any_Priority) of Integer;
+ 
+    type Lock is record
+       L          : aliased System.OS_Interface.pthread_mutex_t;
+       Ceiling    : System.Any_Priority := System.Any_Priority'First;
+       Saved_Priority : System.Any_Priority := System.Any_Priority'First;
+    end record;
+ 
+    type RTS_Lock is new System.OS_Interface.pthread_mutex_t;
+    type Private_Data is record
+       Thread      : aliased System.OS_Interface.pthread_t;
+       pragma Atomic (Thread);
+       --  Thread field may be updated by two different threads of control.
+       --  (See, Enter_Task and Create_Task in s-taprop.adb).
+       --  They put the same value (thr_self value). We do not want to
+       --  use lock on those operations and the only thing we have to
+       --  make sure is that they are updated in atomic fashion.
+ 
+       CV          : aliased System.OS_Interface.pthread_cond_t;
+       L           : aliased RTS_Lock;
+       --  protection for all components is lock L
+ 
+       Active_Priority : System.Any_Priority := System.Any_Priority'First;
+       --  Simulated active priority,
+       --  used only if Priority_Ceiling_Support is True.
+    end record;
+ 
+ end System.Task_Primitives;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-taspri-lynxos.ads gcc-4.0.0/gcc/ada/s-taspri-lynxos.ads
*** gcc-3.4.3/gcc/ada/s-taspri-lynxos.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-taspri-lynxos.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,97 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
+ --                                                                          --
+ --                 S Y S T E M . T A S K _ P R I M I T I V E S              --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2003, Ada Core Technologies               --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a LynxOS version of this package, derived from
+ --  7staspri.ads
+ 
+ pragma Polling (Off);
+ --  Turn off polling, we do not want ATC polling to take place during
+ --  tasking operations. It causes infinite loops and other problems.
+ 
+ with System.OS_Interface;
+ --  used for pthread_mutex_t
+ --           pthread_cond_t
+ --           pthread_t
+ 
+ package System.Task_Primitives is
+ 
+    type Lock is limited private;
+    --  Should be used for implementation of protected objects.
+ 
+    type RTS_Lock is limited private;
+    --  Should be used inside the runtime system.
+    --  The difference between Lock and the RTS_Lock is that the later
+    --  one serves only as a semaphore so that do not check for
+    --  ceiling violations.
+ 
+    type Task_Body_Access is access procedure;
+    --  Pointer to the task body's entry point (or possibly a wrapper
+    --  declared local to the GNARL).
+ 
+    type Private_Data is limited private;
+    --  Any information that the GNULLI needs maintained on a per-task
+    --  basis.  A component of this type is guaranteed to be included
+    --  in the Ada_Task_Control_Block.
+ 
+ private
+ 
+    type Lock is record
+       Mutex          : aliased System.OS_Interface.pthread_mutex_t;
+       Ceiling        : System.Any_Priority;
+       Saved_Priority : System.Any_Priority;
+    end record;
+ 
+    type RTS_Lock is new System.OS_Interface.pthread_mutex_t;
+ 
+    type Private_Data is record
+       Thread : aliased System.OS_Interface.pthread_t;
+       pragma Atomic (Thread);
+       --  Thread field may be updated by two different threads of control.
+       --  (See, Enter_Task and Create_Task in s-taprop.adb).
+       --  They put the same value (thr_self value). We do not want to
+       --  use lock on those operations and the only thing we have to
+       --  make sure is that they are updated in atomic fashion.
+ 
+       LWP : aliased System.Address;
+       --  The purpose of this field is to provide a better tasking support on
+       --  gdb. The order of the two first fields (Thread and LWP) is important.
+       --  On targets where lwp is not relevant, this is equivalent to Thread.
+ 
+       CV : aliased System.OS_Interface.pthread_cond_t;
+ 
+       L  : aliased RTS_Lock;
+       --  Protection for all components is lock L
+    end record;
+ 
+ end System.Task_Primitives;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-taspri-mingw.ads gcc-4.0.0/gcc/ada/s-taspri-mingw.ads
*** gcc-3.4.3/gcc/ada/s-taspri-mingw.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-taspri-mingw.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,97 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                 S Y S T E M . T A S K _ P R I M I T I V E S              --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --          Copyright (C) 1991-2003 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a NT (native) version of this package.
+ 
+ pragma Polling (Off);
+ --  Turn off polling, we do not want ATC polling to take place during
+ --  tasking operations. It causes infinite loops and other problems.
+ 
+ with System.OS_Interface;
+ --  used for pthread_mutex_t
+ --           pthread_cond_t
+ --           pthread_t
+ 
+ package System.Task_Primitives is
+ 
+    type Lock is limited private;
+    --  Should be used for implementation of protected objects.
+ 
+    type RTS_Lock is limited private;
+    --  Should be used inside the runtime system.
+    --  The difference between Lock and the RTS_Lock is that the later
+    --  one serves only as a semaphore so that do not check for
+    --  ceiling violations.
+ 
+    type Task_Body_Access is access procedure;
+    --  Pointer to the task body's entry point (or possibly a wrapper
+    --  declared local to the GNARL).
+ 
+    type Private_Data is limited private;
+    --  Any information that the GNULLI needs maintained on a per-task
+    --  basis.  A component of this type is guaranteed to be included
+    --  in the Ada_Task_Control_Block.
+ 
+ private
+ 
+    type Lock is record
+       Mutex          : aliased System.OS_Interface.CRITICAL_SECTION;
+       Priority       : Integer;
+       Owner_Priority : Integer;
+    end record;
+ 
+    type Condition_Variable is new System.OS_Interface.HANDLE;
+ 
+    type RTS_Lock is new System.OS_Interface.CRITICAL_SECTION;
+ 
+    type Private_Data is record
+       Thread : aliased System.OS_Interface.HANDLE;
+       pragma Atomic (Thread);
+       --  Thread field may be updated by two different threads of control.
+       --  (See, Enter_Task and Create_Task in s-taprop.adb).
+       --  They put the same value (thr_self value). We do not want to
+       --  use lock on those operations and the only thing we have to
+       --  make sure is that they are updated in atomic fashion.
+ 
+       Thread_Id : aliased System.OS_Interface.DWORD;
+       --  The purpose of this field is to provide a better tasking support
+       --  in gdb.
+ 
+       CV : aliased Condition_Variable;
+       --  Condition Variable used to implement Sleep/Wakeup
+ 
+       L : aliased RTS_Lock;
+       --  Protection for all components is lock L
+    end record;
+ 
+ end System.Task_Primitives;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-taspri-os2.ads gcc-4.0.0/gcc/ada/s-taspri-os2.ads
*** gcc-3.4.3/gcc/ada/s-taspri-os2.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-taspri-os2.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,107 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
+ --                                                                          --
+ --                S Y S T E M . T A S K _ P R I M I T I V E S               --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2003, Ada Core Technologies               --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is an OS/2 version of this package.
+ 
+ --  This package provides low-level support for most tasking features.
+ 
+ pragma Polling (Off);
+ --  Turn off polling, we do not want ATC polling to take place during
+ --  tasking operations. It causes infinite loops and other problems.
+ 
+ with Interfaces.OS2Lib.Threads;
+ with Interfaces.OS2Lib.Synchronization;
+ 
+ package System.Task_Primitives is
+ 
+    pragma Preelaborate;
+ 
+ --   type Lock is limited private;
+    --  Should be used for implementation of protected objects.
+ 
+ --   type RTS_Lock is limited private;
+    --  Should be used inside the runtime system.
+    --  The difference between Lock and the RTS_Lock is that the later
+    --  one serves only as a semaphore so that do not check for
+    --  ceiling violations.
+ 
+    type Task_Body_Access is access procedure;
+    --  Pointer to the task body's entry point (or possibly a wrapper
+    --  declared local to the GNARL).
+ 
+ --   type Private_Data is limited private;
+    --  Any information that the GNULLI needs maintained on a per-task
+    --  basis.  A component of this type is guaranteed to be included
+    --  in the Ada_Task_Control_Block.
+ 
+ --  private
+ 
+    type Lock is record
+       Mutex          : aliased Interfaces.OS2Lib.Synchronization.HMTX;
+       Priority       : Integer;
+       Owner_Priority : Integer;
+       Owner_ID       : Address;
+    end record;
+ 
+    type RTS_Lock is new Lock;
+ 
+    type Private_Data is record
+       Thread          : aliased Interfaces.OS2Lib.Threads.TID;
+       pragma Atomic (Thread);
+       --  Thread field may be updated by two different threads of control.
+       --  (See, Enter_Task and Create_Task in s-taprop.adb).
+       --  They put the same value (thr_self value). We do not want to
+       --  use lock on those operations and the only thing we have to
+       --  make sure is that they are updated in atomic fashion.
+ 
+       CV : aliased Interfaces.OS2Lib.Synchronization.HEV;
+ 
+       L  : aliased RTS_Lock;
+       --  Protection for all components is lock L
+ 
+       Current_Priority : Integer := -1;
+       --  The Current_Priority is the actual priority of a thread.
+       --  This field is needed because it is only possible to set a
+       --  delta priority in OS/2. The only places where this field should
+       --  be set are Set_Priority, Create_Task and Initialize (Environment).
+ 
+       Wrapper : Interfaces.OS2Lib.Threads.PFNTHREAD;
+       --  This is the original wrapper passed by Operations.Create_Task.
+       --  When installing an exception handler in a thread, the thread
+       --  starts executing the Exception_Wrapper which calls Wrapper
+       --  when the handler has been installed. The handler is removed when
+       --  wrapper returns.
+    end record;
+ 
+ end System.Task_Primitives;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-taspri-posix.ads gcc-4.0.0/gcc/ada/s-taspri-posix.ads
*** gcc-3.4.3/gcc/ada/s-taspri-posix.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-taspri-posix.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,92 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
+ --                                                                          --
+ --                 S Y S T E M . T A S K _ P R I M I T I V E S              --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --             Copyright (C) 1991-1994, Florida State University            --
+ --             Copyright (C) 1995-2003, Ada Core Technologies               --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a POSIX-like version of this package.
+ --  Note: this file can only be used for POSIX compliant systems.
+ 
+ pragma Polling (Off);
+ --  Turn off polling, we do not want ATC polling to take place during
+ --  tasking operations. It causes infinite loops and other problems.
+ 
+ with System.OS_Interface;
+ --  used for pthread_mutex_t
+ --           pthread_cond_t
+ --           pthread_t
+ 
+ package System.Task_Primitives is
+ 
+    type Lock is limited private;
+    --  Should be used for implementation of protected objects.
+ 
+    type RTS_Lock is limited private;
+    --  Should be used inside the runtime system.
+    --  The difference between Lock and the RTS_Lock is that the later
+    --  one serves only as a semaphore so that do not check for
+    --  ceiling violations.
+ 
+    type Task_Body_Access is access procedure;
+    --  Pointer to the task body's entry point (or possibly a wrapper
+    --  declared local to the GNARL).
+ 
+    type Private_Data is limited private;
+    --  Any information that the GNULLI needs maintained on a per-task
+    --  basis.  A component of this type is guaranteed to be included
+    --  in the Ada_Task_Control_Block.
+ 
+ private
+ 
+    type Lock is new System.OS_Interface.pthread_mutex_t;
+    type RTS_Lock is new System.OS_Interface.pthread_mutex_t;
+ 
+    type Private_Data is record
+       Thread : aliased System.OS_Interface.pthread_t;
+       pragma Atomic (Thread);
+       --  Thread field may be updated by two different threads of control.
+       --  (See, Enter_Task and Create_Task in s-taprop.adb).
+       --  They put the same value (thr_self value). We do not want to
+       --  use lock on those operations and the only thing we have to
+       --  make sure is that they are updated in atomic fashion.
+ 
+       LWP : aliased System.Address;
+       --  The purpose of this field is to provide a better tasking support on
+       --  gdb. The order of the two first fields (Thread and LWP) is important.
+       --  On targets where lwp is not relevant, this is equivalent to Thread.
+ 
+       CV : aliased System.OS_Interface.pthread_cond_t;
+ 
+       L  : aliased RTS_Lock;
+       --  Protection for all components is lock L
+    end record;
+ 
+ end System.Task_Primitives;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-taspri-solaris.ads gcc-4.0.0/gcc/ada/s-taspri-solaris.ads
*** gcc-3.4.3/gcc/ada/s-taspri-solaris.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-taspri-solaris.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,130 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                 S Y S T E M . T A S K _ P R I M I T I V E S              --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a Solaris version of this package
+ 
+ --  This package provides low-level support for most tasking features.
+ 
+ pragma Polling (Off);
+ --  Turn off polling, we do not want ATC polling to take place during
+ --  tasking operations. It causes infinite loops and other problems.
+ 
+ with System.OS_Interface;
+ --  used for mutex_t
+ --           cond_t
+ --           thread_t
+ 
+ with Unchecked_Conversion;
+ 
+ package System.Task_Primitives is
+    pragma Preelaborate;
+ 
+    type Lock is limited private;
+    type Lock_Ptr is access all Lock;
+    --  Should be used for implementation of protected objects
+ 
+    type RTS_Lock is limited private;
+    type RTS_Lock_Ptr is access all RTS_Lock;
+    --  Should be used inside the runtime system.
+    --  The difference between Lock and the RTS_Lock is that the later
+    --  one serves only as a semaphore so that do not check for
+    --  ceiling violations.
+ 
+    function To_Lock_Ptr is new Unchecked_Conversion (RTS_Lock_Ptr, Lock_Ptr);
+ 
+    type Task_Body_Access is access procedure;
+    --  Pointer to the task body's entry point (or possibly a wrapper
+    --  declared local to the GNARL).
+ 
+    type Private_Data is limited private;
+    --  Any information that the GNULLI needs maintained on a per-task
+    --  basis.  A component of this type is guaranteed to be included
+    --  in the Ada_Task_Control_Block.
+ 
+ private
+ 
+    type Private_Task_Serial_Number is mod 2 ** 64;
+    --  Used to give each task a unique serial number.
+ 
+    type Base_Lock is new System.OS_Interface.mutex_t;
+ 
+    type Owner_Int is new Integer;
+    for Owner_Int'Alignment use Standard'Maximum_Alignment;
+ 
+    type Owner_ID is access all Owner_Int;
+ 
+    function To_Owner_ID is
+      new Unchecked_Conversion (System.Address, Owner_ID);
+ 
+    type Lock is record
+       L              : aliased Base_Lock;
+       Ceiling        : System.Any_Priority := System.Any_Priority'First;
+       Saved_Priority : System.Any_Priority :=  System.Any_Priority'First;
+       Owner          : Owner_ID;
+       Next           : Lock_Ptr;
+       Level          : Private_Task_Serial_Number := 0;
+       Buddy          : Owner_ID;
+       Frozen         : Boolean := False;
+    end record;
+ 
+    type RTS_Lock is new Lock;
+ 
+    --  Note that task support on gdb relies on the fact that the first
+    --  2 fields of Private_Data are Thread and LWP.
+ 
+    type Private_Data is record
+       Thread      : aliased System.OS_Interface.thread_t;
+       pragma Atomic (Thread);
+       --  Thread field may be updated by two different threads of control.
+       --  (See, Enter_Task and Create_Task in s-taprop.adb).
+       --  They put the same value (thr_self value). We do not want to
+       --  use lock on those operations and the only thing we have to
+       --  make sure is that they are updated in atomic fashion.
+ 
+       LWP : System.OS_Interface.lwpid_t;
+       --  The LWP id of the thread. Set by self in Enter_Task.
+ 
+       CV : aliased System.OS_Interface.cond_t;
+       L  : aliased RTS_Lock;
+       --  Protection for all components is lock L
+ 
+       Active_Priority : System.Any_Priority := System.Any_Priority'First;
+       --  Simulated active priority,
+       --  used only if Priority_Ceiling_Support is True.
+ 
+       Locking : Lock_Ptr;
+       Locks   : Lock_Ptr;
+       Wakeups : Natural := 0;
+    end record;
+ 
+ end System.Task_Primitives;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-taspri-tru64.ads gcc-4.0.0/gcc/ada/s-taspri-tru64.ads
*** gcc-3.4.3/gcc/ada/s-taspri-tru64.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-taspri-tru64.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,93 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                 S Y S T E M . T A S K _ P R I M I T I V E S              --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --          Copyright (C) 1991-2000 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the DEC Unix 4.0 version of this package.
+ 
+ --  This package provides low-level support for most tasking features.
+ 
+ pragma Polling (Off);
+ --  Turn off polling, we do not want ATC polling to take place during
+ --  tasking operations. It causes infinite loops and other problems.
+ 
+ with Interfaces.C;
+ --  used for int
+ --           size_t
+ 
+ with System.OS_Interface;
+ --  used for pthread_mutex_t
+ --           pthread_cond_t
+ --           pthread_t
+ 
+ package System.Task_Primitives is
+ 
+    type Lock is limited private;
+    --  Should be used for implementation of protected objects.
+ 
+    type RTS_Lock is limited private;
+    --  Should be used inside the runtime system.
+    --  The difference between Lock and the RTS_Lock is that the later
+    --  one serves only as a semaphore so that do not check for
+    --  ceiling violations.
+ 
+    type Task_Body_Access is access procedure;
+    --  Pointer to the task body's entry point (or possibly a wrapper
+    --  declared local to the GNARL).
+ 
+    type Private_Data is limited private;
+    --  Any information that the GNULLI needs maintained on a per-task
+    --  basis.  A component of this type is guaranteed to be included
+    --  in the Ada_Task_Control_Block.
+ 
+ private
+ 
+    type Lock is record
+       L          : aliased System.OS_Interface.pthread_mutex_t;
+       Ceiling    : Interfaces.C.int;
+    end record;
+ 
+    type RTS_Lock is new System.OS_Interface.pthread_mutex_t;
+    type Private_Data is record
+       Thread      : aliased System.OS_Interface.pthread_t;
+       pragma Atomic (Thread);
+       --  Thread field may be updated by two different threads of control.
+       --  (See, Enter_Task and Create_Task in s-taprop.adb).
+       --  They put the same value (thr_self value). We do not want to
+       --  use lock on those operations and the only thing we have to
+       --  make sure is that they are updated in atomic fashion.
+ 
+       CV          : aliased System.OS_Interface.pthread_cond_t;
+       L           : aliased RTS_Lock;
+       --  protection for all components is lock L
+    end record;
+ 
+ end System.Task_Primitives;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-taspri-vms.ads gcc-4.0.0/gcc/ada/s-taspri-vms.ads
*** gcc-3.4.3/gcc/ada/s-taspri-vms.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-taspri-vms.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,105 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                 S Y S T E M . T A S K _ P R I M I T I V E S              --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --          Copyright (C) 1991-2000 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a OpenVMS/Alpha version of this package.
+ 
+ --  This package provides low-level support for most tasking features.
+ 
+ pragma Polling (Off);
+ --  Turn off polling, we do not want ATC polling to take place during
+ --  tasking operations. It causes infinite loops and other problems.
+ 
+ with Interfaces.C;
+ --  used for int
+ --           size_t
+ 
+ with System.OS_Interface;
+ --  used for pthread_mutex_t
+ --           pthread_cond_t
+ --           pthread_t
+ 
+ package System.Task_Primitives is
+ 
+    type Lock is limited private;
+    --  Should be used for implementation of protected objects.
+ 
+    type RTS_Lock is limited private;
+    --  Should be used inside the runtime system.
+    --  The difference between Lock and the RTS_Lock is that the later
+    --  one serves only as a semaphore so that do not check for
+    --  ceiling violations.
+ 
+    type Task_Body_Access is access procedure;
+    --  Pointer to the task body's entry point (or possibly a wrapper
+    --  declared local to the GNARL).
+ 
+    type Private_Data is limited private;
+    --  Any information that the GNULLI needs maintained on a per-task
+    --  basis.  A component of this type is guaranteed to be included
+    --  in the Ada_Task_Control_Block.
+ 
+ private
+ 
+    type Exc_Stack_T is array (0 .. 8192) of aliased Character;
+    for Exc_Stack_T'Alignment use Standard'Maximum_Alignment;
+    type Exc_Stack_Ptr_T is access all Exc_Stack_T;
+ 
+    type Lock is record
+       L         : aliased System.OS_Interface.pthread_mutex_t;
+       Prio      : Interfaces.C.int;
+       Prio_Save : Interfaces.C.int;
+    end record;
+ 
+    type RTS_Lock is new System.OS_Interface.pthread_mutex_t;
+    type Private_Data is record
+       Thread      : aliased System.OS_Interface.pthread_t;
+       pragma Atomic (Thread);
+       --  Thread field may be updated by two different threads of control.
+       --  (See, Enter_Task and Create_Task in s-taprop.adb).
+       --  They put the same value (thr_self value). We do not want to
+       --  use lock on those operations and the only thing we have to
+       --  make sure is that they are updated in atomic fashion.
+ 
+       CV          : aliased System.OS_Interface.pthread_cond_t;
+       L           : aliased RTS_Lock;
+       --  protection for all components is lock L
+ 
+       Exc_Stack_Ptr : Exc_Stack_Ptr_T;
+       --  ??? This needs comments.
+ 
+       AST_Pending : Boolean;
+       --  Used to detect delay and sleep timeouts
+ 
+    end record;
+ 
+ end System.Task_Primitives;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-taspri-vxworks.ads gcc-4.0.0/gcc/ada/s-taspri-vxworks.ads
*** gcc-3.4.3/gcc/ada/s-taspri-vxworks.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-taspri-vxworks.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,95 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
+ --                                                                          --
+ --                 S Y S T E M . T A S K _ P R I M I T I V E S              --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --          Copyright (C) 2001-2002 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a VxWorks version of this package.
+ 
+ pragma Polling (Off);
+ --  Turn off polling, we do not want ATC polling to take place during
+ --  tasking operations. It causes infinite loops and other problems.
+ 
+ with System.OS_Interface;
+ 
+ package System.Task_Primitives is
+ 
+    type Lock is limited private;
+    --  Should be used for implementation of protected objects.
+ 
+    type RTS_Lock is limited private;
+    --  Should be used inside the runtime system.
+    --  The difference between Lock and the RTS_Lock is that the later
+    --  one serves only as a semaphore so that do not check for
+    --  ceiling violations.
+ 
+    type Task_Body_Access is access procedure;
+    --  Pointer to the task body's entry point (or possibly a wrapper
+    --  declared local to the GNARL).
+ 
+    type Private_Data is limited private;
+    --  Any information that the GNULLI needs maintained on a per-task
+    --  basis.  A component of this type is guaranteed to be included
+    --  in the Ada_Task_Control_Block.
+ 
+ private
+ 
+    type Priority_Type is (Prio_None, Prio_Protect, Prio_Inherit);
+ 
+    type Lock is record
+       Mutex        : System.OS_Interface.SEM_ID;
+       Protocol     : Priority_Type;
+       Prio_Ceiling : System.OS_Interface.int;
+       --  priority ceiling of lock
+    end record;
+ 
+    type RTS_Lock is new Lock;
+ 
+    type Private_Data is record
+       Thread : aliased System.OS_Interface.t_id := 0;
+       pragma Atomic (Thread);
+       --  Thread field may be updated by two different threads of control.
+       --  (See, Enter_Task and Create_Task in s-taprop.adb).
+       --  They put the same value (thr_self value). We do not want to
+       --  use lock on those operations and the only thing we have to
+       --  make sure is that they are updated in atomic fashion.
+ 
+       LWP : aliased System.Address;
+       --  The purpose of this field is to provide a better tasking support on
+       --  gdb. The order of the two first fields (Thread and LWP) is important.
+       --  On targets where lwp is not relevant, this is equivalent to Thread.
+ 
+       CV : aliased System.OS_Interface.SEM_ID;
+ 
+       L  : aliased RTS_Lock;
+       --  Protection for all components is lock L
+    end record;
+ 
+ end System.Task_Primitives;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tasque.adb gcc-4.0.0/gcc/ada/s-tasque.adb
*** gcc-3.4.3/gcc/ada/s-tasque.adb	Tue Oct 21 13:42:15 2003
--- gcc-4.0.0/gcc/ada/s-tasque.adb	Mon May 17 13:20:44 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2003, Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2004, Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body System.Tasking.Queuing is
*** 60,66 ****
     Priority_Queuing : constant Boolean := Queuing_Policy = 'P';
  
     procedure Send_Program_Error
!      (Self_ID    : Task_ID;
        Entry_Call : Entry_Call_Link);
     --  Raise Program_Error in the caller of the specified entry call
  
--- 60,66 ----
     Priority_Queuing : constant Boolean := Queuing_Policy = 'P';
  
     procedure Send_Program_Error
!      (Self_ID    : Task_Id;
        Entry_Call : Entry_Call_Link);
     --  Raise Program_Error in the caller of the specified entry call
  
*************** package body System.Tasking.Queuing is
*** 74,80 ****
     -----------------------------
  
     procedure Broadcast_Program_Error
!      (Self_ID      : Task_ID;
        Object       : Protection_Entries_Access;
        Pending_Call : Entry_Call_Link;
        RTS_Locked   : Boolean := False)
--- 74,80 ----
     -----------------------------
  
     procedure Broadcast_Program_Error
!      (Self_ID      : Task_Id;
        Object       : Protection_Entries_Access;
        Pending_Call : Entry_Call_Link;
        RTS_Locked   : Boolean := False)
*************** package body System.Tasking.Queuing is
*** 469,475 ****
     --  queuing policy being used.
  
     procedure Select_Protected_Entry_Call
!      (Self_ID : Task_ID;
        Object  : Protection_Entries_Access;
        Call    : out Entry_Call_Link)
     is
--- 469,475 ----
     --  queuing policy being used.
  
     procedure Select_Protected_Entry_Call
!      (Self_ID : Task_Id;
        Object  : Protection_Entries_Access;
        Call    : out Entry_Call_Link)
     is
*************** package body System.Tasking.Queuing is
*** 547,553 ****
     --  being used.
  
     procedure Select_Task_Entry_Call
!      (Acceptor         : Task_ID;
        Open_Accepts     : Accept_List_Access;
        Call             : out Entry_Call_Link;
        Selection        : out Select_Index;
--- 547,553 ----
     --  being used.
  
     procedure Select_Task_Entry_Call
!      (Acceptor         : Task_Id;
        Open_Accepts     : Accept_List_Access;
        Call             : out Entry_Call_Link;
        Selection        : out Select_Index;
*************** package body System.Tasking.Queuing is
*** 618,627 ****
     ------------------------
  
     procedure Send_Program_Error
!      (Self_ID    : Task_ID;
        Entry_Call : Entry_Call_Link)
     is
!       Caller : Task_ID;
     begin
        Caller := Entry_Call.Self;
        Entry_Call.Exception_To_Raise := Program_Error'Identity;
--- 618,627 ----
     ------------------------
  
     procedure Send_Program_Error
!      (Self_ID    : Task_Id;
        Entry_Call : Entry_Call_Link)
     is
!       Caller : Task_Id;
     begin
        Caller := Entry_Call.Self;
        Entry_Call.Exception_To_Raise := Program_Error'Identity;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tasque.ads gcc-4.0.0/gcc/ada/s-tasque.ads
*** gcc-3.4.3/gcc/ada/s-tasque.ads	Tue Oct 21 13:42:15 2003
--- gcc-4.0.0/gcc/ada/s-tasque.ads	Mon May 17 13:20:44 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --         Copyright (C) 1992-2001, Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --         Copyright (C) 1992-2004, Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package System.Tasking.Queuing is
*** 38,44 ****
     package POE renames System.Tasking.Protected_Objects.Entries;
  
     procedure Broadcast_Program_Error
!      (Self_ID      : Task_ID;
        Object       : POE.Protection_Entries_Access;
        Pending_Call : Entry_Call_Link;
        RTS_Locked   : Boolean := False);
--- 38,44 ----
     package POE renames System.Tasking.Protected_Objects.Entries;
  
     procedure Broadcast_Program_Error
!      (Self_ID      : Task_Id;
        Object       : POE.Protection_Entries_Access;
        Pending_Call : Entry_Call_Link;
        RTS_Locked   : Boolean := False);
*************** package System.Tasking.Queuing is
*** 71,77 ****
     --  Return number of calls on the waiting queue of E
  
     procedure Select_Task_Entry_Call
!      (Acceptor         : Task_ID;
        Open_Accepts     : Accept_List_Access;
        Call             : out Entry_Call_Link;
        Selection        : out Select_Index;
--- 71,77 ----
     --  Return number of calls on the waiting queue of E
  
     procedure Select_Task_Entry_Call
!      (Acceptor         : Task_Id;
        Open_Accepts     : Accept_List_Access;
        Call             : out Entry_Call_Link;
        Selection        : out Select_Index;
*************** package System.Tasking.Queuing is
*** 82,88 ****
     --    Open_Alternative will be True if there were any open alternatives
  
     procedure Select_Protected_Entry_Call
!      (Self_ID   : Task_ID;
        Object    : POE.Protection_Entries_Access;
        Call      : out Entry_Call_Link);
     --  Select an entry of a protected object
--- 82,88 ----
     --    Open_Alternative will be True if there were any open alternatives
  
     procedure Select_Protected_Entry_Call
!      (Self_ID   : Task_Id;
        Object    : POE.Protection_Entries_Access;
        Call      : out Entry_Call_Link);
     --  Select an entry of a protected object
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tasren.adb gcc-4.0.0/gcc/ada/s-tasren.adb
*** gcc-3.4.3/gcc/ada/s-tasren.adb	Tue Oct 21 13:42:15 2003
--- gcc-4.0.0/gcc/ada/s-tasren.adb	Mon Jan  3 15:42:23 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 1992-2003, Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 1992-2004, Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with System.Tasking.Initialization;
*** 55,60 ****
--- 55,61 ----
  --  used for Defer_Abort
  --           Undefer_Abort
  --           Poll_Base_Priority_Change
+ --           Do_Pending_Action
  
  with System.Tasking.Queuing;
  --  used for Enqueue
*************** with System.Tasking.Utilities;
*** 66,77 ****
  --  used for Check_Exception
  --           Make_Passive
  --           Wakeup_Entry_Caller
  
  with System.Tasking.Protected_Objects.Operations;
  --  used for PO_Do_Or_Queue
  --           PO_Service_Entries
  --           Lock_Entries
- --           Unlock_Entries
  
  with System.Tasking.Debug;
  --  used for Trace
--- 67,78 ----
  --  used for Check_Exception
  --           Make_Passive
  --           Wakeup_Entry_Caller
+ --           Exit_One_ATC_Level
  
  with System.Tasking.Protected_Objects.Operations;
  --  used for PO_Do_Or_Queue
  --           PO_Service_Entries
  --           Lock_Entries
  
  with System.Tasking.Debug;
  --  used for Trace
*************** package body System.Tasking.Rendezvous i
*** 102,107 ****
--- 103,112 ----
       Accept_Alternative_Open,
       No_Alternative_Open);
  
+    ----------------
+    -- Local Data --
+    ----------------
+ 
     Default_Treatment : constant array (Select_Modes) of Select_Treatment :=
       (Simple_Mode         => No_Alternative_Open,
        Else_Mode           => Else_Selected,
*************** package body System.Tasking.Rendezvous i
*** 130,139 ****
     -- Local Subprograms --
     -----------------------
  
!    procedure Local_Defer_Abort (Self_Id : Task_ID) renames
       System.Tasking.Initialization.Defer_Abort_Nestable;
  
!    procedure Local_Undefer_Abort (Self_Id : Task_ID) renames
       System.Tasking.Initialization.Undefer_Abort_Nestable;
  
     --  Florist defers abort around critical sections that
--- 135,144 ----
     -- Local Subprograms --
     -----------------------
  
!    procedure Local_Defer_Abort (Self_Id : Task_Id) renames
       System.Tasking.Initialization.Defer_Abort_Nestable;
  
!    procedure Local_Undefer_Abort (Self_Id : Task_Id) renames
       System.Tasking.Initialization.Undefer_Abort_Nestable;
  
     --  Florist defers abort around critical sections that
*************** package body System.Tasking.Rendezvous i
*** 147,158 ****
     --  an earlier abort deferral. Thus, for debugging it may be
     --  wise to modify the above renamings to the non-nestable forms.
  
!    procedure Boost_Priority (Call : Entry_Call_Link; Acceptor : Task_ID);
     pragma Inline (Boost_Priority);
     --  Call this only with abort deferred and holding lock of Acceptor.
  
     procedure Call_Synchronous
!      (Acceptor              : Task_ID;
        E                     : Task_Entry_Index;
        Uninterpreted_Data    : System.Address;
        Mode                  : Call_Modes;
--- 152,163 ----
     --  an earlier abort deferral. Thus, for debugging it may be
     --  wise to modify the above renamings to the non-nestable forms.
  
!    procedure Boost_Priority (Call : Entry_Call_Link; Acceptor : Task_Id);
     pragma Inline (Boost_Priority);
     --  Call this only with abort deferred and holding lock of Acceptor.
  
     procedure Call_Synchronous
!      (Acceptor              : Task_Id;
        E                     : Task_Entry_Index;
        Uninterpreted_Data    : System.Address;
        Mode                  : Call_Modes;
*************** package body System.Tasking.Rendezvous i
*** 163,169 ****
  
     procedure Setup_For_Rendezvous_With_Body
       (Entry_Call : Entry_Call_Link;
!       Acceptor   : Task_ID);
     pragma Inline (Setup_For_Rendezvous_With_Body);
     --  Call this only with abort deferred and holding lock of Acceptor.
     --  When a rendezvous selected (ready for rendezvous) we need to save
--- 168,174 ----
  
     procedure Setup_For_Rendezvous_With_Body
       (Entry_Call : Entry_Call_Link;
!       Acceptor   : Task_Id);
     pragma Inline (Setup_For_Rendezvous_With_Body);
     --  Call this only with abort deferred and holding lock of Acceptor.
     --  When a rendezvous selected (ready for rendezvous) we need to save
*************** package body System.Tasking.Rendezvous i
*** 171,177 ****
     --  this call not Abortable (Cancellable) since the rendezvous has
     --  already been started.
  
!    procedure Wait_For_Call (Self_Id : Task_ID);
     pragma Inline (Wait_For_Call);
     --  Call this only with abort deferred and holding lock of Self_Id.
     --  An accepting task goes into Sleep by calling this routine
--- 176,182 ----
     --  this call not Abortable (Cancellable) since the rendezvous has
     --  already been started.
  
!    procedure Wait_For_Call (Self_Id : Task_Id);
     pragma Inline (Wait_For_Call);
     --  Call this only with abort deferred and holding lock of Self_Id.
     --  An accepting task goes into Sleep by calling this routine
*************** package body System.Tasking.Rendezvous i
*** 186,193 ****
       (E                  : Task_Entry_Index;
        Uninterpreted_Data : out System.Address)
     is
!       Self_Id      : constant Task_ID := STPO.Self;
!       Caller       : Task_ID := null;
        Open_Accepts : aliased Accept_List (1 .. 1);
        Entry_Call   : Entry_Call_Link;
  
--- 191,198 ----
       (E                  : Task_Entry_Index;
        Uninterpreted_Data : out System.Address)
     is
!       Self_Id      : constant Task_Id := STPO.Self;
!       Caller       : Task_Id := null;
        Open_Accepts : aliased Accept_List (1 .. 1);
        Entry_Call   : Entry_Call_Link;
  
*************** package body System.Tasking.Rendezvous i
*** 277,284 ****
     --------------------
  
     procedure Accept_Trivial (E : Task_Entry_Index) is
!       Self_Id      : constant Task_ID := STPO.Self;
!       Caller       : Task_ID := null;
        Open_Accepts : aliased Accept_List (1 .. 1);
        Entry_Call   : Entry_Call_Link;
  
--- 282,289 ----
     --------------------
  
     procedure Accept_Trivial (E : Task_Entry_Index) is
!       Self_Id      : constant Task_Id := STPO.Self;
!       Caller       : Task_Id := null;
        Open_Accepts : aliased Accept_List (1 .. 1);
        Entry_Call   : Entry_Call_Link;
  
*************** package body System.Tasking.Rendezvous i
*** 366,373 ****
     -- Boost_Priority --
     --------------------
  
!    procedure Boost_Priority (Call : Entry_Call_Link; Acceptor : Task_ID) is
!       Caller        : constant Task_ID := Call.Self;
        Caller_Prio   : constant System.Any_Priority := Get_Priority (Caller);
        Acceptor_Prio : constant System.Any_Priority := Get_Priority (Acceptor);
  
--- 371,378 ----
     -- Boost_Priority --
     --------------------
  
!    procedure Boost_Priority (Call : Entry_Call_Link; Acceptor : Task_Id) is
!       Caller        : constant Task_Id := Call.Self;
        Caller_Prio   : constant System.Any_Priority := Get_Priority (Caller);
        Acceptor_Prio : constant System.Any_Priority := Get_Priority (Acceptor);
  
*************** package body System.Tasking.Rendezvous i
*** 386,397 ****
     -----------------
  
     procedure Call_Simple
!      (Acceptor           : Task_ID;
        E                  : Task_Entry_Index;
        Uninterpreted_Data : System.Address)
     is
        Rendezvous_Successful : Boolean;
     begin
        Call_Synchronous
          (Acceptor, E, Uninterpreted_Data, Simple_Call, Rendezvous_Successful);
     end Call_Simple;
--- 391,414 ----
     -----------------
  
     procedure Call_Simple
!      (Acceptor           : Task_Id;
        E                  : Task_Entry_Index;
        Uninterpreted_Data : System.Address)
     is
        Rendezvous_Successful : Boolean;
+ 
     begin
+       --  If pragma Detect_Blocking is active then Program_Error must be
+       --  raised if this potentially blocking operation is called from a
+       --  protected action.
+ 
+       if System.Tasking.Detect_Blocking
+         and then STPO.Self.Common.Protected_Action_Nesting > 0
+       then
+          Ada.Exceptions.Raise_Exception
+            (Program_Error'Identity, "potentially blocking operation");
+       end if;
+ 
        Call_Synchronous
          (Acceptor, E, Uninterpreted_Data, Simple_Call, Rendezvous_Successful);
     end Call_Simple;
*************** package body System.Tasking.Rendezvous i
*** 401,413 ****
     ----------------------
  
     procedure Call_Synchronous
!      (Acceptor              : Task_ID;
        E                     : Task_Entry_Index;
        Uninterpreted_Data    : System.Address;
        Mode                  : Call_Modes;
        Rendezvous_Successful : out Boolean)
     is
!       Self_Id    : constant Task_ID := STPO.Self;
        Level      : ATC_Level;
        Entry_Call : Entry_Call_Link;
  
--- 418,430 ----
     ----------------------
  
     procedure Call_Synchronous
!      (Acceptor              : Task_Id;
        E                     : Task_Entry_Index;
        Uninterpreted_Data    : System.Address;
        Mode                  : Call_Modes;
        Rendezvous_Successful : out Boolean)
     is
!       Self_Id    : constant Task_Id := STPO.Self;
        Level      : ATC_Level;
        Entry_Call : Entry_Call_Link;
  
*************** package body System.Tasking.Rendezvous i
*** 453,459 ****
        if not Task_Do_Or_Queue
          (Self_Id, Entry_Call, With_Abort => True)
        then
!          Self_Id.ATC_Nesting_Level := Self_Id.ATC_Nesting_Level - 1;
  
           if Single_Lock then
              Unlock_RTS;
--- 470,478 ----
        if not Task_Do_Or_Queue
          (Self_Id, Entry_Call, With_Abort => True)
        then
!          STPO.Write_Lock (Self_Id);
!          Utilities.Exit_One_ATC_Level (Self_Id);
!          STPO.Unlock (Self_Id);
  
           if Single_Lock then
              Unlock_RTS;
*************** package body System.Tasking.Rendezvous i
*** 464,472 ****
           end if;
  
           Initialization.Undefer_Abort (Self_Id);
-          pragma Debug
-            (Debug.Trace (Self_Id, "CS: exited to ATC level: " &
-             ATC_Level'Image (Self_Id.ATC_Nesting_Level), 'A'));
           raise Tasking_Error;
        end if;
  
--- 483,488 ----
*************** package body System.Tasking.Rendezvous i
*** 491,499 ****
     -- Callable --
     --------------
  
!    function Callable (T : Task_ID) return Boolean is
        Result  : Boolean;
!       Self_Id : constant Task_ID := STPO.Self;
  
     begin
        Initialization.Defer_Abort (Self_Id);
--- 507,515 ----
     -- Callable --
     --------------
  
!    function Callable (T : Task_Id) return Boolean is
        Result  : Boolean;
!       Self_Id : constant Task_Id := STPO.Self;
  
     begin
        Initialization.Defer_Abort (Self_Id);
*************** package body System.Tasking.Rendezvous i
*** 539,547 ****
     procedure Exceptional_Complete_Rendezvous
       (Ex : Ada.Exceptions.Exception_Id)
     is
!       Self_Id    : constant Task_ID := STPO.Self;
        Entry_Call : Entry_Call_Link := Self_Id.Common.Call;
!       Caller     : Task_ID;
        Called_PO  : STPE.Protection_Entries_Access;
  
        Exception_To_Raise : Ada.Exceptions.Exception_Id := Ex;
--- 555,563 ----
     procedure Exceptional_Complete_Rendezvous
       (Ex : Ada.Exceptions.Exception_Id)
     is
!       Self_Id    : constant Task_Id := STPO.Self;
        Entry_Call : Entry_Call_Link := Self_Id.Common.Call;
!       Caller     : Task_Id;
        Called_PO  : STPE.Protection_Entries_Access;
  
        Exception_To_Raise : Ada.Exceptions.Exception_Id := Ex;
*************** package body System.Tasking.Rendezvous i
*** 678,684 ****
                      (Self_Id, Called_PO, Entry_Call,
                       Entry_Call.Requeue_With_Abort);
                    POO.PO_Service_Entries (Self_Id, Called_PO);
-                   STPE.Unlock_Entries (Called_PO);
                 end if;
              end if;
  
--- 694,699 ----
*************** package body System.Tasking.Rendezvous i
*** 734,740 ****
  
     procedure Requeue_Protected_To_Task_Entry
       (Object     : STPE.Protection_Entries_Access;
!       Acceptor   : Task_ID;
        E          : Task_Entry_Index;
        With_Abort : Boolean)
     is
--- 749,755 ----
  
     procedure Requeue_Protected_To_Task_Entry
       (Object     : STPE.Protection_Entries_Access;
!       Acceptor   : Task_Id;
        E          : Task_Entry_Index;
        With_Abort : Boolean)
     is
*************** package body System.Tasking.Rendezvous i
*** 754,764 ****
     ------------------------
  
     procedure Requeue_Task_Entry
!      (Acceptor   : Task_ID;
        E          : Task_Entry_Index;
        With_Abort : Boolean)
     is
!       Self_Id    : constant Task_ID := STPO.Self;
        Entry_Call : constant Entry_Call_Link := Self_Id.Common.Call;
  
     begin
--- 769,779 ----
     ------------------------
  
     procedure Requeue_Task_Entry
!      (Acceptor   : Task_Id;
        E          : Task_Entry_Index;
        With_Abort : Boolean)
     is
!       Self_Id    : constant Task_Id := STPO.Self;
        Entry_Call : constant Entry_Call_Link := Self_Id.Common.Call;
  
     begin
*************** package body System.Tasking.Rendezvous i
*** 780,789 ****
        Uninterpreted_Data : out System.Address;
        Index              : out Select_Index)
     is
!       Self_Id          : constant Task_ID := STPO.Self;
        Entry_Call       : Entry_Call_Link;
        Treatment        : Select_Treatment;
!       Caller           : Task_ID;
        Selection        : Select_Index;
        Open_Alternative : Boolean;
  
--- 795,804 ----
        Uninterpreted_Data : out System.Address;
        Index              : out Select_Index)
     is
!       Self_Id          : constant Task_Id := STPO.Self;
        Entry_Call       : Entry_Call_Link;
        Treatment        : Select_Treatment;
!       Caller           : Task_Id;
        Selection        : Select_Index;
        Open_Alternative : Boolean;
  
*************** package body System.Tasking.Rendezvous i
*** 810,816 ****
           --  ??? In some cases abort is deferred more than once. Need to
           --  figure out why this happens.
  
!          Self_Id.Deferral_Level := 1;
  
           Initialization.Undefer_Abort (Self_Id);
  
--- 825,833 ----
           --  ??? In some cases abort is deferred more than once. Need to
           --  figure out why this happens.
  
!          if Self_Id.Deferral_Level > 1 then
!             Self_Id.Deferral_Level := 1;
!          end if;
  
           Initialization.Undefer_Abort (Self_Id);
  
*************** package body System.Tasking.Rendezvous i
*** 956,963 ****
                 pragma Assert (Self_Id.Pending_ATC_Level = 0);
                 pragma Assert (Self_Id.Awake_Count = 0);
  
!                --  Trust that it is OK to fall through.
!                null;
  
              else
                 --  Self_Id.Common.Call and Self_Id.Chosen_Index
--- 973,992 ----
                 pragma Assert (Self_Id.Pending_ATC_Level = 0);
                 pragma Assert (Self_Id.Awake_Count = 0);
  
!                STPO.Unlock (Self_Id);
! 
!                if Single_Lock then
!                   Unlock_RTS;
!                end if;
! 
!                Index := Self_Id.Chosen_Index;
!                Initialization.Undefer_Abort_Nestable (Self_Id);
! 
!                if Self_Id.Pending_Action then
!                   Initialization.Do_Pending_Action (Self_Id);
!                end if;
! 
!                return;
  
              else
                 --  Self_Id.Common.Call and Self_Id.Chosen_Index
*************** package body System.Tasking.Rendezvous i
*** 1035,1041 ****
  
     procedure Setup_For_Rendezvous_With_Body
       (Entry_Call : Entry_Call_Link;
!       Acceptor   : Task_ID) is
     begin
        Entry_Call.Acceptor_Prev_Call := Acceptor.Common.Call;
        Acceptor.Common.Call := Entry_Call;
--- 1064,1070 ----
  
     procedure Setup_For_Rendezvous_With_Body
       (Entry_Call : Entry_Call_Link;
!       Acceptor   : Task_Id) is
     begin
        Entry_Call.Acceptor_Prev_Call := Acceptor.Common.Call;
        Acceptor.Common.Call := Entry_Call;
*************** package body System.Tasking.Rendezvous i
*** 1052,1058 ****
     ----------------
  
     function Task_Count (E : Task_Entry_Index) return Natural is
!       Self_Id      : constant Task_ID := STPO.Self;
        Return_Count : Natural;
  
     begin
--- 1081,1087 ----
     ----------------
  
     function Task_Count (E : Task_Entry_Index) return Natural is
!       Self_Id      : constant Task_Id := STPO.Self;
        Return_Count : Natural;
  
     begin
*************** package body System.Tasking.Rendezvous i
*** 1079,1093 ****
     ----------------------
  
     function Task_Do_Or_Queue
!      (Self_ID    : Task_ID;
        Entry_Call : Entry_Call_Link;
        With_Abort : Boolean) return Boolean
     is
        E             : constant Task_Entry_Index :=
          Task_Entry_Index (Entry_Call.E);
        Old_State     : constant Entry_Call_State := Entry_Call.State;
!       Acceptor      : constant Task_ID := Entry_Call.Called_Task;
!       Parent        : constant Task_ID := Acceptor.Common.Parent;
        Parent_Locked : Boolean := False;
        Null_Body     : Boolean;
  
--- 1108,1122 ----
     ----------------------
  
     function Task_Do_Or_Queue
!      (Self_ID    : Task_Id;
        Entry_Call : Entry_Call_Link;
        With_Abort : Boolean) return Boolean
     is
        E             : constant Task_Entry_Index :=
          Task_Entry_Index (Entry_Call.E);
        Old_State     : constant Entry_Call_State := Entry_Call.State;
!       Acceptor      : constant Task_Id := Entry_Call.Called_Task;
!       Parent        : constant Task_Id := Acceptor.Common.Parent;
        Parent_Locked : Boolean := False;
        Null_Body     : Boolean;
  
*************** package body System.Tasking.Rendezvous i
*** 1299,1314 ****
     ---------------------
  
     procedure Task_Entry_Call
!      (Acceptor              : Task_ID;
        E                     : Task_Entry_Index;
        Uninterpreted_Data    : System.Address;
        Mode                  : Call_Modes;
        Rendezvous_Successful : out Boolean)
     is
!       Self_Id    : constant Task_ID := STPO.Self;
        Entry_Call : Entry_Call_Link;
  
     begin
        if Parameters.Runtime_Traces then
           Send_Trace_Info (W_Call, Acceptor, Entry_Index (E));
        end if;
--- 1328,1354 ----
     ---------------------
  
     procedure Task_Entry_Call
!      (Acceptor              : Task_Id;
        E                     : Task_Entry_Index;
        Uninterpreted_Data    : System.Address;
        Mode                  : Call_Modes;
        Rendezvous_Successful : out Boolean)
     is
!       Self_Id    : constant Task_Id := STPO.Self;
        Entry_Call : Entry_Call_Link;
  
     begin
+       --  If pragma Detect_Blocking is active then Program_Error must be
+       --  raised if this potentially blocking operation is called from a
+       --  protected action.
+ 
+       if System.Tasking.Detect_Blocking
+         and then Self_Id.Common.Protected_Action_Nesting > 0
+       then
+          Ada.Exceptions.Raise_Exception
+            (Program_Error'Identity, "potentially blocking operation");
+       end if;
+ 
        if Parameters.Runtime_Traces then
           Send_Trace_Info (W_Call, Acceptor, Entry_Index (E));
        end if;
*************** package body System.Tasking.Rendezvous i
*** 1349,1358 ****
           if not Task_Do_Or_Queue
             (Self_Id, Entry_Call, With_Abort => True)
           then
!             Self_Id.ATC_Nesting_Level := Self_Id.ATC_Nesting_Level - 1;
!             pragma Debug
!               (Debug.Trace (Self_Id, "TEC: exited to ATC level: " &
!                ATC_Level'Image (Self_Id.ATC_Nesting_Level), 'A'));
  
              if Single_Lock then
                 Unlock_RTS;
--- 1389,1397 ----
           if not Task_Do_Or_Queue
             (Self_Id, Entry_Call, With_Abort => True)
           then
!             STPO.Write_Lock (Self_Id);
!             Utilities.Exit_One_ATC_Level (Self_Id);
!             STPO.Unlock (Self_Id);
  
              if Single_Lock then
                 Unlock_RTS;
*************** package body System.Tasking.Rendezvous i
*** 1392,1399 ****
     -- Task_Entry_Caller --
     -----------------------
  
!    function Task_Entry_Caller (D : Task_Entry_Nesting_Depth) return Task_ID is
!       Self_Id    : constant Task_ID := STPO.Self;
        Entry_Call : Entry_Call_Link;
  
     begin
--- 1431,1438 ----
     -- Task_Entry_Caller --
     -----------------------
  
!    function Task_Entry_Caller (D : Task_Entry_Nesting_Depth) return Task_Id is
!       Self_Id    : constant Task_Id := STPO.Self;
        Entry_Call : Entry_Call_Link;
  
     begin
*************** package body System.Tasking.Rendezvous i
*** 1419,1428 ****
        Mode               : Delay_Modes;
        Index              : out Select_Index)
     is
!       Self_Id          : constant Task_ID := STPO.Self;
        Treatment        : Select_Treatment;
        Entry_Call       : Entry_Call_Link;
!       Caller           : Task_ID;
        Selection        : Select_Index;
        Open_Alternative : Boolean;
        Timedout         : Boolean := False;
--- 1458,1467 ----
        Mode               : Delay_Modes;
        Index              : out Select_Index)
     is
!       Self_Id          : constant Task_Id := STPO.Self;
        Treatment        : Select_Treatment;
        Entry_Call       : Entry_Call_Link;
!       Caller           : Task_Id;
        Selection        : Select_Index;
        Open_Alternative : Boolean;
        Timedout         : Boolean := False;
*************** package body System.Tasking.Rendezvous i
*** 1656,1674 ****
     ---------------------------
  
     procedure Timed_Task_Entry_Call
!      (Acceptor              : Task_ID;
        E                     : Task_Entry_Index;
        Uninterpreted_Data    : System.Address;
        Timeout               : Duration;
        Mode                  : Delay_Modes;
        Rendezvous_Successful : out Boolean)
     is
!       Self_Id    : constant Task_ID := STPO.Self;
        Level      : ATC_Level;
        Entry_Call : Entry_Call_Link;
        Yielded    : Boolean;
  
     begin
        Initialization.Defer_Abort (Self_Id);
        Self_Id.ATC_Nesting_Level := Self_Id.ATC_Nesting_Level + 1;
  
--- 1695,1724 ----
     ---------------------------
  
     procedure Timed_Task_Entry_Call
!      (Acceptor              : Task_Id;
        E                     : Task_Entry_Index;
        Uninterpreted_Data    : System.Address;
        Timeout               : Duration;
        Mode                  : Delay_Modes;
        Rendezvous_Successful : out Boolean)
     is
!       Self_Id    : constant Task_Id := STPO.Self;
        Level      : ATC_Level;
        Entry_Call : Entry_Call_Link;
        Yielded    : Boolean;
  
     begin
+       --  If pragma Detect_Blocking is active then Program_Error must be
+       --  raised if this potentially blocking operation is called from a
+       --  protected action.
+ 
+       if System.Tasking.Detect_Blocking
+         and then Self_Id.Common.Protected_Action_Nesting > 0
+       then
+          Ada.Exceptions.Raise_Exception
+            (Program_Error'Identity, "potentially blocking operation");
+       end if;
+ 
        Initialization.Defer_Abort (Self_Id);
        Self_Id.ATC_Nesting_Level := Self_Id.ATC_Nesting_Level + 1;
  
*************** package body System.Tasking.Rendezvous i
*** 1712,1722 ****
        if not Task_Do_Or_Queue
         (Self_Id, Entry_Call, With_Abort => True)
        then
!          Self_Id.ATC_Nesting_Level := Self_Id.ATC_Nesting_Level - 1;
! 
!          pragma Debug
!            (Debug.Trace (Self_Id, "TTEC: exited to ATC level: " &
!             ATC_Level'Image (Self_Id.ATC_Nesting_Level), 'A'));
  
           if Single_Lock then
              Unlock_RTS;
--- 1762,1770 ----
        if not Task_Do_Or_Queue
         (Self_Id, Entry_Call, With_Abort => True)
        then
!          STPO.Write_Lock (Self_Id);
!          Utilities.Exit_One_ATC_Level (Self_Id);
!          STPO.Unlock (Self_Id);
  
           if Single_Lock then
              Unlock_RTS;
*************** package body System.Tasking.Rendezvous i
*** 1750,1756 ****
     -- Wait_For_Call --
     -------------------
  
!    procedure Wait_For_Call (Self_Id : Task_ID) is
     begin
        --  Try to remove calls to Sleep in the loop below by letting the caller
        --  a chance of getting ready immediately, using Unlock & Yield.
--- 1798,1804 ----
     -- Wait_For_Call --
     -------------------
  
!    procedure Wait_For_Call (Self_Id : Task_Id) is
     begin
        --  Try to remove calls to Sleep in the loop below by letting the caller
        --  a chance of getting ready immediately, using Unlock & Yield.
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tasren.ads gcc-4.0.0/gcc/ada/s-tasren.ads
*** gcc-3.4.3/gcc/ada/s-tasren.ads	Tue Oct 21 13:42:15 2003
--- gcc-4.0.0/gcc/ada/s-tasren.ads	Mon May 17 13:20:45 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2001, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package System.Tasking.Rendezvous is
*** 45,51 ****
     package STPE renames System.Tasking.Protected_Objects.Entries;
  
     procedure Task_Entry_Call
!      (Acceptor              : Task_ID;
        E                     : Task_Entry_Index;
        Uninterpreted_Data    : System.Address;
        Mode                  : Call_Modes;
--- 45,51 ----
     package STPE renames System.Tasking.Protected_Objects.Entries;
  
     procedure Task_Entry_Call
!      (Acceptor              : Task_Id;
        E                     : Task_Entry_Index;
        Uninterpreted_Data    : System.Address;
        Mode                  : Call_Modes;
*************** package System.Tasking.Rendezvous is
*** 61,67 ****
     --  Rendezvous_Successful is set to True on return if the call was serviced.
  
     procedure Timed_Task_Entry_Call
!      (Acceptor              : Task_ID;
        E                     : Task_Entry_Index;
        Uninterpreted_Data    : System.Address;
        Timeout               : Duration;
--- 61,67 ----
     --  Rendezvous_Successful is set to True on return if the call was serviced.
  
     procedure Timed_Task_Entry_Call
!      (Acceptor              : Task_Id;
        E                     : Task_Entry_Index;
        Uninterpreted_Data    : System.Address;
        Timeout               : Duration;
*************** package System.Tasking.Rendezvous is
*** 74,80 ****
     --  Mode determines whether the delay is relative or absolute.
  
     procedure Call_Simple
!      (Acceptor           : Task_ID;
        E                  : Task_Entry_Index;
        Uninterpreted_Data : System.Address);
     --  Simple entry call.
--- 74,80 ----
     --  Mode determines whether the delay is relative or absolute.
  
     procedure Call_Simple
!      (Acceptor           : Task_Id;
        E                  : Task_Entry_Index;
        Uninterpreted_Data : System.Address);
     --  Simple entry call.
*************** package System.Tasking.Rendezvous is
*** 100,106 ****
     --  See Exp_Ch9.Expand_N_Asynchronous_Select for code expansion.
  
     procedure Requeue_Task_Entry
!      (Acceptor   : Task_ID;
        E          : Task_Entry_Index;
        With_Abort : Boolean);
     --  Requeue from a task entry to a task entry.
--- 100,106 ----
     --  See Exp_Ch9.Expand_N_Asynchronous_Select for code expansion.
  
     procedure Requeue_Task_Entry
!      (Acceptor   : Task_Id;
        E          : Task_Entry_Index;
        With_Abort : Boolean);
     --  Requeue from a task entry to a task entry.
*************** package System.Tasking.Rendezvous is
*** 136,142 ****
  
     procedure Requeue_Protected_To_Task_Entry
       (Object     : STPE.Protection_Entries_Access;
!       Acceptor   : Task_ID;
        E          : Task_Entry_Index;
        With_Abort : Boolean);
     --  Requeue from a protected entry to a task entry.
--- 136,142 ----
  
     procedure Requeue_Protected_To_Task_Entry
       (Object     : STPE.Protection_Entries_Access;
!       Acceptor   : Task_Id;
        E          : Task_Entry_Index;
        With_Abort : Boolean);
     --  Requeue from a protected entry to a task entry.
*************** package System.Tasking.Rendezvous is
*** 294,300 ****
     --  Return number of tasks waiting on the entry E (of current task)
     --  Compiler interface only. Do not call from within the RTS.
  
!    function Callable (T : Task_ID) return Boolean;
     --  Return T'Callable
     --  Compiler interface. Do not call from within the RTS, except for body of
     --  Ada.Task_Identification.
--- 294,300 ----
     --  Return number of tasks waiting on the entry E (of current task)
     --  Compiler interface only. Do not call from within the RTS.
  
!    function Callable (T : Task_Id) return Boolean;
     --  Return T'Callable
     --  Compiler interface. Do not call from within the RTS, except for body of
     --  Ada.Task_Identification.
*************** package System.Tasking.Rendezvous is
*** 302,308 ****
     type Task_Entry_Nesting_Depth is new Task_Entry_Index
       range 0 .. Max_Task_Entry;
  
!    function Task_Entry_Caller (D : Task_Entry_Nesting_Depth) return Task_ID;
     --  Return E'Caller. This will only work if called from within an
     --  accept statement that is handling E, as required by the LRM (C.7.1(14)).
     --  Compiler interface only. Do not call from within the RTS.
--- 302,308 ----
     type Task_Entry_Nesting_Depth is new Task_Entry_Index
       range 0 .. Max_Task_Entry;
  
!    function Task_Entry_Caller (D : Task_Entry_Nesting_Depth) return Task_Id;
     --  Return E'Caller. This will only work if called from within an
     --  accept statement that is handling E, as required by the LRM (C.7.1(14)).
     --  Compiler interface only. Do not call from within the RTS.
*************** package System.Tasking.Rendezvous is
*** 318,324 ****
     --  For internal use only:
  
     function Task_Do_Or_Queue
!      (Self_ID    : Task_ID;
        Entry_Call : Entry_Call_Link;
        With_Abort : Boolean) return Boolean;
     --  Call this only with abort deferred and holding no locks, except
--- 318,324 ----
     --  For internal use only:
  
     function Task_Do_Or_Queue
!      (Self_ID    : Task_Id;
        Entry_Call : Entry_Call_Link;
        With_Abort : Boolean) return Boolean;
     --  Call this only with abort deferred and holding no locks, except
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tassta.adb gcc-4.0.0/gcc/ada/s-tassta.adb
*** gcc-3.4.3/gcc/ada/s-tassta.adb	Wed Dec  3 11:47:53 2003
--- gcc-4.0.0/gcc/ada/s-tassta.adb	Thu Feb 10 13:54:45 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2003, Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2005, Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with System.Finalization_Implementation;
*** 98,107 ****
  --  Used for System.Finalization_Implementation.Finalize_Global_List
  
  with System.Secondary_Stack;
! --  used for SS_Init;
  
  with System.Storage_Elements;
! --  used for Storage_Array;
  
  with System.Standard_Library;
  --  used for Exception_Trace
--- 98,110 ----
  --  Used for System.Finalization_Implementation.Finalize_Global_List
  
  with System.Secondary_Stack;
! --  used for SS_Init
  
  with System.Storage_Elements;
! --  used for Storage_Array
! 
! with System.Restrictions;
! --  used for Abort_Allowed
  
  with System.Standard_Library;
  --  used for Exception_Trace
*************** with System.Standard_Library;
*** 109,114 ****
--- 112,120 ----
  with System.Traces.Tasking;
  --  used for Send_Trace_Info
  
+ with Unchecked_Deallocation;
+ --  To recover from failure of ATCB initialization.
+ 
  package body System.Tasking.Stages is
  
     package STPO renames System.Task_Primitives.Operations;
*************** package body System.Tasking.Stages is
*** 130,169 ****
     -- Local Subprograms --
     -----------------------
  
!    procedure Trace_Unhandled_Exception_In_Task (Self_Id : Task_ID);
     --  This procedure outputs the task specific message for exception
     --  tracing purposes.
  
!    procedure Task_Wrapper (Self_ID : Task_ID);
!    --  This is the procedure that is called by the GNULL from the
!    --  new context when a task is created. It waits for activation
!    --  and then calls the task body procedure. When the task body
!    --  procedure completes, it terminates the task.
  
!    procedure Vulnerable_Complete_Task (Self_ID : Task_ID);
!    --  Complete the calling task.
!    --  This procedure must be called with abort deferred.
!    --  It should only be called by Complete_Task and
     --  Finalizate_Global_Tasks (for the environment task).
  
!    procedure Vulnerable_Complete_Master (Self_ID : Task_ID);
!    --  Complete the current master of the calling task.
!    --  This procedure must be called with abort deferred.
!    --  It should only be called by Vulnerable_Complete_Task and
!    --  Complete_Master.
  
!    procedure Vulnerable_Complete_Activation (Self_ID : Task_ID);
!    --  Signal to Self_ID's activator that Self_ID has
!    --  completed activation.
!    --
!    --  Call this procedure with abort deferred.
  
!    procedure Abort_Dependents (Self_ID : Task_ID);
     --  Abort all the direct dependents of Self at its current master
     --  nesting level, plus all of their dependents, transitively.
     --  RTS_Lock should be locked by the caller.
  
!    procedure Vulnerable_Free_Task (T : Task_ID);
     --  Recover all runtime system storage associated with the task T.
     --  This should only be called after T has terminated and will no
     --  longer be referenced.
--- 136,182 ----
     -- Local Subprograms --
     -----------------------
  
!    procedure Free is new
!      Unchecked_Deallocation (Ada_Task_Control_Block, Task_Id);
! 
!    procedure Trace_Unhandled_Exception_In_Task (Self_Id : Task_Id);
     --  This procedure outputs the task specific message for exception
     --  tracing purposes.
  
!    procedure Task_Wrapper (Self_ID : Task_Id);
!    pragma Convention (C, Task_Wrapper);
!    --  This is the procedure that is called by the GNULL from the new context
!    --  when a task is created. It waits for activation and then calls the task
!    --  body procedure. When the task body procedure completes, it terminates
!    --  the task.
!    --
!    --  The Task_Wrapper's address will be provided to the underlying threads
!    --  library as the task entry point. Convention C is what makes most sense
!    --  for that purpose (Export C would make the function globally visible,
!    --  and affect the link name on which GDB depends). This will in addition
!    --  trigger an automatic stack alignment suitable for GCC's assumptions if
!    --  need be.
  
!    procedure Vulnerable_Complete_Task (Self_ID : Task_Id);
!    --  Complete the calling task. This procedure must be called with
!    --  abort deferred. It should only be called by Complete_Task and
     --  Finalizate_Global_Tasks (for the environment task).
  
!    procedure Vulnerable_Complete_Master (Self_ID : Task_Id);
!    --  Complete the current master of the calling task. This procedure
!    --  must be called with abort deferred. It should only be called by
!    --  Vulnerable_Complete_Task and Complete_Master.
  
!    procedure Vulnerable_Complete_Activation (Self_ID : Task_Id);
!    --  Signal to Self_ID's activator that Self_ID has completed activation.
!    --  This procedure must be called with abort deferred.
  
!    procedure Abort_Dependents (Self_ID : Task_Id);
     --  Abort all the direct dependents of Self at its current master
     --  nesting level, plus all of their dependents, transitively.
     --  RTS_Lock should be locked by the caller.
  
!    procedure Vulnerable_Free_Task (T : Task_Id);
     --  Recover all runtime system storage associated with the task T.
     --  This should only be called after T has terminated and will no
     --  longer be referenced.
*************** package body System.Tasking.Stages is
*** 181,198 ****
     -- Abort_Dependents --
     ----------------------
  
!    procedure Abort_Dependents (Self_ID : Task_ID) is
!       C : Task_ID;
!       P : Task_ID;
  
     begin
        C := All_Tasks_List;
- 
        while C /= null loop
           P := C.Common.Parent;
- 
           while P /= null loop
              if P = Self_ID then
                 --  ??? C is supposed to take care of its own dependents, so
                 --  there should be no need to worry about them. Need to double
                 --  check this.
--- 194,210 ----
     -- Abort_Dependents --
     ----------------------
  
!    procedure Abort_Dependents (Self_ID : Task_Id) is
!       C : Task_Id;
!       P : Task_Id;
  
     begin
        C := All_Tasks_List;
        while C /= null loop
           P := C.Common.Parent;
           while P /= null loop
              if P = Self_ID then
+ 
                 --  ??? C is supposed to take care of its own dependents, so
                 --  there should be no need to worry about them. Need to double
                 --  check this.
*************** package body System.Tasking.Stages is
*** 220,225 ****
--- 232,248 ----
  
     procedure Abort_Tasks (Tasks : Task_List) is
     begin
+       --  If pragma Detect_Blocking is active then Program_Error must be
+       --  raised if this potentially blocking operation is called from a
+       --  protected action.
+ 
+       if System.Tasking.Detect_Blocking
+         and then STPO.Self.Common.Protected_Action_Nesting > 0
+       then
+          Ada.Exceptions.Raise_Exception
+            (Program_Error'Identity, "potentially blocking operation");
+       end if;
+ 
        Utilities.Abort_Tasks (Tasks);
     end Abort_Tasks;
  
*************** package body System.Tasking.Stages is
*** 251,265 ****
     --  operation is done in a separate pass over the activation chain.
  
     procedure Activate_Tasks (Chain_Access : Activation_Chain_Access) is
!       Self_ID        : constant Task_ID := STPO.Self;
!       P              : Task_ID;
!       C              : Task_ID;
!       Next_C, Last_C : Task_ID;
        Activate_Prio  : System.Any_Priority;
        Success        : Boolean;
        All_Elaborated : Boolean := True;
  
     begin
        pragma Debug
          (Debug.Trace (Self_ID, "Activate_Tasks", 'C'));
  
--- 274,298 ----
     --  operation is done in a separate pass over the activation chain.
  
     procedure Activate_Tasks (Chain_Access : Activation_Chain_Access) is
!       Self_ID        : constant Task_Id := STPO.Self;
!       P              : Task_Id;
!       C              : Task_Id;
!       Next_C, Last_C : Task_Id;
        Activate_Prio  : System.Any_Priority;
        Success        : Boolean;
        All_Elaborated : Boolean := True;
  
     begin
+       --  If pragma Detect_Blocking is active, then we must check whether this
+       --  potentially blocking operation is called from a protected action.
+ 
+       if System.Tasking.Detect_Blocking
+         and then Self_ID.Common.Protected_Action_Nesting > 0
+       then
+          Ada.Exceptions.Raise_Exception
+            (Program_Error'Identity, "potentially blocking operation");
+       end if;
+ 
        pragma Debug
          (Debug.Trace (Self_ID, "Activate_Tasks", 'C'));
  
*************** package body System.Tasking.Stages is
*** 267,282 ****
  
        pragma Assert (Self_ID.Common.Wait_Count = 0);
  
!       --  Lock RTS_Lock, to prevent activated tasks
!       --  from racing ahead before we finish activating the chain.
  
        Lock_RTS;
  
!       --  Check that all task bodies have been elaborated.
  
        C := Chain_Access.T_ID;
        Last_C := null;
- 
        while C /= null loop
           if C.Common.Elaborated /= null
             and then not C.Common.Elaborated.all
--- 300,314 ----
  
        pragma Assert (Self_ID.Common.Wait_Count = 0);
  
!       --  Lock RTS_Lock, to prevent activated tasks from racing ahead before
!       --  we finish activating the chain.
  
        Lock_RTS;
  
!       --  Check that all task bodies have been elaborated
  
        C := Chain_Access.T_ID;
        Last_C := null;
        while C /= null loop
           if C.Common.Elaborated /= null
             and then not C.Common.Elaborated.all
*************** package body System.Tasking.Stages is
*** 302,313 ****
             (Program_Error'Identity, "Some tasks have not been elaborated");
        end if;
  
!       --  Activate all the tasks in the chain.
!       --  Creation of the thread of control was deferred until
!       --  activation. So create it now.
  
        C := Chain_Access.T_ID;
- 
        while C /= null loop
           if C.Common.State /= Terminated then
              pragma Assert (C.Common.State = Unactivated);
--- 334,343 ----
             (Program_Error'Identity, "Some tasks have not been elaborated");
        end if;
  
!       --  Activate all the tasks in the chain. Creation of the thread of
!       --  control was deferred until activation. So create it now.
  
        C := Chain_Access.T_ID;
        while C /= null loop
           if C.Common.State /= Terminated then
              pragma Assert (C.Common.State = Unactivated);
*************** package body System.Tasking.Stages is
*** 426,432 ****
     -------------------------
  
     procedure Complete_Activation is
!       Self_ID : constant Task_ID := STPO.Self;
     begin
        Initialization.Defer_Abort_Nestable (Self_ID);
  
--- 456,463 ----
     -------------------------
  
     procedure Complete_Activation is
!       Self_ID : constant Task_Id := STPO.Self;
! 
     begin
        Initialization.Defer_Abort_Nestable (Self_ID);
  
*************** package body System.Tasking.Stages is
*** 455,465 ****
     ---------------------
  
     procedure Complete_Master is
!       Self_ID : constant Task_ID := STPO.Self;
! 
     begin
        pragma Assert (Self_ID.Deferral_Level > 0);
- 
        Vulnerable_Complete_Master (Self_ID);
     end Complete_Master;
  
--- 486,494 ----
     ---------------------
  
     procedure Complete_Master is
!       Self_ID : constant Task_Id := STPO.Self;
     begin
        pragma Assert (Self_ID.Deferral_Level > 0);
        Vulnerable_Complete_Master (Self_ID);
     end Complete_Master;
  
*************** package body System.Tasking.Stages is
*** 470,476 ****
     --  See comments on Vulnerable_Complete_Task for details
  
     procedure Complete_Task is
!       Self_ID  : constant Task_ID := STPO.Self;
     begin
        pragma Assert (Self_ID.Deferral_Level > 0);
  
--- 499,506 ----
     --  See comments on Vulnerable_Complete_Task for details
  
     procedure Complete_Task is
!       Self_ID  : constant Task_Id := STPO.Self;
! 
     begin
        pragma Assert (Self_ID.Deferral_Level > 0);
  
*************** package body System.Tasking.Stages is
*** 498,512 ****
        Elaborated    : Access_Boolean;
        Chain         : in out Activation_Chain;
        Task_Image    : String;
!       Created_Task  : out Task_ID)
     is
!       T, P          : Task_ID;
!       Self_ID       : constant Task_ID := STPO.Self;
        Success       : Boolean;
        Base_Priority : System.Any_Priority;
        Len           : Natural;
  
     begin
        pragma Debug
          (Debug.Trace (Self_ID, "Create_Task", 'C'));
  
--- 528,553 ----
        Elaborated    : Access_Boolean;
        Chain         : in out Activation_Chain;
        Task_Image    : String;
!       Created_Task  : out Task_Id)
     is
!       T, P          : Task_Id;
!       Self_ID       : constant Task_Id := STPO.Self;
        Success       : Boolean;
        Base_Priority : System.Any_Priority;
        Len           : Natural;
  
     begin
+       --  If pragma Detect_Blocking is active must be checked whether
+       --  this potentially blocking operation is called from a
+       --  protected action.
+ 
+       if System.Tasking.Detect_Blocking
+         and then Self_ID.Common.Protected_Action_Nesting > 0
+       then
+          Ada.Exceptions.Raise_Exception
+            (Program_Error'Identity, "potentially blocking operation");
+       end if;
+ 
        pragma Debug
          (Debug.Trace (Self_ID, "Create_Task", 'C'));
  
*************** package body System.Tasking.Stages is
*** 531,537 ****
  
        begin
           T := New_ATCB (Num_Entries);
- 
        exception
           when others =>
              Initialization.Undefer_Abort_Nestable (Self_ID);
--- 572,577 ----
*************** package body System.Tasking.Stages is
*** 552,559 ****
        if not Self_ID.Callable then
           pragma Assert (Self_ID.Pending_ATC_Level = 0);
           pragma Assert (Self_ID.Pending_Action);
!          pragma Assert (Chain.T_ID = null
!              or else Chain.T_ID.Common.State = Unactivated);
  
           Unlock (Self_ID);
           Unlock_RTS;
--- 592,599 ----
        if not Self_ID.Callable then
           pragma Assert (Self_ID.Pending_ATC_Level = 0);
           pragma Assert (Self_ID.Pending_Action);
!          pragma Assert
!            (Chain.T_ID = null or else Chain.T_ID.Common.State = Unactivated);
  
           Unlock (Self_ID);
           Unlock_RTS;
*************** package body System.Tasking.Stages is
*** 569,574 ****
--- 609,615 ----
          Base_Priority, Task_Info, Size, T, Success);
  
        if not Success then
+          Free (T);
           Unlock (Self_ID);
           Unlock_RTS;
           Initialization.Undefer_Abort_Nestable (Self_ID);
*************** package body System.Tasking.Stages is
*** 576,581 ****
--- 617,632 ----
             (Storage_Error'Identity, "Failed to initialize task");
        end if;
  
+       if not System.Restrictions.Abort_Allowed then
+ 
+          --  If Abort is not allowed, reset the deferral level since it will
+          --  not get changed by the generated code. Keeping a default value
+          --  of one would prevent some operations (e.g. select or delay) to
+          --  proceed successfully.
+ 
+          T.Deferral_Level := 0;
+       end if;
+ 
        T.Master_of_Task := Master;
        T.Master_Within := T.Master_of_Task + 1;
  
*************** package body System.Tasking.Stages is
*** 590,605 ****
           Len := 1;
           T.Common.Task_Image (1) := Task_Image (Task_Image'First);
  
!          for J in Task_Image'First + 1 .. Task_Image'Last loop
! 
!             --  Remove unwanted blank space generated by 'Image
  
              if Task_Image (J) /= ' '
                or else Task_Image (J - 1) /= '('
              then
                 Len := Len + 1;
                 T.Common.Task_Image (Len) := Task_Image (J);
- 
                 exit when Len = T.Common.Task_Image'Last;
              end if;
           end loop;
--- 641,654 ----
           Len := 1;
           T.Common.Task_Image (1) := Task_Image (Task_Image'First);
  
!          --  Remove unwanted blank space generated by 'Image
  
+          for J in Task_Image'First + 1 .. Task_Image'Last loop
              if Task_Image (J) /= ' '
                or else Task_Image (J - 1) /= '('
              then
                 Len := Len + 1;
                 T.Common.Task_Image (Len) := Task_Image (J);
                 exit when Len = T.Common.Task_Image'Last;
              end if;
           end loop;
*************** package body System.Tasking.Stages is
*** 639,646 ****
     ------------------
  
     procedure Enter_Master is
!       Self_ID : constant Task_ID := STPO.Self;
! 
     begin
        Self_ID.Master_Within := Self_ID.Master_Within + 1;
     end Enter_Master;
--- 688,694 ----
     ------------------
  
     procedure Enter_Master is
!       Self_ID : constant Task_Id := STPO.Self;
     begin
        Self_ID.Master_Within := Self_ID.Master_Within + 1;
     end Enter_Master;
*************** package body System.Tasking.Stages is
*** 649,661 ****
     -- Expunge_Unactivated_Tasks --
     -------------------------------
  
!    --  See procedure Close_Entries for the general case.
  
     procedure Expunge_Unactivated_Tasks (Chain : in out Activation_Chain) is
!       Self_ID : constant Task_ID := STPO.Self;
!       C       : Task_ID;
        Call    : Entry_Call_Link;
!       Temp    : Task_ID;
  
     begin
        pragma Debug
--- 697,709 ----
     -- Expunge_Unactivated_Tasks --
     -------------------------------
  
!    --  See procedure Close_Entries for the general case
  
     procedure Expunge_Unactivated_Tasks (Chain : in out Activation_Chain) is
!       Self_ID : constant Task_Id := STPO.Self;
!       C       : Task_Id;
        Call    : Entry_Call_Link;
!       Temp    : Task_Id;
  
     begin
        pragma Debug
*************** package body System.Tasking.Stages is
*** 667,676 ****
        --  Experimentation has shown that abort is sometimes (but not
        --  always) already deferred when this is called.
  
!       --  That may indicate an error. Find out what is going on.
  
        C := Chain.T_ID;
- 
        while C /= null loop
           pragma Assert (C.Common.State = Unactivated);
  
--- 715,723 ----
        --  Experimentation has shown that abort is sometimes (but not
        --  always) already deferred when this is called.
  
!       --  That may indicate an error. Find out what is going on
  
        C := Chain.T_ID;
        while C /= null loop
           pragma Assert (C.Common.State = Unactivated);
  
*************** package body System.Tasking.Stages is
*** 708,720 ****
     --  objects does anything with signals or the timer server, since
     --  by that time those servers have terminated.
  
!    --  It is hard to see how that would occur.
  
     --  However, a better solution might be to do all this finalization
     --  using the global finalization chain.
  
     procedure Finalize_Global_Tasks is
!       Self_ID : constant Task_ID := STPO.Self;
        Ignore  : Boolean;
  
     begin
--- 755,767 ----
     --  objects does anything with signals or the timer server, since
     --  by that time those servers have terminated.
  
!    --  It is hard to see how that would occur
  
     --  However, a better solution might be to do all this finalization
     --  using the global finalization chain.
  
     procedure Finalize_Global_Tasks is
!       Self_ID : constant Task_Id := STPO.Self;
        Ignore  : Boolean;
  
     begin
*************** package body System.Tasking.Stages is
*** 813,820 ****
     -- Free_Task --
     ---------------
  
!    procedure Free_Task (T : Task_ID) is
!       Self_Id : constant Task_ID := Self;
  
     begin
        if T.Common.State = Terminated then
--- 860,867 ----
     -- Free_Task --
     ---------------
  
!    procedure Free_Task (T : Task_Id) is
!       Self_Id : constant Task_Id := Self;
  
     begin
        if T.Common.State = Terminated then
*************** package body System.Tasking.Stages is
*** 851,866 ****
     --  data. Task finalization is done by Complete_Task, which is called from
     --  an at-end handler that the compiler generates.
  
!    procedure Task_Wrapper (Self_ID : Task_ID) is
        use type System.Parameters.Size_Type;
        use type SSE.Storage_Offset;
        use System.Standard_Library;
  
!       Secondary_Stack : aliased SSE.Storage_Array
!         (1 .. Self_ID.Common.Compiler_Data.Pri_Stack_Info.Size *
!            SSE.Storage_Offset (Parameters.Sec_Stack_Ratio) / 100);
        Secondary_Stack_Address : System.Address := Secondary_Stack'Address;
  
     begin
        pragma Assert (Self_ID.Deferral_Level = 1);
  
--- 898,922 ----
     --  data. Task finalization is done by Complete_Task, which is called from
     --  an at-end handler that the compiler generates.
  
!    procedure Task_Wrapper (Self_ID : Task_Id) is
        use type System.Parameters.Size_Type;
        use type SSE.Storage_Offset;
        use System.Standard_Library;
  
!       Secondary_Stack :
!         aliased SSE.Storage_Array
!           (1 .. Self_ID.Common.Compiler_Data.Pri_Stack_Info.Size *
!                   SSE.Storage_Offset (Parameters.Sec_Stack_Ratio) / 100);
! 
        Secondary_Stack_Address : System.Address := Secondary_Stack'Address;
  
+       SEH_Table : aliased SSE.Storage_Array (1 .. 8);
+       --  Structured Exception Registration table (2 words)
+ 
+       procedure Install_SEH_Handler (Addr : System.Address);
+       pragma Import (C, Install_SEH_Handler, "__gnat_install_SEH_handler");
+       --  Install the SEH (Structured Exception Handling) handler
+ 
     begin
        pragma Assert (Self_ID.Deferral_Level = 1);
  
*************** package body System.Tasking.Stages is
*** 881,886 ****
--- 937,947 ----
  
        Enter_Task (Self_ID);
  
+       --  We setup the SEH (Structured Exception Handling) handler if supported
+       --  on the target.
+ 
+       Install_SEH_Handler (SEH_Table'Address);
+ 
        --  We lock RTS_Lock to wait for activator to finish activating
        --  the rest of the chain, so that everyone in the chain comes out
        --  in priority order.
*************** package body System.Tasking.Stages is
*** 973,980 ****
     --  overwriting the data of the new task that reused the ATCB! To solve
     --  this problem, we introduced the new operation Final_Task_Unlock.
  
!    procedure Terminate_Task (Self_ID : Task_ID) is
!       Environment_Task : constant Task_ID := STPO.Environment_Task;
        Master_of_Task   : Integer;
  
     begin
--- 1034,1041 ----
     --  overwriting the data of the new task that reused the ATCB! To solve
     --  this problem, we introduced the new operation Final_Task_Unlock.
  
!    procedure Terminate_Task (Self_ID : Task_Id) is
!       Environment_Task : constant Task_Id := STPO.Environment_Task;
        Master_of_Task   : Integer;
  
     begin
*************** package body System.Tasking.Stages is
*** 1001,1014 ****
  
        Master_of_Task := Self_ID.Master_of_Task;
  
!       --  Check if the current task is an independent task
!       --  If so, decrement the Independent_Task_Count value.
  
        if Master_of_Task = 2 then
           if Single_Lock then
              Utilities.Independent_Task_Count :=
                Utilities.Independent_Task_Count - 1;
- 
           else
              Write_Lock (Environment_Task);
              Utilities.Independent_Task_Count :=
--- 1062,1074 ----
  
        Master_of_Task := Self_ID.Master_of_Task;
  
!       --  Check if the current task is an independent task If so, decrement
!       --  the Independent_Task_Count value.
  
        if Master_of_Task = 2 then
           if Single_Lock then
              Utilities.Independent_Task_Count :=
                Utilities.Independent_Task_Count - 1;
           else
              Write_Lock (Environment_Task);
              Utilities.Independent_Task_Count :=
*************** package body System.Tasking.Stages is
*** 1032,1039 ****
        SSL.Destroy_TSD (Self_ID.Common.Compiler_Data);
        Initialization.Final_Task_Unlock (Self_ID);
  
!       --  WARNING
!       --  past this point, this thread must assume that the ATCB
        --  has been deallocated. It should not be accessed again.
  
        if Master_of_Task > 0 then
--- 1092,1098 ----
        SSL.Destroy_TSD (Self_ID.Common.Compiler_Data);
        Initialization.Final_Task_Unlock (Self_ID);
  
!       --  WARNING: past this point, this thread must assume that the ATCB
        --  has been deallocated. It should not be accessed again.
  
        if Master_of_Task > 0 then
*************** package body System.Tasking.Stages is
*** 1045,1052 ****
     -- Terminated --
     ----------------
  
!    function Terminated (T : Task_ID) return Boolean is
!       Self_ID : constant Task_ID := STPO.Self;
        Result  : Boolean;
  
     begin
--- 1104,1111 ----
     -- Terminated --
     ----------------
  
!    function Terminated (T : Task_Id) return Boolean is
!       Self_ID : constant Task_Id := STPO.Self;
        Result  : Boolean;
  
     begin
*************** package body System.Tasking.Stages is
*** 1072,1078 ****
     -- Trace_Unhandled_Exception_In_Task --
     ----------------------------------------
  
!    procedure Trace_Unhandled_Exception_In_Task (Self_Id : Task_ID) is
        procedure To_Stderr (S : String);
        pragma Import (Ada, To_Stderr, "__gnat_to_stderr");
  
--- 1131,1137 ----
     -- Trace_Unhandled_Exception_In_Task --
     ----------------------------------------
  
!    procedure Trace_Unhandled_Exception_In_Task (Self_Id : Task_Id) is
        procedure To_Stderr (S : String);
        pragma Import (Ada, To_Stderr, "__gnat_to_stderr");
  
*************** package body System.Tasking.Stages is
*** 1081,1087 ****
        use System.Standard_Library;
  
        function To_Address is new
!         Unchecked_Conversion (Task_ID, System.Address);
  
        function Tailored_Exception_Information
          (E : Exception_Occurrence) return String;
--- 1140,1146 ----
        use System.Standard_Library;
  
        function To_Address is new
!         Unchecked_Conversion (Task_Id, System.Address);
  
        function Tailored_Exception_Information
          (E : Exception_Occurrence) return String;
*************** package body System.Tasking.Stages is
*** 1121,1128 ****
     --  ordering policy, since the activated task must be created after the
     --  activator.
  
!    procedure Vulnerable_Complete_Activation (Self_ID : Task_ID) is
!       Activator : constant Task_ID := Self_ID.Common.Activator;
  
     begin
        pragma Debug (Debug.Trace (Self_ID, "V_Complete_Activation", 'C'));
--- 1180,1187 ----
     --  ordering policy, since the activated task must be created after the
     --  activator.
  
!    procedure Vulnerable_Complete_Activation (Self_ID : Task_Id) is
!       Activator : constant Task_Id := Self_ID.Common.Activator;
  
     begin
        pragma Debug (Debug.Trace (Self_ID, "V_Complete_Activation", 'C'));
*************** package body System.Tasking.Stages is
*** 1175,1187 ****
     -- Vulnerable_Complete_Master --
     --------------------------------
  
!    procedure Vulnerable_Complete_Master (Self_ID : Task_ID) is
!       C      : Task_ID;
!       P      : Task_ID;
        CM     : constant Master_Level := Self_ID.Master_Within;
!       T      : aliased Task_ID;
  
!       To_Be_Freed : Task_ID;
        --  This is a list of ATCBs to be freed, after we have released
        --  all RTS locks. This is necessary because of the locking order
        --  rules, since the storage manager uses Global_Task_Lock.
--- 1234,1246 ----
     -- Vulnerable_Complete_Master --
     --------------------------------
  
!    procedure Vulnerable_Complete_Master (Self_ID : Task_Id) is
!       C      : Task_Id;
!       P      : Task_Id;
        CM     : constant Master_Level := Self_ID.Master_Within;
!       T      : aliased Task_Id;
  
!       To_Be_Freed : Task_Id;
        --  This is a list of ATCBs to be freed, after we have released
        --  all RTS locks. This is necessary because of the locking order
        --  rules, since the storage manager uses Global_Task_Lock.
*************** package body System.Tasking.Stages is
*** 1203,1210 ****
           end if;
  
           Write_Lock (Self_ID);
-          C := All_Tasks_List;
  
           while C /= null loop
              if C.Common.Activator = Self_ID then
                 return False;
--- 1262,1269 ----
           end if;
  
           Write_Lock (Self_ID);
  
+          C := All_Tasks_List;
           while C /= null loop
              if C.Common.Activator = Self_ID then
                 return False;
*************** package body System.Tasking.Stages is
*** 1250,1257 ****
  
        Lock_RTS;
        Write_Lock (Self_ID);
-       C := All_Tasks_List;
  
        while C /= null loop
           if C.Common.Activator = Self_ID then
              pragma Assert (C.Common.State = Unactivated);
--- 1309,1316 ----
  
        Lock_RTS;
        Write_Lock (Self_ID);
  
+       C := All_Tasks_List;
        while C /= null loop
           if C.Common.Activator = Self_ID then
              pragma Assert (C.Common.State = Unactivated);
*************** package body System.Tasking.Stages is
*** 1362,1369 ****
           pragma Assert (Self_ID.Common.Wait_Count = 0);
  
           Write_Lock (Self_ID);
-          C := All_Tasks_List;
  
           while C /= null loop
              if C.Common.Parent = Self_ID and then C.Master_of_Task = CM then
                 Write_Lock (C);
--- 1421,1428 ----
           pragma Assert (Self_ID.Common.Wait_Count = 0);
  
           Write_Lock (Self_ID);
  
+          C := All_Tasks_List;
           while C /= null loop
              if C.Common.Parent = Self_ID and then C.Master_of_Task = CM then
                 Write_Lock (C);
*************** package body System.Tasking.Stages is
*** 1388,1394 ****
              Unlock_RTS;
           end if;
  
!          --  Wait for all counted tasks to finish terminating themselves.
  
           Write_Lock (Self_ID);
  
--- 1447,1453 ----
              Unlock_RTS;
           end if;
  
!          --  Wait for all counted tasks to finish terminating themselves
  
           Write_Lock (Self_ID);
  
*************** package body System.Tasking.Stages is
*** 1417,1423 ****
  
        C := All_Tasks_List;
        P := null;
- 
        while C /= null loop
           if C.Common.Parent = Self_ID and then C.Master_of_Task >= CM then
              if P /= null then
--- 1476,1481 ----
*************** package body System.Tasking.Stages is
*** 1439,1445 ****
  
        Unlock_RTS;
  
!       --  Free all the ATCBs on the list To_Be_Freed.
  
        --  The ATCBs in the list are no longer in All_Tasks_List, and after
        --  any interrupt entries are detached from them they should no longer
--- 1497,1503 ----
  
        Unlock_RTS;
  
!       --  Free all the ATCBs on the list To_Be_Freed
  
        --  The ATCBs in the list are no longer in All_Tasks_List, and after
        --  any interrupt entries are detached from them they should no longer
*************** package body System.Tasking.Stages is
*** 1478,1484 ****
                 --  Be sure to update this value when changing
                 --  Interrupt_Manager specs.
  
!                type Param_Type is access all Task_ID;
  
                 Param : aliased Param_Type := T'Access;
  
--- 1536,1542 ----
                 --  Be sure to update this value when changing
                 --  Interrupt_Manager specs.
  
!                type Param_Type is access all Task_Id;
  
                 Param : aliased Param_Type := T'Access;
  
*************** package body System.Tasking.Stages is
*** 1546,1552 ****
     --  to test Self_ID.Common.Activator. That value should only be read and
     --  modified by Self.
  
!    procedure Vulnerable_Complete_Task (Self_ID : Task_ID) is
     begin
        pragma Assert (Self_ID.Deferral_Level > 0);
        pragma Assert (Self_ID = Self);
--- 1604,1610 ----
     --  to test Self_ID.Common.Activator. That value should only be read and
     --  modified by Self.
  
!    procedure Vulnerable_Complete_Task (Self_ID : Task_Id) is
     begin
        pragma Assert (Self_ID.Deferral_Level > 0);
        pragma Assert (Self_ID = Self);
*************** package body System.Tasking.Stages is
*** 1607,1613 ****
     --  It is also called from Unchecked_Deallocation, for objects that
     --  are or contain tasks.
  
!    procedure Vulnerable_Free_Task (T : Task_ID) is
     begin
        pragma Debug (Debug.Trace (Self, "Vulnerable_Free_Task", 'C', T));
  
--- 1665,1671 ----
     --  It is also called from Unchecked_Deallocation, for objects that
     --  are or contain tasks.
  
!    procedure Vulnerable_Free_Task (T : Task_Id) is
     begin
        pragma Debug (Debug.Trace (Self, "Vulnerable_Free_Task", 'C', T));
  
*************** package body System.Tasking.Stages is
*** 1626,1631 ****
--- 1684,1691 ----
        System.Task_Primitives.Operations.Finalize_TCB (T);
     end Vulnerable_Free_Task;
  
+ --  Package elaboration code
+ 
  begin
     --  Establish the Adafinal softlink.
  
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tassta.ads gcc-4.0.0/gcc/ada/s-tassta.ads
*** gcc-3.4.3/gcc/ada/s-tassta.ads	Tue Oct 21 13:42:15 2003
--- gcc-4.0.0/gcc/ada/s-tassta.ads	Mon May 17 13:20:45 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2003, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package System.Tasking.Stages is
*** 177,183 ****
        Elaborated    : Access_Boolean;
        Chain         : in out Activation_Chain;
        Task_Image    : String;
!       Created_Task  : out Task_ID);
     --  Compiler interface only. Do not call from within the RTS.
     --  This must be called to create a new task.
     --
--- 177,183 ----
        Elaborated    : Access_Boolean;
        Chain         : in out Activation_Chain;
        Task_Image    : String;
!       Created_Task  : out Task_Id);
     --  Compiler interface only. Do not call from within the RTS.
     --  This must be called to create a new task.
     --
*************** package System.Tasking.Stages is
*** 250,261 ****
     --  It currently also executes the global finalization list, and then resets
     --  the "soft links".
  
!    procedure Free_Task (T : Task_ID);
     --  Recover all runtime system storage associated with the task T, but only
     --  if T has terminated. Do nothing in the other case. It is called from
     --  Unchecked_Deallocation, for objects that are or contain tasks.
  
!    function Terminated (T : Task_ID) return Boolean;
     --  This is called by the compiler to implement the 'Terminated attribute.
     --  Though is not required to be so by the ARM, we choose to synchronize
     --  with the task's ATCB, so that this is more useful for polling the state
--- 250,261 ----
     --  It currently also executes the global finalization list, and then resets
     --  the "soft links".
  
!    procedure Free_Task (T : Task_Id);
     --  Recover all runtime system storage associated with the task T, but only
     --  if T has terminated. Do nothing in the other case. It is called from
     --  Unchecked_Deallocation, for objects that are or contain tasks.
  
!    function Terminated (T : Task_Id) return Boolean;
     --  This is called by the compiler to implement the 'Terminated attribute.
     --  Though is not required to be so by the ARM, we choose to synchronize
     --  with the task's ATCB, so that this is more useful for polling the state
*************** package System.Tasking.Stages is
*** 268,274 ****
     --  code expansion:
     --     terminated (t1._task_id)
  
!    procedure Terminate_Task (Self_ID : Task_ID);
     --  Terminate the calling task.
     --  This should only be called by the Task_Wrapper procedure, and to
     --  deallocate storage associate with foreign tasks.
--- 268,274 ----
     --  code expansion:
     --     terminated (t1._task_id)
  
!    procedure Terminate_Task (Self_ID : Task_Id);
     --  Terminate the calling task.
     --  This should only be called by the Task_Wrapper procedure, and to
     --  deallocate storage associate with foreign tasks.
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tasuti.adb gcc-4.0.0/gcc/ada/s-tasuti.adb
*** gcc-3.4.3/gcc/ada/s-tasuti.adb	Tue Oct 21 13:42:15 2003
--- gcc-4.0.0/gcc/ada/s-tasuti.adb	Mon May 17 13:20:46 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2002, Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2004, Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body System.Tasking.Utilities is
*** 92,98 ****
     --    (2) may be called for tasks that have not yet been activated
     --    (3) always aborts whole task
  
!    procedure Abort_One_Task (Self_ID : Task_ID; T : Task_ID) is
     begin
        if Parameters.Runtime_Traces then
           Send_Trace_Info (T_Abort, Self_ID, T);
--- 92,98 ----
     --    (2) may be called for tasks that have not yet been activated
     --    (3) always aborts whole task
  
!    procedure Abort_One_Task (Self_ID : Task_Id; T : Task_Id) is
     begin
        if Parameters.Runtime_Traces then
           Send_Trace_Info (T_Abort, Self_ID, T);
*************** package body System.Tasking.Utilities is
*** 126,134 ****
     --  Abort_Signal special exception.
  
     procedure Abort_Tasks (Tasks : Task_List) is
!       Self_Id : constant Task_ID := STPO.Self;
!       C       : Task_ID;
!       P       : Task_ID;
  
     begin
        Initialization.Defer_Abort_Nestable (Self_Id);
--- 126,134 ----
     --  Abort_Signal special exception.
  
     procedure Abort_Tasks (Tasks : Task_List) is
!       Self_Id : constant Task_Id := STPO.Self;
!       C       : Task_Id;
!       P       : Task_Id;
  
     begin
        Initialization.Defer_Abort_Nestable (Self_Id);
*************** package body System.Tasking.Utilities is
*** 178,189 ****
     --  This should only be called by T, unless T is a terminated previously
     --  unactivated task.
  
!    procedure Cancel_Queued_Entry_Calls (T : Task_ID) is
        Next_Entry_Call : Entry_Call_Link;
        Entry_Call      : Entry_Call_Link;
!       Self_Id         : constant Task_ID := STPO.Self;
  
!       Caller : Task_ID;
        pragma Unreferenced (Caller);
        --  Should this be removed ???
  
--- 178,189 ----
     --  This should only be called by T, unless T is a terminated previously
     --  unactivated task.
  
!    procedure Cancel_Queued_Entry_Calls (T : Task_Id) is
        Next_Entry_Call : Entry_Call_Link;
        Entry_Call      : Entry_Call_Link;
!       Self_Id         : constant Task_Id := STPO.Self;
  
!       Caller : Task_Id;
        pragma Unreferenced (Caller);
        --  Should this be removed ???
  
*************** package body System.Tasking.Utilities is
*** 230,236 ****
     --  In any case, reset Self_Id.Aborting, to allow re-raising of
     --  Abort_Signal.
  
!    procedure Exit_One_ATC_Level (Self_ID : Task_ID) is
     begin
        Self_ID.ATC_Nesting_Level := Self_ID.ATC_Nesting_Level - 1;
  
--- 230,236 ----
     --  In any case, reset Self_Id.Aborting, to allow re-raising of
     --  Abort_Signal.
  
!    procedure Exit_One_ATC_Level (Self_ID : Task_Id) is
     begin
        Self_ID.ATC_Nesting_Level := Self_ID.ATC_Nesting_Level - 1;
  
*************** package body System.Tasking.Utilities is
*** 263,271 ****
     ----------------------
  
     procedure Make_Independent is
!       Self_Id               : constant Task_ID := STPO.Self;
!       Environment_Task      : constant Task_ID := STPO.Environment_Task;
!       Parent                : constant Task_ID := Self_Id.Common.Parent;
        Parent_Needs_Updating : Boolean := False;
        Master_of_Task        : Integer;
  
--- 263,271 ----
     ----------------------
  
     procedure Make_Independent is
!       Self_Id               : constant Task_Id := STPO.Self;
!       Environment_Task      : constant Task_Id := STPO.Environment_Task;
!       Parent                : constant Task_Id := Self_Id.Common.Parent;
        Parent_Needs_Updating : Boolean := False;
        Master_of_Task        : Integer;
  
*************** package body System.Tasking.Utilities is
*** 347,355 ****
     -- Make_Passive --
     ------------------
  
!    procedure Make_Passive (Self_ID : Task_ID; Task_Completed : Boolean) is
!       C : Task_ID := Self_ID;
!       P : Task_ID := C.Common.Parent;
  
        Master_Completion_Phase : Integer;
  
--- 347,355 ----
     -- Make_Passive --
     ------------------
  
!    procedure Make_Passive (Self_ID : Task_Id; Task_Completed : Boolean) is
!       C : Task_Id := Self_ID;
!       P : Task_Id := C.Common.Parent;
  
        Master_Completion_Phase : Integer;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tasuti.ads gcc-4.0.0/gcc/ada/s-tasuti.ads
*** gcc-3.4.3/gcc/ada/s-tasuti.ads	Tue Oct 21 13:42:15 2003
--- gcc-4.0.0/gcc/ada/s-tasuti.ads	Mon May 17 13:20:48 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --         Copyright (C) 1992-2002, Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --         Copyright (C) 1992-2004, Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Unchecked_Conversion;
*** 39,45 ****
  package System.Tasking.Utilities is
  
     function ATCB_To_Address is new
!      Unchecked_Conversion (Task_ID, System.Address);
  
     ---------------------------------
     -- Task_Stage Related routines --
--- 39,45 ----
  package System.Tasking.Utilities is
  
     function ATCB_To_Address is new
!      Unchecked_Conversion (Task_Id, System.Address);
  
     ---------------------------------
     -- Task_Stage Related routines --
*************** package System.Tasking.Utilities is
*** 76,92 ****
     -- Task Abortion related routines --
     ------------------------------------
  
!    procedure Cancel_Queued_Entry_Calls (T : Task_ID);
     --  Cancel any entry calls queued on target task.
     --  Call this while holding T's lock (or RTS_Lock in Single_Lock mode).
  
!    procedure Exit_One_ATC_Level (Self_ID : Task_ID);
     pragma Inline (Exit_One_ATC_Level);
     --  Call only with abort deferred and holding lock of Self_ID.
     --  This is a bit of common code for all entry calls.
     --  The effect is to exit one level of ATC nesting.
  
!    procedure Abort_One_Task (Self_ID : Task_ID; T : Task_ID);
     --  Similar to Locked_Abort_To_Level (Self_ID, T, 0), but:
     --    (1) caller should be holding no locks
     --    (2) may be called for tasks that have not yet been activated
--- 76,92 ----
     -- Task Abortion related routines --
     ------------------------------------
  
!    procedure Cancel_Queued_Entry_Calls (T : Task_Id);
     --  Cancel any entry calls queued on target task.
     --  Call this while holding T's lock (or RTS_Lock in Single_Lock mode).
  
!    procedure Exit_One_ATC_Level (Self_ID : Task_Id);
     pragma Inline (Exit_One_ATC_Level);
     --  Call only with abort deferred and holding lock of Self_ID.
     --  This is a bit of common code for all entry calls.
     --  The effect is to exit one level of ATC nesting.
  
!    procedure Abort_One_Task (Self_ID : Task_Id; T : Task_Id);
     --  Similar to Locked_Abort_To_Level (Self_ID, T, 0), but:
     --    (1) caller should be holding no locks
     --    (2) may be called for tasks that have not yet been activated
*************** package System.Tasking.Utilities is
*** 96,102 ****
     --  Abort_Tasks is called to initiate abortion, however, the actual
     --  abortion is done by abortee by means of Abort_Handler
  
!    procedure Make_Passive (Self_ID : Task_ID; Task_Completed : Boolean);
     --  Update counts to indicate current task is either terminated
     --  or accepting on a terminate alternative.
     --  Call holding no locks except Global_Task_Lock when calling from
--- 96,102 ----
     --  Abort_Tasks is called to initiate abortion, however, the actual
     --  abortion is done by abortee by means of Abort_Handler
  
!    procedure Make_Passive (Self_ID : Task_Id; Task_Completed : Boolean);
     --  Update counts to indicate current task is either terminated
     --  or accepting on a terminate alternative.
     --  Call holding no locks except Global_Task_Lock when calling from
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tataat.adb gcc-4.0.0/gcc/ada/s-tataat.adb
*** gcc-3.4.3/gcc/ada/s-tataat.adb	Tue Oct 21 13:42:16 2003
--- gcc-4.0.0/gcc/ada/s-tataat.adb	Mon May 17 13:20:48 2004
***************
*** 7,13 ****
  --                                  B o d y                                 --
  --                                                                          --
  --             Copyright (C) 1991-1994, Florida State University            --
! --             Copyright (C) 1995-2003, Ada Core Technologies               --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 7,13 ----
  --                                  B o d y                                 --
  --                                                                          --
  --             Copyright (C) 1991-1994, Florida State University            --
! --             Copyright (C) 1995-2004, Ada Core Technologies               --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body System.Tasking.Task_Attribu
*** 51,60 ****
     use Task_Primitives.Operations;
     use Tasking.Initialization;
  
-    function To_Access_Node is new Unchecked_Conversion
-      (Access_Address, Access_Node);
-    --  Tetch pointer to indirect attribute list
- 
     function To_Access_Address is new Unchecked_Conversion
       (Access_Node, Access_Address);
     --  Store pointer to indirect attribute list
--- 51,56 ----
*************** package body System.Tasking.Task_Attribu
*** 104,110 ****
           --  Deallocation does finalization, if necessary.
  
           declare
!             C : System.Tasking.Task_ID := All_Tasks_List;
              P : Access_Node;
  
           begin
--- 100,106 ----
           --  Deallocation does finalization, if necessary.
  
           declare
!             C : System.Tasking.Task_Id := All_Tasks_List;
              P : Access_Node;
  
           begin
*************** package body System.Tasking.Task_Attribu
*** 162,168 ****
     --  This is to be called just before the ATCB is deallocated.
     --  It relies on the caller holding T.L write-lock on entry.
  
!    procedure Finalize_Attributes (T : Task_ID) is
        P : Access_Node;
        Q : Access_Node := To_Access_Node (T.Indirect_Attributes);
  
--- 158,164 ----
     --  This is to be called just before the ATCB is deallocated.
     --  It relies on the caller holding T.L write-lock on entry.
  
!    procedure Finalize_Attributes (T : Task_Id) is
        P : Access_Node;
        Q : Access_Node := To_Access_Node (T.Indirect_Attributes);
  
*************** package body System.Tasking.Task_Attribu
*** 189,195 ****
  
     --  This is to be called by System.Tasking.Stages.Create_Task.
  
!    procedure Initialize_Attributes (T : Task_ID) is
        P : Access_Instance;
     begin
        Defer_Abortion;
--- 185,191 ----
  
     --  This is to be called by System.Tasking.Stages.Create_Task.
  
!    procedure Initialize_Attributes (T : Task_Id) is
        P : Access_Instance;
     begin
        Defer_Abortion;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tataat.ads gcc-4.0.0/gcc/ada/s-tataat.ads
*** gcc-3.4.3/gcc/ada/s-tataat.ads	Tue Oct 21 13:42:17 2003
--- gcc-4.0.0/gcc/ada/s-tataat.ads	Mon May 17 13:20:48 2004
***************
*** 7,13 ****
  --                                  S p e c                                 --
  --                                                                          --
  --             Copyright (C) 1991-1994, Florida State University            --
! --             Copyright (C) 1995-2003, Ada Core Technologies               --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 7,13 ----
  --                                  S p e c                                 --
  --                                                                          --
  --             Copyright (C) 1991-1994, Florida State University            --
! --             Copyright (C) 1995-2004, Ada Core Technologies               --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package System.Tasking.Task_Attributes i
*** 50,60 ****
     type Access_Node is access all Node;
     --  This needs comments ???
  
     type Dummy_Wrapper;
     type Access_Dummy_Wrapper is access all Dummy_Wrapper;
     for Access_Dummy_Wrapper'Storage_Size use 0;
!    --  This is a stand-in for the generic type Wrapper defined in
!    --  Ada.Task_Attributes. The real objects allocated are always
     --  of type Wrapper, no Dummy_Wrapper objects are ever created.
  
     type Deallocator is access procedure (P : in out Access_Node);
--- 50,69 ----
     type Access_Node is access all Node;
     --  This needs comments ???
  
+    function To_Access_Node is new Unchecked_Conversion
+      (Access_Address, Access_Node);
+    --  Used to fetch pointer to indirect attribute list. Declaration is
+    --  in spec to avoid any problems with aliasing assumptions.
+ 
     type Dummy_Wrapper;
     type Access_Dummy_Wrapper is access all Dummy_Wrapper;
+    pragma No_Strict_Aliasing (Access_Dummy_Wrapper);
+    --  Needed to avoid possible incorrect aliasing situations from
+    --  instantiation of Unchecked_Conversion in body of Ada.Task_Attributes.
+ 
     for Access_Dummy_Wrapper'Storage_Size use 0;
!    --  Access_Dummy_Wrapper is a stand-in for the generic type Wrapper defined
!    --  in Ada.Task_Attributes. The real objects allocated are always
     --  of type Wrapper, no Dummy_Wrapper objects are ever created.
  
     type Deallocator is access procedure (P : in out Access_Node);
*************** package System.Tasking.Task_Attributes i
*** 107,119 ****
     --  A linked list of all indirectly access attributes,
     --  which includes all those that require finalization.
  
!    procedure Initialize_Attributes (T : Task_ID);
     --  Initialize all attributes created via Ada.Task_Attributes for T.
     --  This must be called by the creator of the task, inside Create_Task,
     --  via soft-link Initialize_Attributes_Link. On entry, abortion must
     --  be deferred and the caller must hold no locks
  
!    procedure Finalize_Attributes (T : Task_ID);
     --  Finalize all attributes created via Ada.Task_Attributes for T.
     --  This is to be called by the task after it is marked as terminated
     --  (and before it actually dies), inside Vulnerable_Free_Task, via the
--- 116,128 ----
     --  A linked list of all indirectly access attributes,
     --  which includes all those that require finalization.
  
!    procedure Initialize_Attributes (T : Task_Id);
     --  Initialize all attributes created via Ada.Task_Attributes for T.
     --  This must be called by the creator of the task, inside Create_Task,
     --  via soft-link Initialize_Attributes_Link. On entry, abortion must
     --  be deferred and the caller must hold no locks
  
!    procedure Finalize_Attributes (T : Task_Id);
     --  Finalize all attributes created via Ada.Task_Attributes for T.
     --  This is to be called by the task after it is marked as terminated
     --  (and before it actually dies), inside Vulnerable_Free_Task, via the
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tfsetr-default.adb gcc-4.0.0/gcc/ada/s-tfsetr-default.adb
*** gcc-3.4.3/gcc/ada/s-tfsetr-default.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-tfsetr-default.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,313 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                     S Y S T E M . T R A C E S . S E N D                  --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --          Copyright (C) 2001-2002 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This version is for all targets, provided that System.IO.Put_Line is
+ --  functional. It prints debug information to Standard Output
+ 
+ with System.IO;   use System.IO;
+ with GNAT.Regpat; use GNAT.Regpat;
+ 
+ ----------------
+ -- Send_Trace --
+ ----------------
+ 
+ --  Prints debug information both in a human readable form
+ --  and in the form they are sent from upper layers.
+ 
+ separate (System.Traces.Format)
+ procedure Send_Trace (Id : Trace_T; Info : String) is
+ 
+    type Param_Type is
+      (Name_Param,
+       Caller_Param,
+       Entry_Param,
+       Timeout_Param,
+       Acceptor_Param,
+       Parent_Param,
+       Number_Param);
+    --  Type of parameter found in the message
+ 
+    Info_Trace : String_Trace := Format_Trace (Info);
+ 
+    function Get_Param
+      (Input    : String_Trace;
+       Param    : Param_Type;
+       How_Many : Integer)
+       return     String;
+    --  Extract a parameter from the given input string
+ 
+    ---------------
+    -- Get_Param --
+    ---------------
+ 
+    function Get_Param
+      (Input    : String_Trace;
+       Param    : Param_Type;
+       How_Many : Integer)
+       return     String
+    is
+       pragma Unreferenced (How_Many);
+ 
+       Matches : Match_Array (1 .. 2);
+    begin
+       --  We need comments here ???
+ 
+       case Param is
+          when Name_Param     =>
+             Match ("/N:([\w]+)", Input, Matches);
+ 
+          when Caller_Param   =>
+             Match ("/C:([\w]+)", Input, Matches);
+ 
+          when Entry_Param =>
+             Match ("/E:([\s]*) +([0-9 ,]+)", Input, Matches);
+ 
+          when Timeout_Param =>
+             Match ("/T:([\s]*) +([0-9]+.[0-9]+)", Input, Matches);
+ 
+          when Acceptor_Param =>
+             Match ("/A:([\w]+)", Input, Matches);
+ 
+          when Parent_Param   =>
+             Match ("/P:([\w]+)", Input, Matches);
+ 
+          when Number_Param =>
+             Match ("/#:([\s]*) +([0-9]+)", Input, Matches);
+       end case;
+ 
+       if Matches (1).First < Input'First then
+          return "";
+       end if;
+ 
+       case Param is
+          when Timeout_Param | Entry_Param | Number_Param =>
+             return Input (Matches (2).First .. Matches (2).Last);
+ 
+          when others =>
+             return Input (Matches (1).First .. Matches (1).Last);
+       end case;
+    end Get_Param;
+ 
+ --  Start of processing for Send_Trace
+ 
+ begin
+    New_Line;
+    Put_Line ("- Trace Debug Info ----------------");
+    Put ("Caught event Id : ");
+ 
+    case Id is
+       when M_Accept_Complete => Put ("M_Accept_Complete");
+          New_Line;
+          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
+                    & " completes accept on entry "
+                    & Get_Param (Info_Trace, Entry_Param, 1) & " with "
+                    & Get_Param (Info_Trace, Caller_Param, 1));
+ 
+       when M_Select_Else     => Put ("M_Select_Else");
+          New_Line;
+          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
+                    & " selects else statement");
+ 
+       when M_RDV_Complete    => Put ("M_RDV_Complete");
+          New_Line;
+          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
+                    & " completes rendezvous with "
+                    & Get_Param (Info_Trace, Caller_Param, 1));
+ 
+       when M_Call_Complete   => Put ("M_Call_Complete");
+          New_Line;
+          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
+                    & " completes call");
+ 
+       when M_Delay           => Put ("M_Delay");
+          New_Line;
+          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
+                    & " completes delay "
+                    & Get_Param (Info_Trace, Timeout_Param, 1));
+ 
+       when E_Missed          => Put ("E_Missed");
+          New_Line;
+          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
+                    & " got an invalid acceptor "
+                    & Get_Param (Info_Trace, Acceptor_Param, 1));
+ 
+       when E_Timeout         => Put ("E_Timeout");
+          New_Line;
+          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
+                    & " ends select due to timeout ");
+ 
+       when E_Kill            => Put ("E_Kill");
+          New_Line;
+          Put_Line ("Asynchronous Transfer of Control on task "
+                    & Get_Param (Info_Trace, Name_Param, 1));
+ 
+       when W_Delay           => Put ("W_Delay");
+          New_Line;
+          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
+                    & " sleeping "
+                    & Get_Param (Info_Trace, Timeout_Param, 1)
+                    & " seconds");
+ 
+       when WU_Delay           => Put ("WU_Delay");
+          New_Line;
+          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
+                    & " sleeping until "
+                    & Get_Param (Info_Trace, Timeout_Param, 1));
+ 
+       when W_Call            => Put ("W_Call");
+          New_Line;
+          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
+                    & " calling entry "
+                    & Get_Param (Info_Trace, Entry_Param, 1)
+                    & " of "  & Get_Param (Info_Trace, Acceptor_Param, 1));
+ 
+       when W_Accept          => Put ("W_Accept");
+          New_Line;
+          Put ("Task " & Get_Param (Info_Trace, Name_Param, 1)
+               & " waiting on "
+               & Get_Param (Info_Trace, Number_Param, 1)
+               & " accept(s)"
+               & ", " & Get_Param (Info_Trace, Entry_Param, 1));
+          New_Line;
+ 
+       when W_Select          => Put ("W_Select");
+          New_Line;
+          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
+                    & " waiting on "
+                    & Get_Param (Info_Trace, Number_Param, 1)
+                    & " select(s)"
+                       & ", " & Get_Param (Info_Trace, Entry_Param, 1));
+          New_Line;
+ 
+       when W_Completion      => Put ("W_Completion");
+          New_Line;
+             Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
+                       & " waiting for completion ");
+ 
+       when WT_Select         => Put ("WT_Select");
+          New_Line;
+          Put ("Task " & Get_Param (Info_Trace, Name_Param, 1)
+               & " waiting " & Get_Param (Info_Trace, Timeout_Param, 1)
+               & " seconds  on "
+               & Get_Param (Info_Trace, Number_Param, 1)
+               & " select(s)");
+ 
+          if Get_Param (Info_Trace, Number_Param, 1) /= "" then
+             Put (", " & Get_Param (Info_Trace, Entry_Param, 1));
+          end if;
+ 
+          New_Line;
+ 
+       when WT_Call           => Put ("WT_Call");
+          New_Line;
+          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
+                    & " calling entry "
+                    & Get_Param (Info_Trace, Entry_Param, 1)
+                    & " of "  & Get_Param (Info_Trace, Acceptor_Param, 1)
+                    & " with timeout "
+                    & Get_Param (Info_Trace, Timeout_Param, 1));
+ 
+       when WT_Completion     => Put ("WT_Completion");
+          New_Line;
+          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
+                    & " waiting "
+                    & Get_Param (Info_Trace, Timeout_Param, 1)
+                    & " for call completion");
+ 
+       when PO_Call           => Put ("PO_Call");
+          New_Line;
+          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
+                    & " calling protected entry  "
+                    & Get_Param (Info_Trace, Entry_Param, 1));
+ 
+       when POT_Call          => Put ("POT_Call");
+          New_Line;
+          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
+                    & " calling protected entry  "
+                    & Get_Param (Info_Trace, Entry_Param, 1)
+                    & " with timeout "
+                    & Get_Param (Info_Trace, Timeout_Param, 1));
+ 
+       when PO_Run            => Put ("PO_Run");
+          New_Line;
+          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
+                       & " running entry  "
+                    & Get_Param (Info_Trace, Entry_Param, 1)
+                    & " for "
+                    & Get_Param (Info_Trace, Caller_Param, 1));
+ 
+       when PO_Done           => Put ("PO_Done");
+          New_Line;
+          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
+                    & " finished call from "
+                    & Get_Param (Info_Trace, Caller_Param, 1));
+ 
+       when PO_Lock           => Put ("PO_Lock");
+          New_Line;
+          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
+                    & " took lock");
+ 
+       when PO_Unlock         => Put ("PO_Unlock");
+          New_Line;
+          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
+                    & " released lock");
+ 
+       when T_Create          => Put ("T_Create");
+          New_Line;
+          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
+                    & " created");
+ 
+       when T_Activate        => Put ("T_Activate");
+          New_Line;
+          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
+                    & " activated");
+ 
+       when T_Abort           => Put ("T_Abort");
+          New_Line;
+          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
+                    & " aborted by "
+                    & Get_Param (Info_Trace, Parent_Param, 1));
+ 
+       when T_Terminate       => Put ("T_Terminate");
+          New_Line;
+          Put_Line ("Task " & Get_Param (Info_Trace, Name_Param, 1)
+                    & " terminated");
+ 
+       when others
+         => Put ("Invalid Id");
+    end case;
+ 
+    Put_Line ("  --> " & Info_Trace);
+    Put_Line ("-----------------------------------");
+    New_Line;
+ end Send_Trace;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tfsetr-vxworks.adb gcc-4.0.0/gcc/ada/s-tfsetr-vxworks.adb
*** gcc-3.4.3/gcc/ada/s-tfsetr-vxworks.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-tfsetr-vxworks.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,107 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                     S Y S T E M . T R A C E S . S E N D                  --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --             Copyright (C) 2001 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This version is for VxWorks targets.
+ 
+ --  Trace information is sent to WindView using the wvEvent function.
+ 
+ --  Note that wvEvent is from the VxWorks API.
+ 
+ --  When adding a new event, just give an Id to then event, and then modify
+ --  the WindView events database.
+ 
+ --  Refer to WindView User's Guide for more details on how to add new events
+ --  to the events database.
+ 
+ ----------------
+ -- Send_Trace --
+ ----------------
+ 
+ --  This procedure formats the string, maps the event Id to an Id
+ --  recognized by WindView, and send the event using wvEvent
+ 
+ separate (System.Traces.Format)
+ procedure Send_Trace (Id : Trace_T; Info : String) is
+ 
+    procedure Wv_Event
+      (Id : Integer;
+       Buffer : System.Address;
+       Size : Integer);
+    pragma Import (C, Wv_Event, "wvEvent");
+ 
+    Info_Trace : String_Trace;
+    Id_Event   : Integer;
+ 
+ begin
+    Info_Trace := Format_Trace (Info);
+ 
+    case Id is
+       when M_Accept_Complete => Id_Event := 30000;
+       when M_Select_Else     => Id_Event := 30001;
+       when M_RDV_Complete    => Id_Event := 30002;
+       when M_Call_Complete   => Id_Event := 30003;
+       when M_Delay           => Id_Event := 30004;
+       when E_Kill            => Id_Event := 30005;
+       when E_Missed          => Id_Event := 30006;
+       when E_Timeout         => Id_Event := 30007;
+ 
+       when W_Call            => Id_Event := 30010;
+       when W_Accept          => Id_Event := 30011;
+       when W_Select          => Id_Event := 30012;
+       when W_Completion      => Id_Event := 30013;
+       when W_Delay           => Id_Event := 30014;
+       when WT_Select         => Id_Event := 30015;
+       when WT_Call           => Id_Event := 30016;
+       when WT_Completion     => Id_Event := 30017;
+       when WU_Delay          => Id_Event := 30018;
+ 
+       when PO_Call           => Id_Event := 30020;
+       when POT_Call          => Id_Event := 30021;
+       when PO_Run            => Id_Event := 30022;
+       when PO_Lock           => Id_Event := 30023;
+       when PO_Unlock         => Id_Event := 30024;
+       when PO_Done           => Id_Event := 30025;
+ 
+       when T_Create          => Id_Event := 30030;
+       when T_Activate        => Id_Event := 30031;
+       when T_Abort           => Id_Event := 30032;
+       when T_Terminate       => Id_Event := 30033;
+ 
+       --  Unrecognized events are given the special Id_Event value 29999
+ 
+       when others            => Id_Event := 29999;
+ 
+    end case;
+ 
+    Wv_Event (Id_Event, Info_Trace'Address, Max_Size);
+ end Send_Trace;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-thread.ads gcc-4.0.0/gcc/ada/s-thread.ads
*** gcc-3.4.3/gcc/ada/s-thread.ads	Mon Nov 24 14:27:57 2003
--- gcc-4.0.0/gcc/ada/s-thread.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,146 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                       S Y S T E M . T H R E A D S                        --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
- -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
- -- MA 02111-1307, USA.                                                      --
- --                                                                          --
- -- As a special exception,  if other files  instantiate  generics from this --
- -- unit, or you link  this unit with other files  to produce an executable, --
- -- this  unit  does not  by itself cause  the resulting  executable  to  be --
- -- covered  by the  GNU  General  Public  License.  This exception does not --
- -- however invalidate  any other reasons why  the executable file  might be --
- -- covered by the  GNU Public License.                                      --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package provides facilities to register a thread to the runtime,
- --  and allocate its task specific datas.
- 
- --  pragma Thread_Body is currently supported for:
- --  VxWorks AE653 with the restricted / cert runtime
- 
- with Ada.Exceptions;
- --  used for Exception_Occurrence
- 
- with System.Soft_Links;
- --  used for TSD
- 
- package System.Threads is
- 
-    subtype EO is Ada.Exceptions.Exception_Occurrence;
- 
-    subtype EOA is Ada.Exceptions.Exception_Occurrence_Access;
- 
-    type ATSD is limited private;
-    --  Type of the Ada thread specific data. It contains datas needed
-    --  by the GNAT runtime.
- 
-    type ATSD_Access is access ATSD;
- 
-    --  Get/Set for the attributes of the current thread
- 
-    function  Get_Jmpbuf_Address return  Address;
-    pragma Inline (Get_Jmpbuf_Address);
- 
-    procedure Set_Jmpbuf_Address (Addr : Address);
-    pragma Inline (Get_Jmpbuf_Address);
- 
-    function  Get_Sec_Stack_Addr return  Address;
-    pragma Inline (Get_Sec_Stack_Addr);
- 
-    procedure Set_Sec_Stack_Addr (Addr : Address);
-    pragma Inline (Set_Sec_Stack_Addr);
- 
-    function Get_Current_Excep return EOA;
-    pragma Inline (Get_Current_Excep);
- 
-    --------------------------
-    -- Thread Body Handling --
-    --------------------------
- 
-    --  The subprograms in this section are called by the expansion of a
-    --  subprogram body to which a Thread_Body pragma has been applied:
- 
-    --  Given a subprogram body
- 
-    --     procedure xyz (params ....) is    -- can also be a function
-    --       <user declarations>
-    --     begin
-    --       <user statements>
-    --     <user exception handlers>
-    --     end xyz;
- 
-    --  The expansion resulting from use of the Thread_Body pragma is:
- 
-    --     procedure xyz (params ...) is
- 
-    --       _Secondary_Stack : aliased
-    --          Storage_Elements.Storage_Array
-    --            (1 .. Storage_Offset (Sec_Stack_Size));
-    --       for _Secondary_Stack'Alignment use Standard'Maximum_Alignment;
- 
-    --       _Process_ATSD : aliased System.Threads.ATSD;
- 
-    --     begin
-    --        System.Threads.Thread_Body_Enter;
-    --          (_Secondary_Stack'Address,
-    --           _Secondary_Stack'Length,
-    --           _Process_ATSD'Address);
- 
-    --        declare
-    --           <user declarations>
-    --        begin
-    --           <user statements>
-    --        <user exception handlers>
-    --        end;
- 
-    --       System.Threads.Thread_Body_Leave;
- 
-    --     exception
-    --        when E : others =>
-    --          System.Threads.Thread_Body_Exceptional_Exit (E);
-    --     end;
- 
-    --  Note the exception handler is omitted if pragma Restriction
-    --  No_Exception_Handlers is currently active.
- 
-    --  Note: the secondary stack size (Sec_Stack_Size) comes either from
-    --  the pragma, if specified, or is the default value taken from
-    --  the declaration in System.Secondary_Stack.
- 
-    procedure Thread_Body_Enter
-      (Sec_Stack_Address    : System.Address;
-       Sec_Stack_Size       : Natural;
-       Process_ATSD_Address : System.Address);
-    --  Enter thread body, see above for details
- 
-    procedure Thread_Body_Leave;
-    --  Leave thread body (normally), see above for details
- 
-    procedure Thread_Body_Exceptional_Exit
-      (EO : Ada.Exceptions.Exception_Occurrence);
-    --  Leave thread body (abnormally on exception), see above for details
- 
- private
- 
-    type ATSD is new System.Soft_Links.TSD;
- 
- end System.Threads;
--- 0 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tpinop.adb gcc-4.0.0/gcc/ada/s-tpinop.adb
*** gcc-3.4.3/gcc/ada/s-tpinop.adb	Tue Oct 21 13:42:18 2003
--- gcc-4.0.0/gcc/ada/s-tpinop.adb	Mon May 17 13:20:48 2004
***************
*** 7,13 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1998-2001 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 7,13 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1998-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body System.Task_Primitives.Inte
*** 38,44 ****
     --  this array, but due to elaboration problems, it can't with this
     --  package directly, so we export this variable for now.
  
!    Interrupt_ID_Map : array (IM.Interrupt_ID) of ST.Task_ID;
     pragma Export (Ada, Interrupt_ID_Map,
       "system__task_primitives__interrupt_operations__interrupt_id_map");
  
--- 38,44 ----
     --  this array, but due to elaboration problems, it can't with this
     --  package directly, so we export this variable for now.
  
!    Interrupt_ID_Map : array (IM.Interrupt_ID) of ST.Task_Id;
     pragma Export (Ada, Interrupt_ID_Map,
       "system__task_primitives__interrupt_operations__interrupt_id_map");
  
*************** package body System.Task_Primitives.Inte
*** 46,53 ****
     -- Get_Interrupt_ID --
     ----------------------
  
!    function Get_Interrupt_ID (T : ST.Task_ID) return IM.Interrupt_ID is
!       use type ST.Task_ID;
  
     begin
        for Interrupt in IM.Interrupt_ID loop
--- 46,53 ----
     -- Get_Interrupt_ID --
     ----------------------
  
!    function Get_Interrupt_ID (T : ST.Task_Id) return IM.Interrupt_ID is
!       use type ST.Task_Id;
  
     begin
        for Interrupt in IM.Interrupt_ID loop
*************** package body System.Task_Primitives.Inte
*** 60,78 ****
     end Get_Interrupt_ID;
  
     -----------------
!    -- Get_Task_ID --
     -----------------
  
!    function Get_Task_ID (Interrupt : IM.Interrupt_ID) return ST.Task_ID is
     begin
        return Interrupt_ID_Map (Interrupt);
!    end Get_Task_ID;
  
     ----------------------
     -- Set_Interrupt_ID --
     ----------------------
  
!    procedure Set_Interrupt_ID (Interrupt : IM.Interrupt_ID; T : ST.Task_ID) is
     begin
        Interrupt_ID_Map (Interrupt) := T;
     end Set_Interrupt_ID;
--- 60,78 ----
     end Get_Interrupt_ID;
  
     -----------------
!    -- Get_Task_Id --
     -----------------
  
!    function Get_Task_Id (Interrupt : IM.Interrupt_ID) return ST.Task_Id is
     begin
        return Interrupt_ID_Map (Interrupt);
!    end Get_Task_Id;
  
     ----------------------
     -- Set_Interrupt_ID --
     ----------------------
  
!    procedure Set_Interrupt_ID (Interrupt : IM.Interrupt_ID; T : ST.Task_Id) is
     begin
        Interrupt_ID_Map (Interrupt) := T;
     end Set_Interrupt_ID;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tpinop.ads gcc-4.0.0/gcc/ada/s-tpinop.ads
*** gcc-3.4.3/gcc/ada/s-tpinop.ads	Tue Oct 21 13:42:18 2003
--- gcc-4.0.0/gcc/ada/s-tpinop.ads	Mon May 17 13:20:48 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --           Copyright (C) 1998-2001 Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --           Copyright (C) 1998-2004 Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package System.Task_Primitives.Interrupt
*** 38,50 ****
     package IM renames System.Interrupt_Management;
     package ST renames System.Tasking;
  
!    procedure Set_Interrupt_ID (Interrupt : IM.Interrupt_ID; T : ST.Task_ID);
     --  Associate an Interrupt_ID with a task.
  
!    function Get_Interrupt_ID (T : ST.Task_ID) return IM.Interrupt_ID;
     --  Return the Interrupt_ID associated with a task.
  
!    function Get_Task_ID (Interrupt : IM.Interrupt_ID) return ST.Task_ID;
!    --  Return the Task_ID associated with an Interrupt.
  
  end System.Task_Primitives.Interrupt_Operations;
--- 38,50 ----
     package IM renames System.Interrupt_Management;
     package ST renames System.Tasking;
  
!    procedure Set_Interrupt_ID (Interrupt : IM.Interrupt_ID; T : ST.Task_Id);
     --  Associate an Interrupt_ID with a task.
  
!    function Get_Interrupt_ID (T : ST.Task_Id) return IM.Interrupt_ID;
     --  Return the Interrupt_ID associated with a task.
  
!    function Get_Task_Id (Interrupt : IM.Interrupt_ID) return ST.Task_Id;
!    --  Return the Task_Id associated with an Interrupt.
  
  end System.Task_Primitives.Interrupt_Operations;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tpoben.adb gcc-4.0.0/gcc/ada/s-tpoben.adb
*** gcc-3.4.3/gcc/ada/s-tpoben.adb	Tue Oct 21 13:42:18 2003
--- gcc-4.0.0/gcc/ada/s-tpoben.adb	Mon Sep 13 10:18:41 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1998-2001, Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1998-2004, Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 44,49 ****
--- 44,50 ----
  
  with Ada.Exceptions;
  --  used for Exception_Occurrence_Access
+ --           Raise_Exception
  
  with System.Task_Primitives.Operations;
  --  used for Initialize_Lock
*************** package body System.Tasking.Protected_Ob
*** 72,77 ****
--- 73,82 ----
     use Task_Primitives.Operations;
     use Ada.Exceptions;
  
+    ----------------
+    -- Local Data --
+    ----------------
+ 
     Locking_Policy : Character;
     pragma Import (C, Locking_Policy, "__gl_locking_policy");
  
*************** package body System.Tasking.Protected_Ob
*** 81,89 ****
  
     procedure Finalize (Object : in out Protection_Entries) is
        Entry_Call        : Entry_Call_Link;
!       Caller            : Task_ID;
        Ceiling_Violation : Boolean;
!       Self_ID           : constant Task_ID := STPO.Self;
        Old_Base_Priority : System.Any_Priority;
  
     begin
--- 86,94 ----
  
     procedure Finalize (Object : in out Protection_Entries) is
        Entry_Call        : Entry_Call_Link;
!       Caller            : Task_Id;
        Ceiling_Violation : Boolean;
!       Self_ID           : constant Task_Id := STPO.Self;
        Old_Base_Priority : System.Any_Priority;
  
     begin
*************** package body System.Tasking.Protected_Ob
*** 179,185 ****
        Find_Body_Index   : Find_Body_Index_Access)
     is
        Init_Priority : Integer := Ceiling_Priority;
!       Self_ID       : constant Task_ID := STPO.Self;
  
     begin
        if Init_Priority = Unspecified_Priority then
--- 184,190 ----
        Find_Body_Index   : Find_Body_Index_Access)
     is
        Init_Priority : Integer := Ceiling_Priority;
!       Self_ID       : constant Task_Id := STPO.Self;
  
     begin
        if Init_Priority = Unspecified_Priority then
*************** package body System.Tasking.Protected_Ob
*** 216,228 ****
     ------------------
  
     procedure Lock_Entries
!      (Object : Protection_Entries_Access; Ceiling_Violation : out Boolean) is
     begin
        if Object.Finalized then
           Raise_Exception
             (Program_Error'Identity, "Protected Object is finalized");
        end if;
  
        --  The lock is made without defering abortion.
  
        --  Therefore the abortion has to be deferred before calling this
--- 221,256 ----
     ------------------
  
     procedure Lock_Entries
!      (Object : Protection_Entries_Access; Ceiling_Violation : out Boolean)
!    is
     begin
        if Object.Finalized then
           Raise_Exception
             (Program_Error'Identity, "Protected Object is finalized");
        end if;
  
+       --  If pragma Detect_Blocking is active then Program_Error must
+       --  be raised if this potentially blocking operation is called from
+       --  a protected action, and the protected object nesting level
+       --  must be increased.
+ 
+       if Detect_Blocking then
+          declare
+             Self_Id : constant Task_Id := STPO.Self;
+          begin
+             if Self_Id.Common.Protected_Action_Nesting > 0  then
+                Ada.Exceptions.Raise_Exception
+                  (Program_Error'Identity, "potentially blocking operation");
+             else
+                --  We are entering in a protected action, so that we
+                --  increase the protected object nesting level.
+ 
+                Self_Id.Common.Protected_Action_Nesting :=
+                  Self_Id.Common.Protected_Action_Nesting + 1;
+             end if;
+          end;
+       end if;
+ 
        --  The lock is made without defering abortion.
  
        --  Therefore the abortion has to be deferred before calling this
*************** package body System.Tasking.Protected_Ob
*** 239,252 ****
  
     procedure Lock_Entries (Object : Protection_Entries_Access) is
        Ceiling_Violation : Boolean;
-    begin
-       if Object.Finalized then
-          Raise_Exception
-            (Program_Error'Identity, "Protected Object is finalized");
-       end if;
  
!       pragma Assert (STPO.Self.Deferral_Level > 0);
!       Write_Lock (Object.L'Access, Ceiling_Violation);
  
        if Ceiling_Violation then
           Raise_Exception (Program_Error'Identity, "Ceiling Violation");
--- 267,275 ----
  
     procedure Lock_Entries (Object : Protection_Entries_Access) is
        Ceiling_Violation : Boolean;
  
!    begin
!       Lock_Entries (Object, Ceiling_Violation);
  
        if Ceiling_Violation then
           Raise_Exception (Program_Error'Identity, "Ceiling Violation");
*************** package body System.Tasking.Protected_Ob
*** 259,270 ****
--- 282,316 ----
  
     procedure Lock_Read_Only_Entries (Object : Protection_Entries_Access) is
        Ceiling_Violation : Boolean;
+ 
     begin
        if Object.Finalized then
           Raise_Exception
             (Program_Error'Identity, "Protected Object is finalized");
        end if;
  
+       --  If pragma Detect_Blocking is active then Program_Error must be
+       --  raised if this potentially blocking operation is called from a
+       --  protected action, and the protected object nesting level must
+       --  be increased.
+ 
+       if Detect_Blocking then
+          declare
+             Self_Id : constant Task_Id := STPO.Self;
+          begin
+             if Self_Id.Common.Protected_Action_Nesting > 0  then
+                Ada.Exceptions.Raise_Exception
+                  (Program_Error'Identity, "potentially blocking operation");
+             else
+                --  We are entering in a protected action, so that we
+                --  increase the protected object nesting level.
+ 
+                Self_Id.Common.Protected_Action_Nesting :=
+                  Self_Id.Common.Protected_Action_Nesting + 1;
+             end if;
+          end;
+       end if;
+ 
        Read_Lock (Object.L'Access, Ceiling_Violation);
  
        if Ceiling_Violation then
*************** package body System.Tasking.Protected_Ob
*** 278,283 ****
--- 324,347 ----
  
     procedure Unlock_Entries (Object : Protection_Entries_Access) is
     begin
+       --  We are exiting from a protected action, so that we decrease the
+       --  protected object nesting level (if pragma Detect_Blocking is
+       --  active).
+ 
+       if Detect_Blocking then
+          declare
+             Self_Id : constant Task_Id := Self;
+          begin
+             --  Cannot call this procedure without being within a protected
+             --  action.
+ 
+             pragma Assert (Self_Id.Common.Protected_Action_Nesting > 0);
+ 
+             Self_Id.Common.Protected_Action_Nesting :=
+               Self_Id.Common.Protected_Action_Nesting - 1;
+          end;
+       end if;
+ 
        Unlock (Object.L'Access);
     end Unlock_Entries;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tpobop.adb gcc-4.0.0/gcc/ada/s-tpobop.adb
*** gcc-3.4.3/gcc/ada/s-tpobop.adb	Tue Oct 21 13:42:18 2003
--- gcc-4.0.0/gcc/ada/s-tpobop.adb	Mon May 17 13:20:48 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1998-2003, Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1998-2004, Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with System.Tasking.Queuing;
*** 80,85 ****
--- 80,88 ----
  with System.Tasking.Rendezvous;
  --  used for Task_Do_Or_Queue
  
+ with System.Tasking.Utilities;
+ --  used for Exit_One_ATC_Level
+ 
  with System.Tasking.Debug;
  --  used for Trace
  
*************** package body System.Tasking.Protected_Ob
*** 116,121 ****
--- 119,133 ----
     --  Call this only while holding the PO's lock.
     --  It returns with the PO's lock still held.
  
+    procedure Requeue_Call
+      (Self_Id    : Task_Id;
+       Object     : Protection_Entries_Access;
+       Entry_Call : Entry_Call_Link;
+       With_Abort : Boolean);
+    --  Handle requeue of Entry_Call.
+    --  In particular, queue the call if needed, or service it immediately
+    --  if possible.
+ 
     ---------------------------------
     -- Cancel_Protected_Entry_Call --
     ---------------------------------
*************** package body System.Tasking.Protected_Ob
*** 280,295 ****
     --------------------
  
     procedure PO_Do_Or_Queue
!      (Self_ID    : Task_ID;
        Object     : Protection_Entries_Access;
        Entry_Call : Entry_Call_Link;
        With_Abort : Boolean)
     is
!       E : Protected_Entry_Index := Protected_Entry_Index (Entry_Call.E);
!       New_Object        : Protection_Entries_Access;
!       Ceiling_Violation : Boolean;
!       Barrier_Value     : Boolean;
!       Result            : Boolean;
  
     begin
        --  When the Action procedure for an entry body returns, it is either
--- 292,305 ----
     --------------------
  
     procedure PO_Do_Or_Queue
!      (Self_ID    : Task_Id;
        Object     : Protection_Entries_Access;
        Entry_Call : Entry_Call_Link;
        With_Abort : Boolean)
     is
!       E             : constant Protected_Entry_Index :=
!                         Protected_Entry_Index (Entry_Call.E);
!       Barrier_Value : Boolean;
  
     begin
        --  When the Action procedure for an entry body returns, it is either
*************** package body System.Tasking.Protected_Ob
*** 336,416 ****
              end if;
  
           else
!             --  Body of current entry requeued the call
!             New_Object := To_Protection (Entry_Call.Called_PO);
! 
!             if New_Object = null then
! 
!                --  Call was requeued to a task
! 
!                if Single_Lock then
!                   STPO.Lock_RTS;
!                end if;
! 
!                Result := Rendezvous.Task_Do_Or_Queue
!                  (Self_ID, Entry_Call,
!                   With_Abort => Entry_Call.Requeue_With_Abort);
! 
!                if not Result then
!                   Queuing.Broadcast_Program_Error
!                    (Self_ID, Object, Entry_Call, RTS_Locked => True);
!                end if;
! 
!                if Single_Lock then
!                   STPO.Unlock_RTS;
!                end if;
! 
!                return;
!             end if;
! 
!             if Object /= New_Object then
!                --  Requeue is on a different object
! 
!                Lock_Entries (New_Object, Ceiling_Violation);
! 
!                if Ceiling_Violation then
!                   Object.Call_In_Progress := null;
!                   Queuing.Broadcast_Program_Error
!                    (Self_ID, Object, Entry_Call);
! 
!                else
!                   PO_Do_Or_Queue (Self_ID, New_Object, Entry_Call, With_Abort);
!                   PO_Service_Entries (Self_ID, New_Object);
!                   Unlock_Entries (New_Object);
!                end if;
! 
!             else
!                --  Requeue is on same protected object
! 
!                if Entry_Call.Requeue_With_Abort
!                  and then Entry_Call.Cancellation_Attempted
!                then
!                   --  If this is a requeue with abort and someone tried
!                   --  to cancel this call, cancel it at this point.
! 
!                   Entry_Call.State := Cancelled;
!                   return;
!                end if;
! 
!                if not With_Abort or else
!                  Entry_Call.Mode /= Conditional_Call
!                then
!                   E := Protected_Entry_Index (Entry_Call.E);
!                   Queuing.Enqueue
!                     (New_Object.Entry_Queues (E), Entry_Call);
!                   Update_For_Queue_To_PO (Entry_Call, With_Abort);
! 
!                else
!                   --  ?????
!                   --  Can we convert this recursion to a loop?
! 
!                   PO_Do_Or_Queue (Self_ID, New_Object, Entry_Call, With_Abort);
!                end if;
!             end if;
           end if;
  
!       elsif Entry_Call.Mode /= Conditional_Call or else
!         not With_Abort then
           Queuing.Enqueue (Object.Entry_Queues (E), Entry_Call);
           Update_For_Queue_To_PO (Entry_Call, With_Abort);
  
--- 346,357 ----
              end if;
  
           else
!             Requeue_Call (Self_ID, Object, Entry_Call, With_Abort);
           end if;
  
!       elsif Entry_Call.Mode /= Conditional_Call
!         or else not With_Abort
!       then
           Queuing.Enqueue (Object.Entry_Queues (E), Entry_Call);
           Update_For_Queue_To_PO (Entry_Call, With_Abort);
  
*************** package body System.Tasking.Protected_Ob
*** 441,590 ****
     ------------------------
  
     procedure PO_Service_Entries
!      (Self_ID : Task_ID;
!       Object : Protection_Entries_Access)
     is
!       Entry_Call        : Entry_Call_Link;
!       E                 : Protected_Entry_Index;
!       Caller            : Task_ID;
!       New_Object        : Protection_Entries_Access;
!       Ceiling_Violation : Boolean;
!       Result            : Boolean;
  
     begin
        loop
           Queuing.Select_Protected_Entry_Call (Self_ID, Object, Entry_Call);
  
!          if Entry_Call /= null then
!             E := Protected_Entry_Index (Entry_Call.E);
! 
!             --  Not abortable while service is in progress.
! 
!             if Entry_Call.State = Now_Abortable then
!                Entry_Call.State := Was_Abortable;
!             end if;
! 
!             Object.Call_In_Progress := Entry_Call;
! 
!             begin
!                if Runtime_Traces then
!                   Send_Trace_Info (PO_Run, Self_ID,
!                                    Entry_Call.Self, Entry_Index (E));
!                end if;
! 
!                pragma Debug
!                 (Debug.Trace (Self_ID, "POSE: start entry body", 'P'));
!                Object.Entry_Bodies (
!                  Object.Find_Body_Index (Object.Compiler_Info, E)).Action (
!                    Object.Compiler_Info, Entry_Call.Uninterpreted_Data, E);
!             exception
!                when others =>
!                   Queuing.Broadcast_Program_Error
!                     (Self_ID, Object, Entry_Call);
!             end;
! 
!             if Object.Call_In_Progress /= null then
!                Object.Call_In_Progress := null;
!                Caller := Entry_Call.Self;
! 
!                if Single_Lock then
!                   STPO.Lock_RTS;
!                end if;
! 
!                STPO.Write_Lock (Caller);
!                Initialization.Wakeup_Entry_Caller (Self_ID, Entry_Call, Done);
!                STPO.Unlock (Caller);
! 
!                if Single_Lock then
!                   STPO.Unlock_RTS;
!                end if;
! 
!             else
!                --  Call needs to be requeued
! 
!                New_Object := To_Protection (Entry_Call.Called_PO);
! 
!                if New_Object = null then
! 
!                   --  Call is to be requeued to a task entry
! 
!                   if Single_Lock then
!                      STPO.Lock_RTS;
!                   end if;
! 
!                   Result := Rendezvous.Task_Do_Or_Queue
!                     (Self_ID, Entry_Call,
!                      With_Abort => Entry_Call.Requeue_With_Abort);
! 
!                   if not Result then
!                      Queuing.Broadcast_Program_Error
!                        (Self_ID, Object, Entry_Call, RTS_Locked => True);
!                   end if;
! 
!                   if Single_Lock then
!                      STPO.Unlock_RTS;
!                   end if;
! 
!                else
!                   --  Call should be requeued to a PO
  
!                   if Object /= New_Object then
!                      --  Requeue is to different PO
  
!                      Lock_Entries (New_Object, Ceiling_Violation);
  
!                      if Ceiling_Violation then
!                         Object.Call_In_Progress := null;
!                         Queuing.Broadcast_Program_Error
!                           (Self_ID, Object, Entry_Call);
  
!                      else
!                         PO_Do_Or_Queue (Self_ID, New_Object, Entry_Call,
!                           Entry_Call.Requeue_With_Abort);
!                         PO_Service_Entries (Self_ID, New_Object);
!                         Unlock_Entries (New_Object);
!                      end if;
  
!                   else
!                      --  Requeue is to same protected object
  
!                      --  ??? Try to compensate apparent failure of the
!                      --  scheduler on some OS (e.g VxWorks) to give higher
!                      --  priority tasks a chance to run (see CXD6002).
  
!                      STPO.Yield (False);
  
!                      if Entry_Call.Requeue_With_Abort
!                        and then Entry_Call.Cancellation_Attempted
!                      then
!                         --  If this is a requeue with abort and someone tried
!                         --  to cancel this call, cancel it at this point.
  
!                         Entry_Call.State := Cancelled;
!                         exit;
!                      end if;
  
!                      if not Entry_Call.Requeue_With_Abort or else
!                        Entry_Call.Mode /= Conditional_Call
!                      then
!                         E := Protected_Entry_Index (Entry_Call.E);
!                         Queuing.Enqueue
!                           (New_Object.Entry_Queues (E), Entry_Call);
!                         Update_For_Queue_To_PO (Entry_Call,
!                           Entry_Call.Requeue_With_Abort);
  
!                      else
!                         PO_Do_Or_Queue (Self_ID, New_Object, Entry_Call,
!                           Entry_Call.Requeue_With_Abort);
!                      end if;
!                   end if;
!                end if;
              end if;
- 
-          else
-             exit;
           end if;
        end loop;
     end PO_Service_Entries;
  
     ---------------------
--- 382,454 ----
     ------------------------
  
     procedure PO_Service_Entries
!      (Self_ID       : Task_Id;
!       Object        : Entries.Protection_Entries_Access;
!       Unlock_Object : Boolean := True)
     is
!       E          : Protected_Entry_Index;
!       Caller     : Task_Id;
!       Entry_Call : Entry_Call_Link;
  
     begin
        loop
           Queuing.Select_Protected_Entry_Call (Self_ID, Object, Entry_Call);
  
!          exit when Entry_Call = null;
  
!          E := Protected_Entry_Index (Entry_Call.E);
  
!          --  Not abortable while service is in progress.
  
!          if Entry_Call.State = Now_Abortable then
!             Entry_Call.State := Was_Abortable;
!          end if;
  
!          Object.Call_In_Progress := Entry_Call;
  
!          begin
!             if Runtime_Traces then
!                Send_Trace_Info (PO_Run, Self_ID,
!                                 Entry_Call.Self, Entry_Index (E));
!             end if;
  
!             pragma Debug
!              (Debug.Trace (Self_ID, "POSE: start entry body", 'P'));
!             Object.Entry_Bodies (
!               Object.Find_Body_Index (Object.Compiler_Info, E)).Action (
!                 Object.Compiler_Info, Entry_Call.Uninterpreted_Data, E);
!          exception
!             when others =>
!                Queuing.Broadcast_Program_Error
!                  (Self_ID, Object, Entry_Call);
!          end;
  
!          if Object.Call_In_Progress = null then
!             Requeue_Call
!               (Self_ID, Object, Entry_Call, Entry_Call.Requeue_With_Abort);
!             exit when Entry_Call.State = Cancelled;
  
!          else
!             Object.Call_In_Progress := null;
!             Caller := Entry_Call.Self;
  
!             if Single_Lock then
!                STPO.Lock_RTS;
!             end if;
  
!             STPO.Write_Lock (Caller);
!             Initialization.Wakeup_Entry_Caller (Self_ID, Entry_Call, Done);
!             STPO.Unlock (Caller);
  
!             if Single_Lock then
!                STPO.Unlock_RTS;
              end if;
           end if;
        end loop;
+ 
+       if Unlock_Object then
+          Unlock_Entries (Object);
+       end if;
     end PO_Service_Entries;
  
     ---------------------
*************** package body System.Tasking.Protected_Ob
*** 655,661 ****
        Mode                : Call_Modes;
        Block               : out Communication_Block)
     is
!       Self_ID             : Task_ID  := STPO.Self;
        Entry_Call          : Entry_Call_Link;
        Initially_Abortable : Boolean;
        Ceiling_Violation   : Boolean;
--- 519,525 ----
        Mode                : Call_Modes;
        Block               : out Communication_Block)
     is
!       Self_ID             : constant Task_Id  := STPO.Self;
        Entry_Call          : Entry_Call_Link;
        Initially_Abortable : Boolean;
        Ceiling_Violation   : Boolean;
*************** package body System.Tasking.Protected_Ob
*** 712,730 ****
        Initially_Abortable := Entry_Call.State = Now_Abortable;
        PO_Service_Entries (Self_ID, Object);
  
!       Unlock_Entries (Object);
! 
!       --  Try to prevent waiting later (in Cancel_Protected_Entry_Call)
        --  for completed or cancelled calls.  (This is a heuristic, only.)
  
        if Entry_Call.State >= Done then
  
           --  Once State >= Done it will not change any more.
  
!          Self_ID.ATC_Nesting_Level := Self_ID.ATC_Nesting_Level - 1;
!          pragma Debug
!            (Debug.Trace (Self_ID, "PEC: exited to ATC level: " &
!             ATC_Level'Image (Self_ID.ATC_Nesting_Level), 'A'));
           Block.Enqueued := False;
           Block.Cancelled := Entry_Call.State = Cancelled;
           Initialization.Undefer_Abort (Self_ID);
--- 576,600 ----
        Initially_Abortable := Entry_Call.State = Now_Abortable;
        PO_Service_Entries (Self_ID, Object);
  
!       --  Try to prevent waiting later (in Try_To_Cancel_Protected_Entry_Call)
        --  for completed or cancelled calls.  (This is a heuristic, only.)
  
        if Entry_Call.State >= Done then
  
           --  Once State >= Done it will not change any more.
  
!          if Single_Lock then
!             STPO.Lock_RTS;
!          end if;
! 
!          STPO.Write_Lock (Self_ID);
!          Utilities.Exit_One_ATC_Level (Self_ID);
!          STPO.Unlock (Self_ID);
! 
!          if Single_Lock then
!             STPO.Unlock_RTS;
!          end if;
! 
           Block.Enqueued := False;
           Block.Cancelled := Entry_Call.State = Cancelled;
           Initialization.Undefer_Abort (Self_ID);
*************** package body System.Tasking.Protected_Ob
*** 778,789 ****
        Entry_Calls.Check_Exception (Self_ID, Entry_Call);
     end Protected_Entry_Call;
  
     ----------------------------
     -- Protected_Entry_Caller --
     ----------------------------
  
     function Protected_Entry_Caller
!      (Object : Protection_Entries'Class) return Task_ID is
     begin
        return Object.Call_In_Progress.Self;
     end Protected_Entry_Caller;
--- 648,745 ----
        Entry_Calls.Check_Exception (Self_ID, Entry_Call);
     end Protected_Entry_Call;
  
+    ------------------
+    -- Requeue_Call --
+    ------------------
+ 
+    procedure Requeue_Call
+      (Self_Id    : Task_Id;
+       Object     : Protection_Entries_Access;
+       Entry_Call : Entry_Call_Link;
+       With_Abort : Boolean)
+    is
+       New_Object        : Protection_Entries_Access;
+       Ceiling_Violation : Boolean;
+       Result            : Boolean;
+       E                 : Protected_Entry_Index;
+ 
+    begin
+       New_Object := To_Protection (Entry_Call.Called_PO);
+ 
+       if New_Object = null then
+ 
+          --  Call is to be requeued to a task entry
+ 
+          if Single_Lock then
+             STPO.Lock_RTS;
+          end if;
+ 
+          Result := Rendezvous.Task_Do_Or_Queue
+            (Self_Id, Entry_Call,
+             With_Abort => Entry_Call.Requeue_With_Abort);
+ 
+          if not Result then
+             Queuing.Broadcast_Program_Error
+               (Self_Id, Object, Entry_Call, RTS_Locked => True);
+          end if;
+ 
+          if Single_Lock then
+             STPO.Unlock_RTS;
+          end if;
+ 
+       else
+          --  Call should be requeued to a PO
+ 
+          if Object /= New_Object then
+ 
+             --  Requeue is to different PO
+ 
+             Lock_Entries (New_Object, Ceiling_Violation);
+ 
+             if Ceiling_Violation then
+                Object.Call_In_Progress := null;
+                Queuing.Broadcast_Program_Error
+                  (Self_Id, Object, Entry_Call);
+ 
+             else
+                PO_Do_Or_Queue (Self_Id, New_Object, Entry_Call, With_Abort);
+                PO_Service_Entries (Self_Id, New_Object);
+             end if;
+ 
+          else
+             --  Requeue is to same protected object
+ 
+             if Entry_Call.Requeue_With_Abort
+               and then Entry_Call.Cancellation_Attempted
+             then
+                --  If this is a requeue with abort and someone tried
+                --  to cancel this call, cancel it at this point.
+ 
+                Entry_Call.State := Cancelled;
+                return;
+             end if;
+ 
+             if not With_Abort
+               or else Entry_Call.Mode /= Conditional_Call
+             then
+                E := Protected_Entry_Index (Entry_Call.E);
+                Queuing.Enqueue
+                  (New_Object.Entry_Queues (E), Entry_Call);
+                Update_For_Queue_To_PO (Entry_Call, With_Abort);
+ 
+             else
+                PO_Do_Or_Queue (Self_Id, New_Object, Entry_Call, With_Abort);
+             end if;
+          end if;
+       end if;
+    end Requeue_Call;
+ 
     ----------------------------
     -- Protected_Entry_Caller --
     ----------------------------
  
     function Protected_Entry_Caller
!      (Object : Protection_Entries'Class) return Task_Id is
     begin
        return Object.Call_In_Progress.Self;
     end Protected_Entry_Caller;
*************** package body System.Tasking.Protected_Ob
*** 881,887 ****
        E          : Protected_Entry_Index;
        With_Abort : Boolean)
     is
!       Self_ID    : constant Task_ID := STPO.Self;
        Entry_Call : constant Entry_Call_Link := Self_ID.Common.Call;
  
     begin
--- 837,843 ----
        E          : Protected_Entry_Index;
        With_Abort : Boolean)
     is
!       Self_ID    : constant Task_Id := STPO.Self;
        Entry_Call : constant Entry_Call_Link := Self_ID.Common.Call;
  
     begin
*************** package body System.Tasking.Protected_Ob
*** 903,909 ****
     ---------------------
  
     procedure Service_Entries (Object : Protection_Entries_Access) is
!       Self_ID : constant Task_ID := STPO.Self;
     begin
        PO_Service_Entries (Self_ID, Object);
     end Service_Entries;
--- 859,865 ----
     ---------------------
  
     procedure Service_Entries (Object : Protection_Entries_Access) is
!       Self_ID : constant Task_Id := STPO.Self;
     begin
        PO_Service_Entries (Self_ID, Object);
     end Service_Entries;
*************** package body System.Tasking.Protected_Ob
*** 922,928 ****
        Mode                  : Delay_Modes;
        Entry_Call_Successful : out Boolean)
     is
!       Self_Id           : constant Task_ID  := STPO.Self;
        Entry_Call        : Entry_Call_Link;
        Ceiling_Violation : Boolean;
        Yielded           : Boolean;
--- 878,884 ----
        Mode                  : Delay_Modes;
        Entry_Call_Successful : out Boolean)
     is
!       Self_Id           : constant Task_Id  := STPO.Self;
        Entry_Call        : Entry_Call_Link;
        Ceiling_Violation : Boolean;
        Yielded           : Boolean;
*************** package body System.Tasking.Protected_Ob
*** 971,997 ****
        PO_Do_Or_Queue (Self_Id, Object, Entry_Call, With_Abort => True);
        PO_Service_Entries (Self_Id, Object);
  
!       Unlock_Entries (Object);
  
        --  Try to avoid waiting for completed or cancelled calls.
  
        if Entry_Call.State >= Done then
!          Self_Id.ATC_Nesting_Level := Self_Id.ATC_Nesting_Level - 1;
!          pragma Debug
!            (Debug.Trace (Self_Id, "TPEC: exited to ATC level: " &
!             ATC_Level'Image (Self_Id.ATC_Nesting_Level), 'A'));
           Entry_Call_Successful := Entry_Call.State = Done;
           Initialization.Undefer_Abort (Self_Id);
           Entry_Calls.Check_Exception (Self_Id, Entry_Call);
           return;
        end if;
  
-       if Single_Lock then
-          STPO.Lock_RTS;
-       else
-          STPO.Write_Lock (Self_Id);
-       end if;
- 
        Entry_Calls.Wait_For_Completion_With_Timeout
          (Entry_Call, Timeout, Mode, Yielded);
  
--- 927,955 ----
        PO_Do_Or_Queue (Self_Id, Object, Entry_Call, With_Abort => True);
        PO_Service_Entries (Self_Id, Object);
  
!       if Single_Lock then
!          STPO.Lock_RTS;
!       else
!          STPO.Write_Lock (Self_Id);
!       end if;
  
        --  Try to avoid waiting for completed or cancelled calls.
  
        if Entry_Call.State >= Done then
!          Utilities.Exit_One_ATC_Level (Self_Id);
! 
!          if Single_Lock then
!             STPO.Unlock_RTS;
!          else
!             STPO.Unlock (Self_Id);
!          end if;
! 
           Entry_Call_Successful := Entry_Call.State = Done;
           Initialization.Undefer_Abort (Self_Id);
           Entry_Calls.Check_Exception (Self_Id, Entry_Call);
           return;
        end if;
  
        Entry_Calls.Wait_For_Completion_With_Timeout
          (Entry_Call, Timeout, Mode, Yielded);
  
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tpobop.ads gcc-4.0.0/gcc/ada/s-tpobop.ads
*** gcc-3.4.3/gcc/ada/s-tpobop.ads	Tue Oct 21 13:42:18 2003
--- gcc-4.0.0/gcc/ada/s-tpobop.ads	Mon May 17 13:20:48 2004
***************
*** 7,13 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2001, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 7,13 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package System.Tasking.Protected_Objects
*** 95,113 ****
     pragma Inline (Service_Entries);
  
     procedure PO_Service_Entries
!      (Self_ID : Task_ID;
!       Object  : Entries.Protection_Entries_Access);
     --  Service all entry queues of the specified object, executing the
     --  corresponding bodies of any queued entry calls that are waiting
     --  on True barriers. This is used when the state of a protected
     --  object may have changed, in particular after the execution of
     --  the statement sequence of a protected procedure.
     --  Note that servicing an entry may change the value of one or more
     --  barriers, so this routine keeps checking barriers until all of
     --  them are closed.
     --
     --  This must be called with abortion deferred and with the corresponding
     --  object locked.
  
     procedure Complete_Entry_Body (Object : Entries.Protection_Entries_Access);
     --  Called from within an entry body procedure, indicates that the
--- 95,119 ----
     pragma Inline (Service_Entries);
  
     procedure PO_Service_Entries
!      (Self_ID       : Task_Id;
!       Object        : Entries.Protection_Entries_Access;
!       Unlock_Object : Boolean := True);
     --  Service all entry queues of the specified object, executing the
     --  corresponding bodies of any queued entry calls that are waiting
     --  on True barriers. This is used when the state of a protected
     --  object may have changed, in particular after the execution of
     --  the statement sequence of a protected procedure.
+    --
     --  Note that servicing an entry may change the value of one or more
     --  barriers, so this routine keeps checking barriers until all of
     --  them are closed.
     --
     --  This must be called with abortion deferred and with the corresponding
     --  object locked.
+    --
+    --  If Unlock_Object is set True, then Object is unlocked on return,
+    --  otherwise Object remains locked and the caller is responsible for
+    --  the required unlock.
  
     procedure Complete_Entry_Body (Object : Entries.Protection_Entries_Access);
     --  Called from within an entry body procedure, indicates that the
*************** package System.Tasking.Protected_Objects
*** 170,176 ****
     --  Return the number of entry calls to E on Object.
  
     function Protected_Entry_Caller
!      (Object : Entries.Protection_Entries'Class) return Task_ID;
     --  Return value of E'Caller, where E is the protected entry currently
     --  being handled. This will only work if called from within an entry
     --  body, as required by the LRM (C.7.1(14)).
--- 176,182 ----
     --  Return the number of entry calls to E on Object.
  
     function Protected_Entry_Caller
!      (Object : Entries.Protection_Entries'Class) return Task_Id;
     --  Return value of E'Caller, where E is the protected entry currently
     --  being handled. This will only work if called from within an entry
     --  body, as required by the LRM (C.7.1(14)).
*************** package System.Tasking.Protected_Objects
*** 178,184 ****
     --  For internal use only:
  
     procedure PO_Do_Or_Queue
!      (Self_ID    : Task_ID;
        Object     : Entries.Protection_Entries_Access;
        Entry_Call : Entry_Call_Link;
        With_Abort : Boolean);
--- 184,190 ----
     --  For internal use only:
  
     procedure PO_Do_Or_Queue
!      (Self_ID    : Task_Id;
        Object     : Entries.Protection_Entries_Access;
        Entry_Call : Entry_Call_Link;
        With_Abort : Boolean);
*************** package System.Tasking.Protected_Objects
*** 188,194 ****
  
  private
     type Communication_Block is record
!       Self      : Task_ID;
        Enqueued  : Boolean := True;
        Cancelled : Boolean := False;
     end record;
--- 194,200 ----
  
  private
     type Communication_Block is record
!       Self      : Task_Id;
        Enqueued  : Boolean := True;
        Cancelled : Boolean := False;
     end record;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tpopde-vms.adb gcc-4.0.0/gcc/ada/s-tpopde-vms.adb
*** gcc-3.4.3/gcc/ada/s-tpopde-vms.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-tpopde-vms.adb	Thu Feb 10 13:49:28 2005
***************
*** 0 ****
--- 1,168 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   SYSTEM.TASK_PRIMITIVES.OPERATIONS.DEC                  --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --           Copyright (C) 2000-2005 Free Software Foundation, Inc.         --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --   This package is for OpenVMS/Alpha
+ 
+ with System.OS_Interface;
+ with System.Parameters;
+ with System.Tasking;
+ with Unchecked_Conversion;
+ with System.Soft_Links;
+ 
+ package body System.Task_Primitives.Operations.DEC is
+ 
+    use System.OS_Interface;
+    use System.Parameters;
+    use System.Tasking;
+    use System.Aux_DEC;
+    use type Interfaces.C.int;
+ 
+    package SSL renames System.Soft_Links;
+ 
+    --  The FAB_RAB_Type specifies where the context field (the calling
+    --  task) is stored.  Other fields defined for FAB_RAB arent' need and
+    --  so are ignored.
+ 
+    type FAB_RAB_Type is record
+       CTX : Unsigned_Longword;
+    end record;
+ 
+    for FAB_RAB_Type use record
+       CTX at 24 range 0 .. 31;
+    end record;
+ 
+    for FAB_RAB_Type'Size use 224;
+ 
+    type FAB_RAB_Access_Type is access all FAB_RAB_Type;
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    pragma Warnings (Off);
+    --  Task_Id is 64 bits wide (but only 32 bits significant) on Integrity/VMS
+ 
+    function To_Unsigned_Longword is new
+      Unchecked_Conversion (Task_Id, Unsigned_Longword);
+ 
+    function To_Task_Id is new
+      Unchecked_Conversion (Unsigned_Longword, Task_Id);
+ 
+    pragma Warnings (On);
+ 
+    function To_FAB_RAB is new
+      Unchecked_Conversion (Address, FAB_RAB_Access_Type);
+ 
+    ---------------------------
+    -- Interrupt_AST_Handler --
+    ---------------------------
+ 
+    procedure Interrupt_AST_Handler (ID : Address) is
+       Result      : Interfaces.C.int;
+       AST_Self_ID : constant Task_Id := To_Task_Id (ID);
+    begin
+       Result := pthread_cond_signal_int_np (AST_Self_ID.Common.LL.CV'Access);
+       pragma Assert (Result = 0);
+    end Interrupt_AST_Handler;
+ 
+    ---------------------
+    -- RMS_AST_Handler --
+    ---------------------
+ 
+    procedure RMS_AST_Handler (ID : Address) is
+       AST_Self_ID : constant Task_Id := To_Task_Id (To_FAB_RAB (ID).CTX);
+       Result      : Interfaces.C.int;
+ 
+    begin
+       AST_Self_ID.Common.LL.AST_Pending := False;
+       Result := pthread_cond_signal_int_np (AST_Self_ID.Common.LL.CV'Access);
+       pragma Assert (Result = 0);
+    end RMS_AST_Handler;
+ 
+    ----------
+    -- Self --
+    ----------
+ 
+    function Self return Unsigned_Longword is
+       Self_ID : constant Task_Id := Self;
+    begin
+       Self_ID.Common.LL.AST_Pending := True;
+       return To_Unsigned_Longword (Self);
+    end Self;
+ 
+    -------------------------
+    -- Starlet_AST_Handler --
+    -------------------------
+ 
+    procedure Starlet_AST_Handler (ID : Address) is
+       Result      : Interfaces.C.int;
+       AST_Self_ID : constant Task_Id := To_Task_Id (ID);
+    begin
+       AST_Self_ID.Common.LL.AST_Pending := False;
+       Result := pthread_cond_signal_int_np (AST_Self_ID.Common.LL.CV'Access);
+       pragma Assert (Result = 0);
+    end Starlet_AST_Handler;
+ 
+    ----------------
+    -- Task_Synch --
+    ----------------
+ 
+    procedure Task_Synch is
+       Synch_Self_ID : constant Task_Id := Self;
+ 
+    begin
+       if Single_Lock then
+          Lock_RTS;
+       else
+          Write_Lock (Synch_Self_ID);
+       end if;
+ 
+       SSL.Abort_Defer.all;
+       Synch_Self_ID.Common.State := AST_Server_Sleep;
+ 
+       while Synch_Self_ID.Common.LL.AST_Pending loop
+          Sleep (Synch_Self_ID, AST_Server_Sleep);
+       end loop;
+ 
+       Synch_Self_ID.Common.State := Runnable;
+ 
+       if Single_Lock then
+          Unlock_RTS;
+       else
+          Unlock (Synch_Self_ID);
+       end if;
+ 
+       SSL.Abort_Undefer.all;
+    end Task_Synch;
+ 
+ end System.Task_Primitives.Operations.DEC;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tpopde-vms.ads gcc-4.0.0/gcc/ada/s-tpopde-vms.ads
*** gcc-3.4.3/gcc/ada/s-tpopde-vms.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-tpopde-vms.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,54 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                   SYSTEM.TASK_PRIMITIVES.OPERATIONS.DEC                  --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --          Copyright (C) 2000-2003 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package is for OpenVMS/Alpha.
+ --
+ with System.Aux_DEC;
+ package System.Task_Primitives.Operations.DEC is
+ 
+    procedure Interrupt_AST_Handler (ID : Address);
+    --  Handles the AST for Ada95 Interrupts.
+ 
+    procedure RMS_AST_Handler (ID : Address);
+    --  Handles the AST for RMS_Asynch_Operations.
+ 
+    function Self return System.Aux_DEC.Unsigned_Longword;
+    --  Returns the task identification for the AST.
+ 
+    procedure Starlet_AST_Handler (ID : Address);
+    --  Handles the AST for Starlet Tasking_Services.
+ 
+    procedure Task_Synch;
+    --  Synchronizes the task after the system service completes.
+ 
+ end System.Task_Primitives.Operations.DEC;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tpopsp-lynxos.adb gcc-4.0.0/gcc/ada/s-tpopsp-lynxos.adb
*** gcc-3.4.3/gcc/ada/s-tpopsp-lynxos.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-tpopsp-lynxos.adb	Mon May 17 13:20:42 2004
***************
*** 0 ****
--- 1,113 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                SYSTEM.TASK_PRIMITIVES.OPERATIONS.SPECIFIC                --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --         Copyright (C) 1992-2004, Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a LynxOS version of this package.
+ 
+ separate (System.Task_Primitives.Operations)
+ package body Specific is
+ 
+    ----------------
+    -- Initialize --
+    ----------------
+ 
+    procedure Initialize (Environment_Task : Task_Id) is
+       pragma Warnings (Off, Environment_Task);
+       Result : Interfaces.C.int;
+ 
+    begin
+       Result := st_keycreate (null, ATCB_Key'Access);
+       pragma Assert (Result = 0);
+    end Initialize;
+ 
+    -------------------
+    -- Is_Valid_Task --
+    -------------------
+ 
+    function Is_Valid_Task return Boolean is
+       Result : Interfaces.C.int;
+       Value : aliased System.Address;
+    begin
+       Result := st_getspecific (ATCB_Key, Value'Address);
+       pragma Assert (Result = 0);
+       return (Value /= System.Null_Address);
+    end Is_Valid_Task;
+ 
+    ---------
+    -- Set --
+    ---------
+ 
+    procedure Set (Self_Id : Task_Id) is
+       Result : Interfaces.C.int;
+ 
+    begin
+       Result := st_setspecific (ATCB_Key, To_Address (Self_Id));
+       pragma Assert (Result = 0);
+    end Set;
+ 
+    ----------
+    -- Self --
+    ----------
+ 
+    --  To make Ada tasks and C threads interoperate better, we have added some
+    --  functionality to Self. Suppose a C main program (with threads) calls an
+    --  Ada procedure and the Ada procedure calls the tasking runtime system.
+    --  Eventually, a call will be made to self. Since the call is not coming
+    --  from an Ada task, there will be no corresponding ATCB.
+ 
+    --  What we do in Self is to catch references that do not come from
+    --  recognized Ada tasks, and create an ATCB for the calling thread.
+ 
+    --  The new ATCB will be "detached" from the normal Ada task master
+    --  hierarchy, much like the existing implicitly created signal-server
+    --  tasks.
+ 
+    function Self return Task_Id is
+       Value : aliased System.Address;
+ 
+       Result : Interfaces.C.int;
+       pragma Unreferenced (Result);
+ 
+    begin
+       Result := st_getspecific (ATCB_Key, Value'Address);
+       --  Is it OK not to check this result???
+ 
+       --  If the key value is Null, then it is a non-Ada task.
+ 
+       if Value /= System.Null_Address then
+          return To_Task_Id (Value);
+       else
+          return Register_Foreign_Thread;
+       end if;
+    end Self;
+ 
+ end Specific;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tpopsp-posix-foreign.adb gcc-4.0.0/gcc/ada/s-tpopsp-posix-foreign.adb
*** gcc-3.4.3/gcc/ada/s-tpopsp-posix-foreign.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-tpopsp-posix-foreign.adb	Mon May 17 13:20:42 2004
***************
*** 0 ****
--- 1,108 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                SYSTEM.TASK_PRIMITIVES.OPERATIONS.SPECIFIC                --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --         Copyright (C) 1992-2004, Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a POSIX version of this package where foreign threads are
+ --  recognized.
+ 
+ --  Currently, DEC Unix, SCO UnixWare, Solaris pthread, HPUX pthread and
+ --  GNU/Linux threads use this version.
+ 
+ separate (System.Task_Primitives.Operations)
+ package body Specific is
+ 
+    ----------------
+    -- Initialize --
+    ----------------
+ 
+    procedure Initialize (Environment_Task : Task_Id) is
+       pragma Warnings (Off, Environment_Task);
+       Result : Interfaces.C.int;
+ 
+    begin
+       Result := pthread_key_create (ATCB_Key'Access, null);
+       pragma Assert (Result = 0);
+    end Initialize;
+ 
+    -------------------
+    -- Is_Valid_Task --
+    -------------------
+ 
+    function Is_Valid_Task return Boolean is
+    begin
+       return pthread_getspecific (ATCB_Key) /= System.Null_Address;
+    end Is_Valid_Task;
+ 
+    ---------
+    -- Set --
+    ---------
+ 
+    procedure Set (Self_Id : Task_Id) is
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_setspecific (ATCB_Key, To_Address (Self_Id));
+       pragma Assert (Result = 0);
+    end Set;
+ 
+    ----------
+    -- Self --
+    ----------
+ 
+    --  To make Ada tasks and C threads interoperate better, we have added some
+    --  functionality to Self. Suppose a C main program (with threads) calls an
+    --  Ada procedure and the Ada procedure calls the tasking runtime system.
+    --  Eventually, a call will be made to self. Since the call is not coming
+    --  from an Ada task, there will be no corresponding ATCB.
+ 
+    --  What we do in Self is to catch references that do not come from
+    --  recognized Ada tasks, and create an ATCB for the calling thread.
+ 
+    --  The new ATCB will be "detached" from the normal Ada task master
+    --  hierarchy, much like the existing implicitly created signal-server
+    --  tasks.
+ 
+    function Self return Task_Id is
+       Result : System.Address;
+ 
+    begin
+       Result := pthread_getspecific (ATCB_Key);
+ 
+       --  If the key value is Null, then it is a non-Ada task.
+ 
+       if Result /= System.Null_Address then
+          return To_Task_Id (Result);
+       else
+          return Register_Foreign_Thread;
+       end if;
+    end Self;
+ 
+ end Specific;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tpopsp-posix.adb gcc-4.0.0/gcc/ada/s-tpopsp-posix.adb
*** gcc-3.4.3/gcc/ada/s-tpopsp-posix.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-tpopsp-posix.adb	Mon May 17 13:20:42 2004
***************
*** 0 ****
--- 1,80 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                SYSTEM.TASK_PRIMITIVES.OPERATIONS.SPECIFIC                --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --            Copyright (C) 1992-2004, Free Software Fundation, Inc.        --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a POSIX-like version of this package.
+ 
+ separate (System.Task_Primitives.Operations)
+ package body Specific is
+ 
+    ----------------
+    -- Initialize --
+    ----------------
+ 
+    procedure Initialize (Environment_Task : Task_Id) is
+       pragma Warnings (Off, Environment_Task);
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_key_create (ATCB_Key'Access, null);
+       pragma Assert (Result = 0);
+    end Initialize;
+ 
+    -------------------
+    -- Is_Valid_Task --
+    -------------------
+ 
+    function Is_Valid_Task return Boolean is
+    begin
+       return  pthread_getspecific (ATCB_Key) /= System.Null_Address;
+    end Is_Valid_Task;
+ 
+    ---------
+    -- Set --
+    ---------
+ 
+    procedure Set (Self_Id : Task_Id) is
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_setspecific (ATCB_Key, To_Address (Self_Id));
+       pragma Assert (Result = 0);
+    end Set;
+ 
+    ----------
+    -- Self --
+    ----------
+ 
+    function Self return Task_Id is
+    begin
+       return To_Task_Id (pthread_getspecific (ATCB_Key));
+    end Self;
+ 
+ end Specific;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tpopsp-rtems.adb gcc-4.0.0/gcc/ada/s-tpopsp-rtems.adb
*** gcc-3.4.3/gcc/ada/s-tpopsp-rtems.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-tpopsp-rtems.adb	Thu Jan 27 11:56:57 2005
***************
*** 0 ****
--- 1,115 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --    S Y S T E M . T A S K _ P R I M I T I V E S . O P E R A T I O N S .   --
+ --                              S P E C I F I C                             --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --                             $Revision: 1.1 $
+ --                                                                          --
+ --            Copyright (C) 1991-2003, Florida State University             --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University. It is --
+ -- now maintained by Ada Core Technologies Inc. in cooperation with Florida --
+ -- State University (http://www.gnat.com).                                  --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a RTEMS version of this package which uses a special
+ --  variable for Ada self which is contexted switch implicitly by RTEMS.
+ --
+ --  This is the same as the POSIX version except that an RTEMS variable
+ --  is used instead of a POSIX key.
+ 
+ separate (System.Task_Primitives.Operations)
+ package body Specific is
+ 
+    --  The following gives the Ada run-time direct access to a variable
+    --  context switched by RTEMS at the lowest level.
+ 
+    RTEMS_Ada_Self : System.Address;
+    pragma Import (C, RTEMS_Ada_Self, "rtems_ada_self");
+ 
+    ----------------
+    -- Initialize --
+    ----------------
+ 
+    procedure Initialize (Environment_Task : Task_Id) is
+       pragma Warnings (Off, Environment_Task);
+ 
+    begin
+       ATCB_Key := No_Key;
+       RTEMS_Ada_Self := To_Address (Environment_Task);
+    end Initialize;
+ 
+    -------------------
+    -- Is_Valid_Task --
+    -------------------
+ 
+    function Is_Valid_Task return Boolean is
+    begin
+       return RTEMS_Ada_Self /= System.Null_Address;
+    end Is_Valid_Task;
+ 
+    ---------
+    -- Set --
+    ---------
+ 
+    procedure Set (Self_Id : Task_Id) is
+    begin
+       RTEMS_Ada_Self := To_Address (Self_Id);
+    end Set;
+ 
+    ----------
+    -- Self --
+    ----------
+ 
+    --  To make Ada tasks and C threads interoperate better, we have added some
+    --  functionality to Self. Suppose a C main program (with threads) calls an
+    --  Ada procedure and the Ada procedure calls the tasking runtime system.
+    --  Eventually, a call will be made to self. Since the call is not coming
+    --  from an Ada task, there will be no corresponding ATCB.
+ 
+    --  What we do in Self is to catch references that do not come from
+    --  recognized Ada tasks, and create an ATCB for the calling thread.
+ 
+    --  The new ATCB will be "detached" from the normal Ada task master
+    --  hierarchy, much like the existing implicitly created signal-server
+    --  tasks.
+ 
+    function Self return Task_Id is
+       Result : System.Address;
+ 
+    begin
+       Result := RTEMS_Ada_Self;
+ 
+       --  If the key value is Null, then it is a non-Ada task.
+ 
+       if Result /= System.Null_Address then
+          return To_Task_Id (Result);
+       else
+          return Register_Foreign_Thread;
+       end if;
+    end Self;
+ 
+ end Specific;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tpopsp-solaris.adb gcc-4.0.0/gcc/ada/s-tpopsp-solaris.adb
*** gcc-3.4.3/gcc/ada/s-tpopsp-solaris.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-tpopsp-solaris.adb	Mon May 17 13:20:42 2004
***************
*** 0 ****
--- 1,107 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                SYSTEM.TASK_PRIMITIVES.OPERATIONS.SPECIFIC                --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --         Copyright (C) 1992-2004, Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a version for Solaris native threads
+ 
+ separate (System.Task_Primitives.Operations)
+ package body Specific is
+ 
+    ----------------
+    -- Initialize --
+    ----------------
+ 
+    procedure Initialize (Environment_Task : Task_Id) is
+       Result : Interfaces.C.int;
+    begin
+       Result := thr_setspecific (ATCB_Key, To_Address (Environment_Task));
+       pragma Assert (Result = 0);
+    end Initialize;
+ 
+    -------------------
+    -- Is_Valid_Task --
+    -------------------
+ 
+    function Is_Valid_Task return Boolean is
+       Unknown_Task : aliased System.Address;
+       Result       : Interfaces.C.int;
+    begin
+       Result := thr_getspecific (ATCB_Key, Unknown_Task'Unchecked_Access);
+       pragma Assert (Result = 0);
+       return Unknown_Task /= System.Null_Address;
+    end Is_Valid_Task;
+ 
+    ---------
+    -- Set --
+    ---------
+ 
+    procedure Set (Self_Id : Task_Id) is
+       Result : Interfaces.C.int;
+    begin
+       Result := thr_setspecific (ATCB_Key, To_Address (Self_Id));
+       pragma Assert (Result = 0);
+    end Set;
+ 
+    ----------
+    -- Self --
+    ----------
+ 
+    --  To make Ada tasks and C threads interoperate better, we have
+    --  added some functionality to Self. Suppose a C main program
+    --  (with threads) calls an Ada procedure and the Ada procedure
+    --  calls the tasking run-time system. Eventually, a call will be
+    --  made to self. Since the call is not coming from an Ada task,
+    --  there will be no corresponding ATCB.
+ 
+    --  What we do in Self is to catch references that do not come
+    --  from recognized Ada tasks, and create an ATCB for the calling
+    --  thread.
+ 
+    --  The new ATCB will be "detached" from the normal Ada task
+    --  master hierarchy, much like the existing implicitly created
+    --  signal-server tasks.
+ 
+    function Self return Task_Id is
+       Result  : Interfaces.C.int;
+       Self_Id : aliased System.Address;
+    begin
+       Result := thr_getspecific (ATCB_Key, Self_Id'Unchecked_Access);
+       pragma Assert (Result = 0);
+ 
+       if Self_Id = System.Null_Address then
+          return Register_Foreign_Thread;
+       else
+          return To_Task_Id (Self_Id);
+       end if;
+    end Self;
+ 
+ end Specific;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tpopsp-vxworks.adb gcc-4.0.0/gcc/ada/s-tpopsp-vxworks.adb
*** gcc-3.4.3/gcc/ada/s-tpopsp-vxworks.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-tpopsp-vxworks.adb	Mon May 17 13:20:42 2004
***************
*** 0 ****
--- 1,74 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                SYSTEM.TASK_PRIMITIVES.OPERATIONS.SPECIFIC                --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --         Copyright (C) 1992-2004, Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is a VxWorks version of this package where foreign threads are
+ --  recognized.
+ 
+ separate (System.Task_Primitives.Operations)
+ package body Specific is
+ 
+    -------------------
+    -- Is_Valid_Task --
+    -------------------
+ 
+    function Is_Valid_Task return Boolean is
+    begin
+       return taskVarGet (taskIdSelf, ATCB_Key'Access) /= ERROR;
+    end Is_Valid_Task;
+ 
+    ---------
+    -- Set --
+    ---------
+ 
+    procedure Set (Self_Id : Task_Id) is
+       Result : STATUS;
+ 
+    begin
+       if taskVarGet (0, ATCB_Key'Access) = ERROR then
+          Result := taskVarAdd (0, ATCB_Key'Access);
+          pragma Assert (Result = OK);
+       end if;
+ 
+       ATCB_Key := To_Address (Self_Id);
+    end Set;
+ 
+    ----------
+    -- Self --
+    ----------
+ 
+    function Self return Task_Id is
+    begin
+       return To_Task_Id (ATCB_Key);
+    end Self;
+ 
+ end Specific;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tporft.adb gcc-4.0.0/gcc/ada/s-tporft.adb
*** gcc-3.4.3/gcc/ada/s-tporft.adb	Tue Oct 21 13:42:18 2003
--- gcc-4.0.0/gcc/ada/s-tporft.adb	Thu Feb 10 13:56:32 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 2002-2003, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 2002-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with System.Soft_Links;
*** 38,46 ****
  --  used to initialize TSD for a C thread, in function Self
  
  separate (System.Task_Primitives.Operations)
! function Register_Foreign_Thread (Thread : Thread_Id) return Task_ID is
     Local_ATCB : aliased Ada_Task_Control_Block (0);
!    Self_Id    : Task_ID;
     Succeeded  : Boolean;
  
     use type Interfaces.C.unsigned;
--- 38,46 ----
  --  used to initialize TSD for a C thread, in function Self
  
  separate (System.Task_Primitives.Operations)
! function Register_Foreign_Thread (Thread : Thread_Id) return Task_Id is
     Local_ATCB : aliased Ada_Task_Control_Block (0);
!    Self_Id    : Task_Id;
     Succeeded  : Boolean;
  
     use type Interfaces.C.unsigned;
*************** begin
*** 51,57 ****
     --  immediately, we fake one, so that it is then possible to e.g allocate
     --  memory (which might require accessing self).
  
!    --  Record this as the Task_ID for the thread
  
     Local_ATCB.Common.LL.Thread := Thread;
     Local_ATCB.Common.Current_Priority := System.Priority'First;
--- 51,57 ----
     --  immediately, we fake one, so that it is then possible to e.g allocate
     --  memory (which might require accessing self).
  
!    --  Record this as the Task_Id for the thread
  
     Local_ATCB.Common.LL.Thread := Thread;
     Local_ATCB.Common.Current_Priority := System.Priority'First;
*************** begin
*** 63,73 ****
--- 63,75 ----
  
     --  Finish initialization
  
+    Lock_RTS;
     System.Tasking.Initialize_ATCB
       (Self_Id, null, Null_Address, Null_Task,
        Foreign_Task_Elaborated'Access,
        System.Priority'First, Task_Info.Unspecified_Task_Info, 0, Self_Id,
        Succeeded);
+    Unlock_RTS;
     pragma Assert (Succeeded);
  
     Self_Id.Master_of_Task := 0;
*************** begin
*** 81,86 ****
--- 83,91 ----
     Self_Id.Common.State := Runnable;
     Self_Id.Awake_Count := 1;
  
+    Self_Id.Common.Task_Image (1 .. 14) := "foreign thread";
+    Self_Id.Common.Task_Image_Len := 14;
+ 
     --  Since this is not an ordinary Ada task, we will start out undeferred
  
     Self_Id.Deferral_Level := 0;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tposen.adb gcc-4.0.0/gcc/ada/s-tposen.adb
*** gcc-3.4.3/gcc/ada/s-tposen.adb	Tue Oct 21 13:42:18 2003
--- gcc-4.0.0/gcc/ada/s-tposen.adb	Fri Nov 19 11:25:38 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1998-2002, Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1998-2004, Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** pragma Style_Checks (All_Checks);
*** 52,58 ****
  --  mentioned above are respected, except for the No_Entry_Queue restriction
  --  that is checked dynamically in this package, since the check cannot be
  --  performed at compile time, and is relatively cheap (see PO_Do_Or_Queue,
! --  PO_Service_Entry).
  
  pragma Polling (Off);
  --  Turn off polling, we do not want polling to take place during tasking
--- 52,58 ----
  --  mentioned above are respected, except for the No_Entry_Queue restriction
  --  that is checked dynamically in this package, since the check cannot be
  --  performed at compile time, and is relatively cheap (see PO_Do_Or_Queue,
! --  Service_Entry).
  
  pragma Polling (Off);
  --  Turn off polling, we do not want polling to take place during tasking
*************** with System.Task_Primitives.Operations;
*** 67,73 ****
  --           Unlock
  
  with Ada.Exceptions;
! --  used for Exception_Id;
  
  with System.Parameters;
  --  used for Single_Lock
--- 67,74 ----
  --           Unlock
  
  with Ada.Exceptions;
! --  used for Exception_Id
! --           Raise_Exception
  
  with System.Parameters;
  --  used for Single_Lock
*************** package body System.Tasking.Protected_Ob
*** 83,89 ****
     -----------------------
  
     procedure Send_Program_Error
!      (Self_Id    : Task_ID;
        Entry_Call : Entry_Call_Link);
     pragma Inline (Send_Program_Error);
     --  Raise Program_Error in the caller of the specified entry call
--- 84,90 ----
     -----------------------
  
     procedure Send_Program_Error
!      (Self_Id    : Task_Id;
        Entry_Call : Entry_Call_Link);
     pragma Inline (Send_Program_Error);
     --  Raise Program_Error in the caller of the specified entry call
*************** package body System.Tasking.Protected_Ob
*** 93,99 ****
     --------------------------
  
     procedure Wakeup_Entry_Caller
!      (Self_ID    : Task_ID;
        Entry_Call : Entry_Call_Link;
        New_State  : Entry_Call_State);
     pragma Inline (Wakeup_Entry_Caller);
--- 94,100 ----
     --------------------------
  
     procedure Wakeup_Entry_Caller
!      (Self_ID    : Task_Id;
        Entry_Call : Entry_Call_Link;
        New_State  : Entry_Call_State);
     pragma Inline (Wakeup_Entry_Caller);
*************** package body System.Tasking.Protected_Ob
*** 121,127 ****
     --  specified in Wakeup_Time as well.
  
     procedure Check_Exception
!      (Self_ID : Task_ID;
        Entry_Call : Entry_Call_Link);
     pragma Inline (Check_Exception);
     --  Raise any pending exception from the Entry_Call.
--- 122,128 ----
     --  specified in Wakeup_Time as well.
  
     procedure Check_Exception
!      (Self_ID : Task_Id;
        Entry_Call : Entry_Call_Link);
     pragma Inline (Check_Exception);
     --  Raise any pending exception from the Entry_Call.
*************** package body System.Tasking.Protected_Ob
*** 130,136 ****
     --  The caller should not be holding any locks, or there will be deadlock.
  
     procedure PO_Do_Or_Queue
!      (Self_Id    : Task_ID;
        Object     : Protection_Entry_Access;
        Entry_Call : Entry_Call_Link);
     --  This procedure executes or queues an entry call, depending
--- 131,137 ----
     --  The caller should not be holding any locks, or there will be deadlock.
  
     procedure PO_Do_Or_Queue
!      (Self_Id    : Task_Id;
        Object     : Protection_Entry_Access;
        Entry_Call : Entry_Call_Link);
     --  This procedure executes or queues an entry call, depending
*************** package body System.Tasking.Protected_Ob
*** 142,148 ****
     ---------------------
  
     procedure Check_Exception
!      (Self_ID    : Task_ID;
        Entry_Call : Entry_Call_Link)
     is
        pragma Warnings (Off, Self_ID);
--- 143,149 ----
     ---------------------
  
     procedure Check_Exception
!      (Self_ID    : Task_Id;
        Entry_Call : Entry_Call_Link)
     is
        pragma Warnings (Off, Self_ID);
*************** package body System.Tasking.Protected_Ob
*** 166,175 ****
     ------------------------
  
     procedure Send_Program_Error
!      (Self_Id    : Task_ID;
        Entry_Call : Entry_Call_Link)
     is
!       Caller : constant Task_ID := Entry_Call.Self;
     begin
        Entry_Call.Exception_To_Raise := Program_Error'Identity;
  
--- 167,176 ----
     ------------------------
  
     procedure Send_Program_Error
!      (Self_Id    : Task_Id;
        Entry_Call : Entry_Call_Link)
     is
!       Caller : constant Task_Id := Entry_Call.Self;
     begin
        Entry_Call.Exception_To_Raise := Program_Error'Identity;
  
*************** package body System.Tasking.Protected_Ob
*** 191,197 ****
     -------------------------
  
     procedure Wait_For_Completion (Entry_Call : Entry_Call_Link) is
!       Self_Id : constant Task_ID := Entry_Call.Self;
     begin
        Self_Id.Common.State := Entry_Caller_Sleep;
        STPO.Sleep (Self_Id, Entry_Caller_Sleep);
--- 192,198 ----
     -------------------------
  
     procedure Wait_For_Completion (Entry_Call : Entry_Call_Link) is
!       Self_Id : constant Task_Id := Entry_Call.Self;
     begin
        Self_Id.Common.State := Entry_Caller_Sleep;
        STPO.Sleep (Self_Id, Entry_Caller_Sleep);
*************** package body System.Tasking.Protected_Ob
*** 207,213 ****
        Wakeup_Time : Duration;
        Mode        : Delay_Modes)
     is
!       Self_Id  : constant Task_ID := Entry_Call.Self;
        Timedout : Boolean;
        Yielded  : Boolean;
  
--- 208,214 ----
        Wakeup_Time : Duration;
        Mode        : Delay_Modes)
     is
!       Self_Id  : constant Task_Id := Entry_Call.Self;
        Timedout : Boolean;
        Yielded  : Boolean;
  
*************** package body System.Tasking.Protected_Ob
*** 267,279 ****
     --    to complete.
  
     procedure Wakeup_Entry_Caller
!      (Self_ID    : Task_ID;
        Entry_Call : Entry_Call_Link;
        New_State  : Entry_Call_State)
     is
        pragma Warnings (Off, Self_ID);
  
!       Caller : constant Task_ID := Entry_Call.Self;
  
     begin
        pragma Assert (New_State = Done or else New_State = Cancelled);
--- 268,280 ----
     --    to complete.
  
     procedure Wakeup_Entry_Caller
!      (Self_ID    : Task_Id;
        Entry_Call : Entry_Call_Link;
        New_State  : Entry_Call_State)
     is
        pragma Warnings (Off, Self_ID);
  
!       Caller : constant Task_Id := Entry_Call.Self;
  
     begin
        pragma Assert (New_State = Done or else New_State = Cancelled);
*************** package body System.Tasking.Protected_Ob
*** 347,353 ****
--- 348,370 ----
  
     procedure Lock_Entry (Object : Protection_Entry_Access) is
        Ceiling_Violation : Boolean;
+ 
     begin
+       --  If pragma Detect_Blocking is active then the protected object
+       --  nesting level must be increased.
+ 
+       if Detect_Blocking then
+          declare
+             Self_Id : constant Task_Id := STPO.Self;
+          begin
+             --  We are entering in a protected action, so that we
+             --  increase the protected object nesting level.
+ 
+             Self_Id.Common.Protected_Action_Nesting :=
+               Self_Id.Common.Protected_Action_Nesting + 1;
+          end;
+       end if;
+ 
        STPO.Write_Lock (Object.L'Access, Ceiling_Violation);
  
        if Ceiling_Violation then
*************** package body System.Tasking.Protected_Ob
*** 364,370 ****
--- 381,403 ----
  
     procedure Lock_Read_Only_Entry (Object : Protection_Entry_Access) is
        Ceiling_Violation : Boolean;
+ 
     begin
+       --  If pragma Detect_Blocking is active then the protected object
+       --  nesting level must be increased.
+ 
+       if Detect_Blocking then
+          declare
+             Self_Id : constant Task_Id := STPO.Self;
+          begin
+             --  We are entering in a protected action, so that we
+             --  increase the protected object nesting level.
+ 
+             Self_Id.Common.Protected_Action_Nesting :=
+               Self_Id.Common.Protected_Action_Nesting + 1;
+          end;
+       end if;
+ 
        STPO.Read_Lock (Object.L'Access, Ceiling_Violation);
  
        if Ceiling_Violation then
*************** package body System.Tasking.Protected_Ob
*** 377,383 ****
     --------------------
  
     procedure PO_Do_Or_Queue
!      (Self_Id    : Task_ID;
        Object     : Protection_Entry_Access;
        Entry_Call : Entry_Call_Link)
     is
--- 410,416 ----
     --------------------
  
     procedure PO_Do_Or_Queue
!      (Self_Id    : Task_Id;
        Object     : Protection_Entry_Access;
        Entry_Call : Entry_Call_Link)
     is
*************** package body System.Tasking.Protected_Ob
*** 460,470 ****
        Uninterpreted_Data : System.Address;
        Mode               : Call_Modes)
     is
!       Self_Id           : constant Task_ID := STPO.Self;
        Entry_Call        : Entry_Call_Record renames Self_Id.Entry_Calls (1);
        Ceiling_Violation : Boolean;
  
     begin
        STPO.Write_Lock (Object.L'Access, Ceiling_Violation);
  
        if Ceiling_Violation then
--- 493,514 ----
        Uninterpreted_Data : System.Address;
        Mode               : Call_Modes)
     is
!       Self_Id           : constant Task_Id := STPO.Self;
        Entry_Call        : Entry_Call_Record renames Self_Id.Entry_Calls (1);
        Ceiling_Violation : Boolean;
  
     begin
+       --  If pragma Detect_Blocking is active then Program_Error must be
+       --  raised if this potentially blocking operation is called from a
+       --  protected action.
+ 
+       if Detect_Blocking
+         and then Self_Id.Common.Protected_Action_Nesting > 0
+       then
+          Ada.Exceptions.Raise_Exception
+            (Program_Error'Identity, "potentially blocking operation");
+       end if;
+ 
        STPO.Write_Lock (Object.L'Access, Ceiling_Violation);
  
        if Ceiling_Violation then
*************** package body System.Tasking.Protected_Ob
*** 506,512 ****
     -----------------------------------
  
     function Protected_Single_Entry_Caller
!      (Object : Protection_Entry) return Task_ID is
     begin
        return Object.Call_In_Progress.Self;
     end Protected_Single_Entry_Caller;
--- 550,556 ----
     -----------------------------------
  
     function Protected_Single_Entry_Caller
!      (Object : Protection_Entry) return Task_Id is
     begin
        return Object.Call_In_Progress.Self;
     end Protected_Single_Entry_Caller;
*************** package body System.Tasking.Protected_Ob
*** 516,561 ****
     -------------------
  
     procedure Service_Entry (Object : Protection_Entry_Access) is
!       Self_Id       : constant Task_ID := STPO.Self;
!       Entry_Call    : constant Entry_Call_Link := Object.Entry_Queue;
!       Caller        : Task_ID;
  
     begin
!       if Entry_Call /= null then
!          if Object.Entry_Body.Barrier (Object.Compiler_Info, 1) then
!             Object.Entry_Queue := null;
  
!             if Object.Call_In_Progress /= null then
!                --  This violates the No_Entry_Queue restriction, send
!                --  Program_Error to the caller.
  
!                Send_Program_Error (Self_Id, Entry_Call);
!                return;
!             end if;
  
!             Object.Call_In_Progress := Entry_Call;
!             Object.Entry_Body.Action
!               (Object.Compiler_Info, Entry_Call.Uninterpreted_Data, 1);
!             Object.Call_In_Progress := null;
!             Caller := Entry_Call.Self;
  
!             if Single_Lock then
!                STPO.Lock_RTS;
!             end if;
  
!             STPO.Write_Lock (Caller);
!             Wakeup_Entry_Caller (Self_Id, Entry_Call, Done);
!             STPO.Unlock (Caller);
  
!             if Single_Lock then
!                STPO.Unlock_RTS;
!             end if;
           end if;
        end if;
  
     exception
        when others =>
           Send_Program_Error (Self_Id, Entry_Call);
     end Service_Entry;
  
     ---------------------------------------
--- 560,613 ----
     -------------------
  
     procedure Service_Entry (Object : Protection_Entry_Access) is
!       Self_Id    : constant Task_Id := STPO.Self;
!       Entry_Call : constant Entry_Call_Link := Object.Entry_Queue;
!       Caller     : Task_Id;
  
     begin
!       if Entry_Call /= null
!         and then Object.Entry_Body.Barrier (Object.Compiler_Info, 1)
!       then
!          Object.Entry_Queue := null;
  
!          if Object.Call_In_Progress /= null then
  
!             --  Violation of No_Entry_Queue restriction, raise exception
  
!             Send_Program_Error (Self_Id, Entry_Call);
!             Unlock_Entry (Object);
!             return;
!          end if;
  
!          Object.Call_In_Progress := Entry_Call;
!          Object.Entry_Body.Action
!            (Object.Compiler_Info, Entry_Call.Uninterpreted_Data, 1);
!          Object.Call_In_Progress := null;
!          Caller := Entry_Call.Self;
!          Unlock_Entry (Object);
  
!          if Single_Lock then
!             STPO.Lock_RTS;
!          end if;
  
!          STPO.Write_Lock (Caller);
!          Wakeup_Entry_Caller (Self_Id, Entry_Call, Done);
!          STPO.Unlock (Caller);
! 
!          if Single_Lock then
!             STPO.Unlock_RTS;
           end if;
+ 
+       else
+          --  Just unlock the entry
+ 
+          Unlock_Entry (Object);
        end if;
  
     exception
        when others =>
           Send_Program_Error (Self_Id, Entry_Call);
+          Unlock_Entry (Object);
     end Service_Entry;
  
     ---------------------------------------
*************** package body System.Tasking.Protected_Ob
*** 571,581 ****
        Mode                  : Delay_Modes;
        Entry_Call_Successful : out Boolean)
     is
!       Self_Id           : constant Task_ID  := STPO.Self;
        Entry_Call        : Entry_Call_Record renames Self_Id.Entry_Calls (1);
        Ceiling_Violation : Boolean;
  
     begin
        STPO.Write_Lock (Object.L'Access, Ceiling_Violation);
  
        if Ceiling_Violation then
--- 623,644 ----
        Mode                  : Delay_Modes;
        Entry_Call_Successful : out Boolean)
     is
!       Self_Id           : constant Task_Id  := STPO.Self;
        Entry_Call        : Entry_Call_Record renames Self_Id.Entry_Calls (1);
        Ceiling_Violation : Boolean;
  
     begin
+       --  If pragma Detect_Blocking is active then Program_Error must be
+       --  raised if this potentially blocking operation is called from a
+       --  protected action.
+ 
+       if Detect_Blocking
+         and then Self_Id.Common.Protected_Action_Nesting > 0
+       then
+          Ada.Exceptions.Raise_Exception
+            (Program_Error'Identity, "potentially blocking operation");
+       end if;
+ 
        STPO.Write_Lock (Object.L'Access, Ceiling_Violation);
  
        if Ceiling_Violation then
*************** package body System.Tasking.Protected_Ob
*** 628,633 ****
--- 691,713 ----
  
     procedure Unlock_Entry (Object : Protection_Entry_Access) is
     begin
+       --  We are exiting from a protected action, so that we decrease the
+       --  protected object nesting level (if pragma Detect_Blocking is active).
+ 
+       if Detect_Blocking then
+          declare
+             Self_Id : constant Task_Id := Self;
+ 
+          begin
+             --  Cannot call Unlock_Entry without being within protected action
+ 
+             pragma Assert (Self_Id.Common.Protected_Action_Nesting > 0);
+ 
+             Self_Id.Common.Protected_Action_Nesting :=
+               Self_Id.Common.Protected_Action_Nesting - 1;
+          end;
+       end if;
+ 
        STPO.Unlock (Object.L'Access);
     end Unlock_Entry;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tposen.ads gcc-4.0.0/gcc/ada/s-tposen.ads
*** gcc-3.4.3/gcc/ada/s-tposen.ads	Tue Oct 21 13:42:18 2003
--- gcc-4.0.0/gcc/ada/s-tposen.ads	Mon May 17 13:20:48 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package System.Tasking.Protected_Objects
*** 222,229 ****
     --  barrier. This is used when the state of a protected object may have
     --  changed, in particular after the execution of the statement sequence of
     --  a protected procedure.
!    --  This must be called with abortion deferred and with the corresponding
!    --  object locked.
  
     procedure Protected_Single_Entry_Call
       (Object              : Protection_Entry_Access;
--- 222,230 ----
     --  barrier. This is used when the state of a protected object may have
     --  changed, in particular after the execution of the statement sequence of
     --  a protected procedure.
!    --
!    --  This must be called with abort deferred and with the corresponding
!    --  object locked. Object is unlocked on return.
  
     procedure Protected_Single_Entry_Call
       (Object              : Protection_Entry_Access;
*************** package System.Tasking.Protected_Objects
*** 269,275 ****
     --  Return the number of entry calls on Object (0 or 1).
  
     function Protected_Single_Entry_Caller (Object : Protection_Entry)
!      return Task_ID;
     --  Return value of E'Caller, where E is the protected entry currently
     --  being handled. This will only work if called from within an
     --  entry body, as required by the LRM (C.7.1(14)).
--- 270,276 ----
     --  Return the number of entry calls on Object (0 or 1).
  
     function Protected_Single_Entry_Caller (Object : Protection_Entry)
!      return Task_Id;
     --  Return value of E'Caller, where E is the protected entry currently
     --  being handled. This will only work if called from within an
     --  entry body, as required by the LRM (C.7.1(14)).
diff -Nrcpad gcc-3.4.3/gcc/ada/s-traceb-hpux.adb gcc-4.0.0/gcc/ada/s-traceb-hpux.adb
*** gcc-3.4.3/gcc/ada/s-traceb-hpux.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-traceb-hpux.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,600 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                     S Y S T E M . T R A C E B A C K                      --
+ --                             (HP/UX Version)                              --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --           Copyright (C) 1999-2003 Ada Core Technologies, Inc.            --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Unchecked_Conversion;
+ 
+ package body System.Traceback is
+ 
+    --  This package implements the backtracing facility by way of a dedicated
+    --  HP library for stack unwinding described in the "Runtime Architecture
+    --  Document".
+ 
+    pragma Linker_Options ("/usr/lib/libcl.a");
+ 
+    --  The library basically offers services to fetch information about a
+    --  "previous" frame based on information about a "current" one.
+ 
+    type Current_Frame_Descriptor is record
+       cur_fsz : Address;  --  Frame size of current routine.
+       cur_sp  : Address;  --  The current value of stack pointer.
+       cur_rls : Address;  --  PC-space of the caller.
+       cur_rlo : Address;  --  PC-offset of the caller.
+       cur_dp  : Address;  --  Data Pointer of the current routine.
+       top_rp  : Address;  --  Initial value of RP.
+       top_mrp : Address;  --  Initial value of MRP.
+       top_sr0 : Address;  --  Initial value of sr0.
+       top_sr4 : Address;  --  Initial value of sr4.
+       top_r3  : Address;  --  Initial value of gr3.
+       cur_r19 : Address;  --  GR19 value of the calling routine.
+       top_r4  : Address;  --  Initial value of gr4.
+       dummy   : Address;  --  Reserved.
+       out_rlo : Address;  --  PC-offset of the caller after get_previous.
+    end record;
+ 
+    type Previous_Frame_Descriptor is record
+       prev_fsz : Address;  --  frame size of calling routine.
+       prev_sp  : Address;  --  SP of calling routine.
+       prev_rls : Address;  --  PC_space of calling routine's caller.
+       prev_rlo : Address;  --  PC_offset of calling routine's caller.
+       prev_dp  : Address;  --  DP of calling routine.
+       udescr0  : Address;  --  low word of calling routine's unwind desc.
+       udescr1  : Address;  --  high word of calling routine's unwind desc.
+       ustart   : Address;  --  start of the unwind region.
+       uend     : Address;  --  end of the unwind region.
+       uw_index : Address;  --  index into the unwind table.
+       prev_r19 : Address;  --  GR19 value of the caller's caller.
+       top_r3   : Address;  --  Caller's initial gr3.
+       top_r4   : Address;  --  Caller's initial gr4.
+    end record;
+ 
+    --  Provide useful shortcuts for the names
+ 
+    subtype CFD is Current_Frame_Descriptor;
+    subtype PFD is Previous_Frame_Descriptor;
+ 
+    --  Frames with dynamic stack allocation are handled using the associated
+    --  frame pointer, but HP compilers and GCC setup this pointer differently.
+    --  HP compilers set it to point at the top (highest address) of the static
+    --  part of the frame, wheras GCC sets it to point at the bottom of this
+    --  region. We have to fake the unwinder to compensate for this difference,
+    --  for which we'll need to access some subprograms unwind descriptors.
+ 
+    type Bits_2_Value is mod 2 ** 2;
+    for Bits_2_Value'Size use 2;
+ 
+    type Bits_4_Value  is mod 2 ** 4;
+    for Bits_4_Value'Size use 4;
+ 
+    type Bits_5_Value  is mod 2 ** 5;
+    for Bits_5_Value'Size use 5;
+ 
+    type Bits_27_Value is mod 2 ** 27;
+    for Bits_27_Value'Size use 27;
+ 
+    type Unwind_Descriptor is record
+       cannot_unwind         : Boolean;
+       mcode                 : Boolean;
+       mcode_save_restore    : Boolean;
+       region_desc           : Bits_2_Value;
+       reserved0             : Boolean;
+       entry_sr              : Boolean;
+       entry_fr              : Bits_4_Value;
+       entry_gr              : Bits_5_Value;
+ 
+       args_stored           : Boolean;
+       variable_frame        : Boolean;
+       separate_package_body : Boolean;
+       frame_extension_mcode : Boolean;
+ 
+       stack_overflow_check  : Boolean;
+       two_steps_sp_adjust   : Boolean;
+       sr4_export            : Boolean;
+       cxx_info              : Boolean;
+ 
+       cxx_try_catch         : Boolean;
+       sched_entry_seq       : Boolean;
+       reserved1             : Boolean;
+       save_sp               : Boolean;
+ 
+       save_rp               : Boolean;
+       save_mrp              : Boolean;
+       save_r19              : Boolean;
+       cleanups              : Boolean;
+ 
+       hpe_interrupt_marker  : Boolean;
+       hpux_interrupt_marker : Boolean;
+       large_frame           : Boolean;
+       alloca_frame          : Boolean;
+ 
+       reserved2             : Boolean;
+       frame_size            : Bits_27_Value;
+    end record;
+ 
+    for Unwind_Descriptor'Size use 64;
+ 
+    for Unwind_Descriptor use record
+       cannot_unwind         at 0 range 0 .. 0;
+       mcode                 at 0 range 1 .. 1;
+       mcode_save_restore    at 0 range 2 .. 2;
+       region_desc           at 0 range 3 .. 4;
+       reserved0             at 0 range 5 .. 5;
+       entry_sr              at 0 range 6 .. 6;
+       entry_fr              at 0 range 7 .. 10;
+ 
+       entry_gr              at 1 range 3 .. 7;
+ 
+       args_stored           at 2 range 0 .. 0;
+       variable_frame        at 2 range 1 .. 1;
+       separate_package_body at 2 range 2 .. 2;
+       frame_extension_mcode at 2 range 3 .. 3;
+       stack_overflow_check  at 2 range 4 .. 4;
+       two_steps_sp_adjust   at 2 range 5 .. 5;
+       sr4_export            at 2 range 6 .. 6;
+       cxx_info              at 2 range 7 .. 7;
+ 
+       cxx_try_catch         at 3 range 0 .. 0;
+       sched_entry_seq       at 3 range 1 .. 1;
+       reserved1             at 3 range 2 .. 2;
+       save_sp               at 3 range 3 .. 3;
+       save_rp               at 3 range 4 .. 4;
+       save_mrp              at 3 range 5 .. 5;
+       save_r19              at 3 range 6 .. 6;
+       cleanups              at 3 range 7 .. 7;
+ 
+       hpe_interrupt_marker  at 4 range 0 .. 0;
+       hpux_interrupt_marker at 4 range 1 .. 1;
+       large_frame           at 4 range 2 .. 2;
+       alloca_frame          at 4 range 3 .. 3;
+ 
+       reserved2             at 4 range 4 .. 4;
+       frame_size            at 4 range 5 .. 31;
+    end record;
+ 
+    subtype UWD is Unwind_Descriptor;
+    type UWD_Ptr is access all UWD;
+ 
+    function To_UWD_Access is new Ada.Unchecked_Conversion (Address, UWD_Ptr);
+ 
+    --  The descriptor associated with a given code location is retrieved
+    --  using functions imported from the HP library, requiring the definition
+    --  of additional structures.
+ 
+    type Unwind_Table_Region is record
+       Table_Start : Address;
+       Table_End   : Address;
+    end record;
+    --  An Unwind Table region, which is a memory area containing Unwind
+    --  Descriptors.
+ 
+    subtype UWT is Unwind_Table_Region;
+ 
+    --  The subprograms imported below are provided by the HP library
+ 
+    function U_get_unwind_table return UWT;
+    pragma Import (C, U_get_unwind_table, "U_get_unwind_table");
+    --  Get the unwind table region associated with the current executable.
+    --  This function is actually documented as having an argument, but which
+    --  is only used for the MPE/iX targets.
+ 
+    function U_get_shLib_unwind_table (r19 : Address) return UWT;
+    pragma Import (C, U_get_shLib_unwind_table, "U_get_shLib_unw_tbl");
+    --  Return the unwind table region associated with a possible shared
+    --  library, as determined by the provided r19 value.
+ 
+    function U_get_shLib_text_addr (r19 : Address) return Address;
+    pragma Import (C, U_get_shLib_text_addr, "U_get_shLib_text_addr");
+    --  Return the address at which the code for a shared library begins, or
+    --  -1 if the value provided for r19 does not identify shared library code.
+ 
+    function U_get_unwind_entry
+      (Pc          : Address;
+       Space       : Address;
+       Table_Start : Address;
+       Table_End   : Address) return Address;
+    pragma Import (C, U_get_unwind_entry, "U_get_unwind_entry");
+    --  Given the bounds of an unwind table, return the address of the
+    --  unwind descriptor associated with a code location/space. In the case
+    --  of shared library code, the offset from the beginning of the library
+    --  is expected as Pc.
+ 
+    procedure U_init_frame_record (Frame : access CFD);
+    pragma Import (C, U_init_frame_record, "U_init_frame_record");
+ 
+    procedure U_prep_frame_rec_for_unwind (Frame : access CFD);
+    pragma Import (C, U_prep_frame_rec_for_unwind,
+                     "U_prep_frame_rec_for_unwind");
+ 
+    --  Fetch the description data of the frame in which these two procedures
+    --  are called.
+ 
+    function U_get_u_rlo (Cur : access CFD; Prev : access PFD) return Integer;
+    pragma Import (C, U_get_u_rlo, "U_IS_STUB_OR_CALLX");
+    --  From a complete current frame with a return location possibly located
+    --  into a linker generated stub, and basic information about the previous
+    --  frame, place the first non stub return location into the current frame.
+    --  Return -1 if something went wrong during the computation.
+ 
+    function U_is_shared_pc (rlo : Address; r19 : Address) return Address;
+    pragma Import (C, U_is_shared_pc, "U_is_shared_pc");
+    --  Return 0 if the provided return location does not correspond to code
+    --  in a shared library, or something non null otherwise.
+ 
+    function U_get_previous_frame_x
+      (current_frame  : access CFD;
+       previous_frame : access PFD;
+       previous_size  : Integer) return Integer;
+    pragma Import (C, U_get_previous_frame_x, "U_get_previous_frame_x");
+    --  Fetch the data describing the "previous" frame relatively to the
+    --  "current" one. "previous_size" should be the size of the "previous"
+    --  frame descriptor provided.
+    --
+    --  The library provides a simpler interface without the size parameter
+    --  but it is not usable when frames with dynamically allocated space are
+    --  on the way.
+ 
+    ------------------
+    -- C_Call_Chain --
+    ------------------
+ 
+    function C_Call_Chain
+      (Traceback : System.Address;
+       Max_Len   : Natural) return Natural
+    is
+       Val : Natural;
+ 
+    begin
+       Call_Chain (Traceback, Max_Len, Val);
+       return Val;
+    end C_Call_Chain;
+ 
+    ----------------
+    -- Call_Chain --
+    ----------------
+ 
+    procedure Call_Chain
+      (Traceback   : System.Address;
+       Max_Len     : Natural;
+       Len         : out Natural;
+       Exclude_Min : System.Address := System.Null_Address;
+       Exclude_Max : System.Address := System.Null_Address;
+       Skip_Frames : Natural := 1)
+    is
+       type Tracebacks_Array is array (1 .. Max_Len) of System.Address;
+       pragma Suppress_Initialization (Tracebacks_Array);
+ 
+       --  The code location returned by the unwinder is a return location but
+       --  what we need is a call point. Under HP-UX call instructions are 4
+       --  bytes long and the return point they specify is 4 bytes beyond the
+       --  next instruction because of the delay slot.
+ 
+       Call_Size  : constant := 4;
+       DSlot_Size : constant := 4;
+       Rlo_Offset : constant := Call_Size + DSlot_Size;
+ 
+       --  Moreover, the return point is passed via a register which two least
+       --  significant bits specify a privilege level that we will have to mask.
+ 
+       Priv_Mask  : constant := 16#00000003#;
+ 
+       Frame       : aliased CFD;
+       Code        : System.Address;
+       J           : Natural := 1;
+       Pop_Success : Boolean;
+       Trace       : Tracebacks_Array;
+       for Trace'Address use Traceback;
+ 
+       --  The backtracing process needs a set of subprograms :
+ 
+       function UWD_For_RLO_Of (Frame : access CFD) return UWD_Ptr;
+       --  Return an access to the unwind descriptor for the caller of
+       --  a given frame, using only the provided return location.
+ 
+       function UWD_For_Caller_Of (Frame : access CFD) return UWD_Ptr;
+       --  Return an access to the unwind descriptor for the user code caller
+       --  of a given frame, or null if the information is not available.
+ 
+       function Pop_Frame (Frame : access CFD) return Boolean;
+       --  Update the provided machine state structure so that it reflects
+       --  the state one call frame "above" the initial one.
+       --
+       --  Return True if the operation has been successful, False otherwise.
+       --  Failure typically occurs when the top of the call stack has been
+       --  reached.
+ 
+       function Prepare_For_Unwind_Of (Frame : access CFD) return Boolean;
+       --  Perform the necessary adaptations to the machine state before
+       --  calling the unwinder. Currently used for the specific case of
+       --  dynamically sized previous frames.
+       --
+       --  Return True if everything went fine, or False otherwise.
+ 
+       Program_UWT : constant UWT := U_get_unwind_table;
+ 
+       ---------------
+       -- Pop_Frame --
+       ---------------
+ 
+       function Pop_Frame (Frame : access CFD) return Boolean is
+          Up_Frame    : aliased PFD;
+          State_Ready : Boolean;
+ 
+       begin
+          --  Check/adapt the state before calling the unwinder and return
+          --  if anything went wrong.
+ 
+          State_Ready := Prepare_For_Unwind_Of (Frame);
+ 
+          if not State_Ready then
+             return False;
+          end if;
+ 
+          --  Now, safely call the unwinder and use the results.
+ 
+          if U_get_previous_frame_x (Frame,
+                                     Up_Frame'Access,
+                                     Up_Frame'Size) /= 0
+          then
+             return False;
+          end if;
+ 
+          --  In case a stub is on the way, the usual previous return location
+          --  (the one in prev_rlo) is the one in the stub and the "real" one
+          --  is placed in the "current" record, so let's take this one into
+          --  account.
+ 
+          Frame.out_rlo := Frame.cur_rlo;
+ 
+          Frame.cur_fsz := Up_Frame.prev_fsz;
+          Frame.cur_sp  := Up_Frame.prev_sp;
+          Frame.cur_rls := Up_Frame.prev_rls;
+          Frame.cur_rlo := Up_Frame.prev_rlo;
+          Frame.cur_dp  := Up_Frame.prev_dp;
+          Frame.cur_r19 := Up_Frame.prev_r19;
+          Frame.top_r3  := Up_Frame.top_r3;
+          Frame.top_r4  := Up_Frame.top_r4;
+ 
+          return True;
+       end Pop_Frame;
+ 
+       ---------------------------------
+       -- Prepare_State_For_Unwind_Of --
+       ---------------------------------
+ 
+       function Prepare_For_Unwind_Of (Frame : access CFD) return Boolean
+       is
+          Caller_UWD    : UWD_Ptr;
+          FP_Adjustment : Integer;
+ 
+       begin
+          --  No need to bother doing anything if the stack is already fully
+          --  unwound.
+ 
+          if Frame.cur_rlo = 0 then
+             return False;
+          end if;
+ 
+          --  When ALLOCA_FRAME is set in an unwind descriptor, the unwinder
+          --  uses the value provided in current.top_r3 or current.top_r4 as
+          --  a frame pointer to compute the size of the frame. What decides
+          --  between r3 or r4 is the unwind descriptor LARGE_FRAME bit, with
+          --  r4 chosen if the bit is set.
+ 
+          --  The size computed by the unwinder is STATIC_PART + (SP - FP),
+          --  which is correct with HP's frame pointer convention, but not
+          --  with GCC's one since we end up with the static part accounted
+          --  for twice.
+ 
+          --  We have to compute r4 when it is required because the unwinder
+          --  has looked for it at a place where it was not if we went through
+          --  GCC frames.
+ 
+          --  The size of the static part of a frame can be found in the
+          --  associated unwind descriptor.
+ 
+          Caller_UWD := UWD_For_Caller_Of (Frame);
+ 
+          --  If we cannot get it, we are unable to compute the potentially
+          --  necessary adjustments. We'd better not try to go on then.
+ 
+          if Caller_UWD = null then
+             return False;
+          end if;
+ 
+          --  If the caller frame is a GCC one, r3 is its frame pointer and
+          --  points to the bottom of the frame. The value to provide for r4
+          --  can then be computed directly from the one of r3, compensating
+          --  for the static part of the frame.
+ 
+          --  If the caller frame is an HP one, r3 is used to locate the
+          --  previous frame marker, that is it also points to the bottom of
+          --  the frame (this is why r3 cannot be used as the frame pointer in
+          --  the HP sense for large frames). The value to provide for r4 can
+          --  then also be computed from the one of r3 with the compensation
+          --  for the static part of the frame.
+ 
+          FP_Adjustment := Integer (Caller_UWD.frame_size * 8);
+          Frame.top_r4  := Address (Integer (Frame.top_r3) + FP_Adjustment);
+ 
+          return True;
+       end Prepare_For_Unwind_Of;
+ 
+       -----------------------
+       -- UWD_For_Caller_Of --
+       -----------------------
+ 
+       function UWD_For_Caller_Of (Frame : access CFD) return UWD_Ptr
+       is
+          UWD_Access : UWD_Ptr;
+ 
+       begin
+          --  First try the most direct path, using the return location data
+          --  associated with the frame.
+ 
+          UWD_Access := UWD_For_RLO_Of (Frame);
+ 
+          if UWD_Access /= null then
+             return UWD_Access;
+          end if;
+ 
+          --  If we did not get a result, we might face an in-stub return
+          --  address. In this case U_get_previous_frame can tell us what the
+          --  first not-in-stub return point is. We cannot call it directly,
+          --  though, because we haven't computed the potentially necessary
+          --  frame pointer adjustments, which might lead to SEGV in some
+          --  circumstances. Instead, we directly call the libcl routine which
+          --  is called by U_get_previous_frame and which only requires few
+          --  information. Take care, however, that the information is provided
+          --  in the "current" argument, so we need to work on a copy to avoid
+          --  disturbing our caller.
+ 
+          declare
+             U_Current  : aliased CFD := Frame.all;
+             U_Previous : aliased PFD;
+ 
+          begin
+             U_Previous.prev_dp  := U_Current.cur_dp;
+             U_Previous.prev_rls := U_Current.cur_rls;
+             U_Previous.prev_sp  := U_Current.cur_sp - U_Current.cur_fsz;
+ 
+             if U_get_u_rlo (U_Current'Access, U_Previous'Access) /= -1 then
+                UWD_Access := UWD_For_RLO_Of (U_Current'Access);
+             end if;
+          end;
+ 
+          return UWD_Access;
+       end UWD_For_Caller_Of;
+ 
+       --------------------
+       -- UWD_For_RLO_Of --
+       --------------------
+ 
+       function UWD_For_RLO_Of (Frame : access CFD) return UWD_Ptr
+       is
+          UWD_Address : Address;
+ 
+          --  The addresses returned by the library point to full descriptors
+          --  including the frame information bits but also the applicable PC
+          --  range. We need to account for this.
+ 
+          Frame_Info_Offset  : constant := 8;
+ 
+       begin
+          --  First try to locate the descriptor in the program's unwind table.
+ 
+          UWD_Address := U_get_unwind_entry (Frame.cur_rlo,
+                                             Frame.cur_rls,
+                                             Program_UWT.Table_Start,
+                                             Program_UWT.Table_End);
+ 
+          --  If we did not get it, we might have a frame from code in a
+          --  stub or shared library. For code in stub we would have to
+          --  compute the first non-stub return location but this is not
+          --  the role of this subprogram, so let's just try to see if we
+          --  can get a result from the tables in shared libraries.
+ 
+          if UWD_Address = -1
+            and then U_is_shared_pc (Frame.cur_rlo, Frame.cur_r19) /= 0
+          then
+             declare
+                Shlib_UWT   : constant UWT     :=
+                                U_get_shLib_unwind_table (Frame.cur_r19);
+                Shlib_Start : constant Address :=
+                                U_get_shLib_text_addr (Frame.cur_r19);
+                Rlo_Offset  : constant Address :=
+                                Frame.cur_rlo - Shlib_Start;
+             begin
+                UWD_Address := U_get_unwind_entry (Rlo_Offset,
+                                                   Frame.cur_rls,
+                                                   Shlib_UWT.Table_Start,
+                                                   Shlib_UWT.Table_End);
+             end;
+          end if;
+ 
+          if UWD_Address /= -1 then
+             return To_UWD_Access (UWD_Address + Frame_Info_Offset);
+          else
+             return null;
+          end if;
+       end UWD_For_RLO_Of;
+ 
+    --  Start of processing for Call_Chain
+ 
+    begin
+       --  Fetch the state for this subprogram's frame and pop it so that we
+       --  start with an initial out_rlo "here".
+ 
+       U_init_frame_record (Frame'Access);
+       Frame.top_sr0 := 0;
+       Frame.top_sr4 := 0;
+ 
+       U_prep_frame_rec_for_unwind (Frame'Access);
+ 
+       Pop_Success := Pop_Frame (Frame'Access);
+ 
+       --  Skip the requested number of frames.
+ 
+       for I in 1 .. Skip_Frames loop
+          Pop_Success := Pop_Frame (Frame'Access);
+       end loop;
+ 
+       --  Loop popping frames and storing locations until either a problem
+       --  occurs, or the top of the call chain is reached, or the provided
+       --  array is full.
+ 
+       loop
+          --  We have to test some conditions against the return location
+          --  as it is returned, so get it as is first.
+ 
+          Code := Frame.out_rlo;
+ 
+          exit when not Pop_Success or else Code = 0 or else J = Max_Len + 1;
+ 
+          --  Compute the call point from the retrieved return location :
+          --  Mask the privilege bits and account for the delta between the
+          --  call site and the return point.
+ 
+          Code := (Code and not Priv_Mask) - Rlo_Offset;
+ 
+          if Code < Exclude_Min or else Code > Exclude_Max then
+             Trace (J) := Code;
+             J := J + 1;
+          end if;
+ 
+          Pop_Success := Pop_Frame (Frame'Access);
+       end loop;
+ 
+       Len := J - 1;
+    end Call_Chain;
+ 
+ end System.Traceback;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-traceb-mastop.adb gcc-4.0.0/gcc/ada/s-traceb-mastop.adb
*** gcc-3.4.3/gcc/ada/s-traceb-mastop.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-traceb-mastop.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,113 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                     S Y S T E M . T R A C E B A C K                      --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --           Copyright (C) 1999-2003 Ada Core Technologies, Inc.            --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This version assumes that System.Machine_State_Operations.Pop_Frame can
+ --  work with the Info parameter being null.
+ 
+ with System.Machine_State_Operations;
+ 
+ package body System.Traceback is
+ 
+    use System.Machine_State_Operations;
+ 
+    ----------------
+    -- Call_Chain --
+    ----------------
+ 
+    procedure Call_Chain
+      (Traceback : System.Address;
+       Max_Len   : Natural;
+       Len       : out Natural;
+       Exclude_Min : System.Address := System.Null_Address;
+       Exclude_Max : System.Address := System.Null_Address;
+       Skip_Frames : Natural := 1)
+    is
+       type Tracebacks_Array is array (1 .. Max_Len) of Code_Loc;
+       pragma Suppress_Initialization (Tracebacks_Array);
+ 
+       M     : Machine_State;
+       Code  : Code_Loc;
+ 
+       Trace : Tracebacks_Array;
+       for Trace'Address use Traceback;
+ 
+       N_Skips  : Natural := 0;
+ 
+    begin
+       M := Allocate_Machine_State;
+       Set_Machine_State (M);
+ 
+       --  Skip the requested number of frames
+ 
+       loop
+          Code := Get_Code_Loc (M);
+          exit when Code = Null_Address or else N_Skips = Skip_Frames;
+ 
+          Pop_Frame (M, System.Null_Address);
+          N_Skips := N_Skips + 1;
+       end loop;
+ 
+       --  Now, record the frames outside the exclusion bounds, updating
+       --  the Len output value along the way.
+ 
+       Len := 0;
+       loop
+          Code := Get_Code_Loc (M);
+          exit when Code = Null_Address or else Len = Max_Len;
+ 
+          if Code < Exclude_Min or else Code > Exclude_Max then
+             Len := Len + 1;
+             Trace (Len) := Code;
+          end if;
+ 
+          Pop_Frame (M, System.Null_Address);
+       end loop;
+ 
+       Free_Machine_State (M);
+    end Call_Chain;
+ 
+    ------------------
+    -- C_Call_Chain --
+    ------------------
+ 
+    function C_Call_Chain
+      (Traceback   : System.Address;
+       Max_Len     : Natural) return Natural
+    is
+       Val : Natural;
+    begin
+       Call_Chain (Traceback, Max_Len, Val);
+       return Val;
+    end C_Call_Chain;
+ 
+ end System.Traceback;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-traces-default.adb gcc-4.0.0/gcc/ada/s-traces-default.adb
*** gcc-3.4.3/gcc/ada/s-traces-default.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-traces-default.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,73 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                         S Y S T E M . T R A C E S                        --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --             Copyright (C) 2001 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with System.Soft_Links;
+ with System.Parameters;
+ with System.Traces.Format;
+ 
+ package body System.Traces is
+ 
+    package SSL renames System.Soft_Links;
+    use System.Traces.Format;
+ 
+    ----------------------
+    -- Send_Trace_Info  --
+    ----------------------
+ 
+    procedure Send_Trace_Info (Id : Trace_T) is
+       Task_S  : String := SSL.Task_Name.all;
+       Trace_S : String (1 .. 3 + Task_S'Length);
+ 
+    begin
+       if Parameters.Runtime_Traces then
+          Trace_S (1 .. 3) := "/N:";
+          Trace_S (4 .. Trace_S'Last) := Task_S;
+          Send_Trace (Id, Trace_S);
+       end if;
+    end Send_Trace_Info;
+ 
+    procedure Send_Trace_Info (Id : Trace_T; Timeout : Duration) is
+       Task_S    : String := SSL.Task_Name.all;
+       Timeout_S : String := Duration'Image (Timeout);
+       Trace_S   : String (1 .. 6 + Task_S'Length + Timeout_S'Length);
+ 
+    begin
+       if Parameters.Runtime_Traces then
+          Trace_S (1 .. 3) := "/N:";
+          Trace_S (4 .. 3 + Task_S'Length) := Task_S;
+          Trace_S (4 + Task_S'Length .. 6 + Task_S'Length) := "/T:";
+          Trace_S (7 + Task_S'Length .. Trace_S'Last) := Timeout_S;
+          Send_Trace (Id, Trace_S);
+       end if;
+    end Send_Trace_Info;
+ end System.Traces;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-traent-vms.adb gcc-4.0.0/gcc/ada/s-traent-vms.adb
*** gcc-3.4.3/gcc/ada/s-traent-vms.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-traent-vms.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,68 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --              S Y S T E M . T R A C E B A C K _ E N T R I E S             --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --             Copyright (C) 2003 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package body System.Traceback_Entries is
+ 
+    ------------
+    -- PC_For --
+    ------------
+ 
+    function PC_For (TB_Entry : Traceback_Entry) return System.Address is
+    begin
+       return TB_Entry.PC;
+    end PC_For;
+ 
+    ------------
+    -- PV_For --
+    ------------
+ 
+    function PV_For (TB_Entry : Traceback_Entry) return System.Address is
+    begin
+       return TB_Entry.PV;
+    end PV_For;
+ 
+    ------------------
+    -- TB_Entry_For --
+    ------------------
+ 
+    function TB_Entry_For (PC : System.Address) return Traceback_Entry is
+    begin
+       return (PC => PC, PV => System.Null_Address);
+    end TB_Entry_For;
+ 
+ end System.Traceback_Entries;
+ 
diff -Nrcpad gcc-3.4.3/gcc/ada/s-traent-vms.ads gcc-4.0.0/gcc/ada/s-traent-vms.ads
*** gcc-3.4.3/gcc/ada/s-traent-vms.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-traent-vms.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,59 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --              S Y S T E M . T R A C E B A C K _ E N T R I E S             --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --             Copyright (C) 2003 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the Alpha/OpenVMS version of this package
+ 
+ package System.Traceback_Entries is
+ 
+    type Traceback_Entry is record
+       PC : System.Address;
+       PV : System.Address;
+    end record;
+ 
+    pragma Suppress_Initialization (Traceback_Entry);
+ 
+    Null_TB_Entry : constant Traceback_Entry :=
+                      (PC => System.Null_Address,
+                       PV => System.Null_Address);
+ 
+    function PC_For (TB_Entry : Traceback_Entry) return System.Address;
+    function PV_For (TB_Entry : Traceback_Entry) return System.Address;
+ 
+    function TB_Entry_For (PC : System.Address) return Traceback_Entry;
+ 
+ end System.Traceback_Entries;
+ 
diff -Nrcpad gcc-3.4.3/gcc/ada/s-trafor-default.adb gcc-4.0.0/gcc/ada/s-trafor-default.adb
*** gcc-3.4.3/gcc/ada/s-trafor-default.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-trafor-default.adb	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,113 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                  S Y S T E M . T R A C E S . F O R M A T                 --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --             Copyright (C) 2001 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with System.Parameters;
+ 
+ package body System.Traces.Format is
+ 
+    procedure Send_Trace (Id : Trace_T; Info : String) is separate;
+ 
+    ------------------
+    -- Format_Trace --
+    ------------------
+ 
+    function Format_Trace (Source : in String) return String_Trace is
+       Length : Integer      := Source'Length;
+       Result : String_Trace := (others => ' ');
+ 
+    begin
+       --  If run-time tracing active, then fill the string
+ 
+       if Parameters.Runtime_Traces then
+          if Max_Size - Length > 0 then
+             Result (1 .. Length) := Source (1 .. Length);
+             Result (Length + 1 .. Max_Size) := (others => ' ');
+             Result (Length + 1) := ASCII.NUL;
+          else
+             Result (1 .. Max_Size - 1) := Source (1 .. Max_Size - 1);
+             Result (Max_Size) := ASCII.NUL;
+          end if;
+       end if;
+ 
+       return Result;
+    end Format_Trace;
+ 
+    ------------
+    -- Append --
+    ------------
+ 
+    function Append
+      (Source : String_Trace;
+       Annex  : String)
+       return   String_Trace
+    is
+       Result        : String_Trace := (others => ' ');
+       Source_Length : Integer := 1;
+       Annex_Length  : Integer := Annex'Length;
+ 
+    begin
+       if Parameters.Runtime_Traces then
+ 
+          --  First we determine the size used, without the spaces at the
+          --  end, if a String_Trace is present. Look at
+          --  System.Traces.Tasking for examples.
+ 
+          while Source (Source_Length) /= ASCII.NUL loop
+             Source_Length := Source_Length + 1;
+          end loop;
+ 
+          --  Then we fill the string.
+ 
+          if Source_Length - 1 + Annex_Length <= Max_Size then
+             Result (1 .. Source_Length - 1) :=
+               Source (1 .. Source_Length - 1);
+ 
+             Result (Source_Length .. Source_Length - 1 + Annex_Length) :=
+               Annex (1 ..  Annex_Length);
+ 
+             Result (Source_Length + Annex_Length) := ASCII.NUL;
+ 
+             Result (Source_Length + Annex_Length + 1 .. Max_Size) :=
+               (others => ' ');
+          else
+             Result (1 .. Source_Length - 1) := Source (1 .. Source_Length - 1);
+             Result (Source_Length .. Max_Size - 1) :=
+               Annex (1 .. Max_Size - Source_Length);
+             Result (Max_Size) := ASCII.NUL;
+          end if;
+       end if;
+ 
+       return Result;
+    end Append;
+ 
+ end System.Traces.Format;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-trafor-default.ads gcc-4.0.0/gcc/ada/s-trafor-default.ads
*** gcc-3.4.3/gcc/ada/s-trafor-default.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-trafor-default.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,62 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                  S Y S T E M . T R A C E S . F O R M A T                 --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --             Copyright (C) 2001 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package implements functions to format run-time traces
+ 
+ package System.Traces.Format is
+ 
+    Max_Size : constant Integer := 128;
+    --  Event messages' maximum size.
+ 
+    subtype String_Trace is String (1 .. Max_Size);
+    --  Specific type in which trace information is stored. An ASCII.NUL
+    --  character ends the string so that it is compatible with C strings
+    --  which is useful on some targets (eg. VxWorks)
+ 
+    --  These private functions handles String_Trace formatting
+ 
+    function Format_Trace (Source : String) return String_Trace;
+    --  Put a String in a String_Trace, truncates the string if necessary.
+    --  Similar to Head( .. ) found in Ada.Strings.Bounded
+ 
+    function Append
+      (Source : String_Trace;
+       Annex  : String)
+       return   String_Trace;
+    pragma Inline (Append);
+    --  Concatenates two string, similar to & operator from Ada.String.Unbounded
+ 
+    procedure Send_Trace (Id : Trace_T; Info : String);
+    --  This function (which is a subunit) send messages to external programs
+ 
+ end System.Traces.Format;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tratas-default.adb gcc-4.0.0/gcc/ada/s-tratas-default.adb
*** gcc-3.4.3/gcc/ada/s-tratas-default.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-tratas-default.adb	Mon May 17 13:20:42 2004
***************
*** 0 ****
--- 1,367 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
+ --                                                                          --
+ --                 S Y S T E M . T R A C E S . T A S K I N G                --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --           Copyright (C) 2001-2004 Free Software Foundation, Inc.         --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with System.Tasking;       use System.Tasking;
+ with System.Soft_Links;
+ with System.Parameters;
+ with System.Traces.Format; use System.Traces.Format;
+ with System.Traces;        use System.Traces;
+ 
+ package body System.Traces.Tasking is
+ 
+    use System.Tasking;
+    use System.Traces;
+    use System.Traces.Format;
+ 
+    package SSL renames System.Soft_Links;
+ 
+    function Extract_Accepts (Task_Name : Task_Id) return String_Trace;
+    --  This function is used to extract data joined with
+    --  W_Select, WT_Select, W_Accept events
+ 
+    ---------------------
+    -- Send_Trace_Info --
+    ---------------------
+ 
+    procedure Send_Trace_Info (Id : Trace_T; Task_Name2 : Task_Id) is
+       Task_S  : constant String := SSL.Task_Name.all;
+       Task2_S : constant String :=
+                   Task_Name2.Common.Task_Image
+                     (1 .. Task_Name2.Common.Task_Image_Len);
+       Trace_S : String (1 .. 6 + Task_S'Length + Task2_S'Length);
+ 
+       L0 : Integer := Task_S'Length;
+       L1 : Integer := Task2_S'Length;
+ 
+    begin
+       if Parameters.Runtime_Traces then
+          case Id is
+             when M_RDV_Complete | PO_Done =>
+                Trace_S (1 .. 3)                 := "/N:";
+                Trace_S (4 .. 3 + L0)            := Task_S;
+                Trace_S (4 + L0 .. 6 + L0)       := "/C:";
+                Trace_S (7 + L0 .. Trace_S'Last) := Task2_S;
+                Send_Trace (Id, Trace_S);
+ 
+             when E_Missed =>
+                Trace_S (1 .. 3)                 := "/N:";
+                Trace_S (4 .. 3 + L0)            := Task_S;
+                Trace_S (4 + L0 .. 6 + L0)       := "/A:";
+                Trace_S (7 + L0 .. Trace_S'Last) := Task2_S;
+                Send_Trace (Id, Trace_S);
+ 
+             when E_Kill =>
+                Trace_S (1 .. 3)                 := "/N:";
+                Trace_S (4 .. 3 + L1)            := Task2_S;
+                Trace_S (4 + L1 .. Trace_S'Last) := (others => ' ');
+                Send_Trace (Id, Trace_S);
+ 
+             when T_Create =>
+                Trace_S (1 .. 3)                 := "/N:";
+                Trace_S (4 .. 3 + L1)            := Task2_S;
+                Trace_S (4 + L1 .. Trace_S'Last) := (others => ' ');
+                Send_Trace (Id, Trace_S);
+ 
+             when others =>
+                null;
+                --  should raise an exception ???
+          end case;
+       end if;
+    end Send_Trace_Info;
+ 
+    procedure Send_Trace_Info
+      (Id           : Trace_T;
+       Task_Name2   : Task_Id;
+       Entry_Number : Entry_Index)
+    is
+       Task_S  : constant String := SSL.Task_Name.all;
+       Task2_S : constant String :=
+                   Task_Name2.Common.Task_Image
+                     (1 .. Task_Name2.Common.Task_Image_Len);
+       Entry_S   : String := Integer'Image (Integer (Entry_Number));
+       Trace_S   : String (1 .. 9 + Task_S'Length
+                                  + Task2_S'Length + Entry_S'Length);
+ 
+       L0 : Integer := Task_S'Length;
+       L1 : Integer := Task_S'Length + Entry_S'Length;
+       L2 : Integer := Task_S'Length + Task2_S'Length;
+ 
+    begin
+       if Parameters.Runtime_Traces then
+          case Id is
+             when M_Accept_Complete =>
+                Trace_S (1 .. 3)                  := "/N:";
+                Trace_S (4 .. 3 + L0)             := Task_S;
+                Trace_S (4 + L0 .. 6 + L0)        := "/E:";
+                Trace_S (7 + L0 .. 6 + L1)         := Entry_S;
+                Trace_S (7 + L1 .. 9 + L1)        := "/C:";
+                Trace_S (10 + L1 .. Trace_S'Last) := Task2_S;
+                Send_Trace (Id, Trace_S);
+ 
+             when W_Call =>
+                Trace_S (1 .. 3)                  := "/N:";
+                Trace_S (4 .. 3 + L0)             := Task_S;
+                Trace_S (4 + L0 .. 6 + L0)        := "/A:";
+                Trace_S (7 + L0 .. 6 + L2)        := Task2_S;
+                Trace_S (7 + L2 .. 9 + L2)        := "/C:";
+                Trace_S (10 + L2 .. Trace_S'Last) := Entry_S;
+                Send_Trace (Id, Trace_S);
+ 
+             when others =>
+                null;
+                --  should raise an exception ???
+          end case;
+       end if;
+    end Send_Trace_Info;
+ 
+    procedure Send_Trace_Info
+      (Id           : Trace_T;
+       Task_Name    : Task_Id;
+       Task_Name2   : Task_Id;
+       Entry_Number : Entry_Index)
+    is
+       Task_S  : constant String :=
+                   Task_Name.Common.Task_Image
+                     (1 .. Task_Name.Common.Task_Image_Len);
+       Task2_S : constant String :=
+                   Task_Name2.Common.Task_Image
+                     (1 .. Task_Name2.Common.Task_Image_Len);
+       Entry_S   : String := Integer'Image (Integer (Entry_Number));
+       Trace_S   : String (1 .. 9 + Task_S'Length
+                                  + Task2_S'Length + Entry_S'Length);
+ 
+       L0 : Integer := Task_S'Length;
+       L1 : Integer := Task_S'Length + Entry_S'Length;
+ 
+    begin
+       if Parameters.Runtime_Traces then
+          case Id is
+             when PO_Run =>
+                Trace_S (1 .. 3)                  := "/N:";
+                Trace_S (4 .. 3 + L0)             := Task_S;
+                Trace_S (4 + L0 .. 6 + L0)        := "/E:";
+                Trace_S (7 + L0 .. 6 + L1)        := Entry_S;
+                Trace_S (7 + L1 .. 9 + L1)        := "/C:";
+                Trace_S (10 + L1 .. Trace_S'Last) := Task2_S;
+                Send_Trace (Id, Trace_S);
+ 
+             when others =>
+                null;
+                --  should raise an exception ???
+          end case;
+       end if;
+    end Send_Trace_Info;
+ 
+    procedure Send_Trace_Info (Id : Trace_T; Entry_Number : Entry_Index) is
+       Task_S  : String := SSL.Task_Name.all;
+       Entry_S : String := Integer'Image (Integer (Entry_Number));
+       Trace_S : String (1 .. 6 + Task_S'Length + Entry_S'Length);
+ 
+       L0 : Integer := Task_S'Length;
+ 
+    begin
+       if Parameters.Runtime_Traces then
+          Trace_S (1 .. 3)                 := "/N:";
+          Trace_S (4 .. 3 + L0)            := Task_S;
+          Trace_S (4 + L0 .. 6 + L0)       := "/E:";
+          Trace_S (7 + L0 .. Trace_S'Last) := Entry_S;
+          Send_Trace (Id, Trace_S);
+       end if;
+    end Send_Trace_Info;
+ 
+    procedure Send_Trace_Info
+      (Id         : Trace_T;
+       Task_Name  : Task_Id;
+       Task_Name2 : Task_Id)
+    is
+       Task_S  : constant String :=
+                   Task_Name.Common.Task_Image
+                     (1 .. Task_Name.Common.Task_Image_Len);
+       Task2_S : constant String :=
+                   Task_Name2.Common.Task_Image
+                     (1 .. Task_Name2.Common.Task_Image_Len);
+       Trace_S : String (1 .. 6 + Task_S'Length + Task2_S'Length);
+ 
+       L0 : Integer := Task2_S'Length;
+ 
+    begin
+       if Parameters.Runtime_Traces then
+          Trace_S (1 .. 3)                 := "/N:";
+          Trace_S (4 .. 3 + L0)            := Task2_S;
+          Trace_S (4 + L0 .. 6 + L0)       := "/P:";
+          Trace_S (7 + L0 .. Trace_S'Last) := Task_S;
+          Send_Trace (Id, Trace_S);
+       end if;
+    end Send_Trace_Info;
+ 
+    procedure Send_Trace_Info
+      (Id           : Trace_T;
+       Acceptor     : Task_Id;
+       Entry_Number : Entry_Index;
+       Timeout      : Duration)
+    is
+       Task_S     : constant String := SSL.Task_Name.all;
+       Acceptor_S : constant String :=
+                      Acceptor.Common.Task_Image
+                        (1 .. Acceptor.Common.Task_Image_Len);
+       Entry_S    : String := Integer'Image (Integer (Entry_Number));
+       Timeout_S  : String := Duration'Image (Timeout);
+       Trace_S    : String (1 .. 12 + Task_S'Length + Acceptor_S'Length
+                                    + Entry_S'Length + Timeout_S'Length);
+ 
+       L0 : Integer := Task_S'Length;
+       L1 : Integer := Task_S'Length + Acceptor_S'Length;
+       L2 : Integer := Task_S'Length + Acceptor_S'Length + Entry_S'Length;
+ 
+    begin
+       if Parameters.Runtime_Traces then
+          Trace_S (1 .. 3)                  := "/N:";
+          Trace_S (4 .. 3 + L0)             := Task_S;
+          Trace_S (4 + L0 .. 6 + L0)        := "/A:";
+          Trace_S (7 + L0 .. 6 + L1)        := Acceptor_S;
+          Trace_S (7 + L1 .. 9 + L1)        := "/E:";
+          Trace_S (10 + L1 .. 9 + L2)       := Entry_S;
+          Trace_S (10 + L2 .. 12 + L2)      := "/T:";
+          Trace_S (13 + L2 .. Trace_S'Last) := Timeout_S;
+          Send_Trace (Id, Trace_S);
+       end if;
+    end Send_Trace_Info;
+ 
+    procedure Send_Trace_Info
+      (Id           : Trace_T;
+       Entry_Number : Entry_Index;
+       Timeout      : Duration)
+    is
+       Task_S    : String := SSL.Task_Name.all;
+       Entry_S   : String := Integer'Image (Integer (Entry_Number));
+       Timeout_S : String := Duration'Image (Timeout);
+       Trace_S   : String (1 .. 9 + Task_S'Length
+                                  + Entry_S'Length + Timeout_S'Length);
+ 
+       L0 : Integer := Task_S'Length;
+       L1 : Integer := Task_S'Length + Entry_S'Length;
+ 
+    begin
+       if Parameters.Runtime_Traces then
+          Trace_S (1 .. 3)                  := "/N:";
+          Trace_S (4 .. 3 + L0)             := Task_S;
+          Trace_S (4 + L0 .. 6 + L0)        := "/E:";
+          Trace_S (7 + L0 .. 6 + L1)        := Entry_S;
+          Trace_S (7 + L1 .. 9 + L1)        := "/T:";
+          Trace_S (10 + L1 .. Trace_S'Last) := Timeout_S;
+          Send_Trace (Id, Trace_S);
+       end if;
+    end Send_Trace_Info;
+ 
+    procedure Send_Trace_Info
+      (Id        : Trace_T;
+       Task_Name : Task_Id;
+       Number    : Integer)
+    is
+       Task_S    : String := SSL.Task_Name.all;
+       Number_S  : String := Integer'Image (Number);
+       Accepts_S : String := Extract_Accepts (Task_Name);
+       Trace_S   : String (1 .. 9 + Task_S'Length
+                                  + Number_S'Length + Accepts_S'Length);
+ 
+       L0 : Integer := Task_S'Length;
+       L1 : Integer := Task_S'Length + Number_S'Length;
+ 
+    begin
+       if Parameters.Runtime_Traces then
+          Trace_S (1 .. 3)                  := "/N:";
+          Trace_S (4 .. 3 + L0)             := Task_S;
+          Trace_S (4 + L0 .. 6 + L0)        := "/#:";
+          Trace_S (7 + L0 .. 6 + L1)        := Number_S;
+          Trace_S (7 + L1 .. 9 + L1)        := "/E:";
+          Trace_S (10 + L1 .. Trace_S'Last) := Accepts_S;
+          Send_Trace (Id, Trace_S);
+       end if;
+    end Send_Trace_Info;
+ 
+    procedure Send_Trace_Info
+      (Id        : Trace_T;
+       Task_Name : Task_Id;
+       Number    : Integer;
+       Timeout   : Duration)
+    is
+       Task_S    : String := SSL.Task_Name.all;
+       Timeout_S : String := Duration'Image (Timeout);
+       Number_S  : String := Integer'Image (Number);
+       Accepts_S : String := Extract_Accepts (Task_Name);
+       Trace_S   : String (1 .. 12 + Task_S'Length + Timeout_S'Length
+                                   + Number_S'Length + Accepts_S'Length);
+ 
+       L0 : Integer := Task_S'Length;
+       L1 : Integer := Task_S'Length + Timeout_S'Length;
+       L2 : Integer := Task_S'Length + Timeout_S'Length + Number_S'Length;
+ 
+    begin
+       if Parameters.Runtime_Traces then
+          Trace_S (1 .. 3)                  := "/N:";
+          Trace_S (4 .. 3 + L0)             := Task_S;
+          Trace_S (4 + L0 .. 6 + L0)        := "/T:";
+          Trace_S (7 + L0 .. 6 + L1)        := Timeout_S;
+          Trace_S (7 + L1 .. 9 + L1)        := "/#:";
+          Trace_S (10 + L1 .. 9 + L2)       := Number_S;
+          Trace_S (10 + L2 .. 12 + L2)      := "/E:";
+          Trace_S (13 + L2 .. Trace_S'Last) := Accepts_S;
+          Send_Trace (Id, Trace_S);
+       end if;
+    end Send_Trace_Info;
+ 
+    ---------------------
+    -- Extract_Accepts --
+    ---------------------
+ 
+    --  This function returns a string in which all opened
+    --  Accepts or Selects are given, separated by semi-colons.
+ 
+    function Extract_Accepts (Task_Name : Task_Id) return String_Trace is
+       Info_Annex : String_Trace := (ASCII.NUL, others => ' ');
+ 
+    begin
+       for J in Task_Name.Open_Accepts'First ..
+         Task_Name.Open_Accepts'Last - 1
+       loop
+          Info_Annex := Append (Info_Annex, Integer'Image
+                                (Integer (Task_Name.Open_Accepts (J).S)) & ",");
+       end loop;
+ 
+       Info_Annex := Append (Info_Annex,
+                             Integer'Image (Integer
+                                            (Task_Name.Open_Accepts
+                                             (Task_Name.Open_Accepts'Last).S)));
+       return Info_Annex;
+    end Extract_Accepts;
+ end System.Traces.Tasking;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tratas.adb gcc-4.0.0/gcc/ada/s-tratas.adb
*** gcc-3.4.3/gcc/ada/s-tratas.adb	Thu Apr 24 17:54:14 2003
--- gcc-4.0.0/gcc/ada/s-tratas.adb	Mon May 17 13:20:48 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --             Copyright (C) 2001 Free Software Foundation, Inc.            --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 2001-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body System.Traces.Tasking is
*** 39,52 ****
     -- Send_Trace_Info --
     ---------------------
  
!    procedure Send_Trace_Info (Id : Trace_T; Task_Name2 : ST.Task_ID) is
     begin
        null;
     end Send_Trace_Info;
  
     procedure Send_Trace_Info
       (Id           : Trace_T;
!       Task_Name2   : ST.Task_ID;
        Entry_Number : ST.Entry_Index)
     is
     begin
--- 39,52 ----
     -- Send_Trace_Info --
     ---------------------
  
!    procedure Send_Trace_Info (Id : Trace_T; Task_Name2 : ST.Task_Id) is
     begin
        null;
     end Send_Trace_Info;
  
     procedure Send_Trace_Info
       (Id           : Trace_T;
!       Task_Name2   : ST.Task_Id;
        Entry_Number : ST.Entry_Index)
     is
     begin
*************** package body System.Traces.Tasking is
*** 55,62 ****
  
     procedure Send_Trace_Info
       (Id           : Trace_T;
!       Task_Name    : ST.Task_ID;
!       Task_Name2   : ST.Task_ID;
        Entry_Number : ST.Entry_Index)
     is
     begin
--- 55,62 ----
  
     procedure Send_Trace_Info
       (Id           : Trace_T;
!       Task_Name    : ST.Task_Id;
!       Task_Name2   : ST.Task_Id;
        Entry_Number : ST.Entry_Index)
     is
     begin
*************** package body System.Traces.Tasking is
*** 65,72 ****
  
     procedure Send_Trace_Info
       (Id         : Trace_T;
!       Task_Name  : ST.Task_ID;
!       Task_Name2 : ST.Task_ID)
     is
     begin
        null;
--- 65,72 ----
  
     procedure Send_Trace_Info
       (Id         : Trace_T;
!       Task_Name  : ST.Task_Id;
!       Task_Name2 : ST.Task_Id)
     is
     begin
        null;
*************** package body System.Traces.Tasking is
*** 82,88 ****
  
     procedure Send_Trace_Info
       (Id           : Trace_T;
!       Acceptor     : ST.Task_ID;
        Entry_Number : ST.Entry_Index;
        Timeout      : Duration)
     is
--- 82,88 ----
  
     procedure Send_Trace_Info
       (Id           : Trace_T;
!       Acceptor     : ST.Task_Id;
        Entry_Number : ST.Entry_Index;
        Timeout      : Duration)
     is
*************** package body System.Traces.Tasking is
*** 101,107 ****
  
     procedure Send_Trace_Info
       (Id        : Trace_T;
!       Task_Name : ST.Task_ID;
        Number    : Integer)
     is
     begin
--- 101,107 ----
  
     procedure Send_Trace_Info
       (Id        : Trace_T;
!       Task_Name : ST.Task_Id;
        Number    : Integer)
     is
     begin
*************** package body System.Traces.Tasking is
*** 110,116 ****
  
     procedure Send_Trace_Info
       (Id        : Trace_T;
!       Task_Name : ST.Task_ID;
        Number    : Integer;
        Timeout   : Duration)
     is
--- 110,116 ----
  
     procedure Send_Trace_Info
       (Id        : Trace_T;
!       Task_Name : ST.Task_Id;
        Number    : Integer;
        Timeout   : Duration)
     is
diff -Nrcpad gcc-3.4.3/gcc/ada/s-tratas.ads gcc-4.0.0/gcc/ada/s-tratas.ads
*** gcc-3.4.3/gcc/ada/s-tratas.ads	Thu Apr 24 17:54:14 2003
--- gcc-4.0.0/gcc/ada/s-tratas.ads	Mon May 17 13:20:48 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --             Copyright (C) 2001 Free Software Foundation, Inc.            --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 2001-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package System.Traces.Tasking is
*** 50,72 ****
  
     procedure Send_Trace_Info
       (Id         : Trace_T;
!       Task_Name2 : ST.Task_ID);
  
     procedure Send_Trace_Info
       (Id           : Trace_T;
!       Task_Name2   : ST.Task_ID;
        Entry_Number : ST.Entry_Index);
  
     procedure Send_Trace_Info
       (Id           : Trace_T;
!       Task_Name    : ST.Task_ID;
!       Task_Name2   : ST.Task_ID;
        Entry_Number : ST.Entry_Index);
  
     procedure Send_Trace_Info
       (Id         : Trace_T;
!       Task_Name  : ST.Task_ID;
!       Task_Name2 : ST.Task_ID);
  
     procedure Send_Trace_Info
       (Id           : Trace_T;
--- 50,72 ----
  
     procedure Send_Trace_Info
       (Id         : Trace_T;
!       Task_Name2 : ST.Task_Id);
  
     procedure Send_Trace_Info
       (Id           : Trace_T;
!       Task_Name2   : ST.Task_Id;
        Entry_Number : ST.Entry_Index);
  
     procedure Send_Trace_Info
       (Id           : Trace_T;
!       Task_Name    : ST.Task_Id;
!       Task_Name2   : ST.Task_Id;
        Entry_Number : ST.Entry_Index);
  
     procedure Send_Trace_Info
       (Id         : Trace_T;
!       Task_Name  : ST.Task_Id;
!       Task_Name2 : ST.Task_Id);
  
     procedure Send_Trace_Info
       (Id           : Trace_T;
*************** package System.Traces.Tasking is
*** 74,80 ****
  
     procedure Send_Trace_Info
       (Id           : Trace_T;
!       Acceptor     : ST.Task_ID;
        Entry_Number : ST.Entry_Index;
        Timeout      : Duration);
  
--- 74,80 ----
  
     procedure Send_Trace_Info
       (Id           : Trace_T;
!       Acceptor     : ST.Task_Id;
        Entry_Number : ST.Entry_Index;
        Timeout      : Duration);
  
*************** package System.Traces.Tasking is
*** 85,96 ****
  
     procedure Send_Trace_Info
       (Id         : Trace_T;
!       Task_Name  : ST.Task_ID;
        Number     : Integer);
  
     procedure Send_Trace_Info
       (Id         : Trace_T;
!       Task_Name  : ST.Task_ID;
        Number     : Integer;
        Timeout    : Duration);
  end System.Traces.Tasking;
--- 85,96 ----
  
     procedure Send_Trace_Info
       (Id         : Trace_T;
!       Task_Name  : ST.Task_Id;
        Number     : Integer);
  
     procedure Send_Trace_Info
       (Id         : Trace_T;
!       Task_Name  : ST.Task_Id;
        Number     : Integer;
        Timeout    : Duration);
  end System.Traces.Tasking;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-unstyp.ads gcc-4.0.0/gcc/ada/s-unstyp.ads
*** gcc-3.4.3/gcc/ada/s-unstyp.ads	Tue Oct 21 13:42:18 2003
--- gcc-4.0.0/gcc/ada/s-unstyp.ads	Fri Jun 11 10:47:39 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** pragma Pure (Unsigned_Types);
*** 88,94 ****
     --  Types used for packed array conversions
  
     subtype Bytes_F is Packed_Bytes4 (1 .. Float'Size / 8);
!    --  Type used in implementation of Is_Negative instrinsic (see Exp_Intr)
  
     function Shift_Left
       (Value  : Short_Short_Unsigned;
--- 88,94 ----
     --  Types used for packed array conversions
  
     subtype Bytes_F is Packed_Bytes4 (1 .. Float'Size / 8);
!    --  Type used in implementation of Is_Negative intrinsic (see Exp_Intr)
  
     function Shift_Left
       (Value  : Short_Short_Unsigned;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-vaflop-vms-alpha.adb gcc-4.0.0/gcc/ada/s-vaflop-vms-alpha.adb
*** gcc-3.4.3/gcc/ada/s-vaflop-vms-alpha.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-vaflop-vms-alpha.adb	Mon Jun  7 14:16:14 2004
***************
*** 0 ****
--- 1,621 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --           S Y S T E M . V A X _ F L O A T _ O P E R A T I O N S          --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 1997-2000 Free Software Foundation, Inc.          --
+ --                       (Version for Alpha OpenVMS)                        --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with System.IO;           use System.IO;
+ with System.Machine_Code; use System.Machine_Code;
+ 
+ package body System.Vax_Float_Operations is
+ 
+    --  Ensure this gets compiled with -O to avoid extra (and possibly
+    --  improper) memory stores.
+ 
+    pragma Optimize (Time);
+ 
+    --  Declare the functions that do the conversions between floating-point
+    --  formats.  Call the operands IEEE float so they get passed in
+    --  FP registers.
+ 
+    function Cvt_G_T (X : T) return T;
+    function Cvt_T_G (X : T) return T;
+    function Cvt_T_F (X : T) return S;
+ 
+    pragma Import (C, Cvt_G_T, "OTS$CVT_FLOAT_G_T");
+    pragma Import (C, Cvt_T_G, "OTS$CVT_FLOAT_T_G");
+    pragma Import (C, Cvt_T_F, "OTS$CVT_FLOAT_T_F");
+ 
+    --  In each of the conversion routines that are done with OTS calls,
+    --  we define variables of the corresponding IEEE type so that they are
+    --  passed and kept in the proper register class.
+ 
+    ------------
+    -- D_To_G --
+    ------------
+ 
+    function D_To_G (X : D) return G is
+       A, B : T;
+       C : G;
+ 
+    begin
+       Asm ("ldg %0,%1", T'Asm_Output ("=f", A), D'Asm_Input ("m", X));
+       Asm ("cvtdg %1,%0", T'Asm_Output ("=f", B), T'Asm_Input ("f", A));
+       Asm ("stg %1,%0", G'Asm_Output ("=m", C), T'Asm_Input ("f", B));
+       return C;
+    end D_To_G;
+ 
+    ------------
+    -- F_To_G --
+    ------------
+ 
+    function F_To_G (X : F) return G is
+       A : T;
+       B : G;
+ 
+    begin
+       Asm ("ldf %0,%1", T'Asm_Output ("=f", A), F'Asm_Input ("m", X));
+       Asm ("stg %1,%0", G'Asm_Output ("=m", B), T'Asm_Input ("f", A));
+       return B;
+    end F_To_G;
+ 
+    ------------
+    -- F_To_S --
+    ------------
+ 
+    function F_To_S (X : F) return S is
+       A : T;
+       B : S;
+ 
+    begin
+       --  Because converting to a wider FP format is a no-op, we say
+       --  A is 64-bit even though we are loading 32 bits into it.
+       Asm ("ldf %0,%1", T'Asm_Output ("=f", A), F'Asm_Input ("m", X));
+ 
+       B := S (Cvt_G_T (A));
+       return B;
+    end F_To_S;
+ 
+    ------------
+    -- G_To_D --
+    ------------
+ 
+    function G_To_D (X : G) return D is
+       A, B : T;
+       C : D;
+ 
+    begin
+       Asm ("ldg %0,%1", T'Asm_Output ("=f", A), G'Asm_Input ("m", X));
+       Asm ("cvtgd %1,%0", T'Asm_Output ("=f", B), T'Asm_Input ("f", A));
+       Asm ("stg %1,%0", D'Asm_Output ("=m", C), T'Asm_Input ("f", B));
+       return C;
+    end G_To_D;
+ 
+    ------------
+    -- G_To_F --
+    ------------
+ 
+    function G_To_F (X : G) return F is
+       A : T;
+       B : S;
+       C : F;
+ 
+    begin
+       Asm ("ldg %0,%1", T'Asm_Output ("=f", A), G'Asm_Input ("m", X));
+       Asm ("cvtgf %1,%0", S'Asm_Output ("=f", B), T'Asm_Input ("f", A));
+       Asm ("stf %1,%0", F'Asm_Output ("=m", C), S'Asm_Input ("f", B));
+       return C;
+    end G_To_F;
+ 
+    ------------
+    -- G_To_Q --
+    ------------
+ 
+    function G_To_Q (X : G) return Q is
+       A : T;
+       B : Q;
+ 
+    begin
+       Asm ("ldg %0,%1", T'Asm_Output ("=f", A), G'Asm_Input ("m", X));
+       Asm ("cvtgq %1,%0", Q'Asm_Output ("=f", B), T'Asm_Input ("f", A));
+       return B;
+    end G_To_Q;
+ 
+    ------------
+    -- G_To_T --
+    ------------
+ 
+    function G_To_T (X : G) return T is
+       A, B : T;
+ 
+    begin
+       Asm ("ldg %0,%1", T'Asm_Output ("=f", A), G'Asm_Input ("m", X));
+       B := Cvt_G_T (A);
+       return B;
+    end G_To_T;
+ 
+    ------------
+    -- F_To_Q --
+    ------------
+ 
+    function F_To_Q (X : F) return Q is
+    begin
+       return G_To_Q (F_To_G (X));
+    end F_To_Q;
+ 
+    ------------
+    -- Q_To_F --
+    ------------
+ 
+    function Q_To_F (X : Q) return F is
+       A : S;
+       B : F;
+ 
+    begin
+       Asm ("cvtqf %1,%0", S'Asm_Output ("=f", A), Q'Asm_Input ("f", X));
+       Asm ("stf %1,%0", F'Asm_Output ("=m", B), S'Asm_Input ("f", A));
+       return B;
+    end Q_To_F;
+ 
+    ------------
+    -- Q_To_G --
+    ------------
+ 
+    function Q_To_G (X : Q) return G is
+       A : T;
+       B : G;
+ 
+    begin
+       Asm ("cvtqg %1,%0", T'Asm_Output ("=f", A), Q'Asm_Input ("f", X));
+       Asm ("stg %1,%0", G'Asm_Output ("=m", B), T'Asm_Input ("f", A));
+       return B;
+    end Q_To_G;
+ 
+    ------------
+    -- S_To_F --
+    ------------
+ 
+    function S_To_F (X : S) return F is
+       A : S;
+       B : F;
+ 
+    begin
+       A := Cvt_T_F (T (X));
+       Asm ("stf %1,%0", F'Asm_Output ("=m", B), S'Asm_Input ("f", A));
+       return B;
+    end S_To_F;
+ 
+    ------------
+    -- T_To_D --
+    ------------
+ 
+    function T_To_D (X : T) return D is
+    begin
+       return G_To_D (T_To_G (X));
+    end T_To_D;
+ 
+    ------------
+    -- T_To_G --
+    ------------
+ 
+    function T_To_G (X : T) return G is
+       A : T;
+       B : G;
+ 
+    begin
+       A := Cvt_T_G (X);
+       Asm ("stg %1,%0", G'Asm_Output ("=m", B), T'Asm_Input ("f", A));
+       return B;
+    end T_To_G;
+ 
+    -----------
+    -- Abs_F --
+    -----------
+ 
+    function Abs_F (X : F) return F is
+       A, B : S;
+       C : F;
+ 
+    begin
+       Asm ("ldf %0,%1", S'Asm_Output ("=f", A), F'Asm_Input ("m", X));
+       Asm ("cpys $f31,%1,%0", S'Asm_Output ("=f", B), S'Asm_Input ("f", A));
+       Asm ("stf %1,%0", F'Asm_Output ("=m", C), S'Asm_Input ("f", B));
+       return C;
+    end Abs_F;
+ 
+    -----------
+    -- Abs_G --
+    -----------
+ 
+    function Abs_G (X : G) return G is
+       A, B : T;
+       C : G;
+ 
+    begin
+       Asm ("ldg %0,%1", T'Asm_Output ("=f", A), G'Asm_Input ("m", X));
+       Asm ("cpys $f31,%1,%0", T'Asm_Output ("=f", B), T'Asm_Input ("f", A));
+       Asm ("stg %1,%0", G'Asm_Output ("=m", C), T'Asm_Input ("f", B));
+       return C;
+    end Abs_G;
+ 
+    -----------
+    -- Add_F --
+    -----------
+ 
+    function Add_F (X, Y : F) return F is
+       X1, Y1, R : S;
+       R1 : F;
+ 
+    begin
+       Asm ("ldf %0,%1", S'Asm_Output ("=f", X1), F'Asm_Input ("m", X));
+       Asm ("ldf %0,%1", S'Asm_Output ("=f", Y1), F'Asm_Input ("m", Y));
+       Asm ("addf %1,%2,%0", S'Asm_Output ("=f", R),
+            (S'Asm_Input ("f", X1), S'Asm_Input ("f", Y1)));
+       Asm ("stf %1,%0", F'Asm_Output ("=m", R1), S'Asm_Input ("f", R));
+       return R1;
+    end Add_F;
+ 
+    -----------
+    -- Add_G --
+    -----------
+ 
+    function Add_G (X, Y : G) return G is
+       X1, Y1, R : T;
+       R1 : G;
+ 
+    begin
+       Asm ("ldg %0,%1", T'Asm_Output ("=f", X1), G'Asm_Input ("m", X));
+       Asm ("ldg %0,%1", T'Asm_Output ("=f", Y1), G'Asm_Input ("m", Y));
+       Asm ("addg %1,%2,%0", T'Asm_Output ("=f", R),
+            (T'Asm_Input ("f", X1), T'Asm_Input ("f", Y1)));
+       Asm ("stg %1,%0", G'Asm_Output ("=m", R1), T'Asm_Input ("f", R));
+       return R1;
+    end Add_G;
+ 
+    --------------------
+    -- Debug_Output_D --
+    --------------------
+ 
+    procedure Debug_Output_D (Arg : D) is
+    begin
+       Put (D'Image (Arg));
+    end Debug_Output_D;
+ 
+    --------------------
+    -- Debug_Output_F --
+    --------------------
+ 
+    procedure Debug_Output_F (Arg : F) is
+    begin
+       Put (F'Image (Arg));
+    end Debug_Output_F;
+ 
+    --------------------
+    -- Debug_Output_G --
+    --------------------
+ 
+    procedure Debug_Output_G (Arg : G) is
+    begin
+       Put (G'Image (Arg));
+    end Debug_Output_G;
+ 
+    --------------------
+    -- Debug_String_D --
+    --------------------
+ 
+    Debug_String_Buffer : String (1 .. 32);
+    --  Buffer used by all Debug_String_x routines for returning result
+ 
+    function Debug_String_D (Arg : D) return System.Address is
+       Image_String : constant String := D'Image (Arg) & ASCII.NUL;
+       Image_Size   : constant Integer := Image_String'Length;
+ 
+    begin
+       Debug_String_Buffer (1 .. Image_Size) := Image_String;
+       return Debug_String_Buffer (1)'Address;
+    end Debug_String_D;
+ 
+    --------------------
+    -- Debug_String_F --
+    --------------------
+ 
+    function Debug_String_F (Arg : F) return System.Address is
+       Image_String : constant String := F'Image (Arg) & ASCII.NUL;
+       Image_Size   : constant Integer := Image_String'Length;
+ 
+    begin
+       Debug_String_Buffer (1 .. Image_Size) := Image_String;
+       return Debug_String_Buffer (1)'Address;
+    end Debug_String_F;
+ 
+    --------------------
+    -- Debug_String_G --
+    --------------------
+ 
+    function Debug_String_G (Arg : G) return System.Address is
+       Image_String : constant String := G'Image (Arg) & ASCII.NUL;
+       Image_Size   : constant Integer := Image_String'Length;
+ 
+    begin
+       Debug_String_Buffer (1 .. Image_Size) := Image_String;
+       return Debug_String_Buffer (1)'Address;
+    end Debug_String_G;
+ 
+    -----------
+    -- Div_F --
+    -----------
+ 
+    function Div_F (X, Y : F) return F is
+       X1, Y1, R : S;
+ 
+       R1 : F;
+    begin
+       Asm ("ldf %0,%1", S'Asm_Output ("=f", X1), F'Asm_Input ("m", X));
+       Asm ("ldf %0,%1", S'Asm_Output ("=f", Y1), F'Asm_Input ("m", Y));
+       Asm ("divf %1,%2,%0", S'Asm_Output ("=f", R),
+            (S'Asm_Input ("f", X1), S'Asm_Input ("f", Y1)));
+       Asm ("stf %1,%0", F'Asm_Output ("=m", R1), S'Asm_Input ("f", R));
+       return R1;
+    end Div_F;
+ 
+    -----------
+    -- Div_G --
+    -----------
+ 
+    function Div_G (X, Y : G) return G is
+       X1, Y1, R : T;
+       R1 : G;
+ 
+    begin
+       Asm ("ldg %0,%1", T'Asm_Output ("=f", X1), G'Asm_Input ("m", X));
+       Asm ("ldg %0,%1", T'Asm_Output ("=f", Y1), G'Asm_Input ("m", Y));
+       Asm ("divg %1,%2,%0", T'Asm_Output ("=f", R),
+            (T'Asm_Input ("f", X1), T'Asm_Input ("f", Y1)));
+       Asm ("stg %1,%0", G'Asm_Output ("=m", R1), T'Asm_Input ("f", R));
+       return R1;
+    end Div_G;
+ 
+    ----------
+    -- Eq_F --
+    ----------
+ 
+    function Eq_F (X, Y : F) return Boolean is
+       X1, Y1, R : S;
+ 
+    begin
+       Asm ("ldf %0,%1", S'Asm_Output ("=f", X1), F'Asm_Input ("m", X));
+       Asm ("ldf %0,%1", S'Asm_Output ("=f", Y1), F'Asm_Input ("m", Y));
+       Asm ("cmpgeq %1,%2,%0", S'Asm_Output ("=f", R),
+            (S'Asm_Input ("f", X1), S'Asm_Input ("f", Y1)));
+       return R /= 0.0;
+    end Eq_F;
+ 
+    ----------
+    -- Eq_G --
+    ----------
+ 
+    function Eq_G (X, Y : G) return Boolean is
+       X1, Y1, R : T;
+ 
+    begin
+       Asm ("ldg %0,%1", T'Asm_Output ("=f", X1), G'Asm_Input ("m", X));
+       Asm ("ldg %0,%1", T'Asm_Output ("=f", Y1), G'Asm_Input ("m", Y));
+       Asm ("cmpgeq %1,%2,%0", T'Asm_Output ("=f", R),
+            (T'Asm_Input ("f", X1), T'Asm_Input ("f", Y1)));
+       return R /= 0.0;
+    end Eq_G;
+ 
+    ----------
+    -- Le_F --
+    ----------
+ 
+    function Le_F (X, Y : F) return Boolean is
+       X1, Y1, R : S;
+ 
+    begin
+       Asm ("ldf %0,%1", S'Asm_Output ("=f", X1), F'Asm_Input ("m", X));
+       Asm ("ldf %0,%1", S'Asm_Output ("=f", Y1), F'Asm_Input ("m", Y));
+       Asm ("cmpgle %1,%2,%0", S'Asm_Output ("=f", R),
+            (S'Asm_Input ("f", X1), S'Asm_Input ("f", Y1)));
+       return R /= 0.0;
+    end Le_F;
+ 
+    ----------
+    -- Le_G --
+    ----------
+ 
+    function Le_G (X, Y : G) return Boolean is
+       X1, Y1, R : T;
+ 
+    begin
+       Asm ("ldg %0,%1", T'Asm_Output ("=f", X1), G'Asm_Input ("m", X));
+       Asm ("ldg %0,%1", T'Asm_Output ("=f", Y1), G'Asm_Input ("m", Y));
+       Asm ("cmpgle %1,%2,%0", T'Asm_Output ("=f", R),
+            (T'Asm_Input ("f", X1), T'Asm_Input ("f", Y1)));
+       return R /= 0.0;
+    end Le_G;
+ 
+    ----------
+    -- Lt_F --
+    ----------
+ 
+    function Lt_F (X, Y : F) return Boolean is
+       X1, Y1, R : S;
+ 
+    begin
+       Asm ("ldf %0,%1", S'Asm_Output ("=f", X1), F'Asm_Input ("m", X));
+       Asm ("ldf %0,%1", S'Asm_Output ("=f", Y1), F'Asm_Input ("m", Y));
+       Asm ("cmpglt %1,%2,%0", S'Asm_Output ("=f", R),
+            (S'Asm_Input ("f", X1), S'Asm_Input ("f", Y1)));
+       return R /= 0.0;
+    end Lt_F;
+ 
+    ----------
+    -- Lt_G --
+    ----------
+ 
+    function Lt_G (X, Y : G) return Boolean is
+       X1, Y1, R : T;
+ 
+    begin
+       Asm ("ldg %0,%1", T'Asm_Output ("=f", X1), G'Asm_Input ("m", X));
+       Asm ("ldg %0,%1", T'Asm_Output ("=f", Y1), G'Asm_Input ("m", Y));
+       Asm ("cmpglt %1,%2,%0", T'Asm_Output ("=f", R),
+            (T'Asm_Input ("f", X1), T'Asm_Input ("f", Y1)));
+       return R /= 0.0;
+    end Lt_G;
+ 
+    -----------
+    -- Mul_F --
+    -----------
+ 
+    function Mul_F (X, Y : F) return F is
+       X1, Y1, R : S;
+       R1 : F;
+ 
+    begin
+       Asm ("ldf %0,%1", S'Asm_Output ("=f", X1), F'Asm_Input ("m", X));
+       Asm ("ldf %0,%1", S'Asm_Output ("=f", Y1), F'Asm_Input ("m", Y));
+       Asm ("mulf %1,%2,%0", S'Asm_Output ("=f", R),
+            (S'Asm_Input ("f", X1), S'Asm_Input ("f", Y1)));
+       Asm ("stf %1,%0", F'Asm_Output ("=m", R1), S'Asm_Input ("f", R));
+       return R1;
+    end Mul_F;
+ 
+    -----------
+    -- Mul_G --
+    -----------
+ 
+    function Mul_G (X, Y : G) return G is
+       X1, Y1, R : T;
+       R1 : G;
+ 
+    begin
+       Asm ("ldg %0,%1", T'Asm_Output ("=f", X1), G'Asm_Input ("m", X));
+       Asm ("ldg %0,%1", T'Asm_Output ("=f", Y1), G'Asm_Input ("m", Y));
+       Asm ("mulg %1,%2,%0", T'Asm_Output ("=f", R),
+            (T'Asm_Input ("f", X1), T'Asm_Input ("f", Y1)));
+       Asm ("stg %1,%0", G'Asm_Output ("=m", R1), T'Asm_Input ("f", R));
+       return R1;
+    end Mul_G;
+ 
+    -----------
+    -- Neg_F --
+    -----------
+ 
+    function Neg_F (X : F) return F is
+       A, B : S;
+       C : F;
+ 
+    begin
+       Asm ("ldf %0,%1", S'Asm_Output ("=f", A), F'Asm_Input ("m", X));
+       Asm ("cpysn %1,%1,%0", S'Asm_Output ("=f", B), S'Asm_Input ("f", A));
+       Asm ("stf %1,%0", F'Asm_Output ("=m", C), S'Asm_Input ("f", B));
+       return C;
+    end Neg_F;
+ 
+    -----------
+    -- Neg_G --
+    -----------
+ 
+    function Neg_G (X : G) return G is
+       A, B : T;
+       C : G;
+ 
+    begin
+       Asm ("ldg %0,%1", T'Asm_Output ("=f", A), G'Asm_Input ("m", X));
+       Asm ("cpysn %1,%1,%0", T'Asm_Output ("=f", B), T'Asm_Input ("f", A));
+       Asm ("stg %1,%0", G'Asm_Output ("=m", C), T'Asm_Input ("f", B));
+       return C;
+    end Neg_G;
+ 
+    --------
+    -- pd --
+    --------
+ 
+    procedure pd (Arg : D) is
+    begin
+       Put_Line (D'Image (Arg));
+    end pd;
+ 
+    --------
+    -- pf --
+    --------
+ 
+    procedure pf (Arg : F) is
+    begin
+       Put_Line (F'Image (Arg));
+    end pf;
+ 
+    --------
+    -- pg --
+    --------
+ 
+    procedure pg (Arg : G) is
+    begin
+       Put_Line (G'Image (Arg));
+    end pg;
+ 
+    -----------
+    -- Sub_F --
+    -----------
+ 
+    function Sub_F (X, Y : F) return F is
+       X1, Y1, R : S;
+       R1 : F;
+ 
+    begin
+       Asm ("ldf %0,%1", S'Asm_Output ("=f", X1), F'Asm_Input ("m", X));
+       Asm ("ldf %0,%1", S'Asm_Output ("=f", Y1), F'Asm_Input ("m", Y));
+       Asm ("subf %1,%2,%0", S'Asm_Output ("=f", R),
+            (S'Asm_Input ("f", X1), S'Asm_Input ("f", Y1)));
+       Asm ("stf %1,%0", F'Asm_Output ("=m", R1), S'Asm_Input ("f", R));
+       return R1;
+    end Sub_F;
+ 
+    -----------
+    -- Sub_G --
+    -----------
+ 
+    function Sub_G (X, Y : G) return G is
+       X1, Y1, R : T;
+       R1 : G;
+ 
+    begin
+       Asm ("ldg %0,%1", T'Asm_Output ("=f", X1), G'Asm_Input ("m", X));
+       Asm ("ldg %0,%1", T'Asm_Output ("=f", Y1), G'Asm_Input ("m", Y));
+       Asm ("subg %1,%2,%0", T'Asm_Output ("=f", R),
+            (T'Asm_Input ("f", X1), T'Asm_Input ("f", Y1)));
+       Asm ("stg %1,%0", G'Asm_Output ("=m", R1), T'Asm_Input ("f", R));
+       return R1;
+    end Sub_G;
+ 
+ end System.Vax_Float_Operations;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-vaflop.adb gcc-4.0.0/gcc/ada/s-vaflop.adb
*** gcc-3.4.3/gcc/ada/s-vaflop.adb	Thu Apr 24 17:54:14 2003
--- gcc-4.0.0/gcc/ada/s-vaflop.adb	Thu Feb 10 13:56:44 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2001 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 40,45 ****
--- 40,47 ----
  with System.IO; use System.IO;
  
  package body System.Vax_Float_Operations is
+    pragma Warnings (Off);
+    --  Warnings about infinite recursion when the -gnatdm switch is used.
  
     -----------
     -- Abs_F --
diff -Nrcpad gcc-3.4.3/gcc/ada/s-valwch.adb gcc-4.0.0/gcc/ada/s-valwch.adb
*** gcc-3.4.3/gcc/ada/s-valwch.adb	Thu Apr 24 17:54:15 2003
--- gcc-4.0.0/gcc/ada/s-valwch.adb	Thu Feb 10 13:50:23 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-1997, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 31,36 ****
--- 31,37 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
+ with Interfaces;      use Interfaces;
  with System.Val_Util; use System.Val_Util;
  with System.WCh_Con;  use System.WCh_Con;
  with System.WCh_StW;  use System.WCh_StW;
*************** package body System.Val_WChar is
*** 42,50 ****
     --------------------------
  
     function Value_Wide_Character
!       (Str  : String;
!        EM   : WC_Encoding_Method)
!        return Wide_Character
     is
        F : Natural;
        L : Natural;
--- 43,69 ----
     --------------------------
  
     function Value_Wide_Character
!       (Str : String;
!        EM  : WC_Encoding_Method) return Wide_Character
!    is
!       WWC : constant Wide_Wide_Character :=
!               Value_Wide_Wide_Character (Str, EM);
!       WWV : constant Unsigned_32 := Wide_Wide_Character'Pos (WWC);
!    begin
!       if WWV > 16#FFFF# then
!          raise Constraint_Error;
!       else
!          return Wide_Character'Val (WWV);
!       end if;
!    end Value_Wide_Character;
! 
!    -------------------------------
!    -- Value_Wide_Wide_Character --
!    -------------------------------
! 
!    function Value_Wide_Wide_Character
!       (Str : String;
!        EM  : System.WCh_Con.WC_Encoding_Method) return Wide_Wide_Character
     is
        F : Natural;
        L : Natural;
*************** package body System.Val_WChar is
*** 60,80 ****
           --  If just three characters, simple character case
  
           if L - F = 2 then
!             return Wide_Character'Val (Character'Pos (S (F + 1)));
  
           --  Otherwise must be a wide character in quotes. The easiest
!          --  thing is to convert the string to a wide string and then
           --  pick up the single character that it should contain.
  
           else
              declare
!                WS : constant Wide_String :=
!                       String_To_Wide_String (S (F + 1 .. L - 1), EM);
  
              begin
                 if WS'Length /= 1 then
                    raise Constraint_Error;
- 
                 else
                    return WS (WS'First);
                 end if;
--- 79,98 ----
           --  If just three characters, simple character case
  
           if L - F = 2 then
!             return Wide_Wide_Character'Val (Character'Pos (S (F + 1)));
  
           --  Otherwise must be a wide character in quotes. The easiest
!          --  thing is to convert the string to a wide wide string and then
           --  pick up the single character that it should contain.
  
           else
              declare
!                WS : constant Wide_Wide_String :=
!                       String_To_Wide_Wide_String (S (F + 1 .. L - 1), EM);
  
              begin
                 if WS'Length /= 1 then
                    raise Constraint_Error;
                 else
                    return WS (WS'First);
                 end if;
*************** package body System.Val_WChar is
*** 84,112 ****
        --  the last two values of the type have language-defined names:
  
        elsif S = "FFFE" then
!          return Wide_Character'Val (16#FFFE#);
  
        elsif S = "FFFF" then
!          return Wide_Character'Val (16#FFFF#);
  
        --  Otherwise must be a control character
  
        else
           for C in Character'Val (16#00#) .. Character'Val (16#1F#) loop
              if S (F .. L) = Character'Image (C) then
!                return Wide_Character'Val (Character'Pos (C));
              end if;
           end loop;
  
           for C in Character'Val (16#7F#) .. Character'Val (16#9F#) loop
              if S (F .. L) = Character'Image (C) then
!                return Wide_Character'Val (Character'Pos (C));
              end if;
           end loop;
  
           raise Constraint_Error;
        end if;
! 
!    end Value_Wide_Character;
  
  end System.Val_WChar;
--- 102,129 ----
        --  the last two values of the type have language-defined names:
  
        elsif S = "FFFE" then
!          return Wide_Wide_Character'Val (16#FFFE#);
  
        elsif S = "FFFF" then
!          return Wide_Wide_Character'Val (16#FFFF#);
  
        --  Otherwise must be a control character
  
        else
           for C in Character'Val (16#00#) .. Character'Val (16#1F#) loop
              if S (F .. L) = Character'Image (C) then
!                return Wide_Wide_Character'Val (Character'Pos (C));
              end if;
           end loop;
  
           for C in Character'Val (16#7F#) .. Character'Val (16#9F#) loop
              if S (F .. L) = Character'Image (C) then
!                return Wide_Wide_Character'Val (Character'Pos (C));
              end if;
           end loop;
  
           raise Constraint_Error;
        end if;
!    end Value_Wide_Wide_Character;
  
  end System.Val_WChar;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-valwch.ads gcc-4.0.0/gcc/ada/s-valwch.ads
*** gcc-3.4.3/gcc/ada/s-valwch.ads	Thu Apr 24 17:54:15 2003
--- gcc-4.0.0/gcc/ada/s-valwch.ads	Thu Feb 10 13:50:23 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 1992-2000 Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 1992-2005 Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 31,45 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
  with System.WCh_Con;
  
  package System.Val_WChar is
  pragma Pure (Val_WChar);
  
     function Value_Wide_Character
!       (Str  : String;
!        EM   : System.WCh_Con.WC_Encoding_Method)
!        return Wide_Character;
     --  Computes Wide_Character'Value (Str).
  
  end System.Val_WChar;
--- 31,51 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
+ --  Processing for Wide_[Wide_]Value attribute
+ 
  with System.WCh_Con;
  
  package System.Val_WChar is
  pragma Pure (Val_WChar);
  
     function Value_Wide_Character
!       (Str : String;
!        EM  : System.WCh_Con.WC_Encoding_Method) return Wide_Character;
!    --  Computes Wide_Character'Value (Str).
! 
!    function Value_Wide_Wide_Character
!       (Str : String;
!        EM  : System.WCh_Con.WC_Encoding_Method) return Wide_Wide_Character;
     --  Computes Wide_Character'Value (Str).
  
  end System.Val_WChar;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-vmexta.adb gcc-4.0.0/gcc/ada/s-vmexta.adb
*** gcc-3.4.3/gcc/ada/s-vmexta.adb	Tue Oct 21 13:42:18 2003
--- gcc-4.0.0/gcc/ada/s-vmexta.adb	Mon Mar 15 14:51:00 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2002, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** pragma Elaborate_All (System.HTable);
*** 38,44 ****
  
  package body System.VMS_Exception_Table is
  
!    use System.Standard_Library;
  
     type HTable_Headers is range 1 .. 37;
  
--- 38,44 ----
  
  package body System.VMS_Exception_Table is
  
!    use type SSL.Exception_Code;
  
     type HTable_Headers is range 1 .. 37;
  
*************** package body System.VMS_Exception_Table 
*** 49,56 ****
     --  Ada exception.
  
     type Exception_Code_Data is record
!       Code       : Natural;
!       Except     : Exception_Data_Ptr;
        HTable_Ptr : Exception_Code_Data_Ptr;
     end record;
  
--- 49,56 ----
     --  Ada exception.
  
     type Exception_Code_Data is record
!       Code       : SSL.Exception_Code;
!       Except     : SSL.Exception_Data_Ptr;
        HTable_Ptr : Exception_Code_Data_Ptr;
     end record;
  
*************** package body System.VMS_Exception_Table 
*** 61,68 ****
     function Get_HT_Link (T : Exception_Code_Data_Ptr)
       return Exception_Code_Data_Ptr;
  
!    function Hash (F : Natural) return HTable_Headers;
!    function Get_Key (T : Exception_Code_Data_Ptr) return Natural;
  
     package Exception_Code_HTable is new System.HTable.Static_HTable (
       Header_Num => HTable_Headers,
--- 61,68 ----
     function Get_HT_Link (T : Exception_Code_Data_Ptr)
       return Exception_Code_Data_Ptr;
  
!    function Hash (F : SSL.Exception_Code) return HTable_Headers;
!    function Get_Key (T : Exception_Code_Data_Ptr) return SSL.Exception_Code;
  
     package Exception_Code_HTable is new System.HTable.Static_HTable (
       Header_Num => HTable_Headers,
*************** package body System.VMS_Exception_Table 
*** 71,86 ****
       Null_Ptr   => null,
       Set_Next   => Set_HT_Link,
       Next       => Get_HT_Link,
!      Key        => Natural,
       Get_Key    => Get_Key,
       Hash       => Hash,
       Equal      => "=");
  
     ---------------------
     -- Coded_Exception --
     ---------------------
  
!    function Coded_Exception (X : Natural) return Exception_Data_Ptr is
        Res : Exception_Code_Data_Ptr;
  
     begin
--- 71,99 ----
       Null_Ptr   => null,
       Set_Next   => Set_HT_Link,
       Next       => Get_HT_Link,
!      Key        => SSL.Exception_Code,
       Get_Key    => Get_Key,
       Hash       => Hash,
       Equal      => "=");
  
+    ------------------
+    -- Base_Code_In --
+    ------------------
+ 
+    function Base_Code_In
+      (Code : SSL.Exception_Code) return SSL.Exception_Code
+    is
+    begin
+       return Code and not 2#0111#;
+    end Base_Code_In;
+ 
     ---------------------
     -- Coded_Exception --
     ---------------------
  
!    function Coded_Exception
!      (X : SSL.Exception_Code) return SSL.Exception_Data_Ptr
!    is
        Res : Exception_Code_Data_Ptr;
  
     begin
*************** package body System.VMS_Exception_Table 
*** 98,105 ****
     -- Get_HT_Link --
     -----------------
  
!    function  Get_HT_Link (T : Exception_Code_Data_Ptr)
!      return Exception_Code_Data_Ptr is
     begin
        return T.HTable_Ptr;
     end Get_HT_Link;
--- 111,119 ----
     -- Get_HT_Link --
     -----------------
  
!    function Get_HT_Link
!      (T : Exception_Code_Data_Ptr) return Exception_Code_Data_Ptr
!    is
     begin
        return T.HTable_Ptr;
     end Get_HT_Link;
*************** package body System.VMS_Exception_Table 
*** 108,114 ****
     -- Get_Key --
     -------------
  
!    function Get_Key (T : Exception_Code_Data_Ptr) return Natural is
     begin
        return T.Code;
     end Get_Key;
--- 122,130 ----
     -- Get_Key --
     -------------
  
!    function Get_Key (T : Exception_Code_Data_Ptr)
!      return SSL.Exception_Code
!    is
     begin
        return T.Code;
     end Get_Key;
*************** package body System.VMS_Exception_Table 
*** 117,155 ****
     -- Hash --
     ----------
  
!    function Hash (F : Natural) return HTable_Headers is
     begin
!       return HTable_Headers
!         (F mod Natural (HTable_Headers'Last - HTable_Headers'First + 1) + 1);
     end Hash;
  
     ----------------------------
     -- Register_VMS_Exception --
     ----------------------------
  
!    procedure Register_VMS_Exception (Code : Integer) is
!       Excode : constant Integer := (Code / 8) * 8;
!       --  Mask off lower 3 bits which are the severity
  
     begin
!       --  This allocates an empty exception that gets filled in by
!       --  __gnat_error_handler when the exception is raised. Allocating
!       --  it here prevents having to allocate it each time the exception
!       --  is raised.
  
        if Exception_Code_HTable.Get (Excode) = null then
!          Exception_Code_HTable.Set
!            (new Exception_Code_Data'
!              (Excode,
!               new Exception_Data'
!                (Not_Handled_By_Others => False,
!                 Lang                  => 'V',
!                 Name_Length           => 0,
!                 Full_Name             => null,
!                 HTable_Ptr            => null,
!                 Import_Code           => 0,
!                 Raise_Hook            => null),
!               null));
        end if;
     end Register_VMS_Exception;
  
--- 133,176 ----
     -- Hash --
     ----------
  
!    function Hash
!      (F : SSL.Exception_Code) return HTable_Headers
!    is
!       Headers_Magnitude : constant SSL.Exception_Code :=
!         SSL.Exception_Code (HTable_Headers'Last - HTable_Headers'First + 1);
! 
     begin
!       return HTable_Headers (F mod Headers_Magnitude + 1);
     end Hash;
  
     ----------------------------
     -- Register_VMS_Exception --
     ----------------------------
  
!    procedure Register_VMS_Exception
!      (Code : SSL.Exception_Code;
!       E    : SSL.Exception_Data_Ptr)
!    is
!       --  We bind the exception data with the base code found in the
!       --  input value, that is with the severity bits masked off.
! 
!       Excode : constant SSL.Exception_Code := Base_Code_In (Code);
  
     begin
!       --  The exception data registered here is mostly filled prior to this
!       --  call and by __gnat_error_handler when the exception is raised. We
!       --  still need to fill a couple of components for exceptions that will
!       --  be used as propagation filters (exception data pointer registered
!       --  as choices in the unwind tables): in some import/export cases, the
!       --  exception pointers for the choice and the propagated occurrence may
!       --  indeed be different for a single import code, and the personality
!       --  routine attempts to match the import codes in this case.
! 
!       E.Lang := 'V';
!       E.Import_Code := Excode;
  
        if Exception_Code_HTable.Get (Excode) = null then
!          Exception_Code_HTable.Set (new Exception_Code_Data'(Excode, E, null));
        end if;
     end Register_VMS_Exception;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/s-vmexta.ads gcc-4.0.0/gcc/ada/s-vmexta.ads
*** gcc-3.4.3/gcc/ada/s-vmexta.ads	Thu Apr 24 17:54:15 2003
--- gcc-4.0.0/gcc/ada/s-vmexta.ads	Mon Mar 15 14:51:00 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 1997 Free Software Foundation, Inc.             --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 1997-2004 Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 35,43 ****
  --  where there is at least one Import/Export exception present.
  
  with System.Standard_Library;
  package System.VMS_Exception_Table is
  
!    procedure Register_VMS_Exception (Code : Integer);
     --  Register an exception in the hash table mapping with a VMS
     --  condition code.
  
--- 35,48 ----
  --  where there is at least one Import/Export exception present.
  
  with System.Standard_Library;
+ 
  package System.VMS_Exception_Table is
  
!    package SSL renames System.Standard_Library;
! 
!    procedure Register_VMS_Exception
!      (Code : SSL.Exception_Code;
!       E    : SSL.Exception_Data_Ptr);
     --  Register an exception in the hash table mapping with a VMS
     --  condition code.
  
*************** package System.VMS_Exception_Table is
*** 45,53 ****
  
  private
  
!    function Coded_Exception (X : Natural)
!      return System.Standard_Library.Exception_Data_Ptr;
     --  Given a VMS condition, find and return it's allocated Ada exception
!    --  (called only from a-init.c).
  
  end System.VMS_Exception_Table;
--- 50,61 ----
  
  private
  
!    function Base_Code_In (Code : SSL.Exception_Code) return SSL.Exception_Code;
!    --  Value of Code with the severity bits masked off.
! 
!    function Coded_Exception (X : SSL.Exception_Code)
!      return SSL.Exception_Data_Ptr;
     --  Given a VMS condition, find and return it's allocated Ada exception
!    --  (called only from init.c).
  
  end System.VMS_Exception_Table;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-vxwork-alpha.ads gcc-4.0.0/gcc/ada/s-vxwork-alpha.ads
*** gcc-3.4.3/gcc/ada/s-vxwork-alpha.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-vxwork-alpha.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,57 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
+ --                                                                          --
+ --                        S Y S T E M . V X W O R K S                       --
+ --                                                                          --
+ --                                   S p e c                                --
+ --                                                                          --
+ --            Copyright (C) 1998-2001 Free Software Foundation, Inc.        --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the Alpha VxWorks version of this package.
+ 
+ with Interfaces.C;
+ 
+ package System.VxWorks is
+    pragma Preelaborate (System.VxWorks);
+ 
+    package IC renames Interfaces.C;
+ 
+    --  Floating point context record. Alpha version
+ 
+    FP_NUM_DREGS : constant := 32;
+    type Fpx_Array is array (1 .. FP_NUM_DREGS) of IC.double;
+ 
+    type FP_CONTEXT is record
+       fpx   : Fpx_Array;
+       fpcsr : IC.long;
+    end record;
+    pragma Convention (C, FP_CONTEXT);
+ 
+    Num_HW_Interrupts : constant := 256;
+    --  Number of entries in hardware interrupt vector table.
+ 
+ end System.VxWorks;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-vxwork-m68k.ads gcc-4.0.0/gcc/ada/s-vxwork-m68k.ads
*** gcc-3.4.3/gcc/ada/s-vxwork-m68k.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-vxwork-m68k.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,76 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
+ --                                                                          --
+ --                        S Y S T E M . V X W O R K S                       --
+ --                                                                          --
+ --                                   S p e c                                --
+ --                                                                          --
+ --            Copyright (C) 1998-2001 Free Software Foundation, Inc.        --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the M68K VxWorks version of this package.
+ 
+ with Interfaces.C;
+ 
+ package System.VxWorks is
+    pragma Preelaborate (System.VxWorks);
+ 
+    package IC renames Interfaces.C;
+ 
+    --  Floating point context record. 68K version
+ 
+    FP_NUM_DREGS        : constant := 8;
+    FP_STATE_FRAME_SIZE : constant := 216;
+ 
+    type DOUBLEX is array (1 .. 12) of Interfaces.Unsigned_8;
+    pragma Pack (DOUBLEX);
+    for DOUBLEX'Size use 12 * 8;
+ 
+    type DOUBLEX_Array is array (1 .. FP_NUM_DREGS) of DOUBLEX;
+    pragma Pack (DOUBLEX_Array);
+    for DOUBLEX_Array'Size use FP_NUM_DREGS * 12 * 8;
+ 
+    type FPREG_SET is record
+       fpcr  : IC.int;
+       fpsr  : IC.int;
+       fpiar : IC.int;
+       fpx   : DOUBLEX_Array;
+    end record;
+ 
+    type Fp_State_Frame_Array is array (1 .. FP_STATE_FRAME_SIZE) of IC.char;
+    pragma Pack (Fp_State_Frame_Array);
+    for Fp_State_Frame_Array'Size use 8 * FP_STATE_FRAME_SIZE;
+ 
+    type FP_CONTEXT is record
+       fpRegSet   : FPREG_SET;
+       stateFrame : Fp_State_Frame_Array;
+    end record;
+    pragma Convention (C, FP_CONTEXT);
+ 
+    Num_HW_Interrupts : constant := 256;
+    --  Number of entries in the hardware interrupt vector table
+ 
+ end System.VxWorks;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-vxwork-mips.ads gcc-4.0.0/gcc/ada/s-vxwork-mips.ads
*** gcc-3.4.3/gcc/ada/s-vxwork-mips.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-vxwork-mips.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,57 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
+ --                                                                          --
+ --                        S Y S T E M . V X W O R K S                       --
+ --                                                                          --
+ --                                   S p e c                                --
+ --                                                                          --
+ --            Copyright (C) 1998-2001 Free Software Foundation, Inc.        --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the MIPS VxWorks version of this package.
+ 
+ with Interfaces.C;
+ 
+ package System.VxWorks is
+    pragma Preelaborate (System.VxWorks);
+ 
+    package IC renames Interfaces.C;
+ 
+    --  Floating point context record. MIPS version
+ 
+    FP_NUM_DREGS : constant := 16;
+    type Fpx_Array is array (1 .. FP_NUM_DREGS) of IC.double;
+ 
+    type FP_CONTEXT is record
+       fpx   : Fpx_Array;
+       fpcsr : IC.int;
+    end record;
+    pragma Convention (C, FP_CONTEXT);
+ 
+    Num_HW_Interrupts : constant := 256;
+    --  Number of entries in hardware interrupt vector table.
+ 
+ end System.VxWorks;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-vxwork-ppc.ads gcc-4.0.0/gcc/ada/s-vxwork-ppc.ads
*** gcc-3.4.3/gcc/ada/s-vxwork-ppc.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-vxwork-ppc.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,57 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
+ --                                                                          --
+ --                        S Y S T E M . V X W O R K S                       --
+ --                                                                          --
+ --                                   S p e c                                --
+ --                                                                          --
+ --            Copyright (C) 1998-2001 Free Software Foundation, Inc.        --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the PPC VxWorks version of this package.
+ 
+ with Interfaces.C;
+ 
+ package System.VxWorks is
+    pragma Preelaborate (System.VxWorks);
+ 
+    package IC renames Interfaces.C;
+ 
+    --  Floating point context record. PPC version
+ 
+    FP_NUM_DREGS : constant := 32;
+    type Fpr_Array is array (1 .. FP_NUM_DREGS) of IC.double;
+ 
+    type FP_CONTEXT is record
+       fpr   : Fpr_Array;
+       fpcsr : IC.int;
+       pad   : IC.int;
+    end record;
+    pragma Convention (C, FP_CONTEXT);
+ 
+    Num_HW_Interrupts : constant := 256;
+ 
+ end System.VxWorks;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-vxwork-sparcv9.ads gcc-4.0.0/gcc/ada/s-vxwork-sparcv9.ads
*** gcc-3.4.3/gcc/ada/s-vxwork-sparcv9.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-vxwork-sparcv9.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,62 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
+ --                                                                          --
+ --                        S Y S T E M . V X W O R K S                       --
+ --                                                                          --
+ --                                   S p e c                                --
+ --                                                                          --
+ --            Copyright (C) 1998-2002 Free Software Foundation, Inc.        --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the Sparc64 VxWorks version of this package.
+ 
+ with Interfaces;
+ 
+ package System.VxWorks is
+    pragma Preelaborate (System.VxWorks);
+ 
+    --  Floating point context record. SPARCV9 version
+ 
+    FP_NUM_DREGS : constant := 32;
+ 
+    type RType is new Interfaces.Unsigned_64;
+    for RType'Alignment use 8;
+ 
+    type Fpd_Array is array (1 .. FP_NUM_DREGS) of RType;
+    for Fpd_Array'Alignment use 8;
+ 
+    type FP_CONTEXT is record
+       fpd : Fpd_Array;
+       fsr : RType;
+    end record;
+ 
+    for FP_CONTEXT'Alignment use 8;
+    pragma Convention (C, FP_CONTEXT);
+ 
+    Num_HW_Interrupts : constant := 256;
+    --  Number of entries in hardware interrupt vector table.
+ 
+ end System.VxWorks;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-vxwork-x86.ads gcc-4.0.0/gcc/ada/s-vxwork-x86.ads
*** gcc-3.4.3/gcc/ada/s-vxwork-x86.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-vxwork-x86.ads	Mon Oct  4 15:00:43 2004
***************
*** 0 ****
--- 1,56 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
+ --                                                                          --
+ --                        S Y S T E M . V X W O R K S                       --
+ --                                                                          --
+ --                                   S p e c                                --
+ --                                                                          --
+ --            Copyright (C) 1998-2004 Free Software Foundation, Inc.        --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the x86 VxWorks version of this package
+ 
+ package System.VxWorks is
+    pragma Preelaborate (System.VxWorks);
+ 
+    --  Floating point context record. x86 version
+ 
+    --  There are two kinds of FP_CONTEXT for this architecture, corresponding
+    --  to newer and older processors. The type is defined in fppI86lib.h as a
+    --  union. The form used depends on the versions of the save and restore
+    --  routines that are selected by the user (these versions are provided in
+    --  vxwork.ads). Since we do not examine the contents of these objects, it
+    --  is sufficient to declare the type as of the required size: 512 bytes.
+ 
+    type FP_CONTEXT is array (1 .. 128) of Integer;
+    for FP_CONTEXT'Alignment use 4;
+    for FP_CONTEXT'Size use 512 * Storage_Unit;
+    pragma Convention (C, FP_CONTEXT);
+ 
+    Num_HW_Interrupts : constant := 256;
+    --  Number of entries in hardware interrupt vector table
+ 
+ end System.VxWorks;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-vxwork-xscale.ads gcc-4.0.0/gcc/ada/s-vxwork-xscale.ads
*** gcc-3.4.3/gcc/ada/s-vxwork-xscale.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/s-vxwork-xscale.ads	Fri May 14 10:02:00 2004
***************
*** 0 ****
--- 1,54 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
+ --                                                                          --
+ --                        S Y S T E M . V X W O R K S                       --
+ --                                                                          --
+ --                                   S p e c                                --
+ --                                                                          --
+ --            Copyright (C) 1998-2002 Free Software Foundation, Inc.        --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNARL; see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the Xscale VxWorks version of this package.
+ 
+ package System.VxWorks is
+    pragma Preelaborate (System.VxWorks);
+ 
+    --  Floating point context record. Xscale version
+ 
+    --  There is no floating point unit on Xscale. The record definition
+    --  below matches what arch/arm/fppArmLib.h says.
+ 
+    type FP_CONTEXT is record
+       Dummy : Integer;
+    end record;
+ 
+    for FP_CONTEXT'Alignment use 4;
+    pragma Convention (C, FP_CONTEXT);
+ 
+    Num_HW_Interrupts : constant := 256;
+    --  Number of entries in hardware interrupt vector table.
+ 
+ end System.VxWorks;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-wchcnv.adb gcc-4.0.0/gcc/ada/s-wchcnv.adb
*** gcc-3.4.3/gcc/ada/s-wchcnv.adb	Thu Apr 24 17:54:15 2003
--- gcc-4.0.0/gcc/ada/s-wchcnv.adb	Thu Feb 10 13:50:39 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2001 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with System.WCh_JIS; use System.WCh_JIS;
*** 41,94 ****
  
  package body System.WCh_Cnv is
  
!    --------------------------------
!    -- Char_Sequence_To_Wide_Char --
!    --------------------------------
  
!    function Char_Sequence_To_Wide_Char
!      (C    : Character;
!       EM   : WC_Encoding_Method)
!       return Wide_Character
     is
!       B1 : Integer;
        C1 : Character;
!       U  : Unsigned_16;
!       W  : Unsigned_16;
  
        procedure Get_Hex (N : Character);
        --  If N is a hex character, then set B1 to 16 * B1 + character N.
        --  Raise Constraint_Error if character N is not a hex character.
  
        -------------
        -- Get_Hex --
        -------------
  
        procedure Get_Hex (N : Character) is
!          B2 : constant Integer := Character'Pos (N);
! 
        begin
           if B2 in Character'Pos ('0') .. Character'Pos ('9') then
              B1 := B1 * 16 + B2 - Character'Pos ('0');
- 
           elsif B2 in Character'Pos ('A') .. Character'Pos ('F') then
              B1 := B1 * 16 + B2 - (Character'Pos ('A') - 10);
- 
           elsif B2 in Character'Pos ('a') .. Character'Pos ('f') then
              B1 := B1 * 16 + B2 - (Character'Pos ('a') - 10);
- 
           else
              raise Constraint_Error;
           end if;
        end Get_Hex;
  
!    --  Start of processing for Char_Sequence_To_Wide_Char
  
     begin
        case EM is
  
           when WCEM_Hex =>
              if C /= ASCII.ESC then
!                return Wide_Character'Val (Character'Pos (C));
  
              else
                 B1 := 0;
--- 41,110 ----
  
  package body System.WCh_Cnv is
  
!    -----------------------------
!    -- Char_Sequence_To_UTF_32 --
!    -----------------------------
  
!    function Char_Sequence_To_UTF_32
!      (C       : Character;
!       EM      : WC_Encoding_Method) return UTF_32_Code
     is
!       B1 : Unsigned_32;
        C1 : Character;
!       U  : Unsigned_32;
!       W  : Unsigned_32;
  
        procedure Get_Hex (N : Character);
        --  If N is a hex character, then set B1 to 16 * B1 + character N.
        --  Raise Constraint_Error if character N is not a hex character.
  
+       procedure Get_UTF_Byte;
+       pragma Inline (Get_UTF_Byte);
+       --  Used to interpret a 2#10xxxxxx# continuation byte in UTF-8 mode.
+       --  Reads a byte, and raises CE if the first two bits are not 10.
+       --  Otherwise shifts W 6 bits left and or's in the 6 xxxxxx bits.
+ 
        -------------
        -- Get_Hex --
        -------------
  
        procedure Get_Hex (N : Character) is
!          B2 : constant Unsigned_32 := Character'Pos (N);
        begin
           if B2 in Character'Pos ('0') .. Character'Pos ('9') then
              B1 := B1 * 16 + B2 - Character'Pos ('0');
           elsif B2 in Character'Pos ('A') .. Character'Pos ('F') then
              B1 := B1 * 16 + B2 - (Character'Pos ('A') - 10);
           elsif B2 in Character'Pos ('a') .. Character'Pos ('f') then
              B1 := B1 * 16 + B2 - (Character'Pos ('a') - 10);
           else
              raise Constraint_Error;
           end if;
        end Get_Hex;
  
!       ------------------
!       -- Get_UTF_Byte --
!       ------------------
! 
!       procedure Get_UTF_Byte is
!       begin
!          U := Unsigned_32 (Character'Pos (In_Char));
! 
!          if (U and 2#11000000#) /= 2#10_000000# then
!             raise Constraint_Error;
!          end if;
! 
!          W := Shift_Left (W, 6)  or (U and 2#00111111#);
!       end Get_UTF_Byte;
! 
!    --  Start of processing for Char_Sequence_To_Wide
  
     begin
        case EM is
  
           when WCEM_Hex =>
              if C /= ASCII.ESC then
!                return Character'Pos (C);
  
              else
                 B1 := 0;
*************** package body System.WCh_Cnv is
*** 97,178 ****
                 Get_Hex (In_Char);
                 Get_Hex (In_Char);
  
!                return Wide_Character'Val (B1);
              end if;
  
           when WCEM_Upper =>
              if C > ASCII.DEL then
!                return
!                  Wide_Character'Val
!                    (Integer (256 * Character'Pos (C)) +
!                     Character'Pos (In_Char));
              else
!                return Wide_Character'Val (Character'Pos (C));
              end if;
  
           when WCEM_Shift_JIS =>
              if C > ASCII.DEL then
!                return Shift_JIS_To_JIS (C, In_Char);
              else
!                return Wide_Character'Val (Character'Pos (C));
              end if;
  
           when WCEM_EUC =>
              if C > ASCII.DEL then
!                return EUC_To_JIS (C, In_Char);
              else
!                return Wide_Character'Val (Character'Pos (C));
              end if;
  
           when WCEM_UTF8 =>
-             if C > ASCII.DEL then
  
!                --  16#0080#-16#07ff#: 2#110xxxxx# 2#10xxxxxx#
!                --  16#0800#-16#ffff#: 2#1110xxxx# 2#10xxxxxx# 2#10xxxxxx#
  
!                U := Unsigned_16 (Character'Pos (C));
  
!                if (U and 2#11100000#) = 2#11000000# then
!                   W := Shift_Left (U and 2#00011111#, 6);
!                   U := Unsigned_16 (Character'Pos (In_Char));
  
!                   if (U and 2#11000000#) /= 2#10000000# then
!                      raise Constraint_Error;
!                   end if;
  
!                   W := W or (U and 2#00111111#);
  
!                elsif (U and 2#11110000#) = 2#11100000# then
!                   W := Shift_Left (U and 2#00001111#, 12);
!                   U := Unsigned_16 (Character'Pos (In_Char));
  
!                   if (U and 2#11000000#) /= 2#10000000# then
!                      raise Constraint_Error;
!                   end if;
  
!                   W := W or Shift_Left (U and 2#00111111#, 6);
!                   U := Unsigned_16 (Character'Pos (In_Char));
  
!                   if (U and 2#11000000#) /= 2#10000000# then
!                      raise Constraint_Error;
!                   end if;
  
!                   W := W or (U and 2#00111111#);
  
!                else
!                   raise Constraint_Error;
!                end if;
  
!                return Wide_Character'Val (W);
  
              else
!                return Wide_Character'Val (Character'Pos (C));
              end if;
  
           when WCEM_Brackets =>
  
              if C /= '[' then
!                return Wide_Character'Val (Character'Pos (C));
              end if;
  
              if In_Char /= '"' then
--- 113,218 ----
                 Get_Hex (In_Char);
                 Get_Hex (In_Char);
  
!                return UTF_32_Code (B1);
              end if;
  
           when WCEM_Upper =>
              if C > ASCII.DEL then
!                return 256 * Character'Pos (C) + Character'Pos (In_Char);
              else
!                return Character'Pos (C);
              end if;
  
           when WCEM_Shift_JIS =>
              if C > ASCII.DEL then
!                return Wide_Character'Pos (Shift_JIS_To_JIS (C, In_Char));
              else
!                return Character'Pos (C);
              end if;
  
           when WCEM_EUC =>
              if C > ASCII.DEL then
!                return Wide_Character'Pos (EUC_To_JIS (C, In_Char));
              else
!                return Character'Pos (C);
              end if;
  
           when WCEM_UTF8 =>
  
!             --  Note: for details of UTF8 encoding see RFC 3629
  
!             U := Unsigned_32 (Character'Pos (C));
  
!             --  16#00_0000#-16#00_007F#: 0xxxxxxx
  
!             if (U and 2#10000000#) = 2#00000000# then
!                return Character'Pos (C);
  
!             --  16#00_0080#-16#00_07FF#: 110xxxxx 10xxxxxx
  
!             elsif (U and 2#11100000#) = 2#110_00000# then
!                W := Shift_Left (U and 2#00011111#, 6);
!                U := Unsigned_32 (Character'Pos (In_Char));
  
!                if (U and 2#11000000#) /= 2#10_000000# then
!                   raise Constraint_Error;
!                end if;
  
!                W := W or (U and 2#00111111#);
  
!                return UTF_32_Code (W);
  
!             --  16#00_0800#-16#00_ffff#: 1110xxxx 10xxxxxx 10xxxxxx
  
!             elsif (U and 2#11110000#) = 2#1110_0000# then
!                W := U and 2#00001111#;
!                Get_UTF_Byte;
!                Get_UTF_Byte;
!                return UTF_32_Code (W);
  
!             --  16#01_0000#-16#10_FFFF#: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
! 
!             elsif (U and 2#11111000#) = 2#11110_000# then
!                W := U and 2#00000111#;
! 
!                for K in 1 .. 3 loop
!                   Get_UTF_Byte;
!                end loop;
! 
!                return UTF_32_Code (W);
! 
!             --  16#0020_0000#-16#03FF_FFFF#: 111110xx 10xxxxxx 10xxxxxx
!             --                               10xxxxxx 10xxxxxx
! 
!             elsif (U and 2#11111100#) = 2#111110_00# then
!                W := U and 2#00000011#;
! 
!                for K in 1 .. 4 loop
!                   Get_UTF_Byte;
!                end loop;
! 
!                return UTF_32_Code (W);
! 
!             --  16#0400_0000#-16#7FFF_FFFF#: 1111110x 10xxxxxx 10xxxxxx
!             --                               10xxxxxx 10xxxxxx 10xxxxxx
! 
!             elsif (U and 2#11111110#) = 2#1111110_0# then
!                W := U and 2#00000001#;
! 
!                for K in 1 .. 5 loop
!                   Get_UTF_Byte;
!                end loop;
! 
!                return UTF_32_Code (W);
  
              else
!                raise Constraint_Error;
              end if;
  
           when WCEM_Brackets =>
  
              if C /= '[' then
!                return Character'Pos (C);
              end if;
  
              if In_Char /= '"' then
*************** package body System.WCh_Cnv is
*** 182,196 ****
              B1 := 0;
              Get_Hex (In_Char);
              Get_Hex (In_Char);
              C1 := In_Char;
  
              if C1 /= '"' then
                 Get_Hex (C1);
                 Get_Hex (In_Char);
                 C1 := In_Char;
  
                 if C1 /= '"' then
!                   raise Constraint_Error;
                 end if;
              end if;
  
--- 222,254 ----
              B1 := 0;
              Get_Hex (In_Char);
              Get_Hex (In_Char);
+ 
              C1 := In_Char;
  
              if C1 /= '"' then
                 Get_Hex (C1);
                 Get_Hex (In_Char);
+ 
                 C1 := In_Char;
  
                 if C1 /= '"' then
!                   Get_Hex (C1);
!                   Get_Hex (In_Char);
! 
!                   C1 := In_Char;
! 
!                   if C1 /= '"' then
!                      Get_Hex (C1);
!                      Get_Hex (In_Char);
! 
!                      if B1 > Unsigned_32 (UTF_32_Code'Last) then
!                         raise Constraint_Error;
!                      end if;
! 
!                      if In_Char /= '"' then
!                         raise Constraint_Error;
!                      end if;
!                   end if;
                 end if;
              end if;
  
*************** package body System.WCh_Cnv is
*** 198,220 ****
                 raise Constraint_Error;
              end if;
  
!             return Wide_Character'Val (B1);
  
        end case;
!    end Char_Sequence_To_Wide_Char;
  
     --------------------------------
!    -- Wide_Char_To_Char_Sequence --
     --------------------------------
  
!    procedure Wide_Char_To_Char_Sequence
!      (WC : Wide_Character;
!       EM : WC_Encoding_Method)
     is
!       Val    : constant Natural := Wide_Character'Pos (WC);
!       Hexc   : constant array (0 .. 15) of Character := "0123456789ABCDEF";
        C1, C2 : Character;
!       U      : Unsigned_16;
  
     begin
        case EM is
--- 256,299 ----
                 raise Constraint_Error;
              end if;
  
!             return UTF_32_Code (B1);
  
        end case;
!    end Char_Sequence_To_UTF_32;
  
     --------------------------------
!    -- Char_Sequence_To_Wide_Char --
     --------------------------------
  
!    function Char_Sequence_To_Wide_Char
!      (C  : Character;
!       EM : System.WCh_Con.WC_Encoding_Method) return Wide_Character
     is
!       function Char_Sequence_To_UTF is new Char_Sequence_To_UTF_32 (In_Char);
! 
!       U : constant UTF_32_Code := Char_Sequence_To_UTF (C, EM);
! 
!    begin
!       if U > 16#FFFF# then
!          raise Constraint_Error;
!       else
!          return Wide_Character'Val (U);
!       end if;
!    end Char_Sequence_To_Wide_Char;
! 
!    -----------------------------
!    -- UTF_32_To_Char_Sequence --
!    -----------------------------
! 
!    procedure UTF_32_To_Char_Sequence
!      (Val : UTF_32_Code;
!       EM  : System.WCh_Con.WC_Encoding_Method)
!    is
!       Hexc : constant array (UTF_32_Code range 0 .. 15) of Character :=
!                "0123456789ABCDEF";
! 
        C1, C2 : Character;
!       U      : Unsigned_32;
  
     begin
        case EM is
*************** package body System.WCh_Cnv is
*** 222,243 ****
           when WCEM_Hex =>
              if Val < 256 then
                 Out_Char (Character'Val (Val));
! 
!             else
                 Out_Char (ASCII.ESC);
                 Out_Char (Hexc (Val / (16**3)));
                 Out_Char (Hexc ((Val / (16**2)) mod 16));
                 Out_Char (Hexc ((Val / 16) mod 16));
                 Out_Char (Hexc (Val mod 16));
              end if;
  
           when WCEM_Upper =>
              if Val < 128 then
                 Out_Char (Character'Val (Val));
! 
!             elsif Val < 16#8000# then
                 raise Constraint_Error;
- 
              else
                 Out_Char (Character'Val (Val / 256));
                 Out_Char (Character'Val (Val mod 256));
--- 301,321 ----
           when WCEM_Hex =>
              if Val < 256 then
                 Out_Char (Character'Val (Val));
!             elsif Val <= 16#FFFF# then
                 Out_Char (ASCII.ESC);
                 Out_Char (Hexc (Val / (16**3)));
                 Out_Char (Hexc ((Val / (16**2)) mod 16));
                 Out_Char (Hexc ((Val / 16) mod 16));
                 Out_Char (Hexc (Val mod 16));
+             else
+                raise Constraint_Error;
              end if;
  
           when WCEM_Upper =>
              if Val < 128 then
                 Out_Char (Character'Val (Val));
!             elsif Val < 16#8000# or else Val > 16#FFFF# then
                 raise Constraint_Error;
              else
                 Out_Char (Character'Val (Val / 256));
                 Out_Char (Character'Val (Val mod 256));
*************** package body System.WCh_Cnv is
*** 246,303 ****
           when WCEM_Shift_JIS =>
              if Val < 128 then
                 Out_Char (Character'Val (Val));
!             else
!                JIS_To_Shift_JIS (WC, C1, C2);
                 Out_Char (C1);
                 Out_Char (C2);
              end if;
  
           when WCEM_EUC =>
              if Val < 128 then
                 Out_Char (Character'Val (Val));
!             else
!                JIS_To_EUC (WC, C1, C2);
                 Out_Char (C1);
                 Out_Char (C2);
              end if;
  
           when WCEM_UTF8 =>
-             U := Unsigned_16 (Val);
  
!             --  16#0000#-16#007f#: 2#0xxxxxxx#
!             --  16#0080#-16#07ff#: 2#110xxxxx# 2#10xxxxxx#
!             --  16#0800#-16#ffff#: 2#1110xxxx# 2#10xxxxxx# 2#10xxxxxx#
  
!             if U < 16#80# then
                 Out_Char (Character'Val (U));
  
!             elsif U < 16#0800# then
                 Out_Char (Character'Val (2#11000000# or Shift_Right (U, 6)));
                 Out_Char (Character'Val (2#10000000# or (U and 2#00111111#)));
  
!             else
                 Out_Char (Character'Val (2#11100000# or Shift_Right (U, 12)));
                 Out_Char (Character'Val (2#10000000# or (Shift_Right (U, 6)
!                                                          and 2#00111111#)));
                 Out_Char (Character'Val (2#10000000# or (U and 2#00111111#)));
              end if;
  
           when WCEM_Brackets =>
- 
              if Val < 256 then
                 Out_Char (Character'Val (Val));
  
              else
                 Out_Char ('[');
                 Out_Char ('"');
!                Out_Char (Hexc (Val / (16**3)));
!                Out_Char (Hexc ((Val / (16**2)) mod 16));
                 Out_Char (Hexc ((Val / 16) mod 16));
                 Out_Char (Hexc (Val mod 16));
                 Out_Char ('"');
                 Out_Char (']');
              end if;
        end case;
     end Wide_Char_To_Char_Sequence;
  
  end System.WCh_Cnv;
--- 324,459 ----
           when WCEM_Shift_JIS =>
              if Val < 128 then
                 Out_Char (Character'Val (Val));
!             elsif Val <= 16#FFFF# then
!                JIS_To_Shift_JIS (Wide_Character'Val (Val), C1, C2);
                 Out_Char (C1);
                 Out_Char (C2);
+             else
+                raise Constraint_Error;
              end if;
  
           when WCEM_EUC =>
              if Val < 128 then
                 Out_Char (Character'Val (Val));
!             elsif Val <= 16#FFFF# then
!                JIS_To_EUC (Wide_Character'Val (Val), C1, C2);
                 Out_Char (C1);
                 Out_Char (C2);
+             else
+                raise Constraint_Error;
              end if;
  
           when WCEM_UTF8 =>
  
!             --  Note: for details of UTF8 encoding see RFC 3629
  
!             U := Unsigned_32 (Val);
! 
!             --  16#00_0000#-16#00_007F#: 0xxxxxxx
! 
!             if U <= 16#00_007F# then
                 Out_Char (Character'Val (U));
  
!             --  16#00_0080#-16#00_07FF#: 110xxxxx 10xxxxxx
! 
!             elsif U <= 16#00_07FF# then
                 Out_Char (Character'Val (2#11000000# or Shift_Right (U, 6)));
                 Out_Char (Character'Val (2#10000000# or (U and 2#00111111#)));
  
!             --  16#00_0800#-16#00_FFFF#: 1110xxxx 10xxxxxx 10xxxxxx
! 
!             elsif U <= 16#00_FFFF# then
                 Out_Char (Character'Val (2#11100000# or Shift_Right (U, 12)));
                 Out_Char (Character'Val (2#10000000# or (Shift_Right (U, 6)
!                                                           and 2#00111111#)));
!                Out_Char (Character'Val (2#10000000# or (U and 2#00111111#)));
! 
!             --  16#01_0000#-16#10_FFFF#: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
! 
!             elsif U <= 16#10_FFFF# then
!                Out_Char (Character'Val (2#11110000# or Shift_Right (U, 18)));
!                Out_Char (Character'Val (2#10000000# or (Shift_Right (U, 12)
!                                                           and 2#00111111#)));
!                Out_Char (Character'Val (2#10000000# or (Shift_Right (U, 6)
!                                                           and 2#00111111#)));
!                Out_Char (Character'Val (2#10000000# or (U and 2#00111111#)));
! 
!             --  16#0020_0000#-16#03FF_FFFF#: 111110xx 10xxxxxx 10xxxxxx
!             --                               10xxxxxx 10xxxxxx
! 
!             elsif U <= 16#03FF_FFFF# then
!                Out_Char (Character'Val (2#11111000# or Shift_Right (U, 24)));
!                Out_Char (Character'Val (2#10000000# or (Shift_Right (U, 18)
!                                                           and 2#00111111#)));
!                Out_Char (Character'Val (2#10000000# or (Shift_Right (U, 12)
!                                                           and 2#00111111#)));
!                Out_Char (Character'Val (2#10000000# or (Shift_Right (U, 6)
!                                                           and 2#00111111#)));
!                Out_Char (Character'Val (2#10000000# or (U and 2#00111111#)));
! 
!             --  16#0400_0000#-16#7FFF_FFFF#: 1111110x 10xxxxxx 10xxxxxx
!             --                               10xxxxxx 10xxxxxx 10xxxxxx
! 
!             elsif U <= 16#7FFF_FFFF# then
!                Out_Char (Character'Val (2#11111100# or Shift_Right (U, 30)));
!                Out_Char (Character'Val (2#10000000# or (Shift_Right (U, 24)
!                                                           and 2#00111111#)));
!                Out_Char (Character'Val (2#10000000# or (Shift_Right (U, 18)
!                                                           and 2#00111111#)));
!                Out_Char (Character'Val (2#10000000# or (Shift_Right (U, 12)
!                                                           and 2#00111111#)));
!                Out_Char (Character'Val (2#10000000# or (Shift_Right (U, 6)
!                                                           and 2#00111111#)));
                 Out_Char (Character'Val (2#10000000# or (U and 2#00111111#)));
+ 
+             else
+                raise Constraint_Error;
              end if;
  
           when WCEM_Brackets =>
              if Val < 256 then
                 Out_Char (Character'Val (Val));
  
              else
                 Out_Char ('[');
                 Out_Char ('"');
! 
!                if Val > 16#FFFF# then
!                   if Val > 16#00FF_FFFF# then
!                      if Val > 16#7FFF_FFFF# then
!                         raise Constraint_Error;
!                      end if;
! 
!                      Out_Char (Hexc (Val / 16 ** 7));
!                      Out_Char (Hexc ((Val / 16 ** 6) mod 16));
!                   end if;
! 
!                   Out_Char (Hexc ((Val / 16 ** 5) mod 16));
!                   Out_Char (Hexc ((Val / 16 ** 4) mod 16));
!                end if;
! 
!                Out_Char (Hexc ((Val / 16 ** 3) mod 16));
!                Out_Char (Hexc ((Val / 16 ** 2) mod 16));
                 Out_Char (Hexc ((Val / 16) mod 16));
                 Out_Char (Hexc (Val mod 16));
+ 
                 Out_Char ('"');
                 Out_Char (']');
              end if;
        end case;
+    end UTF_32_To_Char_Sequence;
+ 
+    --------------------------------
+    -- Wide_Char_To_Char_Sequence --
+    --------------------------------
+ 
+    procedure Wide_Char_To_Char_Sequence
+      (WC : Wide_Character;
+       EM : System.WCh_Con.WC_Encoding_Method)
+    is
+       procedure UTF_To_Char_Sequence is new UTF_32_To_Char_Sequence (Out_Char);
+    begin
+       UTF_To_Char_Sequence (Wide_Character'Pos (WC), EM);
     end Wide_Char_To_Char_Sequence;
  
  end System.WCh_Cnv;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-wchcnv.ads gcc-4.0.0/gcc/ada/s-wchcnv.ads
*** gcc-3.4.3/gcc/ada/s-wchcnv.ads	Tue Oct 21 13:42:18 2003
--- gcc-4.0.0/gcc/ada/s-wchcnv.ads	Thu Feb 10 13:50:39 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 1992-2003 Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 1992-2005 Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 31,54 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- --  This package contains generic subprograms used for converting between
- --  sequences of Character and Wide_Character. All access to wide character
- --  sequences is isolated in this unit.
- 
  --  This unit may be used directly from an application program by providing
  --  an appropriate WITH, and the interface can be expected to remain stable.
  
  with System.WCh_Con;
  
  package System.WCh_Cnv is
! pragma Pure (WCh_Cnv);
  
     generic
        with function In_Char return Character;
     function Char_Sequence_To_Wide_Char
!      (C    : Character;
!       EM   : System.WCh_Con.WC_Encoding_Method)
!       return Wide_Character;
     --  C is the first character of a sequence of one or more characters which
     --  represent a wide character sequence. Calling the function In_Char for
     --  additional characters as required, Char_To_Wide_Char returns the
--- 31,53 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
  --  This unit may be used directly from an application program by providing
  --  an appropriate WITH, and the interface can be expected to remain stable.
  
  with System.WCh_Con;
  
  package System.WCh_Cnv is
!    pragma Pure (WCh_Cnv);
! 
!    type UTF_32_Code is range 0 .. 16#7FFF_FFFF#;
!    for UTF_32_Code'Size use 32;
!    --  Range of allowed UTF-32 encoding values
  
     generic
        with function In_Char return Character;
     function Char_Sequence_To_Wide_Char
!      (C  : Character;
!       EM : System.WCh_Con.WC_Encoding_Method) return Wide_Character;
     --  C is the first character of a sequence of one or more characters which
     --  represent a wide character sequence. Calling the function In_Char for
     --  additional characters as required, Char_To_Wide_Char returns the
*************** pragma Pure (WCh_Cnv);
*** 57,62 ****
--- 56,71 ----
     --  sequence for the given encoding method.
  
     generic
+       with function In_Char return Character;
+    function Char_Sequence_To_UTF_32
+      (C  : Character;
+       EM : System.WCh_Con.WC_Encoding_Method) return UTF_32_Code;
+    --  This is similar to the above, but the function returns a code from
+    --  the full UTF_32 code set, which covers the full range of possible
+    --  values in Wide_Wide_Character. The result can be converted to
+    --  Wide_Wide_Character form using Wide_Wide_Character'Val.
+ 
+    generic
        with procedure Out_Char (C : Character);
     procedure Wide_Char_To_Char_Sequence
       (WC : Wide_Character;
*************** pragma Pure (WCh_Cnv);
*** 66,69 ****
--- 75,88 ----
     --  Constraint_Error is raised if the given wide character value is
     --  not a valid value for the given encoding method.
  
+    generic
+       with procedure Out_Char (C : Character);
+    procedure UTF_32_To_Char_Sequence
+      (Val : UTF_32_Code;
+       EM  : System.WCh_Con.WC_Encoding_Method);
+    --  This is similar to the above, but the input value is a code from the
+    --  full UTF_32 code set, which covers the full range of possible values
+    --  in Wide_Wide_Character. To convert a Wide_Wide_Character value, the
+    --  caller can use Wide_Wide_Character'Pos in the call.
+ 
  end System.WCh_Cnv;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-wchcon.ads gcc-4.0.0/gcc/ada/s-wchcon.ads
*** gcc-3.4.3/gcc/ada/s-wchcon.ads	Tue Oct 21 13:42:18 2003
--- gcc-4.0.0/gcc/ada/s-wchcon.ads	Thu Feb 10 13:50:39 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** pragma Pure (WCh_Con);
*** 46,53 ****
     -------------------------------------
  
     --  A wide character encoding method is a method for uniquely representing
!    --  a Wide_Character value using a one or more Character values. Three
!    --  types of encoding method are supported by GNAT:
  
     --    An escape encoding method uses ESC as the first character of the
     --    sequence, and subsequent characters determine the wide character
--- 46,53 ----
     -------------------------------------
  
     --  A wide character encoding method is a method for uniquely representing
!    --  a Wide_Character or Wide_Wide_Character value using a one or more
!    --  Character values. Three types of encoding method are supported by GNAT:
  
     --    An escape encoding method uses ESC as the first character of the
     --    sequence, and subsequent characters determine the wide character
*************** pragma Pure (WCh_Con);
*** 62,70 ****
     --    Any character in the lower half (16#00# .. 16#7F#) represents
     --    itself as a single character.
  
!    --    The brackets notation, where a wide character is represented
!    --    by the sequence ["xx"] or ["xxxx"] where xx are hexadecimal
!    --    characters.
  
     --  Note that GNAT does not currently support escape-in, escape-out
     --  encoding methods, where an escape sequence is used to set a mode
--- 62,71 ----
     --    Any character in the lower half (16#00# .. 16#7F#) represents
     --    itself as a single character.
  
!    --    The brackets notation, where a wide character is represented by the
!    --    sequence ["xx"] or ["xxxx"] or ["xxxxxx"] where xx are hexadecimal
!    --    characters. Note that currently this is the only encoding that
!    --    supports the full UTF-32 range.
  
     --  Note that GNAT does not currently support escape-in, escape-out
     --  encoding methods, where an escape sequence is used to set a mode
*************** pragma Pure (WCh_Con);
*** 130,154 ****
     --  An ISO 10646-1 BMP/Unicode wide character is represented in
     --  UCS Transformation Format 8 (UTF-8) as defined in Annex R of ISO
     --  10646-1/Am.2.  Depending on the character value, a Unicode character
!    --  is represented as the one, two, or three byte sequence
     --
!    --    16#0000#-16#007f#: 2#0xxxxxxx#
!    --    16#0080#-16#07ff#: 2#110xxxxx# 2#10xxxxxx#
!    --    16#0800#-16#ffff#: 2#1110xxxx# 2#10xxxxxx# 2#10xxxxxx#
     --
!    --  where the xxx bits correspond to the left-padded bits of the the
     --  16-bit character value. Note that all lower half ASCII characters
     --  are represented as ASCII bytes and all upper half characters and
!    --  other wide characters are represented as sequences of upper-half
!    --  (The full UTF-8 scheme allows for encoding 31-bit characters as
!    --  6-byte sequences, but in this implementation, all UTF-8 sequences
!    --  of four or more bytes length will raise a Constraint_Error, as
!    --  will all illegal UTF-8 sequences.)
  
     WCEM_Brackets : constant WC_Encoding_Method := 6;
!    --  A wide character is represented as the sequence ["abcd"] where abcd
!    --  are four hexadecimal characters. In this mode, the sequence ["ab"]
!    --  is also recognized for the case of character codes in the range 0-255.
  
     WC_Encoding_Letters : constant array (WC_Encoding_Method) of Character :=
       (WCEM_Hex       => 'h',
--- 131,162 ----
     --  An ISO 10646-1 BMP/Unicode wide character is represented in
     --  UCS Transformation Format 8 (UTF-8) as defined in Annex R of ISO
     --  10646-1/Am.2.  Depending on the character value, a Unicode character
!    --  is represented as the one to six byte sequence.
     --
!    --    16#0000_0000#-16#0000_007f#: 2#0xxxxxxx#
!    --    16#0000_0080#-16#0000_07ff#: 2#110xxxxx# 2#10xxxxxx#
!    --    16#0000_0800#-16#0000_ffff#: 2#1110xxxx# 2#10xxxxxx# 2#10xxxxxx#
!    --    16#0001_0000#-16#001F_FFFF#: 2#11110xxx# 2#10xxxxxx# 2#10xxxxxx#
!    --                                 2#10xxxxxx#
!    --    16#0020_0000#-16#03FF_FFFF#: 2#111110xx# 2#10xxxxxx# 2#10xxxxxx#
!    --                                 2#10xxxxxx# 2#10xxxxxx#
!    --    16#0400_0000#-16#7FFF_FFFF#: 2#1111110x# 2#10xxxxxx# 2#10xxxxxx#
!    --                                 2#10xxxxxx# 2#10xxxxxx# 2#10xxxxxx#
     --
!    --  where the xxx bits correspond to the left-padded bits of the
     --  16-bit character value. Note that all lower half ASCII characters
     --  are represented as ASCII bytes and all upper half characters and
!    --  other wide characters are represented as sequences of upper-half.
  
     WCEM_Brackets : constant WC_Encoding_Method := 6;
!    --  A wide character is represented using one of the following sequences:
!    --
!    --    ["xx"]
!    --    ["xxxx"]
!    --    ["xxxxxx"]
!    --    ["xxxxxxxx"]
!    --
!    --  where xx are hexadecimal digits representing the character code.
  
     WC_Encoding_Letters : constant array (WC_Encoding_Method) of Character :=
       (WCEM_Hex       => 'h',
*************** pragma Pure (WCh_Con);
*** 170,177 ****
     --  Encoding methods using an upper half character (16#80#..16#FF) at
     --  the start of the sequence.
  
!    WC_Longest_Sequence : constant := 8;
!    --  The longest number of characters that can be used for a wide
!    --  character sequence for any of the active encoding methods.
  
  end System.WCh_Con;
--- 178,185 ----
     --  Encoding methods using an upper half character (16#80#..16#FF) at
     --  the start of the sequence.
  
!    WC_Longest_Sequence : constant := 10;
!    --  The longest number of characters that can be used for a wide character
!    --  or wide wide character sequence for any of the active encoding methods.
  
  end System.WCh_Con;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-wchstw.adb gcc-4.0.0/gcc/ada/s-wchstw.adb
*** gcc-3.4.3/gcc/ada/s-wchstw.adb	Thu Apr 24 17:54:15 2003
--- gcc-4.0.0/gcc/ada/s-wchstw.adb	Thu Feb 10 13:50:23 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2000 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 31,219 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- with Interfaces;     use Interfaces;
  with System.WCh_Con; use System.WCh_Con;
! with System.WCh_JIS; use System.WCh_JIS;
  
  package body System.WCh_StW is
  
!    ---------------------------
!    -- String_To_Wide_String --
!    ---------------------------
  
!    function String_To_Wide_String
!      (S    : String;
!       EM   : WC_Encoding_Method)
!       return Wide_String
!    is
!       R  : Wide_String (1 .. S'Length);
!       RP : Natural;
!       SP : Natural;
!       U1 : Unsigned_16;
!       U2 : Unsigned_16;
!       U3 : Unsigned_16;
!       U  : Unsigned_16;
  
!       Last : constant Natural := S'Last;
  
!       function Get_Hex (C : Character) return Unsigned_16;
!       --  Converts character from hex digit to value in range 0-15. The
!       --  input must be in 0-9, A-F, or a-f, and no check is needed.
  
!       procedure Get_Hex_4;
!       --  Translates four hex characters starting at S (SP) to a single
!       --  wide character. Used in WCEM_Hex and WCEM_Brackets mode. SP
!       --  is not modified by the call. The resulting wide character value
!       --  is stored in R (RP). RP is not modified by the call.
  
!       function Get_Hex (C : Character) return Unsigned_16 is
        begin
!          if C in '0' .. '9' then
!             return Character'Pos (C) - Character'Pos ('0');
!          elsif C in 'A' .. 'F' then
!             return Character'Pos (C) - Character'Pos ('A') + 10;
           else
!             return Character'Pos (C) - Character'Pos ('a') + 10;
           end if;
!       end Get_Hex;
! 
!       procedure Get_Hex_4 is
!       begin
!          R (RP) := Wide_Character'Val (
!             Get_Hex (S (SP + 3)) + 16 *
!               (Get_Hex (S (SP + 2)) + 16 *
!                 (Get_Hex (S (SP + 1)) + 16 *
!                   (Get_Hex (S (SP + 0))))));
!       end Get_Hex_4;
! 
!    --  Start of processing for String_To_Wide_String
  
     begin
!       SP := S'First;
!       RP := 0;
  
        case EM is
- 
-          --  ESC-Hex representation
- 
           when WCEM_Hex =>
!             while SP <= Last - 4 loop
!                RP := RP + 1;
! 
!                if S (SP) = ASCII.ESC then
!                   SP := SP + 1;
!                   Get_Hex_4;
!                   SP := SP + 4;
!                else
!                   R (RP) := Wide_Character'Val (Character'Pos (S (SP)));
!                   SP := SP + 1;
!                end if;
!             end loop;
! 
!          --  Upper bit shift, internal code = external code
! 
!          when WCEM_Upper =>
!             while SP < Last loop
!                RP := RP + 1;
! 
!                if S (SP) >= Character'Val (16#80#) then
!                   U1 := Character'Pos (S (SP));
!                   U2 := Character'Pos (S (SP + 1));
!                   R (RP) := Wide_Character'Val (256 * U1 + U2);
!                   SP := SP + 2;
!                else
!                   R (RP) := Wide_Character'Val (Character'Pos (S (SP)));
!                   SP := SP + 1;
!                end if;
!             end loop;
! 
!          --  Upper bit shift, shift-JIS
! 
!          when WCEM_Shift_JIS =>
!             while SP < Last loop
!                RP := RP + 1;
! 
!                if S (SP) >= Character'Val (16#80#) then
!                   R (RP) := Shift_JIS_To_JIS (S (SP), S (SP + 1));
!                   SP := SP + 2;
!                else
!                   R (RP) := Wide_Character'Val (Character'Pos (S (SP)));
!                   SP := SP + 1;
!                end if;
!             end loop;
! 
!          --  Upper bit shift, EUC
! 
!          when WCEM_EUC =>
!             while SP < Last loop
!                RP := RP + 1;
! 
!                if S (SP) >= Character'Val (16#80#) then
!                   R (RP) := EUC_To_JIS (S (SP), S (SP + 1));
!                   SP := SP + 2;
!                else
!                   R (RP) := Wide_Character'Val (Character'Pos (S (SP)));
!                   SP := SP + 1;
!                end if;
!             end loop;
  
!          --  Upper bit shift, UTF-8
  
!          when WCEM_UTF8 =>
!             while SP < Last loop
!                RP := RP + 1;
  
!                if S (SP) >= Character'Val (16#80#) then
!                   U1 := Character'Pos (S (SP));
!                   U2 := Character'Pos (S (SP + 1));
  
!                   U := Shift_Left (U1 and 2#00011111#, 6) +
!                          (U2 and 2#00111111#);
!                   SP := SP + 2;
  
!                   if U1 >= 2#11100000# then
!                      U3 := Character'Pos (S (SP));
!                      U := Shift_Left (U, 6) + (U3 and 2#00111111#);
!                      SP := SP + 1;
!                   end if;
  
!                   R (RP) := Wide_Character'Val (U);
  
!                else
!                   R (RP) := Wide_Character'Val (Character'Pos (S (SP)));
!                   SP := SP + 1;
!                end if;
!             end loop;
  
!          --  Brackets representation
  
!          when WCEM_Brackets =>
!             while SP <= Last - 7 loop
!                RP := RP + 1;
  
!                if S (SP) = '['
!                  and then S (SP + 1) = '"'
!                  and then S (SP + 2) /= '"'
!                then
!                   SP := SP + 2;
!                   Get_Hex_4;
!                   SP := SP + 6;
  
!                else
!                   R (RP) := Wide_Character'Val (Character'Pos (S (SP)));
!                   SP := SP + 1;
!                end if;
!             end loop;
  
!       end case;
  
!       while SP <= Last loop
           RP := RP + 1;
!          R (RP) := Wide_Character'Val (Character'Pos (S (SP)));
!          SP := SP + 1;
        end loop;
  
        return R (1 .. RP);
!    end String_To_Wide_String;
  
  end System.WCh_StW;
--- 31,172 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
  with System.WCh_Con; use System.WCh_Con;
! with System.WCh_Cnv; use System.WCh_Cnv;
  
  package body System.WCh_StW is
  
!    -----------------------
!    -- Local Subprograms --
!    -----------------------
  
!    procedure Get_Next_Code
!      (S  : String;
!       P  : in out Natural;
!       V  : out UTF_32_Code;
!       EM : WC_Encoding_Method);
!    --  Scans next character starting at S(P) and returns its value in V. On
!    --  exit P is updated past the last character read. Raises Constraint_Error
!    --  if the string is not well formed. Raises Constraint_Error if the code
!    --  value is greater than 16#7FFF_FFFF#. On entry P <= S'Last.
  
!    -------------------
!    -- Get_Next_Code --
!    -------------------
  
!    procedure Get_Next_Code
!      (S  : String;
!       P  : in out Natural;
!       V  : out UTF_32_Code;
!       EM : WC_Encoding_Method)
!    is
!       function In_Char return Character;
!       --  Function to return a character, bumping P, raises Constraint_Error
!       --  if P > S'Last on entry.
  
!       function Get_UTF_32 is new Char_Sequence_To_UTF_32 (In_Char);
!       --  Function to get next UFT_32 value.
  
!       -------------
!       -- In_Char --
!       -------------
! 
!       function In_Char return Character is
        begin
!          if P > S'Last then
!             raise Constraint_Error;
           else
!             P := P + 1;
!             return S (P - 1);
           end if;
!       end In_Char;
  
     begin
!       --  Check for wide character encoding
  
        case EM is
           when WCEM_Hex =>
!             if S (P) = ASCII.ESC then
!                V := Get_UTF_32 (In_Char, EM);
!                return;
!             end if;
  
!          when WCEM_Upper | WCEM_Shift_JIS | WCEM_EUC | WCEM_UTF8 =>
!             if S (P) >= Character'Val (16#80#) then
!                V := Get_UTF_32 (In_Char, EM);
!                return;
!             end if;
  
!          when WCEM_Brackets =>
!             if P + 2 <= S'Last
!               and then S (P) = '['
!               and then S (P + 1) = '"'
!               and then S (P + 2) /= '"'
!             then
!                V := Get_UTF_32 (In_Char, EM);
!                return;
!             end if;
!       end case;
  
!       --  If it is not a wide character code, just get it
  
!       V := Character'Pos (S (P));
!       P := P + 1;
!    end Get_Next_Code;
  
!    ---------------------------
!    -- String_To_Wide_String --
!    ---------------------------
  
!    function String_To_Wide_String
!      (S  : String;
!       EM : WC_Encoding_Method) return Wide_String
!    is
!       R  : Wide_String (1 .. S'Length);
!       RP : Natural;
!       SP : Natural;
!       V  : UTF_32_Code;
  
!    begin
!       SP := S'First;
!       RP := 0;
!       while SP <= S'Last loop
!          Get_Next_Code (S, SP, V, EM);
  
!          if V > 16#FFFF# then
!             raise Constraint_Error;
!          end if;
  
!          RP := RP + 1;
!          R (RP) := Wide_Character'Val (V);
!       end loop;
  
!       return R (1 .. RP);
!    end String_To_Wide_String;
  
!    --------------------------------
!    -- String_To_Wide_Wide_String --
!    --------------------------------
  
!    function String_To_Wide_Wide_String
!      (S  : String;
!       EM : WC_Encoding_Method) return Wide_Wide_String
!    is
!       R  : Wide_Wide_String (1 .. S'Length);
!       RP : Natural;
!       SP : Natural;
!       V  : UTF_32_Code;
  
!    begin
!       SP := S'First;
!       RP := 0;
!       while SP <= S'Last loop
!          Get_Next_Code (S, SP, V, EM);
           RP := RP + 1;
!          R (RP) := Wide_Wide_Character'Val (V);
        end loop;
  
        return R (1 .. RP);
!    end String_To_Wide_Wide_String;
  
  end System.WCh_StW;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-wchstw.ads gcc-4.0.0/gcc/ada/s-wchstw.ads
*** gcc-3.4.3/gcc/ada/s-wchstw.ads	Thu Apr 24 17:54:15 2003
--- gcc-4.0.0/gcc/ada/s-wchstw.ads	Thu Feb 10 13:50:23 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-1998 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 31,38 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This package contains the routine used to convert strings to wide
! --  strings for use by wide character attributes (value, image etc.)
  
  with System.WCh_Con;
  
--- 31,38 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This package contains the routine used to convert strings to wide (wide)
! --  strings for use by wide (wide) character attributes (value, image etc.)
  
  with System.WCh_Con;
  
*************** package System.WCh_StW is
*** 40,48 ****
  pragma Pure (WCh_StW);
  
     function String_To_Wide_String
!      (S    : String;
!       EM   : System.WCh_Con.WC_Encoding_Method)
!       return Wide_String;
     --  This routine simply takes its argument and converts it to wide string
     --  format. In the context of the Wide_Image attribute, the argument is
     --  the corresponding 'Image attribute. Any wide character escape sequences
--- 40,47 ----
  pragma Pure (WCh_StW);
  
     function String_To_Wide_String
!      (S  : String;
!       EM : System.WCh_Con.WC_Encoding_Method) return Wide_String;
     --  This routine simply takes its argument and converts it to wide string
     --  format. In the context of the Wide_Image attribute, the argument is
     --  the corresponding 'Image attribute. Any wide character escape sequences
*************** pragma Pure (WCh_StW);
*** 57,60 ****
--- 56,64 ----
     --  Note: in the WCEM_Brackets case, the brackets escape sequence is used
     --  only for codes greater than 16#FF#.
  
+    function String_To_Wide_Wide_String
+      (S  : String;
+       EM : System.WCh_Con.WC_Encoding_Method) return Wide_Wide_String;
+    --  Same function with Wide_Wide_String output
+ 
  end System.WCh_StW;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-wchwts.adb gcc-4.0.0/gcc/ada/s-wchwts.adb
*** gcc-3.4.3/gcc/ada/s-wchwts.adb	Thu Apr 24 17:54:15 2003
--- gcc-4.0.0/gcc/ada/s-wchwts.adb	Thu Feb 10 13:50:23 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2000 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 31,163 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- with Interfaces;     use Interfaces;
  with System.WCh_Con; use System.WCh_Con;
! with System.WCh_JIS; use System.WCh_JIS;
  
  package body System.WCh_WtS is
  
     ---------------------------
     -- Wide_String_To_String --
     ---------------------------
  
     function Wide_String_To_String
!      (S    : Wide_String;
!       EM   : WC_Encoding_Method)
!       return String
     is
        R  : String (1 .. 5 * S'Length); -- worst case length!
        RP : Natural;
-       C1 : Character;
-       C2 : Character;
  
     begin
        RP := 0;
- 
        for SP in S'Range loop
!          declare
!             C   : constant Wide_Character := S (SP);
!             CV  : constant Unsigned_16    := Wide_Character'Pos (C);
!             Hex : constant array (Unsigned_16 range 0 .. 15) of Character :=
!                     "0123456789ABCDEF";
! 
!          begin
!             if CV <= 127 then
!                RP := RP + 1;
!                R (RP) := Character'Val (CV);
! 
!             else
!                case EM is
! 
!                   --  Hex ESC sequence encoding
! 
!                   when WCEM_Hex =>
!                      if CV <= 16#FF# then
!                         RP := RP + 1;
!                         R (RP) := Character'Val (CV);
! 
!                      else
!                         R (RP + 1) := ASCII.ESC;
!                         R (RP + 2) := Hex (Shift_Right (CV, 12));
!                         R (RP + 3) := Hex (Shift_Right (CV, 8)  and 16#000F#);
!                         R (RP + 4) := Hex (Shift_Right (CV, 4)  and 16#000F#);
!                         R (RP + 5) := Hex (CV                   and 16#000F#);
!                         RP := RP + 5;
!                      end if;
! 
!                   --  Upper bit shift (internal code = external code)
! 
!                   when WCEM_Upper =>
!                      R (RP + 1) := Character'Val (Shift_Right (CV, 8));
!                      R (RP + 2) := Character'Val (CV and 16#FF#);
!                      RP := RP + 2;
! 
!                   --  Upper bit shift (EUC)
! 
!                   when WCEM_EUC =>
!                      JIS_To_EUC (C, C1, C2);
!                      R (RP + 1) := C1;
!                      R (RP + 2) := C2;
!                      RP := RP + 2;
! 
!                   --  Upper bit shift (Shift-JIS)
! 
!                   when WCEM_Shift_JIS =>
!                      JIS_To_Shift_JIS (C, C1, C2);
!                      R (RP + 1) := C1;
!                      R (RP + 2) := C2;
!                      RP := RP + 2;
! 
!                   --  Upper bit shift (UTF-8)
! 
!                   --    16#0080#-16#07ff#: 2#110xxxxx# 2#10xxxxxx#
!                   --    16#0800#-16#ffff#: 2#1110xxxx# 2#10xxxxxx# 2#10xxxxxx#
! 
!                   when WCEM_UTF8 =>
!                      if CV < 16#0800# then
!                         R (RP + 1) :=
!                           Character'Val (2#11000000# or Shift_Right (CV, 6));
!                         R (RP + 2) :=
!                           Character'Val (2#10000000# or (CV and 2#00111111#));
!                         RP := RP + 2;
  
!                      else
!                         R (RP + 1) :=
!                           Character'Val (2#11100000# or Shift_Right (CV, 12));
!                         R (RP + 2) :=
!                           Character'Val (2#10000000# or
!                                           (Shift_Right (CV, 6) and
!                                                                2#00111111#));
!                         R (RP + 3) :=
!                           Character'Val (2#10000000# or (CV and 2#00111111#));
!                         RP := RP + 3;
!                      end if;
  
!                   --  Brackets encoding
  
!                   when WCEM_Brackets =>
!                      if CV <= 16#FF# then
!                         RP := RP + 1;
!                         R (RP) := Character'Val (CV);
  
!                      else
!                         R (RP + 1) := '[';
!                         R (RP + 2) := '"';
!                         R (RP + 3) := Hex (Shift_Right (CV, 12));
!                         R (RP + 4) := Hex (Shift_Right (CV, 8)  and 16#000F#);
!                         R (RP + 5) := Hex (Shift_Right (CV, 4)  and 16#000F#);
!                         R (RP + 6) := Hex (CV                   and 16#000F#);
!                         R (RP + 7) := '"';
!                         R (RP + 8) := ']';
!                         RP := RP + 8;
!                      end if;
  
!                end case;
!             end if;
!          end;
        end loop;
  
        return R (1 .. RP);
!    end Wide_String_To_String;
  
  end System.WCh_WtS;
--- 31,124 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
  with System.WCh_Con; use System.WCh_Con;
! with System.WCh_Cnv; use System.WCh_Cnv;
  
  package body System.WCh_WtS is
  
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    procedure Store_UTF_32_Character
+      (U  : UTF_32_Code;
+       S  : out String;
+       P  : in out Integer;
+       EM : WC_Encoding_Method);
+    --  Stores the string representation of the wide or wide wide character
+    --  whose code is given as U, starting at S (P + 1). P is incremented to
+    --  point to the last character stored. Raises CE if character cannot be
+    --  stored using the given encoding method.
+ 
+    ----------------------------
+    -- Store_UTF_32_Character --
+    ----------------------------
+ 
+    procedure Store_UTF_32_Character
+      (U  : UTF_32_Code;
+       S  : out String;
+       P  : in out Integer;
+       EM : WC_Encoding_Method)
+    is
+       procedure Out_Char (C : Character);
+       pragma Inline (Out_Char);
+       --  Procedure to increment P and store C at S (P)
+ 
+       procedure Store_Chars is new UTF_32_To_Char_Sequence (Out_Char);
+ 
+       --------------
+       -- Out_Char --
+       --------------
+ 
+       procedure Out_Char (C : Character) is
+       begin
+          P := P + 1;
+          S (P) := C;
+       end Out_Char;
+ 
+    begin
+       Store_Chars (U, EM);
+    end Store_UTF_32_Character;
+ 
     ---------------------------
     -- Wide_String_To_String --
     ---------------------------
  
     function Wide_String_To_String
!      (S  : Wide_String;
!       EM : WC_Encoding_Method) return String
     is
        R  : String (1 .. 5 * S'Length); -- worst case length!
        RP : Natural;
  
     begin
        RP := 0;
        for SP in S'Range loop
!          Store_UTF_32_Character (Wide_Character'Pos (S (SP)), R, RP, EM);
!       end loop;
  
!       return R (1 .. RP);
!    end Wide_String_To_String;
  
!    --------------------------------
!    -- Wide_Wide_Sring_To_String --
!    --------------------------------
  
!    function Wide_Wide_String_To_String
!      (S  : Wide_Wide_String;
!       EM : WC_Encoding_Method) return String
!    is
!       R  : String (1 .. 7 * S'Length); -- worst case length!
!       RP : Natural;
  
!    begin
!       RP := 0;
  
!       for SP in S'Range loop
!          Store_UTF_32_Character (Wide_Wide_Character'Pos (S (SP)), R, RP, EM);
        end loop;
  
        return R (1 .. RP);
!    end Wide_Wide_String_To_String;
  
  end System.WCh_WtS;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-wchwts.ads gcc-4.0.0/gcc/ada/s-wchwts.ads
*** gcc-3.4.3/gcc/ada/s-wchwts.ads	Thu Apr 24 17:54:15 2003
--- gcc-4.0.0/gcc/ada/s-wchwts.ads	Thu Feb 10 13:50:23 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-1998 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 31,39 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This package contains the routine used to convert wide strings to
! --  strings for use by wide character attributes (value, image etc.) and
! --  also by the numeric IO subpackages of Ada.Text_IO.Wide_Text_IO.
  
  with System.WCh_Con;
  
--- 31,40 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This package contains the routine used to convert wide strings and wide
! --  wide stringsto strings for use by wide and wide wide character attributes
! --  (value, image etc.) and also by the numeric IO subpackages of
! --  Ada.Text_IO.Wide_Text_IO and Ada.Text_IO.Wide_Wide_Text_IO.
  
  with System.WCh_Con;
  
*************** package System.WCh_WtS is
*** 41,49 ****
  pragma Pure (WCh_WtS);
  
     function Wide_String_To_String
!      (S    : Wide_String;
!       EM   : System.WCh_Con.WC_Encoding_Method)
!       return String;
     --  This routine simply takes its argument and converts it to a string,
     --  using the internal compiler escape sequence convention (defined in
     --  package Widechar) to translate characters that are out of range
--- 42,49 ----
  pragma Pure (WCh_WtS);
  
     function Wide_String_To_String
!      (S  : Wide_String;
!       EM : System.WCh_Con.WC_Encoding_Method) return String;
     --  This routine simply takes its argument and converts it to a string,
     --  using the internal compiler escape sequence convention (defined in
     --  package Widechar) to translate characters that are out of range
*************** pragma Pure (WCh_WtS);
*** 56,59 ****
--- 56,64 ----
     --  Note: in the WCEM_Brackets case, we only use the brackets encoding
     --  for characters greater than 16#FF#.
  
+    function Wide_Wide_String_To_String
+      (S  : Wide_Wide_String;
+       EM : System.WCh_Con.WC_Encoding_Method) return String;
+    --  Same processing, except for Wide_Wide_String
+ 
  end System.WCh_WtS;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-widwch.adb gcc-4.0.0/gcc/ada/s-widwch.adb
*** gcc-3.4.3/gcc/ada/s-widwch.adb	Thu Apr 24 17:54:15 2003
--- gcc-4.0.0/gcc/ada/s-widwch.adb	Thu Feb 10 13:50:23 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-1998 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body System.Wid_WChar is
*** 41,55 ****
  
     function Width_Wide_Character
       (Lo, Hi : Wide_Character;
!       EM     : WC_Encoding_Method)
!       return   Natural
     is
        W : Natural;
        P : Natural;
  
     begin
        W := 0;
- 
        for C in Lo .. Hi loop
           P := Wide_Character'Pos (C);
  
--- 41,53 ----
  
     function Width_Wide_Character
       (Lo, Hi : Wide_Character;
!       EM     : WC_Encoding_Method) return Natural
     is
        W : Natural;
        P : Natural;
  
     begin
        W := 0;
        for C in Lo .. Hi loop
           P := Wide_Character'Pos (C);
  
*************** package body System.Wid_WChar is
*** 97,100 ****
--- 95,158 ----
        return W;
     end Width_Wide_Character;
  
+    -------------------------------
+    -- Width_Wide_Wide_Character --
+    -------------------------------
+ 
+    function Width_Wide_Wide_Character
+      (Lo, Hi : Wide_Wide_Character;
+       EM     : WC_Encoding_Method) return Natural
+    is
+       W : Natural;
+       P : Natural;
+ 
+    begin
+       W := 0;
+       for C in Lo .. Hi loop
+          P := Wide_Wide_Character'Pos (C);
+ 
+          --  Here if we find a character in wide wide character range
+ 
+          if P > 16#FF# then
+             case EM is
+                when WCEM_Hex =>
+                   return Natural'Max (W, 5);
+ 
+                when WCEM_Upper =>
+                   return Natural'Max (W, 2);
+ 
+                when WCEM_Shift_JIS =>
+                   return Natural'Max (W, 2);
+ 
+                when WCEM_EUC =>
+                   return Natural'Max (W, 2);
+ 
+                when WCEM_UTF8 =>
+                   if Hi > Wide_Wide_Character'Val (16#FFFF#) then
+                      return Natural'Max (W, 4);
+                   elsif Hi > Wide_Wide_Character'Val (16#07FF#) then
+                      return Natural'Max (W, 3);
+                   else
+                      return Natural'Max (W, 2);
+                   end if;
+ 
+                when WCEM_Brackets =>
+                   return Natural'Max (W, 10);
+ 
+             end case;
+ 
+          --  If we are in character range then use length of character image
+ 
+          else
+             declare
+                S : constant String := Character'Image (Character'Val (P));
+             begin
+                W := Natural'Max (W, S'Length);
+             end;
+          end if;
+       end loop;
+ 
+       return W;
+    end Width_Wide_Wide_Character;
+ 
  end System.Wid_WChar;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-widwch.ads gcc-4.0.0/gcc/ada/s-widwch.ads
*** gcc-3.4.3/gcc/ada/s-widwch.ads	Thu Apr 24 17:54:15 2003
--- gcc-4.0.0/gcc/ada/s-widwch.ads	Thu Feb 10 13:50:23 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --        Copyright (C) 1992,1993,1994 Free Software Foundation, Inc.       --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 31,37 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This package contains the routine used for Wide_Character'Width
  
  with System.WCh_Con;
  
--- 31,37 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This package contains the routines used for Wide_[Wide_]Character'Width
  
  with System.WCh_Con;
  
*************** pragma Pure (Wid_WChar);
*** 40,49 ****
  
     function Width_Wide_Character
       (Lo, Hi : Wide_Character;
!       EM     : System.WCh_Con.WC_Encoding_Method)
!       return   Natural;
     --  Compute Width attribute for non-static type derived from Wide_Character.
     --  The arguments are the low and high bounds for the type. EM is the
     --  wide-character encoding method.
  
  end System.Wid_WChar;
--- 40,53 ----
  
     function Width_Wide_Character
       (Lo, Hi : Wide_Character;
!       EM     : System.WCh_Con.WC_Encoding_Method) return Natural;
     --  Compute Width attribute for non-static type derived from Wide_Character.
     --  The arguments are the low and high bounds for the type. EM is the
     --  wide-character encoding method.
  
+    function Width_Wide_Wide_Character
+      (Lo, Hi : Wide_Wide_Character;
+       EM     : System.WCh_Con.WC_Encoding_Method) return Natural;
+    --  Same function for type derived from Wide_Wide_Character
+ 
  end System.Wid_WChar;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-wwdcha.adb gcc-4.0.0/gcc/ada/s-wwdcha.adb
*** gcc-3.4.3/gcc/ada/s-wwdcha.adb	Tue Oct 21 13:42:18 2003
--- gcc-4.0.0/gcc/ada/s-wwdcha.adb	Thu Feb 10 13:50:23 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body System.WWd_Char is
*** 42,52 ****
  
     begin
        W := 0;
- 
        for C in Lo .. Hi loop
           declare
              S : constant Wide_String := Character'Wide_Image (C);
- 
           begin
              W := Natural'Max (W, S'Length);
           end;
--- 42,50 ----
*************** package body System.WWd_Char is
*** 55,58 ****
--- 53,76 ----
        return W;
     end Wide_Width_Character;
  
+    -------------------------------
+    -- Wide_Wide_Width_Character --
+    -------------------------------
+ 
+    function Wide_Wide_Width_Character (Lo, Hi : Character) return Natural is
+       W : Natural;
+ 
+    begin
+       W := 0;
+       for C in Lo .. Hi loop
+          declare
+             S : constant Wide_Wide_String := Character'Wide_Wide_Image (C);
+          begin
+             W := Natural'Max (W, S'Length);
+          end;
+       end loop;
+ 
+       return W;
+    end Wide_Wide_Width_Character;
+ 
  end System.WWd_Char;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-wwdcha.ads gcc-4.0.0/gcc/ada/s-wwdcha.ads
*** gcc-3.4.3/gcc/ada/s-wwdcha.ads	Thu Apr 24 17:54:15 2003
--- gcc-4.0.0/gcc/ada/s-wwdcha.ads	Thu Feb 10 13:50:23 2005
***************
*** 6,13 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --        Copyright (C) 1992,1993,1994 Free Software Foundation, Inc.       --
! --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
  -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
--- 6,13 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
! --                                                                           --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
  -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
***************
*** 31,37 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This package contains the routine used for Character'Wide_Width
  
  package System.WWd_Char is
  pragma Pure (WWd_Char);
--- 31,37 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This package contains the routine used for Character'Wide_[Wide_]Width
  
  package System.WWd_Char is
  pragma Pure (WWd_Char);
*************** pragma Pure (WWd_Char);
*** 40,43 ****
--- 40,47 ----
     --  Compute Wide_Width attribute for non-static type derived from
     --  Character. The arguments are the low and high bounds for the type.
  
+    function Wide_Wide_Width_Character (Lo, Hi : Character) return Natural;
+    --  Compute Wide_Wide_Width attribute for non-static type derived from
+    --  Character. The arguments are the low and high bounds for the type.
+ 
  end System.WWd_Char;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-wwdenu.adb gcc-4.0.0/gcc/ada/s-wwdenu.adb
*** gcc-3.4.3/gcc/ada/s-wwdenu.adb	Thu Apr 24 17:54:15 2003
--- gcc-4.0.0/gcc/ada/s-wwdenu.adb	Thu Feb 10 13:50:23 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2000 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Unchecked_Conversion;
*** 38,43 ****
--- 38,154 ----
  
  package body System.WWd_Enum is
  
+    -----------------------------------
+    -- Wide_Wide_Width_Enumeration_8 --
+    -----------------------------------
+ 
+    function Wide_Wide_Width_Enumeration_8
+      (Names   : String;
+       Indexes : System.Address;
+       Lo, Hi  : Natural;
+       EM      : WC_Encoding_Method) return Natural
+    is
+       W : Natural;
+ 
+       type Natural_8 is range 0 .. 2 ** 7 - 1;
+       type Index_Table is array (Natural) of Natural_8;
+       type Index_Table_Ptr is access Index_Table;
+ 
+       function To_Index_Table_Ptr is
+         new Unchecked_Conversion (System.Address, Index_Table_Ptr);
+ 
+       IndexesT : constant Index_Table_Ptr := To_Index_Table_Ptr (Indexes);
+ 
+    begin
+       W := 0;
+       for J in Lo .. Hi loop
+          declare
+             WS : constant Wide_Wide_String :=
+                    String_To_Wide_Wide_String
+                      (Names (Natural (IndexesT (J)) ..
+                              Natural (IndexesT (J + 1)) - 1), EM);
+          begin
+             W := Natural'Max (W, WS'Length);
+          end;
+       end loop;
+ 
+       return W;
+    end Wide_Wide_Width_Enumeration_8;
+ 
+    ------------------------------------
+    -- Wide_Wide_Width_Enumeration_16 --
+    ------------------------------------
+ 
+    function Wide_Wide_Width_Enumeration_16
+      (Names   : String;
+       Indexes : System.Address;
+       Lo, Hi  : Natural;
+       EM      : WC_Encoding_Method) return Natural
+    is
+       W : Natural;
+ 
+       type Natural_16 is range 0 .. 2 ** 15 - 1;
+       type Index_Table is array (Natural) of Natural_16;
+       type Index_Table_Ptr is access Index_Table;
+ 
+       function To_Index_Table_Ptr is
+         new Unchecked_Conversion (System.Address, Index_Table_Ptr);
+ 
+       IndexesT : constant Index_Table_Ptr := To_Index_Table_Ptr (Indexes);
+ 
+    begin
+       W := 0;
+       for J in Lo .. Hi loop
+          declare
+             WS : constant Wide_Wide_String :=
+                    String_To_Wide_Wide_String
+                      (Names (Natural (IndexesT (J)) ..
+                              Natural (IndexesT (J + 1)) - 1), EM);
+          begin
+             W := Natural'Max (W, WS'Length);
+          end;
+       end loop;
+ 
+       return W;
+    end Wide_Wide_Width_Enumeration_16;
+ 
+    ------------------------------------
+    -- Wide_Wide_Width_Enumeration_32 --
+    ------------------------------------
+ 
+    function Wide_Wide_Width_Enumeration_32
+      (Names   : String;
+       Indexes : System.Address;
+       Lo, Hi  : Natural;
+       EM      : WC_Encoding_Method) return Natural
+    is
+       W : Natural;
+ 
+       type Natural_32 is range 0 .. 2 ** 31 - 1;
+       type Index_Table is array (Natural) of Natural_32;
+       type Index_Table_Ptr is access Index_Table;
+ 
+       function To_Index_Table_Ptr is
+         new Unchecked_Conversion (System.Address, Index_Table_Ptr);
+ 
+       IndexesT : constant Index_Table_Ptr := To_Index_Table_Ptr (Indexes);
+ 
+    begin
+       W := 0;
+       for J in Lo .. Hi loop
+          declare
+             WS : constant Wide_Wide_String :=
+                    String_To_Wide_Wide_String
+                      (Names (Natural (IndexesT (J)) ..
+                              Natural (IndexesT (J + 1)) - 1), EM);
+          begin
+             W := Natural'Max (W, WS'Length);
+          end;
+       end loop;
+ 
+       return W;
+    end Wide_Wide_Width_Enumeration_32;
+ 
     ------------------------------
     -- Wide_Width_Enumeration_8 --
     ------------------------------
*************** package body System.WWd_Enum is
*** 46,53 ****
       (Names   : String;
        Indexes : System.Address;
        Lo, Hi  : Natural;
!       EM      : WC_Encoding_Method)
!       return    Natural
     is
        W : Natural;
  
--- 157,163 ----
       (Names   : String;
        Indexes : System.Address;
        Lo, Hi  : Natural;
!       EM      : WC_Encoding_Method) return Natural
     is
        W : Natural;
  
*************** package body System.WWd_Enum is
*** 62,75 ****
  
     begin
        W := 0;
- 
        for J in Lo .. Hi loop
           declare
              WS : constant Wide_String :=
!               String_To_Wide_String
!                 (Names (Natural (IndexesT (J)) ..
!                         Natural (IndexesT (J + 1)) - 1), EM);
! 
           begin
              W := Natural'Max (W, WS'Length);
           end;
--- 172,183 ----
  
     begin
        W := 0;
        for J in Lo .. Hi loop
           declare
              WS : constant Wide_String :=
!                    String_To_Wide_String
!                      (Names (Natural (IndexesT (J)) ..
!                              Natural (IndexesT (J + 1)) - 1), EM);
           begin
              W := Natural'Max (W, WS'Length);
           end;
*************** package body System.WWd_Enum is
*** 86,93 ****
       (Names   : String;
        Indexes : System.Address;
        Lo, Hi  : Natural;
!       EM      : WC_Encoding_Method)
!       return    Natural
     is
        W : Natural;
  
--- 194,200 ----
       (Names   : String;
        Indexes : System.Address;
        Lo, Hi  : Natural;
!       EM      : WC_Encoding_Method) return Natural
     is
        W : Natural;
  
*************** package body System.WWd_Enum is
*** 102,115 ****
  
     begin
        W := 0;
- 
        for J in Lo .. Hi loop
           declare
              WS : constant Wide_String :=
!               String_To_Wide_String
!                 (Names (Natural (IndexesT (J)) ..
!                         Natural (IndexesT (J + 1)) - 1), EM);
! 
           begin
              W := Natural'Max (W, WS'Length);
           end;
--- 209,220 ----
  
     begin
        W := 0;
        for J in Lo .. Hi loop
           declare
              WS : constant Wide_String :=
!                    String_To_Wide_String
!                      (Names (Natural (IndexesT (J)) ..
!                              Natural (IndexesT (J + 1)) - 1), EM);
           begin
              W := Natural'Max (W, WS'Length);
           end;
*************** package body System.WWd_Enum is
*** 126,133 ****
       (Names   : String;
        Indexes : System.Address;
        Lo, Hi  : Natural;
!       EM      : WC_Encoding_Method)
!       return    Natural
     is
        W : Natural;
  
--- 231,237 ----
       (Names   : String;
        Indexes : System.Address;
        Lo, Hi  : Natural;
!       EM      : WC_Encoding_Method) return Natural
     is
        W : Natural;
  
*************** package body System.WWd_Enum is
*** 142,155 ****
  
     begin
        W := 0;
- 
        for J in Lo .. Hi loop
           declare
              WS : constant Wide_String :=
!               String_To_Wide_String
!                 (Names (Natural (IndexesT (J)) ..
!                         Natural (IndexesT (J + 1)) - 1), EM);
! 
           begin
              W := Natural'Max (W, WS'Length);
           end;
--- 246,257 ----
  
     begin
        W := 0;
        for J in Lo .. Hi loop
           declare
              WS : constant Wide_String :=
!                    String_To_Wide_String
!                      (Names (Natural (IndexesT (J)) ..
!                              Natural (IndexesT (J + 1)) - 1), EM);
           begin
              W := Natural'Max (W, WS'Length);
           end;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-wwdenu.ads gcc-4.0.0/gcc/ada/s-wwdenu.ads
*** gcc-3.4.3/gcc/ada/s-wwdenu.ads	Thu Apr 24 17:54:15 2003
--- gcc-4.0.0/gcc/ada/s-wwdenu.ads	Thu Feb 10 13:50:23 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2000 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 31,37 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This package contains the routine used for Enumeration_Type'Wide_Width
  
  with System.WCh_Con;
  
--- 31,37 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This package contains routines used for Enumeration_Type'Wide_[Wide_]Width
  
  with System.WCh_Con;
  
*************** pragma Pure (WWd_Enum);
*** 42,49 ****
       (Names   : String;
        Indexes : System.Address;
        Lo, Hi  : Natural;
!       EM      : System.WCh_Con.WC_Encoding_Method)
!       return    Natural;
     --  Used to compute Enum'Wide_Width where Enum is an enumeration subtype
     --  other than those defined in package Standard. Names is a string with
     --  a lower bound of 1 containing the characters of all the enumeration
--- 42,48 ----
       (Names   : String;
        Indexes : System.Address;
        Lo, Hi  : Natural;
!       EM      : System.WCh_Con.WC_Encoding_Method) return Natural;
     --  Used to compute Enum'Wide_Width where Enum is an enumeration subtype
     --  other than those defined in package Standard. Names is a string with
     --  a lower bound of 1 containing the characters of all the enumeration
*************** pragma Pure (WWd_Enum);
*** 65,72 ****
       (Names   : String;
        Indexes : System.Address;
        Lo, Hi  : Natural;
!       EM      : System.WCh_Con.WC_Encoding_Method)
!       return    Natural;
     --  Identical to Wide_Width_Enumeration_8 except that it handles types
     --  using array (0 .. Num) of Natural_16 for the Indexes table.
  
--- 64,70 ----
       (Names   : String;
        Indexes : System.Address;
        Lo, Hi  : Natural;
!       EM      : System.WCh_Con.WC_Encoding_Method) return Natural;
     --  Identical to Wide_Width_Enumeration_8 except that it handles types
     --  using array (0 .. Num) of Natural_16 for the Indexes table.
  
*************** pragma Pure (WWd_Enum);
*** 74,82 ****
       (Names   : String;
        Indexes : System.Address;
        Lo, Hi  : Natural;
!       EM      : System.WCh_Con.WC_Encoding_Method)
!       return    Natural;
     --  Identical to Wide_Width_Enumeration_8 except that it handles types
     --  using array (0 .. Num) of Natural_32 for the Indexes table.
  
  end System.WWd_Enum;
--- 72,100 ----
       (Names   : String;
        Indexes : System.Address;
        Lo, Hi  : Natural;
!       EM      : System.WCh_Con.WC_Encoding_Method) return Natural;
     --  Identical to Wide_Width_Enumeration_8 except that it handles types
     --  using array (0 .. Num) of Natural_32 for the Indexes table.
  
+    function Wide_Wide_Width_Enumeration_8
+      (Names   : String;
+       Indexes : System.Address;
+       Lo, Hi  : Natural;
+       EM      : System.WCh_Con.WC_Encoding_Method) return Natural;
+    --  Same function for Wide_Wide_Width attribute
+ 
+    function Wide_Wide_Width_Enumeration_16
+      (Names   : String;
+       Indexes : System.Address;
+       Lo, Hi  : Natural;
+       EM      : System.WCh_Con.WC_Encoding_Method) return Natural;
+    --  Same function for Wide_Wide_Width attribute
+ 
+    function Wide_Wide_Width_Enumeration_32
+      (Names   : String;
+       Indexes : System.Address;
+       Lo, Hi  : Natural;
+       EM      : System.WCh_Con.WC_Encoding_Method) return Natural;
+    --  Same function for Wide_Wide_Width attribute
+ 
  end System.WWd_Enum;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-wwdwch.adb gcc-4.0.0/gcc/ada/s-wwdwch.adb
*** gcc-3.4.3/gcc/ada/s-wwdwch.adb	Tue Oct 21 13:42:18 2003
--- gcc-4.0.0/gcc/ada/s-wwdwch.adb	Thu Feb 10 13:50:24 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 31,76 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
  package body System.Wwd_WChar is
  
     -------------------------------
     -- Wide_Width_Wide_Character --
     -------------------------------
  
     function Wide_Width_Wide_Character
!      (Lo, Hi : Wide_Character)
!       return   Natural
     is
!       W : Natural;
!       P : Natural;
  
     begin
!       W := 0;
  
!       for C in Lo .. Hi loop
!          P := Wide_Character'Pos (C);
  
!          --  If we are in wide character range, the length is always 3
!          --  and we are done, since all remaining characters are the same.
  
!          if P > 255 then
!             return Natural'Max (W, 3);
  
!          --  If we are in character range then use length of character image
!          --  Is this right, what about wide char encodings of 80-FF???
  
!          else
!             declare
!                S : constant Wide_String :=
!                      Character'Wide_Image (Character'Val (P));
  
!             begin
!                W := Natural'Max (W, S'Length);
!             end;
!          end if;
!       end loop;
  
        return W;
     end Wide_Width_Wide_Character;
  
  end System.Wwd_WChar;
--- 31,177 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
+ with Interfaces; use Interfaces;
+ 
+ with System.WWd_Char;
+ 
  package body System.Wwd_WChar is
  
+    ------------------------------------
+    -- Wide_Wide_Width_Wide_Character --
+    ------------------------------------
+ 
+    --  This is the case where we are talking about the Wide_Wide_Image of
+    --  a Wide_Character, which is always the same character sequence as the
+    --  Wide_Image of the same Wide_Character.
+ 
+    function Wide_Wide_Width_Wide_Character
+      (Lo, Hi : Wide_Character) return Natural
+    is
+    begin
+       return Wide_Width_Wide_Character (Lo, Hi);
+    end Wide_Wide_Width_Wide_Character;
+ 
+    ------------------------------------
+    -- Wide_Wide_Width_Wide_Wide_Char --
+    ------------------------------------
+ 
+    function Wide_Wide_Width_Wide_Wide_Char
+      (Lo, Hi : Wide_Wide_Character) return Natural
+    is
+       W  : Natural := 0;
+       LV : constant Unsigned_32 := Wide_Wide_Character'Pos (Lo);
+       HV : constant Unsigned_32 := Wide_Wide_Character'Pos (Hi);
+ 
+    begin
+       --  Return zero if empty range
+ 
+       if LV > HV then
+          return 0;
+       end if;
+ 
+       --  If any characters in normal character range, then use normal
+       --  Wide_Wide_Width attribute on this range to find out a starting point.
+       --  Otherwise start with zero.
+ 
+       if LV <= 255 then
+          W :=
+            System.WWd_Char.Wide_Wide_Width_Character
+              (Lo => Character'Val (LV),
+               Hi => Character'Val (Unsigned_32'Min (255, HV)));
+       else
+          W := 0;
+       end if;
+ 
+       --  Increase to at least 4 if FFFE or FFFF present. These correspond
+       --  to the special language defined names FFFE/FFFF for these values.
+ 
+       if 16#FFFF# in LV .. HV or else 16#FFFE# in LV .. HV then
+          W := Natural'Max (W, 4);
+       end if;
+ 
+       --  Increase to at least 3 if any wide characters, corresponding to
+       --  the normal ' character ' sequence. We know that the character fits.
+ 
+       if HV > 255 then
+          W := Natural'Max (W, 3);
+       end if;
+ 
+       return W;
+    end Wide_Wide_Width_Wide_Wide_Char;
+ 
     -------------------------------
     -- Wide_Width_Wide_Character --
     -------------------------------
  
     function Wide_Width_Wide_Character
!      (Lo, Hi : Wide_Character) return Natural
     is
!       W  : Natural := 0;
!       LV : constant Unsigned_32 := Wide_Character'Pos (Lo);
!       HV : constant Unsigned_32 := Wide_Character'Pos (Hi);
  
     begin
!       --  Return zero if empty range
  
!       if LV > HV then
!          return 0;
!       end if;
  
!       --  If any characters in normal character range, then use normal
!       --  Wide_Wide_Width attribute on this range to find out a starting point.
!       --  Otherwise start with zero.
  
!       if LV <= 255 then
!          W :=
!            System.WWd_Char.Wide_Width_Character
!              (Lo => Character'Val (LV),
!               Hi => Character'Val (Unsigned_32'Min (255, HV)));
!       else
!          W := 0;
!       end if;
  
!       --  Increase to at least 4 if FFFE or FFFF present. These correspond
!       --  to the special language defined names FFFE/FFFF for these values.
  
!       if 16#FFFF# in LV .. HV or else 16#FFFE# in LV .. HV then
!          W := Natural'Max (W, 4);
!       end if;
  
!       --  Increase to at least 3 if any wide characters, corresponding to
!       --  the normal 'character' sequence. We know that the character fits.
! 
!       if HV > 255 then
!          W := Natural'Max (W, 3);
!       end if;
  
        return W;
     end Wide_Width_Wide_Character;
  
+    ------------------------------------
+    -- Wide_Width_Wide_Wide_Character --
+    ------------------------------------
+ 
+    --  This is a nasty case, because we get into the business of representing
+    --  out of range wide wide characters as wide strings. Let's let image do
+    --  the work here. Too bad if this takes lots of time. It's silly anyway!
+ 
+    function Wide_Width_Wide_Wide_Character
+      (Lo, Hi : Wide_Wide_Character) return Natural
+    is
+       W : Natural;
+ 
+    begin
+       W := 0;
+       for J in Lo .. Hi loop
+          declare
+             S : constant Wide_String := Wide_Wide_Character'Wide_Image (J);
+          begin
+             W := Natural'Max (W, S'Length);
+          end;
+       end loop;
+ 
+       return W;
+    end Wide_Width_Wide_Wide_Character;
+ 
  end System.Wwd_WChar;
diff -Nrcpad gcc-3.4.3/gcc/ada/s-wwdwch.ads gcc-4.0.0/gcc/ada/s-wwdwch.ads
*** gcc-3.4.3/gcc/ada/s-wwdwch.ads	Thu Apr 24 17:54:15 2003
--- gcc-4.0.0/gcc/ada/s-wwdwch.ads	Thu Feb 10 13:50:24 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --        Copyright (C) 1992,1993,1994 Free Software Foundation, Inc.       --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 31,46 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This package contains the routine used for Wide_Character'Wide_Width
  
  package System.Wwd_WChar is
  pragma Pure (Wwd_WChar);
  
     function Wide_Width_Wide_Character
!      (Lo, Hi : Wide_Character)
!       return   Natural;
     --  Compute Wide_Width attribute for non-static type derived from
     --  Wide_Character. The arguments are the low and high bounds for
     --  the type. EM is the wide-character encoding method.
  
  end System.Wwd_WChar;
--- 31,63 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This package contains routines for [Wide_]Wide_Character'[Wide_]Wide_Width
  
  package System.Wwd_WChar is
  pragma Pure (Wwd_WChar);
  
     function Wide_Width_Wide_Character
!      (Lo, Hi : Wide_Character) return Natural;
     --  Compute Wide_Width attribute for non-static type derived from
     --  Wide_Character. The arguments are the low and high bounds for
     --  the type. EM is the wide-character encoding method.
  
+    function Wide_Width_Wide_Wide_Character
+      (Lo, Hi : Wide_Wide_Character) return Natural;
+    --  Compute Wide_Width attribute for non-static type derived from
+    --  Wide_Wide_Character. The arguments are the low and high bounds for
+    --  the type. EM is the wide-character encoding method.
+ 
+    function Wide_Wide_Width_Wide_Character
+      (Lo, Hi : Wide_Character) return Natural;
+    --  Compute Wide_Wide_Width attribute for non-static type derived from
+    --  Wide_Character. The arguments are the low and high bounds for
+    --  the type. EM is the wide-character encoding method.
+ 
+    function Wide_Wide_Width_Wide_Wide_Char
+      (Lo, Hi : Wide_Wide_Character) return Natural;
+    --  Compute Wide_Wide_Width attribute for non-static type derived from
+    --  Wide_Wide_Character. The arguments are the low and high bounds for
+    --  the type. EM is the wide-character encoding method.
+ 
  end System.Wwd_WChar;
diff -Nrcpad gcc-3.4.3/gcc/ada/scans.ads gcc-4.0.0/gcc/ada/scans.ads
*** gcc-3.4.3/gcc/ada/scans.ads	Mon Dec  8 10:33:15 2003
--- gcc-4.0.0/gcc/ada/scans.ads	Thu Feb 10 13:50:35 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Scans is
*** 124,129 ****
--- 124,130 ----
        Tok_Constant,        -- CONSTANT     Eterm, Sterm
        Tok_Do,              -- DO           Eterm, Sterm
        Tok_Is,              -- IS           Eterm, Sterm
+       Tok_Interface,       -- INTERFACE    Eterm, Sterm
        Tok_Limited,         -- LIMITED      Eterm, Sterm
        Tok_Of,              -- OF           Eterm, Sterm
        Tok_Out,             -- OUT          Eterm, Sterm
*************** package Scans is
*** 166,171 ****
--- 167,174 ----
        Tok_Task,            -- TASK         Eterm, Sterm, Declk, Deckn, After_SM
        Tok_Type,            -- TYPE         Eterm, Sterm, Declk, Deckn, After_SM
        Tok_Subtype,         -- SUBTYPE      Eterm, Sterm, Declk, Deckn, After_SM
+       Tok_Overriding,      -- OVERRIDING   Eterm, Sterm, Declk, Declk, After_SM
+       Tok_Synchronized,    -- SYNCHRONIZED Eterm, Sterm, Declk, Deckn, After_SM
        Tok_Use,             -- USE          Eterm, Sterm, Declk, Deckn, After_SM
  
        Tok_Function,        -- FUNCTION     Eterm, Sterm, Cunit, Declk, After_SM
diff -Nrcpad gcc-3.4.3/gcc/ada/scn.adb gcc-4.0.0/gcc/ada/scn.adb
*** gcc-3.4.3/gcc/ada/scn.adb	Mon Nov 24 14:27:57 2003
--- gcc-4.0.0/gcc/ada/scn.adb	Thu Feb 10 13:50:28 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 26,37 ****
  
  with Atree;    use Atree;
  with Csets;    use Csets;
- with Hostparm;
  with Namet;    use Namet;
  with Opt;      use Opt;
  with Scans;    use Scans;
  with Sinfo;    use Sinfo;
  with Sinput;   use Sinput;
  
  package body Scn is
  
--- 26,39 ----
  
  with Atree;    use Atree;
  with Csets;    use Csets;
  with Namet;    use Namet;
  with Opt;      use Opt;
+ with Restrict; use Restrict;
+ with Rident;   use Rident;
  with Scans;    use Scans;
  with Sinfo;    use Sinfo;
  with Sinput;   use Sinput;
+ with Uintp;    use Uintp;
  
  package body Scn is
  
*************** package body Scn is
*** 63,69 ****
        case Token is
           when Tok_Char_Literal =>
              Token_Node := New_Node (N_Character_Literal, Token_Ptr);
!             Set_Char_Literal_Value (Token_Node, Character_Code);
              Set_Chars (Token_Node, Token_Name);
  
           when Tok_Identifier =>
--- 65,71 ----
        case Token is
           when Tok_Char_Literal =>
              Token_Node := New_Node (N_Character_Literal, Token_Ptr);
!             Set_Char_Literal_Value (Token_Node, UI_From_CC (Character_Code));
              Set_Chars (Token_Node, Token_Name);
  
           when Tok_Identifier =>
*************** package body Scn is
*** 99,111 ****
  
     procedure Check_End_Of_Line is
        Len : constant Int := Int (Scan_Ptr) - Int (Current_Line_Start);
- 
     begin
!       if Len > Hostparm.Max_Line_Length then
!          Error_Long_Line;
! 
!       elsif Style_Check then
           Style.Check_Line_Terminator (Len);
        end if;
     end Check_End_Of_Line;
  
--- 101,111 ----
  
     procedure Check_End_Of_Line is
        Len : constant Int := Int (Scan_Ptr) - Int (Current_Line_Start);
     begin
!       if Style_Check then
           Style.Check_Line_Terminator (Len);
+       elsif Len > Opt.Max_Line_Length then
+          Error_Long_Line;
        end if;
     end Check_End_Of_Line;
  
*************** package body Scn is
*** 115,120 ****
--- 115,121 ----
  
     function Determine_License return License_Type is
        GPL_Found : Boolean := False;
+       Result    : License_Type;
  
        function Contains (S : String) return Boolean;
        --  See if current comment contains successive non-blank characters
*************** package body Scn is
*** 134,141 ****
           SS : Source_Ptr;
  
        begin
           SP := Scan_Ptr;
!          while Source (SP) /= CR and then Source (SP) /= LF loop
              if Source (SP) = S (S'First) then
                 SS := SP;
                 CP := S'First;
--- 135,149 ----
           SS : Source_Ptr;
  
        begin
+          --  Loop to check characters. This loop is terminated by end of
+          --  line, and also we need to check for the EOF case, to take
+          --  care of files containing only comments.
+ 
           SP := Scan_Ptr;
!          while Source (SP) /= CR and then
!                Source (SP) /= LF and then
!                Source (SP) /= EOF
!          loop
              if Source (SP) = S (S'First) then
                 SS := SP;
                 CP := S'First;
*************** package body Scn is
*** 170,175 ****
--- 178,184 ----
        begin
           while Source (Scan_Ptr) /= CR
             and then Source (Scan_Ptr) /= LF
+            and then Source (Scan_Ptr) /= EOF
           loop
              Scan_Ptr := Scan_Ptr + 1;
           end loop;
*************** package body Scn is
*** 183,196 ****
             or else Source (Scan_Ptr + 1) /= '-'
           then
              if GPL_Found then
!                return GPL;
              else
!                return Unknown;
              end if;
  
           elsif Contains ("Asaspecialexception") then
              if GPL_Found then
!                return Modified_GPL;
              end if;
  
           elsif Contains ("GNUGeneralPublicLicense") then
--- 192,208 ----
             or else Source (Scan_Ptr + 1) /= '-'
           then
              if GPL_Found then
!                Result := GPL;
!                exit;
              else
!                Result := Unknown;
!                exit;
              end if;
  
           elsif Contains ("Asaspecialexception") then
              if GPL_Found then
!                Result := Modified_GPL;
!                exit;
              end if;
  
           elsif Contains ("GNUGeneralPublicLicense") then
*************** package body Scn is
*** 203,231 ****
               Contains
                ("ThisspecificationisderivedfromtheAdaReferenceManual")
           then
!             return Unrestricted;
           end if;
  
           Skip_EOL;
  
           Check_End_Of_Line;
  
!          declare
!             Physical : Boolean;
  
!          begin
!             Skip_Line_Terminators (Scan_Ptr, Physical);
  
!             --  If we are at start of physical line, update scan pointers
!             --  to reflect the start of the new line.
  
!             if Physical then
!                Current_Line_Start       := Scan_Ptr;
!                Start_Column             := Scanner.Set_Start_Column;
!                First_Non_Blank_Location := Scan_Ptr;
!             end if;
!          end;
        end loop;
     end Determine_License;
  
     ----------------------------
--- 215,252 ----
               Contains
                ("ThisspecificationisderivedfromtheAdaReferenceManual")
           then
!             Result := Unrestricted;
!             exit;
           end if;
  
           Skip_EOL;
  
           Check_End_Of_Line;
  
!          if Source (Scan_Ptr) /= EOF then
  
!             --  We have to take into account a degenerate case when the source
!             --  file contains only comments and no Ada code.
  
!             declare
!                Physical : Boolean;
  
!             begin
!                Skip_Line_Terminators (Scan_Ptr, Physical);
! 
!                --  If we are at start of physical line, update scan pointers
!                --  to reflect the start of the new line.
! 
!                if Physical then
!                   Current_Line_Start       := Scan_Ptr;
!                   Start_Column             := Scanner.Set_Start_Column;
!                   First_Non_Blank_Location := Scan_Ptr;
!                end if;
!             end;
!          end if;
        end loop;
+ 
+       return Result;
     end Determine_License;
  
     ----------------------------
*************** package body Scn is
*** 245,251 ****
     begin
        Error_Msg
          ("this line is too long",
!          Current_Line_Start + Hostparm.Max_Line_Length);
     end Error_Long_Line;
  
     ------------------------
--- 266,272 ----
     begin
        Error_Msg
          ("this line is too long",
!          Current_Line_Start + Source_Ptr (Opt.Max_Line_Length));
     end Error_Long_Line;
  
     ------------------------
*************** package body Scn is
*** 303,308 ****
--- 324,343 ----
        end loop;
     end Initialize_Scanner;
  
+    -----------------------
+    -- Obsolescent_Check --
+    -----------------------
+ 
+    procedure Obsolescent_Check (S : Source_Ptr) is
+    begin
+       --  This is a pain in the neck case, since we normally need a node to
+       --  call Check_Restrictions, and all we have is a source pointer. The
+       --  easiest thing is to construct a dummy node. A bit kludgy, but this
+       --  is a marginal case. It's not worth trying to do things more cleanly.
+ 
+       Check_Restriction (No_Obsolescent_Features, New_Node (N_Empty, S));
+    end Obsolescent_Check;
+ 
     ------------------------------
     -- Scan_Reserved_Identifier --
     ------------------------------
diff -Nrcpad gcc-3.4.3/gcc/ada/scn.ads gcc-4.0.0/gcc/ada/scn.ads
*** gcc-3.4.3/gcc/ada/scn.ads	Tue Oct 21 13:42:18 2003
--- gcc-4.0.0/gcc/ada/scn.ads	Mon Jan  3 15:32:18 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Scn is
*** 48,53 ****
--- 48,57 ----
     --  Determines the casing style of the current token, which is
     --  either a keyword or an identifier. See also package Casing.
  
+    procedure Obsolescent_Check (S : Source_Ptr);
+    --  Called to handle pragma restrictions check for usage of obsolescent
+    --  character replacements during the scan.
+ 
     procedure Post_Scan;
     pragma Inline (Post_Scan);
     --  Create nodes for tokens: Char_Literal, Identifier, Real_Literal,
*************** package Scn is
*** 69,80 ****
     --  generic package Scng with routines appropriate to the compiler
  
     package Scanner is new Scng
!      (Post_Scan    => Post_Scan,
!       Error_Msg    => Error_Msg,
!       Error_Msg_S  => Error_Msg_S,
!       Error_Msg_SC => Error_Msg_SC,
!       Error_Msg_SP => Error_Msg_SP,
!       Style        => Style.Style_Inst);
  
     procedure Scan renames Scanner.Scan;
     --  Scan scans out the next token, and advances the scan state accordingly
--- 73,85 ----
     --  generic package Scng with routines appropriate to the compiler
  
     package Scanner is new Scng
!      (Post_Scan         => Post_Scan,
!       Error_Msg         => Error_Msg,
!       Error_Msg_S       => Error_Msg_S,
!       Error_Msg_SC      => Error_Msg_SC,
!       Error_Msg_SP      => Error_Msg_SP,
!       Obsolescent_Check => Obsolescent_Check,
!       Style             => Style.Style_Inst);
  
     procedure Scan renames Scanner.Scan;
     --  Scan scans out the next token, and advances the scan state accordingly
diff -Nrcpad gcc-3.4.3/gcc/ada/scng.adb gcc-4.0.0/gcc/ada/scng.adb
*** gcc-3.4.3/gcc/ada/scng.adb	Mon Dec  8 10:33:15 2003
--- gcc-4.0.0/gcc/ada/scng.adb	Thu Feb 10 13:50:28 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 26,32 ****
  
  with Csets;    use Csets;
  with Err_Vars; use Err_Vars;
- with Hostparm; use Hostparm;
  with Namet;    use Namet;
  with Opt;      use Opt;
  with Scans;    use Scans;
--- 26,31 ----
*************** package body Scng is
*** 59,64 ****
--- 58,66 ----
     -- Local Subprograms --
     -----------------------
  
+    procedure Accumulate_Token_Checksum;
+    pragma Inline (Accumulate_Token_Checksum);
+ 
     procedure Accumulate_Checksum (C : Character);
     pragma Inline (Accumulate_Checksum);
     --  This routine accumulates the checksum given character C. During the
*************** package body Scng is
*** 92,101 ****
  
     procedure Accumulate_Checksum (C : Char_Code) is
     begin
!       Accumulate_Checksum (Character'Val (C / 256));
        Accumulate_Checksum (Character'Val (C mod 256));
     end Accumulate_Checksum;
  
     ----------------------------
     -- Determine_Token_Casing --
     ----------------------------
--- 94,120 ----
  
     procedure Accumulate_Checksum (C : Char_Code) is
     begin
!       if C > 16#FFFF# then
!          Accumulate_Checksum (Character'Val (C / 2 ** 16));
!          Accumulate_Checksum (Character'Val ((C / 256) mod 256));
!       else
!          Accumulate_Checksum (Character'Val (C / 256));
!       end if;
! 
        Accumulate_Checksum (Character'Val (C mod 256));
     end Accumulate_Checksum;
  
+    -------------------------------
+    -- Accumulate_Token_Checksum --
+    -------------------------------
+ 
+    procedure Accumulate_Token_Checksum is
+    begin
+       System.CRC32.Update
+         (System.CRC32.CRC32 (Checksum),
+          Character'Val (Token_Type'Pos (Token)));
+    end Accumulate_Token_Checksum;
+ 
     ----------------------------
     -- Determine_Token_Casing --
     ----------------------------
*************** package body Scng is
*** 122,201 ****
       (Unit  : Unit_Number_Type;
        Index : Source_File_Index)
     is
     begin
!       --  Set up Token_Type values in Names Table entries for reserved keywords
!       --  We use the Pos value of the Token_Type value. Note we are relying on
!       --  the fact that Token_Type'Val (0) is not a reserved word!
  
!       Set_Name_Table_Byte (Name_Abort,      Token_Type'Pos (Tok_Abort));
!       Set_Name_Table_Byte (Name_Abs,        Token_Type'Pos (Tok_Abs));
!       Set_Name_Table_Byte (Name_Abstract,   Token_Type'Pos (Tok_Abstract));
!       Set_Name_Table_Byte (Name_Accept,     Token_Type'Pos (Tok_Accept));
!       Set_Name_Table_Byte (Name_Access,     Token_Type'Pos (Tok_Access));
!       Set_Name_Table_Byte (Name_And,        Token_Type'Pos (Tok_And));
!       Set_Name_Table_Byte (Name_Aliased,    Token_Type'Pos (Tok_Aliased));
!       Set_Name_Table_Byte (Name_All,        Token_Type'Pos (Tok_All));
!       Set_Name_Table_Byte (Name_Array,      Token_Type'Pos (Tok_Array));
!       Set_Name_Table_Byte (Name_At,         Token_Type'Pos (Tok_At));
!       Set_Name_Table_Byte (Name_Begin,      Token_Type'Pos (Tok_Begin));
!       Set_Name_Table_Byte (Name_Body,       Token_Type'Pos (Tok_Body));
!       Set_Name_Table_Byte (Name_Case,       Token_Type'Pos (Tok_Case));
!       Set_Name_Table_Byte (Name_Constant,   Token_Type'Pos (Tok_Constant));
!       Set_Name_Table_Byte (Name_Declare,    Token_Type'Pos (Tok_Declare));
!       Set_Name_Table_Byte (Name_Delay,      Token_Type'Pos (Tok_Delay));
!       Set_Name_Table_Byte (Name_Delta,      Token_Type'Pos (Tok_Delta));
!       Set_Name_Table_Byte (Name_Digits,     Token_Type'Pos (Tok_Digits));
!       Set_Name_Table_Byte (Name_Do,         Token_Type'Pos (Tok_Do));
!       Set_Name_Table_Byte (Name_Else,       Token_Type'Pos (Tok_Else));
!       Set_Name_Table_Byte (Name_Elsif,      Token_Type'Pos (Tok_Elsif));
!       Set_Name_Table_Byte (Name_End,        Token_Type'Pos (Tok_End));
!       Set_Name_Table_Byte (Name_Entry,      Token_Type'Pos (Tok_Entry));
!       Set_Name_Table_Byte (Name_Exception,  Token_Type'Pos (Tok_Exception));
!       Set_Name_Table_Byte (Name_Exit,       Token_Type'Pos (Tok_Exit));
!       Set_Name_Table_Byte (Name_For,        Token_Type'Pos (Tok_For));
!       Set_Name_Table_Byte (Name_Function,   Token_Type'Pos (Tok_Function));
!       Set_Name_Table_Byte (Name_Generic,    Token_Type'Pos (Tok_Generic));
!       Set_Name_Table_Byte (Name_Goto,       Token_Type'Pos (Tok_Goto));
!       Set_Name_Table_Byte (Name_If,         Token_Type'Pos (Tok_If));
!       Set_Name_Table_Byte (Name_In,         Token_Type'Pos (Tok_In));
!       Set_Name_Table_Byte (Name_Is,         Token_Type'Pos (Tok_Is));
!       Set_Name_Table_Byte (Name_Limited,    Token_Type'Pos (Tok_Limited));
!       Set_Name_Table_Byte (Name_Loop,       Token_Type'Pos (Tok_Loop));
!       Set_Name_Table_Byte (Name_Mod,        Token_Type'Pos (Tok_Mod));
!       Set_Name_Table_Byte (Name_New,        Token_Type'Pos (Tok_New));
!       Set_Name_Table_Byte (Name_Not,        Token_Type'Pos (Tok_Not));
!       Set_Name_Table_Byte (Name_Null,       Token_Type'Pos (Tok_Null));
!       Set_Name_Table_Byte (Name_Of,         Token_Type'Pos (Tok_Of));
!       Set_Name_Table_Byte (Name_Or,         Token_Type'Pos (Tok_Or));
!       Set_Name_Table_Byte (Name_Others,     Token_Type'Pos (Tok_Others));
!       Set_Name_Table_Byte (Name_Out,        Token_Type'Pos (Tok_Out));
!       Set_Name_Table_Byte (Name_Package,    Token_Type'Pos (Tok_Package));
!       Set_Name_Table_Byte (Name_Pragma,     Token_Type'Pos (Tok_Pragma));
!       Set_Name_Table_Byte (Name_Private,    Token_Type'Pos (Tok_Private));
!       Set_Name_Table_Byte (Name_Procedure,  Token_Type'Pos (Tok_Procedure));
!       Set_Name_Table_Byte (Name_Protected,  Token_Type'Pos (Tok_Protected));
!       Set_Name_Table_Byte (Name_Raise,      Token_Type'Pos (Tok_Raise));
!       Set_Name_Table_Byte (Name_Range,      Token_Type'Pos (Tok_Range));
!       Set_Name_Table_Byte (Name_Record,     Token_Type'Pos (Tok_Record));
!       Set_Name_Table_Byte (Name_Rem,        Token_Type'Pos (Tok_Rem));
!       Set_Name_Table_Byte (Name_Renames,    Token_Type'Pos (Tok_Renames));
!       Set_Name_Table_Byte (Name_Requeue,    Token_Type'Pos (Tok_Requeue));
!       Set_Name_Table_Byte (Name_Return,     Token_Type'Pos (Tok_Return));
!       Set_Name_Table_Byte (Name_Reverse,    Token_Type'Pos (Tok_Reverse));
!       Set_Name_Table_Byte (Name_Select,     Token_Type'Pos (Tok_Select));
!       Set_Name_Table_Byte (Name_Separate,   Token_Type'Pos (Tok_Separate));
!       Set_Name_Table_Byte (Name_Subtype,    Token_Type'Pos (Tok_Subtype));
!       Set_Name_Table_Byte (Name_Tagged,     Token_Type'Pos (Tok_Tagged));
!       Set_Name_Table_Byte (Name_Task,       Token_Type'Pos (Tok_Task));
!       Set_Name_Table_Byte (Name_Terminate,  Token_Type'Pos (Tok_Terminate));
!       Set_Name_Table_Byte (Name_Then,       Token_Type'Pos (Tok_Then));
!       Set_Name_Table_Byte (Name_Type,       Token_Type'Pos (Tok_Type));
!       Set_Name_Table_Byte (Name_Until,      Token_Type'Pos (Tok_Until));
!       Set_Name_Table_Byte (Name_Use,        Token_Type'Pos (Tok_Use));
!       Set_Name_Table_Byte (Name_When,       Token_Type'Pos (Tok_When));
!       Set_Name_Table_Byte (Name_While,      Token_Type'Pos (Tok_While));
!       Set_Name_Table_Byte (Name_With,       Token_Type'Pos (Tok_With));
!       Set_Name_Table_Byte (Name_Xor,        Token_Type'Pos (Tok_Xor));
  
        --  Initialize scan control variables
  
--- 141,243 ----
       (Unit  : Unit_Number_Type;
        Index : Source_File_Index)
     is
+       procedure Set_Reserved (N : Name_Id; T : Token_Type);
+       pragma Inline (Set_Reserved);
+       --  Set given name as a reserved keyword (T is the corresponding token)
+ 
+       -------------
+       -- Set_NTB --
+       -------------
+ 
+       procedure Set_Reserved (N : Name_Id; T : Token_Type) is
+       begin
+          --  Set up Token_Type values in Names Table entries for reserved
+          --  keywords We use the Pos value of the Token_Type value. Note we
+          --  rely on the fact that Token_Type'Val (0) is not a reserved word!
+ 
+          Set_Name_Table_Byte (N, Token_Type'Pos (T));
+       end Set_Reserved;
+ 
+    --  Start of processing for Initialize_Scanner
+ 
     begin
!       --  Establish reserved words
  
!       Set_Reserved (Name_Abort,     Tok_Abort);
!       Set_Reserved (Name_Abs,       Tok_Abs);
!       Set_Reserved (Name_Abstract,  Tok_Abstract);
!       Set_Reserved (Name_Accept,    Tok_Accept);
!       Set_Reserved (Name_Access,    Tok_Access);
!       Set_Reserved (Name_And,       Tok_And);
!       Set_Reserved (Name_Aliased,   Tok_Aliased);
!       Set_Reserved (Name_All,       Tok_All);
!       Set_Reserved (Name_Array,     Tok_Array);
!       Set_Reserved (Name_At,        Tok_At);
!       Set_Reserved (Name_Begin,     Tok_Begin);
!       Set_Reserved (Name_Body,      Tok_Body);
!       Set_Reserved (Name_Case,      Tok_Case);
!       Set_Reserved (Name_Constant,  Tok_Constant);
!       Set_Reserved (Name_Declare,   Tok_Declare);
!       Set_Reserved (Name_Delay,     Tok_Delay);
!       Set_Reserved (Name_Delta,     Tok_Delta);
!       Set_Reserved (Name_Digits,    Tok_Digits);
!       Set_Reserved (Name_Do,        Tok_Do);
!       Set_Reserved (Name_Else,      Tok_Else);
!       Set_Reserved (Name_Elsif,     Tok_Elsif);
!       Set_Reserved (Name_End,       Tok_End);
!       Set_Reserved (Name_Entry,     Tok_Entry);
!       Set_Reserved (Name_Exception, Tok_Exception);
!       Set_Reserved (Name_Exit,      Tok_Exit);
!       Set_Reserved (Name_For,       Tok_For);
!       Set_Reserved (Name_Function,  Tok_Function);
!       Set_Reserved (Name_Generic,   Tok_Generic);
!       Set_Reserved (Name_Goto,      Tok_Goto);
!       Set_Reserved (Name_If,        Tok_If);
!       Set_Reserved (Name_In,        Tok_In);
!       Set_Reserved (Name_Is,        Tok_Is);
!       Set_Reserved (Name_Limited,   Tok_Limited);
!       Set_Reserved (Name_Loop,      Tok_Loop);
!       Set_Reserved (Name_Mod,       Tok_Mod);
!       Set_Reserved (Name_New,       Tok_New);
!       Set_Reserved (Name_Not,       Tok_Not);
!       Set_Reserved (Name_Null,      Tok_Null);
!       Set_Reserved (Name_Of,        Tok_Of);
!       Set_Reserved (Name_Or,        Tok_Or);
!       Set_Reserved (Name_Others,    Tok_Others);
!       Set_Reserved (Name_Out,       Tok_Out);
!       Set_Reserved (Name_Package,   Tok_Package);
!       Set_Reserved (Name_Pragma,    Tok_Pragma);
!       Set_Reserved (Name_Private,   Tok_Private);
!       Set_Reserved (Name_Procedure, Tok_Procedure);
!       Set_Reserved (Name_Protected, Tok_Protected);
!       Set_Reserved (Name_Raise,     Tok_Raise);
!       Set_Reserved (Name_Range,     Tok_Range);
!       Set_Reserved (Name_Record,    Tok_Record);
!       Set_Reserved (Name_Rem,       Tok_Rem);
!       Set_Reserved (Name_Renames,   Tok_Renames);
!       Set_Reserved (Name_Requeue,   Tok_Requeue);
!       Set_Reserved (Name_Return,    Tok_Return);
!       Set_Reserved (Name_Reverse,   Tok_Reverse);
!       Set_Reserved (Name_Select,    Tok_Select);
!       Set_Reserved (Name_Separate,  Tok_Separate);
!       Set_Reserved (Name_Subtype,   Tok_Subtype);
!       Set_Reserved (Name_Tagged,    Tok_Tagged);
!       Set_Reserved (Name_Task,      Tok_Task);
!       Set_Reserved (Name_Terminate, Tok_Terminate);
!       Set_Reserved (Name_Then,      Tok_Then);
!       Set_Reserved (Name_Type,      Tok_Type);
!       Set_Reserved (Name_Until,     Tok_Until);
!       Set_Reserved (Name_Use,       Tok_Use);
!       Set_Reserved (Name_When,      Tok_When);
!       Set_Reserved (Name_While,     Tok_While);
!       Set_Reserved (Name_With,      Tok_With);
!       Set_Reserved (Name_Xor,       Tok_Xor);
! 
!       --  Ada 2005 reserved words
! 
!       Set_Reserved (Name_Interface,     Tok_Interface);
!       Set_Reserved (Name_Overriding,    Tok_Overriding);
!       Set_Reserved (Name_Synchronized,  Tok_Synchronized);
  
        --  Initialize scan control variables
  
*************** package body Scng is
*** 213,219 ****
  
        Initialize_Checksum;
  
!       --  Do not call Scan, otherwise the License stuff does not work in Scn.
  
     end Initialize_Scanner;
  
--- 255,261 ----
  
        Initialize_Checksum;
  
!       --  Do not call Scan, otherwise the License stuff does not work in Scn
  
     end Initialize_Scanner;
  
*************** package body Scng is
*** 233,242 ****
     procedure Scan is
  
        Start_Of_Comment : Source_Ptr;
  
        procedure Check_End_Of_Line;
!       --  Called when end of line encountered. Checks that line is not
!       --  too long, and that other style checks for the end of line are met.
  
        function Double_Char_Token (C : Character) return Boolean;
        --  This function is used for double character tokens like := or <>. It
--- 275,296 ----
     procedure Scan is
  
        Start_Of_Comment : Source_Ptr;
+       --  Record start of comment position
+ 
+       Underline_Found : Boolean;
+       --  During scanning of an identifier, set to True if last character
+       --  scanned was an underline or other punctuation character. This
+       --  is used to flag the error of two underlines/punctuations in a
+       --  row or ending an identifier with a underline/punctuation. Here
+       --  punctuation means any UTF_32 character in the Unicode category
+       --  Punctuation,Connector.
+ 
+       Wptr : Source_Ptr;
+       --  Used to remember start of last wide character scanned
  
        procedure Check_End_Of_Line;
!       --  Called when end of line encountered. Checks that line is not too
!       --  long, and that other style checks for the end of line are met.
  
        function Double_Char_Token (C : Character) return Boolean;
        --  This function is used for double character tokens like := or <>. It
*************** package body Scng is
*** 249,256 ****
        --  since we do not want a junk message for a case like &-space-&).
  
        procedure Error_Illegal_Character;
!       --  Give illegal character error, Scan_Ptr points to character.
!       --  On return, Scan_Ptr is bumped past the illegal character.
  
        procedure Error_Illegal_Wide_Character;
        --  Give illegal wide character message. On return, Scan_Ptr is bumped
--- 303,310 ----
        --  since we do not want a junk message for a case like &-space-&).
  
        procedure Error_Illegal_Character;
!       --  Give illegal character error, Scan_Ptr points to character. On
!       --  return, Scan_Ptr is bumped past the illegal character.
  
        procedure Error_Illegal_Wide_Character;
        --  Give illegal wide character message. On return, Scan_Ptr is bumped
*************** package body Scng is
*** 261,267 ****
        --  Signal error of excessively long line
  
        procedure Error_No_Double_Underline;
!       --  Signal error of double underline character
  
        procedure Nlit;
        --  This is the procedure for scanning out numeric literals. On entry,
--- 315,322 ----
        --  Signal error of excessively long line
  
        procedure Error_No_Double_Underline;
!       --  Signal error of two underline or punctuation characters in a row.
!       --  Called with Scan_Ptr pointing to second underline/punctuation char.
  
        procedure Nlit;
        --  This is the procedure for scanning out numeric literals. On entry,
*************** package body Scng is
*** 288,294 ****
           if Style_Check and Style_Check_Max_Line_Length then
              Style.Check_Line_Terminator (Len);
  
!          elsif Len > Hostparm.Max_Line_Length then
              Error_Long_Line;
           end if;
        end Check_End_Of_Line;
--- 343,356 ----
           if Style_Check and Style_Check_Max_Line_Length then
              Style.Check_Line_Terminator (Len);
  
!          --  If style checking is inactive, check maximum line length against
!          --  standard value. Note that we take this from Opt.Max_Line_Length
!          --  rather than Hostparm.Max_Line_Length because we do not want to
!          --  impose any limit during scanning of configuration pragma files,
!          --  and Opt.Max_Line_Length (normally set to Hostparm.Max_Line_Length)
!          --  is reset to Column_Number'Max during scanning of such files.
! 
!          elsif Len > Opt.Max_Line_Length then
              Error_Long_Line;
           end if;
        end Check_End_Of_Line;
*************** package body Scng is
*** 333,348 ****
  
        procedure Error_Illegal_Wide_Character is
        begin
!          if OpenVMS then
!             Error_Msg_S
!               ("illegal wide character, check " &
!                  "'/'W'I'D'E'_'C'H'A'R'A'C'T'E'R'_'E'N'C'O'D'I'N'G qualifier");
!          else
!             Error_Msg_S
!               ("illegal wide character, check -gnatW switch");
!          end if;
! 
!          Scan_Ptr := Scan_Ptr + 1;
        end Error_Illegal_Wide_Character;
  
        ---------------------
--- 395,401 ----
  
        procedure Error_Illegal_Wide_Character is
        begin
!          Error_Msg ("illegal wide character", Wptr);
        end Error_Illegal_Wide_Character;
  
        ---------------------
*************** package body Scng is
*** 353,359 ****
        begin
           Error_Msg
             ("this line is too long",
!             Current_Line_Start + Hostparm.Max_Line_Length);
        end Error_Long_Line;
  
        -------------------------------
--- 406,412 ----
        begin
           Error_Msg
             ("this line is too long",
!             Current_Line_Start + Source_Ptr (Opt.Max_Line_Length));
        end Error_Long_Line;
  
        -------------------------------
*************** package body Scng is
*** 362,368 ****
  
        procedure Error_No_Double_Underline is
        begin
!          Error_Msg_S ("two consecutive underlines not permitted");
        end Error_No_Double_Underline;
  
        ----------
--- 415,442 ----
  
        procedure Error_No_Double_Underline is
        begin
!          Underline_Found := False;
! 
!          --  There are four cases, and we special case the messages
! 
!          if Source (Scan_Ptr) = '_' then
!             if Source (Scan_Ptr - 1) = '_' then
!                Error_Msg_S
!                  ("two consecutive underlines not permitted");
!             else
!                Error_Msg_S
!                  ("underline cannot follow punctuation character");
!             end if;
! 
!          else
!             if Source (Scan_Ptr - 1) = '_' then
!                Error_Msg_S
!                  ("punctuation character cannot follow underline");
!             else
!                Error_Msg_S
!                  ("two consecutive punctuation characters not permitted");
!             end if;
!          end if;
        end Error_No_Double_Underline;
  
        ----------
*************** package body Scng is
*** 413,424 ****
           --  which the digit was expected on input, and is unchanged on return.
  
           procedure Scan_Integer;
!          --  Procedure to scan integer literal. On entry, Scan_Ptr points to
!          --  a digit, on exit Scan_Ptr points past the last character of
!          --  the integer.
!          --  For each digit encountered, UI_Int_Value is multiplied by 10,
!          --  and the value of the digit added to the result. In addition,
!          --  the value in Scale is decremented by one for each actual digit
           --  scanned.
  
           --------------------------
--- 487,499 ----
           --  which the digit was expected on input, and is unchanged on return.
  
           procedure Scan_Integer;
!          --  Procedure to scan integer literal. On entry, Scan_Ptr points to a
!          --  digit, on exit Scan_Ptr points past the last character of the
!          --  integer.
!          --
!          --  For each digit encountered, UI_Int_Value is multiplied by 10, and
!          --  the value of the digit added to the result. In addition, the
!          --  value in Scale is decremented by one for each actual digit
           --  scanned.
  
           --------------------------
*************** package body Scng is
*** 430,438 ****
              Error_Msg_S ("digit expected");
           end Error_Digit_Expected;
  
!          -------------------
!          --  Scan_Integer --
!          -------------------
  
           procedure Scan_Integer is
              C : Character;
--- 505,513 ----
              Error_Msg_S ("digit expected");
           end Error_Digit_Expected;
  
!          ------------------
!          -- Scan_Integer --
!          ------------------
  
           procedure Scan_Integer is
              C : Character;
*************** package body Scng is
*** 451,458 ****
                 Scale := Scale - 1;
                 C := Source (Scan_Ptr);
  
                 if C = '_' then
!                   Accumulate_Checksum ('_');
  
                    loop
                       Scan_Ptr := Scan_Ptr + 1;
--- 526,538 ----
                 Scale := Scale - 1;
                 C := Source (Scan_Ptr);
  
+                --  Case of underline encountered
+ 
                 if C = '_' then
! 
!                   --  We do not accumulate the '_' in the checksum, so that
!                   --  1_234 is equivalent to 1234, and does not trigger
!                   --  compilation for "minimal recompilation" (gnatmake -m).
  
                    loop
                       Scan_Ptr := Scan_Ptr + 1;
*************** package body Scng is
*** 470,481 ****
                    exit when C not in '0' .. '9';
                 end if;
              end loop;
- 
           end Scan_Integer;
  
!          ----------------------------------
!          -- Start of Processing for Nlit --
!          ----------------------------------
  
        begin
           Base := 10;
--- 550,558 ----
                    exit when C not in '0' .. '9';
                 end if;
              end loop;
           end Scan_Integer;
  
!       --  Start of Processing for Nlit
  
        begin
           Base := 10;
*************** package body Scng is
*** 487,494 ****
           Point_Scanned := False;
           UI_Num_Value := UI_Int_Value;
  
!          --  Various possibilities now for continuing the literal are
!          --  period, E/e (for exponent), or :/# (for based literal).
  
           Scale := 0;
           C := Source (Scan_Ptr);
--- 564,571 ----
           Point_Scanned := False;
           UI_Num_Value := UI_Int_Value;
  
!          --  Various possibilities now for continuing the literal are period,
!          --  E/e (for exponent), or :/# (for based literal).
  
           Scale := 0;
           C := Source (Scan_Ptr);
*************** package body Scng is
*** 518,528 ****
                 end if;
              end loop;
  
!             --  Based literal case. The base is the value we already scanned.
!             --  In the case of colon, we insist that the following character
!             --  is indeed an extended digit or a period. This catches a number
!             --  of common errors, as well as catching the well known tricky
!             --  bug otherwise arising from "x : integer range 1 .. 10:= 6;"
  
           elsif C = '#'
             or else (C = ':' and then
--- 595,605 ----
                 end if;
              end loop;
  
!          --  Based literal case. The base is the value we already scanned.
!          --  In the case of colon, we insist that the following character
!          --  is indeed an extended digit or a period. This catches a number
!          --  of common errors, as well as catching the well known tricky
!          --  bug otherwise arising from "x : integer range 1 .. 10:= 6;"
  
           elsif C = '#'
             or else (C = ':' and then
*************** package body Scng is
*** 534,544 ****
                           or else
                         Source (Scan_Ptr + 1) in 'a' .. 'z'))
           then
!             if C = ':' and then Warn_On_Obsolescent_Feature then
!                Error_Msg_S
!                  ("use of "":"" is an obsolescent feature ('R'M 'J.2(3))?");
!                Error_Msg_S
!                  ("\use ""'#"" instead?");
              end if;
  
              Accumulate_Checksum (C);
--- 611,625 ----
                           or else
                         Source (Scan_Ptr + 1) in 'a' .. 'z'))
           then
!             if C = ':' then
!                Obsolescent_Check (Scan_Ptr);
! 
!                if Warn_On_Obsolescent_Feature then
!                   Error_Msg_S
!                     ("use of "":"" is an obsolescent feature ('R'M 'J.2(3))?");
!                   Error_Msg_S
!                     ("\use ""'#"" instead?");
!                end if;
              end if;
  
              Accumulate_Checksum (C);
*************** package body Scng is
*** 691,697 ****
                                    Den   => -UI_Scale,
                                    Rbase => Base);
  
!             --  Case of integer literal to be returned
  
           else
              Token := Tok_Integer_Literal;
--- 772,778 ----
                                    Den   => -UI_Scale,
                                    Rbase => Base);
  
!          --  Case of integer literal to be returned
  
           else
              Token := Tok_Integer_Literal;
*************** package body Scng is
*** 699,707 ****
              if UI_Scale = 0 then
                 Int_Literal_Value := UI_Num_Value;
  
!                --  Avoid doing possibly expensive calculations in cases like
!                --  parsing 163E800_000# when semantics will not be done anyway.
!                --  This is especially useful when parsing garbled input.
  
              elsif Operating_Mode /= Check_Syntax
                and then (Serious_Errors_Detected = 0 or else Try_Semantics)
--- 780,788 ----
              if UI_Scale = 0 then
                 Int_Literal_Value := UI_Num_Value;
  
!             --  Avoid doing possibly expensive calculations in cases like
!             --  parsing 163E800_000# when semantics will not be done anyway.
!             --  This is especially useful when parsing garbled input.
  
              elsif Operating_Mode /= Check_Syntax
                and then (Serious_Errors_Detected = 0 or else Try_Semantics)
*************** package body Scng is
*** 710,722 ****
  
              else
                 Int_Literal_Value := No_Uint;
- 
              end if;
- 
           end if;
  
!          return;
  
        end Nlit;
  
        ----------
--- 791,802 ----
  
              else
                 Int_Literal_Value := No_Uint;
              end if;
           end if;
  
!          Accumulate_Token_Checksum;
  
+          return;
        end Nlit;
  
        ----------
*************** package body Scng is
*** 739,746 ****
  
           procedure Error_Bad_String_Char;
           --  Signal bad character in string/character literal. On entry
!          --  Scan_Ptr points to the improper character encountered during
!          --  the scan. Scan_Ptr is not modified, so it still points to the bad
           --  character on return.
  
           procedure Error_Unterminated_String;
--- 819,826 ----
  
           procedure Error_Bad_String_Char;
           --  Signal bad character in string/character literal. On entry
!          --  Scan_Ptr points to the improper character encountered during the
!          --  scan. Scan_Ptr is not modified, so it still points to the bad
           --  character on return.
  
           procedure Error_Unterminated_String;
*************** package body Scng is
*** 750,760 ****
  
           procedure Set_String;
           --  Procedure used to distinguish between string and operator symbol.
!          --  On entry the string has been scanned out, and its characters start
!          --  at Token_Ptr and end one character before Scan_Ptr. On exit Token
!          --  is set to Tok_String_Literal or Tok_Operator_Symbol as
!          --  appropriate, and Token_Node is appropriately initialized.
!          --  In addition, in the operator symbol case, Token_Name is
           --  appropriately set.
  
           ---------------------------
--- 830,840 ----
  
           procedure Set_String;
           --  Procedure used to distinguish between string and operator symbol.
!          --  On entry the string has been scanned out, and its characters
!          --  start at Token_Ptr and end one character before Scan_Ptr. On exit
!          --  Token is set to Tok_String_Literal or Tok_Operator_Symbol as
!          --  appropriate, and Token_Node is appropriately initialized. In
!          --  addition, in the operator symbol case, Token_Name is
           --  appropriately set.
  
           ---------------------------
*************** package body Scng is
*** 958,966 ****
  
              end if;
  
!             --  If it is an operator symbol, then Token_Name is set.
!             --  If it is some other string value, then Token_Name still
!             --  contains Error_Name.
  
              if Token_Name = Error_Name then
                 Token := Tok_String_Literal;
--- 1038,1046 ----
  
              end if;
  
!             --  If it is an operator symbol, then Token_Name is set. If it is
!             --  some other string value, then Token_Name still contains
!             --  Error_Name.
  
              if Token_Name = Error_Name then
                 Token := Tok_String_Literal;
*************** package body Scng is
*** 968,985 ****
              else
                 Token := Tok_Operator_Symbol;
              end if;
- 
           end Set_String;
  
!          ----------
!          -- Slit --
!          ----------
  
        begin
           --  On entry, Scan_Ptr points to the opening character of the string
!          --  which is either a percent, double quote, or apostrophe
!          --  (single quote). The latter case is an error detected by
!          --  the character literal circuit.
  
           Delimiter := Source (Scan_Ptr);
           Accumulate_Checksum (Delimiter);
--- 1048,1062 ----
              else
                 Token := Tok_Operator_Symbol;
              end if;
           end Set_String;
  
!       --  Start of processing for Slit
  
        begin
           --  On entry, Scan_Ptr points to the opening character of the string
!          --  which is either a percent, double quote, or apostrophe (single
!          --  quote). The latter case is an error detected by the character
!          --  literal circuit.
  
           Delimiter := Source (Scan_Ptr);
           Accumulate_Checksum (Delimiter);
*************** package body Scng is
*** 1007,1034 ****
                    Scan_Ptr := Scan_Ptr + 1;
  
                 elsif (C = ESC
!                         and then
!                         Wide_Character_Encoding_Method
!                                              in WC_ESC_Encoding_Method)
!                  or else
!                  (C in Upper_Half_Character
!                     and then
!                     Upper_Half_Encoding)
!                  or else
!                  (C = '['
!                     and then
!                     Source (Scan_Ptr + 1) = '"'
!                     and then
!                     Identifier_Char (Source (Scan_Ptr + 2)))
                 then
                    Scan_Wide (Source, Scan_Ptr, Code, Err);
-                   Accumulate_Checksum (Code);
  
                    if Err then
                       Error_Illegal_Wide_Character;
                       Code := Get_Char_Code (' ');
                    end if;
  
                 else
                    Accumulate_Checksum (C);
  
--- 1084,1115 ----
                    Scan_Ptr := Scan_Ptr + 1;
  
                 elsif (C = ESC
!                         and then Wide_Character_Encoding_Method
!                                    in WC_ESC_Encoding_Method)
!                  or else (C in Upper_Half_Character
!                             and then Upper_Half_Encoding)
!                  or else (C = '['
!                             and then Source (Scan_Ptr + 1) = '"'
!                             and then Identifier_Char (Source (Scan_Ptr + 2)))
                 then
+                   Wptr := Scan_Ptr;
                    Scan_Wide (Source, Scan_Ptr, Code, Err);
  
                    if Err then
                       Error_Illegal_Wide_Character;
                       Code := Get_Char_Code (' ');
                    end if;
  
+                   Accumulate_Checksum (Code);
+ 
+                   if Ada_Version >= Ada_05
+                     and then Is_UTF_32_Non_Graphic (Code)
+                   then
+                      Error_Msg
+                        ("(Ada 2005) non-graphic character not permitted " &
+                         "in string literal", Wptr);
+                   end if;
+ 
                 else
                    Accumulate_Checksum (C);
  
*************** package body Scng is
*** 1038,1044 ****
                          exit;
  
                       elsif C in Upper_Half_Character then
!                         if Ada_83 then
                             Error_Bad_String_Char;
                          end if;
  
--- 1119,1125 ----
                          exit;
  
                       elsif C in Upper_Half_Character then
!                         if Ada_Version = Ada_83 then
                             Error_Bad_String_Char;
                          end if;
  
*************** package body Scng is
*** 1062,1071 ****
           String_Literal_Id := End_String;
           Set_String;
           return;
- 
        end Slit;
  
!    --  Start of body of Scan
  
     begin
        Prev_Token := Token;
--- 1143,1151 ----
           String_Literal_Id := End_String;
           Set_String;
           return;
        end Slit;
  
!    --  Start of processing for Scan
  
     begin
        Prev_Token := Token;
*************** package body Scng is
*** 1077,1087 ****
        --  encountered and skipped, or some error situation, such as an
        --  illegal character, is encountered.
  
        loop
           --  Skip past blanks, loop is opened up for speed
  
           while Source (Scan_Ptr) = ' ' loop
- 
              if Source (Scan_Ptr + 1) /= ' ' then
                 Scan_Ptr := Scan_Ptr + 1;
                 exit;
--- 1157,1168 ----
        --  encountered and skipped, or some error situation, such as an
        --  illegal character, is encountered.
  
+       <<Scan_Next_Character>>
+ 
        loop
           --  Skip past blanks, loop is opened up for speed
  
           while Source (Scan_Ptr) = ' ' loop
              if Source (Scan_Ptr + 1) /= ' ' then
                 Scan_Ptr := Scan_Ptr + 1;
                 exit;
*************** package body Scng is
*** 1125,1174 ****
  
           Token_Ptr := Scan_Ptr;
  
!          --  Here begins the main case statement which transfers control on
!          --  the basis of the non-blank character we have encountered.
  
           case Source (Scan_Ptr) is
  
           --  Line terminator characters
  
!          when CR | LF | FF | VT => Line_Terminator_Case : begin
! 
!             --  Check line too long
! 
!             Check_End_Of_Line;
! 
!             --  Set Token_Ptr, if End_Of_Line is a token, for the case when
!             --  it is a physical line.
! 
!             if End_Of_Line_Is_Token then
!                Token_Ptr := Scan_Ptr;
!             end if;
! 
!             declare
!                Physical : Boolean;
! 
!             begin
!                Skip_Line_Terminators (Scan_Ptr, Physical);
! 
!                --  If we are at start of physical line, update scan pointers
!                --  to reflect the start of the new line.
! 
!                if Physical then
!                   Current_Line_Start       := Scan_Ptr;
!                   Start_Column             := Set_Start_Column;
!                   First_Non_Blank_Location := Scan_Ptr;
! 
!                   --  If End_Of_Line is a token, we return it as it is
!                   --  a physical line.
! 
!                   if End_Of_Line_Is_Token then
!                      Token := Tok_End_Of_Line;
!                      return;
!                   end if;
!                end if;
!             end;
!          end Line_Terminator_Case;
  
           --  Horizontal tab, just skip past it
  
--- 1206,1220 ----
  
           Token_Ptr := Scan_Ptr;
  
!          --  Here begins the main case statement which transfers control on the
!          --  basis of the non-blank character we have encountered.
  
           case Source (Scan_Ptr) is
  
           --  Line terminator characters
  
!          when CR | LF | FF | VT =>
!             goto Scan_Line_Terminator;
  
           --  Horizontal tab, just skip past it
  
*************** package body Scng is
*** 1176,1190 ****
              if Style_Check then Style.Check_HT; end if;
              Scan_Ptr := Scan_Ptr + 1;
  
!          --  End of file character, treated as an end of file only if it
!          --  is the last character in the buffer, otherwise it is ignored.
  
           when EOF =>
              if Scan_Ptr = Source_Last (Current_Source_File) then
                 Check_End_Of_Line;
                 Token := Tok_EOF;
                 return;
- 
              else
                 Scan_Ptr := Scan_Ptr + 1;
              end if;
--- 1222,1235 ----
              if Style_Check then Style.Check_HT; end if;
              Scan_Ptr := Scan_Ptr + 1;
  
!          --  End of file character, treated as an end of file only if it is
!          --  the last character in the buffer, otherwise it is ignored.
  
           when EOF =>
              if Scan_Ptr = Source_Last (Current_Source_File) then
                 Check_End_Of_Line;
                 Token := Tok_EOF;
                 return;
              else
                 Scan_Ptr := Scan_Ptr + 1;
              end if;
*************** package body Scng is
*** 1206,1213 ****
                 return;
              end if;
  
!          --  Asterisk (can be multiplication operator or double asterisk
!          --  which is the exponentiation compound delimiter).
  
           when '*' =>
              Accumulate_Checksum ('*');
--- 1251,1258 ----
                 return;
              end if;
  
!          --  Asterisk (can be multiplication operator or double asterisk which
!          --  is the exponentiation compound delimiter).
  
           when '*' =>
              Accumulate_Checksum ('*');
*************** package body Scng is
*** 1263,1270 ****
  
           when '[' =>
              if Source (Scan_Ptr + 1) = '"' then
!                Name_Len := 0;
!                goto Scan_Identifier;
  
              else
                 Error_Msg_S ("illegal character, replaced by ""(""");
--- 1308,1314 ----
  
           when '[' =>
              if Source (Scan_Ptr + 1) = '"' then
!                goto Scan_Wide_Character;
  
              else
                 Error_Msg_S ("illegal character, replaced by ""(""");
*************** package body Scng is
*** 1290,1298 ****
              if Style_Check then Style.Check_Comma; end if;
              return;
  
!          --  Dot, which is either an isolated period, or part of a double
!          --  dot compound delimiter sequence. We also check for the case of
!          --  a digit following the period, to give a better error message.
  
           when '.' =>
              Accumulate_Checksum ('.');
--- 1334,1342 ----
              if Style_Check then Style.Check_Comma; end if;
              return;
  
!          --  Dot, which is either an isolated period, or part of a double dot
!          --  compound delimiter sequence. We also check for the case of a
!          --  digit following the period, to give a better error message.
  
           when '.' =>
              Accumulate_Checksum ('.');
*************** package body Scng is
*** 1407,1412 ****
--- 1451,1465 ----
                 loop
                    --  Scan to non graphic character (opened up for speed)
  
+                   --  Note that we just eat left brackets, which means that
+                   --  bracket notation cannot be used for end of line
+                   --  characters in comments. This seems a reasonable choice,
+                   --  since no one would ever use brackets notation in a real
+                   --  program in this situation, and if we allow brackets
+                   --  notation, we forbid some valid comments which contain a
+                   --  brackets sequence that happens to match an end of line
+                   --  character.
+ 
                    loop
                       exit when Source (Scan_Ptr) not in Graphic_Character;
                       Scan_Ptr := Scan_Ptr + 1;
*************** package body Scng is
*** 1437,1449 ****
                    elsif Source (Scan_Ptr) = EOF then
                       exit;
  
                    --  Keep going if character in 80-FF range, or is ESC. These
                    --  characters are allowed in comments by RM-2.1(1), 2.7(2).
                    --  They are allowed even in Ada 83 mode according to the
                    --  approved AI. ESC was added to the AI in June 93.
  
                    elsif Source (Scan_Ptr) in Upper_Half_Character
!                     or else Source (Scan_Ptr) = ESC
                    then
                       Scan_Ptr := Scan_Ptr + 1;
  
--- 1490,1533 ----
                    elsif Source (Scan_Ptr) = EOF then
                       exit;
  
+                   --  If we have a wide character, we have to scan it out,
+                   --  because it might be a legitimate line terminator
+ 
+                   elsif (Source (Scan_Ptr) = ESC
+                            and then Identifier_Char (ESC))
+                     or else
+                          (Source (Scan_Ptr) in Upper_Half_Character
+                             and then Upper_Half_Encoding)
+                   then
+                      declare
+                         Wptr : constant Source_Ptr := Scan_Ptr;
+                         Code : Char_Code;
+                         Err  : Boolean;
+ 
+                      begin
+                         Scan_Wide (Source, Scan_Ptr, Code, Err);
+ 
+                         --  If not well formed wide character, then just skip
+                         --  past it and ignore it.
+ 
+                         if Err then
+                            Scan_Ptr := Wptr + 1;
+ 
+                         --  If UTF_32 terminator, terminate comment scan
+ 
+                         elsif Is_UTF_32_Line_Terminator (Code) then
+                            Scan_Ptr := Wptr;
+                            exit;
+                         end if;
+                      end;
+ 
                    --  Keep going if character in 80-FF range, or is ESC. These
                    --  characters are allowed in comments by RM-2.1(1), 2.7(2).
                    --  They are allowed even in Ada 83 mode according to the
                    --  approved AI. ESC was added to the AI in June 93.
  
                    elsif Source (Scan_Ptr) in Upper_Half_Character
!                      or else Source (Scan_Ptr) = ESC
                    then
                       Scan_Ptr := Scan_Ptr + 1;
  
*************** package body Scng is
*** 1452,1458 ****
                    else
                       Error_Illegal_Character;
                    end if;
- 
                 end loop;
  
                 --  Note that, except when comments are tokens, we do NOT
--- 1536,1541 ----
*************** package body Scng is
*** 1480,1485 ****
--- 1563,1570 ----
           --  Percent starting a string literal
  
           when '%' =>
+             Obsolescent_Check (Token_Ptr);
+ 
              if Warn_On_Obsolescent_Feature then
                 Error_Msg_S
                   ("use of ""'%"" is an obsolescent feature ('R'M 'J.2(4))?");
*************** package body Scng is
*** 1513,1522 ****
              --  Here is where we make the test to distinguish the cases. Treat
              --  as apostrophe if previous token is an identifier, right paren
              --  or the reserved word "all" (latter case as in A.all'Address)
!             --  (or the reserved word "project" in project files).
!             --  Also treat it as apostrophe after a literal (this catches
!             --  some legitimate cases, like A."abs"'Address, and also gives
!             --  better error behavior for impossible cases like 123'xxx).
  
              if Prev_Token = Tok_Identifier
                 or else Prev_Token = Tok_Right_Paren
--- 1598,1607 ----
              --  Here is where we make the test to distinguish the cases. Treat
              --  as apostrophe if previous token is an identifier, right paren
              --  or the reserved word "all" (latter case as in A.all'Address)
!             --  (or the reserved word "project" in project files). Also treat
!             --  it as apostrophe after a literal (this catches some legitimate
!             --  cases, like A."abs"'Address, and also gives better error
!             --  behavior for impossible cases like 123'xxx).
  
              if Prev_Token = Tok_Identifier
                 or else Prev_Token = Tok_Right_Paren
*************** package body Scng is
*** 1531,1537 ****
              --  Otherwise the apostrophe starts a character literal
  
              else
!                --  Case of wide character literal with ESC or [ encoding
  
                 if (Source (Scan_Ptr) = ESC
                       and then
--- 1616,1622 ----
              --  Otherwise the apostrophe starts a character literal
  
              else
!                --  Case of wide character literal
  
                 if (Source (Scan_Ptr) = ESC
                       and then
*************** package body Scng is
*** 1545,1555 ****
--- 1630,1649 ----
                       and then
                      Source (Scan_Ptr + 1) = '"')
                 then
+                   Wptr := Scan_Ptr;
                    Scan_Wide (Source, Scan_Ptr, Code, Err);
                    Accumulate_Checksum (Code);
  
                    if Err then
                       Error_Illegal_Wide_Character;
+                      Code := Character'Pos (' ');
+ 
+                   elsif Ada_Version >= Ada_05
+                     and then Is_UTF_32_Non_Graphic (Code)
+                   then
+                      Error_Msg
+                        ("(Ada 2005) non-graphic character not permitted " &
+                         "in character literal", Wptr);
                    end if;
  
                    if Source (Scan_Ptr) /= ''' then
*************** package body Scng is
*** 1565,1571 ****
                 --  apostrophe instead since this gives better error recovery
  
                 elsif Source (Scan_Ptr + 1) /= ''' then
- 
                    if Prev_Token = Tok_Range then
                       Token := Tok_Apostrophe;
                       return;
--- 1659,1664 ----
*************** package body Scng is
*** 1586,1592 ****
  
                    if Source (Scan_Ptr) not in Graphic_Character then
                       if Source (Scan_Ptr) in Upper_Half_Character then
!                         if Ada_83 then
                             Error_Illegal_Character;
                          end if;
  
--- 1679,1685 ----
  
                    if Source (Scan_Ptr) not in Graphic_Character then
                       if Source (Scan_Ptr) in Upper_Half_Character then
!                         if Ada_Version = Ada_83 then
                             Error_Illegal_Character;
                          end if;
  
*************** package body Scng is
*** 1677,1682 ****
--- 1770,1776 ----
  
           when '!' => Exclamation_Case : begin
              Accumulate_Checksum ('!');
+             Obsolescent_Check (Token_Ptr);
  
              if Warn_On_Obsolescent_Feature then
                 Error_Msg_S
*************** package body Scng is
*** 1696,1702 ****
                 Token := Tok_Vertical_Bar;
                 return;
              end if;
- 
           end Exclamation_Case;
  
           --  Plus
--- 1790,1795 ----
*************** package body Scng is
*** 1724,1729 ****
--- 1817,1823 ----
  
           when 'a' .. 'z' =>
              Name_Len := 1;
+             Underline_Found := False;
              Name_Buffer (1) := Source (Scan_Ptr);
              Accumulate_Checksum (Name_Buffer (1));
              Scan_Ptr := Scan_Ptr + 1;
*************** package body Scng is
*** 1733,1738 ****
--- 1827,1833 ----
  
           when 'A' .. 'Z' =>
              Name_Len := 1;
+             Underline_Found := False;
              Name_Buffer (1) :=
                Character'Val (Character'Pos (Source (Scan_Ptr)) + 32);
              Accumulate_Checksum (Name_Buffer (1));
*************** package body Scng is
*** 1754,1759 ****
--- 1849,1855 ----
              Name_Len := 1;
              Name_Buffer (1) := '_';
              Scan_Ptr := Scan_Ptr + 1;
+             Underline_Found := False;
              goto Scan_Identifier;
  
           --  Space (not possible, because we scanned past blanks)
*************** package body Scng is
*** 1765,1787 ****
  
           when Upper_Half_Character =>
  
!             --  Wide character case. Note that Scan_Identifier will issue
!             --  an appropriate message if wide characters are not allowed
!             --  in identifiers.
  
              if Upper_Half_Encoding then
!                Name_Len := 0;
!                goto Scan_Identifier;
  
              --  Otherwise we have OK Latin-1 character
  
              else
                 --  Upper half characters may possibly be identifier letters
!                --  but can never be digits, so Identifier_Char can be used
!                --  to test for a valid start of identifier character.
  
                 if Identifier_Char (Source (Scan_Ptr)) then
                    Name_Len := 0;
                    goto Scan_Identifier;
                 else
                    Error_Illegal_Character;
--- 1861,1881 ----
  
           when Upper_Half_Character =>
  
!             --  Wide character case
  
              if Upper_Half_Encoding then
!                goto Scan_Wide_Character;
  
              --  Otherwise we have OK Latin-1 character
  
              else
                 --  Upper half characters may possibly be identifier letters
!                --  but can never be digits, so Identifier_Char can be used to
!                --  test for a valid start of identifier character.
  
                 if Identifier_Char (Source (Scan_Ptr)) then
                    Name_Len := 0;
+                   Underline_Found := False;
                    goto Scan_Identifier;
                 else
                    Error_Illegal_Character;
*************** package body Scng is
*** 1793,1805 ****
              --  ESC character, possible start of identifier if wide characters
              --  using ESC encoding are allowed in identifiers, which we can
              --  tell by looking at the Identifier_Char flag for ESC, which is
!             --  only true if these conditions are met.
  
              if Identifier_Char (ESC) then
                 Name_Len := 0;
!                goto Scan_Identifier;
              else
!                Error_Illegal_Wide_Character;
              end if;
  
           --  Invalid control characters
--- 1887,1900 ----
              --  ESC character, possible start of identifier if wide characters
              --  using ESC encoding are allowed in identifiers, which we can
              --  tell by looking at the Identifier_Char flag for ESC, which is
!             --  only true if these conditions are met. In Ada 2005 mode, may
!             --  also be valid UTF_32 space or line terminator character.
  
              if Identifier_Char (ESC) then
                 Name_Len := 0;
!                goto Scan_Wide_Character;
              else
!                Error_Illegal_Character;
              end if;
  
           --  Invalid control characters
*************** package body Scng is
*** 1813,1818 ****
--- 1908,1914 ----
           --  Invalid graphic characters
  
           when '#' | '$' | '?' | '@' | '`' | '\' | '^' | '~' =>
+ 
              --  If Set_Special_Character has been called for this character,
              --  set Scans.Special_Character and return a Special token.
  
*************** package body Scng is
*** 1823,1829 ****
                 Scan_Ptr := Scan_Ptr + 1;
                 return;
  
!             --  otherwise, this is an illegal character
  
              else
                 Error_Illegal_Character;
--- 1919,1925 ----
                 Scan_Ptr := Scan_Ptr + 1;
                 return;
  
!             --  Otherwise, this is an illegal character
  
              else
                 Error_Illegal_Character;
*************** package body Scng is
*** 1839,1933 ****
  
        end loop;
  
!       --  Identifier scanning routine. On entry, some initial characters
!       --  of the identifier may have already been stored in Name_Buffer.
!       --  If so, Name_Len has the number of characters stored. otherwise
!       --  Name_Len is set to zero on entry.
  
!       <<Scan_Identifier>>
  
!          --  This loop scans as fast as possible past lower half letters
!          --  and digits, which we expect to be the most common characters.
  
!          loop
!             if Source (Scan_Ptr) in 'a' .. 'z'
!               or else Source (Scan_Ptr) in '0' .. '9'
!             then
!                Name_Buffer (Name_Len + 1) := Source (Scan_Ptr);
!                Accumulate_Checksum (Source (Scan_Ptr));
  
!             elsif Source (Scan_Ptr) in 'A' .. 'Z' then
!                Name_Buffer (Name_Len + 1) :=
!                  Character'Val (Character'Pos (Source (Scan_Ptr)) + 32);
!                Accumulate_Checksum (Name_Buffer (Name_Len + 1));
!             else
!                exit;
!             end if;
  
!             --  Open out the loop a couple of times for speed
  
!             if Source (Scan_Ptr + 1) in 'a' .. 'z'
!               or else Source (Scan_Ptr + 1) in '0' .. '9'
!             then
!                Name_Buffer (Name_Len + 2) := Source (Scan_Ptr + 1);
!                Accumulate_Checksum (Source (Scan_Ptr + 1));
  
!             elsif Source (Scan_Ptr + 1) in 'A' .. 'Z' then
!                Name_Buffer (Name_Len + 2) :=
!                  Character'Val (Character'Pos (Source (Scan_Ptr + 1)) + 32);
!                Accumulate_Checksum (Name_Buffer (Name_Len + 2));
  
              else
!                Scan_Ptr := Scan_Ptr + 1;
!                Name_Len := Name_Len + 1;
!                exit;
              end if;
  
!             if Source (Scan_Ptr + 2) in 'a' .. 'z'
!               or else Source (Scan_Ptr + 2) in '0' .. '9'
!             then
!                Name_Buffer (Name_Len + 3) := Source (Scan_Ptr + 2);
!                Accumulate_Checksum (Source (Scan_Ptr + 2));
  
!             elsif Source (Scan_Ptr + 2) in 'A' .. 'Z' then
!                Name_Buffer (Name_Len + 3) :=
!                  Character'Val (Character'Pos (Source (Scan_Ptr + 2)) + 32);
!                Accumulate_Checksum (Name_Buffer (Name_Len + 3));
!             else
!                Scan_Ptr := Scan_Ptr + 2;
!                Name_Len := Name_Len + 2;
!                exit;
              end if;
  
!             if Source (Scan_Ptr + 3) in 'a' .. 'z'
!               or else Source (Scan_Ptr + 3) in '0' .. '9'
              then
!                Name_Buffer (Name_Len + 4) := Source (Scan_Ptr + 3);
!                Accumulate_Checksum (Source (Scan_Ptr + 3));
  
!             elsif Source (Scan_Ptr + 3) in 'A' .. 'Z' then
!                Name_Buffer (Name_Len + 4) :=
!                  Character'Val (Character'Pos (Source (Scan_Ptr + 3)) + 32);
!                Accumulate_Checksum (Name_Buffer (Name_Len + 4));
  
              else
-                Scan_Ptr := Scan_Ptr + 3;
-                Name_Len := Name_Len + 3;
                 exit;
              end if;
  
!             Scan_Ptr := Scan_Ptr + 4;
!             Name_Len := Name_Len + 4;
           end loop;
  
           --  If we fall through, then we have encountered either an underline
           --  character, or an extended identifier character (i.e. one from the
!          --  upper half), or a wide character, or an identifier terminator.
!          --  The initial test speeds us up in the most common case where we
!          --  have an identifier terminator. Note that ESC is an identifier
!          --  character only if a wide character encoding method that uses
!          --  ESC encoding is active, so if we find an ESC character we know
!          --  that we have a wide character.
  
           if Identifier_Char (Source (Scan_Ptr)) then
  
--- 1935,2111 ----
  
        end loop;
  
!       --  Wide_Character scanning routine. On entry we have encountered the
!       --  initial character of a wide character sequence.
  
!       <<Scan_Wide_Character>>
  
!          declare
!             Code : Char_Code;
!             Err  : Boolean;
  
!          begin
!             Wptr := Scan_Ptr;
!             Scan_Wide (Source, Scan_Ptr, Code, Err);
  
!             --  If bad wide character, signal error and continue scan
  
!             if Err then
!                Error_Illegal_Wide_Character;
!                goto Scan_Next_Character;
  
!             --  If OK letter, reset scan ptr and go scan identifier
  
!             elsif Is_UTF_32_Letter (Code) then
!                Scan_Ptr := Wptr;
!                Name_Len := 0;
!                Underline_Found := False;
!                goto Scan_Identifier;
! 
!             --  If OK wide space, ignore and keep scanning (we do not include
!             --  any ignored spaces in checksum)
! 
!             elsif Is_UTF_32_Space (Code) then
!                goto Scan_Next_Character;
! 
!             --  If OK wide line terminator, terminate current line
! 
!             elsif Is_UTF_32_Line_Terminator (Code) then
!                Scan_Ptr := Wptr;
!                goto Scan_Line_Terminator;
! 
!             --  Punctuation is an error (at start of identifier)
! 
!             elsif Is_UTF_32_Punctuation (Code) then
!                Error_Msg
!                  ("identifier cannot start with punctuation", Wptr);
!                Scan_Ptr := Wptr;
!                Name_Len := 0;
!                Underline_Found := False;
!                goto Scan_Identifier;
! 
!             --  Mark character is an error (at start of identifer)
! 
!             elsif Is_UTF_32_Mark (Code) then
!                Error_Msg
!                  ("identifier cannot start with mark character", Wptr);
!                Scan_Ptr := Wptr;
!                Name_Len := 0;
!                Underline_Found := False;
!                goto Scan_Identifier;
! 
!             --  Other format character is an error (at start of identifer)
! 
!             elsif Is_UTF_32_Other (Code) then
!                Error_Msg
!                  ("identifier cannot start with other format character", Wptr);
!                Scan_Ptr := Wptr;
!                Name_Len := 0;
!                Underline_Found := False;
!                goto Scan_Identifier;
! 
!             --  Extended digit character is an error. Could be bad start of
!             --  identifier or bad literal. Not worth doing too much to try to
!             --  distinguish these cases, but we will do a little bit.
! 
!             elsif Is_UTF_32_Digit (Code) then
!                Error_Msg
!                  ("identifier cannot start with digit character", Wptr);
!                Scan_Ptr := Wptr;
!                Name_Len := 0;
!                Underline_Found := False;
!                goto Scan_Identifier;
! 
!             --  All other wide characters are illegal here
  
              else
!                Error_Illegal_Wide_Character;
!                goto Scan_Next_Character;
              end if;
+          end;
  
!       --  Routine to scan line terminator. On entry Scan_Ptr points to a
!       --  character which is one of FF,LR,CR,VT, or one of the wide characters
!       --  that is treated as a line termiantor.
  
!       <<Scan_Line_Terminator>>
! 
!          --  Check line too long
! 
!          Check_End_Of_Line;
! 
!          --  Set Token_Ptr, if End_Of_Line is a token, for the case when it is
!          --  a physical line.
! 
!          if End_Of_Line_Is_Token then
!             Token_Ptr := Scan_Ptr;
!          end if;
! 
!          declare
!             Physical : Boolean;
! 
!          begin
!             Skip_Line_Terminators (Scan_Ptr, Physical);
! 
!             --  If we are at start of physical line, update scan pointers to
!             --  reflect the start of the new line.
! 
!             if Physical then
!                Current_Line_Start       := Scan_Ptr;
!                Start_Column             := Set_Start_Column;
!                First_Non_Blank_Location := Scan_Ptr;
! 
!                --  If End_Of_Line is a token, we return it as it is a
!                --  physical line.
! 
!                if End_Of_Line_Is_Token then
!                   Token := Tok_End_Of_Line;
!                   return;
!                end if;
              end if;
+          end;
  
!          goto Scan_Next_Character;
! 
!       --  Identifier scanning routine. On entry, some initial characters of
!       --  the identifier may have already been stored in Name_Buffer. If so,
!       --  Name_Len has the number of characters stored. otherwise Name_Len is
!       --  set to zero on entry. Underline_Found is also set False on entry.
! 
!       <<Scan_Identifier>>
! 
!          --  This loop scans as fast as possible past lower half letters and
!          --  digits, which we expect to be the most common characters.
! 
!          loop
!             if Source (Scan_Ptr) in 'a' .. 'z'
!               or else Source (Scan_Ptr) in '0' .. '9'
              then
!                Name_Buffer (Name_Len + 1) := Source (Scan_Ptr);
!                Accumulate_Checksum (Source (Scan_Ptr));
  
!             elsif Source (Scan_Ptr) in 'A' .. 'Z' then
!                Name_Buffer (Name_Len + 1) :=
!                  Character'Val (Character'Pos (Source (Scan_Ptr)) + 32);
!                Accumulate_Checksum (Name_Buffer (Name_Len + 1));
  
              else
                 exit;
              end if;
  
!             Underline_Found := False;
!             Scan_Ptr := Scan_Ptr + 1;
!             Name_Len := Name_Len + 1;
           end loop;
  
           --  If we fall through, then we have encountered either an underline
           --  character, or an extended identifier character (i.e. one from the
!          --  upper half), or a wide character, or an identifier terminator. The
!          --  initial test speeds us up in the most common case where we have
!          --  an identifier terminator. Note that ESC is an identifier character
!          --  only if a wide character encoding method that uses ESC encoding
!          --  is active, so if we find an ESC character we know that we have a
!          --  wide character.
  
           if Identifier_Char (Source (Scan_Ptr)) then
  
*************** package body Scng is
*** 1936,1957 ****
              if Source (Scan_Ptr) = '_' then
                 Accumulate_Checksum ('_');
  
!                --  Check error case of identifier ending with underscore
!                --  In this case we ignore the underscore and do not store it.
! 
!                if not Identifier_Char (Source (Scan_Ptr + 1)) then
!                   Error_Msg_S ("identifier cannot end with underline");
!                   Scan_Ptr := Scan_Ptr + 1;
! 
!                --  Check error case of two underscores. In this case we do
!                --  not store the first underscore (we will store the second)
! 
!                elsif Source (Scan_Ptr + 1) = '_' then
!                      Error_No_Double_Underline;
! 
!                --  Normal case of legal underscore
! 
                 else
                    Name_Len := Name_Len + 1;
                    Name_Buffer (Name_Len) := '_';
                 end if;
--- 2114,2123 ----
              if Source (Scan_Ptr) = '_' then
                 Accumulate_Checksum ('_');
  
!                if Underline_Found then
!                   Error_No_Double_Underline;
                 else
+                   Underline_Found := True;
                    Name_Len := Name_Len + 1;
                    Name_Buffer (Name_Len) := '_';
                 end if;
*************** package body Scng is
*** 1968,1973 ****
--- 2134,2140 ----
                 Store_Encoded_Character
                   (Get_Char_Code (Fold_Lower (Source (Scan_Ptr))));
                 Scan_Ptr := Scan_Ptr + 1;
+                Underline_Found := False;
                 goto Scan_Identifier;
  
              --  Left bracket not followed by a quote terminates an identifier.
*************** package body Scng is
*** 1988,1999 ****
                 --  encoding into the name table entry for the identifier.
  
                 declare
!                   Sptr : constant Source_Ptr := Scan_Ptr;
!                   Code : Char_Code;
!                   Err  : Boolean;
!                   Chr  : Character;
  
                 begin
                    Scan_Wide (Source, Scan_Ptr, Code, Err);
  
                    --  If error, signal error
--- 2155,2166 ----
                 --  encoding into the name table entry for the identifier.
  
                 declare
!                   Code   : Char_Code;
!                   Err    : Boolean;
!                   Chr    : Character;
  
                 begin
+                   Wptr := Scan_Ptr;
                    Scan_Wide (Source, Scan_Ptr, Code, Err);
  
                    --  If error, signal error
*************** package body Scng is
*** 2011,2057 ****
                       Accumulate_Checksum (Chr);
                       Store_Encoded_Character
                         (Get_Char_Code (Fold_Lower (Chr)));
  
!                   --  Character is not normal identifier character, store
!                   --  it in encoded form.
  
                    else
-                      Accumulate_Checksum (Code);
-                      Store_Encoded_Character (Code);
- 
                       --  Make sure we are allowing wide characters in
                       --  identifiers. Note that we allow wide character
!                      --  notation for an OK identifier character. This
!                      --  in particular allows bracket or other notation
!                      --  to be used for upper half letters.
  
!                      if Identifier_Character_Set /= 'w' then
                          Error_Msg
!                           ("wide character not allowed in identifier", Sptr);
                       end if;
                    end if;
-                end;
  
!                goto Scan_Identifier;
              end if;
           end if;
  
!          --  Scan of identifier is complete. The identifier is stored in
!          --  Name_Buffer, and Scan_Ptr points past the last character.
  
           Token_Name := Name_Find;
  
           --  Here is where we check if it was a keyword
  
           if Get_Name_Table_Byte (Token_Name) /= 0
!            and then (Ada_95 or else Token_Name not in Ada_95_Reserved_Words)
           then
              Token := Token_Type'Val (Get_Name_Table_Byte (Token_Name));
  
!             --  Deal with possible style check for non-lower case keyword,
!             --  but we don't treat ACCESS, DELTA, DIGITS, RANGE as keywords
!             --  for this purpose if they appear as attribute designators.
!             --  Actually we only check the first character for speed.
  
              if Style_Check
                and then Source (Token_Ptr) <= 'Z'
--- 2178,2304 ----
                       Accumulate_Checksum (Chr);
                       Store_Encoded_Character
                         (Get_Char_Code (Fold_Lower (Chr)));
+                      Underline_Found := False;
  
!                   --  Here if not a normal identifier character
  
                    else
                       --  Make sure we are allowing wide characters in
                       --  identifiers. Note that we allow wide character
!                      --  notation for an OK identifier character. This in
!                      --  particular allows bracket or other notation to be
!                      --  used for upper half letters.
  
!                      --  Wide characters are always allowed in Ada 2005
! 
!                      if Identifier_Character_Set /= 'w'
!                        and then Ada_Version < Ada_05
!                      then
                          Error_Msg
!                        ("wide character not allowed in identifier", Wptr);
!                      end if;
! 
!                      --  If OK letter, store it folding to upper case. Note
!                      --  that we include the folded letter in the checksum.
! 
!                      if Is_UTF_32_Letter (Code) then
!                         Code := UTF_32_To_Upper_Case (Code);
!                         Accumulate_Checksum (Code);
!                         Store_Encoded_Character (Code);
!                         Underline_Found := False;
! 
!                      --  If OK extended digit or mark, then store it
! 
!                      elsif Is_UTF_32_Digit (Code)
!                        or else Is_UTF_32_Mark (Code)
!                      then
!                         Accumulate_Checksum (Code);
!                         Store_Encoded_Character (Code);
!                         Underline_Found := False;
! 
!                      --  Wide punctuation is also stored, but counts as an
!                      --  underline character for error checking purposes.
! 
!                      elsif Is_UTF_32_Punctuation (Code) then
!                         Accumulate_Checksum (Code);
! 
!                         if Underline_Found then
!                            declare
!                               Cend : constant Source_Ptr := Scan_Ptr;
!                            begin
!                               Scan_Ptr := Wptr;
!                               Error_No_Double_Underline;
!                               Scan_Ptr := Cend;
!                            end;
! 
!                         else
!                            Store_Encoded_Character (Code);
!                            Underline_Found := True;
!                         end if;
! 
!                      --  Wide character in Unicode cateogory "Other, Format"
!                      --  is accepted in an identifier, but is ignored and not
!                      --  stored. It seems reasonable to exclude it from the
!                      --  checksum.
! 
!                      elsif Is_UTF_32_Other (Code) then
!                         null;
! 
!                      --  Wide character in category Separator,Space terminates
! 
!                      elsif Is_UTF_32_Space (Code) then
!                         goto Scan_Identifier_Complete;
! 
!                      --  Any other wide character is not acceptable
! 
!                      else
!                         Error_Msg
!                           ("invalid wide character in identifier", Wptr);
                       end if;
                    end if;
  
!                   goto Scan_Identifier;
!                end;
              end if;
           end if;
  
!       --  Scan of identifier is complete. The identifier is stored in
!       --  Name_Buffer, and Scan_Ptr points past the last character.
  
+       <<Scan_Identifier_Complete>>
           Token_Name := Name_Find;
  
+          --  Check for identifier ending with underline or punctuation char
+ 
+          if Underline_Found then
+             Underline_Found := False;
+ 
+             if Source (Scan_Ptr - 1) = '_' then
+                Error_Msg
+                  ("identifier cannot end with underline", Scan_Ptr - 1);
+             else
+                Error_Msg
+                  ("identifier cannot end with punctuation character", Wptr);
+             end if;
+          end if;
+ 
           --  Here is where we check if it was a keyword
  
           if Get_Name_Table_Byte (Token_Name) /= 0
!            and then (Ada_Version >= Ada_95
!                        or else Token_Name not in Ada_95_Reserved_Words)
!            and then (Ada_Version >= Ada_05
!                        or else Token_Name not in Ada_2005_Reserved_Words)
           then
              Token := Token_Type'Val (Get_Name_Table_Byte (Token_Name));
  
!             --  Deal with possible style check for non-lower case keyword, but
!             --  we don't treat ACCESS, DELTA, DIGITS, RANGE as keywords for
!             --  this purpose if they appear as attribute designators. Actually
!             --  we only check the first character for speed.
! 
!             --  Ada 2005 (AI-284): Do not apply the style check in case of
!             --  "pragma Interface"
  
              if Style_Check
                and then Source (Token_Ptr) <= 'Z'
*************** package body Scng is
*** 2061,2086 ****
                                 and then Token /= Tok_Delta
                                 and then Token /= Tok_Digits
                                 and then Token /= Tok_Range))
              then
                 Style.Non_Lower_Case_Keyword;
              end if;
  
!             --  We must reset Token_Name since this is not an identifier
!             --  and if we leave Token_Name set, the parser gets confused
!             --  because it thinks it is dealing with an identifier instead
!             --  of the corresponding keyword.
  
              Token_Name := No_Name;
              return;
  
           --  It is an identifier after all
  
           else
              Token := Tok_Identifier;
              Post_Scan;
              return;
           end if;
     end Scan;
     --------------------------
     -- Set_Comment_As_Token --
     --------------------------
--- 2308,2340 ----
                                 and then Token /= Tok_Delta
                                 and then Token /= Tok_Digits
                                 and then Token /= Tok_Range))
+               and then (Token /= Tok_Interface
+                           or else
+                             (Token = Tok_Interface
+                                and then Prev_Token /= Tok_Pragma))
              then
                 Style.Non_Lower_Case_Keyword;
              end if;
  
!             --  We must reset Token_Name since this is not an identifier and
!             --  if we leave Token_Name set, the parser gets confused because
!             --  it thinks it is dealing with an identifier instead of the
!             --  corresponding keyword.
  
              Token_Name := No_Name;
+             Accumulate_Token_Checksum;
              return;
  
           --  It is an identifier after all
  
           else
              Token := Tok_Identifier;
+             Accumulate_Token_Checksum;
              Post_Scan;
              return;
           end if;
     end Scan;
+ 
     --------------------------
     -- Set_Comment_As_Token --
     --------------------------
diff -Nrcpad gcc-3.4.3/gcc/ada/scng.ads gcc-4.0.0/gcc/ada/scng.ads
*** gcc-3.4.3/gcc/ada/scng.ads	Mon Dec  8 10:33:15 2003
--- gcc-4.0.0/gcc/ada/scng.ads	Mon Jan  3 15:32:18 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** generic
*** 50,55 ****
--- 50,59 ----
     with procedure Error_Msg_SP (Msg : String);
     --  Output a message at the start of the previous token
  
+    with procedure Obsolescent_Check (S : Source_Ptr);
+    --  Called when one of the obsolescent character replacements is
+    --  used with S pointing to the character in question.
+ 
     with package Style is new Styleg
       (Error_Msg, Error_Msg_S, Error_Msg_SC, Error_Msg_SP);
     --  Instantiation of Styleg with the same error reporting routines
diff -Nrcpad gcc-3.4.3/gcc/ada/seh_init.c gcc-4.0.0/gcc/ada/seh_init.c
*** gcc-3.4.3/gcc/ada/seh_init.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/seh_init.c	Thu Feb 10 13:54:45 2005
***************
*** 0 ****
--- 1,234 ----
+ /****************************************************************************
+  *                                                                          *
+  *                         GNAT COMPILER COMPONENTS                         *
+  *                                                                          *
+  *                              S E H - I N I T                             *
+  *                                                                          *
+  *                          C Implementation File                           *
+  *                                                                          *
+  *             Copyright (C) 2005, Free Software Foundation, Inc.           *
+  *                                                                          *
+  * GNAT is free software;  you can  redistribute it  and/or modify it under *
+  * terms of the  GNU General Public License as published  by the Free Soft- *
+  * ware  Foundation;  either version 2,  or (at your option) any later ver- *
+  * sion.  GNAT is distributed in the hope that it will be useful, but WITH- *
+  * OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY *
+  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License *
+  * for  more details.  You should have  received  a copy of the GNU General *
+  * Public License  distributed with GNAT;  see file COPYING.  If not, write *
+  * to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, *
+  * MA 02111-1307, USA.                                                      *
+  *                                                                          *
+  * As a  special  exception,  if you  link  this file  with other  files to *
+  * produce an executable,  this file does not by itself cause the resulting *
+  * executable to be covered by the GNU General Public License. This except- *
+  * ion does not  however invalidate  any other reasons  why the  executable *
+  * file might be covered by the  GNU Public License.                        *
+  *                                                                          *
+  * GNAT was originally developed  by the GNAT team at  New York University. *
+  * Extensive contributions were provided by Ada Core Technologies Inc.      *
+  *                                                                          *
+  ****************************************************************************/
+ 
+ /*  This unit contains support for SEH (Structured Exception Handling).
+     Right now the only implementation is for Win32.  */
+ 
+ #ifdef IN_RTS
+ #include "tconfig.h"
+ #include "tsystem.h"
+ #include <sys/stat.h>
+ 
+ /* We don't have libiberty, so us malloc.  */
+ #define xmalloc(S) malloc (S)
+ 
+ #else
+ #include "config.h"
+ #include "system.h"
+ #endif
+ 
+ #include "raise.h"
+ 
+ /* Addresses of exception data blocks for predefined exceptions. */
+ extern struct Exception_Data constraint_error;
+ extern struct Exception_Data numeric_error;
+ extern struct Exception_Data program_error;
+ extern struct Exception_Data storage_error;
+ extern struct Exception_Data tasking_error;
+ extern struct Exception_Data _abort_signal;
+ 
+ #define Raise_From_Signal_Handler \
+                       ada__exceptions__raise_from_signal_handler
+ extern void Raise_From_Signal_Handler (struct Exception_Data *, const char *);
+ 
+ 
+ #ifdef _WIN32
+ 
+ #include <windows.h>
+ #include <excpt.h>
+ 
+ extern void _global_unwind2 (void *);
+ 
+ EXCEPTION_DISPOSITION __gnat_SEH_error_handler
+ (struct _EXCEPTION_RECORD*, void*, struct _CONTEXT*, void*);
+ 
+ EXCEPTION_DISPOSITION
+ __gnat_SEH_error_handler (struct _EXCEPTION_RECORD* ExceptionRecord,
+ 			  void *EstablisherFrame,
+ 			  struct _CONTEXT* ContextRecord,
+ 			  void *DispatcherContext)
+ {
+   struct Exception_Data *exception;
+   const char *msg;
+ 
+   switch (ExceptionRecord->ExceptionCode)
+     {
+     case EXCEPTION_ACCESS_VIOLATION:
+       /* If the failing address isn't maximally-aligned or if the page
+ 	 before the faulting page is not accessible, this is a program error.
+       */
+       if ((ExceptionRecord->ExceptionInformation[1] & 3) != 0
+ 	  || IsBadCodePtr
+ 	  ((void *)(ExceptionRecord->ExceptionInformation[1] + 4096)))
+ 	{
+ 	  exception = &program_error;
+ 	  msg = "EXCEPTION_ACCESS_VIOLATION";
+ 	}
+       else
+ 	{
+ 	  /* otherwise it is a stack overflow  */
+ 	  exception = &storage_error;
+ 	  msg = "stack overflow (or erroneous memory access)";
+ 	}
+       break;
+ 
+     case EXCEPTION_ARRAY_BOUNDS_EXCEEDED:
+       exception = &constraint_error;
+       msg = "EXCEPTION_ARRAY_BOUNDS_EXCEEDED";
+       break;
+ 
+     case EXCEPTION_DATATYPE_MISALIGNMENT:
+       exception = &constraint_error;
+       msg = "EXCEPTION_DATATYPE_MISALIGNMENT";
+       break;
+ 
+     case EXCEPTION_FLT_DENORMAL_OPERAND:
+       exception = &constraint_error;
+       msg = "EXCEPTION_FLT_DENORMAL_OPERAND";
+       break;
+ 
+     case EXCEPTION_FLT_DIVIDE_BY_ZERO:
+       exception = &constraint_error;
+       msg = "EXCEPTION_FLT_DENORMAL_OPERAND";
+       break;
+ 
+     case EXCEPTION_FLT_INVALID_OPERATION:
+       exception = &constraint_error;
+       msg = "EXCEPTION_FLT_INVALID_OPERATION";
+       break;
+ 
+     case EXCEPTION_FLT_OVERFLOW:
+       exception = &constraint_error;
+       msg = "EXCEPTION_FLT_OVERFLOW";
+       break;
+ 
+     case EXCEPTION_FLT_STACK_CHECK:
+       exception = &program_error;
+       msg = "EXCEPTION_FLT_STACK_CHECK";
+       break;
+ 
+     case EXCEPTION_FLT_UNDERFLOW:
+       exception = &constraint_error;
+       msg = "EXCEPTION_FLT_UNDERFLOW";
+       break;
+ 
+     case EXCEPTION_INT_DIVIDE_BY_ZERO:
+       exception = &constraint_error;
+       msg = "EXCEPTION_INT_DIVIDE_BY_ZERO";
+       break;
+ 
+     case EXCEPTION_INT_OVERFLOW:
+       exception = &constraint_error;
+       msg = "EXCEPTION_INT_OVERFLOW";
+       break;
+ 
+     case EXCEPTION_INVALID_DISPOSITION:
+       exception = &program_error;
+       msg = "EXCEPTION_INVALID_DISPOSITION";
+       break;
+ 
+     case EXCEPTION_NONCONTINUABLE_EXCEPTION:
+       exception = &program_error;
+       msg = "EXCEPTION_NONCONTINUABLE_EXCEPTION";
+       break;
+ 
+     case EXCEPTION_PRIV_INSTRUCTION:
+       exception = &program_error;
+       msg = "EXCEPTION_PRIV_INSTRUCTION";
+       break;
+ 
+     case EXCEPTION_SINGLE_STEP:
+       exception = &program_error;
+       msg = "EXCEPTION_SINGLE_STEP";
+       break;
+ 
+     case EXCEPTION_STACK_OVERFLOW:
+       exception = &storage_error;
+       msg = "EXCEPTION_STACK_OVERFLOW";
+       break;
+ 
+    default:
+       exception = &program_error;
+       msg = "unhandled signal";
+     }
+ 
+   /* This call is important as it avoids locking the second time we catch a
+      signal. Note that this routine is documented as internal to Windows and
+      should not be used.  */
+ 
+   _global_unwind2 (EstablisherFrame);
+   /* Call equivalent to RtlUnwind (EstablisherFrame, NULL, NULL, 0); */
+ 
+   Raise_From_Signal_Handler (exception, msg);
+   return 0; /* This is never reached, avoid compiler warning  */
+ }
+ 
+ /*  Install the Win32 SEH exception handler. Note that the caller must have
+     allocated 8 bytes on the stack and pass the pointer to this stack
+     space. This is needed as the SEH exception handler must be on the stack of
+     the thread.
+ 
+        int buf[2];
+ 
+        __gnat_install_SEH_handler ((void*)buf);
+ 
+        main();
+ 
+    This call must be done before calling the main procedure or the thread
+    entry. The stack space must exists during all the main run.  */
+ 
+ void
+ __gnat_install_SEH_handler (void *ER)
+ {
+   int *ptr;
+ 
+   /* put current handler in ptr */
+ 
+   asm ("mov %%fs:(0),%%ecx" : : : "%ecx");
+   asm ("mov %%ecx,%0" : "=m" (ptr));
+ 
+   ((int *)ER)[0] = (int)ptr;                       /* previous handler */
+   ((int *)ER)[1] = (int)__gnat_SEH_error_handler;  /* new handler */
+ 
+   /* ptr is the new handler, set fs:(0) with this value */
+ 
+   ptr = (int *)ER;
+   asm ("mov %0,%%ecx" : : "m" (ptr) : "%ecx");
+   asm ("mov %ecx,%fs:(0)");
+ }
+ 
+ #else /* _WIN32 */
+ /* For all non Windows targets we provide a dummy SEH install handler.  */
+ void __gnat_install_SEH_handler (void *eh ATTRIBUTE_UNUSED)
+ {
+ }
+ #endif
diff -Nrcpad gcc-3.4.3/gcc/ada/sem.adb gcc-4.0.0/gcc/ada/sem.adb
*** gcc-3.4.3/gcc/ada/sem.adb	Mon Jan 12 11:45:24 2004
--- gcc-4.0.0/gcc/ada/sem.adb	Mon Jan  3 15:43:23 2005
*************** package body Sem is
*** 1267,1274 ****
     --  Start of processing for Semantics
  
     begin
!       Compiler_State        := Analyzing;
!       Current_Sem_Unit      := Get_Cunit_Unit_Number (Comp_Unit);
  
        if Generic_Main then
           Expander_Mode_Save_And_Set (False);
--- 1267,1274 ----
     --  Start of processing for Semantics
  
     begin
!       Compiler_State   := Analyzing;
!       Current_Sem_Unit := Get_Cunit_Unit_Number (Comp_Unit);
  
        if Generic_Main then
           Expander_Mode_Save_And_Set (False);
diff -Nrcpad gcc-3.4.3/gcc/ada/sem.ads gcc-4.0.0/gcc/ada/sem.ads
*** gcc-3.4.3/gcc/ada/sem.ads	Tue Oct 21 13:42:18 2003
--- gcc-4.0.0/gcc/ada/sem.ads	Thu May 27 13:09:21 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Sem is
*** 347,366 ****
     -- Handling of Check Suppression --
     -----------------------------------
  
!    --  There are two kinds of suppress checks, scope based suppress checks
!    --  (from initial command line arguments, or from Suppress pragmas not
!    --  including an entity name). The scope based suppress checks are recorded
     --  in the Sem.Supress variable, and all that is necessary is to save the
     --  state of this variable on scope entry, and restore it on scope exit.
  
!    --  The other kind of suppress check is entity based suppress checks, from
!    --  Suppress pragmas giving an Entity_Id. These are handled as follows. If
!    --  a suppress or unsuppress pragma is encountered for a given entity, then
!    --  the flag Checks_May_Be_Suppressed is set in the entity and an entry is
!    --  made in either the Local_Entity_Suppress table (case of pragma that
!    --  appears in other than a package spec), or in the Global_Entity_Suppress
!    --  table (case of pragma that appears in a package spec, which is by the
!    --  rule of RM 11.5(7) applicable throughout the life of the entity).
  
     --  If the Checks_May_Be_Suppressed flag is set in an entity then the
     --  procedure is to search first the local and then the global suppress
--- 347,368 ----
     -- Handling of Check Suppression --
     -----------------------------------
  
!    --  There are two kinds of suppress checks: scope based suppress checks,
!    --  and entity based suppress checks.
! 
!    --  Scope based suppress chems (from initial command line arguments,
!    --  or from Suppress pragmas not including an entity name) are recorded
     --  in the Sem.Supress variable, and all that is necessary is to save the
     --  state of this variable on scope entry, and restore it on scope exit.
  
!    --  Entity based suppress checks, from Suppress pragmas giving an Entity_Id,
!    --  are handled as follows. If a suppress or unsuppress pragma is
!    --  encountered for a given entity, then the flag Checks_May_Be_Suppressed
!    --  is set in the entity and an entry is made in either the
!    --  Local_Entity_Suppress table (case of pragma that appears in other than
!    --  a package spec), or in the Global_Entity_Suppress table (case of pragma
!    --  that appears in a package spec, which is by the rule of RM 11.5(7)
!    --  applicable throughout the life of the entity).
  
     --  If the Checks_May_Be_Suppressed flag is set in an entity then the
     --  procedure is to search first the local and then the global suppress
diff -Nrcpad gcc-3.4.3/gcc/ada/sem_aggr.adb gcc-4.0.0/gcc/ada/sem_aggr.adb
*** gcc-3.4.3/gcc/ada/sem_aggr.adb	Mon Dec  8 10:33:15 2003
--- gcc-4.0.0/gcc/ada/sem_aggr.adb	Thu Feb 10 13:50:35 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Checks;   use Checks;
*** 29,35 ****
  with Einfo;    use Einfo;
  with Elists;   use Elists;
  with Errout;   use Errout;
- with Exp_Tss;  use Exp_Tss;
  with Exp_Util; use Exp_Util;
  with Freeze;   use Freeze;
  with Itypes;   use Itypes;
--- 29,34 ----
*************** package body Sem_Aggr is
*** 78,83 ****
--- 77,85 ----
     --  statement of variant part will usually be small and probably in near
     --  sorted order.
  
+    procedure Check_Can_Never_Be_Null (N : Node_Id; Expr : Node_Id);
+    --  Ada 2005 (AI-231): Check bad usage of the null-exclusion issue
+ 
     ------------------------------------------------------
     -- Subprograms used for RECORD AGGREGATE Processing --
     ------------------------------------------------------
*************** package body Sem_Aggr is
*** 209,215 ****
     --  This procedure performs the semantic checks for an array aggregate.
     --  True is returned if the aggregate resolution succeeds.
     --  The procedure works by recursively checking each nested aggregate.
!    --  Specifically, after checking a sub-aggreate nested at the i-th level
     --  we recursively check all the subaggregates at the i+1-st level (if any).
     --  Note that for aggregates analysis and resolution go hand in hand.
     --  Aggregate analysis has been delayed up to here and it is done while
--- 211,217 ----
     --  This procedure performs the semantic checks for an array aggregate.
     --  True is returned if the aggregate resolution succeeds.
     --  The procedure works by recursively checking each nested aggregate.
!    --  Specifically, after checking a sub-aggregate nested at the i-th level
     --  we recursively check all the subaggregates at the i+1-st level (if any).
     --  Note that for aggregates analysis and resolution go hand in hand.
     --  Aggregate analysis has been delayed up to here and it is done while
*************** package body Sem_Aggr is
*** 465,470 ****
--- 467,483 ----
              Analyze_And_Resolve (Exp, Check_Typ);
              Check_Unset_Reference (Exp);
           end if;
+ 
+       --  Ada 2005 (AI-231): Generate conversion to the null-excluding
+       --  type to force the corresponding run-time check
+ 
+       elsif Is_Access_Type (Check_Typ)
+         and then Can_Never_Be_Null (Check_Typ)
+         and then not Can_Never_Be_Null (Exp_Typ)
+       then
+          Rewrite (Exp, Convert_To (Check_Typ, Relocate_Node (Exp)));
+          Analyze_And_Resolve (Exp, Check_Typ);
+          Check_Unset_Reference (Exp);
        end if;
     end Aggregate_Constraint_Checks;
  
*************** package body Sem_Aggr is
*** 824,830 ****
           C := Get_String_Char (Str, J);
           Set_Character_Literal_Name (C);
  
!          C_Node :=  Make_Character_Literal (P, Name_Find, C);
           Set_Etype (C_Node, Any_Character);
           Append_To (Exprs, C_Node);
  
--- 837,846 ----
           C := Get_String_Char (Str, J);
           Set_Character_Literal_Name (C);
  
!          C_Node :=
!            Make_Character_Literal (P,
!              Chars              => Name_Find,
!              Char_Literal_Value => UI_From_CC (C));
           Set_Etype (C_Node, Any_Character);
           Append_To (Exprs, C_Node);
  
*************** package body Sem_Aggr is
*** 867,876 ****
           Error_Msg_N ("aggregate type cannot have limited component", N);
           Explain_Limited_Type (Typ, N);
  
!       --  Ada0Y (AI-287): Limited aggregates allowed
  
        elsif Is_Limited_Type (Typ)
!         and not Extensions_Allowed
        then
           Error_Msg_N ("aggregate type cannot be limited", N);
           Explain_Limited_Type (Typ, N);
--- 883,892 ----
           Error_Msg_N ("aggregate type cannot have limited component", N);
           Explain_Limited_Type (Typ, N);
  
!       --  Ada 2005 (AI-287): Limited aggregates allowed
  
        elsif Is_Limited_Type (Typ)
!         and Ada_Version < Ada_05
        then
           Error_Msg_N ("aggregate type cannot be limited", N);
           Explain_Limited_Type (Typ, N);
*************** package body Sem_Aggr is
*** 902,909 ****
           if Number_Dimensions (Typ) = 1
             and then
               (Root_Type (Component_Type (Typ)) = Standard_Character
!                or else
!               Root_Type (Component_Type (Typ)) = Standard_Wide_Character)
             and then No (Component_Associations (N))
             and then not Is_Limited_Composite (Typ)
             and then not Is_Private_Composite (Typ)
--- 918,927 ----
           if Number_Dimensions (Typ) = 1
             and then
               (Root_Type (Component_Type (Typ)) = Standard_Character
!                 or else
!               Root_Type (Component_Type (Typ)) = Standard_Wide_Character
!                 or else
!               Root_Type (Component_Type (Typ)) = Standard_Wide_Wide_Character)
             and then No (Component_Associations (N))
             and then not Is_Limited_Composite (Typ)
             and then not Is_Private_Composite (Typ)
*************** package body Sem_Aggr is
*** 926,932 ****
  
                    Expr := First (Expressions (N));
                    while Present (Expr) loop
!                      Store_String_Char (Char_Literal_Value (Expr));
                       Next (Expr);
                    end loop;
  
--- 944,950 ----
  
                    Expr := First (Expressions (N));
                    while Present (Expr) loop
!                      Store_String_Char (UI_To_CC (Char_Literal_Value (Expr)));
                       Next (Expr);
                    end loop;
  
*************** package body Sem_Aggr is
*** 946,952 ****
  
              Aggr_Typ : constant Entity_Id := Etype (Typ);
              --  This is the unconstrained array type, which is the type
!             --  against which the aggregate is to be resoved. Typ itself
              --  is the array type of the context which may not be the same
              --  subtype as the subtype for the final aggregate.
  
--- 964,970 ----
  
              Aggr_Typ : constant Entity_Id := Etype (Typ);
              --  This is the unconstrained array type, which is the type
!             --  against which the aggregate is to be resolved. Typ itself
              --  is the array type of the context which may not be the same
              --  subtype as the subtype for the final aggregate.
  
*************** package body Sem_Aggr is
*** 963,969 ****
              --  formal parameter. Consequently we also need to test for
              --  N_Procedure_Call_Statement or N_Function_Call.
  
!             Set_Etype (N, Aggr_Typ);  --  may be overridden later on.
  
              if Is_Constrained (Typ) and then
                (Pkind = N_Assignment_Statement      or else
--- 981,994 ----
              --  formal parameter. Consequently we also need to test for
              --  N_Procedure_Call_Statement or N_Function_Call.
  
!             Set_Etype (N, Aggr_Typ);  --  may be overridden later on
! 
!             --  Ada 2005 (AI-231): Propagate the null_exclusion attribute to
!             --  the components of the array aggregate
! 
!             if Ada_Version >= Ada_05 then
!                Set_Can_Never_Be_Null (Aggr_Typ, Can_Never_Be_Null (Typ));
!             end if;
  
              if Is_Constrained (Typ) and then
                (Pkind = N_Assignment_Statement      or else
*************** package body Sem_Aggr is
*** 1378,1383 ****
--- 1403,1414 ----
                 end if;
              end if;
  
+             --  Ada 2005 (AI-231): Propagate the type to the nested aggregate.
+             --  Required to check the null-exclusion attribute (if present).
+             --  This value may be overridden later on.
+ 
+             Set_Etype (Expr, Etype (N));
+ 
              Resolution_OK := Resolve_Array_Aggregate
                (Expr, Nxt_Ind, Nxt_Ind_Constr, Component_Typ, Others_Allowed);
  
*************** package body Sem_Aggr is
*** 1461,1467 ****
                       return Failure;
                    end if;
  
!                   if Ada_83
                      and then Assoc /= First (Component_Associations (N))
                      and then (Nkind (Parent (N)) = N_Assignment_Statement
                                 or else
--- 1492,1498 ----
                       return Failure;
                    end if;
  
!                   if Ada_Version = Ada_83
                      and then Assoc /= First (Component_Associations (N))
                      and then (Nkind (Parent (N)) = N_Assignment_Statement
                                 or else
*************** package body Sem_Aggr is
*** 1644,1667 ****
                    end if;
                 end loop;
  
!                --  Ada0Y (AI-287): In case of default initialized component
                 --  we delay the resolution to the expansion phase
  
                 if Box_Present (Assoc) then
  
!                   --  Ada0Y (AI-287): In case of default initialization of a
!                   --  component the expander will generate calls to the
!                   --  corresponding initialization subprogram.
  
!                   if Present (Base_Init_Proc (Etype (Component_Typ)))
!                     or else Has_Task (Base_Type (Component_Typ))
!                   then
!                      null;
!                   else
!                      Error_Msg_N
!                        ("(Ada 0Y): no value supplied for this component",
!                         Assoc);
!                   end if;
  
                 elsif not Resolve_Aggr_Expr (Expression (Assoc),
                                              Single_Elmt => Single_Choice)
--- 1675,1696 ----
                    end if;
                 end loop;
  
!                --  Ada 2005 (AI-231)
! 
!                if Ada_Version >= Ada_05 then
!                   Check_Can_Never_Be_Null (Etype (N), Expression (Assoc));
!                end if;
! 
!                --  Ada 2005 (AI-287): In case of default initialized component
                 --  we delay the resolution to the expansion phase
  
                 if Box_Present (Assoc) then
  
!                   --  Ada 2005 (AI-287): In case of default initialization
!                   --  of a component the expander will generate calls to
!                   --  the corresponding initialization subprogram.
  
!                   null;
  
                 elsif not Resolve_Aggr_Expr (Expression (Assoc),
                                              Single_Elmt => Single_Choice)
*************** package body Sem_Aggr is
*** 1776,1781 ****
--- 1805,1816 ----
           while Present (Expr) loop
              Nb_Elements := Nb_Elements + 1;
  
+             --  Ada 2005 (AI-231)
+ 
+             if Ada_Version >= Ada_05 then
+                Check_Can_Never_Be_Null (Etype (N), Expr);
+             end if;
+ 
              if not Resolve_Aggr_Expr (Expr, Single_Elmt => True) then
                 return Failure;
              end if;
*************** package body Sem_Aggr is
*** 1786,1807 ****
           if Others_Present then
              Assoc := Last (Component_Associations (N));
  
!             --  Ada0Y (AI-287): In case of default initialized component
              --  we delay the resolution to the expansion phase.
  
              if Box_Present (Assoc) then
  
!                --  Ada0Y (AI-287): In case of default initialization of a
!                --  component the expander will generate calls to the
!                --  corresponding initialization subprogram.
  
!                if Present (Base_Init_Proc (Etype (Component_Typ))) then
!                   null;
!                else
!                   Error_Msg_N
!                     ("(Ada 0Y): no value supplied for these components",
!                      Assoc);
!                end if;
  
              elsif not Resolve_Aggr_Expr (Expression (Assoc),
                                           Single_Elmt => False)
--- 1821,1843 ----
           if Others_Present then
              Assoc := Last (Component_Associations (N));
  
!             --  Ada 2005 (AI-231)
! 
!             if Ada_Version >= Ada_05 then
!                Check_Can_Never_Be_Null
!                  (Etype (N), Expression (Assoc));
!             end if;
! 
!             --  Ada 2005 (AI-287): In case of default initialized component
              --  we delay the resolution to the expansion phase.
  
              if Box_Present (Assoc) then
  
!                --  Ada 2005 (AI-287): In case of default initialization
!                --  of a component the expander will generate calls to
!                --  the corresponding initialization subprogram.
  
!                null;
  
              elsif not Resolve_Aggr_Expr (Expression (Assoc),
                                           Single_Elmt => False)
*************** package body Sem_Aggr is
*** 1958,1968 ****
  
        elsif Is_Limited_Type (Typ) then
  
!          --  Ada0Y (AI-287): Limited aggregates are allowed
  
!          if Extensions_Allowed then
!             null;
!          else
              Error_Msg_N ("aggregate type cannot be limited", N);
              Explain_Limited_Type (Typ, N);
              return;
--- 1994,2002 ----
  
        elsif Is_Limited_Type (Typ) then
  
!          --  Ada 2005 (AI-287): Limited aggregates are allowed
  
!          if Ada_Version < Ada_05 then
              Error_Msg_N ("aggregate type cannot be limited", N);
              Explain_Limited_Type (Typ, N);
              return;
*************** package body Sem_Aggr is
*** 2032,2037 ****
--- 2066,2074 ----
                 --  less which ancestor). It is not possible to determine the
                 --  required components of the extension part.
  
+                --  This check implements AI-306, which in fact was motivated
+                --  by an ACT query to the ARG after this test was added.
+ 
                 Error_Msg_N ("ancestor part must be statically tagged", A);
              else
                 Resolve_Record_Aggregate (N, Typ);
*************** package body Sem_Aggr is
*** 2069,2076 ****
  
        Mbox_Present : Boolean := False;
        Others_Mbox  : Boolean := False;
!       --  Ada0Y (AI-287): Variables used in case of default initialization to
!       --  provide a functionality similar to Others_Etype. Mbox_Present
        --  indicates that the component takes its default initialization;
        --  Others_Mbox indicates that at least one component takes its default
        --  initialization. Similar to Others_Etype, they are also updated as a
--- 2106,2113 ----
  
        Mbox_Present : Boolean := False;
        Others_Mbox  : Boolean := False;
!       --  Ada 2005 (AI-287): Variables used in case of default initialization
!       --  to provide a functionality similar to Others_Etype. Mbox_Present
        --  indicates that the component takes its default initialization;
        --  Others_Mbox indicates that at least one component takes its default
        --  initialization. Similar to Others_Etype, they are also updated as a
*************** package body Sem_Aggr is
*** 2258,2266 ****
                 and then Comes_From_Source (Compon)
                 and then not In_Instance_Body
              then
!                --  Ada0Y (AI-287): Limited aggregates are allowed
  
!                if Extensions_Allowed
                   and then Present (Expression (Assoc))
                   and then Nkind (Expression (Assoc)) = N_Aggregate
                 then
--- 2295,2303 ----
                 and then Comes_From_Source (Compon)
                 and then not In_Instance_Body
              then
!                --  Ada 2005 (AI-287): Limited aggregates are allowed
  
!                if Ada_Version >= Ada_05
                   and then Present (Expression (Assoc))
                   and then Nkind (Expression (Assoc)) = N_Aggregate
                 then
*************** package body Sem_Aggr is
*** 2298,2305 ****
                       --  indispensable otherwise, because each one must be
                       --  expanded individually to preserve side-effects.
  
!                      --  Ada0Y (AI-287): In case of default initialization of
!                      --  components, we duplicate the corresponding default
                       --  expression (from the record type declaration).
  
                       if Box_Present (Assoc) then
--- 2335,2342 ----
                       --  indispensable otherwise, because each one must be
                       --  expanded individually to preserve side-effects.
  
!                      --  Ada 2005 (AI-287): In case of default initialization
!                      --  of components, we duplicate the corresponding default
                       --  expression (from the record type declaration).
  
                       if Box_Present (Assoc) then
*************** package body Sem_Aggr is
*** 2336,2345 ****
--- 2373,2392 ----
                 elsif Chars (Compon) = Chars (Selector_Name) then
                    if No (Expr) then
  
+                      --  Ada 2005 (AI-231)
+ 
+                      if Ada_Version >= Ada_05
+                        and then Nkind (Expression (Assoc)) = N_Null
+                      then
+                         Check_Can_Never_Be_Null (Compon, Expression (Assoc));
+                      end if;
+ 
                       --  We need to duplicate the expression when several
                       --  components are grouped together with a "|" choice.
                       --  For instance "filed1 | filed2 => Expr"
  
+                      --  Ada 2005 (AI-287)
+ 
                       if Box_Present (Assoc) then
                          Mbox_Present := True;
  
*************** package body Sem_Aggr is
*** 2347,2354 ****
                          --  from the record type declaration
  
                          if Present (Next (Selector_Name)) then
!                            Expr := New_Copy_Tree
!                                      (Expression (Parent (Compon)));
                          else
                             Expr := Expression (Parent (Compon));
                          end if;
--- 2394,2401 ----
                          --  from the record type declaration
  
                          if Present (Next (Selector_Name)) then
!                            Expr :=
!                              New_Copy_Tree (Expression (Parent (Compon)));
                          else
                             Expr := Expression (Parent (Compon));
                          end if;
*************** package body Sem_Aggr is
*** 2643,2648 ****
--- 2690,2702 ----
           while Present (Discrim) and then Present (Positional_Expr) loop
              if Discr_Present (Discrim) then
                 Resolve_Aggr_Expr (Positional_Expr, Discrim);
+ 
+                --  Ada 2005 (AI-231)
+ 
+                if Ada_Version >= Ada_05 then
+                   Check_Can_Never_Be_Null (Discrim, Positional_Expr);
+                end if;
+ 
                 Next (Positional_Expr);
              end if;
  
*************** package body Sem_Aggr is
*** 2874,2879 ****
--- 2928,2939 ----
           Component := Node (Component_Elmt);
           Resolve_Aggr_Expr (Positional_Expr, Component);
  
+          --  Ada 2005 (AI-231)
+ 
+          if Ada_Version >= Ada_05 then
+             Check_Can_Never_Be_Null (Component, Positional_Expr);
+          end if;
+ 
           if Present (Get_Value (Component, Component_Associations (N))) then
              Error_Msg_NE
                ("more than one value supplied for Component &", N, Component);
*************** package body Sem_Aggr is
*** 2894,2913 ****
           Component := Node (Component_Elmt);
           Expr := Get_Value (Component, Component_Associations (N), True);
  
!          if Mbox_Present and then Is_Limited_Type (Etype (Component)) then
! 
!             --  Ada0Y (AI-287): In case of default initialization of a limited
!             --  component we pass the limited component to the expander. The
!             --  expander will generate calls to the corresponding initiali-
!             --  zation subprograms.
  
              Add_Association
                (Component   => Component,
                 Expr        => Empty,
                 Box_Present => True);
  
           elsif No (Expr) then
              Error_Msg_NE ("no value supplied for component &!", N, Component);
           else
              Resolve_Aggr_Expr (Expr, Component);
           end if;
--- 2954,2977 ----
           Component := Node (Component_Elmt);
           Expr := Get_Value (Component, Component_Associations (N), True);
  
!          --  Ada 2005 (AI-287): Default initialized limited component are
!          --  passed to the expander, that will generate calls to the
!          --  corresponding IP.
  
+          if Mbox_Present and then Is_Limited_Type (Etype (Component)) then
              Add_Association
                (Component   => Component,
                 Expr        => Empty,
                 Box_Present => True);
  
+          --  Ada 2005 (AI-287): No value supplied for component
+ 
+          elsif Mbox_Present and No (Expr) then
+             null;
+ 
           elsif No (Expr) then
              Error_Msg_NE ("no value supplied for component &!", N, Component);
+ 
           else
              Resolve_Aggr_Expr (Expr, Component);
           end if;
*************** package body Sem_Aggr is
*** 2937,2943 ****
  
              if Nkind (Selectr) = N_Others_Choice then
  
!                --  Ada0Y (AI-287):  others choice may have expression or mbox
  
                 if No (Others_Etype)
                    and then not Others_Mbox
--- 3001,3007 ----
  
              if Nkind (Selectr) = N_Others_Choice then
  
!                --  Ada 2005 (AI-287): others choice may have expression or mbox
  
                 if No (Others_Etype)
                    and then not Others_Mbox
*************** package body Sem_Aggr is
*** 3015,3020 ****
--- 3079,3104 ----
        end Step_8;
     end Resolve_Record_Aggregate;
  
+    -----------------------------
+    -- Check_Can_Never_Be_Null --
+    -----------------------------
+ 
+    procedure Check_Can_Never_Be_Null (N : Node_Id; Expr : Node_Id) is
+    begin
+       pragma Assert (Ada_Version >= Ada_05);
+ 
+       if Nkind (Expr) = N_Null
+         and then Can_Never_Be_Null (N)
+       then
+          Apply_Compile_Time_Constraint_Error
+            (N      => Expr,
+             Msg    => "(Ada 2005) NULL not allowed in"
+                        & " null-excluding components?",
+             Reason => CE_Null_Not_Allowed,
+             Rep    => False);
+       end if;
+    end Check_Can_Never_Be_Null;
+ 
     ---------------------
     -- Sort_Case_Table --
     ---------------------
diff -Nrcpad gcc-3.4.3/gcc/ada/sem_attr.adb gcc-4.0.0/gcc/ada/sem_attr.adb
*** gcc-3.4.3/gcc/ada/sem_attr.adb	Thu Jan 15 17:24:17 2004
--- gcc-4.0.0/gcc/ada/sem_attr.adb	Thu Feb 10 13:50:23 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Nlists;   use Nlists;
*** 42,47 ****
--- 42,48 ----
  with Nmake;    use Nmake;
  with Opt;      use Opt;
  with Restrict; use Restrict;
+ with Rident;   use Rident;
  with Rtsfind;  use Rtsfind;
  with Sdefault; use Sdefault;
  with Sem;      use Sem;
*************** package body Sem_Attr is
*** 249,255 ****
        --  two attribute expressions are present
  
        procedure Legal_Formal_Attribute;
!       --  Common processing for attributes Definite, and Has_Discriminants
  
        procedure Check_Integer_Type;
        --  Verify that prefix of attribute N is an integer type
--- 250,257 ----
        --  two attribute expressions are present
  
        procedure Legal_Formal_Attribute;
!       --  Common processing for attributes Definite, Has_Access_Values,
!       --  and Has_Discriminants
  
        procedure Check_Integer_Type;
        --  Verify that prefix of attribute N is an integer type
*************** package body Sem_Attr is
*** 257,262 ****
--- 259,267 ----
        procedure Check_Library_Unit;
        --  Verify that prefix of attribute N is a library unit
  
+       procedure Check_Modular_Integer_Type;
+       --  Verify that prefix of attribute N is a modular integer type
+ 
        procedure Check_Not_Incomplete_Type;
        --  Check that P (the prefix of the attribute) is not an incomplete
        --  type or a private type for which no full view has been given.
*************** package body Sem_Attr is
*** 604,613 ****
--- 609,622 ----
           --  prefix may have been a tagged formal object, which is
           --  defined to be aliased even when the actual might not be
           --  (other instance cases will have been caught in the generic).
+          --  Similarly, within an inlined body we know that the attribute
+          --  is legal in the original subprogram, and therefore legal in
+          --  the expansion.
  
           if Aname /= Name_Unrestricted_Access
             and then not Is_Aliased_View (P)
             and then not In_Instance
+            and then not In_Inlined_Body
           then
              Error_Attr ("prefix of % attribute must be aliased", P);
           end if;
*************** package body Sem_Attr is
*** 666,677 ****
              --  object, and that the expression, if present, is static
              --  and within the range of the dimensions of the type.
  
!             if Is_Array_Type (P_Type) then
!                Index := First_Index (P_Base_Type);
! 
!             else pragma Assert (Is_Access_Type (P_Type));
!                Index := First_Index (Base_Type (Designated_Type (P_Type)));
!             end if;
  
              if No (E1) then
  
--- 675,682 ----
              --  object, and that the expression, if present, is static
              --  and within the range of the dimensions of the type.
  
!             pragma Assert (Is_Array_Type (P_Type));
!             Index := First_Index (P_Base_Type);
  
              if No (E1) then
  
*************** package body Sem_Attr is
*** 717,722 ****
--- 722,728 ----
           --  Normal case of array type or subtype
  
           Check_Either_E0_Or_E1;
+          Check_Dereference;
  
           if Is_Array_Type (P_Type) then
              if not Is_Constrained (P_Type)
*************** package body Sem_Attr is
*** 735,760 ****
  
              D := Number_Dimensions (P_Type);
  
-          elsif Is_Access_Type (P_Type)
-            and then Is_Array_Type (Designated_Type (P_Type))
-          then
-             if Is_Entity_Name (P) and then Is_Type (Entity (P)) then
-                Error_Attr ("prefix of % attribute cannot be access type", P);
-             end if;
- 
-             D := Number_Dimensions (Designated_Type (P_Type));
- 
-             --  If there is an implicit dereference, then we must freeze
-             --  the designated type of the access type, since the type of
-             --  the referenced array is this type (see AI95-00106).
- 
-             Freeze_Before (N, Designated_Type (P_Type));
- 
           else
              if Is_Private_Type (P_Type) then
                 Error_Attr
                   ("prefix for % attribute may not be private type", P);
  
              elsif Attr_Id = Attribute_First
                      or else
                    Attr_Id = Attribute_Last
--- 741,758 ----
  
              D := Number_Dimensions (P_Type);
  
           else
              if Is_Private_Type (P_Type) then
                 Error_Attr
                   ("prefix for % attribute may not be private type", P);
  
+             elsif Is_Access_Type (P_Type)
+               and then Is_Array_Type (Designated_Type (P_Type))
+               and then Is_Entity_Name (P)
+               and then Is_Type (Entity (P))
+             then
+                Error_Attr ("prefix of % attribute cannot be access type", P);
+ 
              elsif Attr_Id = Attribute_First
                      or else
                    Attr_Id = Attribute_Last
*************** package body Sem_Attr is
*** 856,864 ****
  
        procedure Check_Dereference is
        begin
!          if Is_Object_Reference (P)
!            and then Is_Access_Type (P_Type)
           then
              Rewrite (P,
                Make_Explicit_Dereference (Sloc (P),
                  Prefix => Relocate_Node (P)));
--- 854,880 ----
  
        procedure Check_Dereference is
        begin
! 
!          --  Case of a subtype mark
! 
!          if Is_Entity_Name (P)
!            and then Is_Type (Entity (P))
           then
+             return;
+          end if;
+ 
+          --  Case of an expression
+ 
+          Resolve (P);
+ 
+          if Is_Access_Type (P_Type) then
+ 
+             --  If there is an implicit dereference, then we must freeze
+             --  the designated type of the access type, since the type of
+             --  the referenced array is this type (see AI95-00106).
+ 
+             Freeze_Before (N, Designated_Type (P_Type));
+ 
              Rewrite (P,
                Make_Explicit_Dereference (Sloc (P),
                  Prefix => Relocate_Node (P)));
*************** package body Sem_Attr is
*** 1061,1066 ****
--- 1077,1096 ----
           end if;
        end Check_Library_Unit;
  
+       --------------------------------
+       -- Check_Modular_Integer_Type --
+       --------------------------------
+ 
+       procedure Check_Modular_Integer_Type is
+       begin
+          Check_Type;
+ 
+          if not Is_Modular_Integer_Type (P_Type) then
+             Error_Attr
+               ("prefix of % attribute must be modular integer type", P);
+          end if;
+       end Check_Modular_Integer_Type;
+ 
        -------------------------------
        -- Check_Not_Incomplete_Type --
        -------------------------------
*************** package body Sem_Attr is
*** 1219,1225 ****
           if Is_Limited_Type (P_Type)
             and then Comes_From_Source (N)
             and then not Present (TSS (Btyp, Nam))
!            and then No (Get_Rep_Pragma (Btyp, Name_Stream_Convert))
           then
              Error_Msg_Name_1 := Aname;
              Error_Msg_NE
--- 1249,1255 ----
           if Is_Limited_Type (P_Type)
             and then Comes_From_Source (N)
             and then not Present (TSS (Btyp, Nam))
!            and then not Has_Rep_Pragma (Btyp, Name_Stream_Convert)
           then
              Error_Msg_Name_1 := Aname;
              Error_Msg_NE
*************** package body Sem_Attr is
*** 1509,1515 ****
  
        if Comes_From_Source (N) then
           if not Attribute_83 (Attr_Id) then
!             if Ada_83 and then Comes_From_Source (N) then
                 Error_Msg_Name_1 := Aname;
                 Error_Msg_N ("(Ada 83) attribute% is not standard?", N);
              end if;
--- 1539,1545 ----
  
        if Comes_From_Source (N) then
           if not Attribute_83 (Attr_Id) then
!             if Ada_Version = Ada_83 and then Comes_From_Source (N) then
                 Error_Msg_Name_1 := Aname;
                 Error_Msg_N ("(Ada 83) attribute% is not standard?", N);
              end if;
*************** package body Sem_Attr is
*** 1524,1530 ****
        --   unanalyzed copy for tree transformation. The analyzed copy is used
        --   for its semantic information (whether prefix is a remote subprogram
        --   name), the unanalyzed copy is used to construct new subtree rooted
!       --   with N_aggregate which represents a fat pointer aggregate.
  
        if Aname = Name_Access then
           Discard_Node (Copy_Separate_Tree (N));
--- 1554,1560 ----
        --   unanalyzed copy for tree transformation. The analyzed copy is used
        --   for its semantic information (whether prefix is a remote subprogram
        --   name), the unanalyzed copy is used to construct new subtree rooted
!       --   with N_Aggregate which represents a fat pointer aggregate.
  
        if Aname = Name_Access then
           Discard_Node (Copy_Separate_Tree (N));
*************** package body Sem_Attr is
*** 1846,1851 ****
--- 1876,1882 ----
  
           --  If the prefix is a selected component whose prefix is of an
           --  access type, then introduce an explicit dereference.
+          --  ??? Could we reuse Check_Dereference here?
  
           if Nkind (Pref) = N_Selected_Component
             and then Is_Access_Type (Ptyp)
*************** package body Sem_Attr is
*** 1905,1911 ****
           Find_Type (P);
           Typ := Entity (P);
  
!          if Ada_95
             and then not Is_Scalar_Type (Typ)
             and then not Is_Generic_Type (Typ)
           then
--- 1936,1942 ----
           Find_Type (P);
           Typ := Entity (P);
  
!          if Ada_Version >= Ada_95
             and then not Is_Scalar_Type (Typ)
             and then not Is_Generic_Type (Typ)
           then
*************** package body Sem_Attr is
*** 2075,2081 ****
              end if;
           end loop;
  
!          Set_Etype (N, RTE (RO_AT_Task_ID));
        end Caller;
  
        -------------
--- 2106,2112 ----
              end if;
           end loop;
  
!          Set_Etype (N, RTE (RO_AT_Task_Id));
        end Caller;
  
        -------------
*************** package body Sem_Attr is
*** 2183,2188 ****
--- 2214,2226 ----
           --  Case from RM J.4(2) of constrained applied to private type
  
           if Is_Entity_Name (P) and then Is_Type (Entity (P)) then
+             Check_Restriction (No_Obsolescent_Features, N);
+ 
+             if Warn_On_Obsolescent_Feature then
+                Error_Msg_N
+                  ("constrained for private type is an " &
+                   "obsolescent feature ('R'M 'J.4)?", N);
+             end if;
  
              --  If we are within an instance, the attribute must be legal
              --  because it was valid in the generic unit. Ditto if this is
*************** package body Sem_Attr is
*** 2590,2595 ****
--- 2628,2642 ----
           Resolve (E1, P_Base_Type);
  
        -----------------------
+       -- Has_Access_Values --
+       -----------------------
+ 
+       when Attribute_Has_Access_Values =>
+          Check_Type;
+          Check_E0;
+          Set_Etype (N, Standard_Boolean);
+ 
+       -----------------------
        -- Has_Discriminants --
        -----------------------
  
*************** package body Sem_Attr is
*** 2612,2618 ****
                and then Is_Task_Type (Designated_Type (Etype (P))))
           then
              Resolve (P);
!             Set_Etype (N, RTE (RO_AT_Task_ID));
  
           else
              Error_Attr ("prefix of % attribute must be a task or an "
--- 2659,2665 ----
                and then Is_Task_Type (Designated_Type (Etype (P))))
           then
              Resolve (P);
!             Set_Etype (N, RTE (RO_AT_Task_Id));
  
           else
              Error_Attr ("prefix of % attribute must be a task or an "
*************** package body Sem_Attr is
*** 2629,2635 ****
           Check_Scalar_Type;
  
           if Is_Real_Type (P_Type) then
!             if Ada_83 and then Comes_From_Source (N) then
                 Error_Msg_Name_1 := Aname;
                 Error_Msg_N
                   ("(Ada 83) % attribute not allowed for real types", N);
--- 2676,2682 ----
           Check_Scalar_Type;
  
           if Is_Real_Type (P_Type) then
!             if Ada_Version = Ada_83 and then Comes_From_Source (N) then
                 Error_Msg_Name_1 := Aname;
                 Error_Msg_N
                   ("(Ada 83) % attribute not allowed for real types", N);
*************** package body Sem_Attr is
*** 2874,2879 ****
--- 2921,2941 ----
           Resolve (E2, P_Base_Type);
           Set_Etype (N, P_Base_Type);
  
+       ---------
+       -- Mod --
+       ---------
+ 
+       when Attribute_Mod =>
+ 
+          --  Note: this attribute is only allowed in Ada 2005 mode, but
+          --  we do not need to test that here, since Mod is only recognized
+          --  as an attribute name in Ada 2005 mode during the parse.
+ 
+          Check_E1;
+          Check_Modular_Integer_Type;
+          Resolve (E1, Any_Integer);
+          Set_Etype (N, P_Base_Type);
+ 
        -----------
        -- Model --
        -----------
*************** package body Sem_Attr is
*** 2921,2932 ****
  
        when Attribute_Modulus =>
           Check_E0;
!          Check_Type;
! 
!          if not Is_Modular_Integer_Type (P_Type) then
!             Error_Attr ("prefix of % attribute must be modular type", P);
!          end if;
! 
           Set_Etype (N, Universal_Integer);
  
        --------------------
--- 2983,2989 ----
  
        when Attribute_Modulus =>
           Check_E0;
!          Check_Modular_Integer_Type;
           Set_Etype (N, Universal_Integer);
  
        --------------------
*************** package body Sem_Attr is
*** 3135,3141 ****
        when Attribute_Range =>
           Check_Array_Or_Scalar_Type;
  
!          if Ada_83
             and then Is_Scalar_Type (P_Type)
             and then Comes_From_Source (N)
           then
--- 3192,3198 ----
        when Attribute_Range =>
           Check_Array_Or_Scalar_Type;
  
!          if Ada_Version = Ada_83
             and then Is_Scalar_Type (P_Type)
             and then Comes_From_Source (N)
           then
*************** package body Sem_Attr is
*** 3283,3292 ****
        when Attribute_Size | Attribute_VADS_Size =>
           Check_E0;
  
!          if Is_Object_Reference (P)
!            or else (Is_Entity_Name (P)
!                      and then Ekind (Entity (P)) = E_Function)
           then
              Check_Object_Reference (P);
  
           elsif Is_Entity_Name (P)
--- 3340,3362 ----
        when Attribute_Size | Attribute_VADS_Size =>
           Check_E0;
  
!          --  If prefix is parameterless function call, rewrite and resolve
!          --  as such.
! 
!          if Is_Entity_Name (P)
!            and then Ekind (Entity (P)) = E_Function
           then
+             Resolve (P);
+ 
+          --  Similar processing for a protected function call
+ 
+          elsif Nkind (P) = N_Selected_Component
+            and then Ekind (Entity (Selector_Name (P))) = E_Function
+          then
+             Resolve (P);
+          end if;
+ 
+          if Is_Object_Reference (P) then
              Check_Object_Reference (P);
  
           elsif Is_Entity_Name (P)
*************** package body Sem_Attr is
*** 3388,3393 ****
--- 3458,3479 ----
        when Attribute_Storage_Unit =>
           Standard_Attribute (Ttypes.System_Storage_Unit);
  
+       -----------------
+       -- Stream_Size --
+       -----------------
+ 
+       when Attribute_Stream_Size =>
+          Check_E0;
+          Check_Type;
+ 
+          if Is_Entity_Name (P)
+            and then Is_Elementary_Type (Entity (P))
+          then
+             Set_Etype (N, Universal_Integer);
+          else
+             Error_Attr ("invalid prefix for % attribute", P);
+          end if;
+ 
        ----------
        -- Succ --
        ----------
*************** package body Sem_Attr is
*** 3444,3465 ****
  
        when Attribute_Target_Name => Target_Name : declare
           TN : constant String := Sdefault.Target_Name.all;
!          TL : Integer := TN'Last;
  
        begin
           Check_Standard_Prefix;
           Check_E0;
!          Start_String;
  
           if TN (TL) = '/' or else TN (TL) = '\' then
              TL := TL - 1;
           end if;
  
-          Store_String_Chars (TN (TN'First .. TL));
- 
           Rewrite (N,
             Make_String_Literal (Loc,
!              Strval => End_String));
           Analyze_And_Resolve (N, Standard_String);
        end Target_Name;
  
--- 3530,3550 ----
  
        when Attribute_Target_Name => Target_Name : declare
           TN : constant String := Sdefault.Target_Name.all;
!          TL : Natural;
  
        begin
           Check_Standard_Prefix;
           Check_E0;
! 
!          TL := TN'Last;
  
           if TN (TL) = '/' or else TN (TL) = '\' then
              TL := TL - 1;
           end if;
  
           Rewrite (N,
             Make_String_Literal (Loc,
!              Strval => TN (TN'First .. TL)));
           Analyze_And_Resolve (N, Standard_String);
        end Target_Name;
  
*************** package body Sem_Attr is
*** 3732,3737 ****
--- 3817,3835 ----
           Validate_Non_Static_Attribute_Function_Call;
        end Wide_Image;
  
+       ---------------------
+       -- Wide_Wide_Image --
+       ---------------------
+ 
+       when Attribute_Wide_Wide_Image => Wide_Wide_Image :
+       begin
+          Check_Scalar_Type;
+          Set_Etype (N, Standard_Wide_Wide_String);
+          Check_E1;
+          Resolve (E1, P_Base_Type);
+          Validate_Non_Static_Attribute_Function_Call;
+       end Wide_Wide_Image;
+ 
        ----------------
        -- Wide_Value --
        ----------------
*************** package body Sem_Attr is
*** 3748,3753 ****
--- 3846,3876 ----
           Validate_Non_Static_Attribute_Function_Call;
        end Wide_Value;
  
+       ---------------------
+       -- Wide_Wide_Value --
+       ---------------------
+ 
+       when Attribute_Wide_Wide_Value => Wide_Wide_Value :
+       begin
+          Check_E1;
+          Check_Scalar_Type;
+ 
+          --  Set Etype before resolving expression because expansion
+          --  of expression may require enclosing type.
+ 
+          Set_Etype (N, P_Type);
+          Validate_Non_Static_Attribute_Function_Call;
+       end Wide_Wide_Value;
+ 
+       ---------------------
+       -- Wide_Wide_Width --
+       ---------------------
+ 
+       when Attribute_Wide_Wide_Width =>
+          Check_E0;
+          Check_Scalar_Type;
+          Set_Etype (N, Universal_Integer);
+ 
        ----------------
        -- Wide_Width --
        ----------------
*************** package body Sem_Attr is
*** 3790,3800 ****
     --  one attribute expression, and the check succeeds, we want to be able
     --  to proceed securely assuming that an expression is in fact present.
  
     exception
        when Bad_Attribute =>
           Set_Etype (N, Any_Type);
           return;
- 
     end Analyze_Attribute;
  
     --------------------
--- 3913,3926 ----
     --  one attribute expression, and the check succeeds, we want to be able
     --  to proceed securely assuming that an expression is in fact present.
  
+    --  Note: we set the attribute analyzed in this case to prevent any
+    --  attempt at reanalysis which could generate spurious error msgs.
+ 
     exception
        when Bad_Attribute =>
+          Set_Analyzed (N);
           Set_Etype (N, Any_Type);
           return;
     end Analyze_Attribute;
  
     --------------------
*************** package body Sem_Attr is
*** 4418,4423 ****
--- 4544,4551 ----
  
        elsif (Id = Attribute_Definite
                 or else
+              Id = Attribute_Has_Access_Values
+                or else
               Id = Attribute_Has_Discriminants
                 or else
               Id = Attribute_Type_Class
*************** package body Sem_Attr is
*** 4464,4471 ****
          and then Raises_Constraint_Error (N)
        then
           Rewrite (N,
!             Make_Raise_Program_Error (Loc,
!               Reason => PE_Accessibility_Check_Failed));
           Set_Etype (N, C_Type);
           return;
  
--- 4592,4599 ----
          and then Raises_Constraint_Error (N)
        then
           Rewrite (N,
!            Make_Raise_Program_Error (Loc,
!              Reason => PE_Accessibility_Check_Failed));
           Set_Etype (N, C_Type);
           return;
  
*************** package body Sem_Attr is
*** 4525,4535 ****
        --  In addition Component_Size is possibly foldable, even though it
        --  can never be static.
  
!       --  Definite, Has_Discriminants, Type_Class and Unconstrained_Array are
!       --  again exceptions, because they apply as well to unconstrained types.
  
        elsif Id = Attribute_Definite
                or else
              Id = Attribute_Has_Discriminants
                or else
              Id = Attribute_Type_Class
--- 4653,4666 ----
        --  In addition Component_Size is possibly foldable, even though it
        --  can never be static.
  
!       --  Definite, Has_Access_Values, Has_Discriminants, Type_Class, and
!       --  Unconstrained_Array are again exceptions, because they apply as
!       --  well to unconstrained types.
  
        elsif Id = Attribute_Definite
                or else
+             Id = Attribute_Has_Access_Values
+               or else
              Id = Attribute_Has_Discriminants
                or else
              Id = Attribute_Type_Class
*************** package body Sem_Attr is
*** 4558,4564 ****
           --  Again we compute the variable Static for easy reference later
           --  (note that no array attributes are static in Ada 83).
  
!          Static := Ada_95;
  
           declare
              N : Node_Id;
--- 4689,4695 ----
           --  Again we compute the variable Static for easy reference later
           --  (note that no array attributes are static in Ada 83).
  
!          Static := Ada_Version >= Ada_95;
  
           declare
              N : Node_Id;
*************** package body Sem_Attr is
*** 4805,4823 ****
        --------------
  
        when Attribute_Definite =>
!          declare
!             Result : Node_Id;
! 
!          begin
!             if Is_Indefinite_Subtype (P_Entity) then
!                Result := New_Occurrence_Of (Standard_False, Loc);
!             else
!                Result := New_Occurrence_Of (Standard_True, Loc);
!             end if;
! 
!             Rewrite (N, Result);
!             Analyze_And_Resolve (N, Standard_Boolean);
!          end;
  
        ------------
        -- Denorm --
--- 4936,4944 ----
        --------------
  
        when Attribute_Definite =>
!          Rewrite (N, New_Occurrence_Of (
!            Boolean_Literals (not Is_Indefinite_Subtype (P_Entity)), Loc));
!          Analyze_And_Resolve (N, Standard_Boolean);
  
        ------------
        -- Denorm --
*************** package body Sem_Attr is
*** 4852,4863 ****
  
        when Attribute_Enum_Rep =>
  
!          --  For an enumeration type with a non-standard representation
!          --  use the Enumeration_Rep field of the proper constant. Note
!          --  that this would not work for types Character/Wide_Character,
!          --  since no real entities are created for the enumeration
!          --  literals, but that does not matter since these two types
!          --  do not have non-standard representations anyway.
  
           if Is_Enumeration_Type (P_Type)
             and then Has_Non_Standard_Rep (P_Type)
--- 4973,4984 ----
  
        when Attribute_Enum_Rep =>
  
!          --  For an enumeration type with a non-standard representation use
!          --  the Enumeration_Rep field of the proper constant. Note that this
!          --  will not work for types Character/Wide_[Wide-]Character, since no
!          --  real entities are created for the enumeration literals, but that
!          --  does not matter since these two types do not have non-standard
!          --  representations anyway.
  
           if Is_Enumeration_Type (P_Type)
             and then Has_Non_Standard_Rep (P_Type)
*************** package body Sem_Attr is
*** 4942,4964 ****
             Eval_Fat.Fraction (P_Root_Type, Expr_Value_R (E1)), Static);
  
        -----------------------
!       -- Has_Discriminants --
        -----------------------
  
!       when Attribute_Has_Discriminants =>
!          declare
!             Result : Node_Id;
  
!          begin
!             if Has_Discriminants (P_Entity) then
!                Result := New_Occurrence_Of (Standard_True, Loc);
!             else
!                Result := New_Occurrence_Of (Standard_False, Loc);
!             end if;
  
!             Rewrite (N, Result);
!             Analyze_And_Resolve (N, Standard_Boolean);
!          end;
  
        --------------
        -- Identity --
--- 5063,5084 ----
             Eval_Fat.Fraction (P_Root_Type, Expr_Value_R (E1)), Static);
  
        -----------------------
!       -- Has_Access_Values --
        -----------------------
  
!       when Attribute_Has_Access_Values =>
!          Rewrite (N, New_Occurrence_Of
!            (Boolean_Literals (Has_Access_Values (P_Root_Type)), Loc));
!          Analyze_And_Resolve (N, Standard_Boolean);
  
!       -----------------------
!       -- Has_Discriminants --
!       -----------------------
  
!       when Attribute_Has_Discriminants =>
!          Rewrite (N, New_Occurrence_Of (
!            Boolean_Literals (Has_Discriminants (P_Entity)), Loc));
!          Analyze_And_Resolve (N, Standard_Boolean);
  
        --------------
        -- Identity --
*************** package body Sem_Attr is
*** 5380,5389 ****
              Fold_Ureal
                (N, UR_Min (Expr_Value_R (E1), Expr_Value_R (E2)), Static);
           else
!             Fold_Uint (N, UI_Min (Expr_Value (E1), Expr_Value (E2)), Static);
           end if;
        end Min;
  
        -----------
        -- Model --
        -----------
--- 5500,5518 ----
              Fold_Ureal
                (N, UR_Min (Expr_Value_R (E1), Expr_Value_R (E2)), Static);
           else
!             Fold_Uint
!               (N, UI_Min (Expr_Value (E1), Expr_Value (E2)), Static);
           end if;
        end Min;
  
+       ---------
+       -- Mod --
+       ---------
+ 
+       when Attribute_Mod =>
+          Fold_Uint
+            (N, UI_Mod (Expr_Value (E1), Modulus (P_Base_Type)), Static);
+ 
        -----------
        -- Model --
        -----------
*************** package body Sem_Attr is
*** 5578,5588 ****
        -- Remainder --
        ---------------
  
!       when Attribute_Remainder =>
!          Fold_Ureal (N,
!            Eval_Fat.Remainder
!              (P_Root_Type, Expr_Value_R (E1), Expr_Value_R (E2)),
!            Static);
  
        -----------
        -- Round --
--- 5707,5729 ----
        -- Remainder --
        ---------------
  
!       when Attribute_Remainder => Remainder : declare
!          X : constant Ureal := Expr_Value_R (E1);
!          Y : constant Ureal := Expr_Value_R (E2);
! 
!       begin
!          if UR_Is_Zero (Y) then
!             Apply_Compile_Time_Constraint_Error
!               (N, "division by zero in Remainder",
!                CE_Overflow_Check_Failed,
!                Warn => not Static);
! 
!             Check_Expressions;
!             return;
!          end if;
! 
!          Fold_Ureal (N, Eval_Fat.Remainder (P_Root_Type, X, Y), Static);
!       end Remainder;
  
        -----------
        -- Round --
*************** package body Sem_Attr is
*** 5757,5763 ****
                    --  Size_Clause field for a subtype when Has_Size_Clause
                    --  is False. Consider:
  
!                   --    type x is range 1 .. 64;                         g
                    --    for x'size use 12;
                    --    subtype y is x range 0 .. 3;
  
--- 5898,5904 ----
                    --  Size_Clause field for a subtype when Has_Size_Clause
                    --  is False. Consider:
  
!                   --    type x is range 1 .. 64;
                    --    for x'size use 12;
                    --    subtype y is x range 0 .. 3;
  
*************** package body Sem_Attr is
*** 5818,5823 ****
--- 5959,5971 ----
              Fold_Ureal (N, Small_Value (P_Type), True);
           end if;
  
+       -----------------
+       -- Stream_Size --
+       -----------------
+ 
+       when Attribute_Stream_Size =>
+          null;
+ 
        ----------
        -- Succ --
        ----------
*************** package body Sem_Attr is
*** 5881,5887 ****
           Id  : RE_Id;
  
        begin
!          if Is_RTE (P_Root_Type, RE_Address) then
              Id := RE_Type_Class_Address;
  
           elsif Is_Enumeration_Type (Typ) then
--- 6029,6035 ----
           Id  : RE_Id;
  
        begin
!          if Is_Descendent_Of_Address (Typ) then
              Id := RE_Type_Class_Address;
  
           elsif Is_Enumeration_Type (Typ) then
*************** package body Sem_Attr is
*** 5947,5959 ****
           Typ : constant Entity_Id := Underlying_Type (P_Type);
  
        begin
!          if Is_Array_Type (P_Type)
!            and then not Is_Constrained (Typ)
!          then
!             Rewrite (N, New_Occurrence_Of (Standard_True, Loc));
!          else
!             Rewrite (N, New_Occurrence_Of (Standard_False, Loc));
!          end if;
  
           --  Analyze and resolve as boolean, note that this attribute is
           --  a static attribute in GNAT.
--- 6095,6104 ----
           Typ : constant Entity_Id := Underlying_Type (P_Type);
  
        begin
!          Rewrite (N, New_Occurrence_Of (
!            Boolean_Literals (
!              Is_Array_Type (P_Type)
!               and then not Is_Constrained (Typ)), Loc));
  
           --  Analyze and resolve as boolean, note that this attribute is
           --  a static attribute in GNAT.
*************** package body Sem_Attr is
*** 6028,6033 ****
--- 6173,6194 ----
        when Attribute_Wide_Image =>
           null;
  
+       ---------------------
+       -- Wide_Wide_Image --
+       ---------------------
+ 
+       --  Wide_Wide_Image is a scalar attribute but is never static, because it
+       --  is not a static function (having a non-scalar argument (RM 4.9(22)).
+ 
+       when Attribute_Wide_Wide_Image =>
+          null;
+ 
+       ---------------------
+       -- Wide_Wide_Width --
+       ---------------------
+ 
+       --  Processing for Wide_Wide_Width is combined with Width
+ 
        ----------------
        -- Wide_Width --
        ----------------
*************** package body Sem_Attr is
*** 6038,6046 ****
        -- Width --
        -----------
  
!       --  This processing also handles the case of Wide_Width
  
!       when Attribute_Width | Attribute_Wide_Width => Width :
        begin
           if Compile_Time_Known_Bounds (P_Type) then
  
--- 6199,6209 ----
        -- Width --
        -----------
  
!       --  This processing also handles the case of Wide_[Wide_]Width
  
!       when Attribute_Width |
!            Attribute_Wide_Width |
!            Attribute_Wide_Wide_Width => Width :
        begin
           if Compile_Time_Known_Bounds (P_Type) then
  
*************** package body Sem_Attr is
*** 6121,6130 ****
                       W := 0;
  
                    --  Width for types derived from Standard.Character
!                   --  and Standard.Wide_Character.
  
                    elsif R = Standard_Character
!                     or else R = Standard_Wide_Character
                    then
                       W := 0;
  
--- 6284,6294 ----
                       W := 0;
  
                    --  Width for types derived from Standard.Character
!                   --  and Standard.Wide_[Wide_]Character.
  
                    elsif R = Standard_Character
!                      or else R = Standard_Wide_Character
!                      or else R = Standard_Wide_Wide_Character
                    then
                       W := 0;
  
*************** package body Sem_Attr is
*** 6135,6140 ****
--- 6299,6306 ----
                          --  Assume all wide-character escape sequences are
                          --  same length, so we can quit when we reach one.
  
+                         --  Is this right for UTF-8?
+ 
                          if J > 255 then
                             if Id = Attribute_Wide_Width then
                                W := Int'Max (W, 3);
*************** package body Sem_Attr is
*** 6227,6234 ****
                                Get_Decoded_Name_String (Chars (L));
                                Wt := Nat (Name_Len);
  
!                            --  For Wide_Width, use encoded name, and then
!                            --  adjust for the encoding.
  
                             else
                                Get_Name_String (Chars (L));
--- 6393,6400 ----
                                Get_Decoded_Name_String (Chars (L));
                                Wt := Nat (Name_Len);
  
!                            --  For Wide_[Wide_]Width, use encoded name, and
!                            --  then adjust for the encoding.
  
                             else
                                Get_Name_String (Chars (L));
*************** package body Sem_Attr is
*** 6314,6324 ****
             Attribute_Value                    |
             Attribute_Wchar_T_Size             |
             Attribute_Wide_Value               |
             Attribute_Word_Size                |
             Attribute_Write                    =>
  
           raise Program_Error;
- 
        end case;
  
        --  At the end of the case, one more check. If we did a static evaluation
--- 6480,6490 ----
             Attribute_Value                    |
             Attribute_Wchar_T_Size             |
             Attribute_Wide_Value               |
+            Attribute_Wide_Wide_Value          |
             Attribute_Word_Size                |
             Attribute_Write                    =>
  
           raise Program_Error;
        end case;
  
        --  At the end of the case, one more check. If we did a static evaluation
*************** package body Sem_Attr is
*** 6384,6389 ****
--- 6550,6612 ----
        It       : Interp;
        Nom_Subt : Entity_Id;
  
+       procedure Accessibility_Message;
+       --  Error, or warning within an instance, if the static accessibility
+       --  rules of 3.10.2 are violated.
+ 
+       ---------------------------
+       -- Accessibility_Message --
+       ---------------------------
+ 
+       procedure Accessibility_Message is
+          Indic : Node_Id := Parent (Parent (N));
+ 
+       begin
+          --  In an instance, this is a runtime check, but one we
+          --  know will fail, so generate an appropriate warning.
+ 
+          if In_Instance_Body then
+             Error_Msg_N
+               ("?non-local pointer cannot point to local object", P);
+             Error_Msg_N
+               ("?Program_Error will be raised at run time", P);
+             Rewrite (N,
+               Make_Raise_Program_Error (Loc,
+                 Reason => PE_Accessibility_Check_Failed));
+             Set_Etype (N, Typ);
+             return;
+ 
+          else
+             Error_Msg_N
+               ("non-local pointer cannot point to local object", P);
+ 
+             --  Check for case where we have a missing access definition
+ 
+             if Is_Record_Type (Current_Scope)
+               and then
+                 (Nkind (Parent (N)) = N_Discriminant_Association
+                    or else
+                  Nkind (Parent (N)) = N_Index_Or_Discriminant_Constraint)
+             then
+                Indic := Parent (Parent (N));
+                while Present (Indic)
+                  and then Nkind (Indic) /= N_Subtype_Indication
+                loop
+                   Indic := Parent (Indic);
+                end loop;
+ 
+                if Present (Indic) then
+                   Error_Msg_NE
+                     ("\use an access definition for" &
+                       " the access discriminant of&", N,
+                          Entity (Subtype_Mark (Indic)));
+                end if;
+             end if;
+          end if;
+       end Accessibility_Message;
+ 
+    --  Start of processing for Resolve_Attribute
+ 
     begin
        --  If error during analysis, no point in continuing, except for
        --  array types, where we get  better recovery by using unconstrained
*************** package body Sem_Attr is
*** 6492,6498 ****
                 --  also be accessibility checks on those, this is where the
                 --  checks can eventually be centralized ???
  
!                if Ekind (Btyp) = E_Access_Subprogram_Type then
                    if Convention (Btyp) /= Convention (Entity (P)) then
                       Error_Msg_N
                        ("subprogram has invalid convention for context", P);
--- 6715,6726 ----
                 --  also be accessibility checks on those, this is where the
                 --  checks can eventually be centralized ???
  
!                if Ekind (Btyp) = E_Access_Subprogram_Type
!                     or else
!                   Ekind (Btyp) = E_Anonymous_Access_Subprogram_Type
!                     or else
!                   Ekind (Btyp) = E_Anonymous_Access_Protected_Subprogram_Type
!                then
                    if Convention (Btyp) /= Convention (Entity (P)) then
                       Error_Msg_N
                        ("subprogram has invalid convention for context", P);
*************** package body Sem_Attr is
*** 6518,6525 ****
                    --  warning  is needed.
  
                    elsif Attr_Id = Attribute_Access
!                     and then Subprogram_Access_Level (Entity (P))
!                       > Type_Access_Level (Btyp)
                    then
                       if not In_Instance_Body then
                          Error_Msg_N
--- 6746,6757 ----
                    --  warning  is needed.
  
                    elsif Attr_Id = Attribute_Access
!                     and then Subprogram_Access_Level (Entity (P)) >
!                                Type_Access_Level (Btyp)
!                     and then Ekind (Btyp) /=
!                                E_Anonymous_Access_Subprogram_Type
!                     and then Ekind (Btyp) /=
!                                E_Anonymous_Access_Protected_Subprogram_Type
                    then
                       if not In_Instance_Body then
                          Error_Msg_N
*************** package body Sem_Attr is
*** 6540,6554 ****
                    --  outside a generic body when the subprogram is declared
                    --  within that generic body.
  
!                   elsif Enclosing_Generic_Body (Entity (P))
!                     /= Enclosing_Generic_Body (Btyp)
                    then
                       Error_Msg_N
                         ("access type must not be outside generic body", P);
                    end if;
                 end if;
  
!                --  if this is a renaming, an inherited operation, or a
                 --  subprogram instance, use the original entity.
  
                 if Is_Entity_Name (P)
--- 6772,6792 ----
                    --  outside a generic body when the subprogram is declared
                    --  within that generic body.
  
!                   --  Ada2005: If the expected type is for an access
!                   --  parameter, this clause does not apply.
! 
!                   elsif Present (Enclosing_Generic_Body (Entity (P)))
!                     and then Enclosing_Generic_Body (Entity (P)) /=
!                              Enclosing_Generic_Body (Btyp)
!                     and then
!                       Ekind (Btyp) /= E_Anonymous_Access_Subprogram_Type
                    then
                       Error_Msg_N
                         ("access type must not be outside generic body", P);
                    end if;
                 end if;
  
!                --  If this is a renaming, an inherited operation, or a
                 --  subprogram instance, use the original entity.
  
                 if Is_Entity_Name (P)
*************** package body Sem_Attr is
*** 6577,6589 ****
  
              elsif Is_Overloaded (P) then
  
!                --  Use the designated type of the context  to disambiguate.
                 declare
                    Index : Interp_Index;
                    It    : Interp;
                 begin
                    Get_First_Interp (P, Index, It);
- 
                    while Present (It.Typ) loop
                       if Covers (Designated_Type (Typ), It.Typ) then
                          Resolve (P, It.Typ);
--- 6815,6832 ----
  
              elsif Is_Overloaded (P) then
  
!                --  Use the designated type of the context to disambiguate
!                --  Note that this was not strictly conformant to Ada 95,
!                --  but was the implementation adopted by most Ada 95 compilers.
!                --  The use of the context type to resolve an Access attribute
!                --  reference is now mandated in AI-235 for Ada 2005.
! 
                 declare
                    Index : Interp_Index;
                    It    : Interp;
+ 
                 begin
                    Get_First_Interp (P, Index, It);
                    while Present (It.Typ) loop
                       if Covers (Designated_Type (Typ), It.Typ) then
                          Resolve (P, It.Typ);
*************** package body Sem_Attr is
*** 6602,6610 ****
--- 6845,6856 ----
              --  The rule does not apply to 'Unrestricted_Access.
  
              if not (Ekind (Btyp) = E_Access_Subprogram_Type
+                      or else Ekind (Btyp) = E_Anonymous_Access_Subprogram_Type
                       or else (Is_Record_Type (Btyp) and then
                                Present (Corresponding_Remote_Type (Btyp)))
                       or else Ekind (Btyp) = E_Access_Protected_Subprogram_Type
+                      or else Ekind (Btyp)
+                                = E_Anonymous_Access_Protected_Subprogram_Type
                       or else Is_Access_Constant (Btyp)
                       or else Is_Variable (P)
                       or else Attr_Id = Attribute_Unrestricted_Access)
*************** package body Sem_Attr is
*** 6618,6625 ****
                    or else
                  Attr_Id = Attribute_Unchecked_Access)
                and then (Ekind (Btyp) = E_General_Access_Type
!                          or else Ekind (Btyp) = E_Anonymous_Access_Type)
              then
                 if Is_Dependent_Component_Of_Mutable_Object (P) then
                    Error_Msg_N
                      ("illegal attribute for discriminant-dependent component",
--- 6864,6900 ----
                    or else
                  Attr_Id = Attribute_Unchecked_Access)
                and then (Ekind (Btyp) = E_General_Access_Type
!                           or else Ekind (Btyp) = E_Anonymous_Access_Type)
              then
+                --  Ada 2005 (AI-230): Check the accessibility of anonymous
+                --  access types in record and array components. For a
+                --  component definition the level is the same of the
+                --  enclosing composite type.
+ 
+                if Ada_Version >= Ada_05
+                  and then Ekind (Btyp) = E_Anonymous_Access_Type
+                  and then (Is_Array_Type (Scope (Btyp))
+                              or else Ekind (Scope (Btyp)) = E_Record_Type)
+                  and then Object_Access_Level (P) > Type_Access_Level (Btyp)
+                then
+                   --  In an instance, this is a runtime check, but one we
+                   --  know will fail, so generate an appropriate warning.
+ 
+                   if In_Instance_Body then
+                      Error_Msg_N
+                        ("?non-local pointer cannot point to local object", P);
+                      Error_Msg_N
+                        ("?Program_Error will be raised at run time", P);
+                      Rewrite (N,
+                        Make_Raise_Program_Error (Loc,
+                          Reason => PE_Accessibility_Check_Failed));
+                      Set_Etype (N, Typ);
+                   else
+                      Error_Msg_N
+                        ("non-local pointer cannot point to local object", P);
+                   end if;
+                end if;
+ 
                 if Is_Dependent_Component_Of_Mutable_Object (P) then
                    Error_Msg_N
                      ("illegal attribute for discriminant-dependent component",
*************** package body Sem_Attr is
*** 6729,6788 ****
                   and then Object_Access_Level (P) > Type_Access_Level (Btyp)
                   and then Ekind (Btyp) = E_General_Access_Type
                 then
!                   --  In an instance, this is a runtime check, but one we
!                   --  know will fail, so generate an appropriate warning.
! 
!                   if In_Instance_Body then
!                      Error_Msg_N
!                        ("?non-local pointer cannot point to local object", P);
!                      Error_Msg_N
!                        ("?Program_Error will be raised at run time", P);
!                      Rewrite (N,
!                        Make_Raise_Program_Error (Loc,
!                          Reason => PE_Accessibility_Check_Failed));
!                      Set_Etype (N, Typ);
!                      return;
! 
!                   else
!                      Error_Msg_N
!                        ("non-local pointer cannot point to local object", P);
! 
!                      if Is_Record_Type (Current_Scope)
!                        and then (Nkind (Parent (N)) =
!                                   N_Discriminant_Association
!                                    or else
!                                  Nkind (Parent (N)) =
!                                    N_Index_Or_Discriminant_Constraint)
!                      then
!                         declare
!                            Indic : Node_Id := Parent (Parent (N));
! 
!                         begin
!                            while Present (Indic)
!                              and then Nkind (Indic) /= N_Subtype_Indication
!                            loop
!                               Indic := Parent (Indic);
!                            end loop;
! 
!                            if Present (Indic) then
!                               Error_Msg_NE
!                                 ("\use an access definition for" &
!                                   " the access discriminant of&", N,
!                                   Entity (Subtype_Mark (Indic)));
!                            end if;
!                         end;
!                      end if;
!                   end if;
                 end if;
              end if;
  
              if Ekind (Btyp) = E_Access_Protected_Subprogram_Type
!               and then Is_Entity_Name (P)
!               and then not Is_Protected_Type (Scope (Entity (P)))
              then
!                Error_Msg_N ("context requires a protected subprogram", P);
  
!             elsif Ekind (Btyp) = E_Access_Subprogram_Type
                and then Ekind (Etype (N)) = E_Access_Protected_Subprogram_Type
              then
                 Error_Msg_N ("context requires a non-protected subprogram", P);
--- 7004,7041 ----
                   and then Object_Access_Level (P) > Type_Access_Level (Btyp)
                   and then Ekind (Btyp) = E_General_Access_Type
                 then
!                   Accessibility_Message;
!                   return;
                 end if;
              end if;
  
              if Ekind (Btyp) = E_Access_Protected_Subprogram_Type
!                  or else
!                Ekind (Btyp) = E_Anonymous_Access_Protected_Subprogram_Type
              then
!                if Is_Entity_Name (P)
!                  and then not Is_Protected_Type (Scope (Entity (P)))
!                then
!                   Error_Msg_N ("context requires a protected subprogram", P);
  
!                --  Check accessibility of protected object against that
!                --  of the access type, but only on user code, because
!                --  the expander creates access references for handlers.
!                --  If the context is an anonymous_access_to_protected,
!                --  there are no accessibility checks either.
! 
!                elsif Object_Access_Level (P) > Type_Access_Level (Btyp)
!                  and then Comes_From_Source (N)
!                  and then Ekind (Btyp) = E_Access_Protected_Subprogram_Type
!                  and then No (Original_Access_Type (Typ))
!                then
!                   Accessibility_Message;
!                   return;
!                end if;
! 
!             elsif (Ekind (Btyp) = E_Access_Subprogram_Type
!                      or else
!                    Ekind (Btyp) = E_Anonymous_Access_Subprogram_Type)
                and then Ekind (Etype (N)) = E_Access_Protected_Subprogram_Type
              then
                 Error_Msg_N ("context requires a non-protected subprogram", P);
*************** package body Sem_Attr is
*** 7189,7194 ****
--- 7442,7450 ----
                 when Attribute_Wide_Value =>
                    Resolve (First (Expressions (N)), Standard_Wide_String);
  
+                when Attribute_Wide_Wide_Value =>
+                   Resolve (First (Expressions (N)), Standard_Wide_Wide_String);
+ 
                 when others => null;
              end case;
        end case;
*************** package body Sem_Attr is
*** 7201,7207 ****
        --  Finally perform static evaluation on the attribute reference
  
        Eval_Attribute (N);
- 
     end Resolve_Attribute;
  
  end Sem_Attr;
--- 7457,7462 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/sem_case.adb gcc-4.0.0/gcc/ada/sem_case.adb
*** gcc-3.4.3/gcc/ada/sem_case.adb	Tue Oct 21 13:42:18 2003
--- gcc-4.0.0/gcc/ada/sem_case.adb	Thu Feb 10 13:50:35 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1996-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1996-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Sem_Case is
*** 267,277 ****
        C   : Int;
  
     begin
!       --  For character, or wide character. If we are in 7-bit ASCII graphic
        --  range, then build and return appropriate character literal name
  
        if Rtp = Standard_Character
          or else Rtp = Standard_Wide_Character
        then
           C := UI_To_Int (Value);
  
--- 267,278 ----
        C   : Int;
  
     begin
!       --  For character, or wide [wide] character. If 7-bit ASCII graphic
        --  range, then build and return appropriate character literal name
  
        if Rtp = Standard_Character
          or else Rtp = Standard_Wide_Character
+         or else Rtp = Standard_Wide_Wide_Character
        then
           C := UI_To_Int (Value);
  
*************** package body Sem_Case is
*** 429,439 ****
           if Root_Type (Choice_Type) = Standard_Character
                or else
              Root_Type (Choice_Type) = Standard_Wide_Character
           then
              Set_Character_Literal_Name (Char_Code (UI_To_Int (Value)));
              Lit := New_Node (N_Character_Literal, Loc);
              Set_Chars (Lit, Name_Find);
!             Set_Char_Literal_Value (Lit, Char_Code (UI_To_Int (Value)));
              Set_Etype (Lit, Choice_Type);
              Set_Is_Static_Expression (Lit, True);
              return Lit;
--- 430,442 ----
           if Root_Type (Choice_Type) = Standard_Character
                or else
              Root_Type (Choice_Type) = Standard_Wide_Character
+               or else
+             Root_Type (Choice_Type) = Standard_Wide_Wide_Character
           then
              Set_Character_Literal_Name (Char_Code (UI_To_Int (Value)));
              Lit := New_Node (N_Character_Literal, Loc);
              Set_Chars (Lit, Name_Find);
!             Set_Char_Literal_Value (Lit, Value);
              Set_Etype (Lit, Choice_Type);
              Set_Is_Static_Expression (Lit, True);
              return Lit;
*************** package body Sem_Case is
*** 556,561 ****
--- 559,567 ----
        is
           E : Entity_Id;
  
+          Enode : Node_Id;
+          --  This is where we post error messages for bounds out of range
+ 
           Nb_Choices        : constant Nat := Choice_Table'Length;
           Sort_Choice_Table : Sort_Choice_Table_Type (0 .. Nb_Choices);
  
*************** package body Sem_Case is
*** 638,661 ****
                 end if;
              end if;
  
!             --  Check for bound out of range.
  
              if Lo_Val < Bounds_Lo then
                 if Is_Integer_Type (Bounds_Type) then
                    Error_Msg_Uint_1 := Bounds_Lo;
!                   Error_Msg_N ("minimum allowed choice value is^", Lo);
                 else
                    Error_Msg_Name_1 := Choice_Image (Bounds_Lo, Bounds_Type);
!                   Error_Msg_N ("minimum allowed choice value is%", Lo);
                 end if;
  
-             elsif Hi_Val > Bounds_Hi then
                 if Is_Integer_Type (Bounds_Type) then
                    Error_Msg_Uint_1 := Bounds_Hi;
!                   Error_Msg_N ("maximum allowed choice value is^", Hi);
                 else
                    Error_Msg_Name_1 := Choice_Image (Bounds_Hi, Bounds_Type);
!                   Error_Msg_N ("maximum allowed choice value is%", Hi);
                 end if;
              end if;
  
--- 644,698 ----
                 end if;
              end if;
  
!             --  Check for low bound out of range
  
              if Lo_Val < Bounds_Lo then
+ 
+                --  If the choice is an entity name, then it is a type, and
+                --  we want to post the message on the reference to this
+                --  entity. Otherwise we want to post it on the lower bound
+                --  of the range.
+ 
+                if Is_Entity_Name (Choice) then
+                   Enode := Choice;
+                else
+                   Enode := Lo;
+                end if;
+ 
+                --  Specialize message for integer/enum type
+ 
                 if Is_Integer_Type (Bounds_Type) then
                    Error_Msg_Uint_1 := Bounds_Lo;
!                   Error_Msg_N ("minimum allowed choice value is^", Enode);
                 else
                    Error_Msg_Name_1 := Choice_Image (Bounds_Lo, Bounds_Type);
!                   Error_Msg_N ("minimum allowed choice value is%", Enode);
                 end if;
+             end if;
+ 
+             --  Check for high bound out of range
+ 
+             if Hi_Val > Bounds_Hi then
+ 
+                --  If the choice is an entity name, then it is a type, and
+                --  we want to post the message on the reference to this
+                --  entity. Otherwise we want to post it on the upper bound
+                --  of the range.
+ 
+                if Is_Entity_Name (Choice) then
+                   Enode := Choice;
+                else
+                   Enode := Hi;
+                end if;
+ 
+                --  Specialize message for integer/enum type
  
                 if Is_Integer_Type (Bounds_Type) then
                    Error_Msg_Uint_1 := Bounds_Hi;
!                   Error_Msg_N ("maximum allowed choice value is^", Enode);
                 else
                    Error_Msg_Name_1 := Choice_Image (Bounds_Hi, Bounds_Type);
!                   Error_Msg_N ("maximum allowed choice value is%", Enode);
                 end if;
              end if;
  
*************** package body Sem_Case is
*** 860,866 ****
  
        function Number_Of_Choices (N : Node_Id) return Nat is
           Alt : Node_Id;
!          --  A case statement alternative or a record variant.
  
           Choice : Node_Id;
           Count  : Nat := 0;
--- 897,903 ----
  
        function Number_Of_Choices (N : Node_Id) return Nat is
           Alt : Node_Id;
!          --  A case statement alternative or a record variant
  
           Choice : Node_Id;
           Count  : Nat := 0;
diff -Nrcpad gcc-3.4.3/gcc/ada/sem_cat.adb gcc-4.0.0/gcc/ada/sem_cat.adb
*** gcc-3.4.3/gcc/ada/sem_cat.adb	Thu Nov 20 09:54:00 2003
--- gcc-4.0.0/gcc/ada/sem_cat.adb	Thu Jul 15 20:34:37 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Sem_Cat is
*** 761,767 ****
           return;
        end if;
  
!       --  Ada0Y (AI-50217): Process explicit with_clauses that are not limited
  
        declare
           Item             : Node_Id;
--- 761,767 ----
           return;
        end if;
  
!       --  Ada 2005 (AI-50217): Process explicit non-limited with_clauses
  
        declare
           Item             : Node_Id;
*************** package body Sem_Cat is
*** 798,839 ****
            K =  N_Subprogram_Renaming_Declaration)
          and then Present (Parent_Spec (N))
        then
!          declare
!             Parent_Lib_U  : constant Node_Id   := Parent_Spec (N);
!             Parent_Kind   : constant Node_Kind :=
!                               Nkind (Unit (Parent_Lib_U));
!             Parent_Entity : Entity_Id;
! 
!          begin
!             if        Parent_Kind =  N_Package_Instantiation
!               or else Parent_Kind =  N_Procedure_Instantiation
!               or else Parent_Kind =  N_Function_Instantiation
!               or else Parent_Kind =  N_Package_Renaming_Declaration
!               or else Parent_Kind in N_Generic_Renaming_Declaration
!             then
!                Parent_Entity := Defining_Entity (Unit (Parent_Lib_U));
! 
!             else
!                Parent_Entity :=
!                  Defining_Entity (Specification (Unit (Parent_Lib_U)));
!             end if;
! 
!             Check_Categorization_Dependencies (E, Parent_Entity, N, False);
  
!             --  Verify that public child of an RCI library unit
!             --  must also be an RCI library unit (RM E.2.3(15)).
  
!             if Is_Remote_Call_Interface (Parent_Entity)
!               and then not Private_Present (P)
!               and then not Is_Remote_Call_Interface (E)
!             then
!                Error_Msg_N
!                  ("public child of rci unit must also be rci unit", N);
!                return;
!             end if;
!          end;
        end if;
- 
     end Validate_Categorization_Dependency;
  
     --------------------------------
--- 798,815 ----
            K =  N_Subprogram_Renaming_Declaration)
          and then Present (Parent_Spec (N))
        then
!          Check_Categorization_Dependencies (E, Scope (E), N, False);
  
!          --  Verify that public child of an RCI library unit
!          --  must also be an RCI library unit (RM E.2.3(15)).
  
!          if Is_Remote_Call_Interface (Scope (E))
!            and then not Private_Present (P)
!            and then not Is_Remote_Call_Interface (E)
!          then
!             Error_Msg_N ("public child of rci unit must also be rci unit", N);
!          end if;
        end if;
     end Validate_Categorization_Dependency;
  
     --------------------------------
*************** package body Sem_Cat is
*** 1088,1096 ****
  
     end Validate_Object_Declaration;
  
!    --------------------------------
!    --  Validate_RCI_Declarations --
!    --------------------------------
  
     procedure Validate_RCI_Declarations (P : Entity_Id) is
        E : Entity_Id;
--- 1064,1072 ----
  
     end Validate_Object_Declaration;
  
!    -------------------------------
!    -- Validate_RCI_Declarations --
!    -------------------------------
  
     procedure Validate_RCI_Declarations (P : Entity_Id) is
        E : Entity_Id;
diff -Nrcpad gcc-3.4.3/gcc/ada/sem_ch10.adb gcc-4.0.0/gcc/ada/sem_ch10.adb
*** gcc-3.4.3/gcc/ada/sem_ch10.adb	Mon Jan  5 15:20:45 2004
--- gcc-4.0.0/gcc/ada/sem_ch10.adb	Thu Feb 10 13:50:14 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Atree;    use Atree;
*** 28,34 ****
  with Debug;    use Debug;
  with Einfo;    use Einfo;
  with Errout;   use Errout;
- with Elists;   use Elists;
  with Exp_Util; use Exp_Util;
  with Fname;    use Fname;
  with Fname.UF; use Fname.UF;
--- 28,33 ----
*************** with Nmake;    use Nmake;
*** 44,49 ****
--- 43,49 ----
  with Opt;      use Opt;
  with Output;   use Output;
  with Restrict; use Restrict;
+ with Rtsfind;  use Rtsfind;
  with Sem;      use Sem;
  with Sem_Ch6;  use Sem_Ch6;
  with Sem_Ch7;  use Sem_Ch7;
*************** package body Sem_Ch10 is
*** 77,83 ****
     --  in a limited_with clause. If the package was not previously analyzed
     --  then it also performs a basic decoration of the real entities; this
     --  is required to do not pass non-decorated entities to the back-end.
!    --  Implements Ada0Y (AI-50217).
  
     procedure Check_Body_Needed_For_SAL (Unit_Name : Entity_Id);
     --  Check whether the source for the body of a compilation unit must
--- 77,83 ----
     --  in a limited_with clause. If the package was not previously analyzed
     --  then it also performs a basic decoration of the real entities; this
     --  is required to do not pass non-decorated entities to the back-end.
!    --  Implements Ada 2005 (AI-50217).
  
     procedure Check_Body_Needed_For_SAL (Unit_Name : Entity_Id);
     --  Check whether the source for the body of a compilation unit must
*************** package body Sem_Ch10 is
*** 101,107 ****
     --  through a regular with clause. This procedure creates the implicit
     --  limited with_clauses for the parents and loads the corresponding units.
     --  The shadow entities are created when the inserted clause is analyzed.
!    --  Implements Ada0Y (AI-50217).
  
     procedure Expand_With_Clause (Nam : Node_Id; N : Node_Id);
     --  When a child unit appears in a context clause, the implicit withs on
--- 101,107 ----
     --  through a regular with clause. This procedure creates the implicit
     --  limited with_clauses for the parents and loads the corresponding units.
     --  The shadow entities are created when the inserted clause is analyzed.
!    --  Implements Ada 2005 (AI-50217).
  
     procedure Expand_With_Clause (Nam : Node_Id; N : Node_Id);
     --  When a child unit appears in a context clause, the implicit withs on
*************** package body Sem_Ch10 is
*** 129,143 ****
  
     procedure Install_Limited_Context_Clauses (N : Node_Id);
     --  Subsidiary to Install_Context. Process only limited with_clauses
!    --  for current unit. Implements Ada0Y (AI-50217).
  
     procedure Install_Limited_Withed_Unit (N : Node_Id);
     --  Place shadow entities for a limited_with package in the visibility
!    --  structures for the current compilation. Implements Ada0Y (AI-50217).
  
-    procedure Install_Withed_Unit (With_Clause : Node_Id);
     --  If the unit is not a child unit, make unit immediately visible.
     --  The caller ensures that the unit is not already currently installed.
  
     procedure Install_Parents (Lib_Unit : Node_Id; Is_Private : Boolean);
     --  This procedure establishes the context for the compilation of a child
--- 129,149 ----
  
     procedure Install_Limited_Context_Clauses (N : Node_Id);
     --  Subsidiary to Install_Context. Process only limited with_clauses
!    --  for current unit. Implements Ada 2005 (AI-50217).
  
     procedure Install_Limited_Withed_Unit (N : Node_Id);
     --  Place shadow entities for a limited_with package in the visibility
!    --  structures for the current compilation. Implements Ada 2005 (AI-50217).
! 
!    procedure Install_Withed_Unit
!      (With_Clause     : Node_Id;
!       Private_With_OK : Boolean := False);
  
     --  If the unit is not a child unit, make unit immediately visible.
     --  The caller ensures that the unit is not already currently installed.
+    --  The flag Private_With_OK is set true in Install_Private_With_Clauses,
+    --  which is called when compiling the private part of a package, or
+    --  installing the private declarations of a parent unit.
  
     procedure Install_Parents (Lib_Unit : Node_Id; Is_Private : Boolean);
     --  This procedure establishes the context for the compilation of a child
*************** package body Sem_Ch10 is
*** 172,182 ****
     --  analysis (should it appear otherwise in the context).
  
     procedure Remove_Context_Clauses (N : Node_Id);
!    --  Subsidiary of previous one. Remove use_ and with_clauses.
  
     procedure Remove_Limited_With_Clause (N : Node_Id);
     --  Remove from visibility the shadow entities introduced for a package
!    --  mentioned in a limited_with clause. Implements Ada0Y (AI-50217).
  
     procedure Remove_Parents (Lib_Unit : Node_Id);
     --  Remove_Parents checks if Lib_Unit is a child spec. If so then the parent
--- 178,188 ----
     --  analysis (should it appear otherwise in the context).
  
     procedure Remove_Context_Clauses (N : Node_Id);
!    --  Subsidiary of previous one. Remove use_ and with_clauses
  
     procedure Remove_Limited_With_Clause (N : Node_Id);
     --  Remove from visibility the shadow entities introduced for a package
!    --  mentioned in a limited_with clause. Implements Ada 2005 (AI-50217).
  
     procedure Remove_Parents (Lib_Unit : Node_Id);
     --  Remove_Parents checks if Lib_Unit is a child spec. If so then the parent
*************** package body Sem_Ch10 is
*** 331,337 ****
              Semantics (Lib_Unit);
              Check_Unused_Withs (Get_Cunit_Unit_Number (Lib_Unit));
  
!             --  Verify that the library unit is a package declaration.
  
              if Nkind (Unit (Lib_Unit)) /= N_Package_Declaration
                   and then
--- 337,343 ----
              Semantics (Lib_Unit);
              Check_Unused_Withs (Get_Cunit_Unit_Number (Lib_Unit));
  
!             --  Verify that the library unit is a package declaration
  
              if Nkind (Unit (Lib_Unit)) /= N_Package_Declaration
                   and then
*************** package body Sem_Ch10 is
*** 388,394 ****
                 if Unum /= No_Unit then
  
                    --  Build subprogram declaration and attach parent unit to it
!                   --  This subprogram declaration does not come from source!
  
                    declare
                       Loc : constant Source_Ptr := Sloc (N);
--- 394,402 ----
                 if Unum /= No_Unit then
  
                    --  Build subprogram declaration and attach parent unit to it
!                   --  This subprogram declaration does not come from source,
!                   --  Nevertheless the backend must generate debugging info for
!                   --  it, and this must be indicated explicitly.
  
                    declare
                       Loc : constant Source_Ptr := Sloc (N);
*************** package body Sem_Ch10 is
*** 412,417 ****
--- 420,426 ----
                       Set_Parent_Spec (Unit (Lib_Unit), Cunit (Unum));
                       Semantics (Lib_Unit);
                       Set_Acts_As_Spec (N, False);
+                      Set_Needs_Debug_Info (Defining_Entity (Unit (Lib_Unit)));
                       Set_Comes_From_Source_Default (SCS);
                    end;
                 end if;
*************** package body Sem_Ch10 is
*** 443,450 ****
  
           declare
              Save_Style_Check : constant Boolean := Style_Check;
!             Save_C_Restrict  : constant Save_Compilation_Unit_Restrictions :=
!                                  Compilation_Unit_Restrictions_Save;
  
           begin
              if not GNAT_Mode then
--- 452,459 ----
  
           declare
              Save_Style_Check : constant Boolean := Style_Check;
!             Save_C_Restrict  : constant Save_Cunit_Boolean_Restrictions :=
!                                  Cunit_Boolean_Restrictions_Save;
  
           begin
              if not GNAT_Mode then
*************** package body Sem_Ch10 is
*** 454,460 ****
              Semantics (Parent_Spec (Unit_Node));
              Version_Update (N, Parent_Spec (Unit_Node));
              Style_Check := Save_Style_Check;
!             Compilation_Unit_Restrictions_Restore (Save_C_Restrict);
           end;
        end if;
  
--- 463,469 ----
              Semantics (Parent_Spec (Unit_Node));
              Version_Update (N, Parent_Spec (Unit_Node));
              Style_Check := Save_Style_Check;
!             Cunit_Boolean_Restrictions_Restore (Save_C_Restrict);
           end;
        end if;
  
*************** package body Sem_Ch10 is
*** 467,473 ****
  
        if Is_Child_Spec (Unit_Node) then
  
!          --  Set the entities of all parents in the program_unit_name.
  
           Generate_Parent_References (
             Unit_Node, Get_Parent_Entity (Unit (Parent_Spec (Unit_Node))));
--- 476,482 ----
  
        if Is_Child_Spec (Unit_Node) then
  
!          --  Set the entities of all parents in the program_unit_name
  
           Generate_Parent_References (
             Unit_Node, Get_Parent_Entity (Unit (Parent_Spec (Unit_Node))));
*************** package body Sem_Ch10 is
*** 488,493 ****
--- 497,512 ----
           Set_Acts_As_Spec (N);
        end if;
  
+       --  Register predefined units in Rtsfind
+ 
+       declare
+          Unum : constant Unit_Number_Type := Get_Source_Unit (Sloc (N));
+       begin
+          if Is_Predefined_File_Name (Unit_File_Name (Unum)) then
+             Set_RTU_Loaded (Unit_Node);
+          end if;
+       end;
+ 
        --  Treat compilation unit pragmas that appear after the library unit
  
        if Present (Pragmas_After (Aux_Decls_Node (N))) then
*************** package body Sem_Ch10 is
*** 502,508 ****
           end;
        end if;
  
!       --  Generate distribution stub files if requested and no error
  
        if N = Main_Cunit
          and then (Distribution_Stub_Mode = Generate_Receiver_Stub_Body
--- 521,527 ----
           end;
        end if;
  
!       --  Generate distribution stubs if requested and no error
  
        if N = Main_Cunit
          and then (Distribution_Stub_Mode = Generate_Receiver_Stub_Body
*************** package body Sem_Ch10 is
*** 537,545 ****
              Add_Stub_Constructs (N);
           end if;
  
-          --  Reanalyze the unit with the new constructs
- 
-          Analyze (Unit_Node);
        end if;
  
        if Nkind (Unit_Node) = N_Package_Declaration
--- 556,561 ----
*************** package body Sem_Ch10 is
*** 607,620 ****
              Un    : Unit_Number_Type;
  
              Save_Style_Check : constant Boolean := Style_Check;
!             Save_C_Restrict  : constant Save_Compilation_Unit_Restrictions :=
!                                  Compilation_Unit_Restrictions_Save;
  
           begin
              Item := First (Context_Items (N));
              while Present (Item) loop
  
!                --  Ada0Y (AI-50217): Do not consider limited-withed units
  
                 if Nkind (Item) = N_With_Clause
                    and then not Implicit_With (Item)
--- 623,636 ----
              Un    : Unit_Number_Type;
  
              Save_Style_Check : constant Boolean := Style_Check;
!             Save_C_Restrict  : constant Save_Cunit_Boolean_Restrictions :=
!                                  Cunit_Boolean_Restrictions_Save;
  
           begin
              Item := First (Context_Items (N));
              while Present (Item) loop
  
!                --  Ada 2005 (AI-50217): Do not consider limited-withed units
  
                 if Nkind (Item) = N_With_Clause
                    and then not Implicit_With (Item)
*************** package body Sem_Ch10 is
*** 670,676 ****
              end loop;
  
              Style_Check := Save_Style_Check;
!             Compilation_Unit_Restrictions_Restore (Save_C_Restrict);
           end;
        end if;
  
--- 686,692 ----
              end loop;
  
              Style_Check := Save_Style_Check;
!             Cunit_Boolean_Restrictions_Restore (Save_C_Restrict);
           end;
        end if;
  
*************** package body Sem_Ch10 is
*** 793,800 ****
        --  Loop through context items. This is done is three passes:
        --  a) The first pass analyze non-limited with-clauses.
        --  b) The second pass add implicit limited_with clauses for
!       --     the parents of child units (Ada0Y: AI-50217)
!       --  c) The third pass analyzes limited_with clauses (Ada0Y: AI-50217)
  
        Item := First (Context_Items (N));
        while Present (Item) loop
--- 809,816 ----
        --  Loop through context items. This is done is three passes:
        --  a) The first pass analyze non-limited with-clauses.
        --  b) The second pass add implicit limited_with clauses for
!       --     the parents of child units (Ada 2005: AI-50217)
!       --  c) The third pass analyzes limited_with clauses (Ada 2005: AI-50217)
  
        Item := First (Context_Items (N));
        while Present (Item) loop
*************** package body Sem_Ch10 is
*** 848,854 ****
           Next (Item);
        end loop;
  
!       --  Third pass: examine all limited_with clauses.
  
        Item := First (Context_Items (N));
  
--- 864,870 ----
           Next (Item);
        end loop;
  
!       --  Third pass: examine all limited_with clauses
  
        Item := First (Context_Items (N));
  
*************** package body Sem_Ch10 is
*** 862,868 ****
                              & " package specification", Item);
              end if;
  
!             --  Skip analyzing with clause if no unit, see above.
  
              if Present (Library_Unit (Item)) then
                 Analyze (Item);
--- 878,884 ----
                              & " package specification", Item);
              end if;
  
!             --  Skip analyzing with clause if no unit, see above
  
              if Present (Library_Unit (Item)) then
                 Analyze (Item);
*************** package body Sem_Ch10 is
*** 889,895 ****
        Nam  : Entity_Id;
  
     begin
!       --  The package declaration must be in the current declarative part.
  
        Check_Stub_Level (N);
        Nam := Current_Entity_In_Scope (Id);
--- 905,911 ----
        Nam  : Entity_Id;
  
     begin
!       --  The package declaration must be in the current declarative part
  
        Check_Stub_Level (N);
        Nam := Current_Entity_In_Scope (Id);
*************** package body Sem_Ch10 is
*** 942,955 ****
           --  Errout to ignore all errors. Note that Fatal_Error will still
           --  be set, so we will be able to check for this case below.
  
!          Ignore_Errors_Enable := Ignore_Errors_Enable + 1;
           Unum :=
             Load_Unit
               (Load_Name  => Subunit_Name,
                Required   => False,
                Subunit    => True,
                Error_Node => N);
!          Ignore_Errors_Enable := Ignore_Errors_Enable - 1;
  
           --  All done if we successfully loaded the subunit
  
--- 958,977 ----
           --  Errout to ignore all errors. Note that Fatal_Error will still
           --  be set, so we will be able to check for this case below.
  
!          if not ASIS_Mode then
!             Ignore_Errors_Enable := Ignore_Errors_Enable + 1;
!          end if;
! 
           Unum :=
             Load_Unit
               (Load_Name  => Subunit_Name,
                Required   => False,
                Subunit    => True,
                Error_Node => N);
! 
!          if not ASIS_Mode then
!             Ignore_Errors_Enable := Ignore_Errors_Enable - 1;
!          end if;
  
           --  All done if we successfully loaded the subunit
  
*************** package body Sem_Ch10 is
*** 958,966 ****
           then
              Comp_Unit := Cunit (Unum);
  
!             Set_Corresponding_Stub (Unit (Comp_Unit), N);
!             Analyze_Subunit (Comp_Unit);
!             Set_Library_Unit (N, Comp_Unit);
  
           elsif Unum = No_Unit
             and then Present (Nam)
--- 980,1001 ----
           then
              Comp_Unit := Cunit (Unum);
  
!             --  If the file was empty or seriously mangled, the unit
!             --  itself may be missing.
! 
!             if No (Unit (Comp_Unit)) then
!                Error_Msg_N
!                  ("subunit does not contain expected proper body", N);
! 
!             elsif Nkind (Unit (Comp_Unit)) /= N_Subunit then
!                Error_Msg_N
!                  ("expected SEPARATE subunit, found child unit",
!                   Cunit_Entity (Unum));
!             else
!                Set_Corresponding_Stub (Unit (Comp_Unit), N);
!                Analyze_Subunit (Comp_Unit);
!                Set_Library_Unit (N, Comp_Unit);
!             end if;
  
           elsif Unum = No_Unit
             and then Present (Nam)
*************** package body Sem_Ch10 is
*** 1162,1168 ****
     begin
        Check_Stub_Level (N);
  
!       --  First occurence of name may have been as an incomplete type.
  
        if Present (Nam) and then Ekind (Nam) = E_Incomplete_Type then
           Nam := Full_View (Nam);
--- 1197,1203 ----
     begin
        Check_Stub_Level (N);
  
!       --  First occurence of name may have been as an incomplete type
  
        if Present (Nam) and then Ekind (Nam) = E_Incomplete_Type then
           Nam := Full_View (Nam);
*************** package body Sem_Ch10 is
*** 1283,1291 ****
        --  Remove current scope from scope stack, and preserve the list
        --  of use clauses in it, to be reinstalled after context is analyzed.
  
!       ------------------------------
!       --  Analyze_Subunit_Context --
!       ------------------------------
  
        procedure Analyze_Subunit_Context is
           Item      :  Node_Id;
--- 1318,1326 ----
        --  Remove current scope from scope stack, and preserve the list
        --  of use clauses in it, to be reinstalled after context is analyzed.
  
!       -----------------------------
!       -- Analyze_Subunit_Context --
!       -----------------------------
  
        procedure Analyze_Subunit_Context is
           Item      :  Node_Id;
*************** package body Sem_Ch10 is
*** 1415,1421 ****
           for J in reverse 1 .. Num_Scopes loop
              U := Use_Clauses (J);
              Scope_Stack.Table (Scope_Stack.Last - J + 1).First_Use_Clause := U;
!             Install_Use_Clauses (U);
           end loop;
        end Re_Install_Use_Clauses;
  
--- 1450,1456 ----
           for J in reverse 1 .. Num_Scopes loop
              U := Use_Clauses (J);
              Scope_Stack.Table (Scope_Stack.Last - J + 1).First_Use_Clause := U;
!             Install_Use_Clauses (U, Force_Installation => True);
           end loop;
        end Re_Install_Use_Clauses;
  
*************** package body Sem_Ch10 is
*** 1449,1455 ****
     begin
        if not Is_Empty_List (Context_Items (N)) then
  
!          --  Save current use clauses.
  
           Remove_Scope;
           Remove_Context (Lib_Unit);
--- 1484,1490 ----
     begin
        if not Is_Empty_List (Context_Items (N)) then
  
!          --  Save current use clauses
  
           Remove_Scope;
           Remove_Context (Lib_Unit);
*************** package body Sem_Ch10 is
*** 1475,1482 ****
--- 1510,1521 ----
              end if;
           end if;
  
+          Set_Is_Immediately_Visible (Par_Unit, False);
+ 
           Analyze_Subunit_Context;
+ 
           Re_Install_Parents (Lib_Unit, Par_Unit);
+          Set_Is_Immediately_Visible (Par_Unit);
  
           --  If the context includes a child unit of the parent of the
           --  subunit, the parent will have been removed from visibility,
*************** package body Sem_Ch10 is
*** 1500,1506 ****
           Re_Install_Use_Clauses;
           Install_Context (N);
  
!          --  Restore state of suppress flags for current body.
  
           Scope_Suppress := Svg;
  
--- 1539,1545 ----
           Re_Install_Use_Clauses;
           Install_Context (N);
  
!          --  Restore state of suppress flags for current body
  
           Scope_Suppress := Svg;
  
*************** package body Sem_Ch10 is
*** 1529,1535 ****
     begin
        Check_Stub_Level (N);
  
!       --  First occurence of name may have been as an incomplete type.
  
        if Present (Nam) and then Ekind (Nam) = E_Incomplete_Type then
           Nam := Full_View (Nam);
--- 1568,1574 ----
     begin
        Check_Stub_Level (N);
  
!       --  First occurence of name may have been as an incomplete type
  
        if Present (Nam) and then Ekind (Nam) = E_Incomplete_Type then
           Nam := Full_View (Nam);
*************** package body Sem_Ch10 is
*** 1590,1601 ****
        --  Set True if the unit currently being compiled is an internal unit
  
        Save_Style_Check : constant Boolean := Opt.Style_Check;
!       Save_C_Restrict  : constant Save_Compilation_Unit_Restrictions :=
!                            Compilation_Unit_Restrictions_Save;
  
     begin
        if Limited_Present (N) then
!          --  Ada0Y (AI-50217): Build visibility structures but do not
           --  analyze unit
  
           Build_Limited_Views (N);
--- 1629,1640 ----
        --  Set True if the unit currently being compiled is an internal unit
  
        Save_Style_Check : constant Boolean := Opt.Style_Check;
!       Save_C_Restrict  : constant Save_Cunit_Boolean_Restrictions :=
!                            Cunit_Boolean_Restrictions_Save;
  
     begin
        if Limited_Present (N) then
!          --  Ada 2005 (AI-50217): Build visibility structures but do not
           --  analyze unit
  
           Build_Limited_Views (N);
*************** package body Sem_Ch10 is
*** 1629,1634 ****
--- 1668,1674 ----
        end if;
  
        U := Unit (Library_Unit (N));
+       Check_Restriction_No_Dependence (Name (N), N);
        Intunit := Is_Internal_File_Name (Unit_File_Name (Current_Sem_Unit));
  
        --  Following checks are skipped for dummy packages (those supplied
*************** package body Sem_Ch10 is
*** 1652,1665 ****
  
           if Implementation_Unit_Warnings
             and then Current_Sem_Unit = Main_Unit
-            and then Implementation_Unit (Get_Source_Unit (U))
             and then not Intunit
             and then not Implicit_With (N)
           then
!             Error_Msg_N ("& is an internal 'G'N'A'T unit?", Name (N));
!             Error_Msg_N
!               ("\use of this unit is non-portable and version-dependent?",
!                Name (N));
           end if;
        end if;
  
--- 1692,1717 ----
  
           if Implementation_Unit_Warnings
             and then Current_Sem_Unit = Main_Unit
             and then not Intunit
             and then not Implicit_With (N)
+            and then not GNAT_Mode
           then
!             declare
!                U_Kind : constant Kind_Of_Unit :=
!                           Get_Kind_Of_Unit (Get_Source_Unit (U));
! 
!             begin
!                if U_Kind = Implementation_Unit then
!                   Error_Msg_N ("& is an internal 'G'N'A'T unit?", Name (N));
!                   Error_Msg_N
!                     ("\use of this unit is non-portable " &
!                      "and version-dependent?",
!                      Name (N));
! 
!                elsif U_Kind = Ada_05_Unit and then Ada_Version = Ada_95 then
!                   Error_Msg_N ("& is an Ada 2005 unit?", Name (N));
!                end if;
!             end;
           end if;
        end if;
  
*************** package body Sem_Ch10 is
*** 1735,1741 ****
        --  Restore style checks and restrictions
  
        Style_Check := Save_Style_Check;
!       Compilation_Unit_Restrictions_Restore (Save_C_Restrict);
  
        --  Record the reference, but do NOT set the unit as referenced, we
        --  want to consider the unit as unreferenced if this is the only
--- 1787,1793 ----
        --  Restore style checks and restrictions
  
        Style_Check := Save_Style_Check;
!       Cunit_Boolean_Restrictions_Restore (Save_C_Restrict);
  
        --  Record the reference, but do NOT set the unit as referenced, we
        --  want to consider the unit as unreferenced if this is the only
*************** package body Sem_Ch10 is
*** 1792,1801 ****
          and then Present (System_Extend_Unit)
          and then Present_System_Aux (N)
        then
!          --  If the extension is not present, an error will have been emitted.
  
           null;
        end if;
     end Analyze_With_Clause;
  
     ------------------------------
--- 1844,1861 ----
          and then Present (System_Extend_Unit)
          and then Present_System_Aux (N)
        then
!          --  If the extension is not present, an error will have been emitted
  
           null;
        end if;
+ 
+       --  Ada 2005 (AI-262): Remove from visibility the entity corresponding
+       --  to private_with units; they will be made visible later (just before
+       --  the private part is analyzed)
+ 
+       if Private_Present (N) then
+          Set_Is_Immediately_Visible (E_Name, False);
+       end if;
     end Analyze_With_Clause;
  
     ------------------------------
*************** package body Sem_Ch10 is
*** 1812,1818 ****
        Sel  : Node_Id;
  
        procedure Decorate_Tagged_Type (T : Entity_Id);
!       --  Set basic attributes of type, including its class_wide type.
  
        function In_Chain (E : Entity_Id) return Boolean;
        --  Check that the imported type is not already in the homonym chain,
--- 1872,1878 ----
        Sel  : Node_Id;
  
        procedure Decorate_Tagged_Type (T : Entity_Id);
!       --  Set basic attributes of type, including its class_wide type
  
        function In_Chain (E : Entity_Id) return Boolean;
        --  Check that the imported type is not already in the homonym chain,
*************** package body Sem_Ch10 is
*** 1837,1843 ****
              Set_Current_Entity (T);
           end if;
  
!          --  Build bogus class_wide type, if not previously done.
  
           if No (Class_Wide_Type (T)) then
              CW := Make_Defining_Identifier (Loc,  New_Internal_Name ('S'));
--- 1897,1903 ----
              Set_Current_Entity (T);
           end if;
  
!          --  Build bogus class_wide type, if not previously done
  
           if No (Class_Wide_Type (T)) then
              CW := Make_Defining_Identifier (Loc,  New_Internal_Name ('S'));
*************** package body Sem_Ch10 is
*** 1952,1958 ****
  
           if Nkind (Parent (P)) = N_Defining_Program_Unit_Name then
  
!             --  Make parent packages visible.
  
              declare
                 Parent_Comp : Node_Id;
--- 2012,2018 ----
  
           if Nkind (Parent (P)) = N_Defining_Program_Unit_Name then
  
!             --  Make parent packages visible
  
              declare
                 Parent_Comp : Node_Id;
*************** package body Sem_Ch10 is
*** 2102,2108 ****
        Lib_Unit : constant Node_Id := Unit (N);
  
        procedure Check_Parent_Context (U : Node_Id);
!       --  Examine context items of parent unit to locate with_type clauses.
  
        --------------------------
        -- Check_Parent_Context --
--- 2162,2168 ----
        Lib_Unit : constant Node_Id := Unit (N);
  
        procedure Check_Parent_Context (U : Node_Id);
!       --  Examine context items of parent unit to locate with_type clauses
  
        --------------------------
        -- Check_Parent_Context --
*************** package body Sem_Ch10 is
*** 2135,2140 ****
--- 2195,2201 ----
                     or else Nkind (Lib_Unit) = N_Subprogram_Body)
        then
           Check_Parent_Context (Library_Unit (N));
+ 
           if Is_Child_Spec (Unit (Library_Unit (N))) then
              Check_Parent_Context (Parent_Spec (Unit (Library_Unit (N))));
           end if;
*************** package body Sem_Ch10 is
*** 2210,2217 ****
--- 2271,2282 ----
        Item := First (Context_Items (N));
        while Present (Item) loop
  
+          --  Ada 2005 (AI-262): Allow private_with of a private child package
+          --  in public siblings
+ 
           if Nkind (Item) = N_With_Clause
              and then not Implicit_With (Item)
+             and then not Private_Present (Item)
              and then Is_Private_Descendant (Entity (Name (Item)))
           then
              Priv_Child := Entity (Name (Item));
*************** package body Sem_Ch10 is
*** 2406,2412 ****
              Mark_Rewrite_Insertion (Withn);
           end if;
  
!       elsif Nkind (Nam) = N_Selected_Component then
           Withn :=
             Make_With_Clause
             (Loc,
--- 2471,2477 ----
              Mark_Rewrite_Insertion (Withn);
           end if;
  
!       else pragma Assert (Nkind (Nam) = N_Selected_Component);
           Withn :=
             Make_With_Clause
             (Loc,
*************** package body Sem_Ch10 is
*** 2437,2446 ****
  
              Expand_Limited_With_Clause (Prefix (Nam), N);
           end if;
- 
-       else
-          null;
-          pragma Assert (False);
        end if;
  
        New_Nodes_OK := New_Nodes_OK - 1;
--- 2502,2507 ----
*************** package body Sem_Ch10 is
*** 2452,2459 ****
  
     function Get_Parent_Entity (Unit : Node_Id) return Entity_Id is
     begin
!       if Nkind (Unit) = N_Package_Instantiation then
           return Defining_Entity (Specification (Instance_Spec (Unit)));
        else
           return Defining_Entity (Unit);
        end if;
--- 2513,2528 ----
  
     function Get_Parent_Entity (Unit : Node_Id) return Entity_Id is
     begin
!       if Nkind (Unit) = N_Package_Body
!         and then Nkind (Original_Node (Unit)) = N_Package_Instantiation
!       then
!          return
!            Defining_Entity
!              (Specification (Instance_Spec (Original_Node (Unit))));
! 
!       elsif Nkind (Unit) = N_Package_Instantiation then
           return Defining_Entity (Specification (Instance_Spec (Unit)));
+ 
        else
           return Defining_Entity (Unit);
        end if;
*************** package body Sem_Ch10 is
*** 2469,2480 ****
     is
        Loc    : constant Source_Ptr := Sloc (N);
        P      : constant Node_Id    := Parent_Spec (Child_Unit);
!       P_Unit : constant Node_Id    := Unit (P);
        P_Name : constant Entity_Id  := Get_Parent_Entity (P_Unit);
        Withn  : Node_Id;
  
!       function Build_Ancestor_Name (P : Node_Id)  return Node_Id;
!       --  Build prefix of child unit name. Recurse if needed.
  
        function Build_Unit_Name return Node_Id;
        --  If the unit is a child unit, build qualified name with all
--- 2538,2551 ----
     is
        Loc    : constant Source_Ptr := Sloc (N);
        P      : constant Node_Id    := Parent_Spec (Child_Unit);
! 
!       P_Unit : Node_Id    := Unit (P);
! 
        P_Name : constant Entity_Id  := Get_Parent_Entity (P_Unit);
        Withn  : Node_Id;
  
!       function Build_Ancestor_Name (P : Node_Id) return Node_Id;
!       --  Build prefix of child unit name. Recurse if needed
  
        function Build_Unit_Name return Node_Id;
        --  If the unit is a child unit, build qualified name with all
*************** package body Sem_Ch10 is
*** 2487,2493 ****
        function Build_Ancestor_Name (P : Node_Id) return Node_Id is
           P_Ref : constant Node_Id :=
                     New_Reference_To (Defining_Entity (P), Loc);
- 
        begin
           if No (Parent_Spec (P)) then
              return P_Ref;
--- 2558,2563 ----
*************** package body Sem_Ch10 is
*** 2505,2511 ****
  
        function Build_Unit_Name return Node_Id is
           Result : Node_Id;
- 
        begin
           if No (Parent_Spec (P_Unit)) then
              return New_Reference_To (P_Name, Loc);
--- 2575,2580 ----
*************** package body Sem_Ch10 is
*** 2523,2528 ****
--- 2592,2607 ----
     --  Start of processing for Implicit_With_On_Parent
  
     begin
+       --  The unit of the current compilation may be a package body
+       --  that replaces an instance node. In this case we need the
+       --  original instance node to construct the proper parent name.
+ 
+       if Nkind (P_Unit) = N_Package_Body
+         and then Nkind (Original_Node (P_Unit)) = N_Package_Instantiation
+       then
+          P_Unit := Original_Node (P_Unit);
+       end if;
+ 
        New_Nodes_OK := New_Nodes_OK + 1;
        Withn := Make_With_Clause (Loc, Name => Build_Unit_Name);
  
*************** package body Sem_Ch10 is
*** 2541,2546 ****
--- 2620,2626 ----
        if Is_Child_Spec (P_Unit) then
           Implicit_With_On_Parent (P_Unit, N);
        end if;
+ 
        New_Nodes_OK := New_Nodes_OK - 1;
     end Implicit_With_On_Parent;
  
*************** package body Sem_Ch10 is
*** 2590,2596 ****
           then
              if Limited_Present (Item) then
  
!                --  Limited withed units will be installed later.
  
                 goto Continue;
  
--- 2670,2676 ----
           then
              if Limited_Present (Item) then
  
!                --  Limited withed units will be installed later
  
                 goto Continue;
  
*************** package body Sem_Ch10 is
*** 2767,2772 ****
--- 2847,2853 ----
                    if not (Private_Present (Parent (Lib_Spec))) then
                       P_Name := Defining_Entity (P);
                       Install_Private_Declarations (P_Name);
+                      Install_Private_With_Clauses (P_Name);
                       Set_Use (Private_Declarations (Specification (P)));
                    end if;
  
*************** package body Sem_Ch10 is
*** 2827,2835 ****
        --  context_clause as a nonlimited with_clause that mentions
        --  the same library.
  
!       --------------------
!       --  Check_Parent  --
!       --------------------
  
        procedure Check_Parent (P : Node_Id; W : Node_Id) is
           Item   : Node_Id;
--- 2908,2916 ----
        --  context_clause as a nonlimited with_clause that mentions
        --  the same library.
  
!       ------------------
!       -- Check_Parent --
!       ------------------
  
        procedure Check_Parent (P : Node_Id; W : Node_Id) is
           Item   : Node_Id;
*************** package body Sem_Ch10 is
*** 3003,3009 ****
           if Nkind (Item) = N_With_Clause
             and then Limited_Present (Item)
           then
- 
              Check_Withed_Unit (Item);
  
              if Private_Present (Library_Unit (Item)) then
--- 3084,3089 ----
*************** package body Sem_Ch10 is
*** 3124,3181 ****
          or else Private_Present (Parent (Lib_Unit))
        then
           Install_Private_Declarations (P_Name);
           Set_Use (Private_Declarations (P_Spec));
        end if;
     end Install_Parents;
  
!    ----------------------
!    -- Install_Siblings --
!    ----------------------
! 
!    procedure Install_Siblings (U_Name : Entity_Id; N : Node_Id) is
!       Item : Node_Id;
!       Id   : Entity_Id;
!       Prev : Entity_Id;
! 
!       function Is_Ancestor (E : Entity_Id) return Boolean;
!       --  Determine whether the scope of a child unit is an ancestor of
!       --  the current unit.
!       --  Shouldn't this be somewhere more general ???
! 
!       -----------------
!       -- Is_Ancestor --
!       -----------------
  
!       function Is_Ancestor (E : Entity_Id) return Boolean is
!          Par : Entity_Id;
  
!       begin
!          Par := U_Name;
  
!          while Present (Par)
!            and then Par /= Standard_Standard
!          loop
  
!             if Par = E then
!                return True;
              end if;
  
!             Par := Scope (Par);
           end loop;
  
!          return False;
!       end Is_Ancestor;
! 
!    --  Start of processing for Install_Siblings
  
     begin
        --  Iterate over explicit with clauses, and check whether the
        --  scope of each entity is an ancestor of the current unit.
  
        Item := First (Context_Items (N));
- 
        while Present (Item) loop
- 
           if Nkind (Item) = N_With_Clause
             and then not Implicit_With (Item)
             and then not Limited_Present (Item)
--- 3204,3262 ----
          or else Private_Present (Parent (Lib_Unit))
        then
           Install_Private_Declarations (P_Name);
+          Install_Private_With_Clauses (P_Name);
           Set_Use (Private_Declarations (P_Spec));
        end if;
     end Install_Parents;
  
!    ----------------------------------
!    -- Install_Private_With_Clauses --
!    ----------------------------------
  
!    procedure Install_Private_With_Clauses (P : Entity_Id) is
!       Decl   : constant Node_Id := Unit_Declaration_Node (P);
!       Item   : Node_Id;
  
!    begin
!       if Debug_Flag_I then
!          Write_Str ("install private with clauses of ");
!          Write_Name (Chars (P));
!          Write_Eol;
!       end if;
  
!       if Nkind (Parent (Decl)) = N_Compilation_Unit then
!          Item := First (Context_Items (Parent (Decl)));
  
!          while Present (Item) loop
!             if Nkind (Item) = N_With_Clause
!               and then Private_Present (Item)
!             then
!                if Limited_Present (Item) then
!                   Install_Limited_Withed_Unit (Item);
!                else
!                   Install_Withed_Unit (Item, Private_With_OK => True);
!                end if;
              end if;
  
!             Next (Item);
           end loop;
+       end if;
+    end Install_Private_With_Clauses;
  
!    ----------------------
!    -- Install_Siblings --
!    ----------------------
  
+    procedure Install_Siblings (U_Name : Entity_Id; N : Node_Id) is
+       Item : Node_Id;
+       Id   : Entity_Id;
+       Prev : Entity_Id;
     begin
        --  Iterate over explicit with clauses, and check whether the
        --  scope of each entity is an ancestor of the current unit.
  
        Item := First (Context_Items (N));
        while Present (Item) loop
           if Nkind (Item) = N_With_Clause
             and then not Implicit_With (Item)
             and then not Limited_Present (Item)
*************** package body Sem_Ch10 is
*** 3183,3196 ****
              Id := Entity (Name (Item));
  
              if Is_Child_Unit (Id)
!               and then Is_Ancestor (Scope (Id))
              then
                 Set_Is_Immediately_Visible (Id);
-                Prev := Current_Entity (Id);
  
                 --  Check for the presence of another unit in the context,
                 --  that may be inadvertently hidden by the child.
  
                 if Present (Prev)
                   and then Is_Immediately_Visible (Prev)
                   and then not Is_Child_Unit (Prev)
--- 3264,3278 ----
              Id := Entity (Name (Item));
  
              if Is_Child_Unit (Id)
!               and then Is_Ancestor_Package (Scope (Id), U_Name)
              then
                 Set_Is_Immediately_Visible (Id);
  
                 --  Check for the presence of another unit in the context,
                 --  that may be inadvertently hidden by the child.
  
+                Prev := Current_Entity (Id);
+ 
                 if Present (Prev)
                   and then Is_Immediately_Visible (Prev)
                   and then not Is_Child_Unit (Prev)
*************** package body Sem_Ch10 is
*** 3221,3231 ****
              --  the child immediately visible.
  
              elsif Is_Child_Unit (Scope (Id))
!               and then Is_Ancestor (Scope (Scope (Id)))
              then
                 Set_Is_Immediately_Visible (Scope (Id));
              end if;
- 
           end if;
  
           Next (Item);
--- 3303,3312 ----
              --  the child immediately visible.
  
              elsif Is_Child_Unit (Scope (Id))
!               and then Is_Ancestor_Package (Scope (Scope (Id)), U_Name)
              then
                 Set_Is_Immediately_Visible (Scope (Id));
              end if;
           end if;
  
           Next (Item);
*************** package body Sem_Ch10 is
*** 3241,3254 ****
                             Get_Source_Unit (Library_Unit (N));
        P_Unit           : constant Entity_Id := Unit (Library_Unit (N));
        P                : Entity_Id;
-       Lim_Elmt         : Elmt_Id;
-       Lim_Typ          : Entity_Id;
        Is_Child_Package : Boolean := False;
  
        function In_Chain (E : Entity_Id) return Boolean;
        --  Check that the shadow entity is not already in the homonym
        --  chain, for example through a limited_with clause in a parent unit.
  
        function In_Chain (E : Entity_Id) return Boolean is
           H : Entity_Id := Current_Entity (E);
  
--- 3322,3340 ----
                             Get_Source_Unit (Library_Unit (N));
        P_Unit           : constant Entity_Id := Unit (Library_Unit (N));
        P                : Entity_Id;
        Is_Child_Package : Boolean := False;
  
+       Lim_Header       : Entity_Id;
+       Lim_Typ          : Entity_Id;
+ 
        function In_Chain (E : Entity_Id) return Boolean;
        --  Check that the shadow entity is not already in the homonym
        --  chain, for example through a limited_with clause in a parent unit.
  
+       --------------
+       -- In_Chain --
+       --------------
+ 
        function In_Chain (E : Entity_Id) return Boolean is
           H : Entity_Id := Current_Entity (E);
  
*************** package body Sem_Ch10 is
*** 3288,3295 ****
              return;
  
           when others =>
!             pragma Assert (False);
!             null;
        end case;
  
        P := Defining_Unit_Name (Specification (P_Unit));
--- 3374,3380 ----
              return;
  
           when others =>
!             raise Program_Error;
        end case;
  
        P := Defining_Unit_Name (Specification (P_Unit));
*************** package body Sem_Ch10 is
*** 3322,3329 ****
        --  view because the full view of X supersedes its limited view.
  
        if Analyzed (Cunit (Unum))
!         and then Is_Immediately_Visible (P)
        then
           return;
        end if;
  
--- 3407,3445 ----
        --  view because the full view of X supersedes its limited view.
  
        if Analyzed (Cunit (Unum))
!         and then (Is_Immediately_Visible (P)
!                    or else (Is_Child_Package
!                              and then Is_Visible_Child_Unit (P)))
        then
+          --  Ada 2005 (AI-262): Install the private declarations of P
+ 
+          if Private_Present (N)
+            and then not In_Private_Part (P)
+          then
+             declare
+                Id : Entity_Id;
+             begin
+                Id := First_Private_Entity (P);
+ 
+                while Present (Id) loop
+                   if not Is_Internal (Id)
+                     and then not Is_Child_Unit (Id)
+                   then
+                      if not In_Chain (Id) then
+                         Set_Homonym (Id, Current_Entity (Id));
+                         Set_Current_Entity (Id);
+                      end if;
+ 
+                      Set_Is_Immediately_Visible (Id);
+                   end if;
+ 
+                   Next_Entity (Id);
+                end loop;
+ 
+                Set_In_Private_Part (P);
+             end;
+          end if;
+ 
           return;
        end if;
  
*************** package body Sem_Ch10 is
*** 3392,3403 ****
  
        Set_Is_Immediately_Visible (P);
  
!       --  Install each incomplete view
  
!       Lim_Elmt   := First_Elmt (Limited_Views (P));
  
!       while Present (Lim_Elmt) loop
!          Lim_Typ  := Node (Lim_Elmt);
  
           if not In_Chain (Lim_Typ) then
              Set_Homonym (Lim_Typ, Current_Entity (Lim_Typ));
--- 3508,3524 ----
  
        Set_Is_Immediately_Visible (P);
  
!       --  Install each incomplete view. The first element of the limited view
!       --  is a header (an E_Package entity) that is used to reference the first
!       --  shadow entity in the private part of the package
  
!       Lim_Header := Limited_View (P);
!       Lim_Typ    := First_Entity (Lim_Header);
  
!       while Present (Lim_Typ) loop
! 
!          exit when not Private_Present (N)
!                         and then Lim_Typ = First_Private_Entity (Lim_Header);
  
           if not In_Chain (Lim_Typ) then
              Set_Homonym (Lim_Typ, Current_Entity (Lim_Typ));
*************** package body Sem_Ch10 is
*** 3408,3417 ****
                 Write_Name (Chars (Lim_Typ));
                 Write_Eol;
              end if;
- 
           end if;
  
!          Next_Elmt (Lim_Elmt);
        end loop;
  
        --  The context clause has installed a limited-view, mark it
--- 3529,3537 ----
                 Write_Name (Chars (Lim_Typ));
                 Write_Eol;
              end if;
           end if;
  
!          Next_Entity (Lim_Typ);
        end loop;
  
        --  The context clause has installed a limited-view, mark it
*************** package body Sem_Ch10 is
*** 3425,3438 ****
     -- Install_Withed_Unit --
     -------------------------
  
!    procedure Install_Withed_Unit (With_Clause : Node_Id) is
        Uname : constant Entity_Id := Entity (Name (With_Clause));
        P     : constant Entity_Id := Scope (Uname);
  
     begin
  
        if Debug_Flag_I then
!          Write_Str ("install withed unit ");
           Write_Name (Chars (Uname));
           Write_Eol;
        end if;
--- 3545,3577 ----
     -- Install_Withed_Unit --
     -------------------------
  
!    procedure Install_Withed_Unit
!      (With_Clause     : Node_Id;
!       Private_With_OK : Boolean := False)
!    is
        Uname : constant Entity_Id := Entity (Name (With_Clause));
        P     : constant Entity_Id := Scope (Uname);
  
     begin
+       --  Ada 2005 (AI-262): Do not install the private withed unit if we are
+       --  compiling a package declaration and the Private_With_OK flag was not
+       --  set by the caller. These declarations will be installed later (before
+       --  analyzing the private part of the package).
+ 
+       if Private_Present (With_Clause)
+         and then Nkind (Cunit (Current_Sem_Unit)) = N_Package_Declaration
+         and then not (Private_With_OK)
+       then
+          return;
+       end if;
  
        if Debug_Flag_I then
!          if Private_Present (With_Clause) then
!             Write_Str ("install private withed unit ");
!          else
!             Write_Str ("install withed unit ");
!          end if;
! 
           Write_Name (Chars (Uname));
           Write_Eol;
        end if;
*************** package body Sem_Ch10 is
*** 3474,3480 ****
                 Set_Is_Visible_Child_Unit
                   (Related_Instance
                     (Defining_Entity (Unit (Library_Unit (With_Clause)))));
-                null;
              end if;
  
              --  The parent unit may have been installed already, and
--- 3613,3618 ----
*************** package body Sem_Ch10 is
*** 3488,3494 ****
           end if;
  
        elsif not Is_Immediately_Visible (Uname) then
!          Set_Is_Immediately_Visible (Uname);
           Set_Context_Installed (With_Clause);
        end if;
  
--- 3626,3637 ----
           end if;
  
        elsif not Is_Immediately_Visible (Uname) then
!          if not Private_Present (With_Clause)
!            or else Private_With_OK
!          then
!             Set_Is_Immediately_Visible (Uname);
!          end if;
! 
           Set_Context_Installed (With_Clause);
        end if;
  
*************** package body Sem_Ch10 is
*** 3498,3503 ****
--- 3641,3717 ----
        if Ekind (Uname) = E_Package then
           Set_From_With_Type (Uname, False);
        end if;
+ 
+       --  Ada 2005 (AI-377): it is illegal for a with_clause to name a child
+       --  unit if there is a visible homograph for it declared in the same
+       --  declarative region. This pathological case can only arise when an
+       --  instance I1 of a generic unit G1 has an explicit child unit I1.G2,
+       --  G1 has a generic child also named G2, and the context includes with_
+       --  clauses for both I1.G2 and for G1.G2, making an implicit declaration
+       --  of I1.G2 visible as well.
+ 
+       if Is_Child_Unit (Uname)
+         and then Is_Visible_Child_Unit (Uname)
+         and then Ada_Version >= Ada_05
+       then
+          declare
+             Decl1 : constant Node_Id  := Unit_Declaration_Node (P);
+             Decl2 : Node_Id;
+             P2    : Entity_Id;
+             U2    : Entity_Id;
+ 
+          begin
+             U2 := Homonym (Uname);
+             while Present (U2) loop
+                P2 := Scope (U2);
+                Decl2  := Unit_Declaration_Node (P2);
+ 
+                if Is_Child_Unit (U2)
+                  and then Is_Visible_Child_Unit (U2)
+                then
+                   if Is_Generic_Instance (P)
+                     and then Nkind (Decl1) = N_Package_Declaration
+                     and then Generic_Parent (Specification (Decl1)) = P2
+                   then
+                      Error_Msg_N ("illegal with_clause", With_Clause);
+                      Error_Msg_N
+                        ("\child unit has visible homograph" &
+                            " ('R'M 8.3(26), 10.1.1(19))",
+                          With_Clause);
+                      exit;
+ 
+                   elsif Is_Generic_Instance (P2)
+                     and then Nkind (Decl2) = N_Package_Declaration
+                     and then Generic_Parent (Specification (Decl2)) = P
+                   then
+                      --  With_clause for child unit of instance appears before
+                      --  in the context. We want to place the error message on
+                      --  it, not on the generic child unit itself.
+ 
+                      declare
+                         Prev_Clause : Node_Id;
+ 
+                      begin
+                         Prev_Clause := First (List_Containing (With_Clause));
+                         while Entity (Name (Prev_Clause)) /= U2 loop
+                            Next (Prev_Clause);
+                         end loop;
+ 
+                         pragma Assert (Present (Prev_Clause));
+                         Error_Msg_N ("illegal with_clause", Prev_Clause);
+                         Error_Msg_N
+                           ("\child unit has visible homograph" &
+                               " ('R'M 8.3(26), 10.1.1(19))",
+                             Prev_Clause);
+                         exit;
+                      end;
+                   end if;
+                end if;
+ 
+                U2 := Homonym (U2);
+             end loop;
+          end;
+       end if;
     end Install_Withed_Unit;
  
     -------------------
*************** package body Sem_Ch10 is
*** 3582,3590 ****
        Unum : constant Unit_Number_Type := Get_Source_Unit (Library_Unit (N));
        P    : constant Entity_Id        := Cunit_Entity (Unum);
  
!       Spec        : Node_Id;         --  To denote a package specification
!       Lim_Typ     : Entity_Id;       --  To denote shadow entities.
!       Comp_Typ    : Entity_Id;       --  To denote real entities.
  
        procedure Decorate_Incomplete_Type
          (E    : Entity_Id;
--- 3796,3808 ----
        Unum : constant Unit_Number_Type := Get_Source_Unit (Library_Unit (N));
        P    : constant Entity_Id        := Cunit_Entity (Unum);
  
!       Spec        : Node_Id;            --  To denote a package specification
!       Lim_Typ     : Entity_Id;          --  To denote shadow entities
!       Comp_Typ    : Entity_Id;          --  To denote real entities
! 
!       Lim_Header  : Entity_Id;          --  Package entity
!       Last_Lim_E  : Entity_Id := Empty; --  Last limited entity built
!       Last_Pub_Lim_E : Entity_Id;       --  To set the first private entity
  
        procedure Decorate_Incomplete_Type
          (E    : Entity_Id;
*************** package body Sem_Ch10 is
*** 3604,3610 ****
        --  Set basic attributes of tagged type T, including its class_wide type.
        --  The parameters Loc, Scope are used to decorate the class_wide type.
  
!       procedure Build_Chain (Spec : Node_Id; Scope : Entity_Id);
        --  Construct list of shadow entities and attach it to entity of
        --  package that is mentioned in a limited_with clause.
  
--- 3822,3830 ----
        --  Set basic attributes of tagged type T, including its class_wide type.
        --  The parameters Loc, Scope are used to decorate the class_wide type.
  
!       procedure Build_Chain
!         (Scope      : Entity_Id;
!          First_Decl : Node_Id);
        --  Construct list of shadow entities and attach it to entity of
        --  package that is mentioned in a limited_with clause.
  
*************** package body Sem_Ch10 is
*** 3612,3619 ****
          (Kind       : Entity_Kind;
           Sloc_Value : Source_Ptr;
           Id_Char    : Character) return Entity_Id;
!       --  This function is similar to New_Internal_Entity, except that the
!       --  entity is not added to the scope's list of entities.
  
        ------------------------------
        -- Decorate_Incomplete_Type --
--- 3832,3839 ----
          (Kind       : Entity_Kind;
           Sloc_Value : Source_Ptr;
           Id_Char    : Character) return Entity_Id;
!       --  Build a new internal entity and append it to the list of shadow
!       --  entities available through the limited-header
  
        ------------------------------
        -- Decorate_Incomplete_Type --
*************** package body Sem_Ch10 is
*** 3624,3636 ****
           Scop : Entity_Id)
        is
        begin
!          Set_Ekind                     (E, E_Incomplete_Type);
!          Set_Scope                     (E, Scop);
!          Set_Etype                     (E, E);
!          Set_Is_First_Subtype          (E, True);
!          Set_Stored_Constraint         (E, No_Elist);
!          Set_Full_View                 (E, Empty);
!          Init_Size_Align               (E);
        end Decorate_Incomplete_Type;
  
        --------------------------
--- 3844,3856 ----
           Scop : Entity_Id)
        is
        begin
!          Set_Ekind             (E, E_Incomplete_Type);
!          Set_Scope             (E, Scop);
!          Set_Etype             (E, E);
!          Set_Is_First_Subtype  (E, True);
!          Set_Stored_Constraint (E, No_Elist);
!          Set_Full_View         (E, Empty);
!          Init_Size_Align       (E);
        end Decorate_Incomplete_Type;
  
        --------------------------
*************** package body Sem_Ch10 is
*** 3664,3670 ****
              Set_Equivalent_Type           (CW, Empty);
              Set_From_With_Type            (CW, From_With_Type (T));
  
!             Set_Class_Wide_Type (T, CW);
           end if;
        end Decorate_Tagged_Type;
  
--- 3884,3890 ----
              Set_Equivalent_Type           (CW, Empty);
              Set_From_With_Type            (CW, From_With_Type (T));
  
!             Set_Class_Wide_Type           (T, CW);
           end if;
        end Decorate_Tagged_Type;
  
*************** package body Sem_Ch10 is
*** 3689,3724 ****
           Sloc_Value : Source_Ptr;
           Id_Char    : Character) return Entity_Id
        is
!          N : constant Entity_Id :=
                 Make_Defining_Identifier (Sloc_Value,
                   Chars => New_Internal_Name (Id_Char));
  
        begin
!          Set_Ekind          (N, Kind);
!          Set_Is_Internal    (N, True);
  
           if Kind in Type_Kind then
!             Init_Size_Align (N);
           end if;
  
!          return N;
        end New_Internal_Shadow_Entity;
  
        -----------------
        -- Build_Chain --
        -----------------
  
!       --  Could use more comments below ???
! 
!       procedure Build_Chain (Spec : Node_Id; Scope : Entity_Id) is
           Analyzed_Unit : constant Boolean := Analyzed (Cunit (Unum));
           Is_Tagged     : Boolean;
           Decl          : Node_Id;
  
        begin
!          Decl := First (Visible_Declarations (Spec));
  
           while Present (Decl) loop
              if Nkind (Decl) = N_Full_Type_Declaration then
                 Is_Tagged :=
                    Nkind (Type_Definition (Decl)) = N_Record_Definition
--- 3909,3962 ----
           Sloc_Value : Source_Ptr;
           Id_Char    : Character) return Entity_Id
        is
!          E : constant Entity_Id :=
                 Make_Defining_Identifier (Sloc_Value,
                   Chars => New_Internal_Name (Id_Char));
  
        begin
!          Set_Ekind       (E, Kind);
!          Set_Is_Internal (E, True);
  
           if Kind in Type_Kind then
!             Init_Size_Align (E);
           end if;
  
!          Append_Entity (E, Lim_Header);
!          Last_Lim_E := E;
!          return E;
        end New_Internal_Shadow_Entity;
  
        -----------------
        -- Build_Chain --
        -----------------
  
!       procedure Build_Chain
!         (Scope         : Entity_Id;
!          First_Decl    : Node_Id)
!       is
           Analyzed_Unit : constant Boolean := Analyzed (Cunit (Unum));
           Is_Tagged     : Boolean;
           Decl          : Node_Id;
  
        begin
!          Decl := First_Decl;
  
           while Present (Decl) loop
+ 
+             --  For each library_package_declaration in the environment, there
+             --  is an implicit declaration of a *limited view* of that library
+             --  package. The limited view of a package contains:
+             --
+             --   * For each nested package_declaration, a declaration of the
+             --     limited view of that package, with the same defining-
+             --     program-unit name.
+             --
+             --   * For each type_declaration in the visible part, an incomplete
+             --     type-declaration with the same defining_identifier, whose
+             --     completion is the type_declaration. If the type_declaration
+             --     is tagged, then the incomplete_type_declaration is tagged
+             --     incomplete.
+ 
              if Nkind (Decl) = N_Full_Type_Declaration then
                 Is_Tagged :=
                    Nkind (Type_Definition (Decl)) = N_Record_Definition
*************** package body Sem_Ch10 is
*** 3736,3742 ****
  
                 --  Create shadow entity for type
  
!                Lim_Typ  := New_Internal_Shadow_Entity
                   (Kind       => Ekind (Comp_Typ),
                    Sloc_Value => Sloc (Comp_Typ),
                    Id_Char    => 'Z');
--- 3974,3980 ----
  
                 --  Create shadow entity for type
  
!                Lim_Typ := New_Internal_Shadow_Entity
                   (Kind       => Ekind (Comp_Typ),
                    Sloc_Value => Sloc (Comp_Typ),
                    Id_Char    => 'Z');
*************** package body Sem_Ch10 is
*** 3752,3758 ****
                 end if;
  
                 Set_Non_Limited_View (Lim_Typ, Comp_Typ);
-                Append_Elmt (Lim_Typ,  To => Limited_Views (P));
  
              elsif Nkind (Decl) = N_Private_Type_Declaration
                and then Tagged_Present (Decl)
--- 3990,3995 ----
*************** package body Sem_Ch10 is
*** 3775,3781 ****
                 Decorate_Tagged_Type (Sloc (Decl), Lim_Typ, Scope);
  
                 Set_Non_Limited_View (Lim_Typ, Comp_Typ);
-                Append_Elmt (Lim_Typ,  To => Limited_Views (P));
  
              elsif Nkind (Decl) = N_Package_Declaration then
  
--- 4012,4017 ----
*************** package body Sem_Ch10 is
*** 3807,3815 ****
                    --  Note: The non_limited_view attribute is not used
                    --  for local packages.
  
!                   Append_Elmt (Lim_Typ,  To => Limited_Views (P));
! 
!                   Build_Chain (Spec, Scope => Lim_Typ);
                 end;
              end if;
  
--- 4043,4051 ----
                    --  Note: The non_limited_view attribute is not used
                    --  for local packages.
  
!                   Build_Chain
!                     (Scope      => Lim_Typ,
!                      First_Decl => First (Visible_Declarations (Spec)));
                 end;
              end if;
  
*************** package body Sem_Ch10 is
*** 3858,3865 ****
              return;
  
           when others =>
!             pragma Assert (False);
!             null;
        end case;
  
        --  Check if the chain is already built
--- 4094,4100 ----
              return;
  
           when others =>
!             raise Program_Error;
        end case;
  
        --  Check if the chain is already built
*************** package body Sem_Ch10 is
*** 3871,3882 ****
        end if;
  
        Set_Ekind (P, E_Package);
-       Set_Limited_Views     (P, New_Elmt_List);
-       --  Set_Entity (Name (N), P);
  
!       --  Create the auxiliary chain
  
-       Build_Chain (Spec, Scope => P);
        Set_Limited_View_Installed (Spec);
     end Build_Limited_Views;
  
--- 4106,4146 ----
        end if;
  
        Set_Ekind (P, E_Package);
  
!       --  Build the header of the limited_view
! 
!       Lim_Header := Make_Defining_Identifier (Sloc (N),
!                       Chars => New_Internal_Name (Id_Char => 'Z'));
!       Set_Ekind (Lim_Header, E_Package);
!       Set_Is_Internal (Lim_Header);
!       Set_Limited_View (P, Lim_Header);
! 
!       --  Create the auxiliary chain. All the shadow entities are appended
!       --  to the list of entities of the limited-view header
! 
!       Build_Chain
!         (Scope      => P,
!          First_Decl => First (Visible_Declarations (Spec)));
! 
!       --  Save the last built shadow entity. It is needed later to set the
!       --  reference to the first shadow entity in the private part
! 
!       Last_Pub_Lim_E := Last_Lim_E;
! 
!       --  Ada 2005 (AI-262): Add the limited view of the private declarations
!       --  Required to give support to limited-private-with clauses
! 
!       Build_Chain (Scope      => P,
!                    First_Decl => First (Private_Declarations (Spec)));
! 
!       if Last_Pub_Lim_E /= Empty then
!          Set_First_Private_Entity (Lim_Header,
!                                    Next_Entity (Last_Pub_Lim_E));
!       else
!          Set_First_Private_Entity (Lim_Header,
!                                    First_Entity (P));
!       end if;
  
        Set_Limited_View_Installed (Spec);
     end Build_Limited_Views;
  
*************** package body Sem_Ch10 is
*** 3987,3993 ****
        Lib_Unit : constant Node_Id := Unit (N);
  
     begin
!       --  If this is a child unit, first remove the parent units.
  
        if Is_Child_Spec (Lib_Unit) then
           Remove_Parents (Lib_Unit);
--- 4251,4257 ----
        Lib_Unit : constant Node_Id := Unit (N);
  
     begin
!       --  If this is a child unit, first remove the parent units
  
        if Is_Child_Spec (Lib_Unit) then
           Remove_Parents (Lib_Unit);
*************** package body Sem_Ch10 is
*** 4005,4011 ****
        Unit_Name : Entity_Id;
  
     begin
!       --  Ada0Y (AI-50217): We remove the context clauses in two phases:
        --  limited-views first and regular-views later (to maintain the
        --  stack model).
  
--- 4269,4275 ----
        Unit_Name : Entity_Id;
  
     begin
!       --  Ada 2005 (AI-50217): We remove the context clauses in two phases:
        --  limited-views first and regular-views later (to maintain the
        --  stack model).
  
*************** package body Sem_Ch10 is
*** 4022,4028 ****
             and then Limited_View_Installed (Item)
           then
              Remove_Limited_With_Clause (Item);
- 
           end if;
  
           Next (Item);
--- 4286,4291 ----
*************** package body Sem_Ch10 is
*** 4071,4080 ****
     --------------------------------
  
     procedure Remove_Limited_With_Clause (N : Node_Id) is
!       P_Unit    : constant Entity_Id := Unit (Library_Unit (N));
!       P         : Entity_Id := Defining_Unit_Name (Specification (P_Unit));
!       Lim_Elmt  : Elmt_Id;
!       Lim_Typ   : Entity_Id;
  
     begin
        if Nkind (P) = N_Defining_Program_Unit_Name then
--- 4334,4342 ----
     --------------------------------
  
     procedure Remove_Limited_With_Clause (N : Node_Id) is
!       P_Unit     : constant Entity_Id := Unit (Library_Unit (N));
!       P          : Entity_Id := Defining_Unit_Name (Specification (P_Unit));
!       Lim_Typ    : Entity_Id;
  
     begin
        if Nkind (P) = N_Defining_Program_Unit_Name then
*************** package body Sem_Ch10 is
*** 4091,4105 ****
           Write_Eol;
        end if;
  
!       --  Remove all shadow entities from visibility
! 
!       Lim_Elmt  := First_Elmt (Limited_Views (P));
  
!       while Present (Lim_Elmt) loop
!          Lim_Typ  := Node (Lim_Elmt);
  
           Unchain (Lim_Typ);
!          Next_Elmt (Lim_Elmt);
        end loop;
  
        --  Indicate that the limited view of the package is not installed
--- 4353,4367 ----
           Write_Eol;
        end if;
  
!       --  Remove all shadow entities from visibility. The first element of the
!       --  limited view is a header (an E_Package entity) that is used to
!       --  reference the first shadow entity in the private part of the package
  
!       Lim_Typ    := First_Entity (Limited_View (P));
  
+       while Present (Lim_Typ) loop
           Unchain (Lim_Typ);
!          Next_Entity (Lim_Typ);
        end loop;
  
        --  Indicate that the limited view of the package is not installed
*************** package body Sem_Ch10 is
*** 4145,4151 ****
                       Write_Name (Chars (Ent));
                       Write_Eol;
                    end if;
- 
                 end if;
  
                 Next_Entity (Ent);
--- 4407,4412 ----
*************** package body Sem_Ch10 is
*** 4161,4176 ****
     procedure Remove_Parents (Lib_Unit : Node_Id) is
        P      : Node_Id;
        P_Name : Entity_Id;
        E      : Entity_Id;
        Vis    : constant Boolean :=
                   Scope_Stack.Table (Scope_Stack.Last).Previous_Visibility;
  
     begin
        if Is_Child_Spec (Lib_Unit) then
!          P := Unit (Parent_Spec (Lib_Unit));
!          P_Name := Get_Parent_Entity (P);
  
!          Remove_Context_Clauses (Parent_Spec (Lib_Unit));
           End_Package_Scope (P_Name);
           Set_Is_Immediately_Visible (P_Name, Vis);
  
--- 4422,4447 ----
     procedure Remove_Parents (Lib_Unit : Node_Id) is
        P      : Node_Id;
        P_Name : Entity_Id;
+       P_Spec : Node_Id := Empty;
        E      : Entity_Id;
        Vis    : constant Boolean :=
                   Scope_Stack.Table (Scope_Stack.Last).Previous_Visibility;
  
     begin
        if Is_Child_Spec (Lib_Unit) then
!          P_Spec := Parent_Spec (Lib_Unit);
  
!       elsif Nkind (Lib_Unit) = N_Package_Body
!         and then Nkind (Original_Node (Lib_Unit)) = N_Package_Instantiation
!       then
!          P_Spec := Parent_Spec (Original_Node (Lib_Unit));
!       end if;
! 
!       if Present (P_Spec) then
! 
!          P := Unit (P_Spec);
!          P_Name := Get_Parent_Entity (P);
!          Remove_Context_Clauses (P_Spec);
           End_Package_Scope (P_Name);
           Set_Is_Immediately_Visible (P_Name, Vis);
  
*************** package body Sem_Ch10 is
*** 4207,4213 ****
        P   : Entity_Id;
  
        procedure Unchain (E : Entity_Id);
!       --  Remove entity from visibility list.
  
        procedure Unchain (E : Entity_Id) is
           Prev : Entity_Id;
--- 4478,4488 ----
        P   : Entity_Id;
  
        procedure Unchain (E : Entity_Id);
!       --  Remove entity from visibility list
! 
!       -------------
!       -- Unchain --
!       -------------
  
        procedure Unchain (E : Entity_Id) is
           Prev : Entity_Id;
*************** package body Sem_Ch10 is
*** 4237,4249 ****
           end if;
        end Unchain;
  
!       --  Start of Remove_With_Type_Clause
  
     begin
        if Nkind (Name) = N_Selected_Component then
           Typ := Entity (Selector_Name (Name));
  
!          if No (Typ) then    --  error in declaration.
              return;
           end if;
        else
--- 4512,4526 ----
           end if;
        end Unchain;
  
!    --  Start of processing for Remove_With_Type_Clause
  
     begin
        if Nkind (Name) = N_Selected_Component then
           Typ := Entity (Selector_Name (Name));
  
!          --  If no Typ, then error in declaration, ignore
! 
!          if No (Typ) then
              return;
           end if;
        else
*************** package body Sem_Ch10 is
*** 4269,4275 ****
  
        Set_From_With_Type (P, False);
  
!       --  If P is a child unit, remove parents as well.
  
        P := Scope (P);
  
--- 4546,4552 ----
  
        Set_From_With_Type (P, False);
  
!       --  If P is a child unit, remove parents as well
  
        P := Scope (P);
  
diff -Nrcpad gcc-3.4.3/gcc/ada/sem_ch10.ads gcc-4.0.0/gcc/ada/sem_ch10.ads
*** gcc-3.4.3/gcc/ada/sem_ch10.ads	Thu Apr 24 17:54:16 2003
--- gcc-4.0.0/gcc/ada/sem_ch10.ads	Fri Mar  5 10:58:57 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2001 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Sem_Ch10 is
*** 40,45 ****
--- 40,50 ----
     --  unit into the visibility chains. This is done before analyzing a unit.
     --  For a child unit, install context of parents as well.
  
+    procedure Install_Private_With_Clauses (P : Entity_Id);
+    --  Install the private with_clauses of a compilation unit, when compiling
+    --  its private part, compiling a private child unit, or compiling the
+    --  private declarations of a public child unit.
+ 
     procedure Remove_Context (N : Node_Id);
     --  Removes the entities from the context clause of the given compilation
     --  unit from the visibility chains. This is done on exit from a unit as
diff -Nrcpad gcc-3.4.3/gcc/ada/sem_ch11.adb gcc-4.0.0/gcc/ada/sem_ch11.adb
*** gcc-3.4.3/gcc/ada/sem_ch11.adb	Tue Oct 21 13:42:19 2003
--- gcc-4.0.0/gcc/ada/sem_ch11.adb	Mon Jan  3 15:32:17 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Nlists;   use Nlists;
*** 34,39 ****
--- 34,40 ----
  with Nmake;    use Nmake;
  with Opt;      use Opt;
  with Restrict; use Restrict;
+ with Rident;   use Rident;
  with Rtsfind;  use Rtsfind;
  with Sem;      use Sem;
  with Sem_Ch5;  use Sem_Ch5;
*************** package body Sem_Ch11 is
*** 98,104 ****
           Handler := First_Non_Pragma (L);
           while Present (Handler) loop
              Id1 := First (Exception_Choices (Handler));
- 
              while Present (Id1) loop
  
                 --  Only check against the exception choices which precede
--- 99,104 ----
*************** package body Sem_Ch11 is
*** 119,125 ****
                         ("exception choice duplicates &#", Id, Id1);
  
                    else
!                      if Ada_83 and then Comes_From_Source (Id) then
                          Error_Msg_N
                            ("(Ada 83): duplicate exception choice&", Id);
                       end if;
--- 119,127 ----
                         ("exception choice duplicates &#", Id, Id1);
  
                    else
!                      if Ada_Version = Ada_83
!                        and then Comes_From_Source (Id)
!                      then
                          Error_Msg_N
                            ("(Ada 83): duplicate exception choice&", Id);
                       end if;
*************** package body Sem_Ch11 is
*** 238,251 ****
  
                    else
                       if Present (Renamed_Entity (Entity (Id))) then
!                         if Entity (Id) = Standard_Numeric_Error
!                           and then Warn_On_Obsolescent_Feature
!                         then
!                            Error_Msg_N
!                              ("Numeric_Error is an " &
!                               "obsolescent feature ('R'M 'J.6(1))?", Id);
!                            Error_Msg_N
!                              ("|use Constraint_Error instead?", Id);
                          end if;
                       end if;
  
--- 240,255 ----
  
                    else
                       if Present (Renamed_Entity (Entity (Id))) then
!                         if Entity (Id) = Standard_Numeric_Error then
!                            Check_Restriction (No_Obsolescent_Features, Id);
! 
!                            if Warn_On_Obsolescent_Feature then
!                               Error_Msg_N
!                                 ("Numeric_Error is an " &
!                                  "obsolescent feature ('R'M 'J.6(1))?", Id);
!                               Error_Msg_N
!                                 ("\use Constraint_Error instead?", Id);
!                            end if;
                          end if;
                       end if;
  
*************** package body Sem_Ch11 is
*** 477,483 ****
              Rewrite (N, Make_Null_Statement (Sloc (N)));
           end if;
        end if;
- 
     end Analyze_Raise_xxx_Error;
  
     -----------------------------
--- 481,486 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/sem_ch12.adb gcc-4.0.0/gcc/ada/sem_ch12.adb
*** gcc-3.4.3/gcc/ada/sem_ch12.adb	Mon Jan 12 11:38:15 2004
--- gcc-4.0.0/gcc/ada/sem_ch12.adb	Thu Feb 10 13:50:44 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Lib.Xref; use Lib.Xref;
*** 40,45 ****
--- 40,46 ----
  with Nlists;   use Nlists;
  with Nmake;    use Nmake;
  with Opt;      use Opt;
+ with Rident;   use Rident;
  with Restrict; use Restrict;
  with Rtsfind;  use Rtsfind;
  with Sem;      use Sem;
*************** with Sem_Ch7;  use Sem_Ch7;
*** 50,55 ****
--- 51,57 ----
  with Sem_Ch8;  use Sem_Ch8;
  with Sem_Ch10; use Sem_Ch10;
  with Sem_Ch13; use Sem_Ch13;
+ with Sem_Disp; use Sem_Disp;
  with Sem_Elab; use Sem_Elab;
  with Sem_Elim; use Sem_Elim;
  with Sem_Eval; use Sem_Eval;
*************** package body Sem_Ch12 is
*** 260,266 ****
        T   : Entity_Id;
        Def : Node_Id);
  
!    --  All the following need comments???
  
     procedure Analyze_Formal_Decimal_Fixed_Point_Type
                                                  (T : Entity_Id; Def : Node_Id);
--- 262,272 ----
        T   : Entity_Id;
        Def : Node_Id);
  
!    --  The following subprograms create abbreviated declarations for formal
!    --  scalar types. We introduce an anonymous base of the proper class for
!    --  each of them, and define the formals as constrained first subtypes of
!    --  their bases. The bounds are expressions that are non-static in the
!    --  generic.
  
     procedure Analyze_Formal_Decimal_Fixed_Point_Type
                                                  (T : Entity_Id; Def : Node_Id);
*************** package body Sem_Ch12 is
*** 285,292 ****
     function Analyze_Associations
       (I_Node  : Node_Id;
        Formals : List_Id;
!       F_Copy  : List_Id)
!       return    List_Id;
     --  At instantiation time, build the list of associations between formals
     --  and actuals. Each association becomes a renaming declaration for the
     --  formal entity. F_Copy is the analyzed list of formals in the generic
--- 291,297 ----
     function Analyze_Associations
       (I_Node  : Node_Id;
        Formals : List_Id;
!       F_Copy  : List_Id) return List_Id;
     --  At instantiation time, build the list of associations between formals
     --  and actuals. Each association becomes a renaming declaration for the
     --  formal entity. F_Copy is the analyzed list of formals in the generic
*************** package body Sem_Ch12 is
*** 358,365 ****
     function Contains_Instance_Of
       (Inner : Entity_Id;
        Outer : Entity_Id;
!       N     : Node_Id)
!       return  Boolean;
     --  Inner is instantiated within the generic Outer. Check whether Inner
     --  directly or indirectly contains an instance of Outer or of one of its
     --  parents, in the case of a subunit. Each generic unit holds a list of
--- 363,369 ----
     function Contains_Instance_Of
       (Inner : Entity_Id;
        Outer : Entity_Id;
!       N     : Node_Id) return Boolean;
     --  Inner is instantiated within the generic Outer. Check whether Inner
     --  directly or indirectly contains an instance of Outer or of one of its
     --  parents, in the case of a subunit. Each generic unit holds a list of
*************** package body Sem_Ch12 is
*** 367,382 ****
     --  determines whether the set of such lists contains a cycle, i.e. an
     --  illegal circular instantiation.
  
!    function Denotes_Formal_Package (Pack : Entity_Id) return Boolean;
     --  Returns True if E is a formal package of an enclosing generic, or
!    --  the actual for such a formal in an enclosing instantiation. Used in
!    --  Restore_Private_Views, to keep the formals of such a package visible
!    --  on exit from an inner instantiation.
  
     function Find_Actual_Type
       (Typ       : Entity_Id;
!       Gen_Scope : Entity_Id)
!       return      Entity_Id;
     --  When validating the actual types of a child instance, check whether
     --  the formal is a formal type of the parent unit, and retrieve the current
     --  actual for it. Typ is the entity in the analyzed formal type declaration
--- 371,390 ----
     --  determines whether the set of such lists contains a cycle, i.e. an
     --  illegal circular instantiation.
  
!    function Denotes_Formal_Package
!      (Pack    : Entity_Id;
!       On_Exit : Boolean := False) return Boolean;
     --  Returns True if E is a formal package of an enclosing generic, or
!    --  the actual for such a formal in an enclosing instantiation. If such
!    --  a package is used as a formal in an nested generic, or as an actual
!    --  in a nested instantiation, the visibility of ITS formals should not
!    --  be modified. When called from within Restore_Private_Views, the flag
!    --  On_Exit is true, to indicate that the search for a possible enclosing
!    --  instance should ignore the current one.
  
     function Find_Actual_Type
       (Typ       : Entity_Id;
!       Gen_Scope : Entity_Id) return Entity_Id;
     --  When validating the actual types of a child instance, check whether
     --  the formal is a formal type of the parent unit, and retrieve the current
     --  actual for it. Typ is the entity in the analyzed formal type declaration
*************** package body Sem_Ch12 is
*** 390,403 ****
  
     function In_Same_Declarative_Part
       (F_Node : Node_Id;
!       Inst   : Node_Id)
!       return   Boolean;
     --  True if the instantiation Inst and the given freeze_node F_Node appear
     --  within the same declarative part, ignoring subunits, but with no inter-
     --  vening suprograms or concurrent units. If true, the freeze node
     --  of the instance can be placed after the freeze node of the parent,
     --  which it itself an instance.
  
     procedure Set_Instance_Env
       (Gen_Unit : Entity_Id;
        Act_Unit : Entity_Id);
--- 398,415 ----
  
     function In_Same_Declarative_Part
       (F_Node : Node_Id;
!       Inst   : Node_Id) return Boolean;
     --  True if the instantiation Inst and the given freeze_node F_Node appear
     --  within the same declarative part, ignoring subunits, but with no inter-
     --  vening suprograms or concurrent units. If true, the freeze node
     --  of the instance can be placed after the freeze node of the parent,
     --  which it itself an instance.
  
+    function In_Main_Context (E : Entity_Id) return Boolean;
+    --  Check whether an instantiation is in the context of the main unit.
+    --  Used to determine whether its body should be elaborated to allow
+    --  front-end inlining.
+ 
     procedure Set_Instance_Env
       (Gen_Unit : Entity_Id;
        Act_Unit : Entity_Id);
*************** package body Sem_Ch12 is
*** 484,510 ****
     function Instantiate_Object
       (Formal          : Node_Id;
        Actual          : Node_Id;
!       Analyzed_Formal : Node_Id)
!       return            List_Id;
  
     function Instantiate_Type
       (Formal          : Node_Id;
        Actual          : Node_Id;
        Analyzed_Formal : Node_Id;
!       Actual_Decls    : List_Id)
!       return            Node_Id;
  
     function Instantiate_Formal_Subprogram
       (Formal          : Node_Id;
        Actual          : Node_Id;
!       Analyzed_Formal : Node_Id)
!       return            Node_Id;
  
     function Instantiate_Formal_Package
       (Formal          : Node_Id;
        Actual          : Node_Id;
!       Analyzed_Formal : Node_Id)
!       return            List_Id;
     --  If the formal package is declared with a box, special visibility rules
     --  apply to its formals: they are in the visible part of the package. This
     --  is true in the declarative region of the formal package, that is to say
--- 496,518 ----
     function Instantiate_Object
       (Formal          : Node_Id;
        Actual          : Node_Id;
!       Analyzed_Formal : Node_Id) return List_Id;
  
     function Instantiate_Type
       (Formal          : Node_Id;
        Actual          : Node_Id;
        Analyzed_Formal : Node_Id;
!       Actual_Decls    : List_Id) return Node_Id;
  
     function Instantiate_Formal_Subprogram
       (Formal          : Node_Id;
        Actual          : Node_Id;
!       Analyzed_Formal : Node_Id) return Node_Id;
  
     function Instantiate_Formal_Package
       (Formal          : Node_Id;
        Actual          : Node_Id;
!       Analyzed_Formal : Node_Id) return List_Id;
     --  If the formal package is declared with a box, special visibility rules
     --  apply to its formals: they are in the visible part of the package. This
     --  is true in the declarative region of the formal package, that is to say
*************** package body Sem_Ch12 is
*** 638,644 ****
     procedure Set_Next_Assoc (E : Assoc_Ptr; Next : Assoc_Ptr);
     function  Next_Assoc     (E : Assoc_Ptr) return Assoc_Ptr;
     function Get_Gen_Id      (E : Assoc_Ptr) return Entity_Id;
!    function Hash            (F : Entity_Id)   return HTable_Range;
  
     package Generic_Renamings_HTable is new GNAT.HTable.Static_HTable (
        Header_Num => HTable_Range,
--- 646,652 ----
     procedure Set_Next_Assoc (E : Assoc_Ptr; Next : Assoc_Ptr);
     function  Next_Assoc     (E : Assoc_Ptr) return Assoc_Ptr;
     function Get_Gen_Id      (E : Assoc_Ptr) return Entity_Id;
!    function Hash            (F : Entity_Id) return HTable_Range;
  
     package Generic_Renamings_HTable is new GNAT.HTable.Static_HTable (
        Header_Num => HTable_Range,
*************** package body Sem_Ch12 is
*** 673,679 ****
     --  generic is unit is validated, Set_Instance_Env completes Save_Env.
  
     type Instance_Env is record
!       Ada_83              : Boolean;
        Instantiated_Parent : Assoc;
        Exchanged_Views     : Elist_Id;
        Hidden_Entities     : Elist_Id;
--- 681,687 ----
     --  generic is unit is validated, Set_Instance_Env completes Save_Env.
  
     type Instance_Env is record
!       Ada_Version         : Ada_Version_Type;
        Instantiated_Parent : Assoc;
        Exchanged_Views     : Elist_Id;
        Hidden_Entities     : Elist_Id;
*************** package body Sem_Ch12 is
*** 754,767 ****
     function Analyze_Associations
       (I_Node  : Node_Id;
        Formals : List_Id;
!       F_Copy  : List_Id)
!       return    List_Id
     is
!       Actual_Types    : constant Elist_Id  := New_Elmt_List;
!       Assoc           : constant List_Id   := New_List;
!       Defaults        : constant Elist_Id  := New_Elmt_List;
!       Gen_Unit        : constant Entity_Id := Defining_Entity
!                                                 (Parent (F_Copy));
        Actuals         : List_Id;
        Actual          : Node_Id;
        Formal          : Node_Id;
--- 762,773 ----
     function Analyze_Associations
       (I_Node  : Node_Id;
        Formals : List_Id;
!       F_Copy  : List_Id) return List_Id
     is
!       Actual_Types : constant Elist_Id  := New_Elmt_List;
!       Assoc        : constant List_Id   := New_List;
!       Defaults     : constant Elist_Id  := New_Elmt_List;
!       Gen_Unit     : constant Entity_Id := Defining_Entity (Parent (F_Copy));
        Actuals         : List_Id;
        Actual          : Node_Id;
        Formal          : Node_Id;
*************** package body Sem_Ch12 is
*** 777,785 ****
        Num_Actuals     : Int := 0;
  
        function Matching_Actual
!         (F    : Entity_Id;
!          A_F  : Entity_Id)
!          return Node_Id;
        --  Find actual that corresponds to a given a formal parameter. If the
        --  actuals are positional, return the next one, if any. If the actuals
        --  are named, scan the parameter associations to find the right one.
--- 783,790 ----
        Num_Actuals     : Int := 0;
  
        function Matching_Actual
!         (F   : Entity_Id;
!          A_F : Entity_Id) return Node_Id;
        --  Find actual that corresponds to a given a formal parameter. If the
        --  actuals are positional, return the next one, if any. If the actuals
        --  are named, scan the parameter associations to find the right one.
*************** package body Sem_Ch12 is
*** 800,808 ****
        ---------------------
  
        function Matching_Actual
!         (F    : Entity_Id;
!          A_F  : Entity_Id)
!          return Node_Id
        is
           Found : Node_Id;
           Prev  : Node_Id;
--- 805,812 ----
        ---------------------
  
        function Matching_Actual
!         (F   : Entity_Id;
!          A_F : Entity_Id) return Node_Id
        is
           Found : Node_Id;
           Prev  : Node_Id;
*************** package body Sem_Ch12 is
*** 880,886 ****
              case Nkind (Formal) is
  
                 when N_Formal_Subprogram_Declaration =>
!                   exit when Kind = N_Formal_Subprogram_Declaration
                      and then
                        Chars
                          (Defining_Unit_Name (Specification (Formal))) =
--- 884,890 ----
              case Nkind (Formal) is
  
                 when N_Formal_Subprogram_Declaration =>
!                   exit when Kind in N_Formal_Subprogram_Declaration
                      and then
                        Chars
                          (Defining_Unit_Name (Specification (Formal))) =
*************** package body Sem_Ch12 is
*** 901,907 ****
                    --  unrecognized pragmas.
  
                    exit when
!                     Kind /= N_Formal_Subprogram_Declaration
                        and then Kind /= N_Subprogram_Declaration
                        and then Kind /= N_Freeze_Entity
                        and then Kind /= N_Null_Statement
--- 905,911 ----
                    --  unrecognized pragmas.
  
                    exit when
!                     Kind not in N_Formal_Subprogram_Declaration
                        and then Kind /= N_Subprogram_Declaration
                        and then Kind /= N_Freeze_Entity
                        and then Kind /= N_Null_Statement
*************** package body Sem_Ch12 is
*** 1039,1045 ****
                    then
                       Temp_Formal := First (Formals);
                       while Present (Temp_Formal) loop
!                         if Nkind (Temp_Formal) =
                               N_Formal_Subprogram_Declaration
                            and then Temp_Formal /= Formal
                            and then
--- 1043,1049 ----
                    then
                       Temp_Formal := First (Formals);
                       while Present (Temp_Formal) loop
!                         if Nkind (Temp_Formal) in
                               N_Formal_Subprogram_Declaration
                            and then Temp_Formal /= Formal
                            and then
*************** package body Sem_Ch12 is
*** 1213,1226 ****
        then
           Error_Msg_N ("premature usage of incomplete type", Def);
  
        elsif Is_Internal (Component_Type (T))
          and then Nkind (Original_Node
                          (Subtype_Indication (Component_Definition (Def))))
!           /= N_Attribute_Reference
        then
           Error_Msg_N
!            ("only a subtype mark is allowed in a formal",
!               Subtype_Indication (Component_Definition (Def)));
        end if;
  
     end Analyze_Formal_Array_Type;
--- 1217,1235 ----
        then
           Error_Msg_N ("premature usage of incomplete type", Def);
  
+       --  Check that range constraint is not allowed on the component type
+       --  of a generic formal array type (AARM 12.5.3(3))
+ 
        elsif Is_Internal (Component_Type (T))
+         and then Present (Subtype_Indication (Component_Definition (Def)))
          and then Nkind (Original_Node
                          (Subtype_Indication (Component_Definition (Def))))
!           = N_Subtype_Indication
        then
           Error_Msg_N
!            ("in a formal, a subtype indication can only be "
!              & "a subtype mark ('R'M 12.5.3(3))",
!              Subtype_Indication (Component_Definition (Def)));
        end if;
  
     end Analyze_Formal_Array_Type;
*************** package body Sem_Ch12 is
*** 1275,1280 ****
--- 1284,1290 ----
        Set_Delta_Value    (T, Delta_Val);
        Set_Small_Value    (T, Delta_Val);
        Set_Scalar_Range   (T, Scalar_Range (Base));
+       Set_Is_Constrained (T);
  
        Check_Restriction (No_Fixed_Point, Def);
     end Analyze_Formal_Decimal_Fixed_Point_Type;
*************** package body Sem_Ch12 is
*** 1353,1364 ****
        Lo  : Node_Id;
        Hi  : Node_Id;
  
     begin
!       Enter_Name     (T);
!       Set_Ekind      (T, E_Enumeration_Type);
!       Set_Etype      (T, T);
!       Init_Size      (T, 8);
!       Init_Alignment (T);
  
        --  For semantic analysis, the bounds of the type must be set to some
        --  non-static value. The simplest is to create attribute nodes for
--- 1363,1379 ----
        Lo  : Node_Id;
        Hi  : Node_Id;
  
+       Base : constant Entity_Id :=
+                New_Internal_Entity
+                  (E_Floating_Point_Type, Current_Scope, Sloc (Def), 'G');
     begin
!       Enter_Name          (T);
!       Set_Ekind           (T, E_Enumeration_Subtype);
!       Set_Etype           (T, Base);
!       Init_Size           (T, 8);
!       Init_Alignment      (T);
!       Set_Is_Generic_Type (T);
!       Set_Is_Constrained  (T);
  
        --  For semantic analysis, the bounds of the type must be set to some
        --  non-static value. The simplest is to create attribute nodes for
*************** package body Sem_Ch12 is
*** 1382,1387 ****
--- 1397,1410 ----
            Low_Bound => Lo,
            High_Bound => Hi));
  
+       Set_Ekind           (Base, E_Enumeration_Type);
+       Set_Etype           (Base, Base);
+       Init_Size           (Base, 8);
+       Init_Alignment      (Base);
+       Set_Is_Generic_Type (Base);
+       Set_Scalar_Range    (Base, Scalar_Range (T));
+       Set_Parent          (Base, Parent (Def));
+ 
     end Analyze_Formal_Discrete_Type;
  
     ----------------------------------
*************** package body Sem_Ch12 is
*** 1400,1411 ****
        --  the generic itself.
  
        Enter_Name (T);
!       Set_Ekind        (T, E_Floating_Point_Subtype);
!       Set_Etype        (T, Base);
!       Set_Size_Info    (T,              (Standard_Float));
!       Set_RM_Size      (T, RM_Size      (Standard_Float));
!       Set_Digits_Value (T, Digits_Value (Standard_Float));
!       Set_Scalar_Range (T, Scalar_Range (Standard_Float));
  
        Set_Is_Generic_Type (Base);
        Set_Etype           (Base, Base);
--- 1423,1435 ----
        --  the generic itself.
  
        Enter_Name (T);
!       Set_Ekind          (T, E_Floating_Point_Subtype);
!       Set_Etype          (T, Base);
!       Set_Size_Info      (T,              (Standard_Float));
!       Set_RM_Size        (T, RM_Size      (Standard_Float));
!       Set_Digits_Value   (T, Digits_Value (Standard_Float));
!       Set_Scalar_Range   (T, Scalar_Range (Standard_Float));
!       Set_Is_Constrained (T);
  
        Set_Is_Generic_Type (Base);
        Set_Etype           (Base, Base);
*************** package body Sem_Ch12 is
*** 1468,1476 ****
  
        if K = E_Generic_In_Parameter then
  
!          --  Ada0Y (AI-287): Limited aggregates allowed in generic formals
  
!          if not Extensions_Allowed and then Is_Limited_Type (T) then
              Error_Msg_N
                ("generic formal of mode IN must not be of limited type", N);
              Explain_Limited_Type (T, N);
--- 1492,1500 ----
  
        if K = E_Generic_In_Parameter then
  
!          --  Ada 2005 (AI-287): Limited aggregates allowed in generic formals
  
!          if Ada_Version < Ada_05 and then Is_Limited_Type (T) then
              Error_Msg_N
                ("generic formal of mode IN must not be of limited type", N);
              Explain_Limited_Type (T, N);
*************** package body Sem_Ch12 is
*** 1558,1563 ****
--- 1582,1588 ----
          Make_Range (Loc,
            Low_Bound  => Make_Real_Literal (Loc, Ureal_1),
            High_Bound => Make_Real_Literal (Loc, Ureal_1)));
+       Set_Is_Constrained   (T);
  
        Set_Is_Generic_Type (Base);
        Set_Etype           (Base, Base);
*************** package body Sem_Ch12 is
*** 1577,1583 ****
  
     procedure Analyze_Formal_Package (N : Node_Id) is
        Loc              : constant Source_Ptr := Sloc (N);
!       Formal           : constant Entity_Id  := Defining_Identifier (N);
        Gen_Id           : constant Node_Id    := Name (N);
        Gen_Decl         : Node_Id;
        Gen_Unit         : Entity_Id;
--- 1602,1609 ----
  
     procedure Analyze_Formal_Package (N : Node_Id) is
        Loc              : constant Source_Ptr := Sloc (N);
!       Pack_Id          : constant Entity_Id := Defining_Identifier (N);
!       Formal           : Entity_Id;
        Gen_Id           : constant Node_Id    := Name (N);
        Gen_Decl         : Node_Id;
        Gen_Unit         : Entity_Id;
*************** package body Sem_Ch12 is
*** 1652,1659 ****
           --  and analyze it like a regular package, except that we treat the
           --  formals as additional visible components.
  
-          Set_Instance_Env (Gen_Unit, Formal);
- 
           Gen_Decl := Unit_Declaration_Node (Gen_Unit);
  
           if In_Extended_Main_Source_Unit (N) then
--- 1678,1683 ----
*************** package body Sem_Ch12 is
*** 1661,1671 ****
              Generate_Reference  (Gen_Unit, N);
           end if;
  
           New_N :=
             Copy_Generic_Node
               (Original_Node (Gen_Decl), Empty, Instantiating => True);
-          Set_Defining_Unit_Name (Specification (New_N), Formal);
           Rewrite (N, New_N);
  
           Enter_Name (Formal);
           Set_Ekind  (Formal, E_Generic_Package);
--- 1685,1697 ----
              Generate_Reference  (Gen_Unit, N);
           end if;
  
+          Formal := New_Copy (Pack_Id);
           New_N :=
             Copy_Generic_Node
               (Original_Node (Gen_Decl), Empty, Instantiating => True);
           Rewrite (N, New_N);
+          Set_Defining_Unit_Name (Specification (New_N), Formal);
+          Set_Instance_Env (Gen_Unit, Formal);
  
           Enter_Name (Formal);
           Set_Ekind  (Formal, E_Generic_Package);
*************** package body Sem_Ch12 is
*** 1727,1732 ****
--- 1753,1763 ----
           Set_Ekind (Formal, E_Package);
           Set_Generic_Parent (Specification (N), Gen_Unit);
           Set_Has_Completion (Formal, True);
+ 
+          Set_Ekind (Pack_Id, E_Package);
+          Set_Etype (Pack_Id, Standard_Void_Type);
+          Set_Scope (Pack_Id, Scope (Formal));
+          Set_Has_Completion (Pack_Id, True);
        end if;
     end Analyze_Formal_Package;
  
*************** package body Sem_Ch12 is
*** 1763,1773 ****
     begin
        Enter_Name (T);
  
!       Set_Ekind        (T, E_Signed_Integer_Subtype);
!       Set_Etype        (T, Base);
!       Set_Size_Info    (T, Standard_Integer);
!       Set_RM_Size      (T, RM_Size (Standard_Integer));
!       Set_Scalar_Range (T, Scalar_Range (Standard_Integer));
  
        Set_Is_Generic_Type (Base);
        Set_Size_Info       (Base, Standard_Integer);
--- 1794,1805 ----
     begin
        Enter_Name (T);
  
!       Set_Ekind          (T, E_Signed_Integer_Subtype);
!       Set_Etype          (T, Base);
!       Set_Size_Info      (T, Standard_Integer);
!       Set_RM_Size        (T, RM_Size (Standard_Integer));
!       Set_Scalar_Range   (T, Scalar_Range (Standard_Integer));
!       Set_Is_Constrained (T);
  
        Set_Is_Generic_Type (Base);
        Set_Size_Info       (Base, Standard_Integer);
*************** package body Sem_Ch12 is
*** 1801,1806 ****
--- 1833,1857 ----
        Set_Is_Formal_Subprogram (Nam);
        Set_Has_Completion (Nam);
  
+       if Nkind (N) = N_Formal_Abstract_Subprogram_Declaration then
+          Set_Is_Abstract (Nam);
+          Set_Is_Dispatching_Operation (Nam);
+ 
+          declare
+             Ctrl_Type : constant Entity_Id := Find_Dispatching_Type (Nam);
+ 
+          begin
+             if not Present (Ctrl_Type) then
+                Error_Msg_N
+                  ("abstract formal subprogram must have a controlling type",
+                   N);
+ 
+             else
+                Check_Controlling_Formals (Ctrl_Type, Nam);
+             end if;
+          end;
+       end if;
+ 
        --  Default name is resolved at the point of instantiation
  
        if Box_Present (N) then
*************** package body Sem_Ch12 is
*** 2312,2320 ****
  
           else
              E := First_Entity (Gen_Unit);
- 
              while Present (E) loop
- 
                 if Is_Subprogram (E)
                   and then Is_Inlined (E)
                 then
--- 2363,2369 ----
*************** package body Sem_Ch12 is
*** 2377,2383 ****
  
        elsif Ekind (Gen_Unit) /= E_Generic_Package then
  
!          --  Ada0Y (AI-50217): Instance can not be used in limited with_clause
  
           if From_With_Type (Gen_Unit) then
              Error_Msg_N
--- 2426,2432 ----
  
        elsif Ekind (Gen_Unit) /= E_Generic_Package then
  
!          --  Ada 2005 (AI-50217): Cannot use instance in limited with_clause
  
           if From_With_Type (Gen_Unit) then
              Error_Msg_N
*************** package body Sem_Ch12 is
*** 2542,2547 ****
--- 2591,2602 ----
                    if Unit_Requires_Body (Scop) then
                       Enclosing_Body_Present := True;
                       exit;
+ 
+                   elsif In_Open_Scopes (Scop)
+                     and then In_Package_Body (Scop)
+                   then
+                      Enclosing_Body_Present := True;
+                      exit;
                    end if;
  
                    exit when Is_Compilation_Unit (Scop);
*************** package body Sem_Ch12 is
*** 2559,2565 ****
                and then Expander_Active
                and then (not Is_Child_Unit (Gen_Unit)
                           or else not Is_Generic_Unit (Scope (Gen_Unit)))
!               and then Is_In_Main_Unit (N)
                and then Nkind (Parent (N)) /= N_Compilation_Unit
                and then Might_Inline_Subp
                and then not Is_Actual_Pack
--- 2614,2621 ----
                and then Expander_Active
                and then (not Is_Child_Unit (Gen_Unit)
                           or else not Is_Generic_Unit (Scope (Gen_Unit)))
!               and then (Is_In_Main_Unit (N)
!                           or else In_Main_Context (Current_Scope))
                and then Nkind (Parent (N)) /= N_Compilation_Unit
                and then Might_Inline_Subp
                and then not Is_Actual_Pack
*************** package body Sem_Ch12 is
*** 2583,2590 ****
              --  If front_end_inlining is enabled, do not instantiate a
              --  body if within a generic context.
  
!             if Front_End_Inlining
!               and then not Expander_Active
              then
                 Needs_Body := False;
              end if;
--- 2639,2647 ----
              --  If front_end_inlining is enabled, do not instantiate a
              --  body if within a generic context.
  
!             if (Front_End_Inlining
!                   and then not Expander_Active)
!               or else Is_Generic_Unit (Cunit_Entity (Main_Unit))
              then
                 Needs_Body := False;
              end if;
*************** package body Sem_Ch12 is
*** 2833,2838 ****
--- 2890,2906 ----
           Inline_Instance_Body (N, Gen_Unit, Act_Decl);
        end if;
  
+       --  The following is a tree patch for ASIS: ASIS needs separate nodes
+       --  to be used as defining identifiers for a formal package and for the
+       --  corresponding expanded package
+ 
+       if Nkind (N) = N_Formal_Package_Declaration then
+          Act_Decl_Id := New_Copy (Defining_Entity (N));
+          Set_Comes_From_Source (Act_Decl_Id, True);
+          Set_Is_Generic_Instance (Act_Decl_Id, False);
+          Set_Defining_Identifier (N, Act_Decl_Id);
+       end if;
+ 
     exception
        when Instantiation_Error =>
           if Parent_Installed then
*************** package body Sem_Ch12 is
*** 2840,2848 ****
           end if;
     end Analyze_Package_Instantiation;
  
!    ---------------------------
!    --  Inline_Instance_Body --
!    ---------------------------
  
     procedure Inline_Instance_Body
       (N        : Node_Id;
--- 2908,2916 ----
           end if;
     end Analyze_Package_Instantiation;
  
!    --------------------------
!    -- Inline_Instance_Body --
!    --------------------------
  
     procedure Inline_Instance_Body
       (N        : Node_Id;
*************** package body Sem_Ch12 is
*** 3484,3489 ****
--- 3552,3558 ----
          or else Nkind (Assoc) = N_Extension_Aggregate
        then
           return Assoc;
+ 
        else
           --  If the node is part of an inner generic, it may itself have been
           --  remapped into a further generic copy. Associated_Node is otherwise
*************** package body Sem_Ch12 is
*** 3629,3634 ****
--- 3698,3718 ----
        --  Common error routine for mismatch between the parameters of
        --  the actual instance and those of the formal package.
  
+       function Same_Instantiated_Constant (E1, E2 : Entity_Id) return Boolean;
+       --  The formal may come from a nested formal package, and the actual
+       --  may have been constant-folded. To determine whether the two denote
+       --  the same entity we may have to traverse several definitions to
+       --  recover the ultimate entity that they refer to.
+ 
+       function Same_Instantiated_Variable (E1, E2 : Entity_Id) return Boolean;
+       --  Similarly, if the formal comes from a nested formal package, the
+       --  actual may designate the formal through multiple renamings, which
+       --  have to be followed to determine the original variable in question.
+ 
+       --------------------
+       -- Check_Mismatch --
+       --------------------
+ 
        procedure Check_Mismatch (B : Boolean) is
        begin
           if B then
*************** package body Sem_Ch12 is
*** 3638,3643 ****
--- 3722,3800 ----
           end if;
        end Check_Mismatch;
  
+       --------------------------------
+       -- Same_Instantiated_Constant --
+       --------------------------------
+ 
+       function Same_Instantiated_Constant
+         (E1, E2 : Entity_Id) return Boolean
+       is
+          Ent : Entity_Id;
+       begin
+          Ent := E2;
+          while Present (Ent) loop
+             if E1 = Ent then
+                return True;
+ 
+             elsif Ekind (Ent) /= E_Constant then
+                return False;
+ 
+             elsif Is_Entity_Name (Constant_Value (Ent)) then
+                if  Entity (Constant_Value (Ent)) = E1 then
+                   return True;
+                else
+                   Ent := Entity (Constant_Value (Ent));
+                end if;
+ 
+             --  The actual may be a constant that has been folded. Recover
+             --  original name.
+ 
+             elsif Is_Entity_Name (Original_Node (Constant_Value (Ent))) then
+                   Ent := Entity (Original_Node (Constant_Value (Ent)));
+             else
+                return False;
+             end if;
+          end loop;
+ 
+          return False;
+       end Same_Instantiated_Constant;
+ 
+       --------------------------------
+       -- Same_Instantiated_Variable --
+       --------------------------------
+ 
+       function Same_Instantiated_Variable
+         (E1, E2 : Entity_Id) return Boolean
+       is
+          function Original_Entity (E : Entity_Id) return Entity_Id;
+          --  Follow chain of renamings to the ultimate ancestor.
+ 
+          ---------------------
+          -- Original_Entity --
+          ---------------------
+ 
+          function Original_Entity (E : Entity_Id) return Entity_Id is
+             Orig : Entity_Id;
+ 
+          begin
+             Orig := E;
+             while Nkind (Parent (Orig)) = N_Object_Renaming_Declaration
+               and then Present (Renamed_Object (Orig))
+               and then Is_Entity_Name (Renamed_Object (Orig))
+             loop
+                Orig := Entity (Renamed_Object (Orig));
+             end loop;
+ 
+             return Orig;
+          end Original_Entity;
+ 
+       --  Start of processing for Same_Instantiated_Variable
+ 
+       begin
+          return Ekind (E1) = Ekind (E2)
+            and then Original_Entity (E1) = Original_Entity (E2);
+       end Same_Instantiated_Variable;
+ 
     --  Start of processing for Check_Formal_Package_Instance
  
     begin
*************** package body Sem_Ch12 is
*** 3715,3734 ****
                 if Is_Entity_Name (Expr2) then
                    if Entity (Expr1) = Entity (Expr2) then
                       null;
- 
-                   elsif Ekind (Entity (Expr2)) = E_Constant
-                      and then Is_Entity_Name (Constant_Value (Entity (Expr2)))
-                      and then
-                       Entity (Constant_Value (Entity (Expr2))) = Entity (Expr1)
-                   then
-                      null;
                    else
!                      Check_Mismatch (True);
                    end if;
                 else
                    Check_Mismatch (True);
                 end if;
  
              elsif Nkind (Expr1) = N_Null then
                 Check_Mismatch (Nkind (Expr1) /= N_Null);
  
--- 3872,3894 ----
                 if Is_Entity_Name (Expr2) then
                    if Entity (Expr1) = Entity (Expr2) then
                       null;
                    else
!                      Check_Mismatch
!                        (not Same_Instantiated_Constant
!                          (Entity (Expr1), Entity (Expr2)));
                    end if;
                 else
                    Check_Mismatch (True);
                 end if;
  
+             elsif Is_Entity_Name (Original_Node (Expr1))
+               and then Is_Entity_Name (Expr2)
+             and then
+               Same_Instantiated_Constant
+                 (Entity (Original_Node (Expr1)), Entity (Expr2))
+             then
+                null;
+ 
              elsif Nkind (Expr1) = N_Null then
                 Check_Mismatch (Nkind (Expr1) /= N_Null);
  
*************** package body Sem_Ch12 is
*** 3736,3744 ****
                 Check_Mismatch (True);
              end if;
  
!          elsif Ekind (E1) = E_Variable
!            or else Ekind (E1) = E_Package
!          then
              Check_Mismatch
                (Ekind (E1) /= Ekind (E2)
                  or else Renamed_Object (E1) /= Renamed_Object (E2));
--- 3896,3905 ----
                 Check_Mismatch (True);
              end if;
  
!          elsif Ekind (E1) = E_Variable then
!             Check_Mismatch (not Same_Instantiated_Variable (E1, E2));
! 
!          elsif Ekind (E1) = E_Package then
              Check_Mismatch
                (Ekind (E1) /= Ekind (E2)
                  or else Renamed_Object (E1) /= Renamed_Object (E2));
*************** package body Sem_Ch12 is
*** 3844,3849 ****
--- 4005,4041 ----
        E      : Entity_Id;
        Astype : Entity_Id;
  
+       function Denotes_Previous_Actual (Typ : Entity_Id) return Boolean;
+       --  For a formal that is an array type, the component type is often
+       --  a previous formal in the same unit. The privacy status of the
+       --  component type will have been examined earlier in the traversal
+       --  of the corresponding actuals, and this status should not be
+       --  modified for the array type itself.
+       --  To detect this case we have to rescan the list of formals, which
+       --  is usually short enough to ignore the resulting inefficiency.
+ 
+       function Denotes_Previous_Actual (Typ : Entity_Id) return Boolean is
+          Prev : Entity_Id;
+       begin
+          Prev := First_Entity (Instance);
+          while Present (Prev) loop
+             if Is_Type (Prev)
+               and then Nkind (Parent (Prev)) = N_Subtype_Declaration
+               and then Is_Entity_Name (Subtype_Indication (Parent (Prev)))
+               and then Entity (Subtype_Indication (Parent (Prev))) = Typ
+             then
+                return True;
+             elsif Prev = E then
+                return False;
+             else
+                Next_Entity (Prev);
+             end if;
+          end loop;
+          return False;
+       end Denotes_Previous_Actual;
+ 
+    --  Start of processing for Check_Generic_Actuals
+ 
     begin
        E := First_Entity (Instance);
        while Present (E) loop
*************** package body Sem_Ch12 is
*** 3852,3860 ****
             and then Scope (Etype (E)) /= Instance
             and then Is_Entity_Name (Subtype_Indication (Parent (E)))
           then
!             Check_Private_View (Subtype_Indication (Parent (E)));
              Set_Is_Generic_Actual_Type (E, True);
              Set_Is_Hidden (E, False);
  
              --  We constructed the generic actual type as a subtype of
              --  the supplied type. This means that it normally would not
--- 4044,4060 ----
             and then Scope (Etype (E)) /= Instance
             and then Is_Entity_Name (Subtype_Indication (Parent (E)))
           then
!             if Is_Array_Type (E)
!               and then Denotes_Previous_Actual (Component_Type (E))
!             then
!                null;
!             else
!                Check_Private_View (Subtype_Indication (Parent (E)));
!             end if;
              Set_Is_Generic_Actual_Type (E, True);
              Set_Is_Hidden (E, False);
+             Set_Is_Potentially_Use_Visible (E,
+               In_Use (Instance));
  
              --  We constructed the generic actual type as a subtype of
              --  the supplied type. This means that it normally would not
*************** package body Sem_Ch12 is
*** 3908,3917 ****
              elsif Denotes_Formal_Package (E) then
                 null;
  
!             elsif Present (Associated_Formal_Package (E))
!               and then Box_Present (Parent (Associated_Formal_Package (E)))
!             then
!                Check_Generic_Actuals (Renamed_Object (E), True);
                 Set_Is_Hidden (E, False);
              end if;
  
--- 4108,4118 ----
              elsif Denotes_Formal_Package (E) then
                 null;
  
!             elsif Present (Associated_Formal_Package (E)) then
!                if Box_Present (Parent (Associated_Formal_Package (E))) then
!                   Check_Generic_Actuals (Renamed_Object (E), True);
!                end if;
! 
                 Set_Is_Hidden (E, False);
              end if;
  
*************** package body Sem_Ch12 is
*** 3945,3952 ****
  
        function Find_Generic_Child
          (Scop : Entity_Id;
!          Id   : Node_Id)
!          return Entity_Id;
        --  Search generic parent for possible child unit with the given name.
  
        function In_Enclosing_Instance return Boolean;
--- 4146,4152 ----
  
        function Find_Generic_Child
          (Scop : Entity_Id;
!          Id   : Node_Id) return Entity_Id;
        --  Search generic parent for possible child unit with the given name.
  
        function In_Enclosing_Instance return Boolean;
*************** package body Sem_Ch12 is
*** 3960,3967 ****
  
        function Find_Generic_Child
          (Scop : Entity_Id;
!          Id   : Node_Id)
!          return Entity_Id
        is
           E : Entity_Id;
  
--- 4160,4166 ----
  
        function Find_Generic_Child
          (Scop : Entity_Id;
!          Id   : Node_Id) return Entity_Id
        is
           E : Entity_Id;
  
*************** package body Sem_Ch12 is
*** 4381,4388 ****
     function Contains_Instance_Of
       (Inner : Entity_Id;
        Outer : Entity_Id;
!       N     : Node_Id)
!       return  Boolean
     is
        Elmt : Elmt_Id;
        Scop : Entity_Id;
--- 4580,4586 ----
     function Contains_Instance_Of
       (Inner : Entity_Id;
        Outer : Entity_Id;
!       N     : Node_Id) return Boolean
     is
        Elmt : Elmt_Id;
        Scop : Entity_Id;
*************** package body Sem_Ch12 is
*** 4454,4461 ****
     function Copy_Generic_Node
       (N             : Node_Id;
        Parent_Id     : Node_Id;
!       Instantiating : Boolean)
!       return          Node_Id
     is
        Ent   : Entity_Id;
        New_N : Node_Id;
--- 4652,4658 ----
     function Copy_Generic_Node
       (N             : Node_Id;
        Parent_Id     : Node_Id;
!       Instantiating : Boolean) return Node_Id
     is
        Ent   : Entity_Id;
        New_N : Node_Id;
*************** package body Sem_Ch12 is
*** 4474,4481 ****
  
        function Copy_Generic_List
          (L         : List_Id;
!          Parent_Id : Node_Id)
!          return      List_Id;
        --  Apply Copy_Node recursively to the members of a node list.
  
        function In_Defining_Unit_Name (Nam : Node_Id) return Boolean;
--- 4671,4677 ----
  
        function Copy_Generic_List
          (L         : List_Id;
!          Parent_Id : Node_Id) return List_Id;
        --  Apply Copy_Node recursively to the members of a node list.
  
        function In_Defining_Unit_Name (Nam : Node_Id) return Boolean;
*************** package body Sem_Ch12 is
*** 4484,4492 ****
        --  (for ASIS use) even though as the name of an enclosing generic
        --   it would otherwise not be preserved in the generic tree.
  
!       -----------------------
!       --  Copy_Descendants --
!       -----------------------
  
        procedure Copy_Descendants is
  
--- 4680,4688 ----
        --  (for ASIS use) even though as the name of an enclosing generic
        --   it would otherwise not be preserved in the generic tree.
  
!       ----------------------
!       -- Copy_Descendants --
!       ----------------------
  
        procedure Copy_Descendants is
  
*************** package body Sem_Ch12 is
*** 4559,4566 ****
  
        function Copy_Generic_List
          (L         : List_Id;
!          Parent_Id : Node_Id)
!          return      List_Id
        is
           N     : Node_Id;
           New_L : List_Id;
--- 4755,4761 ----
  
        function Copy_Generic_List
          (L         : List_Id;
!          Parent_Id : Node_Id) return List_Id
        is
           N     : Node_Id;
           New_L : List_Id;
*************** package body Sem_Ch12 is
*** 5058,5069 ****
     -- Denotes_Formal_Package --
     ----------------------------
  
!    function Denotes_Formal_Package (Pack : Entity_Id) return Boolean is
!       Par  : constant Entity_Id := Current_Instantiated_Parent.Act_Id;
        Scop : constant Entity_Id := Scope (Pack);
        E    : Entity_Id;
  
     begin
        if Ekind (Scop) = E_Generic_Package
          or else Nkind (Unit_Declaration_Node (Scop)) =
                                           N_Generic_Subprogram_Declaration
--- 5253,5275 ----
     -- Denotes_Formal_Package --
     ----------------------------
  
!    function Denotes_Formal_Package
!      (Pack    : Entity_Id;
!       On_Exit : Boolean := False) return Boolean
!    is
!       Par  : Entity_Id;
        Scop : constant Entity_Id := Scope (Pack);
        E    : Entity_Id;
  
     begin
+       if On_Exit then
+          Par :=
+            Instance_Envs.Table
+              (Instance_Envs.Last).Instantiated_Parent.Act_Id;
+       else
+          Par  := Current_Instantiated_Parent.Act_Id;
+       end if;
+ 
        if Ekind (Scop) = E_Generic_Package
          or else Nkind (Unit_Declaration_Node (Scop)) =
                                           N_Generic_Subprogram_Declaration
*************** package body Sem_Ch12 is
*** 5122,5129 ****
  
     function Find_Actual_Type
       (Typ       : Entity_Id;
!       Gen_Scope : Entity_Id)
!       return      Entity_Id
     is
        T : Entity_Id;
  
--- 5328,5334 ----
  
     function Find_Actual_Type
       (Typ       : Entity_Id;
!       Gen_Scope : Entity_Id) return Entity_Id
     is
        T : Entity_Id;
  
*************** package body Sem_Ch12 is
*** 5575,5581 ****
        Saved : Instance_Env;
  
     begin
!       Saved.Ada_83              := Ada_83;
        Saved.Instantiated_Parent := Current_Instantiated_Parent;
        Saved.Exchanged_Views     := Exchanged_Views;
        Saved.Hidden_Entities     := Hidden_Entities;
--- 5780,5786 ----
        Saved : Instance_Env;
  
     begin
!       Saved.Ada_Version         := Ada_Version;
        Saved.Instantiated_Parent := Current_Instantiated_Parent;
        Saved.Exchanged_Views     := Exchanged_Views;
        Saved.Hidden_Entities     := Hidden_Entities;
*************** package body Sem_Ch12 is
*** 5599,5606 ****
  
     function In_Same_Declarative_Part
       (F_Node : Node_Id;
!       Inst   : Node_Id)
!       return   Boolean
     is
        Decls : constant Node_Id := Parent (F_Node);
        Nod   : Node_Id := Parent (Inst);
--- 5804,5810 ----
  
     function In_Same_Declarative_Part
       (F_Node : Node_Id;
!       Inst   : Node_Id) return Boolean
     is
        Decls : constant Node_Id := Parent (F_Node);
        Nod   : Node_Id := Parent (Inst);
*************** package body Sem_Ch12 is
*** 5632,5637 ****
--- 5836,5886 ----
     end In_Same_Declarative_Part;
  
     ---------------------
+    -- In_Main_Context --
+    ---------------------
+ 
+    function In_Main_Context (E : Entity_Id) return Boolean is
+       Context : List_Id;
+       Clause  : Node_Id;
+       Nam     : Node_Id;
+ 
+    begin
+       if not Is_Compilation_Unit (E)
+         or else Ekind (E) /= E_Package
+         or else In_Private_Part (E)
+       then
+          return False;
+       end if;
+ 
+       Context := Context_Items (Cunit (Main_Unit));
+ 
+       Clause  := First (Context);
+       while Present (Clause) loop
+          if Nkind (Clause) = N_With_Clause then
+             Nam := Name (Clause);
+ 
+             --  If the current scope is part of the context of the main unit,
+             --  analysis of the corresponding with_clause is not complete, and
+             --  the entity is not set. We use the Chars field directly, which
+             --  might produce false positives in rare cases, but guarantees
+             --  that we produce all the instance bodies we will need.
+ 
+             if (Nkind (Nam) = N_Identifier
+                  and then Chars (Nam) = Chars (E))
+               or else (Nkind (Nam) = N_Selected_Component
+                         and then Chars (Selector_Name (Nam)) = Chars (E))
+             then
+                return True;
+             end if;
+          end if;
+ 
+          Next (Clause);
+       end loop;
+ 
+       return False;
+    end In_Main_Context;
+ 
+    ---------------------
     -- Inherit_Context --
     ---------------------
  
*************** package body Sem_Ch12 is
*** 5741,5746 ****
--- 5990,5999 ----
        --  origin of a node by finding the maximum sloc of any ancestor node.
        --  Why is this not equivalent fo Top_Level_Location ???
  
+       --------------------
+       -- Enclosing_Subp --
+       --------------------
+ 
        function Enclosing_Subp (Id : Entity_Id) return Entity_Id is
           Scop : Entity_Id := Scope (Id);
  
*************** package body Sem_Ch12 is
*** 5754,5759 ****
--- 6007,6016 ----
           return Scop;
        end Enclosing_Subp;
  
+       ---------------
+       -- True_Sloc --
+       ---------------
+ 
        function True_Sloc (N : Node_Id) return Source_Ptr is
           Res : Source_Ptr;
           N1  : Node_Id;
*************** package body Sem_Ch12 is
*** 6064,6071 ****
     function Instantiate_Formal_Package
       (Formal          : Node_Id;
        Actual          : Node_Id;
!       Analyzed_Formal : Node_Id)
!       return            List_Id
     is
        Loc         : constant Source_Ptr := Sloc (Actual);
        Actual_Pack : Entity_Id;
--- 6321,6327 ----
     function Instantiate_Formal_Package
       (Formal          : Node_Id;
        Actual          : Node_Id;
!       Analyzed_Formal : Node_Id) return List_Id
     is
        Loc         : constant Source_Ptr := Sloc (Actual);
        Actual_Pack : Entity_Id;
*************** package body Sem_Ch12 is
*** 6090,6097 ****
  
        function Formal_Entity
          (F       : Node_Id;
!          Act_Ent : Entity_Id)
!          return    Entity_Id;
        --  Returns the entity associated with the given formal F. In the
        --  case where F is a formal package, this function will iterate
        --  through all of F's formals and enter map associations from the
--- 6346,6352 ----
  
        function Formal_Entity
          (F       : Node_Id;
!          Act_Ent : Entity_Id) return Entity_Id;
        --  Returns the entity associated with the given formal F. In the
        --  case where F is a formal package, this function will iterate
        --  through all of F's formals and enter map associations from the
*************** package body Sem_Ch12 is
*** 6102,6109 ****
  
        function Is_Instance_Of
          (Act_Spec : Entity_Id;
!          Gen_Anc  : Entity_Id)
!          return     Boolean;
        --  The actual can be an instantiation of a generic within another
        --  instance, in which case there is no direct link from it to the
        --  original generic ancestor. In that case, we recognize that the
--- 6357,6363 ----
  
        function Is_Instance_Of
          (Act_Spec : Entity_Id;
!          Gen_Anc  : Entity_Id) return Boolean;
        --  The actual can be an instantiation of a generic within another
        --  instance, in which case there is no direct link from it to the
        --  original generic ancestor. In that case, we recognize that the
*************** package body Sem_Ch12 is
*** 6122,6127 ****
--- 6376,6387 ----
        --  that the entities in P2 are mapped into those of P3. The mapping of
        --  entities has to be done recursively for nested packages.
  
+       procedure Process_Nested_Formal (Formal : Entity_Id);
+       --  If the current formal is declared with a box, its own formals are
+       --  visible in the instance, as they were in the generic, and their
+       --  Hidden flag must be reset. If some of these formals are themselves
+       --  packages declared with a box, the processing must be recursive.
+ 
        --------------------------
        -- Find_Matching_Actual --
        --------------------------
*************** package body Sem_Ch12 is
*** 6153,6160 ****
                 end loop;
  
              when others =>
!                null;
!                pragma Assert (False);
           end case;
        end Find_Matching_Actual;
  
--- 6413,6419 ----
                 end loop;
  
              when others =>
!                raise Program_Error;
           end case;
        end Find_Matching_Actual;
  
*************** package body Sem_Ch12 is
*** 6164,6171 ****
  
        function Formal_Entity
          (F       : Node_Id;
!          Act_Ent : Entity_Id)
!          return    Entity_Id
        is
           Orig_Node : Node_Id := F;
           Act_Pkg   : Entity_Id;
--- 6423,6429 ----
  
        function Formal_Entity
          (F       : Node_Id;
!          Act_Ent : Entity_Id) return Entity_Id
        is
           Orig_Node : Node_Id := F;
           Act_Pkg   : Entity_Id;
*************** package body Sem_Ch12 is
*** 6267,6274 ****
  
        function Is_Instance_Of
          (Act_Spec : Entity_Id;
!          Gen_Anc  : Entity_Id)
!          return     Boolean
        is
           Gen_Par : constant Entity_Id := Generic_Parent (Act_Spec);
  
--- 6525,6531 ----
  
        function Is_Instance_Of
          (Act_Spec : Entity_Id;
!          Gen_Anc  : Entity_Id) return Boolean
        is
           Gen_Par : constant Entity_Id := Generic_Parent (Act_Spec);
  
*************** package body Sem_Ch12 is
*** 6351,6356 ****
--- 6608,6640 ----
           end loop;
        end Map_Entities;
  
+       ---------------------------
+       -- Process_Nested_Formal --
+       ---------------------------
+ 
+       procedure Process_Nested_Formal (Formal : Entity_Id) is
+          Ent : Entity_Id;
+ 
+       begin
+          if Present (Associated_Formal_Package (Formal))
+            and then Box_Present (Parent (Associated_Formal_Package (Formal)))
+          then
+             Ent := First_Entity (Formal);
+             while Present (Ent) loop
+                Set_Is_Hidden (Ent, False);
+                Set_Is_Potentially_Use_Visible
+                  (Ent, Is_Potentially_Use_Visible (Formal));
+ 
+                if Ekind (Ent) = E_Package then
+                   exit when Renamed_Entity (Ent) = Renamed_Entity (Formal);
+                   Process_Nested_Formal (Ent);
+                end if;
+ 
+                Next_Entity (Ent);
+             end loop;
+          end if;
+       end Process_Nested_Formal;
+ 
     --  Start of processing for Instantiate_Formal_Package
  
     begin
*************** package body Sem_Ch12 is
*** 6459,6464 ****
--- 6743,6752 ----
                    Set_Is_Potentially_Use_Visible
                      (Actual_Ent, In_Use (Actual_Pack));
  
+                   if Ekind (Actual_Ent) = E_Package then
+                      Process_Nested_Formal (Actual_Ent);
+                   end if;
+ 
                    if Present (Formal_Node) then
                       Formal_Ent := Formal_Entity (Formal_Node, Actual_Ent);
  
*************** package body Sem_Ch12 is
*** 6470,6478 ****
                       Next_Non_Pragma (Formal_Node);
  
                    else
!                      --  No further formals to match.
  
!                      exit;
                    end if;
  
                 end loop;
--- 6758,6768 ----
                       Next_Non_Pragma (Formal_Node);
  
                    else
!                      --  No further formals to match, but the generic
!                      --  part may contain inherited operation that are
!                      --  not hidden in the enclosing instance.
  
!                      Next_Entity (Actual_Ent);
                    end if;
  
                 end loop;
*************** package body Sem_Ch12 is
*** 6512,6519 ****
     function Instantiate_Formal_Subprogram
       (Formal          : Node_Id;
        Actual          : Node_Id;
!       Analyzed_Formal : Node_Id)
!       return            Node_Id
     is
        Loc        : Source_Ptr := Sloc (Instantiation_Node);
        Formal_Sub : constant Entity_Id :=
--- 6802,6808 ----
     function Instantiate_Formal_Subprogram
       (Formal          : Node_Id;
        Actual          : Node_Id;
!       Analyzed_Formal : Node_Id) return Node_Id
     is
        Loc        : Source_Ptr := Sloc (Instantiation_Node);
        Formal_Sub : constant Entity_Id :=
*************** package body Sem_Ch12 is
*** 6663,6669 ****
        Decl_Node :=
          Make_Subprogram_Renaming_Declaration (Loc,
            Specification => New_Spec,
!           Name => Nam);
  
        --  Gather possible interpretations for the actual before analyzing the
        --  instance. If overloaded, it will be resolved when analyzing the
--- 6952,6965 ----
        Decl_Node :=
          Make_Subprogram_Renaming_Declaration (Loc,
            Specification => New_Spec,
!           Name          => Nam);
! 
!       --  If we do not have an actual and the formal specified <> then
!       --  set to get proper default.
! 
!       if No (Actual) and then Box_Present (Formal) then
!          Set_From_Default (Decl_Node);
!       end if;
  
        --  Gather possible interpretations for the actual before analyzing the
        --  instance. If overloaded, it will be resolved when analyzing the
*************** package body Sem_Ch12 is
*** 6711,6720 ****
  
        --  The generic instantiation freezes the actual. This can only be
        --  done once the actual is resolved, in the analysis of the renaming
!       --  declaration. To indicate that must be done, we set the corresponding
!       --  spec of the node to point to the formal subprogram entity.
  
!       Set_Corresponding_Spec (Decl_Node, Analyzed_S);
  
        --  We cannot analyze the renaming declaration, and thus find the
        --  actual, until the all the actuals are assembled in the instance.
--- 7007,7018 ----
  
        --  The generic instantiation freezes the actual. This can only be
        --  done once the actual is resolved, in the analysis of the renaming
!       --  declaration. To make the formal subprogram entity available, we set
!       --  Corresponding_Formal_Spec to point to the formal subprogram entity.
!       --  This is also needed in Analyze_Subprogram_Renaming for the processing
!       --  of formal abstract subprograms.
  
!       Set_Corresponding_Formal_Spec (Decl_Node, Analyzed_S);
  
        --  We cannot analyze the renaming declaration, and thus find the
        --  actual, until the all the actuals are assembled in the instance.
*************** package body Sem_Ch12 is
*** 6763,6770 ****
     function Instantiate_Object
       (Formal          : Node_Id;
        Actual          : Node_Id;
!       Analyzed_Formal : Node_Id)
!       return            List_Id
     is
        Formal_Id : constant Entity_Id  := Defining_Identifier (Formal);
        Type_Id   : constant Node_Id    := Subtype_Mark (Formal);
--- 7061,7067 ----
     function Instantiate_Object
       (Formal          : Node_Id;
        Actual          : Node_Id;
!       Analyzed_Formal : Node_Id) return List_Id
     is
        Formal_Id : constant Entity_Id  := Defining_Identifier (Formal);
        Type_Id   : constant Node_Id    := Subtype_Mark (Formal);
*************** package body Sem_Ch12 is
*** 7285,7291 ****
           if Nkind (Gen_Body) = N_Subprogram_Body_Stub then
  
              --  Either body is not present, or context is non-expanding, as
!             --  when compiling a subunit. Mark the instance as completed.
  
              Set_Has_Completion (Anon_Id);
              return;
--- 7582,7596 ----
           if Nkind (Gen_Body) = N_Subprogram_Body_Stub then
  
              --  Either body is not present, or context is non-expanding, as
!             --  when compiling a subunit. Mark the instance as completed, and
!             --  diagnose a missing body when needed.
! 
!             if Expander_Active
!               and then Operating_Mode = Generate_Code
!             then
!                Error_Msg_N
!                  ("missing proper body for instantiation", Gen_Body);
!             end if;
  
              Set_Has_Completion (Anon_Id);
              return;
*************** package body Sem_Ch12 is
*** 7483,7490 ****
       (Formal          : Node_Id;
        Actual          : Node_Id;
        Analyzed_Formal : Node_Id;
!       Actual_Decls    : List_Id)
!       return            Node_Id
     is
        Loc       : constant Source_Ptr := Sloc (Actual);
        Gen_T     : constant Entity_Id  := Defining_Identifier (Formal);
--- 7788,7794 ----
       (Formal          : Node_Id;
        Actual          : Node_Id;
        Analyzed_Formal : Node_Id;
!       Actual_Decls    : List_Id) return Node_Id
     is
        Loc       : constant Source_Ptr := Sloc (Actual);
        Gen_T     : constant Entity_Id  := Defining_Identifier (Formal);
*************** package body Sem_Ch12 is
*** 7633,7638 ****
--- 7937,7946 ----
           function Formal_Dimensions return Int;
           --  Count number of dimensions in array type formal
  
+          -----------------------
+          -- Formal_Dimensions --
+          -----------------------
+ 
           function Formal_Dimensions return Int is
              Num   : Int := 0;
              Index : Node_Id;
*************** package body Sem_Ch12 is
*** 7885,7890 ****
--- 8193,8199 ----
              --  actual must correspond to a discriminant of the formal.
  
              elsif Has_Discriminants (Act_T)
+               and then not Has_Unknown_Discriminants (Act_T)
                and then Has_Discriminants (Ancestor)
              then
                 Actual_Discr   := First_Discriminant (Act_T);
*************** package body Sem_Ch12 is
*** 7916,7922 ****
              --  for constrainedness, but the check here is added for
              --  completeness.
  
!             elsif Has_Discriminants (Act_T) then
                 Error_Msg_NE
                   ("actual for & must not have discriminants", Actual, Gen_T);
                 Abandon_Instantiation (Actual);
--- 8225,8233 ----
              --  for constrainedness, but the check here is added for
              --  completeness.
  
!             elsif Has_Discriminants (Act_T)
!               and then not Has_Unknown_Discriminants (Act_T)
!             then
                 Error_Msg_NE
                   ("actual for & must not have discriminants", Actual, Gen_T);
                 Abandon_Instantiation (Actual);
*************** package body Sem_Ch12 is
*** 7956,7962 ****
  
           elsif Is_Indefinite_Subtype (Act_T)
              and then not Is_Indefinite_Subtype (A_Gen_T)
!             and then Ada_95
           then
              Error_Msg_NE
                ("actual for & must be a definite subtype", Actual, Gen_T);
--- 8267,8273 ----
  
           elsif Is_Indefinite_Subtype (Act_T)
              and then not Is_Indefinite_Subtype (A_Gen_T)
!             and then Ada_Version >= Ada_95
           then
              Error_Msg_NE
                ("actual for & must be a definite subtype", Actual, Gen_T);
*************** package body Sem_Ch12 is
*** 8012,8018 ****
  
                    elsif not Subtypes_Statically_Match
                                (Formal_Subt, Etype (Actual_Discr))
!                     and then Ada_95
                    then
                       Error_Msg_NE
                         ("subtypes of actual discriminants must match formal",
--- 8323,8329 ----
  
                    elsif not Subtypes_Statically_Match
                                (Formal_Subt, Etype (Actual_Discr))
!                     and then Ada_Version >= Ada_95
                    then
                       Error_Msg_NE
                         ("subtypes of actual discriminants must match formal",
*************** package body Sem_Ch12 is
*** 8054,8059 ****
--- 8365,8390 ----
        else
           Act_T := Entity (Actual);
  
+          --  Ada 2005 (AI-216): An Unchecked_Union subtype shall only be passed
+          --  as a generic actual parameter if the corresponding formal type
+          --  does not have a known_discriminant_part, or is a formal derived
+          --  type that is an Unchecked_Union type.
+ 
+          if Is_Unchecked_Union (Base_Type (Act_T)) then
+             if not Has_Discriminants (A_Gen_T)
+                      or else
+                    (Is_Derived_Type (A_Gen_T)
+                      and then
+                     Is_Unchecked_Union (A_Gen_T))
+             then
+                null;
+             else
+                Error_Msg_N ("Unchecked_Union cannot be the actual for a" &
+                  " discriminated formal type", Act_T);
+ 
+             end if;
+          end if;
+ 
           --  Deal with fixed/floating restrictions
  
           if Is_Floating_Point_Type (Act_T) then
*************** package body Sem_Ch12 is
*** 8217,8224 ****
     ---------------------
  
     function Is_In_Main_Unit (N : Node_Id) return Boolean is
!       Unum : constant Unit_Number_Type := Get_Source_Unit (N);
! 
        Current_Unit : Node_Id;
  
     begin
--- 8548,8554 ----
     ---------------------
  
     function Is_In_Main_Unit (N : Node_Id) return Boolean is
!       Unum         : constant Unit_Number_Type := Get_Source_Unit (N);
        Current_Unit : Node_Id;
  
     begin
*************** package body Sem_Ch12 is
*** 8628,8638 ****
                   and then P /= Current_Scope
                 then
                    --  We are within an instance of some sibling. Retain
!                   --  visibility of parent, for proper subsequent cleanup.
  
                    Set_In_Private_Part (P);
                 end if;
  
              elsif not In_Open_Scopes (Scope (P)) then
                 Set_Is_Immediately_Visible (P, False);
              end if;
--- 8958,8974 ----
                   and then P /= Current_Scope
                 then
                    --  We are within an instance of some sibling. Retain
!                   --  visibility of parent, for proper subsequent cleanup,
!                   --  and reinstall private declarations as well.
  
                    Set_In_Private_Part (P);
+                   Install_Private_Declarations (P);
                 end if;
  
+             --  This looks incomplete: what about compilation units that
+             --  were made visible by Install_Parent but should not remain
+             --  visible??? Standard is on the scope stack.
+ 
              elsif not In_Open_Scopes (Scope (P)) then
                 Set_Is_Immediately_Visible (P, False);
              end if;
*************** package body Sem_Ch12 is
*** 8671,8677 ****
        Saved : Instance_Env renames Instance_Envs.Table (Instance_Envs.Last);
  
     begin
!       Ada_83                       := Saved.Ada_83;
  
        if No (Current_Instantiated_Parent.Act_Id) then
  
--- 9007,9013 ----
        Saved : Instance_Env renames Instance_Envs.Table (Instance_Envs.Last);
  
     begin
!       Ada_Version := Saved.Ada_Version;
  
        if No (Current_Instantiated_Parent.Act_Id) then
  
*************** package body Sem_Ch12 is
*** 8702,8707 ****
--- 9038,9077 ----
        Dep_Elmt : Elmt_Id;
        Dep_Typ  : Node_Id;
  
+       procedure Restore_Nested_Formal (Formal : Entity_Id);
+       --  Hide the generic formals of formal packages declared with box
+       --  which were reachable in the current instantiation.
+ 
+       procedure Restore_Nested_Formal (Formal : Entity_Id) is
+          Ent : Entity_Id;
+       begin
+          if Present (Renamed_Object (Formal))
+            and then Denotes_Formal_Package (Renamed_Object (Formal), True)
+          then
+             return;
+ 
+          elsif Present (Associated_Formal_Package (Formal))
+           and then Box_Present (Parent (Associated_Formal_Package (Formal)))
+          then
+             Ent := First_Entity (Formal);
+ 
+             while Present (Ent) loop
+                exit when Ekind (Ent) = E_Package
+                  and then Renamed_Entity (Ent) = Renamed_Entity (Formal);
+ 
+                Set_Is_Hidden (Ent);
+                Set_Is_Potentially_Use_Visible (Ent, False);
+ 
+                if Ekind (Ent) = E_Package then
+                   --  Recurse.
+                   Restore_Nested_Formal (Ent);
+                end if;
+ 
+                Next_Entity (Ent);
+             end loop;
+          end if;
+       end Restore_Nested_Formal;
+ 
     begin
        M := First_Elmt (Exchanged_Views);
        while Present (M) loop
*************** package body Sem_Ch12 is
*** 8782,8788 ****
  
              --  If the actual is itself a formal package for the enclosing
              --  generic, or the actual for such a formal package, it remains
!             --  visible after the current instance, and therefore nothing
              --  needs to be done either, except to keep it accessible.
  
              if Is_Package
--- 9152,9158 ----
  
              --  If the actual is itself a formal package for the enclosing
              --  generic, or the actual for such a formal package, it remains
!             --  visible on exit from the instance, and therefore nothing
              --  needs to be done either, except to keep it accessible.
  
              if Is_Package
*************** package body Sem_Ch12 is
*** 8793,8799 ****
              elsif Nkind (Parent (E)) /= N_Package_Renaming_Declaration then
                 null;
  
!             elsif Denotes_Formal_Package (Renamed_Object (E)) then
                 Set_Is_Hidden (E, False);
  
              else
--- 9163,9169 ----
              elsif Nkind (Parent (E)) /= N_Package_Renaming_Declaration then
                 null;
  
!             elsif Denotes_Formal_Package (Renamed_Object (E), True) then
                 Set_Is_Hidden (E, False);
  
              else
*************** package body Sem_Ch12 is
*** 8806,8820 ****
                    while Present (Id)
                      and then Id /= First_Private_Entity (Act_P)
                    loop
-                      Set_Is_Hidden (Id, True);
-                      Set_Is_Potentially_Use_Visible (Id, In_Use (Act_P));
                       exit when Ekind (Id) = E_Package
                                   and then Renamed_Object (Id) = Act_P;
  
                       Next_Entity (Id);
                    end loop;
                 end;
-                null;
              end if;
           end if;
  
--- 9176,9194 ----
                    while Present (Id)
                      and then Id /= First_Private_Entity (Act_P)
                    loop
                       exit when Ekind (Id) = E_Package
                                   and then Renamed_Object (Id) = Act_P;
  
+                      Set_Is_Hidden (Id, True);
+                      Set_Is_Potentially_Use_Visible (Id, In_Use (Act_P));
+ 
+                      if Ekind (Id) = E_Package then
+                         Restore_Nested_Formal (Id);
+                      end if;
+ 
                       Next_Entity (Id);
                    end loop;
                 end;
              end if;
           end if;
  
*************** package body Sem_Ch12 is
*** 8906,8911 ****
--- 9280,9289 ----
           --  the current scope (e.g. when the instance appears within the body
           --  of an ancestor).
  
+          ----------------------
+          -- Is_Instance_Node --
+          ----------------------
+ 
           function Is_Instance_Node (Decl : Node_Id) return Boolean is
           begin
              return (Nkind (Decl) in N_Generic_Instantiation
*************** package body Sem_Ch12 is
*** 9411,9417 ****
                    --  inlining.
  
                    Rewrite (N, New_Copy (N2));
-                   Set_Associated_Node (N, N2);
                    Set_Analyzed (N, False);
                 end if;
              end if;
--- 9789,9794 ----
*************** package body Sem_Ch12 is
*** 9631,9642 ****
  
     begin
        --  Regardless of the current mode, predefined units are analyzed in
!       --  Ada95 mode, and Ada83 checks don't apply.
  
        if Is_Internal_File_Name
            (Fname => Unit_File_Name (Get_Source_Unit (Gen_Unit)),
             Renamings_Included => True) then
!          Ada_83 := False;
        end if;
  
        Current_Instantiated_Parent := (Gen_Unit, Act_Unit, Assoc_Null);
--- 10008,10020 ----
  
     begin
        --  Regardless of the current mode, predefined units are analyzed in
!       --  the most current Ada mode, and earlier version Ada checks do not
!       --  apply to predefined units.
  
        if Is_Internal_File_Name
            (Fname => Unit_File_Name (Get_Source_Unit (Gen_Unit)),
             Renamings_Included => True) then
!          Ada_Version := Ada_Version_Type'Last;
        end if;
  
        Current_Instantiated_Parent := (Gen_Unit, Act_Unit, Assoc_Null);
diff -Nrcpad gcc-3.4.3/gcc/ada/sem_ch13.adb gcc-4.0.0/gcc/ada/sem_ch13.adb
*** gcc-3.4.3/gcc/ada/sem_ch13.adb	Thu Nov 27 11:40:45 2003
--- gcc-4.0.0/gcc/ada/sem_ch13.adb	Thu Feb 10 13:50:35 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Einfo;    use Einfo;
*** 30,40 ****
  with Errout;   use Errout;
  with Exp_Tss;  use Exp_Tss;
  with Exp_Util; use Exp_Util;
- with Hostparm; use Hostparm;
  with Lib;      use Lib;
  with Nlists;   use Nlists;
  with Nmake;    use Nmake;
  with Opt;      use Opt;
  with Rtsfind;  use Rtsfind;
  with Sem;      use Sem;
  with Sem_Ch8;  use Sem_Ch8;
--- 30,41 ----
  with Errout;   use Errout;
  with Exp_Tss;  use Exp_Tss;
  with Exp_Util; use Exp_Util;
  with Lib;      use Lib;
  with Nlists;   use Nlists;
  with Nmake;    use Nmake;
  with Opt;      use Opt;
+ with Restrict; use Restrict;
+ with Rident;   use Rident;
  with Rtsfind;  use Rtsfind;
  with Sem;      use Sem;
  with Sem_Ch8;  use Sem_Ch8;
*************** with Snames;   use Snames;
*** 46,51 ****
--- 47,53 ----
  with Stand;    use Stand;
  with Sinfo;    use Sinfo;
  with Table;
+ with Targparm; use Targparm;
  with Ttypes;   use Ttypes;
  with Tbuild;   use Tbuild;
  with Urealp;   use Urealp;
*************** package body Sem_Ch13 is
*** 83,89 ****
     --  operational attributes.
  
     function Address_Aliased_Entity (N : Node_Id) return Entity_Id;
!    --  If expression N is of the form E'Address, return E.
  
     procedure Mark_Aliased_Address_As_Volatile (N : Node_Id);
     --  This is used for processing of an address representation clause. If
--- 85,91 ----
     --  operational attributes.
  
     function Address_Aliased_Entity (N : Node_Id) return Entity_Id;
!    --  If expression N is of the form E'Address, return E
  
     procedure Mark_Aliased_Address_As_Volatile (N : Node_Id);
     --  This is used for processing of an address representation clause. If
*************** package body Sem_Ch13 is
*** 203,213 ****
  
     procedure Analyze_At_Clause (N : Node_Id) is
     begin
        if Warn_On_Obsolescent_Feature then
           Error_Msg_N
             ("at clause is an obsolescent feature ('R'M 'J.7(2))?", N);
           Error_Msg_N
!            ("|use address attribute definition clause instead?", N);
        end if;
  
        Rewrite (N,
--- 205,217 ----
  
     procedure Analyze_At_Clause (N : Node_Id) is
     begin
+       Check_Restriction (No_Obsolescent_Features, N);
+ 
        if Warn_On_Obsolescent_Feature then
           Error_Msg_N
             ("at clause is an obsolescent feature ('R'M 'J.7(2))?", N);
           Error_Msg_N
!            ("\use address attribute definition clause instead?", N);
        end if;
  
        Rewrite (N,
*************** package body Sem_Ch13 is
*** 265,272 ****
--- 269,282 ----
           U_Ent := Ent;
  
        elsif Ekind (Ent) = E_Incomplete_Type then
+ 
+          --  The attribute applies to the full view, set the entity
+          --  of the attribute definition accordingly.
+ 
           Ent := Underlying_Type (Ent);
           U_Ent := Ent;
+          Set_Entity (Nam, Ent);
+ 
        else
           U_Ent := Underlying_Type (Ent);
        end if;
*************** package body Sem_Ch13 is
*** 291,297 ****
        then
           Error_Msg_N ("cannot specify attribute for subtype", Nam);
           return;
- 
        end if;
  
        --  Switch on particular attribute
--- 301,306 ----
*************** package body Sem_Ch13 is
*** 349,360 ****
                      ("\?only one task can be declared of this type", N);
                 end if;
  
                 if Warn_On_Obsolescent_Feature then
                    Error_Msg_N
                      ("attaching interrupt to task entry is an " &
                       "obsolescent feature ('R'M 'J.7.1)?", N);
                    Error_Msg_N
!                     ("|use interrupt procedure instead?", N);
                 end if;
  
              --  Case of an address clause for a controlled object:
--- 358,371 ----
                      ("\?only one task can be declared of this type", N);
                 end if;
  
+                Check_Restriction (No_Obsolescent_Features, N);
+ 
                 if Warn_On_Obsolescent_Feature then
                    Error_Msg_N
                      ("attaching interrupt to task entry is an " &
                       "obsolescent feature ('R'M 'J.7.1)?", N);
                    Error_Msg_N
!                     ("\use interrupt procedure instead?", N);
                 end if;
  
              --  Case of an address clause for a controlled object:
*************** package body Sem_Ch13 is
*** 1104,1111 ****
                             and then
                          Size /= System_Storage_Unit * 8
                       then
                          Error_Msg_N
!                           ("size for primitive object must be power of 2", N);
                       end if;
                    end if;
  
--- 1115,1124 ----
                             and then
                          Size /= System_Storage_Unit * 8
                       then
+                         Error_Msg_Uint_1 := UI_From_Int (System_Storage_Unit);
                          Error_Msg_N
!                           ("size for primitive object must be a power of 2"
!                             & " and at least ^", N);
                       end if;
                    end if;
  
*************** package body Sem_Ch13 is
*** 1179,1190 ****
  
           begin
              if Is_Task_Type (U_Ent) then
                 if Warn_On_Obsolescent_Feature then
                    Error_Msg_N
                      ("storage size clause for task is an " &
                       "obsolescent feature ('R'M 'J.9)?", N);
                    Error_Msg_N
!                     ("|use Storage_Size pragma instead?", N);
                 end if;
  
                 FOnly := True;
--- 1192,1205 ----
  
           begin
              if Is_Task_Type (U_Ent) then
+                Check_Restriction (No_Obsolescent_Features, N);
+ 
                 if Warn_On_Obsolescent_Feature then
                    Error_Msg_N
                      ("storage size clause for task is an " &
                       "obsolescent feature ('R'M 'J.9)?", N);
                    Error_Msg_N
!                     ("\use Storage_Size pragma instead?", N);
                 end if;
  
                 FOnly := True;
*************** package body Sem_Ch13 is
*** 1242,1247 ****
--- 1257,1263 ----
  
           when Attribute_Storage_Pool => Storage_Pool : declare
              Pool : Entity_Id;
+             T    : Entity_Id;
  
           begin
              if Ekind (U_Ent) /= E_Access_Type
*************** package body Sem_Ch13 is
*** 1268,1273 ****
--- 1284,1309 ----
              Analyze_And_Resolve
                (Expr, Class_Wide_Type (RTE (RE_Root_Storage_Pool)));
  
+             if Nkind (Expr) = N_Type_Conversion then
+                T := Etype (Expression (Expr));
+             else
+                T := Etype (Expr);
+             end if;
+ 
+             --  The Stack_Bounded_Pool is used internally for implementing
+             --  access types with a Storage_Size. Since it only work
+             --  properly when used on one specific type, we need to check
+             --  that it is not highjacked improperly:
+             --    type T is access Integer;
+             --    for T'Storage_Size use n;
+             --    type Q is access Float;
+             --    for Q'Storage_Size use T'Storage_Size; -- incorrect
+ 
+             if Base_Type (T) = RTE (RE_Stack_Bounded_Pool) then
+                Error_Msg_N ("non-sharable internal Pool", Expr);
+                return;
+             end if;
+ 
              --  If the argument is a name that is not an entity name, then
              --  we construct a renaming operation to define an entity of
              --  type storage pool.
*************** package body Sem_Ch13 is
*** 1312,1344 ****
                    Pool := Entity (Expression (Renamed_Object (Pool)));
                 end if;
  
!                if Present (Etype (Pool))
!                  and then Etype (Pool) /= RTE (RE_Stack_Bounded_Pool)
!                  and then Etype (Pool) /= RTE (RE_Unbounded_Reclaim_Pool)
!                then
!                   Set_Associated_Storage_Pool (U_Ent, Pool);
!                else
!                   Error_Msg_N ("Non sharable GNAT Pool", Expr);
!                end if;
! 
!             --  The pool may be specified as the Storage_Pool of some other
!             --  type. It is rewritten as a class_wide conversion of the
!             --  corresponding pool entity.
  
              elsif Nkind (Expr) = N_Type_Conversion
                and then Is_Entity_Name (Expression (Expr))
                and then Nkind (Original_Node (Expr)) = N_Attribute_Reference
              then
                 Pool := Entity (Expression (Expr));
! 
!                if Present (Etype (Pool))
!                  and then Etype (Pool) /= RTE (RE_Stack_Bounded_Pool)
!                  and then Etype (Pool) /= RTE (RE_Unbounded_Reclaim_Pool)
!                then
!                   Set_Associated_Storage_Pool (U_Ent, Pool);
!                else
!                   Error_Msg_N ("Non sharable GNAT Pool", Expr);
!                end if;
  
              else
                 Error_Msg_N ("incorrect reference to a Storage Pool", Expr);
--- 1348,1361 ----
                    Pool := Entity (Expression (Renamed_Object (Pool)));
                 end if;
  
!                Set_Associated_Storage_Pool (U_Ent, Pool);
  
              elsif Nkind (Expr) = N_Type_Conversion
                and then Is_Entity_Name (Expression (Expr))
                and then Nkind (Original_Node (Expr)) = N_Attribute_Reference
              then
                 Pool := Entity (Expression (Expr));
!                Set_Associated_Storage_Pool (U_Ent, Pool);
  
              else
                 Error_Msg_N ("incorrect reference to a Storage Pool", Expr);
*************** package body Sem_Ch13 is
*** 1346,1351 ****
--- 1363,1407 ----
              end if;
           end Storage_Pool;
  
+          -----------------
+          -- Stream_Size --
+          -----------------
+ 
+          when Attribute_Stream_Size => Stream_Size : declare
+             Size : constant Uint := Static_Integer (Expr);
+ 
+          begin
+             if Has_Stream_Size_Clause (U_Ent) then
+                Error_Msg_N ("Stream_Size already given for &", Nam);
+ 
+             elsif Is_Elementary_Type (U_Ent) then
+                if Size /= System_Storage_Unit
+                     and then
+                   Size /= System_Storage_Unit * 2
+                     and then
+                   Size /= System_Storage_Unit * 4
+                      and then
+                   Size /= System_Storage_Unit * 8
+                then
+                   Error_Msg_Uint_1 := UI_From_Int (System_Storage_Unit);
+                   Error_Msg_N
+                     ("stream size for elementary type must be a"
+                        & " power of 2 and at least ^", N);
+ 
+                elsif RM_Size (U_Ent) > Size then
+                   Error_Msg_Uint_1 := RM_Size (U_Ent);
+                   Error_Msg_N
+                     ("stream size for elementary type must be a"
+                        & " power of 2 and at least ^", N);
+                end if;
+ 
+                Set_Has_Stream_Size_Clause (U_Ent);
+ 
+             else
+                Error_Msg_N ("Stream_Size cannot be given for &", Nam);
+             end if;
+          end Stream_Size;
+ 
           ----------------
           -- Value_Size --
           ----------------
*************** package body Sem_Ch13 is
*** 1393,1398 ****
--- 1449,1458 ----
              --  Return true if the entity is a procedure with an
              --  appropriate profile for the write attribute.
  
+             ----------------------
+             -- Has_Good_Profile --
+             ----------------------
+ 
              function Has_Good_Profile (Subp : Entity_Id) return Boolean is
                 F     : Entity_Id;
                 Ok    : Boolean := False;
*************** package body Sem_Ch13 is
*** 1477,1483 ****
           when others =>
              Error_Msg_N
                ("attribute& cannot be set with definition clause", N);
- 
        end case;
  
        --  The test for the type being frozen must be performed after
--- 1537,1542 ----
*************** package body Sem_Ch13 is
*** 1647,1656 ****
           Error_Msg_N ("duplicate enumeration rep clause ignored", N);
           return;
  
!       --  Don't allow rep clause if root type is standard [wide_]character
  
        elsif Root_Type (Enumtype) = Standard_Character
          or else Root_Type (Enumtype) = Standard_Wide_Character
        then
           Error_Msg_N ("enumeration rep clause not allowed for this type", N);
           return;
--- 1706,1716 ----
           Error_Msg_N ("duplicate enumeration rep clause ignored", N);
           return;
  
!       --  Don't allow rep clause for standard [wide_[wide_]]character
  
        elsif Root_Type (Enumtype) = Standard_Character
          or else Root_Type (Enumtype) = Standard_Wide_Character
+         or else Root_Type (Enumtype) = Standard_Wide_Wide_Character
        then
           Error_Msg_N ("enumeration rep clause not allowed for this type", N);
           return;
*************** package body Sem_Ch13 is
*** 1941,1951 ****
              pragma Warnings (Off, Mod_Val);
  
           begin
              if Warn_On_Obsolescent_Feature then
                 Error_Msg_N
                   ("mod clause is an obsolescent feature ('R'M 'J.8)?", N);
                 Error_Msg_N
!                  ("|use alignment attribute definition clause instead?", N);
              end if;
  
              if Present (P) then
--- 2001,2013 ----
              pragma Warnings (Off, Mod_Val);
  
           begin
+             Check_Restriction (No_Obsolescent_Features, Mod_Clause (N));
+ 
              if Warn_On_Obsolescent_Feature then
                 Error_Msg_N
                   ("mod clause is an obsolescent feature ('R'M 'J.8)?", N);
                 Error_Msg_N
!                  ("\use alignment attribute definition clause instead?", N);
              end if;
  
              if Present (P) then
*************** package body Sem_Ch13 is
*** 2082,2088 ****
                 --  tag to get an explicit position.
  
                 elsif Nkind (Component_Name (CC)) = N_Attribute_Reference then
- 
                    if Attribute_Name (Component_Name (CC)) = Name_Tag then
                       Error_Msg_N ("position of tag cannot be specified", CC);
                    else
--- 2144,2149 ----
*************** package body Sem_Ch13 is
*** 2118,2124 ****
                         ("component clause previously given#", CC);
  
                    else
!                      --  Update Fbit and Lbit to the actual bit number.
  
                       Fbit := Fbit + UI_From_Int (SSU) * Posit;
                       Lbit := Lbit + UI_From_Int (SSU) * Posit;
--- 2179,2185 ----
                         ("component clause previously given#", CC);
  
                    else
!                      --  Update Fbit and Lbit to the actual bit number
  
                       Fbit := Fbit + UI_From_Int (SSU) * Posit;
                       Lbit := Lbit + UI_From_Int (SSU) * Posit;
*************** package body Sem_Ch13 is
*** 2634,2640 ****
                    return;
                 end if;
  
!                --  Otherwise look at the identifier and see if it is OK.
  
                 if Ekind (Ent) = E_Named_Integer
                      or else
--- 2695,2701 ----
                    return;
                 end if;
  
!                --  Otherwise look at the identifier and see if it is OK
  
                 if Ekind (Ent) = E_Named_Integer
                      or else
*************** package body Sem_Ch13 is
*** 2694,2701 ****
                    end if;
                 end if;
  
!             when N_Integer_Literal   |
!                  N_Real_Literal      |
                   N_String_Literal    |
                   N_Character_Literal =>
                 return;
--- 2755,2773 ----
                    end if;
                 end if;
  
!             when N_Integer_Literal   =>
! 
!                --  If this is a rewritten unchecked conversion, in a system
!                --  where Address is an integer type, always use the base type
!                --  for a literal value. This is user-friendly and prevents
!                --  order-of-elaboration issues with instances of unchecked
!                --  conversion.
! 
!                if Nkind (Original_Node (Nod)) = N_Function_Call then
!                   Set_Etype (Nod, Base_Type (Etype (Nod)));
!                end if;
! 
!             when N_Real_Literal      |
                   N_String_Literal    |
                   N_Character_Literal =>
                 return;
*************** package body Sem_Ch13 is
*** 3035,3042 ****
  
     function Minimum_Size
       (T      : Entity_Id;
!       Biased : Boolean := False)
!       return   Nat
     is
        Lo     : Uint    := No_Uint;
        Hi     : Uint    := No_Uint;
--- 3107,3113 ----
  
     function Minimum_Size
       (T      : Entity_Id;
!       Biased : Boolean := False) return Nat
     is
        Lo     : Uint    := No_Uint;
        Hi     : Uint    := No_Uint;
*************** package body Sem_Ch13 is
*** 3064,3073 ****
        then
           return 0;
  
!       --  Access types
  
        elsif Is_Access_Type (T) then
!          return System_Address_Size;
  
        --  Floating-point types
  
--- 3135,3153 ----
        then
           return 0;
  
!          --  Access types. Normally an access type cannot have a size smaller
!          --  than the size of System.Address. The exception is on VMS, where
!          --  we have short and long addresses, and it is possible for an access
!          --  type to have a short address size (and thus be less than the size
!          --  of System.Address itself). We simply skip the check for VMS, and
!          --  leave the back end to do the check.
  
        elsif Is_Access_Type (T) then
!          if OpenVMS_On_Target then
!             return 0;
!          else
!             return System_Address_Size;
!          end if;
  
        --  Floating-point types
  
*************** package body Sem_Ch13 is
*** 3174,3180 ****
           raise Program_Error;
        end if;
  
!       --  Fall through with Hi and Lo set. Deal with biased case.
  
        if (Biased and then not Is_Fixed_Point_Type (T))
          or else Has_Biased_Representation (T)
--- 3254,3260 ----
           raise Program_Error;
        end if;
  
!       --  Fall through with Hi and Lo set. Deal with biased case
  
        if (Biased and then not Is_Fixed_Point_Type (T))
          or else Has_Biased_Representation (T)
*************** package body Sem_Ch13 is
*** 3253,3259 ****
        -- Build_Spec --
        ----------------
  
!       function  Build_Spec return Node_Id is
        begin
           Subp_Id := Make_Defining_Identifier (Loc, Sname);
  
--- 3333,3339 ----
        -- Build_Spec --
        ----------------
  
!       function Build_Spec return Node_Id is
        begin
           Subp_Id := Make_Defining_Identifier (Loc, Sname);
  
*************** package body Sem_Ch13 is
*** 3327,3333 ****
        -- Build_Spec --
        ----------------
  
!       function  Build_Spec return Node_Id is
        begin
           Subp_Id := Make_Defining_Identifier (Loc, Sname);
  
--- 3407,3413 ----
        -- Build_Spec --
        ----------------
  
!       function Build_Spec return Node_Id is
        begin
           Subp_Id := Make_Defining_Identifier (Loc, Sname);
  
*************** package body Sem_Ch13 is
*** 3379,3403 ****
        end if;
     end New_Stream_Procedure;
  
-    ---------------------
-    -- Record_Rep_Item --
-    ---------------------
- 
-    procedure Record_Rep_Item (T : Entity_Id; N : Node_Id) is
-    begin
-       Set_Next_Rep_Item (N, First_Rep_Item (T));
-       Set_First_Rep_Item (T, N);
-    end Record_Rep_Item;
- 
     ------------------------
     -- Rep_Item_Too_Early --
     ------------------------
  
!    function Rep_Item_Too_Early
!      (T     : Entity_Id;
!       N     : Node_Id)
!       return  Boolean
!    is
     begin
        --  Cannot apply rep items that are not operational items
        --  to generic types
--- 3459,3469 ----
        end if;
     end New_Stream_Procedure;
  
     ------------------------
     -- Rep_Item_Too_Early --
     ------------------------
  
!    function Rep_Item_Too_Early (T : Entity_Id; N : Node_Id) return Boolean is
     begin
        --  Cannot apply rep items that are not operational items
        --  to generic types
*************** package body Sem_Ch13 is
*** 3446,3463 ****
     function Rep_Item_Too_Late
       (T     : Entity_Id;
        N     : Node_Id;
!       FOnly : Boolean := False)
!       return  Boolean
     is
        S           : Entity_Id;
        Parent_Type : Entity_Id;
  
        procedure Too_Late;
!       --  Output the too late message
  
        procedure Too_Late is
        begin
!          Error_Msg_N ("representation item appears too late!", N);
        end Too_Late;
  
     --  Start of processing for Rep_Item_Too_Late
--- 3512,3534 ----
     function Rep_Item_Too_Late
       (T     : Entity_Id;
        N     : Node_Id;
!       FOnly : Boolean := False) return Boolean
     is
        S           : Entity_Id;
        Parent_Type : Entity_Id;
  
        procedure Too_Late;
!       --  Output the too late message. Note that this is not considered a
!       --  serious error, since the effect is simply that we ignore the
!       --  representation clause in this case.
! 
!       --------------
!       -- Too_Late --
!       --------------
  
        procedure Too_Late is
        begin
!          Error_Msg_N ("|representation item appears too late!", N);
        end Too_Late;
  
     --  Start of processing for Rep_Item_Too_Late
*************** package body Sem_Ch13 is
*** 3619,3624 ****
--- 3690,3699 ----
                 --  CD1 and CD2 are either components or discriminants. This
                 --  function tests whether the two have the same representation
  
+                --------------
+                -- Same_Rep --
+                --------------
+ 
                 function Same_Rep return Boolean is
                 begin
                    if No (Component_Clause (CD1)) then
*************** package body Sem_Ch13 is
*** 3850,3864 ****
           end if;
        end if;
  
!       --  Generate N_Validate_Unchecked_Conversion node for back end if
!       --  the back end needs to perform special validation checks. At the
!       --  current time, only the JVM version requires such checks.
  
!       if Java_VM then
!          Vnode :=
!            Make_Validate_Unchecked_Conversion (Sloc (N));
!          Set_Source_Type (Vnode, Source);
!          Set_Target_Type (Vnode, Target);
           Insert_After (N, Vnode);
        end if;
     end Validate_Unchecked_Conversion;
--- 3925,3956 ----
           end if;
        end if;
  
!       --  If unchecked conversion to access type, and access type is
!       --  declared in the same unit as the unchecked conversion, then
!       --  set the No_Strict_Aliasing flag (no strict aliasing is
!       --  implicit in this situation).
  
!       if Is_Access_Type (Target) and then
!         In_Same_Source_Unit (Target, N)
!       then
!          Set_No_Strict_Aliasing (Implementation_Base_Type (Target));
!       end if;
! 
!       --  Generate N_Validate_Unchecked_Conversion node for back end in
!       --  case the back end needs to perform special validation checks.
! 
!       --  Shouldn't this be in exp_ch13, since the check only gets done
!       --  if we have full expansion and the back end is called ???
! 
!       Vnode :=
!         Make_Validate_Unchecked_Conversion (Sloc (N));
!       Set_Source_Type (Vnode, Source);
!       Set_Target_Type (Vnode, Target);
! 
!       --  If the unchecked conversion node is in a list, just insert before
!       --  it. If not we have some strange case, not worth bothering about.
! 
!       if Is_List_Member (N) then
           Insert_After (N, Vnode);
        end if;
     end Validate_Unchecked_Conversion;
diff -Nrcpad gcc-3.4.3/gcc/ada/sem_ch13.ads gcc-4.0.0/gcc/ada/sem_ch13.ads
*** gcc-3.4.3/gcc/ada/sem_ch13.ads	Thu Nov 27 11:40:45 2003
--- gcc-4.0.0/gcc/ada/sem_ch13.ads	Fri Nov 19 10:56:35 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Sem_Ch13 is
*** 46,54 ****
  
     function Minimum_Size
       (T      : Entity_Id;
!       Biased : Boolean := False)
!       return   Nat;
!    --  Given a primitive type, determines the minimum number of bits required
     --  to represent all values of the type. This function may not be called
     --  with any other types. If the flag Biased is set True, then the minimum
     --  size calculation that biased representation is used in the case of a
--- 46,53 ----
  
     function Minimum_Size
       (T      : Entity_Id;
!       Biased : Boolean := False) return Nat;
!    --  Given an elementary type, determines the minimum number of bits required
     --  to represent all values of the type. This function may not be called
     --  with any other types. If the flag Biased is set True, then the minimum
     --  size calculation that biased representation is used in the case of a
*************** package Sem_Ch13 is
*** 91,105 ****
     --  If the size is too small, and an error message is given, then both
     --  Esize and RM_Size are reset to the allowed minimum value in T.
  
!    procedure Record_Rep_Item (T : Entity_Id; N : Node_Id);
!    --  N is the node for either a representation pragma or an attribute
!    --  definition clause that applies to type T. This procedure links
!    --  the node N onto the Rep_Item chain for the type T.
! 
!    function Rep_Item_Too_Early
!      (T     : Entity_Id;
!       N     : Node_Id)
!       return  Boolean;
     --  Called at the start of processing a representation clause or a
     --  representation pragma. Used to check that the representation item
     --  is not being applied to an incompleted type or to a generic formal
--- 90,96 ----
     --  If the size is too small, and an error message is given, then both
     --  Esize and RM_Size are reset to the allowed minimum value in T.
  
!    function Rep_Item_Too_Early (T : Entity_Id; N : Node_Id) return Boolean;
     --  Called at the start of processing a representation clause or a
     --  representation pragma. Used to check that the representation item
     --  is not being applied to an incompleted type or to a generic formal
*************** package Sem_Ch13 is
*** 110,117 ****
     function Rep_Item_Too_Late
       (T     : Entity_Id;
        N     : Node_Id;
!       FOnly : Boolean := False)
!       return  Boolean;
     --  Called at the start of processing a representation clause or a
     --  representation pragma. Used to check that a representation item
     --  for entity T does not appear too late (according to the rules in
--- 101,107 ----
     function Rep_Item_Too_Late
       (T     : Entity_Id;
        N     : Node_Id;
!       FOnly : Boolean := False) return Boolean;
     --  Called at the start of processing a representation clause or a
     --  representation pragma. Used to check that a representation item
     --  for entity T does not appear too late (according to the rules in
diff -Nrcpad gcc-3.4.3/gcc/ada/sem_ch2.adb gcc-4.0.0/gcc/ada/sem_ch2.adb
*** gcc-3.4.3/gcc/ada/sem_ch2.adb	Thu Apr 24 17:54:16 2003
--- gcc-4.0.0/gcc/ada/sem_ch2.adb	Thu Feb 10 13:50:43 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2001, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Atree;    use Atree;
*** 28,36 ****
--- 28,38 ----
  with Errout;   use Errout;
  with Opt;      use Opt;
  with Restrict; use Restrict;
+ with Rident;   use Rident;
  with Sem_Ch8;  use Sem_Ch8;
  with Sinfo;    use Sinfo;
  with Stand;    use Stand;
+ with Uintp;    use Uintp;
  
  package body Sem_Ch2 is
  
*************** package body Sem_Ch2 is
*** 40,46 ****
  
     procedure Analyze_Character_Literal (N : Node_Id) is
     begin
- 
        --  The type is eventually inherited from the context. If expansion
        --  has already established the proper type, do not modify it.
  
--- 42,47 ----
*************** package body Sem_Ch2 is
*** 51,57 ****
        Set_Is_Static_Expression (N);
  
        if Comes_From_Source (N)
!         and then not In_Character_Range (Char_Literal_Value (N))
        then
           Check_Restriction (No_Wide_Characters, N);
        end if;
--- 52,58 ----
        Set_Is_Static_Expression (N);
  
        if Comes_From_Source (N)
!         and then not In_Character_Range (UI_To_CC (Char_Literal_Value (N)))
        then
           Check_Restriction (No_Wide_Characters, N);
        end if;
*************** package body Sem_Ch2 is
*** 102,108 ****
  
     procedure Analyze_String_Literal (N : Node_Id) is
     begin
- 
        --  The type is eventually inherited from the context. If expansion
        --  has already established the proper type, do not modify it.
  
--- 103,108 ----
*************** package body Sem_Ch2 is
*** 114,120 ****
        --  turns out to be non-static, then the Is_Static_Expression flag
        --  will be reset in Eval_String_Literal.
  
!       if Ada_95 then
           Set_Is_Static_Expression (N);
        end if;
  
--- 114,120 ----
        --  turns out to be non-static, then the Is_Static_Expression flag
        --  will be reset in Eval_String_Literal.
  
!       if Ada_Version >= Ada_95 then
           Set_Is_Static_Expression (N);
        end if;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/sem_ch3.adb gcc-4.0.0/gcc/ada/sem_ch3.adb
*** gcc-3.4.3/gcc/ada/sem_ch3.adb	Mon Jan 12 11:45:24 2004
--- gcc-4.0.0/gcc/ada/sem_ch3.adb	Thu Mar 17 19:53:06 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Namet;    use Namet;
*** 43,48 ****
--- 43,49 ----
  with Nmake;    use Nmake;
  with Opt;      use Opt;
  with Restrict; use Restrict;
+ with Rident;   use Rident;
  with Rtsfind;  use Rtsfind;
  with Sem;      use Sem;
  with Sem_Case; use Sem_Case;
*************** package body Sem_Ch3 is
*** 139,147 ****
     --  an anonymous base type, and propagate constraint to subtype if needed.
  
     procedure Build_Derived_Private_Type
!      (N            : Node_Id;
!       Parent_Type  : Entity_Id;
!       Derived_Type : Entity_Id;
        Is_Completion : Boolean;
        Derive_Subps  : Boolean := True);
     --  Subsidiary procedure to Build_Derived_Type. This procedure is complex
--- 140,148 ----
     --  an anonymous base type, and propagate constraint to subtype if needed.
  
     procedure Build_Derived_Private_Type
!      (N             : Node_Id;
!       Parent_Type   : Entity_Id;
!       Derived_Type  : Entity_Id;
        Is_Completion : Boolean;
        Derive_Subps  : Boolean := True);
     --  Subsidiary procedure to Build_Derived_Type. This procedure is complex
*************** package body Sem_Ch3 is
*** 400,410 ****
     --    SI is the N_Subtype_Indication node containing the constraint and
     --    the unconstrained type to constrain.
     --
!    --    Def_Id is the entity for the resulting constrained subtype. A
!    --    value of Empty for Def_Id indicates that an implicit type must be
!    --    created, but creation is delayed (and must be done by this procedure)
!    --    because other subsidiary implicit types must be created first (which
!    --    is why Def_Id is an in/out parameter).
     --
     --    Related_Nod gives the place where this type has to be inserted
     --    in the tree
--- 401,411 ----
     --    SI is the N_Subtype_Indication node containing the constraint and
     --    the unconstrained type to constrain.
     --
!    --    Def_Id is the entity for the resulting constrained subtype. A value
!    --    of Empty for Def_Id indicates that an implicit type must be created,
!    --    but creation is delayed (and must be done by this procedure) because
!    --    other subsidiary implicit types must be created first (which is why
!    --    Def_Id is an in/out parameter).
     --
     --    Related_Nod gives the place where this type has to be inserted
     --    in the tree
*************** package body Sem_Ch3 is
*** 451,464 ****
        Related_Id   : Entity_Id;
        Suffix       : Character;
        Suffix_Index : Nat);
!    --  Process an index constraint in a constrained array declaration.
!    --  The constraint can be a subtype name, or a range with or without
!    --  an explicit subtype mark. The index is the corresponding index of the
     --  unconstrained array. The Related_Id and Suffix parameters are used to
     --  build the associated Implicit type name.
  
     procedure Constrain_Integer (Def_Id : Node_Id; S : Node_Id);
!    --  Build subtype of a signed or modular integer type.
  
     procedure Constrain_Ordinary_Fixed (Def_Id : Node_Id; S : Node_Id);
     --  Constrain an ordinary fixed point type with a range constraint, and
--- 452,465 ----
        Related_Id   : Entity_Id;
        Suffix       : Character;
        Suffix_Index : Nat);
!    --  Process an index constraint in a constrained array declaration. The
!    --  constraint can be a subtype name, or a range with or without an
!    --  explicit subtype mark. The index is the corresponding index of the
     --  unconstrained array. The Related_Id and Suffix parameters are used to
     --  build the associated Implicit type name.
  
     procedure Constrain_Integer (Def_Id : Node_Id; S : Node_Id);
!    --  Build subtype of a signed or modular integer type
  
     procedure Constrain_Ordinary_Fixed (Def_Id : Node_Id; S : Node_Id);
     --  Constrain an ordinary fixed point type with a range constraint, and
*************** package body Sem_Ch3 is
*** 676,681 ****
--- 677,701 ----
           Error_Msg_N ("task entries cannot have access parameters", N);
        end if;
  
+       --  Ada 2005 (AI-254): In case of anonymous access to subprograms
+       --  call the corresponding semantic routine
+ 
+       if Present (Access_To_Subprogram_Definition (N)) then
+          Access_Subprogram_Declaration
+            (T_Name => Anon_Type,
+             T_Def  => Access_To_Subprogram_Definition (N));
+ 
+          if Ekind (Anon_Type) = E_Access_Protected_Subprogram_Type then
+             Set_Ekind
+               (Anon_Type, E_Anonymous_Access_Protected_Subprogram_Type);
+          else
+             Set_Ekind
+               (Anon_Type, E_Anonymous_Access_Subprogram_Type);
+          end if;
+ 
+          return Anon_Type;
+       end if;
+ 
        Find_Type (Subtype_Mark (N));
        Desig_Type := Entity (Subtype_Mark (N));
  
*************** package body Sem_Ch3 is
*** 685,708 ****
        Init_Size_Align        (Anon_Type);
        Set_Depends_On_Private (Anon_Type, Has_Private_Component (Anon_Type));
  
        --  The anonymous access type is as public as the discriminated type or
        --  subprogram that defines it. It is imported (for back-end purposes)
        --  if the designated type is.
  
!       Set_Is_Public          (Anon_Type, Is_Public (Scope (Anon_Type)));
  
!       --  Ada0Y (AI-50217): Propagate the attribute that indicates that the
        --  designated type comes from the limited view (for back-end purposes).
  
!       Set_From_With_Type     (Anon_Type, From_With_Type (Desig_Type));
  
        --  The context is either a subprogram declaration or an access
!       --  discriminant, in a private or a full type declaration. In
!       --  the case of a subprogram, If the designated type is incomplete,
!       --  the operation will be a primitive operation of the full type, to
!       --  be updated subsequently.
  
        if Ekind (Desig_Type) = E_Incomplete_Type
          and then Is_Overloadable (Current_Scope)
        then
           Append_Elmt (Current_Scope, Private_Dependents (Desig_Type));
--- 705,746 ----
        Init_Size_Align        (Anon_Type);
        Set_Depends_On_Private (Anon_Type, Has_Private_Component (Anon_Type));
  
+       --  Ada 2005 (AI-231): Ada 2005 semantics for anonymous access differs
+       --  from Ada 95 semantics. In Ada 2005, anonymous access must specify
+       --  if the null value is allowed. In Ada 95 the null value is never
+       --  allowed.
+ 
+       if Ada_Version >= Ada_05 then
+          Set_Can_Never_Be_Null (Anon_Type, Null_Exclusion_Present (N));
+       else
+          Set_Can_Never_Be_Null (Anon_Type, True);
+       end if;
+ 
        --  The anonymous access type is as public as the discriminated type or
        --  subprogram that defines it. It is imported (for back-end purposes)
        --  if the designated type is.
  
!       Set_Is_Public (Anon_Type, Is_Public (Scope (Anon_Type)));
  
!       --  Ada 2005 (AI-50217): Propagate the attribute that indicates that the
        --  designated type comes from the limited view (for back-end purposes).
  
!       Set_From_With_Type (Anon_Type, From_With_Type (Desig_Type));
! 
!       --  Ada 2005 (AI-231): Propagate the access-constant attribute
! 
!       Set_Is_Access_Constant (Anon_Type, Constant_Present (N));
  
        --  The context is either a subprogram declaration or an access
!       --  discriminant, in a private or a full type declaration. In the case
!       --  of a subprogram, If the designated type is incomplete, the operation
!       --  will be a primitive operation of the full type, to be updated
!       --  subsequently. If the type is imported through a limited with clause,
!       --  it is not a primitive operation of the type (which is declared
!       --  elsewhere in some other scope).
  
        if Ekind (Desig_Type) = E_Incomplete_Type
+         and then not From_With_Type (Desig_Type)
          and then Is_Overloadable (Current_Scope)
        then
           Append_Elmt (Current_Scope, Private_Dependents (Desig_Type));
*************** package body Sem_Ch3 is
*** 720,730 ****
       (T_Name : Entity_Id;
        T_Def  : Node_Id)
     is
!       Formals : constant List_Id   := Parameter_Specifications (T_Def);
        Formal  : Entity_Id;
  
        Desig_Type : constant Entity_Id :=
!                    Create_Itype (E_Subprogram_Type, Parent (T_Def));
  
     begin
        if Nkind (T_Def) = N_Access_Function_Definition then
--- 758,768 ----
       (T_Name : Entity_Id;
        T_Def  : Node_Id)
     is
!       Formals : constant List_Id := Parameter_Specifications (T_Def);
        Formal  : Entity_Id;
  
        Desig_Type : constant Entity_Id :=
!                      Create_Itype (E_Subprogram_Type, Parent (T_Def));
  
     begin
        if Nkind (T_Def) = N_Access_Function_Definition then
*************** package body Sem_Ch3 is
*** 745,754 ****
           Process_Formals (Formals, Parent (T_Def));
  
           --  A bit of a kludge here, End_Scope requires that the parent
!          --  pointer be set to something reasonable, but Itypes don't
!          --  have parent pointers. So we set it and then unset it ???
!          --  If and when Itypes have proper parent pointers to their
!          --  declarations, this kludge can be removed.
  
           Set_Parent (Desig_Type, T_Name);
           End_Scope;
--- 783,792 ----
           Process_Formals (Formals, Parent (T_Def));
  
           --  A bit of a kludge here, End_Scope requires that the parent
!          --  pointer be set to something reasonable, but Itypes don't have
!          --  parent pointers. So we set it and then unset it ??? If and when
!          --  Itypes have proper parent pointers to their declarations, this
!          --  kludge can be removed.
  
           Set_Parent (Desig_Type, T_Name);
           End_Scope;
*************** package body Sem_Ch3 is
*** 763,769 ****
           Formal := First_Formal (Desig_Type);
  
           while Present (Formal) loop
- 
              if Ekind (Formal) /= E_In_Parameter
                and then Nkind (T_Def) = N_Access_Function_Definition
              then
--- 801,806 ----
*************** package body Sem_Ch3 is
*** 799,804 ****
--- 836,845 ----
        Init_Size_Align              (T_Name);
        Set_Directly_Designated_Type (T_Name, Desig_Type);
  
+       --  Ada 2005 (AI-231): Propagate the null-excluding attribute
+ 
+       Set_Can_Never_Be_Null (T_Name, Null_Exclusion_Present (T_Def));
+ 
        Check_Restriction (No_Access_Subprograms, T_Def);
     end Access_Subprogram_Declaration;
  
*************** package body Sem_Ch3 is
*** 813,821 ****
        Desig : Entity_Id;
        --  Designated type
  
-       N_Desig : Entity_Id;
-       --  Non-limited view, when needed
- 
     begin
        --  Check for permissible use of incomplete type
  
--- 854,859 ----
*************** package body Sem_Ch3 is
*** 861,890 ****
        --  access type is also imported, and therefore restricted in its use.
        --  The access type may already be imported, so keep setting otherwise.
  
!       --  Ada0Y (AI-50217): If the non-limited view of the designated type is
!       --  available, use it as the designated type of the access type, so that
!       --  the back-end gets a usable entity.
  
!       if From_With_Type (Desig) then
!          Set_From_With_Type (T);
  
!          if Ekind (Desig) = E_Incomplete_Type then
!             N_Desig := Non_Limited_View (Desig);
  
!          elsif Ekind (Desig) = E_Class_Wide_Type then
!             if From_With_Type (Etype (Desig)) then
!                N_Desig := Non_Limited_View (Etype (Desig));
!             else
!                N_Desig := Etype (Desig);
              end if;
-          else
-             null;
-             pragma Assert (False);
-          end if;
  
!          pragma Assert (Present (N_Desig));
!          Set_Directly_Designated_Type (T, N_Desig);
!       end if;
  
        --  Note that Has_Task is always false, since the access type itself
        --  is not a task type. See Einfo for more description on this point.
--- 899,930 ----
        --  access type is also imported, and therefore restricted in its use.
        --  The access type may already be imported, so keep setting otherwise.
  
!       --  Ada 2005 (AI-50217): If the non-limited view of the designated type
!       --  is available, use it as the designated type of the access type, so
!       --  that the back-end gets a usable entity.
  
!       declare
!          N_Desig : Entity_Id;
  
!       begin
!          if From_With_Type (Desig) then
!             Set_From_With_Type (T);
  
!             if Ekind (Desig) = E_Incomplete_Type then
!                N_Desig := Non_Limited_View (Desig);
! 
!             else pragma Assert (Ekind (Desig) = E_Class_Wide_Type);
!                if From_With_Type (Etype (Desig)) then
!                   N_Desig := Non_Limited_View (Etype (Desig));
!                else
!                   N_Desig := Etype (Desig);
!                end if;
              end if;
  
!             pragma Assert (Present (N_Desig));
!             Set_Directly_Designated_Type (T, N_Desig);
!          end if;
!       end;
  
        --  Note that Has_Task is always false, since the access type itself
        --  is not a task type. See Einfo for more description on this point.
*************** package body Sem_Ch3 is
*** 892,897 ****
--- 932,943 ----
  
        Set_Has_Task (T, False);
        Set_Has_Controlled_Component (T, False);
+ 
+       --  Ada 2005 (AI-231): Propagate the null-excluding and access-constant
+       --  attributes
+ 
+       Set_Can_Never_Be_Null  (T, Null_Exclusion_Present (Def));
+       Set_Is_Access_Constant (T, Constant_Present (Def));
     end Access_Type_Declaration;
  
     -----------------------------------
*************** package body Sem_Ch3 is
*** 903,913 ****
        T  : Entity_Id;
        P  : Entity_Id;
  
     begin
        Generate_Definition (Id);
        Enter_Name (Id);
!       T := Find_Type_Of_Object (Subtype_Indication (Component_Definition (N)),
!                                 N);
  
        --  If the subtype is a constrained subtype of the enclosing record,
        --  (which must have a partial view) the back-end does not handle
--- 949,1046 ----
        T  : Entity_Id;
        P  : Entity_Id;
  
+       function Contains_POC (Constr : Node_Id) return Boolean;
+       --  Determines whether a constraint uses the discriminant of a record
+       --  type thus becoming a per-object constraint (POC).
+ 
+       ------------------
+       -- Contains_POC --
+       ------------------
+ 
+       function Contains_POC (Constr : Node_Id) return Boolean is
+       begin
+          case Nkind (Constr) is
+             when N_Attribute_Reference =>
+                return Attribute_Name (Constr) = Name_Access
+                         and
+                       Prefix (Constr) = Scope (Entity (Prefix (Constr)));
+ 
+             when N_Discriminant_Association =>
+                return Denotes_Discriminant (Expression (Constr));
+ 
+             when N_Identifier =>
+                return Denotes_Discriminant (Constr);
+ 
+             when N_Index_Or_Discriminant_Constraint =>
+                declare
+                   IDC : Node_Id := First (Constraints (Constr));
+ 
+                begin
+                   while Present (IDC) loop
+ 
+                      --  One per-object constraint is sufficent
+ 
+                      if Contains_POC (IDC) then
+                         return True;
+                      end if;
+ 
+                      Next (IDC);
+                   end loop;
+ 
+                   return False;
+                end;
+ 
+             when N_Range =>
+                return Denotes_Discriminant (Low_Bound (Constr))
+                         or else
+                       Denotes_Discriminant (High_Bound (Constr));
+ 
+             when N_Range_Constraint =>
+                return Denotes_Discriminant (Range_Expression (Constr));
+ 
+             when others =>
+                return False;
+ 
+          end case;
+       end Contains_POC;
+ 
+    --  Start of processing for Analyze_Component_Declaration
+ 
     begin
        Generate_Definition (Id);
        Enter_Name (Id);
! 
!       if Present (Subtype_Indication (Component_Definition (N))) then
!          T := Find_Type_Of_Object
!                 (Subtype_Indication (Component_Definition (N)), N);
! 
!       --  Ada 2005 (AI-230): Access Definition case
! 
!       else
!          pragma Assert (Present
!                           (Access_Definition (Component_Definition (N))));
! 
!          T := Access_Definition
!                 (Related_Nod => N,
!                  N => Access_Definition (Component_Definition (N)));
! 
!          --  Ada 2005 (AI-230): In case of components that are anonymous
!          --  access types the level of accessibility depends on the enclosing
!          --  type declaration
! 
!          Set_Scope (T, Current_Scope); -- Ada 2005 (AI-230)
! 
!          --  Ada 2005 (AI-254)
! 
!          if Present (Access_To_Subprogram_Definition
!                       (Access_Definition (Component_Definition (N))))
!            and then Protected_Present (Access_To_Subprogram_Definition
!                                         (Access_Definition
!                                           (Component_Definition (N))))
!          then
!             T := Replace_Anonymous_Access_To_Protected_Subprogram (N, T);
!          end if;
!       end if;
  
        --  If the subtype is a constrained subtype of the enclosing record,
        --  (which must have a partial view) the back-end does not handle
*************** package body Sem_Ch3 is
*** 944,952 ****
        --  and thus unconstrained. Regular components must be constrained.
  
        if Is_Indefinite_Subtype (T) and then Chars (Id) /= Name_uParent then
!          Error_Msg_N
!            ("unconstrained subtype in component declaration",
!             Subtype_Indication (Component_Definition (N)));
  
        --  Components cannot be abstract, except for the special case of
        --  the _Parent field (case of extending an abstract tagged type)
--- 1077,1092 ----
        --  and thus unconstrained. Regular components must be constrained.
  
        if Is_Indefinite_Subtype (T) and then Chars (Id) /= Name_uParent then
!          if Is_Class_Wide_Type (T) then
!             Error_Msg_N
!                ("class-wide subtype with unknown discriminants" &
!                  " in component declaration",
!                  Subtype_Indication (Component_Definition (N)));
!          else
!             Error_Msg_N
!               ("unconstrained subtype in component declaration",
!                Subtype_Indication (Component_Definition (N)));
!          end if;
  
        --  Components cannot be abstract, except for the special case of
        --  the _Parent field (case of extending an abstract tagged type)
*************** package body Sem_Ch3 is
*** 958,963 ****
--- 1098,1132 ----
        Set_Etype (Id, T);
        Set_Is_Aliased (Id, Aliased_Present (Component_Definition (N)));
  
+       --  The component declaration may have a per-object constraint, set
+       --  the appropriate flag in the defining identifier of the subtype.
+ 
+       if Present (Subtype_Indication (Component_Definition (N))) then
+          declare
+             Sindic : constant Node_Id :=
+                        Subtype_Indication (Component_Definition (N));
+ 
+          begin
+             if Nkind (Sindic) = N_Subtype_Indication
+               and then Present (Constraint (Sindic))
+               and then Contains_POC (Constraint (Sindic))
+             then
+                Set_Has_Per_Object_Constraint (Id);
+             end if;
+          end;
+       end if;
+ 
+       --  Ada 2005 (AI-231): Propagate the null-excluding attribute and carry
+       --  out some static checks.
+ 
+       if Ada_Version >= Ada_05
+         and then (Null_Exclusion_Present (Component_Definition (N))
+                     or else Can_Never_Be_Null (T))
+       then
+          Set_Can_Never_Be_Null (Id);
+          Null_Exclusion_Static_Checks (N);
+       end if;
+ 
        --  If this component is private (or depends on a private type),
        --  flag the record type to indicate that some operations are not
        --  available.
*************** package body Sem_Ch3 is
*** 965,971 ****
        P := Private_Component (T);
  
        if Present (P) then
!          --  Check for circular definitions.
  
           if P = Any_Type then
              Set_Etype (Id, Any_Type);
--- 1134,1140 ----
        P := Private_Component (T);
  
        if Present (P) then
!          --  Check for circular definitions
  
           if P = Any_Type then
              Set_Etype (Id, Any_Type);
*************** package body Sem_Ch3 is
*** 1057,1070 ****
           end if;
  
           --  At the end of a declarative part, freeze remaining entities
!          --  declared in it. The end of the visible declarations of a
!          --  package specification is not the end of a declarative part
!          --  if private declarations are present. The end of a package
!          --  declaration is a freezing point only if it a library package.
!          --  A task definition or protected type definition is not a freeze
!          --  point either. Finally, we do not freeze entities in generic
!          --  scopes, because there is no code generated for them and freeze
!          --  nodes will be generated for the instance.
  
           --  The end of a package instantiation is not a freeze point, but
           --  for now we make it one, because the generic body is inserted
--- 1226,1239 ----
           end if;
  
           --  At the end of a declarative part, freeze remaining entities
!          --  declared in it. The end of the visible declarations of package
!          --  specification is not the end of a declarative part if private
!          --  declarations are present. The end of a package declaration is a
!          --  freezing point only if it a library package. A task definition or
!          --  protected type definition is not a freeze point either. Finally,
!          --  we do not freeze entities in generic scopes, because there is no
!          --  code generated for them and freeze nodes will be generated for
!          --  the instance.
  
           --  The end of a package instantiation is not a freeze point, but
           --  for now we make it one, because the generic body is inserted
*************** package body Sem_Ch3 is
*** 1143,1149 ****
        --  appear in the private part of a package, for a private type that has
        --  already been declared.
  
!       --  In this case, the discriminants (if any) must match.
  
        T := Find_Type_Name (N);
  
--- 1312,1318 ----
        --  appear in the private part of a package, for a private type that has
        --  already been declared.
  
!       --  In this case, the discriminants (if any) must match
  
        T := Find_Type_Name (N);
  
*************** package body Sem_Ch3 is
*** 1161,1169 ****
  
        End_Scope;
  
!       --  If the type has discriminants, non-trivial subtypes may be
!       --  be declared before the full view of the type. The full views
!       --  of those subtypes will be built after the full view of the type.
  
        Set_Private_Dependents (T, New_Elmt_List);
        Set_Is_Pure (T, F);
--- 1330,1338 ----
  
        End_Scope;
  
!       --  If the type has discriminants, non-trivial subtypes may be be
!       --  declared before the full view of the type. The full views of those
!       --  subtypes will be built after the full view of the type.
  
        Set_Private_Dependents (T, New_Elmt_List);
        Set_Is_Pure (T, F);
*************** package body Sem_Ch3 is
*** 1246,1252 ****
                 elsif It.Typ = Universal_Real
                   or else It.Typ = Universal_Integer
                 then
!                   --  Choose universal interpretation over any other.
  
                    T := It.Typ;
                    exit;
--- 1415,1421 ----
                 elsif It.Typ = Universal_Real
                   or else It.Typ = Universal_Integer
                 then
!                   --  Choose universal interpretation over any other
  
                    T := It.Typ;
                    exit;
*************** package body Sem_Ch3 is
*** 1341,1346 ****
--- 1510,1523 ----
        --  the subtype of the object is constrained by the defaults, so it is
        --  worthile building the corresponding subtype.
  
+       function Count_Tasks (T : Entity_Id) return Uint;
+       --  This function is called when a library level object of type is
+       --  declared. It's function is to count the static number of tasks
+       --  declared within the type (it is only called if Has_Tasks is set for
+       --  T). As a side effect, if an array of tasks with non-static bounds or
+       --  a variant record type is encountered, Check_Restrictions is called
+       --  indicating the count is unknown.
+ 
        ---------------------------
        -- Build_Default_Subtype --
        ---------------------------
*************** package body Sem_Ch3 is
*** 1381,1386 ****
--- 1558,1617 ----
           return Act;
        end Build_Default_Subtype;
  
+       -----------------
+       -- Count_Tasks --
+       -----------------
+ 
+       function Count_Tasks (T : Entity_Id) return Uint is
+          C : Entity_Id;
+          X : Node_Id;
+          V : Uint;
+ 
+       begin
+          if Is_Task_Type (T) then
+             return Uint_1;
+ 
+          elsif Is_Record_Type (T) then
+             if Has_Discriminants (T) then
+                Check_Restriction (Max_Tasks, N);
+                return Uint_0;
+ 
+             else
+                V := Uint_0;
+                C := First_Component (T);
+                while Present (C) loop
+                   V := V + Count_Tasks (Etype (C));
+                   Next_Component (C);
+                end loop;
+ 
+                return V;
+             end if;
+ 
+          elsif Is_Array_Type (T) then
+             X := First_Index (T);
+             V := Count_Tasks (Component_Type (T));
+             while Present (X) loop
+                C := Etype (X);
+ 
+                if not Is_Static_Subtype (C) then
+                   Check_Restriction (Max_Tasks, N);
+                   return Uint_0;
+                else
+                   V := V * (UI_Max (Uint_0,
+                                     Expr_Value (Type_High_Bound (C)) -
+                                     Expr_Value (Type_Low_Bound (C)) + Uint_1));
+                end if;
+ 
+                Next_Index (X);
+             end loop;
+ 
+             return V;
+ 
+          else
+             return Uint_0;
+          end if;
+       end Count_Tasks;
+ 
     --  Start of processing for Analyze_Object_Declaration
  
     begin
*************** package body Sem_Ch3 is
*** 1419,1424 ****
--- 1650,1656 ----
           Set_Completion_Referenced (Id);
  
           if Error_Posted (N) then
+ 
              --  Type mismatch or illegal redeclaration, Do not analyze
              --  expression to avoid cascaded errors.
  
*************** package body Sem_Ch3 is
*** 1444,1449 ****
--- 1676,1692 ----
           end if;
        end if;
  
+       --  Ada 2005 (AI-231): Propagate the null-excluding attribute and carry
+       --  out some static checks
+ 
+       if Ada_Version >= Ada_05
+         and then (Null_Exclusion_Present (N)
+                     or else Can_Never_Be_Null (T))
+       then
+          Set_Can_Never_Be_Null (Id);
+          Null_Exclusion_Static_Checks (N);
+       end if;
+ 
        Set_Is_Pure (Id, Is_Pure (Current_Scope));
  
        --  If deferred constant, make sure context is appropriate. We detect
*************** package body Sem_Ch3 is
*** 1466,1472 ****
           --  In Ada 83, deferred constant must be of private type
  
           elsif not Is_Private_Type (T) then
!             if Ada_83 and then Comes_From_Source (N) then
                 Error_Msg_N
                   ("(Ada 83) deferred constant must be private type", N);
              end if;
--- 1709,1715 ----
           --  In Ada 83, deferred constant must be of private type
  
           elsif not Is_Private_Type (T) then
!             if Ada_Version = Ada_83 and then Comes_From_Source (N) then
                 Error_Msg_N
                   ("(Ada 83) deferred constant must be private type", N);
              end if;
*************** package body Sem_Ch3 is
*** 1515,1531 ****
        if Present (E) and then E /= Error then
           Analyze (E);
  
           --  If an initialization expression is present, then we set the
           --  Is_True_Constant flag. It will be reset if this is a variable
           --  and it is indeed modified.
  
           Set_Is_True_Constant (Id, True);
  
           if not Assignment_OK (N) then
              Check_Initialization (T, E);
           end if;
  
!          Set_Etype (Id, T);             --  may be overridden later on.
           Resolve (E, T);
           Check_Unset_Reference (E);
  
--- 1758,1788 ----
        if Present (E) and then E /= Error then
           Analyze (E);
  
+          --  In case of errors detected in the analysis of the expression,
+          --  decorate it with the expected type to avoid cascade errors
+ 
+          if not Present (Etype (E)) then
+             Set_Etype (E, T);
+          end if;
+ 
           --  If an initialization expression is present, then we set the
           --  Is_True_Constant flag. It will be reset if this is a variable
           --  and it is indeed modified.
  
           Set_Is_True_Constant (Id, True);
  
+          --  If we are analyzing a constant declaration, set its completion
+          --  flag after analyzing the expression.
+ 
+          if Constant_Present (N) then
+             Set_Has_Completion (Id);
+          end if;
+ 
           if not Assignment_OK (N) then
              Check_Initialization (T, E);
           end if;
  
!          Set_Etype (Id, T);             --  may be overridden later on
           Resolve (E, T);
           Check_Unset_Reference (E);
  
*************** package body Sem_Ch3 is
*** 1549,1554 ****
--- 1806,1823 ----
           Apply_Static_Length_Check (E, T);
        end if;
  
+       --  If the No_Streams restriction is set, check that the type of the
+       --  object is not, and does not contain, any subtype derived from
+       --  Ada.Streams.Root_Stream_Type. Note that we guard the call to
+       --  Has_Stream just for efficiency reasons. There is no point in
+       --  spending time on a Has_Stream check if the restriction is not set.
+ 
+       if Restrictions.Set (No_Streams) then
+          if Has_Stream (T) then
+             Check_Restriction (No_Streams, N);
+          end if;
+       end if;
+ 
        --  Abstract type is never permitted for a variable or constant.
        --  Note: we inhibit this check for objects that do not come from
        --  source because there is at least one case (the expansion of
*************** package body Sem_Ch3 is
*** 1557,1563 ****
  
        if Is_Abstract (T) and then Comes_From_Source (N) then
           Error_Msg_N ("type of object cannot be abstract",
!            Object_Definition (N));
           if Is_CPP_Class (T) then
              Error_Msg_NE ("\} may need a cpp_constructor",
                Object_Definition (N), T);
--- 1826,1833 ----
  
        if Is_Abstract (T) and then Comes_From_Source (N) then
           Error_Msg_N ("type of object cannot be abstract",
!                       Object_Definition (N));
! 
           if Is_CPP_Class (T) then
              Error_Msg_NE ("\} may need a cpp_constructor",
                Object_Definition (N), T);
*************** package body Sem_Ch3 is
*** 1601,1607 ****
              --  Not allowed in Ada 83
  
              if not Constant_Present (N) then
!                if Ada_83
                   and then Comes_From_Source (Object_Definition (N))
                 then
                    Error_Msg_N
--- 1871,1877 ----
              --  Not allowed in Ada 83
  
              if not Constant_Present (N) then
!                if Ada_Version = Ada_83
                   and then Comes_From_Source (Object_Definition (N))
                 then
                    Error_Msg_N
*************** package body Sem_Ch3 is
*** 1700,1707 ****
           Remove_Side_Effects (E);
        end if;
  
!       if T = Standard_Wide_Character
          or else Root_Type (T) = Standard_Wide_String
        then
           Check_Restriction (No_Wide_Characters, Object_Definition (N));
        end if;
--- 1970,1978 ----
           Remove_Side_Effects (E);
        end if;
  
!       if T = Standard_Wide_Character or else T = Standard_Wide_Wide_Character
          or else Root_Type (T) = Standard_Wide_String
+         or else Root_Type (T) = Standard_Wide_Wide_String
        then
           Check_Restriction (No_Wide_Characters, Object_Definition (N));
        end if;
*************** package body Sem_Ch3 is
*** 1771,1777 ****
        then
           if not Is_Library_Level_Entity (Id) then
              Check_Restriction (No_Nested_Finalization, N);
- 
           else
              Validate_Controlled_Object (Id);
           end if;
--- 2042,2047 ----
*************** package body Sem_Ch3 is
*** 1851,1859 ****
        end if;
  
        if Has_Task (Etype (Id)) then
!          Check_Restriction (Max_Tasks, N);
  
!          if not Is_Library_Level_Entity (Id) then
              Check_Restriction (No_Task_Hierarchy, N);
              Check_Potentially_Blocking_Operation (N);
           end if;
--- 2121,2132 ----
        end if;
  
        if Has_Task (Etype (Id)) then
!          Check_Restriction (No_Tasking, N);
  
!          if Is_Library_Level_Entity (Id) then
!             Check_Restriction (Max_Tasks, N, Count_Tasks (Etype (Id)));
!          else
!             Check_Restriction (Max_Tasks, N);
              Check_Restriction (No_Task_Hierarchy, N);
              Check_Potentially_Blocking_Operation (N);
           end if;
*************** package body Sem_Ch3 is
*** 1864,1872 ****
           --  will be raised at run-time since we can't have two tasks with
           --  entries at the same address.
  
!          if Is_Task_Type (Etype (Id))
!            and then More_Ids (N)
!          then
              declare
                 E : Entity_Id;
  
--- 2137,2143 ----
           --  will be raised at run-time since we can't have two tasks with
           --  entries at the same address.
  
!          if Is_Task_Type (Etype (Id)) and then More_Ids (N) then
              declare
                 E : Entity_Id;
  
*************** package body Sem_Ch3 is
*** 1904,1910 ****
        then
           declare
              Val : constant Node_Id := Constant_Value (Entity (E));
- 
           begin
              if Present (Val)
                and then Nkind (Val) = N_String_Literal
--- 2175,2180 ----
*************** package body Sem_Ch3 is
*** 1935,1940 ****
--- 2205,2211 ----
           Rewrite (N,
             Make_Object_Renaming_Declaration (Loc,
               Defining_Identifier => Id,
+              Access_Definition   => Empty,
               Subtype_Mark        => New_Occurrence_Of
                                        (Base_Type (Etype (Id)), Loc),
               Name                => E));
*************** package body Sem_Ch3 is
*** 1967,1973 ****
  
     procedure Analyze_Others_Choice (N : Node_Id) is
        pragma Warnings (Off, N);
- 
     begin
        null;
     end Analyze_Others_Choice;
--- 2238,2243 ----
*************** package body Sem_Ch3 is
*** 1978,1984 ****
  
     procedure Analyze_Per_Use_Expression (N : Node_Id; T : Entity_Id) is
        Save_In_Default_Expression : constant Boolean := In_Default_Expression;
- 
     begin
        In_Default_Expression := True;
        Pre_Analyze_And_Resolve (N, T);
--- 2248,2253 ----
*************** package body Sem_Ch3 is
*** 2053,2058 ****
--- 2322,2331 ----
        Set_Is_First_Subtype (T);
        Make_Class_Wide_Type (T);
  
+       if Unknown_Discriminants_Present (N) then
+          Set_Discriminant_Constraint (T, No_Elist);
+       end if;
+ 
        Build_Derived_Record_Type (N, Parent_Type, T);
     end Analyze_Private_Extension_Declaration;
  
*************** package body Sem_Ch3 is
*** 2074,2090 ****
        --  where the defining identifier has already been entered into the
        --  scope but the declaration as a whole needs to be analyzed.
  
!       --  This case in particular happens for derived enumeration types.
!       --  The derived enumeration type is processed as an inserted enumeration
        --  type declaration followed by a rewritten subtype declaration. The
        --  defining identifier, however, is entered into the name scope very
        --  early in the processing of the original type declaration and
        --  therefore needs to be avoided here, when the created subtype
        --  declaration is analyzed. (See Build_Derived_Types)
  
!       --  This also happens when the full view of a private type is a
!       --  derived type with constraints. In this case the entity has been
!       --  introduced in the private declaration.
  
        if Present (Etype (Id))
          and then (Is_Private_Type (Etype (Id))
--- 2347,2363 ----
        --  where the defining identifier has already been entered into the
        --  scope but the declaration as a whole needs to be analyzed.
  
!       --  This case in particular happens for derived enumeration types. The
!       --  derived enumeration type is processed as an inserted enumeration
        --  type declaration followed by a rewritten subtype declaration. The
        --  defining identifier, however, is entered into the name scope very
        --  early in the processing of the original type declaration and
        --  therefore needs to be avoided here, when the created subtype
        --  declaration is analyzed. (See Build_Derived_Types)
  
!       --  This also happens when the full view of a private type is derived
!       --  type with constraints. In this case the entity has been introduced
!       --  in the private declaration.
  
        if Present (Etype (Id))
          and then (Is_Private_Type (Etype (Id))
*************** package body Sem_Ch3 is
*** 2115,2127 ****
  
           case Ekind (T) is
              when Array_Kind =>
!                Set_Ekind                (Id, E_Array_Subtype);
! 
!                --  Shouldn't we call Copy_Array_Subtype_Attributes here???
! 
!                Set_First_Index          (Id, First_Index        (T));
!                Set_Is_Aliased           (Id, Is_Aliased         (T));
!                Set_Is_Constrained       (Id, Is_Constrained     (T));
  
              when Decimal_Fixed_Point_Kind =>
                 Set_Ekind                (Id, E_Decimal_Fixed_Point_Subtype);
--- 2388,2395 ----
  
           case Ekind (T) is
              when Array_Kind =>
!                Set_Ekind                       (Id, E_Array_Subtype);
!                Copy_Array_Subtype_Attributes   (Id, T);
  
              when Decimal_Fixed_Point_Kind =>
                 Set_Ekind                (Id, E_Decimal_Fixed_Point_Subtype);
*************** package body Sem_Ch3 is
*** 2271,2276 ****
--- 2539,2561 ----
                 Set_Directly_Designated_Type
                                       (Id, Designated_Type       (T));
  
+                --  Ada 2005 (AI-231): Propagate the null-excluding attribute
+                --  and carry out some static checks
+ 
+                if Null_Exclusion_Present (N)
+                  or else Can_Never_Be_Null (T)
+                then
+                   Set_Can_Never_Be_Null (Id);
+ 
+                   if Null_Exclusion_Present (N)
+                     and then Can_Never_Be_Null (T)
+                   then
+                      Error_Msg_N
+                        ("(Ada 2005) null exclusion not allowed if parent "
+                         & "is already non-null", Subtype_Indication (N));
+                   end if;
+                end if;
+ 
                 --  A Pure library_item must not contain the declaration of a
                 --  named access type, except within a subprogram, generic
                 --  subprogram, task unit, or protected unit (RM 10.2.1(16)).
*************** package body Sem_Ch3 is
*** 2456,2464 ****
  
        --  The full view, if present, now points to the current type
  
!       --  Ada0Y (AI-50217): If the type was previously decorated when imported
!       --  through a LIMITED WITH clause, it appears as incomplete but has no
!       --  full view.
  
        if Ekind (Prev) = E_Incomplete_Type
          and then Present (Full_View (Prev))
--- 2741,2749 ----
  
        --  The full view, if present, now points to the current type
  
!       --  Ada 2005 (AI-50217): If the type was previously decorated when
!       --  imported through a LIMITED WITH clause, it appears as incomplete
!       --  but has no full view.
  
        if Ekind (Prev) = E_Incomplete_Type
          and then Present (Full_View (Prev))
*************** package body Sem_Ch3 is
*** 2487,2493 ****
           when N_Derived_Type_Definition =>
              null;
  
!          --  For record types, discriminants are allowed.
  
           when N_Record_Definition =>
              null;
--- 2772,2778 ----
           when N_Derived_Type_Definition =>
              null;
  
!          --  For record types, discriminants are allowed
  
           when N_Record_Definition =>
              null;
*************** package body Sem_Ch3 is
*** 2543,2548 ****
--- 2828,2839 ----
                    Add_RACW_Features (Def_Id);
                 end if;
  
+                --  Set no strict aliasing flag if config pragma seen
+ 
+                if Opt.No_Strict_Aliasing then
+                   Set_No_Strict_Aliasing (Base_Type (Def_Id));
+                end if;
+ 
              when N_Array_Type_Definition =>
                 Array_Type_Declaration (T, Def);
  
*************** package body Sem_Ch3 is
*** 2592,2600 ****
  
        begin
           --  In the case where the base type is different from the first
!          --  subtype, we pre-allocate a freeze node, and set the proper
!          --  link to the first subtype. Freeze_Entity will use this
!          --  preallocated freeze node when it freezes the entity.
  
           if B /= T then
              Ensure_Freeze_Node (B);
--- 2883,2891 ----
  
        begin
           --  In the case where the base type is different from the first
!          --  subtype, we pre-allocate a freeze node, and set the proper link
!          --  to the first subtype. Freeze_Entity will use this preallocated
!          --  freeze node when it freezes the entity.
  
           if B /= T then
              Ensure_Freeze_Node (B);
*************** package body Sem_Ch3 is
*** 2662,2668 ****
             Process_Non_Static_Choice => Non_Static_Choice_Error,
             Process_Associated_Node   => Process_Declarations);
        use Variant_Choices_Processing;
!       --  Instantiation of the generic choice processing package.
  
        -----------------------------
        -- Non_Static_Choice_Error --
--- 2953,2959 ----
             Process_Non_Static_Choice => Non_Static_Choice_Error,
             Process_Associated_Node   => Process_Declarations);
        use Variant_Choices_Processing;
!       --  Instantiation of the generic choice processing package
  
        -----------------------------
        -- Non_Static_Choice_Error --
*************** package body Sem_Ch3 is
*** 2689,2695 ****
           end if;
        end Process_Declarations;
  
!       --  Variables local to Analyze_Case_Statement.
  
        Discr_Name : Node_Id;
        Discr_Type : Entity_Id;
--- 2980,2986 ----
           end if;
        end Process_Declarations;
  
!       --  Variables local to Analyze_Case_Statement
  
        Discr_Name : Node_Id;
        Discr_Type : Entity_Id;
*************** package body Sem_Ch3 is
*** 2740,2764 ****
  
     begin
        if Nkind (Def) = N_Constrained_Array_Definition then
- 
           Index := First (Discrete_Subtype_Definitions (Def));
  
!          --  Find proper names for the implicit types which may be public.
!          --  in case of anonymous arrays we use the name of the first object
!          --  of that type as prefix.
! 
!          if No (T) then
!             Related_Id :=  Defining_Identifier (P);
!          else
!             Related_Id := T;
!          end if;
  
        else
!          Index := First (Subtype_Marks (Def));
        end if;
  
        Nb_Index := 1;
- 
        while Present (Index) loop
           Analyze (Index);
           Make_Index (Index, P, Related_Id, Nb_Index);
--- 3031,3052 ----
  
     begin
        if Nkind (Def) = N_Constrained_Array_Definition then
           Index := First (Discrete_Subtype_Definitions (Def));
+       else
+          Index := First (Subtype_Marks (Def));
+       end if;
  
!       --  Find proper names for the implicit types which may be public.
!       --  in case of anonymous arrays we use the name of the first object
!       --  of that type as prefix.
  
+       if No (T) then
+          Related_Id :=  Defining_Identifier (P);
        else
!          Related_Id := T;
        end if;
  
        Nb_Index := 1;
        while Present (Index) loop
           Analyze (Index);
           Make_Index (Index, P, Related_Id, Nb_Index);
*************** package body Sem_Ch3 is
*** 2766,2773 ****
           Nb_Index := Nb_Index + 1;
        end loop;
  
!       Element_Type := Process_Subtype (Subtype_Indication (Component_Def),
!                                        P, Related_Id, 'C');
  
        --  Constrained array case
  
--- 3054,3090 ----
           Nb_Index := Nb_Index + 1;
        end loop;
  
!       if Present (Subtype_Indication (Component_Def)) then
!          Element_Type := Process_Subtype (Subtype_Indication (Component_Def),
!                                           P, Related_Id, 'C');
! 
!       --  Ada 2005 (AI-230): Access Definition case
! 
!       else pragma Assert (Present (Access_Definition (Component_Def)));
!          Element_Type := Access_Definition
!                            (Related_Nod => Related_Id,
!                             N           => Access_Definition (Component_Def));
! 
!          --  Ada 2005 (AI-230): In case of components that are anonymous
!          --  access types the level of accessibility depends on the enclosing
!          --  type declaration
! 
!          Set_Scope (Element_Type, Current_Scope); -- Ada 2005 (AI-230)
! 
!          --  Ada 2005 (AI-254)
! 
!          declare
!             CD : constant Node_Id :=
!                    Access_To_Subprogram_Definition
!                      (Access_Definition (Component_Def));
!          begin
!             if Present (CD) and then Protected_Present (CD) then
!                Element_Type :=
!                  Replace_Anonymous_Access_To_Protected_Subprogram
!                    (Def, Element_Type);
!             end if;
!          end;
!       end if;
  
        --  Constrained array case
  
*************** package body Sem_Ch3 is
*** 2837,2842 ****
--- 3154,3177 ----
           Set_Has_Aliased_Components (Etype (T));
        end if;
  
+       --  Ada 2005 (AI-231): Propagate the null-excluding attribute to the
+       --  array to ensure that objects of this type are initialized.
+ 
+       if Ada_Version >= Ada_05
+         and then (Null_Exclusion_Present (Component_Definition (Def))
+                     or else Can_Never_Be_Null (Element_Type))
+       then
+          Set_Can_Never_Be_Null (T);
+ 
+          if Null_Exclusion_Present (Component_Definition (Def))
+            and then Can_Never_Be_Null (Element_Type)
+          then
+             Error_Msg_N
+               ("(Ada 2005) already a null-excluding type",
+                Subtype_Indication (Component_Definition (Def)));
+          end if;
+       end if;
+ 
        Priv := Private_Component (Element_Type);
  
        if Present (Priv) then
*************** package body Sem_Ch3 is
*** 2888,2893 ****
--- 3223,3322 ----
  
     end Array_Type_Declaration;
  
+    ------------------------------------------------------
+    -- Replace_Anonymous_Access_To_Protected_Subprogram --
+    ------------------------------------------------------
+ 
+    function Replace_Anonymous_Access_To_Protected_Subprogram
+      (N      : Node_Id;
+       Prev_E : Entity_Id) return Entity_Id
+    is
+       Loc : constant Source_Ptr := Sloc (N);
+ 
+       Curr_Scope : constant Scope_Stack_Entry :=
+                      Scope_Stack.Table (Scope_Stack.Last);
+ 
+       Anon : constant Entity_Id :=
+                Make_Defining_Identifier (Loc,
+                  Chars => New_Internal_Name ('S'));
+ 
+       Acc  : Node_Id;
+       Comp : Node_Id;
+       Decl : Node_Id;
+       P    : Node_Id := Parent (N);
+ 
+    begin
+       Set_Is_Internal (Anon);
+ 
+       case Nkind (N) is
+          when N_Component_Declaration       |
+            N_Unconstrained_Array_Definition |
+            N_Constrained_Array_Definition   =>
+             Comp := Component_Definition (N);
+             Acc  := Access_Definition (Component_Definition (N));
+ 
+          when N_Discriminant_Specification =>
+             Comp := Discriminant_Type (N);
+             Acc  := Discriminant_Type (N);
+ 
+          when N_Parameter_Specification =>
+             Comp := Parameter_Type (N);
+             Acc  := Parameter_Type (N);
+ 
+          when others =>
+             raise Program_Error;
+       end case;
+ 
+       Decl := Make_Full_Type_Declaration (Loc,
+                 Defining_Identifier => Anon,
+                 Type_Definition   =>
+                   Copy_Separate_Tree (Access_To_Subprogram_Definition (Acc)));
+ 
+       Mark_Rewrite_Insertion (Decl);
+ 
+       --  Insert the new declaration in the nearest enclosing scope
+ 
+       while Present (P) and then not Has_Declarations (P) loop
+          P := Parent (P);
+       end loop;
+ 
+       pragma Assert (Present (P));
+ 
+       if Nkind (P) = N_Package_Specification then
+          Prepend (Decl, Visible_Declarations (P));
+       else
+          Prepend (Decl, Declarations (P));
+       end if;
+ 
+       --  Replace the anonymous type with an occurrence of the new declaration.
+       --  In all cases the rewriten node does not have the null-exclusion
+       --  attribute because (if present) it was already inherited by the
+       --  anonymous entity (Anon). Thus, in case of components we do not
+       --  inherit this attribute.
+ 
+       if Nkind (N) = N_Parameter_Specification then
+          Rewrite (Comp, New_Occurrence_Of (Anon, Loc));
+          Set_Etype (Defining_Identifier (N), Anon);
+          Set_Null_Exclusion_Present (N, False);
+       else
+          Rewrite (Comp,
+            Make_Component_Definition (Loc,
+              Subtype_Indication => New_Occurrence_Of (Anon, Loc)));
+       end if;
+ 
+       Mark_Rewrite_Insertion (Comp);
+ 
+       --  Temporarily remove the current scope from the stack to add the new
+       --  declarations to the enclosing scope
+ 
+       Scope_Stack.Decrement_Last;
+       Analyze (Decl);
+       Scope_Stack.Append (Curr_Scope);
+ 
+       Set_Original_Access_Type (Anon, Prev_E);
+       return Anon;
+    end Replace_Anonymous_Access_To_Protected_Subprogram;
+ 
     -------------------------------
     -- Build_Derived_Access_Type --
     -------------------------------
*************** package body Sem_Ch3 is
*** 2903,2910 ****
        Discr           : Entity_Id;
        Discr_Con_Elist : Elist_Id;
        Discr_Con_El    : Elmt_Id;
! 
!       Subt : Entity_Id;
  
     begin
        --  Set the designated type so it is available in case this is
--- 3332,3338 ----
        Discr           : Entity_Id;
        Discr_Con_Elist : Elist_Id;
        Discr_Con_El    : Elmt_Id;
!       Subt            : Entity_Id;
  
     begin
        --  Set the designated type so it is available in case this is
*************** package body Sem_Ch3 is
*** 2958,2963 ****
--- 3386,3399 ----
                                Has_Private_Component (Derived_Type));
        Conditional_Delay      (Derived_Type, Subt);
  
+       --  Ada 2005 (AI-231). Set the null-exclusion attribute
+ 
+       if Null_Exclusion_Present (Type_Definition (N))
+         or else Can_Never_Be_Null (Parent_Type)
+       then
+          Set_Can_Never_Be_Null (Derived_Type);
+       end if;
+ 
        --  Note: we do not copy the Storage_Size_Variable, since
        --  we always go to the root type for this information.
  
*************** package body Sem_Ch3 is
*** 3151,3157 ****
          (Derived_Type, Corresponding_Record_Type (Parent_Type));
  
        if Constraint_Present then
- 
           if not Has_Discriminants (Parent_Type) then
              Error_Msg_N ("untagged parent must have discriminants", N);
  
--- 3587,3592 ----
*************** package body Sem_Ch3 is
*** 3213,3221 ****
        end if;
  
        if Present (Discriminant_Specifications (N)) then
- 
           Old_Disc := First_Discriminant (Parent_Type);
- 
           while Present (Old_Disc) loop
  
              if No (Next_Entity (Old_Disc))
--- 3648,3654 ----
*************** package body Sem_Ch3 is
*** 3232,3237 ****
--- 3665,3671 ----
        else
           Set_First_Entity (Derived_Type, First_Entity (Parent_Type));
           if Has_Discriminants (Parent_Type) then
+             Set_Is_Constrained (Derived_Type, Is_Constrained (Parent_Type));
              Set_Discriminant_Constraint (
                Derived_Type, Discriminant_Constraint (Parent_Type));
           end if;
*************** package body Sem_Ch3 is
*** 3272,3277 ****
--- 3706,3712 ----
  
        if Root_Type (Parent_Type) = Standard_Character
          or else Root_Type (Parent_Type) = Standard_Wide_Character
+         or else Root_Type (Parent_Type) = Standard_Wide_Wide_Character
        then
           Derived_Standard_Character (N, Parent_Type, Derived_Type);
  
*************** package body Sem_Ch3 is
*** 3372,3381 ****
           Insert_Before (N, Type_Decl);
           Analyze (Type_Decl);
  
!          --  After the implicit base is analyzed its Etype needs to be
!          --  changed to reflect the fact that it is derived from the
!          --  parent type which was ignored during analysis. We also set
!          --  the size at this point.
  
           Set_Etype (Implicit_Base, Parent_Type);
  
--- 3807,3815 ----
           Insert_Before (N, Type_Decl);
           Analyze (Type_Decl);
  
!          --  After the implicit base is analyzed its Etype needs to be changed
!          --  to reflect the fact that it is derived from the parent type which
!          --  was ignored during analysis. We also set the size at this point.
  
           Set_Etype (Implicit_Base, Parent_Type);
  
*************** package body Sem_Ch3 is
*** 3393,3402 ****
           --  must be implicitly converted to the new type.
  
           if Nkind (Indic) = N_Subtype_Indication then
- 
              declare
!                R   : constant Node_Id :=
!                        Range_Expression (Constraint (Indic));
  
              begin
                 if Nkind (R) = N_Range then
--- 3827,3835 ----
           --  must be implicitly converted to the new type.
  
           if Nkind (Indic) = N_Subtype_Indication then
              declare
!                R : constant Node_Id :=
!                      Range_Expression (Constraint (Indic));
  
              begin
                 if Nkind (R) = N_Range then
*************** package body Sem_Ch3 is
*** 3407,3414 ****
  
                 else
                    --  Constraint is a Range attribute. Replace with the
!                   --  explicit mention of the bounds of the prefix, which
!                   --  must be a subtype.
  
                    Analyze (Prefix (R));
                    Hi :=
--- 3840,3847 ----
  
                 else
                    --  Constraint is a Range attribute. Replace with the
!                   --  explicit mention of the bounds of the prefix, which must
!                   --  be a subtype.
  
                    Analyze (Prefix (R));
                    Hi :=
*************** package body Sem_Ch3 is
*** 3425,3431 ****
                          Prefix =>
                            New_Occurrence_Of (Entity (Prefix (R)), Loc)));
                 end if;
- 
              end;
  
           else
--- 3858,3863 ----
*************** package body Sem_Ch3 is
*** 3466,3482 ****
  
           Analyze (N);
  
!          --  If pragma Discard_Names applies on the first subtype
!          --  of the parent type, then it must be applied on this
!          --  subtype as well.
  
           if Einfo.Discard_Names (First_Subtype (Parent_Type)) then
              Set_Discard_Names (Derived_Type);
           end if;
  
!          --  Apply a range check. Since this range expression doesn't
!          --  have an Etype, we have to specifically pass the Source_Typ
!          --  parameter. Is this right???
  
           if Nkind (Indic) = N_Subtype_Indication then
              Apply_Range_Check (Range_Expression (Constraint (Indic)),
--- 3898,3913 ----
  
           Analyze (N);
  
!          --  If pragma Discard_Names applies on the first subtype of the
!          --  parent type, then it must be applied on this subtype as well.
  
           if Einfo.Discard_Names (First_Subtype (Parent_Type)) then
              Set_Discard_Names (Derived_Type);
           end if;
  
!          --  Apply a range check. Since this range expression doesn't have an
!          --  Etype, we have to specifically pass the Source_Typ parameter. Is
!          --  this right???
  
           if Nkind (Indic) = N_Subtype_Indication then
              Apply_Range_Check (Range_Expression (Constraint (Indic)),
*************** package body Sem_Ch3 is
*** 3501,3507 ****
        Parent_Base   : constant Entity_Id  := Base_Type (Parent_Type);
        No_Constraint : constant Boolean    := Nkind (Indic) /=
                                                    N_Subtype_Indication;
!       Implicit_Base    : Entity_Id;
  
        Lo : Node_Id;
        Hi : Node_Id;
--- 3932,3938 ----
        Parent_Base   : constant Entity_Id  := Base_Type (Parent_Type);
        No_Constraint : constant Boolean    := Nkind (Indic) /=
                                                    N_Subtype_Indication;
!       Implicit_Base : Entity_Id;
  
        Lo : Node_Id;
        Hi : Node_Id;
*************** package body Sem_Ch3 is
*** 3512,3520 ****
  
        Discard_Node (Process_Subtype (Indic, N));
  
!       --  Introduce an implicit base type for the derived type even if
!       --  there is no constraint attached to it, since this seems closer
!       --  to the Ada semantics.
  
        Implicit_Base :=
          Create_Itype (Ekind (Parent_Base), N, Derived_Type, 'B');
--- 3943,3951 ----
  
        Discard_Node (Process_Subtype (Indic, N));
  
!       --  Introduce an implicit base type for the derived type even if there
!       --  is no constraint attached to it, since this seems closer to the Ada
!       --  semantics.
  
        Implicit_Base :=
          Create_Itype (Ekind (Parent_Base), N, Derived_Type, 'B');
*************** package body Sem_Ch3 is
*** 3544,3552 ****
           Set_Includes_Infinities (Scalar_Range (Implicit_Base));
        end if;
  
!       --  The Derived_Type, which is the entity of the declaration, is
!       --  a subtype of the implicit base. Its Ekind is a subtype, even
!       --  in the absence of an explicit constraint.
  
        Set_Etype (Derived_Type, Implicit_Base);
  
--- 3975,3983 ----
           Set_Includes_Infinities (Scalar_Range (Implicit_Base));
        end if;
  
!       --  The Derived_Type, which is the entity of the declaration, is a
!       --  subtype of the implicit base. Its Ekind is a subtype, even in the
!       --  absence of an explicit constraint.
  
        Set_Etype (Derived_Type, Implicit_Base);
  
*************** package body Sem_Ch3 is
*** 3557,3565 ****
           Set_Ekind (Derived_Type, Subtype_Kind (Ekind (Parent_Type)));
        end if;
  
!       --  If we did not have a range constraint, then set the range
!       --  from the parent type. Otherwise, the call to Process_Subtype
!       --  has set the bounds.
  
        if No_Constraint
          or else not Has_Range_Constraint (Indic)
--- 3988,3996 ----
           Set_Ekind (Derived_Type, Subtype_Kind (Ekind (Parent_Type)));
        end if;
  
!       --  If we did not have a range constraint, then set the range from the
!       --  parent type. Otherwise, the call to Process_Subtype has set the
!       --  bounds.
  
        if No_Constraint
          or else not Has_Range_Constraint (Indic)
*************** package body Sem_Ch3 is
*** 3598,3608 ****
  
        elsif Is_Fixed_Point_Type (Parent_Type) then
  
!          --  Small of base type and derived type are always copied from
!          --  the parent base type, since smalls never change. The delta
!          --  of the base type is also copied from the parent base type.
!          --  However the delta of the derived type will have been set
!          --  already if a constraint was present.
  
           Set_Small_Value (Derived_Type,  Small_Value (Parent_Base));
           Set_Small_Value (Implicit_Base, Small_Value (Parent_Base));
--- 4029,4039 ----
  
        elsif Is_Fixed_Point_Type (Parent_Type) then
  
!          --  Small of base type and derived type are always copied from the
!          --  parent base type, since smalls never change. The delta of the
!          --  base type is also copied from the parent base type. However the
!          --  delta of the derived type will have been set already if a
!          --  constraint was present.
  
           Set_Small_Value (Derived_Type,  Small_Value (Parent_Base));
           Set_Small_Value (Implicit_Base, Small_Value (Parent_Base));
*************** package body Sem_Ch3 is
*** 3644,3651 ****
        Convert_Scalar_Bounds (N, Parent_Type, Derived_Type, Loc);
  
        --  The implicit_base should be frozen when the derived type is frozen,
!       --  but note that it is used in the conversions of the bounds. For
!       --  fixed types we delay the determination of the bounds until the proper
        --  freezing point. For other numeric types this is rejected by GCC, for
        --  reasons that are currently unclear (???), so we choose to freeze the
        --  implicit base now. In the case of integers and floating point types
--- 4075,4082 ----
        Convert_Scalar_Bounds (N, Parent_Type, Derived_Type, Loc);
  
        --  The implicit_base should be frozen when the derived type is frozen,
!       --  but note that it is used in the conversions of the bounds. For fixed
!       --  types we delay the determination of the bounds until the proper
        --  freezing point. For other numeric types this is rejected by GCC, for
        --  reasons that are currently unclear (???), so we choose to freeze the
        --  implicit base now. In the case of integers and floating point types
*************** package body Sem_Ch3 is
*** 3689,3702 ****
        --------------------
  
        procedure Copy_And_Build is
!          Full_N  : Node_Id;
  
        begin
           if Ekind (Parent_Type) in Record_Kind
!            or else (Ekind (Parent_Type) in Enumeration_Kind
!              and then Root_Type (Parent_Type) /= Standard_Character
!              and then Root_Type (Parent_Type) /= Standard_Wide_Character
!              and then not Is_Generic_Type (Root_Type (Parent_Type)))
           then
              Full_N := New_Copy_Tree (N);
              Insert_After (N, Full_N);
--- 4120,4135 ----
        --------------------
  
        procedure Copy_And_Build is
!          Full_N : Node_Id;
  
        begin
           if Ekind (Parent_Type) in Record_Kind
!            or else
!              (Ekind (Parent_Type) in Enumeration_Kind
!                and then Root_Type (Parent_Type) /= Standard_Character
!                and then Root_Type (Parent_Type) /= Standard_Wide_Character
!                and then Root_Type (Parent_Type) /= Standard_Wide_Wide_Character
!                and then not Is_Generic_Type (Root_Type (Parent_Type)))
           then
              Full_N := New_Copy_Tree (N);
              Insert_After (N, Full_N);
*************** package body Sem_Ch3 is
*** 3718,3733 ****
           return;
  
        elsif Has_Discriminants (Parent_Type) then
- 
           if Present (Full_View (Parent_Type)) then
              if not Is_Completion then
  
!                --  Copy declaration for subsequent analysis, to
!                --  provide a completion for what is a private
!                --  declaration.
  
                 Full_Decl := New_Copy_Tree (N);
                 Full_Der  := New_Copy (Derived_Type);
  
                 Insert_After (N, Full_Decl);
  
--- 4151,4166 ----
           return;
  
        elsif Has_Discriminants (Parent_Type) then
           if Present (Full_View (Parent_Type)) then
              if not Is_Completion then
  
!                --  Copy declaration for subsequent analysis, to provide a
!                --  completion for what is a private declaration. Indicate that
!                --  the full type is internally generated.
  
                 Full_Decl := New_Copy_Tree (N);
                 Full_Der  := New_Copy (Derived_Type);
+                Set_Comes_From_Source (Full_Decl, False);
  
                 Insert_After (N, Full_Decl);
  
*************** package body Sem_Ch3 is
*** 3740,3748 ****
                 --  serve as the underlying full view of the derived type.
  
                 if No (Discriminant_Specifications (N)) then
! 
!                   if Nkind (Subtype_Indication (Type_Definition (N)))
!                     = N_Subtype_Indication
                    then
                       Build_Underlying_Full_View (N, Derived_Type, Parent_Type);
  
--- 4173,4180 ----
                 --  serve as the underlying full view of the derived type.
  
                 if No (Discriminant_Specifications (N)) then
!                   if Nkind (Subtype_Indication (Type_Definition (N))) =
!                                                         N_Subtype_Indication
                    then
                       Build_Underlying_Full_View (N, Derived_Type, Parent_Type);
  
*************** package body Sem_Ch3 is
*** 3761,3767 ****
              end if;
           end if;
  
!          --  Build partial view of derived type from partial view of parent.
  
           Build_Derived_Record_Type
             (N, Parent_Type, Derived_Type, Derive_Subps);
--- 4193,4199 ----
              end if;
           end if;
  
!          --  Build partial view of derived type from partial view of parent
  
           Build_Derived_Record_Type
             (N, Parent_Type, Derived_Type, Derive_Subps);
*************** package body Sem_Ch3 is
*** 3779,3794 ****
                 Swapped := True;
              end if;
  
!             --  Build full view of derived type from full view of
!             --  parent which is now installed.
!             --  Subprograms have been derived on the partial view,
!             --  the completion does not derive them anew.
  
              if not Is_Tagged_Type (Parent_Type) then
                 Build_Derived_Record_Type
                   (Full_Decl, Parent_Type, Full_Der, False);
-             else
  
                 --  If full view of parent is tagged, the completion
                 --  inherits the proper primitive operations.
  
--- 4211,4225 ----
                 Swapped := True;
              end if;
  
!             --  Build full view of derived type from full view of parent which
!             --  is now installed. Subprograms have been derived on the partial
!             --  view, the completion does not derive them anew.
  
              if not Is_Tagged_Type (Parent_Type) then
                 Build_Derived_Record_Type
                   (Full_Decl, Parent_Type, Full_Der, False);
  
+             else
                 --  If full view of parent is tagged, the completion
                 --  inherits the proper primitive operations.
  
*************** package body Sem_Ch3 is
*** 3810,3824 ****
              Set_Full_View (Derived_Type, Full_Der);
              Set_Full_View (Der_Base, Base_Type (Full_Der));
  
!             --  Copy the discriminant list from full view to
!             --  the partial views (base type and its subtype).
!             --  Gigi requires that the partial and full views
!             --  have the same discriminants.
!             --  ??? Note that since the partial view is pointing
!             --  to discriminants in the full view, their scope
!             --  will be that of the full view. This might
!             --  cause some front end problems and need
!             --  adjustment?
  
              Discr := First_Discriminant (Base_Type (Full_Der));
              Set_First_Entity (Der_Base, Discr);
--- 4241,4254 ----
              Set_Full_View (Derived_Type, Full_Der);
              Set_Full_View (Der_Base, Base_Type (Full_Der));
  
!             --  Copy the discriminant list from full view to the partial views
!             --  (base type and its subtype). Gigi requires that the partial
!             --  and full views have the same discriminants.
! 
!             --  Note that since the partial view is pointing to discriminants
!             --  in the full view, their scope will be that of the full view.
!             --  This might cause some front end problems and need
!             --  adjustment???
  
              Discr := First_Discriminant (Base_Type (Full_Der));
              Set_First_Entity (Der_Base, Discr);
*************** package body Sem_Ch3 is
*** 3833,3838 ****
--- 4263,4269 ----
  
              Set_First_Entity (Derived_Type, First_Entity (Der_Base));
              Set_Last_Entity  (Derived_Type, Last_Entity  (Der_Base));
+             Set_Stored_Constraint (Full_Der, Stored_Constraint (Derived_Type));
  
           else
              --  If this is a completion, the derived type stays private
*************** package body Sem_Ch3 is
*** 3900,3907 ****
        else
           --  Untagged type, No discriminants on either view
  
!          if Nkind (Subtype_Indication (Type_Definition (N)))
!            = N_Subtype_Indication
           then
              Error_Msg_N
                ("illegal constraint on type without discriminants", N);
--- 4331,4338 ----
        else
           --  Untagged type, No discriminants on either view
  
!          if Nkind (Subtype_Indication (Type_Definition (N))) =
!                                                    N_Subtype_Indication
           then
              Error_Msg_N
                ("illegal constraint on type without discriminants", N);
*************** package body Sem_Ch3 is
*** 3929,3949 ****
                (Base_Type (Derived_Type), Finalize_Storage_Only (Parent_Type));
           end if;
  
!          --  Construct the implicit full view by deriving from full
!          --  view of the parent type. In order to get proper visibility,
!          --  we install the parent scope and its declarations.
  
!          --  ??? if the parent is untagged private and its
!          --  completion is tagged, this mechanism will not
!          --  work because we cannot derive from the tagged
!          --  full view unless we have an extension
  
           if Present (Full_View (Parent_Type))
             and then not Is_Tagged_Type (Full_View (Parent_Type))
             and then not Is_Completion
           then
!             Full_Der := Make_Defining_Identifier (Sloc (Derived_Type),
!                                               Chars (Derived_Type));
              Set_Is_Itype (Full_Der);
              Set_Has_Private_Declaration (Full_Der);
              Set_Has_Private_Declaration (Derived_Type);
--- 4360,4380 ----
                (Base_Type (Derived_Type), Finalize_Storage_Only (Parent_Type));
           end if;
  
!          --  Construct the implicit full view by deriving from full view of
!          --  the parent type. In order to get proper visibility, we install
!          --  the parent scope and its declarations.
  
!          --  ??? if the parent is untagged private and its completion is
!          --  tagged, this mechanism will not work because we cannot derive
!          --  from the tagged full view unless we have an extension
  
           if Present (Full_View (Parent_Type))
             and then not Is_Tagged_Type (Full_View (Parent_Type))
             and then not Is_Completion
           then
!             Full_Der :=
!               Make_Defining_Identifier (Sloc (Derived_Type),
!                 Chars => Chars (Derived_Type));
              Set_Is_Itype (Full_Der);
              Set_Has_Private_Declaration (Full_Der);
              Set_Has_Private_Declaration (Derived_Type);
*************** package body Sem_Ch3 is
*** 3957,3966 ****
                 Copy_And_Build;
                 Uninstall_Declarations (Par_Scope);
  
!             --  If parent scope is open and in another unit, and
!             --  parent has a completion, then the derivation is taking
!             --  place in the visible part of a child unit. In that
!             --  case retrieve the full view of the parent momentarily.
  
              elsif not In_Same_Source_Unit (N, Parent_Type) then
                 Full_P := Full_View (Parent_Type);
--- 4388,4397 ----
                 Copy_And_Build;
                 Uninstall_Declarations (Par_Scope);
  
!             --  If parent scope is open and in another unit, and parent has a
!             --  completion, then the derivation is taking place in the visible
!             --  part of a child unit. In that case retrieve the full view of
!             --  the parent momentarily.
  
              elsif not In_Same_Source_Unit (N, Parent_Type) then
                 Full_P := Full_View (Parent_Type);
*************** package body Sem_Ch3 is
*** 3968,3974 ****
                 Copy_And_Build;
                 Exchange_Declarations (Full_P);
  
!             --  Otherwise it is a local derivation.
  
              else
                 Copy_And_Build;
--- 4399,4405 ----
                 Copy_And_Build;
                 Exchange_Declarations (Full_P);
  
!             --  Otherwise it is a local derivation
  
              else
                 Copy_And_Build;
*************** package body Sem_Ch3 is
*** 4049,4055 ****
     -- Build_Derived_Record_Type --
     -------------------------------
  
!    --  1. INTRODUCTION.
  
     --  Ideally we would like to use the same model of type derivation for
     --  tagged and untagged record types. Unfortunately this is not quite
--- 4480,4486 ----
     -- Build_Derived_Record_Type --
     -------------------------------
  
!    --  1. INTRODUCTION
  
     --  Ideally we would like to use the same model of type derivation for
     --  tagged and untagged record types. Unfortunately this is not quite
*************** package body Sem_Ch3 is
*** 4068,4075 ****
     --  in R and T have the same position in objects of type R and T.
  
     --  This has two implications. The first is that the entire tree for R's
!    --  declaration needs to be copied for T in the untagged case, so that
!    --  T can be viewed as a record type of its own with its own representation
     --  clauses. The second implication is the way we handle discriminants.
     --  Specifically, in the untagged case we need a way to communicate to Gigi
     --  what are the real discriminants in the record, while for the semantics
--- 4499,4506 ----
     --  in R and T have the same position in objects of type R and T.
  
     --  This has two implications. The first is that the entire tree for R's
!    --  declaration needs to be copied for T in the untagged case, so that T
!    --  can be viewed as a record type of its own with its own representation
     --  clauses. The second implication is the way we handle discriminants.
     --  Specifically, in the untagged case we need a way to communicate to Gigi
     --  what are the real discriminants in the record, while for the semantics
*************** package body Sem_Ch3 is
*** 4085,4091 ****
     --  semantic rules are somewhat different). We will explain what differs
     --  below.
  
!    --  2. DISCRIMINANTS UNDER INHERITANCE.
  
     --  The semantic rules governing the discriminants of derived types are
     --  quite subtle.
--- 4516,4522 ----
     --  semantic rules are somewhat different). We will explain what differs
     --  below.
  
!    --  2. DISCRIMINANTS UNDER INHERITANCE
  
     --  The semantic rules governing the discriminants of derived types are
     --  quite subtle.
*************** package body Sem_Ch3 is
*** 4099,4108 ****
     --  o The discriminants specified by a new KNOWN_DISCRIMINANT_PART, if
     --    there is one;
  
!    --  o Otherwise, each discriminant of the parent type (implicitly
!    --    declared in the same order with the same specifications). In this
!    --    case, the discriminants are said to be "inherited", or if unknown in
!    --    the parent are also unknown in the derived type.
  
     --  Furthermore if a KNOWN_DISCRIMINANT_PART is provided, then [3.7(13-18)]:
  
--- 4530,4539 ----
     --  o The discriminants specified by a new KNOWN_DISCRIMINANT_PART, if
     --    there is one;
  
!    --  o Otherwise, each discriminant of the parent type (implicitly declared
!    --    in the same order with the same specifications). In this case, the
!    --    discriminants are said to be "inherited", or if unknown in the parent
!    --    are also unknown in the derived type.
  
     --  Furthermore if a KNOWN_DISCRIMINANT_PART is provided, then [3.7(13-18)]:
  
*************** package body Sem_Ch3 is
*** 4125,4131 ****
     --  in the derived type definition, then the discriminant is said to be
     --  "specified" by that derived type definition.
  
!    --  3. DISCRIMINANTS IN DERIVED UNTAGGED RECORD TYPES.
  
     --  We have spoken about stored discriminants in point 1 (introduction)
     --  above. There are two sort of stored discriminants: implicit and
--- 4556,4562 ----
     --  in the derived type definition, then the discriminant is said to be
     --  "specified" by that derived type definition.
  
!    --  3. DISCRIMINANTS IN DERIVED UNTAGGED RECORD TYPES
  
     --  We have spoken about stored discriminants in point 1 (introduction)
     --  above. There are two sort of stored discriminants: implicit and
*************** package body Sem_Ch3 is
*** 4150,4163 ****
     --  discriminants in R and T1 through T4.
  
     --   Type      Discrim     Stored Discrim  Comment
!    --    R      (D1, D2, D3)   (D1, D2, D3)   Gider discrims are implicit in R
!    --    T1     (D1, D2, D3)   (D1, D2, D3)   Gider discrims are implicit in T1
!    --    T2     (X1, X2)       (D1, D2, D3)   Gider discrims are EXPLICIT in T2
!    --    T3     (X1, X2)       (D1, D2, D3)   Gider discrims are EXPLICIT in T3
!    --    T4     (Y)            (D1, D2, D3)   Gider discrims are EXPLICIT in T4
  
!    --  Field Corresponding_Discriminant (abbreviated CD below) allows to find
!    --  the corresponding discriminant in the parent type, while
     --  Original_Record_Component (abbreviated ORC below), the actual physical
     --  component that is renamed. Finally the field Is_Completely_Hidden
     --  (abbreviated ICH below) is set for all explicit stored discriminants
--- 4581,4594 ----
     --  discriminants in R and T1 through T4.
  
     --   Type      Discrim     Stored Discrim  Comment
!    --    R      (D1, D2, D3)   (D1, D2, D3)   Girder discrims implicit in R
!    --    T1     (D1, D2, D3)   (D1, D2, D3)   Girder discrims implicit in T1
!    --    T2     (X1, X2)       (D1, D2, D3)   Girder discrims EXPLICIT in T2
!    --    T3     (X1, X2)       (D1, D2, D3)   Girder discrims EXPLICIT in T3
!    --    T4     (Y)            (D1, D2, D3)   Girder discrims EXPLICIT in T4
  
!    --  Field Corresponding_Discriminant (abbreviated CD below) allows us to
!    --  find the corresponding discriminant in the parent type, while
     --  Original_Record_Component (abbreviated ORC below), the actual physical
     --  component that is renamed. Finally the field Is_Completely_Hidden
     --  (abbreviated ICH below) is set for all explicit stored discriminants
*************** package body Sem_Ch3 is
*** 4190,4196 ****
     --                 D2 in T3   empty    itself    yes
     --                 D3 in T3   empty    itself    yes
  
!    --  4. DISCRIMINANTS IN DERIVED TAGGED RECORD TYPES.
  
     --  Type derivation for tagged types is fairly straightforward. if no
     --  discriminants are specified by the derived type, these are inherited
--- 4621,4627 ----
     --                 D2 in T3   empty    itself    yes
     --                 D3 in T3   empty    itself    yes
  
!    --  4. DISCRIMINANTS IN DERIVED TAGGED RECORD TYPES
  
     --  Type derivation for tagged types is fairly straightforward. if no
     --  discriminants are specified by the derived type, these are inherited
*************** package body Sem_Ch3 is
*** 4203,4209 ****
     --           type T1 is new R with null record;
     --           type T2 (X1, X2: Int) is new T1 (X2, 88, X1) with null record;
  
!    --  are changed into :
  
     --           type T1 (D1, D2, D3 : Int) is new R (D1, D2, D3) with record
     --              _parent : R (D1, D2, D3);
--- 4634,4640 ----
     --           type T1 is new R with null record;
     --           type T2 (X1, X2: Int) is new T1 (X2, 88, X1) with null record;
  
!    --  are changed into:
  
     --           type T1 (D1, D2, D3 : Int) is new R (D1, D2, D3) with record
     --              _parent : R (D1, D2, D3);
*************** package body Sem_Ch3 is
*** 4229,4235 ****
     --                 X1 in T2  D3 in T1   D3 in R   no
     --                 X2 in T2  D1 in T1   D1 in R   no
  
!    --  5. FIRST TRANSFORMATION FOR DERIVED RECORDS.
     --
     --  Regardless of whether we dealing with a tagged or untagged type
     --  we will transform all derived type declarations of the form
--- 4660,4666 ----
     --                 X1 in T2  D3 in T1   D3 in R   no
     --                 X2 in T2  D1 in T1   D1 in R   no
  
!    --  5. FIRST TRANSFORMATION FOR DERIVED RECORDS
     --
     --  Regardless of whether we dealing with a tagged or untagged type
     --  we will transform all derived type declarations of the form
*************** package body Sem_Ch3 is
*** 4300,4306 ****
     --  Discriminant_Constraint from Der so that when parameter conformance is
     --  checked when P is overridden, no semantic errors are flagged.
  
!    --  6. SECOND TRANSFORMATION FOR DERIVED RECORDS.
  
     --  Regardless of whether we are dealing with a tagged or untagged type
     --  we will transform all derived type declarations of the form
--- 4731,4737 ----
     --  Discriminant_Constraint from Der so that when parameter conformance is
     --  checked when P is overridden, no semantic errors are flagged.
  
!    --  6. SECOND TRANSFORMATION FOR DERIVED RECORDS
  
     --  Regardless of whether we are dealing with a tagged or untagged type
     --  we will transform all derived type declarations of the form
*************** package body Sem_Ch3 is
*** 4318,4329 ****
     --  above transformation will entail. This is done directly in routine
     --  Inherit_Components.
  
!    --  7. TYPE DERIVATION AND COMPONENT INHERITANCE.
  
     --  In both tagged and untagged derived types, regular non discriminant
     --  components are inherited in the derived type from the parent type. In
     --  the absence of discriminants component, inheritance is straightforward
     --  as components can simply be copied from the parent.
     --  If the parent has discriminants, inheriting components constrained with
     --  these discriminants requires caution. Consider the following example:
  
--- 4749,4761 ----
     --  above transformation will entail. This is done directly in routine
     --  Inherit_Components.
  
!    --  7. TYPE DERIVATION AND COMPONENT INHERITANCE
  
     --  In both tagged and untagged derived types, regular non discriminant
     --  components are inherited in the derived type from the parent type. In
     --  the absence of discriminants component, inheritance is straightforward
     --  as components can simply be copied from the parent.
+ 
     --  If the parent has discriminants, inheriting components constrained with
     --  these discriminants requires caution. Consider the following example:
  
*************** package body Sem_Ch3 is
*** 4335,4343 ****
     --      type T2 (X : positive) is new R (1, X) [with null record];
  
     --  As explained in 6. above, T1 is rewritten as
- 
     --      type T1 (D1, D2 : Positive) is new R (D1, D2) [with null record];
- 
     --  which makes the treatment for T1 and T2 identical.
  
     --  What we want when inheriting S, is that references to D1 and D2 in R are
--- 4767,4773 ----
*************** package body Sem_Ch3 is
*** 4351,4357 ****
     --  For T2, for instance, this has the effect of replacing String (D1 .. D2)
     --  by String (1 .. X).
  
!    --  8. TYPE DERIVATION IN PRIVATE TYPE EXTENSIONS.
  
     --  We explain here the rules governing private type extensions relevant to
     --  type derivation. These rules are explained on the following example:
--- 4781,4787 ----
     --  For T2, for instance, this has the effect of replacing String (D1 .. D2)
     --  by String (1 .. X).
  
!    --  8. TYPE DERIVATION IN PRIVATE TYPE EXTENSIONS
  
     --  We explain here the rules governing private type extensions relevant to
     --  type derivation. These rules are explained on the following example:
*************** package body Sem_Ch3 is
*** 4417,4438 ****
     --  P's constraints on A's discriminants must statically match those
     --  imposed by (...).
  
!    --  9. IMPLEMENTATION OF TYPE DERIVATION FOR PRIVATE EXTENSIONS.
  
     --  The full view of a private extension is handled exactly as described
!    --  above. The model chose for the private view of a private extension
!    --  is the same for what concerns discriminants (ie they receive the same
     --  treatment as in the tagged case). However, the private view of the
     --  private extension always inherits the components of the parent base,
!    --  without replacing any discriminant reference. Strictly speaking this
!    --  is incorrect. However, Gigi never uses this view to generate code so
!    --  this is a purely semantic issue. In theory, a set of transformations
!    --  similar to those given in 5. and 6. above could be applied to private
!    --  views of private extensions to have the same model of component
!    --  inheritance as for non private extensions. However, this is not done
!    --  because it would further complicate private type processing.
!    --  Semantically speaking, this leaves us in an uncomfortable
!    --  situation. As an example consider:
  
     --          package Pack is
     --             type R (D : integer) is tagged record
--- 4847,4867 ----
     --  P's constraints on A's discriminants must statically match those
     --  imposed by (...).
  
!    --  9. IMPLEMENTATION OF TYPE DERIVATION FOR PRIVATE EXTENSIONS
  
     --  The full view of a private extension is handled exactly as described
!    --  above. The model chose for the private view of a private extension is
!    --  the same for what concerns discriminants (ie they receive the same
     --  treatment as in the tagged case). However, the private view of the
     --  private extension always inherits the components of the parent base,
!    --  without replacing any discriminant reference. Strictly speaking this is
!    --  incorrect. However, Gigi never uses this view to generate code so this
!    --  is a purely semantic issue. In theory, a set of transformations similar
!    --  to those given in 5. and 6. above could be applied to private views of
!    --  private extensions to have the same model of component inheritance as
!    --  for non private extensions. However, this is not done because it would
!    --  further complicate private type processing. Semantically speaking, this
!    --  leaves us in an uncomfortable situation. As an example consider:
  
     --          package Pack is
     --             type R (D : integer) is tagged record
*************** package body Sem_Ch3 is
*** 4457,4463 ****
     --             subtype  T is BaseT (1);
     --          end;
  
!    --  (strictly speaking the above is incorrect Ada).
  
     --  From the semantic standpoint the private view of private extension T
     --  should be flagged as constrained since one can clearly have
--- 4886,4892 ----
     --             subtype  T is BaseT (1);
     --          end;
  
!    --  (strictly speaking the above is incorrect Ada)
  
     --  From the semantic standpoint the private view of private extension T
     --  should be flagged as constrained since one can clearly have
*************** package body Sem_Ch3 is
*** 4471,4480 ****
     --  a private extension such as T, we first mark T as unconstrained, we
     --  process it, we perform program derivation and just before returning from
     --  Build_Derived_Record_Type we mark T as constrained.
     --  ??? Are there are other uncomfortable cases that we will have to
     --      deal with.
  
!    --  10. RECORD_TYPE_WITH_PRIVATE complications.
  
     --  Types that are derived from a visible record type and have a private
     --  extension present other peculiarities. They behave mostly like private
--- 4900,4910 ----
     --  a private extension such as T, we first mark T as unconstrained, we
     --  process it, we perform program derivation and just before returning from
     --  Build_Derived_Record_Type we mark T as constrained.
+ 
     --  ??? Are there are other uncomfortable cases that we will have to
     --      deal with.
  
!    --  10. RECORD_TYPE_WITH_PRIVATE complications
  
     --  Types that are derived from a visible record type and have a private
     --  extension present other peculiarities. They behave mostly like private
*************** package body Sem_Ch3 is
*** 4494,4516 ****
     is
        Loc          : constant Source_Ptr := Sloc (N);
        Parent_Base  : Entity_Id;
- 
        Type_Def     : Node_Id;
        Indic        : Node_Id;
- 
        Discrim      : Entity_Id;
        Last_Discrim : Entity_Id;
        Constrs      : Elist_Id;
!       Discs        : Elist_Id := New_Elmt_List;
        --  An empty Discs list means that there were no constraints in the
        --  subtype indication or that there was an error processing it.
  
!       Assoc_List   : Elist_Id;
!       New_Discrs   : Elist_Id;
! 
!       New_Base     : Entity_Id;
!       New_Decl     : Node_Id;
!       New_Indic    : Node_Id;
  
        Is_Tagged          : constant Boolean := Is_Tagged_Type (Parent_Type);
        Discriminant_Specs : constant Boolean :=
--- 4924,4944 ----
     is
        Loc          : constant Source_Ptr := Sloc (N);
        Parent_Base  : Entity_Id;
        Type_Def     : Node_Id;
        Indic        : Node_Id;
        Discrim      : Entity_Id;
        Last_Discrim : Entity_Id;
        Constrs      : Elist_Id;
! 
!       Discs : Elist_Id := New_Elmt_List;
        --  An empty Discs list means that there were no constraints in the
        --  subtype indication or that there was an error processing it.
  
!       Assoc_List : Elist_Id;
!       New_Discrs : Elist_Id;
!       New_Base   : Entity_Id;
!       New_Decl   : Node_Id;
!       New_Indic  : Node_Id;
  
        Is_Tagged          : constant Boolean := Is_Tagged_Type (Parent_Type);
        Discriminant_Specs : constant Boolean :=
*************** package body Sem_Ch3 is
*** 4555,4561 ****
           Init_Size_Align (Derived_Type);
        end if;
  
!       --  STEP 0a: figure out what kind of derived type declaration we have.
  
        if Private_Extension then
           Type_Def := N;
--- 4983,4989 ----
           Init_Size_Align (Derived_Type);
        end if;
  
!       --  STEP 0a: figure out what kind of derived type declaration we have
  
        if Private_Extension then
           Type_Def := N;
*************** package body Sem_Ch3 is
*** 4585,4592 ****
        Indic := Subtype_Indication (Type_Def);
        Constraint_Present := (Nkind (Indic) = N_Subtype_Indication);
  
        if Constraint_Present then
!          if not Has_Discriminants (Parent_Base) then
              Error_Msg_N
                ("invalid constraint: type has no discriminant",
                   Constraint (Indic));
--- 5013,5028 ----
        Indic := Subtype_Indication (Type_Def);
        Constraint_Present := (Nkind (Indic) = N_Subtype_Indication);
  
+       --  Check that the type has visible discriminants. The type may be
+       --  a private type with unknown discriminants whose full view has
+       --  discriminants which are invisible.
+ 
        if Constraint_Present then
!          if not Has_Discriminants (Parent_Base)
!            or else
!              (Has_Unknown_Discriminants (Parent_Base)
!                 and then Is_Private_Type (Parent_Base))
!          then
              Error_Msg_N
                ("invalid constraint: type has no discriminant",
                   Constraint (Indic));
*************** package body Sem_Ch3 is
*** 4604,4617 ****
           end if;
        end if;
  
!       --  STEP 0b: If needed, apply transformation given in point 5. above.
  
        if not Private_Extension
          and then Has_Discriminants (Parent_Type)
          and then not Discriminant_Specs
          and then (Is_Constrained (Parent_Type) or else Constraint_Present)
        then
!          --  First, we must analyze the constraint (see comment in point 5.).
  
           if Constraint_Present then
              New_Discrs := Build_Discriminant_Constraints (Parent_Type, Indic);
--- 5040,5053 ----
           end if;
        end if;
  
!       --  STEP 0b: If needed, apply transformation given in point 5. above
  
        if not Private_Extension
          and then Has_Discriminants (Parent_Type)
          and then not Discriminant_Specs
          and then (Is_Constrained (Parent_Type) or else Constraint_Present)
        then
!          --  First, we must analyze the constraint (see comment in point 5.)
  
           if Constraint_Present then
              New_Discrs := Build_Discriminant_Constraints (Parent_Type, Indic);
*************** package body Sem_Ch3 is
*** 4664,4672 ****
           Mark_Rewrite_Insertion (New_Decl);
           Insert_Before (N, New_Decl);
  
!          --  Note that this call passes False for the Derive_Subps
!          --  parameter because subprogram derivation is deferred until
!          --  after creating the subtype (see below).
  
           Build_Derived_Type
             (New_Decl, Parent_Base, New_Base,
--- 5100,5108 ----
           Mark_Rewrite_Insertion (New_Decl);
           Insert_Before (N, New_Decl);
  
!          --  Note that this call passes False for the Derive_Subps parameter
!          --  because subprogram derivation is deferred until after creating
!          --  the subtype (see below).
  
           Build_Derived_Type
             (New_Decl, Parent_Base, New_Base,
*************** package body Sem_Ch3 is
*** 4720,4734 ****
  
           Analyze (N);
  
!          --  Derivation of subprograms must be delayed until the
!          --  full subtype has been established to ensure proper
!          --  overriding of subprograms inherited by full types.
!          --  If the derivations occurred as part of the call to
!          --  Build_Derived_Type above, then the check for type
!          --  conformance would fail because earlier primitive
!          --  subprograms could still refer to the full type prior
!          --  the change to the new subtype and hence wouldn't
!          --  match the new base type created here.
  
           Derive_Subprograms (Parent_Type, Derived_Type);
  
--- 5156,5168 ----
  
           Analyze (N);
  
!          --  Derivation of subprograms must be delayed until the full subtype
!          --  has been established to ensure proper overriding of subprograms
!          --  inherited by full types. If the derivations occurred as part of
!          --  the call to Build_Derived_Type above, then the check for type
!          --  conformance would fail because earlier primitive subprograms
!          --  could still refer to the full type prior the change to the new
!          --  subtype and hence would not match the new base type created here.
  
           Derive_Subprograms (Parent_Type, Derived_Type);
  
*************** package body Sem_Ch3 is
*** 4751,4756 ****
--- 5185,5191 ----
        --  STEP 1a: perform preliminary actions/checks for derived tagged types
  
        if Is_Tagged then
+ 
           --  The parent type is frozen for non-private extensions (RM 13.14(7))
  
           if not Private_Extension then
*************** package body Sem_Ch3 is
*** 4796,4802 ****
        --  conformance. However, we must remove any existing components that
        --  were inherited from the parent (and attached in Copy_And_Swap)
        --  because the full type inherits all appropriate components anyway, and
!       --  we don't want the partial view's components interfering.
  
        if Has_Discriminants (Derived_Type) and then Discriminant_Specs then
           Discrim := First_Discriminant (Derived_Type);
--- 5231,5237 ----
        --  conformance. However, we must remove any existing components that
        --  were inherited from the parent (and attached in Copy_And_Swap)
        --  because the full type inherits all appropriate components anyway, and
!       --  we do not want the partial view's components interfering.
  
        if Has_Discriminants (Derived_Type) and then Discriminant_Specs then
           Discrim := First_Discriminant (Derived_Type);
*************** package body Sem_Ch3 is
*** 4827,4833 ****
        Set_Is_Tagged_Type    (Derived_Type, Is_Tagged);
        Set_Is_Limited_Record (Derived_Type, Is_Limited_Record (Parent_Type));
  
!       --  STEP 2a: process discriminants of derived type if any.
  
        New_Scope (Derived_Type);
  
--- 5262,5268 ----
        Set_Is_Tagged_Type    (Derived_Type, Is_Tagged);
        Set_Is_Limited_Record (Derived_Type, Is_Limited_Record (Parent_Type));
  
!       --  STEP 2a: process discriminants of derived type if any
  
        New_Scope (Derived_Type);
  
*************** package body Sem_Ch3 is
*** 4872,4878 ****
              --  discriminants cannot rename old ones (implied by [7.3(13)]).
  
              Discrim := First_Discriminant (Derived_Type);
- 
              while Present (Discrim) loop
                 if not Is_Tagged
                   and then not Present (Corresponding_Discriminant (Discrim))
--- 5307,5312 ----
*************** package body Sem_Ch3 is
*** 4889,4897 ****
                    exit;
                 end if;
  
!                --  If a new discriminant is used in the constraint,
!                --  then its subtype must be statically compatible
!                --  with the parent discriminant's subtype (3.7(15)).
  
                 if Present (Corresponding_Discriminant (Discrim))
                   and then
--- 5323,5331 ----
                    exit;
                 end if;
  
!                --  If a new discriminant is used in the constraint, then its
!                --  subtype must be statically compatible with the parent
!                --  discriminant's subtype (3.7(15)).
  
                 if Present (Corresponding_Discriminant (Discrim))
                   and then
*************** package body Sem_Ch3 is
*** 4906,4911 ****
--- 5340,5370 ----
  
                 Next_Discriminant (Discrim);
              end loop;
+ 
+             --  Check whether the constraints of the full view statically
+             --  match those imposed by the parent subtype [7.3(13)].
+ 
+             if Present (Stored_Constraint (Derived_Type)) then
+                declare
+                   C1, C2 : Elmt_Id;
+ 
+                begin
+                   C1 := First_Elmt (Discs);
+                   C2 := First_Elmt (Stored_Constraint (Derived_Type));
+                   while Present (C1) and then Present (C2) loop
+                      if not
+                        Fully_Conformant_Expressions (Node (C1), Node (C2))
+                      then
+                         Error_Msg_N (
+                           "not conformant with previous declaration",
+                              Node (C1));
+                      end if;
+ 
+                      Next_Elmt (C1);
+                      Next_Elmt (C2);
+                   end loop;
+                end;
+             end if;
           end if;
  
        --  STEP 2b: No new discriminants, inherit discriminants if any
*************** package body Sem_Ch3 is
*** 4913,4926 ****
        else
           if Private_Extension then
              Set_Has_Unknown_Discriminants
!               (Derived_Type, Has_Unknown_Discriminants (Parent_Type)
!                              or else Unknown_Discriminants_Present (N));
!          else
!             Set_Has_Unknown_Discriminants
!               (Derived_Type, Has_Unknown_Discriminants (Parent_Type));
           end if;
  
           if not Has_Unknown_Discriminants (Derived_Type)
             and then Has_Discriminants (Parent_Type)
           then
              Inherit_Discrims := True;
--- 5372,5395 ----
        else
           if Private_Extension then
              Set_Has_Unknown_Discriminants
!               (Derived_Type,
!                Has_Unknown_Discriminants (Parent_Type)
!                  or else Unknown_Discriminants_Present (N));
! 
!          --  The partial view of the parent may have unknown discriminants,
!          --  but if the full view has discriminants and the parent type is
!          --  in scope they must be inherited.
! 
!          elsif Has_Unknown_Discriminants (Parent_Type)
!            and then
!             (not Has_Discriminants (Parent_Type)
!               or else not In_Open_Scopes (Scope (Parent_Type)))
!          then
!             Set_Has_Unknown_Discriminants (Derived_Type);
           end if;
  
           if not Has_Unknown_Discriminants (Derived_Type)
+            and then not Has_Unknown_Discriminants (Parent_Base)
             and then Has_Discriminants (Parent_Type)
           then
              Inherit_Discrims := True;
*************** package body Sem_Ch3 is
*** 4946,4955 ****
           Set_Is_Constrained
             (Derived_Type,
              not (Inherit_Discrims
!                  or else Has_Unknown_Discriminants (Derived_Type)));
        end if;
  
!       --  STEP 3: initialize fields of derived type.
  
        Set_Is_Tagged_Type    (Derived_Type, Is_Tagged);
        Set_Stored_Constraint (Derived_Type, No_Elist);
--- 5415,5424 ----
           Set_Is_Constrained
             (Derived_Type,
              not (Inherit_Discrims
!                    or else Has_Unknown_Discriminants (Derived_Type)));
        end if;
  
!       --  STEP 3: initialize fields of derived type
  
        Set_Is_Tagged_Type    (Derived_Type, Is_Tagged);
        Set_Stored_Constraint (Derived_Type, No_Elist);
*************** package body Sem_Ch3 is
*** 4983,4989 ****
             (Derived_Type, Finalize_Storage_Only (Parent_Type));
        end if;
  
!       --  Set fields for private derived types.
  
        if Is_Private_Type (Derived_Type) then
           Set_Depends_On_Private (Derived_Type, True);
--- 5452,5458 ----
             (Derived_Type, Finalize_Storage_Only (Parent_Type));
        end if;
  
!       --  Set fields for private derived types
  
        if Is_Private_Type (Derived_Type) then
           Set_Depends_On_Private (Derived_Type, True);
*************** package body Sem_Ch3 is
*** 5063,5070 ****
        if not Is_Tagged then
  
           --  Discriminant_Constraint (Derived_Type) has been properly
!          --  constructed. Save it and temporarily set it to Empty because we do
!          --  not want the call to New_Copy_Tree below to mess this list.
  
           if Has_Discriminants (Derived_Type) then
              Save_Discr_Constr := Discriminant_Constraint (Derived_Type);
--- 5532,5539 ----
        if not Is_Tagged then
  
           --  Discriminant_Constraint (Derived_Type) has been properly
!          --  constructed. Save it and temporarily set it to Empty because we
!          --  do not want the call to New_Copy_Tree below to mess this list.
  
           if Has_Discriminants (Derived_Type) then
              Save_Discr_Constr := Discriminant_Constraint (Derived_Type);
*************** package body Sem_Ch3 is
*** 5073,5081 ****
              Save_Discr_Constr := No_Elist;
           end if;
  
!          --  Save the Etype field of Derived_Type. It is correctly set now, but
!          --  the call to New_Copy tree may remap it to point to itself, which
!          --  is not what we want. Ditto for the Next_Entity field.
  
           Save_Etype       := Etype (Derived_Type);
           Save_Next_Entity := Next_Entity (Derived_Type);
--- 5542,5550 ----
              Save_Discr_Constr := No_Elist;
           end if;
  
!          --  Save the Etype field of Derived_Type. It is correctly set now,
!          --  but the call to New_Copy tree may remap it to point to itself,
!          --  which is not what we want. Ditto for the Next_Entity field.
  
           Save_Etype       := Etype (Derived_Type);
           Save_Next_Entity := Next_Entity (Derived_Type);
*************** package body Sem_Ch3 is
*** 5084,5090 ****
           --  stored discriminants in the Derived_Type. It is fundamental that
           --  no types or itypes with discriminants other than the stored
           --  discriminants appear in the entities declared inside
!          --  Derived_Type. Gigi won't like it.
  
           New_Decl :=
             New_Copy_Tree
--- 5553,5559 ----
           --  stored discriminants in the Derived_Type. It is fundamental that
           --  no types or itypes with discriminants other than the stored
           --  discriminants appear in the entities declared inside
!          --  Derived_Type, since the back end cannot deal with it.
  
           New_Decl :=
             New_Copy_Tree
*************** package body Sem_Ch3 is
*** 5100,5106 ****
              Set_Discriminant_Constraint
                (Derived_Type, Save_Discr_Constr);
              Set_Stored_Constraint
!               (Derived_Type, Expand_To_Stored_Constraint (Parent_Base, Discs));
              Replace_Components (Derived_Type, New_Decl);
           end if;
  
--- 5569,5575 ----
              Set_Discriminant_Constraint
                (Derived_Type, Save_Discr_Constr);
              Set_Stored_Constraint
!               (Derived_Type, Expand_To_Stored_Constraint (Parent_Type, Discs));
              Replace_Components (Derived_Type, New_Decl);
           end if;
  
*************** package body Sem_Ch3 is
*** 5118,5129 ****
        elsif Private_Extension and then Is_Generic_Type (Derived_Type) then
           Record_Type_Definition (Empty, Derived_Type);
  
!       --  STEP 5c: Process the record extension for non private tagged types.
  
        elsif not Private_Extension then
-          --  Add the _parent field in the derived type.
  
!          Expand_Derived_Record (Derived_Type, Type_Def);
  
           --  Analyze the record extension
  
--- 5587,5599 ----
        elsif Private_Extension and then Is_Generic_Type (Derived_Type) then
           Record_Type_Definition (Empty, Derived_Type);
  
!       --  STEP 5c: Process the record extension for non private tagged types
  
        elsif not Private_Extension then
  
!          --  Add the _parent field in the derived type
! 
!          Expand_Record_Extension (Derived_Type, Type_Def);
  
           --  Analyze the record extension
  
*************** package body Sem_Ch3 is
*** 5163,5168 ****
--- 5633,5648 ----
           end if;
        end if;
  
+       --  Update the class_wide type, which shares the now-completed
+       --  entity list with its specific type.
+ 
+       if Is_Tagged then
+          Set_First_Entity
+            (Class_Wide_Type (Derived_Type), First_Entity (Derived_Type));
+          Set_Last_Entity
+            (Class_Wide_Type (Derived_Type), Last_Entity (Derived_Type));
+       end if;
+ 
     end Build_Derived_Record_Type;
  
     ------------------------
*************** package body Sem_Ch3 is
*** 5276,5284 ****
           return;
        end if;
  
!       --  Set delayed freeze and then derive subprograms, we need to do
!       --  this in this order so that derived subprograms inherit the
!       --  derived freeze if necessary.
  
        Set_Has_Delayed_Freeze (Derived_Type);
        if Derive_Subps then
--- 5756,5764 ----
           return;
        end if;
  
!       --  Set delayed freeze and then derive subprograms, we need to do this
!       --  in this order so that derived subprograms inherit the derived freeze
!       --  if necessary.
  
        Set_Has_Delayed_Freeze (Derived_Type);
        if Derive_Subps then
*************** package body Sem_Ch3 is
*** 5298,5306 ****
        CR_Disc : Entity_Id;
  
     begin
!       --  A discriminal has the same names as the discriminant.
  
!       D_Minal := Make_Defining_Identifier (Sloc (Discrim), Chars (Discrim));
  
        Set_Ekind     (D_Minal, E_In_Parameter);
        Set_Mechanism (D_Minal, Default_Mechanism);
--- 5778,5788 ----
        CR_Disc : Entity_Id;
  
     begin
!       --  A discriminal has the same name as the discriminant
  
!       D_Minal :=
!         Make_Defining_Identifier (Sloc (Discrim),
!           Chars => Chars (Discrim));
  
        Set_Ekind     (D_Minal, E_In_Parameter);
        Set_Mechanism (D_Minal, Default_Mechanism);
*************** package body Sem_Ch3 is
*** 5334,5343 ****
        Def         : Node_Id;
        Derived_Def : Boolean := False) return Elist_Id
     is
!       C          : constant Node_Id := Constraint (Def);
!       Nb_Discr   : constant Nat     := Number_Discriminants (T);
        Discr_Expr : array (1 .. Nb_Discr) of Node_Id := (others => Empty);
!       --  Saves the expression corresponding to a given discriminant in T.
  
        function Pos_Of_Discr (T : Entity_Id; D : Entity_Id) return Nat;
        --  Return the Position number within array Discr_Expr of a discriminant
--- 5816,5826 ----
        Def         : Node_Id;
        Derived_Def : Boolean := False) return Elist_Id
     is
!       C        : constant Node_Id := Constraint (Def);
!       Nb_Discr : constant Nat     := Number_Discriminants (T);
! 
        Discr_Expr : array (1 .. Nb_Discr) of Node_Id := (others => Empty);
!       --  Saves the expression corresponding to a given discriminant in T
  
        function Pos_Of_Discr (T : Entity_Id; D : Entity_Id) return Nat;
        --  Return the Position number within array Discr_Expr of a discriminant
*************** package body Sem_Ch3 is
*** 5373,5383 ****
        E     : Entity_Id;
        Elist : constant Elist_Id := New_Elmt_List;
  
!       Constr    : Node_Id;
!       Expr      : Node_Id;
!       Id        : Node_Id;
!       Position  : Nat;
!       Found     : Boolean;
  
        Discrim_Present : Boolean := False;
  
--- 5856,5866 ----
        E     : Entity_Id;
        Elist : constant Elist_Id := New_Elmt_List;
  
!       Constr   : Node_Id;
!       Expr     : Node_Id;
!       Id       : Node_Id;
!       Position : Nat;
!       Found    : Boolean;
  
        Discrim_Present : Boolean := False;
  
*************** package body Sem_Ch3 is
*** 5429,5435 ****
  
        while Present (Constr) loop
  
!          --  Positional association forbidden after a named association.
  
           if Nkind (Constr) /= N_Discriminant_Association then
              Error_Msg_N ("positional association follows named one", Constr);
--- 5912,5918 ----
  
        while Present (Constr) loop
  
!          --  Positional association forbidden after a named association
  
           if Nkind (Constr) /= N_Discriminant_Association then
              Error_Msg_N ("positional association follows named one", Constr);
*************** package body Sem_Ch3 is
*** 5553,5559 ****
           end if;
        end loop;
  
!       --  Determine if there are discriminant expressions in the constraint.
  
        for J in Discr_Expr'Range loop
           if Denotes_Discriminant (Discr_Expr (J), Check_Protected => True) then
--- 6036,6042 ----
           end if;
        end loop;
  
!       --  Determine if there are discriminant expressions in the constraint
  
        for J in Discr_Expr'Range loop
           if Denotes_Discriminant (Discr_Expr (J), Check_Protected => True) then
*************** package body Sem_Ch3 is
*** 5562,5571 ****
        end loop;
  
        --  Build an element list consisting of the expressions given in the
!       --  discriminant constraint and apply the appropriate range
!       --  checks. The list is constructed after resolving any named
!       --  discriminant associations and therefore the expressions appear in
!       --  the textual order of the discriminants.
  
        Discr := First_Discriminant (T);
        for J in Discr_Expr'Range loop
--- 6045,6054 ----
        end loop;
  
        --  Build an element list consisting of the expressions given in the
!       --  discriminant constraint and apply the appropriate checks. The list
!       --  is constructed after resolving any named discriminant associations
!       --  and therefore the expressions appear in the textual order of the
!       --  discriminants.
  
        Discr := First_Discriminant (T);
        for J in Discr_Expr'Range loop
*************** package body Sem_Ch3 is
*** 5603,5608 ****
--- 6086,6094 ----
                 then
                    null;
  
+                elsif Is_Access_Type (Etype (Discr)) then
+                   Apply_Constraint_Check (Discr_Expr (J), Etype (Discr));
+ 
                 else
                    Apply_Range_Check (Discr_Expr (J), Etype (Discr));
                 end if;
*************** package body Sem_Ch3 is
*** 5671,5681 ****
           Set_Ekind (Def_Id, E_Class_Wide_Subtype);
  
        else
!          --  Incomplete type. Attach subtype to list of dependents, to be
!          --  completed with full view of parent type.
  
           Set_Ekind (Def_Id, Ekind (T));
!          Append_Elmt (Def_Id, Private_Dependents (T));
        end if;
  
        Set_Etype             (Def_Id, T);
--- 6157,6178 ----
           Set_Ekind (Def_Id, E_Class_Wide_Subtype);
  
        else
!          --  Incomplete type.  attach subtype to list of dependents, to be
!          --  completed with full view of parent type,  unless is it the
!          --  designated subtype of a record component within an init_proc.
!          --  This last case arises for a component of an access type whose
!          --  designated type is incomplete (e.g. a Taft Amendment type).
!          --  The designated subtype is within an inner scope, and needs no
!          --  elaboration, because only the access type is needed in the
!          --  initialization procedure.
  
           Set_Ekind (Def_Id, Ekind (T));
! 
!          if For_Access and then Within_Init_Proc then
!             null;
!          else
!             Append_Elmt (Def_Id, Private_Dependents (T));
!          end if;
        end if;
  
        Set_Etype             (Def_Id, T);
*************** package body Sem_Ch3 is
*** 5798,5827 ****
        C      : Node_Id;
        Id     : Node_Id;
  
     begin
        if Nkind (N) = N_Full_Type_Declaration then
           Constr := Constraint (Subtype_Indication (Type_Definition (N)));
  
!       --  ??? ??? is this assert right, I assume so otherwise Constr
!       --  would not be defined below (this used to be an elsif)
! 
!       else pragma Assert (Nkind (N) = N_Subtype_Declaration);
           Constr := New_Copy_Tree (Constraint (Subtype_Indication (N)));
-       end if;
  
!       --  If the constraint has discriminant associations, the discriminant
!       --  entity is already set, but it denotes a discriminant of the new
!       --  type, not the original parent, so it must be found anew.
  
!       C := First (Constraints (Constr));
  
        while Present (C) loop
- 
           if Nkind (C) = N_Discriminant_Association then
              Id := First (Selector_Names (C));
- 
              while Present (Id) loop
!                Set_Original_Discriminant (Id, Empty);
                 Next (Id);
              end loop;
           end if;
--- 6295,6354 ----
        C      : Node_Id;
        Id     : Node_Id;
  
+       procedure Set_Discriminant_Name (Id : Node_Id);
+       --  If the derived type has discriminants, they may rename discriminants
+       --  of the parent. When building the full view of the parent, we need to
+       --  recover the names of the original discriminants if the constraint is
+       --  given by named associations.
+ 
+       ---------------------------
+       -- Set_Discriminant_Name --
+       ---------------------------
+ 
+       procedure Set_Discriminant_Name (Id : Node_Id) is
+          Disc : Entity_Id;
+ 
+       begin
+          Set_Original_Discriminant (Id, Empty);
+ 
+          if Has_Discriminants (Typ) then
+             Disc := First_Discriminant (Typ);
+ 
+             while Present (Disc) loop
+                if Chars (Disc) = Chars (Id)
+                  and then Present (Corresponding_Discriminant (Disc))
+                then
+                   Set_Chars (Id, Chars (Corresponding_Discriminant (Disc)));
+                end if;
+                Next_Discriminant (Disc);
+             end loop;
+          end if;
+       end Set_Discriminant_Name;
+ 
+    --  Start of processing for Build_Underlying_Full_View
+ 
     begin
        if Nkind (N) = N_Full_Type_Declaration then
           Constr := Constraint (Subtype_Indication (Type_Definition (N)));
  
!       elsif Nkind (N) = N_Subtype_Declaration then
           Constr := New_Copy_Tree (Constraint (Subtype_Indication (N)));
  
!       elsif Nkind (N) = N_Component_Declaration then
!          Constr :=
!            New_Copy_Tree
!              (Constraint (Subtype_Indication (Component_Definition (N))));
  
!       else
!          raise Program_Error;
!       end if;
  
+       C := First (Constraints (Constr));
        while Present (C) loop
           if Nkind (C) = N_Discriminant_Association then
              Id := First (Selector_Names (C));
              while Present (Id) loop
!                Set_Discriminant_Name (Id);
                 Next (Id);
              end loop;
           end if;
*************** package body Sem_Ch3 is
*** 5829,5842 ****
           Next (C);
        end loop;
  
!       Indic := Make_Subtype_Declaration (Loc,
!          Defining_Identifier => Subt,
!          Subtype_Indication  =>
!            Make_Subtype_Indication (Loc,
!              Subtype_Mark => New_Reference_To (Par, Loc),
!              Constraint   => New_Copy_Tree (Constr)));
  
-       Insert_Before (N, Indic);
        Analyze (Indic);
        Set_Underlying_Full_View (Typ, Full_View (Subt));
     end Build_Underlying_Full_View;
--- 6356,6382 ----
           Next (C);
        end loop;
  
!       Indic :=
!         Make_Subtype_Declaration (Loc,
!           Defining_Identifier => Subt,
!           Subtype_Indication  =>
!             Make_Subtype_Indication (Loc,
!               Subtype_Mark => New_Reference_To (Par, Loc),
!               Constraint   => New_Copy_Tree (Constr)));
! 
!       --  If this is a component subtype for an outer itype, it is not
!       --  a list member, so simply set the parent link for analysis: if
!       --  the enclosing type does not need to be in a declarative list,
!       --  neither do the components.
! 
!       if Is_List_Member (N)
!         and then Nkind (N) /= N_Component_Declaration
!       then
!          Insert_Before (N, Indic);
!       else
!          Set_Parent (Indic, Parent (N));
!       end if;
  
        Analyze (Indic);
        Set_Underlying_Full_View (Typ, Full_View (Subt));
     end Build_Underlying_Full_View;
*************** package body Sem_Ch3 is
*** 5860,5867 ****
        while Present (Elmt) loop
           Subp := Node (Elmt);
  
!          --  Special exception, do not complain about failure to
!          --  override _Input and _Output, since we always provide
           --  automatic overridings for these subprograms.
  
           if Is_Abstract (Subp)
--- 6400,6407 ----
        while Present (Elmt) loop
           Subp := Node (Elmt);
  
!          --  Special exception, do not complain about failure to override the
!          --  stream routines _Input and _Output, since we always provide
           --  automatic overridings for these subprograms.
  
           if Is_Abstract (Subp)
*************** package body Sem_Ch3 is
*** 5931,5939 ****
        C : Entity_Id;
  
     begin
!       --  ??? Also need to check components of record extensions,
!       --  but not components of protected types (which are always
!       --  limited).
  
        if not Is_Limited_Type (T) then
           if Ekind (T) = E_Record_Type then
--- 6471,6478 ----
        C : Entity_Id;
  
     begin
!       --  ??? Also need to check components of record extensions, but not
!       --  components of protected types (which are always limited).
  
        if not Is_Limited_Type (T) then
           if Ekind (T) = E_Record_Type then
*************** package body Sem_Ch3 is
*** 6011,6019 ****
           end if;
  
           --  If a generated entity has no completion, then either previous
!          --  semantic errors have disabled the expansion phase, or else
!          --  we had missing subunits, or else we are compiling without expan-
!          --  sion, or else something is very wrong.
  
           if not Comes_From_Source (E) then
              pragma Assert
--- 6550,6558 ----
           end if;
  
           --  If a generated entity has no completion, then either previous
!          --  semantic errors have disabled the expansion phase, or else we had
!          --  missing subunits, or else we are compiling without expan- sion,
!          --  or else something is very wrong.
  
           if not Comes_From_Source (E) then
              pragma Assert
*************** package body Sem_Ch3 is
*** 6096,6102 ****
           --  parent:
  
           --    procedure Parent.Child (...);
!          --
           --    with Parent.Child;
           --    package body Parent is
  
--- 6635,6641 ----
           --  parent:
  
           --    procedure Parent.Child (...);
! 
           --    with Parent.Child;
           --    package body Parent is
  
*************** package body Sem_Ch3 is
*** 6150,6159 ****
           then
              Post_Error;
  
!          --  A single task declared in the current scope is
!          --  a constant, verify that the body of its anonymous
!          --  type is in the same scope. If the task is defined
!          --  elsewhere, this may be a renaming declaration for
           --  which no completion is needed.
  
           elsif Ekind (E) = E_Constant
--- 6689,6697 ----
           then
              Post_Error;
  
!          --  A single task declared in the current scope is a constant, verify
!          --  that the body of its anonymous type is in the same scope. If the
!          --  task is defined elsewhere, this may be a renaming declaration for
           --  which no completion is needed.
  
           elsif Ekind (E) = E_Constant
*************** package body Sem_Ch3 is
*** 6210,6216 ****
        Rewrite (E,
          Make_Real_Literal (Sloc (E), Ureal_Tenth));
        Analyze_And_Resolve (E, Standard_Float);
- 
     end Check_Delta_Expression;
  
     -----------------------------
--- 6748,6753 ----
*************** package body Sem_Ch3 is
*** 6252,6263 ****
          and then not In_Instance
          and then not In_Inlined_Body
        then
!          --  Ada0Y (AI-287): Relax the strictness of the front-end in case of
!          --  limited aggregates and extension aggregates.
  
!          if Extensions_Allowed
             and then (Nkind (Exp) = N_Aggregate
!                      or else Nkind (Exp) = N_Extension_Aggregate)
           then
              null;
           else
--- 6789,6800 ----
          and then not In_Instance
          and then not In_Inlined_Body
        then
!          --  Ada 2005 (AI-287): Relax the strictness of the front-end in
!          --  case of limited aggregates and extension aggregates.
  
!          if Ada_Version >= Ada_05
             and then (Nkind (Exp) = N_Aggregate
!                       or else Nkind (Exp) = N_Extension_Aggregate)
           then
              null;
           else
*************** package body Sem_Ch3 is
*** 6285,6291 ****
     begin
        if Has_Discriminants (T) then
  
!          --  Make the discriminants visible to component declarations.
  
           declare
              D    : Entity_Id := First_Discriminant (T);
--- 6822,6828 ----
     begin
        if Has_Discriminants (T) then
  
!          --  Make the discriminants visible to component declarations
  
           declare
              D    : Entity_Id := First_Discriminant (T);
*************** package body Sem_Ch3 is
*** 6298,6307 ****
                 Set_Is_Immediately_Visible (D);
                 Set_Homonym (D, Prev);
  
!                --  This restriction gets applied to the full type here; it
!                --  has already been applied earlier to the partial view
  
!                Check_Access_Discriminant_Requires_Limited (Parent (D), N);
  
                 Next_Discriminant (D);
              end loop;
--- 6835,6850 ----
                 Set_Is_Immediately_Visible (D);
                 Set_Homonym (D, Prev);
  
!                --  Ada 2005 (AI-230): Access discriminant allowed in
!                --  non-limited record types.
  
!                if Ada_Version < Ada_05 then
! 
!                   --  This restriction gets applied to the full type here; it
!                   --  has already been applied earlier to the partial view
! 
!                   Check_Access_Discriminant_Requires_Limited (Parent (D), N);
!                end if;
  
                 Next_Discriminant (D);
              end loop;
*************** package body Sem_Ch3 is
*** 6365,6371 ****
        Save_Homonym     := Homonym (Priv);
  
        case Ekind (Full_Base) is
- 
           when E_Record_Type    |
                E_Record_Subtype |
                Class_Wide_Kind  |
--- 6908,6913 ----
*************** package body Sem_Ch3 is
*** 6383,6396 ****
              Set_Chars          (Full, Chars (Priv));
              Conditional_Delay  (Full, Priv);
              Set_Sloc           (Full, Sloc (Priv));
- 
        end case;
  
        Set_Next_Entity (Full, Save_Next_Entity);
        Set_Homonym     (Full, Save_Homonym);
        Set_Associated_Node_For_Itype (Full, Related_Nod);
  
!       --  Set common attributes for all subtypes.
  
        Set_Ekind (Full, Subtype_Kind (Ekind (Full_Base)));
  
--- 6925,6937 ----
              Set_Chars          (Full, Chars (Priv));
              Conditional_Delay  (Full, Priv);
              Set_Sloc           (Full, Sloc (Priv));
        end case;
  
        Set_Next_Entity (Full, Save_Next_Entity);
        Set_Homonym     (Full, Save_Homonym);
        Set_Associated_Node_For_Itype (Full, Related_Nod);
  
!       --  Set common attributes for all subtypes
  
        Set_Ekind (Full, Subtype_Kind (Ekind (Full_Base)));
  
*************** package body Sem_Ch3 is
*** 6404,6410 ****
        --       Set_Etype (Full, Full_Base);
  
        --  then we get inconsistencies in the front-end (confusion between
!       --  views). Several outstanding bugs are related to this.
  
        Set_Is_First_Subtype (Full, False);
        Set_Scope            (Full, Scope (Priv));
--- 6945,6951 ----
        --       Set_Etype (Full, Full_Base);
  
        --  then we get inconsistencies in the front-end (confusion between
!       --  views). Several outstanding bugs are related to this ???
  
        Set_Is_First_Subtype (Full, False);
        Set_Scope            (Full, Scope (Priv));
*************** package body Sem_Ch3 is
*** 6421,6441 ****
           if Has_Discriminants (Full_Base) then
              Set_Discriminant_Constraint
                (Full, Discriminant_Constraint (Full_Base));
           end if;
        end if;
  
        Set_First_Rep_Item     (Full, First_Rep_Item (Full_Base));
        Set_Depends_On_Private (Full, Has_Private_Component (Full));
  
!       --  Freeze the private subtype entity if its parent is delayed,
!       --  and not already frozen. We skip this processing if the type
!       --  is an anonymous subtype of a record component, or is the
!       --  corresponding record of a protected type, since ???
  
        if not Is_Type (Scope (Full)) then
           Set_Has_Delayed_Freeze (Full,
             Has_Delayed_Freeze (Full_Base)
!                and then (not Is_Frozen (Full_Base)));
        end if;
  
        Set_Freeze_Node (Full, Empty);
--- 6962,6988 ----
           if Has_Discriminants (Full_Base) then
              Set_Discriminant_Constraint
                (Full, Discriminant_Constraint (Full_Base));
+ 
+             --  The partial view may have been indefinite, the full view
+             --  might not be.
+ 
+             Set_Has_Unknown_Discriminants
+               (Full, Has_Unknown_Discriminants (Full_Base));
           end if;
        end if;
  
        Set_First_Rep_Item     (Full, First_Rep_Item (Full_Base));
        Set_Depends_On_Private (Full, Has_Private_Component (Full));
  
!       --  Freeze the private subtype entity if its parent is delayed, and not
!       --  already frozen. We skip this processing if the type is an anonymous
!       --  subtype of a record component, or is the corresponding record of a
!       --  protected type, since ???
  
        if not Is_Type (Scope (Full)) then
           Set_Has_Delayed_Freeze (Full,
             Has_Delayed_Freeze (Full_Base)
!              and then (not Is_Frozen (Full_Base)));
        end if;
  
        Set_Freeze_Node (Full, Empty);
*************** package body Sem_Ch3 is
*** 6445,6450 ****
--- 6992,6998 ----
        if Has_Discriminants (Full) then
           Set_Stored_Constraint_From_Discriminant_Constraint (Full);
           Set_Stored_Constraint (Priv, Stored_Constraint (Full));
+ 
           if Has_Unknown_Discriminants (Full) then
              Set_Discriminant_Constraint (Full, No_Elist);
           end if;
*************** package body Sem_Ch3 is
*** 6453,6485 ****
        if Ekind (Full_Base) = E_Record_Type
          and then Has_Discriminants (Full_Base)
          and then Has_Discriminants (Priv) -- might not, if errors
          and then not Is_Empty_Elmt_List (Discriminant_Constraint (Priv))
        then
           Create_Constrained_Components
             (Full, Related_Nod, Full_Base, Discriminant_Constraint (Priv));
  
        --  If the full base is itself derived from private, build a congruent
!       --  subtype of its underlying type, for use by the back end.
  
        elsif Ekind (Full_Base) in Private_Kind
          and then Is_Derived_Type (Full_Base)
          and then Has_Discriminants (Full_Base)
!         and then
!           Nkind (Subtype_Indication (Parent (Priv))) = N_Subtype_Indication
        then
!          Build_Underlying_Full_View (Parent (Priv), Full, Etype (Full_Base));
  
        elsif Is_Record_Type (Full_Base) then
  
!          --  Show Full is simply a renaming of Full_Base.
  
           Set_Cloned_Subtype (Full, Full_Base);
        end if;
  
!       --  It is unsafe to share to bounds of a scalar type, because the
!       --  Itype is elaborated on demand, and if a bound is non-static
!       --  then different orders of elaboration in different units will
!       --  lead to different external symbols.
  
        if Is_Scalar_Type (Full_Base) then
           Set_Scalar_Range (Full,
--- 7001,7045 ----
        if Ekind (Full_Base) = E_Record_Type
          and then Has_Discriminants (Full_Base)
          and then Has_Discriminants (Priv) -- might not, if errors
+         and then not Has_Unknown_Discriminants (Priv)
          and then not Is_Empty_Elmt_List (Discriminant_Constraint (Priv))
        then
           Create_Constrained_Components
             (Full, Related_Nod, Full_Base, Discriminant_Constraint (Priv));
  
        --  If the full base is itself derived from private, build a congruent
!       --  subtype of its underlying type, for use by the back end. For a
!       --  constrained record component, the declaration cannot be placed on
!       --  the component list, but it must neverthess be built an analyzed, to
!       --  supply enough information for gigi to compute the size of component.
  
        elsif Ekind (Full_Base) in Private_Kind
          and then Is_Derived_Type (Full_Base)
          and then Has_Discriminants (Full_Base)
!         and then (Ekind (Current_Scope) /= E_Record_Subtype)
        then
!          if not Is_Itype (Priv)
!            and then
!              Nkind (Subtype_Indication (Parent (Priv))) = N_Subtype_Indication
!          then
!             Build_Underlying_Full_View
!               (Parent (Priv), Full, Etype (Full_Base));
! 
!          elsif Nkind (Related_Nod) = N_Component_Declaration then
!             Build_Underlying_Full_View (Related_Nod, Full, Etype (Full_Base));
!          end if;
  
        elsif Is_Record_Type (Full_Base) then
  
!          --  Show Full is simply a renaming of Full_Base
  
           Set_Cloned_Subtype (Full, Full_Base);
        end if;
  
!       --  It is unsafe to share to bounds of a scalar type, because the Itype
!       --  is elaborated on demand, and if a bound is non-static then different
!       --  orders of elaboration in different units will lead to different
!       --  external symbols.
  
        if Is_Scalar_Type (Full_Base) then
           Set_Scalar_Range (Full,
*************** package body Sem_Ch3 is
*** 6499,6516 ****
           end if;
        end if;
  
!       --  ??? It seems that a lot of fields are missing that should be
!       --  copied from  Full_Base to Full. Here are some that are introduced
!       --  in a non-disruptive way but a cleanup is necessary.
  
        if Is_Tagged_Type (Full_Base) then
           Set_Is_Tagged_Type (Full);
           Set_Primitive_Operations (Full, Primitive_Operations (Full_Base));
           Set_Class_Wide_Type      (Full, Class_Wide_Type (Full_Base));
  
        elsif Is_Concurrent_Type (Full_Base) then
           if Has_Discriminants (Full)
             and then Present (Corresponding_Record_Type (Full_Base))
           then
              Set_Corresponding_Record_Type (Full,
                Constrain_Corresponding_Record
--- 7059,7082 ----
           end if;
        end if;
  
!       --  ??? It seems that a lot of fields are missing that should be copied
!       --  from Full_Base to Full. Here are some that are introduced in a
!       --  non-disruptive way but a cleanup is necessary.
  
        if Is_Tagged_Type (Full_Base) then
           Set_Is_Tagged_Type (Full);
           Set_Primitive_Operations (Full, Primitive_Operations (Full_Base));
           Set_Class_Wide_Type      (Full, Class_Wide_Type (Full_Base));
  
+       --  If this is a subtype of a protected or task type, constrain its
+       --  corresponding record, unless this is a subtype without constraints,
+       --  i.e. a simple renaming as with an actual subtype in an instance.
+ 
        elsif Is_Concurrent_Type (Full_Base) then
           if Has_Discriminants (Full)
             and then Present (Corresponding_Record_Type (Full_Base))
+            and then
+              not Is_Empty_Elmt_List (Discriminant_Constraint (Full))
           then
              Set_Corresponding_Record_Type (Full,
                Constrain_Corresponding_Record
*************** package body Sem_Ch3 is
*** 6522,6528 ****
                Corresponding_Record_Type (Full_Base));
           end if;
        end if;
- 
     end Complete_Private_Subtype;
  
     ----------------------------
--- 7088,7093 ----
*************** package body Sem_Ch3 is
*** 6555,6561 ****
        begin
           if Is_Record_Type (Typ) then
              Comp := First_Component (Typ);
- 
              while Present (Comp) loop
                 if Comes_From_Source (Comp) then
                    if Present (Expression (Parent (Comp)))
--- 7120,7125 ----
*************** package body Sem_Ch3 is
*** 6609,6615 ****
           end if;
  
        else
!          --  Current declaration is illegal, diagnosed below in Enter_Name.
  
           T := Empty;
           New_T := Any_Type;
--- 7173,7179 ----
           end if;
  
        else
!          --  Current declaration is illegal, diagnosed below in Enter_Name
  
           T := Empty;
           New_T := Any_Type;
*************** package body Sem_Ch3 is
*** 6625,6631 ****
        then
           Enter_Name (Id);
  
!       --  Verify that types of both declarations match.
  
        elsif Base_Type (Etype (Prev)) /= Base_Type (New_T) then
           Error_Msg_Sloc := Sloc (Prev);
--- 7189,7195 ----
        then
           Enter_Name (Id);
  
!       --  Verify that types of both declarations match
  
        elsif Base_Type (Etype (Prev)) /= Base_Type (New_T) then
           Error_Msg_Sloc := Sloc (Prev);
*************** package body Sem_Ch3 is
*** 6700,6711 ****
                or else Is_Incomplete_Or_Private_Type (Desig_Type))
          and then not Is_Constrained (Desig_Type)
        then
!          --  ??? The following code is a temporary kludge to ignore
!          --  discriminant constraint on access type if
!          --  it is constraining the current record. Avoid creating the
!          --  implicit subtype of the record we are currently compiling
!          --  since right now, we cannot handle these.
!          --  For now, just return the access type itself.
  
           if Desig_Type = Current_Scope
             and then No (Def_Id)
--- 7264,7274 ----
                or else Is_Incomplete_Or_Private_Type (Desig_Type))
          and then not Is_Constrained (Desig_Type)
        then
!          --  ??? The following code is a temporary kludge to ignore a
!          --  discriminant constraint on access type if it is constraining
!          --  the current record. Avoid creating the implicit subtype of the
!          --  record we are currently compiling since right now, we cannot
!          --  handle these. For now, just return the access type itself.
  
           if Desig_Type = Current_Scope
             and then No (Def_Id)
*************** package body Sem_Ch3 is
*** 6713,6726 ****
              Set_Ekind (Desig_Subtype, E_Record_Subtype);
              Def_Id := Entity (Subtype_Mark (S));
  
!             --  This call added to ensure that the constraint is
!             --  analyzed (needed for a B test). Note that we
!             --  still return early from this procedure to avoid
!             --  recursive processing. ???
  
              Constrain_Discriminated_Type
                (Desig_Subtype, S, Related_Nod, For_Access => True);
- 
              return;
           end if;
  
--- 7276,7287 ----
              Set_Ekind (Desig_Subtype, E_Record_Subtype);
              Def_Id := Entity (Subtype_Mark (S));
  
!             --  This call added to ensure that the constraint is analyzed
!             --  (needed for a B test). Note that we still return early from
!             --  this procedure to avoid recursive processing. ???
  
              Constrain_Discriminated_Type
                (Desig_Subtype, S, Related_Nod, For_Access => True);
              return;
           end if;
  
*************** package body Sem_Ch3 is
*** 6745,6751 ****
                 if Nkind (Pack) = N_Package_Declaration then
                    Decls := Visible_Declarations (Specification (Pack));
                    Decl := First (Decls);
- 
                    while Present (Decl) loop
                       if (Nkind (Decl) = N_Private_Type_Declaration
                            and then
--- 7306,7311 ----
*************** package body Sem_Ch3 is
*** 6814,6825 ****
        Set_Depends_On_Private       (Def_Id, Has_Private_Component (Def_Id));
        Set_Is_Access_Constant       (Def_Id, Is_Access_Constant (T));
  
!       --  Itypes created for constrained record components do not receive
!       --  a freeze node, they are elaborated when first seen.
! 
!       if not Is_Record_Type (Current_Scope) then
!          Conditional_Delay (Def_Id, T);
!       end if;
     end Constrain_Access;
  
     ---------------------
--- 7374,7380 ----
        Set_Depends_On_Private       (Def_Id, Has_Private_Component (Def_Id));
        Set_Is_Access_Constant       (Def_Id, Is_Access_Constant (T));
  
!       Conditional_Delay (Def_Id, T);
     end Constrain_Access;
  
     ---------------------
*************** package body Sem_Ch3 is
*** 6914,6930 ****
        Set_Is_Private_Composite (Def_Id, Is_Private_Composite (T));
        Set_Is_Limited_Composite (Def_Id, Is_Limited_Composite (T));
  
!       --  If the subtype is not that of a record component, build a freeze
!       --  node if parent still needs one.
! 
!       --  If the subtype is not that of a record component, make sure
        --  that the Depends_On_Private status is set (explanation ???)
        --  and also that a conditional delay is set.
  
!       if not Is_Type (Scope (Def_Id)) then
!          Set_Depends_On_Private (Def_Id, Depends_On_Private (T));
!          Conditional_Delay (Def_Id, T);
!       end if;
  
     end Constrain_Array;
  
--- 7469,7480 ----
        Set_Is_Private_Composite (Def_Id, Is_Private_Composite (T));
        Set_Is_Limited_Composite (Def_Id, Is_Limited_Composite (T));
  
!       --  Build a freeze node if parent still needs one.  Also, make sure
        --  that the Depends_On_Private status is set (explanation ???)
        --  and also that a conditional delay is set.
  
!       Set_Depends_On_Private (Def_Id, Depends_On_Private (T));
!       Conditional_Delay (Def_Id, T);
  
     end Constrain_Array;
  
*************** package body Sem_Ch3 is
*** 6943,6955 ****
  
        function Build_Constrained_Array_Type
          (Old_Type : Entity_Id) return Entity_Id;
!       --  If Old_Type is an array type, one of whose indices is
!       --  constrained by a discriminant, build an Itype whose constraint
!       --  replaces the discriminant with its value in the constraint.
  
        function Build_Constrained_Discriminated_Type
          (Old_Type : Entity_Id) return Entity_Id;
!       --  Ditto for record components.
  
        function Build_Constrained_Access_Type
          (Old_Type : Entity_Id) return Entity_Id;
--- 7493,7505 ----
  
        function Build_Constrained_Array_Type
          (Old_Type : Entity_Id) return Entity_Id;
!       --  If Old_Type is an array type, one of whose indices is constrained
!       --  by a discriminant, build an Itype whose constraint replaces the
!       --  discriminant with its value in the constraint.
  
        function Build_Constrained_Discriminated_Type
          (Old_Type : Entity_Id) return Entity_Id;
!       --  Ditto for record components
  
        function Build_Constrained_Access_Type
          (Old_Type : Entity_Id) return Entity_Id;
*************** package body Sem_Ch3 is
*** 6961,6970 ****
        --  that apply to T. This routine builds the constrained subtype.
  
        function Is_Discriminant (Expr : Node_Id) return Boolean;
!       --  Returns True if Expr is a discriminant.
  
        function Get_Discr_Value (Discrim : Entity_Id) return Node_Id;
!       --  Find the value of discriminant Discrim in Constraint.
  
        -----------------------------------
        -- Build_Constrained_Access_Type --
--- 7511,7520 ----
        --  that apply to T. This routine builds the constrained subtype.
  
        function Is_Discriminant (Expr : Node_Id) return Boolean;
!       --  Returns True if Expr is a discriminant
  
        function Get_Discr_Value (Discrim : Entity_Id) return Node_Id;
!       --  Find the value of discriminant Discrim in Constraint
  
        -----------------------------------
        -- Build_Constrained_Access_Type --
*************** package body Sem_Ch3 is
*** 7021,7026 ****
--- 7571,7577 ----
           end if;
  
           if Desig_Subtype /= Desig_Type then
+ 
              --  The Related_Node better be here or else we won't be able
              --  to attach new itypes to a node in the tree.
  
*************** package body Sem_Ch3 is
*** 7171,7178 ****
           Btyp        : Entity_Id := Base_Type (T);
  
        begin
!          --  The Related_Node better be here or else we won't be able
!          --  to attach new itypes to a node in the tree.
  
           pragma Assert (Present (Related_Node));
  
--- 7722,7729 ----
           Btyp        : Entity_Id := Base_Type (T);
  
        begin
!          --  The Related_Node better be here or else we won't be able to
!          --  attach new itypes to a node in the tree.
  
           pragma Assert (Present (Related_Node));
  
*************** package body Sem_Ch3 is
*** 7197,7205 ****
             Make_Subtype_Declaration (Loc,
               Defining_Identifier => Def_Id,
               Subtype_Indication  => Indic);
           Set_Parent (Subtyp_Decl, Parent (Related_Node));
  
!          --  Itypes must be analyzed with checks off (see itypes.ads).
  
           Analyze (Subtyp_Decl, Suppress => All_Checks);
  
--- 7748,7757 ----
             Make_Subtype_Declaration (Loc,
               Defining_Identifier => Def_Id,
               Subtype_Indication  => Indic);
+ 
           Set_Parent (Subtyp_Decl, Parent (Related_Node));
  
!          --  Itypes must be analyzed with checks off (see package Itypes)
  
           Analyze (Subtyp_Decl, Suppress => All_Checks);
  
*************** package body Sem_Ch3 is
*** 7236,7244 ****
  
           --  The corresponding_Discriminant mechanism is incomplete, because
           --  the correspondence between new and old discriminants is not one
!          --  to one: one new discriminant can constrain several old ones.
!          --  In that case, scan sequentially the stored_constraint, the list
!          --  of discriminants of the parents, and the constraints.
  
           if Is_Derived_Type (Typ)
             and then Present (Stored_Constraint (Typ))
--- 7788,7796 ----
  
           --  The corresponding_Discriminant mechanism is incomplete, because
           --  the correspondence between new and old discriminants is not one
!          --  to one: one new discriminant can constrain several old ones. In
!          --  that case, scan sequentially the stored_constraint, the list of
!          --  discriminants of the parents, and the constraints.
  
           if Is_Derived_Type (Typ)
             and then Present (Stored_Constraint (Typ))
*************** package body Sem_Ch3 is
*** 7306,7312 ****
              return True;
           end if;
  
!          --  In all other cases we have something wrong.
  
           return False;
        end Is_Discriminant;
--- 7858,7864 ----
              return True;
           end if;
  
!          --  In all other cases we have something wrong
  
           return False;
        end Is_Discriminant;
*************** package body Sem_Ch3 is
*** 7388,7412 ****
        Related_Nod : Node_Id;
        Related_Id  : Entity_Id) return Entity_Id
     is
!       T_Sub : constant Entity_Id
!         := Create_Itype (E_Record_Subtype, Related_Nod, Related_Id, 'V');
  
     begin
!       Set_Etype                   (T_Sub, Corr_Rec);
!       Init_Size_Align             (T_Sub);
!       Set_Has_Discriminants       (T_Sub, Has_Discriminants (Prot_Subt));
!       Set_Is_Constrained          (T_Sub, True);
!       Set_First_Entity            (T_Sub, First_Entity (Corr_Rec));
!       Set_Last_Entity             (T_Sub, Last_Entity  (Corr_Rec));
  
        Conditional_Delay (T_Sub, Corr_Rec);
  
        if Has_Discriminants (Prot_Subt) then -- False only if errors.
!          Set_Discriminant_Constraint (T_Sub,
!                                       Discriminant_Constraint (Prot_Subt));
           Set_Stored_Constraint_From_Discriminant_Constraint (T_Sub);
!          Create_Constrained_Components (T_Sub, Related_Nod, Corr_Rec,
!                                         Discriminant_Constraint (T_Sub));
        end if;
  
        Set_Depends_On_Private      (T_Sub, Has_Private_Component (T_Sub));
--- 7940,7964 ----
        Related_Nod : Node_Id;
        Related_Id  : Entity_Id) return Entity_Id
     is
!       T_Sub : constant Entity_Id :=
!                 Create_Itype (E_Record_Subtype, Related_Nod, Related_Id, 'V');
  
     begin
!       Set_Etype             (T_Sub, Corr_Rec);
!       Init_Size_Align       (T_Sub);
!       Set_Has_Discriminants (T_Sub, Has_Discriminants (Prot_Subt));
!       Set_Is_Constrained    (T_Sub, True);
!       Set_First_Entity      (T_Sub, First_Entity (Corr_Rec));
!       Set_Last_Entity       (T_Sub, Last_Entity  (Corr_Rec));
  
        Conditional_Delay (T_Sub, Corr_Rec);
  
        if Has_Discriminants (Prot_Subt) then -- False only if errors.
!          Set_Discriminant_Constraint
!            (T_Sub, Discriminant_Constraint (Prot_Subt));
           Set_Stored_Constraint_From_Discriminant_Constraint (T_Sub);
!          Create_Constrained_Components
!            (T_Sub, Related_Nod, Corr_Rec, Discriminant_Constraint (T_Sub));
        end if;
  
        Set_Depends_On_Private      (T_Sub, Has_Private_Component (T_Sub));
*************** package body Sem_Ch3 is
*** 7469,7480 ****
        if No (Range_Expr) then
           Bound_Val := (Ureal_10 ** Digits_Val - Ureal_1) * Small_Value (T);
           Range_Expr :=
!             Make_Range (Loc,
!                Low_Bound =>
!                  Convert_To (T, Make_Real_Literal (Loc, (-Bound_Val))),
!                High_Bound =>
!                  Convert_To (T, Make_Real_Literal (Loc, Bound_Val)));
! 
        end if;
  
        Set_Scalar_Range_For_Subtype (Def_Id, Range_Expr, T);
--- 8021,8031 ----
        if No (Range_Expr) then
           Bound_Val := (Ureal_10 ** Digits_Val - Ureal_1) * Small_Value (T);
           Range_Expr :=
!            Make_Range (Loc,
!              Low_Bound =>
!                Convert_To (T, Make_Real_Literal (Loc, (-Bound_Val))),
!              High_Bound =>
!                Convert_To (T, Make_Real_Literal (Loc, Bound_Val)));
        end if;
  
        Set_Scalar_Range_For_Subtype (Def_Id, Range_Expr, T);
*************** package body Sem_Ch3 is
*** 7543,7549 ****
           T := Designated_Type (T);
        end if;
  
!       if not Has_Discriminants (T) then
           Error_Msg_N ("invalid constraint: type has no discriminant", C);
           Fixup_Bad_Constraint;
           return;
--- 8094,8108 ----
           T := Designated_Type (T);
        end if;
  
!       --  Check that the type has visible discriminants. The type may be
!       --  a private type with unknown discriminants whose full view has
!       --  discriminants which are invisible.
! 
!       if not Has_Discriminants (T)
!         or else
!           (Has_Unknown_Discriminants (T)
!              and then Is_Private_Type (T))
!       then
           Error_Msg_N ("invalid constraint: type has no discriminant", C);
           Fixup_Bad_Constraint;
           return;
*************** package body Sem_Ch3 is
*** 7597,7603 ****
        Set_Scalar_Range_For_Subtype (Def_Id, Range_Expression (C), T);
  
        Set_Discrete_RM_Size (Def_Id);
- 
     end Constrain_Enumeration;
  
     ----------------------
--- 8156,8161 ----
*************** package body Sem_Ch3 is
*** 7624,7629 ****
--- 8182,8189 ----
        --  Digits constraint present
  
        if Nkind (C) = N_Digits_Constraint then
+          Check_Restriction (No_Obsolescent_Features, C);
+ 
           if Warn_On_Obsolescent_Feature then
              Error_Msg_N
                ("subtype digits constraint is an " &
*************** package body Sem_Ch3 is
*** 7683,7692 ****
        Suffix       : Character;
        Suffix_Index : Nat)
     is
!       Def_Id     : Entity_Id;
!       R          : Node_Id := Empty;
!       Checks_Off : Boolean := False;
!       T          : constant Entity_Id := Etype (Index);
  
     begin
        if Nkind (S) = N_Range
--- 8243,8251 ----
        Suffix       : Character;
        Suffix_Index : Nat)
     is
!       Def_Id : Entity_Id;
!       R      : Node_Id := Empty;
!       T      : constant Entity_Id := Etype (Index);
  
     begin
        if Nkind (S) = N_Range
*************** package body Sem_Ch3 is
*** 7694,7720 ****
            (Nkind (S) = N_Attribute_Reference
              and then Attribute_Name (S) = Name_Range)
        then
!          --  A Range attribute will transformed into N_Range by Resolve.
  
           Analyze (S);
           Set_Etype (S, T);
           R := S;
  
!          --  ??? Why on earth do we turn checks of in this very specific case ?
! 
!          --  From the revision history: (Constrain_Index): Call
!          --  Process_Range_Expr_In_Decl with range checking off for range
!          --  bounds that are attributes. This avoids some horrible
!          --  constraint error checks.
! 
!          if Nkind (R) = N_Range
!            and then Nkind (Low_Bound (R)) = N_Attribute_Reference
!            and then Nkind (High_Bound (R)) = N_Attribute_Reference
!          then
!             Checks_Off := True;
!          end if;
! 
!          Process_Range_Expr_In_Decl (R, T, Empty_List, Checks_Off);
  
           if not Error_Posted (S)
             and then
--- 8253,8265 ----
            (Nkind (S) = N_Attribute_Reference
              and then Attribute_Name (S) = Name_Range)
        then
!          --  A Range attribute will transformed into N_Range by Resolve
  
           Analyze (S);
           Set_Etype (S, T);
           R := S;
  
!          Process_Range_Expr_In_Decl (R, T, Empty_List);
  
           if not Error_Posted (S)
             and then
*************** package body Sem_Ch3 is
*** 7731,7744 ****
           end if;
  
        elsif Nkind (S) = N_Subtype_Indication then
!          --  the parser has verified that this is a discrete indication.
  
           Resolve_Discrete_Subtype_Indication (S, T);
           R := Range_Expression (Constraint (S));
  
        elsif Nkind (S) = N_Discriminant_Association then
  
!          --  syntactically valid in subtype indication.
  
           Error_Msg_N ("invalid index constraint", S);
           Rewrite (S, New_Occurrence_Of (T, Sloc (S)));
--- 8276,8290 ----
           end if;
  
        elsif Nkind (S) = N_Subtype_Indication then
! 
!          --  The parser has verified that this is a discrete indication
  
           Resolve_Discrete_Subtype_Indication (S, T);
           R := Range_Expression (Constraint (S));
  
        elsif Nkind (S) = N_Discriminant_Association then
  
!          --  Syntactically valid in subtype indication
  
           Error_Msg_N ("invalid index constraint", S);
           Rewrite (S, New_Occurrence_Of (T, Sloc (S)));
*************** package body Sem_Ch3 is
*** 7750,7756 ****
           Analyze (S);
  
           if Is_Entity_Name (S) then
- 
              if not Is_Type (Entity (S)) then
                 Error_Msg_N ("expect subtype mark for index constraint", S);
  
--- 8296,8301 ----
*************** package body Sem_Ch3 is
*** 7814,7820 ****
        Set_Size_Info        (Def_Id,                  (T));
        Set_First_Rep_Item   (Def_Id, First_Rep_Item   (T));
        Set_Discrete_RM_Size (Def_Id);
- 
     end Constrain_Integer;
  
     ------------------------------
--- 8359,8364 ----
*************** package body Sem_Ch3 is
*** 7841,7846 ****
--- 8385,8392 ----
        --  Delta constraint present
  
        if Nkind (C) = N_Delta_Constraint then
+          Check_Restriction (No_Obsolescent_Features, C);
+ 
           if Warn_On_Obsolescent_Feature then
              Error_Msg_S
                ("subtype delta constraint is an " &
*************** package body Sem_Ch3 is
*** 7945,7951 ****
        then
           return;
  
!       --  Here we do the analysis of the range.
  
        --  Note: we do this manually, since if we do a normal Analyze and
        --  Resolve call, there are problems with the conversions used for
--- 8491,8497 ----
        then
           return;
  
!       --  Here we do the analysis of the range
  
        --  Note: we do this manually, since if we do a normal Analyze and
        --  Resolve call, there are problems with the conversions used for
*************** package body Sem_Ch3 is
*** 7962,7968 ****
     -------------------
  
     procedure Copy_And_Swap (Priv, Full : Entity_Id) is
- 
     begin
        --  Initialize new full declaration entity by copying the pertinent
        --  fields of the corresponding private declaration entity.
--- 8508,8513 ----
*************** package body Sem_Ch3 is
*** 8014,8022 ****
        Set_First_Entity               (Full, First_Entity            (Priv));
        Set_Last_Entity                (Full, Last_Entity             (Priv));
  
!       --  If access types have been recorded for later handling, keep them
!       --  in the full view so that they get handled when the full view
!       --  freeze node is expanded.
  
        if Present (Freeze_Node (Priv))
          and then Present (Access_Types_To_Process (Freeze_Node (Priv)))
--- 8559,8567 ----
        Set_First_Entity               (Full, First_Entity            (Priv));
        Set_Last_Entity                (Full, Last_Entity             (Priv));
  
!       --  If access types have been recorded for later handling, keep them in
!       --  the full view so that they get handled when the full view freeze
!       --  node is expanded.
  
        if Present (Freeze_Node (Priv))
          and then Present (Access_Types_To_Process (Freeze_Node (Priv)))
*************** package body Sem_Ch3 is
*** 8097,8107 ****
        Is_Static   : Boolean := True;
  
        procedure Collect_Fixed_Components (Typ : Entity_Id);
!       --  Collect components of parent type that do not appear in a variant
!       --  part.
  
        procedure Create_All_Components;
!       --  Iterate over Comp_List to create the components of the subtype.
  
        function Create_Component (Old_Compon : Entity_Id) return Entity_Id;
        --  Creates a new component from Old_Compon, copying all the fields from
--- 8642,8651 ----
        Is_Static   : Boolean := True;
  
        procedure Collect_Fixed_Components (Typ : Entity_Id);
!       --  Collect parent type components that do not appear in a variant part
  
        procedure Create_All_Components;
!       --  Iterate over Comp_List to create the components of the subtype
  
        function Create_Component (Old_Compon : Entity_Id) return Entity_Id;
        --  Creates a new component from Old_Compon, copying all the fields from
*************** package body Sem_Ch3 is
*** 8118,8129 ****
  
        procedure Collect_Fixed_Components (Typ : Entity_Id) is
        begin
!       --  Build association list for discriminants, and find components of
!       --  the variant part selected by the values of the discriminants.
  
           Old_C := First_Discriminant (Typ);
           Discr_Val := First_Elmt (Constraints);
- 
           while Present (Old_C) loop
              Append_To (Assoc_List,
                Make_Component_Association (Loc,
--- 8662,8672 ----
  
        procedure Collect_Fixed_Components (Typ : Entity_Id) is
        begin
!       --  Build association list for discriminants, and find components of the
!       --  variant part selected by the values of the discriminants.
  
           Old_C := First_Discriminant (Typ);
           Discr_Val := First_Elmt (Constraints);
           while Present (Old_C) loop
              Append_To (Assoc_List,
                Make_Component_Association (Loc,
*************** package body Sem_Ch3 is
*** 8141,8147 ****
             or else Has_Controlled_Component (Typ)
           then
              Old_C := First_Component (Typ);
- 
              while Present (Old_C) loop
                 if Chars ((Old_C)) = Name_uTag
                   or else Chars ((Old_C)) = Name_uParent
--- 8684,8689 ----
*************** package body Sem_Ch3 is
*** 8164,8170 ****
  
        begin
           Comp := First_Elmt (Comp_List);
- 
           while Present (Comp) loop
              Old_C := Node (Comp);
              New_C := Create_Component (Old_C);
--- 8706,8711 ----
*************** package body Sem_Ch3 is
*** 8234,8242 ****
        --  optimize the list of components.
  
        Discr_Val := First_Elmt (Constraints);
- 
        while Present (Discr_Val) loop
- 
           if not Is_OK_Static_Expression (Node (Discr_Val)) then
              Is_Static := False;
              exit;
--- 8775,8781 ----
*************** package body Sem_Ch3 is
*** 8247,8256 ****
  
        New_Scope (Subt);
  
!       --  Inherit the discriminants of the parent type.
  
        Old_C := First_Discriminant (Typ);
- 
        while Present (Old_C) loop
           New_C := Create_Component (Old_C);
           Set_Is_Public (New_C, Is_Public (Subt));
--- 8786,8794 ----
  
        New_Scope (Subt);
  
!       --  Inherit the discriminants of the parent type
  
        Old_C := First_Discriminant (Typ);
        while Present (Old_C) loop
           New_C := Create_Component (Old_C);
           Set_Is_Public (New_C, Is_Public (Subt));
*************** package body Sem_Ch3 is
*** 8296,8306 ****
           --  If the tagged derivation has a type extension, collect all the
           --  new components therein.
  
!          if Present (
!            Record_Extension_Part (Type_Definition (Parent (Typ))))
           then
              Old_C := First_Component (Typ);
- 
              while Present (Old_C) loop
                 if Original_Record_Component (Old_C) = Old_C
                  and then Chars (Old_C) /= Name_uTag
--- 8834,8843 ----
           --  If the tagged derivation has a type extension, collect all the
           --  new components therein.
  
!          if Present
!               (Record_Extension_Part (Type_Definition (Parent (Typ))))
           then
              Old_C := First_Component (Typ);
              while Present (Old_C) loop
                 if Original_Record_Component (Old_C) = Old_C
                  and then Chars (Old_C) /= Name_uTag
*************** package body Sem_Ch3 is
*** 8322,8328 ****
           --  parent type.
  
           Old_C := First_Component (Typ);
- 
           while Present (Old_C) loop
              New_C := Create_Component (Old_C);
  
--- 8859,8864 ----
*************** package body Sem_Ch3 is
*** 8509,8519 ****
        Parent_Type  : Entity_Id;
        Actual_Subp  : Entity_Id := Empty)
     is
!       Formal     : Entity_Id;
!       New_Formal : Entity_Id;
!       Same_Subt  : constant Boolean :=
!         Is_Scalar_Type (Parent_Type)
!           and then Subtypes_Statically_Compatible (Parent_Type, Derived_Type);
        Visible_Subp : Entity_Id := Parent_Subp;
  
        function Is_Private_Overriding return Boolean;
--- 9045,9052 ----
        Parent_Type  : Entity_Id;
        Actual_Subp  : Entity_Id := Empty)
     is
!       Formal       : Entity_Id;
!       New_Formal   : Entity_Id;
        Visible_Subp : Entity_Id := Parent_Subp;
  
        function Is_Private_Overriding return Boolean;
*************** package body Sem_Ch3 is
*** 8545,8556 ****
           Prev : Entity_Id;
  
        begin
!          Prev := Homonym (Parent_Subp);
! 
!          --  The visible operation that is overriden is a homonym of
!          --  the parent subprogram. We scan the homonym chain to find
!          --  the one whose alias is the subprogram we are deriving.
  
           while Present (Prev) loop
              if Is_Dispatching_Operation (Parent_Subp)
                and then Present (Prev)
--- 9078,9088 ----
           Prev : Entity_Id;
  
        begin
!          --  The visible operation that is overriden is a homonym of the
!          --  parent subprogram. We scan the homonym chain to find the one
!          --  whose alias is the subprogram we are deriving.
  
+          Prev := Homonym (Parent_Subp);
           while Present (Prev) loop
              if Is_Dispatching_Operation (Parent_Subp)
                and then Present (Prev)
*************** package body Sem_Ch3 is
*** 8576,8581 ****
--- 9108,9114 ----
        procedure Replace_Type (Id, New_Id : Entity_Id) is
           Acc_Type : Entity_Id;
           IR       : Node_Id;
+          Par      : constant Node_Id := Parent (Derived_Type);
  
        begin
           --  When the type is an anonymous access type, create a new access
*************** package body Sem_Ch3 is
*** 8601,8607 ****
                    Set_Etype (Acc_Type, Acc_Type);
                    Set_Scope (Acc_Type, New_Subp);
  
!                   --  Compute size of anonymous access type.
  
                    if Is_Array_Type (Desig_Typ)
                      and then not Is_Constrained (Desig_Typ)
--- 9134,9140 ----
                    Set_Etype (Acc_Type, Acc_Type);
                    Set_Scope (Acc_Type, New_Subp);
  
!                   --  Compute size of anonymous access type
  
                    if Is_Array_Type (Desig_Typ)
                      and then not Is_Constrained (Desig_Typ)
*************** package body Sem_Ch3 is
*** 8612,8624 ****
                    end if;
  
                    Init_Alignment (Acc_Type);
- 
                    Set_Directly_Designated_Type (Acc_Type, Derived_Type);
  
                    Set_Etype (New_Id, Acc_Type);
                    Set_Scope (New_Id, New_Subp);
  
!                   --  Create a reference to it.
  
                    IR := Make_Itype_Reference (Sloc (Parent (Derived_Type)));
                    Set_Itype (IR, Acc_Type);
--- 9145,9156 ----
                    end if;
  
                    Init_Alignment (Acc_Type);
                    Set_Directly_Designated_Type (Acc_Type, Derived_Type);
  
                    Set_Etype (New_Id, Acc_Type);
                    Set_Scope (New_Id, New_Subp);
  
!                   --  Create a reference to it
  
                    IR := Make_Itype_Reference (Sloc (Parent (Derived_Type)));
                    Set_Itype (IR, Acc_Type);
*************** package body Sem_Ch3 is
*** 8628,8641 ****
                    Set_Etype (New_Id, Etype (Id));
                 end if;
              end;
           elsif Base_Type (Etype (Id)) = Base_Type (Parent_Type)
             or else
               (Ekind (Etype (Id)) = E_Record_Type_With_Private
                 and then Present (Full_View (Etype (Id)))
!                and then Base_Type (Full_View (Etype (Id))) =
!                  Base_Type (Parent_Type))
           then
- 
              --  Constraint checks on formals are generated during expansion,
              --  based on the signature of the original subprogram. The bounds
              --  of the derived type are not relevant, and thus we can use
--- 9160,9173 ----
                    Set_Etype (New_Id, Etype (Id));
                 end if;
              end;
+ 
           elsif Base_Type (Etype (Id)) = Base_Type (Parent_Type)
             or else
               (Ekind (Etype (Id)) = E_Record_Type_With_Private
                 and then Present (Full_View (Etype (Id)))
!                and then
!                  Base_Type (Full_View (Etype (Id))) = Base_Type (Parent_Type))
           then
              --  Constraint checks on formals are generated during expansion,
              --  based on the signature of the original subprogram. The bounds
              --  of the derived type are not relevant, and thus we can use
*************** package body Sem_Ch3 is
*** 8644,8653 ****
              --  be used (a case statement, for example)  and for those cases
              --  we must use the derived type (first subtype), not its base.
  
!             if Etype (Id) = Parent_Type
!               and then Same_Subt
!             then
!                Set_Etype (New_Id, Derived_Type);
              else
                 Set_Etype (New_Id, Base_Type (Derived_Type));
              end if;
--- 9176,9206 ----
              --  be used (a case statement, for example)  and for those cases
              --  we must use the derived type (first subtype), not its base.
  
!             --  If the derived_type_definition has no constraints, we know that
!             --  the derived type has the same constraints as the first subtype
!             --  of the parent, and we can also use it rather than its base,
!             --  which can lead to more efficient code.
! 
!             if Etype (Id) = Parent_Type then
!                if Is_Scalar_Type (Parent_Type)
!                  and then
!                    Subtypes_Statically_Compatible (Parent_Type, Derived_Type)
!                then
!                   Set_Etype (New_Id, Derived_Type);
! 
!                elsif Nkind (Par) = N_Full_Type_Declaration
!                  and then
!                    Nkind (Type_Definition (Par)) = N_Derived_Type_Definition
!                  and then
!                    Is_Entity_Name
!                      (Subtype_Indication (Type_Definition (Par)))
!                then
!                   Set_Etype (New_Id, Derived_Type);
! 
!                else
!                   Set_Etype (New_Id, Base_Type (Derived_Type));
!                end if;
! 
              else
                 Set_Etype (New_Id, Base_Type (Derived_Type));
              end if;
*************** package body Sem_Ch3 is
*** 8704,8718 ****
        --  or if we are in the private part of an instance. This test
        --  should still be refined ???
  
!       --  The test for In_Instance_Not_Visible avoids inheriting the
!       --  derived operation as a non-visible operation in cases where
!       --  the parent subprogram might not be visible now, but was
!       --  visible within the original generic, so it would be wrong
!       --  to make the inherited subprogram non-visible now. (Not
!       --  clear if this test is fully correct; are there any cases
!       --  where we should declare the inherited operation as not
!       --  visible to avoid it being overridden, e.g., when the
!       --  parent type is a generic actual with private primitives ???)
  
        --  (they should be treated the same as other private inherited
        --  subprograms, but it's not clear how to do this cleanly). ???
--- 9257,9270 ----
        --  or if we are in the private part of an instance. This test
        --  should still be refined ???
  
!       --  The test for In_Instance_Not_Visible avoids inheriting the derived
!       --  operation as a non-visible operation in cases where the parent
!       --  subprogram might not be visible now, but was visible within the
!       --  original generic, so it would be wrong to make the inherited
!       --  subprogram non-visible now. (Not clear if this test is fully
!       --  correct; are there any cases where we should declare the inherited
!       --  operation as not visible to avoid it being overridden, e.g., when
!       --  the parent type is a generic actual with private primitives ???)
  
        --  (they should be treated the same as other private inherited
        --  subprograms, but it's not clear how to do this cleanly). ???
*************** package body Sem_Ch3 is
*** 8740,8748 ****
           New_Formal := New_Copy (Formal);
  
           --  Normally we do not go copying parents, but in the case of
!          --  formals, we need to link up to the declaration (which is
!          --  the parameter specification), and it is fine to link up to
!          --  the original formal's parameter specification in this case.
  
           Set_Parent (New_Formal, Parent (Formal));
  
--- 9292,9300 ----
           New_Formal := New_Copy (Formal);
  
           --  Normally we do not go copying parents, but in the case of
!          --  formals, we need to link up to the declaration (which is the
!          --  parameter specification), and it is fine to link up to the
!          --  original formal's parameter specification in this case.
  
           Set_Parent (New_Formal, Parent (Formal));
  
*************** package body Sem_Ch3 is
*** 8795,8805 ****
             (New_Subp, Is_Valued_Procedure (Parent_Subp));
        end if;
  
!       --  A derived function with a controlling result is abstract.
!       --  If the Derived_Type is a nonabstract formal generic derived
!       --  type, then inherited operations are not abstract: check is
!       --  done at instantiation time. If the derivation is for a generic
!       --  actual, the function is not abstract unless the actual is.
  
        if Is_Generic_Type (Derived_Type)
          and then not Is_Abstract (Derived_Type)
--- 9347,9357 ----
             (New_Subp, Is_Valued_Procedure (Parent_Subp));
        end if;
  
!       --  A derived function with a controlling result is abstract. If the
!       --  Derived_Type is a nonabstract formal generic derived type, then
!       --  inherited operations are not abstract: the required check is done at
!       --  instantiation time. If the derivation is for a generic actual, the
!       --  function is not abstract unless the actual is.
  
        if Is_Generic_Type (Derived_Type)
          and then not Is_Abstract (Derived_Type)
*************** package body Sem_Ch3 is
*** 8833,8844 ****
  
        New_Overloaded_Entity (New_Subp, Derived_Type);
  
!       --  Check for case of a derived subprogram for the instantiation
!       --  of a formal derived tagged type, if so mark the subprogram as
!       --  dispatching and inherit the dispatching attributes of the
!       --  parent subprogram. The derived subprogram is effectively a
!       --  renaming of the actual subprogram, so it needs to have the
!       --  same attributes as the actual.
  
        if Present (Actual_Subp)
          and then Is_Dispatching_Operation (Parent_Subp)
--- 9385,9395 ----
  
        New_Overloaded_Entity (New_Subp, Derived_Type);
  
!       --  Check for case of a derived subprogram for the instantiation of a
!       --  formal derived tagged type, if so mark the subprogram as dispatching
!       --  and inherit the dispatching attributes of the parent subprogram. The
!       --  derived subprogram is effectively renaming of the actual subprogram,
!       --  so it needs to have the same attributes as the actual.
  
        if Present (Actual_Subp)
          and then Is_Dispatching_Operation (Parent_Subp)
*************** package body Sem_Ch3 is
*** 8850,8857 ****
           end if;
        end if;
  
!       --  Indicate that a derived subprogram does not require a body
!       --  and that it does not require processing of default expressions.
  
        Set_Has_Completion (New_Subp);
        Set_Default_Expressions_Processed (New_Subp);
--- 9401,9408 ----
           end if;
        end if;
  
!       --  Indicate that a derived subprogram does not require a body and that
!       --  it does not require processing of default expressions.
  
        Set_Has_Completion (New_Subp);
        Set_Default_Expressions_Processed (New_Subp);
*************** package body Sem_Ch3 is
*** 8889,8896 ****
           Parent_Base := Parent_Type;
        end if;
  
-       Elmt := First_Elmt (Op_List);
- 
        if Present (Generic_Actual) then
           Act_List := Collect_Primitive_Operations (Generic_Actual);
           Act_Elmt := First_Elmt (Act_List);
--- 9440,9445 ----
*************** package body Sem_Ch3 is
*** 8898,8906 ****
           Act_Elmt := No_Elmt;
        end if;
  
!       --  Literals are derived earlier in the process of building the
!       --  derived type, and are skipped here.
  
        while Present (Elmt) loop
           Subp := Node (Elmt);
  
--- 9447,9456 ----
           Act_Elmt := No_Elmt;
        end if;
  
!       --  Literals are derived earlier in the process of building the derived
!       --  type, and are skipped here.
  
+       Elmt := First_Elmt (Op_List);
        while Present (Elmt) loop
           Subp := Node (Elmt);
  
*************** package body Sem_Ch3 is
*** 9018,9026 ****
          or else (Is_Class_Wide_Type (Parent_Type)
                    and then Etype (Parent_Type) = T)
        then
!          --  If Parent_Type is undefined or illegal, make new type into
!          --  a subtype of Any_Type, and set a few attributes to prevent
!          --  cascaded errors. If this is a self-definition, emit error now.
  
           if T = Parent_Type
             or else T = Etype (Parent_Type)
--- 9568,9576 ----
          or else (Is_Class_Wide_Type (Parent_Type)
                    and then Etype (Parent_Type) = T)
        then
!          --  If Parent_Type is undefined or illegal, make new type into a
!          --  subtype of Any_Type, and set a few attributes to prevent cascaded
!          --  errors. If this is a self-definition, emit error now.
  
           if T = Parent_Type
             or else T = Etype (Parent_Type)
*************** package body Sem_Ch3 is
*** 9038,9045 ****
  
           return;
  
!       elsif Is_Unchecked_Union (Parent_Type) then
!          Error_Msg_N ("cannot derive from Unchecked_Union type", N);
        end if;
  
        --  Only composite types other than array types are allowed to have
--- 9588,9601 ----
  
           return;
  
!       --  Ada 2005 (AI-231): Static check
! 
!       elsif Is_Access_Type (Parent_Type)
!         and then Null_Exclusion_Present (Type_Definition (N))
!         and then Can_Never_Be_Null (Parent_Type)
!       then
!          Error_Msg_N ("(Ada 2005) null exclusion not allowed if parent is "
!                       & "already non-null", Type_Definition (N));
        end if;
  
        --  Only composite types other than array types are allowed to have
*************** package body Sem_Ch3 is
*** 9060,9070 ****
        --  be used for further derivation until the end of its visible part.
        --  Note that derivation in the private part of the package is allowed.
  
!       if Ada_83
          and then Is_Derived_Type (Parent_Type)
          and then In_Visible_Part (Scope (Parent_Type))
        then
!          if Ada_83 and then Comes_From_Source (Indic) then
              Error_Msg_N
                ("(Ada 83): premature use of type for derivation", Indic);
           end if;
--- 9616,9626 ----
        --  be used for further derivation until the end of its visible part.
        --  Note that derivation in the private part of the package is allowed.
  
!       if Ada_Version = Ada_83
          and then Is_Derived_Type (Parent_Type)
          and then In_Visible_Part (Scope (Parent_Type))
        then
!          if Ada_Version = Ada_83 and then Comes_From_Source (Indic) then
              Error_Msg_N
                ("(Ada 83): premature use of type for derivation", Indic);
           end if;
*************** package body Sem_Ch3 is
*** 9151,9161 ****
             ("type derived from untagged type cannot have extension", Indic);
  
        elsif No (Extension) and then Taggd then
!          --  If this is within a private part (or body) of a generic
!          --  instantiation then the derivation is allowed (the parent
!          --  type can only appear tagged in this case if it's a generic
!          --  actual type, since it would otherwise have been rejected
!          --  in the analysis of the generic template).
  
           if not Is_Generic_Actual_Type (Parent_Type)
             or else In_Visible_Part (Scope (Parent_Type))
--- 9707,9718 ----
             ("type derived from untagged type cannot have extension", Indic);
  
        elsif No (Extension) and then Taggd then
! 
!          --  If this declaration is within a private part (or body) of a
!          --  generic instantiation then the derivation is allowed (the parent
!          --  type can only appear tagged in this case if it's a generic actual
!          --  type, since it would otherwise have been rejected in the analysis
!          --  of the generic template).
  
           if not Is_Generic_Actual_Type (Parent_Type)
             or else In_Visible_Part (Scope (Parent_Type))
*************** package body Sem_Ch3 is
*** 9266,9272 ****
        Discriminant : Entity_Id;
  
        function Type_With_Explicit_Discrims (Id : Entity_Id) return Entity_Id;
!       --  Find the nearest type that actually specifies discriminants.
  
        ---------------------------------
        -- Type_With_Explicit_Discrims --
--- 9823,9829 ----
        Discriminant : Entity_Id;
  
        function Type_With_Explicit_Discrims (Id : Entity_Id) return Entity_Id;
!       --  Find the nearest type that actually specifies discriminants
  
        ---------------------------------
        -- Type_With_Explicit_Discrims --
*************** package body Sem_Ch3 is
*** 9316,9329 ****
  
        Discriminant :=
           First_Stored_Discriminant (Explicitly_Discriminated_Type);
- 
        while Present (Discriminant) loop
- 
           Append_Elmt (
             Get_Discriminant_Value (
               Discriminant, Explicitly_Discriminated_Type, Constraint),
             Expansion);
- 
           Next_Stored_Discriminant (Discriminant);
        end loop;
  
--- 9873,9883 ----
*************** package body Sem_Ch3 is
*** 9341,9347 ****
        Prev_Par : Node_Id;
  
     begin
!       --  Find incomplete declaration, if some was given.
  
        Prev := Current_Entity_In_Scope (Id);
  
--- 9895,9901 ----
        Prev_Par : Node_Id;
  
     begin
!       --  Find incomplete declaration, if one was given
  
        Prev := Current_Entity_In_Scope (Id);
  
*************** package body Sem_Ch3 is
*** 9376,9383 ****
  
           elsif Ekind (Prev) = E_Incomplete_Type then
  
!             --  Indicate that the incomplete declaration has a matching
!             --  full declaration. The defining occurrence of the incomplete
              --  declaration remains the visible one, and the procedure
              --  Get_Full_View dereferences it whenever the type is used.
  
--- 9930,9937 ----
  
           elsif Ekind (Prev) = E_Incomplete_Type then
  
!             --  Indicate that the incomplete declaration has a matching full
!             --  declaration. The defining occurrence of the incomplete
              --  declaration remains the visible one, and the procedure
              --  Get_Full_View dereferences it whenever the type is used.
  
*************** package body Sem_Ch3 is
*** 9415,9433 ****
              elsif Nkind (N) /= N_Full_Type_Declaration
                or else Nkind (Type_Definition (N)) /= N_Derived_Type_Definition
              then
!                Error_Msg_N ("full view of private extension must be"
!                  & " an extension", N);
  
              elsif not (Abstract_Present (Parent (Prev)))
                and then Abstract_Present (Type_Definition (N))
              then
!                Error_Msg_N ("full view of non-abstract extension cannot"
!                  & " be abstract", N);
              end if;
  
              if not In_Private_Part (Current_Scope) then
                 Error_Msg_N
!                  ("declaration of full view must appear in private part",  N);
              end if;
  
              Copy_And_Swap (Prev, Id);
--- 9969,9987 ----
              elsif Nkind (N) /= N_Full_Type_Declaration
                or else Nkind (Type_Definition (N)) /= N_Derived_Type_Definition
              then
!                Error_Msg_N
!                  ("full view of private extension must be an extension", N);
  
              elsif not (Abstract_Present (Parent (Prev)))
                and then Abstract_Present (Type_Definition (N))
              then
!                Error_Msg_N
!                  ("full view of non-abstract extension cannot be abstract", N);
              end if;
  
              if not In_Private_Part (Current_Scope) then
                 Error_Msg_N
!                  ("declaration of full view must appear in private part", N);
              end if;
  
              Copy_And_Swap (Prev, Id);
*************** package body Sem_Ch3 is
*** 9474,9483 ****
              end if;
           end if;
  
!          --  A prior untagged private type can have an associated
!          --  class-wide type due to use of the class attribute,
!          --  and in this case also the full type is required to
!          --  be tagged.
  
           if Is_Type (Prev)
             and then (Is_Tagged_Type (Prev)
--- 10028,10036 ----
              end if;
           end if;
  
!          --  A prior untagged private type can have an associated class-wide
!          --  type due to use of the class attribute, and in this case also the
!          --  full type is required to be tagged.
  
           if Is_Type (Prev)
             and then (Is_Tagged_Type (Prev)
*************** package body Sem_Ch3 is
*** 9549,9555 ****
           T := Empty;
           Array_Type_Declaration (T, Obj_Def);
  
!       --  Create an explicit subtype whenever possible.
  
        elsif Nkind (P) /= N_Component_Declaration
          and then Def_Kind = N_Subtype_Indication
--- 10102,10108 ----
           T := Empty;
           Array_Type_Declaration (T, Obj_Def);
  
!       --  Create an explicit subtype whenever possible
  
        elsif Nkind (P) /= N_Component_Declaration
          and then Def_Kind = N_Subtype_Indication
*************** package body Sem_Ch3 is
*** 9576,9586 ****
               Defining_Identifier => T,
               Subtype_Indication  => Relocate_Node (Obj_Def)));
  
!          --  This subtype may need freezing and it will not be done
!          --  automatically if the object declaration is not in a
!          --  declarative part. Since this is an object declaration, the
!          --  type cannot always be frozen here. Deferred constants do not
!          --  freeze their type (which often enough will be private).
  
           if Nkind (P) = N_Object_Declaration
             and then Constant_Present (P)
--- 10129,10139 ----
               Defining_Identifier => T,
               Subtype_Indication  => Relocate_Node (Obj_Def)));
  
!          --  This subtype may need freezing, and this will not be done
!          --  automatically if the object declaration is not in declarative
!          --  part. Since this is an object declaration, the type cannot always
!          --  be frozen here. Deferred constants do not freeze their type
!          --  (which often enough will be private).
  
           if Nkind (P) = N_Object_Declaration
             and then Constant_Present (P)
*************** package body Sem_Ch3 is
*** 9633,9639 ****
--- 10186,10194 ----
        end if;
  
        if Typ = Standard_Wide_Character
+         or else Typ = Standard_Wide_Wide_Character
          or else Typ = Standard_Wide_String
+         or else Typ = Standard_Wide_Wide_String
        then
           Check_Restriction (No_Wide_Characters, S);
        end if;
*************** package body Sem_Ch3 is
*** 9713,9719 ****
        elsif Can_Derive_From (Standard_Long_Long_Float) then
           Base_Typ := Standard_Long_Long_Float;
  
!       --  If we can't derive from any existing type, use long long float
        --  and give appropriate message explaining the problem.
  
        else
--- 10268,10274 ----
        elsif Can_Derive_From (Standard_Long_Long_Float) then
           Base_Typ := Standard_Long_Long_Float;
  
!       --  If we can't derive from any existing type, use long_long_float
        --  and give appropriate message explaining the problem.
  
        else
*************** package body Sem_Ch3 is
*** 9779,9800 ****
        Set_RM_Size        (T, RM_Size        (Implicit_Base));
        Set_First_Rep_Item (T, First_Rep_Item (Implicit_Base));
        Set_Digits_Value   (T, Digs_Val);
- 
     end Floating_Point_Type_Declaration;
  
     ----------------------------
     -- Get_Discriminant_Value --
     ----------------------------
  
!    --  This is the situation...
  
     --  There is a non-derived type
  
     --       type T0 (Dx, Dy, Dz...)
  
!    --  There are zero or more levels of derivation, with each
!    --  derivation either purely inheriting the discriminants, or
!    --  defining its own.
  
     --       type Ti      is new Ti-1
     --  or
--- 10334,10353 ----
        Set_RM_Size        (T, RM_Size        (Implicit_Base));
        Set_First_Rep_Item (T, First_Rep_Item (Implicit_Base));
        Set_Digits_Value   (T, Digs_Val);
     end Floating_Point_Type_Declaration;
  
     ----------------------------
     -- Get_Discriminant_Value --
     ----------------------------
  
!    --  This is the situation:
  
     --  There is a non-derived type
  
     --       type T0 (Dx, Dy, Dz...)
  
!    --  There are zero or more levels of derivation, with each derivation
!    --  either purely inheriting the discriminants, or defining its own.
  
     --       type Ti      is new Ti-1
     --  or
*************** package body Sem_Ch3 is
*** 9802,9810 ****
     --  or
     --       subtype Ti is ...
  
!    --  The subtype issue is avoided by the use of
!    --    Original_Record_Component, and the fact that derived subtypes
!    --    also derive the constraints.
  
     --  This chain leads back from
  
--- 10355,10362 ----
     --  or
     --       subtype Ti is ...
  
!    --  The subtype issue is avoided by the use of Original_Record_Component,
!    --  and the fact that derived subtypes also derive the constraints.
  
     --  This chain leads back from
  
*************** package body Sem_Ch3 is
*** 9813,9821 ****
     --  Typ_For_Constraint has discriminants, and the value for each
     --  discriminant is given by its corresponding Elmt of Constraints.
  
!    --  Discriminant is some discriminant in this hierarchy.
  
!    --  We need to return its value.
  
     --  We do this by recursively searching each level, and looking for
     --  Discriminant. Once we get to the bottom, we start backing up
--- 10365,10373 ----
     --  Typ_For_Constraint has discriminants, and the value for each
     --  discriminant is given by its corresponding Elmt of Constraints.
  
!    --  Discriminant is some discriminant in this hierarchy
  
!    --  We need to return its value
  
     --  We do this by recursively searching each level, and looking for
     --  Discriminant. Once we get to the bottom, we start backing up
*************** package body Sem_Ch3 is
*** 9917,9929 ****
              end if;
           end if;
  
!          --  If Result is not a (reference to a) discriminant,
!          --  return it, otherwise set Result_Entity to the discriminant.
  
           if Nkind (Result) = N_Defining_Identifier then
- 
              pragma Assert (Result = Discriminant);
- 
              Result_Entity := Result;
  
           else
--- 10469,10479 ----
              end if;
           end if;
  
!          --  If Result is not a (reference to a) discriminant, return it,
!          --  otherwise set Result_Entity to the discriminant.
  
           if Nkind (Result) = N_Defining_Identifier then
              pragma Assert (Result = Discriminant);
              Result_Entity := Result;
  
           else
*************** package body Sem_Ch3 is
*** 9956,9962 ****
           end if;
  
           while Present (Disc) loop
- 
              pragma Assert (Present (Assoc));
  
              if Original_Record_Component (Disc) = Result_Entity then
--- 10506,10511 ----
*************** package body Sem_Ch3 is
*** 9982,9995 ****
     --  Start of processing for Get_Discriminant_Value
  
     begin
!       --  ??? this routine is a gigantic mess and will be deleted.
!       --  for the time being just test for the trivial case before calling
!       --  recurse.
  
        if Base_Type (Scope (Discriminant)) = Base_Type (Typ_For_Constraint) then
           declare
              D : Entity_Id := First_Discriminant (Typ_For_Constraint);
              E : Elmt_Id   := First_Elmt (Constraint);
           begin
              while Present (D) loop
                 if Chars (D) = Chars (Discriminant) then
--- 10531,10544 ----
     --  Start of processing for Get_Discriminant_Value
  
     begin
!       --  ??? This routine is a gigantic mess and will be deleted. For the
!       --  time being just test for the trivial case before calling recurse.
  
        if Base_Type (Scope (Discriminant)) = Base_Type (Typ_For_Constraint) then
           declare
              D : Entity_Id := First_Discriminant (Typ_For_Constraint);
              E : Elmt_Id   := First_Elmt (Constraint);
+ 
           begin
              while Present (D) loop
                 if Chars (D) = Chars (Discriminant) then
*************** package body Sem_Ch3 is
*** 10071,10080 ****
          (Old_C          : Entity_Id;
           Plain_Discrim  : Boolean := False;
           Stored_Discrim : Boolean := False);
!       --  Inherits component Old_C from Parent_Base to the Derived_Base.
!       --  If Plain_Discrim is True, Old_C is a discriminant.
!       --  If Stored_Discrim is True, Old_C is a stored discriminant.
!       --  If they are both false then Old_C is a regular component.
  
        -----------------------
        -- Inherit_Component --
--- 10620,10629 ----
          (Old_C          : Entity_Id;
           Plain_Discrim  : Boolean := False;
           Stored_Discrim : Boolean := False);
!       --  Inherits component Old_C from Parent_Base to the Derived_Base. If
!       --  Plain_Discrim is True, Old_C is a discriminant. If Stored_Discrim is
!       --  True, Old_C is a stored discriminant. If they are both false then
!       --  Old_C is a regular component.
  
        -----------------------
        -- Inherit_Component --
*************** package body Sem_Ch3 is
*** 10122,10128 ****
              if (Is_Private_Type (Derived_Base)
                    and then not Is_Generic_Type (Derived_Base))
                or else (Is_Empty_Elmt_List (Discs)
!                        and then  not Expander_Active)
              then
                 Set_Etype (New_C, Etype (Old_C));
              else
--- 10671,10677 ----
              if (Is_Private_Type (Derived_Base)
                    and then not Is_Generic_Type (Derived_Base))
                or else (Is_Empty_Elmt_List (Discs)
!                          and then  not Expander_Active)
              then
                 Set_Etype (New_C, Etype (Old_C));
              else
*************** package body Sem_Ch3 is
*** 10161,10167 ****
              while Present (Discrim) loop
                 Corr_Discrim := Corresponding_Discriminant (Discrim);
  
!                --  Corr_Discrimm could be missing in an error situation.
  
                 if Present (Corr_Discrim)
                   and then Original_Record_Component (Corr_Discrim) = Old_C
--- 10710,10716 ----
              while Present (Discrim) loop
                 Corr_Discrim := Corresponding_Discriminant (Discrim);
  
!                --  Corr_Discrimm could be missing in an error situation
  
                 if Present (Corr_Discrim)
                   and then Original_Record_Component (Corr_Discrim) = Old_C
*************** package body Sem_Ch3 is
*** 10181,10195 ****
           end if;
        end Inherit_Component;
  
!       --  Variables local to Inherit_Components.
  
        Loc : constant Source_Ptr := Sloc (N);
  
        Parent_Discrim : Entity_Id;
        Stored_Discrim : Entity_Id;
        D              : Entity_Id;
! 
!       Component        : Entity_Id;
  
     --  Start of processing for Inherit_Components
  
--- 10730,10743 ----
           end if;
        end Inherit_Component;
  
!       --  Variables local to Inherit_Component
  
        Loc : constant Source_Ptr := Sloc (N);
  
        Parent_Discrim : Entity_Id;
        Stored_Discrim : Entity_Id;
        D              : Entity_Id;
!       Component      : Entity_Id;
  
     --  Start of processing for Inherit_Components
  
*************** package body Sem_Ch3 is
*** 10199,10205 ****
           Append_Elmt (Derived_Base, Assoc_List);
        end if;
  
!       --  Inherit parent discriminants if needed.
  
        if Inherit_Discr then
           Parent_Discrim := First_Discriminant (Parent_Base);
--- 10747,10753 ----
           Append_Elmt (Derived_Base, Assoc_List);
        end if;
  
!       --  Inherit parent discriminants if needed
  
        if Inherit_Discr then
           Parent_Discrim := First_Discriminant (Parent_Base);
*************** package body Sem_Ch3 is
*** 10209,10223 ****
           end loop;
        end if;
  
!       --  Create explicit stored discrims for untagged types when necessary.
  
        if not Has_Unknown_Discriminants (Derived_Base)
          and then Has_Discriminants (Parent_Base)
          and then not Is_Tagged
          and then
            (not Inherit_Discr
!            or else First_Discriminant (Parent_Base) /=
!                    First_Stored_Discriminant (Parent_Base))
        then
           Stored_Discrim := First_Stored_Discriminant (Parent_Base);
           while Present (Stored_Discrim) loop
--- 10757,10771 ----
           end loop;
        end if;
  
!       --  Create explicit stored discrims for untagged types when necessary
  
        if not Has_Unknown_Discriminants (Derived_Base)
          and then Has_Discriminants (Parent_Base)
          and then not Is_Tagged
          and then
            (not Inherit_Discr
!              or else First_Discriminant (Parent_Base) /=
!                      First_Stored_Discriminant (Parent_Base))
        then
           Stored_Discrim := First_Stored_Discriminant (Parent_Base);
           while Present (Stored_Discrim) loop
*************** package body Sem_Ch3 is
*** 10228,10241 ****
  
        --  See if we can apply the second transformation for derived types, as
        --  explained in point 6. in the comments above Build_Derived_Record_Type
!       --  This is achieved by appending Derived_Base discriminants into
!       --  Discs, which has the side effect of returning a non empty Discs
!       --  list to the caller of Inherit_Components, which is what we want.
  
        if Inherit_Discr
          and then Is_Empty_Elmt_List (Discs)
!         and then (not Is_Private_Type (Derived_Base)
!                    or Is_Generic_Type (Derived_Base))
        then
           D := First_Discriminant (Derived_Base);
           while Present (D) loop
--- 10776,10796 ----
  
        --  See if we can apply the second transformation for derived types, as
        --  explained in point 6. in the comments above Build_Derived_Record_Type
!       --  This is achieved by appending Derived_Base discriminants into Discs,
!       --  which has the side effect of returning a non empty Discs list to the
!       --  caller of Inherit_Components, which is what we want. This must be
!       --  done for private derived types if there are explicit stored
!       --  discriminants, to ensure that we can retrieve the values of the
!       --  constraints provided in the ancestors.
  
        if Inherit_Discr
          and then Is_Empty_Elmt_List (Discs)
!         and then Present (First_Discriminant (Derived_Base))
!         and then
!           (not Is_Private_Type (Derived_Base)
!              or else Is_Completely_Hidden
!                (First_Stored_Discriminant (Derived_Base))
!              or else Is_Generic_Type (Derived_Base))
        then
           D := First_Discriminant (Derived_Base);
           while Present (D) loop
*************** package body Sem_Ch3 is
*** 10303,10309 ****
     is
     begin
        case T_Kind is
- 
           when Enumeration_Kind |
                Integer_Kind =>
              return Constraint_Kind = N_Range_Constraint;
--- 10858,10863 ----
*************** package body Sem_Ch3 is
*** 10337,10345 ****
              return Constraint_Kind = N_Index_Or_Discriminant_Constraint;
  
           when others =>
!             return True; -- Error will be detected later.
        end case;
- 
     end Is_Valid_Constraint_Kind;
  
     --------------------------
--- 10891,10898 ----
              return Constraint_Kind = N_Index_Or_Discriminant_Constraint;
  
           when others =>
!             return True; -- Error will be detected later
        end case;
     end Is_Valid_Constraint_Kind;
  
     --------------------------
*************** package body Sem_Ch3 is
*** 10352,10360 ****
        Type_Scope     : Entity_Id;
  
        function Is_Local_Type (Typ : Entity_Id) return Boolean;
!       --  Check whether parent type of inherited component is declared
!       --  locally, possibly within a nested package or instance. The
!       --  current scope is the derived record itself.
  
        -------------------
        -- Is_Local_Type --
--- 10905,10913 ----
        Type_Scope     : Entity_Id;
  
        function Is_Local_Type (Typ : Entity_Id) return Boolean;
!       --  Check whether parent type of inherited component is declared locally,
!       --  possibly within a nested package or instance. The current scope is
!       --  the derived record itself.
  
        -------------------
        -- Is_Local_Type --
*************** package body Sem_Ch3 is
*** 10373,10378 ****
--- 10926,10932 ----
  
              Scop := Scope (Scop);
           end loop;
+ 
           return False;
        end Is_Local_Type;
  
*************** package body Sem_Ch3 is
*** 10406,10440 ****
        elsif not Comes_From_Source (Original_Comp) then
           return True;
  
!       --  If we are in the body of an instantiation, the component is
!       --  visible even when the parent type (possibly defined in an
!       --  enclosing unit or in a parent unit) might not.
  
        elsif In_Instance_Body then
           return True;
  
!       --  Discriminants are always visible.
  
        elsif Ekind (Original_Comp) = E_Discriminant
          and then not Has_Unknown_Discriminants (Original_Scope)
        then
           return True;
  
!       --  If the component has been declared in an ancestor which is
!       --  currently a private type, then it is not visible. The same
!       --  applies if the component's containing type is not in an
!       --  open scope and the original component's enclosing type
!       --  is a visible full type of a private type (which can occur
!       --  in cases where an attempt is being made to reference a
!       --  component in a sibling package that is inherited from a
!       --  visible component of a type in an ancestor package; the
!       --  component in the sibling package should not be visible
!       --  even though the component it inherited from is visible).
!       --  This does not apply however in the case where the scope
!       --  of the type is a private child unit, or when the parent
!       --  comes from a local package in which the ancestor is
!       --  currently visible. The latter suppression of visibility
!       --  is needed for cases that are tested in B730006.
  
        elsif Is_Private_Type (Original_Scope)
          or else
--- 10960,10992 ----
        elsif not Comes_From_Source (Original_Comp) then
           return True;
  
!       --  If we are in the body of an instantiation, the component is visible
!       --  even when the parent type (possibly defined in an enclosing unit or
!       --  in a parent unit) might not.
  
        elsif In_Instance_Body then
           return True;
  
!       --  Discriminants are always visible
  
        elsif Ekind (Original_Comp) = E_Discriminant
          and then not Has_Unknown_Discriminants (Original_Scope)
        then
           return True;
  
!       --  If the component has been declared in an ancestor which is currently
!       --  a private type, then it is not visible. The same applies if the
!       --  component's containing type is not in an open scope and the original
!       --  component's enclosing type is a visible full type of a private type
!       --  (which can occur in cases where an attempt is being made to reference
!       --  a component in a sibling package that is inherited from a visible
!       --  component of a type in an ancestor package; the component in the
!       --  sibling package should not be visible even though the component it
!       --  inherited from is visible). This does not apply however in the case
!       --  where the scope of the type is a private child unit, or when the
!       --  parent comes from a local package in which the ancestor is currently
!       --  visible. The latter suppression of visibility is needed for cases
!       --  that are tested in B730006.
  
        elsif Is_Private_Type (Original_Scope)
          or else
*************** package body Sem_Ch3 is
*** 10473,10480 ****
        --     private
        --       type T is new A2 with null record;
  
!       --  In this case, the full view of T inherits F1 and F2 but the
!       --  private view inherits only F1
  
        else
           declare
--- 11025,11032 ----
        --     private
        --       type T is new A2 with null record;
  
!       --  In this case, the full view of T inherits F1 and F2 but the private
!       --  view inherits only F1
  
        else
           declare
*************** package body Sem_Ch3 is
*** 10557,10563 ****
        --  The class-wide type of a class-wide type is itself (RM 3.9(14))
  
        Set_Class_Wide_Type (CW_Type, CW_Type);
- 
     end Make_Class_Wide_Type;
  
     ----------------
--- 11109,11114 ----
*************** package body Sem_Ch3 is
*** 10605,10611 ****
  
              elsif T = Any_Character then
  
!                if not Ada_83 then
                    Error_Msg_N
                      ("ambiguous character literals (could be Wide_Character)",
                        I);
--- 11156,11162 ----
  
              elsif T = Any_Character then
  
!                if Ada_Version >= Ada_95 then
                    Error_Msg_N
                      ("ambiguous character literals (could be Wide_Character)",
                        I);
*************** package body Sem_Ch3 is
*** 10665,10672 ****
             and then Is_Type (Entity (Prefix (Low_Bound (I))))
             and then Is_Discrete_Type (Entity (Prefix (Low_Bound (I))))
           then
!             --  The type of the index will be the type of the prefix,
!             --  as long as the upper bound is 'Last of the same type.
  
              Def_Id := Entity (Prefix (Low_Bound (I)));
  
--- 11216,11223 ----
             and then Is_Type (Entity (Prefix (Low_Bound (I))))
             and then Is_Discrete_Type (Entity (Prefix (Low_Bound (I))))
           then
!             --  The type of the index will be the type of the prefix, as long
!             --  as the upper bound is 'Last of the same type.
  
              Def_Id := Entity (Prefix (Low_Bound (I)));
  
*************** package body Sem_Ch3 is
*** 10684,10690 ****
  
        elsif Nkind (I) = N_Subtype_Indication then
  
!          --  The index is given by a subtype with a range constraint.
  
           T :=  Base_Type (Entity (Subtype_Mark (I)));
  
--- 11235,11241 ----
  
        elsif Nkind (I) = N_Subtype_Indication then
  
!          --  The index is given by a subtype with a range constraint
  
           T :=  Base_Type (Entity (Subtype_Mark (I)));
  
*************** package body Sem_Ch3 is
*** 10734,10739 ****
--- 11285,11291 ----
              Error_Msg_N ("invalid subtype mark in discrete range ", I);
              Set_Etype (I, Any_Integer);
              return;
+ 
           else
              --  The type mark may be that of an incomplete type. It is only
              --  now that we can get the full view, previous analysis does
*************** package body Sem_Ch3 is
*** 10787,10809 ****
           return;
        end if;
  
!       --  We will now create the appropriate Itype to describe the
!       --  range, but first a check. If we originally had a subtype,
!       --  then we just label the range with this subtype. Not only
!       --  is there no need to construct a new subtype, but it is wrong
!       --  to do so for two reasons:
  
!       --    1. A legality concern, if we have a subtype, it must not
!       --       freeze, and the Itype would cause freezing incorrectly
  
!       --    2. An efficiency concern, if we created an Itype, it would
!       --       not be recognized as the same type for the purposes of
!       --       eliminating checks in some circumstances.
  
!       --  We signal this case by setting the subtype entity in Def_Id.
  
        if No (Def_Id) then
- 
           Def_Id :=
             Create_Itype (E_Void, Related_Nod, Related_Id, 'D', Suffix_Index);
           Set_Etype (Def_Id, Base_Type (T));
--- 11339,11359 ----
           return;
        end if;
  
!       --  We will now create the appropriate Itype to describe the range, but
!       --  first a check. If we originally had a subtype, then we just label
!       --  the range with this subtype. Not only is there no need to construct
!       --  a new subtype, but it is wrong to do so for two reasons:
  
!       --    1. A legality concern, if we have a subtype, it must not freeze,
!       --       and the Itype would cause freezing incorrectly
  
!       --    2. An efficiency concern, if we created an Itype, it would not be
!       --       recognized as the same type for the purposes of eliminating
!       --       checks in some circumstances.
  
!       --  We signal this case by setting the subtype entity in Def_Id
  
        if No (Def_Id) then
           Def_Id :=
             Create_Itype (E_Void, Related_Nod, Related_Id, 'D', Suffix_Index);
           Set_Etype (Def_Id, Base_Type (T));
*************** package body Sem_Ch3 is
*** 10943,10949 ****
                 return;
  
              else
!                --  In the non-binary case, set size as per RM 13.3(55).
  
                 Set_Modular_Size (Bits);
                 return;
--- 11493,11499 ----
                 return;
  
              else
!                --  In the non-binary case, set size as per RM 13.3(55)
  
                 Set_Modular_Size (Bits);
                 return;
*************** package body Sem_Ch3 is
*** 10981,10987 ****
  
        function Make_Op_Formal (Typ, Op : Entity_Id) return Entity_Id is
           Formal : Entity_Id;
- 
        begin
           Formal := New_Internal_Entity (E_In_Parameter, Op, Loc, 'P');
           Set_Etype (Formal, Typ);
--- 11531,11536 ----
*************** package body Sem_Ch3 is
*** 11007,11013 ****
  
        Append_Entity (Make_Op_Formal (Typ, Op), Op);
        Append_Entity (Make_Op_Formal (Typ, Op), Op);
- 
     end New_Concatenation_Op;
  
     -------------------------------------------
--- 11556,11561 ----
*************** package body Sem_Ch3 is
*** 11045,11052 ****
  
        Set_Delta_Value (Implicit_Base, Delta_Val);
  
!       --  Compute default small from given delta, which is the largest
!       --  power of two that does not exceed the given delta value.
  
        declare
           Tmp   : Ureal := Ureal_1;
--- 11593,11600 ----
  
        Set_Delta_Value (Implicit_Base, Delta_Val);
  
!       --  Compute default small from given delta, which is the largest power
!       --  of two that does not exceed the given delta value.
  
        declare
           Tmp   : Ureal := Ureal_1;
*************** package body Sem_Ch3 is
*** 11102,11112 ****
           end;
        end if;
  
!       --  The range for both the implicit base and the declared first
!       --  subtype cannot be set yet, so we use the special routine
!       --  Set_Fixed_Range to set a temporary range in place. Note that
!       --  the bounds of the base type will be widened to be symmetrical
!       --  and to fill the available bits when the type is frozen.
  
        --  We could do this with all discrete types, and probably should, but
        --  we absolutely have to do it for fixed-point, since the end-points
--- 11650,11660 ----
           end;
        end if;
  
!       --  The range for both the implicit base and the declared first subtype
!       --  cannot be set yet, so we use the special routine Set_Fixed_Range to
!       --  set a temporary range in place. Note that the bounds of the base
!       --  type will be widened to be symmetrical and to fill the available
!       --  bits when the type is frozen.
  
        --  We could do this with all discrete types, and probably should, but
        --  we absolutely have to do it for fixed-point, since the end-points
*************** package body Sem_Ch3 is
*** 11145,11153 ****
     begin
        if Present (Full_B) then
  
!          --  The Base_Type is already completed, we can complete the
!          --  subtype now. We have to create a new entity with the same name,
!          --  Thus we can't use Create_Itype.
           --  This is messy, should be fixed ???
  
           Full := Make_Defining_Identifier (Sloc (Id), Chars (Id));
--- 11693,11702 ----
     begin
        if Present (Full_B) then
  
!          --  The Base_Type is already completed, we can complete the subtype
!          --  now. We have to create a new entity with the same name, Thus we
!          --  can't use Create_Itype.
! 
           --  This is messy, should be fixed ???
  
           Full := Make_Defining_Identifier (Sloc (Id), Chars (Id));
*************** package body Sem_Ch3 is
*** 11218,11223 ****
--- 11767,11784 ----
           if Nkind (Discriminant_Type (Discr)) = N_Access_Definition then
              Discr_Type := Access_Definition (N, Discriminant_Type (Discr));
  
+             --  Ada 2005 (AI-254)
+ 
+             if Present (Access_To_Subprogram_Definition
+                          (Discriminant_Type (Discr)))
+               and then Protected_Present (Access_To_Subprogram_Definition
+                                            (Discriminant_Type (Discr)))
+             then
+                Discr_Type :=
+                  Replace_Anonymous_Access_To_Protected_Subprogram
+                    (Discr, Discr_Type);
+             end if;
+ 
           else
              Find_Type (Discriminant_Type (Discr));
              Discr_Type := Etype (Discriminant_Type (Discr));
*************** package body Sem_Ch3 is
*** 11228,11237 ****
           end if;
  
           if Is_Access_Type (Discr_Type) then
-             Check_Access_Discriminant_Requires_Limited
-               (Discr, Discriminant_Type (Discr));
  
!             if Ada_83 and then Comes_From_Source (Discr) then
                 Error_Msg_N
                   ("(Ada 83) access discriminant not allowed", Discr);
              end if;
--- 11789,11804 ----
           end if;
  
           if Is_Access_Type (Discr_Type) then
  
!             --  Ada 2005 (AI-230): Access discriminant allowed in non-limited
!             --  record types
! 
!             if Ada_Version < Ada_05 then
!                Check_Access_Discriminant_Requires_Limited
!                  (Discr, Discriminant_Type (Discr));
!             end if;
! 
!             if Ada_Version = Ada_83 and then Comes_From_Source (Discr) then
                 Error_Msg_N
                   ("(Ada 83) access discriminant not allowed", Discr);
              end if;
*************** package body Sem_Ch3 is
*** 11259,11265 ****
                   ("discriminant defaults not allowed for formal type",
                    Expression (Discr));
  
!             elsif Is_Tagged_Type (Current_Scope) then
                 Error_Msg_N
                   ("discriminants of tagged type cannot have defaults",
                    Expression (Discr));
--- 11826,11838 ----
                   ("discriminant defaults not allowed for formal type",
                    Expression (Discr));
  
!             --  Tagged types cannot have defaulted discriminants, but a
!             --  non-tagged private type with defaulted discriminants
!             --   can have a tagged completion.
! 
!             elsif Is_Tagged_Type (Current_Scope)
!               and then Comes_From_Source (N)
!             then
                 Error_Msg_N
                   ("discriminants of tagged type cannot have defaults",
                    Expression (Discr));
*************** package body Sem_Ch3 is
*** 11279,11284 ****
--- 11852,11868 ----
              Default_Not_Present := True;
           end if;
  
+          --  Ada 2005 (AI-231): Set the null-excluding attribute and carry
+          --  out some static checks.
+ 
+          if Ada_Version >= Ada_05
+            and then (Null_Exclusion_Present (Discr)
+                        or else Can_Never_Be_Null (Discr_Type))
+          then
+             Set_Can_Never_Be_Null (Defining_Identifier (Discr));
+             Null_Exclusion_Static_Checks (Discr);
+          end if;
+ 
           Next (Discr);
        end loop;
  
*************** package body Sem_Ch3 is
*** 11332,11338 ****
  
           Set_Original_Record_Component (Id, Id);
  
!          --  Create the discriminal for the discriminant.
  
           Build_Discriminal (Id);
  
--- 11916,11922 ----
  
           Set_Original_Record_Component (Id, Id);
  
!          --  Create the discriminal for the discriminant
  
           Build_Discriminal (Id);
  
*************** package body Sem_Ch3 is
*** 11516,11526 ****
        end if;
  
        --  Create a full declaration for all its subtypes recorded in
!       --  Private_Dependents and swap them similarly to the base type.
!       --  These are subtypes that have been define before the full
!       --  declaration of the private type. We also swap the entry in
!       --  Private_Dependents list so we can properly restore the
!       --  private view on exit from the scope.
  
        declare
           Priv_Elmt : Elmt_Id;
--- 12100,12109 ----
        end if;
  
        --  Create a full declaration for all its subtypes recorded in
!       --  Private_Dependents and swap them similarly to the base type. These
!       --  are subtypes that have been define before the full declaration of
!       --  the private type. We also swap the entry in Private_Dependents list
!       --  so we can properly restore the private view on exit from the scope.
  
        declare
           Priv_Elmt : Elmt_Id;
*************** package body Sem_Ch3 is
*** 11597,11611 ****
              else
                 --  In this case the partial view is untagged, so here we
                 --  locate all of the earlier primitives that need to be
!                --  treated as dispatching (those that appear between the
!                --  two views). Note that these additional operations must
!                --  all be new operations (any earlier operations that
!                --  override inherited operations of the full view will
!                --  already have been inserted in the primitives list and
!                --  marked as dispatching by Check_Operation_From_Private_View.
!                --  Note that implicit "/=" operators are excluded from being
!                --  added to the primitives list since they shouldn't be
!                --  treated as dispatching (tagged "/=" is handled specially).
  
                 Prim := Next_Entity (Full_T);
                 while Present (Prim) and then Prim /= Priv_T loop
--- 12180,12194 ----
              else
                 --  In this case the partial view is untagged, so here we
                 --  locate all of the earlier primitives that need to be
!                --  treated as dispatching (those that appear between the two
!                --  views). Note that these additional operations must all be
!                --  new operations (any earlier operations that override
!                --  inherited operations of the full view will already have
!                --  been inserted in the primitives list and marked as
!                --  dispatching by Check_Operation_From_Private_View. Note that
!                --  implicit "/=" operators are excluded from being added to
!                --  the primitives list since they shouldn't be treated as
!                --  dispatching (tagged "/=" is handled specially).
  
                 Prim := Next_Entity (Full_T);
                 while Present (Prim) and then Prim /= Priv_T loop
*************** package body Sem_Ch3 is
*** 11758,11764 ****
  
           Next_Elmt (Inc_Elmt);
        end loop;
- 
     end Process_Incomplete_Dependents;
  
     --------------------------------
--- 12341,12346 ----
*************** package body Sem_Ch3 is
*** 11813,11824 ****
              Set_Etype (Hi, T);
           end if;
  
!          --  If the bounds of the range have been mistakenly given as
!          --  string literals (perhaps in place of character literals),
!          --  then an error has already been reported, but we rewrite
!          --  the string literal as a bound of the range's type to
!          --  avoid blowups in later processing that looks at static
!          --  values.
  
           if Nkind (Lo) = N_String_Literal then
              Rewrite (Lo,
--- 12395,12405 ----
              Set_Etype (Hi, T);
           end if;
  
!          --  If the bounds of the range have been mistakenly given as string
!          --  literals (perhaps in place of character literals), then an error
!          --  has already been reported, but we rewrite the string literal as a
!          --  bound of the range's type to avoid blowups in later processing
!          --  that looks at static values.
  
           if Nkind (Lo) = N_String_Literal then
              Rewrite (Lo,
*************** package body Sem_Ch3 is
*** 11850,11857 ****
--- 12431,12440 ----
           --  not be raised.
  
           --  ??? The following code should be cleaned up as follows
+ 
           --  1. The Is_Null_Range (Lo, Hi) test should disappear since it
           --     is done in the call to Range_Check (R, T); below
+ 
           --  2. The use of R_Check_Off should be investigated and possibly
           --     removed, this would clean up things a bit.
  
*************** package body Sem_Ch3 is
*** 12043,12048 ****
--- 12626,12643 ----
  
           Find_Type (S);
           Check_Incomplete (S);
+ 
+          --  Ada 2005 (AI-231): Static check
+ 
+          if Ada_Version >= Ada_05
+            and then Present (Parent (S))
+            and then Null_Exclusion_Present (Parent (S))
+            and then Nkind (Parent (S)) /= N_Access_To_Object_Definition
+            and then not Is_Access_Type (Entity (S))
+          then
+             Error_Msg_N
+               ("(Ada 2005) null-exclusion part requires an access type", S);
+          end if;
           return Entity (S);
  
        --  Case of constraint present, so that we have an N_Subtype_Indication
*************** package body Sem_Ch3 is
*** 12064,12076 ****
           P := Parent (S);
           Subtype_Mark_Id := Entity (Subtype_Mark (S));
  
-          if Is_Unchecked_Union (Subtype_Mark_Id)
-            and then Comes_From_Source (Related_Nod)
-          then
-             Error_Msg_N
-               ("cannot create subtype of Unchecked_Union", Related_Nod);
-          end if;
- 
           --  Explicit subtype declaration case
  
           if Nkind (P) = N_Subtype_Declaration then
--- 12659,12664 ----
*************** package body Sem_Ch3 is
*** 12082,12092 ****
              Def_Id := Defining_Identifier (Parent (P));
  
           --  Implicit case, the Def_Id must be created as an implicit type.
!          --  The one exception arises in the case of concurrent types,
!          --  array and access types, where other subsidiary implicit types
!          --  may be created and must appear before the main implicit type.
!          --  In these cases we leave Def_Id set to Empty as a signal that
!          --  Create_Itype has not yet been called to create Def_Id.
  
           else
              if Is_Array_Type (Subtype_Mark_Id)
--- 12670,12680 ----
              Def_Id := Defining_Identifier (Parent (P));
  
           --  Implicit case, the Def_Id must be created as an implicit type.
!          --  The one exception arises in the case of concurrent types, array
!          --  and access types, where other subsidiary implicit types may be
!          --  created and must appear before the main implicit type. In these
!          --  cases we leave Def_Id set to Empty as a signal that Create_Itype
!          --  has not yet been called to create Def_Id.
  
           else
              if Is_Array_Type (Subtype_Mark_Id)
*************** package body Sem_Ch3 is
*** 12115,12120 ****
--- 12703,12714 ----
  
              Rewrite (S, New_Copy_Tree (Subtype_Mark (S)));
  
+             --  Set Ekind of orphan itype, to prevent cascaded errors.
+ 
+             if Present (Def_Id) then
+                Set_Ekind (Def_Id, Ekind (Any_Type));
+             end if;
+ 
              --  Make recursive call, having got rid of the bogus constraint
  
              return Process_Subtype (S, Related_Nod, Related_Id, Suffix);
*************** package body Sem_Ch3 is
*** 12123,12129 ****
           --  Remaining processing depends on type
  
           case Ekind (Subtype_Mark_Id) is
- 
              when Access_Kind =>
                 Constrain_Access (Def_Id, S, Related_Nod);
  
--- 12717,12722 ----
*************** package body Sem_Ch3 is
*** 12198,12204 ****
           Set_Convention (Def_Id, Convention (Subtype_Mark_Id));
  
           return Def_Id;
- 
        end if;
     end Process_Subtype;
  
--- 12791,12796 ----
*************** package body Sem_Ch3 is
*** 12221,12228 ****
        --  if it detected an error for declaration T. This arises in the case of
        --  private tagged types where the full view omits the word tagged.
  
!       Is_Tagged := Tagged_Present (Def)
!         or else (Serious_Errors_Detected > 0 and then Is_Tagged_Type (T));
  
        --  Records constitute a scope for the component declarations within.
        --  The scope is created prior to the processing of these declarations.
--- 12813,12821 ----
        --  if it detected an error for declaration T. This arises in the case of
        --  private tagged types where the full view omits the word tagged.
  
!       Is_Tagged :=
!         Tagged_Present (Def)
!           or else (Serious_Errors_Detected > 0 and then Is_Tagged_Type (T));
  
        --  Records constitute a scope for the component declarations within.
        --  The scope is created prior to the processing of these declarations.
*************** package body Sem_Ch3 is
*** 12266,12272 ****
        --  expanded as part of the freezing actions if it is not a CPP_Class.
  
        if Is_Tagged then
!          --  Do not add the tag unless we are in expansion mode.
  
           if Expander_Active then
              Tag_Comp := Make_Defining_Identifier (Sloc (Def), Name_uTag);
--- 12859,12866 ----
        --  expanded as part of the freezing actions if it is not a CPP_Class.
  
        if Is_Tagged then
! 
!          --  Do not add the tag unless we are in expansion mode
  
           if Expander_Active then
              Tag_Comp := Make_Defining_Identifier (Sloc (Def), Name_uTag);
*************** package body Sem_Ch3 is
*** 12349,12355 ****
  
        Component := First_Entity (Current_Scope);
        while Present (Component) loop
- 
           if Ekind (Component) = E_Void then
              Set_Ekind (Component, E_Component);
              Init_Component_Location (Component);
--- 12943,12948 ----
*************** package body Sem_Ch3 is
*** 12467,12484 ****
     --     A small clause may affect the values of the end-points
     --     We try to include the end-points if it does not affect the size
  
!    --  This means that the actual end-points must be established at the
!    --  point when the type is frozen. Meanwhile, we first narrow the range
!    --  as permitted (so that it will fit if necessary in a small specified
!    --  size), and then build a range subtree with these narrowed bounds.
  
!    --  Set_Fixed_Range constructs the range from real literal values, and
!    --  sets the range as the Scalar_Range of the given fixed-point type
!    --  entity.
  
!    --  The parent of this range is set to point to the entity so that it
!    --  is properly hooked into the tree (unlike normal Scalar_Range entries
!    --  for other scalar types, which are just pointers to the range in the
     --  original tree, this would otherwise be an orphan).
  
     --  The tree is left unanalyzed. When the type is frozen, the processing
--- 13060,13076 ----
     --     A small clause may affect the values of the end-points
     --     We try to include the end-points if it does not affect the size
  
!    --  This means that the actual end-points must be established at the point
!    --  when the type is frozen. Meanwhile, we first narrow the range as
!    --  permitted (so that it will fit if necessary in a small specified size),
!    --  and then build a range subtree with these narrowed bounds.
  
!    --  Set_Fixed_Range constructs the range from real literal values, and sets
!    --  the range as the Scalar_Range of the given fixed-point type entity.
  
!    --  The parent of this range is set to point to the entity so that it is
!    --  properly hooked into the tree (unlike normal Scalar_Range entries for
!    --  other scalar types, which are just pointers to the range in the
     --  original tree, this would otherwise be an orphan).
  
     --  The tree is left unanalyzed. When the type is frozen, the processing
*************** package body Sem_Ch3 is
*** 12512,12517 ****
--- 13104,13110 ----
        Subt   : Entity_Id)
     is
        Kind : constant Entity_Kind :=  Ekind (Def_Id);
+ 
     begin
        Set_Scalar_Range (Def_Id, R);
  
*************** package body Sem_Ch3 is
*** 12542,12549 ****
       (E : Entity_Id)
     is
     begin
!       --  Make sure set if encountered during
!       --  Expand_To_Stored_Constraint
  
        Set_Stored_Constraint (E, No_Elist);
  
--- 13135,13141 ----
       (E : Entity_Id)
     is
     begin
!       --  Make sure set if encountered during Expand_To_Stored_Constraint
  
        Set_Stored_Constraint (E, No_Elist);
  
*************** package body Sem_Ch3 is
*** 12553,12559 ****
           Set_Stored_Constraint (E,
             Expand_To_Stored_Constraint (E, Discriminant_Constraint (E)));
        end if;
- 
     end Set_Stored_Constraint_From_Discriminant_Constraint;
  
     -------------------------------------
--- 13145,13150 ----
*************** package body Sem_Ch3 is
*** 12580,12593 ****
        -- Can_Derive_From --
        ---------------------
  
        function Can_Derive_From (E : Entity_Id) return Boolean is
           Lo : constant Uint := Expr_Value (Type_Low_Bound (E));
           Hi : constant Uint := Expr_Value (Type_High_Bound (E));
- 
        begin
-          --  Note we check both bounds against both end values, to deal with
-          --  strange types like ones with a range of 0 .. -12341234.
- 
           return Lo <= Lo_Val and then Lo_Val <= Hi
                    and then
                  Lo <= Hi_Val and then Hi_Val <= Hi;
--- 13171,13183 ----
        -- Can_Derive_From --
        ---------------------
  
+       --  Note we check both bounds against both end values, to deal with
+       --  strange types like ones with a range of 0 .. -12341234.
+ 
        function Can_Derive_From (E : Entity_Id) return Boolean is
           Lo : constant Uint := Expr_Value (Type_Low_Bound (E));
           Hi : constant Uint := Expr_Value (Type_High_Bound (E));
        begin
           return Lo <= Lo_Val and then Lo_Val <= Hi
                    and then
                  Lo <= Hi_Val and then Hi_Val <= Hi;
diff -Nrcpad gcc-3.4.3/gcc/ada/sem_ch3.ads gcc-4.0.0/gcc/ada/sem_ch3.ads
*** gcc-3.4.3/gcc/ada/sem_ch3.ads	Fri Oct 24 13:02:42 2003
--- gcc-4.0.0/gcc/ada/sem_ch3.ads	Mon Jun  7 14:16:26 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Sem_Ch3  is
*** 206,211 ****
--- 206,221 ----
     --  N_Incomplete_Type_Decl node N. If the declaration is a completion,
     --  Prev is entity on the partial view, on which references are posted.
  
+    function Replace_Anonymous_Access_To_Protected_Subprogram
+      (N      : Node_Id;
+       Prev_E : Entity_Id) return Entity_Id;
+    --  Ada 2005 (AI-254): Create and decorate an internal full type
+    --  declaration in the enclosing scope corresponding to an anonymous
+    --  access to protected subprogram. In addition, replace the anonymous
+    --  access by an occurrence of this internal type. Prev_Etype is used
+    --  to link the new internal entity with the anonymous entity. Return
+    --  the entity of this type declaration.
+ 
     procedure Set_Completion_Referenced (E : Entity_Id);
     --  If E is the completion of a private or incomplete  type declaration,
     --  or the completion of a deferred constant declaration, mark the entity
diff -Nrcpad gcc-3.4.3/gcc/ada/sem_ch4.adb gcc-4.0.0/gcc/ada/sem_ch4.adb
*** gcc-3.4.3/gcc/ada/sem_ch4.adb	Mon Jan  5 15:20:46 2004
--- gcc-4.0.0/gcc/ada/sem_ch4.adb	Thu Feb 10 13:55:59 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 25,36 ****
  ------------------------------------------------------------------------------
  
  with Atree;    use Atree;
  with Debug;    use Debug;
  with Einfo;    use Einfo;
  with Errout;   use Errout;
  with Exp_Util; use Exp_Util;
! with Hostparm; use Hostparm;
  with Itypes;   use Itypes;
  with Lib.Xref; use Lib.Xref;
  with Namet;    use Namet;
  with Nlists;   use Nlists;
--- 25,39 ----
  ------------------------------------------------------------------------------
  
  with Atree;    use Atree;
+ with Checks;   use Checks;
  with Debug;    use Debug;
  with Einfo;    use Einfo;
+ with Elists;   use Elists;
  with Errout;   use Errout;
  with Exp_Util; use Exp_Util;
! with Fname;    use Fname;
  with Itypes;   use Itypes;
+ with Lib;      use Lib;
  with Lib.Xref; use Lib.Xref;
  with Namet;    use Namet;
  with Nlists;   use Nlists;
*************** with Nmake;    use Nmake;
*** 38,43 ****
--- 41,47 ----
  with Opt;      use Opt;
  with Output;   use Output;
  with Restrict; use Restrict;
+ with Rident;   use Rident;
  with Sem;      use Sem;
  with Sem_Cat;  use Sem_Cat;
  with Sem_Ch3;  use Sem_Ch3;
*************** package body Sem_Ch4 is
*** 141,165 ****
       (L, R  : Node_Id;
        Op_Id : Entity_Id;
        N     : Node_Id);
!    --  For the four varieties of concatenation.
  
     procedure Find_Equality_Types
       (L, R  : Node_Id;
        Op_Id : Entity_Id;
        N     : Node_Id);
!    --  Ditto for equality operators.
  
     procedure Find_Boolean_Types
       (L, R  : Node_Id;
        Op_Id : Entity_Id;
        N     : Node_Id);
!    --  Ditto for binary logical operations.
  
     procedure Find_Negation_Types
       (R     : Node_Id;
        Op_Id : Entity_Id;
        N     : Node_Id);
!    --  Find consistent interpretation for operand of negation operator.
  
     procedure Find_Non_Universal_Interpretations
       (N     : Node_Id;
--- 145,169 ----
       (L, R  : Node_Id;
        Op_Id : Entity_Id;
        N     : Node_Id);
!    --  For the four varieties of concatenation
  
     procedure Find_Equality_Types
       (L, R  : Node_Id;
        Op_Id : Entity_Id;
        N     : Node_Id);
!    --  Ditto for equality operators
  
     procedure Find_Boolean_Types
       (L, R  : Node_Id;
        Op_Id : Entity_Id;
        N     : Node_Id);
!    --  Ditto for binary logical operations
  
     procedure Find_Negation_Types
       (R     : Node_Id;
        Op_Id : Entity_Id;
        N     : Node_Id);
!    --  Find consistent interpretation for operand of negation operator
  
     procedure Find_Non_Universal_Interpretations
       (N     : Node_Id;
*************** package body Sem_Ch4 is
*** 177,183 ****
       (R     : Node_Id;
        Op_Id : Entity_Id;
        N     : Node_Id);
!    --  Unary arithmetic types: plus, minus, abs.
  
     procedure Check_Arithmetic_Pair
       (T1, T2 : Entity_Id;
--- 181,187 ----
       (R     : Node_Id;
        Op_Id : Entity_Id;
        N     : Node_Id);
!    --  Unary arithmetic types: plus, minus, abs
  
     procedure Check_Arithmetic_Pair
       (T1, T2 : Entity_Id;
*************** package body Sem_Ch4 is
*** 201,212 ****
     --  the operand is not an inappropriate entity kind, return False.
  
     procedure Operator_Check (N : Node_Id);
!    --  Verify that an operator has received some valid interpretation.
!    --  If none was found, determine whether a use clause would make the
!    --  operation legal. The variable Candidate_Type (defined in Sem_Type) is
!    --  set for every type compatible with the operator, even if the operator
!    --  for the type is not directly visible. The routine uses this type to emit
!    --  a more informative message.
  
     function Try_Indexed_Call
       (N   : Node_Id;
--- 205,229 ----
     --  the operand is not an inappropriate entity kind, return False.
  
     procedure Operator_Check (N : Node_Id);
!    --  Verify that an operator has received some valid interpretation. If none
!    --  was found, determine whether a use clause would make the operation
!    --  legal. The variable Candidate_Type (defined in Sem_Type) is set for
!    --  every type compatible with the operator, even if the operator for the
!    --  type is not directly visible. The routine uses this type to emit a more
!    --  informative message.
! 
!    procedure Process_Implicit_Dereference_Prefix
!      (E : Entity_Id;
!       P : Node_Id);
!    --  Called when P is the prefix of an implicit dereference, denoting an
!    --  object E. If in semantics only mode (-gnatc), record that is a
!    --  reference to E. Normally, such a reference is generated only when the
!    --  implicit dereference is expanded into an explicit one. E may be empty,
!    --  in which case this procedure does nothing.
! 
!    procedure Remove_Abstract_Operations (N : Node_Id);
!    --  Ada 2005: implementation of AI-310. An abstract non-dispatching
!    --  operation is not a candidate interpretation.
  
     function Try_Indexed_Call
       (N   : Node_Id;
*************** package body Sem_Ch4 is
*** 226,231 ****
--- 243,251 ----
     --  to a subprogram, and the call F (X)  interpreted as F.all (X). In
     --  this case the call may be overloaded with both interpretations.
  
+    function Try_Object_Operation (N : Node_Id) return Boolean;
+    --  Ada 2005 (AI-252): Give support to the object operation notation
+ 
     ------------------------
     -- Ambiguous_Operands --
     ------------------------
*************** package body Sem_Ch4 is
*** 233,238 ****
--- 253,262 ----
     procedure Ambiguous_Operands (N : Node_Id) is
        procedure List_Operand_Interps (Opnd : Node_Id);
  
+       --------------------------
+       -- List_Operand_Interps --
+       --------------------------
+ 
        procedure List_Operand_Interps (Opnd : Node_Id) is
           Nam   : Node_Id;
           Err   : Node_Id := N;
*************** package body Sem_Ch4 is
*** 241,250 ****
           if Is_Overloaded (Opnd) then
              if Nkind (Opnd) in N_Op then
                 Nam := Opnd;
- 
              elsif Nkind (Opnd) = N_Function_Call then
                 Nam := Name (Opnd);
- 
              else
                 return;
              end if;
--- 265,272 ----
*************** package body Sem_Ch4 is
*** 265,270 ****
--- 287,294 ----
           List_Interps (Nam, Err);
        end List_Operand_Interps;
  
+    --  Start of processing for Ambiguous_Operands
+ 
     begin
        if Nkind (N) = N_In
          or else Nkind (N) = N_Not_In
*************** package body Sem_Ch4 is
*** 284,297 ****
           List_Operand_Interps (Left_Opnd  (N));
           List_Operand_Interps (Right_Opnd (N));
        else
! 
!          if OpenVMS then
!             Error_Msg_N (
!                "\use '/'R'E'P'O'R'T'_'E'R'R'O'R'S'='F'U'L'L for details",
!                 N);
!          else
!             Error_Msg_N ("\use -gnatf for details", N);
!          end if;
        end if;
     end Ambiguous_Operands;
  
--- 308,314 ----
           List_Operand_Interps (Left_Opnd  (N));
           List_Operand_Interps (Right_Opnd (N));
        else
!          Error_Msg_N ("\use -gnatf switch for details", N);
        end if;
     end Ambiguous_Operands;
  
*************** package body Sem_Ch4 is
*** 316,322 ****
     procedure Analyze_Allocator (N : Node_Id) is
        Loc      : constant Source_Ptr := Sloc (N);
        Sav_Errs : constant Nat        := Serious_Errors_Detected;
!       E        : Node_Id             := Expression (N);
        Acc_Type : Entity_Id;
        Type_Id  : Entity_Id;
  
--- 333,339 ----
     procedure Analyze_Allocator (N : Node_Id) is
        Loc      : constant Source_Ptr := Sloc (N);
        Sav_Errs : constant Nat        := Serious_Errors_Detected;
!       E        : Node_Id            := Expression (N);
        Acc_Type : Entity_Id;
        Type_Id  : Entity_Id;
  
*************** package body Sem_Ch4 is
*** 336,346 ****
             and then Comes_From_Source (N)
             and then not In_Instance_Body
           then
!             --  Ada0Y (AI-287): Do not post an error if the expression corres-
!             --  ponds to a limited aggregate. Limited aggregates are checked in
!             --  sem_aggr in a per-component manner (cf. Get_Value subprogram).
  
!             if Extensions_Allowed
                and then Nkind (Expression (E)) = N_Aggregate
              then
                 null;
--- 353,364 ----
             and then Comes_From_Source (N)
             and then not In_Instance_Body
           then
!             --  Ada 2005 (AI-287): Do not post an error if the expression
!             --  corresponds to a limited aggregate. Limited aggregates
!             --  are checked in sem_aggr in a per-component manner
!             --  (compare with handling of Get_Value subprogram).
  
!             if Ada_Version >= Ada_05
                and then Nkind (Expression (E)) = N_Aggregate
              then
                 null;
*************** package body Sem_Ch4 is
*** 368,373 ****
--- 386,393 ----
  
           Set_Etype  (E, Type_Id);
  
+       --  Case where no qualified expression is present
+ 
        else
           declare
              Def_Id : Entity_Id;
*************** package body Sem_Ch4 is
*** 392,398 ****
                 Find_Type (Subtype_Mark (E));
  
                 if Is_Elementary_Type (Entity (Subtype_Mark (E))) then
!                   if not (Ada_83
                             and then Is_Access_Type (Entity (Subtype_Mark (E))))
                    then
                       Error_Msg_N ("constraint not allowed here", E);
--- 412,418 ----
                 Find_Type (Subtype_Mark (E));
  
                 if Is_Elementary_Type (Entity (Subtype_Mark (E))) then
!                   if not (Ada_Version = Ada_83
                             and then Is_Access_Type (Entity (Subtype_Mark (E))))
                    then
                       Error_Msg_N ("constraint not allowed here", E);
*************** package body Sem_Ch4 is
*** 443,448 ****
--- 463,475 ----
              Set_Directly_Designated_Type (Acc_Type, Type_Id);
              Check_Fully_Declared (Type_Id, N);
  
+             --  Ada 2005 (AI-231)
+ 
+             if Can_Never_Be_Null (Type_Id) then
+                Error_Msg_N ("(Ada 2005) qualified expression required",
+                             Expression (N));
+             end if;
+ 
              --  Check restriction against dynamically allocated protected
              --  objects. Note that when limited aggregates are supported,
              --  a similar test should be applied to an allocator with a
*************** package body Sem_Ch4 is
*** 475,490 ****
--- 502,539 ----
        end if;
  
        if Has_Task (Designated_Type (Acc_Type)) then
+          Check_Restriction (No_Tasking, N);
           Check_Restriction (Max_Tasks, N);
           Check_Restriction (No_Task_Allocators, N);
        end if;
  
+       --  If the No_Streams restriction is set, check that the type of the
+       --  object is not, and does not contain, any subtype derived from
+       --  Ada.Streams.Root_Stream_Type. Note that we guard the call to
+       --  Has_Stream just for efficiency reasons. There is no point in
+       --  spending time on a Has_Stream check if the restriction is not set.
+ 
+       if Restrictions.Set (No_Streams) then
+          if Has_Stream (Designated_Type (Acc_Type)) then
+             Check_Restriction (No_Streams, N);
+          end if;
+       end if;
+ 
        Set_Etype (N, Acc_Type);
  
        if not Is_Library_Level_Entity (Acc_Type) then
           Check_Restriction (No_Local_Allocators, N);
        end if;
  
+       --  Ada 2005 (AI-231): Static checks
+ 
+       if Ada_Version >= Ada_05
+         and then (Null_Exclusion_Present (N)
+                     or else Can_Never_Be_Null (Etype (N)))
+       then
+          Null_Exclusion_Static_Checks (N);
+       end if;
+ 
        if Serious_Errors_Detected > Sav_Errs then
           Set_Error_Posted (N);
           Set_Etype (N, Any_Type);
*************** package body Sem_Ch4 is
*** 564,575 ****
     -- Analyze_Call --
     ------------------
  
!    --  Function, procedure, and entry calls are checked here. The Name
!    --  in the call may be overloaded. The actuals have been analyzed
!    --  and may themselves be overloaded. On exit from this procedure, the node
!    --  N may have zero, one or more interpretations. In the first case an error
!    --  message is produced. In the last case, the node is flagged as overloaded
!    --  and the interpretations are collected in All_Interp.
  
     --  If the name is an Access_To_Subprogram, it cannot be overloaded, but
     --  the type-checking is similar to that of other calls.
--- 613,624 ----
     -- Analyze_Call --
     ------------------
  
!    --  Function, procedure, and entry calls are checked here. The Name in
!    --  the call may be overloaded. The actuals have been analyzed and may
!    --  themselves be overloaded. On exit from this procedure, the node N
!    --  may have zero, one or more interpretations. In the first case an
!    --  error message is produced. In the last case, the node is flagged
!    --  as overloaded and the interpretations are collected in All_Interp.
  
     --  If the name is an Access_To_Subprogram, it cannot be overloaded, but
     --  the type-checking is similar to that of other calls.
*************** package body Sem_Ch4 is
*** 653,664 ****
  
              if Nkind (Prefix (Nam)) = N_Selected_Component then
                 Nam_Ent := Entity (Selector_Name (Prefix (Nam)));
- 
              else
                 Error_Msg_N ("name in call is not a callable entity", Nam);
                 Set_Etype (N, Any_Type);
                 return;
- 
              end if;
  
           elsif not Is_Entity_Name (Nam) then
--- 702,711 ----
*************** package body Sem_Ch4 is
*** 840,845 ****
--- 887,894 ----
              Generate_Reference (Entity (Nam), Nam);
  
              Set_Etype (Nam, Etype (Entity (Nam)));
+          else
+             Remove_Abstract_Operations (N);
           end if;
  
           End_Interp_List;
*************** package body Sem_Ch4 is
*** 863,869 ****
        Analyze_Expression (R);
  
        if Present (Op_Id) then
- 
           if Ekind (Op_Id) = E_Operator then
              Find_Comparison_Types (L, R, Op_Id, N);
           else
--- 912,917 ----
*************** package body Sem_Ch4 is
*** 876,884 ****
  
        else
           Op_Id := Get_Name_Entity_Id (Chars (N));
- 
           while Present (Op_Id) loop
- 
              if Ekind (Op_Id) = E_Operator then
                 Find_Comparison_Types (L, R, Op_Id, N);
              else
--- 924,930 ----
*************** package body Sem_Ch4 is
*** 958,968 ****
                 Add_One_Interp (N, Op_Id, Etype (Op_Id));
  
              else
!                --  Type and its operations must be visible.
  
                 Set_Entity (N, Empty);
                 Analyze_Concatenation (N);
- 
              end if;
  
           else
--- 1004,1013 ----
                 Add_One_Interp (N, Op_Id, Etype (Op_Id));
  
              else
!                --  Type and its operations must be visible
  
                 Set_Entity (N, Empty);
                 Analyze_Concatenation (N);
              end if;
  
           else
*************** package body Sem_Ch4 is
*** 971,977 ****
  
        else
           Op_Id  := Get_Name_Entity_Id (Name_Op_Concat);
- 
           while Present (Op_Id) loop
              if Ekind (Op_Id) = E_Operator then
                 Find_Concatenation_Types (L, R, Op_Id, N);
--- 1016,1021 ----
*************** package body Sem_Ch4 is
*** 994,1000 ****
        Condition : constant Node_Id := First (Expressions (N));
        Then_Expr : constant Node_Id := Next (Condition);
        Else_Expr : constant Node_Id := Next (Then_Expr);
- 
     begin
        Analyze_Expression (Condition);
        Analyze_Expression (Then_Expr);
--- 1038,1043 ----
*************** package body Sem_Ch4 is
*** 1007,1016 ****
     -------------------------
  
     procedure Analyze_Equality_Op (N : Node_Id) is
!       Loc    : constant Source_Ptr := Sloc (N);
!       L      : constant Node_Id := Left_Opnd (N);
!       R      : constant Node_Id := Right_Opnd (N);
!       Op_Id  : Entity_Id;
  
     begin
        Set_Etype (N, Any_Type);
--- 1050,1059 ----
     -------------------------
  
     procedure Analyze_Equality_Op (N : Node_Id) is
!       Loc   : constant Source_Ptr := Sloc (N);
!       L     : constant Node_Id := Left_Opnd (N);
!       R     : constant Node_Id := Right_Opnd (N);
!       Op_Id : Entity_Id;
  
     begin
        Set_Etype (N, Any_Type);
*************** package body Sem_Ch4 is
*** 1031,1037 ****
        --  of the user-defined function.
  
        if Present (Entity (N)) then
- 
           Op_Id := Entity (N);
  
           if Ekind (Op_Id) = E_Operator then
--- 1074,1079 ----
*************** package body Sem_Ch4 is
*** 1041,1047 ****
           end if;
  
           if Is_Overloaded (L) then
- 
              if Ekind (Op_Id) = E_Operator then
                 Set_Etype (L, Intersect_Types (L, R));
              else
--- 1083,1088 ----
*************** package body Sem_Ch4 is
*** 1051,1059 ****
  
        else
           Op_Id := Get_Name_Entity_Id (Chars (N));
- 
           while Present (Op_Id) loop
- 
              if Ekind (Op_Id) = E_Operator then
                 Find_Equality_Types (L, R, Op_Id, N);
              else
--- 1092,1098 ----
*************** package body Sem_Ch4 is
*** 1117,1127 ****
        New_N : Node_Id;
  
        function Is_Function_Type return Boolean;
!       --  Check whether node may be interpreted as an implicit function call.
  
        function Is_Function_Type return Boolean is
!          I     : Interp_Index;
!          It    : Interp;
  
        begin
           if not Is_Overloaded (N) then
--- 1156,1170 ----
        New_N : Node_Id;
  
        function Is_Function_Type return Boolean;
!       --  Check whether node may be interpreted as an implicit function call
! 
!       ----------------------
!       -- Is_Function_Type --
!       ----------------------
  
        function Is_Function_Type return Boolean is
!          I  : Interp_Index;
!          It : Interp;
  
        begin
           if not Is_Overloaded (N) then
*************** package body Sem_Ch4 is
*** 1145,1150 ****
--- 1188,1195 ----
           end if;
        end Is_Function_Type;
  
+    --  Start of processing for Analyze_Explicit_Deference
+ 
     begin
        Analyze (P);
        Set_Etype (N, Any_Type);
*************** package body Sem_Ch4 is
*** 1199,1205 ****
  
           End_Interp_List;
  
!          --  Error if no interpretation of the prefix has an access type.
  
           if Etype (N) = Any_Type then
              Error_Msg_N
--- 1244,1250 ----
  
           End_Interp_List;
  
!          --  Error if no interpretation of the prefix has an access type
  
           if Etype (N) = Any_Type then
              Error_Msg_N
*************** package body Sem_Ch4 is
*** 1242,1248 ****
  
           if Is_Overloaded (P) then
              Get_First_Interp (P, I, It);
- 
              while Present (It.Nam) loop
                 T := It.Typ;
  
--- 1287,1292 ----
*************** package body Sem_Ch4 is
*** 1264,1270 ****
        --  (RM E.2.2(16)).
  
        Validate_Remote_Access_To_Class_Wide_Type (N);
- 
     end Analyze_Explicit_Dereference;
  
     ------------------------
--- 1308,1313 ----
*************** package body Sem_Ch4 is
*** 1318,1325 ****
           Change_Node (N, N_Function_Call);
           Set_Name (N, P);
           Set_Parameter_Associations (N, Exprs);
-          Actual := First (Parameter_Associations (N));
  
           while Present (Actual) loop
              Analyze (Actual);
              Check_Parameterless_Call (Actual);
--- 1361,1368 ----
           Change_Node (N, N_Function_Call);
           Set_Name (N, P);
           Set_Parameter_Associations (N, Exprs);
  
+          Actual := First (Parameter_Associations (N));
           while Present (Actual) loop
              Analyze (Actual);
              Check_Parameterless_Call (Actual);
*************** package body Sem_Ch4 is
*** 1337,1343 ****
           Exp          : Node_Id;
           Array_Type   : Entity_Id;
           Index        : Node_Id;
!          Entry_Family : Entity_Id;
  
        begin
           Exp := First (Exprs);
--- 1380,1386 ----
           Exp          : Node_Id;
           Array_Type   : Entity_Id;
           Index        : Node_Id;
!          Pent         : Entity_Id := Empty;
  
        begin
           Exp := First (Exprs);
*************** package body Sem_Ch4 is
*** 1348,1385 ****
           else
              Array_Type := Etype (P);
  
!             --  Prefix must be appropriate for an array type.
!             --  Dereference the prefix if it is an access type.
  
              if Is_Access_Type (Array_Type) then
                 Array_Type := Designated_Type (Array_Type);
                 Error_Msg_NW (Warn_On_Dereference, "?implicit dereference", N);
              end if;
  
              if Is_Array_Type (Array_Type) then
                 null;
  
!             elsif (Is_Entity_Name (P)
!                      and then
!                    Ekind (Entity (P)) = E_Entry_Family)
!                or else
!                  (Nkind (P) = N_Selected_Component
!                     and then
!                   Is_Entity_Name (Selector_Name (P))
!                     and then
!                   Ekind (Entity (Selector_Name (P))) = E_Entry_Family)
!             then
!                if Is_Entity_Name (P) then
!                   Entry_Family := Entity (P);
!                else
!                   Entry_Family := Entity (Selector_Name (P));
!                end if;
! 
                 Analyze (Exp);
                 Set_Etype (N, Any_Type);
  
                 if not Has_Compatible_Type
!                  (Exp, Entry_Index_Type (Entry_Family))
                 then
                    Error_Msg_N ("invalid index type in entry name", N);
  
--- 1391,1422 ----
           else
              Array_Type := Etype (P);
  
!             if Is_Entity_Name (P) then
!                Pent := Entity (P);
!             elsif Nkind (P) = N_Selected_Component
!               and then Is_Entity_Name (Selector_Name (P))
!             then
!                Pent := Entity (Selector_Name (P));
!             end if;
! 
!             --  Prefix must be appropriate for an array type, taking into
!             --  account a possible implicit dereference.
  
              if Is_Access_Type (Array_Type) then
                 Array_Type := Designated_Type (Array_Type);
                 Error_Msg_NW (Warn_On_Dereference, "?implicit dereference", N);
+                Process_Implicit_Dereference_Prefix (Pent, P);
              end if;
  
              if Is_Array_Type (Array_Type) then
                 null;
  
!             elsif Present (Pent) and then Ekind (Pent) = E_Entry_Family then
                 Analyze (Exp);
                 Set_Etype (N, Any_Type);
  
                 if not Has_Compatible_Type
!                  (Exp, Entry_Index_Type (Pent))
                 then
                    Error_Msg_N ("invalid index type in entry name", N);
  
*************** package body Sem_Ch4 is
*** 1405,1417 ****
  
              else
                 if Nkind (Parent (N)) = N_Requeue_Statement
!                  and then
!                    ((Is_Entity_Name (P)
!                         and then Ekind (Entity (P)) = E_Entry)
!                     or else
!                      (Nkind (P) = N_Selected_Component
!                        and then Is_Entity_Name (Selector_Name (P))
!                        and then Ekind (Entity (Selector_Name (P))) = E_Entry))
                 then
                    Error_Msg_N
                      ("REQUEUE does not permit parameters", First (Exprs));
--- 1442,1448 ----
  
              else
                 if Nkind (Parent (N)) = N_Requeue_Statement
!                  and then Present (Pent) and then Ekind (Pent) = E_Entry
                 then
                    Error_Msg_N
                      ("REQUEUE does not permit parameters", First (Exprs));
*************** package body Sem_Ch4 is
*** 1452,1458 ****
                 Error_Msg_N ("too many subscripts in array reference", Exp);
              end if;
           end if;
- 
        end Process_Indexed_Component;
  
        ----------------------------------------
--- 1483,1488 ----
*************** package body Sem_Ch4 is
*** 1462,1468 ****
        procedure Process_Indexed_Component_Or_Slice is
        begin
           Exp := First (Exprs);
- 
           while Present (Exp) loop
              Analyze_Expression (Exp);
              Next (Exp);
--- 1492,1497 ----
*************** package body Sem_Ch4 is
*** 1510,1517 ****
  
        begin
           Set_Etype (N, Any_Type);
-          Get_First_Interp (P, I, It);
  
           while Present (It.Nam) loop
              Typ := It.Typ;
  
--- 1539,1546 ----
  
        begin
           Set_Etype (N, Any_Type);
  
+          Get_First_Interp (P, I, It);
           while Present (It.Nam) loop
              Typ := It.Typ;
  
*************** package body Sem_Ch4 is
*** 1526,1534 ****
  
                 Index := First_Index (Typ);
                 Found := True;
- 
                 Exp := First (Exprs);
- 
                 while Present (Index) and then Present (Exp) loop
                    if Has_Compatible_Type (Exp, Etype (Index)) then
                       null;
--- 1555,1561 ----
*************** package body Sem_Ch4 is
*** 1560,1568 ****
           End_Interp_List;
        end Process_Overloaded_Indexed_Component;
  
!    ------------------------------------
!    -- Analyze_Indexed_Component_Form --
!    ------------------------------------
  
     begin
        --  Get name of array, function or type
--- 1587,1593 ----
           End_Interp_List;
        end Process_Overloaded_Indexed_Component;
  
!    --  Start of processing for Analyze_Indexed_Component_Form
  
     begin
        --  Get name of array, function or type
*************** package body Sem_Ch4 is
*** 1587,1595 ****
        then
           U_N := Entity (P);
  
!          if Ekind (U_N) in  Type_Kind then
  
!             --  Reformat node as a type conversion.
  
              E := Remove_Head (Exprs);
  
--- 1612,1620 ----
        then
           U_N := Entity (P);
  
!          if Ekind (U_N) in Type_Kind then
  
!             --  Reformat node as a type conversion
  
              E := Remove_Head (Exprs);
  
*************** package body Sem_Ch4 is
*** 1624,1630 ****
  
           elsif Is_Generic_Subprogram (U_N) then
  
!             --  A common beginner's (or C++ templates fan) error.
  
              Error_Msg_N ("generic subprogram cannot be called", N);
              Set_Etype (N, Any_Type);
--- 1649,1655 ----
  
           elsif Is_Generic_Subprogram (U_N) then
  
!             --  A common beginner's (or C++ templates fan) error
  
              Error_Msg_N ("generic subprogram cannot be called", N);
              Set_Etype (N, Any_Type);
*************** package body Sem_Ch4 is
*** 1646,1652 ****
              Process_Function_Call;
  
           elsif Nkind (P) = N_Selected_Component
!            and then Ekind (Entity (Selector_Name (P))) = E_Function
           then
              Process_Function_Call;
  
--- 1671,1677 ----
              Process_Function_Call;
  
           elsif Nkind (P) = N_Selected_Component
!            and then Is_Overloadable (Entity (Selector_Name (P)))
           then
              Process_Function_Call;
  
*************** package body Sem_Ch4 is
*** 1720,1725 ****
--- 1745,1754 ----
        --  if there is more than one interpretation of the operands that is
        --  compatible with a membership test, the operation is ambiguous.
  
+       --------------------
+       -- Try_One_Interp --
+       --------------------
+ 
        procedure Try_One_Interp (T1 : Entity_Id) is
        begin
           if Has_Compatible_Type (R, T1) then
*************** package body Sem_Ch4 is
*** 1812,1818 ****
  
        else
           Op_Id := Get_Name_Entity_Id (Chars (N));
- 
           while Present (Op_Id) loop
              if Ekind (Op_Id) = E_Operator then
                 Find_Negation_Types (R, Op_Id, N);
--- 1841,1846 ----
*************** package body Sem_Ch4 is
*** 1827,1835 ****
        Operator_Check (N);
     end Analyze_Negation;
  
!    -------------------
!    --  Analyze_Null --
!    -------------------
  
     procedure Analyze_Null (N : Node_Id) is
     begin
--- 1855,1863 ----
        Operator_Check (N);
     end Analyze_Negation;
  
!    ------------------
!    -- Analyze_Null --
!    ------------------
  
     procedure Analyze_Null (N : Node_Id) is
     begin
*************** package body Sem_Ch4 is
*** 1946,1952 ****
        then
           return;
  
!       --  Ditto for function calls in a procedure context.
  
        elsif Nkind (N) = N_Procedure_Call_Statement
           and then Is_Overloaded (Name (N))
--- 1974,1980 ----
        then
           return;
  
!       --  Ditto for function calls in a procedure context
  
        elsif Nkind (N) = N_Procedure_Call_Statement
           and then Is_Overloaded (Name (N))
*************** package body Sem_Ch4 is
*** 1986,1994 ****
  
                 begin
                    Get_First_Interp (Name (N), I, It);
- 
                    while Present (It.Nam) loop
- 
                       if Ekind (It.Nam) /= E_Operator
                          and then Hides_Op (It.Nam, Nam)
                          and then
--- 2014,2020 ----
*************** package body Sem_Ch4 is
*** 2026,2034 ****
  
           Actual := First_Actual (N);
           Formal := First_Formal (Nam);
- 
           while Present (Actual) and then Present (Formal) loop
- 
              if Nkind (Parent (Actual)) /= N_Parameter_Association
                or else Chars (Selector_Name (Parent (Actual))) = Chars (Formal)
              then
--- 2052,2058 ----
*************** package body Sem_Ch4 is
*** 2048,2054 ****
                    end if;
  
                    if Report and not Is_Indexed then
- 
                       Wrong_Type (Actual, Etype (Formal));
  
                       if Nkind (Actual) = N_Op_Eq
--- 2072,2077 ----
*************** package body Sem_Ch4 is
*** 2077,2084 ****
--- 2100,2121 ----
                          then
                             Error_Msg_NE
                               ("  =='> in call to &#(inherited)!", Actual, Nam);
+ 
+                         elsif Ekind (Nam) = E_Subprogram_Type then
+                            declare
+                               Access_To_Subprogram_Typ :
+                                 constant Entity_Id :=
+                                   Defining_Identifier
+                                     (Associated_Node_For_Itype (Nam));
+                            begin
+                               Error_Msg_NE (
+                                 "  =='> in call to dereference of &#!",
+                                 Actual, Access_To_Subprogram_Typ);
+                            end;
+ 
                          else
                             Error_Msg_NE ("  =='> in call to &#!", Actual, Nam);
+ 
                          end if;
                       end if;
                    end if;
*************** package body Sem_Ch4 is
*** 2094,2108 ****
              end if;
           end loop;
  
!          --  On exit, all actuals match.
  
           Indicate_Name_And_Type;
        end if;
     end Analyze_One_Call;
  
!    ----------------------------
!    --  Analyze_Operator_Call --
!    ----------------------------
  
     procedure Analyze_Operator_Call (N : Node_Id; Op_Id : Entity_Id) is
        Op_Name : constant Name_Id := Chars (Op_Id);
--- 2131,2145 ----
              end if;
           end loop;
  
!          --  On exit, all actuals match
  
           Indicate_Name_And_Type;
        end if;
     end Analyze_One_Call;
  
!    ---------------------------
!    -- Analyze_Operator_Call --
!    ---------------------------
  
     procedure Analyze_Operator_Call (N : Node_Id; Op_Id : Entity_Id) is
        Op_Name : constant Name_Id := Chars (Op_Id);
*************** package body Sem_Ch4 is
*** 2110,2123 ****
        Act2    : constant Node_Id := Next_Actual (Act1);
  
     begin
        if Present (Act2) then
  
!          --  Maybe binary operators
  
           if Present (Next_Actual (Act2)) then
- 
-             --  Too many actuals for an operator
- 
              return;
  
           elsif     Op_Name = Name_Op_Add
--- 2147,2159 ----
        Act2    : constant Node_Id := Next_Actual (Act1);
  
     begin
+       --  Binary operator case
+ 
        if Present (Act2) then
  
!          --  If more than two operands, then not binary operator after all
  
           if Present (Next_Actual (Act2)) then
              return;
  
           elsif     Op_Name = Name_Op_Add
*************** package body Sem_Ch4 is
*** 2157,2165 ****
              null;
           end if;
  
!       else
!          --  Unary operators
  
           if Op_Name = Name_Op_Subtract or else
              Op_Name = Name_Op_Add      or else
              Op_Name = Name_Op_Abs
--- 2193,2201 ----
              null;
           end if;
  
!       --  Unary operator case
  
+       else
           if Op_Name = Name_Op_Subtract or else
              Op_Name = Name_Op_Add      or else
              Op_Name = Name_Op_Abs
*************** package body Sem_Ch4 is
*** 2192,2215 ****
        T     : Entity_Id;
  
     begin
!       Get_First_Interp (Nam, I, It);
! 
!       Set_Etype (Sel,  Any_Type);
  
        while Present (It.Typ) loop
           if Is_Access_Type (It.Typ) then
              T := Designated_Type (It.Typ);
              Error_Msg_NW (Warn_On_Dereference, "?implicit dereference", N);
- 
           else
              T := It.Typ;
           end if;
  
           if Is_Record_Type (T) then
              Comp := First_Entity (T);
- 
              while Present (Comp) loop
- 
                 if Chars (Comp) = Chars (Sel)
                   and then Is_Visible_Component (Comp)
                 then
--- 2228,2247 ----
        T     : Entity_Id;
  
     begin
!       Set_Etype (Sel, Any_Type);
  
+       Get_First_Interp (Nam, I, It);
        while Present (It.Typ) loop
           if Is_Access_Type (It.Typ) then
              T := Designated_Type (It.Typ);
              Error_Msg_NW (Warn_On_Dereference, "?implicit dereference", N);
           else
              T := It.Typ;
           end if;
  
           if Is_Record_Type (T) then
              Comp := First_Entity (T);
              while Present (Comp) loop
                 if Chars (Comp) = Chars (Sel)
                   and then Is_Visible_Component (Comp)
                 then
*************** package body Sem_Ch4 is
*** 2230,2236 ****
  
           elsif Is_Concurrent_Type (T) then
              Comp := First_Entity (T);
- 
              while Present (Comp)
                and then Comp /= First_Private_Entity (T)
              loop
--- 2262,2267 ----
*************** package body Sem_Ch4 is
*** 2270,2276 ****
           Set_Entity (Sel, Any_Id);
           Set_Etype  (Sel, Any_Type);
        end if;
- 
     end Analyze_Overloaded_Selected_Component;
  
     ----------------------------------
--- 2301,2306 ----
*************** package body Sem_Ch4 is
*** 2289,2296 ****
        if T = Any_Type then
           return;
        end if;
-       Check_Fully_Declared (T, N);
  
        Analyze_Expression (Expression (N));
        Set_Etype  (N, T);
     end Analyze_Qualified_Expression;
--- 2319,2326 ----
        if T = Any_Type then
           return;
        end if;
  
+       Check_Fully_Declared (T, N);
        Analyze_Expression (Expression (N));
        Set_Etype  (N, T);
     end Analyze_Qualified_Expression;
*************** package body Sem_Ch4 is
*** 2349,2355 ****
              Check_Common_Type (T, Etype (H));
           else
              Get_First_Interp (H, I2, It2);
- 
              while Present (It2.Typ) loop
                 Check_Common_Type (T, It2.Typ);
                 Get_Next_Interp (I2, It2);
--- 2379,2384 ----
*************** package body Sem_Ch4 is
*** 2387,2393 ****
              Check_High_Bound (Etype (L));
           else
              Get_First_Interp (L, I1, It1);
- 
              while Present (It1.Typ) loop
                 Check_High_Bound (It1.Typ);
                 Get_Next_Interp (I1, It1);
--- 2416,2421 ----
*************** package body Sem_Ch4 is
*** 2401,2410 ****
           end if;
        end if;
  
!       if Ada_83
          and then
            (Nkind (Parent (N)) = N_Loop_Parameter_Specification
!             or else Nkind (Parent (N)) = N_Constrained_Array_Definition)
        then
           Check_Universal_Expression (L);
           Check_Universal_Expression (H);
--- 2429,2438 ----
           end if;
        end if;
  
!       if Ada_Version = Ada_83
          and then
            (Nkind (Parent (N)) = N_Loop_Parameter_Specification
!              or else Nkind (Parent (N)) = N_Constrained_Array_Definition)
        then
           Check_Universal_Expression (L);
           Check_Universal_Expression (H);
*************** package body Sem_Ch4 is
*** 2418,2424 ****
     procedure Analyze_Reference (N : Node_Id) is
        P        : constant Node_Id := Prefix (N);
        Acc_Type : Entity_Id;
- 
     begin
        Analyze (P);
        Acc_Type := Create_Itype (E_Allocator_Type, N);
--- 2446,2451 ----
*************** package body Sem_Ch4 is
*** 2441,2446 ****
--- 2468,2474 ----
        Comp        : Entity_Id;
        Entity_List : Entity_Id;
        Prefix_Type : Entity_Id;
+       Pent        : Entity_Id := Empty;
        Act_Decl    : Node_Id;
        In_Scope    : Boolean;
        Parent_N    : Node_Id;
*************** package body Sem_Ch4 is
*** 2492,2497 ****
--- 2520,2535 ----
  
           else
              Error_Msg_NW (Warn_On_Dereference, "?implicit dereference", N);
+ 
+             if Is_Entity_Name (Name) then
+                Pent := Entity (Name);
+             elsif Nkind (Name) = N_Selected_Component
+               and then Is_Entity_Name (Selector_Name (Name))
+             then
+                Pent := Entity (Selector_Name (Name));
+             end if;
+ 
+             Process_Implicit_Dereference_Prefix (Pent, Name);
           end if;
  
           Prefix_Type := Designated_Type (Prefix_Type);
*************** package body Sem_Ch4 is
*** 2542,2548 ****
           --  Find component with given name
  
           while Present (Comp) loop
- 
              if Chars (Comp) = Chars (Sel)
                and then Is_Visible_Component (Comp)
              then
--- 2580,2585 ----
*************** package body Sem_Ch4 is
*** 2552,2558 ****
                 Set_Etype (Sel, Etype (Comp));
  
                 if Ekind (Comp) = E_Discriminant then
!                   if Is_Unchecked_Union (Prefix_Type) then
                       Error_Msg_N
                         ("cannot reference discriminant of Unchecked_Union",
                          Sel);
--- 2589,2595 ----
                 Set_Etype (Sel, Etype (Comp));
  
                 if Ekind (Comp) = E_Discriminant then
!                   if Is_Unchecked_Union (Base_Type (Prefix_Type)) then
                       Error_Msg_N
                         ("cannot reference discriminant of Unchecked_Union",
                          Sel);
*************** package body Sem_Ch4 is
*** 2597,2607 ****
                       or else
                        (Nkind (Parent_N) = N_Attribute_Reference
                           and then (Attribute_Name (Parent_N) = Name_First
!                                     or else
                                     Attribute_Name (Parent_N) = Name_Last
!                                     or else
                                     Attribute_Name (Parent_N) = Name_Length
!                                     or else
                                     Attribute_Name (Parent_N) = Name_Range)))
                 then
                    Set_Etype (N, Etype (Comp));
--- 2634,2644 ----
                       or else
                        (Nkind (Parent_N) = N_Attribute_Reference
                           and then (Attribute_Name (Parent_N) = Name_First
!                                      or else
                                     Attribute_Name (Parent_N) = Name_Last
!                                      or else
                                     Attribute_Name (Parent_N) = Name_Length
!                                      or else
                                     Attribute_Name (Parent_N) = Name_Range)))
                 then
                    Set_Etype (N, Etype (Comp));
*************** package body Sem_Ch4 is
*** 2643,2648 ****
--- 2680,2699 ----
              Next_Entity (Comp);
           end loop;
  
+          --  Ada 2005 (AI-252)
+ 
+          if Ada_Version >= Ada_05
+            and then Is_Tagged_Type (Prefix_Type)
+            and then Try_Object_Operation (N)
+          then
+             return;
+ 
+             --  If the transformation fails, it will be necessary
+             --  to redo the analysis with all errors enabled, to indicate
+             --  candidate interpretations and reasons for each failure ???
+ 
+          end if;
+ 
        elsif Is_Private_Type (Prefix_Type) then
  
           --  Allow access only to discriminants of the type. If the
*************** package body Sem_Ch4 is
*** 2655,2661 ****
           end if;
  
           while Present (Comp) loop
- 
              if Chars (Comp) = Chars (Sel) then
                 if Ekind (Comp) = E_Discriminant then
                    Set_Entity_With_Style_Check (Sel, Comp);
--- 2706,2711 ----
*************** package body Sem_Ch4 is
*** 2734,2740 ****
              <<Next_Comp>>
                 Next_Entity (Comp);
                 exit when not In_Scope
!                  and then Comp = First_Private_Entity (Prefix_Type);
           end loop;
  
           Set_Is_Overloaded (N, Is_Overloaded (Sel));
--- 2784,2791 ----
              <<Next_Comp>>
                 Next_Entity (Comp);
                 exit when not In_Scope
!                  and then
!                    Comp = First_Private_Entity (Base_Type (Prefix_Type));
           end loop;
  
           Set_Is_Overloaded (N, Is_Overloaded (Sel));
*************** package body Sem_Ch4 is
*** 2745,2751 ****
           Error_Msg_NE ("invalid prefix in selected component&", N, Sel);
        end if;
  
!       --  If N still has no type, the component is not defined in the prefix.
  
        if Etype (N) = Any_Type then
  
--- 2796,2802 ----
           Error_Msg_NE ("invalid prefix in selected component&", N, Sel);
        end if;
  
!       --  If N still has no type, the component is not defined in the prefix
  
        if Etype (N) = Any_Type then
  
*************** package body Sem_Ch4 is
*** 2780,2796 ****
             and then Is_Generic_Actual_Type (Prefix_Type)
             and then Present (Full_View (Prefix_Type))
           then
!             --  Similarly, if this the actual for a formal derived type,
!             --  the component inherited from the generic parent may not
!             --  be visible in the actual, but the selected component is
!             --  legal.
  
              declare
                 Comp : Entity_Id;
              begin
                 Comp :=
                   First_Component (Generic_Parent_Type (Parent (Prefix_Type)));
- 
                 while Present (Comp) loop
                    if Chars (Comp) = Chars (Sel) then
                       Set_Entity_With_Style_Check (Sel, Comp);
--- 2831,2846 ----
             and then Is_Generic_Actual_Type (Prefix_Type)
             and then Present (Full_View (Prefix_Type))
           then
!             --  Similarly, if this the actual for a formal derived type, the
!             --  component inherited from the generic parent may not be visible
!             --  in the actual, but the selected component is legal.
  
              declare
                 Comp : Entity_Id;
+ 
              begin
                 Comp :=
                   First_Component (Generic_Parent_Type (Parent (Prefix_Type)));
                 while Present (Comp) loop
                    if Chars (Comp) = Chars (Sel) then
                       Set_Entity_With_Style_Check (Sel, Comp);
*************** package body Sem_Ch4 is
*** 2816,2824 ****
                 --  compilation error anyway.
  
                 Comp := First_Component (Base_Type (Prefix_Type));
- 
                 while Present (Comp) loop
- 
                    if Chars (Comp) = Chars (Sel)
                      and then Is_Visible_Component (Comp)
                    then
--- 2866,2872 ----
*************** package body Sem_Ch4 is
*** 2920,2925 ****
--- 2968,2977 ----
        --  If the prefix is overloaded, select those interpretations that
        --  yield a one-dimensional array type.
  
+       ------------------------------
+       -- Analyze_Overloaded_Slice --
+       ------------------------------
+ 
        procedure Analyze_Overloaded_Slice is
           I   : Interp_Index;
           It  : Interp;
*************** package body Sem_Ch4 is
*** 2927,2934 ****
  
        begin
           Set_Etype (N, Any_Type);
-          Get_First_Interp (P, I, It);
  
           while Present (It.Nam) loop
              Typ := It.Typ;
  
--- 2979,2986 ----
  
        begin
           Set_Etype (N, Any_Type);
  
+          Get_First_Interp (P, I, It);
           while Present (It.Nam) loop
              Typ := It.Typ;
  
*************** package body Sem_Ch4 is
*** 2955,2966 ****
     --  Start of processing for Analyze_Slice
  
     begin
!       --  Analyze the prefix if not done already
! 
!       if No (Etype (P)) then
!          Analyze (P);
!       end if;
! 
        Analyze (D);
  
        if Is_Overloaded (P) then
--- 3007,3013 ----
     --  Start of processing for Analyze_Slice
  
     begin
!       Analyze (P);
        Analyze (D);
  
        if Is_Overloaded (P) then
*************** package body Sem_Ch4 is
*** 3047,3053 ****
           Error_Msg_N ("\use qualified expression instead", N);
  
        elsif Nkind (Expr) = N_Character_Literal then
!          if Ada_83 then
              Resolve (Expr, T);
           else
              Error_Msg_N ("argument of conversion cannot be character literal",
--- 3094,3100 ----
           Error_Msg_N ("\use qualified expression instead", N);
  
        elsif Nkind (Expr) = N_Character_Literal then
!          if Ada_Version = Ada_83 then
              Resolve (Expr, T);
           else
              Error_Msg_N ("argument of conversion cannot be character literal",
*************** package body Sem_Ch4 is
*** 3064,3070 ****
           Error_Msg_N ("argument of conversion cannot be access", N);
           Error_Msg_N ("\use qualified expression instead", N);
        end if;
- 
     end Analyze_Type_Conversion;
  
     ----------------------
--- 3111,3116 ----
*************** package body Sem_Ch4 is
*** 3090,3098 ****
  
        else
           Op_Id := Get_Name_Entity_Id (Chars (N));
- 
           while Present (Op_Id) loop
- 
              if Ekind (Op_Id) = E_Operator then
                 if No (Next_Entity (First_Entity (Op_Id))) then
                    Find_Unary_Types (R, Op_Id,  N);
--- 3136,3142 ----
*************** package body Sem_Ch4 is
*** 3220,3228 ****
--- 3264,3327 ----
     is
        Op_Name : constant Name_Id   := Chars (Op_Id);
  
+       function Has_Fixed_Op (Typ : Entity_Id; Op : Entity_Id) return Boolean;
+       --  Check whether the fixed-point type Typ has a user-defined operator
+       --  (multiplication or division) that should hide the corresponding
+       --  predefined operator. Used to implement Ada 2005 AI-264, to make
+       --  such operators more visible and therefore useful.
+ 
        function Specific_Type (T1, T2 : Entity_Id) return Entity_Id;
        --  Get specific type (i.e. non-universal type if there is one)
  
+       ------------------
+       -- Has_Fixed_Op --
+       ------------------
+ 
+       function Has_Fixed_Op (Typ : Entity_Id; Op : Entity_Id) return Boolean is
+          Ent : Entity_Id;
+          F1  : Entity_Id;
+          F2  : Entity_Id;
+ 
+       begin
+          --  The operation is treated as primitive if it is declared in the
+          --  same scope as the type, and therefore on the same entity chain.
+ 
+          Ent := Next_Entity (Typ);
+          while Present (Ent) loop
+             if Chars (Ent) = Chars (Op) then
+                F1 := First_Formal (Ent);
+                F2 := Next_Formal (F1);
+ 
+                --  The operation counts as primitive if either operand or
+                --  result are of the given type, and both operands are fixed
+                --  point types.
+ 
+                if (Etype (F1) = Typ
+                     and then Is_Fixed_Point_Type (Etype (F2)))
+ 
+                  or else
+                    (Etype (F2) = Typ
+                      and then Is_Fixed_Point_Type (Etype (F1)))
+ 
+                  or else
+                    (Etype (Ent) = Typ
+                      and then Is_Fixed_Point_Type (Etype (F1))
+                      and then Is_Fixed_Point_Type (Etype (F2)))
+                then
+                   return True;
+                end if;
+             end if;
+ 
+             Next_Entity (Ent);
+          end loop;
+ 
+          return False;
+       end Has_Fixed_Op;
+ 
+       -------------------
+       -- Specific_Type --
+       -------------------
+ 
        function Specific_Type (T1, T2 : Entity_Id) return Entity_Id is
        begin
           if T1 = Universal_Integer or else T1 = Universal_Real then
*************** package body Sem_Ch4 is
*** 3257,3264 ****
              --  If the operator is given in  functional notation, it comes
              --  from source and Fixed_As_Integer cannot apply.
  
!             if Nkind (N) not in N_Op
!               or else not Treat_Fixed_As_Integer (N)
              then
                 Add_One_Interp (N, Op_Id, Universal_Fixed);
              end if;
--- 3356,3366 ----
              --  If the operator is given in  functional notation, it comes
              --  from source and Fixed_As_Integer cannot apply.
  
!             if (Nkind (N) not in N_Op
!                  or else not Treat_Fixed_As_Integer (N))
!               and then
!                 (not (Ada_Version >= Ada_05 and then Has_Fixed_Op (T1, Op_Id))
!                   or else Nkind (Parent (N)) = N_Type_Conversion)
              then
                 Add_One_Interp (N, Op_Id, Universal_Fixed);
              end if;
*************** package body Sem_Ch4 is
*** 3267,3272 ****
--- 3369,3377 ----
             and then (Nkind (N) not in N_Op
                        or else not Treat_Fixed_As_Integer (N))
             and then T1 = Universal_Real
+            and then
+              (not (Ada_Version >= Ada_05 and then Has_Fixed_Op (T1, Op_Id))
+                or else Nkind (Parent (N)) = N_Type_Conversion)
           then
              Add_One_Interp (N, Op_Id, Universal_Fixed);
  
*************** package body Sem_Ch4 is
*** 3323,3329 ****
           end if;
  
        elsif Op_Name = Name_Op_Expon then
- 
           if Is_Numeric_Type (T1)
             and then not Is_Fixed_Point_Type (T1)
             and then (Base_Type (T2) = Base_Type (Standard_Integer)
--- 3428,3433 ----
*************** package body Sem_Ch4 is
*** 3370,3393 ****
        --  possible misspellings, these misspellings will be suggested as
        --  possible correction.
  
!       if not (Is_Private_Type (Prefix) or Is_Record_Type (Prefix)) then
           --  Concurrent types should be handled as well ???
           return;
        end if;
  
        Get_Name_String (Chars (Sel));
  
        declare
!          S  : constant String (1 .. Name_Len) :=
!                 Name_Buffer (1 .. Name_Len);
  
        begin
           Comp  := First_Entity (Prefix);
- 
           while Nr_Of_Suggestions <= Max_Suggestions
              and then Present (Comp)
           loop
- 
              if Is_Visible_Component (Comp) then
                 Get_Name_String (Chars (Comp));
  
--- 3474,3496 ----
        --  possible misspellings, these misspellings will be suggested as
        --  possible correction.
  
!       if not (Is_Private_Type (Prefix) or else Is_Record_Type (Prefix)) then
! 
           --  Concurrent types should be handled as well ???
+ 
           return;
        end if;
  
        Get_Name_String (Chars (Sel));
  
        declare
!          S  : constant String (1 .. Name_Len) := Name_Buffer (1 .. Name_Len);
  
        begin
           Comp  := First_Entity (Prefix);
           while Nr_Of_Suggestions <= Max_Suggestions
              and then Present (Comp)
           loop
              if Is_Visible_Component (Comp) then
                 Get_Name_String (Chars (Comp));
  
*************** package body Sem_Ch4 is
*** 3425,3431 ****
     function Defined_In_Scope (T : Entity_Id; S : Entity_Id) return Boolean
     is
        S1 : constant Entity_Id := Scope (Base_Type (T));
- 
     begin
        return S1 = S
          or else (S1 = System_Aux_Id and then S = Scope (S1));
--- 3528,3533 ----
*************** package body Sem_Ch4 is
*** 3445,3456 ****
        Void_Interp_Seen : Boolean := False;
  
     begin
!       if Extensions_Allowed then
           Actual := First_Actual (N);
- 
           while Present (Actual) loop
!             --  Ada0Y (AI-50217): Post an error in case of premature usage of
!             --  an entity from the limited view.
  
              if not Analyzed (Etype (Actual))
               and then From_With_Type (Etype (Actual))
--- 3547,3558 ----
        Void_Interp_Seen : Boolean := False;
  
     begin
!       if Ada_Version >= Ada_05 then
           Actual := First_Actual (N);
           while Present (Actual) loop
! 
!             --  Ada 2005 (AI-50217): Post an error in case of premature
!             --  usage of an entity from the limited view.
  
              if not Analyzed (Etype (Actual))
               and then From_With_Type (Etype (Actual))
*************** package body Sem_Ch4 is
*** 3501,3507 ****
  
        if Nkind (N) = N_Function_Call then
           Get_First_Interp (Nam, X, It);
- 
           while Present (It.Nam) loop
              if Ekind (It.Nam) = E_Function
                or else Ekind (It.Nam) = E_Operator
--- 3603,3608 ----
*************** package body Sem_Ch4 is
*** 3516,3523 ****
           --  more precise message. Ditto if this appears as the prefix
           --  of a selected component, which may be a lexical error.
  
!          Error_Msg_N (
!          "\context requires function call, found procedure name", Nam);
  
           if Nkind (Parent (N)) = N_Selected_Component
             and then N = Prefix (Parent (N))
--- 3617,3624 ----
           --  more precise message. Ditto if this appears as the prefix
           --  of a selected component, which may be a lexical error.
  
!          Error_Msg_N
!            ("\context requires function call, found procedure name", Nam);
  
           if Nkind (Parent (N)) = N_Selected_Component
             and then N = Prefix (Parent (N))
*************** package body Sem_Ch4 is
*** 3545,3563 ****
        Op_Id : Entity_Id;
        N     : Node_Id)
     is
!       Index1, Index2 : Interp_Index;
!       It1, It2 : Interp;
  
        procedure Check_Right_Argument (T : Entity_Id);
        --  Check right operand of operator
  
        procedure Check_Right_Argument (T : Entity_Id) is
        begin
           if not Is_Overloaded (R) then
              Check_Arithmetic_Pair (T, Etype (R), Op_Id,  N);
           else
              Get_First_Interp (R, Index2, It2);
- 
              while Present (It2.Typ) loop
                 Check_Arithmetic_Pair (T, It2.Typ, Op_Id, N);
                 Get_Next_Interp (Index2, It2);
--- 3646,3669 ----
        Op_Id : Entity_Id;
        N     : Node_Id)
     is
!       Index1 : Interp_Index;
!       Index2 : Interp_Index;
!       It1    : Interp;
!       It2    : Interp;
  
        procedure Check_Right_Argument (T : Entity_Id);
        --  Check right operand of operator
  
+       --------------------------
+       -- Check_Right_Argument --
+       --------------------------
+ 
        procedure Check_Right_Argument (T : Entity_Id) is
        begin
           if not Is_Overloaded (R) then
              Check_Arithmetic_Pair (T, Etype (R), Op_Id,  N);
           else
              Get_First_Interp (R, Index2, It2);
              while Present (It2.Typ) loop
                 Check_Arithmetic_Pair (T, It2.Typ, Op_Id, N);
                 Get_Next_Interp (Index2, It2);
*************** package body Sem_Ch4 is
*** 3598,3603 ****
--- 3704,3713 ----
        --  Special case for logical operations one of whose operands is an
        --  integer literal. If both are literal the result is any modular type.
  
+       ----------------------------
+       -- Check_Numeric_Argument --
+       ----------------------------
+ 
        procedure Check_Numeric_Argument (T : Entity_Id) is
        begin
           if T = Universal_Integer then
*************** package body Sem_Ch4 is
*** 3612,3618 ****
  
     begin
        if not Is_Overloaded (L) then
- 
           if Etype (L) = Universal_Integer
             or else Etype (L) = Any_Modular
           then
--- 3722,3727 ----
*************** package body Sem_Ch4 is
*** 3621,3630 ****
  
              else
                 Get_First_Interp (R, Index, It);
- 
                 while Present (It.Typ) loop
                    Check_Numeric_Argument (It.Typ);
- 
                    Get_Next_Interp (Index, It);
                 end loop;
              end if;
--- 3730,3737 ----
*************** package body Sem_Ch4 is
*** 3637,3643 ****
  
        else
           Get_First_Interp (L, Index, It);
- 
           while Present (It.Typ) loop
              if Valid_Boolean_Arg (It.Typ)
                and then Has_Compatible_Type (R, It.Typ)
--- 3744,3749 ----
*************** package body Sem_Ch4 is
*** 3672,3677 ****
--- 3778,3787 ----
        --  if there is more than one interpretation of the operands that is
        --  compatible with comparison, the operation is ambiguous.
  
+       --------------------
+       -- Try_One_Interp --
+       --------------------
+ 
        procedure Try_One_Interp (T1 : Entity_Id) is
        begin
  
*************** package body Sem_Ch4 is
*** 3752,3758 ****
  
        else
           Get_First_Interp (L, Index, It);
- 
           while Present (It.Typ) loop
              Try_One_Interp (It.Typ);
              Get_Next_Interp (Index, It);
--- 3862,3867 ----
*************** package body Sem_Ch4 is
*** 3771,3777 ****
        T1    : Entity_Id)
     is
        Index : Interp_Index;
!       It   : Interp;
  
     begin
        if T1 = Universal_Integer
--- 3880,3886 ----
        T1    : Entity_Id)
     is
        Index : Interp_Index;
!       It    : Interp;
  
     begin
        if T1 = Universal_Integer
*************** package body Sem_Ch4 is
*** 3782,3788 ****
                (N, Op_Id, Standard_Boolean, Base_Type (Etype (R)));
           else
              Get_First_Interp (R, Index, It);
- 
              while Present (It.Typ) loop
                 if Covers (It.Typ, T1) then
                    Add_One_Interp
--- 3891,3896 ----
*************** package body Sem_Ch4 is
*** 3847,3855 ****
        --  is ambiguous and an error can be emitted now, after trying to
        --  disambiguate, i.e. applying preference rules.
  
        procedure Try_One_Interp (T1 : Entity_Id) is
        begin
- 
           --  If the operator is an expanded name, then the type of the operand
           --  must be defined in the corresponding scope. If the type is
           --  universal, the context will impose the correct type. An anonymous
--- 3955,3966 ----
        --  is ambiguous and an error can be emitted now, after trying to
        --  disambiguate, i.e. applying preference rules.
  
+       --------------------
+       -- Try_One_Interp --
+       --------------------
+ 
        procedure Try_One_Interp (T1 : Entity_Id) is
        begin
           --  If the operator is an expanded name, then the type of the operand
           --  must be defined in the corresponding scope. If the type is
           --  universal, the context will impose the correct type. An anonymous
*************** package body Sem_Ch4 is
*** 3869,3878 ****
              return;
           end if;
  
           if T1 /= Standard_Void_Type
             and then not Is_Limited_Type (T1)
             and then not Is_Limited_Composite (T1)
-            and then Ekind (T1) /= E_Anonymous_Access_Type
             and then Has_Compatible_Type (R, T1)
           then
              if Found
--- 3980,3997 ----
              return;
           end if;
  
+          --  Ada 2005 (AI-230): Keep restriction imposed by Ada 83 and 95:
+          --  Do not allow anonymous access types in equality operators.
+ 
+          if Ada_Version < Ada_05
+            and then Ekind (T1) = E_Anonymous_Access_Type
+          then
+             return;
+          end if;
+ 
           if T1 /= Standard_Void_Type
             and then not Is_Limited_Type (T1)
             and then not Is_Limited_Composite (T1)
             and then Has_Compatible_Type (R, T1)
           then
              if Found
*************** package body Sem_Ch4 is
*** 3901,3910 ****
  
              Find_Non_Universal_Interpretations (N, R, Op_Id, T1);
  
!             if Etype (N) = Any_Type then
! 
!                --  Operator was not visible.
  
                 Found := False;
              end if;
           end if;
--- 4020,4028 ----
  
              Find_Non_Universal_Interpretations (N, R, Op_Id, T1);
  
!             --  Case of operator was not visible, Etype still set to Any_Type
  
+             if Etype (N) = Any_Type then
                 Found := False;
              end if;
           end if;
*************** package body Sem_Ch4 is
*** 3941,3950 ****
  
        if not Is_Overloaded (L) then
           Try_One_Interp (Etype (L));
-       else
  
           Get_First_Interp (L, Index, It);
- 
           while Present (It.Typ) loop
              Try_One_Interp (It.Typ);
              Get_Next_Interp (Index, It);
--- 4059,4067 ----
  
        if not Is_Overloaded (L) then
           Try_One_Interp (Etype (L));
  
+       else
           Get_First_Interp (L, Index, It);
           while Present (It.Typ) loop
              Try_One_Interp (It.Typ);
              Get_Next_Interp (Index, It);
*************** package body Sem_Ch4 is
*** 3966,3982 ****
  
     begin
        if not Is_Overloaded (R) then
- 
           if Etype (R) = Universal_Integer then
              Add_One_Interp (N, Op_Id, Any_Modular);
- 
           elsif Valid_Boolean_Arg (Etype (R)) then
              Add_One_Interp (N, Op_Id, Etype (R));
           end if;
  
        else
           Get_First_Interp (R, Index, It);
- 
           while Present (It.Typ) loop
              if Valid_Boolean_Arg (It.Typ) then
                 Add_One_Interp (N, Op_Id, It.Typ);
--- 4083,4096 ----
*************** package body Sem_Ch4 is
*** 4007,4013 ****
  
        else
           Get_First_Interp (R, Index, It);
- 
           while Present (It.Typ) loop
              if Is_Numeric_Type (It.Typ) then
                 Add_One_Interp (N, Op_Id, Base_Type (It.Typ));
--- 4121,4126 ----
*************** package body Sem_Ch4 is
*** 4105,4110 ****
--- 4218,4225 ----
  
     procedure Operator_Check (N : Node_Id) is
     begin
+       Remove_Abstract_Operations (N);
+ 
        --  Test for case of no interpretation found for operator
  
        if Etype (N) = Any_Type then
*************** package body Sem_Ch4 is
*** 4130,4143 ****
              then
                 return;
  
!             --  We explicitly check for the case of concatenation of
!             --  component with component to avoid reporting spurious
!             --  matching array types that might happen to be lurking
!             --  in distant packages (such as run-time packages). This
!             --  also prevents inconsistencies in the messages for certain
!             --  ACVC B tests, which can vary depending on types declared
!             --  in run-time interfaces. A further improvement, when
!             --  aggregates are present, is to look for a well-typed operand.
  
              elsif Present (Candidate_Type)
                and then (Nkind (N) /= N_Op_Concat
--- 4245,4257 ----
              then
                 return;
  
!             --  We explicitly check for the case of concatenation of component
!             --  with component to avoid reporting spurious matching array types
!             --  that might happen to be lurking in distant packages (such as
!             --  run-time packages). This also prevents inconsistencies in the
!             --  messages for certain ACVC B tests, which can vary depending on
!             --  types declared in run-time interfaces. Another improvement when
!             --  aggregates are present is to look for a well-typed operand.
  
              elsif Present (Candidate_Type)
                and then (Nkind (N) /= N_Op_Concat
*************** package body Sem_Ch4 is
*** 4280,4286 ****
                      and then not Is_Overloaded (R)
                      and then Base_Type (Etype (L)) = Base_Type (Etype (R))
                    then
!                      Error_Msg_Node_2 := Etype (R);
                       Error_Msg_N ("there is no applicable operator& for}", N);
  
                    else
--- 4394,4400 ----
                      and then not Is_Overloaded (R)
                      and then Base_Type (Etype (L)) = Base_Type (Etype (R))
                    then
!                      Error_Msg_Node_2 := First_Subtype (Etype (R));
                       Error_Msg_N ("there is no applicable operator& for}", N);
  
                    else
*************** package body Sem_Ch4 is
*** 4297,4302 ****
--- 4411,4638 ----
        end if;
     end Operator_Check;
  
+    -----------------------------------------
+    -- Process_Implicit_Dereference_Prefix --
+    -----------------------------------------
+ 
+    procedure Process_Implicit_Dereference_Prefix
+      (E : Entity_Id;
+       P : Entity_Id)
+    is
+       Ref : Node_Id;
+ 
+    begin
+       if Operating_Mode = Check_Semantics and then Present (E) then
+ 
+          --  We create a dummy reference to E to ensure that the reference
+          --  is not considered as part of an assignment (an implicit
+          --  dereference can never assign to its prefix). The Comes_From_Source
+          --  attribute needs to be propagated for accurate warnings.
+ 
+          Ref := New_Reference_To (E, Sloc (P));
+          Set_Comes_From_Source (Ref, Comes_From_Source (P));
+          Generate_Reference (E, Ref);
+       end if;
+    end Process_Implicit_Dereference_Prefix;
+ 
+    --------------------------------
+    -- Remove_Abstract_Operations --
+    --------------------------------
+ 
+    procedure Remove_Abstract_Operations (N : Node_Id) is
+       I            : Interp_Index;
+       It           : Interp;
+       Abstract_Op  : Entity_Id := Empty;
+ 
+       --  AI-310: If overloaded, remove abstract non-dispatching
+       --  operations. We activate this if either extensions are
+       --  enabled, or if the abstract operation in question comes
+       --  from a predefined file. This latter test allows us to
+       --  use abstract to make operations invisible to users. In
+       --  particular, if type Address is non-private and abstract
+       --  subprograms are used to hide its operators, they will be
+       --  truly hidden.
+ 
+       type Operand_Position is (First_Op, Second_Op);
+       Univ_Type : constant Entity_Id := Universal_Interpretation (N);
+ 
+       procedure Remove_Address_Interpretations (Op : Operand_Position);
+       --  Ambiguities may arise when the operands are literal and the
+       --  address operations in s-auxdec are visible. In that case, remove
+       --  the interpretation of a literal as Address, to retain the semantics
+       --  of Address as a private type.
+ 
+       ------------------------------------
+       -- Remove_Address_Interpretations --
+       ------------------------------------
+ 
+       procedure Remove_Address_Interpretations (Op : Operand_Position) is
+          Formal : Entity_Id;
+ 
+       begin
+          if Is_Overloaded (N) then
+             Get_First_Interp (N, I, It);
+             while Present (It.Nam) loop
+                Formal := First_Entity (It.Nam);
+ 
+                if Op = Second_Op then
+                   Formal := Next_Entity (Formal);
+                end if;
+ 
+                if Is_Descendent_Of_Address (Etype (Formal)) then
+                   Remove_Interp (I);
+                end if;
+ 
+                Get_Next_Interp (I, It);
+             end loop;
+          end if;
+       end Remove_Address_Interpretations;
+ 
+    --  Start of processing for Remove_Abstract_Operations
+ 
+    begin
+       if Is_Overloaded (N) then
+          Get_First_Interp (N, I, It);
+ 
+          while Present (It.Nam) loop
+             if not Is_Type (It.Nam)
+               and then Is_Abstract (It.Nam)
+               and then not Is_Dispatching_Operation (It.Nam)
+               and then
+                 (Ada_Version >= Ada_05
+                    or else Is_Predefined_File_Name
+                              (Unit_File_Name (Get_Source_Unit (It.Nam))))
+ 
+             then
+                Abstract_Op := It.Nam;
+                Remove_Interp (I);
+                exit;
+             end if;
+ 
+             Get_Next_Interp (I, It);
+          end loop;
+ 
+          if No (Abstract_Op) then
+             return;
+ 
+          elsif Nkind (N) in N_Op then
+ 
+             --  Remove interpretations that treat literals as addresses.
+             --  This is never appropriate.
+ 
+             if Nkind (N) in N_Binary_Op then
+                declare
+                   U1 : constant Boolean :=
+                      Present (Universal_Interpretation (Right_Opnd (N)));
+                   U2 : constant Boolean :=
+                      Present (Universal_Interpretation (Left_Opnd (N)));
+ 
+                begin
+                   if U1 and then not U2 then
+                      Remove_Address_Interpretations (Second_Op);
+ 
+                   elsif U2 and then not U1 then
+                      Remove_Address_Interpretations (First_Op);
+                   end if;
+ 
+                   if not (U1 and U2) then
+ 
+                      --  Remove corresponding predefined operator, which is
+                      --  always added to the overload set.
+ 
+                      Get_First_Interp (N, I, It);
+                      while Present (It.Nam) loop
+                         if Scope (It.Nam) = Standard_Standard
+                           and then Base_Type (It.Typ) =
+                                    Base_Type (Etype (Abstract_Op))
+                         then
+                            Remove_Interp (I);
+                         end if;
+ 
+                         Get_Next_Interp (I, It);
+                      end loop;
+ 
+                   elsif Is_Overloaded (N)
+                     and then Present (Univ_Type)
+                   then
+                      --  If both operands have a universal interpretation,
+                      --  select the predefined operator and discard others.
+ 
+                      Get_First_Interp (N, I, It);
+ 
+                      while Present (It.Nam) loop
+                         if Scope (It.Nam) = Standard_Standard then
+                            Set_Etype (N, Univ_Type);
+                            Set_Entity (N, It.Nam);
+                            Set_Is_Overloaded (N, False);
+                            exit;
+                         end if;
+ 
+                         Get_Next_Interp (I, It);
+                      end loop;
+                   end if;
+                end;
+             end if;
+ 
+          elsif Nkind (N) = N_Function_Call
+            and then
+              (Nkind (Name (N)) = N_Operator_Symbol
+                 or else
+                   (Nkind (Name (N)) = N_Expanded_Name
+                      and then
+                        Nkind (Selector_Name (Name (N))) = N_Operator_Symbol))
+          then
+ 
+             declare
+                Arg1 : constant Node_Id := First (Parameter_Associations (N));
+                U1   : constant Boolean :=
+                         Present (Universal_Interpretation (Arg1));
+                U2   : constant Boolean :=
+                         Present (Next (Arg1)) and then
+                         Present (Universal_Interpretation (Next (Arg1)));
+ 
+             begin
+                if U1 and then not U2 then
+                   Remove_Address_Interpretations (First_Op);
+ 
+                elsif U2 and then not U1 then
+                   Remove_Address_Interpretations (Second_Op);
+                end if;
+ 
+                if not (U1 and U2) then
+                   Get_First_Interp (N, I, It);
+                   while Present (It.Nam) loop
+                      if Scope (It.Nam) = Standard_Standard
+                        and then It.Typ = Base_Type (Etype (Abstract_Op))
+                      then
+                         Remove_Interp (I);
+                      end if;
+ 
+                      Get_Next_Interp (I, It);
+                   end loop;
+                end if;
+             end;
+          end if;
+ 
+          --  If the removal has left no valid interpretations, emit
+          --  error message now and label node as illegal.
+ 
+          if Present (Abstract_Op) then
+             Get_First_Interp (N, I, It);
+ 
+             if No (It.Nam) then
+ 
+                --  Removal of abstract operation left no viable candidate
+ 
+                Set_Etype (N, Any_Type);
+                Error_Msg_Sloc := Sloc (Abstract_Op);
+                Error_Msg_NE
+                  ("cannot call abstract operation& declared#", N, Abstract_Op);
+             end if;
+          end if;
+       end if;
+    end Remove_Abstract_Operations;
+ 
     -----------------------
     -- Try_Indirect_Call --
     -----------------------
*************** package body Sem_Ch4 is
*** 4306,4318 ****
        Nam : Entity_Id;
        Typ : Entity_Id) return Boolean
     is
-       Actuals : constant List_Id := Parameter_Associations (N);
        Actual  : Node_Id;
        Formal  : Entity_Id;
  
     begin
!       Actual := First (Actuals);
        Formal := First_Formal (Designated_Type (Typ));
        while Present (Actual)
          and then Present (Formal)
        loop
--- 4642,4656 ----
        Nam : Entity_Id;
        Typ : Entity_Id) return Boolean
     is
        Actual  : Node_Id;
        Formal  : Entity_Id;
+       Call_OK : Boolean;
  
     begin
!       Normalize_Actuals (N, Designated_Type (Typ), False, Call_OK);
!       Actual := First_Actual (N);
        Formal := First_Formal (Designated_Type (Typ));
+ 
        while Present (Actual)
          and then Present (Formal)
        loop
*************** package body Sem_Ch4 is
*** 4392,4398 ****
        else
           return False;
        end if;
- 
     end Try_Indexed_Call;
  
  end Sem_Ch4;
--- 4730,5124 ----
        else
           return False;
        end if;
     end Try_Indexed_Call;
  
+    --------------------------
+    -- Try_Object_Operation --
+    --------------------------
+ 
+    function Try_Object_Operation (N : Node_Id) return Boolean is
+       K               : constant Node_Kind  := Nkind (Parent (N));
+       Loc             : constant Source_Ptr := Sloc (N);
+       Is_Subprg_Call  : constant Boolean    := K = N_Procedure_Call_Statement
+                                                 or else K = N_Function_Call;
+       Obj             : constant Node_Id    := Prefix (N);
+       Subprog         : constant Node_Id    := Selector_Name (N);
+ 
+       Actual          : Node_Id;
+       Call_Node       : Node_Id;
+       Call_Node_Case  : Node_Id := Empty;
+       First_Actual    : Node_Id;
+       Node_To_Replace : Node_Id;
+       Obj_Type        : Entity_Id := Etype (Obj);
+ 
+       procedure Complete_Object_Operation
+         (Call_Node       : Node_Id;
+          Node_To_Replace : Node_Id;
+          Subprog         : Node_Id);
+       --  Set Subprog as the name of Call_Node, replace Node_To_Replace with
+       --  Call_Node and reanalyze Node_To_Replace.
+ 
+       procedure Transform_Object_Operation
+         (Call_Node       : out Node_Id;
+          First_Actual    : Node_Id;
+          Node_To_Replace : out Node_Id;
+          Subprog         : Node_Id);
+       --  Transform Object.Operation (...) to Operation (Object, ...)
+       --  Call_Node is the resulting subprogram call node, First_Actual is
+       --  either the object Obj or an explicit dereference of Obj in certain
+       --  cases, Node_To_Replace is either N or the parent of N, and Subprog
+       --  is the subprogram we are trying to match.
+ 
+       function Try_Class_Wide_Operation
+         (Call_Node       : Node_Id;
+          Node_To_Replace : Node_Id) return Boolean;
+       --  Traverse all the ancestor types looking for a class-wide subprogram
+       --  that matches Subprog.
+ 
+       function Try_Primitive_Operation
+         (Call_Node       : Node_Id;
+          Node_To_Replace : Node_Id) return Boolean;
+       --  Traverse the list of primitive subprograms looking for a subprogram
+       --  than matches Subprog.
+ 
+       -------------------------------
+       -- Complete_Object_Operation --
+       -------------------------------
+ 
+       procedure Complete_Object_Operation
+         (Call_Node       : Node_Id;
+          Node_To_Replace : Node_Id;
+          Subprog         : Node_Id)
+       is
+       begin
+          Set_Name (Call_Node, New_Copy_Tree (Subprog));
+          Set_Analyzed (Call_Node, False);
+          Rewrite (Node_To_Replace, Call_Node);
+          Analyze (Node_To_Replace);
+ 
+       end Complete_Object_Operation;
+ 
+       --------------------------------
+       -- Transform_Object_Operation --
+       --------------------------------
+ 
+       procedure Transform_Object_Operation
+         (Call_Node       : out Node_Id;
+          First_Actual    : Node_Id;
+          Node_To_Replace : out Node_Id;
+          Subprog         : Node_Id)
+       is
+          Actuals     : List_Id;
+          Parent_Node : constant Node_Id := Parent (N);
+ 
+       begin
+          Actuals := New_List (New_Copy_Tree (First_Actual));
+ 
+          if (Nkind (Parent_Node) = N_Function_Call
+                or else
+              Nkind (Parent_Node) = N_Procedure_Call_Statement)
+ 
+             --  Avoid recursive calls
+ 
+            and then N /= First (Parameter_Associations (Parent_Node))
+          then
+             Node_To_Replace := Parent_Node;
+ 
+             --  Copy list of actuals in full before attempting to resolve call.
+             --  This is necessary to ensure that the chaining of named actuals
+             --  that happens during matching is done on a separate copy.
+ 
+             declare
+                Actual : Node_Id;
+             begin
+                Actual := First (Parameter_Associations (Parent_Node));
+                while Present (Actual) loop
+                   Append (New_Copy_Tree (Actual), Actuals);
+                   Next (Actual);
+                end loop;
+             end;
+ 
+             if Nkind (Parent_Node) = N_Procedure_Call_Statement then
+                Call_Node :=
+                  Make_Procedure_Call_Statement (Loc,
+                    Name => New_Copy_Tree (Subprog),
+                    Parameter_Associations => Actuals);
+ 
+             else
+                pragma Assert (Nkind (Parent_Node) = N_Function_Call);
+ 
+                Call_Node :=
+                  Make_Function_Call (Loc,
+                    Name => New_Copy_Tree (Subprog),
+                    Parameter_Associations => Actuals);
+ 
+             end if;
+ 
+          --  Parameterless call
+ 
+          else
+             Node_To_Replace := N;
+ 
+             Call_Node :=
+                Make_Function_Call (Loc,
+                  Name => New_Copy_Tree (Subprog),
+                  Parameter_Associations => Actuals);
+ 
+          end if;
+       end Transform_Object_Operation;
+ 
+       ------------------------------
+       -- Try_Class_Wide_Operation --
+       ------------------------------
+ 
+       function Try_Class_Wide_Operation
+         (Call_Node       : Node_Id;
+          Node_To_Replace : Node_Id) return Boolean
+       is
+          Anc_Type : Entity_Id;
+          Dummy    : Node_Id;
+          Hom      : Entity_Id;
+          Hom_Ref  : Node_Id;
+          Success  : Boolean;
+ 
+       begin
+          --  Loop through ancestor types, traverse their homonym chains and
+          --  gather all interpretations of the subprogram.
+ 
+          Anc_Type := Obj_Type;
+          loop
+             Hom := Current_Entity (Subprog);
+             while Present (Hom) loop
+                if (Ekind (Hom) = E_Procedure
+                      or else
+                    Ekind (Hom) = E_Function)
+                  and then Present (First_Formal (Hom))
+                  and then Etype (First_Formal (Hom)) =
+                             Class_Wide_Type (Anc_Type)
+                then
+                   Hom_Ref := New_Reference_To (Hom, Loc);
+ 
+                   --  When both the type of the object and the type of the
+                   --  first formal of the primitive operation are tagged
+                   --  access types, we use a node with the object as first
+                   --  actual.
+ 
+                   if Is_Access_Type (Etype (Obj))
+                     and then Ekind (Etype (First_Formal (Hom))) =
+                                E_Anonymous_Access_Type
+                   then
+                      --  Allocate the node only once
+ 
+                      if not Present (Call_Node_Case) then
+                         Transform_Object_Operation (
+                           Call_Node       => Call_Node_Case,
+                           First_Actual    => Obj,
+                           Node_To_Replace => Dummy,
+                           Subprog         => Subprog);
+ 
+                         Set_Etype (Call_Node_Case, Any_Type);
+                         Set_Parent (Call_Node_Case, Parent (Node_To_Replace));
+                      end if;
+ 
+                      Set_Name (Call_Node_Case, Hom_Ref);
+ 
+                      Analyze_One_Call (
+                        N       => Call_Node_Case,
+                        Nam     => Hom,
+                        Report  => False,
+                        Success => Success);
+ 
+                      if Success then
+                         Complete_Object_Operation (
+                           Call_Node       => Call_Node_Case,
+                           Node_To_Replace => Node_To_Replace,
+                           Subprog         => Hom_Ref);
+ 
+                         return True;
+                      end if;
+ 
+                   --  ??? comment required
+ 
+                   else
+                      Set_Name (Call_Node, Hom_Ref);
+ 
+                      Analyze_One_Call (
+                        N       => Call_Node,
+                        Nam     => Hom,
+                        Report  => False,
+                        Success => Success);
+ 
+                      if Success then
+                         Complete_Object_Operation (
+                           Call_Node       => Call_Node,
+                           Node_To_Replace => Node_To_Replace,
+                           Subprog         => Hom_Ref);
+ 
+                         return True;
+                      end if;
+                   end if;
+                end if;
+ 
+                Hom := Homonym (Hom);
+             end loop;
+ 
+             --  Climb to ancestor type if there is one
+ 
+             exit when Etype (Anc_Type) = Anc_Type;
+             Anc_Type := Etype (Anc_Type);
+          end loop;
+ 
+          return False;
+       end Try_Class_Wide_Operation;
+ 
+       -----------------------------
+       -- Try_Primitive_Operation --
+       -----------------------------
+ 
+       function Try_Primitive_Operation
+         (Call_Node       : Node_Id;
+          Node_To_Replace : Node_Id) return Boolean
+       is
+          Dummy       : Node_Id;
+          Elmt        : Elmt_Id;
+          Prim_Op     : Entity_Id;
+          Prim_Op_Ref : Node_Id;
+          Success     : Boolean;
+ 
+       begin
+          --  Look for the subprogram in the list of primitive operations
+ 
+          Elmt := First_Elmt (Primitive_Operations (Obj_Type));
+          while Present (Elmt) loop
+             Prim_Op := Node (Elmt);
+ 
+             if Chars (Prim_Op) = Chars (Subprog)
+               and then Present (First_Formal (Prim_Op))
+             then
+                Prim_Op_Ref := New_Reference_To (Prim_Op, Loc);
+ 
+                --  When both the type of the object and the type of the first
+                --  formal of the primitive operation are tagged access types,
+                --  we use a node with the object as first actual.
+ 
+                if Is_Access_Type (Etype (Obj))
+                  and then Ekind (Etype (First_Formal (Prim_Op))) =
+                             E_Anonymous_Access_Type
+                then
+                   --  Allocate the node only once
+ 
+                   if not Present (Call_Node_Case) then
+                      Transform_Object_Operation (
+                        Call_Node       => Call_Node_Case,
+                        First_Actual    => Obj,
+                        Node_To_Replace => Dummy,
+                        Subprog         => Subprog);
+ 
+                      Set_Etype (Call_Node_Case, Any_Type);
+                      Set_Parent (Call_Node_Case, Parent (Node_To_Replace));
+                   end if;
+ 
+                   Set_Name (Call_Node_Case, Prim_Op_Ref);
+ 
+                   Analyze_One_Call (
+                     N       => Call_Node_Case,
+                     Nam     => Prim_Op,
+                     Report  => False,
+                     Success => Success);
+ 
+                   if Success then
+                      Complete_Object_Operation (
+                        Call_Node       => Call_Node_Case,
+                        Node_To_Replace => Node_To_Replace,
+                        Subprog         => Prim_Op_Ref);
+ 
+                      return True;
+                   end if;
+ 
+                --  Comment required ???
+ 
+                else
+                   Set_Name (Call_Node, Prim_Op_Ref);
+ 
+                   Analyze_One_Call (
+                     N       => Call_Node,
+                     Nam     => Prim_Op,
+                     Report  => False,
+                     Success => Success);
+ 
+                   if Success then
+                      Complete_Object_Operation (
+                        Call_Node       => Call_Node,
+                        Node_To_Replace => Node_To_Replace,
+                        Subprog         => Prim_Op_Ref);
+ 
+                      return True;
+                   end if;
+                end if;
+             end if;
+ 
+             Next_Elmt (Elmt);
+          end loop;
+ 
+          return False;
+       end Try_Primitive_Operation;
+ 
+    --  Start of processing for Try_Object_Operation
+ 
+    begin
+       if Is_Access_Type (Obj_Type) then
+          Obj_Type := Designated_Type (Obj_Type);
+       end if;
+ 
+       if Ekind (Obj_Type) = E_Private_Subtype then
+          Obj_Type := Base_Type (Obj_Type);
+       end if;
+ 
+       if Is_Class_Wide_Type (Obj_Type) then
+          Obj_Type := Etype (Class_Wide_Type (Obj_Type));
+       end if;
+ 
+       --  Analyze the actuals in case of subprogram call
+ 
+       if Is_Subprg_Call and then N = Name (Parent (N)) then
+          Actual := First (Parameter_Associations (Parent (N)));
+          while Present (Actual) loop
+             Analyze (Actual);
+             Check_Parameterless_Call (Actual);
+             Next (Actual);
+          end loop;
+       end if;
+ 
+       --  If the object is of an Access type, explicit dereference is
+       --  required.
+ 
+       if Is_Access_Type (Etype (Obj)) then
+          First_Actual :=
+            Make_Explicit_Dereference (Sloc (Obj), Obj);
+          Set_Etype (First_Actual, Obj_Type);
+       else
+          First_Actual := Obj;
+       end if;
+ 
+       --  Build a subprogram call node
+ 
+       Transform_Object_Operation (
+         Call_Node       => Call_Node,
+         First_Actual    => First_Actual,
+         Node_To_Replace => Node_To_Replace,
+         Subprog         => Subprog);
+ 
+       Set_Etype (Call_Node, Any_Type);
+       Set_Parent (Call_Node, Parent (Node_To_Replace));
+ 
+       return
+          Try_Primitive_Operation
+            (Call_Node       => Call_Node,
+             Node_To_Replace => Node_To_Replace)
+         or else
+          Try_Class_Wide_Operation
+            (Call_Node       => Call_Node,
+             Node_To_Replace => Node_To_Replace);
+    end Try_Object_Operation;
+ 
  end Sem_Ch4;
diff -Nrcpad gcc-3.4.3/gcc/ada/sem_ch5.adb gcc-4.0.0/gcc/ada/sem_ch5.adb
*** gcc-3.4.3/gcc/ada/sem_ch5.adb	Mon Jan  5 15:20:46 2004
--- gcc-4.0.0/gcc/ada/sem_ch5.adb	Thu Feb 10 13:50:41 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Uintp;    use Uintp;
*** 54,66 ****
  package body Sem_Ch5 is
  
     Unblocked_Exit_Count : Nat := 0;
!    --  This variable is used when processing if statements or case
!    --  statements, it counts the number of branches of the conditional
!    --  that are not blocked by unconditional transfer instructions. At
!    --  the end of processing, if the count is zero, it means that control
!    --  cannot fall through the conditional statement. This is used for
!    --  the generation of warning messages. This variable is recursively
!    --  saved on entry to processing an if or case, and restored on exit.
  
     -----------------------
     -- Local Subprograms --
--- 54,69 ----
  package body Sem_Ch5 is
  
     Unblocked_Exit_Count : Nat := 0;
!    --  This variable is used when processing if statements, case statements,
!    --  and block statements. It counts the number of exit points that are
!    --  not blocked by unconditional transfer instructions (for IF and CASE,
!    --  these are the branches of the conditional, for a block, they are the
!    --  statement sequence of the block, and the statement sequences of any
!    --  exception handlers that are part of the block. When processing is
!    --  complete, if this count is zero, it means that control cannot fall
!    --  through the IF, CASE or block statement. This is used for the
!    --  generation of warning messages. This variable is recursively saved
!    --  on entry to processing the construct, and restored on exit.
  
     -----------------------
     -- Local Subprograms --
*************** package body Sem_Ch5 is
*** 146,152 ****
           elsif Nkind (N) = N_Indexed_Component then
              Diagnose_Non_Variable_Lhs (Prefix (N));
  
!          --  Another special case for assignment to discriminant.
  
           elsif Nkind (N) = N_Selected_Component then
              if Present (Entity (Selector_Name (N)))
--- 149,155 ----
           elsif Nkind (N) = N_Indexed_Component then
              Diagnose_Non_Variable_Lhs (Prefix (N));
  
!          --  Another special case for assignment to discriminant
  
           elsif Nkind (N) = N_Selected_Component then
              if Present (Entity (Selector_Name (N)))
*************** package body Sem_Ch5 is
*** 339,344 ****
--- 342,348 ----
        Set_Assignment_Type (Lhs, T1);
  
        Resolve (Rhs, T1);
+       Check_Unset_Reference (Rhs);
  
        --  Remaining steps are skipped if Rhs was syntactically in error
  
*************** package body Sem_Ch5 is
*** 347,353 ****
        end if;
  
        T2 := Etype (Rhs);
-       Check_Unset_Reference (Rhs);
  
        if Covers (T1, T2) then
           null;
--- 351,356 ----
*************** package body Sem_Ch5 is
*** 397,402 ****
--- 400,421 ----
           Propagate_Tag (Lhs, Rhs);
        end if;
  
+       --  Ada 2005 (AI-231)
+ 
+       if Ada_Version >= Ada_05
+         and then Nkind (Rhs) = N_Null
+         and then Is_Access_Type (T1)
+         and then not Assignment_OK (Lhs)
+         and then ((Is_Entity_Name (Lhs)
+                      and then Can_Never_Be_Null (Entity (Lhs)))
+                    or else Can_Never_Be_Null (Etype (Lhs)))
+       then
+          Apply_Compile_Time_Constraint_Error
+            (N      => Lhs,
+             Msg    => "(Ada 2005) NULL not allowed in null-excluding objects?",
+             Reason => CE_Null_Not_Allowed);
+       end if;
+ 
        if Is_Scalar_Type (T1) then
           Apply_Scalar_Range_Check (Rhs, Etype (Lhs));
  
*************** package body Sem_Ch5 is
*** 416,425 ****
           Apply_Length_Check (Rhs, Etype (Lhs));
  
        else
!          --  Discriminant checks are applied in the course of expansion.
           null;
        end if;
  
        --  ??? a real accessibility check is needed when ???
  
        --  Post warning for useless assignment
--- 435,450 ----
           Apply_Length_Check (Rhs, Etype (Lhs));
  
        else
!          --  Discriminant checks are applied in the course of expansion
! 
           null;
        end if;
  
+       --  Note: modifications of the Lhs may only be recorded after
+       --  checks have been applied.
+ 
+       Note_Possible_Modification (Lhs);
+ 
        --  ??? a real accessibility check is needed when ???
  
        --  Post warning for useless assignment
*************** package body Sem_Ch5 is
*** 448,455 ****
             ("?useless assignment of & to itself", N, Entity (Lhs));
        end if;
  
-       Note_Possible_Modification (Lhs);
- 
        --  Check for non-allowed composite assignment
  
        if not Support_Composite_Assign_On_Target
--- 473,478 ----
*************** package body Sem_Ch5 is
*** 496,565 ****
     procedure Analyze_Block_Statement (N : Node_Id) is
        Decls : constant List_Id := Declarations (N);
        Id    : constant Node_Id := Identifier (N);
!       Ent   : Entity_Id        := Empty;
  
     begin
!       --  If a label is present analyze it and mark it as referenced
  
!       if Present (Id) then
!          Analyze (Id);
!          Ent := Entity (Id);
  
!          --  An error defense. If we have an identifier, but no entity, then
!          --  something is wrong. If we have previous errors, then just remove
!          --  the identifier and continue, otherwise raise an exception.
  
!          if No (Ent) then
!             if Total_Errors_Detected /= 0 then
!                Set_Identifier (N, Empty);
!             else
!                raise Program_Error;
!             end if;
  
!          else
!             Set_Ekind (Ent, E_Block);
!             Generate_Reference (Ent, N, ' ');
!             Generate_Definition (Ent);
  
!             if Nkind (Parent (Ent)) = N_Implicit_Label_Declaration then
!                Set_Label_Construct (Parent (Ent), N);
!             end if;
           end if;
-       end if;
  
!       --  If no entity set, create a label entity
  
!       if No (Ent) then
!          Ent := New_Internal_Entity (E_Block, Current_Scope, Sloc (N), 'B');
!          Set_Identifier (N, New_Occurrence_Of (Ent, Sloc (N)));
!          Set_Parent (Ent, N);
!       end if;
  
!       Set_Etype (Ent, Standard_Void_Type);
!       Set_Block_Node (Ent, Identifier (N));
!       New_Scope (Ent);
  
!       if Present (Decls) then
!          Analyze_Declarations (Decls);
!          Check_Completion;
!       end if;
  
!       Analyze (Handled_Statement_Sequence (N));
!       Process_End_Label (Handled_Statement_Sequence (N), 'e', Ent);
  
!       --  Analyze exception handlers if present. Note that the test for
!       --  HSS being present is an error defence against previous errors.
  
!       if Present (Handled_Statement_Sequence (N))
!         and then Present (Exception_Handlers (Handled_Statement_Sequence (N)))
!       then
!          declare
!             S : Entity_Id := Scope (Ent);
  
!          begin
!             --  Indicate that enclosing scopes contain a block with handlers.
!             --  Only non-generic scopes need to be marked.
  
              loop
                 Set_Has_Nested_Block_With_Handler (S);
                 exit when Is_Overloadable (S)
--- 519,610 ----
     procedure Analyze_Block_Statement (N : Node_Id) is
        Decls : constant List_Id := Declarations (N);
        Id    : constant Node_Id := Identifier (N);
!       HSS   : constant Node_Id := Handled_Statement_Sequence (N);
  
     begin
!       --  If no handled statement sequence is present, things are really
!       --  messed up, and we just return immediately (this is a defence
!       --  against previous errors).
  
!       if No (HSS) then
!          return;
!       end if;
  
!       --  Normal processing with HSS present
  
!       declare
!          EH  : constant List_Id := Exception_Handlers (HSS);
!          Ent : Entity_Id        := Empty;
!          S   : Entity_Id;
  
!          Save_Unblocked_Exit_Count : constant Nat := Unblocked_Exit_Count;
!          --  Recursively save value of this global, will be restored on exit
  
!       begin
!          --  Initialize unblocked exit count for statements of begin block
!          --  plus one for each excption handler that is present.
! 
!          Unblocked_Exit_Count := 1;
! 
!          if Present (EH) then
!             Unblocked_Exit_Count := Unblocked_Exit_Count + List_Length (EH);
           end if;
  
!          --  If a label is present analyze it and mark it as referenced
  
!          if Present (Id) then
!             Analyze (Id);
!             Ent := Entity (Id);
  
!             --  An error defense. If we have an identifier, but no entity,
!             --  then something is wrong. If we have previous errors, then
!             --  just remove the identifier and continue, otherwise raise
!             --  an exception.
  
!             if No (Ent) then
!                if Total_Errors_Detected /= 0 then
!                   Set_Identifier (N, Empty);
!                else
!                   raise Program_Error;
!                end if;
  
!             else
!                Set_Ekind (Ent, E_Block);
!                Generate_Reference (Ent, N, ' ');
!                Generate_Definition (Ent);
  
!                if Nkind (Parent (Ent)) = N_Implicit_Label_Declaration then
!                   Set_Label_Construct (Parent (Ent), N);
!                end if;
!             end if;
!          end if;
  
!          --  If no entity set, create a label entity
  
!          if No (Ent) then
!             Ent := New_Internal_Entity (E_Block, Current_Scope, Sloc (N), 'B');
!             Set_Identifier (N, New_Occurrence_Of (Ent, Sloc (N)));
!             Set_Parent (Ent, N);
!          end if;
! 
!          Set_Etype (Ent, Standard_Void_Type);
!          Set_Block_Node (Ent, Identifier (N));
!          New_Scope (Ent);
! 
!          if Present (Decls) then
!             Analyze_Declarations (Decls);
!             Check_Completion;
!          end if;
  
+          Analyze (HSS);
+          Process_End_Label (HSS, 'e', Ent);
+ 
+          --  If exception handlers are present, then we indicate that
+          --  enclosing scopes contain a block with handlers. We only
+          --  need to mark non-generic scopes.
+ 
+          if Present (EH) then
+             S := Scope (Ent);
              loop
                 Set_Has_Nested_Block_With_Handler (S);
                 exit when Is_Overloadable (S)
*************** package body Sem_Ch5 is
*** 567,577 ****
                   or else Is_Generic_Unit (S);
                 S := Scope (S);
              end loop;
!          end;
!       end if;
  
!       Check_References (Ent);
!       End_Scope;
     end Analyze_Block_Statement;
  
     ----------------------------
--- 612,629 ----
                   or else Is_Generic_Unit (S);
                 S := Scope (S);
              end loop;
!          end if;
  
!          Check_References (Ent);
!          End_Scope;
! 
!          if Unblocked_Exit_Count = 0 then
!             Unblocked_Exit_Count := Save_Unblocked_Exit_Count;
!             Check_Unreachable_Code (N);
!          else
!             Unblocked_Exit_Count := Save_Unblocked_Exit_Count;
!          end if;
!       end;
     end Analyze_Block_Statement;
  
     ----------------------------
*************** package body Sem_Ch5 is
*** 579,584 ****
--- 631,642 ----
     ----------------------------
  
     procedure Analyze_Case_Statement (N : Node_Id) is
+       Exp            : Node_Id;
+       Exp_Type       : Entity_Id;
+       Exp_Btype      : Entity_Id;
+       Last_Choice    : Nat;
+       Dont_Care      : Boolean;
+       Others_Present : Boolean;
  
        Statements_Analyzed : Boolean := False;
        --  Set True if at least some statement sequences get analyzed.
*************** package body Sem_Ch5 is
*** 622,643 ****
        ------------------------
  
        procedure Process_Statements (Alternative : Node_Id) is
        begin
           Unblocked_Exit_Count := Unblocked_Exit_Count + 1;
           Statements_Analyzed := True;
           Analyze_Statements (Statements (Alternative));
        end Process_Statements;
  
!       --  Variables local to Analyze_Case_Statement.
! 
!       Exp       : Node_Id;
!       Exp_Type  : Entity_Id;
!       Exp_Btype : Entity_Id;
  
!       Case_Table     : Choice_Table_Type (1 .. Number_Of_Choices (N));
!       Last_Choice    : Nat;
!       Dont_Care      : Boolean;
!       Others_Present : Boolean;
  
     --  Start of processing for Analyze_Case_Statement
  
--- 680,740 ----
        ------------------------
  
        procedure Process_Statements (Alternative : Node_Id) is
+          Choices : constant List_Id := Discrete_Choices (Alternative);
+          Ent     : Entity_Id;
+ 
        begin
           Unblocked_Exit_Count := Unblocked_Exit_Count + 1;
           Statements_Analyzed := True;
+ 
+          --  An interesting optimization. If the case statement expression
+          --  is a simple entity, then we can set the current value within
+          --  an alternative if the alternative has one possible value.
+ 
+          --    case N is
+          --      when 1      => alpha
+          --      when 2 | 3  => beta
+          --      when others => gamma
+ 
+          --  Here we know that N is initially 1 within alpha, but for beta
+          --  and gamma, we do not know anything more about the initial value.
+ 
+          if Is_Entity_Name (Exp) then
+             Ent := Entity (Exp);
+ 
+             if Ekind (Ent) = E_Variable
+                  or else
+                Ekind (Ent) = E_In_Out_Parameter
+                  or else
+                Ekind (Ent) = E_Out_Parameter
+             then
+                if List_Length (Choices) = 1
+                  and then Nkind (First (Choices)) in N_Subexpr
+                  and then Compile_Time_Known_Value (First (Choices))
+                then
+                   Set_Current_Value (Entity (Exp), First (Choices));
+                end if;
+ 
+                Analyze_Statements (Statements (Alternative));
+ 
+                --  After analyzing the case, set the current value to empty
+                --  since we won't know what it is for the next alternative
+                --  (unless reset by this same circuit), or after the case.
+ 
+                Set_Current_Value (Entity (Exp), Empty);
+                return;
+             end if;
+          end if;
+ 
+          --  Case where expression is not an entity name of a variable
+ 
           Analyze_Statements (Statements (Alternative));
        end Process_Statements;
  
!       --  Table to record choices. Put after subprograms since we make
!       --  a call to Number_Of_Choices to get the right number of entries.
  
!       Case_Table : Choice_Table_Type (1 .. Number_Of_Choices (N));
  
     --  Start of processing for Analyze_Case_Statement
  
*************** package body Sem_Ch5 is
*** 667,673 ****
             ("character literal as case expression is ambiguous", Exp);
           return;
  
!       elsif Ada_83
          and then (Is_Generic_Type (Exp_Btype)
                      or else Is_Generic_Type (Root_Type (Exp_Btype)))
        then
--- 764,770 ----
             ("character literal as case expression is ambiguous", Exp);
           return;
  
!       elsif Ada_Version = Ada_83
          and then (Is_Generic_Type (Exp_Btype)
                      or else Is_Generic_Type (Root_Type (Exp_Btype)))
        then
*************** package body Sem_Ch5 is
*** 844,850 ****
     -- Analyze_If_Statement --
     --------------------------
  
!    --  A special complication arises in the analysis of if statements.
  
     --  The expander has circuitry to completely delete code that it
     --  can tell will not be executed (as a result of compile time known
--- 941,947 ----
     -- Analyze_If_Statement --
     --------------------------
  
!    --  A special complication arises in the analysis of if statements
  
     --  The expander has circuitry to completely delete code that it
     --  can tell will not be executed (as a result of compile time known
*************** package body Sem_Ch5 is
*** 1010,1021 ****
--- 1107,1230 ----
     ------------------------------
  
     procedure Analyze_Iteration_Scheme (N : Node_Id) is
+ 
+       procedure Process_Bounds (R : Node_Id);
+       --  If the iteration is given by a range, create temporaries and
+       --  assignment statements block to capture the bounds and perform
+       --  required finalization actions in case a bound includes a function
+       --  call that uses the temporary stack.
+ 
        procedure Check_Controlled_Array_Attribute (DS : Node_Id);
        --  If the bounds are given by a 'Range reference on a function call
        --  that returns a controlled array, introduce an explicit declaration
        --  to capture the bounds, so that the function result can be finalized
        --  in timely fashion.
  
+       --------------------
+       -- Process_Bounds --
+       --------------------
+ 
+       procedure Process_Bounds (R : Node_Id) is
+          Loc          : constant Source_Ptr := Sloc (N);
+          Lo           : constant Node_Id := Low_Bound  (R);
+          Hi           : constant Node_Id := High_Bound (R);
+          New_Lo_Bound : Node_Id := Empty;
+          New_Hi_Bound : Node_Id := Empty;
+          Typ          : constant Entity_Id := Etype (R);
+ 
+          function One_Bound (Bound : Node_Id) return Node_Id;
+          --  Create one declaration followed by one assignment statement
+          --  to capture the value of bound. We create a separate assignment
+          --  in order to force the creation of a block in case the bound
+          --  contains a call that uses the secondary stack.
+ 
+          ---------------
+          -- One_Bound --
+          ---------------
+ 
+          function One_Bound (Bound : Node_Id) return Node_Id is
+             Assign   : Node_Id;
+             Id       : Entity_Id;
+             Decl     : Node_Id;
+             Decl_Typ : Entity_Id;
+ 
+          begin
+             --  If the bound is a constant or an object, no need for a
+             --  separate declaration. If the bound is the result of previous
+             --  expansion it is already analyzed and should not be modified.
+             --  Note that the Bound will be resolved later, if needed, as
+             --  part of the call to Make_Index (literal bounds may need to
+             --  be resolved to type Integer).
+ 
+             if Nkind (Bound) = N_Integer_Literal
+               or else Is_Entity_Name (Bound)
+               or else Analyzed (Bound)
+             then
+                return Bound;
+             end if;
+ 
+             Id :=
+               Make_Defining_Identifier (Loc,
+                 Chars => New_Internal_Name ('S'));
+ 
+             --  If the type of the discrete range is Universal_Integer, then
+             --  the bound's type must be resolved to Integer, so the object
+             --  used to hold the bound must also have type Integer.
+ 
+             if Typ = Universal_Integer then
+                Decl_Typ := Standard_Integer;
+             else
+                Decl_Typ := Typ;
+             end if;
+ 
+             Decl :=
+               Make_Object_Declaration (Loc,
+                 Defining_Identifier => Id,
+                 Object_Definition   => New_Occurrence_Of (Decl_Typ, Loc));
+ 
+             Insert_Before (Parent (N), Decl);
+             Analyze (Decl);
+ 
+             Assign :=
+               Make_Assignment_Statement (Loc,
+                 Name        => New_Occurrence_Of (Id, Loc),
+                 Expression  => Relocate_Node (Bound));
+ 
+             Save_Interps (Bound, Expression (Assign));
+             Insert_Before (Parent (N), Assign);
+             Analyze (Assign);
+ 
+             Rewrite (Bound, New_Occurrence_Of (Id, Loc));
+ 
+             if Nkind (Assign) = N_Assignment_Statement then
+                return Expression (Assign);
+             else
+                return Bound;
+             end if;
+          end One_Bound;
+ 
+       --  Start of processing for Process_Bounds
+ 
+       begin
+          New_Lo_Bound := One_Bound (Lo);
+          New_Hi_Bound := One_Bound (Hi);
+ 
+          --  Propagate staticness to loop range itself, in case the
+          --  corresponding subtype is static.
+ 
+          if New_Lo_Bound /= Lo
+            and then Is_Static_Expression (New_Lo_Bound)
+          then
+             Rewrite  (Low_Bound (R), New_Copy (New_Lo_Bound));
+          end if;
+ 
+          if New_Hi_Bound /= Hi
+            and then Is_Static_Expression (New_Hi_Bound)
+          then
+             Rewrite (High_Bound (R), New_Copy (New_Hi_Bound));
+          end if;
+       end Process_Bounds;
+ 
        --------------------------------------
        -- Check_Controlled_Array_Attribute --
        --------------------------------------
*************** package body Sem_Ch5 is
*** 1117,1125 ****
                       end if;
                    end;
  
!                   --  Now analyze the subtype definition
  
!                   Analyze (DS);
  
                    if DS = Error then
                       return;
--- 1326,1342 ----
                       end if;
                    end;
  
!                   --  Now analyze the subtype definition. If it is
!                   --  a range, create temporaries for bounds.
  
!                   if Nkind (DS) = N_Range
!                     and then Expander_Active
!                   then
!                      Pre_Analyze_And_Resolve (DS);
!                      Process_Bounds (DS);
!                   else
!                      Analyze (DS);
!                   end if;
  
                    if DS = Error then
                       return;
*************** package body Sem_Ch5 is
*** 1143,1148 ****
--- 1360,1366 ----
                    end if;
  
                    Check_Controlled_Array_Attribute (DS);
+ 
                    Make_Index (DS, LP);
  
                    Set_Ekind          (Id, E_Loop_Parameter);
*************** package body Sem_Ch5 is
*** 1356,1362 ****
              Analyze (Identifier (S));
              Lab := Entity (Identifier (S));
  
!             --  If we found a label mark it as reachable.
  
              if Ekind (Lab) = E_Label then
                 Generate_Definition (Lab);
--- 1574,1580 ----
              Analyze (Identifier (S));
              Lab := Entity (Identifier (S));
  
!             --  If we found a label mark it as reachable
  
              if Ekind (Lab) = E_Label then
                 Generate_Definition (Lab);
*************** package body Sem_Ch5 is
*** 1494,1500 ****
           begin
              Nxt := Original_Node (Next (N));
  
!             if Present (Nxt)
                and then Comes_From_Source (Nxt)
                and then Is_Statement (Nxt)
              then
--- 1712,1726 ----
           begin
              Nxt := Original_Node (Next (N));
  
!             --  If a label follows us, then we never have dead code, since
!             --  someone could branch to the label, so we just ignore it.
! 
!             if Nkind (Nxt) = N_Label then
!                return;
! 
!             --  Otherwise see if we have a real statement following us
! 
!             elsif Present (Nxt)
                and then Comes_From_Source (Nxt)
                and then Is_Statement (Nxt)
              then
*************** package body Sem_Ch5 is
*** 1550,1577 ****
  
              --  If the unconditional transfer of control instruction is
              --  the last statement of a sequence, then see if our parent
!             --  is an IF statement, and if so adjust the unblocked exit
!             --  count of the if statement to reflect the fact that this
!             --  branch of the if is indeed blocked by a transfer of control.
  
              else
                 P := Parent (N);
  
                 if Nkind (P) = N_If_Statement then
                    null;
  
                 elsif Nkind (P) = N_Elsif_Part then
                    P := Parent (P);
                    pragma Assert (Nkind (P) = N_If_Statement);
  
                 elsif Nkind (P) = N_Case_Statement_Alternative then
                    P := Parent (P);
                    pragma Assert (Nkind (P) = N_Case_Statement);
  
                 else
                    return;
                 end if;
  
                 Unblocked_Exit_Count := Unblocked_Exit_Count - 1;
              end if;
           end;
--- 1776,1828 ----
  
              --  If the unconditional transfer of control instruction is
              --  the last statement of a sequence, then see if our parent
!             --  is one of the constructs for which we count unblocked exits,
!             --  and if so, adjust the count.
  
              else
                 P := Parent (N);
  
+                --  Statements in THEN part or ELSE part of IF statement
+ 
                 if Nkind (P) = N_If_Statement then
                    null;
  
+                --  Statements in ELSIF part of an IF statement
+ 
                 elsif Nkind (P) = N_Elsif_Part then
                    P := Parent (P);
                    pragma Assert (Nkind (P) = N_If_Statement);
  
+                --  Statements in CASE statement alternative
+ 
                 elsif Nkind (P) = N_Case_Statement_Alternative then
                    P := Parent (P);
                    pragma Assert (Nkind (P) = N_Case_Statement);
  
+                --  Statements in body of block
+ 
+                elsif Nkind (P) = N_Handled_Sequence_Of_Statements
+                  and then Nkind (Parent (P)) = N_Block_Statement
+                then
+                   null;
+ 
+                --  Statements in exception handler in a block
+ 
+                elsif Nkind (P) = N_Exception_Handler
+                  and then Nkind (Parent (P)) = N_Handled_Sequence_Of_Statements
+                  and then Nkind (Parent (Parent (P))) = N_Block_Statement
+                then
+                   null;
+ 
+                --  None of these cases, so return
+ 
                 else
                    return;
                 end if;
  
+                --  This was one of the cases we are looking for (i.e. the
+                --  parent construct was IF, CASE or block) so decrement count.
+ 
                 Unblocked_Exit_Count := Unblocked_Exit_Count - 1;
              end if;
           end;
diff -Nrcpad gcc-3.4.3/gcc/ada/sem_ch6.adb gcc-4.0.0/gcc/ada/sem_ch6.adb
*** gcc-3.4.3/gcc/ada/sem_ch6.adb	Thu Nov 20 09:54:01 2003
--- gcc-4.0.0/gcc/ada/sem_ch6.adb	Thu Feb 10 13:50:45 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Sem_Ch3;  use Sem_Ch3;
*** 48,53 ****
--- 48,54 ----
  with Sem_Ch4;  use Sem_Ch4;
  with Sem_Ch5;  use Sem_Ch5;
  with Sem_Ch8;  use Sem_Ch8;
+ with Sem_Ch10; use Sem_Ch10;
  with Sem_Ch12; use Sem_Ch12;
  with Sem_Disp; use Sem_Disp;
  with Sem_Dist; use Sem_Dist;
*************** package body Sem_Ch6 is
*** 78,86 ****
     -- Local Subprograms --
     -----------------------
  
     procedure Analyze_Generic_Subprogram_Body (N : Node_Id; Gen_Id : Entity_Id);
!    --  Analyze a generic subprogram body. N is the body to be analyzed,
!    --  and Gen_Id is the defining entity Id for the corresponding spec.
  
     procedure Build_Body_To_Inline (N : Node_Id; Subp : Entity_Id);
     --  If a subprogram has pragma Inline and inlining is active, use generic
--- 79,92 ----
     -- Local Subprograms --
     -----------------------
  
+    procedure Analyze_Return_Type (N : Node_Id);
+    --  Subsidiary to Process_Formals: analyze subtype mark in function
+    --  specification, in a context where the formals are visible and hide
+    --  outer homographs.
+ 
     procedure Analyze_Generic_Subprogram_Body (N : Node_Id; Gen_Id : Entity_Id);
!    --  Analyze a generic subprogram body. N is the body to be analyzed, and
!    --  Gen_Id is the defining entity Id for the corresponding spec.
  
     procedure Build_Body_To_Inline (N : Node_Id; Subp : Entity_Id);
     --  If a subprogram has pragma Inline and inlining is active, use generic
*************** package body Sem_Ch6 is
*** 88,93 ****
--- 94,101 ----
     --  subsequenty used for inline expansions at call sites. If subprogram can
     --  be inlined (depending on size and nature of local declarations) this
     --  function returns true. Otherwise subprogram body is treated normally.
+    --  If proper warnings are enabled and the subprogram contains a construct
+    --  that cannot be inlined, the offending construct is flagged accordingly.
  
     type Conformance_Type is
       (Type_Conformant, Mode_Conformant, Subtype_Conformant, Fully_Conformant);
*************** package body Sem_Ch6 is
*** 126,173 ****
     --  N is the N_Subprogram_Body node for a subprogram. This routine applies
     --  the alpha ordering rule for N if this ordering requirement applicable.
  
-    function Is_Non_Overriding_Operation
-      (Prev_E : Entity_Id;
-       New_E  : Entity_Id) return Boolean;
-    --  Enforce the rule given in 12.3(18): a private operation in an instance
-    --  overrides an inherited operation only if the corresponding operation
-    --  was overriding in the generic. This can happen for primitive operations
-    --  of types derived (in the generic unit) from formal private or formal
-    --  derived types.
- 
     procedure Check_Returns
       (HSS  : Node_Id;
        Mode : Character;
        Err  : out Boolean);
!    --  Called to check for missing return statements in a function body,
!    --  or for returns present in a procedure body which has No_Return set.
!    --  L is the handled statement sequence for the subprogram body. This
!    --  procedure checks all flow paths to make sure they either have a
!    --  return (Mode = 'F') or do not have a return (Mode = 'P'). The flag
!    --  Err is set if there are any control paths not explicitly terminated
!    --  by a return in the function case, and is True otherwise.
  
     function Conforming_Types
       (T1       : Entity_Id;
        T2       : Entity_Id;
        Ctype    : Conformance_Type;
        Get_Inst : Boolean := False) return Boolean;
!    --  Check that two formal parameter types conform, checking both
!    --  for equality of base types, and where required statically
!    --  matching subtypes, depending on the setting of Ctype.
  
     procedure Enter_Overloaded_Entity (S : Entity_Id);
!    --  This procedure makes S, a new overloaded entity, into the first
!    --  visible entity with that name.
  
     procedure Install_Entity (E : Entity_Id);
!    --  Make single entity visible. Used for generic formals as well.
  
     procedure Install_Formals (Id : Entity_Id);
!    --  On entry to a subprogram body, make the formals visible. Note
!    --  that simply placing the subprogram on the scope stack is not
!    --  sufficient: the formals must become the current entities for
!    --  their names.
  
     procedure Make_Inequality_Operator (S : Entity_Id);
     --  Create the declaration for an inequality operator that is implicitly
--- 134,180 ----
     --  N is the N_Subprogram_Body node for a subprogram. This routine applies
     --  the alpha ordering rule for N if this ordering requirement applicable.
  
     procedure Check_Returns
       (HSS  : Node_Id;
        Mode : Character;
        Err  : out Boolean);
!    --  Called to check for missing return statements in a function body, or
!    --  for returns present in a procedure body which has No_Return set. L is
!    --  the handled statement sequence for the subprogram body. This procedure
!    --  checks all flow paths to make sure they either have return (Mode = 'F')
!    --  or do not have a return (Mode = 'P'). The flag Err is set if there are
!    --  any control paths not explicitly terminated by a return in the function
!    --  case, and is True otherwise.
  
     function Conforming_Types
       (T1       : Entity_Id;
        T2       : Entity_Id;
        Ctype    : Conformance_Type;
        Get_Inst : Boolean := False) return Boolean;
!    --  Check that two formal parameter types conform, checking both for
!    --  equality of base types, and where required statically matching
!    --  subtypes, depending on the setting of Ctype.
  
     procedure Enter_Overloaded_Entity (S : Entity_Id);
!    --  This procedure makes S, a new overloaded entity, into the first visible
!    --  entity with that name.
  
     procedure Install_Entity (E : Entity_Id);
!    --  Make single entity visible. Used for generic formals as well
  
     procedure Install_Formals (Id : Entity_Id);
!    --  On entry to a subprogram body, make the formals visible. Note that
!    --  simply placing the subprogram on the scope stack is not sufficient:
!    --  the formals must become the current entities for their names.
! 
!    function Is_Non_Overriding_Operation
!      (Prev_E : Entity_Id;
!       New_E  : Entity_Id) return Boolean;
!    --  Enforce the rule given in 12.3(18): a private operation in an instance
!    --  overrides an inherited operation only if the corresponding operation
!    --  was overriding in the generic. This can happen for primitive operations
!    --  of types derived (in the generic unit) from formal private or formal
!    --  derived types.
  
     procedure Make_Inequality_Operator (S : Entity_Id);
     --  Create the declaration for an inequality operator that is implicitly
*************** package body Sem_Ch6 is
*** 178,185 ****
     --  have no parameters, or those for which defaults exist for all parameters
  
     procedure Reference_Body_Formals (Spec : Entity_Id; Bod : Entity_Id);
!    --  If there is a separate spec for a subprogram or generic subprogram,
!    --  the formals of the body are treated as references to the corresponding
     --  formals of the spec. This reference does not count as an actual use of
     --  the formal, in order to diagnose formals that are unused in the body.
  
--- 185,192 ----
     --  have no parameters, or those for which defaults exist for all parameters
  
     procedure Reference_Body_Formals (Spec : Entity_Id; Bod : Entity_Id);
!    --  If there is a separate spec for a subprogram or generic subprogram, the
!    --  formals of the body are treated as references to the corresponding
     --  formals of the spec. This reference does not count as an actual use of
     --  the formal, in order to diagnose formals that are unused in the body.
  
*************** package body Sem_Ch6 is
*** 225,230 ****
--- 232,249 ----
     begin
        Analyze (P);
  
+       --  A call of the form A.B (X) may be an Ada05 call, which is rewritten
+       --  as B(A, X). If the rewriting is successful, the call has been
+       --  analyzed and we just return.
+ 
+       if Nkind (P) = N_Selected_Component
+         and then Name (N) /= P
+         and then Is_Rewrite_Substitution (N)
+         and then Present (Etype (N))
+       then
+          return;
+       end if;
+ 
        --  If error analyzing name, then set Any_Type as result type and return
  
        if Etype (P) = Any_Type then
*************** package body Sem_Ch6 is
*** 262,270 ****
        Spec     : Node_Id;
  
     begin
!       --  Copy body and disable expansion while analyzing the generic
!       --  For a stub, do not copy the stub (which would load the proper body),
!       --  this will be done when the proper body is analyzed.
  
        if Nkind (N) /= N_Subprogram_Body_Stub then
           New_N := Copy_Generic_Node (N, Empty, Instantiating => False);
--- 281,289 ----
        Spec     : Node_Id;
  
     begin
!       --  Copy body and disable expansion while analyzing the generic For a
!       --  stub, do not copy the stub (which would load the proper body), this
!       --  will be done when the proper body is analyzed.
  
        if Nkind (N) /= N_Subprogram_Body_Stub then
           New_N := Copy_Generic_Node (N, Empty, Instantiating => False);
*************** package body Sem_Ch6 is
*** 353,359 ****
              end loop;
           end if;
  
!          --  Visible generic entity is callable within its own body.
  
           Set_Ekind (Gen_Id, Ekind (Body_Id));
           Set_Ekind (Body_Id, E_Subprogram_Body);
--- 372,378 ----
              end loop;
           end if;
  
!          --  Visible generic entity is callable within its own body
  
           Set_Ekind (Gen_Id, Ekind (Body_Id));
           Set_Ekind (Body_Id, E_Subprogram_Body);
*************** package body Sem_Ch6 is
*** 363,369 ****
  
           if Nkind (N) = N_Subprogram_Body_Stub then
  
!             --  No body to analyze, so restore state of generic unit.
  
              Set_Ekind (Gen_Id, Kind);
              Set_Ekind (Body_Id, Kind);
--- 382,388 ----
  
           if Nkind (N) = N_Subprogram_Body_Stub then
  
!             --  No body to analyze, so restore state of generic unit
  
              Set_Ekind (Gen_Id, Kind);
              Set_Ekind (Body_Id, Kind);
*************** package body Sem_Ch6 is
*** 376,385 ****
              return;
           end if;
  
!          --  If this is a compilation unit, it must be made visible
!          --  explicitly, because the compilation of the declaration,
!          --  unlike other library unit declarations, does not. If it
!          --  is not a unit, the following is redundant but harmless.
  
           Set_Is_Immediately_Visible (Gen_Id);
           Reference_Body_Formals (Gen_Id, Body_Id);
--- 395,404 ----
              return;
           end if;
  
!          --  If this is a compilation unit, it must be made visible explicitly,
!          --  because the compilation of the declaration, unlike other library
!          --  unit declarations, does not. If it is not a unit, the following
!          --  is redundant but harmless.
  
           Set_Is_Immediately_Visible (Gen_Id);
           Reference_Body_Formals (Gen_Id, Body_Id);
*************** package body Sem_Ch6 is
*** 391,398 ****
  
           Save_Global_References (Original_Node (N));
  
!          --  Prior to exiting the scope, include generic formals again
!          --  (if any are present) in the set of local entities.
  
           if Present (First_Ent) then
              Set_First_Entity (Gen_Id, First_Ent);
--- 410,417 ----
  
           Save_Global_References (Original_Node (N));
  
!          --  Prior to exiting the scope, include generic formals again (if any
!          --  are present) in the set of local entities.
  
           if Present (First_Ent) then
              Set_First_Entity (Gen_Id, First_Ent);
*************** package body Sem_Ch6 is
*** 401,410 ****
           Check_References (Gen_Id);
        end;
  
        End_Scope;
        Check_Subprogram_Order (N);
  
!       --  Outside of its body, unit is generic again.
  
        Set_Ekind (Gen_Id, Kind);
        Generate_Reference (Gen_Id, Body_Id, 'b', Set_Ref => False);
--- 420,430 ----
           Check_References (Gen_Id);
        end;
  
+       Process_End_Label (Handled_Statement_Sequence (N), 't', Current_Scope);
        End_Scope;
        Check_Subprogram_Order (N);
  
!       --  Outside of its body, unit is generic again
  
        Set_Ekind (Gen_Id, Kind);
        Generate_Reference (Gen_Id, Body_Id, 'b', Set_Ref => False);
*************** package body Sem_Ch6 is
*** 416,427 ****
     -- Analyze_Operator_Symbol --
     -----------------------------
  
!    --  An operator symbol such as "+" or "and" may appear in context where
!    --  the literal denotes an entity name, such as  "+"(x, y) or in a
!    --  context when it is just a string, as in  (conjunction = "or"). In
!    --  these cases the parser generates this node, and the semantics does
!    --  the disambiguation. Other such case are actuals in an instantiation,
!    --  the generic unit in an instantiation, and pragma arguments.
  
     procedure Analyze_Operator_Symbol (N : Node_Id) is
        Par : constant Node_Id := Parent (N);
--- 436,447 ----
     -- Analyze_Operator_Symbol --
     -----------------------------
  
!    --  An operator symbol such as "+" or "and" may appear in context where the
!    --  literal denotes an entity name, such as "+"(x, y) or in context when it
!    --  is just a string, as in (conjunction = "or"). In these cases the parser
!    --  generates this node, and the semantics does the disambiguation. Other
!    --  such case are actuals in an instantiation, the generic unit in an
!    --  instantiation, and pragma arguments.
  
     procedure Analyze_Operator_Symbol (N : Node_Id) is
        Par : constant Node_Id := Parent (N);
*************** package body Sem_Ch6 is
*** 557,565 ****
          and then Present (Actuals)
          and then No (Next (First (Actuals)))
        then
!          --  Can be call to parameterless entry family. What appears to be
!          --  the sole argument is in fact the entry index. Rewrite prefix
!          --  of node accordingly. Source representation is unchanged by this
           --  transformation.
  
           New_N :=
--- 577,585 ----
          and then Present (Actuals)
          and then No (Next (First (Actuals)))
        then
!          --  Can be call to parameterless entry family. What appears to be the
!          --  sole argument is in fact the entry index. Rewrite prefix of node
!          --  accordingly. Source representation is unchanged by this
           --  transformation.
  
           New_N :=
*************** package body Sem_Ch6 is
*** 581,589 ****
              Error_Msg_N ("expect access to procedure in call", P);
           end if;
  
!       --  The name can be a selected component or an indexed component
!       --  that yields an access to subprogram. Such a prefix is legal if
!       --  the call has parameter associations.
  
        elsif Is_Access_Type (Etype (P))
          and then Ekind (Designated_Type (Etype (P))) = E_Subprogram_Type
--- 601,609 ----
              Error_Msg_N ("expect access to procedure in call", P);
           end if;
  
!       --  The name can be a selected component or an indexed component that
!       --  yields an access to subprogram. Such a prefix is legal if the call
!       --  has parameter associations.
  
        elsif Is_Access_Type (Etype (P))
          and then Ekind (Designated_Type (Etype (P))) = E_Subprogram_Type
*************** package body Sem_Ch6 is
*** 594,608 ****
              Error_Msg_N ("missing explicit dereference in call ", N);
           end if;
  
!       --  If not an access to subprogram, then the prefix must resolve to
!       --  the name of an entry, entry family, or protected operation.
  
!       --  For the case of a simple entry call, P is a selected component
!       --  where the prefix is the task and the selector name is the entry.
!       --  A call to a protected procedure will have the same syntax. If
!       --  the protected object contains overloaded operations, the entity
!       --  may appear as a function, the context will select the operation
!       --  whose type is Void.
  
        elsif Nkind (P) = N_Selected_Component
          and then (Ekind (Entity (Selector_Name (P))) = E_Entry
--- 614,627 ----
              Error_Msg_N ("missing explicit dereference in call ", N);
           end if;
  
!       --  If not an access to subprogram, then the prefix must resolve to the
!       --  name of an entry, entry family, or protected operation.
  
!       --  For the case of a simple entry call, P is a selected component where
!       --  the prefix is the task and the selector name is the entry. A call to
!       --  a protected procedure will have the same syntax. If the protected
!       --  object contains overloaded operations, the entity may appear as a
!       --  function, the context will select the operation whose type is Void.
  
        elsif Nkind (P) = N_Selected_Component
          and then (Ekind (Entity (Selector_Name (P))) = E_Entry
*************** package body Sem_Ch6 is
*** 618,626 ****
          and then Present (Actuals)
          and then No (Next (First (Actuals)))
        then
!          --  Can be call to parameterless entry family. What appears to be
!          --  the sole argument is in fact the entry index. Rewrite prefix
!          --  of node accordingly. Source representation is unchanged by this
           --  transformation.
  
           New_N :=
--- 637,645 ----
          and then Present (Actuals)
          and then No (Next (First (Actuals)))
        then
!          --  Can be call to parameterless entry family. What appears to be the
!          --  sole argument is in fact the entry index. Rewrite prefix of node
!          --  accordingly. Source representation is unchanged by this
           --  transformation.
  
           New_N :=
*************** package body Sem_Ch6 is
*** 657,663 ****
           Analyze (P);
           Analyze_Call_And_Resolve;
  
!       --  Anything else is an error.
  
        else
           Error_Msg_N ("Invalid procedure or entry call", N);
--- 676,682 ----
           Analyze (P);
           Analyze_Call_And_Resolve;
  
!       --  Anything else is an error
  
        else
           Error_Msg_N ("Invalid procedure or entry call", N);
*************** package body Sem_Ch6 is
*** 716,724 ****
  
              Apply_Constraint_Check (Expr, R_Type);
  
!             --  ??? A real run-time accessibility check is needed
!             --  in cases involving dereferences of access parameters.
!             --  For now we just check the static cases.
  
              if Is_Return_By_Reference_Type (Etype (Scope_Id))
                and then Object_Access_Level (Expr)
--- 735,743 ----
  
              Apply_Constraint_Check (Expr, R_Type);
  
!             --  ??? A real run-time accessibility check is needed in cases
!             --  involving dereferences of access parameters. For now we just
!             --  check the static cases.
  
              if Is_Return_By_Reference_Type (Etype (Scope_Id))
                and then Object_Access_Level (Expr)
*************** package body Sem_Ch6 is
*** 762,767 ****
--- 781,814 ----
        Check_Unreachable_Code (N);
     end Analyze_Return_Statement;
  
+    -------------------------
+    -- Analyze_Return_Type --
+    -------------------------
+ 
+    procedure Analyze_Return_Type (N : Node_Id) is
+       Designator : constant Entity_Id := Defining_Entity (N);
+       Typ        : Entity_Id := Empty;
+ 
+    begin
+       if Subtype_Mark (N) /= Error then
+          Find_Type (Subtype_Mark (N));
+          Typ := Entity (Subtype_Mark (N));
+          Set_Etype (Designator, Typ);
+ 
+          if Ekind (Typ) = E_Incomplete_Type
+            or else (Is_Class_Wide_Type (Typ)
+                       and then
+                         Ekind (Root_Type (Typ)) = E_Incomplete_Type)
+          then
+             Error_Msg_N
+               ("invalid use of incomplete type", Subtype_Mark (N));
+          end if;
+ 
+       else
+          Set_Etype (Designator, Any_Type);
+       end if;
+    end Analyze_Return_Type;
+ 
     -----------------------------
     -- Analyze_Subprogram_Body --
     -----------------------------
*************** package body Sem_Ch6 is
*** 786,791 ****
--- 833,868 ----
        Missing_Ret  : Boolean;
        P_Ent        : Entity_Id;
  
+       procedure Check_Following_Pragma;
+       --  If front-end inlining is enabled, look ahead to recognize a pragma
+       --  that may appear after the body.
+ 
+       procedure Check_Following_Pragma is
+          Prag : Node_Id;
+ 
+       begin
+          if Front_End_Inlining
+            and then Is_List_Member (N)
+            and then Present (Spec_Decl)
+            and then List_Containing (N) = List_Containing (Spec_Decl)
+          then
+             Prag := Next (N);
+ 
+             if Present (Prag)
+               and then Nkind (Prag) = N_Pragma
+               and then Get_Pragma_Id (Chars (Prag)) = Pragma_Inline
+               and then
+               Chars
+                 (Expression (First (Pragma_Argument_Associations (Prag))))
+                    = Chars (Body_Id)
+             then
+                Analyze (Prag);
+             end if;
+          end if;
+       end Check_Following_Pragma;
+ 
+    --  Start of processing for Analyze_Subprogram_Body
+ 
     begin
        if Debug_Flag_C then
           Write_Str ("====  Compiling subprogram body ");
*************** package body Sem_Ch6 is
*** 797,809 ****
  
        Trace_Scope (N, Body_Id, " Analyze subprogram");
  
!       --  Generic subprograms are handled separately. They always have
!       --  a generic specification. Determine whether current scope has
!       --  a previous declaration.
  
!       --  If the subprogram body is defined within an instance of the
!       --  same name, the instance appears as a package renaming, and
!       --  will be hidden within the subprogram.
  
        if Present (Prev_Id)
          and then not Is_Overloadable (Prev_Id)
--- 874,886 ----
  
        Trace_Scope (N, Body_Id, " Analyze subprogram");
  
!       --  Generic subprograms are handled separately. They always have a
!       --  generic specification. Determine whether current scope has a
!       --  previous declaration.
  
!       --  If the subprogram body is defined within an instance of the same
!       --  name, the instance appears as a package renaming, and will be hidden
!       --  within the subprogram.
  
        if Present (Prev_Id)
          and then not Is_Overloadable (Prev_Id)
*************** package body Sem_Ch6 is
*** 819,836 ****
              return;
  
           else
!             --  Previous entity conflicts with subprogram name.
!             --  Attempting to enter name will post error.
  
              Enter_Name (Body_Id);
              return;
           end if;
  
!       --  Non-generic case, find the subprogram declaration, if one was
!       --  seen, or enter new overloaded entity in the current scope.
!       --  If the current_entity is the body_id itself, the unit is being
!       --  analyzed as part of the context of one of its subunits. No need
!       --  to redo the analysis.
  
        elsif Prev_Id = Body_Id
          and then Has_Completion (Body_Id)
--- 896,913 ----
              return;
  
           else
!             --  Previous entity conflicts with subprogram name. Attempting to
!             --  enter name will post error.
  
              Enter_Name (Body_Id);
              return;
           end if;
  
!       --  Non-generic case, find the subprogram declaration, if one was seen,
!       --  or enter new overloaded entity in the current scope. If the
!       --  Current_Entity is the Body_Id itself, the unit is being analyzed as
!       --  part of the context of one of its subunits. No need to redo the
!       --  analysis.
  
        elsif Prev_Id = Body_Id
          and then Has_Completion (Body_Id)
*************** package body Sem_Ch6 is
*** 851,863 ****
                 return;
              end if;
  
!             --  A subprogram body should cause freezing of its own
!             --  declaration, but if there was no previous explicit
!             --  declaration, then the subprogram will get frozen too
!             --  late (there may be code within the body that depends
!             --  on the subprogram having been frozen, such as uses of
!             --  extra formals), so we force it to be frozen here.
!             --  Same holds if the body and the spec are compilation units.
  
              if No (Spec_Id) then
                 Freeze_Before (N, Body_Id);
--- 928,940 ----
                 return;
              end if;
  
!             --  A subprogram body should cause freezing of its own declaration,
!             --  but if there was no previous explicit declaration, then the
!             --  subprogram will get frozen too late (there may be code within
!             --  the body that depends on the subprogram having been frozen,
!             --  such as uses of extra formals), so we force it to be frozen
!             --  here. Same holds if the body and the spec are compilation
!             --  units.
  
              if No (Spec_Id) then
                 Freeze_Before (N, Body_Id);
*************** package body Sem_Ch6 is
*** 870,887 ****
           end if;
        end if;
  
!       --  Do not inline any subprogram that contains nested subprograms,
!       --  since the backend inlining circuit seems to generate uninitialized
        --  references in this case. We know this happens in the case of front
!       --  end ZCX support, but it also appears it can happen in other cases
!       --  as well. The backend often rejects attempts to inline in the case
!       --  of nested procedures anyway, so little if anything is lost by this.
  
        --  Do not do this test if errors have been detected, because in some
        --  error cases, this code blows up, and we don't need it anyway if
        --  there have been errors, since we won't get to the linker anyway.
  
!       if Serious_Errors_Detected = 0 then
           P_Ent := Body_Id;
           loop
              P_Ent := Scope (P_Ent);
--- 947,969 ----
           end if;
        end if;
  
!       --  Do not inline any subprogram that contains nested subprograms, since
!       --  the backend inlining circuit seems to generate uninitialized
        --  references in this case. We know this happens in the case of front
!       --  end ZCX support, but it also appears it can happen in other cases as
!       --  well. The backend often rejects attempts to inline in the case of
!       --  nested procedures anyway, so little if anything is lost by this.
!       --  Note that this is test is for the benefit of the back-end. There is
!       --  a separate test for front-end inlining that also rejects nested
!       --  subprograms.
  
        --  Do not do this test if errors have been detected, because in some
        --  error cases, this code blows up, and we don't need it anyway if
        --  there have been errors, since we won't get to the linker anyway.
  
!       if Comes_From_Source (Body_Id)
!         and then Serious_Errors_Detected = 0
!       then
           P_Ent := Body_Id;
           loop
              P_Ent := Scope (P_Ent);
*************** package body Sem_Ch6 is
*** 918,926 ****
           begin
              Formal := First_Formal (Body_Id);
  
!             --  The protected operation always has at least one formal,
!             --  namely the object itself, but it is only placed in the
!             --  parameter list if expansion is enabled.
  
              if Present (Formal)
                or else Expander_Active
--- 1000,1008 ----
           begin
              Formal := First_Formal (Body_Id);
  
!             --  The protected operation always has at least one formal, namely
!             --  the object itself, but it is only placed in the parameter list
!             --  if expansion is enabled.
  
              if Present (Formal)
                or else Expander_Active
*************** package body Sem_Ch6 is
*** 969,976 ****
                Make_Subprogram_Declaration (Loc,
                  Specification => New_Spec);
              Insert_Before (N, Decl);
-             Analyze (Decl);
              Spec_Id := Defining_Unit_Name (New_Spec);
              Set_Has_Completion (Spec_Id);
              Set_Convention (Spec_Id, Convention_Protected);
           end;
--- 1051,1065 ----
                Make_Subprogram_Declaration (Loc,
                  Specification => New_Spec);
              Insert_Before (N, Decl);
              Spec_Id := Defining_Unit_Name (New_Spec);
+ 
+             --  Indicate that the entity comes from source, to ensure that
+             --  cross-reference information is properly generated. The body
+             --  itself is rewritten during expansion, and the body entity will
+             --  not appear in calls to the operation.
+ 
+             Set_Comes_From_Source (Spec_Id, True);
+             Analyze (Decl);
              Set_Has_Completion (Spec_Id);
              Set_Convention (Spec_Id, Convention_Protected);
           end;
*************** package body Sem_Ch6 is
*** 1095,1100 ****
--- 1184,1191 ----
        if Nkind (Parent (N)) = N_Subunit
          and then Comes_From_Source (N)
          and then not Error_Posted (Body_Id)
+         and then Nkind (Corresponding_Stub (Parent (N))) =
+                                                 N_Subprogram_Body_Stub
        then
           declare
              Old_Id : constant Entity_Id :=
*************** package body Sem_Ch6 is
*** 1130,1142 ****
  
        elsif  Present (Spec_Id)
          and then Expander_Active
-         and then (Is_Always_Inlined (Spec_Id)
-                     or else (Has_Pragma_Inline (Spec_Id)
-                               and then
-                                 (Front_End_Inlining
-                                   or else Configurable_Run_Time_Mode)))
        then
!          Build_Body_To_Inline (N, Spec_Id);
        end if;
  
        --  Now we can go on to analyze the body
--- 1221,1243 ----
  
        elsif  Present (Spec_Id)
          and then Expander_Active
        then
!          Check_Following_Pragma;
! 
!          if Is_Always_Inlined (Spec_Id)
!            or else (Has_Pragma_Inline (Spec_Id) and then Front_End_Inlining)
!          then
!             Build_Body_To_Inline (N, Spec_Id);
!          end if;
!       end if;
! 
!       --  Ada 2005 (AI-262): In library subprogram bodies, after the analysis
!       --  if its specification we have to install the private withed units.
! 
!       if Is_Compilation_Unit (Body_Id)
!         and then Scope (Body_Id) = Standard_Standard
!       then
!          Install_Private_With_Clauses (Body_Id);
        end if;
  
        --  Now we can go on to analyze the body
*************** package body Sem_Ch6 is
*** 1149,1154 ****
--- 1250,1256 ----
        Process_End_Label (HSS, 't', Current_Scope);
        End_Scope;
        Check_Subprogram_Order (N);
+       Set_Analyzed (Body_Id);
  
        --  If we have a separate spec, then the analysis of the declarations
        --  caused the entities in the body to be chained to the spec id, but
*************** package body Sem_Ch6 is
*** 1157,1165 ****
  
        if Present (Spec_Id) then
  
!          --  If a parent unit is categorized, the context of a subunit
!          --  must conform to the categorization. Conversely, if a child
!          --  unit is categorized, the parents themselves must conform.
  
           if Nkind (Parent (N)) = N_Subunit then
              Validate_Categorization_Dependency (N, Spec_Id);
--- 1259,1267 ----
  
        if Present (Spec_Id) then
  
!          --  If a parent unit is categorized, the context of a subunit must
!          --  conform to the categorization. Conversely, if a child unit is
!          --  categorized, the parents themselves must conform.
  
           if Nkind (Parent (N)) = N_Subunit then
              Validate_Categorization_Dependency (N, Spec_Id);
*************** package body Sem_Ch6 is
*** 1220,1230 ****
           Check_Returns (HSS, 'P', Missing_Ret);
        end if;
  
!       --  Now we are going to check for variables that are never modified
!       --  in the body of the procedure. We omit these checks if the first
!       --  statement of the procedure raises an exception. In particular
!       --  this deals with the common idiom of a stubbed function, which
!       --  might appear as something like
  
        --     function F (A : Integer) return Some_Type;
        --        X : Some_Type;
--- 1322,1332 ----
           Check_Returns (HSS, 'P', Missing_Ret);
        end if;
  
!       --  Now we are going to check for variables that are never modified in
!       --  the body of the procedure. We omit these checks if the first
!       --  statement of the procedure raises an exception. In particular this
!       --  deals with the common idiom of a stubbed function, which might
!       --  appear as something like
  
        --     function F (A : Integer) return Some_Type;
        --        X : Some_Type;
*************** package body Sem_Ch6 is
*** 1234,1249 ****
        --     end F;
  
        --  Here the purpose of X is simply to satisfy the (annoying)
!       --  requirement in Ada that there be at least one return, and
!       --  we certainly do not want to go posting warnings on X that
!       --  it is not initialized!
  
        declare
           Stm : Node_Id := First (Statements (HSS));
  
        begin
!          --  Skip an initial label (for one thing this occurs when we
!          --  are in front end ZCX mode, but in any case it is irrelevant).
  
           if Nkind (Stm) = N_Label then
              Next (Stm);
--- 1336,1351 ----
        --     end F;
  
        --  Here the purpose of X is simply to satisfy the (annoying)
!       --  requirement in Ada that there be at least one return, and we
!       --  certainly do not want to go posting warnings on X that it is not
!       --  initialized!
  
        declare
           Stm : Node_Id := First (Statements (HSS));
  
        begin
!          --  Skip an initial label (for one thing this occurs when we are in
!          --  front end ZCX mode, but in any case it is irrelevant).
  
           if Nkind (Stm) = N_Label then
              Next (Stm);
*************** package body Sem_Ch6 is
*** 1386,1392 ****
        then
           Set_Categorization_From_Scope (Designator, Scop);
        else
!          --  For a compilation unit, check for library-unit pragmas.
  
           New_Scope (Designator);
           Set_Categorization_From_Pragmas (N);
--- 1488,1494 ----
        then
           Set_Categorization_From_Scope (Designator, Scop);
        else
!          --  For a compilation unit, check for library-unit pragmas
  
           New_Scope (Designator);
           Set_Categorization_From_Pragmas (N);
*************** package body Sem_Ch6 is
*** 1423,1429 ****
     function Analyze_Subprogram_Specification (N : Node_Id) return Entity_Id is
        Designator : constant Entity_Id := Defining_Entity (N);
        Formals    : constant List_Id   := Parameter_Specifications (N);
-       Typ        : Entity_Id;
  
     begin
        Generate_Definition (Designator);
--- 1525,1530 ----
*************** package body Sem_Ch6 is
*** 1432,1465 ****
           Set_Ekind (Designator, E_Function);
           Set_Mechanism (Designator, Default_Mechanism);
  
-          if Subtype_Mark (N) /= Error then
-             Find_Type (Subtype_Mark (N));
-             Typ := Entity (Subtype_Mark (N));
-             Set_Etype (Designator, Typ);
- 
-             if Ekind (Typ) = E_Incomplete_Type
-               or else (Is_Class_Wide_Type (Typ)
-                          and then
-                            Ekind (Root_Type (Typ)) = E_Incomplete_Type)
-             then
-                Error_Msg_N
-                  ("invalid use of incomplete type", Subtype_Mark (N));
-             end if;
- 
-          else
-             Set_Etype (Designator, Any_Type);
-          end if;
- 
        else
           Set_Ekind (Designator, E_Procedure);
           Set_Etype (Designator, Standard_Void_Type);
        end if;
  
        if Present (Formals) then
-          Set_Scope (Designator, Current_Scope);
           New_Scope (Designator);
           Process_Formals (Formals, N);
           End_Scope;
        end if;
  
        if Nkind (N) = N_Function_Specification then
--- 1533,1555 ----
           Set_Ekind (Designator, E_Function);
           Set_Mechanism (Designator, Default_Mechanism);
  
        else
           Set_Ekind (Designator, E_Procedure);
           Set_Etype (Designator, Standard_Void_Type);
        end if;
  
+       --  Introduce new scope for analysis of the formals and of the
+       --  return type.
+ 
+       Set_Scope (Designator, Current_Scope);
+ 
        if Present (Formals) then
           New_Scope (Designator);
           Process_Formals (Formals, N);
           End_Scope;
+ 
+       elsif Nkind (N) = N_Function_Specification then
+          Analyze_Return_Type (N);
        end if;
  
        if Nkind (N) = N_Function_Specification then
*************** package body Sem_Ch6 is
*** 1470,1476 ****
           May_Need_Actuals (Designator);
  
           if Is_Abstract (Etype (Designator))
!            and then Nkind (Parent (N)) /= N_Abstract_Subprogram_Declaration
           then
              Error_Msg_N
                ("function that returns abstract type must be abstract", N);
--- 1560,1572 ----
           May_Need_Actuals (Designator);
  
           if Is_Abstract (Etype (Designator))
!            and then Nkind (Parent (N))
!                       /= N_Abstract_Subprogram_Declaration
!            and then (Nkind (Parent (N)))
!                       /= N_Formal_Abstract_Subprogram_Declaration
!            and then (Nkind (Parent (N)) /= N_Subprogram_Renaming_Declaration
!                       or else not Is_Entity_Name (Name (Parent (N)))
!                       or else not Is_Abstract (Entity (Name (Parent (N)))))
           then
              Error_Msg_N
                ("function that returns abstract type must be abstract", N);
*************** package body Sem_Ch6 is
*** 1492,1503 ****
        Stat_Count      : Integer := 0;
  
        function Has_Excluded_Declaration (Decls : List_Id) return Boolean;
!       --  Check for declarations that make inlining not worthwhile.
  
        function Has_Excluded_Statement   (Stats : List_Id) return Boolean;
!       --  Check for statements that make inlining not worthwhile: any
!       --  tasking statement, nested at any level. Keep track of total
!       --  number of elementary statements, as a measure of acceptable size.
  
        function Has_Pending_Instantiation return Boolean;
        --  If some enclosing body contains instantiations that appear before
--- 1588,1599 ----
        Stat_Count      : Integer := 0;
  
        function Has_Excluded_Declaration (Decls : List_Id) return Boolean;
!       --  Check for declarations that make inlining not worthwhile
  
        function Has_Excluded_Statement   (Stats : List_Id) return Boolean;
!       --  Check for statements that make inlining not worthwhile: any tasking
!       --  statement, nested at any level. Keep track of total number of
!       --  elementary statements, as a measure of acceptable size.
  
        function Has_Pending_Instantiation return Boolean;
        --  If some enclosing body contains instantiations that appear before
*************** package body Sem_Ch6 is
*** 1509,1516 ****
        procedure Remove_Pragmas;
        --  A pragma Unreferenced that mentions a formal parameter has no
        --  meaning when the body is inlined and the formals are rewritten.
!       --  Remove it from body to inline. The analysis of the non-inlined
!       --  body will handle the pragma properly.
  
        ------------------------------
        -- Has_Excluded_Declaration --
--- 1605,1617 ----
        procedure Remove_Pragmas;
        --  A pragma Unreferenced that mentions a formal parameter has no
        --  meaning when the body is inlined and the formals are rewritten.
!       --  Remove it from body to inline. The analysis of the non-inlined body
!       --  will handle the pragma properly.
! 
!       function Uses_Secondary_Stack (Bod : Node_Id) return Boolean;
!       --  If the body of the subprogram includes a call that returns an
!       --  unconstrained type, the secondary stack is involved, and it
!       --  is not worth inlining.
  
        ------------------------------
        -- Has_Excluded_Declaration --
*************** package body Sem_Ch6 is
*** 1520,1533 ****
           D : Node_Id;
  
           function Is_Unchecked_Conversion (D : Node_Id) return Boolean;
!          --  Nested subprograms make a given body ineligible for inlining,
!          --  but we make an exception for instantiations of unchecked
!          --  conversion. The body has not been analyzed yet, so we check
!          --  the name, and verify that the visible entity with that name is
!          --  the predefined unit.
  
           function Is_Unchecked_Conversion (D : Node_Id) return Boolean is
!             Id : constant Node_Id := Name (D);
              Conv : Entity_Id;
  
           begin
--- 1621,1637 ----
           D : Node_Id;
  
           function Is_Unchecked_Conversion (D : Node_Id) return Boolean;
!          --  Nested subprograms make a given body ineligible for inlining, but
!          --  we make an exception for instantiations of unchecked conversion.
!          --  The body has not been analyzed yet, so check the name, and verify
!          --  that the visible entity with that name is the predefined unit.
! 
!          -----------------------------
!          -- Is_Unchecked_Conversion --
!          -----------------------------
  
           function Is_Unchecked_Conversion (D : Node_Id) return Boolean is
!             Id   : constant Node_Id := Name (D);
              Conv : Entity_Id;
  
           begin
*************** package body Sem_Ch6 is
*** 1622,1628 ****
  
              elsif Nkind (S) = N_Case_Statement then
                 E := First (Alternatives (S));
- 
                 while Present (E) loop
                    if Has_Excluded_Statement (Statements (E)) then
                       return True;
--- 1726,1731 ----
*************** package body Sem_Ch6 is
*** 1638,1644 ****
  
                 if Present (Elsif_Parts (S)) then
                    E := First (Elsif_Parts (S));
- 
                    while Present (E) loop
                       if Has_Excluded_Statement (Then_Statements (E)) then
                          return True;
--- 1741,1746 ----
*************** package body Sem_Ch6 is
*** 1713,1718 ****
--- 1815,1854 ----
           end loop;
        end Remove_Pragmas;
  
+       --------------------------
+       -- Uses_Secondary_Stack --
+       --------------------------
+ 
+       function Uses_Secondary_Stack (Bod : Node_Id) return Boolean is
+          function Check_Call (N : Node_Id) return Traverse_Result;
+          --  Look for function calls that return an unconstrained type
+ 
+          ----------------
+          -- Check_Call --
+          ----------------
+ 
+          function Check_Call (N : Node_Id) return Traverse_Result is
+          begin
+             if Nkind (N) = N_Function_Call
+               and then Is_Entity_Name (Name (N))
+               and then Is_Composite_Type (Etype (Entity (Name (N))))
+               and then not Is_Constrained (Etype (Entity (Name (N))))
+             then
+                Cannot_Inline
+                  ("cannot inline & (call returns unconstrained type)?",
+                     N, Subp);
+                return Abandon;
+             else
+                return OK;
+             end if;
+          end Check_Call;
+ 
+          function Check_Calls is new Traverse_Func (Check_Call);
+ 
+       begin
+          return Check_Calls (Bod) = Abandon;
+       end Uses_Secondary_Stack;
+ 
     --  Start of processing for Build_Body_To_Inline
  
     begin
*************** package body Sem_Ch6 is
*** 1723,1728 ****
--- 1859,1866 ----
  
        --  Functions that return unconstrained composite types will require
        --  secondary stack handling, and cannot currently be inlined.
+       --  Ditto for functions that return controlled types, where controlled
+       --  actions interfere in complex ways with inlining.
  
        elsif Ekind (Subp) = E_Function
          and then not Is_Scalar_Type (Etype (Subp))
*************** package body Sem_Ch6 is
*** 1732,1737 ****
--- 1870,1882 ----
           Cannot_Inline
             ("cannot inline & (unconstrained return type)?", N, Subp);
           return;
+ 
+       elsif Ekind (Subp) = E_Function
+         and then Controlled_Type (Etype (Subp))
+       then
+          Cannot_Inline
+            ("cannot inline & (controlled return type)?", N, Subp);
+          return;
        end if;
  
        if Present (Declarations (N))
*************** package body Sem_Ch6 is
*** 1787,1796 ****
        --  the actuals at the point of inlining, i.e. instantiation. To treat
        --  the formals as globals to the body to inline, we nest it within
        --  a dummy parameterless subprogram, declared within the real one.
  
        Set_Parameter_Specifications (Specification (Original_Body), No_List);
!       Set_Defining_Unit_Name (Specification (Original_Body),
!         Make_Defining_Identifier (Sloc (N), New_Internal_Name ('S')));
        Set_Corresponding_Spec (Original_Body, Empty);
  
        Body_To_Analyze := Copy_Generic_Node (Original_Body, Empty, False);
--- 1932,1945 ----
        --  the actuals at the point of inlining, i.e. instantiation. To treat
        --  the formals as globals to the body to inline, we nest it within
        --  a dummy parameterless subprogram, declared within the real one.
+       --  To avoid generating an internal name (which is never public, and
+       --  which affects serial numbers of other generated names), we use
+       --  an internal symbol that cannot conflict with user declarations.
  
        Set_Parameter_Specifications (Specification (Original_Body), No_List);
!       Set_Defining_Unit_Name
!         (Specification (Original_Body),
!           Make_Defining_Identifier (Sloc (N), Name_uParent));
        Set_Corresponding_Spec (Original_Body, Empty);
  
        Body_To_Analyze := Copy_Generic_Node (Original_Body, Empty, False);
*************** package body Sem_Ch6 is
*** 1819,1831 ****
        Remove (Body_To_Analyze);
  
        Expander_Mode_Restore;
-       Set_Body_To_Inline (Decl, Original_Body);
-       Set_Ekind (Defining_Entity (Original_Body), Ekind (Subp));
-       Set_Is_Inlined (Subp);
  
        if In_Instance then
           Restore_Env;
        end if;
     end Build_Body_To_Inline;
  
     -------------------
--- 1968,1988 ----
        Remove (Body_To_Analyze);
  
        Expander_Mode_Restore;
  
        if In_Instance then
           Restore_Env;
        end if;
+ 
+       --  If secondary stk used there is no point in inlining. We have
+       --  already issued the warning in this case, so nothing to do.
+ 
+       if Uses_Secondary_Stack (Body_To_Analyze) then
+          return;
+       end if;
+ 
+       Set_Body_To_Inline (Decl, Original_Body);
+       Set_Ekind (Defining_Entity (Original_Body), Ekind (Subp));
+       Set_Is_Inlined (Subp);
     end Build_Body_To_Inline;
  
     -------------------
*************** package body Sem_Ch6 is
*** 1845,1850 ****
--- 2002,2011 ----
           null;
  
        elsif Is_Always_Inlined (Subp) then
+ 
+          --  Remove last character (question mark) to make this into an error,
+          --  because the Inline_Always pragma cannot be obeyed.
+ 
           Error_Msg_NE (Msg (1 .. Msg'Length - 1), N, Subp);
  
        elsif Ineffective_Inline_Warnings then
*************** package body Sem_Ch6 is
*** 1871,1883 ****
        New_Formal : Entity_Id;
  
        procedure Conformance_Error (Msg : String; N : Node_Id := New_Id);
!       --  Post error message for conformance error on given node.
!       --  Two messages are output. The first points to the previous
!       --  declaration with a general "no conformance" message.
!       --  The second is the detailed reason, supplied as Msg. The
!       --  parameter N provide information for a possible & insertion
!       --  in the message, and also provides the location for posting
!       --  the message in the absence of a specified Err_Loc location.
  
        -----------------------
        -- Conformance_Error --
--- 2032,2043 ----
        New_Formal : Entity_Id;
  
        procedure Conformance_Error (Msg : String; N : Node_Id := New_Id);
!       --  Post error message for conformance error on given node. Two messages
!       --  are output. The first points to the previous declaration with a
!       --  general "no conformance" message. The second is the detailed reason,
!       --  supplied as Msg. The parameter N provide information for a possible
!       --  & insertion in the message, and also provides the location for
!       --  posting the message in the absence of a specified Err_Loc location.
  
        -----------------------
        -- Conformance_Error --
*************** package body Sem_Ch6 is
*** 1925,1932 ****
     begin
        Conforms := True;
  
!       --  We need a special case for operators, since they don't
!       --  appear explicitly.
  
        if Ctype = Type_Conformant then
           if Ekind (New_Id) = E_Operator
--- 2085,2092 ----
     begin
        Conforms := True;
  
!       --  We need a special case for operators, since they don't appear
!       --  explicitly.
  
        if Ctype = Type_Conformant then
           if Ekind (New_Id) = E_Operator
*************** package body Sem_Ch6 is
*** 2053,2060 ****
  
           if Ctype = Fully_Conformant then
  
!             --  We have checked already that names match.
!             --  Check default expressions for in parameters
  
              if Parameter_Mode (Old_Formal) = E_In_Parameter then
                 declare
--- 2213,2220 ----
  
           if Ctype = Fully_Conformant then
  
!             --  We have checked already that names match. Check default
!             --  expressions for in parameters
  
              if Parameter_Mode (Old_Formal) = E_In_Parameter then
                 declare
*************** package body Sem_Ch6 is
*** 2065,2075 ****
                 begin
                    if NewD or OldD then
  
!                      --  The old default value has been analyzed because
!                      --  the current full declaration will have frozen
!                      --  everything before. The new default values have not
!                      --  been analyzed, so analyze them now before we check
!                      --  for conformance.
  
                       if NewD then
                          New_Scope (New_Id);
--- 2225,2235 ----
                 begin
                    if NewD or OldD then
  
!                      --  The old default value has been analyzed because the
!                      --  current full declaration will have frozen everything
!                      --  before. The new default values have not been
!                      --  analyzed, so analyze them now before we check for
!                      --  conformance.
  
                       if NewD then
                          New_Scope (New_Id);
*************** package body Sem_Ch6 is
*** 2097,2103 ****
           --  skipped if either entity is an operator in package Standard.
           --  or if either old or new instance is not from the source program.
  
!          if Ada_83
             and then Sloc (Old_Id) > Standard_Location
             and then Sloc (New_Id) > Standard_Location
             and then Comes_From_Source (Old_Id)
--- 2257,2263 ----
           --  skipped if either entity is an operator in package Standard.
           --  or if either old or new instance is not from the source program.
  
!          if Ada_Version = Ada_83
             and then Sloc (Old_Id) > Standard_Location
             and then Sloc (New_Id) > Standard_Location
             and then Comes_From_Source (Old_Id)
*************** package body Sem_Ch6 is
*** 2166,2171 ****
--- 2326,2335 ----
        --  If T is not yet frozen and needs a delayed freeze, then the
        --  subprogram itself must be delayed.
  
+       ---------------------
+       -- Possible_Freeze --
+       ---------------------
+ 
        procedure Possible_Freeze (T : Entity_Id) is
        begin
           if Has_Delayed_Freeze (T)
*************** package body Sem_Ch6 is
*** 2243,2254 ****
        New_Discr_Type : Entity_Id;
  
        procedure Conformance_Error (Msg : String; N : Node_Id);
!       --  Post error message for conformance error on given node.
!       --  Two messages are output. The first points to the previous
!       --  declaration with a general "no conformance" message.
!       --  The second is the detailed reason, supplied as Msg. The
!       --  parameter N provide information for a possible & insertion
!       --  in the message.
  
        -----------------------
        -- Conformance_Error --
--- 2407,2417 ----
        New_Discr_Type : Entity_Id;
  
        procedure Conformance_Error (Msg : String; N : Node_Id);
!       --  Post error message for conformance error on given node. Two messages
!       --  are output. The first points to the previous declaration with a
!       --  general "no conformance" message. The second is the detailed reason,
!       --  supplied as Msg. The parameter N provide information for a possible
!       --  & insertion in the message.
  
        -----------------------
        -- Conformance_Error --
*************** package body Sem_Ch6 is
*** 2268,2276 ****
  
           New_Discr_Id := Defining_Identifier (New_Discr);
  
!          --  The subtype mark of the discriminant on the full type
!          --  has not been analyzed so we do it here. For an access
!          --  discriminant a new type is created.
  
           if Nkind (Discriminant_Type (New_Discr)) = N_Access_Definition then
              New_Discr_Type :=
--- 2431,2439 ----
  
           New_Discr_Id := Defining_Identifier (New_Discr);
  
!          --  The subtype mark of the discriminant on the full type has not
!          --  been analyzed so we do it here. For an access discriminant a new
!          --  type is created.
  
           if Nkind (Discriminant_Type (New_Discr)) = N_Access_Definition then
              New_Discr_Type :=
*************** package body Sem_Ch6 is
*** 2287,2294 ****
              Conformance_Error ("type of & does not match!", New_Discr_Id);
              return;
           else
!             --  Treat the new discriminant as an occurrence of the old
!             --  one, for navigation purposes, and fill in some semantic
              --  information, for completeness.
  
              Generate_Reference (Old_Discr, New_Discr_Id, 'r');
--- 2450,2457 ----
              Conformance_Error ("type of & does not match!", New_Discr_Id);
              return;
           else
!             --  Treat the new discriminant as an occurrence of the old one,
!             --  for navigation purposes, and fill in some semantic
              --  information, for completeness.
  
              Generate_Reference (Old_Discr, New_Discr_Id, 'r');
*************** package body Sem_Ch6 is
*** 2316,2323 ****
  
                 --  The old default value has been analyzed and expanded,
                 --  because the current full declaration will have frozen
!                --  everything before. The new default values have not
!                --  been expanded, so expand now to check conformance.
  
                 if NewD then
                    Analyze_Per_Use_Expression
--- 2479,2486 ----
  
                 --  The old default value has been analyzed and expanded,
                 --  because the current full declaration will have frozen
!                --  everything before. The new default values have not been
!                --  expanded, so expand now to check conformance.
  
                 if NewD then
                    Analyze_Per_Use_Expression
*************** package body Sem_Ch6 is
*** 2340,2346 ****
  
           --  In Ada 83 case, grouping must match: (A,B : X) /= (A : X; B : X)
  
!          if Ada_83 then
              declare
                 Old_Disc : constant Node_Id := Declaration_Node (Old_Discr);
  
--- 2503,2509 ----
  
           --  In Ada 83 case, grouping must match: (A,B : X) /= (A : X; B : X)
  
!          if Ada_Version = Ada_83 then
              declare
                 Old_Disc : constant Node_Id := Declaration_Node (Old_Discr);
  
*************** package body Sem_Ch6 is
*** 2809,2814 ****
--- 2972,2981 ----
        --  This is used to check if S1 > S2 in the sense required by this
        --  test, for example nameab < namec, but name2 < name10.
  
+       -----------------------------
+       -- Subprogram_Name_Greater --
+       -----------------------------
+ 
        function Subprogram_Name_Greater (S1, S2 : String) return Boolean is
           L1, L2 : Positive;
           N1, N2 : Natural;
*************** package body Sem_Ch6 is
*** 2860,2866 ****
        --  Check body in alpha order if this is option
  
        if Style_Check
!         and then Style_Check_Subprogram_Order
          and then Nkind (N) = N_Subprogram_Body
          and then Comes_From_Source (N)
          and then In_Extended_Main_Source_Unit (N)
--- 3027,3033 ----
        --  Check body in alpha order if this is option
  
        if Style_Check
!         and then Style_Check_Order_Subprograms
          and then Nkind (N) = N_Subprogram_Body
          and then Comes_From_Source (N)
          and then In_Extended_Main_Source_Unit (N)
*************** package body Sem_Ch6 is
*** 2901,2907 ****
        Err_Loc : Node_Id := Empty)
     is
        Result : Boolean;
- 
     begin
        Check_Conformance
          (New_Id, Old_Id, Subtype_Conformant, True, Result, Err_Loc);
--- 3068,3073 ----
*************** package body Sem_Ch6 is
*** 2917,2923 ****
        Err_Loc : Node_Id := Empty)
     is
        Result : Boolean;
- 
     begin
        Check_Conformance
          (New_Id, Old_Id, Type_Conformant, True, Result, Err_Loc);
--- 3083,3088 ----
*************** package body Sem_Ch6 is
*** 2935,2940 ****
--- 3100,3106 ----
     is
        Type_1 : Entity_Id := T1;
        Type_2 : Entity_Id := T2;
+       Are_Anonymous_Access_To_Subprogram_Types : Boolean := False;
  
        function Base_Types_Match (T1, T2 : Entity_Id) return Boolean;
        --  If neither T1 nor T2 are generic actual types, or if they are
*************** package body Sem_Ch6 is
*** 2964,2969 ****
--- 3130,3146 ----
                or else not Is_Generic_Actual_Type (T2)
                or else Scope (T1) /= Scope (T2);
  
+          --  In some cases a type imported through a limited_with clause,
+          --  and its non-limited view are both visible, for example in an
+          --  anonymous access_to_classwide type in a formal. Both entities
+          --  designate the same type.
+ 
+          elsif From_With_Type (T1)
+            and then Ekind (T1) = E_Incomplete_Type
+            and then T2 = Non_Limited_View (T1)
+          then
+             return True;
+ 
           else
              return False;
           end if;
*************** package body Sem_Ch6 is
*** 2971,2979 ****
  
     begin
        --  The context is an instance association for a formal
!       --  access-to-subprogram type; the formal parameter types
!       --  require mapping because they may denote other formal
!       --  parameters of the generic unit.
  
        if Get_Inst then
           Type_1 := Get_Instance_Of (T1);
--- 3148,3156 ----
  
     begin
        --  The context is an instance association for a formal
!       --  access-to-subprogram type; the formal parameter types require
!       --  mapping because they may denote other formal parameters of the
!       --  generic unit.
  
        if Get_Inst then
           Type_1 := Get_Instance_Of (T1);
*************** package body Sem_Ch6 is
*** 3009,3019 ****
             or else Subtypes_Statically_Match (Type_1, Full_View (Type_2));
        end if;
  
        --  Test anonymous access type case. For this case, static subtype
        --  matching is required for mode conformance (RM 6.3.1(15))
  
!       if Ekind (Type_1) = E_Anonymous_Access_Type
!         and then Ekind (Type_2) = E_Anonymous_Access_Type
        then
           declare
              Desig_1 : Entity_Id;
--- 3186,3223 ----
             or else Subtypes_Statically_Match (Type_1, Full_View (Type_2));
        end if;
  
+       --  Ada 2005 (AI-254): Detect anonymous access to subprogram types
+ 
+       Are_Anonymous_Access_To_Subprogram_Types :=
+ 
+          --  Case 1: Anonymous access to subprogram types
+ 
+         (Ekind (Type_1) = E_Anonymous_Access_Subprogram_Type
+            and then Ekind (Type_2) = E_Anonymous_Access_Subprogram_Type)
+ 
+          --  Case 2: Anonymous access to PROTECTED subprogram types. In this
+          --  case the anonymous type_declaration has been replaced by an
+          --  occurrence of an internal access to subprogram type declaration
+          --  available through the Original_Access_Type attribute
+ 
+         or else
+           (Ekind (Type_1) = E_Access_Protected_Subprogram_Type
+             and then Ekind (Type_2) = E_Access_Protected_Subprogram_Type
+             and then not Comes_From_Source (Type_1)
+             and then not Comes_From_Source (Type_2)
+             and then Present (Original_Access_Type (Type_1))
+             and then Present (Original_Access_Type (Type_2))
+             and then Ekind (Original_Access_Type (Type_1)) =
+                        E_Anonymous_Access_Protected_Subprogram_Type
+             and then Ekind (Original_Access_Type (Type_2)) =
+                        E_Anonymous_Access_Protected_Subprogram_Type);
+ 
        --  Test anonymous access type case. For this case, static subtype
        --  matching is required for mode conformance (RM 6.3.1(15))
  
!       if (Ekind (Type_1) = E_Anonymous_Access_Type
!             and then Ekind (Type_2) = E_Anonymous_Access_Type)
!         or else Are_Anonymous_Access_To_Subprogram_Types -- Ada 2005 (AI-254)
        then
           declare
              Desig_1 : Entity_Id;
*************** package body Sem_Ch6 is
*** 3022,3028 ****
           begin
              Desig_1 := Directly_Designated_Type (Type_1);
  
!             --  An access parameter can designate an incomplete type.
  
              if Ekind (Desig_1) = E_Incomplete_Type
                and then Present (Full_View (Desig_1))
--- 3226,3232 ----
           begin
              Desig_1 := Directly_Designated_Type (Type_1);
  
!             --  An access parameter can designate an incomplete type
  
              if Ekind (Desig_1) = E_Incomplete_Type
                and then Present (Full_View (Desig_1))
*************** package body Sem_Ch6 is
*** 3039,3059 ****
              end if;
  
              --  The context is an instance association for a formal
!             --  access-to-subprogram type; formal access parameter
!             --  designated types require mapping because they may
!             --  denote other formal parameters of the generic unit.
  
              if Get_Inst then
                 Desig_1 := Get_Instance_Of (Desig_1);
                 Desig_2 := Get_Instance_Of (Desig_2);
              end if;
  
!             --  It is possible for a Class_Wide_Type to be introduced for
!             --  an incomplete type, in which case there is a separate class_
!             --  wide type for the full view. The types conform if their
!             --  Etypes conform, i.e. one may be the full view of the other.
!             --  This can only happen in the context of an access parameter,
!             --  other uses of an incomplete Class_Wide_Type are illegal.
  
              if Is_Class_Wide_Type (Desig_1)
                and then Is_Class_Wide_Type (Desig_2)
--- 3243,3263 ----
              end if;
  
              --  The context is an instance association for a formal
!             --  access-to-subprogram type; formal access parameter designated
!             --  types require mapping because they may denote other formal
!             --  parameters of the generic unit.
  
              if Get_Inst then
                 Desig_1 := Get_Instance_Of (Desig_1);
                 Desig_2 := Get_Instance_Of (Desig_2);
              end if;
  
!             --  It is possible for a Class_Wide_Type to be introduced for an
!             --  incomplete type, in which case there is a separate class_ wide
!             --  type for the full view. The types conform if their Etypes
!             --  conform, i.e. one may be the full view of the other. This can
!             --  only happen in the context of an access parameter, other uses
!             --  of an incomplete Class_Wide_Type are illegal.
  
              if Is_Class_Wide_Type (Desig_1)
                and then Is_Class_Wide_Type (Desig_2)
*************** package body Sem_Ch6 is
*** 3062,3072 ****
                   Conforming_Types
                     (Etype (Base_Type (Desig_1)),
                      Etype (Base_Type (Desig_2)), Ctype);
              else
                 return Base_Type (Desig_1) = Base_Type (Desig_2)
                  and then (Ctype = Type_Conformant
!                           or else
!                         Subtypes_Statically_Match (Desig_1, Desig_2));
              end if;
           end;
  
--- 3266,3282 ----
                   Conforming_Types
                     (Etype (Base_Type (Desig_1)),
                      Etype (Base_Type (Desig_2)), Ctype);
+ 
+             elsif Are_Anonymous_Access_To_Subprogram_Types then
+                return Ctype = Type_Conformant
+                         or else
+                       Subtypes_Statically_Match (Desig_1, Desig_2);
+ 
              else
                 return Base_Type (Desig_1) = Base_Type (Desig_2)
                  and then (Ctype = Type_Conformant
!                             or else
!                           Subtypes_Statically_Match (Desig_1, Desig_2));
              end if;
           end;
  
*************** package body Sem_Ch6 is
*** 3089,3097 ****
        P_Formal    : Entity_Id := Empty;
  
        function Add_Extra_Formal (Typ : Entity_Id) return Entity_Id;
!       --  Add an extra formal, associated with the current Formal. The
!       --  extra formal is added to the list of extra formals, and also
!       --  returned as the result. These formals are always of mode IN.
  
        ----------------------
        -- Add_Extra_Formal --
--- 3299,3307 ----
        P_Formal    : Entity_Id := Empty;
  
        function Add_Extra_Formal (Typ : Entity_Id) return Entity_Id;
!       --  Add an extra formal, associated with the current Formal. The extra
!       --  formal is added to the list of extra formals, and also returned as
!       --  the result. These formals are always of mode IN.
  
        ----------------------
        -- Add_Extra_Formal --
*************** package body Sem_Ch6 is
*** 3110,3118 ****
              return Empty;
           end if;
  
!          --  A little optimization. Never generate an extra formal for
!          --  the _init operand of an initialization procedure, since it
!          --  could never be used.
  
           if Chars (Formal) = Name_uInit then
              return Empty;
--- 3320,3328 ----
              return Empty;
           end if;
  
!          --  A little optimization. Never generate an extra formal for the
!          --  _init operand of an initialization procedure, since it could
!          --  never be used.
  
           if Chars (Formal) = Name_uInit then
              return Empty;
*************** package body Sem_Ch6 is
*** 3133,3141 ****
     --  Start of processing for Create_Extra_Formals
  
     begin
!       --  If this is a derived subprogram then the subtypes of the
!       --  parent subprogram's formal parameters will be used to
!       --  to determine the need for extra formals.
  
        if Is_Overloadable (E) and then Present (Alias (E)) then
           P_Formal := First_Formal (Alias (E));
--- 3343,3351 ----
     --  Start of processing for Create_Extra_Formals
  
     begin
!       --  If this is a derived subprogram then the subtypes of the parent
!       --  subprogram's formal parameters will be used to to determine the need
!       --  for extra formals.
  
        if Is_Overloadable (E) and then Present (Alias (E)) then
           P_Formal := First_Formal (Alias (E));
*************** package body Sem_Ch6 is
*** 3148,3156 ****
           Next_Formal (Formal);
        end loop;
  
!       --  If Extra_formals where already created, don't do it again
!       --  This situation may arise for subprogram types created as part
!       --  of dispatching calls (see Expand_Dispatch_Call)
  
        if Present (Last_Extra) and then
          Present (Extra_Formal (Last_Extra))
--- 3358,3366 ----
           Next_Formal (Formal);
        end loop;
  
!       --  If Extra_formals where already created, don't do it again. This
!       --  situation may arise for subprogram types created as part of
!       --  dispatching calls (see Expand_Dispatching_Call)
  
        if Present (Last_Extra) and then
          Present (Extra_Formal (Last_Extra))
*************** package body Sem_Ch6 is
*** 3174,3179 ****
--- 3384,3396 ----
                 Formal_Type := Etype (Formal);
              end if;
  
+             --  Do not produce extra formals for Unchecked_Union parameters.
+             --  Jump directly to the end of the loop.
+ 
+             if Is_Unchecked_Union (Base_Type (Formal_Type)) then
+                goto Skip_Extra_Formal_Generation;
+             end if;
+ 
              if not Has_Discriminants (Formal_Type)
                and then Ekind (Formal_Type) in Private_Kind
                and then Present (Underlying_Type (Formal_Type))
*************** package body Sem_Ch6 is
*** 3211,3220 ****
               (not Present (P_Formal)
                 or else Present (Extra_Accessibility (P_Formal)))
           then
!             --  Temporary kludge: for now we avoid creating the extra
!             --  formal for access parameters of protected operations
!             --  because of problem with the case of internal protected
!             --  calls. ???
  
              if Nkind (Parent (Parent (Parent (E)))) /= N_Protected_Definition
                and then Nkind (Parent (Parent (Parent (E)))) /= N_Protected_Body
--- 3428,3436 ----
               (not Present (P_Formal)
                 or else Present (Extra_Accessibility (P_Formal)))
           then
!             --  Temporary kludge: for now we avoid creating the extra formal
!             --  for access parameters of protected operations because of
!             --  problem with the case of internal protected calls. ???
  
              if Nkind (Parent (Parent (Parent (E)))) /= N_Protected_Definition
                and then Nkind (Parent (Parent (Parent (E)))) /= N_Protected_Body
*************** package body Sem_Ch6 is
*** 3228,3233 ****
--- 3444,3454 ----
              Next_Formal (P_Formal);
           end if;
  
+          --  This label is required when skipping extra formal generation for
+          --  Unchecked_Union parameters.
+ 
+          <<Skip_Extra_Formal_Generation>>
+ 
           Next_Formal (Formal);
        end loop;
     end Create_Extra_Formals;
*************** package body Sem_Ch6 is
*** 3274,3281 ****
        if Debug_Flag_E then
           Write_Str ("New overloaded entity chain: ");
           Write_Name (Chars (S));
-          E := S;
  
           while Present (E) loop
              Write_Str (" "); Write_Int (Int (E));
              E := Homonym (E);
--- 3495,3502 ----
        if Debug_Flag_E then
           Write_Str ("New overloaded entity chain: ");
           Write_Name (Chars (S));
  
+          E := S;
           while Present (E) loop
              Write_Str (" "); Write_Int (Int (E));
              E := Homonym (E);
*************** package body Sem_Ch6 is
*** 3450,3456 ****
        --  match explicit actuals with the same value.
  
        function FCO (Op_Node, Call_Node : Node_Id) return Boolean;
!       --  Compare an operator node with a function call.
  
        ---------
        -- FCL --
--- 3671,3677 ----
        --  match explicit actuals with the same value.
  
        function FCO (Op_Node, Call_Node : Node_Id) return Boolean;
!       --  Compare an operator node with a function call
  
        ---------
        -- FCL --
*************** package body Sem_Ch6 is
*** 3535,3542 ****
        if Paren_Count (E1) /= Paren_Count (E2) then
           return False;
  
!       --  If same entities are referenced, then they are conformant
!       --  even if they have different forms (RM 8.3.1(19-20)).
  
        elsif Is_Entity_Name (E1) and then Is_Entity_Name (E2) then
           if Present (Entity (E1)) then
--- 3756,3763 ----
        if Paren_Count (E1) /= Paren_Count (E2) then
           return False;
  
!       --  If same entities are referenced, then they are conformant even if
!       --  they have different forms (RM 8.3.1(19-20)).
  
        elsif Is_Entity_Name (E1) and then Is_Entity_Name (E2) then
           if Present (Entity (E1)) then
*************** package body Sem_Ch6 is
*** 3812,3822 ****
        S2 : constant Node_Id := Original_Node (Given_S2);
  
        function Conforming_Bounds (B1, B2 : Node_Id) return Boolean;
!       --  Special-case for a bound given by a discriminant, which in the
!       --  body is replaced with the discriminal of the enclosing type.
  
        function Conforming_Ranges (R1, R2 : Node_Id) return Boolean;
!       --  Check both bounds.
  
        function Conforming_Bounds (B1, B2 : Node_Id) return Boolean is
        begin
--- 4033,4043 ----
        S2 : constant Node_Id := Original_Node (Given_S2);
  
        function Conforming_Bounds (B1, B2 : Node_Id) return Boolean;
!       --  Special-case for a bound given by a discriminant, which in the body
!       --  is replaced with the discriminal of the enclosing type.
  
        function Conforming_Ranges (R1, R2 : Node_Id) return Boolean;
!       --  Check both bounds
  
        function Conforming_Bounds (B1, B2 : Node_Id) return Boolean is
        begin
*************** package body Sem_Ch6 is
*** 3906,3920 ****
  
        function Get_Generic_Parent_Type (F_Typ : Entity_Id) return Entity_Id;
        --  If F_Type is a derived type associated with a generic actual
!       --  subtype, then return its Generic_Parent_Type attribute, else
!       --  return Empty.
  
        function Types_Correspond
          (P_Type : Entity_Id;
           N_Type : Entity_Id) return Boolean;
!       --  Returns true if and only if the types (or designated types
!       --  in the case of anonymous access types) are the same or N_Type
!       --  is derived directly or indirectly from P_Type.
  
        -----------------------------
        -- Get_Generic_Parent_Type --
--- 4127,4141 ----
  
        function Get_Generic_Parent_Type (F_Typ : Entity_Id) return Entity_Id;
        --  If F_Type is a derived type associated with a generic actual
!       --  subtype, then return its Generic_Parent_Type attribute, else return
!       --  Empty.
  
        function Types_Correspond
          (P_Type : Entity_Id;
           N_Type : Entity_Id) return Boolean;
!       --  Returns true if and only if the types (or designated types in the
!       --  case of anonymous access types) are the same or N_Type is derived
!       --  directly or indirectly from P_Type.
  
        -----------------------------
        -- Get_Generic_Parent_Type --
*************** package body Sem_Ch6 is
*** 3928,3938 ****
           if Is_Derived_Type (F_Typ)
             and then Nkind (Parent (F_Typ)) = N_Full_Type_Declaration
           then
!             --  The tree must be traversed to determine the parent
!             --  subtype in the generic unit, which unfortunately isn't
!             --  always available via semantic attributes. ???
!             --  (Note: The use of Original_Node is needed for cases
!             --  where a full derived type has been rewritten.)
  
              Indic := Subtype_Indication
                         (Type_Definition (Original_Node (Parent (F_Typ))));
--- 4149,4159 ----
           if Is_Derived_Type (F_Typ)
             and then Nkind (Parent (F_Typ)) = N_Full_Type_Declaration
           then
!             --  The tree must be traversed to determine the parent subtype in
!             --  the generic unit, which unfortunately isn't always available
!             --  via semantic attributes. ??? (Note: The use of Original_Node
!             --  is needed for cases where a full derived type has been
!             --  rewritten.)
  
              Indic := Subtype_Indication
                         (Type_Definition (Original_Node (Parent (F_Typ))));
*************** package body Sem_Ch6 is
*** 3990,3999 ****
     --  Start of processing for Is_Non_Overriding_Operation
  
     begin
!       --  In the case where both operations are implicit derived
!       --  subprograms then neither overrides the other. This can
!       --  only occur in certain obscure cases (e.g., derivation
!       --  from homographs created in a generic instantiation).
  
        if Present (Alias (Prev_E)) and then Present (Alias (New_E)) then
           return True;
--- 4211,4220 ----
     --  Start of processing for Is_Non_Overriding_Operation
  
     begin
!       --  In the case where both operations are implicit derived subprograms
!       --  then neither overrides the other. This can only occur in certain
!       --  obscure cases (e.g., derivation from homographs created in a generic
!       --  instantiation).
  
        if Present (Alias (Prev_E)) and then Present (Alias (New_E)) then
           return True;
*************** package body Sem_Ch6 is
*** 4004,4011 ****
          and then Comes_From_Source (New_E)
        then
           --  We examine the formals and result subtype of the inherited
!          --  operation, to determine whether their type is derived from
!          --  (the instance of) a generic type.
  
           Formal := First_Formal (Prev_E);
  
--- 4225,4232 ----
          and then Comes_From_Source (New_E)
        then
           --  We examine the formals and result subtype of the inherited
!          --  operation, to determine whether their type is derived from (the
!          --  instance of) a generic type.
  
           Formal := First_Formal (Prev_E);
  
*************** package body Sem_Ch6 is
*** 4073,4081 ****
                          Next_Entity (N_Formal);
                       end loop;
  
!                      --  Found a matching primitive operation belonging to
!                      --  the formal ancestor type, so the new subprogram
!                      --  is overriding.
  
                       if not Present (P_Formal)
                         and then not Present (N_Formal)
--- 4294,4302 ----
                          Next_Entity (N_Formal);
                       end loop;
  
!                      --  Found a matching primitive operation belonging to the
!                      --  formal ancestor type, so the new subprogram is
!                      --  overriding.
  
                       if not Present (P_Formal)
                         and then not Present (N_Formal)
*************** package body Sem_Ch6 is
*** 4091,4098 ****
                    Next_Elmt (Prim_Elt);
                 end loop;
  
!                --  If no match found, then the new subprogram does
!                --  not override in the generic (nor in the instance).
  
                 return True;
              end;
--- 4312,4319 ----
                    Next_Elmt (Prim_Elt);
                 end loop;
  
!                --  If no match found, then the new subprogram does not
!                --  override in the generic (nor in the instance).
  
                 return True;
              end;
*************** package body Sem_Ch6 is
*** 4121,4127 ****
        B : Entity_Id;
  
     begin
!       --  Check that equality was properly defined.
  
        if  No (Next_Formal (First_Formal (S))) then
           return;
--- 4342,4348 ----
        B : Entity_Id;
  
     begin
!       --  Check that equality was properly defined
  
        if  No (Next_Formal (First_Formal (S))) then
           return;
*************** package body Sem_Ch6 is
*** 4204,4210 ****
  
     function Mode_Conformant (New_Id, Old_Id : Entity_Id) return Boolean is
        Result : Boolean;
- 
     begin
        Check_Conformance (New_Id, Old_Id, Mode_Conformant, False, Result);
        return Result;
--- 4425,4430 ----
*************** package body Sem_Ch6 is
*** 4231,4237 ****
        --  set when freezing entities, so we must examine the place of the
        --  declaration in the tree, and recognize wrapper packages as well.
  
!       procedure Maybe_Primitive_Operation (Overriding : Boolean := False);
        --  If the subprogram being analyzed is a primitive operation of
        --  the type of one of its formals, set the corresponding flag.
  
--- 4451,4457 ----
        --  set when freezing entities, so we must examine the place of the
        --  declaration in the tree, and recognize wrapper packages as well.
  
!       procedure Maybe_Primitive_Operation (Is_Overriding : Boolean := False);
        --  If the subprogram being analyzed is a primitive operation of
        --  the type of one of its formals, set the corresponding flag.
  
*************** package body Sem_Ch6 is
*** 4267,4273 ****
        -- Maybe_Primitive_Operation --
        -------------------------------
  
!       procedure Maybe_Primitive_Operation (Overriding : Boolean := False) is
           Formal : Entity_Id;
           F_Typ  : Entity_Id;
           B_Typ  : Entity_Id;
--- 4487,4493 ----
        -- Maybe_Primitive_Operation --
        -------------------------------
  
!       procedure Maybe_Primitive_Operation (Is_Overriding : Boolean := False) is
           Formal : Entity_Id;
           F_Typ  : Entity_Id;
           B_Typ  : Entity_Id;
*************** package body Sem_Ch6 is
*** 4298,4304 ****
              then
                 if Is_Abstract (T)
                   and then Is_Abstract (S)
!                  and then (not Overriding or else not Is_Abstract (E))
                 then
                    Error_Msg_N ("abstract subprograms must be visible "
                                  & "('R'M 3.9.3(10))!", S);
--- 4518,4524 ----
              then
                 if Is_Abstract (T)
                   and then Is_Abstract (S)
!                  and then (not Is_Overriding or else not Is_Abstract (E))
                 then
                    Error_Msg_N ("abstract subprograms must be visible "
                                  & "('R'M 3.9.3(10))!", S);
*************** package body Sem_Ch6 is
*** 4306,4312 ****
                 elsif Ekind (S) = E_Function
                   and then Is_Tagged_Type (T)
                   and then T = Base_Type (Etype (S))
!                  and then not Overriding
                 then
                    Error_Msg_N
                      ("private function with tagged result must"
--- 4526,4532 ----
                 elsif Ekind (S) = E_Function
                   and then Is_Tagged_Type (T)
                   and then T = Base_Type (Etype (S))
!                  and then not Is_Overriding
                 then
                    Error_Msg_N
                      ("private function with tagged result must"
*************** package body Sem_Ch6 is
*** 4369,4377 ****
           if not Comes_From_Source (S) then
              null;
  
           elsif (Ekind (Current_Scope) = E_Package
                   and then not In_Package_Body (Current_Scope))
!            or else Overriding
           then
              --  For function, check return type
  
--- 4589,4603 ----
           if not Comes_From_Source (S) then
              null;
  
+          --  If the subprogram is at library level, it is not primitive
+          --  operation.
+ 
+          elsif Current_Scope = Standard_Standard then
+             null;
+ 
           elsif (Ekind (Current_Scope) = E_Package
                   and then not In_Package_Body (Current_Scope))
!            or else Is_Overriding
           then
              --  For function, check return type
  
*************** package body Sem_Ch6 is
*** 4447,4455 ****
              Check_Dispatching_Operation (S, Empty);
  
           --  If the subprogram is implicit it is hidden by the previous
!          --  declaration. However if it is dispatching, it must appear in
!          --  the dispatch table anyway, because it can be dispatched to
!          --  even if it cannot be called directly.
  
           elsif Present (Alias (S))
             and then not Comes_From_Source (S)
--- 4673,4681 ----
              Check_Dispatching_Operation (S, Empty);
  
           --  If the subprogram is implicit it is hidden by the previous
!          --  declaration. However if it is dispatching, it must appear in the
!          --  dispatch table anyway, because it can be dispatched to even if it
!          --  cannot be called directly.
  
           elsif Present (Alias (S))
             and then not Comes_From_Source (S)
*************** package body Sem_Ch6 is
*** 4478,4485 ****
        --  E exists and is overloadable
  
        else
!          --  Loop through E and its homonyms to determine if any of them
!          --  is the candidate for overriding by S.
  
           while Present (E) loop
  
--- 4704,4711 ----
        --  E exists and is overloadable
  
        else
!          --  Loop through E and its homonyms to determine if any of them is
!          --  the candidate for overriding by S.
  
           while Present (E) loop
  
*************** package body Sem_Ch6 is
*** 4492,4516 ****
  
              elsif Type_Conformant (E, S) then
  
!                --  If the old and new entities have the same profile and
!                --  one is not the body of the other, then this is an error,
!                --  unless one of them is implicitly declared.
  
                 --  There are some cases when both can be implicit, for example
                 --  when both a literal and a function that overrides it are
                 --  inherited in a derivation, or when an inhertited operation
                 --  of a tagged full type overrides the ineherited operation of
!                --  a private extension. Ada 83 had a special rule for the
!                --  the literal case. In Ada95, the later implicit operation
!                --  hides the former, and the literal is always the former.
!                --  In the odd case where both are derived operations declared
!                --  at the same point, both operations should be declared,
!                --  and in that case we bypass the following test and proceed
!                --  to the next part (this can only occur for certain obscure
!                --  cases involving homographs in instances and can't occur for
                 --  dispatching operations ???). Note that the following
!                --  condition is less than clear. For example, it's not at
!                --  all clear why there's a test for E_Entry here. ???
  
                 if Present (Alias (S))
                   and then (No (Alias (E))
--- 4718,4742 ----
  
              elsif Type_Conformant (E, S) then
  
!                --  If the old and new entities have the same profile and one
!                --  is not the body of the other, then this is an error, unless
!                --  one of them is implicitly declared.
  
                 --  There are some cases when both can be implicit, for example
                 --  when both a literal and a function that overrides it are
                 --  inherited in a derivation, or when an inhertited operation
                 --  of a tagged full type overrides the ineherited operation of
!                --  a private extension. Ada 83 had a special rule for the the
!                --  literal case. In Ada95, the later implicit operation hides
!                --  the former, and the literal is always the former. In the
!                --  odd case where both are derived operations declared at the
!                --  same point, both operations should be declared, and in that
!                --  case we bypass the following test and proceed to the next
!                --  part (this can only occur for certain obscure cases
!                --  involving homographs in instances and can't occur for
                 --  dispatching operations ???). Note that the following
!                --  condition is less than clear. For example, it's not at all
!                --  clear why there's a test for E_Entry here. ???
  
                 if Present (Alias (S))
                   and then (No (Alias (E))
*************** package body Sem_Ch6 is
*** 4520,4527 ****
                     (Ekind (E) = E_Entry
                       or else Ekind (E) /= E_Enumeration_Literal)
                 then
!                   --  When an derived operation is overloaded it may be due
!                   --  to the fact that the full view of a private extension
                    --  re-inherits. It has to be dealt with.
  
                    if Is_Package (Current_Scope)
--- 4746,4753 ----
                     (Ekind (E) = E_Entry
                       or else Ekind (E) /= E_Enumeration_Literal)
                 then
!                   --  When an derived operation is overloaded it may be due to
!                   --  the fact that the full view of a private extension
                    --  re-inherits. It has to be dealt with.
  
                    if Is_Package (Current_Scope)
*************** package body Sem_Ch6 is
*** 4531,4538 ****
                    end if;
  
                    --  In any case the implicit operation remains hidden by
!                   --  the existing declaration.
  
                    return;
  
                    --  Within an instance, the renaming declarations for
--- 4757,4765 ----
                    end if;
  
                    --  In any case the implicit operation remains hidden by
!                   --  the existing declaration, which is overriding.
  
+                   Set_Is_Overriding_Operation (E);
                    return;
  
                    --  Within an instance, the renaming declarations for
*************** package body Sem_Ch6 is
*** 4617,4633 ****
                       then
                          --  For nondispatching derived operations that are
                          --  overridden by a subprogram declared in the private
!                         --  part of a package, we retain the derived subprogram
!                         --  but mark it as not immediately visible. If the
!                         --  derived operation was declared in the visible part
!                         --  then this ensures that it will still be visible
!                         --  outside the package with the proper signature
!                         --  (calls from outside must also be directed to this
!                         --  version rather than the overriding one, unlike the
!                         --  dispatching case). Calls from inside the package
!                         --  will still resolve to the overriding subprogram
!                         --  since the derived one is marked as not visible
!                         --  within the package.
  
                          --  If the private operation is dispatching, we achieve
                          --  the overriding by keeping the implicit operation
--- 4844,4860 ----
                       then
                          --  For nondispatching derived operations that are
                          --  overridden by a subprogram declared in the private
!                         --  part of a package, we retain the derived
!                         --  subprogram but mark it as not immediately visible.
!                         --  If the derived operation was declared in the
!                         --  visible part then this ensures that it will still
!                         --  be visible outside the package with the proper
!                         --  signature (calls from outside must also be
!                         --  directed to this version rather than the
!                         --  overriding one, unlike the dispatching case).
!                         --  Calls from inside the package will still resolve
!                         --  to the overriding subprogram since the derived one
!                         --  is marked as not visible within the package.
  
                          --  If the private operation is dispatching, we achieve
                          --  the overriding by keeping the implicit operation
*************** package body Sem_Ch6 is
*** 4644,4651 ****
                             if not Is_Dispatching_Operation (E) then
                                Set_Is_Immediately_Visible (E, False);
                             else
! 
!                               --  work done in Override_Dispatching_Operation.
  
                                null;
                             end if;
--- 4871,4878 ----
                             if not Is_Dispatching_Operation (E) then
                                Set_Is_Immediately_Visible (E, False);
                             else
!                               --  Work done in Override_Dispatching_Operation,
!                               --  so nothing else need to be done here.
  
                                null;
                             end if;
*************** package body Sem_Ch6 is
*** 4686,4694 ****
  
                       if Is_Dispatching_Operation (E) then
  
!                         --  An overriding dispatching subprogram inherits
!                         --  the convention of the overridden subprogram
!                         --  (by AI-117).
  
                          Set_Convention (S, Convention (E));
  
--- 4913,4921 ----
  
                       if Is_Dispatching_Operation (E) then
  
!                         --  An overriding dispatching subprogram inherits the
!                         --  convention of the overridden subprogram (by
!                         --  AI-117).
  
                          Set_Convention (S, Convention (E));
  
*************** package body Sem_Ch6 is
*** 4697,4703 ****
                          Check_Dispatching_Operation (S, Empty);
                       end if;
  
!                      Maybe_Primitive_Operation (Overriding => True);
                       goto Check_Inequality;
                    end;
  
--- 4924,4930 ----
                          Check_Dispatching_Operation (S, Empty);
                       end if;
  
!                      Maybe_Primitive_Operation (Is_Overriding => True);
                       goto Check_Inequality;
                    end;
  
*************** package body Sem_Ch6 is
*** 4750,4759 ****
           Enter_Overloaded_Entity (S);
           Maybe_Primitive_Operation;
  
!          --  If S is a derived operation for an untagged type then
!          --  by definition it's not a dispatching operation (even
!          --  if the parent operation was dispatching), so we don't
!          --  call Check_Dispatching_Operation in that case.
  
           if not Present (Derived_Type)
             or else Is_Tagged_Type (Derived_Type)
--- 4977,4986 ----
           Enter_Overloaded_Entity (S);
           Maybe_Primitive_Operation;
  
!          --  If S is a derived operation for an untagged type then by
!          --  definition it's not a dispatching operation (even if the parent
!          --  operation was dispatching), so we don't call
!          --  Check_Dispatching_Operation in that case.
  
           if not Present (Derived_Type)
             or else Is_Tagged_Type (Derived_Type)
*************** package body Sem_Ch6 is
*** 4762,4772 ****
           end if;
        end if;
  
!       --  If this is a  user-defined equality operator that is not
!       --  a derived subprogram, create the corresponding inequality.
!       --  If the operation is dispatching, the expansion is done
!       --  elsewhere, and we do not create an explicit inequality
!       --  operation.
  
        <<Check_Inequality>>
           if Chars (S) = Name_Op_Eq
--- 4989,4998 ----
           end if;
        end if;
  
!       --  If this is a user-defined equality operator that is not a derived
!       --  subprogram, create the corresponding inequality. If the operation is
!       --  dispatching, the expansion is done elsewhere, and we do not create
!       --  an explicit inequality operation.
  
        <<Check_Inequality>>
           if Chars (S) = Name_Op_Eq
*************** package body Sem_Ch6 is
*** 4793,4801 ****
        Ptype       : Entity_Id;
  
        function Is_Class_Wide_Default (D : Node_Id) return Boolean;
!       --  Check whether the default has a class-wide type. After analysis
!       --  the default has the type of the formal, so we must also check
!       --  explicitly for an access attribute.
  
        ---------------------------
        -- Is_Class_Wide_Default --
--- 5019,5027 ----
        Ptype       : Entity_Id;
  
        function Is_Class_Wide_Default (D : Node_Id) return Boolean;
!       --  Check whether the default has a class-wide type. After analysis the
!       --  default has the type of the formal, so we must also check explicitly
!       --  for an access attribute.
  
        ---------------------------
        -- Is_Class_Wide_Default --
*************** package body Sem_Ch6 is
*** 4840,4848 ****
                          and then Ekind (Root_Type (Formal_Type)) =
                                                           E_Incomplete_Type)
              then
!                --  Ada0Y (AI-50217): Incomplete tagged types that are made
!                --  visible through a limited with_clause are valid formal
!                --  types.
  
                 if From_With_Type (Formal_Type)
                   and then Is_Tagged_Type (Formal_Type)
--- 5066,5073 ----
                          and then Ekind (Root_Type (Formal_Type)) =
                                                           E_Incomplete_Type)
              then
!                --  Ada 2005 (AI-50217): Incomplete tagged types that are made
!                --  visible by a limited with_clause are valid formal types.
  
                 if From_With_Type (Formal_Type)
                   and then Is_Tagged_Type (Formal_Type)
*************** package body Sem_Ch6 is
*** 4860,4874 ****
                   Parameter_Type (Param_Spec), Formal_Type);
              end if;
  
           --  An access formal type
  
           else
              Formal_Type :=
                Access_Definition (Related_Nod, Parameter_Type (Param_Spec));
           end if;
  
           Set_Etype (Formal, Formal_Type);
- 
           Default := Expression (Param_Spec);
  
           if Present (Default) then
--- 5085,5181 ----
                   Parameter_Type (Param_Spec), Formal_Type);
              end if;
  
+             --  Ada 2005 (AI-231): Create and decorate an internal subtype
+             --  declaration corresponding to the null-excluding type of the
+             --  formal in the enclosing scope. In addition, replace the
+             --  parameter type of the formal to this internal subtype.
+ 
+             if Null_Exclusion_Present (Param_Spec) then
+                declare
+                   Loc   : constant Source_Ptr := Sloc (Param_Spec);
+ 
+                   Anon  : constant Entity_Id :=
+                             Make_Defining_Identifier (Loc,
+                               Chars => New_Internal_Name ('S'));
+ 
+                   Curr_Scope : constant Scope_Stack_Entry :=
+                                  Scope_Stack.Table (Scope_Stack.Last);
+ 
+                   Ptype : constant Node_Id := Parameter_Type (Param_Spec);
+                   Decl  : Node_Id;
+                   P     : Node_Id := Parent (Parent (Related_Nod));
+ 
+                begin
+                   Set_Is_Internal (Anon);
+ 
+                   Decl :=
+                     Make_Subtype_Declaration (Loc,
+                       Defining_Identifier      => Anon,
+                         Null_Exclusion_Present => True,
+                         Subtype_Indication     =>
+                           New_Occurrence_Of (Etype (Ptype), Loc));
+ 
+                   --  Propagate the null-excluding attribute to the new entity
+ 
+                   if Null_Exclusion_Present (Param_Spec) then
+                      Set_Null_Exclusion_Present (Param_Spec, False);
+                      Set_Can_Never_Be_Null (Anon);
+                   end if;
+ 
+                   Mark_Rewrite_Insertion (Decl);
+ 
+                   --  Insert the new declaration in the nearest enclosing scope
+ 
+                   while not Has_Declarations (P) loop
+                      P := Parent (P);
+                   end loop;
+ 
+                   Prepend (Decl, Declarations (P));
+ 
+                   Rewrite (Ptype, New_Occurrence_Of (Anon, Loc));
+                   Mark_Rewrite_Insertion (Ptype);
+ 
+                   --  Analyze the new declaration in the context of the
+                   --  enclosing scope
+ 
+                   Scope_Stack.Decrement_Last;
+                   Analyze (Decl);
+                   Scope_Stack.Append (Curr_Scope);
+ 
+                   Formal_Type := Anon;
+                end;
+             end if;
+ 
+             --  Ada 2005 (AI-231): Static checks
+ 
+             if Null_Exclusion_Present (Param_Spec)
+               or else Can_Never_Be_Null (Entity (Ptype))
+             then
+                Null_Exclusion_Static_Checks (Param_Spec);
+             end if;
+ 
           --  An access formal type
  
           else
              Formal_Type :=
                Access_Definition (Related_Nod, Parameter_Type (Param_Spec));
+ 
+             --  Ada 2005 (AI-254)
+ 
+             declare
+                AD : constant Node_Id :=
+                       Access_To_Subprogram_Definition
+                         (Parameter_Type (Param_Spec));
+             begin
+                if Present (AD) and then Protected_Present (AD) then
+                   Formal_Type :=
+                     Replace_Anonymous_Access_To_Protected_Subprogram
+                       (Param_Spec, Formal_Type);
+                end if;
+             end;
           end if;
  
           Set_Etype (Formal, Formal_Type);
           Default := Expression (Param_Spec);
  
           if Present (Default) then
*************** package body Sem_Ch6 is
*** 4900,4905 ****
--- 5207,5220 ----
           Next (Param_Spec);
        end loop;
  
+       --  If this is the formal part of a function specification, analyze the
+       --  subtype mark in the context where the formals are visible but not
+       --  yet usable, and may hide outer homographs.
+ 
+       if Nkind (Related_Nod) = N_Function_Specification then
+          Analyze_Return_Type (Related_Nod);
+       end if;
+ 
        --  Now set the kind (mode) of each formal
  
        Param_Spec := First (T);
*************** package body Sem_Ch6 is
*** 4927,4933 ****
  
                    Apply_Scalar_Range_Check (Default, Formal_Type);
                 end if;
- 
              end if;
           end if;
  
--- 5242,5247 ----
*************** package body Sem_Ch6 is
*** 4971,4982 ****
     -------------------------
  
     procedure Set_Actual_Subtypes (N : Node_Id; Subp : Entity_Id) is
!       Loc        : constant Source_Ptr := Sloc (N);
!       Decl       : Node_Id;
!       Formal     : Entity_Id;
!       T          : Entity_Id;
!       First_Stmt : Node_Id := Empty;
!       AS_Needed  : Boolean;
  
     begin
        --  If this is an emtpy initialization procedure, no need to create
--- 5285,5296 ----
     -------------------------
  
     procedure Set_Actual_Subtypes (N : Node_Id; Subp : Entity_Id) is
!       Loc            : constant Source_Ptr := Sloc (N);
!       Decl           : Node_Id;
!       Formal         : Entity_Id;
!       T              : Entity_Id;
!       First_Stmt     : Node_Id := Empty;
!       AS_Needed      : Boolean;
  
     begin
        --  If this is an emtpy initialization procedure, no need to create
*************** package body Sem_Ch6 is
*** 4992,5032 ****
        while Present (Formal) loop
           T := Etype (Formal);
  
!          --  We never need an actual subtype for a constrained formal.
  
           if Is_Constrained (T) then
              AS_Needed := False;
  
!          --  If we have unknown discriminants, then we do not need an
!          --  actual subtype, or more accurately we cannot figure it out!
!          --  Note that all class-wide types have unknown discriminants.
  
           elsif Has_Unknown_Discriminants (T) then
              AS_Needed := False;
  
!          --  At this stage we have an unconstrained type that may need
!          --  an actual subtype. For sure the actual subtype is needed
!          --  if we have an unconstrained array type.
  
           elsif Is_Array_Type (T) then
              AS_Needed := True;
  
           --  The only other case which needs an actual subtype is an
!          --  unconstrained record type which is an IN parameter (we
!          --  cannot generate actual subtypes for the OUT or IN OUT case,
!          --  since an assignment can change the discriminant values.
!          --  However we exclude the case of initialization procedures,
!          --  since discriminants are handled very specially in this context,
!          --  see the section entitled "Handling of Discriminants" in Einfo.
!          --  We also exclude the case of Discrim_SO_Functions (functions
!          --  used in front end layout mode for size/offset values), since
!          --  in such functions only discriminants are referenced, and not
!          --  only are such subtypes not needed, but they cannot always
!          --  be generated, because of order of elaboration issues.
  
           elsif Is_Record_Type (T)
             and then Ekind (Formal) = E_In_Parameter
             and then Chars (Formal) /= Name_uInit
             and then not Is_Discrim_SO_Function (Subp)
           then
              AS_Needed := True;
--- 5306,5347 ----
        while Present (Formal) loop
           T := Etype (Formal);
  
!          --  We never need an actual subtype for a constrained formal
  
           if Is_Constrained (T) then
              AS_Needed := False;
  
!          --  If we have unknown discriminants, then we do not need an actual
!          --  subtype, or more accurately we cannot figure it out! Note that
!          --  all class-wide types have unknown discriminants.
  
           elsif Has_Unknown_Discriminants (T) then
              AS_Needed := False;
  
!          --  At this stage we have an unconstrained type that may need an
!          --  actual subtype. For sure the actual subtype is needed if we have
!          --  an unconstrained array type.
  
           elsif Is_Array_Type (T) then
              AS_Needed := True;
  
           --  The only other case which needs an actual subtype is an
!          --  unconstrained record type which is an IN parameter (we cannot
!          --  generate actual subtypes for the OUT or IN OUT case, since an
!          --  assignment can change the discriminant values. However we exclude
!          --  the case of initialization procedures, since discriminants are
!          --  handled very specially in this context, see the section entitled
!          --  "Handling of Discriminants" in Einfo. We also exclude the case of
!          --  Discrim_SO_Functions (functions used in front end layout mode for
!          --  size/offset values), since in such functions only discriminants
!          --  are referenced, and not only are such subtypes not needed, but
!          --  they cannot always be generated, because of order of elaboration
!          --  issues.
  
           elsif Is_Record_Type (T)
             and then Ekind (Formal) = E_In_Parameter
             and then Chars (Formal) /= Name_uInit
+            and then not Is_Unchecked_Union (T)
             and then not Is_Discrim_SO_Function (Subp)
           then
              AS_Needed := True;
*************** package body Sem_Ch6 is
*** 5041,5047 ****
           --  unconstrained discriminated records.
  
           if AS_Needed then
- 
              if Nkind (N) = N_Accept_Statement then
  
                 --  If expansion is active, The formal is replaced by a local
--- 5356,5361 ----
*************** package body Sem_Ch6 is
*** 5061,5069 ****
                    Prepend (Decl, Statements (Handled_Statement_Sequence (N)));
                    Mark_Rewrite_Insertion (Decl);
                 else
!                   --  If the accept statement has no body, there will be
!                   --  no reference to the actuals, so no need to compute
!                   --  actual subtypes.
  
                    return;
                 end if;
--- 5375,5383 ----
                    Prepend (Decl, Statements (Handled_Statement_Sequence (N)));
                    Mark_Rewrite_Insertion (Decl);
                 else
!                   --  If the accept statement has no body, there will be no
!                   --  reference to the actuals, so no need to compute actual
!                   --  subtypes.
  
                    return;
                 end if;
*************** package body Sem_Ch6 is
*** 5074,5080 ****
                 Mark_Rewrite_Insertion (Decl);
              end if;
  
!             Analyze (Decl);
  
              --  We need to freeze manually the generated type when it is
              --  inserted anywhere else than in a declarative part.
--- 5388,5397 ----
                 Mark_Rewrite_Insertion (Decl);
              end if;
  
!             --  The declaration uses the bounds of an existing object, and
!             --  therefore needs no constraint checks.
! 
!             Analyze (Decl, Suppress => All_Checks);
  
              --  We need to freeze manually the generated type when it is
              --  inserted anywhere else than in a declarative part.
*************** package body Sem_Ch6 is
*** 5132,5143 ****
        end if;
  
        --  Set Is_Known_Non_Null for access parameters since the language
!       --  guarantees that access parameters are always non-null. We also
!       --  set Can_Never_Be_Null, since there is no way to change the value.
  
        if Nkind (Parameter_Type (Spec)) = N_Access_Definition then
!          Set_Is_Known_Non_Null (Formal_Id);
!          Set_Can_Never_Be_Null (Formal_Id);
        end if;
  
        Set_Mechanism (Formal_Id, Default_Mechanism);
--- 5449,5468 ----
        end if;
  
        --  Set Is_Known_Non_Null for access parameters since the language
!       --  guarantees that access parameters are always non-null. We also set
!       --  Can_Never_Be_Null, since there is no way to change the value.
  
        if Nkind (Parameter_Type (Spec)) = N_Access_Definition then
! 
!          --  Ada 2005 (AI-231): This behaviour has been modified in Ada 2005.
!          --  It is only forced if the null_exclusion appears.
! 
!          if Ada_Version < Ada_05
!            or else Null_Exclusion_Present (Spec)
!          then
!             Set_Is_Known_Non_Null (Formal_Id);
!             Set_Can_Never_Be_Null (Formal_Id);
!          end if;
        end if;
  
        Set_Mechanism (Formal_Id, Default_Mechanism);
*************** package body Sem_Ch6 is
*** 5150,5158 ****
  
     procedure Set_Formal_Validity (Formal_Id : Entity_Id) is
     begin
!       --  If no validity checking, then we cannot assume anything about
!       --  the validity of parameters, since we do not know there is any
!       --  checking of the validity on the call side.
  
        if not Validity_Checks_On then
           return;
--- 5475,5483 ----
  
     procedure Set_Formal_Validity (Formal_Id : Entity_Id) is
     begin
!       --  If no validity checking, then we cannot assume anything about the
!       --  validity of parameters, since we do not know there is any checking
!       --  of the validity on the call side.
  
        if not Validity_Checks_On then
           return;
diff -Nrcpad gcc-3.4.3/gcc/ada/sem_ch7.adb gcc-4.0.0/gcc/ada/sem_ch7.adb
*** gcc-3.4.3/gcc/ada/sem_ch7.adb	Mon Jan 12 11:45:25 2004
--- gcc-4.0.0/gcc/ada/sem_ch7.adb	Thu Feb 10 13:56:10 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Sem_Cat;  use Sem_Cat;
*** 48,53 ****
--- 48,54 ----
  with Sem_Ch3;  use Sem_Ch3;
  with Sem_Ch6;  use Sem_Ch6;
  with Sem_Ch8;  use Sem_Ch8;
+ with Sem_Ch10; use Sem_Ch10;
  with Sem_Ch12; use Sem_Ch12;
  with Sem_Util; use Sem_Util;
  with Sem_Warn; use Sem_Warn;
*************** package body Sem_Ch7 is
*** 91,97 ****
     --  is an inner package.
  
     function Is_Private_Base_Type (E : Entity_Id) return Boolean;
!    --  True for a private type that is not a subtype.
  
     function Is_Visible_Dependent (Dep : Entity_Id) return Boolean;
     --  If the private dependent is a private type whose full view is
--- 92,98 ----
     --  is an inner package.
  
     function Is_Private_Base_Type (E : Entity_Id) return Boolean;
!    --  True for a private type that is not a subtype
  
     function Is_Visible_Dependent (Dep : Entity_Id) return Boolean;
     --  If the private dependent is a private type whose full view is
*************** package body Sem_Ch7 is
*** 218,224 ****
                 or else Is_Child_Unit (Spec_Id))
             and then not Unit_Requires_Body (Spec_Id)
           then
!             if Ada_83 then
                 Error_Msg_N
                   ("optional package body (not allowed in Ada 95)?", N);
              else
--- 219,225 ----
                 or else Is_Child_Unit (Spec_Id))
             and then not Unit_Requires_Body (Spec_Id)
           then
!             if Ada_Version = Ada_83 then
                 Error_Msg_N
                   ("optional package body (not allowed in Ada 95)?", N);
              else
*************** package body Sem_Ch7 is
*** 287,293 ****
           Append_Entity (Body_Id, Scope (Spec_Id));
        end if;
  
!       --  Indicate that we are currently compiling the body of the package.
  
        Set_In_Package_Body (Spec_Id);
        Set_Has_Completion (Spec_Id);
--- 288,294 ----
           Append_Entity (Body_Id, Scope (Spec_Id));
        end if;
  
!       --  Indicate that we are currently compiling the body of the package
  
        Set_In_Package_Body (Spec_Id);
        Set_Has_Completion (Spec_Id);
*************** package body Sem_Ch7 is
*** 299,304 ****
--- 300,306 ----
  
        Install_Visible_Declarations (Spec_Id);
        Install_Private_Declarations (Spec_Id);
+       Install_Private_With_Clauses (Spec_Id);
        Install_Composite_Operations (Spec_Id);
  
        if Ekind (Spec_Id) = E_Generic_Package then
*************** package body Sem_Ch7 is
*** 375,381 ****
  
        End_Package_Scope (Spec_Id);
  
!       --  All entities declared in body are not visible.
  
        declare
           E : Entity_Id;
--- 377,383 ----
  
        End_Package_Scope (Spec_Id);
  
!       --  All entities declared in body are not visible
  
        declare
           E : Entity_Id;
*************** package body Sem_Ch7 is
*** 689,694 ****
--- 691,707 ----
        --  Child and Unit are entities of compilation units. True if Child
        --  is a public child of Parent as defined in 10.1.1
  
+       procedure Inspect_Deferred_Constant_Completion;
+       --  Examines the deferred constants in the private part of the package
+       --  specification. Emits the error message "constant declaration requires
+       --  initialization expression " if not completed by an Import pragma.
+ 
+       procedure Inspect_Unchecked_Union_Completion (Decls : List_Id);
+       --  Detects all incomplete or private type declarations having a known
+       --  discriminant part that are completed by an Unchecked_Union. Emits
+       --  the error message "Unchecked_Union may not complete discriminated
+       --  partial view".
+ 
        ---------------------
        -- Clear_Constants --
        ---------------------
*************** package body Sem_Ch7 is
*** 791,796 ****
--- 804,875 ----
           end if;
        end Is_Public_Child;
  
+       ------------------------------------------
+       -- Inspect_Deferred_Constant_Completion --
+       ------------------------------------------
+ 
+       procedure Inspect_Deferred_Constant_Completion is
+          Decl   : Node_Id;
+ 
+       begin
+          Decl := First (Priv_Decls);
+          while Present (Decl) loop
+ 
+             --  Deferred constant signature
+ 
+             if Nkind (Decl) = N_Object_Declaration
+               and then Constant_Present (Decl)
+               and then No (Expression (Decl))
+ 
+                --  No need to check internally generated constants
+ 
+               and then Comes_From_Source (Decl)
+ 
+                --  The constant is not completed. A full object declaration
+                --  or a pragma Import complete a deferred constant.
+ 
+               and then not Has_Completion (Defining_Identifier (Decl))
+             then
+                Error_Msg_N
+                  ("constant declaration requires initialization expression",
+                  Defining_Identifier (Decl));
+             end if;
+ 
+             Decl := Next (Decl);
+          end loop;
+       end Inspect_Deferred_Constant_Completion;
+ 
+       ----------------------------------------
+       -- Inspect_Unchecked_Union_Completion --
+       ----------------------------------------
+ 
+       procedure Inspect_Unchecked_Union_Completion (Decls : List_Id) is
+          Decl : Node_Id := First (Decls);
+ 
+       begin
+          while Present (Decl) loop
+ 
+             --  We are looking at an incomplete or private type declaration
+             --  with a known_discriminant_part whose full view is an
+             --  Unchecked_Union.
+ 
+             if (Nkind (Decl) = N_Incomplete_Type_Declaration
+                   or else
+                 Nkind (Decl) = N_Private_Type_Declaration)
+               and then Has_Discriminants (Defining_Identifier (Decl))
+               and then Present (Full_View (Defining_Identifier (Decl)))
+               and then Is_Unchecked_Union
+                 (Full_View (Defining_Identifier (Decl)))
+             then
+                Error_Msg_N ("completion of discriminated partial view" &
+                  " cannot be an Unchecked_Union",
+                  Full_View (Defining_Identifier (Decl)));
+             end if;
+ 
+             Next (Decl);
+          end loop;
+       end Inspect_Unchecked_Union_Completion;
+ 
     --  Start of processing for Analyze_Package_Specification
  
     begin
*************** package body Sem_Ch7 is
*** 798,804 ****
           Analyze_Declarations (Vis_Decls);
        end if;
  
!       --  Verify that incomplete types have received full declarations.
  
        E := First_Entity (Id);
        while Present (E) loop
--- 877,883 ----
           Analyze_Declarations (Vis_Decls);
        end if;
  
!       --  Verify that incomplete types have received full declarations
  
        E := First_Entity (Id);
        while Present (E) loop
*************** package body Sem_Ch7 is
*** 842,865 ****
  
        Public_Child := False;
  
!       if Present (Parent_Spec (Parent (N))) then
!          Generate_Parent_References;
  
!          declare
!             Par       : Entity_Id := Id;
!             Pack_Decl : Node_Id;
  
-          begin
              while Scope (Par) /= Standard_Standard
                and then Is_Public_Child (Id, Par)
              loop
                 Public_Child := True;
                 Par := Scope (Par);
                 Install_Private_Declarations (Par);
                 Pack_Decl := Unit_Declaration_Node (Par);
                 Set_Use (Private_Declarations (Specification (Pack_Decl)));
              end loop;
!          end;
        end if;
  
        --  Analyze private part if present. The flag In_Private_Part is
--- 921,966 ----
  
        Public_Child := False;
  
!       declare
!          Par       : Entity_Id;
!          Pack_Decl : Node_Id;
!          Par_Spec  : Node_Id;
  
!       begin
!          Par := Id;
!          Par_Spec := Parent_Spec (Parent (N));
! 
!          --  If the package is formal package of an enclosing generic, is is
!          --  transformed into a local generic declaration, and compiled to make
!          --  its spec available. We need to retrieve the original generic to
!          --  determine whether it is a child unit, and install its parents.
! 
!          if No (Par_Spec)
!            and then
!              Nkind (Original_Node (Parent (N))) = N_Formal_Package_Declaration
!          then
!             Par := Entity (Name (Original_Node (Parent (N))));
!             Par_Spec := Parent_Spec (Unit_Declaration_Node (Par));
!          end if;
! 
!          if Present (Par_Spec) then
!             Generate_Parent_References;
  
              while Scope (Par) /= Standard_Standard
                and then Is_Public_Child (Id, Par)
              loop
                 Public_Child := True;
                 Par := Scope (Par);
                 Install_Private_Declarations (Par);
+                Install_Private_With_Clauses (Par);
                 Pack_Decl := Unit_Declaration_Node (Par);
                 Set_Use (Private_Declarations (Specification (Pack_Decl)));
              end loop;
!          end if;
!       end;
! 
!       if Is_Compilation_Unit (Id) then
!          Install_Private_With_Clauses (Id);
        end if;
  
        --  Analyze private part if present. The flag In_Private_Part is
*************** package body Sem_Ch7 is
*** 880,885 ****
--- 981,990 ----
  
           Analyze_Declarations (Priv_Decls);
  
+          --  Check the private declarations for incomplete deferred constants
+ 
+          Inspect_Deferred_Constant_Completion;
+ 
           --  The first private entity is the immediate follower of the last
           --  visible entity, if there was one.
  
*************** package body Sem_Ch7 is
*** 913,918 ****
--- 1018,1035 ----
           Next_Entity (E);
        end loop;
  
+       --  Ada 2005 (AI-216): The completion of an incomplete or private type
+       --  declaration having a known_discriminant_part shall not be an
+       --  Unchecked_Union type.
+ 
+       if Present (Vis_Decls) then
+          Inspect_Unchecked_Union_Completion (Vis_Decls);
+       end if;
+ 
+       if Present (Priv_Decls) then
+          Inspect_Unchecked_Union_Completion (Priv_Decls);
+       end if;
+ 
        if Ekind (Id) = E_Generic_Package
          and then Nkind (Orig_Decl) = N_Generic_Package_Declaration
          and then Present (Priv_Decls)
*************** package body Sem_Ch7 is
*** 1368,1379 ****
           Next_Entity (Id);
        end loop;
  
!       --  Next make other declarations in the private part visible as well.
  
        Id := First_Private_Entity (P);
  
        while Present (Id) loop
           Install_Package_Entity (Id);
           Next_Entity (Id);
        end loop;
  
--- 1485,1497 ----
           Next_Entity (Id);
        end loop;
  
!       --  Next make other declarations in the private part visible as well
  
        Id := First_Private_Entity (P);
  
        while Present (Id) loop
           Install_Package_Entity (Id);
+          Set_Is_Hidden (Id, False);
           Next_Entity (Id);
        end loop;
  
*************** package body Sem_Ch7 is
*** 1551,1557 ****
        --  that need to be available for the partial view also.
  
        function Type_In_Use (T : Entity_Id) return Boolean;
!       --  Check whether type or base type appear in an active use_type clause.
  
        ------------------------------
        -- Preserve_Full_Attributes --
--- 1669,1675 ----
        --  that need to be available for the partial view also.
  
        function Type_In_Use (T : Entity_Id) return Boolean;
!       --  Check whether type or base type appear in an active use_type clause
  
        ------------------------------
        -- Preserve_Full_Attributes --
*************** package body Sem_Ch7 is
*** 1593,1599 ****
              end if;
  
              Set_First_Entity (Priv, First_Entity (Full));
!             Set_Last_Entity (Priv, Last_Entity (Full));
           end if;
        end Preserve_Full_Attributes;
  
--- 1711,1718 ----
              end if;
  
              Set_First_Entity (Priv, First_Entity (Full));
!             Set_Last_Entity  (Priv, Last_Entity (Full));
!             Set_Has_Discriminants (Priv, Has_Discriminants (Full));
           end if;
        end Preserve_Full_Attributes;
  
*************** package body Sem_Ch7 is
*** 1648,1654 ****
                In_Use (P) and not Is_Hidden (Id));
           end if;
  
!          --  Local entities are not immediately visible outside of the package.
  
           Set_Is_Immediately_Visible (Id, False);
  
--- 1767,1773 ----
                In_Use (P) and not Is_Hidden (Id));
           end if;
  
!          --  Local entities are not immediately visible outside of the package
  
           Set_Is_Immediately_Visible (Id, False);
  
*************** package body Sem_Ch7 is
*** 1786,1792 ****
              end if;
  
              Priv_Elmt := First_Elmt (Private_Dependents (Id));
-             Exchange_Declarations (Id);
  
              --  Swap out the subtypes and derived types of Id that were
              --  compiled in this scope, or installed previously by
--- 1905,1910 ----
*************** package body Sem_Ch7 is
*** 1818,1823 ****
--- 1936,1945 ----
                 Next_Elmt (Priv_Elmt);
              end loop;
  
+             --  Now restore the type itself to its private view.
+ 
+             Exchange_Declarations (Id);
+ 
           elsif Ekind (Id) = E_Incomplete_Type
             and then No (Full_View (Id))
           then
*************** package body Sem_Ch7 is
*** 1882,1888 ****
           end;
        end if;
  
!       --  Otherwise search entity chain for entity requiring completion.
  
        E := First_Entity (P);
        while Present (E) loop
--- 2004,2010 ----
           end;
        end if;
  
!       --  Otherwise search entity chain for entity requiring completion
  
        E := First_Entity (P);
        while Present (E) loop
*************** package body Sem_Ch7 is
*** 1894,1899 ****
--- 2016,2029 ----
           if Is_Child_Unit (E) then
              null;
  
+          --  Ignore formal packages and their renamings
+ 
+          elsif Ekind (E) = E_Package
+            and then Nkind (Original_Node (Unit_Declaration_Node (E))) =
+                                                 N_Formal_Package_Declaration
+          then
+             null;
+ 
           --  Otherwise test to see if entity requires a completion
  
           elsif (Is_Overloadable (E)
diff -Nrcpad gcc-3.4.3/gcc/ada/sem_ch8.adb gcc-4.0.0/gcc/ada/sem_ch8.adb
*** gcc-3.4.3/gcc/ada/sem_ch8.adb	Mon Jan  5 15:20:46 2004
--- gcc-4.0.0/gcc/ada/sem_ch8.adb	Thu Feb 10 13:50:38 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Nmake;    use Nmake;
*** 41,46 ****
--- 41,47 ----
  with Opt;      use Opt;
  with Output;   use Output;
  with Restrict; use Restrict;
+ with Rident;   use Rident;
  with Rtsfind;  use Rtsfind;
  with Sem;      use Sem;
  with Sem_Cat;  use Sem_Cat;
*************** with Sem_Ch3;  use Sem_Ch3;
*** 48,53 ****
--- 49,55 ----
  with Sem_Ch4;  use Sem_Ch4;
  with Sem_Ch6;  use Sem_Ch6;
  with Sem_Ch12; use Sem_Ch12;
+ with Sem_Disp; use Sem_Disp;
  with Sem_Res;  use Sem_Res;
  with Sem_Util; use Sem_Util;
  with Sem_Type; use Sem_Type;
*************** package body Sem_Ch8 is
*** 427,432 ****
--- 429,438 ----
     --  Find a type derived from Character or Wide_Character in the prefix of N.
     --  Used to resolved qualified names whose selector is a character literal.
  
+    function Has_Private_With (E : Entity_Id) return Boolean;
+    --  Ada 2005 (AI-262): Determines if the current compilation unit has a
+    --  private with on E
+ 
     procedure Find_Expanded_Name (N : Node_Id);
     --  Selected component is known to be expanded name. Verify legality
     --  of selector given the scope denoted by prefix.
*************** package body Sem_Ch8 is
*** 466,472 ****
     --  to one of these types.
  
     procedure Premature_Usage (N : Node_Id);
!    --  Diagnose usage of an entity before it is visible.
  
     procedure Use_One_Package (P : Entity_Id; N : Node_Id);
     --  Make visible entities declared in package P potentially use-visible
--- 472,478 ----
     --  to one of these types.
  
     procedure Premature_Usage (N : Node_Id);
!    --  Diagnose usage of an entity before it is visible
  
     procedure Use_One_Package (P : Entity_Id; N : Node_Id);
     --  Make visible entities declared in package P potentially use-visible
*************** package body Sem_Ch8 is
*** 544,561 ****
        end if;
     end Analyze_Expanded_Name;
  
!    ----------------------------------------
!    --  Analyze_Generic_Function_Renaming --
!    ----------------------------------------
  
     procedure Analyze_Generic_Function_Renaming  (N : Node_Id) is
     begin
        Analyze_Generic_Renaming (N, E_Generic_Function);
     end Analyze_Generic_Function_Renaming;
  
!    ---------------------------------------
!    --  Analyze_Generic_Package_Renaming --
!    ---------------------------------------
  
     procedure Analyze_Generic_Package_Renaming   (N : Node_Id) is
     begin
--- 550,567 ----
        end if;
     end Analyze_Expanded_Name;
  
!    ---------------------------------------
!    -- Analyze_Generic_Function_Renaming --
!    ---------------------------------------
  
     procedure Analyze_Generic_Function_Renaming  (N : Node_Id) is
     begin
        Analyze_Generic_Renaming (N, E_Generic_Function);
     end Analyze_Generic_Function_Renaming;
  
!    --------------------------------------
!    -- Analyze_Generic_Package_Renaming --
!    --------------------------------------
  
     procedure Analyze_Generic_Package_Renaming   (N : Node_Id) is
     begin
*************** package body Sem_Ch8 is
*** 567,575 ****
        Analyze_Generic_Renaming (N, E_Generic_Package);
     end Analyze_Generic_Package_Renaming;
  
!    -----------------------------------------
!    --  Analyze_Generic_Procedure_Renaming --
!    -----------------------------------------
  
     procedure Analyze_Generic_Procedure_Renaming (N : Node_Id) is
     begin
--- 573,581 ----
        Analyze_Generic_Renaming (N, E_Generic_Package);
     end Analyze_Generic_Package_Renaming;
  
!    ----------------------------------------
!    -- Analyze_Generic_Procedure_Renaming --
!    ----------------------------------------
  
     procedure Analyze_Generic_Procedure_Renaming (N : Node_Id) is
     begin
*************** package body Sem_Ch8 is
*** 648,654 ****
        Id  : constant Entity_Id := Defining_Identifier (N);
        Dec : Node_Id;
        Nam : constant Node_Id   := Name (N);
-       S   : constant Entity_Id := Subtype_Mark (N);
        T   : Entity_Id;
        T2  : Entity_Id;
  
--- 654,659 ----
*************** package body Sem_Ch8 is
*** 678,687 ****
              Set_Etype (Nam, T);
           end if;
  
!       else
!          Find_Type (S);
!          T := Entity (S);
           Analyze_And_Resolve (Nam, T);
        end if;
  
        --  An object renaming requires an exact match of the type;
--- 683,717 ----
              Set_Etype (Nam, T);
           end if;
  
!       elsif Present (Subtype_Mark (N)) then
!          Find_Type (Subtype_Mark (N));
!          T := Entity (Subtype_Mark (N));
!          Analyze_And_Resolve (Nam, T);
! 
!       --  Ada 2005 (AI-230/AI-254): Access renaming
! 
!       else pragma Assert (Present (Access_Definition (N)));
!          T := Access_Definition
!                 (Related_Nod => N,
!                  N           => Access_Definition (N));
! 
           Analyze_And_Resolve (Nam, T);
+ 
+          --  Ada 2005 (AI-231): "In the case where the type is defined by an
+          --  access_definition, the renamed entity shall be of an access-to-
+          --  constant type if and only if the access_definition defines an
+          --  access-to-constant type" ARM 8.5.1(4)
+ 
+          if Constant_Present (Access_Definition (N))
+            and then not Is_Access_Constant (Etype (Nam))
+          then
+             Error_Msg_N ("(Ada 2005): the renamed object is not "
+                          & "access-to-constant ('R'M 8.5.1(6))", N);
+ 
+          elsif Null_Exclusion_Present (Access_Definition (N)) then
+             Error_Msg_N ("(Ada 2005): null-excluding attribute ignored "
+                          & "('R'M 8.5.1(6))?", N);
+          end if;
        end if;
  
        --  An object renaming requires an exact match of the type;
*************** package body Sem_Ch8 is
*** 725,731 ****
                    and then Is_Function_Attribute_Name
                      (Attribute_Name (Original_Node (Nam))))
  
!             --  Weird but legal, equivalent to renaming a function call.
  
          or else (Is_Entity_Name (Nam)
                    and then Ekind (Entity (Nam)) = E_Enumeration_Literal)
--- 755,761 ----
                    and then Is_Function_Attribute_Name
                      (Attribute_Name (Original_Node (Nam))))
  
!             --  Weird but legal, equivalent to renaming a function call
  
          or else (Is_Entity_Name (Nam)
                    and then Ekind (Entity (Nam)) = E_Enumeration_Literal)
*************** package body Sem_Ch8 is
*** 743,749 ****
           else
              Error_Msg_N ("expect object name in renaming", Nam);
           end if;
- 
        end if;
  
        Set_Etype (Id, T2);
--- 773,778 ----
*************** package body Sem_Ch8 is
*** 792,798 ****
           Error_Msg_N
             ("expect package name in renaming", Name (N));
  
!       --  Ada0Y (AI-50217): Limited withed packages can not be renamed
  
        elsif Ekind (Old_P) = E_Package
          and then From_With_Type (Old_P)
--- 821,827 ----
           Error_Msg_N
             ("expect package name in renaming", Name (N));
  
!       --  Ada 2005 (AI-50217): Limited withed packages can not be renamed
  
        elsif Ekind (Old_P) = E_Package
          and then From_With_Type (Old_P)
*************** package body Sem_Ch8 is
*** 814,820 ****
                 Name (N), Old_P);
           end if;
  
!          --  Set basic attributes to minimize cascaded errors.
  
           Set_Ekind (New_P, E_Package);
           Set_Etype (New_P, Standard_Void_Type);
--- 843,849 ----
                 Name (N), Old_P);
           end if;
  
!          --  Set basic attributes to minimize cascaded errors
  
           Set_Ekind (New_P, E_Package);
           Set_Etype (New_P, Standard_Void_Type);
*************** package body Sem_Ch8 is
*** 988,994 ****
     begin
        if Entity (Sel) = Any_Id then
  
!          --  Selector is undefined on prefix. Error emitted already.
  
           Set_Has_Completion (New_S);
           return;
--- 1017,1023 ----
     begin
        if Entity (Sel) = Any_Id then
  
!          --  Selector is undefined on prefix. Error emitted already
  
           Set_Has_Completion (New_S);
           return;
*************** package body Sem_Ch8 is
*** 1068,1076 ****
     ---------------------------------
  
     procedure Analyze_Subprogram_Renaming (N : Node_Id) is
!       Spec        : constant Node_Id := Specification (N);
!       Save_83     : constant Boolean := Ada_83;
!       Nam         : constant Node_Id := Name (N);
        New_S       : Entity_Id;
        Old_S       : Entity_Id  := Empty;
        Rename_Spec : Entity_Id;
--- 1097,1105 ----
     ---------------------------------
  
     procedure Analyze_Subprogram_Renaming (N : Node_Id) is
!       Spec        : constant Node_Id          := Specification (N);
!       Save_AV     : constant Ada_Version_Type := Ada_Version;
!       Nam         : constant Node_Id          := Name (N);
        New_S       : Entity_Id;
        Old_S       : Entity_Id  := Empty;
        Rename_Spec : Entity_Id;
*************** package body Sem_Ch8 is
*** 1114,1120 ****
  
                 if Orig_Subp = Rename_Spec then
  
!                   --  Circularity detected.
  
                    return Orig_Subp;
  
--- 1143,1149 ----
  
                 if Orig_Subp = Rename_Spec then
  
!                   --  Circularity detected
  
                    return Orig_Subp;
  
*************** package body Sem_Ch8 is
*** 1142,1149 ****
        end if;
  
        --  Check whether this declaration corresponds to the instantiation
!       --  of a formal subprogram. This is indicated by the presence of a
!       --  Corresponding_Spec that is the instantiation declaration.
  
        --  If this is an instantiation, the corresponding actual is frozen
        --  and error messages can be made more precise. If this is a default
--- 1171,1177 ----
        end if;
  
        --  Check whether this declaration corresponds to the instantiation
!       --  of a formal subprogram.
  
        --  If this is an instantiation, the corresponding actual is frozen
        --  and error messages can be made more precise. If this is a default
*************** package body Sem_Ch8 is
*** 1154,1162 ****
        --  is determined in Find_Renamed_Entity. If the entity is an operator,
        --  Find_Renamed_Entity applies additional visibility checks.
  
!       if Present (Corresponding_Spec (N)) then
           Is_Actual := True;
!          Inst_Node := Unit_Declaration_Node (Corresponding_Spec (N));
  
           if Is_Entity_Name (Nam)
             and then Present (Entity (Nam))
--- 1182,1190 ----
        --  is determined in Find_Renamed_Entity. If the entity is an operator,
        --  Find_Renamed_Entity applies additional visibility checks.
  
!       if Present (Corresponding_Formal_Spec (N)) then
           Is_Actual := True;
!          Inst_Node := Unit_Declaration_Node (Corresponding_Formal_Spec (N));
  
           if Is_Entity_Name (Nam)
             and then Present (Entity (Nam))
*************** package body Sem_Ch8 is
*** 1166,1175 ****
              Old_S := Entity (Nam);
              New_S := Analyze_Subprogram_Specification (Spec);
  
!             if Ekind (Entity (Nam)) = E_Operator
!               and then Box_Present (Inst_Node)
!             then
!                Old_S := Find_Renamed_Entity (N, Name (N), New_S, Is_Actual);
              end if;
  
           else
--- 1194,1242 ----
              Old_S := Entity (Nam);
              New_S := Analyze_Subprogram_Specification (Spec);
  
!             --  Operator case
! 
!             if Ekind (Entity (Nam)) = E_Operator then
! 
!                --  Box present
! 
!                if Box_Present (Inst_Node) then
!                   Old_S := Find_Renamed_Entity (N, Name (N), New_S, Is_Actual);
! 
!                --  If there is an immediately visible homonym of the operator
!                --  and the declaration has a default, this is worth a warning
!                --  because the user probably did not intend to get the pre-
!                --  defined operator, visible in the generic declaration.
!                --  To find if there is an intended candidate, analyze the
!                --  renaming again in the current context.
! 
!                elsif Scope (Old_S) = Standard_Standard
!                  and then Present (Default_Name (Inst_Node))
!                then
!                   declare
!                      Decl   : constant Node_Id := New_Copy_Tree (N);
!                      Hidden : Entity_Id;
! 
!                   begin
!                      Set_Entity (Name (Decl), Empty);
!                      Analyze (Name (Decl));
!                      Hidden :=
!                        Find_Renamed_Entity (Decl, Name (Decl), New_S, True);
! 
!                      if Present (Hidden)
!                        and then In_Open_Scopes (Scope (Hidden))
!                        and then Is_Immediately_Visible (Hidden)
!                        and then Comes_From_Source (Hidden)
!                        and then  Hidden /= Old_S
!                      then
!                         Error_Msg_Sloc := Sloc (Hidden);
!                         Error_Msg_N ("?default subprogram is resolved " &
!                                      "in the generic declaration " &
!                                      "('R'M 12.6(17))", N);
!                         Error_Msg_NE ("\?and will not use & #", N, Hidden);
!                      end if;
!                   end;
!                end if;
              end if;
  
           else
*************** package body Sem_Ch8 is
*** 1177,1184 ****
              New_S := Analyze_Subprogram_Specification (Spec);
           end if;
  
-          Set_Corresponding_Spec (N, Empty);
- 
        else
           --  Renamed entity must be analyzed first, to avoid being hidden by
           --  new name (which might be the same in a generic instance).
--- 1244,1249 ----
*************** package body Sem_Ch8 is
*** 1212,1218 ****
  
           Set_Has_Completion (Rename_Spec, Inside_A_Generic);
  
!          if Ada_83 and then Comes_From_Source (N) then
              Error_Msg_N ("(Ada 83) renaming cannot serve as a body", N);
           end if;
  
--- 1277,1283 ----
  
           Set_Has_Completion (Rename_Spec, Inside_A_Generic);
  
!          if Ada_Version = Ada_83 and then Comes_From_Source (N) then
              Error_Msg_N ("(Ada 83) renaming cannot serve as a body", N);
           end if;
  
*************** package body Sem_Ch8 is
*** 1296,1311 ****
        --  between renamed entity and new entity, even though the same circuit
        --  is used.
  
!       Ada_83 := False;
  
        if No (Old_S) then
           Old_S := Find_Renamed_Entity (N, Name (N), New_S, Is_Actual);
        end if;
  
        if Old_S /= Any_Id then
- 
           if Is_Actual
!            and then Box_Present (Inst_Node)
           then
              --  This is an implicit reference to the default actual
  
--- 1361,1375 ----
        --  between renamed entity and new entity, even though the same circuit
        --  is used.
  
!       Ada_Version := Ada_Version_Type'Max (Ada_Version, Ada_95);
  
        if No (Old_S) then
           Old_S := Find_Renamed_Entity (N, Name (N), New_S, Is_Actual);
        end if;
  
        if Old_S /= Any_Id then
           if Is_Actual
!            and then From_Default (N)
           then
              --  This is an implicit reference to the default actual
  
*************** package body Sem_Ch8 is
*** 1370,1376 ****
                 Set_Alias (New_S, Old_S);
              end if;
  
!             --  Note that we do not set Is_Instrinsic_Subprogram if we have
              --  a renaming as body, since the entity in this case is not an
              --  intrinsic (it calls an intrinsic, but we have a real body
              --  for this call, and it is in this body that the required
--- 1434,1440 ----
                 Set_Alias (New_S, Old_S);
              end if;
  
!             --  Note that we do not set Is_Intrinsic_Subprogram if we have
              --  a renaming as body, since the entity in this case is not an
              --  intrinsic (it calls an intrinsic, but we have a real body
              --  for this call, and it is in this body that the required
*************** package body Sem_Ch8 is
*** 1394,1399 ****
--- 1458,1505 ----
                 Set_Has_Delayed_Freeze (New_S, False);
              end if;
  
+             --  If the renaming corresponds to an association for an abstract
+             --  formal subprogram, then various attributes must be set to
+             --  indicate that the renaming is an abstract dispatching operation
+             --  with a controlling type.
+ 
+             if Is_Actual
+               and then Is_Abstract (Corresponding_Formal_Spec (N))
+             then
+                --  Mark the renaming as abstract here, so Find_Dispatching_Type
+                --  see it as corresponding to a generic association for a
+                --  formal abstract subprogram
+ 
+                Set_Is_Abstract (New_S);
+ 
+                declare
+                   New_S_Ctrl_Type : constant Entity_Id :=
+                                       Find_Dispatching_Type (New_S);
+                   Old_S_Ctrl_Type : constant Entity_Id :=
+                                       Find_Dispatching_Type (Old_S);
+ 
+                begin
+                   if Old_S_Ctrl_Type /= New_S_Ctrl_Type then
+                      Error_Msg_NE
+                        ("actual must be dispatching subprogram for type&",
+                         Nam, New_S_Ctrl_Type);
+ 
+                   else
+                      Set_Is_Dispatching_Operation (New_S);
+                      Check_Controlling_Formals (New_S_Ctrl_Type, New_S);
+ 
+                      --  In the case where the actual in the formal subprogram
+                      --  is itself a formal abstract subprogram association,
+                      --  there's no dispatch table component or position to
+                      --  inherit.
+ 
+                      if Present (DTC_Entity (Old_S)) then
+                         Set_DTC_Entity  (New_S, DTC_Entity (Old_S));
+                         Set_DT_Position (New_S, DT_Position (Old_S));
+                      end if;
+                   end if;
+                end;
+             end if;
           end if;
  
           if not Is_Actual
*************** package body Sem_Ch8 is
*** 1422,1429 ****
--- 1528,1539 ----
              Set_Has_Delayed_Freeze (New_S, False);
              Freeze_Before (N, New_S);
  
+             --  An abstract subprogram is only allowed as an actual in the case
+             --  where the formal subprogram is also abstract.
+ 
              if (Ekind (Old_S) = E_Procedure or else Ekind (Old_S) = E_Function)
                and then Is_Abstract (Old_S)
+               and then not Is_Abstract (Corresponding_Formal_Spec (N))
              then
                 Error_Msg_N
                   ("abstract subprogram not allowed as generic actual", Nam);
*************** package body Sem_Ch8 is
*** 1485,1491 ****
           end if;
        end if;
  
!       Ada_83 := Save_83;
     end Analyze_Subprogram_Renaming;
  
     -------------------------
--- 1595,1601 ----
           end if;
        end if;
  
!       Ada_Version := Save_AV;
     end Analyze_Subprogram_Renaming;
  
     -------------------------
*************** package body Sem_Ch8 is
*** 1521,1527 ****
           Error_Msg_N ("use clause not allowed in predefined spec", N);
        end if;
  
!       --  Chain clause to list of use clauses in current scope.
  
        if Nkind (Parent (N)) /= N_Compilation_Unit then
           Chain_Use_Clause (N);
--- 1631,1637 ----
           Error_Msg_N ("use clause not allowed in predefined spec", N);
        end if;
  
!       --  Chain clause to list of use clauses in current scope
  
        if Nkind (Parent (N)) /= N_Compilation_Unit then
           Chain_Use_Clause (N);
*************** package body Sem_Ch8 is
*** 1603,1609 ****
     begin
        Set_Hidden_By_Use_Clause (N, No_Elist);
  
!       --  Chain clause to list of use clauses in current scope.
  
        if Nkind (Parent (N)) /= N_Compilation_Unit then
           Chain_Use_Clause (N);
--- 1713,1719 ----
     begin
        Set_Hidden_By_Use_Clause (N, No_Elist);
  
!       --  Chain clause to list of use clauses in current scope
  
        if Nkind (Parent (N)) /= N_Compilation_Unit then
           Chain_Use_Clause (N);
*************** package body Sem_Ch8 is
*** 1734,1739 ****
--- 1844,1855 ----
        if Form_Num > 2 then
           Error_Msg_N ("too many formals for attribute", N);
  
+       --  Error if the attribute reference has expressions that look
+       --  like formal parameters.
+ 
+       elsif Present (Expressions (Nam)) then
+          Error_Msg_N ("illegal expressions in attribute reference", Nam);
+ 
        elsif
          Aname = Name_Compose      or else
          Aname = Name_Exponent     or else
*************** package body Sem_Ch8 is
*** 1744,1752 ****
          Aname = Name_Val
        then
           if Nkind (N) = N_Subprogram_Renaming_Declaration
!            and then Present (Corresponding_Spec (N))
!            and then Nkind (Unit_Declaration_Node (Corresponding_Spec (N))) =
!                                    N_Formal_Subprogram_Declaration
           then
              Error_Msg_N
                ("generic actual cannot be attribute involving universal type",
--- 1860,1866 ----
          Aname = Name_Val
        then
           if Nkind (N) = N_Subprogram_Renaming_Declaration
!            and then Present (Corresponding_Formal_Spec (N))
           then
              Error_Msg_N
                ("generic actual cannot be attribute involving universal type",
*************** package body Sem_Ch8 is
*** 1846,1851 ****
--- 1960,1970 ----
        Rewrite (N, Body_Node);
        Analyze (N);
  
+       if Is_Compilation_Unit (New_S) then
+          Error_Msg_N
+            ("a library unit can only rename another library unit", N);
+       end if;
+ 
        Set_Etype (New_S, Base_Type (Etype (New_S)));
  
        --  We suppress elaboration warnings for the resulting entity, since
*************** package body Sem_Ch8 is
*** 1869,1877 ****
        Scope_Stack.Table (Scope_Stack.Last).First_Use_Clause := N;
     end Chain_Use_Clause;
  
!    ----------------------------
!    --  Check_Frozen_Renaming --
!    ----------------------------
  
     procedure Check_Frozen_Renaming (N : Node_Id; Subp : Entity_Id) is
        B_Node : Node_Id;
--- 1988,1996 ----
        Scope_Stack.Table (Scope_Stack.Last).First_Use_Clause := N;
     end Chain_Use_Clause;
  
!    ---------------------------
!    -- Check_Frozen_Renaming --
!    ---------------------------
  
     procedure Check_Frozen_Renaming (N : Node_Id; Subp : Entity_Id) is
        B_Node : Node_Id;
*************** package body Sem_Ch8 is
*** 1935,1941 ****
           then
              Par := Nam;
  
!             --  Find root library unit in with_clause.
  
              while Nkind (Par) = N_Expanded_Name loop
                 Par := Prefix (Par);
--- 2054,2060 ----
           then
              Par := Nam;
  
!             --  Find root library unit in with_clause
  
              while Nkind (Par) = N_Expanded_Name loop
                 Par := Prefix (Par);
*************** package body Sem_Ch8 is
*** 1979,1984 ****
--- 2098,2111 ----
        then
           Error_Msg_N ("renamed unit must be a library unit", Name (N));
  
+       --  Entities defined in Standard (operators and boolean literals) cannot
+       --  be renamed as library units.
+ 
+       elsif Scope (Old_E) = Standard_Standard
+         and then Sloc (Old_E) = Standard_Location
+       then
+          Error_Msg_N ("renamed unit must be a library unit", Name (N));
+ 
        elsif Present (Parent_Spec (N))
          and then Nkind (Unit (Parent_Spec (N))) = N_Generic_Package_Declaration
          and then not Is_Child_Unit (Old_E)
*************** package body Sem_Ch8 is
*** 2150,2158 ****
        Elmt      : Elmt_Id;
  
        function Is_Primitive_Operator
!         (Op   : Entity_Id;
!          F    : Entity_Id)
!          return Boolean;
        --  Check whether Op is a primitive operator of a use-visible type
  
        ---------------------------
--- 2277,2284 ----
        Elmt      : Elmt_Id;
  
        function Is_Primitive_Operator
!         (Op : Entity_Id;
!          F  : Entity_Id) return Boolean;
        --  Check whether Op is a primitive operator of a use-visible type
  
        ---------------------------
*************** package body Sem_Ch8 is
*** 2160,2168 ****
        ---------------------------
  
        function Is_Primitive_Operator
!         (Op   : Entity_Id;
!          F    : Entity_Id)
!          return Boolean
        is
           T : constant Entity_Id := Etype (F);
  
--- 2286,2293 ----
        ---------------------------
  
        function Is_Primitive_Operator
!         (Op : Entity_Id;
!          F  : Entity_Id) return Boolean
        is
           T : constant Entity_Id := Etype (F);
  
*************** package body Sem_Ch8 is
*** 2332,2338 ****
        Msg  : Boolean;
  
        Inst : Entity_Id := Empty;
!       --  Enclosing instance, if any.
  
        Homonyms : Entity_Id;
        --  Saves start of homonym chain
--- 2457,2463 ----
        Msg  : Boolean;
  
        Inst : Entity_Id := Empty;
!       --  Enclosing instance, if any
  
        Homonyms : Entity_Id;
        --  Saves start of homonym chain
*************** package body Sem_Ch8 is
*** 2343,2348 ****
--- 2468,2478 ----
        --  user point of view to warrant an error message of "not visible"
        --  rather than undefined.
  
+       Nvis_Is_Private_Subprg : Boolean := False;
+       --  Ada 2005 (AI-262): Set True to indicate that a form of Beaujolais
+       --  effect concerning library subprograms has been detected. Used to
+       --  generate the precise error message.
+ 
        function From_Actual_Package (E : Entity_Id) return Boolean;
        --  Returns true if the entity is declared in a package that is
        --  an actual for a formal package of the current instance. Such an
*************** package body Sem_Ch8 is
*** 2503,2512 ****
        -------------------
  
        procedure Nvis_Messages is
!          Ent    : Entity_Id;
!          Hidden : Boolean := False;
  
        begin
           Undefined (Nvis => True);
  
           if Msg then
--- 2633,2678 ----
        -------------------
  
        procedure Nvis_Messages is
!          Comp_Unit : Node_Id;
!          Ent       : Entity_Id;
!          Hidden    : Boolean := False;
!          Item      : Node_Id;
  
        begin
+          --  Ada 2005 (AI-262): Generate a precise error concerning the
+          --  Beaujolais effect that was previously detected
+ 
+          if Nvis_Is_Private_Subprg then
+ 
+             pragma Assert (Nkind (E2) = N_Defining_Identifier
+                            and then Ekind (E2) = E_Function
+                            and then Scope (E2) = Standard_Standard
+                            and then Has_Private_With (E2));
+ 
+             --  Find the sloc corresponding to the private with'ed unit
+ 
+             Comp_Unit      := Cunit (Current_Sem_Unit);
+             Item           := First (Context_Items (Comp_Unit));
+             Error_Msg_Sloc := No_Location;
+ 
+             while Present (Item) loop
+                if Nkind (Item) = N_With_Clause
+                  and then Private_Present (Item)
+                  and then Entity (Name (Item)) = E2
+                then
+                   Error_Msg_Sloc := Sloc (Item);
+                   exit;
+                end if;
+ 
+                Next (Item);
+             end loop;
+ 
+             pragma Assert (Error_Msg_Sloc /= No_Location);
+ 
+             Error_Msg_N ("(Ada 2005): hidden by private with clause #", N);
+             return;
+          end if;
+ 
           Undefined (Nvis => True);
  
           if Msg then
*************** package body Sem_Ch8 is
*** 2628,2633 ****
--- 2794,2800 ----
                 if Is_Enumeration_Type (Case_Typ)
                   and then Case_Typ /= Standard_Character
                   and then Case_Typ /= Standard_Wide_Character
+                  and then Case_Typ /= Standard_Wide_Wide_Character
                 then
                    Lit := First_Literal (Case_Typ);
                    Get_Name_String (Chars (Lit));
*************** package body Sem_Ch8 is
*** 2886,2891 ****
--- 3053,3081 ----
              elsif Is_Potentially_Use_Visible (E2) then
                 Only_One_Visible := False;
                 All_Overloadable := All_Overloadable and Is_Overloadable (E2);
+ 
+             --  Ada 2005 (AI-262): Protect against a form of Beujolais effect
+             --  that can occurr in private_with clauses. Example:
+ 
+             --    with A;
+             --    private with B;              package A is
+             --    package C is                   function B return Integer;
+             --      use A;                     end A;
+             --      V1 : Integer := B;
+             --    private                      function B return Integer;
+             --      V2 : Integer := B;
+             --    end C;
+ 
+             --  V1 resolves to A.B, but V2 resolves to library unit B
+ 
+             elsif Ekind (E2) = E_Function
+               and then Scope (E2) = Standard_Standard
+               and then Has_Private_With (E2)
+             then
+                Only_One_Visible       := False;
+                All_Overloadable       := False;
+                Nvis_Is_Private_Subprg := True;
+                exit;
              end if;
  
              E2 := Homonym (E2);
*************** package body Sem_Ch8 is
*** 2914,2920 ****
              if In_Instance then
                 Inst := Current_Scope;
  
!                --  Find current instance.
  
                 while Present (Inst)
                   and then Inst /= Standard_Standard
--- 3104,3110 ----
              if In_Instance then
                 Inst := Current_Scope;
  
!                --  Find current instance
  
                 while Present (Inst)
                   and then Inst /= Standard_Standard
*************** package body Sem_Ch8 is
*** 3052,3058 ****
           then
              Collect_Interps (N);
  
!             --  If no homonyms were visible, the entity is unambiguous.
  
              if not Is_Overloaded (N) then
                 Generate_Reference (E, N);
--- 3242,3248 ----
           then
              Collect_Interps (N);
  
!             --  If no homonyms were visible, the entity is unambiguous
  
              if not Is_Overloaded (N) then
                 Generate_Reference (E, N);
*************** package body Sem_Ch8 is
*** 3080,3086 ****
                    Set_Referenced (E, R);
                 end;
  
!             --  Normal case, not a label. Generate reference.
  
              else
                 Generate_Reference (E, N);
--- 3270,3276 ----
                    Set_Referenced (E, R);
                 end;
  
!             --  Normal case, not a label. Generate reference
  
              else
                 Generate_Reference (E, N);
*************** package body Sem_Ch8 is
*** 3210,3225 ****
           --  the formals, which is declared in the enclosing wrapper package.
  
           P_Name := Scope (P_Name);
-          Id := Current_Entity (Selector);
  
           while Present (Id) loop
!             exit when  Scope (Id) = P_Name;
              Id := Homonym (Id);
           end loop;
        end if;
  
!       if No (Id) or else Chars (Id) /=  Chars (Selector) then
! 
           Set_Etype (N, Any_Type);
  
           --  If we are looking for an entity defined in System, try to
--- 3400,3414 ----
           --  the formals, which is declared in the enclosing wrapper package.
  
           P_Name := Scope (P_Name);
  
+          Id := Current_Entity (Selector);
           while Present (Id) loop
!             exit when Scope (Id) = P_Name;
              Id := Homonym (Id);
           end loop;
        end if;
  
!       if No (Id) or else Chars (Id) /= Chars (Selector) then
           Set_Etype (N, Any_Type);
  
           --  If we are looking for an entity defined in System, try to
*************** package body Sem_Ch8 is
*** 3341,3347 ****
  
                    Error_Msg_NE ("& not declared in&", N, Selector);
  
!                   --  Check for misspelling of some entity in prefix.
  
                    Id := First_Entity (P_Name);
                    Get_Name_String (Chars (Selector));
--- 3530,3536 ----
  
                    Error_Msg_NE ("& not declared in&", N, Selector);
  
!                   --  Check for misspelling of some entity in prefix
  
                    Id := First_Entity (P_Name);
                    Get_Name_String (Chars (Selector));
*************** package body Sem_Ch8 is
*** 3392,3404 ****
           Set_Chars (Selector, Chars (Id));
        end if;
  
!       --  Ada0Y (AI-50217): Check usage of entities in limited withed units
  
        if Ekind (P_Name) = E_Package
          and then From_With_Type (P_Name)
        then
           if From_With_Type (Id)
!            or else (Ekind (Id) = E_Package and then From_With_Type (Id))
           then
              null;
           else
--- 3581,3594 ----
           Set_Chars (Selector, Chars (Id));
        end if;
  
!       --  Ada 2005 (AI-50217): Check usage of entities in limited withed units
  
        if Ekind (P_Name) = E_Package
          and then From_With_Type (P_Name)
        then
           if From_With_Type (Id)
!            or else Is_Type (Id)
!            or else Ekind (Id) = E_Package
           then
              null;
           else
*************** package body Sem_Ch8 is
*** 3457,3463 ****
  
           begin
              while Present (H) loop
!                if Scope (H) = Scope (Id) then
                    Collect_Interps (N);
                    exit;
                 end if;
--- 3647,3657 ----
  
           begin
              while Present (H) loop
!                if Scope (H) = Scope (Id)
!                  and then
!                    (not Is_Hidden (H)
!                       or else Is_Immediately_Visible (H))
!                then
                    Collect_Interps (N);
                    exit;
                 end if;
*************** package body Sem_Ch8 is
*** 3950,3956 ****
  
              if Is_Overloaded (P) then
  
!                --  The prefix must resolve to a unique enclosing construct.
  
                 declare
                    Found : Boolean := False;
--- 4144,4150 ----
  
              if Is_Overloaded (P) then
  
!                --  The prefix must resolve to a unique enclosing construct
  
                 declare
                    Found : Boolean := False;
*************** package body Sem_Ch8 is
*** 4177,4186 ****
                 Set_Etype (N, C);
              end if;
  
!          --  Base attribute, allowed in Ada 95 mode only
  
           elsif Attribute_Name (N) = Name_Base then
!             if Ada_83 and then Comes_From_Source (N) then
                 Error_Msg_N
                   ("(Ada 83) Base attribute not allowed in subtype mark", N);
  
--- 4371,4380 ----
                 Set_Etype (N, C);
              end if;
  
!          --  Base attribute, not allowed in Ada 83
  
           elsif Attribute_Name (N) = Name_Base then
!             if Ada_Version = Ada_83 and then Comes_From_Source (N) then
                 Error_Msg_N
                   ("(Ada 83) Base attribute not allowed in subtype mark", N);
  
*************** package body Sem_Ch8 is
*** 4188,4199 ****
                 Find_Type (Prefix (N));
                 Typ := Entity (Prefix (N));
  
!                if Ada_95
                   and then not Is_Scalar_Type (Typ)
                   and then not Is_Generic_Type (Typ)
                 then
                    Error_Msg_N
!                     ("prefix of Base attribute must be scalar type", Typ);
  
                 elsif Sloc (Typ) = Standard_Location
                   and then Base_Type (Typ) = Typ
--- 4382,4394 ----
                 Find_Type (Prefix (N));
                 Typ := Entity (Prefix (N));
  
!                if Ada_Version >= Ada_95
                   and then not Is_Scalar_Type (Typ)
                   and then not Is_Generic_Type (Typ)
                 then
                    Error_Msg_N
!                     ("prefix of Base attribute must be scalar type",
!                       Prefix (N));
  
                 elsif Sloc (Typ) = Standard_Location
                   and then Base_Type (Typ) = Typ
*************** package body Sem_Ch8 is
*** 4342,4348 ****
        loop
           if Is_Character_Type (Id)
             and then (Root_Type (Id) = Standard_Character
!                        or else Root_Type (Id) = Standard_Wide_Character)
             and then Id = Base_Type (Id)
           then
              --  We replace the node with the literal itself, resolve as a
--- 4537,4544 ----
        loop
           if Is_Character_Type (Id)
             and then (Root_Type (Id) = Standard_Character
!                        or else Root_Type (Id) = Standard_Wide_Character
!                        or else Root_Type (Id) = Standard_Wide_Wide_Character)
             and then Id = Base_Type (Id)
           then
              --  We replace the node with the literal itself, resolve as a
*************** package body Sem_Ch8 is
*** 4370,4375 ****
--- 4566,4595 ----
        return Found;
     end Has_Implicit_Character_Literal;
  
+    ----------------------
+    -- Has_Private_With --
+    ----------------------
+ 
+    function Has_Private_With (E : Entity_Id) return Boolean is
+       Comp_Unit : constant Node_Id := Cunit (Current_Sem_Unit);
+       Item      : Node_Id;
+ 
+    begin
+       Item := First (Context_Items (Comp_Unit));
+       while Present (Item) loop
+          if Nkind (Item) = N_With_Clause
+            and then Private_Present (Item)
+            and then Entity (Name (Item)) = E
+          then
+             return True;
+          end if;
+ 
+          Next (Item);
+       end loop;
+ 
+       return False;
+    end Has_Private_With;
+ 
     ---------------------------
     -- Has_Implicit_Operator --
     ---------------------------
*************** package body Sem_Ch8 is
*** 4461,4467 ****
                 Next_Entity (Id);
              end loop;
  
!          --  Equality: look for any non-limited type. Result is Boolean.
  
           when Name_Op_Eq | Name_Op_Ne =>
  
--- 4681,4687 ----
                 Next_Entity (Id);
              end loop;
  
!          --  Equality: look for any non-limited type (result is Boolean)
  
           when Name_Op_Eq | Name_Op_Ne =>
  
*************** package body Sem_Ch8 is
*** 4478,4484 ****
                 Next_Entity (Id);
              end loop;
  
!          --  Comparison operators: scalar type, or array of scalar.
  
           when Name_Op_Lt | Name_Op_Le | Name_Op_Gt | Name_Op_Ge =>
  
--- 4698,4704 ----
                 Next_Entity (Id);
              end loop;
  
!          --  Comparison operators: scalar type, or array of scalar
  
           when Name_Op_Lt | Name_Op_Le | Name_Op_Gt | Name_Op_Ge =>
  
*************** package body Sem_Ch8 is
*** 4641,4647 ****
     -- Install_Use_Clauses --
     -------------------------
  
!    procedure Install_Use_Clauses (Clause : Node_Id) is
        U  : Node_Id := Clause;
        P  : Node_Id;
        Id : Entity_Id;
--- 4861,4870 ----
     -- Install_Use_Clauses --
     -------------------------
  
!    procedure Install_Use_Clauses
!      (Clause             : Node_Id;
!       Force_Installation : Boolean := False)
!    is
        U  : Node_Id := Clause;
        P  : Node_Id;
        Id : Entity_Id;
*************** package body Sem_Ch8 is
*** 4667,4674 ****
                    then
                       Set_Redundant_Use (P, True);
  
!                   else
                       Use_One_Package (Id, U);
                    end if;
                 end if;
  
--- 4890,4898 ----
                    then
                       Set_Redundant_Use (P, True);
  
!                   elsif Force_Installation or else Applicable_Use (P) then
                       Use_One_Package (Id, U);
+ 
                    end if;
                 end if;
  
*************** package body Sem_Ch8 is
*** 4717,4726 ****
     -- Is_Appropriate_For_Record --
     -------------------------------
  
!    function Is_Appropriate_For_Record
!      (T    : Entity_Id)
!       return Boolean
!    is
        function Has_Components (T1 : Entity_Id) return Boolean;
        --  Determine if given type has components (i.e. is either a record
        --  type or a type that has discriminants).
--- 4941,4948 ----
     -- Is_Appropriate_For_Record --
     -------------------------------
  
!    function Is_Appropriate_For_Record (T : Entity_Id) return Boolean is
! 
        function Has_Components (T1 : Entity_Id) return Boolean;
        --  Determine if given type has components (i.e. is either a record
        --  type or a type that has discriminants).
*************** package body Sem_Ch8 is
*** 4955,4960 ****
--- 5177,5186 ----
        --  Scan context clause of compilation unit to find a with_clause
        --  for System.
  
+       -----------------
+       -- Find_System --
+       -----------------
+ 
        function Find_System (C_Unit : Node_Id) return Entity_Id is
           With_Clause : Node_Id;
  
*************** package body Sem_Ch8 is
*** 4978,4984 ****
     --  Start of processing for Present_System_Aux
  
     begin
!       --  The child unit may have been loaded and analyzed already.
  
        if Present (System_Aux_Id) then
           return True;
--- 5204,5210 ----
     --  Start of processing for Present_System_Aux
  
     begin
!       --  The child unit may have been loaded and analyzed already
  
        if Present (System_Aux_Id) then
           return True;
*************** package body Sem_Ch8 is
*** 5096,5102 ****
        SS_Last   : constant Int := Scope_Stack.Last;
  
     begin
!       --  Restore visibility of previous scope stack, if any.
  
        for J in reverse 0 .. Scope_Stack.Last loop
           exit when  Scope_Stack.Table (J).Entity = Standard_Standard
--- 5322,5328 ----
        SS_Last   : constant Int := Scope_Stack.Last;
  
     begin
!       --  Restore visibility of previous scope stack, if any
  
        for J in reverse 0 .. Scope_Stack.Last loop
           exit when  Scope_Stack.Table (J).Entity = Standard_Standard
*************** package body Sem_Ch8 is
*** 5291,5296 ****
--- 5517,5523 ----
        Prev             : Entity_Id;
        Current_Instance : Entity_Id := Empty;
        Real_P           : Entity_Id;
+       Private_With_OK  : Boolean   := False;
  
     begin
        if Ekind (P) /= E_Package then
*************** package body Sem_Ch8 is
*** 5299,5311 ****
  
        Set_In_Use (P);
  
!       --  Ada0Y (AI-50217): Check restriction.
  
        if From_With_Type (P) then
           Error_Msg_N ("limited withed package cannot appear in use clause", N);
        end if;
  
!       --  Find enclosing instance, if any.
  
        if In_Instance then
           Current_Instance := Current_Scope;
--- 5526,5538 ----
  
        Set_In_Use (P);
  
!       --  Ada 2005 (AI-50217): Check restriction
  
        if From_With_Type (P) then
           Error_Msg_N ("limited withed package cannot appear in use clause", N);
        end if;
  
!       --  Find enclosing instance, if any
  
        if In_Instance then
           Current_Instance := Current_Scope;
*************** package body Sem_Ch8 is
*** 5331,5342 ****
           Real_P := P;
        end if;
  
        --  Loop through entities in one package making them potentially
        --  use-visible.
  
        Id := First_Entity (P);
        while Present (Id)
!         and then Id /= First_Private_Entity (P)
        loop
           Prev := Current_Entity (Id);
  
--- 5558,5582 ----
           Real_P := P;
        end if;
  
+       --  Ada 2005 (AI-262): Check the use_clause of a private withed package
+       --  found in the private part of a package specification
+ 
+       if In_Private_Part (Current_Scope)
+         and then Has_Private_With (P)
+         and then Is_Child_Unit (Current_Scope)
+         and then Is_Child_Unit (P)
+         and then Is_Ancestor_Package (Scope (Current_Scope), P)
+       then
+          Private_With_OK := True;
+       end if;
+ 
        --  Loop through entities in one package making them potentially
        --  use-visible.
  
        Id := First_Entity (P);
        while Present (Id)
!         and then (Id /= First_Private_Entity (P)
!                     or else Private_With_OK) -- Ada 2005 (AI-262)
        loop
           Prev := Current_Entity (Id);
  
*************** package body Sem_Ch8 is
*** 5366,5372 ****
--- 5606,5618 ----
                 --  instance is declared in the wrapper package but will not be
                 --  hidden by a use-visible entity.
  
+                --  If Id is called Standard, the predefined package with the
+                --  same name is in the homonym chain. It has to be ignored
+                --  because it has no defined scope (being the only entity in
+                --  the system with this mandated behavior).
+ 
                 elsif not Is_Hidden (Id)
+                  and then Present (Scope (Prev))
                   and then not Is_Wrapper_Package (Scope (Prev))
                   and then Scope_Depth (Scope (Prev)) <
                            Scope_Depth (Current_Instance)
*************** package body Sem_Ch8 is
*** 5401,5407 ****
              Prev := Homonym (Prev);
           end loop;
  
!          --  On exit, we know entity is not hidden, unless it is private.
  
           if not Is_Hidden (Id)
             and then ((not Is_Child_Unit (Id))
--- 5647,5653 ----
              Prev := Homonym (Prev);
           end loop;
  
!          --  On exit, we know entity is not hidden, unless it is private
  
           if not Is_Hidden (Id)
             and then ((not Is_Child_Unit (Id))
diff -Nrcpad gcc-3.4.3/gcc/ada/sem_ch8.ads gcc-4.0.0/gcc/ada/sem_ch8.ads
*** gcc-3.4.3/gcc/ada/sem_ch8.ads	Mon Oct 27 14:27:17 2003
--- gcc-4.0.0/gcc/ada/sem_ch8.ads	Fri Jun 25 16:39:31 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Sem_Ch8 is
*** 65,72 ****
     --  specifications, more specialized procedures are invoked.
  
     procedure End_Use_Clauses (Clause : Node_Id);
!    --  Invoked on scope exit, to undo the effect of local use clauses. U is
!    --  the first Use clause of a scope being exited. This can be the current
     --  scope, or some enclosing scopes when building a clean environment to
     --  compile an instance body for inlining.
  
--- 65,72 ----
     --  specifications, more specialized procedures are invoked.
  
     procedure End_Use_Clauses (Clause : Node_Id);
!    --  Invoked on scope exit, to undo the effect of local use clauses. Clause
!    --  is the first use-clause of a scope being exited. This can be the current
     --  scope, or some enclosing scopes when building a clean environment to
     --  compile an instance body for inlining.
  
*************** package Sem_Ch8 is
*** 108,118 ****
     --  Initializes data structures used for visibility analysis. Must be
     --  called before analyzing each new main source program.
  
!    procedure Install_Use_Clauses (Clause : Node_Id);
!    --  applies the use clauses appearing in a given declarative part,
     --  when the corresponding scope has been placed back on the scope
     --  stack after unstacking to compile a different context (subunit or
!    --  parent of generic body).
  
     function In_Open_Scopes (S : Entity_Id) return Boolean;
     --  S is the entity of a scope. This function determines if this scope
--- 108,122 ----
     --  Initializes data structures used for visibility analysis. Must be
     --  called before analyzing each new main source program.
  
!    procedure Install_Use_Clauses
!      (Clause             : Node_Id;
!       Force_Installation : Boolean := False);
!    --  Applies the use clauses appearing in a given declarative part,
     --  when the corresponding scope has been placed back on the scope
     --  stack after unstacking to compile a different context (subunit or
!    --  parent of generic body). Force_Installation is used when called from
!    --  Analyze_Subunit.Re_Install_Use_Clauses to insure that, after the
!    --  analysis of the subunit, the parent's environment is again identical.
  
     function In_Open_Scopes (S : Entity_Id) return Boolean;
     --  S is the entity of a scope. This function determines if this scope
diff -Nrcpad gcc-3.4.3/gcc/ada/sem_ch9.adb gcc-4.0.0/gcc/ada/sem_ch9.adb
*** gcc-3.4.3/gcc/ada/sem_ch9.adb	Fri Nov 14 10:24:43 2003
--- gcc-4.0.0/gcc/ada/sem_ch9.adb	Wed Dec  8 11:47:21 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Nlists;   use Nlists;
*** 36,41 ****
--- 36,42 ----
  with Nmake;    use Nmake;
  with Opt;      use Opt;
  with Restrict; use Restrict;
+ with Rident;   use Rident;
  with Rtsfind;  use Rtsfind;
  with Sem;      use Sem;
  with Sem_Ch3;  use Sem_Ch3;
*************** package body Sem_Ch9 is
*** 60,67 ****
     -- Local Subprograms --
     -----------------------
  
!    procedure Check_Max_Entries (Def : Node_Id; R : Restriction_Parameter_Id);
!    --  Given either a protected definition or a task definition in Def, check
     --  the corresponding restriction parameter identifier R, and if it is set,
     --  count the entries (checking the static requirement), and compare with
     --  the given maximum.
--- 61,68 ----
     -- Local Subprograms --
     -----------------------
  
!    procedure Check_Max_Entries (D : Node_Id; R : All_Parameter_Restrictions);
!    --  Given either a protected definition or a task definition in D, check
     --  the corresponding restriction parameter identifier R, and if it is set,
     --  count the entries (checking the static requirement), and compare with
     --  the given maximum.
*************** package body Sem_Ch9 is
*** 133,139 ****
        Formals   : constant List_Id   := Parameter_Specifications (N);
        Index     : constant Node_Id   := Entry_Index (N);
        Stats     : constant Node_Id   := Handled_Statement_Sequence (N);
!       Ityp      : Entity_Id;
        Entry_Nam : Entity_Id;
        E         : Entity_Id;
        Kind      : Entity_Kind;
--- 134,140 ----
        Formals   : constant List_Id   := Parameter_Specifications (N);
        Index     : constant Node_Id   := Entry_Index (N);
        Stats     : constant Node_Id   := Handled_Statement_Sequence (N);
!       Accept_Id : Entity_Id;
        Entry_Nam : Entity_Id;
        E         : Entity_Id;
        Kind      : Entity_Kind;
*************** package body Sem_Ch9 is
*** 232,254 ****
  
        --  In order to process the parameters, we create a defining
        --  identifier that can be used as the name of the scope. The
!       --  name of the accept statement itself is not a defining identifier.
  
        if Present (Index) then
!          Ityp := New_Internal_Entity
             (E_Entry_Family, Current_Scope, Sloc (N), 'E');
        else
!          Ityp := New_Internal_Entity
             (E_Entry, Current_Scope, Sloc (N), 'E');
        end if;
  
!       Set_Etype          (Ityp, Standard_Void_Type);
!       Set_Accept_Address (Ityp, New_Elmt_List);
  
        if Present (Formals) then
!          New_Scope (Ityp);
           Process_Formals (Formals, N);
!          Create_Extra_Formals (Ityp);
           End_Scope;
        end if;
  
--- 233,257 ----
  
        --  In order to process the parameters, we create a defining
        --  identifier that can be used as the name of the scope. The
!       --  name of the accept statement itself is not a defining identifier,
!       --  and we cannot use its name directly because the task may have
!       --  any number of accept statements for the same entry.
  
        if Present (Index) then
!          Accept_Id := New_Internal_Entity
             (E_Entry_Family, Current_Scope, Sloc (N), 'E');
        else
!          Accept_Id := New_Internal_Entity
             (E_Entry, Current_Scope, Sloc (N), 'E');
        end if;
  
!       Set_Etype          (Accept_Id, Standard_Void_Type);
!       Set_Accept_Address (Accept_Id, New_Elmt_List);
  
        if Present (Formals) then
!          New_Scope (Accept_Id);
           Process_Formals (Formals, N);
!          Create_Extra_Formals (Accept_Id);
           End_Scope;
        end if;
  
*************** package body Sem_Ch9 is
*** 256,269 ****
        --  need default expression functions. This is really more like a
        --  body entity than a spec entity anyway.
  
!       Set_Default_Expressions_Processed (Ityp);
  
        E := First_Entity (Etype (Task_Nam));
- 
        while Present (E) loop
           if Chars (E) = Chars (Nam)
!            and then (Ekind (E) = Ekind (Ityp))
!            and then Type_Conformant (Ityp, E)
           then
              Entry_Nam := E;
              exit;
--- 259,271 ----
        --  need default expression functions. This is really more like a
        --  body entity than a spec entity anyway.
  
!       Set_Default_Expressions_Processed (Accept_Id);
  
        E := First_Entity (Etype (Task_Nam));
        while Present (E) loop
           if Chars (E) = Chars (Nam)
!            and then (Ekind (E) = Ekind (Accept_Id))
!            and then Type_Conformant (Accept_Id, E)
           then
              Entry_Nam := E;
              exit;
*************** package body Sem_Ch9 is
*** 305,312 ****
           end;
        end if;
  
!       Set_Convention (Ityp, Convention (Entry_Nam));
!       Check_Fully_Conformant (Ityp, Entry_Nam, N);
  
        for J in reverse 0 .. Scope_Stack.Last loop
           exit when Task_Nam = Scope_Stack.Table (J).Entity;
--- 307,314 ----
           end;
        end if;
  
!       Set_Convention (Accept_Id, Convention (Entry_Nam));
!       Check_Fully_Conformant (Accept_Id, Entry_Nam, N);
  
        for J in reverse 0 .. Scope_Stack.Last loop
           exit when Task_Nam = Scope_Stack.Table (J).Entity;
*************** package body Sem_Ch9 is
*** 390,402 ****
  
        --  Set Never_Set_In_Source and clear Is_True_Constant/Current_Value
        --  fields on all entry formals (this loop ignores all other entities).
  
        E := First_Entity (Entry_Nam);
        while Present (E) loop
           if Is_Formal (E) then
!             Set_Never_Set_In_Source (E, True);
!             Set_Is_True_Constant    (E, False);
!             Set_Current_Value       (E, Empty);
           end if;
  
           Next_Entity (E);
--- 392,409 ----
  
        --  Set Never_Set_In_Source and clear Is_True_Constant/Current_Value
        --  fields on all entry formals (this loop ignores all other entities).
+       --  Reset Set_Referenced and Has_Pragma_Unreferenced as well, so that
+       --  we can post accurate warnings on each accept statement for the same
+       --  entry.
  
        E := First_Entity (Entry_Nam);
        while Present (E) loop
           if Is_Formal (E) then
!             Set_Never_Set_In_Source     (E, True);
!             Set_Is_True_Constant        (E, False);
!             Set_Current_Value           (E, Empty);
!             Set_Referenced              (E, False);
!             Set_Has_Pragma_Unreferenced (E, False);
           end if;
  
           Next_Entity (E);
*************** package body Sem_Ch9 is
*** 483,488 ****
--- 490,502 ----
              Pre_Analyze_And_Resolve (Expr);
           end if;
  
+          if Nkind (Delay_Statement (N)) = N_Delay_Until_Statement and then
+             not Is_RTE (Base_Type (Etype (Expr)), RO_CA_Time)     and then
+             not Is_RTE (Base_Type (Etype (Expr)), RO_RT_Time)
+          then
+             Error_Msg_N ("expect Time types for `DELAY UNTIL`", Expr);
+          end if;
+ 
           Check_Restriction (No_Fixed_Point, Expr);
        else
           Analyze (Delay_Statement (N));
*************** package body Sem_Ch9 is
*** 1064,1070 ****
        --  with interrupt handlers. Note that we need to analyze the protected
        --  definition to set Has_Entries and such.
  
!       if (Abort_Allowed or else Restrictions (No_Entry_Queue) = False
             or else Number_Entries (T) > 1)
          and then
            (Has_Entries (T)
--- 1078,1084 ----
        --  with interrupt handlers. Note that we need to analyze the protected
        --  definition to set Has_Entries and such.
  
!       if (Abort_Allowed or else Restriction_Active (No_Entry_Queue) = False
             or else Number_Entries (T) > 1)
          and then
            (Has_Entries (T)
*************** package body Sem_Ch9 is
*** 1116,1122 ****
        Outer_Ent  : Entity_Id;
  
     begin
!       Check_Restriction (No_Requeue, N);
        Check_Unreachable_Code (N);
        Tasking_Used := True;
  
--- 1130,1136 ----
        Outer_Ent  : Entity_Id;
  
     begin
!       Check_Restriction (No_Requeue_Statements, N);
        Check_Unreachable_Code (N);
        Tasking_Used := True;
  
*************** package body Sem_Ch9 is
*** 1320,1326 ****
  
     begin
        Check_Restriction (No_Select_Statements, N);
-       Check_Restriction (Max_Select_Alternatives, N);
        Tasking_Used := True;
  
        Alt := First (Alts);
--- 1334,1339 ----
*************** package body Sem_Ch9 is
*** 1403,1409 ****
           Next (Alt);
        end loop;
  
!       Check_Restriction (Max_Select_Alternatives, Alt_Count, N);
        Check_Potentially_Blocking_Operation (N);
  
        if Terminate_Present and Delay_Present then
--- 1416,1422 ----
           Next (Alt);
        end loop;
  
!       Check_Restriction (Max_Select_Alternatives, N, Alt_Count);
        Check_Potentially_Blocking_Operation (N);
  
        if Terminate_Present and Delay_Present then
*************** package body Sem_Ch9 is
*** 1532,1538 ****
        --  expanded twice, with disastrous result.
  
        Analyze_Task_Type (N);
- 
     end Analyze_Single_Task;
  
     -----------------------
--- 1545,1550 ----
*************** package body Sem_Ch9 is
*** 1689,1696 ****
        Def_Id : constant Entity_Id := Defining_Identifier (N);
  
     begin
-       Tasking_Used := True;
        Check_Restriction (No_Tasking, N);
        T := Find_Type_Name (N);
        Generate_Definition (T);
  
--- 1701,1708 ----
        Def_Id : constant Entity_Id := Defining_Identifier (N);
  
     begin
        Check_Restriction (No_Tasking, N);
+       Tasking_Used := True;
        T := Find_Type_Name (N);
        Generate_Definition (T);
  
*************** package body Sem_Ch9 is
*** 1709,1715 ****
        New_Scope (T);
  
        if Present (Discriminant_Specifications (N)) then
!          if Ada_83 and then Comes_From_Source (N) then
              Error_Msg_N ("(Ada 83) task discriminant not allowed!", N);
           end if;
  
--- 1721,1727 ----
        New_Scope (T);
  
        if Present (Discriminant_Specifications (N)) then
!          if Ada_Version = Ada_83 and then Comes_From_Source (N) then
              Error_Msg_N ("(Ada 83) task discriminant not allowed!", N);
           end if;
  
*************** package body Sem_Ch9 is
*** 1806,1812 ****
     -- Check_Max_Entries --
     -----------------------
  
!    procedure Check_Max_Entries (Def : Node_Id; R : Restriction_Parameter_Id) is
        Ecount : Uint;
  
        procedure Count (L : List_Id);
--- 1818,1824 ----
     -- Check_Max_Entries --
     -----------------------
  
!    procedure Check_Max_Entries (D : Node_Id; R : All_Parameter_Restrictions) is
        Ecount : Uint;
  
        procedure Count (L : List_Id);
*************** package body Sem_Ch9 is
*** 1854,1864 ****
                          end if;
                       end;
  
!                   --  If entry family with non-static bounds, give error msg
  
!                   elsif Restriction_Parameters (R) /= No_Uint then
!                      Error_Msg_N
!                        ("static subtype required by Restriction pragma", DSD);
                    end if;
                 end;
              end if;
--- 1866,1886 ----
                          end if;
                       end;
  
!                   --  Entry family with non-static bounds
  
!                   else
!                      --  If restriction is set, then this is an error
! 
!                      if Restrictions.Set (R) then
!                         Error_Msg_N
!                           ("static subtype required by Restriction pragma",
!                            DSD);
! 
!                      --  Otherwise we record an unknown count restriction
! 
!                      else
!                         Check_Restriction (R, D);
!                      end if;
                    end if;
                 end;
              end if;
*************** package body Sem_Ch9 is
*** 1871,1881 ****
  
     begin
        Ecount := Uint_0;
!       Count (Visible_Declarations (Def));
!       Count (Private_Declarations (Def));
  
        if Ecount > 0 then
!          Check_Restriction (R, Ecount, Def);
        end if;
     end Check_Max_Entries;
  
--- 1893,1903 ----
  
     begin
        Ecount := Uint_0;
!       Count (Visible_Declarations (D));
!       Count (Private_Declarations (D));
  
        if Ecount > 0 then
!          Check_Restriction (R, D, Ecount);
        end if;
     end Check_Max_Entries;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/sem_disp.adb gcc-4.0.0/gcc/ada/sem_disp.adb
*** gcc-3.4.3/gcc/ada/sem_disp.adb	Tue Oct 21 13:42:20 2003
--- gcc-4.0.0/gcc/ada/sem_disp.adb	Thu Feb 10 13:50:45 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Exp_Tss;  use Exp_Tss;
*** 34,47 ****
--- 34,51 ----
  with Errout;   use Errout;
  with Hostparm; use Hostparm;
  with Nlists;   use Nlists;
+ with Nmake;    use Nmake;
  with Opt;      use Opt;
  with Output;   use Output;
  with Sem;      use Sem;
  with Sem_Ch6;  use Sem_Ch6;
  with Sem_Eval; use Sem_Eval;
+ with Sem_Type; use Sem_Type;
  with Sem_Util; use Sem_Util;
  with Snames;   use Snames;
+ with Stand;    use Stand;
  with Sinfo;    use Sinfo;
+ with Tbuild;   use Tbuild;
  with Uintp;    use Uintp;
  
  package body Sem_Disp is
*************** package body Sem_Disp is
*** 65,85 ****
  
     function Check_Controlling_Type
       (T    : Entity_Id;
!       Subp : Entity_Id)
!       return Entity_Id;
!       --  T is the type of a formal parameter of subp. Returns the tagged
!       --  if the parameter can be a controlling argument, empty otherwise
  
!    --------------------------------
!    --  Add_Dispatching_Operation --
!    --------------------------------
  
     procedure Add_Dispatching_Operation
       (Tagged_Type : Entity_Id;
        New_Op      : Entity_Id)
     is
        List : constant Elist_Id := Primitive_Operations (Tagged_Type);
- 
     begin
        Append_Elmt (New_Op, List);
     end Add_Dispatching_Operation;
--- 69,90 ----
  
     function Check_Controlling_Type
       (T    : Entity_Id;
!       Subp : Entity_Id) return Entity_Id;
!    --  T is the tagged type of a formal parameter or the result of Subp.
!    --  If the subprogram has a controlling parameter or result that matches
!    --  the type, then returns the tagged type of that parameter or result
!    --  (returning the designated tagged type in the case of an access
!    --  parameter); otherwise returns empty.
  
!    -------------------------------
!    -- Add_Dispatching_Operation --
!    -------------------------------
  
     procedure Add_Dispatching_Operation
       (Tagged_Type : Entity_Id;
        New_Op      : Entity_Id)
     is
        List : constant Elist_Id := Primitive_Operations (Tagged_Type);
     begin
        Append_Elmt (New_Op, List);
     end Add_Dispatching_Operation;
*************** package body Sem_Disp is
*** 151,157 ****
             and then Ekind (Etype (Formal)) = E_Anonymous_Access_Type
           then
              Error_Msg_N
!               ("Access parameter of a remote subprogram must be controlling",
                  Formal);
           end if;
  
--- 156,163 ----
             and then Ekind (Etype (Formal)) = E_Anonymous_Access_Type
           then
              Error_Msg_N
!               ("access parameter of remote object primitive"
!                & " must be controlling",
                  Formal);
           end if;
  
*************** package body Sem_Disp is
*** 199,206 ****
  
     function Check_Controlling_Type
       (T    : Entity_Id;
!       Subp : Entity_Id)
!       return Entity_Id
     is
        Tagged_Type : Entity_Id := Empty;
  
--- 205,211 ----
  
     function Check_Controlling_Type
       (T    : Entity_Id;
!       Subp : Entity_Id) return Entity_Id
     is
        Tagged_Type : Entity_Id := Empty;
  
*************** package body Sem_Disp is
*** 229,241 ****
           return Empty;
  
        --  The dispatching type and the primitive operation must be defined
!       --  in the same scope except for internal operations.
  
!       elsif (Scope (Subp) = Scope (Tagged_Type)
!               or else Is_Internal (Subp))
!         and then
!             (not Is_Generic_Type (Tagged_Type)
!               or else not Comes_From_Source (Subp))
        then
           return Tagged_Type;
  
--- 234,253 ----
           return Empty;
  
        --  The dispatching type and the primitive operation must be defined
!       --  in the same scope, except in the case of internal operations and
!       --  formal abstract subprograms.
  
!       elsif ((Scope (Subp) = Scope (Tagged_Type) or else Is_Internal (Subp))
!                and then (not Is_Generic_Type (Tagged_Type)
!                           or else not Comes_From_Source (Subp)))
!         or else
!           (Is_Formal_Subprogram (Subp) and then Is_Abstract (Subp))
!         or else
!           (Nkind (Parent (Parent (Subp))) = N_Subprogram_Renaming_Declaration
!             and then
!               Present (Corresponding_Formal_Spec (Parent (Parent (Subp))))
!             and then
!               Is_Abstract (Subp))
        then
           return Tagged_Type;
  
*************** package body Sem_Disp is
*** 249,257 ****
     ----------------------------
  
     procedure Check_Dispatching_Call (N : Node_Id) is
!       Actual  : Node_Id;
!       Control : Node_Id := Empty;
!       Func    : Entity_Id;
  
        procedure Check_Dispatching_Context;
        --  If the call is tag-indeterminate and the entity being called is
--- 261,274 ----
     ----------------------------
  
     procedure Check_Dispatching_Call (N : Node_Id) is
!       Actual                 : Node_Id;
!       Formal                 : Entity_Id;
!       Control                : Node_Id := Empty;
!       Func                   : Entity_Id;
!       Subp_Entity            : Entity_Id;
!       Loc                    : constant Source_Ptr := Sloc (N);
!       Indeterm_Ancestor_Call : Boolean := False;
!       Indeterm_Ctrl_Type     : Entity_Id;
  
        procedure Check_Dispatching_Context;
        --  If the call is tag-indeterminate and the entity being called is
*************** package body Sem_Disp is
*** 263,283 ****
        -------------------------------
  
        procedure Check_Dispatching_Context is
!          Func : constant Entity_Id := Entity (Name (N));
           Par  : Node_Id;
  
        begin
!          if Is_Abstract (Func)
             and then No (Controlling_Argument (N))
           then
!             if Present (Alias (Func))
!               and then not Is_Abstract (Alias (Func))
!               and then No (DTC_Entity (Func))
              then
                 --  Private overriding of inherited abstract operation,
                 --  call is legal.
  
!                Set_Entity (Name (N), Alias (Func));
                 return;
  
              else
--- 280,300 ----
        -------------------------------
  
        procedure Check_Dispatching_Context is
!          Subp : constant Entity_Id := Entity (Name (N));
           Par  : Node_Id;
  
        begin
!          if Is_Abstract (Subp)
             and then No (Controlling_Argument (N))
           then
!             if Present (Alias (Subp))
!               and then not Is_Abstract (Alias (Subp))
!               and then No (DTC_Entity (Subp))
              then
                 --  Private overriding of inherited abstract operation,
                 --  call is legal.
  
!                Set_Entity (Name (N), Alias (Subp));
                 return;
  
              else
*************** package body Sem_Disp is
*** 290,296 ****
                        Nkind (Par) = N_Assignment_Statement     or else
                        Nkind (Par) = N_Op_Eq                    or else
                        Nkind (Par) = N_Op_Ne)
!                     and then Is_Tagged_Type (Etype (Func))
                    then
                       return;
  
--- 307,313 ----
                        Nkind (Par) = N_Assignment_Statement     or else
                        Nkind (Par) = N_Op_Eq                    or else
                        Nkind (Par) = N_Op_Ne)
!                     and then Is_Tagged_Type (Etype (Subp))
                    then
                       return;
  
*************** package body Sem_Disp is
*** 300,307 ****
                       Par := Parent (Par);
  
                    else
!                      Error_Msg_N
!                        ("call to abstract function must be dispatching", N);
                       return;
                    end if;
                 end loop;
--- 317,336 ----
                       Par := Parent (Par);
  
                    else
!                      if Ekind (Subp) = E_Function then
!                         Error_Msg_N
!                           ("call to abstract function must be dispatching", N);
! 
!                      --  This error can occur for a procedure in the case of a
!                      --  call to an abstract formal procedure with a statically
!                      --  tagged operand.
! 
!                      else
!                         Error_Msg_N
!                           ("call to abstract procedure must be dispatching",
!                            N);
!                      end if;
! 
                       return;
                    end if;
                 end loop;
*************** package body Sem_Disp is
*** 317,328 ****
--- 346,398 ----
        if Present (Parameter_Associations (N)) then
           Actual := First_Actual (N);
  
+          Subp_Entity := Entity (Name (N));
+          Formal := First_Formal (Subp_Entity);
+ 
           while Present (Actual) loop
              Control := Find_Controlling_Arg (Actual);
              exit when Present (Control);
+ 
+             --  Check for the case where the actual is a tag-indeterminate call
+             --  whose result type is different than the tagged type associated
+             --  with the containing call, but is an ancestor of the type.
+ 
+             if Is_Controlling_Formal (Formal)
+               and then Is_Tag_Indeterminate (Actual)
+               and then Base_Type (Etype (Actual)) /= Base_Type (Etype (Formal))
+               and then Is_Ancestor (Etype (Actual), Etype (Formal))
+             then
+                Indeterm_Ancestor_Call := True;
+                Indeterm_Ctrl_Type     := Etype (Formal);
+             end if;
+ 
              Next_Actual (Actual);
+             Next_Formal (Formal);
           end loop;
  
+          --  If the call doesn't have a controlling actual but does have
+          --  an indeterminate actual that requires dispatching treatment,
+          --  then an object is needed that will serve as the controlling
+          --  argument for a dispatching call on the indeterminate actual.
+          --  This can only occur in the unusual situation of a default
+          --  actual given by a tag-indeterminate call and where the type
+          --  of the call is an ancestor of the type associated with a
+          --  containing call to an inherited operation (see AI-239).
+          --  Rather than create an object of the tagged type, which would
+          --  be problematic for various reasons (default initialization,
+          --  discriminants), the tag of the containing call's associated
+          --  tagged type is directly used to control the dispatching.
+ 
+          if not Present (Control)
+            and then Indeterm_Ancestor_Call
+          then
+             Control :=
+               Make_Attribute_Reference (Loc,
+                 Prefix         => New_Occurrence_Of (Indeterm_Ctrl_Type, Loc),
+                 Attribute_Name => Name_Tag);
+             Analyze (Control);
+          end if;
+ 
           if Present (Control) then
  
              --  Verify that no controlling arguments are statically tagged
*************** package body Sem_Disp is
*** 339,348 ****
                 if Actual /= Control then
  
                    if not Is_Controlling_Actual (Actual) then
!                      null; -- can be anything
  
                    elsif Is_Dynamically_Tagged (Actual) then
!                      null; --  valid parameter
  
                    elsif Is_Tag_Indeterminate (Actual) then
  
--- 409,418 ----
                 if Actual /= Control then
  
                    if not Is_Controlling_Actual (Actual) then
!                      null; -- Can be anything
  
                    elsif Is_Dynamically_Tagged (Actual) then
!                      null; -- Valid parameter
  
                    elsif Is_Tag_Indeterminate (Actual) then
  
*************** package body Sem_Disp is
*** 370,377 ****
              Set_Controlling_Argument (N, Control);
  
           else
!             --  The call is not dispatching, check that there isn't any
!             --  tag indeterminate abstract call left
  
              Actual := First_Actual (N);
  
--- 440,447 ----
              Set_Controlling_Argument (N, Control);
  
           else
!             --  The call is not dispatching, so check that there aren't any
!             --  tag-indeterminate abstract calls left.
  
              Actual := First_Actual (N);
  
*************** package body Sem_Disp is
*** 423,428 ****
--- 493,519 ----
        Has_Dispatching_Parent : Boolean := False;
        Body_Is_Last_Primitive : Boolean := False;
  
+       function Is_Visibly_Controlled (T : Entity_Id) return Boolean;
+       --  Check whether T is derived from a visibly controlled type.
+       --  This is true if the root type is declared in Ada.Finalization.
+       --  If T is derived instead from a private type whose full view
+       --  is controlled, an explicit Initialize/Adjust/Finalize subprogram
+       --  does not override the inherited one.
+ 
+       ---------------------------
+       -- Is_Visibly_Controlled --
+       ---------------------------
+ 
+       function Is_Visibly_Controlled (T : Entity_Id) return Boolean is
+          Root : constant Entity_Id := Root_Type (T);
+       begin
+          return Chars (Scope (Root)) = Name_Finalization
+            and then Chars (Scope (Scope (Root))) = Name_Ada
+            and then Scope (Scope (Scope (Root))) = Standard_Standard;
+       end Is_Visibly_Controlled;
+ 
+    --  Start of processing for Check_Dispatching_Operation
+ 
     begin
        if Ekind (Subp) /= E_Procedure and then Ekind (Subp) /= E_Function then
           return;
*************** package body Sem_Disp is
*** 595,602 ****
  
        if Present (Old_Subp) then
           Check_Subtype_Conformant (Subp, Old_Subp);
!          Override_Dispatching_Operation (Tagged_Type, Old_Subp, Subp);
!          Set_Is_Overriding_Operation (Subp);
        else
           Add_Dispatching_Operation (Tagged_Type, Subp);
        end if;
--- 686,704 ----
  
        if Present (Old_Subp) then
           Check_Subtype_Conformant (Subp, Old_Subp);
!          if (Chars (Subp) = Name_Initialize
!            or else Chars (Subp) = Name_Adjust
!            or else Chars (Subp) = Name_Finalize)
!            and then Is_Controlled (Tagged_Type)
!            and then not Is_Visibly_Controlled (Tagged_Type)
!          then
!             Set_Is_Overriding_Operation (Subp, False);
!             Error_Msg_NE
!               ("operation does not override inherited&?", Subp, Subp);
!          else
!             Override_Dispatching_Operation (Tagged_Type, Old_Subp, Subp);
!             Set_Is_Overriding_Operation (Subp);
!          end if;
        else
           Add_Dispatching_Operation (Tagged_Type, Subp);
        end if;
*************** package body Sem_Disp is
*** 1128,1134 ****
        --  calls and would have to undo any expansion to an indirect call.
  
        if not Java_VM then
!          Expand_Dispatch_Call (Call_Node);
        end if;
     end Propagate_Tag;
  
--- 1230,1236 ----
        --  calls and would have to undo any expansion to an indirect call.
  
        if not Java_VM then
!          Expand_Dispatching_Call (Call_Node);
        end if;
     end Propagate_Tag;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/sem_dist.adb gcc-4.0.0/gcc/ada/sem_dist.adb
*** gcc-3.4.3/gcc/ada/sem_dist.adb	Tue Jan 13 11:51:33 2004
--- gcc-4.0.0/gcc/ada/sem_dist.adb	Fri Nov 19 10:56:15 2004
*************** with Snames;   use Snames;
*** 43,49 ****
  with Stand;    use Stand;
  with Stringt;  use Stringt;
  with Tbuild;   use Tbuild;
- with Uname;    use Uname;
  
  package body Sem_Dist is
  
--- 43,48 ----
*************** package body Sem_Dist is
*** 105,110 ****
--- 104,158 ----
        end if;
     end Add_Stub_Constructs;
  
+    ---------------------------------------
+    -- Build_RAS_Primitive_Specification --
+    ---------------------------------------
+ 
+    function Build_RAS_Primitive_Specification
+      (Subp_Spec          : Node_Id;
+       Remote_Object_Type : Node_Id) return Node_Id
+    is
+       Loc : constant Source_Ptr := Sloc (Subp_Spec);
+ 
+       Primitive_Spec : constant Node_Id :=
+                          Copy_Specification (Loc,
+                            Spec     => Subp_Spec,
+                            New_Name => Name_Call);
+ 
+       Subtype_Mark_For_Self : Node_Id;
+ 
+    begin
+       if No (Parameter_Specifications (Primitive_Spec)) then
+          Set_Parameter_Specifications (Primitive_Spec, New_List);
+       end if;
+ 
+       if Nkind (Remote_Object_Type) in N_Entity then
+          Subtype_Mark_For_Self :=
+            New_Occurrence_Of (Remote_Object_Type, Loc);
+       else
+          Subtype_Mark_For_Self := Remote_Object_Type;
+       end if;
+ 
+       Prepend_To (
+         Parameter_Specifications (Primitive_Spec),
+         Make_Parameter_Specification (Loc,
+           Defining_Identifier =>
+             Make_Defining_Identifier (Loc, Name_uS),
+           Parameter_Type      =>
+             Make_Access_Definition (Loc,
+               Subtype_Mark =>
+                 Subtype_Mark_For_Self)));
+ 
+       --  Trick later semantic analysis into considering this
+       --  operation as a primitive (dispatching) operation of
+       --  tagged type Obj_Type.
+ 
+       Set_Comes_From_Source (
+         Defining_Unit_Name (Primitive_Spec), True);
+ 
+       return Primitive_Spec;
+    end Build_RAS_Primitive_Specification;
+ 
     -------------------------
     -- Full_Qualified_Name --
     -------------------------
*************** package body Sem_Dist is
*** 151,197 ****
        return End_String;
     end Full_Qualified_Name;
  
-    -----------------------
-    -- Get_Subprogram_Id --
-    -----------------------
- 
-    function Get_Subprogram_Id (E : Entity_Id) return Int is
-       Current_Declaration : Node_Id;
-       Result              : Int := 0;
- 
-    begin
-       pragma Assert
-         (Is_Remote_Call_Interface (Scope (E))
-            and then
-              (Nkind (Parent (E)) = N_Procedure_Specification
-                 or else
-               Nkind (Parent (E)) = N_Function_Specification));
- 
-       Current_Declaration :=
-         First (Visible_Declarations
-           (Package_Specification_Of_Scope (Scope (E))));
- 
-       while Current_Declaration /= Empty loop
-          if Nkind (Current_Declaration) = N_Subprogram_Declaration
-            and then Comes_From_Source (Current_Declaration)
-          then
-             if Defining_Unit_Name
-                  (Specification (Current_Declaration)) = E
-             then
-                return Result;
-             end if;
- 
-             Result := Result + 1;
-          end if;
- 
-          Next (Current_Declaration);
-       end loop;
- 
-       --  Error if we do not find it
- 
-       raise Program_Error;
-    end Get_Subprogram_Id;
- 
     ------------------------
     -- Is_All_Remote_Call --
     ------------------------
--- 199,204 ----
*************** package body Sem_Dist is
*** 282,299 ****
        end if;
  
        --  Get and store the String_Id corresponding to the name of the
!       --  library unit whose Partition_Id is needed
! 
!       Get_Unit_Name_String (Get_Unit_Name (Unit_Declaration_Node (Ety)));
! 
!       --  Remove seven last character ("(spec)" or " (body)").
!       --  (this is a bit nasty, should have interface for this ???)
! 
!       Name_Len := Name_Len - 7;
  
!       Start_String;
!       Store_String_Chars (Name_Buffer (1 .. Name_Len));
!       Prefix_String := End_String;
  
        --  Build the function call which will replace the attribute
  
--- 289,298 ----
        end if;
  
        --  Get and store the String_Id corresponding to the name of the
!       --  library unit whose Partition_Id is needed.
  
!       Get_Library_Unit_Name_String (Unit_Declaration_Node (Ety));
!       Prefix_String := String_From_Name_Buffer;
  
        --  Build the function call which will replace the attribute
  
*************** package body Sem_Dist is
*** 332,342 ****
        Remote_Subp_Decl      : Node_Id;
        RS_Pkg_Specif         : Node_Id;
        RS_Pkg_E              : Entity_Id;
!       RAS_Type              : Entity_Id;
        Async_E               : Entity_Id;
!       Subp_Id               : Int;
        Attribute_Subp        : Entity_Id;
-       Parameter             : Node_Id;
  
     begin
        --  Check if we have to expand the access attribute
--- 331,340 ----
        Remote_Subp_Decl      : Node_Id;
        RS_Pkg_Specif         : Node_Id;
        RS_Pkg_E              : Entity_Id;
!       RAS_Type              : Entity_Id := New_Type;
        Async_E               : Entity_Id;
!       All_Calls_Remote_E    : Entity_Id;
        Attribute_Subp        : Entity_Id;
  
     begin
        --  Check if we have to expand the access attribute
*************** package body Sem_Dist is
*** 345,368 ****
  
        if not Expander_Active then
           return;
  
!       elsif Ekind (New_Type) = E_Record_Type then
!          RAS_Type := New_Type;
! 
!       else
!          --  If the remote type has not been constructed yet, create
!          --  it and its attributes now.
! 
!          Attribute_Subp := TSS (New_Type, TSS_RAS_Access);
! 
!          if No (Attribute_Subp) then
!             Add_RAST_Features (Parent (New_Type));
!          end if;
! 
!          RAS_Type := Equivalent_Type (New_Type);
        end if;
  
        Attribute_Subp := TSS (RAS_Type, TSS_RAS_Access);
        Remote_Subp_Decl := Unit_Declaration_Node (Remote_Subp);
  
        if Nkind (Remote_Subp_Decl) = N_Subprogram_Body then
--- 343,356 ----
  
        if not Expander_Active then
           return;
+       end if;
  
!       if Ekind (RAS_Type) /= E_Record_Type then
!          RAS_Type := Equivalent_Type (RAS_Type);
        end if;
  
        Attribute_Subp := TSS (RAS_Type, TSS_RAS_Access);
+       pragma Assert (Present (Attribute_Subp));
        Remote_Subp_Decl := Unit_Declaration_Node (Remote_Subp);
  
        if Nkind (Remote_Subp_Decl) = N_Subprogram_Body then
*************** package body Sem_Dist is
*** 373,399 ****
        RS_Pkg_Specif := Parent (Remote_Subp_Decl);
        RS_Pkg_E := Defining_Entity (RS_Pkg_Specif);
  
!       Subp_Id := Get_Subprogram_Id (Remote_Subp);
! 
!       if Ekind (Remote_Subp) = E_Procedure
!         and then Is_Asynchronous (Remote_Subp)
!       then
!          Async_E := Standard_True;
!       else
!          Async_E := Standard_False;
!       end if;
  
!       Parameter := New_Occurrence_Of (RTE (RE_Null_Address), Loc);
  
        Tick_Access_Conv_Call :=
          Make_Function_Call (Loc,
            Name => New_Occurrence_Of (Attribute_Subp, Loc),
            Parameter_Associations =>
              New_List (
-               Parameter,
                Make_String_Literal (Loc, Full_Qualified_Name (RS_Pkg_E)),
!               Make_Integer_Literal (Loc, Subp_Id),
!               New_Occurrence_Of (Async_E, Loc)));
  
        Rewrite (N, Tick_Access_Conv_Call);
        Analyze_And_Resolve (N, RAS_Type);
--- 361,382 ----
        RS_Pkg_Specif := Parent (Remote_Subp_Decl);
        RS_Pkg_E := Defining_Entity (RS_Pkg_Specif);
  
!       Async_E :=
!         Boolean_Literals (Ekind (Remote_Subp) = E_Procedure
!                             and then Is_Asynchronous (Remote_Subp));
  
!       All_Calls_Remote_E :=
!         Boolean_Literals (Has_All_Calls_Remote (RS_Pkg_E));
  
        Tick_Access_Conv_Call :=
          Make_Function_Call (Loc,
            Name => New_Occurrence_Of (Attribute_Subp, Loc),
            Parameter_Associations =>
              New_List (
                Make_String_Literal (Loc, Full_Qualified_Name (RS_Pkg_E)),
!               Build_Subprogram_Id (Loc, Remote_Subp),
!               New_Occurrence_Of (Async_E, Loc),
!               New_Occurrence_Of (All_Calls_Remote_E, Loc)));
  
        Rewrite (N, Tick_Access_Conv_Call);
        Analyze_And_Resolve (N, RAS_Type);
*************** package body Sem_Dist is
*** 404,481 ****
     ------------------------------------
  
     procedure Process_Remote_AST_Declaration (N : Node_Id) is
!       Loc           : constant Source_Ptr := Sloc (N);
!       User_Type     : constant Node_Id := Defining_Identifier (N);
!       Fat_Type      : constant Entity_Id :=
                          Make_Defining_Identifier
                            (Loc, Chars (User_Type));
!       New_Type_Decl : Node_Id;
  
     begin
-       --  We add a record type declaration for the equivalent fat pointer type
  
!       New_Type_Decl :=
          Make_Full_Type_Declaration (Loc,
!           Defining_Identifier => Fat_Type,
!           Type_Definition =>
              Make_Record_Definition (Loc,
!               Component_List =>
!                 Make_Component_List (Loc,
!                   Component_Items => New_List (
  
!                     Make_Component_Declaration (Loc,
!                       Defining_Identifier =>
!                         Make_Defining_Identifier (Loc,
!                           Chars => Name_Ras),
!                       Component_Definition =>
!                         Make_Component_Definition (Loc,
!                           Aliased_Present    => False,
!                           Subtype_Indication =>
!                             New_Occurrence_Of (RTE (RE_Unsigned_64), Loc))),
  
!                     Make_Component_Declaration (Loc,
!                       Defining_Identifier =>
!                         Make_Defining_Identifier (Loc,
!                           Chars => Name_Origin),
!                       Component_Definition =>
!                         Make_Component_Definition (Loc,
!                           Aliased_Present    => False,
!                           Subtype_Indication =>
!                             New_Reference_To (Standard_Integer, Loc))),
  
!                     Make_Component_Declaration (Loc,
!                       Defining_Identifier =>
!                         Make_Defining_Identifier (Loc,
!                           Chars => Name_Receiver),
!                       Component_Definition =>
!                         Make_Component_Definition (Loc,
!                           Aliased_Present    => False,
!                           Subtype_Indication =>
!                             New_Reference_To (RTE (RE_Unsigned_64), Loc))),
  
!                     Make_Component_Declaration (Loc,
!                       Defining_Identifier =>
!                         Make_Defining_Identifier (Loc,
!                           Chars => Name_Subp_Id),
!                       Component_Definition =>
!                         Make_Component_Definition (Loc,
!                           Aliased_Present    => False,
!                           Subtype_Indication =>
!                             New_Reference_To (Standard_Natural, Loc))),
  
!                     Make_Component_Declaration (Loc,
!                       Defining_Identifier =>
!                         Make_Defining_Identifier (Loc,
!                           Chars => Name_Async),
!                       Component_Definition =>
!                         Make_Component_Definition (Loc,
!                           Aliased_Present    => False,
!                           Subtype_Indication =>
!                             New_Reference_To (Standard_Boolean, Loc)))))));
  
!       Insert_After (N, New_Type_Decl);
        Set_Equivalent_Type (User_Type, Fat_Type);
        Set_Corresponding_Remote_Type (Fat_Type, User_Type);
  
        --  The reason we suppress the initialization procedure is that we know
        --  that no initialization is required (even if Initialize_Scalars mode
--- 387,548 ----
     ------------------------------------
  
     procedure Process_Remote_AST_Declaration (N : Node_Id) is
!       Loc            : constant Source_Ptr := Sloc (N);
!       User_Type      : constant Node_Id := Defining_Identifier (N);
!       Scop           : constant Entity_Id := Scope (User_Type);
!       Is_RCI         : constant Boolean :=
!         Is_Remote_Call_Interface (Scop);
!       Is_RT          : constant Boolean :=
!         Is_Remote_Types (Scop);
!       Type_Def       : constant Node_Id := Type_Definition (N);
! 
!       Parameter      : Node_Id;
!       Is_Degenerate  : Boolean;
!       --  True iff this RAS has an access formal parameter (see
!       --  Exp_Dist.Add_RAS_Dereference_TSS for details).
! 
!       Subpkg         : constant Entity_Id :=
!                          Make_Defining_Identifier
!                            (Loc, New_Internal_Name ('S'));
!       Subpkg_Decl    : Node_Id;
!       Vis_Decls      : constant List_Id := New_List;
!       Priv_Decls     : constant List_Id := New_List;
! 
!       Obj_Type       : constant Entity_Id :=
!                          Make_Defining_Identifier
!                            (Loc, New_External_Name (
!                                    Chars (User_Type), 'R'));
! 
! 
!       Full_Obj_Type  : constant Entity_Id :=
!                          Make_Defining_Identifier
!                            (Loc, Chars (Obj_Type));
! 
!       RACW_Type      : constant Entity_Id :=
!                          Make_Defining_Identifier
!                            (Loc, New_External_Name (
!                                    Chars (User_Type), 'P'));
! 
!       Fat_Type       : constant Entity_Id :=
                          Make_Defining_Identifier
                            (Loc, Chars (User_Type));
!       Fat_Type_Decl  : Node_Id;
  
     begin
  
!       --  The tagged private type, primitive operation and RACW
!       --  type associated with a RAS need to all be declared in
!       --  a subpackage of the one that contains the RAS declaration,
!       --  because the primitive of the object type, and the associated
!       --  primitive of the stub type, need to be dispatching operations
!       --  of these types, and the profile of the RAS might contain
!       --  tagged types declared in the same scope.
! 
!       Append_To (Vis_Decls,
!         Make_Private_Type_Declaration (Loc,
!           Defining_Identifier => Obj_Type,
!           Abstract_Present => True,
!           Tagged_Present   => True,
!           Limited_Present  => True));
! 
!       Append_To (Priv_Decls,
          Make_Full_Type_Declaration (Loc,
!           Defining_Identifier =>
!             Full_Obj_Type,
!           Type_Definition     =>
              Make_Record_Definition (Loc,
!               Abstract_Present => True,
!               Tagged_Present   => True,
!               Limited_Present  => True,
!               Null_Present     => True,
!               Component_List   => Empty)));
  
!       Is_Degenerate := False;
!       Parameter := First (Parameter_Specifications (Type_Def));
!       Parameters : while Present (Parameter) loop
!          if Nkind (Parameter_Type (Parameter)) = N_Access_Definition then
!             Error_Msg_N ("formal parameter& has anonymous access type?",
!               Defining_Identifier (Parameter));
!             Is_Degenerate := True;
!             exit Parameters;
!          end if;
!          Next (Parameter);
!       end loop Parameters;
  
!       if Is_Degenerate then
!          Error_Msg_NE (
!            "remote access-to-subprogram type& can only be null?",
!            Defining_Identifier (Parameter), User_Type);
!          --  The only legal value for a RAS with a formal parameter of an
!          --  anonymous access type is null, because it cannot be
!          --  subtype-Conformant with any legal remote subprogram declaration.
!          --  In this case, we cannot generate a corresponding primitive
!          --  operation.
  
!       else
!          Append_To (Vis_Decls,
!            Make_Abstract_Subprogram_Declaration (Loc,
!              Specification => Build_RAS_Primitive_Specification (
!                Subp_Spec          => Type_Def,
!                Remote_Object_Type => Obj_Type)));
!       end if;
  
!       Append_To (Vis_Decls,
!         Make_Full_Type_Declaration (Loc,
!           Defining_Identifier => RACW_Type,
!           Type_Definition     =>
!             Make_Access_To_Object_Definition (Loc,
!               All_Present => True,
!               Subtype_Indication =>
!                 Make_Attribute_Reference (Loc,
!                   Prefix =>
!                     New_Occurrence_Of (Obj_Type, Loc),
!                   Attribute_Name =>
!                     Name_Class))));
!       Set_Is_Remote_Call_Interface (RACW_Type, Is_RCI);
!       Set_Is_Remote_Types (RACW_Type, Is_RT);
  
!       Subpkg_Decl :=
!         Make_Package_Declaration (Loc,
!           Make_Package_Specification (Loc,
!             Defining_Unit_Name =>
!               Subpkg,
!             Visible_Declarations =>
!               Vis_Decls,
!             Private_Declarations =>
!               Priv_Decls,
!             End_Label =>
!               New_Occurrence_Of (Subpkg, Loc)));
!       Set_Is_Remote_Call_Interface (Subpkg, Is_RCI);
!       Set_Is_Remote_Types (Subpkg, Is_RT);
!       Insert_After_And_Analyze (N, Subpkg_Decl);
  
!       --  Many parts of the analyzer and expander expect
!       --  that the fat pointer type used to implement remote
!       --  access to subprogram types be a record.
!       --  Note: The structure of this type must be kept consistent
!       --  with the code generated by Remote_AST_Null_Value for the
!       --  corresponding 'null' expression.
! 
!       Fat_Type_Decl := Make_Full_Type_Declaration (Loc,
!         Defining_Identifier => Fat_Type,
!         Type_Definition     =>
!           Make_Record_Definition (Loc,
!             Component_List =>
!               Make_Component_List (Loc,
!                 Component_Items => New_List (
!                   Make_Component_Declaration (Loc,
!                     Defining_Identifier =>
!                       Make_Defining_Identifier (Loc, Name_Ras),
!                     Component_Definition =>
!                       Make_Component_Definition (Loc,
!                         Aliased_Present     =>
!                           False,
!                         Subtype_Indication  =>
!                           New_Occurrence_Of (RACW_Type, Loc)))))));
        Set_Equivalent_Type (User_Type, Fat_Type);
        Set_Corresponding_Remote_Type (Fat_Type, User_Type);
+       Insert_After_And_Analyze (Subpkg_Decl, Fat_Type_Decl);
  
        --  The reason we suppress the initialization procedure is that we know
        --  that no initialization is required (even if Initialize_Scalars mode
*************** package body Sem_Dist is
*** 497,505 ****
        Loc             : constant Source_Ptr := Sloc (Pref);
        Call_Node       : Node_Id;
        New_Type        : constant Entity_Id := Etype (Pref);
-       RAS             : constant Entity_Id :=
-                           Corresponding_Remote_Type (New_Type);
-       RAS_Decl        : constant Node_Id   := Parent (RAS);
        Explicit_Deref  : constant Node_Id   := Parent (Pref);
        Deref_Subp_Call : constant Node_Id   := Parent (Explicit_Deref);
        Deref_Proc      : Entity_Id;
--- 564,569 ----
*************** package body Sem_Dist is
*** 531,546 ****
           return;
        end if;
  
-       Deref_Proc := TSS (New_Type, TSS_RAS_Dereference);
- 
        if not Expander_Active then
           return;
- 
-       elsif No (Deref_Proc) then
-          Add_RAST_Features (RAS_Decl);
-          Deref_Proc := TSS (New_Type, TSS_RAS_Dereference);
        end if;
  
        if Ekind (Deref_Proc) = E_Function then
           Call_Node :=
             Make_Function_Call (Loc,
--- 595,607 ----
           return;
        end if;
  
        if not Expander_Active then
           return;
        end if;
  
+       Deref_Proc := TSS (New_Type, TSS_RAS_Dereference);
+       pragma Assert (Present (Deref_Proc));
+ 
        if Ekind (Deref_Proc) = E_Function then
           Call_Node :=
             Make_Function_Call (Loc,
*************** package body Sem_Dist is
*** 562,569 ****
     -- Remote_AST_E_Dereference --
     ------------------------------
  
!    function Remote_AST_E_Dereference (P : Node_Id) return Boolean
!    is
        ET : constant Entity_Id  := Etype (P);
  
     begin
--- 623,629 ----
     -- Remote_AST_E_Dereference --
     ------------------------------
  
!    function Remote_AST_E_Dereference (P : Node_Id) return Boolean is
        ET : constant Entity_Id  := Etype (P);
  
     begin
*************** package body Sem_Dist is
*** 590,601 ****
     -- Remote_AST_I_Dereference --
     ------------------------------
  
!    function Remote_AST_I_Dereference (P : Node_Id) return Boolean
!    is
        ET     : constant Entity_Id  := Etype (P);
        Deref  : Node_Id;
-    begin
  
        if Comes_From_Source (P)
          and then (Is_Remote_Call_Interface (ET)
                     or else Is_Remote_Types (ET))
--- 650,660 ----
     -- Remote_AST_I_Dereference --
     ------------------------------
  
!    function Remote_AST_I_Dereference (P : Node_Id) return Boolean is
        ET     : constant Entity_Id  := Etype (P);
        Deref  : Node_Id;
  
+    begin
        if Comes_From_Source (P)
          and then (Is_Remote_Call_Interface (ET)
                     or else Is_Remote_Types (ET))
*************** package body Sem_Dist is
*** 619,627 ****
     ---------------------------
  
     function Remote_AST_Null_Value
!      (N    : Node_Id;
!       Typ  : Entity_Id)
!       return Boolean
     is
        Loc         : constant Source_Ptr := Sloc (N);
        Target_Type : Entity_Id;
--- 678,685 ----
     ---------------------------
  
     function Remote_AST_Null_Value
!      (N   : Node_Id;
!       Typ : Entity_Id) return Boolean
     is
        Loc         : constant Source_Ptr := Sloc (N);
        Target_Type : Entity_Id;
*************** package body Sem_Dist is
*** 659,670 ****
  
        Rewrite (N,
          Make_Aggregate (Loc,
!           Expressions => New_List (
!             Make_Integer_Literal (Loc, 0),                  -- Ras
!             Make_Integer_Literal (Loc, 0),                  -- Origin
!             Make_Integer_Literal (Loc, 0),                  -- Receiver
!             Make_Integer_Literal (Loc, 0),                  -- Subp_Id
!             New_Occurrence_Of (Standard_False, Loc))));     -- Asyn
        Analyze_And_Resolve (N, Target_Type);
        return True;
     end Remote_AST_Null_Value;
--- 717,728 ----
  
        Rewrite (N,
          Make_Aggregate (Loc,
!           Component_Associations => New_List (
!             Make_Component_Association (Loc,
!               Choices => New_List (
!                 Make_Identifier (Loc, Name_Ras)),
!               Expression =>
!                 Make_Null (Loc)))));
        Analyze_And_Resolve (N, Target_Type);
        return True;
     end Remote_AST_Null_Value;
diff -Nrcpad gcc-3.4.3/gcc/ada/sem_dist.ads gcc-4.0.0/gcc/ada/sem_dist.ads
*** gcc-3.4.3/gcc/ada/sem_dist.ads	Thu Apr 24 17:54:17 2003
--- gcc-4.0.0/gcc/ada/sem_dist.ads	Mon Sep 13 10:18:41 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2000 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Sem_Dist is
*** 36,41 ****
--- 36,48 ----
     --  caller stubs, expansion takes place directly in the specification and
     --  no additional compilation unit is created.
  
+    function Build_RAS_Primitive_Specification
+      (Subp_Spec          : Node_Id;
+       Remote_Object_Type : Node_Id) return Node_Id;
+    --  Build a subprogram specification for the primitive operation of the
+    --  Remote_Object_Type used to implement a remote access-to-subprogram
+    --  type whose parameter profile is given by specification Subp_Spec.
+ 
     function Is_All_Remote_Call (N : Node_Id) return Boolean;
     --  Check whether a function or procedure call should be expanded into
     --  a remote call, because the entity is declared in a package decl that
*************** package Sem_Dist is
*** 75,92 ****
     --  the previous function.
  
     function Remote_AST_Null_Value
!      (N    : Node_Id;
!       Typ  : Entity_Id)
!       return Boolean;
     --  If N is a null value and Typ a remote access to subprogram type,
     --  this function will check if null needs to be replaced with an
     --  aggregate and will return True in this case. Otherwise, it will
     --  return False.
  
-    function Get_Subprogram_Id (E : Entity_Id) return Int;
-    --  Given a subprogram defined in a RCI package, get its subprogram id
-    --  which will be used for remote calls.
- 
     function Package_Specification_Of_Scope (E : Entity_Id) return Node_Id;
     --  Return the N_Package_Specification corresponding to a scope E
  
--- 82,94 ----
     --  the previous function.
  
     function Remote_AST_Null_Value
!      (N   : Node_Id;
!       Typ : Entity_Id) return Boolean;
     --  If N is a null value and Typ a remote access to subprogram type,
     --  this function will check if null needs to be replaced with an
     --  aggregate and will return True in this case. Otherwise, it will
     --  return False.
  
     function Package_Specification_Of_Scope (E : Entity_Id) return Node_Id;
     --  Return the N_Package_Specification corresponding to a scope E
  
diff -Nrcpad gcc-3.4.3/gcc/ada/sem_elab.adb gcc-4.0.0/gcc/ada/sem_elab.adb
*** gcc-3.4.3/gcc/ada/sem_elab.adb	Mon Jan  5 15:20:46 2004
--- gcc-4.0.0/gcc/ada/sem_elab.adb	Thu Feb 10 13:55:59 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Nmake;    use Nmake;
*** 42,47 ****
--- 42,48 ----
  with Opt;      use Opt;
  with Output;   use Output;
  with Restrict; use Restrict;
+ with Rident;   use Rident;
  with Sem;      use Sem;
  with Sem_Cat;  use Sem_Cat;
  with Sem_Ch7;  use Sem_Ch7;
*************** package body Sem_Elab is
*** 158,164 ****
     -- Local Subprograms --
     -----------------------
  
!    --  Note: Outer_Scope in all these calls represents the scope of
     --  interest of the outer level call. If it is set to Standard_Standard,
     --  then it means the outer level call was at elaboration level, and that
     --  thus all calls are of interest. If it was set to some other scope,
--- 159,165 ----
     -- Local Subprograms --
     -----------------------
  
!    --  Note: Outer_Scope in all following specs represents the scope of
     --  interest of the outer level call. If it is set to Standard_Standard,
     --  then it means the outer level call was at elaboration level, and that
     --  thus all calls are of interest. If it was set to some other scope,
*************** package body Sem_Elab is
*** 223,228 ****
--- 224,252 ----
     --  to Check_Internal_Call. Outer_Scope is the outer level scope for
     --  the original call.
  
+    procedure Set_Elaboration_Constraint
+     (Call : Node_Id;
+      Subp : Entity_Id;
+      Scop : Entity_Id);
+    --  The current unit U may depend semantically on some unit P which is not
+    --  in the current context. If there is an elaboration call that reaches P,
+    --  we need to indicate that P requires an Elaborate_All, but this is not
+    --  effective in U's ali file, if there is no with_clause for P. In this
+    --  case we add the Elaborate_All on the unit Q that directly or indirectly
+    --  makes P available. This can happen in two cases:
+    --
+    --    a) Q declares a subtype of a type declared in P, and the call is an
+    --    initialization call for an object of that subtype.
+    --
+    --    b) Q declares an object of some tagged type whose root type is
+    --    declared in P, and the initialization call uses object notation on
+    --    that object to reach a primitive operation or a classwide operation
+    --    declared in P.
+    --
+    --  If P appears in the context of U, the current processing is correct.
+    --  Otherwise we must identify these two cases to retrieve Q and place the
+    --  Elaborate_All_Desirable on it.
+ 
     function Has_Generic_Body (N : Node_Id) return Boolean;
     --  N is a generic package instantiation node, and this routine determines
     --  if this package spec does in fact have a generic body. If so, then
*************** package body Sem_Elab is
*** 307,317 ****
        --  elaboration check is required.
  
        W_Scope : Entity_Id;
!       --  Top level scope of directly called entity for subprogram.
!       --  This differs from E_Scope in the case where renamings or
!       --  derivations are involved, since it does not follow these
!       --  links, thus W_Scope is always in a visible unit. This is
!       --  the scope for the Elaborate_All if one is needed.
  
        Body_Acts_As_Spec : Boolean;
        --  Set to true if call is to body acting as spec (no separate spec)
--- 331,346 ----
        --  elaboration check is required.
  
        W_Scope : Entity_Id;
!       --  Top level scope of directly called entity for subprogram. This
!       --  differs from E_Scope in the case where renamings or derivations
!       --  are involved, since it does not follow these links. W_Scope is
!       --  generally in a visible unit, and it is this scope that may require
!       --  an Elaborate_All. However, there are some cases (initialization
!       --  calls and calls involving object notation) where W_Scope might not
!       --  be in the context of the current unit, and there is an intermediate
!       --  package that is, in which case the Elaborate_All has to be placed
!       --  on this intedermediate package. These special cases are handled in
!       --  Set_Elaboration_Constraint.
  
        Body_Acts_As_Spec : Boolean;
        --  Set to true if call is to body acting as spec (no separate spec)
*************** package body Sem_Elab is
*** 358,364 ****
              return;
           end if;
  
!          --  Nothing to do for imported entities,
  
           if Is_Imported (Ent) then
              return;
--- 387,393 ----
              return;
           end if;
  
!          --  Nothing to do for imported entities
  
           if Is_Imported (Ent) then
              return;
*************** package body Sem_Elab is
*** 425,432 ****
  
        --  If the generic entity is within a deeper instance than we are, then
        --  either the instantiation to which we refer itself caused an ABE, in
!       --  which case that will be handled separately. Otherwise, we know that
!       --  the body we need appears as needed at the point of the instantiation.
        --  However, this assumption is only valid if we are in static mode.
  
        if not Dynamic_Elaboration_Checks
--- 454,461 ----
  
        --  If the generic entity is within a deeper instance than we are, then
        --  either the instantiation to which we refer itself caused an ABE, in
!       --  which case that will be handled separately, or else we know that the
!       --  body we need appears as needed at the point of the instantiation.
        --  However, this assumption is only valid if we are in static mode.
  
        if not Dynamic_Elaboration_Checks
*************** package body Sem_Elab is
*** 637,647 ****
           --  Find top level scope for called entity (not following renamings
           --  or derivations). This is where the Elaborate_All will go if it
           --  is needed. We start with the called entity, except in the case
!          --  of initialization procedures, where the init proc is in the root
!          --  package, where we start fromn the entity of the name in the call.
  
           if Is_Entity_Name (Name (N))
             and then Is_Init_Proc (Entity (Name (N)))
           then
              W_Scope := Scope (Entity (Name (N)));
           else
--- 666,678 ----
           --  Find top level scope for called entity (not following renamings
           --  or derivations). This is where the Elaborate_All will go if it
           --  is needed. We start with the called entity, except in the case
!          --  of an initialization procedure outside the current package, where
!          --  the init proc is in the root package, and we start from the entity
!          --  of the name in the call.
  
           if Is_Entity_Name (Name (N))
             and then Is_Init_Proc (Entity (Name (N)))
+            and then not In_Same_Extended_Unit (N, Entity (Name (N)))
           then
              W_Scope := Scope (Entity (Name (N)));
           else
*************** package body Sem_Elab is
*** 748,755 ****
  
                 --  Set indication for binder to generate Elaborate_All
  
!                Set_Elaborate_All_Desirable (W_Scope);
!                Set_Suppress_Elaboration_Warnings (W_Scope, True);
              end if;
           end if;
  
--- 779,785 ----
  
                 --  Set indication for binder to generate Elaborate_All
  
!                Set_Elaboration_Constraint (N, E, W_Scope);
              end if;
           end if;
  
*************** package body Sem_Elab is
*** 809,815 ****
        --  current declarative part
  
        if not Same_Elaboration_Scope (Current_Scope, Scope (Ent))
!         or else not In_Same_Extended_Unit (Sloc (N), Sloc (Ent))
        then
           return;
        end if;
--- 839,845 ----
        --  current declarative part
  
        if not Same_Elaboration_Scope (Current_Scope, Scope (Ent))
!         or else not In_Same_Extended_Unit (N, Ent)
        then
           return;
        end if;
*************** package body Sem_Elab is
*** 910,915 ****
--- 940,953 ----
     --  Start of processing for Check_Elab_Call
  
     begin
+       --  If the call does not come from the main unit, there is nothing to
+       --  check. Elaboration call from units in the context of the main unit
+       --  will lead to semantic dependencies when those units are compiled.
+ 
+       if not In_Extended_Main_Code_Unit (N) then
+          return;
+       end if;
+ 
        --  For an entry call, check relevant restriction
  
        if Nkind (N) = N_Entry_Call_Statement
*************** package body Sem_Elab is
*** 962,968 ****
        --  will be doing the actual call later, not now, and it
        --  is at the time of the actual call (statically speaking)
        --  that we must do our static check, not at the time of
!       --  its initial analysis).
  
        P := Parent (N);
        while Present (P) loop
--- 1000,1009 ----
        --  will be doing the actual call later, not now, and it
        --  is at the time of the actual call (statically speaking)
        --  that we must do our static check, not at the time of
!       --  its initial analysis). However, we have to check calls
!       --  within component definitions (e.g., a function call
!       --  that determines an array component bound), so we
!       --  terminate the loop in that case.
  
        P := Parent (N);
        while Present (P) loop
*************** package body Sem_Elab is
*** 971,976 ****
--- 1012,1024 ----
              Nkind (P) = N_Component_Declaration
           then
              return;
+ 
+          --  The call occurs within the constraint of a component,
+          --  so it must be checked.
+ 
+          elsif Nkind (P) = N_Component_Definition then
+             exit;
+ 
           else
              P := Parent (P);
           end if;
*************** package body Sem_Elab is
*** 1324,1329 ****
--- 1372,1383 ----
           return;
        end if;
  
+       --  Nothing to do if the instantiation is not in the main unit.
+ 
+       if not In_Extended_Main_Code_Unit (N) then
+          return;
+       end if;
+ 
        Ent := Get_Generic_Entity (N);
        From_Elab_Code := not In_Subprogram_Or_Concurrent_Unit;
  
*************** package body Sem_Elab is
*** 1489,1495 ****
  
           if (Nkind (Original_Node (N)) = N_Accept_Statement
                or else Nkind (Original_Node (N)) = N_Selective_Accept)
!            and then Restrictions (No_Entry_Calls_In_Elaboration_Code)
           then
              return Abandon;
  
--- 1543,1549 ----
  
           if (Nkind (Original_Node (N)) = N_Accept_Statement
                or else Nkind (Original_Node (N)) = N_Selective_Accept)
!            and then Restriction_Active (No_Entry_Calls_In_Elaboration_Code)
           then
              return Abandon;
  
*************** package body Sem_Elab is
*** 1929,1935 ****
           elsif Dynamic_Elaboration_Checks then
              if not Elaboration_Checks_Suppressed (Ent)
                and then not Cunit_SC
!               and then not Restrictions (No_Entry_Calls_In_Elaboration_Code)
              then
                 --  Runtime elaboration check required. generate check of the
                 --  elaboration Boolean for the unit containing the entity.
--- 1983,1990 ----
           elsif Dynamic_Elaboration_Checks then
              if not Elaboration_Checks_Suppressed (Ent)
                and then not Cunit_SC
!               and then
!                 not Restriction_Active (No_Entry_Calls_In_Elaboration_Code)
              then
                 --  Runtime elaboration check required. generate check of the
                 --  elaboration Boolean for the unit containing the entity.
*************** package body Sem_Elab is
*** 1978,1983 ****
--- 2033,2128 ----
        In_Task_Activation := False;
     end Check_Task_Activation;
  
+    --------------------------------
+    -- Set_Elaboration_Constraint --
+    --------------------------------
+ 
+    procedure Set_Elaboration_Constraint
+     (Call : Node_Id;
+      Subp : Entity_Id;
+      Scop : Entity_Id)
+    is
+       Elab_Unit  : Entity_Id;
+       Init_Call  : constant Boolean :=
+                      Chars (Subp) = Name_Initialize
+                        and then Comes_From_Source (Subp)
+                        and then Present (Parameter_Associations (Call))
+                        and then Is_Controlled
+                          (Etype (First (Parameter_Associations (Call))));
+    begin
+       --  If the unit is mentioned in a with_clause of the current
+       --  unit, it is visible, and we can set the elaboration flag.
+ 
+       if Is_Immediately_Visible (Scop)
+         or else
+           (Is_Child_Unit (Scop) and then Is_Visible_Child_Unit (Scop))
+       then
+          Set_Elaborate_All_Desirable (Scop);
+          Set_Suppress_Elaboration_Warnings (Scop, True);
+          return;
+       end if;
+ 
+       --  If this is not an initialization call or a call using object notation
+       --  we know that the unit of the called entity is in the context, and
+       --  we can set the flag as well. The unit need not be visible if the call
+       --  occurs within an instantiation.
+ 
+       if Is_Init_Proc (Subp)
+         or else Init_Call
+         or else Nkind (Original_Node (Call)) = N_Selected_Component
+       then
+          null;  --  detailed processing follows.
+ 
+       else
+          Set_Elaborate_All_Desirable (Scop);
+          Set_Suppress_Elaboration_Warnings (Scop, True);
+          return;
+       end if;
+ 
+       --  If the unit is not in the context, there must be an intermediate
+       --  unit that is, on which we need to place to elaboration flag.
+ 
+       if Is_Init_Proc (Subp)
+         or else Init_Call
+       then
+          --  The initialization call is on an object whose type is not
+          --  declared in the same scope as the subprogram. The type of
+          --  the object must be a subtype of the type of operation. This
+          --  object is the first actual in the call.
+ 
+          declare
+             Typ  : constant Entity_Id :=
+                      Etype (First (Parameter_Associations (Call)));
+          begin
+             Elab_Unit := Scope (Typ);
+ 
+             while (Present (Elab_Unit))
+               and then not Is_Compilation_Unit (Elab_Unit)
+             loop
+                Elab_Unit := Scope (Elab_Unit);
+             end loop;
+          end;
+       elsif Nkind (Original_Node (Call)) = N_Selected_Component then
+ 
+          --  If original node uses selected component notation, the
+          --  prefix is visible and determines the scope that must be
+          --  elaborated. After rewriting, the prefix is the first actual
+          --  in the call.
+ 
+          Elab_Unit := Scope (Etype (First (Parameter_Associations (Call))));
+ 
+       else
+          --  Using previously computed scope. If the elaboration check is
+          --  done after analysis, the scope is not visible any longer, but
+          --  must still be in the context.
+ 
+          Elab_Unit := Scop;
+       end if;
+ 
+       Set_Elaborate_All_Desirable (Elab_Unit);
+       Set_Suppress_Elaboration_Warnings (Elab_Unit, True);
+    end Set_Elaboration_Constraint;
+ 
     ----------------------
     -- Has_Generic_Body --
     ----------------------
diff -Nrcpad gcc-3.4.3/gcc/ada/sem_elim.adb gcc-4.0.0/gcc/ada/sem_elim.adb
*** gcc-3.4.3/gcc/ada/sem_elim.adb	Mon Jan  5 15:20:46 2004
--- gcc-4.0.0/gcc/ada/sem_elim.adb	Mon Jan  3 15:36:25 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 24,42 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;   use Atree;
! with Einfo;   use Einfo;
! with Errout;  use Errout;
! with Namet;   use Namet;
! with Nlists;  use Nlists;
! with Sinfo;   use Sinfo;
! with Snames;  use Snames;
! with Stand;   use Stand;
! with Stringt; use Stringt;
  with Table;
- with Uintp;   use Uintp;
  
  with GNAT.HTable; use GNAT.HTable;
  package body Sem_Elim is
  
     No_Elimination : Boolean;
--- 24,44 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Einfo;    use Einfo;
! with Errout;   use Errout;
! with Namet;    use Namet;
! with Nlists;   use Nlists;
! with Sem_Prag; use Sem_Prag;
! with Sinput;   use Sinput;
! with Sinfo;    use Sinfo;
! with Snames;   use Snames;
! with Stand;    use Stand;
! with Stringt;  use Stringt;
  with Table;
  
  with GNAT.HTable; use GNAT.HTable;
+ 
  package body Sem_Elim is
  
     No_Elimination : Boolean;
*************** package body Sem_Elim is
*** 83,90 ****
        Result_Type : Name_Id;
        --  Result type name if Result_Types parameter present, No_Name if not
  
!       Homonym_Number : Uint;
!       --  Homonyn number if Homonym_Number parameter present, No_Uint if not.
  
        Hash_Link : Access_Elim_Data;
        --  Link for hash table use
--- 85,93 ----
        Result_Type : Name_Id;
        --  Result type name if Result_Types parameter present, No_Name if not
  
!       Source_Location : Name_Id;
!       --  String describing the source location of subprogram defining name if
!       --  Source_Location parameter present, No_Name if not
  
        Hash_Link : Access_Elim_Data;
        --  Link for hash table use
*************** package body Sem_Elim is
*** 229,236 ****
        Elmt : Access_Elim_Data;
        Scop : Entity_Id;
        Form : Entity_Id;
!       Ctr  : Nat;
!       Ent  : Entity_Id;
  
     begin
        if No_Elimination then
--- 232,260 ----
        Elmt : Access_Elim_Data;
        Scop : Entity_Id;
        Form : Entity_Id;
! 
!       function Original_Chars (S : Entity_Id) return Name_Id;
!       --  If the candidate subprogram is a protected operation of a single
!       --  protected object, the scope of the operation is the created
!       --  protected type, and we have to retrieve the original name of
!       --  the object.
! 
!       --------------------
!       -- Original_Chars --
!       --------------------
! 
!       function Original_Chars (S : Entity_Id) return Name_Id is
!       begin
!          if Ekind (S) /= E_Protected_Type
!            or else Comes_From_Source (S)
!          then
!             return Chars (S);
!          else
!             return Chars (Defining_Identifier (Original_Node (Parent (S))));
!          end if;
!       end Original_Chars;
! 
!    --  Start of processing for Check_Eliminated
  
     begin
        if No_Elimination then
*************** package body Sem_Elim is
*** 242,251 ****
           return;
        end if;
  
-       Elmt := Elim_Hash_Table.Get (Chars (E));
- 
        --  Loop through homonyms for this key
  
        while Elmt /= null loop
           declare
              procedure Set_Eliminated;
--- 266,274 ----
           return;
        end if;
  
        --  Loop through homonyms for this key
  
+       Elmt := Elim_Hash_Table.Get (Chars (E));
        while Elmt /= null loop
           declare
              procedure Set_Eliminated;
*************** package body Sem_Elim is
*** 267,280 ****
              --  Then we need to see if the static scope matches within the
              --  compilation unit.
  
              Scop := Scope (E);
              if Elmt.Entity_Scope /= null then
                 for J in reverse Elmt.Entity_Scope'Range loop
!                   if Elmt.Entity_Scope (J) /= Chars (Scop) then
                       goto Continue;
                    end if;
  
                    Scop := Scope (Scop);
  
                    if not Is_Compilation_Unit (Scop) and then J = 1 then
                       goto Continue;
--- 290,313 ----
              --  Then we need to see if the static scope matches within the
              --  compilation unit.
  
+             --  At the moment, gnatelim does not consider block statements as
+             --  scopes (even if a block is named)
+ 
              Scop := Scope (E);
+             while Ekind (Scop) = E_Block loop
+                Scop := Scope (Scop);
+             end loop;
+ 
              if Elmt.Entity_Scope /= null then
                 for J in reverse Elmt.Entity_Scope'Range loop
!                   if Elmt.Entity_Scope (J) /= Original_Chars (Scop) then
                       goto Continue;
                    end if;
  
                    Scop := Scope (Scop);
+                   while Ekind (Scop) = E_Block loop
+                      Scop := Scope (Scop);
+                   end loop;
  
                    if not Is_Compilation_Unit (Scop) and then J = 1 then
                       goto Continue;
*************** package body Sem_Elim is
*** 290,295 ****
--- 323,331 ----
                 end if;
  
                 Scop := Scope (Scop);
+                while Ekind (Scop) = E_Block loop
+                   Scop := Scope (Scop);
+                end loop;
  
                 if Scop /= Standard_Standard and then J = 1 then
                    goto Continue;
*************** package body Sem_Elim is
*** 319,345 ****
                 Set_Eliminated;
                 return;
  
!                --  Check for case of subprogram
  
              elsif Ekind (E) = E_Function
                or else Ekind (E) = E_Procedure
              then
!                --  If Homonym_Number present, then see if it matches
  
!                if Elmt.Homonym_Number /= No_Uint then
!                   Ctr := 1;
  
!                   Ent := E;
!                   while Present (Homonym (Ent))
!                     and then Scope (Ent) = Scope (Homonym (Ent))
!                   loop
!                      Ctr := Ctr + 1;
!                      Ent := Homonym (Ent);
!                   end loop;
  
!                   if Ctr /= Elmt.Homonym_Number then
!                      goto Continue;
!                   end if;
                 end if;
  
                 --  If we have a Result_Type, then we must have a function
--- 355,585 ----
                 Set_Eliminated;
                 return;
  
!             --  Check for case of subprogram
  
              elsif Ekind (E) = E_Function
                or else Ekind (E) = E_Procedure
              then
!                --  If Source_Location present, then see if it matches
  
!                if Elmt.Source_Location /= No_Name then
!                   Get_Name_String (Elmt.Source_Location);
  
!                   declare
!                      Sloc_Trace : constant String :=
!                                     Name_Buffer (1 .. Name_Len);
  
!                      Idx : Natural := Sloc_Trace'First;
!                      --  Index in Sloc_Trace, if equals to 0, then we have
!                      --  completely traversed Sloc_Trace
! 
!                      Last : constant Natural := Sloc_Trace'Last;
! 
!                      P      : Source_Ptr;
!                      Sindex : Source_File_Index;
! 
!                      function File_Name_Match return Boolean;
!                      --  This function is supposed to be called when Idx points
!                      --  to the beginning of the new file name, and Name_Buffer
!                      --  is set to contain the name of the proper source file
!                      --  from the chain corresponding to the Sloc of E. First
!                      --  it checks that these two files have the same name. If
!                      --  this check is successful, moves Idx to point to the
!                      --  beginning of the column number.
! 
!                      function Line_Num_Match return Boolean;
!                      --  This function is supposed to be called when Idx points
!                      --  to the beginning of the column number, and P is
!                      --  set to point to the proper Sloc the chain
!                      --  corresponding to the Sloc of E. First it checks that
!                      --  the line number Idx points on and the line number
!                      --  corresponding to P are the same. If this check is
!                      --  successful, moves Idx to point to the beginning of
!                      --  the next file name in Sloc_Trace. If there is no file
!                      --  name any more, Idx is set to 0.
! 
!                      function Different_Trace_Lengths return Boolean;
!                      --  From Idx and P, defines if there are in both traces
!                      --  more element(s) in the instantiation chains. Returns
!                      --  False if one trace contains more element(s), but
!                      --  another does not. If both traces contains more
!                      --  elements (that is, the function returns False), moves
!                      --  P ahead in the chain corresponding to E, recomputes
!                      --  Sindex and sets the name of the corresponding file in
!                      --  Name_Buffer
! 
!                      function Skip_Spaces return Natural;
!                      --  If Sloc_Trace (Idx) is not space character, returns
!                      --  Idx. Otherwise returns the index of the nearest
!                      --  non-space character in Sloc_Trace to the right of
!                      --  Idx. Returns 0 if there is no such character.
! 
!                      -----------------------------
!                      -- Different_Trace_Lengths --
!                      -----------------------------
! 
!                      function Different_Trace_Lengths return Boolean is
!                      begin
!                         P := Instantiation (Sindex);
! 
!                         if (P = No_Location and then Idx /= 0)
!                           or else
!                            (P /= No_Location and then Idx = 0)
!                         then
!                            return True;
! 
!                         else
!                            if P /= No_Location then
!                               Sindex := Get_Source_File_Index (P);
!                               Get_Name_String (File_Name (Sindex));
!                            end if;
! 
!                            return False;
!                         end if;
!                      end Different_Trace_Lengths;
! 
!                      ---------------------
!                      -- File_Name_Match --
!                      ---------------------
! 
!                      function File_Name_Match return Boolean is
!                         Tmp_Idx : Natural;
!                         End_Idx : Natural;
! 
!                      begin
!                         if Idx = 0 then
!                            return False;
!                         end if;
! 
!                         --  Find first colon. If no colon, then return False.
!                         --  If there is a colon, Tmp_Idx is set to point just
!                         --  before the colon.
! 
!                         Tmp_Idx := Idx - 1;
!                         loop
!                            if Tmp_Idx >= Last then
!                               return False;
!                            elsif Sloc_Trace (Tmp_Idx + 1) = ':' then
!                               exit;
!                            else
!                               Tmp_Idx := Tmp_Idx + 1;
!                            end if;
!                         end loop;
! 
!                         --  Find last non-space before this colon. If there
!                         --  is no no space character before this colon, then
!                         --  return False. Otherwise, End_Idx set to point to
!                         --  this non-space character.
! 
!                         End_Idx := Tmp_Idx;
!                         loop
!                            if End_Idx < Idx then
!                               return False;
!                            elsif Sloc_Trace (End_Idx) /= ' ' then
!                               exit;
!                            else
!                               End_Idx := End_Idx - 1;
!                            end if;
!                         end loop;
! 
!                         --  Now see if file name matches what is in Name_Buffer
!                         --  and if so, step Idx past it and return True. If the
!                         --  name does not match, return False.
! 
!                         if Sloc_Trace (Idx .. End_Idx) =
!                            Name_Buffer (1 .. Name_Len)
!                         then
!                            Idx := Tmp_Idx + 2;
!                            Idx := Skip_Spaces;
!                            return True;
!                         else
!                            return False;
!                         end if;
!                      end File_Name_Match;
! 
!                      --------------------
!                      -- Line_Num_Match --
!                      --------------------
! 
!                      function Line_Num_Match return Boolean is
!                         N : Int := 0;
! 
!                      begin
!                         if Idx = 0 then
!                            return False;
!                         end if;
! 
!                         while Idx <= Last
!                            and then Sloc_Trace (Idx) in '0' .. '9'
!                         loop
!                            N := N * 10 +
!                             (Character'Pos (Sloc_Trace (Idx)) -
!                              Character'Pos ('0'));
!                            Idx := Idx + 1;
!                         end loop;
! 
!                         if Get_Physical_Line_Number (P) =
!                            Physical_Line_Number (N)
!                         then
!                            while Idx <= Last and then
!                               Sloc_Trace (Idx) /= '['
!                            loop
!                               Idx := Idx + 1;
!                            end loop;
! 
!                            if Idx <= Last and then
!                              Sloc_Trace (Idx) = '['
!                            then
!                               Idx := Idx + 1;
!                               Idx := Skip_Spaces;
!                            else
!                               Idx := 0;
!                            end if;
! 
!                            return True;
!                         else
!                            return False;
!                         end if;
!                      end Line_Num_Match;
! 
!                      -----------------
!                      -- Skip_Spaces --
!                      -----------------
! 
!                      function Skip_Spaces return Natural is
!                         Res : Natural := Idx;
! 
!                      begin
!                         while Sloc_Trace (Res) = ' ' loop
!                            Res := Res + 1;
! 
!                            if Res > Last then
!                               Res := 0;
!                               exit;
!                            end if;
!                         end loop;
! 
!                         return Res;
!                      end Skip_Spaces;
! 
!                   begin
!                      P := Sloc (E);
!                      Sindex := Get_Source_File_Index (P);
!                      Get_Name_String (File_Name (Sindex));
! 
!                      Idx := Skip_Spaces;
!                      while Idx > 0 loop
!                         if not File_Name_Match then
!                            goto Continue;
!                         elsif not Line_Num_Match then
!                            goto Continue;
!                         end if;
! 
!                         if Different_Trace_Lengths then
!                            goto Continue;
!                         end if;
!                      end loop;
!                   end;
                 end if;
  
                 --  If we have a Result_Type, then we must have a function
*************** package body Sem_Elim is
*** 358,364 ****
                 if Elmt.Parameter_Types /= null then
                    Form := First_Formal (E);
  
!                   if No (Form) and then Elmt.Parameter_Types = null then
                       null;
  
                    elsif Elmt.Parameter_Types = null then
--- 598,609 ----
                 if Elmt.Parameter_Types /= null then
                    Form := First_Formal (E);
  
!                   if No (Form)
!                     and then Elmt.Parameter_Types'Length = 1
!                     and then Elmt.Parameter_Types (1) = No_Name
!                   then
!                      --  Parameterless procedure matches
! 
                       null;
  
                    elsif Elmt.Parameter_Types = null then
*************** package body Sem_Elim is
*** 387,395 ****
                 Set_Eliminated;
                 return;
              end if;
- 
-             <<Continue>> Elmt := Elmt.Homonym;
           end;
        end loop;
  
        return;
--- 632,641 ----
                 Set_Eliminated;
                 return;
              end if;
           end;
+ 
+       <<Continue>>
+          Elmt := Elmt.Homonym;
        end loop;
  
        return;
*************** package body Sem_Elim is
*** 411,417 ****
  
        --  Should never fall through, since entry should be in table
  
!       pragma Assert (False);
     end Eliminate_Error_Msg;
  
     ----------------
--- 657,663 ----
  
        --  Should never fall through, since entry should be in table
  
!       raise Program_Error;
     end Eliminate_Error_Msg;
  
     ----------------
*************** package body Sem_Elim is
*** 435,441 ****
        Arg_Entity          : Node_Id;
        Arg_Parameter_Types : Node_Id;
        Arg_Result_Type     : Node_Id;
!       Arg_Homonym_Number  : Node_Id)
     is
        Data : constant Access_Elim_Data := new Elim_Data;
        --  Build result data here
--- 681,687 ----
        Arg_Entity          : Node_Id;
        Arg_Parameter_Types : Node_Id;
        Arg_Result_Type     : Node_Id;
!       Arg_Source_Location : Node_Id)
     is
        Data : constant Access_Elim_Data := new Elim_Data;
        --  Build result data here
*************** package body Sem_Elim is
*** 530,544 ****
  
              Data.Entity_Scope (1) := Chars (Arg_Ent);
  
!          elsif Nkind (Arg_Entity) = N_String_Literal then
!             String_To_Name_Buffer (Strval (Arg_Entity));
              Data.Entity_Name := Name_Find;
              Data.Entity_Node := Arg_Entity;
  
           else
-             Error_Msg_N
-               ("wrong form for Entity_Argument parameter of pragma%",
-                Arg_Unit_Name);
              return;
           end if;
        else
--- 776,786 ----
  
              Data.Entity_Scope (1) := Chars (Arg_Ent);
  
!          elsif Is_Config_Static_String (Arg_Entity) then
              Data.Entity_Name := Name_Find;
              Data.Entity_Node := Arg_Entity;
  
           else
              return;
           end if;
        else
*************** package body Sem_Elim is
*** 550,635 ****
  
        if Present (Arg_Parameter_Types) then
  
-          --  Case of one name, which looks like a parenthesized literal
-          --  rather than an aggregate.
- 
-          if Nkind (Arg_Parameter_Types) = N_String_Literal
-            and then Paren_Count (Arg_Parameter_Types) = 1
-          then
-             String_To_Name_Buffer (Strval (Arg_Parameter_Types));
-             Data.Parameter_Types := new Names'(1 => Name_Find);
- 
-          --  Otherwise must be an aggregate
- 
-          elsif Nkind (Arg_Parameter_Types) /= N_Aggregate
-            or else Present (Component_Associations (Arg_Parameter_Types))
-            or else No (Expressions (Arg_Parameter_Types))
-          then
-             Error_Msg_N
-               ("Parameter_Types for pragma% must be list of string literals",
-                Arg_Parameter_Types);
-             return;
- 
           --  Here for aggregate case
  
!          else
              Data.Parameter_Types :=
                new Names
                  (1 .. List_Length (Expressions (Arg_Parameter_Types)));
  
              Lit := First (Expressions (Arg_Parameter_Types));
              for J in Data.Parameter_Types'Range loop
!                if Nkind (Lit) /= N_String_Literal then
!                   Error_Msg_N
!                     ("parameter types for pragma% must be string literals",
!                      Lit);
                    return;
                 end if;
- 
-                String_To_Name_Buffer (Strval (Lit));
-                Data.Parameter_Types (J) := Name_Find;
-                Next (Lit);
              end loop;
           end if;
        end if;
  
        --  Process Result_Types argument
  
        if Present (Arg_Result_Type) then
! 
!          if Nkind (Arg_Result_Type) /= N_String_Literal then
!             Error_Msg_N
!               ("Result_Type argument for pragma% must be string literal",
!                Arg_Result_Type);
              return;
           end if;
  
!          String_To_Name_Buffer (Strval (Arg_Result_Type));
!          Data.Result_Type := Name_Find;
  
        else
           Data.Result_Type := No_Name;
        end if;
  
!       --  Process Homonym_Number argument
! 
!       if Present (Arg_Homonym_Number) then
  
!          if Nkind (Arg_Homonym_Number) /= N_Integer_Literal then
!             Error_Msg_N
!               ("Homonym_Number argument for pragma% must be integer literal",
!                Arg_Homonym_Number);
              return;
           end if;
- 
-          Data.Homonym_Number := Intval (Arg_Homonym_Number);
- 
        else
!          Data.Homonym_Number := No_Uint;
        end if;
  
-       --  Now link this new entry into the hash table
- 
        Elmt := Elim_Hash_Table.Get (Hash_Subprograms.Get_Key (Data));
  
        --  If we already have an entry with this same key, then link
--- 792,868 ----
  
        if Present (Arg_Parameter_Types) then
  
           --  Here for aggregate case
  
!          if Nkind (Arg_Parameter_Types) = N_Aggregate then
              Data.Parameter_Types :=
                new Names
                  (1 .. List_Length (Expressions (Arg_Parameter_Types)));
  
              Lit := First (Expressions (Arg_Parameter_Types));
              for J in Data.Parameter_Types'Range loop
!                if Is_Config_Static_String (Lit) then
!                   Data.Parameter_Types (J) := Name_Find;
!                   Next (Lit);
!                else
                    return;
                 end if;
              end loop;
+ 
+          --  Otherwise we must have case of one name, which looks like a
+          --  parenthesized literal rather than an aggregate.
+ 
+          elsif Paren_Count (Arg_Parameter_Types) /= 1 then
+             Error_Msg_N
+               ("wrong form for argument of pragma Eliminate",
+                Arg_Parameter_Types);
+             return;
+ 
+          elsif Is_Config_Static_String (Arg_Parameter_Types) then
+             String_To_Name_Buffer (Strval (Arg_Parameter_Types));
+ 
+             if Name_Len = 0 then
+ 
+                --  Parameterless procedure
+ 
+                Data.Parameter_Types := new Names'(1 => No_Name);
+ 
+             else
+                Data.Parameter_Types := new Names'(1 => Name_Find);
+             end if;
+ 
+          else
+             return;
           end if;
        end if;
  
        --  Process Result_Types argument
  
        if Present (Arg_Result_Type) then
!          if Is_Config_Static_String (Arg_Result_Type) then
!             Data.Result_Type := Name_Find;
!          else
              return;
           end if;
  
!       --  Here if no Result_Types argument
  
        else
           Data.Result_Type := No_Name;
        end if;
  
!       --  Process Source_Location argument
  
!       if Present (Arg_Source_Location) then
!          if Is_Config_Static_String (Arg_Source_Location) then
!             Data.Source_Location := Name_Find;
!          else
              return;
           end if;
        else
!          Data.Source_Location := No_Name;
        end if;
  
        Elmt := Elim_Hash_Table.Get (Hash_Subprograms.Get_Key (Data));
  
        --  If we already have an entry with this same key, then link
diff -Nrcpad gcc-3.4.3/gcc/ada/sem_elim.ads gcc-4.0.0/gcc/ada/sem_elim.ads
*** gcc-3.4.3/gcc/ada/sem_elim.ads	Mon Jan  5 15:20:46 2004
--- gcc-4.0.0/gcc/ada/sem_elim.ads	Mon Apr 19 15:20:06 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1997-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1997-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Sem_Elim is
*** 39,45 ****
        Arg_Entity          : Node_Id;
        Arg_Parameter_Types : Node_Id;
        Arg_Result_Type     : Node_Id;
!       Arg_Homonym_Number  : Node_Id);
     --  Process eliminate pragma (given by Pragma_Node). The number of
     --  arguments has been checked, as well as possible optional identifiers,
     --  but no other checks have been made. This subprogram completes the
--- 39,45 ----
        Arg_Entity          : Node_Id;
        Arg_Parameter_Types : Node_Id;
        Arg_Result_Type     : Node_Id;
!       Arg_Source_Location : Node_Id);
     --  Process eliminate pragma (given by Pragma_Node). The number of
     --  arguments has been checked, as well as possible optional identifiers,
     --  but no other checks have been made. This subprogram completes the
diff -Nrcpad gcc-3.4.3/gcc/ada/sem_eval.adb gcc-4.0.0/gcc/ada/sem_eval.adb
*** gcc-3.4.3/gcc/ada/sem_eval.adb	Mon Jan  5 15:20:46 2004
--- gcc-4.0.0/gcc/ada/sem_eval.adb	Thu Feb 10 13:50:38 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Sem_Eval is
*** 1115,1122 ****
--- 1115,1141 ----
  
              if Is_Modular_Integer_Type (Ltype) then
                 Result := Result mod Modulus (Ltype);
+ 
+                --  For a signed integer type, check non-static overflow
+ 
+             elsif (not Stat) and then Is_Signed_Integer_Type (Ltype) then
+                declare
+                   BT : constant Entity_Id := Base_Type (Ltype);
+                   Lo : constant Uint := Expr_Value (Type_Low_Bound (BT));
+                   Hi : constant Uint := Expr_Value (Type_High_Bound (BT));
+                begin
+                   if Result < Lo or else Result > Hi then
+                      Apply_Compile_Time_Constraint_Error
+                        (N, "value not in range of }?",
+                         CE_Overflow_Check_Failed,
+                         Ent => BT);
+                      return;
+                   end if;
+                end;
              end if;
  
+             --  If we get here we can fold the result
+ 
              Fold_Uint (N, Result, Stat);
           end;
  
*************** package body Sem_Eval is
*** 1175,1185 ****
  
     procedure Eval_Character_Literal (N : Node_Id) is
        pragma Warnings (Off, N);
- 
     begin
        null;
     end Eval_Character_Literal;
  
     ------------------------
     -- Eval_Concatenation --
     ------------------------
--- 1194,1246 ----
  
     procedure Eval_Character_Literal (N : Node_Id) is
        pragma Warnings (Off, N);
     begin
        null;
     end Eval_Character_Literal;
  
+    ---------------
+    -- Eval_Call --
+    ---------------
+ 
+    --  Static function calls are either calls to predefined operators
+    --  with static arguments, or calls to functions that rename a literal.
+    --  Only the latter case is handled here, predefined operators are
+    --  constant-folded elsewhere.
+    --  If the function is itself inherited (see 7423-001) the literal of
+    --  the parent type must be explicitly converted to the return type
+    --  of the function.
+ 
+    procedure Eval_Call (N : Node_Id) is
+       Loc : constant Source_Ptr := Sloc (N);
+       Typ : constant Entity_Id  := Etype (N);
+       Lit : Entity_Id;
+ 
+    begin
+       if Nkind (N) = N_Function_Call
+         and then No (Parameter_Associations (N))
+         and then Is_Entity_Name (Name (N))
+         and then Present (Alias (Entity (Name (N))))
+         and then Is_Enumeration_Type (Base_Type (Typ))
+       then
+          Lit := Alias (Entity (Name (N)));
+ 
+          while Present (Alias (Lit)) loop
+             Lit := Alias (Lit);
+          end loop;
+ 
+          if Ekind (Lit) = E_Enumeration_Literal then
+             if Base_Type (Etype (Lit)) /= Base_Type (Typ) then
+                Rewrite
+                  (N, Convert_To (Typ, New_Occurrence_Of (Lit, Loc)));
+             else
+                Rewrite (N, New_Occurrence_Of (Lit, Loc));
+             end if;
+ 
+             Resolve (N, Typ);
+          end if;
+       end if;
+    end Eval_Call;
+ 
     ------------------------
     -- Eval_Concatenation --
     ------------------------
*************** package body Sem_Eval is
*** 1198,1204 ****
        --  Concatenation is never static in Ada 83, so if Ada 83
        --  check operand non-static context
  
!       if Ada_83
          and then Comes_From_Source (N)
        then
           Check_Non_Static_Context (Left);
--- 1259,1265 ----
        --  Concatenation is never static in Ada 83, so if Ada 83
        --  check operand non-static context
  
!       if Ada_Version = Ada_83
          and then Comes_From_Source (N)
        then
           Check_Non_Static_Context (Left);
*************** package body Sem_Eval is
*** 1216,1222 ****
        Test_Expression_Is_Foldable (N, Left, Right, Stat, Fold);
  
        if (C_Typ = Standard_Character
!             or else  C_Typ = Standard_Wide_Character)
          and then Fold
        then
           null;
--- 1277,1284 ----
        Test_Expression_Is_Foldable (N, Left, Right, Stat, Fold);
  
        if (C_Typ = Standard_Character
!             or else C_Typ = Standard_Wide_Character
!             or else C_Typ = Standard_Wide_Wide_Character)
          and then Fold
        then
           null;
*************** package body Sem_Eval is
*** 1225,1231 ****
           return;
        end if;
  
!       --  Compile time string concatenation.
  
        --  ??? Note that operands that are aggregates can be marked as
        --  static, so we should attempt at a later stage to fold
--- 1287,1293 ----
           return;
        end if;
  
!       --  Compile time string concatenation
  
        --  ??? Note that operands that are aggregates can be marked as
        --  static, so we should attempt at a later stage to fold
*************** package body Sem_Eval is
*** 1249,1255 ****
              Start_String (Strval (Left_Str));
           else
              Start_String;
!             Store_String_Char (Char_Literal_Value (Left_Str));
              Left_Len := 1;
           end if;
  
--- 1311,1317 ----
              Start_String (Strval (Left_Str));
           else
              Start_String;
!             Store_String_Char (UI_To_CC (Char_Literal_Value (Left_Str)));
              Left_Len := 1;
           end if;
  
*************** package body Sem_Eval is
*** 1265,1271 ****
                 end loop;
              end;
           else
!             Store_String_Char (Char_Literal_Value (Right_Str));
           end if;
  
           Set_Is_Static_Expression (N, Stat);
--- 1327,1333 ----
                 end loop;
              end;
           else
!             Store_String_Char (UI_To_CC (Char_Literal_Value (Right_Str)));
           end if;
  
           Set_Is_Static_Expression (N, Stat);
*************** package body Sem_Eval is
*** 1359,1365 ****
           end if;
        end if;
  
!       --  Fall through if the name is not static.
  
        Validate_Static_Object_Name (N);
     end Eval_Entity_Name;
--- 1421,1427 ----
           end if;
        end if;
  
!       --  Fall through if the name is not static
  
        Validate_Static_Object_Name (N);
     end Eval_Entity_Name;
*************** package body Sem_Eval is
*** 1487,1499 ****
     procedure Eval_Integer_Literal (N : Node_Id) is
        T : constant Entity_Id := Etype (N);
  
     begin
        --  If the literal appears in a non-expression context, then it is
        --  certainly appearing in a non-static context, so check it. This
        --  is actually a redundant check, since Check_Non_Static_Context
        --  would check it, but it seems worth while avoiding the call.
  
!       if Nkind (Parent (N)) not in N_Subexpr then
           Check_Non_Static_Context (N);
        end if;
  
--- 1549,1593 ----
     procedure Eval_Integer_Literal (N : Node_Id) is
        T : constant Entity_Id := Etype (N);
  
+       function In_Any_Integer_Context return Boolean;
+       --  If the literal is resolved with a specific type in a context
+       --  where the expected type is Any_Integer, there are no range checks
+       --  on the literal. By the time the literal is evaluated, it carries
+       --  the type imposed by the enclosing expression, and we must recover
+       --  the context to determine that Any_Integer is meant.
+ 
+       ----------------------------
+       -- To_Any_Integer_Context --
+       ----------------------------
+ 
+       function In_Any_Integer_Context return Boolean is
+          Par : constant Node_Id   := Parent (N);
+          K   : constant Node_Kind := Nkind (Par);
+ 
+       begin
+          --  Any_Integer also appears in digits specifications for real types,
+          --  but those have bounds smaller that those of any integer base
+          --  type, so we can safely ignore these cases.
+ 
+          return    K = N_Number_Declaration
+            or else K = N_Attribute_Reference
+            or else K = N_Attribute_Definition_Clause
+            or else K = N_Modular_Type_Definition
+            or else K = N_Signed_Integer_Type_Definition;
+       end In_Any_Integer_Context;
+ 
+    --  Start of processing for Eval_Integer_Literal
+ 
     begin
+ 
        --  If the literal appears in a non-expression context, then it is
        --  certainly appearing in a non-static context, so check it. This
        --  is actually a redundant check, since Check_Non_Static_Context
        --  would check it, but it seems worth while avoiding the call.
  
!       if Nkind (Parent (N)) not in N_Subexpr
!         and then not In_Any_Integer_Context
!       then
           Check_Non_Static_Context (N);
        end if;
  
*************** package body Sem_Eval is
*** 1904,1909 ****
--- 1998,2011 ----
          or else Nkind (Parent (N)) = N_Allocator
        then
           Check_Non_Static_Context (Operand);
+ 
+          --  If operand is known to raise constraint_error, set the
+          --  flag on the expression so it does not get optimized away.
+ 
+          if Nkind (Operand) = N_Raise_Constraint_Error then
+             Set_Raises_Constraint_Error (N);
+          end if;
+ 
           return;
        end if;
  
*************** package body Sem_Eval is
*** 2175,2181 ****
     begin
        --  Short circuit operations are never static in Ada 83
  
!       if Ada_83
          and then Comes_From_Source (N)
        then
           Check_Non_Static_Context (Left);
--- 2277,2283 ----
     begin
        --  Short circuit operations are never static in Ada 83
  
!       if Ada_Version = Ada_83
          and then Comes_From_Source (N)
        then
           Check_Non_Static_Context (Left);
*************** package body Sem_Eval is
*** 2328,2334 ****
        --  bound is type'First. In either case it is the upper bound that
        --  is out of range of the index type.
  
!       if Ada_95 then
           if Root_Type (Bas) = Standard_String
                or else
              Root_Type (Bas) = Standard_Wide_String
--- 2430,2436 ----
        --  bound is type'First. In either case it is the upper bound that
        --  is out of range of the index type.
  
!       if Ada_Version >= Ada_95 then
           if Root_Type (Bas) = Standard_String
                or else
              Root_Type (Bas) = Standard_Wide_String
*************** package body Sem_Eval is
*** 2417,2423 ****
     --  Start of processing for Eval_Type_Conversion
  
     begin
!       --  Cannot fold if target type is non-static or if semantic error.
  
        if not Is_Static_Subtype (Target_Type) then
           Check_Non_Static_Context (Operand);
--- 2519,2525 ----
     --  Start of processing for Eval_Type_Conversion
  
     begin
!       --  Cannot fold if target type is non-static or if semantic error
  
        if not Is_Static_Subtype (Target_Type) then
           Check_Non_Static_Context (Operand);
*************** package body Sem_Eval is
*** 2445,2451 ****
        --  following type test, fixed-point counts as real unless the flag
        --  Conversion_OK is set, in which case it counts as integer.
  
!       --  Fold conversion, case of string type. The result is not static.
  
        if Is_String_Type (Target_Type) then
           Fold_Str (N, Strval (Get_String_Val (Operand)), False);
--- 2547,2553 ----
        --  following type test, fixed-point counts as real unless the flag
        --  Conversion_OK is set, in which case it counts as integer.
  
!       --  Fold conversion, case of string type. The result is not static
  
        if Is_String_Type (Target_Type) then
           Fold_Str (N, Strval (Get_String_Val (Operand)), False);
*************** package body Sem_Eval is
*** 2664,2670 ****
           --  their Pos value as usual which is the same as the Rep value.
  
           if No (Ent) then
!             return UI_From_Int (Int (Char_Literal_Value (N)));
           else
              return Enumeration_Rep (Ent);
           end if;
--- 2766,2772 ----
           --  their Pos value as usual which is the same as the Rep value.
  
           if No (Ent) then
!             return Char_Literal_Value (N);
           else
              return Enumeration_Rep (Ent);
           end if;
*************** package body Sem_Eval is
*** 2744,2750 ****
           --  their Pos value as usual.
  
           if No (Ent) then
!             Val := UI_From_Int (Int (Char_Literal_Value (N)));
           else
              Val := Enumeration_Pos (Ent);
           end if;
--- 2846,2852 ----
           --  their Pos value as usual.
  
           if No (Ent) then
!             Val := Char_Literal_Value (N);
           else
              Val := Enumeration_Pos (Ent);
           end if;
*************** package body Sem_Eval is
*** 3124,3130 ****
        Valr : Ureal;
  
     begin
!       --  Universal types have no range limits, so always in range.
  
        if Typ = Universal_Integer or else Typ = Universal_Real then
           return True;
--- 3226,3232 ----
        Valr : Ureal;
  
     begin
!       --  Universal types have no range limits, so always in range
  
        if Typ = Universal_Integer or else Typ = Universal_Real then
           return True;
*************** package body Sem_Eval is
*** 3135,3141 ****
        elsif not Is_Scalar_Type (Typ) then
           return False;
  
!       --  Never in range unless we have a compile time known value.
  
        elsif not Compile_Time_Known_Value (N) then
           return False;
--- 3237,3243 ----
        elsif not Is_Scalar_Type (Typ) then
           return False;
  
!       --  Never in range unless we have a compile time known value
  
        elsif not Compile_Time_Known_Value (N) then
           return False;
*************** package body Sem_Eval is
*** 3305,3311 ****
        Valr : Ureal;
  
     begin
!       --  Universal types have no range limits, so always in range.
  
        if Typ = Universal_Integer or else Typ = Universal_Real then
           return False;
--- 3407,3413 ----
        Valr : Ureal;
  
     begin
!       --  Universal types have no range limits, so always in range
  
        if Typ = Universal_Integer or else Typ = Universal_Real then
           return False;
*************** package body Sem_Eval is
*** 3394,3400 ****
     -- Is_Static_Subtype --
     -----------------------
  
!    --  Determines if Typ is a static subtype as defined in (RM 4.9(26)).
  
     function Is_Static_Subtype (Typ : Entity_Id) return Boolean is
        Base_T   : constant Entity_Id := Base_Type (Typ);
--- 3496,3502 ----
     -- Is_Static_Subtype --
     -----------------------
  
!    --  Determines if Typ is a static subtype as defined in (RM 4.9(26))
  
     function Is_Static_Subtype (Typ : Entity_Id) return Boolean is
        Base_T   : constant Entity_Id := Base_Type (Typ);
*************** package body Sem_Eval is
*** 3505,3511 ****
        if Is_Static_Expression (N)
          and then not In_Instance
          and then not In_Inlined_Body
!         and then Ada_95
        then
           if Nkind (Parent (N)) = N_Defining_Identifier
             and then Is_Array_Type (Parent (N))
--- 3607,3613 ----
        if Is_Static_Expression (N)
          and then not In_Instance
          and then not In_Inlined_Body
!         and then Ada_Version >= Ada_95
        then
           if Nkind (Parent (N)) = N_Defining_Identifier
             and then Is_Array_Type (Parent (N))
*************** package body Sem_Eval is
*** 3711,3716 ****
--- 3813,3828 ----
                        or else Comes_From_Source (T2))
           then
              return False;
+ 
+          --  A generic scalar type does not statically match its base
+          --  type (AI-311). In this case we make sure that the formals,
+          --  which are first subtypes of their bases, are constrained.
+ 
+          elsif Is_Generic_Type (T1)
+            and then Is_Generic_Type (T2)
+            and then (Is_Constrained (T1) /= Is_Constrained (T2))
+          then
+             return False;
           end if;
  
           --  If there was an error in either range, then just assume
*************** package body Sem_Eval is
*** 3822,3828 ****
  
           return True;
  
!       --  A definite type does not match an indefinite or classwide type.
  
        elsif
           Has_Unknown_Discriminants (T1) /= Has_Unknown_Discriminants (T2)
--- 3934,3940 ----
  
           return True;
  
!       --  A definite type does not match an indefinite or classwide type
  
        elsif
           Has_Unknown_Discriminants (T1) /= Has_Unknown_Discriminants (T2)
*************** package body Sem_Eval is
*** 4002,4008 ****
           Fold := False;
           return;
  
!       --  Exclude expressions of a generic modular type, as above.
  
        elsif Is_Modular_Integer_Type (Etype (Op1))
          and then Is_Generic_Type (Etype (Op1))
--- 4114,4120 ----
           Fold := False;
           return;
  
!       --  Exclude expressions of a generic modular type, as above
  
        elsif Is_Modular_Integer_Type (Etype (Op1))
          and then Is_Generic_Type (Etype (Op1))
diff -Nrcpad gcc-3.4.3/gcc/ada/sem_eval.ads gcc-4.0.0/gcc/ada/sem_eval.ads
*** gcc-3.4.3/gcc/ada/sem_eval.ads	Tue Oct 21 13:42:20 2003
--- gcc-4.0.0/gcc/ada/sem_eval.ads	Thu Feb 10 13:57:01 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Sem_Eval is
*** 100,106 ****
     --  When we are trying to perform compile time constant folding (for
     --  instance for expressions such as 'C + 1', Is_Static_Expression or
     --  Is_OK_Static_Expression are not the right functions to test to see
!    --  if folding is possible. Instead, we use Compile_Time_Know_Value.
     --  All static expressions that do not raise constraint error (i.e.
     --  those for which Is_OK_Static_Expression is true) are known at
     --  compile time, but as shown by the above example, there are cases
--- 100,106 ----
     --  When we are trying to perform compile time constant folding (for
     --  instance for expressions such as 'C + 1', Is_Static_Expression or
     --  Is_OK_Static_Expression are not the right functions to test to see
!    --  if folding is possible. Instead, we use Compile_Time_Known_Value.
     --  All static expressions that do not raise constraint error (i.e.
     --  those for which Is_OK_Static_Expression is true) are known at
     --  compile time, but as shown by the above example, there are cases
*************** package Sem_Eval is
*** 268,273 ****
--- 268,274 ----
     procedure Eval_Actual                 (N : Node_Id);
     procedure Eval_Allocator              (N : Node_Id);
     procedure Eval_Arithmetic_Op          (N : Node_Id);
+    procedure Eval_Call                   (N : Node_Id);
     procedure Eval_Character_Literal      (N : Node_Id);
     procedure Eval_Concatenation          (N : Node_Id);
     procedure Eval_Conditional_Expression (N : Node_Id);
*************** private
*** 410,416 ****
     pragma Inline (Eval_Character_Literal);
     pragma Inline (Eval_Conditional_Expression);
     pragma Inline (Eval_Indexed_Component);
-    pragma Inline (Eval_Integer_Literal);
     pragma Inline (Eval_Named_Integer);
     pragma Inline (Eval_Named_Real);
     pragma Inline (Eval_Real_Literal);
--- 411,416 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/sem_prag.adb gcc-4.0.0/gcc/ada/sem_prag.adb
*** gcc-3.4.3/gcc/ada/sem_prag.adb	Fri Mar 19 11:19:35 2004
--- gcc-4.0.0/gcc/ada/sem_prag.adb	Thu Feb 10 13:50:26 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Debug;    use Debug;
*** 37,45 ****
  with Einfo;    use Einfo;
  with Elists;   use Elists;
  with Errout;   use Errout;
- with Expander; use Expander;
  with Exp_Dist; use Exp_Dist;
- with Fname;    use Fname;
  with Hostparm; use Hostparm;
  with Lib;      use Lib;
  with Lib.Writ; use Lib.Writ;
--- 37,43 ----
*************** with Nmake;    use Nmake;
*** 50,55 ****
--- 48,54 ----
  with Opt;      use Opt;
  with Output;   use Output;
  with Restrict; use Restrict;
+ with Rident;   use Rident;
  with Rtsfind;  use Rtsfind;
  with Sem;      use Sem;
  with Sem_Ch3;  use Sem_Ch3;
*************** with Sinput;   use Sinput;
*** 71,76 ****
--- 70,76 ----
  with Snames;   use Snames;
  with Stringt;  use Stringt;
  with Stylesw;  use Stylesw;
+ with Table;
  with Targparm; use Targparm;
  with Tbuild;   use Tbuild;
  with Ttypes;
*************** package body Sem_Prag is
*** 137,142 ****
--- 137,162 ----
     --  design and implementation and are intended to be fully compatible
     --  with the use of these pragmas in the DEC Ada compiler.
  
+    --------------------------------------------
+    -- Checking for Duplicated External Names --
+    --------------------------------------------
+ 
+    --  It is suspicious if two separate Export pragmas use the same external
+    --  name. The following table is used to diagnose this situation so that
+    --  an appropriate warning can be issued.
+ 
+    --  The Node_Id stored is for the N_String_Literal node created to
+    --  hold the value of the external name. The Sloc of this node is
+    --  used to cross-reference the location of the duplication.
+ 
+    package Externals is new Table.Table (
+      Table_Component_Type => Node_Id,
+      Table_Index_Type     => Int,
+      Table_Low_Bound      => 0,
+      Table_Initial        => 100,
+      Table_Increment      => 100,
+      Table_Name           => "Name_Externals");
+ 
     -------------------------------------
     -- Local Subprograms and Variables --
     -------------------------------------
*************** package body Sem_Prag is
*** 243,248 ****
--- 263,274 ----
        --  in which case the check is applied to the expression of the
        --  association or an expression directly.
  
+       procedure Check_Arg_Is_External_Name (Arg : Node_Id);
+       --  Check that an argument has the right form for an EXTERNAL_NAME
+       --  parameter of an extended import/export pragma. The rule is that
+       --  the name must be an identifier or string literal (in Ada 83 mode)
+       --  or a static string expression (in Ada 95 mode).
+ 
        procedure Check_Arg_Is_Identifier (Arg : Node_Id);
        --  Check the specified argument Arg to make sure that it is an
        --  identifier. If not give error and raise Pragma_Exit.
*************** package body Sem_Prag is
*** 301,306 ****
--- 327,342 ----
        procedure Check_At_Most_N_Arguments (N : Nat);
        --  Check there are no more than N arguments present
  
+       procedure Check_Component (Comp : Node_Id);
+       --  Examine Unchecked_Union component for correct use of per-object
+       --  constrained subtypes.
+ 
+       procedure Check_Duplicated_Export_Name (Nam : Node_Id);
+       --  Nam is an N_String_Literal node containing the external name set
+       --  by an Import or Export pragma (or extended Import or Export pragma).
+       --  This procedure checks for possible duplications if this is the
+       --  export case, and if found, issues an appropriate error message.
+ 
        procedure Check_First_Subtype (Arg : Node_Id);
        --  Checks that Arg, whose expression is an entity name referencing
        --  a subtype, does not reference a type that is not a first subtype.
*************** package body Sem_Prag is
*** 358,363 ****
--- 394,403 ----
        --  and to library level instantiations), and they are simply ignored,
        --  which is implemented by rewriting them as null statements.
  
+       procedure Check_Variant (Variant : Node_Id);
+       --  Check Unchecked_Union variant for lack of nested variants and
+       --  presence of at least one component.
+ 
        procedure Error_Pragma (Msg : String);
        pragma No_Return (Error_Pragma);
        --  Outputs error message for current pragma. The message contains an %
*************** package body Sem_Prag is
*** 522,528 ****
        --  is set to the default from the subprogram name.
  
        procedure Process_Interrupt_Or_Attach_Handler;
!       --  Attach the pragmas to the rep item chain.
  
        procedure Process_Suppress_Unsuppress (Suppress_Case : Boolean);
        --  Common processing for Suppress and Unsuppress. The boolean parameter
--- 562,571 ----
        --  is set to the default from the subprogram name.
  
        procedure Process_Interrupt_Or_Attach_Handler;
!       --  Common processing for Interrupt and Attach_Handler pragmas
! 
!       procedure Process_Restrictions_Or_Restriction_Warnings;
!       --  Common processing for Restrictions and Restriction_Warnings pragmas
  
        procedure Process_Suppress_Unsuppress (Suppress_Case : Boolean);
        --  Common processing for Suppress and Unsuppress. The boolean parameter
*************** package body Sem_Prag is
*** 557,569 ****
        --  argument has the right form then the Mechanism field of Ent is
        --  set appropriately.
  
        --------------------------
        -- Check_Ada_83_Warning --
        --------------------------
  
        procedure Check_Ada_83_Warning is
        begin
!          if Ada_83 and then Comes_From_Source (N) then
              Error_Msg_N ("(Ada 83) pragma& is non-standard?", N);
           end if;
        end Check_Ada_83_Warning;
--- 600,618 ----
        --  argument has the right form then the Mechanism field of Ent is
        --  set appropriately.
  
+       procedure Set_Ravenscar_Profile (N : Node_Id);
+       --  Activate the set of configuration pragmas and restrictions that
+       --  make up the Ravenscar Profile. N is the corresponding pragma
+       --  node, which is used for error messages on any constructs
+       --  that violate the profile.
+ 
        --------------------------
        -- Check_Ada_83_Warning --
        --------------------------
  
        procedure Check_Ada_83_Warning is
        begin
!          if Ada_Version = Ada_83 and then Comes_From_Source (N) then
              Error_Msg_N ("(Ada 83) pragma& is non-standard?", N);
           end if;
        end Check_Ada_83_Warning;
*************** package body Sem_Prag is
*** 579,591 ****
           end if;
        end Check_Arg_Count;
  
        -----------------------------
        -- Check_Arg_Is_Identifier --
        -----------------------------
  
        procedure Check_Arg_Is_Identifier (Arg : Node_Id) is
           Argx : constant Node_Id := Get_Pragma_Arg (Arg);
- 
        begin
           if Nkind (Argx) /= N_Identifier then
              Error_Pragma_Arg
--- 628,688 ----
           end if;
        end Check_Arg_Count;
  
+       --------------------------------
+       -- Check_Arg_Is_External_Name --
+       --------------------------------
+ 
+       procedure Check_Arg_Is_External_Name (Arg : Node_Id) is
+          Argx : constant Node_Id := Get_Pragma_Arg (Arg);
+ 
+       begin
+          if Nkind (Argx) = N_Identifier then
+             return;
+ 
+          else
+             Analyze_And_Resolve (Argx, Standard_String);
+ 
+             if Is_OK_Static_Expression (Argx) then
+                return;
+ 
+             elsif Etype (Argx) = Any_Type then
+                raise Pragma_Exit;
+ 
+             --  An interesting special case, if we have a string literal and
+             --  we are in Ada 83 mode, then we allow it even though it will
+             --  not be flagged as static. This allows expected Ada 83 mode
+             --  use of external names which are string literals, even though
+             --  technically these are not static in Ada 83.
+ 
+             elsif Ada_Version = Ada_83
+               and then Nkind (Argx) = N_String_Literal
+             then
+                return;
+ 
+             --  Static expression that raises Constraint_Error. This has
+             --  already been flagged, so just exit from pragma processing.
+ 
+             elsif Is_Static_Expression (Argx) then
+                raise Pragma_Exit;
+ 
+             --  Here we have a real error (non-static expression)
+ 
+             else
+                Error_Msg_Name_1 := Chars (N);
+                Flag_Non_Static_Expr
+                  ("argument for pragma% must be a identifier or " &
+                   "static string expression!", Argx);
+                raise Pragma_Exit;
+             end if;
+          end if;
+       end Check_Arg_Is_External_Name;
+ 
        -----------------------------
        -- Check_Arg_Is_Identifier --
        -----------------------------
  
        procedure Check_Arg_Is_Identifier (Arg : Node_Id) is
           Argx : constant Node_Id := Get_Pragma_Arg (Arg);
        begin
           if Nkind (Argx) /= N_Identifier then
              Error_Pragma_Arg
*************** package body Sem_Prag is
*** 599,605 ****
  
        procedure Check_Arg_Is_Integer_Literal (Arg : Node_Id) is
           Argx : constant Node_Id := Get_Pragma_Arg (Arg);
- 
        begin
           if Nkind (Argx) /= N_Integer_Literal then
              Error_Pragma_Arg
--- 696,701 ----
*************** package body Sem_Prag is
*** 752,758 ****
           --  pragmas like Import in Ada 83 mode. They will of course be
           --  flagged with warnings as usual, but will not cause errors.
  
!          elsif Ada_83 and then Nkind (Argx) = N_String_Literal then
              return;
  
           --  Static expression that raises Constraint_Error. This has
--- 848,856 ----
           --  pragmas like Import in Ada 83 mode. They will of course be
           --  flagged with warnings as usual, but will not cause errors.
  
!          elsif Ada_Version = Ada_83
!            and then Nkind (Argx) = N_String_Literal
!          then
              return;
  
           --  Static expression that raises Constraint_Error. This has
*************** package body Sem_Prag is
*** 777,789 ****
  
        procedure Check_Arg_Is_String_Literal (Arg : Node_Id) is
           Argx : constant Node_Id := Get_Pragma_Arg (Arg);
- 
        begin
           if Nkind (Argx) /= N_String_Literal then
              Error_Pragma_Arg
                ("argument for pragma% must be string literal", Argx);
           end if;
- 
        end Check_Arg_Is_String_Literal;
  
        ------------------------------------------
--- 875,885 ----
*************** package body Sem_Prag is
*** 819,829 ****
  
        procedure Check_At_Most_N_Arguments (N : Nat) is
           Arg : Node_Id;
- 
        begin
           if Arg_Count > N then
              Arg := Arg1;
- 
              for J in 1 .. N loop
                 Next (Arg);
                 Error_Pragma_Arg ("too many arguments for pragma%", Arg);
--- 915,923 ----
*************** package body Sem_Prag is
*** 831,843 ****
           end if;
        end Check_At_Most_N_Arguments;
  
        -------------------------
        -- Check_First_Subtype --
        -------------------------
  
        procedure Check_First_Subtype (Arg : Node_Id) is
           Argx : constant Node_Id := Get_Pragma_Arg (Arg);
- 
        begin
           if not Is_First_Subtype (Entity (Argx)) then
              Error_Pragma_Arg
--- 925,999 ----
           end if;
        end Check_At_Most_N_Arguments;
  
+       ---------------------
+       -- Check_Component --
+       ---------------------
+ 
+       procedure Check_Component (Comp : Node_Id) is
+       begin
+          if Nkind (Comp) = N_Component_Declaration then
+             declare
+                Sindic : constant Node_Id :=
+                           Subtype_Indication (Component_Definition (Comp));
+ 
+             begin
+                if Nkind (Sindic) = N_Subtype_Indication then
+ 
+                   --  Ada 2005 (AI-216): If a component subtype is subject to
+                   --  a per-object constraint, then the component type shall
+                   --  be an Unchecked_Union.
+ 
+                   if Has_Per_Object_Constraint (Defining_Identifier (Comp))
+                     and then
+                       not Is_Unchecked_Union (Etype (Subtype_Mark (Sindic)))
+                   then
+                      Error_Msg_N ("component subtype subject to per-object" &
+                        " constraint must be an Unchecked_Union", Comp);
+                   end if;
+                end if;
+             end;
+          end if;
+       end Check_Component;
+ 
+       ----------------------------------
+       -- Check_Duplicated_Export_Name --
+       ----------------------------------
+ 
+       procedure Check_Duplicated_Export_Name (Nam : Node_Id) is
+          String_Val : constant String_Id := Strval (Nam);
+ 
+       begin
+          --  We are only interested in the export case, and in the case of
+          --  generics, it is the instance, not the template, that is the
+          --  problem (the template will generate a warning in any case).
+ 
+          if not Inside_A_Generic
+            and then (Prag_Id = Pragma_Export
+                        or else
+                      Prag_Id = Pragma_Export_Procedure
+                        or else
+                      Prag_Id = Pragma_Export_Valued_Procedure
+                        or else
+                      Prag_Id = Pragma_Export_Function)
+          then
+             for J in Externals.First .. Externals.Last loop
+                if String_Equal (String_Val, Strval (Externals.Table (J))) then
+                   Error_Msg_Sloc := Sloc (Externals.Table (J));
+                   Error_Msg_N ("external name duplicates name given#", Nam);
+                   exit;
+                end if;
+             end loop;
+ 
+             Externals.Append (Nam);
+          end if;
+       end Check_Duplicated_Export_Name;
+ 
        -------------------------
        -- Check_First_Subtype --
        -------------------------
  
        procedure Check_First_Subtype (Arg : Node_Id) is
           Argx : constant Node_Id := Get_Pragma_Arg (Arg);
        begin
           if not Is_First_Subtype (Entity (Argx)) then
              Error_Pragma_Arg
*************** package body Sem_Prag is
*** 884,890 ****
                ("argument of pragma% must be entity name", Arg1);
  
           elsif Prag_Id = Pragma_Interrupt_Handler then
!             Check_Restriction (No_Dynamic_Interrupts, N);
           end if;
  
           declare
--- 1040,1046 ----
                ("argument of pragma% must be entity name", Arg1);
  
           elsif Prag_Id = Pragma_Interrupt_Handler then
!             Check_Restriction (No_Dynamic_Attachment, N);
           end if;
  
           declare
*************** package body Sem_Prag is
*** 1038,1048 ****
  
        procedure Check_No_Identifiers is
           Arg_Node : Node_Id;
- 
        begin
           if Arg_Count > 0 then
              Arg_Node := Arg1;
- 
              while Present (Arg_Node) loop
                 Check_No_Identifier (Arg_Node);
                 Next (Arg_Node);
--- 1194,1202 ----
*************** package body Sem_Prag is
*** 1120,1127 ****
  
              when N_Index_Or_Discriminant_Constraint =>
                 declare
!                   IDC : Entity_Id := First (Constraints (Constr));
                 begin
                    while Present (IDC) loop
                       Check_Static_Constraint (IDC);
                       Next (IDC);
--- 1274,1282 ----
  
              when N_Index_Or_Discriminant_Constraint =>
                 declare
!                   IDC : Entity_Id;
                 begin
+                   IDC := First (Constraints (Constr));
                    while Present (IDC) loop
                       Check_Static_Constraint (IDC);
                       Next (IDC);
*************** package body Sem_Prag is
*** 1292,1297 ****
--- 1447,1481 ----
           end if;
        end Check_Valid_Library_Unit_Pragma;
  
+       -------------------
+       -- Check_Variant --
+       -------------------
+ 
+       procedure Check_Variant (Variant : Node_Id) is
+          Clist : constant Node_Id := Component_List (Variant);
+          Comp  : Node_Id;
+ 
+       begin
+          if Present (Variant_Part (Clist)) then
+             Error_Msg_N
+               ("Unchecked_Union may not have nested variants",
+                Variant_Part (Clist));
+          end if;
+ 
+          if not Is_Non_Empty_List (Component_Items (Clist)) then
+             Error_Msg_N
+               ("Unchecked_Union may not have empty component list",
+                Variant);
+             return;
+          end if;
+ 
+          Comp := First (Component_Items (Clist));
+          while Present (Comp) loop
+             Check_Component (Comp);
+             Next (Comp);
+          end loop;
+       end Check_Variant;
+ 
        ------------------
        -- Error_Pragma --
        ------------------
*************** package body Sem_Prag is
*** 1415,1421 ****
           --  Otherwise first deal with any positional parameters present
  
           Arg := First (Pragma_Argument_Associations (N));
- 
           for Index in Args'Range loop
              exit when No (Arg) or else Chars (Arg) /= No_Name;
              Args (Index) := Expression (Arg);
--- 1599,1604 ----
*************** package body Sem_Prag is
*** 1587,1592 ****
--- 1770,1796 ----
           K    : Node_Kind;
           Utyp : Entity_Id;
  
+          procedure Set_Atomic (E : Entity_Id);
+          --  Set given type as atomic, and if no explicit alignment was
+          --  given, set alignment to unknown, since back end knows what
+          --  the alignment requirements are for atomic arrays. Note that
+          --  this step is necessary for derived types.
+ 
+          ----------------
+          -- Set_Atomic --
+          ----------------
+ 
+          procedure Set_Atomic (E : Entity_Id) is
+          begin
+             Set_Is_Atomic (E);
+ 
+             if not Has_Alignment_Clause (E) then
+                Set_Alignment (E, Uint_0);
+             end if;
+          end Set_Atomic;
+ 
+       --  Start of processing for Process_Atomic_Shared_Volatile
+ 
        begin
           Check_Ada_83_Warning;
           Check_No_Identifiers;
*************** package body Sem_Prag is
*** 1613,1620 ****
              end if;
  
              if Prag_Id /= Pragma_Volatile then
!                Set_Is_Atomic (E);
!                Set_Is_Atomic (Underlying_Type (E));
              end if;
  
              --  Attribute belongs on the base type. If the
--- 1817,1825 ----
              end if;
  
              if Prag_Id /= Pragma_Volatile then
!                Set_Atomic (E);
!                Set_Atomic (Underlying_Type (E));
!                Set_Atomic (Base_Type (E));
              end if;
  
              --  Attribute belongs on the base type. If the
*************** package body Sem_Prag is
*** 1688,1695 ****
        is
           Id        : Node_Id;
           E1        : Entity_Id;
-          Comp_Unit : Unit_Number_Type;
           Cname     : Name_Id;
  
           procedure Set_Convention_From_Pragma (E : Entity_Id);
           --  Set convention in entity E, and also flag that the entity has a
--- 1893,1900 ----
        is
           Id        : Node_Id;
           E1        : Entity_Id;
           Cname     : Name_Id;
+          Comp_Unit : Unit_Number_Type;
  
           procedure Set_Convention_From_Pragma (E : Entity_Id);
           --  Set convention in entity E, and also flag that the entity has a
*************** package body Sem_Prag is
*** 1804,1819 ****
  
           --  Go to renamed subprogram if present, since convention applies
           --  to the actual renamed entity, not to the renaming entity.
  
           if Is_Subprogram (E)
             and then Present (Alias (E))
-            and then Nkind (Parent (Declaration_Node (E))) =
-                       N_Subprogram_Renaming_Declaration
           then
!             E := Alias (E);
           end if;
  
!          --  Check that we not applying this to a specless body
  
           if Is_Subprogram (E)
             and then Nkind (Parent (Declaration_Node (E))) = N_Subprogram_Body
--- 2009,2032 ----
  
           --  Go to renamed subprogram if present, since convention applies
           --  to the actual renamed entity, not to the renaming entity.
+          --  If subprogram is inherited, go to parent subprogram.
  
           if Is_Subprogram (E)
             and then Present (Alias (E))
           then
!             if Nkind (Parent (Declaration_Node (E)))
!               = N_Subprogram_Renaming_Declaration
!             then
!                E := Alias (E);
! 
!             elsif Nkind (Parent (E)) = N_Full_Type_Declaration
!               and then Scope (E) = Scope (Alias (E))
!             then
!                E := Alias (E);
!             end if;
           end if;
  
!          --  Check that we are not applying this to a specless body
  
           if Is_Subprogram (E)
             and then Nkind (Parent (Declaration_Node (E))) = N_Subprogram_Body
*************** package body Sem_Prag is
*** 1904,1912 ****
              end if;
  
           --  For the subprogram case, set proper convention for all homonyms
!          --  in same compilation unit.
!          --  Is the test of compilation unit really necessary ???
!          --  What about subprogram renamings here???
  
           else
              Comp_Unit := Get_Source_Unit (E);
--- 2117,2124 ----
              end if;
  
           --  For the subprogram case, set proper convention for all homonyms
!          --  in same scope and the same declarative part, i.e. the same
!          --  compilation unit.
  
           else
              Comp_Unit := Get_Source_Unit (E);
*************** package body Sem_Prag is
*** 1927,1933 ****
                 --  That is deliberate, we cannot chain the rep item on more
                 --  than one Rep_Item chain, to be fixed later ???
  
!                if Comp_Unit = Get_Source_Unit (E1) then
                    Set_Convention_From_Pragma (E1);
  
                    if Prag_Id = Pragma_Import then
--- 2139,2149 ----
                 --  That is deliberate, we cannot chain the rep item on more
                 --  than one Rep_Item chain, to be fixed later ???
  
!                if Comes_From_Source (E1)
!                  and then Comp_Unit = Get_Source_Unit (E1)
!                  and then Nkind (Original_Node (Parent (E1))) /=
!                    N_Full_Type_Declaration
!                then
                    Set_Convention_From_Pragma (E1);
  
                    if Prag_Id = Pragma_Import then
*************** package body Sem_Prag is
*** 2057,2065 ****
                ("pragma% must designate an object", Arg_Internal);
           end if;
  
!          if Is_Psected (Def_Id) then
              Error_Pragma_Arg
!               ("previous Psect_Object applies, pragma % not permitted",
                 Arg_Internal);
           end if;
  
--- 2273,2284 ----
                ("pragma% must designate an object", Arg_Internal);
           end if;
  
!          if Has_Rep_Pragma (Def_Id, Name_Common_Object)
!               or else
!             Has_Rep_Pragma (Def_Id, Name_Psect_Object)
!          then
              Error_Pragma_Arg
!               ("previous Common/Psect_Object applies, pragma % not permitted",
                 Arg_Internal);
           end if;
  
*************** package body Sem_Prag is
*** 2069,2081 ****
  
           Set_Extended_Import_Export_External_Name (Def_Id, Arg_External);
  
!          if Present (Arg_Size)
!            and then Nkind (Arg_Size) /= N_Identifier
!            and then Nkind (Arg_Size) /= N_String_Literal
!          then
!             Error_Pragma_Arg
!               ("pragma% Size argument must be identifier or string literal",
!                Arg_Size);
           end if;
  
           --  Export_Object case
--- 2288,2295 ----
  
           Set_Extended_Import_Export_External_Name (Def_Id, Arg_External);
  
!          if Present (Arg_Size) then
!             Check_Arg_Is_External_Name (Arg_Size);
           end if;
  
           --  Export_Object case
*************** package body Sem_Prag is
*** 2245,2256 ****
  
        begin
           Process_Extended_Import_Export_Internal_Arg (Arg_Internal);
-          Hom_Id := Entity (Arg_Internal);
           Ent := Empty;
           Ambiguous := False;
  
!          --  Loop through homonyms (overloadings) of Hom_Id
  
           while Present (Hom_Id) loop
              Def_Id := Get_Base_Subprogram (Hom_Id);
  
--- 2459,2470 ----
  
        begin
           Process_Extended_Import_Export_Internal_Arg (Arg_Internal);
           Ent := Empty;
           Ambiguous := False;
  
!          --  Loop through homonyms (overloadings) of the entity
  
+          Hom_Id := Entity (Arg_Internal);
           while Present (Hom_Id) loop
              Def_Id := Get_Base_Subprogram (Hom_Id);
  
*************** package body Sem_Prag is
*** 2329,2335 ****
                         and then Paren_Count (Arg_Parameter_Types) = 0
                       then
                          Ptype := First (Expressions (Arg_Parameter_Types));
- 
                          while Present (Ptype) or else Present (Formal) loop
                             if No (Ptype)
                               or else No (Formal)
--- 2543,2548 ----
*************** package body Sem_Prag is
*** 2508,2513 ****
--- 2721,2727 ----
                    --  Deal with positional ones first
  
                    Formal := First_Formal (Ent);
+ 
                    if Present (Expressions (Arg_Mechanism)) then
                       Mname := First (Expressions (Arg_Mechanism));
  
*************** package body Sem_Prag is
*** 2688,2696 ****
  
              else
                 Set_Imported (Def_Id);
-                Set_Is_Public (Def_Id);
                 Process_Interface_Name (Def_Id, Arg3, Arg4);
  
                 --  It is not possible to import a constant of an unconstrained
                 --  array type (e.g. string) because there is no simple way to
                 --  write a meaningful subtype for it.
--- 2902,2920 ----
  
              else
                 Set_Imported (Def_Id);
                 Process_Interface_Name (Def_Id, Arg3, Arg4);
  
+                --  Note that we do not set Is_Public here. That's because we
+                --  only want to set if if there is no address clause, and we
+                --  don't know that yet, so we delay that processing till
+                --  freeze time.
+ 
+                --  pragma Import completes deferred constants
+ 
+                if Ekind (Def_Id) = E_Constant then
+                   Set_Has_Completion (Def_Id);
+                end if;
+ 
                 --  It is not possible to import a constant of an unconstrained
                 --  array type (e.g. string) because there is no simple way to
                 --  write a meaningful subtype for it.
*************** package body Sem_Prag is
*** 2711,2717 ****
              --  denoted entities in the same declarative part.
  
              Hom_Id := Def_Id;
- 
              while Present (Hom_Id) loop
                 Def_Id := Get_Base_Subprogram (Hom_Id);
  
--- 2935,2940 ----
*************** package body Sem_Prag is
*** 2742,2759 ****
                 else
                    Set_Imported (Def_Id);
  
!                   --  If Import intrinsic, set intrinsic flag
!                   --  and verify that it is known as such.
  
                    if C = Convention_Intrinsic then
                       Set_Is_Intrinsic_Subprogram (Def_Id);
!                      Check_Intrinsic_Subprogram
!                        (Def_Id, Expression (Arg2));
                    end if;
  
!                   --  All interfaced procedures need an external
!                   --  symbol created for them since they are
!                   --  always referenced from another object file.
  
                    Set_Is_Public (Def_Id);
  
--- 2965,3003 ----
                 else
                    Set_Imported (Def_Id);
  
!                   --  Special processing for Convention_Intrinsic
  
                    if C = Convention_Intrinsic then
+ 
+                      --  Link_Name argument not allowed for intrinsic
+ 
+                      if Present (Arg3)
+                        and then Chars (Arg3) = Name_Link_Name
+                      then
+                         Arg4 := Arg3;
+                      end if;
+ 
+                      if Present (Arg4) then
+                         Error_Pragma_Arg
+                           ("Link_Name argument not allowed for " &
+                            "Import Intrinsic",
+                            Arg4);
+                      end if;
+ 
                       Set_Is_Intrinsic_Subprogram (Def_Id);
! 
!                      --  If no external name is present, then check that
!                      --  this is a valid intrinsic subprogram. If an external
!                      --  name is present, then this is handled by the back end.
! 
!                      if No (Arg3) then
!                         Check_Intrinsic_Subprogram (Def_Id, Expression (Arg2));
!                      end if;
                    end if;
  
!                   --  All interfaced procedures need an external symbol
!                   --  created for them since they are always referenced
!                   --  from another object file.
  
                    Set_Is_Public (Def_Id);
  
*************** package body Sem_Prag is
*** 2802,2810 ****
           --  for packages, exceptions, and record components.
  
           elsif C = Convention_Java
!            and then (Ekind (Def_Id) = E_Package
!                      or else Ekind (Def_Id) = E_Exception
!                      or else Nkind (Parent (Def_Id)) = N_Component_Declaration)
           then
              Set_Imported (Def_Id);
              Set_Is_Public (Def_Id);
--- 3046,3055 ----
           --  for packages, exceptions, and record components.
  
           elsif C = Convention_Java
!            and then
!              (Ekind (Def_Id) = E_Package
!                 or else Ekind (Def_Id) = E_Exception
!                 or else Nkind (Parent (Def_Id)) = N_Component_Declaration)
           then
              Set_Imported (Def_Id);
              Set_Is_Public (Def_Id);
*************** package body Sem_Prag is
*** 2834,2844 ****
        --------------------
  
        procedure Process_Inline (Active : Boolean) is
!          Assoc   : Node_Id;
!          Decl    : Node_Id;
!          Subp_Id : Node_Id;
!          Subp    : Entity_Id;
!          Applies : Boolean;
  
           procedure Make_Inline (Subp : Entity_Id);
           --  Subp is the defining unit name of the subprogram
--- 3079,3090 ----
        --------------------
  
        procedure Process_Inline (Active : Boolean) is
!          Assoc     : Node_Id;
!          Decl      : Node_Id;
!          Subp_Id   : Node_Id;
!          Subp      : Entity_Id;
!          Applies   : Boolean;
!          Effective : Boolean := False;
  
           procedure Make_Inline (Subp : Entity_Id);
           --  Subp is the defining unit name of the subprogram
*************** package body Sem_Prag is
*** 2848,2895 ****
           procedure Set_Inline_Flags (Subp : Entity_Id);
           --  Sets Is_Inlined and Has_Pragma_Inline flags for Subp
  
!          function Back_End_Cannot_Inline (Subp : Entity_Id) return Boolean;
!          --  Do not set the inline flag if body is available and contains
!          --  exception handlers, to prevent undefined symbols at link time.
  
!          ----------------------------
!          -- Back_End_Cannot_Inline --
!          ----------------------------
  
!          function Back_End_Cannot_Inline (Subp : Entity_Id) return Boolean is
!             Decl : constant Node_Id := Unit_Declaration_Node (Subp);
  
           begin
              if Nkind (Decl) = N_Subprogram_Body then
!                return
!                  Present
!                    (Exception_Handlers (Handled_Statement_Sequence (Decl)));
  
              elsif Nkind (Decl) = N_Subprogram_Declaration
                and then Present (Corresponding_Body (Decl))
              then
                 --  If the subprogram is a renaming as body, the body is
                 --  just a call to the renamed subprogram, and inlining is
                 --  trivially possible.
  
!                if Nkind (Unit_Declaration_Node (Corresponding_Body (Decl))) =
!                                             N_Subprogram_Renaming_Declaration
                 then
                    return False;
  
                 else
                    return
!                     Present (Exception_Handlers
!                       (Handled_Statement_Sequence
!                         (Unit_Declaration_Node (Corresponding_Body (Decl)))));
                 end if;
              else
                 --  If body is not available, assume the best, the check is
                 --  performed again when compiling enclosing package bodies.
  
                 return False;
              end if;
!          end Back_End_Cannot_Inline;
  
           -----------------
           -- Make_Inline --
--- 3094,3159 ----
           procedure Set_Inline_Flags (Subp : Entity_Id);
           --  Sets Is_Inlined and Has_Pragma_Inline flags for Subp
  
!          function Inlining_Not_Possible (Subp : Entity_Id) return Boolean;
!          --  Returns True if it can be determined at this stage that inlining
!          --  is not possible, for examle if the body is available and contains
!          --  exception handlers, we prevent inlining, since otherwise we can
!          --  get undefined symbols at link time. This function also emits a
!          --  warning if front-end inlining is enabled and the pragma appears
!          --  too late.
!          --  ??? is business with link symbols still valid, or does it relate
!          --  to front end ZCX which is being phased out ???
  
!          ---------------------------
!          -- Inlining_Not_Possible --
!          ---------------------------
  
!          function Inlining_Not_Possible (Subp : Entity_Id) return Boolean is
!             Decl  : constant Node_Id := Unit_Declaration_Node (Subp);
!             Stats : Node_Id;
  
           begin
              if Nkind (Decl) = N_Subprogram_Body then
!                Stats := Handled_Statement_Sequence (Decl);
!                return Present (Exception_Handlers (Stats))
!                  or else Present (At_End_Proc (Stats));
  
              elsif Nkind (Decl) = N_Subprogram_Declaration
                and then Present (Corresponding_Body (Decl))
              then
+                if Front_End_Inlining
+                  and then Analyzed (Corresponding_Body (Decl))
+                then
+                   Error_Msg_N ("pragma appears too late, ignored?", N);
+                   return True;
+ 
                 --  If the subprogram is a renaming as body, the body is
                 --  just a call to the renamed subprogram, and inlining is
                 --  trivially possible.
  
!                elsif
!                  Nkind (Unit_Declaration_Node (Corresponding_Body (Decl)))
!                    = N_Subprogram_Renaming_Declaration
                 then
                    return False;
  
                 else
+                   Stats :=
+                     Handled_Statement_Sequence
+                         (Unit_Declaration_Node (Corresponding_Body (Decl)));
+ 
                    return
!                     Present (Exception_Handlers (Stats))
!                       or else Present (At_End_Proc (Stats));
                 end if;
+ 
              else
                 --  If body is not available, assume the best, the check is
                 --  performed again when compiling enclosing package bodies.
  
                 return False;
              end if;
!          end Inlining_Not_Possible;
  
           -----------------
           -- Make_Inline --
*************** package body Sem_Prag is
*** 2903,2910 ****
              if Etype (Subp) = Any_Type then
                 return;
  
!             elsif Back_End_Cannot_Inline (Subp) then
!                Applies := True;    --  Do not treat as an error.
                 return;
  
              --  Here we have a candidate for inlining, but we must exclude
--- 3167,3176 ----
              if Etype (Subp) = Any_Type then
                 return;
  
!             --  If inlining is not possible, for now do not treat as an error
! 
!             elsif Inlining_Not_Possible (Subp) then
!                Applies := True;
                 return;
  
              --  Here we have a candidate for inlining, but we must exclude
*************** package body Sem_Prag is
*** 2941,2961 ****
  
              --  Processing for procedure, operator or function.
              --  If subprogram is aliased (as for an instance) indicate
!             --  that the renamed entity is inlined.
  
              if Is_Subprogram (Subp) then
                 while Present (Alias (Inner_Subp)) loop
                    Inner_Subp := Alias (Inner_Subp);
                 end loop;
  
!                Set_Inline_Flags (Inner_Subp);
  
!                Decl := Parent (Parent (Inner_Subp));
  
!                if Nkind (Decl) = N_Subprogram_Declaration
!                  and then Present (Corresponding_Body (Decl))
!                then
!                   Set_Inline_Flags (Corresponding_Body (Decl));
                 end if;
  
                 Applies := True;
--- 3207,3230 ----
  
              --  Processing for procedure, operator or function.
              --  If subprogram is aliased (as for an instance) indicate
!             --  that the renamed entity (if declared in the same unit)
!             --  is inlined.
  
              if Is_Subprogram (Subp) then
                 while Present (Alias (Inner_Subp)) loop
                    Inner_Subp := Alias (Inner_Subp);
                 end loop;
  
!                if In_Same_Source_Unit (Subp, Inner_Subp) then
!                   Set_Inline_Flags (Inner_Subp);
  
!                   Decl := Parent (Parent (Inner_Subp));
  
!                   if Nkind (Decl) = N_Subprogram_Declaration
!                     and then Present (Corresponding_Body (Decl))
!                   then
!                      Set_Inline_Flags (Corresponding_Body (Decl));
!                   end if;
                 end if;
  
                 Applies := True;
*************** package body Sem_Prag is
*** 2995,3000 ****
--- 3264,3270 ----
                 Set_Has_Pragma_Inline (Subp);
                 Set_Next_Rep_Item (N, First_Rep_Item (Subp));
                 Set_First_Rep_Item (Subp, N);
+                Effective := True;
              end if;
           end Set_Inline_Flags;
  
*************** package body Sem_Prag is
*** 3035,3040 ****
--- 3305,3321 ----
              if not Applies then
                 Error_Pragma_Arg
                   ("inappropriate argument for pragma%", Assoc);
+ 
+             elsif not Effective
+               and then Warn_On_Redundant_Constructs
+             then
+                if Inlining_Not_Possible (Subp) then
+                   Error_Msg_NE
+                     ("pragma Inline for& is ignored?", N, Entity (Subp_Id));
+                else
+                   Error_Msg_NE
+                     ("pragma Inline for& is redundant?", N, Entity (Subp_Id));
+                end if;
              end if;
  
              Next (Assoc);
*************** package body Sem_Prag is
*** 3060,3065 ****
--- 3341,3350 ----
           --  particular that no spaces or other obviously incorrect characters
           --  appear. This is only a warning, since any characters are allowed.
  
+          ----------------------------------
+          -- Check_Form_Of_Interface_Name --
+          ----------------------------------
+ 
           procedure Check_Form_Of_Interface_Name (SN : Node_Id) is
              S  : constant String_Id := Strval (Expr_Value_S (SN));
              SL : constant Nat       := String_Length (S);
*************** package body Sem_Prag is
*** 3164,3172 ****
           --  If there is no link name, just set the external name
  
           if No (Link_Nam) then
!             Set_Encoded_Interface_Name
!               (Get_Base_Subprogram (Subprogram_Def),
!                Adjust_External_Name_Case (Expr_Value_S (Ext_Nam)));
  
           --  For the Link_Name case, the given literal is preceded by an
           --  asterisk, which indicates to GCC that the given name should
--- 3449,3455 ----
           --  If there is no link name, just set the external name
  
           if No (Link_Nam) then
!             Link_Nam := Adjust_External_Name_Case (Expr_Value_S (Ext_Nam));
  
           --  For the Link_Name case, the given literal is preceded by an
           --  asterisk, which indicates to GCC that the given name should
*************** package body Sem_Prag is
*** 3185,3194 ****
  
              Link_Nam :=
                Make_String_Literal (Sloc (Link_Nam), End_String);
- 
-             Set_Encoded_Interface_Name
-               (Get_Base_Subprogram (Subprogram_Def), Link_Nam);
           end if;
        end Process_Interface_Name;
  
        -----------------------------------------
--- 3468,3478 ----
  
              Link_Nam :=
                Make_String_Literal (Sloc (Link_Nam), End_String);
           end if;
+ 
+          Set_Encoded_Interface_Name
+            (Get_Base_Subprogram (Subprogram_Def), Link_Nam);
+          Check_Duplicated_Export_Name (Link_Nam);
        end Process_Interface_Name;
  
        -----------------------------------------
*************** package body Sem_Prag is
*** 3210,3222 ****
  
           if Ekind (Proc_Scope) = E_Protected_Type then
              if Prag_Id = Pragma_Interrupt_Handler
!               or Prag_Id = Pragma_Attach_Handler
              then
                 Record_Rep_Item (Proc_Scope, N);
              end if;
           end if;
        end Process_Interrupt_Or_Attach_Handler;
  
        ---------------------------------
        -- Process_Suppress_Unsuppress --
        ---------------------------------
--- 3494,3655 ----
  
           if Ekind (Proc_Scope) = E_Protected_Type then
              if Prag_Id = Pragma_Interrupt_Handler
!                  or else
!                Prag_Id = Pragma_Attach_Handler
              then
                 Record_Rep_Item (Proc_Scope, N);
              end if;
           end if;
        end Process_Interrupt_Or_Attach_Handler;
  
+       --------------------------------------------------
+       -- Process_Restrictions_Or_Restriction_Warnings --
+       --------------------------------------------------
+ 
+       --  Note: some of the simple identifier cases were handled in par-prag,
+       --  but it is harmless (and more straightforward) to simply handle all
+       --  cases here, even if it means we repeat a bit of work in some cases.
+ 
+       procedure Process_Restrictions_Or_Restriction_Warnings is
+          Arg   : Node_Id;
+          R_Id  : Restriction_Id;
+          Id    : Name_Id;
+          Expr  : Node_Id;
+          Val   : Uint;
+ 
+          procedure Check_Unit_Name (N : Node_Id);
+          --  Checks unit name parameter for No_Dependence. Returns if it has
+          --  an appropriate form, otherwise raises pragma argument error.
+ 
+          procedure Set_Warning (R : All_Restrictions);
+          --  If this is a Restriction_Warnings pragma, set warning flag,
+          --  otherwise reset the flag.
+ 
+          ---------------------
+          -- Check_Unit_Name --
+          ---------------------
+ 
+          procedure Check_Unit_Name (N : Node_Id) is
+          begin
+             if Nkind (N) = N_Selected_Component then
+                Check_Unit_Name (Prefix (N));
+                Check_Unit_Name (Selector_Name (N));
+ 
+             elsif Nkind (N) = N_Identifier then
+                return;
+ 
+             else
+                Error_Pragma_Arg
+                  ("wrong form for unit name for No_Dependence", N);
+             end if;
+          end Check_Unit_Name;
+ 
+          -----------------
+          -- Set_Warning --
+          -----------------
+ 
+          procedure Set_Warning (R : All_Restrictions) is
+          begin
+             if Prag_Id = Pragma_Restriction_Warnings then
+                Restriction_Warnings (R) := True;
+             else
+                Restriction_Warnings (R) := False;
+             end if;
+          end Set_Warning;
+ 
+       --  Start of processing for Process_Restrictions_Or_Restriction_Warnings
+ 
+       begin
+          Check_Ada_83_Warning;
+          Check_At_Least_N_Arguments (1);
+          Check_Valid_Configuration_Pragma;
+ 
+          Arg := Arg1;
+          while Present (Arg) loop
+             Id := Chars (Arg);
+             Expr := Expression (Arg);
+ 
+             --  Case of no restriction identifier present
+ 
+             if Id = No_Name then
+                if Nkind (Expr) /= N_Identifier then
+                   Error_Pragma_Arg
+                     ("invalid form for restriction", Arg);
+                end if;
+ 
+                R_Id :=
+                  Get_Restriction_Id
+                    (Process_Restriction_Synonyms (Expr));
+ 
+                if R_Id not in All_Boolean_Restrictions then
+                   Error_Pragma_Arg
+                     ("invalid restriction identifier", Arg);
+                end if;
+ 
+                if Implementation_Restriction (R_Id) then
+                   Check_Restriction
+                     (No_Implementation_Restrictions, Arg);
+                end if;
+ 
+                Set_Restriction (R_Id, N);
+                Set_Warning (R_Id);
+ 
+                --  A very special case that must be processed here:
+                --  pragma Restrictions (No_Exceptions) turns off
+                --  all run-time checking. This is a bit dubious in
+                --  terms of the formal language definition, but it
+                --  is what is intended by RM H.4(12).
+ 
+                if R_Id = No_Exceptions then
+                   Scope_Suppress := (others => True);
+                end if;
+ 
+             --  Case of No_Dependence => unit-name. Note that the parser
+             --  already made the necessary entry in the No_Dependence table.
+ 
+             elsif Id = Name_No_Dependence then
+                Check_Unit_Name (Expr);
+ 
+             --  All other cases of restriction identifier present
+ 
+             else
+                R_Id := Get_Restriction_Id (Process_Restriction_Synonyms (Arg));
+                Analyze_And_Resolve (Expr, Any_Integer);
+ 
+                if R_Id not in All_Parameter_Restrictions then
+                   Error_Pragma_Arg
+                     ("invalid restriction parameter identifier", Arg);
+ 
+                elsif not Is_OK_Static_Expression (Expr) then
+                   Flag_Non_Static_Expr
+                     ("value must be static expression!", Expr);
+                   raise Pragma_Exit;
+ 
+                elsif not Is_Integer_Type (Etype (Expr))
+                  or else Expr_Value (Expr) < 0
+                then
+                   Error_Pragma_Arg
+                     ("value must be non-negative integer", Arg);
+ 
+                   --  Restriction pragma is active
+ 
+                else
+                   Val := Expr_Value (Expr);
+ 
+                   if not UI_Is_In_Int_Range (Val) then
+                      Error_Pragma_Arg
+                        ("pragma ignored, value too large?", Arg);
+                   else
+                      Set_Restriction (R_Id, N, Integer (UI_To_Int (Val)));
+                      Set_Warning (R_Id);
+                   end if;
+                end if;
+             end if;
+ 
+             Next (Arg);
+          end loop;
+       end Process_Restrictions_Or_Restriction_Warnings;
+ 
        ---------------------------------
        -- Process_Suppress_Unsuppress --
        ---------------------------------
*************** package body Sem_Prag is
*** 3286,3292 ****
           if not Is_Check_Name (Chars (Expression (Arg1))) then
              Error_Pragma_Arg
                ("argument of pragma% is not valid check name", Arg1);
- 
           else
              C := Get_Check_Id (Chars (Expression (Arg1)));
           end if;
--- 3719,3724 ----
*************** package body Sem_Prag is
*** 3413,3419 ****
                 Set_Is_Public (E);
                 Set_Is_Statically_Allocated (E);
  
!                if Warn_On_Export_Import then
                    Error_Msg_NE
                      ("?& has been made static as a result of Export", Arg, E);
                    Error_Msg_N
--- 3845,3860 ----
                 Set_Is_Public (E);
                 Set_Is_Statically_Allocated (E);
  
!                --  Warn if the corresponding W flag is set and the pragma
!                --  comes from source. The latter may not be true e.g. on
!                --  VMS where we expand export pragmas for exception codes
!                --  associated with imported or exported exceptions. We do
!                --  not want to generate a warning for something that the
!                --  user did not write.
! 
!                if Warn_On_Export_Import
!                  and then Comes_From_Source (Arg)
!                then
                    Error_Msg_NE
                      ("?& has been made static as a result of Export", Arg, E);
                    Error_Msg_N
*************** package body Sem_Prag is
*** 3447,3454 ****
        begin
           if No (Arg_External) then
              return;
  
!          elsif Nkind (Arg_External) = N_String_Literal then
              if String_Length (Strval (Arg_External)) = 0 then
                 return;
              else
--- 3888,3898 ----
        begin
           if No (Arg_External) then
              return;
+          end if;
  
!          Check_Arg_Is_External_Name (Arg_External);
! 
!          if Nkind (Arg_External) = N_String_Literal then
              if String_Length (Strval (Arg_External)) = 0 then
                 return;
              else
*************** package body Sem_Prag is
*** 3458,3480 ****
           elsif Nkind (Arg_External) = N_Identifier then
              New_Name := Get_Default_External_Name (Arg_External);
  
           else
!             Error_Pragma_Arg
!               ("incorrect form for External parameter for pragma%",
!                Arg_External);
           end if;
  
           --  If we already have an external name set (by a prior normal
           --  Import or Export pragma), then the external names must match
  
           if Present (Interface_Name (Internal_Ent)) then
!             declare
                 S1 : constant String_Id := Strval (Old_Name);
                 S2 : constant String_Id := Strval (New_Name);
  
                 procedure Mismatch;
                 --  Called if names do not match
  
                 procedure Mismatch is
                 begin
                    Error_Msg_Sloc := Sloc (Old_Name);
--- 3902,3930 ----
           elsif Nkind (Arg_External) = N_Identifier then
              New_Name := Get_Default_External_Name (Arg_External);
  
+          --  Check_Arg_Is_External_Name should let through only
+          --  identifiers and string literals or static string
+          --  expressions (which are folded to string literals).
+ 
           else
!             raise Program_Error;
           end if;
  
           --  If we already have an external name set (by a prior normal
           --  Import or Export pragma), then the external names must match
  
           if Present (Interface_Name (Internal_Ent)) then
!             Check_Matching_Internal_Names : declare
                 S1 : constant String_Id := Strval (Old_Name);
                 S2 : constant String_Id := Strval (New_Name);
  
                 procedure Mismatch;
                 --  Called if names do not match
  
+                --------------
+                -- Mismatch --
+                --------------
+ 
                 procedure Mismatch is
                 begin
                    Error_Msg_Sloc := Sloc (Old_Name);
*************** package body Sem_Prag is
*** 3483,3488 ****
--- 3933,3940 ----
                       Arg_External);
                 end Mismatch;
  
+             --  Start of processing for Check_Matching_Internal_Names
+ 
              begin
                 if String_Length (S1) /= String_Length (S2) then
                    Mismatch;
*************** package body Sem_Prag is
*** 3494,3507 ****
                       end if;
                    end loop;
                 end if;
!             end;
  
           --  Otherwise set the given name
  
           else
              Set_Encoded_Interface_Name (Internal_Ent, New_Name);
           end if;
- 
        end Set_Extended_Import_Export_External_Name;
  
        ------------------
--- 3946,3959 ----
                       end if;
                    end loop;
                 end if;
!             end Check_Matching_Internal_Names;
  
           --  Otherwise set the given name
  
           else
              Set_Encoded_Interface_Name (Internal_Ent, New_Name);
+             Check_Duplicated_Export_Name (New_Name);
           end if;
        end Set_Extended_Import_Export_External_Name;
  
        ------------------
*************** package body Sem_Prag is
*** 3558,3568 ****
--- 4010,4028 ----
           procedure Bad_Mechanism;
           --  Signal bad mechanism name
  
+          ---------------
+          -- Bad_Class --
+          ---------------
+ 
           procedure Bad_Class is
           begin
              Error_Pragma_Arg ("unrecognized descriptor class name", Class);
           end Bad_Class;
  
+          -------------------------
+          -- Bad_Mechanism_Value --
+          -------------------------
+ 
           procedure Bad_Mechanism is
           begin
              Error_Pragma_Arg ("unrecognized mechanism name", Mech_Name);
*************** package body Sem_Prag is
*** 3670,3678 ****
           else
              Bad_Class;
           end if;
- 
        end Set_Mechanism_Value;
  
     --  Start of processing for Analyze_Pragma
  
     begin
--- 4130,4203 ----
           else
              Bad_Class;
           end if;
        end Set_Mechanism_Value;
  
+       ---------------------------
+       -- Set_Ravenscar_Profile --
+       ---------------------------
+ 
+       --  The tasks to be done here are
+ 
+       --    Set required policies
+ 
+       --      pragma Task_Dispatching_Policy (FIFO_Within_Priorities)
+       --      pragma Locking_Policy (Ceiling_Locking)
+ 
+       --    Set Detect_Blocking mode
+ 
+       --    Set required restrictions (see System.Rident for detailed list)
+ 
+       procedure Set_Ravenscar_Profile (N : Node_Id) is
+       begin
+          --  pragma Task_Dispatching_Policy (FIFO_Within_Priorities)
+ 
+          if Task_Dispatching_Policy /= ' '
+            and then Task_Dispatching_Policy /= 'F'
+          then
+             Error_Msg_Sloc := Task_Dispatching_Policy_Sloc;
+             Error_Pragma ("Profile (Ravenscar) incompatible with policy#");
+ 
+          --  Set the FIFO_Within_Priorities policy, but always
+          --  preserve System_Location since we like the error
+          --  message with the run time name.
+ 
+          else
+             Task_Dispatching_Policy := 'F';
+ 
+             if Task_Dispatching_Policy_Sloc /= System_Location then
+                Task_Dispatching_Policy_Sloc := Loc;
+             end if;
+          end if;
+ 
+          --  pragma Locking_Policy (Ceiling_Locking)
+ 
+          if Locking_Policy /= ' '
+            and then Locking_Policy /= 'C'
+          then
+             Error_Msg_Sloc := Locking_Policy_Sloc;
+             Error_Pragma ("Profile (Ravenscar) incompatible with policy#");
+ 
+          --  Set the Ceiling_Locking policy, but always preserve
+          --  System_Location since we like the error message with the
+          --  run time name.
+ 
+          else
+             Locking_Policy := 'C';
+ 
+             if Locking_Policy_Sloc /= System_Location then
+                Locking_Policy_Sloc := Loc;
+             end if;
+          end if;
+ 
+          --  pragma Detect_Blocking
+ 
+          Detect_Blocking := True;
+ 
+          --  Set the corresponding restrictions
+ 
+          Set_Profile_Restrictions (Ravenscar, N, Warn => False);
+       end Set_Ravenscar_Profile;
+ 
     --  Start of processing for Analyze_Pragma
  
     begin
*************** package body Sem_Prag is
*** 3755,3766 ****
           --  pragma Ada_83;
  
           --  Note: this pragma also has some specific processing in Par.Prag
!          --  because we want to set the Ada 83 mode switch during parsing.
  
           when Pragma_Ada_83 =>
              GNAT_Pragma;
!             Ada_83 := True;
!             Ada_95 := False;
              Check_Arg_Count (0);
  
           ------------
--- 4280,4290 ----
           --  pragma Ada_83;
  
           --  Note: this pragma also has some specific processing in Par.Prag
!          --  because we want to set the Ada version mode during parsing.
  
           when Pragma_Ada_83 =>
              GNAT_Pragma;
!             Ada_Version := Ada_83;
              Check_Arg_Count (0);
  
           ------------
*************** package body Sem_Prag is
*** 3770,3783 ****
           --  pragma Ada_95;
  
           --  Note: this pragma also has some specific processing in Par.Prag
!          --  because we want to set the Ada 83 mode switch during parsing.
  
           when Pragma_Ada_95 =>
              GNAT_Pragma;
!             Ada_83 := False;
!             Ada_95 := True;
              Check_Arg_Count (0);
  
           ----------------------
           -- All_Calls_Remote --
           ----------------------
--- 4294,4338 ----
           --  pragma Ada_95;
  
           --  Note: this pragma also has some specific processing in Par.Prag
!          --  because we want to set the Ada 83 version mode during parsing.
  
           when Pragma_Ada_95 =>
              GNAT_Pragma;
!             Ada_Version := Ada_95;
              Check_Arg_Count (0);
  
+          ------------
+          -- Ada_05 --
+          ------------
+ 
+          --  pragma Ada_05;
+          --  pragma Ada_05 (LOCAL_NAME);
+ 
+          --  Note: this pragma also has some specific processing in Par.Prag
+          --  because we want to set the Ada 2005 version mode during parsing.
+ 
+          when Pragma_Ada_05 => declare
+             E_Id : Node_Id;
+ 
+          begin
+             GNAT_Pragma;
+ 
+             if Arg_Count = 1 then
+                Check_Arg_Is_Local_Name (Arg1);
+                E_Id := Expression (Arg1);
+ 
+                if Etype (E_Id) = Any_Type then
+                   return;
+                end if;
+ 
+                Set_Is_Ada_2005 (Entity (E_Id));
+ 
+             else
+                Ada_Version := Ada_05;
+                Check_Arg_Count (0);
+             end if;
+          end;
+ 
           ----------------------
           -- All_Calls_Remote --
           ----------------------
*************** package body Sem_Prag is
*** 4053,4058 ****
--- 4608,4616 ----
              elsif Ekind (Nm) = E_Record_Type
                and then Present (Corresponding_Remote_Type (Nm))
              then
+                --  A record type that is the Equivalent_Type for
+                --  a remote access-to-subprogram type.
+ 
                 N := Declaration_Node (Corresponding_Remote_Type (Nm));
  
                 if Nkind (N) = N_Full_Type_Declaration
*************** package body Sem_Prag is
*** 4062,4067 ****
--- 4620,4632 ----
                    L := Parameter_Specifications (Type_Definition (N));
                    Process_Async_Pragma;
  
+                   if Is_Asynchronous (Nm)
+                     and then Expander_Active
+                   then
+                      RACW_Type_Is_Asynchronous (
+                        Underlying_RACW_Type (Nm));
+                   end if;
+ 
                 else
                    Error_Pragma_Arg
                      ("pragma% cannot reference access-to-function type",
*************** package body Sem_Prag is
*** 4920,4949 ****
           when Pragma_Debug => Debug : begin
              GNAT_Pragma;
  
!             --  If assertions are enabled, and we are expanding code, then
!             --  we rewrite the pragma with its corresponding procedure call
!             --  and then analyze the call.
  
!             if Assertions_Enabled and Expander_Active then
!                Rewrite (N, Relocate_Node (Debug_Statement (N)));
!                Analyze (N);
  
!             --  Otherwise we work a bit to get a tree that makes sense
!             --  for ASIS purposes, namely a pragma with an analyzed
!             --  argument that looks like a procedure call.
  
!             else
!                Expander_Mode_Save_And_Set (False);
!                Rewrite (N, Relocate_Node (Debug_Statement (N)));
!                Analyze (N);
!                Rewrite (N,
!                  Make_Pragma (Loc,
!                    Chars => Name_Debug,
!                    Pragma_Argument_Associations =>
!                      New_List (Relocate_Node (N))));
!                Expander_Mode_Restore;
!             end if;
!          end Debug;
  
           -------------------
           -- Discard_Names --
--- 5485,5511 ----
           when Pragma_Debug => Debug : begin
              GNAT_Pragma;
  
!             --  Rewrite into a conditional with a static condition
  
!             Rewrite (N, Make_Implicit_If_Statement (N,
!               Condition => New_Occurrence_Of (Boolean_Literals (
!                 Assertions_Enabled and Expander_Active), Loc),
!               Then_Statements => New_List (
!                 Relocate_Node (Debug_Statement (N)))));
!             Analyze (N);
!          end Debug;
  
!          ---------------------
!          -- Detect_Blocking --
!          ---------------------
  
!          --  pragma Detect_Blocking;
! 
!          when Pragma_Detect_Blocking =>
!             GNAT_Pragma;
!             Check_Arg_Count (0);
!             Check_Valid_Configuration_Pragma;
!             Detect_Blocking := True;
  
           -------------------
           -- Discard_Names --
*************** package body Sem_Prag is
*** 5047,5053 ****
              --  (e.g. those added by use of Rtsfind). In Ada 95 mode, this
              --  placement rule does not apply.
  
!             if Ada_83 and then Comes_From_Source (N) then
                 Citem := Next (N);
  
                 while Present (Citem) loop
--- 5609,5615 ----
              --  (e.g. those added by use of Rtsfind). In Ada 95 mode, this
              --  placement rule does not apply.
  
!             if Ada_Version = Ada_83 and then Comes_From_Source (N) then
                 Citem := Next (N);
  
                 while Present (Citem) loop
*************** package body Sem_Prag is
*** 5079,5085 ****
                    then
                       Set_Elaborate_Present (Citem, True);
                       Set_Unit_Name (Expression (Arg), Name (Citem));
!                      Set_Suppress_Elaboration_Warnings (Entity (Name (Citem)));
                       exit Inner;
                    end if;
  
--- 5641,5659 ----
                    then
                       Set_Elaborate_Present (Citem, True);
                       Set_Unit_Name (Expression (Arg), Name (Citem));
! 
!                      --  With the pragma present, elaboration calls on
!                      --  subprograms from the named unit need no further
!                      --  checks, as long as the pragma appears in the current
!                      --  compilation unit. If the pragma appears in some unit
!                      --  in the context, there might still be a need for an
!                      --  Elaborate_All_Desirable from the current compilation
!                      --  to the the named unit, so we keep the check enabled.
! 
!                      if In_Extended_Main_Source_Unit (N) then
!                         Set_Suppress_Elaboration_Warnings
!                           (Entity (Name (Citem)));
!                      end if;
                       exit Inner;
                    end if;
  
*************** package body Sem_Prag is
*** 5164,5170 ****
                    then
                       Set_Elaborate_All_Present (Citem, True);
                       Set_Unit_Name (Expression (Arg), Name (Citem));
!                      Set_Suppress_Elaboration_Warnings (Entity (Name (Citem)));
                       exit Innr;
                    end if;
  
--- 5738,5752 ----
                    then
                       Set_Elaborate_All_Present (Citem, True);
                       Set_Unit_Name (Expression (Arg), Name (Citem));
! 
!                      --  Suppress warnings and elaboration checks on the named
!                      --  unit if the pragma is in the current compilation, as
!                      --  for pragma Elaborate.
! 
!                      if In_Extended_Main_Source_Unit (N) then
!                         Set_Suppress_Elaboration_Warnings
!                           (Entity (Name (Citem)));
!                      end if;
                       exit Innr;
                    end if;
  
*************** package body Sem_Prag is
*** 5255,5267 ****
           --    [,[Entity          =>]  IDENTIFIER |
           --                            SELECTED_COMPONENT |
           --                            STRING_LITERAL]
!          --    [,[Parameter_Types =>]  PARAMETER_TYPES]
!          --    [,[Result_Type     =>]  result_SUBTYPE_NAME]
!          --    [,[Homonym_Number  =>]  INTEGER_LITERAL]);
  
           --  PARAMETER_TYPES ::= (SUBTYPE_NAME {, SUBTYPE_NAME})
           --  SUBTYPE_NAME    ::= STRING_LITERAL
  
           when Pragma_Eliminate => Eliminate : declare
              Args  : Args_List (1 .. 5);
              Names : constant Name_List (1 .. 5) := (
--- 5837,5861 ----
           --    [,[Entity          =>]  IDENTIFIER |
           --                            SELECTED_COMPONENT |
           --                            STRING_LITERAL]
!          --    [,]OVERLOADING_RESOLUTION);
! 
!          --  OVERLOADING_RESOLUTION ::= PARAMETER_AND_RESULT_TYPE_PROFILE |
!          --                             SOURCE_LOCATION
! 
!          --  PARAMETER_AND_RESULT_TYPE_PROFILE ::= PROCEDURE_PROFILE |
!          --                                        FUNCTION_PROFILE
! 
!          --  PROCEDURE_PROFILE ::= Parameter_Types => PARAMETER_TYPES
! 
!          --  FUNCTION_PROFILE ::= [Parameter_Types => PARAMETER_TYPES,]
!          --                       Result_Type => result_SUBTYPE_NAME]
  
           --  PARAMETER_TYPES ::= (SUBTYPE_NAME {, SUBTYPE_NAME})
           --  SUBTYPE_NAME    ::= STRING_LITERAL
  
+          --  SOURCE_LOCATION ::= Source_Location => SOURCE_TRACE
+          --  SOURCE_TRACE    ::= STRING_LITERAL
+ 
           when Pragma_Eliminate => Eliminate : declare
              Args  : Args_List (1 .. 5);
              Names : constant Name_List (1 .. 5) := (
*************** package body Sem_Prag is
*** 5269,5281 ****
                        Name_Entity,
                        Name_Parameter_Types,
                        Name_Result_Type,
!                       Name_Homonym_Number);
  
              Unit_Name       : Node_Id renames Args (1);
              Entity          : Node_Id renames Args (2);
              Parameter_Types : Node_Id renames Args (3);
              Result_Type     : Node_Id renames Args (4);
!             Homonym_Number  : Node_Id renames Args (5);
  
           begin
              GNAT_Pragma;
--- 5863,5875 ----
                        Name_Entity,
                        Name_Parameter_Types,
                        Name_Result_Type,
!                       Name_Source_Location);
  
              Unit_Name       : Node_Id renames Args (1);
              Entity          : Node_Id renames Args (2);
              Parameter_Types : Node_Id renames Args (3);
              Result_Type     : Node_Id renames Args (4);
!             Source_Location : Node_Id renames Args (5);
  
           begin
              GNAT_Pragma;
*************** package body Sem_Prag is
*** 5291,5313 ****
                            or else
                          Present (Result_Type)
                            or else
!                         Present (Homonym_Number))
              then
                 Error_Pragma ("missing Entity argument for pragma%");
              end if;
  
              Process_Eliminate_Pragma
                (N,
                 Unit_Name,
                 Entity,
                 Parameter_Types,
                 Result_Type,
!                Homonym_Number);
           end Eliminate;
  
!          --------------------------
!          --  Explicit_Overriding --
!          --------------------------
  
           when Pragma_Explicit_Overriding =>
              Check_Valid_Configuration_Pragma;
--- 5885,5918 ----
                            or else
                          Present (Result_Type)
                            or else
!                         Present (Source_Location))
              then
                 Error_Pragma ("missing Entity argument for pragma%");
              end if;
  
+             if (Present (Parameter_Types)
+                        or else
+                 Present (Result_Type))
+               and then
+                 Present (Source_Location)
+             then
+                Error_Pragma
+                  ("parameter profile and source location can not " &
+                   "be used together in pragma%");
+             end if;
+ 
              Process_Eliminate_Pragma
                (N,
                 Unit_Name,
                 Entity,
                 Parameter_Types,
                 Result_Type,
!                Source_Location);
           end Eliminate;
  
!          -------------------------
!          -- Explicit_Overriding --
!          -------------------------
  
           when Pragma_Explicit_Overriding =>
              Check_Valid_Configuration_Pragma;
*************** package body Sem_Prag is
*** 5693,5699 ****
              Check_Arg_Count (1);
              Check_No_Identifiers;
              Check_Arg_Is_One_Of (Arg1, Name_On, Name_Off);
!             Extensions_Allowed := (Chars (Expression (Arg1)) = Name_On);
  
           --------------
           -- External --
--- 6298,6311 ----
              Check_Arg_Count (1);
              Check_No_Identifiers;
              Check_Arg_Is_One_Of (Arg1, Name_On, Name_Off);
! 
!             if Chars (Expression (Arg1)) = Name_On then
!                Extensions_Allowed := True;
!                Ada_Version := Ada_Version_Type'Last;
!             else
!                Extensions_Allowed := False;
!                Ada_Version := Ada_Version_Type'Min (Ada_Version, Ada_95);
!             end if;
  
           --------------
           -- External --
*************** package body Sem_Prag is
*** 5727,5735 ****
           --    UPPERCASE | LOWERCASE
           --    [, AS_IS | UPPERCASE | LOWERCASE]);
  
!          when Pragma_External_Name_Casing =>
! 
!          External_Name_Casing : declare
           begin
              GNAT_Pragma;
              Check_No_Identifiers;
--- 6339,6345 ----
           --    UPPERCASE | LOWERCASE
           --    [, AS_IS | UPPERCASE | LOWERCASE]);
  
!          when Pragma_External_Name_Casing => External_Name_Casing : declare
           begin
              GNAT_Pragma;
              Check_No_Identifiers;
*************** package body Sem_Prag is
*** 6321,6327 ****
              Check_Valid_Configuration_Pragma;
              Check_Restriction (No_Initialize_Scalars, N);
  
!             if not Restrictions (No_Initialize_Scalars) then
                 Init_Or_Norm_Scalars := True;
                 Initialize_Scalars := True;
              end if;
--- 6931,6937 ----
              Check_Valid_Configuration_Pragma;
              Check_Restriction (No_Initialize_Scalars, N);
  
!             if not Restriction_Active (No_Initialize_Scalars) then
                 Init_Or_Norm_Scalars := True;
                 Initialize_Scalars := True;
              end if;
*************** package body Sem_Prag is
*** 6336,6357 ****
  
              --  Pragma is active if inlining option is active
  
!             if Inline_Active then
!                Process_Inline (True);
! 
!             --  Pragma is active in a predefined file in config run time mode
! 
!             elsif Configurable_Run_Time_Mode
!               and then
!                 Is_Predefined_File_Name (Unit_File_Name (Current_Sem_Unit))
!             then
!                Process_Inline (True);
! 
!             --  Otherwise inlining is not active
! 
!             else
!                Process_Inline (False);
!             end if;
  
           -------------------
           -- Inline_Always --
--- 6946,6952 ----
  
              --  Pragma is active if inlining option is active
  
!             Process_Inline (Inline_Active);
  
           -------------------
           -- Inline_Always --
*************** package body Sem_Prag is
*** 7341,7346 ****
--- 7936,7971 ----
              end if;
           end No_Return;
  
+          ------------------------
+          -- No_Strict_Aliasing --
+          ------------------------
+ 
+          when Pragma_No_Strict_Aliasing => No_Strict_Alias : declare
+             E_Id : Entity_Id;
+ 
+          begin
+             GNAT_Pragma;
+             Check_At_Most_N_Arguments (1);
+ 
+             if Arg_Count = 0 then
+                Check_Valid_Configuration_Pragma;
+                Opt.No_Strict_Aliasing := True;
+ 
+             else
+                Check_Optional_Identifier (Arg2, Name_Entity);
+                Check_Arg_Is_Local_Name (Arg1);
+                E_Id := Entity (Expression (Arg1));
+ 
+                if E_Id = Any_Type then
+                   return;
+                elsif No (E_Id) or else not Is_Access_Type (E_Id) then
+                   Error_Pragma_Arg ("pragma% requires access type", Arg1);
+                end if;
+ 
+                Set_No_Strict_Aliasing (Implementation_Base_Type (E_Id));
+             end if;
+          end No_Strict_Alias;
+ 
           -----------------
           -- Obsolescent --
           -----------------
*************** package body Sem_Prag is
*** 7348,7368 ****
           --  pragma Obsolescent [(static_string_EXPRESSION)];
  
           when Pragma_Obsolescent => Obsolescent : declare
           begin
              GNAT_Pragma;
              Check_At_Most_N_Arguments (1);
              Check_No_Identifiers;
  
!             if Arg_Count = 1 then
!                Check_Arg_Is_Static_Expression (Arg1, Standard_String);
!             end if;
  
!             if No (Prev (N))
!               or else (Nkind (Prev (N))) /= N_Subprogram_Declaration
              then
                 Error_Pragma
                   ("pragma% misplaced, must immediately " &
                    "follow subprogram spec");
              end if;
           end Obsolescent;
  
--- 7973,8035 ----
           --  pragma Obsolescent [(static_string_EXPRESSION)];
  
           when Pragma_Obsolescent => Obsolescent : declare
+             Subp : Node_Or_Entity_Id;
+             S    : String_Id;
+ 
           begin
              GNAT_Pragma;
              Check_At_Most_N_Arguments (1);
              Check_No_Identifiers;
  
!             --  Check OK placement
  
!             --  First possibility is within a declarative region, where the
!             --  pragma immediately follows a subprogram declaration.
! 
!             if Present (Prev (N)) then
!                Subp := Prev (N);
! 
!             --  Second possibility, stand alone subprogram declaration with the
!             --  pragma immediately following the declaration.
! 
!             elsif No (Prev (N))
!               and then Nkind (Parent (N)) = N_Compilation_Unit_Aux
              then
+                Subp := Unit (Parent (Parent (N)));
+ 
+             --  Any other possibility is a misplacement
+ 
+             else
+                Subp := Empty;
+             end if;
+ 
+             --  Check correct placement
+ 
+             if Nkind (Subp) /= N_Subprogram_Declaration then
                 Error_Pragma
                   ("pragma% misplaced, must immediately " &
                    "follow subprogram spec");
+ 
+             --  If OK placement, set flag and acquire argument
+ 
+             else
+                Subp := Defining_Entity (Subp);
+                Set_Is_Obsolescent (Subp);
+ 
+                if Arg_Count = 1 then
+                   Check_Arg_Is_Static_Expression (Arg1, Standard_String);
+                   S := Strval (Expression (Arg1));
+ 
+                   for J in 1 .. String_Length (S) loop
+                      if not In_Character_Range (Get_String_Char (S, J)) then
+                         Error_Pragma_Arg
+                           ("pragma% argument does not allow wide characters",
+                            Arg1);
+                      end if;
+                   end loop;
+ 
+                   Set_Obsolescent_Warning (Subp, Expression (Arg1));
+                end if;
              end if;
           end Obsolescent;
  
*************** package body Sem_Prag is
*** 7391,7399 ****
                 end if;
              end;
  
!             Restrictions (No_Finalization)       := True;
!             Restrictions (No_Exception_Handlers) := True;
!             Restriction_Parameters (Max_Tasks)   := Uint_0;
  
           -----------------------
           -- Normalize_Scalars --
--- 8058,8067 ----
                 end if;
              end;
  
!             Set_Restriction (No_Finalization, N);
!             Set_Restriction (No_Exception_Handlers, N);
!             Set_Restriction (Max_Tasks, N, 0);
!             Set_Restriction (No_Tasking, N);
  
           -----------------------
           -- Normalize_Scalars --
*************** package body Sem_Prag is
*** 7435,7447 ****
           when Pragma_Optional_Overriding =>
              Error_Msg_N ("pragma must appear immediately after subprogram", N);
  
-          ----------------
-          -- Overriding --
-          ----------------
- 
-          when Pragma_Overriding =>
-             Error_Msg_N ("pragma must appear immediately after subprogram", N);
- 
           ----------
           -- Pack --
           ----------
--- 8103,8108 ----
*************** package body Sem_Prag is
*** 7580,7588 ****
              Set_Is_Preelaborated (Ent);
           end;
  
!          ------------------------
!          --  Persistent_Object --
!          ------------------------
  
           when Pragma_Persistent_Object => declare
              Decl : Node_Id;
--- 8241,8249 ----
              Set_Is_Preelaborated (Ent);
           end;
  
!          -----------------------
!          -- Persistent_Object --
!          -----------------------
  
           when Pragma_Persistent_Object => declare
              Decl : Node_Id;
*************** package body Sem_Prag is
*** 7594,7599 ****
--- 8255,8261 ----
              GNAT_Pragma;
              Check_Arg_Count (1);
              Check_Arg_Is_Library_Level_Local_Name (Arg1);
+ 
              if not Is_Entity_Name (Expression (Arg1))
                or else
                 (Ekind (Entity (Expression (Arg1))) /= E_Variable
*************** package body Sem_Prag is
*** 7789,7794 ****
--- 8451,8509 ----
              end if;
           end Priority;
  
+          -------------
+          -- Profile --
+          -------------
+ 
+          --  pragma Profile (profile_IDENTIFIER);
+ 
+          --  profile_IDENTIFIER => Protected | Ravenscar
+ 
+          when Pragma_Profile =>
+             Check_Arg_Count (1);
+             Check_Valid_Configuration_Pragma;
+             Check_No_Identifiers;
+ 
+             declare
+                Argx : constant Node_Id := Get_Pragma_Arg (Arg1);
+             begin
+                if Chars (Argx) = Name_Ravenscar then
+                   Set_Ravenscar_Profile (N);
+ 
+                elsif Chars (Argx) = Name_Restricted then
+                   Set_Profile_Restrictions (Restricted, N, Warn => False);
+                else
+                   Error_Pragma_Arg ("& is not a valid profile", Argx);
+                end if;
+             end;
+ 
+          ----------------------
+          -- Profile_Warnings --
+          ----------------------
+ 
+          --  pragma Profile_Warnings (profile_IDENTIFIER);
+ 
+          --  profile_IDENTIFIER => Protected | Ravenscar
+ 
+          when Pragma_Profile_Warnings =>
+             GNAT_Pragma;
+             Check_Arg_Count (1);
+             Check_Valid_Configuration_Pragma;
+             Check_No_Identifiers;
+ 
+             declare
+                Argx : constant Node_Id := Get_Pragma_Arg (Arg1);
+             begin
+                if Chars (Argx) = Name_Ravenscar then
+                   Set_Profile_Restrictions (Ravenscar, N, Warn => True);
+ 
+                elsif Chars (Argx) = Name_Restricted then
+                   Set_Profile_Restrictions (Restricted, N, Warn => True);
+                else
+                   Error_Pragma_Arg ("& is not a valid profile", Argx);
+                end if;
+             end;
+ 
           --------------------------
           -- Propagate_Exceptions --
           --------------------------
*************** package body Sem_Prag is
*** 7824,7836 ****
              External : Node_Id renames Args (2);
              Size     : Node_Id renames Args (3);
  
!             R_Internal : Node_Id;
!             R_External : Node_Id;
! 
!             MA       : Node_Id;
!             Str      : String_Id;
! 
!             Def_Id   : Entity_Id;
  
              procedure Check_Too_Long (Arg : Node_Id);
              --  Posts message if the argument is an identifier with more
--- 8539,8545 ----
              External : Node_Id renames Args (2);
              Size     : Node_Id renames Args (3);
  
!             Def_Id : Entity_Id;
  
              procedure Check_Too_Long (Arg : Node_Id);
              --  Posts message if the argument is an identifier with more
*************** package body Sem_Prag is
*** 7874,7882 ****
              Gather_Associations (Names, Args);
              Process_Extended_Import_Export_Internal_Arg (Internal);
  
!             R_Internal := Relocate_Node (Internal);
! 
!             Def_Id := Entity (R_Internal);
  
              if Ekind (Def_Id) /= E_Constant
                and then Ekind (Def_Id) /= E_Variable
--- 8583,8589 ----
              Gather_Associations (Names, Args);
              Process_Extended_Import_Export_Internal_Arg (Internal);
  
!             Def_Id := Entity (Internal);
  
              if Ekind (Def_Id) /= E_Constant
                and then Ekind (Def_Id) /= E_Variable
*************** package body Sem_Prag is
*** 7885,7922 ****
                   ("pragma% must designate an object", Internal);
              end if;
  
!             Check_Too_Long (R_Internal);
  
              if Is_Imported (Def_Id) or else Is_Exported (Def_Id) then
                 Error_Pragma_Arg
                   ("cannot use pragma% for imported/exported object",
!                   R_Internal);
              end if;
  
!             if Is_Concurrent_Type (Etype (R_Internal)) then
                 Error_Pragma_Arg
                   ("cannot specify pragma % for task/protected object",
!                   R_Internal);
              end if;
  
!             if Is_Psected (Def_Id) then
!                Error_Msg_N ("?duplicate Psect_Object pragma", N);
!             else
!                Set_Is_Psected (Def_Id);
              end if;
  
              if Ekind (Def_Id) = E_Constant then
                 Error_Pragma_Arg
!                  ("cannot specify pragma % for a constant", R_Internal);
              end if;
  
!             if Is_Record_Type (Etype (R_Internal)) then
                 declare
                    Ent  : Entity_Id;
                    Decl : Entity_Id;
  
                 begin
!                   Ent := First_Entity (Etype (R_Internal));
                    while Present (Ent) loop
                       Decl := Declaration_Node (Ent);
  
--- 8592,8630 ----
                   ("pragma% must designate an object", Internal);
              end if;
  
!             Check_Too_Long (Internal);
  
              if Is_Imported (Def_Id) or else Is_Exported (Def_Id) then
                 Error_Pragma_Arg
                   ("cannot use pragma% for imported/exported object",
!                   Internal);
              end if;
  
!             if Is_Concurrent_Type (Etype (Internal)) then
                 Error_Pragma_Arg
                   ("cannot specify pragma % for task/protected object",
!                   Internal);
              end if;
  
!             if Has_Rep_Pragma (Def_Id, Name_Common_Object)
!                  or else
!                Has_Rep_Pragma (Def_Id, Name_Psect_Object)
!             then
!                Error_Msg_N ("?duplicate Common/Psect_Object pragma", N);
              end if;
  
              if Ekind (Def_Id) = E_Constant then
                 Error_Pragma_Arg
!                  ("cannot specify pragma % for a constant", Internal);
              end if;
  
!             if Is_Record_Type (Etype (Internal)) then
                 declare
                    Ent  : Entity_Id;
                    Decl : Entity_Id;
  
                 begin
!                   Ent := First_Entity (Etype (Internal));
                    while Present (Ent) loop
                       Decl := Declaration_Node (Ent);
  
*************** package body Sem_Prag is
*** 7926,7932 ****
                         and then Warn_On_Export_Import
                       then
                          Error_Msg_N
!                           ("?object for pragma % has defaults", R_Internal);
                          exit;
  
                       else
--- 8634,8640 ----
                         and then Warn_On_Export_Import
                       then
                          Error_Msg_N
!                           ("?object for pragma % has defaults", Internal);
                          exit;
  
                       else
*************** package body Sem_Prag is
*** 7940,8059 ****
                 Check_Too_Long (Size);
              end if;
  
-             --  Make Psect case-insensitive.
- 
              if Present (External) then
                 Check_Too_Long (External);
- 
-                if Nkind (External) = N_String_Literal then
-                   String_To_Name_Buffer (Strval (External));
-                else
-                   Get_Name_String (Chars (External));
-                end if;
- 
-                Set_All_Upper_Case;
-                Start_String;
-                Store_String_Chars (Name_Buffer (1 .. Name_Len));
-                Str := End_String;
-                R_External := Make_String_Literal
-                  (Sloc => Sloc (External), Strval => Str);
-             else
-                Get_Name_String (Chars (Internal));
-                Set_All_Upper_Case;
-                Start_String;
-                Store_String_Chars (Name_Buffer (1 .. Name_Len));
-                Str := End_String;
-                R_External := Make_String_Literal
-                  (Sloc => Sloc (Internal), Strval => Str);
              end if;
  
!             --  Transform into pragma Linker_Section, add attributes to
!             --  match what DEC Ada does. Ignore size for now?
! 
!             Rewrite (N,
!                Make_Pragma
!                  (Sloc (N),
!                   Name_Linker_Section,
!                   New_List
!                     (Make_Pragma_Argument_Association
!                        (Sloc => Sloc (R_Internal),
!                         Expression => R_Internal),
!                      Make_Pragma_Argument_Association
!                        (Sloc => Sloc (R_External),
!                         Expression => R_External))));
! 
!             Analyze (N);
! 
!             --  Add Machine_Attribute of "overlaid", so the section overlays
!             --  other sections of the same name.
! 
!             Start_String;
!             Store_String_Chars ("overlaid");
!             Str := End_String;
! 
!             MA :=
!                Make_Pragma
!                  (Sloc (N),
!                   Name_Machine_Attribute,
!                   New_List
!                     (Make_Pragma_Argument_Association
!                        (Sloc => Sloc (R_Internal),
!                         Expression => R_Internal),
!                      Make_Pragma_Argument_Association
!                        (Sloc => Sloc (R_External),
!                         Expression =>
!                           Make_String_Literal
!                             (Sloc => Sloc (R_External),
!                              Strval => Str))));
!             Analyze (MA);
! 
!             --  Add Machine_Attribute of "global", so the section is visible
!             --  everywhere
! 
!             Start_String;
!             Store_String_Chars ("global");
!             Str := End_String;
! 
!             MA :=
!                Make_Pragma
!                  (Sloc (N),
!                   Name_Machine_Attribute,
!                   New_List
!                     (Make_Pragma_Argument_Association
!                        (Sloc => Sloc (R_Internal),
!                         Expression => R_Internal),
! 
!                      Make_Pragma_Argument_Association
!                        (Sloc => Sloc (R_External),
!                         Expression =>
!                           Make_String_Literal
!                             (Sloc => Sloc (R_External),
!                              Strval => Str))));
!             Analyze (MA);
! 
!             --  Add Machine_Attribute of "initialize", so the section is
!             --  demand zeroed.
! 
!             Start_String;
!             Store_String_Chars ("initialize");
!             Str := End_String;
! 
!             MA :=
!                Make_Pragma
!                  (Sloc (N),
!                   Name_Machine_Attribute,
!                   New_List
!                     (Make_Pragma_Argument_Association
!                        (Sloc => Sloc (R_Internal),
!                         Expression => R_Internal),
  
!                      Make_Pragma_Argument_Association
!                        (Sloc => Sloc (R_External),
!                         Expression =>
!                           Make_String_Literal
!                             (Sloc => Sloc (R_External),
!                              Strval => Str))));
!             Analyze (MA);
           end Psect_Object;
  
           ----------
--- 8648,8661 ----
                 Check_Too_Long (Size);
              end if;
  
              if Present (External) then
+                Check_Arg_Is_External_Name (External);
                 Check_Too_Long (External);
              end if;
  
!             --  If all error tests pass, link pragma on to the rep item chain
  
!             Record_Rep_Item (Def_Id, N);
           end Psect_Object;
  
           ----------
*************** package body Sem_Prag is
*** 8084,8092 ****
           --  pragma Pure_Function ([Entity =>] function_LOCAL_NAME);
  
           when Pragma_Pure_Function => Pure_Function : declare
!             E_Id   : Node_Id;
!             E      : Entity_Id;
!             Def_Id : Entity_Id;
  
           begin
              GNAT_Pragma;
--- 8686,8695 ----
           --  pragma Pure_Function ([Entity =>] function_LOCAL_NAME);
  
           when Pragma_Pure_Function => Pure_Function : declare
!             E_Id      : Node_Id;
!             E         : Entity_Id;
!             Def_Id    : Entity_Id;
!             Effective : Boolean := False;
  
           begin
              GNAT_Pragma;
*************** package body Sem_Prag is
*** 8116,8126 ****
                    end if;
  
                    Set_Is_Pure (Def_Id);
!                   Set_Has_Pragma_Pure_Function (Def_Id);
  
                    E := Homonym (E);
                    exit when No (E) or else Scope (E) /= Current_Scope;
                 end loop;
              end if;
           end Pure_Function;
  
--- 8719,8740 ----
                    end if;
  
                    Set_Is_Pure (Def_Id);
! 
!                   if not Has_Pragma_Pure_Function (Def_Id) then
!                      Set_Has_Pragma_Pure_Function (Def_Id);
!                      Effective := True;
!                   end if;
  
                    E := Homonym (E);
                    exit when No (E) or else Scope (E) /= Current_Scope;
                 end loop;
+ 
+                if not Effective
+                  and then Warn_On_Redundant_Constructs
+                then
+                   Error_Msg_NE ("pragma Pure_Function on& is redundant?",
+                     N, Entity (E_Id));
+                end if;
              end if;
           end Pure_Function;
  
*************** package body Sem_Prag is
*** 8241,8247 ****
              GNAT_Pragma;
              Check_Arg_Count (0);
              Check_Valid_Configuration_Pragma;
!             Set_Ravenscar (N);
  
           -------------------------
           -- Restricted_Run_Time --
--- 8855,8868 ----
              GNAT_Pragma;
              Check_Arg_Count (0);
              Check_Valid_Configuration_Pragma;
!             Set_Ravenscar_Profile (N);
! 
!             if Warn_On_Obsolescent_Feature then
!                Error_Msg_N
!                  ("pragma Ravenscar is an obsolescent feature?", N);
!                Error_Msg_N
!                  ("|use pragma Profile (Ravenscar) instead", N);
!             end if;
  
           -------------------------
           -- Restricted_Run_Time --
*************** package body Sem_Prag is
*** 8253,8259 ****
              GNAT_Pragma;
              Check_Arg_Count (0);
              Check_Valid_Configuration_Pragma;
!             Set_Restricted_Profile (N);
  
           ------------------
           -- Restrictions --
--- 8874,8887 ----
              GNAT_Pragma;
              Check_Arg_Count (0);
              Check_Valid_Configuration_Pragma;
!             Set_Profile_Restrictions (Restricted, N, Warn => False);
! 
!             if Warn_On_Obsolescent_Feature then
!                Error_Msg_N
!                  ("pragma Restricted_Run_Time is an obsolescent feature?", N);
!                Error_Msg_N
!                  ("|use pragma Profile (Restricted) instead", N);
!             end if;
  
           ------------------
           -- Restrictions --
*************** package body Sem_Prag is
*** 8265,8384 ****
           --    restriction_IDENTIFIER
           --  | restriction_parameter_IDENTIFIER => EXPRESSION
  
!          when Pragma_Restrictions => Restrictions_Pragma : declare
!             Arg   : Node_Id;
!             R_Id  : Restriction_Id;
!             RP_Id : Restriction_Parameter_Id;
!             Id    : Name_Id;
!             Expr  : Node_Id;
!             Val   : Uint;
! 
!          begin
!             Check_Ada_83_Warning;
!             Check_At_Least_N_Arguments (1);
!             Check_Valid_Configuration_Pragma;
! 
!             Arg := Arg1;
!             while Present (Arg) loop
!                Id := Chars (Arg);
!                Expr := Expression (Arg);
! 
!                --  Case of no restriction identifier
! 
!                if Id = No_Name then
!                   if Nkind (Expr) /= N_Identifier then
!                      Error_Pragma_Arg
!                        ("invalid form for restriction", Arg);
! 
!                   else
!                      R_Id := Get_Restriction_Id (Chars (Expr));
! 
!                      if R_Id = Not_A_Restriction_Id then
!                         Error_Pragma_Arg
!                           ("invalid restriction identifier", Arg);
! 
!                      --  Restriction is active
! 
!                      else
!                         if Implementation_Restriction (R_Id) then
!                            Check_Restriction
!                              (No_Implementation_Restrictions, Arg);
!                         end if;
! 
!                         Restrictions (R_Id) := True;
! 
!                         --  Set location, but preserve location of system
!                         --  restriction for nice error msg with run time name
! 
!                         if Restrictions_Loc (R_Id) /= System_Location then
!                            Restrictions_Loc (R_Id) := Sloc (N);
!                         end if;
! 
!                         --  Record the restriction if we are in the main unit,
!                         --  or in the extended main unit. The reason that we
!                         --  test separately for Main_Unit is that gnat.adc is
!                         --  processed with Current_Sem_Unit = Main_Unit, but
!                         --  nodes in gnat.adc do not appear to be the extended
!                         --  main source unit (they probably should do ???)
! 
!                         if Current_Sem_Unit = Main_Unit
!                           or else In_Extended_Main_Source_Unit (N)
!                         then
!                            Main_Restrictions (R_Id) := True;
!                         end if;
! 
!                         --  A very special case that must be processed here:
!                         --  pragma Restrictions (No_Exceptions) turns off all
!                         --  run-time checking. This is a bit dubious in terms
!                         --  of the formal language definition, but it is what
!                         --  is intended by the wording of RM H.4(12).
! 
!                         if R_Id = No_Exceptions then
!                            Scope_Suppress := (others => True);
!                         end if;
!                      end if;
!                   end if;
! 
!                --  Case of restriction identifier present
! 
!                else
!                   RP_Id := Get_Restriction_Parameter_Id (Id);
!                   Analyze_And_Resolve (Expr, Any_Integer);
! 
!                   if RP_Id = Not_A_Restriction_Parameter_Id then
!                      Error_Pragma_Arg
!                        ("invalid restriction parameter identifier", Arg);
! 
!                   elsif not Is_OK_Static_Expression (Expr) then
!                      Flag_Non_Static_Expr
!                        ("value must be static expression!", Expr);
!                      raise Pragma_Exit;
! 
!                   elsif not Is_Integer_Type (Etype (Expr))
!                     or else Expr_Value (Expr) < 0
!                   then
!                      Error_Pragma_Arg
!                        ("value must be non-negative integer", Arg);
! 
!                   --  Restriction pragma is active
! 
!                   else
!                      Val := Expr_Value (Expr);
! 
!                      --  Record pragma if most restrictive so far
! 
!                      if Restriction_Parameters (RP_Id) = No_Uint
!                        or else Val < Restriction_Parameters (RP_Id)
!                      then
!                         Restriction_Parameters (RP_Id) := Val;
!                         Restriction_Parameters_Loc (RP_Id) := Sloc (N);
!                      end if;
!                   end if;
!                end if;
! 
!                Next (Arg);
!             end loop;
!          end Restrictions_Pragma;
  
           --------------------------
           -- Restriction_Warnings --
--- 8893,8900 ----
           --    restriction_IDENTIFIER
           --  | restriction_parameter_IDENTIFIER => EXPRESSION
  
!          when Pragma_Restrictions =>
!             Process_Restrictions_Or_Restriction_Warnings;
  
           --------------------------
           -- Restriction_Warnings --
*************** package body Sem_Prag is
*** 8386,8434 ****
  
           --  pragma Restriction_Warnings (RESTRICTION {, RESTRICTION});
  
!          --  RESTRICTION ::= restriction_IDENTIFIER
! 
!          when Pragma_Restriction_Warnings => Restriction_Warn : declare
!             Arg   : Node_Id;
!             R_Id  : Restriction_Id;
!             Expr  : Node_Id;
! 
!          begin
!             GNAT_Pragma;
!             Check_At_Least_N_Arguments (1);
!             Check_Valid_Configuration_Pragma;
!             Check_No_Identifiers;
! 
!             Arg := Arg1;
!             while Present (Arg) loop
!                Expr := Expression (Arg);
! 
!                if Nkind (Expr) /= N_Identifier then
!                   Error_Pragma_Arg
!                     ("invalid form for restriction", Arg);
! 
!                else
!                   R_Id := Get_Restriction_Id (Chars (Expr));
! 
!                   if R_Id = Not_A_Restriction_Id then
!                      Error_Pragma_Arg
!                        ("invalid restriction identifier", Arg);
! 
!                   --  Restriction is active
! 
!                   else
!                      if Implementation_Restriction (R_Id) then
!                         Check_Restriction
!                           (No_Implementation_Restrictions, Arg);
!                      end if;
! 
!                      Restriction_Warnings (R_Id) := True;
!                   end if;
!                end if;
  
!                Next (Arg);
!             end loop;
!          end Restriction_Warn;
  
           ----------------
           -- Reviewable --
--- 8902,8913 ----
  
           --  pragma Restriction_Warnings (RESTRICTION {, RESTRICTION});
  
!          --  RESTRICTION ::=
!          --    restriction_IDENTIFIER
!          --  | restriction_parameter_IDENTIFIER => EXPRESSION
  
!          when Pragma_Restriction_Warnings =>
!             Process_Restrictions_Or_Restriction_Warnings;
  
           ----------------
           -- Reviewable --
*************** package body Sem_Prag is
*** 8498,8506 ****
           -- Source_File_Name --
           ----------------------
  
           --  pragma Source_File_Name (
!          --    [UNIT_NAME =>] unit_NAME,
!          --    [BODY_FILE_NAME | SPEC_FILE_NAME] => STRING_LITERAL);
  
           --  No processing here. Processing was completed during parsing,
           --  since we need to have file names set as early as possible.
--- 8977,9015 ----
           -- Source_File_Name --
           ----------------------
  
+          --  There are five forms for this pragma:
+ 
           --  pragma Source_File_Name (
!          --    [UNIT_NAME      =>] unit_NAME,
!          --     BODY_FILE_NAME =>  STRING_LITERAL
!          --    [, [INDEX =>] INTEGER_LITERAL]);
! 
!          --  pragma Source_File_Name (
!          --    [UNIT_NAME      =>] unit_NAME,
!          --     SPEC_FILE_NAME =>  STRING_LITERAL
!          --    [, [INDEX =>] INTEGER_LITERAL]);
! 
!          --  pragma Source_File_Name (
!          --     BODY_FILE_NAME  => STRING_LITERAL
!          --  [, DOT_REPLACEMENT => STRING_LITERAL]
!          --  [, CASING          => CASING_SPEC]);
! 
!          --  pragma Source_File_Name (
!          --     SPEC_FILE_NAME  => STRING_LITERAL
!          --  [, DOT_REPLACEMENT => STRING_LITERAL]
!          --  [, CASING          => CASING_SPEC]);
! 
!          --  pragma Source_File_Name (
!          --     SUBUNIT_FILE_NAME  => STRING_LITERAL
!          --  [, DOT_REPLACEMENT    => STRING_LITERAL]
!          --  [, CASING             => CASING_SPEC]);
! 
!          --  CASING_SPEC ::= Uppercase | Lowercase | Mixedcase
! 
!          --  Pragma Source_File_Name_Project (SFNP) is equivalent to pragma
!          --  Source_File_Name (SFN), however their usage is exclusive:
!          --  SFN can only be used when no project file is used, while
!          --  SFNP can only be used when a project file is used.
  
           --  No processing here. Processing was completed during parsing,
           --  since we need to have file names set as early as possible.
*************** package body Sem_Prag is
*** 8517,8525 ****
           -- Source_File_Name_Project --
           ------------------------------
  
!          --  pragma Source_File_Name_Project (
!          --    [UNIT_NAME =>] unit_NAME,
!          --    [BODY_FILE_NAME | SPEC_FILE_NAME] => STRING_LITERAL);
  
           --  No processing here. Processing was completed during parsing,
           --  since we need to have file names set as early as possible.
--- 9026,9032 ----
           -- Source_File_Name_Project --
           ------------------------------
  
!          --  See Source_File_Name for syntax
  
           --  No processing here. Processing was completed during parsing,
           --  since we need to have file names set as early as possible.
*************** package body Sem_Prag is
*** 8534,8539 ****
--- 9041,9047 ----
  
              --  Check that a pragma Source_File_Name_Project is used only
              --  in a configuration pragmas file.
+ 
              --  Pragmas Source_File_Name_Project should only be generated
              --  by the Project Manager in configuration pragmas files.
  
*************** package body Sem_Prag is
*** 9331,9336 ****
--- 9839,9852 ----
                 Tdef  := Type_Definition (Declaration_Node (Typ));
                 Clist := Component_List (Tdef);
  
+                Comp := First (Component_Items (Clist));
+                while Present (Comp) loop
+ 
+                   Check_Component (Comp);
+                   Next (Comp);
+ 
+                end loop;
+ 
                 if No (Clist) or else No (Variant_Part (Clist)) then
                    Error_Msg_N
                      ("Unchecked_Union must have variant part",
*************** package body Sem_Prag is
*** 9340,9397 ****
  
                 Vpart := Variant_Part (Clist);
  
-                if Is_Non_Empty_List (Component_Items (Clist)) then
-                   Error_Msg_N
-                     ("components before variant not allowed " &
-                      "in Unchecked_Union",
-                      First (Component_Items (Clist)));
-                end if;
- 
                 Variant := First (Variants (Vpart));
                 while Present (Variant) loop
!                   Clist := Component_List (Variant);
! 
!                   if Present (Variant_Part (Clist)) then
!                      Error_Msg_N
!                        ("Unchecked_Union may not have nested variants",
!                         Variant_Part (Clist));
!                   end if;
! 
!                   if not Is_Non_Empty_List (Component_Items (Clist)) then
!                      Error_Msg_N
!                        ("Unchecked_Union may not have empty component list",
!                         Variant);
!                      return;
!                   end if;
! 
!                   Comp := First (Component_Items (Clist));
! 
!                   if Nkind (Comp) = N_Component_Declaration then
! 
!                      if Present (Expression (Comp)) then
!                         Error_Msg_N
!                           ("default initialization not allowed " &
!                            "in Unchecked_Union",
!                            Expression (Comp));
!                      end if;
! 
!                      declare
!                         Sindic : constant Node_Id :=
!                           Subtype_Indication (Component_Definition (Comp));
! 
!                      begin
!                         if Nkind (Sindic) = N_Subtype_Indication then
!                            Check_Static_Constraint (Constraint (Sindic));
!                         end if;
!                      end;
!                   end if;
! 
!                   if Present (Next (Comp)) then
!                      Error_Msg_N
!                        ("Unchecked_Union variant can have only one component",
!                         Next (Comp));
!                   end if;
! 
                    Next (Variant);
                 end loop;
              end if;
--- 9856,9864 ----
  
                 Vpart := Variant_Part (Clist);
  
                 Variant := First (Variants (Vpart));
                 while Present (Variant) loop
!                   Check_Variant (Variant);
                    Next (Variant);
                 end loop;
              end if;
*************** package body Sem_Prag is
*** 9478,9484 ****
              Check_At_Least_N_Arguments (1);
  
              Arg_Node := Arg1;
- 
              while Present (Arg_Node) loop
                 Check_No_Identifier (Arg_Node);
  
--- 9945,9950 ----
*************** package body Sem_Prag is
*** 9650,9656 ****
                    --  the formal may be wrapped in a conversion if the actual
                    --  is a conversion. Retrieve the real entity name.
  
!                   if In_Instance_Body
                      and then Nkind (E_Id) = N_Unchecked_Type_Conversion
                    then
                       E_Id := Expression (E_Id);
--- 10116,10123 ----
                    --  the formal may be wrapped in a conversion if the actual
                    --  is a conversion. Retrieve the real entity name.
  
!                   if (In_Instance_Body
!                        or else In_Inlined_Body)
                      and then Nkind (E_Id) = N_Unchecked_Type_Conversion
                    then
                       E_Id := Expression (E_Id);
*************** package body Sem_Prag is
*** 9673,9681 ****
  
                          if Is_Enumeration_Type (E) then
                             declare
!                               Lit : Entity_Id := First_Literal (E);
! 
                             begin
                                while Present (Lit) loop
                                   Set_Warnings_Off (Lit);
                                   Next_Literal (Lit);
--- 10140,10148 ----
  
                          if Is_Enumeration_Type (E) then
                             declare
!                               Lit : Entity_Id;
                             begin
+                               Lit := First_Literal (E);
                                while Present (Lit) loop
                                   Set_Warnings_Off (Lit);
                                   Next_Literal (Lit);
*************** package body Sem_Prag is
*** 9734,9740 ****
  
           when Unknown_Pragma =>
              raise Program_Error;
- 
        end case;
  
     exception
--- 10201,10206 ----
*************** package body Sem_Prag is
*** 9758,9772 ****
        Result : Entity_Id;
  
     begin
-       Result := Def_Id;
- 
        --  Follow subprogram renaming chain
  
        while Is_Subprogram (Result)
          and then
            (Is_Generic_Instance (Result)
              or else Nkind (Parent (Declaration_Node (Result))) =
!               N_Subprogram_Renaming_Declaration)
          and then Present (Alias (Result))
        loop
           Result := Alias (Result);
--- 10224,10237 ----
        Result : Entity_Id;
  
     begin
        --  Follow subprogram renaming chain
  
+       Result := Def_Id;
        while Is_Subprogram (Result)
          and then
            (Is_Generic_Instance (Result)
              or else Nkind (Parent (Declaration_Node (Result))) =
!                     N_Subprogram_Renaming_Declaration)
          and then Present (Alias (Result))
        loop
           Result := Alias (Result);
*************** package body Sem_Prag is
*** 9775,9780 ****
--- 10240,10305 ----
        return Result;
     end Get_Base_Subprogram;
  
+    -----------------------------
+    -- Is_Config_Static_String --
+    -----------------------------
+ 
+    function Is_Config_Static_String (Arg : Node_Id) return Boolean is
+ 
+       function Add_Config_Static_String (Arg : Node_Id) return Boolean;
+       --  This is an internal recursive function that is just like the
+       --  outer function except that it adds the string to the name buffer
+       --  rather than placing the string in the name buffer.
+ 
+       ------------------------------
+       -- Add_Config_Static_String --
+       ------------------------------
+ 
+       function Add_Config_Static_String (Arg : Node_Id) return Boolean is
+          N : Node_Id;
+          C : Char_Code;
+ 
+       begin
+          N := Arg;
+ 
+          if Nkind (N) = N_Op_Concat then
+             if Add_Config_Static_String (Left_Opnd (N)) then
+                N := Right_Opnd (N);
+             else
+                return False;
+             end if;
+          end if;
+ 
+          if Nkind (N) /= N_String_Literal then
+             Error_Msg_N ("string literal expected for pragma argument", N);
+             return False;
+ 
+          else
+             for J in 1 .. String_Length (Strval (N)) loop
+                C := Get_String_Char (Strval (N), J);
+ 
+                if not In_Character_Range (C) then
+                   Error_Msg
+                     ("string literal contains invalid wide character",
+                      Sloc (N) + 1 + Source_Ptr (J));
+                   return False;
+                end if;
+ 
+                Add_Char_To_Name_Buffer (Get_Character (C));
+             end loop;
+          end if;
+ 
+          return True;
+       end Add_Config_Static_String;
+ 
+    --  Start of prorcessing for Is_Config_Static_String
+ 
+    begin
+ 
+       Name_Len := 0;
+       return Add_Config_Static_String (Arg);
+    end Is_Config_Static_String;
+ 
     -----------------------------------------
     -- Is_Non_Significant_Pragma_Reference --
     -----------------------------------------
*************** package body Sem_Prag is
*** 9786,9795 ****
--- 10311,10322 ----
     --  indicates that appearence in that parameter position is significant.
  
     Sig_Flags : constant array (Pragma_Id) of Int :=
+ 
       (Pragma_AST_Entry                    => -1,
        Pragma_Abort_Defer                  => -1,
        Pragma_Ada_83                       => -1,
        Pragma_Ada_95                       => -1,
+       Pragma_Ada_05                       => -1,
        Pragma_All_Calls_Remote             => -1,
        Pragma_Annotate                     => -1,
        Pragma_Assert                       => -1,
*************** package body Sem_Prag is
*** 9811,9816 ****
--- 10338,10344 ----
        Pragma_Convention                   =>  0,
        Pragma_Convention_Identifier        =>  0,
        Pragma_Debug                        => -1,
+       Pragma_Detect_Blocking              => -1,
        Pragma_Discard_Names                =>  0,
        Pragma_Elaborate                    => -1,
        Pragma_Elaborate_All                => -1,
*************** package body Sem_Prag is
*** 9865,9875 ****
        Pragma_Memory_Size                  => -1,
        Pragma_No_Return                    =>  0,
        Pragma_No_Run_Time                  => -1,
        Pragma_Normalize_Scalars            => -1,
        Pragma_Obsolescent                  =>  0,
        Pragma_Optimize                     => -1,
        Pragma_Optional_Overriding          => -1,
-       Pragma_Overriding                   => -1,
        Pragma_Pack                         =>  0,
        Pragma_Page                         => -1,
        Pragma_Passive                      => -1,
--- 10393,10403 ----
        Pragma_Memory_Size                  => -1,
        Pragma_No_Return                    =>  0,
        Pragma_No_Run_Time                  => -1,
+       Pragma_No_Strict_Aliasing           => -1,
        Pragma_Normalize_Scalars            => -1,
        Pragma_Obsolescent                  =>  0,
        Pragma_Optimize                     => -1,
        Pragma_Optional_Overriding          => -1,
        Pragma_Pack                         =>  0,
        Pragma_Page                         => -1,
        Pragma_Passive                      => -1,
*************** package body Sem_Prag is
*** 9878,9883 ****
--- 10406,10413 ----
        Pragma_Persistent_Object            => -1,
        Pragma_Preelaborate                 => -1,
        Pragma_Priority                     => -1,
+       Pragma_Profile                      =>  0,
+       Pragma_Profile_Warnings             =>  0,
        Pragma_Propagate_Exceptions         => -1,
        Pragma_Psect_Object                 => -1,
        Pragma_Pure                         =>  0,
*************** package body Sem_Prag is
*** 9914,9920 ****
        Pragma_Thread_Body                  => +2,
        Pragma_Time_Slice                   => -1,
        Pragma_Title                        => -1,
!       Pragma_Unchecked_Union              => -1,
        Pragma_Unimplemented_Unit           => -1,
        Pragma_Universal_Data               => -1,
        Pragma_Unreferenced                 => -1,
--- 10444,10450 ----
        Pragma_Thread_Body                  => +2,
        Pragma_Time_Slice                   => -1,
        Pragma_Title                        => -1,
!       Pragma_Unchecked_Union              =>  0,
        Pragma_Unimplemented_Unit           => -1,
        Pragma_Universal_Data               => -1,
        Pragma_Unreferenced                 => -1,
*************** package body Sem_Prag is
*** 10086,10091 ****
--- 10616,10625 ----
        --  Stores encoded value of character code CC. The encoding we
        --  use an underscore followed by four lower case hex digits.
  
+       ------------
+       -- Encode --
+       ------------
+ 
        procedure Encode is
        begin
           Store_String_Char (Get_Char_Code ('_'));
*************** package body Sem_Prag is
*** 10188,10194 ****
  
           Pref := Prefix (N);
           Scop := Scope (Entity (N));
- 
           while Nkind (Pref) = N_Selected_Component loop
              Change_Selected_Component_To_Expanded_Name (Pref);
              Set_Entity (Selector_Name (Pref), Scop);
--- 10722,10727 ----
*************** package body Sem_Prag is
*** 10200,10204 ****
           Set_Entity (Pref, Scop);
        end if;
     end Set_Unit_Name;
- 
  end Sem_Prag;
--- 10733,10736 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/sem_prag.ads gcc-4.0.0/gcc/ada/sem_prag.ads
*** gcc-3.4.3/gcc/ada/sem_prag.ads	Tue Oct 21 13:42:20 2003
--- gcc-4.0.0/gcc/ada/sem_prag.ads	Mon May 10 16:18:53 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Sem_Prag is
*** 59,64 ****
--- 59,75 ----
     --  False is returned, then the argument is treated as an entity reference
     --  to the operator.
  
+    function Is_Config_Static_String (Arg : Node_Id) return Boolean;
+    --  This is called for a configuration pragma that requires either a
+    --  string literal or a concatenation of string literals. We cannot
+    --  use normal static string processing because it is too early in
+    --  the case of the pragma appearing in a configuration pragmas file.
+    --  If Arg is of an appropriate form, then this call obtains the string
+    --  (doing any necessary concatenations) and places it in Name_Buffer,
+    --  setting Name_Len to its length, and then returns True. If it is
+    --  not of the correct form, then an appropriate error message is
+    --  posted, and False is returned.
+ 
     procedure Process_Compilation_Unit_Pragmas (N : Node_Id);
     --  Called at the start of processing compilation unit N to deal with
     --  any special issues regarding pragmas. In particular, we have to
diff -Nrcpad gcc-3.4.3/gcc/ada/sem_res.adb gcc-4.0.0/gcc/ada/sem_res.adb
*** gcc-3.4.3/gcc/ada/sem_res.adb	Tue Jan 13 11:51:33 2004
--- gcc-4.0.0/gcc/ada/sem_res.adb	Thu Feb 10 13:50:35 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Nlists;   use Nlists;
*** 44,49 ****
--- 44,50 ----
  with Opt;      use Opt;
  with Output;   use Output;
  with Restrict; use Restrict;
+ with Rident;   use Rident;
  with Rtsfind;  use Rtsfind;
  with Sem;      use Sem;
  with Sem_Aggr; use Sem_Aggr;
*************** package body Sem_Res is
*** 162,169 ****
  
     function Operator_Kind
       (Op_Name   : Name_Id;
!       Is_Binary : Boolean)
!       return      Node_Kind;
     --  Utility to map the name of an operator into the corresponding Node. Used
     --  by other node rewriting procedures.
  
--- 163,169 ----
  
     function Operator_Kind
       (Op_Name   : Name_Id;
!       Is_Binary : Boolean) return Node_Kind;
     --  Utility to map the name of an operator into the corresponding Node. Used
     --  by other node rewriting procedures.
  
*************** package body Sem_Res is
*** 197,205 ****
     --  that operands are resolved properly. Recall that predefined operators
     --  do not have a full signature and special resolution rules apply.
  
!    procedure Rewrite_Renamed_Operator (N : Node_Id; Op : Entity_Id);
     --  An operator can rename another, e.g. in  an instantiation. In that
!    --  case, the proper operator node must be constructed.
  
     procedure Set_String_Literal_Subtype (N : Node_Id; Typ : Entity_Id);
     --  The String_Literal_Subtype is built for all strings that are not
--- 197,208 ----
     --  that operands are resolved properly. Recall that predefined operators
     --  do not have a full signature and special resolution rules apply.
  
!    procedure Rewrite_Renamed_Operator
!      (N   : Node_Id;
!       Op  : Entity_Id;
!       Typ : Entity_Id);
     --  An operator can rename another, e.g. in  an instantiation. In that
!    --  case, the proper operator node must be constructed and resolved.
  
     procedure Set_String_Literal_Subtype (N : Node_Id; Typ : Entity_Id);
     --  The String_Literal_Subtype is built for all strings that are not
*************** package body Sem_Res is
*** 218,225 ****
     function Valid_Conversion
       (N       : Node_Id;
        Target  : Entity_Id;
!       Operand : Node_Id)
!       return    Boolean;
     --  Verify legality rules given in 4.6 (8-23). Target is the target
     --  type of the conversion, which may be an implicit conversion of
     --  an actual parameter to an anonymous access type (in which case
--- 221,227 ----
     function Valid_Conversion
       (N       : Node_Id;
        Target  : Entity_Id;
!       Operand : Node_Id) return Boolean;
     --  Verify legality rules given in 4.6 (8-23). Target is the target
     --  type of the conversion, which may be an implicit conversion of
     --  an actual parameter to an anonymous access type (in which case
*************** package body Sem_Res is
*** 800,805 ****
--- 802,823 ----
           Require_Entity (N);
        end if;
  
+       --  If the context expects a value, and the name is a procedure,
+       --  this is most likely a missing 'Access. Do not try to resolve
+       --  the parameterless call, error will be caught when the outer
+       --  call is analyzed.
+ 
+       if Is_Entity_Name (N)
+         and then Ekind (Entity (N)) = E_Procedure
+         and then not Is_Overloaded (N)
+         and then
+          (Nkind (Parent (N)) = N_Parameter_Association
+             or else Nkind (Parent (N)) = N_Function_Call
+             or else Nkind (Parent (N)) = N_Procedure_Call_Statement)
+       then
+          return;
+       end if;
+ 
        --  Rewrite as call if overloadable entity that is (or could be, in
        --  the overloaded case) a function call. If we know for sure that
        --  the entity is an enumeration literal, we do not rewrite it.
*************** package body Sem_Res is
*** 885,891 ****
        Act1      : Node_Id := First_Actual (N);
        Act2      : Node_Id := Next_Actual (Act1);
        Error     : Boolean := False;
!       Is_Binary : constant Boolean := Present (Act2);
        Op_Node   : Node_Id;
        Opnd_Type : Entity_Id;
        Orig_Type : Entity_Id := Empty;
--- 903,910 ----
        Act1      : Node_Id := First_Actual (N);
        Act2      : Node_Id := Next_Actual (Act1);
        Error     : Boolean := False;
!       Func      : constant Entity_Id := Entity (Name (N));
!       Is_Binary : constant Boolean   := Present (Act2);
        Op_Node   : Node_Id;
        Opnd_Type : Entity_Id;
        Orig_Type : Entity_Id := Empty;
*************** package body Sem_Res is
*** 1154,1160 ****
                           or else Scope (Opnd_Type) /= System_Aux_Id
                           or else Pack /= Scope (System_Aux_Id))
              then
!                Error := True;
  
              elsif Pack = Standard_Standard
                and then not Operand_Type_In_Scope (Standard_Standard)
--- 1173,1183 ----
                           or else Scope (Opnd_Type) /= System_Aux_Id
                           or else Pack /= Scope (System_Aux_Id))
              then
!                if not Is_Overloaded (Right_Opnd (Op_Node)) then
!                   Error := True;
!                else
!                   Error := not Operand_Type_In_Scope (Pack);
!                end if;
  
              elsif Pack = Standard_Standard
                and then not Operand_Type_In_Scope (Standard_Standard)
*************** package body Sem_Res is
*** 1180,1185 ****
--- 1203,1222 ----
           Set_Etype (Op_Node, Etype (N));
        end if;
  
+       --  If this is a call to a function that renames a predefined equality,
+       --  the renaming declaration provides a type that must be used to
+       --  resolve the operands. This must be done now because resolution of
+       --  the equality node will not resolve any remaining ambiguity, and it
+       --  assumes that the first operand is not overloaded.
+ 
+       if (Op_Name = Name_Op_Eq or else Op_Name = Name_Op_Ne)
+         and then Ekind (Func) = E_Function
+         and then Is_Overloaded (Act1)
+       then
+          Resolve (Act1, Base_Type (Etype (First_Formal (Func))));
+          Resolve (Act2, Base_Type (Etype (First_Formal (Func))));
+       end if;
+ 
        Set_Entity (Op_Node, Op_Id);
        Generate_Reference (Op_Id, N, ' ');
        Rewrite (N,  Op_Node);
*************** package body Sem_Res is
*** 1220,1227 ****
  
     function Operator_Kind
       (Op_Name   : Name_Id;
!       Is_Binary : Boolean)
!       return      Node_Kind
     is
        Kind : Node_Kind;
  
--- 1257,1263 ----
  
     function Operator_Kind
       (Op_Name   : Name_Id;
!       Is_Binary : Boolean) return Node_Kind
     is
        Kind : Node_Kind;
  
*************** package body Sem_Res is
*** 1413,1419 ****
              Rewrite (N,
                Make_Character_Literal (Sloc (N),
                  Chars => Name_Find,
!                 Char_Literal_Value => Char_Code (Character'Pos ('A'))));
              Set_Etype (N, Any_Character);
              Set_Is_Static_Expression (N);
  
--- 1449,1456 ----
              Rewrite (N,
                Make_Character_Literal (Sloc (N),
                  Chars => Name_Find,
!                 Char_Literal_Value =>
!                   UI_From_Int (Character'Pos ('A'))));
              Set_Etype (N, Any_Character);
              Set_Is_Static_Expression (N);
  
*************** package body Sem_Res is
*** 2035,2062 ****
        --  Here we have an acceptable interpretation for the context
  
        else
-          --  A user-defined operator is tranformed into a function call at
-          --  this point, so that further processing knows that operators are
-          --  really operators (i.e. are predefined operators). User-defined
-          --  operators that are intrinsic are just renamings of the predefined
-          --  ones, and need not be turned into calls either, but if they rename
-          --  a different operator, we must transform the node accordingly.
-          --  Instantiations of Unchecked_Conversion are intrinsic but are
-          --  treated as functions, even if given an operator designator.
- 
-          if Nkind (N) in N_Op
-            and then Present (Entity (N))
-            and then Ekind (Entity (N)) /= E_Operator
-          then
- 
-             if not Is_Predefined_Op (Entity (N)) then
-                Rewrite_Operator_As_Call (N, Entity (N));
- 
-             elsif Present (Alias (Entity (N))) then
-                Rewrite_Renamed_Operator (N, Alias (Entity (N)));
-             end if;
-          end if;
- 
           --  Propagate type information and normalize tree for various
           --  predefined operations. If the context only imposes a class of
           --  types, rather than a specific type, propagate the actual type
--- 2072,2077 ----
*************** package body Sem_Res is
*** 2083,2088 ****
--- 2098,2136 ----
              end if;
           end if;
  
+          --  A user-defined operator is tranformed into a function call at
+          --  this point, so that further processing knows that operators are
+          --  really operators (i.e. are predefined operators). User-defined
+          --  operators that are intrinsic are just renamings of the predefined
+          --  ones, and need not be turned into calls either, but if they rename
+          --  a different operator, we must transform the node accordingly.
+          --  Instantiations of Unchecked_Conversion are intrinsic but are
+          --  treated as functions, even if given an operator designator.
+ 
+          if Nkind (N) in N_Op
+            and then Present (Entity (N))
+            and then Ekind (Entity (N)) /= E_Operator
+          then
+ 
+             if not Is_Predefined_Op (Entity (N)) then
+                Rewrite_Operator_As_Call (N, Entity (N));
+ 
+             elsif Present (Alias (Entity (N)))
+               and then
+                 Nkind (Parent (Parent (Entity (N))))
+                   = N_Subprogram_Renaming_Declaration
+             then
+                Rewrite_Renamed_Operator (N, Alias (Entity (N)), Typ);
+ 
+                --  If the node is rewritten, it will be fully resolved in
+                --  Rewrite_Renamed_Operator.
+ 
+                if Analyzed (N) then
+                   return;
+                end if;
+             end if;
+          end if;
+ 
           case N_Subexpr'(Nkind (N)) is
  
              when N_Aggregate => Resolve_Aggregate                (N, Ctx_Type);
*************** package body Sem_Res is
*** 2597,2603 ****
                 --  or IN OUT actual to a nested call, since this is a
                 --  case of reading an out parameter, which is not allowed.
  
!                if Ada_83
                   and then Is_Entity_Name (A)
                   and then Ekind (Entity (A)) = E_Out_Parameter
                 then
--- 2645,2651 ----
                 --  or IN OUT actual to a nested call, since this is a
                 --  case of reading an out parameter, which is not allowed.
  
!                if Ada_Version = Ada_83
                   and then Is_Entity_Name (A)
                   and then Ekind (Entity (A)) = E_Out_Parameter
                 then
*************** package body Sem_Res is
*** 2665,2670 ****
--- 2713,2734 ----
                 else
                    Apply_Range_Check (A, F_Typ);
                 end if;
+ 
+                --  Ada 2005 (AI-231)
+ 
+                if Ada_Version >= Ada_05
+                  and then Is_Access_Type (F_Typ)
+                  and then (Can_Never_Be_Null (F)
+                            or else Can_Never_Be_Null (F_Typ))
+                then
+                   if Nkind (A) = N_Null then
+                      Apply_Compile_Time_Constraint_Error
+                        (N      => A,
+                         Msg    => "(Ada 2005) NULL not allowed in "
+                                    & "null-excluding formal?",
+                         Reason => CE_Null_Not_Allowed);
+                   end if;
+                end if;
              end if;
  
              if Ekind (F) = E_Out_Parameter
*************** package body Sem_Res is
*** 2746,2752 ****
                 then
                    Error_Msg_Node_2 := F_Typ;
                    Error_Msg_NE
!                     ("& is not a primitive operation of &!", A, Nam);
                 end if;
  
              elsif Is_Access_Type (A_Typ)
--- 2810,2816 ----
                 then
                    Error_Msg_Node_2 := F_Typ;
                    Error_Msg_NE
!                     ("& is not a dispatching operation of &!", A, Nam);
                 end if;
  
              elsif Is_Access_Type (A_Typ)
*************** package body Sem_Res is
*** 2767,2773 ****
                 then
                    Error_Msg_Node_2 := Designated_Type (F_Typ);
                    Error_Msg_NE
!                     ("& is not a primitive operation of &!", A, Nam);
                 end if;
              end if;
  
--- 2831,2837 ----
                 then
                    Error_Msg_Node_2 := Designated_Type (F_Typ);
                    Error_Msg_NE
!                     ("& is not a dispatching operation of &!", A, Nam);
                 end if;
              end if;
  
*************** package body Sem_Res is
*** 3119,3132 ****
              end loop;
  
              --  Reanalyze the literal with the fixed type of the context.
  
!             if N = L then
!                Set_Analyzed (R, False);
!                Resolve (R, B_Typ);
!             else
!                Set_Analyzed (L, False);
!                Resolve (L, B_Typ);
!             end if;
  
           else
              Resolve (N);
--- 3183,3215 ----
              end loop;
  
              --  Reanalyze the literal with the fixed type of the context.
+             --  If context is Universal_Fixed, we are within a conversion,
+             --  leave the literal as a universal real because there is no
+             --  usable fixed type, and the target of the conversion plays
+             --  no role in the resolution.
  
!             declare
!                Op2 : Node_Id;
!                T2  : Entity_Id;
! 
!             begin
!                if N = L then
!                   Op2 := R;
!                else
!                   Op2 := L;
!                end if;
! 
!                if B_Typ = Universal_Fixed
!                   and then Nkind (Op2) = N_Real_Literal
!                then
!                   T2 := Universal_Real;
!                else
!                   T2 := B_Typ;
!                end if;
! 
!                Set_Analyzed (Op2, False);
!                Resolve (Op2, T2);
!             end;
  
           else
              Resolve (N);
*************** package body Sem_Res is
*** 3226,3232 ****
                 Set_Etype (R, Any_Type);
  
              else
!                if Ada_83
                    and then Etype (N) = Universal_Fixed
                    and then Nkind (Parent (N)) /= N_Type_Conversion
                    and then Nkind (Parent (N)) /= N_Unchecked_Type_Conversion
--- 3309,3315 ----
                 Set_Etype (R, Any_Type);
  
              else
!                if Ada_Version = Ada_83
                    and then Etype (N) = Universal_Fixed
                    and then Nkind (Parent (N)) /= N_Type_Conversion
                    and then Nkind (Parent (N)) /= N_Unchecked_Type_Conversion
*************** package body Sem_Res is
*** 3353,3359 ****
        It      : Interp;
        Norm_OK : Boolean;
        Scop    : Entity_Id;
!       Decl    : Node_Id;
  
     begin
        --  The context imposes a unique interpretation with type Typ on
--- 3436,3442 ----
        It      : Interp;
        Norm_OK : Boolean;
        Scop    : Entity_Id;
!       W       : Node_Id;
  
     begin
        --  The context imposes a unique interpretation with type Typ on
*************** package body Sem_Res is
*** 3496,3526 ****
  
        --  Check for call to obsolescent subprogram
  
!       if Warn_On_Obsolescent_Feature then
!          Decl := Parent (Parent (Nam));
  
!          if Nkind (Decl) = N_Subprogram_Declaration
!            and then Is_List_Member (Decl)
!            and then Nkind (Next (Decl)) = N_Pragma
!          then
!             declare
!                P : constant Node_Id := Next (Decl);
  
!             begin
!                if Chars (P) = Name_Obsolescent then
!                   Error_Msg_NE ("call to obsolescent subprogram&?", N, Nam);
  
!                   if Pragma_Argument_Associations (P) /= No_List then
!                      Name_Buffer (1) := '|';
!                      Name_Buffer (2) := '?';
!                      Name_Len := 2;
!                      Add_String_To_Name_Buffer
!                        (Strval (Expression
!                                  (First (Pragma_Argument_Associations (P)))));
!                      Error_Msg_N (Name_Buffer (1 .. Name_Len), N);
!                   end if;
!                end if;
!             end;
           end if;
        end if;
  
--- 3579,3608 ----
  
        --  Check for call to obsolescent subprogram
  
!       if Warn_On_Obsolescent_Feature
!         and then Is_Subprogram (Nam)
!         and then Is_Obsolescent (Nam)
!       then
!          Error_Msg_NE ("call to obsolescent subprogram&?", N, Nam);
  
!          --  Output additional warning if present
  
!          W := Obsolescent_Warning (Nam);
  
!          if Present (W) then
!             Name_Buffer (1) := '|';
!             Name_Buffer (2) := '?';
!             Name_Len := 2;
! 
!             --  Add characters to message, protecting all of them
! 
!             for J in 1 .. String_Length (Strval (W)) loop
!                Add_Char_To_Name_Buffer (''');
!                Add_Char_To_Name_Buffer
!                  (Get_Character (Get_String_Char (Strval (W), J)));
!             end loop;
! 
!             Error_Msg_N (Name_Buffer (1 .. Name_Len), N);
           end if;
        end if;
  
*************** package body Sem_Res is
*** 3659,3665 ****
        Scop := Current_Scope;
  
        if Nam = Scop
!         and then not Restrictions (No_Recursion)
          and then Check_Infinite_Recursion (N)
        then
           --  Here we detected and flagged an infinite recursion, so we do
--- 3741,3747 ----
        Scop := Current_Scope;
  
        if Nam = Scop
!         and then not Restriction_Active (No_Recursion)
          and then Check_Infinite_Recursion (N)
        then
           --  Here we detected and flagged an infinite recursion, so we do
*************** package body Sem_Res is
*** 3685,3690 ****
--- 3767,3773 ----
                 --  we will try later to detect some cases here at run time by
                 --  expanding checking code (see Detect_Infinite_Recursion in
                 --  package Exp_Ch6).
+ 
                 --  If the recursive call is within a handler we do not emit a
                 --  warning, because this is a common idiom: loop until input
                 --  is correct, catch illegal input in handler and restart.
*************** package body Sem_Res is
*** 3807,3814 ****
           Check_Intrinsic_Call (N);
        end if;
  
!       --  If we fall through we definitely have a non-static call
! 
        Check_Elab_Call (N);
     end Resolve_Call;
  
--- 3890,3896 ----
           Check_Intrinsic_Call (N);
        end if;
  
!       Eval_Call (N);
        Check_Elab_Call (N);
     end Resolve_Call;
  
*************** package body Sem_Res is
*** 3826,3836 ****
        Set_Etype (N, B_Typ);
        Eval_Character_Literal (N);
  
!       --  Wide_Character literals must always be defined, since the set of
!       --  wide character literals is complete, i.e. if a character literal
!       --  is accepted by the parser, then it is OK for wide character.
  
!       if Root_Type (B_Typ) = Standard_Wide_Character then
           return;
  
        --  Always accept character literal for type Any_Character, which
--- 3908,3919 ----
        Set_Etype (N, B_Typ);
        Eval_Character_Literal (N);
  
!       --  Wide_Wide_Character literals must always be defined, since the set
!       --  of wide wide character literals is complete, i.e. if a character
!       --  literal is accepted by the parser, then it is OK for wide wide
!       --  character (out of range character literals are rejected).
  
!       if Root_Type (B_Typ) = Standard_Wide_Wide_Character then
           return;
  
        --  Always accept character literal for type Any_Character, which
*************** package body Sem_Res is
*** 3844,3853 ****
        --  the literal is in range
  
        elsif Root_Type (B_Typ) = Standard_Character then
!          if In_Character_Range (Char_Literal_Value (N)) then
              return;
           end if;
  
        --  If the entity is already set, this has already been resolved in
        --  a generic context, or comes from expansion. Nothing else to do.
  
--- 3927,3950 ----
        --  the literal is in range
  
        elsif Root_Type (B_Typ) = Standard_Character then
!          if In_Character_Range (UI_To_CC (Char_Literal_Value (N))) then
              return;
           end if;
  
+       --  For Standard.Wide_Character or a type derived from it, check
+       --  that the literal is in range
+ 
+       elsif Root_Type (B_Typ) = Standard_Wide_Character then
+          if In_Wide_Character_Range (UI_To_CC (Char_Literal_Value (N))) then
+             return;
+          end if;
+ 
+       --  For Standard.Wide_Wide_Character or a type derived from it, we
+       --  know the literal is in range, since the parser checked!
+ 
+       elsif Root_Type (B_Typ) = Standard_Wide_Wide_Character then
+          return;
+ 
        --  If the entity is already set, this has already been resolved in
        --  a generic context, or comes from expansion. Nothing else to do.
  
*************** package body Sem_Res is
*** 3929,3941 ****
              return;
  
           else
-             if Comes_From_Source (N)
-               and then Has_Unchecked_Union (T)
-             then
-                Error_Msg_N
-                 ("cannot compare Unchecked_Union values", N);
-             end if;
- 
              Resolve (L, T);
              Resolve (R, T);
              Check_Unset_Reference (L);
--- 4026,4031 ----
*************** package body Sem_Res is
*** 4116,4122 ****
           Error_Msg_N ("illegal use of generic function", N);
  
        elsif Ekind (E) = E_Out_Parameter
!         and then Ada_83
          and then (Nkind (Parent (N)) in N_Op
                      or else (Nkind (Parent (N)) = N_Assignment_Statement
                                and then N = Expression (Parent (N)))
--- 4206,4212 ----
           Error_Msg_N ("illegal use of generic function", N);
  
        elsif Ekind (E) = E_Out_Parameter
!         and then Ada_Version = Ada_83
          and then (Nkind (Parent (N)) in N_Op
                      or else (Nkind (Parent (N)) = N_Assignment_Statement
                                and then N = Expression (Parent (N)))
*************** package body Sem_Res is
*** 4442,4448 ****
        --  call at all violates a specified nesting depth of zero.
  
        if Is_Protected_Type (Scope (Nam)) then
!          Check_Restriction (Max_Entry_Queue_Depth, N);
        end if;
  
        --  Use context type to disambiguate a protected function that can be
--- 4532,4538 ----
        --  call at all violates a specified nesting depth of zero.
  
        if Is_Protected_Type (Scope (Nam)) then
!          Check_Restriction (Max_Entry_Queue_Length, N);
        end if;
  
        --  Use context type to disambiguate a protected function that can be
*************** package body Sem_Res is
*** 4672,4684 ****
              end if;
           end if;
  
-          if Comes_From_Source (N)
-            and then Has_Unchecked_Union (T)
-          then
-             Error_Msg_N
-               ("cannot compare Unchecked_Union values", N);
-          end if;
- 
           Resolve (L, T);
           Resolve (R, T);
  
--- 4762,4767 ----
*************** package body Sem_Res is
*** 4902,4910 ****
        Eval_Integer_Literal (N);
     end Resolve_Integer_Literal;
  
!    ---------------------------------
!    --  Resolve_Intrinsic_Operator --
!    ---------------------------------
  
     procedure Resolve_Intrinsic_Operator  (N : Node_Id; Typ : Entity_Id) is
        Btyp : constant Entity_Id := Base_Type (Underlying_Type (Typ));
--- 4985,4993 ----
        Eval_Integer_Literal (N);
     end Resolve_Integer_Literal;
  
!    --------------------------------
!    -- Resolve_Intrinsic_Operator --
!    --------------------------------
  
     procedure Resolve_Intrinsic_Operator  (N : Node_Id; Typ : Entity_Id) is
        Btyp : constant Entity_Id := Base_Type (Underlying_Type (Typ));
*************** package body Sem_Res is
*** 4921,4926 ****
--- 5004,5010 ----
        end loop;
  
        Set_Entity (N, Op);
+       Set_Is_Overloaded (N, False);
  
        --  If the operand type is private, rewrite with suitable
        --  conversions on the operands and the result, to expose
*************** package body Sem_Res is
*** 4949,4965 ****
          or else Typ /= Etype (Right_Opnd (N))
        then
           --  Add explicit conversion where needed, and save interpretations
!          --  if operands are overloaded.
  
!          Arg1 := Convert_To (Typ, Left_Opnd (N));
           Arg2 := Convert_To (Typ, Right_Opnd (N));
  
           if Nkind (Arg1) = N_Type_Conversion then
              Save_Interps (Left_Opnd (N), Expression (Arg1));
           end if;
  
           if Nkind (Arg2) = N_Type_Conversion then
              Save_Interps (Right_Opnd (N), Expression (Arg2));
           end if;
  
           Rewrite (Left_Opnd  (N), Arg1);
--- 5033,5053 ----
          or else Typ /= Etype (Right_Opnd (N))
        then
           --  Add explicit conversion where needed, and save interpretations
!          --  in case operands are overloaded.
  
!          Arg1 := Convert_To (Typ, Left_Opnd  (N));
           Arg2 := Convert_To (Typ, Right_Opnd (N));
  
           if Nkind (Arg1) = N_Type_Conversion then
              Save_Interps (Left_Opnd (N), Expression (Arg1));
+          else
+             Save_Interps (Left_Opnd (N), Arg1);
           end if;
  
           if Nkind (Arg2) = N_Type_Conversion then
              Save_Interps (Right_Opnd (N), Expression (Arg2));
+          else
+             Save_Interps (Right_Opnd (N), Arg2);
           end if;
  
           Rewrite (Left_Opnd  (N), Arg1);
*************** package body Sem_Res is
*** 5120,5130 ****
  
     procedure Resolve_Null (N : Node_Id; Typ : Entity_Id) is
     begin
!       --  For now allow circumvention of the restriction against
!       --  anonymous null access values via a debug switch to allow
!       --  for easier transition.
  
!       if not Debug_Flag_J
          and then Ekind (Typ) = E_Anonymous_Access_Type
          and then Comes_From_Source (N)
        then
--- 5208,5220 ----
  
     procedure Resolve_Null (N : Node_Id; Typ : Entity_Id) is
     begin
!       --  Handle restriction against anonymous null access values
!       --  This restriction can be turned off using -gnatdh.
  
!       --  Ada 2005 (AI-231): Remove restriction
! 
!       if Ada_Version < Ada_05
!         and then not Debug_Flag_J
          and then Ekind (Typ) = E_Anonymous_Access_Type
          and then Comes_From_Source (N)
        then
*************** package body Sem_Res is
*** 5750,5759 ****
           Resolve (P, T);
        end if;
  
!       --  Deal with access type case
  
        if Is_Access_Type (Etype (P)) then
-          Apply_Access_Check (N);
           T := Designated_Type (Etype (P));
        else
           T := Etype (P);
--- 5840,5850 ----
           Resolve (P, T);
        end if;
  
!       --  If prefix is an access type, the node will be transformed into
!       --  an explicit dereference during expansion. The type of the node
!       --  is the designated type of that of the prefix.
  
        if Is_Access_Type (Etype (P)) then
           T := Designated_Type (Etype (P));
        else
           T := Etype (P);
*************** package body Sem_Res is
*** 5904,5909 ****
--- 5995,6020 ----
           Apply_Access_Check (N);
           Array_Type := Designated_Type (Array_Type);
  
+          --  If the prefix is an access to an unconstrained array, we must
+          --  use the actual subtype of the object to perform the index checks.
+          --  The object denoted by the prefix is implicit in the node, so we
+          --  build an explicit representation for it in order to compute the
+          --  actual subtype.
+ 
+          if not Is_Constrained (Array_Type) then
+             Remove_Side_Effects (Prefix (N));
+ 
+             declare
+                Obj : constant Node_Id :=
+                        Make_Explicit_Dereference (Sloc (N),
+                          Prefix => New_Copy_Tree (Prefix (N)));
+             begin
+                Set_Etype (Obj, Array_Type);
+                Set_Parent (Obj, Parent (N));
+                Array_Type := Get_Actual_Subtype (Obj);
+             end;
+          end if;
+ 
        elsif Is_Entity_Name (Name)
          or else (Nkind (Name) = N_Function_Call
                    and then not Is_Constrained (Etype (Name)))
*************** package body Sem_Res is
*** 5916,5922 ****
        Set_Etype (N, Array_Type);
  
        --  If the range is specified by a subtype mark, no resolution
!       --  is necessary.
  
        if not Is_Entity_Name (Drange) then
           Index := First_Index (Array_Type);
--- 6027,6033 ----
        Set_Etype (N, Array_Type);
  
        --  If the range is specified by a subtype mark, no resolution
!       --  is necessary. Else resolve the bounds, and apply needed checks.
  
        if not Is_Entity_Name (Drange) then
           Index := First_Index (Array_Type);
*************** package body Sem_Res is
*** 5964,5970 ****
            or else Nkind (Parent (N)) /= N_Op_Concat
            or else (N /= Left_Opnd (Parent (N))
                      and then N /= Right_Opnd (Parent (N)))
!           or else (Typ = Standard_Wide_String
                      and then Nkind (Original_Node (N)) /= N_String_Literal);
  
        --  If the resolving type is itself a string literal subtype, we
--- 6075,6082 ----
            or else Nkind (Parent (N)) /= N_Op_Concat
            or else (N /= Left_Opnd (Parent (N))
                      and then N /= Right_Opnd (Parent (N)))
!           or else ((Typ = Standard_Wide_String
!                       or else Typ = Standard_Wide_Wide_String)
                      and then Nkind (Original_Node (N)) /= N_String_Literal);
  
        --  If the resolving type is itself a string literal subtype, we
*************** package body Sem_Res is
*** 6024,6044 ****
        elsif Is_Bit_Packed_Array (Typ) then
           null;
  
!       --  Deal with cases of Wide_String and String
  
        else
!          --  For Standard.Wide_String, or any other type whose component
!          --  type is Standard.Wide_Character, we know that all the
           --  characters in the string must be acceptable, since the parser
           --  accepted the characters as valid character literals.
  
!          if R_Typ = Standard_Wide_Character then
              null;
  
           --  For the case of Standard.String, or any other type whose
           --  component type is Standard.Character, we must make sure that
           --  there are no wide characters in the string, i.e. that it is
!          --  entirely composed of characters in range of type String.
  
           --  If the string literal is the result of a static concatenation,
           --  the test has already been performed on the components, and need
--- 6136,6156 ----
        elsif Is_Bit_Packed_Array (Typ) then
           null;
  
!       --  Deal with cases of Wide_Wide_String, Wide_String, and String
  
        else
!          --  For Standard.Wide_Wide_String, or any other type whose component
!          --  type is Standard.Wide_Wide_Character, we know that all the
           --  characters in the string must be acceptable, since the parser
           --  accepted the characters as valid character literals.
  
!          if R_Typ = Standard_Wide_Wide_Character then
              null;
  
           --  For the case of Standard.String, or any other type whose
           --  component type is Standard.Character, we must make sure that
           --  there are no wide characters in the string, i.e. that it is
!          --  entirely composed of characters in range of type Character.
  
           --  If the string literal is the result of a static concatenation,
           --  the test has already been performed on the components, and need
*************** package body Sem_Res is
*** 6055,6061 ****
                    --  a token, right under the offending wide character.
  
                    Error_Msg
!                     ("literal out of range of type Character",
                       Source_Ptr (Int (Loc) + J));
                    return;
                 end if;
--- 6167,6202 ----
                    --  a token, right under the offending wide character.
  
                    Error_Msg
!                     ("literal out of range of type Standard.Character",
!                      Source_Ptr (Int (Loc) + J));
!                   return;
!                end if;
!             end loop;
! 
!          --  For the case of Standard.Wide_String, or any other type whose
!          --  component type is Standard.Wide_Character, we must make sure that
!          --  there are no wide characters in the string, i.e. that it is
!          --  entirely composed of characters in range of type Wide_Character.
! 
!          --  If the string literal is the result of a static concatenation,
!          --  the test has already been performed on the components, and need
!          --  not be repeated.
! 
!          elsif R_Typ = Standard_Wide_Character
!            and then Nkind (Original_Node (N)) /= N_Op_Concat
!          then
!             for J in 1 .. Strlen loop
!                if not In_Wide_Character_Range (Get_String_Char (Str, J)) then
! 
!                   --  If we are out of range, post error. This is one of the
!                   --  very few places that we place the flag in the middle of
!                   --  a token, right under the offending wide character.
! 
!                   --  This is not quite right, because characters in general
!                   --  will take more than one character position ???
! 
!                   Error_Msg
!                     ("literal out of range of type Standard.Wide_Character",
                       Source_Ptr (Int (Loc) + J));
                    return;
                 end if;
*************** package body Sem_Res is
*** 6063,6073 ****
  
           --  If the root type is not a standard character, then we will convert
           --  the string into an aggregate and will let the aggregate code do
!          --  the checking.
  
           else
              null;
- 
           end if;
  
           --  See if the component type of the array corresponding to the
--- 6204,6213 ----
  
           --  If the root type is not a standard character, then we will convert
           --  the string into an aggregate and will let the aggregate code do
!          --  the checking. Standard Wide_Wide_Character is also OK here.
  
           else
              null;
           end if;
  
           --  See if the component type of the array corresponding to the
*************** package body Sem_Res is
*** 6077,6084 ****
           --  the corresponding character aggregate and let the aggregate
           --  code do the checking.
  
!          if R_Typ = Standard_Wide_Character
!            or else R_Typ = Standard_Character
           then
              --  Check for the case of full range, where we are definitely OK
  
--- 6217,6225 ----
           --  the corresponding character aggregate and let the aggregate
           --  code do the checking.
  
!          if R_Typ = Standard_Character
!            or else R_Typ = Standard_Wide_Character
!            or else R_Typ = Standard_Wide_Wide_Character
           then
              --  Check for the case of full range, where we are definitely OK
  
*************** package body Sem_Res is
*** 6137,6143 ****
              Set_Character_Literal_Name (C);
  
              Append_To (Lits,
!               Make_Character_Literal (P, Name_Find, C));
  
              if In_Character_Range (C) then
                 P := P + 1;
--- 6278,6286 ----
              Set_Character_Literal_Name (C);
  
              Append_To (Lits,
!               Make_Character_Literal (P,
!                 Chars              => Name_Find,
!                 Char_Literal_Value => UI_From_CC (C)));
  
              if In_Character_Range (C) then
                 P := P + 1;
*************** package body Sem_Res is
*** 6207,6215 ****
--- 6350,6362 ----
              if Unique_Fixed_Point_Type (N) = Any_Type then
                 return;    --  expression is ambiguous.
              else
+                --  If nothing else, the available fixed type is Duration.
+ 
                 Set_Etype (Operand, Standard_Duration);
              end if;
  
+             --  Resolve the real operand with largest available precision.
+ 
              if Etype (Right_Opnd (Operand)) = Universal_Real then
                 Rop := New_Copy_Tree (Right_Opnd (Operand));
              else
*************** package body Sem_Res is
*** 6218,6224 ****
  
              Resolve (Rop, Standard_Long_Long_Float);
  
!             if Realval (Rop) /= Ureal_0
                and then abs (Realval (Rop)) < Delta_Value (Standard_Duration)
              then
                 Error_Msg_N ("universal real operand can only be interpreted?",
--- 6365,6376 ----
  
              Resolve (Rop, Standard_Long_Long_Float);
  
!             --  If the operand is a literal (it could be a non-static and
!             --  illegal exponentiation) check whether the use of Duration
!             --  is potentially inaccurate.
! 
!             if Nkind (Rop) = N_Real_Literal
!               and then Realval (Rop) /= Ureal_0
                and then abs (Realval (Rop)) < Delta_Value (Standard_Duration)
              then
                 Error_Msg_N ("universal real operand can only be interpreted?",
*************** package body Sem_Res is
*** 6276,6281 ****
--- 6428,6434 ----
        if Warn_On_Redundant_Constructs
          and then Comes_From_Source (Orig_N)
          and then Nkind (Orig_N) = N_Type_Conversion
+         and then not In_Instance
        then
           Orig_N := Original_Node (Expression (Orig_N));
           Orig_T := Target_Type;
*************** package body Sem_Res is
*** 6433,6449 ****
     -- Rewrite_Renamed_Operator --
     ------------------------------
  
!    procedure Rewrite_Renamed_Operator (N : Node_Id; Op : Entity_Id) is
        Nam       : constant Name_Id := Chars (Op);
        Is_Binary : constant Boolean := Nkind (N) in N_Binary_Op;
        Op_Node   : Node_Id;
  
     begin
        --  Rewrite the operator node using the real operator, not its
!       --  renaming. Exclude user-defined intrinsic operations, which
!       --  are treated separately.
  
!       if Ekind (Op) /= E_Function then
           Op_Node := New_Node (Operator_Kind (Nam, Is_Binary), Sloc (N));
           Set_Chars      (Op_Node, Nam);
           Set_Etype      (Op_Node, Etype (N));
--- 6586,6608 ----
     -- Rewrite_Renamed_Operator --
     ------------------------------
  
!    procedure Rewrite_Renamed_Operator
!      (N   : Node_Id;
!       Op  : Entity_Id;
!       Typ : Entity_Id)
!    is
        Nam       : constant Name_Id := Chars (Op);
        Is_Binary : constant Boolean := Nkind (N) in N_Binary_Op;
        Op_Node   : Node_Id;
  
     begin
        --  Rewrite the operator node using the real operator, not its
!       --  renaming. Exclude user-defined intrinsic operations of the same
!       --  name, which are treated separately and rewritten as calls.
  
!       if Ekind (Op) /= E_Function
!         or else Chars (N) /= Nam
!       then
           Op_Node := New_Node (Operator_Kind (Nam, Is_Binary), Sloc (N));
           Set_Chars      (Op_Node, Nam);
           Set_Etype      (Op_Node, Etype (N));
*************** package body Sem_Res is
*** 6461,6466 ****
--- 6620,6655 ----
           end if;
  
           Rewrite (N, Op_Node);
+ 
+          --  If the context type is private, add the appropriate conversions
+          --  so that the operator is applied to the full view. This is done
+          --  in the routines that resolve intrinsic operators,
+ 
+          if Is_Intrinsic_Subprogram (Op)
+            and then Is_Private_Type (Typ)
+          then
+             case Nkind (N) is
+                when N_Op_Add   | N_Op_Subtract | N_Op_Multiply | N_Op_Divide |
+                     N_Op_Expon | N_Op_Mod      | N_Op_Rem      =>
+                   Resolve_Intrinsic_Operator (N, Typ);
+ 
+                when N_Op_Plus | N_Op_Minus    | N_Op_Abs      =>
+                   Resolve_Intrinsic_Unary_Operator (N, Typ);
+ 
+                when others =>
+                   Resolve (N, Typ);
+             end case;
+          end if;
+ 
+       elsif Ekind (Op) = E_Function
+         and then Is_Intrinsic_Subprogram (Op)
+       then
+          --  Operator renames a user-defined operator of the same name. Use
+          --  the original operator in the node, which is the one that gigi
+          --  knows about.
+ 
+          Set_Entity (N, Op);
+          Set_Is_Overloaded (N, False);
        end if;
     end Rewrite_Renamed_Operator;
  
*************** package body Sem_Res is
*** 6624,6630 ****
        --  Look for visible fixed type declarations in the context.
  
        Item := First (Context_Items (Cunit (Current_Sem_Unit)));
- 
        while Present (Item) loop
           if Nkind (Item) = N_With_Clause then
              Scop := Entity (Name (Item));
--- 6813,6818 ----
*************** package body Sem_Res is
*** 6668,6689 ****
     function Valid_Conversion
       (N       : Node_Id;
        Target  : Entity_Id;
!       Operand : Node_Id)
!       return    Boolean
     is
        Target_Type : constant Entity_Id := Base_Type (Target);
        Opnd_Type   : Entity_Id := Etype (Operand);
  
        function Conversion_Check
          (Valid : Boolean;
!          Msg   : String)
!          return  Boolean;
        --  Little routine to post Msg if Valid is False, returns Valid value
  
        function Valid_Tagged_Conversion
          (Target_Type : Entity_Id;
!          Opnd_Type   : Entity_Id)
!          return        Boolean;
        --  Specifically test for validity of tagged conversions
  
        ----------------------
--- 6856,6874 ----
     function Valid_Conversion
       (N       : Node_Id;
        Target  : Entity_Id;
!       Operand : Node_Id) return Boolean
     is
        Target_Type : constant Entity_Id := Base_Type (Target);
        Opnd_Type   : Entity_Id := Etype (Operand);
  
        function Conversion_Check
          (Valid : Boolean;
!          Msg   : String) return Boolean;
        --  Little routine to post Msg if Valid is False, returns Valid value
  
        function Valid_Tagged_Conversion
          (Target_Type : Entity_Id;
!          Opnd_Type   : Entity_Id) return Boolean;
        --  Specifically test for validity of tagged conversions
  
        ----------------------
*************** package body Sem_Res is
*** 6692,6699 ****
  
        function Conversion_Check
          (Valid : Boolean;
!          Msg   : String)
!          return  Boolean
        is
        begin
           if not Valid then
--- 6877,6883 ----
  
        function Conversion_Check
          (Valid : Boolean;
!          Msg   : String) return Boolean
        is
        begin
           if not Valid then
*************** package body Sem_Res is
*** 6709,6716 ****
  
        function Valid_Tagged_Conversion
          (Target_Type : Entity_Id;
!          Opnd_Type   : Entity_Id)
!          return        Boolean
        is
        begin
           --  Upward conversions are allowed (RM 4.6(22)).
--- 6893,6899 ----
  
        function Valid_Tagged_Conversion
          (Target_Type : Entity_Id;
!          Opnd_Type   : Entity_Id) return Boolean
        is
        begin
           --  Upward conversions are allowed (RM 4.6(22)).
*************** package body Sem_Res is
*** 6814,6819 ****
--- 6997,7008 ----
        elsif Is_Numeric_Type (Target_Type)  then
           if Opnd_Type = Universal_Fixed then
              return True;
+ 
+          elsif (In_Instance or else In_Inlined_Body)
+            and then not Comes_From_Source (N)
+          then
+             return True;
+ 
           else
              return Conversion_Check (Is_Numeric_Type (Opnd_Type),
                               "illegal operand for numeric conversion");
*************** package body Sem_Res is
*** 7002,7023 ****
                       N, Base_Type (Opnd));
                    return False;
  
!                elsif not Subtypes_Statically_Match (Target, Opnd)
!                   and then (not Has_Discriminants (Target)
!                              or else Is_Constrained (Target))
                 then
                    Error_Msg_NE
                      ("target designated subtype not compatible with }",
                       N, Opnd);
                    return False;
- 
-                else
-                   return True;
                 end if;
              end if;
           end;
  
!       elsif Ekind (Target_Type) = E_Access_Subprogram_Type
          and then Conversion_Check
                     (Ekind (Base_Type (Opnd_Type)) = E_Access_Subprogram_Type,
                      "illegal operand for access subprogram conversion")
--- 7191,7222 ----
                       N, Base_Type (Opnd));
                    return False;
  
!                --  Ada 2005 AI-384: legality rule is symmetric in both
!                --  designated types. The conversion is legal (with possible
!                --  constraint check) if either designated type is
!                --  unconstrained.
! 
!                elsif Subtypes_Statically_Match (Target, Opnd)
!                  or else
!                    (Has_Discriminants (Target)
!                      and then
!                       (not Is_Constrained (Opnd)
!                         or else not Is_Constrained (Target)))
                 then
+                   return True;
+ 
+                else
                    Error_Msg_NE
                      ("target designated subtype not compatible with }",
                       N, Opnd);
                    return False;
                 end if;
              end if;
           end;
  
!       elsif (Ekind (Target_Type) = E_Access_Subprogram_Type
!                or else
!              Ekind (Target_Type) = E_Anonymous_Access_Subprogram_Type)
          and then Conversion_Check
                     (Ekind (Base_Type (Opnd_Type)) = E_Access_Subprogram_Type,
                      "illegal operand for access subprogram conversion")
diff -Nrcpad gcc-3.4.3/gcc/ada/sem_type.adb gcc-4.0.0/gcc/ada/sem_type.adb
*** gcc-3.4.3/gcc/ada/sem_type.adb	Thu Nov 20 09:54:01 2003
--- gcc-4.0.0/gcc/ada/sem_type.adb	Mon Sep 13 10:18:41 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Sem_Type is
*** 59,72 ****
     --  of clash lists are stored in array Headers.
  
     --              Headers        Interp_Map          All_Interp
!    --
!    --                 _            -------             ----------
     --                |_|           |_____|         --->|interp1 |
     --                |_|---------->|node |         |   |interp2 |
     --                |_|           |index|---------|   |nointerp|
     --                |_|           |next |             |        |
     --                              |-----|             |        |
!    --                              -------             ----------
  
     --  This scheme does not currently reclaim interpretations. In principle,
     --  after a unit is compiled, all overloadings have been resolved, and the
--- 59,72 ----
     --  of clash lists are stored in array Headers.
  
     --              Headers        Interp_Map          All_Interp
! 
!    --                 _            +-----+             +--------+
     --                |_|           |_____|         --->|interp1 |
     --                |_|---------->|node |         |   |interp2 |
     --                |_|           |index|---------|   |nointerp|
     --                |_|           |next |             |        |
     --                              |-----|             |        |
!    --                              +-----+             +--------+
  
     --  This scheme does not currently reclaim interpretations. In principle,
     --  after a unit is compiled, all overloadings have been resolved, and the
*************** package body Sem_Type is
*** 141,147 ****
     --  visibility of these user-defined operations must be special-cased
     --  to determine whether they hide or are hidden by predefined operators.
     --  The form P."+" (x, y) requires additional handling.
!    --
     --  Concatenation is treated more conventionally: for every one-dimensional
     --  array type we introduce a explicit concatenation operator. This is
     --  necessary to handle the case of (element & element => array) which
--- 141,147 ----
     --  visibility of these user-defined operations must be special-cased
     --  to determine whether they hide or are hidden by predefined operators.
     --  The form P."+" (x, y) requires additional handling.
! 
     --  Concatenation is treated more conventionally: for every one-dimensional
     --  array type we introduce a explicit concatenation operator. This is
     --  necessary to handle the case of (element & element => array) which
*************** package body Sem_Type is
*** 154,160 ****
  
     procedure All_Overloads;
     pragma Warnings (Off, All_Overloads);
!    --  Debugging procedure: list full contents of Overloads table.
  
     procedure New_Interps (N : Node_Id);
     --  Initialize collection of interpretations for the given node, which is
--- 154,160 ----
  
     procedure All_Overloads;
     pragma Warnings (Off, All_Overloads);
!    --  Debugging procedure: list full contents of Overloads table
  
     procedure New_Interps (N : Node_Id);
     --  Initialize collection of interpretations for the given node, which is
*************** package body Sem_Type is
*** 197,203 ****
  
        begin
           Get_First_Interp (N, Index, It);
- 
           while Present (It.Nam) loop
  
              --  A user-defined subprogram hides another declared at an outer
--- 197,202 ----
*************** package body Sem_Type is
*** 234,241 ****
                    exit;
  
                 elsif not In_Open_Scopes (Scope (Name))
!                  or else Scope_Depth (Scope (Name))
!                    <= Scope_Depth (Scope (It.Nam))
                 then
                    --  If ambiguity within instance, and entity is not an
                    --  implicit operation, save for later disambiguation.
--- 233,240 ----
                    exit;
  
                 elsif not In_Open_Scopes (Scope (Name))
!                  or else Scope_Depth (Scope (Name)) <=
!                          Scope_Depth (Scope (It.Nam))
                 then
                    --  If ambiguity within instance, and entity is not an
                    --  implicit operation, save for later disambiguation.
*************** package body Sem_Type is
*** 297,305 ****
  
           elsif Nkind (N) = N_Function_Call then
              Arg := First_Actual (N);
- 
              while Present (Arg) loop
- 
                 if No (Universal_Interpretation (Arg)) then
                    return False;
                 end if;
--- 296,302 ----
*************** package body Sem_Type is
*** 338,344 ****
             or else Is_Potentially_Use_Visible (Vis_Type)
             or else In_Use (Vis_Type)
             or else (In_Use (Scope (Vis_Type))
!                      and then not Is_Hidden (Vis_Type))
             or else Nkind (N) = N_Expanded_Name
             or else (Nkind (N) in N_Op and then E = Entity (N))
             or else In_Instance
--- 335,341 ----
             or else Is_Potentially_Use_Visible (Vis_Type)
             or else In_Use (Vis_Type)
             or else (In_Use (Scope (Vis_Type))
!                       and then not Is_Hidden (Vis_Type))
             or else Nkind (N) = N_Expanded_Name
             or else (Nkind (N) in N_Op and then E = Entity (N))
             or else In_Instance
*************** package body Sem_Type is
*** 354,361 ****
           elsif Nkind (N) = N_Function_Call
             and then Nkind (Name (N)) = N_Expanded_Name
             and then (Entity (Prefix (Name (N))) = Scope (Base_Type (T))
!                       or else Entity (Prefix (Name (N))) = Scope (Vis_Type)
!                       or else Scope (Vis_Type) = System_Aux_Id)
           then
              null;
  
--- 351,358 ----
           elsif Nkind (N) = N_Function_Call
             and then Nkind (Name (N)) = N_Expanded_Name
             and then (Entity (Prefix (Name (N))) = Scope (Base_Type (T))
!                        or else Entity (Prefix (Name (N))) = Scope (Vis_Type)
!                        or else Scope (Vis_Type) = System_Aux_Id)
           then
              null;
  
*************** package body Sem_Type is
*** 390,396 ****
              Set_Etype (N, T);
  
           else
!             --  Record both the operator or subprogram name, and its type.
  
              if Nkind (N) in N_Op or else Is_Entity_Name (N) then
                 Set_Entity (N, E);
--- 387,393 ----
              Set_Etype (N, T);
  
           else
!             --  Record both the operator or subprogram name, and its type
  
              if Nkind (N) in N_Op or else Is_Entity_Name (N) then
                 Set_Entity (N, E);
*************** package body Sem_Type is
*** 504,515 ****
  
                 for J in First_Interp .. All_Interp.Last - 1 loop
  
!                   --  Current homograph is not hidden. Add to overloads.
  
                    if not Is_Immediately_Visible (All_Interp.Table (J).Nam) then
                       exit;
  
!                   --  Homograph is hidden, unless it is a predefined operator.
  
                    elsif Type_Conformant (H, All_Interp.Table (J).Nam) then
  
--- 501,512 ----
  
                 for J in First_Interp .. All_Interp.Last - 1 loop
  
!                   --  Current homograph is not hidden. Add to overloads
  
                    if not Is_Immediately_Visible (All_Interp.Table (J).Nam) then
                       exit;
  
!                   --  Homograph is hidden, unless it is a predefined operator
  
                    elsif Type_Conformant (H, All_Interp.Table (J).Nam) then
  
*************** package body Sem_Type is
*** 547,553 ****
                 H := Homonym (H);
           end loop;
  
!          --  Scan list of homographs for use-visible entities only.
  
           H := Current_Entity (Ent);
  
--- 544,550 ----
                 H := Homonym (H);
           end loop;
  
!          --  Scan list of homographs for use-visible entities only
  
           H := Current_Entity (Ent);
  
*************** package body Sem_Type is
*** 576,582 ****
  
        if All_Interp.Last = First_Interp + 1 then
  
!          --  The original interpretation is in fact not overloaded.
  
           Set_Is_Overloaded (N, False);
        end if;
--- 573,579 ----
  
        if All_Interp.Last = First_Interp + 1 then
  
!          --  The original interpretation is in fact not overloaded
  
           Set_Is_Overloaded (N, False);
        end if;
*************** package body Sem_Type is
*** 666,672 ****
        then
           return True;
  
!       --  The context may be class wide.
  
        elsif Is_Class_Wide_Type (T1)
          and then Is_Ancestor (Root_Type (T1), T2)
--- 663,669 ----
        then
           return True;
  
!       --  The context may be class wide
  
        elsif Is_Class_Wide_Type (T1)
          and then Is_Ancestor (Root_Type (T1), T2)
*************** package body Sem_Type is
*** 731,736 ****
--- 728,754 ----
        then
           return True;
  
+       --  Ada 2005 (AI-254): An Anonymous_Access_To_Subprogram is compatible
+       --  with itself, or with an anonymous type created for an attribute
+       --  reference Access.
+ 
+       elsif (Ekind (Base_Type (T1)) = E_Anonymous_Access_Subprogram_Type
+                or else
+              Ekind (Base_Type (T1))
+                       = E_Anonymous_Access_Protected_Subprogram_Type)
+         and then Is_Access_Type (T2)
+         and then (not Comes_From_Source (T1)
+                    or else not Comes_From_Source (T2))
+         and then (Is_Overloadable (Designated_Type (T2))
+                     or else
+                   Ekind (Designated_Type (T2)) = E_Subprogram_Type)
+         and then
+            Type_Conformant (Designated_Type (T1), Designated_Type (T2))
+         and then
+            Mode_Conformant (Designated_Type (T1), Designated_Type (T2))
+       then
+          return True;
+ 
        --  The context can be a remote access type, and the expression the
        --  corresponding source type declared in a categorized package, or
        --  viceversa.
*************** package body Sem_Type is
*** 824,830 ****
        then
           return True;
  
!       --  Ada0Y (AI-50217): Additional branches to make the shadow entity
        --  compatible with its real entity.
  
        elsif From_With_Type (T1) then
--- 842,848 ----
        then
           return True;
  
!       --  Ada 2005 (AI-50217): Additional branches to make the shadow entity
        --  compatible with its real entity.
  
        elsif From_With_Type (T1) then
*************** package body Sem_Type is
*** 882,887 ****
--- 900,909 ----
        Predef_Subp : Entity_Id;
        User_Subp   : Entity_Id;
  
+       function Inherited_From_Actual (S : Entity_Id) return Boolean;
+       --  Determine whether one of the candidates is an operation inherited
+       --  by a type that is derived from an actual in an instantiation.
+ 
        function Is_Actual_Subprogram (S : Entity_Id) return Boolean;
        --  Determine whether a subprogram is an actual in an enclosing
        --  instance. An overloading between such a subprogram and one
*************** package body Sem_Type is
*** 893,898 ****
--- 915,921 ----
        --  ambiguities when two formal types have the same actual.
  
        function Standard_Operator return Boolean;
+       --  Comment required ???
  
        function Remove_Conversions return Interp;
        --  Last chance for pathological cases involving comparisons on
*************** package body Sem_Type is
*** 911,916 ****
--- 934,962 ----
        --  pathology in the other direction with calls whose multiple overloaded
        --  actuals make them truly unresolvable.
  
+       ---------------------------
+       -- Inherited_From_Actual --
+       ---------------------------
+ 
+       function Inherited_From_Actual (S : Entity_Id) return Boolean is
+          Par : constant Node_Id := Parent (S);
+       begin
+          if Nkind (Par) /= N_Full_Type_Declaration
+            or else Nkind (Type_Definition (Par)) /= N_Derived_Type_Definition
+          then
+             return False;
+          else
+             return Is_Entity_Name (Subtype_Indication (Type_Definition (Par)))
+               and then
+                Is_Generic_Actual_Type (
+                  Entity (Subtype_Indication (Type_Definition (Par))));
+          end if;
+       end Inherited_From_Actual;
+ 
+       --------------------------
+       -- Is_Actual_Subprogram --
+       --------------------------
+ 
        function Is_Actual_Subprogram (S : Entity_Id) return Boolean is
        begin
           return In_Open_Scopes (Scope (S))
*************** package body Sem_Type is
*** 926,932 ****
        function Matches (Actual, Formal : Node_Id) return Boolean is
           T1 : constant Entity_Id := Etype (Actual);
           T2 : constant Entity_Id := Etype (Formal);
- 
        begin
           return T1 = T2
             or else
--- 972,977 ----
*************** package body Sem_Type is
*** 948,956 ****
           Act2 : Node_Id;
  
        begin
!          It1   := No_Interp;
!          Get_First_Interp (N, I, It);
  
           while Present (It.Typ) loop
  
              if not Is_Overloadable (It.Nam) then
--- 993,1001 ----
           Act2 : Node_Id;
  
        begin
!          It1 := No_Interp;
  
+          Get_First_Interp (N, I, It);
           while Present (It.Typ) loop
  
              if not Is_Overloadable (It.Nam) then
*************** package body Sem_Type is
*** 1034,1045 ****
                 Get_Next_Interp (I, It);
           end loop;
  
!          if Serious_Errors_Detected > 0 then
! 
!             --  After some error, a formal may have Any_Type and yield
!             --  a spurious match. To avoid cascaded errors if possible,
!             --  check for such a formal in either candidate.
  
              declare
                 Formal : Entity_Id;
  
--- 1079,1089 ----
                 Get_Next_Interp (I, It);
           end loop;
  
!          --  After some error, a formal may have Any_Type and yield
!          --  a spurious match. To avoid cascaded errors if possible,
!          --  check for such a formal in either candidate.
  
+          if Serious_Errors_Detected > 0 then
              declare
                 Formal : Entity_Id;
  
*************** package body Sem_Type is
*** 1094,1110 ****
     --  Start of processing for Disambiguate
  
     begin
!       --  Recover the two legal interpretations.
  
        Get_First_Interp (N, I, It);
- 
        while I /= I1 loop
           Get_Next_Interp (I, It);
        end loop;
  
        It1  := It;
        Nam1 := It.Nam;
- 
        while I /= I2 loop
           Get_Next_Interp (I, It);
        end loop;
--- 1138,1152 ----
     --  Start of processing for Disambiguate
  
     begin
!       --  Recover the two legal interpretations
  
        Get_First_Interp (N, I, It);
        while I /= I1 loop
           Get_Next_Interp (I, It);
        end loop;
  
        It1  := It;
        Nam1 := It.Nam;
        while I /= I2 loop
           Get_Next_Interp (I, It);
        end loop;
*************** package body Sem_Type is
*** 1133,1144 ****
  
              declare
                 Candidate : Interp := No_Interp;
              begin
                 Get_First_Interp (N, I, It);
- 
                 while Present (It.Typ) loop
                    if (Covers (Typ, It.Typ)
!                        or else Typ = Any_Type)
                      and then
                       (It.Typ = Universal_Integer
                         or else It.Typ = Universal_Real)
--- 1175,1186 ----
  
              declare
                 Candidate : Interp := No_Interp;
+ 
              begin
                 Get_First_Interp (N, I, It);
                 while Present (It.Typ) loop
                    if (Covers (Typ, It.Typ)
!                         or else Typ = Any_Type)
                      and then
                       (It.Typ = Universal_Integer
                         or else It.Typ = Universal_Real)
*************** package body Sem_Type is
*** 1162,1169 ****
              end;
  
           elsif Chars (Nam1) /= Name_Op_Not
!            and then (Typ = Standard_Boolean
!              or else Typ = Any_Boolean)
           then
              --  Equality or comparison operation. Choose predefined operator
              --  if arguments are universal. The node may be an operator, a
--- 1204,1210 ----
              end;
  
           elsif Chars (Nam1) /= Name_Op_Not
!            and then (Typ = Standard_Boolean or else Typ = Any_Boolean)
           then
              --  Equality or comparison operation. Choose predefined operator
              --  if arguments are universal. The node may be an operator, a
*************** package body Sem_Type is
*** 1194,1200 ****
                            Universal_Interpretation (Arg1)
                 then
                    Get_First_Interp (N, I, It);
- 
                    while Scope (It.Nam) /= Standard_Standard loop
                       Get_Next_Interp (I, It);
                    end loop;
--- 1235,1240 ----
*************** package body Sem_Type is
*** 1252,1257 ****
--- 1292,1302 ----
           --  node is overloaded, it did not resolve to the global entity in
           --  the generic, and we choose the formal subprogram.
  
+          --  Finally, the ambiguity can be between an explicit subprogram and
+          --  one inherited (with different defaults) from an actual. In this
+          --  case the resolution was to the explicit declaration in the
+          --  generic, and remains so in the instance.
+ 
           elsif In_Instance then
              if Nkind (N) = N_Function_Call
                or else Nkind (N) = N_Procedure_Call_Statement
*************** package body Sem_Type is
*** 1268,1273 ****
--- 1313,1328 ----
  
                    elsif Is_Act2 and then not Is_Act1 then
                       return It2;
+ 
+                   elsif Inherited_From_Actual (Nam1)
+                     and then Comes_From_Source (Nam2)
+                   then
+                      return It2;
+ 
+                   elsif Inherited_From_Actual (Nam2)
+                     and then Comes_From_Source (Nam1)
+                   then
+                      return It1;
                    end if;
  
                    Actual := First_Actual (N);
*************** package body Sem_Type is
*** 1285,1291 ****
                 end;
  
              elsif Nkind (N) in N_Binary_Op then
- 
                 if Matches (Left_Opnd (N), First_Formal (Nam1))
                   and then
                     Matches (Right_Opnd (N), Next_Formal (First_Formal (Nam1)))
--- 1340,1345 ----
*************** package body Sem_Type is
*** 1296,1302 ****
                 end if;
  
              elsif Nkind (N) in  N_Unary_Op then
- 
                 if Etype (Right_Opnd (N)) = Etype (First_Formal (Nam1)) then
                    return It1;
                 else
--- 1350,1355 ----
*************** package body Sem_Type is
*** 1353,1364 ****
           then
              if Is_Fixed_Point_Type (Typ)
                and then (Chars (Nam1) = Name_Op_Multiply
!                          or else Chars (Nam1) = Name_Op_Divide)
!               and then Ada_83
              then
                 if It2.Nam = Predef_Subp then
                    return It1;
- 
                 else
                    return It2;
                 end if;
--- 1406,1416 ----
           then
              if Is_Fixed_Point_Type (Typ)
                and then (Chars (Nam1) = Name_Op_Multiply
!                           or else Chars (Nam1) = Name_Op_Divide)
!               and then Ada_Version = Ada_83
              then
                 if It2.Nam = Predef_Subp then
                    return It1;
                 else
                    return It2;
                 end if;
*************** package body Sem_Type is
*** 1373,1379 ****
              return It2;
           end if;
        end if;
- 
     end Disambiguate;
  
     ---------------------
--- 1425,1430 ----
*************** package body Sem_Type is
*** 1429,1435 ****
     begin
        if Is_Overloaded (R) then
           Get_First_Interp (R, I, It);
- 
           while Present (It.Typ) loop
              if Covers (T, It.Typ) or else Covers (It.Typ, T) then
  
--- 1480,1485 ----
*************** package body Sem_Type is
*** 1454,1461 ****
  
           Set_Etype (R, TR);
  
!       --  In the non-overloaded case, the Etype of R is already set
!       --  correctly.
  
        else
           null;
--- 1504,1510 ----
  
           Set_Etype (R, TR);
  
!       --  In the non-overloaded case, the Etype of R is already set correctly
  
        else
           null;
*************** package body Sem_Type is
*** 1470,1475 ****
--- 1519,1541 ----
        elsif T = Universal_Fixed then
           return Etype (R);
  
+       --  Ada 2005 (AI-230): Support the following operators:
+ 
+       --    function "="  (L, R : universal_access) return Boolean;
+       --    function "/=" (L, R : universal_access) return Boolean;
+ 
+       elsif Ada_Version >= Ada_05
+         and then Ekind (Etype (L)) = E_Anonymous_Access_Type
+         and then Is_Access_Type (Etype (R))
+       then
+          return Etype (L);
+ 
+       elsif Ada_Version >= Ada_05
+         and then Ekind (Etype (R)) = E_Anonymous_Access_Type
+         and then Is_Access_Type (Etype (L))
+       then
+          return Etype (R);
+ 
        else
           return Specific_Type (T, Etype (R));
        end if;
*************** package body Sem_Type is
*** 1505,1511 ****
        end if;
  
        Map_Ptr := Headers (Hash (O_N));
- 
        while Present (Interp_Map.Table (Map_Ptr).Node) loop
           if Interp_Map.Table (Map_Ptr).Node = O_N then
              Int_Ind := Interp_Map.Table (Map_Ptr).Index;
--- 1571,1576 ----
*************** package body Sem_Type is
*** 1522,1530 ****
        raise Program_Error;
     end Get_First_Interp;
  
!    ----------------------
!    --  Get_Next_Interp --
!    ----------------------
  
     procedure Get_Next_Interp (I : in out Interp_Index; It : out Interp) is
     begin
--- 1587,1595 ----
        raise Program_Error;
     end Get_First_Interp;
  
!    ---------------------
!    -- Get_Next_Interp --
!    ---------------------
  
     procedure Get_Next_Interp (I : in out Interp_Index; It : out Interp) is
     begin
*************** package body Sem_Type is
*** 1561,1576 ****
  
        else
           Get_First_Interp (N, I, It);
- 
           while Present (It.Typ) loop
              if (Covers (Typ, It.Typ)
!                 and then
!                   (Scope (It.Nam) /= Standard_Standard
!                      or else not Is_Invisible_Operator (N, Base_Type (Typ))))
! 
                or else (not Is_Tagged_Type (Typ)
!                         and then Ekind (Typ) /= E_Anonymous_Access_Type
!                         and then Covers (It.Typ, Typ))
              then
                 return True;
              end if;
--- 1626,1639 ----
  
        else
           Get_First_Interp (N, I, It);
           while Present (It.Typ) loop
              if (Covers (Typ, It.Typ)
!                   and then
!                     (Scope (It.Nam) /= Standard_Standard
!                        or else not Is_Invisible_Operator (N, Base_Type (Typ))))
                or else (not Is_Tagged_Type (Typ)
!                          and then Ekind (Typ) /= E_Anonymous_Access_Type
!                          and then Covers (It.Typ, Typ))
              then
                 return True;
              end if;
*************** package body Sem_Type is
*** 1648,1654 ****
  
           else
              Get_First_Interp (R, Index, It);
- 
              loop
                 T2 := Specific_Type (T, It.Typ);
  
--- 1711,1716 ----
*************** package body Sem_Type is
*** 1677,1683 ****
        else
           Typ := Any_Type;
           Get_First_Interp (L, Index, It);
- 
           while Present (It.Typ) loop
              Typ := Check_Right_Argument (It.Typ);
              exit when Typ /= Any_Type;
--- 1739,1744 ----
*************** package body Sem_Type is
*** 1689,1695 ****
        --  If Typ is Any_Type, it means no compatible pair of types was found
  
        if Typ = Any_Type then
- 
           if Nkind (Parent (L)) in N_Op then
              Error_Msg_N ("incompatible types for operator", Parent (L));
  
--- 1750,1755 ----
*************** package body Sem_Type is
*** 1910,1916 ****
        New_F := First_Formal (New_S);
        Old_F := First_Formal (Op);
        Num := 0;
- 
        while Present (New_F) and then Present (Old_F) loop
           Num := Num + 1;
           Next_Formal (New_F);
--- 1970,1975 ----
*************** package body Sem_Type is
*** 1981,1989 ****
                and then Base_Type (T1) = Base_Type (T)
                and then Is_Numeric_Type (T)
                and then (not Is_Fixed_Point_Type (T)
!                          or else Ada_83))
  
!             --  Mixed_Mode operations on fixed-point types.
  
                or else (Base_Type (T1) = Base_Type (T)
                          and then Base_Type (T2) = Base_Type (Standard_Integer)
--- 2040,2048 ----
                and then Base_Type (T1) = Base_Type (T)
                and then Is_Numeric_Type (T)
                and then (not Is_Fixed_Point_Type (T)
!                          or else Ada_Version = Ada_83))
  
!             --  Mixed_Mode operations on fixed-point types
  
                or else (Base_Type (T1) = Base_Type (T)
                          and then Base_Type (T2) = Base_Type (Standard_Integer)
*************** package body Sem_Type is
*** 2001,2009 ****
                and then Base_Type (T1) = Base_Type (T)
                and then Is_Numeric_Type (T)
                and then (not Is_Fixed_Point_Type (T)
!                          or else Ada_83))
  
!             --  Mixed_Mode operations on fixed-point types.
  
                or else (Base_Type (T1) = Base_Type (T)
                          and then Base_Type (T2) = Base_Type (Standard_Integer)
--- 2060,2068 ----
                and then Base_Type (T1) = Base_Type (T)
                and then Is_Numeric_Type (T)
                and then (not Is_Fixed_Point_Type (T)
!                          or else Ada_Version = Ada_83))
  
!             --  Mixed_Mode operations on fixed-point types
  
                or else (Base_Type (T1) = Base_Type (T)
                          and then Base_Type (T2) = Base_Type (Standard_Integer)
*************** package body Sem_Type is
*** 2058,2064 ****
        --  Find end of Interp list and copy downward to erase the discarded one
  
        II := I + 1;
- 
        while Present (All_Interp.Table (II).Typ) loop
           II := II + 1;
        end loop;
--- 2117,2122 ----
*************** package body Sem_Type is
*** 2328,2336 ****
        end if;
     end Write_Overloads;
  
!    -----------------------
!    --  Write_Interp_Ref --
!    -----------------------
  
     procedure Write_Interp_Ref (Map_Ptr : Int) is
     begin
--- 2386,2394 ----
        end if;
     end Write_Overloads;
  
!    ----------------------
!    -- Write_Interp_Ref --
!    ----------------------
  
     procedure Write_Interp_Ref (Map_Ptr : Int) is
     begin
diff -Nrcpad gcc-3.4.3/gcc/ada/sem_type.ads gcc-4.0.0/gcc/ada/sem_type.ads
*** gcc-3.4.3/gcc/ada/sem_type.ads	Tue Oct 21 13:42:22 2003
--- gcc-4.0.0/gcc/ada/sem_type.ads	Tue Jul  6 13:57:31 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Sem_Type is
*** 72,80 ****
  
     subtype Interp_Index is Int;
  
!    ----------------------
!    --  Error Reporting --
!    ----------------------
  
     --  A common error is the use of an operator in infix notation on arguments
     --  of a type that is not directly visible. Rather than diagnosing a type
--- 72,80 ----
  
     subtype Interp_Index is Int;
  
!    ---------------------
!    -- Error Reporting --
!    ---------------------
  
     --  A common error is the use of an operator in infix notation on arguments
     --  of a type that is not directly visible. Rather than diagnosing a type
diff -Nrcpad gcc-3.4.3/gcc/ada/sem_util.adb gcc-4.0.0/gcc/ada/sem_util.adb
*** gcc-3.4.3/gcc/ada/sem_util.adb	Tue Jan 13 11:51:34 2004
--- gcc-4.0.0/gcc/ada/sem_util.adb	Thu Feb 10 13:50:38 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Nlists;   use Nlists;
*** 41,47 ****
  with Nmake;    use Nmake;
  with Output;   use Output;
  with Opt;      use Opt;
! with Restrict; use Restrict;
  with Scans;    use Scans;
  with Scn;      use Scn;
  with Sem;      use Sem;
--- 41,47 ----
  with Nmake;    use Nmake;
  with Output;   use Output;
  with Opt;      use Opt;
! with Rtsfind;  use Rtsfind;
  with Scans;    use Scans;
  with Scn;      use Scn;
  with Sem;      use Sem;
*************** with Stringt;  use Stringt;
*** 58,63 ****
--- 58,64 ----
  with Targparm; use Targparm;
  with Tbuild;   use Tbuild;
  with Ttypes;   use Ttypes;
+ with Uname;    use Uname;
  
  package body Sem_Util is
  
*************** package body Sem_Util is
*** 135,143 ****
           Rtyp := Typ;
        end if;
  
!       if No (Compile_Time_Constraint_Error (N, Msg, Ent, Loc, Warn => Warn))
!         or else not Rep
!       then
           return;
        end if;
  
--- 136,145 ----
           Rtyp := Typ;
        end if;
  
!       Discard_Node (
!         Compile_Time_Constraint_Error (N, Msg, Ent, Loc, Warn => Warn));
! 
!       if not Rep then
           return;
        end if;
  
*************** package body Sem_Util is
*** 447,453 ****
           end loop;
        end if;
  
!       --  If none of the above, the actual and nominal subtypes are the same.
  
        return Empty;
     end Build_Actual_Subtype_Of_Component;
--- 449,455 ----
           end loop;
        end if;
  
!       --  If none of the above, the actual and nominal subtypes are the same
  
        return Empty;
     end Build_Actual_Subtype_Of_Component;
*************** package body Sem_Util is
*** 465,470 ****
--- 467,478 ----
        Decl : Node_Id;
  
     begin
+       --  Unchecked_Union components do not require component subtypes
+ 
+       if Is_Unchecked_Union (T) then
+          return Empty;
+       end if;
+ 
        Subt :=
          Make_Defining_Identifier (Loc,
            Chars => New_Internal_Name ('S'));
*************** package body Sem_Util is
*** 602,608 ****
           end loop;
        end if;
  
!       --  If none of the above, the actual and nominal subtypes are the same.
  
        return Empty;
     end Build_Discriminal_Subtype_Of_Component;
--- 610,616 ----
           end loop;
        end if;
  
!       --  If none of the above, the actual and nominal subtypes are the same
  
        return Empty;
     end Build_Discriminal_Subtype_Of_Component;
*************** package body Sem_Util is
*** 818,824 ****
     begin
        if Ekind (T) = E_Incomplete_Type then
  
!          --  Ada0Y (AI-50217): If the type is available through a limited
           --  with_clause, verify that its full view has been analyzed.
  
           if From_With_Type (T)
--- 826,832 ----
     begin
        if Ekind (T) = E_Incomplete_Type then
  
!          --  Ada 2005 (AI-50217): If the type is available through a limited
           --  with_clause, verify that its full view has been analyzed.
  
           if From_With_Type (T)
*************** package body Sem_Util is
*** 861,893 ****
  
     procedure Check_Potentially_Blocking_Operation (N : Node_Id) is
        S   : Entity_Id;
-       Loc : constant Source_Ptr := Sloc (N);
  
     begin
!       --  N is one of the potentially blocking operations listed in
!       --  9.5.1 (8). When using the Ravenscar profile, raise Program_Error
!       --  before N if the context is a protected action. Otherwise, only issue
!       --  a warning, since some users are relying on blocking operations
!       --  inside protected objects.
!       --  Indirect blocking through a subprogram call
!       --  cannot be diagnosed statically without interprocedural analysis,
!       --  so we do not attempt to do it here.
  
!       S := Scope (Current_Scope);
  
        while Present (S) and then S /= Standard_Standard loop
           if Is_Protected_Type (S) then
!             if Restricted_Profile then
!                Insert_Before_And_Analyze (N,
!                   Make_Raise_Program_Error (Loc,
!                     Reason => PE_Potentially_Blocking_Operation));
!                Error_Msg_N ("potentially blocking operation, " &
!                  " Program Error will be raised at run time?", N);
! 
!             else
!                Error_Msg_N
!                  ("potentially blocking operation in protected operation?", N);
!             end if;
  
              return;
           end if;
--- 869,891 ----
  
     procedure Check_Potentially_Blocking_Operation (N : Node_Id) is
        S   : Entity_Id;
  
     begin
!       --  N is one of the potentially blocking operations listed in 9.5.1(8).
!       --  When pragma Detect_Blocking is active, the run time will raise
!       --  Program_Error. Here we only issue a warning, since we generally
!       --  support the use of potentially blocking operations in the absence
!       --  of the pragma.
  
!       --  Indirect blocking through a subprogram call cannot be diagnosed
!       --  statically without interprocedural analysis, so we do not attempt
!       --  to do it here.
  
+       S := Scope (Current_Scope);
        while Present (S) and then S /= Standard_Standard loop
           if Is_Protected_Type (S) then
!             Error_Msg_N
!               ("potentially blocking operation in protected operation?", N);
  
              return;
           end if;
*************** package body Sem_Util is
*** 987,993 ****
  
              if Is_Overloadable (Id)
                and then Nkind (Parent (Parent (Id)))
!                          /= N_Formal_Subprogram_Declaration
              then
                 Is_Prim := False;
  
--- 985,991 ----
  
              if Is_Overloadable (Id)
                and then Nkind (Parent (Parent (Id)))
!                          not in N_Formal_Subprogram_Declaration
              then
                 Is_Prim := False;
  
*************** package body Sem_Util is
*** 1091,1097 ****
           --  the body of an instance, constraint_checks are only warnings.
           --  We also make this a warning if the Warn parameter is set.
  
!          elsif Warn or else (Ada_83 and then Comes_From_Source (N)) then
              Msgl := Msgl + 1;
              Msgc (Msgl) := '?';
              Wmsg := True;
--- 1089,1097 ----
           --  the body of an instance, constraint_checks are only warnings.
           --  We also make this a warning if the Warn parameter is set.
  
!          elsif Warn
!            or else (Ada_Version = Ada_83 and then Comes_From_Source (N))
!          then
              Msgl := Msgl + 1;
              Msgc (Msgl) := '?';
              Wmsg := True;
*************** package body Sem_Util is
*** 1672,1681 ****
           --  hides the implicit one,  which is removed from all visibility,
           --  i.e. the entity list of its scope, and homonym chain of its name.
  
!          elsif (Is_Overloadable (E) and then Present (Alias (E)))
             or else Is_Internal (E)
-            or else (Ekind (E) = E_Enumeration_Literal
-                      and then Is_Derived_Type (Etype (E)))
           then
              declare
                 Prev     : Entity_Id;
--- 1672,1679 ----
           --  hides the implicit one,  which is removed from all visibility,
           --  i.e. the entity list of its scope, and homonym chain of its name.
  
!          elsif (Is_Overloadable (E) and then Is_Inherited_Operation (E))
             or else Is_Internal (E)
           then
              declare
                 Prev     : Entity_Id;
*************** package body Sem_Util is
*** 1932,1942 ****
              return;
           end if;
  
!          --  Otherwise find a limited component
  
           C := First_Component (T);
           while Present (C) loop
!             if Is_Limited_Type (Etype (C)) then
                 Error_Msg_Node_2 := T;
                 Error_Msg_NE ("\component& of type& has limited type", N, C);
                 Explain_Limited_Type (Etype (C), N);
--- 1930,1949 ----
              return;
           end if;
  
!          --  Otherwise find a limited component. Check only components that
!          --  come from source, or inherited components that appear in the
!          --  source of the ancestor.
  
           C := First_Component (T);
           while Present (C) loop
!             if Is_Limited_Type (Etype (C))
!               and then
!                 (Comes_From_Source (C)
!                    or else
!                      (Present (Original_Record_Component (C))
!                        and then
!                          Comes_From_Source (Original_Record_Component (C))))
!             then
                 Error_Msg_Node_2 := T;
                 Error_Msg_NE ("\component& of type& has limited type", N, C);
                 Explain_Limited_Type (Etype (C), N);
*************** package body Sem_Util is
*** 1946,1954 ****
              Next_Component (C);
           end loop;
  
!          --  It's odd if the loop falls through, but this is only an extra
!          --  error message, so we just let it go and ignore the situation.
! 
           return;
        end if;
     end Explain_Limited_Type;
--- 1953,1960 ----
              Next_Component (C);
           end loop;
  
!          --  The type may be declared explicitly limited, even if no component
!          --  of it is limited, in which case we fall out of the loop.
           return;
        end if;
     end Explain_Limited_Type;
*************** package body Sem_Util is
*** 2108,2114 ****
        pragma Warnings (Off, Res);
  
        function Internal_Full_Qualified_Name (E : Entity_Id) return String_Id;
!       --  Compute recursively the qualified name without NUL at the end.
  
        ----------------------------------
        -- Internal_Full_Qualified_Name --
--- 2114,2120 ----
        pragma Warnings (Off, Res);
  
        function Internal_Full_Qualified_Name (E : Entity_Id) return String_Id;
!       --  Compute recursively the qualified name without NUL at the end
  
        ----------------------------------
        -- Internal_Full_Qualified_Name --
*************** package body Sem_Util is
*** 2392,2398 ****
        --  because the discriminant is not available. The restrictions on
        --  Unchecked_Union are designed to make sure that this is OK.
  
!       elsif Is_Unchecked_Union (Utyp) then
           return Typ;
  
        --  Here for the unconstrained case, we must find actual subtype
--- 2398,2404 ----
        --  because the discriminant is not available. The restrictions on
        --  Unchecked_Union are designed to make sure that this is OK.
  
!       elsif Is_Unchecked_Union (Base_Type (Utyp)) then
           return Typ;
  
        --  Here for the unconstrained case, we must find actual subtype
*************** package body Sem_Util is
*** 2520,2542 ****
        Loc : Source_Ptr) return Node_Id
     is
        Lit : Node_Id;
-       P   : constant Nat := UI_To_Int (Pos);
  
     begin
!       --  In the case where the literal is either of type Wide_Character
!       --  or Character or of a type derived from them, there needs to be
!       --  some special handling since there is no explicit chain of
!       --  literals to search. Instead, an N_Character_Literal node is
!       --  created with the appropriate Char_Code and Chars fields.
  
        if Root_Type (T) = Standard_Character
          or else Root_Type (T) = Standard_Wide_Character
        then
!          Set_Character_Literal_Name (Char_Code (P));
           return
             Make_Character_Literal (Loc,
!              Chars => Name_Find,
!              Char_Literal_Value => Char_Code (P));
  
        --  For all other cases, we have a complete table of literals, and
        --  we simply iterate through the chain of literal until the one
--- 2526,2548 ----
        Loc : Source_Ptr) return Node_Id
     is
        Lit : Node_Id;
  
     begin
!       --  In the case where the literal is of type Character, Wide_Character
!       --  or Wide_Wide_Character or of a type derived from them, there needs
!       --  to be some special handling since there is no explicit chain of
!       --  literals to search. Instead, an N_Character_Literal node is created
!       --  with the appropriate Char_Code and Chars fields.
  
        if Root_Type (T) = Standard_Character
          or else Root_Type (T) = Standard_Wide_Character
+         or else Root_Type (T) = Standard_Wide_Wide_Character
        then
!          Set_Character_Literal_Name (UI_To_CC (Pos));
           return
             Make_Character_Literal (Loc,
!              Chars              => Name_Find,
!              Char_Literal_Value => Pos);
  
        --  For all other cases, we have a complete table of literals, and
        --  we simply iterate through the chain of literal until the one
*************** package body Sem_Util is
*** 2545,2551 ****
  
        else
           Lit := First_Literal (Base_Type (T));
!          for J in 1 .. P loop
              Next_Literal (Lit);
           end loop;
  
--- 2551,2557 ----
  
        else
           Lit := First_Literal (Base_Type (T));
!          for J in 1 .. UI_To_Int (Pos) loop
              Next_Literal (Lit);
           end loop;
  
*************** package body Sem_Util is
*** 2559,2565 ****
  
     function Get_Generic_Entity (N : Node_Id) return Entity_Id is
        Ent : constant Entity_Id := Entity (Name (N));
- 
     begin
        if Present (Renamed_Object (Ent)) then
           return Renamed_Object (Ent);
--- 2565,2570 ----
*************** package body Sem_Util is
*** 2608,2620 ****
           end if;
  
        else
!          --  N is an expression, indicating a range with one value.
  
           L := N;
           H := N;
        end if;
     end Get_Index_Bounds;
  
     ------------------------
     -- Get_Name_Entity_Id --
     ------------------------
--- 2613,2641 ----
           end if;
  
        else
!          --  N is an expression, indicating a range with one value
  
           L := N;
           H := N;
        end if;
     end Get_Index_Bounds;
  
+    ----------------------------------
+    -- Get_Library_Unit_Name_string --
+    ----------------------------------
+ 
+    procedure Get_Library_Unit_Name_String (Decl_Node : Node_Id) is
+       Unit_Name_Id : constant Unit_Name_Type := Get_Unit_Name (Decl_Node);
+ 
+    begin
+       Get_Unit_Name_String (Unit_Name_Id);
+ 
+       --  Remove seven last character (" (spec)" or " (body)")
+ 
+       Name_Len := Name_Len - 7;
+       pragma Assert (Name_Buffer (Name_Len + 1) = ' ');
+    end Get_Library_Unit_Name_String;
+ 
     ------------------------
     -- Get_Name_Entity_Id --
     ------------------------
*************** package body Sem_Util is
*** 2654,2665 ****
        if Nkind (Decl) = N_Subprogram_Body then
           return Decl;
  
        else           --  Nkind (Decl) = N_Subprogram_Declaration
  
           if Present (Corresponding_Body (Decl)) then
              return Unit_Declaration_Node (Corresponding_Body (Decl));
  
!          else        --  imported subprogram.
              return Empty;
           end if;
        end if;
--- 2675,2691 ----
        if Nkind (Decl) = N_Subprogram_Body then
           return Decl;
  
+       --  The below comment is bad, because it is possible for
+       --  Nkind (Decl) to be an N_Subprogram_Body_Stub ???
+ 
        else           --  Nkind (Decl) = N_Subprogram_Declaration
  
           if Present (Corresponding_Body (Decl)) then
              return Unit_Declaration_Node (Corresponding_Body (Decl));
  
!          --  Imported subprogram case
! 
!          else
              return Empty;
           end if;
        end if;
*************** package body Sem_Util is
*** 2674,2679 ****
--- 2700,2772 ----
        return Task_Body_Procedure (Declaration_Node (Root_Type (E)));
     end Get_Task_Body_Procedure;
  
+    -----------------------
+    -- Has_Access_Values --
+    -----------------------
+ 
+    function Has_Access_Values (T : Entity_Id) return Boolean is
+       Typ : constant Entity_Id := Underlying_Type (T);
+ 
+    begin
+       --  Case of a private type which is not completed yet. This can only
+       --  happen in the case of a generic format type appearing directly, or
+       --  as a component of the type to which this function is being applied
+       --  at the top level. Return False in this case, since we certainly do
+       --  not know that the type contains access types.
+ 
+       if No (Typ) then
+          return False;
+ 
+       elsif Is_Access_Type (Typ) then
+          return True;
+ 
+       elsif Is_Array_Type (Typ) then
+          return Has_Access_Values (Component_Type (Typ));
+ 
+       elsif Is_Record_Type (Typ) then
+          declare
+             Comp : Entity_Id;
+ 
+          begin
+             Comp := First_Entity (Typ);
+             while Present (Comp) loop
+                if (Ekind (Comp) = E_Component
+                      or else
+                    Ekind (Comp) = E_Discriminant)
+                  and then Has_Access_Values (Etype (Comp))
+                then
+                   return True;
+                end if;
+ 
+                Next_Entity (Comp);
+             end loop;
+          end;
+ 
+          return False;
+ 
+       else
+          return False;
+       end if;
+    end Has_Access_Values;
+ 
+    ----------------------
+    -- Has_Declarations --
+    ----------------------
+ 
+    function Has_Declarations (N : Node_Id) return Boolean is
+       K : constant Node_Kind := Nkind (N);
+    begin
+       return    K = N_Accept_Statement
+         or else K = N_Block_Statement
+         or else K = N_Compilation_Unit_Aux
+         or else K = N_Entry_Body
+         or else K = N_Package_Body
+         or else K = N_Protected_Body
+         or else K = N_Subprogram_Body
+         or else K = N_Task_Body
+         or else K = N_Package_Specification;
+    end Has_Declarations;
+ 
     --------------------
     -- Has_Infinities --
     --------------------
*************** package body Sem_Util is
*** 2787,2792 ****
--- 2880,2922 ----
        end if;
     end Has_Private_Component;
  
+    ----------------
+    -- Has_Stream --
+    ----------------
+ 
+    function Has_Stream (T : Entity_Id) return Boolean is
+       E : Entity_Id;
+ 
+    begin
+       if No (T) then
+          return False;
+ 
+       elsif Is_RTE (Root_Type (T), RE_Root_Stream_Type) then
+          return True;
+ 
+       elsif Is_Array_Type (T) then
+          return Has_Stream (Component_Type (T));
+ 
+       elsif Is_Record_Type (T) then
+          E := First_Component (T);
+          while Present (E) loop
+             if Has_Stream (Etype (E)) then
+                return True;
+             else
+                Next_Component (E);
+             end if;
+          end loop;
+ 
+          return False;
+ 
+       elsif Is_Private_Type (T) then
+          return Has_Stream (Underlying_Type (T));
+ 
+       else
+          return False;
+       end if;
+    end Has_Stream;
+ 
     --------------------------
     -- Has_Tagged_Component --
     --------------------------
*************** package body Sem_Util is
*** 3005,3010 ****
--- 3135,3141 ----
  
     procedure Insert_Explicit_Dereference (N : Node_Id) is
        New_Prefix : constant Node_Id := Relocate_Node (N);
+       Ent        : Entity_Id := Empty;
        I          : Interp_Index;
        It         : Interp;
        T          : Entity_Id;
*************** package body Sem_Util is
*** 3035,3040 ****
--- 3166,3186 ----
           end loop;
  
           End_Interp_List;
+ 
+       else
+          --  Prefix is unambiguous: mark the original prefix (which might
+          --  Come_From_Source) as a reference, since the new (relocated) one
+          --  won't be taken into account.
+ 
+          if Is_Entity_Name (New_Prefix) then
+             Ent := Entity (New_Prefix);
+          elsif Nkind (New_Prefix) = N_Selected_Component then
+             Ent := Entity (Selector_Name (New_Prefix));
+          end if;
+ 
+          if Present (Ent) then
+             Generate_Reference (Ent, New_Prefix);
+          end if;
        end if;
     end Insert_Explicit_Dereference;
  
*************** package body Sem_Util is
*** 3083,3104 ****
     begin
        if Is_Entity_Name (Obj) then
  
-          --  Shouldn't we check that we really have an object here?
-          --  If we do, then a-caldel.adb blows up mysteriously ???
- 
           E := Entity (Obj);
  
!          return Is_Aliased (E)
!            or else (Present (Renamed_Object (E))
!                      and then Is_Aliased_View (Renamed_Object (E)))
  
             or else ((Is_Formal (E)
                        or else Ekind (E) = E_Generic_In_Out_Parameter
                        or else Ekind (E) = E_Generic_In_Parameter)
                      and then Is_Tagged_Type (Etype (E)))
  
!            or else ((Ekind (E) = E_Task_Type or else
!                      Ekind (E) = E_Protected_Type)
                      and then In_Open_Scopes (E))
  
              --  Current instance of type
--- 3229,3250 ----
     begin
        if Is_Entity_Name (Obj) then
  
           E := Entity (Obj);
  
!          return
!            (Is_Object (E)
!              and then
!                (Is_Aliased (E)
!                   or else (Present (Renamed_Object (E))
!                              and then Is_Aliased_View (Renamed_Object (E)))))
  
             or else ((Is_Formal (E)
                        or else Ekind (E) = E_Generic_In_Out_Parameter
                        or else Ekind (E) = E_Generic_In_Parameter)
                      and then Is_Tagged_Type (Etype (E)))
  
!            or else ((Ekind (E) = E_Task_Type
!                       or else Ekind (E) = E_Protected_Type)
                      and then In_Open_Scopes (E))
  
              --  Current instance of type
*************** package body Sem_Util is
*** 3132,3137 ****
--- 3278,3308 ----
        end if;
     end Is_Aliased_View;
  
+    -------------------------
+    -- Is_Ancestor_Package --
+    -------------------------
+ 
+    function Is_Ancestor_Package
+      (E1  : Entity_Id;
+       E2  : Entity_Id) return Boolean
+    is
+       Par : Entity_Id;
+ 
+    begin
+       Par := E2;
+       while Present (Par)
+         and then Par /= Standard_Standard
+       loop
+          if Par = E1 then
+             return True;
+          end if;
+ 
+          Par := Scope (Par);
+       end loop;
+ 
+       return False;
+    end Is_Ancestor_Package;
+ 
     ----------------------
     -- Is_Atomic_Object --
     ----------------------
*************** package body Sem_Util is
*** 3142,3148 ****
        --  Determines if given object has atomic components
  
        function Is_Atomic_Prefix (N : Node_Id) return Boolean;
!       --  If prefix is an implicit dereference, examine designated type.
  
        function Is_Atomic_Prefix (N : Node_Id) return Boolean is
        begin
--- 3313,3319 ----
        --  Determines if given object has atomic components
  
        function Is_Atomic_Prefix (N : Node_Id) return Boolean;
!       --  If prefix is an implicit dereference, examine designated type
  
        function Is_Atomic_Prefix (N : Node_Id) return Boolean is
        begin
*************** package body Sem_Util is
*** 3212,3218 ****
        --  that depends on a discriminant.
  
        function Is_Declared_Within_Variant (Comp : Entity_Id) return Boolean;
!       --  Returns True if and only if Comp is declared within a variant part.
  
        ------------------------------
        -- Has_Dependent_Constraint --
--- 3383,3389 ----
        --  that depends on a discriminant.
  
        function Is_Declared_Within_Variant (Comp : Entity_Id) return Boolean;
!       --  Returns True if and only if Comp is declared within a variant part
  
        ------------------------------
        -- Has_Dependent_Constraint --
*************** package body Sem_Util is
*** 3290,3298 ****
--- 3461,3481 ----
                    P_Aliased := True;
                 end if;
  
+             --  A discriminant check on a selected component may be
+             --  expanded into a dereference when removing side-effects.
+             --  Recover the original node and its type, which may be
+             --  unconstrained.
+ 
+             elsif Nkind (P) = N_Explicit_Dereference
+               and then not (Comes_From_Source (P))
+             then
+                P := Original_Node (P);
+                Prefix_Type := Etype (P);
+ 
              else
                 --  Check for prefix being an aliased component ???
                 null;
+ 
              end if;
  
              if Is_Access_Type (Prefix_Type)
*************** package body Sem_Util is
*** 3330,3335 ****
--- 3513,3525 ----
             or else Nkind (Object) = N_Slice
           then
              return Is_Dependent_Component_Of_Mutable_Object (Prefix (Object));
+ 
+          --  A type conversion that Is_Variable is a view conversion:
+          --  go back to the denoted object.
+ 
+          elsif Nkind (Object) = N_Type_Conversion then
+             return
+               Is_Dependent_Component_Of_Mutable_Object (Expression (Object));
           end if;
        end if;
  
*************** package body Sem_Util is
*** 3355,3360 ****
--- 3545,3630 ----
          and then Prefix (P) = N;
     end Is_Dereferenced;
  
+    ----------------------
+    -- Is_Descendent_Of --
+    ----------------------
+ 
+    function Is_Descendent_Of (T1 : Entity_Id; T2 : Entity_Id) return Boolean is
+       T    : Entity_Id;
+       Etyp : Entity_Id;
+ 
+    begin
+       pragma Assert (Nkind (T1) in N_Entity);
+       pragma Assert (Nkind (T2) in N_Entity);
+ 
+       T := Base_Type (T1);
+ 
+       --  Immediate return if the types match
+ 
+       if T = T2 then
+          return True;
+ 
+       --  Comment needed here ???
+ 
+       elsif Ekind (T) = E_Class_Wide_Type then
+          return Etype (T) = T2;
+ 
+       --  All other cases
+ 
+       else
+          loop
+             Etyp := Etype (T);
+ 
+             --  Done if we found the type we are looking for
+ 
+             if Etyp = T2 then
+                return True;
+ 
+             --  Done if no more derivations to check
+ 
+             elsif T = T1
+               or else T = Etyp
+             then
+                return False;
+ 
+             --  Following test catches error cases resulting from prev errors
+ 
+             elsif No (Etyp) then
+                return False;
+ 
+             elsif Is_Private_Type (T) and then Etyp = Full_View (T) then
+                return False;
+ 
+             elsif Is_Private_Type (Etyp) and then Full_View (Etyp) = T then
+                return False;
+             end if;
+ 
+             T := Base_Type (Etyp);
+          end loop;
+       end if;
+ 
+       raise Program_Error;
+    end Is_Descendent_Of;
+ 
+    ------------------------------
+    -- Is_Descendent_Of_Address --
+    ------------------------------
+ 
+    function Is_Descendent_Of_Address (T1 : Entity_Id) return Boolean is
+    begin
+       --  If Address has not been loaded, answer must be False
+ 
+       if not RTU_Loaded (System) then
+          return False;
+ 
+       --  Otherwise we can get the entity we are interested in without
+       --  causing an unwanted dependency on System, and do the test.
+ 
+       else
+          return Is_Descendent_Of (T1, Base_Type (RTE (RE_Address)));
+       end if;
+    end Is_Descendent_Of_Address;
+ 
     --------------
     -- Is_False --
     --------------
*************** package body Sem_Util is
*** 3414,3420 ****
                    if Etype (Indx) = Any_Type then
                       return False;
  
!                   --  If index is a range, use directly.
  
                    elsif Nkind (Indx) = N_Range then
                       Lbd := Low_Bound  (Indx);
--- 3684,3690 ----
                    if Etype (Indx) = Any_Type then
                       return False;
  
!                   --  If index is a range, use directly
  
                    elsif Nkind (Indx) = N_Range then
                       Lbd := Low_Bound  (Indx);
*************** package body Sem_Util is
*** 3579,3592 ****
           while Present (Discr) loop
              if Nkind (Parent (Discr)) = N_Discriminant_Specification then
                 Discr_Val := Expression (Parent (Discr));
!                if not Is_OK_Static_Expression (Discr_Val) then
!                   return False;
!                else
                    Append_To (Constraints,
                      Make_Component_Association (Loc,
                        Choices    => New_List (New_Occurrence_Of (Discr, Loc)),
                        Expression => New_Copy (Discr_Val)));
! 
                 end if;
              else
                 return False;
--- 3849,3864 ----
           while Present (Discr) loop
              if Nkind (Parent (Discr)) = N_Discriminant_Specification then
                 Discr_Val := Expression (Parent (Discr));
! 
!                if Present (Discr_Val)
!                  and then Is_OK_Static_Expression (Discr_Val)
!                then
                    Append_To (Constraints,
                      Make_Component_Association (Loc,
                        Choices    => New_List (New_Occurrence_Of (Discr, Loc)),
                        Expression => New_Copy (Discr_Val)));
!                else
!                   return False;
                 end if;
              else
                 return False;
*************** package body Sem_Util is
*** 3602,3608 ****
              Into          => Components,
              Report_Errors => Report_Errors);
  
!          --  Check that each component present is fully initialized.
  
           Comp_Elmt := First_Elmt (Components);
  
--- 3874,3880 ----
              Into          => Components,
              Report_Errors => Report_Errors);
  
!          --  Check that each component present is fully initialized
  
           Comp_Elmt := First_Elmt (Components);
  
*************** package body Sem_Util is
*** 3781,3791 ****
                 return Attribute_Name (N) = Name_Input;
  
              when N_Selected_Component =>
!                return Is_Object_Reference (Selector_Name (N));
  
              when N_Explicit_Dereference =>
                 return True;
  
              --  An unchecked type conversion is considered to be an object if
              --  the operand is an object (this construction arises only as a
              --  result of expansion activities).
--- 4053,4072 ----
                 return Attribute_Name (N) = Name_Input;
  
              when N_Selected_Component =>
!                return
!                  Is_Object_Reference (Selector_Name (N))
!                    and then Is_Object_Reference (Prefix (N));
  
              when N_Explicit_Dereference =>
                 return True;
  
+             --  A view conversion of a tagged object is an object reference
+ 
+             when N_Type_Conversion =>
+                return Is_Tagged_Type (Etype (Subtype_Mark (N)))
+                  and then Is_Tagged_Type (Etype (Expression (N)))
+                  and then Is_Object_Reference (Expression (N));
+ 
              --  An unchecked type conversion is considered to be an object if
              --  the operand is an object (this construction arises only as a
              --  result of expansion activities).
*************** package body Sem_Util is
*** 3836,3841 ****
--- 4117,4125 ----
           then
              return False;
  
+          elsif Nkind (Original_Node (AV)) = N_Type_Conversion then
+             return Is_OK_Variable_For_Out_Formal (Expression (AV));
+ 
           else
              return True;
           end if;
*************** package body Sem_Util is
*** 4306,4311 ****
--- 4590,4607 ----
        begin
           if Is_Access_Type (Etype (P)) then
              return not Is_Access_Constant (Root_Type (Etype (P)));
+ 
+          --  For the case of an indexed component whose prefix has a packed
+          --  array type, the prefix has been rewritten into a type conversion.
+          --  Determine variable-ness from the converted expression.
+ 
+          elsif Nkind (P) = N_Type_Conversion
+            and then not Comes_From_Source (P)
+            and then Is_Array_Type (Etype (P))
+            and then Is_Packed (Etype (P))
+          then
+             return Is_Variable (Expression (P));
+ 
           else
              return Is_Variable (P);
           end if;
*************** package body Sem_Util is
*** 4420,4426 ****
        --  Determines if given object has volatile components
  
        function Is_Volatile_Prefix (N : Node_Id) return Boolean;
!       --  If prefix is an implicit dereference, examine designated type.
  
        ------------------------
        -- Is_Volatile_Prefix --
--- 4716,4722 ----
        --  Determines if given object has volatile components
  
        function Is_Volatile_Prefix (N : Node_Id) return Boolean;
!       --  If prefix is an implicit dereference, examine designated type
  
        ------------------------
        -- Is_Volatile_Prefix --
*************** package body Sem_Util is
*** 4501,4509 ****
        procedure Kill_Current_Values_For_Entity_Chain (E : Entity_Id);
        --  Clear current value for entity E and all entities chained to E
  
!       -------------------------------------------
!       --  Kill_Current_Values_For_Entity_Chain --
!       -------------------------------------------
  
        procedure Kill_Current_Values_For_Entity_Chain (E : Entity_Id) is
           Ent : Entity_Id;
--- 4797,4805 ----
        procedure Kill_Current_Values_For_Entity_Chain (E : Entity_Id);
        --  Clear current value for entity E and all entities chained to E
  
!       ------------------------------------------
!       -- Kill_Current_Values_For_Entity_Chain --
!       ------------------------------------------
  
        procedure Kill_Current_Values_For_Entity_Chain (E : Entity_Id) is
           Ent : Entity_Id;
*************** package body Sem_Util is
*** 4731,4737 ****
        begin
           if No (Last) then
  
!             --  Call node points to first actual in list.
  
              Set_First_Named_Actual (N, Explicit_Actual_Parameter (A));
  
--- 5027,5033 ----
        begin
           if No (Last) then
  
!             --  Call node points to first actual in list
  
              Set_First_Named_Actual (N, Explicit_Actual_Parameter (A));
  
*************** package body Sem_Util is
*** 4804,4810 ****
  
        elsif Actuals_To_Match > Formals_To_Match then
  
!          --  Too many actuals: will not work.
  
           if Reporting then
              if Is_Entity_Name (Name (N)) then
--- 5100,5106 ----
  
        elsif Actuals_To_Match > Formals_To_Match then
  
!          --  Too many actuals: will not work
  
           if Reporting then
              if Is_Entity_Name (Name (N)) then
*************** package body Sem_Util is
*** 4839,4845 ****
        end if;
  
        Formal := First_Formal (S);
- 
        while Present (Formal) loop
  
           --  Match the formals in order. If the corresponding actual
--- 5135,5140 ----
*************** package body Sem_Util is
*** 4881,4897 ****
                            or else Sloc (S) = Standard_Location)
                         and then Is_Overloadable (S)
                       then
!                         Error_Msg_Name_1 := Chars (S);
!                         Error_Msg_Sloc := Sloc (S);
!                         Error_Msg_NE
!                           ("missing argument for parameter & " &
!                              "in call to % declared #", N, Formal);
  
                       elsif Is_Overloadable (S) then
                          Error_Msg_Name_1 := Chars (S);
  
!                         --  Point to type derivation that
!                         --  generated the operation.
  
                          Error_Msg_Sloc := Sloc (Parent (S));
  
--- 5176,5204 ----
                            or else Sloc (S) = Standard_Location)
                         and then Is_Overloadable (S)
                       then
!                         if No (Actuals)
!                           and then
!                            (Nkind (Parent (N)) = N_Procedure_Call_Statement
!                              or else
!                            (Nkind (Parent (N)) = N_Function_Call
!                              or else
!                             Nkind (Parent (N)) = N_Parameter_Association))
!                           and then Ekind (S) /= E_Function
!                         then
!                            Set_Etype (N, Etype (S));
!                         else
!                            Error_Msg_Name_1 := Chars (S);
!                            Error_Msg_Sloc := Sloc (S);
!                            Error_Msg_NE
!                              ("missing argument for parameter & " &
!                                 "in call to % declared #", N, Formal);
!                         end if;
  
                       elsif Is_Overloadable (S) then
                          Error_Msg_Name_1 := Chars (S);
  
!                         --  Point to type derivation that generated the
!                         --  operation.
  
                          Error_Msg_Sloc := Sloc (Parent (S));
  
*************** package body Sem_Util is
*** 4930,4936 ****
              Actual := First (Actuals);
  
              while Present (Actual) loop
- 
                 if Nkind (Actual) = N_Parameter_Association
                   and then Actual /= Last
                   and then No (Next_Named_Actual (Actual))
--- 5237,5242 ----
*************** package body Sem_Util is
*** 4954,5026 ****
     --------------------------------
  
     procedure Note_Possible_Modification (N : Node_Id) is
        Ent : Entity_Id;
        Exp : Node_Id;
  
-       procedure Set_Ref (E : Entity_Id; N : Node_Id);
-       --  Internal routine to note modification on entity E by node N
-       --  Has no effect if entity E does not represent an object.
- 
-       -------------
-       -- Set_Ref --
-       -------------
- 
-       procedure Set_Ref (E : Entity_Id; N : Node_Id) is
-       begin
-          if Is_Object (E) then
-             if Comes_From_Source (N) then
-                Set_Never_Set_In_Source (E, False);
-             end if;
- 
-             Set_Is_True_Constant    (E, False);
-             Set_Current_Value       (E, Empty);
-             Generate_Reference      (E, N, 'm');
-             Kill_Checks             (E);
- 
-             if not Can_Never_Be_Null (E) then
-                Set_Is_Known_Non_Null (E, False);
-             end if;
-          end if;
-       end Set_Ref;
- 
-    --  Start of processing for Note_Possible_Modification
- 
     begin
        --  Loop to find referenced entity, if there is one
  
        Exp := N;
        loop
!          --  Test for node rewritten as dereference (e.g. accept parameter)
! 
!          if Nkind (Exp) = N_Explicit_Dereference
!            and then not Comes_From_Source (Exp)
!          then
!             Exp := Original_Node (Exp);
!          end if;
! 
!          --  Now look for entity being referenced
  
           if Is_Entity_Name (Exp) then
              Ent := Entity (Exp);
  
!             if (Ekind (Ent) = E_Variable or else Ekind (Ent) = E_Constant)
!               and then Present (Renamed_Object (Ent))
!             then
!                Set_Never_Set_In_Source (Ent, False);
!                Set_Is_True_Constant    (Ent, False);
!                Set_Current_Value       (Ent, Empty);
  
!                if not Can_Never_Be_Null (Ent) then
!                   Set_Is_Known_Non_Null (Ent, False);
!                end if;
  
!                Exp := Renamed_Object (Ent);
  
!             else
!                Set_Ref (Ent, Exp);
!                Kill_Checks (Ent);
!                return;
!             end if;
  
           elsif     Nkind (Exp) = N_Type_Conversion
             or else Nkind (Exp) = N_Unchecked_Type_Conversion
--- 5260,5311 ----
     --------------------------------
  
     procedure Note_Possible_Modification (N : Node_Id) is
+       Modification_Comes_From_Source : constant Boolean :=
+                                          Comes_From_Source (Parent (N));
+ 
        Ent : Entity_Id;
        Exp : Node_Id;
  
     begin
        --  Loop to find referenced entity, if there is one
  
        Exp := N;
        loop
!          <<Continue>>
!          Ent := Empty;
  
           if Is_Entity_Name (Exp) then
              Ent := Entity (Exp);
  
!          elsif Nkind (Exp) = N_Explicit_Dereference then
!             declare
!                P : constant Node_Id := Prefix (Exp);
  
!             begin
!                if Nkind (P) = N_Selected_Component
!                  and then Present (
!                    Entry_Formal (Entity (Selector_Name (P))))
!                then
!                   --  Case of a reference to an entry formal
  
!                   Ent := Entry_Formal (Entity (Selector_Name (P)));
  
!                elsif Nkind (P) = N_Identifier
!                  and then Nkind (Parent (Entity (P))) = N_Object_Declaration
!                  and then Present (Expression (Parent (Entity (P))))
!                  and then Nkind (Expression (Parent (Entity (P))))
!                    = N_Reference
!                then
!                   --  Case of a reference to a value on which
!                   --  side effects have been removed.
! 
!                   Exp := Prefix (Expression (Parent (Entity (P))));
! 
!                else
!                   return;
! 
!                end if;
!             end;
  
           elsif     Nkind (Exp) = N_Type_Conversion
             or else Nkind (Exp) = N_Unchecked_Type_Conversion
*************** package body Sem_Util is
*** 5035,5040 ****
--- 5320,5364 ----
  
           else
              return;
+ 
+          end if;
+ 
+          --  Now look for entity being referenced
+ 
+          if Present (Ent) then
+ 
+             if Is_Object (Ent) then
+                if Comes_From_Source (Exp)
+                  or else Modification_Comes_From_Source
+                then
+                   Set_Never_Set_In_Source (Ent, False);
+                end if;
+ 
+                Set_Is_True_Constant    (Ent, False);
+                Set_Current_Value       (Ent, Empty);
+ 
+                if not Can_Never_Be_Null (Ent) then
+                   Set_Is_Known_Non_Null (Ent, False);
+                end if;
+ 
+                if (Ekind (Ent) = E_Variable or else Ekind (Ent) = E_Constant)
+                  and then Present (Renamed_Object (Ent))
+                then
+                   Exp := Renamed_Object (Ent);
+                   goto Continue;
+                end if;
+ 
+                --  Generate a reference only if the assignment comes from
+                --  source. This excludes, for example, calls to a dispatching
+                --  assignment operation when the left-hand side is tagged.
+ 
+                if Modification_Comes_From_Source then
+                   Generate_Reference (Ent, Exp, 'm');
+                end if;
+             end if;
+ 
+             Kill_Checks (Ent);
+             return;
           end if;
        end loop;
     end Note_Possible_Modification;
*************** package body Sem_Util is
*** 5185,5191 ****
           if Is_Private_Type (Btype)
             and then not Is_Generic_Type (Btype)
           then
!             return Btype;
  
           elsif Is_Array_Type (Btype) then
              return Trace_Components (Component_Type (Btype), True);
--- 5509,5533 ----
           if Is_Private_Type (Btype)
             and then not Is_Generic_Type (Btype)
           then
!             if Present (Full_View (Btype))
!               and then Is_Record_Type (Full_View (Btype))
!               and then not Is_Frozen (Btype)
!             then
!                --  To indicate that the ancestor depends on a private type,
!                --  the current Btype is sufficient. However, to check for
!                --  circular definition we must recurse on the full view.
! 
!                Candidate := Trace_Components (Full_View (Btype), True);
! 
!                if Candidate = Any_Type then
!                   return Any_Type;
!                else
!                   return Btype;
!                end if;
! 
!             else
!                return Btype;
!             end if;
  
           elsif Is_Array_Type (Btype) then
              return Trace_Components (Component_Type (Btype), True);
*************** package body Sem_Util is
*** 5194,5200 ****
              Component := First_Entity (Btype);
              while Present (Component) loop
  
!                --  skip anonymous types generated by constrained components.
  
                 if not Is_Type (Component) then
                    P := Trace_Components (Etype (Component), True);
--- 5536,5542 ----
              Component := First_Entity (Btype);
              while Present (Component) loop
  
!                --  Skip anonymous types generated by constrained components
  
                 if not Is_Type (Component) then
                    P := Trace_Components (Etype (Component), True);
*************** package body Sem_Util is
*** 5450,5460 ****
  
     function Rep_To_Pos_Flag (E : Entity_Id; Loc : Source_Ptr) return Node_Id is
     begin
!       if Range_Checks_Suppressed (E) then
!          return New_Occurrence_Of (Standard_False, Loc);
!       else
!          return New_Occurrence_Of (Standard_True, Loc);
!       end if;
     end Rep_To_Pos_Flag;
  
     --------------------
--- 5792,5799 ----
  
     function Rep_To_Pos_Flag (E : Entity_Id; Loc : Source_Ptr) return Node_Id is
     begin
!       return New_Occurrence_Of
!                (Boolean_Literals (not Range_Checks_Suppressed (E)), Loc);
     end Rep_To_Pos_Flag;
  
     --------------------
*************** package body Sem_Util is
*** 5478,5488 ****
  
     --  A transient scope is required when variable-sized temporaries are
     --  allocated in the primary or secondary stack, or when finalization
!    --  actions must be generated before the next instruction
  
     function Requires_Transient_Scope (Id : Entity_Id) return Boolean is
        Typ : constant Entity_Id := Underlying_Type (Id);
  
     begin
        --  This is a private type which is not completed yet. This can only
        --  happen in a default expression (of a formal parameter or of a
--- 5817,5829 ----
  
     --  A transient scope is required when variable-sized temporaries are
     --  allocated in the primary or secondary stack, or when finalization
!    --  actions must be generated before the next instruction.
  
     function Requires_Transient_Scope (Id : Entity_Id) return Boolean is
        Typ : constant Entity_Id := Underlying_Type (Id);
  
+    --  Start of processing for Requires_Transient_Scope
+ 
     begin
        --  This is a private type which is not completed yet. This can only
        --  happen in a default expression (of a formal parameter or of a
*************** package body Sem_Util is
*** 5491,5513 ****
        if No (Typ) then
           return False;
  
        elsif Typ = Standard_Void_Type then
           return False;
  
!       --  The back-end has trouble allocating variable-size temporaries so
!       --  we generate them in the front-end and need a transient scope to
!       --  reclaim them properly
  
!       elsif not Size_Known_At_Compile_Time (Typ) then
!          return True;
  
!       --  Unconstrained discriminated records always require a variable
!       --  length temporary, since the length may depend on the variant.
  
!       elsif Is_Record_Type (Typ)
!         and then Has_Discriminants (Typ)
!         and then not Is_Constrained (Typ)
!       then
           return True;
  
        --  Functions returning tagged types may dispatch on result so their
--- 5832,5853 ----
        if No (Typ) then
           return False;
  
+       --  Do not expand transient scope for non-existent procedure return
+ 
        elsif Typ = Standard_Void_Type then
           return False;
  
!       --  Elementary types do not require a transient scope
  
!       elsif Is_Elementary_Type (Typ) then
!          return False;
  
!       --  Generally, indefinite subtypes require a transient scope, since the
!       --  back end cannot generate temporaries, since this is not a valid type
!       --  for declaring an object. It might be possible to relax this in the
!       --  future, e.g. by declaring the maximum possible space for the type.
  
!       elsif Is_Indefinite_Subtype (Typ) then
           return True;
  
        --  Functions returning tagged types may dispatch on result so their
*************** package body Sem_Util is
*** 5519,5531 ****
        then
           return True;
  
!       --  Unconstrained array types are returned on the secondary stack
  
        elsif Is_Array_Type (Typ) then
-          return not Is_Constrained (Typ);
-       end if;
  
!       return False;
     end Requires_Transient_Scope;
  
     --------------------------
--- 5859,5926 ----
        then
           return True;
  
!       --  Record type
! 
!       elsif Is_Record_Type (Typ) then
! 
!          --  In GCC 2, discriminated records always require a transient
!          --  scope because the back end otherwise tries to allocate a
!          --  variable length temporary for the particular variant.
! 
!          if Opt.GCC_Version = 2
!            and then Has_Discriminants (Typ)
!          then
!             return True;
! 
!          --  For GCC 3, or for a non-discriminated record in GCC 2, we are
!          --  OK if none of the component types requires a transient scope.
!          --  Note that we already know that this is a definite type (i.e.
!          --  has discriminant defaults if it is a discriminated record).
! 
!          else
!             declare
!                Comp : Entity_Id;
!             begin
!                Comp := First_Entity (Typ);
!                while Present (Comp) loop
!                   if Requires_Transient_Scope (Etype (Comp)) then
!                      return True;
!                   else
!                      Next_Entity (Comp);
!                   end if;
!                end loop;
!             end;
! 
!             return False;
!          end if;
! 
!       --  String literal types never require transient scope
! 
!       elsif Ekind (Typ) = E_String_Literal_Subtype then
!          return False;
! 
!       --  Array type. Note that we already know that this is a constrained
!       --  array, since unconstrained arrays will fail the indefinite test.
  
        elsif Is_Array_Type (Typ) then
  
!          --  If component type requires a transient scope, the array does too
! 
!          if Requires_Transient_Scope (Component_Type (Typ)) then
!             return True;
! 
!          --  Otherwise, we only need a transient scope if the size is not
!          --  known at compile time.
! 
!          else
!             return not Size_Known_At_Compile_Time (Typ);
!          end if;
! 
!       --  All other cases do not require a transient scope
! 
!       else
!          return False;
!       end if;
     end Requires_Transient_Scope;
  
     --------------------------
*************** package body Sem_Util is
*** 6046,6054 ****
        --  declared at the library level to ensure that names such as
        --  X.all'access don't fail static accessibility checks.
  
        Btyp := Base_Type (Typ);
        if Ekind (Btyp) in Access_Kind then
!          if Ekind (Btyp) = E_Anonymous_Access_Type then
              return Scope_Depth (Standard_Standard);
           end if;
  
--- 6441,6456 ----
        --  declared at the library level to ensure that names such as
        --  X.all'access don't fail static accessibility checks.
  
+       --  Ada 2005 (AI-230): In case of anonymous access types that are
+       --  component_definition or discriminants of a nonlimited type,
+       --  the level is the same as that of the enclosing component type.
+ 
        Btyp := Base_Type (Typ);
        if Ekind (Btyp) in Access_Kind then
!          if Ekind (Btyp) = E_Anonymous_Access_Type
!            and then not Is_Array_Type (Scope (Btyp))      -- Ada 2005 (AI-230)
!            and then Ekind (Scope (Btyp)) /= E_Record_Type -- Ada 2005 (AI-230)
!          then
              return Scope_Depth (Standard_Standard);
           end if;
  
*************** package body Sem_Util is
*** 6066,6072 ****
        N : Node_Id := Parent (Unit_Id);
  
     begin
!       --  Predefined operators do not have a full function declaration.
  
        if Ekind (Unit_Id) = E_Operator then
           return N;
--- 6468,6474 ----
        N : Node_Id := Parent (Unit_Id);
  
     begin
!       --  Predefined operators do not have a full function declaration
  
        if Ekind (Unit_Id) = E_Operator then
           return N;
*************** package body Sem_Util is
*** 6074,6080 ****
  
        while Nkind (N) /= N_Abstract_Subprogram_Declaration
          and then Nkind (N) /= N_Formal_Package_Declaration
-         and then Nkind (N) /= N_Formal_Subprogram_Declaration
          and then Nkind (N) /= N_Function_Instantiation
          and then Nkind (N) /= N_Generic_Package_Declaration
          and then Nkind (N) /= N_Generic_Subprogram_Declaration
--- 6476,6481 ----
*************** package body Sem_Util is
*** 6090,6095 ****
--- 6491,6497 ----
          and then Nkind (N) /= N_Subprogram_Renaming_Declaration
          and then Nkind (N) /= N_Task_Body
          and then Nkind (N) /= N_Task_Type_Declaration
+         and then Nkind (N) not in N_Formal_Subprogram_Declaration
          and then Nkind (N) not in N_Generic_Renaming_Declaration
        loop
           N := Parent (N);
*************** package body Sem_Util is
*** 6358,6366 ****
                  or else
                Ekind (Entity (Expr)) = E_Generic_Procedure)
           then
!             Error_Msg_N ("found procedure name instead of function!", Expr);
  
!          --  catch common error: a prefix or infix operator which is not
           --  directly visible because the type isn't.
  
           elsif Nkind (Expr) in N_Op
--- 6760,6783 ----
                  or else
                Ekind (Entity (Expr)) = E_Generic_Procedure)
           then
!             if Ekind (Expec_Type) = E_Access_Subprogram_Type then
!                Error_Msg_N
!                  ("found procedure name, possibly missing Access attribute!",
!                    Expr);
!             else
!                Error_Msg_N ("found procedure name instead of function!", Expr);
!             end if;
  
!          elsif Nkind (Expr) = N_Function_Call
!            and then Ekind (Expec_Type) = E_Access_Subprogram_Type
!            and then Etype (Designated_Type (Expec_Type)) = Etype (Expr)
!            and then No (Parameter_Associations (Expr))
!          then
!                Error_Msg_N
!                  ("found function name, possibly missing Access attribute!",
!                    Expr);
! 
!          --  Catch common error: a prefix or infix operator which is not
           --  directly visible because the type isn't.
  
           elsif Nkind (Expr) in N_Op
diff -Nrcpad gcc-3.4.3/gcc/ada/sem_util.ads gcc-4.0.0/gcc/ada/sem_util.ads
*** gcc-3.4.3/gcc/ada/sem_util.ads	Mon Jan  5 15:20:46 2004
--- gcc-4.0.0/gcc/ada/sem_util.ads	Fri Nov 19 10:56:15 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Sem_Util is
*** 110,117 ****
  
     procedure Check_Potentially_Blocking_Operation (N : Node_Id);
     --  N is one of the statement forms that is a potentially blocking
!    --  operation. If it appears within a protected action, emit warning
!    --  and raise Program_Error.
  
     procedure Check_VMS (Construct : Node_Id);
     --  Check that this the target is OpenVMS, and if so, return with
--- 110,116 ----
  
     procedure Check_Potentially_Blocking_Operation (N : Node_Id);
     --  N is one of the statement forms that is a potentially blocking
!    --  operation. If it appears within a protected action, emit warning.
  
     procedure Check_VMS (Construct : Node_Id);
     --  Check that this the target is OpenVMS, and if so, return with
*************** package Sem_Util is
*** 259,286 ****
        Governed_By   : List_Id;
        Into          : Elist_Id;
        Report_Errors : out Boolean);
!    --  The purpose of this procedure is to gather the valid components
!    --  in a record type according to the values of its discriminants, in order
!    --  to validate the components of a record aggregate.
     --
     --    Typ is the type of the aggregate when its constrained discriminants
     --      need to be collected, otherwise it is Empty.
     --
     --    Comp_List is an N_Component_List node.
     --
!    --    Governed_By is a list of N_Component_Association nodes,
!    --     where each choice list contains the name of a discriminant and
!    --     the expression field gives its value. The values of the
!    --     discriminants governing the (possibly nested) variant parts in
!    --     Comp_List are found in this Component_Association List.
     --
!    --    Into is the list where the valid components are appended.
!    --     Note that Into need not be an Empty list. If it's not, components
!    --     are attached to its tail.
     --
-    --    Report_Errors is set to True if the values of the discriminants
-    --     are non-static.
- 
     --  This procedure is also used when building a record subtype. If the
     --  discriminant constraint of the subtype is static, the components of the
     --  subtype are only those of the variants selected by the values of the
--- 258,285 ----
        Governed_By   : List_Id;
        Into          : Elist_Id;
        Report_Errors : out Boolean);
!    --  The purpose of this procedure is to gather the valid components in a
!    --  record type according to the values of its discriminants, in order to
!    --  validate the components of a record aggregate.
     --
     --    Typ is the type of the aggregate when its constrained discriminants
     --      need to be collected, otherwise it is Empty.
     --
     --    Comp_List is an N_Component_List node.
     --
!    --    Governed_By is a list of N_Component_Association nodes, where each
!    --     choice list contains the name of a discriminant and the expression
!    --     field gives its value. The values of the discriminants governing
!    --     the (possibly nested) variant parts in Comp_List are found in this
!    --     Component_Association List.
     --
!    --    Into is the list where the valid components are appended. Note that
!    --     Into need not be an Empty list. If it's not, components are attached
!    --     to its tail.
!    --
!    --    Report_Errors is set to True if the values of the discriminants are
!    --     non-static.
     --
     --  This procedure is also used when building a record subtype. If the
     --  discriminant constraint of the subtype is static, the components of the
     --  subtype are only those of the variants selected by the values of the
*************** package Sem_Util is
*** 334,339 ****
--- 333,342 ----
     --  The third argument supplies a source location for constructed
     --  nodes returned by this function.
  
+    procedure Get_Library_Unit_Name_String (Decl_Node : Node_Id);
+    --  Retrieve the fully expanded name of the library unit declared by
+    --  Decl_Node into the name buffer.
+ 
     function Get_Name_Entity_Id (Id : Name_Id) return Entity_Id;
     --  An entity value is associated with each name in the name table. The
     --  Get_Name_Entity_Id function fetches the Entity_Id of this entity,
*************** package Sem_Util is
*** 357,362 ****
--- 360,375 ----
     --  Task_Body_Procedure field from the corresponding task type
     --  declaration.
  
+    function Has_Access_Values (T : Entity_Id) return Boolean;
+    --  Returns true if type or subtype T is an access type, or has a
+    --  component (at any recursive level) that is an access type. This
+    --  is a conservative predicate, if it is not known whether or not
+    --  T contains access values (happens for generic formals in some
+    --  cases), then False is returned.
+ 
+    function Has_Declarations (N : Node_Id) return Boolean;
+    --  Determines if the node can have declarations
+ 
     function Has_Infinities (E : Entity_Id) return Boolean;
     --  Determines if the range of the floating-point type E includes
     --  infinities. Returns False if E is not a floating-point type.
*************** package Sem_Util is
*** 365,370 ****
--- 378,391 ----
     --  Check if a type has a (sub)component of a private type that has not
     --  yet received a full declaration.
  
+    function Has_Stream (T : Entity_Id) return Boolean;
+    --  Tests if type T is derived from Ada.Streams.Root_Stream_Type, or
+    --  in the case of a composite type, has a component for which this
+    --  predicate is True, and if so returns True. Otherwise a result of
+    --  False means that there is no Stream type in sight. For a private
+    --  type, the test is applied to the underlying type (or returns False
+    --  if there is no underlying type).
+ 
     function Has_Tagged_Component (Typ : Entity_Id) return Boolean;
     --  Typ must be a composite type (array or record). This function is used
     --  to check if '=' has to be expanded into a bunch component comparaisons.
*************** package Sem_Util is
*** 421,426 ****
--- 442,452 ----
     --  Determine if Obj is an aliased view, i.e. the name of an
     --  object to which 'Access or 'Unchecked_Access can apply.
  
+    function Is_Ancestor_Package
+      (E1 : Entity_Id;
+       E2 : Entity_Id) return Boolean;
+    --  Determine whether package E1 is an ancestor of E2
+ 
     function Is_Atomic_Object (N : Node_Id) return Boolean;
     --  Determines if the given node denotes an atomic object in the sense
     --  of the legality checks described in RM C.6(12).
*************** package Sem_Util is
*** 439,444 ****
--- 465,480 ----
     --  of the access value (selected/indexed component, explicit dereference
     --  or a slice), and false otherwise.
  
+    function Is_Descendent_Of (T1 : Entity_Id; T2 : Entity_Id) return Boolean;
+    --  Returns True if type T1 is a descendent of type T2, and false otherwise.
+    --  This is the RM definition, a type is a descendent of another type if it
+    --  is the same type or is derived from a descendent of the other type.
+ 
+    function Is_Descendent_Of_Address (T1 : Entity_Id) return Boolean;
+    --  Returns True if type T1 is a descendent of Address or its base type.
+    --  Similar to calling Is_Descendent_Of with Base_Type (RTE (RE_Address))
+    --  except that it avoids creating an unconditional dependency on System.
+ 
     function Is_False (U : Uint) return Boolean;
     --  The argument is a Uint value which is the Boolean'Pos value of a
     --  Boolean operand (i.e. is either 0 for False, or 1 for True). This
*************** package Sem_Util is
*** 468,475 ****
     --  an lvalue, but it can answer True when N is not an lvalue. An lvalue is
     --  defined as any expression which appears in a context where a name is
     --  required by the syntax, and the identity, rather than merely the value
!    --  of the node is needed (for example, the prefix of an attribute is in
!    --  this category).
  
     function Is_Library_Level_Entity (E : Entity_Id) return Boolean;
     --  A library-level declaration is one that is accessible from Standard,
--- 504,511 ----
     --  an lvalue, but it can answer True when N is not an lvalue. An lvalue is
     --  defined as any expression which appears in a context where a name is
     --  required by the syntax, and the identity, rather than merely the value
!    --  of the node is needed (for example, the prefix of an Access attribute
!    --  is in this category).
  
     function Is_Library_Level_Entity (E : Entity_Id) return Boolean;
     --  A library-level declaration is one that is accessible from Standard,
*************** package Sem_Util is
*** 478,483 ****
--- 514,520 ----
     function Is_Local_Variable_Reference (Expr : Node_Id) return Boolean;
     --  Determines whether Expr is a refeference to a variable or IN OUT
     --  mode parameter of the current enclosing subprogram.
+    --  Why are OUT parameters not considered here ???
  
     function Is_Object_Reference (N : Node_Id) return Boolean;
     --  Determines if the tree referenced by N represents an object. Both
*************** package Sem_Util is
*** 519,525 ****
     function Is_Statement (N : Node_Id) return Boolean;
     --  Check if the node N is a statement node. Note that this includes
     --  the case of procedure call statements (unlike the direct use of
!    --  the N_Statement_Other_Than_Procedure_Call subtype from Sinfo)
  
     function Is_Transfer (N : Node_Id) return Boolean;
     --  Returns True if the node N is a statement which is known to cause
--- 556,563 ----
     function Is_Statement (N : Node_Id) return Boolean;
     --  Check if the node N is a statement node. Note that this includes
     --  the case of procedure call statements (unlike the direct use of
!    --  the N_Statement_Other_Than_Procedure_Call subtype from Sinfo).
!    --  Note that a label is *not* a statement, and will return False.
  
     function Is_Transfer (N : Node_Id) return Boolean;
     --  Returns True if the node N is a statement which is known to cause
diff -Nrcpad gcc-3.4.3/gcc/ada/sem_warn.adb gcc-4.0.0/gcc/ada/sem_warn.adb
*** gcc-3.4.3/gcc/ada/sem_warn.adb	Wed Dec  3 11:47:53 2003
--- gcc-4.0.0/gcc/ada/sem_warn.adb	Wed Dec  8 11:26:46 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1999-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1999-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Sem_Warn is
*** 171,179 ****
        --  from another unit. This is true for entities in packages that are
        --  at the library level.
  
!       -----------------------
!       --  Missing_Subunits --
!       -----------------------
  
        function Missing_Subunits return Boolean is
           D : Node_Id;
--- 171,179 ----
        --  from another unit. This is true for entities in packages that are
        --  at the library level.
  
!       ----------------------
!       -- Missing_Subunits --
!       ----------------------
  
        function Missing_Subunits return Boolean is
           D : Node_Id;
*************** package body Sem_Warn is
*** 351,357 ****
        E1 := First_Entity (E);
        while Present (E1) loop
  
!          --  We only look at source entities with warning flag off
  
           if Comes_From_Source (E1) and then not Warnings_Off (E1) then
  
--- 351,357 ----
        E1 := First_Entity (E);
        while Present (E1) loop
  
!          --  We only look at source entities with warning flag on
  
           if Comes_From_Source (E1) and then not Warnings_Off (E1) then
  
*************** package body Sem_Warn is
*** 367,372 ****
--- 367,380 ----
                 --  do not consider the implicit initialization of an access
                 --  type to be the assignment of a value for this purpose.
  
+                if Ekind (E1) = E_Out_Parameter
+                  and then Present (Spec_Entity (E1))
+                then
+                   UR := Unset_Reference (Spec_Entity (E1));
+                else
+                   UR := Unset_Reference (E1);
+                end if;
+ 
                 --  If the entity is an out parameter of the current subprogram
                 --  body, check the warning status of the parameter in the spec.
  
*************** package body Sem_Warn is
*** 376,381 ****
--- 384,405 ----
                 then
                    null;
  
+                elsif Present (UR)
+                  and then Is_Access_Type (Etype (E1))
+                then
+ 
+                   --  For access types, the only time we made a UR
+                   --  entry was for a dereference, and so we post
+                   --  the appropriate warning here (note that the
+                   --  dereference may not be explicit in the source,
+                   --  for example in the case of a dispatching call
+                   --  with an anonymous access controlling formal, or
+                   --  of an assignment of a pointer involving a
+                   --  discriminant check on the designated object).
+ 
+                   Error_Msg_NE ("& may be null?", UR, E1);
+                   goto Continue;
+ 
                 elsif Never_Set_In_Source (E1)
                   and then not Generic_Package_Spec_Entity (E1)
                 then
*************** package body Sem_Warn is
*** 435,491 ****
                 --  types from this check, since access types do always have
                 --  a null value, and that seems legitimate in this case.
  
-                if Ekind (E1) = E_Out_Parameter
-                  and then Present (Spec_Entity (E1))
-                then
-                   UR := Unset_Reference (Spec_Entity (E1));
-                else
-                   UR := Unset_Reference (E1);
-                end if;
- 
                 if Warn_On_No_Value_Assigned and then Present (UR) then
  
-                   --  For access types, the only time we made a UR entry
-                   --  was for a dereference, and so we post the appropriate
-                   --  warning here. The issue is not that the value is not
-                   --  initialized here, but that it is null.
- 
-                   if Is_Access_Type (Etype (E1)) then
-                      Error_Msg_NE ("& may be null?", UR, E1);
-                      goto Continue;
- 
                    --  For other than access type, go back to original node
                    --  to deal with case where original unset reference
                    --  has been rewritten during expansion.
  
!                   else
!                      UR := Original_Node (UR);
  
!                      --  In some cases, the original node may be a type
!                      --  conversion or qualification, and in this case
!                      --  we want the object entity inside.
  
!                      while Nkind (UR) = N_Type_Conversion
!                        or else Nkind (UR) = N_Qualified_Expression
!                      loop
!                         UR := Expression (UR);
!                      end loop;
  
!                      --  Here we issue the warning, all checks completed
  
!                      if Nkind (Parent (UR)) = N_Selected_Component then
!                         Error_Msg_Node_2 := Selector_Name (Parent (UR));
!                         Error_Msg_N
!                           ("`&.&` may be referenced before it has a value?",
!                            UR);
!                      else
!                         Error_Msg_N
!                           ("& may be referenced before it has a value?",
!                            UR);
                       end if;
  
!                      goto Continue;
                    end if;
                 end if;
              end if;
  
--- 459,525 ----
                 --  types from this check, since access types do always have
                 --  a null value, and that seems legitimate in this case.
  
                 if Warn_On_No_Value_Assigned and then Present (UR) then
  
                    --  For other than access type, go back to original node
                    --  to deal with case where original unset reference
                    --  has been rewritten during expansion.
  
!                   UR := Original_Node (UR);
  
!                   --  In some cases, the original node may be a type
!                   --  conversion or qualification, and in this case
!                   --  we want the object entity inside.
  
!                   while Nkind (UR) = N_Type_Conversion
!                     or else Nkind (UR) = N_Qualified_Expression
!                   loop
!                      UR := Expression (UR);
!                   end loop;
  
!                   --  Here we issue the warning, all checks completed
!                   --  If the unset reference is prefix of a selected
!                   --  component that comes from source, mention the
!                   --  component as well. If the selected component comes
!                   --  from expansion, all we know is that the entity is
!                   --  not fully initialized at the point of the reference.
!                   --  Locate an unintialized component to get a better
!                   --  error message.
  
!                   if Nkind (Parent (UR)) = N_Selected_Component then
!                      Error_Msg_Node_2 := Selector_Name (Parent (UR));
! 
!                      if not Comes_From_Source (Parent (UR)) then
!                         declare
!                            Comp : Entity_Id;
! 
!                         begin
!                            Comp := First_Entity (Etype (E1));
!                            while Present (Comp) loop
!                               if Ekind (Comp) = E_Component
!                                 and then Nkind (Parent (Comp)) =
!                                   N_Component_Declaration
!                                 and then No (Expression (Parent (Comp)))
!                               then
!                                  Error_Msg_Node_2 := Comp;
!                                  exit;
!                               end if;
! 
!                               Next_Entity (Comp);
!                            end loop;
!                         end;
                       end if;
  
!                      Error_Msg_N
!                        ("`&.&` may be referenced before it has a value?",
!                         UR);
!                   else
!                      Error_Msg_N
!                        ("& may be referenced before it has a value?",
!                         UR);
                    end if;
+ 
+                   goto Continue;
                 end if;
              end if;
  
*************** package body Sem_Warn is
*** 529,534 ****
--- 563,569 ----
                                  (Ekind (E) = E_Function
                                    or else Ekind (E) = E_Package_Body
                                    or else Ekind (E) = E_Procedure
+                                   or else Ekind (E) = E_Subprogram_Body
                                    or else Ekind (E) = E_Block)))
  
                 --  Exclude instantiations, since there is no reason why
*************** package body Sem_Warn is
*** 636,642 ****
                 Unreferenced_Entities.Increment_Last;
                 Unreferenced_Entities.Table (Unreferenced_Entities.Last) := E1;
  
!                --  Force warning on entity.
  
                 Set_Referenced (E1, False);
              end if;
--- 671,677 ----
                 Unreferenced_Entities.Increment_Last;
                 Unreferenced_Entities.Table (Unreferenced_Entities.Last) := E1;
  
!                --  Force warning on entity
  
                 Set_Referenced (E1, False);
              end if;
*************** package body Sem_Warn is
*** 960,966 ****
              Un : constant Node_Id := Sinfo.Unit (Cnode);
  
              function Check_Use_Clause (N : Node_Id) return Traverse_Result;
!             --  If N is a use_clause for Pack, emit warning.
  
              procedure Check_Use_Clauses is new
                Traverse_Proc (Check_Use_Clause);
--- 995,1001 ----
              Un : constant Node_Id := Sinfo.Unit (Cnode);
  
              function Check_Use_Clause (N : Node_Id) return Traverse_Result;
!             --  If N is a use_clause for Pack, emit warning
  
              procedure Check_Use_Clauses is new
                Traverse_Proc (Check_Use_Clause);
*************** package body Sem_Warn is
*** 1449,1454 ****
--- 1484,1497 ----
                    then
                       if Warn_On_Modified_Unread
                         and then not Is_Imported (E)
+ 
+                         --  Suppress the message for aliased or renamed
+                         --  variables, since there may be other entities
+                         --  read the same memory location.
+ 
+                        and then not Is_Aliased (E)
+                        and then No (Renamed_Object (E))
+ 
                       then
                          Error_Msg_N
                            ("variable & is assigned but never read?", E);
diff -Nrcpad gcc-3.4.3/gcc/ada/sfn_scan.adb gcc-4.0.0/gcc/ada/sfn_scan.adb
*** gcc-3.4.3/gcc/ada/sfn_scan.adb	Tue Oct 21 13:42:22 2003
--- gcc-4.0.0/gcc/ada/sfn_scan.adb	Mon Mar 29 12:03:22 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2000-2002 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2000-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body SFN_Scan is
*** 63,68 ****
--- 63,73 ----
     -- Local Procedures --
     ----------------------
  
+    function Acquire_Integer return Natural;
+    --  This function skips white space, and then scans and returns
+    --  an unsigned integer. Raises Error if no integer is present
+    --  or if the integer is greater than 999.
+ 
     function Acquire_String (B : Natural; E : Natural) return String;
     --  This function takes a string scanned out by Scan_String, strips
     --  the enclosing quote characters and any internal doubled quote
*************** package body SFN_Scan is
*** 128,133 ****
--- 133,165 ----
     --  Skips P past any white space characters (end of line
     --  characters, spaces, comments, horizontal tab characters).
  
+    ---------------------
+    -- Acquire_Integer --
+    ---------------------
+ 
+    function Acquire_Integer return Natural is
+       N : Natural := 0;
+ 
+    begin
+       Skip_WS;
+ 
+       if S (P) not in '0' .. '9' then
+          Error ("missing index parameter");
+       end if;
+ 
+       while S (P) in '0' .. '9' loop
+          N := N * 10 + Character'Pos (S (P)) - Character'Pos ('0');
+ 
+          if N > 999 then
+             Error ("index value greater than 999");
+          end if;
+ 
+          P := P + 1;
+       end loop;
+ 
+       return N;
+    end Acquire_Integer;
+ 
     --------------------
     -- Acquire_String --
     --------------------
*************** package body SFN_Scan is
*** 310,315 ****
--- 342,351 ----
        procedure Add_Nat (N : Natural);
        --  Add chars of integer to error msg buffer
  
+       -------------
+       -- Add_Nat --
+       -------------
+ 
        procedure Add_Nat (N : Natural) is
        begin
           if N > 9 then
*************** package body SFN_Scan is
*** 415,421 ****
  
           --  Source_File_Name pragma case
  
!          if Check_Token ("source_file_name") then
              Require_Token ("(");
  
              Typ := Check_File_Type;
--- 451,460 ----
  
           --  Source_File_Name pragma case
  
!          if Check_Token ("source_file_name")
!               or else
!              Check_Token ("source_file_name_project")
!          then
              Require_Token ("(");
  
              Typ := Check_File_Type;
*************** package body SFN_Scan is
*** 443,453 ****
  
                    declare
                       F : constant String := Acquire_String (B, E);
  
                    begin
                       Require_Token (")");
                       Require_Token (";");
!                      SFN_Ptr.all (Typ, U, F);
                    end;
                 end;
  
--- 482,505 ----
  
                    declare
                       F : constant String := Acquire_String (B, E);
+                      X : Natural;
  
                    begin
+                      --  Scan Index parameter if present
+ 
+                      if Check_Token (",") then
+                         if Check_Token ("index") then
+                            Require_Token ("=>");
+                         end if;
+ 
+                         X := Acquire_Integer;
+                      else
+                         X := 0;
+                      end if;
+ 
                       Require_Token (")");
                       Require_Token (";");
!                      SFN_Ptr.all (Typ, U, F, X);
                    end;
                 end;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/sfn_scan.ads gcc-4.0.0/gcc/ada/sfn_scan.ads
*** gcc-3.4.3/gcc/ada/sfn_scan.ads	Thu Apr 24 17:54:18 2003
--- gcc-4.0.0/gcc/ada/sfn_scan.ads	Mon Mar 29 12:03:22 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2000-2001 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2000-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package SFN_Scan is
*** 46,57 ****
     --  of these procedures:
  
     type Set_File_Name_Ptr is access
!      procedure (Typ : Character; U : String; F : String);
     --  The procedure with this profile is called when a Source_File_Name
     --  pragma of the form having a unit name parameter. Typ is 'b' for
     --  a body file name, and 's' for a spec file name. U is a string that
     --  contains the unit name, exactly as it appeared in the source file,
!    --  and F is the file taken from the second parameter.
  
     type Set_File_Name_Pattern_Ptr is access
       procedure (Pat : String; Typ : Character; Dot : String; Cas : Character);
--- 46,62 ----
     --  of these procedures:
  
     type Set_File_Name_Ptr is access
!      procedure
!        (Typ   : Character;
!         U     : String;
!         F     : String;
!         Index : Natural);
     --  The procedure with this profile is called when a Source_File_Name
     --  pragma of the form having a unit name parameter. Typ is 'b' for
     --  a body file name, and 's' for a spec file name. U is a string that
     --  contains the unit name, exactly as it appeared in the source file,
!    --  and F is the file taken from the second parameter. Index is taken
!    --  from the third parameter, or is set to zero if no third parameter.
  
     type Set_File_Name_Pattern_Ptr is access
       procedure (Pat : String; Typ : Character; Dot : String; Cas : Character);
diff -Nrcpad gcc-3.4.3/gcc/ada/sinfo.adb gcc-4.0.0/gcc/ada/sinfo.adb
*** gcc-3.4.3/gcc/ada/sinfo.adb	Mon Jan 12 11:45:25 2004
--- gcc-4.0.0/gcc/ada/sinfo.adb	Thu Feb 10 13:50:43 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Sinfo is
*** 117,122 ****
--- 117,139 ----
        return Node2 (N);
     end Accept_Statement;
  
+    function Access_Definition
+      (N : Node_Id) return Node_Id is
+    begin
+       pragma Assert (False
+         or else NT (N).Nkind = N_Component_Definition
+         or else NT (N).Nkind = N_Object_Renaming_Declaration);
+       return Node3 (N);
+    end Access_Definition;
+ 
+    function Access_To_Subprogram_Definition
+      (N : Node_Id) return Node_Id is
+    begin
+       pragma Assert (False
+         or else NT (N).Nkind = N_Access_Definition);
+       return Node3 (N);
+    end Access_To_Subprogram_Definition;
+ 
     function Access_Types_To_Process
        (N : Node_Id) return Elist_Id is
     begin
*************** package body Sinfo is
*** 187,192 ****
--- 204,210 ----
        (N : Node_Id) return Boolean is
     begin
        pragma Assert (False
+         or else NT (N).Nkind = N_Access_Definition
          or else NT (N).Nkind = N_Access_To_Object_Definition);
        return Flag15 (N);
     end All_Present;
*************** package body Sinfo is
*** 297,303 ****
        pragma Assert (False
          or else NT (N).Nkind = N_Component_Association
          or else NT (N).Nkind = N_Formal_Package_Declaration
!         or else NT (N).Nkind = N_Formal_Subprogram_Declaration);
        return Flag15 (N);
     end Box_Present;
  
--- 315,321 ----
        pragma Assert (False
          or else NT (N).Nkind = N_Component_Association
          or else NT (N).Nkind = N_Formal_Package_Declaration
!         or else NT (N).Nkind in N_Formal_Subprogram_Declaration);
        return Flag15 (N);
     end Box_Present;
  
*************** package body Sinfo is
*** 310,320 ****
     end By_Ref;
  
     function Char_Literal_Value
!       (N : Node_Id) return Char_Code is
     begin
        pragma Assert (False
          or else NT (N).Nkind = N_Character_Literal);
!       return Char_Code2 (N);
     end Char_Literal_Value;
  
     function Chars
--- 328,338 ----
     end By_Ref;
  
     function Char_Literal_Value
!       (N : Node_Id) return Uint is
     begin
        pragma Assert (False
          or else NT (N).Nkind = N_Character_Literal);
!       return Uint2 (N);
     end Char_Literal_Value;
  
     function Chars
*************** package body Sinfo is
*** 448,453 ****
--- 466,472 ----
        (N : Node_Id) return Boolean is
     begin
        pragma Assert (False
+         or else NT (N).Nkind = N_Access_Definition
          or else NT (N).Nkind = N_Access_To_Object_Definition
          or else NT (N).Nkind = N_Object_Declaration);
        return Flag17 (N);
*************** package body Sinfo is
*** 520,525 ****
--- 539,552 ----
        return Node5 (N);
     end Corresponding_Body;
  
+    function Corresponding_Formal_Spec
+       (N : Node_Id) return Node_Id is
+    begin
+       pragma Assert (False
+         or else NT (N).Nkind = N_Subprogram_Renaming_Declaration);
+       return Node3 (N);
+    end Corresponding_Formal_Spec;
+ 
     function Corresponding_Generic_Association
        (N : Node_Id) return Node_Id is
     begin
*************** package body Sinfo is
*** 601,607 ****
        (N : Node_Id) return Node_Id is
     begin
        pragma Assert (False
!         or else NT (N).Nkind = N_Formal_Subprogram_Declaration);
        return Node2 (N);
     end Default_Name;
  
--- 628,634 ----
        (N : Node_Id) return Node_Id is
     begin
        pragma Assert (False
!         or else NT (N).Nkind in N_Formal_Subprogram_Declaration);
        return Node2 (N);
     end Default_Name;
  
*************** package body Sinfo is
*** 852,858 ****
     begin
        pragma Assert (False
          or else NT (N).Nkind = N_With_Clause);
!       return Flag15 (N);
     end Elaborate_All_Present;
  
     function Elaborate_Present
--- 879,885 ----
     begin
        pragma Assert (False
          or else NT (N).Nkind = N_With_Clause);
!       return Flag14 (N);
     end Elaborate_All_Present;
  
     function Elaborate_Present
*************** package body Sinfo is
*** 1184,1189 ****
--- 1211,1224 ----
        return Flag4 (N);
     end From_At_Mod;
  
+    function From_Default
+       (N : Node_Id) return Boolean is
+    begin
+       pragma Assert (False
+         or else NT (N).Nkind = N_Subprogram_Renaming_Declaration);
+       return Flag6 (N);
+    end From_Default;
+ 
     function Generic_Associations
        (N : Node_Id) return List_Id is
     begin
*************** package body Sinfo is
*** 1815,1820 ****
--- 1850,1873 ----
        return Flag13 (N);
     end Null_Present;
  
+    function Null_Exclusion_Present
+       (N : Node_Id) return Boolean is
+    begin
+       pragma Assert (False
+         or else NT (N).Nkind = N_Access_Definition
+         or else NT (N).Nkind = N_Access_Function_Definition
+         or else NT (N).Nkind = N_Access_Procedure_Definition
+         or else NT (N).Nkind = N_Access_To_Object_Definition
+         or else NT (N).Nkind = N_Allocator
+         or else NT (N).Nkind = N_Component_Definition
+         or else NT (N).Nkind = N_Derived_Type_Definition
+         or else NT (N).Nkind = N_Discriminant_Specification
+         or else NT (N).Nkind = N_Object_Declaration
+         or else NT (N).Nkind = N_Parameter_Specification
+         or else NT (N).Nkind = N_Subtype_Declaration);
+       return Flag9 (N);
+    end Null_Exclusion_Present;
+ 
     function Null_Record_Present
        (N : Node_Id) return Boolean is
     begin
*************** package body Sinfo is
*** 2031,2037 ****
     begin
        pragma Assert (False
          or else NT (N).Nkind = N_Compilation_Unit
!         or else NT (N).Nkind = N_Formal_Derived_Type_Definition);
        return Flag15 (N);
     end Private_Present;
  
--- 2084,2091 ----
     begin
        pragma Assert (False
          or else NT (N).Nkind = N_Compilation_Unit
!         or else NT (N).Nkind = N_Formal_Derived_Type_Definition
!         or else NT (N).Nkind = N_With_Clause);
        return Flag15 (N);
     end Private_Present;
  
*************** package body Sinfo is
*** 2242,2255 ****
     begin
        pragma Assert (False
          or else NT (N).Nkind = N_Abstract_Subprogram_Declaration
-         or else NT (N).Nkind = N_Formal_Subprogram_Declaration
          or else NT (N).Nkind = N_Generic_Package_Declaration
          or else NT (N).Nkind = N_Generic_Subprogram_Declaration
          or else NT (N).Nkind = N_Package_Declaration
          or else NT (N).Nkind = N_Subprogram_Body
          or else NT (N).Nkind = N_Subprogram_Body_Stub
          or else NT (N).Nkind = N_Subprogram_Declaration
!         or else NT (N).Nkind = N_Subprogram_Renaming_Declaration);
        return Node1 (N);
     end Specification;
  
--- 2296,2309 ----
     begin
        pragma Assert (False
          or else NT (N).Nkind = N_Abstract_Subprogram_Declaration
          or else NT (N).Nkind = N_Generic_Package_Declaration
          or else NT (N).Nkind = N_Generic_Subprogram_Declaration
          or else NT (N).Nkind = N_Package_Declaration
          or else NT (N).Nkind = N_Subprogram_Body
          or else NT (N).Nkind = N_Subprogram_Body_Stub
          or else NT (N).Nkind = N_Subprogram_Declaration
!         or else NT (N).Nkind = N_Subprogram_Renaming_Declaration
!         or else NT (N).Nkind in N_Formal_Subprogram_Declaration);
        return Node1 (N);
     end Specification;
  
*************** package body Sinfo is
*** 2565,2570 ****
--- 2619,2641 ----
        Set_Node2_With_Parent (N, Val);
     end Set_Accept_Statement;
  
+    procedure Set_Access_Definition
+      (N : Node_Id; Val : Node_Id) is
+    begin
+       pragma Assert (False
+         or else NT (N).Nkind = N_Component_Definition
+         or else NT (N).Nkind = N_Object_Renaming_Declaration);
+       Set_Node3_With_Parent (N, Val);
+    end Set_Access_Definition;
+ 
+    procedure Set_Access_To_Subprogram_Definition
+      (N : Node_Id; Val : Node_Id) is
+    begin
+       pragma Assert (False
+         or else NT (N).Nkind = N_Access_Definition);
+       Set_Node3_With_Parent (N, Val);
+    end Set_Access_To_Subprogram_Definition;
+ 
     procedure Set_Access_Types_To_Process
        (N : Node_Id; Val : Elist_Id) is
     begin
*************** package body Sinfo is
*** 2635,2640 ****
--- 2706,2712 ----
        (N : Node_Id; Val : Boolean := True) is
     begin
        pragma Assert (False
+         or else NT (N).Nkind = N_Access_Definition
          or else NT (N).Nkind = N_Access_To_Object_Definition);
        Set_Flag15 (N, Val);
     end Set_All_Present;
*************** package body Sinfo is
*** 2745,2751 ****
        pragma Assert (False
          or else NT (N).Nkind = N_Component_Association
          or else NT (N).Nkind = N_Formal_Package_Declaration
!         or else NT (N).Nkind = N_Formal_Subprogram_Declaration);
        Set_Flag15 (N, Val);
     end Set_Box_Present;
  
--- 2817,2823 ----
        pragma Assert (False
          or else NT (N).Nkind = N_Component_Association
          or else NT (N).Nkind = N_Formal_Package_Declaration
!         or else NT (N).Nkind in N_Formal_Subprogram_Declaration);
        Set_Flag15 (N, Val);
     end Set_Box_Present;
  
*************** package body Sinfo is
*** 2758,2768 ****
     end Set_By_Ref;
  
     procedure Set_Char_Literal_Value
!       (N : Node_Id; Val : Char_Code) is
     begin
        pragma Assert (False
          or else NT (N).Nkind = N_Character_Literal);
!       Set_Char_Code2 (N, Val);
     end Set_Char_Literal_Value;
  
     procedure Set_Chars
--- 2830,2840 ----
     end Set_By_Ref;
  
     procedure Set_Char_Literal_Value
!       (N : Node_Id; Val : Uint) is
     begin
        pragma Assert (False
          or else NT (N).Nkind = N_Character_Literal);
!       Set_Uint2 (N, Val);
     end Set_Char_Literal_Value;
  
     procedure Set_Chars
*************** package body Sinfo is
*** 2896,2901 ****
--- 2968,2974 ----
        (N : Node_Id; Val : Boolean := True) is
     begin
        pragma Assert (False
+         or else NT (N).Nkind = N_Access_Definition
          or else NT (N).Nkind = N_Access_To_Object_Definition
          or else NT (N).Nkind = N_Object_Declaration);
        Set_Flag17 (N, Val);
*************** package body Sinfo is
*** 2968,2973 ****
--- 3041,3054 ----
        Set_Node5 (N, Val); -- semantic field, no parent set
     end Set_Corresponding_Body;
  
+    procedure Set_Corresponding_Formal_Spec
+       (N : Node_Id; Val : Node_Id) is
+    begin
+       pragma Assert (False
+         or else NT (N).Nkind = N_Subprogram_Renaming_Declaration);
+       Set_Node3 (N, Val); -- semantic field, no parent set
+    end Set_Corresponding_Formal_Spec;
+ 
     procedure Set_Corresponding_Generic_Association
        (N : Node_Id; Val : Node_Id) is
     begin
*************** package body Sinfo is
*** 2976,2981 ****
--- 3057,3063 ----
          or else NT (N).Nkind = N_Object_Renaming_Declaration);
        Set_Node5 (N, Val); -- semantic field, no parent set
     end Set_Corresponding_Generic_Association;
+ 
     procedure Set_Corresponding_Integer_Value
        (N : Node_Id; Val : Uint) is
     begin
*************** package body Sinfo is
*** 3048,3054 ****
        (N : Node_Id; Val : Node_Id) is
     begin
        pragma Assert (False
!         or else NT (N).Nkind = N_Formal_Subprogram_Declaration);
        Set_Node2_With_Parent (N, Val);
     end Set_Default_Name;
  
--- 3130,3136 ----
        (N : Node_Id; Val : Node_Id) is
     begin
        pragma Assert (False
!         or else NT (N).Nkind in N_Formal_Subprogram_Declaration);
        Set_Node2_With_Parent (N, Val);
     end Set_Default_Name;
  
*************** package body Sinfo is
*** 3299,3305 ****
     begin
        pragma Assert (False
          or else NT (N).Nkind = N_With_Clause);
!       Set_Flag15 (N, Val);
     end Set_Elaborate_All_Present;
  
     procedure Set_Elaborate_Present
--- 3381,3387 ----
     begin
        pragma Assert (False
          or else NT (N).Nkind = N_With_Clause);
!       Set_Flag14 (N, Val);
     end Set_Elaborate_All_Present;
  
     procedure Set_Elaborate_Present
*************** package body Sinfo is
*** 3622,3627 ****
--- 3704,3717 ----
        Set_Flag4 (N, Val);
     end Set_From_At_Mod;
  
+    procedure Set_From_Default
+       (N : Node_Id; Val : Boolean := True) is
+    begin
+       pragma Assert (False
+         or else NT (N).Nkind = N_Subprogram_Renaming_Declaration);
+       Set_Flag6 (N, Val);
+    end Set_From_Default;
+ 
     procedure Set_Generic_Associations
        (N : Node_Id; Val : List_Id) is
     begin
*************** package body Sinfo is
*** 4253,4258 ****
--- 4343,4366 ----
        Set_Flag13 (N, Val);
     end Set_Null_Present;
  
+    procedure Set_Null_Exclusion_Present
+       (N : Node_Id; Val : Boolean := True) is
+    begin
+       pragma Assert (False
+         or else NT (N).Nkind = N_Access_Definition
+         or else NT (N).Nkind = N_Access_Function_Definition
+         or else NT (N).Nkind = N_Access_Procedure_Definition
+         or else NT (N).Nkind = N_Access_To_Object_Definition
+         or else NT (N).Nkind = N_Allocator
+         or else NT (N).Nkind = N_Component_Definition
+         or else NT (N).Nkind = N_Derived_Type_Definition
+         or else NT (N).Nkind = N_Discriminant_Specification
+         or else NT (N).Nkind = N_Object_Declaration
+         or else NT (N).Nkind = N_Parameter_Specification
+         or else NT (N).Nkind = N_Subtype_Declaration);
+       Set_Flag9 (N, Val);
+    end Set_Null_Exclusion_Present;
+ 
     procedure Set_Null_Record_Present
        (N : Node_Id; Val : Boolean := True) is
     begin
*************** package body Sinfo is
*** 4469,4475 ****
     begin
        pragma Assert (False
          or else NT (N).Nkind = N_Compilation_Unit
!         or else NT (N).Nkind = N_Formal_Derived_Type_Definition);
        Set_Flag15 (N, Val);
     end Set_Private_Present;
  
--- 4577,4584 ----
     begin
        pragma Assert (False
          or else NT (N).Nkind = N_Compilation_Unit
!         or else NT (N).Nkind = N_Formal_Derived_Type_Definition
!         or else NT (N).Nkind = N_With_Clause);
        Set_Flag15 (N, Val);
     end Set_Private_Present;
  
*************** package body Sinfo is
*** 4680,4693 ****
     begin
        pragma Assert (False
          or else NT (N).Nkind = N_Abstract_Subprogram_Declaration
-         or else NT (N).Nkind = N_Formal_Subprogram_Declaration
          or else NT (N).Nkind = N_Generic_Package_Declaration
          or else NT (N).Nkind = N_Generic_Subprogram_Declaration
          or else NT (N).Nkind = N_Package_Declaration
          or else NT (N).Nkind = N_Subprogram_Body
          or else NT (N).Nkind = N_Subprogram_Body_Stub
          or else NT (N).Nkind = N_Subprogram_Declaration
!         or else NT (N).Nkind = N_Subprogram_Renaming_Declaration);
        Set_Node1_With_Parent (N, Val);
     end Set_Specification;
  
--- 4789,4802 ----
     begin
        pragma Assert (False
          or else NT (N).Nkind = N_Abstract_Subprogram_Declaration
          or else NT (N).Nkind = N_Generic_Package_Declaration
          or else NT (N).Nkind = N_Generic_Subprogram_Declaration
          or else NT (N).Nkind = N_Package_Declaration
          or else NT (N).Nkind = N_Subprogram_Body
          or else NT (N).Nkind = N_Subprogram_Body_Stub
          or else NT (N).Nkind = N_Subprogram_Declaration
!         or else NT (N).Nkind = N_Subprogram_Renaming_Declaration
!         or else NT (N).Nkind in N_Formal_Subprogram_Declaration);
        Set_Node1_With_Parent (N, Val);
     end Set_Specification;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/sinfo.ads gcc-4.0.0/gcc/ada/sinfo.ads
*** gcc-3.4.3/gcc/ada/sinfo.ads	Mon Jan 12 11:45:25 2004
--- gcc-4.0.0/gcc/ada/sinfo.ads	Thu Feb 10 13:50:43 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 48,54 ****
  
  --  WARNING: There is a C version of this package. Any changes to this
  --  source file must be properly reflected in this C header file sinfo.h
! --  which is created automatically from sinfo.ads using xsinfo.spt.
  
  with Types;  use Types;
  with Uintp;  use Uintp;
--- 48,54 ----
  
  --  WARNING: There is a C version of this package. Any changes to this
  --  source file must be properly reflected in this C header file sinfo.h
! --  which is created automatically from sinfo.ads using xsinfo.adb.
  
  with Types;  use Types;
  with Uintp;  use Uintp;
*************** package Sinfo is
*** 650,656 ****
     --    Procedure calls, the Controlling_Argument is one of the actuals.
     --    For a function that has a dispatching result, it is an entity in
     --    the context of the call that can provide a tag, or else it is the
!    --    tag of the root type of the class.
  
     --  Conversion_OK (Flag14-Sem)
     --    A flag set on type conversion nodes to indicate that the conversion
--- 650,658 ----
     --    Procedure calls, the Controlling_Argument is one of the actuals.
     --    For a function that has a dispatching result, it is an entity in
     --    the context of the call that can provide a tag, or else it is the
!    --    tag of the root type of the class. It can also specify a tag
!    --    directly rather than being a tagged object. The latter is needed
!    --    by the implementations of AI-239 and AI-260.
  
     --  Conversion_OK (Flag14-Sem)
     --    A flag set on type conversion nodes to indicate that the conversion
*************** package Sinfo is
*** 670,675 ****
--- 672,684 ----
     --    points to the defining entity for the corresponding body (NOT the
     --    node for the body itself).
  
+    --  Corresponding_Formal_Spec (Node3-Sem)
+    --  This field is set in subprogram renaming declarations, where it points
+    --  to the defining entity for a formal subprogram in the case where the
+    --  renaming corresponds to a generic formal subprogram association in an
+    --  instantiation. The field is Empty if the renaming does not correspond
+    --  to such a formal association.
+ 
     --  Corresponding_Generic_Association (Node5-Sem)
     --    This field is defined for object declarations and object renaming
     --    declarations. It is set for the declarations within an instance that
*************** package Sinfo is
*** 825,831 ****
     --    This flag is set in the N_With_Clause node to indicate that a
     --    pragma Elaborate pragma appears for the with'ed units.
  
!    --  Elaborate_All_Present (Flag15-Sem)
     --    This flag is set in the N_With_Clause node to indicate that a
     --    pragma Elaborate_All pragma appears for the with'ed units.
  
--- 834,840 ----
     --    This flag is set in the N_With_Clause node to indicate that a
     --    pragma Elaborate pragma appears for the with'ed units.
  
!    --  Elaborate_All_Present (Flag14-Sem)
     --    This flag is set in the N_With_Clause node to indicate that a
     --    pragma Elaborate_All pragma appears for the with'ed units.
  
*************** package Sinfo is
*** 872,878 ****
     --    generic templates, this is harmless.
  
     --  Entity_Or_Associated_Node (Node4-Sem)
!    --    A synonym for both Entity and Asasociated_Node. Used by convention
     --    in the code when referencing this field in cases where it is not
     --    known whether the field contains an Entity or an Associated_Node.
  
--- 881,887 ----
     --    generic templates, this is harmless.
  
     --  Entity_Or_Associated_Node (Node4-Sem)
!    --    A synonym for both Entity and Associated_Node. Used by convention
     --    in the code when referencing this field in cases where it is not
     --    known whether the field contains an Entity or an Associated_Node.
  
*************** package Sinfo is
*** 968,973 ****
--- 977,989 ----
     --    and the representation clause is considered to be type specific
     --    instead of subtype specific.
  
+    --  From_Default (Flag6-Sem)
+    --    This flag is set on the subprogram renaming declaration created in
+    --    an instance for a formal subprogram, when the formal is declared
+    --    with a box, and there is no explicit actual. If the flag is present,
+    --    the declaration is treated as an implicit reference to the formal in
+    --    the ali file.
+ 
     --  Generic_Parent (Node5-Sem)
     --    Generic_parent is defined on declaration nodes that are instances.
     --    The value of Generic_Parent is the generic entity from which the
*************** package Sinfo is
*** 1376,1382 ****
     --    This is used to clarify output from the packed array cases.
  
     --  Procedure_To_Call (Node4-Sem)
!    --    Present in N_Allocator. N_Free_Statement, and N_Return_Statement
     --    nodes. References the entity for the declaration of the procedure
     --    to be called to accomplish the required operation (i.e. for the
     --    Allocate procedure in the case of N_Allocator and N_Return_Statement
--- 1392,1398 ----
     --    This is used to clarify output from the packed array cases.
  
     --  Procedure_To_Call (Node4-Sem)
!    --    Present in N_Allocator, N_Free_Statement, and N_Return_Statement
     --    nodes. References the entity for the declaration of the procedure
     --    to be called to accomplish the required operation (i.e. for the
     --    Allocate procedure in the case of N_Allocator and N_Return_Statement
*************** package Sinfo is
*** 1512,1518 ****
     --    stub. During the analysis procedure, stubs in some situations
     --    get rewritten by the corresponding bodies, and we set this flag
     --    to remember that this happened. Note that it is not good enough
!    --    to rely on the use of Original_Tree here because of the case of
     --    nested instantiations where the substituted node can be copied.
  
     --  Zero_Cost_Handling (Flag5-Sem)
--- 1528,1534 ----
     --    stub. During the analysis procedure, stubs in some situations
     --    get rewritten by the corresponding bodies, and we set this flag
     --    to remember that this happened. Note that it is not good enough
!    --    to rely on the use of Original_Node here because of the case of
     --    nested instantiations where the substituted node can be copied.
  
     --  Zero_Cost_Handling (Flag5-Sem)
*************** package Sinfo is
*** 1659,1664 ****
--- 1675,1686 ----
        --  using the standard literal format. Such literals are listed by
        --  Sprint using the notation [numerator / denominator].
  
+       --  Note: the value of an integer literal node created by the front end
+       --  is never outside the range of values of the base type. However, it
+       --  can be the case that the value is outside the range of the
+       --  particular subtype. This happens in the case of integer overflows
+       --  with checks suppressed.
+ 
        --  N_Integer_Literal
        --  Sloc points to literal
        --  Original_Entity (Node2-Sem) If not Empty, holds Named_Number that
*************** package Sinfo is
*** 1702,1708 ****
        --  N_Character_Literal
        --  Sloc points to literal
        --  Chars (Name1) contains the Name_Id for the identifier
!       --  Char_Literal_Value (Char_Code2) contains the literal value
        --  Entity (Node4-Sem)
        --  Associated_Node (Node4-Sem)
        --  Has_Private_View (Flag11-Sem) set in generic units.
--- 1724,1730 ----
        --  N_Character_Literal
        --  Sloc points to literal
        --  Chars (Name1) contains the Name_Id for the identifier
!       --  Char_Literal_Value (Uint2) contains the literal value
        --  Entity (Node4-Sem)
        --  Associated_Node (Node4-Sem)
        --  Has_Private_View (Flag11-Sem) set in generic units.
*************** package Sinfo is
*** 1760,1765 ****
--- 1782,1792 ----
        --  Debug_Statement (Node3) (set to Empty if not Debug, Assert)
        --  Next_Rep_Item (Node4-Sem)
  
+       --  Note: we should have a section on what pragmas are passed on to
+       --  the back end to be processed. This section should note that pragma
+       --  Psect_Object is always converted to Common_Object, but there are
+       --  undoubtedly many other similar notes required ???
+ 
        --------------------------------------
        -- 2.8  Pragma Argument Association --
        --------------------------------------
*************** package Sinfo is
*** 1868,1874 ****
        --------------------------------
  
        --  SUBTYPE_DECLARATION ::=
!       --    subtype DEFINING_IDENTIFIER is SUBTYPE_INDICATION;
  
        --  The subtype indication field is set to Empty for subtypes
        --  declared in package Standard (Positive, Natural).
--- 1895,1901 ----
        --------------------------------
  
        --  SUBTYPE_DECLARATION ::=
!       --    subtype DEFINING_IDENTIFIER is [NULL_EXCLUSION] SUBTYPE_INDICATION;
  
        --  The subtype indication field is set to Empty for subtypes
        --  declared in package Standard (Positive, Natural).
*************** package Sinfo is
*** 1876,1881 ****
--- 1903,1909 ----
        --  N_Subtype_Declaration
        --  Sloc points to SUBTYPE
        --  Defining_Identifier (Node1)
+       --  Null_Exclusion_Present (Flag9) (set to False if not present)
        --  Subtype_Indication (Node5)
        --  Generic_Parent_Type (Node4-Sem) (set for an actual derived type).
        --  Exception_Junk (Flag11-Sem)
*************** package Sinfo is
*** 1890,1895 ****
--- 1918,1928 ----
        --  directly in the tree as a subtype mark. The N_Subtype_Indication
        --  node is used only if a constraint is present.
  
+       --  Note: [For Ada 2005 (AI-231)]: Because Ada 2005 extends this rule
+       --  with the null-exclusion part (see AI-231), we had to introduce a new
+       --  attribute in all the parents of subtype_indication nodes to indicate
+       --  if the null-exclusion is present.
+ 
        --  Note: the reason that this node has expression fields is that a
        --  subtype indication can appear as an operand of a membership test.
  
*************** package Sinfo is
*** 1939,1945 ****
  
        --  OBJECT_DECLARATION ::=
        --    DEFINING_IDENTIFIER_LIST : [aliased] [constant]
!       --      SUBTYPE_INDICATION [:= EXPRESSION];
        --  | DEFINING_IDENTIFIER_LIST : [aliased] [constant]
        --      ARRAY_TYPE_DEFINITION [:= EXPRESSION];
        --  | SINGLE_TASK_DECLARATION
--- 1972,1978 ----
  
        --  OBJECT_DECLARATION ::=
        --    DEFINING_IDENTIFIER_LIST : [aliased] [constant]
!       --      [NULL_EXCLUSION] SUBTYPE_INDICATION [:= EXPRESSION];
        --  | DEFINING_IDENTIFIER_LIST : [aliased] [constant]
        --      ARRAY_TYPE_DEFINITION [:= EXPRESSION];
        --  | SINGLE_TASK_DECLARATION
*************** package Sinfo is
*** 1982,1987 ****
--- 2015,2021 ----
        --  Defining_Identifier (Node1)
        --  Aliased_Present (Flag4) set if ALIASED appears
        --  Constant_Present (Flag17) set if CONSTANT appears
+       --  Null_Exclusion_Present (Flag9) (set to False if not present)
        --  Object_Definition (Node4) subtype indication/array type definition
        --  Expression (Node3) (set to Empty if not present)
        --  Handler_List_Entry (Node2-Sem)
*************** package Sinfo is
*** 2028,2034 ****
        ----------------------------------
  
        --  DERIVED_TYPE_DEFINITION ::=
!       --    [abstract] new parent_SUBTYPE_INDICATION [RECORD_EXTENSION_PART]
  
        --  Note: ABSTRACT, record extension part not permitted in Ada 83 mode
  
--- 2062,2069 ----
        ----------------------------------
  
        --  DERIVED_TYPE_DEFINITION ::=
!       --    [abstract] new [NULL_EXCLUSION] parent_SUBTYPE_INDICATION
!       --    [RECORD_EXTENSION_PART]
  
        --  Note: ABSTRACT, record extension part not permitted in Ada 83 mode
  
*************** package Sinfo is
*** 2037,2042 ****
--- 2072,2078 ----
        --  N_Derived_Type_Definition
        --  Sloc points to NEW
        --  Abstract_Present (Flag4)
+       --  Null_Exclusion_Present (Flag9) (set to False if not present)
        --  Subtype_Indication (Node5)
        --  Record_Extension_Part (Node3) (set to Empty if not present)
  
*************** package Sinfo is
*** 2138,2144 ****
  
        --  INTEGER_TYPE_DEFINITION ::=
        --    SIGNED_INTEGER_TYPE_DEFINITION
!       --    MODULAR_TYPE_DEFINITION
  
        -------------------------------------------
        -- 3.5.4  Signed Integer Type Definition --
--- 2174,2180 ----
  
        --  INTEGER_TYPE_DEFINITION ::=
        --    SIGNED_INTEGER_TYPE_DEFINITION
!       --  | MODULAR_TYPE_DEFINITION
  
        -------------------------------------------
        -- 3.5.4  Signed Integer Type Definition --
*************** package Sinfo is
*** 2147,2163 ****
        --  SIGNED_INTEGER_TYPE_DEFINITION ::=
        --    range static_SIMPLE_EXPRESSION .. static_SIMPLE_EXPRESSION
  
!       --  Note: the Low_Bound and High_Bound fields are set to Empty for
!       --  integer types defined in package Standard.
  
        --  N_Signed_Integer_Type_Definition
        --  Sloc points to RANGE
        --  Low_Bound (Node1)
        --  High_Bound (Node2)
  
!       -----------------------------------------
!       -- 3.5.4  Unsigned Range Specification --
!       -----------------------------------------
  
        --  MODULAR_TYPE_DEFINITION ::= mod static_EXPRESSION
  
--- 2183,2199 ----
        --  SIGNED_INTEGER_TYPE_DEFINITION ::=
        --    range static_SIMPLE_EXPRESSION .. static_SIMPLE_EXPRESSION
  
!       --  Note: the Low_Bound and High_Bound fields are set to Empty
!       --  for integer types defined in package Standard.
  
        --  N_Signed_Integer_Type_Definition
        --  Sloc points to RANGE
        --  Low_Bound (Node1)
        --  High_Bound (Node2)
  
!       ------------------------------------
!       -- 3.5.4  Modular Type Definition --
!       ------------------------------------
  
        --  MODULAR_TYPE_DEFINITION ::= mod static_EXPRESSION
  
*************** package Sinfo is
*** 2215,2223 ****
  
        --  Note: In Ada 83, the EXPRESSION must be a SIMPLE_EXPRESSION
  
-       --  Note: the Delta_Expression and Real_Range_Specification fields
-       --  are set to Empty for fixed point types declared in Standard.
- 
        --  N_Ordinary_Fixed_Point_Definition
        --  Sloc points to DELTA
        --  Delta_Expression (Node3)
--- 2251,2256 ----
*************** package Sinfo is
*** 2316,2333 ****
        -- 3.6  Component Definition --
        -------------------------------
  
!       --  COMPONENT_DEFINITION ::= [aliased] SUBTYPE_INDICATION
  
        --  Note: although the syntax does not permit a component definition to
        --  be an anonymous array (and the parser will diagnose such an attempt
        --  with an appropriate message), it is possible for anonymous arrays
        --  to appear as component definitions. The semantics and back end handle
        --  this case properly, and the expander in fact generates such cases.
  
        --  N_Component_Definition
!       --  Sloc points to ALIASED or to first token of subtype mark
        --  Aliased_Present (Flag4)
!       --  Subtype_Indication (Node5)
  
        -----------------------------
        -- 3.6.1  Index Constraint --
--- 2349,2372 ----
        -- 3.6  Component Definition --
        -------------------------------
  
!       --  COMPONENT_DEFINITION ::=
!       --    [aliased] [NULL_EXCLUSION] SUBTYPE_INDICATION | ACCESS_DEFINITION
  
        --  Note: although the syntax does not permit a component definition to
        --  be an anonymous array (and the parser will diagnose such an attempt
        --  with an appropriate message), it is possible for anonymous arrays
        --  to appear as component definitions. The semantics and back end handle
        --  this case properly, and the expander in fact generates such cases.
+       --  Access_Definition is an optional field that gives support to
+       --  Ada 2005 (AI-230). The parser generates nodes that have either the
+       --  Subtype_Indication field or else the Access_Definition field.
  
        --  N_Component_Definition
!       --  Sloc points to ALIASED, ACCESS or to first token of subtype mark
        --  Aliased_Present (Flag4)
!       --  Null_Exclusion_Present (Flag9) (set to False if not present)
!       --  Subtype_Indication (Node5) (set to Empty if not present)
!       --  Access_Definition (Node3) (set to Empty if not present)
  
        -----------------------------
        -- 3.6.1  Index Constraint --
*************** package Sinfo is
*** 2382,2388 ****
        -------------------------------------
  
        --  DISCRIMINANT_SPECIFICATION ::=
!       --    DEFINING_IDENTIFIER_LIST : SUBTYPE_MARK
        --      [:= DEFAULT_EXPRESSION]
        --  | DEFINING_IDENTIFIER_LIST : ACCESS_DEFINITION
        --      [:= DEFAULT_EXPRESSION]
--- 2421,2427 ----
        -------------------------------------
  
        --  DISCRIMINANT_SPECIFICATION ::=
!       --    DEFINING_IDENTIFIER_LIST : [NULL_EXCLUSION] SUBTYPE_MARK
        --      [:= DEFAULT_EXPRESSION]
        --  | DEFINING_IDENTIFIER_LIST : ACCESS_DEFINITION
        --      [:= DEFAULT_EXPRESSION]
*************** package Sinfo is
*** 2398,2403 ****
--- 2437,2443 ----
        --  N_Discriminant_Specification
        --  Sloc points to first identifier
        --  Defining_Identifier (Node1)
+       --  Null_Exclusion_Present (Flag9) (set to False if not present)
        --  Discriminant_Type (Node5) subtype mark or
        --    access parameter definition
        --  Expression (Node3) (set to Empty if no default expression)
*************** package Sinfo is
*** 2619,2634 ****
        --    ACCESS_TO_OBJECT_DEFINITION
        --  | ACCESS_TO_SUBPROGRAM_DEFINITION
  
        ---------------------------------------
        -- 3.10  Access To Object Definition --
        ---------------------------------------
  
        --  ACCESS_TO_OBJECT_DEFINITION ::=
!       --    access [GENERAL_ACCESS_MODIFIER] SUBTYPE_INDICATION
  
        --  N_Access_To_Object_Definition
        --  Sloc points to ACCESS
        --  All_Present (Flag15)
        --  Subtype_Indication (Node5)
        --  Constant_Present (Flag17)
  
--- 2659,2682 ----
        --    ACCESS_TO_OBJECT_DEFINITION
        --  | ACCESS_TO_SUBPROGRAM_DEFINITION
  
+       --------------------------
+       -- 3.10  Null Exclusion --
+       --------------------------
+ 
+       --  NULL_EXCLUSION ::= not null
+ 
        ---------------------------------------
        -- 3.10  Access To Object Definition --
        ---------------------------------------
  
        --  ACCESS_TO_OBJECT_DEFINITION ::=
!       --    [NULL_EXCLUSION] access [GENERAL_ACCESS_MODIFIER]
!       --    SUBTYPE_INDICATION
  
        --  N_Access_To_Object_Definition
        --  Sloc points to ACCESS
        --  All_Present (Flag15)
+       --  Null_Exclusion_Present (Flag9) (set to False if not present)
        --  Subtype_Indication (Node5)
        --  Constant_Present (Flag17)
  
*************** package Sinfo is
*** 2649,2667 ****
        -------------------------------------------
  
        --  ACCESS_TO_SUBPROGRAM_DEFINITION
!       --    access [protected] procedure PARAMETER_PROFILE
!       --  | access [protected] function PARAMETER_AND_RESULT_PROFILE
  
        --  Note: access to subprograms are not permitted in Ada 83 mode
  
        --  N_Access_Function_Definition
        --  Sloc points to ACCESS
        --  Protected_Present (Flag15)
        --  Parameter_Specifications (List3) (set to No_List if no formal part)
        --  Subtype_Mark (Node4) result subtype
  
        --  N_Access_Procedure_Definition
        --  Sloc points to ACCESS
        --  Protected_Present (Flag15)
        --  Parameter_Specifications (List3) (set to No_List if no formal part)
  
--- 2697,2718 ----
        -------------------------------------------
  
        --  ACCESS_TO_SUBPROGRAM_DEFINITION
!       --    [NULL_EXCLUSION] access [protected] procedure PARAMETER_PROFILE
!       --  | [NULL_EXCLUSION] access [protected] function
!       --    PARAMETER_AND_RESULT_PROFILE
  
        --  Note: access to subprograms are not permitted in Ada 83 mode
  
        --  N_Access_Function_Definition
        --  Sloc points to ACCESS
+       --  Null_Exclusion_Present (Flag9) (set to False if not present)
        --  Protected_Present (Flag15)
        --  Parameter_Specifications (List3) (set to No_List if no formal part)
        --  Subtype_Mark (Node4) result subtype
  
        --  N_Access_Procedure_Definition
        --  Sloc points to ACCESS
+       --  Null_Exclusion_Present (Flag9) (set to False if not present)
        --  Protected_Present (Flag15)
        --  Parameter_Specifications (List3) (set to No_List if no formal part)
  
*************** package Sinfo is
*** 2669,2679 ****
        -- 3.10  Access Definition --
        -----------------------------
  
!       --  ACCESS_DEFINITION ::= access SUBTYPE_MARK
  
        --  N_Access_Definition
        --  Sloc points to ACCESS
        --  Subtype_Mark (Node4)
  
        -----------------------------------------
        -- 3.10.1  Incomplete Type Declaration --
--- 2720,2738 ----
        -- 3.10  Access Definition --
        -----------------------------
  
!       --  ACCESS_DEFINITION ::=
!       --    [NULL_EXCLUSION] access [GENERAL_ACCESS_MODIFIER] SUBTYPE_MARK
!       --  | ACCESS_TO_SUBPROGRAM_DEFINITION
! 
!       --  Note: access to subprograms are an Ada 2005 (AI-254) extension
  
        --  N_Access_Definition
        --  Sloc points to ACCESS
+       --  Null_Exclusion_Present (Flag9) (set to False if not present)
+       --  All_Present (Flag15)
+       --  Constant_Present (Flag17)
        --  Subtype_Mark (Node4)
+       --  Access_To_Subprogram_Definition (Node3) (set to Empty if not present)
  
        -----------------------------------------
        -- 3.10.1  Incomplete Type Declaration --
*************** package Sinfo is
*** 3021,3031 ****
        --  list of selector names in the record aggregate case, or a list of
        --  discrete choices in the array aggregate case or an N_Others_Choice
        --  node (which appears as a singleton list). Box_Present gives support
!       --  to Ada0Y (AI-287).
  
!       ------------------------------------
!       --  4.3.1  Commponent Choice List --
!       ------------------------------------
  
        --  COMPONENT_CHOICE_LIST ::=
        --    component_SELECTOR_NAME {| component_SELECTOR_NAME}
--- 3080,3090 ----
        --  list of selector names in the record aggregate case, or a list of
        --  discrete choices in the array aggregate case or an N_Others_Choice
        --  node (which appears as a singleton list). Box_Present gives support
!       --  to Ada 2005 (AI-287).
  
!       -----------------------------------
!       -- 4.3.1  Commponent Choice List --
!       -----------------------------------
  
        --  COMPONENT_CHOICE_LIST ::=
        --    component_SELECTOR_NAME {| component_SELECTOR_NAME}
*************** package Sinfo is
*** 3462,3468 ****
        --------------------
  
        --  ALLOCATOR ::=
!       --    new SUBTYPE_INDICATION | new QUALIFIED_EXPRESSION
  
        --  Sprint syntax (when storage pool present)
        --    new xxx (storage_pool = pool)
--- 3521,3527 ----
        --------------------
  
        --  ALLOCATOR ::=
!       --    new [NULL_EXCLUSION] SUBTYPE_INDICATION | new QUALIFIED_EXPRESSION
  
        --  Sprint syntax (when storage pool present)
        --    new xxx (storage_pool = pool)
*************** package Sinfo is
*** 3470,3475 ****
--- 3529,3535 ----
        --  N_Allocator
        --  Sloc points to NEW
        --  Expression (Node3) subtype indication or qualified expression
+       --  Null_Exclusion_Present (Flag9) (set to False if not present)
        --  Storage_Pool (Node1-Sem)
        --  Procedure_To_Call (Node4-Sem)
        --  No_Initialization (Flag13-Sem)
*************** package Sinfo is
*** 3966,3972 ****
        ----------------------------------
  
        --  PARAMETER_SPECIFICATION ::=
!       --    DEFINING_IDENTIFIER_LIST : MODE SUBTYPE_MARK
        --      [:= DEFAULT_EXPRESSION]
        --  | DEFINING_IDENTIFIER_LIST : ACCESS_DEFINITION
        --      [:= DEFAULT_EXPRESSION]
--- 4026,4032 ----
        ----------------------------------
  
        --  PARAMETER_SPECIFICATION ::=
!       --    DEFINING_IDENTIFIER_LIST : MODE [NULL_EXCLUSION] SUBTYPE_MARK
        --      [:= DEFAULT_EXPRESSION]
        --  | DEFINING_IDENTIFIER_LIST : ACCESS_DEFINITION
        --      [:= DEFAULT_EXPRESSION]
*************** package Sinfo is
*** 3984,3989 ****
--- 4044,4050 ----
        --  Defining_Identifier (Node1)
        --  In_Present (Flag15)
        --  Out_Present (Flag17)
+       --  Null_Exclusion_Present (Flag9) (set to False if not present)
        --  Parameter_Type (Node2) subtype mark or access definition
        --  Expression (Node3) (set to Empty if no default expression present)
        --  Do_Accessibility_Check (Flag13-Sem)
*************** package Sinfo is
*** 4284,4294 ****
  
        --  OBJECT_RENAMING_DECLARATION ::=
        --    DEFINING_IDENTIFIER : SUBTYPE_MARK renames object_NAME;
  
        --  N_Object_Renaming_Declaration
        --  Sloc points to first identifier
        --  Defining_Identifier (Node1)
!       --  Subtype_Mark (Node4)
        --  Name (Node2)
        --  Corresponding_Generic_Association (Node5-Sem)
  
--- 4345,4361 ----
  
        --  OBJECT_RENAMING_DECLARATION ::=
        --    DEFINING_IDENTIFIER : SUBTYPE_MARK renames object_NAME;
+       --  | DEFINING_IDENTIFIER : ACCESS_DEFINITION renames object_NAME;
+ 
+       --  Note: Access_Definition is an optional field that gives support to
+       --  Ada 2005 (AI-230). The parser generates nodes that have either the
+       --  Subtype_Indication field or else the Access_Definition field.
  
        --  N_Object_Renaming_Declaration
        --  Sloc points to first identifier
        --  Defining_Identifier (Node1)
!       --  Subtype_Mark (Node4) (set to Empty if not present)
!       --  Access_Definition (Node3) (set to Empty if not present)
        --  Name (Node2)
        --  Corresponding_Generic_Association (Node5-Sem)
  
*************** package Sinfo is
*** 4330,4335 ****
--- 4397,4404 ----
        --  Name (Node2)
        --  Parent_Spec (Node4-Sem)
        --  Corresponding_Spec (Node5-Sem)
+       --  Corresponding_Formal_Spec (Node3-Sem)
+       --  From_Default (Flag6-Sem)
  
        -----------------------------------------
        -- 8.5.5  Generic Renaming Declaration --
*************** package Sinfo is
*** 5091,5097 ****
        --  Last_Name (Flag6) (set to True if last name or only one name)
        --  Context_Installed (Flag13-Sem)
        --  Elaborate_Present (Flag4-Sem)
!       --  Elaborate_All_Present (Flag15-Sem)
        --  Implicit_With (Flag16-Sem)
        --  Limited_Present (Flag17)  set if LIMITED is present
        --  Limited_View_Installed (Flag18-Sem)
--- 5160,5167 ----
        --  Last_Name (Flag6) (set to True if last name or only one name)
        --  Context_Installed (Flag13-Sem)
        --  Elaborate_Present (Flag4-Sem)
!       --  Elaborate_All_Present (Flag14-Sem)
!       --  Private_Present (Flag15) set if with_clause has private keyword
        --  Implicit_With (Flag16-Sem)
        --  Limited_Present (Flag17)  set if LIMITED is present
        --  Limited_View_Installed (Flag18-Sem)
*************** package Sinfo is
*** 5099,5105 ****
        --  No_Entities_Ref_In_Spec (Flag8-Sem)
  
        --  Note: Limited_Present and Limited_View_Installed give support to
!       --        Ada0Y (AI-50217).
  
        ----------------------
        -- With_Type clause --
--- 5169,5176 ----
        --  No_Entities_Ref_In_Spec (Flag8-Sem)
  
        --  Note: Limited_Present and Limited_View_Installed give support to
!       --        Ada 2005 (AI-50217).
!       --  Similarly, Private_Present gives support to AI-50262.
  
        ----------------------
        -- With_Type clause --
*************** package Sinfo is
*** 5624,5632 ****
        -----------------------------------------
  
        --  FORMAL_SUBPROGRAM_DECLARATION ::=
        --    with SUBPROGRAM_SPECIFICATION [is SUBPROGRAM_DEFAULT];
  
!       --  N_Formal_Subprogram_Declaration
        --  Sloc points to WITH
        --  Specification (Node1)
        --  Default_Name (Node2) (set to Empty if no subprogram default)
--- 5695,5727 ----
        -----------------------------------------
  
        --  FORMAL_SUBPROGRAM_DECLARATION ::=
+       --    FORMAL_CONCRETE_SUBPROGRAM_DECLARATION
+       --  | FORMAL_ABSTRACT_SUBPROGRAM_DECLARATION
+ 
+       --------------------------------------------------
+       -- 12.6  Formal Concrete Subprogram Declaration --
+       --------------------------------------------------
+ 
+       --  FORMAL_CONCRETE_SUBPROGRAM_DECLARATION ::=
        --    with SUBPROGRAM_SPECIFICATION [is SUBPROGRAM_DEFAULT];
  
!       --  N_Formal_Concrete_Subprogram_Declaration
!       --  Sloc points to WITH
!       --  Specification (Node1)
!       --  Default_Name (Node2) (set to Empty if no subprogram default)
!       --  Box_Present (Flag15)
! 
!       --  Note: if no subprogram default is present, then Name is set
!       --  to Empty, and Box_Present is False.
! 
!       --------------------------------------------------
!       -- 12.6  Formal Abstract Subprogram Declaration --
!       --------------------------------------------------
! 
!       --  FORMAL_ABSTRACT_SUBPROGRAM_DECLARATION ::=
!       --    with SUBPROGRAM_SPECIFICATION is abstract [SUBPROGRAM_DEFAULT];
! 
!       --  N_Formal_Abstract_Subprogram_Declaration
        --  Sloc points to WITH
        --  Specification (Node1)
        --  Default_Name (Node2) (set to Empty if no subprogram default)
*************** package Sinfo is
*** 5642,5649 ****
        --  SUBPROGRAM_DEFAULT ::= DEFAULT_NAME | <>
  
        --  There is no separate node in the tree for a subprogram default.
!       --  Instead the parent (N_Formal_Subprogram_Declaration) node contains
!       --  the default name or box indication, as needed.
  
        ------------------------
        -- 12.6  Default Name --
--- 5737,5745 ----
        --  SUBPROGRAM_DEFAULT ::= DEFAULT_NAME | <>
  
        --  There is no separate node in the tree for a subprogram default.
!       --  Instead the parent (N_Formal_Concrete_Subprogram_Declaration
!       --  or N_Formal_Abstract_Subprogram_Declaration) node contains the
!       --  default name or box indication, as needed.
  
        ------------------------
        -- 12.6  Default Name --
*************** package Sinfo is
*** 6665,6670 ****
--- 6761,6768 ----
        N_Exception_Declaration,
        N_Exception_Handler,
        N_Floating_Point_Definition,
+       N_Formal_Abstract_Subprogram_Declaration,
+       N_Formal_Concrete_Subprogram_Declaration,
        N_Formal_Decimal_Fixed_Point_Definition,
        N_Formal_Derived_Type_Definition,
        N_Formal_Discrete_Type_Definition,
*************** package Sinfo is
*** 6674,6680 ****
        N_Formal_Package_Declaration,
        N_Formal_Private_Type_Definition,
        N_Formal_Signed_Integer_Type_Definition,
-       N_Formal_Subprogram_Declaration,
        N_Generic_Association,
        N_Handled_Sequence_Of_Statements,
        N_Index_Or_Discriminant_Constraint,
--- 6772,6777 ----
*************** package Sinfo is
*** 6741,6746 ****
--- 6838,6847 ----
       N_Defining_Character_Literal ..
       N_Defining_Operator_Symbol;
  
+    subtype N_Formal_Subprogram_Declaration is Node_Kind range
+      N_Formal_Abstract_Subprogram_Declaration ..
+      N_Formal_Concrete_Subprogram_Declaration;
+ 
     subtype N_Generic_Declaration is Node_Kind range
       N_Generic_Package_Declaration ..
       N_Generic_Subprogram_Declaration;
*************** package Sinfo is
*** 6877,6882 ****
--- 6978,6989 ----
     function Accept_Statement
       (N : Node_Id) return Node_Id;    -- Node2
  
+    function Access_Definition
+      (N : Node_Id) return Node_Id;    -- Node3
+ 
+    function Access_To_Subprogram_Definition
+      (N : Node_Id) return Node_Id;    -- Node3
+ 
     function Access_Types_To_Process
       (N : Node_Id) return Elist_Id;   -- Elist2
  
*************** package Sinfo is
*** 6944,6950 ****
       (N : Node_Id) return Boolean;    -- Flag15
  
     function Char_Literal_Value
!      (N : Node_Id) return Char_Code;  -- Char_Code2
  
     function Chars
       (N : Node_Id) return Name_Id;    -- Name1
--- 7051,7057 ----
       (N : Node_Id) return Boolean;    -- Flag15
  
     function Char_Literal_Value
!      (N : Node_Id) return Uint;       -- Uint2
  
     function Chars
       (N : Node_Id) return Name_Id;    -- Name1
*************** package Sinfo is
*** 7012,7017 ****
--- 7119,7127 ----
     function Corresponding_Body
       (N : Node_Id) return Node_Id;    -- Node5
  
+    function Corresponding_Formal_Spec
+      (N : Node_Id) return Node_Id;    -- Node3
+ 
     function Corresponding_Generic_Association
       (N : Node_Id) return Node_Id;    -- Node5
  
*************** package Sinfo is
*** 7106,7112 ****
       (N : Node_Id) return Boolean;    -- Flag13
  
     function Elaborate_All_Present
!      (N : Node_Id) return Boolean;    -- Flag15
  
     function Elaborate_Present
       (N : Node_Id) return Boolean;    -- Flag4
--- 7216,7222 ----
       (N : Node_Id) return Boolean;    -- Flag13
  
     function Elaborate_All_Present
!      (N : Node_Id) return Boolean;    -- Flag14
  
     function Elaborate_Present
       (N : Node_Id) return Boolean;    -- Flag4
*************** package Sinfo is
*** 7213,7218 ****
--- 7323,7331 ----
     function From_At_Mod
       (N : Node_Id) return Boolean;    -- Flag4
  
+    function From_Default
+      (N : Node_Id) return Boolean;    -- Flag6
+ 
     function Generic_Associations
       (N : Node_Id) return List_Id;    -- List3
  
*************** package Sinfo is
*** 7417,7422 ****
--- 7530,7538 ----
     function Null_Present
       (N : Node_Id) return Boolean;    -- Flag13
  
+    function Null_Exclusion_Present
+      (N : Node_Id) return Boolean;    -- Flag9
+ 
     function Null_Record_Present
       (N : Node_Id) return Boolean;    -- Flag17
  
*************** package Sinfo is
*** 7660,7665 ****
--- 7776,7787 ----
     procedure Set_Accept_Statement
       (N : Node_Id; Val : Node_Id);            -- Node2
  
+    procedure Set_Access_Definition
+      (N : Node_Id; Val : Node_Id);            -- Node3
+ 
+    procedure Set_Access_To_Subprogram_Definition
+      (N : Node_Id; Val : Node_Id);            -- Node3
+ 
     procedure Set_Access_Types_To_Process
       (N : Node_Id; Val : Elist_Id);           -- Elist2
  
*************** package Sinfo is
*** 7727,7733 ****
       (N : Node_Id; Val : Boolean := True);    -- Flag5
  
     procedure Set_Char_Literal_Value
!      (N : Node_Id; Val : Char_Code);          -- Char_Code2
  
     procedure Set_Chars
       (N : Node_Id; Val : Name_Id);            -- Name1
--- 7849,7855 ----
       (N : Node_Id; Val : Boolean := True);    -- Flag5
  
     procedure Set_Char_Literal_Value
!      (N : Node_Id; Val : Uint);               -- Uint2
  
     procedure Set_Chars
       (N : Node_Id; Val : Name_Id);            -- Name1
*************** package Sinfo is
*** 7795,7800 ****
--- 7917,7925 ----
     procedure Set_Corresponding_Body
       (N : Node_Id; Val : Node_Id);            -- Node5
  
+    procedure Set_Corresponding_Formal_Spec
+      (N : Node_Id; Val : Node_Id);            -- Node3
+ 
     procedure Set_Corresponding_Generic_Association
       (N : Node_Id; Val : Node_Id);            -- Node5
  
*************** package Sinfo is
*** 7889,7895 ****
       (N : Node_Id; Val : Boolean := True);    -- Flag13
  
     procedure Set_Elaborate_All_Present
!      (N : Node_Id; Val : Boolean := True);    -- Flag15
  
     procedure Set_Elaborate_Present
       (N : Node_Id; Val : Boolean := True);    -- Flag4
--- 8014,8020 ----
       (N : Node_Id; Val : Boolean := True);    -- Flag13
  
     procedure Set_Elaborate_All_Present
!      (N : Node_Id; Val : Boolean := True);    -- Flag14
  
     procedure Set_Elaborate_Present
       (N : Node_Id; Val : Boolean := True);    -- Flag4
*************** package Sinfo is
*** 7993,7998 ****
--- 8118,8126 ----
     procedure Set_From_At_Mod
       (N : Node_Id; Val : Boolean := True);    -- Flag4
  
+    procedure Set_From_Default
+      (N : Node_Id; Val : Boolean := True);    -- Flag6
+ 
     procedure Set_Generic_Associations
       (N : Node_Id; Val : List_Id);            -- List3
  
*************** package Sinfo is
*** 8197,8202 ****
--- 8325,8333 ----
     procedure Set_Null_Present
       (N : Node_Id; Val : Boolean := True);    -- Flag13
  
+    procedure Set_Null_Exclusion_Present
+      (N : Node_Id; Val : Boolean := True);    -- Flag9
+ 
     procedure Set_Null_Record_Present
       (N : Node_Id; Val : Boolean := True);    -- Flag17
  
*************** package Sinfo is
*** 8446,8451 ****
--- 8577,8584 ----
     pragma Inline (Abstract_Present);
     pragma Inline (Accept_Handler_Records);
     pragma Inline (Accept_Statement);
+    pragma Inline (Access_Definition);
+    pragma Inline (Access_To_Subprogram_Definition);
     pragma Inline (Access_Types_To_Process);
     pragma Inline (Actions);
     pragma Inline (Activation_Chain_Entity);
*************** package Sinfo is
*** 8491,8496 ****
--- 8624,8630 ----
     pragma Inline (Controlling_Argument);
     pragma Inline (Conversion_OK);
     pragma Inline (Corresponding_Body);
+    pragma Inline (Corresponding_Formal_Spec);
     pragma Inline (Corresponding_Generic_Association);
     pragma Inline (Corresponding_Integer_Value);
     pragma Inline (Corresponding_Spec);
*************** package Sinfo is
*** 8558,8563 ****
--- 8692,8698 ----
     pragma Inline (Formal_Type_Definition);
     pragma Inline (Forwards_OK);
     pragma Inline (From_At_Mod);
+    pragma Inline (From_Default);
     pragma Inline (Generic_Associations);
     pragma Inline (Generic_Formal_Declarations);
     pragma Inline (Generic_Parent);
*************** package Sinfo is
*** 8626,8631 ****
--- 8761,8767 ----
     pragma Inline (No_Initialization);
     pragma Inline (No_Truncation);
     pragma Inline (Null_Present);
+    pragma Inline (Null_Exclusion_Present);
     pragma Inline (Null_Record_Present);
     pragma Inline (Object_Definition);
     pragma Inline (OK_For_Stream);
*************** package Sinfo is
*** 8704,8709 ****
--- 8840,8847 ----
     pragma Inline (Set_Abstract_Present);
     pragma Inline (Set_Accept_Handler_Records);
     pragma Inline (Set_Accept_Statement);
+    pragma Inline (Set_Access_Definition);
+    pragma Inline (Set_Access_To_Subprogram_Definition);
     pragma Inline (Set_Access_Types_To_Process);
     pragma Inline (Set_Actions);
     pragma Inline (Set_Activation_Chain_Entity);
*************** package Sinfo is
*** 8749,8754 ****
--- 8887,8893 ----
     pragma Inline (Set_Controlling_Argument);
     pragma Inline (Set_Conversion_OK);
     pragma Inline (Set_Corresponding_Body);
+    pragma Inline (Set_Corresponding_Formal_Spec);
     pragma Inline (Set_Corresponding_Generic_Association);
     pragma Inline (Set_Corresponding_Integer_Value);
     pragma Inline (Set_Corresponding_Spec);
*************** package Sinfo is
*** 8815,8820 ****
--- 8954,8960 ----
     pragma Inline (Set_Formal_Type_Definition);
     pragma Inline (Set_Forwards_OK);
     pragma Inline (Set_From_At_Mod);
+    pragma Inline (Set_From_Default);
     pragma Inline (Set_Generic_Associations);
     pragma Inline (Set_Generic_Formal_Declarations);
     pragma Inline (Set_Generic_Parent);
*************** package Sinfo is
*** 8882,8887 ****
--- 9022,9028 ----
     pragma Inline (Set_No_Initialization);
     pragma Inline (Set_No_Truncation);
     pragma Inline (Set_Null_Present);
+    pragma Inline (Set_Null_Exclusion_Present);
     pragma Inline (Set_Null_Record_Present);
     pragma Inline (Set_Object_Definition);
     pragma Inline (Set_OK_For_Stream);
diff -Nrcpad gcc-3.4.3/gcc/ada/sinput-c.adb gcc-4.0.0/gcc/ada/sinput-c.adb
*** gcc-3.4.3/gcc/ada/sinput-c.adb	Tue Oct 21 13:42:22 2003
--- gcc-4.0.0/gcc/ada/sinput-c.adb	Thu Apr  1 10:04:40 2004
***************
*** 2,12 ****
  --                                                                          --
  --                         GNAT COMPILER COMPONENTS                         --
  --                                                                          --
! --                             S I N P U T . P                              --
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 2,12 ----
  --                                                                          --
  --                         GNAT COMPILER COMPONENTS                         --
  --                                                                          --
! --                             S I N P U T . C                              --
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Sinput.C is
*** 103,109 ****
           type Actual_Source_Ptr is access Actual_Source_Buffer;
           --  This is the pointer type for the physical buffer allocated
  
!          Actual_Ptr : Actual_Source_Ptr := new Actual_Source_Buffer;
           --  And this is the actual physical buffer
  
        begin
--- 103,109 ----
           type Actual_Source_Ptr is access Actual_Source_Buffer;
           --  This is the pointer type for the physical buffer allocated
  
!          Actual_Ptr : constant Actual_Source_Ptr := new Actual_Source_Buffer;
           --  And this is the actual physical buffer
  
        begin
*************** package body Sinput.C is
*** 129,137 ****
--- 129,143 ----
           declare
              pragma Suppress (All_Checks);
  
+             pragma Warnings (Off);
+             --  The following unchecked conversion is aliased safe, since it
+             --  is not used to create improperly aliased pointer values.
+ 
              function To_Source_Buffer_Ptr is new
                Ada.Unchecked_Conversion (Address, Source_Buffer_Ptr);
  
+             pragma Warnings (On);
+ 
           begin
              Src := To_Source_Buffer_Ptr (Actual_Ptr (0)'Address);
           end;
diff -Nrcpad gcc-3.4.3/gcc/ada/sinput-c.ads gcc-4.0.0/gcc/ada/sinput-c.ads
*** gcc-3.4.3/gcc/ada/sinput-c.ads	Tue Oct 21 13:42:22 2003
--- gcc-4.0.0/gcc/ada/sinput-c.ads	Mon Feb 23 11:17:12 2004
***************
*** 2,12 ****
  --                                                                          --
  --                         GNAT COMPILER COMPONENTS                         --
  --                                                                          --
! --                             S I N P U T . P                              --
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 2,12 ----
  --                                                                          --
  --                         GNAT COMPILER COMPONENTS                         --
  --                                                                          --
! --                             S I N P U T . C                              --
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
diff -Nrcpad gcc-3.4.3/gcc/ada/sinput-l.adb gcc-4.0.0/gcc/ada/sinput-l.adb
*** gcc-3.4.3/gcc/ada/sinput-l.adb	Tue Oct 21 13:42:22 2003
--- gcc-4.0.0/gcc/ada/sinput-l.adb	Mon Mar 29 12:03:22 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Debug;    use Debug;
*** 30,36 ****
  with Einfo;    use Einfo;
  with Errout;   use Errout;
  with Namet;    use Namet;
! with Opt;
  with Osint;    use Osint;
  with Output;   use Output;
  with Prep;     use Prep;
--- 30,36 ----
  with Einfo;    use Einfo;
  with Errout;   use Errout;
  with Namet;    use Namet;
! with Opt;      use Opt;
  with Osint;    use Osint;
  with Output;   use Output;
  with Prep;     use Prep;
*************** package body Sinput.L is
*** 78,86 ****
     --  Used to initialize the preprocessor.
  
     function Load_File
!      (N    : File_Name_Type;
!       T    : Osint.File_Type)
!       return Source_File_Index;
     --  Load a source file, a configuration pragmas file or a definition file
     --  Coding also allows preprocessing file, but not a library file ???
  
--- 78,85 ----
     --  Used to initialize the preprocessor.
  
     function Load_File
!      (N : File_Name_Type;
!       T : Osint.File_Type) return Source_File_Index;
     --  Load a source file, a configuration pragmas file or a definition file
     --  Coding also allows preprocessing file, but not a library file ???
  
*************** package body Sinput.L is
*** 244,252 ****
--- 243,257 ----
        declare
           pragma Suppress (All_Checks);
  
+          pragma Warnings (Off);
+          --  This unchecked conversion is aliasing safe, since it is never
+          --  used to create improperly aliased pointer values.
+ 
           function To_Source_Buffer_Ptr is new
             Unchecked_Conversion (Address, Source_Buffer_Ptr);
  
+          pragma Warnings (On);
+ 
        begin
           Source_File.Table (Xnew).Source_Text :=
             To_Source_Buffer_Ptr
*************** package body Sinput.L is
*** 259,266 ****
     ----------------------
  
     function Load_Config_File
!      (N    : File_Name_Type)
!       return Source_File_Index
     is
     begin
        return Load_File (N, Osint.Config);
--- 264,270 ----
     ----------------------
  
     function Load_Config_File
!      (N : File_Name_Type) return Source_File_Index
     is
     begin
        return Load_File (N, Osint.Config);
*************** package body Sinput.L is
*** 271,278 ****
     --------------------------
  
     function Load_Definition_File
!      (N    : File_Name_Type)
!       return Source_File_Index
     is
     begin
        return Load_File (N, Osint.Definition);
--- 275,281 ----
     --------------------------
  
     function Load_Definition_File
!      (N : File_Name_Type) return Source_File_Index
     is
     begin
        return Load_File (N, Osint.Definition);
*************** package body Sinput.L is
*** 283,291 ****
     ---------------
  
     function Load_File
!      (N :    File_Name_Type;
!       T :    Osint.File_Type)
!       return Source_File_Index
     is
        Src : Source_Buffer_Ptr;
        X   : Source_File_Index;
--- 286,293 ----
     ---------------
  
     function Load_File
!      (N : File_Name_Type;
!       T : Osint.File_Type) return Source_File_Index
     is
        Src : Source_Buffer_Ptr;
        X   : Source_File_Index;
*************** package body Sinput.L is
*** 295,305 ****
        Preprocessing_Needed : Boolean := False;
  
     begin
!       for J in 1 .. Source_File.Last loop
!          if Source_File.Table (J).File_Name = N then
!             return J;
!          end if;
!       end loop;
  
        --  Here we must build a new entry in the file table
  
--- 297,317 ----
        Preprocessing_Needed : Boolean := False;
  
     begin
!       --  If already there, don't need to reload file. An exception occurs
!       --  in multiple unit per file mode. It would be nice in this case to
!       --  share the same source file for each unit, but this leads to many
!       --  difficulties with assumptions (e.g. in the body of lib), that a
!       --  unit can be found by locating its source file index. Since we do
!       --  not expect much use of this mode, it's no big deal to waste a bit
!       --  of space and time by reading and storing the source multiple times.
! 
!       if Multiple_Unit_Index = 0 then
!          for J in 1 .. Source_File.Last loop
!             if Source_File.Table (J).File_Name = N then
!                return J;
!             end if;
!          end loop;
!       end if;
  
        --  Here we must build a new entry in the file table
  
*************** package body Sinput.L is
*** 539,547 ****
--- 551,566 ----
                       declare
                          pragma Suppress (All_Checks);
  
+                         pragma Warnings (Off);
+                         --  This unchecked conversion is aliasing safe, since
+                         --  it is never used to create improperly aliased
+                         --  pointer values.
+ 
                          function To_Source_Buffer_Ptr is new
                            Unchecked_Conversion (Address, Source_Buffer_Ptr);
  
+                         pragma Warnings (On);
+ 
                       begin
                          Src := To_Source_Buffer_Ptr (Actual_Ptr (0)'Address);
  
*************** package body Sinput.L is
*** 571,578 ****
     ----------------------------------
  
     function Load_Preprocessing_Data_File
!      (N    : File_Name_Type)
!       return Source_File_Index
     is
     begin
        return Load_File (N, Osint.Preprocessing_Data);
--- 590,596 ----
     ----------------------------------
  
     function Load_Preprocessing_Data_File
!      (N : File_Name_Type) return Source_File_Index
     is
     begin
        return Load_File (N, Osint.Preprocessing_Data);
*************** package body Sinput.L is
*** 583,590 ****
     ----------------------
  
     function Load_Source_File
!      (N    : File_Name_Type)
!       return Source_File_Index
     is
     begin
        return Load_File (N, Osint.Source);
--- 601,607 ----
     ----------------------
  
     function Load_Source_File
!      (N : File_Name_Type) return Source_File_Index
     is
     begin
        return Load_File (N, Osint.Source);
diff -Nrcpad gcc-3.4.3/gcc/ada/sinput-l.ads gcc-4.0.0/gcc/ada/sinput-l.ads
*** gcc-3.4.3/gcc/ada/sinput-l.ads	Tue Oct 21 13:42:22 2003
--- gcc-4.0.0/gcc/ada/sinput-l.ads	Tue Jul  6 13:57:32 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Types; use Types;
*** 34,42 ****
  
  package Sinput.L is
  
!    -------------------------------------------
!    --  Subprograms for Loading Source Files --
!    -------------------------------------------
  
     function Load_Source_File (N : File_Name_Type) return Source_File_Index;
     --  Given a source file name, returns the index of the corresponding entry
--- 34,42 ----
  
  package Sinput.L is
  
!    ------------------------------------------
!    -- Subprograms for Loading Source Files --
!    ------------------------------------------
  
     function Load_Source_File (N : File_Name_Type) return Source_File_Index;
     --  Given a source file name, returns the index of the corresponding entry
*************** package Sinput.L is
*** 54,67 ****
     --  The file is never preprocessed.
  
     function Load_Definition_File
!      (N    : File_Name_Type)
!       return Source_File_Index;
!    --  Needs comments ???
  
     function Load_Preprocessing_Data_File
!      (N    : File_Name_Type)
!       return Source_File_Index;
!    --  Similar to Load_Source_File, except that the file is never preprocessed.
  
     procedure Complete_Source_File_Entry;
     --  Called on completing the parsing of a source file. This call completes
--- 54,67 ----
     --  The file is never preprocessed.
  
     function Load_Definition_File
!      (N : File_Name_Type) return Source_File_Index;
!    --  Loads preprocessing definition file. Similar to Load_Source_File
!    --  except that this file is not itself preprocessed.
  
     function Load_Preprocessing_Data_File
!      (N : File_Name_Type) return Source_File_Index;
!    --  Loads preprocessing data file. Similar to Load_Source_File except
!    --  that this file is not itself preprocessed.
  
     procedure Complete_Source_File_Entry;
     --  Called on completing the parsing of a source file. This call completes
diff -Nrcpad gcc-3.4.3/gcc/ada/sinput.adb gcc-4.0.0/gcc/ada/sinput.adb
*** gcc-3.4.3/gcc/ada/sinput.adb	Mon Nov 24 14:27:57 2003
--- gcc-4.0.0/gcc/ada/sinput.adb	Thu Feb 10 13:50:48 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 34,45 ****
  pragma Style_Checks (All_Checks);
  --  Subprograms not all in alpha order
  
! with Debug;   use Debug;
! with Namet;   use Namet;
! with Opt;     use Opt;
! with Output;  use Output;
! with Tree_IO; use Tree_IO;
! with System;  use System;
  
  with System.Memory;
  
--- 34,46 ----
  pragma Style_Checks (All_Checks);
  --  Subprograms not all in alpha order
  
! with Debug;    use Debug;
! with Namet;    use Namet;
! with Opt;      use Opt;
! with Output;   use Output;
! with Tree_IO;  use Tree_IO;
! with System;   use System;
! with Widechar; use Widechar;
  
  with System.Memory;
  
*************** package body Sinput is
*** 56,61 ****
--- 57,66 ----
     --  Routines to support conversion between types Lines_Table_Ptr,
     --  Logical_Lines_Table_Ptr and System.Address.
  
+    pragma Warnings (Off);
+    --  These unchecked conversions are aliasing safe, since they are never
+    --  used to construct improperly aliased pointer values.
+ 
     function To_Address is
       new Unchecked_Conversion (Lines_Table_Ptr, Address);
  
*************** package body Sinput is
*** 68,73 ****
--- 73,80 ----
     function To_Pointer is
       new Unchecked_Conversion (Address, Logical_Lines_Table_Ptr);
  
+    pragma Warnings (On);
+ 
     ---------------------------
     -- Add_Line_Tables_Entry --
     ---------------------------
*************** package body Sinput is
*** 638,690 ****
     -- Skip_Line_Terminators --
     ---------------------------
  
-    --  There are two distinct concepts of line terminator in GNAT
- 
-    --    A logical line terminator is what corresponds to the "end of a line"
-    --    as described in RM 2.2 (13). Any of the characters FF, LF, CR or VT
-    --    acts as an end of logical line in this sense, and it is essentially
-    --    irrelevant whether one or more appears in sequence (since if a
-    --    sequence of such characters is regarded as separate ends of line,
-    --    then the intervening logical lines are null in any case).
- 
-    --    A physical line terminator is a sequence of format effectors that
-    --    is treated as ending a physical line. Physical lines have no Ada
-    --    semantic significance, but they are significant for error reporting
-    --    purposes, since errors are identified by line and column location.
- 
-    --  In GNAT, a physical line is ended by any of the sequences LF, CR/LF,
-    --  CR or LF/CR. LF is used in typical Unix systems, CR/LF in DOS systems,
-    --  and CR alone in System 7. We don't know of any system using LF/CR, but
-    --  it seems reasonable to include this case for consistency. In addition,
-    --  we recognize any of these sequences in any of the operating systems,
-    --  for better behavior in treating foreign files (e.g. a Unix file with
-    --  LF terminators transferred to a DOS system).
- 
     procedure Skip_Line_Terminators
       (P        : in out Source_Ptr;
        Physical : out Boolean)
     is
!    begin
!       pragma Assert (Source (P) in Line_Terminator);
  
!       if Source (P) = CR then
           if Source (P + 1) = LF then
              P := P + 2;
           else
              P := P + 1;
           end if;
  
!       elsif Source (P) = LF then
!          if Source (P + 1) = CR then
              P := P + 2;
           else
              P := P + 1;
           end if;
  
!       else -- Source (P) = FF or else Source (P) = VT
           P := P + 1;
           Physical := False;
           return;
        end if;
  
        --  Fall through in the physical line terminator case. First deal with
--- 645,680 ----
     -- Skip_Line_Terminators --
     ---------------------------
  
     procedure Skip_Line_Terminators
       (P        : in out Source_Ptr;
        Physical : out Boolean)
     is
!       Chr : constant Character := Source (P);
  
!    begin
!       if  Chr = CR then
           if Source (P + 1) = LF then
              P := P + 2;
           else
              P := P + 1;
           end if;
  
!       elsif Chr = LF then
!          if Source (P) = CR then
              P := P + 2;
           else
              P := P + 1;
           end if;
  
!       elsif Chr = FF or else Chr = VT then
           P := P + 1;
           Physical := False;
           return;
+ 
+          --  Otherwise we have a wide character
+ 
+       else
+          Skip_Wide (Source, P);
        end if;
  
        --  Fall through in the physical line terminator case. First deal with
*************** package body Sinput is
*** 760,768 ****
--- 750,764 ----
                 procedure Free_Ptr is new Unchecked_Deallocation
                   (Big_Source_Buffer, Source_Buffer_Ptr);
  
+                pragma Warnings (Off);
+                --  This unchecked conversion is aliasing safe, since it is not
+                --  used to create improperly aliased pointer values.
+ 
                 function To_Source_Buffer_Ptr is new
                   Unchecked_Conversion (Address, Source_Buffer_Ptr);
  
+                pragma Warnings (On);
+ 
                 Tmp1 : Source_Buffer_Ptr;
  
              begin
*************** package body Sinput is
*** 841,849 ****
--- 837,851 ----
                    declare
                       pragma Suppress (All_Checks);
  
+                      pragma Warnings (Off);
+                      --  This unchecked conversion is aliasing safe since it
+                      --  not used to create improperly aliased pointer values.
+ 
                       function To_Source_Buffer_Ptr is new
                         Unchecked_Conversion (Address, Source_Buffer_Ptr);
  
+                      pragma Warnings (On);
+ 
                    begin
                       S.Source_Text :=
                         To_Source_Buffer_Ptr
*************** package body Sinput is
*** 881,889 ****
--- 883,897 ----
  
                    pragma Suppress (All_Checks);
  
+                   pragma Warnings (Off);
+                   --  This unchecked conversion is aliasing safe, since it is
+                   --  never used to create improperly aliased pointer values.
+ 
                    function To_Source_Buffer_Ptr is new
                      Unchecked_Conversion (Address, Source_Buffer_Ptr);
  
+                   pragma Warnings (On);
+ 
                 begin
                    T := new B;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/sinput.ads gcc-4.0.0/gcc/ada/sinput.ads
*** gcc-3.4.3/gcc/ada/sinput.ads	Tue Oct 21 13:42:22 2003
--- gcc-4.0.0/gcc/ada/sinput.ads	Thu Feb 10 13:50:48 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 37,44 ****
  
  --  General Note: throughout the compiler, we use the term line or source
  --  line to refer to a physical line in the source, terminated by the end of
! --  physical line sequence. See Skip_Line_Terminators procedure for a full
! --  description of the difference between logical and physical lines.
  
  with Alloc;
  with Casing; use Casing;
--- 37,68 ----
  
  --  General Note: throughout the compiler, we use the term line or source
  --  line to refer to a physical line in the source, terminated by the end of
! --  physical line sequence.
! 
! --  There are two distinct concepts of line terminator in GNAT
! 
! --    A logical line terminator is what corresponds to the "end of a line" as
! --    described in RM 2.2 (13). Any of the characters FF, LF, CR or VT or any
! --    wide character that is a Line or Paragraph Separator acts as an end of
! --    logical line in this sense, and it is essentially irrelevant whether one
! --    or more appears in sequence (since if sequence of such characters is
! --    regarded as separate ends of line, then the intervening logical lines
! --    are null in any case).
! 
! --    A physical line terminator is a sequence of format effectors that is
! --    treated as ending a physical line. Physical lines have no Ada semantic
! --    significance, but they are significant for error reporting purposes,
! --    since errors are identified by line and column location.
! 
! --  In GNAT, a physical line is ended by any of the sequences LF, CR/LF, CR or
! --  LF/CR. LF is used in typical Unix systems, CR/LF in DOS systems, and CR
! --  alone in System 7. We don't know of any system using LF/CR, but it seems
! --  reasonable to include this case for consistency. In addition, we recognize
! --  any of these sequences in any of the operating systems, for better
! --  behavior in treating foreign files (e.g. a Unix file with LF terminators
! --  transferred to a DOS system). Finally, wide character codes in cagtegories
! --  Separator, Line and Separator, Paragraph are considered to be physical
! --  line terminators.
  
  with Alloc;
  with Casing; use Casing;
*************** package Sinput is
*** 293,299 ****
     procedure Lock;
     --  Lock internal tables
  
!    Main_Source_File : Source_File_Index;
     --  This is set to the source file index of the main unit
  
     -----------------------------
--- 317,323 ----
     procedure Lock;
     --  Lock internal tables
  
!    Main_Source_File : Source_File_Index := No_Source_File;
     --  This is set to the source file index of the main unit
  
     -----------------------------
*************** package Sinput is
*** 445,452 ****
     --  represent the standard 1,9,17.. spacing pattern.
  
     function Get_Logical_Line_Number
!      (P    : Source_Ptr)
!       return Logical_Line_Number;
     --  The line number of the specified source position is obtained by
     --  doing a binary search on the source positions in the lines table
     --  for the unit containing the given source position. The returned
--- 469,475 ----
     --  represent the standard 1,9,17.. spacing pattern.
  
     function Get_Logical_Line_Number
!      (P : Source_Ptr) return Logical_Line_Number;
     --  The line number of the specified source position is obtained by
     --  doing a binary search on the source positions in the lines table
     --  for the unit containing the given source position. The returned
*************** package Sinput is
*** 457,464 ****
     --  the same as the physical line number.
  
     function Get_Physical_Line_Number
!      (P    : Source_Ptr)
!       return Physical_Line_Number;
     --  The line number of the specified source position is obtained by
     --  doing a binary search on the source positions in the lines table
     --  for the unit containing the given source position. The returned
--- 480,486 ----
     --  the same as the physical line number.
  
     function Get_Physical_Line_Number
!      (P : Source_Ptr) return Physical_Line_Number;
     --  The line number of the specified source position is obtained by
     --  doing a binary search on the source positions in the lines table
     --  for the unit containing the given source position. The returned
*************** package Sinput is
*** 478,486 ****
     --  given source location.
  
     function Line_Start
!      (L    : Physical_Line_Number;
!       S    : Source_File_Index)
!       return Source_Ptr;
     --  Finds the source position of the start of the given line in the
     --  given source file, using a physical line number to identify the line.
  
--- 500,507 ----
     --  given source location.
  
     function Line_Start
!      (L : Physical_Line_Number;
!       S : Source_File_Index) return Source_Ptr;
     --  Finds the source position of the start of the given line in the
     --  given source file, using a physical line number to identify the line.
  
*************** package Sinput is
*** 525,532 ****
  
     function Physical_To_Logical
       (Line : Physical_Line_Number;
!       S    : Source_File_Index)
!       return Logical_Line_Number;
     --  Given a physical line number in source file whose source index is S,
     --  return the corresponding logical line number. If the physical line
     --  number is one containing a Source_Reference pragma, the result will
--- 546,552 ----
  
     function Physical_To_Logical
       (Line : Physical_Line_Number;
!       S    : Source_File_Index) return Logical_Line_Number;
     --  Given a physical line number in source file whose source index is S,
     --  return the corresponding logical line number. If the physical line
     --  number is one containing a Source_Reference pragma, the result will
*************** package Sinput is
*** 535,550 ****
     procedure Skip_Line_Terminators
       (P        : in out Source_Ptr;
        Physical : out Boolean);
!    --  On entry, Source (P) points to the line terminator character that
!    --  terminates a line. The result set in P is the location of the first
!    --  character of the following line (after skipping the sequence of line
!    --  terminator characters terminating the current line). In addition, if
!    --  the terminator sequence ends a physical line (the definition of what
!    --  constitutes a physical line is embodied in the implementation of this
!    --  function), and it is the first time this sequence is encountered, then
!    --  an entry is made in the lines table to record the location for further
!    --  use by functions such as Get_Line_Number. Physical is set to True if
!    --  the line terminator was the end of a physical line.
  
     function Source_Offset (S : Source_Ptr) return Nat;
     --  Returns the zero-origin offset of the given source location from the
--- 555,583 ----
     procedure Skip_Line_Terminators
       (P        : in out Source_Ptr;
        Physical : out Boolean);
!    --  On entry, P points to a line terminator that has been encountered,
!    --  which is one of FF,LF,VT,CR or a wide character sequence whose value is
!    --  in category Separator,Line or Separator,Paragraph. The purpose of this
!    --  P points just past the character that was scanned. The purpose of this
!    --  routine is to distinguish physical and logical line endings. A physical
!    --  line ending is one of:
!    --
!    --     CR on its own (MAC System 7)
!    --     LF on its own (Unix and unix-like systems)
!    --     CR/LF (DOS, Windows)
!    --     LF/CR (not used, but recognized in any case)
!    --     Wide character in Separator,Line or Separator,Paragraph category
!    --
!    --  A logical line ending (that is not a physical line ending) is one of:
!    --
!    --     VT on its own
!    --     FF on its own
!    --
!    --  On return, P is bumped past the line ending sequence (one of the above
!    --  seven possibilities). Physical is set to True to indicate that a
!    --  physical end of line was encountered, in which case this routine also
!    --  makes sure that the lines table for the current source file has an
!    --  appropriate entry for the start of the new physical line.
  
     function Source_Offset (S : Source_Ptr) return Nat;
     --  Returns the zero-origin offset of the given source location from the
*************** package Sinput is
*** 568,578 ****
     procedure Write_Time_Stamp (S : Source_File_Index);
     --  Writes time stamp of specified file in YY-MM-DD HH:MM.SS format
  
-    procedure Tree_Write;
-    --  Writes out internal tables to current tree file using Tree_Write
- 
     procedure Tree_Read;
!    --  Initializes internal tables from current tree file using Tree_Read
  
  private
     pragma Inline (File_Name);
--- 601,613 ----
     procedure Write_Time_Stamp (S : Source_File_Index);
     --  Writes time stamp of specified file in YY-MM-DD HH:MM.SS format
  
     procedure Tree_Read;
!    --  Initializes internal tables from current tree file using the relevant
!    --  Table.Tree_Read routines.
! 
!    procedure Tree_Write;
!    --  Writes out internal tables to current tree file using the relevant
!    --  Table.Tree_Write routines.
  
  private
     pragma Inline (File_Name);
diff -Nrcpad gcc-3.4.3/gcc/ada/snames.adb gcc-4.0.0/gcc/ada/snames.adb
*** gcc-3.4.3/gcc/ada/snames.adb	Thu Nov 20 09:54:02 2003
--- gcc-4.0.0/gcc/ada/snames.adb	Thu Feb 10 13:50:20 2005
***************
*** 1,996 ****
! ------------------------------------------------------------------------------
! --                                                                          --
! --                         GNAT COMPILER COMPONENTS                         --
! --                                                                          --
! --                               S N A M E S                                --
! --                                                                          --
! --                                 B o d y                                  --
! --                                                                          --
! --          Copyright (C) 1992-2003, Free Software Foundation, Inc.         --
! --                                                                          --
! -- GNAT is free software;  you can  redistribute it  and/or modify it under --
! -- terms of the  GNU General Public License as published  by the Free Soft- --
! -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
! -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
! -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
! -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
! -- for  more details.  You should have  received  a copy of the GNU General --
! -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
! -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
! -- MA 02111-1307, USA.                                                      --
! --                                                                          --
! -- As a special exception,  if other files  instantiate  generics from this --
! -- unit, or you link  this unit with other files  to produce an executable, --
! -- this  unit  does not  by itself cause  the resulting  executable  to  be --
! -- covered  by the  GNU  General  Public  License.  This exception does not --
! -- however invalidate  any other reasons why  the executable file  might be --
! -- covered by the  GNU Public License.                                      --
! --                                                                          --
! -- GNAT was originally developed  by the GNAT team at  New York University. --
! -- Extensive contributions were provided by Ada Core Technologies Inc.      --
! --                                                                          --
! ------------------------------------------------------------------------------
! 
! with Namet; use Namet;
! with Table;
! 
! package body Snames is
! 
!    --  Table used to record convention identifiers
! 
!    type Convention_Id_Entry is record
!       Name       : Name_Id;
!       Convention : Convention_Id;
!    end record;
! 
!    package Convention_Identifiers is new Table.Table (
!      Table_Component_Type => Convention_Id_Entry,
!      Table_Index_Type     => Int,
!      Table_Low_Bound      => 1,
!      Table_Initial        => 50,
!      Table_Increment      => 200,
!      Table_Name           => "Name_Convention_Identifiers");
! 
!    --  Table of names to be set by Initialize. Each name is terminated by a
!    --  single #, and the end of the list is marked by a null entry, i.e. by
!    --  two # marks in succession. Note that the table does not include the
!    --  entries for a-z, since these are initialized by Namet itself.
! 
!    Preset_Names : constant String :=
!      "_parent#" &
!      "_tag#" &
!      "off#" &
!      "space#" &
!      "time#" &
!      "_abort_signal#" &
!      "_alignment#" &
!      "_assign#" &
!      "_chain#" &
!      "_clean#" &
!      "_controller#" &
!      "_entry_bodies#" &
!      "_expunge#" &
!      "_final_list#" &
!      "_idepth#" &
!      "_init#" &
!      "_local_final_list#" &
!      "_master#" &
!      "_object#" &
!      "_priority#" &
!      "_process_atsd#" &
!      "_secondary_stack#" &
!      "_service#" &
!      "_size#" &
!      "_tags#" &
!      "_task#" &
!      "_task_id#" &
!      "_task_info#" &
!      "_task_name#" &
!      "_trace_sp#" &
!      "initialize#" &
!      "adjust#" &
!      "finalize#" &
!      "next#" &
!      "prev#" &
!      "allocate#" &
!      "deallocate#" &
!      "dereference#" &
!      "decimal_io#" &
!      "enumeration_io#" &
!      "fixed_io#" &
!      "float_io#" &
!      "integer_io#" &
!      "modular_io#" &
!      "a_textio#" &
!      "a_witeio#" &
!      "const#" &
!      "<error>#" &
!      "go#" &
!      "put#" &
!      "put_line#" &
!      "to#" &
!      "finalization#" &
!      "finalization_root#" &
!      "interfaces#" &
!      "standard#" &
!      "system#" &
!      "text_io#" &
!      "wide_text_io#" &
!      "addr#" &
!      "async#" &
!      "get_active_partition_id#" &
!      "get_rci_package_receiver#" &
!      "origin#" &
!      "params#" &
!      "partition#" &
!      "partition_interface#" &
!      "ras#" &
!      "rci_name#" &
!      "receiver#" &
!      "result#" &
!      "rpc#" &
!      "subp_id#" &
!      "Oabs#" &
!      "Oand#" &
!      "Omod#" &
!      "Onot#" &
!      "Oor#" &
!      "Orem#" &
!      "Oxor#" &
!      "Oeq#" &
!      "One#" &
!      "Olt#" &
!      "Ole#" &
!      "Ogt#" &
!      "Oge#" &
!      "Oadd#" &
!      "Osubtract#" &
!      "Oconcat#" &
!      "Omultiply#" &
!      "Odivide#" &
!      "Oexpon#" &
!      "ada_83#" &
!      "ada_95#" &
!      "c_pass_by_copy#" &
!      "compile_time_warning#" &
!      "component_alignment#" &
!      "convention_identifier#" &
!      "discard_names#" &
!      "elaboration_checks#" &
!      "eliminate#" &
!      "explicit_overriding#" &
!      "extend_system#" &
!      "extensions_allowed#" &
!      "external_name_casing#" &
!      "float_representation#" &
!      "initialize_scalars#" &
!      "interrupt_state#" &
!      "license#" &
!      "locking_policy#" &
!      "long_float#" &
!      "no_run_time#" &
!      "normalize_scalars#" &
!      "polling#" &
!      "persistent_data#" &
!      "persistent_object#" &
!      "propagate_exceptions#" &
!      "queuing_policy#" &
!      "ravenscar#" &
!      "restricted_run_time#" &
!      "restrictions#" &
!      "restriction_warnings#" &
!      "reviewable#" &
!      "source_file_name#" &
!      "source_file_name_project#" &
!      "style_checks#" &
!      "suppress#" &
!      "suppress_exception_locations#" &
!      "task_dispatching_policy#" &
!      "universal_data#" &
!      "unsuppress#" &
!      "use_vads_size#" &
!      "validity_checks#" &
!      "warnings#" &
!      "abort_defer#" &
!      "all_calls_remote#" &
!      "annotate#" &
!      "assert#" &
!      "asynchronous#" &
!      "atomic#" &
!      "atomic_components#" &
!      "attach_handler#" &
!      "comment#" &
!      "common_object#" &
!      "complex_representation#" &
!      "controlled#" &
!      "convention#" &
!      "cpp_class#" &
!      "cpp_constructor#" &
!      "cpp_virtual#" &
!      "cpp_vtable#" &
!      "debug#" &
!      "elaborate#" &
!      "elaborate_all#" &
!      "elaborate_body#" &
!      "export#" &
!      "export_exception#" &
!      "export_function#" &
!      "export_object#" &
!      "export_procedure#" &
!      "export_value#" &
!      "export_valued_procedure#" &
!      "external#" &
!      "finalize_storage_only#" &
!      "ident#" &
!      "import#" &
!      "import_exception#" &
!      "import_function#" &
!      "import_object#" &
!      "import_procedure#" &
!      "import_valued_procedure#" &
!      "inline#" &
!      "inline_always#" &
!      "inline_generic#" &
!      "inspection_point#" &
!      "interface#" &
!      "interface_name#" &
!      "interrupt_handler#" &
!      "interrupt_priority#" &
!      "java_constructor#" &
!      "java_interface#" &
!      "keep_names#" &
!      "link_with#" &
!      "linker_alias#" &
!      "linker_options#" &
!      "linker_section#" &
!      "list#" &
!      "machine_attribute#" &
!      "main#" &
!      "main_storage#" &
!      "memory_size#" &
!      "no_return#" &
!      "obsolescent#" &
!      "optimize#" &
!      "optional_overriding#" &
!      "overriding#" &
!      "pack#" &
!      "page#" &
!      "passive#" &
!      "preelaborate#" &
!      "priority#" &
!      "psect_object#" &
!      "pure#" &
!      "pure_function#" &
!      "remote_call_interface#" &
!      "remote_types#" &
!      "share_generic#" &
!      "shared#" &
!      "shared_passive#" &
!      "source_reference#" &
!      "stream_convert#" &
!      "subtitle#" &
!      "suppress_all#" &
!      "suppress_debug_info#" &
!      "suppress_initialization#" &
!      "system_name#" &
!      "task_info#" &
!      "task_name#" &
!      "task_storage#" &
!      "thread_body#" &
!      "time_slice#" &
!      "title#" &
!      "unchecked_union#" &
!      "unimplemented_unit#" &
!      "unreferenced#" &
!      "unreserve_all_interrupts#" &
!      "volatile#" &
!      "volatile_components#" &
!      "weak_external#" &
!      "ada#" &
!      "assembler#" &
!      "cobol#" &
!      "cpp#" &
!      "fortran#" &
!      "intrinsic#" &
!      "java#" &
!      "stdcall#" &
!      "stubbed#" &
!      "asm#" &
!      "assembly#" &
!      "default#" &
!      "dll#" &
!      "win32#" &
!      "as_is#" &
!      "body_file_name#" &
!      "casing#" &
!      "code#" &
!      "component#" &
!      "component_size_4#" &
!      "copy#" &
!      "d_float#" &
!      "descriptor#" &
!      "dot_replacement#" &
!      "dynamic#" &
!      "entity#" &
!      "external_name#" &
!      "first_optional_parameter#" &
!      "form#" &
!      "g_float#" &
!      "gcc#" &
!      "gnat#" &
!      "gpl#" &
!      "ieee_float#" &
!      "homonym_number#" &
!      "internal#" &
!      "link_name#" &
!      "lowercase#" &
!      "max_size#" &
!      "mechanism#" &
!      "mixedcase#" &
!      "modified_gpl#" &
!      "name#" &
!      "nca#" &
!      "no#" &
!      "on#" &
!      "parameter_types#" &
!      "reference#" &
!      "restricted#" &
!      "result_mechanism#" &
!      "result_type#" &
!      "runtime#" &
!      "sb#" &
!      "secondary_stack_size#" &
!      "section#" &
!      "semaphore#" &
!      "spec_file_name#" &
!      "static#" &
!      "stack_size#" &
!      "subunit_file_name#" &
!      "task_stack_size_default#" &
!      "task_type#" &
!      "time_slicing_enabled#" &
!      "top_guard#" &
!      "uba#" &
!      "ubs#" &
!      "ubsb#" &
!      "unit_name#" &
!      "unknown#" &
!      "unrestricted#" &
!      "uppercase#" &
!      "user#" &
!      "vax_float#" &
!      "vms#" &
!      "working_storage#" &
!      "abort_signal#" &
!      "access#" &
!      "address#" &
!      "address_size#" &
!      "aft#" &
!      "alignment#" &
!      "asm_input#" &
!      "asm_output#" &
!      "ast_entry#" &
!      "bit#" &
!      "bit_order#" &
!      "bit_position#" &
!      "body_version#" &
!      "callable#" &
!      "caller#" &
!      "code_address#" &
!      "component_size#" &
!      "compose#" &
!      "constrained#" &
!      "count#" &
!      "default_bit_order#" &
!      "definite#" &
!      "delta#" &
!      "denorm#" &
!      "digits#" &
!      "elaborated#" &
!      "emax#" &
!      "enum_rep#" &
!      "epsilon#" &
!      "exponent#" &
!      "external_tag#" &
!      "first#" &
!      "first_bit#" &
!      "fixed_value#" &
!      "fore#" &
!      "has_discriminants#" &
!      "identity#" &
!      "img#" &
!      "integer_value#" &
!      "large#" &
!      "last#" &
!      "last_bit#" &
!      "leading_part#" &
!      "length#" &
!      "machine_emax#" &
!      "machine_emin#" &
!      "machine_mantissa#" &
!      "machine_overflows#" &
!      "machine_radix#" &
!      "machine_rounds#" &
!      "machine_size#" &
!      "mantissa#" &
!      "max_size_in_storage_elements#" &
!      "maximum_alignment#" &
!      "mechanism_code#" &
!      "model_emin#" &
!      "model_epsilon#" &
!      "model_mantissa#" &
!      "model_small#" &
!      "modulus#" &
!      "null_parameter#" &
!      "object_size#" &
!      "partition_id#" &
!      "passed_by_reference#" &
!      "pool_address#" &
!      "pos#" &
!      "position#" &
!      "range#" &
!      "range_length#" &
!      "round#" &
!      "safe_emax#" &
!      "safe_first#" &
!      "safe_large#" &
!      "safe_last#" &
!      "safe_small#" &
!      "scale#" &
!      "scaling#" &
!      "signed_zeros#" &
!      "size#" &
!      "small#" &
!      "storage_size#" &
!      "storage_unit#" &
!      "tag#" &
!      "target_name#" &
!      "terminated#" &
!      "to_address#" &
!      "type_class#" &
!      "uet_address#" &
!      "unbiased_rounding#" &
!      "unchecked_access#" &
!      "unconstrained_array#" &
!      "universal_literal_string#" &
!      "unrestricted_access#" &
!      "vads_size#" &
!      "val#" &
!      "valid#" &
!      "value_size#" &
!      "version#" &
!      "wchar_t_size#" &
!      "wide_width#" &
!      "width#" &
!      "word_size#" &
!      "adjacent#" &
!      "ceiling#" &
!      "copy_sign#" &
!      "floor#" &
!      "fraction#" &
!      "image#" &
!      "input#" &
!      "machine#" &
!      "max#" &
!      "min#" &
!      "model#" &
!      "pred#" &
!      "remainder#" &
!      "rounding#" &
!      "succ#" &
!      "truncation#" &
!      "value#" &
!      "wide_image#" &
!      "wide_value#" &
!      "output#" &
!      "read#" &
!      "write#" &
!      "elab_body#" &
!      "elab_spec#" &
!      "storage_pool#" &
!      "base#" &
!      "class#" &
!      "ceiling_locking#" &
!      "inheritance_locking#" &
!      "fifo_queuing#" &
!      "priority_queuing#" &
!      "fifo_within_priorities#" &
!      "access_check#" &
!      "accessibility_check#" &
!      "discriminant_check#" &
!      "division_check#" &
!      "elaboration_check#" &
!      "index_check#" &
!      "length_check#" &
!      "overflow_check#" &
!      "range_check#" &
!      "storage_check#" &
!      "tag_check#" &
!      "all_checks#" &
!      "abort#" &
!      "abs#" &
!      "accept#" &
!      "and#" &
!      "all#" &
!      "array#" &
!      "at#" &
!      "begin#" &
!      "body#" &
!      "case#" &
!      "constant#" &
!      "declare#" &
!      "delay#" &
!      "do#" &
!      "else#" &
!      "elsif#" &
!      "end#" &
!      "entry#" &
!      "exception#" &
!      "exit#" &
!      "for#" &
!      "function#" &
!      "generic#" &
!      "goto#" &
!      "if#" &
!      "in#" &
!      "is#" &
!      "limited#" &
!      "loop#" &
!      "mod#" &
!      "new#" &
!      "not#" &
!      "null#" &
!      "of#" &
!      "or#" &
!      "others#" &
!      "out#" &
!      "package#" &
!      "pragma#" &
!      "private#" &
!      "procedure#" &
!      "raise#" &
!      "record#" &
!      "rem#" &
!      "renames#" &
!      "return#" &
!      "reverse#" &
!      "select#" &
!      "separate#" &
!      "subtype#" &
!      "task#" &
!      "terminate#" &
!      "then#" &
!      "type#" &
!      "use#" &
!      "when#" &
!      "while#" &
!      "with#" &
!      "xor#" &
!      "divide#" &
!      "enclosing_entity#" &
!      "exception_information#" &
!      "exception_message#" &
!      "exception_name#" &
!      "file#" &
!      "import_address#" &
!      "import_largest_value#" &
!      "import_value#" &
!      "is_negative#" &
!      "line#" &
!      "rotate_left#" &
!      "rotate_right#" &
!      "shift_left#" &
!      "shift_right#" &
!      "shift_right_arithmetic#" &
!      "source_location#" &
!      "unchecked_conversion#" &
!      "unchecked_deallocation#" &
!      "to_pointer#" &
!      "abstract#" &
!      "aliased#" &
!      "protected#" &
!      "until#" &
!      "requeue#" &
!      "tagged#" &
!      "raise_exception#" &
!      "binder#" &
!      "body_suffix#" &
!      "builder#" &
!      "compiler#" &
!      "cross_reference#" &
!      "default_switches#" &
!      "exec_dir#" &
!      "executable#" &
!      "executable_suffix#" &
!      "extends#" &
!      "finder#" &
!      "global_configuration_pragmas#" &
!      "gnatls#" &
!      "gnatstub#" &
!      "implementation#" &
!      "implementation_exceptions#" &
!      "implementation_suffix#" &
!      "languages#" &
!      "library_dir#" &
!      "library_auto_init#" &
!      "library_gcc#" &
!      "library_interface#" &
!      "library_kind#" &
!      "library_name#" &
!      "library_options#" &
!      "library_reference_symbol_file#" &
!      "library_src_dir#" &
!      "library_symbol_file#" &
!      "library_symbol_policy#" &
!      "library_version#" &
!      "linker#" &
!      "local_configuration_pragmas#" &
!      "locally_removed_files#" &
!      "naming#" &
!      "object_dir#" &
!      "pretty_printer#" &
!      "project#" &
!      "separate_suffix#" &
!      "source_dirs#" &
!      "source_files#" &
!      "source_list_file#" &
!      "spec#" &
!      "spec_suffix#" &
!      "specification#" &
!      "specification_exceptions#" &
!      "specification_suffix#" &
!      "switches#" &
!      "unaligned_valid#" &
!       "#";
! 
!    ---------------------
!    -- Generated Names --
!    ---------------------
! 
!    --  This section lists the various cases of generated names which are
!    --  built from existing names by adding unique leading and/or trailing
!    --  upper case letters. In some cases these names are built recursively,
!    --  in particular names built from types may be built from types which
!    --  themselves have generated names. In this list, xxx represents an
!    --  existing name to which identifying letters are prepended or appended,
!    --  and a trailing n represents a serial number in an external name that
!    --  has some semantic significance (e.g. the n'th index type of an array).
! 
!    --    xxxA    access type for formal xxx in entry param record   (Exp_Ch9)
!    --    xxxB    tag table for tagged type xxx                      (Exp_Ch3)
!    --    xxxB    task body procedure for task xxx                   (Exp_Ch9)
!    --    xxxD    dispatch table for tagged type xxx                 (Exp_Ch3)
!    --    xxxD    discriminal for discriminant xxx                   (Sem_Ch3)
!    --    xxxDn   n'th discr check function for rec type xxx         (Exp_Ch3)
!    --    xxxE    elaboration boolean flag for task xxx              (Exp_Ch9)
!    --    xxxE    dispatch table pointer type for tagged type xxx    (Exp_Ch3)
!    --    xxxE    parameters for accept body for entry xxx           (Exp_Ch9)
!    --    xxxFn   n'th primitive of a tagged type (named xxx)        (Exp_Ch3)
!    --    xxxJ    tag table type index for tagged type xxx           (Exp_Ch3)
!    --    xxxM    master Id value for access type xxx                (Exp_Ch3)
!    --    xxxP    tag table pointer type for tagged type xxx         (Exp_Ch3)
!    --    xxxP    parameter record type for entry xxx                (Exp_Ch9)
!    --    xxxPA   access to parameter record type for entry xxx      (Exp_Ch9)
!    --    xxxPn   pointer type for n'th primitive of tagged type xxx (Exp_Ch3)
!    --    xxxR    dispatch table pointer for tagged type xxx         (Exp_Ch3)
!    --    xxxT    tag table type for tagged type xxx                 (Exp_Ch3)
!    --    xxxT    literal table for enumeration type xxx             (Sem_Ch3)
!    --    xxxV    type for task value record for task xxx            (Exp_Ch9)
!    --    xxxX    entry index constant                               (Exp_Ch9)
!    --    xxxY    dispatch table type for tagged type xxx            (Exp_Ch3)
!    --    xxxZ    size variable for task xxx                         (Exp_Ch9)
! 
!    --  TSS names
! 
!    --    xxxDA   deep adjust routine for type xxx                   (Exp_TSS)
!    --    xxxDF   deep finalize routine for type xxx                 (Exp_TSS)
!    --    xxxDI   deep initialize routine for type xxx               (Exp_TSS)
!    --    xxxEQ   composite equality routine for record type xxx     (Exp_TSS)
!    --    xxxIP   initialization procedure for type xxx              (Exp_TSS)
!    --    xxxRA   RAs type access routine for type xxx               (Exp_TSS)
!    --    xxxRD   RAs type dereference routine for type xxx          (Exp_TSS)
!    --    xxxRP   Rep to Pos conversion for enumeration type xxx     (Exp_TSS)
!    --    xxxSI   stream input attribute subprogram for type xxx     (Exp_TSS)
!    --    xxxSO   stream output attribute subprogram for type xxx    (Exp_TSS)
!    --    xxxSR   stream read attribute subprogram for type xxx      (Exp_TSS)
!    --    xxxSW   stream write attribute subprogram for type xxx     (Exp_TSS)
! 
!    --  Implicit type names
! 
!    --    TxxxT   type of literal table for enumeration type xxx     (Sem_Ch3)
! 
!    --  (Note: this list is not complete or accurate ???)
! 
!    ----------------------
!    -- Get_Attribute_Id --
!    ----------------------
! 
!    function Get_Attribute_Id (N : Name_Id) return Attribute_Id is
!    begin
!       return Attribute_Id'Val (N - First_Attribute_Name);
!    end Get_Attribute_Id;
! 
!    ------------------
!    -- Get_Check_Id --
!    ------------------
! 
!    function Get_Check_Id (N : Name_Id) return Check_Id is
!    begin
!       return Check_Id'Val (N - First_Check_Name);
!    end Get_Check_Id;
! 
!    -----------------------
!    -- Get_Convention_Id --
!    -----------------------
! 
!    function Get_Convention_Id (N : Name_Id) return Convention_Id is
!    begin
!       case N is
!          when Name_Ada        => return Convention_Ada;
!          when Name_Assembler  => return Convention_Assembler;
!          when Name_C          => return Convention_C;
!          when Name_COBOL      => return Convention_COBOL;
!          when Name_CPP        => return Convention_CPP;
!          when Name_Fortran    => return Convention_Fortran;
!          when Name_Intrinsic  => return Convention_Intrinsic;
!          when Name_Java       => return Convention_Java;
!          when Name_Stdcall    => return Convention_Stdcall;
!          when Name_Stubbed    => return Convention_Stubbed;
! 
!          --  If no direct match, then we must have a convention
!          --  identifier pragma that has specified this name.
! 
!          when others          =>
!             for J in 1 .. Convention_Identifiers.Last loop
!                if N = Convention_Identifiers.Table (J).Name then
!                   return Convention_Identifiers.Table (J).Convention;
!                end if;
!             end loop;
! 
!             raise Program_Error;
!       end case;
!    end Get_Convention_Id;
! 
!    ---------------------------
!    -- Get_Locking_Policy_Id --
!    ---------------------------
! 
!    function Get_Locking_Policy_Id (N : Name_Id) return Locking_Policy_Id is
!    begin
!       return Locking_Policy_Id'Val (N - First_Locking_Policy_Name);
!    end Get_Locking_Policy_Id;
! 
!    -------------------
!    -- Get_Pragma_Id --
!    -------------------
! 
!    function Get_Pragma_Id (N : Name_Id) return Pragma_Id is
!    begin
!       if N = Name_AST_Entry then
!          return Pragma_AST_Entry;
!       elsif N = Name_Storage_Size then
!          return Pragma_Storage_Size;
!       elsif N = Name_Storage_Unit then
!          return Pragma_Storage_Unit;
!       elsif N not in First_Pragma_Name .. Last_Pragma_Name then
!          return Unknown_Pragma;
!       else
!          return Pragma_Id'Val (N - First_Pragma_Name);
!       end if;
!    end Get_Pragma_Id;
! 
!    ---------------------------
!    -- Get_Queuing_Policy_Id --
!    ---------------------------
! 
!    function Get_Queuing_Policy_Id (N : Name_Id) return Queuing_Policy_Id is
!    begin
!       return Queuing_Policy_Id'Val (N - First_Queuing_Policy_Name);
!    end Get_Queuing_Policy_Id;
! 
!    ------------------------------------
!    -- Get_Task_Dispatching_Policy_Id --
!    ------------------------------------
! 
!    function Get_Task_Dispatching_Policy_Id (N : Name_Id)
!      return Task_Dispatching_Policy_Id is
!    begin
!       return Task_Dispatching_Policy_Id'Val
!         (N - First_Task_Dispatching_Policy_Name);
!    end Get_Task_Dispatching_Policy_Id;
! 
!    ----------------
!    -- Initialize --
!    ----------------
! 
!    procedure Initialize is
!       P_Index      : Natural;
!       Discard_Name : Name_Id;
! 
!    begin
!       P_Index := Preset_Names'First;
! 
!       loop
!          Name_Len := 0;
! 
!          while Preset_Names (P_Index) /= '#' loop
!             Name_Len := Name_Len + 1;
!             Name_Buffer (Name_Len) := Preset_Names (P_Index);
!             P_Index := P_Index + 1;
!          end loop;
! 
!          --  We do the Name_Find call to enter the name into the table, but
!          --  we don't need to do anything with the result, since we already
!          --  initialized all the preset names to have the right value (we
!          --  are depending on the order of the names and Preset_Names).
! 
!          Discard_Name := Name_Find;
!          P_Index := P_Index + 1;
!          exit when Preset_Names (P_Index) = '#';
!       end loop;
! 
!       --  Make sure that number of names in standard table is correct. If
!       --  this check fails, run utility program XSNAMES to construct a new
!       --  properly matching version of the body.
! 
!       pragma Assert (Discard_Name = Last_Predefined_Name);
! 
!       --  Initialize the convention identifiers table with the standard
!       --  set of synonyms that we recognize for conventions.
! 
!       Convention_Identifiers.Init;
! 
!       Convention_Identifiers.Append ((Name_Asm,      Convention_Assembler));
!       Convention_Identifiers.Append ((Name_Assembly, Convention_Assembler));
! 
!       Convention_Identifiers.Append ((Name_Default,  Convention_C));
!       Convention_Identifiers.Append ((Name_External, Convention_C));
! 
!       Convention_Identifiers.Append ((Name_DLL,      Convention_Stdcall));
!       Convention_Identifiers.Append ((Name_Win32,    Convention_Stdcall));
!    end Initialize;
! 
!    -----------------------
!    -- Is_Attribute_Name --
!    -----------------------
! 
!    function Is_Attribute_Name (N : Name_Id) return Boolean is
!    begin
!       return N in First_Attribute_Name .. Last_Attribute_Name;
!    end Is_Attribute_Name;
! 
!    -------------------
!    -- Is_Check_Name --
!    -------------------
! 
!    function Is_Check_Name (N : Name_Id) return Boolean is
!    begin
!       return N in First_Check_Name .. Last_Check_Name;
!    end Is_Check_Name;
! 
!    ------------------------
!    -- Is_Convention_Name --
!    ------------------------
! 
!    function Is_Convention_Name (N : Name_Id) return Boolean is
!    begin
!       --  Check if this is one of the standard conventions
! 
!       if N in First_Convention_Name .. Last_Convention_Name
!         or else N = Name_C
!       then
!          return True;
! 
!       --  Otherwise check if it is in convention identifier table
! 
!       else
!          for J in 1 .. Convention_Identifiers.Last loop
!             if N = Convention_Identifiers.Table (J).Name then
!                return True;
!             end if;
!          end loop;
! 
!          return False;
!       end if;
!    end Is_Convention_Name;
! 
!    ------------------------------
!    -- Is_Entity_Attribute_Name --
!    ------------------------------
! 
!    function Is_Entity_Attribute_Name (N : Name_Id) return Boolean is
!    begin
!       return N in First_Entity_Attribute_Name .. Last_Entity_Attribute_Name;
!    end Is_Entity_Attribute_Name;
! 
!    --------------------------------
!    -- Is_Function_Attribute_Name --
!    --------------------------------
! 
!    function Is_Function_Attribute_Name (N : Name_Id) return Boolean is
!    begin
!       return N in
!         First_Renamable_Function_Attribute ..
!           Last_Renamable_Function_Attribute;
!    end Is_Function_Attribute_Name;
! 
!    ----------------------------
!    -- Is_Locking_Policy_Name --
!    ----------------------------
! 
!    function Is_Locking_Policy_Name (N : Name_Id) return Boolean is
!    begin
!       return N in First_Locking_Policy_Name .. Last_Locking_Policy_Name;
!    end Is_Locking_Policy_Name;
! 
!    -----------------------------
!    -- Is_Operator_Symbol_Name --
!    -----------------------------
! 
!    function Is_Operator_Symbol_Name (N : Name_Id) return Boolean is
!    begin
!       return N in First_Operator_Name .. Last_Operator_Name;
!    end Is_Operator_Symbol_Name;
! 
!    --------------------
!    -- Is_Pragma_Name --
!    --------------------
! 
!    function Is_Pragma_Name (N : Name_Id) return Boolean is
!    begin
!       return N in First_Pragma_Name .. Last_Pragma_Name
!         or else N = Name_AST_Entry
!         or else N = Name_Storage_Size
!         or else N = Name_Storage_Unit;
!    end Is_Pragma_Name;
! 
!    ---------------------------------
!    -- Is_Procedure_Attribute_Name --
!    ---------------------------------
! 
!    function Is_Procedure_Attribute_Name (N : Name_Id) return Boolean is
!    begin
!       return N in First_Procedure_Attribute .. Last_Procedure_Attribute;
!    end Is_Procedure_Attribute_Name;
! 
!    ----------------------------
!    -- Is_Queuing_Policy_Name --
!    ----------------------------
! 
!    function Is_Queuing_Policy_Name (N : Name_Id) return Boolean is
!    begin
!       return N in First_Queuing_Policy_Name .. Last_Queuing_Policy_Name;
!    end Is_Queuing_Policy_Name;
! 
!    -------------------------------------
!    -- Is_Task_Dispatching_Policy_Name --
!    -------------------------------------
! 
!    function Is_Task_Dispatching_Policy_Name (N : Name_Id) return Boolean is
!    begin
!       return N in First_Task_Dispatching_Policy_Name ..
!                   Last_Task_Dispatching_Policy_Name;
!    end Is_Task_Dispatching_Policy_Name;
! 
!    ----------------------------
!    -- Is_Type_Attribute_Name --
!    ----------------------------
! 
!    function Is_Type_Attribute_Name (N : Name_Id) return Boolean is
!    begin
!       return N in First_Type_Attribute_Name .. Last_Type_Attribute_Name;
!    end Is_Type_Attribute_Name;
! 
!    ----------------------------------
!    -- Record_Convention_Identifier --
!    ----------------------------------
! 
!    procedure Record_Convention_Identifier
!      (Id         : Name_Id;
!       Convention : Convention_Id)
!    is
!    begin
!       Convention_Identifiers.Append ((Id, Convention));
!    end Record_Convention_Identifier;
! 
! end Snames;
--- 1,1049 ----
! ------------------------------------------------------------------------------
! --                                                                          --
! --                         GNAT COMPILER COMPONENTS                         --
! --                                                                          --
! --                               S N A M E S                                --
! --                                                                          --
! --                                 B o d y                                  --
! --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
! --                                                                          --
! -- GNAT is free software;  you can  redistribute it  and/or modify it under --
! -- terms of the  GNU General Public License as published  by the Free Soft- --
! -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
! -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
! -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
! -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
! -- for  more details.  You should have  received  a copy of the GNU General --
! -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
! -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
! -- MA 02111-1307, USA.                                                      --
! --                                                                          --
! -- As a special exception,  if other files  instantiate  generics from this --
! -- unit, or you link  this unit with other files  to produce an executable, --
! -- this  unit  does not  by itself cause  the resulting  executable  to  be --
! -- covered  by the  GNU  General  Public  License.  This exception does not --
! -- however invalidate  any other reasons why  the executable file  might be --
! -- covered by the  GNU Public License.                                      --
! --                                                                          --
! -- GNAT was originally developed  by the GNAT team at  New York University. --
! -- Extensive contributions were provided by Ada Core Technologies Inc.      --
! --                                                                          --
! ------------------------------------------------------------------------------
! 
! with Namet; use Namet;
! with Table;
! 
! package body Snames is
! 
!    --  Table used to record convention identifiers
! 
!    type Convention_Id_Entry is record
!       Name       : Name_Id;
!       Convention : Convention_Id;
!    end record;
! 
!    package Convention_Identifiers is new Table.Table (
!      Table_Component_Type => Convention_Id_Entry,
!      Table_Index_Type     => Int,
!      Table_Low_Bound      => 1,
!      Table_Initial        => 50,
!      Table_Increment      => 200,
!      Table_Name           => "Name_Convention_Identifiers");
! 
!    --  Table of names to be set by Initialize. Each name is terminated by a
!    --  single #, and the end of the list is marked by a null entry, i.e. by
!    --  two # marks in succession. Note that the table does not include the
!    --  entries for a-z, since these are initialized by Namet itself.
! 
!    Preset_Names : constant String :=
!      "_parent#" &
!      "_tag#" &
!      "off#" &
!      "space#" &
!      "time#" &
!      "_abort_signal#" &
!      "_alignment#" &
!      "_assign#" &
!      "_atcb#" &
!      "_chain#" &
!      "_clean#" &
!      "_controller#" &
!      "_entry_bodies#" &
!      "_expunge#" &
!      "_final_list#" &
!      "_idepth#" &
!      "_init#" &
!      "_local_final_list#" &
!      "_master#" &
!      "_object#" &
!      "_priority#" &
!      "_process_atsd#" &
!      "_secondary_stack#" &
!      "_service#" &
!      "_size#" &
!      "_stack#" &
!      "_tags#" &
!      "_task#" &
!      "_task_id#" &
!      "_task_info#" &
!      "_task_name#" &
!      "_trace_sp#" &
!      "initialize#" &
!      "adjust#" &
!      "finalize#" &
!      "next#" &
!      "prev#" &
!      "_typecode#" &
!      "_from_any#" &
!      "_to_any#" &
!      "allocate#" &
!      "deallocate#" &
!      "dereference#" &
!      "decimal_io#" &
!      "enumeration_io#" &
!      "fixed_io#" &
!      "float_io#" &
!      "integer_io#" &
!      "modular_io#" &
!      "const#" &
!      "<error>#" &
!      "go#" &
!      "put#" &
!      "put_line#" &
!      "to#" &
!      "finalization#" &
!      "finalization_root#" &
!      "interfaces#" &
!      "standard#" &
!      "system#" &
!      "text_io#" &
!      "wide_text_io#" &
!      "wide_wide_text_io#" &
!      "no_dsa#" &
!      "garlic_dsa#" &
!      "polyorb_dsa#" &
!      "addr#" &
!      "async#" &
!      "get_active_partition_id#" &
!      "get_rci_package_receiver#" &
!      "get_rci_package_ref#" &
!      "origin#" &
!      "params#" &
!      "partition#" &
!      "partition_interface#" &
!      "ras#" &
!      "call#" &
!      "rci_name#" &
!      "receiver#" &
!      "result#" &
!      "rpc#" &
!      "subp_id#" &
!      "operation#" &
!      "argument#" &
!      "arg_modes#" &
!      "handler#" &
!      "target#" &
!      "req#" &
!      "obj_typecode#" &
!      "stub#" &
!      "Oabs#" &
!      "Oand#" &
!      "Omod#" &
!      "Onot#" &
!      "Oor#" &
!      "Orem#" &
!      "Oxor#" &
!      "Oeq#" &
!      "One#" &
!      "Olt#" &
!      "Ole#" &
!      "Ogt#" &
!      "Oge#" &
!      "Oadd#" &
!      "Osubtract#" &
!      "Oconcat#" &
!      "Omultiply#" &
!      "Odivide#" &
!      "Oexpon#" &
!      "ada_83#" &
!      "ada_95#" &
!      "ada_05#" &
!      "c_pass_by_copy#" &
!      "compile_time_warning#" &
!      "component_alignment#" &
!      "convention_identifier#" &
!      "detect_blocking#" &
!      "discard_names#" &
!      "elaboration_checks#" &
!      "eliminate#" &
!      "explicit_overriding#" &
!      "extend_system#" &
!      "extensions_allowed#" &
!      "external_name_casing#" &
!      "float_representation#" &
!      "initialize_scalars#" &
!      "interrupt_state#" &
!      "license#" &
!      "locking_policy#" &
!      "long_float#" &
!      "no_run_time#" &
!      "no_strict_aliasing#" &
!      "normalize_scalars#" &
!      "polling#" &
!      "persistent_data#" &
!      "persistent_object#" &
!      "profile#" &
!      "profile_warnings#" &
!      "propagate_exceptions#" &
!      "queuing_policy#" &
!      "ravenscar#" &
!      "restricted_run_time#" &
!      "restrictions#" &
!      "restriction_warnings#" &
!      "reviewable#" &
!      "source_file_name#" &
!      "source_file_name_project#" &
!      "style_checks#" &
!      "suppress#" &
!      "suppress_exception_locations#" &
!      "task_dispatching_policy#" &
!      "universal_data#" &
!      "unsuppress#" &
!      "use_vads_size#" &
!      "validity_checks#" &
!      "warnings#" &
!      "abort_defer#" &
!      "all_calls_remote#" &
!      "annotate#" &
!      "assert#" &
!      "asynchronous#" &
!      "atomic#" &
!      "atomic_components#" &
!      "attach_handler#" &
!      "comment#" &
!      "common_object#" &
!      "complex_representation#" &
!      "controlled#" &
!      "convention#" &
!      "cpp_class#" &
!      "cpp_constructor#" &
!      "cpp_virtual#" &
!      "cpp_vtable#" &
!      "debug#" &
!      "elaborate#" &
!      "elaborate_all#" &
!      "elaborate_body#" &
!      "export#" &
!      "export_exception#" &
!      "export_function#" &
!      "export_object#" &
!      "export_procedure#" &
!      "export_value#" &
!      "export_valued_procedure#" &
!      "external#" &
!      "finalize_storage_only#" &
!      "ident#" &
!      "import#" &
!      "import_exception#" &
!      "import_function#" &
!      "import_object#" &
!      "import_procedure#" &
!      "import_valued_procedure#" &
!      "inline#" &
!      "inline_always#" &
!      "inline_generic#" &
!      "inspection_point#" &
!      "interface_name#" &
!      "interrupt_handler#" &
!      "interrupt_priority#" &
!      "java_constructor#" &
!      "java_interface#" &
!      "keep_names#" &
!      "link_with#" &
!      "linker_alias#" &
!      "linker_options#" &
!      "linker_section#" &
!      "list#" &
!      "machine_attribute#" &
!      "main#" &
!      "main_storage#" &
!      "memory_size#" &
!      "no_return#" &
!      "obsolescent#" &
!      "optimize#" &
!      "optional_overriding#" &
!      "pack#" &
!      "page#" &
!      "passive#" &
!      "preelaborate#" &
!      "priority#" &
!      "psect_object#" &
!      "pure#" &
!      "pure_function#" &
!      "remote_call_interface#" &
!      "remote_types#" &
!      "share_generic#" &
!      "shared#" &
!      "shared_passive#" &
!      "source_reference#" &
!      "stream_convert#" &
!      "subtitle#" &
!      "suppress_all#" &
!      "suppress_debug_info#" &
!      "suppress_initialization#" &
!      "system_name#" &
!      "task_info#" &
!      "task_name#" &
!      "task_storage#" &
!      "thread_body#" &
!      "time_slice#" &
!      "title#" &
!      "unchecked_union#" &
!      "unimplemented_unit#" &
!      "unreferenced#" &
!      "unreserve_all_interrupts#" &
!      "volatile#" &
!      "volatile_components#" &
!      "weak_external#" &
!      "ada#" &
!      "assembler#" &
!      "cobol#" &
!      "cpp#" &
!      "fortran#" &
!      "intrinsic#" &
!      "java#" &
!      "stdcall#" &
!      "stubbed#" &
!      "asm#" &
!      "assembly#" &
!      "default#" &
!      "dll#" &
!      "win32#" &
!      "as_is#" &
!      "body_file_name#" &
!      "boolean_entry_barriers#" &
!      "casing#" &
!      "code#" &
!      "component#" &
!      "component_size_4#" &
!      "copy#" &
!      "d_float#" &
!      "descriptor#" &
!      "dot_replacement#" &
!      "dynamic#" &
!      "entity#" &
!      "external_name#" &
!      "first_optional_parameter#" &
!      "form#" &
!      "g_float#" &
!      "gcc#" &
!      "gnat#" &
!      "gpl#" &
!      "ieee_float#" &
!      "internal#" &
!      "link_name#" &
!      "lowercase#" &
!      "max_entry_queue_depth#" &
!      "max_entry_queue_length#" &
!      "max_size#" &
!      "mechanism#" &
!      "mixedcase#" &
!      "modified_gpl#" &
!      "name#" &
!      "nca#" &
!      "no#" &
!      "no_dependence#" &
!      "no_dynamic_attachment#" &
!      "no_dynamic_interrupts#" &
!      "no_requeue#" &
!      "no_requeue_statements#" &
!      "no_task_attributes#" &
!      "no_task_attributes_package#" &
!      "on#" &
!      "parameter_types#" &
!      "reference#" &
!      "restricted#" &
!      "result_mechanism#" &
!      "result_type#" &
!      "runtime#" &
!      "sb#" &
!      "secondary_stack_size#" &
!      "section#" &
!      "semaphore#" &
!      "simple_barriers#" &
!      "spec_file_name#" &
!      "static#" &
!      "stack_size#" &
!      "subunit_file_name#" &
!      "task_stack_size_default#" &
!      "task_type#" &
!      "time_slicing_enabled#" &
!      "top_guard#" &
!      "uba#" &
!      "ubs#" &
!      "ubsb#" &
!      "unit_name#" &
!      "unknown#" &
!      "unrestricted#" &
!      "uppercase#" &
!      "user#" &
!      "vax_float#" &
!      "vms#" &
!      "working_storage#" &
!      "abort_signal#" &
!      "access#" &
!      "address#" &
!      "address_size#" &
!      "aft#" &
!      "alignment#" &
!      "asm_input#" &
!      "asm_output#" &
!      "ast_entry#" &
!      "bit#" &
!      "bit_order#" &
!      "bit_position#" &
!      "body_version#" &
!      "callable#" &
!      "caller#" &
!      "code_address#" &
!      "component_size#" &
!      "compose#" &
!      "constrained#" &
!      "count#" &
!      "default_bit_order#" &
!      "definite#" &
!      "delta#" &
!      "denorm#" &
!      "digits#" &
!      "elaborated#" &
!      "emax#" &
!      "enum_rep#" &
!      "epsilon#" &
!      "exponent#" &
!      "external_tag#" &
!      "first#" &
!      "first_bit#" &
!      "fixed_value#" &
!      "fore#" &
!      "has_access_values#" &
!      "has_discriminants#" &
!      "identity#" &
!      "img#" &
!      "integer_value#" &
!      "large#" &
!      "last#" &
!      "last_bit#" &
!      "leading_part#" &
!      "length#" &
!      "machine_emax#" &
!      "machine_emin#" &
!      "machine_mantissa#" &
!      "machine_overflows#" &
!      "machine_radix#" &
!      "machine_rounds#" &
!      "machine_size#" &
!      "mantissa#" &
!      "max_size_in_storage_elements#" &
!      "maximum_alignment#" &
!      "mechanism_code#" &
!      "mod#" &
!      "model_emin#" &
!      "model_epsilon#" &
!      "model_mantissa#" &
!      "model_small#" &
!      "modulus#" &
!      "null_parameter#" &
!      "object_size#" &
!      "partition_id#" &
!      "passed_by_reference#" &
!      "pool_address#" &
!      "pos#" &
!      "position#" &
!      "range#" &
!      "range_length#" &
!      "round#" &
!      "safe_emax#" &
!      "safe_first#" &
!      "safe_large#" &
!      "safe_last#" &
!      "safe_small#" &
!      "scale#" &
!      "scaling#" &
!      "signed_zeros#" &
!      "size#" &
!      "small#" &
!      "storage_size#" &
!      "storage_unit#" &
!      "stream_size#" &
!      "tag#" &
!      "target_name#" &
!      "terminated#" &
!      "to_address#" &
!      "type_class#" &
!      "uet_address#" &
!      "unbiased_rounding#" &
!      "unchecked_access#" &
!      "unconstrained_array#" &
!      "universal_literal_string#" &
!      "unrestricted_access#" &
!      "vads_size#" &
!      "val#" &
!      "valid#" &
!      "value_size#" &
!      "version#" &
!      "wchar_t_size#" &
!      "wide_wide_width#" &
!      "wide_width#" &
!      "width#" &
!      "word_size#" &
!      "adjacent#" &
!      "ceiling#" &
!      "copy_sign#" &
!      "floor#" &
!      "fraction#" &
!      "image#" &
!      "input#" &
!      "machine#" &
!      "max#" &
!      "min#" &
!      "model#" &
!      "pred#" &
!      "remainder#" &
!      "rounding#" &
!      "succ#" &
!      "truncation#" &
!      "value#" &
!      "wide_image#" &
!      "wide_wide_image#" &
!      "wide_value#" &
!      "wide_wide_value#" &
!      "output#" &
!      "read#" &
!      "write#" &
!      "elab_body#" &
!      "elab_spec#" &
!      "storage_pool#" &
!      "base#" &
!      "class#" &
!      "ceiling_locking#" &
!      "inheritance_locking#" &
!      "fifo_queuing#" &
!      "priority_queuing#" &
!      "fifo_within_priorities#" &
!      "access_check#" &
!      "accessibility_check#" &
!      "discriminant_check#" &
!      "division_check#" &
!      "elaboration_check#" &
!      "index_check#" &
!      "length_check#" &
!      "overflow_check#" &
!      "range_check#" &
!      "storage_check#" &
!      "tag_check#" &
!      "all_checks#" &
!      "abort#" &
!      "abs#" &
!      "accept#" &
!      "and#" &
!      "all#" &
!      "array#" &
!      "at#" &
!      "begin#" &
!      "body#" &
!      "case#" &
!      "constant#" &
!      "declare#" &
!      "delay#" &
!      "do#" &
!      "else#" &
!      "elsif#" &
!      "end#" &
!      "entry#" &
!      "exception#" &
!      "exit#" &
!      "for#" &
!      "function#" &
!      "generic#" &
!      "goto#" &
!      "if#" &
!      "in#" &
!      "is#" &
!      "limited#" &
!      "loop#" &
!      "new#" &
!      "not#" &
!      "null#" &
!      "of#" &
!      "or#" &
!      "others#" &
!      "out#" &
!      "package#" &
!      "pragma#" &
!      "private#" &
!      "procedure#" &
!      "raise#" &
!      "record#" &
!      "rem#" &
!      "renames#" &
!      "return#" &
!      "reverse#" &
!      "select#" &
!      "separate#" &
!      "subtype#" &
!      "task#" &
!      "terminate#" &
!      "then#" &
!      "type#" &
!      "use#" &
!      "when#" &
!      "while#" &
!      "with#" &
!      "xor#" &
!      "divide#" &
!      "enclosing_entity#" &
!      "exception_information#" &
!      "exception_message#" &
!      "exception_name#" &
!      "file#" &
!      "import_address#" &
!      "import_largest_value#" &
!      "import_value#" &
!      "is_negative#" &
!      "line#" &
!      "rotate_left#" &
!      "rotate_right#" &
!      "shift_left#" &
!      "shift_right#" &
!      "shift_right_arithmetic#" &
!      "source_location#" &
!      "unchecked_conversion#" &
!      "unchecked_deallocation#" &
!      "to_pointer#" &
!      "abstract#" &
!      "aliased#" &
!      "protected#" &
!      "until#" &
!      "requeue#" &
!      "tagged#" &
!      "raise_exception#" &
!      "ada_roots#" &
!      "binder#" &
!      "binder_driver#" &
!      "body_suffix#" &
!      "builder#" &
!      "compiler#" &
!      "compiler_driver#" &
!      "compiler_kind#" &
!      "compute_dependency#" &
!      "cross_reference#" &
!      "default_linker#" &
!      "default_switches#" &
!      "dependency_option#" &
!      "exec_dir#" &
!      "executable#" &
!      "executable_suffix#" &
!      "extends#" &
!      "externally_built#" &
!      "finder#" &
!      "global_configuration_pragmas#" &
!      "gnatls#" &
!      "gnatstub#" &
!      "implementation#" &
!      "implementation_exceptions#" &
!      "implementation_suffix#" &
!      "include_option#" &
!      "language_processing#" &
!      "languages#" &
!      "library_dir#" &
!      "library_auto_init#" &
!      "library_gcc#" &
!      "library_interface#" &
!      "library_kind#" &
!      "library_name#" &
!      "library_options#" &
!      "library_reference_symbol_file#" &
!      "library_src_dir#" &
!      "library_symbol_file#" &
!      "library_symbol_policy#" &
!      "library_version#" &
!      "linker#" &
!      "local_configuration_pragmas#" &
!      "locally_removed_files#" &
!      "metrics#" &
!      "naming#" &
!      "object_dir#" &
!      "pretty_printer#" &
!      "project#" &
!      "separate_suffix#" &
!      "source_dirs#" &
!      "source_files#" &
!      "source_list_file#" &
!      "spec#" &
!      "spec_suffix#" &
!      "specification#" &
!      "specification_exceptions#" &
!      "specification_suffix#" &
!      "switches#" &
!      "unaligned_valid#" &
!      "interface#" &
!      "overriding#" &
!      "synchronized#" &
!      "#";
! 
!    ---------------------
!    -- Generated Names --
!    ---------------------
! 
!    --  This section lists the various cases of generated names which are
!    --  built from existing names by adding unique leading and/or trailing
!    --  upper case letters. In some cases these names are built recursively,
!    --  in particular names built from types may be built from types which
!    --  themselves have generated names. In this list, xxx represents an
!    --  existing name to which identifying letters are prepended or appended,
!    --  and a trailing n represents a serial number in an external name that
!    --  has some semantic significance (e.g. the n'th index type of an array).
! 
!    --    xxxA    access type for formal xxx in entry param record   (Exp_Ch9)
!    --    xxxB    tag table for tagged type xxx                      (Exp_Ch3)
!    --    xxxB    task body procedure for task xxx                   (Exp_Ch9)
!    --    xxxD    dispatch table for tagged type xxx                 (Exp_Ch3)
!    --    xxxD    discriminal for discriminant xxx                   (Sem_Ch3)
!    --    xxxDn   n'th discr check function for rec type xxx         (Exp_Ch3)
!    --    xxxE    elaboration boolean flag for task xxx              (Exp_Ch9)
!    --    xxxE    dispatch table pointer type for tagged type xxx    (Exp_Ch3)
!    --    xxxE    parameters for accept body for entry xxx           (Exp_Ch9)
!    --    xxxFn   n'th primitive of a tagged type (named xxx)        (Exp_Ch3)
!    --    xxxJ    tag table type index for tagged type xxx           (Exp_Ch3)
!    --    xxxM    master Id value for access type xxx                (Exp_Ch3)
!    --    xxxP    tag table pointer type for tagged type xxx         (Exp_Ch3)
!    --    xxxP    parameter record type for entry xxx                (Exp_Ch9)
!    --    xxxPA   access to parameter record type for entry xxx      (Exp_Ch9)
!    --    xxxPn   pointer type for n'th primitive of tagged type xxx (Exp_Ch3)
!    --    xxxR    dispatch table pointer for tagged type xxx         (Exp_Ch3)
!    --    xxxT    tag table type for tagged type xxx                 (Exp_Ch3)
!    --    xxxT    literal table for enumeration type xxx             (Sem_Ch3)
!    --    xxxV    type for task value record for task xxx            (Exp_Ch9)
!    --    xxxX    entry index constant                               (Exp_Ch9)
!    --    xxxY    dispatch table type for tagged type xxx            (Exp_Ch3)
!    --    xxxZ    size variable for task xxx                         (Exp_Ch9)
! 
!    --  TSS names
! 
!    --    xxxDA   deep adjust routine for type xxx                   (Exp_TSS)
!    --    xxxDF   deep finalize routine for type xxx                 (Exp_TSS)
!    --    xxxDI   deep initialize routine for type xxx               (Exp_TSS)
!    --    xxxEQ   composite equality routine for record type xxx     (Exp_TSS)
!    --    xxxIP   initialization procedure for type xxx              (Exp_TSS)
!    --    xxxRA   RAs type access routine for type xxx               (Exp_TSS)
!    --    xxxRD   RAs type dereference routine for type xxx          (Exp_TSS)
!    --    xxxRP   Rep to Pos conversion for enumeration type xxx     (Exp_TSS)
!    --    xxxSA   array/slice assignment for controlled comp. arrays (Exp_TSS)
!    --    xxxSI   stream input attribute subprogram for type xxx     (Exp_TSS)
!    --    xxxSO   stream output attribute subprogram for type xxx    (Exp_TSS)
!    --    xxxSR   stream read attribute subprogram for type xxx      (Exp_TSS)
!    --    xxxSW   stream write attribute subprogram for type xxx     (Exp_TSS)
! 
!    --  Implicit type names
! 
!    --    TxxxT   type of literal table for enumeration type xxx     (Sem_Ch3)
! 
!    --  (Note: this list is not complete or accurate ???)
! 
!    ----------------------
!    -- Get_Attribute_Id --
!    ----------------------
! 
!    function Get_Attribute_Id (N : Name_Id) return Attribute_Id is
!    begin
!       return Attribute_Id'Val (N - First_Attribute_Name);
!    end Get_Attribute_Id;
! 
!    ------------------
!    -- Get_Check_Id --
!    ------------------
! 
!    function Get_Check_Id (N : Name_Id) return Check_Id is
!    begin
!       return Check_Id'Val (N - First_Check_Name);
!    end Get_Check_Id;
! 
!    -----------------------
!    -- Get_Convention_Id --
!    -----------------------
! 
!    function Get_Convention_Id (N : Name_Id) return Convention_Id is
!    begin
!       case N is
!          when Name_Ada        => return Convention_Ada;
!          when Name_Assembler  => return Convention_Assembler;
!          when Name_C          => return Convention_C;
!          when Name_COBOL      => return Convention_COBOL;
!          when Name_CPP        => return Convention_CPP;
!          when Name_Fortran    => return Convention_Fortran;
!          when Name_Intrinsic  => return Convention_Intrinsic;
!          when Name_Java       => return Convention_Java;
!          when Name_Stdcall    => return Convention_Stdcall;
!          when Name_Stubbed    => return Convention_Stubbed;
! 
!          --  If no direct match, then we must have a convention
!          --  identifier pragma that has specified this name.
! 
!          when others          =>
!             for J in 1 .. Convention_Identifiers.Last loop
!                if N = Convention_Identifiers.Table (J).Name then
!                   return Convention_Identifiers.Table (J).Convention;
!                end if;
!             end loop;
! 
!             raise Program_Error;
!       end case;
!    end Get_Convention_Id;
! 
!    ---------------------------
!    -- Get_Locking_Policy_Id --
!    ---------------------------
! 
!    function Get_Locking_Policy_Id (N : Name_Id) return Locking_Policy_Id is
!    begin
!       return Locking_Policy_Id'Val (N - First_Locking_Policy_Name);
!    end Get_Locking_Policy_Id;
! 
!    -------------------
!    -- Get_Pragma_Id --
!    -------------------
! 
!    function Get_Pragma_Id (N : Name_Id) return Pragma_Id is
!    begin
!       if N = Name_AST_Entry then
!          return Pragma_AST_Entry;
!       elsif N = Name_Interface then
!          return Pragma_Interface;
!       elsif N = Name_Storage_Size then
!          return Pragma_Storage_Size;
!       elsif N = Name_Storage_Unit then
!          return Pragma_Storage_Unit;
!       elsif N not in First_Pragma_Name .. Last_Pragma_Name then
!          return Unknown_Pragma;
!       else
!          return Pragma_Id'Val (N - First_Pragma_Name);
!       end if;
!    end Get_Pragma_Id;
! 
!    ---------------------------
!    -- Get_Queuing_Policy_Id --
!    ---------------------------
! 
!    function Get_Queuing_Policy_Id (N : Name_Id) return Queuing_Policy_Id is
!    begin
!       return Queuing_Policy_Id'Val (N - First_Queuing_Policy_Name);
!    end Get_Queuing_Policy_Id;
! 
!    ------------------------------------
!    -- Get_Task_Dispatching_Policy_Id --
!    ------------------------------------
! 
!    function Get_Task_Dispatching_Policy_Id (N : Name_Id)
!      return Task_Dispatching_Policy_Id is
!    begin
!       return Task_Dispatching_Policy_Id'Val
!         (N - First_Task_Dispatching_Policy_Name);
!    end Get_Task_Dispatching_Policy_Id;
! 
!    ----------------
!    -- Initialize --
!    ----------------
! 
!    procedure Initialize is
!       P_Index      : Natural;
!       Discard_Name : Name_Id;
! 
!    begin
!       P_Index := Preset_Names'First;
! 
!       loop
!          Name_Len := 0;
! 
!          while Preset_Names (P_Index) /= '#' loop
!             Name_Len := Name_Len + 1;
!             Name_Buffer (Name_Len) := Preset_Names (P_Index);
!             P_Index := P_Index + 1;
!          end loop;
! 
!          --  We do the Name_Find call to enter the name into the table, but
!          --  we don't need to do anything with the result, since we already
!          --  initialized all the preset names to have the right value (we
!          --  are depending on the order of the names and Preset_Names).
! 
!          Discard_Name := Name_Find;
!          P_Index := P_Index + 1;
!          exit when Preset_Names (P_Index) = '#';
!       end loop;
! 
!       --  Make sure that number of names in standard table is correct. If
!       --  this check fails, run utility program XSNAMES to construct a new
!       --  properly matching version of the body.
! 
!       pragma Assert (Discard_Name = Last_Predefined_Name);
! 
!       --  Initialize the convention identifiers table with the standard
!       --  set of synonyms that we recognize for conventions.
! 
!       Convention_Identifiers.Init;
! 
!       Convention_Identifiers.Append ((Name_Asm,      Convention_Assembler));
!       Convention_Identifiers.Append ((Name_Assembly, Convention_Assembler));
! 
!       Convention_Identifiers.Append ((Name_Default,  Convention_C));
!       Convention_Identifiers.Append ((Name_External, Convention_C));
! 
!       Convention_Identifiers.Append ((Name_DLL,      Convention_Stdcall));
!       Convention_Identifiers.Append ((Name_Win32,    Convention_Stdcall));
!    end Initialize;
! 
!    -----------------------
!    -- Is_Attribute_Name --
!    -----------------------
! 
!    function Is_Attribute_Name (N : Name_Id) return Boolean is
!    begin
!       return N in First_Attribute_Name .. Last_Attribute_Name;
!    end Is_Attribute_Name;
! 
!    -------------------
!    -- Is_Check_Name --
!    -------------------
! 
!    function Is_Check_Name (N : Name_Id) return Boolean is
!    begin
!       return N in First_Check_Name .. Last_Check_Name;
!    end Is_Check_Name;
! 
!    ------------------------
!    -- Is_Convention_Name --
!    ------------------------
! 
!    function Is_Convention_Name (N : Name_Id) return Boolean is
!    begin
!       --  Check if this is one of the standard conventions
! 
!       if N in First_Convention_Name .. Last_Convention_Name
!         or else N = Name_C
!       then
!          return True;
! 
!       --  Otherwise check if it is in convention identifier table
! 
!       else
!          for J in 1 .. Convention_Identifiers.Last loop
!             if N = Convention_Identifiers.Table (J).Name then
!                return True;
!             end if;
!          end loop;
! 
!          return False;
!       end if;
!    end Is_Convention_Name;
! 
!    ------------------------------
!    -- Is_Entity_Attribute_Name --
!    ------------------------------
! 
!    function Is_Entity_Attribute_Name (N : Name_Id) return Boolean is
!    begin
!       return N in First_Entity_Attribute_Name .. Last_Entity_Attribute_Name;
!    end Is_Entity_Attribute_Name;
! 
!    --------------------------------
!    -- Is_Function_Attribute_Name --
!    --------------------------------
! 
!    function Is_Function_Attribute_Name (N : Name_Id) return Boolean is
!    begin
!       return N in
!         First_Renamable_Function_Attribute ..
!           Last_Renamable_Function_Attribute;
!    end Is_Function_Attribute_Name;
! 
!    ----------------------------
!    -- Is_Locking_Policy_Name --
!    ----------------------------
! 
!    function Is_Locking_Policy_Name (N : Name_Id) return Boolean is
!    begin
!       return N in First_Locking_Policy_Name .. Last_Locking_Policy_Name;
!    end Is_Locking_Policy_Name;
! 
!    -----------------------------
!    -- Is_Operator_Symbol_Name --
!    -----------------------------
! 
!    function Is_Operator_Symbol_Name (N : Name_Id) return Boolean is
!    begin
!       return N in First_Operator_Name .. Last_Operator_Name;
!    end Is_Operator_Symbol_Name;
! 
!    --------------------
!    -- Is_Pragma_Name --
!    --------------------
! 
!    function Is_Pragma_Name (N : Name_Id) return Boolean is
!    begin
!       return N in First_Pragma_Name .. Last_Pragma_Name
!         or else N = Name_AST_Entry
!         or else N = Name_Interface
!         or else N = Name_Storage_Size
!         or else N = Name_Storage_Unit;
!    end Is_Pragma_Name;
! 
!    ---------------------------------
!    -- Is_Procedure_Attribute_Name --
!    ---------------------------------
! 
!    function Is_Procedure_Attribute_Name (N : Name_Id) return Boolean is
!    begin
!       return N in First_Procedure_Attribute .. Last_Procedure_Attribute;
!    end Is_Procedure_Attribute_Name;
! 
!    ----------------------------
!    -- Is_Queuing_Policy_Name --
!    ----------------------------
! 
!    function Is_Queuing_Policy_Name (N : Name_Id) return Boolean is
!    begin
!       return N in First_Queuing_Policy_Name .. Last_Queuing_Policy_Name;
!    end Is_Queuing_Policy_Name;
! 
!    -------------------------------------
!    -- Is_Task_Dispatching_Policy_Name --
!    -------------------------------------
! 
!    function Is_Task_Dispatching_Policy_Name (N : Name_Id) return Boolean is
!    begin
!       return N in First_Task_Dispatching_Policy_Name ..
!                   Last_Task_Dispatching_Policy_Name;
!    end Is_Task_Dispatching_Policy_Name;
! 
!    ----------------------------
!    -- Is_Type_Attribute_Name --
!    ----------------------------
! 
!    function Is_Type_Attribute_Name (N : Name_Id) return Boolean is
!    begin
!       return N in First_Type_Attribute_Name .. Last_Type_Attribute_Name;
!    end Is_Type_Attribute_Name;
! 
!    ----------------------------------
!    -- Record_Convention_Identifier --
!    ----------------------------------
! 
!    procedure Record_Convention_Identifier
!      (Id         : Name_Id;
!       Convention : Convention_Id)
!    is
!    begin
!       Convention_Identifiers.Append ((Id, Convention));
!    end Record_Convention_Identifier;
! 
! end Snames;
diff -Nrcpad gcc-3.4.3/gcc/ada/snames.ads gcc-4.0.0/gcc/ada/snames.ads
*** gcc-3.4.3/gcc/ada/snames.ads	Thu Nov 20 09:54:02 2003
--- gcc-4.0.0/gcc/ada/snames.ads	Thu Feb 10 13:50:21 2005
***************
*** 1,1417 ****
! ------------------------------------------------------------------------------
! --                                                                          --
! --                         GNAT COMPILER COMPONENTS                         --
! --                                                                          --
! --                               S N A M E S                                --
! --                                                                          --
! --                                 S p e c                                  --
! --                                                                          --
! --          Copyright (C) 1992-2003, Free Software Foundation, Inc.         --
! --                                                                          --
! -- GNAT is free software;  you can  redistribute it  and/or modify it under --
! -- terms of the  GNU General Public License as published  by the Free Soft- --
! -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
! -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
! -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
! -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
! -- for  more details.  You should have  received  a copy of the GNU General --
! -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
! -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
! -- MA 02111-1307, USA.                                                      --
! --                                                                          --
! -- As a special exception,  if other files  instantiate  generics from this --
! -- unit, or you link  this unit with other files  to produce an executable, --
! -- this  unit  does not  by itself cause  the resulting  executable  to  be --
! -- covered  by the  GNU  General  Public  License.  This exception does not --
! -- however invalidate  any other reasons why  the executable file  might be --
! -- covered by the  GNU Public License.                                      --
! --                                                                          --
! -- GNAT was originally developed  by the GNAT team at  New York University. --
! -- Extensive contributions were provided by Ada Core Technologies Inc.      --
! --                                                                          --
! ------------------------------------------------------------------------------
! 
! with Types; use Types;
! 
! package Snames is
! 
! --  This package contains definitions of standard names (i.e. entries in the
! --  Names table) that are used throughout the GNAT compiler). It also contains
! --  the definitions of some enumeration types whose definitions are tied to
! --  the order of these preset names.
! 
! --  WARNING: There is a C file, a-snames.h which duplicates some of the
! --  definitions in this file and must be kept properly synchronized.
! 
!    ------------------
!    -- Preset Names --
!    ------------------
! 
!    --  The following are preset entries in the names table, which are
!    --  entered at the start of every compilation for easy access. Note
!    --  that the order of initialization of these names in the body must
!    --  be coordinated with the order of names in this table.
! 
!    --  Note: a name may not appear more than once in the following list.
!    --  If additional pragmas or attributes are introduced which might
!    --  otherwise cause a duplicate, then list it only once in this table,
!    --  and adjust the definition of the functions for testing for pragma
!    --  names and attribute names, and returning their ID values. Of course
!    --  everything is simpler if no such duplications occur!
! 
!    --  First we have the one character names used to optimize the lookup
!    --  process for one character identifiers (to avoid the hashing in this
!    --  case) There are a full 256 of these, but only the entries for lower
!    --  case and upper case letters have identifiers
! 
!    --  The lower case letter entries are used for one character identifiers
!    --  appearing in the source, for example in pragma Interface (C).
! 
!    Name_A         : constant Name_Id := First_Name_Id + Character'Pos ('a');
!    Name_B         : constant Name_Id := First_Name_Id + Character'Pos ('b');
!    Name_C         : constant Name_Id := First_Name_Id + Character'Pos ('c');
!    Name_D         : constant Name_Id := First_Name_Id + Character'Pos ('d');
!    Name_E         : constant Name_Id := First_Name_Id + Character'Pos ('e');
!    Name_F         : constant Name_Id := First_Name_Id + Character'Pos ('f');
!    Name_G         : constant Name_Id := First_Name_Id + Character'Pos ('g');
!    Name_H         : constant Name_Id := First_Name_Id + Character'Pos ('h');
!    Name_I         : constant Name_Id := First_Name_Id + Character'Pos ('i');
!    Name_J         : constant Name_Id := First_Name_Id + Character'Pos ('j');
!    Name_K         : constant Name_Id := First_Name_Id + Character'Pos ('k');
!    Name_L         : constant Name_Id := First_Name_Id + Character'Pos ('l');
!    Name_M         : constant Name_Id := First_Name_Id + Character'Pos ('m');
!    Name_N         : constant Name_Id := First_Name_Id + Character'Pos ('n');
!    Name_O         : constant Name_Id := First_Name_Id + Character'Pos ('o');
!    Name_P         : constant Name_Id := First_Name_Id + Character'Pos ('p');
!    Name_Q         : constant Name_Id := First_Name_Id + Character'Pos ('q');
!    Name_R         : constant Name_Id := First_Name_Id + Character'Pos ('r');
!    Name_S         : constant Name_Id := First_Name_Id + Character'Pos ('s');
!    Name_T         : constant Name_Id := First_Name_Id + Character'Pos ('t');
!    Name_U         : constant Name_Id := First_Name_Id + Character'Pos ('u');
!    Name_V         : constant Name_Id := First_Name_Id + Character'Pos ('v');
!    Name_W         : constant Name_Id := First_Name_Id + Character'Pos ('w');
!    Name_X         : constant Name_Id := First_Name_Id + Character'Pos ('x');
!    Name_Y         : constant Name_Id := First_Name_Id + Character'Pos ('y');
!    Name_Z         : constant Name_Id := First_Name_Id + Character'Pos ('z');
! 
!    --  The upper case letter entries are used by expander code for local
!    --  variables that do not require unique names (e.g. formal parameter
!    --  names in constructed procedures)
! 
!    Name_uA        : constant Name_Id := First_Name_Id + Character'Pos ('A');
!    Name_uB        : constant Name_Id := First_Name_Id + Character'Pos ('B');
!    Name_uC        : constant Name_Id := First_Name_Id + Character'Pos ('C');
!    Name_uD        : constant Name_Id := First_Name_Id + Character'Pos ('D');
!    Name_uE        : constant Name_Id := First_Name_Id + Character'Pos ('E');
!    Name_uF        : constant Name_Id := First_Name_Id + Character'Pos ('F');
!    Name_uG        : constant Name_Id := First_Name_Id + Character'Pos ('G');
!    Name_uH        : constant Name_Id := First_Name_Id + Character'Pos ('H');
!    Name_uI        : constant Name_Id := First_Name_Id + Character'Pos ('I');
!    Name_uJ        : constant Name_Id := First_Name_Id + Character'Pos ('J');
!    Name_uK        : constant Name_Id := First_Name_Id + Character'Pos ('K');
!    Name_uL        : constant Name_Id := First_Name_Id + Character'Pos ('L');
!    Name_uM        : constant Name_Id := First_Name_Id + Character'Pos ('M');
!    Name_uN        : constant Name_Id := First_Name_Id + Character'Pos ('N');
!    Name_uO        : constant Name_Id := First_Name_Id + Character'Pos ('O');
!    Name_uP        : constant Name_Id := First_Name_Id + Character'Pos ('P');
!    Name_uQ        : constant Name_Id := First_Name_Id + Character'Pos ('Q');
!    Name_uR        : constant Name_Id := First_Name_Id + Character'Pos ('R');
!    Name_uS        : constant Name_Id := First_Name_Id + Character'Pos ('S');
!    Name_uT        : constant Name_Id := First_Name_Id + Character'Pos ('T');
!    Name_uU        : constant Name_Id := First_Name_Id + Character'Pos ('U');
!    Name_uV        : constant Name_Id := First_Name_Id + Character'Pos ('V');
!    Name_uW        : constant Name_Id := First_Name_Id + Character'Pos ('W');
!    Name_uX        : constant Name_Id := First_Name_Id + Character'Pos ('X');
!    Name_uY        : constant Name_Id := First_Name_Id + Character'Pos ('Y');
!    Name_uZ        : constant Name_Id := First_Name_Id + Character'Pos ('Z');
! 
!    --  Note: the following table is read by the utility program XSNAMES and
!    --  its format should not be changed without coordinating with this program.
! 
!    N : constant Name_Id := First_Name_Id + 256;
!    --  Synonym used in standard name definitions
! 
!    --  Some names that are used by gigi, and whose definitions are reflected
!    --  in the C header file a-snames.h. They are placed at the start so that
!    --  the need to modify a-snames.h is minimized.
! 
!    Name_uParent                        : constant Name_Id := N + 000;
!    Name_uTag                           : constant Name_Id := N + 001;
!    Name_Off                            : constant Name_Id := N + 002;
!    Name_Space                          : constant Name_Id := N + 003;
!    Name_Time                           : constant Name_Id := N + 004;
! 
!    --  Some special names used by the expander. Note that the lower case u's
!    --  at the start of these names get translated to extra underscores. These
!    --  names are only referenced internally by expander generated code.
! 
!    Name_uAbort_Signal                  : constant Name_Id := N + 005;
!    Name_uAlignment                     : constant Name_Id := N + 006;
!    Name_uAssign                        : constant Name_Id := N + 007;
!    Name_uChain                         : constant Name_Id := N + 008;
!    Name_uClean                         : constant Name_Id := N + 009;
!    Name_uController                    : constant Name_Id := N + 010;
!    Name_uEntry_Bodies                  : constant Name_Id := N + 011;
!    Name_uExpunge                       : constant Name_Id := N + 012;
!    Name_uFinal_List                    : constant Name_Id := N + 013;
!    Name_uIdepth                        : constant Name_Id := N + 014;
!    Name_uInit                          : constant Name_Id := N + 015;
!    Name_uLocal_Final_List              : constant Name_Id := N + 016;
!    Name_uMaster                        : constant Name_Id := N + 017;
!    Name_uObject                        : constant Name_Id := N + 018;
!    Name_uPriority                      : constant Name_Id := N + 019;
!    Name_uProcess_ATSD                  : constant Name_Id := N + 020;
!    Name_uSecondary_Stack               : constant Name_Id := N + 021;
!    Name_uService                       : constant Name_Id := N + 022;
!    Name_uSize                          : constant Name_Id := N + 023;
!    Name_uTags                          : constant Name_Id := N + 024;
!    Name_uTask                          : constant Name_Id := N + 025;
!    Name_uTask_Id                       : constant Name_Id := N + 026;
!    Name_uTask_Info                     : constant Name_Id := N + 027;
!    Name_uTask_Name                     : constant Name_Id := N + 028;
!    Name_uTrace_Sp                      : constant Name_Id := N + 029;
! 
!    --  Names of routines in Ada.Finalization, needed by expander
! 
!    Name_Initialize                     : constant Name_Id := N + 030;
!    Name_Adjust                         : constant Name_Id := N + 031;
!    Name_Finalize                       : constant Name_Id := N + 032;
! 
!    --  Names of fields declared in System.Finalization_Implementation,
!    --  needed by the expander when generating code for finalization.
! 
!    Name_Next                           : constant Name_Id := N + 033;
!    Name_Prev                           : constant Name_Id := N + 034;
! 
!    --  Names of allocation routines, also needed by expander
! 
!    Name_Allocate                       : constant Name_Id := N + 035;
!    Name_Deallocate                     : constant Name_Id := N + 036;
!    Name_Dereference                    : constant Name_Id := N + 037;
! 
!    --  Names of Text_IO generic subpackages (see Rtsfind.Text_IO_Kludge)
! 
!    First_Text_IO_Package               : constant Name_Id := N + 038;
!    Name_Decimal_IO                     : constant Name_Id := N + 038;
!    Name_Enumeration_IO                 : constant Name_Id := N + 039;
!    Name_Fixed_IO                       : constant Name_Id := N + 040;
!    Name_Float_IO                       : constant Name_Id := N + 041;
!    Name_Integer_IO                     : constant Name_Id := N + 042;
!    Name_Modular_IO                     : constant Name_Id := N + 043;
!    Last_Text_IO_Package                : constant Name_Id := N + 043;
! 
!    subtype Text_IO_Package_Name is Name_Id
!      range First_Text_IO_Package .. Last_Text_IO_Package;
! 
!    --  Names of files in library for Ada.Text_IO and Ada.Wide_Text_IO
! 
!    Name_a_textio                       : constant Name_Id := N + 044;
!    Name_a_witeio                       : constant Name_Id := N + 045;
! 
!    --  Some miscellaneous names used for error detection/recovery
! 
!    Name_Const                          : constant Name_Id := N + 046;
!    Name_Error                          : constant Name_Id := N + 047;
!    Name_Go                             : constant Name_Id := N + 048;
!    Name_Put                            : constant Name_Id := N + 049;
!    Name_Put_Line                       : constant Name_Id := N + 050;
!    Name_To                             : constant Name_Id := N + 051;
! 
!    --  Names for packages that are treated specially by the compiler
! 
!    Name_Finalization                   : constant Name_Id := N + 052;
!    Name_Finalization_Root              : constant Name_Id := N + 053;
!    Name_Interfaces                     : constant Name_Id := N + 054;
!    Name_Standard                       : constant Name_Id := N + 055;
!    Name_System                         : constant Name_Id := N + 056;
!    Name_Text_IO                        : constant Name_Id := N + 057;
!    Name_Wide_Text_IO                   : constant Name_Id := N + 058;
! 
!    --  Names of identifiers used in expanding distribution stubs
! 
!    Name_Addr                           : constant Name_Id := N + 059;
!    Name_Async                          : constant Name_Id := N + 060;
!    Name_Get_Active_Partition_ID        : constant Name_Id := N + 061;
!    Name_Get_RCI_Package_Receiver       : constant Name_Id := N + 062;
!    Name_Origin                         : constant Name_Id := N + 063;
!    Name_Params                         : constant Name_Id := N + 064;
!    Name_Partition                      : constant Name_Id := N + 065;
!    Name_Partition_Interface            : constant Name_Id := N + 066;
!    Name_Ras                            : constant Name_Id := N + 067;
!    Name_RCI_Name                       : constant Name_Id := N + 068;
!    Name_Receiver                       : constant Name_Id := N + 069;
!    Name_Result                         : constant Name_Id := N + 070;
!    Name_Rpc                            : constant Name_Id := N + 071;
!    Name_Subp_Id                        : constant Name_Id := N + 072;
! 
!    --  Operator Symbol entries. The actual names have an upper case O at
!    --  the start in place of the Op_ prefix (e.g. the actual name that
!    --  corresponds to Name_Op_Abs is "Oabs".
! 
!    First_Operator_Name                 : constant Name_Id := N + 073;
!    Name_Op_Abs                         : constant Name_Id := N + 073; -- "abs"
!    Name_Op_And                         : constant Name_Id := N + 074; -- "and"
!    Name_Op_Mod                         : constant Name_Id := N + 075; -- "mod"
!    Name_Op_Not                         : constant Name_Id := N + 076; -- "not"
!    Name_Op_Or                          : constant Name_Id := N + 077; -- "or"
!    Name_Op_Rem                         : constant Name_Id := N + 078; -- "rem"
!    Name_Op_Xor                         : constant Name_Id := N + 079; -- "xor"
!    Name_Op_Eq                          : constant Name_Id := N + 080; -- "="
!    Name_Op_Ne                          : constant Name_Id := N + 081; -- "/="
!    Name_Op_Lt                          : constant Name_Id := N + 082; -- "<"
!    Name_Op_Le                          : constant Name_Id := N + 083; -- "<="
!    Name_Op_Gt                          : constant Name_Id := N + 084; -- ">"
!    Name_Op_Ge                          : constant Name_Id := N + 085; -- ">="
!    Name_Op_Add                         : constant Name_Id := N + 086; -- "+"
!    Name_Op_Subtract                    : constant Name_Id := N + 087; -- "-"
!    Name_Op_Concat                      : constant Name_Id := N + 088; -- "&"
!    Name_Op_Multiply                    : constant Name_Id := N + 089; -- "*"
!    Name_Op_Divide                      : constant Name_Id := N + 090; -- "/"
!    Name_Op_Expon                       : constant Name_Id := N + 091; -- "**"
!    Last_Operator_Name                  : constant Name_Id := N + 091;
! 
!    --  Names for all pragmas recognized by GNAT. The entries with the comment
!    --  "Ada 83" are pragmas that are defined in Ada 83, but not in Ada 95.
!    --  These pragmas are fully implemented in both Ada 83 and Ada 95 modes
!    --  in GNAT.
! 
!    --  The entries marked GNAT are pragmas that are defined by GNAT
!    --  and implemented in both Ada 83 and Ada 95 modes. Full descriptions
!    --  of these implementation dependent pragmas may be found in the
!    --  appropriate section in unit Sem_Prag in file sem-prag.adb.
! 
!    --  The entries marked VMS are VMS specific pragmas that are recognized
!    --  only in OpenVMS versions of GNAT. They are ignored in other versions
!    --  with an appropriate warning.
! 
!    --  The entries marked AAMP are AAMP specific pragmas that are recognized
!    --  only in GNAT for the AAMP. They are ignored in other versions with
!    --  appropriate warnings.
! 
!    First_Pragma_Name                   : constant Name_Id := N + 092;
! 
!    --  Configuration pragmas are grouped at start
! 
!    Name_Ada_83                         : constant Name_Id := N + 092; -- GNAT
!    Name_Ada_95                         : constant Name_Id := N + 093; -- GNAT
!    Name_C_Pass_By_Copy                 : constant Name_Id := N + 094; -- GNAT
!    Name_Compile_Time_Warning           : constant Name_Id := N + 095; -- GNAT
!    Name_Component_Alignment            : constant Name_Id := N + 096; -- GNAT
!    Name_Convention_Identifier          : constant Name_Id := N + 097; -- GNAT
!    Name_Discard_Names                  : constant Name_Id := N + 098;
!    Name_Elaboration_Checks             : constant Name_Id := N + 099; -- GNAT
!    Name_Eliminate                      : constant Name_Id := N + 100; -- GNAT
!    Name_Explicit_Overriding            : constant Name_Id := N + 101;
!    Name_Extend_System                  : constant Name_Id := N + 102; -- GNAT
!    Name_Extensions_Allowed             : constant Name_Id := N + 103; -- GNAT
!    Name_External_Name_Casing           : constant Name_Id := N + 104; -- GNAT
!    Name_Float_Representation           : constant Name_Id := N + 105; -- GNAT
!    Name_Initialize_Scalars             : constant Name_Id := N + 106; -- GNAT
!    Name_Interrupt_State                : constant Name_Id := N + 107; -- GNAT
!    Name_License                        : constant Name_Id := N + 108; -- GNAT
!    Name_Locking_Policy                 : constant Name_Id := N + 109;
!    Name_Long_Float                     : constant Name_Id := N + 110; -- VMS
!    Name_No_Run_Time                    : constant Name_Id := N + 111; -- GNAT
!    Name_Normalize_Scalars              : constant Name_Id := N + 112;
!    Name_Polling                        : constant Name_Id := N + 113; -- GNAT
!    Name_Persistent_Data                : constant Name_Id := N + 114; -- GNAT
!    Name_Persistent_Object              : constant Name_Id := N + 115; -- GNAT
!    Name_Propagate_Exceptions           : constant Name_Id := N + 116; -- GNAT
!    Name_Queuing_Policy                 : constant Name_Id := N + 117;
!    Name_Ravenscar                      : constant Name_Id := N + 118;
!    Name_Restricted_Run_Time            : constant Name_Id := N + 119;
!    Name_Restrictions                   : constant Name_Id := N + 120;
!    Name_Restriction_Warnings           : constant Name_Id := N + 121; -- GNAT
!    Name_Reviewable                     : constant Name_Id := N + 122;
!    Name_Source_File_Name               : constant Name_Id := N + 123; -- GNAT
!    Name_Source_File_Name_Project       : constant Name_Id := N + 124; -- GNAT
!    Name_Style_Checks                   : constant Name_Id := N + 125; -- GNAT
!    Name_Suppress                       : constant Name_Id := N + 126;
!    Name_Suppress_Exception_Locations   : constant Name_Id := N + 127; -- GNAT
!    Name_Task_Dispatching_Policy        : constant Name_Id := N + 128;
!    Name_Universal_Data                 : constant Name_Id := N + 129; -- AAMP
!    Name_Unsuppress                     : constant Name_Id := N + 130; -- GNAT
!    Name_Use_VADS_Size                  : constant Name_Id := N + 131; -- GNAT
!    Name_Validity_Checks                : constant Name_Id := N + 132; -- GNAT
!    Name_Warnings                       : constant Name_Id := N + 133; -- GNAT
!    Last_Configuration_Pragma_Name      : constant Name_Id := N + 133;
! 
!    --  Remaining pragma names
! 
!    Name_Abort_Defer                    : constant Name_Id := N + 134; -- GNAT
!    Name_All_Calls_Remote               : constant Name_Id := N + 135;
!    Name_Annotate                       : constant Name_Id := N + 136; -- GNAT
! 
!    --  Note: AST_Entry is not in this list because its name matches the
!    --  name of the corresponding attribute. However, it is included in the
!    --  definition of the type Attribute_Id, and the functions Get_Pragma_Id
!    --  and Check_Pragma_Id correctly recognize and process Name_AST_Entry.
!    --  AST_Entry is a VMS specific pragma.
! 
!    Name_Assert                         : constant Name_Id := N + 137; -- GNAT
!    Name_Asynchronous                   : constant Name_Id := N + 138;
!    Name_Atomic                         : constant Name_Id := N + 139;
!    Name_Atomic_Components              : constant Name_Id := N + 140;
!    Name_Attach_Handler                 : constant Name_Id := N + 141;
!    Name_Comment                        : constant Name_Id := N + 142; -- GNAT
!    Name_Common_Object                  : constant Name_Id := N + 143; -- GNAT
!    Name_Complex_Representation         : constant Name_Id := N + 144; -- GNAT
!    Name_Controlled                     : constant Name_Id := N + 145;
!    Name_Convention                     : constant Name_Id := N + 146;
!    Name_CPP_Class                      : constant Name_Id := N + 147; -- GNAT
!    Name_CPP_Constructor                : constant Name_Id := N + 148; -- GNAT
!    Name_CPP_Virtual                    : constant Name_Id := N + 149; -- GNAT
!    Name_CPP_Vtable                     : constant Name_Id := N + 150; -- GNAT
!    Name_Debug                          : constant Name_Id := N + 151; -- GNAT
!    Name_Elaborate                      : constant Name_Id := N + 152; -- Ada 83
!    Name_Elaborate_All                  : constant Name_Id := N + 153;
!    Name_Elaborate_Body                 : constant Name_Id := N + 154;
!    Name_Export                         : constant Name_Id := N + 155;
!    Name_Export_Exception               : constant Name_Id := N + 156; -- VMS
!    Name_Export_Function                : constant Name_Id := N + 157; -- GNAT
!    Name_Export_Object                  : constant Name_Id := N + 158; -- GNAT
!    Name_Export_Procedure               : constant Name_Id := N + 159; -- GNAT
!    Name_Export_Value                   : constant Name_Id := N + 160; -- GNAT
!    Name_Export_Valued_Procedure        : constant Name_Id := N + 161; -- GNAT
!    Name_External                       : constant Name_Id := N + 162; -- GNAT
!    Name_Finalize_Storage_Only          : constant Name_Id := N + 163; -- GNAT
!    Name_Ident                          : constant Name_Id := N + 164; -- VMS
!    Name_Import                         : constant Name_Id := N + 165;
!    Name_Import_Exception               : constant Name_Id := N + 166; -- VMS
!    Name_Import_Function                : constant Name_Id := N + 167; -- GNAT
!    Name_Import_Object                  : constant Name_Id := N + 168; -- GNAT
!    Name_Import_Procedure               : constant Name_Id := N + 169; -- GNAT
!    Name_Import_Valued_Procedure        : constant Name_Id := N + 170; -- GNAT
!    Name_Inline                         : constant Name_Id := N + 171;
!    Name_Inline_Always                  : constant Name_Id := N + 172; -- GNAT
!    Name_Inline_Generic                 : constant Name_Id := N + 173; -- GNAT
!    Name_Inspection_Point               : constant Name_Id := N + 174;
!    Name_Interface                      : constant Name_Id := N + 175; -- Ada 83
!    Name_Interface_Name                 : constant Name_Id := N + 176; -- GNAT
!    Name_Interrupt_Handler              : constant Name_Id := N + 177;
!    Name_Interrupt_Priority             : constant Name_Id := N + 178;
!    Name_Java_Constructor               : constant Name_Id := N + 179; -- GNAT
!    Name_Java_Interface                 : constant Name_Id := N + 180; -- GNAT
!    Name_Keep_Names                     : constant Name_Id := N + 181; -- GNAT
!    Name_Link_With                      : constant Name_Id := N + 182; -- GNAT
!    Name_Linker_Alias                   : constant Name_Id := N + 183; -- GNAT
!    Name_Linker_Options                 : constant Name_Id := N + 184;
!    Name_Linker_Section                 : constant Name_Id := N + 185; -- GNAT
!    Name_List                           : constant Name_Id := N + 186;
!    Name_Machine_Attribute              : constant Name_Id := N + 187; -- GNAT
!    Name_Main                           : constant Name_Id := N + 188; -- GNAT
!    Name_Main_Storage                   : constant Name_Id := N + 189; -- GNAT
!    Name_Memory_Size                    : constant Name_Id := N + 190; -- Ada 83
!    Name_No_Return                      : constant Name_Id := N + 191; -- GNAT
!    Name_Obsolescent                    : constant Name_Id := N + 192; -- GNAT
!    Name_Optimize                       : constant Name_Id := N + 193;
!    Name_Optional_Overriding            : constant Name_Id := N + 194;
!    Name_Overriding                     : constant Name_Id := N + 195;
!    Name_Pack                           : constant Name_Id := N + 196;
!    Name_Page                           : constant Name_Id := N + 197;
!    Name_Passive                        : constant Name_Id := N + 198; -- GNAT
!    Name_Preelaborate                   : constant Name_Id := N + 199;
!    Name_Priority                       : constant Name_Id := N + 200;
!    Name_Psect_Object                   : constant Name_Id := N + 201; -- VMS
!    Name_Pure                           : constant Name_Id := N + 202;
!    Name_Pure_Function                  : constant Name_Id := N + 203; -- GNAT
!    Name_Remote_Call_Interface          : constant Name_Id := N + 204;
!    Name_Remote_Types                   : constant Name_Id := N + 205;
!    Name_Share_Generic                  : constant Name_Id := N + 206; -- GNAT
!    Name_Shared                         : constant Name_Id := N + 207; -- Ada 83
!    Name_Shared_Passive                 : constant Name_Id := N + 208;
! 
!    --  Note: Storage_Size is not in this list because its name matches the
!    --  name of the corresponding attribute. However, it is included in the
!    --  definition of the type Attribute_Id, and the functions Get_Pragma_Id
!    --  and Check_Pragma_Id correctly recognize and process Name_Storage_Size.
! 
!    --  Note: Storage_Unit is also omitted from the list because of a clash
!    --  with an attribute name, and is treated similarly.
! 
!    Name_Source_Reference               : constant Name_Id := N + 209; -- GNAT
!    Name_Stream_Convert                 : constant Name_Id := N + 210; -- GNAT
!    Name_Subtitle                       : constant Name_Id := N + 211; -- GNAT
!    Name_Suppress_All                   : constant Name_Id := N + 212; -- GNAT
!    Name_Suppress_Debug_Info            : constant Name_Id := N + 213; -- GNAT
!    Name_Suppress_Initialization        : constant Name_Id := N + 214; -- GNAT
!    Name_System_Name                    : constant Name_Id := N + 215; -- Ada 83
!    Name_Task_Info                      : constant Name_Id := N + 216; -- GNAT
!    Name_Task_Name                      : constant Name_Id := N + 217; -- GNAT
!    Name_Task_Storage                   : constant Name_Id := N + 218; -- VMS
!    Name_Thread_Body                    : constant Name_Id := N + 219; -- GNAT
!    Name_Time_Slice                     : constant Name_Id := N + 220; -- GNAT
!    Name_Title                          : constant Name_Id := N + 221; -- GNAT
!    Name_Unchecked_Union                : constant Name_Id := N + 222; -- GNAT
!    Name_Unimplemented_Unit             : constant Name_Id := N + 223; -- GNAT
!    Name_Unreferenced                   : constant Name_Id := N + 224; -- GNAT
!    Name_Unreserve_All_Interrupts       : constant Name_Id := N + 225; -- GNAT
!    Name_Volatile                       : constant Name_Id := N + 226;
!    Name_Volatile_Components            : constant Name_Id := N + 227;
!    Name_Weak_External                  : constant Name_Id := N + 228; -- GNAT
!    Last_Pragma_Name                    : constant Name_Id := N + 228;
! 
!    --  Language convention names for pragma Convention/Export/Import/Interface
!    --  Note that Name_C is not included in this list, since it was already
!    --  declared earlier in the context of one-character identifier names
!    --  (where the order is critical to the fast look up process).
! 
!    --  Note: there are no convention names corresponding to the conventions
!    --  Entry and Protected, this is because these conventions cannot be
!    --  specified by a pragma.
! 
!    First_Convention_Name               : constant Name_Id := N + 229;
!    Name_Ada                            : constant Name_Id := N + 229;
!    Name_Assembler                      : constant Name_Id := N + 230;
!    Name_COBOL                          : constant Name_Id := N + 231;
!    Name_CPP                            : constant Name_Id := N + 232;
!    Name_Fortran                        : constant Name_Id := N + 233;
!    Name_Intrinsic                      : constant Name_Id := N + 234;
!    Name_Java                           : constant Name_Id := N + 235;
!    Name_Stdcall                        : constant Name_Id := N + 236;
!    Name_Stubbed                        : constant Name_Id := N + 237;
!    Last_Convention_Name                : constant Name_Id := N + 237;
! 
!    --  The following names are preset as synonyms for Assembler
! 
!    Name_Asm                            : constant Name_Id := N + 238;
!    Name_Assembly                       : constant Name_Id := N + 239;
! 
!    --  The following names are preset as synonyms for C
! 
!    Name_Default                        : constant Name_Id := N + 240;
!    --  Name_Exernal (previously defined as pragma)
! 
!    --  The following names are present as synonyms for Stdcall
! 
!    Name_DLL                            : constant Name_Id := N + 241;
!    Name_Win32                          : constant Name_Id := N + 242;
! 
!    --  Other special names used in processing pragma arguments
! 
!    Name_As_Is                          : constant Name_Id := N + 243;
!    Name_Body_File_Name                 : constant Name_Id := N + 244;
!    Name_Casing                         : constant Name_Id := N + 245;
!    Name_Code                           : constant Name_Id := N + 246;
!    Name_Component                      : constant Name_Id := N + 247;
!    Name_Component_Size_4               : constant Name_Id := N + 248;
!    Name_Copy                           : constant Name_Id := N + 249;
!    Name_D_Float                        : constant Name_Id := N + 250;
!    Name_Descriptor                     : constant Name_Id := N + 251;
!    Name_Dot_Replacement                : constant Name_Id := N + 252;
!    Name_Dynamic                        : constant Name_Id := N + 253;
!    Name_Entity                         : constant Name_Id := N + 254;
!    Name_External_Name                  : constant Name_Id := N + 255;
!    Name_First_Optional_Parameter       : constant Name_Id := N + 256;
!    Name_Form                           : constant Name_Id := N + 257;
!    Name_G_Float                        : constant Name_Id := N + 258;
!    Name_Gcc                            : constant Name_Id := N + 259;
!    Name_Gnat                           : constant Name_Id := N + 260;
!    Name_GPL                            : constant Name_Id := N + 261;
!    Name_IEEE_Float                     : constant Name_Id := N + 262;
!    Name_Homonym_Number                 : constant Name_Id := N + 263;
!    Name_Internal                       : constant Name_Id := N + 264;
!    Name_Link_Name                      : constant Name_Id := N + 265;
!    Name_Lowercase                      : constant Name_Id := N + 266;
!    Name_Max_Size                       : constant Name_Id := N + 267;
!    Name_Mechanism                      : constant Name_Id := N + 268;
!    Name_Mixedcase                      : constant Name_Id := N + 269;
!    Name_Modified_GPL                   : constant Name_Id := N + 270;
!    Name_Name                           : constant Name_Id := N + 271;
!    Name_NCA                            : constant Name_Id := N + 272;
!    Name_No                             : constant Name_Id := N + 273;
!    Name_On                             : constant Name_Id := N + 274;
!    Name_Parameter_Types                : constant Name_Id := N + 275;
!    Name_Reference                      : constant Name_Id := N + 276;
!    Name_Restricted                     : constant Name_Id := N + 277;
!    Name_Result_Mechanism               : constant Name_Id := N + 278;
!    Name_Result_Type                    : constant Name_Id := N + 279;
!    Name_Runtime                        : constant Name_Id := N + 280;
!    Name_SB                             : constant Name_Id := N + 281;
!    Name_Secondary_Stack_Size           : constant Name_Id := N + 282;
!    Name_Section                        : constant Name_Id := N + 283;
!    Name_Semaphore                      : constant Name_Id := N + 284;
!    Name_Spec_File_Name                 : constant Name_Id := N + 285;
!    Name_Static                         : constant Name_Id := N + 286;
!    Name_Stack_Size                     : constant Name_Id := N + 287;
!    Name_Subunit_File_Name              : constant Name_Id := N + 288;
!    Name_Task_Stack_Size_Default        : constant Name_Id := N + 289;
!    Name_Task_Type                      : constant Name_Id := N + 290;
!    Name_Time_Slicing_Enabled           : constant Name_Id := N + 291;
!    Name_Top_Guard                      : constant Name_Id := N + 292;
!    Name_UBA                            : constant Name_Id := N + 293;
!    Name_UBS                            : constant Name_Id := N + 294;
!    Name_UBSB                           : constant Name_Id := N + 295;
!    Name_Unit_Name                      : constant Name_Id := N + 296;
!    Name_Unknown                        : constant Name_Id := N + 297;
!    Name_Unrestricted                   : constant Name_Id := N + 298;
!    Name_Uppercase                      : constant Name_Id := N + 299;
!    Name_User                           : constant Name_Id := N + 300;
!    Name_VAX_Float                      : constant Name_Id := N + 301;
!    Name_VMS                            : constant Name_Id := N + 302;
!    Name_Working_Storage                : constant Name_Id := N + 303;
! 
!    --  Names of recognized attributes. The entries with the comment "Ada 83"
!    --  are attributes that are defined in Ada 83, but not in Ada 95. These
!    --  attributes are implemented in both Ada 83 and Ada 95 modes in GNAT.
! 
!    --  The entries marked GNAT are attributes that are defined by GNAT
!    --  and implemented in both Ada 83 and Ada 95 modes. Full descriptions
!    --  of these implementation dependent attributes may be found in the
!    --  appropriate section in package Sem_Attr in file sem-attr.ads.
! 
!    --  The entries marked VMS are recognized only in OpenVMS implementations
!    --  of GNAT, and are treated as illegal in all other contexts.
! 
!    First_Attribute_Name                : constant Name_Id := N + 304;
!    Name_Abort_Signal                   : constant Name_Id := N + 304;  -- GNAT
!    Name_Access                         : constant Name_Id := N + 305;
!    Name_Address                        : constant Name_Id := N + 306;
!    Name_Address_Size                   : constant Name_Id := N + 307;  -- GNAT
!    Name_Aft                            : constant Name_Id := N + 308;
!    Name_Alignment                      : constant Name_Id := N + 309;
!    Name_Asm_Input                      : constant Name_Id := N + 310;  -- GNAT
!    Name_Asm_Output                     : constant Name_Id := N + 311;  -- GNAT
!    Name_AST_Entry                      : constant Name_Id := N + 312;  -- VMS
!    Name_Bit                            : constant Name_Id := N + 313;  -- GNAT
!    Name_Bit_Order                      : constant Name_Id := N + 314;
!    Name_Bit_Position                   : constant Name_Id := N + 315;  -- GNAT
!    Name_Body_Version                   : constant Name_Id := N + 316;
!    Name_Callable                       : constant Name_Id := N + 317;
!    Name_Caller                         : constant Name_Id := N + 318;
!    Name_Code_Address                   : constant Name_Id := N + 319;  -- GNAT
!    Name_Component_Size                 : constant Name_Id := N + 320;
!    Name_Compose                        : constant Name_Id := N + 321;
!    Name_Constrained                    : constant Name_Id := N + 322;
!    Name_Count                          : constant Name_Id := N + 323;
!    Name_Default_Bit_Order              : constant Name_Id := N + 324; -- GNAT
!    Name_Definite                       : constant Name_Id := N + 325;
!    Name_Delta                          : constant Name_Id := N + 326;
!    Name_Denorm                         : constant Name_Id := N + 327;
!    Name_Digits                         : constant Name_Id := N + 328;
!    Name_Elaborated                     : constant Name_Id := N + 329; -- GNAT
!    Name_Emax                           : constant Name_Id := N + 330; -- Ada 83
!    Name_Enum_Rep                       : constant Name_Id := N + 331; -- GNAT
!    Name_Epsilon                        : constant Name_Id := N + 332; -- Ada 83
!    Name_Exponent                       : constant Name_Id := N + 333;
!    Name_External_Tag                   : constant Name_Id := N + 334;
!    Name_First                          : constant Name_Id := N + 335;
!    Name_First_Bit                      : constant Name_Id := N + 336;
!    Name_Fixed_Value                    : constant Name_Id := N + 337; -- GNAT
!    Name_Fore                           : constant Name_Id := N + 338;
!    Name_Has_Discriminants              : constant Name_Id := N + 339; -- GNAT
!    Name_Identity                       : constant Name_Id := N + 340;
!    Name_Img                            : constant Name_Id := N + 341; -- GNAT
!    Name_Integer_Value                  : constant Name_Id := N + 342; -- GNAT
!    Name_Large                          : constant Name_Id := N + 343; -- Ada 83
!    Name_Last                           : constant Name_Id := N + 344;
!    Name_Last_Bit                       : constant Name_Id := N + 345;
!    Name_Leading_Part                   : constant Name_Id := N + 346;
!    Name_Length                         : constant Name_Id := N + 347;
!    Name_Machine_Emax                   : constant Name_Id := N + 348;
!    Name_Machine_Emin                   : constant Name_Id := N + 349;
!    Name_Machine_Mantissa               : constant Name_Id := N + 350;
!    Name_Machine_Overflows              : constant Name_Id := N + 351;
!    Name_Machine_Radix                  : constant Name_Id := N + 352;
!    Name_Machine_Rounds                 : constant Name_Id := N + 353;
!    Name_Machine_Size                   : constant Name_Id := N + 354; -- GNAT
!    Name_Mantissa                       : constant Name_Id := N + 355; -- Ada 83
!    Name_Max_Size_In_Storage_Elements   : constant Name_Id := N + 356;
!    Name_Maximum_Alignment              : constant Name_Id := N + 357; -- GNAT
!    Name_Mechanism_Code                 : constant Name_Id := N + 358; -- GNAT
!    Name_Model_Emin                     : constant Name_Id := N + 359;
!    Name_Model_Epsilon                  : constant Name_Id := N + 360;
!    Name_Model_Mantissa                 : constant Name_Id := N + 361;
!    Name_Model_Small                    : constant Name_Id := N + 362;
!    Name_Modulus                        : constant Name_Id := N + 363;
!    Name_Null_Parameter                 : constant Name_Id := N + 364; -- GNAT
!    Name_Object_Size                    : constant Name_Id := N + 365; -- GNAT
!    Name_Partition_ID                   : constant Name_Id := N + 366;
!    Name_Passed_By_Reference            : constant Name_Id := N + 367; -- GNAT
!    Name_Pool_Address                   : constant Name_Id := N + 368;
!    Name_Pos                            : constant Name_Id := N + 369;
!    Name_Position                       : constant Name_Id := N + 370;
!    Name_Range                          : constant Name_Id := N + 371;
!    Name_Range_Length                   : constant Name_Id := N + 372; -- GNAT
!    Name_Round                          : constant Name_Id := N + 373;
!    Name_Safe_Emax                      : constant Name_Id := N + 374; -- Ada 83
!    Name_Safe_First                     : constant Name_Id := N + 375;
!    Name_Safe_Large                     : constant Name_Id := N + 376; -- Ada 83
!    Name_Safe_Last                      : constant Name_Id := N + 377;
!    Name_Safe_Small                     : constant Name_Id := N + 378; -- Ada 83
!    Name_Scale                          : constant Name_Id := N + 379;
!    Name_Scaling                        : constant Name_Id := N + 380;
!    Name_Signed_Zeros                   : constant Name_Id := N + 381;
!    Name_Size                           : constant Name_Id := N + 382;
!    Name_Small                          : constant Name_Id := N + 383;
!    Name_Storage_Size                   : constant Name_Id := N + 384;
!    Name_Storage_Unit                   : constant Name_Id := N + 385; -- GNAT
!    Name_Tag                            : constant Name_Id := N + 386;
!    Name_Target_Name                    : constant Name_Id := N + 387; -- GNAT
!    Name_Terminated                     : constant Name_Id := N + 388;
!    Name_To_Address                     : constant Name_Id := N + 389; -- GNAT
!    Name_Type_Class                     : constant Name_Id := N + 390; -- GNAT
!    Name_UET_Address                    : constant Name_Id := N + 391; -- GNAT
!    Name_Unbiased_Rounding              : constant Name_Id := N + 392;
!    Name_Unchecked_Access               : constant Name_Id := N + 393;
!    Name_Unconstrained_Array            : constant Name_Id := N + 394;
!    Name_Universal_Literal_String       : constant Name_Id := N + 395; -- GNAT
!    Name_Unrestricted_Access            : constant Name_Id := N + 396; -- GNAT
!    Name_VADS_Size                      : constant Name_Id := N + 397; -- GNAT
!    Name_Val                            : constant Name_Id := N + 398;
!    Name_Valid                          : constant Name_Id := N + 399;
!    Name_Value_Size                     : constant Name_Id := N + 400; -- GNAT
!    Name_Version                        : constant Name_Id := N + 401;
!    Name_Wchar_T_Size                   : constant Name_Id := N + 402; -- GNAT
!    Name_Wide_Width                     : constant Name_Id := N + 403;
!    Name_Width                          : constant Name_Id := N + 404;
!    Name_Word_Size                      : constant Name_Id := N + 405; -- GNAT
! 
!    --  Attributes that designate attributes returning renamable functions,
!    --  i.e. functions that return other than a universal value.
! 
!    First_Renamable_Function_Attribute  : constant Name_Id := N + 406;
!    Name_Adjacent                       : constant Name_Id := N + 406;
!    Name_Ceiling                        : constant Name_Id := N + 407;
!    Name_Copy_Sign                      : constant Name_Id := N + 408;
!    Name_Floor                          : constant Name_Id := N + 409;
!    Name_Fraction                       : constant Name_Id := N + 410;
!    Name_Image                          : constant Name_Id := N + 411;
!    Name_Input                          : constant Name_Id := N + 412;
!    Name_Machine                        : constant Name_Id := N + 413;
!    Name_Max                            : constant Name_Id := N + 414;
!    Name_Min                            : constant Name_Id := N + 415;
!    Name_Model                          : constant Name_Id := N + 416;
!    Name_Pred                           : constant Name_Id := N + 417;
!    Name_Remainder                      : constant Name_Id := N + 418;
!    Name_Rounding                       : constant Name_Id := N + 419;
!    Name_Succ                           : constant Name_Id := N + 420;
!    Name_Truncation                     : constant Name_Id := N + 421;
!    Name_Value                          : constant Name_Id := N + 422;
!    Name_Wide_Image                     : constant Name_Id := N + 423;
!    Name_Wide_Value                     : constant Name_Id := N + 424;
!    Last_Renamable_Function_Attribute   : constant Name_Id := N + 424;
! 
!    --  Attributes that designate procedures
! 
!    First_Procedure_Attribute           : constant Name_Id := N + 425;
!    Name_Output                         : constant Name_Id := N + 425;
!    Name_Read                           : constant Name_Id := N + 426;
!    Name_Write                          : constant Name_Id := N + 427;
!    Last_Procedure_Attribute            : constant Name_Id := N + 427;
! 
!    --  Remaining attributes are ones that return entities
! 
!    First_Entity_Attribute_Name         : constant Name_Id := N + 428;
!    Name_Elab_Body                      : constant Name_Id := N + 428; -- GNAT
!    Name_Elab_Spec                      : constant Name_Id := N + 429; -- GNAT
!    Name_Storage_Pool                   : constant Name_Id := N + 430;
! 
!    --  These attributes are the ones that return types
! 
!    First_Type_Attribute_Name           : constant Name_Id := N + 431;
!    Name_Base                           : constant Name_Id := N + 431;
!    Name_Class                          : constant Name_Id := N + 432;
!    Last_Type_Attribute_Name            : constant Name_Id := N + 432;
!    Last_Entity_Attribute_Name          : constant Name_Id := N + 432;
!    Last_Attribute_Name                 : constant Name_Id := N + 432;
! 
!    --  Names of recognized locking policy identifiers
! 
!    --  Note: policies are identified by the first character of the
!    --  name (e.g. C for Ceiling_Locking). If new policy names are added,
!    --  the first character must be distinct.
! 
!    First_Locking_Policy_Name           : constant Name_Id := N + 433;
!    Name_Ceiling_Locking                : constant Name_Id := N + 433;
!    Name_Inheritance_Locking            : constant Name_Id := N + 434;
!    Last_Locking_Policy_Name            : constant Name_Id := N + 434;
! 
!    --  Names of recognized queuing policy identifiers.
! 
!    --  Note: policies are identified by the first character of the
!    --  name (e.g. F for FIFO_Queuing). If new policy names are added,
!    --  the first character must be distinct.
! 
!    First_Queuing_Policy_Name           : constant Name_Id := N + 435;
!    Name_FIFO_Queuing                   : constant Name_Id := N + 435;
!    Name_Priority_Queuing               : constant Name_Id := N + 436;
!    Last_Queuing_Policy_Name            : constant Name_Id := N + 436;
! 
!    --  Names of recognized task dispatching policy identifiers
! 
!    --  Note: policies are identified by the first character of the
!    --  name (e.g. F for FIFO_WIthinn_Priorities). If new policy names
!    --  are added, the first character must be distinct.
! 
!    First_Task_Dispatching_Policy_Name  : constant Name_Id := N + 437;
!    Name_Fifo_Within_Priorities         : constant Name_Id := N + 437;
!    Last_Task_Dispatching_Policy_Name   : constant Name_Id := N + 437;
! 
!    --  Names of recognized checks for pragma Suppress
! 
!    First_Check_Name                    : constant Name_Id := N + 438;
!    Name_Access_Check                   : constant Name_Id := N + 438;
!    Name_Accessibility_Check            : constant Name_Id := N + 439;
!    Name_Discriminant_Check             : constant Name_Id := N + 440;
!    Name_Division_Check                 : constant Name_Id := N + 441;
!    Name_Elaboration_Check              : constant Name_Id := N + 442;
!    Name_Index_Check                    : constant Name_Id := N + 443;
!    Name_Length_Check                   : constant Name_Id := N + 444;
!    Name_Overflow_Check                 : constant Name_Id := N + 445;
!    Name_Range_Check                    : constant Name_Id := N + 446;
!    Name_Storage_Check                  : constant Name_Id := N + 447;
!    Name_Tag_Check                      : constant Name_Id := N + 448;
!    Name_All_Checks                     : constant Name_Id := N + 449;
!    Last_Check_Name                     : constant Name_Id := N + 449;
! 
!    --  Names corresponding to reserved keywords, excluding those already
!    --  declared in the attribute list (Access, Delta, Digits, Range).
! 
!    Name_Abort                          : constant Name_Id := N + 450;
!    Name_Abs                            : constant Name_Id := N + 451;
!    Name_Accept                         : constant Name_Id := N + 452;
!    Name_And                            : constant Name_Id := N + 453;
!    Name_All                            : constant Name_Id := N + 454;
!    Name_Array                          : constant Name_Id := N + 455;
!    Name_At                             : constant Name_Id := N + 456;
!    Name_Begin                          : constant Name_Id := N + 457;
!    Name_Body                           : constant Name_Id := N + 458;
!    Name_Case                           : constant Name_Id := N + 459;
!    Name_Constant                       : constant Name_Id := N + 460;
!    Name_Declare                        : constant Name_Id := N + 461;
!    Name_Delay                          : constant Name_Id := N + 462;
!    Name_Do                             : constant Name_Id := N + 463;
!    Name_Else                           : constant Name_Id := N + 464;
!    Name_Elsif                          : constant Name_Id := N + 465;
!    Name_End                            : constant Name_Id := N + 466;
!    Name_Entry                          : constant Name_Id := N + 467;
!    Name_Exception                      : constant Name_Id := N + 468;
!    Name_Exit                           : constant Name_Id := N + 469;
!    Name_For                            : constant Name_Id := N + 470;
!    Name_Function                       : constant Name_Id := N + 471;
!    Name_Generic                        : constant Name_Id := N + 472;
!    Name_Goto                           : constant Name_Id := N + 473;
!    Name_If                             : constant Name_Id := N + 474;
!    Name_In                             : constant Name_Id := N + 475;
!    Name_Is                             : constant Name_Id := N + 476;
!    Name_Limited                        : constant Name_Id := N + 477;
!    Name_Loop                           : constant Name_Id := N + 478;
!    Name_Mod                            : constant Name_Id := N + 479;
!    Name_New                            : constant Name_Id := N + 480;
!    Name_Not                            : constant Name_Id := N + 481;
!    Name_Null                           : constant Name_Id := N + 482;
!    Name_Of                             : constant Name_Id := N + 483;
!    Name_Or                             : constant Name_Id := N + 484;
!    Name_Others                         : constant Name_Id := N + 485;
!    Name_Out                            : constant Name_Id := N + 486;
!    Name_Package                        : constant Name_Id := N + 487;
!    Name_Pragma                         : constant Name_Id := N + 488;
!    Name_Private                        : constant Name_Id := N + 489;
!    Name_Procedure                      : constant Name_Id := N + 490;
!    Name_Raise                          : constant Name_Id := N + 491;
!    Name_Record                         : constant Name_Id := N + 492;
!    Name_Rem                            : constant Name_Id := N + 493;
!    Name_Renames                        : constant Name_Id := N + 494;
!    Name_Return                         : constant Name_Id := N + 495;
!    Name_Reverse                        : constant Name_Id := N + 496;
!    Name_Select                         : constant Name_Id := N + 497;
!    Name_Separate                       : constant Name_Id := N + 498;
!    Name_Subtype                        : constant Name_Id := N + 499;
!    Name_Task                           : constant Name_Id := N + 500;
!    Name_Terminate                      : constant Name_Id := N + 501;
!    Name_Then                           : constant Name_Id := N + 502;
!    Name_Type                           : constant Name_Id := N + 503;
!    Name_Use                            : constant Name_Id := N + 504;
!    Name_When                           : constant Name_Id := N + 505;
!    Name_While                          : constant Name_Id := N + 506;
!    Name_With                           : constant Name_Id := N + 507;
!    Name_Xor                            : constant Name_Id := N + 508;
! 
!    --  Names of intrinsic subprograms
! 
!    --  Note: Asm is missing from this list, since Asm is a legitimate
!    --  convention name. So is To_Adress, which is a GNAT attribute.
! 
!    First_Intrinsic_Name                : constant Name_Id := N + 509;
!    Name_Divide                         : constant Name_Id := N + 509;
!    Name_Enclosing_Entity               : constant Name_Id := N + 510;
!    Name_Exception_Information          : constant Name_Id := N + 511;
!    Name_Exception_Message              : constant Name_Id := N + 512;
!    Name_Exception_Name                 : constant Name_Id := N + 513;
!    Name_File                           : constant Name_Id := N + 514;
!    Name_Import_Address                 : constant Name_Id := N + 515;
!    Name_Import_Largest_Value           : constant Name_Id := N + 516;
!    Name_Import_Value                   : constant Name_Id := N + 517;
!    Name_Is_Negative                    : constant Name_Id := N + 518;
!    Name_Line                           : constant Name_Id := N + 519;
!    Name_Rotate_Left                    : constant Name_Id := N + 520;
!    Name_Rotate_Right                   : constant Name_Id := N + 521;
!    Name_Shift_Left                     : constant Name_Id := N + 522;
!    Name_Shift_Right                    : constant Name_Id := N + 523;
!    Name_Shift_Right_Arithmetic         : constant Name_Id := N + 524;
!    Name_Source_Location                : constant Name_Id := N + 525;
!    Name_Unchecked_Conversion           : constant Name_Id := N + 526;
!    Name_Unchecked_Deallocation         : constant Name_Id := N + 527;
!    Name_To_Pointer                     : constant Name_Id := N + 528;
!    Last_Intrinsic_Name                 : constant Name_Id := N + 528;
! 
!    --  Reserved words used only in Ada 95
! 
!    First_95_Reserved_Word              : constant Name_Id := N + 529;
!    Name_Abstract                       : constant Name_Id := N + 529;
!    Name_Aliased                        : constant Name_Id := N + 530;
!    Name_Protected                      : constant Name_Id := N + 531;
!    Name_Until                          : constant Name_Id := N + 532;
!    Name_Requeue                        : constant Name_Id := N + 533;
!    Name_Tagged                         : constant Name_Id := N + 534;
!    Last_95_Reserved_Word               : constant Name_Id := N + 534;
! 
!    subtype Ada_95_Reserved_Words is
!      Name_Id range First_95_Reserved_Word .. Last_95_Reserved_Word;
! 
!    --  Miscellaneous names used in semantic checking
! 
!    Name_Raise_Exception                : constant Name_Id := N + 535;
! 
!    --  Additional reserved words in GNAT Project Files
!    --  Note that Name_External is already previously declared
! 
!    Name_Binder                         : constant Name_Id := N + 536;
!    Name_Body_Suffix                    : constant Name_Id := N + 537;
!    Name_Builder                        : constant Name_Id := N + 538;
!    Name_Compiler                       : constant Name_Id := N + 539;
!    Name_Cross_Reference                : constant Name_Id := N + 540;
!    Name_Default_Switches               : constant Name_Id := N + 541;
!    Name_Exec_Dir                       : constant Name_Id := N + 542;
!    Name_Executable                     : constant Name_Id := N + 543;
!    Name_Executable_Suffix              : constant Name_Id := N + 544;
!    Name_Extends                        : constant Name_Id := N + 545;
!    Name_Finder                         : constant Name_Id := N + 546;
!    Name_Global_Configuration_Pragmas   : constant Name_Id := N + 547;
!    Name_Gnatls                         : constant Name_Id := N + 548;
!    Name_Gnatstub                       : constant Name_Id := N + 549;
!    Name_Implementation                 : constant Name_Id := N + 550;
!    Name_Implementation_Exceptions      : constant Name_Id := N + 551;
!    Name_Implementation_Suffix          : constant Name_Id := N + 552;
!    Name_Languages                      : constant Name_Id := N + 553;
!    Name_Library_Dir                    : constant Name_Id := N + 554;
!    Name_Library_Auto_Init              : constant Name_Id := N + 555;
!    Name_Library_GCC                    : constant Name_Id := N + 556;
!    Name_Library_Interface              : constant Name_Id := N + 557;
!    Name_Library_Kind                   : constant Name_Id := N + 558;
!    Name_Library_Name                   : constant Name_Id := N + 559;
!    Name_Library_Options                : constant Name_Id := N + 560;
!    Name_Library_Reference_Symbol_File  : constant Name_Id := N + 561;
!    Name_Library_Src_Dir                : constant Name_Id := N + 562;
!    Name_Library_Symbol_File            : constant Name_Id := N + 563;
!    Name_Library_Symbol_Policy          : constant Name_Id := N + 564;
!    Name_Library_Version                : constant Name_Id := N + 565;
!    Name_Linker                         : constant Name_Id := N + 566;
!    Name_Local_Configuration_Pragmas    : constant Name_Id := N + 567;
!    Name_Locally_Removed_Files          : constant Name_Id := N + 568;
!    Name_Naming                         : constant Name_Id := N + 569;
!    Name_Object_Dir                     : constant Name_Id := N + 570;
!    Name_Pretty_Printer                 : constant Name_Id := N + 571;
!    Name_Project                        : constant Name_Id := N + 572;
!    Name_Separate_Suffix                : constant Name_Id := N + 573;
!    Name_Source_Dirs                    : constant Name_Id := N + 574;
!    Name_Source_Files                   : constant Name_Id := N + 575;
!    Name_Source_List_File               : constant Name_Id := N + 576;
!    Name_Spec                           : constant Name_Id := N + 577;
!    Name_Spec_Suffix                    : constant Name_Id := N + 578;
!    Name_Specification                  : constant Name_Id := N + 579;
!    Name_Specification_Exceptions       : constant Name_Id := N + 580;
!    Name_Specification_Suffix           : constant Name_Id := N + 581;
!    Name_Switches                       : constant Name_Id := N + 582;
!    --  Other miscellaneous names used in front end
! 
!    Name_Unaligned_Valid                : constant Name_Id := N + 583;
! 
!    --  Mark last defined name for consistency check in Snames body
! 
!    Last_Predefined_Name                : constant Name_Id := N + 583;
! 
!    subtype Any_Operator_Name is Name_Id range
!      First_Operator_Name .. Last_Operator_Name;
! 
!    ------------------------------
!    -- Attribute ID Definitions --
!    ------------------------------
! 
!    type Attribute_Id is (
!       Attribute_Abort_Signal,
!       Attribute_Access,
!       Attribute_Address,
!       Attribute_Address_Size,
!       Attribute_Aft,
!       Attribute_Alignment,
!       Attribute_Asm_Input,
!       Attribute_Asm_Output,
!       Attribute_AST_Entry,
!       Attribute_Bit,
!       Attribute_Bit_Order,
!       Attribute_Bit_Position,
!       Attribute_Body_Version,
!       Attribute_Callable,
!       Attribute_Caller,
!       Attribute_Code_Address,
!       Attribute_Component_Size,
!       Attribute_Compose,
!       Attribute_Constrained,
!       Attribute_Count,
!       Attribute_Default_Bit_Order,
!       Attribute_Definite,
!       Attribute_Delta,
!       Attribute_Denorm,
!       Attribute_Digits,
!       Attribute_Elaborated,
!       Attribute_Emax,
!       Attribute_Enum_Rep,
!       Attribute_Epsilon,
!       Attribute_Exponent,
!       Attribute_External_Tag,
!       Attribute_First,
!       Attribute_First_Bit,
!       Attribute_Fixed_Value,
!       Attribute_Fore,
!       Attribute_Has_Discriminants,
!       Attribute_Identity,
!       Attribute_Img,
!       Attribute_Integer_Value,
!       Attribute_Large,
!       Attribute_Last,
!       Attribute_Last_Bit,
!       Attribute_Leading_Part,
!       Attribute_Length,
!       Attribute_Machine_Emax,
!       Attribute_Machine_Emin,
!       Attribute_Machine_Mantissa,
!       Attribute_Machine_Overflows,
!       Attribute_Machine_Radix,
!       Attribute_Machine_Rounds,
!       Attribute_Machine_Size,
!       Attribute_Mantissa,
!       Attribute_Max_Size_In_Storage_Elements,
!       Attribute_Maximum_Alignment,
!       Attribute_Mechanism_Code,
!       Attribute_Model_Emin,
!       Attribute_Model_Epsilon,
!       Attribute_Model_Mantissa,
!       Attribute_Model_Small,
!       Attribute_Modulus,
!       Attribute_Null_Parameter,
!       Attribute_Object_Size,
!       Attribute_Partition_ID,
!       Attribute_Passed_By_Reference,
!       Attribute_Pool_Address,
!       Attribute_Pos,
!       Attribute_Position,
!       Attribute_Range,
!       Attribute_Range_Length,
!       Attribute_Round,
!       Attribute_Safe_Emax,
!       Attribute_Safe_First,
!       Attribute_Safe_Large,
!       Attribute_Safe_Last,
!       Attribute_Safe_Small,
!       Attribute_Scale,
!       Attribute_Scaling,
!       Attribute_Signed_Zeros,
!       Attribute_Size,
!       Attribute_Small,
!       Attribute_Storage_Size,
!       Attribute_Storage_Unit,
!       Attribute_Tag,
!       Attribute_Target_Name,
!       Attribute_Terminated,
!       Attribute_To_Address,
!       Attribute_Type_Class,
!       Attribute_UET_Address,
!       Attribute_Unbiased_Rounding,
!       Attribute_Unchecked_Access,
!       Attribute_Unconstrained_Array,
!       Attribute_Universal_Literal_String,
!       Attribute_Unrestricted_Access,
!       Attribute_VADS_Size,
!       Attribute_Val,
!       Attribute_Valid,
!       Attribute_Value_Size,
!       Attribute_Version,
!       Attribute_Wchar_T_Size,
!       Attribute_Wide_Width,
!       Attribute_Width,
!       Attribute_Word_Size,
! 
!       --  Attributes designating renamable functions
! 
!       Attribute_Adjacent,
!       Attribute_Ceiling,
!       Attribute_Copy_Sign,
!       Attribute_Floor,
!       Attribute_Fraction,
!       Attribute_Image,
!       Attribute_Input,
!       Attribute_Machine,
!       Attribute_Max,
!       Attribute_Min,
!       Attribute_Model,
!       Attribute_Pred,
!       Attribute_Remainder,
!       Attribute_Rounding,
!       Attribute_Succ,
!       Attribute_Truncation,
!       Attribute_Value,
!       Attribute_Wide_Image,
!       Attribute_Wide_Value,
! 
!       --  Attributes designating procedures
! 
!       Attribute_Output,
!       Attribute_Read,
!       Attribute_Write,
! 
!       --  Entity attributes (includes type attributes)
! 
!       Attribute_Elab_Body,
!       Attribute_Elab_Spec,
!       Attribute_Storage_Pool,
! 
!       --  Type attributes
! 
!       Attribute_Base,
!       Attribute_Class);
! 
!    ------------------------------------
!    -- Convention Name ID Definitions --
!    ------------------------------------
! 
!    type Convention_Id is (
! 
!       --  The conventions that are defined by the RM come first
! 
!       Convention_Ada,
!       Convention_Intrinsic,
!       Convention_Entry,
!       Convention_Protected,
! 
!       --  The remaining conventions are foreign language conventions
! 
!       Convention_Assembler,  --  also Asm, Assembly
!       Convention_C,          --  also Default, External
!       Convention_COBOL,
!       Convention_CPP,
!       Convention_Fortran,
!       Convention_Java,
!       Convention_Stdcall,    --  also DLL, Win32
!       Convention_Stubbed);
! 
!       --  Note: Convention C_Pass_By_Copy is allowed only for record
!       --  types (where it is treated like C except that the appropriate
!       --  flag is set in the record type). Recognizion of this convention
!       --  is specially handled in Sem_Prag.
! 
!    for Convention_Id'Size use 8;
!    --  Plenty of space for expansion
! 
!    subtype Foreign_Convention is
!      Convention_Id range Convention_Assembler .. Convention_Stdcall;
! 
!    -----------------------------------
!    -- Locking Policy ID Definitions --
!    -----------------------------------
! 
!    type Locking_Policy_Id is (
!       Locking_Policy_Inheritance_Locking,
!       Locking_Policy_Ceiling_Locking);
! 
!    ---------------------------
!    -- Pragma ID Definitions --
!    ---------------------------
! 
!    type Pragma_Id is (
! 
!       --  Configuration pragmas
! 
!       Pragma_Ada_83,
!       Pragma_Ada_95,
!       Pragma_C_Pass_By_Copy,
!       Pragma_Compile_Time_Warning,
!       Pragma_Component_Alignment,
!       Pragma_Convention_Identifier,
!       Pragma_Discard_Names,
!       Pragma_Elaboration_Checks,
!       Pragma_Eliminate,
!       Pragma_Explicit_Overriding,
!       Pragma_Extend_System,
!       Pragma_Extensions_Allowed,
!       Pragma_External_Name_Casing,
!       Pragma_Float_Representation,
!       Pragma_Initialize_Scalars,
!       Pragma_Interrupt_State,
!       Pragma_License,
!       Pragma_Locking_Policy,
!       Pragma_Long_Float,
!       Pragma_No_Run_Time,
!       Pragma_Normalize_Scalars,
!       Pragma_Polling,
!       Pragma_Persistent_Data,
!       Pragma_Persistent_Object,
!       Pragma_Propagate_Exceptions,
!       Pragma_Queuing_Policy,
!       Pragma_Ravenscar,
!       Pragma_Restricted_Run_Time,
!       Pragma_Restrictions,
!       Pragma_Restriction_Warnings,
!       Pragma_Reviewable,
!       Pragma_Source_File_Name,
!       Pragma_Source_File_Name_Project,
!       Pragma_Style_Checks,
!       Pragma_Suppress,
!       Pragma_Suppress_Exception_Locations,
!       Pragma_Task_Dispatching_Policy,
!       Pragma_Universal_Data,
!       Pragma_Unsuppress,
!       Pragma_Use_VADS_Size,
!       Pragma_Validity_Checks,
!       Pragma_Warnings,
! 
!       --  Remaining (non-configuration) pragmas
! 
!       Pragma_Abort_Defer,
!       Pragma_All_Calls_Remote,
!       Pragma_Annotate,
!       Pragma_Assert,
!       Pragma_Asynchronous,
!       Pragma_Atomic,
!       Pragma_Atomic_Components,
!       Pragma_Attach_Handler,
!       Pragma_Comment,
!       Pragma_Common_Object,
!       Pragma_Complex_Representation,
!       Pragma_Controlled,
!       Pragma_Convention,
!       Pragma_CPP_Class,
!       Pragma_CPP_Constructor,
!       Pragma_CPP_Virtual,
!       Pragma_CPP_Vtable,
!       Pragma_Debug,
!       Pragma_Elaborate,
!       Pragma_Elaborate_All,
!       Pragma_Elaborate_Body,
!       Pragma_Export,
!       Pragma_Export_Exception,
!       Pragma_Export_Function,
!       Pragma_Export_Object,
!       Pragma_Export_Procedure,
!       Pragma_Export_Value,
!       Pragma_Export_Valued_Procedure,
!       Pragma_External,
!       Pragma_Finalize_Storage_Only,
!       Pragma_Ident,
!       Pragma_Import,
!       Pragma_Import_Exception,
!       Pragma_Import_Function,
!       Pragma_Import_Object,
!       Pragma_Import_Procedure,
!       Pragma_Import_Valued_Procedure,
!       Pragma_Inline,
!       Pragma_Inline_Always,
!       Pragma_Inline_Generic,
!       Pragma_Inspection_Point,
!       Pragma_Interface,
!       Pragma_Interface_Name,
!       Pragma_Interrupt_Handler,
!       Pragma_Interrupt_Priority,
!       Pragma_Java_Constructor,
!       Pragma_Java_Interface,
!       Pragma_Keep_Names,
!       Pragma_Link_With,
!       Pragma_Linker_Alias,
!       Pragma_Linker_Options,
!       Pragma_Linker_Section,
!       Pragma_List,
!       Pragma_Machine_Attribute,
!       Pragma_Main,
!       Pragma_Main_Storage,
!       Pragma_Memory_Size,
!       Pragma_No_Return,
!       Pragma_Obsolescent,
!       Pragma_Optimize,
!       Pragma_Optional_Overriding,
!       Pragma_Overriding,
!       Pragma_Pack,
!       Pragma_Page,
!       Pragma_Passive,
!       Pragma_Preelaborate,
!       Pragma_Priority,
!       Pragma_Psect_Object,
!       Pragma_Pure,
!       Pragma_Pure_Function,
!       Pragma_Remote_Call_Interface,
!       Pragma_Remote_Types,
!       Pragma_Share_Generic,
!       Pragma_Shared,
!       Pragma_Shared_Passive,
!       Pragma_Source_Reference,
!       Pragma_Stream_Convert,
!       Pragma_Subtitle,
!       Pragma_Suppress_All,
!       Pragma_Suppress_Debug_Info,
!       Pragma_Suppress_Initialization,
!       Pragma_System_Name,
!       Pragma_Task_Info,
!       Pragma_Task_Name,
!       Pragma_Task_Storage,
!       Pragma_Thread_Body,
!       Pragma_Time_Slice,
!       Pragma_Title,
!       Pragma_Unchecked_Union,
!       Pragma_Unimplemented_Unit,
!       Pragma_Unreferenced,
!       Pragma_Unreserve_All_Interrupts,
!       Pragma_Volatile,
!       Pragma_Volatile_Components,
!       Pragma_Weak_External,
! 
!       --  The following pragmas are on their own, out of order, because of
!       --  the special processing required to deal with the fact that their
!       --  names match existing attribute names.
! 
!       Pragma_AST_Entry,
!       Pragma_Storage_Size,
!       Pragma_Storage_Unit,
! 
!       --  The value to represent an unknown or unrecognized pragma
! 
!       Unknown_Pragma);
! 
!    -----------------------------------
!    -- Queuing Policy ID definitions --
!    -----------------------------------
! 
!    type Queuing_Policy_Id is (
!       Queuing_Policy_FIFO_Queuing,
!       Queuing_Policy_Priority_Queuing);
! 
!    --------------------------------------------
!    -- Task Dispatching Policy ID definitions --
!    --------------------------------------------
! 
!    type Task_Dispatching_Policy_Id is (
!       Task_Dispatching_FIFO_Within_Priorities);
!    --  Id values used to identify task dispatching policies
! 
!    -----------------
!    -- Subprograms --
!    -----------------
! 
!    procedure Initialize;
!    --  Called to initialize the preset names in the names table.
! 
!    function Is_Attribute_Name (N : Name_Id) return Boolean;
!    --  Test to see if the name N is the name of a recognized attribute
! 
!    function Is_Entity_Attribute_Name (N : Name_Id) return Boolean;
!    --  Test to see if the name N is the name of a recognized entity attribute,
!    --  i.e. an attribute reference that returns an entity.
! 
!    function Is_Procedure_Attribute_Name (N : Name_Id) return Boolean;
!    --  Test to see if the name N is the name of a recognized attribute that
!    --  designates a procedure (and can therefore appear as a statement).
! 
!    function Is_Function_Attribute_Name (N : Name_Id) return Boolean;
!    --  Test to see if the name N is the name of a recognized attribute
!    --  that designates a renameable function, and can therefore appear in
!    --  a renaming statement. Note that not all attributes designating
!    --  functions are renamable, in particular, thos returning a universal
!    --  value cannot be renamed.
! 
!    function Is_Type_Attribute_Name (N : Name_Id) return Boolean;
!    --  Test to see if the name N is the name of a recognized type attribute,
!    --  i.e. an attribute reference that returns a type
! 
!    function Is_Check_Name (N : Name_Id) return Boolean;
!    --  Test to see if the name N is the name of a recognized suppress check
!    --  as required by pragma Suppress.
! 
!    function Is_Convention_Name (N : Name_Id) return Boolean;
!    --  Test to see if the name N is the name of one of the recognized
!    --  language conventions, as required by pragma Convention, Import,
!    --  Export, Interface. Returns True if so. Also returns True for a
!    --  name that has been specified by a Convention_Identifier pragma.
!    --  If neither case holds, returns False.
! 
!    function Is_Locking_Policy_Name (N : Name_Id) return Boolean;
!    --  Test to see if the name N is the name of a recognized locking policy
! 
!    function Is_Operator_Symbol_Name (N : Name_Id) return Boolean;
!    --  Test to see if the name N is the name of an operator symbol
! 
!    function Is_Pragma_Name (N : Name_Id) return Boolean;
!    --  Test to see if the name N is the name of a recognized pragma. Note
!    --  that pragmas AST_Entry, Storage_Size, and Storage_Unit are recognized
!    --  as pragmas by this function even though their names are separate from
!    --  the other pragma names.
! 
!    function Is_Queuing_Policy_Name (N : Name_Id) return Boolean;
!    --  Test to see if the name N is the name of a recognized queuing policy
! 
!    function Is_Task_Dispatching_Policy_Name (N : Name_Id) return Boolean;
!    --  Test to see if the name N is the name of a recognized task
!    --  dispatching policy.
! 
!    function Get_Attribute_Id (N : Name_Id) return Attribute_Id;
!    --  Returns Id of attribute corresponding to given name. It is an error to
!    --  call this function with a name that is not the name of a attribute.
! 
!    function Get_Convention_Id (N : Name_Id) return Convention_Id;
!    --  Returns Id of language convention corresponding to given name. It is an
!    --  to call this function with a name that is not the name of a convention,
!    --  or one previously given in a call to Record_Convention_Identifier.
! 
!    function Get_Check_Id (N : Name_Id) return Check_Id;
!    --  Returns Id of suppress check corresponding to given name. It is an error
!    --  to call this function with a name that is not the name of a check.
! 
!    function Get_Locking_Policy_Id (N : Name_Id) return Locking_Policy_Id;
!    --  Returns Id of locking policy corresponding to given name. It is an error
!    --  to call this function with a name that is not the name of a check.
! 
!    function Get_Pragma_Id (N : Name_Id) return Pragma_Id;
!    --  Returns Id of pragma corresponding to given name. Returns Unknown_Pragma
!    --  if N is not a name of a known (Ada defined or GNAT-specific) pragma.
!    --  Note that the function also works correctly for names of pragmas that
!    --  are not in the main list of pragma Names (AST_Entry, Storage_Size, and
!    --  Storage_Unit (e.g. Name_Storage_Size returns Pragma_Storage_Size).
! 
!    function Get_Queuing_Policy_Id (N : Name_Id) return Queuing_Policy_Id;
!    --  Returns Id of queuing policy corresponding to given name. It is an error
!    --  to call this function with a name that is not the name of a check.
! 
!    function Get_Task_Dispatching_Policy_Id
!      (N    : Name_Id)
!       return Task_Dispatching_Policy_Id;
!    --  Returns Id of task dispatching policy corresponding to given name.
!    --  It is an error to call this function with a name that is not the
!    --  name of a check.
! 
!    procedure Record_Convention_Identifier
!      (Id         : Name_Id;
!       Convention : Convention_Id);
!    --  A call to this procedure, resulting from an occurrence of a pragma
!    --  Convention_Identifier, records that from now on an occurrence of
!    --  Id will be recognized as a name for the specified convention.
! 
! private
!    pragma Inline (Is_Attribute_Name);
!    pragma Inline (Is_Entity_Attribute_Name);
!    pragma Inline (Is_Type_Attribute_Name);
!    pragma Inline (Is_Check_Name);
!    pragma Inline (Is_Locking_Policy_Name);
!    pragma Inline (Is_Operator_Symbol_Name);
!    pragma Inline (Is_Queuing_Policy_Name);
!    pragma Inline (Is_Pragma_Name);
!    pragma Inline (Is_Task_Dispatching_Policy_Name);
! 
! end Snames;
--- 1,1496 ----
! ------------------------------------------------------------------------------
! --                                                                          --
! --                         GNAT COMPILER COMPONENTS                         --
! --                                                                          --
! --                               S N A M E S                                --
! --                                                                          --
! --                                 S p e c                                  --
! --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
! --                                                                          --
! -- GNAT is free software;  you can  redistribute it  and/or modify it under --
! -- terms of the  GNU General Public License as published  by the Free Soft- --
! -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
! -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
! -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
! -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
! -- for  more details.  You should have  received  a copy of the GNU General --
! -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
! -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
! -- MA 02111-1307, USA.                                                      --
! --                                                                          --
! -- As a special exception,  if other files  instantiate  generics from this --
! -- unit, or you link  this unit with other files  to produce an executable, --
! -- this  unit  does not  by itself cause  the resulting  executable  to  be --
! -- covered  by the  GNU  General  Public  License.  This exception does not --
! -- however invalidate  any other reasons why  the executable file  might be --
! -- covered by the  GNU Public License.                                      --
! --                                                                          --
! -- GNAT was originally developed  by the GNAT team at  New York University. --
! -- Extensive contributions were provided by Ada Core Technologies Inc.      --
! --                                                                          --
! ------------------------------------------------------------------------------
! 
! with Types; use Types;
! 
! package Snames is
! 
! --  This package contains definitions of standard names (i.e. entries in the
! --  Names table) that are used throughout the GNAT compiler). It also contains
! --  the definitions of some enumeration types whose definitions are tied to
! --  the order of these preset names.
! 
! --  WARNING: There is a C file, a-snames.h which duplicates some of the
! --  definitions in this file and must be kept properly synchronized.
! 
!    ------------------
!    -- Preset Names --
!    ------------------
! 
!    --  The following are preset entries in the names table, which are
!    --  entered at the start of every compilation for easy access. Note
!    --  that the order of initialization of these names in the body must
!    --  be coordinated with the order of names in this table.
! 
!    --  Note: a name may not appear more than once in the following list.
!    --  If additional pragmas or attributes are introduced which might
!    --  otherwise cause a duplicate, then list it only once in this table,
!    --  and adjust the definition of the functions for testing for pragma
!    --  names and attribute names, and returning their ID values. Of course
!    --  everything is simpler if no such duplications occur!
! 
!    --  First we have the one character names used to optimize the lookup
!    --  process for one character identifiers (to avoid the hashing in this
!    --  case) There are a full 256 of these, but only the entries for lower
!    --  case and upper case letters have identifiers
! 
!    --  The lower case letter entries are used for one character identifiers
!    --  appearing in the source, for example in pragma Interface (C).
! 
!    Name_A         : constant Name_Id := First_Name_Id + Character'Pos ('a');
!    Name_B         : constant Name_Id := First_Name_Id + Character'Pos ('b');
!    Name_C         : constant Name_Id := First_Name_Id + Character'Pos ('c');
!    Name_D         : constant Name_Id := First_Name_Id + Character'Pos ('d');
!    Name_E         : constant Name_Id := First_Name_Id + Character'Pos ('e');
!    Name_F         : constant Name_Id := First_Name_Id + Character'Pos ('f');
!    Name_G         : constant Name_Id := First_Name_Id + Character'Pos ('g');
!    Name_H         : constant Name_Id := First_Name_Id + Character'Pos ('h');
!    Name_I         : constant Name_Id := First_Name_Id + Character'Pos ('i');
!    Name_J         : constant Name_Id := First_Name_Id + Character'Pos ('j');
!    Name_K         : constant Name_Id := First_Name_Id + Character'Pos ('k');
!    Name_L         : constant Name_Id := First_Name_Id + Character'Pos ('l');
!    Name_M         : constant Name_Id := First_Name_Id + Character'Pos ('m');
!    Name_N         : constant Name_Id := First_Name_Id + Character'Pos ('n');
!    Name_O         : constant Name_Id := First_Name_Id + Character'Pos ('o');
!    Name_P         : constant Name_Id := First_Name_Id + Character'Pos ('p');
!    Name_Q         : constant Name_Id := First_Name_Id + Character'Pos ('q');
!    Name_R         : constant Name_Id := First_Name_Id + Character'Pos ('r');
!    Name_S         : constant Name_Id := First_Name_Id + Character'Pos ('s');
!    Name_T         : constant Name_Id := First_Name_Id + Character'Pos ('t');
!    Name_U         : constant Name_Id := First_Name_Id + Character'Pos ('u');
!    Name_V         : constant Name_Id := First_Name_Id + Character'Pos ('v');
!    Name_W         : constant Name_Id := First_Name_Id + Character'Pos ('w');
!    Name_X         : constant Name_Id := First_Name_Id + Character'Pos ('x');
!    Name_Y         : constant Name_Id := First_Name_Id + Character'Pos ('y');
!    Name_Z         : constant Name_Id := First_Name_Id + Character'Pos ('z');
! 
!    --  The upper case letter entries are used by expander code for local
!    --  variables that do not require unique names (e.g. formal parameter
!    --  names in constructed procedures)
! 
!    Name_uA        : constant Name_Id := First_Name_Id + Character'Pos ('A');
!    Name_uB        : constant Name_Id := First_Name_Id + Character'Pos ('B');
!    Name_uC        : constant Name_Id := First_Name_Id + Character'Pos ('C');
!    Name_uD        : constant Name_Id := First_Name_Id + Character'Pos ('D');
!    Name_uE        : constant Name_Id := First_Name_Id + Character'Pos ('E');
!    Name_uF        : constant Name_Id := First_Name_Id + Character'Pos ('F');
!    Name_uG        : constant Name_Id := First_Name_Id + Character'Pos ('G');
!    Name_uH        : constant Name_Id := First_Name_Id + Character'Pos ('H');
!    Name_uI        : constant Name_Id := First_Name_Id + Character'Pos ('I');
!    Name_uJ        : constant Name_Id := First_Name_Id + Character'Pos ('J');
!    Name_uK        : constant Name_Id := First_Name_Id + Character'Pos ('K');
!    Name_uL        : constant Name_Id := First_Name_Id + Character'Pos ('L');
!    Name_uM        : constant Name_Id := First_Name_Id + Character'Pos ('M');
!    Name_uN        : constant Name_Id := First_Name_Id + Character'Pos ('N');
!    Name_uO        : constant Name_Id := First_Name_Id + Character'Pos ('O');
!    Name_uP        : constant Name_Id := First_Name_Id + Character'Pos ('P');
!    Name_uQ        : constant Name_Id := First_Name_Id + Character'Pos ('Q');
!    Name_uR        : constant Name_Id := First_Name_Id + Character'Pos ('R');
!    Name_uS        : constant Name_Id := First_Name_Id + Character'Pos ('S');
!    Name_uT        : constant Name_Id := First_Name_Id + Character'Pos ('T');
!    Name_uU        : constant Name_Id := First_Name_Id + Character'Pos ('U');
!    Name_uV        : constant Name_Id := First_Name_Id + Character'Pos ('V');
!    Name_uW        : constant Name_Id := First_Name_Id + Character'Pos ('W');
!    Name_uX        : constant Name_Id := First_Name_Id + Character'Pos ('X');
!    Name_uY        : constant Name_Id := First_Name_Id + Character'Pos ('Y');
!    Name_uZ        : constant Name_Id := First_Name_Id + Character'Pos ('Z');
! 
!    --  Note: the following table is read by the utility program XSNAMES and
!    --  its format should not be changed without coordinating with this program.
! 
!    N : constant Name_Id := First_Name_Id + 256;
!    --  Synonym used in standard name definitions
! 
!    --  Some names that are used by gigi, and whose definitions are reflected
!    --  in the C header file a-snames.h. They are placed at the start so that
!    --  the need to modify a-snames.h is minimized.
! 
!    Name_uParent                        : constant Name_Id := N + 000;
!    Name_uTag                           : constant Name_Id := N + 001;
!    Name_Off                            : constant Name_Id := N + 002;
!    Name_Space                          : constant Name_Id := N + 003;
!    Name_Time                           : constant Name_Id := N + 004;
! 
!    --  Some special names used by the expander. Note that the lower case u's
!    --  at the start of these names get translated to extra underscores. These
!    --  names are only referenced internally by expander generated code.
! 
!    Name_uAbort_Signal                  : constant Name_Id := N + 005;
!    Name_uAlignment                     : constant Name_Id := N + 006;
!    Name_uAssign                        : constant Name_Id := N + 007;
!    Name_uATCB                          : constant Name_Id := N + 008;
!    Name_uChain                         : constant Name_Id := N + 009;
!    Name_uClean                         : constant Name_Id := N + 010;
!    Name_uController                    : constant Name_Id := N + 011;
!    Name_uEntry_Bodies                  : constant Name_Id := N + 012;
!    Name_uExpunge                       : constant Name_Id := N + 013;
!    Name_uFinal_List                    : constant Name_Id := N + 014;
!    Name_uIdepth                        : constant Name_Id := N + 015;
!    Name_uInit                          : constant Name_Id := N + 016;
!    Name_uLocal_Final_List              : constant Name_Id := N + 017;
!    Name_uMaster                        : constant Name_Id := N + 018;
!    Name_uObject                        : constant Name_Id := N + 019;
!    Name_uPriority                      : constant Name_Id := N + 020;
!    Name_uProcess_ATSD                  : constant Name_Id := N + 021;
!    Name_uSecondary_Stack               : constant Name_Id := N + 022;
!    Name_uService                       : constant Name_Id := N + 023;
!    Name_uSize                          : constant Name_Id := N + 024;
!    Name_uStack                         : constant Name_Id := N + 025;
!    Name_uTags                          : constant Name_Id := N + 026;
!    Name_uTask                          : constant Name_Id := N + 027;
!    Name_uTask_Id                       : constant Name_Id := N + 028;
!    Name_uTask_Info                     : constant Name_Id := N + 029;
!    Name_uTask_Name                     : constant Name_Id := N + 030;
!    Name_uTrace_Sp                      : constant Name_Id := N + 031;
! 
!    --  Names of routines in Ada.Finalization, needed by expander
! 
!    Name_Initialize                     : constant Name_Id := N + 032;
!    Name_Adjust                         : constant Name_Id := N + 033;
!    Name_Finalize                       : constant Name_Id := N + 034;
! 
!    --  Names of fields declared in System.Finalization_Implementation,
!    --  needed by the expander when generating code for finalization.
! 
!    Name_Next                           : constant Name_Id := N + 035;
!    Name_Prev                           : constant Name_Id := N + 036;
! 
!    --  Names of TSS routines for implementation of DSA over PolyORB
! 
!    Name_uTypeCode                      : constant Name_Id := N + 037;
!    Name_uFrom_Any                      : constant Name_Id := N + 038;
!    Name_uTo_Any                        : constant Name_Id := N + 039;
! 
!    --  Names of allocation routines, also needed by expander
! 
!    Name_Allocate                       : constant Name_Id := N + 040;
!    Name_Deallocate                     : constant Name_Id := N + 041;
!    Name_Dereference                    : constant Name_Id := N + 042;
! 
!    --  Names of Text_IO generic subpackages (see Rtsfind.Text_IO_Kludge)
! 
!    First_Text_IO_Package               : constant Name_Id := N + 043;
!    Name_Decimal_IO                     : constant Name_Id := N + 043;
!    Name_Enumeration_IO                 : constant Name_Id := N + 044;
!    Name_Fixed_IO                       : constant Name_Id := N + 045;
!    Name_Float_IO                       : constant Name_Id := N + 046;
!    Name_Integer_IO                     : constant Name_Id := N + 047;
!    Name_Modular_IO                     : constant Name_Id := N + 048;
!    Last_Text_IO_Package                : constant Name_Id := N + 048;
! 
!    subtype Text_IO_Package_Name is Name_Id
!      range First_Text_IO_Package .. Last_Text_IO_Package;
! 
!    --  Some miscellaneous names used for error detection/recovery
! 
!    Name_Const                          : constant Name_Id := N + 049;
!    Name_Error                          : constant Name_Id := N + 050;
!    Name_Go                             : constant Name_Id := N + 051;
!    Name_Put                            : constant Name_Id := N + 052;
!    Name_Put_Line                       : constant Name_Id := N + 053;
!    Name_To                             : constant Name_Id := N + 054;
! 
!    --  Names for packages that are treated specially by the compiler
! 
!    Name_Finalization                   : constant Name_Id := N + 055;
!    Name_Finalization_Root              : constant Name_Id := N + 056;
!    Name_Interfaces                     : constant Name_Id := N + 057;
!    Name_Standard                       : constant Name_Id := N + 058;
!    Name_System                         : constant Name_Id := N + 059;
!    Name_Text_IO                        : constant Name_Id := N + 060;
!    Name_Wide_Text_IO                   : constant Name_Id := N + 061;
!    Name_Wide_Wide_Text_IO              : constant Name_Id := N + 062;
! 
!    --  Names of implementations of the distributed systems annex
! 
!    First_PCS_Name                      : constant Name_Id := N + 063;
!    Name_No_DSA                         : constant Name_Id := N + 063;
!    Name_GARLIC_DSA                     : constant Name_Id := N + 064;
!    Name_PolyORB_DSA                    : constant Name_Id := N + 065;
!    Last_PCS_Name                       : constant Name_Id := N + 065;
! 
!    subtype PCS_Names is Name_Id
!      range First_PCS_Name .. Last_PCS_Name;
! 
!    --  Names of identifiers used in expanding distribution stubs
! 
!    Name_Addr                           : constant Name_Id := N + 066;
!    Name_Async                          : constant Name_Id := N + 067;
!    Name_Get_Active_Partition_ID        : constant Name_Id := N + 068;
!    Name_Get_RCI_Package_Receiver       : constant Name_Id := N + 069;
!    Name_Get_RCI_Package_Ref            : constant Name_Id := N + 070;
!    Name_Origin                         : constant Name_Id := N + 071;
!    Name_Params                         : constant Name_Id := N + 072;
!    Name_Partition                      : constant Name_Id := N + 073;
!    Name_Partition_Interface            : constant Name_Id := N + 074;
!    Name_Ras                            : constant Name_Id := N + 075;
!    Name_Call                           : constant Name_Id := N + 076;
!    Name_RCI_Name                       : constant Name_Id := N + 077;
!    Name_Receiver                       : constant Name_Id := N + 078;
!    Name_Result                         : constant Name_Id := N + 079;
!    Name_Rpc                            : constant Name_Id := N + 080;
!    Name_Subp_Id                        : constant Name_Id := N + 081;
!    Name_Operation                      : constant Name_Id := N + 082;
!    Name_Argument                       : constant Name_Id := N + 083;
!    Name_Arg_Modes                      : constant Name_Id := N + 084;
!    Name_Handler                        : constant Name_Id := N + 085;
!    Name_Target                         : constant Name_Id := N + 086;
!    Name_Req                            : constant Name_Id := N + 087;
!    Name_Obj_TypeCode                   : constant Name_Id := N + 088;
!    Name_Stub                           : constant Name_Id := N + 089;
! 
!    --  Operator Symbol entries. The actual names have an upper case O at
!    --  the start in place of the Op_ prefix (e.g. the actual name that
!    --  corresponds to Name_Op_Abs is "Oabs".
! 
!    First_Operator_Name                 : constant Name_Id := N + 090;
!    Name_Op_Abs                         : constant Name_Id := N + 090; -- "abs"
!    Name_Op_And                         : constant Name_Id := N + 091; -- "and"
!    Name_Op_Mod                         : constant Name_Id := N + 092; -- "mod"
!    Name_Op_Not                         : constant Name_Id := N + 093; -- "not"
!    Name_Op_Or                          : constant Name_Id := N + 094; -- "or"
!    Name_Op_Rem                         : constant Name_Id := N + 095; -- "rem"
!    Name_Op_Xor                         : constant Name_Id := N + 096; -- "xor"
!    Name_Op_Eq                          : constant Name_Id := N + 097; -- "="
!    Name_Op_Ne                          : constant Name_Id := N + 098; -- "/="
!    Name_Op_Lt                          : constant Name_Id := N + 099; -- "<"
!    Name_Op_Le                          : constant Name_Id := N + 100; -- "<="
!    Name_Op_Gt                          : constant Name_Id := N + 101; -- ">"
!    Name_Op_Ge                          : constant Name_Id := N + 102; -- ">="
!    Name_Op_Add                         : constant Name_Id := N + 103; -- "+"
!    Name_Op_Subtract                    : constant Name_Id := N + 104; -- "-"
!    Name_Op_Concat                      : constant Name_Id := N + 105; -- "&"
!    Name_Op_Multiply                    : constant Name_Id := N + 106; -- "*"
!    Name_Op_Divide                      : constant Name_Id := N + 107; -- "/"
!    Name_Op_Expon                       : constant Name_Id := N + 108; -- "**"
!    Last_Operator_Name                  : constant Name_Id := N + 108;
! 
!    --  Names for all pragmas recognized by GNAT. The entries with the comment
!    --  "Ada 83" are pragmas that are defined in Ada 83, but not in Ada 95.
!    --  These pragmas are fully implemented in both Ada 83 and Ada 95 modes
!    --  in GNAT.
! 
!    --  The entries marked GNAT are pragmas that are defined by GNAT
!    --  and implemented in both Ada 83 and Ada 95 modes. Full descriptions
!    --  of these implementation dependent pragmas may be found in the
!    --  appropriate section in unit Sem_Prag in file sem-prag.adb.
! 
!    --  The entries marked Ada05 are technically implementation dependent
!    --  pragmas, but they correspond to standard proposals for Ada 2005.
! 
!    --  The entries marked VMS are VMS specific pragmas that are recognized
!    --  only in OpenVMS versions of GNAT. They are ignored in other versions
!    --  with an appropriate warning.
! 
!    --  The entries marked AAMP are AAMP specific pragmas that are recognized
!    --  only in GNAT for the AAMP. They are ignored in other versions with
!    --  appropriate warnings.
! 
!    First_Pragma_Name                   : constant Name_Id := N + 109;
! 
!    --  Configuration pragmas are grouped at start
! 
!    Name_Ada_83                         : constant Name_Id := N + 109; -- GNAT
!    Name_Ada_95                         : constant Name_Id := N + 110; -- GNAT
!    Name_Ada_05                         : constant Name_Id := N + 111; -- GNAT
!    Name_C_Pass_By_Copy                 : constant Name_Id := N + 112; -- GNAT
!    Name_Compile_Time_Warning           : constant Name_Id := N + 113; -- GNAT
!    Name_Component_Alignment            : constant Name_Id := N + 114; -- GNAT
!    Name_Convention_Identifier          : constant Name_Id := N + 115; -- GNAT
!    Name_Detect_Blocking                : constant Name_Id := N + 116; -- Ada05
!    Name_Discard_Names                  : constant Name_Id := N + 117;
!    Name_Elaboration_Checks             : constant Name_Id := N + 118; -- GNAT
!    Name_Eliminate                      : constant Name_Id := N + 119; -- GNAT
!    Name_Explicit_Overriding            : constant Name_Id := N + 120;
!    Name_Extend_System                  : constant Name_Id := N + 121; -- GNAT
!    Name_Extensions_Allowed             : constant Name_Id := N + 122; -- GNAT
!    Name_External_Name_Casing           : constant Name_Id := N + 123; -- GNAT
!    Name_Float_Representation           : constant Name_Id := N + 124; -- GNAT
!    Name_Initialize_Scalars             : constant Name_Id := N + 125; -- GNAT
!    Name_Interrupt_State                : constant Name_Id := N + 126; -- GNAT
!    Name_License                        : constant Name_Id := N + 127; -- GNAT
!    Name_Locking_Policy                 : constant Name_Id := N + 128;
!    Name_Long_Float                     : constant Name_Id := N + 129; -- VMS
!    Name_No_Run_Time                    : constant Name_Id := N + 130; -- GNAT
!    Name_No_Strict_Aliasing             : constant Name_Id := N + 131; -- GNAT
!    Name_Normalize_Scalars              : constant Name_Id := N + 132;
!    Name_Polling                        : constant Name_Id := N + 133; -- GNAT
!    Name_Persistent_Data                : constant Name_Id := N + 134; -- GNAT
!    Name_Persistent_Object              : constant Name_Id := N + 135; -- GNAT
!    Name_Profile                        : constant Name_Id := N + 136; -- Ada05
!    Name_Profile_Warnings               : constant Name_Id := N + 137; -- GNAT
!    Name_Propagate_Exceptions           : constant Name_Id := N + 138; -- GNAT
!    Name_Queuing_Policy                 : constant Name_Id := N + 139;
!    Name_Ravenscar                      : constant Name_Id := N + 140;
!    Name_Restricted_Run_Time            : constant Name_Id := N + 141;
!    Name_Restrictions                   : constant Name_Id := N + 142;
!    Name_Restriction_Warnings           : constant Name_Id := N + 143; -- GNAT
!    Name_Reviewable                     : constant Name_Id := N + 144;
!    Name_Source_File_Name               : constant Name_Id := N + 145; -- GNAT
!    Name_Source_File_Name_Project       : constant Name_Id := N + 146; -- GNAT
!    Name_Style_Checks                   : constant Name_Id := N + 147; -- GNAT
!    Name_Suppress                       : constant Name_Id := N + 148;
!    Name_Suppress_Exception_Locations   : constant Name_Id := N + 149; -- GNAT
!    Name_Task_Dispatching_Policy        : constant Name_Id := N + 150;
!    Name_Universal_Data                 : constant Name_Id := N + 151; -- AAMP
!    Name_Unsuppress                     : constant Name_Id := N + 152; -- GNAT
!    Name_Use_VADS_Size                  : constant Name_Id := N + 153; -- GNAT
!    Name_Validity_Checks                : constant Name_Id := N + 154; -- GNAT
!    Name_Warnings                       : constant Name_Id := N + 155; -- GNAT
!    Last_Configuration_Pragma_Name      : constant Name_Id := N + 155;
! 
!    --  Remaining pragma names
! 
!    Name_Abort_Defer                    : constant Name_Id := N + 156; -- GNAT
!    Name_All_Calls_Remote               : constant Name_Id := N + 157;
!    Name_Annotate                       : constant Name_Id := N + 158; -- GNAT
! 
!    --  Note: AST_Entry is not in this list because its name matches the
!    --  name of the corresponding attribute. However, it is included in the
!    --  definition of the type Attribute_Id, and the functions Get_Pragma_Id
!    --  and Check_Pragma_Id correctly recognize and process Name_AST_Entry.
!    --  AST_Entry is a VMS specific pragma.
! 
!    Name_Assert                         : constant Name_Id := N + 159; -- GNAT
!    Name_Asynchronous                   : constant Name_Id := N + 160;
!    Name_Atomic                         : constant Name_Id := N + 161;
!    Name_Atomic_Components              : constant Name_Id := N + 162;
!    Name_Attach_Handler                 : constant Name_Id := N + 163;
!    Name_Comment                        : constant Name_Id := N + 164; -- GNAT
!    Name_Common_Object                  : constant Name_Id := N + 165; -- GNAT
!    Name_Complex_Representation         : constant Name_Id := N + 166; -- GNAT
!    Name_Controlled                     : constant Name_Id := N + 167;
!    Name_Convention                     : constant Name_Id := N + 168;
!    Name_CPP_Class                      : constant Name_Id := N + 169; -- GNAT
!    Name_CPP_Constructor                : constant Name_Id := N + 170; -- GNAT
!    Name_CPP_Virtual                    : constant Name_Id := N + 171; -- GNAT
!    Name_CPP_Vtable                     : constant Name_Id := N + 172; -- GNAT
!    Name_Debug                          : constant Name_Id := N + 173; -- GNAT
!    Name_Elaborate                      : constant Name_Id := N + 174; -- Ada 83
!    Name_Elaborate_All                  : constant Name_Id := N + 175;
!    Name_Elaborate_Body                 : constant Name_Id := N + 176;
!    Name_Export                         : constant Name_Id := N + 177;
!    Name_Export_Exception               : constant Name_Id := N + 178; -- VMS
!    Name_Export_Function                : constant Name_Id := N + 179; -- GNAT
!    Name_Export_Object                  : constant Name_Id := N + 180; -- GNAT
!    Name_Export_Procedure               : constant Name_Id := N + 181; -- GNAT
!    Name_Export_Value                   : constant Name_Id := N + 182; -- GNAT
!    Name_Export_Valued_Procedure        : constant Name_Id := N + 183; -- GNAT
!    Name_External                       : constant Name_Id := N + 184; -- GNAT
!    Name_Finalize_Storage_Only          : constant Name_Id := N + 185; -- GNAT
!    Name_Ident                          : constant Name_Id := N + 186; -- VMS
!    Name_Import                         : constant Name_Id := N + 187;
!    Name_Import_Exception               : constant Name_Id := N + 188; -- VMS
!    Name_Import_Function                : constant Name_Id := N + 189; -- GNAT
!    Name_Import_Object                  : constant Name_Id := N + 190; -- GNAT
!    Name_Import_Procedure               : constant Name_Id := N + 191; -- GNAT
!    Name_Import_Valued_Procedure        : constant Name_Id := N + 192; -- GNAT
!    Name_Inline                         : constant Name_Id := N + 193;
!    Name_Inline_Always                  : constant Name_Id := N + 194; -- GNAT
!    Name_Inline_Generic                 : constant Name_Id := N + 195; -- GNAT
!    Name_Inspection_Point               : constant Name_Id := N + 196;
!    Name_Interface_Name                 : constant Name_Id := N + 197; -- GNAT
!    Name_Interrupt_Handler              : constant Name_Id := N + 198;
!    Name_Interrupt_Priority             : constant Name_Id := N + 199;
!    Name_Java_Constructor               : constant Name_Id := N + 200; -- GNAT
!    Name_Java_Interface                 : constant Name_Id := N + 201; -- GNAT
!    Name_Keep_Names                     : constant Name_Id := N + 202; -- GNAT
!    Name_Link_With                      : constant Name_Id := N + 203; -- GNAT
!    Name_Linker_Alias                   : constant Name_Id := N + 204; -- GNAT
!    Name_Linker_Options                 : constant Name_Id := N + 205;
!    Name_Linker_Section                 : constant Name_Id := N + 206; -- GNAT
!    Name_List                           : constant Name_Id := N + 207;
!    Name_Machine_Attribute              : constant Name_Id := N + 208; -- GNAT
!    Name_Main                           : constant Name_Id := N + 209; -- GNAT
!    Name_Main_Storage                   : constant Name_Id := N + 210; -- GNAT
!    Name_Memory_Size                    : constant Name_Id := N + 211; -- Ada 83
!    Name_No_Return                      : constant Name_Id := N + 212; -- GNAT
!    Name_Obsolescent                    : constant Name_Id := N + 213; -- GNAT
!    Name_Optimize                       : constant Name_Id := N + 214;
!    Name_Optional_Overriding            : constant Name_Id := N + 215;
!    Name_Pack                           : constant Name_Id := N + 216;
!    Name_Page                           : constant Name_Id := N + 217;
!    Name_Passive                        : constant Name_Id := N + 218; -- GNAT
!    Name_Preelaborate                   : constant Name_Id := N + 219;
!    Name_Priority                       : constant Name_Id := N + 220;
!    Name_Psect_Object                   : constant Name_Id := N + 221; -- VMS
!    Name_Pure                           : constant Name_Id := N + 222;
!    Name_Pure_Function                  : constant Name_Id := N + 223; -- GNAT
!    Name_Remote_Call_Interface          : constant Name_Id := N + 224;
!    Name_Remote_Types                   : constant Name_Id := N + 225;
!    Name_Share_Generic                  : constant Name_Id := N + 226; -- GNAT
!    Name_Shared                         : constant Name_Id := N + 227; -- Ada 83
!    Name_Shared_Passive                 : constant Name_Id := N + 228;
! 
!    --  Note: Storage_Size is not in this list because its name matches the
!    --  name of the corresponding attribute. However, it is included in the
!    --  definition of the type Attribute_Id, and the functions Get_Pragma_Id
!    --  and Check_Pragma_Id correctly recognize and process Name_Storage_Size.
! 
!    --  Note: Storage_Unit is also omitted from the list because of a clash
!    --  with an attribute name, and is treated similarly.
! 
!    Name_Source_Reference               : constant Name_Id := N + 229; -- GNAT
!    Name_Stream_Convert                 : constant Name_Id := N + 230; -- GNAT
!    Name_Subtitle                       : constant Name_Id := N + 231; -- GNAT
!    Name_Suppress_All                   : constant Name_Id := N + 232; -- GNAT
!    Name_Suppress_Debug_Info            : constant Name_Id := N + 233; -- GNAT
!    Name_Suppress_Initialization        : constant Name_Id := N + 234; -- GNAT
!    Name_System_Name                    : constant Name_Id := N + 235; -- Ada 83
!    Name_Task_Info                      : constant Name_Id := N + 236; -- GNAT
!    Name_Task_Name                      : constant Name_Id := N + 237; -- GNAT
!    Name_Task_Storage                   : constant Name_Id := N + 238; -- VMS
!    Name_Thread_Body                    : constant Name_Id := N + 239; -- GNAT
!    Name_Time_Slice                     : constant Name_Id := N + 240; -- GNAT
!    Name_Title                          : constant Name_Id := N + 241; -- GNAT
!    Name_Unchecked_Union                : constant Name_Id := N + 242; -- GNAT
!    Name_Unimplemented_Unit             : constant Name_Id := N + 243; -- GNAT
!    Name_Unreferenced                   : constant Name_Id := N + 244; -- GNAT
!    Name_Unreserve_All_Interrupts       : constant Name_Id := N + 245; -- GNAT
!    Name_Volatile                       : constant Name_Id := N + 246;
!    Name_Volatile_Components            : constant Name_Id := N + 247;
!    Name_Weak_External                  : constant Name_Id := N + 248; -- GNAT
!    Last_Pragma_Name                    : constant Name_Id := N + 248;
! 
!    --  Language convention names for pragma Convention/Export/Import/Interface
!    --  Note that Name_C is not included in this list, since it was already
!    --  declared earlier in the context of one-character identifier names
!    --  (where the order is critical to the fast look up process).
! 
!    --  Note: there are no convention names corresponding to the conventions
!    --  Entry and Protected, this is because these conventions cannot be
!    --  specified by a pragma.
! 
!    First_Convention_Name               : constant Name_Id := N + 249;
!    Name_Ada                            : constant Name_Id := N + 249;
!    Name_Assembler                      : constant Name_Id := N + 250;
!    Name_COBOL                          : constant Name_Id := N + 251;
!    Name_CPP                            : constant Name_Id := N + 252;
!    Name_Fortran                        : constant Name_Id := N + 253;
!    Name_Intrinsic                      : constant Name_Id := N + 254;
!    Name_Java                           : constant Name_Id := N + 255;
!    Name_Stdcall                        : constant Name_Id := N + 256;
!    Name_Stubbed                        : constant Name_Id := N + 257;
!    Last_Convention_Name                : constant Name_Id := N + 257;
! 
!    --  The following names are preset as synonyms for Assembler
! 
!    Name_Asm                            : constant Name_Id := N + 258;
!    Name_Assembly                       : constant Name_Id := N + 259;
! 
!    --  The following names are preset as synonyms for C
! 
!    Name_Default                        : constant Name_Id := N + 260;
!    --  Name_Exernal (previously defined as pragma)
! 
!    --  The following names are present as synonyms for Stdcall
! 
!    Name_DLL                            : constant Name_Id := N + 261;
!    Name_Win32                          : constant Name_Id := N + 262;
! 
!    --  Other special names used in processing pragmas
! 
!    Name_As_Is                          : constant Name_Id := N + 263;
!    Name_Body_File_Name                 : constant Name_Id := N + 264;
!    Name_Boolean_Entry_Barriers         : constant Name_Id := N + 265;
!    Name_Casing                         : constant Name_Id := N + 266;
!    Name_Code                           : constant Name_Id := N + 267;
!    Name_Component                      : constant Name_Id := N + 268;
!    Name_Component_Size_4               : constant Name_Id := N + 269;
!    Name_Copy                           : constant Name_Id := N + 270;
!    Name_D_Float                        : constant Name_Id := N + 271;
!    Name_Descriptor                     : constant Name_Id := N + 272;
!    Name_Dot_Replacement                : constant Name_Id := N + 273;
!    Name_Dynamic                        : constant Name_Id := N + 274;
!    Name_Entity                         : constant Name_Id := N + 275;
!    Name_External_Name                  : constant Name_Id := N + 276;
!    Name_First_Optional_Parameter       : constant Name_Id := N + 277;
!    Name_Form                           : constant Name_Id := N + 278;
!    Name_G_Float                        : constant Name_Id := N + 279;
!    Name_Gcc                            : constant Name_Id := N + 280;
!    Name_Gnat                           : constant Name_Id := N + 281;
!    Name_GPL                            : constant Name_Id := N + 282;
!    Name_IEEE_Float                     : constant Name_Id := N + 283;
!    Name_Internal                       : constant Name_Id := N + 284;
!    Name_Link_Name                      : constant Name_Id := N + 285;
!    Name_Lowercase                      : constant Name_Id := N + 286;
!    Name_Max_Entry_Queue_Depth          : constant Name_Id := N + 287;
!    Name_Max_Entry_Queue_Length         : constant Name_Id := N + 288;
!    Name_Max_Size                       : constant Name_Id := N + 289;
!    Name_Mechanism                      : constant Name_Id := N + 290;
!    Name_Mixedcase                      : constant Name_Id := N + 291;
!    Name_Modified_GPL                   : constant Name_Id := N + 292;
!    Name_Name                           : constant Name_Id := N + 293;
!    Name_NCA                            : constant Name_Id := N + 294;
!    Name_No                             : constant Name_Id := N + 295;
!    Name_No_Dependence                  : constant Name_Id := N + 296;
!    Name_No_Dynamic_Attachment          : constant Name_Id := N + 297;
!    Name_No_Dynamic_Interrupts          : constant Name_Id := N + 298;
!    Name_No_Requeue                     : constant Name_Id := N + 299;
!    Name_No_Requeue_Statements          : constant Name_Id := N + 300;
!    Name_No_Task_Attributes             : constant Name_Id := N + 301;
!    Name_No_Task_Attributes_Package     : constant Name_Id := N + 302;
!    Name_On                             : constant Name_Id := N + 303;
!    Name_Parameter_Types                : constant Name_Id := N + 304;
!    Name_Reference                      : constant Name_Id := N + 305;
!    Name_Restricted                     : constant Name_Id := N + 306;
!    Name_Result_Mechanism               : constant Name_Id := N + 307;
!    Name_Result_Type                    : constant Name_Id := N + 308;
!    Name_Runtime                        : constant Name_Id := N + 309;
!    Name_SB                             : constant Name_Id := N + 310;
!    Name_Secondary_Stack_Size           : constant Name_Id := N + 311;
!    Name_Section                        : constant Name_Id := N + 312;
!    Name_Semaphore                      : constant Name_Id := N + 313;
!    Name_Simple_Barriers                : constant Name_Id := N + 314;
!    Name_Spec_File_Name                 : constant Name_Id := N + 315;
!    Name_Static                         : constant Name_Id := N + 316;
!    Name_Stack_Size                     : constant Name_Id := N + 317;
!    Name_Subunit_File_Name              : constant Name_Id := N + 318;
!    Name_Task_Stack_Size_Default        : constant Name_Id := N + 319;
!    Name_Task_Type                      : constant Name_Id := N + 320;
!    Name_Time_Slicing_Enabled           : constant Name_Id := N + 321;
!    Name_Top_Guard                      : constant Name_Id := N + 322;
!    Name_UBA                            : constant Name_Id := N + 323;
!    Name_UBS                            : constant Name_Id := N + 324;
!    Name_UBSB                           : constant Name_Id := N + 325;
!    Name_Unit_Name                      : constant Name_Id := N + 326;
!    Name_Unknown                        : constant Name_Id := N + 327;
!    Name_Unrestricted                   : constant Name_Id := N + 328;
!    Name_Uppercase                      : constant Name_Id := N + 329;
!    Name_User                           : constant Name_Id := N + 330;
!    Name_VAX_Float                      : constant Name_Id := N + 331;
!    Name_VMS                            : constant Name_Id := N + 332;
!    Name_Working_Storage                : constant Name_Id := N + 333;
! 
!    --  Names of recognized attributes. The entries with the comment "Ada 83"
!    --  are attributes that are defined in Ada 83, but not in Ada 95. These
!    --  attributes are implemented in both Ada 83 and Ada 95 modes in GNAT.
! 
!    --  The entries marked GNAT are attributes that are defined by GNAT
!    --  and implemented in both Ada 83 and Ada 95 modes. Full descriptions
!    --  of these implementation dependent attributes may be found in the
!    --  appropriate section in package Sem_Attr in file sem-attr.ads.
! 
!    --  The entries marked VMS are recognized only in OpenVMS implementations
!    --  of GNAT, and are treated as illegal in all other contexts.
! 
!    First_Attribute_Name                : constant Name_Id := N + 334;
!    Name_Abort_Signal                   : constant Name_Id := N + 334; -- GNAT
!    Name_Access                         : constant Name_Id := N + 335;
!    Name_Address                        : constant Name_Id := N + 336;
!    Name_Address_Size                   : constant Name_Id := N + 337; -- GNAT
!    Name_Aft                            : constant Name_Id := N + 338;
!    Name_Alignment                      : constant Name_Id := N + 339;
!    Name_Asm_Input                      : constant Name_Id := N + 340; -- GNAT
!    Name_Asm_Output                     : constant Name_Id := N + 341; -- GNAT
!    Name_AST_Entry                      : constant Name_Id := N + 342; -- VMS
!    Name_Bit                            : constant Name_Id := N + 343; -- GNAT
!    Name_Bit_Order                      : constant Name_Id := N + 344;
!    Name_Bit_Position                   : constant Name_Id := N + 345; -- GNAT
!    Name_Body_Version                   : constant Name_Id := N + 346;
!    Name_Callable                       : constant Name_Id := N + 347;
!    Name_Caller                         : constant Name_Id := N + 348;
!    Name_Code_Address                   : constant Name_Id := N + 349; -- GNAT
!    Name_Component_Size                 : constant Name_Id := N + 350;
!    Name_Compose                        : constant Name_Id := N + 351;
!    Name_Constrained                    : constant Name_Id := N + 352;
!    Name_Count                          : constant Name_Id := N + 353;
!    Name_Default_Bit_Order              : constant Name_Id := N + 354; -- GNAT
!    Name_Definite                       : constant Name_Id := N + 355;
!    Name_Delta                          : constant Name_Id := N + 356;
!    Name_Denorm                         : constant Name_Id := N + 357;
!    Name_Digits                         : constant Name_Id := N + 358;
!    Name_Elaborated                     : constant Name_Id := N + 359; -- GNAT
!    Name_Emax                           : constant Name_Id := N + 360; -- Ada 83
!    Name_Enum_Rep                       : constant Name_Id := N + 361; -- GNAT
!    Name_Epsilon                        : constant Name_Id := N + 362; -- Ada 83
!    Name_Exponent                       : constant Name_Id := N + 363;
!    Name_External_Tag                   : constant Name_Id := N + 364;
!    Name_First                          : constant Name_Id := N + 365;
!    Name_First_Bit                      : constant Name_Id := N + 366;
!    Name_Fixed_Value                    : constant Name_Id := N + 367; -- GNAT
!    Name_Fore                           : constant Name_Id := N + 368;
!    Name_Has_Access_Values              : constant Name_Id := N + 369; -- GNAT
!    Name_Has_Discriminants              : constant Name_Id := N + 370; -- GNAT
!    Name_Identity                       : constant Name_Id := N + 371;
!    Name_Img                            : constant Name_Id := N + 372; -- GNAT
!    Name_Integer_Value                  : constant Name_Id := N + 373; -- GNAT
!    Name_Large                          : constant Name_Id := N + 374; -- Ada 83
!    Name_Last                           : constant Name_Id := N + 375;
!    Name_Last_Bit                       : constant Name_Id := N + 376;
!    Name_Leading_Part                   : constant Name_Id := N + 377;
!    Name_Length                         : constant Name_Id := N + 378;
!    Name_Machine_Emax                   : constant Name_Id := N + 379;
!    Name_Machine_Emin                   : constant Name_Id := N + 380;
!    Name_Machine_Mantissa               : constant Name_Id := N + 381;
!    Name_Machine_Overflows              : constant Name_Id := N + 382;
!    Name_Machine_Radix                  : constant Name_Id := N + 383;
!    Name_Machine_Rounds                 : constant Name_Id := N + 384;
!    Name_Machine_Size                   : constant Name_Id := N + 385; -- GNAT
!    Name_Mantissa                       : constant Name_Id := N + 386; -- Ada 83
!    Name_Max_Size_In_Storage_Elements   : constant Name_Id := N + 387;
!    Name_Maximum_Alignment              : constant Name_Id := N + 388; -- GNAT
!    Name_Mechanism_Code                 : constant Name_Id := N + 389; -- GNAT
!    Name_Mod                            : constant Name_Id := N + 390;
!    Name_Model_Emin                     : constant Name_Id := N + 391;
!    Name_Model_Epsilon                  : constant Name_Id := N + 392;
!    Name_Model_Mantissa                 : constant Name_Id := N + 393;
!    Name_Model_Small                    : constant Name_Id := N + 394;
!    Name_Modulus                        : constant Name_Id := N + 395;
!    Name_Null_Parameter                 : constant Name_Id := N + 396; -- GNAT
!    Name_Object_Size                    : constant Name_Id := N + 397; -- GNAT
!    Name_Partition_ID                   : constant Name_Id := N + 398;
!    Name_Passed_By_Reference            : constant Name_Id := N + 399; -- GNAT
!    Name_Pool_Address                   : constant Name_Id := N + 400;
!    Name_Pos                            : constant Name_Id := N + 401;
!    Name_Position                       : constant Name_Id := N + 402;
!    Name_Range                          : constant Name_Id := N + 403;
!    Name_Range_Length                   : constant Name_Id := N + 404; -- GNAT
!    Name_Round                          : constant Name_Id := N + 405;
!    Name_Safe_Emax                      : constant Name_Id := N + 406; -- Ada 83
!    Name_Safe_First                     : constant Name_Id := N + 407;
!    Name_Safe_Large                     : constant Name_Id := N + 408; -- Ada 83
!    Name_Safe_Last                      : constant Name_Id := N + 409;
!    Name_Safe_Small                     : constant Name_Id := N + 410; -- Ada 83
!    Name_Scale                          : constant Name_Id := N + 411;
!    Name_Scaling                        : constant Name_Id := N + 412;
!    Name_Signed_Zeros                   : constant Name_Id := N + 413;
!    Name_Size                           : constant Name_Id := N + 414;
!    Name_Small                          : constant Name_Id := N + 415;
!    Name_Storage_Size                   : constant Name_Id := N + 416;
!    Name_Storage_Unit                   : constant Name_Id := N + 417; -- GNAT
!    Name_Stream_Size                    : constant Name_Id := N + 418; -- Ada 05
!    Name_Tag                            : constant Name_Id := N + 419;
!    Name_Target_Name                    : constant Name_Id := N + 420; -- GNAT
!    Name_Terminated                     : constant Name_Id := N + 421;
!    Name_To_Address                     : constant Name_Id := N + 422; -- GNAT
!    Name_Type_Class                     : constant Name_Id := N + 423; -- GNAT
!    Name_UET_Address                    : constant Name_Id := N + 424; -- GNAT
!    Name_Unbiased_Rounding              : constant Name_Id := N + 425;
!    Name_Unchecked_Access               : constant Name_Id := N + 426;
!    Name_Unconstrained_Array            : constant Name_Id := N + 427;
!    Name_Universal_Literal_String       : constant Name_Id := N + 428; -- GNAT
!    Name_Unrestricted_Access            : constant Name_Id := N + 429; -- GNAT
!    Name_VADS_Size                      : constant Name_Id := N + 430; -- GNAT
!    Name_Val                            : constant Name_Id := N + 431;
!    Name_Valid                          : constant Name_Id := N + 432;
!    Name_Value_Size                     : constant Name_Id := N + 433; -- GNAT
!    Name_Version                        : constant Name_Id := N + 434;
!    Name_Wchar_T_Size                   : constant Name_Id := N + 435; -- GNAT
!    Name_Wide_Wide_Width                : constant Name_Id := N + 436; -- Ada 05
!    Name_Wide_Width                     : constant Name_Id := N + 437;
!    Name_Width                          : constant Name_Id := N + 438;
!    Name_Word_Size                      : constant Name_Id := N + 439; -- GNAT
! 
!    --  Attributes that designate attributes returning renamable functions,
!    --  i.e. functions that return other than a universal value and that
!    --  have non-universal arguments.
! 
!    First_Renamable_Function_Attribute  : constant Name_Id := N + 440;
!    Name_Adjacent                       : constant Name_Id := N + 440;
!    Name_Ceiling                        : constant Name_Id := N + 441;
!    Name_Copy_Sign                      : constant Name_Id := N + 442;
!    Name_Floor                          : constant Name_Id := N + 443;
!    Name_Fraction                       : constant Name_Id := N + 444;
!    Name_Image                          : constant Name_Id := N + 445;
!    Name_Input                          : constant Name_Id := N + 446;
!    Name_Machine                        : constant Name_Id := N + 447;
!    Name_Max                            : constant Name_Id := N + 448;
!    Name_Min                            : constant Name_Id := N + 449;
!    Name_Model                          : constant Name_Id := N + 450;
!    Name_Pred                           : constant Name_Id := N + 451;
!    Name_Remainder                      : constant Name_Id := N + 452;
!    Name_Rounding                       : constant Name_Id := N + 453;
!    Name_Succ                           : constant Name_Id := N + 454;
!    Name_Truncation                     : constant Name_Id := N + 455;
!    Name_Value                          : constant Name_Id := N + 456;
!    Name_Wide_Image                     : constant Name_Id := N + 457;
!    Name_Wide_Wide_Image                : constant Name_Id := N + 458;
!    Name_Wide_Value                     : constant Name_Id := N + 459;
!    Name_Wide_Wide_Value                : constant Name_Id := N + 460;
!    Last_Renamable_Function_Attribute   : constant Name_Id := N + 460;
! 
!    --  Attributes that designate procedures
! 
!    First_Procedure_Attribute           : constant Name_Id := N + 461;
!    Name_Output                         : constant Name_Id := N + 461;
!    Name_Read                           : constant Name_Id := N + 462;
!    Name_Write                          : constant Name_Id := N + 463;
!    Last_Procedure_Attribute            : constant Name_Id := N + 463;
! 
!    --  Remaining attributes are ones that return entities
! 
!    First_Entity_Attribute_Name         : constant Name_Id := N + 464;
!    Name_Elab_Body                      : constant Name_Id := N + 464; -- GNAT
!    Name_Elab_Spec                      : constant Name_Id := N + 465; -- GNAT
!    Name_Storage_Pool                   : constant Name_Id := N + 466;
! 
!    --  These attributes are the ones that return types
! 
!    First_Type_Attribute_Name           : constant Name_Id := N + 467;
!    Name_Base                           : constant Name_Id := N + 467;
!    Name_Class                          : constant Name_Id := N + 468;
!    Last_Type_Attribute_Name            : constant Name_Id := N + 468;
!    Last_Entity_Attribute_Name          : constant Name_Id := N + 468;
!    Last_Attribute_Name                 : constant Name_Id := N + 468;
! 
!    --  Names of recognized locking policy identifiers
! 
!    --  Note: policies are identified by the first character of the
!    --  name (e.g. C for Ceiling_Locking). If new policy names are added,
!    --  the first character must be distinct.
! 
!    First_Locking_Policy_Name           : constant Name_Id := N + 469;
!    Name_Ceiling_Locking                : constant Name_Id := N + 469;
!    Name_Inheritance_Locking            : constant Name_Id := N + 470;
!    Last_Locking_Policy_Name            : constant Name_Id := N + 470;
! 
!    --  Names of recognized queuing policy identifiers.
! 
!    --  Note: policies are identified by the first character of the
!    --  name (e.g. F for FIFO_Queuing). If new policy names are added,
!    --  the first character must be distinct.
! 
!    First_Queuing_Policy_Name           : constant Name_Id := N + 471;
!    Name_FIFO_Queuing                   : constant Name_Id := N + 471;
!    Name_Priority_Queuing               : constant Name_Id := N + 472;
!    Last_Queuing_Policy_Name            : constant Name_Id := N + 472;
! 
!    --  Names of recognized task dispatching policy identifiers
! 
!    --  Note: policies are identified by the first character of the
!    --  name (e.g. F for FIFO_WIthinn_Priorities). If new policy names
!    --  are added, the first character must be distinct.
! 
!    First_Task_Dispatching_Policy_Name  : constant Name_Id := N + 473;
!    Name_FIFO_Within_Priorities         : constant Name_Id := N + 473;
!    Last_Task_Dispatching_Policy_Name   : constant Name_Id := N + 473;
! 
!    --  Names of recognized checks for pragma Suppress
! 
!    First_Check_Name                    : constant Name_Id := N + 474;
!    Name_Access_Check                   : constant Name_Id := N + 474;
!    Name_Accessibility_Check            : constant Name_Id := N + 475;
!    Name_Discriminant_Check             : constant Name_Id := N + 476;
!    Name_Division_Check                 : constant Name_Id := N + 477;
!    Name_Elaboration_Check              : constant Name_Id := N + 478;
!    Name_Index_Check                    : constant Name_Id := N + 479;
!    Name_Length_Check                   : constant Name_Id := N + 480;
!    Name_Overflow_Check                 : constant Name_Id := N + 481;
!    Name_Range_Check                    : constant Name_Id := N + 482;
!    Name_Storage_Check                  : constant Name_Id := N + 483;
!    Name_Tag_Check                      : constant Name_Id := N + 484;
!    Name_All_Checks                     : constant Name_Id := N + 485;
!    Last_Check_Name                     : constant Name_Id := N + 485;
! 
!    --  Names corresponding to reserved keywords, excluding those already
!    --  declared in the attribute list (Access, Delta, Digits, Mod, Range).
! 
!    Name_Abort                          : constant Name_Id := N + 486;
!    Name_Abs                            : constant Name_Id := N + 487;
!    Name_Accept                         : constant Name_Id := N + 488;
!    Name_And                            : constant Name_Id := N + 489;
!    Name_All                            : constant Name_Id := N + 490;
!    Name_Array                          : constant Name_Id := N + 491;
!    Name_At                             : constant Name_Id := N + 492;
!    Name_Begin                          : constant Name_Id := N + 493;
!    Name_Body                           : constant Name_Id := N + 494;
!    Name_Case                           : constant Name_Id := N + 495;
!    Name_Constant                       : constant Name_Id := N + 496;
!    Name_Declare                        : constant Name_Id := N + 497;
!    Name_Delay                          : constant Name_Id := N + 498;
!    Name_Do                             : constant Name_Id := N + 499;
!    Name_Else                           : constant Name_Id := N + 500;
!    Name_Elsif                          : constant Name_Id := N + 501;
!    Name_End                            : constant Name_Id := N + 502;
!    Name_Entry                          : constant Name_Id := N + 503;
!    Name_Exception                      : constant Name_Id := N + 504;
!    Name_Exit                           : constant Name_Id := N + 505;
!    Name_For                            : constant Name_Id := N + 506;
!    Name_Function                       : constant Name_Id := N + 507;
!    Name_Generic                        : constant Name_Id := N + 508;
!    Name_Goto                           : constant Name_Id := N + 509;
!    Name_If                             : constant Name_Id := N + 510;
!    Name_In                             : constant Name_Id := N + 511;
!    Name_Is                             : constant Name_Id := N + 512;
!    Name_Limited                        : constant Name_Id := N + 513;
!    Name_Loop                           : constant Name_Id := N + 514;
!    Name_New                            : constant Name_Id := N + 515;
!    Name_Not                            : constant Name_Id := N + 516;
!    Name_Null                           : constant Name_Id := N + 517;
!    Name_Of                             : constant Name_Id := N + 518;
!    Name_Or                             : constant Name_Id := N + 519;
!    Name_Others                         : constant Name_Id := N + 520;
!    Name_Out                            : constant Name_Id := N + 521;
!    Name_Package                        : constant Name_Id := N + 522;
!    Name_Pragma                         : constant Name_Id := N + 523;
!    Name_Private                        : constant Name_Id := N + 524;
!    Name_Procedure                      : constant Name_Id := N + 525;
!    Name_Raise                          : constant Name_Id := N + 526;
!    Name_Record                         : constant Name_Id := N + 527;
!    Name_Rem                            : constant Name_Id := N + 528;
!    Name_Renames                        : constant Name_Id := N + 529;
!    Name_Return                         : constant Name_Id := N + 530;
!    Name_Reverse                        : constant Name_Id := N + 531;
!    Name_Select                         : constant Name_Id := N + 532;
!    Name_Separate                       : constant Name_Id := N + 533;
!    Name_Subtype                        : constant Name_Id := N + 534;
!    Name_Task                           : constant Name_Id := N + 535;
!    Name_Terminate                      : constant Name_Id := N + 536;
!    Name_Then                           : constant Name_Id := N + 537;
!    Name_Type                           : constant Name_Id := N + 538;
!    Name_Use                            : constant Name_Id := N + 539;
!    Name_When                           : constant Name_Id := N + 540;
!    Name_While                          : constant Name_Id := N + 541;
!    Name_With                           : constant Name_Id := N + 542;
!    Name_Xor                            : constant Name_Id := N + 543;
! 
!    --  Names of intrinsic subprograms
! 
!    --  Note: Asm is missing from this list, since Asm is a legitimate
!    --  convention name. So is To_Adress, which is a GNAT attribute.
! 
!    First_Intrinsic_Name                : constant Name_Id := N + 544;
!    Name_Divide                         : constant Name_Id := N + 544;
!    Name_Enclosing_Entity               : constant Name_Id := N + 545;
!    Name_Exception_Information          : constant Name_Id := N + 546;
!    Name_Exception_Message              : constant Name_Id := N + 547;
!    Name_Exception_Name                 : constant Name_Id := N + 548;
!    Name_File                           : constant Name_Id := N + 549;
!    Name_Import_Address                 : constant Name_Id := N + 550;
!    Name_Import_Largest_Value           : constant Name_Id := N + 551;
!    Name_Import_Value                   : constant Name_Id := N + 552;
!    Name_Is_Negative                    : constant Name_Id := N + 553;
!    Name_Line                           : constant Name_Id := N + 554;
!    Name_Rotate_Left                    : constant Name_Id := N + 555;
!    Name_Rotate_Right                   : constant Name_Id := N + 556;
!    Name_Shift_Left                     : constant Name_Id := N + 557;
!    Name_Shift_Right                    : constant Name_Id := N + 558;
!    Name_Shift_Right_Arithmetic         : constant Name_Id := N + 559;
!    Name_Source_Location                : constant Name_Id := N + 560;
!    Name_Unchecked_Conversion           : constant Name_Id := N + 561;
!    Name_Unchecked_Deallocation         : constant Name_Id := N + 562;
!    Name_To_Pointer                     : constant Name_Id := N + 563;
!    Last_Intrinsic_Name                 : constant Name_Id := N + 563;
! 
!    --  Reserved words used only in Ada 95
! 
!    First_95_Reserved_Word              : constant Name_Id := N + 564;
!    Name_Abstract                       : constant Name_Id := N + 564;
!    Name_Aliased                        : constant Name_Id := N + 565;
!    Name_Protected                      : constant Name_Id := N + 566;
!    Name_Until                          : constant Name_Id := N + 567;
!    Name_Requeue                        : constant Name_Id := N + 568;
!    Name_Tagged                         : constant Name_Id := N + 569;
!    Last_95_Reserved_Word               : constant Name_Id := N + 569;
! 
!    subtype Ada_95_Reserved_Words is
!      Name_Id range First_95_Reserved_Word .. Last_95_Reserved_Word;
! 
!    --  Miscellaneous names used in semantic checking
! 
!    Name_Raise_Exception                : constant Name_Id := N + 570;
! 
!    --  Additional reserved words and identifiers used in GNAT Project Files
!    --  Note that Name_External is already previously declared
! 
!    Name_Ada_Roots                      : constant Name_Id := N + 571;
!    Name_Binder                         : constant Name_Id := N + 572;
!    Name_Binder_Driver                  : constant Name_Id := N + 573;
!    Name_Body_Suffix                    : constant Name_Id := N + 574;
!    Name_Builder                        : constant Name_Id := N + 575;
!    Name_Compiler                       : constant Name_Id := N + 576;
!    Name_Compiler_Driver                : constant Name_Id := N + 577;
!    Name_Compiler_Kind                  : constant Name_Id := N + 578;
!    Name_Compute_Dependency             : constant Name_Id := N + 579;
!    Name_Cross_Reference                : constant Name_Id := N + 580;
!    Name_Default_Linker                 : constant Name_Id := N + 581;
!    Name_Default_Switches               : constant Name_Id := N + 582;
!    Name_Dependency_Option              : constant Name_Id := N + 583;
!    Name_Exec_Dir                       : constant Name_Id := N + 584;
!    Name_Executable                     : constant Name_Id := N + 585;
!    Name_Executable_Suffix              : constant Name_Id := N + 586;
!    Name_Extends                        : constant Name_Id := N + 587;
!    Name_Externally_Built               : constant Name_Id := N + 588;
!    Name_Finder                         : constant Name_Id := N + 589;
!    Name_Global_Configuration_Pragmas   : constant Name_Id := N + 590;
!    Name_Gnatls                         : constant Name_Id := N + 591;
!    Name_Gnatstub                       : constant Name_Id := N + 592;
!    Name_Implementation                 : constant Name_Id := N + 593;
!    Name_Implementation_Exceptions      : constant Name_Id := N + 594;
!    Name_Implementation_Suffix          : constant Name_Id := N + 595;
!    Name_Include_Option                 : constant Name_Id := N + 596;
!    Name_Language_Processing            : constant Name_Id := N + 597;
!    Name_Languages                      : constant Name_Id := N + 598;
!    Name_Library_Dir                    : constant Name_Id := N + 599;
!    Name_Library_Auto_Init              : constant Name_Id := N + 600;
!    Name_Library_GCC                    : constant Name_Id := N + 601;
!    Name_Library_Interface              : constant Name_Id := N + 602;
!    Name_Library_Kind                   : constant Name_Id := N + 603;
!    Name_Library_Name                   : constant Name_Id := N + 604;
!    Name_Library_Options                : constant Name_Id := N + 605;
!    Name_Library_Reference_Symbol_File  : constant Name_Id := N + 606;
!    Name_Library_Src_Dir                : constant Name_Id := N + 607;
!    Name_Library_Symbol_File            : constant Name_Id := N + 608;
!    Name_Library_Symbol_Policy          : constant Name_Id := N + 609;
!    Name_Library_Version                : constant Name_Id := N + 610;
!    Name_Linker                         : constant Name_Id := N + 611;
!    Name_Local_Configuration_Pragmas    : constant Name_Id := N + 612;
!    Name_Locally_Removed_Files          : constant Name_Id := N + 613;
!    Name_Metrics                        : constant Name_Id := N + 614;
!    Name_Naming                         : constant Name_Id := N + 615;
!    Name_Object_Dir                     : constant Name_Id := N + 616;
!    Name_Pretty_Printer                 : constant Name_Id := N + 617;
!    Name_Project                        : constant Name_Id := N + 618;
!    Name_Separate_Suffix                : constant Name_Id := N + 619;
!    Name_Source_Dirs                    : constant Name_Id := N + 620;
!    Name_Source_Files                   : constant Name_Id := N + 621;
!    Name_Source_List_File               : constant Name_Id := N + 622;
!    Name_Spec                           : constant Name_Id := N + 623;
!    Name_Spec_Suffix                    : constant Name_Id := N + 624;
!    Name_Specification                  : constant Name_Id := N + 625;
!    Name_Specification_Exceptions       : constant Name_Id := N + 626;
!    Name_Specification_Suffix           : constant Name_Id := N + 627;
!    Name_Switches                       : constant Name_Id := N + 628;
! 
!    --  Other miscellaneous names used in front end
! 
!    Name_Unaligned_Valid                : constant Name_Id := N + 629;
! 
!    --  ----------------------------------------------------------------
!    First_2005_Reserved_Word            : constant Name_Id := N + 630;
!    Name_Interface                      : constant Name_Id := N + 630;
!    Name_Overriding                     : constant Name_Id := N + 631;
!    Name_Synchronized                   : constant Name_Id := N + 632;
!    Last_2005_Reserved_Word             : constant Name_Id := N + 632;
! 
!    subtype Ada_2005_Reserved_Words is
!      Name_Id range First_2005_Reserved_Word .. Last_2005_Reserved_Word;
! 
!    --  Mark last defined name for consistency check in Snames body
! 
!    Last_Predefined_Name                : constant Name_Id := N + 632;
! 
!    subtype Any_Operator_Name is Name_Id range
!      First_Operator_Name .. Last_Operator_Name;
! 
!    ------------------------------
!    -- Attribute ID Definitions --
!    ------------------------------
! 
!    type Attribute_Id is (
!       Attribute_Abort_Signal,
!       Attribute_Access,
!       Attribute_Address,
!       Attribute_Address_Size,
!       Attribute_Aft,
!       Attribute_Alignment,
!       Attribute_Asm_Input,
!       Attribute_Asm_Output,
!       Attribute_AST_Entry,
!       Attribute_Bit,
!       Attribute_Bit_Order,
!       Attribute_Bit_Position,
!       Attribute_Body_Version,
!       Attribute_Callable,
!       Attribute_Caller,
!       Attribute_Code_Address,
!       Attribute_Component_Size,
!       Attribute_Compose,
!       Attribute_Constrained,
!       Attribute_Count,
!       Attribute_Default_Bit_Order,
!       Attribute_Definite,
!       Attribute_Delta,
!       Attribute_Denorm,
!       Attribute_Digits,
!       Attribute_Elaborated,
!       Attribute_Emax,
!       Attribute_Enum_Rep,
!       Attribute_Epsilon,
!       Attribute_Exponent,
!       Attribute_External_Tag,
!       Attribute_First,
!       Attribute_First_Bit,
!       Attribute_Fixed_Value,
!       Attribute_Fore,
!       Attribute_Has_Access_Values,
!       Attribute_Has_Discriminants,
!       Attribute_Identity,
!       Attribute_Img,
!       Attribute_Integer_Value,
!       Attribute_Large,
!       Attribute_Last,
!       Attribute_Last_Bit,
!       Attribute_Leading_Part,
!       Attribute_Length,
!       Attribute_Machine_Emax,
!       Attribute_Machine_Emin,
!       Attribute_Machine_Mantissa,
!       Attribute_Machine_Overflows,
!       Attribute_Machine_Radix,
!       Attribute_Machine_Rounds,
!       Attribute_Machine_Size,
!       Attribute_Mantissa,
!       Attribute_Max_Size_In_Storage_Elements,
!       Attribute_Maximum_Alignment,
!       Attribute_Mechanism_Code,
!       Attribute_Mod,
!       Attribute_Model_Emin,
!       Attribute_Model_Epsilon,
!       Attribute_Model_Mantissa,
!       Attribute_Model_Small,
!       Attribute_Modulus,
!       Attribute_Null_Parameter,
!       Attribute_Object_Size,
!       Attribute_Partition_ID,
!       Attribute_Passed_By_Reference,
!       Attribute_Pool_Address,
!       Attribute_Pos,
!       Attribute_Position,
!       Attribute_Range,
!       Attribute_Range_Length,
!       Attribute_Round,
!       Attribute_Safe_Emax,
!       Attribute_Safe_First,
!       Attribute_Safe_Large,
!       Attribute_Safe_Last,
!       Attribute_Safe_Small,
!       Attribute_Scale,
!       Attribute_Scaling,
!       Attribute_Signed_Zeros,
!       Attribute_Size,
!       Attribute_Small,
!       Attribute_Storage_Size,
!       Attribute_Storage_Unit,
!       Attribute_Stream_Size,
!       Attribute_Tag,
!       Attribute_Target_Name,
!       Attribute_Terminated,
!       Attribute_To_Address,
!       Attribute_Type_Class,
!       Attribute_UET_Address,
!       Attribute_Unbiased_Rounding,
!       Attribute_Unchecked_Access,
!       Attribute_Unconstrained_Array,
!       Attribute_Universal_Literal_String,
!       Attribute_Unrestricted_Access,
!       Attribute_VADS_Size,
!       Attribute_Val,
!       Attribute_Valid,
!       Attribute_Value_Size,
!       Attribute_Version,
!       Attribute_Wchar_T_Size,
!       Attribute_Wide_Wide_Width,
!       Attribute_Wide_Width,
!       Attribute_Width,
!       Attribute_Word_Size,
! 
!       --  Attributes designating renamable functions
! 
!       Attribute_Adjacent,
!       Attribute_Ceiling,
!       Attribute_Copy_Sign,
!       Attribute_Floor,
!       Attribute_Fraction,
!       Attribute_Image,
!       Attribute_Input,
!       Attribute_Machine,
!       Attribute_Max,
!       Attribute_Min,
!       Attribute_Model,
!       Attribute_Pred,
!       Attribute_Remainder,
!       Attribute_Rounding,
!       Attribute_Succ,
!       Attribute_Truncation,
!       Attribute_Value,
!       Attribute_Wide_Image,
!       Attribute_Wide_Wide_Image,
!       Attribute_Wide_Value,
!       Attribute_Wide_Wide_Value,
! 
!       --  Attributes designating procedures
! 
!       Attribute_Output,
!       Attribute_Read,
!       Attribute_Write,
! 
!       --  Entity attributes (includes type attributes)
! 
!       Attribute_Elab_Body,
!       Attribute_Elab_Spec,
!       Attribute_Storage_Pool,
! 
!       --  Type attributes
! 
!       Attribute_Base,
!       Attribute_Class);
! 
!    ------------------------------------
!    -- Convention Name ID Definitions --
!    ------------------------------------
! 
!    type Convention_Id is (
! 
!       --  The conventions that are defined by the RM come first
! 
!       Convention_Ada,
!       Convention_Intrinsic,
!       Convention_Entry,
!       Convention_Protected,
! 
!       --  The remaining conventions are foreign language conventions
! 
!       Convention_Assembler,  --  also Asm, Assembly
!       Convention_C,          --  also Default, External
!       Convention_COBOL,
!       Convention_CPP,
!       Convention_Fortran,
!       Convention_Java,
!       Convention_Stdcall,    --  also DLL, Win32
!       Convention_Stubbed);
! 
!       --  Note: Convention C_Pass_By_Copy is allowed only for record
!       --  types (where it is treated like C except that the appropriate
!       --  flag is set in the record type). Recognizion of this convention
!       --  is specially handled in Sem_Prag.
! 
!    for Convention_Id'Size use 8;
!    --  Plenty of space for expansion
! 
!    subtype Foreign_Convention is
!      Convention_Id range Convention_Assembler .. Convention_Stdcall;
! 
!    -----------------------------------
!    -- Locking Policy ID Definitions --
!    -----------------------------------
! 
!    type Locking_Policy_Id is (
!       Locking_Policy_Inheritance_Locking,
!       Locking_Policy_Ceiling_Locking);
! 
!    ---------------------------
!    -- Pragma ID Definitions --
!    ---------------------------
! 
!    type Pragma_Id is (
! 
!       --  Configuration pragmas
! 
!       Pragma_Ada_83,
!       Pragma_Ada_95,
!       Pragma_Ada_05,
!       Pragma_C_Pass_By_Copy,
!       Pragma_Compile_Time_Warning,
!       Pragma_Component_Alignment,
!       Pragma_Convention_Identifier,
!       Pragma_Detect_Blocking,
!       Pragma_Discard_Names,
!       Pragma_Elaboration_Checks,
!       Pragma_Eliminate,
!       Pragma_Explicit_Overriding,
!       Pragma_Extend_System,
!       Pragma_Extensions_Allowed,
!       Pragma_External_Name_Casing,
!       Pragma_Float_Representation,
!       Pragma_Initialize_Scalars,
!       Pragma_Interrupt_State,
!       Pragma_License,
!       Pragma_Locking_Policy,
!       Pragma_Long_Float,
!       Pragma_No_Run_Time,
!       Pragma_No_Strict_Aliasing,
!       Pragma_Normalize_Scalars,
!       Pragma_Polling,
!       Pragma_Persistent_Data,
!       Pragma_Persistent_Object,
!       Pragma_Profile,
!       Pragma_Profile_Warnings,
!       Pragma_Propagate_Exceptions,
!       Pragma_Queuing_Policy,
!       Pragma_Ravenscar,
!       Pragma_Restricted_Run_Time,
!       Pragma_Restrictions,
!       Pragma_Restriction_Warnings,
!       Pragma_Reviewable,
!       Pragma_Source_File_Name,
!       Pragma_Source_File_Name_Project,
!       Pragma_Style_Checks,
!       Pragma_Suppress,
!       Pragma_Suppress_Exception_Locations,
!       Pragma_Task_Dispatching_Policy,
!       Pragma_Universal_Data,
!       Pragma_Unsuppress,
!       Pragma_Use_VADS_Size,
!       Pragma_Validity_Checks,
!       Pragma_Warnings,
! 
!       --  Remaining (non-configuration) pragmas
! 
!       Pragma_Abort_Defer,
!       Pragma_All_Calls_Remote,
!       Pragma_Annotate,
!       Pragma_Assert,
!       Pragma_Asynchronous,
!       Pragma_Atomic,
!       Pragma_Atomic_Components,
!       Pragma_Attach_Handler,
!       Pragma_Comment,
!       Pragma_Common_Object,
!       Pragma_Complex_Representation,
!       Pragma_Controlled,
!       Pragma_Convention,
!       Pragma_CPP_Class,
!       Pragma_CPP_Constructor,
!       Pragma_CPP_Virtual,
!       Pragma_CPP_Vtable,
!       Pragma_Debug,
!       Pragma_Elaborate,
!       Pragma_Elaborate_All,
!       Pragma_Elaborate_Body,
!       Pragma_Export,
!       Pragma_Export_Exception,
!       Pragma_Export_Function,
!       Pragma_Export_Object,
!       Pragma_Export_Procedure,
!       Pragma_Export_Value,
!       Pragma_Export_Valued_Procedure,
!       Pragma_External,
!       Pragma_Finalize_Storage_Only,
!       Pragma_Ident,
!       Pragma_Import,
!       Pragma_Import_Exception,
!       Pragma_Import_Function,
!       Pragma_Import_Object,
!       Pragma_Import_Procedure,
!       Pragma_Import_Valued_Procedure,
!       Pragma_Inline,
!       Pragma_Inline_Always,
!       Pragma_Inline_Generic,
!       Pragma_Inspection_Point,
!       Pragma_Interface_Name,
!       Pragma_Interrupt_Handler,
!       Pragma_Interrupt_Priority,
!       Pragma_Java_Constructor,
!       Pragma_Java_Interface,
!       Pragma_Keep_Names,
!       Pragma_Link_With,
!       Pragma_Linker_Alias,
!       Pragma_Linker_Options,
!       Pragma_Linker_Section,
!       Pragma_List,
!       Pragma_Machine_Attribute,
!       Pragma_Main,
!       Pragma_Main_Storage,
!       Pragma_Memory_Size,
!       Pragma_No_Return,
!       Pragma_Obsolescent,
!       Pragma_Optimize,
!       Pragma_Optional_Overriding,
!       Pragma_Pack,
!       Pragma_Page,
!       Pragma_Passive,
!       Pragma_Preelaborate,
!       Pragma_Priority,
!       Pragma_Psect_Object,
!       Pragma_Pure,
!       Pragma_Pure_Function,
!       Pragma_Remote_Call_Interface,
!       Pragma_Remote_Types,
!       Pragma_Share_Generic,
!       Pragma_Shared,
!       Pragma_Shared_Passive,
!       Pragma_Source_Reference,
!       Pragma_Stream_Convert,
!       Pragma_Subtitle,
!       Pragma_Suppress_All,
!       Pragma_Suppress_Debug_Info,
!       Pragma_Suppress_Initialization,
!       Pragma_System_Name,
!       Pragma_Task_Info,
!       Pragma_Task_Name,
!       Pragma_Task_Storage,
!       Pragma_Thread_Body,
!       Pragma_Time_Slice,
!       Pragma_Title,
!       Pragma_Unchecked_Union,
!       Pragma_Unimplemented_Unit,
!       Pragma_Unreferenced,
!       Pragma_Unreserve_All_Interrupts,
!       Pragma_Volatile,
!       Pragma_Volatile_Components,
!       Pragma_Weak_External,
! 
!       --  The following pragmas are on their own, out of order, because of
!       --  the special processing required to deal with the fact that their
!       --  names match existing attribute names.
! 
!       Pragma_AST_Entry,
!       Pragma_Interface,
!       Pragma_Storage_Size,
!       Pragma_Storage_Unit,
! 
!       --  The value to represent an unknown or unrecognized pragma
! 
!       Unknown_Pragma);
! 
!    -----------------------------------
!    -- Queuing Policy ID definitions --
!    -----------------------------------
! 
!    type Queuing_Policy_Id is (
!       Queuing_Policy_FIFO_Queuing,
!       Queuing_Policy_Priority_Queuing);
! 
!    --------------------------------------------
!    -- Task Dispatching Policy ID definitions --
!    --------------------------------------------
! 
!    type Task_Dispatching_Policy_Id is (
!       Task_Dispatching_FIFO_Within_Priorities);
!    --  Id values used to identify task dispatching policies
! 
!    -----------------
!    -- Subprograms --
!    -----------------
! 
!    procedure Initialize;
!    --  Called to initialize the preset names in the names table.
! 
!    function Is_Attribute_Name (N : Name_Id) return Boolean;
!    --  Test to see if the name N is the name of a recognized attribute
! 
!    function Is_Entity_Attribute_Name (N : Name_Id) return Boolean;
!    --  Test to see if the name N is the name of a recognized entity attribute,
!    --  i.e. an attribute reference that returns an entity.
! 
!    function Is_Procedure_Attribute_Name (N : Name_Id) return Boolean;
!    --  Test to see if the name N is the name of a recognized attribute that
!    --  designates a procedure (and can therefore appear as a statement).
! 
!    function Is_Function_Attribute_Name (N : Name_Id) return Boolean;
!    --  Test to see if the name N is the name of a recognized attribute
!    --  that designates a renameable function, and can therefore appear in
!    --  a renaming statement. Note that not all attributes designating
!    --  functions are renamable, in particular, thos returning a universal
!    --  value cannot be renamed.
! 
!    function Is_Type_Attribute_Name (N : Name_Id) return Boolean;
!    --  Test to see if the name N is the name of a recognized type attribute,
!    --  i.e. an attribute reference that returns a type
! 
!    function Is_Check_Name (N : Name_Id) return Boolean;
!    --  Test to see if the name N is the name of a recognized suppress check
!    --  as required by pragma Suppress.
! 
!    function Is_Convention_Name (N : Name_Id) return Boolean;
!    --  Test to see if the name N is the name of one of the recognized
!    --  language conventions, as required by pragma Convention, Import,
!    --  Export, Interface. Returns True if so. Also returns True for a
!    --  name that has been specified by a Convention_Identifier pragma.
!    --  If neither case holds, returns False.
! 
!    function Is_Locking_Policy_Name (N : Name_Id) return Boolean;
!    --  Test to see if the name N is the name of a recognized locking policy
! 
!    function Is_Operator_Symbol_Name (N : Name_Id) return Boolean;
!    --  Test to see if the name N is the name of an operator symbol
! 
!    function Is_Pragma_Name (N : Name_Id) return Boolean;
!    --  Test to see if the name N is the name of a recognized pragma. Note
!    --  that pragmas AST_Entry, Storage_Size, and Storage_Unit are recognized
!    --  as pragmas by this function even though their names are separate from
!    --  the other pragma names.
! 
!    function Is_Queuing_Policy_Name (N : Name_Id) return Boolean;
!    --  Test to see if the name N is the name of a recognized queuing policy
! 
!    function Is_Task_Dispatching_Policy_Name (N : Name_Id) return Boolean;
!    --  Test to see if the name N is the name of a recognized task
!    --  dispatching policy.
! 
!    function Get_Attribute_Id (N : Name_Id) return Attribute_Id;
!    --  Returns Id of attribute corresponding to given name. It is an error to
!    --  call this function with a name that is not the name of a attribute.
! 
!    function Get_Convention_Id (N : Name_Id) return Convention_Id;
!    --  Returns Id of language convention corresponding to given name. It is an
!    --  to call this function with a name that is not the name of a convention,
!    --  or one previously given in a call to Record_Convention_Identifier.
! 
!    function Get_Check_Id (N : Name_Id) return Check_Id;
!    --  Returns Id of suppress check corresponding to given name. It is an error
!    --  to call this function with a name that is not the name of a check.
! 
!    function Get_Locking_Policy_Id (N : Name_Id) return Locking_Policy_Id;
!    --  Returns Id of locking policy corresponding to given name. It is an error
!    --  to call this function with a name that is not the name of a check.
! 
!    function Get_Pragma_Id (N : Name_Id) return Pragma_Id;
!    --  Returns Id of pragma corresponding to given name. Returns Unknown_Pragma
!    --  if N is not a name of a known (Ada defined or GNAT-specific) pragma.
!    --  Note that the function also works correctly for names of pragmas that
!    --  are not in the main list of pragma Names (AST_Entry, Storage_Size, and
!    --  Storage_Unit (e.g. Name_Storage_Size returns Pragma_Storage_Size).
! 
!    function Get_Queuing_Policy_Id (N : Name_Id) return Queuing_Policy_Id;
!    --  Returns Id of queuing policy corresponding to given name. It is an error
!    --  to call this function with a name that is not the name of a check.
! 
!    function Get_Task_Dispatching_Policy_Id
!      (N    : Name_Id)
!       return Task_Dispatching_Policy_Id;
!    --  Returns Id of task dispatching policy corresponding to given name.
!    --  It is an error to call this function with a name that is not the
!    --  name of a check.
! 
!    procedure Record_Convention_Identifier
!      (Id         : Name_Id;
!       Convention : Convention_Id);
!    --  A call to this procedure, resulting from an occurrence of a pragma
!    --  Convention_Identifier, records that from now on an occurrence of
!    --  Id will be recognized as a name for the specified convention.
! 
! private
!    pragma Inline (Is_Attribute_Name);
!    pragma Inline (Is_Entity_Attribute_Name);
!    pragma Inline (Is_Type_Attribute_Name);
!    pragma Inline (Is_Check_Name);
!    pragma Inline (Is_Locking_Policy_Name);
!    pragma Inline (Is_Operator_Symbol_Name);
!    pragma Inline (Is_Queuing_Policy_Name);
!    pragma Inline (Is_Pragma_Name);
!    pragma Inline (Is_Task_Dispatching_Policy_Name);
! 
! end Snames;
diff -Nrcpad gcc-3.4.3/gcc/ada/snames.h gcc-4.0.0/gcc/ada/snames.h
*** gcc-3.4.3/gcc/ada/snames.h	Tue Nov  4 12:51:46 2003
--- gcc-4.0.0/gcc/ada/snames.h	Thu Feb 10 13:50:22 2005
***************
*** 6,12 ****
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 1992-2003 Free Software Foundation, Inc.          *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
--- 6,12 ----
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 1992-2005, Free Software Foundation, Inc.         *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
*************** extern unsigned char Get_Attribute_Id (i
*** 80,183 ****
  #define  Attr_First_Bit                     32
  #define  Attr_Fixed_Value                   33
  #define  Attr_Fore                          34
! #define  Attr_Has_Discriminants             35
! #define  Attr_Identity                      36
! #define  Attr_Img                           37
! #define  Attr_Integer_Value                 38
! #define  Attr_Large                         39
! #define  Attr_Last                          40
! #define  Attr_Last_Bit                      41
! #define  Attr_Leading_Part                  42
! #define  Attr_Length                        43
! #define  Attr_Machine_Emax                  44
! #define  Attr_Machine_Emin                  45
! #define  Attr_Machine_Mantissa              46
! #define  Attr_Machine_Overflows             47
! #define  Attr_Machine_Radix                 48
! #define  Attr_Machine_Rounds                49
! #define  Attr_Machine_Size                  50
! #define  Attr_Mantissa                      51
! #define  Attr_Max_Size_In_Storage_Elements  52
! #define  Attr_Maximum_Alignment             53
! #define  Attr_Mechanism_Code                54
! #define  Attr_Model_Emin                    55
! #define  Attr_Model_Epsilon                 56
! #define  Attr_Model_Mantissa                57
! #define  Attr_Model_Small                   58
! #define  Attr_Modulus                       59
! #define  Attr_Null_Parameter                60
! #define  Attr_Object_Size                   61
! #define  Attr_Partition_ID                  62
! #define  Attr_Passed_By_Reference           63
! #define  Attr_Pool_Address                  64
! #define  Attr_Pos                           65
! #define  Attr_Position                      66
! #define  Attr_Range                         67
! #define  Attr_Range_Length                  68
! #define  Attr_Round                         69
! #define  Attr_Safe_Emax                     70
! #define  Attr_Safe_First                    71
! #define  Attr_Safe_Large                    72
! #define  Attr_Safe_Last                     73
! #define  Attr_Safe_Small                    74
! #define  Attr_Scale                         75
! #define  Attr_Scaling                       76
! #define  Attr_Signed_Zeros                  77
! #define  Attr_Size                          78
! #define  Attr_Small                         79
! #define  Attr_Storage_Size                  80
! #define  Attr_Storage_Unit                  81
! #define  Attr_Tag                           82
! #define  Attr_Target_Name                   83
! #define  Attr_Terminated                    84
! #define  Attr_To_Address                    85
! #define  Attr_Type_Class                    86
! #define  Attr_UET_Address                   87
! #define  Attr_Unbiased_Rounding             88
! #define  Attr_Unchecked_Access              89
! #define  Attr_Unconstrained_Array           90
! #define  Attr_Universal_Literal_String      91
! #define  Attr_Unrestricted_Access           92
! #define  Attr_VADS_Size                     93
! #define  Attr_Val                           94
! #define  Attr_Valid                         95
! #define  Attr_Value_Size                    96
! #define  Attr_Version                       97
! #define  Attr_Wide_Character_Size           98
! #define  Attr_Wide_Width                    99
! #define  Attr_Width                        100
  
! #define  Attr_Word_Size                    101
! #define  Attr_Adjacent                     102
! #define  Attr_Ceiling                      103
! #define  Attr_Copy_Sign                    104
! #define  Attr_Floor                        105
! #define  Attr_Fraction                     106
! #define  Attr_Image                        107
! #define  Attr_Input                        108
! #define  Attr_Machine                      109
! #define  Attr_Max                          110
! #define  Attr_Min                          111
! #define  Attr_Model                        112
! #define  Attr_Pred                         113
! #define  Attr_Remainder                    114
! #define  Attr_Rounding                     115
! #define  Attr_Succ                         116
! #define  Attr_Truncation                   117
! #define  Attr_Value                        118
! #define  Attr_Wide_Image                   119
! #define  Attr_Wide_Value                   120
  
! #define  Attr_Output                       121
! #define  Attr_Read                         122
! #define  Attr_Write                        123
  
! #define  Attr_Elab_Body                    124
! #define  Attr_Elab_Spec                    125
! #define  Attr_Storage_Pool                 126
  
! #define  Attr_Base                         127
! #define  Attr_Class                        128
  
  /* Define the function to check if a Name_Id value is a valid pragma */
  
--- 80,189 ----
  #define  Attr_First_Bit                     32
  #define  Attr_Fixed_Value                   33
  #define  Attr_Fore                          34
! #define  Attr_Has_Access_Values             35
! #define  Attr_Has_Discriminants             36
! #define  Attr_Identity                      37
! #define  Attr_Img                           38
! #define  Attr_Integer_Value                 39
! #define  Attr_Large                         40
! #define  Attr_Last                          41
! #define  Attr_Last_Bit                      42
! #define  Attr_Leading_Part                  43
! #define  Attr_Length                        44
! #define  Attr_Machine_Emax                  45
! #define  Attr_Machine_Emin                  46
! #define  Attr_Machine_Mantissa              47
! #define  Attr_Machine_Overflows             48
! #define  Attr_Machine_Radix                 49
! #define  Attr_Machine_Rounds                50
! #define  Attr_Machine_Size                  51
! #define  Attr_Mantissa                      52
! #define  Attr_Max_Size_In_Storage_Elements  53
! #define  Attr_Maximum_Alignment             54
! #define  Attr_Mechanism_Code                55
! #define  Attr_Mod                           56
! #define  Attr_Model_Emin                    57
! #define  Attr_Model_Epsilon                 58
! #define  Attr_Model_Mantissa                59
! #define  Attr_Model_Small                   60
! #define  Attr_Modulus                       61
! #define  Attr_Null_Parameter                62
! #define  Attr_Object_Size                   63
! #define  Attr_Partition_ID                  64
! #define  Attr_Passed_By_Reference           65
! #define  Attr_Pool_Address                  66
! #define  Attr_Pos                           67
! #define  Attr_Position                      68
! #define  Attr_Range                         69
! #define  Attr_Range_Length                  70
! #define  Attr_Round                         71
! #define  Attr_Safe_Emax                     72
! #define  Attr_Safe_First                    73
! #define  Attr_Safe_Large                    74
! #define  Attr_Safe_Last                     75
! #define  Attr_Safe_Small                    76
! #define  Attr_Scale                         77
! #define  Attr_Scaling                       78
! #define  Attr_Signed_Zeros                  79
! #define  Attr_Size                          80
! #define  Attr_Small                         81
! #define  Attr_Storage_Size                  82
! #define  Attr_Storage_Unit                  83
! #define  Attr_Stream_Size                   84
! #define  Attr_Tag                           85
! #define  Attr_Target_Name                   86
! #define  Attr_Terminated                    87
! #define  Attr_To_Address                    88
! #define  Attr_Type_Class                    89
! #define  Attr_UET_Address                   90
! #define  Attr_Unbiased_Rounding             91
! #define  Attr_Unchecked_Access              92
! #define  Attr_Unconstrained_Array           93
! #define  Attr_Universal_Literal_String      94
! #define  Attr_Unrestricted_Access           95
! #define  Attr_VADS_Size                     96
! #define  Attr_Val                           97
! #define  Attr_Valid                         98
! #define  Attr_Value_Size                    99
! #define  Attr_Version                      100
! #define  Attr_Wchar_T_Size                 101
! #define  Attr_Wide_Wide_Width              102
! #define  Attr_Wide_Width                   103
! #define  Attr_Width                        104
! #define  Attr_Word_Size                    105
  
! #define  Attr_Adjacent                     106
! #define  Attr_Ceiling                      107
! #define  Attr_Copy_Sign                    108
! #define  Attr_Floor                        109
! #define  Attr_Fraction                     110
! #define  Attr_Image                        111
! #define  Attr_Input                        112
! #define  Attr_Machine                      113
! #define  Attr_Max                          114
! #define  Attr_Min                          115
! #define  Attr_Model                        116
! #define  Attr_Pred                         117
! #define  Attr_Remainder                    118
! #define  Attr_Rounding                     119
! #define  Attr_Succ                         120
! #define  Attr_Truncation                   121
! #define  Attr_Value                        122
! #define  Attr_Wide_Image                   123
! #define  Attr_Wide_Wide_Image              124
! #define  Attr_Wide_Value                   125
! #define  Attr_Wide_Wide_Value              126
  
! #define  Attr_Output                       127
! #define  Attr_Read                         128
! #define  Attr_Write                        129
  
! #define  Attr_Elab_Body                    130
! #define  Attr_Elab_Spec                    131
! #define  Attr_Storage_Pool                 132
  
! #define  Attr_Base                         133
! #define  Attr_Class                        134
  
  /* Define the function to check if a Name_Id value is a valid pragma */
  
*************** extern unsigned char Get_Pragma_Id (int)
*** 198,347 ****
  
  #define  Pragma_Ada_83                        0
  #define  Pragma_Ada_95                        1
! #define  Pragma_C_Pass_By_Copy                2
! #define  Pragma_Compile_Time_Warning          3
! #define  Pragma_Component_Alignment           4
! #define  Pragma_Convention_Identifier         5
! #define  Pragma_Discard_Names                 6
! #define  Pragma_Elaboration_Checking          7
! #define  Pragma_Eliminate                     8
! #define  Pragma_Explicit_Overriding           9
! #define  Pragma_Extend_System                10
! #define  Pragma_Extensions_Allowed           11
! #define  Pragma_External_Name_Casing         12
! #define  Pragma_Float_Representation         13
! #define  Pragma_Initialize_Scalars           14
! #define  Pragma_Interrupt_State              15
! #define  Pragma_License                      16
! #define  Pragma_Locking_Policy               17
! #define  Pragma_Long_Float                   18
! #define  Pragma_No_Run_Time                  19
! #define  Pragma_Normalize_Scalars            20
! #define  Pragma_Polling                      21
! #define  Pragma_Persistent_Data              22
! #define  Pragma_Persistent_Object            23
! #define  Pragma_Propagate_Exceptions         24
! #define  Pragma_Queuing_Policy               25
! #define  Pragma_Ravenscar                    26
! #define  Pragma_Restricted_Run_Time          27
! #define  Pragma_Restrictions                 28
! #define  Pragma_Restriction_Warnings         29
! #define  Pragma_Reviewable                   30
! #define  Pragma_Source_File_Name             31
! #define  Pragma_Source_File_Name_Project     32
! #define  Pragma_Style_Checks                 33
! #define  Pragma_Suppress                     34
! #define  Pragma_Suppress_Exception_Locations 35
! #define  Pragma_Task_Dispatching_Policy      36
! #define  Pragma_Universal_Data               37
! #define  Pragma_Unsuppress                   38
! #define  Pragma_Use_VADS_Size                39
! #define  Pragma_Validity_Checks              40
! #define  Pragma_Warnings                     41
  
  /* Remaining pragmas */
  
! #define  Pragma_Abort_Defer                  42
! #define  Pragma_All_Calls_Remote             43
! #define  Pragma_Annotate                     44
! #define  Pragma_Assert                       45
! #define  Pragma_Asynchronous                 46
! #define  Pragma_Atomic                       47
! #define  Pragma_Atomic_Components            48
! #define  Pragma_Attach_Handler               49
! #define  Pragma_Comment                      50
! #define  Pragma_Common_Object                51
! #define  Pragma_Complex_Representation       52
! #define  Pragma_Controlled                   53
! #define  Pragma_Convention                   54
! #define  Pragma_CPP_Class                    55
! #define  Pragma_CPP_Constructor              56
! #define  Pragma_CPP_Virtual                  57
! #define  Pragma_CPP_Vtable                   58
! #define  Pragma_Debug                        59
! #define  Pragma_Elaborate                    60
! #define  Pragma_Elaborate_All                61
! #define  Pragma_Elaborate_Body               62
! #define  Pragma_Export                       63
! #define  Pragma_Export_Exception             64
! #define  Pragma_Export_Function              65
! #define  Pragma_Export_Object                66
! #define  Pragma_Export_Procedure             67
! #define  Pragma_Export_Value                 68
! #define  Pragma_Export_Valued_Procedure      69
! #define  Pragma_External                     70
! #define  Pragma_Finalize_Storage_Only        71
! #define  Pragma_Ident                        72
! #define  Pragma_Import                       73
! #define  Pragma_Import_Exception             74
! #define  Pragma_Import_Function              75
! #define  Pragma_Import_Object                76
! #define  Pragma_Import_Procedure             77
! #define  Pragma_Import_Valued_Procedure      78
! #define  Pragma_Inline                       79
! #define  Pragma_Inline_Always                80
! #define  Pragma_Inline_Generic               81
! #define  Pragma_Inspection_Point             82
! #define  Pragma_Interface                    83
! #define  Pragma_Interface_Name               84
! #define  Pragma_Interrupt_Handler            85
! #define  Pragma_Interrupt_Priority           86
! #define  Pragma_Java_Constructor             87
! #define  Pragma_Java_Interface               88
! #define  Pragma_Keep_Names                   89
! #define  Pragma_Link_With                    90
! #define  Pragma_Linker_Alias                 91
! #define  Pragma_Linker_Options               92
! #define  Pragma_Linker_Section               93
! #define  Pragma_List                         94
! #define  Pragma_Machine_Attribute            95
! #define  Pragma_Main                         96
! #define  Pragma_Main_Storage                 97
! #define  Pragma_Memory_Size                  98
! #define  Pragma_No_Return                    99
! #define  Pragma_Obsolescent                 100
! #define  Pragma_Optimize                    101
! #define  Pragma_Optional_Overriding         102
! #define  Pragma_Overriding                  103
! #define  Pragma_Pack                        104
! #define  Pragma_Page                        105
! #define  Pragma_Passive                     106
! #define  Pragma_Preelaborate                107
! #define  Pragma_Priority                    108
! #define  Pragma_Psect_Object                109
! #define  Pragma_Pure                        110
! #define  Pragma_Pure_Function               111
! #define  Pragma_Remote_Call_Interface       112
! #define  Pragma_Remote_Types                113
! #define  Pragma_Share_Generic               114
! #define  Pragma_Shared                      115
! #define  Pragma_Shared_Passive              116
! #define  Pragma_Source_Reference            117
! #define  Pragma_Stream_Convert              118
! #define  Pragma_Subtitle                    119
! #define  Pragma_Suppress_All                120
! #define  Pragma_Suppress_Debug_Info         121
! #define  Pragma_Suppress_Initialization     122
! #define  Pragma_System_Name                 123
! #define  Pragma_Task_Info                   124
! #define  Pragma_Task_Name                   125
! #define  Pragma_Task_Storage                126
! #define  Pragma_Thread_Body                 127
! #define  Pragma_Time_Slice                  128
! #define  Pragma_Title                       129
! #define  Pragma_Unchecked_Union             130
! #define  Pragma_Unimplemented_Unit          131
! #define  Pragma_Unreferenced                132
! #define  Pragma_Unreserve_All_Interrupts    133
! #define  Pragma_Volatile                    134
! #define  Pragma_Volatile_Components         135
! #define  Pragma_Weak_External               136
  
  /* The following are deliberately out of alphabetical order, see Snames */
  
! #define  Pragma_AST_Entry                   137
! #define  Pragma_Storage_Size                138
! #define  Pragma_Storage_Unit                139
  
  /* Define the numeric values for the conventions.  */
  
--- 204,357 ----
  
  #define  Pragma_Ada_83                        0
  #define  Pragma_Ada_95                        1
! #define  Pragma_Ada_05                        2
! #define  Pragma_C_Pass_By_Copy                3
! #define  Pragma_Compile_Time_Warning          4
! #define  Pragma_Component_Alignment           5
! #define  Pragma_Convention_Identifier         6
! #define  Pragma_Detect_Blocking               7
! #define  Pragma_Discard_Names                 8
! #define  Pragma_Elaboration_Checking          9
! #define  Pragma_Eliminate                    10
! #define  Pragma_Explicit_Overriding          11
! #define  Pragma_Extend_System                12
! #define  Pragma_Extensions_Allowed           13
! #define  Pragma_External_Name_Casing         14
! #define  Pragma_Float_Representation         15
! #define  Pragma_Initialize_Scalars           16
! #define  Pragma_Interrupt_State              17
! #define  Pragma_License                      18
! #define  Pragma_Locking_Policy               19
! #define  Pragma_Long_Float                   20
! #define  Pragma_No_Run_Time                  21
! #define  Pragma_No_Strict_Aliasing           22
! #define  Pragma_Normalize_Scalars            23
! #define  Pragma_Polling                      24
! #define  Pragma_Persistent_Data              25
! #define  Pragma_Persistent_Object            26
! #define  Pragma_Profile                      27
! #define  Pragma_Profile_Warnings             28
! #define  Pragma_Propagate_Exceptions         29
! #define  Pragma_Queuing_Policy               30
! #define  Pragma_Ravenscar                    31
! #define  Pragma_Restricted_Run_Time          32
! #define  Pragma_Restrictions                 33
! #define  Pragma_Restriction_Warnings         34
! #define  Pragma_Reviewable                   35
! #define  Pragma_Source_File_Name             36
! #define  Pragma_Source_File_Name_Project     37
! #define  Pragma_Style_Checks                 38
! #define  Pragma_Suppress                     39
! #define  Pragma_Suppress_Exception_Locations 40
! #define  Pragma_Task_Dispatching_Policy      41
! #define  Pragma_Universal_Data               42
! #define  Pragma_Unsuppress                   43
! #define  Pragma_Use_VADS_Size                44
! #define  Pragma_Validity_Checks              45
! #define  Pragma_Warnings                     46
  
  /* Remaining pragmas */
  
! #define  Pragma_Abort_Defer                  47
! #define  Pragma_All_Calls_Remote             48
! #define  Pragma_Annotate                     49
! #define  Pragma_Assert                       50
! #define  Pragma_Asynchronous                 51
! #define  Pragma_Atomic                       52
! #define  Pragma_Atomic_Components            53
! #define  Pragma_Attach_Handler               54
! #define  Pragma_Comment                      55
! #define  Pragma_Common_Object                56
! #define  Pragma_Complex_Representation       57
! #define  Pragma_Controlled                   58
! #define  Pragma_Convention                   59
! #define  Pragma_CPP_Class                    60
! #define  Pragma_CPP_Constructor              61
! #define  Pragma_CPP_Virtual                  62
! #define  Pragma_CPP_Vtable                   63
! #define  Pragma_Debug                        64
! #define  Pragma_Elaborate                    65
! #define  Pragma_Elaborate_All                66
! #define  Pragma_Elaborate_Body               67
! #define  Pragma_Export                       68
! #define  Pragma_Export_Exception             69
! #define  Pragma_Export_Function              70
! #define  Pragma_Export_Object                71
! #define  Pragma_Export_Procedure             72
! #define  Pragma_Export_Value                 73
! #define  Pragma_Export_Valued_Procedure      74
! #define  Pragma_External                     75
! #define  Pragma_Finalize_Storage_Only        76
! #define  Pragma_Ident                        77
! #define  Pragma_Import                       78
! #define  Pragma_Import_Exception             79
! #define  Pragma_Import_Function              80
! #define  Pragma_Import_Object                81
! #define  Pragma_Import_Procedure             82
! #define  Pragma_Import_Valued_Procedure      83
! #define  Pragma_Inline                       84
! #define  Pragma_Inline_Always                85
! #define  Pragma_Inline_Generic               86
! #define  Pragma_Inspection_Point             87
! #define  Pragma_Interface_Name               88
! #define  Pragma_Interrupt_Handler            89
! #define  Pragma_Interrupt_Priority           90
! #define  Pragma_Java_Constructor             91
! #define  Pragma_Java_Interface               92
! #define  Pragma_Keep_Names                   93
! #define  Pragma_Link_With                    94
! #define  Pragma_Linker_Alias                 95
! #define  Pragma_Linker_Options               96
! #define  Pragma_Linker_Section               97
! #define  Pragma_List                         98
! #define  Pragma_Machine_Attribute            99
! #define  Pragma_Main                        100
! #define  Pragma_Main_Storage                101
! #define  Pragma_Memory_Size                 102
! #define  Pragma_No_Return                   103
! #define  Pragma_Obsolescent                 104
! #define  Pragma_Optimize                    105
! #define  Pragma_Optional_Overriding         106
! #define  Pragma_Pack                        107
! #define  Pragma_Page                        108
! #define  Pragma_Passive                     109
! #define  Pragma_Preelaborate                110
! #define  Pragma_Priority                    111
! #define  Pragma_Psect_Object                112
! #define  Pragma_Pure                        113
! #define  Pragma_Pure_Function               114
! #define  Pragma_Remote_Call_Interface       115
! #define  Pragma_Remote_Types                116
! #define  Pragma_Share_Generic               117
! #define  Pragma_Shared                      118
! #define  Pragma_Shared_Passive              119
! #define  Pragma_Source_Reference            120
! #define  Pragma_Stream_Convert              121
! #define  Pragma_Subtitle                    122
! #define  Pragma_Suppress_All                123
! #define  Pragma_Suppress_Debug_Info         124
! #define  Pragma_Suppress_Initialization     125
! #define  Pragma_System_Name                 126
! #define  Pragma_Task_Info                   127
! #define  Pragma_Task_Name                   128
! #define  Pragma_Task_Storage                129
! #define  Pragma_Thread_Body                 130
! #define  Pragma_Time_Slice                  131
! #define  Pragma_Title                       132
! #define  Pragma_Unchecked_Union             133
! #define  Pragma_Unimplemented_Unit          134
! #define  Pragma_Unreferenced                135
! #define  Pragma_Unreserve_All_Interrupts    136
! #define  Pragma_Volatile                    137
! #define  Pragma_Volatile_Components         138
! #define  Pragma_Weak_External               139
  
  /* The following are deliberately out of alphabetical order, see Snames */
  
! #define  Pragma_AST_Entry                   140
! #define  Pragma_Interface                   141
! #define  Pragma_Storage_Size                142
! #define  Pragma_Storage_Unit                143
  
  /* Define the numeric values for the conventions.  */
  
diff -Nrcpad gcc-3.4.3/gcc/ada/socket.c gcc-4.0.0/gcc/ada/socket.c
*** gcc-3.4.3/gcc/ada/socket.c	Fri Oct 31 01:08:43 2003
--- gcc-4.0.0/gcc/ada/socket.c	Mon Jan  3 15:30:02 2005
***************
*** 2,12 ****
   *                                                                          *
   *                         GNAT COMPILER COMPONENTS                         *
   *                                                                          *
!  *                              S O C K E T                                 *
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *            Copyright (C) 2003, Free Software Foundation, Inc.            *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
--- 2,12 ----
   *                                                                          *
   *                         GNAT COMPILER COMPONENTS                         *
   *                                                                          *
!  *                               S O C K E T                                *
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *          Copyright (C) 2003-2004 Free Software Foundation, Inc.          *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
***************
*** 30,71 ****
   *                                                                          *
   ****************************************************************************/
  
! /*  This file provides a portable binding to the fd set functions           */
! 
! #ifdef __vxworks
! #include "vxWorks.h"
! #endif
! 
! #ifdef IN_RTS
! #include "tconfig.h"
! #include "tsystem.h"
! 
! #if defined (WINNT)
! #define FD_SETSIZE 1024
! #include <windows.h>
! 
! #ifdef __MINGW32__
! #include "mingw32.h"
! #if STD_MINGW
! #include <winsock.h>
! #else
! #include <windows32/sockets.h>
! #endif
! #endif
! #endif
! 
! #if defined (VMS)
! #define FD_SETSIZE 4096
! #include <sys/time.h>
! #endif
! 
! #else
! #include "config.h"
! #include "system.h"
! #endif
  
  #include "raise.h"
  
  extern void __gnat_free_socket_set (fd_set *);
  extern void __gnat_last_socket_in_set (fd_set *, int *);
  extern void __gnat_get_socket_from_set (fd_set *, int *, int *);
--- 30,41 ----
   *                                                                          *
   ****************************************************************************/
  
! /*  This file provides a portable binding to the sockets API                */
  
+ #include "gsocket.h"
  #include "raise.h"
  
+ extern void __gnat_disable_sigpipe (int fd);
  extern void __gnat_free_socket_set (fd_set *);
  extern void __gnat_last_socket_in_set (fd_set *, int *);
  extern void __gnat_get_socket_from_set (fd_set *, int *, int *);
*************** extern int __gnat_is_socket_in_set (fd_s
*** 74,79 ****
--- 44,59 ----
  extern fd_set *__gnat_new_socket_set (fd_set *);
  extern void __gnat_remove_socket_from_set (fd_set *, int);
  
+ /* Disable the sending of SIGPIPE for writes on a broken stream */
+ void
+ __gnat_disable_sigpipe (int fd)
+ {
+ #ifdef SO_NOSIGPIPE
+   int val = 1;
+   (void) setsockopt (fd, SOL_SOCKET, SO_NOSIGPIPE, &val, sizeof val);
+ #endif
+ }
+ 
  /* Free socket set. */
  
  void
diff -Nrcpad gcc-3.4.3/gcc/ada/sprint.adb gcc-4.0.0/gcc/ada/sprint.adb
*** gcc-3.4.3/gcc/ada/sprint.adb	Tue Jan 13 11:51:34 2004
--- gcc-4.0.0/gcc/ada/sprint.adb	Thu Feb 10 13:50:46 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Sprint is
*** 692,701 ****
              Write_Char (';');
  
           when N_Access_Definition =>
!             Write_Str_With_Col_Check_Sloc ("access ");
!             Sprint_Node (Subtype_Mark (Node));
  
           when N_Access_Function_Definition =>
              Write_Str_With_Col_Check_Sloc ("access ");
  
              if Protected_Present (Node) then
--- 692,728 ----
              Write_Char (';');
  
           when N_Access_Definition =>
! 
!             --  Ada 2005 (AI-254)
! 
!             if Present (Access_To_Subprogram_Definition (Node)) then
!                Sprint_Node (Access_To_Subprogram_Definition (Node));
!             else
!                --  Ada 2005 (AI-231)
! 
!                if Null_Exclusion_Present (Node) then
!                   Write_Str ("not null ");
!                end if;
! 
!                Write_Str_With_Col_Check_Sloc ("access ");
! 
!                if All_Present (Node) then
!                   Write_Str ("all ");
!                elsif Constant_Present (Node) then
!                   Write_Str ("constant ");
!                end if;
! 
!                Sprint_Node (Subtype_Mark (Node));
!             end if;
  
           when N_Access_Function_Definition =>
+ 
+             --  Ada 2005 (AI-231)
+ 
+             if Null_Exclusion_Present (Node) then
+                Write_Str ("not null ");
+             end if;
+ 
              Write_Str_With_Col_Check_Sloc ("access ");
  
              if Protected_Present (Node) then
*************** package body Sprint is
*** 708,713 ****
--- 735,747 ----
              Sprint_Node (Subtype_Mark (Node));
  
           when N_Access_Procedure_Definition =>
+ 
+             --  Ada 2005 (AI-231)
+ 
+             if Null_Exclusion_Present (Node) then
+                Write_Str ("not null ");
+             end if;
+ 
              Write_Str_With_Col_Check_Sloc ("access ");
  
              if Protected_Present (Node) then
*************** package body Sprint is
*** 726,731 ****
--- 760,771 ----
                 Write_Str_With_Col_Check ("constant ");
              end if;
  
+             --  Ada 2005 (AI-231)
+ 
+             if Null_Exclusion_Present (Node) then
+                Write_Str ("not null ");
+             end if;
+ 
              Sprint_Node (Subtype_Indication (Node));
  
           when N_Aggregate =>
*************** package body Sprint is
*** 774,779 ****
--- 814,826 ----
  
           when N_Allocator =>
              Write_Str_With_Col_Check_Sloc ("new ");
+ 
+             --  Ada 2005 (AI-231)
+ 
+             if Null_Exclusion_Present (Node) then
+                Write_Str ("not null ");
+             end if;
+ 
              Sprint_Node (Expression (Node));
  
              if Present (Storage_Pool (Node)) then
*************** package body Sprint is
*** 891,897 ****
              end if;
  
              Write_Char_Sloc (''');
!             Write_Char_Code (Char_Literal_Value (Node));
              Write_Char (''');
  
           when N_Code_Statement =>
--- 938,944 ----
              end if;
  
              Write_Char_Sloc (''');
!             Write_Char_Code (UI_To_CC (Char_Literal_Value (Node)));
              Write_Char (''');
  
           when N_Code_Statement =>
*************** package body Sprint is
*** 929,935 ****
              Sprint_Bar_List (Choices (Node));
              Write_Str (" => ");
  
!             --  Ada0Y (AI-287): Print the mbox if present
  
              if Box_Present (Node) then
                 Write_Str_With_Col_Check ("<>");
--- 976,982 ----
              Sprint_Bar_List (Choices (Node));
              Write_Str (" => ");
  
!             --  Ada 2005 (AI-287): Print the mbox if present
  
              if Box_Present (Node) then
                 Write_Str_With_Col_Check ("<>");
*************** package body Sprint is
*** 952,962 ****
           when N_Component_Definition =>
              Set_Debug_Sloc;
  
!             if Aliased_Present (Node) then
!                Write_Str_With_Col_Check ("aliased ");
!             end if;
  
!             Sprint_Node (Subtype_Indication (Node));
  
           when N_Component_Declaration =>
              if Write_Indent_Identifiers_Sloc (Node) then
--- 999,1025 ----
           when N_Component_Definition =>
              Set_Debug_Sloc;
  
!             --  Ada 2005 (AI-230): Access definition components
  
!             if Present (Access_Definition (Node)) then
!                Sprint_Node (Access_Definition (Node));
! 
!             elsif Present (Subtype_Indication (Node)) then
!                if Aliased_Present (Node) then
!                   Write_Str_With_Col_Check ("aliased ");
!                end if;
! 
!                --  Ada 2005 (AI-231)
! 
!                if Null_Exclusion_Present (Node) then
!                   Write_Str (" not null ");
!                end if;
! 
!                Sprint_Node (Subtype_Indication (Node));
! 
!             else
!                Write_Str (" ??? ");
!             end if;
  
           when N_Component_Declaration =>
              if Write_Indent_Identifiers_Sloc (Node) then
*************** package body Sprint is
*** 1074,1079 ****
--- 1137,1149 ----
              end if;
  
              Write_Str_With_Col_Check_Sloc ("new ");
+ 
+             --  Ada 2005 (AI-231)
+ 
+             if Null_Exclusion_Present (Node) then
+                Write_Str_With_Col_Check ("not null ");
+             end if;
+ 
              Sprint_Node (Subtype_Indication (Node));
  
              if Present (Record_Extension_Part (Node)) then
*************** package body Sprint is
*** 1107,1112 ****
--- 1177,1187 ----
  
              if Write_Identifiers (Node) then
                 Write_Str (" : ");
+ 
+                if Null_Exclusion_Present (Node) then
+                   Write_Str ("not null ");
+                end if;
+ 
                 Sprint_Node (Discriminant_Type (Node));
  
                 if Present (Expression (Node)) then
*************** package body Sprint is
*** 1288,1293 ****
--- 1363,1396 ----
                 Write_Str_With_Col_Check (" with private");
              end if;
  
+          when N_Formal_Abstract_Subprogram_Declaration =>
+             Write_Indent_Str_Sloc ("with ");
+             Sprint_Node (Specification (Node));
+ 
+             Write_Str_With_Col_Check (" is abstract");
+ 
+             if Box_Present (Node) then
+                Write_Str_With_Col_Check (" <>");
+             elsif Present (Default_Name (Node)) then
+                Write_Str_With_Col_Check (" ");
+                Sprint_Node (Default_Name (Node));
+             end if;
+ 
+             Write_Char (';');
+ 
+          when N_Formal_Concrete_Subprogram_Declaration =>
+             Write_Indent_Str_Sloc ("with ");
+             Sprint_Node (Specification (Node));
+ 
+             if Box_Present (Node) then
+                Write_Str_With_Col_Check (" is <>");
+             elsif Present (Default_Name (Node)) then
+                Write_Str_With_Col_Check (" is ");
+                Sprint_Node (Default_Name (Node));
+             end if;
+ 
+             Write_Char (';');
+ 
           when N_Formal_Discrete_Type_Definition =>
              Write_Str_With_Col_Check_Sloc ("<>");
  
*************** package body Sprint is
*** 1349,1367 ****
           when N_Formal_Signed_Integer_Type_Definition =>
              Write_Str_With_Col_Check_Sloc ("range <>");
  
-          when N_Formal_Subprogram_Declaration =>
-             Write_Indent_Str_Sloc ("with ");
-             Sprint_Node (Specification (Node));
- 
-             if Box_Present (Node) then
-                Write_Str_With_Col_Check (" is <>");
-             elsif Present (Default_Name (Node)) then
-                Write_Str_With_Col_Check (" is ");
-                Sprint_Node (Default_Name (Node));
-             end if;
- 
-             Write_Char (';');
- 
           when N_Formal_Type_Declaration =>
              Write_Indent_Str_Sloc ("type ");
              Write_Id (Defining_Identifier (Node));
--- 1452,1457 ----
*************** package body Sprint is
*** 1678,1683 ****
--- 1768,1779 ----
                    Write_Str_With_Col_Check ("constant ");
                 end if;
  
+                --  Ada 2005 (AI-231)
+ 
+                if Null_Exclusion_Present (Node) then
+                   Write_Str_With_Col_Check ("not null ");
+                end if;
+ 
                 Sprint_Node (Object_Definition (Node));
  
                 if Present (Expression (Node)) then
*************** package body Sprint is
*** 1693,1699 ****
              Set_Debug_Sloc;
              Sprint_Node (Defining_Identifier (Node));
              Write_Str (" : ");
!             Sprint_Node (Subtype_Mark (Node));
              Write_Str_With_Col_Check (" renames ");
              Sprint_Node (Name (Node));
              Write_Char (';');
--- 1789,1807 ----
              Set_Debug_Sloc;
              Sprint_Node (Defining_Identifier (Node));
              Write_Str (" : ");
! 
!             --  Ada 2005 (AI-230): Access renamings
! 
!             if Present (Access_Definition (Node)) then
!                Sprint_Node (Access_Definition (Node));
! 
!             elsif Present (Subtype_Mark (Node)) then
!                Sprint_Node (Subtype_Mark (Node));
! 
!             else
!                Write_Str (" ??? ");
!             end if;
! 
              Write_Str_With_Col_Check (" renames ");
              Sprint_Node (Name (Node));
              Write_Char (';');
*************** package body Sprint is
*** 1919,1924 ****
--- 2027,2038 ----
                    Write_Str_With_Col_Check ("out ");
                 end if;
  
+                --  Ada 2005 (AI-231)
+ 
+                if Null_Exclusion_Present (Node) then
+                   Write_Str ("not null ");
+                end if;
+ 
                 Sprint_Node (Parameter_Type (Node));
  
                 if Present (Expression (Node)) then
*************** package body Sprint is
*** 2303,2308 ****
--- 2417,2429 ----
              Write_Indent_Str_Sloc ("subtype ");
              Write_Id (Defining_Identifier (Node));
              Write_Str (" is ");
+ 
+             --  Ada 2005 (AI-231)
+ 
+             if Null_Exclusion_Present (Node) then
+                Write_Str ("not null ");
+             end if;
+ 
              Sprint_Node (Subtype_Indication (Node));
              Write_Char (';');
  
*************** package body Sprint is
*** 2349,2354 ****
--- 2470,2476 ----
              Write_Indent_Str_Sloc ("task type ");
              Write_Id (Defining_Identifier (Node));
              Write_Discr_Specs (Node);
+ 
              if Present (Task_Definition (Node)) then
                 Write_Str (" is");
                 Sprint_Node (Task_Definition (Node));
*************** package body Sprint is
*** 2493,2502 ****
              else
                 if First_Name (Node) or else not Dump_Original_Only then
  
!                   --  Ada0Y (AI-50217): Print limited with_clauses
  
!                   if Limited_Present (Node) then
                       Write_Indent_Str ("limited with ");
                    else
                       Write_Indent_Str ("with ");
                    end if;
--- 2615,2631 ----
              else
                 if First_Name (Node) or else not Dump_Original_Only then
  
!                   --  Ada 2005 (AI-50217): Print limited with_clauses
  
!                   if Private_Present (Node) and Limited_Present (Node) then
!                      Write_Indent_Str ("limited private with ");
! 
!                   elsif Private_Present (Node) then
!                      Write_Indent_Str ("private with ");
! 
!                   elsif Limited_Present (Node) then
                       Write_Indent_Str ("limited with ");
+ 
                    else
                       Write_Indent_Str ("with ");
                    end if;
*************** package body Sprint is
*** 2703,2715 ****
        Write_Str ("""]");
     end Write_Condition_And_Reason;
  
!    ------------------------
!    --  Write_Discr_Specs --
!    ------------------------
  
     procedure Write_Discr_Specs (N : Node_Id) is
!       Specs  : List_Id;
!       Spec   : Node_Id;
  
     begin
        Specs := Discriminant_Specifications (N);
--- 2832,2844 ----
        Write_Str ("""]");
     end Write_Condition_And_Reason;
  
!    -----------------------
!    -- Write_Discr_Specs --
!    -----------------------
  
     procedure Write_Discr_Specs (N : Node_Id) is
!       Specs : List_Id;
!       Spec  : Node_Id;
  
     begin
        Specs := Discriminant_Specifications (N);
diff -Nrcpad gcc-3.4.3/gcc/ada/stand.ads gcc-4.0.0/gcc/ada/stand.ads
*** gcc-3.4.3/gcc/ada/stand.ads	Thu Apr 24 17:54:19 2003
--- gcc-4.0.0/gcc/ada/stand.ads	Thu Feb 10 13:50:39 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2001 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Stand is
*** 59,66 ****
--- 59,68 ----
        S_Boolean,
        S_Character,
        S_Wide_Character,
+       S_Wide_Wide_Character,
        S_String,
        S_Wide_String,
+       S_Wide_Wide_String,
        S_Duration,
  
        S_Short_Short_Integer,
*************** package Stand is
*** 92,103 ****
        S_Storage_Error,
        S_Tasking_Error,
  
!       --  Binary Operators declared in package Standard.
  
        S_Op_Add,
        S_Op_And,
        S_Op_Concat,
        S_Op_Concatw,
        S_Op_Divide,
        S_Op_Eq,
        S_Op_Expon,
--- 94,106 ----
        S_Storage_Error,
        S_Tasking_Error,
  
!       --  Binary Operators declared in package Standard
  
        S_Op_Add,
        S_Op_And,
        S_Op_Concat,
        S_Op_Concatw,
+       S_Op_Concatww,
        S_Op_Divide,
        S_Op_Eq,
        S_Op_Expon,
*************** package Stand is
*** 250,257 ****
--- 253,262 ----
     Standard_ASCII               : Entity_Id renames SE (S_ASCII);
     Standard_Character           : Entity_Id renames SE (S_Character);
     Standard_Wide_Character      : Entity_Id renames SE (S_Wide_Character);
+    Standard_Wide_Wide_Character : Entity_Id renames SE (S_Wide_Wide_Character);
     Standard_String              : Entity_Id renames SE (S_String);
     Standard_Wide_String         : Entity_Id renames SE (S_Wide_String);
+    Standard_Wide_Wide_String    : Entity_Id renames SE (S_Wide_Wide_String);
  
     Standard_Boolean             : Entity_Id renames SE (S_Boolean);
     Standard_False               : Entity_Id renames SE (S_False);
*************** package Stand is
*** 283,288 ****
--- 288,294 ----
     Standard_Op_And              : Entity_Id renames SE (S_Op_And);
     Standard_Op_Concat           : Entity_Id renames SE (S_Op_Concat);
     Standard_Op_Concatw          : Entity_Id renames SE (S_Op_Concatw);
+    Standard_Op_Concatww         : Entity_Id renames SE (S_Op_Concatww);
     Standard_Op_Divide           : Entity_Id renames SE (S_Op_Divide);
     Standard_Op_Eq               : Entity_Id renames SE (S_Op_Eq);
     Standard_Op_Expon            : Entity_Id renames SE (S_Op_Expon);
*************** package Stand is
*** 310,315 ****
--- 316,324 ----
     --  Highest List_Id value used by Standard (including those used by
     --  normal list headers, element list headers, and list elements)
  
+    Boolean_Literals : array (Boolean) of Entity_Id;
+    --  Entities for the two boolean literals, used by the expander
+ 
     -------------------------------------
     -- Semantic Phase Special Entities --
     -------------------------------------
diff -Nrcpad gcc-3.4.3/gcc/ada/stringt.adb gcc-4.0.0/gcc/ada/stringt.adb
*** gcc-3.4.3/gcc/ada/stringt.adb	Tue Oct 21 13:42:22 2003
--- gcc-4.0.0/gcc/ada/stringt.adb	Thu Feb 10 13:50:39 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Stringt is
*** 355,373 ****
  
     procedure Write_Char_Code (Code : Char_Code) is
  
!       procedure Write_Hex_Byte (J : Natural);
!       --  Write single hex digit
  
        --------------------
        -- Write_Hex_Byte --
        --------------------
  
!       procedure Write_Hex_Byte (J : Natural) is
!          Hexd : constant String := "0123456789abcdef";
! 
        begin
!          Write_Char (Hexd (J / 16 + 1));
!          Write_Char (Hexd (J mod 16 + 1));
        end Write_Hex_Byte;
  
     --  Start of processing for Write_Char_Code
--- 355,373 ----
  
     procedure Write_Char_Code (Code : Char_Code) is
  
!       procedure Write_Hex_Byte (J : Char_Code);
!       --  Write single hex byte (value in range 0 .. 255) as two digits
  
        --------------------
        -- Write_Hex_Byte --
        --------------------
  
!       procedure Write_Hex_Byte (J : Char_Code) is
!          Hexd : constant array (Char_Code range 0 .. 15) of Character :=
!                   "0123456789abcdef";
        begin
!          Write_Char (Hexd (J / 16));
!          Write_Char (Hexd (J mod 16));
        end Write_Hex_Byte;
  
     --  Start of processing for Write_Char_Code
*************** package body Stringt is
*** 380,390 ****
           Write_Char ('[');
           Write_Char ('"');
  
           if Code > 16#FF# then
!             Write_Hex_Byte (Natural (Code / 256));
           end if;
  
!          Write_Hex_Byte (Natural (Code mod 256));
           Write_Char ('"');
           Write_Char (']');
        end if;
--- 380,398 ----
           Write_Char ('[');
           Write_Char ('"');
  
+          if Code > 16#FF_FFFF# then
+             Write_Hex_Byte (Code / 2 ** 24);
+          end if;
+ 
+          if Code > 16#FFFF# then
+             Write_Hex_Byte ((Code / 2 ** 16) mod 256);
+          end if;
+ 
           if Code > 16#FF# then
!             Write_Hex_Byte ((Code / 256) mod 256);
           end if;
  
!          Write_Hex_Byte (Code mod 256);
           Write_Char ('"');
           Write_Char (']');
        end if;
diff -Nrcpad gcc-3.4.3/gcc/ada/stringt.ads gcc-4.0.0/gcc/ada/stringt.ads
*** gcc-3.4.3/gcc/ada/stringt.ads	Tue Oct 21 13:42:22 2003
--- gcc-4.0.0/gcc/ada/stringt.ads	Thu Feb 10 13:50:39 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Stringt is
*** 128,139 ****
     --  Return address of Strings table (used by Back_End call to Gigi)
  
     procedure Tree_Read;
!    --  Initializes internal tables from current tree file using Tree_Read.
!    --  Note that Initialize should not be called if Tree_Read is used.
!    --  Tree_Read includes all necessary initialization.
  
     procedure Tree_Write;
!    --  Writes out internal tables to current tree file using Tree_Write
  
     procedure Write_Char_Code (Code : Char_Code);
     --  Procedure to write a character code value, used for debugging purposes
--- 128,140 ----
     --  Return address of Strings table (used by Back_End call to Gigi)
  
     procedure Tree_Read;
!    --  Initializes internal tables from current tree file using the relevant
!    --  Table.Tree_Read routines. Note that Initialize should not be called if
!    --  Tree_Read is used. Tree_Read includes all necessary initialization.
  
     procedure Tree_Write;
!    --  Writes out internal tables to current tree file using the relevant
!    --  Table.Tree_Write routines.
  
     procedure Write_Char_Code (Code : Char_Code);
     --  Procedure to write a character code value, used for debugging purposes
*************** package Stringt is
*** 153,160 ****
     --  ASCII graphics (except for double quote) are output literally.
     --  The double quote appears as two successive double quotes.
     --  All other codes, are output as described for Write_Char_Code. For
!    --  example, the string created by folding "A" & ASCII.LF & "Hello" will
!    --  print as "A["0a"]Hello". A No_String value prints simply as "no string"
     --  without surrounding quote marks.
  
  private
--- 154,161 ----
     --  ASCII graphics (except for double quote) are output literally.
     --  The double quote appears as two successive double quotes.
     --  All other codes, are output as described for Write_Char_Code. For
!    --  example, the string created by folding "A" & ASCII.HT & "Hello" will
!    --  print as "A["09"]Hello". A No_String value prints simply as "no string"
     --  without surrounding quote marks.
  
  private
diff -Nrcpad gcc-3.4.3/gcc/ada/style.ads gcc-4.0.0/gcc/ada/style.ads
*** gcc-3.4.3/gcc/ada/style.ads	Tue Oct 21 13:42:22 2003
--- gcc-4.0.0/gcc/ada/style.ads	Fri Nov 19 10:56:53 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Style is
*** 169,174 ****
--- 169,179 ----
       renames Style_Inst.Check_Vertical_Bar;
     --  Called after scanning a vertical bar to check spacing
  
+    procedure Check_Xtra_Parens (Loc : Source_Ptr)
+      renames Style_Inst.Check_Xtra_Parens;
+    --  Called after scanning a conditional expression that has at least one
+    --  level of parentheses around the entire expression.
+ 
     procedure No_End_Name (Name : Node_Id)
       renames Style_Inst.No_End_Name;
     --  Called if an END is encountered where a name is allowed but not present.
*************** package Style is
*** 193,199 ****
  
     function RM_Column_Check return Boolean
       renames Style_Inst.RM_Column_Check;
-    pragma Inline (RM_Column_Check);
     --  Determines whether style checking is active and the RM column check
     --  mode is set requiring checking of RM format layout.
  
--- 198,203 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/styleg-c.adb gcc-4.0.0/gcc/ada/styleg-c.adb
*** gcc-3.4.3/gcc/ada/styleg-c.adb	Tue Oct 21 13:42:22 2003
--- gcc-4.0.0/gcc/ada/styleg-c.adb	Fri Nov 19 10:56:53 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Styleg.C is
*** 217,223 ****
  
     procedure Subprogram_Not_In_Alpha_Order (Name : Node_Id) is
     begin
!       if Style_Check_Subprogram_Order then
           Error_Msg_N
             ("(style) subprogram body& not in alphabetical order", Name);
        end if;
--- 217,223 ----
  
     procedure Subprogram_Not_In_Alpha_Order (Name : Node_Id) is
     begin
!       if Style_Check_Order_Subprograms then
           Error_Msg_N
             ("(style) subprogram body& not in alphabetical order", Name);
        end if;
diff -Nrcpad gcc-3.4.3/gcc/ada/styleg.adb gcc-4.0.0/gcc/ada/styleg.adb
*** gcc-3.4.3/gcc/ada/styleg.adb	Tue Oct 21 13:42:22 2003
--- gcc-4.0.0/gcc/ada/styleg.adb	Fri Nov 19 10:56:53 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 28,34 ****
  --  checking rules. For documentation of these rules, see comments on the
  --  individual procedures.
  
! with Casing;  use Casing;
  with Csets;    use Csets;
  with Err_Vars; use Err_Vars;
  with Opt;      use Opt;
--- 28,34 ----
  --  checking rules. For documentation of these rules, see comments on the
  --  individual procedures.
  
! with Casing;   use Casing;
  with Csets;    use Csets;
  with Err_Vars; use Err_Vars;
  with Opt;      use Opt;
*************** package body Styleg is
*** 667,672 ****
--- 667,683 ----
        end if;
     end Check_Vertical_Bar;
  
+    -----------------------
+    -- Check_Xtra_Parens --
+    -----------------------
+ 
+    procedure Check_Xtra_Parens (Loc : Source_Ptr) is
+    begin
+       if Style_Check_Xtra_Parens then
+          Error_Msg ("redundant parentheses?", Loc);
+       end if;
+    end Check_Xtra_Parens;
+ 
     ----------------------------
     -- Determine_Token_Casing --
     ----------------------------
diff -Nrcpad gcc-3.4.3/gcc/ada/styleg.ads gcc-4.0.0/gcc/ada/styleg.ads
*** gcc-3.4.3/gcc/ada/styleg.ads	Tue Oct 21 13:42:22 2003
--- gcc-4.0.0/gcc/ada/styleg.ads	Fri Nov 19 10:56:53 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Styleg is
*** 132,137 ****
--- 132,141 ----
     procedure Check_Vertical_Bar;
     --  Called after scanning a vertical bar to check spacing
  
+    procedure Check_Xtra_Parens (Loc : Source_Ptr);
+    --  Called after scanning a conditional expression that has at least one
+    --  level of parentheses around the entire expression.
+ 
     procedure No_End_Name (Name : Node_Id);
     --  Called if an END is encountered where a name is allowed but not present.
     --  The parameter is the node whose name is the name that is permitted in
diff -Nrcpad gcc-3.4.3/gcc/ada/stylesw.adb gcc-4.0.0/gcc/ada/stylesw.adb
*** gcc-3.4.3/gcc/ada/stylesw.adb	Tue Oct 21 13:42:22 2003
--- gcc-4.0.0/gcc/ada/stylesw.adb	Thu Nov 25 13:07:56 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Stylesw is
*** 34,56 ****
  
     procedure Reset_Style_Check_Options is
     begin
!       Style_Check_Indentation      := 0;
!       Style_Check_Attribute_Casing := False;
!       Style_Check_Blanks_At_End    := False;
!       Style_Check_Comments         := False;
!       Style_Check_End_Labels       := False;
!       Style_Check_Form_Feeds       := False;
!       Style_Check_Horizontal_Tabs  := False;
!       Style_Check_If_Then_Layout   := False;
!       Style_Check_Keyword_Casing   := False;
!       Style_Check_Layout           := False;
!       Style_Check_Max_Line_Length  := False;
!       Style_Check_Pragma_Casing    := False;
!       Style_Check_References       := False;
!       Style_Check_Specs            := False;
!       Style_Check_Standard         := False;
!       Style_Check_Subprogram_Order := False;
!       Style_Check_Tokens           := False;
     end Reset_Style_Check_Options;
  
     ------------------------------
--- 34,58 ----
  
     procedure Reset_Style_Check_Options is
     begin
!       Style_Check_Indentation       := 0;
!       Style_Check_Attribute_Casing  := False;
!       Style_Check_Blanks_At_End     := False;
!       Style_Check_Comments          := False;
!       Style_Check_End_Labels        := False;
!       Style_Check_Form_Feeds        := False;
!       Style_Check_Horizontal_Tabs   := False;
!       Style_Check_If_Then_Layout    := False;
!       Style_Check_Keyword_Casing    := False;
!       Style_Check_Layout            := False;
!       Style_Check_Max_Line_Length   := False;
!       Style_Check_Max_Nesting_Level := False;
!       Style_Check_Order_Subprograms := False;
!       Style_Check_Pragma_Casing     := False;
!       Style_Check_References        := False;
!       Style_Check_Specs             := False;
!       Style_Check_Standard          := False;
!       Style_Check_Tokens            := False;
!       Style_Check_Xtra_Parens       := False;
     end Reset_Style_Check_Options;
  
     ------------------------------
*************** package body Stylesw is
*** 59,69 ****
  
     procedure Save_Style_Check_Options (Options : out Style_Check_Options) is
        P : Natural := 0;
-       J : Natural;
  
        procedure Add (C : Character; S : Boolean);
        --  Add given character C to string if switch S is true
  
        procedure Add (C : Character; S : Boolean) is
        begin
           if S then
--- 61,77 ----
  
     procedure Save_Style_Check_Options (Options : out Style_Check_Options) is
        P : Natural := 0;
  
        procedure Add (C : Character; S : Boolean);
        --  Add given character C to string if switch S is true
  
+       procedure Add_Nat (N : Nat);
+       --  Add given natural number to string
+ 
+       ---------
+       -- Add --
+       ---------
+ 
        procedure Add (C : Character; S : Boolean) is
        begin
           if S then
*************** package body Stylesw is
*** 72,77 ****
--- 80,99 ----
           end if;
        end Add;
  
+       -------------
+       -- Add_Nat --
+       -------------
+ 
+       procedure Add_Nat (N : Nat) is
+       begin
+          if N > 9 then
+             Add_Nat (N / 10);
+          end if;
+ 
+          P := P + 1;
+          Options (P) := Character'Val (Character'Pos ('0') + N mod 10);
+       end Add_Nat;
+ 
     --  Start of processing for Save_Style_Check_Options
  
     begin
*************** package body Stylesw is
*** 91,118 ****
        Add ('i', Style_Check_If_Then_Layout);
        Add ('k', Style_Check_Keyword_Casing);
        Add ('l', Style_Check_Layout);
-       Add ('m', Style_Check_Max_Line_Length);
        Add ('n', Style_Check_Standard);
!       Add ('o', Style_Check_Subprogram_Order);
        Add ('p', Style_Check_Pragma_Casing);
        Add ('r', Style_Check_References);
        Add ('s', Style_Check_Specs);
        Add ('t', Style_Check_Tokens);
  
        if Style_Check_Max_Line_Length then
!          P := Options'Last;
!          J := Natural (Style_Max_Line_Length);
! 
!          loop
!             Options (P) := Character'Val (J mod 10 + Character'Pos ('0'));
!             P := P - 1;
!             J := J / 10;
!             exit when J = 0;
!          end loop;
! 
           Options (P) := 'M';
        end if;
  
     end Save_Style_Check_Options;
  
     -------------------------------------
--- 113,144 ----
        Add ('i', Style_Check_If_Then_Layout);
        Add ('k', Style_Check_Keyword_Casing);
        Add ('l', Style_Check_Layout);
        Add ('n', Style_Check_Standard);
!       Add ('o', Style_Check_Order_Subprograms);
        Add ('p', Style_Check_Pragma_Casing);
        Add ('r', Style_Check_References);
        Add ('s', Style_Check_Specs);
        Add ('t', Style_Check_Tokens);
+       Add ('x', Style_Check_Xtra_Parens);
  
        if Style_Check_Max_Line_Length then
!          P := P + 1;
           Options (P) := 'M';
+          Add_Nat (Style_Max_Line_Length);
+       end if;
+ 
+       if Style_Check_Max_Nesting_Level then
+          P := P + 1;
+          Options (P) := 'L';
+          Add_Nat (Style_Max_Nesting_Level);
        end if;
  
+       pragma Assert (P <= Options'Last);
+ 
+       while P < Options'Last loop
+          P := P + 1;
+          Options (P) := ' ';
+       end loop;
     end Save_Style_Check_Options;
  
     -------------------------------------
*************** package body Stylesw is
*** 134,140 ****
     procedure Set_Style_Check_Options (Options : String) is
        OK : Boolean;
        EC : Natural;
- 
     begin
        Set_Style_Check_Options (Options, OK, EC);
     end Set_Style_Check_Options;
--- 160,165 ----
*************** package body Stylesw is
*** 161,198 ****
                    := Character'Pos (C) - Character'Pos ('0');
  
              when 'a' =>
!                Style_Check_Attribute_Casing := True;
  
              when 'b' =>
!                Style_Check_Blanks_At_End    := True;
  
              when 'c' =>
!                Style_Check_Comments         := True;
  
              when 'e' =>
!                Style_Check_End_Labels       := True;
  
              when 'f' =>
!                Style_Check_Form_Feeds       := True;
  
              when 'h' =>
!                Style_Check_Horizontal_Tabs  := True;
  
              when 'i' =>
!                Style_Check_If_Then_Layout   := True;
  
              when 'k' =>
!                Style_Check_Keyword_Casing   := True;
  
              when 'l' =>
!                Style_Check_Layout           := True;
  
              when 'm' =>
!                Style_Check_Max_Line_Length  := True;
!                Style_Max_Line_Length        := 79;
  
              when 'n' =>
!                Style_Check_Standard         := True;
  
              when 'M' =>
                 Style_Max_Line_Length := 0;
--- 186,255 ----
                    := Character'Pos (C) - Character'Pos ('0');
  
              when 'a' =>
!                Style_Check_Attribute_Casing  := True;
  
              when 'b' =>
!                Style_Check_Blanks_At_End     := True;
  
              when 'c' =>
!                Style_Check_Comments          := True;
  
              when 'e' =>
!                Style_Check_End_Labels        := True;
  
              when 'f' =>
!                Style_Check_Form_Feeds        := True;
  
              when 'h' =>
!                Style_Check_Horizontal_Tabs   := True;
  
              when 'i' =>
!                Style_Check_If_Then_Layout    := True;
  
              when 'k' =>
!                Style_Check_Keyword_Casing    := True;
  
              when 'l' =>
!                Style_Check_Layout            := True;
! 
!             when 'L' =>
!                Style_Max_Nesting_Level := 0;
! 
!                if J > Options'Last
!                  or else Options (J) not in '0' .. '9'
!                then
!                   OK := False;
!                   Err_Col := J;
!                   return;
!                end if;
! 
!                loop
!                   Style_Max_Nesting_Level :=
!                     Style_Max_Nesting_Level * 10 +
!                       Character'Pos (Options (J)) - Character'Pos ('0');
! 
!                   if Style_Max_Nesting_Level > 999 then
!                      OK := False;
!                      Err_Col := J;
!                      return;
!                   end if;
! 
!                   J := J + 1;
!                   exit when J > Options'Last
!                     or else Options (J) not in '0' .. '9';
!                end loop;
! 
!                Style_Check_Max_Nesting_Level := Style_Max_Nesting_Level /= 0;
  
              when 'm' =>
!                Style_Check_Max_Line_Length   := True;
!                Style_Max_Line_Length         := 79;
  
              when 'n' =>
!                Style_Check_Standard          := True;
! 
!             when 'N' =>
!                Reset_Style_Check_Options;
  
              when 'M' =>
                 Style_Max_Line_Length := 0;
*************** package body Stylesw is
*** 221,242 ****
                      or else Options (J) not in '0' .. '9';
                 end loop;
  
!                Style_Check_Max_Line_Length := Style_Max_Line_Length /= 0;
  
              when 'o' =>
!                Style_Check_Subprogram_Order := True;
  
              when 'p' =>
!                Style_Check_Pragma_Casing    := True;
  
              when 'r' =>
!                Style_Check_References       := True;
  
              when 's' =>
!                Style_Check_Specs            := True;
  
              when 't' =>
!                Style_Check_Tokens           := True;
  
              when ' ' =>
                 null;
--- 278,302 ----
                      or else Options (J) not in '0' .. '9';
                 end loop;
  
!                Style_Check_Max_Line_Length   := Style_Max_Line_Length /= 0;
  
              when 'o' =>
!                Style_Check_Order_Subprograms := True;
  
              when 'p' =>
!                Style_Check_Pragma_Casing     := True;
  
              when 'r' =>
!                Style_Check_References        := True;
  
              when 's' =>
!                Style_Check_Specs             := True;
  
              when 't' =>
!                Style_Check_Tokens            := True;
! 
!             when 'x' =>
!                Style_Check_Xtra_Parens       := True;
  
              when ' ' =>
                 null;
diff -Nrcpad gcc-3.4.3/gcc/ada/stylesw.ads gcc-4.0.0/gcc/ada/stylesw.ads
*** gcc-3.4.3/gcc/ada/stylesw.ads	Tue Oct 21 13:42:22 2003
--- gcc-4.0.0/gcc/ada/stylesw.ads	Fri Nov 19 10:56:53 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Stylesw is
*** 140,145 ****
--- 140,155 ----
     --  If it is True, it activates checking for a maximum line length of
     --  Style_Max_Line_Length characters.
  
+    Style_Check_Max_Nesting_Level : Boolean := False;
+    --  This can be set True by using -gnatyLnnn with a value other than
+    --  zero (a value of zero resets it to False). If True, it activates
+    --  checking the maximum nesting level against Style_Max_Nesting_Level.
+ 
+    Style_Check_Order_Subprograms : Boolean := False;
+    --  This can be set True by using the -gnatg or -gnatyo switch. If it
+    --  is True, then names of subprogram bodies must be in alphabetical
+    --  order (not taking casing into account).
+ 
     Style_Check_Pragma_Casing : Boolean := False;
     --  This can be set True by using the -gnatg or -gnatyp switches. If
     --  it is True, then pragma names must use mixed case.
*************** package Stylesw is
*** 211,224 ****
     --  where horizontal tabs are permitted, a horizontal tab is acceptable
     --  for meeting the requirement for a space.
  
!    Style_Check_Subprogram_Order : Boolean := False;
!    --  This can be set True by using the -gnatg or -gnatyo switch. If it
!    --  is True, then names of subprogram bodies must be in alphabetical
!    --  order (not taking casing into account).
  
     Style_Max_Line_Length : Int := 0;
     --  Value used to check maximum line length. Gets reset as a result of
!    --  use of -gnatym or -gnatyM switches (or by use of -gnatg).
  
     -----------------
     -- Subprograms --
--- 221,240 ----
     --  where horizontal tabs are permitted, a horizontal tab is acceptable
     --  for meeting the requirement for a space.
  
!    Style_Check_Xtra_Parens : Boolean := False;
!    --  This can be set True by using the -gnatg or -gnatyx switch. If true,
!    --  then it is not allowed to enclose entire conditional expressions
!    --  in parentheses (C style).
  
     Style_Max_Line_Length : Int := 0;
     --  Value used to check maximum line length. Gets reset as a result of
!    --  use of -gnatym or -gnatyMnnn switches (or by use of -gnatg). This
!    --  value is only read if Style_Check_Max_Line_Length is True.
! 
!    Style_Max_Nesting_Level : Int := 0;
!    --  Value used to check maximum nesting level. Gets reset as a result
!    --  of use of the -gnatyLnnn switch. This value is only read if
!    --  Style_Check_Max_Nesting_Level is True.
  
     -----------------
     -- Subprograms --
*************** package Stylesw is
*** 250,256 ****
     procedure Reset_Style_Check_Options;
     --  Sets all style check options to off
  
!    subtype Style_Check_Options is String (1 .. 32);
     --  Long enough string to hold all options from Save call below
  
     procedure Save_Style_Check_Options (Options : out Style_Check_Options);
--- 266,272 ----
     procedure Reset_Style_Check_Options;
     --  Sets all style check options to off
  
!    subtype Style_Check_Options is String (1 .. 64);
     --  Long enough string to hold all options from Save call below
  
     procedure Save_Style_Check_Options (Options : out Style_Check_Options);
diff -Nrcpad gcc-3.4.3/gcc/ada/switch-b.adb gcc-4.0.0/gcc/ada/switch-b.adb
*** gcc-3.4.3/gcc/ada/switch-b.adb	Mon Jan  5 15:20:47 2004
--- gcc-4.0.0/gcc/ada/switch-b.adb	Thu Feb 10 13:50:32 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Switch.B is
*** 350,355 ****
--- 350,361 ----
              All_Sources := False;
              Check_Source_Files := False;
  
+          --  Processing for X switch
+ 
+          when 'X' =>
+             Ptr := Ptr + 1;
+             Scan_Pos (Switch_Chars, Max, Ptr, Default_Exit_Status);
+ 
           --  Processing for z switch
  
           when 'z' =>
diff -Nrcpad gcc-3.4.3/gcc/ada/switch-c.adb gcc-4.0.0/gcc/ada/switch-c.adb
*** gcc-3.4.3/gcc/ada/switch-c.adb	Mon Jan  5 15:20:47 2004
--- gcc-4.0.0/gcc/ada/switch-c.adb	Fri Jun 25 16:39:33 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Switch.C is
*** 382,387 ****
--- 382,393 ----
                       Full_Path_Name_For_Brief_Errors := True;
                       return;
  
+                   --  -gnateI (index of unit in multi-unit source)
+ 
+                   when 'I' =>
+                      Ptr := Ptr + 1;
+                      Scan_Pos (Switch_Chars, Max, Ptr, Multiple_Unit_Index);
+ 
                    --  -gnatem (mapping file)
  
                    when 'm' =>
*************** package body Switch.C is
*** 440,445 ****
--- 446,456 ----
  
                    return;
  
+                   when 'z' =>
+                      Store_Switch := False;
+                      Disable_Switch_Storing;
+                      Ptr := Ptr + 1;
+ 
                    --  All other -gnate? switches are unassigned
  
                    when others =>
*************** package body Switch.C is
*** 951,956 ****
--- 962,968 ----
              when 'X' =>
                 Ptr := Ptr + 1;
                 Extensions_Allowed := True;
+                Ada_Version := Ada_Version_Type'Last;
  
              --  Processing for y switch
  
*************** package body Switch.C is
*** 1035,1041 ****
              --  Processing for 83 switch
  
              when '8' =>
- 
                 if Ptr = Max then
                    raise Bad_Switch;
                 end if;
--- 1047,1052 ----
*************** package body Switch.C is
*** 1046,1053 ****
                    raise Bad_Switch;
                 else
                    Ptr := Ptr + 1;
!                   Ada_95 := False;
!                   Ada_83 := True;
                 end if;
  
              --  Ignore extra switch character
--- 1057,1095 ----
                    raise Bad_Switch;
                 else
                    Ptr := Ptr + 1;
!                   Ada_Version := Ada_83;
!                end if;
! 
!             --  Processing for 95 switch
! 
!             when '9' =>
!                if Ptr = Max then
!                   raise Bad_Switch;
!                end if;
! 
!                Ptr := Ptr + 1;
! 
!                if Switch_Chars (Ptr) /= '5' then
!                   raise Bad_Switch;
!                else
!                   Ptr := Ptr + 1;
!                   Ada_Version := Ada_95;
!                end if;
! 
!             --  Processing for 05 switch
! 
!             when '0' =>
!                if Ptr = Max then
!                   raise Bad_Switch;
!                end if;
! 
!                Ptr := Ptr + 1;
! 
!                if Switch_Chars (Ptr) /= '5' then
!                   raise Bad_Switch;
!                else
!                   Ptr := Ptr + 1;
!                   Ada_Version := Ada_05;
                 end if;
  
              --  Ignore extra switch character
diff -Nrcpad gcc-3.4.3/gcc/ada/switch-m.adb gcc-4.0.0/gcc/ada/switch-m.adb
*** gcc-3.4.3/gcc/ada/switch-m.adb	Mon Jan  5 15:20:47 2004
--- gcc-4.0.0/gcc/ada/switch-m.adb	Mon May 10 16:18:53 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Switch.M is
*** 86,93 ****
  
           elsif Last = Switches'Last then
              declare
!                New_Switches : Argument_List_Access := new Argument_List
!                  (1 .. Switches'Length + Switches'Length);
              begin
                 New_Switches (1 .. Switches'Length) := Switches.all;
                 Last := Switches'Length;
--- 86,94 ----
  
           elsif Last = Switches'Last then
              declare
!                New_Switches : constant Argument_List_Access :=
!                                 new Argument_List
!                                       (1 .. Switches'Length + Switches'Length);
              begin
                 New_Switches (1 .. Switches'Length) := Switches.all;
                 Last := Switches'Length;
*************** package body Switch.M is
*** 96,104 ****
           end if;
  
           --  If this is the first switch, Last designates the first component
           if Last = 0 then
              Last := Switches'First;
- 
           else
              Last := Last + 1;
           end if;
--- 97,105 ----
           end if;
  
           --  If this is the first switch, Last designates the first component
+ 
           if Last = 0 then
              Last := Switches'First;
           else
              Last := Last + 1;
           end if;
*************** package body Switch.M is
*** 225,232 ****
  
                    when 'e' =>
  
!                      --  Only -gnateD and -gnatep= need to be store in an ALI
!                      --  file.
  
                       Storing (First_Stored) := 'e';
                       Ptr := Ptr + 1;
--- 226,232 ----
  
                    when 'e' =>
  
!                      --  Only -gnateD and -gnatep= need storing in ALI file
  
                       Storing (First_Stored) := 'e';
                       Ptr := Ptr + 1;
*************** package body Switch.M is
*** 239,247 ****
                          return;
                       end if;
  
!                      if Switch_Chars (Ptr) = 'D' then
!                         --  gnateD
  
                          Storing (First_Stored + 1 ..
                                   First_Stored + Max - Ptr + 1) :=
                            Switch_Chars (Ptr .. Max);
--- 239,247 ----
                          return;
                       end if;
  
!                      --  Processing for -gnateD
  
+                      if Switch_Chars (Ptr) = 'D' then
                          Storing (First_Stored + 1 ..
                                   First_Stored + Max - Ptr + 1) :=
                            Switch_Chars (Ptr .. Max);
*************** package body Switch.M is
*** 249,257 ****
                            (Storing (Storing'First ..
                                        First_Stored + Max - Ptr + 1));
  
!                      else
!                         --  gnatep=
  
                          Ptr := Ptr + 1;
  
                          if Ptr = Max then
--- 249,257 ----
                            (Storing (Storing'First ..
                                        First_Stored + Max - Ptr + 1));
  
!                      --  Processing for -gnatep=
  
+                      else
                          Ptr := Ptr + 1;
  
                          if Ptr = Max then
*************** package body Switch.M is
*** 269,275 ****
  
                          declare
                             To_Store : String (1 .. Max - Ptr + 9);
- 
                          begin
                             To_Store (1 .. 8) := "-gnatep=";
                             To_Store (9 .. Max - Ptr + 9) :=
--- 269,274 ----
*************** package body Switch.M is
*** 552,557 ****
--- 551,583 ----
  
              return;
  
+          --  Processing for e switch
+ 
+          when 'e' =>
+             Ptr := Ptr + 1;
+ 
+             if Ptr > Max then
+                raise Bad_Switch;
+             end if;
+ 
+             case Switch_Chars (Ptr) is
+ 
+                --  processing for eI switch
+ 
+                when 'I' =>
+                   Ptr := Ptr + 1;
+                   Scan_Pos (Switch_Chars, Max, Ptr, Main_Index);
+ 
+                --  processing for eL switch
+ 
+                when 'L' =>
+                   Ptr := Ptr + 1;
+                   Follow_Links := True;
+ 
+                when others =>
+                   raise Bad_Switch;
+             end case;
+ 
           --  Processing for f switch
  
           when 'f' =>
*************** package body Switch.M is
*** 646,651 ****
--- 672,683 ----
              Ptr := Ptr + 1;
              Verbose_Mode := True;
  
+          --  Processing for x switch
+ 
+          when 'x' =>
+             Ptr := Ptr + 1;
+             External_Unit_Compilation_Allowed := True;
+ 
           --  Processing for z switch
  
           when 'z' =>
diff -Nrcpad gcc-3.4.3/gcc/ada/switch.adb gcc-4.0.0/gcc/ada/switch.adb
*** gcc-3.4.3/gcc/ada/switch.adb	Tue Oct 21 13:42:22 2003
--- gcc-4.0.0/gcc/ada/switch.adb	Fri Jun 25 16:39:33 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Switch is
*** 32,46 ****
  
     function Is_Front_End_Switch (Switch_Chars : String) return Boolean is
        Ptr : constant Positive := Switch_Chars'First;
- 
     begin
        return Is_Switch (Switch_Chars)
          and then
!         (Switch_Chars (Ptr + 1) = 'I'
!          or else (Switch_Chars'Length >= 5
!                   and then Switch_Chars (Ptr + 1 .. Ptr + 4) = "gnat")
!          or else (Switch_Chars'Length >= 5
!                   and then Switch_Chars (Ptr + 1 .. Ptr + 4) = "fRTS"));
     end Is_Front_End_Switch;
  
     ---------------
--- 32,45 ----
  
     function Is_Front_End_Switch (Switch_Chars : String) return Boolean is
        Ptr : constant Positive := Switch_Chars'First;
     begin
        return Is_Switch (Switch_Chars)
          and then
!           (Switch_Chars (Ptr + 1) = 'I'
!             or else (Switch_Chars'Length >= 5
!                       and then Switch_Chars (Ptr + 1 .. Ptr + 4) = "gnat")
!             or else (Switch_Chars'Length >= 5
!                       and then Switch_Chars (Ptr + 2 .. Ptr + 4) = "RTS"));
     end Is_Front_End_Switch;
  
     ---------------
*************** package body Switch is
*** 90,97 ****
       (Switch_Chars : String;
        Max          : Integer;
        Ptr          : in out Integer;
!       Result       : out Pos) is
! 
        Temp : Nat;
  
     begin
--- 89,96 ----
       (Switch_Chars : String;
        Max          : Integer;
        Ptr          : in out Integer;
!       Result       : out Pos)
!    is
        Temp : Nat;
  
     begin
diff -Nrcpad gcc-3.4.3/gcc/ada/symbols-vms-alpha.adb gcc-4.0.0/gcc/ada/symbols-vms-alpha.adb
*** gcc-3.4.3/gcc/ada/symbols-vms-alpha.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/symbols-vms-alpha.adb	Mon Jun 14 13:18:58 2004
***************
*** 0 ****
--- 1,774 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                              S Y M B O L S                               --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 2003-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the VMS version of this package
+ 
+ with Ada.Exceptions;    use Ada.Exceptions;
+ with Ada.Sequential_IO;
+ with Ada.Text_IO;       use Ada.Text_IO;
+ 
+ package body Symbols is
+ 
+    Case_Sensitive  : constant String := "case_sensitive=";
+    Symbol_Vector   : constant String := "SYMBOL_VECTOR=(";
+    Equal_Data      : constant String := "=DATA)";
+    Equal_Procedure : constant String := "=PROCEDURE)";
+    Gsmatch         : constant String := "gsmatch=equal,";
+ 
+    Symbol_File_Name : String_Access := null;
+    --  Name of the symbol file
+ 
+    Sym_Policy : Policy := Autonomous;
+    --  The symbol policy. Set by Initialize
+ 
+    Major_ID : Integer := 1;
+    --  The Major ID. May be modified by Initialize if Library_Version is
+    --  specified or if it is read from the reference symbol file.
+ 
+    Soft_Major_ID : Boolean := True;
+    --  False if library version is specified in procedure Initialize.
+    --  When True, Major_ID may be modified if found in the reference symbol
+    --  file.
+ 
+    Minor_ID : Natural := 0;
+    --  The Minor ID. May be modified if read from the reference symbol file
+ 
+    Soft_Minor_ID : Boolean := True;
+    --  False if symbol policy is Autonomous, if library version is specified
+    --  in procedure Initialize and is not the same as the major ID read from
+    --  the reference symbol file. When True, Minor_ID may be increased in
+    --  Compliant symbol policy.
+ 
+    subtype Byte is Character;
+    --  Object files are stream of bytes, but some of these bytes, those for
+    --  the names of the symbols, are ASCII characters.
+ 
+    package Byte_IO is new Ada.Sequential_IO (Byte);
+    use Byte_IO;
+ 
+    type Number is mod 2**16;
+    --  16 bits unsigned number for number of characters
+ 
+    GSD : constant Number := 10;
+    --  Code for the Global Symbol Definition section
+ 
+    C_SYM : constant Number := 1;
+    --  Code for a Symbol subsection
+ 
+    V_DEF_Mask  : constant Number := 2**1;
+    V_NORM_Mask : constant Number := 2**6;
+ 
+    File : Byte_IO.File_Type;
+    --  Each object file is read as a stream of bytes (characters)
+ 
+    B : Byte;
+ 
+    Number_Of_Characters : Natural := 0;
+    --  The number of characters of each section
+ 
+    --  The following variables are used by procedure Process when reading an
+    --  object file.
+ 
+    Code   : Number := 0;
+    Length : Natural := 0;
+ 
+    Dummy : Number;
+ 
+    Nchars : Natural := 0;
+    Flags  : Number  := 0;
+ 
+    Symbol : String (1 .. 255);
+    LSymb  : Natural;
+ 
+    function Equal (Left, Right : Symbol_Data) return Boolean;
+    --  Test for equality of symbols
+ 
+    procedure Get (N : out Number);
+    --  Read two bytes from the object file LSB first as unsigned 16 bit number
+ 
+    procedure Get (N : out Natural);
+    --  Read two bytes from the object file, LSByte first, as a Natural
+ 
+ 
+    function Image (N : Integer) return String;
+    --  Returns the image of N, without the initial space
+ 
+    -----------
+    -- Equal --
+    -----------
+ 
+    function Equal (Left, Right : Symbol_Data) return Boolean is
+    begin
+       return Left.Name /= null and then
+              Right.Name /= null and then
+              Left.Name.all = Right.Name.all and then
+              Left.Kind = Right.Kind and then
+              Left.Present = Right.Present;
+    end Equal;
+ 
+    ---------
+    -- Get --
+    ---------
+ 
+    procedure Get (N : out Number) is
+       C : Byte;
+       LSByte : Number;
+    begin
+       Read (File, C);
+       LSByte := Byte'Pos (C);
+       Read (File, C);
+       N := LSByte + (256 * Byte'Pos (C));
+    end Get;
+ 
+    procedure Get (N : out Natural) is
+       Result : Number;
+    begin
+       Get (Result);
+       N := Natural (Result);
+    end Get;
+ 
+    -----------
+    -- Image --
+    -----------
+ 
+    function Image (N : Integer) return String is
+       Result : constant String := N'Img;
+    begin
+       if Result (Result'First) = ' ' then
+          return Result (Result'First + 1 .. Result'Last);
+ 
+       else
+          return Result;
+       end if;
+    end Image;
+ 
+    ----------------
+    -- Initialize --
+    ----------------
+ 
+    procedure Initialize
+      (Symbol_File   : String;
+       Reference     : String;
+       Symbol_Policy : Policy;
+       Quiet         : Boolean;
+       Version       : String;
+       Success       : out Boolean)
+    is
+       File : Ada.Text_IO.File_Type;
+       Line : String (1 .. 1_000);
+       Last : Natural;
+ 
+    begin
+       --  Record the symbol file name
+ 
+       Symbol_File_Name := new String'(Symbol_File);
+ 
+       --  Record the policy
+ 
+       Sym_Policy := Symbol_Policy;
+ 
+       --  Record the version (Major ID)
+ 
+       if Version = "" then
+          Major_ID := 1;
+          Soft_Major_ID := True;
+ 
+       else
+          begin
+             Major_ID := Integer'Value (Version);
+             Soft_Major_ID := False;
+ 
+             if Major_ID <= 0 then
+                raise Constraint_Error;
+             end if;
+ 
+          exception
+             when Constraint_Error =>
+                if not Quiet then
+                   Put_Line ("Version """ & Version & """ is illegal.");
+                   Put_Line ("On VMS, version must be a positive number");
+                end if;
+ 
+                Success := False;
+                return;
+          end;
+       end if;
+ 
+       Minor_ID := 0;
+       Soft_Minor_ID := Sym_Policy /= Autonomous;
+ 
+       --  Empty the symbol tables
+ 
+       Symbol_Table.Set_Last (Original_Symbols, 0);
+       Symbol_Table.Set_Last (Complete_Symbols, 0);
+ 
+       --  Assume that everything will be fine
+ 
+       Success := True;
+ 
+       --  If policy is Compliant or Controlled, attempt to read the reference
+       --  file. If policy is Restricted, attempt to read the symbol file.
+ 
+       if Sym_Policy /= Autonomous then
+          case Sym_Policy is
+             when Autonomous =>
+                null;
+ 
+             when Compliant | Controlled =>
+                begin
+                   Open (File, In_File, Reference);
+ 
+                exception
+                   when Ada.Text_IO.Name_Error =>
+                      Success := False;
+                      return;
+ 
+                   when X : others =>
+                      if not Quiet then
+                         Put_Line ("could not open """ & Reference & """");
+                         Put_Line (Exception_Message (X));
+                      end if;
+ 
+                      Success := False;
+                      return;
+                end;
+ 
+             when Restricted =>
+                begin
+                   Open (File, In_File, Symbol_File);
+ 
+                exception
+                   when Ada.Text_IO.Name_Error =>
+                      Success := False;
+                      return;
+ 
+                   when X : others =>
+                      if not Quiet then
+                         Put_Line ("could not open """ & Symbol_File & """");
+                         Put_Line (Exception_Message (X));
+                      end if;
+ 
+                      Success := False;
+                      return;
+                end;
+          end case;
+ 
+          --  Read line by line
+ 
+          while not End_Of_File (File) loop
+             Get_Line (File, Line, Last);
+ 
+             --  Ignore empty lines
+ 
+             if Last = 0 then
+                null;
+ 
+             --  Ignore lines starting with "case_sensitive="
+ 
+             elsif Last > Case_Sensitive'Length
+               and then Line (1 .. Case_Sensitive'Length) = Case_Sensitive
+             then
+                null;
+ 
+             --  Line starting with "SYMBOL_VECTOR=("
+ 
+             elsif Last > Symbol_Vector'Length
+               and then Line (1 .. Symbol_Vector'Length) = Symbol_Vector
+             then
+ 
+                --  SYMBOL_VECTOR=(<symbol>=DATA)
+ 
+                if Last > Symbol_Vector'Length + Equal_Data'Length and then
+                  Line (Last - Equal_Data'Length + 1 .. Last) = Equal_Data
+                then
+                   Symbol_Table.Increment_Last (Original_Symbols);
+                   Original_Symbols.Table
+                     (Symbol_Table.Last (Original_Symbols)) :=
+                       (Name =>
+                          new String'(Line (Symbol_Vector'Length + 1 ..
+                                            Last - Equal_Data'Length)),
+                        Kind => Data,
+                        Present => True);
+ 
+                --  SYMBOL_VECTOR=(<symbol>=PROCEDURE)
+ 
+                elsif Last > Symbol_Vector'Length + Equal_Procedure'Length
+                  and then
+                   Line (Last - Equal_Procedure'Length + 1 .. Last) =
+                                                               Equal_Procedure
+                then
+                   Symbol_Table.Increment_Last (Original_Symbols);
+                   Original_Symbols.Table
+                     (Symbol_Table.Last (Original_Symbols)) :=
+                     (Name =>
+                        new String'(Line (Symbol_Vector'Length + 1 ..
+                                          Last - Equal_Procedure'Length)),
+                      Kind => Proc,
+                      Present => True);
+ 
+                --  Anything else is incorrectly formatted
+ 
+                else
+                   if not Quiet then
+                      Put_Line ("symbol file """ & Reference &
+                                """ is incorrectly formatted:");
+                      Put_Line ("""" & Line (1 .. Last) & """");
+                   end if;
+ 
+                   Close (File);
+                   Success := False;
+                   return;
+                end if;
+ 
+             --  Lines with "gsmatch=equal,<Major_ID>,<Minor_Id>
+ 
+             elsif Last > Gsmatch'Length
+               and then Line (1 .. Gsmatch'Length) = Gsmatch
+             then
+                declare
+                   Start  : Positive := Gsmatch'Length + 1;
+                   Finish : Positive := Start;
+                   OK     : Boolean  := True;
+                   ID     : Integer;
+ 
+                begin
+                   loop
+                      if Line (Finish) not in '0' .. '9'
+                        or else Finish >= Last - 1
+                      then
+                         OK := False;
+                         exit;
+                      end if;
+ 
+                      exit when Line (Finish + 1) = ',';
+ 
+                      Finish := Finish + 1;
+                   end loop;
+ 
+                   if OK then
+                      ID := Integer'Value (Line (Start .. Finish));
+                      OK := ID /= 0;
+ 
+                      --  If Soft_Major_ID is True, it means that
+                      --  Library_Version was not specified.
+ 
+                      if Soft_Major_ID then
+                         Major_ID := ID;
+ 
+                      --  If the Major ID in the reference file is different
+                      --  from the Library_Version, then the Minor ID will be 0
+                      --  because there is no point in taking the Minor ID in
+                      --  the reference file, or incrementing it. So, we set
+                      --  Soft_Minor_ID to False, so that we don't modify
+                      --  the Minor_ID later.
+ 
+                      elsif Major_ID /= ID then
+                         Soft_Minor_ID := False;
+                      end if;
+ 
+                      Start := Finish + 2;
+                      Finish := Start;
+ 
+                      loop
+                         if Line (Finish) not in '0' .. '9' then
+                            OK := False;
+                            exit;
+                         end if;
+ 
+                         exit when Finish = Last;
+ 
+                         Finish := Finish + 1;
+                      end loop;
+ 
+                      --  Only set Minor_ID if Soft_Minor_ID is True (see above)
+ 
+                      if OK and then Soft_Minor_ID then
+                         Minor_ID := Integer'Value (Line (Start .. Finish));
+                      end if;
+                   end if;
+ 
+                   --  If OK is not True, that means the line is not correctly
+                   --  formatted.
+ 
+                   if not OK then
+                      if not Quiet then
+                         Put_Line ("symbol file """ & Reference &
+                                   """ is incorrectly formatted");
+                         Put_Line ("""" & Line (1 .. Last) & """");
+                      end if;
+ 
+                      Close (File);
+                      Success := False;
+                      return;
+                   end if;
+                end;
+ 
+             --  Anything else is incorrectly formatted
+ 
+             else
+                if not Quiet then
+                   Put_Line ("unexpected line in symbol file """ &
+                             Reference & """");
+                   Put_Line ("""" & Line (1 .. Last) & """");
+                end if;
+ 
+                Close (File);
+                Success := False;
+                return;
+             end if;
+          end loop;
+ 
+          Close (File);
+       end if;
+    end Initialize;
+ 
+    -------------
+    -- Process --
+    -------------
+ 
+    procedure Process
+      (Object_File : String;
+       Success     : out Boolean)
+    is
+    begin
+       --  Open the object file with Byte_IO. Return with Success = False if
+       --  this fails.
+ 
+       begin
+          Open (File, In_File, Object_File);
+       exception
+          when others =>
+             Put_Line
+               ("*** Unable to open object file """ & Object_File & """");
+             Success := False;
+             return;
+       end;
+ 
+       --  Assume that the object file has a correct format
+ 
+       Success := True;
+ 
+       --  Get the different sections one by one from the object file
+ 
+       while not End_Of_File (File) loop
+ 
+          Get (Code);
+          Get (Number_Of_Characters);
+          Number_Of_Characters := Number_Of_Characters - 4;
+ 
+          --  If this is not a Global Symbol Definition section, skip to the
+          --  next section.
+ 
+          if Code /= GSD then
+ 
+             for J in 1 .. Number_Of_Characters loop
+                Read (File, B);
+             end loop;
+ 
+          else
+ 
+             --  Skip over the next 4 bytes
+ 
+             Get (Dummy);
+             Get (Dummy);
+             Number_Of_Characters := Number_Of_Characters - 4;
+ 
+             --  Get each subsection in turn
+ 
+             loop
+                Get (Code);
+                Get (Nchars);
+                Get (Dummy);
+                Get (Flags);
+                Number_Of_Characters := Number_Of_Characters - 8;
+                Nchars := Nchars - 8;
+ 
+                --  If this is a symbol and the V_DEF flag is set, get the
+                --  symbol.
+ 
+                if Code = C_SYM and then ((Flags and V_DEF_Mask) /= 0) then
+                   --  First, reach the symbol length
+ 
+                   for J in 1 .. 25 loop
+                      Read (File, B);
+                      Nchars := Nchars - 1;
+                      Number_Of_Characters := Number_Of_Characters - 1;
+                   end loop;
+ 
+                   Length := Byte'Pos (B);
+                   LSymb := 0;
+ 
+                   --  Get the symbol characters
+ 
+                   for J in 1 .. Nchars loop
+                      Read (File, B);
+                      Number_Of_Characters := Number_Of_Characters - 1;
+                      if Length > 0 then
+                         LSymb := LSymb + 1;
+                         Symbol (LSymb) := B;
+                         Length := Length - 1;
+                      end if;
+                   end loop;
+ 
+                   --  Create the new Symbol
+ 
+                   declare
+                      S_Data : Symbol_Data;
+                   begin
+                      S_Data.Name := new String'(Symbol (1 .. LSymb));
+ 
+                      --  The symbol kind (Data or Procedure) depends on the
+                      --  V_NORM flag.
+ 
+                      if (Flags and V_NORM_Mask) = 0 then
+                         S_Data.Kind := Data;
+ 
+                      else
+                         S_Data.Kind := Proc;
+                      end if;
+ 
+                      --  Put the new symbol in the table
+ 
+                      Symbol_Table.Increment_Last (Complete_Symbols);
+                      Complete_Symbols.Table
+                        (Symbol_Table.Last (Complete_Symbols)) := S_Data;
+                   end;
+ 
+                else
+                   --  As it is not a symbol subsection, skip to the next
+                   --  subsection.
+ 
+                   for J in 1 .. Nchars loop
+                      Read (File, B);
+                      Number_Of_Characters := Number_Of_Characters - 1;
+                   end loop;
+                end if;
+ 
+                --  Exit the GSD section when number of characters reaches 0
+ 
+                exit when Number_Of_Characters = 0;
+             end loop;
+          end if;
+       end loop;
+ 
+       --  The object file has been processed, close it
+ 
+       Close (File);
+ 
+    exception
+       --  For any exception, output an error message, close the object file
+       --  and return with Success = False.
+ 
+       when X : others =>
+          Put_Line ("unexpected exception raised while processing """
+                    & Object_File & """");
+          Put_Line (Exception_Information (X));
+          Close (File);
+          Success := False;
+    end Process;
+ 
+    --------------
+    -- Finalize --
+    --------------
+ 
+    procedure Finalize
+      (Quiet   : Boolean;
+       Success : out Boolean)
+    is
+       File   : Ada.Text_IO.File_Type;
+       --  The symbol file
+ 
+       S_Data : Symbol_Data;
+       --  A symbol
+ 
+       Cur    : Positive := 1;
+       --  Most probable index in the Complete_Symbols of the current symbol
+       --  in Original_Symbol.
+ 
+       Found  : Boolean;
+ 
+    begin
+       --  Nothing to be done if Initialize has never been called
+ 
+       if Symbol_File_Name = null then
+          Success := False;
+ 
+       else
+ 
+          --  First find if the symbols in the reference symbol file are also
+          --  in the object files. Note that this is not done if the policy is
+          --  Autonomous, because no reference symbol file has been read.
+ 
+          --  Expect the first symbol in the symbol file to also be the first
+          --  in Complete_Symbols.
+ 
+          Cur := 1;
+ 
+          for Index_1 in 1 .. Symbol_Table.Last (Original_Symbols) loop
+             S_Data := Original_Symbols.Table (Index_1);
+             Found := False;
+ 
+             First_Object_Loop :
+             for Index_2 in Cur .. Symbol_Table.Last (Complete_Symbols) loop
+                if Equal (S_Data, Complete_Symbols.Table (Index_2)) then
+                   Cur := Index_2 + 1;
+                   Complete_Symbols.Table (Index_2).Present := False;
+                   Found := True;
+                   exit First_Object_Loop;
+                end if;
+             end loop First_Object_Loop;
+ 
+             --  If the symbol could not be found between Cur and Last, try
+             --  before Cur.
+ 
+             if not Found then
+                Second_Object_Loop :
+                for Index_2 in 1 .. Cur - 1 loop
+                   if Equal (S_Data, Complete_Symbols.Table (Index_2)) then
+                      Cur := Index_2 + 1;
+                      Complete_Symbols.Table (Index_2).Present := False;
+                      Found := True;
+                      exit Second_Object_Loop;
+                   end if;
+                end loop Second_Object_Loop;
+             end if;
+ 
+             --  If the symbol is not found, mark it as such in the table
+ 
+             if not Found then
+                if (not Quiet) or else Sym_Policy = Controlled then
+                   Put_Line ("symbol """ & S_Data.Name.all &
+                             """ is no longer present in the object files");
+                end if;
+ 
+                if Sym_Policy = Controlled or else Sym_Policy = Restricted then
+                   Success := False;
+                   return;
+ 
+                elsif Soft_Minor_ID then
+                   Minor_ID := Minor_ID + 1;
+                   Soft_Minor_ID := False;
+                end if;
+ 
+                Original_Symbols.Table (Index_1).Present := False;
+                Free (Original_Symbols.Table (Index_1).Name);
+ 
+                if Soft_Minor_ID then
+                   Minor_ID := Minor_ID + 1;
+                   Soft_Minor_ID := False;
+                end if;
+             end if;
+          end loop;
+ 
+          if Sym_Policy /= Restricted then
+ 
+             --  Append additional symbols, if any, to the Original_Symbols
+             --  table.
+ 
+             for Index in 1 .. Symbol_Table.Last (Complete_Symbols) loop
+                S_Data := Complete_Symbols.Table (Index);
+ 
+                if S_Data.Present then
+ 
+                   if Sym_Policy = Controlled then
+                      Put_Line ("symbol """ & S_Data.Name.all &
+                                """ is not in the reference symbol file");
+                      Success := False;
+                      return;
+ 
+                   elsif Soft_Minor_ID then
+                      Minor_ID := Minor_ID + 1;
+                      Soft_Minor_ID := False;
+                   end if;
+ 
+                   Symbol_Table.Increment_Last (Original_Symbols);
+                   Original_Symbols.Table
+                     (Symbol_Table.Last (Original_Symbols)) := S_Data;
+                   Complete_Symbols.Table (Index).Present := False;
+                end if;
+             end loop;
+ 
+             --  Create the symbol file
+ 
+             Create (File, Ada.Text_IO.Out_File, Symbol_File_Name.all);
+ 
+             Put (File, Case_Sensitive);
+             Put_Line (File, "yes");
+ 
+             --  Put a line in the symbol file for each symbol in symbol table
+ 
+             for Index in 1 .. Symbol_Table.Last (Original_Symbols) loop
+                if Original_Symbols.Table (Index).Present then
+                   Put (File, Symbol_Vector);
+                   Put (File, Original_Symbols.Table (Index).Name.all);
+ 
+                   if Original_Symbols.Table (Index).Kind = Data then
+                      Put_Line (File, Equal_Data);
+ 
+                   else
+                      Put_Line (File, Equal_Procedure);
+                   end if;
+ 
+                   Free (Original_Symbols.Table (Index).Name);
+                end if;
+             end loop;
+ 
+             Put (File, Case_Sensitive);
+             Put_Line (File, "NO");
+ 
+             --  Put the version IDs
+ 
+             Put (File, Gsmatch);
+             Put (File, Image (Major_ID));
+             Put (File, ',');
+             Put_Line  (File, Image (Minor_ID));
+ 
+             --  And we are done
+ 
+             Close (File);
+ 
+             --  Reset both tables
+ 
+             Symbol_Table.Set_Last (Original_Symbols, 0);
+             Symbol_Table.Set_Last (Complete_Symbols, 0);
+ 
+             --  Clear the symbol file name
+ 
+             Free (Symbol_File_Name);
+          end if;
+ 
+          Success := True;
+       end if;
+ 
+    exception
+       when X : others =>
+          Put_Line ("unexpected exception raised while finalizing """
+                    & Symbol_File_Name.all & """");
+          Put_Line (Exception_Information (X));
+          Success := False;
+    end Finalize;
+ 
+ end Symbols;
diff -Nrcpad gcc-3.4.3/gcc/ada/symbols.ads gcc-4.0.0/gcc/ada/symbols.ads
*** gcc-3.4.3/gcc/ada/symbols.ads	Thu Nov 20 09:54:03 2003
--- gcc-4.0.0/gcc/ada/symbols.ads	Fri Jun 11 10:47:39 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2003 Free Software Foundation, Inc.               --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2003-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Symbols is
*** 44,52 ****
        --  all symbols are already found in the reference file or with an
        --  incremented minor ID, if not.
  
!        Controlled);
        --  Fail if symbols are not the same as those in the reference file
  
     type Symbol_Kind is (Data, Proc);
     --  To distinguish between the different kinds of symbols
  
--- 44,56 ----
        --  all symbols are already found in the reference file or with an
        --  incremented minor ID, if not.
  
!        Controlled,
        --  Fail if symbols are not the same as those in the reference file
  
+       Restricted);
+       --  Restrict the symbols to those in the symbol file. Fail if some
+       --  symbols in the symbol file are not exported from the object files.
+ 
     type Symbol_Kind is (Data, Proc);
     --  To distinguish between the different kinds of symbols
  
diff -Nrcpad gcc-3.4.3/gcc/ada/sysdep.c gcc-4.0.0/gcc/ada/sysdep.c
*** gcc-3.4.3/gcc/ada/sysdep.c	Tue Nov 18 10:00:43 2003
--- gcc-4.0.0/gcc/ada/sysdep.c	Wed Oct 27 12:28:44 2004
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *          Copyright (C) 1992-2003 Free Software Foundation, Inc.          *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *          Copyright (C) 1992-2004 Free Software Foundation, Inc.          *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
*************** __gnat_ttyname (int filedes)
*** 289,295 ****
  
  #if defined (linux) || defined (sun) || defined (sgi) || defined (__EMX__) \
    || (defined (__osf__) && ! defined (__alpha_vxworks)) || defined (WINNT) \
!   || defined (__MACHTEN__) || defined (hpux) || defined (_AIX) \
    || (defined (__svr4__) && defined (i386)) || defined (__Lynx__) \
    || defined (__CYGWIN__) || defined (__FreeBSD__)
  
--- 289,295 ----
  
  #if defined (linux) || defined (sun) || defined (sgi) || defined (__EMX__) \
    || (defined (__osf__) && ! defined (__alpha_vxworks)) || defined (WINNT) \
!   || defined (__MACHTEN__) || defined (__hpux__) || defined (_AIX) \
    || (defined (__svr4__) && defined (i386)) || defined (__Lynx__) \
    || defined (__CYGWIN__) || defined (__FreeBSD__)
  
*************** getc_immediate_common (FILE *stream,
*** 346,352 ****
  {
  #if defined (linux) || defined (sun) || defined (sgi) || defined (__EMX__) \
      || (defined (__osf__) && ! defined (__alpha_vxworks)) \
!     || defined (__CYGWIN32__) || defined (__MACHTEN__) || defined (hpux) \
      || defined (_AIX) || (defined (__svr4__) && defined (i386)) \
      || defined (__Lynx__) || defined (__FreeBSD__)
    char c;
--- 346,352 ----
  {
  #if defined (linux) || defined (sun) || defined (sgi) || defined (__EMX__) \
      || (defined (__osf__) && ! defined (__alpha_vxworks)) \
!     || defined (__CYGWIN32__) || defined (__MACHTEN__) || defined (__hpux__) \
      || defined (_AIX) || (defined (__svr4__) && defined (i386)) \
      || defined (__Lynx__) || defined (__FreeBSD__)
    char c;
*************** getc_immediate_common (FILE *stream,
*** 365,371 ****
        termios_rec.c_lflag = termios_rec.c_lflag & ~ICANON & ~ECHO;
  
  #if defined(linux) || defined (sun) || defined (sgi) || defined (__EMX__) \
!     || defined (__osf__) || defined (__MACHTEN__) || defined (hpux) \
      || defined (_AIX) || (defined (__svr4__) && defined (i386)) \
      || defined (__Lynx__) || defined (__FreeBSD__)
        eof_ch = termios_rec.c_cc[VEOF];
--- 365,371 ----
        termios_rec.c_lflag = termios_rec.c_lflag & ~ICANON & ~ECHO;
  
  #if defined(linux) || defined (sun) || defined (sgi) || defined (__EMX__) \
!     || defined (__osf__) || defined (__MACHTEN__) || defined (__hpux__) \
      || defined (_AIX) || (defined (__svr4__) && defined (i386)) \
      || defined (__Lynx__) || defined (__FreeBSD__)
        eof_ch = termios_rec.c_cc[VEOF];
diff -Nrcpad gcc-3.4.3/gcc/ada/system-aix.ads gcc-4.0.0/gcc/ada/system-aix.ads
*** gcc-3.4.3/gcc/ada/system-aix.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/system-aix.ads	Mon Oct  4 14:51:16 2004
***************
*** 0 ****
--- 1,151 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --                               S Y S T E M                                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                            (AIX/PPC Version)                             --
+ --                                                                          --
+ --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package System is
+ pragma Pure (System);
+ --  Note that we take advantage of the implementation permission to
+ --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ 
+    type Name is (SYSTEM_NAME_GNAT);
+    System_Name : constant Name := SYSTEM_NAME_GNAT;
+ 
+    --  System-Dependent Named Numbers
+ 
+    Min_Int               : constant := Long_Long_Integer'First;
+    Max_Int               : constant := Long_Long_Integer'Last;
+ 
+    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
+    Max_Nonbinary_Modulus : constant := Integer'Last;
+ 
+    Max_Base_Digits       : constant := Long_Long_Float'Digits;
+    Max_Digits            : constant := Long_Long_Float'Digits;
+ 
+    Max_Mantissa          : constant := 63;
+    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
+ 
+    Tick                  : constant := 0.01;
+ 
+    --  Storage-related Declarations
+ 
+    type Address is private;
+    Null_Address : constant Address;
+ 
+    Storage_Unit : constant := 8;
+    Word_Size    : constant := 32;
+    Memory_Size  : constant := 2 ** 32;
+ 
+    --  Address comparison
+ 
+    function "<"  (Left, Right : Address) return Boolean;
+    function "<=" (Left, Right : Address) return Boolean;
+    function ">"  (Left, Right : Address) return Boolean;
+    function ">=" (Left, Right : Address) return Boolean;
+    function "="  (Left, Right : Address) return Boolean;
+ 
+    pragma Import (Intrinsic, "<");
+    pragma Import (Intrinsic, "<=");
+    pragma Import (Intrinsic, ">");
+    pragma Import (Intrinsic, ">=");
+    pragma Import (Intrinsic, "=");
+ 
+    --  Other System-Dependent Declarations
+ 
+    type Bit_Order is (High_Order_First, Low_Order_First);
+    Default_Bit_Order : constant Bit_Order := High_Order_First;
+ 
+    --  Priority-related Declarations (RM D.1)
+ 
+    Max_Priority           : constant Positive := 30;
+    Max_Interrupt_Priority : constant Positive := 31;
+ 
+    subtype Any_Priority       is Integer      range  0 .. 31;
+    subtype Priority           is Any_Priority range  0 .. 30;
+    subtype Interrupt_Priority is Any_Priority range 31 .. 31;
+ 
+    Default_Priority : constant Priority := 15;
+ 
+ private
+ 
+    type Address is mod Memory_Size;
+    Null_Address : constant Address := 0;
+ 
+    --------------------------------------
+    -- System Implementation Parameters --
+    --------------------------------------
+ 
+    --  These parameters provide information about the target that is used
+    --  by the compiler. They are in the private part of System, where they
+    --  can be accessed using the special circuitry in the Targparm unit
+    --  whose source should be consulted for more detailed descriptions
+    --  of the individual switch values.
+ 
+    AAMP                      : constant Boolean := False;
+    Backend_Divide_Checks     : constant Boolean := False;
+    Backend_Overflow_Checks   : constant Boolean := False;
+    Command_Line_Args         : constant Boolean := True;
+    Configurable_Run_Time     : constant Boolean := False;
+    Denorm                    : constant Boolean := True;
+    Duration_32_Bits          : constant Boolean := False;
+    Exit_Status_Supported     : constant Boolean := True;
+    Fractional_Fixed_Ops      : constant Boolean := False;
+    Frontend_Layout           : constant Boolean := False;
+    Functions_Return_By_DSP   : constant Boolean := False;
+    Machine_Overflows         : constant Boolean := False;
+    Machine_Rounds            : constant Boolean := True;
+    OpenVMS                   : constant Boolean := False;
+    Preallocated_Stacks       : constant Boolean := False;
+    Signed_Zeros              : constant Boolean := True;
+    Stack_Check_Default       : constant Boolean := False;
+    Stack_Check_Probes        : constant Boolean := False;
+    Support_64_Bit_Divides    : constant Boolean := True;
+    Support_Aggregates        : constant Boolean := True;
+    Support_Composite_Assign  : constant Boolean := True;
+    Support_Composite_Compare : constant Boolean := True;
+    Support_Long_Shifts       : constant Boolean := True;
+    Suppress_Standard_Library : constant Boolean := False;
+    Use_Ada_Main_Program_Name : constant Boolean := False;
+    ZCX_By_Default            : constant Boolean := False;
+    GCC_ZCX_Support           : constant Boolean := False;
+    Front_End_ZCX_Support     : constant Boolean := False;
+ 
+    --  Obsolete entries, to be removed eventually (bootstrap issues!)
+ 
+    High_Integrity_Mode       : constant Boolean := False;
+    Long_Shifts_Inlined       : constant Boolean := True;
+ 
+ end System;
diff -Nrcpad gcc-3.4.3/gcc/ada/system-darwin-ppc.ads gcc-4.0.0/gcc/ada/system-darwin-ppc.ads
*** gcc-3.4.3/gcc/ada/system-darwin-ppc.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/system-darwin-ppc.ads	Fri Jan 14 15:12:29 2005
***************
*** 0 ****
--- 1,177 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --                               S Y S T E M                                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                          (Darwin/PPC Version)                            --
+ --                                                                          --
+ --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package System is
+ pragma Pure (System);
+ --  Note that we take advantage of the implementation permission to
+ --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ 
+    type Name is (SYSTEM_NAME_GNAT);
+    System_Name : constant Name := SYSTEM_NAME_GNAT;
+ 
+    --  System-Dependent Named Numbers
+ 
+    Min_Int               : constant := Long_Long_Integer'First;
+    Max_Int               : constant := Long_Long_Integer'Last;
+ 
+    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
+    Max_Nonbinary_Modulus : constant := Integer'Last;
+ 
+    Max_Base_Digits       : constant := Long_Long_Float'Digits;
+    Max_Digits            : constant := Long_Long_Float'Digits;
+ 
+    Max_Mantissa          : constant := 63;
+    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
+ 
+    Tick                  : constant := 0.01;
+ 
+    --  Storage-related Declarations
+ 
+    type Address is private;
+    Null_Address : constant Address;
+ 
+    Storage_Unit : constant := 8;
+    Word_Size    : constant := 32;
+    Memory_Size  : constant := 2 ** 32;
+ 
+    --  Address comparison
+ 
+    function "<"  (Left, Right : Address) return Boolean;
+    function "<=" (Left, Right : Address) return Boolean;
+    function ">"  (Left, Right : Address) return Boolean;
+    function ">=" (Left, Right : Address) return Boolean;
+    function "="  (Left, Right : Address) return Boolean;
+ 
+    pragma Import (Intrinsic, "<");
+    pragma Import (Intrinsic, "<=");
+    pragma Import (Intrinsic, ">");
+    pragma Import (Intrinsic, ">=");
+    pragma Import (Intrinsic, "=");
+ 
+    --  Other System-Dependent Declarations
+ 
+    type Bit_Order is (High_Order_First, Low_Order_First);
+    Default_Bit_Order : constant Bit_Order := High_Order_First;
+ 
+    --  Priority-related Declarations (RM D.1)
+ 
+    --  The values defined here are derived from the following Darwin
+    --  sources:
+    --
+    --  Libc/pthreads/pthread.c
+    --    pthread_init calls host_info to retrieve the HOST_PRIORITY_INFO.
+    --    This file includes "pthread_internals".
+    --  Libc/pthreads/pthread_internals.h
+    --    This file includes <mach/mach.h>.
+    --  xnu/osfmk/mach/mach.h
+    --    This file includes <mach/mach_types.h>.
+    --  xnu/osfmk/mach/mach_types.h
+    --    This file includes <mach/host_info.h>.
+    --  xnu/osfmk/mach/host_info.h
+    --    This file contains the definition of the host_info_t data structure
+    --    and the function prototype for host_info.
+    --  xnu/osfmk/kern/host.c
+    --    This file defines the function host_info which sets the
+    --    priority_info field of struct host_info_t. This file includes
+    --    <kern/processor.h>.
+    --  xnu/osfmk/kern/processor.h
+    --    This file includes <kern/sched.h>.
+    --  xnu/osfmk/kern/sched.h
+    --    This file defines the values for each level of priority.
+ 
+    Max_Interrupt_Priority : constant Positive := 63;
+    Max_Priority           : constant Positive := Max_Interrupt_Priority - 1;
+ 
+    subtype Any_Priority is Integer range 0 .. Max_Interrupt_Priority;
+    subtype Priority is Any_Priority range 0 .. Max_Priority;
+    subtype Interrupt_Priority is Any_Priority
+      range Priority'Last + 1 .. Max_Interrupt_Priority;
+ 
+    Default_Priority : constant Priority :=
+      (Priority'Last - Priority'First) / 2;
+ 
+ private
+ 
+    type Address is mod Memory_Size;
+    Null_Address : constant Address := 0;
+ 
+    --------------------------------------
+    -- System Implementation Parameters --
+    --------------------------------------
+ 
+    --  These parameters provide information about the target that is used
+    --  by the compiler. They are in the private part of System, where they
+    --  can be accessed using the special circuitry in the Targparm unit
+    --  whose source should be consulted for more detailed descriptions
+    --  of the individual switch values.
+ 
+    AAMP                      : constant Boolean := False;
+    Backend_Divide_Checks     : constant Boolean := False;
+    Backend_Overflow_Checks   : constant Boolean := False;
+    Command_Line_Args         : constant Boolean := True;
+    Configurable_Run_Time     : constant Boolean := False;
+    Denorm                    : constant Boolean := True;
+    Duration_32_Bits          : constant Boolean := False;
+    Exit_Status_Supported     : constant Boolean := True;
+    Fractional_Fixed_Ops      : constant Boolean := False;
+    Frontend_Layout           : constant Boolean := False;
+    Functions_Return_By_DSP   : constant Boolean := False;
+    Machine_Overflows         : constant Boolean := False;
+    Machine_Rounds            : constant Boolean := True;
+    OpenVMS                   : constant Boolean := False;
+    Preallocated_Stacks       : constant Boolean := False;
+    Signed_Zeros              : constant Boolean := True;
+    Stack_Check_Default       : constant Boolean := False;
+    Stack_Check_Probes        : constant Boolean := False;
+    Support_64_Bit_Divides    : constant Boolean := True;
+    Support_Aggregates        : constant Boolean := True;
+    Support_Composite_Assign  : constant Boolean := True;
+    Support_Composite_Compare : constant Boolean := True;
+    Support_Long_Shifts       : constant Boolean := True;
+    Suppress_Standard_Library : constant Boolean := False;
+    Use_Ada_Main_Program_Name : constant Boolean := False;
+    ZCX_By_Default            : constant Boolean := True;
+    GCC_ZCX_Support           : constant Boolean := True;
+    Front_End_ZCX_Support     : constant Boolean := False;
+ 
+    --  Obsolete entries, to be removed eventually (bootstrap issues!)
+ 
+    --  High_Integrity_Mode       : constant Boolean := False;
+    --  Long_Shifts_Inlined       : constant Boolean := True;
+ 
+ end System;
diff -Nrcpad gcc-3.4.3/gcc/ada/system-freebsd-x86.ads gcc-4.0.0/gcc/ada/system-freebsd-x86.ads
*** gcc-3.4.3/gcc/ada/system-freebsd-x86.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/system-freebsd-x86.ads	Mon Oct  4 14:51:16 2004
***************
*** 0 ****
--- 1,151 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --                               S Y S T E M                                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                           (FreeBSD/x86 Version)                          --
+ --                                                                          --
+ --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package System is
+ pragma Pure (System);
+ --  Note that we take advantage of the implementation permission to
+ --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ 
+    type Name is (SYSTEM_NAME_GNAT);
+    System_Name : constant Name := SYSTEM_NAME_GNAT;
+ 
+    --  System-Dependent Named Numbers
+ 
+    Min_Int               : constant := Long_Long_Integer'First;
+    Max_Int               : constant := Long_Long_Integer'Last;
+ 
+    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
+    Max_Nonbinary_Modulus : constant := Integer'Last;
+ 
+    Max_Base_Digits       : constant := Long_Long_Float'Digits;
+    Max_Digits            : constant := Long_Long_Float'Digits;
+ 
+    Max_Mantissa          : constant := 63;
+    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
+ 
+    Tick                  : constant := 0.000_001;
+ 
+    --  Storage-related Declarations
+ 
+    type Address is private;
+    Null_Address : constant Address;
+ 
+    Storage_Unit : constant := 8;
+    Word_Size    : constant := 32;
+    Memory_Size  : constant := 2 ** 32;
+ 
+    --  Address comparison
+ 
+    function "<"  (Left, Right : Address) return Boolean;
+    function "<=" (Left, Right : Address) return Boolean;
+    function ">"  (Left, Right : Address) return Boolean;
+    function ">=" (Left, Right : Address) return Boolean;
+    function "="  (Left, Right : Address) return Boolean;
+ 
+    pragma Import (Intrinsic, "<");
+    pragma Import (Intrinsic, "<=");
+    pragma Import (Intrinsic, ">");
+    pragma Import (Intrinsic, ">=");
+    pragma Import (Intrinsic, "=");
+ 
+    --  Other System-Dependent Declarations
+ 
+    type Bit_Order is (High_Order_First, Low_Order_First);
+    Default_Bit_Order : constant Bit_Order := Low_Order_First;
+ 
+    --  Priority-related Declarations (RM D.1)
+ 
+    Max_Priority           : constant Positive := 30;
+    Max_Interrupt_Priority : constant Positive := 31;
+ 
+    subtype Any_Priority       is Integer      range  0 .. 31;
+    subtype Priority           is Any_Priority range  0 .. 30;
+    subtype Interrupt_Priority is Any_Priority range 31 .. 31;
+ 
+    Default_Priority : constant Priority := 15;
+ 
+ private
+ 
+    type Address is mod Memory_Size;
+    Null_Address : constant Address := 0;
+ 
+    --------------------------------------
+    -- System Implementation Parameters --
+    --------------------------------------
+ 
+    --  These parameters provide information about the target that is used
+    --  by the compiler. They are in the private part of System, where they
+    --  can be accessed using the special circuitry in the Targparm unit
+    --  whose source should be consulted for more detailed descriptions
+    --  of the individual switch values.
+ 
+    AAMP                      : constant Boolean := False;
+    Backend_Divide_Checks     : constant Boolean := False;
+    Backend_Overflow_Checks   : constant Boolean := False;
+    Command_Line_Args         : constant Boolean := True;
+    Configurable_Run_Time     : constant Boolean := False;
+    Denorm                    : constant Boolean := True;
+    Duration_32_Bits          : constant Boolean := False;
+    Exit_Status_Supported     : constant Boolean := True;
+    Fractional_Fixed_Ops      : constant Boolean := False;
+    Frontend_Layout           : constant Boolean := False;
+    Functions_Return_By_DSP   : constant Boolean := False;
+    Machine_Overflows         : constant Boolean := False;
+    Machine_Rounds            : constant Boolean := True;
+    OpenVMS                   : constant Boolean := False;
+    Preallocated_Stacks       : constant Boolean := False;
+    Signed_Zeros              : constant Boolean := True;
+    Stack_Check_Default       : constant Boolean := False;
+    Stack_Check_Probes        : constant Boolean := False;
+    Support_64_Bit_Divides    : constant Boolean := True;
+    Support_Aggregates        : constant Boolean := True;
+    Support_Composite_Assign  : constant Boolean := True;
+    Support_Composite_Compare : constant Boolean := True;
+    Support_Long_Shifts       : constant Boolean := True;
+    Suppress_Standard_Library : constant Boolean := False;
+    Use_Ada_Main_Program_Name : constant Boolean := False;
+    ZCX_By_Default            : constant Boolean := False;
+    GCC_ZCX_Support           : constant Boolean := False;
+    Front_End_ZCX_Support     : constant Boolean := False;
+ 
+    --  Obsolete entries, to be removed eventually (bootstrap issues!)
+ 
+    High_Integrity_Mode       : constant Boolean := False;
+    Long_Shifts_Inlined       : constant Boolean := True;
+ 
+ end System;
diff -Nrcpad gcc-3.4.3/gcc/ada/system-hpux.ads gcc-4.0.0/gcc/ada/system-hpux.ads
*** gcc-3.4.3/gcc/ada/system-hpux.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/system-hpux.ads	Thu Apr  7 20:03:51 2005
***************
*** 0 ****
--- 1,227 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --                               S Y S T E M                                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                             (HP-UX Version)                              --
+ --                                                                          --
+ --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package System is
+ pragma Pure (System);
+ --  Note that we take advantage of the implementation permission to
+ --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ 
+    type Name is (SYSTEM_NAME_GNAT);
+    System_Name : constant Name := SYSTEM_NAME_GNAT;
+ 
+    --  System-Dependent Named Numbers
+ 
+    Min_Int               : constant := Long_Long_Integer'First;
+    Max_Int               : constant := Long_Long_Integer'Last;
+ 
+    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
+    Max_Nonbinary_Modulus : constant := Integer'Last;
+ 
+    Max_Base_Digits       : constant := Long_Long_Float'Digits;
+    Max_Digits            : constant := Long_Long_Float'Digits;
+ 
+    Max_Mantissa          : constant := 63;
+    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
+ 
+    Tick                  : constant := 0.01;
+ 
+    --  Storage-related Declarations
+ 
+    type Address is private;
+    Null_Address : constant Address;
+ 
+    Storage_Unit : constant := 8;
+    Word_Size    : constant := 32;
+    Memory_Size  : constant := 2 ** 32;
+ 
+    --  Address comparison
+ 
+    function "<"  (Left, Right : Address) return Boolean;
+    function "<=" (Left, Right : Address) return Boolean;
+    function ">"  (Left, Right : Address) return Boolean;
+    function ">=" (Left, Right : Address) return Boolean;
+    function "="  (Left, Right : Address) return Boolean;
+ 
+    pragma Import (Intrinsic, "<");
+    pragma Import (Intrinsic, "<=");
+    pragma Import (Intrinsic, ">");
+    pragma Import (Intrinsic, ">=");
+    pragma Import (Intrinsic, "=");
+ 
+    --  Other System-Dependent Declarations
+ 
+    type Bit_Order is (High_Order_First, Low_Order_First);
+    Default_Bit_Order : constant Bit_Order := High_Order_First;
+ 
+    --  Priority-related Declarations (RM D.1)
+ 
+    Max_Priority           : constant Positive := 30;
+    Max_Interrupt_Priority : constant Positive := 31;
+ 
+    subtype Any_Priority       is Integer      range  0 .. 31;
+    subtype Priority           is Any_Priority range  0 .. 30;
+    subtype Interrupt_Priority is Any_Priority range 31 .. 31;
+ 
+    Default_Priority : constant Priority := 15;
+ 
+ private
+ 
+    type Address is mod Memory_Size;
+    Null_Address : constant Address := 0;
+ 
+    --------------------------------------
+    -- System Implementation Parameters --
+    --------------------------------------
+ 
+    --  These parameters provide information about the target that is used
+    --  by the compiler. They are in the private part of System, where they
+    --  can be accessed using the special circuitry in the Targparm unit
+    --  whose source should be consulted for more detailed descriptions
+    --  of the individual switch values.
+ 
+    AAMP                      : constant Boolean := False;
+    Backend_Divide_Checks     : constant Boolean := False;
+    Backend_Overflow_Checks   : constant Boolean := False;
+    Command_Line_Args         : constant Boolean := True;
+    Configurable_Run_Time     : constant Boolean := False;
+    Denorm                    : constant Boolean := True;
+    Duration_32_Bits          : constant Boolean := False;
+    Exit_Status_Supported     : constant Boolean := True;
+    Fractional_Fixed_Ops      : constant Boolean := False;
+    Frontend_Layout           : constant Boolean := False;
+    Functions_Return_By_DSP   : constant Boolean := False;
+    Machine_Overflows         : constant Boolean := False;
+    Machine_Rounds            : constant Boolean := True;
+    OpenVMS                   : constant Boolean := False;
+    Preallocated_Stacks       : constant Boolean := False;
+    Signed_Zeros              : constant Boolean := True;
+    Stack_Check_Default       : constant Boolean := False;
+    Stack_Check_Probes        : constant Boolean := False;
+    Support_64_Bit_Divides    : constant Boolean := True;
+    Support_Aggregates        : constant Boolean := True;
+    Support_Composite_Assign  : constant Boolean := True;
+    Support_Composite_Compare : constant Boolean := True;
+    Support_Long_Shifts       : constant Boolean := True;
+    Suppress_Standard_Library : constant Boolean := False;
+    Use_Ada_Main_Program_Name : constant Boolean := False;
+    ZCX_By_Default            : constant Boolean := True;
+    GCC_ZCX_Support           : constant Boolean := True;
+    Front_End_ZCX_Support     : constant Boolean := False;
+ 
+    --  Obsolete entries, to be removed eventually (bootstrap issues!)
+ 
+    High_Integrity_Mode       : constant Boolean := False;
+    Long_Shifts_Inlined       : constant Boolean := False;
+ 
+    --------------------------
+    -- Underlying Priorities --
+    ---------------------------
+ 
+    --  Important note: this section of the file must come AFTER the
+    --  definition of the system implementation parameters to ensure
+    --  that the value of these parameters is available for analysis
+    --  of the declarations here (using Rtsfind at compile time).
+ 
+    --  The underlying priorities table provides a generalized mechanism
+    --  for mapping from Ada priorities to system priorities. In some
+    --  cases a 1-1 mapping is not the convenient or optimal choice.
+ 
+    --  For HP/UX DCE Threads, we use the full range of 31 priorities
+    --  in the Ada model, but map them by compression onto the more limited
+    --  range of priorities available in HP/UX.
+    --  For POSIX Threads, this table is ignored.
+ 
+    --  To replace the default values of the Underlying_Priorities mapping,
+    --  copy this source file into your build directory, edit the file to
+    --  reflect your desired behavior, and recompile with the command:
+ 
+    --     $ gcc -c -O2 -gnatpgn system.ads
+ 
+    --  then recompile the run-time parts that depend on this package:
+ 
+    --     $ gnatmake -a -gnatn -O2 <your application>
+ 
+    --  then force rebuilding your application if you need different options:
+ 
+    --     $ gnatmake -f <your options> <your application>
+ 
+    type Priorities_Mapping is array (Any_Priority) of Integer;
+    pragma Suppress_Initialization (Priorities_Mapping);
+    --  Suppress initialization in case gnat.adc specifies Normalize_Scalars
+ 
+    Underlying_Priorities : constant Priorities_Mapping :=
+ 
+      (Priority'First => 16,
+ 
+       1  => 17,
+       2  => 18,
+       3  => 18,
+       4  => 18,
+       5  => 18,
+       6  => 19,
+       7  => 19,
+       8  => 19,
+       9  => 20,
+       10 => 20,
+       11 => 21,
+       12 => 21,
+       13 => 22,
+       14 => 23,
+ 
+       Default_Priority   => 24,
+ 
+       16 => 25,
+       17 => 25,
+       18 => 25,
+       19 => 26,
+       20 => 26,
+       21 => 26,
+       22 => 27,
+       23 => 27,
+       24 => 27,
+       25 => 28,
+       26 => 28,
+       27 => 29,
+       28 => 29,
+       29 => 30,
+ 
+       Priority'Last      => 30,
+ 
+       Interrupt_Priority => 31);
+ 
+ end System;
diff -Nrcpad gcc-3.4.3/gcc/ada/system-interix.ads gcc-4.0.0/gcc/ada/system-interix.ads
*** gcc-3.4.3/gcc/ada/system-interix.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/system-interix.ads	Mon Oct  4 14:51:16 2004
***************
*** 0 ****
--- 1,151 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --                               S Y S T E M                                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                        (OpenNT/Interix Version)                          --
+ --                                                                          --
+ --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package System is
+ pragma Pure (System);
+ --  Note that we take advantage of the implementation permission to
+ --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ 
+    type Name is (SYSTEM_NAME_GNAT);
+    System_Name : constant Name := SYSTEM_NAME_GNAT;
+ 
+    --  System-Dependent Named Numbers
+ 
+    Min_Int               : constant := Long_Long_Integer'First;
+    Max_Int               : constant := Long_Long_Integer'Last;
+ 
+    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
+    Max_Nonbinary_Modulus : constant := Integer'Last;
+ 
+    Max_Base_Digits       : constant := Long_Long_Float'Digits;
+    Max_Digits            : constant := Long_Long_Float'Digits;
+ 
+    Max_Mantissa          : constant := 63;
+    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
+ 
+    Tick                  : constant := 0.01;
+ 
+    --  Storage-related Declarations
+ 
+    type Address is private;
+    Null_Address : constant Address;
+ 
+    Storage_Unit : constant := 8;
+    Word_Size    : constant := 32;
+    Memory_Size  : constant := 2 ** 32;
+ 
+    --  Address comparison
+ 
+    function "<"  (Left, Right : Address) return Boolean;
+    function "<=" (Left, Right : Address) return Boolean;
+    function ">"  (Left, Right : Address) return Boolean;
+    function ">=" (Left, Right : Address) return Boolean;
+    function "="  (Left, Right : Address) return Boolean;
+ 
+    pragma Import (Intrinsic, "<");
+    pragma Import (Intrinsic, "<=");
+    pragma Import (Intrinsic, ">");
+    pragma Import (Intrinsic, ">=");
+    pragma Import (Intrinsic, "=");
+ 
+    --  Other System-Dependent Declarations
+ 
+    type Bit_Order is (High_Order_First, Low_Order_First);
+    Default_Bit_Order : constant Bit_Order := Low_Order_First;
+ 
+    --  Priority-related Declarations (RM D.1)
+ 
+    Max_Priority           : constant Positive := 30;
+    Max_Interrupt_Priority : constant Positive := 31;
+ 
+    subtype Any_Priority       is Integer      range  0 .. 31;
+    subtype Priority           is Any_Priority range  0 .. 30;
+    subtype Interrupt_Priority is Any_Priority range 31 .. 31;
+ 
+    Default_Priority : constant Priority := 15;
+ 
+ private
+ 
+    type Address is mod Memory_Size;
+    Null_Address : constant Address := 0;
+ 
+    --------------------------------------
+    -- System Implementation Parameters --
+    --------------------------------------
+ 
+    --  These parameters provide information about the target that is used
+    --  by the compiler. They are in the private part of System, where they
+    --  can be accessed using the special circuitry in the Targparm unit
+    --  whose source should be consulted for more detailed descriptions
+    --  of the individual switch values.
+ 
+    AAMP                      : constant Boolean := False;
+    Backend_Divide_Checks     : constant Boolean := False;
+    Backend_Overflow_Checks   : constant Boolean := False;
+    Command_Line_Args         : constant Boolean := True;
+    Configurable_Run_Time     : constant Boolean := False;
+    Denorm                    : constant Boolean := True;
+    Duration_32_Bits          : constant Boolean := False;
+    Exit_Status_Supported     : constant Boolean := True;
+    Fractional_Fixed_Ops      : constant Boolean := False;
+    Frontend_Layout           : constant Boolean := False;
+    Functions_Return_By_DSP   : constant Boolean := False;
+    Machine_Overflows         : constant Boolean := False;
+    Machine_Rounds            : constant Boolean := True;
+    OpenVMS                   : constant Boolean := False;
+    Preallocated_Stacks       : constant Boolean := False;
+    Signed_Zeros              : constant Boolean := True;
+    Stack_Check_Default       : constant Boolean := False;
+    Stack_Check_Probes        : constant Boolean := False;
+    Support_64_Bit_Divides    : constant Boolean := True;
+    Support_Aggregates        : constant Boolean := True;
+    Support_Composite_Assign  : constant Boolean := True;
+    Support_Composite_Compare : constant Boolean := True;
+    Support_Long_Shifts       : constant Boolean := True;
+    Suppress_Standard_Library : constant Boolean := False;
+    Use_Ada_Main_Program_Name : constant Boolean := False;
+    ZCX_By_Default            : constant Boolean := False;
+    GCC_ZCX_Support           : constant Boolean := False;
+    Front_End_ZCX_Support     : constant Boolean := False;
+ 
+    --  Obsolete entries, to be removed eventually (bootstrap issues!)
+ 
+    High_Integrity_Mode       : constant Boolean := False;
+    Long_Shifts_Inlined       : constant Boolean := True;
+ 
+ end System;
diff -Nrcpad gcc-3.4.3/gcc/ada/system-irix-n32.ads gcc-4.0.0/gcc/ada/system-irix-n32.ads
*** gcc-3.4.3/gcc/ada/system-irix-n32.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/system-irix-n32.ads	Mon Oct  4 14:51:16 2004
***************
*** 0 ****
--- 1,166 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --                               S Y S T E M                                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                           (SGI Irix, n32 ABI)                            --
+ --                                                                          --
+ --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package System is
+ pragma Pure (System);
+ --  Note that we take advantage of the implementation permission to
+ --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ 
+    type Name is (SYSTEM_NAME_GNAT);
+    System_Name : constant Name := SYSTEM_NAME_GNAT;
+ 
+    --  System-Dependent Named Numbers
+ 
+    Min_Int               : constant := Long_Long_Integer'First;
+    Max_Int               : constant := Long_Long_Integer'Last;
+ 
+    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
+    Max_Nonbinary_Modulus : constant := Integer'Last;
+ 
+    Max_Base_Digits       : constant := Long_Long_Float'Digits;
+    Max_Digits            : constant := Long_Long_Float'Digits;
+ 
+    Max_Mantissa          : constant := 63;
+    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
+ 
+    Tick                  : constant := 0.01;
+ 
+    --  Storage-related Declarations
+ 
+    type Address is private;
+    Null_Address : constant Address;
+ 
+    Storage_Unit : constant := 8;
+    Word_Size    : constant := 64;
+    Memory_Size  : constant := 2 ** 32;
+ 
+    --  Address comparison
+ 
+    function "<"  (Left, Right : Address) return Boolean;
+    function "<=" (Left, Right : Address) return Boolean;
+    function ">"  (Left, Right : Address) return Boolean;
+    function ">=" (Left, Right : Address) return Boolean;
+    function "="  (Left, Right : Address) return Boolean;
+ 
+    pragma Import (Intrinsic, "<");
+    pragma Import (Intrinsic, "<=");
+    pragma Import (Intrinsic, ">");
+    pragma Import (Intrinsic, ">=");
+    pragma Import (Intrinsic, "=");
+ 
+    --  Other System-Dependent Declarations
+ 
+    type Bit_Order is (High_Order_First, Low_Order_First);
+    Default_Bit_Order : constant Bit_Order := High_Order_First;
+ 
+    --  Priority-related Declarations (RM D.1)
+ 
+    --  IRIX priorities as defined by realtime(5):
+    --
+    --  255        is for system-level interrupts
+    --  240 - 254  are suggested for hard real-time threads
+    --  200 - 239  are used by system device driver interrupt threads
+    --  110 - 199  are suggested for interactive real-time applications
+    --   90 - 109  are used by system daemon threads
+    --    0 -  89  are suggested for soft real-time applications
+    --
+    --  We don't express the full range of IRIX priorities.  For now, we
+    --  handle only the subset for soft real-time applications.
+ 
+    Max_Priority           : constant Positive := 88;
+    Max_Interrupt_Priority : constant Positive := 89;
+ 
+    subtype Any_Priority       is Integer      range  0 .. 89;
+    subtype Priority           is Any_Priority range  0 .. 88;
+    subtype Interrupt_Priority is Any_Priority range 89 .. 89;
+ 
+    Default_Priority : constant Priority := 44;
+ 
+ private
+ 
+    type Address is mod Memory_Size;
+    Null_Address : constant Address := 0;
+ 
+    --------------------------------------
+    -- System Implementation Parameters --
+    --------------------------------------
+ 
+    --  These parameters provide information about the target that is used
+    --  by the compiler. They are in the private part of System, where they
+    --  can be accessed using the special circuitry in the Targparm unit
+    --  whose source should be consulted for more detailed descriptions
+    --  of the individual switch values.
+ 
+    AAMP                      : constant Boolean := False;
+    Backend_Divide_Checks     : constant Boolean := False;
+    Backend_Overflow_Checks   : constant Boolean := False;
+    Command_Line_Args         : constant Boolean := True;
+    Configurable_Run_Time     : constant Boolean := False;
+    Denorm                    : constant Boolean := False;
+    Duration_32_Bits          : constant Boolean := False;
+    Exit_Status_Supported     : constant Boolean := True;
+    Fractional_Fixed_Ops      : constant Boolean := False;
+    Frontend_Layout           : constant Boolean := False;
+    Functions_Return_By_DSP   : constant Boolean := False;
+    Machine_Overflows         : constant Boolean := False;
+    Machine_Rounds            : constant Boolean := True;
+    OpenVMS                   : constant Boolean := False;
+    Preallocated_Stacks       : constant Boolean := False;
+    Signed_Zeros              : constant Boolean := True;
+    Stack_Check_Default       : constant Boolean := False;
+    Stack_Check_Probes        : constant Boolean := True;
+    Support_64_Bit_Divides    : constant Boolean := True;
+    Support_Aggregates        : constant Boolean := True;
+    Support_Composite_Assign  : constant Boolean := True;
+    Support_Composite_Compare : constant Boolean := True;
+    Support_Long_Shifts       : constant Boolean := True;
+    Suppress_Standard_Library : constant Boolean := False;
+    Use_Ada_Main_Program_Name : constant Boolean := False;
+    ZCX_By_Default            : constant Boolean := True;
+    GCC_ZCX_Support           : constant Boolean := True;
+    Front_End_ZCX_Support     : constant Boolean := False;
+ 
+    --  Obsolete entries, to be removed eventually (bootstrap issues!)
+ 
+    High_Integrity_Mode       : constant Boolean := False;
+    Long_Shifts_Inlined       : constant Boolean := True;
+ 
+    --  Note: Denorm is False because denormals are not supported on the
+    --  R10000, and we want the code to be valid for this processor.
+ 
+ end System;
diff -Nrcpad gcc-3.4.3/gcc/ada/system-irix-o32.ads gcc-4.0.0/gcc/ada/system-irix-o32.ads
*** gcc-3.4.3/gcc/ada/system-irix-o32.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/system-irix-o32.ads	Mon Oct  4 14:51:16 2004
***************
*** 0 ****
--- 1,154 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --                               S Y S T E M                                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                           (SGI Irix, o32 ABI)                            --
+ --                                                                          --
+ --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package System is
+ pragma Pure (System);
+ --  Note that we take advantage of the implementation permission to
+ --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ 
+    type Name is (SYSTEM_NAME_GNAT);
+    System_Name : constant Name := SYSTEM_NAME_GNAT;
+ 
+    --  System-Dependent Named Numbers
+ 
+    Min_Int               : constant := Long_Long_Integer'First;
+    Max_Int               : constant := Long_Long_Integer'Last;
+ 
+    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
+    Max_Nonbinary_Modulus : constant := Integer'Last;
+ 
+    Max_Base_Digits       : constant := Long_Long_Float'Digits;
+    Max_Digits            : constant := Long_Long_Float'Digits;
+ 
+    Max_Mantissa          : constant := 63;
+    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
+ 
+    Tick                  : constant := 0.01;
+ 
+    --  Storage-related Declarations
+ 
+    type Address is private;
+    Null_Address : constant Address;
+ 
+    Storage_Unit : constant := 8;
+    Word_Size    : constant := 32;
+    Memory_Size  : constant := 2 ** 32;
+ 
+    --  Address comparison
+ 
+    function "<"  (Left, Right : Address) return Boolean;
+    function "<=" (Left, Right : Address) return Boolean;
+    function ">"  (Left, Right : Address) return Boolean;
+    function ">=" (Left, Right : Address) return Boolean;
+    function "="  (Left, Right : Address) return Boolean;
+ 
+    pragma Import (Intrinsic, "<");
+    pragma Import (Intrinsic, "<=");
+    pragma Import (Intrinsic, ">");
+    pragma Import (Intrinsic, ">=");
+    pragma Import (Intrinsic, "=");
+ 
+    --  Other System-Dependent Declarations
+ 
+    type Bit_Order is (High_Order_First, Low_Order_First);
+    Default_Bit_Order : constant Bit_Order := High_Order_First;
+ 
+    --  Priority-related Declarations (RM D.1)
+ 
+    Max_Priority           : constant Positive := 30;
+    Max_Interrupt_Priority : constant Positive := 31;
+ 
+    subtype Any_Priority       is Integer      range  0 .. 31;
+    subtype Priority           is Any_Priority range  0 .. 30;
+    subtype Interrupt_Priority is Any_Priority range 31 .. 31;
+ 
+    Default_Priority : constant Priority := 15;
+ 
+ private
+ 
+    type Address is mod Memory_Size;
+    Null_Address : constant Address := 0;
+ 
+    --------------------------------------
+    -- System Implementation Parameters --
+    --------------------------------------
+ 
+    --  These parameters provide information about the target that is used
+    --  by the compiler. They are in the private part of System, where they
+    --  can be accessed using the special circuitry in the Targparm unit
+    --  whose source should be consulted for more detailed descriptions
+    --  of the individual switch values.
+ 
+    AAMP                      : constant Boolean := False;
+    Backend_Divide_Checks     : constant Boolean := False;
+    Backend_Overflow_Checks   : constant Boolean := False;
+    Command_Line_Args         : constant Boolean := True;
+    Configurable_Run_Time     : constant Boolean := False;
+    Denorm                    : constant Boolean := False;
+    Duration_32_Bits          : constant Boolean := False;
+    Exit_Status_Supported     : constant Boolean := True;
+    Fractional_Fixed_Ops      : constant Boolean := False;
+    Frontend_Layout           : constant Boolean := False;
+    Functions_Return_By_DSP   : constant Boolean := False;
+    Machine_Overflows         : constant Boolean := False;
+    Machine_Rounds            : constant Boolean := True;
+    OpenVMS                   : constant Boolean := False;
+    Preallocated_Stacks       : constant Boolean := False;
+    Signed_Zeros              : constant Boolean := True;
+    Stack_Check_Default       : constant Boolean := False;
+    Stack_Check_Probes        : constant Boolean := True;
+    Support_64_Bit_Divides    : constant Boolean := True;
+    Support_Aggregates        : constant Boolean := True;
+    Support_Composite_Assign  : constant Boolean := True;
+    Support_Composite_Compare : constant Boolean := True;
+    Support_Long_Shifts       : constant Boolean := True;
+    Suppress_Standard_Library : constant Boolean := False;
+    Use_Ada_Main_Program_Name : constant Boolean := False;
+    ZCX_By_Default            : constant Boolean := True;
+    GCC_ZCX_Support           : constant Boolean := True;
+    Front_End_ZCX_Support     : constant Boolean := False;
+ 
+    --  Obsolete entries, to be removed eventually (bootstrap issues!)
+ 
+    High_Integrity_Mode       : constant Boolean := False;
+    Long_Shifts_Inlined       : constant Boolean := True;
+ 
+    --  Note: Denorm is False because denormals are not supported on the
+    --  R10000, and we want the code to be valid for this processor.
+ 
+ end System;
diff -Nrcpad gcc-3.4.3/gcc/ada/system-linux-alpha.ads gcc-4.0.0/gcc/ada/system-linux-alpha.ads
*** gcc-3.4.3/gcc/ada/system-linux-alpha.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/system-linux-alpha.ads	Thu Jan 20 18:27:10 2005
***************
*** 0 ****
--- 1,151 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --                               S Y S T E M                                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                         (GNU-Linux/ia64 Version)                         --
+ --                                                                          --
+ --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package System is
+ pragma Pure (System);
+ --  Note that we take advantage of the implementation permission to
+ --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ 
+    type Name is (SYSTEM_NAME_GNAT);
+    System_Name : constant Name := SYSTEM_NAME_GNAT;
+ 
+    --  System-Dependent Named Numbers
+ 
+    Min_Int               : constant := Long_Long_Integer'First;
+    Max_Int               : constant := Long_Long_Integer'Last;
+ 
+    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
+    Max_Nonbinary_Modulus : constant := Integer'Last;
+ 
+    Max_Base_Digits       : constant := Long_Long_Float'Digits;
+    Max_Digits            : constant := Long_Long_Float'Digits;
+ 
+    Max_Mantissa          : constant := 63;
+    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
+ 
+    Tick                  : constant := 1.0 / 1024.0;
+ 
+    --  Storage-related Declarations
+ 
+    type Address is private;
+    Null_Address : constant Address;
+ 
+    Storage_Unit : constant := 8;
+    Word_Size    : constant := 64;
+    Memory_Size  : constant := 2 ** 64;
+ 
+    --  Address comparison
+ 
+    function "<"  (Left, Right : Address) return Boolean;
+    function "<=" (Left, Right : Address) return Boolean;
+    function ">"  (Left, Right : Address) return Boolean;
+    function ">=" (Left, Right : Address) return Boolean;
+    function "="  (Left, Right : Address) return Boolean;
+ 
+    pragma Import (Intrinsic, "<");
+    pragma Import (Intrinsic, "<=");
+    pragma Import (Intrinsic, ">");
+    pragma Import (Intrinsic, ">=");
+    pragma Import (Intrinsic, "=");
+ 
+    --  Other System-Dependent Declarations
+ 
+    type Bit_Order is (High_Order_First, Low_Order_First);
+    Default_Bit_Order : constant Bit_Order := Low_Order_First;
+ 
+    --  Priority-related Declarations (RM D.1)
+ 
+    Max_Priority           : constant Positive := 30;
+    Max_Interrupt_Priority : constant Positive := 31;
+ 
+    subtype Any_Priority       is Integer      range  0 .. 31;
+    subtype Priority           is Any_Priority range  0 .. 30;
+    subtype Interrupt_Priority is Any_Priority range 31 .. 31;
+ 
+    Default_Priority : constant Priority := 15;
+ 
+ private
+ 
+    type Address is mod Memory_Size;
+    Null_Address : constant Address := 0;
+ 
+    --------------------------------------
+    -- System Implementation Parameters --
+    --------------------------------------
+ 
+    --  These parameters provide information about the target that is used
+    --  by the compiler. They are in the private part of System, where they
+    --  can be accessed using the special circuitry in the Targparm unit
+    --  whose source should be consulted for more detailed descriptions
+    --  of the individual switch values.
+ 
+    AAMP                      : constant Boolean := False;
+    Backend_Divide_Checks     : constant Boolean := False;
+    Backend_Overflow_Checks   : constant Boolean := False;
+    Command_Line_Args         : constant Boolean := True;
+    Configurable_Run_Time     : constant Boolean := False;
+    Denorm                    : constant Boolean := True;
+    Duration_32_Bits          : constant Boolean := False;
+    Exit_Status_Supported     : constant Boolean := True;
+    Fractional_Fixed_Ops      : constant Boolean := False;
+    Frontend_Layout           : constant Boolean := False;
+    Functions_Return_By_DSP   : constant Boolean := False;
+    Machine_Overflows         : constant Boolean := False;
+    Machine_Rounds            : constant Boolean := True;
+    OpenVMS                   : constant Boolean := False;
+    Preallocated_Stacks       : constant Boolean := False;
+    Signed_Zeros              : constant Boolean := True;
+    Stack_Check_Default       : constant Boolean := False;
+    Stack_Check_Probes        : constant Boolean := False;
+    Support_64_Bit_Divides    : constant Boolean := True;
+    Support_Aggregates        : constant Boolean := True;
+    Support_Composite_Assign  : constant Boolean := True;
+    Support_Composite_Compare : constant Boolean := True;
+    Support_Long_Shifts       : constant Boolean := True;
+    Suppress_Standard_Library : constant Boolean := False;
+    Use_Ada_Main_Program_Name : constant Boolean := False;
+    ZCX_By_Default            : constant Boolean := True;
+    GCC_ZCX_Support           : constant Boolean := True;
+    Front_End_ZCX_Support     : constant Boolean := False;
+ 
+    --  Obsolete entries, to be removed eventually (bootstrap issues!)
+ 
+    High_Integrity_Mode       : constant Boolean := False;
+    Long_Shifts_Inlined       : constant Boolean := True;
+ 
+ end System;
diff -Nrcpad gcc-3.4.3/gcc/ada/system-linux-hppa.ads gcc-4.0.0/gcc/ada/system-linux-hppa.ads
*** gcc-3.4.3/gcc/ada/system-linux-hppa.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/system-linux-hppa.ads	Thu Apr  7 20:03:51 2005
***************
*** 0 ****
--- 1,151 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --                               S Y S T E M                                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                          (GNU/Linux-HPPA Version)                        --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package System is
+ pragma Pure (System);
+ --  Note that we take advantage of the implementation permission to
+ --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ 
+    type Name is (SYSTEM_NAME_GNAT);
+    System_Name : constant Name := SYSTEM_NAME_GNAT;
+ 
+    --  System-Dependent Named Numbers
+ 
+    Min_Int               : constant := Long_Long_Integer'First;
+    Max_Int               : constant := Long_Long_Integer'Last;
+ 
+    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
+    Max_Nonbinary_Modulus : constant := Integer'Last;
+ 
+    Max_Base_Digits       : constant := Long_Long_Float'Digits;
+    Max_Digits            : constant := Long_Long_Float'Digits;
+ 
+    Max_Mantissa          : constant := 63;
+    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
+ 
+    Tick                  : constant := 0.000_001;
+ 
+    --  Storage-related Declarations
+ 
+    type Address is private;
+    Null_Address : constant Address;
+ 
+    Storage_Unit : constant := 8;
+    Word_Size    : constant := 32;
+    Memory_Size  : constant := 2 ** 32;
+ 
+    --  Address comparison
+ 
+    function "<"  (Left, Right : Address) return Boolean;
+    function "<=" (Left, Right : Address) return Boolean;
+    function ">"  (Left, Right : Address) return Boolean;
+    function ">=" (Left, Right : Address) return Boolean;
+    function "="  (Left, Right : Address) return Boolean;
+ 
+    pragma Import (Intrinsic, "<");
+    pragma Import (Intrinsic, "<=");
+    pragma Import (Intrinsic, ">");
+    pragma Import (Intrinsic, ">=");
+    pragma Import (Intrinsic, "=");
+ 
+    --  Other System-Dependent Declarations
+ 
+    type Bit_Order is (High_Order_First, Low_Order_First);
+    Default_Bit_Order : constant Bit_Order := High_Order_First;
+ 
+    --  Priority-related Declarations (RM D.1)
+ 
+    Max_Priority           : constant Positive := 30;
+    Max_Interrupt_Priority : constant Positive := 31;
+ 
+    subtype Any_Priority       is Integer      range  0 .. 31;
+    subtype Priority           is Any_Priority range  0 .. 30;
+    subtype Interrupt_Priority is Any_Priority range 31 .. 31;
+ 
+    Default_Priority : constant Priority := 15;
+ 
+ private
+ 
+    type Address is mod Memory_Size;
+    Null_Address : constant Address := 0;
+ 
+    --------------------------------------
+    -- System Implementation Parameters --
+    --------------------------------------
+ 
+    --  These parameters provide information about the target that is used
+    --  by the compiler. They are in the private part of System, where they
+    --  can be accessed using the special circuitry in the Targparm unit
+    --  whose source should be consulted for more detailed descriptions
+    --  of the individual switch values.
+ 
+    AAMP                      : constant Boolean := False;
+    Backend_Divide_Checks     : constant Boolean := False;
+    Backend_Overflow_Checks   : constant Boolean := False;
+    Command_Line_Args         : constant Boolean := True;
+    Configurable_Run_Time     : constant Boolean := False;
+    Denorm                    : constant Boolean := True;
+    Duration_32_Bits          : constant Boolean := False;
+    Exit_Status_Supported     : constant Boolean := True;
+    Fractional_Fixed_Ops      : constant Boolean := False;
+    Frontend_Layout           : constant Boolean := False;
+    Functions_Return_By_DSP   : constant Boolean := False;
+    Machine_Overflows         : constant Boolean := False;
+    Machine_Rounds            : constant Boolean := True;
+    OpenVMS                   : constant Boolean := False;
+    Preallocated_Stacks       : constant Boolean := False;
+    Signed_Zeros              : constant Boolean := True;
+    Stack_Check_Default       : constant Boolean := False;
+    Stack_Check_Probes        : constant Boolean := False;
+    Support_64_Bit_Divides    : constant Boolean := True;
+    Support_Aggregates        : constant Boolean := True;
+    Support_Composite_Assign  : constant Boolean := True;
+    Support_Composite_Compare : constant Boolean := True;
+    Support_Long_Shifts       : constant Boolean := True;
+    Suppress_Standard_Library : constant Boolean := False;
+    Use_Ada_Main_Program_Name : constant Boolean := False;
+    ZCX_By_Default            : constant Boolean := True;
+    GCC_ZCX_Support           : constant Boolean := True;
+    Front_End_ZCX_Support     : constant Boolean := False;
+ 
+    --  Obsolete entries, to be removed eventually (bootstrap issues!)
+ 
+    High_Integrity_Mode       : constant Boolean := False;
+    Long_Shifts_Inlined       : constant Boolean := False;
+ 
+ end System;
diff -Nrcpad gcc-3.4.3/gcc/ada/system-linux-ia64.ads gcc-4.0.0/gcc/ada/system-linux-ia64.ads
*** gcc-3.4.3/gcc/ada/system-linux-ia64.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/system-linux-ia64.ads	Mon Oct  4 14:51:16 2004
***************
*** 0 ****
--- 1,151 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --                               S Y S T E M                                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                         (GNU-Linux/ia64 Version)                         --
+ --                                                                          --
+ --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package System is
+ pragma Pure (System);
+ --  Note that we take advantage of the implementation permission to
+ --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ 
+    type Name is (SYSTEM_NAME_GNAT);
+    System_Name : constant Name := SYSTEM_NAME_GNAT;
+ 
+    --  System-Dependent Named Numbers
+ 
+    Min_Int               : constant := Long_Long_Integer'First;
+    Max_Int               : constant := Long_Long_Integer'Last;
+ 
+    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
+    Max_Nonbinary_Modulus : constant := Integer'Last;
+ 
+    Max_Base_Digits       : constant := Long_Long_Float'Digits;
+    Max_Digits            : constant := Long_Long_Float'Digits;
+ 
+    Max_Mantissa          : constant := 63;
+    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
+ 
+    Tick                  : constant := 0.01;
+ 
+    --  Storage-related Declarations
+ 
+    type Address is private;
+    Null_Address : constant Address;
+ 
+    Storage_Unit : constant := 8;
+    Word_Size    : constant := 64;
+    Memory_Size  : constant := 2 ** 64;
+ 
+    --  Address comparison
+ 
+    function "<"  (Left, Right : Address) return Boolean;
+    function "<=" (Left, Right : Address) return Boolean;
+    function ">"  (Left, Right : Address) return Boolean;
+    function ">=" (Left, Right : Address) return Boolean;
+    function "="  (Left, Right : Address) return Boolean;
+ 
+    pragma Import (Intrinsic, "<");
+    pragma Import (Intrinsic, "<=");
+    pragma Import (Intrinsic, ">");
+    pragma Import (Intrinsic, ">=");
+    pragma Import (Intrinsic, "=");
+ 
+    --  Other System-Dependent Declarations
+ 
+    type Bit_Order is (High_Order_First, Low_Order_First);
+    Default_Bit_Order : constant Bit_Order := Low_Order_First;
+ 
+    --  Priority-related Declarations (RM D.1)
+ 
+    Max_Priority           : constant Positive := 30;
+    Max_Interrupt_Priority : constant Positive := 31;
+ 
+    subtype Any_Priority       is Integer      range  0 .. 31;
+    subtype Priority           is Any_Priority range  0 .. 30;
+    subtype Interrupt_Priority is Any_Priority range 31 .. 31;
+ 
+    Default_Priority : constant Priority := 15;
+ 
+ private
+ 
+    type Address is mod Memory_Size;
+    Null_Address : constant Address := 0;
+ 
+    --------------------------------------
+    -- System Implementation Parameters --
+    --------------------------------------
+ 
+    --  These parameters provide information about the target that is used
+    --  by the compiler. They are in the private part of System, where they
+    --  can be accessed using the special circuitry in the Targparm unit
+    --  whose source should be consulted for more detailed descriptions
+    --  of the individual switch values.
+ 
+    AAMP                      : constant Boolean := False;
+    Backend_Divide_Checks     : constant Boolean := False;
+    Backend_Overflow_Checks   : constant Boolean := False;
+    Command_Line_Args         : constant Boolean := True;
+    Configurable_Run_Time     : constant Boolean := False;
+    Denorm                    : constant Boolean := True;
+    Duration_32_Bits          : constant Boolean := False;
+    Exit_Status_Supported     : constant Boolean := True;
+    Fractional_Fixed_Ops      : constant Boolean := False;
+    Frontend_Layout           : constant Boolean := False;
+    Functions_Return_By_DSP   : constant Boolean := False;
+    Machine_Overflows         : constant Boolean := False;
+    Machine_Rounds            : constant Boolean := True;
+    OpenVMS                   : constant Boolean := False;
+    Preallocated_Stacks       : constant Boolean := False;
+    Signed_Zeros              : constant Boolean := True;
+    Stack_Check_Default       : constant Boolean := False;
+    Stack_Check_Probes        : constant Boolean := False;
+    Support_64_Bit_Divides    : constant Boolean := True;
+    Support_Aggregates        : constant Boolean := True;
+    Support_Composite_Assign  : constant Boolean := True;
+    Support_Composite_Compare : constant Boolean := True;
+    Support_Long_Shifts       : constant Boolean := True;
+    Suppress_Standard_Library : constant Boolean := False;
+    Use_Ada_Main_Program_Name : constant Boolean := False;
+    ZCX_By_Default            : constant Boolean := True;
+    GCC_ZCX_Support           : constant Boolean := True;
+    Front_End_ZCX_Support     : constant Boolean := False;
+ 
+    --  Obsolete entries, to be removed eventually (bootstrap issues!)
+ 
+    High_Integrity_Mode       : constant Boolean := False;
+    Long_Shifts_Inlined       : constant Boolean := True;
+ 
+ end System;
diff -Nrcpad gcc-3.4.3/gcc/ada/system-linux-ppc.ads gcc-4.0.0/gcc/ada/system-linux-ppc.ads
*** gcc-3.4.3/gcc/ada/system-linux-ppc.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/system-linux-ppc.ads	Tue Jan 18 21:37:25 2005
***************
*** 0 ****
--- 1,151 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --                               S Y S T E M                                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                          (GNU-Linux/PPC Version)                         --
+ --                                                                          --
+ --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package System is
+ pragma Pure (System);
+ --  Note that we take advantage of the implementation permission to
+ --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ 
+    type Name is (SYSTEM_NAME_GNAT);
+    System_Name : constant Name := SYSTEM_NAME_GNAT;
+ 
+    --  System-Dependent Named Numbers
+ 
+    Min_Int               : constant := Long_Long_Integer'First;
+    Max_Int               : constant := Long_Long_Integer'Last;
+ 
+    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
+    Max_Nonbinary_Modulus : constant := Integer'Last;
+ 
+    Max_Base_Digits       : constant := Long_Long_Float'Digits;
+    Max_Digits            : constant := Long_Long_Float'Digits;
+ 
+    Max_Mantissa          : constant := 63;
+    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
+ 
+    Tick                  : constant := 0.000_001;
+ 
+    --  Storage-related Declarations
+ 
+    type Address is private;
+    Null_Address : constant Address;
+ 
+    Storage_Unit : constant := 8;
+    Word_Size    : constant := 32;
+    Memory_Size  : constant := 2 ** 32;
+ 
+    --  Address comparison
+ 
+    function "<"  (Left, Right : Address) return Boolean;
+    function "<=" (Left, Right : Address) return Boolean;
+    function ">"  (Left, Right : Address) return Boolean;
+    function ">=" (Left, Right : Address) return Boolean;
+    function "="  (Left, Right : Address) return Boolean;
+ 
+    pragma Import (Intrinsic, "<");
+    pragma Import (Intrinsic, "<=");
+    pragma Import (Intrinsic, ">");
+    pragma Import (Intrinsic, ">=");
+    pragma Import (Intrinsic, "=");
+ 
+    --  Other System-Dependent Declarations
+ 
+    type Bit_Order is (High_Order_First, Low_Order_First);
+    Default_Bit_Order : constant Bit_Order := High_Order_First;
+ 
+    --  Priority-related Declarations (RM D.1)
+ 
+    Max_Priority           : constant Positive := 30;
+    Max_Interrupt_Priority : constant Positive := 31;
+ 
+    subtype Any_Priority       is Integer      range  0 .. 31;
+    subtype Priority           is Any_Priority range  0 .. 30;
+    subtype Interrupt_Priority is Any_Priority range 31 .. 31;
+ 
+    Default_Priority : constant Priority := 15;
+ 
+ private
+ 
+    type Address is mod Memory_Size;
+    Null_Address : constant Address := 0;
+ 
+    --------------------------------------
+    -- System Implementation Parameters --
+    --------------------------------------
+ 
+    --  These parameters provide information about the target that is used
+    --  by the compiler. They are in the private part of System, where they
+    --  can be accessed using the special circuitry in the Targparm unit
+    --  whose source should be consulted for more detailed descriptions
+    --  of the individual switch values.
+ 
+    AAMP                      : constant Boolean := False;
+    Backend_Divide_Checks     : constant Boolean := False;
+    Backend_Overflow_Checks   : constant Boolean := False;
+    Command_Line_Args         : constant Boolean := True;
+    Configurable_Run_Time     : constant Boolean := False;
+    Denorm                    : constant Boolean := True;
+    Duration_32_Bits          : constant Boolean := False;
+    Exit_Status_Supported     : constant Boolean := True;
+    Fractional_Fixed_Ops      : constant Boolean := False;
+    Frontend_Layout           : constant Boolean := False;
+    Functions_Return_By_DSP   : constant Boolean := False;
+    Machine_Overflows         : constant Boolean := False;
+    Machine_Rounds            : constant Boolean := True;
+    OpenVMS                   : constant Boolean := False;
+    Preallocated_Stacks       : constant Boolean := False;
+    Signed_Zeros              : constant Boolean := True;
+    Stack_Check_Default       : constant Boolean := False;
+    Stack_Check_Probes        : constant Boolean := False;
+    Support_64_Bit_Divides    : constant Boolean := True;
+    Support_Aggregates        : constant Boolean := True;
+    Support_Composite_Assign  : constant Boolean := True;
+    Support_Composite_Compare : constant Boolean := True;
+    Support_Long_Shifts       : constant Boolean := True;
+    Suppress_Standard_Library : constant Boolean := False;
+    Use_Ada_Main_Program_Name : constant Boolean := False;
+    ZCX_By_Default            : constant Boolean := True;
+    GCC_ZCX_Support           : constant Boolean := True;
+    Front_End_ZCX_Support     : constant Boolean := False;
+ 
+    --  Obsolete entries, to be removed eventually (bootstrap issues!)
+ 
+    High_Integrity_Mode       : constant Boolean := False;
+    Long_Shifts_Inlined       : constant Boolean := True;
+ 
+ end System;
diff -Nrcpad gcc-3.4.3/gcc/ada/system-linux-s390.ads gcc-4.0.0/gcc/ada/system-linux-s390.ads
*** gcc-3.4.3/gcc/ada/system-linux-s390.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/system-linux-s390.ads	Tue Jan 11 23:29:24 2005
***************
*** 0 ****
--- 1,151 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --                               S Y S T E M                                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                          (GNU-Linux/s390 Version)                        --
+ --                                                                          --
+ --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package System is
+ pragma Pure (System);
+ --  Note that we take advantage of the implementation permission to
+ --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ 
+    type Name is (SYSTEM_NAME_GNAT);
+    System_Name : constant Name := SYSTEM_NAME_GNAT;
+ 
+    --  System-Dependent Named Numbers
+ 
+    Min_Int               : constant := Long_Long_Integer'First;
+    Max_Int               : constant := Long_Long_Integer'Last;
+ 
+    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
+    Max_Nonbinary_Modulus : constant := Integer'Last;
+ 
+    Max_Base_Digits       : constant := Long_Long_Float'Digits;
+    Max_Digits            : constant := Long_Long_Float'Digits;
+ 
+    Max_Mantissa          : constant := 63;
+    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
+ 
+    Tick                  : constant := 0.000_001;
+ 
+    --  Storage-related Declarations
+ 
+    type Address is private;
+    Null_Address : constant Address;
+ 
+    Storage_Unit : constant := 8;
+    Word_Size    : constant := 32;
+    Memory_Size  : constant := 2 ** 32;
+ 
+    --  Address comparison
+ 
+    function "<"  (Left, Right : Address) return Boolean;
+    function "<=" (Left, Right : Address) return Boolean;
+    function ">"  (Left, Right : Address) return Boolean;
+    function ">=" (Left, Right : Address) return Boolean;
+    function "="  (Left, Right : Address) return Boolean;
+ 
+    pragma Import (Intrinsic, "<");
+    pragma Import (Intrinsic, "<=");
+    pragma Import (Intrinsic, ">");
+    pragma Import (Intrinsic, ">=");
+    pragma Import (Intrinsic, "=");
+ 
+    --  Other System-Dependent Declarations
+ 
+    type Bit_Order is (High_Order_First, Low_Order_First);
+    Default_Bit_Order : constant Bit_Order := High_Order_First;
+ 
+    --  Priority-related Declarations (RM D.1)
+ 
+    Max_Priority           : constant Positive := 30;
+    Max_Interrupt_Priority : constant Positive := 31;
+ 
+    subtype Any_Priority       is Integer      range  0 .. 31;
+    subtype Priority           is Any_Priority range  0 .. 30;
+    subtype Interrupt_Priority is Any_Priority range 31 .. 31;
+ 
+    Default_Priority : constant Priority := 15;
+ 
+ private
+ 
+    type Address is mod Memory_Size;
+    Null_Address : constant Address := 0;
+ 
+    --------------------------------------
+    -- System Implementation Parameters --
+    --------------------------------------
+ 
+    --  These parameters provide information about the target that is used
+    --  by the compiler. They are in the private part of System, where they
+    --  can be accessed using the special circuitry in the Targparm unit
+    --  whose source should be consulted for more detailed descriptions
+    --  of the individual switch values.
+ 
+    AAMP                      : constant Boolean := False;
+    Backend_Divide_Checks     : constant Boolean := False;
+    Backend_Overflow_Checks   : constant Boolean := False;
+    Command_Line_Args         : constant Boolean := True;
+    Configurable_Run_Time     : constant Boolean := False;
+    Denorm                    : constant Boolean := True;
+    Duration_32_Bits          : constant Boolean := False;
+    Exit_Status_Supported     : constant Boolean := True;
+    Fractional_Fixed_Ops      : constant Boolean := False;
+    Frontend_Layout           : constant Boolean := False;
+    Functions_Return_By_DSP   : constant Boolean := False;
+    Machine_Overflows         : constant Boolean := False;
+    Machine_Rounds            : constant Boolean := True;
+    OpenVMS                   : constant Boolean := False;
+    Preallocated_Stacks       : constant Boolean := False;
+    Signed_Zeros              : constant Boolean := True;
+    Stack_Check_Default       : constant Boolean := False;
+    Stack_Check_Probes        : constant Boolean := False;
+    Support_64_Bit_Divides    : constant Boolean := True;
+    Support_Aggregates        : constant Boolean := True;
+    Support_Composite_Assign  : constant Boolean := True;
+    Support_Composite_Compare : constant Boolean := True;
+    Support_Long_Shifts       : constant Boolean := True;
+    Suppress_Standard_Library : constant Boolean := False;
+    Use_Ada_Main_Program_Name : constant Boolean := False;
+    ZCX_By_Default            : constant Boolean := True;
+    GCC_ZCX_Support           : constant Boolean := True;
+    Front_End_ZCX_Support     : constant Boolean := False;
+ 
+    --  Obsolete entries, to be removed eventually (bootstrap issues!)
+ 
+    High_Integrity_Mode       : constant Boolean := False;
+    Long_Shifts_Inlined       : constant Boolean := True;
+ 
+ end System;
diff -Nrcpad gcc-3.4.3/gcc/ada/system-linux-s390x.ads gcc-4.0.0/gcc/ada/system-linux-s390x.ads
*** gcc-3.4.3/gcc/ada/system-linux-s390x.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/system-linux-s390x.ads	Tue Jan 11 23:29:24 2005
***************
*** 0 ****
--- 1,151 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --                               S Y S T E M                                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                          (GNU-Linux/s390x Version)                       --
+ --                                                                          --
+ --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package System is
+ pragma Pure (System);
+ --  Note that we take advantage of the implementation permission to
+ --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ 
+    type Name is (SYSTEM_NAME_GNAT);
+    System_Name : constant Name := SYSTEM_NAME_GNAT;
+ 
+    --  System-Dependent Named Numbers
+ 
+    Min_Int               : constant := Long_Long_Integer'First;
+    Max_Int               : constant := Long_Long_Integer'Last;
+ 
+    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
+    Max_Nonbinary_Modulus : constant := Integer'Last;
+ 
+    Max_Base_Digits       : constant := Long_Long_Float'Digits;
+    Max_Digits            : constant := Long_Long_Float'Digits;
+ 
+    Max_Mantissa          : constant := 63;
+    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
+ 
+    Tick                  : constant := 0.000_001;
+ 
+    --  Storage-related Declarations
+ 
+    type Address is private;
+    Null_Address : constant Address;
+ 
+    Storage_Unit : constant := 8;
+    Word_Size    : constant := 64;
+    Memory_Size  : constant := 2 ** 64;
+ 
+    --  Address comparison
+ 
+    function "<"  (Left, Right : Address) return Boolean;
+    function "<=" (Left, Right : Address) return Boolean;
+    function ">"  (Left, Right : Address) return Boolean;
+    function ">=" (Left, Right : Address) return Boolean;
+    function "="  (Left, Right : Address) return Boolean;
+ 
+    pragma Import (Intrinsic, "<");
+    pragma Import (Intrinsic, "<=");
+    pragma Import (Intrinsic, ">");
+    pragma Import (Intrinsic, ">=");
+    pragma Import (Intrinsic, "=");
+ 
+    --  Other System-Dependent Declarations
+ 
+    type Bit_Order is (High_Order_First, Low_Order_First);
+    Default_Bit_Order : constant Bit_Order := High_Order_First;
+ 
+    --  Priority-related Declarations (RM D.1)
+ 
+    Max_Priority           : constant Positive := 30;
+    Max_Interrupt_Priority : constant Positive := 31;
+ 
+    subtype Any_Priority       is Integer      range  0 .. 31;
+    subtype Priority           is Any_Priority range  0 .. 30;
+    subtype Interrupt_Priority is Any_Priority range 31 .. 31;
+ 
+    Default_Priority : constant Priority := 15;
+ 
+ private
+ 
+    type Address is mod Memory_Size;
+    Null_Address : constant Address := 0;
+ 
+    --------------------------------------
+    -- System Implementation Parameters --
+    --------------------------------------
+ 
+    --  These parameters provide information about the target that is used
+    --  by the compiler. They are in the private part of System, where they
+    --  can be accessed using the special circuitry in the Targparm unit
+    --  whose source should be consulted for more detailed descriptions
+    --  of the individual switch values.
+ 
+    AAMP                      : constant Boolean := False;
+    Backend_Divide_Checks     : constant Boolean := False;
+    Backend_Overflow_Checks   : constant Boolean := False;
+    Command_Line_Args         : constant Boolean := True;
+    Configurable_Run_Time     : constant Boolean := False;
+    Denorm                    : constant Boolean := True;
+    Duration_32_Bits          : constant Boolean := False;
+    Exit_Status_Supported     : constant Boolean := True;
+    Fractional_Fixed_Ops      : constant Boolean := False;
+    Frontend_Layout           : constant Boolean := False;
+    Functions_Return_By_DSP   : constant Boolean := False;
+    Machine_Overflows         : constant Boolean := False;
+    Machine_Rounds            : constant Boolean := True;
+    OpenVMS                   : constant Boolean := False;
+    Preallocated_Stacks       : constant Boolean := False;
+    Signed_Zeros              : constant Boolean := True;
+    Stack_Check_Default       : constant Boolean := False;
+    Stack_Check_Probes        : constant Boolean := False;
+    Support_64_Bit_Divides    : constant Boolean := True;
+    Support_Aggregates        : constant Boolean := True;
+    Support_Composite_Assign  : constant Boolean := True;
+    Support_Composite_Compare : constant Boolean := True;
+    Support_Long_Shifts       : constant Boolean := True;
+    Suppress_Standard_Library : constant Boolean := False;
+    Use_Ada_Main_Program_Name : constant Boolean := False;
+    ZCX_By_Default            : constant Boolean := True;
+    GCC_ZCX_Support           : constant Boolean := True;
+    Front_End_ZCX_Support     : constant Boolean := False;
+ 
+    --  Obsolete entries, to be removed eventually (bootstrap issues!)
+ 
+    High_Integrity_Mode       : constant Boolean := False;
+    Long_Shifts_Inlined       : constant Boolean := True;
+ 
+ end System;
diff -Nrcpad gcc-3.4.3/gcc/ada/system-linux-sparc.ads gcc-4.0.0/gcc/ada/system-linux-sparc.ads
*** gcc-3.4.3/gcc/ada/system-linux-sparc.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/system-linux-sparc.ads	Tue Mar  8 21:22:47 2005
***************
*** 0 ****
--- 1,151 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --                               S Y S T E M                                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                          (GNU/Linux-SPARC Version)                       --
+ --                                                                          --
+ --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package System is
+ pragma Pure (System);
+ --  Note that we take advantage of the implementation permission to
+ --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ 
+    type Name is (SYSTEM_NAME_GNAT);
+    System_Name : constant Name := SYSTEM_NAME_GNAT;
+ 
+    --  System-Dependent Named Numbers
+ 
+    Min_Int               : constant := Long_Long_Integer'First;
+    Max_Int               : constant := Long_Long_Integer'Last;
+ 
+    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
+    Max_Nonbinary_Modulus : constant := Integer'Last;
+ 
+    Max_Base_Digits       : constant := Long_Long_Float'Digits;
+    Max_Digits            : constant := Long_Long_Float'Digits;
+ 
+    Max_Mantissa          : constant := 63;
+    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
+ 
+    Tick                  : constant := 0.000_001;
+ 
+    --  Storage-related Declarations
+ 
+    type Address is private;
+    Null_Address : constant Address;
+ 
+    Storage_Unit : constant := 8;
+    Word_Size    : constant := 32;
+    Memory_Size  : constant := 2 ** 32;
+ 
+    --  Address comparison
+ 
+    function "<"  (Left, Right : Address) return Boolean;
+    function "<=" (Left, Right : Address) return Boolean;
+    function ">"  (Left, Right : Address) return Boolean;
+    function ">=" (Left, Right : Address) return Boolean;
+    function "="  (Left, Right : Address) return Boolean;
+ 
+    pragma Import (Intrinsic, "<");
+    pragma Import (Intrinsic, "<=");
+    pragma Import (Intrinsic, ">");
+    pragma Import (Intrinsic, ">=");
+    pragma Import (Intrinsic, "=");
+ 
+    --  Other System-Dependent Declarations
+ 
+    type Bit_Order is (High_Order_First, Low_Order_First);
+    Default_Bit_Order : constant Bit_Order := High_Order_First;
+ 
+    --  Priority-related Declarations (RM D.1)
+ 
+    Max_Priority           : constant Positive := 30;
+    Max_Interrupt_Priority : constant Positive := 31;
+ 
+    subtype Any_Priority       is Integer      range  0 .. 31;
+    subtype Priority           is Any_Priority range  0 .. 30;
+    subtype Interrupt_Priority is Any_Priority range 31 .. 31;
+ 
+    Default_Priority : constant Priority := 15;
+ 
+ private
+ 
+    type Address is mod Memory_Size;
+    Null_Address : constant Address := 0;
+ 
+    --------------------------------------
+    -- System Implementation Parameters --
+    --------------------------------------
+ 
+    --  These parameters provide information about the target that is used
+    --  by the compiler. They are in the private part of System, where they
+    --  can be accessed using the special circuitry in the Targparm unit
+    --  whose source should be consulted for more detailed descriptions
+    --  of the individual switch values.
+ 
+    AAMP                      : constant Boolean := False;
+    Backend_Divide_Checks     : constant Boolean := False;
+    Backend_Overflow_Checks   : constant Boolean := False;
+    Command_Line_Args         : constant Boolean := True;
+    Configurable_Run_Time     : constant Boolean := False;
+    Denorm                    : constant Boolean := True;
+    Duration_32_Bits          : constant Boolean := False;
+    Exit_Status_Supported     : constant Boolean := True;
+    Fractional_Fixed_Ops      : constant Boolean := False;
+    Frontend_Layout           : constant Boolean := False;
+    Functions_Return_By_DSP   : constant Boolean := False;
+    Machine_Overflows         : constant Boolean := False;
+    Machine_Rounds            : constant Boolean := True;
+    OpenVMS                   : constant Boolean := False;
+    Preallocated_Stacks       : constant Boolean := False;
+    Signed_Zeros              : constant Boolean := True;
+    Stack_Check_Default       : constant Boolean := False;
+    Stack_Check_Probes        : constant Boolean := False;
+    Support_64_Bit_Divides    : constant Boolean := True;
+    Support_Aggregates        : constant Boolean := True;
+    Support_Composite_Assign  : constant Boolean := True;
+    Support_Composite_Compare : constant Boolean := True;
+    Support_Long_Shifts       : constant Boolean := True;
+    Suppress_Standard_Library : constant Boolean := False;
+    Use_Ada_Main_Program_Name : constant Boolean := False;
+    ZCX_By_Default            : constant Boolean := True;
+    GCC_ZCX_Support           : constant Boolean := True;
+    Front_End_ZCX_Support     : constant Boolean := False;
+ 
+    --  Obsolete entries, to be removed eventually (bootstrap issues!)
+ 
+    High_Integrity_Mode       : constant Boolean := False;
+    Long_Shifts_Inlined       : constant Boolean := True;
+ 
+ end System;
diff -Nrcpad gcc-3.4.3/gcc/ada/system-linux-x86.ads gcc-4.0.0/gcc/ada/system-linux-x86.ads
*** gcc-3.4.3/gcc/ada/system-linux-x86.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/system-linux-x86.ads	Mon Oct  4 14:51:16 2004
***************
*** 0 ****
--- 1,151 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --                               S Y S T E M                                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                          (GNU-Linux/x86 Version)                         --
+ --                                                                          --
+ --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package System is
+ pragma Pure (System);
+ --  Note that we take advantage of the implementation permission to
+ --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ 
+    type Name is (SYSTEM_NAME_GNAT);
+    System_Name : constant Name := SYSTEM_NAME_GNAT;
+ 
+    --  System-Dependent Named Numbers
+ 
+    Min_Int               : constant := Long_Long_Integer'First;
+    Max_Int               : constant := Long_Long_Integer'Last;
+ 
+    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
+    Max_Nonbinary_Modulus : constant := Integer'Last;
+ 
+    Max_Base_Digits       : constant := Long_Long_Float'Digits;
+    Max_Digits            : constant := Long_Long_Float'Digits;
+ 
+    Max_Mantissa          : constant := 63;
+    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
+ 
+    Tick                  : constant := 0.000_001;
+ 
+    --  Storage-related Declarations
+ 
+    type Address is private;
+    Null_Address : constant Address;
+ 
+    Storage_Unit : constant := 8;
+    Word_Size    : constant := 32;
+    Memory_Size  : constant := 2 ** 32;
+ 
+    --  Address comparison
+ 
+    function "<"  (Left, Right : Address) return Boolean;
+    function "<=" (Left, Right : Address) return Boolean;
+    function ">"  (Left, Right : Address) return Boolean;
+    function ">=" (Left, Right : Address) return Boolean;
+    function "="  (Left, Right : Address) return Boolean;
+ 
+    pragma Import (Intrinsic, "<");
+    pragma Import (Intrinsic, "<=");
+    pragma Import (Intrinsic, ">");
+    pragma Import (Intrinsic, ">=");
+    pragma Import (Intrinsic, "=");
+ 
+    --  Other System-Dependent Declarations
+ 
+    type Bit_Order is (High_Order_First, Low_Order_First);
+    Default_Bit_Order : constant Bit_Order := Low_Order_First;
+ 
+    --  Priority-related Declarations (RM D.1)
+ 
+    Max_Priority           : constant Positive := 30;
+    Max_Interrupt_Priority : constant Positive := 31;
+ 
+    subtype Any_Priority       is Integer      range  0 .. 31;
+    subtype Priority           is Any_Priority range  0 .. 30;
+    subtype Interrupt_Priority is Any_Priority range 31 .. 31;
+ 
+    Default_Priority : constant Priority := 15;
+ 
+ private
+ 
+    type Address is mod Memory_Size;
+    Null_Address : constant Address := 0;
+ 
+    --------------------------------------
+    -- System Implementation Parameters --
+    --------------------------------------
+ 
+    --  These parameters provide information about the target that is used
+    --  by the compiler. They are in the private part of System, where they
+    --  can be accessed using the special circuitry in the Targparm unit
+    --  whose source should be consulted for more detailed descriptions
+    --  of the individual switch values.
+ 
+    AAMP                      : constant Boolean := False;
+    Backend_Divide_Checks     : constant Boolean := False;
+    Backend_Overflow_Checks   : constant Boolean := False;
+    Command_Line_Args         : constant Boolean := True;
+    Configurable_Run_Time     : constant Boolean := False;
+    Denorm                    : constant Boolean := True;
+    Duration_32_Bits          : constant Boolean := False;
+    Exit_Status_Supported     : constant Boolean := True;
+    Fractional_Fixed_Ops      : constant Boolean := False;
+    Frontend_Layout           : constant Boolean := False;
+    Functions_Return_By_DSP   : constant Boolean := False;
+    Machine_Overflows         : constant Boolean := False;
+    Machine_Rounds            : constant Boolean := True;
+    OpenVMS                   : constant Boolean := False;
+    Preallocated_Stacks       : constant Boolean := False;
+    Signed_Zeros              : constant Boolean := True;
+    Stack_Check_Default       : constant Boolean := False;
+    Stack_Check_Probes        : constant Boolean := False;
+    Support_64_Bit_Divides    : constant Boolean := True;
+    Support_Aggregates        : constant Boolean := True;
+    Support_Composite_Assign  : constant Boolean := True;
+    Support_Composite_Compare : constant Boolean := True;
+    Support_Long_Shifts       : constant Boolean := True;
+    Suppress_Standard_Library : constant Boolean := False;
+    Use_Ada_Main_Program_Name : constant Boolean := False;
+    ZCX_By_Default            : constant Boolean := True;
+    GCC_ZCX_Support           : constant Boolean := True;
+    Front_End_ZCX_Support     : constant Boolean := False;
+ 
+    --  Obsolete entries, to be removed eventually (bootstrap issues!)
+ 
+    High_Integrity_Mode       : constant Boolean := False;
+    Long_Shifts_Inlined       : constant Boolean := True;
+ 
+ end System;
diff -Nrcpad gcc-3.4.3/gcc/ada/system-linux-x86_64.ads gcc-4.0.0/gcc/ada/system-linux-x86_64.ads
*** gcc-3.4.3/gcc/ada/system-linux-x86_64.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/system-linux-x86_64.ads	Mon Oct  4 14:51:16 2004
***************
*** 0 ****
--- 1,151 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --                               S Y S T E M                                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                          (GNU-Linux/x86-64 Version)                      --
+ --                                                                          --
+ --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package System is
+ pragma Pure (System);
+ --  Note that we take advantage of the implementation permission to
+ --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ 
+    type Name is (SYSTEM_NAME_GNAT);
+    System_Name : constant Name := SYSTEM_NAME_GNAT;
+ 
+    --  System-Dependent Named Numbers
+ 
+    Min_Int               : constant := Long_Long_Integer'First;
+    Max_Int               : constant := Long_Long_Integer'Last;
+ 
+    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
+    Max_Nonbinary_Modulus : constant := Integer'Last;
+ 
+    Max_Base_Digits       : constant := Long_Long_Float'Digits;
+    Max_Digits            : constant := Long_Long_Float'Digits;
+ 
+    Max_Mantissa          : constant := 63;
+    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
+ 
+    Tick                  : constant := 0.000_001;
+ 
+    --  Storage-related Declarations
+ 
+    type Address is private;
+    Null_Address : constant Address;
+ 
+    Storage_Unit : constant := 8;
+    Word_Size    : constant := 64;
+    Memory_Size  : constant := 2 ** 64;
+ 
+    --  Address comparison
+ 
+    function "<"  (Left, Right : Address) return Boolean;
+    function "<=" (Left, Right : Address) return Boolean;
+    function ">"  (Left, Right : Address) return Boolean;
+    function ">=" (Left, Right : Address) return Boolean;
+    function "="  (Left, Right : Address) return Boolean;
+ 
+    pragma Import (Intrinsic, "<");
+    pragma Import (Intrinsic, "<=");
+    pragma Import (Intrinsic, ">");
+    pragma Import (Intrinsic, ">=");
+    pragma Import (Intrinsic, "=");
+ 
+    --  Other System-Dependent Declarations
+ 
+    type Bit_Order is (High_Order_First, Low_Order_First);
+    Default_Bit_Order : constant Bit_Order := Low_Order_First;
+ 
+    --  Priority-related Declarations (RM D.1)
+ 
+    Max_Priority           : constant Positive := 30;
+    Max_Interrupt_Priority : constant Positive := 31;
+ 
+    subtype Any_Priority       is Integer      range  0 .. 31;
+    subtype Priority           is Any_Priority range  0 .. 30;
+    subtype Interrupt_Priority is Any_Priority range 31 .. 31;
+ 
+    Default_Priority : constant Priority := 15;
+ 
+ private
+ 
+    type Address is mod Memory_Size;
+    Null_Address : constant Address := 0;
+ 
+    --------------------------------------
+    -- System Implementation Parameters --
+    --------------------------------------
+ 
+    --  These parameters provide information about the target that is used
+    --  by the compiler. They are in the private part of System, where they
+    --  can be accessed using the special circuitry in the Targparm unit
+    --  whose source should be consulted for more detailed descriptions
+    --  of the individual switch values.
+ 
+    AAMP                      : constant Boolean := False;
+    Backend_Divide_Checks     : constant Boolean := False;
+    Backend_Overflow_Checks   : constant Boolean := False;
+    Command_Line_Args         : constant Boolean := True;
+    Configurable_Run_Time     : constant Boolean := False;
+    Denorm                    : constant Boolean := True;
+    Duration_32_Bits          : constant Boolean := False;
+    Exit_Status_Supported     : constant Boolean := True;
+    Fractional_Fixed_Ops      : constant Boolean := False;
+    Frontend_Layout           : constant Boolean := False;
+    Functions_Return_By_DSP   : constant Boolean := False;
+    Machine_Overflows         : constant Boolean := False;
+    Machine_Rounds            : constant Boolean := True;
+    OpenVMS                   : constant Boolean := False;
+    Preallocated_Stacks       : constant Boolean := False;
+    Signed_Zeros              : constant Boolean := True;
+    Stack_Check_Default       : constant Boolean := False;
+    Stack_Check_Probes        : constant Boolean := False;
+    Support_64_Bit_Divides    : constant Boolean := True;
+    Support_Aggregates        : constant Boolean := True;
+    Support_Composite_Assign  : constant Boolean := True;
+    Support_Composite_Compare : constant Boolean := True;
+    Support_Long_Shifts       : constant Boolean := True;
+    Suppress_Standard_Library : constant Boolean := False;
+    Use_Ada_Main_Program_Name : constant Boolean := False;
+    ZCX_By_Default            : constant Boolean := True;
+    GCC_ZCX_Support           : constant Boolean := True;
+    Front_End_ZCX_Support     : constant Boolean := False;
+ 
+    --  Obsolete entries, to be removed eventually (bootstrap issues!)
+ 
+    High_Integrity_Mode       : constant Boolean := False;
+    Long_Shifts_Inlined       : constant Boolean := True;
+ 
+ end System;
diff -Nrcpad gcc-3.4.3/gcc/ada/system-lynxos-ppc.ads gcc-4.0.0/gcc/ada/system-lynxos-ppc.ads
*** gcc-3.4.3/gcc/ada/system-lynxos-ppc.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/system-lynxos-ppc.ads	Mon Oct  4 14:51:16 2004
***************
*** 0 ****
--- 1,151 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --                               S Y S T E M                                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                           (LynxOS PPC Version)                           --
+ --                                                                          --
+ --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package System is
+ pragma Pure (System);
+ --  Note that we take advantage of the implementation permission to
+ --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ 
+    type Name is (SYSTEM_NAME_GNAT);
+    System_Name : constant Name := SYSTEM_NAME_GNAT;
+ 
+    --  System-Dependent Named Numbers
+ 
+    Min_Int               : constant := Long_Long_Integer'First;
+    Max_Int               : constant := Long_Long_Integer'Last;
+ 
+    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
+    Max_Nonbinary_Modulus : constant := Integer'Last;
+ 
+    Max_Base_Digits       : constant := Long_Long_Float'Digits;
+    Max_Digits            : constant := Long_Long_Float'Digits;
+ 
+    Max_Mantissa          : constant := 63;
+    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
+ 
+    Tick                  : constant := 0.01;
+ 
+    --  Storage-related Declarations
+ 
+    type Address is private;
+    Null_Address : constant Address;
+ 
+    Storage_Unit : constant := 8;
+    Word_Size    : constant := 32;
+    Memory_Size  : constant := 2 ** 32;
+ 
+    --  Address comparison
+ 
+    function "<"  (Left, Right : Address) return Boolean;
+    function "<=" (Left, Right : Address) return Boolean;
+    function ">"  (Left, Right : Address) return Boolean;
+    function ">=" (Left, Right : Address) return Boolean;
+    function "="  (Left, Right : Address) return Boolean;
+ 
+    pragma Import (Intrinsic, "<");
+    pragma Import (Intrinsic, "<=");
+    pragma Import (Intrinsic, ">");
+    pragma Import (Intrinsic, ">=");
+    pragma Import (Intrinsic, "=");
+ 
+    --  Other System-Dependent Declarations
+ 
+    type Bit_Order is (High_Order_First, Low_Order_First);
+    Default_Bit_Order : constant Bit_Order := High_Order_First;
+ 
+    --  Priority-related Declarations (RM D.1)
+ 
+    Max_Priority           : constant Positive := 254;
+    Max_Interrupt_Priority : constant Positive := 255;
+ 
+    subtype Any_Priority       is Integer      range   0 .. 255;
+    subtype Priority           is Any_Priority range   0 .. 254;
+    subtype Interrupt_Priority is Any_Priority range 255 .. 255;
+ 
+    Default_Priority : constant Priority := 15;
+ 
+ private
+ 
+    type Address is mod Memory_Size;
+    Null_Address : constant Address := 0;
+ 
+    --------------------------------------
+    -- System Implementation Parameters --
+    --------------------------------------
+ 
+    --  These parameters provide information about the target that is used
+    --  by the compiler. They are in the private part of System, where they
+    --  can be accessed using the special circuitry in the Targparm unit
+    --  whose source should be consulted for more detailed descriptions
+    --  of the individual switch values.
+ 
+    AAMP                      : constant Boolean := False;
+    Backend_Divide_Checks     : constant Boolean := False;
+    Backend_Overflow_Checks   : constant Boolean := False;
+    Command_Line_Args         : constant Boolean := True;
+    Configurable_Run_Time     : constant Boolean := False;
+    Denorm                    : constant Boolean := True;
+    Duration_32_Bits          : constant Boolean := False;
+    Exit_Status_Supported     : constant Boolean := True;
+    Fractional_Fixed_Ops      : constant Boolean := False;
+    Frontend_Layout           : constant Boolean := False;
+    Functions_Return_By_DSP   : constant Boolean := False;
+    Machine_Overflows         : constant Boolean := False;
+    Machine_Rounds            : constant Boolean := True;
+    OpenVMS                   : constant Boolean := False;
+    Preallocated_Stacks       : constant Boolean := False;
+    Signed_Zeros              : constant Boolean := True;
+    Stack_Check_Default       : constant Boolean := False;
+    Stack_Check_Probes        : constant Boolean := False;
+    Support_64_Bit_Divides    : constant Boolean := True;
+    Support_Aggregates        : constant Boolean := True;
+    Support_Composite_Assign  : constant Boolean := True;
+    Support_Composite_Compare : constant Boolean := True;
+    Support_Long_Shifts       : constant Boolean := True;
+    Suppress_Standard_Library : constant Boolean := False;
+    Use_Ada_Main_Program_Name : constant Boolean := False;
+    ZCX_By_Default            : constant Boolean := False;
+    GCC_ZCX_Support           : constant Boolean := False;
+    Front_End_ZCX_Support     : constant Boolean := False;
+ 
+    --  Obsolete entries, to be removed eventually (bootstrap issues!)
+ 
+    High_Integrity_Mode       : constant Boolean := False;
+    Long_Shifts_Inlined       : constant Boolean := True;
+ 
+ end System;
diff -Nrcpad gcc-3.4.3/gcc/ada/system-lynxos-x86.ads gcc-4.0.0/gcc/ada/system-lynxos-x86.ads
*** gcc-3.4.3/gcc/ada/system-lynxos-x86.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/system-lynxos-x86.ads	Mon Oct  4 14:51:16 2004
***************
*** 0 ****
--- 1,151 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --                               S Y S T E M                                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                           (LynxOS x86 Version)                           --
+ --                                                                          --
+ --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package System is
+ pragma Pure (System);
+ --  Note that we take advantage of the implementation permission to
+ --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ 
+    type Name is (SYSTEM_NAME_GNAT);
+    System_Name : constant Name := SYSTEM_NAME_GNAT;
+ 
+    --  System-Dependent Named Numbers
+ 
+    Min_Int               : constant := Long_Long_Integer'First;
+    Max_Int               : constant := Long_Long_Integer'Last;
+ 
+    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
+    Max_Nonbinary_Modulus : constant := Integer'Last;
+ 
+    Max_Base_Digits       : constant := Long_Long_Float'Digits;
+    Max_Digits            : constant := Long_Long_Float'Digits;
+ 
+    Max_Mantissa          : constant := 63;
+    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
+ 
+    Tick                  : constant := 0.01;
+ 
+    --  Storage-related Declarations
+ 
+    type Address is private;
+    Null_Address : constant Address;
+ 
+    Storage_Unit : constant := 8;
+    Word_Size    : constant := 32;
+    Memory_Size  : constant := 2 ** 32;
+ 
+    --  Address comparison
+ 
+    function "<"  (Left, Right : Address) return Boolean;
+    function "<=" (Left, Right : Address) return Boolean;
+    function ">"  (Left, Right : Address) return Boolean;
+    function ">=" (Left, Right : Address) return Boolean;
+    function "="  (Left, Right : Address) return Boolean;
+ 
+    pragma Import (Intrinsic, "<");
+    pragma Import (Intrinsic, "<=");
+    pragma Import (Intrinsic, ">");
+    pragma Import (Intrinsic, ">=");
+    pragma Import (Intrinsic, "=");
+ 
+    --  Other System-Dependent Declarations
+ 
+    type Bit_Order is (High_Order_First, Low_Order_First);
+    Default_Bit_Order : constant Bit_Order := Low_Order_First;
+ 
+    --  Priority-related Declarations (RM D.1)
+ 
+    Max_Priority           : constant Positive := 254;
+    Max_Interrupt_Priority : constant Positive := 255;
+ 
+    subtype Any_Priority       is Integer      range   0 .. 255;
+    subtype Priority           is Any_Priority range   0 .. 254;
+    subtype Interrupt_Priority is Any_Priority range 255 .. 255;
+ 
+    Default_Priority : constant Priority := 15;
+ 
+ private
+ 
+    type Address is mod Memory_Size;
+    Null_Address : constant Address := 0;
+ 
+    --------------------------------------
+    -- System Implementation Parameters --
+    --------------------------------------
+ 
+    --  These parameters provide information about the target that is used
+    --  by the compiler. They are in the private part of System, where they
+    --  can be accessed using the special circuitry in the Targparm unit
+    --  whose source should be consulted for more detailed descriptions
+    --  of the individual switch values.
+ 
+    AAMP                      : constant Boolean := False;
+    Backend_Divide_Checks     : constant Boolean := False;
+    Backend_Overflow_Checks   : constant Boolean := False;
+    Command_Line_Args         : constant Boolean := True;
+    Configurable_Run_Time     : constant Boolean := False;
+    Denorm                    : constant Boolean := True;
+    Duration_32_Bits          : constant Boolean := False;
+    Exit_Status_Supported     : constant Boolean := True;
+    Fractional_Fixed_Ops      : constant Boolean := False;
+    Frontend_Layout           : constant Boolean := False;
+    Functions_Return_By_DSP   : constant Boolean := False;
+    Machine_Overflows         : constant Boolean := False;
+    Machine_Rounds            : constant Boolean := True;
+    OpenVMS                   : constant Boolean := False;
+    Preallocated_Stacks       : constant Boolean := False;
+    Signed_Zeros              : constant Boolean := True;
+    Stack_Check_Default       : constant Boolean := False;
+    Stack_Check_Probes        : constant Boolean := False;
+    Support_64_Bit_Divides    : constant Boolean := True;
+    Support_Aggregates        : constant Boolean := True;
+    Support_Composite_Assign  : constant Boolean := True;
+    Support_Composite_Compare : constant Boolean := True;
+    Support_Long_Shifts       : constant Boolean := True;
+    Suppress_Standard_Library : constant Boolean := False;
+    Use_Ada_Main_Program_Name : constant Boolean := False;
+    ZCX_By_Default            : constant Boolean := False;
+    GCC_ZCX_Support           : constant Boolean := False;
+    Front_End_ZCX_Support     : constant Boolean := False;
+ 
+    --  Obsolete entries, to be removed eventually (bootstrap issues!)
+ 
+    High_Integrity_Mode       : constant Boolean := False;
+    Long_Shifts_Inlined       : constant Boolean := True;
+ 
+ end System;
diff -Nrcpad gcc-3.4.3/gcc/ada/system-mingw.ads gcc-4.0.0/gcc/ada/system-mingw.ads
*** gcc-3.4.3/gcc/ada/system-mingw.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/system-mingw.ads	Mon Oct  4 14:51:16 2004
***************
*** 0 ****
--- 1,209 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --                               S Y S T E M                                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                               (NT Version)                               --
+ --                                                                          --
+ --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package System is
+ pragma Pure (System);
+ --  Note that we take advantage of the implementation permission to
+ --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ 
+    type Name is (SYSTEM_NAME_GNAT);
+    System_Name : constant Name := SYSTEM_NAME_GNAT;
+ 
+    --  System-Dependent Named Numbers
+ 
+    Min_Int               : constant := Long_Long_Integer'First;
+    Max_Int               : constant := Long_Long_Integer'Last;
+ 
+    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
+    Max_Nonbinary_Modulus : constant := Integer'Last;
+ 
+    Max_Base_Digits       : constant := Long_Long_Float'Digits;
+    Max_Digits            : constant := Long_Long_Float'Digits;
+ 
+    Max_Mantissa          : constant := 63;
+    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
+ 
+    Tick                  : constant := 0.01;
+ 
+    --  Storage-related Declarations
+ 
+    type Address is private;
+    Null_Address : constant Address;
+ 
+    Storage_Unit : constant := 8;
+    Word_Size    : constant := 32;
+    Memory_Size  : constant := 2 ** 32;
+ 
+    --  Address comparison
+ 
+    function "<"  (Left, Right : Address) return Boolean;
+    function "<=" (Left, Right : Address) return Boolean;
+    function ">"  (Left, Right : Address) return Boolean;
+    function ">=" (Left, Right : Address) return Boolean;
+    function "="  (Left, Right : Address) return Boolean;
+ 
+    pragma Import (Intrinsic, "<");
+    pragma Import (Intrinsic, "<=");
+    pragma Import (Intrinsic, ">");
+    pragma Import (Intrinsic, ">=");
+    pragma Import (Intrinsic, "=");
+ 
+    --  Other System-Dependent Declarations
+ 
+    type Bit_Order is (High_Order_First, Low_Order_First);
+    Default_Bit_Order : constant Bit_Order := Low_Order_First;
+ 
+    --  Priority-related Declarations (RM D.1)
+ 
+    Max_Priority           : constant Positive := 30;
+    Max_Interrupt_Priority : constant Positive := 31;
+ 
+    subtype Any_Priority       is Integer      range  0 .. 31;
+    subtype Priority           is Any_Priority range  0 .. 30;
+    subtype Interrupt_Priority is Any_Priority range 31 .. 31;
+ 
+    Default_Priority : constant Priority := 15;
+ 
+ private
+ 
+    type Address is mod Memory_Size;
+    Null_Address : constant Address := 0;
+ 
+    --------------------------------------
+    -- System Implementation Parameters --
+    --------------------------------------
+ 
+    --  These parameters provide information about the target that is used
+    --  by the compiler. They are in the private part of System, where they
+    --  can be accessed using the special circuitry in the Targparm unit
+    --  whose source should be consulted for more detailed descriptions
+    --  of the individual switch values.
+ 
+    AAMP                      : constant Boolean := False;
+    Backend_Divide_Checks     : constant Boolean := False;
+    Backend_Overflow_Checks   : constant Boolean := False;
+    Command_Line_Args         : constant Boolean := True;
+    Configurable_Run_Time     : constant Boolean := False;
+    Denorm                    : constant Boolean := True;
+    Duration_32_Bits          : constant Boolean := False;
+    Exit_Status_Supported     : constant Boolean := True;
+    Fractional_Fixed_Ops      : constant Boolean := False;
+    Frontend_Layout           : constant Boolean := False;
+    Functions_Return_By_DSP   : constant Boolean := False;
+    Machine_Overflows         : constant Boolean := False;
+    Machine_Rounds            : constant Boolean := True;
+    OpenVMS                   : constant Boolean := False;
+    Preallocated_Stacks       : constant Boolean := False;
+    Signed_Zeros              : constant Boolean := True;
+    Stack_Check_Default       : constant Boolean := False;
+    Stack_Check_Probes        : constant Boolean := False;
+    Support_64_Bit_Divides    : constant Boolean := True;
+    Support_Aggregates        : constant Boolean := True;
+    Support_Composite_Assign  : constant Boolean := True;
+    Support_Composite_Compare : constant Boolean := True;
+    Support_Long_Shifts       : constant Boolean := True;
+    Suppress_Standard_Library : constant Boolean := False;
+    Use_Ada_Main_Program_Name : constant Boolean := False;
+    ZCX_By_Default            : constant Boolean := False;
+    GCC_ZCX_Support           : constant Boolean := True;
+    Front_End_ZCX_Support     : constant Boolean := False;
+ 
+    --  Obsolete entries, to be removed eventually (bootstrap issues!)
+ 
+    High_Integrity_Mode       : constant Boolean := False;
+    Long_Shifts_Inlined       : constant Boolean := False;
+ 
+    ---------------------------
+    -- Underlying Priorities --
+    ---------------------------
+ 
+    --  Important note: this section of the file must come AFTER the
+    --  definition of the system implementation parameters to ensure
+    --  that the value of these parameters is available for analysis
+    --  of the declarations here (using Rtsfind at compile time).
+ 
+    --  The underlying priorities table provides a generalized mechanism
+    --  for mapping from Ada priorities to system priorities. In some
+    --  cases a 1-1 mapping is not the convenient or optimal choice.
+ 
+    type Priorities_Mapping is array (Any_Priority) of Integer;
+    pragma Suppress_Initialization (Priorities_Mapping);
+    --  Suppress initialization in case gnat.adc specifies Normalize_Scalars
+ 
+    --  On NT, the default mapping preserves the standard 31 priorities
+    --  of the Ada model, but maps them using compression onto the 7
+    --  priority levels available in NT.
+ 
+    --  To replace the default values of the Underlying_Priorities mapping,
+    --  copy this source file into your build directory, edit the file to
+    --  reflect your desired behavior, and recompile with the command:
+ 
+    --     $ gcc -c -O3 -gnatpgn system.ads
+ 
+    --  then recompile the run-time parts that depend on this package:
+ 
+    --     $ gnatmake -a -gnatn -O3 <your application>
+ 
+    --  then force rebuilding your application if you need different options:
+ 
+    --     $ gnatmake -f <your options> <your application>
+ 
+    Underlying_Priorities : constant Priorities_Mapping :=
+ 
+      (Priority'First .. 1        => -15,
+ 
+       2 .. Default_Priority - 2  => -2,
+ 
+       Default_Priority - 1       => -1,
+ 
+       Default_Priority           => 0,
+ 
+       Default_Priority + 1 .. 19 => 1,
+ 
+       20 .. Priority'Last        => 2,
+ 
+       Interrupt_Priority         => 15);
+ 
+    pragma Linker_Options ("-Wl,--stack=0x2000000");
+    --  This is used to change the default stack (32 MB) size for non tasking
+    --  programs. We change this value for GNAT on Windows here because the
+    --  binutils on this platform have switched to a too low value for Ada
+    --  programs. Note that we also set the stack size for tasking programs in
+    --  System.Task_Primitives.Operations.
+ 
+ end System;
diff -Nrcpad gcc-3.4.3/gcc/ada/system-os2.ads gcc-4.0.0/gcc/ada/system-os2.ads
*** gcc-3.4.3/gcc/ada/system-os2.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/system-os2.ads	Mon Oct  4 14:51:16 2004
***************
*** 0 ****
--- 1,151 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --                               S Y S T E M                                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                             (OS/2 Version)                               --
+ --                                                                          --
+ --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package System is
+ pragma Pure (System);
+ --  Note that we take advantage of the implementation permission to
+ --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ 
+    type Name is (SYSTEM_NAME_GNAT);
+    System_Name : constant Name := SYSTEM_NAME_GNAT;
+ 
+    --  System-Dependent Named Numbers
+ 
+    Min_Int               : constant := Long_Long_Integer'First;
+    Max_Int               : constant := Long_Long_Integer'Last;
+ 
+    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
+    Max_Nonbinary_Modulus : constant := Integer'Last;
+ 
+    Max_Base_Digits       : constant := Long_Long_Float'Digits;
+    Max_Digits            : constant := Long_Long_Float'Digits;
+ 
+    Max_Mantissa          : constant := 63;
+    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
+ 
+    Tick                  : constant := 0.01;
+ 
+    --  Storage-related Declarations
+ 
+    type Address is private;
+    Null_Address : constant Address;
+ 
+    Storage_Unit : constant := 8;
+    Word_Size    : constant := 32;
+    Memory_Size  : constant := 2 ** 32;
+ 
+    --  Address comparison
+ 
+    function "<"  (Left, Right : Address) return Boolean;
+    function "<=" (Left, Right : Address) return Boolean;
+    function ">"  (Left, Right : Address) return Boolean;
+    function ">=" (Left, Right : Address) return Boolean;
+    function "="  (Left, Right : Address) return Boolean;
+ 
+    pragma Import (Intrinsic, "<");
+    pragma Import (Intrinsic, "<=");
+    pragma Import (Intrinsic, ">");
+    pragma Import (Intrinsic, ">=");
+    pragma Import (Intrinsic, "=");
+ 
+    --  Other System-Dependent Declarations
+ 
+    type Bit_Order is (High_Order_First, Low_Order_First);
+    Default_Bit_Order : constant Bit_Order := Low_Order_First;
+ 
+    --  Priority-related Declarations (RM D.1)
+ 
+    Max_Priority           : constant Positive := 30;
+    Max_Interrupt_Priority : constant Positive := 31;
+ 
+    subtype Any_Priority       is Integer      range  0 .. 31;
+    subtype Priority           is Any_Priority range  0 .. 30;
+    subtype Interrupt_Priority is Any_Priority range 31 .. 31;
+ 
+    Default_Priority : constant Priority := 15;
+ 
+ private
+ 
+    type Address is mod Memory_Size;
+    Null_Address : constant Address := 0;
+ 
+    --------------------------------------
+    -- System Implementation Parameters --
+    --------------------------------------
+ 
+    --  These parameters provide information about the target that is used
+    --  by the compiler. They are in the private part of System, where they
+    --  can be accessed using the special circuitry in the Targparm unit
+    --  whose source should be consulted for more detailed descriptions
+    --  of the individual switch values.
+ 
+    AAMP                      : constant Boolean := False;
+    Backend_Divide_Checks     : constant Boolean := False;
+    Backend_Overflow_Checks   : constant Boolean := False;
+    Command_Line_Args         : constant Boolean := True;
+    Configurable_Run_Time     : constant Boolean := False;
+    Denorm                    : constant Boolean := True;
+    Duration_32_Bits          : constant Boolean := False;
+    Exit_Status_Supported     : constant Boolean := True;
+    Fractional_Fixed_Ops      : constant Boolean := False;
+    Frontend_Layout           : constant Boolean := False;
+    Functions_Return_By_DSP   : constant Boolean := False;
+    Machine_Overflows         : constant Boolean := False;
+    Machine_Rounds            : constant Boolean := True;
+    OpenVMS                   : constant Boolean := False;
+    Preallocated_Stacks       : constant Boolean := False;
+    Signed_Zeros              : constant Boolean := True;
+    Stack_Check_Default       : constant Boolean := False;
+    Stack_Check_Probes        : constant Boolean := False;
+    Support_64_Bit_Divides    : constant Boolean := True;
+    Support_Aggregates        : constant Boolean := True;
+    Support_Composite_Assign  : constant Boolean := True;
+    Support_Composite_Compare : constant Boolean := True;
+    Support_Long_Shifts       : constant Boolean := True;
+    Suppress_Standard_Library : constant Boolean := False;
+    Use_Ada_Main_Program_Name : constant Boolean := False;
+    ZCX_By_Default            : constant Boolean := False;
+    GCC_ZCX_Support           : constant Boolean := False;
+    Front_End_ZCX_Support     : constant Boolean := True;
+ 
+    --  Obsolete entries, to be removed eventually (bootstrap issues!)
+ 
+    High_Integrity_Mode       : constant Boolean := False;
+    Long_Shifts_Inlined       : constant Boolean := True;
+ 
+ end System;
diff -Nrcpad gcc-3.4.3/gcc/ada/system-solaris-sparc.ads gcc-4.0.0/gcc/ada/system-solaris-sparc.ads
*** gcc-3.4.3/gcc/ada/system-solaris-sparc.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/system-solaris-sparc.ads	Mon Oct  4 14:51:16 2004
***************
*** 0 ****
--- 1,151 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --                               S Y S T E M                                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                          (SUN Solaris Version)                           --
+ --                                                                          --
+ --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package System is
+ pragma Pure (System);
+ --  Note that we take advantage of the implementation permission to
+ --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ 
+    type Name is (SYSTEM_NAME_GNAT);
+    System_Name : constant Name := SYSTEM_NAME_GNAT;
+ 
+    --  System-Dependent Named Numbers
+ 
+    Min_Int               : constant := Long_Long_Integer'First;
+    Max_Int               : constant := Long_Long_Integer'Last;
+ 
+    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
+    Max_Nonbinary_Modulus : constant := Integer'Last;
+ 
+    Max_Base_Digits       : constant := Long_Long_Float'Digits;
+    Max_Digits            : constant := Long_Long_Float'Digits;
+ 
+    Max_Mantissa          : constant := 63;
+    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
+ 
+    Tick                  : constant := 0.01;
+ 
+    --  Storage-related Declarations
+ 
+    type Address is private;
+    Null_Address : constant Address;
+ 
+    Storage_Unit : constant := 8;
+    Word_Size    : constant := 32;
+    Memory_Size  : constant := 2 ** 32;
+ 
+    --  Address comparison
+ 
+    function "<"  (Left, Right : Address) return Boolean;
+    function "<=" (Left, Right : Address) return Boolean;
+    function ">"  (Left, Right : Address) return Boolean;
+    function ">=" (Left, Right : Address) return Boolean;
+    function "="  (Left, Right : Address) return Boolean;
+ 
+    pragma Import (Intrinsic, "<");
+    pragma Import (Intrinsic, "<=");
+    pragma Import (Intrinsic, ">");
+    pragma Import (Intrinsic, ">=");
+    pragma Import (Intrinsic, "=");
+ 
+    --  Other System-Dependent Declarations
+ 
+    type Bit_Order is (High_Order_First, Low_Order_First);
+    Default_Bit_Order : constant Bit_Order := High_Order_First;
+ 
+    --  Priority-related Declarations (RM D.1)
+ 
+    Max_Priority           : constant Positive := 30;
+    Max_Interrupt_Priority : constant Positive := 31;
+ 
+    subtype Any_Priority       is Integer      range  0 .. 31;
+    subtype Priority           is Any_Priority range  0 .. 30;
+    subtype Interrupt_Priority is Any_Priority range 31 .. 31;
+ 
+    Default_Priority : constant Priority := 15;
+ 
+ private
+ 
+    type Address is mod Memory_Size;
+    Null_Address : constant Address := 0;
+ 
+    --------------------------------------
+    -- System Implementation Parameters --
+    --------------------------------------
+ 
+    --  These parameters provide information about the target that is used
+    --  by the compiler. They are in the private part of System, where they
+    --  can be accessed using the special circuitry in the Targparm unit
+    --  whose source should be consulted for more detailed descriptions
+    --  of the individual switch values.
+ 
+    AAMP                      : constant Boolean := False;
+    Backend_Divide_Checks     : constant Boolean := False;
+    Backend_Overflow_Checks   : constant Boolean := False;
+    Command_Line_Args         : constant Boolean := True;
+    Configurable_Run_Time     : constant Boolean := False;
+    Denorm                    : constant Boolean := True;
+    Duration_32_Bits          : constant Boolean := False;
+    Exit_Status_Supported     : constant Boolean := True;
+    Fractional_Fixed_Ops      : constant Boolean := False;
+    Frontend_Layout           : constant Boolean := False;
+    Functions_Return_By_DSP   : constant Boolean := False;
+    Machine_Overflows         : constant Boolean := False;
+    Machine_Rounds            : constant Boolean := True;
+    OpenVMS                   : constant Boolean := False;
+    Preallocated_Stacks       : constant Boolean := False;
+    Signed_Zeros              : constant Boolean := True;
+    Stack_Check_Default       : constant Boolean := False;
+    Stack_Check_Probes        : constant Boolean := True;
+    Support_64_Bit_Divides    : constant Boolean := True;
+    Support_Aggregates        : constant Boolean := True;
+    Support_Composite_Assign  : constant Boolean := True;
+    Support_Composite_Compare : constant Boolean := True;
+    Support_Long_Shifts       : constant Boolean := True;
+    Suppress_Standard_Library : constant Boolean := False;
+    Use_Ada_Main_Program_Name : constant Boolean := False;
+    ZCX_By_Default            : constant Boolean := True;
+    GCC_ZCX_Support           : constant Boolean := True;
+    Front_End_ZCX_Support     : constant Boolean := False;
+ 
+    --  Obsolete entries, to be removed eventually (bootstrap issues!)
+ 
+    High_Integrity_Mode       : constant Boolean := False;
+    Long_Shifts_Inlined       : constant Boolean := True;
+ 
+ end System;
diff -Nrcpad gcc-3.4.3/gcc/ada/system-solaris-sparcv9.ads gcc-4.0.0/gcc/ada/system-solaris-sparcv9.ads
*** gcc-3.4.3/gcc/ada/system-solaris-sparcv9.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/system-solaris-sparcv9.ads	Mon Oct  4 14:51:16 2004
***************
*** 0 ****
--- 1,151 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --                               S Y S T E M                                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                        (Solaris Sparcv9 Version)                         --
+ --                                                                          --
+ --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package System is
+ pragma Pure (System);
+ --  Note that we take advantage of the implementation permission to
+ --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ 
+    type Name is (SYSTEM_NAME_GNAT);
+    System_Name : constant Name := SYSTEM_NAME_GNAT;
+ 
+    --  System-Dependent Named Numbers
+ 
+    Min_Int               : constant := Long_Long_Integer'First;
+    Max_Int               : constant := Long_Long_Integer'Last;
+ 
+    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
+    Max_Nonbinary_Modulus : constant := Integer'Last;
+ 
+    Max_Base_Digits       : constant := Long_Long_Float'Digits;
+    Max_Digits            : constant := Long_Long_Float'Digits;
+ 
+    Max_Mantissa          : constant := 63;
+    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
+ 
+    Tick                  : constant := 0.01;
+ 
+    --  Storage-related Declarations
+ 
+    type Address is private;
+    Null_Address : constant Address;
+ 
+    Storage_Unit : constant := 8;
+    Word_Size    : constant := 64;
+    Memory_Size  : constant := 2 ** 64;
+ 
+    --  Address comparison
+ 
+    function "<"  (Left, Right : Address) return Boolean;
+    function "<=" (Left, Right : Address) return Boolean;
+    function ">"  (Left, Right : Address) return Boolean;
+    function ">=" (Left, Right : Address) return Boolean;
+    function "="  (Left, Right : Address) return Boolean;
+ 
+    pragma Import (Intrinsic, "<");
+    pragma Import (Intrinsic, "<=");
+    pragma Import (Intrinsic, ">");
+    pragma Import (Intrinsic, ">=");
+    pragma Import (Intrinsic, "=");
+ 
+    --  Other System-Dependent Declarations
+ 
+    type Bit_Order is (High_Order_First, Low_Order_First);
+    Default_Bit_Order : constant Bit_Order := High_Order_First;
+ 
+    --  Priority-related Declarations (RM D.1)
+ 
+    Max_Priority           : constant Positive := 30;
+    Max_Interrupt_Priority : constant Positive := 31;
+ 
+    subtype Any_Priority       is Integer      range  0 .. 31;
+    subtype Priority           is Any_Priority range  0 .. 30;
+    subtype Interrupt_Priority is Any_Priority range 31 .. 31;
+ 
+    Default_Priority : constant Priority := 15;
+ 
+ private
+ 
+    type Address is mod Memory_Size;
+    Null_Address : constant Address := 0;
+ 
+    --------------------------------------
+    -- System Implementation Parameters --
+    --------------------------------------
+ 
+    --  These parameters provide information about the target that is used
+    --  by the compiler. They are in the private part of System, where they
+    --  can be accessed using the special circuitry in the Targparm unit
+    --  whose source should be consulted for more detailed descriptions
+    --  of the individual switch values.
+ 
+    AAMP                      : constant Boolean := False;
+    Backend_Divide_Checks     : constant Boolean := False;
+    Backend_Overflow_Checks   : constant Boolean := False;
+    Command_Line_Args         : constant Boolean := True;
+    Configurable_Run_Time     : constant Boolean := False;
+    Denorm                    : constant Boolean := True;
+    Duration_32_Bits          : constant Boolean := False;
+    Exit_Status_Supported     : constant Boolean := True;
+    Fractional_Fixed_Ops      : constant Boolean := False;
+    Frontend_Layout           : constant Boolean := False;
+    Functions_Return_By_DSP   : constant Boolean := False;
+    Machine_Overflows         : constant Boolean := False;
+    Machine_Rounds            : constant Boolean := True;
+    OpenVMS                   : constant Boolean := False;
+    Preallocated_Stacks       : constant Boolean := False;
+    Signed_Zeros              : constant Boolean := True;
+    Stack_Check_Default       : constant Boolean := False;
+    Stack_Check_Probes        : constant Boolean := True;
+    Support_64_Bit_Divides    : constant Boolean := True;
+    Support_Aggregates        : constant Boolean := True;
+    Support_Composite_Assign  : constant Boolean := True;
+    Support_Composite_Compare : constant Boolean := True;
+    Support_Long_Shifts       : constant Boolean := True;
+    Suppress_Standard_Library : constant Boolean := False;
+    Use_Ada_Main_Program_Name : constant Boolean := False;
+    ZCX_By_Default            : constant Boolean := True;
+    GCC_ZCX_Support           : constant Boolean := True;
+    Front_End_ZCX_Support     : constant Boolean := False;
+ 
+    --  Obsolete entries, to be removed eventually (bootstrap issues!)
+ 
+    High_Integrity_Mode       : constant Boolean := False;
+    Long_Shifts_Inlined       : constant Boolean := True;
+ 
+ end System;
diff -Nrcpad gcc-3.4.3/gcc/ada/system-solaris-x86.ads gcc-4.0.0/gcc/ada/system-solaris-x86.ads
*** gcc-3.4.3/gcc/ada/system-solaris-x86.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/system-solaris-x86.ads	Mon Oct  4 14:51:16 2004
***************
*** 0 ****
--- 1,151 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --                               S Y S T E M                                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                          (x86 Solaris Version)                           --
+ --                                                                          --
+ --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package System is
+ pragma Pure (System);
+ --  Note that we take advantage of the implementation permission to
+ --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ 
+    type Name is (SYSTEM_NAME_GNAT);
+    System_Name : constant Name := SYSTEM_NAME_GNAT;
+ 
+    --  System-Dependent Named Numbers
+ 
+    Min_Int               : constant := Long_Long_Integer'First;
+    Max_Int               : constant := Long_Long_Integer'Last;
+ 
+    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
+    Max_Nonbinary_Modulus : constant := Integer'Last;
+ 
+    Max_Base_Digits       : constant := Long_Long_Float'Digits;
+    Max_Digits            : constant := Long_Long_Float'Digits;
+ 
+    Max_Mantissa          : constant := 63;
+    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
+ 
+    Tick                  : constant := 0.01;
+ 
+    --  Storage-related Declarations
+ 
+    type Address is private;
+    Null_Address : constant Address;
+ 
+    Storage_Unit : constant := 8;
+    Word_Size    : constant := 32;
+    Memory_Size  : constant := 2 ** 32;
+ 
+    --  Address comparison
+ 
+    function "<"  (Left, Right : Address) return Boolean;
+    function "<=" (Left, Right : Address) return Boolean;
+    function ">"  (Left, Right : Address) return Boolean;
+    function ">=" (Left, Right : Address) return Boolean;
+    function "="  (Left, Right : Address) return Boolean;
+ 
+    pragma Import (Intrinsic, "<");
+    pragma Import (Intrinsic, "<=");
+    pragma Import (Intrinsic, ">");
+    pragma Import (Intrinsic, ">=");
+    pragma Import (Intrinsic, "=");
+ 
+    --  Other System-Dependent Declarations
+ 
+    type Bit_Order is (High_Order_First, Low_Order_First);
+    Default_Bit_Order : constant Bit_Order := Low_Order_First;
+ 
+    --  Priority-related Declarations (RM D.1)
+ 
+    Max_Priority           : constant Positive := 30;
+    Max_Interrupt_Priority : constant Positive := 31;
+ 
+    subtype Any_Priority       is Integer      range  0 .. 31;
+    subtype Priority           is Any_Priority range  0 .. 30;
+    subtype Interrupt_Priority is Any_Priority range 31 .. 31;
+ 
+    Default_Priority : constant Priority := 15;
+ 
+ private
+ 
+    type Address is mod Memory_Size;
+    Null_Address : constant Address := 0;
+ 
+    --------------------------------------
+    -- System Implementation Parameters --
+    --------------------------------------
+ 
+    --  These parameters provide information about the target that is used
+    --  by the compiler. They are in the private part of System, where they
+    --  can be accessed using the special circuitry in the Targparm unit
+    --  whose source should be consulted for more detailed descriptions
+    --  of the individual switch values.
+ 
+    AAMP                      : constant Boolean := False;
+    Backend_Divide_Checks     : constant Boolean := False;
+    Backend_Overflow_Checks   : constant Boolean := False;
+    Command_Line_Args         : constant Boolean := True;
+    Configurable_Run_Time     : constant Boolean := False;
+    Denorm                    : constant Boolean := True;
+    Duration_32_Bits          : constant Boolean := False;
+    Exit_Status_Supported     : constant Boolean := True;
+    Fractional_Fixed_Ops      : constant Boolean := False;
+    Frontend_Layout           : constant Boolean := False;
+    Functions_Return_By_DSP   : constant Boolean := False;
+    Machine_Overflows         : constant Boolean := False;
+    Machine_Rounds            : constant Boolean := True;
+    OpenVMS                   : constant Boolean := False;
+    Preallocated_Stacks       : constant Boolean := False;
+    Signed_Zeros              : constant Boolean := True;
+    Stack_Check_Default       : constant Boolean := False;
+    Stack_Check_Probes        : constant Boolean := True;
+    Support_64_Bit_Divides    : constant Boolean := True;
+    Support_Aggregates        : constant Boolean := True;
+    Support_Composite_Assign  : constant Boolean := True;
+    Support_Composite_Compare : constant Boolean := True;
+    Support_Long_Shifts       : constant Boolean := True;
+    Suppress_Standard_Library : constant Boolean := False;
+    Use_Ada_Main_Program_Name : constant Boolean := False;
+    ZCX_By_Default            : constant Boolean := False;
+    GCC_ZCX_Support           : constant Boolean := False;
+    Front_End_ZCX_Support     : constant Boolean := True;
+ 
+    --  Obsolete entries, to be removed eventually (bootstrap issues!)
+ 
+    High_Integrity_Mode       : constant Boolean := False;
+    Long_Shifts_Inlined       : constant Boolean := True;
+ 
+ end System;
diff -Nrcpad gcc-3.4.3/gcc/ada/system-tru64.ads gcc-4.0.0/gcc/ada/system-tru64.ads
*** gcc-3.4.3/gcc/ada/system-tru64.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/system-tru64.ads	Mon Oct  4 14:51:16 2004
***************
*** 0 ****
--- 1,222 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --                               S Y S T E M                                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                           (DEC Unix Version)                             --
+ --                                                                          --
+ --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package System is
+ pragma Pure (System);
+ --  Note that we take advantage of the implementation permission to
+ --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ 
+    type Name is (SYSTEM_NAME_GNAT);
+    System_Name : constant Name := SYSTEM_NAME_GNAT;
+ 
+    --  System-Dependent Named Numbers
+ 
+    Min_Int               : constant := Long_Long_Integer'First;
+    Max_Int               : constant := Long_Long_Integer'Last;
+ 
+    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
+    Max_Nonbinary_Modulus : constant := Integer'Last;
+ 
+    Max_Base_Digits       : constant := Long_Long_Float'Digits;
+    Max_Digits            : constant := Long_Long_Float'Digits;
+ 
+    Max_Mantissa          : constant := 63;
+    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
+ 
+    Tick                  : constant := 1.0 / 1024.0;
+ 
+    --  Storage-related Declarations
+ 
+    type Address is private;
+    Null_Address : constant Address;
+ 
+    Storage_Unit : constant := 8;
+    Word_Size    : constant := 64;
+    Memory_Size  : constant := 2 ** 64;
+ 
+    --  Address comparison
+ 
+    function "<"  (Left, Right : Address) return Boolean;
+    function "<=" (Left, Right : Address) return Boolean;
+    function ">"  (Left, Right : Address) return Boolean;
+    function ">=" (Left, Right : Address) return Boolean;
+    function "="  (Left, Right : Address) return Boolean;
+ 
+    pragma Import (Intrinsic, "<");
+    pragma Import (Intrinsic, "<=");
+    pragma Import (Intrinsic, ">");
+    pragma Import (Intrinsic, ">=");
+    pragma Import (Intrinsic, "=");
+ 
+    --  Other System-Dependent Declarations
+ 
+    type Bit_Order is (High_Order_First, Low_Order_First);
+    Default_Bit_Order : constant Bit_Order := Low_Order_First;
+ 
+    --  Priority-related Declarations (RM D.1)
+ 
+    Max_Priority           : constant Positive := 60;
+    Max_Interrupt_Priority : constant Positive := 63;
+ 
+    subtype Any_Priority       is Integer      range  0 .. 63;
+    subtype Priority           is Any_Priority range  0 .. 60;
+    subtype Interrupt_Priority is Any_Priority range 61 .. 63;
+ 
+    Default_Priority : constant Priority := 30;
+ 
+ private
+ 
+    type Address is mod Memory_Size;
+    Null_Address : constant Address := 0;
+ 
+    --------------------------------------
+    -- System Implementation Parameters --
+    --------------------------------------
+ 
+    --  These parameters provide information about the target that is used
+    --  by the compiler. They are in the private part of System, where they
+    --  can be accessed using the special circuitry in the Targparm unit
+    --  whose source should be consulted for more detailed descriptions
+    --  of the individual switch values.
+ 
+    AAMP                      : constant Boolean := False;
+    Backend_Divide_Checks     : constant Boolean := False;
+    Backend_Overflow_Checks   : constant Boolean := False;
+    Command_Line_Args         : constant Boolean := True;
+    Configurable_Run_Time     : constant Boolean := False;
+    Denorm                    : constant Boolean := False;
+    Duration_32_Bits          : constant Boolean := False;
+    Exit_Status_Supported     : constant Boolean := True;
+    Fractional_Fixed_Ops      : constant Boolean := False;
+    Frontend_Layout           : constant Boolean := False;
+    Functions_Return_By_DSP   : constant Boolean := False;
+    Machine_Overflows         : constant Boolean := False;
+    Machine_Rounds            : constant Boolean := True;
+    OpenVMS                   : constant Boolean := False;
+    Preallocated_Stacks       : constant Boolean := False;
+    Signed_Zeros              : constant Boolean := True;
+    Stack_Check_Default       : constant Boolean := True;
+    Stack_Check_Probes        : constant Boolean := True;
+    Support_64_Bit_Divides    : constant Boolean := True;
+    Support_Aggregates        : constant Boolean := True;
+    Support_Composite_Assign  : constant Boolean := True;
+    Support_Composite_Compare : constant Boolean := True;
+    Support_Long_Shifts       : constant Boolean := True;
+    Suppress_Standard_Library : constant Boolean := False;
+    Use_Ada_Main_Program_Name : constant Boolean := False;
+    ZCX_By_Default            : constant Boolean := True;
+    GCC_ZCX_Support           : constant Boolean := True;
+    Front_End_ZCX_Support     : constant Boolean := False;
+ 
+    --  Obsolete entries, to be removed eventually (bootstrap issues!)
+ 
+    High_Integrity_Mode       : constant Boolean := False;
+    Long_Shifts_Inlined       : constant Boolean := True;
+ 
+    --  Note: Denorm is False because denormals are only handled properly
+    --  if the -mieee switch is set, and we do not require this usage.
+ 
+    ---------------------------
+    -- Underlying Priorities --
+    ---------------------------
+ 
+    --  Important note: this section of the file must come AFTER the
+    --  definition of the system implementation parameters to ensure
+    --  that the value of these parameters is available for analysis
+    --  of the declarations here (using Rtsfind at compile time).
+ 
+    --  The underlying priorities table provides a generalized mechanism
+    --  for mapping from Ada priorities to system priorities. In some
+    --  cases a 1-1 mapping is not the convenient or optimal choice.
+ 
+    --  For Dec Unix 4.0d, we use a default 1-to-1 mapping that provides
+    --  the full range of 64 priorities available from the operating system.
+ 
+    --  On DU prior to 4.0d, less than 64 priorities are available so there
+    --  are two possibilities:
+ 
+    --    Limit your range of priorities to the range provided by the
+    --    OS (e.g 16 .. 32 on 4.0b)
+ 
+    --    Replace the standard table as described below
+ 
+    --  To replace the default values of the Underlying_Priorities mapping,
+    --  copy this source file into your build directory, edit the file to
+    --  reflect your desired behavior, and recompile with the command:
+ 
+    --     $ gcc -c -O3 -gnatpgn system.ads
+ 
+    --  then recompile the run-time parts that depend on this package:
+ 
+    --     $ gnatmake -a -gnatn -O3 <your application>
+ 
+    --  then force rebuilding your application if you need different options:
+ 
+    --     $ gnatmake -f <your options> <your application>
+ 
+    type Priorities_Mapping is array (Any_Priority) of Integer;
+    pragma Suppress_Initialization (Priorities_Mapping);
+    --  Suppress initialization in case gnat.adc specifies Normalize_Scalars
+ 
+    Underlying_Priorities : constant Priorities_Mapping :=
+ 
+      (Priority'First => 0,
+ 
+        1 =>  1,  2 =>  2,  3 =>  3,  4 =>  4,  5 =>  5,
+        6 =>  6,  7 =>  7,  8 =>  8,  9 =>  9, 10 => 10,
+       11 => 11, 12 => 12, 13 => 13, 14 => 14, 15 => 15,
+       16 => 16, 17 => 17, 18 => 18, 19 => 19, 20 => 20,
+       21 => 21, 22 => 22, 23 => 23, 24 => 24, 25 => 25,
+       26 => 26, 27 => 27, 28 => 28, 29 => 29,
+ 
+       Default_Priority => 30,
+ 
+       31 => 31, 32 => 32, 33 => 33, 34 => 34, 35 => 35,
+       36 => 36, 37 => 37, 38 => 38, 39 => 39, 40 => 40,
+       41 => 41, 42 => 42, 43 => 43, 44 => 44, 45 => 45,
+       46 => 46, 47 => 47, 48 => 48, 49 => 49, 50 => 50,
+       51 => 51, 52 => 52, 53 => 53, 54 => 54, 55 => 55,
+       56 => 56, 57 => 57, 58 => 58, 59 => 59,
+ 
+       Priority'Last => 60,
+ 
+       61 => 61, 62 => 62,
+ 
+       Interrupt_Priority'Last => 63);
+ 
+ end System;
diff -Nrcpad gcc-3.4.3/gcc/ada/system-unixware.ads gcc-4.0.0/gcc/ada/system-unixware.ads
*** gcc-3.4.3/gcc/ada/system-unixware.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/system-unixware.ads	Mon Oct  4 14:51:16 2004
***************
*** 0 ****
--- 1,151 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --                               S Y S T E M                                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                         (SCO UnixWare Version)                           --
+ --                                                                          --
+ --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package System is
+ pragma Pure (System);
+ --  Note that we take advantage of the implementation permission to
+ --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ 
+    type Name is (SYSTEM_NAME_GNAT);
+    System_Name : constant Name := SYSTEM_NAME_GNAT;
+ 
+    --  System-Dependent Named Numbers
+ 
+    Min_Int               : constant := Long_Long_Integer'First;
+    Max_Int               : constant := Long_Long_Integer'Last;
+ 
+    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
+    Max_Nonbinary_Modulus : constant := Integer'Last;
+ 
+    Max_Base_Digits       : constant := Long_Long_Float'Digits;
+    Max_Digits            : constant := Long_Long_Float'Digits;
+ 
+    Max_Mantissa          : constant := 63;
+    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
+ 
+    Tick                  : constant := 0.01;
+ 
+    --  Storage-related Declarations
+ 
+    type Address is private;
+    Null_Address : constant Address;
+ 
+    Storage_Unit : constant := 8;
+    Word_Size    : constant := 32;
+    Memory_Size  : constant := 2 ** 32;
+ 
+    --  Address comparison
+ 
+    function "<"  (Left, Right : Address) return Boolean;
+    function "<=" (Left, Right : Address) return Boolean;
+    function ">"  (Left, Right : Address) return Boolean;
+    function ">=" (Left, Right : Address) return Boolean;
+    function "="  (Left, Right : Address) return Boolean;
+ 
+    pragma Import (Intrinsic, "<");
+    pragma Import (Intrinsic, "<=");
+    pragma Import (Intrinsic, ">");
+    pragma Import (Intrinsic, ">=");
+    pragma Import (Intrinsic, "=");
+ 
+    --  Other System-Dependent Declarations
+ 
+    type Bit_Order is (High_Order_First, Low_Order_First);
+    Default_Bit_Order : constant Bit_Order := Low_Order_First;
+ 
+    --  Priority-related Declarations (RM D.1)
+ 
+    Max_Priority           : constant Positive := 30;
+    Max_Interrupt_Priority : constant Positive := 31;
+ 
+    subtype Any_Priority       is Integer      range  0 .. 31;
+    subtype Priority           is Any_Priority range  0 .. 30;
+    subtype Interrupt_Priority is Any_Priority range 31 .. 31;
+ 
+    Default_Priority : constant Priority := 15;
+ 
+ private
+ 
+    type Address is mod Memory_Size;
+    Null_Address : constant Address := 0;
+ 
+    --------------------------------------
+    -- System Implementation Parameters --
+    --------------------------------------
+ 
+    --  These parameters provide information about the target that is used
+    --  by the compiler. They are in the private part of System, where they
+    --  can be accessed using the special circuitry in the Targparm unit
+    --  whose source should be consulted for more detailed descriptions
+    --  of the individual switch values.
+ 
+    AAMP                      : constant Boolean := False;
+    Backend_Divide_Checks     : constant Boolean := False;
+    Backend_Overflow_Checks   : constant Boolean := False;
+    Command_Line_Args         : constant Boolean := True;
+    Configurable_Run_Time     : constant Boolean := False;
+    Denorm                    : constant Boolean := True;
+    Duration_32_Bits          : constant Boolean := False;
+    Exit_Status_Supported     : constant Boolean := True;
+    Fractional_Fixed_Ops      : constant Boolean := False;
+    Frontend_Layout           : constant Boolean := False;
+    Functions_Return_By_DSP   : constant Boolean := False;
+    Machine_Overflows         : constant Boolean := False;
+    Machine_Rounds            : constant Boolean := True;
+    OpenVMS                   : constant Boolean := False;
+    Preallocated_Stacks       : constant Boolean := False;
+    Signed_Zeros              : constant Boolean := True;
+    Stack_Check_Default       : constant Boolean := False;
+    Stack_Check_Probes        : constant Boolean := False;
+    Support_64_Bit_Divides    : constant Boolean := True;
+    Support_Aggregates        : constant Boolean := True;
+    Support_Composite_Assign  : constant Boolean := True;
+    Support_Composite_Compare : constant Boolean := True;
+    Support_Long_Shifts       : constant Boolean := True;
+    Suppress_Standard_Library : constant Boolean := False;
+    Use_Ada_Main_Program_Name : constant Boolean := False;
+    ZCX_By_Default            : constant Boolean := False;
+    GCC_ZCX_Support           : constant Boolean := False;
+    Front_End_ZCX_Support     : constant Boolean := False;
+ 
+    --  Obsolete entries, to be removed eventually (bootstrap issues!)
+ 
+    High_Integrity_Mode       : constant Boolean := False;
+    Long_Shifts_Inlined       : constant Boolean := True;
+ 
+ end System;
diff -Nrcpad gcc-3.4.3/gcc/ada/system-vms-zcx.ads gcc-4.0.0/gcc/ada/system-vms-zcx.ads
*** gcc-3.4.3/gcc/ada/system-vms-zcx.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/system-vms-zcx.ads	Mon Oct  4 14:51:16 2004
***************
*** 0 ****
--- 1,237 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --                               S Y S T E M                                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                   (OpenVMS GCC_ZCX DEC Threads Version)                  --
+ --                                                                          --
+ --          Copyright (C) 2002-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package System is
+ pragma Pure (System);
+ --  Note that we take advantage of the implementation permission to
+ --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ 
+    type Name is (SYSTEM_NAME_GNAT);
+    System_Name : constant Name := SYSTEM_NAME_GNAT;
+ 
+    --  System-Dependent Named Numbers
+ 
+    Min_Int               : constant := Long_Long_Integer'First;
+    Max_Int               : constant := Long_Long_Integer'Last;
+ 
+    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
+    Max_Nonbinary_Modulus : constant := Integer'Last;
+ 
+    Max_Base_Digits       : constant := Long_Long_Float'Digits;
+    Max_Digits            : constant := Long_Long_Float'Digits;
+ 
+    Max_Mantissa          : constant := 63;
+    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
+ 
+    Tick                  : constant := 0.01;
+ 
+    --  Storage-related Declarations
+ 
+    type Address is private;
+    Null_Address : constant Address;
+ 
+    Storage_Unit : constant := 8;
+    Word_Size    : constant := 32;
+    Memory_Size  : constant := 2 ** 32;
+ 
+    --  Address comparison
+ 
+    function "<"  (Left, Right : Address) return Boolean;
+    function "<=" (Left, Right : Address) return Boolean;
+    function ">"  (Left, Right : Address) return Boolean;
+    function ">=" (Left, Right : Address) return Boolean;
+    function "="  (Left, Right : Address) return Boolean;
+ 
+    pragma Import (Intrinsic, "<");
+    pragma Import (Intrinsic, "<=");
+    pragma Import (Intrinsic, ">");
+    pragma Import (Intrinsic, ">=");
+    pragma Import (Intrinsic, "=");
+ 
+    --  Other System-Dependent Declarations
+ 
+    type Bit_Order is (High_Order_First, Low_Order_First);
+    Default_Bit_Order : constant Bit_Order := Low_Order_First;
+ 
+    --  Priority-related Declarations (RM D.1)
+ 
+    Max_Priority           : constant Positive := 30;
+    Max_Interrupt_Priority : constant Positive := 31;
+ 
+    subtype Any_Priority       is Integer      range  0 .. 31;
+    subtype Priority           is Any_Priority range  0 .. 30;
+    subtype Interrupt_Priority is Any_Priority range 31 .. 31;
+ 
+    Default_Priority : constant Priority := 15;
+ 
+ private
+ 
+    type Address is mod Memory_Size;
+    Null_Address : constant Address := 0;
+ 
+    --------------------------------------
+    -- System Implementation Parameters --
+    --------------------------------------
+ 
+    --  These parameters provide information about the target that is used
+    --  by the compiler. They are in the private part of System, where they
+    --  can be accessed using the special circuitry in the Targparm unit
+    --  whose source should be consulted for more detailed descriptions
+    --  of the individual switch values.
+ 
+    AAMP                      : constant Boolean := False;
+    Backend_Divide_Checks     : constant Boolean := False;
+    Backend_Overflow_Checks   : constant Boolean := False;
+    Command_Line_Args         : constant Boolean := True;
+    Configurable_Run_Time     : constant Boolean := False;
+    Denorm                    : constant Boolean := False;
+    Duration_32_Bits          : constant Boolean := False;
+    Exit_Status_Supported     : constant Boolean := True;
+    Fractional_Fixed_Ops      : constant Boolean := False;
+    Frontend_Layout           : constant Boolean := False;
+    Functions_Return_By_DSP   : constant Boolean := False;
+    Machine_Overflows         : constant Boolean := False;
+    Machine_Rounds            : constant Boolean := True;
+    OpenVMS                   : constant Boolean := True;
+    Preallocated_Stacks       : constant Boolean := False;
+    Signed_Zeros              : constant Boolean := True;
+    Stack_Check_Default       : constant Boolean := True;
+    Stack_Check_Probes        : constant Boolean := True;
+    Support_64_Bit_Divides    : constant Boolean := True;
+    Support_Aggregates        : constant Boolean := True;
+    Support_Composite_Assign  : constant Boolean := True;
+    Support_Composite_Compare : constant Boolean := True;
+    Support_Long_Shifts       : constant Boolean := True;
+    Suppress_Standard_Library : constant Boolean := False;
+    Use_Ada_Main_Program_Name : constant Boolean := False;
+    ZCX_By_Default            : constant Boolean := True;
+    GCC_ZCX_Support           : constant Boolean := True;
+    Front_End_ZCX_Support     : constant Boolean := False;
+ 
+    --  Obsolete entries, to be removed eventually (bootstrap issues!)
+ 
+    High_Integrity_Mode       : constant Boolean := False;
+    Long_Shifts_Inlined       : constant Boolean := False;
+ 
+    --------------------------
+    -- Underlying Priorities --
+    ---------------------------
+ 
+    --  Important note: this section of the file must come AFTER the
+    --  definition of the system implementation parameters to ensure
+    --  that the value of these parameters is available for analysis
+    --  of the declarations here (using Rtsfind at compile time).
+ 
+    --  The underlying priorities table provides a generalized mechanism
+    --  for mapping from Ada priorities to system priorities. In some
+    --  cases a 1-1 mapping is not the convenient or optimal choice.
+ 
+    --  For DEC Threads OpenVMS, we use the full range of 31 priorities
+    --  in the Ada model, but map them by compression onto the more limited
+    --  range of priorities available in OpenVMS.
+ 
+    --  To replace the default values of the Underlying_Priorities mapping,
+    --  copy this source file into your build directory, edit the file to
+    --  reflect your desired behavior, and recompile with the command:
+ 
+    --     $ gcc -c -O3 -gnatpgn system.ads
+ 
+    --  then recompile the run-time parts that depend on this package:
+ 
+    --     $ gnatmake -a -gnatn -O3 <your application>
+ 
+    --  then force rebuilding your application if you need different options:
+ 
+    --     $ gnatmake -f <your options> <your application>
+ 
+    type Priorities_Mapping is array (Any_Priority) of Integer;
+    pragma Suppress_Initialization (Priorities_Mapping);
+    --  Suppress initialization in case gnat.adc specifies Normalize_Scalars
+ 
+    Underlying_Priorities : constant Priorities_Mapping :=
+ 
+      (Priority'First => 16,
+ 
+       1  => 17,
+       2  => 18,
+       3  => 18,
+       4  => 18,
+       5  => 18,
+       6  => 19,
+       7  => 19,
+       8  => 19,
+       9  => 20,
+       10 => 20,
+       11 => 21,
+       12 => 21,
+       13 => 22,
+       14 => 23,
+ 
+       Default_Priority   => 24,
+ 
+       16 => 25,
+       17 => 25,
+       18 => 25,
+       19 => 26,
+       20 => 26,
+       21 => 26,
+       22 => 27,
+       23 => 27,
+       24 => 27,
+       25 => 28,
+       26 => 28,
+       27 => 29,
+       28 => 29,
+       29 => 30,
+ 
+       Priority'Last      => 30,
+ 
+       Interrupt_Priority => 31);
+ 
+    ----------------------------
+    -- Special VMS Interfaces --
+    ----------------------------
+ 
+    procedure Lib_Stop (I : in Integer);
+    pragma Interface (C, Lib_Stop);
+    pragma Import_Procedure (Lib_Stop, "LIB$STOP", Mechanism => (Value));
+    --  Interface to VMS condition handling. Used by RTSfind and pragma
+    --  {Import,Export}_Exception. Put here because this is the only
+    --  VMS specific package that doesn't drag in tasking.
+ 
+ end System;
diff -Nrcpad gcc-3.4.3/gcc/ada/system-vms.ads gcc-4.0.0/gcc/ada/system-vms.ads
*** gcc-3.4.3/gcc/ada/system-vms.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/system-vms.ads	Mon Oct  4 14:51:16 2004
***************
*** 0 ****
--- 1,237 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --                               S Y S T E M                                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                       (OpenVMS DEC Threads Version)                      --
+ --                                                                          --
+ --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package System is
+ pragma Pure (System);
+ --  Note that we take advantage of the implementation permission to
+ --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ 
+    type Name is (SYSTEM_NAME_GNAT);
+    System_Name : constant Name := SYSTEM_NAME_GNAT;
+ 
+    --  System-Dependent Named Numbers
+ 
+    Min_Int               : constant := Long_Long_Integer'First;
+    Max_Int               : constant := Long_Long_Integer'Last;
+ 
+    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
+    Max_Nonbinary_Modulus : constant := Integer'Last;
+ 
+    Max_Base_Digits       : constant := Long_Long_Float'Digits;
+    Max_Digits            : constant := Long_Long_Float'Digits;
+ 
+    Max_Mantissa          : constant := 63;
+    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
+ 
+    Tick                  : constant := 0.01;
+ 
+    --  Storage-related Declarations
+ 
+    type Address is private;
+    Null_Address : constant Address;
+ 
+    Storage_Unit : constant := 8;
+    Word_Size    : constant := 32;
+    Memory_Size  : constant := 2 ** 32;
+ 
+    --  Address comparison
+ 
+    function "<"  (Left, Right : Address) return Boolean;
+    function "<=" (Left, Right : Address) return Boolean;
+    function ">"  (Left, Right : Address) return Boolean;
+    function ">=" (Left, Right : Address) return Boolean;
+    function "="  (Left, Right : Address) return Boolean;
+ 
+    pragma Import (Intrinsic, "<");
+    pragma Import (Intrinsic, "<=");
+    pragma Import (Intrinsic, ">");
+    pragma Import (Intrinsic, ">=");
+    pragma Import (Intrinsic, "=");
+ 
+    --  Other System-Dependent Declarations
+ 
+    type Bit_Order is (High_Order_First, Low_Order_First);
+    Default_Bit_Order : constant Bit_Order := Low_Order_First;
+ 
+    --  Priority-related Declarations (RM D.1)
+ 
+    Max_Priority           : constant Positive := 30;
+    Max_Interrupt_Priority : constant Positive := 31;
+ 
+    subtype Any_Priority       is Integer      range  0 .. 31;
+    subtype Priority           is Any_Priority range  0 .. 30;
+    subtype Interrupt_Priority is Any_Priority range 31 .. 31;
+ 
+    Default_Priority : constant Priority := 15;
+ 
+ private
+ 
+    type Address is mod Memory_Size;
+    Null_Address : constant Address := 0;
+ 
+    --------------------------------------
+    -- System Implementation Parameters --
+    --------------------------------------
+ 
+    --  These parameters provide information about the target that is used
+    --  by the compiler. They are in the private part of System, where they
+    --  can be accessed using the special circuitry in the Targparm unit
+    --  whose source should be consulted for more detailed descriptions
+    --  of the individual switch values.
+ 
+    AAMP                      : constant Boolean := False;
+    Backend_Divide_Checks     : constant Boolean := False;
+    Backend_Overflow_Checks   : constant Boolean := False;
+    Command_Line_Args         : constant Boolean := True;
+    Configurable_Run_Time     : constant Boolean := False;
+    Denorm                    : constant Boolean := False;
+    Duration_32_Bits          : constant Boolean := False;
+    Exit_Status_Supported     : constant Boolean := True;
+    Fractional_Fixed_Ops      : constant Boolean := False;
+    Frontend_Layout           : constant Boolean := False;
+    Functions_Return_By_DSP   : constant Boolean := False;
+    Machine_Overflows         : constant Boolean := False;
+    Machine_Rounds            : constant Boolean := True;
+    OpenVMS                   : constant Boolean := True;
+    Preallocated_Stacks       : constant Boolean := False;
+    Signed_Zeros              : constant Boolean := True;
+    Stack_Check_Default       : constant Boolean := True;
+    Stack_Check_Probes        : constant Boolean := True;
+    Support_64_Bit_Divides    : constant Boolean := True;
+    Support_Aggregates        : constant Boolean := True;
+    Support_Composite_Assign  : constant Boolean := True;
+    Support_Composite_Compare : constant Boolean := True;
+    Support_Long_Shifts       : constant Boolean := True;
+    Suppress_Standard_Library : constant Boolean := False;
+    Use_Ada_Main_Program_Name : constant Boolean := False;
+    ZCX_By_Default            : constant Boolean := True;
+    GCC_ZCX_Support           : constant Boolean := False;
+    Front_End_ZCX_Support     : constant Boolean := True;
+ 
+    --  Obsolete entries, to be removed eventually (bootstrap issues!)
+ 
+    High_Integrity_Mode       : constant Boolean := False;
+    Long_Shifts_Inlined       : constant Boolean := False;
+ 
+    --------------------------
+    -- Underlying Priorities --
+    ---------------------------
+ 
+    --  Important note: this section of the file must come AFTER the
+    --  definition of the system implementation parameters to ensure
+    --  that the value of these parameters is available for analysis
+    --  of the declarations here (using Rtsfind at compile time).
+ 
+    --  The underlying priorities table provides a generalized mechanism
+    --  for mapping from Ada priorities to system priorities. In some
+    --  cases a 1-1 mapping is not the convenient or optimal choice.
+ 
+    --  For DEC Threads OpenVMS, we use the full range of 31 priorities
+    --  in the Ada model, but map them by compression onto the more limited
+    --  range of priorities available in OpenVMS.
+ 
+    --  To replace the default values of the Underlying_Priorities mapping,
+    --  copy this source file into your build directory, edit the file to
+    --  reflect your desired behavior, and recompile with the command:
+ 
+    --     $ gcc -c -O3 -gnatpgn system.ads
+ 
+    --  then recompile the run-time parts that depend on this package:
+ 
+    --     $ gnatmake -a -gnatn -O3 <your application>
+ 
+    --  then force rebuilding your application if you need different options:
+ 
+    --     $ gnatmake -f <your options> <your application>
+ 
+    type Priorities_Mapping is array (Any_Priority) of Integer;
+    pragma Suppress_Initialization (Priorities_Mapping);
+    --  Suppress initialization in case gnat.adc specifies Normalize_Scalars
+ 
+    Underlying_Priorities : constant Priorities_Mapping :=
+ 
+      (Priority'First => 16,
+ 
+       1  => 17,
+       2  => 18,
+       3  => 18,
+       4  => 18,
+       5  => 18,
+       6  => 19,
+       7  => 19,
+       8  => 19,
+       9  => 20,
+       10 => 20,
+       11 => 21,
+       12 => 21,
+       13 => 22,
+       14 => 23,
+ 
+       Default_Priority   => 24,
+ 
+       16 => 25,
+       17 => 25,
+       18 => 25,
+       19 => 26,
+       20 => 26,
+       21 => 26,
+       22 => 27,
+       23 => 27,
+       24 => 27,
+       25 => 28,
+       26 => 28,
+       27 => 29,
+       28 => 29,
+       29 => 30,
+ 
+       Priority'Last      => 30,
+ 
+       Interrupt_Priority => 31);
+ 
+    ----------------------------
+    -- Special VMS Interfaces --
+    ----------------------------
+ 
+    procedure Lib_Stop (I : in Integer);
+    pragma Interface (C, Lib_Stop);
+    pragma Import_Procedure (Lib_Stop, "LIB$STOP", Mechanism => (Value));
+    --  Interface to VMS condition handling. Used by RTSfind and pragma
+    --  {Import,Export}_Exception. Put here because this is the only
+    --  VMS specific package that doesn't drag in tasking.
+ 
+ end System;
diff -Nrcpad gcc-3.4.3/gcc/ada/system-vms_64.ads gcc-4.0.0/gcc/ada/system-vms_64.ads
*** gcc-3.4.3/gcc/ada/system-vms_64.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/system-vms_64.ads	Mon Oct  4 14:51:16 2004
***************
*** 0 ****
--- 1,256 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --                               S Y S T E M                                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                (OpenVMS 64bit GCC_ZCX DEC Threads Version)               --
+ --                                                                          --
+ --             Copyright (C) 2004 Free Software Foundation, Inc.            --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package System is
+ pragma Pure (System);
+ --  Note that we take advantage of the implementation permission to
+ --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ 
+    type Name is (SYSTEM_NAME_GNAT);
+    System_Name : constant Name := SYSTEM_NAME_GNAT;
+ 
+    --  System-Dependent Named Numbers
+ 
+    Min_Int               : constant := Long_Long_Integer'First;
+    Max_Int               : constant := Long_Long_Integer'Last;
+ 
+    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
+    Max_Nonbinary_Modulus : constant := Integer'Last;
+ 
+    Max_Base_Digits       : constant := Long_Long_Float'Digits;
+    Max_Digits            : constant := Long_Long_Float'Digits;
+ 
+    Max_Mantissa          : constant := 63;
+    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
+ 
+    Tick                  : constant := 0.01;
+ 
+    --  Storage-related Declarations
+ 
+    type Address is new Long_Integer;
+    Null_Address : constant Address;
+    --  Although this is declared as an integer type, no arithmetic operations
+    --  are available (see abstract declarations below), and furthermore there
+    --  is special processing in the compiler that prevents the use of integer
+    --  literals with this type (use To_Address to convert integer literals).
+    --
+    --  Conversion to and from Short_Address is however freely permitted, and
+    --  is indeed the reason that Address is declared as an integer type. See
+    --
+ 
+    Storage_Unit : constant := 8;
+    Word_Size    : constant := 64;
+    Memory_Size  : constant := 2 ** 64;
+ 
+    --  Address comparison
+ 
+    function "<"  (Left, Right : Address) return Boolean;
+    function "<=" (Left, Right : Address) return Boolean;
+    function ">"  (Left, Right : Address) return Boolean;
+    function ">=" (Left, Right : Address) return Boolean;
+    function "="  (Left, Right : Address) return Boolean;
+ 
+    pragma Import (Intrinsic, "<");
+    pragma Import (Intrinsic, "<=");
+    pragma Import (Intrinsic, ">");
+    pragma Import (Intrinsic, ">=");
+    pragma Import (Intrinsic, "=");
+ 
+    --  Abstract declarations for arithmetic operations on type address.
+    --  These declarations are needed when Address is non-private. They
+    --  avoid excessive visibility of arithmetic operations on address
+    --  which are typically available elsewhere (e.g. Storage_Elements)
+    --  and which would cause excessive ambiguities in application code.
+ 
+    function "+"   (Left, Right : Address) return Address is abstract;
+    function "-"   (Left, Right : Address) return Address is abstract;
+    function "/"   (Left, Right : Address) return Address is abstract;
+    function "*"   (Left, Right : Address) return Address is abstract;
+    function "mod" (Left, Right : Address) return Address is abstract;
+ 
+    --  Other System-Dependent Declarations
+ 
+    type Bit_Order is (High_Order_First, Low_Order_First);
+    Default_Bit_Order : constant Bit_Order := Low_Order_First;
+ 
+    --  Priority-related Declarations (RM D.1)
+ 
+    Max_Priority           : constant Positive := 30;
+    Max_Interrupt_Priority : constant Positive := 31;
+ 
+    subtype Any_Priority       is Integer      range  0 .. 31;
+    subtype Priority           is Any_Priority range  0 .. 30;
+    subtype Interrupt_Priority is Any_Priority range 31 .. 31;
+ 
+    Default_Priority : constant Priority := 15;
+ 
+ private
+ 
+    Null_Address : constant Address := 0;
+ 
+    --------------------------------------
+    -- System Implementation Parameters --
+    --------------------------------------
+ 
+    --  These parameters provide information about the target that is used
+    --  by the compiler. They are in the private part of System, where they
+    --  can be accessed using the special circuitry in the Targparm unit
+    --  whose source should be consulted for more detailed descriptions
+    --  of the individual switch values.
+ 
+    AAMP                      : constant Boolean := False;
+    Backend_Divide_Checks     : constant Boolean := False;
+    Backend_Overflow_Checks   : constant Boolean := False;
+    Command_Line_Args         : constant Boolean := True;
+    Configurable_Run_Time     : constant Boolean := False;
+    Denorm                    : constant Boolean := False;
+    Duration_32_Bits          : constant Boolean := False;
+    Exit_Status_Supported     : constant Boolean := True;
+    Fractional_Fixed_Ops      : constant Boolean := False;
+    Frontend_Layout           : constant Boolean := False;
+    Functions_Return_By_DSP   : constant Boolean := False;
+    Machine_Overflows         : constant Boolean := False;
+    Machine_Rounds            : constant Boolean := True;
+    OpenVMS                   : constant Boolean := True;
+    Preallocated_Stacks       : constant Boolean := False;
+    Signed_Zeros              : constant Boolean := True;
+    Stack_Check_Default       : constant Boolean := True;
+    Stack_Check_Probes        : constant Boolean := True;
+    Support_64_Bit_Divides    : constant Boolean := True;
+    Support_Aggregates        : constant Boolean := True;
+    Support_Composite_Assign  : constant Boolean := True;
+    Support_Composite_Compare : constant Boolean := True;
+    Support_Long_Shifts       : constant Boolean := True;
+    Suppress_Standard_Library : constant Boolean := False;
+    Use_Ada_Main_Program_Name : constant Boolean := False;
+    ZCX_By_Default            : constant Boolean := True;
+    GCC_ZCX_Support           : constant Boolean := True;
+    Front_End_ZCX_Support     : constant Boolean := False;
+ 
+    --  Obsolete entries, to be removed eventually (bootstrap issues!)
+ 
+    High_Integrity_Mode       : constant Boolean := False;
+    Long_Shifts_Inlined       : constant Boolean := False;
+ 
+    --------------------------
+    -- Underlying Priorities --
+    ---------------------------
+ 
+    --  Important note: this section of the file must come AFTER the
+    --  definition of the system implementation parameters to ensure
+    --  that the value of these parameters is available for analysis
+    --  of the declarations here (using Rtsfind at compile time).
+ 
+    --  The underlying priorities table provides a generalized mechanism
+    --  for mapping from Ada priorities to system priorities. In some
+    --  cases a 1-1 mapping is not the convenient or optimal choice.
+ 
+    --  For DEC Threads OpenVMS, we use the full range of 31 priorities
+    --  in the Ada model, but map them by compression onto the more limited
+    --  range of priorities available in OpenVMS.
+ 
+    --  To replace the default values of the Underlying_Priorities mapping,
+    --  copy this source file into your build directory, edit the file to
+    --  reflect your desired behavior, and recompile with the command:
+ 
+    --     $ gcc -c -O3 -gnatpgn system.ads
+ 
+    --  then recompile the run-time parts that depend on this package:
+ 
+    --     $ gnatmake -a -gnatn -O3 <your application>
+ 
+    --  then force rebuilding your application if you need different options:
+ 
+    --     $ gnatmake -f <your options> <your application>
+ 
+    type Priorities_Mapping is array (Any_Priority) of Integer;
+    pragma Suppress_Initialization (Priorities_Mapping);
+    --  Suppress initialization in case gnat.adc specifies Normalize_Scalars
+ 
+    Underlying_Priorities : constant Priorities_Mapping :=
+ 
+      (Priority'First => 16,
+ 
+       1  => 17,
+       2  => 18,
+       3  => 18,
+       4  => 18,
+       5  => 18,
+       6  => 19,
+       7  => 19,
+       8  => 19,
+       9  => 20,
+       10 => 20,
+       11 => 21,
+       12 => 21,
+       13 => 22,
+       14 => 23,
+ 
+       Default_Priority   => 24,
+ 
+       16 => 25,
+       17 => 25,
+       18 => 25,
+       19 => 26,
+       20 => 26,
+       21 => 26,
+       22 => 27,
+       23 => 27,
+       24 => 27,
+       25 => 28,
+       26 => 28,
+       27 => 29,
+       28 => 29,
+       29 => 30,
+ 
+       Priority'Last      => 30,
+ 
+       Interrupt_Priority => 31);
+ 
+    ----------------------------
+    -- Special VMS Interfaces --
+    ----------------------------
+ 
+    procedure Lib_Stop (I : in Integer);
+    pragma Interface (C, Lib_Stop);
+    pragma Import_Procedure (Lib_Stop, "LIB$STOP", Mechanism => (Value));
+    --  Interface to VMS condition handling. Used by RTSfind and pragma
+    --  {Import,Export}_Exception. Put here because this is the only
+    --  VMS specific package that doesn't drag in tasking.
+ 
+ end System;
diff -Nrcpad gcc-3.4.3/gcc/ada/system-vxworks-alpha.ads gcc-4.0.0/gcc/ada/system-vxworks-alpha.ads
*** gcc-3.4.3/gcc/ada/system-vxworks-alpha.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/system-vxworks-alpha.ads	Mon Oct  4 14:51:16 2004
***************
*** 0 ****
--- 1,159 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --                               S Y S T E M                                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                         (VxWorks Version Alpha)                          --
+ --                                                                          --
+ --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package System is
+ pragma Pure (System);
+ --  Note that we take advantage of the implementation permission to
+ --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ 
+    type Name is (SYSTEM_NAME_GNAT);
+    System_Name : constant Name := SYSTEM_NAME_GNAT;
+ 
+    --  System-Dependent Named Numbers
+ 
+    Min_Int               : constant := Long_Long_Integer'First;
+    Max_Int               : constant := Long_Long_Integer'Last;
+ 
+    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
+    Max_Nonbinary_Modulus : constant := Integer'Last;
+ 
+    Max_Base_Digits       : constant := Long_Long_Float'Digits;
+    Max_Digits            : constant := Long_Long_Float'Digits;
+ 
+    Max_Mantissa          : constant := 63;
+    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
+ 
+    Tick                  : constant := 1.0 / 60.0;
+ 
+    --  Storage-related Declarations
+ 
+    type Address is private;
+    Null_Address : constant Address;
+ 
+    Storage_Unit : constant := 8;
+    Word_Size    : constant := 64;
+    Memory_Size  : constant := 2 ** 64;
+ 
+    --  Address comparison
+ 
+    function "<"  (Left, Right : Address) return Boolean;
+    function "<=" (Left, Right : Address) return Boolean;
+    function ">"  (Left, Right : Address) return Boolean;
+    function ">=" (Left, Right : Address) return Boolean;
+    function "="  (Left, Right : Address) return Boolean;
+ 
+    pragma Import (Intrinsic, "<");
+    pragma Import (Intrinsic, "<=");
+    pragma Import (Intrinsic, ">");
+    pragma Import (Intrinsic, ">=");
+    pragma Import (Intrinsic, "=");
+ 
+    --  Other System-Dependent Declarations
+ 
+    type Bit_Order is (High_Order_First, Low_Order_First);
+    Default_Bit_Order : constant Bit_Order := Low_Order_First;
+ 
+    --  Priority-related Declarations (RM D.1)
+ 
+    --  256        is reserved for the VxWorks kernel
+    --  248 - 255  correspond to hardware interrupt levels 0 .. 7
+    --  247        is a catchall default "interrupt" priority for signals,
+    --             allowing higher priority than normal tasks, but lower than
+    --             hardware priority levels.  Protected Object ceilings can
+    --             override these values.
+    --  246        is used by the Interrupt_Manager task
+ 
+    Max_Priority           : constant Positive := 245;
+    Max_Interrupt_Priority : constant Positive := 255;
+ 
+    subtype Any_Priority       is Integer      range   0 .. 255;
+    subtype Priority           is Any_Priority range   0 .. 245;
+    subtype Interrupt_Priority is Any_Priority range 246 .. 255;
+ 
+    Default_Priority : constant Priority := 122;
+ 
+ private
+ 
+    type Address is mod Memory_Size;
+    Null_Address : constant Address := 0;
+ 
+    --------------------------------------
+    -- System Implementation Parameters --
+    --------------------------------------
+ 
+    --  These parameters provide information about the target that is used
+    --  by the compiler. They are in the private part of System, where they
+    --  can be accessed using the special circuitry in the Targparm unit
+    --  whose source should be consulted for more detailed descriptions
+    --  of the individual switch values.
+ 
+    AAMP                      : constant Boolean := False;
+    Backend_Divide_Checks     : constant Boolean := False;
+    Backend_Overflow_Checks   : constant Boolean := False;
+    Command_Line_Args         : constant Boolean := False;
+    Configurable_Run_Time     : constant Boolean := False;
+    Denorm                    : constant Boolean := False;
+    Duration_32_Bits          : constant Boolean := False;
+    Exit_Status_Supported     : constant Boolean := True;
+    Fractional_Fixed_Ops      : constant Boolean := False;
+    Frontend_Layout           : constant Boolean := False;
+    Functions_Return_By_DSP   : constant Boolean := False;
+    Machine_Overflows         : constant Boolean := False;
+    Machine_Rounds            : constant Boolean := True;
+    OpenVMS                   : constant Boolean := False;
+    Preallocated_Stacks       : constant Boolean := False;
+    Signed_Zeros              : constant Boolean := True;
+    Stack_Check_Default       : constant Boolean := False;
+    Stack_Check_Probes        : constant Boolean := False;
+    Support_64_Bit_Divides    : constant Boolean := True;
+    Support_Aggregates        : constant Boolean := True;
+    Support_Composite_Assign  : constant Boolean := True;
+    Support_Composite_Compare : constant Boolean := True;
+    Support_Long_Shifts       : constant Boolean := True;
+    Suppress_Standard_Library : constant Boolean := False;
+    Use_Ada_Main_Program_Name : constant Boolean := True;
+    ZCX_By_Default            : constant Boolean := False;
+    GCC_ZCX_Support           : constant Boolean := False;
+    Front_End_ZCX_Support     : constant Boolean := False;
+ 
+    --  Obsolete entries, to be removed eventually (bootstrap issues!)
+ 
+    High_Integrity_Mode       : constant Boolean := False;
+    Long_Shifts_Inlined       : constant Boolean := False;
+ 
+ end System;
diff -Nrcpad gcc-3.4.3/gcc/ada/system-vxworks-m68k.ads gcc-4.0.0/gcc/ada/system-vxworks-m68k.ads
*** gcc-3.4.3/gcc/ada/system-vxworks-m68k.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/system-vxworks-m68k.ads	Mon Oct  4 14:51:16 2004
***************
*** 0 ****
--- 1,159 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --                               S Y S T E M                                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                          (VxWorks version M68K)                          --
+ --                                                                          --
+ --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package System is
+ pragma Pure (System);
+ --  Note that we take advantage of the implementation permission to
+ --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ 
+    type Name is (SYSTEM_NAME_GNAT);
+    System_Name : constant Name := SYSTEM_NAME_GNAT;
+ 
+    --  System-Dependent Named Numbers
+ 
+    Min_Int               : constant := Long_Long_Integer'First;
+    Max_Int               : constant := Long_Long_Integer'Last;
+ 
+    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
+    Max_Nonbinary_Modulus : constant := Integer'Last;
+ 
+    Max_Base_Digits       : constant := Long_Long_Float'Digits;
+    Max_Digits            : constant := Long_Long_Float'Digits;
+ 
+    Max_Mantissa          : constant := 63;
+    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
+ 
+    Tick                  : constant := 1.0 / 60.0;
+ 
+    --  Storage-related Declarations
+ 
+    type Address is private;
+    Null_Address : constant Address;
+ 
+    Storage_Unit : constant := 8;
+    Word_Size    : constant := 32;
+    Memory_Size  : constant := 2 ** 32;
+ 
+    --  Address comparison
+ 
+    function "<"  (Left, Right : Address) return Boolean;
+    function "<=" (Left, Right : Address) return Boolean;
+    function ">"  (Left, Right : Address) return Boolean;
+    function ">=" (Left, Right : Address) return Boolean;
+    function "="  (Left, Right : Address) return Boolean;
+ 
+    pragma Import (Intrinsic, "<");
+    pragma Import (Intrinsic, "<=");
+    pragma Import (Intrinsic, ">");
+    pragma Import (Intrinsic, ">=");
+    pragma Import (Intrinsic, "=");
+ 
+    --  Other System-Dependent Declarations
+ 
+    type Bit_Order is (High_Order_First, Low_Order_First);
+    Default_Bit_Order : constant Bit_Order := High_Order_First;
+ 
+    --  Priority-related Declarations (RM D.1)
+ 
+    --  256        is reserved for the VxWorks kernel
+    --  248 - 255  correspond to hardware interrupt levels 0 .. 7
+    --  247        is a catchall default "interrupt" priority for signals,
+    --             allowing higher priority than normal tasks, but lower than
+    --             hardware priority levels.  Protected Object ceilings can
+    --             override these values.
+    --  246        is used by the Interrupt_Manager task
+ 
+    Max_Priority           : constant Positive := 245;
+    Max_Interrupt_Priority : constant Positive := 255;
+ 
+    subtype Any_Priority       is Integer      range   0 .. 255;
+    subtype Priority           is Any_Priority range   0 .. 245;
+    subtype Interrupt_Priority is Any_Priority range 246 .. 255;
+ 
+    Default_Priority : constant Priority := 122;
+ 
+ private
+ 
+    type Address is mod Memory_Size;
+    Null_Address : constant Address := 0;
+ 
+    --------------------------------------
+    -- System Implementation Parameters --
+    --------------------------------------
+ 
+    --  These parameters provide information about the target that is used
+    --  by the compiler. They are in the private part of System, where they
+    --  can be accessed using the special circuitry in the Targparm unit
+    --  whose source should be consulted for more detailed descriptions
+    --  of the individual switch values.
+ 
+    AAMP                      : constant Boolean := False;
+    Backend_Divide_Checks     : constant Boolean := False;
+    Backend_Overflow_Checks   : constant Boolean := False;
+    Command_Line_Args         : constant Boolean := False;
+    Configurable_Run_Time     : constant Boolean := False;
+    Denorm                    : constant Boolean := True;
+    Duration_32_Bits          : constant Boolean := False;
+    Exit_Status_Supported     : constant Boolean := True;
+    Fractional_Fixed_Ops      : constant Boolean := False;
+    Frontend_Layout           : constant Boolean := False;
+    Functions_Return_By_DSP   : constant Boolean := False;
+    Machine_Overflows         : constant Boolean := False;
+    Machine_Rounds            : constant Boolean := True;
+    OpenVMS                   : constant Boolean := False;
+    Preallocated_Stacks       : constant Boolean := False;
+    Signed_Zeros              : constant Boolean := False;
+    Stack_Check_Default       : constant Boolean := False;
+    Stack_Check_Probes        : constant Boolean := False;
+    Support_64_Bit_Divides    : constant Boolean := True;
+    Support_Aggregates        : constant Boolean := True;
+    Support_Composite_Assign  : constant Boolean := True;
+    Support_Composite_Compare : constant Boolean := True;
+    Support_Long_Shifts       : constant Boolean := True;
+    Suppress_Standard_Library : constant Boolean := False;
+    Use_Ada_Main_Program_Name : constant Boolean := True;
+    ZCX_By_Default            : constant Boolean := False;
+    GCC_ZCX_Support           : constant Boolean := False;
+    Front_End_ZCX_Support     : constant Boolean := False;
+ 
+    --  Obsolete entries, to be removed eventually (bootstrap issues!)
+ 
+    High_Integrity_Mode       : constant Boolean := False;
+    Long_Shifts_Inlined       : constant Boolean := False;
+ 
+ end System;
diff -Nrcpad gcc-3.4.3/gcc/ada/system-vxworks-mips.ads gcc-4.0.0/gcc/ada/system-vxworks-mips.ads
*** gcc-3.4.3/gcc/ada/system-vxworks-mips.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/system-vxworks-mips.ads	Mon Oct  4 14:51:16 2004
***************
*** 0 ****
--- 1,159 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --                               S Y S T E M                                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                         (VxWorks Version Mips)                           --
+ --                                                                          --
+ --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package System is
+ pragma Pure (System);
+ --  Note that we take advantage of the implementation permission to
+ --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ 
+    type Name is (SYSTEM_NAME_GNAT);
+    System_Name : constant Name := SYSTEM_NAME_GNAT;
+ 
+    --  System-Dependent Named Numbers
+ 
+    Min_Int               : constant := Long_Long_Integer'First;
+    Max_Int               : constant := Long_Long_Integer'Last;
+ 
+    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
+    Max_Nonbinary_Modulus : constant := Integer'Last;
+ 
+    Max_Base_Digits       : constant := Long_Long_Float'Digits;
+    Max_Digits            : constant := Long_Long_Float'Digits;
+ 
+    Max_Mantissa          : constant := 63;
+    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
+ 
+    Tick                  : constant := 1.0 / 60.0;
+ 
+    --  Storage-related Declarations
+ 
+    type Address is private;
+    Null_Address : constant Address;
+ 
+    Storage_Unit : constant := 8;
+    Word_Size    : constant := 32;
+    Memory_Size  : constant := 2 ** 32;
+ 
+    --  Address comparison
+ 
+    function "<"  (Left, Right : Address) return Boolean;
+    function "<=" (Left, Right : Address) return Boolean;
+    function ">"  (Left, Right : Address) return Boolean;
+    function ">=" (Left, Right : Address) return Boolean;
+    function "="  (Left, Right : Address) return Boolean;
+ 
+    pragma Import (Intrinsic, "<");
+    pragma Import (Intrinsic, "<=");
+    pragma Import (Intrinsic, ">");
+    pragma Import (Intrinsic, ">=");
+    pragma Import (Intrinsic, "=");
+ 
+    --  Other System-Dependent Declarations
+ 
+    type Bit_Order is (High_Order_First, Low_Order_First);
+    Default_Bit_Order : constant Bit_Order := High_Order_First;
+ 
+    --  Priority-related Declarations (RM D.1)
+ 
+    --  256        is reserved for the VxWorks kernel
+    --  248 - 255  correspond to hardware interrupt levels 0 .. 7
+    --  247        is a catchall default "interrupt" priority for signals,
+    --             allowing higher priority than normal tasks, but lower than
+    --             hardware priority levels.  Protected Object ceilings can
+    --             override these values.
+    --  246        is used by the Interrupt_Manager task
+ 
+    Max_Priority           : constant Positive := 245;
+    Max_Interrupt_Priority : constant Positive := 255;
+ 
+    subtype Any_Priority       is Integer      range   0 .. 255;
+    subtype Priority           is Any_Priority range   0 .. 245;
+    subtype Interrupt_Priority is Any_Priority range 246 .. 255;
+ 
+    Default_Priority : constant Priority := 122;
+ 
+ private
+ 
+    type Address is mod Memory_Size;
+    Null_Address : constant Address := 0;
+ 
+    --------------------------------------
+    -- System Implementation Parameters --
+    --------------------------------------
+ 
+    --  These parameters provide information about the target that is used
+    --  by the compiler. They are in the private part of System, where they
+    --  can be accessed using the special circuitry in the Targparm unit
+    --  whose source should be consulted for more detailed descriptions
+    --  of the individual switch values.
+ 
+    AAMP                      : constant Boolean := False;
+    Backend_Divide_Checks     : constant Boolean := False;
+    Backend_Overflow_Checks   : constant Boolean := False;
+    Command_Line_Args         : constant Boolean := False;
+    Configurable_Run_Time     : constant Boolean := False;
+    Denorm                    : constant Boolean := False;
+    Duration_32_Bits          : constant Boolean := False;
+    Exit_Status_Supported     : constant Boolean := True;
+    Fractional_Fixed_Ops      : constant Boolean := False;
+    Frontend_Layout           : constant Boolean := False;
+    Functions_Return_By_DSP   : constant Boolean := False;
+    Machine_Overflows         : constant Boolean := False;
+    Machine_Rounds            : constant Boolean := True;
+    OpenVMS                   : constant Boolean := False;
+    Preallocated_Stacks       : constant Boolean := False;
+    Signed_Zeros              : constant Boolean := True;
+    Stack_Check_Default       : constant Boolean := False;
+    Stack_Check_Probes        : constant Boolean := False;
+    Support_64_Bit_Divides    : constant Boolean := True;
+    Support_Aggregates        : constant Boolean := True;
+    Support_Composite_Assign  : constant Boolean := True;
+    Support_Composite_Compare : constant Boolean := True;
+    Support_Long_Shifts       : constant Boolean := True;
+    Suppress_Standard_Library : constant Boolean := False;
+    Use_Ada_Main_Program_Name : constant Boolean := True;
+    ZCX_By_Default            : constant Boolean := False;
+    GCC_ZCX_Support           : constant Boolean := False;
+    Front_End_ZCX_Support     : constant Boolean := False;
+ 
+    --  Obsolete entries, to be removed eventually (bootstrap issues!)
+ 
+    High_Integrity_Mode       : constant Boolean := False;
+    Long_Shifts_Inlined       : constant Boolean := False;
+ 
+ end System;
diff -Nrcpad gcc-3.4.3/gcc/ada/system-vxworks-ppc.ads gcc-4.0.0/gcc/ada/system-vxworks-ppc.ads
*** gcc-3.4.3/gcc/ada/system-vxworks-ppc.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/system-vxworks-ppc.ads	Mon Oct  4 14:51:16 2004
***************
*** 0 ****
--- 1,159 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --                               S Y S T E M                                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                          (VxWorks Version PPC)                           --
+ --                                                                          --
+ --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package System is
+ pragma Pure (System);
+ --  Note that we take advantage of the implementation permission to
+ --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ 
+    type Name is (SYSTEM_NAME_GNAT);
+    System_Name : constant Name := SYSTEM_NAME_GNAT;
+ 
+    --  System-Dependent Named Numbers
+ 
+    Min_Int               : constant := Long_Long_Integer'First;
+    Max_Int               : constant := Long_Long_Integer'Last;
+ 
+    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
+    Max_Nonbinary_Modulus : constant := Integer'Last;
+ 
+    Max_Base_Digits       : constant := Long_Long_Float'Digits;
+    Max_Digits            : constant := Long_Long_Float'Digits;
+ 
+    Max_Mantissa          : constant := 63;
+    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
+ 
+    Tick                  : constant := 1.0 / 60.0;
+ 
+    --  Storage-related Declarations
+ 
+    type Address is private;
+    Null_Address : constant Address;
+ 
+    Storage_Unit : constant := 8;
+    Word_Size    : constant := 32;
+    Memory_Size  : constant := 2 ** 32;
+ 
+    --  Address comparison
+ 
+    function "<"  (Left, Right : Address) return Boolean;
+    function "<=" (Left, Right : Address) return Boolean;
+    function ">"  (Left, Right : Address) return Boolean;
+    function ">=" (Left, Right : Address) return Boolean;
+    function "="  (Left, Right : Address) return Boolean;
+ 
+    pragma Import (Intrinsic, "<");
+    pragma Import (Intrinsic, "<=");
+    pragma Import (Intrinsic, ">");
+    pragma Import (Intrinsic, ">=");
+    pragma Import (Intrinsic, "=");
+ 
+    --  Other System-Dependent Declarations
+ 
+    type Bit_Order is (High_Order_First, Low_Order_First);
+    Default_Bit_Order : constant Bit_Order := High_Order_First;
+ 
+    --  Priority-related Declarations (RM D.1)
+ 
+    --  256        is reserved for the VxWorks kernel
+    --  248 - 255  correspond to hardware interrupt levels 0 .. 7
+    --  247        is a catchall default "interrupt" priority for signals,
+    --             allowing higher priority than normal tasks, but lower than
+    --             hardware priority levels.  Protected Object ceilings can
+    --             override these values.
+    --  246        is used by the Interrupt_Manager task
+ 
+    Max_Priority           : constant Positive := 245;
+    Max_Interrupt_Priority : constant Positive := 255;
+ 
+    subtype Any_Priority       is Integer      range   0 .. 255;
+    subtype Priority           is Any_Priority range   0 .. 245;
+    subtype Interrupt_Priority is Any_Priority range 246 .. 255;
+ 
+    Default_Priority : constant Priority := 122;
+ 
+ private
+ 
+    type Address is mod Memory_Size;
+    Null_Address : constant Address := 0;
+ 
+    --------------------------------------
+    -- System Implementation Parameters --
+    --------------------------------------
+ 
+    --  These parameters provide information about the target that is used
+    --  by the compiler. They are in the private part of System, where they
+    --  can be accessed using the special circuitry in the Targparm unit
+    --  whose source should be consulted for more detailed descriptions
+    --  of the individual switch values.
+ 
+    AAMP                      : constant Boolean := False;
+    Backend_Divide_Checks     : constant Boolean := False;
+    Backend_Overflow_Checks   : constant Boolean := False;
+    Command_Line_Args         : constant Boolean := False;
+    Configurable_Run_Time     : constant Boolean := False;
+    Denorm                    : constant Boolean := True;
+    Duration_32_Bits          : constant Boolean := False;
+    Exit_Status_Supported     : constant Boolean := True;
+    Fractional_Fixed_Ops      : constant Boolean := False;
+    Frontend_Layout           : constant Boolean := False;
+    Functions_Return_By_DSP   : constant Boolean := False;
+    Machine_Overflows         : constant Boolean := False;
+    Machine_Rounds            : constant Boolean := True;
+    OpenVMS                   : constant Boolean := False;
+    Preallocated_Stacks       : constant Boolean := False;
+    Signed_Zeros              : constant Boolean := True;
+    Stack_Check_Default       : constant Boolean := False;
+    Stack_Check_Probes        : constant Boolean := False;
+    Support_64_Bit_Divides    : constant Boolean := True;
+    Support_Aggregates        : constant Boolean := True;
+    Support_Composite_Assign  : constant Boolean := True;
+    Support_Composite_Compare : constant Boolean := True;
+    Support_Long_Shifts       : constant Boolean := True;
+    Suppress_Standard_Library : constant Boolean := False;
+    Use_Ada_Main_Program_Name : constant Boolean := True;
+    ZCX_By_Default            : constant Boolean := False;
+    GCC_ZCX_Support           : constant Boolean := True;
+    Front_End_ZCX_Support     : constant Boolean := False;
+ 
+    --  Obsolete entries, to be removed eventually (bootstrap issues!)
+ 
+    High_Integrity_Mode       : constant Boolean := False;
+    Long_Shifts_Inlined       : constant Boolean := False;
+ 
+ end System;
diff -Nrcpad gcc-3.4.3/gcc/ada/system-vxworks-sparcv9.ads gcc-4.0.0/gcc/ada/system-vxworks-sparcv9.ads
*** gcc-3.4.3/gcc/ada/system-vxworks-sparcv9.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/system-vxworks-sparcv9.ads	Mon Oct  4 14:51:16 2004
***************
*** 0 ****
--- 1,161 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --                               S Y S T E M                                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                       (VxWorks Version Sparc/64)                         --
+ --                                                                          --
+ --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package System is
+ pragma Pure (System);
+ --  Note that we take advantage of the implementation permission to
+ --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ 
+    type Name is (SYSTEM_NAME_GNAT);
+    System_Name : constant Name := SYSTEM_NAME_GNAT;
+ 
+    --  System-Dependent Named Numbers
+ 
+    Min_Int               : constant := Long_Long_Integer'First;
+    Max_Int               : constant := Long_Long_Integer'Last;
+ 
+    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
+    Max_Nonbinary_Modulus : constant := Integer'Last;
+ 
+    Max_Base_Digits       : constant := Long_Long_Float'Digits;
+    Max_Digits            : constant := Long_Long_Float'Digits;
+ 
+    Max_Mantissa          : constant := 63;
+    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
+ 
+    Tick                  : constant := 1.0 / 60.0;
+ 
+    --  Storage-related Declarations
+ 
+    --  VxWorks for UltraSparc uses 64bit words but 32bit pointers
+ 
+    type Address is private;
+    Null_Address : constant Address;
+ 
+    Storage_Unit : constant := 8;
+    Word_Size    : constant := 64;
+    Memory_Size  : constant := 2 ** 32;
+ 
+    --  Address comparison
+ 
+    function "<"  (Left, Right : Address) return Boolean;
+    function "<=" (Left, Right : Address) return Boolean;
+    function ">"  (Left, Right : Address) return Boolean;
+    function ">=" (Left, Right : Address) return Boolean;
+    function "="  (Left, Right : Address) return Boolean;
+ 
+    pragma Import (Intrinsic, "<");
+    pragma Import (Intrinsic, "<=");
+    pragma Import (Intrinsic, ">");
+    pragma Import (Intrinsic, ">=");
+    pragma Import (Intrinsic, "=");
+ 
+    --  Other System-Dependent Declarations
+ 
+    type Bit_Order is (High_Order_First, Low_Order_First);
+    Default_Bit_Order : constant Bit_Order := High_Order_First;
+ 
+    --  Priority-related Declarations (RM D.1)
+ 
+    --  256        is reserved for the VxWorks kernel
+    --  248 - 255  correspond to hardware interrupt levels 0 .. 7
+    --  247        is a catchall default "interrupt" priority for signals,
+    --             allowing higher priority than normal tasks, but lower than
+    --             hardware priority levels.  Protected Object ceilings can
+    --             override these values.
+    --  246        is used by the Interrupt_Manager task
+ 
+    Max_Priority           : constant Positive := 245;
+    Max_Interrupt_Priority : constant Positive := 255;
+ 
+    subtype Any_Priority       is Integer      range   0 .. 255;
+    subtype Priority           is Any_Priority range   0 .. 245;
+    subtype Interrupt_Priority is Any_Priority range 246 .. 255;
+ 
+    Default_Priority : constant Priority := 122;
+ 
+ private
+ 
+    type Address is mod Memory_Size;
+    Null_Address : constant Address := 0;
+ 
+    --------------------------------------
+    -- System Implementation Parameters --
+    --------------------------------------
+ 
+    --  These parameters provide information about the target that is used
+    --  by the compiler. They are in the private part of System, where they
+    --  can be accessed using the special circuitry in the Targparm unit
+    --  whose source should be consulted for more detailed descriptions
+    --  of the individual switch values.
+ 
+    AAMP                      : constant Boolean := False;
+    Backend_Divide_Checks     : constant Boolean := False;
+    Backend_Overflow_Checks   : constant Boolean := False;
+    Command_Line_Args         : constant Boolean := False;
+    Configurable_Run_Time     : constant Boolean := False;
+    Denorm                    : constant Boolean := True;
+    Duration_32_Bits          : constant Boolean := False;
+    Exit_Status_Supported     : constant Boolean := True;
+    Fractional_Fixed_Ops      : constant Boolean := False;
+    Frontend_Layout           : constant Boolean := False;
+    Functions_Return_By_DSP   : constant Boolean := False;
+    Machine_Overflows         : constant Boolean := False;
+    Machine_Rounds            : constant Boolean := True;
+    OpenVMS                   : constant Boolean := False;
+    Preallocated_Stacks       : constant Boolean := False;
+    Signed_Zeros              : constant Boolean := True;
+    Stack_Check_Default       : constant Boolean := False;
+    Stack_Check_Probes        : constant Boolean := False;
+    Support_64_Bit_Divides    : constant Boolean := True;
+    Support_Aggregates        : constant Boolean := True;
+    Support_Composite_Assign  : constant Boolean := True;
+    Support_Composite_Compare : constant Boolean := True;
+    Support_Long_Shifts       : constant Boolean := True;
+    Suppress_Standard_Library : constant Boolean := False;
+    Use_Ada_Main_Program_Name : constant Boolean := True;
+    ZCX_By_Default            : constant Boolean := False;
+    GCC_ZCX_Support           : constant Boolean := False;
+    Front_End_ZCX_Support     : constant Boolean := False;
+ 
+    --  Obsolete entries, to be removed eventually (bootstrap issues!)
+ 
+    High_Integrity_Mode       : constant Boolean := False;
+    Long_Shifts_Inlined       : constant Boolean := False;
+ 
+ end System;
diff -Nrcpad gcc-3.4.3/gcc/ada/system-vxworks-x86.ads gcc-4.0.0/gcc/ada/system-vxworks-x86.ads
*** gcc-3.4.3/gcc/ada/system-vxworks-x86.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/system-vxworks-x86.ads	Mon Oct  4 14:51:16 2004
***************
*** 0 ****
--- 1,159 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --                               S Y S T E M                                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                         (VxWorks Version x86)                            --
+ --                                                                          --
+ --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package System is
+ pragma Pure (System);
+ --  Note that we take advantage of the implementation permission to
+ --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ 
+    type Name is (SYSTEM_NAME_GNAT);
+    System_Name : constant Name := SYSTEM_NAME_GNAT;
+ 
+    --  System-Dependent Named Numbers
+ 
+    Min_Int               : constant := Long_Long_Integer'First;
+    Max_Int               : constant := Long_Long_Integer'Last;
+ 
+    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
+    Max_Nonbinary_Modulus : constant := Integer'Last;
+ 
+    Max_Base_Digits       : constant := Long_Long_Float'Digits;
+    Max_Digits            : constant := Long_Long_Float'Digits;
+ 
+    Max_Mantissa          : constant := 63;
+    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
+ 
+    Tick                  : constant := 1.0 / 60.0;
+ 
+    --  Storage-related Declarations
+ 
+    type Address is private;
+    Null_Address : constant Address;
+ 
+    Storage_Unit : constant := 8;
+    Word_Size    : constant := 32;
+    Memory_Size  : constant := 2 ** 32;
+ 
+    --  Address comparison
+ 
+    function "<"  (Left, Right : Address) return Boolean;
+    function "<=" (Left, Right : Address) return Boolean;
+    function ">"  (Left, Right : Address) return Boolean;
+    function ">=" (Left, Right : Address) return Boolean;
+    function "="  (Left, Right : Address) return Boolean;
+ 
+    pragma Import (Intrinsic, "<");
+    pragma Import (Intrinsic, "<=");
+    pragma Import (Intrinsic, ">");
+    pragma Import (Intrinsic, ">=");
+    pragma Import (Intrinsic, "=");
+ 
+    --  Other System-Dependent Declarations
+ 
+    type Bit_Order is (High_Order_First, Low_Order_First);
+    Default_Bit_Order : constant Bit_Order := Low_Order_First;
+ 
+    --  Priority-related Declarations (RM D.1)
+ 
+    --  256        is reserved for the VxWorks kernel
+    --  248 - 255  correspond to hardware interrupt levels 0 .. 7
+    --  247        is a catchall default "interrupt" priority for signals,
+    --             allowing higher priority than normal tasks, but lower than
+    --             hardware priority levels.  Protected Object ceilings can
+    --             override these values.
+    --  246        is used by the Interrupt_Manager task
+ 
+    Max_Priority           : constant Positive := 245;
+    Max_Interrupt_Priority : constant Positive := 255;
+ 
+    subtype Any_Priority       is Integer      range   0 .. 255;
+    subtype Priority           is Any_Priority range   0 .. 245;
+    subtype Interrupt_Priority is Any_Priority range 246 .. 255;
+ 
+    Default_Priority : constant Priority := 122;
+ 
+ private
+ 
+    type Address is mod Memory_Size;
+    Null_Address : constant Address := 0;
+ 
+    --------------------------------------
+    -- System Implementation Parameters --
+    --------------------------------------
+ 
+    --  These parameters provide information about the target that is used
+    --  by the compiler. They are in the private part of System, where they
+    --  can be accessed using the special circuitry in the Targparm unit
+    --  whose source should be consulted for more detailed descriptions
+    --  of the individual switch values.
+ 
+    AAMP                      : constant Boolean := False;
+    Backend_Divide_Checks     : constant Boolean := False;
+    Backend_Overflow_Checks   : constant Boolean := False;
+    Command_Line_Args         : constant Boolean := False;
+    Configurable_Run_Time     : constant Boolean := False;
+    Denorm                    : constant Boolean := True;
+    Duration_32_Bits          : constant Boolean := False;
+    Exit_Status_Supported     : constant Boolean := True;
+    Fractional_Fixed_Ops      : constant Boolean := False;
+    Frontend_Layout           : constant Boolean := False;
+    Functions_Return_By_DSP   : constant Boolean := False;
+    Machine_Overflows         : constant Boolean := False;
+    Machine_Rounds            : constant Boolean := True;
+    OpenVMS                   : constant Boolean := False;
+    Preallocated_Stacks       : constant Boolean := False;
+    Signed_Zeros              : constant Boolean := True;
+    Stack_Check_Default       : constant Boolean := False;
+    Stack_Check_Probes        : constant Boolean := False;
+    Support_64_Bit_Divides    : constant Boolean := True;
+    Support_Aggregates        : constant Boolean := True;
+    Support_Composite_Assign  : constant Boolean := True;
+    Support_Composite_Compare : constant Boolean := True;
+    Support_Long_Shifts       : constant Boolean := True;
+    Suppress_Standard_Library : constant Boolean := False;
+    Use_Ada_Main_Program_Name : constant Boolean := True;
+    ZCX_By_Default            : constant Boolean := False;
+    GCC_ZCX_Support           : constant Boolean := False;
+    Front_End_ZCX_Support     : constant Boolean := False;
+ 
+    --  Obsolete entries, to be removed eventually (bootstrap issues!)
+ 
+    High_Integrity_Mode       : constant Boolean := False;
+    Long_Shifts_Inlined       : constant Boolean := False;
+ 
+ end System;
diff -Nrcpad gcc-3.4.3/gcc/ada/system-vxworks-xscale.ads gcc-4.0.0/gcc/ada/system-vxworks-xscale.ads
*** gcc-3.4.3/gcc/ada/system-vxworks-xscale.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/system-vxworks-xscale.ads	Mon Oct  4 14:51:16 2004
***************
*** 0 ****
--- 1,159 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --                               S Y S T E M                                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                         (VxWorks Version Xscale)                         --
+ --                                                                          --
+ --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT. The copyright notice above, and the license provisions that follow --
+ -- apply solely to the  contents of the part following the private keyword. --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
+ -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+ -- MA 02111-1307, USA.                                                      --
+ --                                                                          --
+ -- As a special exception,  if other files  instantiate  generics from this --
+ -- unit, or you link  this unit with other files  to produce an executable, --
+ -- this  unit  does not  by itself cause  the resulting  executable  to  be --
+ -- covered  by the  GNU  General  Public  License.  This exception does not --
+ -- however invalidate  any other reasons why  the executable file  might be --
+ -- covered by the  GNU Public License.                                      --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package System is
+ pragma Pure (System);
+ --  Note that we take advantage of the implementation permission to
+ --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
+ 
+    type Name is (SYSTEM_NAME_GNAT);
+    System_Name : constant Name := SYSTEM_NAME_GNAT;
+ 
+    --  System-Dependent Named Numbers
+ 
+    Min_Int               : constant := Long_Long_Integer'First;
+    Max_Int               : constant := Long_Long_Integer'Last;
+ 
+    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
+    Max_Nonbinary_Modulus : constant := Integer'Last;
+ 
+    Max_Base_Digits       : constant := Long_Long_Float'Digits;
+    Max_Digits            : constant := Long_Long_Float'Digits;
+ 
+    Max_Mantissa          : constant := 63;
+    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
+ 
+    Tick                  : constant := 1.0 / 60.0;
+ 
+    --  Storage-related Declarations
+ 
+    type Address is private;
+    Null_Address : constant Address;
+ 
+    Storage_Unit : constant := 8;
+    Word_Size    : constant := 32;
+    Memory_Size  : constant := 2 ** 32;
+ 
+    --  Address comparison
+ 
+    function "<"  (Left, Right : Address) return Boolean;
+    function "<=" (Left, Right : Address) return Boolean;
+    function ">"  (Left, Right : Address) return Boolean;
+    function ">=" (Left, Right : Address) return Boolean;
+    function "="  (Left, Right : Address) return Boolean;
+ 
+    pragma Import (Intrinsic, "<");
+    pragma Import (Intrinsic, "<=");
+    pragma Import (Intrinsic, ">");
+    pragma Import (Intrinsic, ">=");
+    pragma Import (Intrinsic, "=");
+ 
+    --  Other System-Dependent Declarations
+ 
+    type Bit_Order is (High_Order_First, Low_Order_First);
+    Default_Bit_Order : constant Bit_Order := Low_Order_First;
+ 
+    --  Priority-related Declarations (RM D.1)
+ 
+    --  256        is reserved for the VxWorks kernel
+    --  248 - 255  correspond to hardware interrupt levels 0 .. 7
+    --  247        is a catchall default "interrupt" priority for signals,
+    --             allowing higher priority than normal tasks, but lower than
+    --             hardware priority levels.  Protected Object ceilings can
+    --             override these values.
+    --  246        is used by the Interrupt_Manager task
+ 
+    Max_Priority           : constant Positive := 245;
+    Max_Interrupt_Priority : constant Positive := 255;
+ 
+    subtype Any_Priority       is Integer      range   0 .. 255;
+    subtype Priority           is Any_Priority range   0 .. 245;
+    subtype Interrupt_Priority is Any_Priority range 246 .. 255;
+ 
+    Default_Priority : constant Priority := 122;
+ 
+ private
+ 
+    type Address is mod Memory_Size;
+    Null_Address : constant Address := 0;
+ 
+    --------------------------------------
+    -- System Implementation Parameters --
+    --------------------------------------
+ 
+    --  These parameters provide information about the target that is used
+    --  by the compiler. They are in the private part of System, where they
+    --  can be accessed using the special circuitry in the Targparm unit
+    --  whose source should be consulted for more detailed descriptions
+    --  of the individual switch values.
+ 
+    AAMP                      : constant Boolean := False;
+    Backend_Divide_Checks     : constant Boolean := False;
+    Backend_Overflow_Checks   : constant Boolean := False;
+    Command_Line_Args         : constant Boolean := False;
+    Configurable_Run_Time     : constant Boolean := False;
+    Denorm                    : constant Boolean := True;
+    Duration_32_Bits          : constant Boolean := False;
+    Exit_Status_Supported     : constant Boolean := True;
+    Fractional_Fixed_Ops      : constant Boolean := False;
+    Frontend_Layout           : constant Boolean := False;
+    Functions_Return_By_DSP   : constant Boolean := False;
+    Machine_Overflows         : constant Boolean := False;
+    Machine_Rounds            : constant Boolean := True;
+    OpenVMS                   : constant Boolean := False;
+    Preallocated_Stacks       : constant Boolean := False;
+    Signed_Zeros              : constant Boolean := True;
+    Stack_Check_Default       : constant Boolean := False;
+    Stack_Check_Probes        : constant Boolean := False;
+    Support_64_Bit_Divides    : constant Boolean := True;
+    Support_Aggregates        : constant Boolean := True;
+    Support_Composite_Assign  : constant Boolean := True;
+    Support_Composite_Compare : constant Boolean := True;
+    Support_Long_Shifts       : constant Boolean := True;
+    Suppress_Standard_Library : constant Boolean := False;
+    Use_Ada_Main_Program_Name : constant Boolean := True;
+    ZCX_By_Default            : constant Boolean := False;
+    GCC_ZCX_Support           : constant Boolean := False;
+    Front_End_ZCX_Support     : constant Boolean := False;
+ 
+    --  Obsolete entries, to be removed eventually (bootstrap issues!)
+ 
+    High_Integrity_Mode       : constant Boolean := False;
+    Long_Shifts_Inlined       : constant Boolean := False;
+ 
+ end System;
diff -Nrcpad gcc-3.4.3/gcc/ada/system.ads gcc-4.0.0/gcc/ada/system.ads
*** gcc-3.4.3/gcc/ada/system.ads	Tue Oct 21 13:42:22 2003
--- gcc-4.0.0/gcc/ada/system.ads	Mon Oct  4 14:51:16 2004
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                            (Compiler Version)                            --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                            (Compiler Version)                            --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** private
*** 141,146 ****
--- 141,147 ----
     Machine_Overflows         : constant Boolean := False;
     Machine_Rounds            : constant Boolean := True;
     OpenVMS                   : constant Boolean := False;
+    Preallocated_Stacks       : constant Boolean := False;
     Signed_Zeros              : constant Boolean := True;
     Stack_Check_Default       : constant Boolean := False;
     Stack_Check_Probes        : constant Boolean := False;
diff -Nrcpad gcc-3.4.3/gcc/ada/table.adb gcc-4.0.0/gcc/ada/table.adb
*** gcc-3.4.3/gcc/ada/table.adb	Tue Oct 21 13:42:22 2003
--- gcc-4.0.0/gcc/ada/table.adb	Fri Mar  5 10:58:58 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Table is
*** 66,74 ****
--- 66,81 ----
        --  Return Null_Address if the table length is zero,
        --  Table (First)'Address if not.
  
+       pragma Warnings (Off);
+       --  Turn off warnings. The following unchecked conversions are only used
+       --  internally in this package, and cannot never result in any instances
+       --  of improperly aliased pointers for the client of the package.
+ 
        function To_Address is new Unchecked_Conversion (Table_Ptr, Address);
        function To_Pointer is new Unchecked_Conversion (Address, Table_Ptr);
  
+       pragma Warnings (On);
+ 
        ------------
        -- Append --
        ------------
diff -Nrcpad gcc-3.4.3/gcc/ada/targparm.adb gcc-4.0.0/gcc/ada/targparm.adb
*** gcc-3.4.3/gcc/ada/targparm.adb	Tue Oct 21 13:42:22 2003
--- gcc-4.0.0/gcc/ada/targparm.adb	Mon Oct  4 14:51:16 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1999-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1999-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Targparm is
*** 53,58 ****
--- 53,59 ----
        FFO,  --   Fractional_Fixed_Ops
        MOV,  --   Machine_Overflows
        MRN,  --   Machine_Rounds
+       PAS,  --   Preallocated_Stacks
        S64,  --   Support_64_Bit_Divides
        SAG,  --   Support_Aggregates
        SCA,  --   Support_Composite_Assign
*************** package body Targparm is
*** 94,99 ****
--- 95,101 ----
     FFO_Str : aliased constant Source_Buffer := "Fractional_Fixed_Ops";
     MOV_Str : aliased constant Source_Buffer := "Machine_Overflows";
     MRN_Str : aliased constant Source_Buffer := "Machine_Rounds";
+    PAS_Str : aliased constant Source_Buffer := "Preallocated_Stacks";
     S64_Str : aliased constant Source_Buffer := "Support_64_Bit_Divides";
     SAG_Str : aliased constant Source_Buffer := "Support_Aggregates";
     SCA_Str : aliased constant Source_Buffer := "Support_Composite_Assign";
*************** package body Targparm is
*** 132,137 ****
--- 134,140 ----
        FFO_Str'Access,
        MOV_Str'Access,
        MRN_Str'Access,
+       PAS_Str'Access,
        S64_Str'Access,
        SAG_Str'Access,
        SCA_Str'Access,
*************** package body Targparm is
*** 152,157 ****
--- 155,187 ----
        HIM_Str'Access,
        LSI_Str'Access);
  
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    procedure Set_Profile_Restrictions (P : Profile_Name);
+    --  Set Restrictions_On_Target for the given profile
+ 
+    ------------------------------
+    -- Set_Profile_Restrictions --
+    ------------------------------
+ 
+    procedure Set_Profile_Restrictions (P : Profile_Name) is
+       R : Restriction_Flags  renames Profile_Info (P).Set;
+       V : Restriction_Values renames Profile_Info (P).Value;
+ 
+    begin
+       for J in R'Range loop
+          if R (J) then
+             Restrictions_On_Target.Set (J) := True;
+ 
+             if J in All_Parameter_Restrictions then
+                Restrictions_On_Target.Value (J) := V (J);
+             end if;
+          end if;
+       end loop;
+    end Set_Profile_Restrictions;
+ 
     ---------------------------
     -- Get_Target_Parameters --
     ---------------------------
*************** package body Targparm is
*** 192,198 ****
        Source_Last  : Source_Ptr)
     is
        P : Source_Ptr;
!       V : Uint;
  
        Fatal : Boolean := False;
        --  Set True if a fatal error is detected
--- 222,228 ----
        Source_Last  : Source_Ptr)
     is
        P : Source_Ptr;
!       --  Scans source buffer containing source of system.ads
  
        Fatal : Boolean := False;
        --  Set True if a fatal error is detected
*************** package body Targparm is
*** 215,226 ****
           if System_Text (P) = '-' then
              goto Line_Loop_Continue;
  
           --  Test for pragma Restrictions
  
           elsif System_Text (P .. P + 20) = "pragma Restrictions (" then
              P := P + 21;
  
!             Rloop : for K in Partition_Restrictions loop
                 declare
                    Rname : constant String := Restriction_Id'Image (K);
  
--- 245,276 ----
           if System_Text (P) = '-' then
              goto Line_Loop_Continue;
  
+          --  Test for pragma Profile (Ravenscar);
+ 
+          elsif System_Text (P .. P + 26) =
+                  "pragma Profile (Ravenscar);"
+          then
+             Set_Profile_Restrictions (Ravenscar);
+             Opt.Task_Dispatching_Policy := 'F';
+             Opt.Locking_Policy     := 'C';
+             P := P + 27;
+             goto Line_Loop_Continue;
+ 
+          --  Test for pragma Profile (Restricted);
+ 
+          elsif System_Text (P .. P + 27) =
+                  "pragma Profile (Restricted);"
+          then
+             Set_Profile_Restrictions (Restricted);
+             P := P + 28;
+             goto Line_Loop_Continue;
+ 
           --  Test for pragma Restrictions
  
           elsif System_Text (P .. P + 20) = "pragma Restrictions (" then
              P := P + 21;
  
!             Rloop : for K in All_Boolean_Restrictions loop
                 declare
                    Rname : constant String := Restriction_Id'Image (K);
  
*************** package body Targparm is
*** 234,240 ****
                    end loop;
  
                    if System_Text (P + Rname'Length) = ')' then
!                      Restrictions_On_Target (K) := True;
                       goto Line_Loop_Continue;
                    end if;
                 end;
--- 284,290 ----
                    end loop;
  
                    if System_Text (P + Rname'Length) = ')' then
!                      Restrictions_On_Target.Set (K) := True;
                       goto Line_Loop_Continue;
                    end if;
                 end;
*************** package body Targparm is
*** 243,252 ****
                 null;
              end loop Rloop;
  
!             Ploop : for K in Restriction_Parameter_Id loop
                 declare
                    Rname : constant String :=
!                             Restriction_Parameter_Id'Image (K);
  
                 begin
                    for J in Rname'Range loop
--- 293,305 ----
                 null;
              end loop Rloop;
  
!             Ploop : for K in All_Parameter_Restrictions loop
                 declare
                    Rname : constant String :=
!                             All_Parameter_Restrictions'Image (K);
! 
!                   V : Natural;
!                   --  Accumulates value
  
                 begin
                    for J in Rname'Range loop
*************** package body Targparm is
*** 261,282 ****
                                                        " => "
                    then
                       P := P + Rname'Length + 4;
-                      V := Uint_0;
  
                       loop
                          if System_Text (P) in '0' .. '9' then
!                            V := 10 * V + Character'Pos (System_Text (P)) - 48;
                          elsif System_Text (P) = '_' then
                             null;
                          elsif System_Text (P) = ')' then
!                            Restriction_Parameters_On_Target (K) := V;
!                            goto  Line_Loop_Continue;
                          else
!                            goto Ploop_Continue;
                          end if;
  
                          P := P + 1;
                       end loop;
                    end if;
                 end;
  
--- 314,358 ----
                                                        " => "
                    then
                       P := P + Rname'Length + 4;
  
+                      V := 0;
                       loop
                          if System_Text (P) in '0' .. '9' then
!                            declare
!                               pragma Unsuppress (Overflow_Check);
! 
!                            begin
!                               --  Accumulate next digit
! 
!                               V := 10 * V +
!                                    Character'Pos (System_Text (P)) -
!                                    Character'Pos ('0');
! 
!                            exception
!                               --  On overflow, we just ignore the pragma since
!                               --  that is the standard handling in this case.
! 
!                               when Constraint_Error =>
!                                  goto Line_Loop_Continue;
!                            end;
! 
                          elsif System_Text (P) = '_' then
                             null;
+ 
                          elsif System_Text (P) = ')' then
!                            Restrictions_On_Target.Value (K) := V;
!                            Restrictions_On_Target.Set (K) := True;
!                            goto Line_Loop_Continue;
! 
                          else
!                            exit Ploop;
                          end if;
  
                          P := P + 1;
                       end loop;
+ 
+                   else
+                      exit Ploop;
                    end if;
                 end;
  
*************** package body Targparm is
*** 287,293 ****
              Set_Standard_Error;
              Write_Line
                 ("fatal error: system.ads is incorrectly formatted");
!             Write_Str ("unrecognized restrictions pragma: ");
  
              while System_Text (P) /= ')'
                      and then
--- 363,369 ----
              Set_Standard_Error;
              Write_Line
                 ("fatal error: system.ads is incorrectly formatted");
!             Write_Str ("unrecognized or incorrect restrictions pragma: ");
  
              while System_Text (P) /= ')'
                      and then
*************** package body Targparm is
*** 301,306 ****
--- 377,389 ----
              Fatal := True;
              Set_Standard_Output;
  
+          --  Test for pragma Detect_Blocking;
+ 
+          elsif System_Text (P .. P + 22) = "pragma Detect_Blocking;" then
+             P := P + 23;
+             Opt.Detect_Blocking := True;
+             goto Line_Loop_Continue;
+ 
           --  Discard_Names
  
           elsif System_Text (P .. P + 20) = "pragma Discard_Names;" then
*************** package body Targparm is
*** 477,482 ****
--- 560,566 ----
                       when FFO => Fractional_Fixed_Ops_On_Target      := Result;
                       when MOV => Machine_Overflows_On_Target         := Result;
                       when MRN => Machine_Rounds_On_Target            := Result;
+                      when PAS => Preallocated_Stacks_On_Target       := Result;
                       when S64 => Support_64_Bit_Divides_On_Target    := Result;
                       when SAG => Support_Aggregates_On_Target        := Result;
                       when SCA => Support_Composite_Assign_On_Target  := Result;
*************** package body Targparm is
*** 520,526 ****
--- 604,612 ----
           if P >= Source_Last then
              Set_Standard_Error;
              Write_Line ("fatal error, system.ads not formatted correctly");
+             Write_Line ("unexpected end of file");
              Set_Standard_Output;
+             raise Unrecoverable_Error;
           end if;
        end loop Line_Loop;
  
diff -Nrcpad gcc-3.4.3/gcc/ada/targparm.ads gcc-4.0.0/gcc/ada/targparm.ads
*** gcc-3.4.3/gcc/ada/targparm.ads	Mon Dec  8 10:33:16 2003
--- gcc-4.0.0/gcc/ada/targparm.ads	Mon Oct  4 14:51:16 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1999-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1999-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 68,74 ****
  
  with Rident; use Rident;
  with Types;  use Types;
- with Uintp;  use Uintp;
  
  package Targparm is
  
--- 68,73 ----
*************** package Targparm is
*** 102,125 ****
     --  If a pragma Polling (On) appears, then the flag Opt.Polling_Required
     --  is set to True.
  
     --  if a pragma Suppress_Exception_Locations appears, then the flag
     --  Opt.Exception_Locations_Suppressed is set to True.
  
!    --  The only other pragma allowed is a pragma Restrictions that gives the
!    --  simple name of a restriction for which partition consistency is always
!    --  required (see definition of Rident.Partition_Restrictions).
  
!    Restrictions_On_Target :
!      array (Partition_Restrictions) of Boolean := (others => False);
!    --  Element is set True if a pragma Restrictions for the corresponding
!    --  identifier appears in system.ads. Note that only partition restriction
!    --  identifiers are permitted as arguments for pragma Restrictions for
!    --  pragmas appearing at the start of system.ads.
  
!    Restriction_Parameters_On_Target :
!      array (Restriction_Parameter_Id) of Uint := (others => No_Uint);
!    --  Element is set to specified value if a pragma Restrictions for the
!    --  corresponding restriction parameter value is set.
  
     -------------------
     -- Run Time Name --
--- 101,125 ----
     --  If a pragma Polling (On) appears, then the flag Opt.Polling_Required
     --  is set to True.
  
+    --  If a pragma Detect_Blocking appears, then the flag Opt.Detect_Blocking
+    --  is set to True.
+ 
     --  if a pragma Suppress_Exception_Locations appears, then the flag
     --  Opt.Exception_Locations_Suppressed is set to True.
  
!    --  If a pragma Profile with a valid profile argument appears, then
!    --  the appropriate restrictions and policy flags are set.
  
!    --  The only other pragma allowed is a pragma Restrictions that specifies
!    --  a restriction that will be imposed on all units in the partition. Note
!    --  that in this context, only one restriction can be specified in a single
!    --  pragma, and the pragma must appear on its own on a single source line.
  
!    Restrictions_On_Target : Restrictions_Info;
!    --  Records restrictions specified by system.ads. Only the Set and Value
!    --  members are modified. The Violated and Count fields are never modified.
!    --  Note that entries can be set either by a pragma Restrictions or by
!    --  a pragma Profile.
  
     -------------------
     -- Run Time Name --
*************** package Targparm is
*** 345,350 ****
--- 345,357 ----
     --
     --    The routine __gnat_handler_installed is not imported
  
+    Preallocated_Stacks_On_Target : Boolean;
+    --  If this flag is True, then the expander preallocates all task stacks
+    --  at compile time. If the flag is False, then task stacks are not pre-
+    --  allocated, and task stack allocation is the responsibility of the
+    --  run-time (which typically delegates the task to the underlying
+    --  operating system environment).
+ 
     ---------------------
     -- Duration Format --
     ---------------------
diff -Nrcpad gcc-3.4.3/gcc/ada/targtyps.c gcc-4.0.0/gcc/ada/targtyps.c
*** gcc-3.4.3/gcc/ada/targtyps.c	Tue Nov  4 12:51:46 2003
--- gcc-4.0.0/gcc/ada/targtyps.c	Wed Apr 21 10:10:32 2004
***************
*** 6,12 ****
   *                                                                          *
   *                                  Body                                    *
   *                                                                          *
!  *          Copyright (C) 1992-2003 Free Software Foundation, Inc.          *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
--- 6,12 ----
   *                                                                          *
   *                                  Body                                    *
   *                                                                          *
!  *          Copyright (C) 1992-2004 Free Software Foundation, Inc.          *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
*************** get_target_maximum_alignment (void)
*** 148,163 ****
    return BIGGEST_ALIGNMENT / BITS_PER_UNIT;
  }
  
- Boolean
- get_target_no_dollar_in_label (void)
- {
- #ifdef NO_DOLLAR_IN_LABEL
-   return 1;
- #else
-   return 0;
- #endif
- }
- 
  #ifndef FLOAT_WORDS_BIG_ENDIAN
  #define FLOAT_WORDS_BIG_ENDIAN WORDS_BIG_ENDIAN
  #endif
--- 148,153 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/tb-gcc.c gcc-4.0.0/gcc/ada/tb-gcc.c
*** gcc-3.4.3/gcc/ada/tb-gcc.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/ada/tb-gcc.c	Thu Nov 25 13:11:09 2004
***************
*** 0 ****
--- 1,102 ----
+ /****************************************************************************
+  *                                                                          *
+  *                         GNAT COMPILER COMPONENTS                         *
+  *                                                                          *
+  *                   T R A C E B A C K - G C C t a b l e s                  *
+  *                                                                          *
+  *                          C Implementation File                           *
+  *                                                                          *
+  *              Copyright (C) 2004 Ada Core Technologies, Inc               *
+  *                                                                          *
+  * GNAT is free software;  you can  redistribute it  and/or modify it under *
+  * terms of the  GNU General Public License as published  by the Free Soft- *
+  * ware  Foundation;  either version 2,  or (at your option) any later ver- *
+  * sion.  GNAT is distributed in the hope that it will be useful, but WITH- *
+  * OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY *
+  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License *
+  * for  more details.  You should have  received  a copy of the GNU General *
+  * Public License  distributed with GNAT;  see file COPYING.  If not, write *
+  * to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, *
+  * MA 02111-1307, USA.                                                      *
+  *                                                                          *
+  * As a  special  exception,  if you  link  this file  with other  files to *
+  * produce an executable,  this file does not by itself cause the resulting *
+  * executable to be covered by the GNU General Public License. This except- *
+  * ion does not  however invalidate  any other reasons  why the  executable *
+  * file might be covered by the  GNU Public License.                        *
+  *                                                                          *
+  * GNAT was originally developed  by the GNAT team at  New York University. *
+  * Extensive contributions were provided by Ada Core Technologies Inc.      *
+  *                                                                          *
+  ****************************************************************************/
+ 
+ /* This is an implementation of the __gnat_backtrace routine using the
+    underlying GCC unwinding support associated with the exception handling
+    infrastructure.  This will only work for ZCX based applications.  */
+ 
+ #include <unwind.h>
+ 
+ /* The implementation boils down to a call to _Unwind_Backtrace with a
+    tailored callback and carried-on datastructure to keep track of the
+    input parameters we got as well as of the basic processing state.  */
+ 
+ typedef struct {
+   void ** traceback;
+   int max_len;
+   void * exclude_min;
+   void * exclude_max;
+   int  n_frames_to_skip;
+   int  n_frames_skipped;
+   int  n_entries_filled;
+ } uw_data_t;
+ 
+ /******************
+  * trace_callback *
+  ******************/
+ 
+ static _Unwind_Reason_Code
+ trace_callback (struct _Unwind_Context * uw_context, uw_data_t * uw_data)
+ {
+   void * pc = (void *) _Unwind_GetIP (uw_context);
+ 
+   if (uw_data->n_frames_skipped < uw_data->n_frames_to_skip)
+     {
+       uw_data->n_frames_skipped ++;
+       return _URC_NO_REASON;
+     }
+ 
+   if (uw_data->n_entries_filled >= uw_data->max_len)
+     return _URC_NORMAL_STOP;
+ 
+   if (pc < uw_data->exclude_min || pc > uw_data->exclude_max)
+     uw_data->traceback [uw_data->n_entries_filled ++] = pc + PC_ADJUST;
+ 
+   return _URC_NO_REASON;
+ }
+ 
+ /********************
+  * __gnat_backtrace *
+  ********************/
+ 
+ int
+ __gnat_backtrace (void ** traceback, int max_len,
+ 		  void * exclude_min, void * exclude_max,
+ 		  int  skip_frames)
+ {
+   uw_data_t uw_data;
+   /* State carried over during the whole unwinding process.  */
+ 
+   uw_data.traceback   = traceback;
+   uw_data.max_len     = max_len;
+   uw_data.exclude_min = exclude_min;
+   uw_data.exclude_max = exclude_max;
+ 
+   uw_data.n_frames_to_skip = skip_frames;
+ 
+   uw_data.n_frames_skipped = 0;
+   uw_data.n_entries_filled = 0;
+ 
+   _Unwind_Backtrace ((_Unwind_Trace_Fn)trace_callback, &uw_data);
+ 
+   return uw_data.n_entries_filled;
+ }
diff -Nrcpad gcc-3.4.3/gcc/ada/tbuild.adb gcc-4.0.0/gcc/ada/tbuild.adb
*** gcc-3.4.3/gcc/ada/tbuild.adb	Tue Oct 21 13:42:23 2003
--- gcc-4.0.0/gcc/ada/tbuild.adb	Fri Nov 19 10:56:37 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with Namet;    use Namet;
*** 31,39 ****
--- 31,41 ----
  with Nlists;   use Nlists;
  with Nmake;    use Nmake;
  with Restrict; use Restrict;
+ with Rident;   use Rident;
  with Sinfo;    use Sinfo;
  with Snames;   use Snames;
  with Stand;    use Stand;
+ with Stringt;  use Stringt;
  with Uintp;    use Uintp;
  
  package body Tbuild is
*************** package body Tbuild is
*** 112,118 ****
  
     procedure Discard_List (L : List_Id) is
        pragma Warnings (Off, L);
- 
     begin
        null;
     end Discard_List;
--- 114,119 ----
*************** package body Tbuild is
*** 123,129 ****
  
     procedure Discard_Node (N : Node_Or_Entity_Id) is
        pragma Warnings (Off, N);
- 
     begin
        null;
     end Discard_Node;
--- 124,129 ----
*************** package body Tbuild is
*** 156,165 ****
     --------------------
  
     function Make_DT_Access
!      (Loc  : Source_Ptr;
!       Rec  : Node_Id;
!       Typ  : Entity_Id)
!       return Node_Id
     is
        Full_Type : Entity_Id := Typ;
  
--- 156,164 ----
     --------------------
  
     function Make_DT_Access
!      (Loc : Source_Ptr;
!       Rec : Node_Id;
!       Typ : Entity_Id) return Node_Id
     is
        Full_Type : Entity_Id := Typ;
  
*************** package body Tbuild is
*** 182,191 ****
     -----------------------
  
     function Make_DT_Component
!      (Loc  : Source_Ptr;
!       Typ  : Entity_Id;
!       I    : Positive)
!       return Node_Id
     is
        X : Node_Id;
        Full_Type : Entity_Id := Typ;
--- 181,189 ----
     -----------------------
  
     function Make_DT_Component
!      (Loc : Source_Ptr;
!       Typ : Entity_Id;
!       I   : Positive) return Node_Id
     is
        X : Node_Id;
        Full_Type : Entity_Id := Typ;
*************** package body Tbuild is
*** 214,221 ****
        Condition       : Node_Id;
        Then_Statements : List_Id;
        Elsif_Parts     : List_Id := No_List;
!       Else_Statements : List_Id := No_List)
!       return            Node_Id
     is
     begin
        Check_Restriction (No_Implicit_Conditionals, Node);
--- 212,218 ----
        Condition       : Node_Id;
        Then_Statements : List_Id;
        Elsif_Parts     : List_Id := No_List;
!       Else_Statements : List_Id := No_List) return Node_Id
     is
     begin
        Check_Restriction (No_Implicit_Conditionals, Node);
*************** package body Tbuild is
*** 233,240 ****
     function Make_Implicit_Label_Declaration
       (Loc                 : Source_Ptr;
        Defining_Identifier : Node_Id;
!       Label_Construct     : Node_Id)
!       return                Node_Id
     is
        N : constant Node_Id :=
              Make_Implicit_Label_Declaration (Loc, Defining_Identifier);
--- 230,236 ----
     function Make_Implicit_Label_Declaration
       (Loc                 : Source_Ptr;
        Defining_Identifier : Node_Id;
!       Label_Construct     : Node_Id) return Node_Id
     is
        N : constant Node_Id :=
              Make_Implicit_Label_Declaration (Loc, Defining_Identifier);
*************** package body Tbuild is
*** 254,261 ****
        Identifier             : Node_Id := Empty;
        Iteration_Scheme       : Node_Id := Empty;
        Has_Created_Identifier : Boolean := False;
!       End_Label              : Node_Id := Empty)
!       return                   Node_Id
     is
     begin
        Check_Restriction (No_Implicit_Loops, Node);
--- 250,256 ----
        Identifier             : Node_Id := Empty;
        Iteration_Scheme       : Node_Id := Empty;
        Has_Created_Identifier : Boolean := False;
!       End_Label              : Node_Id := Empty) return Node_Id
     is
     begin
        Check_Restriction (No_Implicit_Loops, Node);
*************** package body Tbuild is
*** 280,287 ****
  
     function Make_Integer_Literal
       (Loc    : Source_Ptr;
!       Intval : Int)
!       return   Node_Id
     is
     begin
        return Make_Integer_Literal (Loc, UI_From_Int (Intval));
--- 275,281 ----
  
     function Make_Integer_Literal
       (Loc    : Source_Ptr;
!       Intval : Int) return Node_Id
     is
     begin
        return Make_Integer_Literal (Loc, UI_From_Int (Intval));
*************** package body Tbuild is
*** 294,301 ****
     function Make_Raise_Constraint_Error
       (Sloc      : Source_Ptr;
        Condition : Node_Id := Empty;
!       Reason    : RT_Exception_Code)
!       return      Node_Id
     is
     begin
        pragma Assert (Reason in RT_CE_Exceptions);
--- 288,294 ----
     function Make_Raise_Constraint_Error
       (Sloc      : Source_Ptr;
        Condition : Node_Id := Empty;
!       Reason    : RT_Exception_Code) return Node_Id
     is
     begin
        pragma Assert (Reason in RT_CE_Exceptions);
*************** package body Tbuild is
*** 313,320 ****
     function Make_Raise_Program_Error
       (Sloc      : Source_Ptr;
        Condition : Node_Id := Empty;
!       Reason    : RT_Exception_Code)
!       return      Node_Id
     is
     begin
        pragma Assert (Reason in RT_PE_Exceptions);
--- 306,312 ----
     function Make_Raise_Program_Error
       (Sloc      : Source_Ptr;
        Condition : Node_Id := Empty;
!       Reason    : RT_Exception_Code) return Node_Id
     is
     begin
        pragma Assert (Reason in RT_PE_Exceptions);
*************** package body Tbuild is
*** 332,339 ****
     function Make_Raise_Storage_Error
       (Sloc      : Source_Ptr;
        Condition : Node_Id := Empty;
!       Reason    : RT_Exception_Code)
!       return      Node_Id
     is
     begin
        pragma Assert (Reason in RT_SE_Exceptions);
--- 324,330 ----
     function Make_Raise_Storage_Error
       (Sloc      : Source_Ptr;
        Condition : Node_Id := Empty;
!       Reason    : RT_Exception_Code) return Node_Id
     is
     begin
        pragma Assert (Reason in RT_SE_Exceptions);
*************** package body Tbuild is
*** 344,349 ****
--- 335,356 ----
              UI_From_Int (RT_Exception_Code'Pos (Reason)));
     end Make_Raise_Storage_Error;
  
+    -------------------------
+    -- Make_String_Literal --
+    -------------------------
+ 
+    function Make_String_Literal
+      (Sloc   : Source_Ptr;
+       Strval : String) return Node_Id
+    is
+    begin
+       Start_String;
+       Store_String_Chars (Strval);
+       return
+         Make_String_Literal (Sloc,
+           Strval => End_String);
+    end Make_String_Literal;
+ 
     ---------------------------
     -- Make_Unsuppress_Block --
     ---------------------------
*************** package body Tbuild is
*** 359,366 ****
     function Make_Unsuppress_Block
       (Loc   : Source_Ptr;
        Check : Name_Id;
!       Stmts : List_Id)
!       return  Node_Id
     is
     begin
        return
--- 366,372 ----
     function Make_Unsuppress_Block
       (Loc   : Source_Ptr;
        Check : Name_Id;
!       Stmts : List_Id) return Node_Id
     is
     begin
        return
*************** package body Tbuild is
*** 402,409 ****
       (Related_Id   : Name_Id;
        Suffix       : Character := ' ';
        Suffix_Index : Int       := 0;
!       Prefix       : Character := ' ')
!       return         Name_Id
     is
     begin
        Get_Name_String (Related_Id);
--- 408,414 ----
       (Related_Id   : Name_Id;
        Suffix       : Character := ' ';
        Suffix_Index : Int       := 0;
!       Prefix       : Character := ' ') return Name_Id
     is
     begin
        Get_Name_String (Related_Id);
*************** package body Tbuild is
*** 440,447 ****
       (Related_Id   : Name_Id;
        Suffix       : String;
        Suffix_Index : Int       := 0;
!       Prefix       : Character := ' ')
!       return         Name_Id
     is
     begin
        Get_Name_String (Related_Id);
--- 445,451 ----
       (Related_Id   : Name_Id;
        Suffix       : String;
        Suffix_Index : Int       := 0;
!       Prefix       : Character := ' ') return Name_Id
     is
     begin
        Get_Name_String (Related_Id);
*************** package body Tbuild is
*** 475,482 ****
  
     function New_External_Name
       (Suffix       : Character;
!       Suffix_Index : Nat)
!       return         Name_Id
     is
     begin
        Name_Buffer (1) := Suffix;
--- 479,485 ----
  
     function New_External_Name
       (Suffix       : Character;
!       Suffix_Index : Nat) return Name_Id
     is
     begin
        Name_Buffer (1) := Suffix;
*************** package body Tbuild is
*** 504,511 ****
  
     function New_Occurrence_Of
       (Def_Id : Entity_Id;
!       Loc    : Source_Ptr)
!       return   Node_Id
     is
        Occurrence : Node_Id;
  
--- 507,513 ----
  
     function New_Occurrence_Of
       (Def_Id : Entity_Id;
!       Loc    : Source_Ptr) return Node_Id
     is
        Occurrence : Node_Id;
  
*************** package body Tbuild is
*** 529,536 ****
  
     function New_Reference_To
       (Def_Id : Entity_Id;
!       Loc    : Source_Ptr)
!       return   Node_Id
     is
        Occurrence : Node_Id;
  
--- 531,537 ----
  
     function New_Reference_To
       (Def_Id : Entity_Id;
!       Loc    : Source_Ptr) return Node_Id
     is
        Occurrence : Node_Id;
  
*************** package body Tbuild is
*** 547,554 ****
  
     function New_Suffixed_Name
       (Related_Id : Name_Id;
!       Suffix     : String)
!       return       Name_Id
     is
     begin
        Get_Name_String (Related_Id);
--- 548,554 ----
  
     function New_Suffixed_Name
       (Related_Id : Name_Id;
!       Suffix     : String) return Name_Id
     is
     begin
        Get_Name_String (Related_Id);
*************** package body Tbuild is
*** 565,571 ****
  
     function OK_Convert_To (Typ : Entity_Id; Expr : Node_Id) return Node_Id is
        Result : Node_Id;
- 
     begin
        Result :=
          Make_Type_Conversion (Sloc (Expr),
--- 565,570 ----
*************** package body Tbuild is
*** 582,589 ****
  
     function Unchecked_Convert_To
       (Typ  : Entity_Id;
!       Expr : Node_Id)
!       return Node_Id
     is
        Loc    : constant Source_Ptr := Sloc (Expr);
        Result : Node_Id;
--- 581,587 ----
  
     function Unchecked_Convert_To
       (Typ  : Entity_Id;
!       Expr : Node_Id) return Node_Id
     is
        Loc    : constant Source_Ptr := Sloc (Expr);
        Result : Node_Id;
*************** package body Tbuild is
*** 606,613 ****
        then
           Result := Relocate_Node (Expr);
  
!       elsif Nkind (Expr) = N_Null then
! 
           --  No need for a conversion
  
           Result := Relocate_Node (Expr);
--- 604,612 ----
        then
           Result := Relocate_Node (Expr);
  
!       elsif Nkind (Expr) = N_Null
!         and then Is_Access_Type (Typ)
!       then
           --  No need for a conversion
  
           Result := Relocate_Node (Expr);
diff -Nrcpad gcc-3.4.3/gcc/ada/tbuild.ads gcc-4.0.0/gcc/ada/tbuild.ads
*** gcc-3.4.3/gcc/ada/tbuild.ads	Tue Oct 21 13:42:23 2003
--- gcc-4.0.0/gcc/ada/tbuild.ads	Fri Nov 19 10:56:37 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Tbuild is
*** 63,70 ****
     function Make_Byte_Aligned_Attribute_Reference
       (Sloc           : Source_Ptr;
        Prefix         : Node_Id;
!       Attribute_Name : Name_Id)
!       return           Node_Id;
     pragma Inline (Make_Byte_Aligned_Attribute_Reference);
     --  Like the standard Make_Attribute_Reference but the special flag
     --  Must_Be_Byte_Aligned is set in the attribute reference node. The
--- 63,69 ----
     function Make_Byte_Aligned_Attribute_Reference
       (Sloc           : Source_Ptr;
        Prefix         : Node_Id;
!       Attribute_Name : Name_Id) return Node_Id;
     pragma Inline (Make_Byte_Aligned_Attribute_Reference);
     --  Like the standard Make_Attribute_Reference but the special flag
     --  Must_Be_Byte_Aligned is set in the attribute reference node. The
*************** package Tbuild is
*** 73,80 ****
     function Make_DT_Component
       (Loc  : Source_Ptr;
        Typ  : Entity_Id;
!       I    : Positive)
!       return Node_Id;
     --  Gives a reference to the Ith component of the Dispatch Table of
     --  a given Tagged Type.
     --
--- 72,78 ----
     function Make_DT_Component
       (Loc  : Source_Ptr;
        Typ  : Entity_Id;
!       I    : Positive) return Node_Id;
     --  Gives a reference to the Ith component of the Dispatch Table of
     --  a given Tagged Type.
     --
*************** package Tbuild is
*** 95,102 ****
        Condition       : Node_Id;
        Then_Statements : List_Id;
        Elsif_Parts     : List_Id := No_List;
!       Else_Statements : List_Id := No_List)
!       return            Node_Id;
     pragma Inline (Make_Implicit_If_Statement);
     --  This function makes an N_If_Statement node whose fields are filled
     --  in with the indicated values (see Sinfo), and whose Sloc field is
--- 93,99 ----
        Condition       : Node_Id;
        Then_Statements : List_Id;
        Elsif_Parts     : List_Id := No_List;
!       Else_Statements : List_Id := No_List) return Node_Id;
     pragma Inline (Make_Implicit_If_Statement);
     --  This function makes an N_If_Statement node whose fields are filled
     --  in with the indicated values (see Sinfo), and whose Sloc field is
*************** package Tbuild is
*** 108,115 ****
     function Make_Implicit_Label_Declaration
       (Loc                 : Source_Ptr;
        Defining_Identifier : Node_Id;
!       Label_Construct     : Node_Id)
!       return                Node_Id;
     --  Used to contruct an implicit label declaration node, including setting
     --  the proper Label_Construct field (since Label_Construct is a semantic
     --  field, the normal call to Make_Implicit_Label_Declaration does not
--- 105,111 ----
     function Make_Implicit_Label_Declaration
       (Loc                 : Source_Ptr;
        Defining_Identifier : Node_Id;
!       Label_Construct     : Node_Id) return Node_Id;
     --  Used to contruct an implicit label declaration node, including setting
     --  the proper Label_Construct field (since Label_Construct is a semantic
     --  field, the normal call to Make_Implicit_Label_Declaration does not
*************** package Tbuild is
*** 121,128 ****
        Identifier             : Node_Id := Empty;
        Iteration_Scheme       : Node_Id := Empty;
        Has_Created_Identifier : Boolean := False;
!       End_Label              : Node_Id := Empty)
!       return                   Node_Id;
     --  This function makes an N_Loop_Statement node whose fields are filled
     --  in with the indicated values (see Sinfo), and whose Sloc field is
     --  is set to Sloc (Node). The effect is identical to calling function
--- 117,123 ----
        Identifier             : Node_Id := Empty;
        Iteration_Scheme       : Node_Id := Empty;
        Has_Created_Identifier : Boolean := False;
!       End_Label              : Node_Id := Empty) return Node_Id;
     --  This function makes an N_Loop_Statement node whose fields are filled
     --  in with the indicated values (see Sinfo), and whose Sloc field is
     --  is set to Sloc (Node). The effect is identical to calling function
*************** package Tbuild is
*** 133,148 ****
  
     function Make_Integer_Literal
       (Loc    : Source_Ptr;
!       Intval : Int)
!       return   Node_Id;
     pragma Inline (Make_Integer_Literal);
     --  A convenient form of Make_Integer_Literal taking Int instead of Uint
  
     function Make_Raise_Constraint_Error
       (Sloc      : Source_Ptr;
        Condition : Node_Id := Empty;
!       Reason    : RT_Exception_Code)
!       return      Node_Id;
     pragma Inline (Make_Raise_Constraint_Error);
     --  A convenient form of Make_Raise_Constraint_Error where the Reason
     --  is given simply as an enumeration value, rather than a Uint code.
--- 128,141 ----
  
     function Make_Integer_Literal
       (Loc    : Source_Ptr;
!       Intval : Int) return Node_Id;
     pragma Inline (Make_Integer_Literal);
     --  A convenient form of Make_Integer_Literal taking Int instead of Uint
  
     function Make_Raise_Constraint_Error
       (Sloc      : Source_Ptr;
        Condition : Node_Id := Empty;
!       Reason    : RT_Exception_Code) return Node_Id;
     pragma Inline (Make_Raise_Constraint_Error);
     --  A convenient form of Make_Raise_Constraint_Error where the Reason
     --  is given simply as an enumeration value, rather than a Uint code.
*************** package Tbuild is
*** 150,157 ****
     function Make_Raise_Program_Error
       (Sloc      : Source_Ptr;
        Condition : Node_Id := Empty;
!       Reason    : RT_Exception_Code)
!       return      Node_Id;
     pragma Inline (Make_Raise_Program_Error);
     --  A convenient form of Make_Raise_Program_Error where the Reason
     --  is given simply as an enumeration value, rather than a Uint code.
--- 143,149 ----
     function Make_Raise_Program_Error
       (Sloc      : Source_Ptr;
        Condition : Node_Id := Empty;
!       Reason    : RT_Exception_Code) return Node_Id;
     pragma Inline (Make_Raise_Program_Error);
     --  A convenient form of Make_Raise_Program_Error where the Reason
     --  is given simply as an enumeration value, rather than a Uint code.
*************** package Tbuild is
*** 159,175 ****
     function Make_Raise_Storage_Error
       (Sloc      : Source_Ptr;
        Condition : Node_Id := Empty;
!       Reason    : RT_Exception_Code)
!       return      Node_Id;
     pragma Inline (Make_Raise_Storage_Error);
     --  A convenient form of Make_Raise_Storage_Error where the Reason
     --  is given simply as an enumeration value, rather than a Uint code.
  
     function Make_Unsuppress_Block
       (Loc   : Source_Ptr;
        Check : Name_Id;
!       Stmts : List_Id)
!       return  Node_Id;
     --  Build a block with a pragma Suppress on 'Check'. Stmts is the
     --  statements list that needs protection against the check
  
--- 151,171 ----
     function Make_Raise_Storage_Error
       (Sloc      : Source_Ptr;
        Condition : Node_Id := Empty;
!       Reason    : RT_Exception_Code) return Node_Id;
     pragma Inline (Make_Raise_Storage_Error);
     --  A convenient form of Make_Raise_Storage_Error where the Reason
     --  is given simply as an enumeration value, rather than a Uint code.
  
+    function Make_String_Literal
+      (Sloc   : Source_Ptr;
+       Strval : String) return Node_Id;
+    --  A convenient form of Make_String_Literal, where the string value
+    --  is given as a normal string instead of a String_Id value.
+ 
     function Make_Unsuppress_Block
       (Loc   : Source_Ptr;
        Check : Name_Id;
!       Stmts : List_Id) return Node_Id;
     --  Build a block with a pragma Suppress on 'Check'. Stmts is the
     --  statements list that needs protection against the check
  
*************** package Tbuild is
*** 182,195 ****
       (Related_Id   : Name_Id;
        Suffix       : Character := ' ';
        Suffix_Index : Int       := 0;
!       Prefix       : Character := ' ')
!       return         Name_Id;
     function New_External_Name
       (Related_Id   : Name_Id;
        Suffix       : String;
        Suffix_Index : Int       := 0;
!       Prefix       : Character := ' ')
!       return         Name_Id;
     --  Builds a new entry in the names table of the form:
     --
     --    [Prefix  &] Related_Id [& Suffix] [& Suffix_Index]
--- 178,189 ----
       (Related_Id   : Name_Id;
        Suffix       : Character := ' ';
        Suffix_Index : Int       := 0;
!       Prefix       : Character := ' ') return Name_Id;
     function New_External_Name
       (Related_Id   : Name_Id;
        Suffix       : String;
        Suffix_Index : Int       := 0;
!       Prefix       : Character := ' ') return Name_Id;
     --  Builds a new entry in the names table of the form:
     --
     --    [Prefix  &] Related_Id [& Suffix] [& Suffix_Index]
*************** package Tbuild is
*** 217,224 ****
  
     function New_External_Name
       (Suffix       : Character;
!       Suffix_Index : Nat)
!       return         Name_Id;
     --  Builds a new entry in the names table of the form
     --    Suffix & Suffix_Index'Image
     --  where Suffix is a single upper case letter other than O,Q,U,W,X and is
--- 211,217 ----
  
     function New_External_Name
       (Suffix       : Character;
!       Suffix_Index : Nat) return Name_Id;
     --  Builds a new entry in the names table of the form
     --    Suffix & Suffix_Index'Image
     --  where Suffix is a single upper case letter other than O,Q,U,W,X and is
*************** package Tbuild is
*** 249,256 ****
  
     function New_Occurrence_Of
       (Def_Id : Entity_Id;
!       Loc    : Source_Ptr)
!       return   Node_Id;
     --  New_Occurrence_Of creates an N_Identifier node which is an
     --  occurrence of the defining identifier which is passed as its
     --  argument. The Entity and Etype of the result are set from
--- 242,248 ----
  
     function New_Occurrence_Of
       (Def_Id : Entity_Id;
!       Loc    : Source_Ptr) return Node_Id;
     --  New_Occurrence_Of creates an N_Identifier node which is an
     --  occurrence of the defining identifier which is passed as its
     --  argument. The Entity and Etype of the result are set from
*************** package Tbuild is
*** 260,275 ****
  
     function New_Reference_To
       (Def_Id : Entity_Id;
!       Loc    : Source_Ptr)
!       return   Node_Id;
     --  This is like New_Occurrence_Of, but it does not set the Etype field.
     --  It is used from the expander, where Etype fields are generally not set,
     --  since they are set when the expanded tree is reanalyzed.
  
     function New_Suffixed_Name
       (Related_Id : Name_Id;
!       Suffix     : String)
!       return       Name_Id;
     --  This function is used to create special suffixed names used by the
     --  debugger. Suffix is a string of upper case letters, used to construct
     --  the required name. For instance, the special type used to record the
--- 252,265 ----
  
     function New_Reference_To
       (Def_Id : Entity_Id;
!       Loc    : Source_Ptr) return Node_Id;
     --  This is like New_Occurrence_Of, but it does not set the Etype field.
     --  It is used from the expander, where Etype fields are generally not set,
     --  since they are set when the expanded tree is reanalyzed.
  
     function New_Suffixed_Name
       (Related_Id : Name_Id;
!       Suffix     : String) return Name_Id;
     --  This function is used to create special suffixed names used by the
     --  debugger. Suffix is a string of upper case letters, used to construct
     --  the required name. For instance, the special type used to record the
*************** package Tbuild is
*** 282,289 ****
  
     function Unchecked_Convert_To
       (Typ  : Entity_Id;
!       Expr : Node_Id)
!       return Node_Id;
     --  Like Convert_To, but if a conversion is actually needed, constructs
     --  an N_Unchecked_Type_Conversion node to do the required conversion.
  
--- 272,278 ----
  
     function Unchecked_Convert_To
       (Typ  : Entity_Id;
!       Expr : Node_Id) return Node_Id;
     --  Like Convert_To, but if a conversion is actually needed, constructs
     --  an N_Unchecked_Type_Conversion node to do the required conversion.
  
diff -Nrcpad gcc-3.4.3/gcc/ada/tracebak.c gcc-4.0.0/gcc/ada/tracebak.c
*** gcc-3.4.3/gcc/ada/tracebak.c	Fri Oct 31 01:08:43 2003
--- gcc-4.0.0/gcc/ada/tracebak.c	Wed Oct 27 13:55:31 2004
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *           Copyright (C) 2000-2003 Ada Core Technologies, Inc.            *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *           Copyright (C) 2000-2004 Ada Core Technologies, Inc.            *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
***************
*** 60,76 ****
  
  extern int __gnat_backtrace (void **, int, void *, void *, int);
  
! /* The point is to provide an implementation of the __gnat_bactrace function
!    above, called by the default implementation of the System.Traceback
!    package.
  
     We first have a series of target specific implementations, each included
     from a separate C file for readability purposes.
  
!    Then comes a somewhat generic implementation based on a set of macro and
!    structure definitions which may be tailored on a per target basis. The
!    presence of a definition for one of these macros (PC_ADJUST) controls
!    wether or not the generic implementation is included.
  
     Finally, there is a default dummy implementation, necessary to make the
     linker happy on platforms where the feature is not supported, but where the
--- 60,78 ----
  
  extern int __gnat_backtrace (void **, int, void *, void *, int);
  
! /* The point is to provide an implementation of the __gnat_backtrace function
!    above, called by the default implementation of the System.Traceback package.
  
     We first have a series of target specific implementations, each included
     from a separate C file for readability purposes.
  
!    Then come two flavors of a generic implementation: one relying on static
!    assumptions about the frame layout, and the other one using the GCC EH
!    infrastructure.  The former uses a whole set of macros and structures which
!    may be tailored on a per target basis, and is activated as soon as
!    USE_GENERIC_UNWINDER is defined.  The latter uses a small subset of the
!    macro definitions and is activated when USE_GCC_UNWINDER is defined. It is
!    only available post GCC 3.3.
  
     Finally, there is a default dummy implementation, necessary to make the
     linker happy on platforms where the feature is not supported, but where the
*************** extern void (*Unlock_Task) (void);
*** 192,197 ****
--- 194,202 ----
  /*------------------------------ PPC AIX -------------------------------*/
  
  #if defined (_AIX)
+ 
+ #define USE_GENERIC_UNWINDER
+ 
  struct layout
  {
    struct layout *next;
*************** struct layout
*** 218,223 ****
--- 223,231 ----
  /*---------------------------- PPC VxWorks------------------------------*/
  
  #elif defined (_ARCH_PPC) && defined (__vxworks)
+ 
+ #define USE_GENERIC_UNWINDER
+ 
  struct layout
  {
    struct layout *next;
*************** struct layout
*** 230,236 ****
  
  #define FRAME_OFFSET 0
  #define PC_ADJUST -4
! #define STOP_FRAME(CURRENT, TOP_STACK) ((CURRENT)->return_address == 0)
  
  #define BASE_SKIP 1
  
--- 238,244 ----
  
  #define FRAME_OFFSET 0
  #define PC_ADJUST -4
! #define STOP_FRAME(CURRENT, TOP_STACK) ((CURRENT)->next == 0)
  
  #define BASE_SKIP 1
  
*************** struct layout
*** 238,243 ****
--- 246,253 ----
  
  #elif defined (sun) && defined (sparc)
  
+ #define USE_GENERIC_UNWINDER
+ 
  /* These definitions are inspired from the Appendix D (Software
     Considerations) of the SPARC V8 architecture manual.  */
  
*************** struct layout
*** 267,292 ****
  /*------------------------------- x86 ----------------------------------*/
  
  #elif defined (i386)
  struct layout
  {
    struct layout *next;
    void *return_address;
  };
  
- #ifdef _WIN32
- /* _image_base__ is the image starting address, no stack addresses should be
-    under this value */
- extern unsigned int _image_base__;
- #define LOWEST_ADDR ((unsigned int) (&_image_base__))
- #else
  #define LOWEST_ADDR 0
- #endif
- 
  #define FRAME_LEVEL 0
  #define FRAME_OFFSET 0
  #define PC_ADJUST -2
  #define STOP_FRAME(CURRENT, TOP_STACK) \
!   ((unsigned int)(CURRENT)->return_address < LOWEST_ADDR \
     || (CURRENT)->return_address == 0|| (CURRENT)->next == 0  \
     || (void *) (CURRENT) < (TOP_STACK))
  
--- 277,305 ----
  /*------------------------------- x86 ----------------------------------*/
  
  #elif defined (i386)
+ 
+ #ifdef __WIN32
+ #include <windows.h>
+ #define IS_BAD_PTR(ptr) (IsBadCodePtr((void *)ptr))
+ #else
+ #define IS_BAD_PTR(ptr) 0
+ #endif
+ 
+ #define USE_GENERIC_UNWINDER
+ 
  struct layout
  {
    struct layout *next;
    void *return_address;
  };
  
  #define LOWEST_ADDR 0
  #define FRAME_LEVEL 0
  #define FRAME_OFFSET 0
  #define PC_ADJUST -2
  #define STOP_FRAME(CURRENT, TOP_STACK) \
!   (IS_BAD_PTR((long)(CURRENT)->return_address) \
!    || (unsigned int)(CURRENT)->return_address < LOWEST_ADDR \
     || (CURRENT)->return_address == 0|| (CURRENT)->next == 0  \
     || (void *) (CURRENT) < (TOP_STACK))
  
*************** extern unsigned int _image_base__;
*** 305,328 ****
  */
  
  #define VALID_STACK_FRAME(ptr) \
!    (((*((ptr) - 3) & 0xff) == 0xe8) \
!     || ((*((ptr) - 5) & 0xff) == 0x9a) \
!     || ((*((ptr) - 1) & 0xff) == 0xff) \
!     || (((*(ptr) & 0xd0ff) == 0xd0ff)))
  
  #endif
  
! /*---------------------------------------*
!  *-- The generic implementation per se --*
!  *---------------------------------------*/
  
! #if defined (PC_ADJUST)
  
  #ifndef CURRENT_STACK_FRAME
  # define CURRENT_STACK_FRAME  ({ char __csf; &__csf; })
  #endif
  
- 
  #ifndef VALID_STACK_FRAME
  #define VALID_STACK_FRAME(ptr) 1
  #endif
--- 318,366 ----
  */
  
  #define VALID_STACK_FRAME(ptr) \
!    (!IS_BAD_PTR(ptr) \
!     && (((*((ptr) - 3) & 0xff) == 0xe8) \
!         || ((*((ptr) - 5) & 0xff) == 0x9a) \
!         || ((*((ptr) - 1) & 0xff) == 0xff) \
!         || (((*(ptr) & 0xd0ff) == 0xd0ff))))
! 
! /*------------------------------- mips-irix -------------------------------*/
! 
! #elif defined (__mips) && defined (__sgi)
! 
! #define USE_GCC_UNWINDER
! #define PC_ADJUST -8
  
  #endif
  
! /*---------------------------------------------------------------------*
!  *--      The post GCC 3.3 infrastructure based implementation       --*
!  *---------------------------------------------------------------------*/
  
! #if defined (USE_GCC_UNWINDER) && (__GNUC__ * 10 + __GNUC_MINOR__ > 33)
! 
! /* Conditioning the inclusion on the GCC version is useful to avoid bootstrap
!    path problems, since the included file refers to post 3.3 functions in
!    libgcc, and the stage1 compiler is unlikely to be linked against a post 3.3
!    library.  It actually disables the support for backtraces in this compiler
!    for targets defining USE_GCC_UNWINDER, which is OK since we don't use the
!    traceback capablity in the compiler anyway.
! 
!    The condition is expressed the way above because we cannot reliably rely on
!    any other macro from the base compiler when compiling stage1.  */
! 
! #include "tb-gcc.c"
! 
! /*------------------------------------------------------------------*
!  *-- The generic implementation based on frame layout assumptions --*
!  *------------------------------------------------------------------*/
! 
! #elif defined (USE_GENERIC_UNWINDER)
  
  #ifndef CURRENT_STACK_FRAME
  # define CURRENT_STACK_FRAME  ({ char __csf; &__csf; })
  #endif
  
  #ifndef VALID_STACK_FRAME
  #define VALID_STACK_FRAME(ptr) 1
  #endif
*************** __gnat_backtrace (void **array,
*** 399,405 ****
  }
  
  #else
! /* No target specific implementation and PC_ADJUST not defined.  */
  
  /*------------------------------*
   *-- The dummy implementation --*
--- 437,445 ----
  }
  
  #else
! 
! /* No target specific implementation and neither USE_GCC_UNWINDER not
!    USE_GCC_UNWINDER defined.  */
  
  /*------------------------------*
   *-- The dummy implementation --*
diff -Nrcpad gcc-3.4.3/gcc/ada/trans.c gcc-4.0.0/gcc/ada/trans.c
*** gcc-3.4.3/gcc/ada/trans.c	Mon Jan 12 11:45:26 2004
--- gcc-4.0.0/gcc/ada/trans.c	Thu Mar 17 19:53:07 2005
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *          Copyright (C) 1992-2004, Free Software Foundation, Inc.         *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *          Copyright (C) 1992-2005, Free Software Foundation, Inc.         *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
***************
*** 31,36 ****
--- 31,37 ----
  #include "tree.h"
  #include "real.h"
  #include "flags.h"
+ #include "toplev.h"
  #include "rtl.h"
  #include "expr.h"
  #include "ggc.h"
***************
*** 38,43 ****
--- 39,45 ----
  #include "except.h"
  #include "debug.h"
  #include "output.h"
+ #include "tree-gimple.h"
  #include "ada.h"
  #include "types.h"
  #include "atree.h"
*************** struct List_Header *List_Headers_Ptr;
*** 68,87 ****
  /* Current filename without path. */
  const char *ref_filename;
  
- /* Flag indicating whether file names are discarded in exception messages */
- int discard_file_names;
- 
  /* If true, then gigi is being called on an analyzed but unexpanded
     tree, and the only purpose of the call is to properly annotate
     types with representation information. */
! int type_annotate_only;
  
! /* List of TREE_LIST nodes representing a block stack.  TREE_VALUE
!    of each gives the variable used for the setjmp buffer in the current
!    block, if any.  TREE_PURPOSE gives the bottom condition for a loop,
!    if this block is for a loop.  The latter is only used to save the tree
!    over GC.  */
! tree gnu_block_stack;
  
  /* List of TREE_LIST nodes representing a stack of exception pointer
     variables.  TREE_VALUE is the VAR_DECL that stores the address of
--- 70,112 ----
  /* Current filename without path. */
  const char *ref_filename;
  
  /* If true, then gigi is being called on an analyzed but unexpanded
     tree, and the only purpose of the call is to properly annotate
     types with representation information. */
! bool type_annotate_only;
  
! /* A structure used to gather together information about a statement group.
!    We use this to gather related statements, for example the "then" part
!    of a IF.  In the case where it represents a lexical scope, we may also
!    have a BLOCK node corresponding to it and/or cleanups.  */
! 
! struct stmt_group GTY((chain_next ("%h.previous"))) {
!   struct stmt_group *previous;	/* Previous code group.  */
!   tree stmt_list;		/* List of statements for this code group. */
!   tree block;			/* BLOCK for this code group, if any. */
!   tree cleanups;		/* Cleanups for this code group, if any.  */
! };
! 
! static GTY(()) struct stmt_group *current_stmt_group;
! 
! /* List of unused struct stmt_group nodes.  */
! static GTY((deletable)) struct stmt_group *stmt_group_free_list;
! 
! /* A structure used to record information on elaboration procedures
!    we've made and need to process.
! 
!    ??? gnat_node should be Node_Id, but gengtype gets confused.  */
! 
! struct elab_info GTY((chain_next ("%h.next"))) {
!   struct elab_info *next;	/* Pointer to next in chain. */
!   tree elab_proc;		/* Elaboration procedure.  */
!   int gnat_node;		/* The N_Compilation_Unit.  */
! };
! 
! static GTY(()) struct elab_info *elab_info_list;
! 
! /* Free list of TREE_LIST nodes used for stacks.  */
! static GTY((deletable)) tree gnu_stack_free_list;
  
  /* List of TREE_LIST nodes representing a stack of exception pointer
     variables.  TREE_VALUE is the VAR_DECL that stores the address of
*************** tree gnu_block_stack;
*** 89,153 ****
     handler.  Not used in the zero-cost case.  */
  static GTY(()) tree gnu_except_ptr_stack;
  
! /* List of TREE_LIST nodes containing pending elaborations lists.
!    used to prevent the elaborations being reclaimed by GC.  */
! static GTY(()) tree gnu_pending_elaboration_lists;
  
  /* Map GNAT tree codes to GCC tree codes for simple expressions.  */
  static enum tree_code gnu_codes[Number_Node_Kinds];
  
! /* Current node being treated, in case gigi_abort called.  */
  Node_Id error_gnat_node;
  
! /* Variable that stores a list of labels to be used as a goto target instead of
!    a return in some functions.  See processing for N_Subprogram_Body.  */
! static GTY(()) tree gnu_return_label_stack;
! 
! static tree tree_transform (Node_Id);
  static void elaborate_all_entities (Node_Id);
  static void process_freeze_entity (Node_Id);
  static void process_inlined_subprograms (Node_Id);
! static void process_decls (List_Id, List_Id, Node_Id, int, int);
  static tree emit_range_check (tree, Node_Id);
  static tree emit_index_check (tree, tree, tree, tree);
  static tree emit_check (tree, tree, int);
! static tree convert_with_check (Entity_Id, tree, int, int, int);
! static int addressable_p (tree);
  static tree assoc_to_constructor (Node_Id, tree);
  static tree extract_values (tree, tree);
  static tree pos_to_constructor (Node_Id, tree, Entity_Id);
  static tree maybe_implicit_deref (tree);
! static tree gnat_stabilize_reference_1 (tree, int);
! static int build_unit_elab (Entity_Id, int, tree);
  
- /* Constants for +0.5 and -0.5 for float-to-integer rounding.  */
- static REAL_VALUE_TYPE dconstp5;
- static REAL_VALUE_TYPE dconstmp5;
  
  /* This is the main program of the back-end.  It sets up all the table
     structures and then generates code.  */
  
  void
! gigi (Node_Id gnat_root,
!       int max_gnat_node,
!       int number_name,
!       struct Node *nodes_ptr,
!       Node_Id *next_node_ptr,
!       Node_Id *prev_node_ptr,
!       struct Elist_Header *elists_ptr,
!       struct Elmt_Item *elmts_ptr,
!       struct String_Entry *strings_ptr,
!       Char_Code *string_chars_ptr,
!       struct List_Header *list_headers_ptr,
!       Int number_units ATTRIBUTE_UNUSED,
!       char *file_info_ptr ATTRIBUTE_UNUSED,
!       Entity_Id standard_integer,
!       Entity_Id standard_long_long_float,
!       Entity_Id standard_exception_type,
        Int gigi_operating_mode)
  {
    tree gnu_standard_long_long_float;
    tree gnu_standard_exception_type;
  
    max_gnat_nodes = max_gnat_node;
    number_names = number_name;
--- 114,187 ----
     handler.  Not used in the zero-cost case.  */
  static GTY(()) tree gnu_except_ptr_stack;
  
! /* List of TREE_LIST nodes used to store the current elaboration procedure
!    decl.  TREE_VALUE is the decl.  */
! static GTY(()) tree gnu_elab_proc_stack;
! 
! /* Variable that stores a list of labels to be used as a goto target instead of
!    a return in some functions.  See processing for N_Subprogram_Body.  */
! static GTY(()) tree gnu_return_label_stack;
! 
! /* List of TREE_LIST nodes representing a stack of LOOP_STMT nodes.
!    TREE_VALUE of each entry is the label of the corresponding LOOP_STMT.  */
! static GTY(()) tree gnu_loop_label_stack;
! 
! /* List of TREE_LIST nodes representing labels for switch statements.
!    TREE_VALUE of each entry is the label at the end of the switch.  */
! static GTY(()) tree gnu_switch_label_stack;
  
  /* Map GNAT tree codes to GCC tree codes for simple expressions.  */
  static enum tree_code gnu_codes[Number_Node_Kinds];
  
! /* Current node being treated, in case abort called.  */
  Node_Id error_gnat_node;
  
! static void Compilation_Unit_to_gnu (Node_Id);
! static void record_code_position (Node_Id);
! static void insert_code_for (Node_Id);
! static void start_stmt_group (void);
! static void add_cleanup (tree);
! static tree mark_visited (tree *, int *, void *);
! static tree mark_unvisited (tree *, int *, void *);
! static tree end_stmt_group (void);
! static void add_stmt_list (List_Id);
! static tree build_stmt_group (List_Id, bool);
! static void push_stack (tree *, tree, tree);
! static void pop_stack (tree *);
! static enum gimplify_status gnat_gimplify_stmt (tree *);
  static void elaborate_all_entities (Node_Id);
  static void process_freeze_entity (Node_Id);
  static void process_inlined_subprograms (Node_Id);
! static void process_decls (List_Id, List_Id, Node_Id, bool, bool);
  static tree emit_range_check (tree, Node_Id);
  static tree emit_index_check (tree, tree, tree, tree);
  static tree emit_check (tree, tree, int);
! static tree convert_with_check (Entity_Id, tree, bool, bool, bool);
! static bool addressable_p (tree);
  static tree assoc_to_constructor (Node_Id, tree);
  static tree extract_values (tree, tree);
  static tree pos_to_constructor (Node_Id, tree, Entity_Id);
  static tree maybe_implicit_deref (tree);
! static tree gnat_stabilize_reference_1 (tree, bool);
! static void annotate_with_node (tree, Node_Id);
  
  
  /* This is the main program of the back-end.  It sets up all the table
     structures and then generates code.  */
  
  void
! gigi (Node_Id gnat_root, int max_gnat_node, int number_name,
!       struct Node *nodes_ptr, Node_Id *next_node_ptr, Node_Id *prev_node_ptr,
!       struct Elist_Header *elists_ptr, struct Elmt_Item *elmts_ptr,
!       struct String_Entry *strings_ptr, Char_Code *string_chars_ptr,
!       struct List_Header *list_headers_ptr, Int number_units ATTRIBUTE_UNUSED,
!       char *file_info_ptr ATTRIBUTE_UNUSED, Entity_Id standard_integer,
!       Entity_Id standard_long_long_float, Entity_Id standard_exception_type,
        Int gigi_operating_mode)
  {
    tree gnu_standard_long_long_float;
    tree gnu_standard_exception_type;
+   struct elab_info *info;
  
    max_gnat_nodes = max_gnat_node;
    number_names = number_name;
*************** gigi (Node_Id gnat_root,
*** 162,167 ****
--- 196,205 ----
  
    type_annotate_only = (gigi_operating_mode == 1);
  
+   init_gnat_to_gnu ();
+   gnat_compute_largest_alignment ();
+   init_dummy_type ();
+ 
    /* If we are just annotating types, give VOID_TYPE zero sizes to avoid
       errors.  */
    if (type_annotate_only)
*************** gigi (Node_Id gnat_root,
*** 170,204 ****
        TYPE_SIZE_UNIT (void_type_node) = size_zero_node;
      }
  
-   /* See if we should discard file names in exception messages.  */
-   discard_file_names = Debug_Flag_NN;
- 
-   if (Nkind (gnat_root) != N_Compilation_Unit)
-     gigi_abort (301);
- 
-   set_lineno (gnat_root, 0);
- 
-   /* Initialize ourselves.  */
-   init_gnat_to_gnu ();
-   init_dummy_type ();
-   init_code_table ();
-   gnat_compute_largest_alignment ();
- 
-   /* Enable GNAT stack checking method if needed */
-   if (!Stack_Check_Probes_On_Target)
-     set_stack_check_libfunc (gen_rtx (SYMBOL_REF, Pmode, "_gnat_stack_check"));
- 
    /* Save the type we made for integer as the type for Standard.Integer.
       Then make the rest of the standard types.  Note that some of these
       may be subtypes.  */
!   save_gnu_tree (Base_Type (standard_integer),
! 		 TYPE_NAME (integer_type_node), 0);
  
    gnu_except_ptr_stack = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE);
  
-   REAL_ARITHMETIC (dconstp5, RDIV_EXPR, dconst1, dconst2);
-   REAL_ARITHMETIC (dconstmp5, RDIV_EXPR, dconstm1, dconst2);
- 
    gnu_standard_long_long_float
      = gnat_to_gnu_entity (Base_Type (standard_long_long_float), NULL_TREE, 0);
    gnu_standard_exception_type
--- 208,221 ----
        TYPE_SIZE_UNIT (void_type_node) = size_zero_node;
      }
  
    /* Save the type we made for integer as the type for Standard.Integer.
       Then make the rest of the standard types.  Note that some of these
       may be subtypes.  */
!   save_gnu_tree (Base_Type (standard_integer), TYPE_NAME (integer_type_node),
! 		 false);
  
    gnu_except_ptr_stack = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE);
  
    gnu_standard_long_long_float
      = gnat_to_gnu_entity (Base_Type (standard_long_long_float), NULL_TREE, 0);
    gnu_standard_exception_type
*************** gigi (Node_Id gnat_root,
*** 218,491 ****
    if (Exception_Mechanism == GCC_ZCX)
      gnat_init_gcc_eh ();
  
!   gnat_to_code (gnat_root);
! }
  
  
! /* This function is the driver of the GNAT to GCC tree transformation process.
!    GNAT_NODE is the root of some gnat tree.  It generates code for that
!    part of the tree.  */
  
  void
! gnat_to_code (Node_Id gnat_node)
  {
!   tree gnu_root;
  
!   /* Save node number in case error */
!   error_gnat_node = gnat_node;
  
!   gnu_root = tree_transform (gnat_node);
  
!   /* If we return a statement, generate code for it.  */
!   if (IS_STMT (gnu_root))
!     expand_expr_stmt (gnu_root);
  
!   /* This should just generate code, not return a value.  If it returns
!      a value, something is wrong.  */
!   else if (gnu_root != error_mark_node)
!     gigi_abort (302);
  }
  
! /* GNAT_NODE is the root of some GNAT tree.  Return the root of the GCC
!    tree corresponding to that GNAT tree.  Normally, no code is generated.
!    We just return an equivalent tree which is used elsewhere to generate
!    code.  */
  
! tree
! gnat_to_gnu (Node_Id gnat_node)
  {
!   tree gnu_root;
  
!   /* Save node number in case error */
!   error_gnat_node = gnat_node;
  
!   gnu_root = tree_transform (gnat_node);
  
!   /* If we got no code as a result, something is wrong.  */
!   if (gnu_root == error_mark_node && ! type_annotate_only)
!     gigi_abort (303);
  
!   return gnu_root;
  }
  
! /* This function is the driver of the GNAT to GCC tree transformation process.
!    It is the entry point of the tree transformer.  GNAT_NODE is the root of
!    some GNAT tree.  Return the root of the corresponding GCC tree or
!    error_mark_node to signal that there is no GCC tree to return.
! 
!    The latter is the case if only code generation actions have to be performed
!    like in the case of if statements, loops, etc.  This routine is wrapped
!    in the above two routines for most purposes.  */
  
  static tree
! tree_transform (Node_Id gnat_node)
  {
!   tree gnu_result = error_mark_node; /* Default to no value. */
!   tree gnu_result_type = void_type_node;
    tree gnu_expr;
!   tree gnu_lhs, gnu_rhs;
!   Node_Id gnat_temp;
!   Entity_Id gnat_temp_type;
  
!   /* Set input_file_name and lineno from the Sloc in the GNAT tree. */
!   set_lineno (gnat_node, 0);
  
!   /* If this is a Statement and we are at top level, we add the statement
!      as an elaboration for a null tree.  That will cause it to be placed
!      in the elaboration procedure.  */
!   if (global_bindings_p ()
!       && ((IN (Nkind (gnat_node), N_Statement_Other_Than_Procedure_Call)
! 	   && Nkind (gnat_node) != N_Null_Statement)
! 	  || Nkind (gnat_node) == N_Procedure_Call_Statement
! 	  || Nkind (gnat_node) == N_Label
! 	  || (Nkind (gnat_node) == N_Handled_Sequence_Of_Statements
! 	      && (Present (Exception_Handlers (gnat_node))
! 		  || Present (At_End_Proc (gnat_node))))
! 	  || ((Nkind (gnat_node) == N_Raise_Constraint_Error
! 	       || Nkind (gnat_node) == N_Raise_Storage_Error
! 	       || Nkind (gnat_node) == N_Raise_Program_Error)
! 	      && (Ekind (Etype (gnat_node)) == E_Void))))
      {
!       add_pending_elaborations (NULL_TREE, make_transform_expr (gnat_node));
  
!       return error_mark_node;
      }
  
!   /* If this node is a non-static subexpression and we are only
!      annotating types, make this into a NULL_EXPR for non-VOID types
!      and error_mark_node for void return types.  But allow
!      N_Identifier since we use it for lots of things, including
!      getting trees for discriminants. */
  
!   if (type_annotate_only
!       && IN (Nkind (gnat_node), N_Subexpr)
!       && Nkind (gnat_node) != N_Identifier
!       && ! Compile_Time_Known_Value (gnat_node))
      {
!       gnu_result_type = get_unpadded_type (Etype (gnat_node));
  
!       if (TREE_CODE (gnu_result_type) == VOID_TYPE)
! 	return error_mark_node;
        else
! 	return build1 (NULL_EXPR, gnu_result_type,
! 		       build_call_raise (CE_Range_Check_Failed));
      }
  
!   switch (Nkind (gnat_node))
      {
!       /********************************/
!       /* Chapter 2: Lexical Elements: */
!       /********************************/
  
      case N_Identifier:
-     case N_Expanded_Name:
      case N_Operator_Symbol:
!     case N_Defining_Identifier:
  
!       /* If the Etype of this node does not equal the Etype of the
! 	 Entity, something is wrong with the entity map, probably in
!          generic instantiation. However, this does not apply to
!          types. Since we sometime have strange Ekind's, just do
!          this test for objects. Also, if the Etype of the Entity is
!          private, the Etype of the N_Identifier is allowed to be the full
!          type and also we consider a packed array type to be the same as
!          the original type. Similarly, a class-wide type is equivalent
!          to a subtype of itself. Finally, if the types are Itypes,
!          one may be a copy of the other, which is also legal. */
  
!       gnat_temp = (Nkind (gnat_node) == N_Defining_Identifier
! 		   ? gnat_node : Entity (gnat_node));
!       gnat_temp_type = Etype (gnat_temp);
  
!       if (Etype (gnat_node) != gnat_temp_type
!           && ! (Is_Packed (gnat_temp_type)
!                 && Etype (gnat_node) == Packed_Array_Type (gnat_temp_type))
!           && ! (Is_Class_Wide_Type (Etype (gnat_node)))
!           && ! (IN (Ekind (gnat_temp_type), Private_Kind)
!                 && Present (Full_View (gnat_temp_type))
!                 && ((Etype (gnat_node) == Full_View (gnat_temp_type))
!                     || (Is_Packed (Full_View (gnat_temp_type))
!                         && Etype (gnat_node) ==
!                              Packed_Array_Type (Full_View (gnat_temp_type)))))
!           && (!Is_Itype (Etype (gnat_node)) || !Is_Itype (gnat_temp_type))
!           && (Ekind (gnat_temp) == E_Variable
! 	      || Ekind (gnat_temp) == E_Component
! 	      || Ekind (gnat_temp) == E_Constant
! 	      || Ekind (gnat_temp) == E_Loop_Parameter
! 	      || IN (Ekind (gnat_temp), Formal_Kind)))
! 	gigi_abort (304);
  
!       /* If this is a reference to a deferred constant whose partial view
!          is an unconstrained private type, the proper type is on the full
!          view of the constant, not on the full view of the type, which may
!          be unconstrained.
  
!          This may be a reference to a type, for example in the prefix of the
!          attribute Position, generated for dispatching code (see Make_DT in
!          exp_disp,adb). In that case we need the type itself, not is parent,
!          in particular if it is a derived type  */
  
!       if (Is_Private_Type (gnat_temp_type)
! 	  && Has_Unknown_Discriminants (gnat_temp_type)
! 	  && Present (Full_View (gnat_temp))
!           && ! Is_Type (gnat_temp))
  	{
! 	  gnat_temp = Full_View (gnat_temp);
! 	  gnat_temp_type = Etype (gnat_temp);
! 	  gnu_result_type = get_unpadded_type (gnat_temp_type);
  	}
!       else
  	{
! 	  /* Expand the type of this identitier first, in case it is
! 	     an enumeral literal, which only get made when the type
! 	     is expanded.  There is no order-of-elaboration issue here.
! 	     We want to use the Actual_Subtype if it has already been
! 	     elaborated, otherwise the Etype.  Avoid using Actual_Subtype
! 	     for packed arrays to simplify things.  */
! 	  if ((Ekind (gnat_temp) == E_Constant
! 	       || Ekind (gnat_temp) == E_Variable || Is_Formal (gnat_temp))
! 	      && ! (Is_Array_Type (Etype (gnat_temp))
! 		    && Present (Packed_Array_Type (Etype (gnat_temp))))
! 	      && Present (Actual_Subtype (gnat_temp))
! 	      && present_gnu_tree (Actual_Subtype (gnat_temp)))
! 	    gnat_temp_type = Actual_Subtype (gnat_temp);
  	  else
! 	    gnat_temp_type = Etype (gnat_node);
  
! 	  gnu_result_type = get_unpadded_type (gnat_temp_type);
  	}
  
!       gnu_result = gnat_to_gnu_entity (gnat_temp, NULL_TREE, 0);
  
!       /* If we are in an exception handler, force this variable into memory
! 	 to ensure optimization does not remove stores that appear
! 	 redundant but are actually needed in case an exception occurs.
  
! 	 ??? Note that we need not do this if the variable is declared within
! 	 the handler, only if it is referenced in the handler and declared
! 	 in an enclosing block, but we have no way of testing that
! 	 right now.  */
!       if (TREE_VALUE (gnu_except_ptr_stack) != 0)
  	{
! 	  gnat_mark_addressable (gnu_result);
! 	  flush_addressof (gnu_result);
  	}
  
!       /* Some objects (such as parameters passed by reference, globals of
! 	 variable size, and renamed objects) actually represent the address
! 	 of the object.  In that case, we must do the dereference.  Likewise,
! 	 deal with parameters to foreign convention subprograms.  Call fold
! 	 here since GNU_RESULT may be a CONST_DECL.  */
!       if (DECL_P (gnu_result)
! 	  && (DECL_BY_REF_P (gnu_result)
! 	      || (TREE_CODE (gnu_result) == PARM_DECL
! 		  && DECL_BY_COMPONENT_PTR_P (gnu_result))))
  	{
! 	  int ro = DECL_POINTS_TO_READONLY_P (gnu_result);
  
! 	  if (TREE_CODE (gnu_result) == PARM_DECL
! 	      && DECL_BY_COMPONENT_PTR_P (gnu_result))
! 	    gnu_result = convert (build_pointer_type (gnu_result_type),
! 				  gnu_result);
  
! 	  gnu_result = build_unary_op (INDIRECT_REF, NULL_TREE,
! 				       fold (gnu_result));
! 	  TREE_READONLY (gnu_result) = TREE_STATIC (gnu_result) = ro;
  	}
  
!       /* The GNAT tree has the type of a function as the type of its result.
! 	 Also use the type of the result if the Etype is a subtype which
! 	 is nominally unconstrained.  But remove any padding from the
! 	 resulting type.  */
!       if (TREE_CODE (TREE_TYPE (gnu_result)) == FUNCTION_TYPE
! 	  || Is_Constr_Subt_For_UN_Aliased (gnat_temp_type))
  	{
! 	  gnu_result_type = TREE_TYPE (gnu_result);
! 	  if (TREE_CODE (gnu_result_type) == RECORD_TYPE
! 	      && TYPE_IS_PADDING_P (gnu_result_type))
! 	    gnu_result_type = TREE_TYPE (TYPE_FIELDS (gnu_result_type));
  	}
  
!       /* We always want to return the underlying INTEGER_CST for an
! 	 enumeration literal to avoid the need to call fold in lots
! 	 of places.  But don't do this is the parent will be taking
! 	 the address of this object.  */
!       if (TREE_CODE (gnu_result) == CONST_DECL)
  	{
! 	  gnat_temp = Parent (gnat_node);
! 	  if (DECL_CONST_CORRESPONDING_VAR (gnu_result) == 0
! 	      || (Nkind (gnat_temp) != N_Reference
! 		  && ! (Nkind (gnat_temp) == N_Attribute_Reference
! 			&& ((Get_Attribute_Id (Attribute_Name (gnat_temp))
! 			     == Attr_Address)
! 			    || (Get_Attribute_Id (Attribute_Name (gnat_temp))
! 				== Attr_Access)
! 			    || (Get_Attribute_Id (Attribute_Name (gnat_temp))
! 				== Attr_Unchecked_Access)
! 			    || (Get_Attribute_Id (Attribute_Name (gnat_temp))
! 				== Attr_Unrestricted_Access)))))
! 	    gnu_result = DECL_INITIAL (gnu_result);
  	}
        break;
  
      case N_Integer_Literal:
--- 235,2517 ----
    if (Exception_Mechanism == GCC_ZCX)
      gnat_init_gcc_eh ();
  
!   gcc_assert (Nkind (gnat_root) == N_Compilation_Unit);
!   Compilation_Unit_to_gnu (gnat_root);
! 
!   /* Now see if we have any elaboration procedures to deal with. */
!   for (info = elab_info_list; info; info = info->next)
!     {
!       tree gnu_body = DECL_SAVED_TREE (info->elab_proc);
!       tree gnu_stmts;
! 
!       /* Mark everything we have as not visited.  */
!       walk_tree_without_duplicates (&gnu_body, mark_unvisited, NULL);
! 
!       /* Set the current function to be the elaboration procedure and gimplify
! 	 what we have.  */
!       current_function_decl = info->elab_proc;
!       gimplify_body (&gnu_body, info->elab_proc, true);
! 
!       /* We should have a BIND_EXPR, but it may or may not have any statements
! 	 in it.  If it doesn't have any, we have nothing to do.  */
!       gnu_stmts = gnu_body;
!       if (TREE_CODE (gnu_stmts) == BIND_EXPR)
! 	gnu_stmts = BIND_EXPR_BODY (gnu_stmts);
  
+       /* If there are no statements, there is no elaboration code.  */
+       if (!gnu_stmts || !STATEMENT_LIST_HEAD (gnu_stmts))
+ 	Set_Has_No_Elaboration_Code (info->gnat_node, 1);
+       else
+ 	{
+ 	  /* Otherwise, compile the function.  Note that we'll be gimplifying
+ 	     it twice, but that's fine for the nodes we use.  */
+ 	  begin_subprog_body (info->elab_proc);
+ 	  end_subprog_body (gnu_body);
+ 	}
+     }
+ }
  
! /* Perform initializations for this module.  */
  
  void
! gnat_init_stmt_group ()
  {
!   /* Initialize ourselves.  */
!   init_code_table ();
!   start_stmt_group ();
  
!   /* Enable GNAT stack checking method if needed */
!   if (!Stack_Check_Probes_On_Target)
!     set_stack_check_libfunc (gen_rtx_SYMBOL_REF (Pmode, "_gnat_stack_check"));
  
!   gcc_assert (Exception_Mechanism != Front_End_ZCX);
! }
! 
! /* Subroutine of gnat_to_gnu to translate gnat_node, an N_Identifier,
!    to a GCC tree, which is returned.  GNU_RESULT_TYPE_P is a pointer to
!    where we should place the result type.  */
  
! static tree
! Identifier_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p)
! {
!   tree gnu_result_type;
!   tree gnu_result;
!   Node_Id gnat_temp, gnat_temp_type;
  
!   /* If the Etype of this node does not equal the Etype of the Entity,
!      something is wrong with the entity map, probably in generic
!      instantiation. However, this does not apply to types. Since we sometime
!      have strange Ekind's, just do this test for objects. Also, if the Etype of
!      the Entity is private, the Etype of the N_Identifier is allowed to be the
!      full type and also we consider a packed array type to be the same as the
!      original type. Similarly, a class-wide type is equivalent to a subtype of
!      itself. Finally, if the types are Itypes, one may be a copy of the other,
!      which is also legal.  */
!   gnat_temp = (Nkind (gnat_node) == N_Defining_Identifier
! 	       ? gnat_node : Entity (gnat_node));
!   gnat_temp_type = Etype (gnat_temp);
! 
!   gcc_assert (Etype (gnat_node) == gnat_temp_type
! 	      || (Is_Packed (gnat_temp_type)
! 		  && Etype (gnat_node) == Packed_Array_Type (gnat_temp_type))
! 	      || (Is_Class_Wide_Type (Etype (gnat_node)))
! 	      || (IN (Ekind (gnat_temp_type), Private_Kind)
! 		  && Present (Full_View (gnat_temp_type))
! 		  && ((Etype (gnat_node) == Full_View (gnat_temp_type))
! 		      || (Is_Packed (Full_View (gnat_temp_type))
! 			  && (Etype (gnat_node)
! 			      == Packed_Array_Type (Full_View
! 						    (gnat_temp_type))))))
! 	      || (Is_Itype (Etype (gnat_node)) && Is_Itype (gnat_temp_type))
! 	      || !(Ekind (gnat_temp) == E_Variable
! 		   || Ekind (gnat_temp) == E_Component
! 		   || Ekind (gnat_temp) == E_Constant
! 		   || Ekind (gnat_temp) == E_Loop_Parameter
! 		   || IN (Ekind (gnat_temp), Formal_Kind)));
! 
!   /* If this is a reference to a deferred constant whose partial view is an
!      unconstrained private type, the proper type is on the full view of the
!      constant, not on the full view of the type, which may be unconstrained.
! 
!      This may be a reference to a type, for example in the prefix of the
!      attribute Position, generated for dispatching code (see Make_DT in
!      exp_disp,adb). In that case we need the type itself, not is parent,
!      in particular if it is a derived type  */
!   if (Is_Private_Type (gnat_temp_type)
!       && Has_Unknown_Discriminants (gnat_temp_type)
!       && Present (Full_View (gnat_temp))
!       && !Is_Type (gnat_temp))
!     {
!       gnat_temp = Full_View (gnat_temp);
!       gnat_temp_type = Etype (gnat_temp);
!       gnu_result_type = get_unpadded_type (gnat_temp_type);
!     }
!   else
!     {
!       /* Expand the type of this identitier first, in case it is an enumeral
! 	 literal, which only get made when the type is expanded.  There is no
! 	 order-of-elaboration issue here.  We want to use the Actual_Subtype if
! 	 it has already been elaborated, otherwise the Etype.  Avoid using
! 	 Actual_Subtype for packed arrays to simplify things.  */
!       if ((Ekind (gnat_temp) == E_Constant
! 	   || Ekind (gnat_temp) == E_Variable || Is_Formal (gnat_temp))
! 	  && !(Is_Array_Type (Etype (gnat_temp))
! 	       && Present (Packed_Array_Type (Etype (gnat_temp))))
! 	  && Present (Actual_Subtype (gnat_temp))
! 	  && present_gnu_tree (Actual_Subtype (gnat_temp)))
! 	gnat_temp_type = Actual_Subtype (gnat_temp);
!       else
! 	gnat_temp_type = Etype (gnat_node);
! 
!       gnu_result_type = get_unpadded_type (gnat_temp_type);
!     }
! 
!   gnu_result = gnat_to_gnu_entity (gnat_temp, NULL_TREE, 0);
! 
!   /* If we are in an exception handler, force this variable into memory to
!      ensure optimization does not remove stores that appear redundant but are
!      actually needed in case an exception occurs.
! 
!      ??? Note that we need not do this if the variable is declared within the
!      handler, only if it is referenced in the handler and declared in an
!      enclosing block, but we have no way of testing that right now.
! 
!      ??? Also, for now all we can do is make it volatile.  But we only
!      do this for SJLJ.  */
!   if (TREE_VALUE (gnu_except_ptr_stack)
!       && TREE_CODE (gnu_result) == VAR_DECL)
!     TREE_THIS_VOLATILE (gnu_result) = TREE_SIDE_EFFECTS (gnu_result) = 1;
! 
!   /* Some objects (such as parameters passed by reference, globals of
!      variable size, and renamed objects) actually represent the address
!      of the object.  In that case, we must do the dereference.  Likewise,
!      deal with parameters to foreign convention subprograms.  Call fold
!      here since GNU_RESULT may be a CONST_DECL.  */
!   if (DECL_P (gnu_result)
!       && (DECL_BY_REF_P (gnu_result)
! 	  || (TREE_CODE (gnu_result) == PARM_DECL
! 	      && DECL_BY_COMPONENT_PTR_P (gnu_result))))
!     {
!       bool ro = DECL_POINTS_TO_READONLY_P (gnu_result);
!       tree initial;
! 
!       if (TREE_CODE (gnu_result) == PARM_DECL
! 	  && DECL_BY_COMPONENT_PTR_P (gnu_result))
! 	gnu_result
! 	  = build_unary_op (INDIRECT_REF, NULL_TREE,
! 			    convert (build_pointer_type (gnu_result_type),
! 				     gnu_result));
! 
!       /* If the object is constant, we try to do the dereference directly
! 	 through the DECL_INITIAL.  This is actually required in order to get
! 	 correct aliasing information for renamed objects that are components
! 	 of non-aliased aggregates, because the type of the renamed object and
! 	 that of the aggregate don't alias.
! 
! 	 Note that we expect the initial value to have been stabilized.
! 	 If it contains e.g. a variable reference, we certainly don't want
! 	 to re-evaluate the variable each time the renaming is used.
! 
! 	 Stabilization is currently not performed at the global level but
! 	 create_var_decl avoids setting DECL_INITIAL if the value is not
! 	 constant then, and we get to the pointer dereference below.
! 
! 	 ??? Couldn't the aliasing issue show up again in this case ?
! 	 There is no obvious reason why not.  */
!       else if (TREE_READONLY (gnu_result)
! 	       && DECL_INITIAL (gnu_result)
! 	       /* Strip possible conversion to reference type.  */
! 	       && ((initial = TREE_CODE (DECL_INITIAL (gnu_result))
! 		    == NOP_EXPR
! 		    ? TREE_OPERAND (DECL_INITIAL (gnu_result), 0)
! 		    : DECL_INITIAL (gnu_result), 1))
! 	       && TREE_CODE (initial) == ADDR_EXPR
! 	       && (TREE_CODE (TREE_OPERAND (initial, 0)) == ARRAY_REF
! 		   || (TREE_CODE (TREE_OPERAND (initial, 0))
! 		       == COMPONENT_REF)))
! 	gnu_result = TREE_OPERAND (initial, 0);
!       else
! 	gnu_result = build_unary_op (INDIRECT_REF, NULL_TREE,
! 				     fold (gnu_result));
! 
!       TREE_READONLY (gnu_result) = TREE_STATIC (gnu_result) = ro;
!     }
! 
!   /* The GNAT tree has the type of a function as the type of its result.  Also
!      use the type of the result if the Etype is a subtype which is nominally
!      unconstrained.  But remove any padding from the resulting type.  */
!   if (TREE_CODE (TREE_TYPE (gnu_result)) == FUNCTION_TYPE
!       || Is_Constr_Subt_For_UN_Aliased (gnat_temp_type))
!     {
!       gnu_result_type = TREE_TYPE (gnu_result);
!       if (TREE_CODE (gnu_result_type) == RECORD_TYPE
! 	  && TYPE_IS_PADDING_P (gnu_result_type))
! 	gnu_result_type = TREE_TYPE (TYPE_FIELDS (gnu_result_type));
!     }
! 
!   /* We always want to return the underlying INTEGER_CST for an enumeration
!      literal to avoid the need to call fold in lots of places.  But don't do
!      this is the parent will be taking the address of this object.  */
!   if (TREE_CODE (gnu_result) == CONST_DECL)
!     {
!       gnat_temp = Parent (gnat_node);
!       if (!DECL_CONST_CORRESPONDING_VAR (gnu_result)
! 	  || (Nkind (gnat_temp) != N_Reference
! 	      && !(Nkind (gnat_temp) == N_Attribute_Reference
! 		   && ((Get_Attribute_Id (Attribute_Name (gnat_temp))
! 			== Attr_Address)
! 		       || (Get_Attribute_Id (Attribute_Name (gnat_temp))
! 			   == Attr_Access)
! 		       || (Get_Attribute_Id (Attribute_Name (gnat_temp))
! 			    == Attr_Unchecked_Access)
! 		       || (Get_Attribute_Id (Attribute_Name (gnat_temp))
! 			   == Attr_Unrestricted_Access)))))
! 	gnu_result = DECL_INITIAL (gnu_result);
!     }
! 
!   *gnu_result_type_p = gnu_result_type;
!   return gnu_result;
  }
+ 
+ /* Subroutine of gnat_to_gnu to process gnat_node, an N_Pragma.  Return
+    any statements we generate.  */
  
! static tree
! Pragma_to_gnu (Node_Id gnat_node)
! {
!   Node_Id gnat_temp;
!   tree gnu_result = alloc_stmt_list ();
  
!   /* Check for (and ignore) unrecognized pragma and do nothing if we are just
!      annotating types.  */
!   if (type_annotate_only || !Is_Pragma_Name (Chars (gnat_node)))
!     return gnu_result;
! 
!   switch (Get_Pragma_Id (Chars (gnat_node)))
!     {
!     case Pragma_Inspection_Point:
!       /* Do nothing at top level: all such variables are already viewable.  */
!       if (global_bindings_p ())
! 	break;
! 
!       for (gnat_temp = First (Pragma_Argument_Associations (gnat_node));
! 	   Present (gnat_temp);
! 	   gnat_temp = Next (gnat_temp))
! 	{
! 	  tree gnu_expr = gnat_to_gnu (Expression (gnat_temp));
! 
! 	  if (TREE_CODE (gnu_expr) == UNCONSTRAINED_ARRAY_REF)
! 	    gnu_expr = TREE_OPERAND (gnu_expr, 0);
! 
! 	  gnu_expr = build1 (USE_STMT, void_type_node, gnu_expr);
! 	  annotate_with_node (gnu_expr, gnat_node);
! 	  append_to_statement_list (gnu_expr, &gnu_result);
! 	}
!       break;
! 
!     case Pragma_Optimize:
!       switch (Chars (Expression
! 		     (First (Pragma_Argument_Associations (gnat_node)))))
! 	{
! 	case Name_Time:  case Name_Space:
! 	  if (optimize == 0)
! 	    post_error ("insufficient -O value?", gnat_node);
! 	  break;
! 
! 	case Name_Off:
! 	  if (optimize != 0)
! 	    post_error ("must specify -O0?", gnat_node);
! 	  break;
! 
! 	default:
! 	  gcc_unreachable ();
! 	}
!       break;
! 
!     case Pragma_Reviewable:
!       if (write_symbols == NO_DEBUG)
! 	post_error ("must specify -g?", gnat_node);
!       break;
!     }
! 
!   return gnu_result;
! }
! /* Subroutine of gnat_to_gnu to translate gnat_node, an N_Attribute,
!    to a GCC tree, which is returned.  GNU_RESULT_TYPE_P is a pointer to
!    where we should place the result type.  ATTRIBUTE is the attribute ID.  */
! 
! static tree
! Attribute_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, int attribute)
  {
!   tree gnu_result = error_mark_node;
!   tree gnu_result_type;
!   tree gnu_expr;
!   bool prefix_unused = false;
!   tree gnu_prefix = gnat_to_gnu (Prefix (gnat_node));
!   tree gnu_type = TREE_TYPE (gnu_prefix);
  
!   /* If the input is a NULL_EXPR, make a new one.  */
!   if (TREE_CODE (gnu_prefix) == NULL_EXPR)
!     {
!       *gnu_result_type_p = get_unpadded_type (Etype (gnat_node));
!       return build1 (NULL_EXPR, *gnu_result_type_p,
! 		     TREE_OPERAND (gnu_prefix, 0));
!     }
  
!   switch (attribute)
!     {
!     case Attr_Pos:
!     case Attr_Val:
!       /* These are just conversions until since representation clauses for
! 	 enumerations are handled in the front end.  */
!       {
! 	bool checkp = Do_Range_Check (First (Expressions (gnat_node)));
  
! 	gnu_result = gnat_to_gnu (First (Expressions (gnat_node)));
! 	gnu_result_type = get_unpadded_type (Etype (gnat_node));
! 	gnu_result = convert_with_check (Etype (gnat_node), gnu_result,
! 					 checkp, checkp, true);
!       }
!       break;
  
!     case Attr_Pred:
!     case Attr_Succ:
!       /* These just add or subject the constant 1.  Representation clauses for
! 	 enumerations are handled in the front-end.  */
!       gnu_expr = gnat_to_gnu (First (Expressions (gnat_node)));
!       gnu_result_type = get_unpadded_type (Etype (gnat_node));
! 
!       if (Do_Range_Check (First (Expressions (gnat_node))))
! 	{
! 	  gnu_expr = protect_multiple_eval (gnu_expr);
! 	  gnu_expr
! 	    = emit_check
! 	      (build_binary_op (EQ_EXPR, integer_type_node,
! 				gnu_expr,
! 				attribute == Attr_Pred
! 				? TYPE_MIN_VALUE (gnu_result_type)
! 				: TYPE_MAX_VALUE (gnu_result_type)),
! 	       gnu_expr, CE_Range_Check_Failed);
! 	}
! 
!       gnu_result
! 	= build_binary_op (attribute == Attr_Pred
! 			   ? MINUS_EXPR : PLUS_EXPR,
! 			   gnu_result_type, gnu_expr,
! 			   convert (gnu_result_type, integer_one_node));
!       break;
! 
!     case Attr_Address:
!     case Attr_Unrestricted_Access:
!       /* Conversions don't change something's address but can cause us to miss
! 	 the COMPONENT_REF case below, so strip them off.  */
!       gnu_prefix = remove_conversions (gnu_prefix,
! 				       !Must_Be_Byte_Aligned (gnat_node));
! 
!       /* If we are taking 'Address of an unconstrained object, this is the
! 	 pointer to the underlying array.  */
!       gnu_prefix = maybe_unconstrained_array (gnu_prefix);
! 
!       /* ... fall through ... */
! 
!     case Attr_Access:
!     case Attr_Unchecked_Access:
!     case Attr_Code_Address:
!       gnu_result_type = get_unpadded_type (Etype (gnat_node));
!       gnu_result
! 	= build_unary_op (((attribute == Attr_Address
! 			    || attribute == Attr_Unrestricted_Access)
! 			   && !Must_Be_Byte_Aligned (gnat_node))
! 			  ? ATTR_ADDR_EXPR : ADDR_EXPR,
! 			  gnu_result_type, gnu_prefix);
! 
!       /* For 'Code_Address, find an inner ADDR_EXPR and mark it so that we
! 	 don't try to build a trampoline.  */
!       if (attribute == Attr_Code_Address)
! 	{
! 	  for (gnu_expr = gnu_result;
! 	       TREE_CODE (gnu_expr) == NOP_EXPR
! 	       || TREE_CODE (gnu_expr) == CONVERT_EXPR;
! 	       gnu_expr = TREE_OPERAND (gnu_expr, 0))
! 	    TREE_CONSTANT (gnu_expr) = 1;
! 
! 	  if (TREE_CODE (gnu_expr) == ADDR_EXPR)
! 	    TREE_STATIC (gnu_expr) = TREE_CONSTANT (gnu_expr) = 1;
! 	}
!       break;
! 
!     case Attr_Pool_Address:
!       {
! 	tree gnu_obj_type;
! 	tree gnu_ptr = gnu_prefix;
! 
! 	gnu_result_type = get_unpadded_type (Etype (gnat_node));
! 
! 	/* If this is an unconstrained array, we know the object must have been
! 	   allocated with the template in front of the object.  So compute the
! 	   template address.*/
! 	if (TYPE_FAT_POINTER_P (TREE_TYPE (gnu_ptr)))
! 	  gnu_ptr
! 	    = convert (build_pointer_type
! 		       (TYPE_OBJECT_RECORD_TYPE
! 			(TYPE_UNCONSTRAINED_ARRAY (TREE_TYPE (gnu_ptr)))),
! 		       gnu_ptr);
! 
! 	gnu_obj_type = TREE_TYPE (TREE_TYPE (gnu_ptr));
! 	if (TREE_CODE (gnu_obj_type) == RECORD_TYPE
! 	    && TYPE_CONTAINS_TEMPLATE_P (gnu_obj_type))
! 	  {
! 	    tree gnu_char_ptr_type = build_pointer_type (char_type_node);
! 	    tree gnu_pos = byte_position (TYPE_FIELDS (gnu_obj_type));
! 	    tree gnu_byte_offset
! 	      = convert (gnu_char_ptr_type,
! 			 size_diffop (size_zero_node, gnu_pos));
! 
! 	    gnu_ptr = convert (gnu_char_ptr_type, gnu_ptr);
! 	    gnu_ptr = build_binary_op (MINUS_EXPR, gnu_char_ptr_type,
! 				       gnu_ptr, gnu_byte_offset);
! 	  }
! 
! 	gnu_result = convert (gnu_result_type, gnu_ptr);
!       }
!       break;
! 
!     case Attr_Size:
!     case Attr_Object_Size:
!     case Attr_Value_Size:
!     case Attr_Max_Size_In_Storage_Elements:
!       gnu_expr = gnu_prefix;
! 
!       /* Remove NOPS from gnu_expr and conversions from gnu_prefix.
! 	 We only use GNU_EXPR to see if a COMPONENT_REF was involved. */
!       while (TREE_CODE (gnu_expr) == NOP_EXPR)
! 	gnu_expr = TREE_OPERAND (gnu_expr, 0)
! 	  ;
! 
!       gnu_prefix = remove_conversions (gnu_prefix, true);
!       prefix_unused = true;
!       gnu_type = TREE_TYPE (gnu_prefix);
! 
!       /* Replace an unconstrained array type with the type of the underlying
! 	 array.  We can't do this with a call to maybe_unconstrained_array
! 	 since we may have a TYPE_DECL.  For 'Max_Size_In_Storage_Elements,
! 	 use the record type that will be used to allocate the object and its
! 	 template.  */
!       if (TREE_CODE (gnu_type) == UNCONSTRAINED_ARRAY_TYPE)
! 	{
! 	  gnu_type = TYPE_OBJECT_RECORD_TYPE (gnu_type);
! 	  if (attribute != Attr_Max_Size_In_Storage_Elements)
! 	    gnu_type = TREE_TYPE (TREE_CHAIN (TYPE_FIELDS (gnu_type)));
! 	}
! 
!       /* If we're looking for the size of a field, return the field size.
! 	 Otherwise, if the prefix is an object, or if 'Object_Size or
! 	 'Max_Size_In_Storage_Elements has been specified, the result is the
! 	 GCC size of the type. Otherwise, the result is the RM_Size of the
! 	 type.  */
!       if (TREE_CODE (gnu_prefix) == COMPONENT_REF)
! 	gnu_result = DECL_SIZE (TREE_OPERAND (gnu_prefix, 1));
!       else if (TREE_CODE (gnu_prefix) != TYPE_DECL
! 	       || attribute == Attr_Object_Size
! 	       || attribute == Attr_Max_Size_In_Storage_Elements)
! 	{
! 	  /* If this is a padded type, the GCC size isn't relevant to the
! 	     programmer.  Normally, what we want is the RM_Size, which was set
! 	     from the specified size, but if it was not set, we want the size
! 	     of the relevant field.  Using the MAX of those two produces the
! 	     right result in all case.  Don't use the size of the field if it's
! 	     a self-referential type, since that's never what's wanted.  */
! 	  if (TREE_CODE (gnu_type) == RECORD_TYPE
! 	      && TYPE_IS_PADDING_P (gnu_type)
! 	      && TREE_CODE (gnu_expr) == COMPONENT_REF)
! 	    {
! 	      gnu_result = rm_size (gnu_type);
! 	      if (!(CONTAINS_PLACEHOLDER_P
! 		    (DECL_SIZE (TREE_OPERAND (gnu_expr, 1)))))
! 		gnu_result
! 		  = size_binop (MAX_EXPR, gnu_result,
! 				DECL_SIZE (TREE_OPERAND (gnu_expr, 1)));
! 	    }
! 	  else
! 	    gnu_result = TYPE_SIZE (gnu_type);
! 	}
!       else
! 	gnu_result = rm_size (gnu_type);
! 
!       gcc_assert (gnu_result);
! 
!       /* Deal with a self-referential size by returning the maximum size for a
! 	 type and by qualifying the size with the object for 'Size of an
! 	 object.  */
!       if (CONTAINS_PLACEHOLDER_P (gnu_result))
! 	{
! 	  if (TREE_CODE (gnu_prefix) != TYPE_DECL)
! 	    gnu_result = substitute_placeholder_in_expr (gnu_result,
! 							 gnu_expr);
! 	  else
! 	    gnu_result = max_size (gnu_result, true);
! 	}
! 
!       /* If the type contains a template, subtract its size.  */
!       if (TREE_CODE (gnu_type) == RECORD_TYPE
! 	  && TYPE_CONTAINS_TEMPLATE_P (gnu_type))
! 	gnu_result = size_binop (MINUS_EXPR, gnu_result,
! 				 DECL_SIZE (TYPE_FIELDS (gnu_type)));
! 
!       gnu_result_type = get_unpadded_type (Etype (gnat_node));
! 
!       /* Always perform division using unsigned arithmetic as the size cannot
! 	 be negative, but may be an overflowed positive value. This provides
! 	 correct results for sizes up to 512 MB.
! 
! 	 ??? Size should be calculated in storage elements directly.  */
! 
!       if (attribute == Attr_Max_Size_In_Storage_Elements)
! 	gnu_result = convert (sizetype,
! 			      fold (build2 (CEIL_DIV_EXPR, bitsizetype,
! 					    gnu_result, bitsize_unit_node)));
!       break;
! 
!     case Attr_Alignment:
!       if (TREE_CODE (gnu_prefix) == COMPONENT_REF
! 	  && (TREE_CODE (TREE_TYPE (TREE_OPERAND (gnu_prefix, 0)))
! 	      == RECORD_TYPE)
! 	  && (TYPE_IS_PADDING_P (TREE_TYPE (TREE_OPERAND (gnu_prefix, 0)))))
! 	gnu_prefix = TREE_OPERAND (gnu_prefix, 0);
! 
!       gnu_type = TREE_TYPE (gnu_prefix);
!       gnu_result_type = get_unpadded_type (Etype (gnat_node));
!       prefix_unused = true;
! 
!       if (TREE_CODE (gnu_prefix) == COMPONENT_REF)
! 	gnu_result = size_int (DECL_ALIGN (TREE_OPERAND (gnu_prefix, 1)));
!       else
! 	gnu_result = size_int (TYPE_ALIGN (gnu_type) / BITS_PER_UNIT);
!       break;
! 
!     case Attr_First:
!     case Attr_Last:
!     case Attr_Range_Length:
!       prefix_unused = true;
! 
!       if (INTEGRAL_TYPE_P (gnu_type) || TREE_CODE (gnu_type) == REAL_TYPE)
! 	{
! 	  gnu_result_type = get_unpadded_type (Etype (gnat_node));
! 
! 	  if (attribute == Attr_First)
! 	    gnu_result = TYPE_MIN_VALUE (gnu_type);
! 	  else if (attribute == Attr_Last)
! 	    gnu_result = TYPE_MAX_VALUE (gnu_type);
! 	  else
! 	    gnu_result
! 	      = build_binary_op
! 		(MAX_EXPR, get_base_type (gnu_result_type),
! 		 build_binary_op
! 		 (PLUS_EXPR, get_base_type (gnu_result_type),
! 		  build_binary_op (MINUS_EXPR,
! 				   get_base_type (gnu_result_type),
! 				   convert (gnu_result_type,
! 					    TYPE_MAX_VALUE (gnu_type)),
! 				   convert (gnu_result_type,
! 					    TYPE_MIN_VALUE (gnu_type))),
! 		  convert (gnu_result_type, integer_one_node)),
! 		 convert (gnu_result_type, integer_zero_node));
! 
! 	  break;
! 	}
! 
!       /* ... fall through ... */
! 
!     case Attr_Length:
!       {
! 	int Dimension = (Present (Expressions (gnat_node))
! 			 ? UI_To_Int (Intval (First (Expressions (gnat_node))))
! 			 : 1);
! 
! 	/* Make sure any implicit dereference gets done.  */
! 	gnu_prefix = maybe_implicit_deref (gnu_prefix);
! 	gnu_prefix = maybe_unconstrained_array (gnu_prefix);
! 	gnu_type = TREE_TYPE (gnu_prefix);
! 	prefix_unused = true;
! 	gnu_result_type = get_unpadded_type (Etype (gnat_node));
! 
! 	if (TYPE_CONVENTION_FORTRAN_P (gnu_type))
! 	  {
! 	    int ndim;
! 	    tree gnu_type_temp;
! 
! 	    for (ndim = 1, gnu_type_temp = gnu_type;
! 		 TREE_CODE (TREE_TYPE (gnu_type_temp)) == ARRAY_TYPE
! 		 && TYPE_MULTI_ARRAY_P (TREE_TYPE (gnu_type_temp));
! 		 ndim++, gnu_type_temp = TREE_TYPE (gnu_type_temp))
! 	      ;
! 
! 	    Dimension = ndim + 1 - Dimension;
! 	  }
! 
! 	for (; Dimension > 1; Dimension--)
! 	  gnu_type = TREE_TYPE (gnu_type);
! 
! 	gcc_assert (TREE_CODE (gnu_type) == ARRAY_TYPE);
! 	if (attribute == Attr_First)
! 	  gnu_result
! 	    = TYPE_MIN_VALUE (TYPE_INDEX_TYPE (TYPE_DOMAIN (gnu_type)));
! 	else if (attribute == Attr_Last)
! 	  gnu_result
! 	    = TYPE_MAX_VALUE (TYPE_INDEX_TYPE (TYPE_DOMAIN (gnu_type)));
! 	else
! 	  /* 'Length or 'Range_Length.  */
! 	  {
! 	    tree gnu_compute_type
! 	      = gnat_signed_or_unsigned_type (0,
! 					      get_base_type (gnu_result_type));
! 
! 	    gnu_result
! 	      = build_binary_op
! 		(MAX_EXPR, gnu_compute_type,
! 		 build_binary_op
! 		 (PLUS_EXPR, gnu_compute_type,
! 		  build_binary_op
! 		  (MINUS_EXPR, gnu_compute_type,
! 		   convert (gnu_compute_type,
! 			    TYPE_MAX_VALUE
! 			    (TYPE_INDEX_TYPE (TYPE_DOMAIN (gnu_type)))),
! 		   convert (gnu_compute_type,
! 			    TYPE_MIN_VALUE
! 			    (TYPE_INDEX_TYPE (TYPE_DOMAIN (gnu_type))))),
! 		  convert (gnu_compute_type, integer_one_node)),
! 		 convert (gnu_compute_type, integer_zero_node));
! 	  }
! 
! 	/* If this has a PLACEHOLDER_EXPR, qualify it by the object we are
! 	   handling.  Note that these attributes could not have been used on
! 	   an unconstrained array type.  */
! 	gnu_result = SUBSTITUTE_PLACEHOLDER_IN_EXPR (gnu_result,
! 						     gnu_prefix);
! 	break;
!       }
! 
!     case Attr_Bit_Position:
!     case Attr_Position:
!     case Attr_First_Bit:
!     case Attr_Last_Bit:
!     case Attr_Bit:
!       {
! 	HOST_WIDE_INT bitsize;
! 	HOST_WIDE_INT bitpos;
! 	tree gnu_offset;
! 	tree gnu_field_bitpos;
! 	tree gnu_field_offset;
! 	tree gnu_inner;
! 	enum machine_mode mode;
! 	int unsignedp, volatilep;
! 
! 	gnu_result_type = get_unpadded_type (Etype (gnat_node));
! 	gnu_prefix = remove_conversions (gnu_prefix, true);
! 	prefix_unused = true;
! 
! 	/* We can have 'Bit on any object, but if it isn't a COMPONENT_REF,
! 	   the result is 0.  Don't allow 'Bit on a bare component, though. */
! 	if (attribute == Attr_Bit
! 	    && TREE_CODE (gnu_prefix) != COMPONENT_REF
! 	    && TREE_CODE (gnu_prefix) != FIELD_DECL)
! 	  {
! 	    gnu_result = integer_zero_node;
! 	    break;
! 	  }
! 
! 	else
! 	  gcc_assert (TREE_CODE (gnu_prefix) == COMPONENT_REF
! 		      || (attribute == Attr_Bit_Position
! 			  && TREE_CODE (gnu_prefix) == FIELD_DECL));
! 
! 	get_inner_reference (gnu_prefix, &bitsize, &bitpos, &gnu_offset,
! 			     &mode, &unsignedp, &volatilep, false);
! 
! 	if (TREE_CODE (gnu_prefix) == COMPONENT_REF)
! 	  {
! 	    gnu_field_bitpos = bit_position (TREE_OPERAND (gnu_prefix, 1));
! 	    gnu_field_offset = byte_position (TREE_OPERAND (gnu_prefix, 1));
! 
! 	    for (gnu_inner = TREE_OPERAND (gnu_prefix, 0);
! 		 TREE_CODE (gnu_inner) == COMPONENT_REF
! 		 && DECL_INTERNAL_P (TREE_OPERAND (gnu_inner, 1));
! 		 gnu_inner = TREE_OPERAND (gnu_inner, 0))
! 	      {
! 		gnu_field_bitpos
! 		  = size_binop (PLUS_EXPR, gnu_field_bitpos,
! 				bit_position (TREE_OPERAND (gnu_inner, 1)));
! 		gnu_field_offset
! 		  = size_binop (PLUS_EXPR, gnu_field_offset,
! 				byte_position (TREE_OPERAND (gnu_inner, 1)));
! 	      }
! 	  }
! 	else if (TREE_CODE (gnu_prefix) == FIELD_DECL)
! 	  {
! 	    gnu_field_bitpos = bit_position (gnu_prefix);
! 	    gnu_field_offset = byte_position (gnu_prefix);
! 	  }
! 	else
! 	  {
! 	    gnu_field_bitpos = bitsize_zero_node;
! 	    gnu_field_offset = size_zero_node;
! 	  }
! 
! 	switch (attribute)
! 	  {
! 	  case Attr_Position:
! 	    gnu_result = gnu_field_offset;
! 	    break;
! 
! 	  case Attr_First_Bit:
! 	  case Attr_Bit:
! 	    gnu_result = size_int (bitpos % BITS_PER_UNIT);
! 	    break;
! 
! 	  case Attr_Last_Bit:
! 	    gnu_result = bitsize_int (bitpos % BITS_PER_UNIT);
! 	    gnu_result = size_binop (PLUS_EXPR, gnu_result,
! 				     TYPE_SIZE (TREE_TYPE (gnu_prefix)));
! 	    gnu_result = size_binop (MINUS_EXPR, gnu_result,
! 				     bitsize_one_node);
! 	    break;
! 
! 	  case Attr_Bit_Position:
! 	    gnu_result = gnu_field_bitpos;
! 	    break;
! 		}
! 
! 	/* If this has a PLACEHOLDER_EXPR, qualify it by the object
! 	   we are handling. */
! 	gnu_result = SUBSTITUTE_PLACEHOLDER_IN_EXPR (gnu_result, gnu_prefix);
! 	break;
!       }
! 
!     case Attr_Min:
!     case Attr_Max:
!       {
! 	tree gnu_lhs = gnat_to_gnu (First (Expressions (gnat_node)));
! 	tree gnu_rhs = gnat_to_gnu (Next (First (Expressions (gnat_node))));
! 
! 	gnu_result_type = get_unpadded_type (Etype (gnat_node));
! 	gnu_result = build_binary_op (attribute == Attr_Min
! 				      ? MIN_EXPR : MAX_EXPR,
! 				      gnu_result_type, gnu_lhs, gnu_rhs);
!       }
!       break;
! 
!     case Attr_Passed_By_Reference:
!       gnu_result = size_int (default_pass_by_ref (gnu_type)
! 			     || must_pass_by_ref (gnu_type));
!       gnu_result_type = get_unpadded_type (Etype (gnat_node));
!       break;
! 
!     case Attr_Component_Size:
!       if (TREE_CODE (gnu_prefix) == COMPONENT_REF
! 	  && (TREE_CODE (TREE_TYPE (TREE_OPERAND (gnu_prefix, 0)))
! 	      == RECORD_TYPE)
! 	  && (TYPE_IS_PADDING_P (TREE_TYPE (TREE_OPERAND (gnu_prefix, 0)))))
! 	gnu_prefix = TREE_OPERAND (gnu_prefix, 0);
! 
!       gnu_prefix = maybe_implicit_deref (gnu_prefix);
!       gnu_type = TREE_TYPE (gnu_prefix);
! 
!       if (TREE_CODE (gnu_type) == UNCONSTRAINED_ARRAY_TYPE)
! 	gnu_type = TREE_TYPE (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (gnu_type))));
! 
!       while (TREE_CODE (TREE_TYPE (gnu_type)) == ARRAY_TYPE
! 	     && TYPE_MULTI_ARRAY_P (TREE_TYPE (gnu_type)))
! 	gnu_type = TREE_TYPE (gnu_type);
! 
!       gcc_assert (TREE_CODE (gnu_type) == ARRAY_TYPE);
! 
!       /* Note this size cannot be self-referential.  */
!       gnu_result = TYPE_SIZE (TREE_TYPE (gnu_type));
!       gnu_result_type = get_unpadded_type (Etype (gnat_node));
!       prefix_unused = true;
!       break;
! 
!     case Attr_Null_Parameter:
!       /* This is just a zero cast to the pointer type for
! 	 our prefix and dereferenced.  */
!       gnu_result_type = get_unpadded_type (Etype (gnat_node));
!       gnu_result
! 	= build_unary_op (INDIRECT_REF, NULL_TREE,
! 			  convert (build_pointer_type (gnu_result_type),
! 				   integer_zero_node));
!       TREE_PRIVATE (gnu_result) = 1;
!       break;
! 
!     case Attr_Mechanism_Code:
!       {
! 	int code;
! 	Entity_Id gnat_obj = Entity (Prefix (gnat_node));
! 
! 	prefix_unused = true;
! 	gnu_result_type = get_unpadded_type (Etype (gnat_node));
! 	if (Present (Expressions (gnat_node)))
! 	  {
! 	    int i = UI_To_Int (Intval (First (Expressions (gnat_node))));
! 
! 	    for (gnat_obj = First_Formal (gnat_obj); i > 1;
! 		 i--, gnat_obj = Next_Formal (gnat_obj))
! 	      ;
! 	  }
! 
! 	code = Mechanism (gnat_obj);
! 	if (code == Default)
! 	  code = ((present_gnu_tree (gnat_obj)
! 		   && (DECL_BY_REF_P (get_gnu_tree (gnat_obj))
! 		       || ((TREE_CODE (get_gnu_tree (gnat_obj))
! 			    == PARM_DECL)
! 			   && (DECL_BY_COMPONENT_PTR_P
! 			       (get_gnu_tree (gnat_obj))))))
! 		  ? By_Reference : By_Copy);
! 	gnu_result = convert (gnu_result_type, size_int (- code));
!       }
!       break;
! 
!     default:
!       /* Say we have an unimplemented attribute.  Then set the value to be
! 	 returned to be a zero and hope that's something we can convert to the
! 	 type of this attribute.  */
!       post_error ("unimplemented attribute", gnat_node);
!       gnu_result_type = get_unpadded_type (Etype (gnat_node));
!       gnu_result = integer_zero_node;
!       break;
!     }
! 
!   /* If this is an attribute where the prefix was unused, force a use of it if
!      it has a side-effect.  But don't do it if the prefix is just an entity
!      name.  However, if an access check is needed, we must do it.  See second
!      example in AARM 11.6(5.e). */
!   if (prefix_unused && TREE_SIDE_EFFECTS (gnu_prefix)
!       && !Is_Entity_Name (Prefix (gnat_node)))
!     gnu_result = fold (build2 (COMPOUND_EXPR, TREE_TYPE (gnu_result),
! 			       gnu_prefix, gnu_result));
! 
!   *gnu_result_type_p = gnu_result_type;
!   return gnu_result;
  }
  
! /* Subroutine of gnat_to_gnu to translate gnat_node, an N_Case_Statement,
!    to a GCC tree, which is returned.  */
  
  static tree
! Case_Statement_to_gnu (Node_Id gnat_node)
  {
!   tree gnu_result;
    tree gnu_expr;
!   Node_Id gnat_when;
  
!   gnu_expr = gnat_to_gnu (Expression (gnat_node));
!   gnu_expr = convert (get_base_type (TREE_TYPE (gnu_expr)), gnu_expr);
  
!   /*  The range of values in a case statement is determined by the rules in
!       RM 5.4(7-9). In almost all cases, this range is represented by the Etype
!       of the expression. One exception arises in the case of a simple name that
!       is parenthesized. This still has the Etype of the name, but since it is
!       not a name, para 7 does not apply, and we need to go to the base type.
!       This is the only case where parenthesization affects the dynamic
!       semantics (i.e. the range of possible values at runtime that is covered
!       by the others alternative.
! 
!       Another exception is if the subtype of the expression is non-static.  In
!       that case, we also have to use the base type.  */
!   if (Paren_Count (Expression (gnat_node)) != 0
!       || !Is_OK_Static_Subtype (Underlying_Type
! 				(Etype (Expression (gnat_node)))))
!     gnu_expr = convert (get_base_type (TREE_TYPE (gnu_expr)), gnu_expr);
! 
!   /* We build a SWITCH_EXPR that contains the code with interspersed
!      CASE_LABEL_EXPRs for each label.  */
! 
!   push_stack (&gnu_switch_label_stack, NULL_TREE, create_artificial_label ());
!   start_stmt_group ();
!   for (gnat_when = First_Non_Pragma (Alternatives (gnat_node));
!        Present (gnat_when);
!        gnat_when = Next_Non_Pragma (gnat_when))
      {
!       Node_Id gnat_choice;
  
!       /* First compile all the different case choices for the current WHEN
! 	 alternative.  */
!       for (gnat_choice = First (Discrete_Choices (gnat_when));
! 	   Present (gnat_choice); gnat_choice = Next (gnat_choice))
! 	{
! 	  tree gnu_low = NULL_TREE, gnu_high = NULL_TREE;
! 
! 	  switch (Nkind (gnat_choice))
! 	    {
! 	    case N_Range:
! 	      gnu_low = gnat_to_gnu (Low_Bound (gnat_choice));
! 	      gnu_high = gnat_to_gnu (High_Bound (gnat_choice));
! 	      break;
! 
! 	    case N_Subtype_Indication:
! 	      gnu_low = gnat_to_gnu (Low_Bound (Range_Expression
! 						(Constraint (gnat_choice))));
! 	      gnu_high = gnat_to_gnu (High_Bound (Range_Expression
! 						  (Constraint (gnat_choice))));
! 	      break;
! 
! 	    case N_Identifier:
! 	    case N_Expanded_Name:
! 	      /* This represents either a subtype range or a static value of
! 		 some kind; Ekind says which.  If a static value, fall through
! 		 to the next case.  */
! 	      if (IN (Ekind (Entity (gnat_choice)), Type_Kind))
! 		{
! 		  tree gnu_type = get_unpadded_type (Entity (gnat_choice));
! 
! 		  gnu_low = fold (TYPE_MIN_VALUE (gnu_type));
! 		  gnu_high = fold (TYPE_MAX_VALUE (gnu_type));
! 		  break;
! 		}
! 
! 	      /* ... fall through ... */
! 
! 	    case N_Character_Literal:
! 	    case N_Integer_Literal:
! 	      gnu_low = gnat_to_gnu (gnat_choice);
! 	      break;
! 
! 	    case N_Others_Choice:
! 	      break;
! 
! 	    default:
! 	      gcc_unreachable ();
! 	    }
! 
! 	  add_stmt_with_node (build3 (CASE_LABEL_EXPR, void_type_node,
! 				      gnu_low, gnu_high,
! 				      create_artificial_label ()),
! 			      gnat_choice);
! 	}
! 
!       /* Push a binding level here in case variables are declared since we want
! 	 them to be local to this set of statements instead of the block
! 	 containing the Case statement.  */
!       add_stmt (build_stmt_group (Statements (gnat_when), true));
!       add_stmt (build1 (GOTO_EXPR, void_type_node,
! 			TREE_VALUE (gnu_switch_label_stack)));
      }
  
!   /* Now emit a definition of the label all the cases branched to. */
!   add_stmt (build1 (LABEL_EXPR, void_type_node,
! 		    TREE_VALUE (gnu_switch_label_stack)));
!   gnu_result = build3 (SWITCH_EXPR, TREE_TYPE (gnu_expr), gnu_expr,
! 		       end_stmt_group (), NULL_TREE);
!   pop_stack (&gnu_switch_label_stack);
  
!   return gnu_result;
! }
! 
! /* Subroutine of gnat_to_gnu to translate gnat_node, an N_Loop_Statement,
!    to a GCC tree, which is returned.  */
! 
! static tree
! Loop_Statement_to_gnu (Node_Id gnat_node)
! {
!   /* ??? It would be nice to use "build" here, but there's no build5.  */
!   tree gnu_loop_stmt = build_nt (LOOP_STMT, NULL_TREE, NULL_TREE,
! 				 NULL_TREE, NULL_TREE, NULL_TREE);
!   tree gnu_loop_var = NULL_TREE;
!   Node_Id gnat_iter_scheme = Iteration_Scheme (gnat_node);
!   tree gnu_cond_expr = NULL_TREE;
!   tree gnu_result;
! 
!   TREE_TYPE (gnu_loop_stmt) = void_type_node;
!   TREE_SIDE_EFFECTS (gnu_loop_stmt) = 1;
!   LOOP_STMT_LABEL (gnu_loop_stmt) = create_artificial_label ();
!   annotate_with_node (gnu_loop_stmt, gnat_node);
! 
!   /* Save the end label of this LOOP_STMT in a stack so that the corresponding
!      N_Exit_Statement can find it.  */
!   push_stack (&gnu_loop_label_stack, NULL_TREE,
! 	      LOOP_STMT_LABEL (gnu_loop_stmt));
! 
!   /* Set the condition that under which the loop should continue.
!      For "LOOP .... END LOOP;" the condition is always true.  */
!   if (No (gnat_iter_scheme))
!     ;
!   /* The case "WHILE condition LOOP ..... END LOOP;" */
!   else if (Present (Condition (gnat_iter_scheme)))
!     LOOP_STMT_TOP_COND (gnu_loop_stmt)
!       = gnat_to_gnu (Condition (gnat_iter_scheme));
!   else
      {
!       /* We have an iteration scheme.  */
!       Node_Id gnat_loop_spec = Loop_Parameter_Specification (gnat_iter_scheme);
!       Entity_Id gnat_loop_var = Defining_Entity (gnat_loop_spec);
!       Entity_Id gnat_type = Etype (gnat_loop_var);
!       tree gnu_type = get_unpadded_type (gnat_type);
!       tree gnu_low = TYPE_MIN_VALUE (gnu_type);
!       tree gnu_high = TYPE_MAX_VALUE (gnu_type);
!       bool reversep = Reverse_Present (gnat_loop_spec);
!       tree gnu_first = reversep ? gnu_high : gnu_low;
!       tree gnu_last = reversep ? gnu_low : gnu_high;
!       enum tree_code end_code = reversep ? GE_EXPR : LE_EXPR;
!       tree gnu_base_type = get_base_type (gnu_type);
!       tree gnu_limit = (reversep ? TYPE_MIN_VALUE (gnu_base_type)
! 			: TYPE_MAX_VALUE (gnu_base_type));
  
!       /* We know the loop variable will not overflow if GNU_LAST is a constant
! 	 and is not equal to GNU_LIMIT.  If it might overflow, we have to move
! 	 the limit test to the end of the loop.  In that case, we have to test
! 	 for an empty loop outside the loop.  */
!       if (TREE_CODE (gnu_last) != INTEGER_CST
! 	  || TREE_CODE (gnu_limit) != INTEGER_CST
! 	  || tree_int_cst_equal (gnu_last, gnu_limit))
! 	{
! 	  gnu_cond_expr
! 	    = build3 (COND_EXPR, void_type_node,
! 		      build_binary_op (LE_EXPR, integer_type_node,
! 				       gnu_low, gnu_high),
! 		      NULL_TREE, alloc_stmt_list ());
! 	  annotate_with_node (gnu_cond_expr, gnat_loop_spec);
! 	}
! 
!       /* Open a new nesting level that will surround the loop to declare the
! 	 loop index variable.  */
!       start_stmt_group ();
!       gnat_pushlevel ();
! 
!       /* Declare the loop index and set it to its initial value.  */
!       gnu_loop_var = gnat_to_gnu_entity (gnat_loop_var, gnu_first, 1);
!       if (DECL_BY_REF_P (gnu_loop_var))
! 	gnu_loop_var = build_unary_op (INDIRECT_REF, NULL_TREE, gnu_loop_var);
! 
!       /* The loop variable might be a padded type, so use `convert' to get a
! 	 reference to the inner variable if so.  */
!       gnu_loop_var = convert (get_base_type (gnu_type), gnu_loop_var);
! 
!       /* Set either the top or bottom exit condition as appropriate depending
! 	 on whether or not we know an overflow cannot occur. */
!       if (gnu_cond_expr)
! 	LOOP_STMT_BOT_COND (gnu_loop_stmt)
! 	  = build_binary_op (NE_EXPR, integer_type_node,
! 			     gnu_loop_var, gnu_last);
        else
! 	LOOP_STMT_TOP_COND (gnu_loop_stmt)
! 	  = build_binary_op (end_code, integer_type_node,
! 			     gnu_loop_var, gnu_last);
! 
!       LOOP_STMT_UPDATE (gnu_loop_stmt)
! 	= build_binary_op (reversep ? PREDECREMENT_EXPR
! 			   : PREINCREMENT_EXPR,
! 			   TREE_TYPE (gnu_loop_var),
! 			   gnu_loop_var,
! 			   convert (TREE_TYPE (gnu_loop_var),
! 				    integer_one_node));
!       annotate_with_node (LOOP_STMT_UPDATE (gnu_loop_stmt),
! 			  gnat_iter_scheme);
      }
  
!   /* If the loop was named, have the name point to this loop.  In this case,
!      the association is not a ..._DECL node, but the end label from this
!      LOOP_STMT. */
!   if (Present (Identifier (gnat_node)))
!     save_gnu_tree (Entity (Identifier (gnat_node)),
! 		   LOOP_STMT_LABEL (gnu_loop_stmt), true);
! 
!   /* Make the loop body into its own block, so any allocated storage will be
!      released every iteration.  This is needed for stack allocation.  */
!   LOOP_STMT_BODY (gnu_loop_stmt)
!     = build_stmt_group (Statements (gnat_node), true);
! 
!   /* If we declared a variable, then we are in a statement group for that
!      declaration.  Add the LOOP_STMT to it and make that the "loop".  */
!   if (gnu_loop_var)
      {
!       add_stmt (gnu_loop_stmt);
!       gnat_poplevel ();
!       gnu_loop_stmt = end_stmt_group ();
!     }
! 
!   /* If we have an outer COND_EXPR, that's our result and this loop is its
!      "true" statement.  Otherwise, the result is the LOOP_STMT. */
!   if (gnu_cond_expr)
!     {
!       COND_EXPR_THEN (gnu_cond_expr) = gnu_loop_stmt;
!       gnu_result = gnu_cond_expr;
!       recalculate_side_effects (gnu_cond_expr);
!     }
!   else
!     gnu_result = gnu_loop_stmt;
! 
!   pop_stack (&gnu_loop_label_stack);
! 
!   return gnu_result;
! }
! 
! /* Subroutine of gnat_to_gnu to process gnat_node, an N_Subprogram_Body.  We
!    don't return anything.  */
! 
! static void
! Subprogram_Body_to_gnu (Node_Id gnat_node)
! {
!   /* Save debug output mode in case it is reset.  */
!   enum debug_info_type save_write_symbols = write_symbols;
!   const struct gcc_debug_hooks *const save_debug_hooks = debug_hooks;
!   /* Definining identifier of a parameter to the subprogram.  */
!   Entity_Id gnat_param;
!   /* The defining identifier for the subprogram body. Note that if a
!      specification has appeared before for this body, then the identifier
!      occurring in that specification will also be a defining identifier and all
!      the calls to this subprogram will point to that specification.  */
!   Entity_Id gnat_subprog_id
!     = (Present (Corresponding_Spec (gnat_node))
!        ? Corresponding_Spec (gnat_node) : Defining_Entity (gnat_node));
!   /* The FUNCTION_DECL node corresponding to the subprogram spec.   */
!   tree gnu_subprog_decl;
!   /* The FUNCTION_TYPE node corresponding to the subprogram spec.  */
!   tree gnu_subprog_type;
!   tree gnu_cico_list;
!   tree gnu_result;
! 
!   /* If this is a generic object or if it has been eliminated,
!      ignore it.  */
!   if (Ekind (gnat_subprog_id) == E_Generic_Procedure
!       || Ekind (gnat_subprog_id) == E_Generic_Function
!       || Is_Eliminated (gnat_subprog_id))
!     return;
! 
!   /* If debug information is suppressed for the subprogram, turn debug
!      mode off for the duration of processing.  */
!   if (!Needs_Debug_Info (gnat_subprog_id))
!     {
!       write_symbols = NO_DEBUG;
!       debug_hooks = &do_nothing_debug_hooks;
!     }
! 
!   /* If this subprogram acts as its own spec, define it.  Otherwise, just get
!      the already-elaborated tree node.  However, if this subprogram had its
!      elaboration deferred, we will already have made a tree node for it.  So
!      treat it as not being defined in that case.  Such a subprogram cannot
!      have an address clause or a freeze node, so this test is safe, though it
!      does disable some otherwise-useful error checking.  */
!   gnu_subprog_decl
!     = gnat_to_gnu_entity (gnat_subprog_id, NULL_TREE,
! 			  Acts_As_Spec (gnat_node)
! 			  && !present_gnu_tree (gnat_subprog_id));
! 
!   gnu_subprog_type = TREE_TYPE (gnu_subprog_decl);
! 
!   /* Set the line number in the decl to correspond to that of the body so that
!      the line number notes are written
!      correctly.  */
!   Sloc_to_locus (Sloc (gnat_node), &DECL_SOURCE_LOCATION (gnu_subprog_decl));
! 
!   begin_subprog_body (gnu_subprog_decl);
!   gnu_cico_list = TYPE_CI_CO_LIST (gnu_subprog_type);
! 
!   /* If there are OUT parameters, we need to ensure that the return statement
!      properly copies them out.  We do this by making a new block and converting
!      any inner return into a goto to a label at the end of the block.  */
!   push_stack (&gnu_return_label_stack, NULL_TREE,
! 	      gnu_cico_list ? create_artificial_label () : NULL_TREE);
! 
!   /* Get a tree corresponding to the code for the subprogram.  */
!   start_stmt_group ();
!   gnat_pushlevel ();
! 
!   /* See if there are any parameters for which we don't yet have GCC entities.
!      These must be for OUT parameters for which we will be making VAR_DECL
!      nodes here.  Fill them in to TYPE_CI_CO_LIST, which must contain the empty
!      entry as well.  We can match up the entries because TYPE_CI_CO_LIST is in
!      the order of the parameters.  */
!   for (gnat_param = First_Formal (gnat_subprog_id);
!        Present (gnat_param);
!        gnat_param = Next_Formal_With_Extras (gnat_param))
!     if (!present_gnu_tree (gnat_param))
!       {
! 	/* Skip any entries that have been already filled in; they must
! 	   correspond to IN OUT parameters.  */
! 	for (; gnu_cico_list && TREE_VALUE (gnu_cico_list);
! 	     gnu_cico_list = TREE_CHAIN (gnu_cico_list))
! 	  ;
! 
! 	/* Do any needed references for padded types.  */
! 	TREE_VALUE (gnu_cico_list)
! 	  = convert (TREE_TYPE (TREE_PURPOSE (gnu_cico_list)),
! 		     gnat_to_gnu_entity (gnat_param, NULL_TREE, 1));
!       }
  
+   process_decls (Declarations (gnat_node), Empty, Empty, true, true);
+ 
+   /* Generate the code of the subprogram itself.  A return statement will be
+      present and any OUT parameters will be handled there.  */
+   add_stmt (gnat_to_gnu (Handled_Statement_Sequence (gnat_node)));
+   gnat_poplevel ();
+   gnu_result = end_stmt_group ();
+ 
+   /* If we made a special return label, we need to make a block that contains
+      the definition of that label and the copying to the return value.  That
+      block first contains the function, then the label and copy statement.  */
+   if (TREE_VALUE (gnu_return_label_stack))
+     {
+       tree gnu_retval;
+ 
+       start_stmt_group ();
+       gnat_pushlevel ();
+       add_stmt (gnu_result);
+       add_stmt (build1 (LABEL_EXPR, void_type_node,
+ 			TREE_VALUE (gnu_return_label_stack)));
+ 
+       gnu_cico_list = TYPE_CI_CO_LIST (gnu_subprog_type);
+       if (list_length (gnu_cico_list) == 1)
+ 	gnu_retval = TREE_VALUE (gnu_cico_list);
+       else
+ 	gnu_retval = gnat_build_constructor (TREE_TYPE (gnu_subprog_type),
+ 					     gnu_cico_list);
+ 
+       if (DECL_P (gnu_retval) && DECL_BY_REF_P (gnu_retval))
+ 	gnu_retval = build_unary_op (INDIRECT_REF, NULL_TREE, gnu_retval);
+ 
+       add_stmt_with_node
+ 	(build1 (RETURN_EXPR, void_type_node,
+ 		 build2 (MODIFY_EXPR, TREE_TYPE (gnu_retval),
+ 			 DECL_RESULT (current_function_decl), gnu_retval)),
+ 	 gnat_node);
+       gnat_poplevel ();
+       gnu_result = end_stmt_group ();
+     }
+ 
+   pop_stack (&gnu_return_label_stack);
+ 
+   /* Initialize the information node for the function and set the
+      end location.  */
+   allocate_struct_function (current_function_decl);
+   Sloc_to_locus
+     ((Present (End_Label (Handled_Statement_Sequence (gnat_node)))
+       ? Sloc (End_Label (Handled_Statement_Sequence (gnat_node)))
+       : Sloc (gnat_node)),
+      &cfun->function_end_locus);
+ 
+   end_subprog_body (gnu_result);
+ 
+   /* Disconnect the trees for parameters that we made variables for from the
+      GNAT entities since these are unusable after we end the function.  */
+   for (gnat_param = First_Formal (gnat_subprog_id);
+        Present (gnat_param);
+        gnat_param = Next_Formal_With_Extras (gnat_param))
+     if (TREE_CODE (get_gnu_tree (gnat_param)) == VAR_DECL)
+       save_gnu_tree (gnat_param, NULL_TREE, false);
+ 
+   mark_out_of_scope (Defining_Unit_Name (Specification (gnat_node)));
+   write_symbols = save_write_symbols;
+   debug_hooks = save_debug_hooks;
+ }
+ 
+ /* Subroutine of gnat_to_gnu to translate gnat_node, either an N_Function_Call
+    or an N_Procedure_Call_Statement, to a GCC tree, which is returned.
+    GNU_RESULT_TYPE_P is a pointer to where we should place the result type.
+    If GNU_TARGET is non-null, this must be a function call and the result
+    of the call is to be placed into that object.  */
+ 
+ static tree
+ call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target)
+ {
+   tree gnu_result;
+   /* The GCC node corresponding to the GNAT subprogram name.  This can either
+      be a FUNCTION_DECL node if we are dealing with a standard subprogram call,
+      or an indirect reference expression (an INDIRECT_REF node) pointing to a
+      subprogram.  */
+   tree gnu_subprog_node = gnat_to_gnu (Name (gnat_node));
+   /* The FUNCTION_TYPE node giving the GCC type of the subprogram.  */
+   tree gnu_subprog_type = TREE_TYPE (gnu_subprog_node);
+   tree gnu_subprog_addr = build_unary_op (ADDR_EXPR, NULL_TREE,
+ 					  gnu_subprog_node);
+   Entity_Id gnat_formal;
+   Node_Id gnat_actual;
+   tree gnu_actual_list = NULL_TREE;
+   tree gnu_name_list = NULL_TREE;
+   tree gnu_before_list = NULL_TREE;
+   tree gnu_after_list = NULL_TREE;
+   tree gnu_subprog_call;
+ 
+   switch (Nkind (Name (gnat_node)))
+     {
      case N_Identifier:
      case N_Operator_Symbol:
!     case N_Expanded_Name:
!     case N_Attribute_Reference:
!       if (Is_Eliminated (Entity (Name (gnat_node))))
! 	Eliminate_Error_Msg (gnat_node, Entity (Name (gnat_node)));
!     }
  
!   gcc_assert (TREE_CODE (gnu_subprog_type) == FUNCTION_TYPE);
  
!   /* If we are calling a stubbed function, make this into a raise of
!      Program_Error.  Elaborate all our args first.  */
!   if (TREE_CODE (gnu_subprog_node) == FUNCTION_DECL
!       && DECL_STUBBED_P (gnu_subprog_node))
!     {
!       for (gnat_actual = First_Actual (gnat_node);
! 	   Present (gnat_actual);
! 	   gnat_actual = Next_Actual (gnat_actual))
! 	add_stmt (gnat_to_gnu (gnat_actual));
  
!       if (Nkind (gnat_node) == N_Function_Call && !gnu_target)
! 	{
! 	  *gnu_result_type_p = TREE_TYPE (gnu_subprog_type);
! 	  return build1 (NULL_EXPR, *gnu_result_type_p,
! 			 build_call_raise (PE_Stubbed_Subprogram_Called));
! 	}
!       else
! 	return build_call_raise (PE_Stubbed_Subprogram_Called);
!     }
  
!   /* If we are calling by supplying a pointer to a target, set up that
!      pointer as the first argument.  Use GNU_TARGET if one was passed;
!      otherwise, make a target by building a variable of the maximum size
!      of the type.  */
!   if (TYPE_RETURNS_BY_TARGET_PTR_P (gnu_subprog_type))
!     {
!       tree gnu_real_ret_type
! 	= TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (gnu_subprog_type)));
  
!       if (!gnu_target)
! 	{
! 	  tree gnu_obj_type
! 	    = maybe_pad_type (gnu_real_ret_type,
! 			      max_size (TYPE_SIZE (gnu_real_ret_type), true),
! 			      0, Etype (Name (gnat_node)), "PAD", false,
! 			      false, false);
  
! 	  gnu_target = create_tmp_var_raw (gnu_obj_type, "LR");
! 	  gnat_pushdecl (gnu_target, gnat_node);
! 	}
! 
!       gnu_actual_list
! 	= tree_cons (NULL_TREE,
! 		     build_unary_op (ADDR_EXPR, NULL_TREE,
! 				     unchecked_convert (gnu_real_ret_type,
! 							gnu_target,
! 							false)),
! 		     NULL_TREE);
! 
!     }
! 
!   /* The only way we can be making a call via an access type is if Name is an
!      explicit dereference.  In that case, get the list of formal args from the
!      type the access type is pointing to.  Otherwise, get the formals from
!      entity being called.  */
!   if (Nkind (Name (gnat_node)) == N_Explicit_Dereference)
!     gnat_formal = First_Formal (Etype (Name (gnat_node)));
!   else if (Nkind (Name (gnat_node)) == N_Attribute_Reference)
!     /* Assume here that this must be 'Elab_Body or 'Elab_Spec.  */
!     gnat_formal = 0;
!   else
!     gnat_formal = First_Formal (Entity (Name (gnat_node)));
! 
!   /* Create the list of the actual parameters as GCC expects it, namely a chain
!      of TREE_LIST nodes in which the TREE_VALUE field of each node is a
!      parameter-expression and the TREE_PURPOSE field is null.  Skip OUT
!      parameters not passed by reference and don't need to be copied in.  */
!   for (gnat_actual = First_Actual (gnat_node);
!        Present (gnat_actual);
!        gnat_formal = Next_Formal_With_Extras (gnat_formal),
!        gnat_actual = Next_Actual (gnat_actual))
!     {
!       tree gnu_formal
! 	= (present_gnu_tree (gnat_formal)
! 	   ? get_gnu_tree (gnat_formal) : NULL_TREE);
!       /* We treat a conversion between aggregate types as if it is an
! 	 unchecked conversion.  */
!       bool unchecked_convert_p
! 	= (Nkind (gnat_actual) == N_Unchecked_Type_Conversion
! 	   || (Nkind (gnat_actual) == N_Type_Conversion
! 	       && Is_Composite_Type (Underlying_Type (Etype (gnat_formal)))));
!       Node_Id gnat_name = (unchecked_convert_p
! 			   ? Expression (gnat_actual) : gnat_actual);
!       tree gnu_name = gnat_to_gnu (gnat_name);
!       tree gnu_name_type = gnat_to_gnu_type (Etype (gnat_name));
!       tree gnu_actual;
!       tree gnu_formal_type;
! 
!       /* If it's possible we may need to use this expression twice, make sure
! 	 than any side-effects are handled via SAVE_EXPRs. Likewise if we need
! 	 to force side-effects before the call.
! 
! 	 ??? This is more conservative than we need since we don't need to do
! 	 this for pass-by-ref with no conversion. If we are passing a
! 	 non-addressable Out or In Out parameter by reference, pass the address
! 	 of a copy and set up to copy back out after the call.  */
!       if (Ekind (gnat_formal) != E_In_Parameter)
  	{
! 	  gnu_name = gnat_stabilize_reference (gnu_name, true);
! 	  if (!addressable_p (gnu_name)
! 	      && gnu_formal
! 	      && (DECL_BY_REF_P (gnu_formal)
! 		  || (TREE_CODE (gnu_formal) == PARM_DECL
! 		      && (DECL_BY_COMPONENT_PTR_P (gnu_formal)
! 			  || (DECL_BY_DESCRIPTOR_P (gnu_formal))))))
! 	    {
! 	      tree gnu_copy = gnu_name;
! 	      tree gnu_temp;
! 
! 	      /* Remove any unpadding on the actual and make a copy.  But if
! 		 the actual is a justified modular type, first convert
! 		 to it.  */
! 	      if (TREE_CODE (gnu_name) == COMPONENT_REF
! 		  && ((TREE_CODE (TREE_TYPE (TREE_OPERAND (gnu_name, 0)))
! 		       == RECORD_TYPE)
! 		      && (TYPE_IS_PADDING_P
! 			  (TREE_TYPE (TREE_OPERAND (gnu_name, 0))))))
! 		gnu_name = gnu_copy = TREE_OPERAND (gnu_name, 0);
! 	      else if (TREE_CODE (gnu_name_type) == RECORD_TYPE
! 		       && (TYPE_JUSTIFIED_MODULAR_P (gnu_name_type)))
! 		gnu_name = convert (gnu_name_type, gnu_name);
! 
! 	      gnu_actual = save_expr (gnu_name);
! 
! 	      /* Since we're going to take the address of the SAVE_EXPR, we
! 		 don't want it to be marked as unchanging. So set
! 		 TREE_ADDRESSABLE.  */
! 	      gnu_temp = skip_simple_arithmetic (gnu_actual);
! 	      if (TREE_CODE (gnu_temp) == SAVE_EXPR)
! 		{
! 		  TREE_ADDRESSABLE (gnu_temp) = 1;
! 		  TREE_READONLY (gnu_temp) = 0;
! 		}
! 
! 	      /* Set up to move the copy back to the original.  */
! 	      gnu_temp = build2 (MODIFY_EXPR, TREE_TYPE (gnu_copy),
! 				 gnu_copy, gnu_actual);
! 	      annotate_with_node (gnu_temp, gnat_actual);
! 	      append_to_statement_list (gnu_temp, &gnu_after_list);
! 	    }
  	}
! 
!       /* If this was a procedure call, we may not have removed any padding.
! 	 So do it here for the part we will use as an input, if any.  */
!       gnu_actual = gnu_name;
!       if (Ekind (gnat_formal) != E_Out_Parameter
! 	  && TREE_CODE (TREE_TYPE (gnu_actual)) == RECORD_TYPE
! 	  && TYPE_IS_PADDING_P (TREE_TYPE (gnu_actual)))
! 	gnu_actual = convert (get_unpadded_type (Etype (gnat_actual)),
! 			      gnu_actual);
! 
!       /* Unless this is an In parameter, we must remove any LJM building
! 	 from GNU_NAME.  */
!       if (Ekind (gnat_formal) != E_In_Parameter
! 	  && TREE_CODE (gnu_name) == CONSTRUCTOR
! 	  && TREE_CODE (TREE_TYPE (gnu_name)) == RECORD_TYPE
! 	  && TYPE_JUSTIFIED_MODULAR_P (TREE_TYPE (gnu_name)))
! 	gnu_name = convert (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (gnu_name))),
! 			    gnu_name);
! 
!       if (Ekind (gnat_formal) != E_Out_Parameter
! 	  && !unchecked_convert_p
! 	  && Do_Range_Check (gnat_actual))
! 	gnu_actual = emit_range_check (gnu_actual, Etype (gnat_formal));
! 
!       /* Do any needed conversions.  We need only check for unchecked
! 	 conversion since normal conversions will be handled by just
! 	 converting to the formal type.  */
!       if (unchecked_convert_p)
  	{
! 	  gnu_actual
! 	    = unchecked_convert (gnat_to_gnu_type (Etype (gnat_actual)),
! 				 gnu_actual,
! 				 (Nkind (gnat_actual)
! 				  == N_Unchecked_Type_Conversion)
! 				 && No_Truncation (gnat_actual));
! 
! 	  /* One we've done the unchecked conversion, we still must ensure that
! 	     the object is in range of the formal's type.  */
! 	  if (Ekind (gnat_formal) != E_Out_Parameter
! 	      && Do_Range_Check (gnat_actual))
! 	    gnu_actual = emit_range_check (gnu_actual,
! 					   Etype (gnat_formal));
! 	}
!       else if (TREE_CODE (gnu_actual) != SAVE_EXPR)
! 	/* We may have suppressed a conversion to the Etype of the actual since
! 	   the parent is a procedure call.  So add the conversion here.  */
! 	gnu_actual = convert (gnat_to_gnu_type (Etype (gnat_actual)),
! 			      gnu_actual);
! 
!       /* If we have not saved a GCC object for the formal, it means it is an
! 	 OUT parameter not passed by reference and that does not need to be
! 	 copied in. Otherwise, look at the PARM_DECL to see if it is passed by
! 	 reference. */
!       if (gnu_formal
! 	  && TREE_CODE (gnu_formal) == PARM_DECL && DECL_BY_REF_P (gnu_formal))
! 	{
! 	  if (Ekind (gnat_formal) != E_In_Parameter)
! 	    {
! 	      gnu_actual = gnu_name;
! 
! 	      /* If we have a padded type, be sure we've removed padding.  */
! 	      if (TREE_CODE (TREE_TYPE (gnu_actual)) == RECORD_TYPE
! 		  && TYPE_IS_PADDING_P (TREE_TYPE (gnu_actual))
! 		  && TREE_CODE (gnu_actual) != SAVE_EXPR)
! 		gnu_actual = convert (get_unpadded_type (Etype (gnat_actual)),
! 				      gnu_actual);
! 
! 	      /* If we have the constructed subtype of an aliased object
! 		 with an unconstrained nominal subtype, the type of the
! 		 actual includes the template, although it is formally
! 		 constrained.  So we need to convert it back to the real
! 		 constructed subtype to retrieve the constrained part
! 		 and takes its address.  */
! 	      if (TREE_CODE (TREE_TYPE (gnu_actual)) == RECORD_TYPE
! 		  && TYPE_CONTAINS_TEMPLATE_P (TREE_TYPE (gnu_actual))
! 		  && TREE_CODE (gnu_actual) != SAVE_EXPR
! 		  && Is_Constr_Subt_For_UN_Aliased (Etype (gnat_actual))
! 		  && Is_Array_Type (Etype (gnat_actual)))
! 		gnu_actual = convert (gnat_to_gnu_type (Etype (gnat_actual)),
! 				      gnu_actual);
! 	    }
! 
! 	  /* Otherwise, if we have a non-addressable COMPONENT_REF of a
! 	     variable-size type see if it's doing a unpadding operation.  If
! 	     so, remove that operation since we have no way of allocating the
! 	     required temporary.  */
! 	  if (TREE_CODE (gnu_actual) == COMPONENT_REF
! 	      && !TREE_CONSTANT (TYPE_SIZE (TREE_TYPE (gnu_actual)))
! 	      && (TREE_CODE (TREE_TYPE (TREE_OPERAND (gnu_actual, 0)))
! 		  == RECORD_TYPE)
! 	      && TYPE_IS_PADDING_P (TREE_TYPE
! 				    (TREE_OPERAND (gnu_actual, 0)))
! 	      && !addressable_p (gnu_actual))
! 	    gnu_actual = TREE_OPERAND (gnu_actual, 0);
! 
! 	  /* The symmetry of the paths to the type of an entity is broken here
! 	     since arguments don't know that they will be passed by ref. */
! 	  gnu_formal_type = TREE_TYPE (get_gnu_tree (gnat_formal));
! 	  gnu_actual = build_unary_op (ADDR_EXPR, gnu_formal_type, gnu_actual);
! 	}
!       else if (gnu_formal && TREE_CODE (gnu_formal) == PARM_DECL
! 	       && DECL_BY_COMPONENT_PTR_P (gnu_formal))
! 	{
! 	  gnu_formal_type = TREE_TYPE (get_gnu_tree (gnat_formal));
! 	  gnu_actual = maybe_implicit_deref (gnu_actual);
! 	  gnu_actual = maybe_unconstrained_array (gnu_actual);
! 
! 	  if (TREE_CODE (gnu_formal_type) == RECORD_TYPE
! 	      && TYPE_IS_PADDING_P (gnu_formal_type))
! 	    {
! 	      gnu_formal_type = TREE_TYPE (TYPE_FIELDS (gnu_formal_type));
! 	      gnu_actual = convert (gnu_formal_type, gnu_actual);
! 	    }
! 
! 	  /* Take the address of the object and convert to the proper pointer
! 	     type.  We'd like to actually compute the address of the beginning
! 	     of the array using an ADDR_EXPR of an ARRAY_REF, but there's a
! 	     possibility that the ARRAY_REF might return a constant and we'd be
! 	     getting the wrong address.  Neither approach is exactly correct,
! 	     but this is the most likely to work in all cases.  */
! 	  gnu_actual = convert (gnu_formal_type,
! 				build_unary_op (ADDR_EXPR, NULL_TREE,
! 						gnu_actual));
! 	}
!       else if (gnu_formal && TREE_CODE (gnu_formal) == PARM_DECL
! 	       && DECL_BY_DESCRIPTOR_P (gnu_formal))
! 	{
! 	  /* If arg is 'Null_Parameter, pass zero descriptor.  */
! 	  if ((TREE_CODE (gnu_actual) == INDIRECT_REF
! 	       || TREE_CODE (gnu_actual) == UNCONSTRAINED_ARRAY_REF)
! 	      && TREE_PRIVATE (gnu_actual))
! 	    gnu_actual = convert (DECL_ARG_TYPE (get_gnu_tree (gnat_formal)),
! 				  integer_zero_node);
  	  else
! 	    gnu_actual = build_unary_op (ADDR_EXPR, NULL_TREE,
! 					 fill_vms_descriptor (gnu_actual,
! 							      gnat_formal));
! 	}
!       else
! 	{
! 	  tree gnu_actual_size = TYPE_SIZE (TREE_TYPE (gnu_actual));
  
! 	  if (Ekind (gnat_formal) != E_In_Parameter)
! 	    gnu_name_list = tree_cons (NULL_TREE, gnu_name, gnu_name_list);
! 
! 	  if (!gnu_formal || TREE_CODE (gnu_formal) != PARM_DECL)
! 	    continue;
! 
! 	  /* If this is 'Null_Parameter, pass a zero even though we are
! 	     dereferencing it.  */
! 	  else if (TREE_CODE (gnu_actual) == INDIRECT_REF
! 		   && TREE_PRIVATE (gnu_actual)
! 		   && host_integerp (gnu_actual_size, 1)
! 		   && 0 >= compare_tree_int (gnu_actual_size,
! 						   BITS_PER_WORD))
! 	    gnu_actual
! 	      = unchecked_convert (DECL_ARG_TYPE (gnu_formal),
! 				   convert (gnat_type_for_size
! 					    (tree_low_cst (gnu_actual_size, 1),
! 					     1),
! 					    integer_zero_node),
! 				   false);
! 	  else
! 	    gnu_actual = convert (DECL_ARG_TYPE (gnu_formal), gnu_actual);
  	}
  
!       gnu_actual_list = tree_cons (NULL_TREE, gnu_actual, gnu_actual_list);
!     }
  
!   gnu_subprog_call = build3 (CALL_EXPR, TREE_TYPE (gnu_subprog_type),
! 			     gnu_subprog_addr, nreverse (gnu_actual_list),
! 			     NULL_TREE);
  
!   /* If we return by passing a target, we emit the call and return the target
!      as our result.  */
!   if (TYPE_RETURNS_BY_TARGET_PTR_P (gnu_subprog_type))
!     {
!       add_stmt_with_node (gnu_subprog_call, gnat_node);
!       *gnu_result_type_p
! 	= TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (gnu_subprog_type)));
!       return unchecked_convert (*gnu_result_type_p, gnu_target, false);
!     }
! 
!   /* If it is a function call, the result is the call expression unless
!      a target is specified, in which case we copy the result into the target
!      and return the assignment statement.  */
!   else if (Nkind (gnat_node) == N_Function_Call)
!     {
!       gnu_result = gnu_subprog_call;
! 
!       /* If the function returns an unconstrained array or by reference,
! 	 we have to de-dereference the pointer.  */
!       if (TYPE_RETURNS_UNCONSTRAINED_P (gnu_subprog_type)
! 	  || TYPE_RETURNS_BY_REF_P (gnu_subprog_type))
! 	gnu_result = build_unary_op (INDIRECT_REF, NULL_TREE, gnu_result);
! 
!       if (gnu_target)
! 	gnu_result = build_binary_op (MODIFY_EXPR, NULL_TREE,
! 				      gnu_target, gnu_result);
!       else
! 	*gnu_result_type_p = get_unpadded_type (Etype (gnat_node));
! 
!       return gnu_result;
!     }
! 
!   /* If this is the case where the GNAT tree contains a procedure call
!      but the Ada procedure has copy in copy out parameters, the special
!      parameter passing mechanism must be used.  */
!   else if (TYPE_CI_CO_LIST (gnu_subprog_type) != NULL_TREE)
!     {
!       /* List of FIELD_DECLs associated with the PARM_DECLs of the copy
! 	 in copy out parameters.  */
!       tree scalar_return_list = TYPE_CI_CO_LIST (gnu_subprog_type);
!       int length = list_length (scalar_return_list);
! 
!       if (length > 1)
  	{
! 	  tree gnu_name;
! 
! 	  gnu_subprog_call = save_expr (gnu_subprog_call);
! 	  gnu_name_list = nreverse (gnu_name_list);
! 
! 	  /* If any of the names had side-effects, ensure they are all
! 	     evaluated before the call.  */
! 	  for (gnu_name = gnu_name_list; gnu_name;
! 	       gnu_name = TREE_CHAIN (gnu_name))
! 	    if (TREE_SIDE_EFFECTS (TREE_VALUE (gnu_name)))
! 	      append_to_statement_list (TREE_VALUE (gnu_name),
! 					&gnu_before_list);
  	}
  
!       if (Nkind (Name (gnat_node)) == N_Explicit_Dereference)
! 	gnat_formal = First_Formal (Etype (Name (gnat_node)));
!       else
! 	gnat_formal = First_Formal (Entity (Name (gnat_node)));
! 
!       for (gnat_actual = First_Actual (gnat_node);
! 	   Present (gnat_actual);
! 	   gnat_formal = Next_Formal_With_Extras (gnat_formal),
! 	   gnat_actual = Next_Actual (gnat_actual))
! 	/* If we are dealing with a copy in copy out parameter, we must
! 	   retrieve its value from the record returned in the call.  */
! 	if (!(present_gnu_tree (gnat_formal)
! 	      && TREE_CODE (get_gnu_tree (gnat_formal)) == PARM_DECL
! 	      && (DECL_BY_REF_P (get_gnu_tree (gnat_formal))
! 		  || (TREE_CODE (get_gnu_tree (gnat_formal)) == PARM_DECL
! 		      && ((DECL_BY_COMPONENT_PTR_P (get_gnu_tree (gnat_formal))
! 			   || (DECL_BY_DESCRIPTOR_P
! 			       (get_gnu_tree (gnat_formal))))))))
! 	    && Ekind (gnat_formal) != E_In_Parameter)
! 	  {
! 	    /* Get the value to assign to this OUT or IN OUT parameter.  It is
! 	       either the result of the function if there is only a single such
! 	       parameter or the appropriate field from the record returned.  */
! 	    tree gnu_result
! 	      = length == 1 ? gnu_subprog_call
! 		: build_component_ref (gnu_subprog_call, NULL_TREE,
! 				       TREE_PURPOSE (scalar_return_list),
! 				       false);
! 	    bool unchecked_conversion = (Nkind (gnat_actual)
! 					 == N_Unchecked_Type_Conversion);
! 	    /* If the actual is a conversion, get the inner expression, which
! 	       will be the real destination, and convert the result to the
! 	       type of the actual parameter.  */
! 	    tree gnu_actual
! 	      = maybe_unconstrained_array (TREE_VALUE (gnu_name_list));
! 
! 	    /* If the result is a padded type, remove the padding.  */
! 	    if (TREE_CODE (TREE_TYPE (gnu_result)) == RECORD_TYPE
! 		&& TYPE_IS_PADDING_P (TREE_TYPE (gnu_result)))
! 	      gnu_result = convert (TREE_TYPE (TYPE_FIELDS
! 					       (TREE_TYPE (gnu_result))),
! 				    gnu_result);
! 
! 	    /* If the result is a type conversion, do it.  */
! 	    if (Nkind (gnat_actual) == N_Type_Conversion)
! 	      gnu_result
! 		= convert_with_check
! 		  (Etype (Expression (gnat_actual)), gnu_result,
! 		   Do_Overflow_Check (gnat_actual),
! 		   Do_Range_Check (Expression (gnat_actual)),
! 		   Float_Truncate (gnat_actual));
! 
! 	    else if (unchecked_conversion)
! 	      gnu_result = unchecked_convert (TREE_TYPE (gnu_actual),
! 					      gnu_result,
! 					      No_Truncation (gnat_actual));
! 	    else
! 	      {
! 		if (Do_Range_Check (gnat_actual))
! 		  gnu_result = emit_range_check (gnu_result,
! 						 Etype (gnat_actual));
! 
! 		if (!(!TREE_CONSTANT (TYPE_SIZE (TREE_TYPE (gnu_actual)))
! 		      && TREE_CONSTANT (TYPE_SIZE (TREE_TYPE (gnu_result)))))
! 		  gnu_result = convert (TREE_TYPE (gnu_actual), gnu_result);
! 	      }
! 		
! 	    gnu_result = build_binary_op (MODIFY_EXPR, NULL_TREE,
! 					  gnu_actual, gnu_result);
! 	    annotate_with_node (gnu_result, gnat_actual);
! 	    append_to_statement_list (gnu_result, &gnu_before_list);
! 	    scalar_return_list = TREE_CHAIN (scalar_return_list);
! 	    gnu_name_list = TREE_CHAIN (gnu_name_list);
! 	  }
! 	}
!   else
!     {
!       annotate_with_node (gnu_subprog_call, gnat_node);
!       append_to_statement_list (gnu_subprog_call, &gnu_before_list);
!     }
! 
!   append_to_statement_list (gnu_after_list, &gnu_before_list);
!   return gnu_before_list;
! }
! 
! /* Subroutine of gnat_to_gnu to translate gnat_node, an
!    N_Handled_Sequence_Of_Statements, to a GCC tree, which is returned.  */
! 
! static tree
! Handled_Sequence_Of_Statements_to_gnu (Node_Id gnat_node)
! {
!   tree gnu_jmpsave_decl = NULL_TREE;
!   tree gnu_jmpbuf_decl = NULL_TREE;
!   /* If just annotating, ignore all EH and cleanups.  */
!   bool gcc_zcx = (!type_annotate_only
! 		  && Present (Exception_Handlers (gnat_node))
! 		  && Exception_Mechanism == GCC_ZCX);
!   bool setjmp_longjmp
!     = (!type_annotate_only && Present (Exception_Handlers (gnat_node))
!        && Exception_Mechanism == Setjmp_Longjmp);
!   bool at_end = !type_annotate_only && Present (At_End_Proc (gnat_node));
!   bool binding_for_block = (at_end || gcc_zcx || setjmp_longjmp);
!   tree gnu_inner_block; /* The statement(s) for the block itself.  */
!   tree gnu_result;
!   tree gnu_expr;
!   Node_Id gnat_temp;
! 
!   /* The GCC exception handling mechanism can handle both ZCX and SJLJ schemes
!      and we have our own SJLJ mechanism.  To call the GCC mechanism, we call
!      add_cleanup, and when we leave the binding, end_stmt_group will create
!      the TRY_FINALLY_EXPR.
! 
!      ??? The region level calls down there have been specifically put in place
!      for a ZCX context and currently the order in which things are emitted
!      (region/handlers) is different from the SJLJ case. Instead of putting
!      other calls with different conditions at other places for the SJLJ case,
!      it seems cleaner to reorder things for the SJLJ case and generalize the
!      condition to make it not ZCX specific.
! 
!      If there are any exceptions or cleanup processing involved, we need an
!      outer statement group (for Setjmp_Longjmp) and binding level.  */
!   if (binding_for_block)
!     {
!       start_stmt_group ();
!       gnat_pushlevel ();
!     }
! 
!   /* If we are to call a function when exiting this block add a cleanup
!      to the binding level we made above.  */
!   if (at_end)
!     add_cleanup (build_call_0_expr (gnat_to_gnu (At_End_Proc (gnat_node))));
! 
!   /* If using setjmp_longjmp, make the variables for the setjmp buffer and save
!      area for address of previous buffer.  Do this first since we need to have
!      the setjmp buf known for any decls in this block.  */
!   if (setjmp_longjmp)
!     {
!       gnu_jmpsave_decl = create_var_decl (get_identifier ("JMPBUF_SAVE"),
! 					  NULL_TREE, jmpbuf_ptr_type,
! 					  build_call_0_expr (get_jmpbuf_decl),
! 					  false, false, false, false, NULL,
! 					  gnat_node);
!       gnu_jmpbuf_decl = create_var_decl (get_identifier ("JMP_BUF"),
! 					 NULL_TREE, jmpbuf_type,
! 					 NULL_TREE, false, false, false, false,
! 					 NULL, gnat_node);
! 
!       set_block_jmpbuf_decl (gnu_jmpbuf_decl);
! 
!       /* When we exit this block, restore the saved value.  */
!       add_cleanup (build_call_1_expr (set_jmpbuf_decl, gnu_jmpsave_decl));
!     }
! 
!   /* Now build the tree for the declarations and statements inside this block.
!      If this is SJLJ, set our jmp_buf as the current buffer.  */
!   start_stmt_group ();
! 
!   if (setjmp_longjmp)
!     add_stmt (build_call_1_expr (set_jmpbuf_decl,
! 				 build_unary_op (ADDR_EXPR, NULL_TREE,
! 						 gnu_jmpbuf_decl)));
! 
!   if (Present (First_Real_Statement (gnat_node)))
!     process_decls (Statements (gnat_node), Empty,
! 		   First_Real_Statement (gnat_node), true, true);
! 
!   /* Generate code for each statement in the block.  */
!   for (gnat_temp = (Present (First_Real_Statement (gnat_node))
! 		    ? First_Real_Statement (gnat_node)
! 		    : First (Statements (gnat_node)));
!        Present (gnat_temp); gnat_temp = Next (gnat_temp))
!     add_stmt (gnat_to_gnu (gnat_temp));
!   gnu_inner_block = end_stmt_group ();
! 
!   /* Now generate code for the two exception models, if either is relevant for
!      this block.  */
!   if (setjmp_longjmp)
!     {
!       tree *gnu_else_ptr = 0;
!       tree gnu_handler;
! 
!       /* Make a binding level for the exception handling declarations and code
! 	 and set up gnu_except_ptr_stack for the handlers to use.  */
!       start_stmt_group ();
!       gnat_pushlevel ();
! 
!       push_stack (&gnu_except_ptr_stack, NULL_TREE,
! 		  create_var_decl (get_identifier ("EXCEPT_PTR"),
! 				   NULL_TREE,
! 				   build_pointer_type (except_type_node),
! 				   build_call_0_expr (get_excptr_decl), false,
! 				   false, false, false, NULL, gnat_node));
! 
!       /* Generate code for each handler. The N_Exception_Handler case does the
! 	 real work and returns a COND_EXPR for each handler, which we chain
! 	 together here.  */
!       for (gnat_temp = First_Non_Pragma (Exception_Handlers (gnat_node));
! 	   Present (gnat_temp); gnat_temp = Next_Non_Pragma (gnat_temp))
  	{
! 	  gnu_expr = gnat_to_gnu (gnat_temp);
  
! 	  /* If this is the first one, set it as the outer one. Otherwise,
! 	     point the "else" part of the previous handler to us. Then point
! 	     to our "else" part.  */
! 	  if (!gnu_else_ptr)
! 	    add_stmt (gnu_expr);
! 	  else
! 	    *gnu_else_ptr = gnu_expr;
  
! 	  gnu_else_ptr = &COND_EXPR_ELSE (gnu_expr);
  	}
  
!       /* If none of the exception handlers did anything, re-raise but do not
! 	 defer abortion.  */
!       gnu_expr = build_call_1_expr (raise_nodefer_decl,
! 				    TREE_VALUE (gnu_except_ptr_stack));
!       annotate_with_node (gnu_expr, gnat_node);
! 
!       if (gnu_else_ptr)
! 	*gnu_else_ptr = gnu_expr;
!       else
! 	add_stmt (gnu_expr);
! 
!       /* End the binding level dedicated to the exception handlers and get the
! 	 whole statement group.  */
!       pop_stack (&gnu_except_ptr_stack);
!       gnat_poplevel ();
!       gnu_handler = end_stmt_group ();
! 
!       /* If the setjmp returns 1, we restore our incoming longjmp value and
! 	 then check the handlers.  */
!       start_stmt_group ();
!       add_stmt_with_node (build_call_1_expr (set_jmpbuf_decl,
! 					     gnu_jmpsave_decl),
! 			  gnat_node);
!       add_stmt (gnu_handler);
!       gnu_handler = end_stmt_group ();
! 
!       /* This block is now "if (setjmp) ... <handlers> else <block>".  */
!       gnu_result = build3 (COND_EXPR, void_type_node,
! 			   (build_call_1_expr
! 			    (setjmp_decl,
! 			     build_unary_op (ADDR_EXPR, NULL_TREE,
! 					     gnu_jmpbuf_decl))),
! 			   gnu_handler, gnu_inner_block);
!     }
!   else if (gcc_zcx)
!     {
!       tree gnu_handlers;
! 
!       /* First make a block containing the handlers.  */
!       start_stmt_group ();
!       for (gnat_temp = First_Non_Pragma (Exception_Handlers (gnat_node));
! 	   Present (gnat_temp);
! 	   gnat_temp = Next_Non_Pragma (gnat_temp))
! 	add_stmt (gnat_to_gnu (gnat_temp));
!       gnu_handlers = end_stmt_group ();
! 
!       /* Now make the TRY_CATCH_EXPR for the block.  */
!       gnu_result = build2 (TRY_CATCH_EXPR, void_type_node,
! 			   gnu_inner_block, gnu_handlers);
!     }
!   else
!     gnu_result = gnu_inner_block;
! 
!   /* Now close our outer block, if we had to make one.  */
!   if (binding_for_block)
!     {
!       add_stmt (gnu_result);
!       gnat_poplevel ();
!       gnu_result = end_stmt_group ();
!     }
! 
!   return gnu_result;
! }
! 
! /* Subroutine of gnat_to_gnu to translate gnat_node, an N_Exception_Handler,
!    to a GCC tree, which is returned.  This is the variant for Setjmp_Longjmp
!    exception handling.  */
! 
! static tree
! Exception_Handler_to_gnu_sjlj (Node_Id gnat_node)
! {
!   /* Unless this is "Others" or the special "Non-Ada" exception for Ada, make
!      an "if" statement to select the proper exceptions.  For "Others", exclude
!      exceptions where Handled_By_Others is nonzero unless the All_Others flag
!      is set. For "Non-ada", accept an exception if "Lang" is 'V'.  */
!   tree gnu_choice = integer_zero_node;
!   tree gnu_body = build_stmt_group (Statements (gnat_node), false);
!   Node_Id gnat_temp;
! 
!   for (gnat_temp = First (Exception_Choices (gnat_node));
!        gnat_temp; gnat_temp = Next (gnat_temp))
!     {
!       tree this_choice;
! 
!       if (Nkind (gnat_temp) == N_Others_Choice)
  	{
! 	  if (All_Others (gnat_temp))
! 	    this_choice = integer_one_node;
! 	  else
! 	    this_choice
! 	      = build_binary_op
! 		(EQ_EXPR, integer_type_node,
! 		 convert
! 		 (integer_type_node,
! 		  build_component_ref
! 		  (build_unary_op
! 		   (INDIRECT_REF, NULL_TREE,
! 		    TREE_VALUE (gnu_except_ptr_stack)),
! 		   get_identifier ("not_handled_by_others"), NULL_TREE,
! 		   false)),
! 		 integer_zero_node);
  	}
  
!       else if (Nkind (gnat_temp) == N_Identifier
! 	       || Nkind (gnat_temp) == N_Expanded_Name)
  	{
! 	  Entity_Id gnat_ex_id = Entity (gnat_temp);
! 	  tree gnu_expr;
! 
! 	  /* Exception may be a renaming. Recover original exception which is
! 	     the one elaborated and registered.  */
! 	  if (Present (Renamed_Object (gnat_ex_id)))
! 	    gnat_ex_id = Renamed_Object (gnat_ex_id);
! 
! 	  gnu_expr = gnat_to_gnu_entity (gnat_ex_id, NULL_TREE, 0);
! 
! 	  this_choice
! 	    = build_binary_op
! 	      (EQ_EXPR, integer_type_node, TREE_VALUE (gnu_except_ptr_stack),
! 	       convert (TREE_TYPE (TREE_VALUE (gnu_except_ptr_stack)),
! 			build_unary_op (ADDR_EXPR, NULL_TREE, gnu_expr)));
! 
! 	  /* If this is the distinguished exception "Non_Ada_Error" (and we are
! 	     in VMS mode), also allow a non-Ada exception (a VMS condition) t
! 	     match.  */
! 	  if (Is_Non_Ada_Error (Entity (gnat_temp)))
! 	    {
! 	      tree gnu_comp
! 		= build_component_ref
! 		  (build_unary_op (INDIRECT_REF, NULL_TREE,
! 				   TREE_VALUE (gnu_except_ptr_stack)),
! 		   get_identifier ("lang"), NULL_TREE, false);
! 
! 	      this_choice
! 		= build_binary_op
! 		  (TRUTH_ORIF_EXPR, integer_type_node,
! 		   build_binary_op (EQ_EXPR, integer_type_node, gnu_comp,
! 				    build_int_cst (TREE_TYPE (gnu_comp), 'V')),
! 		   this_choice);
! 	    }
  	}
+       else
+ 	gcc_unreachable ();
+ 
+       gnu_choice = build_binary_op (TRUTH_ORIF_EXPR, integer_type_node,
+ 				    gnu_choice, this_choice);
+     }
+ 
+   return build3 (COND_EXPR, void_type_node, gnu_choice, gnu_body, NULL_TREE);
+ }
+ 
+ /* Subroutine of gnat_to_gnu to translate gnat_node, an N_Exception_Handler,
+    to a GCC tree, which is returned.  This is the variant for ZCX.  */
+ 
+ static tree
+ Exception_Handler_to_gnu_zcx (Node_Id gnat_node)
+ {
+   tree gnu_etypes_list = NULL_TREE;
+   tree gnu_expr;
+   tree gnu_etype;
+   tree gnu_current_exc_ptr;
+   tree gnu_incoming_exc_ptr;
+   Node_Id gnat_temp;
+ 
+   /* We build a TREE_LIST of nodes representing what exception types this
+      handler can catch, with special cases for others and all others cases.
+ 
+      Each exception type is actually identified by a pointer to the exception
+      id, or to a dummy object for "others" and "all others".
+ 
+      Care should be taken to ensure that the control flow impact of "others"
+      and "all others" is known to GCC. lang_eh_type_covers is doing the trick
+      currently.  */
+   for (gnat_temp = First (Exception_Choices (gnat_node));
+        gnat_temp; gnat_temp = Next (gnat_temp))
+     {
+       if (Nkind (gnat_temp) == N_Others_Choice)
+ 	{
+ 	  tree gnu_expr
+ 	    = All_Others (gnat_temp) ? all_others_decl : others_decl;
+ 
+ 	  gnu_etype
+ 	    = build_unary_op (ADDR_EXPR, NULL_TREE, gnu_expr);
+ 	}
+       else if (Nkind (gnat_temp) == N_Identifier
+ 	       || Nkind (gnat_temp) == N_Expanded_Name)
+ 	{
+ 	  Entity_Id gnat_ex_id = Entity (gnat_temp);
+ 
+ 	  /* Exception may be a renaming. Recover original exception which is
+ 	     the one elaborated and registered.  */
+ 	  if (Present (Renamed_Object (gnat_ex_id)))
+ 	    gnat_ex_id = Renamed_Object (gnat_ex_id);
+ 
+ 	  gnu_expr = gnat_to_gnu_entity (gnat_ex_id, NULL_TREE, 0);
+ 	  gnu_etype = build_unary_op (ADDR_EXPR, NULL_TREE, gnu_expr);
+ 
+ 	  /* The Non_Ada_Error case for VMS exceptions is handled
+ 	     by the personality routine.  */
+ 	}
+       else
+ 	gcc_unreachable ();
+ 
+       /* The GCC interface expects NULL to be passed for catch all handlers, so
+ 	 it would be quite tempting to set gnu_etypes_list to NULL if gnu_etype
+ 	 is integer_zero_node.  It would not work, however, because GCC's
+ 	 notion of "catch all" is stronger than our notion of "others".  Until
+ 	 we correctly use the cleanup interface as well, doing that would
+ 	 prevent the "all others" handlers from beeing seen, because nothing
+ 	 can be caught beyond a catch all from GCC's point of view.  */
+       gnu_etypes_list = tree_cons (NULL_TREE, gnu_etype, gnu_etypes_list);
+     }
+ 
+   start_stmt_group ();
+   gnat_pushlevel ();
+ 
+   /* Expand a call to the begin_handler hook at the beginning of the handler,
+      and arrange for a call to the end_handler hook to occur on every possible
+      exit path.
+ 
+      The hooks expect a pointer to the low level occurrence. This is required
+      for our stack management scheme because a raise inside the handler pushes
+      a new occurrence on top of the stack, which means that this top does not
+      necessarily match the occurrence this handler was dealing with.
+ 
+      The EXC_PTR_EXPR object references the exception occurrence being
+      propagated. Upon handler entry, this is the exception for which the
+      handler is triggered. This might not be the case upon handler exit,
+      however, as we might have a new occurrence propagated by the handler's
+      body, and the end_handler hook called as a cleanup in this context.
+ 
+      We use a local variable to retrieve the incoming value at handler entry
+      time, and reuse it to feed the end_handler hook's argument at exit.  */
+   gnu_current_exc_ptr = build0 (EXC_PTR_EXPR, ptr_type_node);
+   gnu_incoming_exc_ptr = create_var_decl (get_identifier ("EXPTR"), NULL_TREE,
+ 					  ptr_type_node, gnu_current_exc_ptr,
+ 					  false, false, false, false, NULL,
+ 					  gnat_node);
+ 
+   add_stmt_with_node (build_call_1_expr (begin_handler_decl,
+ 					 gnu_incoming_exc_ptr),
+ 		      gnat_node);
+   add_cleanup (build_call_1_expr (end_handler_decl, gnu_incoming_exc_ptr));
+   add_stmt_list (Statements (gnat_node));
+   gnat_poplevel ();
+ 
+   return build2 (CATCH_EXPR, void_type_node, gnu_etypes_list,
+ 		 end_stmt_group ());
+ }
+ 
+ /* Subroutine of gnat_to_gnu to generate code for an N_Compilation unit.  */
+ 
+ static void
+ Compilation_Unit_to_gnu (Node_Id gnat_node)
+ {
+   /* Make the decl for the elaboration procedure.  */
+   bool body_p = (Defining_Entity (Unit (gnat_node)),
+ 	    Nkind (Unit (gnat_node)) == N_Package_Body
+ 	    || Nkind (Unit (gnat_node)) == N_Subprogram_Body);
+   Entity_Id gnat_unit_entity = Defining_Entity (Unit (gnat_node));
+   tree gnu_elab_proc_decl
+     = create_subprog_decl
+       (create_concat_name (gnat_unit_entity,
+ 			   body_p ? "elabb" : "elabs"),
+        NULL_TREE, void_ftype, NULL_TREE, false, true, false, NULL,
+        gnat_unit_entity);
+   struct elab_info *info;
+ 
+   push_stack (&gnu_elab_proc_stack, NULL_TREE, gnu_elab_proc_decl);
+ 
+   DECL_ELABORATION_PROC_P (gnu_elab_proc_decl) = 1;
+   allocate_struct_function (gnu_elab_proc_decl);
+   Sloc_to_locus (Sloc (gnat_unit_entity), &cfun->function_end_locus);
+   cfun = 0;
+ 
+       /* For a body, first process the spec if there is one. */
+   if (Nkind (Unit (gnat_node)) == N_Package_Body
+       || (Nkind (Unit (gnat_node)) == N_Subprogram_Body
+ 	      && !Acts_As_Spec (gnat_node)))
+     add_stmt (gnat_to_gnu (Library_Unit (gnat_node)));
+ 
+   process_inlined_subprograms (gnat_node);
+ 
+   if (type_annotate_only)
+     {
+       elaborate_all_entities (gnat_node);
+ 
+       if (Nkind (Unit (gnat_node)) == N_Subprogram_Declaration
+ 	  || Nkind (Unit (gnat_node)) == N_Generic_Package_Declaration
+ 	  || Nkind (Unit (gnat_node)) == N_Generic_Subprogram_Declaration)
+ 	return;
+     }
+ 
+   process_decls (Declarations (Aux_Decls_Node (gnat_node)), Empty, Empty,
+ 		 true, true);
+   add_stmt (gnat_to_gnu (Unit (gnat_node)));
+ 
+   /* Process any pragmas and actions following the unit.  */
+   add_stmt_list (Pragmas_After (Aux_Decls_Node (gnat_node)));
+   add_stmt_list (Actions (Aux_Decls_Node (gnat_node)));
+ 
+   /* Save away what we've made so far and record this potential elaboration
+      procedure.  */
+   info = (struct elab_info *) ggc_alloc (sizeof (struct elab_info));
+   set_current_block_context (gnu_elab_proc_decl);
+   gnat_poplevel ();
+   DECL_SAVED_TREE (gnu_elab_proc_decl) = end_stmt_group ();
+   info->next = elab_info_list;
+   info->elab_proc = gnu_elab_proc_decl;
+   info->gnat_node = gnat_node;
+   elab_info_list = info;
+ 
+   /* Generate elaboration code for this unit, if necessary, and say whether
+      we did or not.  */
+   pop_stack (&gnu_elab_proc_stack);
+ }
+ 
+ /* This function is the driver of the GNAT to GCC tree transformation
+    process.  It is the entry point of the tree transformer.  GNAT_NODE is the
+    root of some GNAT tree.  Return the root of the corresponding GCC tree.
+    If this is an expression, return the GCC equivalent of the expression.  If
+    it is a statement, return the statement.  In the case when called for a
+    statement, it may also add statements to the current statement group, in
+    which case anything it returns is to be interpreted as occuring after
+    anything `it already added.  */
+ 
+ tree
+ gnat_to_gnu (Node_Id gnat_node)
+ {
+   bool went_into_elab_proc = false;
+   tree gnu_result = error_mark_node; /* Default to no value. */
+   tree gnu_result_type = void_type_node;
+   tree gnu_expr;
+   tree gnu_lhs, gnu_rhs;
+   Node_Id gnat_temp;
+ 
+   /* Save node number for error message and set location information.  */
+   error_gnat_node = gnat_node;
+   Sloc_to_locus (Sloc (gnat_node), &input_location);
+ 
+   if (type_annotate_only
+       && IN (Nkind (gnat_node), N_Statement_Other_Than_Procedure_Call))
+     return alloc_stmt_list ();
+ 
+   /* If this node is a non-static subexpression and we are only
+      annotating types, make this into a NULL_EXPR.  */
+   if (type_annotate_only
+       && IN (Nkind (gnat_node), N_Subexpr)
+       && Nkind (gnat_node) != N_Identifier
+       && !Compile_Time_Known_Value (gnat_node))
+     return build1 (NULL_EXPR, get_unpadded_type (Etype (gnat_node)),
+ 		   build_call_raise (CE_Range_Check_Failed));
+ 
+   /* If this is a Statement and we are at top level, it must be part of
+      the elaboration procedure, so mark us as being in that procedure
+      and push our context.  */
+   if (!current_function_decl
+       && ((IN (Nkind (gnat_node), N_Statement_Other_Than_Procedure_Call)
+ 	   && Nkind (gnat_node) != N_Null_Statement)
+ 	  || Nkind (gnat_node) == N_Procedure_Call_Statement
+ 	  || Nkind (gnat_node) == N_Label
+ 	  || Nkind (gnat_node) == N_Implicit_Label_Declaration
+ 	  || Nkind (gnat_node) == N_Handled_Sequence_Of_Statements
+ 	  || ((Nkind (gnat_node) == N_Raise_Constraint_Error
+ 	       || Nkind (gnat_node) == N_Raise_Storage_Error
+ 	       || Nkind (gnat_node) == N_Raise_Program_Error)
+ 	      && (Ekind (Etype (gnat_node)) == E_Void))))
+     {
+       current_function_decl = TREE_VALUE (gnu_elab_proc_stack);
+       start_stmt_group ();
+       gnat_pushlevel ();
+       went_into_elab_proc = true;
+     }
+ 
+   switch (Nkind (gnat_node))
+     {
+       /********************************/
+       /* Chapter 2: Lexical Elements: */
+       /********************************/
+ 
+     case N_Identifier:
+     case N_Expanded_Name:
+     case N_Operator_Symbol:
+     case N_Defining_Identifier:
+       gnu_result = Identifier_to_gnu (gnat_node, &gnu_result_type);
        break;
  
      case N_Integer_Literal:
*************** tree_transform (Node_Id gnat_node)
*** 493,503 ****
  	tree gnu_type;
  
  	/* Get the type of the result, looking inside any padding and
! 	   left-justified modular types.  Then get the value in that type.  */
  	gnu_type = gnu_result_type = get_unpadded_type (Etype (gnat_node));
  
  	if (TREE_CODE (gnu_type) == RECORD_TYPE
! 	    && TYPE_LEFT_JUSTIFIED_MODULAR_P (gnu_type))
  	  gnu_type = TREE_TYPE (TYPE_FIELDS (gnu_type));
  
  	gnu_result = UI_To_gnu (Intval (gnat_node), gnu_type);
--- 2519,2529 ----
  	tree gnu_type;
  
  	/* Get the type of the result, looking inside any padding and
! 	   justified modular types.  Then get the value in that type.  */
  	gnu_type = gnu_result_type = get_unpadded_type (Etype (gnat_node));
  
  	if (TREE_CODE (gnu_type) == RECORD_TYPE
! 	    && TYPE_JUSTIFIED_MODULAR_P (gnu_type))
  	  gnu_type = TREE_TYPE (TYPE_FIELDS (gnu_type));
  
  	gnu_result = UI_To_gnu (Intval (gnat_node), gnu_type);
*************** tree_transform (Node_Id gnat_node)
*** 507,514 ****
  	   of the subtype, but that causes problems with subtypes whose usage
  	   will raise Constraint_Error and with biased representation, so
  	   we don't.  */
! 	if (TREE_CONSTANT_OVERFLOW (gnu_result))
! 	  gigi_abort (305);
        }
        break;
  
--- 2533,2539 ----
  	   of the subtype, but that causes problems with subtypes whose usage
  	   will raise Constraint_Error and with biased representation, so
  	   we don't.  */
! 	gcc_assert (!TREE_CONSTANT_OVERFLOW (gnu_result));
        }
        break;
  
*************** tree_transform (Node_Id gnat_node)
*** 522,529 ****
        if (Present (Entity (gnat_node)))
  	gnu_result = DECL_INITIAL (get_gnu_tree (Entity (gnat_node)));
        else
! 	gnu_result = convert (gnu_result_type,
! 			      build_int_2 (Char_Literal_Value (gnat_node), 0));
        break;
  
      case N_Real_Literal:
--- 2547,2557 ----
        if (Present (Entity (gnat_node)))
  	gnu_result = DECL_INITIAL (get_gnu_tree (Entity (gnat_node)));
        else
! 	gnu_result
! 	  = force_fit_type
! 	    (build_int_cst
! 	      (gnu_result_type, UI_To_CC (Char_Literal_Value (gnat_node))),
! 	     false, false, false);
        break;
  
      case N_Real_Literal:
*************** tree_transform (Node_Id gnat_node)
*** 534,547 ****
  	  gnu_result_type = get_unpadded_type (Etype (gnat_node));
  	  gnu_result = UI_To_gnu (Corresponding_Integer_Value (gnat_node),
  				  gnu_result_type);
! 	  if (TREE_CONSTANT_OVERFLOW (gnu_result))
! 	    gigi_abort (305);
  	}
  
        /* We should never see a Vax_Float type literal, since the front end
           is supposed to transform these using appropriate conversions */
        else if (Vax_Float (Underlying_Type (Etype (gnat_node))))
! 	gigi_abort (334);
  
        else
          {
--- 2562,2574 ----
  	  gnu_result_type = get_unpadded_type (Etype (gnat_node));
  	  gnu_result = UI_To_gnu (Corresponding_Integer_Value (gnat_node),
  				  gnu_result_type);
! 	  gcc_assert (!TREE_CONSTANT_OVERFLOW (gnu_result));
  	}
  
        /* We should never see a Vax_Float type literal, since the front end
           is supposed to transform these using appropriate conversions */
        else if (Vax_Float (Underlying_Type (Etype (gnat_node))))
! 	gcc_unreachable ();
  
        else
          {
*************** tree_transform (Node_Id gnat_node)
*** 556,562 ****
  	    gnu_result = convert (gnu_result_type, integer_zero_node);
  	  else
  	    {
! 	      if (! Is_Machine_Number (gnat_node))
  		ur_realval
  		  = Machine (Base_Type (Underlying_Type (Etype (gnat_node))),
  			     ur_realval, Round_Even, gnat_node);
--- 2583,2589 ----
  	    gnu_result = convert (gnu_result_type, integer_zero_node);
  	  else
  	    {
! 	      if (!Is_Machine_Number (gnat_node))
  		ur_realval
  		  = Machine (Base_Type (Underlying_Type (Etype (gnat_node))),
  			     ur_realval, Round_Even, gnat_node);
*************** tree_transform (Node_Id gnat_node)
*** 568,587 ****
  		 Otherwise, the base must be 2 and we scale the value, which
  		 we know can fit in the mantissa of the type (hence the use
  		 of that type above).  */
! 	      if (Rbase (ur_realval) == 0)
  		gnu_result
  		  = build_binary_op (RDIV_EXPR,
  				     get_base_type (gnu_result_type),
  				     gnu_result,
  				     UI_To_gnu (Denominator (ur_realval),
  						gnu_result_type));
- 	      else if (Rbase (ur_realval) != 2)
- 		gigi_abort (336);
- 
  	      else
  		{
  		  REAL_VALUE_TYPE tmp;
  
  		  real_ldexp (&tmp, &TREE_REAL_CST (gnu_result),
  			      - UI_To_Int (Denominator (ur_realval)));
  		  gnu_result = build_real (gnu_result_type, tmp);
--- 2595,2612 ----
  		 Otherwise, the base must be 2 and we scale the value, which
  		 we know can fit in the mantissa of the type (hence the use
  		 of that type above).  */
! 	      if (No (Rbase (ur_realval)))
  		gnu_result
  		  = build_binary_op (RDIV_EXPR,
  				     get_base_type (gnu_result_type),
  				     gnu_result,
  				     UI_To_gnu (Denominator (ur_realval),
  						gnu_result_type));
  	      else
  		{
  		  REAL_VALUE_TYPE tmp;
  
+ 		  gcc_assert (Rbase (ur_realval) == 2);
  		  real_ldexp (&tmp, &TREE_REAL_CST (gnu_result),
  			      - UI_To_Int (Denominator (ur_realval)));
  		  gnu_result = build_real (gnu_result_type, tmp);
*************** tree_transform (Node_Id gnat_node)
*** 602,610 ****
        gnu_result_type = get_unpadded_type (Etype (gnat_node));
        if (TYPE_PRECISION (TREE_TYPE (gnu_result_type)) == HOST_BITS_PER_CHAR)
  	{
- 	  /* We assume here that all strings are of type standard.string.
- 	     "Weird" types of string have been converted to an aggregate
- 	     by the expander. */
  	  String_Id gnat_string = Strval (gnat_node);
  	  int length = String_Length (gnat_string);
  	  char *string = (char *) alloca (length + 1);
--- 2627,2632 ----
*************** tree_transform (Node_Id gnat_node)
*** 633,647 ****
  	  int length = String_Length (gnat_string);
  	  int i;
  	  tree gnu_list = NULL_TREE;
  
  	  for (i = 0; i < length; i++)
! 	    gnu_list
! 	      = tree_cons (NULL_TREE,
! 			   convert (TREE_TYPE (gnu_result_type),
! 				    build_int_2 (Get_String_Char (gnat_string,
! 								  i + 1),
! 						 0)),
! 			   gnu_list);
  
  	  gnu_result
  	    = gnat_build_constructor (gnu_result_type, nreverse (gnu_list));
--- 2655,2674 ----
  	  int length = String_Length (gnat_string);
  	  int i;
  	  tree gnu_list = NULL_TREE;
+ 	  tree gnu_idx = TYPE_MIN_VALUE (TYPE_DOMAIN (gnu_result_type));
  
  	  for (i = 0; i < length; i++)
! 	    {
! 	      gnu_list
! 		= tree_cons (gnu_idx,
! 			     build_int_cst (TREE_TYPE (gnu_result_type),
! 					    Get_String_Char (gnat_string,
! 							     i + 1)),
! 			     gnu_list);
! 
! 	      gnu_idx = int_const_binop (PLUS_EXPR, gnu_idx, integer_one_node,
! 					 0);
! 	    }
  
  	  gnu_result
  	    = gnat_build_constructor (gnu_result_type, nreverse (gnu_list));
*************** tree_transform (Node_Id gnat_node)
*** 649,709 ****
        break;
  
      case N_Pragma:
!       if (type_annotate_only)
! 	break;
! 
!       /* Check for (and ignore) unrecognized pragma */
!       if (! Is_Pragma_Name (Chars (gnat_node)))
!         break;
! 
!       switch (Get_Pragma_Id (Chars (gnat_node)))
! 	{
! 	case Pragma_Inspection_Point:
! 	  /* Do nothing at top level: all such variables are already
! 	     viewable.  */
! 	  if (global_bindings_p ())
! 	    break;
! 
! 	  set_lineno (gnat_node, 1);
! 	  for (gnat_temp = First (Pragma_Argument_Associations (gnat_node));
! 	       Present (gnat_temp);
! 	       gnat_temp = Next (gnat_temp))
! 	    {
! 	      gnu_expr = gnat_to_gnu (Expression (gnat_temp));
! 	      if (TREE_CODE (gnu_expr) == UNCONSTRAINED_ARRAY_REF)
! 		gnu_expr = TREE_OPERAND (gnu_expr, 0);
! 
! 	      gnu_expr = build1 (USE_EXPR, void_type_node, gnu_expr);
! 	      TREE_SIDE_EFFECTS (gnu_expr) = 1;
! 	      expand_expr_stmt (gnu_expr);
! 	    }
! 	  break;
! 
! 	case Pragma_Optimize:
! 	  switch (Chars (Expression
! 			 (First (Pragma_Argument_Associations (gnat_node)))))
! 	    {
! 	    case Name_Time:  case Name_Space:
! 	      if (optimize == 0)
! 		post_error ("insufficient -O value?", gnat_node);
! 	      break;
! 
! 	    case Name_Off:
! 	      if (optimize != 0)
! 		post_error ("must specify -O0?", gnat_node);
! 	      break;
! 
! 	    default:
! 	      gigi_abort (331);
! 	      break;
! 	    }
! 	  break;
! 
! 	case Pragma_Reviewable:
! 	  if (write_symbols == NO_DEBUG)
! 	    post_error ("must specify -g?", gnat_node);
! 	  break;
! 	}
        break;
  
      /**************************************/
--- 2676,2682 ----
        break;
  
      case N_Pragma:
!       gnu_result = Pragma_to_gnu (gnat_node);
        break;
  
      /**************************************/
*************** tree_transform (Node_Id gnat_node)
*** 717,741 ****
      case N_Private_Extension_Declaration:
      case N_Task_Type_Declaration:
        process_type (Defining_Entity (gnat_node));
        break;
  
      case N_Object_Declaration:
      case N_Exception_Declaration:
        gnat_temp = Defining_Entity (gnat_node);
  
        /* If we are just annotating types and this object has an unconstrained
  	 or task type, don't elaborate it.   */
        if (type_annotate_only
  	  && (((Is_Array_Type (Etype (gnat_temp))
  		|| Is_Record_Type (Etype (gnat_temp)))
! 	       && ! Is_Constrained (Etype (gnat_temp)))
  	    || Is_Concurrent_Type (Etype (gnat_temp))))
  	break;
  
        if (Present (Expression (gnat_node))
! 	  && ! (Nkind (gnat_node) == N_Object_Declaration
! 		&& No_Initialization (gnat_node))
! 	  && (! type_annotate_only
  	      || Compile_Time_Known_Value (Expression (gnat_node))))
  	{
  	  gnu_expr = gnat_to_gnu (Expression (gnat_node));
--- 2690,2716 ----
      case N_Private_Extension_Declaration:
      case N_Task_Type_Declaration:
        process_type (Defining_Entity (gnat_node));
+       gnu_result = alloc_stmt_list ();
        break;
  
      case N_Object_Declaration:
      case N_Exception_Declaration:
        gnat_temp = Defining_Entity (gnat_node);
+       gnu_result = alloc_stmt_list ();
  
        /* If we are just annotating types and this object has an unconstrained
  	 or task type, don't elaborate it.   */
        if (type_annotate_only
  	  && (((Is_Array_Type (Etype (gnat_temp))
  		|| Is_Record_Type (Etype (gnat_temp)))
! 	       && !Is_Constrained (Etype (gnat_temp)))
  	    || Is_Concurrent_Type (Etype (gnat_temp))))
  	break;
  
        if (Present (Expression (gnat_node))
! 	  && !(Nkind (gnat_node) == N_Object_Declaration
! 	       && No_Initialization (gnat_node))
! 	  && (!type_annotate_only
  	      || Compile_Time_Known_Value (Expression (gnat_node))))
  	{
  	  gnu_expr = gnat_to_gnu (Expression (gnat_node));
*************** tree_transform (Node_Id gnat_node)
*** 748,795 ****
  	  if (Present (Freeze_Node (gnat_temp)))
  	    {
  	      if ((Is_Public (gnat_temp) || global_bindings_p ())
! 		  && ! TREE_CONSTANT (gnu_expr))
  		gnu_expr
  		  = create_var_decl (create_concat_name (gnat_temp, "init"),
! 				     NULL_TREE, TREE_TYPE (gnu_expr), gnu_expr,
! 				     0, Is_Public (gnat_temp), 0, 0, 0);
  	      else
! 		gnu_expr = maybe_variable (gnu_expr, Expression (gnat_node));
  
! 	      save_gnu_tree (gnat_node, gnu_expr, 1);
  	    }
  	}
        else
! 	gnu_expr = 0;
  
!       if (type_annotate_only && gnu_expr != 0
! 	  && TREE_CODE (gnu_expr) == ERROR_MARK)
! 	gnu_expr = 0;
  
        if (No (Freeze_Node (gnat_temp)))
  	gnat_to_gnu_entity (gnat_temp, gnu_expr, 1);
        break;
  
      case N_Object_Renaming_Declaration:
- 
        gnat_temp = Defining_Entity (gnat_node);
  
!       /* Don't do anything if this renaming is handled by the front end.
! 	 or if we are just annotating types and this object has a
! 	 composite or task type, don't elaborate it.  */
!       if (! Is_Renaming_Of_Object (gnat_temp)
  	  && ! (type_annotate_only
  		&& (Is_Array_Type (Etype (gnat_temp))
  		    || Is_Record_Type (Etype (gnat_temp))
  		    || Is_Concurrent_Type (Etype (gnat_temp)))))
!         {
!           gnu_expr = gnat_to_gnu (Renamed_Object (gnat_temp));
!           gnat_to_gnu_entity (gnat_temp, gnu_expr, 1);
!         }
        break;
  
      case N_Implicit_Label_Declaration:
        gnat_to_gnu_entity (Defining_Entity (gnat_node), NULL_TREE, 1);
        break;
  
      case N_Exception_Renaming_Declaration:
--- 2723,2772 ----
  	  if (Present (Freeze_Node (gnat_temp)))
  	    {
  	      if ((Is_Public (gnat_temp) || global_bindings_p ())
! 		  && !TREE_CONSTANT (gnu_expr))
  		gnu_expr
  		  = create_var_decl (create_concat_name (gnat_temp, "init"),
! 				     NULL_TREE, TREE_TYPE (gnu_expr),
! 				     gnu_expr, false, Is_Public (gnat_temp),
! 				     false, false, NULL, gnat_temp);
  	      else
! 		gnu_expr = maybe_variable (gnu_expr);
  
! 	      save_gnu_tree (gnat_node, gnu_expr, true);
  	    }
  	}
        else
! 	gnu_expr = NULL_TREE;
  
!       if (type_annotate_only && gnu_expr && TREE_CODE (gnu_expr) == ERROR_MARK)
! 	gnu_expr = NULL_TREE;
  
        if (No (Freeze_Node (gnat_temp)))
  	gnat_to_gnu_entity (gnat_temp, gnu_expr, 1);
        break;
  
      case N_Object_Renaming_Declaration:
        gnat_temp = Defining_Entity (gnat_node);
  
!       /* Don't do anything if this renaming is handled by the front end or if
! 	 we are just annotating types and this object has a composite or task
! 	 type, don't elaborate it.  We return the result in case it has any
! 	 SAVE_EXPRs in it that need to be evaluated here.  */
!       if (!Is_Renaming_Of_Object (gnat_temp)
  	  && ! (type_annotate_only
  		&& (Is_Array_Type (Etype (gnat_temp))
  		    || Is_Record_Type (Etype (gnat_temp))
  		    || Is_Concurrent_Type (Etype (gnat_temp)))))
! 	gnu_result
! 	  = gnat_to_gnu_entity (gnat_temp,
! 				gnat_to_gnu (Renamed_Object (gnat_temp)), 1);
!       else
! 	gnu_result = alloc_stmt_list ();
        break;
  
      case N_Implicit_Label_Declaration:
        gnat_to_gnu_entity (Defining_Entity (gnat_node), NULL_TREE, 1);
+       gnu_result = alloc_stmt_list ();
        break;
  
      case N_Exception_Renaming_Declaration:
*************** tree_transform (Node_Id gnat_node)
*** 797,802 ****
--- 2774,2780 ----
      case N_Package_Renaming_Declaration:
      case N_Subprogram_Renaming_Declaration:
        /* These are fully handled in the front end.  */
+       gnu_result = alloc_stmt_list ();
        break;
  
      /*************************************/
*************** tree_transform (Node_Id gnat_node)
*** 854,862 ****
  	for (i = 0, gnu_type = TREE_TYPE (gnu_array_object);
  	     i < ndim; i++, gnu_type = TREE_TYPE (gnu_type))
  	  {
! 	    if (TREE_CODE (gnu_type) != ARRAY_TYPE)
! 	      gigi_abort (307);
! 
  	    gnat_temp = gnat_expr_array[i];
  	    gnu_expr = gnat_to_gnu (gnat_temp);
  
--- 2832,2838 ----
  	for (i = 0, gnu_type = TREE_TYPE (gnu_array_object);
  	     i < ndim; i++, gnu_type = TREE_TYPE (gnu_type))
  	  {
! 	    gcc_assert (TREE_CODE (gnu_type) == ARRAY_TYPE);
  	    gnat_temp = gnat_expr_array[i];
  	    gnu_expr = gnat_to_gnu (gnat_temp);
  
*************** tree_transform (Node_Id gnat_node)
*** 924,936 ****
                 expression if the slice range is not null (max >= min) or
                 returns the min if the slice range is null */
              gnu_expr
!               = fold (build (COND_EXPR, gnu_expr_type,
! 			     build_binary_op (GE_EXPR, gnu_expr_type,
! 					      convert (gnu_expr_type,
! 						       gnu_max_expr),
! 					      convert (gnu_expr_type,
! 						       gnu_min_expr)),
! 			     gnu_expr, gnu_min_expr));
            }
          else
            gnu_expr = TYPE_MIN_VALUE (TYPE_DOMAIN (gnu_result_type));
--- 2900,2912 ----
                 expression if the slice range is not null (max >= min) or
                 returns the min if the slice range is null */
              gnu_expr
!               = fold (build3 (COND_EXPR, gnu_expr_type,
! 			      build_binary_op (GE_EXPR, gnu_expr_type,
! 					       convert (gnu_expr_type,
! 							gnu_max_expr),
! 					       convert (gnu_expr_type,
! 							gnu_min_expr)),
! 			      gnu_expr, gnu_min_expr));
            }
          else
            gnu_expr = TYPE_MIN_VALUE (TYPE_DOMAIN (gnu_result_type));
*************** tree_transform (Node_Id gnat_node)
*** 980,986 ****
  				       NULL_TREE, gnu_prefix);
  	else
  	  {
! 	    gnu_field = gnat_to_gnu_entity (gnat_field, NULL_TREE, 0);
  
  	    /* If there are discriminants, the prefix might be
                 evaluated more than once, which is a problem if it has
--- 2956,2962 ----
  				       NULL_TREE, gnu_prefix);
  	else
  	  {
! 	    gnu_field = gnat_to_gnu_field_decl (gnat_field);
  
  	    /* If there are discriminants, the prefix might be
                 evaluated more than once, which is a problem if it has
*************** tree_transform (Node_Id gnat_node)
*** 997,1005 ****
  				      == N_Attribute_Reference));
  	  }
  
! 	if (gnu_result == 0)
! 	  gigi_abort (308);
! 
  	gnu_result_type = get_unpadded_type (Etype (gnat_node));
        }
        break;
--- 2973,2979 ----
  				      == N_Attribute_Reference));
  	  }
  
! 	gcc_assert (gnu_result);
  	gnu_result_type = get_unpadded_type (Etype (gnat_node));
        }
        break;
*************** tree_transform (Node_Id gnat_node)
*** 1008,1602 ****
        {
          /* The attribute designator (like an enumeration value). */
          int attribute = Get_Attribute_Id (Attribute_Name (gnat_node));
- 	int prefix_unused = 0;
- 	tree gnu_prefix;
- 	tree gnu_type;
  
  	/* The Elab_Spec and Elab_Body attributes are special in that
  	   Prefix is a unit, not an object with a GCC equivalent.  Similarly
  	   for Elaborated, since that variable isn't otherwise known.  */
  	if (attribute == Attr_Elab_Body || attribute == Attr_Elab_Spec)
! 	  {
! 	    gnu_prefix
! 	      = create_subprog_decl
! 		(create_concat_name (Entity (Prefix (gnat_node)),
! 				     attribute == Attr_Elab_Body
! 				     ? "elabb" : "elabs"),
! 		 NULL_TREE, void_ftype, NULL_TREE, 0, 1, 1, 0);
! 	    return gnu_prefix;
! 	  }
! 
! 	gnu_prefix = gnat_to_gnu (Prefix (gnat_node));
! 	gnu_type = TREE_TYPE (gnu_prefix);
! 
! 	/* If the input is a NULL_EXPR, make a new one.  */
! 	if (TREE_CODE (gnu_prefix) == NULL_EXPR)
! 	  {
! 	    gnu_result_type = get_unpadded_type (Etype (gnat_node));
! 	    gnu_result = build1 (NULL_EXPR, gnu_result_type,
! 				 TREE_OPERAND (gnu_prefix, 0));
! 	    break;
! 	  }
! 
!         switch (attribute)
!           {
! 	  case Attr_Pos:
! 	  case Attr_Val:
! 	    /* These are just conversions until since representation
! 	       clauses for enumerations are handled in the front end.  */
! 	    {
! 	      int check_p = Do_Range_Check (First (Expressions (gnat_node)));
! 
! 	      gnu_result = gnat_to_gnu (First (Expressions (gnat_node)));
! 	      gnu_result_type = get_unpadded_type (Etype (gnat_node));
! 	      gnu_result = convert_with_check (Etype (gnat_node), gnu_result,
! 					       check_p, check_p, 1);
! 	    }
! 	    break;
! 
! 	  case Attr_Pred:
! 	  case Attr_Succ:
! 	    /* These just add or subject the constant 1.  Representation
! 	       clauses for enumerations are handled in the front-end.  */
! 	    gnu_expr = gnat_to_gnu (First (Expressions (gnat_node)));
! 	    gnu_result_type = get_unpadded_type (Etype (gnat_node));
! 
! 	    if (Do_Range_Check (First (Expressions (gnat_node))))
! 	      {
! 		gnu_expr = protect_multiple_eval (gnu_expr);
! 		gnu_expr
! 		  = emit_check
! 		    (build_binary_op (EQ_EXPR, integer_type_node,
! 				      gnu_expr,
! 				      attribute == Attr_Pred
! 				      ? TYPE_MIN_VALUE (gnu_result_type)
! 				      : TYPE_MAX_VALUE (gnu_result_type)),
! 		     gnu_expr, CE_Range_Check_Failed);
! 	      }
! 
! 	    gnu_result
! 	      = build_binary_op (attribute == Attr_Pred
! 				 ? MINUS_EXPR : PLUS_EXPR,
! 				 gnu_result_type, gnu_expr,
! 				 convert (gnu_result_type, integer_one_node));
! 	    break;
! 
! 	  case Attr_Address:
! 	  case Attr_Unrestricted_Access:
! 
! 	    /* Conversions don't change something's address but can cause
! 	       us to miss the COMPONENT_REF case below, so strip them off.  */
! 	    gnu_prefix
! 	      = remove_conversions (gnu_prefix,
! 				    ! Must_Be_Byte_Aligned (gnat_node));
! 
! 	    /* If we are taking 'Address of an unconstrained object,
! 	       this is the pointer to the underlying array.  */
! 	    gnu_prefix = maybe_unconstrained_array (gnu_prefix);
! 
! 	    /* ... fall through ... */
! 
! 	  case Attr_Access:
! 	  case Attr_Unchecked_Access:
! 	  case Attr_Code_Address:
! 
! 	    gnu_result_type = get_unpadded_type (Etype (gnat_node));
! 	    gnu_result
! 	      = build_unary_op (((attribute == Attr_Address
! 				  || attribute == Attr_Unrestricted_Access)
! 				 && ! Must_Be_Byte_Aligned (gnat_node))
! 				? ATTR_ADDR_EXPR : ADDR_EXPR,
! 				gnu_result_type, gnu_prefix);
! 
! 	    /* For 'Code_Address, find an inner ADDR_EXPR and mark it
! 	       so that we don't try to build a trampoline.  */
! 	    if (attribute == Attr_Code_Address)
! 	      {
! 		for (gnu_expr = gnu_result;
! 		     TREE_CODE (gnu_expr) == NOP_EXPR
! 		     || TREE_CODE (gnu_expr) == CONVERT_EXPR;
! 		     gnu_expr = TREE_OPERAND (gnu_expr, 0))
! 		  TREE_CONSTANT (gnu_expr) = 1;
! 		  ;
! 
! 		if (TREE_CODE (gnu_expr) == ADDR_EXPR)
! 		  TREE_STATIC (gnu_expr) = TREE_CONSTANT (gnu_expr) = 1;
! 	      }
! 
! 	    break;
! 
!           case Attr_Pool_Address:
!             {
! 	     tree gnu_obj_type;
!              tree gnu_ptr = gnu_prefix;
! 
! 	     gnu_result_type = get_unpadded_type (Etype (gnat_node));
! 
! 	     /* If this is an unconstrained array, we know the object must
! 	        have been allocated with the template in front of the object.
! 	        So compute the template address.*/
! 
! 	     if (TYPE_FAT_POINTER_P (TREE_TYPE (gnu_ptr)))
! 	       gnu_ptr
! 	         = convert (build_pointer_type
! 		    (TYPE_OBJECT_RECORD_TYPE
! 		      (TYPE_UNCONSTRAINED_ARRAY (TREE_TYPE (gnu_ptr)))),
! 		        gnu_ptr);
! 
! 	     gnu_obj_type = TREE_TYPE (TREE_TYPE (gnu_ptr));
! 	     if (TREE_CODE (gnu_obj_type) == RECORD_TYPE
! 	         && TYPE_CONTAINS_TEMPLATE_P (gnu_obj_type))
! 	       {
! 	         tree gnu_char_ptr_type = build_pointer_type (char_type_node);
! 	         tree gnu_pos = byte_position (TYPE_FIELDS (gnu_obj_type));
! 	         tree gnu_byte_offset
! 		   = convert (gnu_char_ptr_type,
! 			      size_diffop (size_zero_node, gnu_pos));
! 
! 	         gnu_ptr = convert (gnu_char_ptr_type, gnu_ptr);
! 	         gnu_ptr = build_binary_op (MINUS_EXPR, gnu_char_ptr_type,
! 					    gnu_ptr, gnu_byte_offset);
!                }
! 
!              gnu_result = convert (gnu_result_type, gnu_ptr);
!             }
!             break;
! 
! 	  case Attr_Size:
! 	  case Attr_Object_Size:
! 	  case Attr_Value_Size:
! 	  case Attr_Max_Size_In_Storage_Elements:
! 
! 	    gnu_expr = gnu_prefix;
! 
! 	    /* Remove NOPS from gnu_expr and conversions from gnu_prefix.
! 	       We only use GNU_EXPR to see if a COMPONENT_REF was involved. */
! 	    while (TREE_CODE (gnu_expr) == NOP_EXPR)
! 	      gnu_expr = TREE_OPERAND (gnu_expr, 0);
! 
! 	    gnu_prefix = remove_conversions (gnu_prefix, 1);
! 	    prefix_unused = 1;
! 	    gnu_type = TREE_TYPE (gnu_prefix);
! 
! 	    /* Replace an unconstrained array type with the type of the
! 	       underlying array.  We can't do this with a call to
! 	       maybe_unconstrained_array since we may have a TYPE_DECL.
! 	       For 'Max_Size_In_Storage_Elements, use the record type
! 	       that will be used to allocate the object and its template.  */
! 
! 	    if (TREE_CODE (gnu_type) == UNCONSTRAINED_ARRAY_TYPE)
! 	      {
! 		gnu_type = TYPE_OBJECT_RECORD_TYPE (gnu_type);
! 		if (attribute != Attr_Max_Size_In_Storage_Elements)
! 		  gnu_type = TREE_TYPE (TREE_CHAIN (TYPE_FIELDS (gnu_type)));
! 	      }
! 
! 	    /* If we are looking for the size of a field, return the
! 	       field size.  Otherwise, if the prefix is an object,
! 	       or if 'Object_Size or 'Max_Size_In_Storage_Elements has
! 	       been specified, the result is the GCC size of the type.
! 	       Otherwise, the result is the RM_Size of the type.  */
! 	    if (TREE_CODE (gnu_prefix) == COMPONENT_REF)
! 	      gnu_result = DECL_SIZE (TREE_OPERAND (gnu_prefix, 1));
! 	    else if (TREE_CODE (gnu_prefix) != TYPE_DECL
! 		     || attribute == Attr_Object_Size
! 		     || attribute == Attr_Max_Size_In_Storage_Elements)
! 	      {
! 		/* If this is a padded type, the GCC size isn't relevant
! 		   to the programmer.  Normally, what we want is the RM_Size,
! 		   which was set from the specified size, but if it was not
! 		   set, we want the size of the relevant field.  Using the MAX
! 		   of those two produces the right result in all case.  Don't
! 		   use the size of the field if it's a self-referential type,
! 		   since that's never what's wanted.  */
! 		if (TREE_CODE (gnu_type) == RECORD_TYPE
! 		    && TYPE_IS_PADDING_P (gnu_type)
! 		    && TREE_CODE (gnu_expr) == COMPONENT_REF)
! 		  {
! 		    gnu_result = rm_size (gnu_type);
! 		    if (! (CONTAINS_PLACEHOLDER_P
! 			   (DECL_SIZE (TREE_OPERAND (gnu_expr, 1)))))
! 		      gnu_result
! 			= size_binop (MAX_EXPR, gnu_result,
! 				      DECL_SIZE (TREE_OPERAND (gnu_expr, 1)));
! 		  }
! 		else
! 		  gnu_result = TYPE_SIZE (gnu_type);
! 	      }
! 	    else
! 	      gnu_result = rm_size (gnu_type);
! 
! 	    if (gnu_result == 0)
! 	      gigi_abort (325);
! 
! 	    /* Deal with a self-referential size by returning the maximum
! 	       size for a type and by qualifying the size with
! 	       the object for 'Size of an object.  */
! 
! 	    if (CONTAINS_PLACEHOLDER_P (gnu_result))
! 	      {
! 		if (TREE_CODE (gnu_prefix) != TYPE_DECL)
! 		  gnu_result = build (WITH_RECORD_EXPR, TREE_TYPE (gnu_result),
! 				      gnu_result, gnu_expr);
! 		else
! 		  gnu_result = max_size (gnu_result, 1);
! 	      }
! 
! 	    /* If the type contains a template, subtract the size of the
! 	       template.  */
! 	    if (TREE_CODE (gnu_type) == RECORD_TYPE
! 		&& TYPE_CONTAINS_TEMPLATE_P (gnu_type))
! 	      gnu_result = size_binop (MINUS_EXPR, gnu_result,
! 				       DECL_SIZE (TYPE_FIELDS (gnu_type)));
! 
! 	    gnu_result_type = get_unpadded_type (Etype (gnat_node));
! 
!             /* Always perform division using unsigned arithmetic as the
! 	       size cannot be negative, but may be an overflowed positive
! 	       value. This provides correct results for sizes up to 512 MB.
! 	       ??? Size should be calculated in storage elements directly.  */
! 
! 	    if (attribute == Attr_Max_Size_In_Storage_Elements)
! 	      gnu_result = convert (sizetype,
! 				    fold (build (CEIL_DIV_EXPR, bitsizetype,
! 						 gnu_result,
! 						 bitsize_unit_node)));
! 	    break;
! 
! 	  case Attr_Alignment:
! 	    if (TREE_CODE (gnu_prefix) == COMPONENT_REF
! 		&& (TREE_CODE (TREE_TYPE (TREE_OPERAND (gnu_prefix, 0)))
! 		    == RECORD_TYPE)
! 		&& (TYPE_IS_PADDING_P
! 		    (TREE_TYPE (TREE_OPERAND (gnu_prefix, 0)))))
! 	      gnu_prefix = TREE_OPERAND (gnu_prefix, 0);
! 
! 	    gnu_type = TREE_TYPE (gnu_prefix);
! 	    gnu_result_type = get_unpadded_type (Etype (gnat_node));
! 	    prefix_unused = 1;
! 
! 	    if (TREE_CODE (gnu_prefix) == COMPONENT_REF)
! 	      gnu_result
! 		= size_int (DECL_ALIGN (TREE_OPERAND (gnu_prefix, 1)));
! 	    else
! 	      gnu_result = size_int (TYPE_ALIGN (gnu_type) / BITS_PER_UNIT);
! 	    break;
! 
! 	  case Attr_First:
! 	  case Attr_Last:
! 	  case Attr_Range_Length:
! 	    prefix_unused = 1;
! 
! 	    if (INTEGRAL_TYPE_P (gnu_type)
! 		|| TREE_CODE (gnu_type) == REAL_TYPE)
! 	      {
! 		gnu_result_type = get_unpadded_type (Etype (gnat_node));
! 
! 		if (attribute == Attr_First)
! 		  gnu_result = TYPE_MIN_VALUE (gnu_type);
! 		else if (attribute == Attr_Last)
! 		  gnu_result = TYPE_MAX_VALUE (gnu_type);
! 		else
! 		  gnu_result
! 		    = build_binary_op
! 		      (MAX_EXPR, get_base_type (gnu_result_type),
! 		       build_binary_op
! 		       (PLUS_EXPR, get_base_type (gnu_result_type),
! 			build_binary_op (MINUS_EXPR,
! 					 get_base_type (gnu_result_type),
! 					 convert (gnu_result_type,
! 						  TYPE_MAX_VALUE (gnu_type)),
! 					 convert (gnu_result_type,
! 						  TYPE_MIN_VALUE (gnu_type))),
! 			convert (gnu_result_type, integer_one_node)),
! 		       convert (gnu_result_type, integer_zero_node));
! 
! 		break;
! 	      }
! 	    /* ... fall through ... */
! 	  case Attr_Length:
! 	    {
! 	      int Dimension
! 		= (Present (Expressions (gnat_node))
! 		   ? UI_To_Int (Intval (First (Expressions (gnat_node))))
! 		   : 1);
! 
! 	      /* Make sure any implicit dereference gets done.  */
! 	      gnu_prefix = maybe_implicit_deref (gnu_prefix);
! 	      gnu_prefix = maybe_unconstrained_array (gnu_prefix);
! 	      gnu_type = TREE_TYPE (gnu_prefix);
! 	      prefix_unused = 1;
! 	      gnu_result_type = get_unpadded_type (Etype (gnat_node));
! 
! 	      if (TYPE_CONVENTION_FORTRAN_P (gnu_type))
! 		{
! 		  int ndim;
! 		  tree gnu_type_temp;
! 
! 		  for (ndim = 1, gnu_type_temp = gnu_type;
! 		       TREE_CODE (TREE_TYPE (gnu_type_temp)) == ARRAY_TYPE
! 		       && TYPE_MULTI_ARRAY_P (TREE_TYPE (gnu_type_temp));
! 		       ndim++, gnu_type_temp = TREE_TYPE (gnu_type_temp))
! 		    ;
! 
! 		  Dimension = ndim + 1 - Dimension;
! 		}
! 
! 	      for (; Dimension > 1; Dimension--)
! 		gnu_type = TREE_TYPE (gnu_type);
! 
! 	      if (TREE_CODE (gnu_type) != ARRAY_TYPE)
! 		gigi_abort (309);
! 
! 	      if (attribute == Attr_First)
! 		gnu_result
! 		  = TYPE_MIN_VALUE (TYPE_INDEX_TYPE (TYPE_DOMAIN (gnu_type)));
! 	      else if (attribute == Attr_Last)
! 		gnu_result
! 		  = TYPE_MAX_VALUE (TYPE_INDEX_TYPE (TYPE_DOMAIN (gnu_type)));
! 	      else
! 		/* 'Length or 'Range_Length.  */
! 		{
! 		  tree gnu_compute_type
! 		    = gnat_signed_or_unsigned_type
! 		      (0, get_base_type (gnu_result_type));
! 
! 		  gnu_result
! 		  = build_binary_op
! 		    (MAX_EXPR, gnu_compute_type,
! 		     build_binary_op
! 		     (PLUS_EXPR, gnu_compute_type,
! 		      build_binary_op
!                       (MINUS_EXPR, gnu_compute_type,
! 		       convert (gnu_compute_type,
! 				TYPE_MAX_VALUE
! 				(TYPE_INDEX_TYPE (TYPE_DOMAIN (gnu_type)))),
! 		       convert (gnu_compute_type,
! 				TYPE_MIN_VALUE
! 				(TYPE_INDEX_TYPE (TYPE_DOMAIN (gnu_type))))),
! 		      convert (gnu_compute_type, integer_one_node)),
! 		     convert (gnu_compute_type, integer_zero_node));
! 		}
! 
! 	      /* If this has a PLACEHOLDER_EXPR, qualify it by the object
! 		 we are handling.  Note that these attributes could not
! 		 have been used on an unconstrained array type.  */
! 	      if (CONTAINS_PLACEHOLDER_P (gnu_result))
! 		gnu_result = build (WITH_RECORD_EXPR, TREE_TYPE (gnu_result),
! 				    gnu_result, gnu_prefix);
! 
! 	      break;
! 	    }
! 
!           case Attr_Bit_Position:
! 	  case Attr_Position:
! 	  case Attr_First_Bit:
! 	  case Attr_Last_Bit:
! 	  case Attr_Bit:
! 	    {
! 	      HOST_WIDE_INT bitsize;
! 	      HOST_WIDE_INT bitpos;
! 	      tree gnu_offset;
! 	      tree gnu_field_bitpos;
! 	      tree gnu_field_offset;
! 	      tree gnu_inner;
! 	      enum machine_mode mode;
! 	      int unsignedp, volatilep;
! 
! 	      gnu_result_type = get_unpadded_type (Etype (gnat_node));
! 	      gnu_prefix = remove_conversions (gnu_prefix, 1);
! 	      prefix_unused = 1;
! 
! 	      /* We can have 'Bit on any object, but if it isn't a
! 		 COMPONENT_REF, the result is zero.  Do not allow
! 		 'Bit on a bare component, though.  */
! 	      if (attribute == Attr_Bit
! 		  && TREE_CODE (gnu_prefix) != COMPONENT_REF
! 		  && TREE_CODE (gnu_prefix) != FIELD_DECL)
! 		{
! 		  gnu_result = integer_zero_node;
! 		  break;
! 		}
! 
! 	      else if (TREE_CODE (gnu_prefix) != COMPONENT_REF
! 		       && ! (attribute == Attr_Bit_Position
! 			     && TREE_CODE (gnu_prefix) == FIELD_DECL))
! 		gigi_abort (310);
! 
! 	      get_inner_reference (gnu_prefix, &bitsize, &bitpos, &gnu_offset,
! 				   &mode, &unsignedp, &volatilep);
! 
! 	      if (TREE_CODE (gnu_prefix) == COMPONENT_REF)
! 		{
! 		  gnu_field_bitpos
! 		    = bit_position (TREE_OPERAND (gnu_prefix, 1));
! 		  gnu_field_offset
! 		    = byte_position (TREE_OPERAND (gnu_prefix, 1));
! 
! 		  for (gnu_inner = TREE_OPERAND (gnu_prefix, 0);
! 		       TREE_CODE (gnu_inner) == COMPONENT_REF
! 		       && DECL_INTERNAL_P (TREE_OPERAND (gnu_inner, 1));
! 		       gnu_inner = TREE_OPERAND (gnu_inner, 0))
! 		    {
! 		      gnu_field_bitpos
! 			= size_binop (PLUS_EXPR, gnu_field_bitpos,
! 				      bit_position (TREE_OPERAND (gnu_inner,
! 								  1)));
! 		      gnu_field_offset
! 			= size_binop (PLUS_EXPR, gnu_field_offset,
! 				      byte_position (TREE_OPERAND (gnu_inner,
! 								   1)));
! 		    }
! 		}
! 	      else if (TREE_CODE (gnu_prefix) == FIELD_DECL)
! 		{
! 		  gnu_field_bitpos = bit_position (gnu_prefix);
! 		  gnu_field_offset = byte_position (gnu_prefix);
! 		}
! 	      else
! 		{
! 		  gnu_field_bitpos = bitsize_zero_node;
! 		  gnu_field_offset = size_zero_node;
! 		}
! 
! 	      switch (attribute)
! 		{
! 		case Attr_Position:
! 		  gnu_result = gnu_field_offset;
! 		  break;
! 
! 		case Attr_First_Bit:
! 		case Attr_Bit:
! 		  gnu_result = size_int (bitpos % BITS_PER_UNIT);
! 		  break;
! 
! 		case Attr_Last_Bit:
! 		  gnu_result = bitsize_int (bitpos % BITS_PER_UNIT);
! 		  gnu_result
! 		    = size_binop (PLUS_EXPR, gnu_result,
! 				  TYPE_SIZE (TREE_TYPE (gnu_prefix)));
! 		  gnu_result = size_binop (MINUS_EXPR, gnu_result,
! 					   bitsize_one_node);
! 		  break;
! 
! 		case Attr_Bit_Position:
! 		  gnu_result = gnu_field_bitpos;
! 		  break;
! 		}
! 
! 	      /* If this has a PLACEHOLDER_EXPR, qualify it by the object
! 		 we are handling. */
! 	      if (CONTAINS_PLACEHOLDER_P (gnu_result))
! 		gnu_result = build (WITH_RECORD_EXPR, TREE_TYPE (gnu_result),
! 				    gnu_result, gnu_prefix);
! 
! 	      break;
! 	    }
! 
! 	  case Attr_Min:
! 	  case Attr_Max:
! 	    gnu_lhs = gnat_to_gnu (First (Expressions (gnat_node)));
! 	    gnu_rhs =  gnat_to_gnu (Next (First (Expressions (gnat_node))));
! 
! 	    gnu_result_type = get_unpadded_type (Etype (gnat_node));
! 	    gnu_result = build_binary_op (attribute == Attr_Min
! 					  ? MIN_EXPR : MAX_EXPR,
! 					  gnu_result_type, gnu_lhs, gnu_rhs);
! 	    break;
! 
! 	  case Attr_Passed_By_Reference:
! 	    gnu_result = size_int (default_pass_by_ref (gnu_type)
! 	                           || must_pass_by_ref (gnu_type));
! 	    gnu_result_type = get_unpadded_type (Etype (gnat_node));
! 	    break;
! 
! 	  case Attr_Component_Size:
! 	    if (TREE_CODE (gnu_prefix) == COMPONENT_REF
! 		&& (TREE_CODE (TREE_TYPE (TREE_OPERAND (gnu_prefix, 0)))
! 		    == RECORD_TYPE)
! 		&& (TYPE_IS_PADDING_P
! 		    (TREE_TYPE (TREE_OPERAND (gnu_prefix, 0)))))
! 	      gnu_prefix = TREE_OPERAND (gnu_prefix, 0);
! 
! 	    gnu_prefix = maybe_implicit_deref (gnu_prefix);
! 	    gnu_type = TREE_TYPE (gnu_prefix);
! 
! 	    if (TREE_CODE (gnu_type) == UNCONSTRAINED_ARRAY_TYPE)
! 	      gnu_type
! 		= TREE_TYPE (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (gnu_type))));
! 
! 	    while (TREE_CODE (TREE_TYPE (gnu_type)) == ARRAY_TYPE
! 		   && TYPE_MULTI_ARRAY_P (TREE_TYPE (gnu_type)))
! 	      gnu_type = TREE_TYPE (gnu_type);
! 
! 	    if (TREE_CODE (gnu_type) != ARRAY_TYPE)
! 	      gigi_abort (330);
! 
! 	    /* Note this size cannot be self-referential.  */
! 	    gnu_result = TYPE_SIZE (TREE_TYPE (gnu_type));
! 	    gnu_result_type = get_unpadded_type (Etype (gnat_node));
! 	    prefix_unused = 1;
! 	    break;
! 
! 	  case Attr_Null_Parameter:
! 	    /* This is just a zero cast to the pointer type for
! 	       our prefix and dereferenced.  */
! 	    gnu_result_type = get_unpadded_type (Etype (gnat_node));
! 	    gnu_result
! 	      = build_unary_op (INDIRECT_REF, NULL_TREE,
! 				convert (build_pointer_type (gnu_result_type),
! 					 integer_zero_node));
! 	    TREE_PRIVATE (gnu_result) = 1;
! 	    break;
! 
! 	  case Attr_Mechanism_Code:
! 	    {
! 	      int code;
! 	      Entity_Id gnat_obj = Entity (Prefix (gnat_node));
! 
! 	      prefix_unused = 1;
! 	      gnu_result_type = get_unpadded_type (Etype (gnat_node));
! 	      if (Present (Expressions (gnat_node)))
! 		{
! 		  int i = UI_To_Int (Intval (First (Expressions (gnat_node))));
! 
! 		  for (gnat_obj = First_Formal (gnat_obj); i > 1;
! 		       i--, gnat_obj = Next_Formal (gnat_obj))
! 		    ;
! 		}
! 
! 	      code = Mechanism (gnat_obj);
! 	      if (code == Default)
! 		code = ((present_gnu_tree (gnat_obj)
! 			 && (DECL_BY_REF_P (get_gnu_tree (gnat_obj))
! 			     || ((TREE_CODE (get_gnu_tree (gnat_obj))
! 				  == PARM_DECL)
! 				 && (DECL_BY_COMPONENT_PTR_P
! 				     (get_gnu_tree (gnat_obj))))))
! 			? By_Reference : By_Copy);
! 	      gnu_result = convert (gnu_result_type, size_int (- code));
! 	    }
! 	  break;
! 
!           default:
! 	    /* Say we have an unimplemented attribute.  Then set the
! 	       value to be returned to be a zero and hope that's something
! 	       we can convert to the type of this attribute.  */
! 
! 	    post_error ("unimplemented attribute", gnat_node);
! 	    gnu_result_type = get_unpadded_type (Etype (gnat_node));
! 	    gnu_result = integer_zero_node;
! 	    break;
!           }
  
! 	/* If this is an attribute where the prefix was unused,
! 	   force a use of it if it has a side-effect.  But don't do it if
! 	   the prefix is just an entity name.  However, if an access check
! 	   is needed, we must do it.  See second example in AARM 11.6(5.e). */
! 	if (prefix_unused && TREE_SIDE_EFFECTS (gnu_prefix)
! 	    && ! Is_Entity_Name (Prefix (gnat_node)))
! 	  gnu_result = fold (build (COMPOUND_EXPR, TREE_TYPE (gnu_result),
! 				    gnu_prefix, gnu_result));
        }
        break;
  
--- 2982,3000 ----
        {
          /* The attribute designator (like an enumeration value). */
          int attribute = Get_Attribute_Id (Attribute_Name (gnat_node));
  
  	/* The Elab_Spec and Elab_Body attributes are special in that
  	   Prefix is a unit, not an object with a GCC equivalent.  Similarly
  	   for Elaborated, since that variable isn't otherwise known.  */
  	if (attribute == Attr_Elab_Body || attribute == Attr_Elab_Spec)
! 	  return (create_subprog_decl
! 		  (create_concat_name (Entity (Prefix (gnat_node)),
! 				       attribute == Attr_Elab_Body
! 				       ? "elabb" : "elabs"),
! 		   NULL_TREE, void_ftype, NULL_TREE, false, true, true, NULL,
! 		   gnat_node));
  
! 	gnu_result = Attribute_to_gnu (gnat_node, &gnu_result_type, attribute);
        }
        break;
  
*************** tree_transform (Node_Id gnat_node)
*** 1615,1620 ****
--- 3013,3020 ----
  	/* ??? It is wrong to evaluate the type now, but there doesn't
  	   seem to be any other practical way of doing it.  */
  
+ 	gcc_assert (!Expansion_Delayed (gnat_node));
+ 
  	gnu_aggr_type = gnu_result_type
  	  = get_unpadded_type (Etype (gnat_node));
  
*************** tree_transform (Node_Id gnat_node)
*** 1626,1636 ****
  	if (Null_Record_Present (gnat_node))
  	  gnu_result = gnat_build_constructor (gnu_aggr_type, NULL_TREE);
  
! 	else if (TREE_CODE (gnu_aggr_type) == RECORD_TYPE)
! 	  gnu_result
! 	    = assoc_to_constructor (First (Component_Associations (gnat_node)),
! 				    gnu_aggr_type);
! 	else if (TREE_CODE (gnu_aggr_type) == UNION_TYPE)
  	  {
  	    /* The first element is the discrimant, which we ignore.  The
  	       next is the field we're building.  Convert the expression
--- 3026,3033 ----
  	if (Null_Record_Present (gnat_node))
  	  gnu_result = gnat_build_constructor (gnu_aggr_type, NULL_TREE);
  
! 	else if (TREE_CODE (gnu_aggr_type) == UNION_TYPE
! 		 && TYPE_UNCHECKED_UNION_P (gnu_aggr_type))
  	  {
  	    /* The first element is the discrimant, which we ignore.  The
  	       next is the field we're building.  Convert the expression
*************** tree_transform (Node_Id gnat_node)
*** 1644,1649 ****
--- 3041,3051 ----
  	    gnu_result = convert (gnu_field_type,
  				  gnat_to_gnu (Expression (gnat_assoc)));
  	  }
+ 	else if (TREE_CODE (gnu_aggr_type) == RECORD_TYPE
+ 		 || TREE_CODE (gnu_aggr_type) == UNION_TYPE)
+ 	  gnu_result
+ 	    = assoc_to_constructor (First (Component_Associations (gnat_node)),
+ 				    gnu_aggr_type);
  	else if (TREE_CODE (gnu_aggr_type) == ARRAY_TYPE)
  	  gnu_result = pos_to_constructor (First (Expressions (gnat_node)),
  					   gnu_aggr_type,
*************** tree_transform (Node_Id gnat_node)
*** 1658,1664 ****
  			    (Next
  			     (First (Component_Associations (gnat_node))))));
  	else
! 	  gigi_abort (312);
  
  	gnu_result = convert (gnu_result_type, gnu_result);
        }
--- 3060,3066 ----
  			    (Next
  			     (First (Component_Associations (gnat_node))))));
  	else
! 	  gcc_unreachable ();
  
  	gnu_result = convert (gnu_result_type, gnu_result);
        }
*************** tree_transform (Node_Id gnat_node)
*** 1695,1705 ****
  	{
  	  unsigned int align = known_alignment (gnu_result);
  	  tree gnu_obj_type = TREE_TYPE (gnu_result_type);
! 	  unsigned int oalign
! 	    = TREE_CODE (gnu_obj_type) == FUNCTION_TYPE
! 	      ? FUNCTION_BOUNDARY : TYPE_ALIGN (gnu_obj_type);
  
! 	  if (align != 0 && align < oalign && ! TYPE_ALIGN_OK (gnu_obj_type))
  	    post_error_ne_tree_2
  	      ("?source alignment (^) < alignment of & (^)",
  	       gnat_node, Designated_Type (Etype (gnat_node)),
--- 3097,3105 ----
  	{
  	  unsigned int align = known_alignment (gnu_result);
  	  tree gnu_obj_type = TREE_TYPE (gnu_result_type);
! 	  unsigned int oalign = TYPE_ALIGN (gnu_obj_type);
  
! 	  if (align != 0 && align < oalign && !TYPE_ALIGN_OK (gnu_obj_type))
  	    post_error_ne_tree_2
  	      ("?source alignment (^) < alignment of & (^)",
  	       gnat_node, Designated_Type (Etype (gnat_node)),
*************** tree_transform (Node_Id gnat_node)
*** 1734,1740 ****
  	    gnu_high = TYPE_MAX_VALUE (gnu_range_type);
  	  }
  	else
! 	  gigi_abort (313);
  
  	gnu_result_type = get_unpadded_type (Etype (gnat_node));
  
--- 3134,3140 ----
  	    gnu_high = TYPE_MAX_VALUE (gnu_range_type);
  	  }
  	else
! 	  gcc_unreachable ();
  
  	gnu_result_type = get_unpadded_type (Etype (gnat_node));
  
*************** tree_transform (Node_Id gnat_node)
*** 1771,1812 ****
  				    gnu_result_type, gnu_lhs, gnu_rhs);
        break;
  
-     case N_And_Then: case N_Or_Else:
-       {
- 	/* Some processing below (e.g. clear_last_expr) requires access to
- 	   status fields now maintained in the current function context, so
- 	   we'll setup a dummy one if needed. We cannot use global_binding_p,
- 	   since it might be true due to force_global and making a dummy
- 	   context would kill the current function context. */
- 	bool make_dummy_context = (cfun == 0);
- 	enum tree_code code = gnu_codes[Nkind (gnat_node)];
- 	tree gnu_rhs_side;
- 
- 	if (make_dummy_context)
- 	  init_dummy_function_start ();
- 
- 	/* The elaboration of the RHS may generate code.  If so,
- 	   we need to make sure it gets executed after the LHS.  */
- 	gnu_lhs = gnat_to_gnu (Left_Opnd (gnat_node));
- 	clear_last_expr ();
- 
- 	gnu_rhs_side = expand_start_stmt_expr (1 /*has_scope*/);
- 	gnu_rhs = gnat_to_gnu (Right_Opnd (gnat_node));
- 	expand_end_stmt_expr (gnu_rhs_side);
- 
- 	if (make_dummy_context)
- 	  expand_dummy_function_end ();
- 
- 	gnu_result_type = get_unpadded_type (Etype (gnat_node));
- 
- 	if (RTL_EXPR_SEQUENCE (gnu_rhs_side) != 0)
- 	  gnu_rhs = build (COMPOUND_EXPR, gnu_result_type, gnu_rhs_side,
- 			   gnu_rhs);
- 
- 	gnu_result = build_binary_op (code, gnu_result_type, gnu_lhs, gnu_rhs);
-       }
-       break;
- 
      case N_Op_Or:    case N_Op_And:      case N_Op_Xor:
        /* These can either be operations on booleans or on modular types.
  	 Fall through for boolean types since that's the way GNU_CODES is
--- 3171,3176 ----
*************** tree_transform (Node_Id gnat_node)
*** 1838,1843 ****
--- 3202,3208 ----
      case N_Op_Shift_Left:
      case N_Op_Shift_Right:
      case N_Op_Shift_Right_Arithmetic:
+     case N_And_Then: case N_Or_Else:
        {
  	enum tree_code code = gnu_codes[Nkind (gnat_node)];
  	tree gnu_type;
*************** tree_transform (Node_Id gnat_node)
*** 1849,1855 ****
  	/* If this is a comparison operator, convert any references to
  	   an unconstrained array value into a reference to the
  	   actual array.  */
! 	if (TREE_CODE_CLASS (code) == '<')
  	  {
  	    gnu_lhs = maybe_unconstrained_array (gnu_lhs);
  	    gnu_rhs = maybe_unconstrained_array (gnu_rhs);
--- 3214,3220 ----
  	/* If this is a comparison operator, convert any references to
  	   an unconstrained array value into a reference to the
  	   actual array.  */
! 	if (TREE_CODE_CLASS (code) == tcc_comparison)
  	  {
  	    gnu_lhs = maybe_unconstrained_array (gnu_lhs);
  	    gnu_rhs = maybe_unconstrained_array (gnu_rhs);
*************** tree_transform (Node_Id gnat_node)
*** 1865,1871 ****
  	/* If this is a shift whose count is not guaranteed to be correct,
  	   we need to adjust the shift count.  */
  	if (IN (Nkind (gnat_node), N_Op_Shift)
! 	    && ! Shift_Count_OK (gnat_node))
  	  {
  	    tree gnu_count_type = get_base_type (TREE_TYPE (gnu_rhs));
  	    tree gnu_max_shift
--- 3230,3236 ----
  	/* If this is a shift whose count is not guaranteed to be correct,
  	   we need to adjust the shift count.  */
  	if (IN (Nkind (gnat_node), N_Op_Shift)
! 	    && !Shift_Count_OK (gnat_node))
  	  {
  	    tree gnu_count_type = get_base_type (TREE_TYPE (gnu_rhs));
  	    tree gnu_max_shift
*************** tree_transform (Node_Id gnat_node)
*** 1890,1899 ****
  	/* For right shifts, the type says what kind of shift to do,
  	   so we may need to choose a different type.  */
  	if (Nkind (gnat_node) == N_Op_Shift_Right
! 	    && ! TREE_UNSIGNED (gnu_type))
  	  gnu_type = gnat_unsigned_type (gnu_type);
  	else if (Nkind (gnat_node) == N_Op_Shift_Right_Arithmetic
! 		 && TREE_UNSIGNED (gnu_type))
  	  gnu_type = gnat_signed_type (gnu_type);
  
  	if (gnu_type != gnu_result_type)
--- 3255,3264 ----
  	/* For right shifts, the type says what kind of shift to do,
  	   so we may need to choose a different type.  */
  	if (Nkind (gnat_node) == N_Op_Shift_Right
! 	    && !TYPE_UNSIGNED (gnu_type))
  	  gnu_type = gnat_unsigned_type (gnu_type);
  	else if (Nkind (gnat_node) == N_Op_Shift_Right_Arithmetic
! 		 && TYPE_UNSIGNED (gnu_type))
  	  gnu_type = gnat_signed_type (gnu_type);
  
  	if (gnu_type != gnu_result_type)
*************** tree_transform (Node_Id gnat_node)
*** 1909,1915 ****
  	   above in this case.  */
  	if ((Nkind (gnat_node) == N_Op_Shift_Left
  	     || Nkind (gnat_node) == N_Op_Shift_Right)
! 	    && ! Shift_Count_OK (gnat_node))
  	  gnu_result
  	    = build_cond_expr
  	      (gnu_type,
--- 3274,3280 ----
  	   above in this case.  */
  	if ((Nkind (gnat_node) == N_Op_Shift_Left
  	     || Nkind (gnat_node) == N_Op_Shift_Right)
! 	    && !Shift_Count_OK (gnat_node))
  	  gnu_result
  	    = build_cond_expr
  	      (gnu_type,
*************** tree_transform (Node_Id gnat_node)
*** 2010,2016 ****
  	      }
  	  }
  	else
! 	  gigi_abort (315);
  
  	gnu_result_type = get_unpadded_type (Etype (gnat_node));
  	return build_allocator (gnu_type, gnu_init, gnu_result_type,
--- 3375,3381 ----
  	      }
  	  }
  	else
! 	  gcc_unreachable ();
  
  	gnu_result_type = get_unpadded_type (Etype (gnat_node));
  	return build_allocator (gnu_type, gnu_init, gnu_result_type,
*************** tree_transform (Node_Id gnat_node)
*** 2024,2473 ****
      /***************************/
  
      case N_Label:
!       if (! type_annotate_only)
! 	{
! 	  tree gnu_label = gnat_to_gnu (Identifier (gnat_node));
! 	  Node_Id gnat_parent = Parent (gnat_node);
! 
! 	  expand_label (gnu_label);
! 
! 	  /* If this is the first label of an exception handler, we must
! 	     mark that any CALL_INSN can jump to it.  */
! 	  if (Present (gnat_parent)
! 	      && Nkind (gnat_parent) == N_Exception_Handler
! 	      && First (Statements (gnat_parent)) == gnat_node)
! 	    nonlocal_goto_handler_labels
! 	      = gen_rtx_EXPR_LIST (VOIDmode, label_rtx (gnu_label),
! 				   nonlocal_goto_handler_labels);
! 	}
        break;
  
      case N_Null_Statement:
        break;
  
      case N_Assignment_Statement:
-       if (type_annotate_only)
- 	break;
- 
        /* Get the LHS and RHS of the statement and convert any reference to an
! 	 unconstrained array into a reference to the underlying array.  */
        gnu_lhs = maybe_unconstrained_array (gnat_to_gnu (Name (gnat_node)));
-       gnu_rhs
- 	= maybe_unconstrained_array (gnat_to_gnu (Expression (gnat_node)));
  
!       /* If range check is needed, emit code to generate it */
!       if (Do_Range_Check (Expression (gnat_node)))
! 	gnu_rhs = emit_range_check (gnu_rhs, Etype (Name (gnat_node)));
! 
!       /* If either side's type has a size that overflows, convert this
! 	 into raise of Storage_Error: execution shouldn't have gotten
! 	 here anyway.  */
!       if ((TREE_CODE (TYPE_SIZE (TREE_TYPE (gnu_lhs))) == INTEGER_CST
  	   && TREE_OVERFLOW (TYPE_SIZE (TREE_TYPE (gnu_lhs))))
- 	  || (TREE_CODE (TYPE_SIZE (TREE_TYPE (gnu_rhs))) == INTEGER_CST
- 	      && TREE_OVERFLOW (TYPE_SIZE (TREE_TYPE (gnu_rhs)))))
  	gnu_result = build_call_raise (SE_Object_Too_Large);
        else
! 	gnu_result
! 	  = build_binary_op (MODIFY_EXPR, NULL_TREE, gnu_lhs, gnu_rhs);
  
!       gnu_result = build_nt (EXPR_STMT, gnu_result);
        break;
  
      case N_If_Statement:
!       /* Start an IF statement giving the condition.  */
!       gnu_expr = gnat_to_gnu (Condition (gnat_node));
!       set_lineno (gnat_node, 1);
!       expand_start_cond (gnu_expr, 0);
! 
!       /* Generate code for the statements to be executed if the condition
! 	 is true.  */
  
!       for (gnat_temp = First (Then_Statements (gnat_node));
! 	   Present (gnat_temp);
! 	   gnat_temp = Next (gnat_temp))
! 	gnat_to_code (gnat_temp);
  
!       /* Generate each of the "else if" parts.  */
!       if (Present (Elsif_Parts (gnat_node)))
! 	{
  	  for (gnat_temp = First (Elsif_Parts (gnat_node));
! 	       Present (gnat_temp);
! 	       gnat_temp = Next (gnat_temp))
  	    {
! 	      Node_Id gnat_statement;
! 
! 	      expand_start_else ();
! 
! 	      /* Set up the line numbers for each condition we test.  */
! 	      set_lineno (Condition (gnat_temp), 1);
! 	      expand_elseif (gnat_to_gnu (Condition (gnat_temp)));
! 
! 	      for (gnat_statement = First (Then_Statements (gnat_temp));
! 		   Present (gnat_statement);
! 		   gnat_statement = Next (gnat_statement))
! 		gnat_to_code (gnat_statement);
  	    }
- 	}
- 
-       /* Finally, handle any statements in the "else" part.  */
-       if (Present (Else_Statements (gnat_node)))
- 	{
- 	  expand_start_else ();
- 
- 	  for (gnat_temp = First (Else_Statements (gnat_node));
- 	       Present (gnat_temp);
- 	       gnat_temp = Next (gnat_temp))
- 	    gnat_to_code (gnat_temp);
- 	}
  
!       expand_end_cond ();
        break;
  
      case N_Case_Statement:
!       {
! 	Node_Id gnat_when;
! 	Node_Id gnat_choice;
! 	tree gnu_label;
! 	Node_Id gnat_statement;
! 
! 	gnu_expr = gnat_to_gnu (Expression (gnat_node));
! 	gnu_expr = convert (get_base_type (TREE_TYPE (gnu_expr)), gnu_expr);
! 
! 	/*  The range of values in a case statement is determined by the
! 	    rules in RM 5.4(7-9). In almost all cases, this range is
! 	    represented by the Etype of the expression. One exception arises
! 	    in the case of a simple name that is parenthesized. This still
! 	    has the Etype of the name, but since it is not a name, para 7
! 	    does not apply, and we need to go to the base type. This is the
! 	    only case where parenthesization affects the dynamic semantics
! 	    (i.e. the range of possible values at runtime that is covered by
! 	    the others alternative.
! 
! 	    Another exception is if the subtype of the expression is
! 	    non-static.  In that case, we also have to use the base type.  */
! 	if (Paren_Count (Expression (gnat_node)) != 0
! 	    || !Is_OK_Static_Subtype (Underlying_Type
! 				      (Etype (Expression (gnat_node)))))
! 	  gnu_expr = convert (get_base_type (TREE_TYPE (gnu_expr)), gnu_expr);
! 
! 	set_lineno (gnat_node, 1);
! 	expand_start_case (1, gnu_expr, TREE_TYPE (gnu_expr), "case");
! 
! 	for (gnat_when = First_Non_Pragma (Alternatives (gnat_node));
! 	     Present (gnat_when);
! 	     gnat_when = Next_Non_Pragma (gnat_when))
! 	  {
! 	    /* First compile all the different case choices for the  current
! 	       WHEN alternative.  */
! 
! 	    for (gnat_choice = First (Discrete_Choices (gnat_when));
! 		 Present (gnat_choice); gnat_choice = Next (gnat_choice))
!               {
! 		int error_code;
! 
!  	        gnu_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
! 
! 		set_lineno (gnat_choice, 1);
! 		switch (Nkind (gnat_choice))
! 		  {
! 		  case N_Range:
! 		    /* Abort on all errors except range empty, which
! 		       means we ignore this alternative.  */
! 		    error_code
! 		      = pushcase_range (gnat_to_gnu (Low_Bound (gnat_choice)),
! 					gnat_to_gnu (High_Bound (gnat_choice)),
! 					convert, gnu_label, 0);
! 
! 		    if (error_code != 0 && error_code != 4)
! 		      gigi_abort (332);
! 		    break;
! 
! 		  case N_Subtype_Indication:
! 		    error_code
! 		      = pushcase_range
! 			(gnat_to_gnu (Low_Bound (Range_Expression
! 						 (Constraint (gnat_choice)))),
! 			 gnat_to_gnu (High_Bound (Range_Expression
! 						  (Constraint (gnat_choice)))),
! 			 convert, gnu_label, 0);
! 
! 		    if (error_code != 0 && error_code != 4)
! 		      gigi_abort (332);
! 		    break;
! 
! 		  case N_Identifier:
!                   case N_Expanded_Name:
! 		    /* This represents either a subtype range or a static value
! 		       of some kind; Ekind says which.  If a static value,
! 		       fall through to the next case.  */
! 		    if (IN (Ekind (Entity (gnat_choice)), Type_Kind))
! 		      {
! 			tree type = get_unpadded_type (Entity (gnat_choice));
! 
! 			error_code
! 			  = pushcase_range (fold (TYPE_MIN_VALUE (type)),
! 					    fold (TYPE_MAX_VALUE (type)),
! 					    convert, gnu_label, 0);
! 
! 			if (error_code != 0 && error_code != 4)
! 			  gigi_abort (332);
! 			break;
! 		      }
! 		    /* ... fall through ... */
! 		  case N_Character_Literal:
! 		  case N_Integer_Literal:
! 		    if (pushcase (gnat_to_gnu (gnat_choice), convert,
! 				  gnu_label, 0))
! 		      gigi_abort (332);
! 		    break;
! 
! 		  case N_Others_Choice:
! 		    if (pushcase (NULL_TREE, convert, gnu_label, 0))
! 		      gigi_abort (332);
! 		    break;
! 
! 		  default:
! 		    gigi_abort (316);
! 		  }
! 	      }
! 
! 	    /* After compiling the choices attached to the WHEN compile the
! 	       body of statements that have to be executed, should the
! 	       "WHEN ... =>" be taken.  Push a binding level here in case
! 	       variables are declared since we want them to be local to this
! 	       set of statements instead of the block containing the Case
! 	       statement.  */
! 	    pushlevel (0);
! 	    expand_start_bindings (0);
! 	    for (gnat_statement = First (Statements (gnat_when));
! 		 Present (gnat_statement);
! 		 gnat_statement = Next (gnat_statement))
! 	      gnat_to_code (gnat_statement);
! 
! 	    /* Communicate to GCC that we are done with the current WHEN,
! 	       i.e. insert a "break" statement.  */
! 	    expand_exit_something ();
! 	    expand_end_bindings (getdecls (), kept_level_p (), -1);
! 	    poplevel (kept_level_p (), 1, 0);
! 	  }
! 
! 	expand_end_case (gnu_expr);
!       }
        break;
  
      case N_Loop_Statement:
!       {
! 	/* The loop variable in GCC form, if any. */
! 	tree gnu_loop_var = NULL_TREE;
! 	/* PREINCREMENT_EXPR or PREDECREMENT_EXPR.  */
! 	enum tree_code gnu_update = ERROR_MARK;
! 	/* Used if this is a named loop for so EXIT can work.  */
! 	struct nesting *loop_id;
! 	/* Condition to continue loop tested at top of loop.  */
! 	tree gnu_top_condition = integer_one_node;
! 	/* Similar, but tested at bottom of loop.  */
! 	tree gnu_bottom_condition = integer_one_node;
! 	Node_Id gnat_statement;
! 	Node_Id gnat_iter_scheme = Iteration_Scheme (gnat_node);
! 	Node_Id gnat_top_condition = Empty;
! 	int enclosing_if_p = 0;
! 
! 	/* Set the condition that under which the loop should continue.
! 	   For "LOOP .... END LOOP;" the condition is always true.  */
! 	if (No (gnat_iter_scheme))
! 	  ;
! 	/* The case "WHILE condition LOOP ..... END LOOP;" */
! 	else if (Present (Condition (gnat_iter_scheme)))
! 	  gnat_top_condition = Condition (gnat_iter_scheme);
!         else
! 	  {
! 	    /* We have an iteration scheme.  */
! 	    Node_Id gnat_loop_spec
! 	      = Loop_Parameter_Specification (gnat_iter_scheme);
! 	    Entity_Id gnat_loop_var = Defining_Entity (gnat_loop_spec);
! 	    Entity_Id gnat_type = Etype (gnat_loop_var);
! 	    tree gnu_type = get_unpadded_type (gnat_type);
! 	    tree gnu_low = TYPE_MIN_VALUE (gnu_type);
! 	    tree gnu_high = TYPE_MAX_VALUE (gnu_type);
! 	    int reversep = Reverse_Present (gnat_loop_spec);
! 	    tree gnu_first = reversep ? gnu_high : gnu_low;
! 	    tree gnu_last = reversep ? gnu_low : gnu_high;
! 	    enum tree_code end_code = reversep ? GE_EXPR : LE_EXPR;
! 	    tree gnu_base_type = get_base_type (gnu_type);
! 	    tree gnu_limit
! 	      = (reversep ? TYPE_MIN_VALUE (gnu_base_type)
! 		 : TYPE_MAX_VALUE (gnu_base_type));
! 
! 	    /* We know the loop variable will not overflow if GNU_LAST is
! 	       a constant and is not equal to GNU_LIMIT.  If it might
! 	       overflow, we have to move the limit test to the end of
! 	       the loop.  In that case, we have to test for an
! 	       empty loop outside the loop.  */
! 	    if (TREE_CODE (gnu_last) != INTEGER_CST
! 		|| TREE_CODE (gnu_limit) != INTEGER_CST
! 		|| tree_int_cst_equal (gnu_last, gnu_limit))
! 	      {
! 		gnu_expr = build_binary_op (LE_EXPR, integer_type_node,
! 					    gnu_low, gnu_high);
! 		set_lineno (gnat_loop_spec, 1);
! 		expand_start_cond (gnu_expr, 0);
! 		enclosing_if_p = 1;
! 	      }
! 
! 	    /* Open a new nesting level that will surround the loop to declare
! 	       the loop index variable.  */
! 	    pushlevel (0);
! 	    expand_start_bindings (0);
! 
! 	    /* Declare the loop index and set it to its initial value.  */
! 	    gnu_loop_var = gnat_to_gnu_entity (gnat_loop_var, gnu_first, 1);
! 	    if (DECL_BY_REF_P (gnu_loop_var))
! 	      gnu_loop_var = build_unary_op (INDIRECT_REF, NULL_TREE,
! 					     gnu_loop_var);
! 
! 	    /* The loop variable might be a padded type, so use `convert' to
! 	       get a reference to the inner variable if so.  */
! 	    gnu_loop_var = convert (get_base_type (gnu_type), gnu_loop_var);
! 
! 	    /* Set either the top or bottom exit condition as
! 	       appropriate depending on whether we know an overflow
! 	       cannot occur or not. */
! 	    if (enclosing_if_p)
! 	      gnu_bottom_condition
! 		= build_binary_op (NE_EXPR, integer_type_node,
! 				   gnu_loop_var, gnu_last);
! 	    else
! 	      gnu_top_condition
! 		= build_binary_op (end_code, integer_type_node,
! 				   gnu_loop_var, gnu_last);
! 
! 	    gnu_update = reversep ? PREDECREMENT_EXPR : PREINCREMENT_EXPR;
! 	  }
! 
! 	set_lineno (gnat_node, 1);
! 	if (gnu_loop_var)
! 	  loop_id = expand_start_loop_continue_elsewhere (1);
! 	else
! 	  loop_id = expand_start_loop (1);
! 
! 	/* If the loop was named, have the name point to this loop.  In this
! 	   case, the association is not a ..._DECL node; in fact, it isn't
! 	   a GCC tree node at all.  Since this name is referenced inside
! 	   the loop, do it before we process the statements of the loop.  */
!         if (Present (Identifier (gnat_node)))
! 	  {
! 	    tree gnu_loop_id = make_node (GNAT_LOOP_ID);
! 
! 	    TREE_LOOP_ID (gnu_loop_id) = loop_id;
! 	    save_gnu_tree (Entity (Identifier (gnat_node)), gnu_loop_id, 1);
! 	  }
! 
! 	set_lineno (gnat_node, 1);
! 
! 	/* We must evaluate the condition after we've entered the
! 	   loop so that any expression actions get done in the right
! 	   place.  */
! 	if (Present (gnat_top_condition))
! 	  gnu_top_condition = gnat_to_gnu (gnat_top_condition);
! 
! 	expand_exit_loop_top_cond (0, gnu_top_condition);
! 
!         /* Make the loop body into its own block, so any allocated
!            storage will be released every iteration.  This is needed
!            for stack allocation.  */
! 
!         pushlevel (0);
!         gnu_block_stack
! 	  = tree_cons (gnu_bottom_condition, NULL_TREE, gnu_block_stack);
!         expand_start_bindings (0);
! 
! 	for (gnat_statement = First (Statements (gnat_node));
! 	     Present (gnat_statement);
! 	     gnat_statement = Next (gnat_statement))
! 	  gnat_to_code (gnat_statement);
! 
!         expand_end_bindings (getdecls (), kept_level_p (), -1);
!         poplevel (kept_level_p (), 1, 0);
!         gnu_block_stack = TREE_CHAIN (gnu_block_stack);
! 
! 	set_lineno (gnat_node, 1);
! 	expand_exit_loop_if_false (0, gnu_bottom_condition);
! 
! 	if (gnu_loop_var)
! 	  {
! 	    expand_loop_continue_here ();
! 	    gnu_expr = build_binary_op (gnu_update, TREE_TYPE (gnu_loop_var),
! 					gnu_loop_var,
! 					convert (TREE_TYPE (gnu_loop_var),
! 						 integer_one_node));
! 	    set_lineno (gnat_iter_scheme, 1);
! 	    expand_expr_stmt (gnu_expr);
! 	  }
! 
! 	set_lineno (gnat_node, 1);
! 	expand_end_loop ();
! 
! 	if (gnu_loop_var)
! 	  {
! 	    /* Close the nesting level that sourround the loop that was used to
! 	       declare the loop index variable.   */
! 	    set_lineno (gnat_node, 1);
! 	    expand_end_bindings (getdecls (), 1, -1);
! 	    poplevel (1, 1, 0);
! 	  }
! 
! 	if (enclosing_if_p)
! 	  {
! 	    set_lineno (gnat_node, 1);
! 	    expand_end_cond ();
! 	  }
!       }
        break;
  
      case N_Block_Statement:
!       pushlevel (0);
!       gnu_block_stack = tree_cons (NULL_TREE, NULL_TREE, gnu_block_stack);
!       expand_start_bindings (0);
!       process_decls (Declarations (gnat_node), Empty, Empty, 1, 1);
!       gnat_to_code (Handled_Statement_Sequence (gnat_node));
!       expand_end_bindings (getdecls (), kept_level_p (), -1);
!       poplevel (kept_level_p (), 1, 0);
!       gnu_block_stack = TREE_CHAIN (gnu_block_stack);
        if (Present (Identifier (gnat_node)))
  	mark_out_of_scope (Entity (Identifier (gnat_node)));
        break;
  
      case N_Exit_Statement:
!       {
! 	/* Which loop to exit, NULL if the current loop.   */
! 	struct nesting *loop_id = 0;
! 	/* The GCC version of the optional GNAT condition node attached to the
! 	   exit statement. Exit the loop if this is false.  */
! 	tree gnu_cond = integer_zero_node;
! 
! 	if (Present (Name (gnat_node)))
! 	  loop_id
! 	    = TREE_LOOP_ID (get_gnu_tree (Entity (Name (gnat_node))));
! 
! 	if (Present (Condition (gnat_node)))
! 	  gnu_cond = invert_truthvalue (gnat_truthvalue_conversion
! 					(gnat_to_gnu (Condition (gnat_node))));
! 
! 	set_lineno (gnat_node, 1);
! 	expand_exit_loop_if_false (loop_id, gnu_cond);
!       }
        break;
  
      case N_Return_Statement:
-       if (type_annotate_only)
- 	break;
- 
        {
  	/* The gnu function type of the subprogram currently processed.  */
  	tree gnu_subprog_type = TREE_TYPE (current_function_decl);
  	/* The return value from the subprogram.  */
! 	tree gnu_ret_val = 0;
  
  	/* If we are dealing with a "return;" from an Ada procedure with
  	   parameters passed by copy in copy out, we need to return a record
--- 3389,3507 ----
      /***************************/
  
      case N_Label:
!       gnu_result = build1 (LABEL_EXPR, void_type_node,
! 			   gnat_to_gnu (Identifier (gnat_node)));
        break;
  
      case N_Null_Statement:
+       gnu_result = alloc_stmt_list ();
        break;
  
      case N_Assignment_Statement:
        /* Get the LHS and RHS of the statement and convert any reference to an
! 	 unconstrained array into a reference to the underlying array.
! 	 If we are not to do range checking and the RHS is an N_Function_Call,
! 	 pass the LHS to the call function.  */
        gnu_lhs = maybe_unconstrained_array (gnat_to_gnu (Name (gnat_node)));
  
!       /* If the type has a size that overflows, convert this into raise of
! 	 Storage_Error: execution shouldn't have gotten here anyway.  */
!       if (TREE_CODE (TYPE_SIZE (TREE_TYPE (gnu_lhs))) == INTEGER_CST
  	   && TREE_OVERFLOW (TYPE_SIZE (TREE_TYPE (gnu_lhs))))
  	gnu_result = build_call_raise (SE_Object_Too_Large);
+       else if (Nkind (Expression (gnat_node)) == N_Function_Call
+ 	       && !Do_Range_Check (Expression (gnat_node)))
+ 	gnu_result = call_to_gnu (Expression (gnat_node),
+ 				  &gnu_result_type, gnu_lhs);
        else
! 	{
! 	  gnu_rhs
! 	    = maybe_unconstrained_array (gnat_to_gnu (Expression (gnat_node)));
  
! 	  /* If range check is needed, emit code to generate it */
! 	  if (Do_Range_Check (Expression (gnat_node)))
! 	    gnu_rhs = emit_range_check (gnu_rhs, Etype (Name (gnat_node)));
! 
! 	  gnu_result
! 	    = build_binary_op (MODIFY_EXPR, NULL_TREE, gnu_lhs, gnu_rhs);
! 	}
        break;
  
      case N_If_Statement:
!       {
! 	tree *gnu_else_ptr;	/* Point to put next "else if" or "else". */
  
! 	/* Make the outer COND_EXPR.  Avoid non-determinism.  */
! 	gnu_result = build3 (COND_EXPR, void_type_node,
! 			     gnat_to_gnu (Condition (gnat_node)),
! 			     NULL_TREE, NULL_TREE);
! 	COND_EXPR_THEN (gnu_result)
! 	  = build_stmt_group (Then_Statements (gnat_node), false);
! 	TREE_SIDE_EFFECTS (gnu_result) = 1;
! 	gnu_else_ptr = &COND_EXPR_ELSE (gnu_result);
  
! 	/* Now make a COND_EXPR for each of the "else if" parts.  Put each
! 	   into the previous "else" part and point to where to put any
! 	   outer "else".  Also avoid non-determinism.  */
! 	if (Present (Elsif_Parts (gnat_node)))
  	  for (gnat_temp = First (Elsif_Parts (gnat_node));
! 	       Present (gnat_temp); gnat_temp = Next (gnat_temp))
  	    {
! 	      gnu_expr = build3 (COND_EXPR, void_type_node,
! 				 gnat_to_gnu (Condition (gnat_temp)),
! 				 NULL_TREE, NULL_TREE);
! 	      COND_EXPR_THEN (gnu_expr)
! 		= build_stmt_group (Then_Statements (gnat_temp), false);
! 	      TREE_SIDE_EFFECTS (gnu_expr) = 1;
! 	      annotate_with_node (gnu_expr, gnat_temp);
! 	      *gnu_else_ptr = gnu_expr;
! 	      gnu_else_ptr = &COND_EXPR_ELSE (gnu_expr);
  	    }
  
! 	*gnu_else_ptr = build_stmt_group (Else_Statements (gnat_node), false);
!       }
        break;
  
      case N_Case_Statement:
!       gnu_result = Case_Statement_to_gnu (gnat_node);
        break;
  
      case N_Loop_Statement:
!       gnu_result = Loop_Statement_to_gnu (gnat_node);
        break;
  
      case N_Block_Statement:
!       start_stmt_group ();
!       gnat_pushlevel ();
!       process_decls (Declarations (gnat_node), Empty, Empty, true, true);
!       add_stmt (gnat_to_gnu (Handled_Statement_Sequence (gnat_node)));
!       gnat_poplevel ();
!       gnu_result = end_stmt_group ();
! 
        if (Present (Identifier (gnat_node)))
  	mark_out_of_scope (Entity (Identifier (gnat_node)));
        break;
  
      case N_Exit_Statement:
!       gnu_result
! 	= build2 (EXIT_STMT, void_type_node,
! 		  (Present (Condition (gnat_node))
! 		   ? gnat_to_gnu (Condition (gnat_node)) : NULL_TREE),
! 		  (Present (Name (gnat_node))
! 		   ? get_gnu_tree (Entity (Name (gnat_node)))
! 		   : TREE_VALUE (gnu_loop_label_stack)));
        break;
  
      case N_Return_Statement:
        {
  	/* The gnu function type of the subprogram currently processed.  */
  	tree gnu_subprog_type = TREE_TYPE (current_function_decl);
  	/* The return value from the subprogram.  */
! 	tree gnu_ret_val = NULL_TREE;
! 	/* The place to put the return value.  */
! 	tree gnu_lhs;
! 	/* Avoid passing error_mark_node to RETURN_EXPR.  */
! 	gnu_result = NULL_TREE;
  
  	/* If we are dealing with a "return;" from an Ada procedure with
  	   parameters passed by copy in copy out, we need to return a record
*************** tree_transform (Node_Id gnat_node)
*** 2481,2497 ****
  	   But if we have a return label defined, convert this into
  	   a branch to that label.  */
  
! 	if (TREE_VALUE (gnu_return_label_stack) != 0)
! 	  expand_goto (TREE_VALUE (gnu_return_label_stack));
  
! 	else if (TYPE_CI_CO_LIST (gnu_subprog_type) != NULL_TREE)
  	  {
  	    if (list_length (TYPE_CI_CO_LIST (gnu_subprog_type)) == 1)
  	      gnu_ret_val = TREE_VALUE (TYPE_CI_CO_LIST (gnu_subprog_type));
  	    else
  	      gnu_ret_val
  		= gnat_build_constructor (TREE_TYPE (gnu_subprog_type),
! 				     TYPE_CI_CO_LIST (gnu_subprog_type));
  	  }
  
  	/* If the Ada subprogram is a function, we just need to return the
--- 3515,3536 ----
  	   But if we have a return label defined, convert this into
  	   a branch to that label.  */
  
! 	if (TREE_VALUE (gnu_return_label_stack))
! 	  {
! 	    gnu_result = build1 (GOTO_EXPR, void_type_node,
! 				 TREE_VALUE (gnu_return_label_stack));
! 	    break;
! 	  }
  
! 	else if (TYPE_CI_CO_LIST (gnu_subprog_type))
  	  {
+ 	    gnu_lhs = DECL_RESULT (current_function_decl);
  	    if (list_length (TYPE_CI_CO_LIST (gnu_subprog_type)) == 1)
  	      gnu_ret_val = TREE_VALUE (TYPE_CI_CO_LIST (gnu_subprog_type));
  	    else
  	      gnu_ret_val
  		= gnat_build_constructor (TREE_TYPE (gnu_subprog_type),
! 					  TYPE_CI_CO_LIST (gnu_subprog_type));
  	  }
  
  	/* If the Ada subprogram is a function, we just need to return the
*************** tree_transform (Node_Id gnat_node)
*** 2501,2566 ****
  
  	else if (Present (Expression (gnat_node)))
  	  {
! 	    gnu_ret_val = gnat_to_gnu (Expression (gnat_node));
! 
! 	    /* Do not remove the padding from GNU_RET_VAL if the inner
! 	       type is self-referential since we want to allocate the fixed
! 	       size in that case.  */
! 	    if (TREE_CODE (gnu_ret_val) == COMPONENT_REF
! 		&& (TREE_CODE (TREE_TYPE (TREE_OPERAND (gnu_ret_val, 0)))
! 		    == RECORD_TYPE)
! 		&& (TYPE_IS_PADDING_P
! 		    (TREE_TYPE (TREE_OPERAND (gnu_ret_val, 0))))
! 		&& (CONTAINS_PLACEHOLDER_P
! 		    (TYPE_SIZE (TREE_TYPE (gnu_ret_val)))))
! 	      gnu_ret_val = TREE_OPERAND (gnu_ret_val, 0);
! 
! 	    if (TYPE_RETURNS_BY_REF_P (gnu_subprog_type)
! 		|| By_Ref (gnat_node))
! 	      gnu_ret_val = build_unary_op (ADDR_EXPR, NULL_TREE, gnu_ret_val);
! 
! 	    else if (TYPE_RETURNS_UNCONSTRAINED_P (gnu_subprog_type))
  	      {
! 		gnu_ret_val = maybe_unconstrained_array (gnu_ret_val);
  
! 		/* We have two cases: either the function returns with
! 		   depressed stack or not.  If not, we allocate on the
! 		   secondary stack.  If so, we allocate in the stack frame.
! 		   if no copy is needed, the front end will set By_Ref,
! 		   which we handle in the case above.  */
! 		if (TYPE_RETURNS_STACK_DEPRESSED (gnu_subprog_type))
! 		  gnu_ret_val
! 		    = build_allocator (TREE_TYPE (gnu_ret_val), gnu_ret_val,
! 				       TREE_TYPE (gnu_subprog_type), 0, -1,
! 				       gnat_node);
  		else
  		  gnu_ret_val
! 		    = build_allocator (TREE_TYPE (gnu_ret_val), gnu_ret_val,
! 				       TREE_TYPE (gnu_subprog_type),
! 				       Procedure_To_Call (gnat_node),
! 				       Storage_Pool (gnat_node), gnat_node);
  	      }
  	  }
  
- 	set_lineno (gnat_node, 1);
  	if (gnu_ret_val)
! 	  expand_return (build_binary_op (MODIFY_EXPR, NULL_TREE,
! 					  DECL_RESULT (current_function_decl),
! 					  gnu_ret_val));
! 	else
! 	  expand_null_return ();
  
        }
        break;
  
      case N_Goto_Statement:
!       if (type_annotate_only)
! 	break;
! 
!       gnu_expr = gnat_to_gnu (Name (gnat_node));
!       TREE_USED (gnu_expr) = 1;
!       set_lineno (gnat_node, 1);
!       expand_goto (gnu_expr);
        break;
  
      /****************************/
--- 3540,3630 ----
  
  	else if (Present (Expression (gnat_node)))
  	  {
! 	    /* If the current function returns by target pointer and we
! 	       are doing a call, pass that target to the call.  */
! 	    if (TYPE_RETURNS_BY_TARGET_PTR_P (gnu_subprog_type)
! 		&& Nkind (Expression (gnat_node)) == N_Function_Call)
  	      {
! 	        gnu_lhs
! 		  = build_unary_op (INDIRECT_REF, NULL_TREE,
! 				    DECL_ARGUMENTS (current_function_decl));
! 		gnu_result = call_to_gnu (Expression (gnat_node),
! 					  &gnu_result_type, gnu_lhs);
! 	      }
! 	    else
! 	      {
! 		gnu_ret_val = gnat_to_gnu (Expression (gnat_node));
  
! 		if (TYPE_RETURNS_BY_TARGET_PTR_P (gnu_subprog_type))
! 		  /* The original return type was unconstrained so dereference
! 		     the TARGET pointer in the return value's type. */
! 		  gnu_lhs
! 		    = build_unary_op (INDIRECT_REF, TREE_TYPE (gnu_ret_val),
! 				      DECL_ARGUMENTS (current_function_decl));
  		else
+ 		  gnu_lhs = DECL_RESULT (current_function_decl);
+ 
+ 		/* Do not remove the padding from GNU_RET_VAL if the inner
+ 		   type is self-referential since we want to allocate the fixed
+ 		   size in that case.  */
+ 		if (TREE_CODE (gnu_ret_val) == COMPONENT_REF
+ 		    && (TREE_CODE (TREE_TYPE (TREE_OPERAND (gnu_ret_val, 0)))
+ 			== RECORD_TYPE)
+ 		    && (TYPE_IS_PADDING_P
+ 			(TREE_TYPE (TREE_OPERAND (gnu_ret_val, 0))))
+ 		    && (CONTAINS_PLACEHOLDER_P
+ 			(TYPE_SIZE (TREE_TYPE (gnu_ret_val)))))
+ 		  gnu_ret_val = TREE_OPERAND (gnu_ret_val, 0);
+ 
+ 		if (TYPE_RETURNS_BY_REF_P (gnu_subprog_type)
+ 		    || By_Ref (gnat_node))
  		  gnu_ret_val
! 		    = build_unary_op (ADDR_EXPR, NULL_TREE, gnu_ret_val);
! 
! 		else if (TYPE_RETURNS_UNCONSTRAINED_P (gnu_subprog_type))
! 		  {
! 		    gnu_ret_val = maybe_unconstrained_array (gnu_ret_val);
! 
! 		    /* We have two cases: either the function returns with
! 		       depressed stack or not.  If not, we allocate on the
! 		       secondary stack.  If so, we allocate in the stack frame.
! 		       if no copy is needed, the front end will set By_Ref,
! 		       which we handle in the case above.  */
! 		    if (TYPE_RETURNS_STACK_DEPRESSED (gnu_subprog_type))
! 		      gnu_ret_val
! 			= build_allocator (TREE_TYPE (gnu_ret_val),
! 					   gnu_ret_val,
! 					   TREE_TYPE (gnu_subprog_type),
! 					   0, -1, gnat_node);
! 		    else
! 		      gnu_ret_val
! 			= build_allocator (TREE_TYPE (gnu_ret_val),
! 					   gnu_ret_val,
! 					   TREE_TYPE (gnu_subprog_type),
! 					   Procedure_To_Call (gnat_node),
! 					   Storage_Pool (gnat_node),
! 					   gnat_node);
! 		  }
  	      }
  	  }
  
  	if (gnu_ret_val)
! 	  gnu_result = build2 (MODIFY_EXPR, TREE_TYPE (gnu_ret_val),
! 			       gnu_lhs, gnu_ret_val);
! 
! 	if (TYPE_RETURNS_BY_TARGET_PTR_P (gnu_subprog_type))
! 	  {
! 	    add_stmt_with_node (gnu_result, gnat_node);
! 	    gnu_result = NULL_TREE;
! 	  }
  
+ 	gnu_result = build1 (RETURN_EXPR, void_type_node, gnu_result);
        }
        break;
  
      case N_Goto_Statement:
!       gnu_result = build1 (GOTO_EXPR, void_type_node,
! 			   gnat_to_gnu (Name (gnat_node)));
        break;
  
      /****************************/
*************** tree_transform (Node_Id gnat_node)
*** 2576,2582 ****
        if (No (Freeze_Node (Defining_Entity (Specification (gnat_node)))))
  	gnat_to_gnu_entity (Defining_Entity (Specification (gnat_node)),
  			    NULL_TREE, 1);
! 
        break;
  
      case N_Abstract_Subprogram_Declaration:
--- 3640,3646 ----
        if (No (Freeze_Node (Defining_Entity (Specification (gnat_node)))))
  	gnat_to_gnu_entity (Defining_Entity (Specification (gnat_node)),
  			    NULL_TREE, 1);
!       gnu_result = alloc_stmt_list ();
        break;
  
      case N_Abstract_Subprogram_Declaration:
*************** tree_transform (Node_Id gnat_node)
*** 2591,3234 ****
  	    && !From_With_Type (Etype (gnat_temp)))
  	  gnat_to_gnu_entity (Etype (gnat_temp), NULL_TREE, 0);
  
        break;
  
      case N_Defining_Program_Unit_Name:
        /* For a child unit identifier go up a level to get the
           specificaton.  We get this when we try to find the spec of
  	 a child unit package that is the compilation unit being compiled. */
!       gnat_to_code (Parent (gnat_node));
        break;
  
      case N_Subprogram_Body:
!       {
!         /* Save debug output mode in case it is reset.  */
!         enum debug_info_type save_write_symbols = write_symbols;
! 	const struct gcc_debug_hooks *const save_debug_hooks = debug_hooks;
! 	/* Definining identifier of a parameter to the subprogram.  */
!         Entity_Id gnat_param;
! 	/* The defining identifier for the subprogram body. Note that if a
! 	   specification has appeared before for this body, then the identifier
! 	   occurring in that specification will also be a defining identifier
! 	   and all the calls to this subprogram will point to that
! 	   specification.  */
! 	Entity_Id gnat_subprog_id
! 	  = (Present (Corresponding_Spec (gnat_node))
! 	     ? Corresponding_Spec (gnat_node) : Defining_Entity (gnat_node));
! 
! 	/* The FUNCTION_DECL node corresponding to the subprogram spec.   */
! 	tree gnu_subprog_decl;
! 	/* The FUNCTION_TYPE node corresponding to the subprogram spec.  */
! 	tree gnu_subprog_type;
! 	tree gnu_cico_list;
! 
! 	/* If this is a generic object or if it has been eliminated,
! 	   ignore it.  */
! 
! 	if (Ekind (gnat_subprog_id) == E_Generic_Procedure
! 	    || Ekind (gnat_subprog_id) == E_Generic_Function
! 	    || Is_Eliminated (gnat_subprog_id))
! 	  break;
! 
!         /* If debug information is suppressed for the subprogram,
!            turn debug mode off for the duration of processing.  */
!         if (!Needs_Debug_Info (gnat_subprog_id))
! 	  {
! 	    write_symbols = NO_DEBUG;
! 	    debug_hooks = &do_nothing_debug_hooks;
! 	  }
! 
! 	/* If this subprogram acts as its own spec, define it.  Otherwise,
! 	   just get the already-elaborated tree node.  However, if this
! 	   subprogram had its elaboration deferred, we will already have
! 	   made a tree node for it.  So treat it as not being defined in
! 	   that case.  Such a subprogram cannot have an address clause or
! 	   a freeze node, so this test is safe, though it does disable
! 	   some otherwise-useful error checking.  */
! 	gnu_subprog_decl
! 	  = gnat_to_gnu_entity (gnat_subprog_id, NULL_TREE,
! 				Acts_As_Spec (gnat_node)
! 				&& ! present_gnu_tree (gnat_subprog_id));
! 
! 	gnu_subprog_type = TREE_TYPE (gnu_subprog_decl);
! 
! 	/* Set the line number in the decl to correspond to that of
! 	   the body so that the line number notes are written
! 	   correctly.  */
! 	set_lineno (gnat_node, 0);
! 	DECL_SOURCE_LOCATION (gnu_subprog_decl) = input_location;
! 
! 	begin_subprog_body (gnu_subprog_decl);
! 
! 	/* There used to be a second call to set_lineno here, with
! 	   write_note_p set, but begin_subprog_body actually already emits the
! 	   note we want (via init_function_start).
! 
! 	   Emitting a second note here was necessary for -ftest-coverage with
! 	   GCC 2.8.1, as the first one was skipped by branch_prob. This is no
! 	   longer the case with GCC 3.x, so emitting a second note here would
! 	   result in having the first line of the subprogram counted twice by
! 	   gcov.  */
! 
! 	pushlevel (0);
! 	gnu_block_stack = tree_cons (NULL_TREE, NULL_TREE, gnu_block_stack);
!   	expand_start_bindings (0);
! 
! 	gnu_cico_list = TYPE_CI_CO_LIST (gnu_subprog_type);
! 
! 	/* If there are OUT parameters, we need to ensure that the
! 	   return statement properly copies them out.  We do this by
! 	   making a new block and converting any inner return into a goto
! 	   to a label at the end of the block.  */
! 
! 	if (gnu_cico_list != 0)
! 	  {
! 	    gnu_return_label_stack
! 	      = tree_cons (NULL_TREE,
! 			   build_decl (LABEL_DECL, NULL_TREE, NULL_TREE),
! 			   gnu_return_label_stack);
! 	    pushlevel (0);
! 	    expand_start_bindings (0);
! 	  }
! 	else
! 	  gnu_return_label_stack
! 	    = tree_cons (NULL_TREE, NULL_TREE, gnu_return_label_stack);
! 
! 	/* See if there are any parameters for which we don't yet have
! 	   GCC entities.  These must be for OUT parameters for which we
! 	   will be making VAR_DECL nodes here.  Fill them in to
! 	   TYPE_CI_CO_LIST, which must contain the empty entry as well.
! 	   We can match up the entries because TYPE_CI_CO_LIST is in the
! 	   order of the parameters.  */
! 
! 	for (gnat_param = First_Formal (gnat_subprog_id);
! 	     Present (gnat_param);
! 	     gnat_param = Next_Formal_With_Extras (gnat_param))
! 	  if (present_gnu_tree (gnat_param))
! 	    adjust_decl_rtl (get_gnu_tree (gnat_param));
! 	  else
! 	    {
! 	      /* Skip any entries that have been already filled in; they
! 		 must correspond to IN OUT parameters.  */
! 	    for (; gnu_cico_list != 0 && TREE_VALUE (gnu_cico_list) != 0;
! 		 gnu_cico_list = TREE_CHAIN (gnu_cico_list))
! 	      ;
! 
! 	    /* Do any needed references for padded types.  */
! 	    TREE_VALUE (gnu_cico_list)
! 	      = convert (TREE_TYPE (TREE_PURPOSE (gnu_cico_list)),
! 			 gnat_to_gnu_entity (gnat_param, NULL_TREE, 1));
! 	  }
! 
! 	process_decls (Declarations (gnat_node), Empty, Empty, 1, 1);
! 
! 	/* Generate the code of the subprogram itself.  A return statement
! 	   will be present and any OUT parameters will be handled there.  */
! 	gnat_to_code (Handled_Statement_Sequence (gnat_node));
! 
! 	expand_end_bindings (getdecls (), kept_level_p (), -1);
! 	poplevel (kept_level_p (), 1, 0);
! 	gnu_block_stack = TREE_CHAIN (gnu_block_stack);
! 
! 	if (TREE_VALUE (gnu_return_label_stack) != 0)
! 	  {
! 	    tree gnu_retval;
! 
! 	    expand_end_bindings (NULL_TREE, kept_level_p (), -1);
! 	    poplevel (kept_level_p (), 1, 0);
! 	    expand_label (TREE_VALUE (gnu_return_label_stack));
! 
! 	    gnu_cico_list = TYPE_CI_CO_LIST (gnu_subprog_type);
! 	    set_lineno (gnat_node, 1);
! 	    if (list_length (gnu_cico_list) == 1)
! 	      gnu_retval = TREE_VALUE (gnu_cico_list);
! 	    else
! 	       gnu_retval = gnat_build_constructor (TREE_TYPE (gnu_subprog_type),
! 					       gnu_cico_list);
! 
! 	    if (DECL_P (gnu_retval) && DECL_BY_REF_P (gnu_retval))
! 	      gnu_retval
! 		= build_unary_op (INDIRECT_REF, NULL_TREE, gnu_retval);
! 
! 	    expand_return
! 	      (build_binary_op (MODIFY_EXPR, NULL_TREE,
! 				DECL_RESULT (current_function_decl),
! 				gnu_retval));
! 
! 	  }
! 
! 	gnu_return_label_stack = TREE_CHAIN (gnu_return_label_stack);
! 
! 	/* Disconnect the trees for parameters that we made variables for
! 	   from the GNAT entities since these will become unusable after
! 	   we end the function.  */
! 	for (gnat_param = First_Formal (gnat_subprog_id);
! 	     Present (gnat_param);
! 	     gnat_param = Next_Formal_With_Extras (gnat_param))
! 	  if (TREE_CODE (get_gnu_tree (gnat_param)) == VAR_DECL)
! 	    save_gnu_tree (gnat_param, NULL_TREE, 0);
! 
! 	end_subprog_body ();
! 	mark_out_of_scope (Defining_Unit_Name (Specification (gnat_node)));
! 	write_symbols = save_write_symbols;
! 	debug_hooks = save_debug_hooks;
!       }
        break;
  
      case N_Function_Call:
      case N_Procedure_Call_Statement:
! 
!       if (type_annotate_only)
! 	break;
! 
!       {
! 	/* The GCC node corresponding to the GNAT subprogram name.  This can
! 	   either be a FUNCTION_DECL node if we are dealing with a standard
! 	   subprogram call, or an indirect reference expression (an
! 	   INDIRECT_REF node) pointing to a subprogram.  */
! 	tree gnu_subprog_node = gnat_to_gnu (Name (gnat_node));
! 	/* The FUNCTION_TYPE node giving the GCC type of the subprogram.  */
! 	tree gnu_subprog_type = TREE_TYPE (gnu_subprog_node);
! 	tree gnu_subprog_addr
! 	  = build_unary_op (ADDR_EXPR, NULL_TREE, gnu_subprog_node);
! 	Entity_Id gnat_formal;
! 	Node_Id gnat_actual;
! 	tree gnu_actual_list = NULL_TREE;
! 	tree gnu_name_list = NULL_TREE;
! 	tree gnu_after_list = NULL_TREE;
! 	tree gnu_subprog_call;
! 
! 	switch (Nkind (Name (gnat_node)))
! 	  {
! 	  case N_Identifier:
! 	  case N_Operator_Symbol:
! 	  case N_Expanded_Name:
! 	  case N_Attribute_Reference:
! 	    if (Is_Eliminated (Entity (Name (gnat_node))))
! 	      Eliminate_Error_Msg (gnat_node, Entity (Name (gnat_node)));
!           }
! 
! 	if (TREE_CODE (gnu_subprog_type) != FUNCTION_TYPE)
! 	  gigi_abort (317);
! 
! 	/* If we are calling a stubbed function, make this into a
! 	   raise of Program_Error.  Elaborate all our args first.  */
! 
! 	if (TREE_CODE (gnu_subprog_node) == FUNCTION_DECL
! 	    && DECL_STUBBED_P (gnu_subprog_node))
! 	  {
! 	    for (gnat_actual = First_Actual (gnat_node);
! 		 Present (gnat_actual);
! 		 gnat_actual = Next_Actual (gnat_actual))
! 	      expand_expr_stmt (gnat_to_gnu (gnat_actual));
! 
! 	    if (Nkind (gnat_node) == N_Function_Call)
! 	      {
! 		gnu_result_type = TREE_TYPE (gnu_subprog_type);
! 		gnu_result
! 		  = build1 (NULL_EXPR, gnu_result_type,
! 			    build_call_raise (PE_Stubbed_Subprogram_Called));
! 	      }
! 	    else
! 	      expand_expr_stmt
! 	        (build_call_raise (PE_Stubbed_Subprogram_Called));
! 	    break;
! 	  }
! 
! 	/* The only way we can be making a call via an access type is
! 	   if Name is an explicit dereference.  In that case, get the
! 	   list of formal args from the type the access type is pointing
! 	   to.  Otherwise, get the formals from entity being called.  */
! 	if (Nkind (Name (gnat_node)) == N_Explicit_Dereference)
! 	  gnat_formal = First_Formal (Etype (Name (gnat_node)));
! 	else if (Nkind (Name (gnat_node)) == N_Attribute_Reference)
! 	  /* Assume here that this must be 'Elab_Body or 'Elab_Spec.  */
! 	  gnat_formal = 0;
! 	else
! 	  gnat_formal = First_Formal (Entity (Name (gnat_node)));
! 
! 	/* Create the list of the actual parameters as GCC expects it, namely
! 	   a chain of TREE_LIST nodes in which the TREE_VALUE field of each
! 	   node is a parameter-expression and the TREE_PURPOSE field is
! 	   null.  Skip OUT parameters that are not passed by reference and
! 	   don't need to be copied in.  */
! 
!         for (gnat_actual = First_Actual (gnat_node);
!              Present (gnat_actual);
!              gnat_formal = Next_Formal_With_Extras (gnat_formal),
!              gnat_actual = Next_Actual (gnat_actual))
! 	  {
! 	    tree gnu_formal_type = gnat_to_gnu_type (Etype (gnat_formal));
! 	    /* We treat a conversion between aggregate types as if it
! 	       is an unchecked conversion.  */
! 	    int unchecked_convert_p
! 	      = (Nkind (gnat_actual) == N_Unchecked_Type_Conversion
! 		 || (Nkind (gnat_actual) == N_Type_Conversion
! 		     && Is_Composite_Type (Underlying_Type
! 					   (Etype (gnat_formal)))));
! 	    Node_Id gnat_name
! 	      = unchecked_convert_p ? Expression (gnat_actual) : gnat_actual;
! 	    tree gnu_name = gnat_to_gnu (gnat_name);
! 	    tree gnu_name_type = gnat_to_gnu_type (Etype (gnat_name));
! 	    tree gnu_actual;
! 
! 	    /* If it's possible we may need to use this expression twice,
! 	       make sure than any side-effects are handled via SAVE_EXPRs.
! 	       Likewise if we need to force side-effects before the call.
! 	       ??? This is more conservative than we need since we don't
! 	       need to do this for pass-by-ref with no conversion.
! 	       If we are passing a non-addressable Out or In Out parameter by
! 	       reference, pass the address of a copy and set up to copy back
! 	       out after the call.  */
! 
! 	    if (Ekind (gnat_formal) != E_In_Parameter)
! 	      {
! 		gnu_name = gnat_stabilize_reference (gnu_name, 1);
! 		if (! addressable_p (gnu_name)
! 		    && present_gnu_tree (gnat_formal)
! 		    && (DECL_BY_REF_P (get_gnu_tree (gnat_formal))
! 			|| (TREE_CODE (get_gnu_tree (gnat_formal)) == PARM_DECL
! 			    && (DECL_BY_COMPONENT_PTR_P
! 				(get_gnu_tree (gnat_formal))
! 				|| DECL_BY_DESCRIPTOR_P
! 				(get_gnu_tree (gnat_formal))))))
! 		  {
! 		    tree gnu_copy = gnu_name;
! 		    tree gnu_temp;
! 
! 		    /* Remove any unpadding on the actual and make a copy.
! 		       But if the actual is a left-justified modular type,
! 		       first convert to it.  */
! 		    if (TREE_CODE (gnu_name) == COMPONENT_REF
! 			&& ((TREE_CODE (TREE_TYPE (TREE_OPERAND (gnu_name, 0)))
! 			     == RECORD_TYPE)
! 			    && (TYPE_IS_PADDING_P
! 				(TREE_TYPE (TREE_OPERAND (gnu_name, 0))))))
! 		      gnu_name = gnu_copy = TREE_OPERAND (gnu_name, 0);
! 		    else if (TREE_CODE (gnu_name_type) == RECORD_TYPE
! 			     && (TYPE_LEFT_JUSTIFIED_MODULAR_P
! 				 (gnu_name_type)))
! 		      gnu_name = convert (gnu_name_type, gnu_name);
! 
! 		    gnu_actual = save_expr (gnu_name);
! 
! 		    /* Since we're going to take the address of the SAVE_EXPR,
! 		       we don't want it to be marked as unchanging.
! 		       So set TREE_ADDRESSABLE.  */
! 		    gnu_temp = skip_simple_arithmetic (gnu_actual);
! 		    if (TREE_CODE (gnu_temp) == SAVE_EXPR)
! 		      {
! 			TREE_ADDRESSABLE (gnu_temp) = 1;
! 			TREE_READONLY (gnu_temp) = 0;
! 		      }
! 
! 		    /* Set up to move the copy back to the original.  */
! 		    gnu_after_list = tree_cons (gnu_copy, gnu_actual,
! 						gnu_after_list);
! 
! 		    gnu_name = gnu_actual;
! 		  }
! 	      }
! 
! 	    /* If this was a procedure call, we may not have removed any
! 	       padding.  So do it here for the part we will use as an
! 	       input, if any.  */
! 	    gnu_actual = gnu_name;
! 	    if (Ekind (gnat_formal) != E_Out_Parameter
! 		&& TREE_CODE (TREE_TYPE (gnu_actual)) == RECORD_TYPE
! 		&& TYPE_IS_PADDING_P (TREE_TYPE (gnu_actual)))
! 	      gnu_actual = convert (get_unpadded_type (Etype (gnat_actual)),
! 				    gnu_actual);
! 
! 	    if (Ekind (gnat_formal) != E_Out_Parameter
! 		&& ! unchecked_convert_p
! 		&& Do_Range_Check (gnat_actual))
! 	      gnu_actual = emit_range_check (gnu_actual, Etype (gnat_formal));
! 
! 	    /* Do any needed conversions.  We need only check for
! 	       unchecked conversion since normal conversions will be handled
! 	       by just converting to the formal type.  */
! 	    if (unchecked_convert_p)
! 	      {
! 		gnu_actual
! 		  = unchecked_convert (gnat_to_gnu_type (Etype (gnat_actual)),
! 				       gnu_actual,
! 				       (Nkind (gnat_actual)
! 					== N_Unchecked_Type_Conversion)
! 				       && No_Truncation (gnat_actual));
! 
! 		/* One we've done the unchecked conversion, we still
! 		   must ensure that the object is in range of the formal's
! 		   type.  */
! 		if (Ekind (gnat_formal) != E_Out_Parameter
! 		    && Do_Range_Check (gnat_actual))
! 		  gnu_actual = emit_range_check (gnu_actual,
! 						 Etype (gnat_formal));
! 	      }
! 	    else if (TREE_CODE (gnu_actual) != SAVE_EXPR)
! 	      /* We may have suppressed a conversion to the Etype of the
! 		 actual since the parent is a procedure call.  So add the
! 		 conversion here.  */
! 	      gnu_actual = convert (gnat_to_gnu_type (Etype (gnat_actual)),
! 				    gnu_actual);
! 
! 	    if (TREE_CODE (gnu_actual) != SAVE_EXPR)
! 	      gnu_actual = convert (gnu_formal_type, gnu_actual);
! 
! 	    /* If we have not saved a GCC object for the formal, it means it
! 	       is an OUT parameter not passed by reference and that does not
! 	       need to be copied in. Otherwise, look at the PARM_DECL to see
! 	       if it is passed by reference. */
! 	    if (present_gnu_tree (gnat_formal)
! 		&& TREE_CODE (get_gnu_tree (gnat_formal)) == PARM_DECL
! 		&& DECL_BY_REF_P (get_gnu_tree (gnat_formal)))
! 	      {
! 		if (Ekind (gnat_formal) != E_In_Parameter)
! 		  {
! 		    gnu_actual = gnu_name;
! 
! 		    /* If we have a padded type, be sure we've removed the
! 		       padding.  */
! 		    if (TREE_CODE (TREE_TYPE (gnu_actual)) == RECORD_TYPE
! 			&& TYPE_IS_PADDING_P (TREE_TYPE (gnu_actual))
! 			&& TREE_CODE (gnu_actual) != SAVE_EXPR)
! 		      gnu_actual
! 			= convert (get_unpadded_type (Etype (gnat_actual)),
! 				   gnu_actual);
! 		  }
! 
! 		/* The symmetry of the paths to the type of an entity is
! 		   broken here since arguments don't know that they will
! 		   be passed by ref. */
! 		gnu_formal_type = TREE_TYPE (get_gnu_tree (gnat_formal));
! 		gnu_actual = build_unary_op (ADDR_EXPR, gnu_formal_type,
! 					     gnu_actual);
! 	      }
! 	    else if (present_gnu_tree (gnat_formal)
! 		     && TREE_CODE (get_gnu_tree (gnat_formal)) == PARM_DECL
! 		     && DECL_BY_COMPONENT_PTR_P (get_gnu_tree (gnat_formal)))
! 	      {
! 		gnu_formal_type = TREE_TYPE (get_gnu_tree (gnat_formal));
! 		gnu_actual = maybe_implicit_deref (gnu_actual);
! 		gnu_actual = maybe_unconstrained_array (gnu_actual);
! 
! 		if (TREE_CODE (gnu_formal_type) == RECORD_TYPE
! 		    && TYPE_IS_PADDING_P (gnu_formal_type))
! 		  {
! 		    gnu_formal_type
! 		      = TREE_TYPE (TYPE_FIELDS (gnu_formal_type));
! 		    gnu_actual = convert (gnu_formal_type, gnu_actual);
! 		  }
! 
! 		/* Take the address of the object and convert to the
! 		   proper pointer type.  We'd like to actually compute
! 		   the address of the beginning of the array using
! 		   an ADDR_EXPR of an ARRAY_REF, but there's a possibility
! 		   that the ARRAY_REF might return a constant and we'd
! 		   be getting the wrong address.  Neither approach is
! 		   exactly correct, but this is the most likely to work
! 		   in all cases.  */
! 		gnu_actual = convert (gnu_formal_type,
! 				      build_unary_op (ADDR_EXPR, NULL_TREE,
! 						      gnu_actual));
! 	      }
! 	    else if (present_gnu_tree (gnat_formal)
! 		     && TREE_CODE (get_gnu_tree (gnat_formal)) == PARM_DECL
! 		     && DECL_BY_DESCRIPTOR_P (get_gnu_tree (gnat_formal)))
! 	      {
! 		/* If arg is 'Null_Parameter, pass zero descriptor.  */
! 		if ((TREE_CODE (gnu_actual) == INDIRECT_REF
! 		     || TREE_CODE (gnu_actual) == UNCONSTRAINED_ARRAY_REF)
! 		    && TREE_PRIVATE (gnu_actual))
! 		  gnu_actual
! 		    = convert (DECL_ARG_TYPE (get_gnu_tree (gnat_formal)),
! 			       integer_zero_node);
! 		else
! 		  gnu_actual
! 		    = build_unary_op (ADDR_EXPR, NULL_TREE,
! 				      fill_vms_descriptor (gnu_actual,
! 							   gnat_formal));
! 	      }
! 	    else
! 	      {
! 		tree gnu_actual_size = TYPE_SIZE (TREE_TYPE (gnu_actual));
! 
! 		if (Ekind (gnat_formal) != E_In_Parameter)
! 		  gnu_name_list
! 		    = chainon (gnu_name_list,
! 			       build_tree_list (NULL_TREE, gnu_name));
! 
! 		if (! present_gnu_tree (gnat_formal)
! 		    || TREE_CODE (get_gnu_tree (gnat_formal)) != PARM_DECL)
! 		  continue;
! 
! 		/* If this is 'Null_Parameter, pass a zero even though we are
! 		   dereferencing it.  */
! 		else if (TREE_CODE (gnu_actual) == INDIRECT_REF
! 			 && TREE_PRIVATE (gnu_actual)
! 			 && host_integerp (gnu_actual_size, 1)
! 			 && 0 >= compare_tree_int (gnu_actual_size,
! 						   BITS_PER_WORD))
! 		  gnu_actual
! 		    = unchecked_convert
! 		      (DECL_ARG_TYPE (get_gnu_tree (gnat_formal)),
! 		       convert (gnat_type_for_size
! 				(tree_low_cst (gnu_actual_size, 1), 1),
! 				integer_zero_node), 0);
! 		else
! 		  gnu_actual
! 		    = convert (TYPE_MAIN_VARIANT
! 			       (DECL_ARG_TYPE (get_gnu_tree (gnat_formal))),
! 			       gnu_actual);
! 	      }
! 
! 	    gnu_actual_list
! 	      = chainon (gnu_actual_list,
! 			 build_tree_list (NULL_TREE, gnu_actual));
! 	  }
! 
! 	gnu_subprog_call = build (CALL_EXPR, TREE_TYPE (gnu_subprog_type),
! 				  gnu_subprog_addr, gnu_actual_list,
! 				  NULL_TREE);
! 	TREE_SIDE_EFFECTS (gnu_subprog_call) = 1;
! 
! 	/* If it is a function call, the result is the call expression.  */
! 	if (Nkind (gnat_node) == N_Function_Call)
! 	  {
! 	    gnu_result = gnu_subprog_call;
! 
! 	    /* If the function returns an unconstrained array or by reference,
! 	       we have to de-dereference the pointer.  */
! 	    if (TYPE_RETURNS_UNCONSTRAINED_P (gnu_subprog_type)
! 		|| TYPE_RETURNS_BY_REF_P (gnu_subprog_type))
! 	      gnu_result = build_unary_op (INDIRECT_REF, NULL_TREE,
! 					   gnu_result);
! 
! 	    gnu_result_type = get_unpadded_type (Etype (gnat_node));
! 	  }
! 
! 	/* If this is the case where the GNAT tree contains a procedure call
! 	   but the Ada procedure has copy in copy out parameters, the special
! 	   parameter passing mechanism must be used.  */
! 	else if (TYPE_CI_CO_LIST (gnu_subprog_type) != NULL_TREE)
! 	  {
! 	    /* List of FIELD_DECLs associated with the PARM_DECLs of the copy
! 	       in copy out parameters.  */
! 	    tree scalar_return_list = TYPE_CI_CO_LIST (gnu_subprog_type);
! 	    int length = list_length (scalar_return_list);
! 
! 	    if (length > 1)
! 	      {
! 		tree gnu_name;
! 
! 		gnu_subprog_call = protect_multiple_eval (gnu_subprog_call);
! 
! 		/* If any of the names had side-effects, ensure they are
! 		   all evaluated before the call.  */
! 		for (gnu_name = gnu_name_list; gnu_name;
! 		     gnu_name = TREE_CHAIN (gnu_name))
! 		  if (TREE_SIDE_EFFECTS (TREE_VALUE (gnu_name)))
! 		    gnu_subprog_call
! 		      = build (COMPOUND_EXPR, TREE_TYPE (gnu_subprog_call),
! 			       TREE_VALUE (gnu_name), gnu_subprog_call);
! 	      }
! 
! 	    if (Nkind (Name (gnat_node)) == N_Explicit_Dereference)
! 	      gnat_formal = First_Formal (Etype (Name (gnat_node)));
! 	    else
! 	      gnat_formal = First_Formal (Entity (Name (gnat_node)));
! 
! 	    for (gnat_actual = First_Actual (gnat_node);
! 		 Present (gnat_actual);
! 		 gnat_formal = Next_Formal_With_Extras (gnat_formal),
! 		 gnat_actual = Next_Actual (gnat_actual))
! 	      /* If we are dealing with a copy in copy out parameter, we must
! 		 retrieve its value from the record returned in the function
! 		 call.  */
! 	      if (! (present_gnu_tree (gnat_formal)
! 		     && TREE_CODE (get_gnu_tree (gnat_formal)) == PARM_DECL
! 		     && (DECL_BY_REF_P (get_gnu_tree (gnat_formal))
! 			 || ((TREE_CODE (get_gnu_tree (gnat_formal))
! 			      == PARM_DECL)
! 			     && ((DECL_BY_COMPONENT_PTR_P
! 				  (get_gnu_tree (gnat_formal))
! 				  || (DECL_BY_DESCRIPTOR_P
! 				      (get_gnu_tree (gnat_formal))))))))
! 		  && Ekind (gnat_formal) != E_In_Parameter)
! 		{
! 		  /* Get the value to assign to this OUT or IN OUT
! 		     parameter.  It is either the result of the function if
! 		     there is only a single such parameter or the appropriate
! 		     field from the record returned.  */
! 		  tree gnu_result
! 		    = length == 1 ? gnu_subprog_call
! 		      : build_component_ref
! 			(gnu_subprog_call, NULL_TREE,
! 			 TREE_PURPOSE (scalar_return_list), 0);
! 		  int unchecked_conversion
! 		    = Nkind (gnat_actual) == N_Unchecked_Type_Conversion;
! 		  /* If the actual is a conversion, get the inner expression,
! 		     which will be the real destination, and convert the
! 		     result to the type of the actual parameter.  */
! 		  tree gnu_actual
! 		    = maybe_unconstrained_array (TREE_VALUE (gnu_name_list));
! 
! 		  /* If the result is a padded type, remove the padding.  */
! 		  if (TREE_CODE (TREE_TYPE (gnu_result)) == RECORD_TYPE
! 		      && TYPE_IS_PADDING_P (TREE_TYPE (gnu_result)))
! 		    gnu_result
! 		      = convert (TREE_TYPE (TYPE_FIELDS
! 					    (TREE_TYPE (gnu_result))),
! 				 gnu_result);
! 
! 		  /* If the result is a type conversion, do it.  */
! 		  if (Nkind (gnat_actual) == N_Type_Conversion)
! 		    gnu_result
! 		      = convert_with_check
! 			(Etype (Expression (gnat_actual)), gnu_result,
! 			 Do_Overflow_Check (gnat_actual),
! 			 Do_Range_Check (Expression (gnat_actual)),
! 			 Float_Truncate (gnat_actual));
! 
! 		  else if (unchecked_conversion)
! 		    gnu_result
! 		      = unchecked_convert (TREE_TYPE (gnu_actual), gnu_result,
! 					   No_Truncation (gnat_actual));
! 		  else
! 		    {
! 		      if (Do_Range_Check (gnat_actual))
! 			gnu_result = emit_range_check (gnu_result,
! 						       Etype (gnat_actual));
! 
! 		      if (! (! TREE_CONSTANT (TYPE_SIZE
! 					      (TREE_TYPE (gnu_actual)))
! 			     && TREE_CONSTANT (TYPE_SIZE
! 					       (TREE_TYPE (gnu_result)))))
! 			gnu_result = convert (TREE_TYPE (gnu_actual),
! 					      gnu_result);
! 		    }
! 
! 		  set_lineno (gnat_node, 1);
! 		  expand_expr_stmt (build_binary_op (MODIFY_EXPR, NULL_TREE,
! 						     gnu_actual, gnu_result));
! 		  scalar_return_list = TREE_CHAIN (scalar_return_list);
! 		  gnu_name_list = TREE_CHAIN (gnu_name_list);
! 		}
! 	  }
! 	else
! 	  {
! 	    set_lineno (gnat_node, 1);
! 	    expand_expr_stmt (gnu_subprog_call);
! 	  }
! 
! 	/* Handle anything we need to assign back.  */
! 	for (gnu_expr = gnu_after_list;
! 	     gnu_expr;
! 	     gnu_expr = TREE_CHAIN (gnu_expr))
! 	  expand_expr_stmt (build_binary_op (MODIFY_EXPR, NULL_TREE,
! 					     TREE_PURPOSE (gnu_expr),
! 					     TREE_VALUE (gnu_expr)));
!       }
        break;
  
      /*************************/
--- 3655,3678 ----
  	    && !From_With_Type (Etype (gnat_temp)))
  	  gnat_to_gnu_entity (Etype (gnat_temp), NULL_TREE, 0);
  
+       gnu_result = alloc_stmt_list ();
        break;
  
      case N_Defining_Program_Unit_Name:
        /* For a child unit identifier go up a level to get the
           specificaton.  We get this when we try to find the spec of
  	 a child unit package that is the compilation unit being compiled. */
!       gnu_result = gnat_to_gnu (Parent (gnat_node));
        break;
  
      case N_Subprogram_Body:
!       Subprogram_Body_to_gnu (gnat_node);
!       gnu_result = alloc_stmt_list ();
        break;
  
      case N_Function_Call:
      case N_Procedure_Call_Statement:
!       gnu_result = call_to_gnu (gnat_node, &gnu_result_type, NULL_TREE);
        break;
  
      /*************************/
*************** tree_transform (Node_Id gnat_node)
*** 3236,3264 ****
      /*************************/
  
      case N_Package_Declaration:
!       gnat_to_code (Specification (gnat_node));
        break;
  
      case N_Package_Specification:
  
        process_decls (Visible_Declarations (gnat_node),
! 		     Private_Declarations (gnat_node), Empty, 1, 1);
        break;
  
      case N_Package_Body:
  
        /* If this is the body of a generic package - do nothing */
        if (Ekind (Corresponding_Spec (gnat_node)) == E_Generic_Package)
! 	break;
  
!       process_decls (Declarations (gnat_node), Empty, Empty, 1, 1);
  
        if (Present (Handled_Statement_Sequence (gnat_node)))
! 	{
! 	  gnu_block_stack = tree_cons (NULL_TREE, NULL_TREE, gnu_block_stack);
! 	  gnat_to_code (Handled_Statement_Sequence (gnat_node));
! 	  gnu_block_stack = TREE_CHAIN (gnu_block_stack);
! 	}
        break;
  
      /*********************************/
--- 3680,3712 ----
      /*************************/
  
      case N_Package_Declaration:
!       gnu_result = gnat_to_gnu (Specification (gnat_node));
        break;
  
      case N_Package_Specification:
  
+       start_stmt_group ();
        process_decls (Visible_Declarations (gnat_node),
! 		     Private_Declarations (gnat_node), Empty, true, true);
!       gnu_result = end_stmt_group ();
        break;
  
      case N_Package_Body:
  
        /* If this is the body of a generic package - do nothing */
        if (Ekind (Corresponding_Spec (gnat_node)) == E_Generic_Package)
! 	{
! 	  gnu_result = alloc_stmt_list ();
! 	  break;
! 	}
  
!       start_stmt_group ();
!       process_decls (Declarations (gnat_node), Empty, Empty, true, true);
  
        if (Present (Handled_Statement_Sequence (gnat_node)))
! 	add_stmt (gnat_to_gnu (Handled_Statement_Sequence (gnat_node)));
! 
!       gnu_result = end_stmt_group ();
        break;
  
      /*********************************/
*************** tree_transform (Node_Id gnat_node)
*** 3268,3273 ****
--- 3716,3722 ----
      case N_Use_Package_Clause:
      case N_Use_Type_Clause:
        /* Nothing to do here - but these may appear in list of declarations */
+       gnu_result = alloc_stmt_list ();
        break;
  
      /***********************/
*************** tree_transform (Node_Id gnat_node)
*** 3275,3284 ****
--- 3724,3735 ----
      /***********************/
  
      case N_Protected_Type_Declaration:
+       gnu_result = alloc_stmt_list ();
        break;
  
      case N_Single_Task_Declaration:
        gnat_to_gnu_entity (Defining_Entity (gnat_node), NULL_TREE, 1);
+       gnu_result = alloc_stmt_list ();
        break;
  
      /***********************************************************/
*************** tree_transform (Node_Id gnat_node)
*** 3287,3348 ****
  
      case N_Compilation_Unit:
  
!       /* For a body, first process the spec if there is one. */
!       if (Nkind (Unit (gnat_node)) == N_Package_Body
! 	  || (Nkind (Unit (gnat_node)) == N_Subprogram_Body
! 	      && ! Acts_As_Spec (gnat_node)))
! 	gnat_to_code (Library_Unit (gnat_node));
! 
!       process_inlined_subprograms (gnat_node);
! 
!       if (type_annotate_only && gnat_node == Cunit (Main_Unit))
! 	{
! 	  elaborate_all_entities (gnat_node);
! 
! 	  if (Nkind (Unit (gnat_node)) == N_Subprogram_Declaration
! 	      || Nkind (Unit (gnat_node)) == N_Generic_Package_Declaration
! 	      || Nkind (Unit (gnat_node)) == N_Generic_Subprogram_Declaration)
! 	    break;
! 	};
! 
!       process_decls (Declarations (Aux_Decls_Node (gnat_node)),
! 		     Empty, Empty, 1, 1);
! 
!       gnat_to_code (Unit (gnat_node));
! 
!       /* Process any pragmas following the unit.  */
!       if (Present (Pragmas_After (Aux_Decls_Node (gnat_node))))
! 	for (gnat_temp = First (Pragmas_After (Aux_Decls_Node (gnat_node)));
! 	     gnat_temp; gnat_temp = Next (gnat_temp))
! 	  gnat_to_code (gnat_temp);
! 
!       /* Put all the Actions into the elaboration routine if we already had
! 	 elaborations.  This will happen anyway if they are statements, but we
! 	 want to force declarations there too due to order-of-elaboration
! 	 issues.  Most should have Is_Statically_Allocated set.  If we
! 	 have had no elaborations, we have no order-of-elaboration issue and
! 	 don't want to create elaborations here.  */
!       if (Is_Non_Empty_List (Actions (Aux_Decls_Node (gnat_node))))
! 	for (gnat_temp = First (Actions (Aux_Decls_Node (gnat_node)));
! 	     Present (gnat_temp); gnat_temp = Next (gnat_temp))
! 	  {
! 	    if (pending_elaborations_p ())
! 	      add_pending_elaborations (NULL_TREE,
! 					make_transform_expr (gnat_temp));
! 	    else
! 	      gnat_to_code (gnat_temp);
! 	  }
! 
!       /* Generate elaboration code for this unit, if necessary, and
! 	 say whether we did or not.  */
!       Set_Has_No_Elaboration_Code
! 	(gnat_node,
! 	 build_unit_elab
! 	 (Defining_Entity (Unit (gnat_node)),
! 	  Nkind (Unit (gnat_node)) == N_Package_Body
! 	  || Nkind (Unit (gnat_node)) == N_Subprogram_Body,
! 	  get_pending_elaborations ()));
  
        break;
  
      case N_Subprogram_Body_Stub:
--- 3738,3750 ----
  
      case N_Compilation_Unit:
  
!       /* This is not called for the main unit, which is handled in function
! 	 gigi above.  */
!       start_stmt_group ();
!       gnat_pushlevel ();
  
+       Compilation_Unit_to_gnu (gnat_node);
+       gnu_result = alloc_stmt_list ();
        break;
  
      case N_Subprogram_Body_Stub:
*************** tree_transform (Node_Id gnat_node)
*** 3350,3360 ****
      case N_Protected_Body_Stub:
      case N_Task_Body_Stub:
        /* Simply process whatever unit is being inserted.  */
!       gnat_to_code (Unit (Library_Unit (gnat_node)));
        break;
  
      case N_Subunit:
!       gnat_to_code (Proper_Body (gnat_node));
        break;
  
      /***************************/
--- 3752,3762 ----
      case N_Protected_Body_Stub:
      case N_Task_Body_Stub:
        /* Simply process whatever unit is being inserted.  */
!       gnu_result = gnat_to_gnu (Unit (Library_Unit (gnat_node)));
        break;
  
      case N_Subunit:
!       gnu_result = gnat_to_gnu (Proper_Body (gnat_node));
        break;
  
      /***************************/
*************** tree_transform (Node_Id gnat_node)
*** 3362,3812 ****
      /***************************/
  
      case N_Handled_Sequence_Of_Statements:
  
!       /* The GCC exception handling mechanism can handle both ZCX and SJLJ
! 	 schemes and we have our own SJLJ mechanism. To call the GCC
! 	 mechanism, we first call expand_eh_region_start if there is at least
! 	 one handler associated with the region.  We then generate code for
! 	 the region and call expand_start_all_catch to announce that the
! 	 associated handlers are going to be generated.
! 
! 	 For each handler we call expand_start_catch, generate code for the
! 	 handler, and then call expand_end_catch.
! 
! 	 After all the handlers, we call expand_end_all_catch.
! 
! 	 Here we deal with the region level calls and the
! 	 N_Exception_Handler branch deals with the handler level calls
! 	 (start_catch/end_catch).
! 
! 	 ??? The region level calls down there have been specifically put in
! 	 place for a ZCX context and currently the order in which things are
! 	 emitted (region/handlers) is different from the SJLJ case. Instead of
! 	 putting other calls with different conditions at other places for the
! 	 SJLJ case, it seems cleaner to reorder things for the SJLJ case and
! 	 generalize the condition to make it not ZCX specific. */
! 
!       /* If there is an At_End procedure attached to this node, and the eh
! 	 mechanism is GNAT oriented (SJLJ or ZCX with front end tables), we
! 	 must have at least a corresponding At_End handler, unless the
! 	 No_Exception_Handlers restriction is set.  */
!       if (! type_annotate_only
! 	  && Exception_Mechanism != GCC_ZCX
! 	  && Present (At_End_Proc (gnat_node))
! 	  && ! Present (Exception_Handlers (gnat_node))
! 	  && ! No_Exception_Handlers_Set())
! 	gigi_abort (335);
! 
!       {
! 	/* Need a binding level that we can exit for this sequence if there is
! 	   at least one exception handler for this block (since each handler
! 	   needs an identified exit point) or there is an At_End procedure
! 	   attached to this node (in order to have an attachment point for a
! 	   GCC cleanup).  */
! 	bool exitable_binding_for_block
! 	  = (! type_annotate_only
! 	     && (Present (Exception_Handlers (gnat_node))
! 		 || Present (At_End_Proc (gnat_node))));
! 
! 	/* Make a binding level that we can exit if we need one.  */
! 	if (exitable_binding_for_block)
! 	  {
! 	    pushlevel (0);
! 	    expand_start_bindings (1);
! 	  }
! 
! 	/* If we are to call a function when exiting this block, expand a GCC
! 	   cleanup to take care. We have made a binding level for this cleanup
! 	   above.  */
! 	if (Present (At_End_Proc (gnat_node)))
! 	  {
! 	    tree gnu_cleanup_call
! 	      = build_call_0_expr (gnat_to_gnu (At_End_Proc (gnat_node)));
! 
! 	    tree gnu_cleanup_decl
! 	      = create_var_decl (get_identifier ("CLEANUP"), NULL_TREE,
! 				 integer_type_node, NULL_TREE, 0, 0, 0, 0,
! 				 0);
! 
! 	    expand_decl_cleanup (gnu_cleanup_decl, gnu_cleanup_call);
! 	  }
! 
! 	/* Now we generate the code for this block, with a different layout
! 	   for GNAT SJLJ and for GCC or front end ZCX. The handlers come first
! 	   in the GNAT SJLJ case, while they come after the handled sequence
! 	   in the other cases.  */
! 
! 	/* First deal with possible handlers for the GNAT SJLJ scheme.  */
! 	if (! type_annotate_only
! 	    && Exception_Mechanism == Setjmp_Longjmp
! 	    && Present (Exception_Handlers (gnat_node)))
! 	  {
! 	    /* We already have a fresh binding level at hand. Declare a
!   	       variable to save the old __gnat_jmpbuf value and a variable for
!   	       our jmpbuf.  Call setjmp and handle each of the possible
!   	       exceptions if it returns one. */
! 
! 	    tree gnu_jmpsave_decl
! 	      = create_var_decl (get_identifier ("JMPBUF_SAVE"), NULL_TREE,
! 				 jmpbuf_ptr_type,
! 				 build_call_0_expr (get_jmpbuf_decl),
! 				 0, 0, 0, 0, 0);
! 
! 	    tree gnu_jmpbuf_decl
! 	      = create_var_decl (get_identifier ("JMP_BUF"),
! 				 NULL_TREE, jmpbuf_type,
! 				 NULL_TREE, 0, 0, 0, 0,
! 				 0);
! 
! 	    TREE_VALUE (gnu_block_stack) = gnu_jmpbuf_decl;
! 
! 	    /* When we exit this block, restore the saved value.  */
! 	    expand_decl_cleanup (gnu_jmpsave_decl,
! 				 build_call_1_expr (set_jmpbuf_decl,
! 						    gnu_jmpsave_decl));
! 
! 	    /* Call setjmp and handle exceptions if it returns one.  */
! 	    set_lineno (gnat_node, 1);
! 	    expand_start_cond
! 	      (build_call_1_expr (setjmp_decl,
! 				  build_unary_op (ADDR_EXPR, NULL_TREE,
! 						  gnu_jmpbuf_decl)),
! 	       0);
! 
! 	    /* Restore our incoming longjmp value before we do anything.  */
! 	    expand_expr_stmt
! 	      (build_call_1_expr (set_jmpbuf_decl, gnu_jmpsave_decl));
! 
! 	    /* Make a binding level for the exception handling declarations
! 	       and code. Don't assign it an exit label, since this is the
! 	       outer block we want to exit at the end of each handler.  */
! 	    pushlevel (0);
! 	    expand_start_bindings (0);
! 
! 	    gnu_except_ptr_stack
! 	      = tree_cons (NULL_TREE,
! 			   create_var_decl
! 			   (get_identifier ("EXCEPT_PTR"), NULL_TREE,
! 			    build_pointer_type (except_type_node),
! 			    build_call_0_expr (get_excptr_decl),
! 			    0, 0, 0, 0, 0),
! 			   gnu_except_ptr_stack);
! 
! 	    /* Generate code for each handler. The N_Exception_Handler case
! 	       below does the real work. We ignore the dummy exception handler
! 	       for the identifier case, as this is used only by the front
! 	       end.  */
! 	    for (gnat_temp = First_Non_Pragma (Exception_Handlers (gnat_node));
! 		 Present (gnat_temp);
! 		 gnat_temp = Next_Non_Pragma (gnat_temp))
! 	      gnat_to_code (gnat_temp);
! 
! 	    /* If none of the exception handlers did anything, re-raise
! 	       but do not defer abortion.  */
! 	    set_lineno (gnat_node, 1);
! 	    expand_expr_stmt
! 	      (build_call_1_expr (raise_nodefer_decl,
! 				  TREE_VALUE (gnu_except_ptr_stack)));
! 
! 	    gnu_except_ptr_stack = TREE_CHAIN (gnu_except_ptr_stack);
! 
! 	    /* End the binding level dedicated to the exception handlers.  */
! 	    expand_end_bindings (getdecls (), kept_level_p (), -1);
! 	    poplevel (kept_level_p (), 1, 0);
! 
! 	    /* End the "if" on setjmp.  Note that we have arranged things so
! 	       control never returns here.  */
! 	    expand_end_cond ();
! 
! 	    /* This is now immediately before the body proper. Set our jmp_buf
! 	       as the current buffer.  */
! 	    expand_expr_stmt
! 	      (build_call_1_expr (set_jmpbuf_decl,
! 				  build_unary_op (ADDR_EXPR, NULL_TREE,
! 						  gnu_jmpbuf_decl)));
! 	  }
! 
! 	/* Now comes the processing for the sequence body.  */
! 
! 	/* If we use the back-end eh support, tell the back-end we are
! 	   starting a new exception region.  */
! 	if (! type_annotate_only
! 	    && Exception_Mechanism == GCC_ZCX
! 	    && Present (Exception_Handlers (gnat_node)))
! 	  expand_eh_region_start ();
! 
! 	/* Generate code and declarations for the prefix of this block,
! 	   if any.  */
! 	if (Present (First_Real_Statement (gnat_node)))
! 	  process_decls (Statements (gnat_node), Empty,
! 			 First_Real_Statement (gnat_node), 1, 1);
! 
! 	/* Generate code for each statement in the block.  */
! 	for (gnat_temp = (Present (First_Real_Statement (gnat_node))
! 			  ? First_Real_Statement (gnat_node)
! 			  : First (Statements (gnat_node)));
! 	     Present (gnat_temp);
! 	     gnat_temp = Next (gnat_temp))
! 	  gnat_to_code (gnat_temp);
! 
! 	/* Exit the binding level we made, if any.  */
! 	if (exitable_binding_for_block)
! 	  expand_exit_something ();
! 
! 	/* Compile the handlers for front end ZCX or back-end supported
! 	   exceptions.  */
! 	if (! type_annotate_only
! 	    && Exception_Mechanism != Setjmp_Longjmp
! 	    && Present (Exception_Handlers (gnat_node)))
! 	  {
! 	    if (Exception_Mechanism == GCC_ZCX)
! 	      expand_start_all_catch ();
! 
! 	    for (gnat_temp = First_Non_Pragma (Exception_Handlers (gnat_node));
! 		 Present (gnat_temp);
! 		 gnat_temp = Next_Non_Pragma (gnat_temp))
! 	      gnat_to_code (gnat_temp);
! 
! 	    if (Exception_Mechanism == GCC_ZCX)
! 	      expand_end_all_catch ();
! 	  }
! 
! 	/* Close the binding level we made, if any.  */
! 	if (exitable_binding_for_block)
! 	  {
! 	    expand_end_bindings (getdecls (), kept_level_p (), -1);
! 	    poplevel (kept_level_p (), 1, 0);
! 	  }
!       }
! 
        break;
  
      case N_Exception_Handler:
        if (Exception_Mechanism == Setjmp_Longjmp)
! 	{
! 	  /* Unless this is "Others" or the special "Non-Ada" exception
! 	     for Ada, make an "if" statement to select the proper
! 	     exceptions.  For "Others", exclude exceptions where
! 	     Handled_By_Others is nonzero unless the All_Others flag is set.
! 	     For "Non-ada", accept an exception if "Lang" is 'V'.  */
! 	  tree gnu_choice = integer_zero_node;
! 
! 	  for (gnat_temp = First (Exception_Choices (gnat_node));
! 	       gnat_temp; gnat_temp = Next (gnat_temp))
! 	    {
! 	      tree this_choice;
! 
! 	      if (Nkind (gnat_temp) == N_Others_Choice)
! 		{
! 		  if (All_Others (gnat_temp))
! 		    this_choice = integer_one_node;
! 		  else
! 		    this_choice
! 		      = build_binary_op
! 			(EQ_EXPR, integer_type_node,
! 		       convert
! 		       (integer_type_node,
! 			build_component_ref
! 			(build_unary_op
! 			 (INDIRECT_REF, NULL_TREE,
! 			  TREE_VALUE (gnu_except_ptr_stack)),
! 			 get_identifier ("not_handled_by_others"), NULL_TREE,
! 			 0)),
! 			 integer_zero_node);
! 		}
! 
! 	      else if (Nkind (gnat_temp) == N_Identifier
! 		       || Nkind (gnat_temp) == N_Expanded_Name)
! 		{
!                   Entity_Id gnat_ex_id = Entity (gnat_temp);
! 
! 		  /* Exception may be a renaming. Recover original exception
! 		     which is the one elaborated and registered.  */
! 		  if (Present (Renamed_Object (gnat_ex_id)))
! 		    gnat_ex_id = Renamed_Object (gnat_ex_id);
! 
! 		  /* ??? Note that we have to use gnat_to_gnu_entity here
! 		     since the type of the exception will be wrong in the
! 		     VMS case and that's exactly what this test is for.  */
! 		  gnu_expr = gnat_to_gnu_entity (gnat_ex_id, NULL_TREE, 0);
! 
! 		  /* If this was a VMS exception, check import_code
! 		     against the value of the exception.  */
! 		  if (TREE_CODE (TREE_TYPE (gnu_expr)) == INTEGER_TYPE)
! 		    this_choice
! 		      = build_binary_op
! 			(EQ_EXPR, integer_type_node,
! 			 build_component_ref
! 			 (build_unary_op
! 			  (INDIRECT_REF, NULL_TREE,
! 			   TREE_VALUE (gnu_except_ptr_stack)),
! 			  get_identifier ("import_code"), NULL_TREE, 0),
! 			 gnu_expr);
! 		  else
! 		    this_choice
! 		      = build_binary_op
! 			(EQ_EXPR, integer_type_node,
! 			 TREE_VALUE (gnu_except_ptr_stack),
! 			 convert
! 			 (TREE_TYPE (TREE_VALUE (gnu_except_ptr_stack)),
! 			  build_unary_op (ADDR_EXPR, NULL_TREE, gnu_expr)));
! 
! 		  /* If this is the distinguished exception "Non_Ada_Error"
! 		     (and we are in VMS mode), also allow a non-Ada
! 		     exception (a VMS condition) to match.  */
! 		  if (Is_Non_Ada_Error (Entity (gnat_temp)))
! 		    {
! 		      tree gnu_comp
! 			= build_component_ref
! 			  (build_unary_op
! 			   (INDIRECT_REF, NULL_TREE,
! 			    TREE_VALUE (gnu_except_ptr_stack)),
! 			   get_identifier ("lang"), NULL_TREE, 0);
! 
! 		      this_choice
! 			= build_binary_op
! 			(TRUTH_ORIF_EXPR, integer_type_node,
! 			 build_binary_op
! 			 (EQ_EXPR, integer_type_node, gnu_comp,
! 			  convert (TREE_TYPE (gnu_comp),
! 				   build_int_2 ('V', 0))),
! 			 this_choice);
! 		    }
! 		}
! 	      else
! 		gigi_abort (318);
! 
! 	      gnu_choice = build_binary_op (TRUTH_ORIF_EXPR, integer_type_node,
! 					    gnu_choice, this_choice);
! 	    }
! 
! 	  set_lineno (gnat_node, 1);
! 
! 	  expand_start_cond (gnu_choice, 0);
! 	}
! 
!       /* Tell the back end that we start an exception handler if necessary.  */
!       if (Exception_Mechanism == GCC_ZCX)
! 	{
! 	  /* We build a TREE_LIST of nodes representing what exception
! 	     types this handler is able to catch, with special cases
! 	     for others and all others cases.
! 
! 	     Each exception type is actually identified by a pointer to the
! 	     exception id, with special value zero for "others" and one for
! 	     "all others". Beware that these special values are known and used
! 	     by the personality routine to identify the corresponding specific
! 	     kinds of handlers.
! 
! 	     ??? For initial time frame reasons, the others and all_others
! 	     cases have been handled using specific type trees, but this
! 	     somehow hides information to the back-end, which expects NULL to
! 	     be passed for catch all and end_cleanup to be used for cleanups.
! 
! 	     Care should be taken to ensure that the control flow impact of
! 	     such clauses is rendered in some way. lang_eh_type_covers is
! 	     doing the trick currently.  */
! 
! 	  tree gnu_expr, gnu_etype;
!  	  tree gnu_etypes_list = NULL_TREE;
! 
!  	  for (gnat_temp = First (Exception_Choices (gnat_node));
!  	       gnat_temp; gnat_temp = Next (gnat_temp))
!  	    {
!  	      if (Nkind (gnat_temp) == N_Others_Choice)
! 		gnu_etype
! 		  = All_Others (gnat_temp) ? integer_one_node
! 		    : integer_zero_node;
!  	      else if (Nkind (gnat_temp) == N_Identifier
!  		       || Nkind (gnat_temp) == N_Expanded_Name)
!  		{
!                   Entity_Id gnat_ex_id = Entity (gnat_temp);
! 
! 		  /* Exception may be a renaming. Recover original exception
! 		     which is the one elaborated and registered.  */
! 		  if (Present (Renamed_Object (gnat_ex_id)))
! 		    gnat_ex_id = Renamed_Object (gnat_ex_id);
! 
!  		  gnu_expr = gnat_to_gnu_entity (gnat_ex_id, NULL_TREE, 0);
! 
!  		  gnu_etype
! 		    = build_unary_op (ADDR_EXPR, NULL_TREE, gnu_expr);
!  		}
!  	      else
!  		gigi_abort (337);
! 
! 	      /* The GCC interface expects NULL to be passed for catch all
! 		 handlers, so it would be quite tempting to set gnu_etypes_list
! 		 to NULL if gnu_etype is integer_zero_node.  It would not work,
! 		 however, because GCC's notion of "catch all" is stronger than
! 		 our notion of "others".  Until we correctly use the cleanup
! 		 interface as well, the doing tht would prevent the "all
! 		 others" handlers from beeing seen, because nothing can be
! 		 caught beyond a catch all from GCC's point of view.  */
!  	      gnu_etypes_list
! 		= tree_cons (NULL_TREE, gnu_etype, gnu_etypes_list);
! 
!  	    }
! 
! 	  expand_start_catch (gnu_etypes_list);
! 
! 	  pushlevel (0);
! 	  expand_start_bindings (0);
! 
! 	  {
! 	    /* Expand a call to the begin_handler hook at the beginning of the
! 	       handler, and arrange for a call to the end_handler hook to
! 	       occur on every possible exit path.
! 
! 	       The hooks expect a pointer to the low level occurrence. This
! 	       is required for our stack management scheme because a raise
! 	       inside the handler pushes a new occurrence on top of the
! 	       stack, which means that this top does not necessarily match
! 	       the occurrence this handler was dealing with.
! 
! 	       The EXC_PTR_EXPR object references the exception occurrence
! 	       beeing propagated. Upon handler entry, this is the exception
! 	       for which the handler is triggered. This might not be the case
! 	       upon handler exit, however, as we might have a new occurrence
! 	       propagated by the handler's body, and the end_handler hook
! 	       called as a cleanup in this context.
! 
! 	       We use a local variable to retrieve the incoming value at
! 	       handler entry time, and reuse it to feed the end_handler
! 	       hook's argument at exit time.  */
! 	    tree gnu_current_exc_ptr
! 	      = build (EXC_PTR_EXPR, ptr_type_node);
! 	    tree gnu_incoming_exc_ptr
! 	      = create_var_decl (get_identifier ("EXPTR"), NULL_TREE,
! 				 ptr_type_node, gnu_current_exc_ptr,
! 				 0, 0, 0, 0, 0);
! 
! 	    expand_expr_stmt
! 	      (build_call_1_expr (begin_handler_decl, gnu_incoming_exc_ptr));
! 	    expand_decl_cleanup
! 	      (0, build_call_1_expr (end_handler_decl, gnu_incoming_exc_ptr));
! 	  }
! 	}
! 
!       for (gnat_temp = First (Statements (gnat_node));
! 	   gnat_temp; gnat_temp = Next (gnat_temp))
! 	gnat_to_code (gnat_temp);
! 
!       if (Exception_Mechanism == GCC_ZCX)
! 	{
! 	  /* Tell the back end that we're done with the current handler.  */
! 	  expand_end_bindings (getdecls (), kept_level_p (), -1);
! 	  poplevel (kept_level_p (), 1, 0);
! 
! 	  expand_end_catch ();
! 	}
        else
! 	/* At the end of the handler, exit the block. We made this block in
! 	   N_Handled_Sequence_Of_Statements.  */
! 	expand_exit_something ();
! 
!       if (Exception_Mechanism == Setjmp_Longjmp)
! 	expand_end_cond ();
  
        break;
  
--- 3764,3788 ----
      /***************************/
  
      case N_Handled_Sequence_Of_Statements:
+       /* If there is an At_End procedure attached to this node, and the EH
+ 	 mechanism is SJLJ, we must have at least a corresponding At_End
+ 	 handler, unless the No_Exception_Handlers restriction is set.  */
+       gcc_assert (type_annotate_only
+ 		  || Exception_Mechanism != Setjmp_Longjmp
+ 		  || No (At_End_Proc (gnat_node))
+ 		  || Present (Exception_Handlers (gnat_node))
+ 		  || No_Exception_Handlers_Set ());
  
!       gnu_result = Handled_Sequence_Of_Statements_to_gnu (gnat_node);
        break;
  
      case N_Exception_Handler:
        if (Exception_Mechanism == Setjmp_Longjmp)
! 	gnu_result = Exception_Handler_to_gnu_sjlj (gnat_node);
!       else if (Exception_Mechanism == GCC_ZCX)
! 	gnu_result = Exception_Handler_to_gnu_zcx (gnat_node);
        else
! 	gcc_unreachable ();
  
        break;
  
*************** tree_transform (Node_Id gnat_node)
*** 3824,3829 ****
--- 3800,3806 ----
      case N_Function_Instantiation:
        /* These nodes can appear on a declaration list but there is nothing to
  	 to be done with them.  */
+       gnu_result = alloc_stmt_list ();
        break;
  
      /***************************************************/
*************** tree_transform (Node_Id gnat_node)
*** 3833,3838 ****
--- 3810,3817 ----
  
      case N_Attribute_Definition_Clause:
  
+       gnu_result = alloc_stmt_list ();
+ 
        /* The only one we need deal with is for 'Address.  For the others, SEM
  	 puts the information elsewhere.  We need only deal with 'Address
  	 if the object has a Freeze_Node (which it never will currently).  */
*************** tree_transform (Node_Id gnat_node)
*** 3843,3864 ****
        /* Get the value to use as the address and save it as the
  	 equivalent for GNAT_TEMP.  When the object is frozen,
  	 gnat_to_gnu_entity will do the right thing. */
!       gnu_expr = gnat_to_gnu (Expression (gnat_node));
!       save_gnu_tree (Entity (Name (gnat_node)), gnu_expr, 1);
        break;
  
      case N_Enumeration_Representation_Clause:
      case N_Record_Representation_Clause:
      case N_At_Clause:
        /* We do nothing with these.  SEM puts the information elsewhere.  */
        break;
  
      case N_Code_Statement:
!       if (! type_annotate_only)
  	{
  	  tree gnu_template = gnat_to_gnu (Asm_Template (gnat_node));
! 	  tree gnu_input_list = 0, gnu_output_list = 0, gnu_orig_out_list = 0;
! 	  tree gnu_clobber_list = 0;
  	  char *clobber;
  
  	  /* First process inputs, then outputs, then clobbers.  */
--- 3822,3844 ----
        /* Get the value to use as the address and save it as the
  	 equivalent for GNAT_TEMP.  When the object is frozen,
  	 gnat_to_gnu_entity will do the right thing. */
!       save_gnu_tree (Entity (Name (gnat_node)),
! 		     gnat_to_gnu (Expression (gnat_node)), true);
        break;
  
      case N_Enumeration_Representation_Clause:
      case N_Record_Representation_Clause:
      case N_At_Clause:
        /* We do nothing with these.  SEM puts the information elsewhere.  */
+       gnu_result = alloc_stmt_list ();
        break;
  
      case N_Code_Statement:
!       if (!type_annotate_only)
  	{
  	  tree gnu_template = gnat_to_gnu (Asm_Template (gnat_node));
! 	  tree gnu_input_list = NULL_TREE, gnu_output_list = NULL_TREE;
! 	  tree gnu_clobber_list = NULL_TREE;
  	  char *clobber;
  
  	  /* First process inputs, then outputs, then clobbers.  */
*************** tree_transform (Node_Id gnat_node)
*** 3881,3895 ****
  	      tree gnu_constr = build_tree_list (NULL_TREE, gnat_to_gnu
  						 (Asm_Output_Constraint ()));
  
- 	      gnu_orig_out_list
- 		= tree_cons (gnu_constr, gnu_value, gnu_orig_out_list);
  	      gnu_output_list
  		= tree_cons (gnu_constr, gnu_value, gnu_output_list);
  	      Next_Asm_Output ();
  	    }
  
  	  Clobber_Setup (gnat_node);
! 	  while ((clobber = Clobber_Get_Next ()) != 0)
  	    gnu_clobber_list
  	      = tree_cons (NULL_TREE,
  			   build_string (strlen (clobber) + 1, clobber),
--- 3861,3873 ----
  	      tree gnu_constr = build_tree_list (NULL_TREE, gnat_to_gnu
  						 (Asm_Output_Constraint ()));
  
  	      gnu_output_list
  		= tree_cons (gnu_constr, gnu_value, gnu_output_list);
  	      Next_Asm_Output ();
  	    }
  
  	  Clobber_Setup (gnat_node);
! 	  while ((clobber = Clobber_Get_Next ()))
  	    gnu_clobber_list
  	      = tree_cons (NULL_TREE,
  			   build_string (strlen (clobber) + 1, clobber),
*************** tree_transform (Node_Id gnat_node)
*** 3897,3920 ****
  
  	  gnu_input_list = nreverse (gnu_input_list);
  	  gnu_output_list = nreverse (gnu_output_list);
! 	  gnu_orig_out_list = nreverse (gnu_orig_out_list);
! 	  expand_asm_operands (gnu_template, gnu_output_list, gnu_input_list,
! 			       gnu_clobber_list, Is_Asm_Volatile (gnat_node),
! 			       input_location);
! 
! 	  /* Copy all the intermediate outputs into the specified outputs.  */
! 	  for (; gnu_output_list;
! 	       (gnu_output_list = TREE_CHAIN (gnu_output_list),
! 		gnu_orig_out_list = TREE_CHAIN (gnu_orig_out_list)))
! 	    if (TREE_VALUE (gnu_orig_out_list) != TREE_VALUE (gnu_output_list))
! 	      {
! 		expand_expr_stmt
! 		  (build_binary_op (MODIFY_EXPR, NULL_TREE,
! 				    TREE_VALUE (gnu_orig_out_list),
! 				    TREE_VALUE (gnu_output_list)));
! 		free_temp_slots ();
! 	      }
  	}
        break;
  
      /***************************************************/
--- 3875,3888 ----
  
  	  gnu_input_list = nreverse (gnu_input_list);
  	  gnu_output_list = nreverse (gnu_output_list);
! 	  gnu_result = build4 (ASM_EXPR,  void_type_node,
! 			       gnu_template, gnu_output_list,
! 			       gnu_input_list, gnu_clobber_list);
! 	  ASM_VOLATILE_P (gnu_result) = Is_Asm_Volatile (gnat_node);
  	}
+       else
+ 	gnu_result = alloc_stmt_list ();
+ 
        break;
  
      /***************************************************/
*************** tree_transform (Node_Id gnat_node)
*** 3922,3938 ****
      /***************************************************/
  
      case N_Freeze_Entity:
        process_freeze_entity (gnat_node);
!       process_decls (Actions (gnat_node), Empty, Empty, 1, 1);
        break;
  
      case N_Itype_Reference:
!       if (! present_gnu_tree (Itype (gnat_node)))
  	process_type (Itype (gnat_node));
        break;
  
      case N_Free_Statement:
!       if (! type_annotate_only)
  	{
  	  tree gnu_ptr = gnat_to_gnu (Expression (gnat_node));
  	  tree gnu_obj_type;
--- 3890,3910 ----
      /***************************************************/
  
      case N_Freeze_Entity:
+       start_stmt_group ();
        process_freeze_entity (gnat_node);
!       process_decls (Actions (gnat_node), Empty, Empty, true, true);
!       gnu_result = end_stmt_group ();
        break;
  
      case N_Itype_Reference:
!       if (!present_gnu_tree (Itype (gnat_node)))
  	process_type (Itype (gnat_node));
+ 
+       gnu_result = alloc_stmt_list ();
        break;
  
      case N_Free_Statement:
!       if (!type_annotate_only)
  	{
  	  tree gnu_ptr = gnat_to_gnu (Expression (gnat_node));
  	  tree gnu_obj_type;
*************** tree_transform (Node_Id gnat_node)
*** 3977,3996 ****
  					 gnu_ptr, gnu_byte_offset);
  	    }
  
! 	  set_lineno (gnat_node, 1);
! 	  expand_expr_stmt
! 	    (build_call_alloc_dealloc (gnu_ptr, gnu_obj_size, align,
! 				       Procedure_To_Call (gnat_node),
! 				       Storage_Pool (gnat_node), gnat_node));
  	}
        break;
  
      case N_Raise_Constraint_Error:
      case N_Raise_Program_Error:
      case N_Raise_Storage_Error:
- 
        if (type_annotate_only)
! 	break;
  
        gnu_result_type = get_unpadded_type (Etype (gnat_node));
        gnu_result = build_call_raise (UI_To_Int (Reason (gnat_node)));
--- 3949,3969 ----
  					 gnu_ptr, gnu_byte_offset);
  	    }
  
! 	  gnu_result = build_call_alloc_dealloc (gnu_ptr, gnu_obj_size, align,
! 						 Procedure_To_Call (gnat_node),
! 						 Storage_Pool (gnat_node),
! 						 gnat_node);
  	}
        break;
  
      case N_Raise_Constraint_Error:
      case N_Raise_Program_Error:
      case N_Raise_Storage_Error:
        if (type_annotate_only)
! 	{
! 	  gnu_result = alloc_stmt_list ();
! 	  break;
! 	}
  
        gnu_result_type = get_unpadded_type (Etype (gnat_node));
        gnu_result = build_call_raise (UI_To_Int (Reason (gnat_node)));
*************** tree_transform (Node_Id gnat_node)
*** 4000,4022 ****
  	 is one.  */
        if (TREE_CODE (gnu_result_type) == VOID_TYPE)
  	{
! 	  set_lineno (gnat_node, 1);
! 
! 	  if (Present (Condition (gnat_node)))
! 	    expand_start_cond (gnat_to_gnu (Condition (gnat_node)), 0);
  
- 	  expand_expr_stmt (gnu_result);
  	  if (Present (Condition (gnat_node)))
! 	    expand_end_cond ();
! 	  gnu_result = error_mark_node;
  	}
        else
  	gnu_result = build1 (NULL_EXPR, gnu_result_type, gnu_result);
        break;
  
-     /* Nothing to do, since front end does all validation using the
-        values that Gigi back-annotates.  */
      case N_Validate_Unchecked_Conversion:
        break;
  
      case N_Raise_Statement:
--- 3973,4019 ----
  	 is one.  */
        if (TREE_CODE (gnu_result_type) == VOID_TYPE)
  	{
! 	  annotate_with_node (gnu_result, gnat_node);
  
  	  if (Present (Condition (gnat_node)))
! 	    gnu_result = build3 (COND_EXPR, void_type_node,
! 				 gnat_to_gnu (Condition (gnat_node)),
! 				 gnu_result, alloc_stmt_list ());
  	}
        else
  	gnu_result = build1 (NULL_EXPR, gnu_result_type, gnu_result);
        break;
  
      case N_Validate_Unchecked_Conversion:
+       /* If the result is a pointer type, see if we are either converting
+          from a non-pointer or from a pointer to a type with a different
+  	 alias set and warn if so.  If the result defined in the same unit as
+  	 this unchecked convertion, we can allow this because we can know to
+  	 make that type have alias set 0.  */
+       {
+  	tree gnu_source_type = gnat_to_gnu_type (Source_Type (gnat_node));
+  	tree gnu_target_type = gnat_to_gnu_type (Target_Type (gnat_node));
+ 
+  	if (POINTER_TYPE_P (gnu_target_type)
+  	    && !In_Same_Source_Unit (Target_Type (gnat_node), gnat_node)
+             && get_alias_set (TREE_TYPE (gnu_target_type)) != 0
+             && !No_Strict_Aliasing (Underlying_Type (Target_Type (gnat_node)))
+  	    && (!POINTER_TYPE_P (gnu_source_type)
+  		|| (get_alias_set (TREE_TYPE (gnu_source_type))
+  		    != get_alias_set (TREE_TYPE (gnu_target_type)))))
+  	  {
+             post_error_ne
+               ("?possible aliasing problem for type&",
+                gnat_node, Target_Type (gnat_node));
+ 	    post_error
+               ("\\?use -fno-strict-aliasing switch for references",
+                gnat_node);
+ 	    post_error_ne
+               ("\\?or use `pragma No_Strict_Aliasing (&);`",
+                gnat_node, Target_Type (gnat_node));
+ 	  }
+       }
+       gnu_result = alloc_stmt_list ();
        break;
  
      case N_Raise_Statement:
*************** tree_transform (Node_Id gnat_node)
*** 4026,4044 ****
      case N_Component_Association:
      case N_Task_Body:
      default:
!       if (! type_annotate_only)
! 	gigi_abort (321);
      }
  
!   /* If the result is a statement, set needed flags and return it.  */
!   if (IS_STMT (gnu_result))
      {
!       TREE_TYPE (gnu_result) = void_type_node;
!       TREE_THIS_VOLATILE (gnu_result) = TREE_SIDE_EFFECTS (gnu_result) = 1;
!       TREE_SLOC (gnu_result) = Sloc (gnat_node);
!       return gnu_result;
      }
  
    /* If the result is a constant that overflows, raise constraint error.  */
    else if (TREE_CODE (gnu_result) == INTEGER_CST
        && TREE_CONSTANT_OVERFLOW (gnu_result))
--- 4023,4052 ----
      case N_Component_Association:
      case N_Task_Body:
      default:
!       gcc_assert (type_annotate_only);
!       gnu_result = alloc_stmt_list ();
      }
  
!   /* If we pushed our level as part of processing the elaboration routine,
!      pop it back now.  */
!   if (went_into_elab_proc)
      {
!       add_stmt (gnu_result);
!       gnat_poplevel ();
!       gnu_result = end_stmt_group ();
!       current_function_decl = NULL_TREE;
      }
  
+   /* Set the location information into the result.  Note that we may have
+      no result if we just expanded a procedure with no side-effects.  */
+   if (gnu_result && EXPR_P (gnu_result))
+     annotate_with_node (gnu_result, gnat_node);
+ 
+   /* If we're supposed to return something of void_type, it means we have
+      something we're elaborating for effect, so just return.  */
+   if (TREE_CODE (gnu_result_type) == VOID_TYPE)
+     return gnu_result;
+ 
    /* If the result is a constant that overflows, raise constraint error.  */
    else if (TREE_CODE (gnu_result) == INTEGER_CST
        && TREE_CONSTANT_OVERFLOW (gnu_result))
*************** tree_transform (Node_Id gnat_node)
*** 4085,4106 ****
  	  || (Nkind (Parent (gnat_node)) == N_Procedure_Call_Statement
  	      && Name (Parent (gnat_node)) != gnat_node)
  	  || (Nkind (Parent (gnat_node)) == N_Unchecked_Type_Conversion
! 	      && ! AGGREGATE_TYPE_P (gnu_result_type)
! 	      && ! AGGREGATE_TYPE_P (TREE_TYPE (gnu_result)))
  	  || Nkind (Parent (gnat_node)) == N_Parameter_Association)
!       && ! (TYPE_SIZE (gnu_result_type) != 0
! 	    && TYPE_SIZE (TREE_TYPE (gnu_result)) != 0
! 	    && (AGGREGATE_TYPE_P (gnu_result_type)
! 		== AGGREGATE_TYPE_P (TREE_TYPE (gnu_result)))
! 	    && ((TREE_CODE (TYPE_SIZE (gnu_result_type)) == INTEGER_CST
! 		 && (TREE_CODE (TYPE_SIZE (TREE_TYPE (gnu_result)))
! 		     != INTEGER_CST))
! 		|| (TREE_CODE (TYPE_SIZE (gnu_result_type)) != INTEGER_CST
! 		    && ! CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_result_type))
! 		    && (CONTAINS_PLACEHOLDER_P
! 			(TYPE_SIZE (TREE_TYPE (gnu_result))))))
! 	    && ! (TREE_CODE (gnu_result_type) == RECORD_TYPE
! 		  && TYPE_LEFT_JUSTIFIED_MODULAR_P (gnu_result_type))))
      {
        /* In this case remove padding only if the inner object is of
  	 self-referential size: in that case it must be an object of
--- 4093,4114 ----
  	  || (Nkind (Parent (gnat_node)) == N_Procedure_Call_Statement
  	      && Name (Parent (gnat_node)) != gnat_node)
  	  || (Nkind (Parent (gnat_node)) == N_Unchecked_Type_Conversion
! 	      && !AGGREGATE_TYPE_P (gnu_result_type)
! 	      && !AGGREGATE_TYPE_P (TREE_TYPE (gnu_result)))
  	  || Nkind (Parent (gnat_node)) == N_Parameter_Association)
!       && !(TYPE_SIZE (gnu_result_type)
! 	   && TYPE_SIZE (TREE_TYPE (gnu_result))
! 	   && (AGGREGATE_TYPE_P (gnu_result_type)
! 	       == AGGREGATE_TYPE_P (TREE_TYPE (gnu_result)))
! 	   && ((TREE_CODE (TYPE_SIZE (gnu_result_type)) == INTEGER_CST
! 		&& (TREE_CODE (TYPE_SIZE (TREE_TYPE (gnu_result)))
! 		    != INTEGER_CST))
! 	       || (TREE_CODE (TYPE_SIZE (gnu_result_type)) != INTEGER_CST
! 		   && !CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_result_type))
! 		   && (CONTAINS_PLACEHOLDER_P
! 		       (TYPE_SIZE (TREE_TYPE (gnu_result))))))
! 	   && !(TREE_CODE (gnu_result_type) == RECORD_TYPE
! 		&& TYPE_JUSTIFIED_MODULAR_P (gnu_result_type))))
      {
        /* In this case remove padding only if the inner object is of
  	 self-referential size: in that case it must be an object of
*************** tree_transform (Node_Id gnat_node)
*** 4118,4124 ****
    else if (TREE_CODE (gnu_result) == LABEL_DECL
  	   || TREE_CODE (gnu_result) == FIELD_DECL
  	   || TREE_CODE (gnu_result) == ERROR_MARK
! 	   || (TYPE_SIZE (gnu_result_type) != 0
  	       && TREE_CODE (TYPE_SIZE (gnu_result_type)) != INTEGER_CST
  	       && TREE_CODE (gnu_result) != INDIRECT_REF
  	       && CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_result_type)))
--- 4126,4132 ----
    else if (TREE_CODE (gnu_result) == LABEL_DECL
  	   || TREE_CODE (gnu_result) == FIELD_DECL
  	   || TREE_CODE (gnu_result) == ERROR_MARK
! 	   || (TYPE_SIZE (gnu_result_type)
  	       && TREE_CODE (TYPE_SIZE (gnu_result_type)) != INTEGER_CST
  	       && TREE_CODE (gnu_result) != INDIRECT_REF
  	       && CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_result_type)))
*************** tree_transform (Node_Id gnat_node)
*** 4152,4172 ****
    return gnu_result;
  }
  
  /* GNU_STMT is a statement.  We generate code for that statement.  */
  
  void
  gnat_expand_stmt (tree gnu_stmt)
  {
!   set_lineno_from_sloc (TREE_SLOC (gnu_stmt), 1);
  
    switch (TREE_CODE (gnu_stmt))
      {
!     case EXPR_STMT:
!       expand_expr_stmt (EXPR_STMT_EXPR (gnu_stmt));
!       break;
  
      default:
!       abort ();
      }
  }
  
--- 4160,4627 ----
    return gnu_result;
  }
  
+ /* Record the current code position in GNAT_NODE.  */
+ 
+ static void
+ record_code_position (Node_Id gnat_node)
+ {
+   tree stmt_stmt = build1 (STMT_STMT, void_type_node, NULL_TREE);
+ 
+   add_stmt_with_node (stmt_stmt, gnat_node);
+   save_gnu_tree (gnat_node, stmt_stmt, true);
+ }
+ 
+ /* Insert the code for GNAT_NODE at the position saved for that node.  */
+ 
+ static void
+ insert_code_for (Node_Id gnat_node)
+ {
+   STMT_STMT_STMT (get_gnu_tree (gnat_node)) = gnat_to_gnu (gnat_node);
+   save_gnu_tree (gnat_node, NULL_TREE, true);
+ }
+ 
+ /* Start a new statement group chained to the previous group.  */
+ 
+ static void
+ start_stmt_group ()
+ {
+   struct stmt_group *group = stmt_group_free_list;
+ 
+   /* First see if we can get one from the free list.  */
+   if (group)
+     stmt_group_free_list = group->previous;
+   else
+     group = (struct stmt_group *) ggc_alloc (sizeof (struct stmt_group));
+ 
+   group->previous = current_stmt_group;
+   group->stmt_list = group->block = group->cleanups = NULL_TREE;
+   current_stmt_group = group;
+ }
+ 
+ /* Add GNU_STMT to the current statement group.  */
+ 
+ void
+ add_stmt (tree gnu_stmt)
+ {
+   append_to_statement_list (gnu_stmt, &current_stmt_group->stmt_list);
+ 
+   /* If we're at top level, show everything in here is in use in case
+      any of it is shared by a subprogram.  */
+   if (global_bindings_p ())
+     walk_tree (&gnu_stmt, mark_visited, NULL, NULL);
+ 
+ }
+ 
+ /* Similar, but set the location of GNU_STMT to that of GNAT_NODE.  */
+ 
+ void
+ add_stmt_with_node (tree gnu_stmt, Node_Id gnat_node)
+ {
+   if (Present (gnat_node))
+     annotate_with_node (gnu_stmt, gnat_node);
+   add_stmt (gnu_stmt);
+ }
+ 
+ /* Add a declaration statement for GNU_DECL to the current statement group.
+    Get SLOC from Entity_Id.  */
+ 
+ void
+ add_decl_expr (tree gnu_decl, Entity_Id gnat_entity)
+ {
+   tree gnu_stmt;
+ 
+   /* If this is a variable that Gigi is to ignore, we may have been given
+      an ERROR_MARK.  So test for it.  We also might have been given a
+      reference for a renaming.  So only do something for a decl.  Also
+      ignore a TYPE_DECL for an UNCONSTRAINED_ARRAY_TYPE.  */
+   if (!DECL_P (gnu_decl)
+       || (TREE_CODE (gnu_decl) == TYPE_DECL
+ 	  && TREE_CODE (TREE_TYPE (gnu_decl)) == UNCONSTRAINED_ARRAY_TYPE))
+     return;
+ 
+   /* If we are global, we don't want to actually output the DECL_EXPR for
+      this decl since we already have evaluated the expressions in the
+      sizes and positions as globals and doing it again would be wrong.
+      But we do have to mark everything as used.  */
+   gnu_stmt = build1 (DECL_EXPR, void_type_node, gnu_decl);
+   if (!global_bindings_p ())
+     add_stmt_with_node (gnu_stmt, gnat_entity);
+   else
+     {
+       walk_tree (&gnu_stmt, mark_visited, NULL, NULL);
+       if (TREE_CODE (gnu_decl) == VAR_DECL
+ 	  || TREE_CODE (gnu_decl) == CONST_DECL)
+ 	{
+ 	  walk_tree (&DECL_SIZE (gnu_decl), mark_visited, NULL, NULL);
+ 	  walk_tree (&DECL_SIZE_UNIT (gnu_decl), mark_visited, NULL, NULL);
+ 	  walk_tree (&DECL_INITIAL (gnu_decl), mark_visited, NULL, NULL);
+ 	}
+     }
+ 
+   /* If this is a DECL_EXPR for a variable with DECL_INITIAl set,
+      there are two cases we need to handle here.  */
+   if (TREE_CODE (gnu_decl) == VAR_DECL && DECL_INITIAL (gnu_decl))
+     {
+       tree gnu_init = DECL_INITIAL (gnu_decl);
+       tree gnu_lhs = NULL_TREE;
+ 
+       /* If this is a DECL_EXPR for a variable with DECL_INITIAL set
+ 	 and decl has a padded type, convert it to the unpadded type so the
+ 	 assignment is done properly.  */
+       if (TREE_CODE (TREE_TYPE (gnu_decl)) == RECORD_TYPE
+ 	  && TYPE_IS_PADDING_P (TREE_TYPE (gnu_decl)))
+ 	gnu_lhs
+ 	  = convert (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (gnu_decl))), gnu_decl);
+ 
+       /* Otherwise, if this is going into memory and the initializer isn't
+ 	 valid for the assembler and loader.  Gimplification could do this,
+ 	 but would be run too late if -fno-unit-at-a-time.  */
+       else if (TREE_STATIC (gnu_decl)
+ 	       && !initializer_constant_valid_p (gnu_init,
+ 						 TREE_TYPE (gnu_decl)))
+ 	gnu_lhs = gnu_decl;
+ 
+       if (gnu_lhs)
+ 	{
+ 	  tree gnu_assign_stmt
+ 	    = build_binary_op (MODIFY_EXPR, NULL_TREE,
+ 			       gnu_lhs, DECL_INITIAL (gnu_decl));
+ 
+ 	  DECL_INITIAL (gnu_decl) = 0;
+ 	  TREE_READONLY (gnu_decl) = 0;
+ 	  annotate_with_locus (gnu_assign_stmt,
+ 			       DECL_SOURCE_LOCATION (gnu_decl));
+ 	  add_stmt (gnu_assign_stmt);
+ 	}
+     }
+ }
+ 
+ /* Utility function to mark nodes with TREE_VISITED and types as having their
+    sized gimplified.  Called from walk_tree.  We use this to indicate all
+    variable sizes and positions in global types may not be shared by any
+    subprogram.  */
+ 
+ static tree
+ mark_visited (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
+ {
+   if (TREE_VISITED (*tp))
+     *walk_subtrees = 0;
+ 
+   /* Don't mark a dummy type as visited because we want to mark its sizes
+      and fields once it's filled in.  */
+   else if (!TYPE_IS_DUMMY_P (*tp))
+     TREE_VISITED (*tp) = 1;
+ 
+   if (TYPE_P (*tp))
+     TYPE_SIZES_GIMPLIFIED (*tp) = 1;
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Likewise, but to mark as unvisited.  */
+ 
+ static tree
+ mark_unvisited (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED,
+ 		void *data ATTRIBUTE_UNUSED)
+ {
+   TREE_VISITED (*tp) = 0;
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Add GNU_CLEANUP, a cleanup action, to the current code group.  */
+ 
+ static void
+ add_cleanup (tree gnu_cleanup)
+ {
+   append_to_statement_list (gnu_cleanup, &current_stmt_group->cleanups);
+ }
+ 
+ /* Set the BLOCK node corresponding to the current code group to GNU_BLOCK.  */
+ 
+ void
+ set_block_for_group (tree gnu_block)
+ {
+   gcc_assert (!current_stmt_group->block);
+   current_stmt_group->block = gnu_block;
+ }
+ 
+ /* Return code corresponding to the current code group.  It is normally
+    a STATEMENT_LIST, but may also be a BIND_EXPR or TRY_FINALLY_EXPR if
+    BLOCK or cleanups were set.  */
+ 
+ static tree
+ end_stmt_group ()
+ {
+   struct stmt_group *group = current_stmt_group;
+   tree gnu_retval = group->stmt_list;
+ 
+   /* If this is a null list, allocate a new STATEMENT_LIST.  Then, if there
+      are cleanups, make a TRY_FINALLY_EXPR.  Last, if there is a BLOCK,
+      make a BIND_EXPR.  Note that we nest in that because the cleanup may
+      reference variables in the block.  */
+   if (gnu_retval == NULL_TREE)
+     gnu_retval = alloc_stmt_list ();
+ 
+   if (group->cleanups)
+     gnu_retval = build2 (TRY_FINALLY_EXPR, void_type_node, gnu_retval,
+ 			 group->cleanups);
+ 
+   if (current_stmt_group->block)
+     gnu_retval = build3 (BIND_EXPR, void_type_node, BLOCK_VARS (group->block),
+ 			 gnu_retval, group->block);
+ 
+   /* Remove this group from the stack and add it to the free list.  */
+   current_stmt_group = group->previous;
+   group->previous = stmt_group_free_list;
+   stmt_group_free_list = group;
+ 
+   return gnu_retval;
+ }
+ 
+ /* Add a list of statements from GNAT_LIST, a possibly-empty list of
+    statements.*/
+ 
+ static void
+ add_stmt_list (List_Id gnat_list)
+ {
+   Node_Id gnat_node;
+ 
+   if (Present (gnat_list))
+     for (gnat_node = First (gnat_list); Present (gnat_node);
+ 	 gnat_node = Next (gnat_node))
+       add_stmt (gnat_to_gnu (gnat_node));
+ }
+ 
+ /* Build a tree from GNAT_LIST, a possibly-empty list of statements.
+    If BINDING_P is true, push and pop a binding level around the list.  */
+ 
+ static tree
+ build_stmt_group (List_Id gnat_list, bool binding_p)
+ {
+   start_stmt_group ();
+   if (binding_p)
+     gnat_pushlevel ();
+ 
+   add_stmt_list (gnat_list);
+   if (binding_p)
+     gnat_poplevel ();
+ 
+   return end_stmt_group ();
+ }
+ 
+ /* Push and pop routines for stacks.  We keep a free list around so we
+    don't waste tree nodes.  */
+ 
+ static void
+ push_stack (tree *gnu_stack_ptr, tree gnu_purpose, tree gnu_value)
+ {
+   tree gnu_node = gnu_stack_free_list;
+ 
+   if (gnu_node)
+     {
+       gnu_stack_free_list = TREE_CHAIN (gnu_node);
+       TREE_CHAIN (gnu_node) = *gnu_stack_ptr;
+       TREE_PURPOSE (gnu_node) = gnu_purpose;
+       TREE_VALUE (gnu_node) = gnu_value;
+     }
+   else
+     gnu_node = tree_cons (gnu_purpose, gnu_value, *gnu_stack_ptr);
+ 
+   *gnu_stack_ptr = gnu_node;
+ }
+ 
+ static void
+ pop_stack (tree *gnu_stack_ptr)
+ {
+   tree gnu_node = *gnu_stack_ptr;
+ 
+   *gnu_stack_ptr = TREE_CHAIN (gnu_node);
+   TREE_CHAIN (gnu_node) = gnu_stack_free_list;
+   gnu_stack_free_list = gnu_node;
+ }
+ 
  /* GNU_STMT is a statement.  We generate code for that statement.  */
  
  void
  gnat_expand_stmt (tree gnu_stmt)
  {
! #if 0
!   tree gnu_elmt, gnu_elmt_2;
! #endif
  
    switch (TREE_CODE (gnu_stmt))
      {
! #if 0
!     case USE_STMT:
!       /* First write a volatile ASM_INPUT to prevent anything from being
! 	 moved.  */
!       gnu_elmt = gen_rtx_ASM_INPUT (VOIDmode, "");
!       MEM_VOLATILE_P (gnu_elmt) = 1;
!       emit_insn (gnu_elmt);
! 
!       gnu_elmt = expand_expr (TREE_OPERAND (gnu_stmt, 0), NULL_RTX, VOIDmode,
! 			    modifier);
!       emit_insn (gen_rtx_USE (VOIDmode, ));
!       return target;
! #endif
  
      default:
!       gcc_unreachable ();
!     }
! }
! 
! /* Generate GIMPLE in place for the expression at *EXPR_P.  */
! 
! int
! gnat_gimplify_expr (tree *expr_p, tree *pre_p, tree *post_p ATTRIBUTE_UNUSED)
! {
!   tree expr = *expr_p;
! 
!   if (IS_ADA_STMT (expr))
!     return gnat_gimplify_stmt (expr_p);
! 
!   switch (TREE_CODE (expr))
!     {
!     case NULL_EXPR:
!       /* If this is for a scalar, just make a VAR_DECL for it.  If for
! 	 an aggregate, get a null pointer of the appropriate type and
! 	 dereference it.  */
!       if (AGGREGATE_TYPE_P (TREE_TYPE (expr)))
! 	*expr_p = build1 (INDIRECT_REF, TREE_TYPE (expr),
! 			  convert (build_pointer_type (TREE_TYPE (expr)),
! 				   integer_zero_node));
!       else
! 	{
! 	  *expr_p = create_tmp_var (TREE_TYPE (expr), NULL);
! 	  TREE_NO_WARNING (*expr_p) = 1;
! 	}
! 
!       append_to_statement_list (TREE_OPERAND (expr, 0), pre_p);
!       return GS_OK;
! 
!     case UNCONSTRAINED_ARRAY_REF:
!       /* We should only do this if we are just elaborating for side-effects,
! 	 but we can't know that yet.  */
!       *expr_p = TREE_OPERAND (*expr_p, 0);
!       return GS_OK;
! 
!     case ADDR_EXPR:
!       /* If we're taking the address of a constant CONSTRUCTOR, force it to
! 	 be put into static memory.  We know it's going to be readonly given
! 	 the semantics we have and it's required to be static memory in
! 	 the case when the reference is in an elaboration procedure.  */
!       if (TREE_CODE (TREE_OPERAND (expr, 0)) == CONSTRUCTOR
! 	  && TREE_CONSTANT (TREE_OPERAND (expr, 0)))
! 	{
! 	  tree new_var
! 	    = create_tmp_var (TREE_TYPE (TREE_OPERAND (expr, 0)), "C");
! 
! 	  TREE_READONLY (new_var) = 1;
! 	  TREE_STATIC (new_var) = 1;
! 	  TREE_ADDRESSABLE (new_var) = 1;
! 	  DECL_INITIAL (new_var) = TREE_OPERAND (expr, 0);
! 
! 	  TREE_OPERAND (expr, 0) = new_var;
! 	  return GS_ALL_DONE;
! 	}
!       return GS_UNHANDLED;
! 
!     case COMPONENT_REF:
!       /* We have a kludge here.  If the FIELD_DECL is from a fat pointer and is
! 	 from an early dummy type, replace it with the proper FIELD_DECL.  */
!       if (TYPE_FAT_POINTER_P (TREE_TYPE (TREE_OPERAND (*expr_p, 0)))
! 	  && DECL_ORIGINAL_FIELD (TREE_OPERAND (*expr_p, 1)))
! 	{
! 	  TREE_OPERAND (*expr_p, 1)
! 	    = DECL_ORIGINAL_FIELD (TREE_OPERAND (*expr_p, 1));
! 	  return GS_OK;
! 	}
! 
!       /* ... fall through ... */
! 
!     default:
!       return GS_UNHANDLED;
!     }
! }
! 
! /* Generate GIMPLE in place for the statement at *STMT_P.  */
! 
! static enum gimplify_status
! gnat_gimplify_stmt (tree *stmt_p)
! {
!   tree stmt = *stmt_p;
! 
!   switch (TREE_CODE (stmt))
!     {
!     case STMT_STMT:
!       *stmt_p = STMT_STMT_STMT (stmt);
!       return GS_OK;
! 
!     case USE_STMT:
!       *stmt_p = NULL_TREE;
!       return GS_ALL_DONE;
! 
!     case LOOP_STMT:
!       {
! 	tree gnu_start_label = create_artificial_label ();
! 	tree gnu_end_label = LOOP_STMT_LABEL (stmt);
! 
! 	/* Set to emit the statements of the loop.  */
! 	*stmt_p = NULL_TREE;
! 
! 	/* We first emit the start label and then a conditional jump to
! 	   the end label if there's a top condition, then the body of the
! 	   loop, then a conditional branch to the end label, then the update,
! 	   if any, and finally a jump to the start label and the definition
! 	   of the end label.  */
! 	append_to_statement_list (build1 (LABEL_EXPR, void_type_node,
! 					  gnu_start_label),
! 				  stmt_p);
! 
! 	if (LOOP_STMT_TOP_COND (stmt))
! 	  append_to_statement_list (build3 (COND_EXPR, void_type_node,
! 					    LOOP_STMT_TOP_COND (stmt),
! 					    alloc_stmt_list (),
! 					    build1 (GOTO_EXPR,
! 						    void_type_node,
! 						    gnu_end_label)),
! 				    stmt_p);
! 
! 	append_to_statement_list (LOOP_STMT_BODY (stmt), stmt_p);
! 
! 	if (LOOP_STMT_BOT_COND (stmt))
! 	  append_to_statement_list (build3 (COND_EXPR, void_type_node,
! 					    LOOP_STMT_BOT_COND (stmt),
! 					    alloc_stmt_list (),
! 					    build1 (GOTO_EXPR,
! 						    void_type_node,
! 						    gnu_end_label)),
! 				    stmt_p);
! 
! 	if (LOOP_STMT_UPDATE (stmt))
! 	  append_to_statement_list (LOOP_STMT_UPDATE (stmt), stmt_p);
! 
! 	append_to_statement_list (build1 (GOTO_EXPR, void_type_node,
! 					  gnu_start_label),
! 				  stmt_p);
! 	append_to_statement_list (build1 (LABEL_EXPR, void_type_node,
! 					  gnu_end_label),
! 				  stmt_p);
! 	return GS_OK;
!       }
! 
!     case EXIT_STMT:
!       /* Build a statement to jump to the corresponding end label, then
! 	 see if it needs to be conditional.  */
!       *stmt_p = build1 (GOTO_EXPR, void_type_node, EXIT_STMT_LABEL (stmt));
!       if (EXIT_STMT_COND (stmt))
! 	*stmt_p = build3 (COND_EXPR, void_type_node,
! 			  EXIT_STMT_COND (stmt), *stmt_p, alloc_stmt_list ());
!       return GS_OK;
! 
!     default:
!       gcc_unreachable ();
      }
  }
  
*************** elaborate_all_entities (Node_Id gnat_nod
*** 4200,4206 ****
       same generic unit repeatedly */
  
    if (!present_gnu_tree (gnat_node))
!      save_gnu_tree (gnat_node, integer_zero_node, 1);
  
    /* Save entities in all context units. A body may have an implicit_with
       on its own spec, if the context includes a child unit, so don't save
--- 4655,4661 ----
       same generic unit repeatedly */
  
    if (!present_gnu_tree (gnat_node))
!      save_gnu_tree (gnat_node, integer_zero_node, true);
  
    /* Save entities in all context units. A body may have an implicit_with
       on its own spec, if the context includes a child unit, so don't save
*************** elaborate_all_entities (Node_Id gnat_nod
*** 4210,4216 ****
         Present (gnat_with_clause);
         gnat_with_clause = Next (gnat_with_clause))
      if (Nkind (gnat_with_clause) == N_With_Clause
! 	&& ! present_gnu_tree (Library_Unit (gnat_with_clause))
          && Library_Unit (gnat_with_clause) != Library_Unit (Cunit (Main_Unit)))
        {
  	elaborate_all_entities (Library_Unit (gnat_with_clause));
--- 4665,4671 ----
         Present (gnat_with_clause);
         gnat_with_clause = Next (gnat_with_clause))
      if (Nkind (gnat_with_clause) == N_With_Clause
! 	&& !present_gnu_tree (Library_Unit (gnat_with_clause))
          && Library_Unit (gnat_with_clause) != Library_Unit (Cunit (Main_Unit)))
        {
  	elaborate_all_entities (Library_Unit (gnat_with_clause));
*************** elaborate_all_entities (Node_Id gnat_nod
*** 4225,4237 ****
  		  && Ekind (gnat_entity) != E_Package
  		  && Ekind (gnat_entity) != E_Package_Body
  		  && Ekind (gnat_entity) != E_Operator
! 		  && ! (IN (Ekind (gnat_entity), Type_Kind)
! 			&& ! Is_Frozen (gnat_entity))
! 		  && ! ((Ekind (gnat_entity) == E_Procedure
! 			 || Ekind (gnat_entity) == E_Function)
! 			&& Is_Intrinsic_Subprogram (gnat_entity))
! 		  && ! IN (Ekind (gnat_entity), Named_Kind)
! 		  && ! IN (Ekind (gnat_entity), Generic_Unit_Kind))
  		gnat_to_gnu_entity (gnat_entity, NULL_TREE, 0);
            }
          else if (Ekind (Entity (Name (gnat_with_clause))) == E_Generic_Package)
--- 4680,4692 ----
  		  && Ekind (gnat_entity) != E_Package
  		  && Ekind (gnat_entity) != E_Package_Body
  		  && Ekind (gnat_entity) != E_Operator
! 		  && !(IN (Ekind (gnat_entity), Type_Kind)
! 		       && !Is_Frozen (gnat_entity))
! 		  && !((Ekind (gnat_entity) == E_Procedure
! 			|| Ekind (gnat_entity) == E_Function)
! 		       && Is_Intrinsic_Subprogram (gnat_entity))
! 		  && !IN (Ekind (gnat_entity), Named_Kind)
! 		  && !IN (Ekind (gnat_entity), Generic_Unit_Kind))
  		gnat_to_gnu_entity (gnat_entity, NULL_TREE, 0);
            }
          else if (Ekind (Entity (Name (gnat_with_clause))) == E_Generic_Package)
*************** process_freeze_entity (Node_Id gnat_node
*** 4296,4302 ****
    /* Don't do anything for subprograms that may have been elaborated before
       their freeze nodes.  This can happen, for example because of an inner call
       in an instance body.  */
!   if (gnu_old != 0
         && TREE_CODE (gnu_old) == FUNCTION_DECL
         && (Ekind (gnat_entity) == E_Function
            || Ekind (gnat_entity) == E_Procedure))
--- 4751,4757 ----
    /* Don't do anything for subprograms that may have been elaborated before
       their freeze nodes.  This can happen, for example because of an inner call
       in an instance body.  */
!   if (gnu_old
         && TREE_CODE (gnu_old) == FUNCTION_DECL
         && (Ekind (gnat_entity) == E_Function
            || Ekind (gnat_entity) == E_Procedure))
*************** process_freeze_entity (Node_Id gnat_node
*** 4307,4340 ****
       delayed, this node was never delayed as it should have been.
       Also allow this to happen for concurrent types since we may have
       frozen both the Corresponding_Record_Type and this type.  */
!   if (gnu_old != 0
!       && ! (TREE_CODE (gnu_old) == TYPE_DECL
!   	    && TYPE_IS_DUMMY_P (TREE_TYPE (gnu_old))))
      {
!       if (IN (Ekind (gnat_entity), Incomplete_Or_Private_Kind)
!   	  && Present (Full_View (gnat_entity))
!   	  && No (Freeze_Node (Full_View (gnat_entity))))
!   	return;
!       else if (Is_Concurrent_Type (gnat_entity))
! 	return;
!       else
! 	gigi_abort (320);
      }
  
    /* Reset the saved tree, if any, and elaborate the object or type for real.
       If there is a full declaration, elaborate it and copy the type to
       GNAT_ENTITY.  Likewise if this is the record subtype corresponding to
       a class wide type or subtype.  */
!   if (gnu_old != 0)
      {
!       save_gnu_tree (gnat_entity, NULL_TREE, 0);
        if (IN (Ekind (gnat_entity), Incomplete_Or_Private_Kind)
    	  && Present (Full_View (gnat_entity))
    	  && present_gnu_tree (Full_View (gnat_entity)))
!   	save_gnu_tree (Full_View (gnat_entity), NULL_TREE, 0);
        if (Present (Class_Wide_Type (gnat_entity))
  	  && Class_Wide_Type (gnat_entity) != gnat_entity)
! 	save_gnu_tree (Class_Wide_Type (gnat_entity), NULL_TREE, 0);
      }
  
    if (IN (Ekind (gnat_entity), Incomplete_Or_Private_Kind)
--- 4762,4792 ----
       delayed, this node was never delayed as it should have been.
       Also allow this to happen for concurrent types since we may have
       frozen both the Corresponding_Record_Type and this type.  */
!   if (gnu_old
!       && !(TREE_CODE (gnu_old) == TYPE_DECL
! 	   && TYPE_IS_DUMMY_P (TREE_TYPE (gnu_old))))
      {
!       gcc_assert ((IN (Ekind (gnat_entity), Incomplete_Or_Private_Kind)
! 		   && Present (Full_View (gnat_entity))
! 		   && No (Freeze_Node (Full_View (gnat_entity))))
! 		  || Is_Concurrent_Type (gnat_entity));
!       return;
      }
  
    /* Reset the saved tree, if any, and elaborate the object or type for real.
       If there is a full declaration, elaborate it and copy the type to
       GNAT_ENTITY.  Likewise if this is the record subtype corresponding to
       a class wide type or subtype.  */
!   if (gnu_old)
      {
!       save_gnu_tree (gnat_entity, NULL_TREE, false);
        if (IN (Ekind (gnat_entity), Incomplete_Or_Private_Kind)
    	  && Present (Full_View (gnat_entity))
    	  && present_gnu_tree (Full_View (gnat_entity)))
!   	save_gnu_tree (Full_View (gnat_entity), NULL_TREE, false);
        if (Present (Class_Wide_Type (gnat_entity))
  	  && Class_Wide_Type (gnat_entity) != gnat_entity)
! 	save_gnu_tree (Class_Wide_Type (gnat_entity), NULL_TREE, false);
      }
  
    if (IN (Ekind (gnat_entity), Incomplete_Or_Private_Kind)
*************** process_freeze_entity (Node_Id gnat_node
*** 4345,4362 ****
        /* The above call may have defined this entity (the simplest example
    	 of this is when we have a private enumeral type since the bounds
    	 will have the public view.  */
!       if (! present_gnu_tree (gnat_entity))
!   	save_gnu_tree (gnat_entity, gnu_new, 0);
        if (Present (Class_Wide_Type (gnat_entity))
  	  && Class_Wide_Type (gnat_entity) != gnat_entity)
! 	save_gnu_tree (Class_Wide_Type (gnat_entity), gnu_new, 0);
      }
    else
      gnu_new = gnat_to_gnu_entity (gnat_entity, gnu_init, 1);
  
    /* If we've made any pointers to the old version of this type, we
       have to update them.  */
!   if (gnu_old != 0)
      update_pointer_to (TYPE_MAIN_VARIANT (TREE_TYPE (gnu_old)),
  		       TREE_TYPE (gnu_new));
  }
--- 4797,4814 ----
        /* The above call may have defined this entity (the simplest example
    	 of this is when we have a private enumeral type since the bounds
    	 will have the public view.  */
!       if (!present_gnu_tree (gnat_entity))
!   	save_gnu_tree (gnat_entity, gnu_new, false);
        if (Present (Class_Wide_Type (gnat_entity))
  	  && Class_Wide_Type (gnat_entity) != gnat_entity)
! 	save_gnu_tree (Class_Wide_Type (gnat_entity), gnu_new, false);
      }
    else
      gnu_new = gnat_to_gnu_entity (gnat_entity, gnu_init, 1);
  
    /* If we've made any pointers to the old version of this type, we
       have to update them.  */
!   if (gnu_old)
      update_pointer_to (TYPE_MAIN_VARIANT (TREE_TYPE (gnu_old)),
  		       TREE_TYPE (gnu_new));
  }
*************** process_inlined_subprograms (Node_Id gna
*** 4372,4378 ****
  
    /* If we can inline, generate RTL for all the inlined subprograms.
       Define the entity first so we set DECL_EXTERNAL.  */
!   if (optimize > 0 && ! flag_no_inline)
      for (gnat_entity = First_Inlined_Subprogram (gnat_node);
  	 Present (gnat_entity);
  	 gnat_entity = Next_Inlined_Subprogram (gnat_entity))
--- 4824,4830 ----
  
    /* If we can inline, generate RTL for all the inlined subprograms.
       Define the entity first so we set DECL_EXTERNAL.  */
!   if (optimize > 0 && !flag_no_inline)
      for (gnat_entity = First_Inlined_Subprogram (gnat_node);
  	 Present (gnat_entity);
  	 gnat_entity = Next_Inlined_Subprogram (gnat_entity))
*************** process_inlined_subprograms (Node_Id gna
*** 4392,4398 ****
  	if (Present (gnat_body))
  	  {
  	    gnat_to_gnu_entity (gnat_entity, NULL_TREE, 0);
! 	    gnat_to_code (gnat_body);
  	  }
        }
  }
--- 4844,4850 ----
  	if (Present (gnat_body))
  	  {
  	    gnat_to_gnu_entity (gnat_entity, NULL_TREE, 0);
! 	    add_stmt (gnat_to_gnu (gnat_body));
  	  }
        }
  }
*************** process_inlined_subprograms (Node_Id gna
*** 4411,4421 ****
     correspond to the public and private parts of a package.  */
  
  static void
! process_decls (List_Id gnat_decls,
!                List_Id gnat_decls2,
!                Node_Id gnat_end_list,
!                int pass1p,
!                int pass2p)
  {
    List_Id gnat_decl_array[2];
    Node_Id gnat_decl;
--- 4863,4870 ----
     correspond to the public and private parts of a package.  */
  
  static void
! process_decls (List_Id gnat_decls, List_Id gnat_decls2,
!                Node_Id gnat_end_list, bool pass1p, bool pass2p)
  {
    List_Id gnat_decl_array[2];
    Node_Id gnat_decl;
*************** process_decls (List_Id gnat_decls,
*** 4429,4436 ****
  	for (gnat_decl = First (gnat_decl_array[i]);
  	     gnat_decl != gnat_end_list; gnat_decl = Next (gnat_decl))
  	  {
- 	    set_lineno (gnat_decl, 0);
- 
  	    /* For package specs, we recurse inside the declarations,
  	       thus taking the two pass approach inside the boundary.  */
  	    if (Nkind (gnat_decl) == N_Package_Declaration
--- 4878,4883 ----
*************** process_decls (List_Id gnat_decls,
*** 4438,4451 ****
  			   == N_Package_Specification)))
  	      process_decls (Visible_Declarations (Specification (gnat_decl)),
  			     Private_Declarations (Specification (gnat_decl)),
! 			     Empty, 1, 0);
  
  	    /* Similarly for any declarations in the actions of a
  	       freeze node.  */
  	    else if (Nkind (gnat_decl) == N_Freeze_Entity)
  	      {
  		process_freeze_entity (gnat_decl);
! 		process_decls (Actions (gnat_decl), Empty, Empty, 1, 0);
  	      }
  
  	    /* Package bodies with freeze nodes get their elaboration deferred
--- 4885,4898 ----
  			   == N_Package_Specification)))
  	      process_decls (Visible_Declarations (Specification (gnat_decl)),
  			     Private_Declarations (Specification (gnat_decl)),
! 			     Empty, true, false);
  
  	    /* Similarly for any declarations in the actions of a
  	       freeze node.  */
  	    else if (Nkind (gnat_decl) == N_Freeze_Entity)
  	      {
  		process_freeze_entity (gnat_decl);
! 		process_decls (Actions (gnat_decl), Empty, Empty, true, false);
  	      }
  
  	    /* Package bodies with freeze nodes get their elaboration deferred
*************** process_decls (List_Id gnat_decls,
*** 4484,4490 ****
                    Node_Id gnat_subprog_id =
                       Defining_Entity (Specification (gnat_decl));
  
! 		    if    (Ekind (gnat_subprog_id) != E_Subprogram_Body
                          && Ekind (gnat_subprog_id) != E_Generic_Procedure
  			&& Ekind (gnat_subprog_id) != E_Generic_Function)
  		      gnat_to_gnu_entity (gnat_subprog_id, NULL_TREE, 1);
--- 4931,4937 ----
                    Node_Id gnat_subprog_id =
                       Defining_Entity (Specification (gnat_decl));
  
! 		    if (Ekind (gnat_subprog_id) != E_Subprogram_Body
                          && Ekind (gnat_subprog_id) != E_Generic_Procedure
  			&& Ekind (gnat_subprog_id) != E_Generic_Function)
  		      gnat_to_gnu_entity (gnat_subprog_id, NULL_TREE, 1);
*************** process_decls (List_Id gnat_decls,
*** 4492,4503 ****
  
  	    /* Concurrent stubs stand for the corresponding subprogram bodies,
  	       which are deferred like other bodies.  */
! 	      else if (Nkind (gnat_decl) == N_Task_Body_Stub
! 		       || Nkind (gnat_decl) == N_Protected_Body_Stub)
! 		;
! 
  	    else
! 	      gnat_to_code (gnat_decl);
  	  }
  
    /* Here we elaborate everything we deferred above except for package bodies,
--- 4939,4949 ----
  
  	    /* Concurrent stubs stand for the corresponding subprogram bodies,
  	       which are deferred like other bodies.  */
! 	    else if (Nkind (gnat_decl) == N_Task_Body_Stub
! 		     || Nkind (gnat_decl) == N_Protected_Body_Stub)
! 	      ;
  	    else
! 	      add_stmt (gnat_to_gnu (gnat_decl));
  	  }
  
    /* Here we elaborate everything we deferred above except for package bodies,
*************** process_decls (List_Id gnat_decls,
*** 4513,4529 ****
  		|| Nkind (gnat_decl) == N_Subprogram_Body_Stub
  		|| Nkind (gnat_decl) == N_Task_Body_Stub
  		|| Nkind (gnat_decl) == N_Protected_Body_Stub)
! 	      gnat_to_code (gnat_decl);
  
  	    else if (Nkind (gnat_decl) == N_Package_Declaration
  		     && (Nkind (Specification (gnat_decl)
  				== N_Package_Specification)))
  	      process_decls (Visible_Declarations (Specification (gnat_decl)),
  			     Private_Declarations (Specification (gnat_decl)),
! 			     Empty, 0, 1);
  
  	    else if (Nkind (gnat_decl) == N_Freeze_Entity)
! 	      process_decls (Actions (gnat_decl), Empty, Empty, 0, 1);
  	  }
  }
  
--- 4959,4975 ----
  		|| Nkind (gnat_decl) == N_Subprogram_Body_Stub
  		|| Nkind (gnat_decl) == N_Task_Body_Stub
  		|| Nkind (gnat_decl) == N_Protected_Body_Stub)
! 	      add_stmt (gnat_to_gnu (gnat_decl));
  
  	    else if (Nkind (gnat_decl) == N_Package_Declaration
  		     && (Nkind (Specification (gnat_decl)
  				== N_Package_Specification)))
  	      process_decls (Visible_Declarations (Specification (gnat_decl)),
  			     Private_Declarations (Specification (gnat_decl)),
! 			     Empty, false, true);
  
  	    else if (Nkind (gnat_decl) == N_Freeze_Entity)
! 	      process_decls (Actions (gnat_decl), Empty, Empty, false, true);
  	  }
  }
  
*************** emit_index_check (tree gnu_array_object,
*** 4598,4610 ****
  
    /* If GNU_LOW or GNU_HIGH are a PLACEHOLDER_EXPR, qualify them by
       the object we are handling. */
!   if (CONTAINS_PLACEHOLDER_P (gnu_low))
!     gnu_low = build (WITH_RECORD_EXPR, TREE_TYPE (gnu_low),
! 		     gnu_low, gnu_array_object);
! 
!   if (CONTAINS_PLACEHOLDER_P (gnu_high))
!     gnu_high = build (WITH_RECORD_EXPR, TREE_TYPE (gnu_high),
! 		      gnu_high, gnu_array_object);
  
    /* There's no good type to use here, so we might as well use
       integer_type_node.   */
--- 5044,5051 ----
  
    /* If GNU_LOW or GNU_HIGH are a PLACEHOLDER_EXPR, qualify them by
       the object we are handling. */
!   gnu_low = SUBSTITUTE_PLACEHOLDER_IN_EXPR (gnu_low, gnu_array_object);
!   gnu_high = SUBSTITUTE_PLACEHOLDER_IN_EXPR (gnu_high, gnu_array_object);
  
    /* There's no good type to use here, so we might as well use
       integer_type_node.   */
*************** emit_index_check (tree gnu_array_object,
*** 4621,4631 ****
       gnu_expr, CE_Index_Check_Failed);
  }
  
! /* Given GNU_COND which contains the condition corresponding to an access,
!    discriminant or range check, of value GNU_EXPR, build a COND_EXPR
!    that returns GNU_EXPR if GNU_COND is false and raises a
!    CONSTRAINT_ERROR if GNU_COND is true.  REASON is the code that says
!    why the exception was raised.  */
  
  static tree
  emit_check (tree gnu_cond, tree gnu_expr, int reason)
--- 5062,5071 ----
       gnu_expr, CE_Index_Check_Failed);
  }
  
! /* GNU_COND contains the condition corresponding to an access, discriminant or
!    range check of value GNU_EXPR.  Build a COND_EXPR that returns GNU_EXPR if
!    GNU_COND is false and raises a CONSTRAINT_ERROR if GNU_COND is true.
!    REASON is the code that says why the exception was raised.  */
  
  static tree
  emit_check (tree gnu_cond, tree gnu_expr, int reason)
*************** emit_check (tree gnu_cond, tree gnu_expr
*** 4639,4655 ****
       in front of the comparison in case it ends up being a SAVE_EXPR.  Put the
       whole thing inside its own SAVE_EXPR so the inner SAVE_EXPR doesn't leak
       out.  */
!   gnu_result = fold (build (COND_EXPR, TREE_TYPE (gnu_expr), gnu_cond,
! 			    build (COMPOUND_EXPR, TREE_TYPE (gnu_expr),
! 				   gnu_call, gnu_expr),
! 			    gnu_expr));
  
    /* If GNU_EXPR has side effects, make the outer COMPOUND_EXPR and
       protect it.  Otherwise, show GNU_RESULT has no side effects: we
       don't need to evaluate it just for the check.  */
    if (TREE_SIDE_EFFECTS (gnu_expr))
      gnu_result
!       = build (COMPOUND_EXPR, TREE_TYPE (gnu_expr), gnu_expr, gnu_result);
    else
      TREE_SIDE_EFFECTS (gnu_result) = 0;
  
--- 5079,5095 ----
       in front of the comparison in case it ends up being a SAVE_EXPR.  Put the
       whole thing inside its own SAVE_EXPR so the inner SAVE_EXPR doesn't leak
       out.  */
!   gnu_result = fold (build3 (COND_EXPR, TREE_TYPE (gnu_expr), gnu_cond,
! 			     build2 (COMPOUND_EXPR, TREE_TYPE (gnu_expr),
! 				     gnu_call, gnu_expr),
! 			     gnu_expr));
  
    /* If GNU_EXPR has side effects, make the outer COMPOUND_EXPR and
       protect it.  Otherwise, show GNU_RESULT has no side effects: we
       don't need to evaluate it just for the check.  */
    if (TREE_SIDE_EFFECTS (gnu_expr))
      gnu_result
!       = build2 (COMPOUND_EXPR, TREE_TYPE (gnu_expr), gnu_expr, gnu_result);
    else
      TREE_SIDE_EFFECTS (gnu_result) = 0;
  
*************** emit_check (tree gnu_cond, tree gnu_expr
*** 4666,4694 ****
     truncation; otherwise round.  */
  
  static tree
! convert_with_check (Entity_Id gnat_type,
!                     tree gnu_expr,
!                     int overflow_p,
!                     int range_p,
!                     int truncate_p)
  {
    tree gnu_type = get_unpadded_type (gnat_type);
    tree gnu_in_type = TREE_TYPE (gnu_expr);
    tree gnu_in_basetype = get_base_type (gnu_in_type);
    tree gnu_base_type = get_base_type (gnu_type);
    tree gnu_ada_base_type = get_ada_base_type (gnu_type);
-   tree gnu_in_lb = TYPE_MIN_VALUE (gnu_in_basetype);
-   tree gnu_in_ub = TYPE_MAX_VALUE (gnu_in_basetype);
-   tree gnu_out_lb = TYPE_MIN_VALUE (gnu_base_type);
-   tree gnu_out_ub = TYPE_MAX_VALUE (gnu_base_type);
    tree gnu_result = gnu_expr;
  
    /* If we are not doing any checks, the output is an integral type, and
       the input is not a floating type, just do the conversion.  This
       shortcut is required to avoid problems with packed array types
       and simplifies code in all cases anyway.   */
!   if (! range_p && ! overflow_p && INTEGRAL_TYPE_P (gnu_base_type)
!       && ! FLOAT_TYPE_P (gnu_in_type))
      return convert (gnu_type, gnu_expr);
  
    /* First convert the expression to its base type.  This
--- 5106,5127 ----
     truncation; otherwise round.  */
  
  static tree
! convert_with_check (Entity_Id gnat_type, tree gnu_expr, bool overflowp,
! 		    bool rangep, bool truncatep)
  {
    tree gnu_type = get_unpadded_type (gnat_type);
    tree gnu_in_type = TREE_TYPE (gnu_expr);
    tree gnu_in_basetype = get_base_type (gnu_in_type);
    tree gnu_base_type = get_base_type (gnu_type);
    tree gnu_ada_base_type = get_ada_base_type (gnu_type);
    tree gnu_result = gnu_expr;
  
    /* If we are not doing any checks, the output is an integral type, and
       the input is not a floating type, just do the conversion.  This
       shortcut is required to avoid problems with packed array types
       and simplifies code in all cases anyway.   */
!   if (!rangep && !overflowp && INTEGRAL_TYPE_P (gnu_base_type)
!       && !FLOAT_TYPE_P (gnu_in_type))
      return convert (gnu_type, gnu_expr);
  
    /* First convert the expression to its base type.  This
*************** convert_with_check (Entity_Id gnat_type,
*** 4702,4728 ****
    /* If overflow checks are requested,  we need to be sure the result will
       fit in the output base type.  But don't do this if the input
       is integer and the output floating-point.  */
!   if (overflow_p
!       && ! (FLOAT_TYPE_P (gnu_base_type) && INTEGRAL_TYPE_P (gnu_in_basetype)))
      {
        /* Ensure GNU_EXPR only gets evaluated once.  */
        tree gnu_input = protect_multiple_eval (gnu_result);
        tree gnu_cond = integer_zero_node;
  
        /* Convert the lower bounds to signed types, so we're sure we're
  	 comparing them properly.  Likewise, convert the upper bounds
  	 to unsigned types.  */
!       if (INTEGRAL_TYPE_P (gnu_in_basetype) && TREE_UNSIGNED (gnu_in_basetype))
  	gnu_in_lb = convert (gnat_signed_type (gnu_in_basetype), gnu_in_lb);
  
        if (INTEGRAL_TYPE_P (gnu_in_basetype)
! 	  && ! TREE_UNSIGNED (gnu_in_basetype))
  	gnu_in_ub = convert (gnat_unsigned_type (gnu_in_basetype), gnu_in_ub);
  
!       if (INTEGRAL_TYPE_P (gnu_base_type) && TREE_UNSIGNED (gnu_base_type))
  	gnu_out_lb = convert (gnat_signed_type (gnu_base_type), gnu_out_lb);
  
!       if (INTEGRAL_TYPE_P (gnu_base_type) && ! TREE_UNSIGNED (gnu_base_type))
  	gnu_out_ub = convert (gnat_unsigned_type (gnu_base_type), gnu_out_ub);
  
        /* Check each bound separately and only if the result bound
--- 5135,5165 ----
    /* If overflow checks are requested,  we need to be sure the result will
       fit in the output base type.  But don't do this if the input
       is integer and the output floating-point.  */
!   if (overflowp
!       && !(FLOAT_TYPE_P (gnu_base_type) && INTEGRAL_TYPE_P (gnu_in_basetype)))
      {
        /* Ensure GNU_EXPR only gets evaluated once.  */
        tree gnu_input = protect_multiple_eval (gnu_result);
        tree gnu_cond = integer_zero_node;
+       tree gnu_in_lb = TYPE_MIN_VALUE (gnu_in_basetype);
+       tree gnu_in_ub = TYPE_MAX_VALUE (gnu_in_basetype);
+       tree gnu_out_lb = TYPE_MIN_VALUE (gnu_base_type);
+       tree gnu_out_ub = TYPE_MAX_VALUE (gnu_base_type);
  
        /* Convert the lower bounds to signed types, so we're sure we're
  	 comparing them properly.  Likewise, convert the upper bounds
  	 to unsigned types.  */
!       if (INTEGRAL_TYPE_P (gnu_in_basetype) && TYPE_UNSIGNED (gnu_in_basetype))
  	gnu_in_lb = convert (gnat_signed_type (gnu_in_basetype), gnu_in_lb);
  
        if (INTEGRAL_TYPE_P (gnu_in_basetype)
! 	  && !TYPE_UNSIGNED (gnu_in_basetype))
  	gnu_in_ub = convert (gnat_unsigned_type (gnu_in_basetype), gnu_in_ub);
  
!       if (INTEGRAL_TYPE_P (gnu_base_type) && TYPE_UNSIGNED (gnu_base_type))
  	gnu_out_lb = convert (gnat_signed_type (gnu_base_type), gnu_out_lb);
  
!       if (INTEGRAL_TYPE_P (gnu_base_type) && !TYPE_UNSIGNED (gnu_base_type))
  	gnu_out_ub = convert (gnat_unsigned_type (gnu_base_type), gnu_out_ub);
  
        /* Check each bound separately and only if the result bound
*************** convert_with_check (Entity_Id gnat_type,
*** 4761,4767 ****
  					       convert (gnu_in_basetype,
  							gnu_out_ub))));
  
!       if (! integer_zerop (gnu_cond))
  	gnu_result = emit_check (gnu_cond, gnu_input,
  	                         CE_Overflow_Check_Failed);
      }
--- 5198,5204 ----
  					       convert (gnu_in_basetype,
  							gnu_out_ub))));
  
!       if (!integer_zerop (gnu_cond))
  	gnu_result = emit_check (gnu_cond, gnu_input,
  	                         CE_Overflow_Check_Failed);
      }
*************** convert_with_check (Entity_Id gnat_type,
*** 4769,4793 ****
    /* Now convert to the result base type.  If this is a non-truncating
       float-to-integer conversion, round.  */
    if (INTEGRAL_TYPE_P (gnu_ada_base_type) && FLOAT_TYPE_P (gnu_in_basetype)
!       && ! truncate_p)
      {
!       tree gnu_point_5 = build_real (gnu_in_basetype, dconstp5);
!       tree gnu_minus_point_5 = build_real (gnu_in_basetype, dconstmp5);
!       tree gnu_zero = convert (gnu_in_basetype, integer_zero_node);
!       tree gnu_saved_result = save_expr (gnu_result);
!       tree gnu_comp = build (GE_EXPR, integer_type_node,
! 			     gnu_saved_result, gnu_zero);
!       tree gnu_adjust = build (COND_EXPR, gnu_in_basetype, gnu_comp,
! 			       gnu_point_5, gnu_minus_point_5);
  
!       gnu_result
! 	= build (PLUS_EXPR, gnu_in_basetype, gnu_saved_result, gnu_adjust);
      }
  
    if (TREE_CODE (gnu_ada_base_type) == INTEGER_TYPE
        && TYPE_HAS_ACTUAL_BOUNDS_P (gnu_ada_base_type)
        && TREE_CODE (gnu_result) == UNCONSTRAINED_ARRAY_REF)
!     gnu_result = unchecked_convert (gnu_ada_base_type, gnu_result, 0);
    else
      gnu_result = convert (gnu_ada_base_type, gnu_result);
  
--- 5206,5273 ----
    /* Now convert to the result base type.  If this is a non-truncating
       float-to-integer conversion, round.  */
    if (INTEGRAL_TYPE_P (gnu_ada_base_type) && FLOAT_TYPE_P (gnu_in_basetype)
!       && !truncatep)
      {
!       REAL_VALUE_TYPE half_minus_pred_half, pred_half;
!       tree gnu_conv, gnu_zero, gnu_comp, gnu_saved_result, calc_type;
!       tree gnu_pred_half, gnu_add_pred_half, gnu_subtract_pred_half;
!       const struct real_format *fmt;
  
!       /* The following calculations depend on proper rounding to even
!          of each arithmetic operation. In order to prevent excess
!          precision from spoiling this property, use the widest hardware
!          floating-point type.
! 
!          FIXME: For maximum efficiency, this should only be done for machines
!          and types where intermediates may have extra precision.  */
! 
!       calc_type = longest_float_type_node;
!       /* FIXME: Should not have padding in the first place */
!       if (TREE_CODE (calc_type) == RECORD_TYPE
!               && TYPE_IS_PADDING_P (calc_type))
!         calc_type = TREE_TYPE (TYPE_FIELDS (calc_type));
! 
!       /* Compute the exact value calc_type'Pred (0.5) at compile time. */
!       fmt = REAL_MODE_FORMAT (TYPE_MODE (calc_type));
!       real_2expN (&half_minus_pred_half, -(fmt->p) - 1);
!       REAL_ARITHMETIC (pred_half, MINUS_EXPR, dconsthalf,
!                        half_minus_pred_half);
!       gnu_pred_half = build_real (calc_type, pred_half);
! 
!       /* If the input is strictly negative, subtract this value
!          and otherwise add it from the input. For 0.5, the result
!          is exactly between 1.0 and the machine number preceding 1.0
!          (for calc_type). Since the last bit of 1.0 is even, this 0.5
!          will round to 1.0, while all other number with an absolute
!          value less than 0.5 round to 0.0. For larger numbers exactly
!          halfway between integers, rounding will always be correct as
!          the true mathematical result will be closer to the higher
!          integer compared to the lower one. So, this constant works
!          for all floating-point numbers.
! 
!          The reason to use the same constant with subtract/add instead
!          of a positive and negative constant is to allow the comparison
!          to be scheduled in parallel with retrieval of the constant and
!          conversion of the input to the calc_type (if necessary).
!       */
! 
!       gnu_zero = convert (gnu_in_basetype, integer_zero_node);
!       gnu_saved_result = save_expr (gnu_result);
!       gnu_conv = convert (calc_type, gnu_saved_result);
!       gnu_comp = build2 (GE_EXPR, integer_type_node,
! 	                gnu_saved_result, gnu_zero);
!       gnu_add_pred_half
!         = build2 (PLUS_EXPR, calc_type, gnu_conv, gnu_pred_half);
!       gnu_subtract_pred_half
!         = build2 (MINUS_EXPR, calc_type, gnu_conv, gnu_pred_half);
!       gnu_result = build3 (COND_EXPR, calc_type, gnu_comp,
! 			   gnu_add_pred_half, gnu_subtract_pred_half);
      }
  
    if (TREE_CODE (gnu_ada_base_type) == INTEGER_TYPE
        && TYPE_HAS_ACTUAL_BOUNDS_P (gnu_ada_base_type)
        && TREE_CODE (gnu_result) == UNCONSTRAINED_ARRAY_REF)
!     gnu_result = unchecked_convert (gnu_ada_base_type, gnu_result, false);
    else
      gnu_result = convert (gnu_ada_base_type, gnu_result);
  
*************** convert_with_check (Entity_Id gnat_type,
*** 4795,4803 ****
       result type is a modular type, the range check is actually
       an overflow check.  */
  
!   if (range_p
        || (TREE_CODE (gnu_base_type) == INTEGER_TYPE
! 	  && TYPE_MODULAR_P (gnu_base_type) && overflow_p))
      gnu_result = emit_range_check (gnu_result, gnat_type);
  
    return convert (gnu_type, gnu_result);
--- 5275,5283 ----
       result type is a modular type, the range check is actually
       an overflow check.  */
  
!   if (rangep
        || (TREE_CODE (gnu_base_type) == INTEGER_TYPE
! 	  && TYPE_MODULAR_P (gnu_base_type) && overflowp))
      gnu_result = emit_range_check (gnu_result, gnat_type);
  
    return convert (gnu_type, gnu_result);
*************** convert_with_check (Entity_Id gnat_type,
*** 4808,4814 ****
     reference.  This returns the same as gnat_mark_addressable in most
     cases.  */
  
! static int
  addressable_p (tree gnu_expr)
  {
    switch (TREE_CODE (gnu_expr))
--- 5288,5294 ----
     reference.  This returns the same as gnat_mark_addressable in most
     cases.  */
  
! static bool
  addressable_p (tree gnu_expr)
  {
    switch (TREE_CODE (gnu_expr))
*************** addressable_p (tree gnu_expr)
*** 4819,4837 ****
      case RESULT_DECL:
        /* All DECLs are addressable: if they are in a register, we can force
  	 them to memory.  */
!       return 1;
  
      case UNCONSTRAINED_ARRAY_REF:
      case INDIRECT_REF:
      case CONSTRUCTOR:
      case NULL_EXPR:
      case SAVE_EXPR:
!       return 1;
  
      case COMPONENT_REF:
!       return (! DECL_BIT_FIELD (TREE_OPERAND (gnu_expr, 1))
! 	      && (! DECL_NONADDRESSABLE_P (TREE_OPERAND (gnu_expr, 1))
! 		  || ! flag_strict_aliasing)
  	      && addressable_p (TREE_OPERAND (gnu_expr, 0)));
  
      case ARRAY_REF:  case ARRAY_RANGE_REF:
--- 5299,5317 ----
      case RESULT_DECL:
        /* All DECLs are addressable: if they are in a register, we can force
  	 them to memory.  */
!       return true;
  
      case UNCONSTRAINED_ARRAY_REF:
      case INDIRECT_REF:
      case CONSTRUCTOR:
      case NULL_EXPR:
      case SAVE_EXPR:
!       return true;
  
      case COMPONENT_REF:
!       return (!DECL_BIT_FIELD (TREE_OPERAND (gnu_expr, 1))
! 	      && (!DECL_NONADDRESSABLE_P (TREE_OPERAND (gnu_expr, 1))
! 		  || !flag_strict_aliasing)
  	      && addressable_p (TREE_OPERAND (gnu_expr, 0)));
  
      case ARRAY_REF:  case ARRAY_RANGE_REF:
*************** addressable_p (tree gnu_expr)
*** 4862,4868 ****
        }
  
      default:
!       return 0;
      }
  }
  
--- 5342,5348 ----
        }
  
      default:
!       return false;
      }
  }
  
*************** process_type (Entity_Id gnat_entity)
*** 4887,4906 ****
        || (IN (Ekind (gnat_entity), Incomplete_Or_Private_Kind)
  	  && Present (Full_View (gnat_entity))
  	  && Freeze_Node (Full_View (gnat_entity))
! 	  && ! present_gnu_tree (Full_View (gnat_entity))))
      {
        elaborate_entity (gnat_entity);
  
!       if (gnu_old == 0)
          {
  	  tree gnu_decl = create_type_decl (get_entity_name (gnat_entity),
  					    make_dummy_type (gnat_entity),
! 					    0, 0, 0);
  
! 	  save_gnu_tree (gnat_entity, gnu_decl, 0);
  	  if (IN (Ekind (gnat_entity), Incomplete_Or_Private_Kind)
  	      && Present (Full_View (gnat_entity)))
! 	    save_gnu_tree (Full_View (gnat_entity), gnu_decl, 0);
  	}
  
        return;
--- 5367,5386 ----
        || (IN (Ekind (gnat_entity), Incomplete_Or_Private_Kind)
  	  && Present (Full_View (gnat_entity))
  	  && Freeze_Node (Full_View (gnat_entity))
! 	  && !present_gnu_tree (Full_View (gnat_entity))))
      {
        elaborate_entity (gnat_entity);
  
!       if (!gnu_old)
          {
  	  tree gnu_decl = create_type_decl (get_entity_name (gnat_entity),
  					    make_dummy_type (gnat_entity),
! 					    NULL, false, false, gnat_entity);
  
! 	  save_gnu_tree (gnat_entity, gnu_decl, false);
  	  if (IN (Ekind (gnat_entity), Incomplete_Or_Private_Kind)
  	      && Present (Full_View (gnat_entity)))
! 	    save_gnu_tree (Full_View (gnat_entity), gnu_decl, false);
  	}
  
        return;
*************** process_type (Entity_Id gnat_entity)
*** 4910,4940 ****
       made the type that corresponds to the full type of an incomplete
       type.  Clear that type for now and then update the type in the
       pointers.  */
!   if (gnu_old != 0)
      {
        if (TREE_CODE (gnu_old) != TYPE_DECL
! 	  || ! TYPE_IS_DUMMY_P (TREE_TYPE (gnu_old)))
  	{
  	  /* If this was a withed access type, this is not an error
  	     and merely indicates we've already elaborated the type
  	     already. */
! 	  if (Is_Type (gnat_entity) && From_With_Type (gnat_entity))
! 	    return;
! 
! 	  gigi_abort (323);
  	}
  
!       save_gnu_tree (gnat_entity, NULL_TREE, 0);
      }
  
    /* Now fully elaborate the type.  */
    gnu_new = gnat_to_gnu_entity (gnat_entity, NULL_TREE, 1);
!   if (TREE_CODE (gnu_new) != TYPE_DECL)
!     gigi_abort (324);
  
    /* If we have an old type and we've made pointers to this type,
       update those pointers.  */
!   if (gnu_old != 0)
      update_pointer_to (TYPE_MAIN_VARIANT (TREE_TYPE (gnu_old)),
  		       TREE_TYPE (gnu_new));
  
--- 5390,5417 ----
       made the type that corresponds to the full type of an incomplete
       type.  Clear that type for now and then update the type in the
       pointers.  */
!   if (gnu_old)
      {
        if (TREE_CODE (gnu_old) != TYPE_DECL
! 	  || !TYPE_IS_DUMMY_P (TREE_TYPE (gnu_old)))
  	{
  	  /* If this was a withed access type, this is not an error
  	     and merely indicates we've already elaborated the type
  	     already. */
! 	  gcc_assert (Is_Type (gnat_entity) && From_With_Type (gnat_entity));
! 	  return;
  	}
  
!       save_gnu_tree (gnat_entity, NULL_TREE, false);
      }
  
    /* Now fully elaborate the type.  */
    gnu_new = gnat_to_gnu_entity (gnat_entity, NULL_TREE, 1);
!   gcc_assert (TREE_CODE (gnu_new) == TYPE_DECL);
  
    /* If we have an old type and we've made pointers to this type,
       update those pointers.  */
!   if (gnu_old)
      update_pointer_to (TYPE_MAIN_VARIANT (TREE_TYPE (gnu_old)),
  		       TREE_TYPE (gnu_new));
  
*************** process_type (Entity_Id gnat_entity)
*** 4951,4959 ****
  	= get_gnu_tree (Corresponding_Concurrent_Type (gnat_entity));
  
        save_gnu_tree (Corresponding_Concurrent_Type (gnat_entity),
! 		     NULL_TREE, 0);
        save_gnu_tree (Corresponding_Concurrent_Type (gnat_entity),
! 		     gnu_new, 0);
  
        update_pointer_to (TYPE_MAIN_VARIANT (TREE_TYPE (gnu_task_old)),
  			 TREE_TYPE (gnu_new));
--- 5428,5436 ----
  	= get_gnu_tree (Corresponding_Concurrent_Type (gnat_entity));
  
        save_gnu_tree (Corresponding_Concurrent_Type (gnat_entity),
! 		     NULL_TREE, false);
        save_gnu_tree (Corresponding_Concurrent_Type (gnat_entity),
! 		     gnu_new, false);
  
        update_pointer_to (TYPE_MAIN_VARIANT (TREE_TYPE (gnu_task_old)),
  			 TREE_TYPE (gnu_new));
*************** process_type (Entity_Id gnat_entity)
*** 4968,4974 ****
  static tree
  assoc_to_constructor (Node_Id gnat_assoc, tree gnu_type)
  {
!   tree gnu_field, gnu_list, gnu_result;
  
    /* We test for GNU_FIELD being empty in the case where a variant
       was the last thing since we don't take things off GNAT_ASSOC in
--- 5445,5451 ----
  static tree
  assoc_to_constructor (Node_Id gnat_assoc, tree gnu_type)
  {
!   tree gnu_list, gnu_result;
  
    /* We test for GNU_FIELD being empty in the case where a variant
       was the last thing since we don't take things off GNAT_ASSOC in
*************** assoc_to_constructor (Node_Id gnat_assoc
*** 4979,4991 ****
         gnat_assoc = Next (gnat_assoc))
      {
        Node_Id gnat_field = First (Choices (gnat_assoc));
!       tree gnu_field = gnat_to_gnu_entity (Entity (gnat_field), NULL_TREE, 0);
        tree gnu_expr = gnat_to_gnu (Expression (gnat_assoc));
  
        /* The expander is supposed to put a single component selector name
  	 in every record component association */
!       if (Next (gnat_field))
! 	gigi_abort (328);
  
        /* Before assigning a value in an aggregate make sure range checks
  	 are done if required.  Then convert to the type of the field.  */
--- 5456,5473 ----
         gnat_assoc = Next (gnat_assoc))
      {
        Node_Id gnat_field = First (Choices (gnat_assoc));
!       tree gnu_field = gnat_to_gnu_field_decl (Entity (gnat_field));
        tree gnu_expr = gnat_to_gnu (Expression (gnat_assoc));
  
        /* The expander is supposed to put a single component selector name
  	 in every record component association */
!       gcc_assert (No (Next (gnat_field)));
! 
!       /* Ignore fields that have Corresponding_Discriminants since we'll
! 	 be setting that field in the parent.  */
!       if (Present (Corresponding_Discriminant (Entity (gnat_field)))
! 	  && Is_Tagged_Type (Scope (Entity (gnat_field))))
! 	continue;
  
        /* Before assigning a value in an aggregate make sure range checks
  	 are done if required.  Then convert to the type of the field.  */
*************** assoc_to_constructor (Node_Id gnat_assoc
*** 5000,5009 ****
  
    gnu_result = extract_values (gnu_list, gnu_type);
  
!   /* Verify every enty in GNU_LIST was used.  */
!   for (gnu_field = gnu_list; gnu_field; gnu_field = TREE_CHAIN (gnu_field))
!     if (! TREE_ADDRESSABLE (gnu_field))
!       gigi_abort (311);
  
    return gnu_result;
  }
--- 5482,5496 ----
  
    gnu_result = extract_values (gnu_list, gnu_type);
  
! #ifdef ENABLE_CHECKING
!   {
!     tree gnu_field;
! 
!     /* Verify every enty in GNU_LIST was used.  */
!     for (gnu_field = gnu_list; gnu_field; gnu_field = TREE_CHAIN (gnu_field))
!       gcc_assert (TREE_ADDRESSABLE (gnu_field));
!   }
! #endif
  
    return gnu_result;
  }
*************** assoc_to_constructor (Node_Id gnat_assoc
*** 5015,5026 ****
     of the array component. It is needed for range checking. */
  
  static tree
! pos_to_constructor (Node_Id gnat_expr,
!                     tree gnu_array_type,
                      Entity_Id gnat_component_type)
  {
-   tree gnu_expr;
    tree gnu_expr_list = NULL_TREE;
  
    for ( ; Present (gnat_expr); gnat_expr = Next (gnat_expr))
      {
--- 5502,5513 ----
     of the array component. It is needed for range checking. */
  
  static tree
! pos_to_constructor (Node_Id gnat_expr, tree gnu_array_type,
                      Entity_Id gnat_component_type)
  {
    tree gnu_expr_list = NULL_TREE;
+   tree gnu_index = TYPE_MIN_VALUE (TYPE_DOMAIN (gnu_array_type));
+   tree gnu_expr;
  
    for ( ; Present (gnat_expr); gnat_expr = Next (gnat_expr))
      {
*************** pos_to_constructor (Node_Id gnat_expr,
*** 5045,5052 ****
  	}
  
        gnu_expr_list
! 	= tree_cons (NULL_TREE, convert (TREE_TYPE (gnu_array_type), gnu_expr),
  		     gnu_expr_list);
      }
  
    return gnat_build_constructor (gnu_array_type, nreverse (gnu_expr_list));
--- 5532,5541 ----
  	}
  
        gnu_expr_list
! 	= tree_cons (gnu_index, convert (TREE_TYPE (gnu_array_type), gnu_expr),
  		     gnu_expr_list);
+ 
+       gnu_index = int_const_binop (PLUS_EXPR, gnu_index, integer_one_node, 0);
      }
  
    return gnat_build_constructor (gnu_array_type, nreverse (gnu_expr_list));
*************** extract_values (tree values, tree record
*** 5069,5075 ****
  
        /* _Parent is an internal field, but may have values in the aggregate,
  	 so check for values first.  */
!       if ((tem = purpose_member (field, values)) != 0)
  	{
  	  value = TREE_VALUE (tem);
  	  TREE_ADDRESSABLE (tem) = 1;
--- 5558,5564 ----
  
        /* _Parent is an internal field, but may have values in the aggregate,
  	 so check for values first.  */
!       if ((tem = purpose_member (field, values)))
  	{
  	  value = TREE_VALUE (tem);
  	  TREE_ADDRESSABLE (tem) = 1;
*************** extract_values (tree values, tree record
*** 5078,5085 ****
        else if (DECL_INTERNAL_P (field))
  	{
  	  value = extract_values (values, TREE_TYPE (field));
! 	  if (TREE_CODE (value) == CONSTRUCTOR
! 	      && CONSTRUCTOR_ELTS (value) == 0)
  	    value = 0;
  	}
        else
--- 5567,5573 ----
        else if (DECL_INTERNAL_P (field))
  	{
  	  value = extract_values (values, TREE_TYPE (field));
! 	  if (TREE_CODE (value) == CONSTRUCTOR && !CONSTRUCTOR_ELTS (value))
  	    value = 0;
  	}
        else
*************** extract_values (tree values, tree record
*** 5092,5098 ****
  	      TREE_ADDRESSABLE (tem) = 1;
  	    }
  
!       if (value == 0)
  	continue;
  
        result = tree_cons (field, value, result);
--- 5580,5586 ----
  	      TREE_ADDRESSABLE (tem) = 1;
  	    }
  
!       if (!value)
  	continue;
  
        result = tree_cons (field, value, result);
*************** protect_multiple_eval (tree exp)
*** 5128,5134 ****
    tree type = TREE_TYPE (exp);
  
    /* If this has no side effects, we don't need to do anything.  */
!   if (! TREE_SIDE_EFFECTS (exp))
      return exp;
  
    /* If it is a conversion, protect what's inside the conversion.
--- 5616,5622 ----
    tree type = TREE_TYPE (exp);
  
    /* If this has no side effects, we don't need to do anything.  */
!   if (!TREE_SIDE_EFFECTS (exp))
      return exp;
  
    /* If it is a conversion, protect what's inside the conversion.
*************** protect_multiple_eval (tree exp)
*** 5162,5168 ****
     whether to force evaluation of everything.  */
  
  tree
! gnat_stabilize_reference (tree ref, int force)
  {
    tree type = TREE_TYPE (ref);
    enum tree_code code = TREE_CODE (ref);
--- 5650,5656 ----
     whether to force evaluation of everything.  */
  
  tree
! gnat_stabilize_reference (tree ref, bool force)
  {
    tree type = TREE_TYPE (ref);
    enum tree_code code = TREE_CODE (ref);
*************** gnat_stabilize_reference (tree ref, int 
*** 5198,5244 ****
        break;
  
      case COMPONENT_REF:
!       result = build (COMPONENT_REF, type,
! 		      gnat_stabilize_reference (TREE_OPERAND (ref, 0),
! 						force),
! 		      TREE_OPERAND (ref, 1));
        break;
  
      case BIT_FIELD_REF:
!       result = build (BIT_FIELD_REF, type,
! 		      gnat_stabilize_reference (TREE_OPERAND (ref, 0), force),
! 		      gnat_stabilize_reference_1 (TREE_OPERAND (ref, 1),
! 						     force),
! 		      gnat_stabilize_reference_1 (TREE_OPERAND (ref, 2),
! 						  force));
        break;
  
      case ARRAY_REF:
-       result = build (ARRAY_REF, type,
- 		      gnat_stabilize_reference (TREE_OPERAND (ref, 0), force),
- 		      gnat_stabilize_reference_1 (TREE_OPERAND (ref, 1),
- 						  force));
-       break;
- 
      case ARRAY_RANGE_REF:
!       result = build (ARRAY_RANGE_REF, type,
! 		      gnat_stabilize_reference (TREE_OPERAND (ref, 0), force),
! 		      gnat_stabilize_reference_1 (TREE_OPERAND (ref, 1),
! 						  force));
        break;
  
      case COMPOUND_EXPR:
!       result = build (COMPOUND_EXPR, type,
! 		      gnat_stabilize_reference_1 (TREE_OPERAND (ref, 0),
! 						  force),
! 		      gnat_stabilize_reference (TREE_OPERAND (ref, 1),
! 						force));
!       break;
! 
!     case RTL_EXPR:
!       result = build1 (INDIRECT_REF, type,
! 		       save_expr (build1 (ADDR_EXPR,
! 					  build_reference_type (type), ref)));
        break;
  
        /* If arg isn't a kind of lvalue we recognize, make no change.
--- 5686,5721 ----
        break;
  
      case COMPONENT_REF:
!       result = build3 (COMPONENT_REF, type,
! 		       gnat_stabilize_reference (TREE_OPERAND (ref, 0),
! 						 force),
! 		       TREE_OPERAND (ref, 1), NULL_TREE);
        break;
  
      case BIT_FIELD_REF:
!       result = build3 (BIT_FIELD_REF, type,
! 		       gnat_stabilize_reference (TREE_OPERAND (ref, 0), force),
! 		       gnat_stabilize_reference_1 (TREE_OPERAND (ref, 1),
! 						   force),
! 		       gnat_stabilize_reference_1 (TREE_OPERAND (ref, 2),
! 						   force));
        break;
  
      case ARRAY_REF:
      case ARRAY_RANGE_REF:
!       result = build4 (code, type,
! 		       gnat_stabilize_reference (TREE_OPERAND (ref, 0), force),
! 		       gnat_stabilize_reference_1 (TREE_OPERAND (ref, 1),
! 						   force),
! 		       NULL_TREE, NULL_TREE);
        break;
  
      case COMPOUND_EXPR:
!       result = build2 (COMPOUND_EXPR, type,
! 		       gnat_stabilize_reference_1 (TREE_OPERAND (ref, 0),
! 						   force),
! 		       gnat_stabilize_reference (TREE_OPERAND (ref, 1),
! 						 force));
        break;
  
        /* If arg isn't a kind of lvalue we recognize, make no change.
*************** gnat_stabilize_reference (tree ref, int 
*** 5251,5256 ****
--- 5728,5746 ----
      }
  
    TREE_READONLY (result) = TREE_READONLY (ref);
+ 
+   /* TREE_THIS_VOLATILE and TREE_SIDE_EFFECTS attached to the initial
+      expression may not be sustained across some paths, such as the way via
+      build1 for INDIRECT_REF.  We re-populate those flags here for the general
+      case, which is consistent with the GCC version of this routine.
+ 
+      Special care should be taken regarding TREE_SIDE_EFFECTS, because some
+      paths introduce side effects where there was none initially (e.g. calls
+      to save_expr), and we also want to keep track of that.  */
+ 
+   TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (ref);
+   TREE_SIDE_EFFECTS (result) |= TREE_SIDE_EFFECTS (ref);
+ 
    return result;
  }
  
*************** gnat_stabilize_reference (tree ref, int 
*** 5258,5264 ****
     arg to force a SAVE_EXPR for everything.  */
  
  static tree
! gnat_stabilize_reference_1 (tree e, int force)
  {
    enum tree_code code = TREE_CODE (e);
    tree type = TREE_TYPE (e);
--- 5748,5754 ----
     arg to force a SAVE_EXPR for everything.  */
  
  static tree
! gnat_stabilize_reference_1 (tree e, bool force)
  {
    enum tree_code code = TREE_CODE (e);
    tree type = TREE_TYPE (e);
*************** gnat_stabilize_reference_1 (tree e, int 
*** 5274,5304 ****
  
    switch (TREE_CODE_CLASS (code))
      {
!     case 'x':
!     case 't':
!     case 'd':
!     case 'b':
!     case '<':
!     case 's':
!     case 'e':
!     case 'r':
!       if (TREE_SIDE_EFFECTS (e) || force)
  	return save_expr (e);
!       return e;
  
!     case 'c':
        /* Constants need no processing.  In fact, we should never reach
  	 here.  */
        return e;
  
!     case '2':
        /* Recursively stabilize each operand.  */
!       result = build (code, type,
! 		      gnat_stabilize_reference_1 (TREE_OPERAND (e, 0), force),
! 		      gnat_stabilize_reference_1 (TREE_OPERAND (e, 1), force));
        break;
  
!     case '1':
        /* Recursively stabilize each operand.  */
        result = build1 (code, type,
  		       gnat_stabilize_reference_1 (TREE_OPERAND (e, 0),
--- 5764,5805 ----
  
    switch (TREE_CODE_CLASS (code))
      {
!     case tcc_exceptional:
!     case tcc_type:
!     case tcc_declaration:
!     case tcc_comparison:
!     case tcc_statement:
!     case tcc_expression:
!     case tcc_reference:
!       /* If this is a COMPONENT_REF of a fat pointer, save the entire
! 	 fat pointer.  This may be more efficient, but will also allow
! 	 us to more easily find the match for the PLACEHOLDER_EXPR.  */
!       if (code == COMPONENT_REF
! 	  && TYPE_FAT_POINTER_P (TREE_TYPE (TREE_OPERAND (e, 0))))
! 	result = build3 (COMPONENT_REF, type,
! 			 gnat_stabilize_reference_1 (TREE_OPERAND (e, 0),
! 						     force),
! 			 TREE_OPERAND (e, 1), TREE_OPERAND (e, 2));
!       else if (TREE_SIDE_EFFECTS (e) || force)
  	return save_expr (e);
!       else
! 	return e;
!       break;
  
!     case tcc_constant:
        /* Constants need no processing.  In fact, we should never reach
  	 here.  */
        return e;
  
!     case tcc_binary:
        /* Recursively stabilize each operand.  */
!       result = build2 (code, type,
! 		       gnat_stabilize_reference_1 (TREE_OPERAND (e, 0), force),
! 		       gnat_stabilize_reference_1 (TREE_OPERAND (e, 1),
! 						   force));
        break;
  
!     case tcc_unary:
        /* Recursively stabilize each operand.  */
        result = build1 (code, type,
  		       gnat_stabilize_reference_1 (TREE_OPERAND (e, 0),
*************** gnat_stabilize_reference_1 (tree e, int 
*** 5306,5453 ****
        break;
  
      default:
!       abort ();
      }
  
    TREE_READONLY (result) = TREE_READONLY (e);
-   return result;
- }
- 
- /* GNAT_UNIT is the Defining_Identifier for some package or subprogram,
-    either a spec or a body, BODY_P says which.  If needed, make a function
-    to be the elaboration routine for that object and perform the elaborations
-    in GNU_ELAB_LIST.
- 
-    Return 1 if we didn't need an elaboration function, zero otherwise.  */
- 
- static int
- build_unit_elab (Entity_Id gnat_unit, int body_p, tree gnu_elab_list)
- {
-   tree gnu_decl;
-   rtx insn;
-   int result = 1;
- 
-   /* If we have nothing to do, return.  */
-   if (gnu_elab_list == 0)
-     return 1;
- 
-   /* Prevent the elaboration list from being reclaimed by the GC.  */
-   gnu_pending_elaboration_lists = chainon (gnu_pending_elaboration_lists,
- 					   gnu_elab_list);
- 
-   /* Set our file and line number to that of the object and set up the
-      elaboration routine.  */
-   gnu_decl = create_subprog_decl (create_concat_name (gnat_unit,
- 						      body_p ?
- 						      "elabb" : "elabs"),
- 				  NULL_TREE, void_ftype, NULL_TREE, 0, 1, 0,
- 				  0);
-   DECL_ELABORATION_PROC_P (gnu_decl) = 1;
- 
-   begin_subprog_body (gnu_decl);
-   set_lineno (gnat_unit, 1);
-   pushlevel (0);
-   gnu_block_stack = tree_cons (NULL_TREE, NULL_TREE, gnu_block_stack);
-   expand_start_bindings (0);
- 
-   /* Emit the assignments for the elaborations we have to do.  If there
-      is no destination, this is just a call to execute some statement
-      that was placed within the declarative region.   But first save a
-      pointer so we can see if any insns were generated.  */
- 
-   insn = get_last_insn ();
- 
-   for (; gnu_elab_list; gnu_elab_list = TREE_CHAIN (gnu_elab_list))
-     if (TREE_PURPOSE (gnu_elab_list) == NULL_TREE)
-       {
- 	if (TREE_VALUE (gnu_elab_list) != 0)
- 	  expand_expr_stmt (TREE_VALUE (gnu_elab_list));
-       }
-     else
-       {
- 	tree lhs = TREE_PURPOSE (gnu_elab_list);
- 
- 	input_location = DECL_SOURCE_LOCATION (lhs);
- 
- 	/* If LHS has a padded type, convert it to the unpadded type
- 	   so the assignment is done properly.  */
- 	if (TREE_CODE (TREE_TYPE (lhs)) == RECORD_TYPE
- 	    && TYPE_IS_PADDING_P (TREE_TYPE (lhs)))
- 	  lhs = convert (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (lhs))), lhs);
  
! 	emit_line_note (input_location);
! 	expand_expr_stmt (build_binary_op (MODIFY_EXPR, NULL_TREE,
! 					   TREE_PURPOSE (gnu_elab_list),
! 					   TREE_VALUE (gnu_elab_list)));
!       }
! 
!   /* See if any non-NOTE insns were generated.  */
!   for (insn = NEXT_INSN (insn); insn; insn = NEXT_INSN (insn))
!     if (GET_RTX_CLASS (GET_CODE (insn)) == 'i')
!       {
! 	result = 0;
! 	break;
!       }
! 
!   expand_end_bindings (getdecls (), kept_level_p (), -1);
!   poplevel (kept_level_p (), 1, 0);
!   gnu_block_stack = TREE_CHAIN (gnu_block_stack);
!   end_subprog_body ();
! 
!   /* We are finished with the elaboration list it can now be discarded.  */
!   gnu_pending_elaboration_lists = TREE_CHAIN (gnu_pending_elaboration_lists);
! 
!   /* If there were no insns, we don't need an elab routine.  It would
!      be nice to not output this one, but there's no good way to do that.  */
    return result;
  }
  
  extern char *__gnat_to_canonical_file_spec (char *);
  
! /* Determine the input_filename and the input_line from the source location
!    (Sloc) of GNAT_NODE node.  Set the global variable input_filename and
!    input_line.  If WRITE_NOTE_P is true, emit a line number note.  */
! 
! void
! set_lineno (Node_Id gnat_node, int write_note_p)
! {
!   Source_Ptr source_location = Sloc (gnat_node);
! 
!   set_lineno_from_sloc (source_location, write_note_p);
! }
! 
! /* Likewise, but passed a Sloc.  */
  
! void
! set_lineno_from_sloc (Source_Ptr source_location, int write_note_p)
  {
    /* If node not from source code, ignore.  */
!   if (source_location < 0)
!     return;
  
    /* Use the identifier table to make a hashed, permanent copy of the filename,
       since the name table gets reallocated after Gigi returns but before all
       the debugging information is output. The __gnat_to_canonical_file_spec
       call translates filenames from pragmas Source_Reference that contain host
       style syntax not understood by gdb. */
!   input_filename
      = IDENTIFIER_POINTER
        (get_identifier
         (__gnat_to_canonical_file_spec
! 	(Get_Name_String
! 	 (Full_Debug_Name (Get_Source_File_Index (source_location))))));
  
-   /* ref_filename is the reference file name as given by sinput (i.e no
-      directory) */
    ref_filename
      = IDENTIFIER_POINTER
        (get_identifier
!        (Get_Name_String
! 	(Debug_Source_Name (Get_Source_File_Index (source_location)))));;
!   input_line = Get_Logical_Line_Number (source_location);
  
!   if (write_note_p)
!     emit_line_note (input_location);
  }
  
  /* Post an error message.  MSG is the error message, properly annotated.
--- 5807,5870 ----
        break;
  
      default:
!       gcc_unreachable ();
      }
  
    TREE_READONLY (result) = TREE_READONLY (e);
  
!   TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (e);
!   TREE_SIDE_EFFECTS (result) |= TREE_SIDE_EFFECTS (e);
    return result;
  }
  
  extern char *__gnat_to_canonical_file_spec (char *);
  
! /* Convert Sloc into *LOCUS (a location_t).  Return true if this Sloc
!    corresponds to a source code location and false if it doesn't.  In the
!    latter case, we don't update *LOCUS.  We also set the Gigi global variable
!    REF_FILENAME to the reference file name as given by sinput (i.e no
!    directory).  */
  
! bool
! Sloc_to_locus (Source_Ptr Sloc, location_t *locus)
  {
    /* If node not from source code, ignore.  */
!   if (Sloc < 0)
!     return false;
  
    /* Use the identifier table to make a hashed, permanent copy of the filename,
       since the name table gets reallocated after Gigi returns but before all
       the debugging information is output. The __gnat_to_canonical_file_spec
       call translates filenames from pragmas Source_Reference that contain host
       style syntax not understood by gdb. */
!   locus->file
      = IDENTIFIER_POINTER
        (get_identifier
         (__gnat_to_canonical_file_spec
! 	(Get_Name_String (Full_Debug_Name (Get_Source_File_Index (Sloc))))));
! 
!   locus->line = Get_Logical_Line_Number (Sloc);
  
    ref_filename
      = IDENTIFIER_POINTER
        (get_identifier
!        (Get_Name_String (Debug_Source_Name (Get_Source_File_Index (Sloc)))));;
  
!   return true;
! }
! 
! /* Similar to annotate_with_locus, but start with the Sloc of GNAT_NODE and
!    don't do anything if it doesn't correspond to a source location.  */
! 
! static void
! annotate_with_node (tree node, Node_Id gnat_node)
! {
!   location_t locus;
! 
!   if (!Sloc_to_locus (Sloc (gnat_node), &locus))
!     return;
! 
!   annotate_with_locus (node, locus);
  }
  
  /* Post an error message.  MSG is the error message, properly annotated.
*************** post_error_ne_tree (const char *msg, Nod
*** 5530,5536 ****
    else
      start_yes = '[', end_yes = ']', start_no = '{', end_no = '}';
  
!   for (p = msg, q = newmsg; *p != 0; p++)
      {
        if (*p == start_yes)
  	for (p++; *p != end_yes; p++)
--- 5947,5953 ----
    else
      start_yes = '[', end_yes = ']', start_no = '{', end_no = '}';
  
!   for (p = msg, q = newmsg; *p; p++)
      {
        if (*p == start_yes)
  	for (p++; *p != end_yes; p++)
*************** set_second_error_entity (Entity_Id e)
*** 5571,5591 ****
    Error_Msg_Node_2 = e;
  }
  
- /* Signal abort, with "Gigi abort" as the error label, and error_gnat_node
-    as the relevant node that provides the location info for the error */
- 
- void
- gigi_abort (int code)
- {
-   String_Template temp = {1, 10};
-   Fat_Pointer fp;
- 
-   fp.Array = "Gigi abort", fp.Bounds = &temp;
- 
-   Current_Error_Node = error_gnat_node;
-   Compiler_Abort (fp, code);
- }
- 
  /* Initialize the table that maps GNAT codes to GCC codes for simple
     binary and unary operations.  */
  
--- 5988,5993 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/treepr.adb gcc-4.0.0/gcc/ada/treepr.adb
*** gcc-3.4.3/gcc/ada/treepr.adb	Tue Oct 21 13:42:23 2003
--- gcc-4.0.0/gcc/ada/treepr.adb	Thu Feb 10 13:50:48 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Treepr is
*** 539,546 ****
           Print_Eol;
        end if;
  
!       Write_Entity_Flags (Ent, Prefix);
  
     end Print_Entity_Info;
  
     ---------------
--- 539,577 ----
           Print_Eol;
        end if;
  
!       if Field_Present (Field24 (Ent)) then
!          Print_Str (Prefix);
!          Write_Field24_Name (Ent);
!          Write_Str (" = ");
!          Print_Field (Field24 (Ent));
!          Print_Eol;
!       end if;
! 
!       if Field_Present (Field25 (Ent)) then
!          Print_Str (Prefix);
!          Write_Field25_Name (Ent);
!          Write_Str (" = ");
!          Print_Field (Field25 (Ent));
!          Print_Eol;
!       end if;
! 
!       if Field_Present (Field26 (Ent)) then
!          Print_Str (Prefix);
!          Write_Field26_Name (Ent);
!          Write_Str (" = ");
!          Print_Field (Field26 (Ent));
!          Print_Eol;
!       end if;
! 
!       if Field_Present (Field27 (Ent)) then
!          Print_Str (Prefix);
!          Write_Field27_Name (Ent);
!          Write_Str (" = ");
!          Print_Field (Field27 (Ent));
!          Print_Eol;
!       end if;
  
+       Write_Entity_Flags (Ent, Prefix);
     end Print_Entity_Info;
  
     ---------------
*************** package body Treepr is
*** 597,615 ****
           Write_Int (Int (Val));
           Write_Char (')');
  
-       elsif Val in Char_Code_Range then
-          Write_Str ("Character code = ");
- 
-          declare
-             C : constant Char_Code := Char_Code (Val - Char_Code_Bias);
- 
-          begin
-             Write_Int (Int (C));
-             Write_Str (" ('");
-             Write_Char_Code (C);
-             Write_Str ("')");
-          end;
- 
        else
           Print_Str ("****** Incorrect value = ");
           Print_Int (Int (Val));
--- 628,633 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/ttypes.ads gcc-4.0.0/gcc/ada/ttypes.ads
*** gcc-3.4.3/gcc/ada/ttypes.ads	Tue Oct 21 13:42:23 2003
--- gcc-4.0.0/gcc/ada/ttypes.ads	Thu Feb 10 13:50:39 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Ttypes is
*** 142,152 ****
     Standard_Character_Size             : constant Pos := Get_Char_Size;
  
     Standard_Wide_Character_Size        : constant Pos := 16;
!    --  The Standard.Wide_Character type is special in the sense that
!    --  it is not defined in terms of its corresponding C type (wchar_t).
!    --  Unfortunately this makes the representation of Wide_Character
!    --  incompatible with the C wchar_t type.
!    --  ??? This is required by the RM or backward compatibility
  
     --  Note: there is no specific control over the representation of
     --  enumeration types. The convention used is that if an enumeration
--- 142,149 ----
     Standard_Character_Size             : constant Pos := Get_Char_Size;
  
     Standard_Wide_Character_Size        : constant Pos := 16;
!    Standard_Wide_Wide_Character_Size   : constant Pos := 32;
!    --  Standard wide character sizes.
  
     --  Note: there is no specific control over the representation of
     --  enumeration types. The convention used is that if an enumeration
diff -Nrcpad gcc-3.4.3/gcc/ada/types.adb gcc-4.0.0/gcc/ada/types.adb
*** gcc-3.4.3/gcc/ada/types.adb	Thu Apr 24 17:54:20 2003
--- gcc-4.0.0/gcc/ada/types.adb	Thu Feb 10 13:50:39 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2001 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Types is
*** 153,158 ****
--- 153,168 ----
     end Get_Hex_String;
  
     ------------------------
+    -- Get_Wide_Character --
+    ------------------------
+ 
+    function Get_Wide_Character (C : Char_Code) return Wide_Character is
+    begin
+       pragma Assert (C <= 65535);
+       return Wide_Character'Val (C);
+    end Get_Wide_Character;
+ 
+    ------------------------
     -- In_Character_Range --
     ------------------------
  
*************** package body Types is
*** 161,166 ****
--- 171,185 ----
        return (C <= 255);
     end In_Character_Range;
  
+    -----------------------------
+    -- In_Wide_Character_Range --
+    -----------------------------
+ 
+    function In_Wide_Character_Range (C : Char_Code) return Boolean is
+    begin
+       return (C <= 65535);
+    end In_Wide_Character_Range;
+ 
     ---------------------
     -- Make_Time_Stamp --
     ---------------------
diff -Nrcpad gcc-3.4.3/gcc/ada/types.ads gcc-4.0.0/gcc/ada/types.ads
*** gcc-3.4.3/gcc/ada/types.ads	Fri Nov 21 10:46:37 2003
--- gcc-4.0.0/gcc/ada/types.ads	Thu Feb 10 13:50:39 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** pragma Preelaborate (Types);
*** 106,111 ****
--- 106,115 ----
  
     subtype Line_Terminator is Character range ASCII.LF .. ASCII.CR;
     --  Line terminator characters (LF, VT, FF, CR)
+    --  This definition is dubious now that we have two more wide character
+    --  sequences that constitute a line terminator. Every reference to
+    --  this subtype needs checking to make sure the wide character case
+    --  is handled appropriately.
  
     subtype Upper_Half_Character is
       Character range Character'Val (16#80#) .. Character'Val (16#FF#);
*************** pragma Preelaborate (Types);
*** 234,240 ****
     --    Strings (type String_Id)
     --    Universal integers (type Uint)
     --    Universal reals (type Ureal)
-    --    Character codes (type Char_Code stored with a bias)
  
     --  In most contexts, the strongly typed interface determines which of
     --  these types is present. However, there are some situations (involving
--- 238,243 ----
*************** pragma Preelaborate (Types);
*** 325,334 ****
     --  The range of Uint values is very large, since a substantial part
     --  of this range is used to store direct values, see Uintp for details.
  
-    Char_Code_Bias : constant := 2_100_000_000;
-    --  A bias value added to character code values stored in the tree which
-    --  ensures that they have different values from any of the above types.
- 
     --  The following subtype definitions are used to provide convenient names
     --  for membership tests on Int values to see what data type range they
     --  lie in. Such tests appear only in the lowest level packages.
--- 328,333 ----
*************** pragma Preelaborate (Types);
*** 357,365 ****
     subtype Ureal_Range     is Union_Id
       range Ureal_Low_Bound    .. Ureal_High_Bound;
  
-    subtype Char_Code_Range is Union_Id
-      range Char_Code_Bias    .. Char_Code_Bias + 2**16 - 1;
- 
     -----------------------------
     -- Types for Namet Package --
     -----------------------------
--- 356,361 ----
*************** pragma Preelaborate (Types);
*** 525,540 ****
     --  The type Char is used for character data internally in the compiler,
     --  but character codes in the source are represented by the Char_Code
     --  type. Each character literal in the source is interpreted as being one
!    --  of the 2**16 possible Wide_Character codes, and a unique integer value
!    --  is assigned, corresponding to the POS value in the Wide_Character type.
!    --  String literals are similarly interpreted as a sequence of such codes.
  
!    --  Note: when character code values are stored in the tree, they are stored
!    --  by adding a bias value (Char_Code_Bias) that results in values that can
!    --  be distinguished from other types of values stored in the tree.
  
!    type Char_Code is mod 2 ** 16;
!    for Char_Code'Size use 16;
  
     function Get_Char_Code (C : Character) return Char_Code;
     pragma Inline (Get_Char_Code);
--- 521,539 ----
     --  The type Char is used for character data internally in the compiler,
     --  but character codes in the source are represented by the Char_Code
     --  type. Each character literal in the source is interpreted as being one
!    --  of the 16#8000_0000 possible Wide_Wide_Character codes, and a unique
!    --  Integer Value is assigned, corresponding to the UTF_32 value, which
!    --  also correspondds to the POS value in the Wide_Wide_Character type,
!    --  and also corresponds to the POS value in the Wide_Character and
!    --  Character types for values that are in appropriate range. String
!    --  literals are similarly interpreted as a sequence of such codes.
  
!    type Char_Code_Base is mod 2 ** 32;
!    for Char_Code_Base'Size use 32;
  
!    subtype Char_Code is Char_Code_Base range 0 .. 16#7FFF_FFFF#;
!    for Char_Code'Value_Size use 32;
!    for Char_Code'Object_Size use 32;
  
     function Get_Char_Code (C : Character) return Char_Code;
     pragma Inline (Get_Char_Code);
*************** pragma Preelaborate (Types);
*** 548,558 ****
     --  Determines if the given character code is in range of type Character,
     --  and if so, returns True. If not, returns False.
  
     function Get_Character (C : Char_Code) return Character;
     pragma Inline (Get_Character);
!    --  For a character C that is in character range (see above function), this
     --  function returns the corresponding Character value. It is an error to
!    --  call Get_Character if C is not in character range
  
     ---------------------------------------
     -- Types used for Library Management --
--- 547,567 ----
     --  Determines if the given character code is in range of type Character,
     --  and if so, returns True. If not, returns False.
  
+    function In_Wide_Character_Range (C : Char_Code) return Boolean;
+    pragma Inline (In_Wide_Character_Range);
+    --  Determines if the given character code is in range of the type
+    --  Wide_Character, and if so, returns True. If not, returns False.
+ 
     function Get_Character (C : Char_Code) return Character;
     pragma Inline (Get_Character);
!    --  For a character C that is in Character range (see above function), this
     --  function returns the corresponding Character value. It is an error to
!    --  call Get_Character if C is not in C haracter range
! 
!    function Get_Wide_Character (C : Char_Code) return Wide_Character;
!    --  For a character C that is in Wide_Character range (see above function),
!    --  this function returns the corresponding Wide_Character value. It is an
!    --  error to call Get_Wide_Character if C is not in Wide_Character range.
  
     ---------------------------------------
     -- Types used for Library Management --
*************** pragma Preelaborate (Types);
*** 768,773 ****
--- 777,783 ----
       CE_Index_Check_Failed,
       CE_Invalid_Data,
       CE_Length_Check_Failed,
+      CE_Null_Not_Allowed,
       CE_Overflow_Check_Failed,
       CE_Partition_Check_Failed,
       CE_Range_Check_Failed,
*************** pragma Preelaborate (Types);
*** 785,790 ****
--- 795,801 ----
       PE_Potentially_Blocking_Operation,
       PE_Stubbed_Subprogram_Called,
       PE_Unchecked_Union_Restriction,
+      PE_Illegal_RACW_E_4_18,
  
       SE_Empty_Storage_Pool,
       SE_Explicit_Raise,
*************** pragma Preelaborate (Types);
*** 798,804 ****
  
     subtype RT_PE_Exceptions is RT_Exception_Code range
       PE_Access_Before_Elaboration ..
!      PE_Unchecked_Union_Restriction;
  
     subtype RT_SE_Exceptions is RT_Exception_Code range
       SE_Empty_Storage_Pool ..
--- 809,815 ----
  
     subtype RT_PE_Exceptions is RT_Exception_Code range
       PE_Access_Before_Elaboration ..
!      PE_Illegal_RACW_E_4_18;
  
     subtype RT_SE_Exceptions is RT_Exception_Code range
       SE_Empty_Storage_Pool ..
diff -Nrcpad gcc-3.4.3/gcc/ada/types.h gcc-4.0.0/gcc/ada/types.h
*** gcc-3.4.3/gcc/ada/types.h	Tue Oct 21 13:42:23 2003
--- gcc-4.0.0/gcc/ada/types.h	Thu Feb 10 13:50:40 2005
***************
*** 6,12 ****
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 1992-2003, Free Software Foundation, Inc.         *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
--- 6,12 ----
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 1992-2005, Free Software Foundation, Inc.         *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
*************** typedef int Union_Id;
*** 161,168 ****
  #define Uint_Table_Start        2000000000
  #define Uint_High_Bound	        2099999999
  
- #define Char_Code_Bias		2100000000
- 
  SUBTYPE (List_Range,      Int, List_Low_Bound,    List_High_Bound)
  SUBTYPE (Node_Range,      Int, Node_Low_Bound,    Node_High_Bound)
  SUBTYPE (Elist_Range,     Int, Elist_Low_Bound,   Elist_High_Bound)
--- 161,166 ----
*************** SUBTYPE (Names_Range,     Int, Names_Low
*** 171,177 ****
  SUBTYPE (Strings_Range,   Int, Strings_Low_Bound, Strings_High_Bound)
  SUBTYPE (Uint_Range,      Int, Uint_Low_Bound,    Uint_High_Bound)
  SUBTYPE (Ureal_Range,     Int, Ureal_Low_Bound,   Ureal_High_Bound)
- SUBTYPE (Char_Code_Range, Int, Char_Code_Bias,    (Char_Code_Bias + 65535))
  
  /* Types for Names_Table Package:  */
  
--- 169,174 ----
*************** typedef Int Ureal;
*** 286,293 ****
  
  /* Character Code Type:  */
  
! /* Character code value, intended to be 16 bits.  */
! typedef short Char_Code;
  
  /* Types Used for Library Management:  */
  
--- 283,290 ----
  
  /* Character Code Type:  */
  
! /* Character code value, intended to be 32 bits.  */
! typedef unsigned Char_Code;
  
  /* Types Used for Library Management:  */
  
*************** typedef Int Mechanism_Type;
*** 341,366 ****
  #define CE_Index_Check_Failed               5
  #define CE_Invalid_Data                     6
  #define CE_Length_Check_Failed              7
! #define CE_Overflow_Check_Failed            8
! #define CE_Partition_Check_Failed           9
! #define CE_Range_Check_Failed              10
! #define CE_Tag_Check_Failed                11
! #define PE_Access_Before_Elaboration       12
! #define PE_Accessibility_Check_Failed      13
! #define PE_All_Guards_Closed               14
! #define PE_Duplicated_Entry_Address        15
! #define PE_Explicit_Raise                  16
! #define PE_Finalize_Raised_Exception       17
! #define PE_Misaligned_Address_Value        18
! #define PE_Missing_Return                  19
! #define PE_Overlaid_Controlled_Object      20
! #define PE_Potentially_Blocking_Operation  21
! #define PE_Stubbed_Subprogram_Called       22
! #define PE_Unchecked_Union_Restriction     23
! #define SE_Empty_Storage_Pool              24
! #define SE_Explicit_Raise                  25
! #define SE_Infinite_Recursion              26
! #define SE_Object_Too_Large                27
! #define SE_Restriction_Violation           28
  
! #define LAST_REASON_CODE                   28
--- 338,365 ----
  #define CE_Index_Check_Failed               5
  #define CE_Invalid_Data                     6
  #define CE_Length_Check_Failed              7
! #define CE_Null_Not_Allowed                 8
! #define CE_Overflow_Check_Failed            9
! #define CE_Partition_Check_Failed          10
! #define CE_Range_Check_Failed              11
! #define CE_Tag_Check_Failed                12
! #define PE_Access_Before_Elaboration       13
! #define PE_Accessibility_Check_Failed      14
! #define PE_All_Guards_Closed               15
! #define PE_Duplicated_Entry_Address        16
! #define PE_Explicit_Raise                  17
! #define PE_Finalize_Raised_Exception       18
! #define PE_Misaligned_Address_Value        19
! #define PE_Missing_Return                  20
! #define PE_Overlaid_Controlled_Object      21
! #define PE_Potentially_Blocking_Operation  22
! #define PE_Stubbed_Subprogram_Called       23
! #define PE_Unchecked_Union_Restriction     24
! #define PE_Illegal_RACW_E_4_18             25
! #define SE_Empty_Storage_Pool              26
! #define SE_Explicit_Raise                  27
! #define SE_Infinite_Recursion              28
! #define SE_Object_Too_Large                29
! #define SE_Restriction_Violation           30
  
! #define LAST_REASON_CODE                   30
diff -Nrcpad gcc-3.4.3/gcc/ada/ug_words gcc-4.0.0/gcc/ada/ug_words
*** gcc-3.4.3/gcc/ada/ug_words	Wed Jun  9 09:20:44 2004
--- gcc-4.0.0/gcc/ada/ug_words	Mon Jan  3 15:43:22 2005
*************** gnatls          ^ GNAT LIST
*** 30,43 ****
  Gnatls          ^ GNAT LIST
  gnatmake        ^ GNAT MAKE
  Gnatmake        ^ GNAT MAKE
  gnatname        ^ GNAT NAME
  Gnatname        ^ GNAT NAME
  gnatpp          ^ GNAT PRETTY
  Gnatpp          ^ GNAT PRETTY
  gnatprep        ^ GNAT PREPROCESS
  Gnatprep        ^ GNAT PREPROCESS
- gnatpsta        ^ GNAT STANDARD
- Gnatpsta        ^ GNAT STANDARD
  gnatstub        ^ GNAT STUB
  Gnatstub        ^ GNAT STUB
  gnatxref        ^ GNAT XREF
--- 30,43 ----
  Gnatls          ^ GNAT LIST
  gnatmake        ^ GNAT MAKE
  Gnatmake        ^ GNAT MAKE
+ gnatmetric      ^ GNAT METRIC
+ Gnatmetric      ^ GNAT METRIC
  gnatname        ^ GNAT NAME
  Gnatname        ^ GNAT NAME
  gnatpp          ^ GNAT PRETTY
  Gnatpp          ^ GNAT PRETTY
  gnatprep        ^ GNAT PREPROCESS
  Gnatprep        ^ GNAT PREPROCESS
  gnatstub        ^ GNAT STUB
  Gnatstub        ^ GNAT STUB
  gnatxref        ^ GNAT XREF
*************** gcc             ^ GNAT COMPILE
*** 46,51 ****
--- 46,52 ----
  gcc -c          ^ GNAT COMPILE
  -fno-inline     ^ /INLINE=SUPPRESS
  -fstack-check   ^ /CHECKS=STACK
+ -fno-strict-aliasing ^ /OPTIMIZE=NO_STRICT_ALIASING
  -gnata          ^ /CHECKS=ASSERTIONS
  -gnatA          ^ /NO_GNAT_ADC
  -gnatb          ^ /REPORT_ERRORS=BRIEF
diff -Nrcpad gcc-3.4.3/gcc/ada/uintp.adb gcc-4.0.0/gcc/ada/uintp.adb
*** gcc-3.4.3/gcc/ada/uintp.adb	Tue Oct 21 13:42:23 2003
--- gcc-4.0.0/gcc/ada/uintp.adb	Thu Feb 10 13:50:48 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Uintp is
*** 1559,1564 ****
--- 1559,1573 ----
        end;
     end UI_Expon;
  
+    ----------------
+    -- UI_From_CC --
+    ----------------
+ 
+    function UI_From_CC (Input : Char_Code) return Uint is
+    begin
+       return UI_From_Dint (Dint (Input));
+    end UI_From_CC;
+ 
     ------------------
     -- UI_From_Dint --
     ------------------
*************** package body Uintp is
*** 2384,2389 ****
--- 2393,2431 ----
        end if;
     end UI_Sub;
  
+    --------------
+    -- UI_To_CC --
+    --------------
+ 
+    function UI_To_CC (Input : Uint) return Char_Code is
+    begin
+       if Direct (Input) then
+          return Char_Code (Direct_Val (Input));
+ 
+       --  Case of input is more than one digit
+ 
+       else
+          declare
+             In_Length : constant Int := N_Digits (Input);
+             In_Vec    : UI_Vector (1 .. In_Length);
+             Ret_CC    : Char_Code;
+ 
+          begin
+             Init_Operand (Input, In_Vec);
+ 
+             --  We assume value is positive
+ 
+             Ret_CC := 0;
+             for Idx in In_Vec'Range loop
+                Ret_CC := Ret_CC * Char_Code (Base) +
+                                   Char_Code (abs In_Vec (Idx));
+             end loop;
+ 
+             return Ret_CC;
+          end;
+       end if;
+    end UI_To_CC;
+ 
     ----------------
     -- UI_To_Int --
     ----------------
diff -Nrcpad gcc-3.4.3/gcc/ada/uintp.ads gcc-4.0.0/gcc/ada/uintp.ads
*** gcc-3.4.3/gcc/ada/uintp.ads	Tue Oct 21 13:42:23 2003
--- gcc-4.0.0/gcc/ada/uintp.ads	Thu Feb 10 13:50:48 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Uintp is
*** 100,111 ****
     --  gigi processing.
  
     procedure Tree_Read;
!    --  Initializes internal tables from current tree file using Tree_Read.
!    --  Note that Initialize should not be called if Tree_Read is used.
!    --  Tree_Read includes all necessary initialization.
  
     procedure Tree_Write;
!    --  Writes out internal tables to current tree file using Tree_Write.
  
     function UI_Abs (Right : Uint) return Uint;
     pragma Inline (UI_Abs);
--- 100,112 ----
     --  gigi processing.
  
     procedure Tree_Read;
!    --  Initializes internal tables from current tree file using the relevant
!    --  Table.Tree_Read routines. Note that Initialize should not be called if
!    --  Tree_Read is used. Tree_Read includes all necessary initialization.
  
     procedure Tree_Write;
!    --  Writes out internal tables to current tree file using the relevant
!    --  Table.Tree_Write routines.
  
     function UI_Abs (Right : Uint) return Uint;
     pragma Inline (UI_Abs);
*************** package Uintp is
*** 221,234 ****
     --  Returns difference of two integer values
  
     function UI_From_Dint (Input : Dint) return Uint;
!    --  Converts Dint value to universal integer form.
  
     function UI_From_Int (Input : Int) return Uint;
!    --  Converts Int value to universal integer form.
  
     function UI_To_Int (Input : Uint) return Int;
!    --  Converts universal integer value to Int. Fatal error
!    --  if value is not in appropriate range.
  
     function Num_Bits (Input : Uint) return Nat;
     --  Approximate number of binary bits in given universal integer.
--- 222,242 ----
     --  Returns difference of two integer values
  
     function UI_From_Dint (Input : Dint) return Uint;
!    --  Converts Dint value to universal integer form
  
     function UI_From_Int (Input : Int) return Uint;
!    --  Converts Int value to universal integer form
! 
!    function UI_From_CC (Input : Char_Code) return Uint;
!    --  Converts Char_Code value to universal integer form
  
     function UI_To_Int (Input : Uint) return Int;
!    --  Converts universal integer value to Int. Fatal error if value is not in
!    --  appropriate range.
! 
!    function UI_To_CC (Input : Uint) return Char_Code;
!    --  Converts universal integer value to Char_Code. Fatal error if value is
!    --  not in Char_Code range.
  
     function Num_Bits (Input : Uint) return Nat;
     --  Approximate number of binary bits in given universal integer.
diff -Nrcpad gcc-3.4.3/gcc/ada/uintp.h gcc-4.0.0/gcc/ada/uintp.h
*** gcc-3.4.3/gcc/ada/uintp.h	Tue Oct 21 13:42:23 2003
--- gcc-4.0.0/gcc/ada/uintp.h	Thu Feb 10 13:50:48 2005
***************
*** 6,12 ****
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 1992-2002, Free Software Foundation, Inc.         *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
--- 6,12 ----
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 1992-2005, Free Software Foundation, Inc.         *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
*************** struct Uint_Entry
*** 39,44 ****
--- 39,48 ----
  #define UI_Is_In_Int_Range  uintp__ui_is_in_int_range
  extern Boolean UI_Is_In_Int_Range	(Uint);
  
+ /* Obtain Char_Code value from Uint input. Value must be in range.  */
+ #define UI_To_CC uintp__ui_to_cc
+ extern Char_Code UI_To_CC               (Uint);
+ 
  /* Obtain Int value from Uint input. This will abort if the result is
     out of range.  */
  #define UI_To_Int uintp__ui_to_int
*************** extern Int UI_To_Int			(Uint);
*** 48,53 ****
--- 52,61 ----
  #define UI_From_Int uintp__ui_from_int
  extern Uint UI_From_Int			(int);
  
+ /* Convert a Char_Code into a Uint.  */
+ #define UI_From_CC uintp__ui_from_cc
+ extern Uint UI_From_CC                  (Char_Code);
+ 
  /* Similarly, but return a GCC INTEGER_CST.  Overflow is tested by the
     constant-folding used to build the node.  TYPE is the GCC type of the
     resulting node.  */
diff -Nrcpad gcc-3.4.3/gcc/ada/uname.adb gcc-4.0.0/gcc/ada/uname.adb
*** gcc-3.4.3/gcc/ada/uname.adb	Tue Oct 21 13:42:23 2003
--- gcc-4.0.0/gcc/ada/uname.adb	Tue Jul  6 13:57:32 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Uname is
*** 352,360 ****
           return N;
        end Get_Parent;
  
!    --------------------------------------------
!    --  Start of Processing for Get_Unit_Name --
!    --------------------------------------------
  
     begin
        Node := N;
--- 352,360 ----
           return N;
        end Get_Parent;
  
!    -------------------------------------------
!    -- Start of Processing for Get_Unit_Name --
!    -------------------------------------------
  
     begin
        Node := N;
diff -Nrcpad gcc-3.4.3/gcc/ada/urealp.ads gcc-4.0.0/gcc/ada/urealp.ads
*** gcc-3.4.3/gcc/ada/urealp.ads	Tue Oct 21 13:42:23 2003
--- gcc-4.0.0/gcc/ada/urealp.ads	Mon Jan  3 15:43:24 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package Urealp is
*** 139,150 ****
     --  during Gigi processing.
  
     procedure Tree_Read;
!    --  Initializes internal tables from current tree file using Tree_Read.
!    --  Note that Initialize should not be called if Tree_Read is used.
!    --  Tree_Read includes all necessary initialization.
  
     procedure Tree_Write;
!    --  Writes out internal tables to current tree file using Tree_Write
  
     function Rbase (Real : Ureal) return Nat;
     --  Return the base of the universal real.
--- 139,151 ----
     --  during Gigi processing.
  
     procedure Tree_Read;
!    --  Initializes internal tables from current tree file using the relevant
!    --  Table.Tree_Read routines. Note that Initialize should not be called if
!    --  Tree_Read is used. Tree_Read includes all necessary initialization.
  
     procedure Tree_Write;
!    --  Writes out internal tables to current tree file using the relevant
!    --  Table.Tree_Write routines.
  
     function Rbase (Real : Ureal) return Nat;
     --  Return the base of the universal real.
diff -Nrcpad gcc-3.4.3/gcc/ada/usage.adb gcc-4.0.0/gcc/ada/usage.adb
*** gcc-3.4.3/gcc/ada/usage.adb	Mon Jan 12 11:45:26 2004
--- gcc-4.0.0/gcc/ada/usage.adb	Thu Feb 10 13:56:59 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** begin
*** 134,142 ****
     Write_Switch_Char ("c");
     Write_Line ("Check syntax and semantics only (no code generation)");
  
-    Write_Switch_Char ("C");
-    Write_Line ("Compress names in external names and debug info tables");
- 
     --  Line for -gnatd switch
  
     Write_Switch_Char ("d?");
--- 134,139 ----
*************** begin
*** 162,167 ****
--- 159,169 ----
     Write_Switch_Char ("ef");
     Write_Line ("Full source path in brief error messages");
  
+    --  Line for -gnateI switch
+ 
+    Write_Switch_Char ("eInnn");
+    Write_Line ("Index in multi-unit source, e.g. -gnateI2");
+ 
     --  Line for -gnatem switch
  
     Write_Switch_Char ("em=?");
*************** begin
*** 267,276 ****
     Write_Switch_Char ("Q");
     Write_Line ("Don't quit, write ali/tree file even if compile errors");
  
!    --  Line for -gnatR switch
  
     Write_Switch_Char ("R?");
!    Write_Line ("List rep inf (?=0/1/2/3 for none/types/all/variable)");
  
     --  Lines for -gnats switch
  
--- 269,280 ----
     Write_Switch_Char ("Q");
     Write_Line ("Don't quit, write ali/tree file even if compile errors");
  
!    --  Lines for -gnatR switch
  
     Write_Switch_Char ("R?");
!    Write_Line ("List rep info (?=0/1/2/3 for none/types/all/variable)");
!    Write_Switch_Char ("R?s");
!    Write_Line ("List rep info to file.rep instead of standard output");
  
     --  Lines for -gnats switch
  
*************** begin
*** 371,378 ****
     Write_Line ("        n*   normal warning mode (cancels -gnatws/-gnatwe)");
     Write_Line ("        o*   turn on warnings for address clause overlay");
     Write_Line ("        O    turn off warnings for address clause overlay");
!    Write_Line ("        p    turn on warnings for ineffective pragma inline");
!    Write_Line ("        P*   turn off warnings for ineffective pragma inline");
     Write_Line ("        r    turn on warnings for redundant construct");
     Write_Line ("        R*   turn off warnings for redundant construct");
     Write_Line ("        s    suppress all warnings");
--- 375,382 ----
     Write_Line ("        n*   normal warning mode (cancels -gnatws/-gnatwe)");
     Write_Line ("        o*   turn on warnings for address clause overlay");
     Write_Line ("        O    turn off warnings for address clause overlay");
!    Write_Line ("        p    turn on warnings for ineffective pragma Inline");
!    Write_Line ("        P*   turn off warnings for ineffective pragma Inline");
     Write_Line ("        r    turn on warnings for redundant construct");
     Write_Line ("        R*   turn off warnings for redundant construct");
     Write_Line ("        s    suppress all warnings");
*************** begin
*** 418,425 ****
     --  Lines for -gnaty switch
  
     Write_Switch_Char ("y");
!    Write_Line ("Enable all style checks except 'o', indent=3");
! 
     Write_Switch_Char ("yxx");
     Write_Line ("Enable selected style checks xx = list of parameters:");
     Write_Line ("        1-9  check indentation");
--- 422,428 ----
     --  Lines for -gnaty switch
  
     Write_Switch_Char ("y");
!    Write_Line ("Enable default style checks (same as -gnaty3abcefhiklmnprst)");
     Write_Switch_Char ("yxx");
     Write_Line ("Enable selected style checks xx = list of parameters:");
     Write_Line ("        1-9  check indentation");
*************** begin
*** 432,437 ****
--- 435,441 ----
     Write_Line ("        i    check if-then layout");
     Write_Line ("        k    check casing rules for keywords");
     Write_Line ("        l    check reference manual layout");
+    Write_Line ("        Lnnn check max nest level < nnn");
     Write_Line ("        m    check line length <= 79 characters");
     Write_Line ("        n    check casing of package Standard identifiers");
     Write_Line ("        Mnnn check line length <= nnn characters");
*************** begin
*** 440,445 ****
--- 444,455 ----
     Write_Line ("        r    check casing for identifier references");
     Write_Line ("        s    check separate subprogram specs present");
     Write_Line ("        t    check token separation rules");
+    Write_Line ("        x    check extra parens around conditionals");
+ 
+    --  Lines for -gnatyN switch
+ 
+    Write_Switch_Char ("yN");
+    Write_Line ("Cancel all previously set style checks");
  
     --  Lines for -gnatz switch
  
*************** begin
*** 456,459 ****
--- 466,474 ----
     Write_Switch_Char ("83");
     Write_Line ("Enforce Ada 83 restrictions");
  
+    --  Line for -gnat05 switch
+ 
+    Write_Switch_Char ("05");
+    Write_Line ("Allow Ada 2005 extensions");
+ 
  end Usage;
diff -Nrcpad gcc-3.4.3/gcc/ada/utils.c gcc-4.0.0/gcc/ada/utils.c
*** gcc-3.4.3/gcc/ada/utils.c	Mon Nov 24 17:18:19 2003
--- gcc-4.0.0/gcc/ada/utils.c	Mon Apr  4 15:46:22 2005
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *          Copyright (C) 1992-2003, Free Software Foundation, Inc.         *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *          Copyright (C) 1992-2005, Free Software Foundation, Inc.         *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
***************
*** 36,41 ****
--- 36,47 ----
  #include "ggc.h"
  #include "debug.h"
  #include "convert.h"
+ #include "target.h"
+ #include "function.h"
+ #include "cgraph.h"
+ #include "tree-inline.h"
+ #include "tree-gimple.h"
+ #include "tree-dump.h"
  
  #include "ada.h"
  #include "types.h"
*************** tree gnat_raise_decls[(int) LAST_REASON_
*** 73,93 ****
     of `save_gnu_tree' for more info.  */
  static GTY((length ("max_gnat_nodes"))) tree *associate_gnat_to_gnu;
  
- /* This listhead is used to record any global objects that need elaboration.
-    TREE_PURPOSE is the variable to be elaborated and TREE_VALUE is the
-    initial value to assign.  */
- 
- static GTY(()) tree pending_elaborations;
- 
- /* This stack allows us to momentarily switch to generating elaboration
-    lists for an inner context.  */
- 
- struct e_stack GTY(()) {
-   struct e_stack *next;
-   tree elab_list;
- };
- static GTY(()) struct e_stack *elist_stack;
- 
  /* This variable keeps a table for types for each precision so that we only
     allocate each of them once. Signed and unsigned types are kept separate.
  
--- 79,84 ----
*************** static GTY(()) tree signed_and_unsigned_
*** 99,159 ****
  /* Likewise for float types, but record these by mode.  */
  static GTY(()) tree float_types[NUM_MACHINE_MODES];
  
! /* For each binding contour we allocate a binding_level structure which records
!    the entities defined or declared in that contour. Contours include:
! 
! 	the global one
! 	one for each subprogram definition
! 	one for each compound statement (declare block)
! 
!    Binding contours are used to create GCC tree BLOCK nodes.  */
  
! struct binding_level GTY(())
  {
-   /* A chain of ..._DECL nodes for all variables, constants, functions,
-      parameters and type declarations.  These ..._DECL nodes are chained
-      through the TREE_CHAIN field. Note that these ..._DECL nodes are stored
-      in the reverse of the order supplied to be compatible with the
-      back-end.  */
-   tree names;
-   /* For each level (except the global one), a chain of BLOCK nodes for all
-      the levels that were entered and exited one level down from this one.  */
-   tree blocks;
-   /* The BLOCK node for this level, if one has been preallocated.
-      If 0, the BLOCK is allocated (if needed) when the level is popped.  */
-   tree this_block;
    /* The binding level containing this one (the enclosing binding level). */
!   struct binding_level *level_chain;
  };
  
  /* The binding level currently in effect.  */
! static GTY(()) struct binding_level *current_binding_level;
! 
! /* A chain of binding_level structures awaiting reuse.  */
! static GTY((deletable (""))) struct binding_level *free_binding_level;
  
! /* The outermost binding level. This binding level is created when the
!    compiler is started and it will exist through the entire compilation.  */
! static struct binding_level *global_binding_level;
  
! /* Binding level structures are initialized by copying this one.  */
! static struct binding_level clear_binding_level = {NULL, NULL, NULL, NULL};
  
  struct language_function GTY(())
  {
    int unused;
  };
  
! static tree merge_sizes (tree, tree, tree, int, int);
  static tree compute_related_constant (tree, tree);
  static tree split_plus (tree, tree *);
! static int value_zerop (tree);
  static tree float_type_for_precision (int, enum machine_mode);
  static tree convert_to_fat_pointer (tree, tree);
  static tree convert_to_thin_pointer (tree, tree);
  static tree make_descriptor_field (const char *,tree, tree, tree);
! static int value_factor_p (tree, int);
! static int potential_alignment_gap (tree, tree, tree);
  
  /* Initialize the association of GNAT nodes to GCC trees.  */
  
--- 90,135 ----
  /* Likewise for float types, but record these by mode.  */
  static GTY(()) tree float_types[NUM_MACHINE_MODES];
  
! /* For each binding contour we allocate a binding_level structure to indicate
!    the binding depth.  */
  
! struct gnat_binding_level GTY((chain_next ("%h.chain")))
  {
    /* The binding level containing this one (the enclosing binding level). */
!   struct gnat_binding_level *chain;
!   /* The BLOCK node for this level.  */
!   tree block;
!   /* If nonzero, the setjmp buffer that needs to be updated for any
!      variable-sized definition within this context.  */
!   tree jmpbuf_decl;
  };
  
  /* The binding level currently in effect.  */
! static GTY(()) struct gnat_binding_level *current_binding_level;
  
! /* A chain of gnat_binding_level structures awaiting reuse.  */
! static GTY((deletable)) struct gnat_binding_level *free_binding_level;
  
! /* A chain of unused BLOCK nodes. */
! static GTY((deletable)) tree free_block_chain;
  
  struct language_function GTY(())
  {
    int unused;
  };
  
! static void gnat_install_builtins (void);
! static tree merge_sizes (tree, tree, tree, bool, bool);
  static tree compute_related_constant (tree, tree);
  static tree split_plus (tree, tree *);
! static bool value_zerop (tree);
! static void gnat_gimplify_function (tree);
  static tree float_type_for_precision (int, enum machine_mode);
  static tree convert_to_fat_pointer (tree, tree);
  static tree convert_to_thin_pointer (tree, tree);
  static tree make_descriptor_field (const char *,tree, tree, tree);
! static bool value_factor_p (tree, HOST_WIDE_INT);
! static bool potential_alignment_gap (tree, tree, tree);
  
  /* Initialize the association of GNAT nodes to GCC trees.  */
  
*************** init_gnat_to_gnu (void)
*** 162,169 ****
  {
    associate_gnat_to_gnu
      = (tree *) ggc_alloc_cleared (max_gnat_nodes * sizeof (tree));
- 
-   pending_elaborations = build_tree_list (NULL_TREE, NULL_TREE);
  }
  
  /* GNAT_ENTITY is a GNAT tree node for an entity.   GNU_DECL is the GCC tree
--- 138,143 ----
*************** init_gnat_to_gnu (void)
*** 173,189 ****
     If GNU_DECL is zero, a previous association is to be reset.  */
  
  void
! save_gnu_tree (Entity_Id gnat_entity, tree gnu_decl, int no_check)
  {
    /* Check that GNAT_ENTITY is not already defined and that it is being set
       to something which is a decl.  Raise gigi 401 if not.  Usually, this
       means GNAT_ENTITY is defined twice, but occasionally is due to some
       Gigi problem.  */
!   if (gnu_decl
!       && (associate_gnat_to_gnu[gnat_entity - First_Node_Id]
! 	  || (! no_check && ! DECL_P (gnu_decl))))
!     gigi_abort (401);
! 
    associate_gnat_to_gnu[gnat_entity - First_Node_Id] = gnu_decl;
  }
  
--- 147,161 ----
     If GNU_DECL is zero, a previous association is to be reset.  */
  
  void
! save_gnu_tree (Entity_Id gnat_entity, tree gnu_decl, bool no_check)
  {
    /* Check that GNAT_ENTITY is not already defined and that it is being set
       to something which is a decl.  Raise gigi 401 if not.  Usually, this
       means GNAT_ENTITY is defined twice, but occasionally is due to some
       Gigi problem.  */
!   gcc_assert (!gnu_decl
! 	      || (!associate_gnat_to_gnu[gnat_entity - First_Node_Id]
! 		  && (no_check || DECL_P (gnu_decl))));
    associate_gnat_to_gnu[gnat_entity - First_Node_Id] = gnu_decl;
  }
  
*************** save_gnu_tree (Entity_Id gnat_entity, tr
*** 197,214 ****
  tree
  get_gnu_tree (Entity_Id gnat_entity)
  {
!   if (! associate_gnat_to_gnu[gnat_entity - First_Node_Id])
!     gigi_abort (402);
! 
    return associate_gnat_to_gnu[gnat_entity - First_Node_Id];
  }
  
  /* Return nonzero if a GCC tree has been associated with GNAT_ENTITY.  */
  
! int
  present_gnu_tree (Entity_Id gnat_entity)
  {
!   return (associate_gnat_to_gnu[gnat_entity - First_Node_Id] != NULL_TREE);
  }
  
  
--- 169,184 ----
  tree
  get_gnu_tree (Entity_Id gnat_entity)
  {
!   gcc_assert (associate_gnat_to_gnu[gnat_entity - First_Node_Id]);
    return associate_gnat_to_gnu[gnat_entity - First_Node_Id];
  }
  
  /* Return nonzero if a GCC tree has been associated with GNAT_ENTITY.  */
  
! bool
  present_gnu_tree (Entity_Id gnat_entity)
  {
!   return (associate_gnat_to_gnu[gnat_entity - First_Node_Id]) != 0;
  }
  
  
*************** present_gnu_tree (Entity_Id gnat_entity)
*** 217,386 ****
  int
  global_bindings_p (void)
  {
!   return (force_global != 0 || current_binding_level == global_binding_level
! 	  ? -1 : 0);
! }
! 
! /* Return the list of declarations in the current level. Note that this list
!    is in reverse order (it has to be so for back-end compatibility).  */
! 
! tree
! getdecls (void)
! {
!   return current_binding_level->names;
! }
! 
! /* Nonzero if the current level needs to have a BLOCK made.  */
! 
! int
! kept_level_p (void)
! {
!   return (current_binding_level->names != 0);
  }
  
! /* Enter a new binding level. The input parameter is ignored, but has to be
!    specified for back-end compatibility.  */
  
  void
! pushlevel (int ignore ATTRIBUTE_UNUSED)
  {
!   struct binding_level *newlevel = NULL;
  
    /* Reuse a struct for this binding level, if there is one.  */
    if (free_binding_level)
      {
        newlevel = free_binding_level;
!       free_binding_level = free_binding_level->level_chain;
      }
    else
      newlevel
!       = (struct binding_level *) ggc_alloc (sizeof (struct binding_level));
  
!   *newlevel = clear_binding_level;
  
    /* Add this level to the front of the chain (stack) of levels that are
       active.  */
!   newlevel->level_chain = current_binding_level;
    current_binding_level = newlevel;
  }
  
! /* Exit a binding level.
!    Pop the level off, and restore the state of the identifier-decl mappings
!    that were in effect when this level was entered.
! 
!    If KEEP is nonzero, this level had explicit declarations, so
!    and create a "block" (a BLOCK node) for the level
!    to record its declarations and subblocks for symbol table output.
! 
!    If FUNCTIONBODY is nonzero, this level is the body of a function,
!    so create a block as if KEEP were set and also clear out all
!    label names.
! 
!    If REVERSE is nonzero, reverse the order of decls before putting
!    them into the BLOCK.  */
  
! tree
! poplevel (int keep, int reverse, int functionbody)
  {
!   /* Points to a GCC BLOCK tree node. This is the BLOCK node construted for the
!      binding level that we are about to exit and which is returned by this
!      routine.  */
!   tree block = NULL_TREE;
!   tree decl_chain;
!   tree decl_node;
!   tree subblock_chain = current_binding_level->blocks;
!   tree subblock_node;
!   int block_previously_created;
  
!   /* Reverse the list of XXXX_DECL nodes if desired.  Note that the ..._DECL
!      nodes chained through the `names' field of current_binding_level are in
!      reverse order except for PARM_DECL node, which are explicitly stored in
!      the right order.  */
!   current_binding_level->names
!     = decl_chain = (reverse) ? nreverse (current_binding_level->names)
!       : current_binding_level->names;
  
!   /* Output any nested inline functions within this block which must be
!      compiled because their address is needed. */
!   for (decl_node = decl_chain; decl_node; decl_node = TREE_CHAIN (decl_node))
!     if (TREE_CODE (decl_node) == FUNCTION_DECL
! 	&& ! TREE_ASM_WRITTEN (decl_node) && TREE_ADDRESSABLE (decl_node)
! 	&& DECL_INITIAL (decl_node) != 0)
!       {
! 	push_function_context ();
! 	output_inline_function (decl_node);
! 	pop_function_context ();
!       }
  
!   block = 0;
!   block_previously_created = (current_binding_level->this_block != 0);
!   if (block_previously_created)
!     block = current_binding_level->this_block;
!   else if (keep || functionbody)
!     block = make_node (BLOCK);
!   if (block != 0)
!     {
!       BLOCK_VARS (block) = keep ? decl_chain : 0;
!       BLOCK_SUBBLOCKS (block) = subblock_chain;
!     }
  
!   /* Record the BLOCK node just built as the subblock its enclosing scope.  */
!   for (subblock_node = subblock_chain; subblock_node;
!        subblock_node = TREE_CHAIN (subblock_node))
!     BLOCK_SUPERCONTEXT (subblock_node) = block;
  
!   /* Clear out the meanings of the local variables of this level.  */
  
!   for (subblock_node = decl_chain; subblock_node;
!        subblock_node = TREE_CHAIN (subblock_node))
!     if (DECL_NAME (subblock_node) != 0)
!       /* If the identifier was used or addressed via a local extern decl,
! 	 don't forget that fact.   */
!       if (DECL_EXTERNAL (subblock_node))
! 	{
! 	  if (TREE_USED (subblock_node))
! 	    TREE_USED (DECL_NAME (subblock_node)) = 1;
! 	  if (TREE_ADDRESSABLE (subblock_node))
! 	    TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (subblock_node)) = 1;
! 	}
  
!   {
!     /* Pop the current level, and free the structure for reuse.  */
!     struct binding_level *level = current_binding_level;
!     current_binding_level = current_binding_level->level_chain;
!     level->level_chain = free_binding_level;
!     free_binding_level = level;
!   }
  
!   if (functionbody)
      {
!       /* This is the top level block of a function. The ..._DECL chain stored
! 	 in BLOCK_VARS are the function's parameters (PARM_DECL nodes). Don't
! 	 leave them in the BLOCK because they are found in the FUNCTION_DECL
! 	 instead.  */
!       DECL_INITIAL (current_function_decl) = block;
!       BLOCK_VARS (block) = 0;
      }
!   else if (block)
      {
!       if (!block_previously_created)
! 	current_binding_level->blocks
! 	  = chainon (current_binding_level->blocks, block);
      }
  
!   /* If we did not make a block for the level just exited, any blocks made for
!      inner levels (since they cannot be recorded as subblocks in that level)
!      must be carried forward so they will later become subblocks of something
!      else.  */
!   else if (subblock_chain)
!     current_binding_level->blocks
!       = chainon (current_binding_level->blocks, subblock_chain);
!   if (block)
!     TREE_USED (block) = 1;
! 
!   return block;
  }
! 
  /* Insert BLOCK at the end of the list of subblocks of the
     current binding level.  This is used when a BIND_EXPR is expanded,
     to handle the BLOCK node inside the BIND_EXPR.  */
--- 187,301 ----
  int
  global_bindings_p (void)
  {
!   return ((force_global || !current_function_decl) ? -1 : 0);
  }
  
! /* Enter a new binding level. */
  
  void
! gnat_pushlevel ()
  {
!   struct gnat_binding_level *newlevel = NULL;
  
    /* Reuse a struct for this binding level, if there is one.  */
    if (free_binding_level)
      {
        newlevel = free_binding_level;
!       free_binding_level = free_binding_level->chain;
      }
    else
      newlevel
!       = (struct gnat_binding_level *)
! 	ggc_alloc (sizeof (struct gnat_binding_level));
  
!   /* Use a free BLOCK, if any; otherwise, allocate one.  */
!   if (free_block_chain)
!     {
!       newlevel->block = free_block_chain;
!       free_block_chain = TREE_CHAIN (free_block_chain);
!       TREE_CHAIN (newlevel->block) = NULL_TREE;
!     }
!   else
!     newlevel->block = make_node (BLOCK);
! 
!   /* Point the BLOCK we just made to its parent.  */
!   if (current_binding_level)
!     BLOCK_SUPERCONTEXT (newlevel->block) = current_binding_level->block;
! 
!   BLOCK_VARS (newlevel->block) = BLOCK_SUBBLOCKS (newlevel->block) = NULL_TREE;
!   TREE_USED (newlevel->block) = 1;
  
    /* Add this level to the front of the chain (stack) of levels that are
       active.  */
!   newlevel->chain = current_binding_level;
!   newlevel->jmpbuf_decl = NULL_TREE;
    current_binding_level = newlevel;
  }
  
! /* Set SUPERCONTEXT of the BLOCK for the current binding level to FNDECL
!    and point FNDECL to this BLOCK.  */
  
! void
! set_current_block_context (tree fndecl)
  {
!   BLOCK_SUPERCONTEXT (current_binding_level->block) = fndecl;
!   DECL_INITIAL (fndecl) = current_binding_level->block;
! }
  
! /* Set the jmpbuf_decl for the current binding level to DECL.  */
  
! void
! set_block_jmpbuf_decl (tree decl)
! {
!   current_binding_level->jmpbuf_decl = decl;
! }
  
! /* Get the jmpbuf_decl, if any, for the current binding level.  */
  
! tree
! get_block_jmpbuf_decl ()
! {
!   return current_binding_level->jmpbuf_decl;
! }
  
! /* Exit a binding level. Set any BLOCK into the current code group.  */
  
! void
! gnat_poplevel ()
! {
!   struct gnat_binding_level *level = current_binding_level;
!   tree block = level->block;
  
!   BLOCK_VARS (block) = nreverse (BLOCK_VARS (block));
!   BLOCK_SUBBLOCKS (block) = nreverse (BLOCK_SUBBLOCKS (block));
  
!   /* If this is a function-level BLOCK don't do anything.  Otherwise, if there
!      are no variables free the block and merge its subblocks into those of its
!      parent block. Otherwise, add it to the list of its parent.  */
!   if (TREE_CODE (BLOCK_SUPERCONTEXT (block)) == FUNCTION_DECL)
!     ;
!   else if (BLOCK_VARS (block) == NULL_TREE)
      {
!       BLOCK_SUBBLOCKS (level->chain->block)
! 	= chainon (BLOCK_SUBBLOCKS (block),
! 		   BLOCK_SUBBLOCKS (level->chain->block));
!       TREE_CHAIN (block) = free_block_chain;
!       free_block_chain = block;
      }
!   else
      {
!       TREE_CHAIN (block) = BLOCK_SUBBLOCKS (level->chain->block);
!       BLOCK_SUBBLOCKS (level->chain->block) = block;
!       TREE_USED (block) = 1;
!       set_block_for_group (block);
      }
  
!   /* Free this binding structure.  */
!   current_binding_level = level->chain;
!   level->chain = free_binding_level;
!   free_binding_level = level;
  }
! 
  /* Insert BLOCK at the end of the list of subblocks of the
     current binding level.  This is used when a BIND_EXPR is expanded,
     to handle the BLOCK node inside the BIND_EXPR.  */
*************** void
*** 389,443 ****
  insert_block (tree block)
  {
    TREE_USED (block) = 1;
!   current_binding_level->blocks
!     = chainon (current_binding_level->blocks, block);
  }
! 
! /* Set the BLOCK node for the innermost scope
!    (the one we are currently in).  */
  
  void
! set_block (tree block)
! {
!   current_binding_level->this_block = block;
!   current_binding_level->names = chainon (current_binding_level->names,
! 					  BLOCK_VARS (block));
!   current_binding_level->blocks = chainon (current_binding_level->blocks,
! 					   BLOCK_SUBBLOCKS (block));
! }
! 
! /* Records a ..._DECL node DECL as belonging to the current lexical scope.
!    Returns the ..._DECL node. */
! 
! tree
! pushdecl (tree decl)
  {
-   struct binding_level *b;
- 
    /* If at top level, there is no context. But PARM_DECLs always go in the
!      level of its function. */
    if (global_bindings_p () && TREE_CODE (decl) != PARM_DECL)
!     {
!       b = global_binding_level;
!       DECL_CONTEXT (decl) = 0;
!     }
    else
!     {
!       b = current_binding_level;
!       DECL_CONTEXT (decl) = current_function_decl;
!     }
  
!   /* Put the declaration on the list.  The list of declarations is in reverse
!      order. The list will be reversed later if necessary.  This needs to be
!      this way for compatibility with the back-end.
  
!      Don't put TYPE_DECLs for UNCONSTRAINED_ARRAY_TYPE into the list.  They
!      will cause trouble with the debugger and aren't needed anyway.  */
!   if (TREE_CODE (decl) != TYPE_DECL
!       || TREE_CODE (TREE_TYPE (decl)) != UNCONSTRAINED_ARRAY_TYPE)
      {
!       TREE_CHAIN (decl) = b->names;
!       b->names = decl;
      }
  
    /* For the declaration of a type, set its name if it either is not already
--- 304,344 ----
  insert_block (tree block)
  {
    TREE_USED (block) = 1;
!   TREE_CHAIN (block) = BLOCK_SUBBLOCKS (current_binding_level->block);
!   BLOCK_SUBBLOCKS (current_binding_level->block) = block;
  }
! 
! /* Records a ..._DECL node DECL as belonging to the current lexical scope
!    and uses GNAT_NODE for location information and propagating flags.  */
  
  void
! gnat_pushdecl (tree decl, Node_Id gnat_node)
  {
    /* If at top level, there is no context. But PARM_DECLs always go in the
!      level of its function.  */
    if (global_bindings_p () && TREE_CODE (decl) != PARM_DECL)
!     DECL_CONTEXT (decl) = 0;
    else
!     DECL_CONTEXT (decl) = current_function_decl;
  
!   TREE_NO_WARNING (decl) = (gnat_node == Empty || Warnings_Off (gnat_node));
  
!   /* Set the location of DECL and emit a declaration for it.  */
!   if (Present (gnat_node))
!     Sloc_to_locus (Sloc (gnat_node), &DECL_SOURCE_LOCATION (decl));
!   add_decl_expr (decl, gnat_node);
! 
!   /* Put the declaration on the list.  The list of declarations is in reverse
!      order. The list will be reversed later.  We don't do this for global
!      variables.  Also, don't put TYPE_DECLs for UNCONSTRAINED_ARRAY_TYPE into
!      the list.  They will cause trouble with the debugger and aren't needed
!      anyway.  */
!   if (!global_bindings_p ()
!       && (TREE_CODE (decl) != TYPE_DECL
! 	  || TREE_CODE (TREE_TYPE (decl)) != UNCONSTRAINED_ARRAY_TYPE))
      {
!       TREE_CHAIN (decl) = BLOCK_VARS (current_binding_level->block);
!       BLOCK_VARS (current_binding_level->block) = decl;
      }
  
    /* For the declaration of a type, set its name if it either is not already
*************** pushdecl (tree decl)
*** 450,464 ****
       for now).  */
  
    if (TREE_CODE (decl) == TYPE_DECL
!       && DECL_NAME (decl) != 0
!       && (TYPE_NAME (TREE_TYPE (decl)) == 0
  	  || TREE_CODE (TYPE_NAME (TREE_TYPE (decl))) == IDENTIFIER_NODE
  	  || (TREE_CODE (TYPE_NAME (TREE_TYPE (decl))) == TYPE_DECL
  	      && DECL_ARTIFICIAL (TYPE_NAME (TREE_TYPE (decl)))
! 	      && ! DECL_ARTIFICIAL (decl))))
      TYPE_NAME (TREE_TYPE (decl)) = decl;
  
!   return decl;
  }
  
  /* Do little here.  Set up the standard declarations later after the
--- 351,366 ----
       for now).  */
  
    if (TREE_CODE (decl) == TYPE_DECL
!       && DECL_NAME (decl)
!       && (!TYPE_NAME (TREE_TYPE (decl))
  	  || TREE_CODE (TYPE_NAME (TREE_TYPE (decl))) == IDENTIFIER_NODE
  	  || (TREE_CODE (TYPE_NAME (TREE_TYPE (decl))) == TYPE_DECL
  	      && DECL_ARTIFICIAL (TYPE_NAME (TREE_TYPE (decl)))
! 	      && !DECL_ARTIFICIAL (decl))))
      TYPE_NAME (TREE_TYPE (decl)) = decl;
  
!   if (TREE_CODE (decl) != CONST_DECL)
!     rest_of_decl_compilation (decl, global_bindings_p (), 0);
  }
  
  /* Do little here.  Set up the standard declarations later after the
*************** gnat_init_decl_processing (void)
*** 473,502 ****
    current_function_decl = 0;
    current_binding_level = 0;
    free_binding_level = 0;
!   pushlevel (0);
!   global_binding_level = current_binding_level;
  
!   build_common_tree_nodes (0);
  
    /* In Ada, we use a signed type for SIZETYPE.  Use the signed type
       corresponding to the size of Pmode.  In most cases when ptr_mode and
       Pmode differ, C will use the width of ptr_mode as sizetype.  But we get
       far better code using the width of Pmode.  Make this here since we need
       this before we can expand the GNAT types.  */
!   set_sizetype (gnat_type_for_size (GET_MODE_BITSIZE (Pmode), 0));
    build_common_tree_nodes_2 (0);
  
!   pushdecl (build_decl (TYPE_DECL, get_identifier (SIZE_TYPE), sizetype));
! 
!   /* We need to make the integer type before doing anything else.
!      We stitch this in to the appropriate GNAT type later.  */
!   pushdecl (build_decl (TYPE_DECL, get_identifier ("integer"),
! 			integer_type_node));
!   pushdecl (build_decl (TYPE_DECL, get_identifier ("unsigned char"),
! 			char_type_node));
  
    ptr_void_type_node = build_pointer_type (void_type_node);
  
  }
  
  /* Create the predefined scalar types such as `integer_type_node' needed
--- 375,421 ----
    current_function_decl = 0;
    current_binding_level = 0;
    free_binding_level = 0;
!   gnat_pushlevel ();
  
!   build_common_tree_nodes (true, true);
  
    /* In Ada, we use a signed type for SIZETYPE.  Use the signed type
       corresponding to the size of Pmode.  In most cases when ptr_mode and
       Pmode differ, C will use the width of ptr_mode as sizetype.  But we get
       far better code using the width of Pmode.  Make this here since we need
       this before we can expand the GNAT types.  */
!   size_type_node = gnat_type_for_size (GET_MODE_BITSIZE (Pmode), 0);
!   set_sizetype (size_type_node);
    build_common_tree_nodes_2 (0);
  
!   /* Give names and make TYPE_DECLs for common types.  */
!   gnat_pushdecl (build_decl (TYPE_DECL, get_identifier (SIZE_TYPE), sizetype),
! 		 Empty);
!   gnat_pushdecl (build_decl (TYPE_DECL, get_identifier ("integer"),
! 			     integer_type_node),
! 		 Empty);
!   gnat_pushdecl (build_decl (TYPE_DECL, get_identifier ("unsigned char"),
! 			     char_type_node),
! 		 Empty);
!   gnat_pushdecl (build_decl (TYPE_DECL, get_identifier ("long integer"),
! 			     long_integer_type_node),
! 		 Empty);
  
    ptr_void_type_node = build_pointer_type (void_type_node);
  
+   gnat_install_builtins ();
+ }
+ 
+ /* Install the builtin functions the middle-end needs.  */
+ 
+ static void
+ gnat_install_builtins ()
+ {
+   /* Builtins used by generic optimizers.  */
+   build_common_builtin_nodes ();
+ 
+   /* Target specific builtins, such as the AltiVec family on ppc.  */
+   targetm.init_builtins ();
  }
  
  /* Create the predefined scalar types such as `integer_type_node' needed
*************** init_gigi_decls (tree long_long_float_ty
*** 518,525 ****
        longest_float_type_node = make_node (REAL_TYPE);
        TYPE_PRECISION (longest_float_type_node) = LONG_DOUBLE_TYPE_SIZE;
        layout_type (longest_float_type_node);
!       pushdecl (build_decl (TYPE_DECL, get_identifier ("longest float type"),
! 			    longest_float_type_node));
      }
    else
      longest_float_type_node = TREE_TYPE (long_long_float_type);
--- 437,444 ----
        longest_float_type_node = make_node (REAL_TYPE);
        TYPE_PRECISION (longest_float_type_node) = LONG_DOUBLE_TYPE_SIZE;
        layout_type (longest_float_type_node);
!       create_type_decl (get_identifier ("longest float type"),
! 			longest_float_type_node, NULL, false, true, Empty);
      }
    else
      longest_float_type_node = TREE_TYPE (long_long_float_type);
*************** init_gigi_decls (tree long_long_float_ty
*** 527,538 ****
    except_type_node = TREE_TYPE (exception_type);
  
    unsigned_type_node = gnat_type_for_size (INT_TYPE_SIZE, 1);
!   pushdecl (build_decl (TYPE_DECL, get_identifier ("unsigned int"),
! 			unsigned_type_node));
  
!   void_type_decl_node
!     = pushdecl (build_decl (TYPE_DECL, get_identifier ("void"),
! 			    void_type_node));
  
    void_ftype = build_function_type (void_type_node, NULL_TREE);
    ptr_void_ftype = build_pointer_type (void_ftype);
--- 446,457 ----
    except_type_node = TREE_TYPE (exception_type);
  
    unsigned_type_node = gnat_type_for_size (INT_TYPE_SIZE, 1);
!   create_type_decl (get_identifier ("unsigned int"), unsigned_type_node,
! 		    NULL, false, true, Empty);
  
!   void_type_decl_node = create_type_decl (get_identifier ("void"),
! 					  void_type_node, NULL, false, true,
! 					  Empty);
  
    void_ftype = build_function_type (void_type_node, NULL_TREE);
    ptr_void_ftype = build_pointer_type (void_ftype);
*************** init_gigi_decls (tree long_long_float_ty
*** 548,554 ****
  							  tree_cons (NULL_TREE,
  								     sizetype,
  								     endlink)),
! 				     NULL_TREE, 0, 1, 1, 0);
  
    /* free is a function declaration tree for a function to free memory.  */
    free_decl
--- 467,474 ----
  							  tree_cons (NULL_TREE,
  								     sizetype,
  								     endlink)),
! 				     NULL_TREE, false, true, true, NULL,
! 				     Empty);
  
    /* free is a function declaration tree for a function to free memory.  */
    free_decl
*************** init_gigi_decls (tree long_long_float_ty
*** 557,569 ****
  						tree_cons (NULL_TREE,
  							   ptr_void_type_node,
  							   endlink)),
! 			   NULL_TREE, 0, 1, 1, 0);
  
    /* Make the types and functions used for exception processing.    */
    jmpbuf_type
      = build_array_type (gnat_type_for_mode (Pmode, 0),
! 			build_index_type (build_int_2 (5, 0)));
!   pushdecl (build_decl (TYPE_DECL, get_identifier ("JMPBUF_T"), jmpbuf_type));
    jmpbuf_ptr_type = build_pointer_type (jmpbuf_type);
  
    /* Functions to get and set the jumpbuf pointer for the current thread.  */
--- 477,490 ----
  						tree_cons (NULL_TREE,
  							   ptr_void_type_node,
  							   endlink)),
! 			   NULL_TREE, false, true, true, NULL, Empty);
  
    /* Make the types and functions used for exception processing.    */
    jmpbuf_type
      = build_array_type (gnat_type_for_mode (Pmode, 0),
! 			build_index_type (build_int_cst (NULL_TREE, 5)));
!   create_type_decl (get_identifier ("JMPBUF_T"), jmpbuf_type, NULL,
! 		    false, true, Empty);
    jmpbuf_ptr_type = build_pointer_type (jmpbuf_type);
  
    /* Functions to get and set the jumpbuf pointer for the current thread.  */
*************** init_gigi_decls (tree long_long_float_ty
*** 571,577 ****
      = create_subprog_decl
      (get_identifier ("system__soft_links__get_jmpbuf_address_soft"),
       NULL_TREE, build_function_type (jmpbuf_ptr_type, NULL_TREE),
!      NULL_TREE, 0, 1, 1, 0);
  
    set_jmpbuf_decl
      = create_subprog_decl
--- 492,498 ----
      = create_subprog_decl
      (get_identifier ("system__soft_links__get_jmpbuf_address_soft"),
       NULL_TREE, build_function_type (jmpbuf_ptr_type, NULL_TREE),
!      NULL_TREE, false, true, true, NULL, Empty);
  
    set_jmpbuf_decl
      = create_subprog_decl
*************** init_gigi_decls (tree long_long_float_ty
*** 579,585 ****
       NULL_TREE,
       build_function_type (void_type_node,
  			  tree_cons (NULL_TREE, jmpbuf_ptr_type, endlink)),
!      NULL_TREE, 0, 1, 1, 0);
  
    /* Function to get the current exception.  */
    get_excptr_decl
--- 500,506 ----
       NULL_TREE,
       build_function_type (void_type_node,
  			  tree_cons (NULL_TREE, jmpbuf_ptr_type, endlink)),
!      NULL_TREE, false, true, true, NULL, Empty);
  
    /* Function to get the current exception.  */
    get_excptr_decl
*************** init_gigi_decls (tree long_long_float_ty
*** 587,593 ****
      (get_identifier ("system__soft_links__get_gnat_exception"),
       NULL_TREE,
       build_function_type (build_pointer_type (except_type_node), NULL_TREE),
!      NULL_TREE, 0, 1, 1, 0);
  
    /* Functions that raise exceptions. */
    raise_nodefer_decl
--- 508,514 ----
      (get_identifier ("system__soft_links__get_gnat_exception"),
       NULL_TREE,
       build_function_type (build_pointer_type (except_type_node), NULL_TREE),
!      NULL_TREE, false, true, true, NULL, Empty);
  
    /* Functions that raise exceptions. */
    raise_nodefer_decl
*************** init_gigi_decls (tree long_long_float_ty
*** 597,603 ****
  			    tree_cons (NULL_TREE,
  				       build_pointer_type (except_type_node),
  				       endlink)),
!        NULL_TREE, 0, 1, 1, 0);
  
    /* Hooks to call when entering/leaving an exception handler.  */
    begin_handler_decl
--- 518,538 ----
  			    tree_cons (NULL_TREE,
  				       build_pointer_type (except_type_node),
  				       endlink)),
!        NULL_TREE, false, true, true, NULL, Empty);
! 
!   /* Dummy objects to materialize "others" and "all others" in the exception
!      tables.  These are exported by a-exexpr.adb, so see this unit for the
!      types to use.  */
! 
!   others_decl
!     = create_var_decl (get_identifier ("OTHERS"),
! 		       get_identifier ("__gnat_others_value"),
! 		       integer_type_node, 0, 1, 0, 1, 1, 0, Empty);
! 
!   all_others_decl
!     = create_var_decl (get_identifier ("ALL_OTHERS"),
! 		       get_identifier ("__gnat_all_others_value"),
! 		       integer_type_node, 0, 1, 0, 1, 1, 0, Empty);
  
    /* Hooks to call when entering/leaving an exception handler.  */
    begin_handler_decl
*************** init_gigi_decls (tree long_long_float_ty
*** 606,612 ****
  						tree_cons (NULL_TREE,
  							   ptr_void_type_node,
  							   endlink)),
! 			   NULL_TREE, 0, 1, 1, 0);
  
    end_handler_decl
      = create_subprog_decl (get_identifier ("__gnat_end_handler"), NULL_TREE,
--- 541,547 ----
  						tree_cons (NULL_TREE,
  							   ptr_void_type_node,
  							   endlink)),
! 			   NULL_TREE, false, true, true, NULL, Empty);
  
    end_handler_decl
      = create_subprog_decl (get_identifier ("__gnat_end_handler"), NULL_TREE,
*************** init_gigi_decls (tree long_long_float_ty
*** 614,620 ****
  						tree_cons (NULL_TREE,
  							   ptr_void_type_node,
  							   endlink)),
! 			   NULL_TREE, 0, 1, 1, 0);
  
    /* If in no exception handlers mode, all raise statements are redirected to
       __gnat_last_chance_handler. No need to redefine raise_nodefer_decl, since
--- 549,555 ----
  						tree_cons (NULL_TREE,
  							   ptr_void_type_node,
  							   endlink)),
! 			   NULL_TREE, false, true, true, NULL, Empty);
  
    /* If in no exception handlers mode, all raise statements are redirected to
       __gnat_last_chance_handler. No need to redefine raise_nodefer_decl, since
*************** init_gigi_decls (tree long_long_float_ty
*** 630,636 ****
  					   tree_cons (NULL_TREE,
  						      integer_type_node,
  						      endlink))),
! 	   NULL_TREE, 0, 1, 1, 0);
  
        for (i = 0; i < ARRAY_SIZE (gnat_raise_decls); i++)
  	gnat_raise_decls[i] = decl;
--- 565,571 ----
  					   tree_cons (NULL_TREE,
  						      integer_type_node,
  						      endlink))),
! 	   NULL_TREE, false, true, true, NULL, Empty);
  
        for (i = 0; i < ARRAY_SIZE (gnat_raise_decls); i++)
  	gnat_raise_decls[i] = decl;
*************** init_gigi_decls (tree long_long_float_ty
*** 652,658 ****
  					     tree_cons (NULL_TREE,
  							integer_type_node,
  							endlink))),
! 	     NULL_TREE, 0, 1, 1, 0);
        }
  
    /* Indicate that these never return.  */
--- 587,593 ----
  					     tree_cons (NULL_TREE,
  							integer_type_node,
  							endlink))),
! 	     NULL_TREE, false, true, true, NULL, Empty);
        }
  
    /* Indicate that these never return.  */
*************** init_gigi_decls (tree long_long_float_ty
*** 678,720 ****
        (get_identifier ("__builtin_setjmp"), NULL_TREE,
         build_function_type (integer_type_node,
  			    tree_cons (NULL_TREE,  jmpbuf_ptr_type, endlink)),
!        NULL_TREE, 0, 1, 1, 0);
  
    DECL_BUILT_IN_CLASS (setjmp_decl) = BUILT_IN_NORMAL;
    DECL_FUNCTION_CODE (setjmp_decl) = BUILT_IN_SETJMP;
  
    main_identifier_node = get_identifier ("main");
  }
  
! /* Given a record type (RECORD_TYPE) and a chain of FIELD_DECL
!    nodes (FIELDLIST), finish constructing the record or union type.
!    If HAS_REP is nonzero, this record has a rep clause; don't call
!    layout_type but merely set the size and alignment ourselves.
!    If DEFER_DEBUG is nonzero, do not call the debugging routines
!    on this type; it will be done later. */
  
  void
! finish_record_type (tree record_type,
!                     tree fieldlist,
!                     int has_rep,
!                     int defer_debug)
  {
    enum tree_code code = TREE_CODE (record_type);
    tree ada_size = bitsize_zero_node;
    tree size = bitsize_zero_node;
!   tree size_unit = size_zero_node;
!   int var_size = 0;
    tree field;
  
    TYPE_FIELDS (record_type) = fieldlist;
! 
!   if (TYPE_NAME (record_type) != 0
!       && TREE_CODE (TYPE_NAME (record_type)) == TYPE_DECL)
!     TYPE_STUB_DECL (record_type) = TYPE_NAME (record_type);
!   else
!     TYPE_STUB_DECL (record_type)
!       = pushdecl (build_decl (TYPE_DECL, TYPE_NAME (record_type),
! 			      record_type));
  
    /* We don't need both the typedef name and the record name output in
       the debugging information, since they are the same.  */
--- 613,659 ----
        (get_identifier ("__builtin_setjmp"), NULL_TREE,
         build_function_type (integer_type_node,
  			    tree_cons (NULL_TREE,  jmpbuf_ptr_type, endlink)),
!        NULL_TREE, false, true, true, NULL, Empty);
  
    DECL_BUILT_IN_CLASS (setjmp_decl) = BUILT_IN_NORMAL;
    DECL_FUNCTION_CODE (setjmp_decl) = BUILT_IN_SETJMP;
  
+   /* update_setjmp_buf updates a setjmp buffer from the current stack pointer
+      address.  */
+   update_setjmp_buf_decl
+     = create_subprog_decl
+       (get_identifier ("__builtin_update_setjmp_buf"), NULL_TREE,
+        build_function_type (void_type_node,
+ 			    tree_cons (NULL_TREE,  jmpbuf_ptr_type, endlink)),
+        NULL_TREE, false, true, true, NULL, Empty);
+ 
+   DECL_BUILT_IN_CLASS (update_setjmp_buf_decl) = BUILT_IN_NORMAL;
+   DECL_FUNCTION_CODE (update_setjmp_buf_decl) = BUILT_IN_UPDATE_SETJMP_BUF;
+ 
    main_identifier_node = get_identifier ("main");
  }
  
! /* Given a record type (RECORD_TYPE) and a chain of FIELD_DECL nodes
!    (FIELDLIST), finish constructing the record or union type.  If HAS_REP is
!    true, this record has a rep clause; don't call layout_type but merely set
!    the size and alignment ourselves.  If DEFER_DEBUG is true, do not call
!    the debugging routines on this type; it will be done later. */
  
  void
! finish_record_type (tree record_type, tree fieldlist, bool has_rep,
!                     bool defer_debug)
  {
    enum tree_code code = TREE_CODE (record_type);
    tree ada_size = bitsize_zero_node;
    tree size = bitsize_zero_node;
!   bool var_size = false;
!   bool had_size = TYPE_SIZE (record_type) != 0;
!   bool had_size_unit = TYPE_SIZE_UNIT (record_type) != 0;
    tree field;
  
    TYPE_FIELDS (record_type) = fieldlist;
!   TYPE_STUB_DECL (record_type)
!     = build_decl (TYPE_DECL, NULL_TREE, record_type);
  
    /* We don't need both the typedef name and the record name output in
       the debugging information, since they are the same.  */
*************** finish_record_type (tree record_type,
*** 727,737 ****
      {
        TYPE_ALIGN (record_type) = MAX (BITS_PER_UNIT, TYPE_ALIGN (record_type));
        TYPE_MODE (record_type) = BLKmode;
!       if (TYPE_SIZE (record_type) == 0)
! 	{
! 	  TYPE_SIZE (record_type) = bitsize_zero_node;
! 	  TYPE_SIZE_UNIT (record_type) = size_zero_node;
! 	}
        /* For all-repped records with a size specified, lay the QUAL_UNION_TYPE
  	 out just like a UNION_TYPE, since the size will be fixed.  */
        else if (code == QUAL_UNION_TYPE)
--- 666,677 ----
      {
        TYPE_ALIGN (record_type) = MAX (BITS_PER_UNIT, TYPE_ALIGN (record_type));
        TYPE_MODE (record_type) = BLKmode;
! 
!       if (!had_size_unit)
! 	TYPE_SIZE_UNIT (record_type) = size_zero_node;
!       if (!had_size)
! 	TYPE_SIZE (record_type) = bitsize_zero_node;
! 
        /* For all-repped records with a size specified, lay the QUAL_UNION_TYPE
  	 out just like a UNION_TYPE, since the size will be fixed.  */
        else if (code == QUAL_UNION_TYPE)
*************** finish_record_type (tree record_type,
*** 747,766 ****
      }
  
    /* At this point, the position and size of each field is known.  It was
!      either set before entry by a rep clause, or by laying out the type
!      above.  We now make a pass through the fields (in reverse order for
!      QUAL_UNION_TYPEs) to compute the Ada size; the GCC size and alignment
!      (for rep'ed records that are not padding types); and the mode (for
!      rep'ed records).  */
  
    if (code == QUAL_UNION_TYPE)
      fieldlist = nreverse (fieldlist);
  
    for (field = fieldlist; field; field = TREE_CHAIN (field))
      {
        tree type = TREE_TYPE (field);
        tree this_size = DECL_SIZE (field);
-       tree this_size_unit = DECL_SIZE_UNIT (field);
        tree this_ada_size = DECL_SIZE (field);
  
        /* We need to make an XVE/XVU record if any field has variable size,
--- 687,709 ----
      }
  
    /* At this point, the position and size of each field is known.  It was
!      either set before entry by a rep clause, or by laying out the type above.
! 
!      We now run a pass over the fields (in reverse order for QUAL_UNION_TYPEs)
!      to compute the Ada size; the GCC size and alignment (for rep'ed records
!      that are not padding types); and the mode (for rep'ed records).  We also
!      clear the DECL_BIT_FIELD indication for the cases we know have not been
!      handled yet, and adjust DECL_NONADDRESSABLE_P accordingly.  */
  
    if (code == QUAL_UNION_TYPE)
      fieldlist = nreverse (fieldlist);
  
    for (field = fieldlist; field; field = TREE_CHAIN (field))
      {
+       tree pos = bit_position (field);
+ 
        tree type = TREE_TYPE (field);
        tree this_size = DECL_SIZE (field);
        tree this_ada_size = DECL_SIZE (field);
  
        /* We need to make an XVE/XVU record if any field has variable size,
*************** finish_record_type (tree record_type,
*** 770,785 ****
  	 output routines (except Dwarf2) won't be able to output the fields,
  	 so we need to make the special record.  */
        if (TREE_CODE (this_size) != INTEGER_CST)
! 	var_size = 1;
  
        if ((TREE_CODE (type) == RECORD_TYPE || TREE_CODE (type) == UNION_TYPE
  	  || TREE_CODE (type) == QUAL_UNION_TYPE)
! 	  && ! TYPE_IS_FAT_POINTER_P (type)
! 	  && ! TYPE_CONTAINS_TEMPLATE_P (type)
! 	  && TYPE_ADA_SIZE (type) != 0)
  	this_ada_size = TYPE_ADA_SIZE (type);
  
!       if (has_rep && ! DECL_BIT_FIELD (field))
  	TYPE_ALIGN (record_type)
  	  = MAX (TYPE_ALIGN (record_type), DECL_ALIGN (field));
  
--- 713,741 ----
  	 output routines (except Dwarf2) won't be able to output the fields,
  	 so we need to make the special record.  */
        if (TREE_CODE (this_size) != INTEGER_CST)
! 	var_size = true;
  
        if ((TREE_CODE (type) == RECORD_TYPE || TREE_CODE (type) == UNION_TYPE
  	  || TREE_CODE (type) == QUAL_UNION_TYPE)
! 	  && !TYPE_IS_FAT_POINTER_P (type)
! 	  && !TYPE_CONTAINS_TEMPLATE_P (type)
! 	  && TYPE_ADA_SIZE (type))
  	this_ada_size = TYPE_ADA_SIZE (type);
  
!       /* Clear DECL_BIT_FIELD for the cases layout_decl does not handle.  */
!       if (DECL_BIT_FIELD (field) && !STRICT_ALIGNMENT
! 	  && value_factor_p (pos, BITS_PER_UNIT)
! 	  && operand_equal_p (this_size, TYPE_SIZE (type), 0))
! 	DECL_BIT_FIELD (field) = 0;
! 
!       /* If we still have DECL_BIT_FIELD set at this point, we know the field
! 	 is technically not addressable.  Except that it can actually be
! 	 addressed if the field is BLKmode and happens to be properly
! 	 aligned.  */
!       DECL_NONADDRESSABLE_P (field)
! 	|= DECL_BIT_FIELD (field) && DECL_MODE (field) != BLKmode;
! 
!       if (has_rep && !DECL_BIT_FIELD (field))
  	TYPE_ALIGN (record_type)
  	  = MAX (TYPE_ALIGN (record_type), DECL_ALIGN (field));
  
*************** finish_record_type (tree record_type,
*** 788,804 ****
  	case UNION_TYPE:
  	  ada_size = size_binop (MAX_EXPR, ada_size, this_ada_size);
  	  size = size_binop (MAX_EXPR, size, this_size);
- 	  size_unit = size_binop (MAX_EXPR, size_unit, this_size_unit);
  	  break;
  
  	case QUAL_UNION_TYPE:
  	  ada_size
! 	    = fold (build (COND_EXPR, bitsizetype, DECL_QUALIFIER (field),
! 			   this_ada_size, ada_size));
! 	  size = fold (build (COND_EXPR, bitsizetype, DECL_QUALIFIER (field),
! 			      this_size, size));
! 	  size_unit = fold (build (COND_EXPR, sizetype, DECL_QUALIFIER (field),
! 				   this_size_unit, size_unit));
  	  break;
  
  	case RECORD_TYPE:
--- 744,757 ----
  	case UNION_TYPE:
  	  ada_size = size_binop (MAX_EXPR, ada_size, this_ada_size);
  	  size = size_binop (MAX_EXPR, size, this_size);
  	  break;
  
  	case QUAL_UNION_TYPE:
  	  ada_size
! 	    = fold (build3 (COND_EXPR, bitsizetype, DECL_QUALIFIER (field),
! 			    this_ada_size, ada_size));
! 	  size = fold (build3 (COND_EXPR, bitsizetype, DECL_QUALIFIER (field),
! 			       this_size, size));
  	  break;
  
  	case RECORD_TYPE:
*************** finish_record_type (tree record_type,
*** 811,827 ****
  	     QUAL_UNION_TYPE, we need to take into account the previous size in
  	     the case of empty variants.  */
  	  ada_size
! 	    = merge_sizes (ada_size, bit_position (field), this_ada_size,
  			   TREE_CODE (type) == QUAL_UNION_TYPE, has_rep);
! 	  size = merge_sizes (size, bit_position (field), this_size,
  			      TREE_CODE (type) == QUAL_UNION_TYPE, has_rep);
- 	  size_unit
- 	    = merge_sizes (size_unit, byte_position (field), this_size_unit,
- 			   TREE_CODE (type) == QUAL_UNION_TYPE, has_rep);
  	  break;
  
  	default:
! 	  abort ();
  	}
      }
  
--- 764,777 ----
  	     QUAL_UNION_TYPE, we need to take into account the previous size in
  	     the case of empty variants.  */
  	  ada_size
! 	    = merge_sizes (ada_size, pos, this_ada_size,
  			   TREE_CODE (type) == QUAL_UNION_TYPE, has_rep);
! 	  size = merge_sizes (size, pos, this_size,
  			      TREE_CODE (type) == QUAL_UNION_TYPE, has_rep);
  	  break;
  
  	default:
! 	  gcc_unreachable ();
  	}
      }
  
*************** finish_record_type (tree record_type,
*** 831,863 ****
    /* If this is a padding record, we never want to make the size smaller than
       what was specified in it, if any.  */
    if (TREE_CODE (record_type) == RECORD_TYPE
!       && TYPE_IS_PADDING_P (record_type) && TYPE_SIZE (record_type) != 0)
!     {
!       size = TYPE_SIZE (record_type);
!       size_unit = TYPE_SIZE_UNIT (record_type);
!     }
  
    /* Now set any of the values we've just computed that apply.  */
!   if (! TYPE_IS_FAT_POINTER_P (record_type)
!       && ! TYPE_CONTAINS_TEMPLATE_P (record_type))
      SET_TYPE_ADA_SIZE (record_type, ada_size);
  
    if (has_rep)
      {
!       if (! (TREE_CODE (record_type) == RECORD_TYPE
! 	     && TYPE_IS_PADDING_P (record_type)
! 	     && CONTAINS_PLACEHOLDER_P (size)))
! 	{
! 	  TYPE_SIZE (record_type) = round_up (size, TYPE_ALIGN (record_type));
! 	  TYPE_SIZE_UNIT (record_type)
! 	    = round_up (size_unit,
! 			TYPE_ALIGN (record_type) / BITS_PER_UNIT);
! 	}
  
        compute_record_mode (record_type);
      }
  
!   if (! defer_debug)
      {
        /* If this record is of variable size, rename it so that the
  	 debugger knows it is and make a new, parallel, record
--- 781,811 ----
    /* If this is a padding record, we never want to make the size smaller than
       what was specified in it, if any.  */
    if (TREE_CODE (record_type) == RECORD_TYPE
!       && TYPE_IS_PADDING_P (record_type) && TYPE_SIZE (record_type))
!     size = TYPE_SIZE (record_type);
  
    /* Now set any of the values we've just computed that apply.  */
!   if (!TYPE_IS_FAT_POINTER_P (record_type)
!       && !TYPE_CONTAINS_TEMPLATE_P (record_type))
      SET_TYPE_ADA_SIZE (record_type, ada_size);
  
    if (has_rep)
      {
!       tree size_unit
! 	= (had_size_unit ? TYPE_SIZE_UNIT (record_type)
! 	   : convert (sizetype, size_binop (CEIL_DIV_EXPR, size,
! 					    bitsize_unit_node)));
! 
!       TYPE_SIZE (record_type)
! 	= variable_size (round_up (size, TYPE_ALIGN (record_type)));
!       TYPE_SIZE_UNIT (record_type)
! 	= variable_size (round_up (size_unit,
! 				   TYPE_ALIGN (record_type) / BITS_PER_UNIT));
  
        compute_record_mode (record_type);
      }
  
!   if (!defer_debug)
      {
        /* If this record is of variable size, rename it so that the
  	 debugger knows it is and make a new, parallel, record
*************** finish_record_type (tree record_type,
*** 865,877 ****
  	 exp_dbug.ads.  But don't do this for records that are padding
  	 since they confuse GDB.  */
        if (var_size
! 	  && ! (TREE_CODE (record_type) == RECORD_TYPE
! 		&& TYPE_IS_PADDING_P (record_type)))
  	{
  	  tree new_record_type
  	    = make_node (TREE_CODE (record_type) == QUAL_UNION_TYPE
  			 ? UNION_TYPE : TREE_CODE (record_type));
! 	  tree orig_id = DECL_NAME (TYPE_STUB_DECL (record_type));
  	  tree new_id
  	    = concat_id_with_name (orig_id,
  				   TREE_CODE (record_type) == QUAL_UNION_TYPE
--- 813,828 ----
  	 exp_dbug.ads.  But don't do this for records that are padding
  	 since they confuse GDB.  */
        if (var_size
! 	  && !(TREE_CODE (record_type) == RECORD_TYPE
! 	       && TYPE_IS_PADDING_P (record_type)))
  	{
  	  tree new_record_type
  	    = make_node (TREE_CODE (record_type) == QUAL_UNION_TYPE
  			 ? UNION_TYPE : TREE_CODE (record_type));
! 	  tree orig_name = TYPE_NAME (record_type);
! 	  tree orig_id
! 	    = (TREE_CODE (orig_name) == TYPE_DECL ? DECL_NAME (orig_name)
! 	       : orig_name);
  	  tree new_id
  	    = concat_id_with_name (orig_id,
  				   TREE_CODE (record_type) == QUAL_UNION_TYPE
*************** finish_record_type (tree record_type,
*** 883,904 ****
  	  TYPE_NAME (new_record_type) = new_id;
  	  TYPE_ALIGN (new_record_type) = BIGGEST_ALIGNMENT;
  	  TYPE_STUB_DECL (new_record_type)
! 	    = pushdecl (build_decl (TYPE_DECL, new_id, new_record_type));
  	  DECL_ARTIFICIAL (TYPE_STUB_DECL (new_record_type)) = 1;
  	  DECL_IGNORED_P (TYPE_STUB_DECL (new_record_type))
  	    = DECL_IGNORED_P (TYPE_STUB_DECL (record_type));
  	  TYPE_SIZE (new_record_type) = size_int (TYPE_ALIGN (record_type));
  
  	  /* Now scan all the fields, replacing each field with a new
  	     field corresponding to the new encoding.  */
! 	  for (old_field = TYPE_FIELDS (record_type); old_field != 0;
  	       old_field = TREE_CHAIN (old_field))
  	    {
  	      tree field_type = TREE_TYPE (old_field);
  	      tree field_name = DECL_NAME (old_field);
  	      tree new_field;
  	      tree curpos = bit_position (old_field);
! 	      int var = 0;
  	      unsigned int align = 0;
  	      tree pos;
  
--- 834,857 ----
  	  TYPE_NAME (new_record_type) = new_id;
  	  TYPE_ALIGN (new_record_type) = BIGGEST_ALIGNMENT;
  	  TYPE_STUB_DECL (new_record_type)
! 	    = build_decl (TYPE_DECL, NULL_TREE, new_record_type);
  	  DECL_ARTIFICIAL (TYPE_STUB_DECL (new_record_type)) = 1;
  	  DECL_IGNORED_P (TYPE_STUB_DECL (new_record_type))
  	    = DECL_IGNORED_P (TYPE_STUB_DECL (record_type));
  	  TYPE_SIZE (new_record_type) = size_int (TYPE_ALIGN (record_type));
+ 	  TYPE_SIZE_UNIT (new_record_type)
+   	    = size_int (TYPE_ALIGN (record_type) / BITS_PER_UNIT);
  
  	  /* Now scan all the fields, replacing each field with a new
  	     field corresponding to the new encoding.  */
! 	  for (old_field = TYPE_FIELDS (record_type); old_field;
  	       old_field = TREE_CHAIN (old_field))
  	    {
  	      tree field_type = TREE_TYPE (old_field);
  	      tree field_name = DECL_NAME (old_field);
  	      tree new_field;
  	      tree curpos = bit_position (old_field);
! 	      bool var = false;
  	      unsigned int align = 0;
  	      tree pos;
  
*************** finish_record_type (tree record_type,
*** 918,931 ****
  	      else
  		pos = compute_related_constant (curpos, last_pos);
  
! 	      if (pos == 0 && TREE_CODE (curpos) == MULT_EXPR
  		  && TREE_CODE (TREE_OPERAND (curpos, 1)) == INTEGER_CST)
  		{
  		  align = TREE_INT_CST_LOW (TREE_OPERAND (curpos, 1));
  		  pos = compute_related_constant (curpos,
  						  round_up (last_pos, align));
  		}
! 	      else if (pos == 0 && TREE_CODE (curpos) == PLUS_EXPR
  		       && TREE_CODE (TREE_OPERAND (curpos, 1)) == INTEGER_CST
  		       && TREE_CODE (TREE_OPERAND (curpos, 0)) == MULT_EXPR
  		       && host_integerp (TREE_OPERAND
--- 871,884 ----
  	      else
  		pos = compute_related_constant (curpos, last_pos);
  
! 	      if (!pos && TREE_CODE (curpos) == MULT_EXPR
  		  && TREE_CODE (TREE_OPERAND (curpos, 1)) == INTEGER_CST)
  		{
  		  align = TREE_INT_CST_LOW (TREE_OPERAND (curpos, 1));
  		  pos = compute_related_constant (curpos,
  						  round_up (last_pos, align));
  		}
! 	      else if (!pos && TREE_CODE (curpos) == PLUS_EXPR
  		       && TREE_CODE (TREE_OPERAND (curpos, 1)) == INTEGER_CST
  		       && TREE_CODE (TREE_OPERAND (curpos, 0)) == MULT_EXPR
  		       && host_integerp (TREE_OPERAND
*************** finish_record_type (tree record_type,
*** 951,957 ****
  		 ??? We really should abort here, but it's too much work
  		 to get this correct for all cases.  */
  
! 	      if (pos == 0)
  		pos = bitsize_zero_node;
  
  	      /* See if this type is variable-size and make a new type
--- 904,910 ----
  		 ??? We really should abort here, but it's too much work
  		 to get this correct for all cases.  */
  
! 	      if (!pos)
  		pos = bitsize_zero_node;
  
  	      /* See if this type is variable-size and make a new type
*************** finish_record_type (tree record_type,
*** 959,965 ****
  	      if (TREE_CODE (DECL_SIZE (old_field)) != INTEGER_CST)
  		{
  		  field_type = build_pointer_type (field_type);
! 		  var = 1;
  		}
  
  	      /* Make a new field name, if necessary.  */
--- 912,918 ----
  	      if (TREE_CODE (DECL_SIZE (old_field)) != INTEGER_CST)
  		{
  		  field_type = build_pointer_type (field_type);
! 		  var = true;
  		}
  
  	      /* Make a new field name, if necessary.  */
*************** finish_record_type (tree record_type,
*** 1015,1030 ****
     We return an expression for the size.  */
  
  static tree
! merge_sizes (tree last_size,
!              tree first_bit,
!              tree size,
!              int special,
!              int has_rep)
  {
    tree type = TREE_TYPE (last_size);
    tree new;
  
!   if (! special || TREE_CODE (size) != COND_EXPR)
      {
        new = size_binop (PLUS_EXPR, first_bit, size);
        if (has_rep)
--- 968,980 ----
     We return an expression for the size.  */
  
  static tree
! merge_sizes (tree last_size, tree first_bit, tree size, bool special,
! 	     bool has_rep)
  {
    tree type = TREE_TYPE (last_size);
    tree new;
  
!   if (!special || TREE_CODE (size) != COND_EXPR)
      {
        new = size_binop (PLUS_EXPR, first_bit, size);
        if (has_rep)
*************** merge_sizes (tree last_size,
*** 1032,1046 ****
      }
  
    else
!     new = fold (build (COND_EXPR, type, TREE_OPERAND (size, 0),
! 		       integer_zerop (TREE_OPERAND (size, 1))
! 		       ? last_size : merge_sizes (last_size, first_bit,
! 						  TREE_OPERAND (size, 1),
! 						  1, has_rep),
! 		       integer_zerop (TREE_OPERAND (size, 2))
! 		      ? last_size : merge_sizes (last_size, first_bit,
! 						 TREE_OPERAND (size, 2),
! 						 1, has_rep)));
  
    /* We don't need any NON_VALUE_EXPRs and they can confuse us (especially
       when fed through substitute_in_expr) into thinking that a constant
--- 982,996 ----
      }
  
    else
!     new = fold (build3 (COND_EXPR, type, TREE_OPERAND (size, 0),
! 			integer_zerop (TREE_OPERAND (size, 1))
! 			? last_size : merge_sizes (last_size, first_bit,
! 						   TREE_OPERAND (size, 1),
! 						   1, has_rep),
! 			integer_zerop (TREE_OPERAND (size, 2))
! 			? last_size : merge_sizes (last_size, first_bit,
! 						   TREE_OPERAND (size, 2),
! 						   1, has_rep)));
  
    /* We don't need any NON_VALUE_EXPRs and they can confuse us (especially
       when fed through substitute_in_expr) into thinking that a constant
*************** split_plus (tree in, tree *pvar)
*** 1116,1130 ****
     RETURNS_UNCONSTRAINED is nonzero if the function returns an unconstrained
     object.  RETURNS_BY_REF is nonzero if the function returns by reference.
     RETURNS_WITH_DSP is nonzero if the function is to return with a
!    depressed stack pointer.  */
  
  tree
! create_subprog_type (tree return_type,
!                      tree param_decl_list,
!                      tree cico_list,
!                      int returns_unconstrained,
!                      int returns_by_ref,
!                      int returns_with_dsp)
  {
    /* A chain of TREE_LIST nodes whose TREE_VALUEs are the data type nodes of
       the subprogram formal parameters. This list is generated by traversing the
--- 1066,1079 ----
     RETURNS_UNCONSTRAINED is nonzero if the function returns an unconstrained
     object.  RETURNS_BY_REF is nonzero if the function returns by reference.
     RETURNS_WITH_DSP is nonzero if the function is to return with a
!    depressed stack pointer.  RETURNS_BY_TARGET_PTR is true if the function
!    is to be passed (as its first parameter) the address of the place to copy
!    its result.  */
  
  tree
! create_subprog_type (tree return_type, tree param_decl_list, tree cico_list,
!                      bool returns_unconstrained, bool returns_by_ref,
!                      bool returns_with_dsp, bool returns_by_target_ptr)
  {
    /* A chain of TREE_LIST nodes whose TREE_VALUEs are the data type nodes of
       the subprogram formal parameters. This list is generated by traversing the
*************** create_subprog_type (tree return_type,
*** 1136,1142 ****
    for (param_decl = param_decl_list; param_decl;
         param_decl = TREE_CHAIN (param_decl))
      param_type_list = tree_cons (NULL_TREE, TREE_TYPE (param_decl),
! 					  param_type_list);
  
    /* The list of the function parameter types has to be terminated by the void
       type to signal to the back-end that we are not dealing with a variable
--- 1085,1091 ----
    for (param_decl = param_decl_list; param_decl;
         param_decl = TREE_CHAIN (param_decl))
      param_type_list = tree_cons (NULL_TREE, TREE_TYPE (param_decl),
! 				 param_type_list);
  
    /* The list of the function parameter types has to be terminated by the void
       type to signal to the back-end that we are not dealing with a variable
*************** create_subprog_type (tree return_type,
*** 1153,1167 ****
    /* TYPE may have been shared since GCC hashes types.  If it has a CICO_LIST
       or the new type should, make a copy of TYPE.  Likewise for
       RETURNS_UNCONSTRAINED and RETURNS_BY_REF.  */
!   if (TYPE_CI_CO_LIST (type) != 0 || cico_list != 0
        || TYPE_RETURNS_UNCONSTRAINED_P (type) != returns_unconstrained
!       || TYPE_RETURNS_BY_REF_P (type) != returns_by_ref)
      type = copy_type (type);
  
!   SET_TYPE_CI_CO_LIST (type, cico_list);
    TYPE_RETURNS_UNCONSTRAINED_P (type) = returns_unconstrained;
    TYPE_RETURNS_STACK_DEPRESSED (type) = returns_with_dsp;
    TYPE_RETURNS_BY_REF_P (type) = returns_by_ref;
    return type;
  }
  
--- 1102,1118 ----
    /* TYPE may have been shared since GCC hashes types.  If it has a CICO_LIST
       or the new type should, make a copy of TYPE.  Likewise for
       RETURNS_UNCONSTRAINED and RETURNS_BY_REF.  */
!   if (TYPE_CI_CO_LIST (type) || cico_list
        || TYPE_RETURNS_UNCONSTRAINED_P (type) != returns_unconstrained
!       || TYPE_RETURNS_BY_REF_P (type) != returns_by_ref
!       || TYPE_RETURNS_BY_TARGET_PTR_P (type) != returns_by_target_ptr)
      type = copy_type (type);
  
!   TYPE_CI_CO_LIST (type) = cico_list;
    TYPE_RETURNS_UNCONSTRAINED_P (type) = returns_unconstrained;
    TYPE_RETURNS_STACK_DEPRESSED (type) = returns_with_dsp;
    TYPE_RETURNS_BY_REF_P (type) = returns_by_ref;
+   TYPE_RETURNS_BY_TARGET_PTR_P (type) = returns_by_target_ptr;
    return type;
  }
  
*************** create_index_type (tree min, tree max, t
*** 1200,1230 ****
       only a small hole.  */
    if (TYPE_INDEX_TYPE (type) == index)
      return type;
!   else if (TYPE_INDEX_TYPE (type) != 0)
      type = copy_type (type);
  
    SET_TYPE_INDEX_TYPE (type, index);
    return type;
  }
  
  /* Return a TYPE_DECL node. TYPE_NAME gives the name of the type (a character
     string) and TYPE is a ..._TYPE node giving its data type.
!    ARTIFICIAL_P is nonzero if this is a declaration that was generated
!    by the compiler.  DEBUG_INFO_P is nonzero if we need to write debugging
!    information about this type.  */
  
  tree
! create_type_decl (tree type_name,
!                   tree type,
!                   struct attrib *attr_list,
!                   int artificial_p,
!                   int debug_info_p)
  {
    tree type_decl = build_decl (TYPE_DECL, type_name, type);
    enum tree_code code = TREE_CODE (type);
  
    DECL_ARTIFICIAL (type_decl) = artificial_p;
!   pushdecl (type_decl);
    process_attributes (type_decl, attr_list);
  
    /* Pass type declaration information to the debugger unless this is an
--- 1151,1180 ----
       only a small hole.  */
    if (TYPE_INDEX_TYPE (type) == index)
      return type;
!   else if (TYPE_INDEX_TYPE (type))
      type = copy_type (type);
  
    SET_TYPE_INDEX_TYPE (type, index);
+   create_type_decl (NULL_TREE, type, NULL, true, false, Empty);
    return type;
  }
  
  /* Return a TYPE_DECL node. TYPE_NAME gives the name of the type (a character
     string) and TYPE is a ..._TYPE node giving its data type.
!    ARTIFICIAL_P is true if this is a declaration that was generated
!    by the compiler.  DEBUG_INFO_P is true if we need to write debugging
!    information about this type.  GNAT_NODE is used for the position of
!    the decl.  */
  
  tree
! create_type_decl (tree type_name, tree type, struct attrib *attr_list,
! 		  bool artificial_p, bool debug_info_p, Node_Id gnat_node)
  {
    tree type_decl = build_decl (TYPE_DECL, type_name, type);
    enum tree_code code = TREE_CODE (type);
  
    DECL_ARTIFICIAL (type_decl) = artificial_p;
! 
    process_attributes (type_decl, attr_list);
  
    /* Pass type declaration information to the debugger unless this is an
*************** create_type_decl (tree type_name,
*** 1233,1244 ****
       a dummy type, which will be completed later, or a type for which
       debugging information was not requested.  */
    if (code == UNCONSTRAINED_ARRAY_TYPE || TYPE_IS_DUMMY_P (type)
!       || ! debug_info_p)
      DECL_IGNORED_P (type_decl) = 1;
    else if (code != ENUMERAL_TYPE && code != RECORD_TYPE
!       && ! ((code == POINTER_TYPE || code == REFERENCE_TYPE)
! 	    && TYPE_IS_DUMMY_P (TREE_TYPE (type))))
!     rest_of_decl_compilation (type_decl, NULL, global_bindings_p (), 0);
  
    return type_decl;
  }
--- 1183,1197 ----
       a dummy type, which will be completed later, or a type for which
       debugging information was not requested.  */
    if (code == UNCONSTRAINED_ARRAY_TYPE || TYPE_IS_DUMMY_P (type)
!       || !debug_info_p)
      DECL_IGNORED_P (type_decl) = 1;
    else if (code != ENUMERAL_TYPE && code != RECORD_TYPE
! 	   && !((code == POINTER_TYPE || code == REFERENCE_TYPE)
! 		&& TYPE_IS_DUMMY_P (TREE_TYPE (type))))
!     rest_of_decl_compilation (type_decl, global_bindings_p (), 0);
! 
!   if (!TYPE_IS_DUMMY_P (type))
!     gnat_pushdecl (type_decl, gnat_node);
  
    return type_decl;
  }
*************** create_type_decl (tree type_name,
*** 1248,1278 ****
     (a GCC ..._TYPE node).  VAR_INIT is the GCC tree for an optional initial
     expression; NULL_TREE if none.
  
!    CONST_FLAG is nonzero if this variable is constant.
  
!    PUBLIC_FLAG is nonzero if this definition is to be made visible outside of
     the current compilation unit. This flag should be set when processing the
     variable definitions in a package specification.  EXTERN_FLAG is nonzero
     when processing an external variable declaration (as opposed to a
     definition: no storage is to be allocated for the variable here).
  
     STATIC_FLAG is only relevant when not at top level.  In that case
!    it indicates whether to always allocate storage to the variable.   */
  
  tree
! create_var_decl (tree var_name,
!                  tree asm_name,
!                  tree type,
!                  tree var_init,
!                  int const_flag,
!                  int public_flag,
!                  int extern_flag,
!                  int static_flag,
!                  struct attrib *attr_list)
  {
!   int init_const
!     = (var_init == 0
!        ? 0
         : (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (TREE_TYPE (var_init))
  	  && (global_bindings_p () || static_flag
  	      ? 0 != initializer_constant_valid_p (var_init,
--- 1201,1227 ----
     (a GCC ..._TYPE node).  VAR_INIT is the GCC tree for an optional initial
     expression; NULL_TREE if none.
  
!    CONST_FLAG is true if this variable is constant.
  
!    PUBLIC_FLAG is true if this definition is to be made visible outside of
     the current compilation unit. This flag should be set when processing the
     variable definitions in a package specification.  EXTERN_FLAG is nonzero
     when processing an external variable declaration (as opposed to a
     definition: no storage is to be allocated for the variable here).
  
     STATIC_FLAG is only relevant when not at top level.  In that case
!    it indicates whether to always allocate storage to the variable.
! 
!    GNAT_NODE is used for the position of the decl.  */
  
  tree
! create_var_decl (tree var_name, tree asm_name, tree type, tree var_init,
!                  bool const_flag, bool public_flag, bool extern_flag,
!                  bool static_flag, struct attrib *attr_list, Node_Id gnat_node)
  {
!   bool init_const
!     = (!var_init
!        ? false
         : (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (TREE_TYPE (var_init))
  	  && (global_bindings_p () || static_flag
  	      ? 0 != initializer_constant_valid_p (var_init,
*************** create_var_decl (tree var_name,
*** 1287,1320 ****
  		   && 0 >= compare_tree_int (TYPE_SIZE_UNIT (type),
  					     GET_MODE_SIZE (DCmode)))
  		  ? CONST_DECL : VAR_DECL, var_name, type);
-   tree assign_init = 0;
  
    /* If this is external, throw away any initializations unless this is a
!      CONST_DECL (meaning we have a constant); they will be done elsewhere.  If
!      we are defining a global here, leave a constant initialization and save
!      any variable elaborations for the elaboration routine.  Otherwise, if
!      the initializing expression is not the same as TYPE, generate the
!      initialization with an assignment statement, since it knows how
!      to do the required adjustents.  If we are just annotating types,
!      throw away the initialization if it isn't a constant.  */
! 
    if ((extern_flag && TREE_CODE (var_decl) != CONST_DECL)
!       || (type_annotate_only && var_init != 0 && ! TREE_CONSTANT (var_init)))
!     var_init = 0;
! 
!   if (global_bindings_p () && var_init != 0 && ! init_const)
!     {
!       add_pending_elaborations (var_decl, var_init);
!       var_init = 0;
!     }
! 
!   else if (var_init != 0
! 	   && ((TYPE_MAIN_VARIANT (TREE_TYPE (var_init))
! 		!= TYPE_MAIN_VARIANT (type))
! 	       || (static_flag && ! init_const)))
!     assign_init = var_init, var_init = 0;
  
    DECL_COMMON   (var_decl) = !flag_no_common;
    DECL_INITIAL  (var_decl) = var_init;
    TREE_READONLY (var_decl) = const_flag;
    DECL_EXTERNAL (var_decl) = extern_flag;
--- 1236,1259 ----
  		   && 0 >= compare_tree_int (TYPE_SIZE_UNIT (type),
  					     GET_MODE_SIZE (DCmode)))
  		  ? CONST_DECL : VAR_DECL, var_name, type);
  
    /* If this is external, throw away any initializations unless this is a
!      CONST_DECL (meaning we have a constant); they will be done elsewhere.
!      If we are defining a global here, leave a constant initialization and
!      save any variable elaborations for the elaboration routine.  If we are
!      just annotating types, throw away the initialization if it isn't a
!      constant.  */
    if ((extern_flag && TREE_CODE (var_decl) != CONST_DECL)
!       || (type_annotate_only && var_init && !TREE_CONSTANT (var_init)))
!     var_init = NULL_TREE;
  
+   /* Ada doesn't feature Fortran-like COMMON variables so we shouldn't
+      try to fiddle with DECL_COMMON.  However, on platforms that don't
+      support global BSS sections, uninitialized global variables would
+      go in DATA instead, thus increasing the size of the executable.  */
+ #if !defined(ASM_OUTPUT_BSS) && !defined(ASM_OUTPUT_ALIGNED_BSS)
    DECL_COMMON   (var_decl) = !flag_no_common;
+ #endif
    DECL_INITIAL  (var_decl) = var_init;
    TREE_READONLY (var_decl) = const_flag;
    DECL_EXTERNAL (var_decl) = extern_flag;
*************** create_var_decl (tree var_name,
*** 1323,1366 ****
    TREE_THIS_VOLATILE (var_decl) = TREE_SIDE_EFFECTS (var_decl)
      = TYPE_VOLATILE (type);
  
!   /* At the global binding level we need to allocate static storage for the
!      variable if and only if its not external. If we are not at the top level
       we allocate automatic storage unless requested not to.  */
!   TREE_STATIC (var_decl) = global_bindings_p () ? !extern_flag : static_flag;
  
!   if (asm_name != 0)
      SET_DECL_ASSEMBLER_NAME (var_decl, asm_name);
  
    process_attributes (var_decl, attr_list);
  
!   /* Add this decl to the current binding level and generate any
!      needed code and RTL. */
!   var_decl = pushdecl (var_decl);
!   expand_decl (var_decl);
! 
!   if (DECL_CONTEXT (var_decl) != 0)
!     expand_decl_init (var_decl);
  
-   /* If this is volatile, force it into memory.  */
    if (TREE_SIDE_EFFECTS (var_decl))
!     gnat_mark_addressable (var_decl);
  
    if (TREE_CODE (var_decl) != CONST_DECL)
!     rest_of_decl_compilation (var_decl, 0, global_bindings_p (), 0);
! 
!   if (assign_init != 0)
!     {
!       /* If VAR_DECL has a padded type, convert it to the unpadded
! 	 type so the assignment is done properly.  */
!       tree lhs = var_decl;
! 
!       if (TREE_CODE (TREE_TYPE (lhs)) == RECORD_TYPE
! 	  && TYPE_IS_PADDING_P (TREE_TYPE (lhs)))
! 	lhs = convert (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (lhs))), lhs);
! 
!       expand_expr_stmt (build_binary_op (MODIFY_EXPR, NULL_TREE, lhs,
! 					 assign_init));
!     }
  
    return var_decl;
  }
--- 1262,1287 ----
    TREE_THIS_VOLATILE (var_decl) = TREE_SIDE_EFFECTS (var_decl)
      = TYPE_VOLATILE (type);
  
!   /* If it's public and not external, always allocate storage for it.
!      At the global binding level we need to allocate static storage for the
!      variable if and only if it's not external. If we are not at the top level
       we allocate automatic storage unless requested not to.  */
!   TREE_STATIC (var_decl)
!     = public_flag || (global_bindings_p () ? !extern_flag : static_flag);
  
!   if (asm_name)
      SET_DECL_ASSEMBLER_NAME (var_decl, asm_name);
  
    process_attributes (var_decl, attr_list);
  
!   /* Add this decl to the current binding level.  */
!   gnat_pushdecl (var_decl, gnat_node);
  
    if (TREE_SIDE_EFFECTS (var_decl))
!     TREE_ADDRESSABLE (var_decl) = 1;
  
    if (TREE_CODE (var_decl) != CONST_DECL)
!     rest_of_decl_compilation (var_decl, global_bindings_p (), 0);
  
    return var_decl;
  }
*************** create_var_decl (tree var_name,
*** 1370,1446 ****
     this field is in a record type with a "pragma pack".  If SIZE is nonzero
     it is the specified size for this field.  If POS is nonzero, it is the bit
     position.  If ADDRESSABLE is nonzero, it means we are allowed to take
!    the address of this field for aliasing purposes.  */
  
  tree
! create_field_decl (tree field_name,
!                    tree field_type,
!                    tree record_type,
!                    int packed,
!                    tree size,
!                    tree pos,
!                    int addressable)
  {
    tree field_decl = build_decl (FIELD_DECL, field_name, field_type);
  
    DECL_CONTEXT (field_decl) = record_type;
!   TREE_READONLY (field_decl) = TREE_READONLY (field_type);
  
    /* If FIELD_TYPE is BLKmode, we must ensure this is aligned to at least a
       byte boundary since GCC cannot handle less-aligned BLKmode bitfields.  */
    if (packed && TYPE_MODE (field_type) == BLKmode)
      DECL_ALIGN (field_decl) = BITS_PER_UNIT;
  
!   /* If a size is specified, use it.  Otherwise, see if we have a size
!      to use that may differ from the natural size of the object.  */
!   if (size != 0)
      size = convert (bitsizetype, size);
!   else if (packed)
      {
!       if (packed == 1 && ! operand_equal_p (rm_size (field_type),
! 					    TYPE_SIZE (field_type), 0))
! 	size = rm_size (field_type);
  
        /* For a constant size larger than MAX_FIXED_MODE_SIZE, round up to
! 	 byte.  */
!       if (size != 0 && TREE_CODE (size) == INTEGER_CST
! 	  && compare_tree_int (size, MAX_FIXED_MODE_SIZE) > 0)
! 	size = round_up (size, BITS_PER_UNIT);
      }
  
!   /* Make a bitfield if a size is specified for two reasons: first if the size
!      differs from the natural size.  Second, if the alignment is insufficient.
!      There are a number of ways the latter can be true.  But never make a
!      bitfield if the type of the field has a nonconstant size.  */
  
!   if (size != 0 && TREE_CODE (size) == INTEGER_CST
        && TREE_CODE (TYPE_SIZE (field_type)) == INTEGER_CST
!       && (! operand_equal_p (TYPE_SIZE (field_type), size, 0)
! 	  || (pos != 0
! 	      && ! value_zerop (size_binop (TRUNC_MOD_EXPR, pos,
! 					    bitsize_int (TYPE_ALIGN
! 							 (field_type)))))
  	  || packed
  	  || (TYPE_ALIGN (record_type) != 0
  	      && TYPE_ALIGN (record_type) < TYPE_ALIGN (field_type))))
      {
        DECL_BIT_FIELD (field_decl) = 1;
        DECL_SIZE (field_decl) = size;
!       if (! packed && pos == 0)
  	DECL_ALIGN (field_decl)
  	  = (TYPE_ALIGN (record_type) != 0
  	     ? MIN (TYPE_ALIGN (record_type), TYPE_ALIGN (field_type))
  	     : TYPE_ALIGN (field_type));
      }
  
!   DECL_PACKED (field_decl) = pos != 0 ? DECL_BIT_FIELD (field_decl) : packed;
    DECL_ALIGN (field_decl)
      = MAX (DECL_ALIGN (field_decl),
  	   DECL_BIT_FIELD (field_decl) ? 1
  	   : packed && TYPE_MODE (field_type) != BLKmode ? BITS_PER_UNIT
  	   : TYPE_ALIGN (field_type));
  
!   if (pos != 0)
      {
        /* We need to pass in the alignment the DECL is known to have.
  	 This is the lowest-order bit set in POS, but no more than
--- 1291,1373 ----
     this field is in a record type with a "pragma pack".  If SIZE is nonzero
     it is the specified size for this field.  If POS is nonzero, it is the bit
     position.  If ADDRESSABLE is nonzero, it means we are allowed to take
!    the address of this field for aliasing purposes. If it is negative, we
!    should not make a bitfield, which is used by make_aligning_type.   */
  
  tree
! create_field_decl (tree field_name, tree field_type, tree record_type,
!                    int packed, tree size, tree pos, int addressable)
  {
    tree field_decl = build_decl (FIELD_DECL, field_name, field_type);
  
    DECL_CONTEXT (field_decl) = record_type;
!   TREE_READONLY (field_decl) = TYPE_READONLY (field_type);
  
    /* If FIELD_TYPE is BLKmode, we must ensure this is aligned to at least a
       byte boundary since GCC cannot handle less-aligned BLKmode bitfields.  */
    if (packed && TYPE_MODE (field_type) == BLKmode)
      DECL_ALIGN (field_decl) = BITS_PER_UNIT;
  
!   /* If a size is specified, use it.  Otherwise, if the record type is packed
!      compute a size to use, which may differ from the object's natural size.
!      We always set a size in this case to trigger the checks for bitfield
!      creation below, which is typically required when no position has been
!      specified.  */
!   if (size)
      size = convert (bitsizetype, size);
!   else if (packed == 1)
      {
!       size = rm_size (field_type);
  
        /* For a constant size larger than MAX_FIXED_MODE_SIZE, round up to
!          byte.  */
!       if (TREE_CODE (size) == INTEGER_CST
!           && compare_tree_int (size, MAX_FIXED_MODE_SIZE) > 0)
!         size = round_up (size, BITS_PER_UNIT);
      }
  
!   /* If we may, according to ADDRESSABLE, make a bitfield if a size is
!      specified for two reasons: first if the size differs from the natural
!      size.  Second, if the alignment is insufficient.  There are a number of
!      ways the latter can be true.
  
!      We never make a bitfield if the type of the field has a nonconstant size,
!      because no such entity requiring bitfield operations should reach here.
! 
!      We do *preventively* make a bitfield when there might be the need for it
!      but we don't have all the necessary information to decide, as is the case
!      of a field with no specified position in a packed record.
! 
!      We also don't look at STRICT_ALIGNMENT here, and rely on later processing
!      in layout_decl or finish_record_type to clear the bit_field indication if
!      it is in fact not needed.  */
!   if (addressable >= 0
!       && size
!       && TREE_CODE (size) == INTEGER_CST
        && TREE_CODE (TYPE_SIZE (field_type)) == INTEGER_CST
!       && (!operand_equal_p (TYPE_SIZE (field_type), size, 0)
! 	  || (pos && !value_factor_p (pos, TYPE_ALIGN (field_type)))
  	  || packed
  	  || (TYPE_ALIGN (record_type) != 0
  	      && TYPE_ALIGN (record_type) < TYPE_ALIGN (field_type))))
      {
        DECL_BIT_FIELD (field_decl) = 1;
        DECL_SIZE (field_decl) = size;
!       if (!packed && !pos)
  	DECL_ALIGN (field_decl)
  	  = (TYPE_ALIGN (record_type) != 0
  	     ? MIN (TYPE_ALIGN (record_type), TYPE_ALIGN (field_type))
  	     : TYPE_ALIGN (field_type));
      }
  
!   DECL_PACKED (field_decl) = pos ? DECL_BIT_FIELD (field_decl) : packed;
    DECL_ALIGN (field_decl)
      = MAX (DECL_ALIGN (field_decl),
  	   DECL_BIT_FIELD (field_decl) ? 1
  	   : packed && TYPE_MODE (field_type) != BLKmode ? BITS_PER_UNIT
  	   : TYPE_ALIGN (field_type));
  
!   if (pos)
      {
        /* We need to pass in the alignment the DECL is known to have.
  	 This is the lowest-order bit set in POS, but no more than
*************** create_field_decl (tree field_name,
*** 1478,1487 ****
    if (AGGREGATE_TYPE_P (field_type))
      addressable = 1;
  
!   /* Mark the decl as nonaddressable if it either is indicated so semantically
!      or if it is a bit field.  */
!   DECL_NONADDRESSABLE_P (field_decl)
!     = ! addressable || DECL_BIT_FIELD (field_decl);
  
    return field_decl;
  }
--- 1405,1419 ----
    if (AGGREGATE_TYPE_P (field_type))
      addressable = 1;
  
!   /* Mark the decl as nonaddressable if it is indicated so semantically,
!      meaning we won't ever attempt to take the address of the field.
! 
!      It may also be "technically" nonaddressable, meaning that even if we
!      attempt to take the field's address we will actually get the address of a
!      copy. This is the case for true bitfields, but the DECL_BIT_FIELD value
!      we have at this point is not accurate enough, so we don't account for
!      this here and let finish_record_type decide.  */
!   DECL_NONADDRESSABLE_P (field_decl) = !addressable;
  
    return field_decl;
  }
*************** create_field_decl (tree field_name,
*** 1489,1495 ****
  /* Subroutine of previous function: return nonzero if EXP, ignoring any side
     effects, has the value of zero.  */
  
! static int
  value_zerop (tree exp)
  {
    if (TREE_CODE (exp) == COMPOUND_EXPR)
--- 1421,1427 ----
  /* Subroutine of previous function: return nonzero if EXP, ignoring any side
     effects, has the value of zero.  */
  
! static bool
  value_zerop (tree exp)
  {
    if (TREE_CODE (exp) == COMPOUND_EXPR)
*************** value_zerop (tree exp)
*** 1499,1518 ****
  }
  
  /* Returns a PARM_DECL node. PARAM_NAME is the name of the parameter,
!    PARAM_TYPE is its type.  READONLY is nonzero if the parameter is
     readonly (either an IN parameter or an address of a pass-by-ref
     parameter). */
  
  tree
! create_param_decl (tree param_name, tree param_type, int readonly)
  {
    tree param_decl = build_decl (PARM_DECL, param_name, param_type);
  
!   /* Honor the PROMOTE_PROTOTYPES target macro, as not doing so can
       lead to various ABI violations.  */
! #ifdef PROMOTE_PROTOTYPES
!   if ((TREE_CODE (param_type) == INTEGER_TYPE
!        || TREE_CODE (param_type) == ENUMERAL_TYPE)
        && TYPE_PRECISION (param_type) < TYPE_PRECISION (integer_type_node))
      {
        /* We have to be careful about biased types here.  Make a subtype
--- 1431,1450 ----
  }
  
  /* Returns a PARM_DECL node. PARAM_NAME is the name of the parameter,
!    PARAM_TYPE is its type.  READONLY is true if the parameter is
     readonly (either an IN parameter or an address of a pass-by-ref
     parameter). */
  
  tree
! create_param_decl (tree param_name, tree param_type, bool readonly)
  {
    tree param_decl = build_decl (PARM_DECL, param_name, param_type);
  
!   /* Honor targetm.calls.promote_prototypes(), as not doing so can
       lead to various ABI violations.  */
!   if (targetm.calls.promote_prototypes (param_type)
!       && (TREE_CODE (param_type) == INTEGER_TYPE
! 	  || TREE_CODE (param_type) == ENUMERAL_TYPE)
        && TYPE_PRECISION (param_type) < TYPE_PRECISION (integer_type_node))
      {
        /* We have to be careful about biased types here.  Make a subtype
*************** create_param_decl (tree param_name, tree
*** 1530,1536 ****
        else
  	param_type = integer_type_node;
      }
- #endif
  
    DECL_ARG_TYPE (param_decl) = param_type;
    DECL_ARG_TYPE_AS_WRITTEN (param_decl) = param_type;
--- 1462,1467 ----
*************** process_attributes (tree decl, struct at
*** 1547,1553 ****
      switch (attr_list->type)
        {
        case ATTR_MACHINE_ATTRIBUTE:
! 	decl_attributes (&decl, tree_cons (attr_list->name, attr_list->arg,
  					   NULL_TREE),
  			 ATTR_FLAG_TYPE_IN_PLACE);
  	break;
--- 1478,1484 ----
      switch (attr_list->type)
        {
        case ATTR_MACHINE_ATTRIBUTE:
! 	decl_attributes (&decl, tree_cons (attr_list->name, attr_list->args,
  					   NULL_TREE),
  			 ATTR_FLAG_TYPE_IN_PLACE);
  	break;
*************** process_attributes (tree decl, struct at
*** 1566,1614 ****
  	break;
  
        case ATTR_LINK_SECTION:
! #ifdef ASM_OUTPUT_SECTION_NAME
! 	DECL_SECTION_NAME (decl)
! 	  = build_string (IDENTIFIER_LENGTH (attr_list->name),
! 			  IDENTIFIER_POINTER (attr_list->name));
! 	DECL_COMMON (decl) = 0;
! #else
! 	post_error ("?section attributes are not supported for this target",
! 		    attr_list->error_point);
! #endif
  	break;
        }
  }
  
! /* Add some pending elaborations on the list.  */
! 
! void
! add_pending_elaborations (tree var_decl, tree var_init)
! {
!   if (var_init != 0)
!     Check_Elaboration_Code_Allowed (error_gnat_node);
! 
!   pending_elaborations
!     = chainon (pending_elaborations, build_tree_list (var_decl, var_init));
! }
! 
! /* Obtain any pending elaborations and clear the old list.  */
! 
! tree
! get_pending_elaborations (void)
! {
!   /* Each thing added to the list went on the end; we want it on the
!      beginning.  */
!   tree result = TREE_CHAIN (pending_elaborations);
! 
!   TREE_CHAIN (pending_elaborations) = 0;
!   return result;
! }
! 
! /* Return true if VALUE is a multiple of FACTOR. FACTOR must be a power
!    of 2. */
  
! static int
! value_factor_p (tree value, int factor)
  {
    if (host_integerp (value, 1))
      return tree_low_cst (value, 1) % factor == 0;
--- 1497,1521 ----
  	break;
  
        case ATTR_LINK_SECTION:
! 	if (targetm.have_named_sections)
! 	  {
! 	    DECL_SECTION_NAME (decl)
! 	      = build_string (IDENTIFIER_LENGTH (attr_list->name),
! 			      IDENTIFIER_POINTER (attr_list->name));
! 	    DECL_COMMON (decl) = 0;
! 	  }
! 	else
! 	  post_error ("?section attributes are not supported for this target",
! 		      attr_list->error_point);
  	break;
        }
  }
  
! /* Return true if VALUE is a known to be a multiple of FACTOR, which must be
!    a power of 2. */
  
! static bool
! value_factor_p (tree value, HOST_WIDE_INT factor)
  {
    if (host_integerp (value, 1))
      return tree_low_cst (value, 1) % factor == 0;
*************** value_factor_p (tree value, int factor)
*** 1626,1637 ****
     is the distance in bits between the end of PREV_FIELD and the starting
     position of CURR_FIELD. It is ignored if null. */
  
! static int
  potential_alignment_gap (tree prev_field, tree curr_field, tree offset)
  {
    /* If this is the first field of the record, there cannot be any gap */
    if (!prev_field)
!     return 0;
  
    /* If the previous field is a union type, then return False: The only
       time when such a field is not the last field of the record is when
--- 1533,1544 ----
     is the distance in bits between the end of PREV_FIELD and the starting
     position of CURR_FIELD. It is ignored if null. */
  
! static bool
  potential_alignment_gap (tree prev_field, tree curr_field, tree offset)
  {
    /* If this is the first field of the record, there cannot be any gap */
    if (!prev_field)
!     return false;
  
    /* If the previous field is a union type, then return False: The only
       time when such a field is not the last field of the record is when
*************** potential_alignment_gap (tree prev_field
*** 1639,1651 ****
       was a rep clause for every field), in which case we don't want the
       alignment constraint to override them. */
    if (TREE_CODE (TREE_TYPE (prev_field)) == QUAL_UNION_TYPE)
!     return 0;
  
    /* If the distance between the end of prev_field and the begining of
       curr_field is constant, then there is a gap if the value of this
       constant is not null. */
    if (offset && host_integerp (offset, 1))
!     return (!integer_zerop (offset));
  
    /* If the size and position of the previous field are constant,
       then check the sum of this size and position. There will be a gap
--- 1546,1558 ----
       was a rep clause for every field), in which case we don't want the
       alignment constraint to override them. */
    if (TREE_CODE (TREE_TYPE (prev_field)) == QUAL_UNION_TYPE)
!     return false;
  
    /* If the distance between the end of prev_field and the begining of
       curr_field is constant, then there is a gap if the value of this
       constant is not null. */
    if (offset && host_integerp (offset, 1))
!     return !integer_zerop (offset);
  
    /* If the size and position of the previous field are constant,
       then check the sum of this size and position. There will be a gap
*************** potential_alignment_gap (tree prev_field
*** 1660,1727 ****
       of the current field alignment, there can not be any gap. */
    if (value_factor_p (bit_position (prev_field), DECL_ALIGN (curr_field))
        && value_factor_p (DECL_SIZE (prev_field), DECL_ALIGN (curr_field)))
!     return 0;
  
    /* Fallback, return that there may be a potential gap */
!   return 1;
! }
! 
! /* Return nonzero if there are pending elaborations.  */
! 
! int
! pending_elaborations_p (void)
! {
!   return TREE_CHAIN (pending_elaborations) != 0;
! }
! 
! /* Save a copy of the current pending elaboration list and make a new
!    one.  */
! 
! void
! push_pending_elaborations (void)
! {
!   struct e_stack *p = (struct e_stack *) ggc_alloc (sizeof (struct e_stack));
! 
!   p->next = elist_stack;
!   p->elab_list = pending_elaborations;
!   elist_stack = p;
!   pending_elaborations = build_tree_list (NULL_TREE, NULL_TREE);
! }
! 
! /* Pop the stack of pending elaborations.  */
! 
! void
! pop_pending_elaborations (void)
! {
!   struct e_stack *p = elist_stack;
! 
!   pending_elaborations = p->elab_list;
!   elist_stack = p->next;
! }
! 
! /* Return the current position in pending_elaborations so we can insert
!    elaborations after that point.  */
! 
! tree
! get_elaboration_location (void)
! {
!   return tree_last (pending_elaborations);
! }
! 
! /* Insert the current elaborations after ELAB, which is in some elaboration
!    list.  */
! 
! void
! insert_elaboration_list (tree elab)
! {
!   tree next = TREE_CHAIN (elab);
! 
!   if (TREE_CHAIN (pending_elaborations))
!     {
!       TREE_CHAIN (elab) = TREE_CHAIN (pending_elaborations);
!       TREE_CHAIN (tree_last (pending_elaborations)) = next;
!       TREE_CHAIN (pending_elaborations) = 0;
!     }
  }
  
  /* Returns a LABEL_DECL node for LABEL_NAME.  */
--- 1567,1576 ----
       of the current field alignment, there can not be any gap. */
    if (value_factor_p (bit_position (prev_field), DECL_ALIGN (curr_field))
        && value_factor_p (DECL_SIZE (prev_field), DECL_ALIGN (curr_field)))
!     return false;
  
    /* Fallback, return that there may be a potential gap */
!   return true;
  }
  
  /* Returns a LABEL_DECL node for LABEL_NAME.  */
*************** create_label_decl (tree label_name)
*** 1744,1760 ****
     PARM_DECL nodes chained through the TREE_CHAIN field).
  
     INLINE_FLAG, PUBLIC_FLAG, EXTERN_FLAG, and ATTR_LIST are used to set the
!    appropriate fields in the FUNCTION_DECL.  */
  
  tree
! create_subprog_decl (tree subprog_name,
!                      tree asm_name,
!                      tree subprog_type,
!                      tree param_decl_list,
!                      int inline_flag,
!                      int public_flag,
!                      int extern_flag,
!                      struct attrib *attr_list)
  {
    tree return_type  = TREE_TYPE (subprog_type);
    tree subprog_decl = build_decl (FUNCTION_DECL, subprog_name, subprog_type);
--- 1593,1605 ----
     PARM_DECL nodes chained through the TREE_CHAIN field).
  
     INLINE_FLAG, PUBLIC_FLAG, EXTERN_FLAG, and ATTR_LIST are used to set the
!    appropriate fields in the FUNCTION_DECL.  GNAT_NODE gives the location.  */
  
  tree
! create_subprog_decl (tree subprog_name, tree asm_name,
!                      tree subprog_type, tree param_decl_list, bool inline_flag,
! 		     bool public_flag, bool extern_flag,
!                      struct attrib *attr_list, Node_Id gnat_node)
  {
    tree return_type  = TREE_TYPE (subprog_type);
    tree subprog_decl = build_decl (FUNCTION_DECL, subprog_name, subprog_type);
*************** create_subprog_decl (tree subprog_name,
*** 1762,1800 ****
    /* If this is a function nested inside an inlined external function, it
       means we aren't going to compile the outer function unless it is
       actually inlined, so do the same for us.  */
!   if (current_function_decl != 0 && DECL_INLINE (current_function_decl)
        && DECL_EXTERNAL (current_function_decl))
!     extern_flag = 1;
  
    DECL_EXTERNAL (subprog_decl)  = extern_flag;
    TREE_PUBLIC (subprog_decl)    = public_flag;
!   DECL_INLINE (subprog_decl)    = inline_flag;
    TREE_READONLY (subprog_decl)  = TYPE_READONLY (subprog_type);
    TREE_THIS_VOLATILE (subprog_decl) = TYPE_VOLATILE (subprog_type);
    TREE_SIDE_EFFECTS (subprog_decl) = TYPE_VOLATILE (subprog_type);
    DECL_ARGUMENTS (subprog_decl) = param_decl_list;
    DECL_RESULT (subprog_decl)    = build_decl (RESULT_DECL, 0, return_type);
  
!   if (asm_name != 0)
      SET_DECL_ASSEMBLER_NAME (subprog_decl, asm_name);
  
    process_attributes (subprog_decl, attr_list);
  
    /* Add this decl to the current binding level.  */
!   subprog_decl = pushdecl (subprog_decl);
  
    /* Output the assembler code and/or RTL for the declaration.  */
!   rest_of_decl_compilation (subprog_decl, 0, global_bindings_p (), 0);
  
    return subprog_decl;
  }
  
- /* Count how deep we are into nested functions.  This is because
-    we shouldn't call the backend function context routines unless we
-    are in a nested function.  */
- 
- static int function_nesting_depth;
- 
  /* Set up the framework for generating code for SUBPROG_DECL, a subprogram
     body. This routine needs to be invoked before processing the declarations
     appearing in the subprogram.  */
--- 1607,1644 ----
    /* If this is a function nested inside an inlined external function, it
       means we aren't going to compile the outer function unless it is
       actually inlined, so do the same for us.  */
!   if (current_function_decl && DECL_INLINE (current_function_decl)
        && DECL_EXTERNAL (current_function_decl))
!     extern_flag = true;
  
    DECL_EXTERNAL (subprog_decl)  = extern_flag;
    TREE_PUBLIC (subprog_decl)    = public_flag;
!   TREE_STATIC (subprog_decl)	= 1;
    TREE_READONLY (subprog_decl)  = TYPE_READONLY (subprog_type);
    TREE_THIS_VOLATILE (subprog_decl) = TYPE_VOLATILE (subprog_type);
    TREE_SIDE_EFFECTS (subprog_decl) = TYPE_VOLATILE (subprog_type);
    DECL_ARGUMENTS (subprog_decl) = param_decl_list;
    DECL_RESULT (subprog_decl)    = build_decl (RESULT_DECL, 0, return_type);
+   DECL_ARTIFICIAL (DECL_RESULT (subprog_decl)) = 1;
+   DECL_IGNORED_P (DECL_RESULT (subprog_decl)) = 1;
  
!   if (inline_flag)
!     DECL_DECLARED_INLINE_P (subprog_decl) = 1;
! 
!   if (asm_name)
      SET_DECL_ASSEMBLER_NAME (subprog_decl, asm_name);
  
    process_attributes (subprog_decl, attr_list);
  
    /* Add this decl to the current binding level.  */
!   gnat_pushdecl (subprog_decl, gnat_node);
  
    /* Output the assembler code and/or RTL for the declaration.  */
!   rest_of_decl_compilation (subprog_decl, global_bindings_p (), 0);
  
    return subprog_decl;
  }
  
  /* Set up the framework for generating code for SUBPROG_DECL, a subprogram
     body. This routine needs to be invoked before processing the declarations
     appearing in the subprogram.  */
*************** static int function_nesting_depth;
*** 1802,1929 ****
  void
  begin_subprog_body (tree subprog_decl)
  {
-   tree param_decl_list;
    tree param_decl;
-   tree next_param;
- 
-   if (function_nesting_depth++ != 0)
-     push_function_context ();
- 
-   announce_function (subprog_decl);
  
-   /* Make this field nonzero so further routines know that this is not
-      tentative. error_mark_node is replaced below (in poplevel) with the
-      adequate BLOCK.  */
-   DECL_INITIAL (subprog_decl)  = error_mark_node;
- 
-   /* This function exists in static storage. This does not mean `static' in
-      the C sense!  */
-   TREE_STATIC (subprog_decl)   = 1;
- 
-   /* Enter a new binding level.  */
    current_function_decl = subprog_decl;
!   pushlevel (0);
! 
!   /* Push all the PARM_DECL nodes onto the current scope (i.e. the scope of the
!      subprogram body) so that they can be recognized as local variables in the
!      subprogram.
! 
!      The list of PARM_DECL nodes is stored in the right order in
!      DECL_ARGUMENTS.  Since ..._DECL nodes get stored in the reverse order in
!      which they are transmitted to `pushdecl' we need to reverse the list of
!      PARM_DECLs if we want it to be stored in the right order. The reason why
!      we want to make sure the PARM_DECLs are stored in the correct order is
!      that this list will be retrieved in a few lines with a call to `getdecl'
!      to store it back into the DECL_ARGUMENTS field.  */
!     param_decl_list = nreverse (DECL_ARGUMENTS (subprog_decl));
! 
!     for (param_decl = param_decl_list; param_decl; param_decl = next_param)
!       {
! 	next_param = TREE_CHAIN (param_decl);
! 	TREE_CHAIN (param_decl) = NULL;
! 	pushdecl (param_decl);
!       }
  
!   /* Store back the PARM_DECL nodes. They appear in the right order. */
!   DECL_ARGUMENTS (subprog_decl) = getdecls ();
  
!   init_function_start (subprog_decl);
!   expand_function_start (subprog_decl, 0);
  
!   /* If this function is `main', emit a call to `__main'
!      to run global initializers, etc.  */
!   if (DECL_ASSEMBLER_NAME (subprog_decl) != 0
!       && MAIN_NAME_P (DECL_ASSEMBLER_NAME (subprog_decl))
!       && DECL_CONTEXT (subprog_decl) == NULL_TREE)
!     expand_main_function ();
  }
  
  /* Finish the definition of the current subprogram and compile it all the way
!    to assembler language output.  */
  
  void
! end_subprog_body (void)
  {
!   tree decl;
!   tree cico_list;
  
!   poplevel (1, 0, 1);
!   BLOCK_SUPERCONTEXT (DECL_INITIAL (current_function_decl))
!     = current_function_decl;
  
!   /* Mark the RESULT_DECL as being in this subprogram. */
!   DECL_CONTEXT (DECL_RESULT (current_function_decl)) = current_function_decl;
  
!   expand_function_end ();
  
!   /* If this is a nested function, push a new GC context.  That will keep
!      local variables on the stack from being collected while we're doing
!      the compilation of this function.  */
!   if (function_nesting_depth > 1)
!     ggc_push_context ();
  
!   rest_of_compilation (current_function_decl);
  
!   if (function_nesting_depth > 1)
!     ggc_pop_context ();
  
!   /* Throw away any VAR_DECLs we made for OUT parameters; they must
!      not be seen when we call this function and will be in
!      unallocated memory anyway.  */
!   for (cico_list = TYPE_CI_CO_LIST (TREE_TYPE (current_function_decl));
!        cico_list != 0; cico_list = TREE_CHAIN (cico_list))
!     TREE_VALUE (cico_list) = 0;
  
!   if (DECL_SAVED_INSNS (current_function_decl) == 0)
      {
!       /* Throw away DECL_RTL in any PARM_DECLs unless this function
! 	 was saved for inline, in which case the DECL_RTLs are in
! 	 preserved memory.  */
!       for (decl = DECL_ARGUMENTS (current_function_decl);
! 	   decl != 0; decl = TREE_CHAIN (decl))
! 	{
! 	  SET_DECL_RTL (decl, 0);
! 	  DECL_INCOMING_RTL (decl) = 0;
! 	}
  
!       /* Similarly, discard DECL_RTL of the return value.  */
!       SET_DECL_RTL (DECL_RESULT (current_function_decl), 0);
  
!       /* But DECL_INITIAL must remain nonzero so we know this
! 	 was an actual function definition unless toplev.c decided not
! 	 to inline it.  */
!       if (DECL_INITIAL (current_function_decl) != 0)
! 	DECL_INITIAL (current_function_decl) = error_mark_node;
  
!       DECL_ARGUMENTS (current_function_decl) = 0;
!     }
  
!   /* If we are not at the bottom of the function nesting stack, pop up to
!      the containing function.  Otherwise show we aren't in any function.  */
!   if (--function_nesting_depth != 0)
!     pop_function_context ();
!   else
!     current_function_decl = 0;
  }
  
  /* Return a definition for a builtin function named NAME and whose data type
--- 1646,1738 ----
  void
  begin_subprog_body (tree subprog_decl)
  {
    tree param_decl;
  
    current_function_decl = subprog_decl;
!   announce_function (subprog_decl);
  
!   /* Enter a new binding level and show that all the parameters belong to
!      this function.  */
!   gnat_pushlevel ();
!   for (param_decl = DECL_ARGUMENTS (subprog_decl); param_decl;
!        param_decl = TREE_CHAIN (param_decl))
!     DECL_CONTEXT (param_decl) = subprog_decl;
  
!   make_decl_rtl (subprog_decl);
  
!   /* We handle pending sizes via the elaboration of types, so we don't need to
!      save them.  This causes them to be marked as part of the outer function
!      and then discarded.  */
!   get_pending_sizes ();
  }
  
  /* Finish the definition of the current subprogram and compile it all the way
!    to assembler language output.  BODY is the tree corresponding to
!    the subprogram.  */
  
  void
! end_subprog_body (tree body)
  {
!   tree fndecl = current_function_decl;
  
!   /* Mark the BLOCK for this level as being for this function and pop the
!      level.  Since the vars in it are the parameters, clear them.  */
!   BLOCK_VARS (current_binding_level->block) = 0;
!   BLOCK_SUPERCONTEXT (current_binding_level->block) = fndecl;
!   DECL_INITIAL (fndecl) = current_binding_level->block;
!   gnat_poplevel ();
  
!   /* Deal with inline.  If declared inline or we should default to inline,
!      set the flag in the decl.  */
!   DECL_INLINE (fndecl)
!     = DECL_DECLARED_INLINE_P (fndecl) || flag_inline_trees == 2;
  
!   /* We handle pending sizes via the elaboration of types, so we don't
!      need to save them.  */
!   get_pending_sizes ();
  
!   /* Mark the RESULT_DECL as being in this subprogram. */
!   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
  
!   DECL_SAVED_TREE (fndecl) = body;
  
!   current_function_decl = DECL_CONTEXT (fndecl);
!   cfun = NULL;
  
!   /* If we're only annotating types, don't actually compile this function.  */
!   if (type_annotate_only)
!     return;
  
!   /* We do different things for nested and non-nested functions.
!      ??? This should be in cgraph.  */
!   if (!DECL_CONTEXT (fndecl))
      {
!       gnat_gimplify_function (fndecl);
!       cgraph_finalize_function (fndecl, false);
!     }
!   else
!     /* Register this function with cgraph just far enough to get it
!        added to our parent's nested function list.  */
!     (void) cgraph_node (fndecl);
! }
  
! /* Convert FNDECL's code to GIMPLE and handle any nested functions.  */
  
! static void
! gnat_gimplify_function (tree fndecl)
! {
!   struct cgraph_node *cgn;
  
!   dump_function (TDI_original, fndecl);
!   gimplify_function_tree (fndecl);
!   dump_function (TDI_generic, fndecl);
  
!   /* Convert all nested functions to GIMPLE now.  We do things in this order
!      so that items like VLA sizes are expanded properly in the context of the
!      correct function.  */
!   cgn = cgraph_node (fndecl);
!   for (cgn = cgn->nested; cgn; cgn = cgn->next_nested)
!     gnat_gimplify_function (cgn->decl);
  }
  
  /* Return a definition for a builtin function named NAME and whose data type
*************** end_subprog_body (void)
*** 1936,1946 ****
     ATTRS is nonzero, use that for the function attribute list.  */
  
  tree
! builtin_function (const char *name,
!                   tree type,
!                   int function_code,
!                   enum built_in_class class,
!                   const char *library_name,
                    tree attrs)
  {
    tree decl = build_decl (FUNCTION_DECL, get_identifier (name), type);
--- 1745,1752 ----
     ATTRS is nonzero, use that for the function attribute list.  */
  
  tree
! builtin_function (const char *name, tree type, int function_code,
!                   enum built_in_class class, const char *library_name,
                    tree attrs)
  {
    tree decl = build_decl (FUNCTION_DECL, get_identifier (name), type);
*************** builtin_function (const char *name,
*** 1950,1956 ****
    if (library_name)
      SET_DECL_ASSEMBLER_NAME (decl, get_identifier (library_name));
  
!   pushdecl (decl);
    DECL_BUILT_IN_CLASS (decl) = class;
    DECL_FUNCTION_CODE (decl) = function_code;
    if (attrs)
--- 1756,1762 ----
    if (library_name)
      SET_DECL_ASSEMBLER_NAME (decl, get_identifier (library_name));
  
!   gnat_pushdecl (decl, Empty);
    DECL_BUILT_IN_CLASS (decl) = class;
    DECL_FUNCTION_CODE (decl) = function_code;
    if (attrs)
*************** gnat_type_for_size (unsigned precision, 
*** 1969,1975 ****
    char type_name[20];
  
    if (precision <= 2 * MAX_BITS_PER_WORD
!       && signed_and_unsigned_types[precision][unsignedp] != 0)
      return signed_and_unsigned_types[precision][unsignedp];
  
   if (unsignedp)
--- 1775,1781 ----
    char type_name[20];
  
    if (precision <= 2 * MAX_BITS_PER_WORD
!       && signed_and_unsigned_types[precision][unsignedp])
      return signed_and_unsigned_types[precision][unsignedp];
  
   if (unsignedp)
*************** gnat_type_for_size (unsigned precision, 
*** 1980,1986 ****
    if (precision <= 2 * MAX_BITS_PER_WORD)
      signed_and_unsigned_types[precision][unsignedp] = t;
  
!   if (TYPE_NAME (t) == 0)
      {
        sprintf (type_name, "%sSIGNED_%d", unsignedp ? "UN" : "", precision);
        TYPE_NAME (t) = get_identifier (type_name);
--- 1786,1792 ----
    if (precision <= 2 * MAX_BITS_PER_WORD)
      signed_and_unsigned_types[precision][unsignedp] = t;
  
!   if (!TYPE_NAME (t))
      {
        sprintf (type_name, "%sSIGNED_%d", unsignedp ? "UN" : "", precision);
        TYPE_NAME (t) = get_identifier (type_name);
*************** float_type_for_precision (int precision,
*** 1997,2013 ****
    tree t;
    char type_name[20];
  
!   if (float_types[(int) mode] != 0)
      return float_types[(int) mode];
  
    float_types[(int) mode] = t = make_node (REAL_TYPE);
    TYPE_PRECISION (t) = precision;
    layout_type (t);
  
!   if (TYPE_MODE (t) != mode)
!     gigi_abort (414);
! 
!   if (TYPE_NAME (t) == 0)
      {
        sprintf (type_name, "FLOAT_%d", precision);
        TYPE_NAME (t) = get_identifier (type_name);
--- 1803,1817 ----
    tree t;
    char type_name[20];
  
!   if (float_types[(int) mode])
      return float_types[(int) mode];
  
    float_types[(int) mode] = t = make_node (REAL_TYPE);
    TYPE_PRECISION (t) = precision;
    layout_type (t);
  
!   gcc_assert (TYPE_MODE (t) == mode);
!   if (!TYPE_NAME (t))
      {
        sprintf (type_name, "FLOAT_%d", precision);
        TYPE_NAME (t) = get_identifier (type_name);
*************** float_type_for_precision (int precision,
*** 2022,2031 ****
  tree
  gnat_type_for_mode (enum machine_mode mode, int unsignedp)
  {
!   if (GET_MODE_CLASS (mode) == MODE_FLOAT)
      return float_type_for_precision (GET_MODE_PRECISION (mode), mode);
!   else
      return gnat_type_for_size (GET_MODE_BITSIZE (mode), unsignedp);
  }
  
  /* Return the unsigned version of a TYPE_NODE, a scalar type.  */
--- 1826,1843 ----
  tree
  gnat_type_for_mode (enum machine_mode mode, int unsignedp)
  {
!   if (mode == BLKmode)
!     return NULL_TREE;
!   else if (mode == VOIDmode)
!     return void_type_node;
!   else if (COMPLEX_MODE_P (mode))
!     return NULL_TREE;
!   else if (SCALAR_FLOAT_MODE_P (mode))
      return float_type_for_precision (GET_MODE_PRECISION (mode), mode);
!   else if (SCALAR_INT_MODE_P (mode))
      return gnat_type_for_size (GET_MODE_BITSIZE (mode), unsignedp);
+   else
+     return NULL_TREE;
  }
  
  /* Return the unsigned version of a TYPE_NODE, a scalar type.  */
*************** gnat_unsigned_type (tree type_node)
*** 2040,2046 ****
        type = copy_node (type);
        TREE_TYPE (type) = type_node;
      }
!   else if (TREE_TYPE (type_node) != 0
  	   && TREE_CODE (TREE_TYPE (type_node)) == INTEGER_TYPE
  	   && TYPE_MODULAR_P (TREE_TYPE (type_node)))
      {
--- 1852,1858 ----
        type = copy_node (type);
        TREE_TYPE (type) = type_node;
      }
!   else if (TREE_TYPE (type_node)
  	   && TREE_CODE (TREE_TYPE (type_node)) == INTEGER_TYPE
  	   && TYPE_MODULAR_P (TREE_TYPE (type_node)))
      {
*************** gnat_signed_type (tree type_node)
*** 2063,2069 ****
        type = copy_node (type);
        TREE_TYPE (type) = type_node;
      }
!   else if (TREE_TYPE (type_node) != 0
  	   && TREE_CODE (TREE_TYPE (type_node)) == INTEGER_TYPE
  	   && TYPE_MODULAR_P (TREE_TYPE (type_node)))
      {
--- 1875,1881 ----
        type = copy_node (type);
        TREE_TYPE (type) = type_node;
      }
!   else if (TREE_TYPE (type_node)
  	   && TREE_CODE (TREE_TYPE (type_node)) == INTEGER_TYPE
  	   && TYPE_MODULAR_P (TREE_TYPE (type_node)))
      {
*************** gnat_signed_type (tree type_node)
*** 2080,2086 ****
  tree
  gnat_signed_or_unsigned_type (int unsignedp, tree type)
  {
!   if (! INTEGRAL_TYPE_P (type) || TREE_UNSIGNED (type) == unsignedp)
      return type;
    else
      return gnat_type_for_size (TYPE_PRECISION (type), unsignedp);
--- 1892,1898 ----
  tree
  gnat_signed_or_unsigned_type (int unsignedp, tree type)
  {
!   if (!INTEGRAL_TYPE_P (type) || TYPE_UNSIGNED (type) == unsignedp)
      return type;
    else
      return gnat_type_for_size (TYPE_PRECISION (type), unsignedp);
*************** gnat_signed_or_unsigned_type (int unsign
*** 2088,2131 ****
  
  /* EXP is an expression for the size of an object.  If this size contains
     discriminant references, replace them with the maximum (if MAX_P) or
!    minimum (if ! MAX_P) possible value of the discriminant.  */
  
  tree
! max_size (tree exp, int max_p)
  {
    enum tree_code code = TREE_CODE (exp);
    tree type = TREE_TYPE (exp);
  
    switch (TREE_CODE_CLASS (code))
      {
!     case 'd':
!     case 'c':
        return exp;
  
!     case 'x':
        if (code == TREE_LIST)
  	return tree_cons (TREE_PURPOSE (exp),
  			  max_size (TREE_VALUE (exp), max_p),
! 			  TREE_CHAIN (exp) != 0
! 			  ? max_size (TREE_CHAIN (exp), max_p) : 0);
        break;
  
!     case 'r':
        /* If this contains a PLACEHOLDER_EXPR, it is the thing we want to
  	 modify.  Otherwise, we treat it like a variable.  */
!       if (! CONTAINS_PLACEHOLDER_P (exp))
  	return exp;
  
        type = TREE_TYPE (TREE_OPERAND (exp, 1));
        return
! 	max_size (max_p ? TYPE_MAX_VALUE (type) : TYPE_MIN_VALUE (type), 1);
  
!     case '<':
        return max_p ? size_one_node : size_zero_node;
  
!     case '1':
!     case '2':
!     case 'e':
        switch (TREE_CODE_LENGTH (code))
  	{
  	case 1:
--- 1900,1943 ----
  
  /* EXP is an expression for the size of an object.  If this size contains
     discriminant references, replace them with the maximum (if MAX_P) or
!    minimum (if !MAX_P) possible value of the discriminant.  */
  
  tree
! max_size (tree exp, bool max_p)
  {
    enum tree_code code = TREE_CODE (exp);
    tree type = TREE_TYPE (exp);
  
    switch (TREE_CODE_CLASS (code))
      {
!     case tcc_declaration:
!     case tcc_constant:
        return exp;
  
!     case tcc_exceptional:
        if (code == TREE_LIST)
  	return tree_cons (TREE_PURPOSE (exp),
  			  max_size (TREE_VALUE (exp), max_p),
! 			  TREE_CHAIN (exp)
! 			  ? max_size (TREE_CHAIN (exp), max_p) : NULL_TREE);
        break;
  
!     case tcc_reference:
        /* If this contains a PLACEHOLDER_EXPR, it is the thing we want to
  	 modify.  Otherwise, we treat it like a variable.  */
!       if (!CONTAINS_PLACEHOLDER_P (exp))
  	return exp;
  
        type = TREE_TYPE (TREE_OPERAND (exp, 1));
        return
! 	max_size (max_p ? TYPE_MAX_VALUE (type) : TYPE_MIN_VALUE (type), true);
  
!     case tcc_comparison:
        return max_p ? size_one_node : size_zero_node;
  
!     case tcc_unary:
!     case tcc_binary:
!     case tcc_expression:
        switch (TREE_CODE_LENGTH (code))
  	{
  	case 1:
*************** max_size (tree exp, int max_p)
*** 2135,2154 ****
  	    return
  	      fold (build1 (code, type,
  			    max_size (TREE_OPERAND (exp, 0),
! 				      code == NEGATE_EXPR ? ! max_p : max_p)));
  
  	case 2:
! 	  if (code == RTL_EXPR)
! 	    gigi_abort (407);
! 	  else if (code == COMPOUND_EXPR)
  	    return max_size (TREE_OPERAND (exp, 1), max_p);
- 	  else if (code == WITH_RECORD_EXPR)
- 	    return exp;
  
  	  {
  	    tree lhs = max_size (TREE_OPERAND (exp, 0), max_p);
  	    tree rhs = max_size (TREE_OPERAND (exp, 1),
! 				 code == MINUS_EXPR ? ! max_p : max_p);
  
  	    /* Special-case wanting the maximum value of a MIN_EXPR.
  	       In that case, if one side overflows, return the other.
--- 1947,1962 ----
  	    return
  	      fold (build1 (code, type,
  			    max_size (TREE_OPERAND (exp, 0),
! 				      code == NEGATE_EXPR ? !max_p : max_p)));
  
  	case 2:
! 	  if (code == COMPOUND_EXPR)
  	    return max_size (TREE_OPERAND (exp, 1), max_p);
  
  	  {
  	    tree lhs = max_size (TREE_OPERAND (exp, 0), max_p);
  	    tree rhs = max_size (TREE_OPERAND (exp, 1),
! 				 code == MINUS_EXPR ? !max_p : max_p);
  
  	    /* Special-case wanting the maximum value of a MIN_EXPR.
  	       In that case, if one side overflows, return the other.
*************** max_size (tree exp, int max_p)
*** 2163,2188 ****
  	    else if ((code == MINUS_EXPR || code == PLUS_EXPR)
  		     && ((TREE_CONSTANT (lhs) && TREE_OVERFLOW (lhs))
  			 || operand_equal_p (lhs, TYPE_MAX_VALUE (type), 0))
! 		     && ! TREE_CONSTANT (rhs))
  	      return lhs;
  	    else
! 	      return fold (build (code, type, lhs, rhs));
  	  }
  
  	case 3:
  	  if (code == SAVE_EXPR)
  	    return exp;
  	  else if (code == COND_EXPR)
! 	    return fold (build (MAX_EXPR, type,
! 				max_size (TREE_OPERAND (exp, 1), max_p),
! 				max_size (TREE_OPERAND (exp, 2), max_p)));
! 	  else if (code == CALL_EXPR && TREE_OPERAND (exp, 1) != 0)
! 	    return build (CALL_EXPR, type, TREE_OPERAND (exp, 0),
! 			  max_size (TREE_OPERAND (exp, 1), max_p));
  	}
      }
  
!   gigi_abort (408);
  }
  
  /* Build a template of type TEMPLATE_TYPE from the array bounds of ARRAY_TYPE.
--- 1971,2000 ----
  	    else if ((code == MINUS_EXPR || code == PLUS_EXPR)
  		     && ((TREE_CONSTANT (lhs) && TREE_OVERFLOW (lhs))
  			 || operand_equal_p (lhs, TYPE_MAX_VALUE (type), 0))
! 		     && !TREE_CONSTANT (rhs))
  	      return lhs;
  	    else
! 	      return fold (build2 (code, type, lhs, rhs));
  	  }
  
  	case 3:
  	  if (code == SAVE_EXPR)
  	    return exp;
  	  else if (code == COND_EXPR)
! 	    return fold (build2 (max_p ? MAX_EXPR : MIN_EXPR, type,
! 				 max_size (TREE_OPERAND (exp, 1), max_p),
! 				 max_size (TREE_OPERAND (exp, 2), max_p)));
! 	  else if (code == CALL_EXPR && TREE_OPERAND (exp, 1))
! 	    return build3 (CALL_EXPR, type, TREE_OPERAND (exp, 0),
! 			   max_size (TREE_OPERAND (exp, 1), max_p), NULL);
  	}
+ 
+       /* Other tree classes cannot happen.  */
+     default:
+       break;
      }
  
!   gcc_unreachable ();
  }
  
  /* Build a template of type TEMPLATE_TYPE from the array bounds of ARRAY_TYPE.
*************** build_template (tree template_type, tree
*** 2198,2204 ****
  
    if (TREE_CODE (array_type) == RECORD_TYPE
        && (TYPE_IS_PADDING_P (array_type)
! 	  || TYPE_LEFT_JUSTIFIED_MODULAR_P (array_type)))
      array_type = TREE_TYPE (TYPE_FIELDS (array_type));
  
    if (TREE_CODE (array_type) == ARRAY_TYPE
--- 2010,2016 ----
  
    if (TREE_CODE (array_type) == RECORD_TYPE
        && (TYPE_IS_PADDING_P (array_type)
! 	  || TYPE_JUSTIFIED_MODULAR_P (array_type)))
      array_type = TREE_TYPE (TYPE_FIELDS (array_type));
  
    if (TREE_CODE (array_type) == ARRAY_TYPE
*************** build_template (tree template_type, tree
*** 2212,2218 ****
       nested arrays stop being the underlying object.  */
  
    for (field = TYPE_FIELDS (template_type); field;
!        (bound_list != 0
  	? (bound_list = TREE_CHAIN (bound_list))
  	: (array_type = TREE_TYPE (array_type))),
         field = TREE_CHAIN (TREE_CHAIN (field)))
--- 2024,2030 ----
       nested arrays stop being the underlying object.  */
  
    for (field = TYPE_FIELDS (template_type); field;
!        (bound_list
  	? (bound_list = TREE_CHAIN (bound_list))
  	: (array_type = TREE_TYPE (array_type))),
         field = TREE_CHAIN (TREE_CHAIN (field)))
*************** build_template (tree template_type, tree
*** 2223,2248 ****
  	 for an ARRAY_TYPE.  Otherwise, if expr is a PARM_DECL with
  	 DECL_BY_COMPONENT_PTR_P, use the bounds of the field in the template.
  	 This will give us a maximum range.  */
!       if (bound_list != 0)
  	bounds = TREE_VALUE (bound_list);
        else if (TREE_CODE (array_type) == ARRAY_TYPE)
  	bounds = TYPE_INDEX_TYPE (TYPE_DOMAIN (array_type));
!       else if (expr != 0 && TREE_CODE (expr) == PARM_DECL
  	       && DECL_BY_COMPONENT_PTR_P (expr))
  	bounds = TREE_TYPE (field);
        else
! 	gigi_abort (411);
  
        min = convert (TREE_TYPE (TREE_CHAIN (field)), TYPE_MIN_VALUE (bounds));
        max = convert (TREE_TYPE (field), TYPE_MAX_VALUE (bounds));
  
        /* If either MIN or MAX involve a PLACEHOLDER_EXPR, we must
! 	 surround them with a WITH_RECORD_EXPR giving EXPR as the
! 	 OBJECT.  */
!       if (CONTAINS_PLACEHOLDER_P (min))
! 	min = build (WITH_RECORD_EXPR, TREE_TYPE (min), min, expr);
!       if (CONTAINS_PLACEHOLDER_P (max))
! 	max = build (WITH_RECORD_EXPR, TREE_TYPE (max), max, expr);
  
        template_elts = tree_cons (TREE_CHAIN (field), max,
  				 tree_cons (field, min, template_elts));
--- 2035,2057 ----
  	 for an ARRAY_TYPE.  Otherwise, if expr is a PARM_DECL with
  	 DECL_BY_COMPONENT_PTR_P, use the bounds of the field in the template.
  	 This will give us a maximum range.  */
!       if (bound_list)
  	bounds = TREE_VALUE (bound_list);
        else if (TREE_CODE (array_type) == ARRAY_TYPE)
  	bounds = TYPE_INDEX_TYPE (TYPE_DOMAIN (array_type));
!       else if (expr && TREE_CODE (expr) == PARM_DECL
  	       && DECL_BY_COMPONENT_PTR_P (expr))
  	bounds = TREE_TYPE (field);
        else
! 	gcc_unreachable ();
  
        min = convert (TREE_TYPE (TREE_CHAIN (field)), TYPE_MIN_VALUE (bounds));
        max = convert (TREE_TYPE (field), TYPE_MAX_VALUE (bounds));
  
        /* If either MIN or MAX involve a PLACEHOLDER_EXPR, we must
! 	 substitute it from OBJECT.  */
!       min = SUBSTITUTE_PLACEHOLDER_IN_EXPR (min, expr);
!       max = SUBSTITUTE_PLACEHOLDER_IN_EXPR (max, expr);
  
        template_elts = tree_cons (TREE_CHAIN (field), max,
  				 tree_cons (field, min, template_elts));
*************** build_template (tree template_type, tree
*** 2254,2260 ****
  /* Build a VMS descriptor from a Mechanism_Type, which must specify
     a descriptor type, and the GCC type of an object.  Each FIELD_DECL
     in the type contains in its DECL_INITIAL the expression to use when
!    a constructor is made for the type.  GNAT_ENTITY is a gnat node used
     to print out an error message if the mechanism cannot be applied to
     an object of that type and also for the name.  */
  
--- 2063,2069 ----
  /* Build a VMS descriptor from a Mechanism_Type, which must specify
     a descriptor type, and the GCC type of an object.  Each FIELD_DECL
     in the type contains in its DECL_INITIAL the expression to use when
!    a constructor is made for the type.  GNAT_ENTITY is an entity used
     to print out an error message if the mechanism cannot be applied to
     an object of that type and also for the name.  */
  
*************** build_vms_descriptor (tree type, Mechani
*** 2322,2340 ****
  	switch (GET_MODE_BITSIZE (TYPE_MODE (type)))
  	  {
  	  case 8:
! 	    dtype = TREE_UNSIGNED (type) ? 2 : 6;
  	    break;
  	  case 16:
! 	    dtype = TREE_UNSIGNED (type) ? 3 : 7;
  	    break;
  	  case 32:
! 	    dtype = TREE_UNSIGNED (type) ? 4 : 8;
  	    break;
  	  case 64:
! 	    dtype = TREE_UNSIGNED (type) ? 5 : 9;
  	    break;
  	  case 128:
! 	    dtype = TREE_UNSIGNED (type) ? 25 : 26;
  	    break;
  	  }
        break;
--- 2131,2149 ----
  	switch (GET_MODE_BITSIZE (TYPE_MODE (type)))
  	  {
  	  case 8:
! 	    dtype = TYPE_UNSIGNED (type) ? 2 : 6;
  	    break;
  	  case 16:
! 	    dtype = TYPE_UNSIGNED (type) ? 3 : 7;
  	    break;
  	  case 32:
! 	    dtype = TYPE_UNSIGNED (type) ? 4 : 8;
  	    break;
  	  case 64:
! 	    dtype = TYPE_UNSIGNED (type) ? 5 : 9;
  	    break;
  	  case 128:
! 	    dtype = TYPE_UNSIGNED (type) ? 25 : 26;
  	    break;
  	  }
        break;
*************** build_vms_descriptor (tree type, Mechani
*** 2405,2417 ****
  
    field_list
      = chainon (field_list,
! 	       make_descriptor_field ("POINTER",
! 				      build_pointer_type (type),
! 				      record_type,
! 				      build1 (ADDR_EXPR,
! 					      build_pointer_type (type),
! 					      build (PLACEHOLDER_EXPR,
! 						     type))));
  
    switch (mech)
      {
--- 2214,2225 ----
  
    field_list
      = chainon (field_list,
! 	       make_descriptor_field
! 	       ("POINTER",
! 		build_pointer_type_for_mode (type, SImode, false), record_type,
! 		build1 (ADDR_EXPR,
! 			build_pointer_type_for_mode (type, SImode, false),
! 			build0 (PLACEHOLDER_EXPR, type))));
  
    switch (mech)
      {
*************** build_vms_descriptor (tree type, Mechani
*** 2472,2488 ****
  						   size_in_bytes (type)));
  
        /* Now build a pointer to the 0,0,0... element.  */
!       tem = build (PLACEHOLDER_EXPR, type);
        for (i = 0, inner_type = type; i < ndim;
  	   i++, inner_type = TREE_TYPE (inner_type))
! 	tem = build (ARRAY_REF, TREE_TYPE (inner_type), tem,
! 		     convert (TYPE_DOMAIN (inner_type), size_zero_node));
  
        field_list
  	= chainon (field_list,
  		   make_descriptor_field
! 		   ("A0", build_pointer_type (inner_type), record_type,
! 		    build1 (ADDR_EXPR, build_pointer_type (inner_type), tem)));
  
        /* Next come the addressing coefficients.  */
        tem = size_int (1);
--- 2280,2302 ----
  						   size_in_bytes (type)));
  
        /* Now build a pointer to the 0,0,0... element.  */
!       tem = build0 (PLACEHOLDER_EXPR, type);
        for (i = 0, inner_type = type; i < ndim;
  	   i++, inner_type = TREE_TYPE (inner_type))
! 	tem = build4 (ARRAY_REF, TREE_TYPE (inner_type), tem,
! 		      convert (TYPE_DOMAIN (inner_type), size_zero_node),
! 		      NULL_TREE, NULL_TREE);
  
        field_list
  	= chainon (field_list,
  		   make_descriptor_field
! 		   ("A0",
! 		    build_pointer_type_for_mode (inner_type, SImode, false),
! 		    record_type,
! 		    build1 (ADDR_EXPR,
! 			    build_pointer_type_for_mode (inner_type, SImode,
! 							 false),
! 			    tem)));
  
        /* Next come the addressing coefficients.  */
        tem = size_int (1);
*************** build_vms_descriptor (tree type, Mechani
*** 2534,2542 ****
        post_error ("unsupported descriptor type for &", gnat_entity);
      }
  
!   finish_record_type (record_type, field_list, 0, 1);
!   pushdecl (build_decl (TYPE_DECL, create_concat_name (gnat_entity, "DESC"),
! 			record_type));
  
    return record_type;
  }
--- 2348,2356 ----
        post_error ("unsupported descriptor type for &", gnat_entity);
      }
  
!   finish_record_type (record_type, field_list, false, true);
!   create_type_decl (create_concat_name (gnat_entity, "DESC"), record_type,
! 		    NULL, true, false, gnat_entity);
  
    return record_type;
  }
*************** build_unc_object_type (tree template_typ
*** 2575,2581 ****
    finish_record_type (type,
  		      chainon (chainon (NULL_TREE, template_field),
  			       array_field),
! 		      0, 0);
  
    return type;
  }
--- 2389,2395 ----
    finish_record_type (type,
  		      chainon (chainon (NULL_TREE, template_field),
  			       array_field),
! 		      false, false);
  
    return type;
  }
*************** update_pointer_to (tree old_type, tree n
*** 2589,2604 ****
  {
    tree ptr = TYPE_POINTER_TO (old_type);
    tree ref = TYPE_REFERENCE_TO (old_type);
    tree type;
  
    /* If this is the main variant, process all the other variants first.  */
    if (TYPE_MAIN_VARIANT (old_type) == old_type)
!     for (type = TYPE_NEXT_VARIANT (old_type); type != 0;
  	 type = TYPE_NEXT_VARIANT (type))
        update_pointer_to (type, new_type);
  
    /* If no pointer or reference, we are done.  */
!   if (ptr == 0 && ref == 0)
      return;
  
    /* Merge the old type qualifiers in the new type.
--- 2403,2419 ----
  {
    tree ptr = TYPE_POINTER_TO (old_type);
    tree ref = TYPE_REFERENCE_TO (old_type);
+   tree ptr1, ref1;
    tree type;
  
    /* If this is the main variant, process all the other variants first.  */
    if (TYPE_MAIN_VARIANT (old_type) == old_type)
!     for (type = TYPE_NEXT_VARIANT (old_type); type;
  	 type = TYPE_NEXT_VARIANT (type))
        update_pointer_to (type, new_type);
  
    /* If no pointer or reference, we are done.  */
!   if (!ptr && !ref)
      return;
  
    /* Merge the old type qualifiers in the new type.
*************** update_pointer_to (tree old_type, tree n
*** 2632,2663 ****
    /* Otherwise, first handle the simple case.  */
    if (TREE_CODE (new_type) != UNCONSTRAINED_ARRAY_TYPE)
      {
-       if (ptr != 0)
- 	TREE_TYPE (ptr) = new_type;
        TYPE_POINTER_TO (new_type) = ptr;
- 
-       if (ref != 0)
- 	TREE_TYPE (ref) = new_type;
        TYPE_REFERENCE_TO (new_type) = ref;
  
!       if (ptr != 0 && TYPE_NAME (ptr) != 0
! 	  && TREE_CODE (TYPE_NAME (ptr)) == TYPE_DECL
! 	  && TREE_CODE (new_type) != ENUMERAL_TYPE)
! 	rest_of_decl_compilation (TYPE_NAME (ptr), NULL,
! 				  global_bindings_p (), 0);
!       if (ref != 0 && TYPE_NAME (ref) != 0
! 	  && TREE_CODE (TYPE_NAME (ref)) == TYPE_DECL
! 	  && TREE_CODE (new_type) != ENUMERAL_TYPE)
! 	rest_of_decl_compilation (TYPE_NAME (ref), NULL,
! 				  global_bindings_p (), 0);
      }
  
    /* Now deal with the unconstrained array case. In this case the "pointer"
       is actually a RECORD_TYPE where the types of both fields are
       pointers to void.  In that case, copy the field list from the
       old type to the new one and update the fields' context. */
!   else if (TREE_CODE (ptr) != RECORD_TYPE || ! TYPE_IS_FAT_POINTER_P (ptr))
!     gigi_abort (412);
  
    else
      {
--- 2447,2488 ----
    /* Otherwise, first handle the simple case.  */
    if (TREE_CODE (new_type) != UNCONSTRAINED_ARRAY_TYPE)
      {
        TYPE_POINTER_TO (new_type) = ptr;
        TYPE_REFERENCE_TO (new_type) = ref;
  
!       for (; ptr; ptr = TYPE_NEXT_PTR_TO (ptr))
! 	for (ptr1 = TYPE_MAIN_VARIANT (ptr); ptr1;
! 	     ptr1 = TYPE_NEXT_VARIANT (ptr1))
! 	  {
! 	    TREE_TYPE (ptr1) = new_type;
! 
! 	    if (TYPE_NAME (ptr1)
! 		&& TREE_CODE (TYPE_NAME (ptr1)) == TYPE_DECL
! 		&& TREE_CODE (new_type) != ENUMERAL_TYPE)
! 	      rest_of_decl_compilation (TYPE_NAME (ptr1),
! 					global_bindings_p (), 0);
! 	  }
! 
!       for (; ref; ref = TYPE_NEXT_PTR_TO (ref))
! 	for (ref1 = TYPE_MAIN_VARIANT (ref); ref1;
! 	     ref1 = TYPE_NEXT_VARIANT (ref1))
! 	  {
! 	    TREE_TYPE (ref1) = new_type;
! 
! 	    if (TYPE_NAME (ref1)
! 		&& TREE_CODE (TYPE_NAME (ref1)) == TYPE_DECL
! 		&& TREE_CODE (new_type) != ENUMERAL_TYPE)
! 	      rest_of_decl_compilation (TYPE_NAME (ref1),
! 					global_bindings_p (), 0);
! 	  }
      }
  
    /* Now deal with the unconstrained array case. In this case the "pointer"
       is actually a RECORD_TYPE where the types of both fields are
       pointers to void.  In that case, copy the field list from the
       old type to the new one and update the fields' context. */
!   else if (TREE_CODE (ptr) != RECORD_TYPE || !TYPE_IS_FAT_POINTER_P (ptr))
!     gcc_unreachable ();
  
    else
      {
*************** update_pointer_to (tree old_type, tree n
*** 2666,2671 ****
--- 2491,2502 ----
        tree new_ref;
        tree var;
  
+       SET_DECL_ORIGINAL_FIELD (TYPE_FIELDS (ptr),
+ 			       TYPE_FIELDS (TYPE_POINTER_TO (new_type)));
+       SET_DECL_ORIGINAL_FIELD (TREE_CHAIN (TYPE_FIELDS (ptr)),
+ 			       TREE_CHAIN (TYPE_FIELDS
+ 					   (TYPE_POINTER_TO (new_type))));
+ 
        TYPE_FIELDS (ptr) = TYPE_FIELDS (TYPE_POINTER_TO (new_type));
        DECL_CONTEXT (TYPE_FIELDS (ptr)) = ptr;
        DECL_CONTEXT (TREE_CHAIN (TYPE_FIELDS (ptr))) = ptr;
*************** update_pointer_to (tree old_type, tree n
*** 2677,2685 ****
  	 is now a very "heavy" routine to do this, so it should be replaced
  	 at some point.  */
        ptr_temp_type = TREE_TYPE (TREE_CHAIN (TYPE_FIELDS (ptr)));
!       new_ref = build (COMPONENT_REF, ptr_temp_type,
! 		       build (PLACEHOLDER_EXPR, ptr),
! 		       TREE_CHAIN (TYPE_FIELDS (ptr)));
  
        update_pointer_to
  	(TREE_TYPE (TREE_TYPE (TYPE_FIELDS (ptr))),
--- 2508,2516 ----
  	 is now a very "heavy" routine to do this, so it should be replaced
  	 at some point.  */
        ptr_temp_type = TREE_TYPE (TREE_CHAIN (TYPE_FIELDS (ptr)));
!       new_ref = build3 (COMPONENT_REF, ptr_temp_type,
! 			build0 (PLACEHOLDER_EXPR, ptr),
! 			TREE_CHAIN (TYPE_FIELDS (ptr)), NULL_TREE);
  
        update_pointer_to
  	(TREE_TYPE (TREE_TYPE (TYPE_FIELDS (ptr))),
*************** convert_to_fat_pointer (tree type, tree 
*** 2753,2762 ****
        else
  	expr = build1 (INDIRECT_REF, TREE_TYPE (etype), expr);
  
!       template = build_component_ref (expr, NULL_TREE, fields, 0);
        expr = build_unary_op (ADDR_EXPR, NULL_TREE,
  			     build_component_ref (expr, NULL_TREE,
! 						  TREE_CHAIN (fields), 0));
      }
    else
      /* Otherwise, build the constructor for the template.  */
--- 2584,2593 ----
        else
  	expr = build1 (INDIRECT_REF, TREE_TYPE (etype), expr);
  
!       template = build_component_ref (expr, NULL_TREE, fields, false);
        expr = build_unary_op (ADDR_EXPR, NULL_TREE,
  			     build_component_ref (expr, NULL_TREE,
! 						  TREE_CHAIN (fields), false));
      }
    else
      /* Otherwise, build the constructor for the template.  */
*************** convert_to_fat_pointer (tree type, tree 
*** 2791,2805 ****
  static tree
  convert_to_thin_pointer (tree type, tree expr)
  {
!   if (! TYPE_FAT_POINTER_P (TREE_TYPE (expr)))
      expr
        = convert_to_fat_pointer
  	(TREE_TYPE (TYPE_UNCONSTRAINED_ARRAY (TREE_TYPE (type))), expr);
  
    /* We get the pointer to the data and use a NOP_EXPR to make it the
       proper GCC type.  */
!   expr
!     = build_component_ref (expr, NULL_TREE, TYPE_FIELDS (TREE_TYPE (expr)), 0);
    expr = build1 (NOP_EXPR, type, expr);
  
    return expr;
--- 2622,2636 ----
  static tree
  convert_to_thin_pointer (tree type, tree expr)
  {
!   if (!TYPE_FAT_POINTER_P (TREE_TYPE (expr)))
      expr
        = convert_to_fat_pointer
  	(TREE_TYPE (TYPE_UNCONSTRAINED_ARRAY (TREE_TYPE (type))), expr);
  
    /* We get the pointer to the data and use a NOP_EXPR to make it the
       proper GCC type.  */
!   expr = build_component_ref (expr, NULL_TREE, TYPE_FIELDS (TREE_TYPE (expr)),
! 			      false);
    expr = build1 (NOP_EXPR, type, expr);
  
    return expr;
*************** convert (tree type, tree expr)
*** 2822,2838 ****
    /* If EXPR is already the right type, we are done.  */
    if (type == etype)
      return expr;
-   /* If we're converting between two aggregate types that have the same main
-      variant, just make a NOP_EXPR.  */
-   else if (AGGREGATE_TYPE_P (type)
- 	   && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (etype))
-     return build1 (NOP_EXPR, type, expr);
-   /* If EXPR is a WITH_RECORD_EXPR, do the conversion inside and then make a
-      new one.  */
-   else if (TREE_CODE (expr) == WITH_RECORD_EXPR)
-     return build (WITH_RECORD_EXPR, type,
- 		  convert (type, TREE_OPERAND (expr, 0)),
- 		  TREE_OPERAND (expr, 1));
  
    /* If the input type has padding, remove it by doing a component reference
       to the field.  If the output type has padding, make a constructor
--- 2653,2658 ----
*************** convert (tree type, tree expr)
*** 2840,2859 ****
       of variable size, do this as an unchecked conversion.  */
    else if (ecode == RECORD_TYPE && code == RECORD_TYPE
        && TYPE_IS_PADDING_P (type) && TYPE_IS_PADDING_P (etype)
!       && (! TREE_CONSTANT (TYPE_SIZE (type))
! 	  || ! TREE_CONSTANT (TYPE_SIZE (etype))))
      ;
    else if (ecode == RECORD_TYPE && TYPE_IS_PADDING_P (etype))
      {
        /* If we have just converted to this padded type, just get
  	 the inner expression.  */
        if (TREE_CODE (expr) == CONSTRUCTOR
! 	  && CONSTRUCTOR_ELTS (expr) != 0
  	  && TREE_PURPOSE (CONSTRUCTOR_ELTS (expr)) == TYPE_FIELDS (etype))
  	return TREE_VALUE (CONSTRUCTOR_ELTS (expr));
        else
! 	return convert (type, build_component_ref (expr, NULL_TREE,
! 						   TYPE_FIELDS (etype), 0));
      }
    else if (code == RECORD_TYPE && TYPE_IS_PADDING_P (type))
      {
--- 2660,2680 ----
       of variable size, do this as an unchecked conversion.  */
    else if (ecode == RECORD_TYPE && code == RECORD_TYPE
        && TYPE_IS_PADDING_P (type) && TYPE_IS_PADDING_P (etype)
!       && (!TREE_CONSTANT (TYPE_SIZE (type))
! 	  || !TREE_CONSTANT (TYPE_SIZE (etype))))
      ;
    else if (ecode == RECORD_TYPE && TYPE_IS_PADDING_P (etype))
      {
        /* If we have just converted to this padded type, just get
  	 the inner expression.  */
        if (TREE_CODE (expr) == CONSTRUCTOR
! 	  && CONSTRUCTOR_ELTS (expr)
  	  && TREE_PURPOSE (CONSTRUCTOR_ELTS (expr)) == TYPE_FIELDS (etype))
  	return TREE_VALUE (CONSTRUCTOR_ELTS (expr));
        else
! 	return convert (type,
! 			build_component_ref (expr, NULL_TREE,
! 					     TYPE_FIELDS (etype), false));
      }
    else if (code == RECORD_TYPE && TYPE_IS_PADDING_P (type))
      {
*************** convert (tree type, tree expr)
*** 2861,2867 ****
  	 of variable size, remove the conversion to avoid the need for
  	 variable-size temporaries.  */
        if (TREE_CODE (expr) == VIEW_CONVERT_EXPR
! 	  && ! TREE_CONSTANT (TYPE_SIZE (type)))
  	expr = TREE_OPERAND (expr, 0);
  
        /* If we are just removing the padding from expr, convert the original
--- 2682,2688 ----
  	 of variable size, remove the conversion to avoid the need for
  	 variable-size temporaries.  */
        if (TREE_CODE (expr) == VIEW_CONVERT_EXPR
! 	  && !TREE_CONSTANT (TYPE_SIZE (type)))
  	expr = TREE_OPERAND (expr, 0);
  
        /* If we are just removing the padding from expr, convert the original
*************** convert (tree type, tree expr)
*** 2870,2876 ****
        if (TREE_CODE (expr) == COMPONENT_REF
  	  && TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == RECORD_TYPE
  	  && TYPE_IS_PADDING_P (TREE_TYPE (TREE_OPERAND (expr, 0)))
! 	  && ! TREE_CONSTANT (TYPE_SIZE (type)))
  	return convert (type, TREE_OPERAND (expr, 0));
  
        /* If the result type is a padded type with a self-referentially-sized
--- 2691,2697 ----
        if (TREE_CODE (expr) == COMPONENT_REF
  	  && TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == RECORD_TYPE
  	  && TYPE_IS_PADDING_P (TREE_TYPE (TREE_OPERAND (expr, 0)))
! 	  && !TREE_CONSTANT (TYPE_SIZE (type)))
  	return convert (type, TREE_OPERAND (expr, 0));
  
        /* If the result type is a padded type with a self-referentially-sized
*************** convert (tree type, tree expr)
*** 2878,2884 ****
  	 unchecked converstion.  */
        else if (TREE_CODE (etype) == RECORD_TYPE
  	       && CONTAINS_PLACEHOLDER_P (DECL_SIZE (TYPE_FIELDS (type))))
! 	return unchecked_convert (type, expr, 0);
  
        else
  	return
--- 2699,2705 ----
  	 unchecked converstion.  */
        else if (TREE_CODE (etype) == RECORD_TYPE
  	       && CONTAINS_PLACEHOLDER_P (DECL_SIZE (TYPE_FIELDS (type))))
! 	return unchecked_convert (type, expr, false);
  
        else
  	return
*************** convert (tree type, tree expr)
*** 2892,2909 ****
  
    /* If the input is a biased type, adjust first.  */
    if (ecode == INTEGER_TYPE && TYPE_BIASED_REPRESENTATION_P (etype))
!     return convert (type, fold (build (PLUS_EXPR, TREE_TYPE (etype),
! 				       fold (build1 (GNAT_NOP_EXPR,
! 						     TREE_TYPE (etype), expr)),
! 				       TYPE_MIN_VALUE (etype))));
  
!   /* If the input is a left-justified modular type, we need to extract
       the actual object before converting it to any other type with the
       exception of an unconstrained array.  */
!   if (ecode == RECORD_TYPE && TYPE_LEFT_JUSTIFIED_MODULAR_P (etype)
        && code != UNCONSTRAINED_ARRAY_TYPE)
      return convert (type, build_component_ref (expr, NULL_TREE,
! 					       TYPE_FIELDS (etype), 0));
  
    /* If converting to a type that contains a template, convert to the data
       type and then build the template. */
--- 2713,2731 ----
  
    /* If the input is a biased type, adjust first.  */
    if (ecode == INTEGER_TYPE && TYPE_BIASED_REPRESENTATION_P (etype))
!     return convert (type, fold (build2 (PLUS_EXPR, TREE_TYPE (etype),
! 					fold (build1 (NOP_EXPR,
! 						      TREE_TYPE (etype),
! 						      expr)),
! 					TYPE_MIN_VALUE (etype))));
  
!   /* If the input is a justified modular type, we need to extract
       the actual object before converting it to any other type with the
       exception of an unconstrained array.  */
!   if (ecode == RECORD_TYPE && TYPE_JUSTIFIED_MODULAR_P (etype)
        && code != UNCONSTRAINED_ARRAY_TYPE)
      return convert (type, build_component_ref (expr, NULL_TREE,
! 					       TYPE_FIELDS (etype), false));
  
    /* If converting to a type that contains a template, convert to the data
       type and then build the template. */
*************** convert (tree type, tree expr)
*** 2933,2939 ****
      case ERROR_MARK:
        return expr;
  
-     case TRANSFORM_EXPR:
      case NULL_EXPR:
        /* Just set its type here.  For TRANSFORM_EXPR, we will do the actual
  	 conversion in gnat_expand_expr.  NULL_EXPR does not represent
--- 2755,2760 ----
*************** convert (tree type, tree expr)
*** 2943,2955 ****
        return expr;
  
      case STRING_CST:
-     case CONSTRUCTOR:
        /* If we are converting a STRING_CST to another constrained array type,
! 	 just make a new one in the proper type.  Likewise for a
! 	 CONSTRUCTOR.  */
        if (code == ecode && AGGREGATE_TYPE_P (etype)
! 	  && ! (TREE_CODE (TYPE_SIZE (etype)) == INTEGER_CST
! 		&& TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST))
  	{
  	  expr = copy_node (expr);
  	  TREE_TYPE (expr) = type;
--- 2764,2776 ----
        return expr;
  
      case STRING_CST:
        /* If we are converting a STRING_CST to another constrained array type,
! 	 just make a new one in the proper type.  */
        if (code == ecode && AGGREGATE_TYPE_P (etype)
! 	  && !(TREE_CODE (TYPE_SIZE (etype)) == INTEGER_CST
! 	       && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
! 	  && (TREE_CODE (expr) == STRING_CST
! 	      || get_alias_set (etype) == get_alias_set (type)))
  	{
  	  expr = copy_node (expr);
  	  TREE_TYPE (expr) = type;
*************** convert (tree type, tree expr)
*** 2957,2990 ****
  	}
        break;
  
-     case COMPONENT_REF:
-       /* If we are converting between two aggregate types of the same
- 	 kind, size, mode, and alignment, just make a new COMPONENT_REF.
- 	 This avoid unneeded conversions which makes reference computations
- 	 more complex.  */
-       if (code == ecode && TYPE_MODE (type) == TYPE_MODE (etype)
- 	  && AGGREGATE_TYPE_P (type) && AGGREGATE_TYPE_P (etype)
- 	  && TYPE_ALIGN (type) == TYPE_ALIGN (etype)
- 	  && operand_equal_p (TYPE_SIZE (type), TYPE_SIZE (etype), 0))
- 	return build (COMPONENT_REF, type, TREE_OPERAND (expr, 0),
- 		      TREE_OPERAND (expr, 1));
- 
-       break;
- 
      case UNCONSTRAINED_ARRAY_REF:
        /* Convert this to the type of the inner array by getting the address of
  	 the array from the template.  */
        expr = build_unary_op (INDIRECT_REF, NULL_TREE,
  			     build_component_ref (TREE_OPERAND (expr, 0),
  						  get_identifier ("P_ARRAY"),
! 						  NULL_TREE, 0));
        etype = TREE_TYPE (expr);
        ecode = TREE_CODE (etype);
        break;
  
      case VIEW_CONVERT_EXPR:
        if (AGGREGATE_TYPE_P (type) && AGGREGATE_TYPE_P (etype)
! 	  && ! TYPE_FAT_POINTER_P (type) && ! TYPE_FAT_POINTER_P (etype))
  	return convert (type, TREE_OPERAND (expr, 0));
        break;
  
--- 2778,2797 ----
  	}
        break;
  
      case UNCONSTRAINED_ARRAY_REF:
        /* Convert this to the type of the inner array by getting the address of
  	 the array from the template.  */
        expr = build_unary_op (INDIRECT_REF, NULL_TREE,
  			     build_component_ref (TREE_OPERAND (expr, 0),
  						  get_identifier ("P_ARRAY"),
! 						  NULL_TREE, false));
        etype = TREE_TYPE (expr);
        ecode = TREE_CODE (etype);
        break;
  
      case VIEW_CONVERT_EXPR:
        if (AGGREGATE_TYPE_P (type) && AGGREGATE_TYPE_P (etype)
! 	  && !TYPE_FAT_POINTER_P (type) && !TYPE_FAT_POINTER_P (etype))
  	return convert (type, TREE_OPERAND (expr, 0));
        break;
  
*************** convert (tree type, tree expr)
*** 3001,3007 ****
  	      || TREE_CODE (type) == UNION_TYPE)
  	  && (TREE_CODE (etype) == RECORD_TYPE
  	      || TREE_CODE (etype) == UNION_TYPE)
! 	  && ! TYPE_FAT_POINTER_P (type) && ! TYPE_FAT_POINTER_P (etype))
  	return build_unary_op (INDIRECT_REF, NULL_TREE,
  			       convert (build_pointer_type (type),
  					TREE_OPERAND (expr, 0)));
--- 2808,2814 ----
  	      || TREE_CODE (type) == UNION_TYPE)
  	  && (TREE_CODE (etype) == RECORD_TYPE
  	      || TREE_CODE (etype) == UNION_TYPE)
! 	  && !TYPE_FAT_POINTER_P (type) && !TYPE_FAT_POINTER_P (etype))
  	return build_unary_op (INDIRECT_REF, NULL_TREE,
  			       convert (build_pointer_type (type),
  					TREE_OPERAND (expr, 0)));
*************** convert (tree type, tree expr)
*** 3012,3023 ****
      }
  
    /* Check for converting to a pointer to an unconstrained array.  */
!   if (TYPE_FAT_POINTER_P (type) && ! TYPE_FAT_POINTER_P (etype))
      return convert_to_fat_pointer (type, expr);
  
!   if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (etype)
!       || (code == INTEGER_CST && ecode == INTEGER_CST
! 	  && (type == TREE_TYPE (etype) || etype == TREE_TYPE (type))))
      return fold (build1 (NOP_EXPR, type, expr));
  
    switch (code)
--- 2819,2837 ----
      }
  
    /* Check for converting to a pointer to an unconstrained array.  */
!   if (TYPE_FAT_POINTER_P (type) && !TYPE_FAT_POINTER_P (etype))
      return convert_to_fat_pointer (type, expr);
  
!   /* If we're converting between two aggregate types that have the same main
!      variant, just make a VIEW_CONVER_EXPR.  */
!   else if (AGGREGATE_TYPE_P (type)
! 	   && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (etype))
!     return build1 (VIEW_CONVERT_EXPR, type, expr);
! 
!   /* In all other cases of related types, make a NOP_EXPR.  */
!   else if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (etype)
! 	   || (code == INTEGER_CST && ecode == INTEGER_CST
! 	       && (type == TREE_TYPE (etype) || etype == TREE_TYPE (type))))
      return fold (build1 (NOP_EXPR, type, expr));
  
    switch (code)
*************** convert (tree type, tree expr)
*** 3025,3040 ****
      case VOID_TYPE:
        return build1 (CONVERT_EXPR, type, expr);
  
      case INTEGER_TYPE:
        if (TYPE_HAS_ACTUAL_BOUNDS_P (type)
  	  && (ecode == ARRAY_TYPE || ecode == UNCONSTRAINED_ARRAY_TYPE
  	      || (ecode == RECORD_TYPE && TYPE_CONTAINS_TEMPLATE_P (etype))))
! 	return unchecked_convert (type, expr, 0);
        else if (TYPE_BIASED_REPRESENTATION_P (type))
  	return fold (build1 (CONVERT_EXPR, type,
! 			     fold (build (MINUS_EXPR, TREE_TYPE (type),
! 					  convert (TREE_TYPE (type), expr),
! 					  TYPE_MIN_VALUE (type)))));
  
        /* ... fall through ... */
  
--- 2839,2857 ----
      case VOID_TYPE:
        return build1 (CONVERT_EXPR, type, expr);
  
+     case BOOLEAN_TYPE:
+       return fold (build1 (NOP_EXPR, type, gnat_truthvalue_conversion (expr)));
+ 
      case INTEGER_TYPE:
        if (TYPE_HAS_ACTUAL_BOUNDS_P (type)
  	  && (ecode == ARRAY_TYPE || ecode == UNCONSTRAINED_ARRAY_TYPE
  	      || (ecode == RECORD_TYPE && TYPE_CONTAINS_TEMPLATE_P (etype))))
! 	return unchecked_convert (type, expr, false);
        else if (TYPE_BIASED_REPRESENTATION_P (type))
  	return fold (build1 (CONVERT_EXPR, type,
! 			     fold (build2 (MINUS_EXPR, TREE_TYPE (type),
! 					   convert (TREE_TYPE (type), expr),
! 					   TYPE_MIN_VALUE (type)))));
  
        /* ... fall through ... */
  
*************** convert (tree type, tree expr)
*** 3065,3078 ****
  
        /* If converting to a thin pointer, handle specially.  */
        if (TYPE_THIN_POINTER_P (type)
! 	  && TYPE_UNCONSTRAINED_ARRAY (TREE_TYPE (type)) != 0)
  	return convert_to_thin_pointer (type, expr);
  
        /* If converting fat pointer to normal pointer, get the pointer to the
  	 array and then convert it.  */
        else if (TYPE_FAT_POINTER_P (etype))
  	expr = build_component_ref (expr, get_identifier ("P_ARRAY"),
! 				    NULL_TREE, 0);
  
        return fold (convert_to_pointer (type, expr));
  
--- 2882,2895 ----
  
        /* If converting to a thin pointer, handle specially.  */
        if (TYPE_THIN_POINTER_P (type)
! 	  && TYPE_UNCONSTRAINED_ARRAY (TREE_TYPE (type)))
  	return convert_to_thin_pointer (type, expr);
  
        /* If converting fat pointer to normal pointer, get the pointer to the
  	 array and then convert it.  */
        else if (TYPE_FAT_POINTER_P (etype))
  	expr = build_component_ref (expr, get_identifier ("P_ARRAY"),
! 				    NULL_TREE, false);
  
        return fold (convert_to_pointer (type, expr));
  
*************** convert (tree type, tree expr)
*** 3080,3086 ****
        return fold (convert_to_real (type, expr));
  
      case RECORD_TYPE:
!       if (TYPE_LEFT_JUSTIFIED_MODULAR_P (type) && ! AGGREGATE_TYPE_P (etype))
  	return
  	  gnat_build_constructor
  	    (type, tree_cons (TYPE_FIELDS (type),
--- 2897,2903 ----
        return fold (convert_to_real (type, expr));
  
      case RECORD_TYPE:
!       if (TYPE_JUSTIFIED_MODULAR_P (type) && !AGGREGATE_TYPE_P (etype))
  	return
  	  gnat_build_constructor
  	    (type, tree_cons (TYPE_FIELDS (type),
*************** convert (tree type, tree expr)
*** 3093,3127 ****
        /* In these cases, assume the front-end has validated the conversion.
  	 If the conversion is valid, it will be a bit-wise conversion, so
  	 it can be viewed as an unchecked conversion.  */
!       return unchecked_convert (type, expr, 0);
  
      case UNION_TYPE:
!       /* Just validate that the type is indeed that of a field
! 	 of the type.  Then make the simple conversion.  */
!       for (tem = TYPE_FIELDS (type); tem; tem = TREE_CHAIN (tem))
  	{
! 	  if (TREE_TYPE (tem) == etype)
! 	    return build1 (CONVERT_EXPR, type, expr);
! 	  else if (TREE_CODE (TREE_TYPE (tem)) == RECORD_TYPE
! 		   && (TYPE_LEFT_JUSTIFIED_MODULAR_P (TREE_TYPE (tem))
! 		       || TYPE_IS_PADDING_P (TREE_TYPE (tem)))
! 		   && TREE_TYPE (TYPE_FIELDS (TREE_TYPE (tem))) == etype)
! 	    return build1 (CONVERT_EXPR, type,
! 			   convert (TREE_TYPE (tem), expr));
! 	}
  
!       gigi_abort (413);
  
      case UNCONSTRAINED_ARRAY_TYPE:
        /* If EXPR is a constrained array, take its address, convert it to a
  	 fat pointer, and then dereference it.  Likewise if EXPR is a
  	 record containing both a template and a constrained array.
! 	 Note that a record representing a left justified modular type
  	 always represents a packed constrained array.  */
        if (ecode == ARRAY_TYPE
  	  || (ecode == INTEGER_TYPE && TYPE_HAS_ACTUAL_BOUNDS_P (etype))
  	  || (ecode == RECORD_TYPE && TYPE_CONTAINS_TEMPLATE_P (etype))
! 	  || (ecode == RECORD_TYPE && TYPE_LEFT_JUSTIFIED_MODULAR_P (etype)))
  	return
  	  build_unary_op
  	    (INDIRECT_REF, NULL_TREE,
--- 2910,2955 ----
        /* In these cases, assume the front-end has validated the conversion.
  	 If the conversion is valid, it will be a bit-wise conversion, so
  	 it can be viewed as an unchecked conversion.  */
!       return unchecked_convert (type, expr, false);
  
      case UNION_TYPE:
!       /* For unchecked unions, just validate that the type is indeed that of
! 	 a field of the type.  Then make the simple conversion.  */
!       if (TYPE_UNCHECKED_UNION_P (type))
  	{
! 	  for (tem = TYPE_FIELDS (type); tem; tem = TREE_CHAIN (tem))
! 	    {
! 	      if (TREE_TYPE (tem) == etype)
! 		return build1 (CONVERT_EXPR, type, expr);
  
! 	      /* Accept slight type variations.  */
! 	      if (TREE_TYPE (tem) == TYPE_MAIN_VARIANT (etype)
! 		  || (TREE_CODE (TREE_TYPE (tem)) == RECORD_TYPE
! 		      && (TYPE_JUSTIFIED_MODULAR_P (TREE_TYPE (tem))
! 			  || TYPE_IS_PADDING_P (TREE_TYPE (tem)))
! 		      && TREE_TYPE (TYPE_FIELDS (TREE_TYPE (tem))) == etype))
! 		return build1 (CONVERT_EXPR, type,
! 			       convert (TREE_TYPE (tem), expr));
! 	    }
! 
! 	  gcc_unreachable ();
! 	}
!       else
! 	/* Otherwise, this is a conversion between a tagged type and some
! 	   subtype, which we have to mark as a UNION_TYPE because of
! 	   overlapping fields.  */
! 	return unchecked_convert (type, expr, false);
  
      case UNCONSTRAINED_ARRAY_TYPE:
        /* If EXPR is a constrained array, take its address, convert it to a
  	 fat pointer, and then dereference it.  Likewise if EXPR is a
  	 record containing both a template and a constrained array.
! 	 Note that a record representing a justified modular type
  	 always represents a packed constrained array.  */
        if (ecode == ARRAY_TYPE
  	  || (ecode == INTEGER_TYPE && TYPE_HAS_ACTUAL_BOUNDS_P (etype))
  	  || (ecode == RECORD_TYPE && TYPE_CONTAINS_TEMPLATE_P (etype))
! 	  || (ecode == RECORD_TYPE && TYPE_JUSTIFIED_MODULAR_P (etype)))
  	return
  	  build_unary_op
  	    (INDIRECT_REF, NULL_TREE,
*************** convert (tree type, tree expr)
*** 3138,3168 ****
  				   build_unary_op (ADDR_EXPR,
  						   NULL_TREE, expr)));
        else
! 	gigi_abort (409);
  
      case COMPLEX_TYPE:
        return fold (convert_to_complex (type, expr));
  
      default:
!       gigi_abort (410);
      }
  }
  
  /* Remove all conversions that are done in EXP.  This includes converting
!    from a padded type or to a left-justified modular type.  If TRUE_ADDRESS
!    is nonzero, always return the address of the containing object even if
     the address is not bit-aligned.  */
  
  tree
! remove_conversions (tree exp, int true_address)
  {
    switch (TREE_CODE (exp))
      {
      case CONSTRUCTOR:
        if (true_address
  	  && TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE
! 	  && TYPE_LEFT_JUSTIFIED_MODULAR_P (TREE_TYPE (exp)))
! 	return remove_conversions (TREE_VALUE (CONSTRUCTOR_ELTS (exp)), 1);
        break;
  
      case COMPONENT_REF:
--- 2966,2996 ----
  				   build_unary_op (ADDR_EXPR,
  						   NULL_TREE, expr)));
        else
! 	gcc_unreachable ();
  
      case COMPLEX_TYPE:
        return fold (convert_to_complex (type, expr));
  
      default:
!       gcc_unreachable ();
      }
  }
  
  /* Remove all conversions that are done in EXP.  This includes converting
!    from a padded type or to a justified modular type.  If TRUE_ADDRESS
!    is true, always return the address of the containing object even if
     the address is not bit-aligned.  */
  
  tree
! remove_conversions (tree exp, bool true_address)
  {
    switch (TREE_CODE (exp))
      {
      case CONSTRUCTOR:
        if (true_address
  	  && TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE
! 	  && TYPE_JUSTIFIED_MODULAR_P (TREE_TYPE (exp)))
! 	return remove_conversions (TREE_VALUE (CONSTRUCTOR_ELTS (exp)), true);
        break;
  
      case COMPONENT_REF:
*************** remove_conversions (tree exp, int true_a
*** 3172,3178 ****
        break;
  
      case VIEW_CONVERT_EXPR:  case NON_LVALUE_EXPR:
!     case NOP_EXPR:  case CONVERT_EXPR:  case GNAT_NOP_EXPR:
        return remove_conversions (TREE_OPERAND (exp, 0), true_address);
  
      default:
--- 3000,3006 ----
        break;
  
      case VIEW_CONVERT_EXPR:  case NON_LVALUE_EXPR:
!     case NOP_EXPR:  case CONVERT_EXPR:
        return remove_conversions (TREE_OPERAND (exp, 0), true_address);
  
      default:
*************** maybe_unconstrained_array (tree exp)
*** 3201,3207 ****
  	    = build_unary_op (INDIRECT_REF, NULL_TREE,
  			      build_component_ref (TREE_OPERAND (exp, 0),
  						   get_identifier ("P_ARRAY"),
! 						   NULL_TREE, 0));
  	  TREE_READONLY (new) = TREE_STATIC (new) = TREE_READONLY (exp);
  	  return new;
  	}
--- 3029,3035 ----
  	    = build_unary_op (INDIRECT_REF, NULL_TREE,
  			      build_component_ref (TREE_OPERAND (exp, 0),
  						   get_identifier ("P_ARRAY"),
! 						   NULL_TREE, false));
  	  TREE_READONLY (new) = TREE_STATIC (new) = TREE_READONLY (exp);
  	  return new;
  	}
*************** maybe_unconstrained_array (tree exp)
*** 3212,3224 ****
  					     (TREE_TYPE (TREE_TYPE (exp))))),
  		       TREE_OPERAND (exp, 0));
  
-       else if (code == WITH_RECORD_EXPR
- 	       && (TREE_OPERAND (exp, 0)
- 		   != (new = maybe_unconstrained_array
- 		       (TREE_OPERAND (exp, 0)))))
- 	return build (WITH_RECORD_EXPR, TREE_TYPE (new), new,
- 		      TREE_OPERAND (exp, 1));
- 
      case RECORD_TYPE:
        /* If this is a padded type, convert to the unpadded type and see if
  	 it contains a template.  */
--- 3040,3045 ----
*************** maybe_unconstrained_array (tree exp)
*** 3246,3255 ****
  }
  
  /* Return an expression that does an unchecked converstion of EXPR to TYPE.
!    If NOTRUNC_P is set, truncation operations should be suppressed.  */
  
  tree
! unchecked_convert (tree type, tree expr, int notrunc_p)
  {
    tree etype = TREE_TYPE (expr);
  
--- 3067,3076 ----
  }
  
  /* Return an expression that does an unchecked converstion of EXPR to TYPE.
!    If NOTRUNC_P is true, truncation operations should be suppressed.  */
  
  tree
! unchecked_convert (tree type, tree expr, bool notrunc_p)
  {
    tree etype = TREE_TYPE (expr);
  
*************** unchecked_convert (tree type, tree expr,
*** 3257,3283 ****
    if (etype == type)
      return expr;
  
-   /* If EXPR is a WITH_RECORD_EXPR, do the conversion inside and then make a
-      new one.  */
-   if (TREE_CODE (expr) == WITH_RECORD_EXPR)
-     return build (WITH_RECORD_EXPR, type,
- 		  unchecked_convert (type, TREE_OPERAND (expr, 0), notrunc_p),
- 		  TREE_OPERAND (expr, 1));
- 
    /* If both types types are integral just do a normal conversion.
       Likewise for a conversion to an unconstrained array.  */
    if ((((INTEGRAL_TYPE_P (type)
! 	 && ! (TREE_CODE (type) == INTEGER_TYPE
! 	       && TYPE_VAX_FLOATING_POINT_P (type)))
  	|| (POINTER_TYPE_P (type) && ! TYPE_THIN_POINTER_P (type))
  	|| (TREE_CODE (type) == RECORD_TYPE
! 	    && TYPE_LEFT_JUSTIFIED_MODULAR_P (type)))
         && ((INTEGRAL_TYPE_P (etype)
! 	    && ! (TREE_CODE (etype) == INTEGER_TYPE
! 		  && TYPE_VAX_FLOATING_POINT_P (etype)))
! 	   || (POINTER_TYPE_P (etype) && ! TYPE_THIN_POINTER_P (etype))
  	   || (TREE_CODE (etype) == RECORD_TYPE
! 	       && TYPE_LEFT_JUSTIFIED_MODULAR_P (etype))))
        || TREE_CODE (type) == UNCONSTRAINED_ARRAY_TYPE)
      {
        tree rtype = type;
--- 3078,3097 ----
    if (etype == type)
      return expr;
  
    /* If both types types are integral just do a normal conversion.
       Likewise for a conversion to an unconstrained array.  */
    if ((((INTEGRAL_TYPE_P (type)
! 	 && !(TREE_CODE (type) == INTEGER_TYPE
! 	      && TYPE_VAX_FLOATING_POINT_P (type)))
  	|| (POINTER_TYPE_P (type) && ! TYPE_THIN_POINTER_P (type))
  	|| (TREE_CODE (type) == RECORD_TYPE
! 	    && TYPE_JUSTIFIED_MODULAR_P (type)))
         && ((INTEGRAL_TYPE_P (etype)
! 	    && !(TREE_CODE (etype) == INTEGER_TYPE
! 		 && TYPE_VAX_FLOATING_POINT_P (etype)))
! 	   || (POINTER_TYPE_P (etype) && !TYPE_THIN_POINTER_P (etype))
  	   || (TREE_CODE (etype) == RECORD_TYPE
! 	       && TYPE_JUSTIFIED_MODULAR_P (etype))))
        || TREE_CODE (type) == UNCONSTRAINED_ARRAY_TYPE)
      {
        tree rtype = type;
*************** unchecked_convert (tree type, tree expr,
*** 3289,3295 ****
  
  	  TYPE_BIASED_REPRESENTATION_P (ntype) = 0;
  	  TYPE_MAIN_VARIANT (ntype) = ntype;
! 	  expr = build1 (GNAT_NOP_EXPR, ntype, expr);
  	}
  
        if (TREE_CODE (type) == INTEGER_TYPE
--- 3103,3109 ----
  
  	  TYPE_BIASED_REPRESENTATION_P (ntype) = 0;
  	  TYPE_MAIN_VARIANT (ntype) = ntype;
! 	  expr = build1 (NOP_EXPR, ntype, expr);
  	}
  
        if (TREE_CODE (type) == INTEGER_TYPE
*************** unchecked_convert (tree type, tree expr,
*** 3302,3314 ****
  
        expr = convert (rtype, expr);
        if (type != rtype)
! 	expr = build1 (GNAT_NOP_EXPR, type, expr);
      }
  
    /* If we are converting TO an integral type whose precision is not the
       same as its size, first unchecked convert to a record that contains
       an object of the output type.  Then extract the field. */
!   else if (INTEGRAL_TYPE_P (type) && TYPE_RM_SIZE (type) != 0
  	   && 0 != compare_tree_int (TYPE_RM_SIZE (type),
  				     GET_MODE_BITSIZE (TYPE_MODE (type))))
      {
--- 3116,3128 ----
  
        expr = convert (rtype, expr);
        if (type != rtype)
! 	expr = build1 (NOP_EXPR, type, expr);
      }
  
    /* If we are converting TO an integral type whose precision is not the
       same as its size, first unchecked convert to a record that contains
       an object of the output type.  Then extract the field. */
!   else if (INTEGRAL_TYPE_P (type) && TYPE_RM_SIZE (type)
  	   && 0 != compare_tree_int (TYPE_RM_SIZE (type),
  				     GET_MODE_BITSIZE (TYPE_MODE (type))))
      {
*************** unchecked_convert (tree type, tree expr,
*** 3325,3331 ****
  
    /* Similarly for integral input type whose precision is not equal to its
       size.  */
!   else if (INTEGRAL_TYPE_P (etype) && TYPE_RM_SIZE (etype) != 0
        && 0 != compare_tree_int (TYPE_RM_SIZE (etype),
  				GET_MODE_BITSIZE (TYPE_MODE (etype))))
      {
--- 3139,3145 ----
  
    /* Similarly for integral input type whose precision is not equal to its
       size.  */
!   else if (INTEGRAL_TYPE_P (etype) && TYPE_RM_SIZE (etype)
        && 0 != compare_tree_int (TYPE_RM_SIZE (etype),
  				GET_MODE_BITSIZE (TYPE_MODE (etype))))
      {
*************** unchecked_convert (tree type, tree expr,
*** 3353,3358 ****
--- 3167,3177 ----
    else
      {
        expr = maybe_unconstrained_array (expr);
+ 
+       /* There's no point in doing two unchecked conversions in a row.  */
+       if (TREE_CODE (expr) == VIEW_CONVERT_EXPR)
+ 	expr = TREE_OPERAND (expr, 0);
+ 
        etype = TREE_TYPE (expr);
        expr = build1 (VIEW_CONVERT_EXPR, type, expr);
      }
*************** unchecked_convert (tree type, tree expr,
*** 3362,3383 ****
       the result.  We need not do this in the case where the input is
       an integral type of the same precision and signedness or if the output
       is a biased type or if both the input and output are unsigned.  */
!   if (! notrunc_p
!       && INTEGRAL_TYPE_P (type) && TYPE_RM_SIZE (type) != 0
!       && ! (TREE_CODE (type) == INTEGER_TYPE
! 	    && TYPE_BIASED_REPRESENTATION_P (type))
        && 0 != compare_tree_int (TYPE_RM_SIZE (type),
  				GET_MODE_BITSIZE (TYPE_MODE (type)))
!       && ! (INTEGRAL_TYPE_P (etype)
! 	    && TREE_UNSIGNED (type) == TREE_UNSIGNED (etype)
! 	    && operand_equal_p (TYPE_RM_SIZE (type),
! 				(TYPE_RM_SIZE (etype) != 0
! 				 ? TYPE_RM_SIZE (etype) : TYPE_SIZE (etype)),
! 				0))
!       && ! (TREE_UNSIGNED (type) && TREE_UNSIGNED (etype)))
      {
        tree base_type = gnat_type_for_mode (TYPE_MODE (type),
! 					   TREE_UNSIGNED (type));
        tree shift_expr
  	= convert (base_type,
  		   size_binop (MINUS_EXPR,
--- 3181,3202 ----
       the result.  We need not do this in the case where the input is
       an integral type of the same precision and signedness or if the output
       is a biased type or if both the input and output are unsigned.  */
!   if (!notrunc_p
!       && INTEGRAL_TYPE_P (type) && TYPE_RM_SIZE (type)
!       && !(TREE_CODE (type) == INTEGER_TYPE
! 	   && TYPE_BIASED_REPRESENTATION_P (type))
        && 0 != compare_tree_int (TYPE_RM_SIZE (type),
  				GET_MODE_BITSIZE (TYPE_MODE (type)))
!       && !(INTEGRAL_TYPE_P (etype)
! 	   && TYPE_UNSIGNED (type) == TYPE_UNSIGNED (etype)
! 	   && operand_equal_p (TYPE_RM_SIZE (type),
! 			       (TYPE_RM_SIZE (etype) != 0
! 				? TYPE_RM_SIZE (etype) : TYPE_SIZE (etype)),
! 			       0))
!       && !(TYPE_UNSIGNED (type) && TYPE_UNSIGNED (etype)))
      {
        tree base_type = gnat_type_for_mode (TYPE_MODE (type),
! 					   TYPE_UNSIGNED (type));
        tree shift_expr
  	= convert (base_type,
  		   size_binop (MINUS_EXPR,
*************** unchecked_convert (tree type, tree expr,
*** 3404,3414 ****
    /* If the sizes of the types differ and this is an VIEW_CONVERT_EXPR,
       show no longer constant.  */
    if (TREE_CODE (expr) == VIEW_CONVERT_EXPR
!       && ! operand_equal_p (TYPE_SIZE_UNIT (type), TYPE_SIZE_UNIT (etype), 1))
      TREE_CONSTANT (expr) = 0;
  
    return expr;
  }
  
  #include "gt-ada-utils.h"
  #include "gtype-ada.h"
--- 3223,3246 ----
    /* If the sizes of the types differ and this is an VIEW_CONVERT_EXPR,
       show no longer constant.  */
    if (TREE_CODE (expr) == VIEW_CONVERT_EXPR
!       && !operand_equal_p (TYPE_SIZE_UNIT (type), TYPE_SIZE_UNIT (etype),
! 			   OEP_ONLY_CONST))
      TREE_CONSTANT (expr) = 0;
  
    return expr;
  }
+ 
+ /* Search the chain of currently reachable declarations for a builtin
+    FUNCTION_DECL node corresponding to function NAME (an IDENTIFIER_NODE).
+    Return the first node found, if any, or NULL_TREE otherwise.  */
+ 
+ tree
+ builtin_decl_for (tree name __attribute__ ((unused)))
+ {
+   /* ??? not clear yet how to implement this function in tree-ssa, so
+      return NULL_TREE for now */
+   return NULL_TREE;
+ }
  
  #include "gt-ada-utils.h"
  #include "gtype-ada.h"
diff -Nrcpad gcc-3.4.3/gcc/ada/utils2.c gcc-4.0.0/gcc/ada/utils2.c
*** gcc-3.4.3/gcc/ada/utils2.c	Tue Nov  4 12:51:46 2003
--- gcc-4.0.0/gcc/ada/utils2.c	Thu Mar 17 15:35:04 2005
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *          Copyright (C) 1992-2003, Free Software Foundation, Inc.         *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *          Copyright (C) 1992-2005, Free Software Foundation, Inc.         *
   *                                                                          *
   * GNAT is free software;  you can  redistribute it  and/or modify it under *
   * terms of the  GNU General Public License as published  by the Free Soft- *
***************
*** 29,34 ****
--- 29,36 ----
  #include "coretypes.h"
  #include "tm.h"
  #include "tree.h"
+ #include "rtl.h"
+ #include "ggc.h"
  #include "flags.h"
  #include "output.h"
  #include "ada.h"
***************
*** 45,55 ****
  #include "gigi.h"
  
  static tree find_common_type (tree, tree);
! static int contains_save_expr_p (tree);
  static tree contains_null_expr (tree);
  static tree compare_arrays (tree, tree, tree);
  static tree nonbinary_modular_operation (enum tree_code, tree, tree, tree);
! static tree build_simple_component_ref (tree, tree, tree, int);
  
  /* Prepare expr to be an argument of a TRUTH_NOT_EXPR or other logical
     operation.
--- 47,57 ----
  #include "gigi.h"
  
  static tree find_common_type (tree, tree);
! static bool contains_save_expr_p (tree);
  static tree contains_null_expr (tree);
  static tree compare_arrays (tree, tree, tree);
  static tree nonbinary_modular_operation (enum tree_code, tree, tree, tree);
! static tree build_simple_component_ref (tree, tree, tree, bool);
  
  /* Prepare expr to be an argument of a TRUTH_NOT_EXPR or other logical
     operation.
*************** gnat_truthvalue_conversion (tree expr)
*** 83,99 ****
      case ERROR_MARK:
        return expr;
  
      case COND_EXPR:
        /* Distribute the conversion into the arms of a COND_EXPR.  */
        return fold
! 	(build (COND_EXPR, type, TREE_OPERAND (expr, 0),
! 		gnat_truthvalue_conversion (TREE_OPERAND (expr, 1)),
! 		gnat_truthvalue_conversion (TREE_OPERAND (expr, 2))));
! 
!     case WITH_RECORD_EXPR:
!       return build (WITH_RECORD_EXPR, type,
! 		    gnat_truthvalue_conversion (TREE_OPERAND (expr, 0)),
! 		    TREE_OPERAND (expr, 1));
  
      default:
        return build_binary_op (NE_EXPR, type, expr,
--- 85,104 ----
      case ERROR_MARK:
        return expr;
  
+     case INTEGER_CST:
+       return (integer_zerop (expr) ? convert (type, integer_zero_node)
+ 	      : convert (type, integer_one_node));
+ 
+     case REAL_CST:
+       return (real_zerop (expr) ? convert (type, integer_zero_node)
+ 	      : convert (type, integer_one_node));
+ 
      case COND_EXPR:
        /* Distribute the conversion into the arms of a COND_EXPR.  */
        return fold
! 	(build3 (COND_EXPR, type, TREE_OPERAND (expr, 0),
! 		 gnat_truthvalue_conversion (TREE_OPERAND (expr, 1)),
! 		 gnat_truthvalue_conversion (TREE_OPERAND (expr, 2))));
  
      default:
        return build_binary_op (NE_EXPR, type, expr,
*************** tree
*** 107,116 ****
  get_base_type (tree type)
  {
    if (TREE_CODE (type) == RECORD_TYPE
!       && TYPE_LEFT_JUSTIFIED_MODULAR_P (type))
      type = TREE_TYPE (TYPE_FIELDS (type));
  
!   while (TREE_TYPE (type) != 0
  	 && (TREE_CODE (type) == INTEGER_TYPE
  	     || TREE_CODE (type) == REAL_TYPE))
      type = TREE_TYPE (type);
--- 112,121 ----
  get_base_type (tree type)
  {
    if (TREE_CODE (type) == RECORD_TYPE
!       && TYPE_JUSTIFIED_MODULAR_P (type))
      type = TREE_TYPE (TYPE_FIELDS (type));
  
!   while (TREE_TYPE (type)
  	 && (TREE_CODE (type) == INTEGER_TYPE
  	     || TREE_CODE (type) == REAL_TYPE))
      type = TREE_TYPE (type);
*************** get_base_type (tree type)
*** 122,131 ****
  tree
  get_ada_base_type (tree type)
  {
!   while (TREE_TYPE (type) != 0
  	 && (TREE_CODE (type) == INTEGER_TYPE
  	     || TREE_CODE (type) == REAL_TYPE)
! 	 && ! TYPE_EXTRA_SUBTYPE_P (type))
      type = TREE_TYPE (type);
  
    return type;
--- 127,136 ----
  tree
  get_ada_base_type (tree type)
  {
!   while (TREE_TYPE (type)
  	 && (TREE_CODE (type) == INTEGER_TYPE
  	     || TREE_CODE (type) == REAL_TYPE)
! 	 && !TYPE_EXTRA_SUBTYPE_P (type))
      type = TREE_TYPE (type);
  
    return type;
*************** known_alignment (tree exp)
*** 155,161 ****
       type_alignment value to 0 when the type information is to be ignored.  */
    type_alignment
      = ((POINTER_TYPE_P (TREE_TYPE (exp))
! 	&& ! TYPE_IS_DUMMY_P (TREE_TYPE (TREE_TYPE (exp))))
         ? TYPE_ALIGN (TREE_TYPE (TREE_TYPE (exp))) : 0);
  
    switch (TREE_CODE (exp))
--- 160,166 ----
       type_alignment value to 0 when the type information is to be ignored.  */
    type_alignment
      = ((POINTER_TYPE_P (TREE_TYPE (exp))
! 	&& !TYPE_IS_DUMMY_P (TREE_TYPE (TREE_TYPE (exp))))
         ? TYPE_ALIGN (TREE_TYPE (TREE_TYPE (exp))) : 0);
  
    switch (TREE_CODE (exp))
*************** find_common_type (tree t1, tree t2)
*** 244,256 ****
     ??? This is a real kludge, but is probably the best approach short
     of some very general solution.  */
  
! static int
  contains_save_expr_p (tree exp)
  {
    switch (TREE_CODE (exp))
      {
      case SAVE_EXPR:
!       return 1;
  
      case ADDR_EXPR:  case INDIRECT_REF:
      case COMPONENT_REF:
--- 249,261 ----
     ??? This is a real kludge, but is probably the best approach short
     of some very general solution.  */
  
! static bool
  contains_save_expr_p (tree exp)
  {
    switch (TREE_CODE (exp))
      {
      case SAVE_EXPR:
!       return true;
  
      case ADDR_EXPR:  case INDIRECT_REF:
      case COMPONENT_REF:
*************** contains_save_expr_p (tree exp)
*** 258,273 ****
        return contains_save_expr_p (TREE_OPERAND (exp, 0));
  
      case CONSTRUCTOR:
!       return (CONSTRUCTOR_ELTS (exp) != 0
  	      && contains_save_expr_p (CONSTRUCTOR_ELTS (exp)));
  
      case TREE_LIST:
        return (contains_save_expr_p (TREE_VALUE (exp))
! 	      || (TREE_CHAIN (exp) != 0
  		  && contains_save_expr_p (TREE_CHAIN (exp))));
  
      default:
!       return 0;
      }
  }
  
--- 263,278 ----
        return contains_save_expr_p (TREE_OPERAND (exp, 0));
  
      case CONSTRUCTOR:
!       return (CONSTRUCTOR_ELTS (exp)
  	      && contains_save_expr_p (CONSTRUCTOR_ELTS (exp)));
  
      case TREE_LIST:
        return (contains_save_expr_p (TREE_VALUE (exp))
! 	      || (TREE_CHAIN (exp)
  		  && contains_save_expr_p (TREE_CHAIN (exp))));
  
      default:
!       return false;
      }
  }
  
*************** contains_null_expr (tree exp)
*** 285,301 ****
  
    switch (TREE_CODE_CLASS (TREE_CODE (exp)))
      {
!     case '1':
        return contains_null_expr (TREE_OPERAND (exp, 0));
  
!     case '<':  case '2':
        tem = contains_null_expr (TREE_OPERAND (exp, 0));
!       if (tem != 0)
  	return tem;
  
        return contains_null_expr (TREE_OPERAND (exp, 1));
  
!     case 'e':
        switch (TREE_CODE (exp))
  	{
  	case SAVE_EXPR:
--- 290,307 ----
  
    switch (TREE_CODE_CLASS (TREE_CODE (exp)))
      {
!     case tcc_unary:
        return contains_null_expr (TREE_OPERAND (exp, 0));
  
!     case tcc_comparison:
!     case tcc_binary:
        tem = contains_null_expr (TREE_OPERAND (exp, 0));
!       if (tem)
  	return tem;
  
        return contains_null_expr (TREE_OPERAND (exp, 1));
  
!     case tcc_expression:
        switch (TREE_CODE (exp))
  	{
  	case SAVE_EXPR:
*************** contains_null_expr (tree exp)
*** 303,313 ****
  
  	case COND_EXPR:
  	  tem = contains_null_expr (TREE_OPERAND (exp, 0));
! 	  if (tem != 0)
  	    return tem;
  
  	  tem = contains_null_expr (TREE_OPERAND (exp, 1));
! 	  if (tem != 0)
  	    return tem;
  
  	  return contains_null_expr (TREE_OPERAND (exp, 2));
--- 309,319 ----
  
  	case COND_EXPR:
  	  tem = contains_null_expr (TREE_OPERAND (exp, 0));
! 	  if (tem)
  	    return tem;
  
  	  tem = contains_null_expr (TREE_OPERAND (exp, 1));
! 	  if (tem)
  	    return tem;
  
  	  return contains_null_expr (TREE_OPERAND (exp, 2));
*************** compare_arrays (tree result_type, tree a
*** 338,344 ****
    tree result = convert (result_type, integer_one_node);
    tree a1_is_null = convert (result_type, integer_zero_node);
    tree a2_is_null = convert (result_type, integer_zero_node);
!   int length_zero_p = 0;
  
    /* Process each dimension separately and compare the lengths.  If any
       dimension has a size known to be zero, set SIZE_ZERO_P to 1 to
--- 344,350 ----
    tree result = convert (result_type, integer_one_node);
    tree a1_is_null = convert (result_type, integer_zero_node);
    tree a2_is_null = convert (result_type, integer_zero_node);
!   bool length_zero_p = false;
  
    /* Process each dimension separately and compare the lengths.  If any
       dimension has a size known to be zero, set SIZE_ZERO_P to 1 to
*************** compare_arrays (tree result_type, tree a
*** 350,357 ****
        tree lb2 = TYPE_MIN_VALUE (TYPE_DOMAIN (t2));
        tree ub2 = TYPE_MAX_VALUE (TYPE_DOMAIN (t2));
        tree bt = get_base_type (TREE_TYPE (lb1));
!       tree length1 = fold (build (MINUS_EXPR, bt, ub1, lb1));
!       tree length2 = fold (build (MINUS_EXPR, bt, ub2, lb2));
        tree nbt;
        tree tem;
        tree comparison, this_a1_is_null, this_a2_is_null;
--- 356,363 ----
        tree lb2 = TYPE_MIN_VALUE (TYPE_DOMAIN (t2));
        tree ub2 = TYPE_MAX_VALUE (TYPE_DOMAIN (t2));
        tree bt = get_base_type (TREE_TYPE (lb1));
!       tree length1 = fold (build2 (MINUS_EXPR, bt, ub1, lb1));
!       tree length2 = fold (build2 (MINUS_EXPR, bt, ub2, lb2));
        tree nbt;
        tree tem;
        tree comparison, this_a1_is_null, this_a2_is_null;
*************** compare_arrays (tree result_type, tree a
*** 360,366 ****
  	 unless the length of the second array is the constant zero.
  	 Note that we have set the `length' values to the length - 1.  */
        if (TREE_CODE (length1) == INTEGER_CST
! 	  && ! integer_zerop (fold (build (PLUS_EXPR, bt, length2,
  					   convert (bt, integer_one_node)))))
  	{
  	  tem = a1, a1 = a2, a2 = tem;
--- 366,372 ----
  	 unless the length of the second array is the constant zero.
  	 Note that we have set the `length' values to the length - 1.  */
        if (TREE_CODE (length1) == INTEGER_CST
! 	  && !integer_zerop (fold (build2 (PLUS_EXPR, bt, length2,
  					   convert (bt, integer_one_node)))))
  	{
  	  tem = a1, a1 = a2, a2 = tem;
*************** compare_arrays (tree result_type, tree a
*** 374,395 ****
        /* If the length of this dimension in the second array is the constant
  	 zero, we can just go inside the original bounds for the first
  	 array and see if last < first.  */
!       if (integer_zerop (fold (build (PLUS_EXPR, bt, length2,
! 				      convert (bt, integer_one_node)))))
  	{
  	  tree ub = TYPE_MAX_VALUE (TYPE_INDEX_TYPE (TYPE_DOMAIN (t1)));
  	  tree lb = TYPE_MIN_VALUE (TYPE_INDEX_TYPE (TYPE_DOMAIN (t1)));
  
  	  comparison = build_binary_op (LT_EXPR, result_type, ub, lb);
  
! 	  if (CONTAINS_PLACEHOLDER_P (comparison))
! 	    comparison = build (WITH_RECORD_EXPR, result_type,
! 				comparison, a1);
! 	  if (CONTAINS_PLACEHOLDER_P (length1))
! 	    length1 = build (WITH_RECORD_EXPR, bt, length1, a1);
! 
! 	  length_zero_p = 1;
! 
  	  this_a1_is_null = comparison;
  	  this_a2_is_null = convert (result_type, integer_one_node);
  	}
--- 380,396 ----
        /* If the length of this dimension in the second array is the constant
  	 zero, we can just go inside the original bounds for the first
  	 array and see if last < first.  */
!       if (integer_zerop (fold (build2 (PLUS_EXPR, bt, length2,
! 				       convert (bt, integer_one_node)))))
  	{
  	  tree ub = TYPE_MAX_VALUE (TYPE_INDEX_TYPE (TYPE_DOMAIN (t1)));
  	  tree lb = TYPE_MIN_VALUE (TYPE_INDEX_TYPE (TYPE_DOMAIN (t1)));
  
  	  comparison = build_binary_op (LT_EXPR, result_type, ub, lb);
+ 	  comparison = SUBSTITUTE_PLACEHOLDER_IN_EXPR (comparison, a1);
+ 	  length1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (length1, a1);
  
! 	  length_zero_p = true;
  	  this_a1_is_null = comparison;
  	  this_a2_is_null = convert (result_type, integer_one_node);
  	}
*************** compare_arrays (tree result_type, tree a
*** 413,422 ****
  	  /* Note that we know that UB2 and LB2 are constant and hence
  	     cannot contain a PLACEHOLDER_EXPR.  */
  
! 	  if (CONTAINS_PLACEHOLDER_P (comparison))
! 	    comparison = build (WITH_RECORD_EXPR, result_type, comparison, a1);
! 	  if (CONTAINS_PLACEHOLDER_P (length1))
! 	    length1 = build (WITH_RECORD_EXPR, bt, length1, a1);
  
  	  this_a1_is_null = build_binary_op (LT_EXPR, result_type, ub1, lb1);
  	  this_a2_is_null = convert (result_type, integer_zero_node);
--- 414,421 ----
  	  /* Note that we know that UB2 and LB2 are constant and hence
  	     cannot contain a PLACEHOLDER_EXPR.  */
  
! 	  comparison = SUBSTITUTE_PLACEHOLDER_IN_EXPR (comparison, a1);
! 	  length1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (length1, a1);
  
  	  this_a1_is_null = build_binary_op (LT_EXPR, result_type, ub1, lb1);
  	  this_a2_is_null = convert (result_type, integer_zero_node);
*************** compare_arrays (tree result_type, tree a
*** 425,434 ****
        /* Otherwise compare the computed lengths.  */
        else
  	{
! 	  if (CONTAINS_PLACEHOLDER_P (length1))
! 	    length1 = build (WITH_RECORD_EXPR, bt, length1, a1);
! 	  if (CONTAINS_PLACEHOLDER_P (length2))
! 	    length2 = build (WITH_RECORD_EXPR, bt, length2, a2);
  
  	  comparison
  	    = build_binary_op (EQ_EXPR, result_type, length1, length2);
--- 424,431 ----
        /* Otherwise compare the computed lengths.  */
        else
  	{
! 	  length1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (length1, a1);
! 	  length2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (length2, a2);
  
  	  comparison
  	    = build_binary_op (EQ_EXPR, result_type, length1, length2);
*************** compare_arrays (tree result_type, tree a
*** 455,469 ****
  
    /* Unless the size of some bound is known to be zero, compare the
       data in the array.  */
!   if (! length_zero_p)
      {
        tree type = find_common_type (TREE_TYPE (a1), TREE_TYPE (a2));
  
!       if (type != 0)
  	a1 = convert (type, a1), a2 = convert (type, a2);
  
        result = build_binary_op (TRUTH_ANDIF_EXPR, result_type, result,
! 				fold (build (EQ_EXPR, result_type, a1, a2)));
  
      }
  
--- 452,466 ----
  
    /* Unless the size of some bound is known to be zero, compare the
       data in the array.  */
!   if (!length_zero_p)
      {
        tree type = find_common_type (TREE_TYPE (a1), TREE_TYPE (a2));
  
!       if (type)
  	a1 = convert (type, a1), a2 = convert (type, a2);
  
        result = build_binary_op (TRUTH_ANDIF_EXPR, result_type, result,
! 				fold (build2 (EQ_EXPR, result_type, a1, a2)));
  
      }
  
*************** compare_arrays (tree result_type, tree a
*** 478,487 ****
       evaluated would be wrong.  */
  
    if (contains_save_expr_p (a1))
!     result = build (COMPOUND_EXPR, result_type, a1, result);
  
    if (contains_save_expr_p (a2))
!     result = build (COMPOUND_EXPR, result_type, a2, result);
  
    return result;
  }
--- 475,484 ----
       evaluated would be wrong.  */
  
    if (contains_save_expr_p (a1))
!     result = build2 (COMPOUND_EXPR, result_type, a1, result);
  
    if (contains_save_expr_p (a2))
!     result = build2 (COMPOUND_EXPR, result_type, a2, result);
  
    return result;
  }
*************** compare_arrays (tree result_type, tree a
*** 491,512 ****
     modulus.  */
  
  static tree
! nonbinary_modular_operation (enum tree_code op_code,
!                              tree type,
!                              tree lhs,
                               tree rhs)
  {
    tree modulus = TYPE_MODULUS (type);
    unsigned int needed_precision = tree_floor_log2 (modulus) + 1;
    unsigned int precision;
!   int unsignedp = 1;
    tree op_type = type;
    tree result;
  
    /* If this is an addition of a constant, convert it to a subtraction
       of a constant since we can do that faster.  */
    if (op_code == PLUS_EXPR && TREE_CODE (rhs) == INTEGER_CST)
!     rhs = fold (build (MINUS_EXPR, type, modulus, rhs)), op_code = MINUS_EXPR;
  
    /* For the logical operations, we only need PRECISION bits.  For
       addition and subraction, we need one more and for multiplication we
--- 488,507 ----
     modulus.  */
  
  static tree
! nonbinary_modular_operation (enum tree_code op_code, tree type, tree lhs,
                               tree rhs)
  {
    tree modulus = TYPE_MODULUS (type);
    unsigned int needed_precision = tree_floor_log2 (modulus) + 1;
    unsigned int precision;
!   bool unsignedp = true;
    tree op_type = type;
    tree result;
  
    /* If this is an addition of a constant, convert it to a subtraction
       of a constant since we can do that faster.  */
    if (op_code == PLUS_EXPR && TREE_CODE (rhs) == INTEGER_CST)
!     rhs = fold (build2 (MINUS_EXPR, type, modulus, rhs)), op_code = MINUS_EXPR;
  
    /* For the logical operations, we only need PRECISION bits.  For
       addition and subraction, we need one more and for multiplication we
*************** nonbinary_modular_operation (enum tree_c
*** 521,532 ****
  
    /* Unsigned will do for everything but subtraction.  */
    if (op_code == MINUS_EXPR)
!     unsignedp = 0;
  
    /* If our type is the wrong signedness or isn't wide enough, make a new
       type and convert both our operands to it.  */
    if (TYPE_PRECISION (op_type) < precision
!       || TREE_UNSIGNED (op_type) != unsignedp)
      {
        /* Copy the node so we ensure it can be modified to make it modular.  */
        op_type = copy_node (gnat_type_for_size (precision, unsignedp));
--- 516,527 ----
  
    /* Unsigned will do for everything but subtraction.  */
    if (op_code == MINUS_EXPR)
!     unsignedp = false;
  
    /* If our type is the wrong signedness or isn't wide enough, make a new
       type and convert both our operands to it.  */
    if (TYPE_PRECISION (op_type) < precision
!       || TYPE_UNSIGNED (op_type) != unsignedp)
      {
        /* Copy the node so we ensure it can be modified to make it modular.  */
        op_type = copy_node (gnat_type_for_size (precision, unsignedp));
*************** nonbinary_modular_operation (enum tree_c
*** 538,544 ****
      }
  
    /* Do the operation, then we'll fix it up.  */
!   result = fold (build (op_code, op_type, lhs, rhs));
  
    /* For multiplication, we have no choice but to do a full modulus
       operation.  However, we want to do this in the narrowest
--- 533,539 ----
      }
  
    /* Do the operation, then we'll fix it up.  */
!   result = fold (build2 (op_code, op_type, lhs, rhs));
  
    /* For multiplication, we have no choice but to do a full modulus
       operation.  However, we want to do this in the narrowest
*************** nonbinary_modular_operation (enum tree_c
*** 550,581 ****
        SET_TYPE_MODULUS (div_type, modulus);
        TYPE_MODULAR_P (div_type) = 1;
        result = convert (op_type,
! 			fold (build (TRUNC_MOD_EXPR, div_type,
! 				     convert (div_type, result), modulus)));
      }
  
    /* For subtraction, add the modulus back if we are negative.  */
    else if (op_code == MINUS_EXPR)
      {
        result = save_expr (result);
!       result = fold (build (COND_EXPR, op_type,
! 			    build (LT_EXPR, integer_type_node, result,
! 				   convert (op_type, integer_zero_node)),
! 			    fold (build (PLUS_EXPR, op_type,
! 					 result, modulus)),
! 			    result));
      }
  
    /* For the other operations, subtract the modulus if we are >= it.  */
    else
      {
        result = save_expr (result);
!       result = fold (build (COND_EXPR, op_type,
! 			    build (GE_EXPR, integer_type_node,
! 				   result, modulus),
! 			    fold (build (MINUS_EXPR, op_type,
! 					 result, modulus)),
! 			    result));
      }
  
    return convert (type, result);
--- 545,576 ----
        SET_TYPE_MODULUS (div_type, modulus);
        TYPE_MODULAR_P (div_type) = 1;
        result = convert (op_type,
! 			fold (build2 (TRUNC_MOD_EXPR, div_type,
! 				      convert (div_type, result), modulus)));
      }
  
    /* For subtraction, add the modulus back if we are negative.  */
    else if (op_code == MINUS_EXPR)
      {
        result = save_expr (result);
!       result = fold (build3 (COND_EXPR, op_type,
! 			     build2 (LT_EXPR, integer_type_node, result,
! 				     convert (op_type, integer_zero_node)),
! 			     fold (build2 (PLUS_EXPR, op_type,
! 					   result, modulus)),
! 			     result));
      }
  
    /* For the other operations, subtract the modulus if we are >= it.  */
    else
      {
        result = save_expr (result);
!       result = fold (build3 (COND_EXPR, op_type,
! 			     build2 (GE_EXPR, integer_type_node,
! 				     result, modulus),
! 			     fold (build2 (MINUS_EXPR, op_type,
! 					   result, modulus)),
! 			     result));
      }
  
    return convert (type, result);
*************** nonbinary_modular_operation (enum tree_c
*** 591,655 ****
     have to do here is validate the work done by SEM and handle subtypes.  */
  
  tree
! build_binary_op (enum tree_code op_code,
!                  tree result_type,
!                  tree left_operand,
!                  tree right_operand)
  {
    tree left_type  = TREE_TYPE (left_operand);
    tree right_type = TREE_TYPE (right_operand);
    tree left_base_type = get_base_type (left_type);
    tree right_base_type = get_base_type (right_type);
    tree operation_type = result_type;
!   tree best_type = 0;
    tree modulus;
    tree result;
!   int has_side_effects = 0;
! 
!   /* If one (but not both, unless they have the same object) operands are a
!      WITH_RECORD_EXPR, do the operation and then surround it with the
!      WITH_RECORD_EXPR.  Don't do this for assignment, for an ARRAY_REF, or
!      for an ARRAY_RANGE_REF because we need to keep track of the
!      WITH_RECORD_EXPRs on both operands very carefully.  */
!   if (op_code != MODIFY_EXPR && op_code != ARRAY_REF
!       && op_code != ARRAY_RANGE_REF
!       && TREE_CODE (left_operand) == WITH_RECORD_EXPR
!       && (TREE_CODE (right_operand) != WITH_RECORD_EXPR
! 	  || operand_equal_p (TREE_OPERAND (left_operand, 1),
! 			      TREE_OPERAND (right_operand, 1), 0)))
!     {
!       tree right = right_operand;
! 
!       if (TREE_CODE (right) == WITH_RECORD_EXPR)
! 	right = TREE_OPERAND (right, 0);
! 
!       result = build_binary_op (op_code, result_type,
! 				TREE_OPERAND (left_operand, 0), right);
!       return build (WITH_RECORD_EXPR, TREE_TYPE (result), result,
! 		    TREE_OPERAND (left_operand, 1));
!     }
!   else if (op_code != MODIFY_EXPR && op_code != ARRAY_REF
! 	   && op_code != ARRAY_RANGE_REF
! 	   && TREE_CODE (left_operand) != WITH_RECORD_EXPR
! 	   && TREE_CODE (right_operand) == WITH_RECORD_EXPR)
!     {
!       result = build_binary_op (op_code, result_type, left_operand,
! 				TREE_OPERAND (right_operand, 0));
!       return build (WITH_RECORD_EXPR, TREE_TYPE (result), result,
! 		    TREE_OPERAND (right_operand, 1));
!     }
  
!   if (operation_type != 0
        && TREE_CODE (operation_type) == RECORD_TYPE
!       && TYPE_LEFT_JUSTIFIED_MODULAR_P (operation_type))
      operation_type = TREE_TYPE (TYPE_FIELDS (operation_type));
  
!   if (operation_type != 0
!       && ! AGGREGATE_TYPE_P (operation_type)
        && TYPE_EXTRA_SUBTYPE_P (operation_type))
      operation_type = get_base_type (operation_type);
  
!   modulus = (operation_type != 0 && TREE_CODE (operation_type) == INTEGER_TYPE
  	     && TYPE_MODULAR_P (operation_type)
  	     ? TYPE_MODULUS (operation_type) : 0);
  
--- 586,615 ----
     have to do here is validate the work done by SEM and handle subtypes.  */
  
  tree
! build_binary_op (enum tree_code op_code, tree result_type,
!                  tree left_operand, tree right_operand)
  {
    tree left_type  = TREE_TYPE (left_operand);
    tree right_type = TREE_TYPE (right_operand);
    tree left_base_type = get_base_type (left_type);
    tree right_base_type = get_base_type (right_type);
    tree operation_type = result_type;
!   tree best_type = NULL_TREE;
    tree modulus;
    tree result;
!   bool has_side_effects = false;
  
!   if (operation_type
        && TREE_CODE (operation_type) == RECORD_TYPE
!       && TYPE_JUSTIFIED_MODULAR_P (operation_type))
      operation_type = TREE_TYPE (TYPE_FIELDS (operation_type));
  
!   if (operation_type
!       && !AGGREGATE_TYPE_P (operation_type)
        && TYPE_EXTRA_SUBTYPE_P (operation_type))
      operation_type = get_base_type (operation_type);
  
!   modulus = (operation_type && TREE_CODE (operation_type) == INTEGER_TYPE
  	     && TYPE_MODULAR_P (operation_type)
  	     ? TYPE_MODULUS (operation_type) : 0);
  
*************** build_binary_op (enum tree_code op_code,
*** 671,679 ****
  		      || POINTER_TYPE_P (TREE_TYPE
  					 (TREE_OPERAND (left_operand, 0)))))
  		 || (((TREE_CODE (left_type) == RECORD_TYPE
! 		       /* Don't remove conversions to left-justified modular
  			  types. */
! 		       && ! TYPE_LEFT_JUSTIFIED_MODULAR_P (left_type))
  		      || TREE_CODE (left_type) == ARRAY_TYPE)
  		     && ((TREE_CODE (TREE_TYPE
  				     (TREE_OPERAND (left_operand, 0)))
--- 631,639 ----
  		      || POINTER_TYPE_P (TREE_TYPE
  					 (TREE_OPERAND (left_operand, 0)))))
  		 || (((TREE_CODE (left_type) == RECORD_TYPE
! 		       /* Don't remove conversions to justified modular
  			  types. */
! 		       && !TYPE_JUSTIFIED_MODULAR_P (left_type))
  		      || TREE_CODE (left_type) == ARRAY_TYPE)
  		     && ((TREE_CODE (TREE_TYPE
  				     (TREE_OPERAND (left_operand, 0)))
*************** build_binary_op (enum tree_code op_code,
*** 691,697 ****
  	  left_type = TREE_TYPE (left_operand);
  	}
  
!       if (operation_type == 0)
  	operation_type = left_type;
  
        /* If the RHS has a conversion between record and array types and
--- 651,657 ----
  	  left_type = TREE_TYPE (left_operand);
  	}
  
!       if (!operation_type)
  	operation_type = left_type;
  
        /* If the RHS has a conversion between record and array types and
*************** build_binary_op (enum tree_code op_code,
*** 700,724 ****
  	 might indicate a conversion between a root type and a class-wide
  	 type, which we must not remove.  */
        while (TREE_CODE (right_operand) == VIEW_CONVERT_EXPR
! 	     && ((TREE_CODE (right_type) == RECORD_TYPE
! 		  && ! TYPE_LEFT_JUSTIFIED_MODULAR_P (right_type)
! 		  && ! TYPE_ALIGN_OK (right_type)
! 		  && ! TYPE_IS_FAT_POINTER_P (right_type))
  		 || TREE_CODE (right_type) == ARRAY_TYPE)
! 	     && (((TREE_CODE (TREE_TYPE (TREE_OPERAND (right_operand, 0)))
! 		   == RECORD_TYPE)
! 		  && ! (TYPE_LEFT_JUSTIFIED_MODULAR_P
! 			(TREE_TYPE (TREE_OPERAND (right_operand, 0))))
! 		  && ! (TYPE_ALIGN_OK
! 			(TREE_TYPE (TREE_OPERAND (right_operand, 0))))
! 		  && ! (TYPE_IS_FAT_POINTER_P
! 			(TREE_TYPE (TREE_OPERAND (right_operand, 0)))))
  		 || (TREE_CODE (TREE_TYPE (TREE_OPERAND (right_operand, 0)))
  		     == ARRAY_TYPE))
  	     && (0 == (best_type
! 		       == find_common_type (right_type,
! 					    TREE_TYPE (TREE_OPERAND
! 						       (right_operand, 0))))
  		 || right_type != best_type))
  	{
  	  right_operand = TREE_OPERAND (right_operand, 0);
--- 660,687 ----
  	 might indicate a conversion between a root type and a class-wide
  	 type, which we must not remove.  */
        while (TREE_CODE (right_operand) == VIEW_CONVERT_EXPR
! 	     && (((TREE_CODE (right_type) == RECORD_TYPE
! 		   || TREE_CODE (right_type) == UNION_TYPE)
! 		  && !TYPE_JUSTIFIED_MODULAR_P (right_type)
! 		  && !TYPE_ALIGN_OK (right_type)
! 		  && !TYPE_IS_FAT_POINTER_P (right_type))
  		 || TREE_CODE (right_type) == ARRAY_TYPE)
! 	     && ((((TREE_CODE (TREE_TYPE (TREE_OPERAND (right_operand, 0)))
! 		    == RECORD_TYPE)
! 		   || (TREE_CODE (TREE_TYPE (TREE_OPERAND (right_operand, 0)))
! 		       == UNION_TYPE))
! 		  && !(TYPE_JUSTIFIED_MODULAR_P
! 		       (TREE_TYPE (TREE_OPERAND (right_operand, 0))))
! 		  && !(TYPE_ALIGN_OK
! 		       (TREE_TYPE (TREE_OPERAND (right_operand, 0))))
! 		  && !(TYPE_IS_FAT_POINTER_P
! 		       (TREE_TYPE (TREE_OPERAND (right_operand, 0)))))
  		 || (TREE_CODE (TREE_TYPE (TREE_OPERAND (right_operand, 0)))
  		     == ARRAY_TYPE))
  	     && (0 == (best_type
! 		       = find_common_type (right_type,
! 					   TREE_TYPE (TREE_OPERAND
! 					   (right_operand, 0))))
  		 || right_type != best_type))
  	{
  	  right_operand = TREE_OPERAND (right_operand, 0);
*************** build_binary_op (enum tree_code op_code,
*** 731,741 ****
  	    && TREE_CODE (right_type) == ARRAY_TYPE)
  	   || (TREE_CODE (left_type) == RECORD_TYPE
  	       && TREE_CODE (right_type) == RECORD_TYPE))
! 	  && (best_type = find_common_type (left_type, right_type)) != 0)
  	operation_type = best_type;
  
        /* If a class-wide type may be involved, force use of the RHS type.  */
!       if (TREE_CODE (right_type) == RECORD_TYPE && TYPE_ALIGN_OK (right_type))
  	operation_type = right_type;
  
        /* Ensure everything on the LHS is valid.  If we have a field reference,
--- 694,706 ----
  	    && TREE_CODE (right_type) == ARRAY_TYPE)
  	   || (TREE_CODE (left_type) == RECORD_TYPE
  	       && TREE_CODE (right_type) == RECORD_TYPE))
! 	  && (best_type = find_common_type (left_type, right_type)))
  	operation_type = best_type;
  
        /* If a class-wide type may be involved, force use of the RHS type.  */
!       if ((TREE_CODE (right_type) == RECORD_TYPE
! 	   || TREE_CODE (right_type) == UNION_TYPE)
! 	  && TYPE_ALIGN_OK (right_type))
  	operation_type = right_type;
  
        /* Ensure everything on the LHS is valid.  If we have a field reference,
*************** build_binary_op (enum tree_code op_code,
*** 755,761 ****
  	      result = TREE_OPERAND (result, 0);
  	  else if (TREE_CODE (result) == REALPART_EXPR
  		   || TREE_CODE (result) == IMAGPART_EXPR
- 		   || TREE_CODE (result) == WITH_RECORD_EXPR
  		   || ((TREE_CODE (result) == NOP_EXPR
  			|| TREE_CODE (result) == CONVERT_EXPR)
  		       && (((TREE_CODE (restype)
--- 720,725 ----
*************** build_binary_op (enum tree_code op_code,
*** 775,823 ****
  	    break;
  	}
  
!       if (TREE_CODE (result) != INDIRECT_REF && TREE_CODE (result) != NULL_EXPR
! 	  && ! DECL_P (result))
! 	gigi_abort (516);
  
        /* Convert the right operand to the operation type unless
  	 it is either already of the correct type or if the type
  	 involves a placeholder, since the RHS may not have the same
  	 record type.  */
        if (operation_type != right_type
! 	  && (! CONTAINS_PLACEHOLDER_P (TYPE_SIZE (operation_type))))
  	{
! 	  /* For a variable-size type, with both BLKmode, convert using
! 	     CONVERT_EXPR instead of an unchecked conversion since we don't
! 	     need to make a temporary (and can't anyway).  */
! 	  if (TREE_CODE (TYPE_SIZE (operation_type)) != INTEGER_CST
! 	      && TYPE_MODE (TREE_TYPE (right_operand)) == BLKmode
! 	      && TREE_CODE (right_operand) != UNCONSTRAINED_ARRAY_REF)
! 	    right_operand = build1 (CONVERT_EXPR, operation_type,
! 				    right_operand);
! 	  else
! 	    right_operand = convert (operation_type, right_operand);
! 
  	  right_type = operation_type;
  	}
  
!       /* If the modes differ, make up a bogus type and convert the RHS to
! 	 it.  This can happen with packed types.  */
!       if (TYPE_MODE (left_type) != TYPE_MODE (right_type))
! 	{
! 	  tree new_type = copy_node (left_type);
! 
! 	  TYPE_SIZE (new_type) = TYPE_SIZE (right_type);
! 	  TYPE_SIZE_UNIT (new_type) = TYPE_SIZE_UNIT (right_type);
! 	  TYPE_MAIN_VARIANT (new_type) = new_type;
! 	  right_operand = convert (new_type, right_operand);
! 	}
  
!       has_side_effects = 1;
!       modulus = 0;
        break;
  
      case ARRAY_REF:
!       if (operation_type == 0)
  	operation_type = TREE_TYPE (left_type);
  
        /* ... fall through ... */
--- 739,769 ----
  	    break;
  	}
  
!       gcc_assert (TREE_CODE (result) == INDIRECT_REF
! 		  || TREE_CODE (result) == NULL_EXPR || DECL_P (result));
  
        /* Convert the right operand to the operation type unless
  	 it is either already of the correct type or if the type
  	 involves a placeholder, since the RHS may not have the same
  	 record type.  */
        if (operation_type != right_type
! 	  && (!CONTAINS_PLACEHOLDER_P (TYPE_SIZE (operation_type))))
  	{
! 	  right_operand = convert (operation_type, right_operand);
  	  right_type = operation_type;
  	}
  
!       /* If the left operand is not the same type as the operation type,
! 	 surround it in a VIEW_CONVERT_EXPR.  */
!       if (left_type != operation_type)
! 	left_operand = unchecked_convert (operation_type, left_operand, false);
  
!       has_side_effects = true;
!       modulus = NULL_TREE;
        break;
  
      case ARRAY_REF:
!       if (!operation_type)
  	operation_type = TREE_TYPE (left_type);
  
        /* ... fall through ... */
*************** build_binary_op (enum tree_code op_code,
*** 825,848 ****
      case ARRAY_RANGE_REF:
  
        /* First convert the right operand to its base type.  This will
! 	 prevent unneed signedness conversions when sizetype is wider than
  	 integer.  */
        right_operand = convert (right_base_type, right_operand);
        right_operand = convert (TYPE_DOMAIN (left_type), right_operand);
  
!       if (! TREE_CONSTANT (right_operand)
! 	  || ! TREE_CONSTANT (TYPE_MIN_VALUE (right_type)))
  	gnat_mark_addressable (left_operand);
  
!       modulus = 0;
        break;
  
      case GE_EXPR:
      case LE_EXPR:
      case GT_EXPR:
      case LT_EXPR:
!       if (POINTER_TYPE_P (left_type))
! 	gigi_abort (501);
  
        /* ... fall through ... */
  
--- 771,793 ----
      case ARRAY_RANGE_REF:
  
        /* First convert the right operand to its base type.  This will
! 	 prevent unneeded signedness conversions when sizetype is wider than
  	 integer.  */
        right_operand = convert (right_base_type, right_operand);
        right_operand = convert (TYPE_DOMAIN (left_type), right_operand);
  
!       if (!TREE_CONSTANT (right_operand)
! 	  || !TREE_CONSTANT (TYPE_MIN_VALUE (right_type)))
  	gnat_mark_addressable (left_operand);
  
!       modulus = NULL_TREE;
        break;
  
      case GE_EXPR:
      case LE_EXPR:
      case GT_EXPR:
      case LT_EXPR:
!       gcc_assert (!POINTER_TYPE_P (left_type));
  
        /* ... fall through ... */
  
*************** build_binary_op (enum tree_code op_code,
*** 850,870 ****
      case NE_EXPR:
        /* If either operand is a NULL_EXPR, just return a new one.  */
        if (TREE_CODE (left_operand) == NULL_EXPR)
! 	return build (op_code, result_type,
! 		      build1 (NULL_EXPR, integer_type_node,
! 			      TREE_OPERAND (left_operand, 0)),
! 		      integer_zero_node);
  
        else if (TREE_CODE (right_operand) == NULL_EXPR)
! 	return build (op_code, result_type,
! 		      build1 (NULL_EXPR, integer_type_node,
! 			      TREE_OPERAND (right_operand, 0)),
! 		      integer_zero_node);
  
!       /* If either object is a left-justified modular types, get the
  	 fields from within.  */
        if (TREE_CODE (left_type) == RECORD_TYPE
! 	  && TYPE_LEFT_JUSTIFIED_MODULAR_P (left_type))
  	{
  	  left_operand = convert (TREE_TYPE (TYPE_FIELDS (left_type)),
  				  left_operand);
--- 795,815 ----
      case NE_EXPR:
        /* If either operand is a NULL_EXPR, just return a new one.  */
        if (TREE_CODE (left_operand) == NULL_EXPR)
! 	return build2 (op_code, result_type,
! 		       build1 (NULL_EXPR, integer_type_node,
! 			       TREE_OPERAND (left_operand, 0)),
! 		       integer_zero_node);
  
        else if (TREE_CODE (right_operand) == NULL_EXPR)
! 	return build2 (op_code, result_type,
! 		       build1 (NULL_EXPR, integer_type_node,
! 			       TREE_OPERAND (right_operand, 0)),
! 		       integer_zero_node);
  
!       /* If either object is a justified modular types, get the
  	 fields from within.  */
        if (TREE_CODE (left_type) == RECORD_TYPE
! 	  && TYPE_JUSTIFIED_MODULAR_P (left_type))
  	{
  	  left_operand = convert (TREE_TYPE (TYPE_FIELDS (left_type)),
  				  left_operand);
*************** build_binary_op (enum tree_code op_code,
*** 873,879 ****
  	}
  
        if (TREE_CODE (right_type) == RECORD_TYPE
! 	  && TYPE_LEFT_JUSTIFIED_MODULAR_P (right_type))
  	{
  	  right_operand = convert (TREE_TYPE (TYPE_FIELDS (right_type)),
  				  right_operand);
--- 818,824 ----
  	}
  
        if (TREE_CODE (right_type) == RECORD_TYPE
! 	  && TYPE_JUSTIFIED_MODULAR_P (right_type))
  	{
  	  right_operand = convert (TREE_TYPE (TYPE_FIELDS (right_type)),
  				  right_operand);
*************** build_binary_op (enum tree_code op_code,
*** 891,902 ****
  	{
  	  result = compare_arrays (result_type, left_operand, right_operand);
  
! 	  if (op_code == EQ_EXPR)
! 	    ;
! 	  else if (op_code == NE_EXPR)
  	    result = invert_truthvalue (result);
  	  else
! 	    gigi_abort (502);
  
  	  return result;
  	}
--- 836,845 ----
  	{
  	  result = compare_arrays (result_type, left_operand, right_operand);
  
! 	  if (op_code == NE_EXPR)
  	    result = invert_truthvalue (result);
  	  else
! 	    gcc_assert (op_code == EQ_EXPR);
  
  	  return result;
  	}
*************** build_binary_op (enum tree_code op_code,
*** 913,951 ****
  		 types have the same name.  In that case, one of them must
  		 not be self-referential.  Use that one as the best type.
  		 Even better is if one is of fixed size.  */
! 	      best_type = 0;
  
! 	      if (TYPE_NAME (left_base_type) == 0
! 		  || TYPE_NAME (left_base_type) != TYPE_NAME (right_base_type))
! 		gigi_abort (503);
  
  	      if (TREE_CONSTANT (TYPE_SIZE (left_base_type)))
  		best_type = left_base_type;
  	      else if (TREE_CONSTANT (TYPE_SIZE (right_base_type)))
  		best_type = right_base_type;
! 	      else if (! CONTAINS_PLACEHOLDER_P (TYPE_SIZE (left_base_type)))
  		best_type = left_base_type;
! 	      else if (! CONTAINS_PLACEHOLDER_P (TYPE_SIZE (right_base_type)))
  		best_type = right_base_type;
  	      else
! 		gigi_abort (504);
  
  	      left_operand = convert (best_type, left_operand);
  	      right_operand = convert (best_type, right_operand);
  	    }
  	  else
! 	    gigi_abort (505);
  	}
  
        /* If we are comparing a fat pointer against zero, we need to
  	 just compare the data pointer.  */
        else if (TYPE_FAT_POINTER_P (left_base_type)
  	       && TREE_CODE (right_operand) == CONSTRUCTOR
! 	       && integer_zerop (TREE_VALUE (CONSTRUCTOR_ELTS (right_operand))))
  	{
  	  right_operand = build_component_ref (left_operand, NULL_TREE,
  					       TYPE_FIELDS (left_base_type),
! 					       0);
  	  left_operand = convert (TREE_TYPE (right_operand),
  				  integer_zero_node);
  	}
--- 856,895 ----
  		 types have the same name.  In that case, one of them must
  		 not be self-referential.  Use that one as the best type.
  		 Even better is if one is of fixed size.  */
! 	      best_type = NULL_TREE;
  
! 	      gcc_assert (TYPE_NAME (left_base_type)
! 			  && (TYPE_NAME (left_base_type)
! 			      == TYPE_NAME (right_base_type)));
  
  	      if (TREE_CONSTANT (TYPE_SIZE (left_base_type)))
  		best_type = left_base_type;
  	      else if (TREE_CONSTANT (TYPE_SIZE (right_base_type)))
  		best_type = right_base_type;
! 	      else if (!CONTAINS_PLACEHOLDER_P (TYPE_SIZE (left_base_type)))
  		best_type = left_base_type;
! 	      else if (!CONTAINS_PLACEHOLDER_P (TYPE_SIZE (right_base_type)))
  		best_type = right_base_type;
  	      else
! 		gcc_unreachable ();
  
  	      left_operand = convert (best_type, left_operand);
  	      right_operand = convert (best_type, right_operand);
  	    }
  	  else
! 	    gcc_unreachable ();
  	}
  
        /* If we are comparing a fat pointer against zero, we need to
  	 just compare the data pointer.  */
        else if (TYPE_FAT_POINTER_P (left_base_type)
  	       && TREE_CODE (right_operand) == CONSTRUCTOR
! 	       && integer_zerop (TREE_VALUE
! 				 (CONSTRUCTOR_ELTS (right_operand))))
  	{
  	  right_operand = build_component_ref (left_operand, NULL_TREE,
  					       TYPE_FIELDS (left_base_type),
! 					       false);
  	  left_operand = convert (TREE_TYPE (right_operand),
  				  integer_zero_node);
  	}
*************** build_binary_op (enum tree_code op_code,
*** 955,961 ****
  	  right_operand = convert (right_base_type, right_operand);
  	}
  
!       modulus = 0;
        break;
  
      case PREINCREMENT_EXPR:
--- 899,905 ----
  	  right_operand = convert (right_base_type, right_operand);
  	}
  
!       modulus = NULL_TREE;
        break;
  
      case PREINCREMENT_EXPR:
*************** build_binary_op (enum tree_code op_code,
*** 970,983 ****
  	 we guarantee that no overflow can occur.  So nothing special need
  	 be done for modular types.  */
  
!       if (left_type != result_type)
! 	gigi_abort (506);
! 
        operation_type = get_base_type (result_type);
        left_operand = convert (operation_type, left_operand);
        right_operand = convert (operation_type, right_operand);
!       has_side_effects = 1;
!       modulus = 0;
        break;
  
      case LSHIFT_EXPR:
--- 914,925 ----
  	 we guarantee that no overflow can occur.  So nothing special need
  	 be done for modular types.  */
  
!       gcc_assert (left_type == result_type);
        operation_type = get_base_type (result_type);
        left_operand = convert (operation_type, left_operand);
        right_operand = convert (operation_type, right_operand);
!       has_side_effects = true;
!       modulus = NULL_TREE;
        break;
  
      case LSHIFT_EXPR:
*************** build_binary_op (enum tree_code op_code,
*** 987,996 ****
         /* The RHS of a shift can be any type.  Also, ignore any modulus
  	 (we used to abort, but this is needed for unchecked conversion
  	 to modular types).  Otherwise, processing is the same as normal.  */
!       if (operation_type != left_base_type)
! 	gigi_abort (514);
! 
!       modulus = 0;
        left_operand = convert (operation_type, left_operand);
        break;
  
--- 929,936 ----
         /* The RHS of a shift can be any type.  Also, ignore any modulus
  	 (we used to abort, but this is needed for unchecked conversion
  	 to modular types).  Otherwise, processing is the same as normal.  */
!       gcc_assert (operation_type == left_base_type);
!       modulus = NULL_TREE;
        left_operand = convert (operation_type, left_operand);
        break;
  
*************** build_binary_op (enum tree_code op_code,
*** 1008,1023 ****
      case BIT_XOR_EXPR:
        /* For binary modulus, if the inputs are in range, so are the
  	 outputs.  */
!       if (modulus != 0 && integer_pow2p (modulus))
! 	modulus = 0;
  
        goto common;
  
      case COMPLEX_EXPR:
!       if (TREE_TYPE (result_type) != left_base_type
! 	  || TREE_TYPE (result_type) != right_base_type)
! 	gigi_abort (515);
! 
        left_operand = convert (left_base_type, left_operand);
        right_operand = convert (right_base_type, right_operand);
        break;
--- 948,961 ----
      case BIT_XOR_EXPR:
        /* For binary modulus, if the inputs are in range, so are the
  	 outputs.  */
!       if (modulus && integer_pow2p (modulus))
! 	modulus = NULL_TREE;
  
        goto common;
  
      case COMPLEX_EXPR:
!       gcc_assert (TREE_TYPE (result_type) == left_base_type
! 		  && TREE_TYPE (result_type) == right_base_type);
        left_operand = convert (left_base_type, left_operand);
        right_operand = convert (right_base_type, right_operand);
        break;
*************** build_binary_op (enum tree_code op_code,
*** 1027,1033 ****
      case FLOOR_DIV_EXPR:   case FLOOR_MOD_EXPR:
      case ROUND_DIV_EXPR:   case ROUND_MOD_EXPR:
        /* These always produce results lower than either operand.  */
!       modulus = 0;
        goto common;
  
      default:
--- 965,971 ----
      case FLOOR_DIV_EXPR:   case FLOOR_MOD_EXPR:
      case ROUND_DIV_EXPR:   case ROUND_MOD_EXPR:
        /* These always produce results lower than either operand.  */
!       modulus = NULL_TREE;
        goto common;
  
      default:
*************** build_binary_op (enum tree_code op_code,
*** 1036,1063 ****
  	 both operands (and they should be the same).  Convert
  	 everything to the result type.  */
  
!       if (operation_type != left_base_type
! 	  || left_base_type != right_base_type)
! 	gigi_abort (507);
! 
        left_operand = convert (operation_type, left_operand);
        right_operand = convert (operation_type, right_operand);
      }
  
!   if (modulus != 0 && ! integer_pow2p (modulus))
      {
        result = nonbinary_modular_operation (op_code, operation_type,
  					    left_operand, right_operand);
!       modulus = 0;
      }
    /* If either operand is a NULL_EXPR, just return a new one.  */
    else if (TREE_CODE (left_operand) == NULL_EXPR)
      return build1 (NULL_EXPR, operation_type, TREE_OPERAND (left_operand, 0));
    else if (TREE_CODE (right_operand) == NULL_EXPR)
      return build1 (NULL_EXPR, operation_type, TREE_OPERAND (right_operand, 0));
    else
!     result = fold (build (op_code, operation_type,
! 			  left_operand, right_operand));
  
    TREE_SIDE_EFFECTS (result) |= has_side_effects;
    TREE_CONSTANT (result)
--- 974,1002 ----
  	 both operands (and they should be the same).  Convert
  	 everything to the result type.  */
  
!       gcc_assert (operation_type == left_base_type
! 		  && left_base_type == right_base_type);
        left_operand = convert (operation_type, left_operand);
        right_operand = convert (operation_type, right_operand);
      }
  
!   if (modulus && !integer_pow2p (modulus))
      {
        result = nonbinary_modular_operation (op_code, operation_type,
  					    left_operand, right_operand);
!       modulus = NULL_TREE;
      }
    /* If either operand is a NULL_EXPR, just return a new one.  */
    else if (TREE_CODE (left_operand) == NULL_EXPR)
      return build1 (NULL_EXPR, operation_type, TREE_OPERAND (left_operand, 0));
    else if (TREE_CODE (right_operand) == NULL_EXPR)
      return build1 (NULL_EXPR, operation_type, TREE_OPERAND (right_operand, 0));
+   else if (op_code == ARRAY_REF || op_code == ARRAY_RANGE_REF)
+     result = fold (build4 (op_code, operation_type, left_operand,
+ 			   right_operand, NULL_TREE, NULL_TREE));
    else
!     result
!       = fold (build2 (op_code, operation_type, left_operand, right_operand));
  
    TREE_SIDE_EFFECTS (result) |= has_side_effects;
    TREE_CONSTANT (result)
*************** build_binary_op (enum tree_code op_code,
*** 1070,1080 ****
  
    /* If we are working with modular types, perform the MOD operation
       if something above hasn't eliminated the need for it.  */
!   if (modulus != 0)
!     result = fold (build (FLOOR_MOD_EXPR, operation_type, result,
! 			  convert (operation_type, modulus)));
  
!   if (result_type != 0 && result_type != operation_type)
      result = convert (result_type, result);
  
    return result;
--- 1009,1019 ----
  
    /* If we are working with modular types, perform the MOD operation
       if something above hasn't eliminated the need for it.  */
!   if (modulus)
!     result = fold (build2 (FLOOR_MOD_EXPR, operation_type, result,
! 			   convert (operation_type, modulus)));
  
!   if (result_type && result_type != operation_type)
      result = convert (result_type, result);
  
    return result;
*************** build_unary_op (enum tree_code op_code, 
*** 1089,1114 ****
    tree base_type = get_base_type (type);
    tree operation_type = result_type;
    tree result;
!   int side_effects = 0;
! 
!   /* If we have a WITH_RECORD_EXPR as our operand, do the operation first,
!      then surround it with the WITH_RECORD_EXPR.  This allows GCC to do better
!      expression folding.  */
!   if (TREE_CODE (operand) == WITH_RECORD_EXPR)
!     {
!       result = build_unary_op (op_code, result_type,
! 			       TREE_OPERAND (operand, 0));
!       return build (WITH_RECORD_EXPR, TREE_TYPE (result), result,
! 		    TREE_OPERAND (operand, 1));
!     }
  
!   if (operation_type != 0
        && TREE_CODE (operation_type) == RECORD_TYPE
!       && TYPE_LEFT_JUSTIFIED_MODULAR_P (operation_type))
      operation_type = TREE_TYPE (TYPE_FIELDS (operation_type));
  
!   if (operation_type != 0
!       && ! AGGREGATE_TYPE_P (operation_type)
        && TYPE_EXTRA_SUBTYPE_P (operation_type))
      operation_type = get_base_type (operation_type);
  
--- 1028,1042 ----
    tree base_type = get_base_type (type);
    tree operation_type = result_type;
    tree result;
!   bool side_effects = false;
  
!   if (operation_type
        && TREE_CODE (operation_type) == RECORD_TYPE
!       && TYPE_JUSTIFIED_MODULAR_P (operation_type))
      operation_type = TREE_TYPE (TYPE_FIELDS (operation_type));
  
!   if (operation_type
!       && !AGGREGATE_TYPE_P (operation_type)
        && TYPE_EXTRA_SUBTYPE_P (operation_type))
      operation_type = get_base_type (operation_type);
  
*************** build_unary_op (enum tree_code op_code, 
*** 1116,1133 ****
      {
      case REALPART_EXPR:
      case IMAGPART_EXPR:
!       if (operation_type == 0)
  	result_type = operation_type = TREE_TYPE (type);
!       else if (result_type != TREE_TYPE (type))
! 	gigi_abort (513);
  
        result = fold (build1 (op_code, operation_type, operand));
        break;
  
      case TRUTH_NOT_EXPR:
!       if (result_type != base_type)
! 	gigi_abort (508);
! 
        result = invert_truthvalue (gnat_truthvalue_conversion (operand));
        break;
  
--- 1044,1059 ----
      {
      case REALPART_EXPR:
      case IMAGPART_EXPR:
!       if (!operation_type)
  	result_type = operation_type = TREE_TYPE (type);
!       else
! 	gcc_assert (result_type == TREE_TYPE (type));
  
        result = fold (build1 (op_code, operation_type, operand));
        break;
  
      case TRUTH_NOT_EXPR:
!       gcc_assert (result_type == base_type);
        result = invert_truthvalue (gnat_truthvalue_conversion (operand));
        break;
  
*************** build_unary_op (enum tree_code op_code, 
*** 1141,1147 ****
  
  	  /* Make sure the type here is a pointer, not a reference.
  	     GCC wants pointer types for function addresses.  */
! 	  if (result_type == 0)
  	    result_type = build_pointer_type (type);
  	  break;
  
--- 1067,1073 ----
  
  	  /* Make sure the type here is a pointer, not a reference.
  	     GCC wants pointer types for function addresses.  */
! 	  if (!result_type)
  	    result_type = build_pointer_type (type);
  	  break;
  
*************** build_unary_op (enum tree_code op_code, 
*** 1166,1172 ****
  	      int unsignedp, volatilep;
  
  	      inner = get_inner_reference (operand, &bitsize, &bitpos, &offset,
! 					   &mode, &unsignedp, &volatilep);
  
  	      /* If INNER is a padding type whose field has a self-referential
  		 size, convert to that inner type.  We know the offset is zero
--- 1092,1099 ----
  	      int unsignedp, volatilep;
  
  	      inner = get_inner_reference (operand, &bitsize, &bitpos, &offset,
! 					   &mode, &unsignedp, &volatilep,
! 					   false);
  
  	      /* If INNER is a padding type whose field has a self-referential
  		 size, convert to that inner type.  We know the offset is zero
*************** build_unary_op (enum tree_code op_code, 
*** 1180,1186 ****
  				 inner);
  
  	      /* Compute the offset as a byte offset from INNER.  */
! 	      if (offset == 0)
  		offset = size_zero_node;
  
  	      if (bitpos % BITS_PER_UNIT != 0)
--- 1107,1113 ----
  				 inner);
  
  	      /* Compute the offset as a byte offset from INNER.  */
! 	      if (!offset)
  		offset = size_zero_node;
  
  	      if (bitpos % BITS_PER_UNIT != 0)
*************** build_unary_op (enum tree_code op_code, 
*** 1234,1242 ****
  	      && (TYPE_MODE (type)
  		  == TYPE_MODE (TREE_TYPE (TREE_OPERAND (operand, 0)))))
  	    return build_unary_op (ADDR_EXPR,
! 				   (result_type == 0
! 				    ? build_pointer_type (type)
! 				    : result_type),
  				   TREE_OPERAND (operand, 0));
  	  goto common;
  
--- 1161,1168 ----
  	      && (TYPE_MODE (type)
  		  == TYPE_MODE (TREE_TYPE (TREE_OPERAND (operand, 0)))))
  	    return build_unary_op (ADDR_EXPR,
! 				   (result_type ? result_type
! 				    : build_pointer_type (type)),
  				   TREE_OPERAND (operand, 0));
  	  goto common;
  
*************** build_unary_op (enum tree_code op_code, 
*** 1275,1281 ****
  	 the backend.  If TYPE is a thin pointer, first convert the
  	 operand to a fat pointer.  */
        if (TYPE_THIN_POINTER_P (type)
! 	  && TYPE_UNCONSTRAINED_ARRAY (TREE_TYPE (type)) != 0)
  	{
  	  operand
  	    = convert (TREE_TYPE (TYPE_UNCONSTRAINED_ARRAY (TREE_TYPE (type))),
--- 1201,1207 ----
  	 the backend.  If TYPE is a thin pointer, first convert the
  	 operand to a fat pointer.  */
        if (TYPE_THIN_POINTER_P (type)
! 	  && TYPE_UNCONSTRAINED_ARRAY (TREE_TYPE (type)))
  	{
  	  operand
  	    = convert (TREE_TYPE (TYPE_UNCONSTRAINED_ARRAY (TREE_TYPE (type))),
*************** build_unary_op (enum tree_code op_code, 
*** 1284,1356 ****
  	}
  
        if (TYPE_FAT_POINTER_P (type))
! 	result = build1 (UNCONSTRAINED_ARRAY_REF,
! 			 TYPE_UNCONSTRAINED_ARRAY (type), operand);
! 
        else if (TREE_CODE (operand) == ADDR_EXPR)
  	result = TREE_OPERAND (operand, 0);
  
        else
  	{
  	  result = fold (build1 (op_code, TREE_TYPE (type), operand));
! 	  TREE_READONLY (result) = TREE_READONLY (TREE_TYPE (type));
  	}
  
        side_effects
! 	=  (! TYPE_FAT_POINTER_P (type) && TYPE_VOLATILE (TREE_TYPE (type)));
        break;
  
      case NEGATE_EXPR:
      case BIT_NOT_EXPR:
        {
! 	tree modulus = ((operation_type != 0
  			 && TREE_CODE (operation_type) == INTEGER_TYPE
  			 && TYPE_MODULAR_P (operation_type))
  			? TYPE_MODULUS (operation_type) : 0);
! 	int mod_pow2 = modulus != 0 && integer_pow2p (modulus);
  
  	/* If this is a modular type, there are various possibilities
  	   depending on the operation and whether the modulus is a
  	   power of two or not.  */
  
! 	if (modulus != 0)
  	  {
! 	    if (operation_type != base_type)
! 	      gigi_abort (509);
! 
  	    operand = convert (operation_type, operand);
  
  	    /* The fastest in the negate case for binary modulus is
  	       the straightforward code; the TRUNC_MOD_EXPR below
  	       is an AND operation.  */
  	    if (op_code == NEGATE_EXPR && mod_pow2)
! 	      result = fold (build (TRUNC_MOD_EXPR, operation_type,
! 				    fold (build1 (NEGATE_EXPR, operation_type,
! 						  operand)),
! 				    modulus));
  
  	    /* For nonbinary negate case, return zero for zero operand,
  	       else return the modulus minus the operand.  If the modulus
  	       is a power of two minus one, we can do the subtraction
  	       as an XOR since it is equivalent and faster on most machines. */
! 	    else if (op_code == NEGATE_EXPR && ! mod_pow2)
  	      {
! 		if (integer_pow2p (fold (build (PLUS_EXPR, operation_type,
! 						modulus,
! 						convert (operation_type,
! 							 integer_one_node)))))
! 		  result = fold (build (BIT_XOR_EXPR, operation_type,
! 					operand, modulus));
  		else
! 		  result = fold (build (MINUS_EXPR, operation_type,
  					modulus, operand));
  
! 		result = fold (build (COND_EXPR, operation_type,
! 				      fold (build (NE_EXPR, integer_type_node,
! 						   operand,
! 						   convert (operation_type,
! 							    integer_zero_node))),
! 				      result, operand));
  	      }
  	    else
  	      {
--- 1210,1285 ----
  	}
  
        if (TYPE_FAT_POINTER_P (type))
! 	{
! 	  result = build1 (UNCONSTRAINED_ARRAY_REF,
! 			   TYPE_UNCONSTRAINED_ARRAY (type), operand);
! 	  TREE_READONLY (result) = TREE_STATIC (result)
! 	    = TYPE_READONLY (TYPE_UNCONSTRAINED_ARRAY (type));
! 	}
        else if (TREE_CODE (operand) == ADDR_EXPR)
  	result = TREE_OPERAND (operand, 0);
  
        else
  	{
  	  result = fold (build1 (op_code, TREE_TYPE (type), operand));
! 	  TREE_READONLY (result) = TYPE_READONLY (TREE_TYPE (type));
  	}
  
        side_effects
! 	=  (!TYPE_FAT_POINTER_P (type) && TYPE_VOLATILE (TREE_TYPE (type)));
        break;
  
      case NEGATE_EXPR:
      case BIT_NOT_EXPR:
        {
! 	tree modulus = ((operation_type
  			 && TREE_CODE (operation_type) == INTEGER_TYPE
  			 && TYPE_MODULAR_P (operation_type))
  			? TYPE_MODULUS (operation_type) : 0);
! 	int mod_pow2 = modulus && integer_pow2p (modulus);
  
  	/* If this is a modular type, there are various possibilities
  	   depending on the operation and whether the modulus is a
  	   power of two or not.  */
  
! 	if (modulus)
  	  {
! 	    gcc_assert (operation_type == base_type);
  	    operand = convert (operation_type, operand);
  
  	    /* The fastest in the negate case for binary modulus is
  	       the straightforward code; the TRUNC_MOD_EXPR below
  	       is an AND operation.  */
  	    if (op_code == NEGATE_EXPR && mod_pow2)
! 	      result = fold (build2 (TRUNC_MOD_EXPR, operation_type,
! 				     fold (build1 (NEGATE_EXPR, operation_type,
! 						   operand)),
! 				     modulus));
  
  	    /* For nonbinary negate case, return zero for zero operand,
  	       else return the modulus minus the operand.  If the modulus
  	       is a power of two minus one, we can do the subtraction
  	       as an XOR since it is equivalent and faster on most machines. */
! 	    else if (op_code == NEGATE_EXPR && !mod_pow2)
  	      {
! 		if (integer_pow2p (fold (build2 (PLUS_EXPR, operation_type,
! 						 modulus,
! 						 convert (operation_type,
! 							  integer_one_node)))))
! 		  result = fold (build2 (BIT_XOR_EXPR, operation_type,
! 					 operand, modulus));
  		else
! 		  result = fold (build2 (MINUS_EXPR, operation_type,
  					modulus, operand));
  
! 		result = fold (build3 (COND_EXPR, operation_type,
! 				       fold (build2 (NE_EXPR,
! 						     integer_type_node,
! 						     operand,
! 						     convert
! 						     (operation_type,
! 						      integer_zero_node))),
! 				       result, operand));
  	      }
  	    else
  	      {
*************** build_unary_op (enum tree_code op_code, 
*** 1359,1374 ****
  		   XOR against the constant and subtract the operand from
  		   that constant for nonbinary modulus.  */
  
! 		tree cnst = fold (build (MINUS_EXPR, operation_type, modulus,
! 					 convert (operation_type,
! 						  integer_one_node)));
  
  		if (mod_pow2)
! 		  result = fold (build (BIT_XOR_EXPR, operation_type,
! 					operand, cnst));
  		else
! 		  result = fold (build (MINUS_EXPR, operation_type,
! 					cnst, operand));
  	      }
  
  	    break;
--- 1288,1303 ----
  		   XOR against the constant and subtract the operand from
  		   that constant for nonbinary modulus.  */
  
! 		tree cnst = fold (build2 (MINUS_EXPR, operation_type, modulus,
! 					  convert (operation_type,
! 						   integer_one_node)));
  
  		if (mod_pow2)
! 		  result = fold (build2 (BIT_XOR_EXPR, operation_type,
! 					 operand, cnst));
  		else
! 		  result = fold (build2 (MINUS_EXPR, operation_type,
! 					 cnst, operand));
  	      }
  
  	    break;
*************** build_unary_op (enum tree_code op_code, 
*** 1378,1386 ****
        /* ... fall through ... */
  
      default:
!       if (operation_type != base_type)
! 	gigi_abort (509);
! 
        result = fold (build1 (op_code, operation_type, convert (operation_type,
  							       operand)));
      }
--- 1307,1313 ----
        /* ... fall through ... */
  
      default:
!       gcc_assert (operation_type == base_type);
        result = fold (build1 (op_code, operation_type, convert (operation_type,
  							       operand)));
      }
*************** build_unary_op (enum tree_code op_code, 
*** 1392,1398 ****
  	TREE_THIS_VOLATILE (result) = TYPE_VOLATILE (TREE_TYPE (result));
      }
  
!   if (result_type != 0 && TREE_TYPE (result) != result_type)
      result = convert (result_type, result);
  
    return result;
--- 1319,1325 ----
  	TREE_THIS_VOLATILE (result) = TYPE_VOLATILE (TREE_TYPE (result));
      }
  
!   if (result_type && TREE_TYPE (result) != result_type)
      result = convert (result_type, result);
  
    return result;
*************** build_unary_op (enum tree_code op_code, 
*** 1401,1434 ****
  /* Similar, but for COND_EXPR.  */
  
  tree
! build_cond_expr (tree result_type,
!                  tree condition_operand,
!                  tree true_operand,
!                  tree false_operand)
  {
    tree result;
!   int addr_p = 0;
  
!   /* Front-end verifies that result, true and false operands have same base
!      type. Convert everything to the result type.  */
  
    true_operand  = convert (result_type, true_operand);
    false_operand = convert (result_type, false_operand);
  
    /* If the result type is unconstrained, take the address of
       the operands and then dereference our result.  */
- 
    if (TREE_CODE (result_type) == UNCONSTRAINED_ARRAY_TYPE
        || CONTAINS_PLACEHOLDER_P (TYPE_SIZE (result_type)))
      {
!       addr_p = 1;
        result_type = build_pointer_type (result_type);
        true_operand = build_unary_op (ADDR_EXPR, result_type, true_operand);
        false_operand = build_unary_op (ADDR_EXPR, result_type, false_operand);
      }
  
!   result = fold (build (COND_EXPR, result_type, condition_operand,
! 			true_operand, false_operand));
  
    /* If either operand is a SAVE_EXPR (possibly surrounded by
       arithmetic, make sure it gets done.  */
--- 1328,1358 ----
  /* Similar, but for COND_EXPR.  */
  
  tree
! build_cond_expr (tree result_type, tree condition_operand,
!                  tree true_operand, tree false_operand)
  {
    tree result;
!   bool addr_p = false;
  
!   /* The front-end verifies that result, true and false operands have same base
!      type.  Convert everything to the result type.  */
  
    true_operand  = convert (result_type, true_operand);
    false_operand = convert (result_type, false_operand);
  
    /* If the result type is unconstrained, take the address of
       the operands and then dereference our result.  */
    if (TREE_CODE (result_type) == UNCONSTRAINED_ARRAY_TYPE
        || CONTAINS_PLACEHOLDER_P (TYPE_SIZE (result_type)))
      {
!       addr_p = true;
        result_type = build_pointer_type (result_type);
        true_operand = build_unary_op (ADDR_EXPR, result_type, true_operand);
        false_operand = build_unary_op (ADDR_EXPR, result_type, false_operand);
      }
  
!   result = fold (build3 (COND_EXPR, result_type, condition_operand,
! 			 true_operand, false_operand));
  
    /* If either operand is a SAVE_EXPR (possibly surrounded by
       arithmetic, make sure it gets done.  */
*************** build_cond_expr (tree result_type,
*** 1436,1445 ****
    false_operand = skip_simple_arithmetic (false_operand);
  
    if (TREE_CODE (true_operand) == SAVE_EXPR)
!     result = build (COMPOUND_EXPR, result_type, true_operand, result);
  
    if (TREE_CODE (false_operand) == SAVE_EXPR)
!     result = build (COMPOUND_EXPR, result_type, false_operand, result);
  
    /* ??? Seems the code above is wrong, as it may move ahead of the COND
       SAVE_EXPRs with side effects and not shared by both arms.  */
--- 1360,1369 ----
    false_operand = skip_simple_arithmetic (false_operand);
  
    if (TREE_CODE (true_operand) == SAVE_EXPR)
!     result = build2 (COMPOUND_EXPR, result_type, true_operand, result);
  
    if (TREE_CODE (false_operand) == SAVE_EXPR)
!     result = build2 (COMPOUND_EXPR, result_type, false_operand, result);
  
    /* ??? Seems the code above is wrong, as it may move ahead of the COND
       SAVE_EXPRs with side effects and not shared by both arms.  */
*************** build_cond_expr (tree result_type,
*** 1457,1466 ****
  tree
  build_call_1_expr (tree fundecl, tree arg)
  {
!   tree call = build (CALL_EXPR, TREE_TYPE (TREE_TYPE (fundecl)),
! 		     build_unary_op (ADDR_EXPR, NULL_TREE, fundecl),
! 		     chainon (NULL_TREE, build_tree_list (NULL_TREE, arg)),
! 		     NULL_TREE);
  
    TREE_SIDE_EFFECTS (call) = 1;
  
--- 1381,1390 ----
  tree
  build_call_1_expr (tree fundecl, tree arg)
  {
!   tree call = build3 (CALL_EXPR, TREE_TYPE (TREE_TYPE (fundecl)),
! 		      build_unary_op (ADDR_EXPR, NULL_TREE, fundecl),
! 		      chainon (NULL_TREE, build_tree_list (NULL_TREE, arg)),
! 		      NULL_TREE);
  
    TREE_SIDE_EFFECTS (call) = 1;
  
*************** build_call_1_expr (tree fundecl, tree ar
*** 1473,1483 ****
  tree
  build_call_2_expr (tree fundecl, tree arg1, tree arg2)
  {
!   tree call = build (CALL_EXPR, TREE_TYPE (TREE_TYPE (fundecl)),
! 		     build_unary_op (ADDR_EXPR, NULL_TREE, fundecl),
! 		     chainon (chainon (NULL_TREE,
! 				       build_tree_list (NULL_TREE, arg1)),
! 			      build_tree_list (NULL_TREE, arg2)),
  		     NULL_TREE);
  
    TREE_SIDE_EFFECTS (call) = 1;
--- 1397,1407 ----
  tree
  build_call_2_expr (tree fundecl, tree arg1, tree arg2)
  {
!   tree call = build3 (CALL_EXPR, TREE_TYPE (TREE_TYPE (fundecl)),
! 		      build_unary_op (ADDR_EXPR, NULL_TREE, fundecl),
! 		      chainon (chainon (NULL_TREE,
! 					build_tree_list (NULL_TREE, arg1)),
! 			       build_tree_list (NULL_TREE, arg2)),
  		     NULL_TREE);
  
    TREE_SIDE_EFFECTS (call) = 1;
*************** build_call_2_expr (tree fundecl, tree ar
*** 1490,1498 ****
  tree
  build_call_0_expr (tree fundecl)
  {
!   tree call = build (CALL_EXPR, TREE_TYPE (TREE_TYPE (fundecl)),
! 		     build_unary_op (ADDR_EXPR, NULL_TREE, fundecl),
! 		     NULL_TREE, NULL_TREE);
  
    TREE_SIDE_EFFECTS (call) = 1;
  
--- 1414,1422 ----
  tree
  build_call_0_expr (tree fundecl)
  {
!   tree call = build3 (CALL_EXPR, TREE_TYPE (TREE_TYPE (fundecl)),
! 		      build_unary_op (ADDR_EXPR, NULL_TREE, fundecl),
! 		      NULL_TREE, NULL_TREE);
  
    TREE_SIDE_EFFECTS (call) = 1;
  
*************** tree
*** 1506,1524 ****
  build_call_raise (int msg)
  {
    tree fndecl = gnat_raise_decls[msg];
!   const char *str = discard_file_names ? "" : ref_filename;
    int len = strlen (str) + 1;
    tree filename = build_string (len, str);
  
    TREE_TYPE (filename)
      = build_array_type (char_type_node,
! 			build_index_type (build_int_2 (len, 0)));
  
    return
      build_call_2_expr (fndecl,
  		       build1 (ADDR_EXPR, build_pointer_type (char_type_node),
  			       filename),
! 		       build_int_2 (input_line, 0));
  }
  
  /* Return a CONSTRUCTOR of TYPE whose list is LIST.  */
--- 1430,1448 ----
  build_call_raise (int msg)
  {
    tree fndecl = gnat_raise_decls[msg];
!   const char *str = Debug_Flag_NN ? "" : ref_filename;
    int len = strlen (str) + 1;
    tree filename = build_string (len, str);
  
    TREE_TYPE (filename)
      = build_array_type (char_type_node,
! 			build_index_type (build_int_cst (NULL_TREE, len)));
  
    return
      build_call_2_expr (fndecl,
  		       build1 (ADDR_EXPR, build_pointer_type (char_type_node),
  			       filename),
! 		       build_int_cst (NULL_TREE, input_line));
  }
  
  /* Return a CONSTRUCTOR of TYPE whose list is LIST.  */
*************** tree
*** 1527,1548 ****
  gnat_build_constructor (tree type, tree list)
  {
    tree elmt;
!   int allconstant = (TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST);
!   int side_effects = 0;
    tree result;
  
    for (elmt = list; elmt; elmt = TREE_CHAIN (elmt))
      {
!       if (! TREE_CONSTANT (TREE_VALUE (elmt))
  	  || (TREE_CODE (type) == RECORD_TYPE
  	      && DECL_BIT_FIELD (TREE_PURPOSE (elmt))
  	      && TREE_CODE (TREE_VALUE (elmt)) != INTEGER_CST)
! 	  || ! initializer_constant_valid_p (TREE_VALUE (elmt),
! 					     TREE_TYPE (TREE_VALUE (elmt))))
! 	allconstant = 0;
  
        if (TREE_SIDE_EFFECTS (TREE_VALUE (elmt)))
! 	side_effects = 1;
  
        /* Propagate an NULL_EXPR from the size of the type.  We won't ever
  	 be executing the code we generate here in that case, but handle it
--- 1451,1472 ----
  gnat_build_constructor (tree type, tree list)
  {
    tree elmt;
!   bool allconstant = (TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST);
!   bool side_effects = false;
    tree result;
  
    for (elmt = list; elmt; elmt = TREE_CHAIN (elmt))
      {
!       if (!TREE_CONSTANT (TREE_VALUE (elmt))
  	  || (TREE_CODE (type) == RECORD_TYPE
  	      && DECL_BIT_FIELD (TREE_PURPOSE (elmt))
  	      && TREE_CODE (TREE_VALUE (elmt)) != INTEGER_CST)
! 	  || !initializer_constant_valid_p (TREE_VALUE (elmt),
! 					    TREE_TYPE (TREE_VALUE (elmt))))
! 	allconstant = false;
  
        if (TREE_SIDE_EFFECTS (TREE_VALUE (elmt)))
! 	side_effects = true;
  
        /* Propagate an NULL_EXPR from the size of the type.  We won't ever
  	 be executing the code we generate here in that case, but handle it
*************** gnat_build_constructor (tree type, tree 
*** 1568,1574 ****
  	  if (TREE_CODE (this_pos) != INTEGER_CST
  	      || tree_int_cst_lt (this_pos, last_pos))
  	    {
! 	      allconstant = 0;
  	      break;
  	    }
  
--- 1492,1498 ----
  	  if (TREE_CODE (this_pos) != INTEGER_CST
  	      || tree_int_cst_lt (this_pos, last_pos))
  	    {
! 	      allconstant = false;
  	      break;
  	    }
  
*************** gnat_build_constructor (tree type, tree 
*** 1577,1626 ****
      }
  
    result = build_constructor (type, list);
!   TREE_CONSTANT (result) = allconstant;
!   TREE_STATIC (result) = allconstant;
    TREE_SIDE_EFFECTS (result) = side_effects;
!   TREE_READONLY (result) = TREE_READONLY (type);
! 
    return result;
  }
  
  /* Return a COMPONENT_REF to access a field that is given by COMPONENT,
     an IDENTIFIER_NODE giving the name of the field, or FIELD, a FIELD_DECL,
!    for the field.  Don't fold the result if NO_FOLD_P is nonzero.
  
     We also handle the fact that we might have been passed a pointer to the
     actual record and know how to look for fields in variant parts.  */
  
  static tree
! build_simple_component_ref (tree record_variable,
!                             tree component,
!                             tree field,
!                             int no_fold_p)
  {
    tree record_type = TYPE_MAIN_VARIANT (TREE_TYPE (record_variable));
    tree ref;
  
!   if ((TREE_CODE (record_type) != RECORD_TYPE
!        && TREE_CODE (record_type) != UNION_TYPE
!        && TREE_CODE (record_type) != QUAL_UNION_TYPE)
!       || TYPE_SIZE (record_type) == 0)
!     gigi_abort (510);
! 
!   /* Either COMPONENT or FIELD must be specified, but not both.  */
!   if ((component != 0) == (field != 0))
!     gigi_abort (511);
  
    /* If no field was specified, look for a field with the specified name
       in the current record only.  */
!   if (field == 0)
      for (field = TYPE_FIELDS (record_type); field;
  	 field = TREE_CHAIN (field))
        if (DECL_NAME (field) == component)
  	break;
  
!   if (field == 0)
!     return 0;
  
    /* If this field is not in the specified record, see if we can find
       something in the record whose original field is the same as this one. */
--- 1501,1543 ----
      }
  
    result = build_constructor (type, list);
!   TREE_CONSTANT (result) = TREE_INVARIANT (result)
!     = TREE_STATIC (result) = allconstant;
    TREE_SIDE_EFFECTS (result) = side_effects;
!   TREE_READONLY (result) = TYPE_READONLY (type) || allconstant;
    return result;
  }
  
  /* Return a COMPONENT_REF to access a field that is given by COMPONENT,
     an IDENTIFIER_NODE giving the name of the field, or FIELD, a FIELD_DECL,
!    for the field.  Don't fold the result if NO_FOLD_P is true.
  
     We also handle the fact that we might have been passed a pointer to the
     actual record and know how to look for fields in variant parts.  */
  
  static tree
! build_simple_component_ref (tree record_variable, tree component,
!                             tree field, bool no_fold_p)
  {
    tree record_type = TYPE_MAIN_VARIANT (TREE_TYPE (record_variable));
    tree ref;
  
!   gcc_assert ((TREE_CODE (record_type) == RECORD_TYPE
! 	       || TREE_CODE (record_type) == UNION_TYPE
! 	       || TREE_CODE (record_type) == QUAL_UNION_TYPE)
! 	      && TYPE_SIZE (record_type)
! 	      && (component != 0) != (field != 0));
  
    /* If no field was specified, look for a field with the specified name
       in the current record only.  */
!   if (!field)
      for (field = TYPE_FIELDS (record_type); field;
  	 field = TREE_CHAIN (field))
        if (DECL_NAME (field) == component)
  	break;
  
!   if (!field)
!     return NULL_TREE;
  
    /* If this field is not in the specified record, see if we can find
       something in the record whose original field is the same as this one. */
*************** build_simple_component_ref (tree record_
*** 1631,1641 ****
  
        /* First loop thru normal components.  */
  
!       for (new_field = TYPE_FIELDS (record_type); new_field != 0;
  	   new_field = TREE_CHAIN (new_field))
  	if (DECL_ORIGINAL_FIELD (new_field) == field
  	    || new_field == DECL_ORIGINAL_FIELD (field)
! 	    || (DECL_ORIGINAL_FIELD (field) != 0
  		&& (DECL_ORIGINAL_FIELD (field)
  		    == DECL_ORIGINAL_FIELD (new_field))))
  	  break;
--- 1548,1558 ----
  
        /* First loop thru normal components.  */
  
!       for (new_field = TYPE_FIELDS (record_type); new_field;
  	   new_field = TREE_CHAIN (new_field))
  	if (DECL_ORIGINAL_FIELD (new_field) == field
  	    || new_field == DECL_ORIGINAL_FIELD (field)
! 	    || (DECL_ORIGINAL_FIELD (field)
  		&& (DECL_ORIGINAL_FIELD (field)
  		    == DECL_ORIGINAL_FIELD (new_field))))
  	  break;
*************** build_simple_component_ref (tree record_
*** 1645,1652 ****
           is required to avoiding hidden homonymous fields in the
           _Parent field.  */
  
!       if (new_field == 0)
! 	for (new_field = TYPE_FIELDS (record_type); new_field != 0;
  	     new_field = TREE_CHAIN (new_field))
  	  if (DECL_INTERNAL_P (new_field))
  	    {
--- 1562,1569 ----
           is required to avoiding hidden homonymous fields in the
           _Parent field.  */
  
!       if (!new_field)
! 	for (new_field = TYPE_FIELDS (record_type); new_field;
  	     new_field = TREE_CHAIN (new_field))
  	  if (DECL_INTERNAL_P (new_field))
  	    {
*************** build_simple_component_ref (tree record_
*** 1656,1674 ****
  	      ref = build_simple_component_ref (field_ref, NULL_TREE, field,
  						no_fold_p);
  
! 	      if (ref != 0)
  		return ref;
  	    }
  
        field = new_field;
      }
  
!   if (field == 0)
!     return 0;
  
    /* It would be nice to call "fold" here, but that can lose a type
       we need to tag a PLACEHOLDER_EXPR with, so we can't do it.  */
!   ref = build (COMPONENT_REF, TREE_TYPE (field), record_variable, field);
  
    if (TREE_READONLY (record_variable) || TREE_READONLY (field))
      TREE_READONLY (ref) = 1;
--- 1573,1592 ----
  	      ref = build_simple_component_ref (field_ref, NULL_TREE, field,
  						no_fold_p);
  
! 	      if (ref)
  		return ref;
  	    }
  
        field = new_field;
      }
  
!   if (!field)
!     return NULL_TREE;
  
    /* It would be nice to call "fold" here, but that can lose a type
       we need to tag a PLACEHOLDER_EXPR with, so we can't do it.  */
!   ref = build3 (COMPONENT_REF, TREE_TYPE (field), record_variable, field,
! 		NULL_TREE);
  
    if (TREE_READONLY (record_variable) || TREE_READONLY (field))
      TREE_READONLY (ref) = 1;
*************** build_simple_component_ref (tree record_
*** 1683,1708 ****
     reference could not be found.  */
  
  tree
! build_component_ref (tree record_variable,
!                      tree component,
!                      tree field,
!                      int no_fold_p)
  {
    tree ref = build_simple_component_ref (record_variable, component, field,
  					 no_fold_p);
  
!   if (ref != 0)
      return ref;
  
    /* If FIELD was specified, assume this is an invalid user field so
       raise constraint error.  Otherwise, we can't find the type to return, so
       abort.  */
! 
!   else if (field != 0)
!     return build1 (NULL_EXPR, TREE_TYPE (field),
! 		   build_call_raise (CE_Discriminant_Check_Failed));
!   else
!     gigi_abort (512);
  }
  
  /* Build a GCC tree to call an allocation or deallocation function.
--- 1601,1621 ----
     reference could not be found.  */
  
  tree
! build_component_ref (tree record_variable, tree component,
!                      tree field, bool no_fold_p)
  {
    tree ref = build_simple_component_ref (record_variable, component, field,
  					 no_fold_p);
  
!   if (ref)
      return ref;
  
    /* If FIELD was specified, assume this is an invalid user field so
       raise constraint error.  Otherwise, we can't find the type to return, so
       abort.  */
!   gcc_assert (field);
!   return build1 (NULL_EXPR, TREE_TYPE (field),
! 		 build_call_raise (CE_Discriminant_Check_Failed));
  }
  
  /* Build a GCC tree to call an allocation or deallocation function.
*************** build_component_ref (tree record_variabl
*** 1716,1733 ****
     object dynamically on the stack frame.  */
  
  tree
! build_call_alloc_dealloc (tree gnu_obj,
!                           tree gnu_size,
!                           int align,
!                           Entity_Id gnat_proc,
!                           Entity_Id gnat_pool,
                            Node_Id gnat_node)
  {
    tree gnu_align = size_int (align / BITS_PER_UNIT);
  
!   if (CONTAINS_PLACEHOLDER_P (gnu_size))
!     gnu_size = build (WITH_RECORD_EXPR, sizetype, gnu_size,
! 		      build_unary_op (INDIRECT_REF, NULL_TREE, gnu_obj));
  
    if (Present (gnat_proc))
      {
--- 1629,1641 ----
     object dynamically on the stack frame.  */
  
  tree
! build_call_alloc_dealloc (tree gnu_obj, tree gnu_size, unsigned align,
!                           Entity_Id gnat_proc, Entity_Id gnat_pool,
                            Node_Id gnat_node)
  {
    tree gnu_align = size_int (align / BITS_PER_UNIT);
  
!   gnu_size = SUBSTITUTE_PLACEHOLDER_IN_EXPR (gnu_size, gnu_obj);
  
    if (Present (gnat_proc))
      {
*************** build_call_alloc_dealloc (tree gnu_obj,
*** 1766,1773 ****
  		       build_tree_list (NULL_TREE,
  					convert (gnu_size_type, gnu_align)));
  
! 	  gnu_call = build (CALL_EXPR, TREE_TYPE (TREE_TYPE (gnu_proc)),
! 			    gnu_proc_addr, gnu_args, NULL_TREE);
  	  TREE_SIDE_EFFECTS (gnu_call) = 1;
  	  return gnu_call;
  	}
--- 1674,1681 ----
  		       build_tree_list (NULL_TREE,
  					convert (gnu_size_type, gnu_align)));
  
! 	  gnu_call = build3 (CALL_EXPR, TREE_TYPE (TREE_TYPE (gnu_proc)),
! 			     gnu_proc_addr, gnu_args, NULL_TREE);
  	  TREE_SIDE_EFFECTS (gnu_call) = 1;
  	  return gnu_call;
  	}
*************** build_call_alloc_dealloc (tree gnu_obj,
*** 1795,1802 ****
  		       build_tree_list (NULL_TREE,
  					convert (gnu_size_type, gnu_size)));
  
! 	  gnu_call = build (CALL_EXPR, TREE_TYPE (TREE_TYPE (gnu_proc)),
! 			    gnu_proc_addr, gnu_args, NULL_TREE);
  	  TREE_SIDE_EFFECTS (gnu_call) = 1;
  	  return gnu_call;
  	}
--- 1703,1710 ----
  		       build_tree_list (NULL_TREE,
  					convert (gnu_size_type, gnu_size)));
  
! 	  gnu_call = build3 (CALL_EXPR, TREE_TYPE (TREE_TYPE (gnu_proc)),
! 			     gnu_proc_addr, gnu_args, NULL_TREE);
  	  TREE_SIDE_EFFECTS (gnu_call) = 1;
  	  return gnu_call;
  	}
*************** build_call_alloc_dealloc (tree gnu_obj,
*** 1804,1827 ****
  
    else if (gnu_obj)
      return build_call_1_expr (free_decl, gnu_obj);
!   else if (gnat_pool == -1)
      {
        /* If the size is a constant, we can put it in the fixed portion of
  	 the stack frame to avoid the need to adjust the stack pointer.  */
!       if (TREE_CODE (gnu_size) == INTEGER_CST && ! flag_stack_check)
  	{
  	  tree gnu_range
  	    = build_range_type (NULL_TREE, size_one_node, gnu_size);
  	  tree gnu_array_type = build_array_type (char_type_node, gnu_range);
! 	  tree gnu_decl =
! 	    create_var_decl (get_identifier ("RETVAL"), NULL_TREE,
! 			     gnu_array_type, NULL_TREE, 0, 0, 0, 0, 0);
  
  	  return convert (ptr_void_type_node,
  			  build_unary_op (ADDR_EXPR, NULL_TREE, gnu_decl));
  	}
        else
! 	return build (ALLOCATE_EXPR, ptr_void_type_node, gnu_size, gnu_align);
      }
    else
      {
--- 1712,1743 ----
  
    else if (gnu_obj)
      return build_call_1_expr (free_decl, gnu_obj);
! 
!   /* ??? For now, disable variable-sized allocators in the stack since
!      we can't yet gimplify an ALLOCATE_EXPR.  */
!   else if (gnat_pool == -1
! 	   && TREE_CODE (gnu_size) == INTEGER_CST && !flag_stack_check)
      {
        /* If the size is a constant, we can put it in the fixed portion of
  	 the stack frame to avoid the need to adjust the stack pointer.  */
!       if (TREE_CODE (gnu_size) == INTEGER_CST && !flag_stack_check)
  	{
  	  tree gnu_range
  	    = build_range_type (NULL_TREE, size_one_node, gnu_size);
  	  tree gnu_array_type = build_array_type (char_type_node, gnu_range);
! 	  tree gnu_decl
! 	    = create_var_decl (get_identifier ("RETVAL"), NULL_TREE,
! 			       gnu_array_type, NULL_TREE, false, false, false,
! 			       false, NULL, gnat_node);
  
  	  return convert (ptr_void_type_node,
  			  build_unary_op (ADDR_EXPR, NULL_TREE, gnu_decl));
  	}
        else
! 	gcc_unreachable ();
! #if 0
! 	return build2 (ALLOCATE_EXPR, ptr_void_type_node, gnu_size, gnu_align);
! #endif
      }
    else
      {
*************** build_call_alloc_dealloc (tree gnu_obj,
*** 1838,1855 ****
     the storage pool to use.  */
  
  tree
! build_allocator (tree type,
!                  tree init,
!                  tree result_type,
!                  Entity_Id gnat_proc,
!                  Entity_Id gnat_pool,
!                  Node_Id gnat_node)
  {
    tree size = TYPE_SIZE_UNIT (type);
    tree result;
  
    /* If the initializer, if present, is a NULL_EXPR, just return a new one.  */
!   if (init != 0 && TREE_CODE (init) == NULL_EXPR)
      return build1 (NULL_EXPR, result_type, TREE_OPERAND (init, 0));
  
    /* If RESULT_TYPE is a fat or thin pointer, set SIZE to be the sum of the
--- 1754,1767 ----
     the storage pool to use.  */
  
  tree
! build_allocator (tree type, tree init, tree result_type, Entity_Id gnat_proc,
!                  Entity_Id gnat_pool, Node_Id gnat_node)
  {
    tree size = TYPE_SIZE_UNIT (type);
    tree result;
  
    /* If the initializer, if present, is a NULL_EXPR, just return a new one.  */
!   if (init && TREE_CODE (init) == NULL_EXPR)
      return build1 (NULL_EXPR, result_type, TREE_OPERAND (init, 0));
  
    /* If RESULT_TYPE is a fat or thin pointer, set SIZE to be the sum of the
*************** build_allocator (tree type,
*** 1868,1877 ****
        tree storage;
        tree template_cons = NULL_TREE;
  
!       size = TYPE_SIZE_UNIT (storage_type);
! 
!       if (CONTAINS_PLACEHOLDER_P (size))
! 	size = build (WITH_RECORD_EXPR, sizetype, size, init);
  
        /* If the size overflows, pass -1 so the allocator will raise
  	 storage error.  */
--- 1780,1787 ----
        tree storage;
        tree template_cons = NULL_TREE;
  
!       size = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TYPE_SIZE_UNIT (storage_type),
! 					     init);
  
        /* If the size overflows, pass -1 so the allocator will raise
  	 storage error.  */
*************** build_allocator (tree type,
*** 1887,1893 ****
  	{
  	  type = TREE_TYPE (TYPE_FIELDS (type));
  
! 	  if (init != 0)
  	    init = convert (type, init);
  	}
  
--- 1797,1803 ----
  	{
  	  type = TREE_TYPE (TYPE_FIELDS (type));
  
! 	  if (init)
  	    init = convert (type, init);
  	}
  
*************** build_allocator (tree type,
*** 1895,1901 ****
  	 the entire object including the bounds and copy it into the
  	 object.  If there is no initializing expression, just set the
  	 bounds.  */
!       if (init != 0)
  	{
  	  template_cons = tree_cons (TREE_CHAIN (TYPE_FIELDS (storage_type)),
  				     init, NULL_TREE);
--- 1805,1811 ----
  	 the entire object including the bounds and copy it into the
  	 object.  If there is no initializing expression, just set the
  	 bounds.  */
!       if (init)
  	{
  	  template_cons = tree_cons (TREE_CHAIN (TYPE_FIELDS (storage_type)),
  				     init, NULL_TREE);
*************** build_allocator (tree type,
*** 1906,1921 ****
  
  	  return convert
  	    (result_type,
! 	     build (COMPOUND_EXPR, storage_ptr_type,
! 		    build_binary_op
! 		    (MODIFY_EXPR, storage_type,
! 		     build_unary_op (INDIRECT_REF, NULL_TREE,
! 				     convert (storage_ptr_type, storage)),
! 		     gnat_build_constructor (storage_type, template_cons)),
! 		    convert (storage_ptr_type, storage)));
  	}
        else
! 	return build
  	  (COMPOUND_EXPR, result_type,
  	   build_binary_op
  	   (MODIFY_EXPR, template_type,
--- 1816,1831 ----
  
  	  return convert
  	    (result_type,
! 	     build2 (COMPOUND_EXPR, storage_ptr_type,
! 		     build_binary_op
! 		     (MODIFY_EXPR, storage_type,
! 		      build_unary_op (INDIRECT_REF, NULL_TREE,
! 				      convert (storage_ptr_type, storage)),
! 		      gnat_build_constructor (storage_type, template_cons)),
! 		     convert (storage_ptr_type, storage)));
  	}
        else
! 	return build2
  	  (COMPOUND_EXPR, result_type,
  	   build_binary_op
  	   (MODIFY_EXPR, template_type,
*************** build_allocator (tree type,
*** 1929,1935 ****
  
    /* If we have an initializing expression, see if its size is simpler
       than the size from the type.  */
!   if (init != 0 && TYPE_SIZE_UNIT (TREE_TYPE (init)) != 0
        && (TREE_CODE (TYPE_SIZE_UNIT (TREE_TYPE (init))) == INTEGER_CST
  	  || CONTAINS_PLACEHOLDER_P (size)))
      size = TYPE_SIZE_UNIT (TREE_TYPE (init));
--- 1839,1845 ----
  
    /* If we have an initializing expression, see if its size is simpler
       than the size from the type.  */
!   if (init && TYPE_SIZE_UNIT (TREE_TYPE (init))
        && (TREE_CODE (TYPE_SIZE_UNIT (TREE_TYPE (init))) == INTEGER_CST
  	  || CONTAINS_PLACEHOLDER_P (size)))
      size = TYPE_SIZE_UNIT (TREE_TYPE (init));
*************** build_allocator (tree type,
*** 1940,1949 ****
       the maximum size.  */
    if (CONTAINS_PLACEHOLDER_P (size))
      {
!       if (init == 0)
! 	size = max_size (size, 1);
        else
! 	size = build (WITH_RECORD_EXPR, sizetype, size, init);
      }
  
    /* If the size overflows, pass -1 so the allocator will raise
--- 1850,1859 ----
       the maximum size.  */
    if (CONTAINS_PLACEHOLDER_P (size))
      {
!       if (init)
! 	size = substitute_placeholder_in_expr (size, init);
        else
! 	size = max_size (size, true);
      }
  
    /* If the size overflows, pass -1 so the allocator will raise
*************** build_allocator (tree type,
*** 1986,1998 ****
      {
        result = save_expr (result);
        result
! 	= build (COMPOUND_EXPR, TREE_TYPE (result),
! 		 build_binary_op
! 		 (MODIFY_EXPR, TREE_TYPE (TREE_TYPE (result)),
! 		  build_unary_op (INDIRECT_REF, TREE_TYPE (TREE_TYPE (result)),
! 				  result),
! 		  init),
! 		 result);
      }
  
    return convert (result_type, result);
--- 1896,1908 ----
      {
        result = save_expr (result);
        result
! 	= build2 (COMPOUND_EXPR, TREE_TYPE (result),
! 		  build_binary_op
! 		  (MODIFY_EXPR, NULL_TREE,
! 		   build_unary_op (INDIRECT_REF,
! 				   TREE_TYPE (TREE_TYPE (result)), result),
! 		   init),
! 		  result);
      }
  
    return convert (result_type, result);
*************** fill_vms_descriptor (tree expr, Entity_I
*** 2006,2026 ****
  {
    tree record_type = TREE_TYPE (TREE_TYPE (get_gnu_tree (gnat_formal)));
    tree field;
!   tree const_list = 0;
  
    expr = maybe_unconstrained_array (expr);
    gnat_mark_addressable (expr);
  
    for (field = TYPE_FIELDS (record_type); field; field = TREE_CHAIN (field))
!     {
!       tree init = DECL_INITIAL (field);
! 
!       if (CONTAINS_PLACEHOLDER_P (init))
! 	init = build (WITH_RECORD_EXPR, TREE_TYPE (init), init, expr);
! 
!       const_list = tree_cons (field, convert (TREE_TYPE (field), init),
! 			      const_list);
!     }
  
    return gnat_build_constructor (record_type, nreverse (const_list));
  }
--- 1916,1933 ----
  {
    tree record_type = TREE_TYPE (TREE_TYPE (get_gnu_tree (gnat_formal)));
    tree field;
!   tree const_list = NULL_TREE;
  
    expr = maybe_unconstrained_array (expr);
    gnat_mark_addressable (expr);
  
    for (field = TYPE_FIELDS (record_type); field; field = TREE_CHAIN (field))
!     const_list
!       = tree_cons (field,
! 		   convert (TREE_TYPE (field),
! 			    SUBSTITUTE_PLACEHOLDER_IN_EXPR
! 			    (DECL_INITIAL (field), expr)),
! 		   const_list);
  
    return gnat_build_constructor (record_type, nreverse (const_list));
  }
*************** gnat_mark_addressable (tree expr_node)
*** 2043,2049 ****
        case VIEW_CONVERT_EXPR:
        case CONVERT_EXPR:
        case NON_LVALUE_EXPR:
-       case GNAT_NOP_EXPR:
        case NOP_EXPR:
  	expr_node = TREE_OPERAND (expr_node, 0);
  	break;
--- 1950,1955 ----
*************** gnat_mark_addressable (tree expr_node)
*** 2055,2061 ****
        case VAR_DECL:
        case PARM_DECL:
        case RESULT_DECL:
- 	put_var_into_stack (expr_node, true);
  	TREE_ADDRESSABLE (expr_node) = 1;
  	return true;
  
--- 1961,1966 ----
*************** gnat_mark_addressable (tree expr_node)
*** 2064,2070 ****
  	return true;
  
        case CONST_DECL:
! 	return (DECL_CONST_CORRESPONDING_VAR (expr_node) != 0
  		&& (gnat_mark_addressable
  		    (DECL_CONST_CORRESPONDING_VAR (expr_node))));
        default:
--- 1969,1975 ----
  	return true;
  
        case CONST_DECL:
! 	return (DECL_CONST_CORRESPONDING_VAR (expr_node)
  		&& (gnat_mark_addressable
  		    (DECL_CONST_CORRESPONDING_VAR (expr_node))));
        default:
diff -Nrcpad gcc-3.4.3/gcc/ada/vms_conv.adb gcc-4.0.0/gcc/ada/vms_conv.adb
*** gcc-3.4.3/gcc/ada/vms_conv.adb	Mon Jan  5 15:20:47 2004
--- gcc-4.0.0/gcc/ada/vms_conv.adb	Thu Feb 10 14:05:21 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1996-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1996-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 26,31 ****
--- 26,32 ----
  
  with Gnatvsn;
  with Hostparm;
+ with Opt;
  with Osint; use Osint;
  
  with Ada.Characters.Handling; use Ada.Characters.Handling;
*************** with Ada.Text_IO;             use Ada.Te
*** 34,45 ****
--- 35,58 ----
  
  package body VMS_Conv is
  
+    Keep_Temps_Option : constant Item_Ptr :=
+                          new Item'
+                            (Id          => Id_Option,
+                             Name        =>
+                               new String'("/KEEP_TEMPORARY_FILES"),
+                             Next        => null,
+                             Command     => Undefined,
+                             Unix_String => null);
+ 
     Param_Count : Natural := 0;
     --  Number of parameter arguments so far
  
     Arg_Num : Natural;
     --  Argument number
  
+    Arg_File : Ada.Text_IO.File_Type;
+    --  A file where arguments are read from
+ 
     Commands : Item_Ptr;
     --  Pointer to head of list of command items, one for each command, with
     --  the end of the list marked by a null pointer.
*************** package body VMS_Conv is
*** 55,60 ****
--- 68,77 ----
     --  if a COMMANDS_TRANSLATION switch has been encountered while processing
     --  a MAKE Command.
  
+    Output_File_Expected : Boolean := False;
+    --  True for GNAT LINK after -o switch, so that the ".ali" extension is
+    --  not added to the executable file name.
+ 
     package Buffer is new Table.Table
       (Table_Component_Type => Character,
        Table_Index_Type     => Integer,
*************** package body VMS_Conv is
*** 72,81 ****
     --  the allocated result on the heap.
  
     function Is_Extensionless (F : String) return Boolean;
!    --  Returns true if the filename has no extension.
  
     function Match (S1, S2 : String) return Boolean;
!    --  Determines whether S1 and S2 match. This is a case insensitive match.
  
     function Match_Prefix (S1, S2 : String) return Boolean;
     --  Determines whether S1 matches a prefix of S2. This is also a case
--- 89,98 ----
     --  the allocated result on the heap.
  
     function Is_Extensionless (F : String) return Boolean;
!    --  Returns true if the filename has no extension
  
     function Match (S1, S2 : String) return Boolean;
!    --  Determines whether S1 and S2 match (this is a case insensitive match)
  
     function Match_Prefix (S1, S2 : String) return Boolean;
     --  Determines whether S1 matches a prefix of S2. This is also a case
*************** package body VMS_Conv is
*** 119,124 ****
--- 136,149 ----
     --  updating Ptr appropriatelly. Note that in the case of use of ! the
     --  result may be to remove a previously placed switch.
  
+    procedure Preprocess_Command_Data;
+    --  Preprocess the string form of the command and options list into the
+    --  internal form.
+ 
+    procedure Process_Argument (The_Command : in out Command_Type);
+    --  Process one argument from the command line, or one line from
+    --  from a command line file. For the first call, set The_Command.
+ 
     procedure Validate_Command_Or_Option (N : VMS_Data.String_Ptr);
     --  Check that N is a valid command or option name, i.e. that it is of the
     --  form of an Ada identifier with upper case letters and underscores.
*************** package body VMS_Conv is
*** 293,298 ****
--- 318,333 ----
              Params   => new Parameter_Array'(1 => Unlimited_Files),
              Defext   => "   "),
  
+          Metric =>
+            (Cname    => new S'("METRIC"),
+             Usage    => new S'("GNAT METRIC /qualifiers source_file"),
+             VMS_Only => False,
+             Unixcmd  => new S'("gnatmetric"),
+             Unixsws  => null,
+             Switches => Metric_Switches'Access,
+             Params   => new Parameter_Array'(1 => Unlimited_Files),
+             Defext   => "   "),
+ 
           Name =>
             (Cname    => new S'("NAME"),
              Usage    => new S'("GNAT NAME /qualifiers naming-pattern "
*************** package body VMS_Conv is
*** 322,328 ****
              Unixcmd  => new S'("gnatpp"),
              Unixsws  => null,
              Switches => Pretty_Switches'Access,
!             Params   => new Parameter_Array'(1 => File),
              Defext   => "   "),
  
           Shared =>
--- 357,373 ----
              Unixcmd  => new S'("gnatpp"),
              Unixsws  => null,
              Switches => Pretty_Switches'Access,
!             Params   => new Parameter_Array'(1 => Unlimited_Files),
!             Defext   => "   "),
! 
!          Setup =>
!            (Cname    => new S'("SETUP"),
!             Usage    => new S'("GNAT SETUP /qualifiers"),
!             VMS_Only => False,
!             Unixcmd  => new S'(""),
!             Unixsws  => null,
!             Switches => Setup_Switches'Access,
!             Params   => new Parameter_Array'(1 => Unlimited_Files),
              Defext   => "   "),
  
           Shared =>
*************** package body VMS_Conv is
*** 616,623 ****
     procedure Output_Version is
     begin
        Put ("GNAT ");
!       Put (Gnatvsn.Gnat_Version_String);
!       Put_Line (" Copyright 1996-2004 Free Software Foundation, Inc.");
     end Output_Version;
  
     -----------
--- 661,668 ----
     procedure Output_Version is
     begin
        Put ("GNAT ");
!       Put_Line (Gnatvsn.Gnat_Version_String);
!       Put_Line ("Copyright 1996-2005 Free Software Foundation, Inc.");
     end Output_Version;
  
     -----------
*************** package body VMS_Conv is
*** 736,799 ****
        end loop;
     end Place_Unix_Switches;
  
!    --------------------------------
!    -- Validate_Command_Or_Option --
!    --------------------------------
! 
!    procedure Validate_Command_Or_Option (N : VMS_Data.String_Ptr) is
!    begin
!       pragma Assert (N'Length > 0);
! 
!       for J in N'Range loop
!          if N (J) = '_' then
!             pragma Assert (N (J - 1) /= '_');
!             null;
!          else
!             pragma Assert (Is_Upper (N (J)) or else Is_Digit (N (J)));
!             null;
!          end if;
!       end loop;
!    end Validate_Command_Or_Option;
! 
!    --------------------------
!    -- Validate_Unix_Switch --
!    --------------------------
! 
!    procedure Validate_Unix_Switch (S : VMS_Data.String_Ptr) is
!    begin
!       if S (S'First) = '`' then
!          return;
!       end if;
! 
!       pragma Assert (S (S'First) = '-' or else S (S'First) = '!');
! 
!       for J in S'First + 1 .. S'Last loop
!          pragma Assert (S (J) /= ' ');
! 
!          if S (J) = '!' then
!             pragma Assert (S (J - 1) = ',' and then S (J + 1) = '-');
!             null;
!          end if;
!       end loop;
!    end Validate_Unix_Switch;
! 
!    --------------------
!    -- VMS_Conversion --
!    --------------------
! 
!    --  This function is *far* too long and *far* too heavily nested, it
!    --  needs procedural abstraction ???
  
!    procedure VMS_Conversion (The_Command : out Command_Type) is
     begin
-       Buffer.Init;
- 
-       --  First we must preprocess the string form of the command and options
-       --  list into the internal form that we use.
- 
        for C in Real_Command_Type loop
           declare
!             Command : Item_Ptr := new Command_Item;
  
              Last_Switch : Item_Ptr;
              --  Last switch in list
--- 781,795 ----
        end loop;
     end Place_Unix_Switches;
  
!    -----------------------------
!    -- Preprocess_Command_Data --
!    -----------------------------
  
!    procedure Preprocess_Command_Data is
     begin
        for C in Real_Command_Type loop
           declare
!             Command : constant Item_Ptr := new Command_Item;
  
              Last_Switch : Item_Ptr;
              --  Last switch in list
*************** package body VMS_Conv is
*** 975,982 ****
                       P := P + 1; -- bump past =
                       while P <= SS'Last loop
                          declare
!                            Opt : Item_Ptr := new Option_Item;
                             Q   : Natural;
                          begin
                             --  Link new option item into options list
  
--- 971,979 ----
                       P := P + 1; -- bump past =
                       while P <= SS'Last loop
                          declare
!                            Opt : constant Item_Ptr := new Option_Item;
                             Q   : Natural;
+ 
                          begin
                             --  Link new option item into options list
  
*************** package body VMS_Conv is
*** 1015,1304 ****
              end loop;
           end;
        end loop;
  
!       --  If no parameters, give complete list of commands
  
!       if Argument_Count = 0 then
!          Output_Version;
!          New_Line;
!          Put_Line ("List of available commands");
!          New_Line;
  
!          while Commands /= null loop
!             Put (Commands.Usage.all);
!             Set_Col (53);
!             Put_Line (Commands.Unix_String.all);
!             Commands := Commands.Next;
           end loop;
  
!          raise Normal_Exit;
!       end if;
  
!       Arg_Num := 1;
  
!       --  Loop through arguments
  
!       while Arg_Num <= Argument_Count loop
  
!          Process_Argument : declare
!             Argv    : String_Access;
!             Arg_Idx : Integer;
  
!             function Get_Arg_End
!               (Argv    : String;
!                Arg_Idx : Integer) return Integer;
!             --  Begins looking at Arg_Idx + 1 and returns the index of the
!             --  last character before a slash or else the index of the last
!             --  character in the string Argv.
  
!             -----------------
!             -- Get_Arg_End --
!             -----------------
  
!             function Get_Arg_End
!               (Argv    : String;
!                Arg_Idx : Integer) return Integer
!             is
              begin
!                for J in Arg_Idx + 1 .. Argv'Last loop
!                   if Argv (J) = '/' then
!                      return J - 1;
!                   end if;
!                end loop;
  
!                return Argv'Last;
!             end Get_Arg_End;
  
!          --  Start of processing for Process_Argument
  
           begin
!             Argv := new String'(Argument (Arg_Num));
!             Arg_Idx := Argv'First;
  
!             <<Tryagain_After_Coalesce>>
!             loop
!                declare
!                   Next_Arg_Idx : Integer;
!                   Arg          : String_Access;
  
!                begin
!                   Next_Arg_Idx := Get_Arg_End (Argv.all, Arg_Idx);
!                   Arg := new String'(Argv (Arg_Idx .. Next_Arg_Idx));
  
!                   --  The first one must be a command name
  
!                   if Arg_Num = 1 and then Arg_Idx = Argv'First then
  
!                      Command := Matching_Name (Arg.all, Commands);
  
!                      if Command = null then
!                         raise Error_Exit;
!                      end if;
  
!                      The_Command := Command.Command;
  
!                      --  Give usage information if only command given
  
!                      if Argument_Count = 1
!                        and then Next_Arg_Idx = Argv'Last
!                      then
!                         Output_Version;
!                         New_Line;
!                         Put_Line
!                           ("List of available qualifiers and options");
!                         New_Line;
  
!                         Put (Command.Usage.all);
!                         Set_Col (53);
!                         Put_Line (Command.Unix_String.all);
  
!                         declare
!                            Sw : Item_Ptr := Command.Switches;
  
!                         begin
!                            while Sw /= null loop
!                               Put ("   ");
!                               Put (Sw.Name.all);
  
!                               case Sw.Translation is
  
!                                  when T_Other =>
!                                     Set_Col (53);
!                                     Put_Line (Sw.Unix_String.all &
!                                               "/<other>");
  
!                                  when T_Direct =>
!                                     Set_Col (53);
!                                     Put_Line (Sw.Unix_String.all);
  
!                                  when T_Directories =>
!                                     Put ("=(direc,direc,..direc)");
!                                     Set_Col (53);
!                                     Put (Sw.Unix_String.all);
!                                     Put (" direc ");
!                                     Put (Sw.Unix_String.all);
!                                     Put_Line (" direc ...");
  
!                                  when T_Directory =>
!                                     Put ("=directory");
!                                     Set_Col (53);
!                                     Put (Sw.Unix_String.all);
  
!                                     if Sw.Unix_String (Sw.Unix_String'Last)
!                                     /= '='
!                                     then
!                                        Put (' ');
!                                     end if;
  
!                                     Put_Line ("directory ");
  
!                                  when T_File | T_No_Space_File =>
!                                     Put ("=file");
!                                     Set_Col (53);
!                                     Put (Sw.Unix_String.all);
  
!                                     if Sw.Translation = T_File
!                                       and then Sw.Unix_String
!                                         (Sw.Unix_String'Last)
!                                     /= '='
!                                     then
!                                        Put (' ');
!                                     end if;
  
!                                     Put_Line ("file ");
  
!                                  when T_Numeric =>
!                                     Put ("=nnn");
!                                     Set_Col (53);
  
!                                     if Sw.Unix_String (Sw.Unix_String'First)
!                                     = '`'
!                                     then
!                                        Put (Sw.Unix_String
!                                               (Sw.Unix_String'First + 1
!                                                .. Sw.Unix_String'Last));
!                                     else
!                                        Put (Sw.Unix_String.all);
!                                     end if;
  
!                                     Put_Line ("nnn");
  
!                                  when T_Alphanumplus =>
!                                     Put ("=xyz");
!                                     Set_Col (53);
  
!                                     if Sw.Unix_String (Sw.Unix_String'First)
!                                     = '`'
!                                     then
!                                        Put (Sw.Unix_String
!                                               (Sw.Unix_String'First + 1
!                                                .. Sw.Unix_String'Last));
!                                     else
!                                        Put (Sw.Unix_String.all);
!                                     end if;
  
!                                     Put_Line ("xyz");
  
!                                  when T_String =>
!                                     Put ("=");
!                                     Put ('"');
!                                     Put ("<string>");
!                                     Put ('"');
!                                     Set_Col (53);
  
!                                     Put (Sw.Unix_String.all);
  
!                                     if Sw.Unix_String (Sw.Unix_String'Last)
!                                     /= '='
!                                     then
!                                        Put (' ');
!                                     end if;
  
!                                     Put ("<string>");
!                                     New_Line;
  
-                                  when T_Commands =>
-                                     Put (" (switches for ");
-                                     Put (Sw.Unix_String
-                                            (Sw.Unix_String'First + 7
-                                             .. Sw.Unix_String'Last));
-                                     Put (')');
                                      Set_Col (53);
!                                     Put (Sw.Unix_String
!                                            (Sw.Unix_String'First
!                                             .. Sw.Unix_String'First + 5));
!                                     Put_Line (" switches");
  
!                                  when T_Options =>
!                                     declare
!                                        Opt : Item_Ptr := Sw.Options;
  
!                                     begin
!                                        Put_Line ("=(option,option..)");
  
!                                        while Opt /= null loop
!                                           Put ("      ");
!                                           Put (Opt.Name.all);
  
!                                           if Opt = Sw.Options then
!                                              Put (" (D)");
!                                           end if;
  
!                                           Set_Col (53);
!                                           Put_Line (Opt.Unix_String.all);
!                                           Opt := Opt.Next;
!                                        end loop;
!                                     end;
  
!                               end case;
  
!                               Sw := Sw.Next;
!                            end loop;
                          end;
  
!                         raise Normal_Exit;
!                      end if;
  
!                      --  Special handling for internal debugging switch /?
  
!                   elsif Arg.all = "/?" then
!                      Display_Command := True;
  
!                      --  Copy -switch unchanged
  
!                   elsif Arg (Arg'First) = '-' then
!                      Place (' ');
!                      Place (Arg.all);
  
!                      --  Copy quoted switch with quotes stripped
  
!                   elsif Arg (Arg'First) = '"' then
!                      if Arg (Arg'Last) /= '"' then
!                         Put (Standard_Error, "misquoted argument: ");
!                         Put_Line (Standard_Error, Arg.all);
!                         Errors := Errors + 1;
  
!                      else
                          Place (' ');
!                         Place (Arg (Arg'First + 1 .. Arg'Last - 1));
!                      end if;
  
!                      --  Parameter Argument
  
!                   elsif Arg (Arg'First) /= '/'
!                     and then Make_Commands_Active = null
!                   then
!                      Param_Count := Param_Count + 1;
  
!                      if Param_Count <= Command.Params'Length then
  
!                         case Command.Params (Param_Count) is
  
!                            when File | Optional_File =>
                                declare
!                                  Normal_File : constant String_Access :=
!                                    To_Canonical_File_Spec
!                                      (Arg.all);
  
                                begin
                                   Place (' ');
--- 1012,1507 ----
              end loop;
           end;
        end loop;
+    end Preprocess_Command_Data;
  
!    ----------------------
!    -- Process_Argument --
!    ----------------------
  
!    procedure Process_Argument (The_Command : in out Command_Type) is
!       Argv    : String_Access;
!       Arg_Idx : Integer;
  
!       function Get_Arg_End
!         (Argv    : String;
!          Arg_Idx : Integer) return Integer;
!       --  Begins looking at Arg_Idx + 1 and returns the index of the
!       --  last character before a slash or else the index of the last
!       --  character in the string Argv.
! 
!       -----------------
!       -- Get_Arg_End --
!       -----------------
! 
!       function Get_Arg_End
!         (Argv    : String;
!          Arg_Idx : Integer) return Integer
!       is
!       begin
!          for J in Arg_Idx + 1 .. Argv'Last loop
!             if Argv (J) = '/' then
!                return J - 1;
!             end if;
           end loop;
  
!          return Argv'Last;
!       end Get_Arg_End;
  
!       --  Start of processing for Process_Argument
  
!    begin
!       --  If an argument file is open, read the next non empty line
  
!       if Is_Open (Arg_File) then
!          declare
!             Line : String (1 .. 256);
!             Last : Natural;
!          begin
!             loop
!                Get_Line (Arg_File, Line, Last);
!                exit when Last /= 0 or else End_Of_File (Arg_File);
!             end loop;
  
!             --  If the end of the argument file has been reached, close it
  
!             if End_Of_File (Arg_File) then
!                Close (Arg_File);
  
!                --  If the last line was empty, return after increasing Arg_Num
!                --  to go to the next argument on the comment line.
  
!                if Last = 0 then
!                   Arg_Num := Arg_Num + 1;
!                   return;
!                end if;
!             end if;
! 
!             Argv := new String'(Line (1 .. Last));
!             Arg_Idx := 1;
! 
!             if Argv (1) = '@' then
!                Put_Line (Standard_Error, "argument file cannot contain @cmd");
!                raise Error_Exit;
!             end if;
!          end;
! 
!       else
!          --  No argument file is open, get the argument on the command line
! 
!          Argv := new String'(Argument (Arg_Num));
!          Arg_Idx := Argv'First;
! 
!          --  Check if this is the specification of an argument file
! 
!          if Argv (Arg_Idx) = '@' then
!             --  The first argument on the command line cannot be an argument
!             --  file.
! 
!             if Arg_Num = 1 then
!                Put_Line
!                  (Standard_Error,
!                   "Cannot specify argument line before command");
!                raise Error_Exit;
!             end if;
! 
!             --  Open the file, after conversion of the name to canonical form.
!             --  Fail if file is not found.
! 
!             declare
!                Canonical_File_Name : String_Access :=
!                  To_Canonical_File_Spec (Argv (Arg_Idx + 1 .. Argv'Last));
              begin
!                Open (Arg_File, In_File, Canonical_File_Name.all);
!                Free (Canonical_File_Name);
!                return;
  
!             exception
!                when others =>
!                   Put (Standard_Error, "Cannot open argument file """);
!                   Put (Standard_Error, Argv (Arg_Idx + 1 .. Argv'Last));
!                   Put_Line (Standard_Error, """");
!                   raise Error_Exit;
!             end;
!          end if;
!       end if;
  
!       <<Tryagain_After_Coalesce>>
!       loop
!          declare
!             Next_Arg_Idx : Integer;
!             Arg          : String_Access;
  
           begin
!             Next_Arg_Idx := Get_Arg_End (Argv.all, Arg_Idx);
!             Arg := new String'(Argv (Arg_Idx .. Next_Arg_Idx));
  
!             --  The first one must be a command name
  
!             if Arg_Num = 1 and then Arg_Idx = Argv'First then
!                Command := Matching_Name (Arg.all, Commands);
  
!                if Command = null then
!                   raise Error_Exit;
!                end if;
  
!                The_Command := Command.Command;
!                Output_File_Expected := False;
  
!                --  Give usage information if only command given
  
!                if Argument_Count = 1
!                  and then Next_Arg_Idx = Argv'Last
!                then
!                   Output_Version;
!                   New_Line;
!                   Put_Line
!                     ("List of available qualifiers and options");
!                   New_Line;
  
!                   Put (Command.Usage.all);
!                   Set_Col (53);
!                   Put_Line (Command.Unix_String.all);
  
!                   declare
!                      Sw : Item_Ptr := Command.Switches;
  
!                   begin
!                      while Sw /= null loop
!                         Put ("   ");
!                         Put (Sw.Name.all);
  
!                         case Sw.Translation is
  
!                            when T_Other =>
!                               Set_Col (53);
!                               Put_Line (Sw.Unix_String.all &
!                                         "/<other>");
  
!                            when T_Direct =>
!                               Set_Col (53);
!                               Put_Line (Sw.Unix_String.all);
  
!                            when T_Directories =>
!                               Put ("=(direc,direc,..direc)");
!                               Set_Col (53);
!                               Put (Sw.Unix_String.all);
!                               Put (" direc ");
!                               Put (Sw.Unix_String.all);
!                               Put_Line (" direc ...");
  
!                            when T_Directory =>
!                               Put ("=directory");
!                               Set_Col (53);
!                               Put (Sw.Unix_String.all);
  
!                               if Sw.Unix_String (Sw.Unix_String'Last)
!                               /= '='
!                               then
!                                  Put (' ');
!                               end if;
  
!                               Put_Line ("directory ");
  
!                            when T_File | T_No_Space_File =>
!                               Put ("=file");
!                               Set_Col (53);
!                               Put (Sw.Unix_String.all);
  
!                               if Sw.Translation = T_File
!                                 and then Sw.Unix_String
!                                   (Sw.Unix_String'Last) /= '='
!                               then
!                                  Put (' ');
!                               end if;
  
!                               Put_Line ("file ");
  
!                            when T_Numeric =>
!                               Put ("=nnn");
!                               Set_Col (53);
  
!                               if Sw.Unix_String
!                                 (Sw.Unix_String'First) = '`'
!                               then
!                                  Put (Sw.Unix_String
!                                         (Sw.Unix_String'First + 1
!                                          .. Sw.Unix_String'Last));
!                               else
!                                  Put (Sw.Unix_String.all);
!                               end if;
  
!                               Put_Line ("nnn");
  
!                            when T_Alphanumplus =>
!                               Put ("=xyz");
!                               Set_Col (53);
  
!                               if Sw.Unix_String
!                                 (Sw.Unix_String'First) = '`'
!                               then
!                                  Put (Sw.Unix_String
!                                         (Sw.Unix_String'First + 1
!                                          .. Sw.Unix_String'Last));
!                               else
!                                  Put (Sw.Unix_String.all);
!                               end if;
  
!                               Put_Line ("xyz");
  
!                            when T_String =>
!                               Put ("=");
!                               Put ('"');
!                               Put ("<string>");
!                               Put ('"');
!                               Set_Col (53);
  
!                               Put (Sw.Unix_String.all);
  
!                               if Sw.Unix_String
!                                 (Sw.Unix_String'Last) /= '='
!                               then
!                                  Put (' ');
!                               end if;
  
!                               Put ("<string>");
!                               New_Line;
  
!                            when T_Commands =>
!                               Put (" (switches for ");
!                               Put (Sw.Unix_String
!                                      (Sw.Unix_String'First + 7
!                                       .. Sw.Unix_String'Last));
!                               Put (')');
!                               Set_Col (53);
!                               Put (Sw.Unix_String
!                                      (Sw.Unix_String'First
!                                       .. Sw.Unix_String'First + 5));
!                               Put_Line (" switches");
  
!                            when T_Options =>
!                               declare
!                                  Opt : Item_Ptr := Sw.Options;
  
!                               begin
!                                  Put_Line ("=(option,option..)");
! 
!                                  while Opt /= null loop
!                                     Put ("      ");
!                                     Put (Opt.Name.all);
! 
!                                     if Opt = Sw.Options then
!                                        Put (" (D)");
!                                     end if;
  
                                      Set_Col (53);
!                                     Put_Line (Opt.Unix_String.all);
!                                     Opt := Opt.Next;
!                                  end loop;
!                               end;
  
!                         end case;
  
!                         Sw := Sw.Next;
!                      end loop;
!                   end;
  
!                   raise Normal_Exit;
!                end if;
  
!             --  Special handling for internal debugging switch /?
  
!             elsif Arg.all = "/?" then
!                Display_Command := True;
!                Output_File_Expected := False;
  
!             --  Special handling of internal option /KEEP_TEMPORARY_FILES
  
!             elsif Arg'Length >= 7
!               and then Matching_Name
!                          (Arg.all, Keep_Temps_Option, True) /= null
!             then
!                Opt.Keep_Temporary_Files := True;
! 
!             --  Copy -switch unchanged
! 
!             elsif Arg (Arg'First) = '-' then
!                Place (' ');
!                Place (Arg.all);
! 
!                --  Set Output_File_Expected for the next argument
! 
!                Output_File_Expected :=
!                  Arg.all = "-o" and then The_Command = Link;
! 
!                --  Copy quoted switch with quotes stripped
! 
!             elsif Arg (Arg'First) = '"' then
!                if Arg (Arg'Last) /= '"' then
!                   Put (Standard_Error, "misquoted argument: ");
!                   Put_Line (Standard_Error, Arg.all);
!                   Errors := Errors + 1;
! 
!                else
!                   Place (' ');
!                   Place (Arg (Arg'First + 1 .. Arg'Last - 1));
!                end if;
! 
!                Output_File_Expected := False;
! 
!                --  Parameter Argument
! 
!             elsif Arg (Arg'First) /= '/'
!               and then Make_Commands_Active = null
!             then
!                Param_Count := Param_Count + 1;
! 
!                if Param_Count <= Command.Params'Length then
! 
!                   case Command.Params (Param_Count) is
! 
!                      when File | Optional_File =>
!                         declare
!                            Normal_File : constant String_Access :=
!                              To_Canonical_File_Spec
!                                (Arg.all);
! 
!                         begin
!                            Place (' ');
!                            Place_Lower (Normal_File.all);
! 
!                            if Is_Extensionless (Normal_File.all)
!                              and then Command.Defext /= "   "
!                            then
!                               Place ('.');
!                               Place (Command.Defext);
!                            end if;
                          end;
  
!                      when Unlimited_Files =>
!                         declare
!                            Normal_File : constant String_Access :=
!                              To_Canonical_File_Spec
!                                (Arg.all);
  
!                            File_Is_Wild : Boolean := False;
!                            File_List    : String_Access_List_Access;
  
!                         begin
!                            for J in Arg'Range loop
!                               if Arg (J) = '*'
!                                 or else Arg (J) = '%'
!                               then
!                                  File_Is_Wild := True;
!                               end if;
!                            end loop;
  
!                            if File_Is_Wild then
!                               File_List := To_Canonical_File_List
!                                 (Arg.all, False);
  
!                               for J in File_List.all'Range loop
!                                  Place (' ');
!                                  Place_Lower (File_List.all (J).all);
!                               end loop;
  
!                            else
!                               Place (' ');
!                               Place_Lower (Normal_File.all);
  
!                               --  Add extension if not present, except after
!                               --  switch -o.
  
!                               if Is_Extensionless (Normal_File.all)
!                                 and then Command.Defext /= "   "
!                                 and then not Output_File_Expected
!                               then
!                                  Place ('.');
!                                  Place (Command.Defext);
!                               end if;
!                            end if;
! 
!                            Param_Count := Param_Count - 1;
!                         end;
! 
!                      when Other_As_Is =>
                          Place (' ');
!                         Place (Arg.all);
  
!                      when Unlimited_As_Is =>
!                         Place (' ');
!                         Place (Arg.all);
!                         Param_Count := Param_Count - 1;
  
!                      when Files_Or_Wildcard =>
  
!                         --  Remove spaces from a comma separated list
!                         --  of file names and adjust control variables
!                         --  accordingly.
  
!                         while Arg_Num < Argument_Count and then
!                           (Argv (Argv'Last) = ',' xor
!                              Argument (Arg_Num + 1)
!                              (Argument (Arg_Num + 1)'First) = ',')
!                         loop
!                            Argv := new String'
!                              (Argv.all & Argument (Arg_Num + 1));
!                            Arg_Num := Arg_Num + 1;
!                            Arg_Idx := Argv'First;
!                            Next_Arg_Idx :=
!                              Get_Arg_End (Argv.all, Arg_Idx);
!                            Arg := new String'
!                              (Argv (Arg_Idx .. Next_Arg_Idx));
!                         end loop;
  
!                         --  Parse the comma separated list of VMS
!                         --  filenames and place them on the command
!                         --  line as space separated Unix style
!                         --  filenames. Lower case and add default
!                         --  extension as appropriate.
! 
!                         declare
!                            Arg1_Idx : Integer := Arg'First;
! 
!                            function Get_Arg1_End
!                              (Arg     : String;
!                               Arg_Idx : Integer) return Integer;
!                            --  Begins looking at Arg_Idx + 1 and
!                            --  returns the index of the last character
!                            --  before a comma or else the index of the
!                            --  last character in the string Arg.
! 
!                            ------------------
!                            -- Get_Arg1_End --
!                            ------------------
! 
!                            function Get_Arg1_End
!                              (Arg     : String;
!                               Arg_Idx : Integer) return Integer
!                            is
!                            begin
!                               for J in Arg_Idx + 1 .. Arg'Last loop
!                                  if Arg (J) = ',' then
!                                     return J - 1;
!                                  end if;
!                               end loop;
! 
!                               return Arg'Last;
!                            end Get_Arg1_End;
! 
!                         begin
!                            loop
                                declare
!                                  Next_Arg1_Idx :
!                                  constant Integer :=
!                                    Get_Arg1_End (Arg.all, Arg1_Idx);
! 
!                                  Arg1 :
!                                  constant String :=
!                                    Arg (Arg1_Idx .. Next_Arg1_Idx);
! 
!                                  Normal_File :
!                                  constant String_Access :=
!                                    To_Canonical_File_Spec (Arg1);
  
                                begin
                                   Place (' ');
*************** package body VMS_Conv is
*** 1310,1893 ****
                                      Place ('.');
                                      Place (Command.Defext);
                                   end if;
                                end;
  
!                            when Unlimited_Files =>
!                               declare
!                                  Normal_File :
!                                  constant String_Access :=
!                                    To_Canonical_File_Spec (Arg.all);
  
!                                  File_Is_Wild  : Boolean := False;
!                                  File_List     : String_Access_List_Access;
  
!                               begin
!                                  for J in Arg'Range loop
!                                     if Arg (J) = '*'
!                                       or else Arg (J) = '%'
!                                     then
!                                        File_Is_Wild := True;
!                                     end if;
!                                  end loop;
  
!                                  if File_Is_Wild then
!                                     File_List := To_Canonical_File_List
!                                       (Arg.all, False);
  
!                                     for J in File_List.all'Range loop
!                                        Place (' ');
!                                        Place_Lower (File_List.all (J).all);
!                                     end loop;
  
!                                  else
!                                     Place (' ');
!                                     Place_Lower (Normal_File.all);
  
!                                     if Is_Extensionless (Normal_File.all)
!                                       and then Command.Defext /= "   "
!                                     then
!                                        Place ('.');
!                                        Place (Command.Defext);
!                                     end if;
!                                  end if;
  
!                                  Param_Count := Param_Count - 1;
!                               end;
  
!                            when Other_As_Is =>
!                               Place (' ');
!                               Place (Arg.all);
  
!                            when Unlimited_As_Is =>
!                               Place (' ');
!                               Place (Arg.all);
!                               Param_Count := Param_Count - 1;
  
!                            when Files_Or_Wildcard =>
  
!                               --  Remove spaces from a comma separated list
!                               --  of file names and adjust control variables
!                               --  accordingly.
  
!                               while Arg_Num < Argument_Count and then
                                  (Argv (Argv'Last) = ',' xor
                                     Argument (Arg_Num + 1)
                                     (Argument (Arg_Num + 1)'First) = ',')
!                               loop
!                                  Argv := new String'
!                                    (Argv.all & Argument (Arg_Num + 1));
                                   Arg_Num := Arg_Num + 1;
                                   Arg_Idx := Argv'First;
                                   Next_Arg_Idx :=
                                     Get_Arg_End (Argv.all, Arg_Idx);
                                   Arg := new String'
                                     (Argv (Arg_Idx .. Next_Arg_Idx));
!                               end loop;
! 
!                               --  Parse the comma separated list of VMS
!                               --  filenames and place them on the command
!                               --  line as space separated Unix style
!                               --  filenames. Lower case and add default
!                               --  extension as appropriate.
! 
!                               declare
!                                  Arg1_Idx : Integer := Arg'First;
  
!                                  function Get_Arg1_End
!                                    (Arg     : String;
!                                     Arg_Idx : Integer) return Integer;
!                                  --  Begins looking at Arg_Idx + 1 and
!                                  --  returns the index of the last character
!                                  --  before a comma or else the index of the
!                                  --  last character in the string Arg.
  
!                                  ------------------
!                                  -- Get_Arg1_End --
!                                  ------------------
  
!                                  function Get_Arg1_End
!                                    (Arg     : String;
!                                     Arg_Idx : Integer) return Integer
!                                  is
!                                  begin
!                                     for J in Arg_Idx + 1 .. Arg'Last loop
!                                        if Arg (J) = ',' then
!                                           return J - 1;
!                                        end if;
!                                     end loop;
  
!                                     return Arg'Last;
!                                  end Get_Arg1_End;
  
                                begin
!                                  loop
!                                     declare
!                                        Next_Arg1_Idx :
!                                        constant Integer :=
!                                          Get_Arg1_End (Arg.all, Arg1_Idx);
! 
!                                        Arg1 :
!                                        constant String :=
!                                          Arg (Arg1_Idx .. Next_Arg1_Idx);
  
!                                        Normal_File :
!                                        constant String_Access :=
!                                          To_Canonical_File_Spec (Arg1);
  
!                                     begin
!                                        Place (' ');
!                                        Place_Lower (Normal_File.all);
  
!                                        if Is_Extensionless (Normal_File.all)
!                                          and then Command.Defext /= "   "
!                                        then
!                                           Place ('.');
!                                           Place (Command.Defext);
!                                        end if;
  
!                                        Arg1_Idx := Next_Arg1_Idx + 1;
!                                     end;
  
!                                     exit when Arg1_Idx > Arg'Last;
  
!                                     --  Don't allow two or more commas in
!                                     --  a row
  
-                                     if Arg (Arg1_Idx) = ',' then
-                                        Arg1_Idx := Arg1_Idx + 1;
-                                        if Arg1_Idx > Arg'Last or else
-                                          Arg (Arg1_Idx) = ','
-                                        then
-                                           Put_Line
-                                             (Standard_Error,
-                                              "Malformed Parameter: " &
-                                              Arg.all);
-                                           Put (Standard_Error, "usage: ");
-                                           Put_Line (Standard_Error,
-                                                     Command.Usage.all);
-                                           raise Error_Exit;
-                                        end if;
                                      end if;
  
                                   end loop;
-                               end;
-                         end case;
-                      end if;
- 
-                      --  Qualifier argument
- 
-                   else
-                      --  This code is too heavily nested, should be
-                      --  separated out as separate subprogram ???
  
!                      declare
!                         Sw   : Item_Ptr;
!                         SwP  : Natural;
!                         P2   : Natural;
!                         Endp : Natural := 0; -- avoid warning!
!                         Opt  : Item_Ptr;
! 
!                      begin
!                         SwP := Arg'First;
!                         while SwP < Arg'Last
!                           and then Arg (SwP + 1) /= '='
!                         loop
!                            SwP := SwP + 1;
!                         end loop;
  
!                         --  At this point, the switch name is in
!                         --  Arg (Arg'First..SwP) and if that is not the
!                         --  whole switch, then there is an equal sign at
!                         --  Arg (SwP + 1) and the rest of Arg is what comes
!                         --  after the equal sign.
  
!                         --  If make commands are active, see if we have
!                         --  another COMMANDS_TRANSLATION switch belonging
!                         --  to gnatmake.
  
!                         if Make_Commands_Active /= null then
!                            Sw :=
!                              Matching_Name
!                                (Arg (Arg'First .. SwP),
!                                 Command.Switches,
!                                 Quiet => True);
  
!                            if Sw /= null
!                              and then Sw.Translation = T_Commands
!                            then
!                               null;
  
                             else
!                               Sw :=
!                                 Matching_Name
!                                   (Arg (Arg'First .. SwP),
!                                    Make_Commands_Active.Switches,
!                                    Quiet => False);
!                            end if;
  
!                            --  For case of GNAT MAKE or CHOP, if we cannot
!                            --  find the switch, then see if it is a
!                            --  recognized compiler switch instead, and if
!                            --  so process the compiler switch.
  
!                         elsif Command.Name.all = "MAKE"
!                           or else Command.Name.all = "CHOP" then
!                            Sw :=
!                              Matching_Name
!                                (Arg (Arg'First .. SwP),
!                                 Command.Switches,
!                                 Quiet => True);
  
!                            if Sw = null then
!                               Sw :=
!                                 Matching_Name
!                                   (Arg (Arg'First .. SwP),
!                                    Matching_Name
!                                      ("COMPILE", Commands).Switches,
!                                    Quiet => False);
                             end if;
  
!                            --  For all other cases, just search the relevant
!                            --  command.
! 
!                         else
!                            Sw :=
!                              Matching_Name
!                                (Arg (Arg'First .. SwP),
!                                 Command.Switches,
!                                 Quiet => False);
!                         end if;
! 
!                         if Sw /= null then
!                            case Sw.Translation is
! 
!                               when T_Direct =>
!                                  Place_Unix_Switches (Sw.Unix_String);
!                                  if SwP < Arg'Last
!                                    and then Arg (SwP + 1) = '='
!                                  then
!                                     Put (Standard_Error,
!                                          "qualifier options ignored: ");
!                                     Put_Line (Standard_Error, Arg.all);
!                                  end if;
! 
!                               when T_Directories =>
!                                  if SwP + 1 > Arg'Last then
!                                     Put (Standard_Error,
!                                          "missing directories for: ");
!                                     Put_Line (Standard_Error, Arg.all);
!                                     Errors := Errors + 1;
! 
!                                  elsif Arg (SwP + 2) /= '(' then
!                                     SwP := SwP + 2;
!                                     Endp := Arg'Last;
! 
!                                  elsif Arg (Arg'Last) /= ')' then
! 
!                                     --  Remove spaces from a comma separated
!                                     --  list of file names and adjust
!                                     --  control variables accordingly.
  
!                                     if Arg_Num < Argument_Count and then
!                                       (Argv (Argv'Last) = ',' xor
!                                          Argument (Arg_Num + 1)
!                                          (Argument (Arg_Num + 1)'First) = ',')
!                                     then
!                                        Argv :=
!                                          new String'(Argv.all
!                                                      & Argument
!                                                        (Arg_Num + 1));
!                                        Arg_Num := Arg_Num + 1;
!                                        Arg_Idx := Argv'First;
!                                        Next_Arg_Idx
!                                        := Get_Arg_End (Argv.all, Arg_Idx);
!                                        Arg := new String'
!                                          (Argv (Arg_Idx .. Next_Arg_Idx));
!                                        goto Tryagain_After_Coalesce;
!                                     end if;
  
!                                     Put (Standard_Error,
!                                          "incorrectly parenthesized " &
!                                          "or malformed argument: ");
!                                     Put_Line (Standard_Error, Arg.all);
!                                     Errors := Errors + 1;
  
!                                  else
!                                     SwP := SwP + 3;
!                                     Endp := Arg'Last - 1;
!                                  end if;
  
!                                  while SwP <= Endp loop
!                                     declare
!                                        Dir_Is_Wild       : Boolean := False;
!                                        Dir_Maybe_Is_Wild : Boolean := False;
!                                        Dir_List : String_Access_List_Access;
!                                     begin
!                                        P2 := SwP;
  
!                                        while P2 < Endp
!                                          and then Arg (P2 + 1) /= ','
!                                        loop
  
!                                           --  A wildcard directory spec on
!                                           --  VMS will contain either * or
!                                           --  % or ...
  
!                                           if Arg (P2) = '*' then
!                                              Dir_Is_Wild := True;
  
!                                           elsif Arg (P2) = '%' then
!                                              Dir_Is_Wild := True;
  
!                                           elsif Dir_Maybe_Is_Wild
!                                             and then Arg (P2) = '.'
!                                             and then Arg (P2 + 1) = '.'
!                                           then
!                                              Dir_Is_Wild := True;
!                                              Dir_Maybe_Is_Wild := False;
  
!                                           elsif Dir_Maybe_Is_Wild then
!                                              Dir_Maybe_Is_Wild := False;
  
!                                           elsif Arg (P2) = '.'
!                                             and then Arg (P2 + 1) = '.'
!                                           then
!                                              Dir_Maybe_Is_Wild := True;
  
!                                           end if;
  
!                                           P2 := P2 + 1;
!                                        end loop;
  
!                                        if Dir_Is_Wild then
!                                           Dir_List := To_Canonical_File_List
!                                             (Arg (SwP .. P2), True);
  
!                                           for J in Dir_List.all'Range loop
!                                              Place_Unix_Switches
!                                                (Sw.Unix_String);
!                                              Place_Lower
!                                                (Dir_List.all (J).all);
!                                           end loop;
  
!                                        else
!                                           Place_Unix_Switches
!                                             (Sw.Unix_String);
!                                           Place_Lower
!                                             (To_Canonical_Dir_Spec
!                                                (Arg (SwP .. P2), False).all);
!                                        end if;
  
!                                        SwP := P2 + 2;
!                                     end;
!                                  end loop;
  
!                               when T_Directory =>
!                                  if SwP + 1 > Arg'Last then
!                                     Put (Standard_Error,
!                                          "missing directory for: ");
!                                     Put_Line (Standard_Error, Arg.all);
!                                     Errors := Errors + 1;
  
!                                  else
!                                     Place_Unix_Switches (Sw.Unix_String);
  
!                                     --  Some switches end in "=". No space
!                                     --  here
  
!                                     if Sw.Unix_String
!                                       (Sw.Unix_String'Last) /= '='
!                                     then
!                                        Place (' ');
!                                     end if;
  
!                                     Place_Lower
!                                       (To_Canonical_Dir_Spec
!                                          (Arg (SwP + 2 .. Arg'Last),
!                                           False).all);
!                                  end if;
  
!                               when T_File | T_No_Space_File =>
!                                  if SwP + 1 > Arg'Last then
!                                     Put (Standard_Error,
!                                          "missing file for: ");
!                                     Put_Line (Standard_Error, Arg.all);
!                                     Errors := Errors + 1;
  
!                                  else
!                                     Place_Unix_Switches (Sw.Unix_String);
  
!                                     --  Some switches end in "=". No space
!                                     --  here.
  
!                                     if Sw.Translation = T_File
!                                       and then Sw.Unix_String
!                                         (Sw.Unix_String'Last) /= '='
!                                     then
!                                        Place (' ');
!                                     end if;
  
!                                     Place_Lower
!                                       (To_Canonical_File_Spec
!                                          (Arg (SwP + 2 .. Arg'Last)).all);
!                                  end if;
  
!                               when T_Numeric =>
!                                  if
!                                    OK_Integer (Arg (SwP + 2 .. Arg'Last))
!                                  then
!                                     Place_Unix_Switches (Sw.Unix_String);
!                                     Place (Arg (SwP + 2 .. Arg'Last));
  
!                                  else
!                                     Put (Standard_Error, "argument for ");
!                                     Put (Standard_Error, Sw.Name.all);
!                                     Put_Line
!                                       (Standard_Error, " must be numeric");
!                                     Errors := Errors + 1;
!                                  end if;
  
!                               when T_Alphanumplus =>
!                                  if
!                                    OK_Alphanumerplus
!                                      (Arg (SwP + 2 .. Arg'Last))
!                                  then
!                                     Place_Unix_Switches (Sw.Unix_String);
!                                     Place (Arg (SwP + 2 .. Arg'Last));
  
!                                  else
!                                     Put (Standard_Error, "argument for ");
!                                     Put (Standard_Error, Sw.Name.all);
!                                     Put_Line (Standard_Error,
!                                               " must be alphanumeric");
!                                     Errors := Errors + 1;
!                                  end if;
  
!                               when T_String =>
  
!                                  --  A String value must be extended to the
!                                  --  end of the Argv, otherwise strings like
!                                  --  "foo/bar" get split at the slash.
!                                  --
!                                  --  The begining and ending of the string
!                                  --  are flagged with embedded nulls which
!                                  --  are removed when building the Spawn
!                                  --  call. Nulls are use because they won't
!                                  --  show up in a /? output. Quotes aren't
!                                  --  used because that would make it
!                                  --  difficult to embed them.
  
!                                  Place_Unix_Switches (Sw.Unix_String);
!                                  if Next_Arg_Idx /= Argv'Last then
!                                     Next_Arg_Idx := Argv'Last;
!                                     Arg := new String'
!                                       (Argv (Arg_Idx .. Next_Arg_Idx));
  
!                                     SwP := Arg'First;
!                                     while SwP < Arg'Last and then
!                                     Arg (SwP + 1) /= '=' loop
!                                        SwP := SwP + 1;
!                                     end loop;
!                                  end if;
!                                  Place (ASCII.NUL);
!                                  Place (Arg (SwP + 2 .. Arg'Last));
!                                  Place (ASCII.NUL);
  
!                               when T_Commands =>
  
!                                  --  Output -largs/-bargs/-cargs
  
!                                  Place (' ');
!                                  Place (Sw.Unix_String
!                                           (Sw.Unix_String'First ..
!                                              Sw.Unix_String'First + 5));
  
!                                  if Sw.Unix_String
!                                    (Sw.Unix_String'First + 7 ..
!                                       Sw.Unix_String'Last) =
!                                      "MAKE"
!                                  then
!                                     Make_Commands_Active := null;
  
!                                  else
!                                     --  Set source of new commands, also
!                                     --  setting this non-null indicates that
!                                     --  we are in the special commands mode
!                                     --  for processing the -xargs case.
  
!                                     Make_Commands_Active :=
!                                       Matching_Name
!                                         (Sw.Unix_String
!                                              (Sw.Unix_String'First + 7 ..
!                                                   Sw.Unix_String'Last),
!                                          Commands);
!                                  end if;
  
!                               when T_Options =>
!                                  if SwP + 1 > Arg'Last then
!                                     Place_Unix_Switches
!                                       (Sw.Options.Unix_String);
!                                     SwP := Endp + 1;
  
!                                  elsif Arg (SwP + 2) /= '(' then
!                                     SwP := SwP + 2;
!                                     Endp := Arg'Last;
  
!                                  elsif Arg (Arg'Last) /= ')' then
!                                     Put
!                                       (Standard_Error,
!                                        "incorrectly parenthesized " &
!                                        "argument: ");
!                                     Put_Line (Standard_Error, Arg.all);
!                                     Errors := Errors + 1;
!                                     SwP := Endp + 1;
  
!                                  else
!                                     SwP := SwP + 3;
!                                     Endp := Arg'Last - 1;
!                                  end if;
  
!                                  while SwP <= Endp loop
!                                     P2 := SwP;
  
!                                     while P2 < Endp
!                                       and then Arg (P2 + 1) /= ','
!                                     loop
!                                        P2 := P2 + 1;
!                                     end loop;
  
!                                     --  Option name is in Arg (SwP .. P2)
  
!                                     Opt := Matching_Name (Arg (SwP .. P2),
!                                                           Sw.Options);
  
!                                     if Opt /= null then
!                                        Place_Unix_Switches
!                                          (Opt.Unix_String);
!                                     end if;
  
!                                     SwP := P2 + 2;
!                                  end loop;
  
!                               when T_Other =>
!                                  Place_Unix_Switches
!                                    (new String'(Sw.Unix_String.all &
!                                                 Arg.all));
  
!                            end case;
!                         end if;
!                      end;
!                   end if;
  
!                   Arg_Idx := Next_Arg_Idx + 1;
!                end;
  
!                exit when Arg_Idx > Argv'Last;
  
!             end loop;
!          end Process_Argument;
  
!          Arg_Num := Arg_Num + 1;
        end loop;
  
        --  Gross error checking that the number of parameters is correct.
--- 1513,2054 ----
                                      Place ('.');
                                      Place (Command.Defext);
                                   end if;
+ 
+                                  Arg1_Idx := Next_Arg1_Idx + 1;
                                end;
  
!                               exit when Arg1_Idx > Arg'Last;
  
!                               --  Don't allow two or more commas in
!                               --  a row
  
!                               if Arg (Arg1_Idx) = ',' then
!                                  Arg1_Idx := Arg1_Idx + 1;
!                                  if Arg1_Idx > Arg'Last or else
!                                    Arg (Arg1_Idx) = ','
!                                  then
!                                     Put_Line
!                                       (Standard_Error,
!                                        "Malformed Parameter: " &
!                                        Arg.all);
!                                     Put (Standard_Error, "usage: ");
!                                     Put_Line (Standard_Error,
!                                               Command.Usage.all);
!                                     raise Error_Exit;
!                                  end if;
!                               end if;
  
!                            end loop;
!                         end;
!                   end case;
!                end if;
  
!                --  Reset Output_File_Expected, in case it was True
  
!                Output_File_Expected := False;
  
!                --  Qualifier argument
  
!             else
!                Output_File_Expected := False;
  
!                --  This code is too heavily nested, should be
!                --  separated out as separate subprogram ???
  
!                declare
!                   Sw   : Item_Ptr;
!                   SwP  : Natural;
!                   P2   : Natural;
!                   Endp : Natural := 0; -- avoid warning!
!                   Opt  : Item_Ptr;
  
!                begin
!                   SwP := Arg'First;
!                   while SwP < Arg'Last
!                     and then Arg (SwP + 1) /= '='
!                   loop
!                      SwP := SwP + 1;
!                   end loop;
  
!                   --  At this point, the switch name is in
!                   --  Arg (Arg'First..SwP) and if that is not the
!                   --  whole switch, then there is an equal sign at
!                   --  Arg (SwP + 1) and the rest of Arg is what comes
!                   --  after the equal sign.
  
!                   --  If make commands are active, see if we have
!                   --  another COMMANDS_TRANSLATION switch belonging
!                   --  to gnatmake.
! 
!                   if Make_Commands_Active /= null then
!                      Sw :=
!                        Matching_Name
!                          (Arg (Arg'First .. SwP),
!                           Command.Switches,
!                           Quiet => True);
! 
!                      if Sw /= null
!                        and then Sw.Translation = T_Commands
!                      then
!                         null;
! 
!                      else
!                         Sw :=
!                           Matching_Name
!                             (Arg (Arg'First .. SwP),
!                              Make_Commands_Active.Switches,
!                              Quiet => False);
!                      end if;
! 
!                      --  For case of GNAT MAKE or CHOP, if we cannot
!                      --  find the switch, then see if it is a
!                      --  recognized compiler switch instead, and if
!                      --  so process the compiler switch.
! 
!                   elsif Command.Name.all = "MAKE"
!                     or else Command.Name.all = "CHOP" then
!                      Sw :=
!                        Matching_Name
!                          (Arg (Arg'First .. SwP),
!                           Command.Switches,
!                           Quiet => True);
! 
!                      if Sw = null then
!                         Sw :=
!                           Matching_Name
!                             (Arg (Arg'First .. SwP),
!                              Matching_Name
!                                ("COMPILE", Commands).Switches,
!                              Quiet => False);
!                      end if;
! 
!                      --  For all other cases, just search the relevant
!                      --  command.
! 
!                   else
!                      Sw :=
!                        Matching_Name
!                          (Arg (Arg'First .. SwP),
!                           Command.Switches,
!                           Quiet => False);
!                   end if;
! 
!                   if Sw /= null then
!                      case Sw.Translation is
! 
!                         when T_Direct =>
!                            Place_Unix_Switches (Sw.Unix_String);
!                            if SwP < Arg'Last
!                              and then Arg (SwP + 1) = '='
!                            then
!                               Put (Standard_Error,
!                                    "qualifier options ignored: ");
!                               Put_Line (Standard_Error, Arg.all);
!                            end if;
! 
!                         when T_Directories =>
!                            if SwP + 1 > Arg'Last then
!                               Put (Standard_Error,
!                                    "missing directories for: ");
!                               Put_Line (Standard_Error, Arg.all);
!                               Errors := Errors + 1;
! 
!                            elsif Arg (SwP + 2) /= '(' then
!                               SwP := SwP + 2;
!                               Endp := Arg'Last;
! 
!                            elsif Arg (Arg'Last) /= ')' then
! 
!                               --  Remove spaces from a comma separated
!                               --  list of file names and adjust
!                               --  control variables accordingly.
! 
!                               if Arg_Num < Argument_Count and then
                                  (Argv (Argv'Last) = ',' xor
                                     Argument (Arg_Num + 1)
                                     (Argument (Arg_Num + 1)'First) = ',')
!                               then
!                                  Argv :=
!                                    new String'(Argv.all
!                                                & Argument
!                                                  (Arg_Num + 1));
                                   Arg_Num := Arg_Num + 1;
                                   Arg_Idx := Argv'First;
                                   Next_Arg_Idx :=
                                     Get_Arg_End (Argv.all, Arg_Idx);
                                   Arg := new String'
                                     (Argv (Arg_Idx .. Next_Arg_Idx));
!                                  goto Tryagain_After_Coalesce;
!                               end if;
  
!                               Put (Standard_Error,
!                                    "incorrectly parenthesized " &
!                                    "or malformed argument: ");
!                               Put_Line (Standard_Error, Arg.all);
!                               Errors := Errors + 1;
  
!                            else
!                               SwP := SwP + 3;
!                               Endp := Arg'Last - 1;
!                            end if;
  
!                            while SwP <= Endp loop
!                               declare
!                                  Dir_Is_Wild       : Boolean := False;
!                                  Dir_Maybe_Is_Wild : Boolean := False;
  
!                                  Dir_List : String_Access_List_Access;
  
                                begin
!                                  P2 := SwP;
  
!                                  while P2 < Endp
!                                    and then Arg (P2 + 1) /= ','
!                                  loop
!                                     --  A wildcard directory spec on
!                                     --  VMS will contain either * or
!                                     --  % or ...
  
!                                     if Arg (P2) = '*' then
!                                        Dir_Is_Wild := True;
  
!                                     elsif Arg (P2) = '%' then
!                                        Dir_Is_Wild := True;
  
!                                     elsif Dir_Maybe_Is_Wild
!                                       and then Arg (P2) = '.'
!                                       and then Arg (P2 + 1) = '.'
!                                     then
!                                        Dir_Is_Wild := True;
!                                        Dir_Maybe_Is_Wild := False;
  
!                                     elsif Dir_Maybe_Is_Wild then
!                                        Dir_Maybe_Is_Wild := False;
  
!                                     elsif Arg (P2) = '.'
!                                       and then Arg (P2 + 1) = '.'
!                                     then
!                                        Dir_Maybe_Is_Wild := True;
  
                                      end if;
  
+                                     P2 := P2 + 1;
                                   end loop;
  
!                                  if Dir_Is_Wild then
!                                     Dir_List :=
!                                       To_Canonical_File_List
!                                         (Arg (SwP .. P2), True);
  
!                                     for J in Dir_List.all'Range loop
!                                        Place_Unix_Switches
!                                          (Sw.Unix_String);
!                                        Place_Lower
!                                          (Dir_List.all (J).all);
!                                     end loop;
  
!                                  else
!                                     Place_Unix_Switches
!                                       (Sw.Unix_String);
!                                     Place_Lower
!                                       (To_Canonical_Dir_Spec
!                                          (Arg (SwP .. P2), False).all);
!                                  end if;
  
!                                  SwP := P2 + 2;
!                               end;
!                            end loop;
  
!                         when T_Directory =>
!                            if SwP + 1 > Arg'Last then
!                               Put (Standard_Error,
!                                    "missing directory for: ");
!                               Put_Line (Standard_Error, Arg.all);
!                               Errors := Errors + 1;
  
                             else
!                               Place_Unix_Switches (Sw.Unix_String);
  
!                               --  Some switches end in "=". No space
!                               --  here
  
!                               if Sw.Unix_String
!                                 (Sw.Unix_String'Last) /= '='
!                               then
!                                  Place (' ');
!                               end if;
  
!                               Place_Lower
!                                 (To_Canonical_Dir_Spec
!                                    (Arg (SwP + 2 .. Arg'Last),
!                                     False).all);
                             end if;
  
!                         when T_File | T_No_Space_File =>
!                            if SwP + 1 > Arg'Last then
!                               Put (Standard_Error,
!                                    "missing file for: ");
!                               Put_Line (Standard_Error, Arg.all);
!                               Errors := Errors + 1;
  
!                            else
!                               Place_Unix_Switches (Sw.Unix_String);
  
!                               --  Some switches end in "=". No space
!                               --  here.
  
!                               if Sw.Translation = T_File
!                                 and then Sw.Unix_String
!                                   (Sw.Unix_String'Last) /= '='
!                               then
!                                  Place (' ');
!                               end if;
  
!                               Place_Lower
!                                 (To_Canonical_File_Spec
!                                    (Arg (SwP + 2 .. Arg'Last)).all);
!                            end if;
  
!                         when T_Numeric =>
!                            if OK_Integer (Arg (SwP + 2 .. Arg'Last)) then
!                               Place_Unix_Switches (Sw.Unix_String);
!                               Place (Arg (SwP + 2 .. Arg'Last));
  
!                            else
!                               Put (Standard_Error, "argument for ");
!                               Put (Standard_Error, Sw.Name.all);
!                               Put_Line
!                                 (Standard_Error, " must be numeric");
!                               Errors := Errors + 1;
!                            end if;
  
!                         when T_Alphanumplus =>
!                            if OK_Alphanumerplus
!                              (Arg (SwP + 2 .. Arg'Last))
!                            then
!                               Place_Unix_Switches (Sw.Unix_String);
!                               Place (Arg (SwP + 2 .. Arg'Last));
  
!                            else
!                               Put (Standard_Error, "argument for ");
!                               Put (Standard_Error, Sw.Name.all);
!                               Put_Line (Standard_Error,
!                                         " must be alphanumeric");
!                               Errors := Errors + 1;
!                            end if;
  
!                         when T_String =>
  
!                            --  A String value must be extended to the
!                            --  end of the Argv, otherwise strings like
!                            --  "foo/bar" get split at the slash.
  
!                            --  The begining and ending of the string
!                            --  are flagged with embedded nulls which
!                            --  are removed when building the Spawn
!                            --  call. Nulls are use because they won't
!                            --  show up in a /? output. Quotes aren't
!                            --  used because that would make it
!                            --  difficult to embed them.
  
!                            Place_Unix_Switches (Sw.Unix_String);
  
!                            if Next_Arg_Idx /= Argv'Last then
!                               Next_Arg_Idx := Argv'Last;
!                               Arg := new String'
!                                 (Argv (Arg_Idx .. Next_Arg_Idx));
  
!                               SwP := Arg'First;
!                               while SwP < Arg'Last and then
!                               Arg (SwP + 1) /= '=' loop
!                                  SwP := SwP + 1;
!                               end loop;
!                            end if;
  
!                            Place (ASCII.NUL);
!                            Place (Arg (SwP + 2 .. Arg'Last));
!                            Place (ASCII.NUL);
  
!                         when T_Commands =>
  
!                            --  Output -largs/-bargs/-cargs
  
!                            Place (' ');
!                            Place (Sw.Unix_String
!                                     (Sw.Unix_String'First ..
!                                        Sw.Unix_String'First + 5));
  
!                            if Sw.Unix_String
!                              (Sw.Unix_String'First + 7 ..
!                                 Sw.Unix_String'Last) = "MAKE"
!                            then
!                               Make_Commands_Active := null;
  
!                            else
!                               --  Set source of new commands, also
!                               --  setting this non-null indicates that
!                               --  we are in the special commands mode
!                               --  for processing the -xargs case.
  
!                               Make_Commands_Active :=
!                                 Matching_Name
!                                   (Sw.Unix_String
!                                        (Sw.Unix_String'First + 7 ..
!                                             Sw.Unix_String'Last),
!                                    Commands);
!                            end if;
  
!                         when T_Options =>
!                            if SwP + 1 > Arg'Last then
!                               Place_Unix_Switches
!                                 (Sw.Options.Unix_String);
!                               SwP := Endp + 1;
  
!                            elsif Arg (SwP + 2) /= '(' then
!                               SwP := SwP + 2;
!                               Endp := Arg'Last;
  
!                            elsif Arg (Arg'Last) /= ')' then
!                               Put (Standard_Error,
!                                    "incorrectly parenthesized argument: ");
!                               Put_Line (Standard_Error, Arg.all);
!                               Errors := Errors + 1;
!                               SwP := Endp + 1;
  
!                            else
!                               SwP := SwP + 3;
!                               Endp := Arg'Last - 1;
!                            end if;
  
!                            while SwP <= Endp loop
!                               P2 := SwP;
  
!                               while P2 < Endp
!                                 and then Arg (P2 + 1) /= ','
!                               loop
!                                  P2 := P2 + 1;
!                               end loop;
  
!                               --  Option name is in Arg (SwP .. P2)
  
!                               Opt := Matching_Name (Arg (SwP .. P2),
!                                                     Sw.Options);
  
!                               if Opt /= null then
!                                  Place_Unix_Switches
!                                    (Opt.Unix_String);
!                               end if;
  
!                               SwP := P2 + 2;
!                            end loop;
  
!                         when T_Other =>
!                            Place_Unix_Switches
!                              (new String'(Sw.Unix_String.all &
!                                           Arg.all));
  
!                      end case;
!                   end if;
!                end;
!             end if;
  
!             Arg_Idx := Next_Arg_Idx + 1;
!          end;
  
!          exit when Arg_Idx > Argv'Last;
  
!       end loop;
  
!       if not Is_Open (Arg_File) then
!          Arg_Num := Arg_Num + 1;
!       end if;
!    end Process_Argument;
  
!    --------------------------------
!    -- Validate_Command_Or_Option --
!    --------------------------------
  
!    procedure Validate_Command_Or_Option (N : VMS_Data.String_Ptr) is
!    begin
!       pragma Assert (N'Length > 0);
  
!       for J in N'Range loop
!          if N (J) = '_' then
!             pragma Assert (N (J - 1) /= '_');
!             null;
!          else
!             pragma Assert (Is_Upper (N (J)) or else Is_Digit (N (J)));
!             null;
!          end if;
!       end loop;
!    end Validate_Command_Or_Option;
  
!    --------------------------
!    -- Validate_Unix_Switch --
!    --------------------------
  
!    procedure Validate_Unix_Switch (S : VMS_Data.String_Ptr) is
!    begin
!       if S (S'First) = '`' then
!          return;
!       end if;
  
!       pragma Assert (S (S'First) = '-' or else S (S'First) = '!');
  
!       for J in S'First + 1 .. S'Last loop
!          pragma Assert (S (J) /= ' ');
  
!          if S (J) = '!' then
!             pragma Assert (S (J - 1) = ',' and then S (J + 1) = '-');
!             null;
!          end if;
!       end loop;
!    end Validate_Unix_Switch;
  
!    --------------------
!    -- VMS_Conversion --
!    --------------------
  
!    procedure VMS_Conversion (The_Command : out Command_Type) is
!       Result : Command_Type := Undefined;
!       Result_Set : Boolean := False;
!    begin
!       Buffer.Init;
  
!       --  First we must preprocess the string form of the command and options
!       --  list into the internal form that we use.
  
!       Preprocess_Command_Data;
  
!       --  If no parameters, give complete list of commands
  
!       if Argument_Count = 0 then
!          Output_Version;
!          New_Line;
!          Put_Line ("List of available commands");
!          New_Line;
  
!          while Commands /= null loop
!             Put (Commands.Usage.all);
!             Set_Col (53);
!             Put_Line (Commands.Unix_String.all);
!             Commands := Commands.Next;
!          end loop;
  
!          raise Normal_Exit;
!       end if;
  
!       Arg_Num := 1;
  
!       --  Loop through arguments
  
!       while Arg_Num <= Argument_Count loop
!          Process_Argument (Result);
  
!          if not Result_Set then
!             The_Command := Result;
!             Result_Set := True;
!          end if;
        end loop;
  
        --  Gross error checking that the number of parameters is correct.
diff -Nrcpad gcc-3.4.3/gcc/ada/vms_conv.ads gcc-4.0.0/gcc/ada/vms_conv.ads
*** gcc-3.4.3/gcc/ada/vms_conv.ads	Fri Nov 14 10:24:43 2003
--- gcc-4.0.0/gcc/ada/vms_conv.ads	Mon Aug  9 12:24:22 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2003 Free Software Foundation, Inc.               --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2003-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 24,34 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This package is part of the GNAT driver. It contains a procedure
! --  VMS_Conversion to convert the command line in VMS form to the equivalent
! --  command line with switches for the GNAT tools that the GNAT driver will
! --  invoke.
! --
  --  The qualifier declarations are contained in package VMS_Data.
  
  with Table;
--- 24,32 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This package is part of the GNAT driver. It contains the procedure
! --  VMS_Conversion to convert a VMS command line to the equivalent command
! --  line with switches for the GNAT tools that the GNAT driver will invoke.
  --  The qualifier declarations are contained in package VMS_Data.
  
  with Table;
*************** package VMS_Conv is
*** 61,67 ****
     --  Set true if /? switch causes display of generated command (on VMS)
  
     -------------------
!    -- COMMAND TABLE --
     -------------------
  
     --  The command table contains an entry for each command recognized by
--- 59,65 ----
     --  Set true if /? switch causes display of generated command (on VMS)
  
     -------------------
!    -- Command Table --
     -------------------
  
     --  The command table contains an entry for each command recognized by
*************** package VMS_Conv is
*** 71,80 ****
     --  A parameter is defined as a whitespace bounded string, not begining
     --   with a slash. (But see note under FILES_OR_WILDCARD).
       (File,
!       --  A required file or directory parameter.
  
        Optional_File,
!       --  An optional file or directory parameter.
  
        Other_As_Is,
        --  A parameter that's passed through as is (not canonicalized)
--- 69,78 ----
     --  A parameter is defined as a whitespace bounded string, not begining
     --   with a slash. (But see note under FILES_OR_WILDCARD).
       (File,
!       --  A required file or directory parameter
  
        Optional_File,
!       --  An optional file or directory parameter
  
        Other_As_Is,
        --  A parameter that's passed through as is (not canonicalized)
*************** package VMS_Conv is
*** 96,106 ****
     type Parameter_Ref is access all Parameter_Array;
  
     type Command_Type is
!      (Bind, Chop, Clean, Compile, Elim, Find, Krunch, Library, Link, List,
!       Make, Name, Preprocess, Pretty, Shared, Stub, Xref, Undefined);
  
     type Alternate_Command is (Comp, Ls, Kr, Pp, Prep);
!    --  Alternate command libel for non VMS system
  
     Corresponding_To : constant array (Alternate_Command) of Command_Type :=
       (Comp  => Compile,
--- 94,122 ----
     type Parameter_Ref is access all Parameter_Array;
  
     type Command_Type is
!      (Bind,
!       Chop,
!       Clean,
!       Compile,
!       Elim,
!       Find,
!       Krunch,
!       Library,
!       Link,
!       List,
!       Make,
!       Metric,
!       Name,
!       Preprocess,
!       Pretty,
!       Setup,
!       Shared,
!       Stub,
!       Xref,
!       Undefined);
  
     type Alternate_Command is (Comp, Ls, Kr, Pp, Prep);
!    --  Alternate command label for non VMS system use
  
     Corresponding_To : constant array (Alternate_Command) of Command_Type :=
       (Comp  => Compile,
*************** package VMS_Conv is
*** 143,149 ****
     end record;
  
     -------------------------
!    -- INTERNAL STRUCTURES --
     -------------------------
  
     --  The switches and commands are defined by strings in the previous
--- 159,165 ----
     end record;
  
     -------------------------
!    -- Internal Structures --
     -------------------------
  
     --  The switches and commands are defined by strings in the previous
*************** package VMS_Conv is
*** 270,278 ****
     subtype Switch_Item  is Item (Id_Switch);
     subtype Option_Item  is Item (Id_Option);
  
!    ------------------
!    -- SWITCH TABLE --
!    ------------------
  
     --  The switch tables contain an entry for each switch recognized by the
     --  command processor. It is initialized by procedure Initialize.
--- 286,294 ----
     subtype Switch_Item  is Item (Id_Switch);
     subtype Option_Item  is Item (Id_Option);
  
!    -------------------
!    -- Switch Tables --
!    -------------------
  
     --  The switch tables contain an entry for each switch recognized by the
     --  command processor. It is initialized by procedure Initialize.
diff -Nrcpad gcc-3.4.3/gcc/ada/vms_data.ads gcc-4.0.0/gcc/ada/vms_data.ads
*** gcc-3.4.3/gcc/ada/vms_data.ads	Mon Jan  5 15:20:47 2004
--- gcc-4.0.0/gcc/ada/vms_data.ads	Thu Feb 10 13:50:32 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1996-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1996-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package VMS_Data is
*** 191,197 ****
     -- Switches for GNAT BIND --
     ----------------------------
  
- 
     S_Bind_Bind    : aliased constant S := "/BIND_FILE="                    &
                                              "ADA "                         &
                                                 "-A "                       &
--- 191,196 ----
*************** package VMS_Data is
*** 490,496 ****
                                              "!-b,!-v";
     --  NODOC (see /REPORT_ERRORS)
  
- 
     S_Bind_Restr   : aliased constant S := "/RESTRICTION_LIST "             &
                                              "-r";
     --        /NORESTRICTION_LIST (D)
--- 489,494 ----
*************** package VMS_Data is
*** 500,505 ****
--- 498,518 ----
     --   current unit. This is useful for code audit purposes, and also may be
     --   used to improve code generation in some cases.
  
+    S_Bind_Return  : aliased constant S := "/RETURN_CODES="                 &
+                                             "POSIX "                       &
+                                                "!-X1 "                     &
+                                             "VMS "                         &
+                                                "-X1";
+    --        /RETURN_CODES=POSIX (D)
+    --        /RETURN_CODES=VMS
+    --
+    --   Specifies the style of default exit code returned. Must be used in
+    --   conjunction with and match the Link qualifer with same name.
+    --
+    --        POSIX (D)   Return Posix success (0) by default.
+    --
+    --        VMS         Return VMS success (1) by default.
+ 
     S_Bind_RTS     : aliased constant S := "/RUNTIME_SYSTEM=|"              &
                                              "--RTS=|";
     --      /RUNTIME_SYSTEM=xxx
*************** package VMS_Data is
*** 517,524 ****
     --   for a directory.
  
     S_Bind_Shared  : aliased constant S := "/SHARED "                       &
!                                             "-shared";
!    --        /SHARED (D)
     --        /NOSHARED
     --
     --    Link against a shared GNAT run time when available.
--- 530,537 ----
     --   for a directory.
  
     S_Bind_Shared  : aliased constant S := "/SHARED "                       &
!                                             "-shared,!-static";
!    --        /SHARED
     --        /NOSHARED
     --
     --    Link against a shared GNAT run time when available.
*************** package VMS_Data is
*** 537,542 ****
--- 550,562 ----
     --
     --    When looking for source files also look in directories specified.
  
+    S_Bind_Static  : aliased constant S := "/STATIC "                       &
+                                             "-static,!-shared";
+    --        /STATIC
+    --        /NOSTATIC
+    --
+    --    Link against a static GNAT run time.
+ 
     S_Bind_Store   : aliased constant S := "/STORE_TRACEBACKS "             &
                                              "-E";
     --        /STORE_TRACEBACKS (D)
*************** package VMS_Data is
*** 631,641 ****
--- 651,663 ----
        S_Bind_Report  'Access,
        S_Bind_ReportX 'Access,
        S_Bind_Restr   'Access,
+       S_Bind_Return  'Access,
        S_Bind_RTS     'Access,
        S_Bind_Search  'Access,
        S_Bind_Shared  'Access,
        S_Bind_Slice   'Access,
        S_Bind_Source  'Access,
+       S_Bind_Static  'Access,
        S_Bind_Store   'Access,
        S_Bind_Time    'Access,
        S_Bind_Verbose 'Access,
*************** package VMS_Data is
*** 806,811 ****
--- 828,840 ----
     --
     --   Output a message explaining the usage of gnatclean.
  
+    S_Clean_Index   : aliased constant S := "/SOURCE_INDEX=#"               &
+                                              "-i#";
+    --        /SOURCE_INDEX=nnn
+    --
+    --   Specifies the index of the units in the source file
+    --   By default, source files are mono-unit and there is no index
+ 
     S_Clean_Mess    : aliased constant S := "/MESSAGES_PROJECT_FILE="       &
                                              "DEFAULT "                     &
                                                 "-vP0 "                     &
*************** package VMS_Data is
*** 825,831 ****
     --      HIGH        A great number of messages are output, most of them not
     --                  being useful for the user.
  
- 
     S_Clean_Object  : aliased constant S := "/OBJECT_SEARCH=*"              &
                                              "-aO*";
     --        /OBJECT_SEARCH=(directory,...)
--- 854,859 ----
*************** package VMS_Data is
*** 884,889 ****
--- 912,918 ----
        S_Clean_Ext    'Access,
        S_Clean_Full   'Access,
        S_Clean_Help   'Access,
+       S_Clean_Index  'Access,
        S_Clean_Mess   'Access,
        S_Clean_Object 'Access,
        S_Clean_Project'Access,
*************** package VMS_Data is
*** 920,933 ****
     --   Ada 95 program.
  
     S_GCC_Ada_95  : aliased constant S := "/95 "                            &
!                                              "!-gnat83";
     --        /95 (D)
     --
!    --   Same as /NO83.
!    --
!    --        /NO95
     --
!    --   Same as /83.
  
     S_GCC_Asm     : aliased constant S := "/ASM "                           &
                                               "-S,!-c";
--- 949,966 ----
     --   Ada 95 program.
  
     S_GCC_Ada_95  : aliased constant S := "/95 "                            &
!                                              "-gnat95";
     --        /95 (D)
     --
!    --   Allows GNAT to recognize the full range of Ada 95 constructs.
!    --   This is the normal default for GNAT Pro.
! 
!    S_GCC_Ada_05 : aliased constant S := "/05 "                            &
!                                              "-gnat05";
!    --        /05 (D)
     --
!    --   Allows GNAT to recognize all implemented proposed Ada 2005
!    --   extensions. See features file for list of implemented features.
  
     S_GCC_Asm     : aliased constant S := "/ASM "                           &
                                               "-S,!-c";
*************** package VMS_Data is
*** 935,941 ****
     --        /ASM
     --
     --   Use to cause the assembler source file to be generated, using S as the
!    --   filetype, instead of the object file.  This may be useful if you need
     --   to examine the generated assembly code.
  
     S_GCC_Checks  : aliased constant S := "/CHECKS="                        &
--- 968,974 ----
     --        /ASM
     --
     --   Use to cause the assembler source file to be generated, using S as the
!    --   filetype, instead of the object file. This may be useful if you need
     --   to examine the generated assembly code.
  
     S_GCC_Checks  : aliased constant S := "/CHECKS="                        &
*************** package VMS_Data is
*** 1488,1493 ****
--- 1521,1535 ----
     --      HIGH        A great number of messages are output, most of them not
     --                  being useful for the user.
  
+    S_GCC_Nesting  : aliased constant S := "/MAX_NESTING=#"                &
+                                              "-gnatyL#";
+    --        /MAX_NESTING=nnn
+    --
+    --   Set maximum level of nesting of constructs (including subprograms,
+    --   loops, blocks, packages, and conditionals).
+    --   The level of nesting must not exceed the given value nnn.
+    --   A value of zero disable this style check (not enabled by default).
+ 
     S_GCC_Noadc   : aliased constant S := "/NO_GNAT_ADC "                   &
                                               "-gnatA";
     --        /NO_GNAT_ADC
*************** package VMS_Data is
*** 1543,1548 ****
--- 1585,1592 ----
                                                 "-O1,!-O0,!-O2,!-O3 "       &
                                              "UNROLL_LOOPS "                &
                                                 "-funroll-loops "           &
+                                             "NO_STRICT_ALIASING "          &
+                                                "-fno-strict-aliasing "     &
                                              "INLINING "                    &
                                                 "-O3,!-O0,!-O1,!-O2";
     --        /NOOPTIMIZE (D)
*************** package VMS_Data is
*** 1554,1573 ****
     --      ALL (D)       Perform most optimizations, including those that
     --                    may be expensive.
     --
!    --      NONE          Do not do any optimizations.  Same as /NOOPTIMIZE.
     --
     --      SOME          Perform some optimizations, but omit ones that
!    --                    are costly.
     --
     --      DEVELOPMENT   Same as SOME.
     --
     --      INLINING      Full optimization, and also attempt automatic inlining
     --                    of small subprograms within a unit
     --
!    --      UNROLL_LOOPS  Try to unroll loops.  This keyword may be specified
!    --                    with any keyword above other than NONE.  Loop
     --                    unrolling usually, but not always, improves the
     --                    performance of programs.
  
     S_GCC_OptX    : aliased constant S := "/NOOPTIMIZE "                    &
                                              "-O0,!-O1,!-O2,!-O3";
--- 1598,1628 ----
     --      ALL (D)       Perform most optimizations, including those that
     --                    may be expensive.
     --
!    --      NONE          Do not do any optimizations. Same as /NOOPTIMIZE.
     --
     --      SOME          Perform some optimizations, but omit ones that
!    --                    are costly in compilation time.
     --
     --      DEVELOPMENT   Same as SOME.
     --
     --      INLINING      Full optimization, and also attempt automatic inlining
     --                    of small subprograms within a unit
     --
!    --      UNROLL_LOOPS  Try to unroll loops. This keyword may be specified
!    --                    with any keyword above other than NONE. Loop
     --                    unrolling usually, but not always, improves the
     --                    performance of programs.
+    --
+    --      NO_STRICT_ALIASING
+    --                    Suppress aliasing analysis. When optimization is
+    --                    enabled (ALL or SOME above), the compiler assumes
+    --                    that pointers do in fact point to legitimate values
+    --                    of the pointer type (allocated from the proper pool).
+    --                    If this assumption is violated, e.g. by the use of
+    --                    unchecked conversion, then it may be necessary to
+    --                    suppress this assumption using this keyword (which
+    --                    may be specified only in conjunction with any
+    --                    keyword above, other than NONE).
  
     S_GCC_OptX    : aliased constant S := "/NOOPTIMIZE "                    &
                                              "-O0,!-O1,!-O2,!-O3";
*************** package VMS_Data is
*** 1761,1766 ****
--- 1816,1823 ----
                                                 "-gnatyl "                  &
                                              "LINE_LENGTH "                 &
                                                 "-gnatym "                  &
+                                             "NONE "                        &
+                                                "-gnatyN "                  &
                                              "STANDARD_CASING "             &
                                                 "-gnatyn "                  &
                                              "ORDERED_SUBPROGRAMS "         &
*************** package VMS_Data is
*** 1774,1780 ****
                                              "SPECS "                       &
                                                 "-gnatys "                  &
                                              "TOKEN "                       &
!                                                "-gnatyt ";
     --        /NOSTYLE_CHECKS (D)
     --        /STYLE_CHECKS[=(keyword,[...])]
     --
--- 1831,1839 ----
                                              "SPECS "                       &
                                                 "-gnatys "                  &
                                              "TOKEN "                       &
!                                                "-gnatyt "                  &
!                                             "XTRA_PARENS "                 &
!                                                "-gnatyx ";
     --        /NOSTYLE_CHECKS (D)
     --        /STYLE_CHECKS[=(keyword,[...])]
     --
*************** package VMS_Data is
*** 1852,1862 ****
     --                               construction of box comments, as shown in
     --                               the following example:
     --
!    --
!    --                           ---------------------------
!    --                           -- This is a box comment --
!    --                           -- with two text lines.  --
!    --                           ---------------------------
     --
     --      END                  Check end/exit labels.
     --                           Optional labels on end statements ending
--- 1911,1919 ----
     --                               construction of box comments, as shown in
     --                               the following example:
     --
!    --                               ---------------------------
!    --                               -- This is a box comment --
!    --                               ---------------------------
     --
     --      END                  Check end/exit labels.
     --                           Optional labels on end statements ending
*************** package VMS_Data is
*** 1975,1980 ****
--- 2032,2039 ----
     --                           for possible special treatment of 80 character
     --                           lines.
     --
+    --      NONE                 Clear any previously set style checks.
+    --
     --      ORDERED_SUBPROGRAMS  Check order of subprogram bodies.
     --                           All subprogram bodies in a given scope (e.g.
     --                           a package body) must be in alphabetical order.
*************** package VMS_Data is
*** 2280,2285 ****
--- 2339,2353 ----
     --   debugging purposes or if you need to be sure what version of the
     --   compiler you are executing.
  
+    S_GCC_Verb_Asm : aliased constant S := "/VERBOSE_ASM " &
+                                           "-S,-verbose_asm,!-c";
+    --        /NOASM (D)
+    --        /ASM
+    --
+    --   Use to cause the assembler source file to be generated, using S as the
+    --   filetype, instead of the object file. This may be useful if you need
+    --   to examine the generated assembly code.
+ 
     S_GCC_Warn    : aliased constant S := "/WARNINGS="                      &
                                              "DEFAULT "                     &
                                                 "!-gnatws,!-gnatwe "        &
*************** package VMS_Data is
*** 2765,2770 ****
--- 2833,2839 ----
     GCC_Switches : aliased constant Switches :=
       (S_GCC_Ada_83  'Access,
        S_GCC_Ada_95  'Access,
+       S_GCC_Ada_05  'Access,
        S_GCC_Asm     'Access,
        S_GCC_Checks  'Access,
        S_GCC_ChecksX 'Access,
*************** package VMS_Data is
*** 2795,2800 ****
--- 2864,2870 ----
        S_GCC_List    'Access,
        S_GCC_Mapping 'Access,
        S_GCC_Mess    'Access,
+       S_GCC_Nesting 'Access,
        S_GCC_Noadc   'Access,
        S_GCC_Noload  'Access,
        S_GCC_Nostinc 'Access,
*************** package VMS_Data is
*** 2823,2828 ****
--- 2893,2899 ----
        S_GCC_Upcase  'Access,
        S_GCC_Valid   'Access,
        S_GCC_Verbose 'Access,
+       S_GCC_Verb_Asm'Access,
        S_GCC_Warn    'Access,
        S_GCC_WarnX   'Access,
        S_GCC_Wide    'Access,
*************** package VMS_Data is
*** 3313,3319 ****
     --        /RETURN_CODES=VMS
     --
     --   Specifies the style of codes returned by
!    --   Ada.Command_Line.Set_Exit_Status.
     --
     --        POSIX (D)   Return Posix compatible exit codes.
     --
--- 3384,3391 ----
     --        /RETURN_CODES=VMS
     --
     --   Specifies the style of codes returned by
!    --   Ada.Command_Line.Set_Exit_Status. Must be used in conjunction with
!    --   and match the Bind qualifer with the same name.
     --
     --        POSIX (D)   Return Posix compatible exit codes.
     --
*************** package VMS_Data is
*** 3397,3402 ****
--- 3469,3481 ----
     --   Example:
     --      /EXTERNAL_REFERENCE="DEBUG=TRUE"
  
+    S_List_Files   : aliased constant S := "/FILES=@"                       &
+                                             "-files=@";
+    --        /FILES=filename
+    --
+    --   Take as arguments the files that are listed in the specified
+    --   text file.
+ 
     S_List_Mess    : aliased constant S := "/MESSAGES_PROJECT_FILE="        &
                                              "DEFAULT "                     &
                                                 "-vP0 "                     &
*************** package VMS_Data is
*** 3487,3492 ****
--- 3566,3572 ----
        S_List_Current 'Access,
        S_List_Depend  'Access,
        S_List_Ext     'Access,
+       S_List_Files   'Access,
        S_List_Mess    'Access,
        S_List_Nostinc 'Access,
        S_List_Object  'Access,
*************** package VMS_Data is
*** 3713,3718 ****
--- 3793,3807 ----
     --   are found on the Ada object path, the new object and ALI files are
     --   created in the directory containing the source being compiled.
  
+    S_Make_Index   : aliased constant S := "/SOURCE_INDEX=#"               &
+                                              "-eI#";
+    --        /SOURCE_INDEX=nnn
+    --
+    --   Specifies the index of the units in the source file
+    --   By default, source files are mono-unit and there is no index
+    --   When /SOURCE_INDEX=nnn is specified, only one main may be specified
+    --   on the command line.
+ 
     S_Make_Library : aliased constant S := "/LIBRARY_SEARCH=*"              &
                                              "-L*";
     --        /LIBRARY_SEARCH=(directory[,...])
*************** package VMS_Data is
*** 3800,3805 ****
--- 3889,3902 ----
     --   will execute the elaboration routines of the package and its closure,
     --   then the finalization routines.
  
+    S_Make_Nonpro  : aliased constant S := "/NON_PROJECT_UNIT_COMPILATION " &
+                                             "-x";
+    --        /NON_PROJECT_UNIT_COMPILATION
+    --
+    --    Normally, when using project files, a unit that is not part of any
+    --    project file, cannot be compile. These units may be compile, when
+    --    needed, if this qualifier is specified.
+ 
     S_Make_Nostinc : aliased constant S := "/NOSTD_INCLUDES "               &
                                              "-nostdinc";
     --        /NOSTD_INCLUDES
*************** package VMS_Data is
*** 3940,3945 ****
--- 4037,4043 ----
        S_Make_Force   'Access,
        S_Make_Full    'Access,
        S_Make_Inplace 'Access,
+       S_Make_Index   'Access,
        S_Make_Library 'Access,
        S_Make_Link    'Access,
        S_Make_Make    'Access,
*************** package VMS_Data is
*** 3948,3953 ****
--- 4046,4052 ----
        S_Make_Minimal 'Access,
        S_Make_Nolink  'Access,
        S_Make_Nomain  'Access,
+       S_Make_Nonpro  'Access,
        S_Make_Nostinc 'Access,
        S_Make_Nostlib 'Access,
        S_Make_Object  'Access,
*************** package VMS_Data is
*** 3965,3970 ****
--- 4064,4309 ----
        S_Make_Use_Map 'Access,
        S_Make_Verbose 'Access);
  
+    ------------------------------
+    -- Switches for GNAT METRIC --
+    ------------------------------
+ 
+    S_Metric_Debug    : aliased constant S := "/DEBUG_OUTPUT "               &
+                                              "-dv";
+    --      /DEBUG_OUTPUT
+    --
+    --   Generate the debug information
+ 
+    S_Metric_Direct   : aliased constant S := "/DIRECTORY=@"                 &
+                                              "-d=@";
+    --      /DIRECTORY=pathname
+    --
+    --   Put the files with detailed metric information into the specified
+    --   directory
+ 
+    S_Metric_Element : aliased constant S := "/ELEMENT_METRICS="             &
+                                              "ALL "                         &
+                                               "!-ed,!-es,!-enl,!-eps,"      &
+                                               "!-eas,!-ept,!-eat,!-enu,"    &
+                                               "!-ec "                       &
+                                              "DECLARATION_TOTAL "           &
+                                               "-ed "                        &
+                                              "STATEMENT_TOTAL "             &
+                                               "-es "                        &
+                                              "LOOP_NESTING_MAX "            &
+                                               "-enl "                       &
+                                              "INT_SUBPROGRAMS "             &
+                                               "-eps "                       &
+                                              "SUBPROGRAMS_ALL "             &
+                                               "-eas "                       &
+                                              "INT_TYPES "                   &
+                                               "-ept "                       &
+                                              "TYPES_ALL "                   &
+                                               "-eat "                       &
+                                              "PROGRAM_NESTING_MAX "         &
+                                               "-enu "                       &
+                                              "CONSTRUCT_NESTING_MAX "       &
+                                               "-ec";
+    --       /ELEMENT_METRICS=(option, option ...)
+    --
+    --   Specifies the element metrics to be computed (if not set, all the
+    --   element metrics are set on, otherwise only specified metrics are
+    --   computed and reported)
+    --
+    --   option may be one of the following:
+    --
+    --     ALL (D)               All the element metrics are computed
+    --     DECLARATION_TOTAL     Compute the total number of declarations
+    --     STATEMENT_TOTAL       Compute the total number of statements
+    --     LOOP_NESTING_MAX      Compute the maximal loop nesting level
+    --     INT_SUBPROGRAMS       Compute the number of interface subprograms
+    --     SUBPROGRAMS_ALL       Compute the number of all the subprograms
+    --     INT_TYPES             Compute the number of interface types
+    --     TYPES_ALL             Compute the number of all the types
+    --     PROGRAM_NESTING_MAX   Compute the maximal program unit nesting level
+    --
+    --   All combinations of element metrics options are allowed.
+ 
+    S_Metric_Ext     : aliased constant S := "/EXTERNAL_REFERENCE=" & '"'    &
+                                              "-X" & '"';
+    --       /EXTERNAL_REFERENCE="name=val"
+    --
+    --   Specifies an external reference to the project manager. Useful only if
+    --   /PROJECT_FILE is used.
+    --
+    --   Example:
+    --      /EXTERNAL_REFERENCE="DEBUG=TRUE"
+ 
+    S_Metric_Files   : aliased constant S := "/FILES=@"                 &
+                                              "-files=@";
+    --      /FILES=filename
+    --
+    --   Take as arguments the files that are listed in the specified
+    --   text file.
+ 
+    S_Metric_Format  : aliased constant S := "/FORMAT_OUTPUT="               &
+                                              "DEFAULT "                     &
+                                               "!-x,!-nt,!-sfn "             &
+                                              "XML "                         &
+                                               "-x "                         &
+                                              "NO_TEXT "                     &
+                                               "-nt "                        &
+                                              "SHORT_SOURCE_FILE_NAME "      &
+                                               "-sfn";
+    --       /FORMAT_OUTPUT=(option, option ...)
+    --
+    --   Specifies the details of the tool output
+    --
+    --   option may be one of the following:
+    --
+    --     DEFAULT (D)             Generate the text output only, use full
+    --                             argument source names in global information
+    --     XML                     Generate the output in XML format
+    --     NO_TEXT                 Do not generate the text output (implies XML)
+    --     SHORT_SOURCE_FILE_NAME  Use short argument source names in output
+ 
+    S_Metric_Globout : aliased constant S := "/GLOBAL_OUTPUT=@"              &
+                                              "-og@";
+    --        /GLOBAL_OUTPUT=filename
+    --
+    --   Put the textual global metric information into the specified file
+ 
+    S_Metric_Line     : aliased constant S := "/LINE_METRICS="               &
+                                                 "ALL "                      &
+                                                  "!-la,!-lcode,!-lcomm,"    &
+                                                  "!-leol,!-lb "             &
+                                                 "LINES_ALL "                &
+                                                  "-la "                     &
+                                                 "CODE_LINES "               &
+                                                  "-lcode "                  &
+                                                 "COMENT_LINES "             &
+                                                  "-lcomm "                  &
+                                                 "MIXED_CODE_COMMENTS "      &
+                                                  "-leol "                   &
+                                                 "BLANK_LINES "              &
+                                                  "-lb ";
+    --      /LINE_METRICS=(option, option ...)
+ 
+    --   Specifies the line metrics to be computed (if not set, all the line
+    --   metrics are set on, otherwise only specified metrics are computed and
+    --   reported)
+    --
+    --   option may be one of the following:
+    --
+    --     ALL (D)              All the line metrics are computed
+    --     LINES_ALL            All lines are computed
+    --     CODE_LINES           Lines with Ada code are computed
+    --     COMENT_LINES         All comment lines are computed
+    --     MIXED_CODE_COMMENTS  All lines containing both code and comment are
+    --                          computed
+    --     BLANK_LINES          Blank lines are computed
+    --
+    --   All combinations of line metrics options are allowed.
+ 
+    S_Metric_Mess    : aliased constant S := "/MESSAGES_PROJECT_FILE="       &
+                                              "DEFAULT "                     &
+                                                 "-vP0 "                     &
+                                              "MEDIUM "                      &
+                                                 "-vP1 "                     &
+                                              "HIGH "                        &
+                                                 "-vP2";
+    --        /MESSAGES_PROJECT_FILE[=messages-option]
+    --
+    --   Specifies the "verbosity" of the parsing of project files.
+    --   messages-option may be one of the following:
+    --
+    --      DEFAULT (D)  No messages are output if there is no error or warning.
+    --
+    --      MEDIUM       A small number of messages are output.
+    --
+    --      HIGH         A great number of messages are output, most of them not
+    --                   being useful for the user.
+ 
+    S_Metric_Project : aliased constant S := "/PROJECT_FILE=<"               &
+                                              "-P>";
+    --        /PROJECT_FILE=filename
+    --
+    --   Specifies the main project file to be used. The project files rooted
+    --   at the main project file will be parsed before the invocation of the
+    --   binder.
+ 
+    S_Metric_Quiet    : aliased constant S := "/QUIET "                      &
+                                              "-q";
+    --        /NOQUIET (D)
+    --        /QUIET
+    --
+    --   Quiet mode: by default GNAT METRIC outputs to the standard error stream
+    --   the number of program units left to be processed. This option turns
+    --   this trace off.
+ 
+    S_Metric_Suffix  : aliased constant S := "/SUFFIX_DETAILS=" & '"'        &
+                                              "-o" & '"';
+    --        /SUFFIX_DETAILS=suffix
+    --
+    --   Use the given suffix as the suffix for the name of the file to place
+    --   the detailed metrics into.
+ 
+    S_Metric_Suppress : aliased constant S :=  "/SUPPRESS="                  &
+                                                "NOTHING "                   &
+                                                 "!-nocc,!-noec,!-nonl,"     &
+                                                 "!-ne,!-nolocal "           &
+                                                "CYCLOMATIC_COMPLEXITY "     &
+                                                 "-nocc "                    &
+                                                "ESSENTIAL_COMPLEXITY "      &
+                                                 "-noec "                    &
+                                                "MAXIMAL_LOOP_NESTING "      &
+                                                 "-nonl "                    &
+                                                "EXITS_AS_GOTOS "            &
+                                                 "-ne "                      &
+                                                "LOCAL_DETAILS "             &
+                                                 "-nolocal ";
+    --      /SUPPRESS=(option, option ...)
+    --
+    --   Specifies the metric that should not be computed
+    --
+    --   option may be one of the following:
+    --
+    --     NOTHING (D)             Do not suppress computation of any metric
+    --     CYCLOMATIC_COMPLEXITY   Do not compute the Cyclomatic Complexity
+    --     ESSENTIAL_COMPLEXITY    Do not compute the Essential Complexity
+    --     MAXIMAL_LOOP_NESTING    Do not compute the maximal loop nesting
+    --     EXITS_AS_GOTOS          Do not count EXIT statements as GOTOs when
+    --                             computing the  Essential Complexity
+    --     LOCAL_DETAILS           Do not compute the detailed metrics for local
+    --                             program units
+    --
+    --   All combinations of options are allowed.
+ 
+    S_Metric_Verbose  : aliased constant S := "/VERBOSE "                    &
+                                              "-v";
+    --        /NOVERBOSE (D)
+    --        /VERBOSE
+    --
+    --   Verbose mode.
+ 
+    S_Metric_XMLout  : aliased constant S := "/XML_OUTPUT=@"                 &
+                                              "-ox@";
+    --        /XML_OUTPUT=filename
+    --
+    --   Place the XML output into the specified file
+ 
+    Metric_Switches : aliased constant Switches :=
+      (S_Metric_Debug    'Access,
+       S_Metric_Direct   'Access,
+       S_Metric_Element  'Access,
+       S_Metric_Ext      'Access,
+       S_Metric_Files    'Access,
+       S_Metric_Format   'Access,
+       S_Metric_Globout  'Access,
+       S_Metric_Line     'Access,
+       S_Metric_Mess     'Access,
+       S_Metric_Project  'Access,
+       S_Metric_Quiet    'Access,
+       S_Metric_Suffix   'Access,
+       S_Metric_Suppress 'Access,
+       S_Metric_Verbose  'Access,
+       S_Metric_XMLout   'Access);
+ 
     ----------------------------
     -- Switches for GNAT NAME --
     ----------------------------
*************** package VMS_Data is
*** 4151,4157 ****
  
     S_Pretty_Align  : aliased constant S := "/ALIGN="                       &
                                             "DEFAULT "                      &
!                                                "-A1234 "                   &
                                             "OFF "                          &
                                                 "-A0 "                      &
                                             "COLONS "                       &
--- 4490,4496 ----
  
     S_Pretty_Align  : aliased constant S := "/ALIGN="                       &
                                             "DEFAULT "                      &
!                                                "-A12345 "                  &
                                             "OFF "                          &
                                                 "-A0 "                      &
                                             "COLONS "                       &
*************** package VMS_Data is
*** 4161,4167 ****
                                             "STATEMENTS "                   &
                                                 "-A3 "                      &
                                             "ARROWS "                       &
!                                               "-A4";
     --        /ALIGN[=align-option, align-option, ...]
     --
     --   Set alignments. By default, all alignments (colons in declarations,
--- 4500,4508 ----
                                             "STATEMENTS "                   &
                                                 "-A3 "                      &
                                             "ARROWS "                       &
!                                                "-A4 "                      &
!                                            "COMPONENT_CLAUSES "            &
!                                                "-A5";
     --        /ALIGN[=align-option, align-option, ...]
     --
     --   Set alignments. By default, all alignments (colons in declarations,
*************** package VMS_Data is
*** 4170,4180 ****
     --
     --   align-option may be one of the following:
     --
!    --      OFF (D)      Set all alignments to OFF
!    --      COLONS       Set alignments of colons in declarations to ON
!    --      DECLARATIONS Set alignments of initialisations in declarations to ON
!    --      STATEMENTS   Set alignments of assignments statements to ON
!    --      ARROWS       Set alignments of arrow delimiters to ON.
     --
     --   Specifying one of the ON options without first specifying the OFF
     --   option has no effect, because by default all alignments are set to ON.
--- 4511,4524 ----
     --
     --   align-option may be one of the following:
     --
!    --      OFF (D)           Set all alignments to OFF
!    --      COLONS            Set alignments of colons in declarations to ON
!    --      DECLARATIONS      Set alignments of initialisations in declarations
!    --                        to ON
!    --      STATEMENTS        Set alignments of assignments statements to ON
!    --      ARROWS            Set alignments of arrow delimiters to ON.
!    --      COMPONENT_CLAUSES Set alignments of AT keywords in component
!    --                        clauses ON
     --
     --   Specifying one of the ON options without first specifying the OFF
     --   option has no effect, because by default all alignments are set to ON.
*************** package VMS_Data is
*** 4197,4202 ****
--- 4541,4548 ----
     --      UPPER_CASE
  
     S_Pretty_Comments  : aliased constant S := "/COMMENTS_LAYOUT="          &
+                                               "UNTOUCHED "                 &
+                                                  "-c0 "                    &
                                                "DEFAULT "                   &
                                                   "-c1 "                    &
                                                "STANDARD_INDENT "           &
*************** package VMS_Data is
*** 4207,4223 ****
                                                   "-c4";
     --        /COMMENTS_LAYOUT[=layout-option, layout-option, ...]
     --
!    --   Set the comment layout. By default, comments use the GNAT style comment
!    --   line indentation.
     --   layout-option may be one of the following:
     --
     --     DEFAULT (D)         GNAT style comment line indentation
     --     STANDARD_INDENT     Standard comment line indentation
     --     GNAT_BEGINNING      GNAT style comment beginning
     --     REFORMAT            Reformat comment blocks
     --
     --     All combinations of layout options are allowed, except for DEFAULT
!    --     and STANDARD_INDENT which are mutually exclusive.
     --
     --     The difference between "GNAT style comment line indentation" and
     --     "standard comment line indentation" is the following: for standard
--- 4553,4572 ----
                                                   "-c4";
     --        /COMMENTS_LAYOUT[=layout-option, layout-option, ...]
     --
!    --   Set the comment layout. By default, comments use the GNAT style
!    --   comment line indentation.
!    --
     --   layout-option may be one of the following:
     --
+    --     UNTOUCHED           All the comments remain unchanged
     --     DEFAULT (D)         GNAT style comment line indentation
     --     STANDARD_INDENT     Standard comment line indentation
     --     GNAT_BEGINNING      GNAT style comment beginning
     --     REFORMAT            Reformat comment blocks
     --
     --     All combinations of layout options are allowed, except for DEFAULT
!    --     and STANDARD_INDENT which are mutually exclusive, and also if
!    --     UNTOUCHED is specified, this must be the only option.
     --
     --     The difference between "GNAT style comment line indentation" and
     --     "standard comment line indentation" is the following: for standard
*************** package VMS_Data is
*** 4350,4355 ****
--- 4699,4711 ----
     --   used in the default dictionary file, are defined in the GNAT User's
     --   Guide.
  
+    S_Pretty_Files     : aliased constant S := "/FILES=@"                   &
+                                                  "-files=@";
+    --      /FILES=filename
+    --
+    --   Take as arguments the files that are listed in the specified
+    --   text file.
+ 
     S_Pretty_Forced    : aliased constant S := "/FORCED_OUTPUT=@"           &
                                                   "-of@";
     --        /FORCED_OUTPUT=file
*************** package VMS_Data is
*** 4443,4448 ****
--- 4799,4811 ----
     --
     --      MIXED_CASE        Names are in mixed case.
  
+    S_Pretty_No_Backup : aliased constant S := "/NO_BACKUP "               &
+                                                  "-rnb";
+    --        /REPLACE_NO_BACKUP
+    --
+    --   Replace the argument source with the pretty-printed source without
+    --   creating any backup copy of the argument source.
+ 
     S_Pretty_No_Labels : aliased constant S := "/NO_MISSED_LABELS "         &
                                                   "-e";
     --        /NO_MISSED_LABELS
*************** package VMS_Data is
*** 4456,4461 ****
--- 4819,4830 ----
     --   source. This qualifier /NO_MISSED_LABELS suppresses this insertion,
     --   so that the formatted source reflects the original.
  
+    S_Pretty_Notabs    : aliased constant S := "/NOTABS "                   &
+                                                  "-notabs";
+    --        /NOTABS
+    --
+    --   Replace all tabulations in comments with spaces.
+ 
     S_Pretty_Output    : aliased constant S := "/OUTPUT=@"                  &
                                                "-o@";
     --        /OUTPUT=file
*************** package VMS_Data is
*** 4478,4484 ****
                                                "LOWER_CASE "                &
                                                   "-pL "                    &
                                                "UPPER_CASE "                &
!       --        /PRAGMA_CASING[=pragma-option]
     --
     --   Set the case of pragma identifiers. The default is Mixed case.
     --   pragma-option may be one of the following:
--- 4847,4854 ----
                                                "LOWER_CASE "                &
                                                   "-pL "                    &
                                                "UPPER_CASE "                &
!                                                  "-pU";
!    --        /PRAGMA_CASING[=pragma-option]
     --
     --   Set the case of pragma identifiers. The default is Mixed case.
     --   pragma-option may be one of the following:
*************** package VMS_Data is
*** 4486,4494 ****
     --      MIXED_CASE (D)
     --      LOWER_CASE
     --      UPPER_CASE
!                                               "-pU";
!    S_Pretty_Project   : aliased constant S := "/PROJECT_FILE=<"               &
!                                             "-P>";
     --        /PROJECT_FILE=filename
     --
     --   Specifies the main project file to be used. The project files rooted
--- 4856,4864 ----
     --      MIXED_CASE (D)
     --      LOWER_CASE
     --      UPPER_CASE
! 
!    S_Pretty_Project   : aliased constant S := "/PROJECT_FILE=<"            &
!                                                 "-P>";
     --        /PROJECT_FILE=filename
     --
     --   Specifies the main project file to be used. The project files rooted
*************** package VMS_Data is
*** 4504,4509 ****
--- 4874,4885 ----
     --   argument source into filename.NPP. If filename.NPP already exists,
     --   report an error and exit.
  
+    S_Pretty_RTS       : aliased constant S := "/RUNTIME_SYSTEM=|"          &
+                                                "--RTS=|";
+    --        /RUNTIME_SYSTEM=xxx
+    --
+    --    Compile against an alternate runtime system named xxx or RTS-xxx.
+ 
     S_Pretty_Search    : aliased constant S := "/SEARCH=*"                  &
                                                "-I*";
     --        /SEARCH=(directory[,...])
*************** package VMS_Data is
*** 4552,4557 ****
--- 4928,4934 ----
        S_Pretty_Ext       'Access,
        S_Pretty_Current   'Access,
        S_Pretty_Dico      'Access,
+       S_Pretty_Files     'Access,
        S_Pretty_Forced    'Access,
        S_Pretty_Formfeed  'Access,
        S_Pretty_Indent    'Access,
*************** package VMS_Data is
*** 4560,4577 ****
--- 4937,5020 ----
        S_Pretty_Maxind    'Access,
        S_Pretty_Mess      'Access,
        S_Pretty_Names     'Access,
+       S_Pretty_No_Backup 'Access,
        S_Pretty_No_Labels 'Access,
+       S_Pretty_Notabs    'Access,
        S_Pretty_Output    'Access,
        S_Pretty_Override  'Access,
        S_Pretty_Pragma    'Access,
        S_Pretty_Replace   'Access,
        S_Pretty_Project   'Access,
+       S_Pretty_RTS       'Access,
        S_Pretty_Search    'Access,
        S_Pretty_Specific  'Access,
        S_Pretty_Standard  'Access,
        S_Pretty_Verbose   'Access,
        S_Pretty_Warnings  'Access);
  
+    -----------------------------
+    -- Switches for GNAT SETUP --
+    -----------------------------
+ 
+    S_Setup_Ext       : aliased constant S := "/EXTERNAL_REFERENCE=" & '"' &
+                                               "-X" & '"';
+    --        /EXTERNAL_REFERENCE="name=val"
+    --
+    --   Specifies an external reference to the project manager. Useful only if
+    --   /PROJECT_FILE is used.
+    --
+    --   Example:
+    --      /EXTERNAL_REFERENCE="DEBUG=TRUE"
+ 
+    S_Setup_Mess      : aliased constant S := "/MESSAGES_PROJECT_FILE="    &
+                                              "DEFAULT "                   &
+                                                 "-vP0 "                   &
+                                              "MEDIUM "                    &
+                                                 "-vP1 "                   &
+                                              "HIGH "                      &
+                                                 "-vP2";
+    --        /MESSAGES_PROJECT_FILE[=messages-option]
+    --
+    --   Specifies the "verbosity" of the parsing of project files.
+    --   messages-option may be one of the following:
+    --
+    --      DEFAULT (D)  No messages are output if there is no error or warning.
+    --
+    --      MEDIUM       A small number of messages are output.
+    --
+    --      HIGH         A great number of messages are output, most of them not
+    --                   being useful for the user.
+ 
+    S_Setup_Project   : aliased constant S := "/PROJECT_FILE=<"            &
+                                                 "-P>";
+    --        /PROJECT_FILE=filename
+    --
+    --   Specifies the main project file to be used. The project files rooted
+    --   at the main project file are parsed and non existing object
+    --   directories, library directories and exec directories are created.
+ 
+    S_Setup_Quiet     : aliased constant S := "/QUIET "                    &
+                                             "-q";
+    --        /NOQUIET (D)
+    --        /QUIET
+    --
+    --   Work quietly, only output warnings and errors.
+ 
+    S_Setup_Verbose   : aliased constant S := "/VERBOSE "                  &
+                                               "-v";
+    --        /NOVERBOSE (D)
+    --        /VERBOSE
+    --
+    --   Verbose mode; GNAT PRETTY generates version information and then a
+    --   trace of the actions it takes to produce or obtain the ASIS tree.
+ 
+    Setup_Switches : aliased constant Switches :=
+      (S_Setup_Ext     'Access,
+       S_Setup_Mess    'Access,
+       S_Setup_Project 'Access,
+       S_Setup_Quiet   'Access,
+       S_Setup_Verbose 'Access);
+ 
     ------------------------------
     -- Switches for GNAT SHARED --
     ------------------------------
diff -Nrcpad gcc-3.4.3/gcc/ada/vxaddr2line.adb gcc-4.0.0/gcc/ada/vxaddr2line.adb
*** gcc-3.4.3/gcc/ada/vxaddr2line.adb	Mon Jan  5 15:20:47 2004
--- gcc-4.0.0/gcc/ada/vxaddr2line.adb	Wed Dec  8 11:49:07 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2002-2003 Ada Core Technologies, Inc.           --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2002-2004 Ada Core Technologies, Inc.           --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** procedure VxAddr2Line is
*** 81,87 ****
  
     --  All supported architectures
     type Architecture is
!      (WINDOWS_POWERPC,
        WINDOWS_M68K,
        SOLARIS_POWERPC,
        DEC_ALPHA);
--- 81,88 ----
  
     --  All supported architectures
     type Architecture is
!      (SOLARIS_I586,
!       WINDOWS_POWERPC,
        WINDOWS_M68K,
        SOLARIS_POWERPC,
        DEC_ALPHA);
*************** procedure VxAddr2Line is
*** 125,130 ****
--- 126,136 ----
           Nm_Binary           => null,
           Addr_Digits_To_Skip => 0,
           Bt_Offset_From_Call => 0),
+       SOLARIS_I586 =>
+         (Addr2line_Binary    => null,
+          Nm_Binary           => null,
+          Addr_Digits_To_Skip => 0,
+          Bt_Offset_From_Call => -2),
        DEC_ALPHA =>
          (Addr2line_Binary    => null,
           Nm_Binary           => null,
*************** procedure VxAddr2Line is
*** 212,218 ****
           return;
     end Detect_Arch;
  
- 
     -----------
     -- Error --
     -----------
--- 218,223 ----
*************** procedure VxAddr2Line is
*** 224,230 ****
        raise Program_Error;
     end Error;
  
- 
     --------------------------
     -- Get_Reference_Offset --
     --------------------------
--- 229,234 ----
diff -Nrcpad gcc-3.4.3/gcc/ada/widechar.adb gcc-4.0.0/gcc/ada/widechar.adb
*** gcc-3.4.3/gcc/ada/widechar.adb	Tue Oct 21 13:42:23 2003
--- gcc-4.0.0/gcc/ada/widechar.adb	Thu Feb 10 13:50:48 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** with System.WCh_Con; use System.WCh_Con;
*** 42,55 ****
  
  package body Widechar is
  
     ---------------------------
     -- Is_Start_Of_Wide_Char --
     ---------------------------
  
     function Is_Start_Of_Wide_Char
!      (S    : Source_Buffer_Ptr;
!       P    : Source_Ptr)
!       return Boolean
     is
     begin
        case Wide_Character_Encoding_Method is
--- 42,1591 ----
  
  package body Widechar is
  
+    pragma Style_Checks (Off);
+    --  Allow long lines in this unit
+ 
+    -----------------------------------------------
+    -- Tables for UTF_32 Categorization Routines --
+    -----------------------------------------------
+ 
+    --  Note these tables are derived from those given in AI-285. For details
+    --  see //www.ada-auth.org/cgi-bin/cvsweb.cgi/AIs/AI-00285.TXT?rev=1.22.
+ 
+    type UTF_32_Range is record
+       Lo : Char_Code;
+       Hi : Char_Code;
+    end record;
+ 
+    type UTF_32_Ranges is array (Positive range <>) of UTF_32_Range;
+ 
+    --  The following array includes all characters considered digits, i.e.
+    --  all characters from the Unicode table with categories:
+ 
+    --    Number, Decimal Digit (Nd)
+ 
+    UTF_32_Digits : constant UTF_32_Ranges := (
+      (16#00030#, 16#00039#),  -- DIGIT ZERO .. DIGIT NINE
+      (16#00660#, 16#00669#),  -- ARABIC-INDIC DIGIT ZERO .. ARABIC-INDIC DIGIT NINE
+      (16#006F0#, 16#006F9#),  -- EXTENDED ARABIC-INDIC DIGIT ZERO .. EXTENDED ARABIC-INDIC DIGIT NINE
+      (16#00966#, 16#0096F#),  -- DEVANAGARI DIGIT ZERO .. DEVANAGARI DIGIT NINE
+      (16#009E6#, 16#009EF#),  -- BENGALI DIGIT ZERO .. BENGALI DIGIT NINE
+      (16#00A66#, 16#00A6F#),  -- GURMUKHI DIGIT ZERO .. GURMUKHI DIGIT NINE
+      (16#00AE6#, 16#00AEF#),  -- GUJARATI DIGIT ZERO .. GUJARATI DIGIT NINE
+      (16#00B66#, 16#00B6F#),  -- ORIYA DIGIT ZERO .. ORIYA DIGIT NINE
+      (16#00BE7#, 16#00BEF#),  -- TAMIL DIGIT ONE .. TAMIL DIGIT NINE
+      (16#00C66#, 16#00C6F#),  -- TELUGU DIGIT ZERO .. TELUGU DIGIT NINE
+      (16#00CE6#, 16#00CEF#),  -- KANNADA DIGIT ZERO .. KANNADA DIGIT NINE
+      (16#00D66#, 16#00D6F#),  -- MALAYALAM DIGIT ZERO .. MALAYALAM DIGIT NINE
+      (16#00E50#, 16#00E59#),  -- THAI DIGIT ZERO .. THAI DIGIT NINE
+      (16#00ED0#, 16#00ED9#),  -- LAO DIGIT ZERO .. LAO DIGIT NINE
+      (16#00F20#, 16#00F29#),  -- TIBETAN DIGIT ZERO .. TIBETAN DIGIT NINE
+      (16#01040#, 16#01049#),  -- MYANMAR DIGIT ZERO .. MYANMAR DIGIT NINE
+      (16#01369#, 16#01371#),  -- ETHIOPIC DIGIT ONE .. ETHIOPIC DIGIT NINE
+      (16#017E0#, 16#017E9#),  -- KHMER DIGIT ZERO .. KHMER DIGIT NINE
+      (16#01810#, 16#01819#),  -- MONGOLIAN DIGIT ZERO .. MONGOLIAN DIGIT NINE
+      (16#01946#, 16#0194F#),  -- LIMBU DIGIT ZERO .. LIMBU DIGIT NINE
+      (16#0FF10#, 16#0FF19#),  -- FULLWIDTH DIGIT ZERO .. FULLWIDTH DIGIT NINE
+      (16#104A0#, 16#104A9#),  -- OSMANYA DIGIT ZERO .. OSMANYA DIGIT NINE
+      (16#1D7CE#, 16#1D7FF#)); -- MATHEMATICAL BOLD DIGIT ZERO .. MATHEMATICAL MONOSPACE DIGIT NINE
+ 
+    --  The following table includes all characters considered letters, i.e.
+    --  all characters from the Unicode table with categories:
+ 
+    --    Letter, Uppercase (Lu)
+    --    Letter, Lowercase (Ll)
+    --    Letter, Titlecase (Lt)
+    --    Letter, Modifier (Lm)
+    --    Letter, Other (Lo)
+    --    Number, Letter (Nl)
+ 
+    UTF_32_Letters : constant UTF_32_Ranges := (
+      (16#00041#, 16#0005A#),  -- LATIN CAPITAL LETTER A .. LATIN CAPITAL LETTER Z
+      (16#00061#, 16#0007A#),  -- LATIN SMALL LETTER A .. LATIN SMALL LETTER Z
+      (16#000AA#, 16#000AA#),  -- FEMININE ORDINAL INDICATOR .. FEMININE ORDINAL INDICATOR
+      (16#000B5#, 16#000B5#),  -- MICRO SIGN .. MICRO SIGN
+      (16#000BA#, 16#000BA#),  -- MASCULINE ORDINAL INDICATOR .. MASCULINE ORDINAL INDICATOR
+      (16#000C0#, 16#000D6#),  -- LATIN CAPITAL LETTER A WITH GRAVE .. LATIN CAPITAL LETTER O WITH DIAERESIS
+      (16#000D8#, 16#000F6#),  -- LATIN CAPITAL LETTER O WITH STROKE .. LATIN SMALL LETTER O WITH DIAERESIS
+      (16#000F8#, 16#00236#),  -- LATIN SMALL LETTER O WITH STROKE .. LATIN SMALL LETTER T WITH CURL
+      (16#00250#, 16#002C1#),  -- LATIN SMALL LETTER TURNED A .. MODIFIER LETTER REVERSED GLOTTAL STOP
+      (16#002C6#, 16#002D1#),  -- MODIFIER LETTER CIRCUMFLEX ACCENT .. MODIFIER LETTER HALF TRIANGULAR COLON
+      (16#002E0#, 16#002E4#),  -- MODIFIER LETTER SMALL GAMMA .. MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+      (16#002EE#, 16#002EE#),  -- MODIFIER LETTER DOUBLE APOSTROPHE .. MODIFIER LETTER DOUBLE APOSTROPHE
+      (16#0037A#, 16#0037A#),  -- GREEK YPOGEGRAMMENI .. GREEK YPOGEGRAMMENI
+      (16#00386#, 16#00386#),  -- GREEK CAPITAL LETTER ALPHA WITH TONOS .. GREEK CAPITAL LETTER ALPHA WITH TONOS
+      (16#00388#, 16#0038A#),  -- GREEK CAPITAL LETTER EPSILON WITH TONOS .. GREEK CAPITAL LETTER IOTA WITH TONOS
+      (16#0038C#, 16#0038C#),  -- GREEK CAPITAL LETTER OMICRON WITH TONOS .. GREEK CAPITAL LETTER OMICRON WITH TONOS
+      (16#0038E#, 16#003A1#),  -- GREEK CAPITAL LETTER UPSILON WITH TONOS .. GREEK CAPITAL LETTER RHO
+      (16#003A3#, 16#003CE#),  -- GREEK CAPITAL LETTER SIGMA .. GREEK SMALL LETTER OMEGA WITH TONOS
+      (16#003D0#, 16#003F5#),  -- GREEK BETA SYMBOL .. GREEK LUNATE EPSILON SYMBOL
+      (16#003F7#, 16#003FB#),  -- GREEK CAPITAL LETTER SHO .. GREEK SMALL LETTER SAN
+      (16#00400#, 16#00481#),  -- CYRILLIC CAPITAL LETTER IE WITH GRAVE .. CYRILLIC SMALL LETTER KOPPA
+      (16#0048A#, 16#004CE#),  -- CYRILLIC CAPITAL LETTER SHORT I WITH TAIL .. CYRILLIC SMALL LETTER EM WITH TAIL
+      (16#004D0#, 16#004F5#),  -- CYRILLIC CAPITAL LETTER A WITH BREVE .. CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+      (16#004F8#, 16#004F9#),  -- CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS .. CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+      (16#00500#, 16#0050F#),  -- CYRILLIC CAPITAL LETTER KOMI DE .. CYRILLIC SMALL LETTER KOMI TJE
+      (16#00531#, 16#00556#),  -- ARMENIAN CAPITAL LETTER AYB .. ARMENIAN CAPITAL LETTER FEH
+      (16#00559#, 16#00559#),  -- ARMENIAN MODIFIER LETTER LEFT HALF RING .. ARMENIAN MODIFIER LETTER LEFT HALF RING
+      (16#00561#, 16#00587#),  -- ARMENIAN SMALL LETTER AYB .. ARMENIAN SMALL LIGATURE ECH YIWN
+      (16#005D0#, 16#005EA#),  -- HEBREW LETTER ALEF .. HEBREW LETTER TAV
+      (16#005F0#, 16#005F2#),  -- HEBREW LIGATURE YIDDISH DOUBLE VAV .. HEBREW LIGATURE YIDDISH DOUBLE YOD
+      (16#00621#, 16#0063A#),  -- ARABIC LETTER HAMZA .. ARABIC LETTER GHAIN
+      (16#00640#, 16#0064A#),  -- ARABIC TATWEEL .. ARABIC LETTER YEH
+      (16#0066E#, 16#0066F#),  -- ARABIC LETTER DOTLESS BEH .. ARABIC LETTER DOTLESS QAF
+      (16#00671#, 16#006D3#),  -- ARABIC LETTER ALEF WASLA .. ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+      (16#006D5#, 16#006D5#),  -- ARABIC LETTER AE .. ARABIC LETTER AE
+      (16#006E5#, 16#006E6#),  -- ARABIC SMALL WAW .. ARABIC SMALL YEH
+      (16#006EE#, 16#006EF#),  -- ARABIC LETTER DAL WITH INVERTED V .. ARABIC LETTER REH WITH INVERTED V
+      (16#006FA#, 16#006FC#),  -- ARABIC LETTER SHEEN WITH DOT BELOW .. ARABIC LETTER GHAIN WITH DOT BELOW
+      (16#006FF#, 16#006FF#),  -- ARABIC LETTER HEH WITH INVERTED V .. ARABIC LETTER HEH WITH INVERTED V
+      (16#00710#, 16#00710#),  -- SYRIAC LETTER ALAPH .. SYRIAC LETTER ALAPH
+      (16#00712#, 16#0072F#),  -- SYRIAC LETTER BETH .. SYRIAC LETTER PERSIAN DHALATH
+      (16#0074D#, 16#0074F#),  -- SYRIAC LETTER SOGDIAN ZHAIN .. SYRIAC LETTER SOGDIAN FE
+      (16#00780#, 16#007A5#),  -- THAANA LETTER HAA .. THAANA LETTER WAAVU
+      (16#007B1#, 16#007B1#),  -- THAANA LETTER NAA .. THAANA LETTER NAA
+      (16#00904#, 16#00939#),  -- DEVANAGARI LETTER SHORT A .. DEVANAGARI LETTER HA
+      (16#0093D#, 16#0093D#),  -- DEVANAGARI SIGN AVAGRAHA .. DEVANAGARI SIGN AVAGRAHA
+      (16#00950#, 16#00950#),  -- DEVANAGARI OM .. DEVANAGARI OM
+      (16#00958#, 16#00961#),  -- DEVANAGARI LETTER QA .. DEVANAGARI LETTER VOCALIC LL
+      (16#00985#, 16#0098C#),  -- BENGALI LETTER A .. BENGALI LETTER VOCALIC L
+      (16#0098F#, 16#00990#),  -- BENGALI LETTER E .. BENGALI LETTER AI
+      (16#00993#, 16#009A8#),  -- BENGALI LETTER O .. BENGALI LETTER NA
+      (16#009AA#, 16#009B0#),  -- BENGALI LETTER PA .. BENGALI LETTER RA
+      (16#009B2#, 16#009B2#),  -- BENGALI LETTER LA .. BENGALI LETTER LA
+      (16#009B6#, 16#009B9#),  -- BENGALI LETTER SHA .. BENGALI LETTER HA
+      (16#009BD#, 16#009BD#),  -- BENGALI SIGN AVAGRAHA .. BENGALI SIGN AVAGRAHA
+      (16#009DC#, 16#009DD#),  -- BENGALI LETTER RRA .. BENGALI LETTER RHA
+      (16#009DF#, 16#009E1#),  -- BENGALI LETTER YYA .. BENGALI LETTER VOCALIC LL
+      (16#009F0#, 16#009F1#),  -- BENGALI LETTER RA WITH MIDDLE DIAGONAL .. BENGALI LETTER RA WITH LOWER DIAGONAL
+      (16#00A05#, 16#00A0A#),  -- GURMUKHI LETTER A .. GURMUKHI LETTER UU
+      (16#00A0F#, 16#00A10#),  -- GURMUKHI LETTER EE .. GURMUKHI LETTER AI
+      (16#00A13#, 16#00A28#),  -- GURMUKHI LETTER OO .. GURMUKHI LETTER NA
+      (16#00A2A#, 16#00A30#),  -- GURMUKHI LETTER PA .. GURMUKHI LETTER RA
+      (16#00A32#, 16#00A33#),  -- GURMUKHI LETTER LA .. GURMUKHI LETTER LLA
+      (16#00A35#, 16#00A36#),  -- GURMUKHI LETTER VA .. GURMUKHI LETTER SHA
+      (16#00A38#, 16#00A39#),  -- GURMUKHI LETTER SA .. GURMUKHI LETTER HA
+      (16#00A59#, 16#00A5C#),  -- GURMUKHI LETTER KHHA .. GURMUKHI LETTER RRA
+      (16#00A5E#, 16#00A5E#),  -- GURMUKHI LETTER FA .. GURMUKHI LETTER FA
+      (16#00A72#, 16#00A74#),  -- GURMUKHI IRI .. GURMUKHI EK ONKAR
+      (16#00A85#, 16#00A8D#),  -- GUJARATI LETTER A .. GUJARATI VOWEL CANDRA E
+      (16#00A8F#, 16#00A91#),  -- GUJARATI LETTER E .. GUJARATI VOWEL CANDRA O
+      (16#00A93#, 16#00AA8#),  -- GUJARATI LETTER O .. GUJARATI LETTER NA
+      (16#00AAA#, 16#00AB0#),  -- GUJARATI LETTER PA .. GUJARATI LETTER RA
+      (16#00AB2#, 16#00AB3#),  -- GUJARATI LETTER LA .. GUJARATI LETTER LLA
+      (16#00AB5#, 16#00AB9#),  -- GUJARATI LETTER VA .. GUJARATI LETTER HA
+      (16#00ABD#, 16#00ABD#),  -- GUJARATI SIGN AVAGRAHA .. GUJARATI SIGN AVAGRAHA
+      (16#00AD0#, 16#00AD0#),  -- GUJARATI OM .. GUJARATI OM
+      (16#00AE0#, 16#00AE1#),  -- GUJARATI LETTER VOCALIC RR .. GUJARATI LETTER VOCALIC LL
+      (16#00B05#, 16#00B0C#),  -- ORIYA LETTER A .. ORIYA LETTER VOCALIC L
+      (16#00B0F#, 16#00B10#),  -- ORIYA LETTER E .. ORIYA LETTER AI
+      (16#00B13#, 16#00B28#),  -- ORIYA LETTER O .. ORIYA LETTER NA
+      (16#00B2A#, 16#00B30#),  -- ORIYA LETTER PA .. ORIYA LETTER RA
+      (16#00B32#, 16#00B33#),  -- ORIYA LETTER LA .. ORIYA LETTER LLA
+      (16#00B35#, 16#00B39#),  -- ORIYA LETTER VA .. ORIYA LETTER HA
+      (16#00B3D#, 16#00B3D#),  -- ORIYA SIGN AVAGRAHA .. ORIYA SIGN AVAGRAHA
+      (16#00B5C#, 16#00B5D#),  -- ORIYA LETTER RRA .. ORIYA LETTER RHA
+      (16#00B5F#, 16#00B61#),  -- ORIYA LETTER YYA .. ORIYA LETTER VOCALIC LL
+      (16#00B71#, 16#00B71#),  -- ORIYA LETTER WA .. ORIYA LETTER WA
+      (16#00B83#, 16#00B83#),  -- TAMIL SIGN VISARGA .. TAMIL SIGN VISARGA
+      (16#00B85#, 16#00B8A#),  -- TAMIL LETTER A .. TAMIL LETTER UU
+      (16#00B8E#, 16#00B90#),  -- TAMIL LETTER E .. TAMIL LETTER AI
+      (16#00B92#, 16#00B95#),  -- TAMIL LETTER O .. TAMIL LETTER KA
+      (16#00B99#, 16#00B9A#),  -- TAMIL LETTER NGA .. TAMIL LETTER CA
+      (16#00B9C#, 16#00B9C#),  -- TAMIL LETTER JA .. TAMIL LETTER JA
+      (16#00B9E#, 16#00B9F#),  -- TAMIL LETTER NYA .. TAMIL LETTER TTA
+      (16#00BA3#, 16#00BA4#),  -- TAMIL LETTER NNA .. TAMIL LETTER TA
+      (16#00BA8#, 16#00BAA#),  -- TAMIL LETTER NA .. TAMIL LETTER PA
+      (16#00BAE#, 16#00BB5#),  -- TAMIL LETTER MA .. TAMIL LETTER VA
+      (16#00BB7#, 16#00BB9#),  -- TAMIL LETTER SSA .. TAMIL LETTER HA
+      (16#00C05#, 16#00C0C#),  -- TELUGU LETTER A .. TELUGU LETTER VOCALIC L
+      (16#00C0E#, 16#00C10#),  -- TELUGU LETTER E .. TELUGU LETTER AI
+      (16#00C12#, 16#00C28#),  -- TELUGU LETTER O .. TELUGU LETTER NA
+      (16#00C2A#, 16#00C33#),  -- TELUGU LETTER PA .. TELUGU LETTER LLA
+      (16#00C35#, 16#00C39#),  -- TELUGU LETTER VA .. TELUGU LETTER HA
+      (16#00C60#, 16#00C61#),  -- TELUGU LETTER VOCALIC RR .. TELUGU LETTER VOCALIC LL
+      (16#00C85#, 16#00C8C#),  -- KANNADA LETTER A .. KANNADA LETTER VOCALIC L
+      (16#00C8E#, 16#00C90#),  -- KANNADA LETTER E .. KANNADA LETTER AI
+      (16#00C92#, 16#00CA8#),  -- KANNADA LETTER O .. KANNADA LETTER NA
+      (16#00CAA#, 16#00CB3#),  -- KANNADA LETTER PA .. KANNADA LETTER LLA
+      (16#00CB5#, 16#00CB9#),  -- KANNADA LETTER VA .. KANNADA LETTER HA
+      (16#00CBD#, 16#00CBD#),  -- KANNADA SIGN AVAGRAHA .. KANNADA SIGN AVAGRAHA
+      (16#00CDE#, 16#00CDE#),  -- KANNADA LETTER FA .. KANNADA LETTER FA
+      (16#00CE0#, 16#00CE1#),  -- KANNADA LETTER VOCALIC RR .. KANNADA LETTER VOCALIC LL
+      (16#00D05#, 16#00D0C#),  -- MALAYALAM LETTER A .. MALAYALAM LETTER VOCALIC L
+      (16#00D0E#, 16#00D10#),  -- MALAYALAM LETTER E .. MALAYALAM LETTER AI
+      (16#00D12#, 16#00D28#),  -- MALAYALAM LETTER O .. MALAYALAM LETTER NA
+      (16#00D2A#, 16#00D39#),  -- MALAYALAM LETTER PA .. MALAYALAM LETTER HA
+      (16#00D60#, 16#00D61#),  -- MALAYALAM LETTER VOCALIC RR .. MALAYALAM LETTER VOCALIC LL
+      (16#00D85#, 16#00D96#),  -- SINHALA LETTER AYANNA .. SINHALA LETTER AUYANNA
+      (16#00D9A#, 16#00DB1#),  -- SINHALA LETTER ALPAPRAANA KAYANNA .. SINHALA LETTER DANTAJA NAYANNA
+      (16#00DB3#, 16#00DBB#),  -- SINHALA LETTER SANYAKA DAYANNA .. SINHALA LETTER RAYANNA
+      (16#00DBD#, 16#00DBD#),  -- SINHALA LETTER DANTAJA LAYANNA .. SINHALA LETTER DANTAJA LAYANNA
+      (16#00DC0#, 16#00DC6#),  -- SINHALA LETTER VAYANNA .. SINHALA LETTER FAYANNA
+      (16#00E01#, 16#00E30#),  -- THAI CHARACTER KO KAI .. THAI CHARACTER SARA A
+      (16#00E32#, 16#00E33#),  -- THAI CHARACTER SARA AA .. THAI CHARACTER SARA AM
+      (16#00E40#, 16#00E46#),  -- THAI CHARACTER SARA E .. THAI CHARACTER MAIYAMOK
+      (16#00E81#, 16#00E82#),  -- LAO LETTER KO .. LAO LETTER KHO SUNG
+      (16#00E84#, 16#00E84#),  -- LAO LETTER KHO TAM .. LAO LETTER KHO TAM
+      (16#00E87#, 16#00E88#),  -- LAO LETTER NGO .. LAO LETTER CO
+      (16#00E8A#, 16#00E8A#),  -- LAO LETTER SO TAM .. LAO LETTER SO TAM
+      (16#00E8D#, 16#00E8D#),  -- LAO LETTER NYO .. LAO LETTER NYO
+      (16#00E94#, 16#00E97#),  -- LAO LETTER DO .. LAO LETTER THO TAM
+      (16#00E99#, 16#00E9F#),  -- LAO LETTER NO .. LAO LETTER FO SUNG
+      (16#00EA1#, 16#00EA3#),  -- LAO LETTER MO .. LAO LETTER LO LING
+      (16#00EA5#, 16#00EA5#),  -- LAO LETTER LO LOOT .. LAO LETTER LO LOOT
+      (16#00EA7#, 16#00EA7#),  -- LAO LETTER WO .. LAO LETTER WO
+      (16#00EAA#, 16#00EAB#),  -- LAO LETTER SO SUNG .. LAO LETTER HO SUNG
+      (16#00EAD#, 16#00EB0#),  -- LAO LETTER O .. LAO VOWEL SIGN A
+      (16#00EB2#, 16#00EB3#),  -- LAO VOWEL SIGN AA .. LAO VOWEL SIGN AM
+      (16#00EBD#, 16#00EBD#),  -- LAO SEMIVOWEL SIGN NYO .. LAO SEMIVOWEL SIGN NYO
+      (16#00EC0#, 16#00EC4#),  -- LAO VOWEL SIGN E .. LAO VOWEL SIGN AI
+      (16#00EC6#, 16#00EC6#),  -- LAO KO LA .. LAO KO LA
+      (16#00EDC#, 16#00EDD#),  -- LAO HO NO .. LAO HO MO
+      (16#00F00#, 16#00F00#),  -- TIBETAN SYLLABLE OM .. TIBETAN SYLLABLE OM
+      (16#00F40#, 16#00F47#),  -- TIBETAN LETTER KA .. TIBETAN LETTER JA
+      (16#00F49#, 16#00F6A#),  -- TIBETAN LETTER NYA .. TIBETAN LETTER FIXED-FORM RA
+      (16#00F88#, 16#00F8B#),  -- TIBETAN SIGN LCE TSA CAN .. TIBETAN SIGN GRU MED RGYINGS
+      (16#01000#, 16#01021#),  -- MYANMAR LETTER KA .. MYANMAR LETTER A
+      (16#01023#, 16#01027#),  -- MYANMAR LETTER I .. MYANMAR LETTER E
+      (16#01029#, 16#0102A#),  -- MYANMAR LETTER O .. MYANMAR LETTER AU
+      (16#01050#, 16#01055#),  -- MYANMAR LETTER SHA .. MYANMAR LETTER VOCALIC LL
+      (16#010A0#, 16#010C5#),  -- GEORGIAN CAPITAL LETTER AN .. GEORGIAN CAPITAL LETTER HOE
+      (16#010D0#, 16#010F8#),  -- GEORGIAN LETTER AN .. GEORGIAN LETTER ELIFI
+      (16#01100#, 16#01159#),  -- HANGUL CHOSEONG KIYEOK .. HANGUL CHOSEONG YEORINHIEUH
+      (16#0115F#, 16#011A2#),  -- HANGUL CHOSEONG FILLER .. HANGUL JUNGSEONG SSANGARAEA
+      (16#011A8#, 16#011F9#),  -- HANGUL JONGSEONG KIYEOK .. HANGUL JONGSEONG YEORINHIEUH
+      (16#01200#, 16#01206#),  -- ETHIOPIC SYLLABLE HA .. ETHIOPIC SYLLABLE HO
+      (16#01208#, 16#01246#),  -- ETHIOPIC SYLLABLE LA .. ETHIOPIC SYLLABLE QO
+      (16#01248#, 16#01248#),  -- ETHIOPIC SYLLABLE QWA .. ETHIOPIC SYLLABLE QWA
+      (16#0124A#, 16#0124D#),  -- ETHIOPIC SYLLABLE QWI .. ETHIOPIC SYLLABLE QWE
+      (16#01250#, 16#01256#),  -- ETHIOPIC SYLLABLE QHA .. ETHIOPIC SYLLABLE QHO
+      (16#01258#, 16#01258#),  -- ETHIOPIC SYLLABLE QHWA .. ETHIOPIC SYLLABLE QHWA
+      (16#0125A#, 16#0125D#),  -- ETHIOPIC SYLLABLE QHWI .. ETHIOPIC SYLLABLE QHWE
+      (16#01260#, 16#01286#),  -- ETHIOPIC SYLLABLE BA .. ETHIOPIC SYLLABLE XO
+      (16#01288#, 16#01288#),  -- ETHIOPIC SYLLABLE XWA .. ETHIOPIC SYLLABLE XWA
+      (16#0128A#, 16#0128D#),  -- ETHIOPIC SYLLABLE XWI .. ETHIOPIC SYLLABLE XWE
+      (16#01290#, 16#012AE#),  -- ETHIOPIC SYLLABLE NA .. ETHIOPIC SYLLABLE KO
+      (16#012B0#, 16#012B0#),  -- ETHIOPIC SYLLABLE KWA .. ETHIOPIC SYLLABLE KWA
+      (16#012B2#, 16#012B5#),  -- ETHIOPIC SYLLABLE KWI .. ETHIOPIC SYLLABLE KWE
+      (16#012B8#, 16#012BE#),  -- ETHIOPIC SYLLABLE KXA .. ETHIOPIC SYLLABLE KXO
+      (16#012C0#, 16#012C0#),  -- ETHIOPIC SYLLABLE KXWA .. ETHIOPIC SYLLABLE KXWA
+      (16#012C2#, 16#012C5#),  -- ETHIOPIC SYLLABLE KXWI .. ETHIOPIC SYLLABLE KXWE
+      (16#012C8#, 16#012CE#),  -- ETHIOPIC SYLLABLE WA .. ETHIOPIC SYLLABLE WO
+      (16#012D0#, 16#012D6#),  -- ETHIOPIC SYLLABLE PHARYNGEAL A .. ETHIOPIC SYLLABLE PHARYNGEAL O
+      (16#012D8#, 16#012EE#),  -- ETHIOPIC SYLLABLE ZA .. ETHIOPIC SYLLABLE YO
+      (16#012F0#, 16#0130E#),  -- ETHIOPIC SYLLABLE DA .. ETHIOPIC SYLLABLE GO
+      (16#01310#, 16#01310#),  -- ETHIOPIC SYLLABLE GWA .. ETHIOPIC SYLLABLE GWA
+      (16#01312#, 16#01315#),  -- ETHIOPIC SYLLABLE GWI .. ETHIOPIC SYLLABLE GWE
+      (16#01318#, 16#0131E#),  -- ETHIOPIC SYLLABLE GGA .. ETHIOPIC SYLLABLE GGO
+      (16#01320#, 16#01346#),  -- ETHIOPIC SYLLABLE THA .. ETHIOPIC SYLLABLE TZO
+      (16#01348#, 16#0135A#),  -- ETHIOPIC SYLLABLE FA .. ETHIOPIC SYLLABLE FYA
+      (16#013A0#, 16#013F4#),  -- CHEROKEE LETTER A .. CHEROKEE LETTER YV
+      (16#01401#, 16#0166C#),  -- CANADIAN SYLLABICS E .. CANADIAN SYLLABICS CARRIER TTSA
+      (16#0166F#, 16#01676#),  -- CANADIAN SYLLABICS QAI .. CANADIAN SYLLABICS NNGAA
+      (16#01681#, 16#0169A#),  -- OGHAM LETTER BEITH .. OGHAM LETTER PEITH
+      (16#016A0#, 16#016EA#),  -- RUNIC LETTER FEHU FEOH FE F .. RUNIC LETTER X
+      (16#016EE#, 16#016F0#),  -- RUNIC ARLAUG SYMBOL .. RUNIC BELGTHOR SYMBOL
+      (16#01700#, 16#0170C#),  -- TAGALOG LETTER A .. TAGALOG LETTER YA
+      (16#0170E#, 16#01711#),  -- TAGALOG LETTER LA .. TAGALOG LETTER HA
+      (16#01720#, 16#01731#),  -- HANUNOO LETTER A .. HANUNOO LETTER HA
+      (16#01740#, 16#01751#),  -- BUHID LETTER A .. BUHID LETTER HA
+      (16#01760#, 16#0176C#),  -- TAGBANWA LETTER A .. TAGBANWA LETTER YA
+      (16#0176E#, 16#01770#),  -- TAGBANWA LETTER LA .. TAGBANWA LETTER SA
+      (16#01780#, 16#017B3#),  -- KHMER LETTER KA .. KHMER INDEPENDENT VOWEL QAU
+      (16#017D7#, 16#017D7#),  -- KHMER SIGN LEK TOO .. KHMER SIGN LEK TOO
+      (16#017DC#, 16#017DC#),  -- KHMER SIGN AVAKRAHASANYA .. KHMER SIGN AVAKRAHASANYA
+      (16#01820#, 16#01877#),  -- MONGOLIAN LETTER A .. MONGOLIAN LETTER MANCHU ZHA
+      (16#01880#, 16#018A8#),  -- MONGOLIAN LETTER ALI GALI ANUSVARA ONE .. MONGOLIAN LETTER MANCHU ALI GALI BHA
+      (16#01900#, 16#0191C#),  -- LIMBU VOWEL-CARRIER LETTER .. LIMBU LETTER HA
+      (16#01950#, 16#0196D#),  -- TAI LE LETTER KA .. TAI LE LETTER AI
+      (16#01970#, 16#01974#),  -- TAI LE LETTER TONE-2 .. TAI LE LETTER TONE-6
+      (16#01D00#, 16#01D6B#),  -- LATIN LETTER SMALL CAPITAL A .. LATIN SMALL LETTER UE
+      (16#01E00#, 16#01E9B#),  -- LATIN CAPITAL LETTER A WITH RING BELOW .. LATIN SMALL LETTER LONG S WITH DOT ABOVE
+      (16#01EA0#, 16#01EF9#),  -- LATIN CAPITAL LETTER A WITH DOT BELOW .. LATIN SMALL LETTER Y WITH TILDE
+      (16#01F00#, 16#01F15#),  -- GREEK SMALL LETTER ALPHA WITH PSILI .. GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+      (16#01F18#, 16#01F1D#),  -- GREEK CAPITAL LETTER EPSILON WITH PSILI .. GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+      (16#01F20#, 16#01F45#),  -- GREEK SMALL LETTER ETA WITH PSILI .. GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+      (16#01F48#, 16#01F4D#),  -- GREEK CAPITAL LETTER OMICRON WITH PSILI .. GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+      (16#01F50#, 16#01F57#),  -- GREEK SMALL LETTER UPSILON WITH PSILI .. GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+      (16#01F59#, 16#01F59#),  -- GREEK CAPITAL LETTER UPSILON WITH DASIA .. GREEK CAPITAL LETTER UPSILON WITH DASIA
+      (16#01F5B#, 16#01F5B#),  -- GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA .. GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+      (16#01F5D#, 16#01F5D#),  -- GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA .. GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+      (16#01F5F#, 16#01F7D#),  -- GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI .. GREEK SMALL LETTER OMEGA WITH OXIA
+      (16#01F80#, 16#01FB4#),  -- GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI .. GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+      (16#01FB6#, 16#01FBC#),  -- GREEK SMALL LETTER ALPHA WITH PERISPOMENI .. GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+      (16#01FBE#, 16#01FBE#),  -- GREEK PROSGEGRAMMENI .. GREEK PROSGEGRAMMENI
+      (16#01FC2#, 16#01FC4#),  -- GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI .. GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+      (16#01FC6#, 16#01FCC#),  -- GREEK SMALL LETTER ETA WITH PERISPOMENI .. GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+      (16#01FD0#, 16#01FD3#),  -- GREEK SMALL LETTER IOTA WITH VRACHY .. GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+      (16#01FD6#, 16#01FDB#),  -- GREEK SMALL LETTER IOTA WITH PERISPOMENI .. GREEK CAPITAL LETTER IOTA WITH OXIA
+      (16#01FE0#, 16#01FEC#),  -- GREEK SMALL LETTER UPSILON WITH VRACHY .. GREEK CAPITAL LETTER RHO WITH DASIA
+      (16#01FF2#, 16#01FF4#),  -- GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI .. GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+      (16#01FF6#, 16#01FFC#),  -- GREEK SMALL LETTER OMEGA WITH PERISPOMENI .. GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+      (16#02071#, 16#02071#),  -- SUPERSCRIPT LATIN SMALL LETTER I .. SUPERSCRIPT LATIN SMALL LETTER I
+      (16#0207F#, 16#0207F#),  -- SUPERSCRIPT LATIN SMALL LETTER N .. SUPERSCRIPT LATIN SMALL LETTER N
+      (16#02102#, 16#02102#),  -- DOUBLE-STRUCK CAPITAL C .. DOUBLE-STRUCK CAPITAL C
+      (16#02107#, 16#02107#),  -- EULER CONSTANT .. EULER CONSTANT
+      (16#0210A#, 16#02113#),  -- SCRIPT SMALL G .. SCRIPT SMALL L
+      (16#02115#, 16#02115#),  -- DOUBLE-STRUCK CAPITAL N .. DOUBLE-STRUCK CAPITAL N
+      (16#02119#, 16#0211D#),  -- DOUBLE-STRUCK CAPITAL P .. DOUBLE-STRUCK CAPITAL R
+      (16#02124#, 16#02124#),  -- DOUBLE-STRUCK CAPITAL Z .. DOUBLE-STRUCK CAPITAL Z
+      (16#02126#, 16#02126#),  -- OHM SIGN .. OHM SIGN
+      (16#02128#, 16#02128#),  -- BLACK-LETTER CAPITAL Z .. BLACK-LETTER CAPITAL Z
+      (16#0212A#, 16#0212D#),  -- KELVIN SIGN .. BLACK-LETTER CAPITAL C
+      (16#0212F#, 16#02131#),  -- SCRIPT SMALL E .. SCRIPT CAPITAL F
+      (16#02133#, 16#02139#),  -- SCRIPT CAPITAL M .. INFORMATION SOURCE
+      (16#0213D#, 16#0213F#),  -- DOUBLE-STRUCK SMALL GAMMA .. DOUBLE-STRUCK CAPITAL PI
+      (16#02145#, 16#02149#),  -- DOUBLE-STRUCK ITALIC CAPITAL D .. DOUBLE-STRUCK ITALIC SMALL J
+      (16#02160#, 16#02183#),  -- ROMAN NUMERAL ONE .. ROMAN NUMERAL REVERSED ONE HUNDRED
+      (16#03005#, 16#03007#),  -- IDEOGRAPHIC ITERATION MARK .. IDEOGRAPHIC NUMBER ZERO
+      (16#03021#, 16#03029#),  -- HANGZHOU NUMERAL ONE .. HANGZHOU NUMERAL NINE
+      (16#03031#, 16#03035#),  -- VERTICAL KANA REPEAT MARK .. VERTICAL KANA REPEAT MARK LOWER HALF
+      (16#03038#, 16#0303C#),  -- HANGZHOU NUMERAL TEN .. MASU MARK
+      (16#03041#, 16#03096#),  -- HIRAGANA LETTER SMALL A .. HIRAGANA LETTER SMALL KE
+      (16#0309D#, 16#0309F#),  -- HIRAGANA ITERATION MARK .. HIRAGANA DIGRAPH YORI
+      (16#030A1#, 16#030FA#),  -- KATAKANA LETTER SMALL A .. KATAKANA LETTER VO
+      (16#030FC#, 16#030FF#),  -- KATAKANA-HIRAGANA PROLONGED SOUND MARK .. KATAKANA DIGRAPH KOTO
+      (16#03105#, 16#0312C#),  -- BOPOMOFO LETTER B .. BOPOMOFO LETTER GN
+      (16#03131#, 16#0318E#),  -- HANGUL LETTER KIYEOK .. HANGUL LETTER ARAEAE
+      (16#031A0#, 16#031B7#),  -- BOPOMOFO LETTER BU .. BOPOMOFO FINAL LETTER H
+      (16#031F0#, 16#031FF#),  -- KATAKANA LETTER SMALL KU .. KATAKANA LETTER SMALL RO
+      (16#03400#, 16#04DB5#),  -- <CJK Ideograph Extension A, First> .. <CJK Ideograph Extension A, Last>
+      (16#04E00#, 16#09FA5#),  -- <CJK Ideograph, First> .. <CJK Ideograph, Last>
+      (16#0A000#, 16#0A48C#),  -- YI SYLLABLE IT .. YI SYLLABLE YYR
+      (16#0AC00#, 16#0D7A3#),  -- <Hangul Syllable, First> .. <Hangul Syllable, Last>
+      (16#0F900#, 16#0FA2D#),  -- CJK COMPATIBILITY IDEOGRAPH-F900 .. CJK COMPATIBILITY IDEOGRAPH-FA2D
+      (16#0FA30#, 16#0FA6A#),  -- CJK COMPATIBILITY IDEOGRAPH-FA30 .. CJK COMPATIBILITY IDEOGRAPH-FA6A
+      (16#0FB00#, 16#0FB06#),  -- LATIN SMALL LIGATURE FF .. LATIN SMALL LIGATURE ST
+      (16#0FB13#, 16#0FB17#),  -- ARMENIAN SMALL LIGATURE MEN NOW .. ARMENIAN SMALL LIGATURE MEN XEH
+      (16#0FB1D#, 16#0FB1D#),  -- HEBREW LETTER YOD WITH HIRIQ .. HEBREW LETTER YOD WITH HIRIQ
+      (16#0FB1F#, 16#0FB28#),  -- HEBREW LIGATURE YIDDISH YOD YOD PATAH .. HEBREW LETTER WIDE TAV
+      (16#0FB2A#, 16#0FB36#),  -- HEBREW LETTER SHIN WITH SHIN DOT .. HEBREW LETTER ZAYIN WITH DAGESH
+      (16#0FB38#, 16#0FB3C#),  -- HEBREW LETTER TET WITH DAGESH .. HEBREW LETTER LAMED WITH DAGESH
+      (16#0FB3E#, 16#0FB3E#),  -- HEBREW LETTER MEM WITH DAGESH .. HEBREW LETTER MEM WITH DAGESH
+      (16#0FB40#, 16#0FB41#),  -- HEBREW LETTER NUN WITH DAGESH .. HEBREW LETTER SAMEKH WITH DAGESH
+      (16#0FB43#, 16#0FB44#),  -- HEBREW LETTER FINAL PE WITH DAGESH .. HEBREW LETTER PE WITH DAGESH
+      (16#0FB46#, 16#0FBB1#),  -- HEBREW LETTER TSADI WITH DAGESH .. ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
+      (16#0FBD3#, 16#0FD3D#),  -- ARABIC LETTER NG ISOLATED FORM .. ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+      (16#0FD50#, 16#0FD8F#),  -- ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM .. ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+      (16#0FD92#, 16#0FDC7#),  -- ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM .. ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+      (16#0FDF0#, 16#0FDFB#),  -- ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM .. ARABIC LIGATURE JALLAJALALOUHOU
+      (16#0FE70#, 16#0FE74#),  -- ARABIC FATHATAN ISOLATED FORM .. ARABIC KASRATAN ISOLATED FORM
+      (16#0FE76#, 16#0FEFC#),  -- ARABIC FATHA ISOLATED FORM .. ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+      (16#0FF21#, 16#0FF3A#),  -- FULLWIDTH LATIN CAPITAL LETTER A .. FULLWIDTH LATIN CAPITAL LETTER Z
+      (16#0FF41#, 16#0FF5A#),  -- FULLWIDTH LATIN SMALL LETTER A .. FULLWIDTH LATIN SMALL LETTER Z
+      (16#0FF66#, 16#0FFBE#),  -- HALFWIDTH KATAKANA LETTER WO .. HALFWIDTH HANGUL LETTER HIEUH
+      (16#0FFC2#, 16#0FFC7#),  -- HALFWIDTH HANGUL LETTER A .. HALFWIDTH HANGUL LETTER E
+      (16#0FFCA#, 16#0FFCF#),  -- HALFWIDTH HANGUL LETTER YEO .. HALFWIDTH HANGUL LETTER OE
+      (16#0FFD2#, 16#0FFD7#),  -- HALFWIDTH HANGUL LETTER YO .. HALFWIDTH HANGUL LETTER YU
+      (16#0FFDA#, 16#0FFDC#),  -- HALFWIDTH HANGUL LETTER EU .. HALFWIDTH HANGUL LETTER I
+      (16#10000#, 16#1000B#),  -- LINEAR B SYLLABLE B008 A .. LINEAR B SYLLABLE B046 JE
+      (16#1000D#, 16#10026#),  -- LINEAR B SYLLABLE B036 JO .. LINEAR B SYLLABLE B032 QO
+      (16#10028#, 16#1003A#),  -- LINEAR B SYLLABLE B060 RA .. LINEAR B SYLLABLE B042 WO
+      (16#1003C#, 16#1003D#),  -- LINEAR B SYLLABLE B017 ZA .. LINEAR B SYLLABLE B074 ZE
+      (16#1003F#, 16#1004D#),  -- LINEAR B SYLLABLE B020 ZO .. LINEAR B SYLLABLE B091 TWO
+      (16#10050#, 16#1005D#),  -- LINEAR B SYMBOL B018 .. LINEAR B SYMBOL B089
+      (16#10080#, 16#100FA#),  -- LINEAR B IDEOGRAM B100 MAN .. LINEAR B IDEOGRAM VESSEL B305
+      (16#10300#, 16#1031E#),  -- OLD ITALIC LETTER A .. OLD ITALIC LETTER UU
+      (16#10330#, 16#1034A#),  -- GOTHIC LETTER AHSA .. GOTHIC LETTER NINE HUNDRED
+      (16#10380#, 16#1039D#),  -- UGARITIC LETTER ALPA .. UGARITIC LETTER SSU
+      (16#10400#, 16#1049D#),  -- DESERET CAPITAL LETTER LONG I .. OSMANYA LETTER OO
+      (16#10800#, 16#10805#),  -- CYPRIOT SYLLABLE A .. CYPRIOT SYLLABLE JA
+      (16#10808#, 16#10808#),  -- CYPRIOT SYLLABLE JO .. CYPRIOT SYLLABLE JO
+      (16#1080A#, 16#10835#),  -- CYPRIOT SYLLABLE KA .. CYPRIOT SYLLABLE WO
+      (16#10837#, 16#10838#),  -- CYPRIOT SYLLABLE XA .. CYPRIOT SYLLABLE XE
+      (16#1083C#, 16#1083C#),  -- CYPRIOT SYLLABLE ZA .. CYPRIOT SYLLABLE ZA
+      (16#1083F#, 16#1083F#),  -- CYPRIOT SYLLABLE ZO .. CYPRIOT SYLLABLE ZO
+      (16#1D400#, 16#1D454#),  -- MATHEMATICAL BOLD CAPITAL A .. MATHEMATICAL ITALIC SMALL G
+      (16#1D456#, 16#1D49C#),  -- MATHEMATICAL ITALIC SMALL I .. MATHEMATICAL SCRIPT CAPITAL A
+      (16#1D49E#, 16#1D49F#),  -- MATHEMATICAL SCRIPT CAPITAL C .. MATHEMATICAL SCRIPT CAPITAL D
+      (16#1D4A2#, 16#1D4A2#),  -- MATHEMATICAL SCRIPT CAPITAL G .. MATHEMATICAL SCRIPT CAPITAL G
+      (16#1D4A5#, 16#1D4A6#),  -- MATHEMATICAL SCRIPT CAPITAL J .. MATHEMATICAL SCRIPT CAPITAL K
+      (16#1D4A9#, 16#1D4AC#),  -- MATHEMATICAL SCRIPT CAPITAL N .. MATHEMATICAL SCRIPT CAPITAL Q
+      (16#1D4AE#, 16#1D4B9#),  -- MATHEMATICAL SCRIPT CAPITAL S .. MATHEMATICAL SCRIPT SMALL D
+      (16#1D4BB#, 16#1D4BB#),  -- MATHEMATICAL SCRIPT SMALL F .. MATHEMATICAL SCRIPT SMALL F
+      (16#1D4BD#, 16#1D4C3#),  -- MATHEMATICAL SCRIPT SMALL H .. MATHEMATICAL SCRIPT SMALL N
+      (16#1D4C5#, 16#1D505#),  -- MATHEMATICAL SCRIPT SMALL P .. MATHEMATICAL FRAKTUR CAPITAL B
+      (16#1D507#, 16#1D50A#),  -- MATHEMATICAL FRAKTUR CAPITAL D .. MATHEMATICAL FRAKTUR CAPITAL G
+      (16#1D50D#, 16#1D514#),  -- MATHEMATICAL FRAKTUR CAPITAL J .. MATHEMATICAL FRAKTUR CAPITAL Q
+      (16#1D516#, 16#1D51C#),  -- MATHEMATICAL FRAKTUR CAPITAL S .. MATHEMATICAL FRAKTUR CAPITAL Y
+      (16#1D51E#, 16#1D539#),  -- MATHEMATICAL FRAKTUR SMALL A .. MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+      (16#1D53B#, 16#1D53E#),  -- MATHEMATICAL DOUBLE-STRUCK CAPITAL D .. MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+      (16#1D540#, 16#1D544#),  -- MATHEMATICAL DOUBLE-STRUCK CAPITAL I .. MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+      (16#1D546#, 16#1D546#),  -- MATHEMATICAL DOUBLE-STRUCK CAPITAL O .. MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+      (16#1D54A#, 16#1D550#),  -- MATHEMATICAL DOUBLE-STRUCK CAPITAL S .. MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+      (16#1D552#, 16#1D6A3#),  -- MATHEMATICAL DOUBLE-STRUCK SMALL A .. MATHEMATICAL MONOSPACE SMALL Z
+      (16#1D6A8#, 16#1D6C0#),  -- MATHEMATICAL BOLD CAPITAL ALPHA .. MATHEMATICAL BOLD CAPITAL OMEGA
+      (16#1D6C2#, 16#1D6DA#),  -- MATHEMATICAL BOLD SMALL ALPHA .. MATHEMATICAL BOLD SMALL OMEGA
+      (16#1D6DC#, 16#1D6FA#),  -- MATHEMATICAL BOLD EPSILON SYMBOL .. MATHEMATICAL ITALIC CAPITAL OMEGA
+      (16#1D6FC#, 16#1D714#),  -- MATHEMATICAL ITALIC SMALL ALPHA .. MATHEMATICAL ITALIC SMALL OMEGA
+      (16#1D716#, 16#1D734#),  -- MATHEMATICAL ITALIC EPSILON SYMBOL .. MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+      (16#1D736#, 16#1D74E#),  -- MATHEMATICAL BOLD ITALIC SMALL ALPHA .. MATHEMATICAL BOLD ITALIC SMALL OMEGA
+      (16#1D750#, 16#1D76E#),  -- MATHEMATICAL BOLD ITALIC EPSILON SYMBOL .. MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+      (16#1D770#, 16#1D788#),  -- MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA .. MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+      (16#1D78A#, 16#1D7A8#),  -- MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL .. MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+      (16#1D7AA#, 16#1D7C2#),  -- MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA .. MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+      (16#1D7C4#, 16#1D7C9#),  -- MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL .. MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL
+      (16#20000#, 16#2A6D6#),  -- <CJK Ideograph Extension B, First> .. <CJK Ideograph Extension B, Last>
+      (16#2F800#, 16#2FA1D#)); -- CJK COMPATIBILITY IDEOGRAPH-2F800 .. CJK COMPATIBILITY IDEOGRAPH-2FA1D
+ 
+    --  The following table includes all characters considered spaces, i.e.
+    --  all characters from the Unicode table with categories:
+ 
+    --    Separator, Space (Zs)
+ 
+    UTF_32_Spaces : constant UTF_32_Ranges := (
+      (16#00020#, 16#00020#),  -- SPACE .. SPACE
+      (16#000A0#, 16#000A0#),  -- NO-BREAK SPACE .. NO-BREAK SPACE
+      (16#01680#, 16#01680#),  -- OGHAM SPACE MARK .. OGHAM SPACE MARK
+      (16#0180E#, 16#0180E#),  -- MONGOLIAN VOWEL SEPARATOR .. MONGOLIAN VOWEL SEPARATOR
+      (16#02000#, 16#0200B#),  -- EN QUAD .. ZERO WIDTH SPACE
+      (16#0202F#, 16#0202F#),  -- NARROW NO-BREAK SPACE .. NARROW NO-BREAK SPACE
+      (16#0205F#, 16#0205F#),  -- MEDIUM MATHEMATICAL SPACE .. MEDIUM MATHEMATICAL SPACE
+      (16#03000#, 16#03000#)); -- IDEOGRAPHIC SPACE .. IDEOGRAPHIC SPACE
+ 
+    --  The following table includes all characters considered punctuation,
+    --  i.e. all characters from the Unicode table with categories:
+ 
+    --    Punctuation, Connector (Pc)
+ 
+    UTF_32_Punctuation : constant UTF_32_Ranges := (
+      (16#0005F#, 16#0005F#),  -- LOW LINE .. LOW LINE
+      (16#0203F#, 16#02040#),  -- UNDERTIE .. CHARACTER TIE
+      (16#02054#, 16#02054#),  -- INVERTED UNDERTIE .. INVERTED UNDERTIE
+      (16#030FB#, 16#030FB#),  -- KATAKANA MIDDLE DOT .. KATAKANA MIDDLE DOT
+      (16#0FE33#, 16#0FE34#),  -- PRESENTATION FORM FOR VERTICAL LOW LINE .. PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
+      (16#0FE4D#, 16#0FE4F#),  -- DASHED LOW LINE .. WAVY LOW LINE
+      (16#0FF3F#, 16#0FF3F#),  -- FULLWIDTH LOW LINE .. FULLWIDTH LOW LINE
+      (16#0FF65#, 16#0FF65#)); -- HALFWIDTH KATAKANA MIDDLE DOT .. HALFWIDTH KATAKANA MIDDLE DOT
+ 
+    --  The following table includes all characters considered as other format,
+    --  i.e. all characters from the Unicode table with categories:
+ 
+    --    Other, Format (Cf)
+ 
+    UTF_32_Other_Format : constant UTF_32_Ranges := (
+      (16#000AD#, 16#000AD#),  -- SOFT HYPHEN .. SOFT HYPHEN
+      (16#00600#, 16#00603#),  -- ARABIC NUMBER SIGN .. ARABIC SIGN SAFHA
+      (16#006DD#, 16#006DD#),  -- ARABIC END OF AYAH .. ARABIC END OF AYAH
+ 
+                                                     (16#0070F#, 16#0070F#),  -- SYRIAC ABBREVIATION MARK .. SYRIAC ABBREVIATION MARK
+      (16#017B4#, 16#017B5#),  -- KHMER VOWEL INHERENT AQ .. KHMER VOWEL INHERENT AA
+      (16#0200C#, 16#0200F#),  -- ZERO WIDTH NON-JOINER .. RIGHT-TO-LEFT MARK
+      (16#0202A#, 16#0202E#),  -- LEFT-TO-RIGHT EMBEDDING .. RIGHT-TO-LEFT OVERRIDE
+      (16#02060#, 16#02063#),  -- WORD JOINER .. INVISIBLE SEPARATOR
+      (16#0206A#, 16#0206F#),  -- INHIBIT SYMMETRIC SWAPPING .. NOMINAL DIGIT SHAPES
+      (16#0FEFF#, 16#0FEFF#),  -- ZERO WIDTH NO-BREAK SPACE .. ZERO WIDTH NO-BREAK SPACE
+      (16#0FFF9#, 16#0FFFB#),  -- INTERLINEAR ANNOTATION ANCHOR .. INTERLINEAR ANNOTATION TERMINATOR
+      (16#1D173#, 16#1D17A#),  -- MUSICAL SYMBOL BEGIN BEAM .. MUSICAL SYMBOL END PHRASE
+      (16#E0001#, 16#E0001#),  -- LANGUAGE TAG .. LANGUAGE TAG
+      (16#E0020#, 16#E007F#)); -- TAG SPACE .. CANCEL TAG
+ 
+    --  The following table includes all characters considered marks i.e.
+    --  all characters from the Unicode table with categories:
+ 
+    --    Mark, Nonspacing (Mn)
+    --    Mark, Spacing Combining (Mc)
+ 
+    UTF_32_Marks : constant UTF_32_Ranges := (
+      (16#00300#, 16#00357#),  -- COMBINING GRAVE ACCENT .. COMBINING RIGHT HALF RING ABOVE
+      (16#0035D#, 16#0036F#),  -- COMBINING DOUBLE BREVE .. COMBINING LATIN SMALL LETTER X
+      (16#00483#, 16#00486#),  -- COMBINING CYRILLIC TITLO .. COMBINING CYRILLIC PSILI PNEUMATA
+      (16#00591#, 16#005A1#),  -- HEBREW ACCENT ETNAHTA .. HEBREW ACCENT PAZER
+      (16#005A3#, 16#005B9#),  -- HEBREW ACCENT MUNAH .. HEBREW POINT HOLAM
+      (16#005BB#, 16#005BD#),  -- HEBREW POINT QUBUTS .. HEBREW POINT METEG
+      (16#005BF#, 16#005BF#),  -- HEBREW POINT RAFE .. HEBREW POINT RAFE
+      (16#005C1#, 16#005C2#),  -- HEBREW POINT SHIN DOT .. HEBREW POINT SIN DOT
+      (16#005C4#, 16#005C4#),  -- HEBREW MARK UPPER DOT .. HEBREW MARK UPPER DOT
+      (16#00610#, 16#00615#),  -- ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM .. ARABIC SMALL HIGH TAH
+      (16#0064B#, 16#00658#),  -- ARABIC FATHATAN .. ARABIC MARK NOON GHUNNA
+      (16#00670#, 16#00670#),  -- ARABIC LETTER SUPERSCRIPT ALEF .. ARABIC LETTER SUPERSCRIPT ALEF
+      (16#006D6#, 16#006DC#),  -- ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA .. ARABIC SMALL HIGH SEEN
+      (16#006DF#, 16#006E4#),  -- ARABIC SMALL HIGH ROUNDED ZERO .. ARABIC SMALL HIGH MADDA
+      (16#006E7#, 16#006E8#),  -- ARABIC SMALL HIGH YEH .. ARABIC SMALL HIGH NOON
+      (16#006EA#, 16#006ED#),  -- ARABIC EMPTY CENTRE LOW STOP .. ARABIC SMALL LOW MEEM
+      (16#00711#, 16#00711#),  -- SYRIAC LETTER SUPERSCRIPT ALAPH .. SYRIAC LETTER SUPERSCRIPT ALAPH
+      (16#00730#, 16#0074A#),  -- SYRIAC PTHAHA ABOVE .. SYRIAC BARREKH
+      (16#007A6#, 16#007B0#),  -- THAANA ABAFILI .. THAANA SUKUN
+      (16#00901#, 16#00903#),  -- DEVANAGARI SIGN CANDRABINDU .. DEVANAGARI SIGN VISARGA
+      (16#0093C#, 16#0093C#),  -- DEVANAGARI SIGN NUKTA .. DEVANAGARI SIGN NUKTA
+      (16#0093E#, 16#0094D#),  -- DEVANAGARI VOWEL SIGN AA .. DEVANAGARI SIGN VIRAMA
+      (16#00951#, 16#00954#),  -- DEVANAGARI STRESS SIGN UDATTA .. DEVANAGARI ACUTE ACCENT
+      (16#00962#, 16#00963#),  -- DEVANAGARI VOWEL SIGN VOCALIC L .. DEVANAGARI VOWEL SIGN VOCALIC LL
+      (16#00981#, 16#00983#),  -- BENGALI SIGN CANDRABINDU .. BENGALI SIGN VISARGA
+      (16#009BC#, 16#009BC#),  -- BENGALI SIGN NUKTA .. BENGALI SIGN NUKTA
+      (16#009BE#, 16#009C4#),  -- BENGALI VOWEL SIGN AA .. BENGALI VOWEL SIGN VOCALIC RR
+      (16#009C7#, 16#009C8#),  -- BENGALI VOWEL SIGN E .. BENGALI VOWEL SIGN AI
+      (16#009CB#, 16#009CD#),  -- BENGALI VOWEL SIGN O .. BENGALI SIGN VIRAMA
+      (16#009D7#, 16#009D7#),  -- BENGALI AU LENGTH MARK .. BENGALI AU LENGTH MARK
+      (16#009E2#, 16#009E3#),  -- BENGALI VOWEL SIGN VOCALIC L .. BENGALI VOWEL SIGN VOCALIC LL
+      (16#00A01#, 16#00A03#),  -- GURMUKHI SIGN ADAK BINDI .. GURMUKHI SIGN VISARGA
+      (16#00A3C#, 16#00A3C#),  -- GURMUKHI SIGN NUKTA .. GURMUKHI SIGN NUKTA
+      (16#00A3E#, 16#00A42#),  -- GURMUKHI VOWEL SIGN AA .. GURMUKHI VOWEL SIGN UU
+      (16#00A47#, 16#00A48#),  -- GURMUKHI VOWEL SIGN EE .. GURMUKHI VOWEL SIGN AI
+      (16#00A4B#, 16#00A4D#),  -- GURMUKHI VOWEL SIGN OO .. GURMUKHI SIGN VIRAMA
+      (16#00A70#, 16#00A71#),  -- GURMUKHI TIPPI .. GURMUKHI ADDAK
+      (16#00A81#, 16#00A83#),  -- GUJARATI SIGN CANDRABINDU .. GUJARATI SIGN VISARGA
+      (16#00ABC#, 16#00ABC#),  -- GUJARATI SIGN NUKTA .. GUJARATI SIGN NUKTA
+      (16#00ABE#, 16#00AC5#),  -- GUJARATI VOWEL SIGN AA .. GUJARATI VOWEL SIGN CANDRA E
+      (16#00AC7#, 16#00AC9#),  -- GUJARATI VOWEL SIGN E .. GUJARATI VOWEL SIGN CANDRA O
+      (16#00ACB#, 16#00ACD#),  -- GUJARATI VOWEL SIGN O .. GUJARATI SIGN VIRAMA
+      (16#00AE2#, 16#00AE3#),  -- GUJARATI VOWEL SIGN VOCALIC L .. GUJARATI VOWEL SIGN VOCALIC LL
+      (16#00B01#, 16#00B03#),  -- ORIYA SIGN CANDRABINDU .. ORIYA SIGN VISARGA
+      (16#00B3C#, 16#00B3C#),  -- ORIYA SIGN NUKTA .. ORIYA SIGN NUKTA
+      (16#00B3E#, 16#00B43#),  -- ORIYA VOWEL SIGN AA .. ORIYA VOWEL SIGN VOCALIC R
+      (16#00B47#, 16#00B48#),  -- ORIYA VOWEL SIGN E .. ORIYA VOWEL SIGN AI
+      (16#00B4B#, 16#00B4D#),  -- ORIYA VOWEL SIGN O .. ORIYA SIGN VIRAMA
+      (16#00B56#, 16#00B57#),  -- ORIYA AI LENGTH MARK .. ORIYA AU LENGTH MARK
+      (16#00B82#, 16#00B82#),  -- TAMIL SIGN ANUSVARA .. TAMIL SIGN ANUSVARA
+      (16#00BBE#, 16#00BC2#),  -- TAMIL VOWEL SIGN AA .. TAMIL VOWEL SIGN UU
+      (16#00BC6#, 16#00BC8#),  -- TAMIL VOWEL SIGN E .. TAMIL VOWEL SIGN AI
+      (16#00BCA#, 16#00BCD#),  -- TAMIL VOWEL SIGN O .. TAMIL SIGN VIRAMA
+      (16#00BD7#, 16#00BD7#),  -- TAMIL AU LENGTH MARK .. TAMIL AU LENGTH MARK
+      (16#00C01#, 16#00C03#),  -- TELUGU SIGN CANDRABINDU .. TELUGU SIGN VISARGA
+      (16#00C3E#, 16#00C44#),  -- TELUGU VOWEL SIGN AA .. TELUGU VOWEL SIGN VOCALIC RR
+      (16#00C46#, 16#00C48#),  -- TELUGU VOWEL SIGN E .. TELUGU VOWEL SIGN AI
+      (16#00C4A#, 16#00C4D#),  -- TELUGU VOWEL SIGN O .. TELUGU SIGN VIRAMA
+      (16#00C55#, 16#00C56#),  -- TELUGU LENGTH MARK .. TELUGU AI LENGTH MARK
+      (16#00C82#, 16#00C83#),  -- KANNADA SIGN ANUSVARA .. KANNADA SIGN VISARGA
+      (16#00CBC#, 16#00CBC#),  -- KANNADA SIGN NUKTA .. KANNADA SIGN NUKTA
+      (16#00CBE#, 16#00CC4#),  -- KANNADA VOWEL SIGN AA .. KANNADA VOWEL SIGN VOCALIC RR
+      (16#00CC6#, 16#00CC8#),  -- KANNADA VOWEL SIGN E .. KANNADA VOWEL SIGN AI
+      (16#00CCA#, 16#00CCD#),  -- KANNADA VOWEL SIGN O .. KANNADA SIGN VIRAMA
+      (16#00CD5#, 16#00CD6#),  -- KANNADA LENGTH MARK .. KANNADA AI LENGTH MARK
+      (16#00D02#, 16#00D03#),  -- MALAYALAM SIGN ANUSVARA .. MALAYALAM SIGN VISARGA
+      (16#00D3E#, 16#00D43#),  -- MALAYALAM VOWEL SIGN AA .. MALAYALAM VOWEL SIGN VOCALIC R
+      (16#00D46#, 16#00D48#),  -- MALAYALAM VOWEL SIGN E .. MALAYALAM VOWEL SIGN AI
+      (16#00D4A#, 16#00D4D#),  -- MALAYALAM VOWEL SIGN O .. MALAYALAM SIGN VIRAMA
+      (16#00D57#, 16#00D57#),  -- MALAYALAM AU LENGTH MARK .. MALAYALAM AU LENGTH MARK
+      (16#00D82#, 16#00D83#),  -- SINHALA SIGN ANUSVARAYA .. SINHALA SIGN VISARGAYA
+      (16#00DCA#, 16#00DCA#),  -- SINHALA SIGN AL-LAKUNA .. SINHALA SIGN AL-LAKUNA
+      (16#00DCF#, 16#00DD4#),  -- SINHALA VOWEL SIGN AELA-PILLA .. SINHALA VOWEL SIGN KETTI PAA-PILLA
+      (16#00DD6#, 16#00DD6#),  -- SINHALA VOWEL SIGN DIGA PAA-PILLA .. SINHALA VOWEL SIGN DIGA PAA-PILLA
+      (16#00DD8#, 16#00DDF#),  -- SINHALA VOWEL SIGN GAETTA-PILLA .. SINHALA VOWEL SIGN GAYANUKITTA
+      (16#00DF2#, 16#00DF3#),  -- SINHALA VOWEL SIGN DIGA GAETTA-PILLA .. SINHALA VOWEL SIGN DIGA GAYANUKITTA
+      (16#00E31#, 16#00E31#),  -- THAI CHARACTER MAI HAN-AKAT .. THAI CHARACTER MAI HAN-AKAT
+      (16#00E34#, 16#00E3A#),  -- THAI CHARACTER SARA I .. THAI CHARACTER PHINTHU
+      (16#00E47#, 16#00E4E#),  -- THAI CHARACTER MAITAIKHU .. THAI CHARACTER YAMAKKAN
+      (16#00EB1#, 16#00EB1#),  -- LAO VOWEL SIGN MAI KAN .. LAO VOWEL SIGN MAI KAN
+      (16#00EB4#, 16#00EB9#),  -- LAO VOWEL SIGN I .. LAO VOWEL SIGN UU
+      (16#00EBB#, 16#00EBC#),  -- LAO VOWEL SIGN MAI KON .. LAO SEMIVOWEL SIGN LO
+      (16#00EC8#, 16#00ECD#),  -- LAO TONE MAI EK .. LAO NIGGAHITA
+      (16#00F18#, 16#00F19#),  -- TIBETAN ASTROLOGICAL SIGN -KHYUD PA .. TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
+      (16#00F35#, 16#00F35#),  -- TIBETAN MARK NGAS BZUNG NYI ZLA .. TIBETAN MARK NGAS BZUNG NYI ZLA
+      (16#00F37#, 16#00F37#),  -- TIBETAN MARK NGAS BZUNG SGOR RTAGS .. TIBETAN MARK NGAS BZUNG SGOR RTAGS
+      (16#00F39#, 16#00F39#),  -- TIBETAN MARK TSA -PHRU .. TIBETAN MARK TSA -PHRU
+      (16#00F3E#, 16#00F3F#),  -- TIBETAN SIGN YAR TSHES .. TIBETAN SIGN MAR TSHES
+      (16#00F71#, 16#00F84#),  -- TIBETAN VOWEL SIGN AA .. TIBETAN MARK HALANTA
+      (16#00F86#, 16#00F87#),  -- TIBETAN SIGN LCI RTAGS .. TIBETAN SIGN YANG RTAGS
+      (16#00F90#, 16#00F97#),  -- TIBETAN SUBJOINED LETTER KA .. TIBETAN SUBJOINED LETTER JA
+      (16#00F99#, 16#00FBC#),  -- TIBETAN SUBJOINED LETTER NYA .. TIBETAN SUBJOINED LETTER FIXED-FORM RA
+      (16#00FC6#, 16#00FC6#),  -- TIBETAN SYMBOL PADMA GDAN .. TIBETAN SYMBOL PADMA GDAN
+      (16#0102C#, 16#01032#),  -- MYANMAR VOWEL SIGN AA .. MYANMAR VOWEL SIGN AI
+      (16#01036#, 16#01039#),  -- MYANMAR SIGN ANUSVARA .. MYANMAR SIGN VIRAMA
+      (16#01056#, 16#01059#),  -- MYANMAR VOWEL SIGN VOCALIC R .. MYANMAR VOWEL SIGN VOCALIC LL
+      (16#01712#, 16#01714#),  -- TAGALOG VOWEL SIGN I .. TAGALOG SIGN VIRAMA
+      (16#01732#, 16#01734#),  -- HANUNOO VOWEL SIGN I .. HANUNOO SIGN PAMUDPOD
+      (16#01752#, 16#01753#),  -- BUHID VOWEL SIGN I .. BUHID VOWEL SIGN U
+      (16#01772#, 16#01773#),  -- TAGBANWA VOWEL SIGN I .. TAGBANWA VOWEL SIGN U
+      (16#017B6#, 16#017D3#),  -- KHMER VOWEL SIGN AA .. KHMER SIGN BATHAMASAT
+      (16#017DD#, 16#017DD#),  -- KHMER SIGN ATTHACAN .. KHMER SIGN ATTHACAN
+      (16#0180B#, 16#0180D#),  -- MONGOLIAN FREE VARIATION SELECTOR ONE .. MONGOLIAN FREE VARIATION SELECTOR THREE
+      (16#018A9#, 16#018A9#),  -- MONGOLIAN LETTER ALI GALI DAGALGA .. MONGOLIAN LETTER ALI GALI DAGALGA
+      (16#01920#, 16#0192B#),  -- LIMBU VOWEL SIGN A .. LIMBU SUBJOINED LETTER WA
+      (16#01930#, 16#0193B#),  -- LIMBU SMALL LETTER KA .. LIMBU SIGN SA-I
+      (16#020D0#, 16#020DC#),  -- COMBINING LEFT HARPOON ABOVE .. COMBINING FOUR DOTS ABOVE
+      (16#020E1#, 16#020E1#),  -- COMBINING LEFT RIGHT ARROW ABOVE .. COMBINING LEFT RIGHT ARROW ABOVE
+      (16#020E5#, 16#020EA#),  -- COMBINING REVERSE SOLIDUS OVERLAY .. COMBINING LEFTWARDS ARROW OVERLAY
+      (16#0302A#, 16#0302F#),  -- IDEOGRAPHIC LEVEL TONE MARK .. HANGUL DOUBLE DOT TONE MARK
+      (16#03099#, 16#0309A#),  -- COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK .. COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+      (16#0FB1E#, 16#0FB1E#),  -- HEBREW POINT JUDEO-SPANISH VARIKA .. HEBREW POINT JUDEO-SPANISH VARIKA
+      (16#0FE00#, 16#0FE0F#),  -- VARIATION SELECTOR-1 .. VARIATION SELECTOR-16
+      (16#0FE20#, 16#0FE23#),  -- COMBINING LIGATURE LEFT HALF .. COMBINING DOUBLE TILDE RIGHT HALF
+      (16#1D165#, 16#1D169#),  -- MUSICAL SYMBOL COMBINING STEM .. MUSICAL SYMBOL COMBINING TREMOLO-3
+      (16#1D16D#, 16#1D172#),  -- MUSICAL SYMBOL COMBINING AUGMENTATION DOT .. MUSICAL SYMBOL COMBINING FLAG-5
+      (16#1D17B#, 16#1D182#),  -- MUSICAL SYMBOL COMBINING ACCENT .. MUSICAL SYMBOL COMBINING LOURE
+      (16#1D185#, 16#1D18B#),  -- MUSICAL SYMBOL COMBINING DOIT .. MUSICAL SYMBOL COMBINING TRIPLE TONGUE
+      (16#1D1AA#, 16#1D1AD#),  -- MUSICAL SYMBOL COMBINING DOWN BOW .. MUSICAL SYMBOL COMBINING SNAP PIZZICATO
+      (16#E0100#, 16#E01EF#)); -- VARIATION SELECTOR-17 .. VARIATION SELECTOR-256
+ 
+    --  The following table includes all characters considered non-graphic,
+    --  i.e. all characters from the Unicode table with categories:
+ 
+    --    Other, Control (Cc)
+    --    Other, Private Use (Co)
+    --    Other, Surrogate (Cs)
+    --    Other, Format (Cf)
+    --    Separator, Line (Zl)
+    --    Separator, Paragraph (Zp)
+ 
+    --  In addition, the characters FFFE and FFFF are excluded. Note that the
+    --  defined Ada category of format effector is subsumed by the above set
+    --  of Unicode categories.
+ 
+    UTF_32_Non_Graphic : constant UTF_32_Ranges := (
+      (16#00000#, 16#0001F#),  -- <control> .. <control>
+      (16#0007F#, 16#0009F#),  -- <control> .. <control>
+      (16#000AD#, 16#000AD#),  -- SOFT HYPHEN .. SOFT HYPHEN
+      (16#00600#, 16#00603#),  -- ARABIC NUMBER SIGN .. ARABIC SIGN SAFHA
+      (16#006DD#, 16#006DD#),  -- ARABIC END OF AYAH .. ARABIC END OF AYAH
+      (16#0070F#, 16#0070F#),  -- SYRIAC ABBREVIATION MARK .. SYRIAC ABBREVIATION MARK
+      (16#017B4#, 16#017B5#),  -- KHMER VOWEL INHERENT AQ .. KHMER VOWEL INHERENT AA
+      (16#0200C#, 16#0200F#),  -- ZERO WIDTH NON-JOINER .. RIGHT-TO-LEFT MARK
+      (16#02028#, 16#0202E#),  -- LINE SEPARATOR .. RIGHT-TO-LEFT OVERRIDE
+      (16#02060#, 16#02063#),  -- WORD JOINER .. INVISIBLE SEPARATOR
+      (16#0206A#, 16#0206F#),  -- INHIBIT SYMMETRIC SWAPPING .. NOMINAL DIGIT SHAPES
+      (16#0D800#, 16#0F8FF#),  -- <Non Private Use High Surrogate, First> .. <Private Use, Last>
+      (16#0FEFF#, 16#0FEFF#),  -- ZERO WIDTH NO-BREAK SPACE .. ZERO WIDTH NO-BREAK SPACE
+      (16#0FFF9#, 16#0FFFB#),  -- INTERLINEAR ANNOTATION ANCHOR .. INTERLINEAR ANNOTATION TERMINATOR
+      (16#0FFFE#, 16#0FFFF#),  -- excluded code positions
+      (16#1D173#, 16#1D17A#),  -- MUSICAL SYMBOL BEGIN BEAM .. MUSICAL SYMBOL END PHRASE
+      (16#E0001#, 16#E0001#),  -- LANGUAGE TAG .. LANGUAGE TAG
+      (16#E0020#, 16#E007F#),  -- TAG SPACE .. CANCEL TAG
+      (16#F0000#, 16#FFFFD#),  -- <Plane 15 Private Use, First> .. <Plane 15 Private Use, Last>
+      (16#100000#, 16#10FFFD#)); -- <Plane 16 Private Use, First> .. <Plane 16 Private Use, Last>
+ 
+    --  The following two tables define the mapping to upper case. The first
+    --  table gives the ranges of lower case letters. The corresponding entry
+    --  in Uppercase_Adjust shows the amount to be added (or subtracted) from
+    --  the code value to get the corresponding upper case letter.
+ 
+    --  Note that this folding is not reversible, for example lower case
+    --  dotless i folds to normal upper case I, and that cannot be reversed.
+ 
+    Lower_Case_Letters : constant UTF_32_Ranges := (
+      (16#00061#, 16#0007A#),  -- LATIN SMALL LETTER A .. LATIN SMALL LETTER Z
+      (16#000B5#, 16#000B5#),  -- MICRO SIGN .. MICRO SIGN
+      (16#000E0#, 16#000F6#),  -- LATIN SMALL LETTER A WITH GRAVE .. LATIN SMALL LETTER O WITH DIAERESIS
+      (16#000F8#, 16#000FE#),  -- LATIN SMALL LETTER O WITH STROKE .. LATIN SMALL LETTER THORN
+      (16#000FF#, 16#000FF#),  -- LATIN SMALL LETTER Y WITH DIAERESIS .. LATIN SMALL LETTER Y WITH DIAERESIS
+      (16#00101#, 16#00101#),  -- LATIN SMALL LETTER A WITH MACRON .. LATIN SMALL LETTER A WITH MACRON
+      (16#00103#, 16#00103#),  -- LATIN SMALL LETTER A WITH BREVE .. LATIN SMALL LETTER A WITH BREVE
+      (16#00105#, 16#00105#),  -- LATIN SMALL LETTER A WITH OGONEK .. LATIN SMALL LETTER A WITH OGONEK
+      (16#00107#, 16#00107#),  -- LATIN SMALL LETTER C WITH ACUTE .. LATIN SMALL LETTER C WITH ACUTE
+      (16#00109#, 16#00109#),  -- LATIN SMALL LETTER C WITH CIRCUMFLEX .. LATIN SMALL LETTER C WITH CIRCUMFLEX
+      (16#0010B#, 16#0010B#),  -- LATIN SMALL LETTER C WITH DOT ABOVE .. LATIN SMALL LETTER C WITH DOT ABOVE
+      (16#0010D#, 16#0010D#),  -- LATIN SMALL LETTER C WITH CARON .. LATIN SMALL LETTER C WITH CARON
+      (16#0010F#, 16#0010F#),  -- LATIN SMALL LETTER D WITH CARON .. LATIN SMALL LETTER D WITH CARON
+      (16#00111#, 16#00111#),  -- LATIN SMALL LETTER D WITH STROKE .. LATIN SMALL LETTER D WITH STROKE
+      (16#00113#, 16#00113#),  -- LATIN SMALL LETTER E WITH MACRON .. LATIN SMALL LETTER E WITH MACRON
+      (16#00115#, 16#00115#),  -- LATIN SMALL LETTER E WITH BREVE .. LATIN SMALL LETTER E WITH BREVE
+      (16#00117#, 16#00117#),  -- LATIN SMALL LETTER E WITH DOT ABOVE .. LATIN SMALL LETTER E WITH DOT ABOVE
+      (16#00119#, 16#00119#),  -- LATIN SMALL LETTER E WITH OGONEK .. LATIN SMALL LETTER E WITH OGONEK
+      (16#0011B#, 16#0011B#),  -- LATIN SMALL LETTER E WITH CARON .. LATIN SMALL LETTER E WITH CARON
+      (16#0011D#, 16#0011D#),  -- LATIN SMALL LETTER G WITH CIRCUMFLEX .. LATIN SMALL LETTER G WITH CIRCUMFLEX
+      (16#0011F#, 16#0011F#),  -- LATIN SMALL LETTER G WITH BREVE .. LATIN SMALL LETTER G WITH BREVE
+      (16#00121#, 16#00121#),  -- LATIN SMALL LETTER G WITH DOT ABOVE .. LATIN SMALL LETTER G WITH DOT ABOVE
+      (16#00123#, 16#00123#),  -- LATIN SMALL LETTER G WITH CEDILLA .. LATIN SMALL LETTER G WITH CEDILLA
+      (16#00125#, 16#00125#),  -- LATIN SMALL LETTER H WITH CIRCUMFLEX .. LATIN SMALL LETTER H WITH CIRCUMFLEX
+      (16#00127#, 16#00127#),  -- LATIN SMALL LETTER H WITH STROKE .. LATIN SMALL LETTER H WITH STROKE
+      (16#00129#, 16#00129#),  -- LATIN SMALL LETTER I WITH TILDE .. LATIN SMALL LETTER I WITH TILDE
+      (16#0012B#, 16#0012B#),  -- LATIN SMALL LETTER I WITH MACRON .. LATIN SMALL LETTER I WITH MACRON
+      (16#0012D#, 16#0012D#),  -- LATIN SMALL LETTER I WITH BREVE .. LATIN SMALL LETTER I WITH BREVE
+      (16#0012F#, 16#0012F#),  -- LATIN SMALL LETTER I WITH OGONEK .. LATIN SMALL LETTER I WITH OGONEK
+      (16#00131#, 16#00131#),  -- LATIN SMALL LETTER DOTLESS I .. LATIN SMALL LETTER DOTLESS I
+      (16#00133#, 16#00133#),  -- LATIN SMALL LIGATURE IJ .. LATIN SMALL LIGATURE IJ
+      (16#00135#, 16#00135#),  -- LATIN SMALL LETTER J WITH CIRCUMFLEX .. LATIN SMALL LETTER J WITH CIRCUMFLEX
+      (16#00137#, 16#00137#),  -- LATIN SMALL LETTER K WITH CEDILLA .. LATIN SMALL LETTER K WITH CEDILLA
+      (16#0013A#, 16#0013A#),  -- LATIN SMALL LETTER L WITH ACUTE .. LATIN SMALL LETTER L WITH ACUTE
+      (16#0013C#, 16#0013C#),  -- LATIN SMALL LETTER L WITH CEDILLA .. LATIN SMALL LETTER L WITH CEDILLA
+      (16#0013E#, 16#0013E#),  -- LATIN SMALL LETTER L WITH CARON .. LATIN SMALL LETTER L WITH CARON
+      (16#00140#, 16#00140#),  -- LATIN SMALL LETTER L WITH MIDDLE DOT .. LATIN SMALL LETTER L WITH MIDDLE DOT
+      (16#00142#, 16#00142#),  -- LATIN SMALL LETTER L WITH STROKE .. LATIN SMALL LETTER L WITH STROKE
+      (16#00144#, 16#00144#),  -- LATIN SMALL LETTER N WITH ACUTE .. LATIN SMALL LETTER N WITH ACUTE
+      (16#00146#, 16#00146#),  -- LATIN SMALL LETTER N WITH CEDILLA .. LATIN SMALL LETTER N WITH CEDILLA
+      (16#00148#, 16#00148#),  -- LATIN SMALL LETTER N WITH CARON .. LATIN SMALL LETTER N WITH CARON
+      (16#0014B#, 16#0014B#),  -- LATIN SMALL LETTER ENG .. LATIN SMALL LETTER ENG
+      (16#0014D#, 16#0014D#),  -- LATIN SMALL LETTER O WITH MACRON .. LATIN SMALL LETTER O WITH MACRON
+      (16#0014F#, 16#0014F#),  -- LATIN SMALL LETTER O WITH BREVE .. LATIN SMALL LETTER O WITH BREVE
+      (16#00151#, 16#00151#),  -- LATIN SMALL LETTER O WITH DOUBLE ACUTE .. LATIN SMALL LETTER O WITH DOUBLE ACUTE
+      (16#00153#, 16#00153#),  -- LATIN SMALL LIGATURE OE .. LATIN SMALL LIGATURE OE
+      (16#00155#, 16#00155#),  -- LATIN SMALL LETTER R WITH ACUTE .. LATIN SMALL LETTER R WITH ACUTE
+      (16#00157#, 16#00157#),  -- LATIN SMALL LETTER R WITH CEDILLA .. LATIN SMALL LETTER R WITH CEDILLA
+      (16#00159#, 16#00159#),  -- LATIN SMALL LETTER R WITH CARON .. LATIN SMALL LETTER R WITH CARON
+      (16#0015B#, 16#0015B#),  -- LATIN SMALL LETTER S WITH ACUTE .. LATIN SMALL LETTER S WITH ACUTE
+      (16#0015D#, 16#0015D#),  -- LATIN SMALL LETTER S WITH CIRCUMFLEX .. LATIN SMALL LETTER S WITH CIRCUMFLEX
+      (16#0015F#, 16#0015F#),  -- LATIN SMALL LETTER S WITH CEDILLA .. LATIN SMALL LETTER S WITH CEDILLA
+      (16#00161#, 16#00161#),  -- LATIN SMALL LETTER S WITH CARON .. LATIN SMALL LETTER S WITH CARON
+      (16#00163#, 16#00163#),  -- LATIN SMALL LETTER T WITH CEDILLA .. LATIN SMALL LETTER T WITH CEDILLA
+      (16#00165#, 16#00165#),  -- LATIN SMALL LETTER T WITH CARON .. LATIN SMALL LETTER T WITH CARON
+      (16#00167#, 16#00167#),  -- LATIN SMALL LETTER T WITH STROKE .. LATIN SMALL LETTER T WITH STROKE
+      (16#00169#, 16#00169#),  -- LATIN SMALL LETTER U WITH TILDE .. LATIN SMALL LETTER U WITH TILDE
+      (16#0016B#, 16#0016B#),  -- LATIN SMALL LETTER U WITH MACRON .. LATIN SMALL LETTER U WITH MACRON
+      (16#0016D#, 16#0016D#),  -- LATIN SMALL LETTER U WITH BREVE .. LATIN SMALL LETTER U WITH BREVE
+      (16#0016F#, 16#0016F#),  -- LATIN SMALL LETTER U WITH RING ABOVE .. LATIN SMALL LETTER U WITH RING ABOVE
+      (16#00171#, 16#00171#),  -- LATIN SMALL LETTER U WITH DOUBLE ACUTE .. LATIN SMALL LETTER U WITH DOUBLE ACUTE
+      (16#00173#, 16#00173#),  -- LATIN SMALL LETTER U WITH OGONEK .. LATIN SMALL LETTER U WITH OGONEK
+      (16#00175#, 16#00175#),  -- LATIN SMALL LETTER W WITH CIRCUMFLEX .. LATIN SMALL LETTER W WITH CIRCUMFLEX
+      (16#00177#, 16#00177#),  -- LATIN SMALL LETTER Y WITH CIRCUMFLEX .. LATIN SMALL LETTER Y WITH CIRCUMFLEX
+      (16#0017A#, 16#0017A#),  -- LATIN SMALL LETTER Z WITH ACUTE .. LATIN SMALL LETTER Z WITH ACUTE
+      (16#0017C#, 16#0017C#),  -- LATIN SMALL LETTER Z WITH DOT ABOVE .. LATIN SMALL LETTER Z WITH DOT ABOVE
+      (16#0017E#, 16#0017E#),  -- LATIN SMALL LETTER Z WITH CARON .. LATIN SMALL LETTER Z WITH CARON
+      (16#0017F#, 16#0017F#),  -- LATIN SMALL LETTER LONG S .. LATIN SMALL LETTER LONG S
+      (16#00183#, 16#00183#),  -- LATIN SMALL LETTER B WITH TOPBAR .. LATIN SMALL LETTER B WITH TOPBAR
+      (16#00185#, 16#00185#),  -- LATIN SMALL LETTER TONE SIX .. LATIN SMALL LETTER TONE SIX
+      (16#00188#, 16#00188#),  -- LATIN SMALL LETTER C WITH HOOK .. LATIN SMALL LETTER C WITH HOOK
+      (16#0018C#, 16#0018C#),  -- LATIN SMALL LETTER D WITH TOPBAR .. LATIN SMALL LETTER D WITH TOPBAR
+      (16#00192#, 16#00192#),  -- LATIN SMALL LETTER F WITH HOOK .. LATIN SMALL LETTER F WITH HOOK
+      (16#00195#, 16#00195#),  -- LATIN SMALL LETTER HV .. LATIN SMALL LETTER HV
+      (16#00199#, 16#00199#),  -- LATIN SMALL LETTER K WITH HOOK .. LATIN SMALL LETTER K WITH HOOK
+      (16#0019E#, 16#0019E#),  -- LATIN SMALL LETTER N WITH LONG RIGHT LEG .. LATIN SMALL LETTER N WITH LONG RIGHT LEG
+      (16#001A1#, 16#001A1#),  -- LATIN SMALL LETTER O WITH HORN .. LATIN SMALL LETTER O WITH HORN
+      (16#001A3#, 16#001A3#),  -- LATIN SMALL LETTER OI .. LATIN SMALL LETTER OI
+      (16#001A5#, 16#001A5#),  -- LATIN SMALL LETTER P WITH HOOK .. LATIN SMALL LETTER P WITH HOOK
+      (16#001A8#, 16#001A8#),  -- LATIN SMALL LETTER TONE TWO .. LATIN SMALL LETTER TONE TWO
+      (16#001AD#, 16#001AD#),  -- LATIN SMALL LETTER T WITH HOOK .. LATIN SMALL LETTER T WITH HOOK
+      (16#001B0#, 16#001B0#),  -- LATIN SMALL LETTER U WITH HORN .. LATIN SMALL LETTER U WITH HORN
+      (16#001B4#, 16#001B4#),  -- LATIN SMALL LETTER Y WITH HOOK .. LATIN SMALL LETTER Y WITH HOOK
+      (16#001B6#, 16#001B6#),  -- LATIN SMALL LETTER Z WITH STROKE .. LATIN SMALL LETTER Z WITH STROKE
+      (16#001B9#, 16#001B9#),  -- LATIN SMALL LETTER EZH REVERSED .. LATIN SMALL LETTER EZH REVERSED
+      (16#001BD#, 16#001BD#),  -- LATIN SMALL LETTER TONE FIVE .. LATIN SMALL LETTER TONE FIVE
+      (16#001BF#, 16#001BF#),  -- LATIN LETTER WYNN .. LATIN LETTER WYNN
+      (16#001C5#, 16#001C5#),  -- LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON .. LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
+      (16#001C6#, 16#001C6#),  -- LATIN SMALL LETTER DZ WITH CARON .. LATIN SMALL LETTER DZ WITH CARON
+      (16#001C8#, 16#001C8#),  -- LATIN CAPITAL LETTER L WITH SMALL LETTER J .. LATIN CAPITAL LETTER L WITH SMALL LETTER J
+      (16#001C9#, 16#001C9#),  -- LATIN SMALL LETTER LJ .. LATIN SMALL LETTER LJ
+      (16#001CB#, 16#001CB#),  -- LATIN CAPITAL LETTER N WITH SMALL LETTER J .. LATIN CAPITAL LETTER N WITH SMALL LETTER J
+      (16#001CC#, 16#001CC#),  -- LATIN SMALL LETTER NJ .. LATIN SMALL LETTER NJ
+      (16#001CE#, 16#001CE#),  -- LATIN SMALL LETTER A WITH CARON .. LATIN SMALL LETTER A WITH CARON
+      (16#001D0#, 16#001D0#),  -- LATIN SMALL LETTER I WITH CARON .. LATIN SMALL LETTER I WITH CARON
+      (16#001D2#, 16#001D2#),  -- LATIN SMALL LETTER O WITH CARON .. LATIN SMALL LETTER O WITH CARON
+      (16#001D4#, 16#001D4#),  -- LATIN SMALL LETTER U WITH CARON .. LATIN SMALL LETTER U WITH CARON
+      (16#001D6#, 16#001D6#),  -- LATIN SMALL LETTER U WITH DIAERESIS AND MACRON .. LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+      (16#001D8#, 16#001D8#),  -- LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE .. LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+      (16#001DA#, 16#001DA#),  -- LATIN SMALL LETTER U WITH DIAERESIS AND CARON .. LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+      (16#001DC#, 16#001DC#),  -- LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE .. LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+      (16#001DD#, 16#001DD#),  -- LATIN SMALL LETTER TURNED E .. LATIN SMALL LETTER TURNED E
+      (16#001DF#, 16#001DF#),  -- LATIN SMALL LETTER A WITH DIAERESIS AND MACRON .. LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+      (16#001E1#, 16#001E1#),  -- LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON .. LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+      (16#001E3#, 16#001E3#),  -- LATIN SMALL LETTER AE WITH MACRON .. LATIN SMALL LETTER AE WITH MACRON
+      (16#001E5#, 16#001E5#),  -- LATIN SMALL LETTER G WITH STROKE .. LATIN SMALL LETTER G WITH STROKE
+      (16#001E7#, 16#001E7#),  -- LATIN SMALL LETTER G WITH CARON .. LATIN SMALL LETTER G WITH CARON
+      (16#001E9#, 16#001E9#),  -- LATIN SMALL LETTER K WITH CARON .. LATIN SMALL LETTER K WITH CARON
+      (16#001EB#, 16#001EB#),  -- LATIN SMALL LETTER O WITH OGONEK .. LATIN SMALL LETTER O WITH OGONEK
+      (16#001ED#, 16#001ED#),  -- LATIN SMALL LETTER O WITH OGONEK AND MACRON .. LATIN SMALL LETTER O WITH OGONEK AND MACRON
+      (16#001EF#, 16#001EF#),  -- LATIN SMALL LETTER EZH WITH CARON .. LATIN SMALL LETTER EZH WITH CARON
+      (16#001F2#, 16#001F2#),  -- LATIN CAPITAL LETTER D WITH SMALL LETTER Z .. LATIN CAPITAL LETTER D WITH SMALL LETTER Z
+      (16#001F3#, 16#001F3#),  -- LATIN SMALL LETTER DZ .. LATIN SMALL LETTER DZ
+      (16#001F5#, 16#001F5#),  -- LATIN SMALL LETTER G WITH ACUTE .. LATIN SMALL LETTER G WITH ACUTE
+      (16#001F9#, 16#001F9#),  -- LATIN SMALL LETTER N WITH GRAVE .. LATIN SMALL LETTER N WITH GRAVE
+      (16#001FB#, 16#001FB#),  -- LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE .. LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+      (16#001FD#, 16#001FD#),  -- LATIN SMALL LETTER AE WITH ACUTE .. LATIN SMALL LETTER AE WITH ACUTE
+      (16#001FF#, 16#001FF#),  -- LATIN SMALL LETTER O WITH STROKE AND ACUTE .. LATIN SMALL LETTER O WITH STROKE AND ACUTE
+      (16#00201#, 16#00201#),  -- LATIN SMALL LETTER A WITH DOUBLE GRAVE .. LATIN SMALL LETTER A WITH DOUBLE GRAVE
+      (16#00203#, 16#00203#),  -- LATIN SMALL LETTER A WITH INVERTED BREVE .. LATIN SMALL LETTER A WITH INVERTED BREVE
+      (16#00205#, 16#00205#),  -- LATIN SMALL LETTER E WITH DOUBLE GRAVE .. LATIN SMALL LETTER E WITH DOUBLE GRAVE
+      (16#00207#, 16#00207#),  -- LATIN SMALL LETTER E WITH INVERTED BREVE .. LATIN SMALL LETTER E WITH INVERTED BREVE
+      (16#00209#, 16#00209#),  -- LATIN SMALL LETTER I WITH DOUBLE GRAVE .. LATIN SMALL LETTER I WITH DOUBLE GRAVE
+      (16#0020B#, 16#0020B#),  -- LATIN SMALL LETTER I WITH INVERTED BREVE .. LATIN SMALL LETTER I WITH INVERTED BREVE
+      (16#0020D#, 16#0020D#),  -- LATIN SMALL LETTER O WITH DOUBLE GRAVE .. LATIN SMALL LETTER O WITH DOUBLE GRAVE
+      (16#0020F#, 16#0020F#),  -- LATIN SMALL LETTER O WITH INVERTED BREVE .. LATIN SMALL LETTER O WITH INVERTED BREVE
+      (16#00211#, 16#00211#),  -- LATIN SMALL LETTER R WITH DOUBLE GRAVE .. LATIN SMALL LETTER R WITH DOUBLE GRAVE
+      (16#00213#, 16#00213#),  -- LATIN SMALL LETTER R WITH INVERTED BREVE .. LATIN SMALL LETTER R WITH INVERTED BREVE
+      (16#00215#, 16#00215#),  -- LATIN SMALL LETTER U WITH DOUBLE GRAVE .. LATIN SMALL LETTER U WITH DOUBLE GRAVE
+      (16#00217#, 16#00217#),  -- LATIN SMALL LETTER U WITH INVERTED BREVE .. LATIN SMALL LETTER U WITH INVERTED BREVE
+      (16#00219#, 16#00219#),  -- LATIN SMALL LETTER S WITH COMMA BELOW .. LATIN SMALL LETTER S WITH COMMA BELOW
+      (16#0021B#, 16#0021B#),  -- LATIN SMALL LETTER T WITH COMMA BELOW .. LATIN SMALL LETTER T WITH COMMA BELOW
+      (16#0021D#, 16#0021D#),  -- LATIN SMALL LETTER YOGH .. LATIN SMALL LETTER YOGH
+      (16#0021F#, 16#0021F#),  -- LATIN SMALL LETTER H WITH CARON .. LATIN SMALL LETTER H WITH CARON
+      (16#00223#, 16#00223#),  -- LATIN SMALL LETTER OU .. LATIN SMALL LETTER OU
+      (16#00225#, 16#00225#),  -- LATIN SMALL LETTER Z WITH HOOK .. LATIN SMALL LETTER Z WITH HOOK
+      (16#00227#, 16#00227#),  -- LATIN SMALL LETTER A WITH DOT ABOVE .. LATIN SMALL LETTER A WITH DOT ABOVE
+      (16#00229#, 16#00229#),  -- LATIN SMALL LETTER E WITH CEDILLA .. LATIN SMALL LETTER E WITH CEDILLA
+      (16#0022B#, 16#0022B#),  -- LATIN SMALL LETTER O WITH DIAERESIS AND MACRON .. LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
+      (16#0022D#, 16#0022D#),  -- LATIN SMALL LETTER O WITH TILDE AND MACRON .. LATIN SMALL LETTER O WITH TILDE AND MACRON
+      (16#0022F#, 16#0022F#),  -- LATIN SMALL LETTER O WITH DOT ABOVE .. LATIN SMALL LETTER O WITH DOT ABOVE
+      (16#00231#, 16#00231#),  -- LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON .. LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
+      (16#00233#, 16#00233#),  -- LATIN SMALL LETTER Y WITH MACRON .. LATIN SMALL LETTER Y WITH MACRON
+      (16#00253#, 16#00253#),  -- LATIN SMALL LETTER B WITH HOOK .. LATIN SMALL LETTER B WITH HOOK
+      (16#00254#, 16#00254#),  -- LATIN SMALL LETTER OPEN O .. LATIN SMALL LETTER OPEN O
+      (16#00256#, 16#00257#),  -- LATIN SMALL LETTER D WITH TAIL .. LATIN SMALL LETTER D WITH HOOK
+      (16#00259#, 16#00259#),  -- LATIN SMALL LETTER SCHWA .. LATIN SMALL LETTER SCHWA
+      (16#0025B#, 16#0025B#),  -- LATIN SMALL LETTER OPEN E .. LATIN SMALL LETTER OPEN E
+      (16#00260#, 16#00260#),  -- LATIN SMALL LETTER G WITH HOOK .. LATIN SMALL LETTER G WITH HOOK
+      (16#00263#, 16#00263#),  -- LATIN SMALL LETTER GAMMA .. LATIN SMALL LETTER GAMMA
+      (16#00268#, 16#00268#),  -- LATIN SMALL LETTER I WITH STROKE .. LATIN SMALL LETTER I WITH STROKE
+      (16#00269#, 16#00269#),  -- LATIN SMALL LETTER IOTA .. LATIN SMALL LETTER IOTA
+      (16#0026F#, 16#0026F#),  -- LATIN SMALL LETTER TURNED M .. LATIN SMALL LETTER TURNED M
+      (16#00272#, 16#00272#),  -- LATIN SMALL LETTER N WITH LEFT HOOK .. LATIN SMALL LETTER N WITH LEFT HOOK
+      (16#00275#, 16#00275#),  -- LATIN SMALL LETTER BARRED O .. LATIN SMALL LETTER BARRED O
+      (16#00280#, 16#00280#),  -- LATIN LETTER SMALL CAPITAL R .. LATIN LETTER SMALL CAPITAL R
+      (16#00283#, 16#00283#),  -- LATIN SMALL LETTER ESH .. LATIN SMALL LETTER ESH
+      (16#00288#, 16#00288#),  -- LATIN SMALL LETTER T WITH RETROFLEX HOOK .. LATIN SMALL LETTER T WITH RETROFLEX HOOK
+      (16#0028A#, 16#0028B#),  -- LATIN SMALL LETTER UPSILON .. LATIN SMALL LETTER V WITH HOOK
+      (16#00292#, 16#00292#),  -- LATIN SMALL LETTER EZH .. LATIN SMALL LETTER EZH
+      (16#003AC#, 16#003AC#),  -- GREEK SMALL LETTER ALPHA WITH TONOS .. GREEK SMALL LETTER ALPHA WITH TONOS
+      (16#003AD#, 16#003AF#),  -- GREEK SMALL LETTER EPSILON WITH TONOS .. GREEK SMALL LETTER IOTA WITH TONOS
+      (16#003B1#, 16#003C1#),  -- GREEK SMALL LETTER ALPHA .. GREEK SMALL LETTER RHO
+      (16#003C2#, 16#003C2#),  -- GREEK SMALL LETTER FINAL SIGMA .. GREEK SMALL LETTER FINAL SIGMA
+      (16#003C3#, 16#003CB#),  -- GREEK SMALL LETTER SIGMA .. GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+      (16#003CC#, 16#003CC#),  -- GREEK SMALL LETTER OMICRON WITH TONOS .. GREEK SMALL LETTER OMICRON WITH TONOS
+      (16#003CD#, 16#003CE#),  -- GREEK SMALL LETTER UPSILON WITH TONOS .. GREEK SMALL LETTER OMEGA WITH TONOS
+      (16#003D0#, 16#003D0#),  -- GREEK BETA SYMBOL .. GREEK BETA SYMBOL
+      (16#003D1#, 16#003D1#),  -- GREEK THETA SYMBOL .. GREEK THETA SYMBOL
+      (16#003D5#, 16#003D5#),  -- GREEK PHI SYMBOL .. GREEK PHI SYMBOL
+      (16#003D6#, 16#003D6#),  -- GREEK PI SYMBOL .. GREEK PI SYMBOL
+      (16#003D9#, 16#003D9#),  -- GREEK SMALL LETTER ARCHAIC KOPPA .. GREEK SMALL LETTER ARCHAIC KOPPA
+      (16#003DB#, 16#003DB#),  -- GREEK SMALL LETTER STIGMA .. GREEK SMALL LETTER STIGMA
+      (16#003DD#, 16#003DD#),  -- GREEK SMALL LETTER DIGAMMA .. GREEK SMALL LETTER DIGAMMA
+      (16#003DF#, 16#003DF#),  -- GREEK SMALL LETTER KOPPA .. GREEK SMALL LETTER KOPPA
+      (16#003E1#, 16#003E1#),  -- GREEK SMALL LETTER SAMPI .. GREEK SMALL LETTER SAMPI
+      (16#003E3#, 16#003E3#),  -- COPTIC SMALL LETTER SHEI .. COPTIC SMALL LETTER SHEI
+      (16#003E5#, 16#003E5#),  -- COPTIC SMALL LETTER FEI .. COPTIC SMALL LETTER FEI
+      (16#003E7#, 16#003E7#),  -- COPTIC SMALL LETTER KHEI .. COPTIC SMALL LETTER KHEI
+      (16#003E9#, 16#003E9#),  -- COPTIC SMALL LETTER HORI .. COPTIC SMALL LETTER HORI
+      (16#003EB#, 16#003EB#),  -- COPTIC SMALL LETTER GANGIA .. COPTIC SMALL LETTER GANGIA
+      (16#003ED#, 16#003ED#),  -- COPTIC SMALL LETTER SHIMA .. COPTIC SMALL LETTER SHIMA
+      (16#003EF#, 16#003EF#),  -- COPTIC SMALL LETTER DEI .. COPTIC SMALL LETTER DEI
+      (16#003F0#, 16#003F0#),  -- GREEK KAPPA SYMBOL .. GREEK KAPPA SYMBOL
+      (16#003F1#, 16#003F1#),  -- GREEK RHO SYMBOL .. GREEK RHO SYMBOL
+      (16#003F2#, 16#003F2#),  -- GREEK LUNATE SIGMA SYMBOL .. GREEK LUNATE SIGMA SYMBOL
+      (16#003F5#, 16#003F5#),  -- GREEK LUNATE EPSILON SYMBOL .. GREEK LUNATE EPSILON SYMBOL
+      (16#00430#, 16#0044F#),  -- CYRILLIC SMALL LETTER A .. CYRILLIC SMALL LETTER YA
+      (16#00450#, 16#0045F#),  -- CYRILLIC SMALL LETTER IE WITH GRAVE .. CYRILLIC SMALL LETTER DZHE
+      (16#00461#, 16#00461#),  -- CYRILLIC SMALL LETTER OMEGA .. CYRILLIC SMALL LETTER OMEGA
+      (16#00463#, 16#00463#),  -- CYRILLIC SMALL LETTER YAT .. CYRILLIC SMALL LETTER YAT
+      (16#00465#, 16#00465#),  -- CYRILLIC SMALL LETTER IOTIFIED E .. CYRILLIC SMALL LETTER IOTIFIED E
+      (16#00467#, 16#00467#),  -- CYRILLIC SMALL LETTER LITTLE YUS .. CYRILLIC SMALL LETTER LITTLE YUS
+      (16#00469#, 16#00469#),  -- CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS .. CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS
+      (16#0046B#, 16#0046B#),  -- CYRILLIC SMALL LETTER BIG YUS .. CYRILLIC SMALL LETTER BIG YUS
+      (16#0046D#, 16#0046D#),  -- CYRILLIC SMALL LETTER IOTIFIED BIG YUS .. CYRILLIC SMALL LETTER IOTIFIED BIG YUS
+      (16#0046F#, 16#0046F#),  -- CYRILLIC SMALL LETTER KSI .. CYRILLIC SMALL LETTER KSI
+      (16#00471#, 16#00471#),  -- CYRILLIC SMALL LETTER PSI .. CYRILLIC SMALL LETTER PSI
+      (16#00473#, 16#00473#),  -- CYRILLIC SMALL LETTER FITA .. CYRILLIC SMALL LETTER FITA
+      (16#00475#, 16#00475#),  -- CYRILLIC SMALL LETTER IZHITSA .. CYRILLIC SMALL LETTER IZHITSA
+      (16#00477#, 16#00477#),  -- CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT .. CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+      (16#00479#, 16#00479#),  -- CYRILLIC SMALL LETTER UK .. CYRILLIC SMALL LETTER UK
+      (16#0047B#, 16#0047B#),  -- CYRILLIC SMALL LETTER ROUND OMEGA .. CYRILLIC SMALL LETTER ROUND OMEGA
+      (16#0047D#, 16#0047D#),  -- CYRILLIC SMALL LETTER OMEGA WITH TITLO .. CYRILLIC SMALL LETTER OMEGA WITH TITLO
+      (16#0047F#, 16#0047F#),  -- CYRILLIC SMALL LETTER OT .. CYRILLIC SMALL LETTER OT
+      (16#00481#, 16#00481#),  -- CYRILLIC SMALL LETTER KOPPA .. CYRILLIC SMALL LETTER KOPPA
+      (16#0048B#, 16#0048B#),  -- CYRILLIC SMALL LETTER SHORT I WITH TAIL .. CYRILLIC SMALL LETTER SHORT I WITH TAIL
+      (16#0048D#, 16#0048D#),  -- CYRILLIC SMALL LETTER SEMISOFT SIGN .. CYRILLIC SMALL LETTER SEMISOFT SIGN
+      (16#0048F#, 16#0048F#),  -- CYRILLIC SMALL LETTER ER WITH TICK .. CYRILLIC SMALL LETTER ER WITH TICK
+      (16#00491#, 16#00491#),  -- CYRILLIC SMALL LETTER GHE WITH UPTURN .. CYRILLIC SMALL LETTER GHE WITH UPTURN
+      (16#00493#, 16#00493#),  -- CYRILLIC SMALL LETTER GHE WITH STROKE .. CYRILLIC SMALL LETTER GHE WITH STROKE
+      (16#00495#, 16#00495#),  -- CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK .. CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK
+      (16#00497#, 16#00497#),  -- CYRILLIC SMALL LETTER ZHE WITH DESCENDER .. CYRILLIC SMALL LETTER ZHE WITH DESCENDER
+      (16#00499#, 16#00499#),  -- CYRILLIC SMALL LETTER ZE WITH DESCENDER .. CYRILLIC SMALL LETTER ZE WITH DESCENDER
+      (16#0049B#, 16#0049B#),  -- CYRILLIC SMALL LETTER KA WITH DESCENDER .. CYRILLIC SMALL LETTER KA WITH DESCENDER
+      (16#0049D#, 16#0049D#),  -- CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE .. CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE
+      (16#0049F#, 16#0049F#),  -- CYRILLIC SMALL LETTER KA WITH STROKE .. CYRILLIC SMALL LETTER KA WITH STROKE
+      (16#004A1#, 16#004A1#),  -- CYRILLIC SMALL LETTER BASHKIR KA .. CYRILLIC SMALL LETTER BASHKIR KA
+      (16#004A3#, 16#004A3#),  -- CYRILLIC SMALL LETTER EN WITH DESCENDER .. CYRILLIC SMALL LETTER EN WITH DESCENDER
+      (16#004A5#, 16#004A5#),  -- CYRILLIC SMALL LIGATURE EN GHE .. CYRILLIC SMALL LIGATURE EN GHE
+      (16#004A7#, 16#004A7#),  -- CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK .. CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK
+      (16#004A9#, 16#004A9#),  -- CYRILLIC SMALL LETTER ABKHASIAN HA .. CYRILLIC SMALL LETTER ABKHASIAN HA
+      (16#004AB#, 16#004AB#),  -- CYRILLIC SMALL LETTER ES WITH DESCENDER .. CYRILLIC SMALL LETTER ES WITH DESCENDER
+      (16#004AD#, 16#004AD#),  -- CYRILLIC SMALL LETTER TE WITH DESCENDER .. CYRILLIC SMALL LETTER TE WITH DESCENDER
+      (16#004AF#, 16#004AF#),  -- CYRILLIC SMALL LETTER STRAIGHT U .. CYRILLIC SMALL LETTER STRAIGHT U
+      (16#004B1#, 16#004B1#),  -- CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE .. CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
+      (16#004B3#, 16#004B3#),  -- CYRILLIC SMALL LETTER HA WITH DESCENDER .. CYRILLIC SMALL LETTER HA WITH DESCENDER
+      (16#004B5#, 16#004B5#),  -- CYRILLIC SMALL LIGATURE TE TSE .. CYRILLIC SMALL LIGATURE TE TSE
+      (16#004B7#, 16#004B7#),  -- CYRILLIC SMALL LETTER CHE WITH DESCENDER .. CYRILLIC SMALL LETTER CHE WITH DESCENDER
+      (16#004B9#, 16#004B9#),  -- CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE .. CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE
+      (16#004BB#, 16#004BB#),  -- CYRILLIC SMALL LETTER SHHA .. CYRILLIC SMALL LETTER SHHA
+      (16#004BD#, 16#004BD#),  -- CYRILLIC SMALL LETTER ABKHASIAN CHE .. CYRILLIC SMALL LETTER ABKHASIAN CHE
+      (16#004BF#, 16#004BF#),  -- CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER .. CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER
+      (16#004C2#, 16#004C2#),  -- CYRILLIC SMALL LETTER ZHE WITH BREVE .. CYRILLIC SMALL LETTER ZHE WITH BREVE
+      (16#004C4#, 16#004C4#),  -- CYRILLIC SMALL LETTER KA WITH HOOK .. CYRILLIC SMALL LETTER KA WITH HOOK
+      (16#004C6#, 16#004C6#),  -- CYRILLIC SMALL LETTER EL WITH TAIL .. CYRILLIC SMALL LETTER EL WITH TAIL
+      (16#004C8#, 16#004C8#),  -- CYRILLIC SMALL LETTER EN WITH HOOK .. CYRILLIC SMALL LETTER EN WITH HOOK
+      (16#004CA#, 16#004CA#),  -- CYRILLIC SMALL LETTER EN WITH TAIL .. CYRILLIC SMALL LETTER EN WITH TAIL
+      (16#004CC#, 16#004CC#),  -- CYRILLIC SMALL LETTER KHAKASSIAN CHE .. CYRILLIC SMALL LETTER KHAKASSIAN CHE
+      (16#004CE#, 16#004CE#),  -- CYRILLIC SMALL LETTER EM WITH TAIL .. CYRILLIC SMALL LETTER EM WITH TAIL
+      (16#004D1#, 16#004D1#),  -- CYRILLIC SMALL LETTER A WITH BREVE .. CYRILLIC SMALL LETTER A WITH BREVE
+      (16#004D3#, 16#004D3#),  -- CYRILLIC SMALL LETTER A WITH DIAERESIS .. CYRILLIC SMALL LETTER A WITH DIAERESIS
+      (16#004D5#, 16#004D5#),  -- CYRILLIC SMALL LIGATURE A IE .. CYRILLIC SMALL LIGATURE A IE
+      (16#004D7#, 16#004D7#),  -- CYRILLIC SMALL LETTER IE WITH BREVE .. CYRILLIC SMALL LETTER IE WITH BREVE
+      (16#004D9#, 16#004D9#),  -- CYRILLIC SMALL LETTER SCHWA .. CYRILLIC SMALL LETTER SCHWA
+      (16#004DB#, 16#004DB#),  -- CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS .. CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
+      (16#004DD#, 16#004DD#),  -- CYRILLIC SMALL LETTER ZHE WITH DIAERESIS .. CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
+      (16#004DF#, 16#004DF#),  -- CYRILLIC SMALL LETTER ZE WITH DIAERESIS .. CYRILLIC SMALL LETTER ZE WITH DIAERESIS
+      (16#004E1#, 16#004E1#),  -- CYRILLIC SMALL LETTER ABKHASIAN DZE .. CYRILLIC SMALL LETTER ABKHASIAN DZE
+      (16#004E3#, 16#004E3#),  -- CYRILLIC SMALL LETTER I WITH MACRON .. CYRILLIC SMALL LETTER I WITH MACRON
+      (16#004E5#, 16#004E5#),  -- CYRILLIC SMALL LETTER I WITH DIAERESIS .. CYRILLIC SMALL LETTER I WITH DIAERESIS
+      (16#004E7#, 16#004E7#),  -- CYRILLIC SMALL LETTER O WITH DIAERESIS .. CYRILLIC SMALL LETTER O WITH DIAERESIS
+      (16#004E9#, 16#004E9#),  -- CYRILLIC SMALL LETTER BARRED O .. CYRILLIC SMALL LETTER BARRED O
+      (16#004EB#, 16#004EB#),  -- CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS .. CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
+      (16#004ED#, 16#004ED#),  -- CYRILLIC SMALL LETTER E WITH DIAERESIS .. CYRILLIC SMALL LETTER E WITH DIAERESIS
+      (16#004EF#, 16#004EF#),  -- CYRILLIC SMALL LETTER U WITH MACRON .. CYRILLIC SMALL LETTER U WITH MACRON
+      (16#004F1#, 16#004F1#),  -- CYRILLIC SMALL LETTER U WITH DIAERESIS .. CYRILLIC SMALL LETTER U WITH DIAERESIS
+      (16#004F3#, 16#004F3#),  -- CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE .. CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
+      (16#004F5#, 16#004F5#),  -- CYRILLIC SMALL LETTER CHE WITH DIAERESIS .. CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+      (16#004F9#, 16#004F9#),  -- CYRILLIC SMALL LETTER YERU WITH DIAERESIS .. CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+      (16#00501#, 16#00501#),  -- CYRILLIC SMALL LETTER KOMI DE .. CYRILLIC SMALL LETTER KOMI DE
+      (16#00503#, 16#00503#),  -- CYRILLIC SMALL LETTER KOMI DJE .. CYRILLIC SMALL LETTER KOMI DJE
+      (16#00505#, 16#00505#),  -- CYRILLIC SMALL LETTER KOMI ZJE .. CYRILLIC SMALL LETTER KOMI ZJE
+      (16#00507#, 16#00507#),  -- CYRILLIC SMALL LETTER KOMI DZJE .. CYRILLIC SMALL LETTER KOMI DZJE
+      (16#00509#, 16#00509#),  -- CYRILLIC SMALL LETTER KOMI LJE .. CYRILLIC SMALL LETTER KOMI LJE
+      (16#0050B#, 16#0050B#),  -- CYRILLIC SMALL LETTER KOMI NJE .. CYRILLIC SMALL LETTER KOMI NJE
+      (16#0050D#, 16#0050D#),  -- CYRILLIC SMALL LETTER KOMI SJE .. CYRILLIC SMALL LETTER KOMI SJE
+      (16#0050F#, 16#0050F#),  -- CYRILLIC SMALL LETTER KOMI TJE .. CYRILLIC SMALL LETTER KOMI TJE
+      (16#00561#, 16#00586#),  -- ARMENIAN SMALL LETTER AYB .. ARMENIAN SMALL LETTER FEH
+      (16#01E01#, 16#01E01#),  -- LATIN SMALL LETTER A WITH RING BELOW .. LATIN SMALL LETTER A WITH RING BELOW
+      (16#01E03#, 16#01E03#),  -- LATIN SMALL LETTER B WITH DOT ABOVE .. LATIN SMALL LETTER B WITH DOT ABOVE
+      (16#01E05#, 16#01E05#),  -- LATIN SMALL LETTER B WITH DOT BELOW .. LATIN SMALL LETTER B WITH DOT BELOW
+      (16#01E07#, 16#01E07#),  -- LATIN SMALL LETTER B WITH LINE BELOW .. LATIN SMALL LETTER B WITH LINE BELOW
+      (16#01E09#, 16#01E09#),  -- LATIN SMALL LETTER C WITH CEDILLA AND ACUTE .. LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+      (16#01E0B#, 16#01E0B#),  -- LATIN SMALL LETTER D WITH DOT ABOVE .. LATIN SMALL LETTER D WITH DOT ABOVE
+      (16#01E0D#, 16#01E0D#),  -- LATIN SMALL LETTER D WITH DOT BELOW .. LATIN SMALL LETTER D WITH DOT BELOW
+      (16#01E0F#, 16#01E0F#),  -- LATIN SMALL LETTER D WITH LINE BELOW .. LATIN SMALL LETTER D WITH LINE BELOW
+      (16#01E11#, 16#01E11#),  -- LATIN SMALL LETTER D WITH CEDILLA .. LATIN SMALL LETTER D WITH CEDILLA
+      (16#01E13#, 16#01E13#),  -- LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW
+      (16#01E15#, 16#01E15#),  -- LATIN SMALL LETTER E WITH MACRON AND GRAVE .. LATIN SMALL LETTER E WITH MACRON AND GRAVE
+      (16#01E17#, 16#01E17#),  -- LATIN SMALL LETTER E WITH MACRON AND ACUTE .. LATIN SMALL LETTER E WITH MACRON AND ACUTE
+      (16#01E19#, 16#01E19#),  -- LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW
+      (16#01E1B#, 16#01E1B#),  -- LATIN SMALL LETTER E WITH TILDE BELOW .. LATIN SMALL LETTER E WITH TILDE BELOW
+      (16#01E1D#, 16#01E1D#),  -- LATIN SMALL LETTER E WITH CEDILLA AND BREVE .. LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+      (16#01E1F#, 16#01E1F#),  -- LATIN SMALL LETTER F WITH DOT ABOVE .. LATIN SMALL LETTER F WITH DOT ABOVE
+      (16#01E21#, 16#01E21#),  -- LATIN SMALL LETTER G WITH MACRON .. LATIN SMALL LETTER G WITH MACRON
+      (16#01E23#, 16#01E23#),  -- LATIN SMALL LETTER H WITH DOT ABOVE .. LATIN SMALL LETTER H WITH DOT ABOVE
+      (16#01E25#, 16#01E25#),  -- LATIN SMALL LETTER H WITH DOT BELOW .. LATIN SMALL LETTER H WITH DOT BELOW
+      (16#01E27#, 16#01E27#),  -- LATIN SMALL LETTER H WITH DIAERESIS .. LATIN SMALL LETTER H WITH DIAERESIS
+      (16#01E29#, 16#01E29#),  -- LATIN SMALL LETTER H WITH CEDILLA .. LATIN SMALL LETTER H WITH CEDILLA
+      (16#01E2B#, 16#01E2B#),  -- LATIN SMALL LETTER H WITH BREVE BELOW .. LATIN SMALL LETTER H WITH BREVE BELOW
+      (16#01E2D#, 16#01E2D#),  -- LATIN SMALL LETTER I WITH TILDE BELOW .. LATIN SMALL LETTER I WITH TILDE BELOW
+      (16#01E2F#, 16#01E2F#),  -- LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE .. LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
+      (16#01E31#, 16#01E31#),  -- LATIN SMALL LETTER K WITH ACUTE .. LATIN SMALL LETTER K WITH ACUTE
+      (16#01E33#, 16#01E33#),  -- LATIN SMALL LETTER K WITH DOT BELOW .. LATIN SMALL LETTER K WITH DOT BELOW
+      (16#01E35#, 16#01E35#),  -- LATIN SMALL LETTER K WITH LINE BELOW .. LATIN SMALL LETTER K WITH LINE BELOW
+      (16#01E37#, 16#01E37#),  -- LATIN SMALL LETTER L WITH DOT BELOW .. LATIN SMALL LETTER L WITH DOT BELOW
+      (16#01E39#, 16#01E39#),  -- LATIN SMALL LETTER L WITH DOT BELOW AND MACRON .. LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
+      (16#01E3B#, 16#01E3B#),  -- LATIN SMALL LETTER L WITH LINE BELOW .. LATIN SMALL LETTER L WITH LINE BELOW
+      (16#01E3D#, 16#01E3D#),  -- LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW
+      (16#01E3F#, 16#01E3F#),  -- LATIN SMALL LETTER M WITH ACUTE .. LATIN SMALL LETTER M WITH ACUTE
+      (16#01E41#, 16#01E41#),  -- LATIN SMALL LETTER M WITH DOT ABOVE .. LATIN SMALL LETTER M WITH DOT ABOVE
+      (16#01E43#, 16#01E43#),  -- LATIN SMALL LETTER M WITH DOT BELOW .. LATIN SMALL LETTER M WITH DOT BELOW
+      (16#01E45#, 16#01E45#),  -- LATIN SMALL LETTER N WITH DOT ABOVE .. LATIN SMALL LETTER N WITH DOT ABOVE
+      (16#01E47#, 16#01E47#),  -- LATIN SMALL LETTER N WITH DOT BELOW .. LATIN SMALL LETTER N WITH DOT BELOW
+      (16#01E49#, 16#01E49#),  -- LATIN SMALL LETTER N WITH LINE BELOW .. LATIN SMALL LETTER N WITH LINE BELOW
+      (16#01E4B#, 16#01E4B#),  -- LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW
+      (16#01E4D#, 16#01E4D#),  -- LATIN SMALL LETTER O WITH TILDE AND ACUTE .. LATIN SMALL LETTER O WITH TILDE AND ACUTE
+      (16#01E4F#, 16#01E4F#),  -- LATIN SMALL LETTER O WITH TILDE AND DIAERESIS .. LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
+      (16#01E51#, 16#01E51#),  -- LATIN SMALL LETTER O WITH MACRON AND GRAVE .. LATIN SMALL LETTER O WITH MACRON AND GRAVE
+      (16#01E53#, 16#01E53#),  -- LATIN SMALL LETTER O WITH MACRON AND ACUTE .. LATIN SMALL LETTER O WITH MACRON AND ACUTE
+      (16#01E55#, 16#01E55#),  -- LATIN SMALL LETTER P WITH ACUTE .. LATIN SMALL LETTER P WITH ACUTE
+      (16#01E57#, 16#01E57#),  -- LATIN SMALL LETTER P WITH DOT ABOVE .. LATIN SMALL LETTER P WITH DOT ABOVE
+      (16#01E59#, 16#01E59#),  -- LATIN SMALL LETTER R WITH DOT ABOVE .. LATIN SMALL LETTER R WITH DOT ABOVE
+      (16#01E5B#, 16#01E5B#),  -- LATIN SMALL LETTER R WITH DOT BELOW .. LATIN SMALL LETTER R WITH DOT BELOW
+      (16#01E5D#, 16#01E5D#),  -- LATIN SMALL LETTER R WITH DOT BELOW AND MACRON .. LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
+      (16#01E5F#, 16#01E5F#),  -- LATIN SMALL LETTER R WITH LINE BELOW .. LATIN SMALL LETTER R WITH LINE BELOW
+      (16#01E61#, 16#01E61#),  -- LATIN SMALL LETTER S WITH DOT ABOVE .. LATIN SMALL LETTER S WITH DOT ABOVE
+      (16#01E63#, 16#01E63#),  -- LATIN SMALL LETTER S WITH DOT BELOW .. LATIN SMALL LETTER S WITH DOT BELOW
+      (16#01E65#, 16#01E65#),  -- LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE .. LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
+      (16#01E67#, 16#01E67#),  -- LATIN SMALL LETTER S WITH CARON AND DOT ABOVE .. LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
+      (16#01E69#, 16#01E69#),  -- LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE .. LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
+      (16#01E6B#, 16#01E6B#),  -- LATIN SMALL LETTER T WITH DOT ABOVE .. LATIN SMALL LETTER T WITH DOT ABOVE
+      (16#01E6D#, 16#01E6D#),  -- LATIN SMALL LETTER T WITH DOT BELOW .. LATIN SMALL LETTER T WITH DOT BELOW
+      (16#01E6F#, 16#01E6F#),  -- LATIN SMALL LETTER T WITH LINE BELOW .. LATIN SMALL LETTER T WITH LINE BELOW
+      (16#01E71#, 16#01E71#),  -- LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW
+      (16#01E73#, 16#01E73#),  -- LATIN SMALL LETTER U WITH DIAERESIS BELOW .. LATIN SMALL LETTER U WITH DIAERESIS BELOW
+      (16#01E75#, 16#01E75#),  -- LATIN SMALL LETTER U WITH TILDE BELOW .. LATIN SMALL LETTER U WITH TILDE BELOW
+      (16#01E77#, 16#01E77#),  -- LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW
+      (16#01E79#, 16#01E79#),  -- LATIN SMALL LETTER U WITH TILDE AND ACUTE .. LATIN SMALL LETTER U WITH TILDE AND ACUTE
+      (16#01E7B#, 16#01E7B#),  -- LATIN SMALL LETTER U WITH MACRON AND DIAERESIS .. LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
+      (16#01E7D#, 16#01E7D#),  -- LATIN SMALL LETTER V WITH TILDE .. LATIN SMALL LETTER V WITH TILDE
+      (16#01E7F#, 16#01E7F#),  -- LATIN SMALL LETTER V WITH DOT BELOW .. LATIN SMALL LETTER V WITH DOT BELOW
+      (16#01E81#, 16#01E81#),  -- LATIN SMALL LETTER W WITH GRAVE .. LATIN SMALL LETTER W WITH GRAVE
+      (16#01E83#, 16#01E83#),  -- LATIN SMALL LETTER W WITH ACUTE .. LATIN SMALL LETTER W WITH ACUTE
+      (16#01E85#, 16#01E85#),  -- LATIN SMALL LETTER W WITH DIAERESIS .. LATIN SMALL LETTER W WITH DIAERESIS
+      (16#01E87#, 16#01E87#),  -- LATIN SMALL LETTER W WITH DOT ABOVE .. LATIN SMALL LETTER W WITH DOT ABOVE
+      (16#01E89#, 16#01E89#),  -- LATIN SMALL LETTER W WITH DOT BELOW .. LATIN SMALL LETTER W WITH DOT BELOW
+      (16#01E8B#, 16#01E8B#),  -- LATIN SMALL LETTER X WITH DOT ABOVE .. LATIN SMALL LETTER X WITH DOT ABOVE
+      (16#01E8D#, 16#01E8D#),  -- LATIN SMALL LETTER X WITH DIAERESIS .. LATIN SMALL LETTER X WITH DIAERESIS
+      (16#01E8F#, 16#01E8F#),  -- LATIN SMALL LETTER Y WITH DOT ABOVE .. LATIN SMALL LETTER Y WITH DOT ABOVE
+      (16#01E91#, 16#01E91#),  -- LATIN SMALL LETTER Z WITH CIRCUMFLEX .. LATIN SMALL LETTER Z WITH CIRCUMFLEX
+      (16#01E93#, 16#01E93#),  -- LATIN SMALL LETTER Z WITH DOT BELOW .. LATIN SMALL LETTER Z WITH DOT BELOW
+      (16#01E95#, 16#01E95#),  -- LATIN SMALL LETTER Z WITH LINE BELOW .. LATIN SMALL LETTER Z WITH LINE BELOW
+      (16#01E9B#, 16#01E9B#),  -- LATIN SMALL LETTER LONG S WITH DOT ABOVE .. LATIN SMALL LETTER LONG S WITH DOT ABOVE
+      (16#01EA1#, 16#01EA1#),  -- LATIN SMALL LETTER A WITH DOT BELOW .. LATIN SMALL LETTER A WITH DOT BELOW
+      (16#01EA3#, 16#01EA3#),  -- LATIN SMALL LETTER A WITH HOOK ABOVE .. LATIN SMALL LETTER A WITH HOOK ABOVE
+      (16#01EA5#, 16#01EA5#),  -- LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE .. LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+      (16#01EA7#, 16#01EA7#),  -- LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE .. LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
+      (16#01EA9#, 16#01EA9#),  -- LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE .. LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+      (16#01EAB#, 16#01EAB#),  -- LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE .. LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
+      (16#01EAD#, 16#01EAD#),  -- LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW .. LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+      (16#01EAF#, 16#01EAF#),  -- LATIN SMALL LETTER A WITH BREVE AND ACUTE .. LATIN SMALL LETTER A WITH BREVE AND ACUTE
+      (16#01EB1#, 16#01EB1#),  -- LATIN SMALL LETTER A WITH BREVE AND GRAVE .. LATIN SMALL LETTER A WITH BREVE AND GRAVE
+      (16#01EB3#, 16#01EB3#),  -- LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE .. LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
+      (16#01EB5#, 16#01EB5#),  -- LATIN SMALL LETTER A WITH BREVE AND TILDE .. LATIN SMALL LETTER A WITH BREVE AND TILDE
+      (16#01EB7#, 16#01EB7#),  -- LATIN SMALL LETTER A WITH BREVE AND DOT BELOW .. LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+      (16#01EB9#, 16#01EB9#),  -- LATIN SMALL LETTER E WITH DOT BELOW .. LATIN SMALL LETTER E WITH DOT BELOW
+      (16#01EBB#, 16#01EBB#),  -- LATIN SMALL LETTER E WITH HOOK ABOVE .. LATIN SMALL LETTER E WITH HOOK ABOVE
+      (16#01EBD#, 16#01EBD#),  -- LATIN SMALL LETTER E WITH TILDE .. LATIN SMALL LETTER E WITH TILDE
+      (16#01EBF#, 16#01EBF#),  -- LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE .. LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+      (16#01EC1#, 16#01EC1#),  -- LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE .. LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+      (16#01EC3#, 16#01EC3#),  -- LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE .. LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+      (16#01EC5#, 16#01EC5#),  -- LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE .. LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+      (16#01EC7#, 16#01EC7#),  -- LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW .. LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+      (16#01EC9#, 16#01EC9#),  -- LATIN SMALL LETTER I WITH HOOK ABOVE .. LATIN SMALL LETTER I WITH HOOK ABOVE
+      (16#01ECB#, 16#01ECB#),  -- LATIN SMALL LETTER I WITH DOT BELOW .. LATIN SMALL LETTER I WITH DOT BELOW
+      (16#01ECD#, 16#01ECD#),  -- LATIN SMALL LETTER O WITH DOT BELOW .. LATIN SMALL LETTER O WITH DOT BELOW
+      (16#01ECF#, 16#01ECF#),  -- LATIN SMALL LETTER O WITH HOOK ABOVE .. LATIN SMALL LETTER O WITH HOOK ABOVE
+      (16#01ED1#, 16#01ED1#),  -- LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE .. LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+      (16#01ED3#, 16#01ED3#),  -- LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE .. LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+      (16#01ED5#, 16#01ED5#),  -- LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE .. LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+      (16#01ED7#, 16#01ED7#),  -- LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE .. LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+      (16#01ED9#, 16#01ED9#),  -- LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW .. LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+      (16#01EDB#, 16#01EDB#),  -- LATIN SMALL LETTER O WITH HORN AND ACUTE .. LATIN SMALL LETTER O WITH HORN AND ACUTE
+      (16#01EDD#, 16#01EDD#),  -- LATIN SMALL LETTER O WITH HORN AND GRAVE .. LATIN SMALL LETTER O WITH HORN AND GRAVE
+      (16#01EDF#, 16#01EDF#),  -- LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE .. LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
+      (16#01EE1#, 16#01EE1#),  -- LATIN SMALL LETTER O WITH HORN AND TILDE .. LATIN SMALL LETTER O WITH HORN AND TILDE
+      (16#01EE3#, 16#01EE3#),  -- LATIN SMALL LETTER O WITH HORN AND DOT BELOW .. LATIN SMALL LETTER O WITH HORN AND DOT BELOW
+      (16#01EE5#, 16#01EE5#),  -- LATIN SMALL LETTER U WITH DOT BELOW .. LATIN SMALL LETTER U WITH DOT BELOW
+      (16#01EE7#, 16#01EE7#),  -- LATIN SMALL LETTER U WITH HOOK ABOVE .. LATIN SMALL LETTER U WITH HOOK ABOVE
+      (16#01EE9#, 16#01EE9#),  -- LATIN SMALL LETTER U WITH HORN AND ACUTE .. LATIN SMALL LETTER U WITH HORN AND ACUTE
+      (16#01EEB#, 16#01EEB#),  -- LATIN SMALL LETTER U WITH HORN AND GRAVE .. LATIN SMALL LETTER U WITH HORN AND GRAVE
+      (16#01EED#, 16#01EED#),  -- LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE .. LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
+      (16#01EEF#, 16#01EEF#),  -- LATIN SMALL LETTER U WITH HORN AND TILDE .. LATIN SMALL LETTER U WITH HORN AND TILDE
+      (16#01EF1#, 16#01EF1#),  -- LATIN SMALL LETTER U WITH HORN AND DOT BELOW .. LATIN SMALL LETTER U WITH HORN AND DOT BELOW
+      (16#01EF3#, 16#01EF3#),  -- LATIN SMALL LETTER Y WITH GRAVE .. LATIN SMALL LETTER Y WITH GRAVE
+      (16#01EF5#, 16#01EF5#),  -- LATIN SMALL LETTER Y WITH DOT BELOW .. LATIN SMALL LETTER Y WITH DOT BELOW
+      (16#01EF7#, 16#01EF7#),  -- LATIN SMALL LETTER Y WITH HOOK ABOVE .. LATIN SMALL LETTER Y WITH HOOK ABOVE
+      (16#01EF9#, 16#01EF9#),  -- LATIN SMALL LETTER Y WITH TILDE .. LATIN SMALL LETTER Y WITH TILDE
+      (16#01F00#, 16#01F07#),  -- GREEK SMALL LETTER ALPHA WITH PSILI .. GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
+      (16#01F10#, 16#01F15#),  -- GREEK SMALL LETTER EPSILON WITH PSILI .. GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+      (16#01F20#, 16#01F27#),  -- GREEK SMALL LETTER ETA WITH PSILI .. GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
+      (16#01F30#, 16#01F37#),  -- GREEK SMALL LETTER IOTA WITH PSILI .. GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
+      (16#01F40#, 16#01F45#),  -- GREEK SMALL LETTER OMICRON WITH PSILI .. GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+      (16#01F51#, 16#01F51#),  -- GREEK SMALL LETTER UPSILON WITH DASIA .. GREEK SMALL LETTER UPSILON WITH DASIA
+      (16#01F53#, 16#01F53#),  -- GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA .. GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
+      (16#01F55#, 16#01F55#),  -- GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA .. GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
+      (16#01F57#, 16#01F57#),  -- GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI .. GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+      (16#01F60#, 16#01F67#),  -- GREEK SMALL LETTER OMEGA WITH PSILI .. GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
+      (16#01F70#, 16#01F71#),  -- GREEK SMALL LETTER ALPHA WITH VARIA .. GREEK SMALL LETTER ALPHA WITH OXIA
+      (16#01F72#, 16#01F75#),  -- GREEK SMALL LETTER EPSILON WITH VARIA .. GREEK SMALL LETTER ETA WITH OXIA
+      (16#01F76#, 16#01F77#),  -- GREEK SMALL LETTER IOTA WITH VARIA .. GREEK SMALL LETTER IOTA WITH OXIA
+      (16#01F78#, 16#01F79#),  -- GREEK SMALL LETTER OMICRON WITH VARIA .. GREEK SMALL LETTER OMICRON WITH OXIA
+      (16#01F7A#, 16#01F7B#),  -- GREEK SMALL LETTER UPSILON WITH VARIA .. GREEK SMALL LETTER UPSILON WITH OXIA
+      (16#01F7C#, 16#01F7D#),  -- GREEK SMALL LETTER OMEGA WITH VARIA .. GREEK SMALL LETTER OMEGA WITH OXIA
+      (16#01F80#, 16#01F87#),  -- GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI .. GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+      (16#01F90#, 16#01F97#),  -- GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI .. GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+      (16#01FA0#, 16#01FA7#),  -- GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI .. GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+      (16#01FB0#, 16#01FB1#),  -- GREEK SMALL LETTER ALPHA WITH VRACHY .. GREEK SMALL LETTER ALPHA WITH MACRON
+      (16#01FB3#, 16#01FB3#),  -- GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI .. GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
+      (16#01FBE#, 16#01FBE#),  -- GREEK PROSGEGRAMMENI .. GREEK PROSGEGRAMMENI
+      (16#01FC3#, 16#01FC3#),  -- GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI .. GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
+      (16#01FD0#, 16#01FD1#),  -- GREEK SMALL LETTER IOTA WITH VRACHY .. GREEK SMALL LETTER IOTA WITH MACRON
+      (16#01FE0#, 16#01FE1#),  -- GREEK SMALL LETTER UPSILON WITH VRACHY .. GREEK SMALL LETTER UPSILON WITH MACRON
+      (16#01FE5#, 16#01FE5#),  -- GREEK SMALL LETTER RHO WITH DASIA .. GREEK SMALL LETTER RHO WITH DASIA
+      (16#01FF3#, 16#01FF3#),  -- GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI .. GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
+      (16#0FF41#, 16#0FF5A#),  -- FULLWIDTH LATIN SMALL LETTER A .. FULLWIDTH LATIN SMALL LETTER Z
+      (16#10428#, 16#1044D#)); -- DESERET SMALL LETTER LONG I .. DESERET SMALL LETTER ENG
+ 
+    Upper_Case_Adjust : constant array
+                          (Lower_Case_Letters'Range) of Char_Code'Base := (
+        -32,  -- LATIN SMALL LETTER A .. LATIN SMALL LETTER Z
+        743,  -- MICRO SIGN .. MICRO SIGN
+        -32,  -- LATIN SMALL LETTER A WITH GRAVE .. LATIN SMALL LETTER O WITH DIAERESIS
+        -32,  -- LATIN SMALL LETTER O WITH STROKE .. LATIN SMALL LETTER THORN
+        121,  -- LATIN SMALL LETTER Y WITH DIAERESIS .. LATIN SMALL LETTER Y WITH DIAERESIS
+         -1,  -- LATIN SMALL LETTER A WITH MACRON .. LATIN SMALL LETTER A WITH MACRON
+         -1,  -- LATIN SMALL LETTER A WITH BREVE .. LATIN SMALL LETTER A WITH BREVE
+         -1,  -- LATIN SMALL LETTER A WITH OGONEK .. LATIN SMALL LETTER A WITH OGONEK
+         -1,  -- LATIN SMALL LETTER C WITH ACUTE .. LATIN SMALL LETTER C WITH ACUTE
+         -1,  -- LATIN SMALL LETTER C WITH CIRCUMFLEX .. LATIN SMALL LETTER C WITH CIRCUMFLEX
+         -1,  -- LATIN SMALL LETTER C WITH DOT ABOVE .. LATIN SMALL LETTER C WITH DOT ABOVE
+         -1,  -- LATIN SMALL LETTER C WITH CARON .. LATIN SMALL LETTER C WITH CARON
+         -1,  -- LATIN SMALL LETTER D WITH CARON .. LATIN SMALL LETTER D WITH CARON
+         -1,  -- LATIN SMALL LETTER D WITH STROKE .. LATIN SMALL LETTER D WITH STROKE
+         -1,  -- LATIN SMALL LETTER E WITH MACRON .. LATIN SMALL LETTER E WITH MACRON
+         -1,  -- LATIN SMALL LETTER E WITH BREVE .. LATIN SMALL LETTER E WITH BREVE
+         -1,  -- LATIN SMALL LETTER E WITH DOT ABOVE .. LATIN SMALL LETTER E WITH DOT ABOVE
+         -1,  -- LATIN SMALL LETTER E WITH OGONEK .. LATIN SMALL LETTER E WITH OGONEK
+         -1,  -- LATIN SMALL LETTER E WITH CARON .. LATIN SMALL LETTER E WITH CARON
+         -1,  -- LATIN SMALL LETTER G WITH CIRCUMFLEX .. LATIN SMALL LETTER G WITH CIRCUMFLEX
+         -1,  -- LATIN SMALL LETTER G WITH BREVE .. LATIN SMALL LETTER G WITH BREVE
+         -1,  -- LATIN SMALL LETTER G WITH DOT ABOVE .. LATIN SMALL LETTER G WITH DOT ABOVE
+         -1,  -- LATIN SMALL LETTER G WITH CEDILLA .. LATIN SMALL LETTER G WITH CEDILLA
+         -1,  -- LATIN SMALL LETTER H WITH CIRCUMFLEX .. LATIN SMALL LETTER H WITH CIRCUMFLEX
+         -1,  -- LATIN SMALL LETTER H WITH STROKE .. LATIN SMALL LETTER H WITH STROKE
+         -1,  -- LATIN SMALL LETTER I WITH TILDE .. LATIN SMALL LETTER I WITH TILDE
+         -1,  -- LATIN SMALL LETTER I WITH MACRON .. LATIN SMALL LETTER I WITH MACRON
+         -1,  -- LATIN SMALL LETTER I WITH BREVE .. LATIN SMALL LETTER I WITH BREVE
+         -1,  -- LATIN SMALL LETTER I WITH OGONEK .. LATIN SMALL LETTER I WITH OGONEK
+       -232,  -- LATIN SMALL LETTER DOTLESS I .. LATIN SMALL LETTER DOTLESS I
+         -1,  -- LATIN SMALL LIGATURE IJ .. LATIN SMALL LIGATURE IJ
+         -1,  -- LATIN SMALL LETTER J WITH CIRCUMFLEX .. LATIN SMALL LETTER J WITH CIRCUMFLEX
+         -1,  -- LATIN SMALL LETTER K WITH CEDILLA .. LATIN SMALL LETTER K WITH CEDILLA
+         -1,  -- LATIN SMALL LETTER L WITH ACUTE .. LATIN SMALL LETTER L WITH ACUTE
+         -1,  -- LATIN SMALL LETTER L WITH CEDILLA .. LATIN SMALL LETTER L WITH CEDILLA
+         -1,  -- LATIN SMALL LETTER L WITH CARON .. LATIN SMALL LETTER L WITH CARON
+         -1,  -- LATIN SMALL LETTER L WITH MIDDLE DOT .. LATIN SMALL LETTER L WITH MIDDLE DOT
+         -1,  -- LATIN SMALL LETTER L WITH STROKE .. LATIN SMALL LETTER L WITH STROKE
+         -1,  -- LATIN SMALL LETTER N WITH ACUTE .. LATIN SMALL LETTER N WITH ACUTE
+         -1,  -- LATIN SMALL LETTER N WITH CEDILLA .. LATIN SMALL LETTER N WITH CEDILLA
+         -1,  -- LATIN SMALL LETTER N WITH CARON .. LATIN SMALL LETTER N WITH CARON
+         -1,  -- LATIN SMALL LETTER ENG .. LATIN SMALL LETTER ENG
+         -1,  -- LATIN SMALL LETTER O WITH MACRON .. LATIN SMALL LETTER O WITH MACRON
+         -1,  -- LATIN SMALL LETTER O WITH BREVE .. LATIN SMALL LETTER O WITH BREVE
+         -1,  -- LATIN SMALL LETTER O WITH DOUBLE ACUTE .. LATIN SMALL LETTER O WITH DOUBLE ACUTE
+         -1,  -- LATIN SMALL LIGATURE OE .. LATIN SMALL LIGATURE OE
+         -1,  -- LATIN SMALL LETTER R WITH ACUTE .. LATIN SMALL LETTER R WITH ACUTE
+         -1,  -- LATIN SMALL LETTER R WITH CEDILLA .. LATIN SMALL LETTER R WITH CEDILLA
+         -1,  -- LATIN SMALL LETTER R WITH CARON .. LATIN SMALL LETTER R WITH CARON
+         -1,  -- LATIN SMALL LETTER S WITH ACUTE .. LATIN SMALL LETTER S WITH ACUTE
+         -1,  -- LATIN SMALL LETTER S WITH CIRCUMFLEX .. LATIN SMALL LETTER S WITH CIRCUMFLEX
+         -1,  -- LATIN SMALL LETTER S WITH CEDILLA .. LATIN SMALL LETTER S WITH CEDILLA
+         -1,  -- LATIN SMALL LETTER S WITH CARON .. LATIN SMALL LETTER S WITH CARON
+         -1,  -- LATIN SMALL LETTER T WITH CEDILLA .. LATIN SMALL LETTER T WITH CEDILLA
+         -1,  -- LATIN SMALL LETTER T WITH CARON .. LATIN SMALL LETTER T WITH CARON
+         -1,  -- LATIN SMALL LETTER T WITH STROKE .. LATIN SMALL LETTER T WITH STROKE
+         -1,  -- LATIN SMALL LETTER U WITH TILDE .. LATIN SMALL LETTER U WITH TILDE
+         -1,  -- LATIN SMALL LETTER U WITH MACRON .. LATIN SMALL LETTER U WITH MACRON
+         -1,  -- LATIN SMALL LETTER U WITH BREVE .. LATIN SMALL LETTER U WITH BREVE
+         -1,  -- LATIN SMALL LETTER U WITH RING ABOVE .. LATIN SMALL LETTER U WITH RING ABOVE
+         -1,  -- LATIN SMALL LETTER U WITH DOUBLE ACUTE .. LATIN SMALL LETTER U WITH DOUBLE ACUTE
+         -1,  -- LATIN SMALL LETTER U WITH OGONEK .. LATIN SMALL LETTER U WITH OGONEK
+         -1,  -- LATIN SMALL LETTER W WITH CIRCUMFLEX .. LATIN SMALL LETTER W WITH CIRCUMFLEX
+         -1,  -- LATIN SMALL LETTER Y WITH CIRCUMFLEX .. LATIN SMALL LETTER Y WITH CIRCUMFLEX
+         -1,  -- LATIN SMALL LETTER Z WITH ACUTE .. LATIN SMALL LETTER Z WITH ACUTE
+         -1,  -- LATIN SMALL LETTER Z WITH DOT ABOVE .. LATIN SMALL LETTER Z WITH DOT ABOVE
+         -1,  -- LATIN SMALL LETTER Z WITH CARON .. LATIN SMALL LETTER Z WITH CARON
+       -300,  -- LATIN SMALL LETTER LONG S .. LATIN SMALL LETTER LONG S
+         -1,  -- LATIN SMALL LETTER B WITH TOPBAR .. LATIN SMALL LETTER B WITH TOPBAR
+         -1,  -- LATIN SMALL LETTER TONE SIX .. LATIN SMALL LETTER TONE SIX
+         -1,  -- LATIN SMALL LETTER C WITH HOOK .. LATIN SMALL LETTER C WITH HOOK
+         -1,  -- LATIN SMALL LETTER D WITH TOPBAR .. LATIN SMALL LETTER D WITH TOPBAR
+         -1,  -- LATIN SMALL LETTER F WITH HOOK .. LATIN SMALL LETTER F WITH HOOK
+         97,  -- LATIN SMALL LETTER HV .. LATIN SMALL LETTER HV
+         -1,  -- LATIN SMALL LETTER K WITH HOOK .. LATIN SMALL LETTER K WITH HOOK
+        130,  -- LATIN SMALL LETTER N WITH LONG RIGHT LEG .. LATIN SMALL LETTER N WITH LONG RIGHT LEG
+         -1,  -- LATIN SMALL LETTER O WITH HORN .. LATIN SMALL LETTER O WITH HORN
+         -1,  -- LATIN SMALL LETTER OI .. LATIN SMALL LETTER OI
+         -1,  -- LATIN SMALL LETTER P WITH HOOK .. LATIN SMALL LETTER P WITH HOOK
+         -1,  -- LATIN SMALL LETTER TONE TWO .. LATIN SMALL LETTER TONE TWO
+         -1,  -- LATIN SMALL LETTER T WITH HOOK .. LATIN SMALL LETTER T WITH HOOK
+         -1,  -- LATIN SMALL LETTER U WITH HORN .. LATIN SMALL LETTER U WITH HORN
+         -1,  -- LATIN SMALL LETTER Y WITH HOOK .. LATIN SMALL LETTER Y WITH HOOK
+         -1,  -- LATIN SMALL LETTER Z WITH STROKE .. LATIN SMALL LETTER Z WITH STROKE
+         -1,  -- LATIN SMALL LETTER EZH REVERSED .. LATIN SMALL LETTER EZH REVERSED
+         -1,  -- LATIN SMALL LETTER TONE FIVE .. LATIN SMALL LETTER TONE FIVE
+         56,  -- LATIN LETTER WYNN .. LATIN LETTER WYNN
+         -1,  -- LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON .. LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
+         -2,  -- LATIN SMALL LETTER DZ WITH CARON .. LATIN SMALL LETTER DZ WITH CARON
+         -1,  -- LATIN CAPITAL LETTER L WITH SMALL LETTER J .. LATIN CAPITAL LETTER L WITH SMALL LETTER J
+         -2,  -- LATIN SMALL LETTER LJ .. LATIN SMALL LETTER LJ
+         -1,  -- LATIN CAPITAL LETTER N WITH SMALL LETTER J .. LATIN CAPITAL LETTER N WITH SMALL LETTER J
+         -2,  -- LATIN SMALL LETTER NJ .. LATIN SMALL LETTER NJ
+         -1,  -- LATIN SMALL LETTER A WITH CARON .. LATIN SMALL LETTER A WITH CARON
+         -1,  -- LATIN SMALL LETTER I WITH CARON .. LATIN SMALL LETTER I WITH CARON
+         -1,  -- LATIN SMALL LETTER O WITH CARON .. LATIN SMALL LETTER O WITH CARON
+         -1,  -- LATIN SMALL LETTER U WITH CARON .. LATIN SMALL LETTER U WITH CARON
+         -1,  -- LATIN SMALL LETTER U WITH DIAERESIS AND MACRON .. LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+         -1,  -- LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE .. LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+         -1,  -- LATIN SMALL LETTER U WITH DIAERESIS AND CARON .. LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+         -1,  -- LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE .. LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+        -79,  -- LATIN SMALL LETTER TURNED E .. LATIN SMALL LETTER TURNED E
+         -1,  -- LATIN SMALL LETTER A WITH DIAERESIS AND MACRON .. LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+         -1,  -- LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON .. LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+         -1,  -- LATIN SMALL LETTER AE WITH MACRON .. LATIN SMALL LETTER AE WITH MACRON
+         -1,  -- LATIN SMALL LETTER G WITH STROKE .. LATIN SMALL LETTER G WITH STROKE
+         -1,  -- LATIN SMALL LETTER G WITH CARON .. LATIN SMALL LETTER G WITH CARON
+         -1,  -- LATIN SMALL LETTER K WITH CARON .. LATIN SMALL LETTER K WITH CARON
+         -1,  -- LATIN SMALL LETTER O WITH OGONEK .. LATIN SMALL LETTER O WITH OGONEK
+         -1,  -- LATIN SMALL LETTER O WITH OGONEK AND MACRON .. LATIN SMALL LETTER O WITH OGONEK AND MACRON
+         -1,  -- LATIN SMALL LETTER EZH WITH CARON .. LATIN SMALL LETTER EZH WITH CARON
+         -1,  -- LATIN CAPITAL LETTER D WITH SMALL LETTER Z .. LATIN CAPITAL LETTER D WITH SMALL LETTER Z
+         -2,  -- LATIN SMALL LETTER DZ .. LATIN SMALL LETTER DZ
+         -1,  -- LATIN SMALL LETTER G WITH ACUTE .. LATIN SMALL LETTER G WITH ACUTE
+         -1,  -- LATIN SMALL LETTER N WITH GRAVE .. LATIN SMALL LETTER N WITH GRAVE
+         -1,  -- LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE .. LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+         -1,  -- LATIN SMALL LETTER AE WITH ACUTE .. LATIN SMALL LETTER AE WITH ACUTE
+         -1,  -- LATIN SMALL LETTER O WITH STROKE AND ACUTE .. LATIN SMALL LETTER O WITH STROKE AND ACUTE
+         -1,  -- LATIN SMALL LETTER A WITH DOUBLE GRAVE .. LATIN SMALL LETTER A WITH DOUBLE GRAVE
+         -1,  -- LATIN SMALL LETTER A WITH INVERTED BREVE .. LATIN SMALL LETTER A WITH INVERTED BREVE
+         -1,  -- LATIN SMALL LETTER E WITH DOUBLE GRAVE .. LATIN SMALL LETTER E WITH DOUBLE GRAVE
+         -1,  -- LATIN SMALL LETTER E WITH INVERTED BREVE .. LATIN SMALL LETTER E WITH INVERTED BREVE
+         -1,  -- LATIN SMALL LETTER I WITH DOUBLE GRAVE .. LATIN SMALL LETTER I WITH DOUBLE GRAVE
+         -1,  -- LATIN SMALL LETTER I WITH INVERTED BREVE .. LATIN SMALL LETTER I WITH INVERTED BREVE
+         -1,  -- LATIN SMALL LETTER O WITH DOUBLE GRAVE .. LATIN SMALL LETTER O WITH DOUBLE GRAVE
+         -1,  -- LATIN SMALL LETTER O WITH INVERTED BREVE .. LATIN SMALL LETTER O WITH INVERTED BREVE
+         -1,  -- LATIN SMALL LETTER R WITH DOUBLE GRAVE .. LATIN SMALL LETTER R WITH DOUBLE GRAVE
+         -1,  -- LATIN SMALL LETTER R WITH INVERTED BREVE .. LATIN SMALL LETTER R WITH INVERTED BREVE
+         -1,  -- LATIN SMALL LETTER U WITH DOUBLE GRAVE .. LATIN SMALL LETTER U WITH DOUBLE GRAVE
+         -1,  -- LATIN SMALL LETTER U WITH INVERTED BREVE .. LATIN SMALL LETTER U WITH INVERTED BREVE
+         -1,  -- LATIN SMALL LETTER S WITH COMMA BELOW .. LATIN SMALL LETTER S WITH COMMA BELOW
+         -1,  -- LATIN SMALL LETTER T WITH COMMA BELOW .. LATIN SMALL LETTER T WITH COMMA BELOW
+         -1,  -- LATIN SMALL LETTER YOGH .. LATIN SMALL LETTER YOGH
+         -1,  -- LATIN SMALL LETTER H WITH CARON .. LATIN SMALL LETTER H WITH CARON
+         -1,  -- LATIN SMALL LETTER OU .. LATIN SMALL LETTER OU
+         -1,  -- LATIN SMALL LETTER Z WITH HOOK .. LATIN SMALL LETTER Z WITH HOOK
+         -1,  -- LATIN SMALL LETTER A WITH DOT ABOVE .. LATIN SMALL LETTER A WITH DOT ABOVE
+         -1,  -- LATIN SMALL LETTER E WITH CEDILLA .. LATIN SMALL LETTER E WITH CEDILLA
+         -1,  -- LATIN SMALL LETTER O WITH DIAERESIS AND MACRON .. LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
+         -1,  -- LATIN SMALL LETTER O WITH TILDE AND MACRON .. LATIN SMALL LETTER O WITH TILDE AND MACRON
+         -1,  -- LATIN SMALL LETTER O WITH DOT ABOVE .. LATIN SMALL LETTER O WITH DOT ABOVE
+         -1,  -- LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON .. LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
+         -1,  -- LATIN SMALL LETTER Y WITH MACRON .. LATIN SMALL LETTER Y WITH MACRON
+       -210,  -- LATIN SMALL LETTER B WITH HOOK .. LATIN SMALL LETTER B WITH HOOK
+       -206,  -- LATIN SMALL LETTER OPEN O .. LATIN SMALL LETTER OPEN O
+       -205,  -- LATIN SMALL LETTER D WITH TAIL .. LATIN SMALL LETTER D WITH HOOK
+       -202,  -- LATIN SMALL LETTER SCHWA .. LATIN SMALL LETTER SCHWA
+       -203,  -- LATIN SMALL LETTER OPEN E .. LATIN SMALL LETTER OPEN E
+       -205,  -- LATIN SMALL LETTER G WITH HOOK .. LATIN SMALL LETTER G WITH HOOK
+       -207,  -- LATIN SMALL LETTER GAMMA .. LATIN SMALL LETTER GAMMA
+       -209,  -- LATIN SMALL LETTER I WITH STROKE .. LATIN SMALL LETTER I WITH STROKE
+       -211,  -- LATIN SMALL LETTER IOTA .. LATIN SMALL LETTER IOTA
+       -211,  -- LATIN SMALL LETTER TURNED M .. LATIN SMALL LETTER TURNED M
+       -213,  -- LATIN SMALL LETTER N WITH LEFT HOOK .. LATIN SMALL LETTER N WITH LEFT HOOK
+       -214,  -- LATIN SMALL LETTER BARRED O .. LATIN SMALL LETTER BARRED O
+       -218,  -- LATIN LETTER SMALL CAPITAL R .. LATIN LETTER SMALL CAPITAL R
+       -218,  -- LATIN SMALL LETTER ESH .. LATIN SMALL LETTER ESH
+       -218,  -- LATIN SMALL LETTER T WITH RETROFLEX HOOK .. LATIN SMALL LETTER T WITH RETROFLEX HOOK
+       -217,  -- LATIN SMALL LETTER UPSILON .. LATIN SMALL LETTER V WITH HOOK
+       -219,  -- LATIN SMALL LETTER EZH .. LATIN SMALL LETTER EZH
+        -38,  -- GREEK SMALL LETTER ALPHA WITH TONOS .. GREEK SMALL LETTER ALPHA WITH TONOS
+        -37,  -- GREEK SMALL LETTER EPSILON WITH TONOS .. GREEK SMALL LETTER IOTA WITH TONOS
+        -32,  -- GREEK SMALL LETTER ALPHA .. GREEK SMALL LETTER RHO
+        -31,  -- GREEK SMALL LETTER FINAL SIGMA .. GREEK SMALL LETTER FINAL SIGMA
+        -32,  -- GREEK SMALL LETTER SIGMA .. GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+        -64,  -- GREEK SMALL LETTER OMICRON WITH TONOS .. GREEK SMALL LETTER OMICRON WITH TONOS
+        -63,  -- GREEK SMALL LETTER UPSILON WITH TONOS .. GREEK SMALL LETTER OMEGA WITH TONOS
+        -62,  -- GREEK BETA SYMBOL .. GREEK BETA SYMBOL
+        -57,  -- GREEK THETA SYMBOL .. GREEK THETA SYMBOL
+        -47,  -- GREEK PHI SYMBOL .. GREEK PHI SYMBOL
+        -54,  -- GREEK PI SYMBOL .. GREEK PI SYMBOL
+         -1,  -- GREEK SMALL LETTER ARCHAIC KOPPA .. GREEK SMALL LETTER ARCHAIC KOPPA
+         -1,  -- GREEK SMALL LETTER STIGMA .. GREEK SMALL LETTER STIGMA
+         -1,  -- GREEK SMALL LETTER DIGAMMA .. GREEK SMALL LETTER DIGAMMA
+         -1,  -- GREEK SMALL LETTER KOPPA .. GREEK SMALL LETTER KOPPA
+         -1,  -- GREEK SMALL LETTER SAMPI .. GREEK SMALL LETTER SAMPI
+         -1,  -- COPTIC SMALL LETTER SHEI .. COPTIC SMALL LETTER SHEI
+         -1,  -- COPTIC SMALL LETTER FEI .. COPTIC SMALL LETTER FEI
+         -1,  -- COPTIC SMALL LETTER KHEI .. COPTIC SMALL LETTER KHEI
+         -1,  -- COPTIC SMALL LETTER HORI .. COPTIC SMALL LETTER HORI
+         -1,  -- COPTIC SMALL LETTER GANGIA .. COPTIC SMALL LETTER GANGIA
+         -1,  -- COPTIC SMALL LETTER SHIMA .. COPTIC SMALL LETTER SHIMA
+         -1,  -- COPTIC SMALL LETTER DEI .. COPTIC SMALL LETTER DEI
+        -86,  -- GREEK KAPPA SYMBOL .. GREEK KAPPA SYMBOL
+        -80,  -- GREEK RHO SYMBOL .. GREEK RHO SYMBOL
+        -79,  -- GREEK LUNATE SIGMA SYMBOL .. GREEK LUNATE SIGMA SYMBOL
+        -96,  -- GREEK LUNATE EPSILON SYMBOL .. GREEK LUNATE EPSILON SYMBOL
+        -32,  -- CYRILLIC SMALL LETTER A .. CYRILLIC SMALL LETTER YA
+        -80,  -- CYRILLIC SMALL LETTER IE WITH GRAVE .. CYRILLIC SMALL LETTER DZHE
+         -1,  -- CYRILLIC SMALL LETTER OMEGA .. CYRILLIC SMALL LETTER OMEGA
+         -1,  -- CYRILLIC SMALL LETTER YAT .. CYRILLIC SMALL LETTER YAT
+         -1,  -- CYRILLIC SMALL LETTER IOTIFIED E .. CYRILLIC SMALL LETTER IOTIFIED E
+         -1,  -- CYRILLIC SMALL LETTER LITTLE YUS .. CYRILLIC SMALL LETTER LITTLE YUS
+         -1,  -- CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS .. CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS
+         -1,  -- CYRILLIC SMALL LETTER BIG YUS .. CYRILLIC SMALL LETTER BIG YUS
+         -1,  -- CYRILLIC SMALL LETTER IOTIFIED BIG YUS .. CYRILLIC SMALL LETTER IOTIFIED BIG YUS
+         -1,  -- CYRILLIC SMALL LETTER KSI .. CYRILLIC SMALL LETTER KSI
+         -1,  -- CYRILLIC SMALL LETTER PSI .. CYRILLIC SMALL LETTER PSI
+         -1,  -- CYRILLIC SMALL LETTER FITA .. CYRILLIC SMALL LETTER FITA
+         -1,  -- CYRILLIC SMALL LETTER IZHITSA .. CYRILLIC SMALL LETTER IZHITSA
+         -1,  -- CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT .. CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+         -1,  -- CYRILLIC SMALL LETTER UK .. CYRILLIC SMALL LETTER UK
+         -1,  -- CYRILLIC SMALL LETTER ROUND OMEGA .. CYRILLIC SMALL LETTER ROUND OMEGA
+         -1,  -- CYRILLIC SMALL LETTER OMEGA WITH TITLO .. CYRILLIC SMALL LETTER OMEGA WITH TITLO
+         -1,  -- CYRILLIC SMALL LETTER OT .. CYRILLIC SMALL LETTER OT
+         -1,  -- CYRILLIC SMALL LETTER KOPPA .. CYRILLIC SMALL LETTER KOPPA
+         -1,  -- CYRILLIC SMALL LETTER SHORT I WITH TAIL .. CYRILLIC SMALL LETTER SHORT I WITH TAIL
+         -1,  -- CYRILLIC SMALL LETTER SEMISOFT SIGN .. CYRILLIC SMALL LETTER SEMISOFT SIGN
+         -1,  -- CYRILLIC SMALL LETTER ER WITH TICK .. CYRILLIC SMALL LETTER ER WITH TICK
+         -1,  -- CYRILLIC SMALL LETTER GHE WITH UPTURN .. CYRILLIC SMALL LETTER GHE WITH UPTURN
+         -1,  -- CYRILLIC SMALL LETTER GHE WITH STROKE .. CYRILLIC SMALL LETTER GHE WITH STROKE
+         -1,  -- CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK .. CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK
+         -1,  -- CYRILLIC SMALL LETTER ZHE WITH DESCENDER .. CYRILLIC SMALL LETTER ZHE WITH DESCENDER
+         -1,  -- CYRILLIC SMALL LETTER ZE WITH DESCENDER .. CYRILLIC SMALL LETTER ZE WITH DESCENDER
+         -1,  -- CYRILLIC SMALL LETTER KA WITH DESCENDER .. CYRILLIC SMALL LETTER KA WITH DESCENDER
+         -1,  -- CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE .. CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE
+         -1,  -- CYRILLIC SMALL LETTER KA WITH STROKE .. CYRILLIC SMALL LETTER KA WITH STROKE
+         -1,  -- CYRILLIC SMALL LETTER BASHKIR KA .. CYRILLIC SMALL LETTER BASHKIR KA
+         -1,  -- CYRILLIC SMALL LETTER EN WITH DESCENDER .. CYRILLIC SMALL LETTER EN WITH DESCENDER
+         -1,  -- CYRILLIC SMALL LIGATURE EN GHE .. CYRILLIC SMALL LIGATURE EN GHE
+         -1,  -- CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK .. CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK
+         -1,  -- CYRILLIC SMALL LETTER ABKHASIAN HA .. CYRILLIC SMALL LETTER ABKHASIAN HA
+         -1,  -- CYRILLIC SMALL LETTER ES WITH DESCENDER .. CYRILLIC SMALL LETTER ES WITH DESCENDER
+         -1,  -- CYRILLIC SMALL LETTER TE WITH DESCENDER .. CYRILLIC SMALL LETTER TE WITH DESCENDER
+         -1,  -- CYRILLIC SMALL LETTER STRAIGHT U .. CYRILLIC SMALL LETTER STRAIGHT U
+         -1,  -- CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE .. CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
+         -1,  -- CYRILLIC SMALL LETTER HA WITH DESCENDER .. CYRILLIC SMALL LETTER HA WITH DESCENDER
+         -1,  -- CYRILLIC SMALL LIGATURE TE TSE .. CYRILLIC SMALL LIGATURE TE TSE
+         -1,  -- CYRILLIC SMALL LETTER CHE WITH DESCENDER .. CYRILLIC SMALL LETTER CHE WITH DESCENDER
+         -1,  -- CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE .. CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE
+         -1,  -- CYRILLIC SMALL LETTER SHHA .. CYRILLIC SMALL LETTER SHHA
+         -1,  -- CYRILLIC SMALL LETTER ABKHASIAN CHE .. CYRILLIC SMALL LETTER ABKHASIAN CHE
+         -1,  -- CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER .. CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER
+         -1,  -- CYRILLIC SMALL LETTER ZHE WITH BREVE .. CYRILLIC SMALL LETTER ZHE WITH BREVE
+         -1,  -- CYRILLIC SMALL LETTER KA WITH HOOK .. CYRILLIC SMALL LETTER KA WITH HOOK
+         -1,  -- CYRILLIC SMALL LETTER EL WITH TAIL .. CYRILLIC SMALL LETTER EL WITH TAIL
+         -1,  -- CYRILLIC SMALL LETTER EN WITH HOOK .. CYRILLIC SMALL LETTER EN WITH HOOK
+         -1,  -- CYRILLIC SMALL LETTER EN WITH TAIL .. CYRILLIC SMALL LETTER EN WITH TAIL
+         -1,  -- CYRILLIC SMALL LETTER KHAKASSIAN CHE .. CYRILLIC SMALL LETTER KHAKASSIAN CHE
+         -1,  -- CYRILLIC SMALL LETTER EM WITH TAIL .. CYRILLIC SMALL LETTER EM WITH TAIL
+         -1,  -- CYRILLIC SMALL LETTER A WITH BREVE .. CYRILLIC SMALL LETTER A WITH BREVE
+         -1,  -- CYRILLIC SMALL LETTER A WITH DIAERESIS .. CYRILLIC SMALL LETTER A WITH DIAERESIS
+         -1,  -- CYRILLIC SMALL LIGATURE A IE .. CYRILLIC SMALL LIGATURE A IE
+         -1,  -- CYRILLIC SMALL LETTER IE WITH BREVE .. CYRILLIC SMALL LETTER IE WITH BREVE
+         -1,  -- CYRILLIC SMALL LETTER SCHWA .. CYRILLIC SMALL LETTER SCHWA
+         -1,  -- CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS .. CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
+         -1,  -- CYRILLIC SMALL LETTER ZHE WITH DIAERESIS .. CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
+         -1,  -- CYRILLIC SMALL LETTER ZE WITH DIAERESIS .. CYRILLIC SMALL LETTER ZE WITH DIAERESIS
+         -1,  -- CYRILLIC SMALL LETTER ABKHASIAN DZE .. CYRILLIC SMALL LETTER ABKHASIAN DZE
+         -1,  -- CYRILLIC SMALL LETTER I WITH MACRON .. CYRILLIC SMALL LETTER I WITH MACRON
+         -1,  -- CYRILLIC SMALL LETTER I WITH DIAERESIS .. CYRILLIC SMALL LETTER I WITH DIAERESIS
+         -1,  -- CYRILLIC SMALL LETTER O WITH DIAERESIS .. CYRILLIC SMALL LETTER O WITH DIAERESIS
+         -1,  -- CYRILLIC SMALL LETTER BARRED O .. CYRILLIC SMALL LETTER BARRED O
+         -1,  -- CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS .. CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
+         -1,  -- CYRILLIC SMALL LETTER E WITH DIAERESIS .. CYRILLIC SMALL LETTER E WITH DIAERESIS
+         -1,  -- CYRILLIC SMALL LETTER U WITH MACRON .. CYRILLIC SMALL LETTER U WITH MACRON
+         -1,  -- CYRILLIC SMALL LETTER U WITH DIAERESIS .. CYRILLIC SMALL LETTER U WITH DIAERESIS
+         -1,  -- CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE .. CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
+         -1,  -- CYRILLIC SMALL LETTER CHE WITH DIAERESIS .. CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+         -1,  -- CYRILLIC SMALL LETTER YERU WITH DIAERESIS .. CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+         -1,  -- CYRILLIC SMALL LETTER KOMI DE .. CYRILLIC SMALL LETTER KOMI DE
+         -1,  -- CYRILLIC SMALL LETTER KOMI DJE .. CYRILLIC SMALL LETTER KOMI DJE
+         -1,  -- CYRILLIC SMALL LETTER KOMI ZJE .. CYRILLIC SMALL LETTER KOMI ZJE
+         -1,  -- CYRILLIC SMALL LETTER KOMI DZJE .. CYRILLIC SMALL LETTER KOMI DZJE
+         -1,  -- CYRILLIC SMALL LETTER KOMI LJE .. CYRILLIC SMALL LETTER KOMI LJE
+         -1,  -- CYRILLIC SMALL LETTER KOMI NJE .. CYRILLIC SMALL LETTER KOMI NJE
+         -1,  -- CYRILLIC SMALL LETTER KOMI SJE .. CYRILLIC SMALL LETTER KOMI SJE
+         -1,  -- CYRILLIC SMALL LETTER KOMI TJE .. CYRILLIC SMALL LETTER KOMI TJE
+        -48,  -- ARMENIAN SMALL LETTER AYB .. ARMENIAN SMALL LETTER FEH
+         -1,  -- LATIN SMALL LETTER A WITH RING BELOW .. LATIN SMALL LETTER A WITH RING BELOW
+         -1,  -- LATIN SMALL LETTER B WITH DOT ABOVE .. LATIN SMALL LETTER B WITH DOT ABOVE
+         -1,  -- LATIN SMALL LETTER B WITH DOT BELOW .. LATIN SMALL LETTER B WITH DOT BELOW
+         -1,  -- LATIN SMALL LETTER B WITH LINE BELOW .. LATIN SMALL LETTER B WITH LINE BELOW
+         -1,  -- LATIN SMALL LETTER C WITH CEDILLA AND ACUTE .. LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+         -1,  -- LATIN SMALL LETTER D WITH DOT ABOVE .. LATIN SMALL LETTER D WITH DOT ABOVE
+         -1,  -- LATIN SMALL LETTER D WITH DOT BELOW .. LATIN SMALL LETTER D WITH DOT BELOW
+         -1,  -- LATIN SMALL LETTER D WITH LINE BELOW .. LATIN SMALL LETTER D WITH LINE BELOW
+         -1,  -- LATIN SMALL LETTER D WITH CEDILLA .. LATIN SMALL LETTER D WITH CEDILLA
+         -1,  -- LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW
+         -1,  -- LATIN SMALL LETTER E WITH MACRON AND GRAVE .. LATIN SMALL LETTER E WITH MACRON AND GRAVE
+         -1,  -- LATIN SMALL LETTER E WITH MACRON AND ACUTE .. LATIN SMALL LETTER E WITH MACRON AND ACUTE
+         -1,  -- LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW
+         -1,  -- LATIN SMALL LETTER E WITH TILDE BELOW .. LATIN SMALL LETTER E WITH TILDE BELOW
+         -1,  -- LATIN SMALL LETTER E WITH CEDILLA AND BREVE .. LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+         -1,  -- LATIN SMALL LETTER F WITH DOT ABOVE .. LATIN SMALL LETTER F WITH DOT ABOVE
+         -1,  -- LATIN SMALL LETTER G WITH MACRON .. LATIN SMALL LETTER G WITH MACRON
+         -1,  -- LATIN SMALL LETTER H WITH DOT ABOVE .. LATIN SMALL LETTER H WITH DOT ABOVE
+         -1,  -- LATIN SMALL LETTER H WITH DOT BELOW .. LATIN SMALL LETTER H WITH DOT BELOW
+         -1,  -- LATIN SMALL LETTER H WITH DIAERESIS .. LATIN SMALL LETTER H WITH DIAERESIS
+         -1,  -- LATIN SMALL LETTER H WITH CEDILLA .. LATIN SMALL LETTER H WITH CEDILLA
+         -1,  -- LATIN SMALL LETTER H WITH BREVE BELOW .. LATIN SMALL LETTER H WITH BREVE BELOW
+         -1,  -- LATIN SMALL LETTER I WITH TILDE BELOW .. LATIN SMALL LETTER I WITH TILDE BELOW
+         -1,  -- LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE .. LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
+         -1,  -- LATIN SMALL LETTER K WITH ACUTE .. LATIN SMALL LETTER K WITH ACUTE
+         -1,  -- LATIN SMALL LETTER K WITH DOT BELOW .. LATIN SMALL LETTER K WITH DOT BELOW
+         -1,  -- LATIN SMALL LETTER K WITH LINE BELOW .. LATIN SMALL LETTER K WITH LINE BELOW
+         -1,  -- LATIN SMALL LETTER L WITH DOT BELOW .. LATIN SMALL LETTER L WITH DOT BELOW
+         -1,  -- LATIN SMALL LETTER L WITH DOT BELOW AND MACRON .. LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
+         -1,  -- LATIN SMALL LETTER L WITH LINE BELOW .. LATIN SMALL LETTER L WITH LINE BELOW
+         -1,  -- LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW
+         -1,  -- LATIN SMALL LETTER M WITH ACUTE .. LATIN SMALL LETTER M WITH ACUTE
+         -1,  -- LATIN SMALL LETTER M WITH DOT ABOVE .. LATIN SMALL LETTER M WITH DOT ABOVE
+         -1,  -- LATIN SMALL LETTER M WITH DOT BELOW .. LATIN SMALL LETTER M WITH DOT BELOW
+         -1,  -- LATIN SMALL LETTER N WITH DOT ABOVE .. LATIN SMALL LETTER N WITH DOT ABOVE
+         -1,  -- LATIN SMALL LETTER N WITH DOT BELOW .. LATIN SMALL LETTER N WITH DOT BELOW
+         -1,  -- LATIN SMALL LETTER N WITH LINE BELOW .. LATIN SMALL LETTER N WITH LINE BELOW
+         -1,  -- LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW
+         -1,  -- LATIN SMALL LETTER O WITH TILDE AND ACUTE .. LATIN SMALL LETTER O WITH TILDE AND ACUTE
+         -1,  -- LATIN SMALL LETTER O WITH TILDE AND DIAERESIS .. LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
+         -1,  -- LATIN SMALL LETTER O WITH MACRON AND GRAVE .. LATIN SMALL LETTER O WITH MACRON AND GRAVE
+         -1,  -- LATIN SMALL LETTER O WITH MACRON AND ACUTE .. LATIN SMALL LETTER O WITH MACRON AND ACUTE
+         -1,  -- LATIN SMALL LETTER P WITH ACUTE .. LATIN SMALL LETTER P WITH ACUTE
+         -1,  -- LATIN SMALL LETTER P WITH DOT ABOVE .. LATIN SMALL LETTER P WITH DOT ABOVE
+         -1,  -- LATIN SMALL LETTER R WITH DOT ABOVE .. LATIN SMALL LETTER R WITH DOT ABOVE
+         -1,  -- LATIN SMALL LETTER R WITH DOT BELOW .. LATIN SMALL LETTER R WITH DOT BELOW
+         -1,  -- LATIN SMALL LETTER R WITH DOT BELOW AND MACRON .. LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
+         -1,  -- LATIN SMALL LETTER R WITH LINE BELOW .. LATIN SMALL LETTER R WITH LINE BELOW
+         -1,  -- LATIN SMALL LETTER S WITH DOT ABOVE .. LATIN SMALL LETTER S WITH DOT ABOVE
+         -1,  -- LATIN SMALL LETTER S WITH DOT BELOW .. LATIN SMALL LETTER S WITH DOT BELOW
+         -1,  -- LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE .. LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
+         -1,  -- LATIN SMALL LETTER S WITH CARON AND DOT ABOVE .. LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
+         -1,  -- LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE .. LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
+         -1,  -- LATIN SMALL LETTER T WITH DOT ABOVE .. LATIN SMALL LETTER T WITH DOT ABOVE
+         -1,  -- LATIN SMALL LETTER T WITH DOT BELOW .. LATIN SMALL LETTER T WITH DOT BELOW
+         -1,  -- LATIN SMALL LETTER T WITH LINE BELOW .. LATIN SMALL LETTER T WITH LINE BELOW
+         -1,  -- LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW
+         -1,  -- LATIN SMALL LETTER U WITH DIAERESIS BELOW .. LATIN SMALL LETTER U WITH DIAERESIS BELOW
+         -1,  -- LATIN SMALL LETTER U WITH TILDE BELOW .. LATIN SMALL LETTER U WITH TILDE BELOW
+         -1,  -- LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW
+         -1,  -- LATIN SMALL LETTER U WITH TILDE AND ACUTE .. LATIN SMALL LETTER U WITH TILDE AND ACUTE
+         -1,  -- LATIN SMALL LETTER U WITH MACRON AND DIAERESIS .. LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
+         -1,  -- LATIN SMALL LETTER V WITH TILDE .. LATIN SMALL LETTER V WITH TILDE
+         -1,  -- LATIN SMALL LETTER V WITH DOT BELOW .. LATIN SMALL LETTER V WITH DOT BELOW
+         -1,  -- LATIN SMALL LETTER W WITH GRAVE .. LATIN SMALL LETTER W WITH GRAVE
+         -1,  -- LATIN SMALL LETTER W WITH ACUTE .. LATIN SMALL LETTER W WITH ACUTE
+         -1,  -- LATIN SMALL LETTER W WITH DIAERESIS .. LATIN SMALL LETTER W WITH DIAERESIS
+         -1,  -- LATIN SMALL LETTER W WITH DOT ABOVE .. LATIN SMALL LETTER W WITH DOT ABOVE
+         -1,  -- LATIN SMALL LETTER W WITH DOT BELOW .. LATIN SMALL LETTER W WITH DOT BELOW
+         -1,  -- LATIN SMALL LETTER X WITH DOT ABOVE .. LATIN SMALL LETTER X WITH DOT ABOVE
+         -1,  -- LATIN SMALL LETTER X WITH DIAERESIS .. LATIN SMALL LETTER X WITH DIAERESIS
+         -1,  -- LATIN SMALL LETTER Y WITH DOT ABOVE .. LATIN SMALL LETTER Y WITH DOT ABOVE
+         -1,  -- LATIN SMALL LETTER Z WITH CIRCUMFLEX .. LATIN SMALL LETTER Z WITH CIRCUMFLEX
+         -1,  -- LATIN SMALL LETTER Z WITH DOT BELOW .. LATIN SMALL LETTER Z WITH DOT BELOW
+         -1,  -- LATIN SMALL LETTER Z WITH LINE BELOW .. LATIN SMALL LETTER Z WITH LINE BELOW
+        -59,  -- LATIN SMALL LETTER LONG S WITH DOT ABOVE .. LATIN SMALL LETTER LONG S WITH DOT ABOVE
+         -1,  -- LATIN SMALL LETTER A WITH DOT BELOW .. LATIN SMALL LETTER A WITH DOT BELOW
+         -1,  -- LATIN SMALL LETTER A WITH HOOK ABOVE .. LATIN SMALL LETTER A WITH HOOK ABOVE
+         -1,  -- LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE .. LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+         -1,  -- LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE .. LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
+         -1,  -- LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE .. LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+         -1,  -- LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE .. LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
+         -1,  -- LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW .. LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+         -1,  -- LATIN SMALL LETTER A WITH BREVE AND ACUTE .. LATIN SMALL LETTER A WITH BREVE AND ACUTE
+         -1,  -- LATIN SMALL LETTER A WITH BREVE AND GRAVE .. LATIN SMALL LETTER A WITH BREVE AND GRAVE
+         -1,  -- LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE .. LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
+         -1,  -- LATIN SMALL LETTER A WITH BREVE AND TILDE .. LATIN SMALL LETTER A WITH BREVE AND TILDE
+         -1,  -- LATIN SMALL LETTER A WITH BREVE AND DOT BELOW .. LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+         -1,  -- LATIN SMALL LETTER E WITH DOT BELOW .. LATIN SMALL LETTER E WITH DOT BELOW
+         -1,  -- LATIN SMALL LETTER E WITH HOOK ABOVE .. LATIN SMALL LETTER E WITH HOOK ABOVE
+         -1,  -- LATIN SMALL LETTER E WITH TILDE .. LATIN SMALL LETTER E WITH TILDE
+         -1,  -- LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE .. LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+         -1,  -- LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE .. LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+         -1,  -- LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE .. LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+         -1,  -- LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE .. LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+         -1,  -- LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW .. LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+         -1,  -- LATIN SMALL LETTER I WITH HOOK ABOVE .. LATIN SMALL LETTER I WITH HOOK ABOVE
+         -1,  -- LATIN SMALL LETTER I WITH DOT BELOW .. LATIN SMALL LETTER I WITH DOT BELOW
+         -1,  -- LATIN SMALL LETTER O WITH DOT BELOW .. LATIN SMALL LETTER O WITH DOT BELOW
+         -1,  -- LATIN SMALL LETTER O WITH HOOK ABOVE .. LATIN SMALL LETTER O WITH HOOK ABOVE
+         -1,  -- LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE .. LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+         -1,  -- LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE .. LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+         -1,  -- LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE .. LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+         -1,  -- LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE .. LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+         -1,  -- LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW .. LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+         -1,  -- LATIN SMALL LETTER O WITH HORN AND ACUTE .. LATIN SMALL LETTER O WITH HORN AND ACUTE
+         -1,  -- LATIN SMALL LETTER O WITH HORN AND GRAVE .. LATIN SMALL LETTER O WITH HORN AND GRAVE
+         -1,  -- LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE .. LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
+         -1,  -- LATIN SMALL LETTER O WITH HORN AND TILDE .. LATIN SMALL LETTER O WITH HORN AND TILDE
+         -1,  -- LATIN SMALL LETTER O WITH HORN AND DOT BELOW .. LATIN SMALL LETTER O WITH HORN AND DOT BELOW
+         -1,  -- LATIN SMALL LETTER U WITH DOT BELOW .. LATIN SMALL LETTER U WITH DOT BELOW
+         -1,  -- LATIN SMALL LETTER U WITH HOOK ABOVE .. LATIN SMALL LETTER U WITH HOOK ABOVE
+         -1,  -- LATIN SMALL LETTER U WITH HORN AND ACUTE .. LATIN SMALL LETTER U WITH HORN AND ACUTE
+         -1,  -- LATIN SMALL LETTER U WITH HORN AND GRAVE .. LATIN SMALL LETTER U WITH HORN AND GRAVE
+         -1,  -- LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE .. LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
+         -1,  -- LATIN SMALL LETTER U WITH HORN AND TILDE .. LATIN SMALL LETTER U WITH HORN AND TILDE
+         -1,  -- LATIN SMALL LETTER U WITH HORN AND DOT BELOW .. LATIN SMALL LETTER U WITH HORN AND DOT BELOW
+         -1,  -- LATIN SMALL LETTER Y WITH GRAVE .. LATIN SMALL LETTER Y WITH GRAVE
+         -1,  -- LATIN SMALL LETTER Y WITH DOT BELOW .. LATIN SMALL LETTER Y WITH DOT BELOW
+         -1,  -- LATIN SMALL LETTER Y WITH HOOK ABOVE .. LATIN SMALL LETTER Y WITH HOOK ABOVE
+         -1,  -- LATIN SMALL LETTER Y WITH TILDE .. LATIN SMALL LETTER Y WITH TILDE
+          8,  -- GREEK SMALL LETTER ALPHA WITH PSILI .. GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
+          8,  -- GREEK SMALL LETTER EPSILON WITH PSILI .. GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+          8,  -- GREEK SMALL LETTER ETA WITH PSILI .. GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
+          8,  -- GREEK SMALL LETTER IOTA WITH PSILI .. GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
+          8,  -- GREEK SMALL LETTER OMICRON WITH PSILI .. GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+          8,  -- GREEK SMALL LETTER UPSILON WITH DASIA .. GREEK SMALL LETTER UPSILON WITH DASIA
+          8,  -- GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA .. GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
+          8,  -- GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA .. GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
+          8,  -- GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI .. GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+          8,  -- GREEK SMALL LETTER OMEGA WITH PSILI .. GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
+         74,  -- GREEK SMALL LETTER ALPHA WITH VARIA .. GREEK SMALL LETTER ALPHA WITH OXIA
+         86,  -- GREEK SMALL LETTER EPSILON WITH VARIA .. GREEK SMALL LETTER ETA WITH OXIA
+        100,  -- GREEK SMALL LETTER IOTA WITH VARIA .. GREEK SMALL LETTER IOTA WITH OXIA
+        128,  -- GREEK SMALL LETTER OMICRON WITH VARIA .. GREEK SMALL LETTER OMICRON WITH OXIA
+        112,  -- GREEK SMALL LETTER UPSILON WITH VARIA .. GREEK SMALL LETTER UPSILON WITH OXIA
+        126,  -- GREEK SMALL LETTER OMEGA WITH VARIA .. GREEK SMALL LETTER OMEGA WITH OXIA
+          8,  -- GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI .. GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+          8,  -- GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI .. GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+          8,  -- GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI .. GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+          8,  -- GREEK SMALL LETTER ALPHA WITH VRACHY .. GREEK SMALL LETTER ALPHA WITH MACRON
+          9,  -- GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI .. GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
+      -7205,  -- GREEK PROSGEGRAMMENI .. GREEK PROSGEGRAMMENI
+          9,  -- GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI .. GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
+          8,  -- GREEK SMALL LETTER IOTA WITH VRACHY .. GREEK SMALL LETTER IOTA WITH MACRON
+          8,  -- GREEK SMALL LETTER UPSILON WITH VRACHY .. GREEK SMALL LETTER UPSILON WITH MACRON
+          7,  -- GREEK SMALL LETTER RHO WITH DASIA .. GREEK SMALL LETTER RHO WITH DASIA
+          9,  -- GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI .. GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
+        -32,  -- FULLWIDTH LATIN SMALL LETTER A .. FULLWIDTH LATIN SMALL LETTER Z
+        -40); -- DESERET SMALL LETTER LONG I .. DESERET SMALL LETTER ENG
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    function Range_Search (U : Char_Code; R : UTF_32_Ranges) return Natural;
+    --  Searches the given ranges (which must be in ascending order by Lo value)
+    --  and returns the index of the matching range in R if U matches one of the
+    --  ranges. If U matches none of the ranges, returns zero.
+ 
+    ---------------------
+    -- Is_UTF_32_Digit --
+    ---------------------
+ 
+    function Is_UTF_32_Digit (U : Char_Code) return Boolean is
+    begin
+       return Range_Search (U, UTF_32_Digits) /= 0;
+    end Is_UTF_32_Digit;
+ 
+    ----------------------
+    -- Is_UTF_32_Letter --
+    ----------------------
+ 
+    function Is_UTF_32_Letter (U : Char_Code) return Boolean is
+    begin
+       return Range_Search (U, UTF_32_Letters) /= 0;
+    end Is_UTF_32_Letter;
+ 
+    -------------------------------
+    -- Is_UTF_32_Line_Terminator --
+    -------------------------------
+ 
+    function Is_UTF_32_Line_Terminator (U : Char_Code) return Boolean is
+    begin
+       return U in 10 .. 13     -- Ascii.LF Ascii.VT Ascii.FF Ascii.CR
+         or else U = 16#02028#  -- LINE SEPARATOR
+         or else U = 16#02029#; -- PARAGRAPH SEPARATOR
+    end Is_UTF_32_Line_Terminator;
+ 
+    --------------------
+    -- Is_UTF_32_Mark --
+    --------------------
+ 
+    function Is_UTF_32_Mark (U : Char_Code) return Boolean is
+    begin
+       return Range_Search (U, UTF_32_Marks) /= 0;
+    end Is_UTF_32_Mark;
+ 
+    ---------------------------
+    -- Is_UTF_32_Non_Graphic --
+    ---------------------------
+ 
+    function Is_UTF_32_Non_Graphic (U : Char_Code) return Boolean is
+    begin
+       return Range_Search (U, UTF_32_Non_Graphic) /= 0;
+    end Is_UTF_32_Non_Graphic;
+ 
+    ---------------------
+    -- Is_UTF_32_Other --
+    ---------------------
+ 
+    function Is_UTF_32_Other (U : Char_Code) return Boolean is
+    begin
+       return Range_Search (U, UTF_32_Other_Format) /= 0;
+    end Is_UTF_32_Other;
+ 
+    ---------------------------
+    -- Is_UTF_32_Punctuation --
+    ---------------------------
+ 
+    function Is_UTF_32_Punctuation (U : Char_Code) return Boolean is
+    begin
+       return Range_Search (U, UTF_32_Punctuation) /= 0;
+    end Is_UTF_32_Punctuation;
+ 
+    ---------------------
+    -- Is_UTF_32_Space --
+    ---------------------
+ 
+    function Is_UTF_32_Space (U : Char_Code) return Boolean is
+    begin
+       return Range_Search (U, UTF_32_Spaces) /= 0;
+    end Is_UTF_32_Space;
+ 
     ---------------------------
     -- Is_Start_Of_Wide_Char --
     ---------------------------
  
     function Is_Start_Of_Wide_Char
!      (S : Source_Buffer_Ptr;
!       P : Source_Ptr) return Boolean
     is
     begin
        case Wide_Character_Encoding_Method is
*************** package body Widechar is
*** 79,84 ****
--- 1615,1656 ----
        return WC_Longest_Sequence;
     end Length_Wide;
  
+    ------------------
+    -- Range_Search --
+    ------------------
+ 
+    function Range_Search (U : Char_Code; R : UTF_32_Ranges) return Natural is
+       Lo  : Integer;
+       Hi  : Integer;
+       Mid : Integer;
+ 
+    begin
+       Lo := R'First;
+       Hi := R'Last;
+ 
+       loop
+          Mid := (Lo + Hi) / 2;
+ 
+          if U < R (Mid).Lo then
+             Hi := Mid - 1;
+ 
+             if Hi < Lo then
+                return 0;
+             end if;
+ 
+          elsif R (Mid).Hi < U then
+             Lo := Mid + 1;
+ 
+             if Hi < Lo then
+                return 0;
+             end if;
+ 
+          else
+             return Mid;
+          end if;
+       end loop;
+    end Range_Search;
+ 
     ---------------
     -- Scan_Wide --
     ---------------
*************** package body Widechar is
*** 92,108 ****
        function In_Char return Character;
        --  Function to obtain characters of wide character escape sequence
  
        function In_Char return Character is
        begin
           P := P + 1;
           return S (P - 1);
        end In_Char;
  
!       function WC_In is new Char_Sequence_To_Wide_Char (In_Char);
  
     begin
!       C := Char_Code (Wide_Character'Pos
!                        (WC_In (In_Char, Wide_Character_Encoding_Method)));
        Err := False;
  
     exception
--- 1664,1685 ----
        function In_Char return Character;
        --  Function to obtain characters of wide character escape sequence
  
+       -------------
+       -- In_Char --
+       -------------
+ 
        function In_Char return Character is
        begin
           P := P + 1;
           return S (P - 1);
        end In_Char;
  
!       function WC_In is new Char_Sequence_To_UTF_32 (In_Char);
! 
!    --  Start of processingf for Scan_Wide
  
     begin
!       C := Char_Code (WC_In (In_Char, Wide_Character_Encoding_Method));
        Err := False;
  
     exception
*************** package body Widechar is
*** 124,139 ****
        procedure Out_Char (C : Character);
        --  Procedure to store one character of wide character sequence
  
        procedure Out_Char (C : Character) is
        begin
           P := P + 1;
           S (P) := C;
        end Out_Char;
  
!       procedure WC_Out is new Wide_Char_To_Char_Sequence (Out_Char);
  
     begin
!       WC_Out (Wide_Character'Val (C), Wide_Character_Encoding_Method);
     end Set_Wide;
  
     ---------------
--- 1701,1722 ----
        procedure Out_Char (C : Character);
        --  Procedure to store one character of wide character sequence
  
+       --------------
+       -- Out_Char --
+       --------------
+ 
        procedure Out_Char (C : Character) is
        begin
           P := P + 1;
           S (P) := C;
        end Out_Char;
  
!       procedure WC_Out is new UTF_32_To_Char_Sequence (Out_Char);
! 
!    --  Start of processing for Set_Wide
  
     begin
!       WC_Out (UTF_32_Code (C), Wide_Character_Encoding_Method);
     end Set_Wide;
  
     ---------------
*************** package body Widechar is
*** 144,162 ****
        function Skip_Char return Character;
        --  Function to skip one character of wide character escape sequence
  
        function Skip_Char return Character is
        begin
           P := P + 1;
           return S (P - 1);
        end Skip_Char;
  
!       function WC_Skip is new Char_Sequence_To_Wide_Char (Skip_Char);
  
!       Discard : Wide_Character;
        pragma Warnings (Off, Discard);
  
     begin
        Discard := WC_Skip (Skip_Char, Wide_Character_Encoding_Method);
     end Skip_Wide;
  
  end Widechar;
--- 1727,1794 ----
        function Skip_Char return Character;
        --  Function to skip one character of wide character escape sequence
  
+       ---------------
+       -- Skip_Char --
+       ---------------
+ 
        function Skip_Char return Character is
        begin
           P := P + 1;
           return S (P - 1);
        end Skip_Char;
  
!       function WC_Skip is new Char_Sequence_To_UTF_32 (Skip_Char);
  
!       Discard : UTF_32_Code;
        pragma Warnings (Off, Discard);
  
+    --  Start of processing for Skip_Wide
+ 
     begin
        Discard := WC_Skip (Skip_Char, Wide_Character_Encoding_Method);
     end Skip_Wide;
  
+    ---------------
+    -- Skip_Wide --
+    ---------------
+ 
+    procedure Skip_Wide (S : Source_Buffer_Ptr; P : in out Source_Ptr) is
+       function Skip_Char return Character;
+       --  Function to skip one character of wide character escape sequence
+ 
+       ---------------
+       -- Skip_Char --
+       ---------------
+ 
+       function Skip_Char return Character is
+       begin
+          P := P + 1;
+          return S (P - 1);
+       end Skip_Char;
+ 
+       function WC_Skip is new Char_Sequence_To_UTF_32 (Skip_Char);
+ 
+       Discard : UTF_32_Code;
+       pragma Warnings (Off, Discard);
+ 
+    --  Start of processing for Skip_Wide
+ 
+    begin
+       Discard := WC_Skip (Skip_Char, Wide_Character_Encoding_Method);
+    end Skip_Wide;
+ 
+    --------------------------
+    -- UTF_32_To_Upper_Case --
+    --------------------------
+ 
+    function UTF_32_To_Upper_Case (U : Char_Code) return Char_Code is
+       Index : constant Integer := Range_Search (U, Lower_Case_Letters);
+    begin
+       if Index = 0 then
+          return U;
+       else
+          return U + Upper_Case_Adjust (Index);
+       end if;
+    end UTF_32_To_Upper_Case;
+ 
  end Widechar;
diff -Nrcpad gcc-3.4.3/gcc/ada/widechar.ads gcc-4.0.0/gcc/ada/widechar.ads
*** gcc-3.4.3/gcc/ada/widechar.ads	Thu Apr 24 17:54:20 2003
--- gcc-4.0.0/gcc/ada/widechar.ads	Thu Feb 10 13:50:48 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-1998 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 31,37 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  Subprograms for manipulation of wide character sequences
  
  with Types; use Types;
  
--- 31,40 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  Subprograms for manipulation of wide character sequences. Note that in
! --  this package, wide character and wide wide character are not distinguished
! --  since this package is basically concerned with syntactic notions, and it
! --  deals with Char_Code values, rather than values of actual Ada types.
  
  with Types; use Types;
  
*************** package Widechar is
*** 40,46 ****
     function Length_Wide return Nat;
     --  Returns the maximum length in characters for the escape sequence that
     --  is used to encode wide character literals outside the ASCII range. Used
!    --  only in the implementation of the attribute Width for Wide_Character.
  
     procedure Scan_Wide
       (S   : Source_Buffer_Ptr;
--- 43,50 ----
     function Length_Wide return Nat;
     --  Returns the maximum length in characters for the escape sequence that
     --  is used to encode wide character literals outside the ASCII range. Used
!    --  only in the implementation of the attribute Width for Wide_Character
!    --  and Wide_Wide_Character.
  
     procedure Scan_Wide
       (S   : Source_Buffer_Ptr;
*************** package Widechar is
*** 76,85 ****
     --  checking is done, since this is only used on escape sequences generated
     --  by Set_Wide, which are known to be correct.
  
     function Is_Start_Of_Wide_Char
!      (S    : Source_Buffer_Ptr;
!       P    : Source_Ptr)
!       return Boolean;
     --  Determines if S (P) is the start of a wide character sequence
  
  end Widechar;
--- 80,167 ----
     --  checking is done, since this is only used on escape sequences generated
     --  by Set_Wide, which are known to be correct.
  
+    procedure Skip_Wide (S : Source_Buffer_Ptr; P : in out Source_Ptr);
+    --  Similar to the above procedure, but operates on a source buffer
+    --  instead of a string, with P being a Source_Ptr referencing the
+    --  contents of the source buffer.
+ 
     function Is_Start_Of_Wide_Char
!      (S : Source_Buffer_Ptr;
!       P : Source_Ptr) return Boolean;
     --  Determines if S (P) is the start of a wide character sequence
  
+    function Is_UTF_32_Letter (U : Char_Code) return Boolean;
+    pragma Inline (Is_UTF_32_Letter);
+    --  Returns true iff U is a letter that can be used to start an identifier.
+    --  This means that it is in one of the following categories:
+    --    Letter, Uppercase (Lu)
+    --    Letter, Lowercase (Ll)
+    --    Letter, Titlecase (Lt)
+    --    Letter, Modifier  (Lm)
+    --    Letter, Other     (Lo)
+    --    Number, Letter    (Nl)
+ 
+    function Is_UTF_32_Digit (U : Char_Code) return Boolean;
+    pragma Inline (Is_UTF_32_Digit);
+    --  Returns true iff U is a digit that can be used to extend an identifer,
+    --  which means it is in one of the following categories:
+    --    Number, Decimal_Digit (Nd)
+ 
+    function Is_UTF_32_Line_Terminator (U : Char_Code) return Boolean;
+    pragma Inline (Is_UTF_32_Line_Terminator);
+    --  Returns true iff U is an allowed line terminator for source programs,
+    --  which means it is in one of the following categories:
+    --    Separator, Line (Zl)
+    --    Separator, Paragraph (Zp)
+    --  or that it is a conventional line terminator (CR, LF, VT, FF)
+ 
+    function Is_UTF_32_Mark (U : Char_Code) return Boolean;
+    pragma Inline (Is_UTF_32_Mark);
+    --  Returns true iff U is a mark character which can be used to extend
+    --  an identifier. This means it is in one of the following categories:
+    --    Mark, Non-Spacing (Mn)
+    --    Mark, Spacing Combining (Mc)
+ 
+    function Is_UTF_32_Other (U : Char_Code) return Boolean;
+    pragma Inline (Is_UTF_32_Other);
+    --  Returns true iff U is an other format character, which means that it
+    --  can be used to extend an identifier, but is ignored for the purposes of
+    --  matching of identiers. This means that it is in one of the following
+    --  categories:
+    --    Other, Format (Cf)
+ 
+    function Is_UTF_32_Punctuation (U : Char_Code) return Boolean;
+    pragma Inline (Is_UTF_32_Punctuation);
+    --  Returns true iff U is a punctuation character that can be used to
+    --  separate pices of an identifier. This means that it is in one of the
+    --  following categories:
+    --    Punctuation, Connector (Pc)
+ 
+    function Is_UTF_32_Space (U : Char_Code) return Boolean;
+    pragma Inline (Is_UTF_32_Space);
+    --  Returns true iff U is considered a space to be ignored, which means
+    --  that it is in one of the following categories:
+    --    Separator, Space (Zs)
+ 
+    function Is_UTF_32_Non_Graphic (U : Char_Code) return Boolean;
+    pragma Inline (Is_UTF_32_Non_Graphic);
+    --  Returns true iff U is considered to be a non-graphic character,
+    --  which means that it is in one of the following categories:
+    --    Other, Control (Cc)
+    --    Other, Private Use (Co)
+    --    Other, Surrogate (Cs)
+    --    Other, Format (Cf)
+    --    Separator, Line (Zl)
+    --    Separator, Paragraph (Zp)
+    --
+    --  Note that the Ada category format effector is subsumed by the above
+    --  list of Unicode categories.
+ 
+    function UTF_32_To_Upper_Case (U : Char_Code) return Char_Code;
+    pragma Inline (UTF_32_To_Upper_Case);
+    --  If U represents a lower case letter, returns the corresponding upper
+    --  case letter, otherwise U is returned unchanged. The folding is locale
+    --  independent as defined by documents referenced in the note in section
+    --  1 of ISO/IEC 10646:2003
+ 
  end Widechar;
diff -Nrcpad gcc-3.4.3/gcc/ada/xgnatugn.adb gcc-4.0.0/gcc/ada/xgnatugn.adb
*** gcc-3.4.3/gcc/ada/xgnatugn.adb	Wed Jun  9 09:20:45 2004
--- gcc-4.0.0/gcc/ada/xgnatugn.adb	Mon Aug  9 12:24:22 2004
***************
*** 86,93 ****
  --       output. A line containing this escape sequence may not also contain
  --       a ^alpha^beta^ sequence.
  
! --       Recognize @ifset and @ifclear (this is because we have menu problems
! --       if we let makeinfo handle the ifset/ifclear pairs
  
  with Ada.Command_Line;           use Ada.Command_Line;
  with Ada.Strings;                use Ada.Strings;
--- 86,96 ----
  --       output. A line containing this escape sequence may not also contain
  --       a ^alpha^beta^ sequence.
  
! --       Process @ifset and @ifclear for the target flags (unw, vms);
! --       this is because we have menu problems if we let makeinfo handle
! --       these ifset/ifclear pairs.
! --       Note: @ifset/@ifclear commands for the edition flags (FSFEDITION,
! --       PROEDITION, ACADEMICEDITION) are passed through unchanged
  
  with Ada.Command_Line;           use Ada.Command_Line;
  with Ada.Strings;                use Ada.Strings;
*************** procedure Xgnatugn is
*** 143,149 ****
     procedure Warning
       (Input        : Input_File;
        Message      : String);
!    --  Like Error, but just print a warning message.
  
     Dictionary_File : aliased Input_File;
     procedure Read_Dictionary_File;
--- 146,152 ----
     procedure Warning
       (Input        : Input_File;
        Message      : String);
!    --  Like Error, but just print a warning message
  
     Dictionary_File : aliased Input_File;
     procedure Read_Dictionary_File;
*************** procedure Xgnatugn is
*** 158,168 ****
     --  It contains the Texinfo source code. Process_Source_File
     --  performs the necessary replacements.
  
!    type Target_Type is (UNW, VMS);
     Target : Target_Type;
!    --  The target for which preprocessing is performed:
!    --  UNW (Unix and Windows) or VMS
!    --  The Target variable is initialized using the command line.
  
     Valid_Characters : constant Character_Set
       := To_Set (Span => (' ',  '~'));
--- 161,184 ----
     --  It contains the Texinfo source code. Process_Source_File
     --  performs the necessary replacements.
  
!    type Flag_Type is (UNW, VMS, FSFEDITION, PROEDITION, ACADEMICEDITION);
!    --  The flags permitted in @ifset or @ifclear commands:
!    --
!    --  Targets for preprocessing
!    --    UNW (Unix and Windows) or VMS
!    --
!    --  Editions of the manual
!    --    FSFEDITION, PROEDITION, or ACADEMICEDITION
!    --
!    --  Conditional commands for target are processed by xgnatugn
!    --
!    --  Conditional commands for edition are passed through unchanged
! 
!    subtype Target_Type is Flag_Type range UNW .. VMS;
!    subtype Edition_Type is Flag_Type range FSFEDITION .. ACADEMICEDITION;
! 
     Target : Target_Type;
!    --  The Target variable is initialized using the command line
  
     Valid_Characters : constant Character_Set
       := To_Set (Span => (' ',  '~'));
*************** procedure Xgnatugn is
*** 191,197 ****
     --  execution terminates with a Fatal_Line_Length exception.
  
     VMS_Escape_Character : constant Character := '^';
!    --  The character used to mark VMS alternatives (^alpha^beta^).
  
     Extensions : GNAT.Spitbol.Table_VString.Table (20);
     procedure Initialize_Extensions;
--- 207,213 ----
     --  execution terminates with a Fatal_Line_Length exception.
  
     VMS_Escape_Character : constant Character := '^';
!    --  The character used to mark VMS alternatives (^alpha^beta^)
  
     Extensions : GNAT.Spitbol.Table_VString.Table (20);
     procedure Initialize_Extensions;
*************** procedure Xgnatugn is
*** 231,237 ****
     --  Target.
  
     function In_VMS_Section return Boolean;
!    --  Returns True if in an "@ifset vms" section.
  
     procedure Check_No_Pending_Conditional;
     --  Checks that all preprocessing directives have been properly matched by
--- 247,253 ----
     --  Target.
  
     function In_VMS_Section return Boolean;
!    --  Returns True if in an "@ifset vms" section
  
     procedure Check_No_Pending_Conditional;
     --  Checks that all preprocessing directives have been properly matched by
*************** procedure Xgnatugn is
*** 244,250 ****
     type Conditional_Context is record
        Starting_Line : Positive;
        Cond          : Conditional;
!       Flag          : Target_Type;
        Excluding     : Boolean;
     end record;
  
--- 260,266 ----
     type Conditional_Context is record
        Starting_Line : Positive;
        Cond          : Conditional;
!       Flag          : Flag_Type;
        Excluding     : Boolean;
     end record;
  
*************** procedure Xgnatugn is
*** 254,260 ****
       array (1 .. Conditional_Stack_Depth) of Conditional_Context;
  
     Conditional_TOS : Natural := 0;
!    --  Pointer to the Top Of Stack for Conditional_Stack.
  
     -----------
     -- Usage --
--- 270,276 ----
       array (1 .. Conditional_Stack_Depth) of Conditional_Context;
  
     Conditional_TOS : Natural := 0;
!    --  Pointer to the Top Of Stack for Conditional_Stack
  
     -----------
     -- Usage --
*************** procedure Xgnatugn is
*** 263,269 ****
     procedure Usage is
     begin
        Put_Line (Standard_Error,
!               "usage: xgnatug TARGET SOURCE DICTIONARY [OUTFILE [WARNINGS]]");
        New_Line;
        Put_Line (Standard_Error, "TARGET is one of:");
  
--- 279,285 ----
     procedure Usage is
     begin
        Put_Line (Standard_Error,
!             "usage: xgnatugn TARGET SOURCE DICTIONARY [OUTFILE [WARNINGS]]");
        New_Line;
        Put_Line (Standard_Error, "TARGET is one of:");
  
*************** procedure Xgnatugn is
*** 342,349 ****
     -----------
  
     procedure Error
!      (Input        : Input_File;
!       Message      : String)
     is
     begin
        Error (Input, 0, Message);
--- 358,365 ----
     -----------
  
     procedure Error
!      (Input   : Input_File;
!       Message : String)
     is
     begin
        Error (Input, 0, Message);
*************** procedure Xgnatugn is
*** 586,592 ****
              return;
           end if;
  
!          --  ^alpha^beta^, the VMS_Alternative case.
  
           if Remaining_Line (Remaining_Line'First) = VMS_Escape_Character then
              declare
--- 602,608 ----
              return;
           end if;
  
!          --  ^alpha^beta^, the VMS_Alternative case
  
           if Remaining_Line (Remaining_Line'First) = VMS_Escape_Character then
              declare
*************** procedure Xgnatugn is
*** 786,793 ****
                         (Line (Token.Span.First .. Token.Span.Last)));
                 Next_Token;
              else
!                --  We already have: Word ".", followed by an unknown
!                --  token.
  
                 Append (Rewritten_Line, First_Word & '.');
  
--- 802,808 ----
                         (Line (Token.Span.First .. Token.Span.Last)));
                 Next_Token;
              else
!                --  We already have: Word ".", followed by an unknown token
  
                 Append (Rewritten_Line, First_Word & '.');
  
*************** procedure Xgnatugn is
*** 894,900 ****
        Ifset       : constant String := "@ifset ";
        Ifclear     : constant String := "@ifclear ";
        Endsetclear : constant String := "@end ";
!       --  Strings to be recognized for conditional processing.
  
     begin
        while not End_Of_File (Source_File.Data) loop
--- 909,915 ----
        Ifset       : constant String := "@ifset ";
        Ifclear     : constant String := "@ifclear ";
        Endsetclear : constant String := "@end ";
!       --  Strings to be recognized for conditional processing
  
     begin
        while not End_Of_File (Source_File.Data) loop
*************** procedure Xgnatugn is
*** 910,923 ****
              --  directive.
  
              Cond : Conditional;
!             --  The kind of the directive.
  
!             Flag : Target_Type;
!             --  Its flag.
  
           begin
              --  If the line starts with @ifset or @ifclear, we try to convert
!             --  the following flag to one of our target types. If we fail,
              --  Have_Conditional remains False.
  
              if Line'Length >= Ifset'Length
--- 925,938 ----
              --  directive.
  
              Cond : Conditional;
!             --  The kind of the directive
  
!             Flag : Flag_Type;
!             --  Its flag
  
           begin
              --  If the line starts with @ifset or @ifclear, we try to convert
!             --  the following flag to one of our flag types. If we fail,
              --  Have_Conditional remains False.
  
              if Line'Length >= Ifset'Length
*************** procedure Xgnatugn is
*** 930,945 ****
                            Trim (Line (Ifset'Length + 1 .. Line'Last), Both);
  
                 begin
!                   Flag := Target_Type'Value (Arg);
! 
!                   if Translate (Target_Type'Image (Flag), Lower_Case_Map)
!                                                                     /= Arg
!                   then
!                      Error (Source_File, "flag has to be lowercase");
!                   end if;
! 
                    Have_Conditional := True;
  
                 exception
                    when Constraint_Error =>
                       Error (Source_File, "unknown flag for '@ifset'");
--- 945,965 ----
                            Trim (Line (Ifset'Length + 1 .. Line'Last), Both);
  
                 begin
!                   Flag := Flag_Type'Value (Arg);
                    Have_Conditional := True;
  
+                   case Flag is
+                      when Target_Type =>
+                         if Translate (Target_Type'Image (Flag),
+                                       Lower_Case_Map)
+                                                       /= Arg
+                         then
+                            Error (Source_File, "flag has to be lowercase");
+                         end if;
+ 
+                      when Edition_Type =>
+                         null;
+                   end case;
                 exception
                    when Constraint_Error =>
                       Error (Source_File, "unknown flag for '@ifset'");
*************** procedure Xgnatugn is
*** 955,976 ****
                            Trim (Line (Ifclear'Length + 1 .. Line'Last), Both);
  
                 begin
!                   Flag := Target_Type'Value (Arg);
!                   if Translate (Target_Type'Image (Flag), Lower_Case_Map)
!                                                                      /= Arg
!                   then
!                      Error (Source_File, "flag has to be lowercase");
!                   end if;
! 
                    Have_Conditional := True;
  
                 exception
                    when Constraint_Error =>
                       Error (Source_File, "unknown flag for '@ifclear'");
                 end;
              end if;
  
!             if Have_Conditional then
  
                 --  We create a new conditional context and suppress the
                 --  directive in the output.
--- 975,1002 ----
                            Trim (Line (Ifclear'Length + 1 .. Line'Last), Both);
  
                 begin
!                   Flag := Flag_Type'Value (Arg);
                    Have_Conditional := True;
  
+                   case Flag is
+                      when Target_Type =>
+                         if Translate (Target_Type'Image (Flag),
+                                       Lower_Case_Map)
+                                                       /= Arg
+                         then
+                            Error (Source_File, "flag has to be lowercase");
+                         end if;
+ 
+                      when Edition_Type =>
+                         null;
+                   end case;
                 exception
                    when Constraint_Error =>
                       Error (Source_File, "unknown flag for '@ifclear'");
                 end;
              end if;
  
!             if Have_Conditional and (Flag in Target_Type) then
  
                 --  We create a new conditional context and suppress the
                 --  directive in the output.
*************** procedure Xgnatugn is
*** 979,984 ****
--- 1005,1011 ----
  
              elsif Line'Length >= Endsetclear'Length
                and then Line (1 .. Endsetclear'Length) = Endsetclear
+               and then (Flag in Target_Type)
              then
                 --  The '@end ifset'/'@end ifclear' case is handled here. We
                 --  have to pop the conditional context.
*************** procedure Xgnatugn is
*** 1016,1022 ****
                 end;
              end if;                     --  Have_Conditional
  
!             if not Have_Conditional then
  
                 --  The ordinary case.
  
--- 1043,1049 ----
                 end;
              end if;                     --  Have_Conditional
  
!             if (not Have_Conditional) or (Flag in Edition_Type) then
  
                 --  The ordinary case.
  
*************** procedure Xgnatugn is
*** 1252,1274 ****
        end loop;
     end Check_No_Pending_Conditional;
  
!    ------------------
!    -- Main Program --
!    ------------------
  
     Valid_Command_Line : Boolean;
     Output_File_Name   : VString;
  
  begin
     Initialize_Extensions;
- 
     Valid_Command_Line := Argument_Count in 3 .. 5;
  
!    --  First argument: Target.
  
     if Valid_Command_Line then
        begin
!          Target := Target_Type'Value (Argument (1));
  
        exception
           when Constraint_Error =>
--- 1279,1302 ----
        end loop;
     end Check_No_Pending_Conditional;
  
! --  Start of processing for Xgnatugn
  
     Valid_Command_Line : Boolean;
     Output_File_Name   : VString;
  
  begin
     Initialize_Extensions;
     Valid_Command_Line := Argument_Count in 3 .. 5;
  
!    --  First argument: Target
  
     if Valid_Command_Line then
        begin
!          Target := Flag_Type'Value (Argument (1));
! 
!          if Target not in Target_Type then
!             Valid_Command_Line := False;
!          end if;
  
        exception
           when Constraint_Error =>
*************** begin
*** 1276,1282 ****
        end;
     end if;
  
!    --  Second argument: Source_File.
  
     if Valid_Command_Line then
        begin
--- 1304,1310 ----
        end;
     end if;
  
!    --  Second argument: Source_File
  
     if Valid_Command_Line then
        begin
*************** begin
*** 1289,1295 ****
        end;
     end if;
  
!    --  Third argument: Dictionary_File.
  
     if Valid_Command_Line then
        begin
--- 1317,1323 ----
        end;
     end if;
  
!    --  Third argument: Dictionary_File
  
     if Valid_Command_Line then
        begin
*************** begin
*** 1302,1308 ****
        end;
     end if;
  
!    --  Fourth argument: Output_File.
  
     if Valid_Command_Line then
        if Argument_Count in 4 .. 5 then
--- 1330,1336 ----
        end;
     end if;
  
!    --  Fourth argument: Output_File
  
     if Valid_Command_Line then
        if Argument_Count in 4 .. 5 then
*************** begin
*** 1335,1341 ****
        Read_Dictionary_File;
        Close (Dictionary_File.Data);
  
!       --  Main processing starts here.
  
        Process_Source_File;
        Close (Output_File);
--- 1363,1369 ----
        Read_Dictionary_File;
        Close (Dictionary_File.Data);
  
!       --  Main processing starts here
  
        Process_Source_File;
        Close (Output_File);
diff -Nrcpad gcc-3.4.3/gcc/ada/xr_tabls.adb gcc-4.0.0/gcc/ada/xr_tabls.adb
*** gcc-3.4.3/gcc/ada/xr_tabls.adb	Mon Jan  5 15:20:47 2004
--- gcc-4.0.0/gcc/ada/xr_tabls.adb	Wed Jan 21 10:35:18 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1998-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1998-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** package body Xr_Tabls is
*** 1413,1419 ****
       (Sorted : Boolean := True)
        return   Declaration_Array_Access
     is
!       Arr   : Declaration_Array_Access :=
                  new Declaration_Array (1 .. Entities_Count);
        Decl  : Declaration_Reference := Entities_HTable.Get_First;
        Index : Natural               := Arr'First;
--- 1413,1419 ----
       (Sorted : Boolean := True)
        return   Declaration_Array_Access
     is
!       Arr   : constant Declaration_Array_Access :=
                  new Declaration_Array (1 .. Entities_Count);
        Decl  : Declaration_Reference := Entities_HTable.Get_First;
        Index : Natural               := Arr'First;
diff -Nrcpad gcc-3.4.3/gcc/ada/xr_tabls.ads gcc-4.0.0/gcc/ada/xr_tabls.ads
*** gcc-3.4.3/gcc/ada/xr_tabls.ads	Mon Jan  5 15:20:47 2004
--- gcc-4.0.0/gcc/ada/xr_tabls.ads	Thu Feb 10 13:57:00 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --         Copyright (C) 1998-2003 Free Software Foundation, Inc.           --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --         Copyright (C) 1998-2005 Free Software Foundation, Inc.           --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 24,29 ****
--- 24,31 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
+ --  We need comment here saying what this package is???
+ 
  with GNAT.OS_Lib;
  
  package Xr_Tabls is
diff -Nrcpad gcc-3.4.3/gcc/ada/xsinfo.adb gcc-4.0.0/gcc/ada/xsinfo.adb
*** gcc-3.4.3/gcc/ada/xsinfo.adb	Thu Apr 24 17:54:20 2003
--- gcc-4.0.0/gcc/ada/xsinfo.adb	Thu Feb 10 13:57:00 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 24,30 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  Program to construct C header file a-sinfo.h (C version of sinfo.ads spec,
  --  for use by Gigi, contains all definitions and access functions, but does
  --  not contain set procedures, since Gigi never modifies the GNAT tree)
  
--- 24,30 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  Program to construct C header file sinfo.h (C version of sinfo.ads spec,
  --  for use by Gigi, contains all definitions and access functions, but does
  --  not contain set procedures, since Gigi never modifies the GNAT tree)
  
***************
*** 34,47 ****
  
  --    Output files:
  
! --       a-sinfo.h     Corresponding c header file
  
  --  Note: this program assumes that sinfo.ads has passed the error checks
  --  which are carried out by the CSinfo utility, so it does not duplicate
  --  these checks and assumes the soruce is correct.
  
  --  An optional argument allows the specification of an output file name to
! --  override the default a-sinfo.h file name for the generated output file.
  
  with Ada.Command_Line;              use Ada.Command_Line;
  with Ada.Strings.Unbounded;         use Ada.Strings.Unbounded;
--- 34,47 ----
  
  --    Output files:
  
! --       sinfo.h       Corresponding c header file
  
  --  Note: this program assumes that sinfo.ads has passed the error checks
  --  which are carried out by the CSinfo utility, so it does not duplicate
  --  these checks and assumes the soruce is correct.
  
  --  An optional argument allows the specification of an output file name to
! --  override the default sinfo.h file name for the generated output file.
  
  with Ada.Command_Line;              use Ada.Command_Line;
  with Ada.Strings.Unbounded;         use Ada.Strings.Unbounded;
*************** begin
*** 118,124 ****
     if Argument_Count > 0 then
        Create (Ofile, Out_File, Argument (1));
     else
!       Create (Ofile, Out_File, "a-sinfo.h");
     end if;
  
     Open (InS, In_File, "sinfo.ads");
--- 118,124 ----
     if Argument_Count > 0 then
        Create (Ofile, Out_File, Argument (1));
     else
!       Create (Ofile, Out_File, "sinfo.h");
     end if;
  
     Open (InS, In_File, "sinfo.ads");
diff -Nrcpad gcc-3.4.3/gcc/ada/xsnames.adb gcc-4.0.0/gcc/ada/xsnames.adb
*** gcc-3.4.3/gcc/ada/xsnames.adb	Tue Oct 21 13:42:24 2003
--- gcc-4.0.0/gcc/ada/xsnames.adb	Thu Feb 10 13:57:00 2005
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2002 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** begin
*** 138,144 ****
  
     loop
        Line := Get_Line (InB);
!       exit when Match (Line, "      ""#"";");
     end loop;
  
     Put_Line (OutB, Line);
--- 138,144 ----
  
     loop
        Line := Get_Line (InB);
!       exit when Match (Line, "     ""#"";");
     end loop;
  
     Put_Line (OutB, Line);
diff -Nrcpad gcc-3.4.3/gcc/ada/xtreeprs.adb gcc-4.0.0/gcc/ada/xtreeprs.adb
*** gcc-3.4.3/gcc/ada/xtreeprs.adb	Tue Oct 21 13:42:24 2003
--- gcc-4.0.0/gcc/ada/xtreeprs.adb	Fri Jun 25 16:39:33 2004
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
*************** begin
*** 303,309 ****
  
        loop
           Sp := 79 - 4 - Length (Prefix);
!          exit when (Size (S) <= Sp);
           Match (S, Chop_SP, "");
           Put_Line (OutS, Prefix & '"' & S1 & """ &");
           Prefix := V ("         ");
--- 303,309 ----
  
        loop
           Sp := 79 - 4 - Length (Prefix);
!          exit when Size (S) <= Sp;
           Match (S, Chop_SP, "");
           Put_Line (OutS, Prefix & '"' & S1 & """ &");
           Prefix := V ("         ");
diff -Nrcpad gcc-3.4.3/gcc/alias.c gcc-4.0.0/gcc/alias.c
*** gcc-3.4.3/gcc/alias.c	Fri Jun 25 19:15:52 2004
--- gcc-4.0.0/gcc/alias.c	Sun Jan 23 15:05:27 2005
***************
*** 1,5 ****
  /* Alias analysis for GNU C
!    Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
     Free Software Foundation, Inc.
     Contributed by John Carr (jfc@mit.edu).
  
--- 1,5 ----
  /* Alias analysis for GNU C
!    Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
     Free Software Foundation, Inc.
     Contributed by John Carr (jfc@mit.edu).
  
*************** Software Foundation, 59 Temple Place - S
*** 28,34 ****
  #include "tree.h"
  #include "tm_p.h"
  #include "function.h"
! #include "expr.h"
  #include "regs.h"
  #include "hard-reg-set.h"
  #include "basic-block.h"
--- 28,35 ----
  #include "tree.h"
  #include "tm_p.h"
  #include "function.h"
! #include "alias.h"
! #include "emit-rtl.h"
  #include "regs.h"
  #include "hard-reg-set.h"
  #include "basic-block.h"
*************** static bool nonoverlapping_component_ref
*** 112,118 ****
  static tree decl_for_component_ref (tree);
  static rtx adjust_offset_for_component_ref (tree, rtx);
  static int nonoverlapping_memrefs_p (rtx, rtx);
! static int write_dependence_p (rtx, rtx, int, int);
  
  static int nonlocal_mentioned_p_1 (rtx *, void *);
  static int nonlocal_mentioned_p (rtx);
--- 113,119 ----
  static tree decl_for_component_ref (tree);
  static rtx adjust_offset_for_component_ref (tree, rtx);
  static int nonoverlapping_memrefs_p (rtx, rtx);
! static int write_dependence_p (rtx, rtx, int);
  
  static int nonlocal_mentioned_p_1 (rtx *, void *);
  static int nonlocal_mentioned_p (rtx);
*************** static int nonlocal_referenced_p (rtx);
*** 121,126 ****
--- 122,128 ----
  static int nonlocal_set_p_1 (rtx *, void *);
  static int nonlocal_set_p (rtx);
  static void memory_modified_1 (rtx, rtx, void *);
+ static void record_alias_subset (HOST_WIDE_INT, HOST_WIDE_INT);
  
  /* Set up all info needed to perform alias analysis on memory references.  */
  
*************** static rtx *new_reg_base_value;
*** 163,169 ****
  /* We preserve the copy of old array around to avoid amount of garbage
     produced.  About 8% of garbage produced were attributed to this
     array.  */
! static GTY((deletable (""))) varray_type old_reg_base_value;
  
  /* Static hunks of RTL used by the aliasing code; these are initialized
     once per function to avoid unnecessary RTL allocations.  */
--- 165,171 ----
  /* We preserve the copy of old array around to avoid amount of garbage
     produced.  About 8% of garbage produced were attributed to this
     array.  */
! static GTY((deletable)) varray_type old_reg_base_value;
  
  /* Static hunks of RTL used by the aliasing code; these are initialized
     once per function to avoid unnecessary RTL allocations.  */
*************** static GTY (()) rtx static_reg_base_valu
*** 182,188 ****
     Because this array contains only pseudo registers it has no effect
     after reload.  */
  static GTY((length("alias_invariant_size"))) rtx *alias_invariant;
! unsigned GTY(()) int alias_invariant_size;
  
  /* Vector indexed by N giving the initial (unchanging) value known for
     pseudo-register N.  This array is initialized in init_alias_analysis,
--- 184,190 ----
     Because this array contains only pseudo registers it has no effect
     after reload.  */
  static GTY((length("alias_invariant_size"))) rtx *alias_invariant;
! static GTY(()) unsigned int alias_invariant_size;
  
  /* Vector indexed by N giving the initial (unchanging) value known for
     pseudo-register N.  This array is initialized in init_alias_analysis,
*************** get_alias_set_entry (HOST_WIDE_INT alias
*** 228,234 ****
  static inline int
  mems_in_disjoint_alias_sets_p (rtx mem1, rtx mem2)
  {
- #ifdef ENABLE_CHECKING
  /* Perform a basic sanity check.  Namely, that there are no alias sets
     if we're not using strict aliasing.  This helps to catch bugs
     whereby someone uses PUT_CODE, but doesn't clear MEM_ALIAS_SET, or
--- 230,235 ----
*************** mems_in_disjoint_alias_sets_p (rtx mem1,
*** 236,245 ****
     gen_rtx_MEM, and the MEM_ALIAS_SET is not cleared.  If we begin to
     use alias sets to indicate that spilled registers cannot alias each
     other, we might need to remove this check.  */
!   if (! flag_strict_aliasing
!       && (MEM_ALIAS_SET (mem1) != 0 || MEM_ALIAS_SET (mem2) != 0))
!     abort ();
! #endif
  
    return ! alias_sets_conflict_p (MEM_ALIAS_SET (mem1), MEM_ALIAS_SET (mem2));
  }
--- 237,244 ----
     gen_rtx_MEM, and the MEM_ALIAS_SET is not cleared.  If we begin to
     use alias sets to indicate that spilled registers cannot alias each
     other, we might need to remove this check.  */
!   gcc_assert (flag_strict_aliasing
! 	      || (!MEM_ALIAS_SET (mem1) && !MEM_ALIAS_SET (mem2)));
  
    return ! alias_sets_conflict_p (MEM_ALIAS_SET (mem1), MEM_ALIAS_SET (mem2));
  }
*************** alias_sets_conflict_p (HOST_WIDE_INT set
*** 289,316 ****
       child of the other.  Therefore, they cannot alias.  */
    return 0;
  }
! 
! /* Return 1 if TYPE is a RECORD_TYPE, UNION_TYPE, or QUAL_UNION_TYPE and has
!    has any readonly fields.  If any of the fields have types that
!    contain readonly fields, return true as well.  */
  
  int
! readonly_fields_p (tree type)
  {
!   tree field;
! 
!   if (TREE_CODE (type) != RECORD_TYPE && TREE_CODE (type) != UNION_TYPE
!       && TREE_CODE (type) != QUAL_UNION_TYPE)
!     return 0;
! 
!   for (field = TYPE_FIELDS (type); field != 0; field = TREE_CHAIN (field))
!     if (TREE_CODE (field) == FIELD_DECL
! 	&& (TREE_READONLY (field)
! 	    || readonly_fields_p (TREE_TYPE (field))))
!       return 1;
  
    return 0;
  }
  
  /* Return 1 if any MEM object of type T1 will always conflict (using the
     dependency routines in this file) with any MEM object of type T2.
--- 288,306 ----
       child of the other.  Therefore, they cannot alias.  */
    return 0;
  }
! 
! /* Return 1 if the two specified alias sets might conflict, or if any subtype
!    of these alias sets might conflict.  */
  
  int
! alias_sets_might_conflict_p (HOST_WIDE_INT set1, HOST_WIDE_INT set2)
  {
!   if (set1 == 0 || set2 == 0 || set1 == set2)
!     return 1;
  
    return 0;
  }
+ 
  
  /* Return 1 if any MEM object of type T1 will always conflict (using the
     dependency routines in this file) with any MEM object of type T2.
*************** objects_must_conflict_p (tree t1, tree t
*** 328,341 ****
    if (t1 == 0 && t2 == 0)
      return 0;
  
-   /* If one or the other has readonly fields or is readonly,
-      then they may not conflict.  */
-   if ((t1 != 0 && readonly_fields_p (t1))
-       || (t2 != 0 && readonly_fields_p (t2))
-       || (t1 != 0 && lang_hooks.honor_readonly && TYPE_READONLY (t1))
-       || (t2 != 0 && lang_hooks.honor_readonly && TYPE_READONLY (t2)))
-     return 0;
- 
    /* If they are the same type, they must conflict.  */
    if (t1 == t2
        /* Likewise if both are volatile.  */
--- 318,323 ----
*************** objects_must_conflict_p (tree t1, tree t
*** 361,373 ****
  static tree
  find_base_decl (tree t)
  {
!   tree d0, d1, d2;
  
    if (t == 0 || t == error_mark_node || ! POINTER_TYPE_P (TREE_TYPE (t)))
      return 0;
  
    /* If this is a declaration, return it.  */
!   if (TREE_CODE_CLASS (TREE_CODE (t)) == 'd')
      return t;
  
    /* Handle general expressions.  It would be nice to deal with
--- 343,355 ----
  static tree
  find_base_decl (tree t)
  {
!   tree d0, d1;
  
    if (t == 0 || t == error_mark_node || ! POINTER_TYPE_P (TREE_TYPE (t)))
      return 0;
  
    /* If this is a declaration, return it.  */
!   if (DECL_P (t))
      return t;
  
    /* Handle general expressions.  It would be nice to deal with
*************** find_base_decl (tree t)
*** 375,384 ****
       same, then `a->f' and `b->f' are also the same.  */
    switch (TREE_CODE_CLASS (TREE_CODE (t)))
      {
!     case '1':
        return find_base_decl (TREE_OPERAND (t, 0));
  
!     case '2':
        /* Return 0 if found in neither or both are the same.  */
        d0 = find_base_decl (TREE_OPERAND (t, 0));
        d1 = find_base_decl (TREE_OPERAND (t, 1));
--- 357,366 ----
       same, then `a->f' and `b->f' are also the same.  */
    switch (TREE_CODE_CLASS (TREE_CODE (t)))
      {
!     case tcc_unary:
        return find_base_decl (TREE_OPERAND (t, 0));
  
!     case tcc_binary:
        /* Return 0 if found in neither or both are the same.  */
        d0 = find_base_decl (TREE_OPERAND (t, 0));
        d1 = find_base_decl (TREE_OPERAND (t, 1));
*************** find_base_decl (tree t)
*** 391,446 ****
        else
  	return 0;
  
-     case '3':
-       d0 = find_base_decl (TREE_OPERAND (t, 0));
-       d1 = find_base_decl (TREE_OPERAND (t, 1));
-       d2 = find_base_decl (TREE_OPERAND (t, 2));
- 
-       /* Set any nonzero values from the last, then from the first.  */
-       if (d1 == 0) d1 = d2;
-       if (d0 == 0) d0 = d1;
-       if (d1 == 0) d1 = d0;
-       if (d2 == 0) d2 = d1;
- 
-       /* At this point all are nonzero or all are zero.  If all three are the
- 	 same, return it.  Otherwise, return zero.  */
-       return (d0 == d1 && d1 == d2) ? d0 : 0;
- 
      default:
        return 0;
      }
  }
  
! /* Return 1 if all the nested component references handled by
!    get_inner_reference in T are such that we can address the object in T.  */
  
! int
! can_address_p (tree t)
  {
!   /* If we're at the end, it is vacuously addressable.  */
!   if (! handled_component_p (t))
!     return 1;
  
!   /* Bitfields are never addressable.  */
!   else if (TREE_CODE (t) == BIT_FIELD_REF)
!     return 0;
  
!   /* Fields are addressable unless they are marked as nonaddressable or
!      the containing type has alias set 0.  */
!   else if (TREE_CODE (t) == COMPONENT_REF
! 	   && ! DECL_NONADDRESSABLE_P (TREE_OPERAND (t, 1))
! 	   && get_alias_set (TREE_TYPE (TREE_OPERAND (t, 0))) != 0
! 	   && can_address_p (TREE_OPERAND (t, 0)))
!     return 1;
  
!   /* Likewise for arrays.  */
!   else if ((TREE_CODE (t) == ARRAY_REF || TREE_CODE (t) == ARRAY_RANGE_REF)
! 	   && ! TYPE_NONALIASED_COMPONENT (TREE_TYPE (TREE_OPERAND (t, 0)))
! 	   && get_alias_set (TREE_TYPE (TREE_OPERAND (t, 0))) != 0
! 	   && can_address_p (TREE_OPERAND (t, 0)))
!     return 1;
  
!   return 0;
  }
  
  /* Return the alias set for T, which may be either a type or an
--- 373,428 ----
        else
  	return 0;
  
      default:
        return 0;
      }
  }
  
! /* Return true if all nested component references handled by
!    get_inner_reference in T are such that we should use the alias set
!    provided by the object at the heart of T.
  
!    This is true for non-addressable components (which don't have their
!    own alias set), as well as components of objects in alias set zero.
!    This later point is a special case wherein we wish to override the
!    alias set used by the component, but we don't have per-FIELD_DECL
!    assignable alias sets.  */
! 
! bool
! component_uses_parent_alias_set (tree t)
  {
!   while (1)
!     {
!       /* If we're at the end, it vacuously uses its own alias set.  */
!       if (!handled_component_p (t))
! 	return false;
  
!       switch (TREE_CODE (t))
! 	{
! 	case COMPONENT_REF:
! 	  if (DECL_NONADDRESSABLE_P (TREE_OPERAND (t, 1)))
! 	    return true;
! 	  break;
  
! 	case ARRAY_REF:
! 	case ARRAY_RANGE_REF:
! 	  if (TYPE_NONALIASED_COMPONENT (TREE_TYPE (TREE_OPERAND (t, 0))))
! 	    return true;
! 	  break;
  
! 	case REALPART_EXPR:
! 	case IMAGPART_EXPR:
! 	  break;
  
! 	default:
! 	  /* Bitfields and casts are never addressable.  */
! 	  return true;
! 	}
! 
!       t = TREE_OPERAND (t, 0);
!       if (get_alias_set (TREE_TYPE (t)) == 0)
! 	return true;
!     }
  }
  
  /* Return the alias set for T, which may be either a type or an
*************** get_alias_set (tree t)
*** 467,497 ****
    if (! TYPE_P (t))
      {
        tree inner = t;
-       tree placeholder_ptr = 0;
  
        /* Remove any nops, then give the language a chance to do
  	 something with this tree before we look at it.  */
        STRIP_NOPS (t);
!       set = (*lang_hooks.get_alias_set) (t);
        if (set != -1)
  	return set;
  
        /* First see if the actual object referenced is an INDIRECT_REF from a
! 	 restrict-qualified pointer or a "void *".  Replace
! 	 PLACEHOLDER_EXPRs.  */
!       while (TREE_CODE (inner) == PLACEHOLDER_EXPR
! 	     || handled_component_p (inner))
  	{
! 	  if (TREE_CODE (inner) == PLACEHOLDER_EXPR)
! 	    inner = find_placeholder (inner, &placeholder_ptr);
! 	  else
! 	    inner = TREE_OPERAND (inner, 0);
! 
  	  STRIP_NOPS (inner);
  	}
  
        /* Check for accesses through restrict-qualified pointers.  */
!       if (TREE_CODE (inner) == INDIRECT_REF)
  	{
  	  tree decl = find_base_decl (TREE_OPERAND (inner, 0));
  
--- 449,472 ----
    if (! TYPE_P (t))
      {
        tree inner = t;
  
        /* Remove any nops, then give the language a chance to do
  	 something with this tree before we look at it.  */
        STRIP_NOPS (t);
!       set = lang_hooks.get_alias_set (t);
        if (set != -1)
  	return set;
  
        /* First see if the actual object referenced is an INDIRECT_REF from a
! 	 restrict-qualified pointer or a "void *".  */
!       while (handled_component_p (inner))
  	{
! 	  inner = TREE_OPERAND (inner, 0);
  	  STRIP_NOPS (inner);
  	}
  
        /* Check for accesses through restrict-qualified pointers.  */
!       if (INDIRECT_REF_P (inner))
  	{
  	  tree decl = find_base_decl (TREE_OPERAND (inner, 0));
  
*************** get_alias_set (tree t)
*** 523,529 ****
  		       type, then we would believe that other subsets
  		       of the pointed-to type (such as fields of that
  		       type) do not conflict with the type pointed to
! 		       by the restricted pointer.   */
  		    DECL_POINTER_ALIAS_SET (decl)
  		      = pointed_to_alias_set;
  		  else
--- 498,504 ----
  		       type, then we would believe that other subsets
  		       of the pointed-to type (such as fields of that
  		       type) do not conflict with the type pointed to
! 		       by the restricted pointer.  */
  		    DECL_POINTER_ALIAS_SET (decl)
  		      = pointed_to_alias_set;
  		  else
*************** get_alias_set (tree t)
*** 539,560 ****
  	    }
  
  	  /* If we have an INDIRECT_REF via a void pointer, we don't
! 	     know anything about what that might alias.  */
! 	  else if (TREE_CODE (TREE_TYPE (inner)) == VOID_TYPE)
  	    return 0;
  	}
  
        /* Otherwise, pick up the outermost object that we could have a pointer
! 	 to, processing conversion and PLACEHOLDER_EXPR as above.  */
!       placeholder_ptr = 0;
!       while (TREE_CODE (t) == PLACEHOLDER_EXPR
! 	     || (handled_component_p (t) && ! can_address_p (t)))
  	{
! 	  if (TREE_CODE (t) == PLACEHOLDER_EXPR)
! 	    t = find_placeholder (t, &placeholder_ptr);
! 	  else
! 	    t = TREE_OPERAND (t, 0);
! 
  	  STRIP_NOPS (t);
  	}
  
--- 514,532 ----
  	    }
  
  	  /* If we have an INDIRECT_REF via a void pointer, we don't
! 	     know anything about what that might alias.  Likewise if the
! 	     pointer is marked that way.  */
! 	  else if (TREE_CODE (TREE_TYPE (inner)) == VOID_TYPE
! 		   || (TYPE_REF_CAN_ALIAS_ALL
! 		       (TREE_TYPE (TREE_OPERAND (inner, 0)))))
  	    return 0;
  	}
  
        /* Otherwise, pick up the outermost object that we could have a pointer
! 	 to, processing conversions as above.  */
!       while (component_uses_parent_alias_set (t))
  	{
! 	  t = TREE_OPERAND (t, 0);
  	  STRIP_NOPS (t);
  	}
  
*************** get_alias_set (tree t)
*** 562,568 ****
  	 it.  This is necessary for C++ anonymous unions, whose component
  	 variables don't look like union members (boo!).  */
        if (TREE_CODE (t) == VAR_DECL
! 	  && DECL_RTL_SET_P (t) && GET_CODE (DECL_RTL (t)) == MEM)
  	return MEM_ALIAS_SET (DECL_RTL (t));
  
        /* Now all we care about is the type.  */
--- 534,540 ----
  	 it.  This is necessary for C++ anonymous unions, whose component
  	 variables don't look like union members (boo!).  */
        if (TREE_CODE (t) == VAR_DECL
! 	  && DECL_RTL_SET_P (t) && MEM_P (DECL_RTL (t)))
  	return MEM_ALIAS_SET (DECL_RTL (t));
  
        /* Now all we care about is the type.  */
*************** get_alias_set (tree t)
*** 576,582 ****
      return TYPE_ALIAS_SET (t);
  
    /* See if the language has special handling for this type.  */
!   set = (*lang_hooks.get_alias_set) (t);
    if (set != -1)
      return set;
  
--- 548,554 ----
      return TYPE_ALIAS_SET (t);
  
    /* See if the language has special handling for this type.  */
!   set = lang_hooks.get_alias_set (t);
    if (set != -1)
      return set;
  
*************** new_alias_set (void)
*** 639,645 ****
     It is illegal for SUPERSET to be zero; everything is implicitly a
     subset of alias set zero.  */
  
! void
  record_alias_subset (HOST_WIDE_INT superset, HOST_WIDE_INT subset)
  {
    alias_set_entry superset_entry;
--- 611,617 ----
     It is illegal for SUPERSET to be zero; everything is implicitly a
     subset of alias set zero.  */
  
! static void
  record_alias_subset (HOST_WIDE_INT superset, HOST_WIDE_INT subset)
  {
    alias_set_entry superset_entry;
*************** record_alias_subset (HOST_WIDE_INT super
*** 650,657 ****
    if (superset == subset)
      return;
  
!   if (superset == 0)
!     abort ();
  
    superset_entry = get_alias_set_entry (superset);
    if (superset_entry == 0)
--- 622,628 ----
    if (superset == subset)
      return;
  
!   gcc_assert (superset);
  
    superset_entry = get_alias_set_entry (superset);
    if (superset_entry == 0)
*************** record_component_aliases (tree type)
*** 714,728 ****
      case UNION_TYPE:
      case QUAL_UNION_TYPE:
        /* Recursively record aliases for the base classes, if there are any.  */
!       if (TYPE_BINFO (type) != NULL && TYPE_BINFO_BASETYPES (type) != NULL)
  	{
  	  int i;
! 	  for (i = 0; i < TREE_VEC_LENGTH (TYPE_BINFO_BASETYPES (type)); i++)
! 	    {
! 	      tree binfo = TREE_VEC_ELT (TYPE_BINFO_BASETYPES (type), i);
! 	      record_alias_subset (superset,
! 				   get_alias_set (BINFO_TYPE (binfo)));
! 	    }
  	}
        for (field = TYPE_FIELDS (type); field != 0; field = TREE_CHAIN (field))
  	if (TREE_CODE (field) == FIELD_DECL && ! DECL_NONADDRESSABLE_P (field))
--- 685,699 ----
      case UNION_TYPE:
      case QUAL_UNION_TYPE:
        /* Recursively record aliases for the base classes, if there are any.  */
!       if (TYPE_BINFO (type))
  	{
  	  int i;
! 	  tree binfo, base_binfo;
! 	  
! 	  for (binfo = TYPE_BINFO (type), i = 0;
! 	       BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
! 	    record_alias_subset (superset,
! 				 get_alias_set (BINFO_TYPE (base_binfo)));
  	}
        for (field = TYPE_FIELDS (type); field != 0; field = TREE_CHAIN (field))
  	if (TREE_CODE (field) == FIELD_DECL && ! DECL_NONADDRESSABLE_P (field))
*************** static GTY(()) HOST_WIDE_INT varargs_set
*** 746,755 ****
--- 717,734 ----
  HOST_WIDE_INT
  get_varargs_alias_set (void)
  {
+ #if 1
+   /* We now lower VA_ARG_EXPR, and there's currently no way to attach the
+      varargs alias set to an INDIRECT_REF (FIXME!), so we can't
+      consistently use the varargs alias set for loads from the varargs
+      area.  So don't use it anywhere.  */
+   return 0;
+ #else
    if (varargs_set == -1)
      varargs_set = new_alias_set ();
  
    return varargs_set;
+ #endif
  }
  
  /* Likewise, but used for the fixed portions of the frame, e.g., register
*************** record_set (rtx dest, rtx set, void *dat
*** 943,960 ****
    rtx src;
    int n;
  
!   if (GET_CODE (dest) != REG)
      return;
  
    regno = REGNO (dest);
  
!   if (regno >= VARRAY_SIZE (reg_base_value))
!     abort ();
  
    /* If this spans multiple hard registers, then we must indicate that every
       register has an unusable value.  */
    if (regno < FIRST_PSEUDO_REGISTER)
!     n = HARD_REGNO_NREGS (regno, GET_MODE (dest));
    else
      n = 1;
    if (n != 1)
--- 922,938 ----
    rtx src;
    int n;
  
!   if (!REG_P (dest))
      return;
  
    regno = REGNO (dest);
  
!   gcc_assert (regno < VARRAY_SIZE (reg_base_value));
  
    /* If this spans multiple hard registers, then we must indicate that every
       register has an unusable value.  */
    if (regno < FIRST_PSEUDO_REGISTER)
!     n = hard_regno_nregs[regno][GET_MODE (dest)];
    else
      n = 1;
    if (n != 1)
*************** record_set (rtx dest, rtx set, void *dat
*** 992,1004 ****
        return;
      }
  
!   /* This is not the first set.  If the new value is not related to the
!      old value, forget the base value. Note that the following code is
!      not detected:
!      extern int x, y;  int *p = &x; p += (&y-&x);
       ANSI C does not allow computing the difference of addresses
       of distinct top level objects.  */
!   if (new_reg_base_value[regno])
      switch (GET_CODE (src))
        {
        case LO_SUM:
--- 970,993 ----
        return;
      }
  
!   /* If this is not the first set of REGNO, see whether the new value
!      is related to the old one.  There are two cases of interest:
! 
! 	(1) The register might be assigned an entirely new value
! 	    that has the same base term as the original set.
! 
! 	(2) The set might be a simple self-modification that
! 	    cannot change REGNO's base value.
! 
!      If neither case holds, reject the original base value as invalid.
!      Note that the following situation is not detected:
! 
!          extern int x, y;  int *p = &x; p += (&y-&x);
! 
       ANSI C does not allow computing the difference of addresses
       of distinct top level objects.  */
!   if (new_reg_base_value[regno] != 0
!       && find_base_value (src) != new_reg_base_value[regno])
      switch (GET_CODE (src))
        {
        case LO_SUM:
*************** record_base_value (unsigned int regno, r
*** 1053,1059 ****
    if (regno >= VARRAY_SIZE (reg_base_value))
      VARRAY_GROW (reg_base_value, max_reg_num ());
  
!   if (GET_CODE (val) == REG)
      {
        VARRAY_RTX (reg_base_value, regno)
  	 = REG_BASE_VALUE (val);
--- 1042,1048 ----
    if (regno >= VARRAY_SIZE (reg_base_value))
      VARRAY_GROW (reg_base_value, max_reg_num ());
  
!   if (REG_P (val))
      {
        VARRAY_RTX (reg_base_value, regno)
  	 = REG_BASE_VALUE (val);
*************** rtx
*** 1146,1152 ****
  canon_rtx (rtx x)
  {
    /* Recursively look for equivalences.  */
!   if (GET_CODE (x) == REG && REGNO (x) >= FIRST_PSEUDO_REGISTER)
      {
        rtx t = get_reg_known_value (REGNO (x));
        if (t == x)
--- 1135,1141 ----
  canon_rtx (rtx x)
  {
    /* Recursively look for equivalences.  */
!   if (REG_P (x) && REGNO (x) >= FIRST_PSEUDO_REGISTER)
      {
        rtx t = get_reg_known_value (REGNO (x));
        if (t == x)
*************** canon_rtx (rtx x)
*** 1174,1180 ****
       the loop optimizer.   Note we want to leave the original
       MEM alone, but need to return the canonicalized MEM with
       all the flags with their original values.  */
!   else if (GET_CODE (x) == MEM)
      x = replace_equiv_address_nv (x, canon_rtx (XEXP (x, 0)));
  
    return x;
--- 1163,1169 ----
       the loop optimizer.   Note we want to leave the original
       MEM alone, but need to return the canonicalized MEM with
       all the flags with their original values.  */
!   else if (MEM_P (x))
      x = replace_equiv_address_nv (x, canon_rtx (XEXP (x, 0)));
  
    return x;
*************** rtx_equal_for_memref_p (rtx x, rtx y)
*** 1233,1243 ****
  	 comparison for these nodes.  */
        return 0;
  
-     case ADDRESSOF:
-       return (XINT (x, 1) == XINT (y, 1)
- 	      && rtx_equal_for_memref_p (XEXP (x, 0),
- 					 XEXP (y, 0)));
- 
      default:
        break;
      }
--- 1222,1227 ----
*************** rtx_equal_for_memref_p (rtx x, rtx y)
*** 1250,1256 ****
  		&& rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 0))));
    /* For commutative operations, the RTX match if the operand match in any
       order.  Also handle the simple binary and unary cases without a loop.  */
!   if (code == EQ || code == NE || GET_RTX_CLASS (code) == 'c')
      {
        rtx xop0 = canon_rtx (XEXP (x, 0));
        rtx yop0 = canon_rtx (XEXP (y, 0));
--- 1234,1240 ----
  		&& rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 0))));
    /* For commutative operations, the RTX match if the operand match in any
       order.  Also handle the simple binary and unary cases without a loop.  */
!   if (COMMUTATIVE_P (x))
      {
        rtx xop0 = canon_rtx (XEXP (x, 0));
        rtx yop0 = canon_rtx (XEXP (y, 0));
*************** rtx_equal_for_memref_p (rtx x, rtx y)
*** 1261,1274 ****
  	      || (rtx_equal_for_memref_p (xop0, yop1)
  		  && rtx_equal_for_memref_p (canon_rtx (XEXP (x, 1)), yop0)));
      }
!   else if (GET_RTX_CLASS (code) == '<' || GET_RTX_CLASS (code) == '2')
      {
        return (rtx_equal_for_memref_p (canon_rtx (XEXP (x, 0)),
  				      canon_rtx (XEXP (y, 0)))
  	      && rtx_equal_for_memref_p (canon_rtx (XEXP (x, 1)),
  					 canon_rtx (XEXP (y, 1))));
      }
!   else if (GET_RTX_CLASS (code) == '1')
      return rtx_equal_for_memref_p (canon_rtx (XEXP (x, 0)),
  				   canon_rtx (XEXP (y, 0)));
  
--- 1245,1258 ----
  	      || (rtx_equal_for_memref_p (xop0, yop1)
  		  && rtx_equal_for_memref_p (canon_rtx (XEXP (x, 1)), yop0)));
      }
!   else if (NON_COMMUTATIVE_P (x))
      {
        return (rtx_equal_for_memref_p (canon_rtx (XEXP (x, 0)),
  				      canon_rtx (XEXP (y, 0)))
  	      && rtx_equal_for_memref_p (canon_rtx (XEXP (x, 1)),
  					 canon_rtx (XEXP (y, 1))));
      }
!   else if (UNARY_P (x))
      return rtx_equal_for_memref_p (canon_rtx (XEXP (x, 0)),
  				   canon_rtx (XEXP (y, 0)));
  
*************** rtx_equal_for_memref_p (rtx x, rtx y)
*** 1319,1325 ****
  	     contain anything but integers and other rtx's,
  	     except for within LABEL_REFs and SYMBOL_REFs.  */
  	default:
! 	  abort ();
  	}
      }
    return 1;
--- 1303,1309 ----
  	     contain anything but integers and other rtx's,
  	     except for within LABEL_REFs and SYMBOL_REFs.  */
  	default:
! 	  gcc_unreachable ();
  	}
      }
    return 1;
*************** find_symbolic_term (rtx x)
*** 1338,1344 ****
    code = GET_CODE (x);
    if (code == SYMBOL_REF || code == LABEL_REF)
      return x;
!   if (GET_RTX_CLASS (code) == 'o')
      return 0;
  
    fmt = GET_RTX_FORMAT (code);
--- 1322,1328 ----
    code = GET_CODE (x);
    if (code == SYMBOL_REF || code == LABEL_REF)
      return x;
!   if (OBJECT_P (x))
      return 0;
  
    fmt = GET_RTX_FORMAT (code);
*************** find_base_term (rtx x)
*** 1479,1487 ****
      case LABEL_REF:
        return x;
  
-     case ADDRESSOF:
-       return REG_BASE_VALUE (frame_pointer_rtx);
- 
      default:
        return 0;
      }
--- 1463,1468 ----
*************** get_addr (rtx x)
*** 1585,1591 ****
  	if (CONSTANT_P (l->loc))
  	  return l->loc;
        for (l = v->locs; l; l = l->next)
! 	if (GET_CODE (l->loc) != REG && GET_CODE (l->loc) != MEM)
  	  return l->loc;
        if (v->locs)
  	return v->locs->loc;
--- 1566,1572 ----
  	if (CONSTANT_P (l->loc))
  	  return l->loc;
        for (l = v->locs; l; l = l->next)
! 	if (!REG_P (l->loc) && !MEM_P (l->loc))
  	  return l->loc;
        if (v->locs)
  	return v->locs->loc;
*************** get_addr (rtx x)
*** 1597,1603 ****
      where SIZE is the size in bytes of the memory reference.  If ADDR
      is not modified by the memory reference then ADDR is returned.  */
  
! rtx
  addr_side_effect_eval (rtx addr, int size, int n_refs)
  {
    int offset = 0;
--- 1578,1584 ----
      where SIZE is the size in bytes of the memory reference.  If ADDR
      is not modified by the memory reference then ADDR is returned.  */
  
! static rtx
  addr_side_effect_eval (rtx addr, int size, int n_refs)
  {
    int offset = 0;
*************** memrefs_conflict_p (int xsize, rtx x, in
*** 1803,1820 ****
        return memrefs_conflict_p (xsize, x, ysize, canon_rtx (XEXP (y, 0)), c);
      }
  
-   if (GET_CODE (x) == ADDRESSOF)
-     {
-       if (y == frame_pointer_rtx
- 	  || GET_CODE (y) == ADDRESSOF)
- 	return xsize <= 0 || ysize <= 0;
-     }
-   if (GET_CODE (y) == ADDRESSOF)
-     {
-       if (x == frame_pointer_rtx)
- 	return xsize <= 0 || ysize <= 0;
-     }
- 
    if (CONSTANT_P (x))
      {
        if (GET_CODE (x) == CONST_INT && GET_CODE (y) == CONST_INT)
--- 1784,1789 ----
*************** static int
*** 1913,1919 ****
  aliases_everything_p (rtx mem)
  {
    if (GET_CODE (XEXP (mem, 0)) == AND)
!     /* If the address is an AND, its very hard to know at what it is
         actually pointing.  */
      return 1;
  
--- 1882,1888 ----
  aliases_everything_p (rtx mem)
  {
    if (GET_CODE (XEXP (mem, 0)) == AND)
!     /* If the address is an AND, it's very hard to know at what it is
         actually pointing.  */
      return 1;
  
*************** adjust_offset_for_component_ref (tree x,
*** 2005,2015 ****
    ioffset = INTVAL (offset);
    do
      {
        tree field = TREE_OPERAND (x, 1);
  
!       if (! host_integerp (DECL_FIELD_OFFSET (field), 1))
  	return NULL_RTX;
!       ioffset += (tree_low_cst (DECL_FIELD_OFFSET (field), 1)
  		  + (tree_low_cst (DECL_FIELD_BIT_OFFSET (field), 1)
  		     / BITS_PER_UNIT));
  
--- 1974,1985 ----
    ioffset = INTVAL (offset);
    do
      {
+       tree offset = component_ref_field_offset (x);
        tree field = TREE_OPERAND (x, 1);
  
!       if (! host_integerp (offset, 1))
  	return NULL_RTX;
!       ioffset += (tree_low_cst (offset, 1)
  		  + (tree_low_cst (DECL_FIELD_BIT_OFFSET (field), 1)
  		     / BITS_PER_UNIT));
  
*************** nonoverlapping_memrefs_p (rtx x, rtx y)
*** 2052,2058 ****
        moffsetx = adjust_offset_for_component_ref (exprx, moffsetx);
        exprx = t;
      }
!   else if (TREE_CODE (exprx) == INDIRECT_REF)
      {
        exprx = TREE_OPERAND (exprx, 0);
        if (flag_argument_noalias < 2
--- 2022,2028 ----
        moffsetx = adjust_offset_for_component_ref (exprx, moffsetx);
        exprx = t;
      }
!   else if (INDIRECT_REF_P (exprx))
      {
        exprx = TREE_OPERAND (exprx, 0);
        if (flag_argument_noalias < 2
*************** nonoverlapping_memrefs_p (rtx x, rtx y)
*** 2069,2075 ****
        moffsety = adjust_offset_for_component_ref (expry, moffsety);
        expry = t;
      }
!   else if (TREE_CODE (expry) == INDIRECT_REF)
      {
        expry = TREE_OPERAND (expry, 0);
        if (flag_argument_noalias < 2
--- 2039,2045 ----
        moffsety = adjust_offset_for_component_ref (expry, moffsety);
        expry = t;
      }
!   else if (INDIRECT_REF_P (expry))
      {
        expry = TREE_OPERAND (expry, 0);
        if (flag_argument_noalias < 2
*************** nonoverlapping_memrefs_p (rtx x, rtx y)
*** 2086,2092 ****
    /* If either RTL is not a MEM, it must be a REG or CONCAT, meaning they
       can't overlap unless they are the same because we never reuse that part
       of the stack frame used for locals for spilled pseudos.  */
!   if ((GET_CODE (rtlx) != MEM || GET_CODE (rtly) != MEM)
        && ! rtx_equal_p (rtlx, rtly))
      return 1;
  
--- 2056,2062 ----
    /* If either RTL is not a MEM, it must be a REG or CONCAT, meaning they
       can't overlap unless they are the same because we never reuse that part
       of the stack frame used for locals for spilled pseudos.  */
!   if ((!MEM_P (rtlx) || !MEM_P (rtly))
        && ! rtx_equal_p (rtlx, rtly))
      return 1;
  
*************** nonoverlapping_memrefs_p (rtx x, rtx y)
*** 2094,2104 ****
       know both are and are the same, so use that as the base.  The only
       we can avoid overlap is if we can deduce that they are nonoverlapping
       pieces of that decl, which is very rare.  */
!   basex = GET_CODE (rtlx) == MEM ? XEXP (rtlx, 0) : rtlx;
    if (GET_CODE (basex) == PLUS && GET_CODE (XEXP (basex, 1)) == CONST_INT)
      offsetx = INTVAL (XEXP (basex, 1)), basex = XEXP (basex, 0);
  
!   basey = GET_CODE (rtly) == MEM ? XEXP (rtly, 0) : rtly;
    if (GET_CODE (basey) == PLUS && GET_CODE (XEXP (basey, 1)) == CONST_INT)
      offsety = INTVAL (XEXP (basey, 1)), basey = XEXP (basey, 0);
  
--- 2064,2074 ----
       know both are and are the same, so use that as the base.  The only
       we can avoid overlap is if we can deduce that they are nonoverlapping
       pieces of that decl, which is very rare.  */
!   basex = MEM_P (rtlx) ? XEXP (rtlx, 0) : rtlx;
    if (GET_CODE (basex) == PLUS && GET_CODE (XEXP (basex, 1)) == CONST_INT)
      offsetx = INTVAL (XEXP (basex, 1)), basex = XEXP (basex, 0);
  
!   basey = MEM_P (rtly) ? XEXP (rtly, 0) : rtly;
    if (GET_CODE (basey) == PLUS && GET_CODE (XEXP (basey, 1)) == CONST_INT)
      offsety = INTVAL (XEXP (basey, 1)), basey = XEXP (basey, 0);
  
*************** nonoverlapping_memrefs_p (rtx x, rtx y)
*** 2113,2122 ****
  	    || (CONSTANT_P (basey) && REG_P (basex)
  		&& REGNO_PTR_FRAME_P (REGNO (basex))));
  
!   sizex = (GET_CODE (rtlx) != MEM ? (int) GET_MODE_SIZE (GET_MODE (rtlx))
  	   : MEM_SIZE (rtlx) ? INTVAL (MEM_SIZE (rtlx))
  	   : -1);
!   sizey = (GET_CODE (rtly) != MEM ? (int) GET_MODE_SIZE (GET_MODE (rtly))
  	   : MEM_SIZE (rtly) ? INTVAL (MEM_SIZE (rtly)) :
  	   -1);
  
--- 2083,2092 ----
  	    || (CONSTANT_P (basey) && REG_P (basex)
  		&& REGNO_PTR_FRAME_P (REGNO (basex))));
  
!   sizex = (!MEM_P (rtlx) ? (int) GET_MODE_SIZE (GET_MODE (rtlx))
  	   : MEM_SIZE (rtlx) ? INTVAL (MEM_SIZE (rtlx))
  	   : -1);
!   sizey = (!MEM_P (rtly) ? (int) GET_MODE_SIZE (GET_MODE (rtly))
  	   : MEM_SIZE (rtly) ? INTVAL (MEM_SIZE (rtly)) :
  	   -1);
  
*************** true_dependence (rtx mem, enum machine_m
*** 2169,2185 ****
    if (DIFFERENT_ALIAS_SETS_P (x, mem))
      return 0;
  
!   /* Unchanging memory can't conflict with non-unchanging memory.
!      A non-unchanging read can conflict with a non-unchanging write.
!      An unchanging read can conflict with an unchanging write since
!      there may be a single store to this address to initialize it.
!      Note that an unchanging store can conflict with a non-unchanging read
!      since we have to make conservative assumptions when we have a
!      record with readonly fields and we are copying the whole thing.
!      Just fall through to the code below to resolve potential conflicts.
!      This won't handle all cases optimally, but the possible performance
!      loss should be negligible.  */
!   if (RTX_UNCHANGING_P (x) && ! RTX_UNCHANGING_P (mem))
      return 0;
  
    if (nonoverlapping_memrefs_p (mem, x))
--- 2139,2148 ----
    if (DIFFERENT_ALIAS_SETS_P (x, mem))
      return 0;
  
!   /* Read-only memory is by definition never modified, and therefore can't
!      conflict with anything.  We don't expect to find read-only set on MEM,
!      but stupid user tricks can produce them, so don't abort.  */
!   if (MEM_READONLY_P (x))
      return 0;
  
    if (nonoverlapping_memrefs_p (mem, x))
*************** canon_true_dependence (rtx mem, enum mac
*** 2249,2262 ****
    if (DIFFERENT_ALIAS_SETS_P (x, mem))
      return 0;
  
!   /* If X is an unchanging read, then it can't possibly conflict with any
!      non-unchanging store.  It may conflict with an unchanging write though,
!      because there may be a single store to this address to initialize it.
!      Just fall through to the code below to resolve the case where we have
!      both an unchanging read and an unchanging write.  This won't handle all
!      cases optimally, but the possible performance loss should be
!      negligible.  */
!   if (RTX_UNCHANGING_P (x) && ! RTX_UNCHANGING_P (mem))
      return 0;
  
    if (nonoverlapping_memrefs_p (x, mem))
--- 2212,2221 ----
    if (DIFFERENT_ALIAS_SETS_P (x, mem))
      return 0;
  
!   /* Read-only memory is by definition never modified, and therefore can't
!      conflict with anything.  We don't expect to find read-only set on MEM,
!      but stupid user tricks can produce them, so don't abort.  */
!   if (MEM_READONLY_P (x))
      return 0;
  
    if (nonoverlapping_memrefs_p (x, mem))
*************** canon_true_dependence (rtx mem, enum mac
*** 2290,2300 ****
  }
  
  /* Returns nonzero if a write to X might alias a previous read from
!    (or, if WRITEP is nonzero, a write to) MEM.  If CONSTP is nonzero,
!    honor the RTX_UNCHANGING_P flags on X and MEM.  */
  
  static int
! write_dependence_p (rtx mem, rtx x, int writep, int constp)
  {
    rtx x_addr, mem_addr;
    rtx fixed_scalar;
--- 2249,2258 ----
  }
  
  /* Returns nonzero if a write to X might alias a previous read from
!    (or, if WRITEP is nonzero, a write to) MEM.  */
  
  static int
! write_dependence_p (rtx mem, rtx x, int writep)
  {
    rtx x_addr, mem_addr;
    rtx fixed_scalar;
*************** write_dependence_p (rtx mem, rtx x, int 
*** 2313,2330 ****
    if (DIFFERENT_ALIAS_SETS_P (x, mem))
      return 0;
  
!   if (constp)
!     {
!       /* Unchanging memory can't conflict with non-unchanging memory.  */
!       if (RTX_UNCHANGING_P (x) != RTX_UNCHANGING_P (mem))
! 	return 0;
! 
!       /* If MEM is an unchanging read, then it can't possibly conflict with
! 	 the store to X, because there is at most one store to MEM, and it
! 	 must have occurred somewhere before MEM.  */
!       if (! writep && RTX_UNCHANGING_P (mem))
! 	return 0;
!     }
  
    if (nonoverlapping_memrefs_p (x, mem))
      return 0;
--- 2271,2279 ----
    if (DIFFERENT_ALIAS_SETS_P (x, mem))
      return 0;
  
!   /* A read from read-only memory can't conflict with read-write memory.  */
!   if (!writep && MEM_READONLY_P (mem))
!     return 0;
  
    if (nonoverlapping_memrefs_p (x, mem))
      return 0;
*************** write_dependence_p (rtx mem, rtx x, int 
*** 2365,2371 ****
  int
  anti_dependence (rtx mem, rtx x)
  {
!   return write_dependence_p (mem, x, /*writep=*/0, /*constp*/1);
  }
  
  /* Output dependence: X is written after store in MEM takes place.  */
--- 2314,2320 ----
  int
  anti_dependence (rtx mem, rtx x)
  {
!   return write_dependence_p (mem, x, /*writep=*/0);
  }
  
  /* Output dependence: X is written after store in MEM takes place.  */
*************** anti_dependence (rtx mem, rtx x)
*** 2373,2388 ****
  int
  output_dependence (rtx mem, rtx x)
  {
!   return write_dependence_p (mem, x, /*writep=*/1, /*constp*/1);
! }
! 
! /* Unchanging anti dependence: Like anti_dependence but ignores
!    the UNCHANGING_RTX_P property on const variable references.  */
! 
! int
! unchanging_anti_dependence (rtx mem, rtx x)
! {
!   return write_dependence_p (mem, x, /*writep=*/0, /*constp*/0);
  }
  
  /* A subroutine of nonlocal_mentioned_p, returns 1 if *LOC mentions
--- 2322,2328 ----
  int
  output_dependence (rtx mem, rtx x)
  {
!   return write_dependence_p (mem, x, /*writep=*/1);
  }
  
  /* A subroutine of nonlocal_mentioned_p, returns 1 if *LOC mentions
*************** nonlocal_mentioned_p_1 (rtx *loc, void *
*** 2401,2407 ****
    switch (GET_CODE (x))
      {
      case SUBREG:
!       if (GET_CODE (SUBREG_REG (x)) == REG)
  	{
  	  /* Global registers are not local.  */
  	  if (REGNO (SUBREG_REG (x)) < FIRST_PSEUDO_REGISTER
--- 2341,2347 ----
    switch (GET_CODE (x))
      {
      case SUBREG:
!       if (REG_P (SUBREG_REG (x)))
  	{
  	  /* Global registers are not local.  */
  	  if (REGNO (SUBREG_REG (x)) < FIRST_PSEUDO_REGISTER
*************** nonlocal_mentioned_p (rtx x)
*** 2491,2497 ****
  {
    if (INSN_P (x))
      {
!       if (GET_CODE (x) == CALL_INSN)
  	{
  	  if (! CONST_OR_PURE_CALL_P (x))
  	    return 1;
--- 2431,2437 ----
  {
    if (INSN_P (x))
      {
!       if (CALL_P (x))
  	{
  	  if (! CONST_OR_PURE_CALL_P (x))
  	    return 1;
*************** nonlocal_referenced_p_1 (rtx *loc, void 
*** 2533,2539 ****
        if (nonlocal_mentioned_p (SET_SRC (x)))
  	return 1;
  
!       if (GET_CODE (SET_DEST (x)) == MEM)
  	return nonlocal_mentioned_p (XEXP (SET_DEST (x), 0));
  
        /* If the destination is anything other than a CC0, PC,
--- 2473,2479 ----
        if (nonlocal_mentioned_p (SET_SRC (x)))
  	return 1;
  
!       if (MEM_P (SET_DEST (x)))
  	return nonlocal_mentioned_p (XEXP (SET_DEST (x), 0));
  
        /* If the destination is anything other than a CC0, PC,
*************** nonlocal_referenced_p_1 (rtx *loc, void 
*** 2542,2550 ****
  	 mentioned in the destination.  */
        if (GET_CODE (SET_DEST (x)) != CC0
  	  && GET_CODE (SET_DEST (x)) != PC
! 	  && GET_CODE (SET_DEST (x)) != REG
  	  && ! (GET_CODE (SET_DEST (x)) == SUBREG
! 		&& GET_CODE (SUBREG_REG (SET_DEST (x))) == REG
  		&& (((GET_MODE_SIZE (GET_MODE (SUBREG_REG (SET_DEST (x))))
  		      + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD)
  		    == ((GET_MODE_SIZE (GET_MODE (SET_DEST (x)))
--- 2482,2490 ----
  	 mentioned in the destination.  */
        if (GET_CODE (SET_DEST (x)) != CC0
  	  && GET_CODE (SET_DEST (x)) != PC
! 	  && !REG_P (SET_DEST (x))
  	  && ! (GET_CODE (SET_DEST (x)) == SUBREG
! 		&& REG_P (SUBREG_REG (SET_DEST (x)))
  		&& (((GET_MODE_SIZE (GET_MODE (SUBREG_REG (SET_DEST (x))))
  		      + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD)
  		    == ((GET_MODE_SIZE (GET_MODE (SET_DEST (x)))
*************** nonlocal_referenced_p_1 (rtx *loc, void 
*** 2553,2559 ****
        return 0;
  
      case CLOBBER:
!       if (GET_CODE (XEXP (x, 0)) == MEM)
  	return nonlocal_mentioned_p (XEXP (XEXP (x, 0), 0));
        return 0;
  
--- 2493,2499 ----
        return 0;
  
      case CLOBBER:
!       if (MEM_P (XEXP (x, 0)))
  	return nonlocal_mentioned_p (XEXP (XEXP (x, 0), 0));
        return 0;
  
*************** nonlocal_referenced_p (rtx x)
*** 2585,2591 ****
  {
    if (INSN_P (x))
      {
!       if (GET_CODE (x) == CALL_INSN)
  	{
  	  if (! CONST_OR_PURE_CALL_P (x))
  	    return 1;
--- 2525,2531 ----
  {
    if (INSN_P (x))
      {
!       if (CALL_P (x))
  	{
  	  if (! CONST_OR_PURE_CALL_P (x))
  	    return 1;
*************** nonlocal_set_p (rtx x)
*** 2661,2667 ****
  {
    if (INSN_P (x))
      {
!       if (GET_CODE (x) == CALL_INSN)
  	{
  	  if (! CONST_OR_PURE_CALL_P (x))
  	    return 1;
--- 2601,2607 ----
  {
    if (INSN_P (x))
      {
!       if (CALL_P (x))
  	{
  	  if (! CONST_OR_PURE_CALL_P (x))
  	    return 1;
*************** mark_constant_function (void)
*** 2688,2694 ****
        || DECL_IS_PURE (current_function_decl)
        || TREE_THIS_VOLATILE (current_function_decl)
        || current_function_has_nonlocal_goto
!       || !(*targetm.binds_local_p) (current_function_decl))
      return;
  
    /* A loop might not return which counts as a side effect.  */
--- 2628,2634 ----
        || DECL_IS_PURE (current_function_decl)
        || TREE_THIS_VOLATILE (current_function_decl)
        || current_function_has_nonlocal_goto
!       || !targetm.binds_local_p (current_function_decl))
      return;
  
    /* A loop might not return which counts as a side effect.  */
*************** init_alias_once (void)
*** 2738,2746 ****
  {
    int i;
  
- #ifndef OUTGOING_REGNO
- #define OUTGOING_REGNO(N) N
- #endif
    for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
      /* Check whether this register can hold an incoming pointer
         argument.  FUNCTION_ARG_REGNO_P tests outgoing register
--- 2678,2683 ----
*************** static bool memory_modified;
*** 2768,2774 ****
  static void
  memory_modified_1 (rtx x, rtx pat ATTRIBUTE_UNUSED, void *data)
  {
!   if (GET_CODE (x) == MEM)
      {
        if (anti_dependence (x, (rtx)data) || output_dependence (x, (rtx)data))
  	memory_modified = true;
--- 2705,2711 ----
  static void
  memory_modified_1 (rtx x, rtx pat ATTRIBUTE_UNUSED, void *data)
  {
!   if (MEM_P (x))
      {
        if (anti_dependence (x, (rtx)data) || output_dependence (x, (rtx)data))
  	memory_modified = true;
*************** memory_modified_1 (rtx x, rtx pat ATTRIB
*** 2777,2783 ****
  
  
  /* Return true when INSN possibly modify memory contents of MEM
!    (ie address can be modified).  */
  bool
  memory_modified_in_insn_p (rtx mem, rtx insn)
  {
--- 2714,2720 ----
  
  
  /* Return true when INSN possibly modify memory contents of MEM
!    (i.e. address can be modified).  */
  bool
  memory_modified_in_insn_p (rtx mem, rtx insn)
  {
*************** init_alias_analysis (void)
*** 2827,2837 ****
  
    new_reg_base_value = xmalloc (maxreg * sizeof (rtx));
    reg_seen = xmalloc (maxreg);
-   if (! reload_completed && flag_old_unroll_loops)
-     {
-       alias_invariant = ggc_calloc (maxreg, sizeof (rtx));
-       alias_invariant_size = maxreg;
-     }
  
    /* The basic idea is that each pass through this loop will use the
       "constant" information from the previous pass to propagate alias
--- 2764,2769 ----
*************** init_alias_analysis (void)
*** 2914,2920 ****
  	      set = single_set (insn);
  
  	      if (set != 0
! 		  && GET_CODE (SET_DEST (set)) == REG
  		  && REGNO (SET_DEST (set)) >= FIRST_PSEUDO_REGISTER)
  		{
  		  unsigned int regno = REGNO (SET_DEST (set));
--- 2846,2852 ----
  	      set = single_set (insn);
  
  	      if (set != 0
! 		  && REG_P (SET_DEST (set))
  		  && REGNO (SET_DEST (set)) >= FIRST_PSEUDO_REGISTER)
  		{
  		  unsigned int regno = REGNO (SET_DEST (set));
*************** init_alias_analysis (void)
*** 2936,2942 ****
  		    }
  		  else if (REG_N_SETS (regno) == 1
  			   && GET_CODE (src) == PLUS
! 			   && GET_CODE (XEXP (src, 0)) == REG
  			   && (t = get_reg_known_value (REGNO (XEXP (src, 0))))
  			   && GET_CODE (XEXP (src, 1)) == CONST_INT)
  		    {
--- 2868,2874 ----
  		    }
  		  else if (REG_N_SETS (regno) == 1
  			   && GET_CODE (src) == PLUS
! 			   && REG_P (XEXP (src, 0))
  			   && (t = get_reg_known_value (REGNO (XEXP (src, 0))))
  			   && GET_CODE (XEXP (src, 1)) == CONST_INT)
  		    {
*************** init_alias_analysis (void)
*** 2952,2965 ****
  		    }
  		}
  	    }
! 	  else if (GET_CODE (insn) == NOTE
  		   && NOTE_LINE_NUMBER (insn) == NOTE_INSN_FUNCTION_BEG)
  	    copying_arguments = false;
  	}
  
        /* Now propagate values from new_reg_base_value to reg_base_value.  */
!       if (maxreg != (unsigned int) max_reg_num())
! 	abort ();
        for (ui = 0; ui < maxreg; ui++)
  	{
  	  if (new_reg_base_value[ui]
--- 2884,2897 ----
  		    }
  		}
  	    }
! 	  else if (NOTE_P (insn)
  		   && NOTE_LINE_NUMBER (insn) == NOTE_INSN_FUNCTION_BEG)
  	    copying_arguments = false;
  	}
  
        /* Now propagate values from new_reg_base_value to reg_base_value.  */
!       gcc_assert (maxreg == (unsigned int) max_reg_num());
!       
        for (ui = 0; ui < maxreg; ui++)
  	{
  	  if (new_reg_base_value[ui]
*************** init_alias_analysis (void)
*** 2997,3003 ****
        for (ui = 0; ui < maxreg; ui++)
  	{
  	  rtx base = VARRAY_RTX (reg_base_value, ui);
! 	  if (base && GET_CODE (base) == REG)
  	    {
  	      unsigned int base_regno = REGNO (base);
  	      if (base_regno == ui)		/* register set from itself */
--- 2929,2935 ----
        for (ui = 0; ui < maxreg; ui++)
  	{
  	  rtx base = VARRAY_RTX (reg_base_value, ui);
! 	  if (base && REG_P (base))
  	    {
  	      unsigned int base_regno = REGNO (base);
  	      if (base_regno == ui)		/* register set from itself */
*************** void
*** 3023,3034 ****
--- 2955,2968 ----
  end_alias_analysis (void)
  {
    old_reg_base_value = reg_base_value;
+   ggc_free (reg_known_value);
    reg_known_value = 0;
    reg_known_value_size = 0;
    free (reg_known_equiv_p);
    reg_known_equiv_p = 0;
    if (alias_invariant)
      {
+       ggc_free (alias_invariant);
        alias_invariant = 0;
        alias_invariant_size = 0;
      }
diff -Nrcpad gcc-3.4.3/gcc/alias.h gcc-4.0.0/gcc/alias.h
*** gcc-3.4.3/gcc/alias.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/alias.h	Sat Dec  4 00:20:30 2004
***************
*** 0 ****
--- 1,30 ----
+ /* Exported functions from alias.c
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GCC.
+ 
+ GCC is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2, or (at your option) any later
+ version.
+ 
+ GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING.  If not, write to the Free
+ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+ 02111-1307, USA.  */
+ 
+ #ifndef GCC_ALIAS_H
+ #define GCC_ALIAS_H
+ 
+ extern HOST_WIDE_INT new_alias_set (void);
+ extern HOST_WIDE_INT get_varargs_alias_set (void);
+ extern HOST_WIDE_INT get_frame_alias_set (void);
+ extern void record_base_value (unsigned int, rtx, int);
+ extern bool component_uses_parent_alias_set (tree);
+ 
+ #endif /* GCC_ALIAS_H */
diff -Nrcpad gcc-3.4.3/gcc/alloc-pool.c gcc-4.0.0/gcc/alloc-pool.c
*** gcc-3.4.3/gcc/alloc-pool.c	Thu Feb 12 23:28:31 2004
--- gcc-4.0.0/gcc/alloc-pool.c	Mon Aug 30 19:13:02 2004
*************** Software Foundation, 59 Temple Place - S
*** 25,40 ****
  #include "alloc-pool.h"
  #include "hashtab.h"
  
- /* Redefine abort to report an internal error w/o coredump, and
-    reporting the location of the error in the source file.  This logic
-    is duplicated in rtl.h and tree.h because every file that needs the
-    special abort includes one or both.  toplev.h gets too few files,
-    system.h gets too many.  */
- 
- extern void fancy_abort (const char *, int, const char *)
-     ATTRIBUTE_NORETURN;
- #define abort() fancy_abort (__FILE__, __LINE__, __FUNCTION__)
- 
  #define align_eight(x) (((x+7) >> 3) << 3)
  
  /* The internal allocation object.  */
--- 25,30 ----
*************** static ALLOC_POOL_ID_TYPE last_id;
*** 75,81 ****
  
  #ifdef GATHER_STATISTICS
  
! /* Store infromation about each particular alloc_pool.  */
  struct alloc_pool_descriptor
  {
    const char *name;
--- 65,71 ----
  
  #ifdef GATHER_STATISTICS
  
! /* Store information about each particular alloc_pool.  */
  struct alloc_pool_descriptor
  {
    const char *name;
*************** create_alloc_pool (const char *name, siz
*** 135,142 ****
    struct alloc_pool_descriptor *desc;
  #endif
  
!   if (!name)
!     abort ();
  
    /* Make size large enough to store the list header.  */
    if (size < sizeof (alloc_pool_list))
--- 125,131 ----
    struct alloc_pool_descriptor *desc;
  #endif
  
!   gcc_assert (name);
  
    /* Make size large enough to store the list header.  */
    if (size < sizeof (alloc_pool_list))
*************** create_alloc_pool (const char *name, siz
*** 151,158 ****
  #endif
  
    /* Um, we can't really allocate 0 elements per block.  */
!   if (num == 0)
!     abort ();
  
    /* Find the size of the pool structure, and the name.  */
    pool_size = sizeof (struct alloc_pool_def);
--- 140,146 ----
  #endif
  
    /* Um, we can't really allocate 0 elements per block.  */
!   gcc_assert (num);
  
    /* Find the size of the pool structure, and the name.  */
    pool_size = sizeof (struct alloc_pool_def);
*************** free_alloc_pool (alloc_pool pool)
*** 201,210 ****
    struct alloc_pool_descriptor *desc = alloc_pool_descriptor (pool->name);
  #endif
  
! #ifdef ENABLE_CHECKING
!   if (!pool)
!     abort ();
! #endif
  
    /* Free each block allocated to the pool.  */
    for (block = pool->block_list; block != NULL; block = next_block)
--- 189,195 ----
    struct alloc_pool_descriptor *desc = alloc_pool_descriptor (pool->name);
  #endif
  
!   gcc_assert (pool);
  
    /* Free each block allocated to the pool.  */
    for (block = pool->block_list; block != NULL; block = next_block)
*************** free_alloc_pool (alloc_pool pool)
*** 215,224 ****
        desc->current -= pool->block_size;
  #endif
      }
-   /* Lastly, free the pool.  */
  #ifdef ENABLE_CHECKING
    memset (pool, 0xaf, sizeof (*pool));
  #endif
    free (pool);
  }
  
--- 200,209 ----
        desc->current -= pool->block_size;
  #endif
      }
  #ifdef ENABLE_CHECKING
    memset (pool, 0xaf, sizeof (*pool));
  #endif
+   /* Lastly, free the pool.  */
    free (pool);
  }
  
*************** pool_alloc (alloc_pool pool)
*** 234,243 ****
    desc->allocated+=pool->elt_size;
  #endif
  
! #ifdef ENABLE_CHECKING
!   if (!pool)
!     abort ();
! #endif
  
    /* If there are no more free elements, make some more!.  */
    if (!pool->free_list)
--- 219,225 ----
    desc->allocated+=pool->elt_size;
  #endif
  
!   gcc_assert (pool);
  
    /* If there are no more free elements, make some more!.  */
    if (!pool->free_list)
*************** pool_free (alloc_pool pool, void *ptr)
*** 296,317 ****
  {
    alloc_pool_list header;
  
! #ifdef ENABLE_CHECKING
!   if (!ptr)
!     abort ();
  
    memset (ptr, 0xaf, pool->elt_size - offsetof (allocation_object, u.data));
  
    /* Check whether the PTR was allocated from POOL.  */
!   if (pool->id != ALLOCATION_OBJECT_PTR_FROM_USER_PTR (ptr)->id)
!     abort ();
  
    /* Mark the element to be free.  */
    ALLOCATION_OBJECT_PTR_FROM_USER_PTR (ptr)->id = 0;
  #else
    /* Check if we free more than we allocated, which is Bad (TM).  */
!   if (pool->elts_free + 1 > pool->elts_allocated)
!     abort ();
  #endif
  
    header = (alloc_pool_list) ptr;
--- 278,296 ----
  {
    alloc_pool_list header;
  
!   gcc_assert (ptr);
  
+ #ifdef ENABLE_CHECKING
    memset (ptr, 0xaf, pool->elt_size - offsetof (allocation_object, u.data));
  
    /* Check whether the PTR was allocated from POOL.  */
!   gcc_assert (pool->id == ALLOCATION_OBJECT_PTR_FROM_USER_PTR (ptr)->id);
  
    /* Mark the element to be free.  */
    ALLOCATION_OBJECT_PTR_FROM_USER_PTR (ptr)->id = 0;
  #else
    /* Check if we free more than we allocated, which is Bad (TM).  */
!   gcc_assert (pool->elts_free < pool->elts_allocated);
  #endif
  
    header = (alloc_pool_list) ptr;
diff -Nrcpad gcc-3.4.3/gcc/attribs.c gcc-4.0.0/gcc/attribs.c
*** gcc-3.4.3/gcc/attribs.c	Wed Aug 20 12:24:18 2003
--- gcc-4.0.0/gcc/attribs.c	Thu Dec  9 22:55:40 2004
***************
*** 1,6 ****
  /* Functions dealing with attribute handling, used by most front ends.
     Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
!    2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
--- 1,6 ----
  /* Functions dealing with attribute handling, used by most front ends.
     Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
!    2002, 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
*************** Software Foundation, 59 Temple Place - S
*** 29,35 ****
  #include "output.h"
  #include "rtl.h"
  #include "ggc.h"
- #include "expr.h"
  #include "tm_p.h"
  #include "cpplib.h"
  #include "target.h"
--- 29,34 ----
*************** init_attributes (void)
*** 78,102 ****
  	  /* The name must not begin and end with __.  */
  	  const char *name = attribute_tables[i][j].name;
  	  int len = strlen (name);
! 	  if (name[0] == '_' && name[1] == '_'
! 	      && name[len - 1] == '_' && name[len - 2] == '_')
! 	    abort ();
  	  /* The minimum and maximum lengths must be consistent.  */
! 	  if (attribute_tables[i][j].min_length < 0)
! 	    abort ();
! 	  if (attribute_tables[i][j].max_length != -1
! 	      && (attribute_tables[i][j].max_length
! 		  < attribute_tables[i][j].min_length))
! 	    abort ();
  	  /* An attribute cannot require both a DECL and a TYPE.  */
! 	  if (attribute_tables[i][j].decl_required
! 	      && attribute_tables[i][j].type_required)
! 	    abort ();
  	  /* If an attribute requires a function type, in particular
  	     it requires a type.  */
! 	  if (attribute_tables[i][j].function_type_required
! 	      && !attribute_tables[i][j].type_required)
! 	    abort ();
  	}
      }
  
--- 77,101 ----
  	  /* The name must not begin and end with __.  */
  	  const char *name = attribute_tables[i][j].name;
  	  int len = strlen (name);
! 	  
! 	  gcc_assert (!(name[0] == '_' && name[1] == '_'
! 			&& name[len - 1] == '_' && name[len - 2] == '_'));
! 	  
  	  /* The minimum and maximum lengths must be consistent.  */
! 	  gcc_assert (attribute_tables[i][j].min_length >= 0);
! 	  
! 	  gcc_assert (attribute_tables[i][j].max_length == -1
! 		      || (attribute_tables[i][j].max_length
! 			  >= attribute_tables[i][j].min_length));
! 	  
  	  /* An attribute cannot require both a DECL and a TYPE.  */
! 	  gcc_assert (!attribute_tables[i][j].decl_required
! 		      || !attribute_tables[i][j].type_required);
! 	  
  	  /* If an attribute requires a function type, in particular
  	     it requires a type.  */
! 	  gcc_assert (!attribute_tables[i][j].function_type_required
! 		      || attribute_tables[i][j].type_required);
  	}
      }
  
*************** init_attributes (void)
*** 106,114 ****
        int j, k;
        for (j = 0; attribute_tables[i][j].name != NULL; j++)
  	for (k = j + 1; attribute_tables[i][k].name != NULL; k++)
! 	  if (!strcmp (attribute_tables[i][j].name,
! 		       attribute_tables[i][k].name))
! 	    abort ();
      }
    /* Check that no name occurs in more than one table.  */
    for (i = 0; i < ARRAY_SIZE (attribute_tables); i++)
--- 105,112 ----
        int j, k;
        for (j = 0; attribute_tables[i][j].name != NULL; j++)
  	for (k = j + 1; attribute_tables[i][k].name != NULL; k++)
! 	  gcc_assert (strcmp (attribute_tables[i][j].name,
! 			      attribute_tables[i][k].name));
      }
    /* Check that no name occurs in more than one table.  */
    for (i = 0; i < ARRAY_SIZE (attribute_tables); i++)
*************** init_attributes (void)
*** 118,126 ****
        for (j = i + 1; j < ARRAY_SIZE (attribute_tables); j++)
  	for (k = 0; attribute_tables[i][k].name != NULL; k++)
  	  for (l = 0; attribute_tables[j][l].name != NULL; l++)
! 	    if (!strcmp (attribute_tables[i][k].name,
! 			 attribute_tables[j][l].name))
! 	      abort ();
      }
  #endif
  
--- 116,123 ----
        for (j = i + 1; j < ARRAY_SIZE (attribute_tables); j++)
  	for (k = 0; attribute_tables[i][k].name != NULL; k++)
  	  for (l = 0; attribute_tables[j][l].name != NULL; l++)
! 	    gcc_assert (strcmp (attribute_tables[i][k].name,
! 				attribute_tables[j][l].name));
      }
  #endif
  
*************** decl_attributes (tree *node, tree attrib
*** 145,151 ****
    if (!attributes_initialized)
      init_attributes ();
  
!   (*targetm.insert_attributes) (*node, &attributes);
  
    for (a = attributes; a; a = TREE_CHAIN (a))
      {
--- 142,148 ----
    if (!attributes_initialized)
      init_attributes ();
  
!   targetm.insert_attributes (*node, &attributes);
  
    for (a = attributes; a; a = TREE_CHAIN (a))
      {
*************** decl_attributes (tree *node, tree attrib
*** 175,181 ****
  
        if (spec == NULL)
  	{
! 	  warning ("`%s' attribute directive ignored",
  		   IDENTIFIER_POINTER (name));
  	  continue;
  	}
--- 172,178 ----
  
        if (spec == NULL)
  	{
! 	  warning ("%qs attribute directive ignored",
  		   IDENTIFIER_POINTER (name));
  	  continue;
  	}
*************** decl_attributes (tree *node, tree attrib
*** 183,189 ****
  	       || (spec->max_length >= 0
  		   && list_length (args) > spec->max_length))
  	{
! 	  error ("wrong number of arguments specified for `%s' attribute",
  		 IDENTIFIER_POINTER (name));
  	  continue;
  	}
--- 180,186 ----
  	       || (spec->max_length >= 0
  		   && list_length (args) > spec->max_length))
  	{
! 	  error ("wrong number of arguments specified for %qs attribute",
  		 IDENTIFIER_POINTER (name));
  	  continue;
  	}
*************** decl_attributes (tree *node, tree attrib
*** 200,206 ****
  	    }
  	  else
  	    {
! 	      warning ("`%s' attribute does not apply to types",
  		       IDENTIFIER_POINTER (name));
  	      continue;
  	    }
--- 197,203 ----
  	    }
  	  else
  	    {
! 	      warning ("%qs attribute does not apply to types",
  		       IDENTIFIER_POINTER (name));
  	      continue;
  	    }
*************** decl_attributes (tree *node, tree attrib
*** 246,252 ****
  	  if (TREE_CODE (*anode) != FUNCTION_TYPE
  	      && TREE_CODE (*anode) != METHOD_TYPE)
  	    {
! 	      warning ("`%s' attribute only applies to function types",
  		       IDENTIFIER_POINTER (name));
  	      continue;
  	    }
--- 243,249 ----
  	  if (TREE_CODE (*anode) != FUNCTION_TYPE
  	      && TREE_CODE (*anode) != METHOD_TYPE)
  	    {
! 	      warning ("%qs attribute only applies to function types",
  		       IDENTIFIER_POINTER (name));
  	      continue;
  	    }
*************** decl_attributes (tree *node, tree attrib
*** 262,274 ****
  	  && (TREE_CODE (*node) == VAR_DECL
  	      || TREE_CODE (*node) == PARM_DECL
  	      || TREE_CODE (*node) == RESULT_DECL))
! 	{
! 	  /* Force a recalculation of mode and size.  */
! 	  DECL_MODE (*node) = VOIDmode;
! 	  DECL_SIZE (*node) = 0;
! 
! 	  layout_decl (*node, 0);
! 	}
  
        if (!no_add_attrs)
  	{
--- 259,265 ----
  	  && (TREE_CODE (*node) == VAR_DECL
  	      || TREE_CODE (*node) == PARM_DECL
  	      || TREE_CODE (*node) == RESULT_DECL))
! 	relayout_decl (*node);
  
        if (!no_add_attrs)
  	{
*************** decl_attributes (tree *node, tree attrib
*** 294,300 ****
  	      if (DECL_P (*anode))
  		DECL_ATTRIBUTES (*anode) = tree_cons (name, args, old_attrs);
  	      else if (flags & (int) ATTR_FLAG_TYPE_IN_PLACE)
! 		TYPE_ATTRIBUTES (*anode) = tree_cons (name, args, old_attrs);
  	      else
  		*anode = build_type_attribute_variant (*anode,
  						       tree_cons (name, args,
--- 285,310 ----
  	      if (DECL_P (*anode))
  		DECL_ATTRIBUTES (*anode) = tree_cons (name, args, old_attrs);
  	      else if (flags & (int) ATTR_FLAG_TYPE_IN_PLACE)
! 		{
! 		  TYPE_ATTRIBUTES (*anode) = tree_cons (name, args, old_attrs);
! 		  /* If this is the main variant, also push the attributes
! 		     out to the other variants.  */
! 		  if (*anode == TYPE_MAIN_VARIANT (*anode))
! 		    {
! 		      tree variant;
! 		      for (variant = *anode; variant;
! 			   variant = TYPE_NEXT_VARIANT (variant))
! 			{
! 			  if (TYPE_ATTRIBUTES (variant) == old_attrs)
! 			    TYPE_ATTRIBUTES (variant)
! 			      = TYPE_ATTRIBUTES (*anode);
! 			  else if (!lookup_attribute
! 				   (spec->name, TYPE_ATTRIBUTES (variant)))
! 			    TYPE_ATTRIBUTES (variant) = tree_cons
! 			      (name, args, TYPE_ATTRIBUTES (variant));
! 			}
! 		    }
! 		}
  	      else
  		*anode = build_type_attribute_variant (*anode,
  						       tree_cons (name, args,
*************** decl_attributes (tree *node, tree attrib
*** 309,422 ****
  	  fn_ptr_tmp = build_pointer_type (fn_ptr_tmp);
  	  if (DECL_P (*node))
  	    TREE_TYPE (*node) = fn_ptr_tmp;
- 	  else if (TREE_CODE (*node) == POINTER_TYPE)
- 	    *node = fn_ptr_tmp;
- 	  else
- 	    abort ();
- 	}
-     }
- 
-   return returned_attrs;
- }
- 
- /* Split SPECS_ATTRS, a list of declspecs and prefix attributes, into two
-    lists.  SPECS_ATTRS may also be just a typespec (eg: RECORD_TYPE).
- 
-    The head of the declspec list is stored in DECLSPECS.
-    The head of the attribute list is stored in PREFIX_ATTRIBUTES.
- 
-    Note that attributes in SPECS_ATTRS are stored in the TREE_PURPOSE of
-    the list elements.  We drop the containing TREE_LIST nodes and link the
-    resulting attributes together the way decl_attributes expects them.  */
- 
- void
- split_specs_attrs (tree specs_attrs, tree *declspecs, tree *prefix_attributes)
- {
-   tree t, s, a, next, specs, attrs;
- 
-   /* This can happen after an __extension__ in pedantic mode.  */
-   if (specs_attrs != NULL_TREE
-       && TREE_CODE (specs_attrs) == INTEGER_CST)
-     {
-       *declspecs = NULL_TREE;
-       *prefix_attributes = NULL_TREE;
-       return;
-     }
- 
-   /* This can happen in c++ (eg: decl: typespec initdecls ';').  */
-   if (specs_attrs != NULL_TREE
-       && TREE_CODE (specs_attrs) != TREE_LIST)
-     {
-       *declspecs = specs_attrs;
-       *prefix_attributes = NULL_TREE;
-       return;
-     }
- 
-   /* Remember to keep the lists in the same order, element-wise.  */
- 
-   specs = s = NULL_TREE;
-   attrs = a = NULL_TREE;
-   for (t = specs_attrs; t; t = next)
-     {
-       next = TREE_CHAIN (t);
-       /* Declspecs have a non-NULL TREE_VALUE.  */
-       if (TREE_VALUE (t) != NULL_TREE)
- 	{
- 	  if (specs == NULL_TREE)
- 	    specs = s = t;
- 	  else
- 	    {
- 	      TREE_CHAIN (s) = t;
- 	      s = t;
- 	    }
- 	}
-       /* The TREE_PURPOSE may also be empty in the case of
- 	 __attribute__(()).  */
-       else if (TREE_PURPOSE (t) != NULL_TREE)
- 	{
- 	  if (attrs == NULL_TREE)
- 	    attrs = a = TREE_PURPOSE (t);
  	  else
  	    {
! 	      TREE_CHAIN (a) = TREE_PURPOSE (t);
! 	      a = TREE_PURPOSE (t);
  	    }
- 	  /* More attrs can be linked here, move A to the end.  */
- 	  while (TREE_CHAIN (a) != NULL_TREE)
- 	    a = TREE_CHAIN (a);
  	}
      }
  
!   /* Terminate the lists.  */
!   if (s != NULL_TREE)
!     TREE_CHAIN (s) = NULL_TREE;
!   if (a != NULL_TREE)
!     TREE_CHAIN (a) = NULL_TREE;
! 
!   /* All done.  */
!   *declspecs = specs;
!   *prefix_attributes = attrs;
! }
! 
! /* Strip attributes from SPECS_ATTRS, a list of declspecs and attributes.
!    This function is used by the parser when a rule will accept attributes
!    in a particular position, but we don't want to support that just yet.
! 
!    A warning is issued for every ignored attribute.  */
! 
! tree
! strip_attrs (tree specs_attrs)
! {
!   tree specs, attrs;
! 
!   split_specs_attrs (specs_attrs, &specs, &attrs);
! 
!   while (attrs)
!     {
!       warning ("`%s' attribute ignored",
! 	       IDENTIFIER_POINTER (TREE_PURPOSE (attrs)));
!       attrs = TREE_CHAIN (attrs);
!     }
! 
!   return specs;
  }
--- 319,331 ----
  	  fn_ptr_tmp = build_pointer_type (fn_ptr_tmp);
  	  if (DECL_P (*node))
  	    TREE_TYPE (*node) = fn_ptr_tmp;
  	  else
  	    {
! 	      gcc_assert (TREE_CODE (*node) == POINTER_TYPE);
! 	      *node = fn_ptr_tmp;
  	    }
  	}
      }
  
!   return returned_attrs;
  }
diff -Nrcpad gcc-3.4.3/gcc/basic-block.h gcc-4.0.0/gcc/basic-block.h
*** gcc-3.4.3/gcc/basic-block.h	Mon Jul 26 14:42:10 2004
--- gcc-4.0.0/gcc/basic-block.h	Tue Feb 15 07:18:22 2005
***************
*** 1,5 ****
  /* Define control and data flow tables, and regsets.
!    Copyright (C) 1987, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
     Free Software Foundation, Inc.
  
  This file is part of GCC.
--- 1,5 ----
  /* Define control and data flow tables, and regsets.
!    Copyright (C) 1987, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
     Free Software Foundation, Inc.
  
  This file is part of GCC.
*************** Software Foundation, 59 Temple Place - S
*** 27,40 ****
  #include "varray.h"
  #include "partition.h"
  #include "hard-reg-set.h"
  
  /* Head of register set linked list.  */
  typedef bitmap_head regset_head;
  /* A pointer to a regset_head.  */
  typedef bitmap regset;
  
  /* Initialize a new regset.  */
! #define INIT_REG_SET(HEAD) bitmap_initialize (HEAD, 1)
  
  /* Clear a register set by freeing up the linked list.  */
  #define CLEAR_REG_SET(HEAD) bitmap_clear (HEAD)
--- 27,50 ----
  #include "varray.h"
  #include "partition.h"
  #include "hard-reg-set.h"
+ #include "predict.h"
+ #include "vec.h"
+ #include "errors.h"
  
  /* Head of register set linked list.  */
  typedef bitmap_head regset_head;
+ 
  /* A pointer to a regset_head.  */
  typedef bitmap regset;
  
+ /* Allocate a register set with oballoc.  */
+ #define ALLOC_REG_SET(OBSTACK) BITMAP_ALLOC (OBSTACK)
+ 
+ /* Do any cleanup needed on a regset when it is no longer used.  */
+ #define FREE_REG_SET(REGSET) BITMAP_FREE (REGSET)
+ 
  /* Initialize a new regset.  */
! #define INIT_REG_SET(HEAD) bitmap_initialize (HEAD, &reg_obstack)
  
  /* Clear a register set by freeing up the linked list.  */
  #define CLEAR_REG_SET(HEAD) bitmap_clear (HEAD)
*************** typedef bitmap regset;
*** 46,66 ****
  #define REG_SET_EQUAL_P(A, B) bitmap_equal_p (A, B)
  
  /* `and' a register set with a second register set.  */
! #define AND_REG_SET(TO, FROM) bitmap_operation (TO, TO, FROM, BITMAP_AND)
  
  /* `and' the complement of a register set with a register set.  */
! #define AND_COMPL_REG_SET(TO, FROM) \
!   bitmap_operation (TO, TO, FROM, BITMAP_AND_COMPL)
  
  /* Inclusive or a register set with a second register set.  */
! #define IOR_REG_SET(TO, FROM) bitmap_operation (TO, TO, FROM, BITMAP_IOR)
  
  /* Exclusive or a register set with a second register set.  */
! #define XOR_REG_SET(TO, FROM) bitmap_operation (TO, TO, FROM, BITMAP_XOR)
  
  /* Or into TO the register set FROM1 `and'ed with the complement of FROM2.  */
  #define IOR_AND_COMPL_REG_SET(TO, FROM1, FROM2) \
!   bitmap_ior_and_compl (TO, FROM1, FROM2)
  
  /* Clear a single register in a register set.  */
  #define CLEAR_REGNO_REG_SET(HEAD, REG) bitmap_clear_bit (HEAD, REG)
--- 56,75 ----
  #define REG_SET_EQUAL_P(A, B) bitmap_equal_p (A, B)
  
  /* `and' a register set with a second register set.  */
! #define AND_REG_SET(TO, FROM) bitmap_and_into (TO, FROM)
  
  /* `and' the complement of a register set with a register set.  */
! #define AND_COMPL_REG_SET(TO, FROM) bitmap_and_compl_into (TO, FROM)
  
  /* Inclusive or a register set with a second register set.  */
! #define IOR_REG_SET(TO, FROM) bitmap_ior_into (TO, FROM)
  
  /* Exclusive or a register set with a second register set.  */
! #define XOR_REG_SET(TO, FROM) bitmap_xor_into (TO, FROM)
  
  /* Or into TO the register set FROM1 `and'ed with the complement of FROM2.  */
  #define IOR_AND_COMPL_REG_SET(TO, FROM1, FROM2) \
!   bitmap_ior_and_compl_into (TO, FROM1, FROM2)
  
  /* Clear a single register in a register set.  */
  #define CLEAR_REGNO_REG_SET(HEAD, REG) bitmap_clear_bit (HEAD, REG)
*************** do {									\
*** 79,117 ****
    reg_set_to_hard_reg_set (&TO, FROM);					\
  } while (0)
  
  /* Loop over all registers in REGSET, starting with MIN, setting REGNUM to the
     register number and executing CODE for all registers that are set.  */
! #define EXECUTE_IF_SET_IN_REG_SET(REGSET, MIN, REGNUM, CODE)		\
!   EXECUTE_IF_SET_IN_BITMAP (REGSET, MIN, REGNUM, CODE)
  
  /* Loop over all registers in REGSET1 and REGSET2, starting with MIN, setting
     REGNUM to the register number and executing CODE for all registers that are
     set in the first regset and not set in the second.  */
! #define EXECUTE_IF_AND_COMPL_IN_REG_SET(REGSET1, REGSET2, MIN, REGNUM, CODE) \
!   EXECUTE_IF_AND_COMPL_IN_BITMAP (REGSET1, REGSET2, MIN, REGNUM, CODE)
  
  /* Loop over all registers in REGSET1 and REGSET2, starting with MIN, setting
     REGNUM to the register number and executing CODE for all registers that are
     set in both regsets.  */
! #define EXECUTE_IF_AND_IN_REG_SET(REGSET1, REGSET2, MIN, REGNUM, CODE) \
!   EXECUTE_IF_AND_IN_BITMAP (REGSET1, REGSET2, MIN, REGNUM, CODE)
! 
! /* Allocate a register set with oballoc.  */
! #define OBSTACK_ALLOC_REG_SET(OBSTACK) BITMAP_OBSTACK_ALLOC (OBSTACK)
! 
! /* Initialize a register set.  Returns the new register set.  */
! #define INITIALIZE_REG_SET(HEAD) bitmap_initialize (&HEAD, 1)
! 
! /* Do any cleanup needed on a regset when it is no longer used.  */
! #define FREE_REG_SET(REGSET) BITMAP_FREE(REGSET)
! 
! /* Do any one-time initializations needed for regsets.  */
! #define INIT_ONCE_REG_SET() BITMAP_INIT_ONCE ()
! 
! /* Grow any tables needed when the number of registers is calculated
!    or extended.  For the linked list allocation, nothing needs to
!    be done, other than zero the statistics on the first allocation.  */
! #define MAX_REGNO_REG_SET(NUM_REGS, NEW_P, RENUMBER_P)
  
  /* Type we use to hold basic block counters.  Should be at least
     64bit.  Although a counter cannot be negative, we use a signed
--- 88,111 ----
    reg_set_to_hard_reg_set (&TO, FROM);					\
  } while (0)
  
+ typedef bitmap_iterator reg_set_iterator;
+ 
  /* Loop over all registers in REGSET, starting with MIN, setting REGNUM to the
     register number and executing CODE for all registers that are set.  */
! #define EXECUTE_IF_SET_IN_REG_SET(REGSET, MIN, REGNUM, RSI)	\
!   EXECUTE_IF_SET_IN_BITMAP (REGSET, MIN, REGNUM, RSI)
  
  /* Loop over all registers in REGSET1 and REGSET2, starting with MIN, setting
     REGNUM to the register number and executing CODE for all registers that are
     set in the first regset and not set in the second.  */
! #define EXECUTE_IF_AND_COMPL_IN_REG_SET(REGSET1, REGSET2, MIN, REGNUM, RSI) \
!   EXECUTE_IF_AND_COMPL_IN_BITMAP (REGSET1, REGSET2, MIN, REGNUM, RSI)
  
  /* Loop over all registers in REGSET1 and REGSET2, starting with MIN, setting
     REGNUM to the register number and executing CODE for all registers that are
     set in both regsets.  */
! #define EXECUTE_IF_AND_IN_REG_SET(REGSET1, REGSET2, MIN, REGNUM, RSI) \
!   EXECUTE_IF_AND_IN_BITMAP (REGSET1, REGSET2, MIN, REGNUM, RSI)	\
  
  /* Type we use to hold basic block counters.  Should be at least
     64bit.  Although a counter cannot be negative, we use a signed
*************** do {									\
*** 121,144 ****
  typedef HOST_WIDEST_INT gcov_type;
  
  /* Control flow edge information.  */
! typedef struct edge_def {
!   /* Links through the predecessor and successor lists.  */
!   struct edge_def *pred_next, *succ_next;
! 
    /* The two blocks at the ends of the edge.  */
!   struct basic_block_def *src, *dest;
  
    /* Instructions queued on the edge.  */
!   rtx insns;
  
    /* Auxiliary info specific to a pass.  */
!   void *aux;
  
    int flags;			/* see EDGE_* below  */
    int probability;		/* biased by REG_BR_PROB_BASE */
    gcov_type count;		/* Expected number of executions calculated
  				   in profile.c  */
! } *edge;
  
  #define EDGE_FALLTHRU		1	/* 'Straight line' flow */
  #define EDGE_ABNORMAL		2	/* Strange flow, like computed
--- 115,150 ----
  typedef HOST_WIDEST_INT gcov_type;
  
  /* Control flow edge information.  */
! struct edge_def GTY(())
! {
    /* The two blocks at the ends of the edge.  */
!   struct basic_block_def *src;
!   struct basic_block_def *dest;
  
    /* Instructions queued on the edge.  */
!   union edge_def_insns {
!     rtx GTY ((tag ("0"))) r;
!     tree GTY ((tag ("1"))) t;
!   } GTY ((desc ("ir_type ()"))) insns;
  
    /* Auxiliary info specific to a pass.  */
!   PTR GTY ((skip (""))) aux;
! 
!   /* Location of any goto implicit in the edge, during tree-ssa.  */
!   source_locus goto_locus;
  
    int flags;			/* see EDGE_* below  */
    int probability;		/* biased by REG_BR_PROB_BASE */
    gcov_type count;		/* Expected number of executions calculated
  				   in profile.c  */
! 
!   /* The index number corresponding to this edge in the edge vector
!      dest->preds.  */
!   unsigned int dest_idx;
! };
! 
! typedef struct edge_def *edge;
! DEF_VEC_GC_P(edge);
  
  #define EDGE_FALLTHRU		1	/* 'Straight line' flow */
  #define EDGE_ABNORMAL		2	/* Strange flow, like computed
*************** typedef struct edge_def {
*** 153,159 ****
  #define EDGE_IRREDUCIBLE_LOOP	128	/* Part of irreducible loop.  */
  #define EDGE_SIBCALL		256	/* Edge from sibcall to exit.  */
  #define EDGE_LOOP_EXIT		512	/* Exit of a loop.  */
! #define EDGE_ALL_FLAGS		1023
  
  #define EDGE_COMPLEX	(EDGE_ABNORMAL | EDGE_ABNORMAL_CALL | EDGE_EH)
  
--- 159,174 ----
  #define EDGE_IRREDUCIBLE_LOOP	128	/* Part of irreducible loop.  */
  #define EDGE_SIBCALL		256	/* Edge from sibcall to exit.  */
  #define EDGE_LOOP_EXIT		512	/* Exit of a loop.  */
! #define EDGE_TRUE_VALUE		1024	/* Edge taken when controlling
! 					   predicate is nonzero.  */
! #define EDGE_FALSE_VALUE	2048	/* Edge taken when controlling
! 					   predicate is zero.  */
! #define EDGE_EXECUTABLE		4096	/* Edge is executable.  Only
! 					   valid during SSA-CCP.  */
! #define EDGE_CROSSING		8192    /* Edge crosses between hot
! 					   and cold sections, when we
! 					   do partitioning.  */
! #define EDGE_ALL_FLAGS	       16383
  
  #define EDGE_COMPLEX	(EDGE_ABNORMAL | EDGE_ABNORMAL_CALL | EDGE_EH)
  
*************** extern const struct gcov_ctr_summary *pr
*** 165,170 ****
--- 180,188 ----
  struct loop;
  struct loops;
  
+ /* Declared in tree-flow.h.  */
+ struct bb_ann_d;
+ 
  /* A basic block is a sequence of instructions with only entry and
     only one exit.  If any one of the instructions are executed, they
     will all be executed, and in sequence from first to last.
*************** struct loops;
*** 191,265 ****
     basic blocks.  */
  
  /* Basic block information indexed by block number.  */
! typedef struct basic_block_def {
    /* The first and last insns of the block.  */
!   rtx head_, end_;
  
!   /* The first and last trees of the block.  */
!   tree head_tree;
!   tree end_tree;
  
    /* The edges into and out of the block.  */
!   edge pred, succ;
! 
!   /* Liveness info.  */
  
!   /* The registers that are modified within this in block.  */
!   regset local_set;
!   /* The registers that are conditionally modified within this block.
!      In other words, registers that are set only as part of a
!      COND_EXEC.  */
!   regset cond_local_set;
!   /* The registers that are live on entry to this block.
  
-      Note that in SSA form, global_live_at_start does not reflect the
-      use of regs in phi functions, since the liveness of these regs
-      may depend on which edge was taken into the block.  */
-   regset global_live_at_start;
    /* The registers that are live on exit from this block.  */
!   regset global_live_at_end;
  
    /* Auxiliary info specific to a pass.  */
!   void *aux;
  
!   /* The index of this block.  */
!   int index;
  
!   /* Previous and next blocks in the chain.  */
!   struct basic_block_def *prev_bb, *next_bb;
  
!   /* The loop depth of this block.  */
!   int loop_depth;
  
!   /* Outermost loop containing the block.  */
!   struct loop *loop_father;
  
!   /* The dominance and postdominance information node.  */
!   struct et_node *dom[2];
  
    /* Expected number of executions: calculated in profile.c.  */
    gcov_type count;
  
    /* Expected frequency.  Normalized to be in range 0 to BB_FREQ_MAX.  */
    int frequency;
  
    /* Various flags.  See BB_* below.  */
    int flags;
  
!   /* Additional data maintained by cfg_layout routines.  */
!   struct reorder_block_def *rbi;
! } *basic_block;
  
  #define BB_FREQ_MAX 10000
  
! /* Masks for basic_block.flags.  */
  #define BB_DIRTY		1
  #define BB_NEW			2
  #define BB_REACHABLE		4
  #define BB_VISITED		8
  #define BB_IRREDUCIBLE_LOOP	16
  #define BB_SUPERBLOCK		32
  
  /* Number of basic blocks in the current function.  */
  
  extern int n_basic_blocks;
--- 209,345 ----
     basic blocks.  */
  
  /* Basic block information indexed by block number.  */
! struct basic_block_def GTY((chain_next ("%h.next_bb"), chain_prev ("%h.prev_bb")))
! {
    /* The first and last insns of the block.  */
!   rtx head_;
!   rtx end_;
  
!   /* Pointers to the first and last trees of the block.  */
!   tree stmt_list;
  
    /* The edges into and out of the block.  */
!   VEC(edge) *preds;
!   VEC(edge) *succs;
  
!   /* The registers that are live on entry to this block.  */
!   bitmap GTY ((skip (""))) global_live_at_start;
  
    /* The registers that are live on exit from this block.  */
!   bitmap GTY ((skip (""))) global_live_at_end;
  
    /* Auxiliary info specific to a pass.  */
!   PTR GTY ((skip (""))) aux;
  
!   /* Innermost loop containing the block.  */
!   struct loop * GTY ((skip (""))) loop_father;
  
!   /* The dominance and postdominance information node.  */
!   struct et_node * GTY ((skip (""))) dom[2];
  
!   /* Previous and next blocks in the chain.  */
!   struct basic_block_def *prev_bb;
!   struct basic_block_def *next_bb;
  
!   /* The data used by basic block copying and reordering functions.  */
!   struct reorder_block_def * GTY ((skip (""))) rbi;
  
!   /* Annotations used at the tree level.  */
!   struct bb_ann_d *tree_annotations;
  
    /* Expected number of executions: calculated in profile.c.  */
    gcov_type count;
  
+   /* The index of this block.  */
+   int index;
+ 
+   /* The loop depth of this block.  */
+   int loop_depth;
+ 
    /* Expected frequency.  Normalized to be in range 0 to BB_FREQ_MAX.  */
    int frequency;
  
    /* Various flags.  See BB_* below.  */
    int flags;
+ };
  
! typedef struct basic_block_def *basic_block;
! 
! /* Structure to hold information about the blocks during reordering and
!    copying.  */
! 
! typedef struct reorder_block_def
! {
!   rtx header;
!   rtx footer;
!   basic_block next;
!   basic_block original;
!   /* Used by loop copying.  */
!   basic_block copy;
!   int duplicated;
!   int copy_number;
! 
!   /* These fields are used by bb-reorder pass.  */
!   int visited;
! } *reorder_block_def_p;
  
  #define BB_FREQ_MAX 10000
  
! /* Masks for basic_block.flags.
! 
!    BB_VISITED should not be used by passes, it is used internally by
!    dfs_enumerate_from.
! 
!    BB_HOT_PARTITION and BB_COLD_PARTITION should be preserved throughout
!    the compilation, so they are never cleared.
! 
!    All other flags may be cleared by clear_bb_flags().  It is generally
!    a bad idea to rely on any flags being up-to-date.  */
! 
! /* Set if insns in BB have are modified.  Used for updating liveness info.  */
  #define BB_DIRTY		1
+ 
+ /* Only set on blocks that have just been created by create_bb.  */
  #define BB_NEW			2
+ 
+ /* Set by find_unreachable_blocks.  Do not rely on this being set in any
+    pass.  */
  #define BB_REACHABLE		4
+ 
+ /* Used by dfs_enumerate_from to keep track of visited basic blocks.  */
  #define BB_VISITED		8
+ 
+ /* Set for blocks in an irreducible loop by loop analysis.  */
  #define BB_IRREDUCIBLE_LOOP	16
+ 
+ /* Set on blocks that may actually not be single-entry single-exit block.  */
  #define BB_SUPERBLOCK		32
  
+ /* Set on basic blocks that the scheduler should not touch.  This is used
+    by SMS to prevent other schedulers from messing with the loop schedule.  */
+ #define BB_DISABLE_SCHEDULE	64
+ 
+ /* Set on blocks that should be put in a hot section.  */
+ #define BB_HOT_PARTITION	128
+ 
+ /* Set on blocks that should be put in a cold section.  */
+ #define BB_COLD_PARTITION	256
+ 
+ /* Dummy flag for convenience in the hot/cold partitioning code.  */
+ #define BB_UNPARTITIONED	0
+ 
+ /* Partitions, to be used when partitioning hot and cold basic blocks into
+    separate sections.  */
+ #define BB_PARTITION(bb) ((bb)->flags & (BB_HOT_PARTITION|BB_COLD_PARTITION))
+ #define BB_SET_PARTITION(bb, part) do {					\
+   basic_block bb_ = (bb);						\
+   bb_->flags = ((bb_->flags & ~(BB_HOT_PARTITION|BB_COLD_PARTITION))	\
+ 		| (part));						\
+ } while (0)
+ 
+ #define BB_COPY_PARTITION(dstbb, srcbb) \
+   BB_SET_PARTITION (dstbb, BB_PARTITION (srcbb))
+ 
  /* Number of basic blocks in the current function.  */
  
  extern int n_basic_blocks;
*************** extern int last_basic_block;
*** 272,280 ****
  
  extern int n_edges;
  
  /* Index by basic block number, get basic block struct info.  */
  
! extern varray_type basic_block_info;
  
  #define BASIC_BLOCK(N)  (VARRAY_BB (basic_block_info, (N)))
  
--- 352,368 ----
  
  extern int n_edges;
  
+ /* Signalize the status of profile information in the CFG.  */
+ extern enum profile_status
+ {
+   PROFILE_ABSENT,
+   PROFILE_GUESSED,
+   PROFILE_READ
+ } profile_status;
+ 
  /* Index by basic block number, get basic block struct info.  */
  
! extern GTY(()) varray_type basic_block_info;
  
  #define BASIC_BLOCK(N)  (VARRAY_BB (basic_block_info, (N)))
  
*************** extern varray_type basic_block_info;
*** 288,293 ****
--- 376,392 ----
  #define FOR_EACH_BB_REVERSE(BB) \
    FOR_BB_BETWEEN (BB, EXIT_BLOCK_PTR->prev_bb, ENTRY_BLOCK_PTR, prev_bb)
  
+ /* For iterating over insns in basic block.  */
+ #define FOR_BB_INSNS(BB, INSN)			\
+   for ((INSN) = BB_HEAD (BB);			\
+        (INSN) != NEXT_INSN (BB_END (BB));	\
+        (INSN) = NEXT_INSN (INSN))
+ 
+ #define FOR_BB_INSNS_REVERSE(BB, INSN)		\
+   for ((INSN) = BB_END (BB);			\
+        (INSN) != PREV_INSN (BB_HEAD (BB));	\
+        (INSN) = PREV_INSN (INSN))
+ 
  /* Cycles through _all_ basic blocks, even the fake ones (entry and
     exit block).  */
  
*************** extern regset regs_live_at_setjmp;
*** 301,309 ****
  /* Special labels found during CFG build.  */
  
  extern GTY(()) rtx label_value_list;
- extern GTY(()) rtx tail_recursion_label_list;
  
! extern struct obstack flow_obstack;
  
  /* Indexed by n, gives number of basic block that  (REG n) is used in.
     If the value is REG_BLOCK_GLOBAL (-2),
--- 400,407 ----
  /* Special labels found during CFG build.  */
  
  extern GTY(()) rtx label_value_list;
  
! extern bitmap_obstack reg_obstack;
  
  /* Indexed by n, gives number of basic block that  (REG n) is used in.
     If the value is REG_BLOCK_GLOBAL (-2),
*************** extern struct obstack flow_obstack;
*** 330,338 ****
  #define INVALID_BLOCK (-3)
  
  /* Similarly, block pointers for the edge list.  */
! extern struct basic_block_def entry_exit_blocks[2];
! #define ENTRY_BLOCK_PTR	(&entry_exit_blocks[0])
! #define EXIT_BLOCK_PTR	(&entry_exit_blocks[1])
  
  #define BLOCK_NUM(INSN)	      (BLOCK_FOR_INSN (INSN)->index + 0)
  #define set_block_for_insn(INSN, BB)  (BLOCK_FOR_INSN (INSN) = BB)
--- 428,435 ----
  #define INVALID_BLOCK (-3)
  
  /* Similarly, block pointers for the edge list.  */
! extern GTY(()) basic_block ENTRY_BLOCK_PTR;
! extern GTY(()) basic_block EXIT_BLOCK_PTR;
  
  #define BLOCK_NUM(INSN)	      (BLOCK_FOR_INSN (INSN)->index + 0)
  #define set_block_for_insn(INSN, BB)  (BLOCK_FOR_INSN (INSN) = BB)
*************** extern void compute_bb_for_insn (void);
*** 341,347 ****
  extern void free_bb_for_insn (void);
  extern void update_bb_for_insn (basic_block);
  
! extern void free_basic_block_vars (int);
  
  extern void insert_insn_on_edge (rtx, edge);
  bool safe_insert_insn_on_edge (rtx, edge);
--- 438,444 ----
  extern void free_bb_for_insn (void);
  extern void update_bb_for_insn (basic_block);
  
! extern void free_basic_block_vars (void);
  
  extern void insert_insn_on_edge (rtx, edge);
  bool safe_insert_insn_on_edge (rtx, edge);
*************** extern void commit_edge_insertions (void
*** 350,358 ****
  extern void commit_edge_insertions_watch_calls (void);
  
  extern void remove_fake_edges (void);
  extern void add_noreturn_fake_exit_edges (void);
  extern void connect_infinite_loops_to_exit (void);
- extern int flow_call_edges_add (sbitmap);
  extern edge unchecked_make_edge (basic_block, basic_block, int);
  extern edge cached_make_edge (sbitmap *, basic_block, basic_block, int);
  extern edge make_edge (basic_block, basic_block, int);
--- 447,455 ----
  extern void commit_edge_insertions_watch_calls (void);
  
  extern void remove_fake_edges (void);
+ extern void remove_fake_exit_edges (void);
  extern void add_noreturn_fake_exit_edges (void);
  extern void connect_infinite_loops_to_exit (void);
  extern edge unchecked_make_edge (basic_block, basic_block, int);
  extern edge cached_make_edge (sbitmap *, basic_block, basic_block, int);
  extern edge make_edge (basic_block, basic_block, int);
*************** extern edge redirect_edge_succ_nodup (ed
*** 363,379 ****
  extern void redirect_edge_pred (edge, basic_block);
  extern basic_block create_basic_block_structure (rtx, rtx, rtx, basic_block);
  extern void clear_bb_flags (void);
- extern void tidy_fallthru_edge (edge, basic_block, basic_block);
- extern void tidy_fallthru_edges (void);
  extern void flow_reverse_top_sort_order_compute (int *);
  extern int flow_depth_first_order_compute (int *, int *);
- extern void flow_preorder_transversal_compute (int *);
  extern int dfs_enumerate_from (basic_block, int,
  			       bool (*)(basic_block, void *),
  			       basic_block *, int, void *);
  extern void dump_edge_info (FILE *, edge, int);
  extern void clear_edges (void);
- extern void mark_critical_edges (void);
  extern rtx first_insn_after_basic_block_note (basic_block);
  
  /* Structure to group all of the information to process IF-THEN and
--- 460,474 ----
  extern void redirect_edge_pred (edge, basic_block);
  extern basic_block create_basic_block_structure (rtx, rtx, rtx, basic_block);
  extern void clear_bb_flags (void);
  extern void flow_reverse_top_sort_order_compute (int *);
  extern int flow_depth_first_order_compute (int *, int *);
  extern int dfs_enumerate_from (basic_block, int,
  			       bool (*)(basic_block, void *),
  			       basic_block *, int, void *);
+ extern void compute_dominance_frontiers (bitmap *);
  extern void dump_edge_info (FILE *, edge, int);
+ extern void brief_dump_cfg (FILE *);
  extern void clear_edges (void);
  extern rtx first_insn_after_basic_block_note (basic_block);
  
  /* Structure to group all of the information to process IF-THEN and
*************** struct edge_list
*** 430,441 ****
  #define NUM_EDGES(el)			((el)->num_edges)
  
  /* BB is assumed to contain conditional jump.  Return the fallthru edge.  */
! #define FALLTHRU_EDGE(bb)		((bb)->succ->flags & EDGE_FALLTHRU \
! 					 ? (bb)->succ : (bb)->succ->succ_next)
  
  /* BB is assumed to contain conditional jump.  Return the branch edge.  */
! #define BRANCH_EDGE(bb)			((bb)->succ->flags & EDGE_FALLTHRU \
! 					 ? (bb)->succ->succ_next : (bb)->succ)
  
  /* Return expected execution frequency of the edge E.  */
  #define EDGE_FREQUENCY(e)		(((e)->src->frequency \
--- 525,536 ----
  #define NUM_EDGES(el)			((el)->num_edges)
  
  /* BB is assumed to contain conditional jump.  Return the fallthru edge.  */
! #define FALLTHRU_EDGE(bb)		(EDGE_SUCC ((bb), 0)->flags & EDGE_FALLTHRU \
! 					 ? EDGE_SUCC ((bb), 0) : EDGE_SUCC ((bb), 1))
  
  /* BB is assumed to contain conditional jump.  Return the branch edge.  */
! #define BRANCH_EDGE(bb)			(EDGE_SUCC ((bb), 0)->flags & EDGE_FALLTHRU \
! 					 ? EDGE_SUCC ((bb), 1) : EDGE_SUCC ((bb), 0))
  
  /* Return expected execution frequency of the edge E.  */
  #define EDGE_FREQUENCY(e)		(((e)->src->frequency \
*************** struct edge_list
*** 444,457 ****
  					 / REG_BR_PROB_BASE)
  
  /* Return nonzero if edge is critical.  */
! #define EDGE_CRITICAL_P(e)		((e)->src->succ->succ_next \
! 					 && (e)->dest->pred->pred_next)
  
  struct edge_list * create_edge_list (void);
  void free_edge_list (struct edge_list *);
  void print_edge_list (FILE *, struct edge_list *);
  void verify_edge_list (FILE *, struct edge_list *);
  int find_edge_index (struct edge_list *, basic_block, basic_block);
  
  
  enum update_life_extent
--- 539,667 ----
  					 / REG_BR_PROB_BASE)
  
  /* Return nonzero if edge is critical.  */
! #define EDGE_CRITICAL_P(e)		(EDGE_COUNT ((e)->src->succs) >= 2 \
! 					 && EDGE_COUNT ((e)->dest->preds) >= 2)
! 
! #define EDGE_COUNT(ev)			VEC_length (edge, (ev))
! #define EDGE_I(ev,i)			VEC_index  (edge, (ev), (i))
! #define EDGE_PRED(bb,i)			VEC_index  (edge, (bb)->preds, (i))
! #define EDGE_SUCC(bb,i)			VEC_index  (edge, (bb)->succs, (i))
! 
! /* Iterator object for edges.  */
! 
! typedef struct {
!   unsigned index;
!   VEC(edge) **container;
! } edge_iterator;
! 
! static inline VEC(edge) *
! ei_container (edge_iterator i)
! {
!   gcc_assert (i.container);
!   return *i.container;
! }
! 
! #define ei_start(iter) ei_start_1 (&(iter))
! #define ei_last(iter) ei_last_1 (&(iter))
! 
! /* Return an iterator pointing to the start of an edge vector.  */
! static inline edge_iterator
! ei_start_1 (VEC(edge) **ev)
! {
!   edge_iterator i;
! 
!   i.index = 0;
!   i.container = ev;
! 
!   return i;
! }
! 
! /* Return an iterator pointing to the last element of an edge
!    vector.  */
! static inline edge_iterator
! ei_last_1 (VEC(edge) **ev)
! {
!   edge_iterator i;
! 
!   i.index = EDGE_COUNT (*ev) - 1;
!   i.container = ev;
! 
!   return i;
! }
! 
! /* Is the iterator `i' at the end of the sequence?  */
! static inline bool
! ei_end_p (edge_iterator i)
! {
!   return (i.index == EDGE_COUNT (ei_container (i)));
! }
! 
! /* Is the iterator `i' at one position before the end of the
!    sequence?  */
! static inline bool
! ei_one_before_end_p (edge_iterator i)
! {
!   return (i.index + 1 == EDGE_COUNT (ei_container (i)));
! }
! 
! /* Advance the iterator to the next element.  */
! static inline void
! ei_next (edge_iterator *i)
! {
!   gcc_assert (i->index < EDGE_COUNT (ei_container (*i)));
!   i->index++;
! }
! 
! /* Move the iterator to the previous element.  */
! static inline void
! ei_prev (edge_iterator *i)
! {
!   gcc_assert (i->index > 0);
!   i->index--;
! }
! 
! /* Return the edge pointed to by the iterator `i'.  */
! static inline edge
! ei_edge (edge_iterator i)
! {
!   return EDGE_I (ei_container (i), i.index);
! }
! 
! /* Return an edge pointed to by the iterator.  Do it safely so that
!    NULL is returned when the iterator is pointing at the end of the
!    sequence.  */
! static inline edge
! ei_safe_edge (edge_iterator i)
! {
!   return !ei_end_p (i) ? ei_edge (i) : NULL;
! }
! 
! /* This macro serves as a convenient way to iterate each edge in a
!    vector of predecessor or successor edges.  It must not be used when
!    an element might be removed during the traversal, otherwise
!    elements will be missed.  Instead, use a for-loop like that shown
!    in the following pseudo-code:
!    
!    FOR (ei = ei_start (bb->succs); (e = ei_safe_edge (ei)); )
!      {
! 	IF (e != taken_edge)
! 	  remove_edge (e);
! 	ELSE
! 	  ei_next (&ei);
!      }
! */
! 
! #define FOR_EACH_EDGE(EDGE,ITER,EDGE_VEC) \
!   for ((EDGE) = NULL, (ITER) = ei_start ((EDGE_VEC)); \
!        ((EDGE) = ei_safe_edge ((ITER))); \
!        ei_next (&(ITER)))
  
  struct edge_list * create_edge_list (void);
  void free_edge_list (struct edge_list *);
  void print_edge_list (FILE *, struct edge_list *);
  void verify_edge_list (FILE *, struct edge_list *);
  int find_edge_index (struct edge_list *, basic_block, basic_block);
+ edge find_edge (basic_block, basic_block);
  
  
  enum update_life_extent
*************** enum update_life_extent
*** 482,488 ****
  				 | PROP_SCAN_DEAD_STORES)
  #define PROP_POSTRELOAD		(PROP_DEATH_NOTES  \
  				 | PROP_KILL_DEAD_CODE  \
! 				 | PROP_SCAN_DEAD_CODE | PROP_AUTOINC \
  				 | PROP_SCAN_DEAD_STORES)
  
  #define CLEANUP_EXPENSIVE	1	/* Do relatively expensive optimizations
--- 692,698 ----
  				 | PROP_SCAN_DEAD_STORES)
  #define PROP_POSTRELOAD		(PROP_DEATH_NOTES  \
  				 | PROP_KILL_DEAD_CODE  \
! 				 | PROP_SCAN_DEAD_CODE \
  				 | PROP_SCAN_DEAD_STORES)
  
  #define CLEANUP_EXPENSIVE	1	/* Do relatively expensive optimizations
*************** enum update_life_extent
*** 490,506 ****
  #define CLEANUP_CROSSJUMP	2	/* Do crossjumping.  */
  #define CLEANUP_POST_REGSTACK	4	/* We run after reg-stack and need
  					   to care REG_DEAD notes.  */
! #define CLEANUP_PRE_SIBCALL	8	/* Do not get confused by code hidden
! 					   inside call_placeholders..  */
! #define CLEANUP_PRE_LOOP	16	/* Take care to preserve syntactic loop
  					   notes.  */
! #define CLEANUP_UPDATE_LIFE	32	/* Keep life information up to date.  */
! #define CLEANUP_THREADING	64	/* Do jump threading.  */
! #define CLEANUP_NO_INSN_DEL	128	/* Do not try to delete trivially dead
  					   insns.  */
! #define CLEANUP_CFGLAYOUT	256	/* Do cleanup in cfglayout mode.  */
! #define CLEANUP_LOG_LINKS	512	/* Update log links.  */
! extern void life_analysis (rtx, FILE *, int);
  extern int update_life_info (sbitmap, enum update_life_extent, int);
  extern int update_life_info_in_dirty_blocks (enum update_life_extent, int);
  extern int count_or_remove_death_notes (sbitmap, int);
--- 700,715 ----
  #define CLEANUP_CROSSJUMP	2	/* Do crossjumping.  */
  #define CLEANUP_POST_REGSTACK	4	/* We run after reg-stack and need
  					   to care REG_DEAD notes.  */
! #define CLEANUP_PRE_LOOP	8	/* Take care to preserve syntactic loop
  					   notes.  */
! #define CLEANUP_UPDATE_LIFE	16	/* Keep life information up to date.  */
! #define CLEANUP_THREADING	32	/* Do jump threading.  */
! #define CLEANUP_NO_INSN_DEL	64	/* Do not try to delete trivially dead
  					   insns.  */
! #define CLEANUP_CFGLAYOUT	128	/* Do cleanup in cfglayout mode.  */
! #define CLEANUP_LOG_LINKS	256	/* Update log links.  */
! 
! extern void life_analysis (FILE *, int);
  extern int update_life_info (sbitmap, enum update_life_extent, int);
  extern int update_life_info_in_dirty_blocks (enum update_life_extent, int);
  extern int count_or_remove_death_notes (sbitmap, int);
*************** extern struct edge_list *pre_edge_rev_lc
*** 523,556 ****
  extern void compute_available (sbitmap *, sbitmap *, sbitmap *, sbitmap *);
  extern int optimize_mode_switching (FILE *);
  
- /* In emit-rtl.c.  */
- extern rtx emit_block_insn_after (rtx, rtx, basic_block);
- extern rtx emit_block_insn_before (rtx, rtx, basic_block);
- 
  /* In predict.c */
  extern void estimate_probability (struct loops *);
- extern void note_prediction_to_br_prob (void);
  extern void expected_value_to_br_prob (void);
  extern bool maybe_hot_bb_p (basic_block);
  extern bool probably_cold_bb_p (basic_block);
  extern bool probably_never_executed_bb_p (basic_block);
  
  /* In flow.c */
  extern void init_flow (void);
- extern void dump_bb (basic_block, FILE *);
  extern void debug_bb (basic_block);
  extern basic_block debug_bb_n (int);
  extern void dump_regset (regset, FILE *);
  extern void debug_regset (regset);
  extern void allocate_reg_life_data (void);
- extern void allocate_bb_life_data (void);
  extern void expunge_block (basic_block);
  extern void link_block (basic_block, basic_block);
  extern void unlink_block (basic_block);
  extern void compact_blocks (void);
  extern basic_block alloc_block (void);
  extern void find_unreachable_blocks (void);
! extern int delete_noop_moves (rtx);
  extern basic_block force_nonfallthru (edge);
  extern rtx block_label (basic_block);
  extern bool forwarder_block_p (basic_block);
--- 732,764 ----
  extern void compute_available (sbitmap *, sbitmap *, sbitmap *, sbitmap *);
  extern int optimize_mode_switching (FILE *);
  
  /* In predict.c */
  extern void estimate_probability (struct loops *);
  extern void expected_value_to_br_prob (void);
  extern bool maybe_hot_bb_p (basic_block);
  extern bool probably_cold_bb_p (basic_block);
  extern bool probably_never_executed_bb_p (basic_block);
+ extern bool tree_predicted_by_p (basic_block, enum br_predictor);
+ extern bool rtl_predicted_by_p (basic_block, enum br_predictor);
+ extern void tree_predict_edge (edge, enum br_predictor, int);
+ extern void rtl_predict_edge (edge, enum br_predictor, int);
+ extern void predict_edge_def (edge, enum br_predictor, enum prediction);
+ extern void guess_outgoing_edge_probabilities (basic_block);
  
  /* In flow.c */
  extern void init_flow (void);
  extern void debug_bb (basic_block);
  extern basic_block debug_bb_n (int);
  extern void dump_regset (regset, FILE *);
  extern void debug_regset (regset);
  extern void allocate_reg_life_data (void);
  extern void expunge_block (basic_block);
  extern void link_block (basic_block, basic_block);
  extern void unlink_block (basic_block);
  extern void compact_blocks (void);
  extern basic_block alloc_block (void);
  extern void find_unreachable_blocks (void);
! extern int delete_noop_moves (void);
  extern basic_block force_nonfallthru (edge);
  extern rtx block_label (basic_block);
  extern bool forwarder_block_p (basic_block);
*************** extern bool purge_all_dead_edges (int);
*** 558,564 ****
--- 766,774 ----
  extern bool purge_dead_edges (basic_block);
  extern void find_sub_basic_blocks (basic_block);
  extern void find_many_sub_basic_blocks (sbitmap);
+ extern void rtl_make_eh_edge (sbitmap *, basic_block, rtx);
  extern bool can_fallthru (basic_block, basic_block);
+ extern bool could_fall_through (basic_block, basic_block);
  extern void flow_nodes_print (const char *, const sbitmap, FILE *);
  extern void flow_edge_list_print (const char *, const edge *, int, FILE *);
  extern void alloc_aux_for_block (basic_block, int);
*************** extern void alloc_aux_for_edge (edge, in
*** 569,579 ****
  extern void alloc_aux_for_edges (int);
  extern void clear_aux_for_edges (void);
  extern void free_aux_for_edges (void);
! 
! /* This function is always defined so it can be called from the
!    debugger, and it is declared extern so we don't get warnings about
!    it being unused.  */
! extern void verify_flow_info (void);
  
  typedef struct conflict_graph_def *conflict_graph;
  
--- 779,788 ----
  extern void alloc_aux_for_edges (int);
  extern void clear_aux_for_edges (void);
  extern void free_aux_for_edges (void);
! extern void find_basic_blocks (rtx);
! extern bool cleanup_cfg (int);
! extern bool delete_unreachable_blocks (void);
! extern bool merge_seq_blocks (void);
  
  typedef struct conflict_graph_def *conflict_graph;
  
*************** extern void conflict_graph_enum (conflic
*** 594,612 ****
  				 void *);
  extern void conflict_graph_merge_regs (conflict_graph, int, int);
  extern void conflict_graph_print (conflict_graph, FILE*);
- extern conflict_graph conflict_graph_compute (regset, partition);
  extern bool mark_dfs_back_edges (void);
  extern void set_edge_can_fallthru_flag (void);
  extern void update_br_prob_note (basic_block);
  extern void fixup_abnormal_edges (void);
- extern bool can_hoist_insn_p (rtx, rtx, regset);
- extern rtx hoist_insn_after (rtx, rtx, rtx, rtx);
- extern rtx hoist_insn_to_edge (rtx, edge, rtx, rtx);
  extern bool inside_basic_block_p (rtx);
  extern bool control_flow_insn_p (rtx);
  
  /* In bb-reorder.c */
  extern void reorder_basic_blocks (unsigned int);
  
  /* In dominance.c */
  
--- 803,824 ----
  				 void *);
  extern void conflict_graph_merge_regs (conflict_graph, int, int);
  extern void conflict_graph_print (conflict_graph, FILE*);
  extern bool mark_dfs_back_edges (void);
  extern void set_edge_can_fallthru_flag (void);
  extern void update_br_prob_note (basic_block);
  extern void fixup_abnormal_edges (void);
  extern bool inside_basic_block_p (rtx);
  extern bool control_flow_insn_p (rtx);
  
  /* In bb-reorder.c */
  extern void reorder_basic_blocks (unsigned int);
+ extern void duplicate_computed_gotos (void);
+ extern void partition_hot_cold_basic_blocks (void);
+ 
+ /* In cfg.c */
+ extern void alloc_rbi_pool (void);
+ extern void initialize_bb_rbi (basic_block bb);
+ extern void free_rbi_pool (void);
  
  /* In dominance.c */
  
*************** enum cdi_direction
*** 619,632 ****
  enum dom_state
  {
    DOM_NONE,		/* Not computed at all.  */
-   DOM_CONS_OK,		/* The data is conservatively OK, i.e. if it says you that A dominates B,
- 			   it indeed does.  */
    DOM_NO_FAST_QUERY,	/* The data is OK, but the fast query data are not usable.  */
    DOM_OK		/* Everything is ok.  */
  };
  
  extern enum dom_state dom_computed[2];
  
  extern void calculate_dominance_info (enum cdi_direction);
  extern void free_dominance_info (enum cdi_direction);
  extern basic_block nearest_common_dominator (enum cdi_direction,
--- 831,843 ----
  enum dom_state
  {
    DOM_NONE,		/* Not computed at all.  */
    DOM_NO_FAST_QUERY,	/* The data is OK, but the fast query data are not usable.  */
    DOM_OK		/* Everything is ok.  */
  };
  
  extern enum dom_state dom_computed[2];
  
+ extern bool dom_info_available_p (enum cdi_direction);
  extern void calculate_dominance_info (enum cdi_direction);
  extern void free_dominance_info (enum cdi_direction);
  extern basic_block nearest_common_dominator (enum cdi_direction,
*************** extern void set_immediate_dominator (enu
*** 636,641 ****
--- 847,854 ----
  extern basic_block get_immediate_dominator (enum cdi_direction, basic_block);
  extern bool dominated_by_p (enum cdi_direction, basic_block, basic_block);
  extern int get_dominated_by (enum cdi_direction, basic_block, basic_block **);
+ extern unsigned get_dominated_by_region (enum cdi_direction, basic_block *,
+ 					 unsigned, basic_block *);
  extern void add_to_dominance_info (enum cdi_direction, basic_block);
  extern void delete_from_dominance_info (enum cdi_direction, basic_block);
  basic_block recount_dominator (enum cdi_direction, basic_block);
*************** extern void iterate_fix_dominators (enum
*** 645,651 ****
  extern void verify_dominators (enum cdi_direction);
  extern basic_block first_dom_son (enum cdi_direction, basic_block);
  extern basic_block next_dom_son (enum cdi_direction, basic_block);
! extern bool try_redirect_by_replacing_jump (edge, basic_block, bool);
  
  #include "cfghooks.h"
  
--- 858,867 ----
  extern void verify_dominators (enum cdi_direction);
  extern basic_block first_dom_son (enum cdi_direction, basic_block);
  extern basic_block next_dom_son (enum cdi_direction, basic_block);
! extern edge try_redirect_by_replacing_jump (edge, basic_block, bool);
! extern void break_superblocks (void);
! extern void check_bb_profile (basic_block, FILE *);
! extern void update_bb_profile_for_threading (basic_block, int, gcov_type, edge);
  
  #include "cfghooks.h"
  
diff -Nrcpad gcc-3.4.3/gcc/bb-reorder.c gcc-4.0.0/gcc/bb-reorder.c
*** gcc-3.4.3/gcc/bb-reorder.c	Mon Jul 26 14:42:10 2004
--- gcc-4.0.0/gcc/bb-reorder.c	Thu Apr  7 14:21:16 2005
***************
*** 1,5 ****
  /* Basic block reordering routines for the GNU compiler.
!    Copyright (C) 2000, 2002, 2003 Free Software Foundation, Inc.
  
     This file is part of GCC.
  
--- 1,5 ----
  /* Basic block reordering routines for the GNU compiler.
!    Copyright (C) 2000, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
  
     This file is part of GCC.
  
***************
*** 70,91 ****
  #include "coretypes.h"
  #include "tm.h"
  #include "rtl.h"
! #include "basic-block.h"
  #include "flags.h"
  #include "timevar.h"
  #include "output.h"
  #include "cfglayout.h"
  #include "fibheap.h"
  #include "target.h"
  
- /* The number of rounds.  */
- #define N_ROUNDS 4
  
  /* Branch thresholds in thousandths (per mille) of the REG_BR_PROB_BASE.  */
! static int branch_threshold[N_ROUNDS] = {400, 200, 100, 0};
  
  /* Exec thresholds in thousandths (per mille) of the frequency of bb 0.  */
! static int exec_threshold[N_ROUNDS] = {500, 200, 50, 0};
  
  /* If edge frequency is lower than DUPLICATION_THRESHOLD per mille of entry
     block the edge destination is not duplicated while connecting traces.  */
--- 70,107 ----
  #include "coretypes.h"
  #include "tm.h"
  #include "rtl.h"
! #include "regs.h"
  #include "flags.h"
  #include "timevar.h"
  #include "output.h"
  #include "cfglayout.h"
  #include "fibheap.h"
  #include "target.h"
+ #include "function.h"
+ #include "tm_p.h"
+ #include "obstack.h"
+ #include "expr.h"
+ #include "params.h"
+ 
+ /* The number of rounds.  In most cases there will only be 4 rounds, but
+    when partitioning hot and cold basic blocks into separate sections of
+    the .o file there will be an extra round.*/
+ #define N_ROUNDS 5
+ 
+ /* Stubs in case we don't have a return insn.
+    We have to check at runtime too, not only compiletime.  */  
+ 
+ #ifndef HAVE_return
+ #define HAVE_return 0
+ #define gen_return() NULL_RTX
+ #endif
  
  
  /* Branch thresholds in thousandths (per mille) of the REG_BR_PROB_BASE.  */
! static int branch_threshold[N_ROUNDS] = {400, 200, 100, 0, 0};
  
  /* Exec thresholds in thousandths (per mille) of the frequency of bb 0.  */
! static int exec_threshold[N_ROUNDS] = {500, 200, 50, 0, 0};
  
  /* If edge frequency is lower than DUPLICATION_THRESHOLD per mille of entry
     block the edge destination is not duplicated while connecting traces.  */
*************** static bbro_basic_block_data *bbd;
*** 121,128 ****
  #define GET_ARRAY_SIZE(X) ((((X) / 4) + 1) * 5)
  
  /* Free the memory and set the pointer to NULL.  */
! #define FREE(P) \
!   do { if (P) { free (P); P = 0; } else { abort (); } } while (0)
  
  /* Structure for holding information about a trace.  */
  struct trace
--- 137,143 ----
  #define GET_ARRAY_SIZE(X) ((((X) / 4) + 1) * 5)
  
  /* Free the memory and set the pointer to NULL.  */
! #define FREE(P) (gcc_assert (P), free (P), P = 0)
  
  /* Structure for holding information about a trace.  */
  struct trace
*************** static void find_traces (int *, struct t
*** 146,159 ****
  static basic_block rotate_loop (edge, struct trace *, int);
  static void mark_bb_visited (basic_block, int);
  static void find_traces_1_round (int, int, gcov_type, struct trace *, int *,
! 				 int, fibheap_t *);
  static basic_block copy_bb (basic_block, edge, basic_block, int);
  static fibheapkey_t bb_to_key (basic_block);
! static bool better_edge_p (basic_block, edge, int, int, int, int);
  static void connect_traces (int, struct trace *);
  static bool copy_bb_p (basic_block, int);
  static int get_uncond_jump_length (void);
  
  /* Find the traces for Software Trace Cache.  Chain each trace through
     RBI()->next.  Store the number of traces to N_TRACES and description of
     traces to TRACES.  */
--- 161,224 ----
  static basic_block rotate_loop (edge, struct trace *, int);
  static void mark_bb_visited (basic_block, int);
  static void find_traces_1_round (int, int, gcov_type, struct trace *, int *,
! 				 int, fibheap_t *, int);
  static basic_block copy_bb (basic_block, edge, basic_block, int);
  static fibheapkey_t bb_to_key (basic_block);
! static bool better_edge_p (basic_block, edge, int, int, int, int, edge);
  static void connect_traces (int, struct trace *);
  static bool copy_bb_p (basic_block, int);
  static int get_uncond_jump_length (void);
+ static bool push_to_next_round_p (basic_block, int, int, int, gcov_type);
+ static void add_unlikely_executed_notes (void);
+ static void find_rarely_executed_basic_blocks_and_crossing_edges (edge *, 
+ 								  int *,
+ 								  int *);
+ static void mark_bb_for_unlikely_executed_section  (basic_block);
+ static void add_labels_and_missing_jumps (edge *, int);
+ static void add_reg_crossing_jump_notes (void);
+ static void fix_up_fall_thru_edges (void);
+ static void fix_edges_for_rarely_executed_code (edge *, int);
+ static void fix_crossing_conditional_branches (void);
+ static void fix_crossing_unconditional_branches (void);
  
+ /* Check to see if bb should be pushed into the next round of trace
+    collections or not.  Reasons for pushing the block forward are 1).
+    If the block is cold, we are doing partitioning, and there will be
+    another round (cold partition blocks are not supposed to be
+    collected into traces until the very last round); or 2). There will
+    be another round, and the basic block is not "hot enough" for the
+    current round of trace collection.  */
+ 
+ static bool
+ push_to_next_round_p (basic_block bb, int round, int number_of_rounds,
+ 		      int exec_th, gcov_type count_th)
+ {
+   bool there_exists_another_round;
+   bool cold_block;
+   bool block_not_hot_enough;
+   bool next_round_is_last;
+ 
+   there_exists_another_round = round < number_of_rounds - 1;
+   next_round_is_last = round + 1 == number_of_rounds - 1;
+ 
+   cold_block = (flag_reorder_blocks_and_partition 
+ 		&& BB_PARTITION (bb) == BB_COLD_PARTITION);
+ 
+   block_not_hot_enough = (bb->frequency < exec_th 
+ 			  || bb->count < count_th
+ 			  || probably_never_executed_bb_p (bb));
+ 
+   if (flag_reorder_blocks_and_partition
+       && next_round_is_last
+       && BB_PARTITION (bb) != BB_COLD_PARTITION)
+     return false;
+   else if (there_exists_another_round
+       && (cold_block || block_not_hot_enough))
+     return true;
+   else 
+     return false;
+ }
+ 
  /* Find the traces for Software Trace Cache.  Chain each trace through
     RBI()->next.  Store the number of traces to N_TRACES and description of
     traces to TRACES.  */
*************** static void
*** 162,175 ****
  find_traces (int *n_traces, struct trace *traces)
  {
    int i;
    edge e;
    fibheap_t heap;
  
    /* Insert entry points of function into heap.  */
    heap = fibheap_new ();
    max_entry_frequency = 0;
    max_entry_count = 0;
!   for (e = ENTRY_BLOCK_PTR->succ; e; e = e->succ_next)
      {
        bbd[e->dest->index].heap = heap;
        bbd[e->dest->index].node = fibheap_insert (heap, bb_to_key (e->dest),
--- 227,250 ----
  find_traces (int *n_traces, struct trace *traces)
  {
    int i;
+   int number_of_rounds;
    edge e;
+   edge_iterator ei;
    fibheap_t heap;
  
+   /* Add one extra round of trace collection when partitioning hot/cold
+      basic blocks into separate sections.  The last round is for all the
+      cold blocks (and ONLY the cold blocks).  */
+ 
+   number_of_rounds = N_ROUNDS - 1;
+   if (flag_reorder_blocks_and_partition)
+     number_of_rounds = N_ROUNDS;
+ 
    /* Insert entry points of function into heap.  */
    heap = fibheap_new ();
    max_entry_frequency = 0;
    max_entry_count = 0;
!   FOR_EACH_EDGE (e, ei, ENTRY_BLOCK_PTR->succs)
      {
        bbd[e->dest->index].heap = heap;
        bbd[e->dest->index].node = fibheap_insert (heap, bb_to_key (e->dest),
*************** find_traces (int *n_traces, struct trace
*** 181,192 ****
      }
  
    /* Find the traces.  */
!   for (i = 0; i < N_ROUNDS; i++)
      {
        gcov_type count_threshold;
  
!       if (rtl_dump_file)
! 	fprintf (rtl_dump_file, "STC - round %d\n", i + 1);
  
        if (max_entry_count < INT_MAX / 1000)
  	count_threshold = max_entry_count * exec_threshold[i] / 1000;
--- 256,267 ----
      }
  
    /* Find the traces.  */
!   for (i = 0; i < number_of_rounds; i++)
      {
        gcov_type count_threshold;
  
!       if (dump_file)
! 	fprintf (dump_file, "STC - round %d\n", i + 1);
  
        if (max_entry_count < INT_MAX / 1000)
  	count_threshold = max_entry_count * exec_threshold[i] / 1000;
*************** find_traces (int *n_traces, struct trace
*** 195,216 ****
  
        find_traces_1_round (REG_BR_PROB_BASE * branch_threshold[i] / 1000,
  			   max_entry_frequency * exec_threshold[i] / 1000,
! 			   count_threshold, traces, n_traces, i, &heap);
      }
    fibheap_delete (heap);
  
!   if (rtl_dump_file)
      {
        for (i = 0; i < *n_traces; i++)
  	{
  	  basic_block bb;
! 	  fprintf (rtl_dump_file, "Trace %d (round %d):  ", i + 1,
  		   traces[i].round + 1);
  	  for (bb = traces[i].first; bb != traces[i].last; bb = bb->rbi->next)
! 	    fprintf (rtl_dump_file, "%d [%d] ", bb->index, bb->frequency);
! 	  fprintf (rtl_dump_file, "%d [%d]\n", bb->index, bb->frequency);
  	}
!       fflush (rtl_dump_file);
      }
  }
  
--- 270,292 ----
  
        find_traces_1_round (REG_BR_PROB_BASE * branch_threshold[i] / 1000,
  			   max_entry_frequency * exec_threshold[i] / 1000,
! 			   count_threshold, traces, n_traces, i, &heap,
! 			   number_of_rounds);
      }
    fibheap_delete (heap);
  
!   if (dump_file)
      {
        for (i = 0; i < *n_traces; i++)
  	{
  	  basic_block bb;
! 	  fprintf (dump_file, "Trace %d (round %d):  ", i + 1,
  		   traces[i].round + 1);
  	  for (bb = traces[i].first; bb != traces[i].last; bb = bb->rbi->next)
! 	    fprintf (dump_file, "%d [%d] ", bb->index, bb->frequency);
! 	  fprintf (dump_file, "%d [%d]\n", bb->index, bb->frequency);
  	}
!       fflush (dump_file);
      }
  }
  
*************** rotate_loop (edge back_edge, struct trac
*** 236,242 ****
    do
      {
        edge e;
!       for (e = bb->succ; e; e = e->succ_next)
  	if (e->dest != EXIT_BLOCK_PTR
  	    && e->dest->rbi->visited != trace_n
  	    && (e->flags & EDGE_CAN_FALLTHRU)
--- 312,320 ----
    do
      {
        edge e;
!       edge_iterator ei;
! 
!       FOR_EACH_EDGE (e, ei, bb->succs)
  	if (e->dest != EXIT_BLOCK_PTR
  	    && e->dest->rbi->visited != trace_n
  	    && (e->flags & EDGE_CAN_FALLTHRU)
*************** rotate_loop (edge back_edge, struct trac
*** 307,321 ****
  	  prev_bb->rbi->next = best_bb->rbi->next;
  
  	  /* Try to get rid of uncond jump to cond jump.  */
! 	  if (prev_bb->succ && !prev_bb->succ->succ_next)
  	    {
! 	      basic_block header = prev_bb->succ->dest;
  
  	      /* Duplicate HEADER if it is a small block containing cond jump
  		 in the end.  */
! 	      if (any_condjump_p (BB_END (header)) && copy_bb_p (header, 0))
  		{
! 		  copy_bb (header, prev_bb->succ, prev_bb, trace_n);
  		}
  	    }
  	}
--- 385,401 ----
  	  prev_bb->rbi->next = best_bb->rbi->next;
  
  	  /* Try to get rid of uncond jump to cond jump.  */
! 	  if (EDGE_COUNT (prev_bb->succs) == 1)
  	    {
! 	      basic_block header = EDGE_SUCC (prev_bb, 0)->dest;
  
  	      /* Duplicate HEADER if it is a small block containing cond jump
  		 in the end.  */
! 	      if (any_condjump_p (BB_END (header)) && copy_bb_p (header, 0)
! 		  && !find_reg_note (BB_END (header), REG_CROSSING_JUMP, 
! 				     NULL_RTX))
  		{
! 		  copy_bb (header, EDGE_SUCC (prev_bb, 0), prev_bb, trace_n);
  		}
  	    }
  	}
*************** mark_bb_visited (basic_block bb, int tra
*** 354,361 ****
  static void
  find_traces_1_round (int branch_th, int exec_th, gcov_type count_th,
  		     struct trace *traces, int *n_traces, int round,
! 		     fibheap_t *heap)
  {
    /* Heap for discarded basic blocks which are possible starting points for
       the next round.  */
    fibheap_t new_heap = fibheap_new ();
--- 434,446 ----
  static void
  find_traces_1_round (int branch_th, int exec_th, gcov_type count_th,
  		     struct trace *traces, int *n_traces, int round,
! 		     fibheap_t *heap, int number_of_rounds)
  {
+   /* The following variable refers to the last round in which non-"cold" 
+      blocks may be collected into a trace.  */
+ 
+   int last_round = N_ROUNDS - 1;
+ 
    /* Heap for discarded basic blocks which are possible starting points for
       the next round.  */
    fibheap_t new_heap = fibheap_new ();
*************** find_traces_1_round (int branch_th, int 
*** 366,390 ****
        struct trace *trace;
        edge best_edge, e;
        fibheapkey_t key;
  
        bb = fibheap_extract_min (*heap);
        bbd[bb->index].heap = NULL;
        bbd[bb->index].node = NULL;
  
!       if (rtl_dump_file)
! 	fprintf (rtl_dump_file, "Getting bb %d\n", bb->index);
  
!       /* If the BB's frequency is too low send BB to the next round.  */
!       if (round < N_ROUNDS - 1
! 	  && (bb->frequency < exec_th || bb->count < count_th
! 	      || probably_never_executed_bb_p (bb)))
  	{
  	  int key = bb_to_key (bb);
  	  bbd[bb->index].heap = new_heap;
  	  bbd[bb->index].node = fibheap_insert (new_heap, key, bb);
  
! 	  if (rtl_dump_file)
! 	    fprintf (rtl_dump_file,
  		     "  Possible start point of next round: %d (key: %d)\n",
  		     bb->index, key);
  	  continue;
--- 451,479 ----
        struct trace *trace;
        edge best_edge, e;
        fibheapkey_t key;
+       edge_iterator ei;
  
        bb = fibheap_extract_min (*heap);
        bbd[bb->index].heap = NULL;
        bbd[bb->index].node = NULL;
  
!       if (dump_file)
! 	fprintf (dump_file, "Getting bb %d\n", bb->index);
  
!       /* If the BB's frequency is too low send BB to the next round.  When
!          partitioning hot/cold blocks into separate sections, make sure all
!          the cold blocks (and ONLY the cold blocks) go into the (extra) final
!          round.  */
! 
!       if (push_to_next_round_p (bb, round, number_of_rounds, exec_th, 
! 				count_th))
  	{
  	  int key = bb_to_key (bb);
  	  bbd[bb->index].heap = new_heap;
  	  bbd[bb->index].node = fibheap_insert (new_heap, key, bb);
  
! 	  if (dump_file)
! 	    fprintf (dump_file,
  		     "  Possible start point of next round: %d (key: %d)\n",
  		     bb->index, key);
  	  continue;
*************** find_traces_1_round (int branch_th, int 
*** 399,404 ****
--- 488,494 ----
        do
  	{
  	  int prob, freq;
+ 	  bool ends_in_call;
  
  	  /* The probability and frequency of the best edge.  */
  	  int best_prob = INT_MIN / 2;
*************** find_traces_1_round (int branch_th, int 
*** 408,424 ****
  	  mark_bb_visited (bb, *n_traces);
  	  trace->length++;
  
! 	  if (rtl_dump_file)
! 	    fprintf (rtl_dump_file, "Basic block %d was visited in trace %d\n",
  		     bb->index, *n_traces - 1);
  
  	  /* Select the successor that will be placed after BB.  */
! 	  for (e = bb->succ; e; e = e->succ_next)
  	    {
! #ifdef ENABLE_CHECKING
! 	      if (e->flags & EDGE_FAKE)
! 		abort ();
! #endif
  
  	      if (e->dest == EXIT_BLOCK_PTR)
  		continue;
--- 498,513 ----
  	  mark_bb_visited (bb, *n_traces);
  	  trace->length++;
  
! 	  if (dump_file)
! 	    fprintf (dump_file, "Basic block %d was visited in trace %d\n",
  		     bb->index, *n_traces - 1);
  
+           ends_in_call = block_ends_with_call_p (bb);
+ 
  	  /* Select the successor that will be placed after BB.  */
! 	  FOR_EACH_EDGE (e, ei, bb->succs)
  	    {
! 	      gcc_assert (!(e->flags & EDGE_FAKE));
  
  	      if (e->dest == EXIT_BLOCK_PTR)
  		continue;
*************** find_traces_1_round (int branch_th, int 
*** 427,442 ****
  		  && e->dest->rbi->visited != *n_traces)
  		continue;
  
  	      prob = e->probability;
  	      freq = EDGE_FREQUENCY (e);
  
  	      /* Edge that cannot be fallthru or improbable or infrequent
! 		 successor (ie. it is unsuitable successor).  */
  	      if (!(e->flags & EDGE_CAN_FALLTHRU) || (e->flags & EDGE_COMPLEX)
  		  || prob < branch_th || freq < exec_th || e->count < count_th)
  		continue;
  
! 	      if (better_edge_p (bb, e, prob, freq, best_prob, best_freq))
  		{
  		  best_edge = e;
  		  best_prob = prob;
--- 516,552 ----
  		  && e->dest->rbi->visited != *n_traces)
  		continue;
  
+ 	      if (BB_PARTITION (e->dest) == BB_COLD_PARTITION
+ 		  && round < last_round)
+ 		continue;
+ 
  	      prob = e->probability;
  	      freq = EDGE_FREQUENCY (e);
  
+ 	      /* The only sensible preference for a call instruction is the
+ 		 fallthru edge.  Don't bother selecting anything else.  */
+ 	      if (ends_in_call)
+ 		{
+ 		  if (e->flags & EDGE_CAN_FALLTHRU)
+ 		    {
+ 		      best_edge = e;
+ 		      best_prob = prob;
+ 		      best_freq = freq;
+ 		    }
+ 		  continue;
+ 		}
+ 
  	      /* Edge that cannot be fallthru or improbable or infrequent
! 		 successor (i.e. it is unsuitable successor).  */
  	      if (!(e->flags & EDGE_CAN_FALLTHRU) || (e->flags & EDGE_COMPLEX)
  		  || prob < branch_th || freq < exec_th || e->count < count_th)
  		continue;
  
! 	      /* If partitioning hot/cold basic blocks, don't consider edges
! 		 that cross section boundaries.  */
! 
! 	      if (better_edge_p (bb, e, prob, freq, best_prob, best_freq,
! 				 best_edge))
  		{
  		  best_edge = e;
  		  best_prob = prob;
*************** find_traces_1_round (int branch_th, int 
*** 447,458 ****
  	  /* If the best destination has multiple predecessors, and can be
  	     duplicated cheaper than a jump, don't allow it to be added
  	     to a trace.  We'll duplicate it when connecting traces.  */
! 	  if (best_edge && best_edge->dest->pred->pred_next
  	      && copy_bb_p (best_edge->dest, 0))
  	    best_edge = NULL;
  
  	  /* Add all non-selected successors to the heaps.  */
! 	  for (e = bb->succ; e; e = e->succ_next)
  	    {
  	      if (e == best_edge
  		  || e->dest == EXIT_BLOCK_PTR
--- 557,568 ----
  	  /* If the best destination has multiple predecessors, and can be
  	     duplicated cheaper than a jump, don't allow it to be added
  	     to a trace.  We'll duplicate it when connecting traces.  */
! 	  if (best_edge && EDGE_COUNT (best_edge->dest->preds) >= 2
  	      && copy_bb_p (best_edge->dest, 0))
  	    best_edge = NULL;
  
  	  /* Add all non-selected successors to the heaps.  */
! 	  FOR_EACH_EDGE (e, ei, bb->succs)
  	    {
  	      if (e == best_edge
  		  || e->dest == EXIT_BLOCK_PTR
*************** find_traces_1_round (int branch_th, int 
*** 466,474 ****
  		  /* E->DEST is already in some heap.  */
  		  if (key != bbd[e->dest->index].node->key)
  		    {
! 		      if (rtl_dump_file)
  			{
! 			  fprintf (rtl_dump_file,
  				   "Changing key for bb %d from %ld to %ld.\n",
  				   e->dest->index,
  				   (long) bbd[e->dest->index].node->key,
--- 576,584 ----
  		  /* E->DEST is already in some heap.  */
  		  if (key != bbd[e->dest->index].node->key)
  		    {
! 		      if (dump_file)
  			{
! 			  fprintf (dump_file,
  				   "Changing key for bb %d from %ld to %ld.\n",
  				   e->dest->index,
  				   (long) bbd[e->dest->index].node->key,
*************** find_traces_1_round (int branch_th, int 
*** 490,496 ****
  		      || prob < branch_th || freq < exec_th
  		      || e->count < count_th)
  		    {
! 		      if (round < N_ROUNDS - 1)
  			which_heap = new_heap;
  		    }
  
--- 600,612 ----
  		      || prob < branch_th || freq < exec_th
  		      || e->count < count_th)
  		    {
! 		      /* When partitioning hot/cold basic blocks, make sure
! 			 the cold blocks (and only the cold blocks) all get
! 			 pushed to the last round of trace collection.  */
! 
! 		      if (push_to_next_round_p (e->dest, round, 
! 						number_of_rounds,
! 						exec_th, count_th))
  			which_heap = new_heap;
  		    }
  
*************** find_traces_1_round (int branch_th, int 
*** 498,506 ****
  		  bbd[e->dest->index].node = fibheap_insert (which_heap,
  								key, e->dest);
  
! 		  if (rtl_dump_file)
  		    {
! 		      fprintf (rtl_dump_file,
  			       "  Possible start of %s round: %d (key: %ld)\n",
  			       (which_heap == new_heap) ? "next" : "this",
  			       e->dest->index, (long) key);
--- 614,622 ----
  		  bbd[e->dest->index].node = fibheap_insert (which_heap,
  								key, e->dest);
  
! 		  if (dump_file)
  		    {
! 		      fprintf (dump_file,
  			       "  Possible start of %s round: %d (key: %ld)\n",
  			       (which_heap == new_heap) ? "next" : "this",
  			       e->dest->index, (long) key);
*************** find_traces_1_round (int branch_th, int 
*** 525,533 ****
  
  			  if (best_edge->dest != ENTRY_BLOCK_PTR->next_bb)
  			    {
! 			      if (rtl_dump_file)
  				{
! 				  fprintf (rtl_dump_file,
  					   "Rotating loop %d - %d\n",
  					   best_edge->dest->index, bb->index);
  				}
--- 641,649 ----
  
  			  if (best_edge->dest != ENTRY_BLOCK_PTR->next_bb)
  			    {
! 			      if (dump_file)
  				{
! 				  fprintf (dump_file,
  					   "Rotating loop %d - %d\n",
  					   best_edge->dest->index, bb->index);
  				}
*************** find_traces_1_round (int branch_th, int 
*** 539,554 ****
  			{
  			  /* The loop has less than 4 iterations.  */
  
! 			  /* Check whether there is another edge from BB.  */
! 			  edge another_edge;
! 			  for (another_edge = bb->succ;
! 			       another_edge;
! 			       another_edge = another_edge->succ_next)
! 			    if (another_edge != best_edge)
! 			      break;
! 
! 			  if (!another_edge && copy_bb_p (best_edge->dest,
! 							  !optimize_size))
  			    {
  			      bb = copy_bb (best_edge->dest, best_edge, bb,
  					    *n_traces);
--- 655,662 ----
  			{
  			  /* The loop has less than 4 iterations.  */
  
! 			  if (EDGE_COUNT (bb->succs) == 1
! 			      && copy_bb_p (best_edge->dest, !optimize_size))
  			    {
  			      bb = copy_bb (best_edge->dest, best_edge, bb,
  					    *n_traces);
*************** find_traces_1_round (int branch_th, int 
*** 582,603 ****
  
  		  */
  
! 		  for (e = bb->succ; e; e = e->succ_next)
  		    if (e != best_edge
  			&& (e->flags & EDGE_CAN_FALLTHRU)
  			&& !(e->flags & EDGE_COMPLEX)
  			&& !e->dest->rbi->visited
! 			&& !e->dest->pred->pred_next
! 			&& e->dest->succ
! 			&& (e->dest->succ->flags & EDGE_CAN_FALLTHRU)
! 			&& !(e->dest->succ->flags & EDGE_COMPLEX)
! 			&& !e->dest->succ->succ_next
! 			&& e->dest->succ->dest == best_edge->dest
  			&& 2 * e->dest->frequency >= EDGE_FREQUENCY (best_edge))
  		      {
  			best_edge = e;
! 			if (rtl_dump_file)
! 			  fprintf (rtl_dump_file, "Selecting BB %d\n",
  				   best_edge->dest->index);
  			break;
  		      }
--- 690,711 ----
  
  		  */
  
! 		  FOR_EACH_EDGE (e, ei, bb->succs)
  		    if (e != best_edge
  			&& (e->flags & EDGE_CAN_FALLTHRU)
  			&& !(e->flags & EDGE_COMPLEX)
  			&& !e->dest->rbi->visited
! 			&& EDGE_COUNT (e->dest->preds) == 1
! 			&& !(e->flags & EDGE_CROSSING)
! 			&& EDGE_COUNT (e->dest->succs) == 1
! 			&& (EDGE_SUCC (e->dest, 0)->flags & EDGE_CAN_FALLTHRU)
! 			&& !(EDGE_SUCC (e->dest, 0)->flags & EDGE_COMPLEX)
! 			&& EDGE_SUCC (e->dest, 0)->dest == best_edge->dest
  			&& 2 * e->dest->frequency >= EDGE_FREQUENCY (best_edge))
  		      {
  			best_edge = e;
! 			if (dump_file)
! 			  fprintf (dump_file, "Selecting BB %d\n",
  				   best_edge->dest->index);
  			break;
  		      }
*************** find_traces_1_round (int branch_th, int 
*** 615,621 ****
        /* The trace is terminated so we have to recount the keys in heap
  	 (some block can have a lower key because now one of its predecessors
  	 is an end of the trace).  */
!       for (e = bb->succ; e; e = e->succ_next)
  	{
  	  if (e->dest == EXIT_BLOCK_PTR
  	      || e->dest->rbi->visited)
--- 723,729 ----
        /* The trace is terminated so we have to recount the keys in heap
  	 (some block can have a lower key because now one of its predecessors
  	 is an end of the trace).  */
!       FOR_EACH_EDGE (e, ei, bb->succs)
  	{
  	  if (e->dest == EXIT_BLOCK_PTR
  	      || e->dest->rbi->visited)
*************** find_traces_1_round (int branch_th, int 
*** 626,634 ****
  	      key = bb_to_key (e->dest);
  	      if (key != bbd[e->dest->index].node->key)
  		{
! 		  if (rtl_dump_file)
  		    {
! 		      fprintf (rtl_dump_file,
  			       "Changing key for bb %d from %ld to %ld.\n",
  			       e->dest->index,
  			       (long) bbd[e->dest->index].node->key, key);
--- 734,742 ----
  	      key = bb_to_key (e->dest);
  	      if (key != bbd[e->dest->index].node->key)
  		{
! 		  if (dump_file)
  		    {
! 		      fprintf (dump_file,
  			       "Changing key for bb %d from %ld to %ld.\n",
  			       e->dest->index,
  			       (long) bbd[e->dest->index].node->key, key);
*************** copy_bb (basic_block old_bb, edge e, bas
*** 656,668 ****
  {
    basic_block new_bb;
  
!   new_bb = cfg_layout_duplicate_bb (old_bb, e);
!   if (e->dest != new_bb)
!     abort ();
!   if (e->dest->rbi->visited)
!     abort ();
!   if (rtl_dump_file)
!     fprintf (rtl_dump_file,
  	     "Duplicated bb %d (created bb %d)\n",
  	     old_bb->index, new_bb->index);
    new_bb->rbi->visited = trace;
--- 764,777 ----
  {
    basic_block new_bb;
  
!   new_bb = duplicate_block (old_bb, e);
!   BB_COPY_PARTITION (new_bb, old_bb);
! 
!   gcc_assert (e->dest == new_bb);
!   gcc_assert (!e->dest->rbi->visited);
! 
!   if (dump_file)
!     fprintf (dump_file,
  	     "Duplicated bb %d (created bb %d)\n",
  	     old_bb->index, new_bb->index);
    new_bb->rbi->visited = trace;
*************** copy_bb (basic_block old_bb, edge e, bas
*** 686,694 ****
  	}
        array_size = new_size;
  
!       if (rtl_dump_file)
  	{
! 	  fprintf (rtl_dump_file,
  		   "Growing the dynamic array to %d elements.\n",
  		   array_size);
  	}
--- 795,803 ----
  	}
        array_size = new_size;
  
!       if (dump_file)
  	{
! 	  fprintf (dump_file,
  		   "Growing the dynamic array to %d elements.\n",
  		   array_size);
  	}
*************** static fibheapkey_t
*** 703,718 ****
  bb_to_key (basic_block bb)
  {
    edge e;
! 
    int priority = 0;
  
    /* Do not start in probably never executed blocks.  */
!   if (probably_never_executed_bb_p (bb))
      return BB_FREQ_MAX;
  
    /* Prefer blocks whose predecessor is an end of some trace
       or whose predecessor edge is EDGE_DFS_BACK.  */
!   for (e = bb->pred; e; e = e->pred_next)
      {
        if ((e->src != ENTRY_BLOCK_PTR && bbd[e->src->index].end_of_trace >= 0)
  	  || (e->flags & EDGE_DFS_BACK))
--- 812,829 ----
  bb_to_key (basic_block bb)
  {
    edge e;
!   edge_iterator ei;
    int priority = 0;
  
    /* Do not start in probably never executed blocks.  */
! 
!   if (BB_PARTITION (bb) == BB_COLD_PARTITION
!       || probably_never_executed_bb_p (bb))
      return BB_FREQ_MAX;
  
    /* Prefer blocks whose predecessor is an end of some trace
       or whose predecessor edge is EDGE_DFS_BACK.  */
!   FOR_EACH_EDGE (e, ei, bb->preds)
      {
        if ((e->src != ENTRY_BLOCK_PTR && bbd[e->src->index].end_of_trace >= 0)
  	  || (e->flags & EDGE_DFS_BACK))
*************** bb_to_key (basic_block bb)
*** 739,745 ****
  
  static bool
  better_edge_p (basic_block bb, edge e, int prob, int freq, int best_prob,
! 	       int best_freq)
  {
    bool is_better_edge;
  
--- 850,856 ----
  
  static bool
  better_edge_p (basic_block bb, edge e, int prob, int freq, int best_prob,
! 	       int best_freq, edge cur_best_edge)
  {
    bool is_better_edge;
  
*************** better_edge_p (basic_block bb, edge e, i
*** 770,775 ****
--- 881,896 ----
    else
      is_better_edge = false;
  
+   /* If we are doing hot/cold partitioning, make sure that we always favor
+      non-crossing edges over crossing edges.  */
+ 
+   if (!is_better_edge
+       && flag_reorder_blocks_and_partition 
+       && cur_best_edge 
+       && (cur_best_edge->flags & EDGE_CROSSING)
+       && !(e->flags & EDGE_CROSSING))
+     is_better_edge = true;
+ 
    return is_better_edge;
  }
  
*************** static void
*** 779,785 ****
--- 900,909 ----
  connect_traces (int n_traces, struct trace *traces)
  {
    int i;
+   int unconnected_hot_trace_count = 0;
+   bool cold_connected = true;
    bool *connected;
+   bool *cold_traces;
    int last_trace;
    int freq_threshold;
    gcov_type count_threshold;
*************** connect_traces (int n_traces, struct tra
*** 792,815 ****
  
    connected = xcalloc (n_traces, sizeof (bool));
    last_trace = -1;
!   for (i = 0; i < n_traces; i++)
      {
        int t = i;
        int t2;
        edge e, best;
        int best_len;
  
        if (connected[t])
  	continue;
  
        connected[t] = true;
  
        /* Find the predecessor traces.  */
        for (t2 = t; t2 > 0;)
  	{
  	  best = NULL;
  	  best_len = 0;
! 	  for (e = traces[t2].first->pred; e; e = e->pred_next)
  	    {
  	      int si = e->src->index;
  
--- 916,989 ----
  
    connected = xcalloc (n_traces, sizeof (bool));
    last_trace = -1;
! 
!   /* If we are partitioning hot/cold basic blocks, mark the cold
!      traces as already connected, to remove them from consideration
!      for connection to the hot traces.  After the hot traces have all
!      been connected (determined by "unconnected_hot_trace_count"), we
!      will go back and connect the cold traces.  */
! 
!   cold_traces = xcalloc (n_traces, sizeof (bool));
! 
!   if (flag_reorder_blocks_and_partition)
!     for (i = 0; i < n_traces; i++)
!       {
! 	if (BB_PARTITION (traces[i].first) == BB_COLD_PARTITION)
! 	  {
! 	    connected[i] = true;
! 	    cold_traces[i] = true;
! 	    cold_connected = false;
! 	  }
! 	else
! 	  unconnected_hot_trace_count++;
!       }
!   
!   for (i = 0; i < n_traces || !cold_connected ; i++)
      {
        int t = i;
        int t2;
        edge e, best;
        int best_len;
  
+       /* If we are partitioning hot/cold basic blocks, check to see
+ 	 if all the hot traces have been connected.  If so, go back
+ 	 and mark the cold traces as unconnected so we can connect
+ 	 them up too.  Re-set "i" to the first (unconnected) cold
+ 	 trace. Use flag "cold_connected" to make sure we don't do
+          this step more than once.  */
+ 
+       if (flag_reorder_blocks_and_partition
+ 	  && (i >= n_traces || unconnected_hot_trace_count <= 0)
+ 	  && !cold_connected)
+ 	{
+ 	  int j;
+ 	  int first_cold_trace = -1;
+ 
+ 	  for (j = 0; j < n_traces; j++)
+ 	    if (cold_traces[j])
+ 	      {
+ 		connected[j] = false;
+ 		if (first_cold_trace == -1)
+ 		  first_cold_trace = j;
+ 	      }
+ 	  i = t = first_cold_trace;
+ 	  cold_connected = true;
+ 	}
+ 
        if (connected[t])
  	continue;
  
        connected[t] = true;
+       if (unconnected_hot_trace_count > 0)
+ 	unconnected_hot_trace_count--;
  
        /* Find the predecessor traces.  */
        for (t2 = t; t2 > 0;)
  	{
+ 	  edge_iterator ei;
  	  best = NULL;
  	  best_len = 0;
! 	  FOR_EACH_EDGE (e, ei, traces[t2].first->preds)
  	    {
  	      int si = e->src->index;
  
*************** connect_traces (int n_traces, struct tra
*** 832,840 ****
  	      best->src->rbi->next = best->dest;
  	      t2 = bbd[best->src->index].end_of_trace;
  	      connected[t2] = true;
! 	      if (rtl_dump_file)
  		{
! 		  fprintf (rtl_dump_file, "Connection: %d %d\n",
  			   best->src->index, best->dest->index);
  		}
  	    }
--- 1006,1018 ----
  	      best->src->rbi->next = best->dest;
  	      t2 = bbd[best->src->index].end_of_trace;
  	      connected[t2] = true;
! 
! 	      if (unconnected_hot_trace_count > 0)
! 		unconnected_hot_trace_count--;
! 
! 	      if (dump_file)
  		{
! 		  fprintf (dump_file, "Connection: %d %d\n",
  			   best->src->index, best->dest->index);
  		}
  	    }
*************** connect_traces (int n_traces, struct tra
*** 850,858 ****
        while (1)
  	{
  	  /* Find the continuation of the chain.  */
  	  best = NULL;
  	  best_len = 0;
! 	  for (e = traces[t].last->succ; e; e = e->succ_next)
  	    {
  	      int di = e->dest->index;
  
--- 1028,1037 ----
        while (1)
  	{
  	  /* Find the continuation of the chain.  */
+ 	  edge_iterator ei;
  	  best = NULL;
  	  best_len = 0;
! 	  FOR_EACH_EDGE (e, ei, traces[t].last->succs)
  	    {
  	      int di = e->dest->index;
  
*************** connect_traces (int n_traces, struct tra
*** 873,886 ****
  
  	  if (best)
  	    {
! 	      if (rtl_dump_file)
  		{
! 		  fprintf (rtl_dump_file, "Connection: %d %d\n",
  			   best->src->index, best->dest->index);
  		}
  	      t = bbd[best->dest->index].start_of_trace;
  	      traces[last_trace].last->rbi->next = traces[t].first;
  	      connected[t] = true;
  	      last_trace = t;
  	    }
  	  else
--- 1052,1067 ----
  
  	  if (best)
  	    {
! 	      if (dump_file)
  		{
! 		  fprintf (dump_file, "Connection: %d %d\n",
  			   best->src->index, best->dest->index);
  		}
  	      t = bbd[best->dest->index].start_of_trace;
  	      traces[last_trace].last->rbi->next = traces[t].first;
  	      connected[t] = true;
+ 	      if (unconnected_hot_trace_count > 0)
+ 		unconnected_hot_trace_count--;
  	      last_trace = t;
  	    }
  	  else
*************** connect_traces (int n_traces, struct tra
*** 890,901 ****
  	      basic_block next_bb = NULL;
  	      bool try_copy = false;
  
! 	      for (e = traces[t].last->succ; e; e = e->succ_next)
  		if (e->dest != EXIT_BLOCK_PTR
  		    && (e->flags & EDGE_CAN_FALLTHRU)
  		    && !(e->flags & EDGE_COMPLEX)
  		    && (!best || e->probability > best->probability))
  		  {
  		    edge best2 = NULL;
  		    int best2_len = 0;
  
--- 1071,1083 ----
  	      basic_block next_bb = NULL;
  	      bool try_copy = false;
  
! 	      FOR_EACH_EDGE (e, ei, traces[t].last->succs)
  		if (e->dest != EXIT_BLOCK_PTR
  		    && (e->flags & EDGE_CAN_FALLTHRU)
  		    && !(e->flags & EDGE_COMPLEX)
  		    && (!best || e->probability > best->probability))
  		  {
+ 		    edge_iterator ei;
  		    edge best2 = NULL;
  		    int best2_len = 0;
  
*************** connect_traces (int n_traces, struct tra
*** 911,917 ****
  			continue;
  		      }
  
! 		    for (e2 = e->dest->succ; e2; e2 = e2->succ_next)
  		      {
  			int di = e2->dest->index;
  
--- 1093,1099 ----
  			continue;
  		      }
  
! 		    FOR_EACH_EDGE (e2, ei, e->dest->succs)
  		      {
  			int di = e2->dest->index;
  
*************** connect_traces (int n_traces, struct tra
*** 940,945 ****
--- 1122,1130 ----
  		      }
  		  }
  
+ 	      if (flag_reorder_blocks_and_partition)
+ 		try_copy = false;
+ 
  	      /* Copy tiny blocks always; copy larger blocks only when the
  		 edge is traversed frequently enough.  */
  	      if (try_copy
*************** connect_traces (int n_traces, struct tra
*** 950,965 ****
  		{
  		  basic_block new_bb;
  
! 		  if (rtl_dump_file)
  		    {
! 		      fprintf (rtl_dump_file, "Connection: %d %d ",
  			       traces[t].last->index, best->dest->index);
  		      if (!next_bb)
! 			fputc ('\n', rtl_dump_file);
  		      else if (next_bb == EXIT_BLOCK_PTR)
! 			fprintf (rtl_dump_file, "exit\n");
  		      else
! 			fprintf (rtl_dump_file, "%d\n", next_bb->index);
  		    }
  
  		  new_bb = copy_bb (best->dest, best, traces[t].last, t);
--- 1135,1150 ----
  		{
  		  basic_block new_bb;
  
! 		  if (dump_file)
  		    {
! 		      fprintf (dump_file, "Connection: %d %d ",
  			       traces[t].last->index, best->dest->index);
  		      if (!next_bb)
! 			fputc ('\n', dump_file);
  		      else if (next_bb == EXIT_BLOCK_PTR)
! 			fprintf (dump_file, "exit\n");
  		      else
! 			fprintf (dump_file, "%d\n", next_bb->index);
  		    }
  
  		  new_bb = copy_bb (best->dest, best, traces[t].last, t);
*************** connect_traces (int n_traces, struct tra
*** 969,974 ****
--- 1154,1161 ----
  		      t = bbd[next_bb->index].start_of_trace;
  		      traces[last_trace].last->rbi->next = traces[t].first;
  		      connected[t] = true;
+ 		      if (unconnected_hot_trace_count > 0)
+ 			unconnected_hot_trace_count--;
  		      last_trace = t;
  		    }
  		  else
*************** connect_traces (int n_traces, struct tra
*** 980,997 ****
  	}
      }
  
!   if (rtl_dump_file)
      {
        basic_block bb;
  
!       fprintf (rtl_dump_file, "Final order:\n");
        for (bb = traces[0].first; bb; bb = bb->rbi->next)
! 	fprintf (rtl_dump_file, "%d ", bb->index);
!       fprintf (rtl_dump_file, "\n");
!       fflush (rtl_dump_file);
      }
  
    FREE (connected);
  }
  
  /* Return true when BB can and should be copied. CODE_MAY_GROW is true
--- 1167,1185 ----
  	}
      }
  
!   if (dump_file)
      {
        basic_block bb;
  
!       fprintf (dump_file, "Final order:\n");
        for (bb = traces[0].first; bb; bb = bb->rbi->next)
! 	fprintf (dump_file, "%d ", bb->index);
!       fprintf (dump_file, "\n");
!       fflush (dump_file);
      }
  
    FREE (connected);
+   FREE (cold_traces);
  }
  
  /* Return true when BB can and should be copied. CODE_MAY_GROW is true
*************** copy_bb_p (basic_block bb, int code_may_
*** 1003,1032 ****
    int size = 0;
    int max_size = uncond_jump_length;
    rtx insn;
-   int n_succ;
-   edge e;
  
    if (!bb->frequency)
      return false;
!   if (!bb->pred || !bb->pred->pred_next)
      return false;
!   if (!cfg_layout_can_duplicate_bb_p (bb))
      return false;
  
    /* Avoid duplicating blocks which have many successors (PR/13430).  */
!   n_succ = 0;
!   for (e = bb->succ; e; e = e->succ_next)
!     {
!       n_succ++;
!       if (n_succ > 8)
! 	return false;
!     }
  
    if (code_may_grow && maybe_hot_bb_p (bb))
      max_size *= 8;
  
!   for (insn = BB_HEAD (bb); insn != NEXT_INSN (BB_END (bb));
!        insn = NEXT_INSN (insn))
      {
        if (INSN_P (insn))
  	size += get_attr_length (insn);
--- 1191,1212 ----
    int size = 0;
    int max_size = uncond_jump_length;
    rtx insn;
  
    if (!bb->frequency)
      return false;
!   if (EDGE_COUNT (bb->preds) < 2)
      return false;
!   if (!can_duplicate_block_p (bb))
      return false;
  
    /* Avoid duplicating blocks which have many successors (PR/13430).  */
!   if (EDGE_COUNT (bb->succs) > 8)
!     return false;
  
    if (code_may_grow && maybe_hot_bb_p (bb))
      max_size *= 8;
  
!   FOR_BB_INSNS (bb, insn)
      {
        if (INSN_P (insn))
  	size += get_attr_length (insn);
*************** copy_bb_p (basic_block bb, int code_may_
*** 1035,1043 ****
    if (size <= max_size)
      return true;
  
!   if (rtl_dump_file)
      {
!       fprintf (rtl_dump_file,
  	       "Block %d can't be copied because its size = %d.\n",
  	       bb->index, size);
      }
--- 1215,1223 ----
    if (size <= max_size)
      return true;
  
!   if (dump_file)
      {
!       fprintf (dump_file,
  	       "Block %d can't be copied because its size = %d.\n",
  	       bb->index, size);
      }
*************** get_uncond_jump_length (void)
*** 1063,1068 ****
--- 1243,1948 ----
    return length;
  }
  
+ static void
+ add_unlikely_executed_notes (void)
+ {
+   basic_block bb;
+ 
+   /* Add the UNLIKELY_EXECUTED_NOTES to each cold basic block.  */
+ 
+   FOR_EACH_BB (bb)
+     if (BB_PARTITION (bb) == BB_COLD_PARTITION)
+       mark_bb_for_unlikely_executed_section (bb);
+ }
+ 
+ /* Find the basic blocks that are rarely executed and need to be moved to
+    a separate section of the .o file (to cut down on paging and improve
+    cache locality).  */
+ 
+ static void
+ find_rarely_executed_basic_blocks_and_crossing_edges (edge *crossing_edges, 
+ 						      int *n_crossing_edges, 
+ 						      int *max_idx)
+ {
+   basic_block bb;
+   bool has_hot_blocks = false;
+   edge e;
+   int i;
+   edge_iterator ei;
+ 
+   /* Mark which partition (hot/cold) each basic block belongs in.  */
+   
+   FOR_EACH_BB (bb)
+     {
+       if (probably_never_executed_bb_p (bb))
+ 	BB_SET_PARTITION (bb, BB_COLD_PARTITION);
+       else
+ 	{
+ 	  BB_SET_PARTITION (bb, BB_HOT_PARTITION);
+ 	  has_hot_blocks = true;
+ 	}
+     }
+ 
+   /* Since all "hot" basic blocks will eventually be scheduled before all
+      cold basic blocks, make *sure* the real function entry block is in
+      the hot partition (if there is one).  */
+   
+   if (has_hot_blocks)
+     FOR_EACH_EDGE (e, ei, ENTRY_BLOCK_PTR->succs)
+       if (e->dest->index >= 0)
+ 	{
+ 	  BB_SET_PARTITION (e->dest, BB_HOT_PARTITION);
+ 	  break;
+ 	}
+ 
+   /* Mark every edge that crosses between sections.  */
+ 
+   i = 0;
+   if (targetm.have_named_sections)
+     {
+       FOR_EACH_BB (bb)
+         FOR_EACH_EDGE (e, ei, bb->succs)
+ 	  {
+ 	    if (e->src != ENTRY_BLOCK_PTR
+ 		&& e->dest != EXIT_BLOCK_PTR
+ 		&& BB_PARTITION (e->src) != BB_PARTITION (e->dest))
+ 	      {
+ 		e->flags |= EDGE_CROSSING;
+ 		if (i == *max_idx)
+ 		  {
+ 		    *max_idx *= 2;
+ 		    crossing_edges = xrealloc (crossing_edges,
+ 					       (*max_idx) * sizeof (edge));
+ 		  }
+ 		crossing_edges[i++] = e;
+ 	      }
+ 	    else
+ 	      e->flags &= ~EDGE_CROSSING;
+ 	  }
+     }
+   *n_crossing_edges = i;
+ }
+ 
+ /* Add NOTE_INSN_UNLIKELY_EXECUTED_CODE to top of basic block.   This note
+    is later used to mark the basic block to be put in the 
+    unlikely-to-be-executed section of the .o file.  */
+ 
+ static void
+ mark_bb_for_unlikely_executed_section (basic_block bb) 
+ {
+   rtx cur_insn;
+   rtx insert_insn = NULL;
+   rtx new_note;
+   
+   /* Insert new NOTE immediately after  BASIC_BLOCK note.  */
+ 
+   for (cur_insn = BB_HEAD (bb); cur_insn != NEXT_INSN (BB_END (bb));
+        cur_insn = NEXT_INSN (cur_insn))
+     if (GET_CODE (cur_insn) == NOTE
+ 	&& NOTE_LINE_NUMBER (cur_insn) == NOTE_INSN_BASIC_BLOCK)
+       {
+ 	insert_insn = cur_insn;
+ 	break;
+       }
+     
+   /* If basic block does not contain a NOTE_INSN_BASIC_BLOCK, there is
+      a major problem.  */
+   gcc_assert (insert_insn);
+ 
+   /* Insert note and assign basic block number to it.  */
+   
+   new_note = emit_note_after (NOTE_INSN_UNLIKELY_EXECUTED_CODE, 
+ 			      insert_insn);
+   NOTE_BASIC_BLOCK (new_note) = bb;
+ }
+ 
+ /* If any destination of a crossing edge does not have a label, add label;
+    Convert any fall-through crossing edges (for blocks that do not contain
+    a jump) to unconditional jumps.  */
+ 
+ static void 
+ add_labels_and_missing_jumps (edge *crossing_edges, int n_crossing_edges)
+ {
+   int i;
+   basic_block src;
+   basic_block dest;
+   rtx label;
+   rtx barrier;
+   rtx new_jump;
+   
+   for (i=0; i < n_crossing_edges; i++) 
+     {
+       if (crossing_edges[i]) 
+   	{
+   	  src = crossing_edges[i]->src; 
+   	  dest = crossing_edges[i]->dest;
+  	  
+   	  /* Make sure dest has a label.  */
+   	  
+   	  if (dest && (dest != EXIT_BLOCK_PTR))
+   	    {
+ 	      label = block_label (dest);
+ 	      
+  	      /* Make sure source block ends with a jump.  */
+ 	      
+  	      if (src && (src != ENTRY_BLOCK_PTR)) 
+  		{
+ 		  if (!JUMP_P (BB_END (src)))
+  		    /* bb just falls through.  */
+  		    {
+  		      /* make sure there's only one successor */
+ 		      gcc_assert (EDGE_COUNT (src->succs) == 1);
+ 		      
+ 		      /* Find label in dest block.  */
+ 		      label = block_label (dest);
+ 		      
+ 		      new_jump = emit_jump_insn_after (gen_jump (label), 
+ 						       BB_END (src));
+ 		      barrier = emit_barrier_after (new_jump);
+ 		      JUMP_LABEL (new_jump) = label;
+ 		      LABEL_NUSES (label) += 1;
+ 		      src->rbi->footer = unlink_insn_chain (barrier, barrier);
+ 		      /* Mark edge as non-fallthru.  */
+ 		      crossing_edges[i]->flags &= ~EDGE_FALLTHRU;
+  		    } /* end: 'if (GET_CODE ... '  */
+  		} /* end: 'if (src && src->index...'  */
+   	    } /* end: 'if (dest && dest->index...'  */
+   	} /* end: 'if (crossing_edges[i]...'  */
+     } /* end for loop  */
+ }
+ 
+ /* Find any bb's where the fall-through edge is a crossing edge (note that
+    these bb's must also contain a conditional jump; we've already
+    dealt with fall-through edges for blocks that didn't have a
+    conditional jump in the call to add_labels_and_missing_jumps).
+    Convert the fall-through edge to non-crossing edge by inserting a
+    new bb to fall-through into.  The new bb will contain an
+    unconditional jump (crossing edge) to the original fall through
+    destination.  */
+ 
+ static void 
+ fix_up_fall_thru_edges (void)
+ {
+   basic_block cur_bb;
+   basic_block new_bb;
+   edge succ1;
+   edge succ2;
+   edge fall_thru;
+   edge cond_jump = NULL;
+   edge e;
+   bool cond_jump_crosses;
+   int invert_worked;
+   rtx old_jump;
+   rtx fall_thru_label;
+   rtx barrier;
+   
+   FOR_EACH_BB (cur_bb)
+     {
+       fall_thru = NULL;
+       if (EDGE_COUNT (cur_bb->succs) > 0)
+ 	succ1 = EDGE_SUCC (cur_bb, 0);
+       else
+ 	succ1 = NULL;
+ 
+       if (EDGE_COUNT (cur_bb->succs) > 1)
+   	succ2 = EDGE_SUCC (cur_bb, 1);
+       else
+   	succ2 = NULL;
+       
+       /* Find the fall-through edge.  */
+       
+       if (succ1 
+  	  && (succ1->flags & EDGE_FALLTHRU))
+  	{
+  	  fall_thru = succ1;
+  	  cond_jump = succ2;
+  	}
+       else if (succ2 
+  	       && (succ2->flags & EDGE_FALLTHRU))
+  	{
+  	  fall_thru = succ2;
+  	  cond_jump = succ1;
+  	}
+       
+       if (fall_thru && (fall_thru->dest != EXIT_BLOCK_PTR))
+   	{
+   	  /* Check to see if the fall-thru edge is a crossing edge.  */
+ 	
+ 	  if (fall_thru->flags & EDGE_CROSSING)
+   	    {
+ 	      /* The fall_thru edge crosses; now check the cond jump edge, if
+ 	         it exists.  */
+ 	      
+  	      cond_jump_crosses = true;
+  	      invert_worked  = 0;
+ 	      old_jump = BB_END (cur_bb);
+ 	      
+  	      /* Find the jump instruction, if there is one.  */
+ 	      
+  	      if (cond_jump)
+  		{
+ 		  if (!(cond_jump->flags & EDGE_CROSSING))
+  		    cond_jump_crosses = false;
+ 		  
+  		  /* We know the fall-thru edge crosses; if the cond
+  		     jump edge does NOT cross, and its destination is the
+ 		     next block in the bb order, invert the jump
+  		     (i.e. fix it so the fall thru does not cross and
+  		     the cond jump does).  */
+  		  
+ 		  if (!cond_jump_crosses
+ 		      && cur_bb->rbi->next == cond_jump->dest)
+  		    {
+  		      /* Find label in fall_thru block. We've already added
+  		         any missing labels, so there must be one.  */
+  		      
+  		      fall_thru_label = block_label (fall_thru->dest);
+ 
+  		      if (old_jump && fall_thru_label)
+  			invert_worked = invert_jump (old_jump, 
+  						     fall_thru_label,0);
+  		      if (invert_worked)
+  			{
+  			  fall_thru->flags &= ~EDGE_FALLTHRU;
+  			  cond_jump->flags |= EDGE_FALLTHRU;
+  			  update_br_prob_note (cur_bb);
+  			  e = fall_thru;
+  			  fall_thru = cond_jump;
+  			  cond_jump = e;
+ 			  cond_jump->flags |= EDGE_CROSSING;
+ 			  fall_thru->flags &= ~EDGE_CROSSING;
+  			}
+  		    }
+  		}
+ 	      
+  	      if (cond_jump_crosses || !invert_worked)
+  		{
+  		  /* This is the case where both edges out of the basic
+  		     block are crossing edges. Here we will fix up the
+ 		     fall through edge. The jump edge will be taken care
+ 		     of later.  */
+ 		  
+  		  new_bb = force_nonfallthru (fall_thru);  
+ 		  
+  		  if (new_bb)
+  		    {
+  		      new_bb->rbi->next = cur_bb->rbi->next;
+  		      cur_bb->rbi->next = new_bb;
+ 		      
+  		      /* Make sure new fall-through bb is in same 
+ 			 partition as bb it's falling through from.  */
+ 
+ 		      BB_COPY_PARTITION (new_bb, cur_bb);
+ 		      EDGE_SUCC (new_bb, 0)->flags |= EDGE_CROSSING;
+  		    }
+ 		  
+  		  /* Add barrier after new jump */
+ 		  
+  		  if (new_bb)
+  		    {
+  		      barrier = emit_barrier_after (BB_END (new_bb));
+  		      new_bb->rbi->footer = unlink_insn_chain (barrier, 
+  							       barrier);
+  		    }
+  		  else
+  		    {
+  		      barrier = emit_barrier_after (BB_END (cur_bb));
+  		      cur_bb->rbi->footer = unlink_insn_chain (barrier,
+  							       barrier);
+  		    }
+  		}
+   	    }
+   	}
+     }
+ }
+ 
+ /* This function checks the destination blockof a "crossing jump" to
+    see if it has any crossing predecessors that begin with a code label
+    and end with an unconditional jump.  If so, it returns that predecessor
+    block.  (This is to avoid creating lots of new basic blocks that all
+    contain unconditional jumps to the same destination).  */
+ 
+ static basic_block
+ find_jump_block (basic_block jump_dest) 
+ { 
+   basic_block source_bb = NULL; 
+   edge e;
+   rtx insn;
+   edge_iterator ei;
+ 
+   FOR_EACH_EDGE (e, ei, jump_dest->preds)
+     if (e->flags & EDGE_CROSSING)
+       {
+ 	basic_block src = e->src;
+ 	
+ 	/* Check each predecessor to see if it has a label, and contains
+ 	   only one executable instruction, which is an unconditional jump.
+ 	   If so, we can use it.  */
+ 	
+ 	if (LABEL_P (BB_HEAD (src)))
+ 	  for (insn = BB_HEAD (src); 
+ 	       !INSN_P (insn) && insn != NEXT_INSN (BB_END (src));
+ 	       insn = NEXT_INSN (insn))
+ 	    {
+ 	      if (INSN_P (insn)
+ 		  && insn == BB_END (src)
+ 		  && JUMP_P (insn)
+ 		  && !any_condjump_p (insn))
+ 		{
+ 		  source_bb = src;
+ 		  break;
+ 		}
+ 	    }
+ 	
+ 	if (source_bb)
+ 	  break;
+       }
+ 
+   return source_bb;
+ }
+ 
+ /* Find all BB's with conditional jumps that are crossing edges;
+    insert a new bb and make the conditional jump branch to the new
+    bb instead (make the new bb same color so conditional branch won't
+    be a 'crossing' edge).  Insert an unconditional jump from the
+    new bb to the original destination of the conditional jump.  */
+ 
+ static void
+ fix_crossing_conditional_branches (void)
+ {
+   basic_block cur_bb;
+   basic_block new_bb;
+   basic_block last_bb;
+   basic_block dest;
+   basic_block prev_bb;
+   edge succ1;
+   edge succ2;
+   edge crossing_edge;
+   edge new_edge;
+   rtx old_jump;
+   rtx set_src;
+   rtx old_label = NULL_RTX;
+   rtx new_label;
+   rtx new_jump;
+   rtx barrier;
+ 
+  last_bb = EXIT_BLOCK_PTR->prev_bb;
+   
+   FOR_EACH_BB (cur_bb)
+     {
+       crossing_edge = NULL;
+       if (EDGE_COUNT (cur_bb->succs) > 0)
+ 	succ1 = EDGE_SUCC (cur_bb, 0);
+       else
+ 	succ1 = NULL;
+     
+       if (EDGE_COUNT (cur_bb->succs) > 1)
+ 	succ2 = EDGE_SUCC (cur_bb, 1);
+       else
+ 	succ2 = NULL;
+       
+       /* We already took care of fall-through edges, so only one successor
+ 	 can be a crossing edge.  */
+       
+       if (succ1 && (succ1->flags & EDGE_CROSSING))
+ 	crossing_edge = succ1;
+       else if (succ2 && (succ2->flags & EDGE_CROSSING))
+  	crossing_edge = succ2;
+       
+       if (crossing_edge) 
+  	{
+ 	  old_jump = BB_END (cur_bb);
+ 	  
+ 	  /* Check to make sure the jump instruction is a
+ 	     conditional jump.  */
+ 	  
+ 	  set_src = NULL_RTX;
+ 
+ 	  if (any_condjump_p (old_jump))
+ 	    {
+ 	      if (GET_CODE (PATTERN (old_jump)) == SET)
+ 		set_src = SET_SRC (PATTERN (old_jump));
+ 	      else if (GET_CODE (PATTERN (old_jump)) == PARALLEL)
+ 		{
+ 		  set_src = XVECEXP (PATTERN (old_jump), 0,0);
+ 		  if (GET_CODE (set_src) == SET)
+ 		    set_src = SET_SRC (set_src);
+ 		  else
+ 		    set_src = NULL_RTX;
+ 		}
+ 	    }
+ 
+ 	  if (set_src && (GET_CODE (set_src) == IF_THEN_ELSE))
+ 	    {
+ 	      if (GET_CODE (XEXP (set_src, 1)) == PC)
+ 		old_label = XEXP (set_src, 2);
+ 	      else if (GET_CODE (XEXP (set_src, 2)) == PC)
+ 		old_label = XEXP (set_src, 1);
+ 	      
+ 	      /* Check to see if new bb for jumping to that dest has
+ 		 already been created; if so, use it; if not, create
+ 		 a new one.  */
+ 
+ 	      new_bb = find_jump_block (crossing_edge->dest);
+ 	      
+ 	      if (new_bb)
+ 		new_label = block_label (new_bb);
+ 	      else
+ 		{
+ 		  /* Create new basic block to be dest for
+ 		     conditional jump.  */
+ 		  
+ 		  new_bb = create_basic_block (NULL, NULL, last_bb);
+ 		  new_bb->rbi->next = last_bb->rbi->next;
+ 		  last_bb->rbi->next = new_bb;
+ 		  prev_bb = last_bb;
+ 		  last_bb = new_bb;
+ 		  
+ 		  /* Update register liveness information.  */
+ 		  
+ 		  new_bb->global_live_at_start = ALLOC_REG_SET (&reg_obstack);
+ 		  new_bb->global_live_at_end = ALLOC_REG_SET (&reg_obstack);
+ 		  COPY_REG_SET (new_bb->global_live_at_end,
+ 				prev_bb->global_live_at_end);
+ 		  COPY_REG_SET (new_bb->global_live_at_start,
+ 				prev_bb->global_live_at_end);
+ 		  
+ 		  /* Put appropriate instructions in new bb.  */
+ 		  
+ 		  new_label = gen_label_rtx ();
+ 		  emit_label_before (new_label, BB_HEAD (new_bb));
+ 		  BB_HEAD (new_bb) = new_label;
+ 		  
+ 		  if (GET_CODE (old_label) == LABEL_REF)
+ 		    {
+ 		      old_label = JUMP_LABEL (old_jump);
+ 		      new_jump = emit_jump_insn_after (gen_jump 
+ 						       (old_label), 
+ 						       BB_END (new_bb));
+ 		    }
+ 		  else
+ 		    {
+ 		      gcc_assert (HAVE_return
+ 				  && GET_CODE (old_label) == RETURN);
+ 		      new_jump = emit_jump_insn_after (gen_return (), 
+ 						       BB_END (new_bb));
+ 		    }
+ 		  
+ 		  barrier = emit_barrier_after (new_jump);
+ 		  JUMP_LABEL (new_jump) = old_label;
+ 		  new_bb->rbi->footer = unlink_insn_chain (barrier, 
+ 							   barrier);
+ 		  
+ 		  /* Make sure new bb is in same partition as source
+ 		     of conditional branch.  */
+ 		  BB_COPY_PARTITION (new_bb, cur_bb);
+ 		}
+ 	      
+ 	      /* Make old jump branch to new bb.  */
+ 	      
+ 	      redirect_jump (old_jump, new_label, 0);
+ 	      
+ 	      /* Remove crossing_edge as predecessor of 'dest'.  */
+ 	      
+ 	      dest = crossing_edge->dest;
+ 	      
+ 	      redirect_edge_succ (crossing_edge, new_bb);
+ 	      
+ 	      /* Make a new edge from new_bb to old dest; new edge
+ 		 will be a successor for new_bb and a predecessor
+ 		 for 'dest'.  */
+ 	      
+ 	      if (EDGE_COUNT (new_bb->succs) == 0)
+ 		new_edge = make_edge (new_bb, dest, 0);
+ 	      else
+ 		new_edge = EDGE_SUCC (new_bb, 0);
+ 	      
+ 	      crossing_edge->flags &= ~EDGE_CROSSING;
+ 	      new_edge->flags |= EDGE_CROSSING;
+ 	    }
+  	}
+     }
+ }
+ 
+ /* Find any unconditional branches that cross between hot and cold
+    sections.  Convert them into indirect jumps instead.  */
+ 
+ static void
+ fix_crossing_unconditional_branches (void)
+ {
+   basic_block cur_bb;
+   rtx last_insn;
+   rtx label;
+   rtx label_addr;
+   rtx indirect_jump_sequence;
+   rtx jump_insn = NULL_RTX;
+   rtx new_reg;
+   rtx cur_insn;
+   edge succ;
+ 
+   FOR_EACH_BB (cur_bb)
+     {
+       last_insn = BB_END (cur_bb);
+       succ = EDGE_SUCC (cur_bb, 0);
+ 
+       /* Check to see if bb ends in a crossing (unconditional) jump.  At
+          this point, no crossing jumps should be conditional.  */
+ 
+       if (JUMP_P (last_insn)
+ 	  && (succ->flags & EDGE_CROSSING))
+ 	{
+ 	  rtx label2, table;
+ 
+ 	  gcc_assert (!any_condjump_p (last_insn));
+ 
+ 	  /* Make sure the jump is not already an indirect or table jump.  */
+ 
+ 	  if (!computed_jump_p (last_insn)
+ 	      && !tablejump_p (last_insn, &label2, &table))
+ 	    {
+ 	      /* We have found a "crossing" unconditional branch.  Now
+ 		 we must convert it to an indirect jump.  First create
+ 		 reference of label, as target for jump.  */
+ 	      
+ 	      label = JUMP_LABEL (last_insn);
+ 	      label_addr = gen_rtx_LABEL_REF (Pmode, label);
+ 	      LABEL_NUSES (label) += 1;
+ 	      
+ 	      /* Get a register to use for the indirect jump.  */
+ 	      
+ 	      new_reg = gen_reg_rtx (Pmode);
+ 	      
+ 	      /* Generate indirect the jump sequence.  */
+ 	      
+ 	      start_sequence ();
+ 	      emit_move_insn (new_reg, label_addr);
+ 	      emit_indirect_jump (new_reg);
+ 	      indirect_jump_sequence = get_insns ();
+ 	      end_sequence ();
+ 	      
+ 	      /* Make sure every instruction in the new jump sequence has
+ 		 its basic block set to be cur_bb.  */
+ 	      
+ 	      for (cur_insn = indirect_jump_sequence; cur_insn;
+ 		   cur_insn = NEXT_INSN (cur_insn))
+ 		{
+ 		  BLOCK_FOR_INSN (cur_insn) = cur_bb;
+ 		  if (JUMP_P (cur_insn))
+ 		    jump_insn = cur_insn;
+ 		}
+ 	      
+ 	      /* Insert the new (indirect) jump sequence immediately before
+ 		 the unconditional jump, then delete the unconditional jump.  */
+ 	      
+ 	      emit_insn_before (indirect_jump_sequence, last_insn);
+ 	      delete_insn (last_insn);
+ 	      
+ 	      /* Make BB_END for cur_bb be the jump instruction (NOT the
+ 		 barrier instruction at the end of the sequence...).  */
+ 	      
+ 	      BB_END (cur_bb) = jump_insn;
+ 	    }
+ 	}
+     }
+ }
+ 
+ /* Add REG_CROSSING_JUMP note to all crossing jump insns.  */
+ 
+ static void
+ add_reg_crossing_jump_notes (void)
+ {
+   basic_block bb;
+   edge e;
+   edge_iterator ei;
+ 
+   FOR_EACH_BB (bb)
+     FOR_EACH_EDGE (e, ei, bb->succs)
+       if ((e->flags & EDGE_CROSSING)
+ 	  && JUMP_P (BB_END (e->src)))
+ 	REG_NOTES (BB_END (e->src)) = gen_rtx_EXPR_LIST (REG_CROSSING_JUMP, 
+ 							 NULL_RTX, 
+ 						         REG_NOTES (BB_END 
+ 								  (e->src)));
+ }
+ 
+ /* Basic blocks containing NOTE_INSN_UNLIKELY_EXECUTED_CODE will be
+    put in a separate section of the .o file, to reduce paging and
+    improve cache performance (hopefully).  This can result in bits of
+    code from the same function being widely separated in the .o file.
+    However this is not obvious to the current bb structure.  Therefore
+    we must take care to ensure that: 1). There are no fall_thru edges
+    that cross between sections;  2). For those architectures which
+    have "short" conditional branches, all conditional branches that
+    attempt to cross between sections are converted to unconditional
+    branches; and, 3). For those architectures which have "short"
+    unconditional branches, all unconditional branches that attempt
+    to cross between sections are converted to indirect jumps.
+    
+    The code for fixing up fall_thru edges that cross between hot and
+    cold basic blocks does so by creating new basic blocks containing 
+    unconditional branches to the appropriate label in the "other" 
+    section.  The new basic block is then put in the same (hot or cold)
+    section as the original conditional branch, and the fall_thru edge
+    is modified to fall into the new basic block instead.  By adding
+    this level of indirection we end up with only unconditional branches
+    crossing between hot and cold sections.  
+    
+    Conditional branches are dealt with by adding a level of indirection.
+    A new basic block is added in the same (hot/cold) section as the 
+    conditional branch, and the conditional branch is retargeted to the
+    new basic block.  The new basic block contains an unconditional branch
+    to the original target of the conditional branch (in the other section).
+ 
+    Unconditional branches are dealt with by converting them into
+    indirect jumps.  */
+ 
+ static void 
+ fix_edges_for_rarely_executed_code (edge *crossing_edges, 
+ 				    int n_crossing_edges)
+ {
+   /* Make sure the source of any crossing edge ends in a jump and the
+      destination of any crossing edge has a label.  */
+   
+   add_labels_and_missing_jumps (crossing_edges, n_crossing_edges);
+   
+   /* Convert all crossing fall_thru edges to non-crossing fall
+      thrus to unconditional jumps (that jump to the original fall
+      thru dest).  */
+   
+   fix_up_fall_thru_edges ();
+   
+   /* Only do the parts necessary for writing separate sections if
+      the target architecture has the ability to write separate sections
+      (i.e. it has named sections).  Otherwise, the hot/cold partitioning
+      information will be used when reordering blocks to try to put all
+      the hot blocks together, then all the cold blocks, but no actual
+      section partitioning will be done.  */
+ 
+   if (targetm.have_named_sections)
+     {
+       /* If the architecture does not have conditional branches that can
+ 	 span all of memory, convert crossing conditional branches into
+ 	 crossing unconditional branches.  */
+   
+       if (!HAS_LONG_COND_BRANCH)
+ 	fix_crossing_conditional_branches ();
+   
+       /* If the architecture does not have unconditional branches that
+ 	 can span all of memory, convert crossing unconditional branches
+ 	 into indirect jumps.  Since adding an indirect jump also adds
+ 	 a new register usage, update the register usage information as
+ 	 well.  */
+       
+       if (!HAS_LONG_UNCOND_BRANCH)
+ 	{
+ 	  fix_crossing_unconditional_branches ();
+ 	  reg_scan (get_insns(), max_reg_num ());
+ 	}
+ 
+       add_reg_crossing_jump_notes ();
+     }
+ }
+ 
  /* Reorder basic blocks.  The main entry point to this file.  FLAGS is
     the set of flags to pass to cfg_layout_initialize().  */
  
*************** reorder_basic_blocks (unsigned int flags
*** 1076,1082 ****
    if (n_basic_blocks <= 1)
      return;
  
!   if ((* targetm.cannot_modify_jumps_p) ())
      return;
  
    timevar_push (TV_REORDER_BLOCKS);
--- 1956,1962 ----
    if (n_basic_blocks <= 1)
      return;
  
!   if (targetm.cannot_modify_jumps_p ())
      return;
  
    timevar_push (TV_REORDER_BLOCKS);
*************** reorder_basic_blocks (unsigned int flags
*** 1109,1118 ****
    FREE (traces);
    FREE (bbd);
  
!   if (rtl_dump_file)
!     dump_flow_info (rtl_dump_file);
  
    cfg_layout_finalize ();
  
    timevar_pop (TV_REORDER_BLOCKS);
  }
--- 1989,2209 ----
    FREE (traces);
    FREE (bbd);
  
!   if (dump_file)
!     dump_flow_info (dump_file);
! 
!   if (flag_reorder_blocks_and_partition
!       && targetm.have_named_sections)
!     add_unlikely_executed_notes ();
! 
!   cfg_layout_finalize ();
! 
!   timevar_pop (TV_REORDER_BLOCKS);
! }
! 
! /* Duplicate the blocks containing computed gotos.  This basically unfactors
!    computed gotos that were factored early on in the compilation process to
!    speed up edge based data flow.  We used to not unfactoring them again,
!    which can seriously pessimize code with many computed jumps in the source
!    code, such as interpreters.  See e.g. PR15242.  */
! 
! void
! duplicate_computed_gotos (void)
! {
!   basic_block bb, new_bb;
!   bitmap candidates;
!   int max_size;
! 
!   if (n_basic_blocks <= 1)
!     return;
! 
!   if (targetm.cannot_modify_jumps_p ())
!     return;
! 
!   timevar_push (TV_REORDER_BLOCKS);
! 
!   cfg_layout_initialize (0);
! 
!   /* We are estimating the length of uncond jump insn only once
!      since the code for getting the insn length always returns
!      the minimal length now.  */
!   if (uncond_jump_length == 0)
!     uncond_jump_length = get_uncond_jump_length ();
! 
!   max_size = uncond_jump_length * PARAM_VALUE (PARAM_MAX_GOTO_DUPLICATION_INSNS);
!   candidates = BITMAP_ALLOC (NULL);
! 
!   /* Look for blocks that end in a computed jump, and see if such blocks
!      are suitable for unfactoring.  If a block is a candidate for unfactoring,
!      mark it in the candidates.  */
!   FOR_EACH_BB (bb)
!     {
!       rtx insn;
!       edge e;
!       edge_iterator ei;
!       int size, all_flags;
! 
!       /* Build the reorder chain for the original order of blocks.  */
!       if (bb->next_bb != EXIT_BLOCK_PTR)
! 	bb->rbi->next = bb->next_bb;
! 
!       /* Obviously the block has to end in a computed jump.  */
!       if (!computed_jump_p (BB_END (bb)))
! 	continue;
! 
!       /* Only consider blocks that can be duplicated.  */
!       if (find_reg_note (BB_END (bb), REG_CROSSING_JUMP, NULL_RTX)
! 	  || !can_duplicate_block_p (bb))
! 	continue;
! 
!       /* Make sure that the block is small enough.  */
!       size = 0;
!       FOR_BB_INSNS (bb, insn)
! 	if (INSN_P (insn))
! 	  {
! 	    size += get_attr_length (insn);
! 	    if (size > max_size)
! 	       break;
! 	  }
!       if (size > max_size)
! 	continue;
! 
!       /* Final check: there must not be any incoming abnormal edges.  */
!       all_flags = 0;
!       FOR_EACH_EDGE (e, ei, bb->preds)
! 	all_flags |= e->flags;
!       if (all_flags & EDGE_COMPLEX)
! 	continue;
! 
!       bitmap_set_bit (candidates, bb->index);
!     }
  
+   /* Nothing to do if there is no computed jump here.  */
+   if (bitmap_empty_p (candidates))
+     goto done;
+ 
+   /* Duplicate computed gotos.  */
+   FOR_EACH_BB (bb)
+     {
+       if (bb->rbi->visited)
+ 	continue;
+ 
+       bb->rbi->visited = 1;
+ 
+       /* BB must have one outgoing edge.  That edge must not lead to
+          the exit block or the next block.
+ 	 The destination must have more than one predecessor.  */
+       if (EDGE_COUNT(bb->succs) != 1
+ 	  || EDGE_SUCC(bb,0)->dest == EXIT_BLOCK_PTR
+ 	  || EDGE_SUCC(bb,0)->dest == bb->next_bb
+ 	  || EDGE_COUNT(EDGE_SUCC(bb,0)->dest->preds) <= 1)
+ 	continue;
+ 
+       /* The successor block has to be a duplication candidate.  */
+       if (!bitmap_bit_p (candidates, EDGE_SUCC(bb,0)->dest->index))
+ 	continue;
+ 
+       new_bb = duplicate_block (EDGE_SUCC(bb,0)->dest, EDGE_SUCC(bb,0));
+       new_bb->rbi->next = bb->rbi->next;
+       bb->rbi->next = new_bb;
+       new_bb->rbi->visited = 1;
+     }
+ 
+ done:
    cfg_layout_finalize ();
  
+   BITMAP_FREE (candidates);
+ 
    timevar_pop (TV_REORDER_BLOCKS);
  }
+ 
+ /* This function is the main 'entrance' for the optimization that
+    partitions hot and cold basic blocks into separate sections of the
+    .o file (to improve performance and cache locality).  Ideally it
+    would be called after all optimizations that rearrange the CFG have
+    been called.  However part of this optimization may introduce new
+    register usage, so it must be called before register allocation has
+    occurred.  This means that this optimization is actually called
+    well before the optimization that reorders basic blocks (see
+    function above).
+ 
+    This optimization checks the feedback information to determine
+    which basic blocks are hot/cold and causes reorder_basic_blocks to
+    add NOTE_INSN_UNLIKELY_EXECUTED_CODE to non-hot basic blocks.  The
+    presence or absence of this note is later used for writing out
+    sections in the .o file.  Because hot and cold sections can be
+    arbitrarily large (within the bounds of memory), far beyond the
+    size of a single function, it is necessary to fix up all edges that
+    cross section boundaries, to make sure the instructions used can
+    actually span the required distance.  The fixes are described
+    below.
+ 
+    Fall-through edges must be changed into jumps; it is not safe or
+    legal to fall through across a section boundary.  Whenever a
+    fall-through edge crossing a section boundary is encountered, a new
+    basic block is inserted (in the same section as the fall-through
+    source), and the fall through edge is redirected to the new basic
+    block.  The new basic block contains an unconditional jump to the
+    original fall-through target.  (If the unconditional jump is
+    insufficient to cross section boundaries, that is dealt with a
+    little later, see below).
+ 
+    In order to deal with architectures that have short conditional
+    branches (which cannot span all of memory) we take any conditional
+    jump that attempts to cross a section boundary and add a level of
+    indirection: it becomes a conditional jump to a new basic block, in
+    the same section.  The new basic block contains an unconditional
+    jump to the original target, in the other section.
+ 
+    For those architectures whose unconditional branch is also
+    incapable of reaching all of memory, those unconditional jumps are
+    converted into indirect jumps, through a register.
+ 
+    IMPORTANT NOTE: This optimization causes some messy interactions
+    with the cfg cleanup optimizations; those optimizations want to
+    merge blocks wherever possible, and to collapse indirect jump
+    sequences (change "A jumps to B jumps to C" directly into "A jumps
+    to C").  Those optimizations can undo the jump fixes that
+    partitioning is required to make (see above), in order to ensure
+    that jumps attempting to cross section boundaries are really able
+    to cover whatever distance the jump requires (on many architectures
+    conditional or unconditional jumps are not able to reach all of
+    memory).  Therefore tests have to be inserted into each such
+    optimization to make sure that it does not undo stuff necessary to
+    cross partition boundaries.  This would be much less of a problem
+    if we could perform this optimization later in the compilation, but
+    unfortunately the fact that we may need to create indirect jumps
+    (through registers) requires that this optimization be performed
+    before register allocation.  */
+ 
+ void
+ partition_hot_cold_basic_blocks (void)
+ {
+   basic_block cur_bb;
+   edge *crossing_edges;
+   int n_crossing_edges;
+   int max_edges = 2 * last_basic_block;
+   
+   if (n_basic_blocks <= 1)
+     return;
+   
+   crossing_edges = xcalloc (max_edges, sizeof (edge));
+ 
+   cfg_layout_initialize (0);
+   
+   FOR_EACH_BB (cur_bb)
+     if (cur_bb->index >= 0
+  	&& cur_bb->next_bb->index >= 0)
+       cur_bb->rbi->next = cur_bb->next_bb;
+   
+   find_rarely_executed_basic_blocks_and_crossing_edges (crossing_edges, 
+ 							&n_crossing_edges, 
+ 							&max_edges);
+ 
+   if (n_crossing_edges > 0)
+     fix_edges_for_rarely_executed_code (crossing_edges, n_crossing_edges);
+   
+   free (crossing_edges);
+ 
+   cfg_layout_finalize();
+ }
diff -Nrcpad gcc-3.4.3/gcc/bitmap.c gcc-4.0.0/gcc/bitmap.c
*** gcc-3.4.3/gcc/bitmap.c	Sun Dec 21 14:08:32 2003
--- gcc-4.0.0/gcc/bitmap.c	Tue Feb 15 15:53:44 2005
***************
*** 1,5 ****
  /* Functions to support general ended bitmaps.
!    Copyright (C) 1997, 1998, 1999, 2000, 2001, 2003
     Free Software Foundation, Inc.
  
  This file is part of GCC.
--- 1,5 ----
  /* Functions to support general ended bitmaps.
!    Copyright (C) 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005
     Free Software Foundation, Inc.
  
  This file is part of GCC.
*************** Software Foundation, 59 Temple Place - S
*** 29,66 ****
  #include "ggc.h"
  #include "bitmap.h"
  
- /* Obstack to allocate bitmap elements from.  */
- static struct obstack bitmap_obstack;
- static int bitmap_obstack_init = FALSE;
- 
- #ifndef INLINE
- #ifndef __GNUC__
- #define INLINE
- #else
- #define INLINE __inline__
- #endif
- #endif
- 
  /* Global data */
! bitmap_element bitmap_zero_bits;	/* An element of all zero bits.  */
! static bitmap_element *bitmap_free;	/* Freelist of bitmap elements.  */
! static GTY((deletable (""))) bitmap_element *bitmap_ggc_free;
  
  static void bitmap_elem_to_freelist (bitmap, bitmap_element *);
  static void bitmap_element_free (bitmap, bitmap_element *);
  static bitmap_element *bitmap_element_allocate (bitmap);
  static int bitmap_element_zerop (bitmap_element *);
  static void bitmap_element_link (bitmap, bitmap_element *);
  static bitmap_element *bitmap_find_bit (bitmap, unsigned int);
  
  /* Add ELEM to the appropriate freelist.  */
! static INLINE void
  bitmap_elem_to_freelist (bitmap head, bitmap_element *elt)
  {
!   if (head->using_obstack)
      {
!       elt->next = bitmap_free;
!       bitmap_free = elt;
      }
    else
      {
--- 29,60 ----
  #include "ggc.h"
  #include "bitmap.h"
  
  /* Global data */
! bitmap_element bitmap_zero_bits;  /* An element of all zero bits.  */
! bitmap_obstack bitmap_default_obstack;    /* The default bitmap obstack.  */
! static GTY((deletable)) bitmap_element *bitmap_ggc_free; /* Freelist of
! 							    GC'd elements.  */
  
  static void bitmap_elem_to_freelist (bitmap, bitmap_element *);
  static void bitmap_element_free (bitmap, bitmap_element *);
  static bitmap_element *bitmap_element_allocate (bitmap);
  static int bitmap_element_zerop (bitmap_element *);
  static void bitmap_element_link (bitmap, bitmap_element *);
+ static bitmap_element *bitmap_elt_insert_after (bitmap, bitmap_element *);
+ static void bitmap_elt_clear_from (bitmap, bitmap_element *);
  static bitmap_element *bitmap_find_bit (bitmap, unsigned int);
  
+ 
  /* Add ELEM to the appropriate freelist.  */
! static inline void
  bitmap_elem_to_freelist (bitmap head, bitmap_element *elt)
  {
!   bitmap_obstack *bit_obstack = head->obstack;
!   
!   if (bit_obstack)
      {
!       elt->next = bit_obstack->elements;
!       bit_obstack->elements = elt;
      }
    else
      {
*************** bitmap_elem_to_freelist (bitmap head, bi
*** 72,78 ****
  /* Free a bitmap element.  Since these are allocated off the
     bitmap_obstack, "free" actually means "put onto the freelist".  */
  
! static INLINE void
  bitmap_element_free (bitmap head, bitmap_element *elt)
  {
    bitmap_element *next = elt->next;
--- 66,72 ----
  /* Free a bitmap element.  Since these are allocated off the
     bitmap_obstack, "free" actually means "put onto the freelist".  */
  
! static inline void
  bitmap_element_free (bitmap head, bitmap_element *elt)
  {
    bitmap_element *next = elt->next;
*************** bitmap_element_free (bitmap head, bitmap
*** 100,148 ****
  
  /* Allocate a bitmap element.  The bits are cleared, but nothing else is.  */
  
! static INLINE bitmap_element *
  bitmap_element_allocate (bitmap head)
  {
    bitmap_element *element;
! 
!   if (head->using_obstack)
      {
!       if (bitmap_free != 0)
! 	{
! 	  element = bitmap_free;
! 	  bitmap_free = element->next;
! 	}
        else
! 	{
! 	  /* We can't use gcc_obstack_init to initialize the obstack since
! 	     print-rtl.c now calls bitmap functions, and bitmap is linked
! 	     into the gen* functions.  */
! 	  if (!bitmap_obstack_init)
! 	    {
! 	      bitmap_obstack_init = TRUE;
! 
! #if !defined(__GNUC__) || (__GNUC__ < 2)
! #define __alignof__(type) 0
! #endif
! 
! 	      obstack_specify_allocation (&bitmap_obstack, OBSTACK_CHUNK_SIZE,
! 					  __alignof__ (bitmap_element),
! 					  obstack_chunk_alloc,
! 					  obstack_chunk_free);
! 	    }
! 
! 	  element = obstack_alloc (&bitmap_obstack, sizeof (bitmap_element));
! 	}
      }
    else
      {
!       if (bitmap_ggc_free != NULL)
! 	{
!           element = bitmap_ggc_free;
!           bitmap_ggc_free = element->next;
! 	}
        else
! 	element = ggc_alloc (sizeof (bitmap_element));
      }
  
    memset (element->bits, 0, sizeof (element->bits));
--- 94,121 ----
  
  /* Allocate a bitmap element.  The bits are cleared, but nothing else is.  */
  
! static inline bitmap_element *
  bitmap_element_allocate (bitmap head)
  {
    bitmap_element *element;
!   bitmap_obstack *bit_obstack = head->obstack;
!       
!   if (bit_obstack)
      {
!       element = bit_obstack->elements;
!       
!       if (element)
! 	bit_obstack->elements = element->next;
        else
! 	element = XOBNEW (&bit_obstack->obstack, bitmap_element);
      }
    else
      {
!       element = bitmap_ggc_free;
!       if (element)
! 	bitmap_ggc_free = element->next;
        else
! 	element = GGC_NEW (bitmap_element);
      }
  
    memset (element->bits, 0, sizeof (element->bits));
*************** bitmap_element_allocate (bitmap head)
*** 150,177 ****
    return element;
  }
  
! /* Release any memory allocated by bitmaps.  */
  
  void
! bitmap_release_memory (void)
  {
!   bitmap_free = 0;
!   if (bitmap_obstack_init)
      {
!       bitmap_obstack_init = FALSE;
!       obstack_free (&bitmap_obstack, NULL);
      }
  }
  
  /* Return nonzero if all bits in an element are zero.  */
  
! static INLINE int
  bitmap_element_zerop (bitmap_element *element)
  {
  #if BITMAP_ELEMENT_WORDS == 2
    return (element->bits[0] | element->bits[1]) == 0;
  #else
!   int i;
  
    for (i = 0; i < BITMAP_ELEMENT_WORDS; i++)
      if (element->bits[i] != 0)
--- 123,250 ----
    return element;
  }
  
! /* Remove ELT and all following elements from bitmap HEAD.  */
  
  void
! bitmap_elt_clear_from (bitmap head, bitmap_element *elt)
  {
!   bitmap_element *next;
! 
!   while (elt)
      {
!       next = elt->next;
!       bitmap_element_free (head, elt);
!       elt = next;
!     }
! }
! 
! /* Clear a bitmap by freeing the linked list.  */
! 
! inline void
! bitmap_clear (bitmap head)
! {
!   bitmap_element *element, *next;
! 
!   for (element = head->first; element != 0; element = next)
!     {
!       next = element->next;
!       bitmap_elem_to_freelist (head, element);
!     }
! 
!   head->first = head->current = 0;
! }
! 
! /* Initialize a bitmap obstack.  If BIT_OBSTACK is NULL, initialize
!    the default bitmap obstack.  */
! 
! void
! bitmap_obstack_initialize (bitmap_obstack *bit_obstack)
! {
!   if (!bit_obstack)
!     bit_obstack = &bitmap_default_obstack;
! 
! #if !defined(__GNUC__) || (__GNUC__ < 2)
! #define __alignof__(type) 0
! #endif
! 
!   bit_obstack->elements = NULL;
!   bit_obstack->heads = NULL;
!   obstack_specify_allocation (&bit_obstack->obstack, OBSTACK_CHUNK_SIZE,
! 			      __alignof__ (bitmap_element),
! 			      obstack_chunk_alloc,
! 			      obstack_chunk_free);
! }
! 
! /* Release the memory from a bitmap obstack.  If BIT_OBSTACK is NULL,
!    release the default bitmap obstack.  */
! 
! void
! bitmap_obstack_release (bitmap_obstack *bit_obstack)
! {
!   if (!bit_obstack)
!     bit_obstack = &bitmap_default_obstack;
!   
!   bit_obstack->elements = NULL;
!   bit_obstack->heads = NULL;
!   obstack_free (&bit_obstack->obstack, NULL);
! }
! 
! /* Create a new bitmap on an obstack.  If BIT_OBSTACK is NULL, create
!    it on the default bitmap obstack.  */
! 
! bitmap
! bitmap_obstack_alloc (bitmap_obstack *bit_obstack)
! {
!   bitmap map;
! 
!   if (!bit_obstack)
!     bit_obstack = &bitmap_default_obstack;
!   map = bit_obstack->heads;
!   if (map)
!     bit_obstack->heads = (void *)map->first;
!   else
!     map = XOBNEW (&bit_obstack->obstack, bitmap_head);
!   bitmap_initialize (map, bit_obstack);
! 
!   return map;
! }
! 
! /* Create a new GCd bitmap.  */
! 
! bitmap
! bitmap_gc_alloc (void)
! {
!   bitmap map;
! 
!   map = GGC_NEW (struct bitmap_head_def);
!   bitmap_initialize (map, NULL);
! 
!   return map;
! }
! 
! /* Release an obstack allocated bitmap.  */
! 
! void
! bitmap_obstack_free (bitmap map)
! {
!   if (map)
!     {
!       bitmap_clear (map);
!       map->first = (void *)map->obstack->heads;
!       map->obstack->heads = map;
      }
  }
  
+ 
  /* Return nonzero if all bits in an element are zero.  */
  
! static inline int
  bitmap_element_zerop (bitmap_element *element)
  {
  #if BITMAP_ELEMENT_WORDS == 2
    return (element->bits[0] | element->bits[1]) == 0;
  #else
!   unsigned i;
  
    for (i = 0; i < BITMAP_ELEMENT_WORDS; i++)
      if (element->bits[i] != 0)
*************** bitmap_element_zerop (bitmap_element *el
*** 183,189 ****
  
  /* Link the bitmap element into the current bitmap linked list.  */
  
! static INLINE void
  bitmap_element_link (bitmap head, bitmap_element *element)
  {
    unsigned int indx = element->indx;
--- 256,262 ----
  
  /* Link the bitmap element into the current bitmap linked list.  */
  
! static inline void
  bitmap_element_link (bitmap head, bitmap_element *element)
  {
    unsigned int indx = element->indx;
*************** bitmap_element_link (bitmap head, bitmap
*** 235,255 ****
    head->current = element;
    head->indx = indx;
  }
- 
- /* Clear a bitmap by freeing the linked list.  */
  
! INLINE void
! bitmap_clear (bitmap head)
  {
!   bitmap_element *element, *next;
  
!   for (element = head->first; element != 0; element = next)
      {
!       next = element->next;
!       bitmap_elem_to_freelist (head, element);
      }
! 
!   head->first = head->current = 0;
  }
  
  /* Copy a bitmap to another bitmap.  */
--- 308,343 ----
    head->current = element;
    head->indx = indx;
  }
  
! /* Insert a new uninitialized element into bitmap HEAD after element
!    ELT.  If ELT is NULL, insert the element at the start.  Return the
!    new element.  */
! 
! static bitmap_element *
! bitmap_elt_insert_after (bitmap head, bitmap_element *elt)
  {
!   bitmap_element *node = bitmap_element_allocate (head);
  
!   if (!elt)
      {
!       if (!head->current)
! 	head->current = node;
!       node->next = head->first;
!       if (node->next)
! 	node->next->prev = node;
!       head->first = node;
!       node->prev = NULL;
      }
!   else
!     {
!       gcc_assert (head->current);
!       node->next = elt->next;
!       if (node->next)
! 	node->next->prev = node;
!       elt->next = node;
!       node->prev = elt;
!     }
!   return node;
  }
  
  /* Copy a bitmap to another bitmap.  */
*************** bitmap_copy (bitmap to, bitmap from)
*** 259,265 ****
  {
    bitmap_element *from_ptr, *to_ptr = 0;
  #if BITMAP_ELEMENT_WORDS != 2
!   int i;
  #endif
  
    bitmap_clear (to);
--- 347,353 ----
  {
    bitmap_element *from_ptr, *to_ptr = 0;
  #if BITMAP_ELEMENT_WORDS != 2
!   unsigned i;
  #endif
  
    bitmap_clear (to);
*************** bitmap_copy (bitmap to, bitmap from)
*** 303,309 ****
     would hold the bitmap's bit to make eventual allocation
     faster.  */
  
! static INLINE bitmap_element *
  bitmap_find_bit (bitmap head, unsigned int bit)
  {
    bitmap_element *element;
--- 391,397 ----
     would hold the bitmap's bit to make eventual allocation
     faster.  */
  
! static inline bitmap_element *
  bitmap_find_bit (bitmap head, unsigned int bit)
  {
    bitmap_element *element;
*************** bitmap_find_bit (bitmap head, unsigned i
*** 313,326 ****
        || head->indx == indx)
      return head->current;
  
!   if (head->indx > indx)
      for (element = head->current;
  	 element->prev != 0 && element->indx > indx;
  	 element = element->prev)
        ;
  
    else
!     for (element = head->current;
  	 element->next != 0 && element->indx < indx;
  	 element = element->next)
        ;
--- 401,426 ----
        || head->indx == indx)
      return head->current;
  
!   if (head->indx < indx)
!     /* INDX is beyond head->indx.  Search from head->current
!        forward.  */
!     for (element = head->current;
! 	 element->next != 0 && element->indx < indx;
! 	 element = element->next)
!       ;
! 
!   else if (head->indx / 2 < indx)
!     /* INDX is less than head->indx and closer to head->indx than to
!        0.  Search from head->current backward.  */
      for (element = head->current;
  	 element->prev != 0 && element->indx > indx;
  	 element = element->prev)
        ;
  
    else
!     /* INDX is less than head->indx and closer to 0 than to
!        head->indx.  Search from head->first forward.  */
!     for (element = head->first;
  	 element->next != 0 && element->indx < indx;
  	 element = element->next)
        ;
*************** bitmap_bit_p (bitmap head, int bit)
*** 394,723 ****
    return (ptr->bits[word_num] >> bit_num) & 1;
  }
  
! /* Return the bit number of the first set bit in the bitmap, or -1
!    if the bitmap is empty.  */
  
! int
  bitmap_first_set_bit (bitmap a)
  {
!   bitmap_element *ptr = a->first;
    BITMAP_WORD word;
!   unsigned word_num, bit_num;
! 
!   if (ptr == NULL)
!     return -1;
  
! #if BITMAP_ELEMENT_WORDS == 2
!   word_num = 0, word = ptr->bits[0];
!   if (word == 0)
!     word_num = 1, word = ptr->bits[1];
  #else
-   for (word_num = 0; word_num < BITMAP_ELEMENT_WORDS; ++word_num)
-     if ((word = ptr->bits[word_num]) != 0)
-       break;
- #endif
- 
    /* Binary search for the first set bit.  */
!   /* ??? It'd be nice to know if ffs or ffsl was available.  */
! 
!   bit_num = 0;
!   word = word & -word;
! 
! #if nBITMAP_WORD_BITS > 64
!  #error "Fill out the table."
  #endif
! #if nBITMAP_WORD_BITS > 32
!   if ((word & 0xffffffff) == 0)
!     word >>= 32, bit_num += 32;
  #endif
!   if ((word & 0xffff) == 0)
!     word >>= 16, bit_num += 16;
!   if ((word & 0xff) == 0)
!     word >>= 8, bit_num += 8;
!   if (word & 0xf0)
!     bit_num += 4;
!   if (word & 0xcc)
!     bit_num += 2;
!   if (word & 0xaa)
!     bit_num += 1;
! 
!   return (ptr->indx * BITMAP_ELEMENT_ALL_BITS
! 	  + word_num * BITMAP_WORD_BITS
! 	  + bit_num);
  }
  
! /* Return the bit number of the last set bit in the bitmap, or -1
!    if the bitmap is empty.  */
  
! int
! bitmap_last_set_bit (bitmap a)
  {
!   bitmap_element *ptr = a->first;
!   BITMAP_WORD word;
!   unsigned word_num, bit_num;
  
!   if (ptr == NULL)
!     return -1;
  
!   while (ptr->next != NULL)
!     ptr = ptr->next;
  
! #if BITMAP_ELEMENT_WORDS == 2
!   word_num = 1, word = ptr->bits[1];
!   if (word == 0)
!     word_num = 0, word = ptr->bits[0];
! #else
!   for (word_num = BITMAP_ELEMENT_WORDS; word_num-- > 0; )
!     if ((word = ptr->bits[word_num]) != 0)
!       break;
! #endif
  
!   /* Binary search for the last set bit.  */
  
!   bit_num = 0;
! #if nBITMAP_WORD_BITS > 64
!  #error "Fill out the table."
! #endif
! #if nBITMAP_WORD_BITS > 32
!   if (word & ~(BITMAP_WORD)0xffffffff)
!     word >>= 32, bit_num += 32;
! #endif
!   if (word & 0xffff0000)
!     word >>= 16, bit_num += 16;
!   if (word & 0xff00)
!     word >>= 8, bit_num += 8;
!   if (word & 0xf0)
!     word >>= 4, bit_num += 4;
!   if (word & 0xc)
!     word >>= 2, bit_num += 2;
!   if (word & 0x2)
!     bit_num += 1;
  
!   return (ptr->indx * BITMAP_ELEMENT_ALL_BITS
! 	  + word_num * BITMAP_WORD_BITS
! 	  + bit_num);
  }
- 
- /* Store in bitmap TO the result of combining bitmap FROM1 and FROM2 using
-    a specific bit manipulation.  Return true if TO changes.  */
  
! int
! bitmap_operation (bitmap to, bitmap from1, bitmap from2,
! 		  enum bitmap_bits operation)
  {
! #define HIGHEST_INDEX (unsigned int) ~0
  
!   bitmap_element *from1_ptr = from1->first;
!   bitmap_element *from2_ptr = from2->first;
!   unsigned int indx1 = (from1_ptr) ? from1_ptr->indx : HIGHEST_INDEX;
!   unsigned int indx2 = (from2_ptr) ? from2_ptr->indx : HIGHEST_INDEX;
!   bitmap_element *to_ptr = to->first;
!   bitmap_element *from1_tmp;
!   bitmap_element *from2_tmp;
!   bitmap_element *to_tmp;
!   unsigned int indx;
!   int changed = 0;
  
! #if BITMAP_ELEMENT_WORDS == 2
! #define DOIT(OP)					\
!   do {							\
!     BITMAP_WORD t0, t1, f10, f11, f20, f21;		\
!     f10 = from1_tmp->bits[0];				\
!     f20 = from2_tmp->bits[0];				\
!     t0 = f10 OP f20;					\
!     changed |= (t0 != to_tmp->bits[0]);			\
!     f11 = from1_tmp->bits[1];				\
!     f21 = from2_tmp->bits[1];				\
!     t1 = f11 OP f21;					\
!     changed |= (t1 != to_tmp->bits[1]);			\
!     to_tmp->bits[0] = t0;				\
!     to_tmp->bits[1] = t1;				\
!   } while (0)
! #else
! #define DOIT(OP)					\
!   do {							\
!     BITMAP_WORD t, f1, f2;				\
!     int i;						\
!     for (i = 0; i < BITMAP_ELEMENT_WORDS; ++i)		\
!       {							\
! 	f1 = from1_tmp->bits[i];			\
! 	f2 = from2_tmp->bits[i];			\
! 	t = f1 OP f2;					\
! 	changed |= (t != to_tmp->bits[i]);		\
! 	to_tmp->bits[i] = t;				\
!       }							\
!   } while (0)
! #endif
  
!   to->first = to->current = 0;
  
!   while (from1_ptr != 0 || from2_ptr != 0)
      {
!       /* Figure out whether we need to substitute zero elements for
! 	 missing links.  */
!       if (indx1 == indx2)
  	{
! 	  indx = indx1;
! 	  from1_tmp = from1_ptr;
! 	  from2_tmp = from2_ptr;
! 	  from1_ptr = from1_ptr->next;
! 	  indx1 = (from1_ptr) ? from1_ptr->indx : HIGHEST_INDEX;
! 	  from2_ptr = from2_ptr->next;
! 	  indx2 = (from2_ptr) ? from2_ptr->indx : HIGHEST_INDEX;
  	}
!       else if (indx1 < indx2)
  	{
! 	  indx = indx1;
! 	  from1_tmp = from1_ptr;
! 	  from2_tmp = &bitmap_zero_bits;
! 	  from1_ptr = from1_ptr->next;
! 	  indx1 = (from1_ptr) ? from1_ptr->indx : HIGHEST_INDEX;
  	}
        else
  	{
! 	  indx = indx2;
! 	  from1_tmp = &bitmap_zero_bits;
! 	  from2_tmp = from2_ptr;
! 	  from2_ptr = from2_ptr->next;
! 	  indx2 = (from2_ptr) ? from2_ptr->indx : HIGHEST_INDEX;
  	}
  
!       /* Find the appropriate element from TO.  Begin by discarding
! 	 elements that we've skipped.  */
!       while (to_ptr && to_ptr->indx < indx)
  	{
! 	  changed = 1;
! 	  to_tmp = to_ptr;
! 	  to_ptr = to_ptr->next;
! 	  bitmap_elem_to_freelist (to, to_tmp);
  	}
!       if (to_ptr && to_ptr->indx == indx)
  	{
! 	  to_tmp = to_ptr;
! 	  to_ptr = to_ptr->next;
  	}
        else
- 	to_tmp = bitmap_element_allocate (to);
- 
-       /* Do the operation, and if any bits are set, link it into the
- 	 linked list.  */
-       switch (operation)
  	{
! 	default:
! 	  abort ();
! 
! 	case BITMAP_AND:
! 	  DOIT (&);
! 	  break;
  
! 	case BITMAP_AND_COMPL:
! 	  DOIT (&~);
! 	  break;
  
! 	case BITMAP_IOR:
! 	  DOIT (|);
! 	  break;
! 	case BITMAP_IOR_COMPL:
! 	  DOIT (|~);
! 	  break;
! 	case BITMAP_XOR:
! 	  DOIT (^);
! 	  break;
  	}
  
!       if (! bitmap_element_zerop (to_tmp))
  	{
! 	  to_tmp->indx = indx;
! 	  bitmap_element_link (to, to_tmp);
  	}
        else
  	{
! 	  bitmap_elem_to_freelist (to, to_tmp);
  	}
      }
  
!   /* If we have elements of TO left over, free the lot.  */
!   if (to_ptr)
      {
!       changed = 1;
!       for (to_tmp = to_ptr; to_tmp->next ; to_tmp = to_tmp->next)
! 	continue;
!       if (to->using_obstack)
  	{
! 	  to_tmp->next = bitmap_free;
! 	  bitmap_free = to_ptr;
  	}
!       else
  	{
! 	  to_tmp->next = bitmap_ggc_free;
! 	  bitmap_ggc_free = to_ptr;
  	}
!     }
  
! #undef DOIT
  
!   return changed;
  }
  
! /* Return true if two bitmaps are identical.  */
  
! int
  bitmap_equal_p (bitmap a, bitmap b)
  {
!   bitmap_head c;
!   int ret;
! 
!   memset (&c, 0, sizeof (c));
!   ret = ! bitmap_operation (&c, a, b, BITMAP_XOR);
!   bitmap_clear (&c);
! 
!   return ret;
  }
- 
- /* Or into bitmap TO bitmap FROM1 and'ed with the complement of
-    bitmap FROM2.  */
  
! void
! bitmap_ior_and_compl (bitmap to, bitmap from1, bitmap from2)
  {
!   bitmap_head tmp;
  
!   tmp.first = tmp.current = 0;
!   tmp.using_obstack = 0;
  
!   bitmap_operation (&tmp, from1, from2, BITMAP_AND_COMPL);
!   bitmap_operation (to, to, &tmp, BITMAP_IOR);
!   bitmap_clear (&tmp);
  }
  
! int
! bitmap_union_of_diff (bitmap dst, bitmap a, bitmap b, bitmap c)
  {
    bitmap_head tmp;
!   int changed;
! 
!   tmp.first = tmp.current = 0;
!   tmp.using_obstack = 0;
  
!   bitmap_operation (&tmp, b, c, BITMAP_AND_COMPL);
!   changed = bitmap_operation (dst, &tmp, a, BITMAP_IOR);
    bitmap_clear (&tmp);
  
    return changed;
  }
- 
- /* Initialize a bitmap header.  */
  
! bitmap
! bitmap_initialize (bitmap head, int using_obstack)
! {
!   if (head == NULL && ! using_obstack)
!     head = ggc_alloc (sizeof (*head));
  
!   head->first = head->current = 0;
!   head->using_obstack = using_obstack;
  
!   return head;
  }
  
  /* Debugging function to print out the contents of a bitmap.  */
--- 494,1147 ----
    return (ptr->bits[word_num] >> bit_num) & 1;
  }
  
! /* Return the bit number of the first set bit in the bitmap.  The
!    bitmap must be non-empty.  */
  
! unsigned
  bitmap_first_set_bit (bitmap a)
  {
!   bitmap_element *elt = a->first;
!   unsigned bit_no;
    BITMAP_WORD word;
!   unsigned ix;
!   
!   gcc_assert (elt);
!   bit_no = elt->indx * BITMAP_ELEMENT_ALL_BITS;
!   for (ix = 0; ix != BITMAP_ELEMENT_WORDS; ix++)
!     {
!       word = elt->bits[ix];
!       if (word)
! 	goto found_bit;
!     }
!   gcc_unreachable ();
!  found_bit:
!   bit_no += ix * BITMAP_WORD_BITS;
  
! #if GCC_VERSION >= 3004
!   gcc_assert (sizeof(long) == sizeof (word));
!   bit_no += __builtin_ctzl (word);
  #else
    /* Binary search for the first set bit.  */
! #if BITMAP_WORD_BITS > 64
! #error "Fill out the table."
  #endif
! #if BITMAP_WORD_BITS > 32
!   if (!(word & 0xffffffff))
!     word >>= 32, bit_no += 32;
  #endif
!   if (!(word & 0xffff))
!     word >>= 16, bit_no += 16;
!   if (!(word & 0xff))
!     word >>= 8, bit_no += 8;
!   if (!(word & 0xf))
!     word >>= 4, bit_no += 4;
!   if (!(word & 0x3))
!     word >>= 2, bit_no += 2;
!   if (!(word & 0x1))
!     word >>= 1, bit_no += 1;
!   
!  gcc_assert (word & 1);
! #endif
!  return bit_no;
  }
+ 
  
! /* DST = A & B.  */
  
! void
! bitmap_and (bitmap dst, bitmap a, bitmap b)
  {
!   bitmap_element *dst_elt = dst->first;
!   bitmap_element *a_elt = a->first;
!   bitmap_element *b_elt = b->first;
!   bitmap_element *dst_prev = NULL;
  
!   gcc_assert (dst != a && dst != b && a != b);
!   while (a_elt && b_elt)
!     {
!       if (a_elt->indx < b_elt->indx)
! 	a_elt = a_elt->next;
!       else if (b_elt->indx < a_elt->indx)
! 	b_elt = b_elt->next;
!       else
! 	{
! 	  /* Matching elts, generate A & B.  */
! 	  unsigned ix;
! 	  BITMAP_WORD ior = 0;
  
! 	  if (!dst_elt)
! 	    dst_elt = bitmap_elt_insert_after (dst, dst_prev);
! 	  
! 	  dst_elt->indx = a_elt->indx;
! 	  for (ix = BITMAP_ELEMENT_WORDS; ix--;)
! 	    {
! 	      BITMAP_WORD r = a_elt->bits[ix] & b_elt->bits[ix];
  
! 	      dst_elt->bits[ix] = r;
! 	      ior |= r;
! 	    }
! 	  if (ior)
! 	    {
! 	      dst_prev = dst_elt;
! 	      dst_elt = dst_elt->next;
! 	    }
! 	  a_elt = a_elt->next;
! 	  b_elt = b_elt->next;
! 	}
!     }
!   bitmap_elt_clear_from (dst, dst_elt);
!   gcc_assert (!dst->current == !dst->first);
!   if (dst->current)
!     dst->indx = dst->current->indx;
! }
  
! /* A &= B.  */
  
! void
! bitmap_and_into (bitmap a, bitmap b)
! {
!   bitmap_element *a_elt = a->first;
!   bitmap_element *b_elt = b->first;
!   bitmap_element *next;
  
!   gcc_assert (a != b);
!   while (a_elt && b_elt)
!     {
!       if (a_elt->indx < b_elt->indx)
! 	{
! 	  next = a_elt->next;
! 	  bitmap_element_free (a, a_elt);
! 	  a_elt = next;
! 	}
!       else if (b_elt->indx < a_elt->indx)
! 	b_elt = b_elt->next;
!       else
! 	{
! 	  /* Matching elts, generate A &= B.  */
! 	  unsigned ix;
! 	  BITMAP_WORD ior = 0;
! 
! 	  for (ix = BITMAP_ELEMENT_WORDS; ix--;)
! 	    {
! 	      BITMAP_WORD r = a_elt->bits[ix] & b_elt->bits[ix];
! 
! 	      a_elt->bits[ix] = r;
! 	      ior |= r;
! 	    }
! 	  next = a_elt->next;
! 	  if (!ior)
! 	    bitmap_element_free (a, a_elt);
! 	  a_elt = next;
! 	  b_elt = b_elt->next;
! 	}
!     }
!   bitmap_elt_clear_from (a, a_elt);
!   gcc_assert (!a->current == !a->first);
!   gcc_assert (!a->current || a->indx == a->current->indx);
  }
  
! /* DST = A & ~B  */
! 
! void
! bitmap_and_compl (bitmap dst, bitmap a, bitmap b)
  {
!   bitmap_element *dst_elt = dst->first;
!   bitmap_element *a_elt = a->first;
!   bitmap_element *b_elt = b->first;
!   bitmap_element *dst_prev = NULL;
  
!   gcc_assert (dst != a && dst != b && a != b);
!   
!   while (a_elt)
!     {
!       if (!b_elt || a_elt->indx < b_elt->indx)
! 	{
! 	  /* Copy a_elt.  */
! 	  if (!dst_elt)
! 	    dst_elt = bitmap_elt_insert_after (dst, dst_prev);
! 	  
! 	  dst_elt->indx = a_elt->indx;
! 	  memcpy (dst_elt->bits, a_elt->bits, sizeof (dst_elt->bits));
! 	  dst_prev = dst_elt;
! 	  dst_elt = dst_elt->next;
! 	  a_elt = a_elt->next;
! 	}
!       else if (b_elt->indx < a_elt->indx)
! 	b_elt = b_elt->next;
!       else
! 	{
! 	  /* Matching elts, generate A & ~B.  */
! 	  unsigned ix;
! 	  BITMAP_WORD ior = 0;
  
! 	  if (!dst_elt)
! 	    dst_elt = bitmap_elt_insert_after (dst, dst_prev);
! 	  
! 	  dst_elt->indx = a_elt->indx;
! 	  for (ix = BITMAP_ELEMENT_WORDS; ix--;)
! 	    {
! 	      BITMAP_WORD r = a_elt->bits[ix] & ~b_elt->bits[ix];
  
! 	      dst_elt->bits[ix] = r;
! 	      ior |= r;
! 	    }
! 	  if (ior)
! 	    {
! 	      dst_prev = dst_elt;
! 	      dst_elt = dst_elt->next;
! 	    }
! 	  a_elt = a_elt->next;
! 	  b_elt = b_elt->next;
! 	}
!     }
!   bitmap_elt_clear_from (dst, dst_elt);
!   gcc_assert (!dst->current == !dst->first);
!   if (dst->current)
!     dst->indx = dst->current->indx;
! }
  
! /* A &= ~B. Returns true if A changes */
! 
! bool
! bitmap_and_compl_into (bitmap a, bitmap b)
! {
!   bitmap_element *a_elt = a->first;
!   bitmap_element *b_elt = b->first;
!   bitmap_element *next;
!   BITMAP_WORD changed = 0;
! 
!   gcc_assert (a != b);
!   while (a_elt && b_elt)
      {
!       if (a_elt->indx < b_elt->indx)
! 	a_elt = a_elt->next;
!       else if (b_elt->indx < a_elt->indx)
! 	b_elt = b_elt->next;
!       else
  	{
! 	  /* Matching elts, generate A &= ~B.  */
! 	  unsigned ix;
! 	  BITMAP_WORD ior = 0;
! 
! 	  for (ix = BITMAP_ELEMENT_WORDS; ix--;)
! 	    {
! 	      BITMAP_WORD cleared = a_elt->bits[ix] & b_elt->bits[ix];
! 	      BITMAP_WORD r = a_elt->bits[ix] ^ cleared;
! 
! 	      a_elt->bits[ix] = r;
! 	      changed |= cleared;
! 	      ior |= r;
! 	    }
! 	  next = a_elt->next;
! 	  if (!ior)
! 	    bitmap_element_free (a, a_elt);
! 	  a_elt = next;
! 	  b_elt = b_elt->next;
  	}
!     }
!   gcc_assert (!a->current == !a->first);
!   gcc_assert (!a->current || a->indx == a->current->indx);
!   return changed != 0;
! }
! 
! /* DST = A | B.  Return true if DST changes.  */
! 
! bool
! bitmap_ior (bitmap dst, bitmap a, bitmap b)
! {
!   bitmap_element *dst_elt = dst->first;
!   bitmap_element *a_elt = a->first;
!   bitmap_element *b_elt = b->first;
!   bitmap_element *dst_prev = NULL;
!   bool changed = false;  
! 
!   gcc_assert (dst != a && dst != b && a != b);
!   while (a_elt || b_elt)
!     {
!       if (a_elt && b_elt && a_elt->indx == b_elt->indx)
  	{
! 	  /* Matching elts, generate A | B.  */
! 	  unsigned ix;
! 	      
! 	  if (!changed && dst_elt && dst_elt->indx == a_elt->indx)
! 	    {
! 	      for (ix = BITMAP_ELEMENT_WORDS; ix--;)
! 		{
! 		  BITMAP_WORD r = a_elt->bits[ix] | b_elt->bits[ix];
! 
! 		  if (r != dst_elt->bits[ix])
! 		    {
! 		      dst_elt->bits[ix] = r;
! 		      changed = true;
! 		    }
! 		}
! 	    }
! 	  else
! 	    {
! 	      changed = true;
! 	      if (!dst_elt)
! 		dst_elt = bitmap_elt_insert_after (dst, dst_prev);
! 	      dst_elt->indx = a_elt->indx;
! 	      for (ix = BITMAP_ELEMENT_WORDS; ix--;)
! 		{
! 		  BITMAP_WORD r = a_elt->bits[ix] | b_elt->bits[ix];
! 		  
! 		  dst_elt->bits[ix] = r;
! 		}
! 	    }
! 	  a_elt = a_elt->next;
! 	  b_elt = b_elt->next;
! 	  dst_prev = dst_elt;
! 	  dst_elt = dst_elt->next;
  	}
        else
  	{
! 	  /* Copy a single element.  */
! 	  bitmap_element *src;
! 
! 	  if (!b_elt || (a_elt && a_elt->indx < b_elt->indx))
! 	    {
! 	      src = a_elt;
! 	      a_elt = a_elt->next;
! 	    }
! 	  else
! 	    {
! 	      src = b_elt;
! 	      b_elt = b_elt->next;
! 	    }
! 
! 	  if (!changed && dst_elt && dst_elt->indx == src->indx)
! 	    {
! 	      unsigned ix;
! 	      
! 	      for (ix = BITMAP_ELEMENT_WORDS; ix--;)
! 		if (src->bits[ix] != dst_elt->bits[ix])
! 		  {
! 		    dst_elt->bits[ix] = src->bits[ix];
! 		    changed = true;
! 		  }
! 	    }
! 	  else
! 	    {
! 	      changed = true;
! 	      if (!dst_elt)
! 		dst_elt = bitmap_elt_insert_after (dst, dst_prev);
! 	      dst_elt->indx = src->indx;
! 	      memcpy (dst_elt->bits, src->bits, sizeof (dst_elt->bits));
! 	    }
! 	  
! 	  dst_prev = dst_elt;
! 	  dst_elt = dst_elt->next;
  	}
+     }
  
!   if (dst_elt)
!     {
!       changed = true;
!       bitmap_elt_clear_from (dst, dst_elt);
!     }
!   gcc_assert (!dst->current == !dst->first);
!   if (dst->current)
!     dst->indx = dst->current->indx;
!   return changed;
! }
! 
! /* A |= B.  Return true if A changes.  */
! 
! bool
! bitmap_ior_into (bitmap a, bitmap b)
! {
!   bitmap_element *a_elt = a->first;
!   bitmap_element *b_elt = b->first;
!   bitmap_element *a_prev = NULL;
!   bool changed = false;
! 
!   gcc_assert (a != b);
!   while (b_elt)
!     {
!       if (!a_elt || b_elt->indx < a_elt->indx)
  	{
! 	  /* Copy b_elt.  */
! 	  bitmap_element *dst = bitmap_elt_insert_after (a, a_prev);
! 	  
! 	  dst->indx = b_elt->indx;
! 	  memcpy (dst->bits, b_elt->bits, sizeof (dst->bits));
! 	  a_prev = dst;
! 	  b_elt = b_elt->next;
! 	  changed = true;
  	}
!       else if (a_elt->indx < b_elt->indx)
  	{
! 	  a_prev = a_elt;
! 	  a_elt = a_elt->next;
  	}
        else
  	{
! 	  /* Matching elts, generate A |= B.  */
! 	  unsigned ix;
  
! 	  if (changed)
! 	    for (ix = BITMAP_ELEMENT_WORDS; ix--;)
! 	      {
! 		BITMAP_WORD r = a_elt->bits[ix] | b_elt->bits[ix];
! 		
! 		a_elt->bits[ix] = r;
! 	      }
! 	  else
! 	    for (ix = BITMAP_ELEMENT_WORDS; ix--;)
! 	      {
! 		BITMAP_WORD r = a_elt->bits[ix] | b_elt->bits[ix];
  
! 		if (a_elt->bits[ix] != r)
! 		  {
! 		    changed = true;
! 		    a_elt->bits[ix] = r;
! 		  }
! 	      }
! 	  b_elt = b_elt->next;
! 	  a_prev = a_elt;
! 	  a_elt = a_elt->next;
  	}
+     }
+   gcc_assert (!a->current == !a->first);
+   if (a->current)
+     a->indx = a->current->indx;
+   return changed;
+ }
  
! /* DST = A ^ B  */
! 
! void
! bitmap_xor (bitmap dst, bitmap a, bitmap b)
! {
!   bitmap_element *dst_elt = dst->first;
!   bitmap_element *a_elt = a->first;
!   bitmap_element *b_elt = b->first;
!   bitmap_element *dst_prev = NULL;
! 
!   gcc_assert (dst != a && dst != b && a != b);
!   while (a_elt || b_elt)
!     {
!       if (a_elt && b_elt && a_elt->indx == b_elt->indx)
  	{
! 	  /* Matching elts, generate A ^ B.  */
! 	  unsigned ix;
! 	  BITMAP_WORD ior = 0;
! 
! 	  if (!dst_elt)
! 	    dst_elt = bitmap_elt_insert_after (dst, dst_prev);
! 	  
! 	  dst_elt->indx = a_elt->indx;
! 	  for (ix = BITMAP_ELEMENT_WORDS; ix--;)
! 	    {
! 	      BITMAP_WORD r = a_elt->bits[ix] ^ b_elt->bits[ix];
! 
! 	      ior |= r;
! 	      dst_elt->bits[ix] = r;
! 	    }
! 	  a_elt = a_elt->next;
! 	  b_elt = b_elt->next;
! 	  if (ior)
! 	    {
! 	      dst_prev = dst_elt;
! 	      dst_elt = dst_elt->next;
! 	    }
  	}
        else
  	{
! 	  /* Copy a single element.  */
! 	  bitmap_element *src;
! 
! 	  if (!b_elt || (a_elt && a_elt->indx < b_elt->indx))
! 	    {
! 	      src = a_elt;
! 	      a_elt = a_elt->next;
! 	    }
! 	  else
! 	    {
! 	      src = b_elt;
! 	      b_elt = b_elt->next;
! 	    }
! 
! 	  if (!dst_elt)
! 	    dst_elt = bitmap_elt_insert_after (dst, dst_prev);
! 	  
! 	  dst_elt->indx = src->indx;
! 	  memcpy (dst_elt->bits, src->bits, sizeof (dst_elt->bits));
! 	  dst_prev = dst_elt;
! 	  dst_elt = dst_elt->next;
  	}
      }
+   bitmap_elt_clear_from (dst, dst_elt);
+   gcc_assert (!dst->current == !dst->first);
+   if (dst->current)
+     dst->indx = dst->current->indx;
+ }
  
! /* A ^= B */
! 
! void
! bitmap_xor_into (bitmap a, bitmap b)
! {
!   bitmap_element *a_elt = a->first;
!   bitmap_element *b_elt = b->first;
!   bitmap_element *a_prev = NULL;
! 
!   gcc_assert (a != b);
!   while (b_elt)
      {
!       if (!a_elt || b_elt->indx < a_elt->indx)
  	{
! 	  /* Copy b_elt.  */
! 	  bitmap_element *dst = bitmap_elt_insert_after (a, a_prev);
! 	  
! 	  dst->indx = b_elt->indx;
! 	  memcpy (dst->bits, b_elt->bits, sizeof (dst->bits));
! 	  a_prev = dst;
! 	  b_elt = b_elt->next;
  	}
!       else if (a_elt->indx < b_elt->indx)
  	{
! 	  a_prev = a_elt;
! 	  a_elt = a_elt->next;
  	}
!       else
! 	{
! 	  /* Matching elts, generate A ^= B.  */
! 	  unsigned ix;
! 	  BITMAP_WORD ior = 0;
! 	  bitmap_element *next = a_elt->next;
  
! 	  for (ix = BITMAP_ELEMENT_WORDS; ix--;)
! 	    {
! 	      BITMAP_WORD r = a_elt->bits[ix] ^ b_elt->bits[ix];
  
! 	      ior |= r;
! 	      a_elt->bits[ix] = r;
! 	    }
! 	  b_elt = b_elt->next;
! 	  if (ior)
! 	    a_prev = a_elt;
! 	  else
! 	    bitmap_element_free (a, a_elt);
! 	  a_elt = next;
! 	}
!     }
!   gcc_assert (!a->current == !a->first);
!   if (a->current)
!     a->indx = a->current->indx;
  }
  
! /* Return true if two bitmaps are identical.
!    We do not bother with a check for pointer equality, as that never
!    occurs in practice.  */
  
! bool
  bitmap_equal_p (bitmap a, bitmap b)
  {
!   bitmap_element *a_elt;
!   bitmap_element *b_elt;
!   unsigned ix;
!   
!   for (a_elt = a->first, b_elt = b->first;
!        a_elt && b_elt;
!        a_elt = a_elt->next, b_elt = b_elt->next)
!     {
!       if (a_elt->indx != b_elt->indx)
! 	return false;
!       for (ix = BITMAP_ELEMENT_WORDS; ix--;)
! 	if (a_elt->bits[ix] != b_elt->bits[ix])
! 	  return false;
!     }
!   return !a_elt && !b_elt;
  }
  
! /* Return true if A AND B is not empty.  */
! 
! bool
! bitmap_intersect_p (bitmap a, bitmap b)
  {
!   bitmap_element *a_elt;
!   bitmap_element *b_elt;
!   unsigned ix;
!   
!   for (a_elt = a->first, b_elt = b->first;
!        a_elt && b_elt;)
!     {
!       if (a_elt->indx < b_elt->indx)
! 	a_elt = a_elt->next;
!       else if (b_elt->indx < a_elt->indx)
! 	b_elt = b_elt->next;
!       else
! 	{
! 	  for (ix = BITMAP_ELEMENT_WORDS; ix--;)
! 	    if (a_elt->bits[ix] & b_elt->bits[ix])
! 	      return true;
! 	  a_elt = a_elt->next;
! 	  b_elt = b_elt->next;
! 	}
!     }
!   return false;
! }
  
! /* Return true if A AND NOT B is not empty.  */
  
! bool
! bitmap_intersect_compl_p (bitmap a, bitmap b)
! {
!   bitmap_element *a_elt;
!   bitmap_element *b_elt;
!   unsigned ix;
!   for (a_elt = a->first, b_elt = b->first;
!        a_elt && b_elt;)
!     {
!       if (a_elt->indx < b_elt->indx)
! 	return true;
!       else if (b_elt->indx < a_elt->indx)
! 	b_elt = b_elt->next;
!       else
! 	{
! 	  for (ix = BITMAP_ELEMENT_WORDS; ix--;)
! 	    if (a_elt->bits[ix] & ~b_elt->bits[ix])
! 	      return true;
! 	  a_elt = a_elt->next;
! 	  b_elt = b_elt->next;
! 	}
!     }
!   return a_elt != NULL;
  }
  
! 
! /* DST = A | (FROM1 & ~FROM2).  Return true if DST changes.  */
! 
! bool
! bitmap_ior_and_compl (bitmap dst, bitmap a, bitmap from1, bitmap from2)
  {
    bitmap_head tmp;
!   bool changed;
  
!   bitmap_initialize (&tmp, &bitmap_default_obstack);
!   bitmap_and_compl (&tmp, from1, from2);
!   changed = bitmap_ior (dst, a, &tmp);
    bitmap_clear (&tmp);
  
    return changed;
  }
  
! /* A |= (FROM1 & ~FROM2).  Return true if A changes.  */
  
! bool
! bitmap_ior_and_compl_into (bitmap a, bitmap from1, bitmap from2)
! {
!   bitmap_head tmp;
!   bool changed;
!   
!   bitmap_initialize (&tmp, &bitmap_default_obstack);
!   bitmap_and_compl (&tmp, from1, from2);
!   changed = bitmap_ior_into (a, &tmp);
!   bitmap_clear (&tmp);
  
!   return changed;
  }
  
  /* Debugging function to print out the contents of a bitmap.  */
*************** void
*** 774,787 ****
  bitmap_print (FILE *file, bitmap head, const char *prefix, const char *suffix)
  {
    const char *comma = "";
!   int i;
  
    fputs (prefix, file);
!   EXECUTE_IF_SET_IN_BITMAP (head, 0, i,
! 			    {
! 			      fprintf (file, "%s%d", comma, i);
! 			      comma = ", ";
! 			    });
    fputs (suffix, file);
  }
  
--- 1198,1212 ----
  bitmap_print (FILE *file, bitmap head, const char *prefix, const char *suffix)
  {
    const char *comma = "";
!   unsigned i;
!   bitmap_iterator bi;
  
    fputs (prefix, file);
!   EXECUTE_IF_SET_IN_BITMAP (head, 0, i, bi)
!     {
!       fprintf (file, "%s%d", comma, i);
!       comma = ", ";
!     }
    fputs (suffix, file);
  }
  
diff -Nrcpad gcc-3.4.3/gcc/bitmap.h gcc-4.0.0/gcc/bitmap.h
*** gcc-3.4.3/gcc/bitmap.h	Sun Dec 21 14:08:32 2003
--- gcc-4.0.0/gcc/bitmap.h	Thu Feb 17 16:19:26 2005
***************
*** 1,5 ****
  /* Functions to support general ended bitmaps.
!    Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
     Free Software Foundation, Inc.
  
  This file is part of GCC.
--- 1,5 ----
  /* Functions to support general ended bitmaps.
!    Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
     Free Software Foundation, Inc.
  
  This file is part of GCC.
*************** Software Foundation, 59 Temple Place - S
*** 24,47 ****
  
  /* Fundamental storage type for bitmap.  */
  
- /* typedef unsigned HOST_WIDE_INT BITMAP_WORD; */
- /* #define nBITMAP_WORD_BITS HOST_BITS_PER_WIDE_INT */
  typedef unsigned long BITMAP_WORD;
! #define nBITMAP_WORD_BITS (CHAR_BIT * SIZEOF_LONG)
! #define BITMAP_WORD_BITS (unsigned) nBITMAP_WORD_BITS
  
  /* Number of words to use for each element in the linked list.  */
  
  #ifndef BITMAP_ELEMENT_WORDS
! #define BITMAP_ELEMENT_WORDS ((128 + nBITMAP_WORD_BITS - 1) / nBITMAP_WORD_BITS)
  #endif
  
! /* Number of bits in each actual element of a bitmap.  We get slightly better
!    code for bit % BITMAP_ELEMENT_ALL_BITS and bit / BITMAP_ELEMENT_ALL_BITS if
!    bits is unsigned, assuming it is a power of 2.  */
  
! #define BITMAP_ELEMENT_ALL_BITS \
!   ((unsigned) (BITMAP_ELEMENT_WORDS * BITMAP_WORD_BITS))
  
  /* Bitmap set element.  We use a linked list to hold only the bits that
     are set.  This allows for use to grow the bitset dynamically without
--- 24,51 ----
  
  /* Fundamental storage type for bitmap.  */
  
  typedef unsigned long BITMAP_WORD;
! /* BITMAP_WORD_BITS needs to be unsigned, but cannot contain casts as
!    it is used in preprocessor directives -- hence the 1u.  */
! #define BITMAP_WORD_BITS (CHAR_BIT * SIZEOF_LONG * 1u)
  
  /* Number of words to use for each element in the linked list.  */
  
  #ifndef BITMAP_ELEMENT_WORDS
! #define BITMAP_ELEMENT_WORDS ((128 + BITMAP_WORD_BITS - 1) / BITMAP_WORD_BITS)
  #endif
  
! /* Number of bits in each actual element of a bitmap.  */
  
! #define BITMAP_ELEMENT_ALL_BITS (BITMAP_ELEMENT_WORDS * BITMAP_WORD_BITS)
! 
! /* Obstack for allocating bitmaps and elements from.  */
! typedef struct bitmap_obstack GTY (())
! {
!   struct bitmap_element_def *elements;
!   struct bitmap_head_def *heads;
!   struct obstack GTY ((skip)) obstack;
! } bitmap_obstack;
  
  /* Bitmap set element.  We use a linked list to hold only the bits that
     are set.  This allows for use to grow the bitset dynamically without
*************** typedef struct bitmap_head_def GTY(()) {
*** 61,82 ****
    bitmap_element *first;	/* First element in linked list.  */
    bitmap_element *current;	/* Last element looked at.  */
    unsigned int indx;		/* Index of last element looked at.  */
!   int using_obstack;		/* Are we using an obstack or ggc for
!                                    allocation?  */
  } bitmap_head;
- typedef struct bitmap_head_def *bitmap;
  
! /* Enumeration giving the various operations we support.  */
! enum bitmap_bits {
!   BITMAP_AND,			/* TO = FROM1 & FROM2 */
!   BITMAP_AND_COMPL,		/* TO = FROM1 & ~ FROM2 */
!   BITMAP_IOR,			/* TO = FROM1 | FROM2 */
!   BITMAP_XOR,			/* TO = FROM1 ^ FROM2 */
!   BITMAP_IOR_COMPL			/* TO = FROM1 | ~FROM2 */
! };
  
  /* Global data */
  extern bitmap_element bitmap_zero_bits;	/* Zero bitmap element */
  
  /* Clear a bitmap by freeing up the linked list.  */
  extern void bitmap_clear (bitmap);
--- 65,80 ----
    bitmap_element *first;	/* First element in linked list.  */
    bitmap_element *current;	/* Last element looked at.  */
    unsigned int indx;		/* Index of last element looked at.  */
!   bitmap_obstack *obstack;	/* Obstack to allocate elements from.
! 				   If NULL, then use ggc_alloc.  */
  } bitmap_head;
  
! 
! typedef struct bitmap_head_def *bitmap;
  
  /* Global data */
  extern bitmap_element bitmap_zero_bits;	/* Zero bitmap element */
+ extern bitmap_obstack bitmap_default_obstack;   /* Default bitmap obstack */
  
  /* Clear a bitmap by freeing up the linked list.  */
  extern void bitmap_clear (bitmap);
*************** extern void bitmap_clear (bitmap);
*** 85,98 ****
  extern void bitmap_copy (bitmap, bitmap);
  
  /* True if two bitmaps are identical.  */
! extern int bitmap_equal_p (bitmap, bitmap);
  
! /* Perform an operation on two bitmaps, yielding a third.  */
! extern int bitmap_operation (bitmap, bitmap, bitmap, enum bitmap_bits);
  
! /* `or' into one bitmap the `and' of a second bitmap witih the complement
!    of a third.  */
! extern void bitmap_ior_and_compl (bitmap, bitmap, bitmap);
  
  /* Clear a single register in a register set.  */
  extern void bitmap_clear_bit (bitmap, int);
--- 83,117 ----
  extern void bitmap_copy (bitmap, bitmap);
  
  /* True if two bitmaps are identical.  */
! extern bool bitmap_equal_p (bitmap, bitmap);
  
! /* True if the bitmaps intersect (their AND is non-empty).  */
! extern bool bitmap_intersect_p (bitmap, bitmap);
  
! /* True if the complement of the second intersects the first (their
!    AND_COMPL is non-empty).  */
! extern bool bitmap_intersect_compl_p (bitmap, bitmap);
! 
! /* True if MAP is an empty bitmap.  */
! #define bitmap_empty_p(MAP) (!(MAP)->first)
! 
! /* Boolean operations on bitmaps.  The _into variants are two operand
!    versions that modify the first source operand.  The other variants
!    are three operand versions that to not destroy the source bitmaps.
!    The operations supported are &, & ~, |, ^.  */
! extern void bitmap_and (bitmap, bitmap, bitmap);
! extern void bitmap_and_into (bitmap, bitmap);
! extern void bitmap_and_compl (bitmap, bitmap, bitmap);
! extern bool bitmap_and_compl_into (bitmap, bitmap);
! extern bool bitmap_ior (bitmap, bitmap, bitmap);
! extern bool bitmap_ior_into (bitmap, bitmap);
! extern void bitmap_xor (bitmap, bitmap, bitmap);
! extern void bitmap_xor_into (bitmap, bitmap);
! 
! /* DST = A | (B & ~C).  Return true if DST changes.  */
! extern bool bitmap_ior_and_compl (bitmap DST, bitmap A, bitmap B, bitmap C);
! /* A |= (B & ~C).  Return true if A changes.  */
! extern bool bitmap_ior_and_compl_into (bitmap DST, bitmap B, bitmap C);
  
  /* Clear a single register in a register set.  */
  extern void bitmap_clear_bit (bitmap, int);
*************** extern void debug_bitmap_file (FILE *, b
*** 110,355 ****
  /* Print a bitmap.  */
  extern void bitmap_print (FILE *, bitmap, const char *, const char *);
  
! /* Initialize a bitmap header.  If HEAD is NULL, a new header will be
!    allocated.  USING_OBSTACK indicates how elements should be allocated.  */
! extern bitmap bitmap_initialize (bitmap head, int using_obstack);
  
! /* Release all memory used by the bitmap obstack.  */
! extern void bitmap_release_memory (void);
  
  /* A few compatibility/functions macros for compatibility with sbitmaps */
  #define dump_bitmap(file, bitmap) bitmap_print (file, bitmap, "", "\n")
  #define bitmap_zero(a) bitmap_clear (a)
! #define bitmap_a_or_b(a,b,c) bitmap_operation (a, b, c, BITMAP_IOR)
! #define bitmap_a_and_b(a,b,c) bitmap_operation (a, b, c, BITMAP_AND)
! extern int bitmap_union_of_diff (bitmap, bitmap, bitmap, bitmap);
! extern int bitmap_first_set_bit (bitmap);
! extern int bitmap_last_set_bit (bitmap);
! 
! /* Allocate a bitmap with oballoc.  */
! #define BITMAP_OBSTACK_ALLOC(OBSTACK)				\
!   bitmap_initialize (obstack_alloc (OBSTACK, sizeof (bitmap_head)), 1)
  
! /* Allocate a bitmap with ggc_alloc.  */
! #define BITMAP_GGC_ALLOC()			\
!   bitmap_initialize (NULL, 0)
  
! /* Allocate a bitmap with xmalloc.  */
! #define BITMAP_XMALLOC()                                        \
!   bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1)
  
  /* Do any cleanup needed on a bitmap when it is no longer used.  */
  #define BITMAP_FREE(BITMAP)			\
! do {						\
!   if (BITMAP)					\
!     {						\
!       bitmap_clear (BITMAP);			\
!       (BITMAP) = 0;				\
!     }						\
! } while (0)
  
! /* Do any cleanup needed on an xmalloced bitmap when it is no longer used.  */
! #define BITMAP_XFREE(BITMAP)			\
! do {						\
!   if (BITMAP)					\
!     {						\
!       bitmap_clear (BITMAP);			\
!       free (BITMAP);				\
!       (BITMAP) = 0;				\
!     }						\
! } while (0)
  
! /* Do any one-time initializations needed for bitmaps.  */
! #define BITMAP_INIT_ONCE()
  
! /* Loop over all bits in BITMAP, starting with MIN, setting BITNUM to the
!    bit number and executing CODE for all bits that are set.  */
  
! #define EXECUTE_IF_SET_IN_BITMAP(BITMAP, MIN, BITNUM, CODE)		\
! do {									\
!   bitmap_element *ptr_ = (BITMAP)->first;				\
!   unsigned int indx_ = (MIN) / BITMAP_ELEMENT_ALL_BITS;			\
!   unsigned bit_num_ = (MIN) % BITMAP_WORD_BITS;				\
!   unsigned word_num_ = (MIN) / BITMAP_WORD_BITS % BITMAP_ELEMENT_WORDS;	\
! 									\
! 									\
!   /* Find the block the minimum bit is in.  */				\
!   while (ptr_ != 0 && ptr_->indx < indx_)				\
!     ptr_ = ptr_->next;							\
! 									\
!   if (ptr_ != 0 && ptr_->indx != indx_)					\
!     {									\
!       bit_num_ = 0;							\
!       word_num_ = 0;							\
!     }									\
! 									\
!   for (; ptr_ != 0; ptr_ = ptr_->next)					\
!     {									\
!       for (; word_num_ < BITMAP_ELEMENT_WORDS; word_num_++)		\
! 	{								\
! 	  BITMAP_WORD word_ = ptr_->bits[word_num_];			\
! 									\
! 	  if (word_ != 0)						\
! 	    {								\
! 	      for (; bit_num_ < BITMAP_WORD_BITS; bit_num_++)		\
! 		{							\
! 		  BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_;	\
! 									\
! 		  if ((word_ & mask_) != 0)				\
! 		    {							\
! 		      word_ &= ~ mask_;					\
! 		      (BITNUM) = (ptr_->indx * BITMAP_ELEMENT_ALL_BITS  \
! 				  + word_num_ * BITMAP_WORD_BITS	\
! 				  + bit_num_);				\
! 		      CODE;						\
! 									\
! 		      if (word_ == 0)					\
! 			break;						\
! 		    }							\
! 		}							\
! 	    }								\
! 									\
! 	  bit_num_ = 0;							\
! 	}								\
! 									\
!       word_num_ = 0;							\
!     }									\
! } while (0)
  
! /* Loop over all bits in BITMAP1 and BITMAP2, starting with MIN, setting
!    BITNUM to the bit number and executing CODE for all bits that are set in
!    the first bitmap and not set in the second.  */
  
! #define EXECUTE_IF_AND_COMPL_IN_BITMAP(BITMAP1, BITMAP2, MIN, BITNUM, CODE) \
! do {									\
!   bitmap_element *ptr1_ = (BITMAP1)->first;				\
!   bitmap_element *ptr2_ = (BITMAP2)->first;				\
!   unsigned int indx_ = (MIN) / BITMAP_ELEMENT_ALL_BITS;			\
!   unsigned bit_num_ = (MIN) % BITMAP_WORD_BITS;				\
!   unsigned word_num_ = (MIN) / BITMAP_WORD_BITS % BITMAP_ELEMENT_WORDS;	\
! 									\
!   /* Find the block the minimum bit is in in the first bitmap.  */	\
!   while (ptr1_ != 0 && ptr1_->indx < indx_)				\
!     ptr1_ = ptr1_->next;						\
! 									\
!   if (ptr1_ != 0 && ptr1_->indx != indx_)				\
!     {									\
!       bit_num_ = 0;							\
!       word_num_ = 0;							\
!     }									\
! 									\
!   for (; ptr1_ != 0 ; ptr1_ = ptr1_->next)				\
!     {									\
!       /* Advance BITMAP2 to the equivalent link, using an all		\
! 	 zero element if an equivalent link doesn't exist.  */		\
!       bitmap_element *tmp2_;						\
! 									\
!       while (ptr2_ != 0 && ptr2_->indx < ptr1_->indx)			\
! 	ptr2_ = ptr2_->next;						\
! 									\
!       tmp2_ = ((ptr2_ != 0 && ptr2_->indx == ptr1_->indx)		\
! 	       ? ptr2_ : &bitmap_zero_bits);				\
! 									\
!       for (; word_num_ < BITMAP_ELEMENT_WORDS; word_num_++)		\
! 	{								\
! 	  BITMAP_WORD word_ = (ptr1_->bits[word_num_]			\
! 			       & ~ tmp2_->bits[word_num_]);		\
! 	  if (word_ != 0)						\
! 	    {								\
! 	      for (; bit_num_ < BITMAP_WORD_BITS; bit_num_++)		\
! 		{							\
! 		  BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_;	\
! 									\
! 		  if ((word_ & mask_) != 0)				\
! 		    {							\
! 		      word_ &= ~ mask_;					\
! 		      (BITNUM) = (ptr1_->indx * BITMAP_ELEMENT_ALL_BITS \
! 				  + word_num_ * BITMAP_WORD_BITS	\
! 				  + bit_num_);				\
! 									\
! 		      CODE;						\
! 		      if (word_ == 0)					\
! 			break;						\
! 		    }							\
! 		}							\
! 	    }								\
! 									\
! 	  bit_num_ = 0;							\
! 	}								\
! 									\
!       word_num_ = 0;							\
!     }									\
! } while (0)
  
! /* Loop over all bits in BITMAP1 and BITMAP2, starting with MIN, setting
!    BITNUM to the bit number and executing CODE for all bits that are set in
!    the both bitmaps.  */
  
! #define EXECUTE_IF_AND_IN_BITMAP(BITMAP1, BITMAP2, MIN, BITNUM, CODE)	\
! do {									\
!   bitmap_element *ptr1_ = (BITMAP1)->first;				\
!   bitmap_element *ptr2_ = (BITMAP2)->first;				\
!   unsigned int indx_ = (MIN) / BITMAP_ELEMENT_ALL_BITS;			\
!   unsigned bit_num_ = (MIN) % BITMAP_WORD_BITS;				\
!   unsigned word_num_ = (MIN) / BITMAP_WORD_BITS % BITMAP_ELEMENT_WORDS;	\
! 									\
!   /* Find the block the minimum bit is in in the first bitmap.  */	\
!   while (ptr1_ != 0 && ptr1_->indx < indx_)				\
!     ptr1_ = ptr1_->next;						\
! 									\
!   if (ptr1_ != 0 && ptr1_->indx != indx_)				\
!     {									\
!       bit_num_ = 0;							\
!       word_num_ = 0;							\
!     }									\
! 									\
!   for (; ptr1_ != 0 ; ptr1_ = ptr1_->next)				\
!     {									\
!       /* Advance BITMAP2 to the equivalent link.  */			\
!       while (ptr2_ != 0 && ptr2_->indx < ptr1_->indx)			\
! 	ptr2_ = ptr2_->next;						\
! 									\
!       if (ptr2_ == 0)							\
! 	{								\
! 	  /* If there are no more elements in BITMAP2, exit loop now.  */ \
! 	  ptr1_ = (bitmap_element *)0;					\
! 	  break;							\
! 	}								\
!       else if (ptr2_->indx > ptr1_->indx)				\
! 	{								\
! 	  bit_num_ = word_num_ = 0;					\
! 	  continue;							\
! 	}								\
! 									\
!       for (; word_num_ < BITMAP_ELEMENT_WORDS; word_num_++)		\
! 	{								\
! 	  BITMAP_WORD word_ = (ptr1_->bits[word_num_]			\
! 			       & ptr2_->bits[word_num_]);		\
! 	  if (word_ != 0)						\
! 	    {								\
! 	      for (; bit_num_ < BITMAP_WORD_BITS; bit_num_++)		\
! 		{							\
! 		  BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_;	\
! 									\
! 		  if ((word_ & mask_) != 0)				\
! 		    {							\
! 		      word_ &= ~ mask_;					\
! 		      (BITNUM) = (ptr1_->indx * BITMAP_ELEMENT_ALL_BITS \
! 				  + word_num_ * BITMAP_WORD_BITS	\
! 				  + bit_num_);				\
! 									\
! 		      CODE;						\
! 		      if (word_ == 0)					\
! 			break;						\
! 		    }							\
! 		}							\
! 	    }								\
! 									\
! 	  bit_num_ = 0;							\
! 	}								\
! 									\
!       word_num_ = 0;							\
!     }									\
! } while (0)
  
  #endif /* GCC_BITMAP_H */
--- 129,553 ----
  /* Print a bitmap.  */
  extern void bitmap_print (FILE *, bitmap, const char *, const char *);
  
! /* Initialize and releas a bitmap obstack.  */
! extern void bitmap_obstack_initialize (bitmap_obstack *);
! extern void bitmap_obstack_release (bitmap_obstack *);
  
! /* Initialize a bitmap header.  OBSTACK indicates the bitmap obstack
!    to allocate from, NULL for GC'd bitmap.  */
! 
! static inline void
! bitmap_initialize (bitmap head, bitmap_obstack *obstack)
! {
!   head->first = head->current = NULL;
!   head->obstack = obstack;
! }
! 
! /* Allocate and free bitmaps from obstack, malloc and gc'd memory.  */
! extern bitmap bitmap_obstack_alloc (bitmap_obstack *obstack);
! extern bitmap bitmap_gc_alloc (void);
! extern void bitmap_obstack_free (bitmap);
  
  /* A few compatibility/functions macros for compatibility with sbitmaps */
  #define dump_bitmap(file, bitmap) bitmap_print (file, bitmap, "", "\n")
  #define bitmap_zero(a) bitmap_clear (a)
! extern unsigned bitmap_first_set_bit (bitmap);
  
! /* Allocate a bitmap from a bit obstack.  */
! #define BITMAP_ALLOC(OBSTACK) bitmap_obstack_alloc (OBSTACK)
  
! /* Allocate a gc'd bitmap.  */
! #define BITMAP_GGC_ALLOC() bitmap_gc_alloc ()
  
  /* Do any cleanup needed on a bitmap when it is no longer used.  */
  #define BITMAP_FREE(BITMAP)			\
!       	((void)(bitmap_obstack_free (BITMAP), (BITMAP) = NULL))
  
! /* Iterator for bitmaps.  */
  
! typedef struct
! {
!   /* Pointer to the current bitmap element.  */
!   bitmap_element *elt1;
!   
!   /* Pointer to 2nd bitmap element when two are involved.  */
!   bitmap_element *elt2;
  
!   /* Word within the current element.  */
!   unsigned word_no;
!   
!   /* Contents of the actually processed word.  When finding next bit
!      it is shifted right, so that the actual bit is always the least
!      significant bit of ACTUAL.  */
!   BITMAP_WORD bits;
! } bitmap_iterator;
  
! /* Initialize a single bitmap iterator.  START_BIT is the first bit to
!    iterate from.  */
  
! static inline void
! bmp_iter_set_init (bitmap_iterator *bi, bitmap map,
! 		   unsigned start_bit, unsigned *bit_no)
! {
!   bi->elt1 = map->first;
!   bi->elt2 = NULL;
  
!   /* Advance elt1 until it is not before the block containing start_bit.  */
!   while (1)
!     {
!       if (!bi->elt1)
! 	{
! 	  bi->elt1 = &bitmap_zero_bits;
! 	  break;
! 	}
!       
!       if (bi->elt1->indx >= start_bit / BITMAP_ELEMENT_ALL_BITS)
! 	break;
!       bi->elt1 = bi->elt1->next;
!     }
  
!   /* We might have gone past the start bit, so reinitialize it.  */
!   if (bi->elt1->indx != start_bit / BITMAP_ELEMENT_ALL_BITS)
!     start_bit = bi->elt1->indx * BITMAP_ELEMENT_ALL_BITS;
!   
!   /* Initialize for what is now start_bit.  */
!   bi->word_no = start_bit / BITMAP_WORD_BITS % BITMAP_ELEMENT_WORDS;
!   bi->bits = bi->elt1->bits[bi->word_no];
!   bi->bits >>= start_bit % BITMAP_WORD_BITS;
  
!   /* If this word is zero, we must make sure we're not pointing at the
!      first bit, otherwise our incrementing to the next word boundary
!      will fail.  It won't matter if this increment moves us into the
!      next word.  */
!   start_bit += !bi->bits;
!   
!   *bit_no = start_bit;
! }
! 
! /* Initialize an iterator to iterate over the intersection of two
!    bitmaps.  START_BIT is the bit to commence from.  */
! 
! static inline void
! bmp_iter_and_init (bitmap_iterator *bi, bitmap map1, bitmap map2,
! 		   unsigned start_bit, unsigned *bit_no)
! {
!   bi->elt1 = map1->first;
!   bi->elt2 = map2->first;
! 
!   /* Advance elt1 until it is not before the block containing
!      start_bit.  */
!   while (1)
!     {
!       if (!bi->elt1)
! 	{
! 	  bi->elt2 = NULL;
! 	  break;
! 	}
!       
!       if (bi->elt1->indx >= start_bit / BITMAP_ELEMENT_ALL_BITS)
! 	break;
!       bi->elt1 = bi->elt1->next;
!     }
!   
!   /* Advance elt2 until it is not before elt1.  */
!   while (1)
!     {
!       if (!bi->elt2)
! 	{
! 	  bi->elt1 = bi->elt2 = &bitmap_zero_bits;
! 	  break;
! 	}
!       
!       if (bi->elt2->indx >= bi->elt1->indx)
! 	break;
!       bi->elt2 = bi->elt2->next;
!     }
! 
!   /* If we're at the same index, then we have some intersecting bits.  */
!   if (bi->elt1->indx == bi->elt2->indx)
!     {
!       /* We might have advanced beyond the start_bit, so reinitialize
!      	 for that.  */
!       if (bi->elt1->indx != start_bit / BITMAP_ELEMENT_ALL_BITS)
! 	start_bit = bi->elt1->indx * BITMAP_ELEMENT_ALL_BITS;
!       
!       bi->word_no = start_bit / BITMAP_WORD_BITS % BITMAP_ELEMENT_WORDS;
!       bi->bits = bi->elt1->bits[bi->word_no] & bi->elt2->bits[bi->word_no];
!       bi->bits >>= start_bit % BITMAP_WORD_BITS;
!     }
!   else
!     {
!       /* Otherwise we must immediately advance elt1, so initialize for
! 	 that.  */
!       bi->word_no = BITMAP_ELEMENT_WORDS - 1;
!       bi->bits = 0;
!     }
!   
!   /* If this word is zero, we must make sure we're not pointing at the
!      first bit, otherwise our incrementing to the next word boundary
!      will fail.  It won't matter if this increment moves us into the
!      next word.  */
!   start_bit += !bi->bits;
!   
!   *bit_no = start_bit;
! }
! 
! /* Initialize an iterator to iterate over the bits in MAP1 & ~MAP2.
!    */
! 
! static inline void
! bmp_iter_and_compl_init (bitmap_iterator *bi, bitmap map1, bitmap map2,
! 			 unsigned start_bit, unsigned *bit_no)
! {
!   bi->elt1 = map1->first;
!   bi->elt2 = map2->first;
! 
!   /* Advance elt1 until it is not before the block containing start_bit.  */
!   while (1)
!     {
!       if (!bi->elt1)
! 	{
! 	  bi->elt1 = &bitmap_zero_bits;
! 	  break;
! 	}
!       
!       if (bi->elt1->indx >= start_bit / BITMAP_ELEMENT_ALL_BITS)
! 	break;
!       bi->elt1 = bi->elt1->next;
!     }
! 
!   /* Advance elt2 until it is not before elt1.  */
!   while (bi->elt2 && bi->elt2->indx < bi->elt1->indx)
!     bi->elt2 = bi->elt2->next;
! 
!   /* We might have advanced beyond the start_bit, so reinitialize for
!      that.  */
!   if (bi->elt1->indx != start_bit / BITMAP_ELEMENT_ALL_BITS)
!     start_bit = bi->elt1->indx * BITMAP_ELEMENT_ALL_BITS;
!   
!   bi->word_no = start_bit / BITMAP_WORD_BITS % BITMAP_ELEMENT_WORDS;
!   bi->bits = bi->elt1->bits[bi->word_no];
!   if (bi->elt2 && bi->elt1->indx == bi->elt2->indx)
!     bi->bits &= ~bi->elt2->bits[bi->word_no];
!   bi->bits >>= start_bit % BITMAP_WORD_BITS;
!   
!   /* If this word is zero, we must make sure we're not pointing at the
!      first bit, otherwise our incrementing to the next word boundary
!      will fail.  It won't matter if this increment moves us into the
!      next word.  */
!   start_bit += !bi->bits;
!   
!   *bit_no = start_bit;
! }
! 
! /* Advance to the next bit in BI.  We don't advance to the next
!    nonzero bit yet.  */
! 
! static inline void
! bmp_iter_next (bitmap_iterator *bi, unsigned *bit_no)
! {
!   bi->bits >>= 1;
!   *bit_no += 1;
! }
! 
! /* Advance to the next nonzero bit of a single bitmap, we will have
!    already advanced past the just iterated bit.  Return true if there
!    is a bit to iterate.  */
! 
! static inline bool
! bmp_iter_set (bitmap_iterator *bi, unsigned *bit_no)
! {
!   /* If our current word is nonzero, it contains the bit we want.  */
!   if (bi->bits)
!     {
!     next_bit:
!       while (!(bi->bits & 1))
! 	{
! 	  bi->bits >>= 1;
! 	  *bit_no += 1;
! 	}
!       return true;
!     }
! 
!   /* Round up to the word boundary.  We might have just iterated past
!      the end of the last word, hence the -1.  It is not possible for
!      bit_no to point at the beginning of the now last word.  */
!   *bit_no = ((*bit_no + BITMAP_WORD_BITS - 1)
! 	     / BITMAP_WORD_BITS * BITMAP_WORD_BITS);
!   bi->word_no++;
! 
!   while (1)
!     {
!       /* Find the next nonzero word in this elt.  */
!       while (bi->word_no != BITMAP_ELEMENT_WORDS)
! 	{
! 	  bi->bits = bi->elt1->bits[bi->word_no];
! 	  if (bi->bits)
! 	    goto next_bit;
! 	  *bit_no += BITMAP_WORD_BITS;
! 	  bi->word_no++;
! 	}
!   
!       /* Advance to the next element.  */
!       bi->elt1 = bi->elt1->next;
!       if (!bi->elt1)
! 	return false;
!       *bit_no = bi->elt1->indx * BITMAP_ELEMENT_ALL_BITS;
!       bi->word_no = 0;
!     }
! }
! 
! /* Advance to the next nonzero bit of an intersecting pair of
!    bitmaps.  We will have already advanced past the just iterated bit.
!    Return true if there is a bit to iterate.  */
! 
! static inline bool
! bmp_iter_and (bitmap_iterator *bi, unsigned *bit_no)
! {
!   /* If our current word is nonzero, it contains the bit we want.  */
!   if (bi->bits)
!     {
!     next_bit:
!       while (!(bi->bits & 1))
! 	{
! 	  bi->bits >>= 1;
! 	  *bit_no += 1;
! 	}
!       return true;
!     }
! 
!   /* Round up to the word boundary.  We might have just iterated past
!      the end of the last word, hence the -1.  It is not possible for
!      bit_no to point at the beginning of the now last word.  */
!   *bit_no = ((*bit_no + BITMAP_WORD_BITS - 1)
! 	     / BITMAP_WORD_BITS * BITMAP_WORD_BITS);
!   bi->word_no++;
!   
!   while (1)
!     {
!       /* Find the next nonzero word in this elt.  */
!       while (bi->word_no != BITMAP_ELEMENT_WORDS)
! 	{
! 	  bi->bits = bi->elt1->bits[bi->word_no] & bi->elt2->bits[bi->word_no];
! 	  if (bi->bits)
! 	    goto next_bit;
! 	  *bit_no += BITMAP_WORD_BITS;
! 	  bi->word_no++;
! 	}
!   
!       /* Advance to the next identical element.  */
!       do
! 	{
! 	  /* Advance elt1 while it is less than elt2.  We always want
! 	     to advance one elt.  */
! 	  do
! 	    {
! 	      bi->elt1 = bi->elt1->next;
! 	      if (!bi->elt1)
! 		return false;
! 	    }
! 	  while (bi->elt1->indx < bi->elt2->indx);
! 	
! 	  /* Advance elt2 to be no less than elt1.  This might not
! 	     advance.  */
! 	  while (bi->elt2->indx < bi->elt1->indx)
! 	    {
! 	      bi->elt2 = bi->elt2->next;
! 	      if (!bi->elt2)
! 		return false;
! 	    }
! 	}
!       while (bi->elt1->indx != bi->elt2->indx);
!   
!       *bit_no = bi->elt1->indx * BITMAP_ELEMENT_ALL_BITS;
!       bi->word_no = 0;
!     }
! }
! 
! /* Advance to the next nonzero bit in the intersection of
!    complemented bitmaps.  We will have already advanced past the just
!    iterated bit.  */
! 
! static inline bool
! bmp_iter_and_compl (bitmap_iterator *bi, unsigned *bit_no)
! {
!   /* If our current word is nonzero, it contains the bit we want.  */
!   if (bi->bits)
!     {
!     next_bit:
!       while (!(bi->bits & 1))
! 	{
! 	  bi->bits >>= 1;
! 	  *bit_no += 1;
! 	}
!       return true;
!     }
! 
!   /* Round up to the word boundary.  We might have just iterated past
!      the end of the last word, hence the -1.  It is not possible for
!      bit_no to point at the beginning of the now last word.  */
!   *bit_no = ((*bit_no + BITMAP_WORD_BITS - 1)
! 	     / BITMAP_WORD_BITS * BITMAP_WORD_BITS);
!   bi->word_no++;
! 
!   while (1)
!     {
!       /* Find the next nonzero word in this elt.  */
!       while (bi->word_no != BITMAP_ELEMENT_WORDS)
! 	{
! 	  bi->bits = bi->elt1->bits[bi->word_no];
! 	  if (bi->elt2 && bi->elt2->indx == bi->elt1->indx)
! 	    bi->bits &= ~bi->elt2->bits[bi->word_no];
! 	  if (bi->bits)
! 	    goto next_bit;
! 	  *bit_no += BITMAP_WORD_BITS;
! 	  bi->word_no++;
! 	}
!   
!       /* Advance to the next element of elt1.  */
!       bi->elt1 = bi->elt1->next;
!       if (!bi->elt1)
! 	return false;
! 
!       /* Advance elt2 until it is no less than elt1.  */
!       while (bi->elt2 && bi->elt2->indx < bi->elt1->indx)
! 	bi->elt2 = bi->elt2->next;
!       
!       *bit_no = bi->elt1->indx * BITMAP_ELEMENT_ALL_BITS;
!       bi->word_no = 0;
!     }
! }
! 
! /* Loop over all bits set in BITMAP, starting with MIN and setting
!    BITNUM to the bit number.  ITER is a bitmap iterator.  BITNUM
!    should be treated as a read-only variable as it contains loop
!    state.  */
! 
! #define EXECUTE_IF_SET_IN_BITMAP(BITMAP, MIN, BITNUM, ITER)		\
!   for (bmp_iter_set_init (&(ITER), (BITMAP), (MIN), &(BITNUM));		\
!        bmp_iter_set (&(ITER), &(BITNUM));				\
!        bmp_iter_next (&(ITER), &(BITNUM)))
! 
! /* Loop over all the bits set in BITMAP1 & BITMAP2, starting with MIN
!    and setting BITNUM to the bit number.  ITER is a bitmap iterator.
!    BITNUM should be treated as a read-only variable as it contains
!    loop state.  */
! 
! #define EXECUTE_IF_AND_IN_BITMAP(BITMAP1, BITMAP2, MIN, BITNUM, ITER)	\
!   for (bmp_iter_and_init (&(ITER), (BITMAP1), (BITMAP2), (MIN), 	\
! 			  &(BITNUM));					\
!        bmp_iter_and (&(ITER), &(BITNUM));				\
!        bmp_iter_next (&(ITER), &(BITNUM)))
! 
! /* Loop over all the bits set in BITMAP1 & ~BITMAP2, starting with MIN
!    and setting BITNUM to the bit number.  ITER is a bitmap iterator.
!    BITNUM should be treated as a read-only variable as it contains
!    loop state.  */
! 
! #define EXECUTE_IF_AND_COMPL_IN_BITMAP(BITMAP1, BITMAP2, MIN, BITNUM, ITER) \
!   for (bmp_iter_and_compl_init (&(ITER), (BITMAP1), (BITMAP2), (MIN),	\
! 				&(BITNUM)); 				\
!        bmp_iter_and_compl (&(ITER), &(BITNUM));				\
!        bmp_iter_next (&(ITER), &(BITNUM)))
  
  #endif /* GCC_BITMAP_H */
diff -Nrcpad gcc-3.4.3/gcc/bt-load.c gcc-4.0.0/gcc/bt-load.c
*** gcc-3.4.3/gcc/bt-load.c	Tue Dec 30 10:40:49 2003
--- gcc-4.0.0/gcc/bt-load.c	Thu Feb 17 22:41:31 2005
***************
*** 1,5 ****
  /* Perform branch target register load optimizations.
!    Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
--- 1,5 ----
  /* Perform branch target register load optimizations.
!    Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
*************** Software Foundation, 59 Temple Place - S
*** 22,34 ****
  #include "system.h"
  #include "coretypes.h"
  #include "tm.h"
- #include "bitmap.h"
- #include "sbitmap.h"
  #include "rtl.h"
  #include "hard-reg-set.h"
- #include "basic-block.h"
  #include "regs.h"
- #include "obstack.h"
  #include "fibheap.h"
  #include "output.h"
  #include "target.h"
--- 22,30 ----
*************** Software Foundation, 59 Temple Place - S
*** 36,41 ****
--- 32,38 ----
  #include "flags.h"
  #include "insn-attr.h"
  #include "function.h"
+ #include "except.h"
  #include "tm_p.h"
  
  /* Target register optimizations - these are performed after reload.  */
*************** typedef struct btr_def_s
*** 101,106 ****
--- 98,107 ----
       as appropriate.  */
    char other_btr_uses_before_def;
    char other_btr_uses_after_use;
+   /* We set own_end when we have moved a definition into a dominator.
+      Thus, when a later combination removes this definition again, we know
+      to clear out trs_live_at_end again.  */
+   char own_end;
    bitmap live_range;
  } *btr_def;
  
*************** static void link_btr_uses (btr_def *, bt
*** 126,134 ****
  static void build_btr_def_use_webs (fibheap_t);
  static int block_at_edge_of_live_range_p (int, btr_def);
  static void clear_btr_from_live_range (btr_def def);
! static void add_btr_to_live_range (btr_def);
  static void augment_live_range (bitmap, HARD_REG_SET *, basic_block,
! 				basic_block);
  static int choose_btr (HARD_REG_SET);
  static void combine_btr_defs (btr_def, HARD_REG_SET *);
  static void btr_def_live_range (btr_def, HARD_REG_SET *);
--- 127,135 ----
  static void build_btr_def_use_webs (fibheap_t);
  static int block_at_edge_of_live_range_p (int, btr_def);
  static void clear_btr_from_live_range (btr_def def);
! static void add_btr_to_live_range (btr_def, int);
  static void augment_live_range (bitmap, HARD_REG_SET *, basic_block,
! 				basic_block, int);
  static int choose_btr (HARD_REG_SET);
  static void combine_btr_defs (btr_def, HARD_REG_SET *);
  static void btr_def_live_range (btr_def, HARD_REG_SET *);
*************** static struct obstack migrate_btrl_obsta
*** 159,164 ****
--- 160,169 ----
     live in that block.  */
  static HARD_REG_SET *btrs_live;
  
+ /* Array indexed by basic block number, giving the set of registers live at
+   the end of that block, including any uses by a final jump insn, if any.  */
+ static HARD_REG_SET *btrs_live_at_end;
+ 
  /* Set of all target registers that we are willing to allocate.  */
  static HARD_REG_SET all_btrs;
  
*************** static int first_btr, last_btr;
*** 168,175 ****
  
  
  
! /* Return an estimate of the frequency of execution of block bb.
!    If we have a profiling count available, we could use it here.  */
  static int
  basic_block_freq (basic_block bb)
  {
--- 173,179 ----
  
  
  
! /* Return an estimate of the frequency of execution of block bb.  */
  static int
  basic_block_freq (basic_block bb)
  {
*************** find_btr_reference (rtx *px, void *preg)
*** 191,200 ****
    if (px == preg)
      return -1;
    x = *px;
!   if (GET_CODE (x) != REG)
      return 0;
    regno = REGNO (x);
!   for (i = HARD_REGNO_NREGS (regno, GET_MODE (x)) - 1; i >= 0; i--)
      if (TEST_HARD_REG_BIT (all_btrs, regno+i))
        {
  	btr_reference_found = px;
--- 195,204 ----
    if (px == preg)
      return -1;
    x = *px;
!   if (!REG_P (x))
      return 0;
    regno = REGNO (x);
!   for (i = hard_regno_nregs[regno][GET_MODE (x)] - 1; i >= 0; i--)
      if (TEST_HARD_REG_BIT (all_btrs, regno+i))
        {
  	btr_reference_found = px;
*************** insn_sets_btr_p (rtx insn, int check_con
*** 221,227 ****
  {
    rtx set;
  
!   if (GET_CODE (insn) == INSN
        && (set = single_set (insn)))
      {
        rtx dest = SET_DEST (set);
--- 225,231 ----
  {
    rtx set;
  
!   if (NONJUMP_INSN_P (insn)
        && (set = single_set (insn)))
      {
        rtx dest = SET_DEST (set);
*************** insn_sets_btr_p (rtx insn, int check_con
*** 230,240 ****
        if (GET_CODE (dest) == SUBREG)
  	dest = XEXP (dest, 0);
  
!       if (GET_CODE (dest) == REG
  	  && TEST_HARD_REG_BIT (all_btrs, REGNO (dest)))
  	{
! 	  if (btr_referenced_p (src, NULL))
! 	    abort();
  	  if (!check_const || CONSTANT_P (src))
  	    {
  	      if (regno)
--- 234,244 ----
        if (GET_CODE (dest) == SUBREG)
  	dest = XEXP (dest, 0);
  
!       if (REG_P (dest)
  	  && TEST_HARD_REG_BIT (all_btrs, REGNO (dest)))
  	{
! 	  gcc_assert (!btr_referenced_p (src, NULL));
! 	  
  	  if (!check_const || CONSTANT_P (src))
  	    {
  	      if (regno)
*************** add_btr_def (fibheap_t all_btr_defs, bas
*** 315,322 ****
  
    fibheap_insert (all_btr_defs, -this->cost, this);
  
!   if (rtl_dump_file)
!     fprintf (rtl_dump_file,
        "Found target reg definition: sets %u { bb %d, insn %d }%s priority %d\n",
        dest_reg, bb->index, INSN_UID (insn), (this->group ? "" : ":not const"),
        this->cost);
--- 319,326 ----
  
    fibheap_insert (all_btr_defs, -this->cost, this);
  
!   if (dump_file)
!     fprintf (dump_file,
        "Found target reg definition: sets %u { bb %d, insn %d }%s priority %d\n",
        dest_reg, bb->index, INSN_UID (insn), (this->group ? "" : ":not const"),
        this->cost);
*************** new_btr_user (basic_block bb, int insn_l
*** 359,371 ****
    user->n_reaching_defs = 0;
    user->first_reaching_def = -1;
  
!   if (rtl_dump_file)
      {
!       fprintf (rtl_dump_file, "Uses target reg: { bb %d, insn %d }",
  	       bb->index, INSN_UID (insn));
  
        if (user->use)
! 	fprintf (rtl_dump_file, ": unambiguous use of reg %d\n",
  		 REGNO (user->use));
      }
  
--- 363,375 ----
    user->n_reaching_defs = 0;
    user->first_reaching_def = -1;
  
!   if (dump_file)
      {
!       fprintf (dump_file, "Uses target reg: { bb %d, insn %d }",
  	       bb->index, INSN_UID (insn));
  
        if (user->use)
! 	fprintf (dump_file, ": unambiguous use of reg %d\n",
  		 REGNO (user->use));
      }
  
*************** dump_hard_reg_set (HARD_REG_SET s)
*** 379,394 ****
    int reg;
    for (reg = 0; reg < FIRST_PSEUDO_REGISTER; reg++)
      if (TEST_HARD_REG_BIT (s, reg))
!       fprintf (rtl_dump_file, " %d", reg);
  }
  
  /* Write the set of target regs live in block BB to the dump file.  */
  static void
  dump_btrs_live (int bb)
  {
!   fprintf (rtl_dump_file, "BB%d live:", bb);
    dump_hard_reg_set (btrs_live[bb]);
!   fprintf (rtl_dump_file, "\n");
  }
  
  /* REGNO is the number of a branch target register that is being used or
--- 383,398 ----
    int reg;
    for (reg = 0; reg < FIRST_PSEUDO_REGISTER; reg++)
      if (TEST_HARD_REG_BIT (s, reg))
!       fprintf (dump_file, " %d", reg);
  }
  
  /* Write the set of target regs live in block BB to the dump file.  */
  static void
  dump_btrs_live (int bb)
  {
!   fprintf (dump_file, "BB%d live:", bb);
    dump_hard_reg_set (btrs_live[bb]);
!   fprintf (dump_file, "\n");
  }
  
  /* REGNO is the number of a branch target register that is being used or
*************** note_btr_set (rtx dest, rtx set ATTRIBUT
*** 423,432 ****
    defs_uses_info *info = data;
    int regno, end_regno;
  
!   if (GET_CODE (dest) != REG)
      return;
    regno = REGNO (dest);
!   end_regno = regno + HARD_REGNO_NREGS (regno, GET_MODE (dest));
    for (; regno < end_regno; regno++)
      if (TEST_HARD_REG_BIT (all_btrs, regno))
        {
--- 427,436 ----
    defs_uses_info *info = data;
    int regno, end_regno;
  
!   if (!REG_P (dest))
      return;
    regno = REGNO (dest);
!   end_regno = regno + hard_regno_nregs[regno][GET_MODE (dest)];
    for (; regno < end_regno; regno++)
      if (TEST_HARD_REG_BIT (all_btrs, regno))
        {
*************** compute_defs_uses_and_gen (fibheap_t all
*** 462,467 ****
--- 466,472 ----
        btr_def defs_this_bb = NULL;
        rtx insn;
        rtx last;
+       int can_throw = 0;
  
        info.users_this_bb = NULL;
        info.bb_gen = bb_gen[i];
*************** compute_defs_uses_and_gen (fibheap_t all
*** 528,534 ****
  		      user->next = info.users_this_bb;
  		      info.users_this_bb = user;
  		    }
! 		  if (GET_CODE (insn) == CALL_INSN)
  		    {
  		      HARD_REG_SET *clobbered = &call_used_reg_set;
  		      HARD_REG_SET call_saved;
--- 533,539 ----
  		      user->next = info.users_this_bb;
  		      info.users_this_bb = user;
  		    }
! 		  if (CALL_P (insn))
  		    {
  		      HARD_REG_SET *clobbered = &call_used_reg_set;
  		      HARD_REG_SET call_saved;
*************** compute_defs_uses_and_gen (fibheap_t all
*** 544,550 ****
  						  call_used_reg_set);
  			      clobbered = &call_saved;
  			    }
! 			      
  		      for (regno = first_btr; regno <= last_btr; regno++)
  			if (TEST_HARD_REG_BIT (*clobbered, regno))
  			  note_btr_set (regno_reg_rtx[regno], NULL_RTX, &info);
--- 549,555 ----
  						  call_used_reg_set);
  			      clobbered = &call_saved;
  			    }
! 
  		      for (regno = first_btr; regno <= last_btr; regno++)
  			if (TEST_HARD_REG_BIT (*clobbered, regno))
  			  note_btr_set (regno_reg_rtx[regno], NULL_RTX, &info);
*************** compute_defs_uses_and_gen (fibheap_t all
*** 555,561 ****
  
        COPY_HARD_REG_SET (btrs_live[i], info.btrs_live_in_block);
        COPY_HARD_REG_SET (btrs_written[i], info.btrs_written_in_block);
!       if (rtl_dump_file)
  	dump_btrs_live(i);
      }
  }
--- 560,595 ----
  
        COPY_HARD_REG_SET (btrs_live[i], info.btrs_live_in_block);
        COPY_HARD_REG_SET (btrs_written[i], info.btrs_written_in_block);
! 
!       REG_SET_TO_HARD_REG_SET (btrs_live_at_end[i], bb->global_live_at_end);
!       /* If this block ends in a jump insn, add any uses or even clobbers
! 	 of branch target registers that it might have.  */
!       for (insn = BB_END (bb); insn != BB_HEAD (bb) && ! INSN_P (insn); )
! 	insn = PREV_INSN (insn);
!       /* ??? for the fall-through edge, it would make sense to insert the
! 	 btr set on the edge, but that would require to split the block
! 	 early on so that we can distinguish between dominance from the fall
! 	 through edge - which can use the call-clobbered registers - from
! 	 dominance by the throw edge.  */
!       if (can_throw_internal (insn))
! 	{
! 	  HARD_REG_SET tmp;
! 
! 	  COPY_HARD_REG_SET (tmp, call_used_reg_set);
! 	  AND_HARD_REG_SET (tmp, all_btrs);
! 	  IOR_HARD_REG_SET (btrs_live_at_end[i], tmp);
! 	  can_throw = 1;
! 	}
!       if (can_throw || JUMP_P (insn))
! 	{
! 	  int regno;
! 
! 	  for (regno = first_btr; regno <= last_btr; regno++)
! 	    if (refers_to_regno_p (regno, regno+1, insn, NULL))
! 	      SET_HARD_REG_BIT (btrs_live_at_end[i], regno);
! 	}
! 
!       if (dump_file)
  	dump_btrs_live(i);
      }
  }
*************** link_btr_uses (btr_def *def_array, btr_u
*** 676,683 ****
  
  		      /* We now know that def reaches user.  */
  
! 		      if (rtl_dump_file)
! 			fprintf (rtl_dump_file,
  			  "Def in insn %d reaches use in insn %d\n",
  			  uid, insn_uid);
  
--- 710,717 ----
  
  		      /* We now know that def reaches user.  */
  
! 		      if (dump_file)
! 			fprintf (dump_file,
  			  "Def in insn %d reaches use in insn %d\n",
  			  uid, insn_uid);
  
*************** link_btr_uses (btr_def *def_array, btr_u
*** 691,698 ****
  			  def->has_ambiguous_use = 1;
  			  def_array[user->first_reaching_def]
  			    ->has_ambiguous_use = 1;
! 			  if (rtl_dump_file)
! 			    fprintf (rtl_dump_file,
  				     "(use %d has multiple reaching defs)\n",
  				     insn_uid);
  			}
--- 725,732 ----
  			  def->has_ambiguous_use = 1;
  			  def_array[user->first_reaching_def]
  			    ->has_ambiguous_use = 1;
! 			  if (dump_file)
! 			    fprintf (dump_file,
  				     "(use %d has multiple reaching defs)\n",
  				     insn_uid);
  			}
*************** link_btr_uses (btr_def *def_array, btr_u
*** 706,712 ****
  		  sbitmap_free (reaching_defs_of_reg);
  		}
  
! 	      if (GET_CODE (insn) == CALL_INSN)
  		{
  		  int regno;
  
--- 740,746 ----
  		  sbitmap_free (reaching_defs_of_reg);
  		}
  
! 	      if (CALL_P (insn))
  		{
  		  int regno;
  
*************** block_at_edge_of_live_range_p (int bb, b
*** 787,823 ****
  static void
  clear_btr_from_live_range (btr_def def)
  {
!   int bb;
  
!   EXECUTE_IF_SET_IN_BITMAP
!     (def->live_range, 0, bb,
!      {
!        if ((!def->other_btr_uses_before_def
! 	     && !def->other_btr_uses_after_use)
! 	   || !block_at_edge_of_live_range_p (bb, def))
! 	 {
! 	   CLEAR_HARD_REG_BIT (btrs_live[bb], def->btr);
! 	   if (rtl_dump_file)
! 	     dump_btrs_live (bb);
! 	 }
!      });
  }
  
  
  /* We are adding the def/use web DEF.  Add the target register used
     in this web to the live set of all of the basic blocks that contain
!    the live range of the web.  */
  static void
! add_btr_to_live_range (btr_def def)
  {
!   int bb;
!   EXECUTE_IF_SET_IN_BITMAP
!     (def->live_range, 0, bb,
!      {
!        SET_HARD_REG_BIT (btrs_live[bb], def->btr);
!        if (rtl_dump_file)
! 	 dump_btrs_live (bb);
!      });
  }
  
  /* Update a live range to contain the basic block NEW_BLOCK, and all
--- 821,869 ----
  static void
  clear_btr_from_live_range (btr_def def)
  {
!   unsigned bb;
!   bitmap_iterator bi;
  
!   EXECUTE_IF_SET_IN_BITMAP (def->live_range, 0, bb, bi)
!     {
!       if ((!def->other_btr_uses_before_def
! 	   && !def->other_btr_uses_after_use)
! 	  || !block_at_edge_of_live_range_p (bb, def))
! 	{
! 	  CLEAR_HARD_REG_BIT (btrs_live[bb], def->btr);
! 	  CLEAR_HARD_REG_BIT (btrs_live_at_end[bb], def->btr);
! 	  if (dump_file)
! 	    dump_btrs_live (bb);
! 	}
!     }
!  if (def->own_end)
!    CLEAR_HARD_REG_BIT (btrs_live_at_end[def->bb->index], def->btr);
  }
  
  
  /* We are adding the def/use web DEF.  Add the target register used
     in this web to the live set of all of the basic blocks that contain
!    the live range of the web.
!    If OWN_END is set, also show that the register is live from our
!    definitions at the end of the basic block where it is defined.  */
  static void
! add_btr_to_live_range (btr_def def, int own_end)
  {
!   unsigned bb;
!   bitmap_iterator bi;
! 
!   EXECUTE_IF_SET_IN_BITMAP (def->live_range, 0, bb, bi)
!     {
!       SET_HARD_REG_BIT (btrs_live[bb], def->btr);
!       SET_HARD_REG_BIT (btrs_live_at_end[bb], def->btr);
!       if (dump_file)
! 	dump_btrs_live (bb);
!     }
!   if (own_end)
!     {
!       SET_HARD_REG_BIT (btrs_live_at_end[def->bb->index], def->btr);
!       def->own_end = 1;
!     }
  }
  
  /* Update a live range to contain the basic block NEW_BLOCK, and all
*************** add_btr_to_live_range (btr_def def)
*** 826,864 ****
     all other blocks in the existing live range.
     Also add to the set BTRS_LIVE_IN_RANGE all target registers that
     are live in the blocks that we add to the live range.
     It is a precondition that either NEW_BLOCK dominates HEAD,or
     HEAD dom NEW_BLOCK.  This is used to speed up the
     implementation of this function.  */
  static void
  augment_live_range (bitmap live_range, HARD_REG_SET *btrs_live_in_range,
! 		    basic_block head_bb, basic_block new_bb)
  {
    basic_block *worklist, *tos;
  
    tos = worklist = xmalloc (sizeof (basic_block) * (n_basic_blocks + 1));
  
    if (dominated_by_p (CDI_DOMINATORS, new_bb, head_bb))
!     *tos++ = new_bb;
!   else if (dominated_by_p (CDI_DOMINATORS, head_bb, new_bb))
      {
        edge e;
        int new_block = new_bb->index;
  
        bitmap_set_bit (live_range, new_block);
!       IOR_HARD_REG_SET (*btrs_live_in_range, btrs_live[new_block]);
!       if (rtl_dump_file)
  	{
! 	  fprintf (rtl_dump_file,
! 		   "Adding block %d to live range\n", new_block);
! 	  fprintf (rtl_dump_file,"Now live btrs are ");
  	  dump_hard_reg_set (*btrs_live_in_range);
! 	  fprintf (rtl_dump_file, "\n");
  	}
!       for (e = head_bb->pred; e; e = e->pred_next)
  	*tos++ = e->src;
      }
-   else
-     abort();
  
    while (tos != worklist)
      {
--- 872,929 ----
     all other blocks in the existing live range.
     Also add to the set BTRS_LIVE_IN_RANGE all target registers that
     are live in the blocks that we add to the live range.
+    If FULL_RANGE is set, include the full live range of NEW_BB;
+    otherwise, if NEW_BB dominates HEAD_BB, only add registers that
+    are life at the end of NEW_BB for NEW_BB itself.
     It is a precondition that either NEW_BLOCK dominates HEAD,or
     HEAD dom NEW_BLOCK.  This is used to speed up the
     implementation of this function.  */
  static void
  augment_live_range (bitmap live_range, HARD_REG_SET *btrs_live_in_range,
! 		    basic_block head_bb, basic_block new_bb, int full_range)
  {
    basic_block *worklist, *tos;
  
    tos = worklist = xmalloc (sizeof (basic_block) * (n_basic_blocks + 1));
  
    if (dominated_by_p (CDI_DOMINATORS, new_bb, head_bb))
!     {
!       if (new_bb == head_bb)
! 	{
! 	  if (full_range)
! 	    IOR_HARD_REG_SET (*btrs_live_in_range, btrs_live[new_bb->index]);
! 	  return;
! 	}
!       *tos++ = new_bb;
!     }
!   else
      {
        edge e;
+       edge_iterator ei;
        int new_block = new_bb->index;
  
+       gcc_assert (dominated_by_p (CDI_DOMINATORS, head_bb, new_bb));
+   
+       IOR_HARD_REG_SET (*btrs_live_in_range, btrs_live[head_bb->index]);
        bitmap_set_bit (live_range, new_block);
!       /* A previous btr migration could have caused a register to be
!         live just at the end of new_block which we need in full, so
!         use trs_live_at_end even if full_range is set.  */
!       IOR_HARD_REG_SET (*btrs_live_in_range, btrs_live_at_end[new_block]);
!       if (full_range)
! 	IOR_HARD_REG_SET (*btrs_live_in_range, btrs_live[new_block]);
!       if (dump_file)
  	{
! 	  fprintf (dump_file,
! 		   "Adding end of block %d and rest of %d to live range\n",
! 		   new_block, head_bb->index);
! 	  fprintf (dump_file,"Now live btrs are ");
  	  dump_hard_reg_set (*btrs_live_in_range);
! 	  fprintf (dump_file, "\n");
  	}
!       FOR_EACH_EDGE (e, ei, head_bb->preds)
  	*tos++ = e->src;
      }
  
    while (tos != worklist)
      {
*************** augment_live_range (bitmap live_range, H
*** 866,885 ****
        if (!bitmap_bit_p (live_range, bb->index))
  	{
  	  edge e;
  
  	  bitmap_set_bit (live_range, bb->index);
  	  IOR_HARD_REG_SET (*btrs_live_in_range,
  	    btrs_live[bb->index]);
! 	  if (rtl_dump_file)
  	    {
! 	      fprintf (rtl_dump_file,
  		"Adding block %d to live range\n", bb->index);
! 	      fprintf (rtl_dump_file,"Now live btrs are ");
  	      dump_hard_reg_set (*btrs_live_in_range);
! 	      fprintf (rtl_dump_file, "\n");
  	    }
  
! 	  for (e = bb->pred; e != NULL; e = e->pred_next)
  	    {
  	      basic_block pred = e->src;
  	      if (!bitmap_bit_p (live_range, pred->index))
--- 931,955 ----
        if (!bitmap_bit_p (live_range, bb->index))
  	{
  	  edge e;
+ 	  edge_iterator ei;
  
  	  bitmap_set_bit (live_range, bb->index);
  	  IOR_HARD_REG_SET (*btrs_live_in_range,
  	    btrs_live[bb->index]);
! 	  /* A previous btr migration could have caused a register to be
! 	     live just at the end of a block which we need in full.  */
! 	  IOR_HARD_REG_SET (*btrs_live_in_range,
! 	    btrs_live_at_end[bb->index]);
! 	  if (dump_file)
  	    {
! 	      fprintf (dump_file,
  		"Adding block %d to live range\n", bb->index);
! 	      fprintf (dump_file,"Now live btrs are ");
  	      dump_hard_reg_set (*btrs_live_in_range);
! 	      fprintf (dump_file, "\n");
  	    }
  
! 	  FOR_EACH_EDGE (e, ei, bb->preds)
  	    {
  	      basic_block pred = e->src;
  	      if (!bitmap_bit_p (live_range, pred->index))
*************** btr_def_live_range (btr_def def, HARD_RE
*** 926,939 ****
      {
        btr_user user;
  
!       def->live_range = BITMAP_XMALLOC ();
  
        bitmap_set_bit (def->live_range, def->bb->index);
!       COPY_HARD_REG_SET (*btrs_live_in_range, btrs_live[def->bb->index]);
  
        for (user = def->uses; user != NULL; user = user->next)
  	augment_live_range (def->live_range, btrs_live_in_range,
! 			    def->bb, user->bb);
      }
    else
      {
--- 996,1014 ----
      {
        btr_user user;
  
!       def->live_range = BITMAP_ALLOC (NULL);
  
        bitmap_set_bit (def->live_range, def->bb->index);
!       COPY_HARD_REG_SET (*btrs_live_in_range,
! 			 (flag_btr_bb_exclusive
! 			  ? btrs_live : btrs_live_at_end)[def->bb->index]);
  
        for (user = def->uses; user != NULL; user = user->next)
  	augment_live_range (def->live_range, btrs_live_in_range,
! 			    def->bb, user->bb,
! 			    (flag_btr_bb_exclusive
! 			     || user->insn != BB_END (def->bb)
! 			     || GET_CODE (user->insn) != JUMP_INSN));
      }
    else
      {
*************** btr_def_live_range (btr_def def, HARD_RE
*** 941,955 ****
  	 the set of target registers live over it, because migration
  	 of other PT instructions may have affected it.
        */
!       int bb;
  
        CLEAR_HARD_REG_SET (*btrs_live_in_range);
!       EXECUTE_IF_SET_IN_BITMAP
! 	(def->live_range, 0, bb,
! 	 {
! 	   IOR_HARD_REG_SET (*btrs_live_in_range,
! 	     btrs_live[bb]);
! 	 });
      }
    if (!def->other_btr_uses_before_def &&
        !def->other_btr_uses_after_use)
--- 1016,1032 ----
  	 the set of target registers live over it, because migration
  	 of other PT instructions may have affected it.
        */
!       unsigned bb;
!       unsigned def_bb = flag_btr_bb_exclusive ? -1 : def->bb->index;
!       bitmap_iterator bi;
  
        CLEAR_HARD_REG_SET (*btrs_live_in_range);
!       EXECUTE_IF_SET_IN_BITMAP (def->live_range, 0, bb, bi)
! 	{
! 	  IOR_HARD_REG_SET (*btrs_live_in_range,
! 			    (def_bb == bb
! 			     ? btrs_live_at_end : btrs_live) [bb]);
! 	}
      }
    if (!def->other_btr_uses_before_def &&
        !def->other_btr_uses_after_use)
*************** combine_btr_defs (btr_def def, HARD_REG_
*** 979,985 ****
  	     target registers live over the merged range.  */
  	  int btr;
  	  HARD_REG_SET combined_btrs_live;
! 	  bitmap combined_live_range = BITMAP_XMALLOC ();
  	  btr_user user;
  
  	  if (other_def->live_range == NULL)
--- 1056,1062 ----
  	     target registers live over the merged range.  */
  	  int btr;
  	  HARD_REG_SET combined_btrs_live;
! 	  bitmap combined_live_range = BITMAP_ALLOC (NULL);
  	  btr_user user;
  
  	  if (other_def->live_range == NULL)
*************** combine_btr_defs (btr_def def, HARD_REG_
*** 992,1005 ****
  
  	  for (user = other_def->uses; user != NULL; user = user->next)
  	    augment_live_range (combined_live_range, &combined_btrs_live,
! 				def->bb, user->bb);
  
  	  btr = choose_btr (combined_btrs_live);
  	  if (btr != -1)
  	    {
  	      /* We can combine them.  */
! 	      if (rtl_dump_file)
! 		fprintf (rtl_dump_file,
  			 "Combining def in insn %d with def in insn %d\n",
  			 INSN_UID (other_def->insn), INSN_UID (def->insn));
  
--- 1069,1085 ----
  
  	  for (user = other_def->uses; user != NULL; user = user->next)
  	    augment_live_range (combined_live_range, &combined_btrs_live,
! 				def->bb, user->bb,
! 				(flag_btr_bb_exclusive
! 				 || user->insn != BB_END (def->bb)
! 				 || GET_CODE (user->insn) != JUMP_INSN));
  
  	  btr = choose_btr (combined_btrs_live);
  	  if (btr != -1)
  	    {
  	      /* We can combine them.  */
! 	      if (dump_file)
! 		fprintf (dump_file,
  			 "Combining def in insn %d with def in insn %d\n",
  			 INSN_UID (other_def->insn), INSN_UID (def->insn));
  
*************** combine_btr_defs (btr_def def, HARD_REG_
*** 1026,1032 ****
  	      clear_btr_from_live_range (other_def);
  	      other_def->uses = NULL;
  	      bitmap_copy (def->live_range, combined_live_range);
! 	      if (other_def->other_btr_uses_after_use)
  		def->other_btr_uses_after_use = 1;
  	      COPY_HARD_REG_SET (*btrs_live_in_range, combined_btrs_live);
  
--- 1106,1112 ----
  	      clear_btr_from_live_range (other_def);
  	      other_def->uses = NULL;
  	      bitmap_copy (def->live_range, combined_live_range);
! 	      if (other_def->btr == btr && other_def->other_btr_uses_after_use)
  		def->other_btr_uses_after_use = 1;
  	      COPY_HARD_REG_SET (*btrs_live_in_range, combined_btrs_live);
  
*************** combine_btr_defs (btr_def def, HARD_REG_
*** 1034,1040 ****
  	      delete_insn (other_def->insn);
  
  	    }
! 	  BITMAP_XFREE (combined_live_range);
  	}
      }
  }
--- 1114,1120 ----
  	      delete_insn (other_def->insn);
  
  	    }
! 	  BITMAP_FREE (combined_live_range);
  	}
      }
  }
*************** move_btr_def (basic_block new_def_bb, in
*** 1064,1071 ****
    btr_user user;
    rtx set;
  
!   if (rtl_dump_file)
!     fprintf(rtl_dump_file, "migrating to basic block %d, using reg %d\n",
  	    new_def_bb->index, btr);
  
    clear_btr_from_live_range (def);
--- 1144,1151 ----
    btr_user user;
    rtx set;
  
!   if (dump_file)
!     fprintf(dump_file, "migrating to basic block %d, using reg %d\n",
  	    new_def_bb->index, btr);
  
    clear_btr_from_live_range (def);
*************** move_btr_def (basic_block new_def_bb, in
*** 1073,1094 ****
    def->bb = new_def_bb;
    def->luid = 0;
    def->cost = basic_block_freq (new_def_bb);
-   def->other_btr_uses_before_def = 0;
    bitmap_copy (def->live_range, live_range);
    combine_btr_defs (def, btrs_live_in_range);
    btr = def->btr;
!   add_btr_to_live_range (def);
!   if (GET_CODE (insp) == CODE_LABEL)
      insp = NEXT_INSN (insp);
    /* N.B.: insp is expected to be NOTE_INSN_BASIC_BLOCK now.  Some
       optimizations can result in insp being both first and last insn of
       its basic block.  */
    /* ?? some assertions to check that insp is sensible? */
  
    set = single_set (old_insn);
    src = SET_SRC (set);
    btr_mode = GET_MODE (SET_DEST (set));
!   btr_rtx = gen_rtx (REG, btr_mode, btr);
  
    new_insn = gen_move_insn (btr_rtx, src);
  
--- 1153,1185 ----
    def->bb = new_def_bb;
    def->luid = 0;
    def->cost = basic_block_freq (new_def_bb);
    bitmap_copy (def->live_range, live_range);
    combine_btr_defs (def, btrs_live_in_range);
    btr = def->btr;
!   def->other_btr_uses_before_def
!     = TEST_HARD_REG_BIT (btrs_live[b->index], btr) ? 1 : 0;
!   add_btr_to_live_range (def, 1);
!   if (LABEL_P (insp))
      insp = NEXT_INSN (insp);
    /* N.B.: insp is expected to be NOTE_INSN_BASIC_BLOCK now.  Some
       optimizations can result in insp being both first and last insn of
       its basic block.  */
    /* ?? some assertions to check that insp is sensible? */
  
+   if (def->other_btr_uses_before_def)
+     {
+       insp = BB_END (b);
+       for (insp = BB_END (b); ! INSN_P (insp); insp = PREV_INSN (insp))
+ 	gcc_assert (insp != BB_HEAD (b));
+       
+       if (JUMP_P (insp) || can_throw_internal (insp))
+ 	insp = PREV_INSN (insp);
+     }
+ 
    set = single_set (old_insn);
    src = SET_SRC (set);
    btr_mode = GET_MODE (SET_DEST (set));
!   btr_rtx = gen_rtx_REG (btr_mode, btr);
  
    new_insn = gen_move_insn (btr_rtx, src);
  
*************** move_btr_def (basic_block new_def_bb, in
*** 1097,1104 ****
  
    regs_ever_live[btr] = 1;
  
!   if (rtl_dump_file)
!     fprintf (rtl_dump_file, "New pt is insn %d, inserted after insn %d\n",
  	     INSN_UID (def->insn), INSN_UID (insp));
  
    /* Delete the old target register initialization.  */
--- 1188,1195 ----
  
    regs_ever_live[btr] = 1;
  
!   if (dump_file)
!     fprintf (dump_file, "New pt is insn %d, inserted after insn %d\n",
  	     INSN_UID (def->insn), INSN_UID (insp));
  
    /* Delete the old target register initialization.  */
*************** move_btr_def (basic_block new_def_bb, in
*** 1117,1123 ****
  	  || GET_MODE (user->use) == VOIDmode)
  	replacement_rtx = btr_rtx;
        else
! 	replacement_rtx = gen_rtx (REG, GET_MODE (user->use), btr);
        replace_rtx (user->insn, user->use, replacement_rtx);
        user->use = replacement_rtx;
      }
--- 1208,1214 ----
  	  || GET_MODE (user->use) == VOIDmode)
  	replacement_rtx = btr_rtx;
        else
! 	replacement_rtx = gen_rtx_REG (GET_MODE (user->use), btr);
        replace_rtx (user->insn, user->use, replacement_rtx);
        user->use = replacement_rtx;
      }
*************** migrate_btr_def (btr_def def, int min_co
*** 1170,1187 ****
    int give_up = 0;
    int def_moved = 0;
    btr_user user;
!   int def_latency = 1;
  
!   if (rtl_dump_file)
!     fprintf (rtl_dump_file,
  	     "Attempting to migrate pt from insn %d (cost = %d, min_cost = %d) ... ",
  	     INSN_UID (def->insn), def->cost, min_cost);
  
    if (!def->group || def->has_ambiguous_use)
      /* These defs are not migratable.  */
      {
!       if (rtl_dump_file)
! 	fprintf (rtl_dump_file, "it's not migratable\n");
        return 0;
      }
  
--- 1261,1278 ----
    int give_up = 0;
    int def_moved = 0;
    btr_user user;
!   int def_latency;
  
!   if (dump_file)
!     fprintf (dump_file,
  	     "Attempting to migrate pt from insn %d (cost = %d, min_cost = %d) ... ",
  	     INSN_UID (def->insn), def->cost, min_cost);
  
    if (!def->group || def->has_ambiguous_use)
      /* These defs are not migratable.  */
      {
!       if (dump_file)
! 	fprintf (dump_file, "it's not migratable\n");
        return 0;
      }
  
*************** migrate_btr_def (btr_def def, int min_co
*** 1190,1213 ****
         no need to consider it further.
      */
      {
!       if (rtl_dump_file)
! 	fprintf (rtl_dump_file, "it's already combined with another pt\n");
        return 0;
      }
  
    btr_def_live_range (def, &btrs_live_in_range);
!   live_range = BITMAP_XMALLOC ();
    bitmap_copy (live_range, def->live_range);
  
  #ifdef INSN_SCHEDULING
!   if ((*targetm.sched.use_dfa_pipeline_interface) ())
!     def_latency = insn_default_latency (def->insn);
!   else
!     def_latency = result_ready_cost (def->insn);
  #endif
  
-   def_latency *= issue_rate;
- 
    for (user = def->uses; user != NULL; user = user->next)
      {
        if (user->bb == def->bb
--- 1281,1301 ----
         no need to consider it further.
      */
      {
!       if (dump_file)
! 	fprintf (dump_file, "it's already combined with another pt\n");
        return 0;
      }
  
    btr_def_live_range (def, &btrs_live_in_range);
!   live_range = BITMAP_ALLOC (NULL);
    bitmap_copy (live_range, def->live_range);
  
  #ifdef INSN_SCHEDULING
!   def_latency = insn_default_latency (def->insn) * issue_rate;
! #else
!   def_latency = issue_rate;
  #endif
  
    for (user = def->uses; user != NULL; user = user->next)
      {
        if (user->bb == def->bb
*************** migrate_btr_def (btr_def def, int min_co
*** 1231,1249 ****
  	 basic block TRY.  */
        int try_freq = basic_block_freq (try);
  
!       if (rtl_dump_file)
! 	fprintf (rtl_dump_file, "trying block %d ...", try->index);
  
        if (try_freq < def_basic_block_freq
  	  || (try_freq == def_basic_block_freq && btr_used_near_def))
  	{
  	  int btr;
! 	  augment_live_range (live_range, &btrs_live_in_range, def->bb, try);
! 	  if (rtl_dump_file)
  	    {
! 	      fprintf (rtl_dump_file, "Now btrs live in range are: ");
  	      dump_hard_reg_set (btrs_live_in_range);
! 	      fprintf (rtl_dump_file, "\n");
  	    }
  	  btr = choose_btr (btrs_live_in_range);
  	  if (btr != -1)
--- 1319,1338 ----
  	 basic block TRY.  */
        int try_freq = basic_block_freq (try);
  
!       if (dump_file)
! 	fprintf (dump_file, "trying block %d ...", try->index);
  
        if (try_freq < def_basic_block_freq
  	  || (try_freq == def_basic_block_freq && btr_used_near_def))
  	{
  	  int btr;
! 	  augment_live_range (live_range, &btrs_live_in_range, def->bb, try,
! 			      flag_btr_bb_exclusive);
! 	  if (dump_file)
  	    {
! 	      fprintf (dump_file, "Now btrs live in range are: ");
  	      dump_hard_reg_set (btrs_live_in_range);
! 	      fprintf (dump_file, "\n");
  	    }
  	  btr = choose_btr (btrs_live_in_range);
  	  if (btr != -1)
*************** migrate_btr_def (btr_def def, int min_co
*** 1259,1266 ****
  	      /* There are no free target registers available to move
  		 this far forward, so give up */
  	      give_up = 1;
! 	      if (rtl_dump_file)
! 		fprintf (rtl_dump_file,
  			 "giving up because there are no free target registers\n");
  	    }
  
--- 1348,1355 ----
  	      /* There are no free target registers available to move
  		 this far forward, so give up */
  	      give_up = 1;
! 	      if (dump_file)
! 		fprintf (dump_file,
  			 "giving up because there are no free target registers\n");
  	    }
  
*************** migrate_btr_def (btr_def def, int min_co
*** 1269,1278 ****
    if (!def_moved)
      {
        give_up = 1;
!       if (rtl_dump_file)
! 	fprintf (rtl_dump_file, "failed to move\n");
      }
!   BITMAP_XFREE (live_range);
    return !give_up;
  }
  
--- 1358,1367 ----
    if (!def_moved)
      {
        give_up = 1;
!       if (dump_file)
! 	fprintf (dump_file, "failed to move\n");
      }
!   BITMAP_FREE (live_range);
    return !give_up;
  }
  
*************** migrate_btr_defs (enum reg_class btr_cla
*** 1285,1298 ****
    int reg;
  
    gcc_obstack_init (&migrate_btrl_obstack);
!   if (rtl_dump_file)
      {
        int i;
  
        for (i = 0; i < n_basic_blocks; i++)
  	{
  	  basic_block bb = BASIC_BLOCK (i);
! 	  fprintf(rtl_dump_file,
  	    "Basic block %d: count = " HOST_WIDEST_INT_PRINT_DEC
  	    " loop-depth = %d idom = %d\n",
  	    i, (HOST_WIDEST_INT) bb->count, bb->loop_depth,
--- 1374,1387 ----
    int reg;
  
    gcc_obstack_init (&migrate_btrl_obstack);
!   if (dump_file)
      {
        int i;
  
        for (i = 0; i < n_basic_blocks; i++)
  	{
  	  basic_block bb = BASIC_BLOCK (i);
! 	  fprintf(dump_file,
  	    "Basic block %d: count = " HOST_WIDEST_INT_PRINT_DEC
  	    " loop-depth = %d idom = %d\n",
  	    i, (HOST_WIDEST_INT) bb->count, bb->loop_depth,
*************** migrate_btr_defs (enum reg_class btr_cla
*** 1312,1356 ****
        }
  
    btrs_live = xcalloc (n_basic_blocks, sizeof (HARD_REG_SET));
  
    build_btr_def_use_webs (all_btr_defs);
  
    while (!fibheap_empty (all_btr_defs))
      {
!       btr_def def =
! 	(btr_def) fibheap_extract_min (all_btr_defs);
        int min_cost = -fibheap_min_key (all_btr_defs);
        if (migrate_btr_def (def, min_cost))
  	{
  	  fibheap_insert (all_btr_defs, -def->cost, (void *) def);
! 	  if (rtl_dump_file)
  	    {
! 	      fprintf (rtl_dump_file,
  		"Putting insn %d back on queue with priority %d\n",
  		INSN_UID (def->insn), def->cost);
  	    }
  	}
        else
! 	{
! 	  if (def->live_range)
! 	    BITMAP_XFREE (def->live_range);
! 	}
      }
  
    free (btrs_live);
    obstack_free (&migrate_btrl_obstack, NULL);
    fibheap_delete (all_btr_defs);
  }
  
  void
! branch_target_load_optimize (rtx insns, bool after_prologue_epilogue_gen)
  {
!   enum reg_class class = (*targetm.branch_target_register_class) ();
    if (class != NO_REGS)
      {
        /* Initialize issue_rate.  */
        if (targetm.sched.issue_rate)
! 	issue_rate = (*targetm.sched.issue_rate) ();
        else
  	issue_rate = 1;
  
--- 1401,1443 ----
        }
  
    btrs_live = xcalloc (n_basic_blocks, sizeof (HARD_REG_SET));
+   btrs_live_at_end = xcalloc (n_basic_blocks, sizeof (HARD_REG_SET));
  
    build_btr_def_use_webs (all_btr_defs);
  
    while (!fibheap_empty (all_btr_defs))
      {
!       btr_def def = fibheap_extract_min (all_btr_defs);
        int min_cost = -fibheap_min_key (all_btr_defs);
        if (migrate_btr_def (def, min_cost))
  	{
  	  fibheap_insert (all_btr_defs, -def->cost, (void *) def);
! 	  if (dump_file)
  	    {
! 	      fprintf (dump_file,
  		"Putting insn %d back on queue with priority %d\n",
  		INSN_UID (def->insn), def->cost);
  	    }
  	}
        else
! 	BITMAP_FREE (def->live_range);
      }
  
    free (btrs_live);
+   free (btrs_live_at_end);
    obstack_free (&migrate_btrl_obstack, NULL);
    fibheap_delete (all_btr_defs);
  }
  
  void
! branch_target_load_optimize (bool after_prologue_epilogue_gen)
  {
!   enum reg_class class = targetm.branch_target_register_class ();
    if (class != NO_REGS)
      {
        /* Initialize issue_rate.  */
        if (targetm.sched.issue_rate)
! 	issue_rate = targetm.sched.issue_rate ();
        else
  	issue_rate = 1;
  
*************** branch_target_load_optimize (rtx insns, 
*** 1361,1372 ****
        cleanup_cfg (optimize ? CLEANUP_EXPENSIVE : 0);
  #endif
  
!       life_analysis (insns, NULL, 0);
  
        /* Dominator info is also needed for migrate_btr_def.  */
        calculate_dominance_info (CDI_DOMINATORS);
        migrate_btr_defs (class,
! 		       ((*targetm.branch_target_register_callee_saved)
  			(after_prologue_epilogue_gen)));
  
        free_dominance_info (CDI_DOMINATORS);
--- 1448,1459 ----
        cleanup_cfg (optimize ? CLEANUP_EXPENSIVE : 0);
  #endif
  
!       life_analysis (NULL, 0);
  
        /* Dominator info is also needed for migrate_btr_def.  */
        calculate_dominance_info (CDI_DOMINATORS);
        migrate_btr_defs (class,
! 		       (targetm.branch_target_register_callee_saved
  			(after_prologue_epilogue_gen)));
  
        free_dominance_info (CDI_DOMINATORS);
diff -Nrcpad gcc-3.4.3/gcc/builtin-attrs.def gcc-4.0.0/gcc/builtin-attrs.def
*** gcc-3.4.3/gcc/builtin-attrs.def	Fri Aug 22 06:25:08 2003
--- gcc-4.0.0/gcc/builtin-attrs.def	Fri Oct 15 14:47:06 2004
***************
*** 1,4 ****
! /* Copyright (C) 2001, 2002 Free Software Foundation, Inc.
     Contributed by Joseph Myers <jsm28@cam.ac.uk>.
  
  This file is part of GCC.
--- 1,4 ----
! /* Copyright (C) 2001, 2002, 2004 Free Software Foundation, Inc.
     Contributed by Joseph Myers <jsm28@cam.ac.uk>.
  
  This file is part of GCC.
*************** DEF_LIST_INT_INT (3,0)
*** 69,75 ****
  DEF_LIST_INT_INT (3,4)
  #undef DEF_LIST_INT_INT
  
! /* Construct tress for identifiers.  */
  DEF_ATTR_IDENT (ATTR_CONST, "const")
  DEF_ATTR_IDENT (ATTR_FORMAT, "format")
  DEF_ATTR_IDENT (ATTR_FORMAT_ARG, "format_arg")
--- 69,75 ----
  DEF_LIST_INT_INT (3,4)
  #undef DEF_LIST_INT_INT
  
! /* Construct trees for identifiers.  */
  DEF_ATTR_IDENT (ATTR_CONST, "const")
  DEF_ATTR_IDENT (ATTR_FORMAT, "format")
  DEF_ATTR_IDENT (ATTR_FORMAT_ARG, "format_arg")
*************** DEF_ATTR_IDENT (ATTR_GCC_CDIAG, "gcc_cdi
*** 84,89 ****
--- 84,90 ----
  DEF_ATTR_IDENT (ATTR_GCC_CXXDIAG, "gcc_cxxdiag")
  DEF_ATTR_IDENT (ATTR_PURE, "pure")
  DEF_ATTR_IDENT (ATTR_SCANF, "scanf")
+ DEF_ATTR_IDENT (ATTR_SENTINEL, "sentinel")
  DEF_ATTR_IDENT (ATTR_STRFMON, "strfmon")
  DEF_ATTR_IDENT (ATTR_STRFTIME, "strftime")
  
*************** DEF_ATTR_TREE_LIST (ATTR_NORETURN_NOTHRO
*** 97,103 ****
--- 98,116 ----
  			ATTR_NULL, ATTR_NOTHROW_LIST)
  DEF_ATTR_TREE_LIST (ATTR_MALLOC_NOTHROW_LIST, ATTR_MALLOC,	\
  			ATTR_NULL, ATTR_NOTHROW_LIST)
+ DEF_ATTR_TREE_LIST (ATTR_SENTINEL_NOTHROW_LIST, ATTR_SENTINEL,	\
+ 			ATTR_NULL, ATTR_NOTHROW_LIST)
  
+ DEF_ATTR_TREE_LIST (ATTR_NONNULL_1, ATTR_NONNULL, ATTR_LIST_1, ATTR_NULL)
+ DEF_ATTR_TREE_LIST (ATTR_NONNULL_2, ATTR_NONNULL, ATTR_LIST_2, ATTR_NULL)
+ /* Functions whose first and second parameters are nonnull pointers.  */
+ DEF_ATTR_TREE_LIST (ATTR_NONNULL_1_2, ATTR_NONNULL, ATTR_LIST_2, \
+ 			ATTR_NONNULL_1)
+ /* Functions whose first and fourth parameters are nonnull pointers.  */
+ DEF_ATTR_TREE_LIST (ATTR_NONNULL_1_4, ATTR_NONNULL, ATTR_LIST_4, \
+ 			ATTR_NONNULL_1)
+ DEF_ATTR_TREE_LIST (ATTR_NOTHROW_SENTINEL_1, ATTR_SENTINEL, ATTR_LIST_1, \
+ 			ATTR_NOTHROW_LIST)
  DEF_ATTR_TREE_LIST (ATTR_NOTHROW_NONNULL_1, ATTR_NONNULL, ATTR_LIST_1, \
  			ATTR_NOTHROW_LIST)
  DEF_ATTR_TREE_LIST (ATTR_NOTHROW_NONNULL_2, ATTR_NONNULL, ATTR_LIST_2, \
diff -Nrcpad gcc-3.4.3/gcc/builtin-types.def gcc-4.0.0/gcc/builtin-types.def
*** gcc-3.4.3/gcc/builtin-types.def	Mon Feb  9 20:40:31 2004
--- gcc-4.0.0/gcc/builtin-types.def	Fri Jul  9 23:04:31 2004
***************
*** 1,4 ****
! /* Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
--- 1,4 ----
! /* Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
*************** along with GCC; see the file COPYING.  I
*** 17,23 ****
  Software Foundation, 59 Temple Place - Suite 330, Boston, MA
  02111-1307, USA.  */
  
! /* This header provides a declaritive way of describing the types that
     are used when declaring builtin functions.
  
     Before including this header, you must define the following macros:
--- 17,23 ----
  Software Foundation, 59 Temple Place - Suite 330, Boston, MA
  02111-1307, USA.  */
  
! /* This header provides a declarative way of describing the types that
     are used when declaring builtin functions.
  
     Before including this header, you must define the following macros:
*************** Software Foundation, 59 Temple Place - S
*** 61,72 ****
  
  DEF_PRIMITIVE_TYPE (BT_VOID, void_type_node)
  DEF_PRIMITIVE_TYPE (BT_INT, integer_type_node)
! DEF_PRIMITIVE_TYPE (BT_UNSIGNED, unsigned_type_node)
  DEF_PRIMITIVE_TYPE (BT_LONG, long_integer_type_node)
  DEF_PRIMITIVE_TYPE (BT_LONGLONG, long_long_integer_type_node)
  DEF_PRIMITIVE_TYPE (BT_WORD, (*lang_hooks.types.type_for_mode) (word_mode, 0))
  DEF_PRIMITIVE_TYPE (BT_FLOAT, float_type_node)
- DEF_PRIMITIVE_TYPE (BT_INTMAX, intmax_type_node)
  DEF_PRIMITIVE_TYPE (BT_DOUBLE, double_type_node)
  DEF_PRIMITIVE_TYPE (BT_LONGDOUBLE, long_double_type_node)
  DEF_PRIMITIVE_TYPE (BT_COMPLEX_FLOAT, complex_float_type_node)
--- 61,75 ----
  
  DEF_PRIMITIVE_TYPE (BT_VOID, void_type_node)
  DEF_PRIMITIVE_TYPE (BT_INT, integer_type_node)
! DEF_PRIMITIVE_TYPE (BT_UINT, unsigned_type_node)
  DEF_PRIMITIVE_TYPE (BT_LONG, long_integer_type_node)
+ DEF_PRIMITIVE_TYPE (BT_ULONG, long_unsigned_type_node)
  DEF_PRIMITIVE_TYPE (BT_LONGLONG, long_long_integer_type_node)
+ DEF_PRIMITIVE_TYPE (BT_ULONGLONG, long_long_unsigned_type_node)
+ DEF_PRIMITIVE_TYPE (BT_INTMAX, intmax_type_node)
+ DEF_PRIMITIVE_TYPE (BT_UINTMAX, uintmax_type_node)
  DEF_PRIMITIVE_TYPE (BT_WORD, (*lang_hooks.types.type_for_mode) (word_mode, 0))
  DEF_PRIMITIVE_TYPE (BT_FLOAT, float_type_node)
  DEF_PRIMITIVE_TYPE (BT_DOUBLE, double_type_node)
  DEF_PRIMITIVE_TYPE (BT_LONGDOUBLE, long_double_type_node)
  DEF_PRIMITIVE_TYPE (BT_COMPLEX_FLOAT, complex_float_type_node)
*************** DEF_PRIMITIVE_TYPE (BT_COMPLEX_DOUBLE, c
*** 74,96 ****
  DEF_PRIMITIVE_TYPE (BT_COMPLEX_LONGDOUBLE, complex_long_double_type_node)
  
  DEF_PRIMITIVE_TYPE (BT_PTR, ptr_type_node)
  DEF_PRIMITIVE_TYPE (BT_CONST_PTR, const_ptr_type_node)
  DEF_PRIMITIVE_TYPE (BT_PTRMODE, (*lang_hooks.types.type_for_mode)(ptr_mode, 0))
  DEF_PRIMITIVE_TYPE (BT_INT_PTR, integer_ptr_type_node)
  DEF_PRIMITIVE_TYPE (BT_FLOAT_PTR, float_ptr_type_node)
  DEF_PRIMITIVE_TYPE (BT_DOUBLE_PTR, double_ptr_type_node)
  DEF_PRIMITIVE_TYPE (BT_LONGDOUBLE_PTR, long_double_ptr_type_node)
  DEF_PRIMITIVE_TYPE (BT_SIZE, size_type_node)
  DEF_PRIMITIVE_TYPE (BT_SSIZE, signed_size_type_node)
  DEF_PRIMITIVE_TYPE (BT_STRING, string_type_node)
  DEF_PRIMITIVE_TYPE (BT_CONST_STRING, const_string_type_node)
  
  DEF_PRIMITIVE_TYPE (BT_VALIST_REF, va_list_ref_type_node)
  DEF_PRIMITIVE_TYPE (BT_VALIST_ARG, va_list_arg_type_node)
  
  DEF_FUNCTION_TYPE_0 (BT_FN_VOID, BT_VOID)
  DEF_FUNCTION_TYPE_0 (BT_FN_PTR, BT_PTR)
! DEF_FUNCTION_TYPE_0 (BT_FN_UNSIGNED, BT_UNSIGNED)
  DEF_FUNCTION_TYPE_0 (BT_FN_FLOAT, BT_FLOAT)
  DEF_FUNCTION_TYPE_0 (BT_FN_DOUBLE, BT_DOUBLE)
  /* For "long double" we use LONGDOUBLE (not LONG_DOUBLE) to
--- 77,105 ----
  DEF_PRIMITIVE_TYPE (BT_COMPLEX_LONGDOUBLE, complex_long_double_type_node)
  
  DEF_PRIMITIVE_TYPE (BT_PTR, ptr_type_node)
+ DEF_PRIMITIVE_TYPE (BT_FILEPTR, fileptr_type_node)
  DEF_PRIMITIVE_TYPE (BT_CONST_PTR, const_ptr_type_node)
  DEF_PRIMITIVE_TYPE (BT_PTRMODE, (*lang_hooks.types.type_for_mode)(ptr_mode, 0))
  DEF_PRIMITIVE_TYPE (BT_INT_PTR, integer_ptr_type_node)
  DEF_PRIMITIVE_TYPE (BT_FLOAT_PTR, float_ptr_type_node)
  DEF_PRIMITIVE_TYPE (BT_DOUBLE_PTR, double_ptr_type_node)
  DEF_PRIMITIVE_TYPE (BT_LONGDOUBLE_PTR, long_double_ptr_type_node)
+ DEF_PRIMITIVE_TYPE (BT_PID, pid_type_node)
  DEF_PRIMITIVE_TYPE (BT_SIZE, size_type_node)
  DEF_PRIMITIVE_TYPE (BT_SSIZE, signed_size_type_node)
+ DEF_PRIMITIVE_TYPE (BT_WINT, wint_type_node)
  DEF_PRIMITIVE_TYPE (BT_STRING, string_type_node)
  DEF_PRIMITIVE_TYPE (BT_CONST_STRING, const_string_type_node)
  
  DEF_PRIMITIVE_TYPE (BT_VALIST_REF, va_list_ref_type_node)
  DEF_PRIMITIVE_TYPE (BT_VALIST_ARG, va_list_arg_type_node)
  
+ DEF_POINTER_TYPE (BT_PTR_CONST_STRING, BT_CONST_STRING)
+ 
  DEF_FUNCTION_TYPE_0 (BT_FN_VOID, BT_VOID)
  DEF_FUNCTION_TYPE_0 (BT_FN_PTR, BT_PTR)
! DEF_FUNCTION_TYPE_0 (BT_FN_PID, BT_PID)
! DEF_FUNCTION_TYPE_0 (BT_FN_UINT, BT_UINT)
  DEF_FUNCTION_TYPE_0 (BT_FN_FLOAT, BT_FLOAT)
  DEF_FUNCTION_TYPE_0 (BT_FN_DOUBLE, BT_DOUBLE)
  /* For "long double" we use LONGDOUBLE (not LONG_DOUBLE) to
*************** DEF_FUNCTION_TYPE_1 (BT_FN_DOUBLE_COMPLE
*** 117,127 ****
                       BT_DOUBLE, BT_COMPLEX_DOUBLE)
  DEF_FUNCTION_TYPE_1 (BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE,
                       BT_LONGDOUBLE, BT_COMPLEX_LONGDOUBLE)
! DEF_FUNCTION_TYPE_1 (BT_FN_PTR_UNSIGNED, BT_PTR, BT_UNSIGNED)
  DEF_FUNCTION_TYPE_1 (BT_FN_PTR_SIZE, BT_PTR, BT_SIZE)
  DEF_FUNCTION_TYPE_1 (BT_FN_INT_INT, BT_INT, BT_INT)
  DEF_FUNCTION_TYPE_1 (BT_FN_INT_LONG, BT_INT, BT_LONG)
  DEF_FUNCTION_TYPE_1 (BT_FN_INT_LONGLONG, BT_INT, BT_LONGLONG)
  DEF_FUNCTION_TYPE_1 (BT_FN_INT_PTR, BT_INT, BT_PTR)
  DEF_FUNCTION_TYPE_1 (BT_FN_INT_FLOAT, BT_INT, BT_FLOAT)
  DEF_FUNCTION_TYPE_1 (BT_FN_INT_DOUBLE, BT_INT, BT_DOUBLE)
--- 126,141 ----
                       BT_DOUBLE, BT_COMPLEX_DOUBLE)
  DEF_FUNCTION_TYPE_1 (BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE,
                       BT_LONGDOUBLE, BT_COMPLEX_LONGDOUBLE)
! DEF_FUNCTION_TYPE_1 (BT_FN_PTR_UINT, BT_PTR, BT_UINT)
  DEF_FUNCTION_TYPE_1 (BT_FN_PTR_SIZE, BT_PTR, BT_SIZE)
  DEF_FUNCTION_TYPE_1 (BT_FN_INT_INT, BT_INT, BT_INT)
+ DEF_FUNCTION_TYPE_1 (BT_FN_INT_UINT, BT_INT, BT_UINT)
  DEF_FUNCTION_TYPE_1 (BT_FN_INT_LONG, BT_INT, BT_LONG)
+ DEF_FUNCTION_TYPE_1 (BT_FN_INT_ULONG, BT_INT, BT_ULONG)
  DEF_FUNCTION_TYPE_1 (BT_FN_INT_LONGLONG, BT_INT, BT_LONGLONG)
+ DEF_FUNCTION_TYPE_1 (BT_FN_INT_ULONGLONG, BT_INT, BT_ULONGLONG)
+ DEF_FUNCTION_TYPE_1 (BT_FN_INT_INTMAX, BT_INT, BT_INTMAX)
+ DEF_FUNCTION_TYPE_1 (BT_FN_INT_UINTMAX, BT_INT, BT_UINTMAX)
  DEF_FUNCTION_TYPE_1 (BT_FN_INT_PTR, BT_INT, BT_PTR)
  DEF_FUNCTION_TYPE_1 (BT_FN_INT_FLOAT, BT_INT, BT_FLOAT)
  DEF_FUNCTION_TYPE_1 (BT_FN_INT_DOUBLE, BT_INT, BT_DOUBLE)
*************** DEF_FUNCTION_TYPE_1 (BT_FN_LONGDOUBLE_CO
*** 144,149 ****
--- 158,165 ----
  		     BT_LONGDOUBLE, BT_CONST_STRING)
  DEF_FUNCTION_TYPE_1 (BT_FN_STRING_CONST_STRING, BT_STRING, BT_CONST_STRING)
  DEF_FUNCTION_TYPE_1 (BT_FN_WORD_PTR, BT_WORD, BT_PTR)
+ DEF_FUNCTION_TYPE_1 (BT_FN_INT_WINT, BT_INT, BT_WINT)
+ DEF_FUNCTION_TYPE_1 (BT_FN_WINT_WINT, BT_WINT, BT_WINT)
  
  DEF_FUNCTION_TYPE_2 (BT_FN_VOID_PTR_INT, BT_VOID, BT_PTR, BT_INT)
  DEF_FUNCTION_TYPE_2 (BT_FN_STRING_STRING_CONST_STRING, 
*************** DEF_FUNCTION_TYPE_2 (BT_FN_SIZE_CONST_ST
*** 156,165 ****
  	             BT_SIZE, BT_CONST_STRING, BT_CONST_STRING)
  DEF_FUNCTION_TYPE_2 (BT_FN_STRING_CONST_STRING_INT,
  	             BT_STRING, BT_CONST_STRING, BT_INT)
! DEF_FUNCTION_TYPE_2 (BT_FN_INT_CONST_STRING_PTR,
! 		     BT_INT, BT_CONST_STRING, BT_PTR)
! DEF_FUNCTION_TYPE_2 (BT_FN_INT_INT_PTR,
! 		     BT_INT, BT_INT, BT_PTR)
  DEF_FUNCTION_TYPE_2 (BT_FN_VOID_PTRMODE_PTR,
  		     BT_VOID, BT_PTRMODE, BT_PTR)
  DEF_FUNCTION_TYPE_2 (BT_FN_VOID_VALIST_REF_VALIST_ARG, 
--- 172,181 ----
  	             BT_SIZE, BT_CONST_STRING, BT_CONST_STRING)
  DEF_FUNCTION_TYPE_2 (BT_FN_STRING_CONST_STRING_INT,
  	             BT_STRING, BT_CONST_STRING, BT_INT)
! DEF_FUNCTION_TYPE_2 (BT_FN_INT_CONST_STRING_FILEPTR,
! 		     BT_INT, BT_CONST_STRING, BT_FILEPTR)
! DEF_FUNCTION_TYPE_2 (BT_FN_INT_INT_FILEPTR,
! 		     BT_INT, BT_INT, BT_FILEPTR)
  DEF_FUNCTION_TYPE_2 (BT_FN_VOID_PTRMODE_PTR,
  		     BT_VOID, BT_PTRMODE, BT_PTR)
  DEF_FUNCTION_TYPE_2 (BT_FN_VOID_VALIST_REF_VALIST_ARG, 
*************** DEF_FUNCTION_TYPE_2 (BT_FN_COMPLEX_DOUBL
*** 220,225 ****
--- 236,244 ----
  		     BT_COMPLEX_DOUBLE, BT_COMPLEX_DOUBLE, BT_COMPLEX_DOUBLE)
  DEF_FUNCTION_TYPE_2 (BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, 
  	             BT_COMPLEX_LONGDOUBLE, BT_COMPLEX_LONGDOUBLE, BT_COMPLEX_LONGDOUBLE)
+ DEF_FUNCTION_TYPE_2 (BT_FN_VOID_PTR_PTR, BT_VOID, BT_PTR, BT_PTR)
+ DEF_FUNCTION_TYPE_2 (BT_FN_INT_CONST_STRING_PTR_CONST_STRING,
+ 		     BT_INT, BT_CONST_STRING, BT_PTR_CONST_STRING)
  
  DEF_FUNCTION_TYPE_3 (BT_FN_STRING_STRING_CONST_STRING_SIZE,
  		     BT_STRING, BT_STRING, BT_CONST_STRING, BT_SIZE)
*************** DEF_FUNCTION_TYPE_3 (BT_FN_INT_STRING_CO
*** 239,246 ****
  		     BT_INT, BT_STRING, BT_CONST_STRING, BT_VALIST_ARG)
  DEF_FUNCTION_TYPE_3 (BT_FN_INT_CONST_STRING_CONST_STRING_VALIST_ARG,
  		     BT_INT, BT_CONST_STRING, BT_CONST_STRING, BT_VALIST_ARG)
! DEF_FUNCTION_TYPE_3 (BT_FN_INT_PTR_CONST_STRING_VALIST_ARG,
! 		     BT_INT, BT_PTR, BT_CONST_STRING, BT_VALIST_ARG)
  DEF_FUNCTION_TYPE_3 (BT_FN_STRING_CONST_STRING_CONST_STRING_INT,
  		     BT_STRING, BT_CONST_STRING, BT_CONST_STRING, BT_INT)
  DEF_FUNCTION_TYPE_3 (BT_FN_FLOAT_FLOAT_FLOAT_FLOAT,
--- 258,265 ----
  		     BT_INT, BT_STRING, BT_CONST_STRING, BT_VALIST_ARG)
  DEF_FUNCTION_TYPE_3 (BT_FN_INT_CONST_STRING_CONST_STRING_VALIST_ARG,
  		     BT_INT, BT_CONST_STRING, BT_CONST_STRING, BT_VALIST_ARG)
! DEF_FUNCTION_TYPE_3 (BT_FN_INT_FILEPTR_CONST_STRING_VALIST_ARG,
! 		     BT_INT, BT_FILEPTR, BT_CONST_STRING, BT_VALIST_ARG)
  DEF_FUNCTION_TYPE_3 (BT_FN_STRING_CONST_STRING_CONST_STRING_INT,
  		     BT_STRING, BT_CONST_STRING, BT_CONST_STRING, BT_INT)
  DEF_FUNCTION_TYPE_3 (BT_FN_FLOAT_FLOAT_FLOAT_FLOAT,
*************** DEF_FUNCTION_TYPE_3 (BT_FN_VOID_DOUBLE_D
*** 261,269 ****
  		     BT_VOID, BT_DOUBLE, BT_DOUBLE_PTR, BT_DOUBLE_PTR)
  DEF_FUNCTION_TYPE_3 (BT_FN_VOID_LONGDOUBLE_LONGDOUBLEPTR_LONGDOUBLEPTR,
  		     BT_VOID, BT_LONGDOUBLE, BT_LONGDOUBLE_PTR, BT_LONGDOUBLE_PTR)
  
! DEF_FUNCTION_TYPE_4 (BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR,
! 		     BT_SIZE, BT_CONST_PTR, BT_SIZE, BT_SIZE, BT_PTR)
  DEF_FUNCTION_TYPE_4 (BT_FN_INT_STRING_SIZE_CONST_STRING_VALIST_ARG,
  		BT_INT, BT_STRING, BT_SIZE, BT_CONST_STRING, BT_VALIST_ARG)
  DEF_FUNCTION_TYPE_4 (BT_FN_SIZE_STRING_SIZE_CONST_STRING_CONST_PTR,
--- 280,291 ----
  		     BT_VOID, BT_DOUBLE, BT_DOUBLE_PTR, BT_DOUBLE_PTR)
  DEF_FUNCTION_TYPE_3 (BT_FN_VOID_LONGDOUBLE_LONGDOUBLEPTR_LONGDOUBLEPTR,
  		     BT_VOID, BT_LONGDOUBLE, BT_LONGDOUBLE_PTR, BT_LONGDOUBLE_PTR)
+ DEF_FUNCTION_TYPE_3 (BT_FN_VOID_PTR_PTR_PTR, BT_VOID, BT_PTR, BT_PTR, BT_PTR)
+ DEF_FUNCTION_TYPE_3 (BT_FN_INT_CONST_STRING_PTR_CONST_STRING_PTR_CONST_STRING,
+ 		     BT_INT, BT_CONST_STRING, BT_PTR_CONST_STRING, BT_PTR_CONST_STRING)
  
! DEF_FUNCTION_TYPE_4 (BT_FN_SIZE_CONST_PTR_SIZE_SIZE_FILEPTR,
! 		     BT_SIZE, BT_CONST_PTR, BT_SIZE, BT_SIZE, BT_FILEPTR)
  DEF_FUNCTION_TYPE_4 (BT_FN_INT_STRING_SIZE_CONST_STRING_VALIST_ARG,
  		BT_INT, BT_STRING, BT_SIZE, BT_CONST_STRING, BT_VALIST_ARG)
  DEF_FUNCTION_TYPE_4 (BT_FN_SIZE_STRING_SIZE_CONST_STRING_CONST_PTR,
*************** DEF_FUNCTION_TYPE_VAR_1 (BT_FN_VOID_CONS
*** 280,287 ****
  DEF_FUNCTION_TYPE_VAR_1 (BT_FN_INT_CONST_STRING_VAR,
  	                 BT_INT, BT_CONST_STRING)
  
! DEF_FUNCTION_TYPE_VAR_2 (BT_FN_INT_PTR_CONST_STRING_VAR,
! 	                 BT_INT, BT_PTR, BT_CONST_STRING)
  DEF_FUNCTION_TYPE_VAR_2 (BT_FN_INT_STRING_CONST_STRING_VAR,
  			 BT_INT, BT_STRING, BT_CONST_STRING)
  DEF_FUNCTION_TYPE_VAR_2 (BT_FN_INT_CONST_STRING_CONST_STRING_VAR,
--- 302,309 ----
  DEF_FUNCTION_TYPE_VAR_1 (BT_FN_INT_CONST_STRING_VAR,
  	                 BT_INT, BT_CONST_STRING)
  
! DEF_FUNCTION_TYPE_VAR_2 (BT_FN_INT_FILEPTR_CONST_STRING_VAR,
! 	                 BT_INT, BT_FILEPTR, BT_CONST_STRING)
  DEF_FUNCTION_TYPE_VAR_2 (BT_FN_INT_STRING_CONST_STRING_VAR,
  			 BT_INT, BT_STRING, BT_CONST_STRING)
  DEF_FUNCTION_TYPE_VAR_2 (BT_FN_INT_CONST_STRING_CONST_STRING_VAR,
diff -Nrcpad gcc-3.4.3/gcc/builtins.c gcc-4.0.0/gcc/builtins.c
*** gcc-3.4.3/gcc/builtins.c	Mon Feb 23 12:46:55 2004
--- gcc-4.0.0/gcc/builtins.c	Wed Mar 30 04:00:23 2005
***************
*** 1,6 ****
  /* Expand builtin functions.
     Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
!    2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
--- 1,6 ----
  /* Expand builtin functions.
     Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
!    2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
*************** Software Foundation, 59 Temple Place - S
*** 27,32 ****
--- 27,33 ----
  #include "real.h"
  #include "rtl.h"
  #include "tree.h"
+ #include "tree-gimple.h"
  #include "flags.h"
  #include "regs.h"
  #include "hard-reg-set.h"
*************** Software Foundation, 59 Temple Place - S
*** 44,61 ****
  #include "tm_p.h"
  #include "target.h"
  #include "langhooks.h"
  
  #define CALLED_AS_BUILT_IN(NODE) \
     (!strncmp (IDENTIFIER_POINTER (DECL_NAME (NODE)), "__builtin_", 10))
  
- /* Register mappings for target machines without register windows.  */
- #ifndef INCOMING_REGNO
- #define INCOMING_REGNO(OUT) (OUT)
- #endif
- #ifndef OUTGOING_REGNO
- #define OUTGOING_REGNO(IN) (IN)
- #endif
- 
  #ifndef PAD_VARARGS_DOWN
  #define PAD_VARARGS_DOWN BYTES_BIG_ENDIAN
  #endif
--- 45,56 ----
  #include "tm_p.h"
  #include "target.h"
  #include "langhooks.h"
+ #include "basic-block.h"
+ #include "tree-mudflap.h"
  
  #define CALLED_AS_BUILT_IN(NODE) \
     (!strncmp (IDENTIFIER_POINTER (DECL_NAME (NODE)), "__builtin_", 10))
  
  #ifndef PAD_VARARGS_DOWN
  #define PAD_VARARGS_DOWN BYTES_BIG_ENDIAN
  #endif
*************** Software Foundation, 59 Temple Place - S
*** 64,71 ****
  const char *const built_in_class_names[4]
    = {"NOT_BUILT_IN", "BUILT_IN_FRONTEND", "BUILT_IN_MD", "BUILT_IN_NORMAL"};
  
! #define DEF_BUILTIN(X, N, C, T, LT, B, F, NA, AT, IM) #X,
! const char *const built_in_names[(int) END_BUILTINS] =
  {
  #include "builtins.def"
  };
--- 59,66 ----
  const char *const built_in_class_names[4]
    = {"NOT_BUILT_IN", "BUILT_IN_FRONTEND", "BUILT_IN_MD", "BUILT_IN_NORMAL"};
  
! #define DEF_BUILTIN(X, N, C, T, LT, B, F, NA, AT, IM, COND) #X,
! const char * built_in_names[(int) END_BUILTINS] =
  {
  #include "builtins.def"
  };
*************** const char *const built_in_names[(int) E
*** 76,86 ****
  tree built_in_decls[(int) END_BUILTINS];
  /* Declarations used when constructing the builtin implicitly in the compiler.
     It may be NULL_TREE when this is invalid (for instance runtime is not
!    required to implement the function call in all cases.  */
  tree implicit_built_in_decls[(int) END_BUILTINS];
  
  static int get_pointer_alignment (tree, unsigned int);
- static tree c_strlen (tree, int);
  static const char *c_getstr (tree);
  static rtx c_readstr (const char *, enum machine_mode);
  static int target_char_cast (tree, char *);
--- 71,80 ----
  tree built_in_decls[(int) END_BUILTINS];
  /* Declarations used when constructing the builtin implicitly in the compiler.
     It may be NULL_TREE when this is invalid (for instance runtime is not
!    required to implement the function call in all cases).  */
  tree implicit_built_in_decls[(int) END_BUILTINS];
  
  static int get_pointer_alignment (tree, unsigned int);
  static const char *c_getstr (tree);
  static rtx c_readstr (const char *, enum machine_mode);
  static int target_char_cast (tree, char *);
*************** static int apply_result_size (void);
*** 92,97 ****
--- 86,92 ----
  static rtx result_vector (int, rtx);
  #endif
  static rtx expand_builtin_setjmp (tree, rtx);
+ static void expand_builtin_update_setjmp_buf (rtx);
  static void expand_builtin_prefetch (tree);
  static rtx expand_builtin_apply_args (void);
  static rtx expand_builtin_apply_args_1 (void);
*************** static rtx expand_builtin_classify_type 
*** 102,110 ****
  static void expand_errno_check (tree, rtx);
  static rtx expand_builtin_mathfn (tree, rtx, rtx);
  static rtx expand_builtin_mathfn_2 (tree, rtx, rtx);
! static rtx expand_builtin_constant_p (tree, enum machine_mode);
  static rtx expand_builtin_args_info (tree);
! static rtx expand_builtin_next_arg (tree);
  static rtx expand_builtin_va_start (tree);
  static rtx expand_builtin_va_end (tree);
  static rtx expand_builtin_va_copy (tree);
--- 97,105 ----
  static void expand_errno_check (tree, rtx);
  static rtx expand_builtin_mathfn (tree, rtx, rtx);
  static rtx expand_builtin_mathfn_2 (tree, rtx, rtx);
! static rtx expand_builtin_mathfn_3 (tree, rtx, rtx);
  static rtx expand_builtin_args_info (tree);
! static rtx expand_builtin_next_arg (void);
  static rtx expand_builtin_va_start (tree);
  static rtx expand_builtin_va_end (tree);
  static rtx expand_builtin_va_copy (tree);
*************** static rtx expand_builtin_memcmp (tree, 
*** 112,125 ****
  static rtx expand_builtin_strcmp (tree, rtx, enum machine_mode);
  static rtx expand_builtin_strncmp (tree, rtx, enum machine_mode);
  static rtx builtin_memcpy_read_str (void *, HOST_WIDE_INT, enum machine_mode);
! static rtx expand_builtin_strcat (tree, rtx, enum machine_mode);
  static rtx expand_builtin_strncat (tree, rtx, enum machine_mode);
  static rtx expand_builtin_strspn (tree, rtx, enum machine_mode);
  static rtx expand_builtin_strcspn (tree, rtx, enum machine_mode);
  static rtx expand_builtin_memcpy (tree, rtx, enum machine_mode);
! static rtx expand_builtin_mempcpy (tree, rtx, enum machine_mode, int);
! static rtx expand_builtin_memmove (tree, rtx, enum machine_mode);
! static rtx expand_builtin_bcopy (tree);
  static rtx expand_builtin_strcpy (tree, rtx, enum machine_mode);
  static rtx expand_builtin_stpcpy (tree, rtx, enum machine_mode);
  static rtx builtin_strncpy_read_str (void *, HOST_WIDE_INT, enum machine_mode);
--- 107,120 ----
  static rtx expand_builtin_strcmp (tree, rtx, enum machine_mode);
  static rtx expand_builtin_strncmp (tree, rtx, enum machine_mode);
  static rtx builtin_memcpy_read_str (void *, HOST_WIDE_INT, enum machine_mode);
! static rtx expand_builtin_strcat (tree, tree, rtx, enum machine_mode);
  static rtx expand_builtin_strncat (tree, rtx, enum machine_mode);
  static rtx expand_builtin_strspn (tree, rtx, enum machine_mode);
  static rtx expand_builtin_strcspn (tree, rtx, enum machine_mode);
  static rtx expand_builtin_memcpy (tree, rtx, enum machine_mode);
! static rtx expand_builtin_mempcpy (tree, tree, rtx, enum machine_mode, int);
! static rtx expand_builtin_memmove (tree, tree, rtx, enum machine_mode);
! static rtx expand_builtin_bcopy (tree, tree);
  static rtx expand_builtin_strcpy (tree, rtx, enum machine_mode);
  static rtx expand_builtin_stpcpy (tree, rtx, enum machine_mode);
  static rtx builtin_strncpy_read_str (void *, HOST_WIDE_INT, enum machine_mode);
*************** static rtx builtin_memset_gen_str (void 
*** 129,138 ****
  static rtx expand_builtin_memset (tree, rtx, enum machine_mode);
  static rtx expand_builtin_bzero (tree);
  static rtx expand_builtin_strlen (tree, rtx, enum machine_mode);
! static rtx expand_builtin_strstr (tree, rtx, enum machine_mode);
! static rtx expand_builtin_strpbrk (tree, rtx, enum machine_mode);
! static rtx expand_builtin_strchr (tree, rtx, enum machine_mode);
! static rtx expand_builtin_strrchr (tree, rtx, enum machine_mode);
  static rtx expand_builtin_alloca (tree, rtx);
  static rtx expand_builtin_unop (enum machine_mode, tree, rtx, rtx, optab);
  static rtx expand_builtin_frame_address (tree, tree);
--- 124,133 ----
  static rtx expand_builtin_memset (tree, rtx, enum machine_mode);
  static rtx expand_builtin_bzero (tree);
  static rtx expand_builtin_strlen (tree, rtx, enum machine_mode);
! static rtx expand_builtin_strstr (tree, tree, rtx, enum machine_mode);
! static rtx expand_builtin_strpbrk (tree, tree, rtx, enum machine_mode);
! static rtx expand_builtin_strchr (tree, tree, rtx, enum machine_mode);
! static rtx expand_builtin_strrchr (tree, tree, rtx, enum machine_mode);
  static rtx expand_builtin_alloca (tree, rtx);
  static rtx expand_builtin_unop (enum machine_mode, tree, rtx, rtx, optab);
  static rtx expand_builtin_frame_address (tree, tree);
*************** static tree stabilize_va_list (tree, int
*** 144,149 ****
--- 139,145 ----
  static rtx expand_builtin_expect (tree, rtx);
  static tree fold_builtin_constant_p (tree);
  static tree fold_builtin_classify_type (tree);
+ static tree fold_builtin_strlen (tree);
  static tree fold_builtin_inf (tree, int);
  static tree fold_builtin_nan (tree, tree, int);
  static int validate_arglist (tree, ...);
*************** static bool integer_valued_real_p (tree)
*** 151,170 ****
  static tree fold_trunc_transparent_mathfn (tree);
  static bool readonly_data_expr (tree);
  static rtx expand_builtin_fabs (tree, rtx, rtx);
! static rtx expand_builtin_cabs (tree, rtx);
! static tree fold_builtin_cabs (tree, tree, tree);
  static tree fold_builtin_trunc (tree);
  static tree fold_builtin_floor (tree);
  static tree fold_builtin_ceil (tree);
  static tree fold_builtin_bitop (tree);
  static tree fold_builtin_memcpy (tree);
! static tree fold_builtin_mempcpy (tree);
! static tree fold_builtin_memmove (tree);
! static tree fold_builtin_strcpy (tree);
! static tree fold_builtin_strncpy (tree);
  static tree fold_builtin_memcmp (tree);
  static tree fold_builtin_strcmp (tree);
  static tree fold_builtin_strncmp (tree);
  
  /* Return the alignment in bits of EXP, a pointer valued expression.
     But don't return more than MAX_ALIGN no matter what.
--- 147,193 ----
  static tree fold_trunc_transparent_mathfn (tree);
  static bool readonly_data_expr (tree);
  static rtx expand_builtin_fabs (tree, rtx, rtx);
! static rtx expand_builtin_signbit (tree, rtx);
! static tree fold_builtin_cabs (tree, tree);
! static tree fold_builtin_sqrt (tree, tree);
! static tree fold_builtin_cbrt (tree, tree);
! static tree fold_builtin_pow (tree, tree, tree);
! static tree fold_builtin_powi (tree, tree, tree);
! static tree fold_builtin_sin (tree);
! static tree fold_builtin_cos (tree, tree, tree);
! static tree fold_builtin_tan (tree);
! static tree fold_builtin_atan (tree, tree);
  static tree fold_builtin_trunc (tree);
  static tree fold_builtin_floor (tree);
  static tree fold_builtin_ceil (tree);
+ static tree fold_builtin_round (tree);
  static tree fold_builtin_bitop (tree);
  static tree fold_builtin_memcpy (tree);
! static tree fold_builtin_mempcpy (tree, tree, int);
! static tree fold_builtin_memmove (tree, tree);
! static tree fold_builtin_strchr (tree, tree);
  static tree fold_builtin_memcmp (tree);
  static tree fold_builtin_strcmp (tree);
  static tree fold_builtin_strncmp (tree);
+ static tree fold_builtin_signbit (tree);
+ static tree fold_builtin_copysign (tree, tree, tree);
+ static tree fold_builtin_isascii (tree);
+ static tree fold_builtin_toascii (tree);
+ static tree fold_builtin_isdigit (tree);
+ static tree fold_builtin_fabs (tree, tree);
+ static tree fold_builtin_abs (tree, tree);
+ static tree fold_builtin_unordered_cmp (tree, enum tree_code, enum tree_code);
+ static tree fold_builtin_1 (tree, bool);
+ 
+ static tree fold_builtin_strpbrk (tree, tree);
+ static tree fold_builtin_strstr (tree, tree);
+ static tree fold_builtin_strrchr (tree, tree);
+ static tree fold_builtin_strcat (tree);
+ static tree fold_builtin_strncat (tree);
+ static tree fold_builtin_strspn (tree);
+ static tree fold_builtin_strcspn (tree);
+ static tree fold_builtin_sprintf (tree, int);
+ 
  
  /* Return the alignment in bits of EXP, a pointer valued expression.
     But don't return more than MAX_ALIGN no matter what.
*************** get_pointer_alignment (tree exp, unsigne
*** 179,185 ****
  {
    unsigned int align, inner;
  
!   if (TREE_CODE (TREE_TYPE (exp)) != POINTER_TYPE)
      return 0;
  
    align = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (exp)));
--- 202,208 ----
  {
    unsigned int align, inner;
  
!   if (! POINTER_TYPE_P (TREE_TYPE (exp)))
      return 0;
  
    align = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (exp)));
*************** get_pointer_alignment (tree exp, unsigne
*** 193,199 ****
  	case CONVERT_EXPR:
  	case NON_LVALUE_EXPR:
  	  exp = TREE_OPERAND (exp, 0);
! 	  if (TREE_CODE (TREE_TYPE (exp)) != POINTER_TYPE)
  	    return align;
  
  	  inner = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (exp)));
--- 216,222 ----
  	case CONVERT_EXPR:
  	case NON_LVALUE_EXPR:
  	  exp = TREE_OPERAND (exp, 0);
! 	  if (! POINTER_TYPE_P (TREE_TYPE (exp)))
  	    return align;
  
  	  inner = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (exp)));
*************** get_pointer_alignment (tree exp, unsigne
*** 223,229 ****
  	  else if (DECL_P (exp))
  	    align = DECL_ALIGN (exp);
  #ifdef CONSTANT_ALIGNMENT
! 	  else if (TREE_CODE_CLASS (TREE_CODE (exp)) == 'c')
  	    align = CONSTANT_ALIGNMENT (exp, align);
  #endif
  	  return MIN (align, max_align);
--- 246,252 ----
  	  else if (DECL_P (exp))
  	    align = DECL_ALIGN (exp);
  #ifdef CONSTANT_ALIGNMENT
! 	  else if (CONSTANT_CLASS_P (exp))
  	    align = CONSTANT_ALIGNMENT (exp, align);
  #endif
  	  return MIN (align, max_align);
*************** get_pointer_alignment (tree exp, unsigne
*** 250,256 ****
     Unfortunately, string_constant can't access the values of const char
     arrays with initializers, so neither can we do so here.  */
  
! static tree
  c_strlen (tree src, int only_value)
  {
    tree offset_node;
--- 273,279 ----
     Unfortunately, string_constant can't access the values of const char
     arrays with initializers, so neither can we do so here.  */
  
! tree
  c_strlen (tree src, int only_value)
  {
    tree offset_node;
*************** c_strlen (tree src, int only_value)
*** 266,272 ****
  
        len1 = c_strlen (TREE_OPERAND (src, 1), only_value);
        len2 = c_strlen (TREE_OPERAND (src, 2), only_value);
!       if (tree_int_cst_equal (len1, len2))      
  	return len1;
      }
  
--- 289,295 ----
  
        len1 = c_strlen (TREE_OPERAND (src, 1), only_value);
        len2 = c_strlen (TREE_OPERAND (src, 2), only_value);
!       if (tree_int_cst_equal (len1, len2))
  	return len1;
      }
  
*************** c_readstr (const char *str, enum machine
*** 359,366 ****
    HOST_WIDE_INT ch;
    unsigned int i, j;
  
!   if (GET_MODE_CLASS (mode) != MODE_INT)
!     abort ();
    c[0] = 0;
    c[1] = 0;
    ch = 1;
--- 382,389 ----
    HOST_WIDE_INT ch;
    unsigned int i, j;
  
!   gcc_assert (GET_MODE_CLASS (mode) == MODE_INT);
! 
    c[0] = 0;
    c[1] = 0;
    ch = 1;
*************** c_readstr (const char *str, enum machine
*** 373,380 ****
  	  && GET_MODE_SIZE (mode) > UNITS_PER_WORD)
  	j = j + UNITS_PER_WORD - 2 * (j % UNITS_PER_WORD) - 1;
        j *= BITS_PER_UNIT;
!       if (j > 2 * HOST_BITS_PER_WIDE_INT)
! 	abort ();
        if (ch)
  	ch = (unsigned char) str[i];
        c[j / HOST_BITS_PER_WIDE_INT] |= ch << (j % HOST_BITS_PER_WIDE_INT);
--- 396,403 ----
  	  && GET_MODE_SIZE (mode) > UNITS_PER_WORD)
  	j = j + UNITS_PER_WORD - 2 * (j % UNITS_PER_WORD) - 1;
        j *= BITS_PER_UNIT;
!       gcc_assert (j <= 2 * HOST_BITS_PER_WIDE_INT);
! 
        if (ch)
  	ch = (unsigned char) str[i];
        c[j / HOST_BITS_PER_WIDE_INT] |= ch << (j % HOST_BITS_PER_WIDE_INT);
*************** target_char_cast (tree cst, char *p)
*** 410,425 ****
    return 0;
  }
  
  /* Given TEM, a pointer to a stack frame, follow the dynamic chain COUNT
     times to get the address of either a higher stack frame, or a return
     address located within it (depending on FNDECL_CODE).  */
  
! rtx
! expand_builtin_return_addr (enum built_in_function fndecl_code, int count,
! 			    rtx tem)
  {
    int i;
  
    /* Some machines need special handling before we can access
       arbitrary frames.  For example, on the sparc, we must first flush
       all register windows to the stack.  */
--- 433,468 ----
    return 0;
  }
  
+ /* Similar to save_expr, but assumes that arbitrary code is not executed
+    in between the multiple evaluations.  In particular, we assume that a
+    non-addressable local variable will not be modified.  */
+ 
+ static tree
+ builtin_save_expr (tree exp)
+ {
+   if (TREE_ADDRESSABLE (exp) == 0
+       && (TREE_CODE (exp) == PARM_DECL
+ 	  || (TREE_CODE (exp) == VAR_DECL && !TREE_STATIC (exp))))
+     return exp;
+ 
+   return save_expr (exp);
+ }
+ 
  /* Given TEM, a pointer to a stack frame, follow the dynamic chain COUNT
     times to get the address of either a higher stack frame, or a return
     address located within it (depending on FNDECL_CODE).  */
  
! static rtx
! expand_builtin_return_addr (enum built_in_function fndecl_code, int count)
  {
    int i;
  
+ #ifdef INITIAL_FRAME_ADDRESS_RTX
+   rtx tem = INITIAL_FRAME_ADDRESS_RTX;
+ #else
+   rtx tem = hard_frame_pointer_rtx;
+ #endif
+ 
    /* Some machines need special handling before we can access
       arbitrary frames.  For example, on the sparc, we must first flush
       all register windows to the stack.  */
*************** expand_builtin_setjmp_setup (rtx buf_add
*** 489,507 ****
  
    buf_addr = force_reg (Pmode, force_operand (buf_addr, NULL_RTX));
  
-   emit_queue ();
- 
    /* We store the frame pointer and the address of receiver_label in
       the buffer and use the rest of it for the stack save area, which
       is machine-dependent.  */
  
- #ifndef BUILTIN_SETJMP_FRAME_VALUE
- #define BUILTIN_SETJMP_FRAME_VALUE virtual_stack_vars_rtx
- #endif
- 
    mem = gen_rtx_MEM (Pmode, buf_addr);
    set_mem_alias_set (mem, setjmp_alias_set);
!   emit_move_insn (mem, BUILTIN_SETJMP_FRAME_VALUE);
  
    mem = gen_rtx_MEM (Pmode, plus_constant (buf_addr, GET_MODE_SIZE (Pmode))),
    set_mem_alias_set (mem, setjmp_alias_set);
--- 532,544 ----
  
    buf_addr = force_reg (Pmode, force_operand (buf_addr, NULL_RTX));
  
    /* We store the frame pointer and the address of receiver_label in
       the buffer and use the rest of it for the stack save area, which
       is machine-dependent.  */
  
    mem = gen_rtx_MEM (Pmode, buf_addr);
    set_mem_alias_set (mem, setjmp_alias_set);
!   emit_move_insn (mem, targetm.builtin_setjmp_frame_value ());
  
    mem = gen_rtx_MEM (Pmode, plus_constant (buf_addr, GET_MODE_SIZE (Pmode))),
    set_mem_alias_set (mem, setjmp_alias_set);
*************** expand_builtin_setjmp_receiver (rtx rece
*** 545,552 ****
    emit_insn (gen_rtx_CLOBBER (VOIDmode, static_chain_rtx));
  
    /* Now put in the code to restore the frame pointer, and argument
!      pointer, if needed.  The code below is from expand_end_bindings
!      in stmt.c; see detailed documentation there.  */
  #ifdef HAVE_nonlocal_goto
    if (! HAVE_nonlocal_goto)
  #endif
--- 582,588 ----
    emit_insn (gen_rtx_CLOBBER (VOIDmode, static_chain_rtx));
  
    /* Now put in the code to restore the frame pointer, and argument
!      pointer, if needed.  */
  #ifdef HAVE_nonlocal_goto
    if (! HAVE_nonlocal_goto)
  #endif
*************** expand_builtin_setjmp (tree arglist, rtx
*** 613,619 ****
    if (!validate_arglist (arglist, POINTER_TYPE, VOID_TYPE))
      return NULL_RTX;
  
!   if (target == 0 || GET_CODE (target) != REG
        || REGNO (target) < FIRST_PSEUDO_REGISTER)
      target = gen_reg_rtx (TYPE_MODE (integer_type_node));
  
--- 649,655 ----
    if (!validate_arglist (arglist, POINTER_TYPE, VOID_TYPE))
      return NULL_RTX;
  
!   if (target == 0 || !REG_P (target)
        || REGNO (target) < FIRST_PSEUDO_REGISTER)
      target = gen_reg_rtx (TYPE_MODE (integer_type_node));
  
*************** expand_builtin_setjmp (tree arglist, rtx
*** 657,663 ****
     scheme in the compiler and will only work in the method used by
     them.  */
  
! void
  expand_builtin_longjmp (rtx buf_addr, rtx value)
  {
    rtx fp, lab, stack, insn, last;
--- 693,699 ----
     scheme in the compiler and will only work in the method used by
     them.  */
  
! static void
  expand_builtin_longjmp (rtx buf_addr, rtx value)
  {
    rtx fp, lab, stack, insn, last;
*************** expand_builtin_longjmp (rtx buf_addr, rt
*** 675,684 ****
       a second argument of 1, because that is what builtin_setjmp will
       return.  This also makes EH slightly more efficient, since we are no
       longer copying around a value that we don't care about.  */
!   if (value != const1_rtx)
!     abort ();
! 
!   current_function_calls_longjmp = 1;
  
    last = get_last_insn ();
  #ifdef HAVE_builtin_longjmp
--- 711,717 ----
       a second argument of 1, because that is what builtin_setjmp will
       return.  This also makes EH slightly more efficient, since we are no
       longer copying around a value that we don't care about.  */
!   gcc_assert (value == const1_rtx);
  
    last = get_last_insn ();
  #ifdef HAVE_builtin_longjmp
*************** expand_builtin_longjmp (rtx buf_addr, rt
*** 733,751 ****
       internal exception handling use only.  */
    for (insn = get_last_insn (); insn; insn = PREV_INSN (insn))
      {
!       if (insn == last)
! 	abort ();
!       if (GET_CODE (insn) == JUMP_INSN)
  	{
  	  REG_NOTES (insn) = alloc_EXPR_LIST (REG_NON_LOCAL_GOTO, const0_rtx,
  					      REG_NOTES (insn));
  	  break;
  	}
!       else if (GET_CODE (insn) == CALL_INSN)
  	break;
      }
  }
  
  /* Expand a call to __builtin_prefetch.  For a target that does not support
     data prefetch, evaluate the memory address argument in case it has side
     effects.  */
--- 766,893 ----
       internal exception handling use only.  */
    for (insn = get_last_insn (); insn; insn = PREV_INSN (insn))
      {
!       gcc_assert (insn != last);
! 
!       if (JUMP_P (insn))
  	{
  	  REG_NOTES (insn) = alloc_EXPR_LIST (REG_NON_LOCAL_GOTO, const0_rtx,
  					      REG_NOTES (insn));
  	  break;
  	}
!       else if (CALL_P (insn))
  	break;
      }
  }
  
+ /* Expand a call to __builtin_nonlocal_goto.  We're passed the target label
+    and the address of the save area.  */
+ 
+ static rtx
+ expand_builtin_nonlocal_goto (tree arglist)
+ {
+   tree t_label, t_save_area;
+   rtx r_label, r_save_area, r_fp, r_sp, insn;
+ 
+   if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
+     return NULL_RTX;
+ 
+   t_label = TREE_VALUE (arglist);
+   arglist = TREE_CHAIN (arglist);
+   t_save_area = TREE_VALUE (arglist);
+ 
+   r_label = expand_expr (t_label, NULL_RTX, VOIDmode, 0);
+   r_label = convert_memory_address (Pmode, r_label);
+   r_save_area = expand_expr (t_save_area, NULL_RTX, VOIDmode, 0);
+   r_save_area = convert_memory_address (Pmode, r_save_area);
+   r_fp = gen_rtx_MEM (Pmode, r_save_area);
+   r_sp = gen_rtx_MEM (STACK_SAVEAREA_MODE (SAVE_NONLOCAL),
+ 		      plus_constant (r_save_area, GET_MODE_SIZE (Pmode)));
+ 
+   current_function_has_nonlocal_goto = 1;
+ 
+ #if HAVE_nonlocal_goto
+   /* ??? We no longer need to pass the static chain value, afaik.  */
+   if (HAVE_nonlocal_goto)
+     emit_insn (gen_nonlocal_goto (const0_rtx, r_label, r_sp, r_fp));
+   else
+ #endif
+     {
+       r_label = copy_to_reg (r_label);
+ 
+       emit_insn (gen_rtx_CLOBBER (VOIDmode,
+ 				  gen_rtx_MEM (BLKmode,
+ 					       gen_rtx_SCRATCH (VOIDmode))));
+ 
+       emit_insn (gen_rtx_CLOBBER (VOIDmode,
+ 				  gen_rtx_MEM (BLKmode,
+ 					       hard_frame_pointer_rtx)));
+ 
+       /* Restore frame pointer for containing function.
+ 	 This sets the actual hard register used for the frame pointer
+ 	 to the location of the function's incoming static chain info.
+ 	 The non-local goto handler will then adjust it to contain the
+ 	 proper value and reload the argument pointer, if needed.  */
+       emit_move_insn (hard_frame_pointer_rtx, r_fp);
+       emit_stack_restore (SAVE_NONLOCAL, r_sp, NULL_RTX);
+ 
+       /* USE of hard_frame_pointer_rtx added for consistency;
+ 	 not clear if really needed.  */
+       emit_insn (gen_rtx_USE (VOIDmode, hard_frame_pointer_rtx));
+       emit_insn (gen_rtx_USE (VOIDmode, stack_pointer_rtx));
+       emit_indirect_jump (r_label);
+     }
+ 
+   /* Search backwards to the jump insn and mark it as a
+      non-local goto.  */
+   for (insn = get_last_insn (); insn; insn = PREV_INSN (insn))
+     {
+       if (JUMP_P (insn))
+ 	{
+ 	  REG_NOTES (insn) = alloc_EXPR_LIST (REG_NON_LOCAL_GOTO,
+ 					      const0_rtx, REG_NOTES (insn));
+ 	  break;
+ 	}
+       else if (CALL_P (insn))
+ 	break;
+     }
+ 
+   return const0_rtx;
+ }
+ 
+ /* __builtin_update_setjmp_buf is passed a pointer to an array of five words
+    (not all will be used on all machines) that was passed to __builtin_setjmp.
+    It updates the stack pointer in that block to correspond to the current
+    stack pointer.  */
+ 
+ static void
+ expand_builtin_update_setjmp_buf (rtx buf_addr)
+ {
+   enum machine_mode sa_mode = Pmode;
+   rtx stack_save;
+ 
+ 
+ #ifdef HAVE_save_stack_nonlocal
+   if (HAVE_save_stack_nonlocal)
+     sa_mode = insn_data[(int) CODE_FOR_save_stack_nonlocal].operand[0].mode;
+ #endif
+ #ifdef STACK_SAVEAREA_MODE
+   sa_mode = STACK_SAVEAREA_MODE (SAVE_NONLOCAL);
+ #endif
+ 
+   stack_save
+     = gen_rtx_MEM (sa_mode,
+ 		   memory_address
+ 		   (sa_mode,
+ 		    plus_constant (buf_addr, 2 * GET_MODE_SIZE (Pmode))));
+ 
+ #ifdef HAVE_setjmp
+   if (HAVE_setjmp)
+     emit_insn (gen_setjmp ());
+ #endif
+ 
+   emit_stack_save (SAVE_NONLOCAL, &stack_save, NULL_RTX);
+ }
+ 
  /* Expand a call to __builtin_prefetch.  For a target that does not support
     data prefetch, evaluate the memory address argument in case it has side
     effects.  */
*************** expand_builtin_prefetch (tree arglist)
*** 769,780 ****
        if (TREE_CHAIN (TREE_CHAIN (arglist)))
  	arg2 = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist)));
        else
! 	arg2 = build_int_2 (3, 0);
      }
    else
      {
        arg1 = integer_zero_node;
!       arg2 = build_int_2 (3, 0);
      }
  
    /* Argument 0 is an address.  */
--- 911,922 ----
        if (TREE_CHAIN (TREE_CHAIN (arglist)))
  	arg2 = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist)));
        else
! 	arg2 = build_int_cst (NULL_TREE, 3);
      }
    else
      {
        arg1 = integer_zero_node;
!       arg2 = build_int_cst (NULL_TREE, 3);
      }
  
    /* Argument 0 is an address.  */
*************** expand_builtin_prefetch (tree arglist)
*** 783,810 ****
    /* Argument 1 (read/write flag) must be a compile-time constant int.  */
    if (TREE_CODE (arg1) != INTEGER_CST)
      {
!       error ("second arg to `__builtin_prefetch' must be a constant");
        arg1 = integer_zero_node;
      }
    op1 = expand_expr (arg1, NULL_RTX, VOIDmode, 0);
    /* Argument 1 must be either zero or one.  */
    if (INTVAL (op1) != 0 && INTVAL (op1) != 1)
      {
!       warning ("invalid second arg to __builtin_prefetch; using zero");
        op1 = const0_rtx;
      }
  
    /* Argument 2 (locality) must be a compile-time constant int.  */
    if (TREE_CODE (arg2) != INTEGER_CST)
      {
!       error ("third arg to `__builtin_prefetch' must be a constant");
        arg2 = integer_zero_node;
      }
    op2 = expand_expr (arg2, NULL_RTX, VOIDmode, 0);
    /* Argument 2 must be 0, 1, 2, or 3.  */
    if (INTVAL (op2) < 0 || INTVAL (op2) > 3)
      {
!       warning ("invalid third arg to __builtin_prefetch; using zero");
        op2 = const0_rtx;
      }
  
--- 925,953 ----
    /* Argument 1 (read/write flag) must be a compile-time constant int.  */
    if (TREE_CODE (arg1) != INTEGER_CST)
      {
!       error ("second argument to %<__builtin_prefetch%> must be a constant");
        arg1 = integer_zero_node;
      }
    op1 = expand_expr (arg1, NULL_RTX, VOIDmode, 0);
    /* Argument 1 must be either zero or one.  */
    if (INTVAL (op1) != 0 && INTVAL (op1) != 1)
      {
!       warning ("invalid second argument to %<__builtin_prefetch%>;"
! 	       " using zero");
        op1 = const0_rtx;
      }
  
    /* Argument 2 (locality) must be a compile-time constant int.  */
    if (TREE_CODE (arg2) != INTEGER_CST)
      {
!       error ("third argument to %<__builtin_prefetch%> must be a constant");
        arg2 = integer_zero_node;
      }
    op2 = expand_expr (arg2, NULL_RTX, VOIDmode, 0);
    /* Argument 2 must be 0, 1, 2, or 3.  */
    if (INTVAL (op2) < 0 || INTVAL (op2) > 3)
      {
!       warning ("invalid third argument to %<__builtin_prefetch%>; using zero");
        op2 = const0_rtx;
      }
  
*************** expand_builtin_prefetch (tree arglist)
*** 821,847 ****
  	}
        emit_insn (gen_prefetch (op0, op1, op2));
      }
-   else
  #endif
!     op0 = protect_from_queue (op0, 0);
    /* Don't do anything with direct references to volatile memory, but
       generate code to handle other side effects.  */
!   if (GET_CODE (op0) != MEM && side_effects_p (op0))
      emit_insn (op0);
  }
  
  /* Get a MEM rtx for expression EXP which is the address of an operand
!    to be used to be used in a string instruction (cmpstrsi, movstrsi, ..).  */
  
  static rtx
  get_memory_rtx (tree exp)
  {
!   rtx addr = expand_expr (exp, NULL_RTX, ptr_mode, EXPAND_SUM);
!   rtx mem;
! 
!   addr = convert_memory_address (Pmode, addr);
! 
!   mem = gen_rtx_MEM (BLKmode, memory_address (BLKmode, addr));
  
    /* Get an expression we can use to find the attributes to assign to MEM.
       If it is an ADDR_EXPR, use the operand.  Otherwise, dereference it if
--- 964,985 ----
  	}
        emit_insn (gen_prefetch (op0, op1, op2));
      }
  #endif
! 
    /* Don't do anything with direct references to volatile memory, but
       generate code to handle other side effects.  */
!   if (!MEM_P (op0) && side_effects_p (op0))
      emit_insn (op0);
  }
  
  /* Get a MEM rtx for expression EXP which is the address of an operand
!    to be used to be used in a string instruction (cmpstrsi, movmemsi, ..).  */
  
  static rtx
  get_memory_rtx (tree exp)
  {
!   rtx addr = expand_expr (exp, NULL_RTX, ptr_mode, EXPAND_NORMAL);
!   rtx mem = gen_rtx_MEM (BLKmode, memory_address (BLKmode, addr));
  
    /* Get an expression we can use to find the attributes to assign to MEM.
       If it is an ADDR_EXPR, use the operand.  Otherwise, dereference it if
*************** get_memory_rtx (tree exp)
*** 852,866 ****
      exp = TREE_OPERAND (exp, 0);
  
    if (TREE_CODE (exp) == ADDR_EXPR)
!     {
!       exp = TREE_OPERAND (exp, 0);
!       set_mem_attributes (mem, exp, 0);
!     }
    else if (POINTER_TYPE_P (TREE_TYPE (exp)))
      {
!       exp = build1 (INDIRECT_REF, TREE_TYPE (TREE_TYPE (exp)), exp);
!       /* memcpy, memset and other builtin stringops can alias with anything.  */
        set_mem_alias_set (mem, 0);
      }
  
    return mem;
--- 990,1009 ----
      exp = TREE_OPERAND (exp, 0);
  
    if (TREE_CODE (exp) == ADDR_EXPR)
!     exp = TREE_OPERAND (exp, 0);
    else if (POINTER_TYPE_P (TREE_TYPE (exp)))
+     exp = build1 (INDIRECT_REF, TREE_TYPE (TREE_TYPE (exp)), exp);
+   else
+     exp = NULL;
+ 
+   /* Honor attributes derived from exp, except for the alias set
+      (as builtin stringops may alias with anything) and the size
+      (as stringops may access multiple array elements).  */
+   if (exp)
      {
!       set_mem_attributes (mem, exp, 0);
        set_mem_alias_set (mem, 0);
+       set_mem_size (mem, NULL_RTX);
      }
  
    return mem;
*************** static enum machine_mode apply_result_mo
*** 888,910 ****
     used for calling a function.  */
  static int apply_args_reg_offset[FIRST_PSEUDO_REGISTER];
  
- /* Return the offset of register REGNO into the block returned by
-    __builtin_apply_args.  This is not declared static, since it is
-    needed in objc-act.c.  */
- 
- int
- apply_args_register_offset (int regno)
- {
-   apply_args_size ();
- 
-   /* Arguments are always put in outgoing registers (in the argument
-      block) if such make sense.  */
- #ifdef OUTGOING_REGNO
-   regno = OUTGOING_REGNO (regno);
- #endif
-   return apply_args_reg_offset[regno];
- }
- 
  /* Return the size required for the block returned by __builtin_apply_args,
     and initialize apply_args_mode.  */
  
--- 1031,1036 ----
*************** apply_args_size (void)
*** 930,973 ****
        for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
  	if (FUNCTION_ARG_REGNO_P (regno))
  	  {
! 	    /* Search for the proper mode for copying this register's
! 	       value.  I'm not sure this is right, but it works so far.  */
! 	    enum machine_mode best_mode = VOIDmode;
! 
! 	    for (mode = GET_CLASS_NARROWEST_MODE (MODE_INT);
! 		 mode != VOIDmode;
! 		 mode = GET_MODE_WIDER_MODE (mode))
! 	      if (HARD_REGNO_MODE_OK (regno, mode)
! 		  && HARD_REGNO_NREGS (regno, mode) == 1)
! 		best_mode = mode;
! 
! 	    if (best_mode == VOIDmode)
! 	      for (mode = GET_CLASS_NARROWEST_MODE (MODE_FLOAT);
! 		   mode != VOIDmode;
! 		   mode = GET_MODE_WIDER_MODE (mode))
! 		if (HARD_REGNO_MODE_OK (regno, mode)
! 		    && have_insn_for (SET, mode))
! 		  best_mode = mode;
! 
! 	    if (best_mode == VOIDmode)
! 	      for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_FLOAT);
! 		   mode != VOIDmode;
! 		   mode = GET_MODE_WIDER_MODE (mode))
! 		if (HARD_REGNO_MODE_OK (regno, mode)
! 		    && have_insn_for (SET, mode))
! 		  best_mode = mode;
! 
! 	    if (best_mode == VOIDmode)
! 	      for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_INT);
! 		   mode != VOIDmode;
! 		   mode = GET_MODE_WIDER_MODE (mode))
! 		if (HARD_REGNO_MODE_OK (regno, mode)
! 		    && have_insn_for (SET, mode))
! 		  best_mode = mode;
  
! 	    mode = best_mode;
! 	    if (mode == VOIDmode)
! 	      abort ();
  
  	    align = GET_MODE_ALIGNMENT (mode) / BITS_PER_UNIT;
  	    if (size % align != 0)
--- 1056,1064 ----
        for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
  	if (FUNCTION_ARG_REGNO_P (regno))
  	  {
! 	    mode = reg_raw_mode[regno];
  
! 	    gcc_assert (mode != VOIDmode);
  
  	    align = GET_MODE_ALIGNMENT (mode) / BITS_PER_UNIT;
  	    if (size % align != 0)
*************** apply_result_size (void)
*** 1003,1045 ****
        for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
  	if (FUNCTION_VALUE_REGNO_P (regno))
  	  {
! 	    /* Search for the proper mode for copying this register's
! 	       value.  I'm not sure this is right, but it works so far.  */
! 	    enum machine_mode best_mode = VOIDmode;
! 
! 	    for (mode = GET_CLASS_NARROWEST_MODE (MODE_INT);
! 		 mode != TImode;
! 		 mode = GET_MODE_WIDER_MODE (mode))
! 	      if (HARD_REGNO_MODE_OK (regno, mode))
! 		best_mode = mode;
! 
! 	    if (best_mode == VOIDmode)
! 	      for (mode = GET_CLASS_NARROWEST_MODE (MODE_FLOAT);
! 		   mode != VOIDmode;
! 		   mode = GET_MODE_WIDER_MODE (mode))
! 		if (HARD_REGNO_MODE_OK (regno, mode)
! 		    && have_insn_for (SET, mode))
! 		  best_mode = mode;
! 
! 	    if (best_mode == VOIDmode)
! 	      for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_FLOAT);
! 		   mode != VOIDmode;
! 		   mode = GET_MODE_WIDER_MODE (mode))
! 		if (HARD_REGNO_MODE_OK (regno, mode)
! 		    && have_insn_for (SET, mode))
! 		  best_mode = mode;
! 
! 	    if (best_mode == VOIDmode)
! 	      for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_INT);
! 		   mode != VOIDmode;
! 		   mode = GET_MODE_WIDER_MODE (mode))
! 		if (HARD_REGNO_MODE_OK (regno, mode)
! 		    && have_insn_for (SET, mode))
! 		  best_mode = mode;
  
! 	    mode = best_mode;
! 	    if (mode == VOIDmode)
! 	      abort ();
  
  	    align = GET_MODE_ALIGNMENT (mode) / BITS_PER_UNIT;
  	    if (size % align != 0)
--- 1094,1102 ----
        for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
  	if (FUNCTION_VALUE_REGNO_P (regno))
  	  {
! 	    mode = reg_raw_mode[regno];
  
! 	    gcc_assert (mode != VOIDmode);
  
  	    align = GET_MODE_ALIGNMENT (mode) / BITS_PER_UNIT;
  	    if (size % align != 0)
*************** expand_builtin_apply_args_1 (void)
*** 1135,1141 ****
  		     NULL_RTX);
  #endif
    emit_move_insn (adjust_address (registers, Pmode, 0), tem);
!   
    size = GET_MODE_SIZE (Pmode);
  
    /* Save the structure value address unless this is passed as an
--- 1192,1198 ----
  		     NULL_RTX);
  #endif
    emit_move_insn (adjust_address (registers, Pmode, 0), tem);
! 
    size = GET_MODE_SIZE (Pmode);
  
    /* Save the structure value address unless this is passed as an
*************** expand_builtin_apply_args (void)
*** 1184,1190 ****
         chain current, so the code is placed at the start of the
         function.  */
      push_topmost_sequence ();
!     emit_insn_before (seq, NEXT_INSN (get_insns ()));
      pop_topmost_sequence ();
      return temp;
    }
--- 1241,1247 ----
         chain current, so the code is placed at the start of the
         function.  */
      push_topmost_sequence ();
!     emit_insn_before (seq, NEXT_INSN (entry_of_function ()));
      pop_topmost_sequence ();
      return temp;
    }
*************** expand_builtin_apply (rtx function, rtx 
*** 1216,1224 ****
  				       incoming_args, 0, OPTAB_LIB_WIDEN);
  #endif
  
-   /* Perform postincrements before actually calling the function.  */
-   emit_queue ();
- 
    /* Push a new argument block and copy the arguments.  Do not allow
       the (potential) memcpy call below to interfere with our stack
       manipulations.  */
--- 1273,1278 ----
*************** expand_builtin_apply (rtx function, rtx 
*** 1281,1293 ****
        rtx value = gen_reg_rtx (Pmode);
        emit_move_insn (value, adjust_address (arguments, Pmode, size));
        emit_move_insn (struct_value, value);
!       if (GET_CODE (struct_value) == REG)
  	use_reg (&call_fusage, struct_value);
        size += GET_MODE_SIZE (Pmode);
      }
  
    /* All arguments and registers used for the call are set up by now!  */
!   function = prepare_call_address (function, NULL_TREE, &call_fusage, 0, 0);
  
    /* Ensure address is valid.  SYMBOL_REF is already valid, so no need,
       and we don't want to load it into a register as an optimization,
--- 1335,1347 ----
        rtx value = gen_reg_rtx (Pmode);
        emit_move_insn (value, adjust_address (arguments, Pmode, size));
        emit_move_insn (struct_value, value);
!       if (REG_P (struct_value))
  	use_reg (&call_fusage, struct_value);
        size += GET_MODE_SIZE (Pmode);
      }
  
    /* All arguments and registers used for the call are set up by now!  */
!   function = prepare_call_address (function, NULL, &call_fusage, 0, 0);
  
    /* Ensure address is valid.  SYMBOL_REF is already valid, so no need,
       and we don't want to load it into a register as an optimization,
*************** expand_builtin_apply (rtx function, rtx 
*** 1314,1321 ****
        for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
  	if ((mode = apply_result_mode[regno]) != VOIDmode)
  	  {
! 	    if (valreg)
! 	      abort (); /* HAVE_untyped_call required.  */
  	    valreg = gen_rtx_REG (mode, regno);
  	  }
  
--- 1368,1375 ----
        for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
  	if ((mode = apply_result_mode[regno]) != VOIDmode)
  	  {
! 	    gcc_assert (!valreg); /* HAVE_untyped_call required.  */
! 
  	    valreg = gen_rtx_REG (mode, regno);
  	  }
  
*************** expand_builtin_apply (rtx function, rtx 
*** 1327,1333 ****
      }
    else
  #endif
!     abort ();
  
    /* Find the CALL insn we just emitted, and attach the register usage
       information.  */
--- 1381,1387 ----
      }
    else
  #endif
!     gcc_unreachable ();
  
    /* Find the CALL insn we just emitted, and attach the register usage
       information.  */
*************** type_to_class (tree type)
*** 1423,1429 ****
      case QUAL_UNION_TYPE:  return union_type_class;
      case ARRAY_TYPE:	   return (TYPE_STRING_FLAG (type)
  				   ? string_type_class : array_type_class);
-     case SET_TYPE:	   return set_type_class;
      case FILE_TYPE:	   return file_type_class;
      case LANG_TYPE:	   return lang_type_class;
      default:		   return no_type_class;
--- 1477,1482 ----
*************** expand_builtin_classify_type (tree argli
*** 1441,1472 ****
    return GEN_INT (no_type_class);
  }
  
- /* Expand expression EXP, which is a call to __builtin_constant_p.  */
- 
- static rtx
- expand_builtin_constant_p (tree arglist, enum machine_mode target_mode)
- {
-   rtx tmp;
- 
-   if (arglist == 0)
-     return const0_rtx;
-   arglist = TREE_VALUE (arglist);
- 
-   /* We have taken care of the easy cases during constant folding.  This
-      case is not obvious, so emit (constant_p_rtx (ARGLIST)) and let CSE
-      get a chance to see if it can deduce whether ARGLIST is constant.
-      If CSE isn't going to run, of course, don't bother waiting.  */
- 
-   if (cse_not_expected)
-     return const0_rtx;
- 
-   current_function_calls_constant_p = 1;
- 
-   tmp = expand_expr (arglist, NULL_RTX, VOIDmode, 0);
-   tmp = gen_rtx_CONSTANT_P_RTX (target_mode, tmp);
-   return tmp;
- }
- 
  /* This helper macro, meant to be used in mathfn_built_in below,
     determines which among a set of three builtin math functions is
     appropriate for a given type mode.  The `F' and `L' cases are
--- 1494,1499 ----
*************** expand_builtin_constant_p (tree arglist,
*** 1481,1487 ****
  tree
  mathfn_built_in (tree type, enum built_in_function fn)
  {
-   const enum machine_mode type_mode = TYPE_MODE (type);
    enum built_in_function fcode, fcodef, fcodel;
  
    switch (fn)
--- 1508,1513 ----
*************** mathfn_built_in (tree type, enum built_i
*** 1539,1544 ****
--- 1565,1571 ----
        CASE_MATHFN (BUILT_IN_NEXTAFTER)
        CASE_MATHFN (BUILT_IN_NEXTTOWARD)
        CASE_MATHFN (BUILT_IN_POW)
+       CASE_MATHFN (BUILT_IN_POWI)
        CASE_MATHFN (BUILT_IN_POW10)
        CASE_MATHFN (BUILT_IN_REMAINDER)
        CASE_MATHFN (BUILT_IN_REMQUO)
*************** mathfn_built_in (tree type, enum built_i
*** 1564,1574 ****
  	return 0;
        }
  
!   if (type_mode == TYPE_MODE (double_type_node))
      return implicit_built_in_decls[fcode];
!   else if (type_mode == TYPE_MODE (float_type_node))
      return implicit_built_in_decls[fcodef];
!   else if (type_mode == TYPE_MODE (long_double_type_node))
      return implicit_built_in_decls[fcodel];
    else
      return 0;
--- 1591,1601 ----
  	return 0;
        }
  
!   if (TYPE_MAIN_VARIANT (type) == double_type_node)
      return implicit_built_in_decls[fcode];
!   else if (TYPE_MAIN_VARIANT (type) == float_type_node)
      return implicit_built_in_decls[fcodef];
!   else if (TYPE_MAIN_VARIANT (type) == long_double_type_node)
      return implicit_built_in_decls[fcodel];
    else
      return 0;
*************** expand_errno_check (tree exp, rtx target
*** 1613,1619 ****
  }
  
  
! /* Expand a call to one of the builtin math functions (sin, cos, or sqrt).
     Return 0 if a normal call should be emitted rather than expanding the
     function in-line.  EXP is the expression that is a call to the builtin
     function; if convenient, the result should be placed in TARGET.
--- 1640,1646 ----
  }
  
  
! /* Expand a call to one of the builtin math functions (sqrt, exp, or log).
     Return 0 if a normal call should be emitted rather than expanding the
     function in-line.  EXP is the expression that is a call to the builtin
     function; if convenient, the result should be placed in TARGET.
*************** expand_builtin_mathfn (tree exp, rtx tar
*** 1637,1650 ****
  
    switch (DECL_FUNCTION_CODE (fndecl))
      {
-     case BUILT_IN_SIN:
-     case BUILT_IN_SINF:
-     case BUILT_IN_SINL:
-       builtin_optab = sin_optab; break;
-     case BUILT_IN_COS:
-     case BUILT_IN_COSF:
-     case BUILT_IN_COSL:
-       builtin_optab = cos_optab; break;
      case BUILT_IN_SQRT:
      case BUILT_IN_SQRTF:
      case BUILT_IN_SQRTL:
--- 1664,1669 ----
*************** expand_builtin_mathfn (tree exp, rtx tar
*** 1655,1664 ****
--- 1674,1726 ----
      case BUILT_IN_EXPF:
      case BUILT_IN_EXPL:
        errno_set = true; builtin_optab = exp_optab; break;
+     case BUILT_IN_EXP10:
+     case BUILT_IN_EXP10F:
+     case BUILT_IN_EXP10L:
+     case BUILT_IN_POW10:
+     case BUILT_IN_POW10F:
+     case BUILT_IN_POW10L:
+       errno_set = true; builtin_optab = exp10_optab; break;
+     case BUILT_IN_EXP2:
+     case BUILT_IN_EXP2F:
+     case BUILT_IN_EXP2L:
+       errno_set = true; builtin_optab = exp2_optab; break;
+     case BUILT_IN_EXPM1:
+     case BUILT_IN_EXPM1F:
+     case BUILT_IN_EXPM1L:
+       errno_set = true; builtin_optab = expm1_optab; break;
+     case BUILT_IN_LOGB:
+     case BUILT_IN_LOGBF:
+     case BUILT_IN_LOGBL:
+       errno_set = true; builtin_optab = logb_optab; break;
+     case BUILT_IN_ILOGB:
+     case BUILT_IN_ILOGBF:
+     case BUILT_IN_ILOGBL:
+       errno_set = true; builtin_optab = ilogb_optab; break;
      case BUILT_IN_LOG:
      case BUILT_IN_LOGF:
      case BUILT_IN_LOGL:
        errno_set = true; builtin_optab = log_optab; break;
+     case BUILT_IN_LOG10:
+     case BUILT_IN_LOG10F:
+     case BUILT_IN_LOG10L:
+       errno_set = true; builtin_optab = log10_optab; break;
+     case BUILT_IN_LOG2:
+     case BUILT_IN_LOG2F:
+     case BUILT_IN_LOG2L:
+       errno_set = true; builtin_optab = log2_optab; break;
+     case BUILT_IN_LOG1P:
+     case BUILT_IN_LOG1PF:
+     case BUILT_IN_LOG1PL:
+       errno_set = true; builtin_optab = log1p_optab; break;
+     case BUILT_IN_ASIN:
+     case BUILT_IN_ASINF:
+     case BUILT_IN_ASINL:
+       builtin_optab = asin_optab; break;
+     case BUILT_IN_ACOS:
+     case BUILT_IN_ACOSF:
+     case BUILT_IN_ACOSL:
+       builtin_optab = acos_optab; break;
      case BUILT_IN_TAN:
      case BUILT_IN_TANF:
      case BUILT_IN_TANL:
*************** expand_builtin_mathfn (tree exp, rtx tar
*** 1687,1694 ****
      case BUILT_IN_NEARBYINTF:
      case BUILT_IN_NEARBYINTL:
        builtin_optab = nearbyint_optab; break;
      default:
!       abort ();
      }
  
    /* Make a suitable register to place result in.  */
--- 1749,1760 ----
      case BUILT_IN_NEARBYINTF:
      case BUILT_IN_NEARBYINTL:
        builtin_optab = nearbyint_optab; break;
+     case BUILT_IN_RINT:
+     case BUILT_IN_RINTF:
+     case BUILT_IN_RINTL:
+       builtin_optab = rint_optab; break;
      default:
!       gcc_unreachable ();
      }
  
    /* Make a suitable register to place result in.  */
*************** expand_builtin_mathfn (tree exp, rtx tar
*** 1705,1720 ****
        /* Wrap the computation of the argument in a SAVE_EXPR, as we may
  	 need to expand the argument again.  This way, we will not perform
  	 side-effects more the once.  */
!       narg = save_expr (arg);
        if (narg != arg)
  	{
  	  arglist = build_tree_list (NULL_TREE, arg);
  	  exp = build_function_call_expr (fndecl, arglist);
  	}
  
        op0 = expand_expr (arg, subtarget, VOIDmode, 0);
  
-       emit_queue ();
        start_sequence ();
  
        /* Compute into TARGET.
--- 1771,1786 ----
        /* Wrap the computation of the argument in a SAVE_EXPR, as we may
  	 need to expand the argument again.  This way, we will not perform
  	 side-effects more the once.  */
!       narg = builtin_save_expr (arg);
        if (narg != arg)
  	{
+ 	  arg = narg;
  	  arglist = build_tree_list (NULL_TREE, arg);
  	  exp = build_function_call_expr (fndecl, arglist);
  	}
  
        op0 = expand_expr (arg, subtarget, VOIDmode, 0);
  
        start_sequence ();
  
        /* Compute into TARGET.
*************** expand_builtin_mathfn (tree exp, rtx tar
*** 1768,1774 ****
  		  rtx operand = XEXP (XEXP (XEXP (note, 0), 1), 0);
  		  /* Check operand is a register with expected mode.  */
  		  if (operand
! 		      && GET_CODE (operand) == REG
  		      && GET_MODE (operand) == mode)
  		    {
  		      /* Replace the REG_EQUAL note with a SQRT rtx.  */
--- 1834,1840 ----
  		  rtx operand = XEXP (XEXP (XEXP (note, 0), 1), 0);
  		  /* Check operand is a register with expected mode.  */
  		  if (operand
! 		      && REG_P (operand)
  		      && GET_MODE (operand) == mode)
  		    {
  		      /* Replace the REG_EQUAL note with a SQRT rtx.  */
*************** expand_builtin_mathfn_2 (tree exp, rtx t
*** 1797,1802 ****
--- 1863,1869 ----
  {
    optab builtin_optab;
    rtx op0, op1, insns;
+   int op1_type = REAL_TYPE;
    tree fndecl = get_callee_fndecl (exp);
    tree arglist = TREE_OPERAND (exp, 1);
    tree arg0, arg1, temp, narg;
*************** expand_builtin_mathfn_2 (tree exp, rtx t
*** 1804,1810 ****
    bool errno_set = true;
    bool stable = true;
  
!   if (!validate_arglist (arglist, REAL_TYPE, REAL_TYPE, VOID_TYPE))
      return 0;
  
    arg0 = TREE_VALUE (arglist);
--- 1871,1882 ----
    bool errno_set = true;
    bool stable = true;
  
!   if ((DECL_FUNCTION_CODE (fndecl) == BUILT_IN_LDEXP)
!       || (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_LDEXPF)
!       || (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_LDEXPL))
!     op1_type = INTEGER_TYPE;
! 
!   if (!validate_arglist (arglist, REAL_TYPE, op1_type, VOID_TYPE))
      return 0;
  
    arg0 = TREE_VALUE (arglist);
*************** expand_builtin_mathfn_2 (tree exp, rtx t
*** 1820,1827 ****
      case BUILT_IN_ATAN2F:
      case BUILT_IN_ATAN2L:
        builtin_optab = atan2_optab; break;
      default:
!       abort ();
      }
  
    /* Make a suitable register to place result in.  */
--- 1892,1911 ----
      case BUILT_IN_ATAN2F:
      case BUILT_IN_ATAN2L:
        builtin_optab = atan2_optab; break;
+     case BUILT_IN_LDEXP:
+     case BUILT_IN_LDEXPF:
+     case BUILT_IN_LDEXPL:
+       builtin_optab = ldexp_optab; break;
+     case BUILT_IN_FMOD:
+     case BUILT_IN_FMODF:
+     case BUILT_IN_FMODL:
+       builtin_optab = fmod_optab; break;
+     case BUILT_IN_DREM:
+     case BUILT_IN_DREMF:
+     case BUILT_IN_DREML:
+       builtin_optab = drem_optab; break;
      default:
!       gcc_unreachable ();
      }
  
    /* Make a suitable register to place result in.  */
*************** expand_builtin_mathfn_2 (tree exp, rtx t
*** 1836,1854 ****
    if (! flag_errno_math || ! HONOR_NANS (mode))
      errno_set = false;
  
!   /* Alway stabilize the argument list.  */
!   narg = save_expr (arg1);
    if (narg != arg1)
      {
        temp = build_tree_list (NULL_TREE, narg);
        stable = false;
      }
    else
      temp = TREE_CHAIN (arglist);
  
!   narg = save_expr (arg0);
    if (narg != arg0)
      {
        arglist = tree_cons (NULL_TREE, narg, temp);
        stable = false;
      }
--- 1920,1940 ----
    if (! flag_errno_math || ! HONOR_NANS (mode))
      errno_set = false;
  
!   /* Always stabilize the argument list.  */
!   narg = builtin_save_expr (arg1);
    if (narg != arg1)
      {
+       arg1 = narg;
        temp = build_tree_list (NULL_TREE, narg);
        stable = false;
      }
    else
      temp = TREE_CHAIN (arglist);
  
!   narg = builtin_save_expr (arg0);
    if (narg != arg0)
      {
+       arg0 = narg;
        arglist = tree_cons (NULL_TREE, narg, temp);
        stable = false;
      }
*************** expand_builtin_mathfn_2 (tree exp, rtx t
*** 1861,1867 ****
    op0 = expand_expr (arg0, subtarget, VOIDmode, 0);
    op1 = expand_expr (arg1, 0, VOIDmode, 0);
  
-   emit_queue ();
    start_sequence ();
  
    /* Compute into TARGET.
--- 1947,1952 ----
*************** expand_builtin_mathfn_2 (tree exp, rtx t
*** 1889,1894 ****
--- 1974,2112 ----
    return target;
  }
  
+ /* Expand a call to the builtin sin and cos math functions.
+    Return 0 if a normal call should be emitted rather than expanding the
+    function in-line.  EXP is the expression that is a call to the builtin
+    function; if convenient, the result should be placed in TARGET.
+    SUBTARGET may be used as the target for computing one of EXP's
+    operands.  */
+ 
+ static rtx
+ expand_builtin_mathfn_3 (tree exp, rtx target, rtx subtarget)
+ {
+   optab builtin_optab;
+   rtx op0, insns, before_call;
+   tree fndecl = get_callee_fndecl (exp);
+   tree arglist = TREE_OPERAND (exp, 1);
+   enum machine_mode mode;
+   bool errno_set = false;
+   tree arg, narg;
+ 
+   if (!validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
+     return 0;
+ 
+   arg = TREE_VALUE (arglist);
+ 
+   switch (DECL_FUNCTION_CODE (fndecl))
+     {
+     case BUILT_IN_SIN:
+     case BUILT_IN_SINF:
+     case BUILT_IN_SINL:
+     case BUILT_IN_COS:
+     case BUILT_IN_COSF:
+     case BUILT_IN_COSL:
+       builtin_optab = sincos_optab; break;
+     default:
+       gcc_unreachable ();
+     }
+ 
+   /* Make a suitable register to place result in.  */
+   mode = TYPE_MODE (TREE_TYPE (exp));
+ 
+   if (! flag_errno_math || ! HONOR_NANS (mode))
+     errno_set = false;
+ 
+   /* Check if sincos insn is available, otherwise fallback
+      to sin or cos insn.  */
+   if (builtin_optab->handlers[(int) mode].insn_code == CODE_FOR_nothing) {
+     switch (DECL_FUNCTION_CODE (fndecl))
+       {
+       case BUILT_IN_SIN:
+       case BUILT_IN_SINF:
+       case BUILT_IN_SINL:
+ 	builtin_optab = sin_optab; break;
+       case BUILT_IN_COS:
+       case BUILT_IN_COSF:
+       case BUILT_IN_COSL:
+ 	builtin_optab = cos_optab; break;
+       default:
+ 	gcc_unreachable ();
+       }
+   }
+ 
+   /* Before working hard, check whether the instruction is available.  */
+   if (builtin_optab->handlers[(int) mode].insn_code != CODE_FOR_nothing)
+     {
+       target = gen_reg_rtx (mode);
+ 
+       /* Wrap the computation of the argument in a SAVE_EXPR, as we may
+ 	 need to expand the argument again.  This way, we will not perform
+ 	 side-effects more the once.  */
+       narg = save_expr (arg);
+       if (narg != arg)
+ 	{
+ 	  arg = narg;
+ 	  arglist = build_tree_list (NULL_TREE, arg);
+ 	  exp = build_function_call_expr (fndecl, arglist);
+ 	}
+ 
+       op0 = expand_expr (arg, subtarget, VOIDmode, 0);
+ 
+       start_sequence ();
+ 
+       /* Compute into TARGET.
+ 	 Set TARGET to wherever the result comes back.  */
+       if (builtin_optab == sincos_optab)
+ 	{
+ 	  int result;
+ 
+ 	  switch (DECL_FUNCTION_CODE (fndecl))
+ 	    {
+ 	    case BUILT_IN_SIN:
+ 	    case BUILT_IN_SINF:
+ 	    case BUILT_IN_SINL:
+ 	      result = expand_twoval_unop (builtin_optab, op0, 0, target, 0);
+ 	      break;
+ 	    case BUILT_IN_COS:
+ 	    case BUILT_IN_COSF:
+ 	    case BUILT_IN_COSL:
+ 	      result = expand_twoval_unop (builtin_optab, op0, target, 0, 0);
+ 	      break;
+ 	    default:
+ 	      gcc_unreachable ();
+ 	    }
+ 	  gcc_assert (result);
+ 	}
+       else
+ 	{
+ 	  target = expand_unop (mode, builtin_optab, op0, target, 0);
+ 	}
+ 
+       if (target != 0)
+ 	{
+ 	  if (errno_set)
+ 	    expand_errno_check (exp, target);
+ 
+ 	  /* Output the entire sequence.  */
+ 	  insns = get_insns ();
+ 	  end_sequence ();
+ 	  emit_insn (insns);
+ 	  return target;
+ 	}
+ 
+       /* If we were unable to expand via the builtin, stop the sequence
+ 	 (without outputting the insns) and call to the library function
+ 	 with the stabilized argument list.  */
+       end_sequence ();
+     }
+ 
+   before_call = get_last_insn ();
+ 
+   target = expand_call (exp, target, target == const0_rtx);
+ 
+   return target;
+ }
+ 
  /* To evaluate powi(x,n), the floating point value x raised to the
     constant integer exponent n, we use a hybrid algorithm that
     combines the "window method" with look-up tables.  For an
*************** expand_builtin_mathfn_2 (tree exp, rtx t
*** 1902,1908 ****
     multiplications to inline before calling the system library's pow
     function.  powi(x,n) requires at worst 2*bits(n)-2 multiplications,
     so this default never requires calling pow, powf or powl.  */
!  
  #ifndef POWI_MAX_MULTS
  #define POWI_MAX_MULTS  (2*HOST_BITS_PER_WIDE_INT-2)
  #endif
--- 2120,2126 ----
     multiplications to inline before calling the system library's pow
     function.  powi(x,n) requires at worst 2*bits(n)-2 multiplications,
     so this default never requires calling pow, powf or powl.  */
! 
  #ifndef POWI_MAX_MULTS
  #define POWI_MAX_MULTS  (2*HOST_BITS_PER_WIDE_INT-2)
  #endif
*************** powi_cost (HOST_WIDE_INT n)
*** 2019,2025 ****
  	  result++;
  	}
      }
!   
    return result + powi_lookup_cost (val, cache);
  }
  
--- 2237,2243 ----
  	  result++;
  	}
      }
! 
    return result + powi_lookup_cost (val, cache);
  }
  
*************** expand_powi_1 (enum machine_mode mode, u
*** 2068,2074 ****
  /* Expand the RTL to evaluate powi(x,n) in mode MODE.  X is the
     floating point operand in mode MODE, and N is the exponent.  This
     function needs to be kept in sync with powi_cost above.  */
!    
  static rtx
  expand_powi (rtx x, enum machine_mode mode, HOST_WIDE_INT n)
  {
--- 2286,2292 ----
  /* Expand the RTL to evaluate powi(x,n) in mode MODE.  X is the
     floating point operand in mode MODE, and N is the exponent.  This
     function needs to be kept in sync with powi_cost above.  */
! 
  static rtx
  expand_powi (rtx x, enum machine_mode mode, HOST_WIDE_INT n)
  {
*************** expand_builtin_pow (tree exp, rtx target
*** 2138,2144 ****
  	    }
  	}
      }
!   return expand_builtin_mathfn_2 (exp, target, NULL_RTX);
  }
  
  /* Expand expression EXP which is a call to the strlen builtin.  Return 0
--- 2356,2425 ----
  	    }
  	}
      }
! 
!   if (! flag_unsafe_math_optimizations)
!     return NULL_RTX;
!   return expand_builtin_mathfn_2 (exp, target, subtarget);
! }
! 
! /* Expand a call to the powi built-in mathematical function.  Return 0 if
!    a normal call should be emitted rather than expanding the function
!    in-line.  EXP is the expression that is a call to the builtin
!    function; if convenient, the result should be placed in TARGET.  */
! 
! static rtx
! expand_builtin_powi (tree exp, rtx target, rtx subtarget)
! {
!   tree arglist = TREE_OPERAND (exp, 1);
!   tree arg0, arg1;
!   rtx op0, op1;
!   enum machine_mode mode;
! 
!   if (! validate_arglist (arglist, REAL_TYPE, INTEGER_TYPE, VOID_TYPE))
!     return 0;
! 
!   arg0 = TREE_VALUE (arglist);
!   arg1 = TREE_VALUE (TREE_CHAIN (arglist));
!   mode = TYPE_MODE (TREE_TYPE (exp));
! 
!   /* Handle constant power.  */
! 
!   if (TREE_CODE (arg1) == INTEGER_CST
!       && ! TREE_CONSTANT_OVERFLOW (arg1))
!     {
!       HOST_WIDE_INT n = TREE_INT_CST_LOW (arg1);
! 
!       /* If the exponent is -1, 0, 1 or 2, then expand_powi is exact.
! 	 Otherwise, check the number of multiplications required.  */
!       if ((TREE_INT_CST_HIGH (arg1) == 0
! 	   || TREE_INT_CST_HIGH (arg1) == -1)
! 	  && ((n >= -1 && n <= 2)
! 	      || (! optimize_size
! 		  && powi_cost (n) <= POWI_MAX_MULTS)))
! 	{
! 	  op0 = expand_expr (arg0, subtarget, VOIDmode, 0);
! 	  op0 = force_reg (mode, op0);
! 	  return expand_powi (op0, mode, n);
! 	}
!     }
! 
!   /* Emit a libcall to libgcc.  */
! 
!   if (target == NULL_RTX)
!     target = gen_reg_rtx (mode);
! 
!   op0 = expand_expr (arg0, subtarget, mode, 0);
!   if (GET_MODE (op0) != mode)
!     op0 = convert_to_mode (mode, op0, 0);
!   op1 = expand_expr (arg1, 0, word_mode, 0);
!   if (GET_MODE (op1) != word_mode)
!     op1 = convert_to_mode (word_mode, op1, 0);
! 
!   target = emit_library_call_value (powi_optab->handlers[(int) mode].libfunc,
! 				    target, LCT_CONST_MAKE_BLOCK, mode, 2,
! 				    op0, mode, op1, word_mode);
! 
!   return target;
  }
  
  /* Expand expression EXP which is a call to the strlen builtin.  Return 0
*************** expand_builtin_strlen (tree arglist, rtx
*** 2198,2204 ****
        /* Make a place to write the result of the instruction.  */
        result = target;
        if (! (result != 0
! 	     && GET_CODE (result) == REG
  	     && GET_MODE (result) == insn_mode
  	     && REGNO (result) >= FIRST_PSEUDO_REGISTER))
  	result = gen_reg_rtx (insn_mode);
--- 2479,2485 ----
        /* Make a place to write the result of the instruction.  */
        result = target;
        if (! (result != 0
! 	     && REG_P (result)
  	     && GET_MODE (result) == insn_mode
  	     && REGNO (result) >= FIRST_PSEUDO_REGISTER))
  	result = gen_reg_rtx (insn_mode);
*************** expand_builtin_strlen (tree arglist, rtx
*** 2226,2233 ****
  
        /* Now that we are assured of success, expand the source.  */
        start_sequence ();
!       pat = memory_address (BLKmode,
! 			    expand_expr (src, src_reg, ptr_mode, EXPAND_SUM));
        if (pat != src_reg)
  	emit_move_insn (src_reg, pat);
        pat = get_insns ();
--- 2507,2513 ----
  
        /* Now that we are assured of success, expand the source.  */
        start_sequence ();
!       pat = expand_expr (src, src_reg, ptr_mode, EXPAND_NORMAL);
        if (pat != src_reg)
  	emit_move_insn (src_reg, pat);
        pat = get_insns ();
*************** expand_builtin_strlen (tree arglist, rtx
*** 2255,2307 ****
     in TARGET, if convenient (and in mode MODE if that's convenient).  */
  
  static rtx
! expand_builtin_strstr (tree arglist, rtx target, enum machine_mode mode)
  {
!   if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
!     return 0;
!   else
      {
!       tree s1 = TREE_VALUE (arglist), s2 = TREE_VALUE (TREE_CHAIN (arglist));
!       tree fn;
!       const char *p1, *p2;
! 
!       p2 = c_getstr (s2);
!       if (p2 == NULL)
! 	return 0;
! 
!       p1 = c_getstr (s1);
!       if (p1 != NULL)
! 	{
! 	  const char *r = strstr (p1, p2);
! 
! 	  if (r == NULL)
! 	    return const0_rtx;
! 
! 	  /* Return an offset into the constant string argument.  */
! 	  return expand_expr (fold (build (PLUS_EXPR, TREE_TYPE (s1),
! 					   s1, convert (TREE_TYPE (s1),
! 							ssize_int (r - p1)))),
! 			      target, mode, EXPAND_NORMAL);
! 	}
! 
!       if (p2[0] == '\0')
! 	return expand_expr (s1, target, mode, EXPAND_NORMAL);
! 
!       if (p2[1] != '\0')
! 	return 0;
! 
!       fn = implicit_built_in_decls[BUILT_IN_STRCHR];
!       if (!fn)
! 	return 0;
! 
!       /* New argument list transforming strstr(s1, s2) to
! 	 strchr(s1, s2[0]).  */
!       arglist =
! 	build_tree_list (NULL_TREE, build_int_2 (p2[0], 0));
!       arglist = tree_cons (NULL_TREE, s1, arglist);
!       return expand_expr (build_function_call_expr (fn, arglist),
! 			  target, mode, EXPAND_NORMAL);
      }
  }
  
  /* Expand a call to the strchr builtin.  Return 0 if we failed the
--- 2535,2549 ----
     in TARGET, if convenient (and in mode MODE if that's convenient).  */
  
  static rtx
! expand_builtin_strstr (tree arglist, tree type, rtx target, enum machine_mode mode)
  {
!   if (validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
      {
!       tree result = fold_builtin_strstr (arglist, type);
!       if (result)
! 	return expand_expr (result, target, mode, EXPAND_NORMAL);
      }
+   return 0;
  }
  
  /* Expand a call to the strchr builtin.  Return 0 if we failed the
*************** expand_builtin_strstr (tree arglist, rtx
*** 2309,2351 ****
     in TARGET, if convenient (and in mode MODE if that's convenient).  */
  
  static rtx
! expand_builtin_strchr (tree arglist, rtx target, enum machine_mode mode)
  {
!   if (!validate_arglist (arglist, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
!     return 0;
!   else
      {
!       tree s1 = TREE_VALUE (arglist), s2 = TREE_VALUE (TREE_CHAIN (arglist));
!       const char *p1;
! 
!       if (TREE_CODE (s2) != INTEGER_CST)
! 	return 0;
! 
!       p1 = c_getstr (s1);
!       if (p1 != NULL)
! 	{
! 	  char c;
! 	  const char *r;
! 
! 	  if (target_char_cast (s2, &c))
! 	    return 0;
! 
! 	  r = strchr (p1, c);
! 
! 	  if (r == NULL)
! 	    return const0_rtx;
! 
! 	  /* Return an offset into the constant string argument.  */
! 	  return expand_expr (fold (build (PLUS_EXPR, TREE_TYPE (s1),
! 					   s1, convert (TREE_TYPE (s1),
! 							ssize_int (r - p1)))),
! 			      target, mode, EXPAND_NORMAL);
! 	}
  
!       /* FIXME: Should use here strchrM optab so that ports can optimize
! 	 this.  */
!       return 0;
      }
  }
  
  /* Expand a call to the strrchr builtin.  Return 0 if we failed the
--- 2551,2567 ----
     in TARGET, if convenient (and in mode MODE if that's convenient).  */
  
  static rtx
! expand_builtin_strchr (tree arglist, tree type, rtx target, enum machine_mode mode)
  {
!   if (validate_arglist (arglist, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
      {
!       tree result = fold_builtin_strchr (arglist, type);
!       if (result)
! 	return expand_expr (result, target, mode, EXPAND_NORMAL);
  
!       /* FIXME: Should use strchrM optab so that ports can optimize this.  */
      }
+   return 0;
  }
  
  /* Expand a call to the strrchr builtin.  Return 0 if we failed the
*************** expand_builtin_strchr (tree arglist, rtx
*** 2353,2403 ****
     in TARGET, if convenient (and in mode MODE if that's convenient).  */
  
  static rtx
! expand_builtin_strrchr (tree arglist, rtx target, enum machine_mode mode)
  {
!   if (!validate_arglist (arglist, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
!     return 0;
!   else
      {
!       tree s1 = TREE_VALUE (arglist), s2 = TREE_VALUE (TREE_CHAIN (arglist));
!       tree fn;
!       const char *p1;
! 
!       if (TREE_CODE (s2) != INTEGER_CST)
! 	return 0;
! 
!       p1 = c_getstr (s1);
!       if (p1 != NULL)
! 	{
! 	  char c;
! 	  const char *r;
! 
! 	  if (target_char_cast (s2, &c))
! 	    return 0;
! 
! 	  r = strrchr (p1, c);
! 
! 	  if (r == NULL)
! 	    return const0_rtx;
! 
! 	  /* Return an offset into the constant string argument.  */
! 	  return expand_expr (fold (build (PLUS_EXPR, TREE_TYPE (s1),
! 					   s1, convert (TREE_TYPE (s1),
! 							ssize_int (r - p1)))),
! 			      target, mode, EXPAND_NORMAL);
! 	}
! 
!       if (! integer_zerop (s2))
! 	return 0;
! 
!       fn = implicit_built_in_decls[BUILT_IN_STRCHR];
!       if (!fn)
! 	return 0;
! 
!       /* Transform strrchr(s1, '\0') to strchr(s1, '\0').  */
!       return expand_expr (build_function_call_expr (fn, arglist),
! 			  target, mode, EXPAND_NORMAL);
      }
  }
  
  /* Expand a call to the strpbrk builtin.  Return 0 if we failed the
--- 2569,2583 ----
     in TARGET, if convenient (and in mode MODE if that's convenient).  */
  
  static rtx
! expand_builtin_strrchr (tree arglist, tree type, rtx target, enum machine_mode mode)
  {
!   if (validate_arglist (arglist, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
      {
!       tree result = fold_builtin_strrchr (arglist, type);
!       if (result)
! 	return expand_expr (result, target, mode, EXPAND_NORMAL);
      }
+   return 0;
  }
  
  /* Expand a call to the strpbrk builtin.  Return 0 if we failed the
*************** expand_builtin_strrchr (tree arglist, rt
*** 2405,2463 ****
     in TARGET, if convenient (and in mode MODE if that's convenient).  */
  
  static rtx
! expand_builtin_strpbrk (tree arglist, rtx target, enum machine_mode mode)
  {
!   if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
!     return 0;
!   else
      {
!       tree s1 = TREE_VALUE (arglist), s2 = TREE_VALUE (TREE_CHAIN (arglist));
!       tree fn;
!       const char *p1, *p2;
! 
!       p2 = c_getstr (s2);
!       if (p2 == NULL)
! 	return 0;
! 
!       p1 = c_getstr (s1);
!       if (p1 != NULL)
! 	{
! 	  const char *r = strpbrk (p1, p2);
! 
! 	  if (r == NULL)
! 	    return const0_rtx;
! 
! 	  /* Return an offset into the constant string argument.  */
! 	  return expand_expr (fold (build (PLUS_EXPR, TREE_TYPE (s1),
! 					   s1, convert (TREE_TYPE (s1),
! 							ssize_int (r - p1)))),
! 			      target, mode, EXPAND_NORMAL);
! 	}
! 
!       if (p2[0] == '\0')
! 	{
! 	  /* strpbrk(x, "") == NULL.
! 	     Evaluate and ignore the arguments in case they had
! 	     side-effects.  */
! 	  expand_expr (s1, const0_rtx, VOIDmode, EXPAND_NORMAL);
! 	  return const0_rtx;
! 	}
! 
!       if (p2[1] != '\0')
! 	return 0;  /* Really call strpbrk.  */
! 
!       fn = implicit_built_in_decls[BUILT_IN_STRCHR];
!       if (!fn)
! 	return 0;
! 
!       /* New argument list transforming strpbrk(s1, s2) to
! 	 strchr(s1, s2[0]).  */
!       arglist =
! 	build_tree_list (NULL_TREE, build_int_2 (p2[0], 0));
!       arglist = tree_cons (NULL_TREE, s1, arglist);
!       return expand_expr (build_function_call_expr (fn, arglist),
! 			  target, mode, EXPAND_NORMAL);
      }
  }
  
  /* Callback routine for store_by_pieces.  Read GET_MODE_BITSIZE (MODE)
--- 2585,2599 ----
     in TARGET, if convenient (and in mode MODE if that's convenient).  */
  
  static rtx
! expand_builtin_strpbrk (tree arglist, tree type, rtx target, enum machine_mode mode)
  {
!   if (validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
      {
!       tree result = fold_builtin_strpbrk (arglist, type);
!       if (result)
! 	return expand_expr (result, target, mode, EXPAND_NORMAL);
      }
+   return 0;
  }
  
  /* Callback routine for store_by_pieces.  Read GET_MODE_BITSIZE (MODE)
*************** builtin_memcpy_read_str (void *data, HOS
*** 2470,2479 ****
  {
    const char *str = (const char *) data;
  
!   if (offset < 0
!       || ((unsigned HOST_WIDE_INT) offset + GET_MODE_SIZE (mode)
! 	  > strlen (str) + 1))
!     abort ();  /* Attempt to read past the end of constant string.  */
  
    return c_readstr (str + offset, mode);
  }
--- 2606,2614 ----
  {
    const char *str = (const char *) data;
  
!   gcc_assert (offset >= 0
! 	      && ((unsigned HOST_WIDE_INT) offset + GET_MODE_SIZE (mode)
! 		  <= strlen (str) + 1));
  
    return c_readstr (str + offset, mode);
  }
*************** builtin_memcpy_read_str (void *data, HOS
*** 2483,2490 ****
     otherwise try to get the result in TARGET, if convenient (and in
     mode MODE if that's convenient).  */
  static rtx
! expand_builtin_memcpy (tree arglist, rtx target, enum machine_mode mode)
  {
    if (!validate_arglist (arglist,
  			 POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
      return 0;
--- 2618,2626 ----
     otherwise try to get the result in TARGET, if convenient (and in
     mode MODE if that's convenient).  */
  static rtx
! expand_builtin_memcpy (tree exp, rtx target, enum machine_mode mode)
  {
+   tree arglist = TREE_OPERAND (exp, 1);
    if (!validate_arglist (arglist,
  			 POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
      return 0;
*************** expand_builtin_memcpy (tree arglist, rtx
*** 2498,2524 ****
        unsigned int dest_align
  	= get_pointer_alignment (dest, BIGGEST_ALIGNMENT);
        rtx dest_mem, src_mem, dest_addr, len_rtx;
  
        /* If DEST is not a pointer type, call the normal function.  */
        if (dest_align == 0)
  	return 0;
  
-       /* If the LEN parameter is zero, return DEST.  */
-       if (integer_zerop (len))
- 	{
- 	  /* Evaluate and ignore SRC in case it has side-effects.  */
- 	  expand_expr (src, const0_rtx, VOIDmode, EXPAND_NORMAL);
- 	  return expand_expr (dest, target, mode, EXPAND_NORMAL);
- 	}
- 
-       /* If SRC and DEST are the same (and not volatile), return DEST.  */
-       if (operand_equal_p (src, dest, 0))
- 	{
- 	  /* Evaluate and ignore LEN in case it has side-effects.  */
- 	  expand_expr (len, const0_rtx, VOIDmode, EXPAND_NORMAL);
- 	  return expand_expr (dest, target, mode, EXPAND_NORMAL);
- 	}
- 
        /* If either SRC is not a pointer type, don't do this
           operation in-line.  */
        if (src_align == 0)
--- 2634,2648 ----
        unsigned int dest_align
  	= get_pointer_alignment (dest, BIGGEST_ALIGNMENT);
        rtx dest_mem, src_mem, dest_addr, len_rtx;
+       tree result = fold_builtin_memcpy (exp);
+ 
+       if (result)
+ 	return expand_expr (result, target, mode, EXPAND_NORMAL);
  
        /* If DEST is not a pointer type, call the normal function.  */
        if (dest_align == 0)
  	return 0;
  
        /* If either SRC is not a pointer type, don't do this
           operation in-line.  */
        if (src_align == 0)
*************** expand_builtin_memcpy (tree arglist, rtx
*** 2571,2577 ****
     stpcpy.  */
  
  static rtx
! expand_builtin_mempcpy (tree arglist, rtx target, enum machine_mode mode,
  			int endp)
  {
    if (!validate_arglist (arglist,
--- 2695,2701 ----
     stpcpy.  */
  
  static rtx
! expand_builtin_mempcpy (tree arglist, tree type, rtx target, enum machine_mode mode,
  			int endp)
  {
    if (!validate_arglist (arglist,
*************** expand_builtin_mempcpy (tree arglist, rt
*** 2598,2644 ****
        unsigned int dest_align
  	= get_pointer_alignment (dest, BIGGEST_ALIGNMENT);
        rtx dest_mem, src_mem, len_rtx;
  
!       /* If DEST is not a pointer type, call the normal function.  */
!       if (dest_align == 0)
  	return 0;
  
-       /* If SRC and DEST are the same (and not volatile), do nothing.  */
-       if (operand_equal_p (src, dest, 0))
- 	{
- 	  tree expr;
- 
- 	  if (endp == 0)
- 	    {
- 	      /* Evaluate and ignore LEN in case it has side-effects.  */
- 	      expand_expr (len, const0_rtx, VOIDmode, EXPAND_NORMAL);
- 	      return expand_expr (dest, target, mode, EXPAND_NORMAL);
- 	    }
- 
- 	  if (endp == 2)
- 	    len = fold (build (MINUS_EXPR, TREE_TYPE (len), dest,
- 			       integer_one_node));
- 	  len = convert (TREE_TYPE (dest), len);
- 	  expr = fold (build (PLUS_EXPR, TREE_TYPE (dest), dest, len));
- 	  return expand_expr (expr, target, mode, EXPAND_NORMAL);
- 	}
- 
        /* If LEN is not constant, call the normal function.  */
        if (! host_integerp (len, 1))
  	return 0;
-   
-       /* If the LEN parameter is zero, return DEST.  */
-       if (tree_low_cst (len, 1) == 0)
- 	{
- 	  /* Evaluate and ignore SRC in case it has side-effects.  */
- 	  expand_expr (src, const0_rtx, VOIDmode, EXPAND_NORMAL);
- 	  return expand_expr (dest, target, mode, EXPAND_NORMAL);
- 	}
- 
-       /* If either SRC is not a pointer type, don't do this
-          operation in-line.  */
-       if (src_align == 0)
- 	return 0;
  
        len_rtx = expand_expr (len, NULL_RTX, VOIDmode, 0);
        src_str = c_getstr (src);
--- 2722,2740 ----
        unsigned int dest_align
  	= get_pointer_alignment (dest, BIGGEST_ALIGNMENT);
        rtx dest_mem, src_mem, len_rtx;
+       tree result = fold_builtin_mempcpy (arglist, type, endp);
  
!       if (result)
! 	return expand_expr (result, target, mode, EXPAND_NORMAL);
!       
!       /* If either SRC or DEST is not a pointer type, don't do this
!          operation in-line.  */
!       if (dest_align == 0 || src_align == 0)
  	return 0;
  
        /* If LEN is not constant, call the normal function.  */
        if (! host_integerp (len, 1))
  	return 0;
  
        len_rtx = expand_expr (len, NULL_RTX, VOIDmode, 0);
        src_str = c_getstr (src);
*************** expand_builtin_mempcpy (tree arglist, rt
*** 2685,2691 ****
     if we failed the caller should emit a normal call.  */
  
  static rtx
! expand_builtin_memmove (tree arglist, rtx target, enum machine_mode mode)
  {
    if (!validate_arglist (arglist,
  			 POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
--- 2781,2788 ----
     if we failed the caller should emit a normal call.  */
  
  static rtx
! expand_builtin_memmove (tree arglist, tree type, rtx target,
! 			enum machine_mode mode)
  {
    if (!validate_arglist (arglist,
  			 POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
*************** expand_builtin_memmove (tree arglist, rt
*** 2699,2725 ****
        unsigned int src_align = get_pointer_alignment (src, BIGGEST_ALIGNMENT);
        unsigned int dest_align
  	= get_pointer_alignment (dest, BIGGEST_ALIGNMENT);
  
        /* If DEST is not a pointer type, call the normal function.  */
        if (dest_align == 0)
  	return 0;
  
-       /* If the LEN parameter is zero, return DEST.  */
-       if (integer_zerop (len))
- 	{
- 	  /* Evaluate and ignore SRC in case it has side-effects.  */
- 	  expand_expr (src, const0_rtx, VOIDmode, EXPAND_NORMAL);
- 	  return expand_expr (dest, target, mode, EXPAND_NORMAL);
- 	}
- 
-       /* If SRC and DEST are the same (and not volatile), return DEST.  */
-       if (operand_equal_p (src, dest, 0))
- 	{
- 	  /* Evaluate and ignore LEN in case it has side-effects.  */
- 	  expand_expr (len, const0_rtx, VOIDmode, EXPAND_NORMAL);
- 	  return expand_expr (dest, target, mode, EXPAND_NORMAL);
- 	}
- 
        /* If either SRC is not a pointer type, don't do this
           operation in-line.  */
        if (src_align == 0)
--- 2796,2810 ----
        unsigned int src_align = get_pointer_alignment (src, BIGGEST_ALIGNMENT);
        unsigned int dest_align
  	= get_pointer_alignment (dest, BIGGEST_ALIGNMENT);
+       tree result = fold_builtin_memmove (arglist, type);
+ 
+       if (result)
+ 	return expand_expr (result, target, mode, EXPAND_NORMAL);
  
        /* If DEST is not a pointer type, call the normal function.  */
        if (dest_align == 0)
  	return 0;
  
        /* If either SRC is not a pointer type, don't do this
           operation in-line.  */
        if (src_align == 0)
*************** expand_builtin_memmove (tree arglist, rt
*** 2736,2741 ****
--- 2821,2836 ----
  			      target, mode, EXPAND_NORMAL);
  	}
  
+       /* If length is 1 and we can expand memcpy call inline,
+ 	 it is ok to use memcpy as well.  */
+       if (integer_onep (len))
+         {
+ 	  rtx ret = expand_builtin_mempcpy (arglist, type, target, mode,
+ 					    /*endp=*/0);
+ 	  if (ret)
+ 	    return ret;
+         }
+ 
        /* Otherwise, call the normal function.  */
        return 0;
     }
*************** expand_builtin_memmove (tree arglist, rt
*** 2745,2751 ****
     if we failed the caller should emit a normal call.  */
  
  static rtx
! expand_builtin_bcopy (tree arglist)
  {
    tree src, dest, size, newarglist;
  
--- 2840,2846 ----
     if we failed the caller should emit a normal call.  */
  
  static rtx
! expand_builtin_bcopy (tree arglist, tree type)
  {
    tree src, dest, size, newarglist;
  
*************** expand_builtin_bcopy (tree arglist)
*** 2762,2808 ****
       so that if it isn't expanded inline, we fallback to
       calling bcopy instead of memmove.  */
  
!   newarglist = build_tree_list (NULL_TREE, convert (sizetype, size));
    newarglist = tree_cons (NULL_TREE, src, newarglist);
    newarglist = tree_cons (NULL_TREE, dest, newarglist);
  
!   return expand_builtin_memmove (newarglist, const0_rtx, VOIDmode);
  }
  
! /* Expand expression EXP, which is a call to the strcpy builtin.  Return 0
!    if we failed the caller should emit a normal call, otherwise try to get
!    the result in TARGET, if convenient (and in mode MODE if that's
!    convenient).  */
  
  static rtx
! expand_builtin_strcpy (tree arglist, rtx target, enum machine_mode mode)
  {
!   tree fn, len, src, dst;
  
!   if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
      return 0;
  
!   src = TREE_VALUE (TREE_CHAIN (arglist));
!   dst = TREE_VALUE (arglist);
  
!   /* If SRC and DST are equal (and not volatile), return DST.  */
!   if (operand_equal_p (src, dst, 0))
!     return expand_expr (dst, target, mode, EXPAND_NORMAL);
  
!   fn = implicit_built_in_decls[BUILT_IN_MEMCPY];
!   if (!fn)
!     return 0;
  
!   len = c_strlen (src, 1);
!   if (len == 0 || TREE_SIDE_EFFECTS (len))
!     return 0;
  
!   len = size_binop (PLUS_EXPR, len, ssize_int (1));
!   arglist = build_tree_list (NULL_TREE, len);
!   arglist = tree_cons (NULL_TREE, src, arglist);
!   arglist = tree_cons (NULL_TREE, dst, arglist);
!   return expand_expr (build_function_call_expr (fn, arglist),
! 		      target, mode, EXPAND_NORMAL);
  }
  
  /* Expand a call to the stpcpy builtin, with arguments in ARGLIST.
--- 2857,2956 ----
       so that if it isn't expanded inline, we fallback to
       calling bcopy instead of memmove.  */
  
!   newarglist = build_tree_list (NULL_TREE, fold_convert (sizetype, size));
    newarglist = tree_cons (NULL_TREE, src, newarglist);
    newarglist = tree_cons (NULL_TREE, dest, newarglist);
  
!   return expand_builtin_memmove (newarglist, type, const0_rtx, VOIDmode);
  }
  
! #ifndef HAVE_movstr
! # define HAVE_movstr 0
! # define CODE_FOR_movstr CODE_FOR_nothing
! #endif
! 
! /* Expand into a movstr instruction, if one is available.  Return 0 if
!    we failed, the caller should emit a normal call, otherwise try to
!    get the result in TARGET, if convenient.  If ENDP is 0 return the
!    destination pointer, if ENDP is 1 return the end pointer ala
!    mempcpy, and if ENDP is 2 return the end pointer minus one ala
!    stpcpy.  */
  
  static rtx
! expand_movstr (tree dest, tree src, rtx target, int endp)
  {
!   rtx end;
!   rtx dest_mem;
!   rtx src_mem;
!   rtx insn;
!   const struct insn_data * data;
  
!   if (!HAVE_movstr)
      return 0;
  
!   dest_mem = get_memory_rtx (dest);
!   src_mem = get_memory_rtx (src);
!   if (!endp)
!     {
!       target = force_reg (Pmode, XEXP (dest_mem, 0));
!       dest_mem = replace_equiv_address (dest_mem, target);
!       end = gen_reg_rtx (Pmode);
!     }
!   else
!     {
!       if (target == 0 || target == const0_rtx)
! 	{
! 	  end = gen_reg_rtx (Pmode);
! 	  if (target == 0)
! 	    target = end;
! 	}
!       else
! 	end = target;
!     }
  
!   data = insn_data + CODE_FOR_movstr;
  
!   if (data->operand[0].mode != VOIDmode)
!     end = gen_lowpart (data->operand[0].mode, end);
  
!   insn = data->genfun (end, dest_mem, src_mem);
  
!   gcc_assert (insn);
! 
!   emit_insn (insn);
! 
!   /* movstr is supposed to set end to the address of the NUL
!      terminator.  If the caller requested a mempcpy-like return value,
!      adjust it.  */
!   if (endp == 1 && target != const0_rtx)
!     {
!       rtx tem = plus_constant (gen_lowpart (GET_MODE (target), end), 1);
!       emit_move_insn (target, force_operand (tem, NULL_RTX));
!     }
! 
!   return target;
! }
! 
! /* Expand expression EXP, which is a call to the strcpy builtin.  Return 0
!    if we failed the caller should emit a normal call, otherwise try to get
!    the result in TARGET, if convenient (and in mode MODE if that's
!    convenient).  */
! 
! static rtx
! expand_builtin_strcpy (tree exp, rtx target, enum machine_mode mode)
! {
!   tree arglist = TREE_OPERAND (exp, 1);
!   if (validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
!     {
!       tree result = fold_builtin_strcpy (exp, 0);
!       if (result)
! 	return expand_expr (result, target, mode, EXPAND_NORMAL);
! 
!       return expand_movstr (TREE_VALUE (arglist),
! 			    TREE_VALUE (TREE_CHAIN (arglist)),
! 			    target, /*endp=*/0);
!     }
!   return 0;
  }
  
  /* Expand a call to the stpcpy builtin, with arguments in ARGLIST.
*************** expand_builtin_strcpy (tree arglist, rtx
*** 2811,2834 ****
     mode MODE if that's convenient).  */
  
  static rtx
! expand_builtin_stpcpy (tree arglist, rtx target, enum machine_mode mode)
  {
    if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
      return 0;
    else
      {
!       tree dst, src, len;
! 
!       /* If return value is ignored, transform stpcpy into strcpy.  */
!       if (target == const0_rtx)
! 	{
! 	  tree fn = implicit_built_in_decls[BUILT_IN_STRCPY];
! 	  if (!fn)
! 	    return 0;
! 
! 	  return expand_expr (build_function_call_expr (fn, arglist),
! 			      target, mode, EXPAND_NORMAL);
! 	}
  
        /* Ensure we get an actual string whose length can be evaluated at
           compile-time, not an expression containing a string.  This is
--- 2959,2985 ----
     mode MODE if that's convenient).  */
  
  static rtx
! expand_builtin_stpcpy (tree exp, rtx target, enum machine_mode mode)
  {
+   tree arglist = TREE_OPERAND (exp, 1);
+   /* If return value is ignored, transform stpcpy into strcpy.  */
+   if (target == const0_rtx)
+     {
+       tree fn = implicit_built_in_decls[BUILT_IN_STRCPY];
+       if (!fn)
+ 	return 0;
+ 
+       return expand_expr (build_function_call_expr (fn, arglist),
+ 			  target, mode, EXPAND_NORMAL);
+     }
+ 
    if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
      return 0;
    else
      {
!       tree dst, src, len, lenp1;
!       tree narglist;
!       rtx ret;
  
        /* Ensure we get an actual string whose length can be evaluated at
           compile-time, not an expression containing a string.  This is
*************** expand_builtin_stpcpy (tree arglist, rtx
*** 2836,2849 ****
           when used to produce the return value.  */
        src = TREE_VALUE (TREE_CHAIN (arglist));
        if (! c_getstr (src) || ! (len = c_strlen (src, 0)))
! 	return 0;
  
        dst = TREE_VALUE (arglist);
!       len = fold (size_binop (PLUS_EXPR, len, ssize_int (1)));
!       arglist = build_tree_list (NULL_TREE, len);
!       arglist = tree_cons (NULL_TREE, src, arglist);
!       arglist = tree_cons (NULL_TREE, dst, arglist);
!       return expand_builtin_mempcpy (arglist, target, mode, /*endp=*/2);
      }
  }
  
--- 2987,3039 ----
           when used to produce the return value.  */
        src = TREE_VALUE (TREE_CHAIN (arglist));
        if (! c_getstr (src) || ! (len = c_strlen (src, 0)))
! 	return expand_movstr (TREE_VALUE (arglist),
! 			      TREE_VALUE (TREE_CHAIN (arglist)),
! 			      target, /*endp=*/2);
  
        dst = TREE_VALUE (arglist);
!       lenp1 = size_binop (PLUS_EXPR, len, ssize_int (1));
!       narglist = build_tree_list (NULL_TREE, lenp1);
!       narglist = tree_cons (NULL_TREE, src, narglist);
!       narglist = tree_cons (NULL_TREE, dst, narglist);
!       ret = expand_builtin_mempcpy (narglist, TREE_TYPE (exp),
! 				    target, mode, /*endp=*/2);
! 
!       if (ret)
! 	return ret;
! 
!       if (TREE_CODE (len) == INTEGER_CST)
! 	{
! 	  rtx len_rtx = expand_expr (len, NULL_RTX, VOIDmode, 0);
! 
! 	  if (GET_CODE (len_rtx) == CONST_INT)
! 	    {
! 	      ret = expand_builtin_strcpy (exp, target, mode);
! 
! 	      if (ret)
! 		{
! 		  if (! target)
! 		    {
! 		      if (mode != VOIDmode)
! 			target = gen_reg_rtx (mode);
! 		      else
! 			target = gen_reg_rtx (GET_MODE (ret));
! 		    }
! 		  if (GET_MODE (target) != GET_MODE (ret))
! 		    ret = gen_lowpart (GET_MODE (target), ret);
! 
! 		  ret = plus_constant (ret, INTVAL (len_rtx));
! 		  ret = emit_move_insn (target, force_operand (ret, NULL_RTX));
! 		  gcc_assert (ret);
! 
! 		  return target;
! 		}
! 	    }
! 	}
! 
!       return expand_movstr (TREE_VALUE (arglist),
! 			    TREE_VALUE (TREE_CHAIN (arglist)),
! 			    target, /*endp=*/2);
      }
  }
  
*************** builtin_strncpy_read_str (void *data, HO
*** 2867,2901 ****
     if we failed the caller should emit a normal call.  */
  
  static rtx
! expand_builtin_strncpy (tree arglist, rtx target, enum machine_mode mode)
  {
!   if (!validate_arglist (arglist,
! 			 POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
!     return 0;
!   else
      {
        tree slen = c_strlen (TREE_VALUE (TREE_CHAIN (arglist)), 1);
        tree len = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist)));
!       tree fn;
! 
!       /* We must be passed a constant len parameter.  */
!       if (TREE_CODE (len) != INTEGER_CST)
! 	return 0;
! 
!       /* If the len parameter is zero, return the dst parameter.  */
!       if (integer_zerop (len))
! 	{
! 	  /* Evaluate and ignore the src argument in case it has
! 	     side-effects.  */
! 	  expand_expr (TREE_VALUE (TREE_CHAIN (arglist)), const0_rtx,
! 		       VOIDmode, EXPAND_NORMAL);
! 	  /* Return the dst parameter.  */
! 	  return expand_expr (TREE_VALUE (arglist), target, mode,
! 			      EXPAND_NORMAL);
! 	}
  
!       /* Now, we must be passed a constant src ptr parameter.  */
!       if (slen == 0 || TREE_CODE (slen) != INTEGER_CST)
  	return 0;
  
        slen = size_binop (PLUS_EXPR, slen, ssize_int (1));
--- 3057,3077 ----
     if we failed the caller should emit a normal call.  */
  
  static rtx
! expand_builtin_strncpy (tree exp, rtx target, enum machine_mode mode)
  {
!   tree arglist = TREE_OPERAND (exp, 1);
!   if (validate_arglist (arglist,
! 			POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
      {
        tree slen = c_strlen (TREE_VALUE (TREE_CHAIN (arglist)), 1);
        tree len = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist)));
!       tree result = fold_builtin_strncpy (exp, slen);
!       
!       if (result)
! 	return expand_expr (result, target, mode, EXPAND_NORMAL);
  
!       /* We must be passed a constant len and src parameter.  */
!       if (!host_integerp (len, 1) || !slen || !host_integerp (slen, 1))
  	return 0;
  
        slen = size_binop (PLUS_EXPR, slen, ssize_int (1));
*************** expand_builtin_strncpy (tree arglist, rt
*** 2925,2938 ****
  	  dest_mem = convert_memory_address (ptr_mode, dest_mem);
  	  return dest_mem;
  	}
- 
-       /* OK transform into builtin memcpy.  */
-       fn = implicit_built_in_decls[BUILT_IN_MEMCPY];
-       if (!fn)
- 	return 0;
-       return expand_expr (build_function_call_expr (fn, arglist),
- 			  target, mode, EXPAND_NORMAL);
      }
  }
  
  /* Callback routine for store_by_pieces.  Read GET_MODE_BITSIZE (MODE)
--- 3101,3108 ----
  	  dest_mem = convert_memory_address (ptr_mode, dest_mem);
  	  return dest_mem;
  	}
      }
+   return 0;
  }
  
  /* Callback routine for store_by_pieces.  Read GET_MODE_BITSIZE (MODE)
*************** expand_builtin_bzero (tree arglist)
*** 3100,3106 ****
       so that if it isn't expanded inline, we fallback to
       calling bzero instead of memset.  */
  
!   newarglist = build_tree_list (NULL_TREE, convert (sizetype, size));
    newarglist = tree_cons (NULL_TREE, integer_zero_node, newarglist);
    newarglist = tree_cons (NULL_TREE, dest, newarglist);
  
--- 3270,3276 ----
       so that if it isn't expanded inline, we fallback to
       calling bzero instead of memset.  */
  
!   newarglist = build_tree_list (NULL_TREE, fold_convert (sizetype, size));
    newarglist = tree_cons (NULL_TREE, integer_zero_node, newarglist);
    newarglist = tree_cons (NULL_TREE, dest, newarglist);
  
*************** static rtx
*** 3116,3184 ****
  expand_builtin_memcmp (tree exp ATTRIBUTE_UNUSED, tree arglist, rtx target,
  		       enum machine_mode mode)
  {
-   tree arg1, arg2, len;
-   const char *p1, *p2;
- 
    if (!validate_arglist (arglist,
  			 POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
      return 0;
! 
!   arg1 = TREE_VALUE (arglist);
!   arg2 = TREE_VALUE (TREE_CHAIN (arglist));
!   len = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist)));
! 
!   /* If the len parameter is zero, return zero.  */
!   if (integer_zerop (len))
!     {
!       /* Evaluate and ignore arg1 and arg2 in case they have
!          side-effects.  */
!       expand_expr (arg1, const0_rtx, VOIDmode, EXPAND_NORMAL);
!       expand_expr (arg2, const0_rtx, VOIDmode, EXPAND_NORMAL);
!       return const0_rtx;
!     }
! 
!   /* If both arguments are equal (and not volatile), return zero.  */
!   if (operand_equal_p (arg1, arg2, 0))
!     {
!       /* Evaluate and ignore len in case it has side-effects.  */
!       expand_expr (len, const0_rtx, VOIDmode, EXPAND_NORMAL);
!       return const0_rtx;
!     }
! 
!   p1 = c_getstr (arg1);
!   p2 = c_getstr (arg2);
! 
!   /* If all arguments are constant, and the value of len is not greater
!      than the lengths of arg1 and arg2, evaluate at compile-time.  */
!   if (host_integerp (len, 1) && p1 && p2
!       && compare_tree_int (len, strlen (p1) + 1) <= 0
!       && compare_tree_int (len, strlen (p2) + 1) <= 0)
!     {
!       const int r = memcmp (p1, p2, tree_low_cst (len, 1));
! 
!       return (r < 0 ? constm1_rtx : (r > 0 ? const1_rtx : const0_rtx));
!     }
! 
!   /* If len parameter is one, return an expression corresponding to
!      (*(const unsigned char*)arg1 - (const unsigned char*)arg2).  */
!   if (integer_onep (len))
      {
!       tree cst_uchar_node = build_type_variant (unsigned_char_type_node, 1, 0);
!       tree cst_uchar_ptr_node = build_pointer_type (cst_uchar_node);
!       tree ind1 =
!       fold (build1 (CONVERT_EXPR, integer_type_node,
! 		    build1 (INDIRECT_REF, cst_uchar_node,
! 			    build1 (NOP_EXPR, cst_uchar_ptr_node, arg1))));
!       tree ind2 =
!       fold (build1 (CONVERT_EXPR, integer_type_node,
! 		    build1 (INDIRECT_REF, cst_uchar_node,
! 			    build1 (NOP_EXPR, cst_uchar_ptr_node, arg2))));
!       tree result = fold (build (MINUS_EXPR, integer_type_node, ind1, ind2));
!       return expand_expr (result, target, mode, EXPAND_NORMAL);
      }
  
  #if defined HAVE_cmpmemsi || defined HAVE_cmpstrsi
    {
      rtx arg1_rtx, arg2_rtx, arg3_rtx;
      rtx result;
      rtx insn;
--- 3286,3306 ----
  expand_builtin_memcmp (tree exp ATTRIBUTE_UNUSED, tree arglist, rtx target,
  		       enum machine_mode mode)
  {
    if (!validate_arglist (arglist,
  			 POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
      return 0;
!   else
      {
!       tree result = fold_builtin_memcmp (arglist);
!       if (result)
! 	return expand_expr (result, target, mode, EXPAND_NORMAL);
      }
  
  #if defined HAVE_cmpmemsi || defined HAVE_cmpstrsi
    {
+     tree arg1 = TREE_VALUE (arglist);
+     tree arg2 = TREE_VALUE (TREE_CHAIN (arglist));
+     tree len = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist)));
      rtx arg1_rtx, arg2_rtx, arg3_rtx;
      rtx result;
      rtx insn;
*************** expand_builtin_memcmp (tree exp ATTRIBUT
*** 3199,3205 ****
        insn_mode = insn_data[(int) CODE_FOR_cmpstrsi].operand[0].mode;
      else
  #endif
!       return 0;     
  
      /* If we don't have POINTER_TYPE, call the function.  */
      if (arg1_align == 0 || arg2_align == 0)
--- 3321,3327 ----
        insn_mode = insn_data[(int) CODE_FOR_cmpstrsi].operand[0].mode;
      else
  #endif
!       return 0;
  
      /* If we don't have POINTER_TYPE, call the function.  */
      if (arg1_align == 0 || arg2_align == 0)
*************** expand_builtin_memcmp (tree exp ATTRIBUT
*** 3208,3220 ****
      /* Make a place to write the result of the instruction.  */
      result = target;
      if (! (result != 0
! 	   && GET_CODE (result) == REG && GET_MODE (result) == insn_mode
  	   && REGNO (result) >= FIRST_PSEUDO_REGISTER))
        result = gen_reg_rtx (insn_mode);
  
      arg1_rtx = get_memory_rtx (arg1);
      arg2_rtx = get_memory_rtx (arg2);
      arg3_rtx = expand_expr (len, NULL_RTX, VOIDmode, 0);
  #ifdef HAVE_cmpmemsi
      if (HAVE_cmpmemsi)
        insn = gen_cmpmemsi (result, arg1_rtx, arg2_rtx, arg3_rtx,
--- 3330,3350 ----
      /* Make a place to write the result of the instruction.  */
      result = target;
      if (! (result != 0
! 	   && REG_P (result) && GET_MODE (result) == insn_mode
  	   && REGNO (result) >= FIRST_PSEUDO_REGISTER))
        result = gen_reg_rtx (insn_mode);
  
      arg1_rtx = get_memory_rtx (arg1);
      arg2_rtx = get_memory_rtx (arg2);
      arg3_rtx = expand_expr (len, NULL_RTX, VOIDmode, 0);
+ 
+     /* Set MEM_SIZE as appropriate.  */
+     if (GET_CODE (arg3_rtx) == CONST_INT)
+       {
+ 	set_mem_size (arg1_rtx, arg3_rtx);
+ 	set_mem_size (arg2_rtx, arg3_rtx);
+       }
+ 
  #ifdef HAVE_cmpmemsi
      if (HAVE_cmpmemsi)
        insn = gen_cmpmemsi (result, arg1_rtx, arg2_rtx, arg3_rtx,
*************** expand_builtin_memcmp (tree exp ATTRIBUT
*** 3227,3233 ****
  			   GEN_INT (MIN (arg1_align, arg2_align)));
      else
  #endif
!       abort ();
  
      if (insn)
        emit_insn (insn);
--- 3357,3363 ----
  			   GEN_INT (MIN (arg1_align, arg2_align)));
      else
  #endif
!       gcc_unreachable ();
  
      if (insn)
        emit_insn (insn);
*************** expand_builtin_memcmp (tree exp ATTRIBUT
*** 3237,3243 ****
  			       XEXP (arg1_rtx, 0), Pmode,
  			       XEXP (arg2_rtx, 0), Pmode,
  			       convert_to_mode (TYPE_MODE (sizetype), arg3_rtx,
! 						TREE_UNSIGNED (sizetype)),
  			       TYPE_MODE (sizetype));
  
      /* Return the value in the proper mode for this function.  */
--- 3367,3373 ----
  			       XEXP (arg1_rtx, 0), Pmode,
  			       XEXP (arg2_rtx, 0), Pmode,
  			       convert_to_mode (TYPE_MODE (sizetype), arg3_rtx,
! 						TYPE_UNSIGNED (sizetype)),
  			       TYPE_MODE (sizetype));
  
      /* Return the value in the proper mode for this function.  */
*************** static rtx
*** 3265,3313 ****
  expand_builtin_strcmp (tree exp, rtx target, enum machine_mode mode)
  {
    tree arglist = TREE_OPERAND (exp, 1);
-   tree arg1, arg2;
-   const char *p1, *p2;
  
    if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
      return 0;
! 
!   arg1 = TREE_VALUE (arglist);
!   arg2 = TREE_VALUE (TREE_CHAIN (arglist));
! 
!   /* If both arguments are equal (and not volatile), return zero.  */
!   if (operand_equal_p (arg1, arg2, 0))
!     return const0_rtx;
! 
!   p1 = c_getstr (arg1);
!   p2 = c_getstr (arg2);
! 
!   if (p1 && p2)
!     {
!       const int i = strcmp (p1, p2);
!       return (i < 0 ? constm1_rtx : (i > 0 ? const1_rtx : const0_rtx));
!     }
! 
!   /* If either arg is "", return an expression corresponding to
!      (*(const unsigned char*)arg1 - (const unsigned char*)arg2).  */
!   if ((p1 && *p1 == '\0') || (p2 && *p2 == '\0'))
      {
!       tree cst_uchar_node = build_type_variant (unsigned_char_type_node, 1, 0);
!       tree cst_uchar_ptr_node = build_pointer_type (cst_uchar_node);
!       tree ind1 =
! 	fold (build1 (CONVERT_EXPR, integer_type_node,
! 		      build1 (INDIRECT_REF, cst_uchar_node,
! 			      build1 (NOP_EXPR, cst_uchar_ptr_node, arg1))));
!       tree ind2 =
! 	fold (build1 (CONVERT_EXPR, integer_type_node,
! 		      build1 (INDIRECT_REF, cst_uchar_node,
! 			      build1 (NOP_EXPR, cst_uchar_ptr_node, arg2))));
!       tree result = fold (build (MINUS_EXPR, integer_type_node, ind1, ind2));
!       return expand_expr (result, target, mode, EXPAND_NORMAL);
      }
  
  #ifdef HAVE_cmpstrsi
    if (HAVE_cmpstrsi)
    {
      tree len, len1, len2;
      rtx arg1_rtx, arg2_rtx, arg3_rtx;
      rtx result, insn;
--- 3395,3415 ----
  expand_builtin_strcmp (tree exp, rtx target, enum machine_mode mode)
  {
    tree arglist = TREE_OPERAND (exp, 1);
  
    if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
      return 0;
!   else
      {
!       tree result = fold_builtin_strcmp (arglist);
!       if (result)
! 	return expand_expr (result, target, mode, EXPAND_NORMAL);
      }
  
  #ifdef HAVE_cmpstrsi
    if (HAVE_cmpstrsi)
    {
+     tree arg1 = TREE_VALUE (arglist);
+     tree arg2 = TREE_VALUE (TREE_CHAIN (arglist));
      tree len, len1, len2;
      rtx arg1_rtx, arg2_rtx, arg3_rtx;
      rtx result, insn;
*************** expand_builtin_strcmp (tree exp, rtx tar
*** 3363,3375 ****
      /* Make a place to write the result of the instruction.  */
      result = target;
      if (! (result != 0
! 	   && GET_CODE (result) == REG && GET_MODE (result) == insn_mode
  	   && REGNO (result) >= FIRST_PSEUDO_REGISTER))
        result = gen_reg_rtx (insn_mode);
  
      /* Stabilize the arguments in case gen_cmpstrsi fails.  */
!     arg1 = save_expr (arg1);
!     arg2 = save_expr (arg2);
  
      arg1_rtx = get_memory_rtx (arg1);
      arg2_rtx = get_memory_rtx (arg2);
--- 3465,3477 ----
      /* Make a place to write the result of the instruction.  */
      result = target;
      if (! (result != 0
! 	   && REG_P (result) && GET_MODE (result) == insn_mode
  	   && REGNO (result) >= FIRST_PSEUDO_REGISTER))
        result = gen_reg_rtx (insn_mode);
  
      /* Stabilize the arguments in case gen_cmpstrsi fails.  */
!     arg1 = builtin_save_expr (arg1);
!     arg2 = builtin_save_expr (arg2);
  
      arg1_rtx = get_memory_rtx (arg1);
      arg2_rtx = get_memory_rtx (arg2);
*************** static rtx
*** 3410,3473 ****
  expand_builtin_strncmp (tree exp, rtx target, enum machine_mode mode)
  {
    tree arglist = TREE_OPERAND (exp, 1);
-   tree arg1, arg2, arg3;
-   const char *p1, *p2;
  
    if (!validate_arglist (arglist,
  			 POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
      return 0;
! 
!   arg1 = TREE_VALUE (arglist);
!   arg2 = TREE_VALUE (TREE_CHAIN (arglist));
!   arg3 = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist)));
! 
!   /* If the len parameter is zero, return zero.  */
!   if (integer_zerop (arg3))
!     {
!       /* Evaluate and ignore arg1 and arg2 in case they have
! 	 side-effects.  */
!       expand_expr (arg1, const0_rtx, VOIDmode, EXPAND_NORMAL);
!       expand_expr (arg2, const0_rtx, VOIDmode, EXPAND_NORMAL);
!       return const0_rtx;
!     }
! 
!   /* If arg1 and arg2 are equal (and not volatile), return zero.  */
!   if (operand_equal_p (arg1, arg2, 0))
!     {
!       /* Evaluate and ignore arg3 in case it has side-effects.  */
!       expand_expr (arg3, const0_rtx, VOIDmode, EXPAND_NORMAL);
!       return const0_rtx;
!     }
! 
!   p1 = c_getstr (arg1);
!   p2 = c_getstr (arg2);
! 
!   /* If all arguments are constant, evaluate at compile-time.  */
!   if (host_integerp (arg3, 1) && p1 && p2)
!     {
!       const int r = strncmp (p1, p2, tree_low_cst (arg3, 1));
!       return (r < 0 ? constm1_rtx : (r > 0 ? const1_rtx : const0_rtx));
!     }
! 
!   /* If len == 1 or (either string parameter is "" and (len >= 1)),
!       return (*(const u_char*)arg1 - *(const u_char*)arg2).  */
!   if (host_integerp (arg3, 1)
!       && (tree_low_cst (arg3, 1) == 1
! 	  || (tree_low_cst (arg3, 1) > 1
! 	      && ((p1 && *p1 == '\0') || (p2 && *p2 == '\0')))))
      {
!       tree cst_uchar_node = build_type_variant (unsigned_char_type_node, 1, 0);
!       tree cst_uchar_ptr_node = build_pointer_type (cst_uchar_node);
!       tree ind1 =
! 	fold (build1 (CONVERT_EXPR, integer_type_node,
! 		      build1 (INDIRECT_REF, cst_uchar_node,
! 			      build1 (NOP_EXPR, cst_uchar_ptr_node, arg1))));
!       tree ind2 =
! 	fold (build1 (CONVERT_EXPR, integer_type_node,
! 		      build1 (INDIRECT_REF, cst_uchar_node,
! 			      build1 (NOP_EXPR, cst_uchar_ptr_node, arg2))));
!       tree result = fold (build (MINUS_EXPR, integer_type_node, ind1, ind2));
!       return expand_expr (result, target, mode, EXPAND_NORMAL);
      }
  
    /* If c_strlen can determine an expression for one of the string
--- 3512,3526 ----
  expand_builtin_strncmp (tree exp, rtx target, enum machine_mode mode)
  {
    tree arglist = TREE_OPERAND (exp, 1);
  
    if (!validate_arglist (arglist,
  			 POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
      return 0;
!   else
      {
!       tree result = fold_builtin_strncmp (arglist);
!       if (result)
! 	return expand_expr (result, target, mode, EXPAND_NORMAL);
      }
  
    /* If c_strlen can determine an expression for one of the string
*************** expand_builtin_strncmp (tree exp, rtx ta
*** 3476,3481 ****
--- 3529,3537 ----
  #ifdef HAVE_cmpstrsi
    if (HAVE_cmpstrsi)
    {
+     tree arg1 = TREE_VALUE (arglist);
+     tree arg2 = TREE_VALUE (TREE_CHAIN (arglist));
+     tree arg3 = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist)));
      tree len, len1, len2;
      rtx arg1_rtx, arg2_rtx, arg3_rtx;
      rtx result, insn;
*************** expand_builtin_strncmp (tree exp, rtx ta
*** 3525,3531 ****
        return 0;
  
      /* The actual new length parameter is MIN(len,arg3).  */
!     len = fold (build (MIN_EXPR, TREE_TYPE (len), len, arg3));
  
      /* If we don't have POINTER_TYPE, call the function.  */
      if (arg1_align == 0 || arg2_align == 0)
--- 3581,3588 ----
        return 0;
  
      /* The actual new length parameter is MIN(len,arg3).  */
!     len = fold (build2 (MIN_EXPR, TREE_TYPE (len), len,
! 			fold_convert (TREE_TYPE (len), arg3)));
  
      /* If we don't have POINTER_TYPE, call the function.  */
      if (arg1_align == 0 || arg2_align == 0)
*************** expand_builtin_strncmp (tree exp, rtx ta
*** 3534,3547 ****
      /* Make a place to write the result of the instruction.  */
      result = target;
      if (! (result != 0
! 	   && GET_CODE (result) == REG && GET_MODE (result) == insn_mode
  	   && REGNO (result) >= FIRST_PSEUDO_REGISTER))
        result = gen_reg_rtx (insn_mode);
  
      /* Stabilize the arguments in case gen_cmpstrsi fails.  */
!     arg1 = save_expr (arg1);
!     arg2 = save_expr (arg2);
!     len = save_expr (len);
  
      arg1_rtx = get_memory_rtx (arg1);
      arg2_rtx = get_memory_rtx (arg2);
--- 3591,3604 ----
      /* Make a place to write the result of the instruction.  */
      result = target;
      if (! (result != 0
! 	   && REG_P (result) && GET_MODE (result) == insn_mode
  	   && REGNO (result) >= FIRST_PSEUDO_REGISTER))
        result = gen_reg_rtx (insn_mode);
  
      /* Stabilize the arguments in case gen_cmpstrsi fails.  */
!     arg1 = builtin_save_expr (arg1);
!     arg2 = builtin_save_expr (arg2);
!     len = builtin_save_expr (len);
  
      arg1_rtx = get_memory_rtx (arg1);
      arg2_rtx = get_memory_rtx (arg2);
*************** expand_builtin_strncmp (tree exp, rtx ta
*** 3580,3586 ****
     otherwise try to get the result in TARGET, if convenient.  */
  
  static rtx
! expand_builtin_strcat (tree arglist, rtx target, enum machine_mode mode)
  {
    if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
      return 0;
--- 3637,3643 ----
     otherwise try to get the result in TARGET, if convenient.  */
  
  static rtx
! expand_builtin_strcat (tree arglist, tree type, rtx target, enum machine_mode mode)
  {
    if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
      return 0;
*************** expand_builtin_strcat (tree arglist, rtx
*** 3601,3607 ****
                   pieces into (dst + strlen(dst)).  */
  	      tree newdst, arglist,
  		strlen_fn = implicit_built_in_decls[BUILT_IN_STRLEN];
! 	      
  	      /* This is the length argument.  */
  	      arglist = build_tree_list (NULL_TREE,
  					 fold (size_binop (PLUS_EXPR,
--- 3658,3664 ----
                   pieces into (dst + strlen(dst)).  */
  	      tree newdst, arglist,
  		strlen_fn = implicit_built_in_decls[BUILT_IN_STRLEN];
! 
  	      /* This is the length argument.  */
  	      arglist = build_tree_list (NULL_TREE,
  					 fold (size_binop (PLUS_EXPR,
*************** expand_builtin_strcat (tree arglist, rtx
*** 3609,3617 ****
  							   ssize_int (1))));
  	      /* Prepend src argument.  */
  	      arglist = tree_cons (NULL_TREE, src, arglist);
! 	      
  	      /* We're going to use dst more than once.  */
! 	      dst = save_expr (dst);
  
  	      /* Create strlen (dst).  */
  	      newdst =
--- 3666,3674 ----
  							   ssize_int (1))));
  	      /* Prepend src argument.  */
  	      arglist = tree_cons (NULL_TREE, src, arglist);
! 
  	      /* We're going to use dst more than once.  */
! 	      dst = builtin_save_expr (dst);
  
  	      /* Create strlen (dst).  */
  	      newdst =
*************** expand_builtin_strcat (tree arglist, rtx
*** 3619,3636 ****
  						build_tree_list (NULL_TREE,
  								 dst)));
  	      /* Create (dst + strlen (dst)).  */
! 	      newdst = fold (build (PLUS_EXPR, TREE_TYPE (dst), dst, newdst));
  
  	      /* Prepend the new dst argument.  */
  	      arglist = tree_cons (NULL_TREE, newdst, arglist);
! 	      
  	      /* We don't want to get turned into a memcpy if the
                   target is const0_rtx, i.e. when the return value
                   isn't used.  That would produce pessimized code so
                   pass in a target of zero, it should never actually be
                   used.  If this was successful return the original
                   dst, not the result of mempcpy.  */
! 	      if (expand_builtin_mempcpy (arglist, /*target=*/0, mode, /*endp=*/0))
  		return expand_expr (dst, target, mode, EXPAND_NORMAL);
  	      else
  		return 0;
--- 3676,3693 ----
  						build_tree_list (NULL_TREE,
  								 dst)));
  	      /* Create (dst + strlen (dst)).  */
! 	      newdst = fold (build2 (PLUS_EXPR, TREE_TYPE (dst), dst, newdst));
  
  	      /* Prepend the new dst argument.  */
  	      arglist = tree_cons (NULL_TREE, newdst, arglist);
! 
  	      /* We don't want to get turned into a memcpy if the
                   target is const0_rtx, i.e. when the return value
                   isn't used.  That would produce pessimized code so
                   pass in a target of zero, it should never actually be
                   used.  If this was successful return the original
                   dst, not the result of mempcpy.  */
! 	      if (expand_builtin_mempcpy (arglist, type, /*target=*/0, mode, /*endp=*/0))
  		return expand_expr (dst, target, mode, EXPAND_NORMAL);
  	      else
  		return 0;
*************** expand_builtin_strcat (tree arglist, rtx
*** 3648,3693 ****
  static rtx
  expand_builtin_strncat (tree arglist, rtx target, enum machine_mode mode)
  {
!   if (!validate_arglist (arglist,
! 			 POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
!     return 0;
!   else
      {
!       tree dst = TREE_VALUE (arglist),
! 	src = TREE_VALUE (TREE_CHAIN (arglist)),
! 	len = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist)));
!       const char *p = c_getstr (src);
! 
!       /* If the requested length is zero, or the src parameter string
!           length is zero, return the dst parameter.  */
!       if (integer_zerop (len) || (p && *p == '\0'))
! 	{
! 	  /* Evaluate and ignore the src and len parameters in case
! 	     they have side-effects.  */
! 	  expand_expr (src, const0_rtx, VOIDmode, EXPAND_NORMAL);
! 	  expand_expr (len, const0_rtx, VOIDmode, EXPAND_NORMAL);
! 	  return expand_expr (dst, target, mode, EXPAND_NORMAL);
! 	}
! 
!       /* If the requested len is greater than or equal to the string
!          length, call strcat.  */
!       if (TREE_CODE (len) == INTEGER_CST && p
! 	  && compare_tree_int (len, strlen (p)) >= 0)
! 	{
! 	  tree newarglist
! 	    = tree_cons (NULL_TREE, dst, build_tree_list (NULL_TREE, src));
! 	  tree fn = implicit_built_in_decls[BUILT_IN_STRCAT];
! 
! 	  /* If the replacement _DECL isn't initialized, don't do the
! 	     transformation.  */
! 	  if (!fn)
! 	    return 0;
! 
! 	  return expand_expr (build_function_call_expr (fn, newarglist),
! 			      target, mode, EXPAND_NORMAL);
! 	}
!       return 0;
      }
  }
  
  /* Expand expression EXP, which is a call to the strspn builtin.
--- 3705,3718 ----
  static rtx
  expand_builtin_strncat (tree arglist, rtx target, enum machine_mode mode)
  {
!   if (validate_arglist (arglist,
! 			POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
      {
!       tree result = fold_builtin_strncat (arglist);
!       if (result)
! 	return expand_expr (result, target, mode, EXPAND_NORMAL);
      }
+   return 0;
  }
  
  /* Expand expression EXP, which is a call to the strspn builtin.
*************** expand_builtin_strncat (tree arglist, rt
*** 3697,3727 ****
  static rtx
  expand_builtin_strspn (tree arglist, rtx target, enum machine_mode mode)
  {
!   if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
!     return 0;
!   else
      {
!       tree s1 = TREE_VALUE (arglist), s2 = TREE_VALUE (TREE_CHAIN (arglist));
!       const char *p1 = c_getstr (s1), *p2 = c_getstr (s2);
! 
!       /* If both arguments are constants, evaluate at compile-time.  */
!       if (p1 && p2)
! 	{
! 	  const size_t r = strspn (p1, p2);
! 	  return expand_expr (size_int (r), target, mode, EXPAND_NORMAL);
! 	}
! 
!       /* If either argument is "", return 0.  */
!       if ((p1 && *p1 == '\0') || (p2 && *p2 == '\0'))
! 	{
! 	  /* Evaluate and ignore both arguments in case either one has
! 	     side-effects.  */
! 	  expand_expr (s1, const0_rtx, VOIDmode, EXPAND_NORMAL);
! 	  expand_expr (s2, const0_rtx, VOIDmode, EXPAND_NORMAL);
! 	  return const0_rtx;
! 	}
!       return 0;
      }
  }
  
  /* Expand expression EXP, which is a call to the strcspn builtin.
--- 3722,3734 ----
  static rtx
  expand_builtin_strspn (tree arglist, rtx target, enum machine_mode mode)
  {
!   if (validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
      {
!       tree result = fold_builtin_strspn (arglist);
!       if (result)
! 	return expand_expr (result, target, mode, EXPAND_NORMAL);
      }
+   return 0;
  }
  
  /* Expand expression EXP, which is a call to the strcspn builtin.
*************** expand_builtin_strspn (tree arglist, rtx
*** 3731,3775 ****
  static rtx
  expand_builtin_strcspn (tree arglist, rtx target, enum machine_mode mode)
  {
!   if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
!     return 0;
!   else
      {
!       tree s1 = TREE_VALUE (arglist), s2 = TREE_VALUE (TREE_CHAIN (arglist));
!       const char *p1 = c_getstr (s1), *p2 = c_getstr (s2);
! 
!       /* If both arguments are constants, evaluate at compile-time.  */
!       if (p1 && p2)
! 	{
! 	  const size_t r = strcspn (p1, p2);
! 	  return expand_expr (size_int (r), target, mode, EXPAND_NORMAL);
! 	}
! 
!       /* If the first argument is "", return 0.  */
!       if (p1 && *p1 == '\0')
! 	{
! 	  /* Evaluate and ignore argument s2 in case it has
! 	     side-effects.  */
! 	  expand_expr (s2, const0_rtx, VOIDmode, EXPAND_NORMAL);
! 	  return const0_rtx;
! 	}
! 
!       /* If the second argument is "", return __builtin_strlen(s1).  */
!       if (p2 && *p2 == '\0')
! 	{
! 	  tree newarglist = build_tree_list (NULL_TREE, s1),
! 	    fn = implicit_built_in_decls[BUILT_IN_STRLEN];
! 
! 	  /* If the replacement _DECL isn't initialized, don't do the
! 	     transformation.  */
! 	  if (!fn)
! 	    return 0;
! 
! 	  return expand_expr (build_function_call_expr (fn, newarglist),
! 			      target, mode, EXPAND_NORMAL);
! 	}
!       return 0;
      }
  }
  
  /* Expand a call to __builtin_saveregs, generating the result in TARGET,
--- 3738,3750 ----
  static rtx
  expand_builtin_strcspn (tree arglist, rtx target, enum machine_mode mode)
  {
!   if (validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
      {
!       tree result = fold_builtin_strcspn (arglist);
!       if (result)
! 	return expand_expr (result, target, mode, EXPAND_NORMAL);
      }
+   return 0;
  }
  
  /* Expand a call to __builtin_saveregs, generating the result in TARGET,
*************** expand_builtin_saveregs (void)
*** 3803,3809 ****
       is inside a start_sequence, make the outer-level insn chain current, so
       the code is placed at the start of the function.  */
    push_topmost_sequence ();
!   emit_insn_after (seq, get_insns ());
    pop_topmost_sequence ();
  
    return val;
--- 3778,3784 ----
       is inside a start_sequence, make the outer-level insn chain current, so
       the code is placed at the start of the function.  */
    push_topmost_sequence ();
!   emit_insn_after (seq, entry_of_function ());
    pop_topmost_sequence ();
  
    return val;
*************** expand_builtin_args_info (tree arglist)
*** 3819,3884 ****
    int nwords = sizeof (CUMULATIVE_ARGS) / sizeof (int);
    int *word_ptr = (int *) &current_function_args_info;
  
!   if (sizeof (CUMULATIVE_ARGS) % sizeof (int) != 0)
!     abort ();
  
    if (arglist != 0)
      {
        if (!host_integerp (TREE_VALUE (arglist), 0))
! 	error ("argument of `__builtin_args_info' must be constant");
        else
  	{
  	  HOST_WIDE_INT wordnum = tree_low_cst (TREE_VALUE (arglist), 0);
  
  	  if (wordnum < 0 || wordnum >= nwords)
! 	    error ("argument of `__builtin_args_info' out of range");
  	  else
  	    return GEN_INT (word_ptr[wordnum]);
  	}
      }
    else
!     error ("missing argument in `__builtin_args_info'");
  
    return const0_rtx;
  }
  
! /* Expand ARGLIST, from a call to __builtin_next_arg.  */
  
  static rtx
! expand_builtin_next_arg (tree arglist)
  {
!   tree fntype = TREE_TYPE (current_function_decl);
! 
!   if (TYPE_ARG_TYPES (fntype) == 0
!       || (TREE_VALUE (tree_last (TYPE_ARG_TYPES (fntype)))
! 	  == void_type_node))
!     {
!       error ("`va_start' used in function with fixed args");
!       return const0_rtx;
!     }
! 
!   if (arglist)
!     {
!       tree last_parm = tree_last (DECL_ARGUMENTS (current_function_decl));
!       tree arg = TREE_VALUE (arglist);
! 
!       /* Strip off all nops for the sake of the comparison.  This
! 	 is not quite the same as STRIP_NOPS.  It does more.
! 	 We must also strip off INDIRECT_EXPR for C++ reference
! 	 parameters.  */
!       while (TREE_CODE (arg) == NOP_EXPR
! 	     || TREE_CODE (arg) == CONVERT_EXPR
! 	     || TREE_CODE (arg) == NON_LVALUE_EXPR
! 	     || TREE_CODE (arg) == INDIRECT_REF)
! 	arg = TREE_OPERAND (arg, 0);
!       if (arg != last_parm)
! 	warning ("second parameter of `va_start' not last named argument");
!     }
!   else
!     /* Evidently an out of date version of <stdarg.h>; can't validate
!        va_start's second argument, but can still work as intended.  */
!     warning ("`__builtin_next_arg' called without an argument");
! 
    return expand_binop (Pmode, add_optab,
  		       current_function_internal_arg_pointer,
  		       current_function_arg_offset_rtx,
--- 3794,3828 ----
    int nwords = sizeof (CUMULATIVE_ARGS) / sizeof (int);
    int *word_ptr = (int *) &current_function_args_info;
  
!   gcc_assert (sizeof (CUMULATIVE_ARGS) % sizeof (int) == 0);
  
    if (arglist != 0)
      {
        if (!host_integerp (TREE_VALUE (arglist), 0))
! 	error ("argument of %<__builtin_args_info%> must be constant");
        else
  	{
  	  HOST_WIDE_INT wordnum = tree_low_cst (TREE_VALUE (arglist), 0);
  
  	  if (wordnum < 0 || wordnum >= nwords)
! 	    error ("argument of %<__builtin_args_info%> out of range");
  	  else
  	    return GEN_INT (word_ptr[wordnum]);
  	}
      }
    else
!     error ("missing argument in %<__builtin_args_info%>");
  
    return const0_rtx;
  }
  
! /* Expand a call to __builtin_next_arg.  */
  
  static rtx
! expand_builtin_next_arg (void)
  {
!   /* Checking arguments is already done in fold_builtin_next_arg
!      that must be called before this function.  */
    return expand_binop (Pmode, add_optab,
  		       current_function_internal_arg_pointer,
  		       current_function_arg_offset_rtx,
*************** stabilize_va_list (tree valist, int need
*** 3903,3912 ****
        if (TREE_CODE (TREE_TYPE (valist)) == ARRAY_TYPE)
  	{
  	  tree p1 = build_pointer_type (TREE_TYPE (va_list_type_node));
! 	  tree p2 = build_pointer_type (va_list_type_node);
! 
! 	  valist = build1 (ADDR_EXPR, p2, valist);
! 	  valist = fold (build1 (NOP_EXPR, p1, valist));
  	}
      }
    else
--- 3847,3853 ----
        if (TREE_CODE (TREE_TYPE (valist)) == ARRAY_TYPE)
  	{
  	  tree p1 = build_pointer_type (TREE_TYPE (va_list_type_node));
! 	  valist = build_fold_addr_expr_with_type (valist, p1);
  	}
      }
    else
*************** stabilize_va_list (tree valist, int need
*** 3925,3932 ****
  
        if (TREE_SIDE_EFFECTS (valist))
  	valist = save_expr (valist);
!       valist = fold (build1 (INDIRECT_REF, TREE_TYPE (TREE_TYPE (valist)),
! 			     valist));
      }
  
    return valist;
--- 3866,3872 ----
  
        if (TREE_SIDE_EFFECTS (valist))
  	valist = save_expr (valist);
!       valist = build_fold_indirect_ref (valist);
      }
  
    return valist;
*************** std_expand_builtin_va_start (tree valist
*** 3948,3955 ****
  {
    tree t;
  
!   t = build (MODIFY_EXPR, TREE_TYPE (valist), valist,
! 	     make_tree (ptr_type_node, nextarg));
    TREE_SIDE_EFFECTS (t) = 1;
  
    expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
--- 3888,3895 ----
  {
    tree t;
  
!   t = build2 (MODIFY_EXPR, TREE_TYPE (valist), valist,
! 	      make_tree (ptr_type_node, nextarg));
    TREE_SIDE_EFFECTS (t) = 1;
  
    expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
*************** expand_builtin_va_start (tree arglist)
*** 3965,3974 ****
  
    chain = TREE_CHAIN (arglist);
  
!   if (TREE_CHAIN (chain))
!     error ("too many arguments to function `va_start'");
  
!   nextarg = expand_builtin_next_arg (chain);
    valist = stabilize_va_list (TREE_VALUE (arglist), 1);
  
  #ifdef EXPAND_BUILTIN_VA_START
--- 3905,3920 ----
  
    chain = TREE_CHAIN (arglist);
  
!   if (!chain)
!     {
!       error ("too few arguments to function %<va_start%>");
!       return const0_rtx;
!     }
  
!   if (fold_builtin_next_arg (chain))
!     return const0_rtx;
! 
!   nextarg = expand_builtin_next_arg ();
    valist = stabilize_va_list (TREE_VALUE (arglist), 1);
  
  #ifdef EXPAND_BUILTIN_VA_START
*************** expand_builtin_va_start (tree arglist)
*** 3983,4078 ****
  /* The "standard" implementation of va_arg: read the value from the
     current (padded) address and increment by the (padded) size.  */
  
! rtx
! std_expand_builtin_va_arg (tree valist, tree type)
  {
!   tree addr_tree, t, type_size = NULL;
!   tree align, alignm1;
!   tree rounded_size;
!   rtx addr;
!   HOST_WIDE_INT boundary;
  
!   /* Compute the rounded size of the type.  */
!   align = size_int (PARM_BOUNDARY / BITS_PER_UNIT);
!   alignm1 = size_int (PARM_BOUNDARY / BITS_PER_UNIT - 1);
!   boundary = FUNCTION_ARG_BOUNDARY (TYPE_MODE (type), type);
  
    /* va_list pointer is aligned to PARM_BOUNDARY.  If argument actually
       requires greater alignment, we must perform dynamic alignment.  */
! 
!   if (boundary > PARM_BOUNDARY)
      {
!       if (!PAD_VARARGS_DOWN)
! 	{
! 	  t = build (MODIFY_EXPR, TREE_TYPE (valist), valist,
! 		     build (PLUS_EXPR, TREE_TYPE (valist), valist,
! 			    build_int_2 (boundary / BITS_PER_UNIT - 1, 0)));
! 	  TREE_SIDE_EFFECTS (t) = 1;
! 	  expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
! 	}
!       t = build (MODIFY_EXPR, TREE_TYPE (valist), valist,
! 		 build (BIT_AND_EXPR, TREE_TYPE (valist), valist,
! 			build_int_2 (~(boundary / BITS_PER_UNIT - 1), -1)));
!       TREE_SIDE_EFFECTS (t) = 1;
!       expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
      }
-   if (type == error_mark_node
-       || (type_size = TYPE_SIZE_UNIT (TYPE_MAIN_VARIANT (type))) == NULL
-       || TREE_OVERFLOW (type_size))
-     rounded_size = size_zero_node;
    else
!     rounded_size = fold (build (MULT_EXPR, sizetype,
! 				fold (build (TRUNC_DIV_EXPR, sizetype,
! 					     fold (build (PLUS_EXPR, sizetype,
! 							  type_size, alignm1)),
! 					     align)),
! 				align));
  
!   /* Get AP.  */
!   addr_tree = valist;
!   if (PAD_VARARGS_DOWN && ! integer_zerop (rounded_size))
      {
!       /* Small args are padded downward.  */
!       addr_tree = fold (build (PLUS_EXPR, TREE_TYPE (addr_tree), addr_tree,
! 			       fold (build (COND_EXPR, sizetype,
! 					    fold (build (GT_EXPR, sizetype,
! 							 rounded_size,
! 							 align)),
! 					    size_zero_node,
! 					    fold (build (MINUS_EXPR, sizetype,
! 							 rounded_size,
! 							 type_size))))));
      }
  
!   addr = expand_expr (addr_tree, NULL_RTX, Pmode, EXPAND_NORMAL);
!   addr = copy_to_reg (addr);
  
!   /* Compute new value for AP.  */
!   if (! integer_zerop (rounded_size))
      {
!       t = build (MODIFY_EXPR, TREE_TYPE (valist), valist,
! 		 build (PLUS_EXPR, TREE_TYPE (valist), valist,
! 			rounded_size));
!       TREE_SIDE_EFFECTS (t) = 1;
!       expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
      }
  
    return addr;
  }
  
! /* Expand __builtin_va_arg, which is not really a builtin function, but
!    a very special sort of operator.  */
  
! rtx
! expand_builtin_va_arg (tree valist, tree type)
  {
-   rtx addr, result;
    tree promoted_type, want_va_type, have_va_type;
  
    /* Verify that valist is of the proper type.  */
- 
    want_va_type = va_list_type_node;
    have_va_type = TREE_TYPE (valist);
    if (TREE_CODE (want_va_type) == ARRAY_TYPE)
      {
        /* If va_list is an array type, the argument may have decayed
--- 3929,4059 ----
  /* The "standard" implementation of va_arg: read the value from the
     current (padded) address and increment by the (padded) size.  */
  
! tree
! std_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, tree *post_p)
  {
!   tree addr, t, type_size, rounded_size, valist_tmp;
!   unsigned HOST_WIDE_INT align, boundary;
!   bool indirect;
  
! #ifdef ARGS_GROW_DOWNWARD
!   /* All of the alignment and movement below is for args-grow-up machines.
!      As of 2004, there are only 3 ARGS_GROW_DOWNWARD targets, and they all
!      implement their own specialized gimplify_va_arg_expr routines.  */
!   gcc_unreachable ();
! #endif
! 
!   indirect = pass_by_reference (NULL, TYPE_MODE (type), type, false);
!   if (indirect)
!     type = build_pointer_type (type);
! 
!   align = PARM_BOUNDARY / BITS_PER_UNIT;
!   boundary = FUNCTION_ARG_BOUNDARY (TYPE_MODE (type), type) / BITS_PER_UNIT;
! 
!   /* Hoist the valist value into a temporary for the moment.  */
!   valist_tmp = get_initialized_tmp_var (valist, pre_p, NULL);
  
    /* va_list pointer is aligned to PARM_BOUNDARY.  If argument actually
       requires greater alignment, we must perform dynamic alignment.  */
!   if (boundary > align)
      {
!       t = fold_convert (TREE_TYPE (valist), size_int (boundary - 1));
!       t = build2 (MODIFY_EXPR, TREE_TYPE (valist), valist_tmp,
! 		  build2 (PLUS_EXPR, TREE_TYPE (valist), valist_tmp, t));
!       gimplify_and_add (t, pre_p);
! 
!       t = fold_convert (TREE_TYPE (valist), size_int (-boundary));
!       t = build2 (MODIFY_EXPR, TREE_TYPE (valist), valist_tmp,
! 		  build2 (BIT_AND_EXPR, TREE_TYPE (valist), valist_tmp, t));
!       gimplify_and_add (t, pre_p);
      }
    else
!     boundary = align;
  
!   /* If the actual alignment is less than the alignment of the type,
!      adjust the type accordingly so that we don't assume strict alignment
!      when deferencing the pointer.  */
!   boundary *= BITS_PER_UNIT;
!   if (boundary < TYPE_ALIGN (type))
      {
!       type = build_variant_type_copy (type);
!       TYPE_ALIGN (type) = boundary;
      }
  
!   /* Compute the rounded size of the type.  */
!   type_size = size_in_bytes (type);
!   rounded_size = round_up (type_size, align);
  
!   /* Reduce rounded_size so it's sharable with the postqueue.  */
!   gimplify_expr (&rounded_size, pre_p, post_p, is_gimple_val, fb_rvalue);
! 
!   /* Get AP.  */
!   addr = valist_tmp;
!   if (PAD_VARARGS_DOWN && !integer_zerop (rounded_size))
      {
!       /* Small args are padded downward.  */
!       t = fold (build2 (GT_EXPR, sizetype, rounded_size, size_int (align)));
!       t = fold (build3 (COND_EXPR, sizetype, t, size_zero_node,
! 			size_binop (MINUS_EXPR, rounded_size, type_size)));
!       t = fold_convert (TREE_TYPE (addr), t);
!       addr = fold (build2 (PLUS_EXPR, TREE_TYPE (addr), addr, t));
      }
  
+   /* Compute new value for AP.  */
+   t = fold_convert (TREE_TYPE (valist), rounded_size);
+   t = build2 (PLUS_EXPR, TREE_TYPE (valist), valist_tmp, t);
+   t = build2 (MODIFY_EXPR, TREE_TYPE (valist), valist, t);
+   gimplify_and_add (t, pre_p);
+ 
+   addr = fold_convert (build_pointer_type (type), addr);
+ 
+   if (indirect)
+     addr = build_va_arg_indirect_ref (addr);
+ 
+   return build_va_arg_indirect_ref (addr);
+ }
+ 
+ /* Build an indirect-ref expression over the given TREE, which represents a
+    piece of a va_arg() expansion.  */
+ tree
+ build_va_arg_indirect_ref (tree addr)
+ {
+   addr = build_fold_indirect_ref (addr);
+ 
+   if (flag_mudflap) /* Don't instrument va_arg INDIRECT_REF.  */
+     mf_mark (addr);
+ 
    return addr;
  }
  
! /* Return a dummy expression of type TYPE in order to keep going after an
!    error.  */
  
! static tree
! dummy_object (tree type)
! {
!   tree t = convert (build_pointer_type (type), null_pointer_node);
!   return build1 (INDIRECT_REF, type, t);
! }
! 
! /* Gimplify __builtin_va_arg, aka VA_ARG_EXPR, which is not really a
!    builtin function, but a very special sort of operator.  */
! 
! enum gimplify_status
! gimplify_va_arg_expr (tree *expr_p, tree *pre_p, tree *post_p)
  {
    tree promoted_type, want_va_type, have_va_type;
+   tree valist = TREE_OPERAND (*expr_p, 0);
+   tree type = TREE_TYPE (*expr_p);
+   tree t;
  
    /* Verify that valist is of the proper type.  */
    want_va_type = va_list_type_node;
    have_va_type = TREE_TYPE (valist);
+ 
+   if (have_va_type == error_mark_node)
+     return GS_ERROR;
+ 
    if (TREE_CODE (want_va_type) == ARRAY_TYPE)
      {
        /* If va_list is an array type, the argument may have decayed
*************** expand_builtin_va_arg (tree valist, tree
*** 4080,4162 ****
           In that case, unwrap both types so that we can compare the
  	 underlying records.  */
        if (TREE_CODE (have_va_type) == ARRAY_TYPE
! 	  || TREE_CODE (have_va_type) == POINTER_TYPE)
  	{
  	  want_va_type = TREE_TYPE (want_va_type);
  	  have_va_type = TREE_TYPE (have_va_type);
  	}
      }
    if (TYPE_MAIN_VARIANT (want_va_type) != TYPE_MAIN_VARIANT (have_va_type))
      {
!       error ("first argument to `va_arg' not of type `va_list'");
!       addr = const0_rtx;
      }
  
    /* Generate a diagnostic for requesting data of a type that cannot
       be passed through `...' due to type promotion at the call site.  */
!   else if ((promoted_type = (*lang_hooks.types.type_promotes_to) (type))
  	   != type)
      {
-       const char *name = "<anonymous type>", *pname = 0;
        static bool gave_help;
  
-       if (TYPE_NAME (type))
- 	{
- 	  if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
- 	    name = IDENTIFIER_POINTER (TYPE_NAME (type));
- 	  else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
- 		   && DECL_NAME (TYPE_NAME (type)))
- 	    name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
- 	}
-       if (TYPE_NAME (promoted_type))
- 	{
- 	  if (TREE_CODE (TYPE_NAME (promoted_type)) == IDENTIFIER_NODE)
- 	    pname = IDENTIFIER_POINTER (TYPE_NAME (promoted_type));
- 	  else if (TREE_CODE (TYPE_NAME (promoted_type)) == TYPE_DECL
- 		   && DECL_NAME (TYPE_NAME (promoted_type)))
- 	    pname = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (promoted_type)));
- 	}
- 
        /* Unfortunately, this is merely undefined, rather than a constraint
  	 violation, so we cannot make this an error.  If this call is never
  	 executed, the program is still strictly conforming.  */
!       warning ("`%s' is promoted to `%s' when passed through `...'",
! 	       name, pname);
        if (! gave_help)
  	{
  	  gave_help = true;
! 	  warning ("(so you should pass `%s' not `%s' to `va_arg')",
! 		   pname, name);
  	}
  
        /* We can, however, treat "undefined" any way we please.
  	 Call abort to encourage the user to fix the program.  */
        inform ("if this code is reached, the program will abort");
!       expand_builtin_trap ();
  
        /* This is dead code, but go ahead and finish so that the
  	 mode of the result comes out right.  */
!       addr = const0_rtx;
      }
    else
      {
        /* Make it easier for the backends by protecting the valist argument
           from multiple evaluations.  */
!       valist = stabilize_va_list (valist, 0);
! 
! #ifdef EXPAND_BUILTIN_VA_ARG
!       addr = EXPAND_BUILTIN_VA_ARG (valist, type);
! #else
!       addr = std_expand_builtin_va_arg (valist, type);
! #endif
!     }
! 
!   addr = convert_memory_address (Pmode, addr);
  
!   result = gen_rtx_MEM (TYPE_MODE (type), addr);
!   set_mem_alias_set (result, get_varargs_alias_set ());
  
!   return result;
  }
  
  /* Expand ARGLIST, from a call to __builtin_va_end.  */
--- 4061,4137 ----
           In that case, unwrap both types so that we can compare the
  	 underlying records.  */
        if (TREE_CODE (have_va_type) == ARRAY_TYPE
! 	  || POINTER_TYPE_P (have_va_type))
  	{
  	  want_va_type = TREE_TYPE (want_va_type);
  	  have_va_type = TREE_TYPE (have_va_type);
  	}
      }
+ 
    if (TYPE_MAIN_VARIANT (want_va_type) != TYPE_MAIN_VARIANT (have_va_type))
      {
!       error ("first argument to %<va_arg%> not of type %<va_list%>");
!       return GS_ERROR;
      }
  
    /* Generate a diagnostic for requesting data of a type that cannot
       be passed through `...' due to type promotion at the call site.  */
!   else if ((promoted_type = lang_hooks.types.type_promotes_to (type))
  	   != type)
      {
        static bool gave_help;
  
        /* Unfortunately, this is merely undefined, rather than a constraint
  	 violation, so we cannot make this an error.  If this call is never
  	 executed, the program is still strictly conforming.  */
!       warning ("%qT is promoted to %qT when passed through %<...%>",
! 	       type, promoted_type);
        if (! gave_help)
  	{
  	  gave_help = true;
! 	  warning ("(so you should pass %qT not %qT to %<va_arg%>)",
! 		   promoted_type, type);
  	}
  
        /* We can, however, treat "undefined" any way we please.
  	 Call abort to encourage the user to fix the program.  */
        inform ("if this code is reached, the program will abort");
!       t = build_function_call_expr (implicit_built_in_decls[BUILT_IN_TRAP],
! 				    NULL);
!       append_to_statement_list (t, pre_p);
  
        /* This is dead code, but go ahead and finish so that the
  	 mode of the result comes out right.  */
!       *expr_p = dummy_object (type);
!       return GS_ALL_DONE;
      }
    else
      {
        /* Make it easier for the backends by protecting the valist argument
           from multiple evaluations.  */
!       if (TREE_CODE (va_list_type_node) == ARRAY_TYPE)
! 	{
! 	  /* For this case, the backends will be expecting a pointer to
! 	     TREE_TYPE (va_list_type_node), but it's possible we've
! 	     actually been given an array (an actual va_list_type_node).
! 	     So fix it.  */
! 	  if (TREE_CODE (TREE_TYPE (valist)) == ARRAY_TYPE)
! 	    {
! 	      tree p1 = build_pointer_type (TREE_TYPE (va_list_type_node));
! 	      valist = build_fold_addr_expr_with_type (valist, p1);
! 	    }
! 	  gimplify_expr (&valist, pre_p, post_p, is_gimple_val, fb_rvalue);
! 	}
!       else
! 	gimplify_expr (&valist, pre_p, post_p, is_gimple_min_lval, fb_lvalue);
  
!       if (!targetm.gimplify_va_arg_expr)
! 	/* Once most targets are converted this should abort.  */
! 	return GS_ALL_DONE;
  
!       *expr_p = targetm.gimplify_va_arg_expr (valist, type, pre_p, post_p);
!       return GS_OK;
!     }
  }
  
  /* Expand ARGLIST, from a call to __builtin_va_end.  */
*************** expand_builtin_va_copy (tree arglist)
*** 4191,4197 ****
  
    if (TREE_CODE (va_list_type_node) != ARRAY_TYPE)
      {
!       t = build (MODIFY_EXPR, va_list_type_node, dst, src);
        TREE_SIDE_EFFECTS (t) = 1;
        expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
      }
--- 4166,4172 ----
  
    if (TREE_CODE (va_list_type_node) != ARRAY_TYPE)
      {
!       t = build2 (MODIFY_EXPR, va_list_type_node, dst, src);
        TREE_SIDE_EFFECTS (t) = 1;
        expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
      }
*************** expand_builtin_frame_address (tree fndec
*** 4238,4262 ****
    else if (! host_integerp (TREE_VALUE (arglist), 1))
      {
        if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_FRAME_ADDRESS)
! 	error ("invalid arg to `__builtin_frame_address'");
        else
! 	error ("invalid arg to `__builtin_return_address'");
        return const0_rtx;
      }
    else
      {
        rtx tem
  	= expand_builtin_return_addr (DECL_FUNCTION_CODE (fndecl),
! 				      tree_low_cst (TREE_VALUE (arglist), 1),
! 				      hard_frame_pointer_rtx);
  
        /* Some ports cannot access arbitrary stack frames.  */
        if (tem == NULL)
  	{
  	  if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_FRAME_ADDRESS)
! 	    warning ("unsupported arg to `__builtin_frame_address'");
  	  else
! 	    warning ("unsupported arg to `__builtin_return_address'");
  	  return const0_rtx;
  	}
  
--- 4213,4236 ----
    else if (! host_integerp (TREE_VALUE (arglist), 1))
      {
        if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_FRAME_ADDRESS)
! 	error ("invalid argument to %<__builtin_frame_address%>");
        else
! 	error ("invalid argument to %<__builtin_return_address%>");
        return const0_rtx;
      }
    else
      {
        rtx tem
  	= expand_builtin_return_addr (DECL_FUNCTION_CODE (fndecl),
! 				      tree_low_cst (TREE_VALUE (arglist), 1));
  
        /* Some ports cannot access arbitrary stack frames.  */
        if (tem == NULL)
  	{
  	  if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_FRAME_ADDRESS)
! 	    warning ("unsupported argument to %<__builtin_frame_address%>");
  	  else
! 	    warning ("unsupported argument to %<__builtin_return_address%>");
  	  return const0_rtx;
  	}
  
*************** expand_builtin_frame_address (tree fndec
*** 4264,4270 ****
        if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_FRAME_ADDRESS)
  	return tem;
  
!       if (GET_CODE (tem) != REG
  	  && ! CONSTANT_P (tem))
  	tem = copy_to_mode_reg (Pmode, tem);
        return tem;
--- 4238,4244 ----
        if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_FRAME_ADDRESS)
  	return tem;
  
!       if (!REG_P (tem)
  	  && ! CONSTANT_P (tem))
  	tem = copy_to_mode_reg (Pmode, tem);
        return tem;
*************** expand_builtin_alloca (tree arglist, rtx
*** 4281,4286 ****
--- 4255,4266 ----
    rtx op0;
    rtx result;
  
+   /* In -fmudflap-instrumented code, alloca() and __builtin_alloca()
+      should always expand to function calls.  These can be intercepted
+      in libmudflap.  */
+   if (flag_mudflap)
+     return 0;
+ 
    if (!validate_arglist (arglist, INTEGER_TYPE, VOID_TYPE))
      return 0;
  
*************** expand_builtin_unop (enum machine_mode t
*** 4313,4320 ****
       Set TARGET to wherever the result comes back.  */
    target = expand_unop (TYPE_MODE (TREE_TYPE (TREE_VALUE (arglist))),
  			op_optab, op0, target, 1);
!   if (target == 0)
!     abort ();
  
    return convert_to_mode (target_mode, target, 0);
  }
--- 4293,4299 ----
       Set TARGET to wherever the result comes back.  */
    target = expand_unop (TYPE_MODE (TREE_TYPE (TREE_VALUE (arglist))),
  			op_optab, op0, target, 1);
!   gcc_assert (target);
  
    return convert_to_mode (target_mode, target, 0);
  }
*************** expand_builtin_unop (enum machine_mode t
*** 4325,4401 ****
  static rtx
  expand_builtin_fputs (tree arglist, rtx target, bool unlocked)
  {
-   tree len, fn;
-   tree fn_fputc = unlocked ? implicit_built_in_decls[BUILT_IN_FPUTC_UNLOCKED]
-     : implicit_built_in_decls[BUILT_IN_FPUTC];
-   tree fn_fwrite = unlocked ? implicit_built_in_decls[BUILT_IN_FWRITE_UNLOCKED]
-     : implicit_built_in_decls[BUILT_IN_FWRITE];
- 
-   /* If the return value is used, or the replacement _DECL isn't
-      initialized, don't do the transformation.  */
-   if (target != const0_rtx || !fn_fputc || !fn_fwrite)
-     return 0;
- 
    /* Verify the arguments in the original call.  */
!   if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
!     return 0;
! 
!   /* Get the length of the string passed to fputs.  If the length
!      can't be determined, punt.  */
!   if (!(len = c_strlen (TREE_VALUE (arglist), 1))
!       || TREE_CODE (len) != INTEGER_CST)
!     return 0;
! 
!   switch (compare_tree_int (len, 1))
      {
!     case -1: /* length is 0, delete the call entirely .  */
!       {
! 	/* Evaluate and ignore the argument in case it has
!            side-effects.  */
! 	expand_expr (TREE_VALUE (TREE_CHAIN (arglist)), const0_rtx,
! 		     VOIDmode, EXPAND_NORMAL);
! 	return const0_rtx;
!       }
!     case 0: /* length is 1, call fputc.  */
!       {
! 	const char *p = c_getstr (TREE_VALUE (arglist));
! 
! 	if (p != NULL)
! 	  {
! 	    /* New argument list transforming fputs(string, stream) to
! 	       fputc(string[0], stream).  */
! 	    arglist =
! 	      build_tree_list (NULL_TREE, TREE_VALUE (TREE_CHAIN (arglist)));
! 	    arglist =
! 	      tree_cons (NULL_TREE, build_int_2 (p[0], 0), arglist);
! 	    fn = fn_fputc;
! 	    break;
! 	  }
!       }
!       /* Fall through.  */
!     case 1: /* length is greater than 1, call fwrite.  */
!       {
! 	tree string_arg;
! 
! 	/* If optimizing for size keep fputs.  */
! 	if (optimize_size)
! 	  return 0;
! 	string_arg = TREE_VALUE (arglist);
! 	/* New argument list transforming fputs(string, stream) to
! 	   fwrite(string, 1, len, stream).  */
! 	arglist = build_tree_list (NULL_TREE, TREE_VALUE (TREE_CHAIN (arglist)));
! 	arglist = tree_cons (NULL_TREE, len, arglist);
! 	arglist = tree_cons (NULL_TREE, size_one_node, arglist);
! 	arglist = tree_cons (NULL_TREE, string_arg, arglist);
! 	fn = fn_fwrite;
! 	break;
!       }
!     default:
!       abort ();
      }
! 
!   return expand_expr (build_function_call_expr (fn, arglist),
! 		      const0_rtx, VOIDmode, EXPAND_NORMAL);
  }
  
  /* Expand a call to __builtin_expect.  We return our argument and emit a
--- 4304,4318 ----
  static rtx
  expand_builtin_fputs (tree arglist, rtx target, bool unlocked)
  {
    /* Verify the arguments in the original call.  */
!   if (validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
      {
!       tree result = fold_builtin_fputs (arglist, (target == const0_rtx),
! 					unlocked, NULL_TREE);
!       if (result)
! 	return expand_expr (result, target, VOIDmode, EXPAND_NORMAL);
      }
!   return 0;
  }
  
  /* Expand a call to __builtin_expect.  We return our argument and emit a
*************** expand_builtin_expect (tree arglist, rtx
*** 4416,4422 ****
  
    if (TREE_CODE (c) != INTEGER_CST)
      {
!       error ("second arg to `__builtin_expect' must be a constant");
        c = integer_zero_node;
      }
  
--- 4333,4339 ----
  
    if (TREE_CODE (c) != INTEGER_CST)
      {
!       error ("second argument to %<__builtin_expect%> must be a constant");
        c = integer_zero_node;
      }
  
*************** expand_builtin_expect_jump (tree exp, rt
*** 4467,4475 ****
        ret = get_insns ();
  
        drop_through_label = get_last_insn ();
!       if (drop_through_label && GET_CODE (drop_through_label) == NOTE)
  	drop_through_label = prev_nonnote_insn (drop_through_label);
!       if (drop_through_label && GET_CODE (drop_through_label) != CODE_LABEL)
  	drop_through_label = NULL_RTX;
        end_sequence ();
  
--- 4384,4392 ----
        ret = get_insns ();
  
        drop_through_label = get_last_insn ();
!       if (drop_through_label && NOTE_P (drop_through_label))
  	drop_through_label = prev_nonnote_insn (drop_through_label);
!       if (drop_through_label && !LABEL_P (drop_through_label))
  	drop_through_label = NULL_RTX;
        end_sequence ();
  
*************** expand_builtin_expect_jump (tree exp, rt
*** 4484,4490 ****
  	{
  	  rtx next = NEXT_INSN (insn);
  
! 	  if (GET_CODE (insn) == JUMP_INSN && any_condjump_p (insn))
  	    {
  	      rtx ifelse = SET_SRC (pc_set (insn));
  	      rtx then_dest = XEXP (ifelse, 1);
--- 4401,4407 ----
  	{
  	  rtx next = NEXT_INSN (insn);
  
! 	  if (JUMP_P (insn) && any_condjump_p (insn))
  	    {
  	      rtx ifelse = SET_SRC (pc_set (insn));
  	      rtx then_dest = XEXP (ifelse, 1);
*************** expand_builtin_expect_jump (tree exp, rt
*** 4507,4516 ****
  	      /* Otherwise check where we drop through.  */
  	      else if (else_dest == pc_rtx)
  		{
! 		  if (next && GET_CODE (next) == NOTE)
  		    next = next_nonnote_insn (next);
  
! 		  if (next && GET_CODE (next) == JUMP_INSN
  		      && any_uncondjump_p (next))
  		    temp = XEXP (SET_SRC (pc_set (next)), 0);
  		  else
--- 4424,4433 ----
  	      /* Otherwise check where we drop through.  */
  	      else if (else_dest == pc_rtx)
  		{
! 		  if (next && NOTE_P (next))
  		    next = next_nonnote_insn (next);
  
! 		  if (next && JUMP_P (next)
  		      && any_uncondjump_p (next))
  		    temp = XEXP (SET_SRC (pc_set (next)), 0);
  		  else
*************** expand_builtin_expect_jump (tree exp, rt
*** 4525,4534 ****
  		}
  	      else if (then_dest == pc_rtx)
  		{
! 		  if (next && GET_CODE (next) == NOTE)
  		    next = next_nonnote_insn (next);
  
! 		  if (next && GET_CODE (next) == JUMP_INSN
  		      && any_uncondjump_p (next))
  		    temp = XEXP (SET_SRC (pc_set (next)), 0);
  		  else
--- 4442,4451 ----
  		}
  	      else if (then_dest == pc_rtx)
  		{
! 		  if (next && NOTE_P (next))
  		    next = next_nonnote_insn (next);
  
! 		  if (next && JUMP_P (next)
  		      && any_uncondjump_p (next))
  		    temp = XEXP (SET_SRC (pc_set (next)), 0);
  		  else
*************** expand_builtin_expect_jump (tree exp, rt
*** 4557,4563 ****
    return ret;
  }
  
! void
  expand_builtin_trap (void)
  {
  #ifdef HAVE_trap
--- 4474,4480 ----
    return ret;
  }
  
! static void
  expand_builtin_trap (void)
  {
  #ifdef HAVE_trap
*************** expand_builtin_fabs (tree arglist, rtx t
*** 4591,4618 ****
    return expand_abs (mode, op0, target, 0, safe_from_p (target, arg, 1));
  }
  
! /* Expand a call to cabs, cabsf or cabsl with arguments ARGLIST.
!    Return 0 if a normal call should be emitted rather than expanding
!    the function inline.  If convenient, the result should be placed
!    in target.  */
  
  static rtx
! expand_builtin_cabs (tree arglist, rtx target)
  {
!   enum machine_mode mode;
    tree arg;
-   rtx op0;
  
!   if (arglist == 0 || TREE_CHAIN (arglist))
      return 0;
    arg = TREE_VALUE (arglist);
!   if (TREE_CODE (TREE_TYPE (arg)) != COMPLEX_TYPE
!       || TREE_CODE (TREE_TYPE (TREE_TYPE (arg))) != REAL_TYPE)
!     return 0;
  
!   mode = TYPE_MODE (TREE_TYPE (arg));
!   op0 = expand_expr (arg, NULL_RTX, VOIDmode, 0);
!   return expand_complex_abs (mode, op0, target, 0);
  }
  
  /* Create a new constant string literal and return a char* pointer to it.
--- 4508,4534 ----
    return expand_abs (mode, op0, target, 0, safe_from_p (target, arg, 1));
  }
  
! /* Expand a call to copysign, copysignf, or copysignl with arguments ARGLIST.
!    Return NULL is a normal call should be emitted rather than expanding the
!    function inline.  If convenient, the result should be placed in TARGET.
!    SUBTARGET may be used as the target for computing the operand.  */
  
  static rtx
! expand_builtin_copysign (tree arglist, rtx target, rtx subtarget)
  {
!   rtx op0, op1;
    tree arg;
  
!   if (!validate_arglist (arglist, REAL_TYPE, REAL_TYPE, VOID_TYPE))
      return 0;
+ 
    arg = TREE_VALUE (arglist);
!   op0 = expand_expr (arg, subtarget, VOIDmode, 0);
  
!   arg = TREE_VALUE (TREE_CHAIN (arglist));
!   op1 = expand_expr (arg, NULL, VOIDmode, 0);
! 
!   return expand_copysign (op0, op1, target);
  }
  
  /* Create a new constant string literal and return a char* pointer to it.
*************** build_string_literal (int len, const cha
*** 4624,4633 ****
  
    t = build_string (len, str);
    elem = build_type_variant (char_type_node, 1, 0);
!   index = build_index_type (build_int_2 (len - 1, 0));
    type = build_array_type (elem, index);
    TREE_TYPE (t) = type;
    TREE_CONSTANT (t) = 1;
    TREE_READONLY (t) = 1;
    TREE_STATIC (t) = 1;
  
--- 4540,4550 ----
  
    t = build_string (len, str);
    elem = build_type_variant (char_type_node, 1, 0);
!   index = build_index_type (build_int_cst (NULL_TREE, len - 1));
    type = build_array_type (elem, index);
    TREE_TYPE (t) = type;
    TREE_CONSTANT (t) = 1;
+   TREE_INVARIANT (t) = 1;
    TREE_READONLY (t) = 1;
    TREE_STATIC (t) = 1;
  
*************** build_string_literal (int len, const cha
*** 4642,4648 ****
  /* Expand a call to printf or printf_unlocked with argument list ARGLIST.
     Return 0 if a normal call should be emitted rather than transforming
     the function inline.  If convenient, the result should be placed in
!    TARGET with mode MODE.  UNLOCKED indicates this is a printf_unlocked 
     call.  */
  static rtx
  expand_builtin_printf (tree arglist, rtx target, enum machine_mode mode,
--- 4559,4565 ----
  /* Expand a call to printf or printf_unlocked with argument list ARGLIST.
     Return 0 if a normal call should be emitted rather than transforming
     the function inline.  If convenient, the result should be placed in
!    TARGET with mode MODE.  UNLOCKED indicates this is a printf_unlocked
     call.  */
  static rtx
  expand_builtin_printf (tree arglist, rtx target, enum machine_mode mode,
*************** expand_builtin_printf (tree arglist, rtx
*** 4664,4670 ****
    if (! arglist)
      return 0;
    fmt = TREE_VALUE (arglist);
!   if (TREE_CODE (TREE_TYPE (fmt)) != POINTER_TYPE)
      return 0;
    arglist = TREE_CHAIN (arglist);
  
--- 4581,4587 ----
    if (! arglist)
      return 0;
    fmt = TREE_VALUE (arglist);
!   if (! POINTER_TYPE_P (TREE_TYPE (fmt)))
      return 0;
    arglist = TREE_CHAIN (arglist);
  
*************** expand_builtin_printf (tree arglist, rtx
*** 4677,4683 ****
    if (strcmp (fmt_str, "%s\n") == 0)
      {
        if (! arglist
!           || TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE
  	  || TREE_CHAIN (arglist))
  	return 0;
        fn = fn_puts;
--- 4594,4600 ----
    if (strcmp (fmt_str, "%s\n") == 0)
      {
        if (! arglist
!           || ! POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (arglist)))
  	  || TREE_CHAIN (arglist))
  	return 0;
        fn = fn_puts;
*************** expand_builtin_printf (tree arglist, rtx
*** 4709,4715 ****
  	  /* Given printf("c"), (where c is any one character,)
  	     convert "c"[0] to an int and pass that to the replacement
  	     function.  */
! 	  arg = build_int_2 (fmt_str[0], 0);
  	  arglist = build_tree_list (NULL_TREE, arg);
  	  fn = fn_putchar;
  	}
--- 4626,4632 ----
  	  /* Given printf("c"), (where c is any one character,)
  	     convert "c"[0] to an int and pass that to the replacement
  	     function.  */
! 	  arg = build_int_cst (NULL_TREE, fmt_str[0]);
  	  arglist = build_tree_list (NULL_TREE, arg);
  	  fn = fn_putchar;
  	}
*************** expand_builtin_printf (tree arglist, rtx
*** 4721,4727 ****
  	    {
  	      /* Create a NUL-terminated string that's one char shorter
  		 than the original, stripping off the trailing '\n'.  */
! 	      char *newstr = (char *) alloca (len);
  	      memcpy (newstr, fmt_str, len - 1);
  	      newstr[len - 1] = 0;
  
--- 4638,4644 ----
  	    {
  	      /* Create a NUL-terminated string that's one char shorter
  		 than the original, stripping off the trailing '\n'.  */
! 	      char *newstr = alloca (len);
  	      memcpy (newstr, fmt_str, len - 1);
  	      newstr[len - 1] = 0;
  
*************** expand_builtin_printf (tree arglist, rtx
*** 4745,4751 ****
  /* Expand a call to fprintf or fprintf_unlocked with argument list ARGLIST.
     Return 0 if a normal call should be emitted rather than transforming
     the function inline.  If convenient, the result should be placed in
!    TARGET with mode MODE.  UNLOCKED indicates this is a fprintf_unlocked 
     call.  */
  static rtx
  expand_builtin_fprintf (tree arglist, rtx target, enum machine_mode mode,
--- 4662,4668 ----
  /* Expand a call to fprintf or fprintf_unlocked with argument list ARGLIST.
     Return 0 if a normal call should be emitted rather than transforming
     the function inline.  If convenient, the result should be placed in
!    TARGET with mode MODE.  UNLOCKED indicates this is a fprintf_unlocked
     call.  */
  static rtx
  expand_builtin_fprintf (tree arglist, rtx target, enum machine_mode mode,
*************** expand_builtin_fprintf (tree arglist, rt
*** 4766,4778 ****
    if (! arglist)
      return 0;
    fp = TREE_VALUE (arglist);
!   if (TREE_CODE (TREE_TYPE (fp)) != POINTER_TYPE)
      return 0;
    arglist = TREE_CHAIN (arglist);
    if (! arglist)
      return 0;
    fmt = TREE_VALUE (arglist);
!   if (TREE_CODE (TREE_TYPE (fmt)) != POINTER_TYPE)
      return 0;
    arglist = TREE_CHAIN (arglist);
  
--- 4683,4695 ----
    if (! arglist)
      return 0;
    fp = TREE_VALUE (arglist);
!   if (! POINTER_TYPE_P (TREE_TYPE (fp)))
      return 0;
    arglist = TREE_CHAIN (arglist);
    if (! arglist)
      return 0;
    fmt = TREE_VALUE (arglist);
!   if (! POINTER_TYPE_P (TREE_TYPE (fmt)))
      return 0;
    arglist = TREE_CHAIN (arglist);
  
*************** expand_builtin_fprintf (tree arglist, rt
*** 4785,4791 ****
    if (strcmp (fmt_str, "%s") == 0)
      {
        if (! arglist
!           || TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE
  	  || TREE_CHAIN (arglist))
  	return 0;
        arg = TREE_VALUE (arglist);
--- 4702,4708 ----
    if (strcmp (fmt_str, "%s") == 0)
      {
        if (! arglist
!           || ! POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (arglist)))
  	  || TREE_CHAIN (arglist))
  	return 0;
        arg = TREE_VALUE (arglist);
*************** expand_builtin_sprintf (tree arglist, rt
*** 4853,4865 ****
    if (! arglist)
      return 0;
    dest = TREE_VALUE (arglist);
!   if (TREE_CODE (TREE_TYPE (dest)) != POINTER_TYPE)
      return 0;
    arglist = TREE_CHAIN (arglist);
    if (! arglist)
      return 0;
    fmt = TREE_VALUE (arglist);
!   if (TREE_CODE (TREE_TYPE (fmt)) != POINTER_TYPE)
      return 0;
    arglist = TREE_CHAIN (arglist);
  
--- 4770,4782 ----
    if (! arglist)
      return 0;
    dest = TREE_VALUE (arglist);
!   if (! POINTER_TYPE_P (TREE_TYPE (dest)))
      return 0;
    arglist = TREE_CHAIN (arglist);
    if (! arglist)
      return 0;
    fmt = TREE_VALUE (arglist);
!   if (! POINTER_TYPE_P (TREE_TYPE (fmt)))
      return 0;
    arglist = TREE_CHAIN (arglist);
  
*************** expand_builtin_sprintf (tree arglist, rt
*** 4880,4887 ****
  		   const0_rtx, VOIDmode, EXPAND_NORMAL);
        if (target == const0_rtx)
  	return const0_rtx;
!       exp = build_int_2 (strlen (fmt_str), 0);
!       exp = fold (build1 (NOP_EXPR, integer_type_node, exp));
        return expand_expr (exp, target, mode, EXPAND_NORMAL);
      }
    /* If the format is "%s", use strcpy if the result isn't used.  */
--- 4797,4803 ----
  		   const0_rtx, VOIDmode, EXPAND_NORMAL);
        if (target == const0_rtx)
  	return const0_rtx;
!       exp = build_int_cst (NULL_TREE, strlen (fmt_str));
        return expand_expr (exp, target, mode, EXPAND_NORMAL);
      }
    /* If the format is "%s", use strcpy if the result isn't used.  */
*************** expand_builtin_sprintf (tree arglist, rt
*** 4896,4902 ****
        if (! arglist || TREE_CHAIN (arglist))
  	return 0;
        arg = TREE_VALUE (arglist);
!       if (TREE_CODE (TREE_TYPE (arg)) != POINTER_TYPE)
  	return 0;
  
        if (target != const0_rtx)
--- 4812,4818 ----
        if (! arglist || TREE_CHAIN (arglist))
  	return 0;
        arg = TREE_VALUE (arglist);
!       if (! POINTER_TYPE_P (TREE_TYPE (arg)))
  	return 0;
  
        if (target != const0_rtx)
*************** expand_builtin_sprintf (tree arglist, rt
*** 4920,4925 ****
--- 4836,5098 ----
  
    return 0;
  }
+ 
+ /* Expand a call to either the entry or exit function profiler.  */
+ 
+ static rtx
+ expand_builtin_profile_func (bool exitp)
+ {
+   rtx this, which;
+ 
+   this = DECL_RTL (current_function_decl);
+   gcc_assert (MEM_P (this));
+   this = XEXP (this, 0);
+ 
+   if (exitp)
+     which = profile_function_exit_libfunc;
+   else
+     which = profile_function_entry_libfunc;
+ 
+   emit_library_call (which, LCT_NORMAL, VOIDmode, 2, this, Pmode,
+ 		     expand_builtin_return_addr (BUILT_IN_RETURN_ADDRESS,
+ 						 0),
+ 		     Pmode);
+ 
+   return const0_rtx;
+ }
+ 
+ /* Given a trampoline address, make sure it satisfies TRAMPOLINE_ALIGNMENT.  */
+ 
+ static rtx
+ round_trampoline_addr (rtx tramp)
+ {
+   rtx temp, addend, mask;
+ 
+   /* If we don't need too much alignment, we'll have been guaranteed
+      proper alignment by get_trampoline_type.  */
+   if (TRAMPOLINE_ALIGNMENT <= STACK_BOUNDARY)
+     return tramp;
+ 
+   /* Round address up to desired boundary.  */
+   temp = gen_reg_rtx (Pmode);
+   addend = GEN_INT (TRAMPOLINE_ALIGNMENT / BITS_PER_UNIT - 1);
+   mask = GEN_INT (-TRAMPOLINE_ALIGNMENT / BITS_PER_UNIT);
+ 
+   temp  = expand_simple_binop (Pmode, PLUS, tramp, addend,
+ 			       temp, 0, OPTAB_LIB_WIDEN);
+   tramp = expand_simple_binop (Pmode, AND, temp, mask,
+ 			       temp, 0, OPTAB_LIB_WIDEN);
+ 
+   return tramp;
+ }
+ 
+ static rtx
+ expand_builtin_init_trampoline (tree arglist)
+ {
+   tree t_tramp, t_func, t_chain;
+   rtx r_tramp, r_func, r_chain;
+ #ifdef TRAMPOLINE_TEMPLATE
+   rtx blktramp;
+ #endif
+ 
+   if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE,
+ 			 POINTER_TYPE, VOID_TYPE))
+     return NULL_RTX;
+ 
+   t_tramp = TREE_VALUE (arglist);
+   arglist = TREE_CHAIN (arglist);
+   t_func = TREE_VALUE (arglist);
+   arglist = TREE_CHAIN (arglist);
+   t_chain = TREE_VALUE (arglist);
+ 
+   r_tramp = expand_expr (t_tramp, NULL_RTX, VOIDmode, 0);
+   r_func = expand_expr (t_func, NULL_RTX, VOIDmode, 0);
+   r_chain = expand_expr (t_chain, NULL_RTX, VOIDmode, 0);
+ 
+   /* Generate insns to initialize the trampoline.  */
+   r_tramp = round_trampoline_addr (r_tramp);
+ #ifdef TRAMPOLINE_TEMPLATE
+   blktramp = gen_rtx_MEM (BLKmode, r_tramp);
+   set_mem_align (blktramp, TRAMPOLINE_ALIGNMENT);
+   emit_block_move (blktramp, assemble_trampoline_template (),
+ 		   GEN_INT (TRAMPOLINE_SIZE), BLOCK_OP_NORMAL);
+ #endif
+   trampolines_created = 1;
+   INITIALIZE_TRAMPOLINE (r_tramp, r_func, r_chain);
+ 
+   return const0_rtx;
+ }
+ 
+ static rtx
+ expand_builtin_adjust_trampoline (tree arglist)
+ {
+   rtx tramp;
+ 
+   if (!validate_arglist (arglist, POINTER_TYPE, VOID_TYPE))
+     return NULL_RTX;
+ 
+   tramp = expand_expr (TREE_VALUE (arglist), NULL_RTX, VOIDmode, 0);
+   tramp = round_trampoline_addr (tramp);
+ #ifdef TRAMPOLINE_ADJUST_ADDRESS
+   TRAMPOLINE_ADJUST_ADDRESS (tramp);
+ #endif
+ 
+   return tramp;
+ }
+ 
+ /* Expand a call to the built-in signbit, signbitf or signbitl function.
+    Return NULL_RTX if a normal call should be emitted rather than expanding
+    the function in-line.  EXP is the expression that is a call to the builtin
+    function; if convenient, the result should be placed in TARGET.  */
+ 
+ static rtx
+ expand_builtin_signbit (tree exp, rtx target)
+ {
+   const struct real_format *fmt;
+   enum machine_mode fmode, imode, rmode;
+   HOST_WIDE_INT hi, lo;
+   tree arg, arglist;
+   int bitpos;
+   rtx temp;
+ 
+   arglist = TREE_OPERAND (exp, 1);
+   if (!validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
+     return 0;
+ 
+   arg = TREE_VALUE (arglist);
+   fmode = TYPE_MODE (TREE_TYPE (arg));
+   rmode = TYPE_MODE (TREE_TYPE (exp));
+   fmt = REAL_MODE_FORMAT (fmode);
+ 
+   /* For floating point formats without a sign bit, implement signbit
+      as "ARG < 0.0".  */
+   if (fmt->signbit < 0)
+   {
+     /* But we can't do this if the format supports signed zero.  */
+     if (fmt->has_signed_zero && HONOR_SIGNED_ZEROS (fmode))
+       return 0;
+ 
+     arg = fold (build2 (LT_EXPR, TREE_TYPE (exp), arg,
+ 			build_real (TREE_TYPE (arg), dconst0)));
+     return expand_expr (arg, target, VOIDmode, EXPAND_NORMAL);
+   }
+ 
+   imode = int_mode_for_mode (fmode);
+   if (imode == BLKmode)
+     return 0;
+ 
+   bitpos = fmt->signbit;
+   /* Handle targets with different FP word orders.  */
+   if (FLOAT_WORDS_BIG_ENDIAN != WORDS_BIG_ENDIAN)
+     {
+       int nwords = GET_MODE_BITSIZE (fmode) / BITS_PER_WORD;
+       int word = nwords - (bitpos / BITS_PER_WORD) - 1;
+       bitpos = word * BITS_PER_WORD + bitpos % BITS_PER_WORD;
+     }
+ 
+   /* If the sign bit is not in the lowpart and the floating point format
+      is wider than an integer, check that is twice the size of an integer
+      so that we can use gen_highpart below.  */
+   if (bitpos >= GET_MODE_BITSIZE (rmode)
+       && GET_MODE_BITSIZE (imode) != 2 * GET_MODE_BITSIZE (rmode))
+     return 0;
+ 
+   temp = expand_expr (arg, NULL_RTX, VOIDmode, 0);
+   temp = gen_lowpart (imode, temp);
+ 
+   if (GET_MODE_BITSIZE (imode) > GET_MODE_BITSIZE (rmode))
+     {
+       if (BYTES_BIG_ENDIAN)
+ 	bitpos = GET_MODE_BITSIZE (imode) - 1 - bitpos;
+       temp = copy_to_mode_reg (imode, temp);
+       temp = extract_bit_field (temp, 1, bitpos, 1,
+ 				NULL_RTX, rmode, rmode);
+     }
+   else
+     {
+       if (GET_MODE_BITSIZE (imode) < GET_MODE_BITSIZE (rmode))
+ 	temp = gen_lowpart (rmode, temp);
+       if (bitpos < HOST_BITS_PER_WIDE_INT)
+ 	{
+ 	  hi = 0;
+ 	  lo = (HOST_WIDE_INT) 1 << bitpos;
+ 	}
+       else
+ 	{
+ 	  hi = (HOST_WIDE_INT) 1 << (bitpos - HOST_BITS_PER_WIDE_INT);
+ 	  lo = 0;
+ 	}
+ 
+       temp = force_reg (rmode, temp);
+       temp = expand_binop (rmode, and_optab, temp,
+ 			   immed_double_const (lo, hi, rmode),
+ 			   target, 1, OPTAB_LIB_WIDEN);
+     }
+   return temp;
+ }
+ 
+ /* Expand fork or exec calls.  TARGET is the desired target of the
+    call.  ARGLIST is the list of arguments of the call.  FN is the
+    identificator of the actual function.  IGNORE is nonzero if the
+    value is to be ignored.  */
+ 
+ static rtx
+ expand_builtin_fork_or_exec (tree fn, tree arglist, rtx target, int ignore)
+ {
+   tree id, decl;
+   tree call;
+ 
+   /* If we are not profiling, just call the function.  */
+   if (!profile_arc_flag)
+     return NULL_RTX;
+ 
+   /* Otherwise call the wrapper.  This should be equivalent for the rest of
+      compiler, so the code does not diverge, and the wrapper may run the
+      code necessary for keeping the profiling sane.  */
+ 
+   switch (DECL_FUNCTION_CODE (fn))
+     {
+     case BUILT_IN_FORK:
+       id = get_identifier ("__gcov_fork");
+       break;
+ 
+     case BUILT_IN_EXECL:
+       id = get_identifier ("__gcov_execl");
+       break;
+ 
+     case BUILT_IN_EXECV:
+       id = get_identifier ("__gcov_execv");
+       break;
+ 
+     case BUILT_IN_EXECLP:
+       id = get_identifier ("__gcov_execlp");
+       break;
+ 
+     case BUILT_IN_EXECLE:
+       id = get_identifier ("__gcov_execle");
+       break;
+ 
+     case BUILT_IN_EXECVP:
+       id = get_identifier ("__gcov_execvp");
+       break;
+ 
+     case BUILT_IN_EXECVE:
+       id = get_identifier ("__gcov_execve");
+       break;
+ 
+     default:
+       gcc_unreachable ();
+     }
+ 
+   decl = build_decl (FUNCTION_DECL, id, TREE_TYPE (fn));
+   DECL_EXTERNAL (decl) = 1;
+   TREE_PUBLIC (decl) = 1;
+   DECL_ARTIFICIAL (decl) = 1;
+   TREE_NOTHROW (decl) = 1;
+   call = build_function_call_expr (decl, arglist);
+ 
+   return expand_call (call, target, ignore);
+ }
  
  /* Expand an expression EXP that calls a built-in function,
     with result going to TARGET if that's convenient
*************** expand_builtin (tree exp, rtx target, rt
*** 4936,4946 ****
    enum built_in_function fcode = DECL_FUNCTION_CODE (fndecl);
    enum machine_mode target_mode = TYPE_MODE (TREE_TYPE (exp));
  
-   /* Perform postincrements before expanding builtin functions.  */
-   emit_queue ();
- 
    if (DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_MD)
!     return (*targetm.expand_builtin) (exp, target, subtarget, mode, ignore);
  
    /* When not optimizing, generate calls to library functions for a certain
       set of builtins.  */
--- 5109,5116 ----
    enum built_in_function fcode = DECL_FUNCTION_CODE (fndecl);
    enum machine_mode target_mode = TYPE_MODE (TREE_TYPE (exp));
  
    if (DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_MD)
!     return targetm.expand_builtin (exp, target, subtarget, mode, ignore);
  
    /* When not optimizing, generate calls to library functions for a certain
       set of builtins.  */
*************** expand_builtin (tree exp, rtx target, rt
*** 4982,4994 ****
  
    switch (fcode)
      {
-     case BUILT_IN_ABS:
-     case BUILT_IN_LABS:
-     case BUILT_IN_LLABS:
-     case BUILT_IN_IMAXABS:
-       /* build_function_call changes these into ABS_EXPR.  */
-       abort ();
- 
      case BUILT_IN_FABS:
      case BUILT_IN_FABSF:
      case BUILT_IN_FABSL:
--- 5152,5157 ----
*************** expand_builtin (tree exp, rtx target, rt
*** 4997,5041 ****
          return target;
        break;
  
      case BUILT_IN_CABS:
      case BUILT_IN_CABSF:
      case BUILT_IN_CABSL:
-       if (flag_unsafe_math_optimizations)
- 	{
- 	  target = expand_builtin_cabs (arglist, target);
- 	  if (target)
- 	    return target;
- 	}
        break;
  
-     case BUILT_IN_CONJ:
-     case BUILT_IN_CONJF:
-     case BUILT_IN_CONJL:
-     case BUILT_IN_CREAL:
-     case BUILT_IN_CREALF:
-     case BUILT_IN_CREALL:
-     case BUILT_IN_CIMAG:
-     case BUILT_IN_CIMAGF:
-     case BUILT_IN_CIMAGL:
-       /* expand_tree_builtin changes these into CONJ_EXPR, REALPART_EXPR
- 	 and IMAGPART_EXPR.  */
-       abort ();
- 
-     case BUILT_IN_SIN:
-     case BUILT_IN_SINF:
-     case BUILT_IN_SINL:
-     case BUILT_IN_COS:
-     case BUILT_IN_COSF:
-     case BUILT_IN_COSL:
      case BUILT_IN_EXP:
      case BUILT_IN_EXPF:
      case BUILT_IN_EXPL:
      case BUILT_IN_LOG:
      case BUILT_IN_LOGF:
      case BUILT_IN_LOGL:
      case BUILT_IN_TAN:
      case BUILT_IN_TANF:
      case BUILT_IN_TANL:
      case BUILT_IN_ATAN:
      case BUILT_IN_ATANF:
      case BUILT_IN_ATANL:
--- 5160,5222 ----
          return target;
        break;
  
+     case BUILT_IN_COPYSIGN:
+     case BUILT_IN_COPYSIGNF:
+     case BUILT_IN_COPYSIGNL:
+       target = expand_builtin_copysign (arglist, target, subtarget);
+       if (target)
+ 	return target;
+       break;
+ 
+       /* Just do a normal library call if we were unable to fold
+ 	 the values.  */
      case BUILT_IN_CABS:
      case BUILT_IN_CABSF:
      case BUILT_IN_CABSL:
        break;
  
      case BUILT_IN_EXP:
      case BUILT_IN_EXPF:
      case BUILT_IN_EXPL:
+     case BUILT_IN_EXP10:
+     case BUILT_IN_EXP10F:
+     case BUILT_IN_EXP10L:
+     case BUILT_IN_POW10:
+     case BUILT_IN_POW10F:
+     case BUILT_IN_POW10L:
+     case BUILT_IN_EXP2:
+     case BUILT_IN_EXP2F:
+     case BUILT_IN_EXP2L:
+     case BUILT_IN_EXPM1:
+     case BUILT_IN_EXPM1F:
+     case BUILT_IN_EXPM1L:
+     case BUILT_IN_LOGB:
+     case BUILT_IN_LOGBF:
+     case BUILT_IN_LOGBL:
+     case BUILT_IN_ILOGB:
+     case BUILT_IN_ILOGBF:
+     case BUILT_IN_ILOGBL:
      case BUILT_IN_LOG:
      case BUILT_IN_LOGF:
      case BUILT_IN_LOGL:
+     case BUILT_IN_LOG10:
+     case BUILT_IN_LOG10F:
+     case BUILT_IN_LOG10L:
+     case BUILT_IN_LOG2:
+     case BUILT_IN_LOG2F:
+     case BUILT_IN_LOG2L:
+     case BUILT_IN_LOG1P:
+     case BUILT_IN_LOG1PF:
+     case BUILT_IN_LOG1PL:
      case BUILT_IN_TAN:
      case BUILT_IN_TANF:
      case BUILT_IN_TANL:
+     case BUILT_IN_ASIN:
+     case BUILT_IN_ASINF:
+     case BUILT_IN_ASINL:
+     case BUILT_IN_ACOS:
+     case BUILT_IN_ACOSF:
+     case BUILT_IN_ACOSL:
      case BUILT_IN_ATAN:
      case BUILT_IN_ATANF:
      case BUILT_IN_ATANL:
*************** expand_builtin (tree exp, rtx target, rt
*** 5061,5066 ****
--- 5242,5250 ----
      case BUILT_IN_NEARBYINT:
      case BUILT_IN_NEARBYINTF:
      case BUILT_IN_NEARBYINTL:
+     case BUILT_IN_RINT:
+     case BUILT_IN_RINTF:
+     case BUILT_IN_RINTL:
        target = expand_builtin_mathfn (exp, target, subtarget);
        if (target)
  	return target;
*************** expand_builtin (tree exp, rtx target, rt
*** 5069,5084 ****
      case BUILT_IN_POW:
      case BUILT_IN_POWF:
      case BUILT_IN_POWL:
-       if (! flag_unsafe_math_optimizations)
- 	break;
        target = expand_builtin_pow (exp, target, subtarget);
        if (target)
  	return target;
        break;
  
      case BUILT_IN_ATAN2:
      case BUILT_IN_ATAN2F:
      case BUILT_IN_ATAN2L:
        if (! flag_unsafe_math_optimizations)
  	break;
        target = expand_builtin_mathfn_2 (exp, target, subtarget);
--- 5253,5283 ----
      case BUILT_IN_POW:
      case BUILT_IN_POWF:
      case BUILT_IN_POWL:
        target = expand_builtin_pow (exp, target, subtarget);
        if (target)
  	return target;
        break;
  
+     case BUILT_IN_POWI:
+     case BUILT_IN_POWIF:
+     case BUILT_IN_POWIL:
+       target = expand_builtin_powi (exp, target, subtarget);
+       if (target)
+ 	return target;
+       break;
+ 
      case BUILT_IN_ATAN2:
      case BUILT_IN_ATAN2F:
      case BUILT_IN_ATAN2L:
+     case BUILT_IN_LDEXP:
+     case BUILT_IN_LDEXPF:
+     case BUILT_IN_LDEXPL:
+     case BUILT_IN_FMOD:
+     case BUILT_IN_FMODF:
+     case BUILT_IN_FMODL:
+     case BUILT_IN_DREM:
+     case BUILT_IN_DREMF:
+     case BUILT_IN_DREML:
        if (! flag_unsafe_math_optimizations)
  	break;
        target = expand_builtin_mathfn_2 (exp, target, subtarget);
*************** expand_builtin (tree exp, rtx target, rt
*** 5086,5091 ****
--- 5285,5303 ----
  	return target;
        break;
  
+     case BUILT_IN_SIN:
+     case BUILT_IN_SINF:
+     case BUILT_IN_SINL:
+     case BUILT_IN_COS:
+     case BUILT_IN_COSF:
+     case BUILT_IN_COSL:
+       if (! flag_unsafe_math_optimizations)
+ 	break;
+       target = expand_builtin_mathfn_3 (exp, target, subtarget);
+       if (target)
+ 	return target;
+       break;
+ 
      case BUILT_IN_APPLY_ARGS:
        return expand_builtin_apply_args ();
  
*************** expand_builtin (tree exp, rtx target, rt
*** 5134,5146 ****
  
        /* Return the address of the first anonymous stack arg.  */
      case BUILT_IN_NEXT_ARG:
!       return expand_builtin_next_arg (arglist);
  
      case BUILT_IN_CLASSIFY_TYPE:
        return expand_builtin_classify_type (arglist);
  
      case BUILT_IN_CONSTANT_P:
!       return expand_builtin_constant_p (arglist, target_mode);
  
      case BUILT_IN_FRAME_ADDRESS:
      case BUILT_IN_RETURN_ADDRESS:
--- 5346,5360 ----
  
        /* Return the address of the first anonymous stack arg.  */
      case BUILT_IN_NEXT_ARG:
!       if (fold_builtin_next_arg (arglist))
!         return const0_rtx;
!       return expand_builtin_next_arg ();
  
      case BUILT_IN_CLASSIFY_TYPE:
        return expand_builtin_classify_type (arglist);
  
      case BUILT_IN_CONSTANT_P:
!       return const0_rtx;
  
      case BUILT_IN_FRAME_ADDRESS:
      case BUILT_IN_RETURN_ADDRESS:
*************** expand_builtin (tree exp, rtx target, rt
*** 5151,5157 ****
      case BUILT_IN_AGGREGATE_INCOMING_ADDRESS:
        if (arglist != 0
  	  || ! AGGREGATE_TYPE_P (TREE_TYPE (TREE_TYPE (current_function_decl)))
! 	  || GET_CODE (DECL_RTL (DECL_RESULT (current_function_decl))) != MEM)
  	return const0_rtx;
        else
  	return XEXP (DECL_RTL (DECL_RESULT (current_function_decl)), 0);
--- 5365,5371 ----
      case BUILT_IN_AGGREGATE_INCOMING_ADDRESS:
        if (arglist != 0
  	  || ! AGGREGATE_TYPE_P (TREE_TYPE (TREE_TYPE (current_function_decl)))
! 	  || !MEM_P (DECL_RTL (DECL_RESULT (current_function_decl))))
  	return const0_rtx;
        else
  	return XEXP (DECL_RTL (DECL_RESULT (current_function_decl)), 0);
*************** expand_builtin (tree exp, rtx target, rt
*** 5162,5170 ****
--- 5376,5392 ----
  	return target;
        break;
  
+     case BUILT_IN_STACK_SAVE:
+       return expand_stack_save ();
+ 
+     case BUILT_IN_STACK_RESTORE:
+       expand_stack_restore (TREE_VALUE (arglist));
+       return const0_rtx;
+ 
      case BUILT_IN_FFS:
      case BUILT_IN_FFSL:
      case BUILT_IN_FFSLL:
+     case BUILT_IN_FFSIMAX:
        target = expand_builtin_unop (target_mode, arglist, target,
  				    subtarget, ffs_optab);
        if (target)
*************** expand_builtin (tree exp, rtx target, rt
*** 5174,5179 ****
--- 5396,5402 ----
      case BUILT_IN_CLZ:
      case BUILT_IN_CLZL:
      case BUILT_IN_CLZLL:
+     case BUILT_IN_CLZIMAX:
        target = expand_builtin_unop (target_mode, arglist, target,
  				    subtarget, clz_optab);
        if (target)
*************** expand_builtin (tree exp, rtx target, rt
*** 5183,5188 ****
--- 5406,5412 ----
      case BUILT_IN_CTZ:
      case BUILT_IN_CTZL:
      case BUILT_IN_CTZLL:
+     case BUILT_IN_CTZIMAX:
        target = expand_builtin_unop (target_mode, arglist, target,
  				    subtarget, ctz_optab);
        if (target)
*************** expand_builtin (tree exp, rtx target, rt
*** 5192,5197 ****
--- 5416,5422 ----
      case BUILT_IN_POPCOUNT:
      case BUILT_IN_POPCOUNTL:
      case BUILT_IN_POPCOUNTLL:
+     case BUILT_IN_POPCOUNTIMAX:
        target = expand_builtin_unop (target_mode, arglist, target,
  				    subtarget, popcount_optab);
        if (target)
*************** expand_builtin (tree exp, rtx target, rt
*** 5201,5206 ****
--- 5426,5432 ----
      case BUILT_IN_PARITY:
      case BUILT_IN_PARITYL:
      case BUILT_IN_PARITYLL:
+     case BUILT_IN_PARITYIMAX:
        target = expand_builtin_unop (target_mode, arglist, target,
  				    subtarget, parity_optab);
        if (target)
*************** expand_builtin (tree exp, rtx target, rt
*** 5214,5238 ****
        break;
  
      case BUILT_IN_STRCPY:
!       target = expand_builtin_strcpy (arglist, target, mode);
        if (target)
  	return target;
        break;
  
      case BUILT_IN_STRNCPY:
!       target = expand_builtin_strncpy (arglist, target, mode);
        if (target)
  	return target;
        break;
  
      case BUILT_IN_STPCPY:
!       target = expand_builtin_stpcpy (arglist, target, mode);
        if (target)
  	return target;
        break;
  
      case BUILT_IN_STRCAT:
!       target = expand_builtin_strcat (arglist, target, mode);
        if (target)
  	return target;
        break;
--- 5440,5464 ----
        break;
  
      case BUILT_IN_STRCPY:
!       target = expand_builtin_strcpy (exp, target, mode);
        if (target)
  	return target;
        break;
  
      case BUILT_IN_STRNCPY:
!       target = expand_builtin_strncpy (exp, target, mode);
        if (target)
  	return target;
        break;
  
      case BUILT_IN_STPCPY:
!       target = expand_builtin_stpcpy (exp, target, mode);
        if (target)
  	return target;
        break;
  
      case BUILT_IN_STRCAT:
!       target = expand_builtin_strcat (arglist, TREE_TYPE (exp), target, mode);
        if (target)
  	return target;
        break;
*************** expand_builtin (tree exp, rtx target, rt
*** 5256,5306 ****
        break;
  
      case BUILT_IN_STRSTR:
!       target = expand_builtin_strstr (arglist, target, mode);
        if (target)
  	return target;
        break;
  
      case BUILT_IN_STRPBRK:
!       target = expand_builtin_strpbrk (arglist, target, mode);
        if (target)
  	return target;
        break;
  
      case BUILT_IN_INDEX:
      case BUILT_IN_STRCHR:
!       target = expand_builtin_strchr (arglist, target, mode);
        if (target)
  	return target;
        break;
  
      case BUILT_IN_RINDEX:
      case BUILT_IN_STRRCHR:
!       target = expand_builtin_strrchr (arglist, target, mode);
        if (target)
  	return target;
        break;
  
      case BUILT_IN_MEMCPY:
!       target = expand_builtin_memcpy (arglist, target, mode);
        if (target)
  	return target;
        break;
  
      case BUILT_IN_MEMPCPY:
!       target = expand_builtin_mempcpy (arglist, target, mode, /*endp=*/ 1);
        if (target)
  	return target;
        break;
  
      case BUILT_IN_MEMMOVE:
!       target = expand_builtin_memmove (arglist, target, mode);
        if (target)
  	return target;
        break;
  
      case BUILT_IN_BCOPY:
!       target = expand_builtin_bcopy (arglist);
        if (target)
  	return target;
        break;
--- 5482,5532 ----
        break;
  
      case BUILT_IN_STRSTR:
!       target = expand_builtin_strstr (arglist, TREE_TYPE (exp), target, mode);
        if (target)
  	return target;
        break;
  
      case BUILT_IN_STRPBRK:
!       target = expand_builtin_strpbrk (arglist, TREE_TYPE (exp), target, mode);
        if (target)
  	return target;
        break;
  
      case BUILT_IN_INDEX:
      case BUILT_IN_STRCHR:
!       target = expand_builtin_strchr (arglist, TREE_TYPE (exp), target, mode);
        if (target)
  	return target;
        break;
  
      case BUILT_IN_RINDEX:
      case BUILT_IN_STRRCHR:
!       target = expand_builtin_strrchr (arglist, TREE_TYPE (exp), target, mode);
        if (target)
  	return target;
        break;
  
      case BUILT_IN_MEMCPY:
!       target = expand_builtin_memcpy (exp, target, mode);
        if (target)
  	return target;
        break;
  
      case BUILT_IN_MEMPCPY:
!       target = expand_builtin_mempcpy (arglist, TREE_TYPE (exp), target, mode, /*endp=*/ 1);
        if (target)
  	return target;
        break;
  
      case BUILT_IN_MEMMOVE:
!       target = expand_builtin_memmove (arglist, TREE_TYPE (exp), target, mode);
        if (target)
  	return target;
        break;
  
      case BUILT_IN_BCOPY:
!       target = expand_builtin_bcopy (arglist, TREE_TYPE (exp));
        if (target)
  	return target;
        break;
*************** expand_builtin (tree exp, rtx target, rt
*** 5357,5363 ****
  
  	  if (value != const1_rtx)
  	    {
! 	      error ("__builtin_longjmp second argument must be 1");
  	      return const0_rtx;
  	    }
  
--- 5583,5589 ----
  
  	  if (value != const1_rtx)
  	    {
! 	      error ("%<__builtin_longjmp%> second argument must be 1");
  	      return const0_rtx;
  	    }
  
*************** expand_builtin (tree exp, rtx target, rt
*** 5365,5370 ****
--- 5591,5615 ----
  	  return const0_rtx;
  	}
  
+     case BUILT_IN_NONLOCAL_GOTO:
+       target = expand_builtin_nonlocal_goto (arglist);
+       if (target)
+ 	return target;
+       break;
+ 
+       /* This updates the setjmp buffer that is its argument with the value
+ 	 of the current stack pointer.  */
+     case BUILT_IN_UPDATE_SETJMP_BUF:
+       if (validate_arglist (arglist, POINTER_TYPE, VOID_TYPE))
+ 	{
+ 	  rtx buf_addr
+ 	    = expand_expr (TREE_VALUE (arglist), NULL_RTX, VOIDmode, 0);
+ 
+ 	  expand_builtin_update_setjmp_buf (buf_addr);
+ 	  return const0_rtx;
+ 	}
+       break;
+ 
      case BUILT_IN_TRAP:
        expand_builtin_trap ();
        return const0_rtx;
*************** expand_builtin (tree exp, rtx target, rt
*** 5386,5392 ****
        if (target)
  	return target;
        break;
- 
      case BUILT_IN_FPUTS_UNLOCKED:
        target = expand_builtin_fputs (arglist, target, true);
        if (target)
--- 5631,5636 ----
*************** expand_builtin (tree exp, rtx target, rt
*** 5411,5416 ****
--- 5655,5668 ----
  	return target;
        break;
  
+     case BUILT_IN_SIGNBIT:
+     case BUILT_IN_SIGNBITF:
+     case BUILT_IN_SIGNBITL:
+       target = expand_builtin_signbit (exp, target);
+       if (target)
+ 	return target;
+       break;
+ 
        /* Various hooks for the DWARF 2 __throw routine.  */
      case BUILT_IN_UNWIND_INIT:
        expand_builtin_unwind_init ();
*************** expand_builtin (tree exp, rtx target, rt
*** 5452,5462 ****
        expand_builtin_prefetch (arglist);
        return const0_rtx;
  
  
      default:	/* just do library call, if unknown builtin */
!       if (!DECL_ASSEMBLER_NAME_SET_P (fndecl))
! 	error ("built-in function `%s' not currently supported",
! 	       IDENTIFIER_POINTER (DECL_NAME (fndecl)));
      }
  
    /* The switch statement above can drop through to cause the function
--- 5704,5733 ----
        expand_builtin_prefetch (arglist);
        return const0_rtx;
  
+     case BUILT_IN_PROFILE_FUNC_ENTER:
+       return expand_builtin_profile_func (false);
+     case BUILT_IN_PROFILE_FUNC_EXIT:
+       return expand_builtin_profile_func (true);
+ 
+     case BUILT_IN_INIT_TRAMPOLINE:
+       return expand_builtin_init_trampoline (arglist);
+     case BUILT_IN_ADJUST_TRAMPOLINE:
+       return expand_builtin_adjust_trampoline (arglist);
+ 
+     case BUILT_IN_FORK:
+     case BUILT_IN_EXECL:
+     case BUILT_IN_EXECV:
+     case BUILT_IN_EXECLP:
+     case BUILT_IN_EXECLE:
+     case BUILT_IN_EXECVP:
+     case BUILT_IN_EXECVE:
+       target = expand_builtin_fork_or_exec (fndecl, arglist, target, ignore);
+       if (target)
+ 	return target;
+       break;
  
      default:	/* just do library call, if unknown builtin */
!       break;
      }
  
    /* The switch statement above can drop through to cause the function
*************** fold_builtin_constant_p (tree arglist)
*** 5553,5559 ****
    STRIP_NOPS (arglist);
  
    /* If we know this is a constant, emit the constant of one.  */
!   if (TREE_CODE_CLASS (TREE_CODE (arglist)) == 'c'
        || (TREE_CODE (arglist) == CONSTRUCTOR
  	  && TREE_CONSTANT (arglist))
        || (TREE_CODE (arglist) == ADDR_EXPR
--- 5824,5830 ----
    STRIP_NOPS (arglist);
  
    /* If we know this is a constant, emit the constant of one.  */
!   if (CONSTANT_CLASS_P (arglist)
        || (TREE_CODE (arglist) == CONSTRUCTOR
  	  && TREE_CONSTANT (arglist))
        || (TREE_CODE (arglist) == ADDR_EXPR
*************** fold_builtin_constant_p (tree arglist)
*** 5576,5590 ****
    return 0;
  }
  
  /* Fold a call to __builtin_classify_type.  */
  
  static tree
  fold_builtin_classify_type (tree arglist)
  {
    if (arglist == 0)
!     return build_int_2 (no_type_class, 0);
  
!   return build_int_2 (type_to_class (TREE_TYPE (TREE_VALUE (arglist))), 0);
  }
  
  /* Fold a call to __builtin_inf or __builtin_huge_val.  */
--- 5847,5923 ----
    return 0;
  }
  
+ /* Fold a call to __builtin_expect, if we expect that a comparison against
+    the argument will fold to a constant.  In practice, this means a true
+    constant or the address of a non-weak symbol.  ARGLIST is the argument
+    list of the call.  */
+ 
+ static tree
+ fold_builtin_expect (tree arglist)
+ {
+   tree arg, inner;
+ 
+   if (arglist == 0)
+     return 0;
+ 
+   arg = TREE_VALUE (arglist);
+ 
+   /* If the argument isn't invariant, then there's nothing we can do.  */
+   if (!TREE_INVARIANT (arg))
+     return 0;
+ 
+   /* If we're looking at an address of a weak decl, then do not fold.  */
+   inner = arg;
+   STRIP_NOPS (inner);
+   if (TREE_CODE (inner) == ADDR_EXPR)
+     {
+       do
+ 	{
+ 	  inner = TREE_OPERAND (inner, 0);
+ 	}
+       while (TREE_CODE (inner) == COMPONENT_REF
+ 	     || TREE_CODE (inner) == ARRAY_REF);
+       if (DECL_P (inner) && DECL_WEAK (inner))
+ 	return 0;
+     }
+ 
+   /* Otherwise, ARG already has the proper type for the return value.  */
+   return arg;
+ }
+ 
  /* Fold a call to __builtin_classify_type.  */
  
  static tree
  fold_builtin_classify_type (tree arglist)
  {
    if (arglist == 0)
!     return build_int_cst (NULL_TREE, no_type_class);
  
!   return build_int_cst (NULL_TREE,
! 			type_to_class (TREE_TYPE (TREE_VALUE (arglist))));
! }
! 
! /* Fold a call to __builtin_strlen.  */
! 
! static tree
! fold_builtin_strlen (tree arglist)
! {
!   if (!validate_arglist (arglist, POINTER_TYPE, VOID_TYPE))
!     return NULL_TREE;
!   else
!     {
!       tree len = c_strlen (TREE_VALUE (arglist), 0);
! 
!       if (len)
! 	{
! 	  /* Convert from the internal "sizetype" type to "size_t".  */
! 	  if (size_type_node)
! 	    len = fold_convert (size_type_node, len);
! 	  return len;
! 	}
! 
!       return NULL_TREE;
!     }
  }
  
  /* Fold a call to __builtin_inf or __builtin_huge_val.  */
*************** fold_builtin_inf (tree type, int warn)
*** 5594,5601 ****
  {
    REAL_VALUE_TYPE real;
  
    if (!MODE_HAS_INFINITIES (TYPE_MODE (type)) && warn)
!     warning ("target format does not support infinity");
  
    real_inf (&real);
    return build_real (type, real);
--- 5927,5941 ----
  {
    REAL_VALUE_TYPE real;
  
+   /* __builtin_inff is intended to be usable to define INFINITY on all
+      targets.  If an infinity is not available, INFINITY expands "to a
+      positive constant of type float that overflows at translation
+      time", footnote "In this case, using INFINITY will violate the
+      constraint in 6.4.4 and thus require a diagnostic." (C99 7.12#4).
+      Thus we pedwarn to ensure this constraint violation is
+      diagnosed.  */
    if (!MODE_HAS_INFINITIES (TYPE_MODE (type)) && warn)
!     pedwarn ("target format does not support infinity");
  
    real_inf (&real);
    return build_real (type, real);
*************** integer_valued_real_p (tree t)
*** 5686,5691 ****
--- 6026,6034 ----
  	case BUILT_IN_NEARBYINT:
  	case BUILT_IN_NEARBYINTF:
  	case BUILT_IN_NEARBYINTL:
+ 	case BUILT_IN_RINT:
+ 	case BUILT_IN_RINTF:
+ 	case BUILT_IN_RINTL:
  	case BUILT_IN_ROUND:
  	case BUILT_IN_ROUNDF:
  	case BUILT_IN_ROUNDL:
*************** fold_trunc_transparent_mathfn (tree exp)
*** 5741,5760 ****
  	  && (decl = mathfn_built_in (newtype, fcode)))
  	{
  	  arglist =
! 	    build_tree_list (NULL_TREE, fold (convert (newtype, arg0)));
! 	  return convert (ftype,
! 			  build_function_call_expr (decl, arglist));
  	}
      }
    return 0;
  }
  
! /* Fold function call to builtin cabs, cabsf or cabsl.  FNDECL is the
!    function's DECL, ARGLIST is the argument list and TYPE is the return
!    type.  Return NULL_TREE if no simplification can be made.  */
  
  static tree
! fold_builtin_cabs (tree fndecl, tree arglist, tree type)
  {
    tree arg;
  
--- 6084,6142 ----
  	  && (decl = mathfn_built_in (newtype, fcode)))
  	{
  	  arglist =
! 	    build_tree_list (NULL_TREE, fold_convert (newtype, arg0));
! 	  return fold_convert (ftype,
! 			       build_function_call_expr (decl, arglist));
  	}
      }
    return 0;
  }
  
! /* EXP is assumed to be builtin call which can narrow the FP type of
!    the argument, for instance lround((double)f) -> lroundf (f).  */
  
  static tree
! fold_fixed_mathfn (tree exp)
! {
!   tree fndecl = get_callee_fndecl (exp);
!   tree arglist = TREE_OPERAND (exp, 1);
!   enum built_in_function fcode = DECL_FUNCTION_CODE (fndecl);
!   tree arg;
! 
!   if (! validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
!     return 0;
! 
!   arg = TREE_VALUE (arglist);
! 
!   /* If argument is already integer valued, and we don't need to worry
!      about setting errno, there's no need to perform rounding.  */
!   if (! flag_errno_math && integer_valued_real_p (arg))
!     return fold (build1 (FIX_TRUNC_EXPR, TREE_TYPE (exp), arg));
! 
!   if (optimize)
!     {
!       tree ftype = TREE_TYPE (arg);
!       tree arg0 = strip_float_extensions (arg);
!       tree newtype = TREE_TYPE (arg0);
!       tree decl;
! 
!       if (TYPE_PRECISION (newtype) < TYPE_PRECISION (ftype)
! 	  && (decl = mathfn_built_in (newtype, fcode)))
! 	{
! 	  arglist =
! 	    build_tree_list (NULL_TREE, fold_convert (newtype, arg0));
! 	  return build_function_call_expr (decl, arglist);
! 	}
!     }
!   return 0;
! }
! 
! /* Fold function call to builtin cabs, cabsf or cabsl.  ARGLIST
!    is the argument list and TYPE is the return type.  Return
!    NULL_TREE if no if no simplification can be made.  */
! 
! static tree
! fold_builtin_cabs (tree arglist, tree type)
  {
    tree arg;
  
*************** fold_builtin_cabs (tree fndecl, tree arg
*** 5795,5832 ****
        && real_zerop (TREE_OPERAND (arg, 1)))
      return fold (build1 (ABS_EXPR, type, TREE_OPERAND (arg, 0)));
  
!   if (flag_unsafe_math_optimizations)
      {
!       enum built_in_function fcode;
!       tree sqrtfn;
! 
!       fcode = DECL_FUNCTION_CODE (fndecl);
!       if (fcode == BUILT_IN_CABS)
! 	sqrtfn = implicit_built_in_decls[BUILT_IN_SQRT];
!       else if (fcode == BUILT_IN_CABSF)
! 	sqrtfn = implicit_built_in_decls[BUILT_IN_SQRTF];
!       else if (fcode == BUILT_IN_CABSL)
! 	sqrtfn = implicit_built_in_decls[BUILT_IN_SQRTL];
!       else
! 	sqrtfn = NULL_TREE;
  
        if (sqrtfn != NULL_TREE)
  	{
  	  tree rpart, ipart, result, arglist;
  
! 	  arg = save_expr (arg);
  
  	  rpart = fold (build1 (REALPART_EXPR, type, arg));
  	  ipart = fold (build1 (IMAGPART_EXPR, type, arg));
  
! 	  rpart = save_expr (rpart);
! 	  ipart = save_expr (ipart);
  
! 	  result = fold (build (PLUS_EXPR, type,
! 				fold (build (MULT_EXPR, type,
! 					     rpart, rpart)),
! 				fold (build (MULT_EXPR, type,
! 					     ipart, ipart))));
  
  	  arglist = build_tree_list (NULL_TREE, result);
  	  return build_function_call_expr (sqrtfn, arglist);
--- 6177,6205 ----
        && real_zerop (TREE_OPERAND (arg, 1)))
      return fold (build1 (ABS_EXPR, type, TREE_OPERAND (arg, 0)));
  
!   /* Don't do this when optimizing for size.  */
!   if (flag_unsafe_math_optimizations
!       && optimize && !optimize_size)
      {
!       tree sqrtfn = mathfn_built_in (type, BUILT_IN_SQRT);
  
        if (sqrtfn != NULL_TREE)
  	{
  	  tree rpart, ipart, result, arglist;
  
! 	  arg = builtin_save_expr (arg);
  
  	  rpart = fold (build1 (REALPART_EXPR, type, arg));
  	  ipart = fold (build1 (IMAGPART_EXPR, type, arg));
  
! 	  rpart = builtin_save_expr (rpart);
! 	  ipart = builtin_save_expr (ipart);
  
! 	  result = fold (build2 (PLUS_EXPR, type,
! 				 fold (build2 (MULT_EXPR, type,
! 					       rpart, rpart)),
! 				 fold (build2 (MULT_EXPR, type,
! 					       ipart, ipart))));
  
  	  arglist = build_tree_list (NULL_TREE, result);
  	  return build_function_call_expr (sqrtfn, arglist);
*************** fold_builtin_cabs (tree fndecl, tree arg
*** 5836,5841 ****
--- 6209,6446 ----
    return NULL_TREE;
  }
  
+ /* Fold a builtin function call to sqrt, sqrtf, or sqrtl.  Return
+    NULL_TREE if no simplification can be made.  */
+ 
+ static tree
+ fold_builtin_sqrt (tree arglist, tree type)
+ {
+ 
+   enum built_in_function fcode;
+   tree arg = TREE_VALUE (arglist);
+ 
+   if (!validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
+     return NULL_TREE;
+ 
+   /* Optimize sqrt of constant value.  */
+   if (TREE_CODE (arg) == REAL_CST
+       && ! TREE_CONSTANT_OVERFLOW (arg))
+     {
+       REAL_VALUE_TYPE r, x;
+ 
+       x = TREE_REAL_CST (arg);
+       if (real_sqrt (&r, TYPE_MODE (type), &x)
+ 	  || (!flag_trapping_math && !flag_errno_math))
+ 	return build_real (type, r);
+     }
+ 
+   /* Optimize sqrt(expN(x)) = expN(x*0.5).  */
+   fcode = builtin_mathfn_code (arg);
+   if (flag_unsafe_math_optimizations && BUILTIN_EXPONENT_P (fcode))
+     {
+       tree expfn = TREE_OPERAND (TREE_OPERAND (arg, 0), 0);
+       arg = fold (build2 (MULT_EXPR, type,
+ 			  TREE_VALUE (TREE_OPERAND (arg, 1)),
+ 			  build_real (type, dconsthalf)));
+       arglist = build_tree_list (NULL_TREE, arg);
+       return build_function_call_expr (expfn, arglist);
+     }
+ 
+   /* Optimize sqrt(Nroot(x)) -> pow(x,1/(2*N)).  */
+   if (flag_unsafe_math_optimizations && BUILTIN_ROOT_P (fcode))
+     {
+       tree powfn = mathfn_built_in (type, BUILT_IN_POW);
+ 
+       if (powfn)
+ 	{
+ 	  tree arg0 = TREE_VALUE (TREE_OPERAND (arg, 1));
+ 	  tree tree_root;
+ 	  /* The inner root was either sqrt or cbrt.  */
+ 	  REAL_VALUE_TYPE dconstroot =
+ 	    BUILTIN_SQRT_P (fcode) ? dconsthalf : dconstthird;
+ 
+ 	  /* Adjust for the outer root.  */
+ 	  SET_REAL_EXP (&dconstroot, REAL_EXP (&dconstroot) - 1);
+ 	  dconstroot = real_value_truncate (TYPE_MODE (type), dconstroot);
+ 	  tree_root = build_real (type, dconstroot);
+ 	  arglist = tree_cons (NULL_TREE, arg0,
+ 			       build_tree_list (NULL_TREE, tree_root));
+ 	  return build_function_call_expr (powfn, arglist);
+ 	}
+     }
+ 
+   /* Optimize sqrt(pow(x,y)) = pow(|x|,y*0.5).  */
+   if (flag_unsafe_math_optimizations
+       && (fcode == BUILT_IN_POW
+ 	  || fcode == BUILT_IN_POWF
+ 	  || fcode == BUILT_IN_POWL))
+     {
+       tree powfn = TREE_OPERAND (TREE_OPERAND (arg, 0), 0);
+       tree arg0 = TREE_VALUE (TREE_OPERAND (arg, 1));
+       tree arg1 = TREE_VALUE (TREE_CHAIN (TREE_OPERAND (arg, 1)));
+       tree narg1;
+       if (!tree_expr_nonnegative_p (arg0))
+ 	arg0 = build1 (ABS_EXPR, type, arg0);
+       narg1 = fold (build2 (MULT_EXPR, type, arg1,
+ 			    build_real (type, dconsthalf)));
+       arglist = tree_cons (NULL_TREE, arg0,
+ 			   build_tree_list (NULL_TREE, narg1));
+       return build_function_call_expr (powfn, arglist);
+     }
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Fold a builtin function call to cbrt, cbrtf, or cbrtl.  Return
+    NULL_TREE if no simplification can be made.  */
+ static tree
+ fold_builtin_cbrt (tree arglist, tree type)
+ {
+   tree arg = TREE_VALUE (arglist);
+   const enum built_in_function fcode = builtin_mathfn_code (arg);
+ 
+   if (!validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
+     return NULL_TREE;
+ 
+   /* Optimize cbrt of constant value.  */
+   if (real_zerop (arg) || real_onep (arg) || real_minus_onep (arg))
+     return arg;
+ 
+   /* Optimize cbrt(expN(x)) -> expN(x/3).  */
+   if (flag_unsafe_math_optimizations && BUILTIN_EXPONENT_P (fcode))
+     {
+       tree expfn = TREE_OPERAND (TREE_OPERAND (arg, 0), 0);
+       const REAL_VALUE_TYPE third_trunc =
+ 	real_value_truncate (TYPE_MODE (type), dconstthird);
+       arg = fold (build2 (MULT_EXPR, type,
+ 			  TREE_VALUE (TREE_OPERAND (arg, 1)),
+ 			  build_real (type, third_trunc)));
+       arglist = build_tree_list (NULL_TREE, arg);
+       return build_function_call_expr (expfn, arglist);
+     }
+ 
+   /* Optimize cbrt(sqrt(x)) -> pow(x,1/6).  */
+   /* We don't optimize cbrt(cbrt(x)) -> pow(x,1/9) because if
+      x is negative pow will error but cbrt won't.  */
+   if (flag_unsafe_math_optimizations && BUILTIN_SQRT_P (fcode))
+     {
+       tree powfn = mathfn_built_in (type, BUILT_IN_POW);
+ 
+       if (powfn)
+ 	{
+ 	  tree arg0 = TREE_VALUE (TREE_OPERAND (arg, 1));
+ 	  tree tree_root;
+ 	  REAL_VALUE_TYPE dconstroot = dconstthird;
+ 
+ 	  SET_REAL_EXP (&dconstroot, REAL_EXP (&dconstroot) - 1);
+ 	  dconstroot = real_value_truncate (TYPE_MODE (type), dconstroot);
+ 	  tree_root = build_real (type, dconstroot);
+ 	  arglist = tree_cons (NULL_TREE, arg0,
+ 			       build_tree_list (NULL_TREE, tree_root));
+ 	  return build_function_call_expr (powfn, arglist);
+ 	}
+ 
+     }
+   return NULL_TREE;
+ }
+ 
+ /* Fold function call to builtin sin, sinf, or sinl.  Return
+    NULL_TREE if no simplification can be made.  */
+ static tree
+ fold_builtin_sin (tree arglist)
+ {
+   tree arg = TREE_VALUE (arglist);
+ 
+   if (!validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
+     return NULL_TREE;
+ 
+   /* Optimize sin (0.0) = 0.0.  */
+   if (real_zerop (arg))
+     return arg;
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Fold function call to builtin cos, cosf, or cosl.  Return
+    NULL_TREE if no simplification can be made.  */
+ static tree
+ fold_builtin_cos (tree arglist, tree type, tree fndecl)
+ {
+   tree arg = TREE_VALUE (arglist);
+ 
+   if (!validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
+     return NULL_TREE;
+ 
+   /* Optimize cos (0.0) = 1.0.  */
+   if (real_zerop (arg))
+     return build_real (type, dconst1);
+ 
+   /* Optimize cos(-x) into cos (x).  */
+   if (TREE_CODE (arg) == NEGATE_EXPR)
+     {
+       tree args = build_tree_list (NULL_TREE,
+ 				   TREE_OPERAND (arg, 0));
+       return build_function_call_expr (fndecl, args);
+     }
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Fold function call to builtin tan, tanf, or tanl.  Return
+    NULL_TREE if no simplification can be made.  */
+ static tree
+ fold_builtin_tan (tree arglist)
+ {
+   enum built_in_function fcode;
+   tree arg = TREE_VALUE (arglist);
+ 
+   if (!validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
+     return NULL_TREE;
+ 
+   /* Optimize tan(0.0) = 0.0.  */
+   if (real_zerop (arg))
+     return arg;
+ 
+   /* Optimize tan(atan(x)) = x.  */
+   fcode = builtin_mathfn_code (arg);
+   if (flag_unsafe_math_optimizations
+       && (fcode == BUILT_IN_ATAN
+ 	  || fcode == BUILT_IN_ATANF
+ 	  || fcode == BUILT_IN_ATANL))
+     return TREE_VALUE (TREE_OPERAND (arg, 1));
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Fold function call to builtin atan, atanf, or atanl.  Return
+    NULL_TREE if no simplification can be made.  */
+ 
+ static tree
+ fold_builtin_atan (tree arglist, tree type)
+ {
+ 
+   tree arg = TREE_VALUE (arglist);
+ 
+   if (!validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
+     return NULL_TREE;
+ 
+   /* Optimize atan(0.0) = 0.0.  */
+   if (real_zerop (arg))
+     return arg;
+ 
+   /* Optimize atan(1.0) = pi/4.  */
+   if (real_onep (arg))
+     {
+       REAL_VALUE_TYPE cst;
+ 
+       real_convert (&cst, TYPE_MODE (type), &dconstpi);
+       SET_REAL_EXP (&cst, REAL_EXP (&cst) - 2);
+       return build_real (type, cst);
+     }
+ 
+   return NULL_TREE;
+ }
+ 
  /* Fold function call to builtin trunc, truncf or truncl.  Return
     NULL_TREE if no simplification can be made.  */
  
*************** fold_builtin_ceil (tree exp)
*** 5927,5932 ****
--- 6532,6605 ----
    return fold_trunc_transparent_mathfn (exp);
  }
  
+ /* Fold function call to builtin round, roundf or roundl.  Return
+    NULL_TREE if no simplification can be made.  */
+ 
+ static tree
+ fold_builtin_round (tree exp)
+ {
+   tree arglist = TREE_OPERAND (exp, 1);
+   tree arg;
+ 
+   if (! validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
+     return 0;
+ 
+   /* Optimize round of constant value.  */
+   arg = TREE_VALUE (arglist);
+   if (TREE_CODE (arg) == REAL_CST && ! TREE_CONSTANT_OVERFLOW (arg))
+     {
+       REAL_VALUE_TYPE x;
+ 
+       x = TREE_REAL_CST (arg);
+       if (! REAL_VALUE_ISNAN (x) || ! flag_errno_math)
+ 	{
+ 	  tree type = TREE_TYPE (exp);
+ 	  REAL_VALUE_TYPE r;
+ 
+ 	  real_round (&r, TYPE_MODE (type), &x);
+ 	  return build_real (type, r);
+ 	}
+     }
+ 
+   return fold_trunc_transparent_mathfn (exp);
+ }
+ 
+ /* Fold function call to builtin lround, lroundf or lroundl (or the
+    corresponding long long versions).  Return NULL_TREE if no
+    simplification can be made.  */
+ 
+ static tree
+ fold_builtin_lround (tree exp)
+ {
+   tree arglist = TREE_OPERAND (exp, 1);
+   tree arg;
+ 
+   if (! validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
+     return 0;
+ 
+   /* Optimize lround of constant value.  */
+   arg = TREE_VALUE (arglist);
+   if (TREE_CODE (arg) == REAL_CST && ! TREE_CONSTANT_OVERFLOW (arg))
+     {
+       const REAL_VALUE_TYPE x = TREE_REAL_CST (arg);
+ 
+       if (! REAL_VALUE_ISNAN (x) && ! REAL_VALUE_ISINF (x))
+ 	{
+ 	  tree itype = TREE_TYPE (exp), ftype = TREE_TYPE (arg), result;
+ 	  HOST_WIDE_INT hi, lo;
+ 	  REAL_VALUE_TYPE r;
+ 
+ 	  real_round (&r, TYPE_MODE (ftype), &x);
+ 	  REAL_VALUE_TO_INT (&lo, &hi, r);
+ 	  result = build_int_cst_wide (NULL_TREE, lo, hi);
+ 	  if (int_fits_type_p (result, itype))
+ 	    return fold_convert (itype, result);
+ 	}
+     }
+ 
+   return fold_fixed_mathfn (exp);
+ }
+ 
  /* Fold function call to builtin ffs, clz, ctz, popcount and parity
     and their long and long long variants (i.e. ffsl and ffsll).
     Return NULL_TREE if no simplification can be made.  */
*************** fold_builtin_bitop (tree exp)
*** 5947,5953 ****
      {
        HOST_WIDE_INT hi, width, result;
        unsigned HOST_WIDE_INT lo;
!       tree type, t;
  
        type = TREE_TYPE (arg);
        width = TYPE_PRECISION (type);
--- 6620,6626 ----
      {
        HOST_WIDE_INT hi, width, result;
        unsigned HOST_WIDE_INT lo;
!       tree type;
  
        type = TREE_TYPE (arg);
        width = TYPE_PRECISION (type);
*************** fold_builtin_bitop (tree exp)
*** 6024,6035 ****
  	  break;
  
  	default:
! 	  abort();
  	}
  
!       t = build_int_2 (result, 0);
!       TREE_TYPE (t) = TREE_TYPE (exp);
!       return t;
      }
  
    return NULL_TREE;
--- 6697,6706 ----
  	  break;
  
  	default:
! 	  gcc_unreachable ();
  	}
  
!       return build_int_cst (TREE_TYPE (exp), result);
      }
  
    return NULL_TREE;
*************** real_dconstp (tree expr, const REAL_VALU
*** 6051,6058 ****
  }
  
  /* A subroutine of fold_builtin to fold the various logarithmic
!    functions.  EXP is the CALL_EXPR of a call to a builtin log*
!    function.  VALUE is the base of the log* function.  */
  
  static tree
  fold_builtin_logarithm (tree exp, const REAL_VALUE_TYPE *value)
--- 6722,6729 ----
  }
  
  /* A subroutine of fold_builtin to fold the various logarithmic
!    functions.  EXP is the CALL_EXPR of a call to a builtin logN
!    function.  VALUE is the base of the logN function.  */
  
  static tree
  fold_builtin_logarithm (tree exp, const REAL_VALUE_TYPE *value)
*************** fold_builtin_logarithm (tree exp, const 
*** 6065,6072 ****
        tree type = TREE_TYPE (TREE_TYPE (fndecl));
        tree arg = TREE_VALUE (arglist);
        const enum built_in_function fcode = builtin_mathfn_code (arg);
! 	
!       /* Optimize log*(1.0) = 0.0.  */
        if (real_onep (arg))
  	return build_real (type, dconst0);
  
--- 6736,6743 ----
        tree type = TREE_TYPE (TREE_TYPE (fndecl));
        tree arg = TREE_VALUE (arglist);
        const enum built_in_function fcode = builtin_mathfn_code (arg);
! 
!       /* Optimize logN(1.0) = 0.0.  */
        if (real_onep (arg))
  	return build_real (type, dconst0);
  
*************** fold_builtin_logarithm (tree exp, const 
*** 6080,6086 ****
  	  if (real_dconstp (arg, &value_truncate))
  	    return build_real (type, dconst1);
  	}
!       
        /* Special case, optimize logN(expN(x)) = x.  */
        if (flag_unsafe_math_optimizations
  	  && ((value == &dconste
--- 6751,6757 ----
  	  if (real_dconstp (arg, &value_truncate))
  	    return build_real (type, dconst1);
  	}
! 
        /* Special case, optimize logN(expN(x)) = x.  */
        if (flag_unsafe_math_optimizations
  	  && ((value == &dconste
*************** fold_builtin_logarithm (tree exp, const 
*** 6091,6109 ****
  		  && (fcode == BUILT_IN_EXP2
  		      || fcode == BUILT_IN_EXP2F
  		      || fcode == BUILT_IN_EXP2L))
! 	      || (value == &dconst10
! 		  && (fcode == BUILT_IN_EXP10
! 		      || fcode == BUILT_IN_EXP10F
! 		      || fcode == BUILT_IN_EXP10L))))
! 	return convert (type, TREE_VALUE (TREE_OPERAND (arg, 1)));
  
!       /* Optimize log*(func()) for various exponential functions.  We
           want to determine the value "x" and the power "exponent" in
           order to transform logN(x**exponent) into exponent*logN(x).  */
        if (flag_unsafe_math_optimizations)
          {
  	  tree exponent = 0, x = 0;
! 	  
  	  switch (fcode)
  	  {
  	  case BUILT_IN_EXP:
--- 6762,6777 ----
  		  && (fcode == BUILT_IN_EXP2
  		      || fcode == BUILT_IN_EXP2F
  		      || fcode == BUILT_IN_EXP2L))
! 	      || (value == &dconst10 && (BUILTIN_EXP10_P (fcode)))))
! 	return fold_convert (type, TREE_VALUE (TREE_OPERAND (arg, 1)));
  
!       /* Optimize logN(func()) for various exponential functions.  We
           want to determine the value "x" and the power "exponent" in
           order to transform logN(x**exponent) into exponent*logN(x).  */
        if (flag_unsafe_math_optimizations)
          {
  	  tree exponent = 0, x = 0;
! 
  	  switch (fcode)
  	  {
  	  case BUILT_IN_EXP:
*************** fold_builtin_logarithm (tree exp, const 
*** 6163,6176 ****
  	      tree logfn;
  	      arglist = build_tree_list (NULL_TREE, x);
  	      logfn = build_function_call_expr (fndecl, arglist);
! 	      return fold (build (MULT_EXPR, type, exponent, logfn));
  	    }
  	}
      }
  
    return 0;
  }
! 	  
  /* A subroutine of fold_builtin to fold the various exponent
     functions.  EXP is the CALL_EXPR of a call to a builtin function.
     VALUE is the value which will be raised to a power.  */
--- 6831,7014 ----
  	      tree logfn;
  	      arglist = build_tree_list (NULL_TREE, x);
  	      logfn = build_function_call_expr (fndecl, arglist);
! 	      return fold (build2 (MULT_EXPR, type, exponent, logfn));
  	    }
  	}
      }
  
    return 0;
  }
! 
! /* Fold a builtin function call to pow, powf, or powl.  Return
!    NULL_TREE if no simplification can be made.  */
! static tree
! fold_builtin_pow (tree fndecl, tree arglist, tree type)
! {
!   enum built_in_function fcode;
!   tree arg0 = TREE_VALUE (arglist);
!   tree arg1 = TREE_VALUE (TREE_CHAIN (arglist));
! 
!   if (!validate_arglist (arglist, REAL_TYPE, REAL_TYPE, VOID_TYPE))
!     return NULL_TREE;
! 
!   /* Optimize pow(1.0,y) = 1.0.  */
!   if (real_onep (arg0))
!     return omit_one_operand (type, build_real (type, dconst1), arg1);
! 
!   if (TREE_CODE (arg1) == REAL_CST
!       && ! TREE_CONSTANT_OVERFLOW (arg1))
!     {
!       REAL_VALUE_TYPE cint;
!       REAL_VALUE_TYPE c;
!       HOST_WIDE_INT n;
! 
!       c = TREE_REAL_CST (arg1);
! 
!       /* Optimize pow(x,0.0) = 1.0.  */
!       if (REAL_VALUES_EQUAL (c, dconst0))
! 	return omit_one_operand (type, build_real (type, dconst1),
! 				 arg0);
! 
!       /* Optimize pow(x,1.0) = x.  */
!       if (REAL_VALUES_EQUAL (c, dconst1))
! 	return arg0;
! 
!       /* Optimize pow(x,-1.0) = 1.0/x.  */
!       if (REAL_VALUES_EQUAL (c, dconstm1))
! 	return fold (build2 (RDIV_EXPR, type,
! 			     build_real (type, dconst1), arg0));
! 
!       /* Optimize pow(x,0.5) = sqrt(x).  */
!       if (flag_unsafe_math_optimizations
! 	  && REAL_VALUES_EQUAL (c, dconsthalf))
! 	{
! 	  tree sqrtfn = mathfn_built_in (type, BUILT_IN_SQRT);
! 
! 	  if (sqrtfn != NULL_TREE)
! 	    {
! 	      tree arglist = build_tree_list (NULL_TREE, arg0);
! 	      return build_function_call_expr (sqrtfn, arglist);
! 	    }
! 	}
! 
!       /* Check for an integer exponent.  */
!       n = real_to_integer (&c);
!       real_from_integer (&cint, VOIDmode, n, n < 0 ? -1 : 0, 0);
!       if (real_identical (&c, &cint))
! 	{
! 	  /* Attempt to evaluate pow at compile-time.  */
! 	  if (TREE_CODE (arg0) == REAL_CST
! 	      && ! TREE_CONSTANT_OVERFLOW (arg0))
! 	    {
! 	      REAL_VALUE_TYPE x;
! 	      bool inexact;
! 
! 	      x = TREE_REAL_CST (arg0);
! 	      inexact = real_powi (&x, TYPE_MODE (type), &x, n);
! 	      if (flag_unsafe_math_optimizations || !inexact)
! 		return build_real (type, x);
! 	    }
! 
! 	  /* Strip sign ops from even integer powers.  */
! 	  if ((n & 1) == 0 && flag_unsafe_math_optimizations)
! 	    {
! 	      tree narg0 = fold_strip_sign_ops (arg0);
! 	      if (narg0)
! 		{
! 		  arglist = build_tree_list (NULL_TREE, arg1);
! 		  arglist = tree_cons (NULL_TREE, narg0, arglist);
! 		  return build_function_call_expr (fndecl, arglist);
! 		}
! 	    }
! 	}
!     }
! 
!   /* Optimize pow(expN(x),y) = expN(x*y).  */
!   fcode = builtin_mathfn_code (arg0);
!   if (flag_unsafe_math_optimizations && BUILTIN_EXPONENT_P (fcode))
!     {
!       tree expfn = TREE_OPERAND (TREE_OPERAND (arg0, 0), 0);
!       tree arg = TREE_VALUE (TREE_OPERAND (arg0, 1));
!       arg = fold (build2 (MULT_EXPR, type, arg, arg1));
!       arglist = build_tree_list (NULL_TREE, arg);
!       return build_function_call_expr (expfn, arglist);
!     }
! 
!   /* Optimize pow(sqrt(x),y) = pow(x,y*0.5).  */
!   if (flag_unsafe_math_optimizations && BUILTIN_SQRT_P (fcode))
!     {
!       tree narg0 = TREE_VALUE (TREE_OPERAND (arg0, 1));
!       tree narg1 = fold (build2 (MULT_EXPR, type, arg1,
! 				 build_real (type, dconsthalf)));
! 
!       arglist = tree_cons (NULL_TREE, narg0,
! 			   build_tree_list (NULL_TREE, narg1));
!       return build_function_call_expr (fndecl, arglist);
!     }
! 
!   /* Optimize pow(pow(x,y),z) = pow(x,y*z).  */
!   if (flag_unsafe_math_optimizations
!       && (fcode == BUILT_IN_POW
! 	  || fcode == BUILT_IN_POWF
! 	  || fcode == BUILT_IN_POWL))
!     {
!       tree arg00 = TREE_VALUE (TREE_OPERAND (arg0, 1));
!       tree arg01 = TREE_VALUE (TREE_CHAIN (TREE_OPERAND (arg0, 1)));
!       tree narg1 = fold (build2 (MULT_EXPR, type, arg01, arg1));
!       arglist = tree_cons (NULL_TREE, arg00,
! 			   build_tree_list (NULL_TREE, narg1));
!       return build_function_call_expr (fndecl, arglist);
!     }
!   return NULL_TREE;
! }
! 
! /* Fold a builtin function call to powi, powif, or powil.  Return
!    NULL_TREE if no simplification can be made.  */
! static tree
! fold_builtin_powi (tree fndecl ATTRIBUTE_UNUSED, tree arglist, tree type)
! {
!   tree arg0 = TREE_VALUE (arglist);
!   tree arg1 = TREE_VALUE (TREE_CHAIN (arglist));
! 
!   if (!validate_arglist (arglist, REAL_TYPE, INTEGER_TYPE, VOID_TYPE))
!     return NULL_TREE;
! 
!   /* Optimize pow(1.0,y) = 1.0.  */
!   if (real_onep (arg0))
!     return omit_one_operand (type, build_real (type, dconst1), arg1);
! 
!   if (host_integerp (arg1, 0))
!     {
!       HOST_WIDE_INT c = TREE_INT_CST_LOW (arg1);
! 
!       /* Evaluate powi at compile-time.  */
!       if (TREE_CODE (arg0) == REAL_CST
! 	  && ! TREE_CONSTANT_OVERFLOW (arg0))
! 	{
! 	  REAL_VALUE_TYPE x;
! 	  x = TREE_REAL_CST (arg0);
! 	  real_powi (&x, TYPE_MODE (type), &x, c);
! 	  return build_real (type, x);
! 	}
! 
!       /* Optimize pow(x,0) = 1.0.  */
!       if (c == 0)
! 	return omit_one_operand (type, build_real (type, dconst1),
! 				 arg0);
! 
!       /* Optimize pow(x,1) = x.  */
!       if (c == 1)
! 	return arg0;
! 
!       /* Optimize pow(x,-1) = 1.0/x.  */
!       if (c == -1)
! 	return fold (build2 (RDIV_EXPR, type,
! 			     build_real (type, dconst1), arg0));
!     }
! 
!   return NULL_TREE;
! }
! 
  /* A subroutine of fold_builtin to fold the various exponent
     functions.  EXP is the CALL_EXPR of a call to a builtin function.
     VALUE is the value which will be raised to a power.  */
*************** fold_builtin_exponent (tree exp, const R
*** 6238,6244 ****
  		  && (fcode == BUILT_IN_LOG10
  		      || fcode == BUILT_IN_LOG10F
  		      || fcode == BUILT_IN_LOG10L)))
! 	    return convert (type, TREE_VALUE (TREE_OPERAND (arg, 1)));
  	}
      }
  
--- 7076,7082 ----
  		  && (fcode == BUILT_IN_LOG10
  		      || fcode == BUILT_IN_LOG10F
  		      || fcode == BUILT_IN_LOG10L)))
! 	    return fold_convert (type, TREE_VALUE (TREE_OPERAND (arg, 1)));
  	}
      }
  
*************** fold_builtin_memcpy (tree exp)
*** 6277,6307 ****
     NULL_TREE if no simplification can be made.  */
  
  static tree
! fold_builtin_mempcpy (tree exp)
  {
!   tree arglist = TREE_OPERAND (exp, 1);
!   tree dest, src, len;
! 
!   if (!validate_arglist (arglist,
! 			 POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
!     return 0;
  
!   dest = TREE_VALUE (arglist);
!   src = TREE_VALUE (TREE_CHAIN (arglist));
!   len = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist)));
  
!   /* If the LEN parameter is zero, return DEST.  */
!   if (integer_zerop (len))
!     return omit_one_operand (TREE_TYPE (exp), dest, src);
  
!   /* If SRC and DEST are the same (and not volatile), return DEST+LEN.  */
!   if (operand_equal_p (src, dest, 0))
!     {
!       tree temp = convert (TREE_TYPE (dest), len);
!       temp = fold (build (PLUS_EXPR, TREE_TYPE (dest), dest, len));
!       return convert (TREE_TYPE (exp), temp);
      }
- 
    return 0;
  }
  
--- 7115,7148 ----
     NULL_TREE if no simplification can be made.  */
  
  static tree
! fold_builtin_mempcpy (tree arglist, tree type, int endp)
  {
!   if (validate_arglist (arglist,
! 			POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
!     {
!       tree dest = TREE_VALUE (arglist);
!       tree src = TREE_VALUE (TREE_CHAIN (arglist));
!       tree len = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist)));
  
!       /* If the LEN parameter is zero, return DEST.  */
!       if (integer_zerop (len))
! 	return omit_one_operand (type, dest, src);
  
!       /* If SRC and DEST are the same (and not volatile), return DEST+LEN.  */
!       if (operand_equal_p (src, dest, 0))
!         {
! 	  if (endp == 0)
! 	    return omit_one_operand (type, dest, len);
  
! 	  if (endp == 2)
! 	    len = fold (build2 (MINUS_EXPR, TREE_TYPE (len), len,
! 				ssize_int (1)));
!       
! 	  len = fold_convert (TREE_TYPE (dest), len);
! 	  len = fold (build2 (PLUS_EXPR, TREE_TYPE (dest), dest, len));
! 	  return fold_convert (type, len);
! 	}
      }
    return 0;
  }
  
*************** fold_builtin_mempcpy (tree exp)
*** 6309,6317 ****
     NULL_TREE if no simplification can be made.  */
  
  static tree
! fold_builtin_memmove (tree exp)
  {
-   tree arglist = TREE_OPERAND (exp, 1);
    tree dest, src, len;
  
    if (!validate_arglist (arglist,
--- 7150,7157 ----
     NULL_TREE if no simplification can be made.  */
  
  static tree
! fold_builtin_memmove (tree arglist, tree type)
  {
    tree dest, src, len;
  
    if (!validate_arglist (arglist,
*************** fold_builtin_memmove (tree exp)
*** 6324,6346 ****
  
    /* If the LEN parameter is zero, return DEST.  */
    if (integer_zerop (len))
!     return omit_one_operand (TREE_TYPE (exp), dest, src);
  
    /* If SRC and DEST are the same (and not volatile), return DEST.  */
    if (operand_equal_p (src, dest, 0))
!     return omit_one_operand (TREE_TYPE (exp), dest, len);
  
    return 0;
  }
  
! /* Fold function call to builtin strcpy.  Return
!    NULL_TREE if no simplification can be made.  */
  
! static tree
! fold_builtin_strcpy (tree exp)
  {
    tree arglist = TREE_OPERAND (exp, 1);
!   tree dest, src;
  
    if (!validate_arglist (arglist,
  			 POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
--- 7164,7187 ----
  
    /* If the LEN parameter is zero, return DEST.  */
    if (integer_zerop (len))
!     return omit_one_operand (type, dest, src);
  
    /* If SRC and DEST are the same (and not volatile), return DEST.  */
    if (operand_equal_p (src, dest, 0))
!     return omit_one_operand (type, dest, len);
  
    return 0;
  }
  
! /* Fold function call to builtin strcpy.  If LEN is not NULL, it represents
!    the length of the string to be copied.  Return NULL_TREE if no
!    simplification can be made.  */
  
! tree
! fold_builtin_strcpy (tree exp, tree len)
  {
    tree arglist = TREE_OPERAND (exp, 1);
!   tree dest, src, fn;
  
    if (!validate_arglist (arglist,
  			 POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
*************** fold_builtin_strcpy (tree exp)
*** 6351,6369 ****
  
    /* If SRC and DEST are the same (and not volatile), return DEST.  */
    if (operand_equal_p (src, dest, 0))
!     return convert (TREE_TYPE (exp), dest);
  
!   return 0;
  }
  
! /* Fold function call to builtin strncpy.  Return
!    NULL_TREE if no simplification can be made.  */
  
! static tree
! fold_builtin_strncpy (tree exp)
  {
    tree arglist = TREE_OPERAND (exp, 1);
!   tree dest, src, len;
  
    if (!validate_arglist (arglist,
  			 POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
--- 7192,7230 ----
  
    /* If SRC and DEST are the same (and not volatile), return DEST.  */
    if (operand_equal_p (src, dest, 0))
!     return fold_convert (TREE_TYPE (exp), dest);
  
!   if (optimize_size)
!     return 0;
! 
!   fn = implicit_built_in_decls[BUILT_IN_MEMCPY];
!   if (!fn)
!     return 0;
! 
!   if (!len)
!     {
!       len = c_strlen (src, 1);
!       if (! len || TREE_SIDE_EFFECTS (len))
! 	return 0;
!     }
! 
!   len = size_binop (PLUS_EXPR, len, ssize_int (1));
!   arglist = build_tree_list (NULL_TREE, len);
!   arglist = tree_cons (NULL_TREE, src, arglist);
!   arglist = tree_cons (NULL_TREE, dest, arglist);
!   return fold_convert (TREE_TYPE (exp),
! 		       build_function_call_expr (fn, arglist));
  }
  
! /* Fold function call to builtin strncpy.  If SLEN is not NULL, it represents
!    the length of the source string.  Return NULL_TREE if no simplification
!    can be made.  */
  
! tree
! fold_builtin_strncpy (tree exp, tree slen)
  {
    tree arglist = TREE_OPERAND (exp, 1);
!   tree dest, src, len, fn;
  
    if (!validate_arglist (arglist,
  			 POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
*************** fold_builtin_strncpy (tree exp)
*** 6377,6393 ****
    if (integer_zerop (len))
      return omit_one_operand (TREE_TYPE (exp), dest, src);
  
!   return 0;
  }
  
  /* Fold function call to builtin memcmp.  Return
     NULL_TREE if no simplification can be made.  */
  
  static tree
! fold_builtin_memcmp (tree exp)
  {
-   tree arglist = TREE_OPERAND (exp, 1);
    tree arg1, arg2, len;
  
    if (!validate_arglist (arglist,
  			 POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
--- 7238,7279 ----
    if (integer_zerop (len))
      return omit_one_operand (TREE_TYPE (exp), dest, src);
  
!   /* We can't compare slen with len as constants below if len is not a
!      constant.  */
!   if (len == 0 || TREE_CODE (len) != INTEGER_CST)
!     return 0;
! 
!   if (!slen)
!     slen = c_strlen (src, 1);
! 
!   /* Now, we must be passed a constant src ptr parameter.  */
!   if (slen == 0 || TREE_CODE (slen) != INTEGER_CST)
!     return 0;
! 
!   slen = size_binop (PLUS_EXPR, slen, ssize_int (1));
! 
!   /* We do not support simplification of this case, though we do
!      support it when expanding trees into RTL.  */
!   /* FIXME: generate a call to __builtin_memset.  */
!   if (tree_int_cst_lt (slen, len))
!     return 0;
! 
!   /* OK transform into builtin memcpy.  */
!   fn = implicit_built_in_decls[BUILT_IN_MEMCPY];
!   if (!fn)
!     return 0;
!   return fold_convert (TREE_TYPE (exp),
! 		       build_function_call_expr (fn, arglist));
  }
  
  /* Fold function call to builtin memcmp.  Return
     NULL_TREE if no simplification can be made.  */
  
  static tree
! fold_builtin_memcmp (tree arglist)
  {
    tree arg1, arg2, len;
+   const char *p1, *p2;
  
    if (!validate_arglist (arglist,
  			 POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
*************** fold_builtin_memcmp (tree exp)
*** 6399,6412 ****
  
    /* If the LEN parameter is zero, return zero.  */
    if (integer_zerop (len))
!     {
!       tree temp = omit_one_operand (TREE_TYPE (exp), integer_zero_node, arg2);
!       return omit_one_operand (TREE_TYPE (exp), temp, arg1);
!     }
  
    /* If ARG1 and ARG2 are the same (and not volatile), return zero.  */
    if (operand_equal_p (arg1, arg2, 0))
!     return omit_one_operand (TREE_TYPE (exp), integer_zero_node, len);
  
    return 0;
  }
--- 7285,7332 ----
  
    /* If the LEN parameter is zero, return zero.  */
    if (integer_zerop (len))
!     return omit_two_operands (integer_type_node, integer_zero_node,
! 			      arg1, arg2);
  
    /* If ARG1 and ARG2 are the same (and not volatile), return zero.  */
    if (operand_equal_p (arg1, arg2, 0))
!     return omit_one_operand (integer_type_node, integer_zero_node, len);
! 
!   p1 = c_getstr (arg1);
!   p2 = c_getstr (arg2);
! 
!   /* If all arguments are constant, and the value of len is not greater
!      than the lengths of arg1 and arg2, evaluate at compile-time.  */
!   if (host_integerp (len, 1) && p1 && p2
!       && compare_tree_int (len, strlen (p1) + 1) <= 0
!       && compare_tree_int (len, strlen (p2) + 1) <= 0)
!     {
!       const int r = memcmp (p1, p2, tree_low_cst (len, 1));
! 
!       if (r > 0)
! 	return integer_one_node;
!       else if (r < 0)
! 	return integer_minus_one_node;
!       else
! 	return integer_zero_node;
!     }
! 
!   /* If len parameter is one, return an expression corresponding to
!      (*(const unsigned char*)arg1 - (const unsigned char*)arg2).  */
!   if (host_integerp (len, 1) && tree_low_cst (len, 1) == 1)
!     {
!       tree cst_uchar_node = build_type_variant (unsigned_char_type_node, 1, 0);
!       tree cst_uchar_ptr_node = build_pointer_type (cst_uchar_node);
!       tree ind1 = fold_convert (integer_type_node,
! 				build1 (INDIRECT_REF, cst_uchar_node,
! 					fold_convert (cst_uchar_ptr_node,
! 						      arg1)));
!       tree ind2 = fold_convert (integer_type_node,
! 				build1 (INDIRECT_REF, cst_uchar_node,
! 					fold_convert (cst_uchar_ptr_node,
! 						      arg2)));
!       return fold (build2 (MINUS_EXPR, integer_type_node, ind1, ind2));
!     }
  
    return 0;
  }
*************** fold_builtin_memcmp (tree exp)
*** 6415,6428 ****
     NULL_TREE if no simplification can be made.  */
  
  static tree
! fold_builtin_strcmp (tree exp)
  {
-   tree arglist = TREE_OPERAND (exp, 1);
    tree arg1, arg2;
    const char *p1, *p2;
  
!   if (!validate_arglist (arglist,
! 			 POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
      return 0;
  
    arg1 = TREE_VALUE (arglist);
--- 7335,7346 ----
     NULL_TREE if no simplification can be made.  */
  
  static tree
! fold_builtin_strcmp (tree arglist)
  {
    tree arg1, arg2;
    const char *p1, *p2;
  
!   if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
      return 0;
  
    arg1 = TREE_VALUE (arglist);
*************** fold_builtin_strcmp (tree exp)
*** 6430,6451 ****
  
    /* If ARG1 and ARG2 are the same (and not volatile), return zero.  */
    if (operand_equal_p (arg1, arg2, 0))
!     return convert (TREE_TYPE (exp), integer_zero_node);
  
    p1 = c_getstr (arg1);
    p2 = c_getstr (arg2);
  
    if (p1 && p2)
      {
-       tree temp;
        const int i = strcmp (p1, p2);
        if (i < 0)
! 	temp = integer_minus_one_node;
        else if (i > 0)
! 	temp = integer_one_node;
        else
! 	temp = integer_zero_node;
!       return convert (TREE_TYPE (exp), temp);
      }
  
    return 0;
--- 7348,7390 ----
  
    /* If ARG1 and ARG2 are the same (and not volatile), return zero.  */
    if (operand_equal_p (arg1, arg2, 0))
!     return integer_zero_node;
  
    p1 = c_getstr (arg1);
    p2 = c_getstr (arg2);
  
    if (p1 && p2)
      {
        const int i = strcmp (p1, p2);
        if (i < 0)
! 	return integer_minus_one_node;
        else if (i > 0)
! 	return integer_one_node;
        else
! 	return integer_zero_node;
!     }
! 
!   /* If the second arg is "", return *(const unsigned char*)arg1.  */
!   if (p2 && *p2 == '\0')
!     {
!       tree cst_uchar_node = build_type_variant (unsigned_char_type_node, 1, 0);
!       tree cst_uchar_ptr_node = build_pointer_type (cst_uchar_node);
!       return fold_convert (integer_type_node,
! 			   build1 (INDIRECT_REF, cst_uchar_node,
! 				   fold_convert (cst_uchar_ptr_node,
! 						 arg1)));
!     }
! 
!   /* If the first arg is "", return -*(const unsigned char*)arg2.  */
!   if (p1 && *p1 == '\0')
!     {
!       tree cst_uchar_node = build_type_variant (unsigned_char_type_node, 1, 0);
!       tree cst_uchar_ptr_node = build_pointer_type (cst_uchar_node);
!       tree temp = fold_convert (integer_type_node,
! 				build1 (INDIRECT_REF, cst_uchar_node,
! 					fold_convert (cst_uchar_ptr_node,
! 						      arg2)));
!       return fold (build1 (NEGATE_EXPR, integer_type_node, temp));
      }
  
    return 0;
*************** fold_builtin_strcmp (tree exp)
*** 6455,6463 ****
     NULL_TREE if no simplification can be made.  */
  
  static tree
! fold_builtin_strncmp (tree exp)
  {
-   tree arglist = TREE_OPERAND (exp, 1);
    tree arg1, arg2, len;
    const char *p1, *p2;
  
--- 7394,7401 ----
     NULL_TREE if no simplification can be made.  */
  
  static tree
! fold_builtin_strncmp (tree arglist)
  {
    tree arg1, arg2, len;
    const char *p1, *p2;
  
*************** fold_builtin_strncmp (tree exp)
*** 6471,6646 ****
  
    /* If the LEN parameter is zero, return zero.  */
    if (integer_zerop (len))
!     {
!       tree temp = omit_one_operand (TREE_TYPE (exp), integer_zero_node, arg2);
!       return omit_one_operand (TREE_TYPE (exp), temp, arg1);
!     }
  
    /* If ARG1 and ARG2 are the same (and not volatile), return zero.  */
    if (operand_equal_p (arg1, arg2, 0))
!     return omit_one_operand (TREE_TYPE (exp), integer_zero_node, len);
  
    p1 = c_getstr (arg1);
    p2 = c_getstr (arg2);
  
    if (host_integerp (len, 1) && p1 && p2)
      {
-       tree temp;
        const int i = strncmp (p1, p2, tree_low_cst (len, 1));
!       if (i < 0)
! 	temp = integer_minus_one_node;
!       else if (i > 0)
! 	temp = integer_one_node;
        else
! 	temp = integer_zero_node;
!       return convert (TREE_TYPE (exp), temp);
      }
  
    return 0;
  }
  
! /* Used by constant folding to eliminate some builtin calls early.  EXP is
!    the CALL_EXPR of a call to a builtin function.  */
  
! tree
! fold_builtin (tree exp)
  {
    tree fndecl = get_callee_fndecl (exp);
    tree arglist = TREE_OPERAND (exp, 1);
    tree type = TREE_TYPE (TREE_TYPE (fndecl));
  
    if (DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_MD)
!     return 0;
  
!   switch (DECL_FUNCTION_CODE (fndecl))
      {
      case BUILT_IN_CONSTANT_P:
!       return fold_builtin_constant_p (arglist);
  
      case BUILT_IN_CLASSIFY_TYPE:
        return fold_builtin_classify_type (arglist);
  
      case BUILT_IN_STRLEN:
!       if (validate_arglist (arglist, POINTER_TYPE, VOID_TYPE))
! 	{
! 	  tree len = c_strlen (TREE_VALUE (arglist), 0);
! 	  if (len)
! 	    {
! 	      /* Convert from the internal "sizetype" type to "size_t".  */
! 	      if (size_type_node)
! 		len = convert (size_type_node, len);
! 	      return len;
! 	    }
! 	}
!       break;
  
      case BUILT_IN_FABS:
      case BUILT_IN_FABSF:
      case BUILT_IN_FABSL:
!       if (validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
! 	return fold (build1 (ABS_EXPR, type, TREE_VALUE (arglist)));
        break;
  
      case BUILT_IN_CABS:
      case BUILT_IN_CABSF:
      case BUILT_IN_CABSL:
!       return fold_builtin_cabs (fndecl, arglist, type);
  
      case BUILT_IN_SQRT:
      case BUILT_IN_SQRTF:
      case BUILT_IN_SQRTL:
!       if (validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
! 	{
! 	  enum built_in_function fcode;
! 	  tree arg = TREE_VALUE (arglist);
! 
! 	  /* Optimize sqrt of constant value.  */
! 	  if (TREE_CODE (arg) == REAL_CST
! 	      && ! TREE_CONSTANT_OVERFLOW (arg))
! 	    {
! 	      REAL_VALUE_TYPE r, x;
! 
! 	      x = TREE_REAL_CST (arg);
! 	      if (real_sqrt (&r, TYPE_MODE (type), &x)
! 		  || (!flag_trapping_math && !flag_errno_math))
! 		return build_real (type, r);
! 	    }
! 
! 	  /* Optimize sqrt(exp(x)) = exp(x*0.5).  */
! 	  fcode = builtin_mathfn_code (arg);
! 	  if (flag_unsafe_math_optimizations
! 	      && (fcode == BUILT_IN_EXP
! 		  || fcode == BUILT_IN_EXPF
! 		  || fcode == BUILT_IN_EXPL))
! 	    {
! 	      tree expfn = TREE_OPERAND (TREE_OPERAND (arg, 0), 0);
! 	      arg = fold (build (MULT_EXPR, type,
! 				 TREE_VALUE (TREE_OPERAND (arg, 1)),
! 				 build_real (type, dconsthalf)));
! 	      arglist = build_tree_list (NULL_TREE, arg);
! 	      return build_function_call_expr (expfn, arglist);
! 	    }
  
! 	  /* Optimize sqrt(pow(x,y)) = pow(x,y*0.5).  */
! 	  if (flag_unsafe_math_optimizations
! 	      && (fcode == BUILT_IN_POW
! 		  || fcode == BUILT_IN_POWF
! 		  || fcode == BUILT_IN_POWL))
! 	    {
! 	      tree powfn = TREE_OPERAND (TREE_OPERAND (arg, 0), 0);
! 	      tree arg0 = TREE_VALUE (TREE_OPERAND (arg, 1));
! 	      tree arg1 = TREE_VALUE (TREE_CHAIN (TREE_OPERAND (arg, 1)));
! 	      tree narg1 = fold (build (MULT_EXPR, type, arg1,
! 					build_real (type, dconsthalf)));
! 	      arglist = tree_cons (NULL_TREE, arg0,
! 				   build_tree_list (NULL_TREE, narg1));
! 	      return build_function_call_expr (powfn, arglist);
! 	    }
! 	}
!       break;
  
      case BUILT_IN_SIN:
      case BUILT_IN_SINF:
      case BUILT_IN_SINL:
!       if (validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
! 	{
! 	  tree arg = TREE_VALUE (arglist);
! 
! 	  /* Optimize sin(0.0) = 0.0.  */
! 	  if (real_zerop (arg))
! 	    return arg;
! 	}
!       break;
  
      case BUILT_IN_COS:
      case BUILT_IN_COSF:
      case BUILT_IN_COSL:
!       if (validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
! 	{
! 	  tree arg = TREE_VALUE (arglist);
! 
! 	  /* Optimize cos(0.0) = 1.0.  */
! 	  if (real_zerop (arg))
! 	    return build_real (type, dconst1);
! 
! 	  /* Optimize cos(-x) into cos(x).  */
! 	  if (TREE_CODE (arg) == NEGATE_EXPR)
! 	    {
! 	      tree arglist = build_tree_list (NULL_TREE,
! 					      TREE_OPERAND (arg, 0));
! 	      return build_function_call_expr (fndecl, arglist);
! 	    }
! 	}
!       break;
  
      case BUILT_IN_EXP:
      case BUILT_IN_EXPF:
      case BUILT_IN_EXPL:
        return fold_builtin_exponent (exp, &dconste);
      case BUILT_IN_EXP2:
      case BUILT_IN_EXP2F:
      case BUILT_IN_EXP2L:
        return fold_builtin_exponent (exp, &dconst2);
      case BUILT_IN_EXP10:
      case BUILT_IN_EXP10F:
      case BUILT_IN_EXP10L:
--- 7409,8044 ----
  
    /* If the LEN parameter is zero, return zero.  */
    if (integer_zerop (len))
!     return omit_two_operands (integer_type_node, integer_zero_node,
! 			      arg1, arg2);
  
    /* If ARG1 and ARG2 are the same (and not volatile), return zero.  */
    if (operand_equal_p (arg1, arg2, 0))
!     return omit_one_operand (integer_type_node, integer_zero_node, len);
  
    p1 = c_getstr (arg1);
    p2 = c_getstr (arg2);
  
    if (host_integerp (len, 1) && p1 && p2)
      {
        const int i = strncmp (p1, p2, tree_low_cst (len, 1));
!       if (i > 0)
! 	return integer_one_node;
!       else if (i < 0)
! 	return integer_minus_one_node;
        else
! 	return integer_zero_node;
!     }
! 
!   /* If the second arg is "", and the length is greater than zero,
!      return *(const unsigned char*)arg1.  */
!   if (p2 && *p2 == '\0'
!       && TREE_CODE (len) == INTEGER_CST
!       && tree_int_cst_sgn (len) == 1)
!     {
!       tree cst_uchar_node = build_type_variant (unsigned_char_type_node, 1, 0);
!       tree cst_uchar_ptr_node = build_pointer_type (cst_uchar_node);
!       return fold_convert (integer_type_node,
! 			   build1 (INDIRECT_REF, cst_uchar_node,
! 				   fold_convert (cst_uchar_ptr_node,
! 						 arg1)));
!     }
! 
!   /* If the first arg is "", and the length is greater than zero,
!      return -*(const unsigned char*)arg2.  */
!   if (p1 && *p1 == '\0'
!       && TREE_CODE (len) == INTEGER_CST
!       && tree_int_cst_sgn (len) == 1)
!     {
!       tree cst_uchar_node = build_type_variant (unsigned_char_type_node, 1, 0);
!       tree cst_uchar_ptr_node = build_pointer_type (cst_uchar_node);
!       tree temp = fold_convert (integer_type_node,
! 				build1 (INDIRECT_REF, cst_uchar_node,
! 					fold_convert (cst_uchar_ptr_node,
! 						      arg2)));
!       return fold (build1 (NEGATE_EXPR, integer_type_node, temp));
!     }
! 
!   /* If len parameter is one, return an expression corresponding to
!      (*(const unsigned char*)arg1 - (const unsigned char*)arg2).  */
!   if (host_integerp (len, 1) && tree_low_cst (len, 1) == 1)
!     {
!       tree cst_uchar_node = build_type_variant (unsigned_char_type_node, 1, 0);
!       tree cst_uchar_ptr_node = build_pointer_type (cst_uchar_node);
!       tree ind1 = fold_convert (integer_type_node,
! 				build1 (INDIRECT_REF, cst_uchar_node,
! 					fold_convert (cst_uchar_ptr_node,
! 						      arg1)));
!       tree ind2 = fold_convert (integer_type_node,
! 				build1 (INDIRECT_REF, cst_uchar_node,
! 					fold_convert (cst_uchar_ptr_node,
! 						      arg2)));
!       return fold (build2 (MINUS_EXPR, integer_type_node, ind1, ind2));
      }
  
    return 0;
  }
  
! /* Fold function call to builtin signbit, signbitf or signbitl.  Return
!    NULL_TREE if no simplification can be made.  */
  
! static tree
! fold_builtin_signbit (tree exp)
! {
!   tree arglist = TREE_OPERAND (exp, 1);
!   tree arg, temp;
! 
!   if (!validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
!     return NULL_TREE;
! 
!   arg = TREE_VALUE (arglist);
! 
!   /* If ARG is a compile-time constant, determine the result.  */
!   if (TREE_CODE (arg) == REAL_CST
!       && !TREE_CONSTANT_OVERFLOW (arg))
!     {
!       REAL_VALUE_TYPE c;
! 
!       c = TREE_REAL_CST (arg);
!       temp = REAL_VALUE_NEGATIVE (c) ? integer_one_node : integer_zero_node;
!       return fold_convert (TREE_TYPE (exp), temp);
!     }
! 
!   /* If ARG is non-negative, the result is always zero.  */
!   if (tree_expr_nonnegative_p (arg))
!     return omit_one_operand (TREE_TYPE (exp), integer_zero_node, arg);
! 
!   /* If ARG's format doesn't have signed zeros, return "arg < 0.0".  */
!   if (!HONOR_SIGNED_ZEROS (TYPE_MODE (TREE_TYPE (arg))))
!     return fold (build2 (LT_EXPR, TREE_TYPE (exp), arg,
! 			 build_real (TREE_TYPE (arg), dconst0)));
! 
!   return NULL_TREE;
! }
! 
! /* Fold function call to builtin copysign, copysignf or copysignl.
!    Return NULL_TREE if no simplification can be made.  */
! 
! static tree
! fold_builtin_copysign (tree fndecl, tree arglist, tree type)
! {
!   tree arg1, arg2, tem;
! 
!   if (!validate_arglist (arglist, REAL_TYPE, REAL_TYPE, VOID_TYPE))
!     return NULL_TREE;
! 
!   arg1 = TREE_VALUE (arglist);
!   arg2 = TREE_VALUE (TREE_CHAIN (arglist));
! 
!   /* copysign(X,X) is X.  */
!   if (operand_equal_p (arg1, arg2, 0))
!     return fold_convert (type, arg1);
! 
!   /* If ARG1 and ARG2 are compile-time constants, determine the result.  */
!   if (TREE_CODE (arg1) == REAL_CST
!       && TREE_CODE (arg2) == REAL_CST
!       && !TREE_CONSTANT_OVERFLOW (arg1)
!       && !TREE_CONSTANT_OVERFLOW (arg2))
!     {
!       REAL_VALUE_TYPE c1, c2;
! 
!       c1 = TREE_REAL_CST (arg1);
!       c2 = TREE_REAL_CST (arg2);
!       real_copysign (&c1, &c2);
!       return build_real (type, c1);
!       c1.sign = c2.sign;
!     }
! 
!   /* copysign(X, Y) is fabs(X) when Y is always non-negative.
!      Remember to evaluate Y for side-effects.  */
!   if (tree_expr_nonnegative_p (arg2))
!     return omit_one_operand (type,
! 			     fold (build1 (ABS_EXPR, type, arg1)),
! 			     arg2);
! 
!   /* Strip sign changing operations for the first argument.  */
!   tem = fold_strip_sign_ops (arg1);
!   if (tem)
!     {
!       arglist = tree_cons (NULL_TREE, tem, TREE_CHAIN (arglist));
!       return build_function_call_expr (fndecl, arglist);
!     }
! 
!   return NULL_TREE;
! }
! 
! /* Fold a call to builtin isascii.  */
! 
! static tree
! fold_builtin_isascii (tree arglist)
! {
!   if (! validate_arglist (arglist, INTEGER_TYPE, VOID_TYPE))
!     return 0;
!   else
!     {
!       /* Transform isascii(c) -> ((c & ~0x7f) == 0).  */
!       tree arg = TREE_VALUE (arglist);
! 
!       arg = build2 (BIT_AND_EXPR, integer_type_node, arg,
! 		    build_int_cst (NULL_TREE,
! 				   ~ (unsigned HOST_WIDE_INT) 0x7f));
!       arg = fold (build2 (EQ_EXPR, integer_type_node,
! 			  arg, integer_zero_node));
! 
!       if (in_gimple_form && !TREE_CONSTANT (arg))
!         return NULL_TREE;
!       else
!         return arg;
!     }
! }
! 
! /* Fold a call to builtin toascii.  */
! 
! static tree
! fold_builtin_toascii (tree arglist)
! {
!   if (! validate_arglist (arglist, INTEGER_TYPE, VOID_TYPE))
!     return 0;
!   else
!     {
!       /* Transform toascii(c) -> (c & 0x7f).  */
!       tree arg = TREE_VALUE (arglist);
! 
!       return fold (build2 (BIT_AND_EXPR, integer_type_node, arg,
! 			   build_int_cst (NULL_TREE, 0x7f)));
!     }
! }
! 
! /* Fold a call to builtin isdigit.  */
! 
! static tree
! fold_builtin_isdigit (tree arglist)
! {
!   if (! validate_arglist (arglist, INTEGER_TYPE, VOID_TYPE))
!     return 0;
!   else
!     {
!       /* Transform isdigit(c) -> (unsigned)(c) - '0' <= 9.  */
!       /* According to the C standard, isdigit is unaffected by locale.
! 	 However, it definitely is affected by the target character set.  */
!       tree arg;
!       unsigned HOST_WIDE_INT target_digit0
! 	= lang_hooks.to_target_charset ('0');
! 
!       if (target_digit0 == 0)
! 	return NULL_TREE;
! 
!       arg = fold_convert (unsigned_type_node, TREE_VALUE (arglist));
!       arg = build2 (MINUS_EXPR, unsigned_type_node, arg,
! 		    build_int_cst (unsigned_type_node, target_digit0));
!       arg = build2 (LE_EXPR, integer_type_node, arg,
! 		    build_int_cst (unsigned_type_node, 9));
!       arg = fold (arg);
!       if (in_gimple_form && !TREE_CONSTANT (arg))
!         return NULL_TREE;
!       else
!         return arg;
!     }
! }
! 
! /* Fold a call to fabs, fabsf or fabsl.  */
! 
! static tree
! fold_builtin_fabs (tree arglist, tree type)
! {
!   tree arg;
! 
!   if (!validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
!     return 0;
! 
!   arg = TREE_VALUE (arglist);
!   arg = fold_convert (type, arg);
!   if (TREE_CODE (arg) == REAL_CST)
!     return fold_abs_const (arg, type);
!   return fold (build1 (ABS_EXPR, type, arg));
! }
! 
! /* Fold a call to abs, labs, llabs or imaxabs.  */
! 
! static tree
! fold_builtin_abs (tree arglist, tree type)
! {
!   tree arg;
! 
!   if (!validate_arglist (arglist, INTEGER_TYPE, VOID_TYPE))
!     return 0;
! 
!   arg = TREE_VALUE (arglist);
!   arg = fold_convert (type, arg);
!   if (TREE_CODE (arg) == INTEGER_CST)
!     return fold_abs_const (arg, type);
!   return fold (build1 (ABS_EXPR, type, arg));
! }
! 
! /* Fold a call to __builtin_isnan(), __builtin_isinf, __builtin_finite.
!    EXP is the CALL_EXPR for the call.  */
! 
! static tree
! fold_builtin_classify (tree exp, int builtin_index)
! {
!   tree fndecl = get_callee_fndecl (exp);
!   tree arglist = TREE_OPERAND (exp, 1);
!   tree type = TREE_TYPE (TREE_TYPE (fndecl));
!   tree arg;
!   REAL_VALUE_TYPE r;
! 
!   if (!validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
!     {
!       /* Check that we have exactly one argument.  */
!       if (arglist == 0)
! 	{
! 	  error ("too few arguments to function %qs",
! 		 IDENTIFIER_POINTER (DECL_NAME (fndecl)));
! 	  return error_mark_node;
! 	}
!       else if (TREE_CHAIN (arglist) != 0)
! 	{
! 	  error ("too many arguments to function %qs",
! 		 IDENTIFIER_POINTER (DECL_NAME (fndecl)));
! 	  return error_mark_node;
! 	}
!       else
! 	{
! 	  error ("non-floating-point argument to function %qs",
! 		 IDENTIFIER_POINTER (DECL_NAME (fndecl)));
! 	  return error_mark_node;
! 	}
!     }
! 
!   arg = TREE_VALUE (arglist);
!   switch (builtin_index)
!     {
!     case BUILT_IN_ISINF:
!       if (!MODE_HAS_INFINITIES (TYPE_MODE (TREE_TYPE (arg))))
!         return omit_one_operand (type, integer_zero_node, arg);
! 
!       if (TREE_CODE (arg) == REAL_CST)
! 	{
! 	  r = TREE_REAL_CST (arg);
! 	  if (real_isinf (&r))
! 	    return real_compare (GT_EXPR, &r, &dconst0)
! 		   ? integer_one_node : integer_minus_one_node;
! 	  else
! 	    return integer_zero_node;
! 	}
! 
!       return NULL_TREE;
! 
!     case BUILT_IN_FINITE:
!       if (!MODE_HAS_NANS (TYPE_MODE (TREE_TYPE (arg)))
!           && !MODE_HAS_INFINITIES (TYPE_MODE (TREE_TYPE (arg))))
!         return omit_one_operand (type, integer_zero_node, arg);
! 
!       if (TREE_CODE (arg) == REAL_CST)
! 	{
! 	  r = TREE_REAL_CST (arg);
! 	  return real_isinf (&r) || real_isnan (&r)
! 		 ? integer_zero_node : integer_one_node;
! 	}
! 
!       return NULL_TREE;
! 
!     case BUILT_IN_ISNAN:
!       if (!MODE_HAS_NANS (TYPE_MODE (TREE_TYPE (arg))))
!         return omit_one_operand (type, integer_zero_node, arg);
! 
!       if (TREE_CODE (arg) == REAL_CST)
! 	{
! 	  r = TREE_REAL_CST (arg);
! 	  return real_isnan (&r) ? integer_one_node : integer_zero_node;
! 	}
! 
!       arg = builtin_save_expr (arg);
!       return fold (build2 (UNORDERED_EXPR, type, arg, arg));
! 
!     default:
!       gcc_unreachable ();
!     }
! }
! 
! /* Fold a call to an unordered comparison function such as
!    __builtin_isgreater().  EXP is the CALL_EXPR for the call.
!    UNORDERED_CODE and ORDERED_CODE are comparison codes that give
!    the opposite of the desired result.  UNORDERED_CODE is used
!    for modes that can hold NaNs and ORDERED_CODE is used for
!    the rest.  */
! 
! static tree
! fold_builtin_unordered_cmp (tree exp,
! 			    enum tree_code unordered_code,
! 			    enum tree_code ordered_code)
! {
!   tree fndecl = get_callee_fndecl (exp);
!   tree arglist = TREE_OPERAND (exp, 1);
!   tree type = TREE_TYPE (TREE_TYPE (fndecl));
!   enum tree_code code;
!   tree arg0, arg1;
!   tree type0, type1;
!   enum tree_code code0, code1;
!   tree cmp_type = NULL_TREE;
! 
!   if (!validate_arglist (arglist, REAL_TYPE, REAL_TYPE, VOID_TYPE))
!     {
!       /* Check that we have exactly two arguments.  */
!       if (arglist == 0 || TREE_CHAIN (arglist) == 0)
! 	{
! 	  error ("too few arguments to function %qs",
! 		 IDENTIFIER_POINTER (DECL_NAME (fndecl)));
! 	  return error_mark_node;
! 	}
!       else if (TREE_CHAIN (TREE_CHAIN (arglist)) != 0)
! 	{
! 	  error ("too many arguments to function %qs",
! 		 IDENTIFIER_POINTER (DECL_NAME (fndecl)));
! 	  return error_mark_node;
! 	}
!     }
! 
!   arg0 = TREE_VALUE (arglist);
!   arg1 = TREE_VALUE (TREE_CHAIN (arglist));
!   
!   type0 = TREE_TYPE (arg0);
!   type1 = TREE_TYPE (arg1);
!   
!   code0 = TREE_CODE (type0);
!   code1 = TREE_CODE (type1);
!   
!   if (code0 == REAL_TYPE && code1 == REAL_TYPE)
!     /* Choose the wider of two real types.  */
!     cmp_type = TYPE_PRECISION (type0) >= TYPE_PRECISION (type1)
!       ? type0 : type1;
!   else if (code0 == REAL_TYPE && code1 == INTEGER_TYPE)
!     cmp_type = type0;
!   else if (code0 == INTEGER_TYPE && code1 == REAL_TYPE)
!     cmp_type = type1;
!   else
!     {
!       error ("non-floating-point argument to function %qs",
! 		 IDENTIFIER_POINTER (DECL_NAME (fndecl)));
!       return error_mark_node;
!     }
!   
!   arg0 = fold_convert (cmp_type, arg0);
!   arg1 = fold_convert (cmp_type, arg1);
! 
!   if (unordered_code == UNORDERED_EXPR)
!     {
!       if (!MODE_HAS_NANS (TYPE_MODE (TREE_TYPE (arg0))))
! 	return omit_two_operands (type, integer_zero_node, arg0, arg1);
!       return fold (build2 (UNORDERED_EXPR, type, arg0, arg1));
!     }
! 
!   code = MODE_HAS_NANS (TYPE_MODE (TREE_TYPE (arg0))) ? unordered_code
! 						      : ordered_code;
!   return fold (build1 (TRUTH_NOT_EXPR, type,
! 		       fold (build2 (code, type, arg0, arg1))));
! }
! 
! /* Fold a call to one of the external complex multiply libcalls.  */
! 
! static tree
! fold_builtin_complex_mul (tree type, tree arglist)
! {
!   tree ar, ai, br, bi;
! 
!   if (!validate_arglist (arglist, REAL_TYPE, REAL_TYPE, REAL_TYPE,
! 			 REAL_TYPE, VOID_TYPE))
!     return NULL;
! 
!   ar = TREE_VALUE (arglist); arglist = TREE_CHAIN (arglist);
!   ai = TREE_VALUE (arglist); arglist = TREE_CHAIN (arglist);
!   br = TREE_VALUE (arglist); arglist = TREE_CHAIN (arglist);
!   bi = TREE_VALUE (arglist);
! 
!   return fold_complex_mult_parts (type, ar, ai, br, bi);
! }
! 
! /* Fold a call to one of the external complex division libcalls.  */
! 
! static tree
! fold_builtin_complex_div (tree type, tree arglist)
! {
!   tree ar, ai, br, bi;
! 
!   if (!validate_arglist (arglist, REAL_TYPE, REAL_TYPE, REAL_TYPE,
! 			 REAL_TYPE, VOID_TYPE))
!     return NULL;
! 
!   ar = TREE_VALUE (arglist); arglist = TREE_CHAIN (arglist);
!   ai = TREE_VALUE (arglist); arglist = TREE_CHAIN (arglist);
!   br = TREE_VALUE (arglist); arglist = TREE_CHAIN (arglist);
!   bi = TREE_VALUE (arglist);
! 
!   return fold_complex_div_parts (type, ar, ai, br, bi, RDIV_EXPR);
! }
! 
! /* Used by constant folding to simplify calls to builtin functions.  EXP is
!    the CALL_EXPR of a call to a builtin function.  IGNORE is true if the
!    result of the function call is ignored.  This function returns NULL_TREE
!    if no simplification was possible.  */
! 
! static tree
! fold_builtin_1 (tree exp, bool ignore)
  {
    tree fndecl = get_callee_fndecl (exp);
    tree arglist = TREE_OPERAND (exp, 1);
    tree type = TREE_TYPE (TREE_TYPE (fndecl));
+   enum built_in_function fcode;
  
    if (DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_MD)
!     return targetm.fold_builtin (exp, ignore);
  
!   fcode = DECL_FUNCTION_CODE (fndecl);
!   switch (fcode)
      {
+     case BUILT_IN_FPUTS:
+       return fold_builtin_fputs (arglist, ignore, false, NULL_TREE);
+ 
+     case BUILT_IN_FPUTS_UNLOCKED:
+       return fold_builtin_fputs (arglist, ignore, true, NULL_TREE);
+ 
+     case BUILT_IN_STRSTR:
+       return fold_builtin_strstr (arglist, type);
+ 
+     case BUILT_IN_STRCAT:
+       return fold_builtin_strcat (arglist);
+ 
+     case BUILT_IN_STRNCAT:
+       return fold_builtin_strncat (arglist);
+ 
+     case BUILT_IN_STRSPN:
+       return fold_builtin_strspn (arglist);
+ 
+     case BUILT_IN_STRCSPN:
+       return fold_builtin_strcspn (arglist);
+ 
+     case BUILT_IN_STRCHR:
+     case BUILT_IN_INDEX:
+       return fold_builtin_strchr (arglist, type);
+ 
+     case BUILT_IN_STRRCHR:
+     case BUILT_IN_RINDEX:
+       return fold_builtin_strrchr (arglist, type);
+ 
+     case BUILT_IN_STRCPY:
+       return fold_builtin_strcpy (exp, NULL_TREE);
+ 
+     case BUILT_IN_STRNCPY:
+       return fold_builtin_strncpy (exp, NULL_TREE);
+ 
+     case BUILT_IN_STRCMP:
+       return fold_builtin_strcmp (arglist);
+ 
+     case BUILT_IN_STRNCMP:
+       return fold_builtin_strncmp (arglist);
+ 
+     case BUILT_IN_STRPBRK:
+       return fold_builtin_strpbrk (arglist, type);
+ 
+     case BUILT_IN_BCMP:
+     case BUILT_IN_MEMCMP:
+       return fold_builtin_memcmp (arglist);
+ 
+     case BUILT_IN_SPRINTF:
+       return fold_builtin_sprintf (arglist, ignore);
+ 
      case BUILT_IN_CONSTANT_P:
!       {
! 	tree val;
! 
! 	val = fold_builtin_constant_p (arglist);
! 	/* Gimplification will pull the CALL_EXPR for the builtin out of
! 	   an if condition.  When not optimizing, we'll not CSE it back.
! 	   To avoid link error types of regressions, return false now.  */
! 	if (!val && !optimize)
! 	  val = integer_zero_node;
! 
! 	return val;
!       }
! 
!     case BUILT_IN_EXPECT:
!       return fold_builtin_expect (arglist);
  
      case BUILT_IN_CLASSIFY_TYPE:
        return fold_builtin_classify_type (arglist);
  
      case BUILT_IN_STRLEN:
!       return fold_builtin_strlen (arglist);
  
      case BUILT_IN_FABS:
      case BUILT_IN_FABSF:
      case BUILT_IN_FABSL:
!       return fold_builtin_fabs (arglist, type);
! 
!     case BUILT_IN_ABS:
!     case BUILT_IN_LABS:
!     case BUILT_IN_LLABS:
!     case BUILT_IN_IMAXABS:
!       return fold_builtin_abs (arglist, type);
! 
!     case BUILT_IN_CONJ:
!     case BUILT_IN_CONJF:
!     case BUILT_IN_CONJL:
!       if (validate_arglist (arglist, COMPLEX_TYPE, VOID_TYPE))
! 	return fold (build1 (CONJ_EXPR, type, TREE_VALUE (arglist)));
!       break;
! 
!     case BUILT_IN_CREAL:
!     case BUILT_IN_CREALF:
!     case BUILT_IN_CREALL:
!       if (validate_arglist (arglist, COMPLEX_TYPE, VOID_TYPE))
!         return non_lvalue (fold (build1 (REALPART_EXPR, type,
! 					 TREE_VALUE (arglist))));
!       break;
! 
!     case BUILT_IN_CIMAG:
!     case BUILT_IN_CIMAGF:
!     case BUILT_IN_CIMAGL:
!       if (validate_arglist (arglist, COMPLEX_TYPE, VOID_TYPE))
!         return non_lvalue (fold (build1 (IMAGPART_EXPR, type,
! 					 TREE_VALUE (arglist))));
        break;
  
      case BUILT_IN_CABS:
      case BUILT_IN_CABSF:
      case BUILT_IN_CABSL:
!       return fold_builtin_cabs (arglist, type);
  
      case BUILT_IN_SQRT:
      case BUILT_IN_SQRTF:
      case BUILT_IN_SQRTL:
!       return fold_builtin_sqrt (arglist, type);
  
!     case BUILT_IN_CBRT:
!     case BUILT_IN_CBRTF:
!     case BUILT_IN_CBRTL:
!       return fold_builtin_cbrt (arglist, type);
  
      case BUILT_IN_SIN:
      case BUILT_IN_SINF:
      case BUILT_IN_SINL:
!       return fold_builtin_sin (arglist);
  
      case BUILT_IN_COS:
      case BUILT_IN_COSF:
      case BUILT_IN_COSL:
!       return fold_builtin_cos (arglist, type, fndecl);
  
      case BUILT_IN_EXP:
      case BUILT_IN_EXPF:
      case BUILT_IN_EXPL:
        return fold_builtin_exponent (exp, &dconste);
+ 
      case BUILT_IN_EXP2:
      case BUILT_IN_EXP2F:
      case BUILT_IN_EXP2L:
        return fold_builtin_exponent (exp, &dconst2);
+ 
      case BUILT_IN_EXP10:
      case BUILT_IN_EXP10F:
      case BUILT_IN_EXP10L:
*************** fold_builtin (tree exp)
*** 6648,6838 ****
      case BUILT_IN_POW10F:
      case BUILT_IN_POW10L:
        return fold_builtin_exponent (exp, &dconst10);
      case BUILT_IN_LOG:
      case BUILT_IN_LOGF:
      case BUILT_IN_LOGL:
        return fold_builtin_logarithm (exp, &dconste);
!       break;
      case BUILT_IN_LOG2:
      case BUILT_IN_LOG2F:
      case BUILT_IN_LOG2L:
        return fold_builtin_logarithm (exp, &dconst2);
!       break;
      case BUILT_IN_LOG10:
      case BUILT_IN_LOG10F:
      case BUILT_IN_LOG10L:
        return fold_builtin_logarithm (exp, &dconst10);
-       break;
  
      case BUILT_IN_TAN:
      case BUILT_IN_TANF:
      case BUILT_IN_TANL:
!       if (validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
! 	{
! 	  enum built_in_function fcode;
! 	  tree arg = TREE_VALUE (arglist);
! 
! 	  /* Optimize tan(0.0) = 0.0.  */
! 	  if (real_zerop (arg))
! 	    return arg;
! 
! 	  /* Optimize tan(atan(x)) = x.  */
! 	  fcode = builtin_mathfn_code (arg);
! 	  if (flag_unsafe_math_optimizations
! 	      && (fcode == BUILT_IN_ATAN
! 		  || fcode == BUILT_IN_ATANF
! 		  || fcode == BUILT_IN_ATANL))
! 	    return TREE_VALUE (TREE_OPERAND (arg, 1));
! 	}
!       break;
  
      case BUILT_IN_ATAN:
      case BUILT_IN_ATANF:
      case BUILT_IN_ATANL:
!       if (validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
! 	{
! 	  tree arg = TREE_VALUE (arglist);
! 
! 	  /* Optimize atan(0.0) = 0.0.  */
! 	  if (real_zerop (arg))
! 	    return arg;
! 
! 	  /* Optimize atan(1.0) = pi/4.  */
! 	  if (real_onep (arg))
! 	    {
! 	      REAL_VALUE_TYPE cst;
! 
! 	      real_convert (&cst, TYPE_MODE (type), &dconstpi);
! 	      cst.exp -= 2;
! 	      return build_real (type, cst);
! 	    }
! 	}
!       break;
  
      case BUILT_IN_POW:
      case BUILT_IN_POWF:
      case BUILT_IN_POWL:
!       if (validate_arglist (arglist, REAL_TYPE, REAL_TYPE, VOID_TYPE))
! 	{
! 	  enum built_in_function fcode;
! 	  tree arg0 = TREE_VALUE (arglist);
! 	  tree arg1 = TREE_VALUE (TREE_CHAIN (arglist));
! 
! 	  /* Optimize pow(1.0,y) = 1.0.  */
! 	  if (real_onep (arg0))
! 	    return omit_one_operand (type, build_real (type, dconst1), arg1);
! 
! 	  if (TREE_CODE (arg1) == REAL_CST
! 	      && ! TREE_CONSTANT_OVERFLOW (arg1))
! 	    {
! 	      REAL_VALUE_TYPE c;
! 	      c = TREE_REAL_CST (arg1);
! 
! 	      /* Optimize pow(x,0.0) = 1.0.  */
! 	      if (REAL_VALUES_EQUAL (c, dconst0))
! 		return omit_one_operand (type, build_real (type, dconst1),
! 					 arg0);
! 
! 	      /* Optimize pow(x,1.0) = x.  */
! 	      if (REAL_VALUES_EQUAL (c, dconst1))
! 		return arg0;
! 
! 	      /* Optimize pow(x,-1.0) = 1.0/x.  */
! 	      if (REAL_VALUES_EQUAL (c, dconstm1))
! 		return fold (build (RDIV_EXPR, type,
! 				    build_real (type, dconst1),
! 				    arg0));
! 
! 	      /* Optimize pow(x,0.5) = sqrt(x).  */
! 	      if (flag_unsafe_math_optimizations
! 		  && REAL_VALUES_EQUAL (c, dconsthalf))
! 		{
! 		  tree sqrtfn;
! 
! 		  fcode = DECL_FUNCTION_CODE (fndecl);
! 		  if (fcode == BUILT_IN_POW)
! 		    sqrtfn = implicit_built_in_decls[BUILT_IN_SQRT];
! 		  else if (fcode == BUILT_IN_POWF)
! 		    sqrtfn = implicit_built_in_decls[BUILT_IN_SQRTF];
! 		  else if (fcode == BUILT_IN_POWL)
! 		    sqrtfn = implicit_built_in_decls[BUILT_IN_SQRTL];
! 		  else
! 		    sqrtfn = NULL_TREE;
! 
! 		  if (sqrtfn != NULL_TREE)
! 		    {
! 		      tree arglist = build_tree_list (NULL_TREE, arg0);
! 		      return build_function_call_expr (sqrtfn, arglist);
! 		    }
! 		}
! 
! 	      /* Attempt to evaluate pow at compile-time.  */
! 	      if (TREE_CODE (arg0) == REAL_CST
! 		  && ! TREE_CONSTANT_OVERFLOW (arg0))
! 		{
! 		  REAL_VALUE_TYPE cint;
! 		  HOST_WIDE_INT n;
! 
! 		  n = real_to_integer (&c);
! 		  real_from_integer (&cint, VOIDmode, n,
! 				     n < 0 ? -1 : 0, 0);
! 		  if (real_identical (&c, &cint))
! 		    {
! 		      REAL_VALUE_TYPE x;
! 		      bool inexact;
! 
! 		      x = TREE_REAL_CST (arg0);
! 		      inexact = real_powi (&x, TYPE_MODE (type), &x, n);
! 		      if (flag_unsafe_math_optimizations || !inexact)
! 			return build_real (type, x);
! 		    }
! 		}
! 	    }
! 
! 	  /* Optimize pow(exp(x),y) = exp(x*y).  */
! 	  fcode = builtin_mathfn_code (arg0);
! 	  if (flag_unsafe_math_optimizations
! 	      && (fcode == BUILT_IN_EXP
! 		  || fcode == BUILT_IN_EXPF
! 		  || fcode == BUILT_IN_EXPL))
! 	    {
! 	      tree expfn = TREE_OPERAND (TREE_OPERAND (arg0, 0), 0);
! 	      tree arg = TREE_VALUE (TREE_OPERAND (arg0, 1));
! 	      arg = fold (build (MULT_EXPR, type, arg, arg1));
! 	      arglist = build_tree_list (NULL_TREE, arg);
! 	      return build_function_call_expr (expfn, arglist);
! 	    }
! 
! 	  /* Optimize pow(sqrt(x),y) = pow(x,y*0.5).  */
! 	  if (flag_unsafe_math_optimizations
! 	      && (fcode == BUILT_IN_SQRT
! 		  || fcode == BUILT_IN_SQRTF
! 		  || fcode == BUILT_IN_SQRTL))
! 	    {
! 	      tree narg0 = TREE_VALUE (TREE_OPERAND (arg0, 1));
! 	      tree narg1 = fold (build (MULT_EXPR, type, arg1,
! 					build_real (type, dconsthalf)));
! 
! 	      arglist = tree_cons (NULL_TREE, narg0,
! 				   build_tree_list (NULL_TREE, narg1));
! 	      return build_function_call_expr (fndecl, arglist);
! 	    }
  
! 	  /* Optimize pow(pow(x,y),z) = pow(x,y*z).  */
! 	  if (flag_unsafe_math_optimizations
! 	      && (fcode == BUILT_IN_POW
! 		  || fcode == BUILT_IN_POWF
! 		  || fcode == BUILT_IN_POWL))
! 	    {
! 	      tree arg00 = TREE_VALUE (TREE_OPERAND (arg0, 1));
! 	      tree arg01 = TREE_VALUE (TREE_CHAIN (TREE_OPERAND (arg0, 1)));
! 	      tree narg1 = fold (build (MULT_EXPR, type, arg01, arg1));
! 	      arglist = tree_cons (NULL_TREE, arg00,
! 				   build_tree_list (NULL_TREE, narg1));
! 	      return build_function_call_expr (fndecl, arglist);
! 	    }
! 	}
!       break;
  
      case BUILT_IN_INF:
      case BUILT_IN_INFF:
--- 8046,8086 ----
      case BUILT_IN_POW10F:
      case BUILT_IN_POW10L:
        return fold_builtin_exponent (exp, &dconst10);
+ 
      case BUILT_IN_LOG:
      case BUILT_IN_LOGF:
      case BUILT_IN_LOGL:
        return fold_builtin_logarithm (exp, &dconste);
! 
      case BUILT_IN_LOG2:
      case BUILT_IN_LOG2F:
      case BUILT_IN_LOG2L:
        return fold_builtin_logarithm (exp, &dconst2);
! 
      case BUILT_IN_LOG10:
      case BUILT_IN_LOG10F:
      case BUILT_IN_LOG10L:
        return fold_builtin_logarithm (exp, &dconst10);
  
      case BUILT_IN_TAN:
      case BUILT_IN_TANF:
      case BUILT_IN_TANL:
!       return fold_builtin_tan (arglist);
  
      case BUILT_IN_ATAN:
      case BUILT_IN_ATANF:
      case BUILT_IN_ATANL:
!       return fold_builtin_atan (arglist, type);
  
      case BUILT_IN_POW:
      case BUILT_IN_POWF:
      case BUILT_IN_POWL:
!       return fold_builtin_pow (fndecl, arglist, type);
  
!     case BUILT_IN_POWI:
!     case BUILT_IN_POWIF:
!     case BUILT_IN_POWIL:
!       return fold_builtin_powi (fndecl, arglist, type);
  
      case BUILT_IN_INF:
      case BUILT_IN_INFF:
*************** fold_builtin (tree exp)
*** 6872,6882 ****
--- 8120,8151 ----
      case BUILT_IN_ROUND:
      case BUILT_IN_ROUNDF:
      case BUILT_IN_ROUNDL:
+       return fold_builtin_round (exp);
+ 
      case BUILT_IN_NEARBYINT:
      case BUILT_IN_NEARBYINTF:
      case BUILT_IN_NEARBYINTL:
+     case BUILT_IN_RINT:
+     case BUILT_IN_RINTF:
+     case BUILT_IN_RINTL:
        return fold_trunc_transparent_mathfn (exp);
  
+     case BUILT_IN_LROUND:
+     case BUILT_IN_LROUNDF:
+     case BUILT_IN_LROUNDL:
+     case BUILT_IN_LLROUND:
+     case BUILT_IN_LLROUNDF:
+     case BUILT_IN_LLROUNDL:
+       return fold_builtin_lround (exp);
+ 
+     case BUILT_IN_LRINT:
+     case BUILT_IN_LRINTF:
+     case BUILT_IN_LRINTL:
+     case BUILT_IN_LLRINT:
+     case BUILT_IN_LLRINTF:
+     case BUILT_IN_LLRINTL:
+       return fold_fixed_mathfn (exp);
+ 
      case BUILT_IN_FFS:
      case BUILT_IN_FFSL:
      case BUILT_IN_FFSLL:
*************** fold_builtin (tree exp)
*** 6898,6930 ****
        return fold_builtin_memcpy (exp);
  
      case BUILT_IN_MEMPCPY:
!       return fold_builtin_mempcpy (exp);
  
      case BUILT_IN_MEMMOVE:
!       return fold_builtin_memmove (exp);
  
!     case BUILT_IN_STRCPY:
!       return fold_builtin_strcpy (exp);
  
!     case BUILT_IN_STRNCPY:
!       return fold_builtin_strncpy (exp);
  
!     case BUILT_IN_MEMCMP:
!       return fold_builtin_memcmp (exp);
  
!     case BUILT_IN_STRCMP:
!       return fold_builtin_strcmp (exp);
  
!     case BUILT_IN_STRNCMP:
!       return fold_builtin_strncmp (exp);
  
      default:
        break;
      }
  
    return 0;
  }
  
  /* Conveniently construct a function call expression.  */
  
  tree
--- 8167,8260 ----
        return fold_builtin_memcpy (exp);
  
      case BUILT_IN_MEMPCPY:
!       return fold_builtin_mempcpy (arglist, type, /*endp=*/1);
  
      case BUILT_IN_MEMMOVE:
!       return fold_builtin_memmove (arglist, type);
  
!     case BUILT_IN_SIGNBIT:
!     case BUILT_IN_SIGNBITF:
!     case BUILT_IN_SIGNBITL:
!       return fold_builtin_signbit (exp);
  
!     case BUILT_IN_ISASCII:
!       return fold_builtin_isascii (arglist);
  
!     case BUILT_IN_TOASCII:
!       return fold_builtin_toascii (arglist);
  
!     case BUILT_IN_ISDIGIT:
!       return fold_builtin_isdigit (arglist);
  
!     case BUILT_IN_COPYSIGN:
!     case BUILT_IN_COPYSIGNF:
!     case BUILT_IN_COPYSIGNL:
!       return fold_builtin_copysign (fndecl, arglist, type);
! 
!     case BUILT_IN_FINITE:
!     case BUILT_IN_FINITEF:
!     case BUILT_IN_FINITEL:
!       return fold_builtin_classify (exp, BUILT_IN_FINITE);
! 
!     case BUILT_IN_ISINF:
!     case BUILT_IN_ISINFF:
!     case BUILT_IN_ISINFL:
!       return fold_builtin_classify (exp, BUILT_IN_ISINF);
! 
!     case BUILT_IN_ISNAN:
!     case BUILT_IN_ISNANF:
!     case BUILT_IN_ISNANL:
!       return fold_builtin_classify (exp, BUILT_IN_ISNAN);
! 
!     case BUILT_IN_ISGREATER:
!       return fold_builtin_unordered_cmp (exp, UNLE_EXPR, LE_EXPR);
!     case BUILT_IN_ISGREATEREQUAL:
!       return fold_builtin_unordered_cmp (exp, UNLT_EXPR, LT_EXPR);
!     case BUILT_IN_ISLESS:
!       return fold_builtin_unordered_cmp (exp, UNGE_EXPR, GE_EXPR);
!     case BUILT_IN_ISLESSEQUAL:
!       return fold_builtin_unordered_cmp (exp, UNGT_EXPR, GT_EXPR);
!     case BUILT_IN_ISLESSGREATER:
!       return fold_builtin_unordered_cmp (exp, UNEQ_EXPR, EQ_EXPR);
!     case BUILT_IN_ISUNORDERED:
!       return fold_builtin_unordered_cmp (exp, UNORDERED_EXPR, NOP_EXPR);
! 
!       /* We do the folding for va_start in the expander.  */
!     case BUILT_IN_VA_START:
!       break;
  
      default:
+       if (fcode >= BUILT_IN_COMPLEX_MUL_MIN
+ 	  && fcode <= BUILT_IN_COMPLEX_MUL_MAX)
+ 	return fold_builtin_complex_mul (type, arglist);
+       if (fcode >= BUILT_IN_COMPLEX_DIV_MIN
+ 	  && fcode <= BUILT_IN_COMPLEX_DIV_MAX)
+ 	return fold_builtin_complex_div (type, arglist);
        break;
      }
  
    return 0;
  }
  
+ /* A wrapper function for builtin folding that prevents warnings for
+    "statement without effect" and the like, caused by removing the
+    call node earlier than the warning is generated.  */
+ 
+ tree
+ fold_builtin (tree exp, bool ignore)
+ {
+   exp = fold_builtin_1 (exp, ignore);
+   if (exp)
+     {
+       /* ??? Don't clobber shared nodes such as integer_zero_node.  */
+       if (CONSTANT_CLASS_P (exp))
+ 	exp = build1 (NOP_EXPR, TREE_TYPE (exp), exp);
+       TREE_NO_WARNING (exp) = 1;
+     }
+ 
+   return exp;
+ }
+ 
  /* Conveniently construct a function call expression.  */
  
  tree
*************** build_function_call_expr (tree fn, tree 
*** 6933,6940 ****
    tree call_expr;
  
    call_expr = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (fn)), fn);
!   call_expr = build (CALL_EXPR, TREE_TYPE (TREE_TYPE (fn)),
! 		     call_expr, arglist);
    return fold (call_expr);
  }
  
--- 8263,8270 ----
    tree call_expr;
  
    call_expr = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (fn)), fn);
!   call_expr = build3 (CALL_EXPR, TREE_TYPE (TREE_TYPE (fn)),
! 		      call_expr, arglist, NULL_TREE);
    return fold (call_expr);
  }
  
*************** validate_arglist (tree arglist, ...)
*** 6970,6977 ****
  	  /* If no parameters remain or the parameter's code does not
  	     match the specified code, return false.  Otherwise continue
  	     checking any remaining arguments.  */
! 	  if (arglist == 0
! 	      || code != TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))))
  	    goto end;
  	  break;
  	}
--- 8300,8313 ----
  	  /* If no parameters remain or the parameter's code does not
  	     match the specified code, return false.  Otherwise continue
  	     checking any remaining arguments.  */
! 	  if (arglist == 0)
! 	    goto end;
! 	  if (code == POINTER_TYPE)
! 	    {
! 	      if (! POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (arglist))))
! 		goto end;
! 	    }
! 	  else if (code != TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))))
  	    goto end;
  	  break;
  	}
*************** default_expand_builtin (tree exp ATTRIBU
*** 6999,7039 ****
    return NULL_RTX;
  }
  
! /* Instantiate all remaining CONSTANT_P_RTX nodes.  */
  
! void
! purge_builtin_constant_p (void)
  {
!   rtx insn, set, arg, new, note;
  
!   for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
!     if (INSN_P (insn)
! 	&& (set = single_set (insn)) != NULL_RTX
! 	&& (GET_CODE (arg = SET_SRC (set)) == CONSTANT_P_RTX
! 	    || (GET_CODE (arg) == SUBREG
! 		&& (GET_CODE (arg = SUBREG_REG (arg))
! 		    == CONSTANT_P_RTX))))
        {
! 	arg = XEXP (arg, 0);
! 	new = CONSTANT_P (arg) ? const1_rtx : const0_rtx;
! 	validate_change (insn, &SET_SRC (set), new, 0);
  
! 	/* Remove the REG_EQUAL note from the insn.  */
! 	if ((note = find_reg_note (insn, REG_EQUAL, NULL_RTX)) != 0)
! 	  remove_note (insn, note);
        }
  }
  
! /* Returns true is EXP represents data that would potentially reside
!    in a readonly section.  */
  
! static bool
! readonly_data_expr (tree exp)
  {
!   STRIP_NOPS (exp);
  
!   if (TREE_CODE (exp) == ADDR_EXPR)
!     return decl_readonly_section (TREE_OPERAND (exp, 0), 0);
    else
!     return false;
  }
--- 8335,9043 ----
    return NULL_RTX;
  }
  
! /* Returns true is EXP represents data that would potentially reside
!    in a readonly section.  */
  
! static bool
! readonly_data_expr (tree exp)
  {
!   STRIP_NOPS (exp);
  
!   if (TREE_CODE (exp) != ADDR_EXPR)
!     return false;
! 
!   exp = get_base_address (TREE_OPERAND (exp, 0));
!   if (!exp)
!     return false;
! 
!   /* Make sure we call decl_readonly_section only for trees it
!      can handle (since it returns true for everything it doesn't
!      understand).  */
!   if (TREE_CODE (exp) == STRING_CST
!       || TREE_CODE (exp) == CONSTRUCTOR
!       || (TREE_CODE (exp) == VAR_DECL && TREE_STATIC (exp)))
!     return decl_readonly_section (exp, 0);
!   else
!     return false;
! }
! 
! /* Simplify a call to the strstr builtin.
! 
!    Return 0 if no simplification was possible, otherwise return the
!    simplified form of the call as a tree.
! 
!    The simplified form may be a constant or other expression which
!    computes the same value, but in a more efficient manner (including
!    calls to other builtin functions).
! 
!    The call may contain arguments which need to be evaluated, but
!    which are not useful to determine the result of the call.  In
!    this case we return a chain of COMPOUND_EXPRs.  The LHS of each
!    COMPOUND_EXPR will be an argument which must be evaluated.
!    COMPOUND_EXPRs are chained through their RHS.  The RHS of the last
!    COMPOUND_EXPR in the chain will contain the tree for the simplified
!    form of the builtin function call.  */
! 
! static tree
! fold_builtin_strstr (tree arglist, tree type)
! {
!   if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
!     return 0;
!   else
!     {
!       tree s1 = TREE_VALUE (arglist), s2 = TREE_VALUE (TREE_CHAIN (arglist));
!       tree fn;
!       const char *p1, *p2;
! 
!       p2 = c_getstr (s2);
!       if (p2 == NULL)
! 	return 0;
! 
!       p1 = c_getstr (s1);
!       if (p1 != NULL)
! 	{
! 	  const char *r = strstr (p1, p2);
! 	  tree tem;
! 
! 	  if (r == NULL)
! 	    return build_int_cst (TREE_TYPE (s1), 0);
! 
! 	  /* Return an offset into the constant string argument.  */
! 	  tem = fold (build2 (PLUS_EXPR, TREE_TYPE (s1),
! 			      s1, build_int_cst (TREE_TYPE (s1), r - p1)));
! 	  return fold_convert (type, tem);
! 	}
! 
!       if (p2[0] == '\0')
! 	return s1;
! 
!       if (p2[1] != '\0')
! 	return 0;
! 
!       fn = implicit_built_in_decls[BUILT_IN_STRCHR];
!       if (!fn)
! 	return 0;
! 
!       /* New argument list transforming strstr(s1, s2) to
! 	 strchr(s1, s2[0]).  */
!       arglist = build_tree_list (NULL_TREE,
! 				 build_int_cst (NULL_TREE, p2[0]));
!       arglist = tree_cons (NULL_TREE, s1, arglist);
!       return build_function_call_expr (fn, arglist);
!     }
! }
! 
! /* Simplify a call to the strchr builtin.
! 
!    Return 0 if no simplification was possible, otherwise return the
!    simplified form of the call as a tree.
! 
!    The simplified form may be a constant or other expression which
!    computes the same value, but in a more efficient manner (including
!    calls to other builtin functions).
! 
!    The call may contain arguments which need to be evaluated, but
!    which are not useful to determine the result of the call.  In
!    this case we return a chain of COMPOUND_EXPRs.  The LHS of each
!    COMPOUND_EXPR will be an argument which must be evaluated.
!    COMPOUND_EXPRs are chained through their RHS.  The RHS of the last
!    COMPOUND_EXPR in the chain will contain the tree for the simplified
!    form of the builtin function call.  */
! 
! static tree
! fold_builtin_strchr (tree arglist, tree type)
! {
!   if (!validate_arglist (arglist, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
!     return 0;
!   else
!     {
!       tree s1 = TREE_VALUE (arglist), s2 = TREE_VALUE (TREE_CHAIN (arglist));
!       const char *p1;
! 
!       if (TREE_CODE (s2) != INTEGER_CST)
! 	return 0;
! 
!       p1 = c_getstr (s1);
!       if (p1 != NULL)
! 	{
! 	  char c;
! 	  const char *r;
! 	  tree tem;
! 
! 	  if (target_char_cast (s2, &c))
! 	    return 0;
! 
! 	  r = strchr (p1, c);
! 
! 	  if (r == NULL)
! 	    return build_int_cst (TREE_TYPE (s1), 0);
! 
! 	  /* Return an offset into the constant string argument.  */
! 	  tem = fold (build2 (PLUS_EXPR, TREE_TYPE (s1),
! 			      s1, build_int_cst (TREE_TYPE (s1), r - p1)));
! 	  return fold_convert (type, tem);
! 	}
!       return 0;
!     }
! }
! 
! /* Simplify a call to the strrchr builtin.
! 
!    Return 0 if no simplification was possible, otherwise return the
!    simplified form of the call as a tree.
! 
!    The simplified form may be a constant or other expression which
!    computes the same value, but in a more efficient manner (including
!    calls to other builtin functions).
! 
!    The call may contain arguments which need to be evaluated, but
!    which are not useful to determine the result of the call.  In
!    this case we return a chain of COMPOUND_EXPRs.  The LHS of each
!    COMPOUND_EXPR will be an argument which must be evaluated.
!    COMPOUND_EXPRs are chained through their RHS.  The RHS of the last
!    COMPOUND_EXPR in the chain will contain the tree for the simplified
!    form of the builtin function call.  */
! 
! static tree
! fold_builtin_strrchr (tree arglist, tree type)
! {
!   if (!validate_arglist (arglist, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
!     return 0;
!   else
!     {
!       tree s1 = TREE_VALUE (arglist), s2 = TREE_VALUE (TREE_CHAIN (arglist));
!       tree fn;
!       const char *p1;
! 
!       if (TREE_CODE (s2) != INTEGER_CST)
! 	return 0;
! 
!       p1 = c_getstr (s1);
!       if (p1 != NULL)
! 	{
! 	  char c;
! 	  const char *r;
! 	  tree tem;
! 
! 	  if (target_char_cast (s2, &c))
! 	    return 0;
! 
! 	  r = strrchr (p1, c);
! 
! 	  if (r == NULL)
! 	    return build_int_cst (TREE_TYPE (s1), 0);
! 
! 	  /* Return an offset into the constant string argument.  */
! 	  tem = fold (build2 (PLUS_EXPR, TREE_TYPE (s1),
! 			      s1, build_int_cst (TREE_TYPE (s1), r - p1)));
! 	  return fold_convert (type, tem);
! 	}
! 
!       if (! integer_zerop (s2))
! 	return 0;
! 
!       fn = implicit_built_in_decls[BUILT_IN_STRCHR];
!       if (!fn)
! 	return 0;
! 
!       /* Transform strrchr(s1, '\0') to strchr(s1, '\0').  */
!       return build_function_call_expr (fn, arglist);
!     }
! }
! 
! /* Simplify a call to the strpbrk builtin.
! 
!    Return 0 if no simplification was possible, otherwise return the
!    simplified form of the call as a tree.
! 
!    The simplified form may be a constant or other expression which
!    computes the same value, but in a more efficient manner (including
!    calls to other builtin functions).
! 
!    The call may contain arguments which need to be evaluated, but
!    which are not useful to determine the result of the call.  In
!    this case we return a chain of COMPOUND_EXPRs.  The LHS of each
!    COMPOUND_EXPR will be an argument which must be evaluated.
!    COMPOUND_EXPRs are chained through their RHS.  The RHS of the last
!    COMPOUND_EXPR in the chain will contain the tree for the simplified
!    form of the builtin function call.  */
! 
! static tree
! fold_builtin_strpbrk (tree arglist, tree type)
! {
!   if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
!     return 0;
!   else
!     {
!       tree s1 = TREE_VALUE (arglist), s2 = TREE_VALUE (TREE_CHAIN (arglist));
!       tree fn;
!       const char *p1, *p2;
! 
!       p2 = c_getstr (s2);
!       if (p2 == NULL)
! 	return 0;
! 
!       p1 = c_getstr (s1);
!       if (p1 != NULL)
! 	{
! 	  const char *r = strpbrk (p1, p2);
! 	  tree tem;
! 
! 	  if (r == NULL)
! 	    return build_int_cst (TREE_TYPE (s1), 0);
! 
! 	  /* Return an offset into the constant string argument.  */
! 	  tem = fold (build2 (PLUS_EXPR, TREE_TYPE (s1),
! 			      s1, build_int_cst (TREE_TYPE (s1), r - p1)));
! 	  return fold_convert (type, tem);
! 	}
! 
!       if (p2[0] == '\0')
! 	/* strpbrk(x, "") == NULL.
! 	   Evaluate and ignore s1 in case it had side-effects.  */
! 	return omit_one_operand (TREE_TYPE (s1), integer_zero_node, s1);
! 
!       if (p2[1] != '\0')
! 	return 0;  /* Really call strpbrk.  */
! 
!       fn = implicit_built_in_decls[BUILT_IN_STRCHR];
!       if (!fn)
! 	return 0;
! 
!       /* New argument list transforming strpbrk(s1, s2) to
! 	 strchr(s1, s2[0]).  */
!       arglist = build_tree_list (NULL_TREE,
! 				 build_int_cst (NULL_TREE, p2[0]));
!       arglist = tree_cons (NULL_TREE, s1, arglist);
!       return build_function_call_expr (fn, arglist);
!     }
! }
! 
! /* Simplify a call to the strcat builtin.
! 
!    Return 0 if no simplification was possible, otherwise return the
!    simplified form of the call as a tree.
! 
!    The simplified form may be a constant or other expression which
!    computes the same value, but in a more efficient manner (including
!    calls to other builtin functions).
! 
!    The call may contain arguments which need to be evaluated, but
!    which are not useful to determine the result of the call.  In
!    this case we return a chain of COMPOUND_EXPRs.  The LHS of each
!    COMPOUND_EXPR will be an argument which must be evaluated.
!    COMPOUND_EXPRs are chained through their RHS.  The RHS of the last
!    COMPOUND_EXPR in the chain will contain the tree for the simplified
!    form of the builtin function call.  */
! 
! static tree
! fold_builtin_strcat (tree arglist)
! {
!   if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
!     return 0;
!   else
!     {
!       tree dst = TREE_VALUE (arglist),
! 	src = TREE_VALUE (TREE_CHAIN (arglist));
!       const char *p = c_getstr (src);
! 
!       /* If the string length is zero, return the dst parameter.  */
!       if (p && *p == '\0')
! 	return dst;
! 
!       return 0;
!     }
! }
! 
! /* Simplify a call to the strncat builtin.
! 
!    Return 0 if no simplification was possible, otherwise return the
!    simplified form of the call as a tree.
! 
!    The simplified form may be a constant or other expression which
!    computes the same value, but in a more efficient manner (including
!    calls to other builtin functions).
! 
!    The call may contain arguments which need to be evaluated, but
!    which are not useful to determine the result of the call.  In
!    this case we return a chain of COMPOUND_EXPRs.  The LHS of each
!    COMPOUND_EXPR will be an argument which must be evaluated.
!    COMPOUND_EXPRs are chained through their RHS.  The RHS of the last
!    COMPOUND_EXPR in the chain will contain the tree for the simplified
!    form of the builtin function call.  */
! 
! static tree
! fold_builtin_strncat (tree arglist)
! {
!   if (!validate_arglist (arglist,
! 			 POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
!     return 0;
!   else
!     {
!       tree dst = TREE_VALUE (arglist);
!       tree src = TREE_VALUE (TREE_CHAIN (arglist));
!       tree len = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist)));
!       const char *p = c_getstr (src);
! 
!       /* If the requested length is zero, or the src parameter string
!           length is zero, return the dst parameter.  */
!       if (integer_zerop (len) || (p && *p == '\0'))
!         return omit_two_operands (TREE_TYPE (dst), dst, src, len);
! 
!       /* If the requested len is greater than or equal to the string
!          length, call strcat.  */
!       if (TREE_CODE (len) == INTEGER_CST && p
! 	  && compare_tree_int (len, strlen (p)) >= 0)
! 	{
! 	  tree newarglist
! 	    = tree_cons (NULL_TREE, dst, build_tree_list (NULL_TREE, src));
! 	  tree fn = implicit_built_in_decls[BUILT_IN_STRCAT];
! 
! 	  /* If the replacement _DECL isn't initialized, don't do the
! 	     transformation.  */
! 	  if (!fn)
! 	    return 0;
! 
! 	  return build_function_call_expr (fn, newarglist);
! 	}
!       return 0;
!     }
! }
! 
! /* Simplify a call to the strspn builtin.
! 
!    Return 0 if no simplification was possible, otherwise return the
!    simplified form of the call as a tree.
! 
!    The simplified form may be a constant or other expression which
!    computes the same value, but in a more efficient manner (including
!    calls to other builtin functions).
! 
!    The call may contain arguments which need to be evaluated, but
!    which are not useful to determine the result of the call.  In
!    this case we return a chain of COMPOUND_EXPRs.  The LHS of each
!    COMPOUND_EXPR will be an argument which must be evaluated.
!    COMPOUND_EXPRs are chained through their RHS.  The RHS of the last
!    COMPOUND_EXPR in the chain will contain the tree for the simplified
!    form of the builtin function call.  */
! 
! static tree
! fold_builtin_strspn (tree arglist)
! {
!   if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
!     return 0;
!   else
!     {
!       tree s1 = TREE_VALUE (arglist), s2 = TREE_VALUE (TREE_CHAIN (arglist));
!       const char *p1 = c_getstr (s1), *p2 = c_getstr (s2);
! 
!       /* If both arguments are constants, evaluate at compile-time.  */
!       if (p1 && p2)
! 	{
! 	  const size_t r = strspn (p1, p2);
! 	  return size_int (r);
! 	}
! 
!       /* If either argument is "", return 0.  */
!       if ((p1 && *p1 == '\0') || (p2 && *p2 == '\0'))
! 	/* Evaluate and ignore both arguments in case either one has
! 	   side-effects.  */
! 	return omit_two_operands (integer_type_node, integer_zero_node,
! 				  s1, s2);
!       return 0;
!     }
! }
! 
! /* Simplify a call to the strcspn builtin.
! 
!    Return 0 if no simplification was possible, otherwise return the
!    simplified form of the call as a tree.
! 
!    The simplified form may be a constant or other expression which
!    computes the same value, but in a more efficient manner (including
!    calls to other builtin functions).
! 
!    The call may contain arguments which need to be evaluated, but
!    which are not useful to determine the result of the call.  In
!    this case we return a chain of COMPOUND_EXPRs.  The LHS of each
!    COMPOUND_EXPR will be an argument which must be evaluated.
!    COMPOUND_EXPRs are chained through their RHS.  The RHS of the last
!    COMPOUND_EXPR in the chain will contain the tree for the simplified
!    form of the builtin function call.  */
! 
! static tree
! fold_builtin_strcspn (tree arglist)
! {
!   if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
!     return 0;
!   else
!     {
!       tree s1 = TREE_VALUE (arglist), s2 = TREE_VALUE (TREE_CHAIN (arglist));
!       const char *p1 = c_getstr (s1), *p2 = c_getstr (s2);
! 
!       /* If both arguments are constants, evaluate at compile-time.  */
!       if (p1 && p2)
! 	{
! 	  const size_t r = strcspn (p1, p2);
! 	  return size_int (r);
! 	}
! 
!       /* If the first argument is "", return 0.  */
!       if (p1 && *p1 == '\0')
! 	{
! 	  /* Evaluate and ignore argument s2 in case it has
! 	     side-effects.  */
! 	  return omit_one_operand (integer_type_node,
! 				   integer_zero_node, s2);
! 	}
! 
!       /* If the second argument is "", return __builtin_strlen(s1).  */
!       if (p2 && *p2 == '\0')
! 	{
! 	  tree newarglist = build_tree_list (NULL_TREE, s1),
! 	    fn = implicit_built_in_decls[BUILT_IN_STRLEN];
! 
! 	  /* If the replacement _DECL isn't initialized, don't do the
! 	     transformation.  */
! 	  if (!fn)
! 	    return 0;
! 
! 	  return build_function_call_expr (fn, newarglist);
! 	}
!       return 0;
!     }
! }
! 
! /* Fold a call to the fputs builtin.  IGNORE is true if the value returned
!    by the builtin will be ignored.  UNLOCKED is true is true if this
!    actually a call to fputs_unlocked.  If LEN in non-NULL, it represents
!    the known length of the string.  Return NULL_TREE if no simplification
!    was possible.  */
! 
! tree
! fold_builtin_fputs (tree arglist, bool ignore, bool unlocked, tree len)
! {
!   tree fn;
!   tree fn_fputc = unlocked ? implicit_built_in_decls[BUILT_IN_FPUTC_UNLOCKED]
!     : implicit_built_in_decls[BUILT_IN_FPUTC];
!   tree fn_fwrite = unlocked ? implicit_built_in_decls[BUILT_IN_FWRITE_UNLOCKED]
!     : implicit_built_in_decls[BUILT_IN_FWRITE];
! 
!   /* If the return value is used, or the replacement _DECL isn't
!      initialized, don't do the transformation.  */
!   if (!ignore || !fn_fputc || !fn_fwrite)
!     return 0;
! 
!   /* Verify the arguments in the original call.  */
!   if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
!     return 0;
! 
!   if (! len)
!     len = c_strlen (TREE_VALUE (arglist), 0);
! 
!   /* Get the length of the string passed to fputs.  If the length
!      can't be determined, punt.  */
!   if (!len
!       || TREE_CODE (len) != INTEGER_CST)
!     return 0;
! 
!   switch (compare_tree_int (len, 1))
!     {
!     case -1: /* length is 0, delete the call entirely .  */
!       return omit_one_operand (integer_type_node, integer_zero_node,
! 			       TREE_VALUE (TREE_CHAIN (arglist)));
! 
!     case 0: /* length is 1, call fputc.  */
        {
! 	const char *p = c_getstr (TREE_VALUE (arglist));
  
! 	if (p != NULL)
! 	  {
! 	    /* New argument list transforming fputs(string, stream) to
! 	       fputc(string[0], stream).  */
! 	    arglist = build_tree_list (NULL_TREE,
! 				       TREE_VALUE (TREE_CHAIN (arglist)));
! 	    arglist = tree_cons (NULL_TREE,
! 				 build_int_cst (NULL_TREE, p[0]),
! 				 arglist);
! 	    fn = fn_fputc;
! 	    break;
! 	  }
        }
+       /* FALLTHROUGH */
+     case 1: /* length is greater than 1, call fwrite.  */
+       {
+ 	tree string_arg;
+ 
+ 	/* If optimizing for size keep fputs.  */
+ 	if (optimize_size)
+ 	  return 0;
+ 	string_arg = TREE_VALUE (arglist);
+ 	/* New argument list transforming fputs(string, stream) to
+ 	   fwrite(string, 1, len, stream).  */
+ 	arglist = build_tree_list (NULL_TREE,
+ 				   TREE_VALUE (TREE_CHAIN (arglist)));
+ 	arglist = tree_cons (NULL_TREE, len, arglist);
+ 	arglist = tree_cons (NULL_TREE, size_one_node, arglist);
+ 	arglist = tree_cons (NULL_TREE, string_arg, arglist);
+ 	fn = fn_fwrite;
+ 	break;
+       }
+     default:
+       gcc_unreachable ();
+     }
+ 
+   /* These optimizations are only performed when the result is ignored,
+      hence there's no need to cast the result to integer_type_node.  */
+   return build_function_call_expr (fn, arglist);
  }
  
! /* Fold the new_arg's arguments (ARGLIST). Returns true if there was an error
!    produced.  False otherwise.  This is done so that we don't output the error
!    or warning twice or three times.  */
! bool
! fold_builtin_next_arg (tree arglist)
! {
!   tree fntype = TREE_TYPE (current_function_decl);
  
!   if (TYPE_ARG_TYPES (fntype) == 0
!       || (TREE_VALUE (tree_last (TYPE_ARG_TYPES (fntype)))
! 	  == void_type_node))
!     {
!       error ("%<va_start%> used in function with fixed args");
!       return true;
!     }
!   else if (!arglist)
!     {
!       /* Evidently an out of date version of <stdarg.h>; can't validate
! 	 va_start's second argument, but can still work as intended.  */
!       warning ("%<__builtin_next_arg%> called without an argument");
!       return true;
!     }
!   /* We use __builtin_va_start (ap, 0, 0) or __builtin_next_arg (0, 0)
!      when we checked the arguments and if needed issued a warning.  */
!   else if (!TREE_CHAIN (arglist)
!            || !integer_zerop (TREE_VALUE (arglist))
!            || !integer_zerop (TREE_VALUE (TREE_CHAIN (arglist)))
!            || TREE_CHAIN (TREE_CHAIN (arglist)))
!     {
!       tree last_parm = tree_last (DECL_ARGUMENTS (current_function_decl));
!       tree arg = TREE_VALUE (arglist);
! 
!       if (TREE_CHAIN (arglist))
!         {
!           error ("%<va_start%> used with too many arguments");
!           return true;
!         }
! 
!       /* Strip off all nops for the sake of the comparison.  This
! 	 is not quite the same as STRIP_NOPS.  It does more.
! 	 We must also strip off INDIRECT_EXPR for C++ reference
! 	 parameters.  */
!       while (TREE_CODE (arg) == NOP_EXPR
! 	     || TREE_CODE (arg) == CONVERT_EXPR
! 	     || TREE_CODE (arg) == NON_LVALUE_EXPR
! 	     || TREE_CODE (arg) == INDIRECT_REF)
! 	arg = TREE_OPERAND (arg, 0);
!       if (arg != last_parm)
!         {
! 	  /* FIXME: Sometimes with the tree optimizers we can get the
! 	     not the last argument even though the user used the last
! 	     argument.  We just warn and set the arg to be the last
! 	     argument so that we will get wrong-code because of
! 	     it.  */
! 	  warning ("second parameter of %<va_start%> not last named argument");
! 	}
!       /* We want to verify the second parameter just once before the tree
!          optimizers are run and then avoid keeping it in the tree,
!          as otherwise we could warn even for correct code like:
!          void foo (int i, ...)
!          { va_list ap; i++; va_start (ap, i); va_end (ap); }  */
!       TREE_VALUE (arglist) = integer_zero_node;
!       TREE_CHAIN (arglist) = build_tree_list (NULL, integer_zero_node);
!     }
!   return false;
! }
! 
! 
! /* Simplify a call to the sprintf builtin.
! 
!    Return 0 if no simplification was possible, otherwise return the
!    simplified form of the call as a tree.  If IGNORED is true, it means that
!    the caller does not use the returned value of the function.  */
! 
! static tree
! fold_builtin_sprintf (tree arglist, int ignored)
  {
!   tree call, retval, dest, fmt;
!   const char *fmt_str = NULL;
  
!   /* Verify the required arguments in the original call.  We deal with two
!      types of sprintf() calls: 'sprintf (str, fmt)' and
!      'sprintf (dest, "%s", orig)'.  */
!   if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE)
!       && !validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, POINTER_TYPE,
! 	                    VOID_TYPE))
!     return NULL_TREE;
! 
!   /* Get the destination string and the format specifier.  */
!   dest = TREE_VALUE (arglist);
!   fmt = TREE_VALUE (TREE_CHAIN (arglist));
! 
!   /* Check whether the format is a literal string constant.  */
!   fmt_str = c_getstr (fmt);
!   if (fmt_str == NULL)
!     return NULL_TREE;
! 
!   call = NULL_TREE;
!   retval = NULL_TREE;
! 
!   /* If the format doesn't contain % args or %%, use strcpy.  */
!   if (strchr (fmt_str, '%') == NULL)
!     {
!       tree fn = implicit_built_in_decls[BUILT_IN_STRCPY];
! 
!       if (!fn)
! 	return NULL_TREE;
! 
!       /* Convert sprintf (str, fmt) into strcpy (str, fmt) when
! 	 'format' is known to contain no % formats.  */
!       arglist = build_tree_list (NULL_TREE, fmt);
!       arglist = tree_cons (NULL_TREE, dest, arglist);
!       call = build_function_call_expr (fn, arglist);
!       if (!ignored)
! 	retval = build_int_cst (NULL_TREE, strlen (fmt_str));
!     }
! 
!   /* If the format is "%s", use strcpy if the result isn't used.  */
!   else if (fmt_str && strcmp (fmt_str, "%s") == 0)
!     {
!       tree fn, orig;
!       fn = implicit_built_in_decls[BUILT_IN_STRCPY];
! 
!       if (!fn)
! 	return NULL_TREE;
! 
!       /* Convert sprintf (str1, "%s", str2) into strcpy (str1, str2).  */
!       orig = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist)));
!       arglist = build_tree_list (NULL_TREE, orig);
!       arglist = tree_cons (NULL_TREE, dest, arglist);
!       if (!ignored)
! 	{
! 	  retval = c_strlen (orig, 1);
! 	  if (!retval || TREE_CODE (retval) != INTEGER_CST)
! 	    return NULL_TREE;
! 	}
!       call = build_function_call_expr (fn, arglist);
!     }
! 
!   if (call && retval)
!     {
!       retval = convert
! 	(TREE_TYPE (TREE_TYPE (implicit_built_in_decls[BUILT_IN_SPRINTF])),
! 	 retval);
!       return build2 (COMPOUND_EXPR, TREE_TYPE (retval), call, retval);
!     }
    else
!     return call;
  }
diff -Nrcpad gcc-3.4.3/gcc/builtins.def gcc-4.0.0/gcc/builtins.def
*** gcc-3.4.3/gcc/builtins.def	Sat Mar 20 10:22:36 2004
--- gcc-4.0.0/gcc/builtins.def	Thu Feb 10 18:59:04 2005
***************
*** 1,6 ****
  /* This file contains the definitions and documentation for the
     builtins used in the GNU compiler.
!    Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
--- 1,7 ----
  /* This file contains the definitions and documentation for the
     builtins used in the GNU compiler.
!    Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005
!    Free Software Foundation, Inc.
  
  This file is part of GCC.
  
*************** Software Foundation, 59 Temple Place - S
*** 68,74 ****
  #undef DEF_GCC_BUILTIN
  #define DEF_GCC_BUILTIN(ENUM, NAME, TYPE, ATTRS)		\
    DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, BT_LAST,	\
!                false, false, false, ATTRS, true)
  
  /* A library builtin (like __builtin_strchr) is a builtin equivalent
     of an ANSI/ISO standard library function.  In addition to the
--- 69,75 ----
  #undef DEF_GCC_BUILTIN
  #define DEF_GCC_BUILTIN(ENUM, NAME, TYPE, ATTRS)		\
    DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, BT_LAST,	\
!                false, false, false, ATTRS, true, true)
  
  /* A library builtin (like __builtin_strchr) is a builtin equivalent
     of an ANSI/ISO standard library function.  In addition to the
*************** Software Foundation, 59 Temple Place - S
*** 79,85 ****
  #undef DEF_LIB_BUILTIN					
  #define DEF_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS)	\
    DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
! 	       true, true, false, ATTRS, true)
  
  /* Like DEF_LIB_BUILTIN, except that the function is not one that is
     specified by ANSI/ISO C.  So, when we're being fully conformant we
--- 80,86 ----
  #undef DEF_LIB_BUILTIN					
  #define DEF_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS)	\
    DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
! 	       true, true, false, ATTRS, true, true)
  
  /* Like DEF_LIB_BUILTIN, except that the function is not one that is
     specified by ANSI/ISO C.  So, when we're being fully conformant we
*************** Software Foundation, 59 Temple Place - S
*** 88,101 ****
  #undef DEF_EXT_LIB_BUILTIN				
  #define DEF_EXT_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS)	\
    DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
!    	       true, true, true, ATTRS, false)
  
  /* Like DEF_LIB_BUILTIN, except that the function is only a part of
     the standard in C99 or above.  */
  #undef DEF_C99_BUILTIN					
  #define DEF_C99_BUILTIN(ENUM, NAME, TYPE, ATTRS)	\
    DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
!    	       true, true, !flag_isoc99, ATTRS, TARGET_C99_FUNCTIONS)
  
  /* Builtin that is specified by C99 and C90 reserve the name for future use.
     We can still recognize the builtin in C90 mode but we can't produce it
--- 89,109 ----
  #undef DEF_EXT_LIB_BUILTIN				
  #define DEF_EXT_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS)	\
    DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
!    	       true, true, true, ATTRS, false, true)
! 
! /* Like DEF_LIB_BUILTIN, except that the function is only a part of
!    the standard in C94 or above.  */
! #undef DEF_C94_BUILTIN					
! #define DEF_C94_BUILTIN(ENUM, NAME, TYPE, ATTRS)	\
!   DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
!    	       true, true, !flag_isoc94, ATTRS, TARGET_C99_FUNCTIONS, true)
  
  /* Like DEF_LIB_BUILTIN, except that the function is only a part of
     the standard in C99 or above.  */
  #undef DEF_C99_BUILTIN					
  #define DEF_C99_BUILTIN(ENUM, NAME, TYPE, ATTRS)	\
    DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
!    	       true, true, !flag_isoc99, ATTRS, TARGET_C99_FUNCTIONS, true)
  
  /* Builtin that is specified by C99 and C90 reserve the name for future use.
     We can still recognize the builtin in C90 mode but we can't produce it
*************** Software Foundation, 59 Temple Place - S
*** 103,109 ****
  #undef DEF_C99_C90RES_BUILTIN					
  #define DEF_C99_C90RES_BUILTIN(ENUM, NAME, TYPE, ATTRS)	\
    DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
!    	       true, true, !flag_isoc99, ATTRS, TARGET_C99_FUNCTIONS)
  
  /* Define an attribute list for math functions that are normally
     "impure" because some of them may write into global memory for
--- 111,124 ----
  #undef DEF_C99_C90RES_BUILTIN					
  #define DEF_C99_C90RES_BUILTIN(ENUM, NAME, TYPE, ATTRS)	\
    DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
!    	       true, true, !flag_isoc99, ATTRS, TARGET_C99_FUNCTIONS, true)
! 
! /* Allocate the enum and the name for a builtin, but do not actually
!    define it here at all.  */
! #undef DEF_BUILTIN_STUB
! #define DEF_BUILTIN_STUB(ENUM, NAME) \
!   DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, 0, 0, false, false, \
! 	       false, 0, false, false)
  
  /* Define an attribute list for math functions that are normally
     "impure" because some of them may write into global memory for
*************** Software Foundation, 59 Temple Place - S
*** 115,121 ****
  /* Define an attribute list for math functions that are normally
     "pure" but if flag_unsafe_math_optimizations is set they are
     instead "const".  This distinction accounts for the fact that some
!    math functions check the rounding mode which is akin to examing
     global memory.  In "unsafe" mode we can be less careful.  */
  #undef ATTR_MATHFN_FPROUNDING
  #define ATTR_MATHFN_FPROUNDING (flag_unsafe_math_optimizations ? \
--- 130,136 ----
  /* Define an attribute list for math functions that are normally
     "pure" but if flag_unsafe_math_optimizations is set they are
     instead "const".  This distinction accounts for the fact that some
!    math functions check the rounding mode which is akin to examining
     global memory.  In "unsafe" mode we can be less careful.  */
  #undef ATTR_MATHFN_FPROUNDING
  #define ATTR_MATHFN_FPROUNDING (flag_unsafe_math_optimizations ? \
*************** DEF_EXT_LIB_BUILTIN    (BUILT_IN_POW10, 
*** 298,303 ****
--- 313,321 ----
  DEF_EXT_LIB_BUILTIN    (BUILT_IN_POW10F, "pow10f", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
  DEF_EXT_LIB_BUILTIN    (BUILT_IN_POW10L, "pow10l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
  DEF_C99_C90RES_BUILTIN (BUILT_IN_POWF, "powf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+ DEF_GCC_BUILTIN        (BUILT_IN_POWI, "powi", BT_FN_DOUBLE_DOUBLE_INT, ATTR_MATHFN_FPROUNDING)
+ DEF_GCC_BUILTIN        (BUILT_IN_POWIF, "powif", BT_FN_FLOAT_FLOAT_INT, ATTR_MATHFN_FPROUNDING)
+ DEF_GCC_BUILTIN        (BUILT_IN_POWIL, "powil", BT_FN_LONGDOUBLE_LONGDOUBLE_INT, ATTR_MATHFN_FPROUNDING)
  DEF_C99_C90RES_BUILTIN (BUILT_IN_POWL, "powl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
  DEF_C99_BUILTIN        (BUILT_IN_REMAINDER, "remainder", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
  DEF_C99_BUILTIN        (BUILT_IN_REMAINDERF, "remainderf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
*************** DEF_C99_BUILTIN        (BUILT_IN_SCALBLN
*** 320,325 ****
--- 338,346 ----
  DEF_C99_BUILTIN        (BUILT_IN_SCALBN, "scalbn", BT_FN_DOUBLE_DOUBLE_INT, ATTR_MATHFN_FPROUNDING_ERRNO)
  DEF_C99_BUILTIN        (BUILT_IN_SCALBNF, "scalbnf", BT_FN_FLOAT_FLOAT_INT, ATTR_MATHFN_FPROUNDING_ERRNO)
  DEF_C99_BUILTIN        (BUILT_IN_SCALBNL, "scalbnl", BT_FN_LONGDOUBLE_LONGDOUBLE_INT, ATTR_MATHFN_FPROUNDING_ERRNO)
+ DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNBIT, "signbit", BT_FN_INT_DOUBLE, ATTR_CONST_NOTHROW_LIST)
+ DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNBITF, "signbitf", BT_FN_INT_FLOAT, ATTR_CONST_NOTHROW_LIST)
+ DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNBITL, "signbitl", BT_FN_INT_LONGDOUBLE, ATTR_CONST_NOTHROW_LIST)
  DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNIFICAND, "significand", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
  DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNIFICANDF, "significandf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
  DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNIFICANDL, "significandl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
*************** DEF_C99_BUILTIN        (BUILT_IN_CTANL, 
*** 433,441 ****
  DEF_EXT_LIB_BUILTIN    (BUILT_IN_BCMP, "bcmp", BT_FN_INT_CONST_PTR_CONST_PTR_SIZE, ATTR_PURE_NOTHROW_LIST)
  DEF_EXT_LIB_BUILTIN    (BUILT_IN_BCOPY, "bcopy", BT_FN_VOID_CONST_PTR_PTR_SIZE, ATTR_NOTHROW_LIST)
  DEF_EXT_LIB_BUILTIN    (BUILT_IN_BZERO, "bzero", BT_FN_VOID_PTR_SIZE, ATTR_NOTHROW_LIST)
- DEF_EXT_LIB_BUILTIN    (BUILT_IN_FFS, "ffs", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LIST)
- DEF_EXT_LIB_BUILTIN    (BUILT_IN_FFSL, "ffsl", BT_FN_INT_LONG, ATTR_CONST_NOTHROW_LIST)
- DEF_EXT_LIB_BUILTIN    (BUILT_IN_FFSLL, "ffsll", BT_FN_INT_LONGLONG, ATTR_CONST_NOTHROW_LIST)
  DEF_EXT_LIB_BUILTIN    (BUILT_IN_INDEX, "index", BT_FN_STRING_CONST_STRING_INT, ATTR_PURE_NOTHROW_NONNULL_1)
  DEF_LIB_BUILTIN        (BUILT_IN_MEMCMP, "memcmp", BT_FN_INT_CONST_PTR_CONST_PTR_SIZE, ATTR_PURE_NOTHROW_NONNULL_1_2)
  DEF_LIB_BUILTIN        (BUILT_IN_MEMCPY, "memcpy", BT_FN_PTR_PTR_CONST_PTR_SIZE, ATTR_NOTHROW_NONNULL_1_2)
--- 454,459 ----
*************** DEF_LIB_BUILTIN        (BUILT_IN_STRSPN,
*** 460,492 ****
  DEF_LIB_BUILTIN        (BUILT_IN_STRSTR, "strstr", BT_FN_STRING_CONST_STRING_CONST_STRING, ATTR_PURE_NOTHROW_NONNULL_1_2)
  
  /* Category: stdio builtins.  */
! DEF_LIB_BUILTIN        (BUILT_IN_FPRINTF, "fprintf", BT_FN_INT_PTR_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_2_3)
! DEF_EXT_LIB_BUILTIN    (BUILT_IN_FPRINTF_UNLOCKED, "fprintf_unlocked", BT_FN_INT_PTR_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_2_3)
! DEF_LIB_BUILTIN        (BUILT_IN_FPUTC, "fputc", BT_FN_INT_INT_PTR, ATTR_NOTHROW_NONNULL_2)
! DEF_EXT_LIB_BUILTIN    (BUILT_IN_FPUTC_UNLOCKED, "fputc_unlocked", BT_FN_INT_INT_PTR, ATTR_NOTHROW_NONNULL_2)
! DEF_LIB_BUILTIN        (BUILT_IN_FPUTS, "fputs", BT_FN_INT_CONST_STRING_PTR, ATTR_NOTHROW_NONNULL_1_2)
! DEF_EXT_LIB_BUILTIN    (BUILT_IN_FPUTS_UNLOCKED, "fputs_unlocked", BT_FN_INT_CONST_STRING_PTR, ATTR_NOTHROW_NONNULL_1_2)
! DEF_LIB_BUILTIN        (BUILT_IN_FSCANF, "fscanf", BT_FN_INT_PTR_CONST_STRING_VAR, ATTR_FORMAT_SCANF_2_3)
! DEF_LIB_BUILTIN        (BUILT_IN_FWRITE, "fwrite", BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR, ATTR_NOTHROW_NONNULL_1_4)
! DEF_EXT_LIB_BUILTIN    (BUILT_IN_FWRITE_UNLOCKED, "fwrite_unlocked", BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR, ATTR_NOTHROW_NONNULL_1_4)
  DEF_LIB_BUILTIN        (BUILT_IN_PRINTF, "printf", BT_FN_INT_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_1_2)
  DEF_EXT_LIB_BUILTIN    (BUILT_IN_PRINTF_UNLOCKED, "printf_unlocked", BT_FN_INT_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_1_2)
! DEF_LIB_BUILTIN        (BUILT_IN_PUTCHAR, "putchar", BT_FN_INT_INT, ATTR_NOTHROW_LIST)
! DEF_EXT_LIB_BUILTIN    (BUILT_IN_PUTCHAR_UNLOCKED, "putchar_unlocked", BT_FN_INT_INT, ATTR_NOTHROW_LIST)
! DEF_LIB_BUILTIN        (BUILT_IN_PUTS, "puts", BT_FN_INT_CONST_STRING, ATTR_NOTHROW_NONNULL_1)
! DEF_EXT_LIB_BUILTIN    (BUILT_IN_PUTS_UNLOCKED, "puts_unlocked", BT_FN_INT_CONST_STRING, ATTR_NOTHROW_NONNULL_1)
  DEF_LIB_BUILTIN        (BUILT_IN_SCANF, "scanf", BT_FN_INT_CONST_STRING_VAR, ATTR_FORMAT_SCANF_1_2)
  DEF_C99_BUILTIN        (BUILT_IN_SNPRINTF, "snprintf", BT_FN_INT_STRING_SIZE_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_3_4)
  DEF_LIB_BUILTIN        (BUILT_IN_SPRINTF, "sprintf", BT_FN_INT_STRING_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_2_3)
  DEF_LIB_BUILTIN        (BUILT_IN_SSCANF, "sscanf", BT_FN_INT_CONST_STRING_CONST_STRING_VAR, ATTR_FORMAT_SCANF_2_3)
! DEF_LIB_BUILTIN        (BUILT_IN_VFPRINTF, "vfprintf", BT_FN_INT_PTR_CONST_STRING_VALIST_ARG, ATTR_FORMAT_PRINTF_2_0)
! DEF_C99_BUILTIN        (BUILT_IN_VFSCANF, "vfscanf", BT_FN_INT_PTR_CONST_STRING_VALIST_ARG, ATTR_FORMAT_SCANF_2_0)
  DEF_LIB_BUILTIN        (BUILT_IN_VPRINTF, "vprintf", BT_FN_INT_CONST_STRING_VALIST_ARG, ATTR_FORMAT_PRINTF_1_0)
  DEF_C99_BUILTIN        (BUILT_IN_VSCANF, "vscanf", BT_FN_INT_CONST_STRING_VALIST_ARG, ATTR_FORMAT_SCANF_1_0)
  DEF_C99_BUILTIN        (BUILT_IN_VSNPRINTF, "vsnprintf", BT_FN_INT_STRING_SIZE_CONST_STRING_VALIST_ARG, ATTR_FORMAT_PRINTF_3_0)
  DEF_LIB_BUILTIN        (BUILT_IN_VSPRINTF, "vsprintf", BT_FN_INT_STRING_CONST_STRING_VALIST_ARG, ATTR_FORMAT_PRINTF_2_0)
  DEF_C99_BUILTIN        (BUILT_IN_VSSCANF, "vsscanf", BT_FN_INT_CONST_STRING_CONST_STRING_VALIST_ARG, ATTR_FORMAT_SCANF_2_0)
  
  /* Category: miscellaneous builtins.  */
  DEF_LIB_BUILTIN        (BUILT_IN_ABORT, "abort", BT_FN_VOID, ATTR_NORETURN_NOTHROW_LIST)
  DEF_LIB_BUILTIN        (BUILT_IN_ABS, "abs", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LIST)
--- 478,544 ----
  DEF_LIB_BUILTIN        (BUILT_IN_STRSTR, "strstr", BT_FN_STRING_CONST_STRING_CONST_STRING, ATTR_PURE_NOTHROW_NONNULL_1_2)
  
  /* Category: stdio builtins.  */
! DEF_LIB_BUILTIN        (BUILT_IN_FPRINTF, "fprintf", BT_FN_INT_FILEPTR_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_2_3)
! DEF_EXT_LIB_BUILTIN    (BUILT_IN_FPRINTF_UNLOCKED, "fprintf_unlocked", BT_FN_INT_FILEPTR_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_2_3)
! DEF_LIB_BUILTIN        (BUILT_IN_FPUTC, "fputc", BT_FN_INT_INT_FILEPTR, ATTR_NONNULL_2)
! DEF_EXT_LIB_BUILTIN    (BUILT_IN_FPUTC_UNLOCKED, "fputc_unlocked", BT_FN_INT_INT_FILEPTR, ATTR_NONNULL_2)
! DEF_LIB_BUILTIN        (BUILT_IN_FPUTS, "fputs", BT_FN_INT_CONST_STRING_FILEPTR, ATTR_NONNULL_1_2)
! DEF_EXT_LIB_BUILTIN    (BUILT_IN_FPUTS_UNLOCKED, "fputs_unlocked", BT_FN_INT_CONST_STRING_FILEPTR, ATTR_NONNULL_1_2)
! DEF_LIB_BUILTIN        (BUILT_IN_FSCANF, "fscanf", BT_FN_INT_FILEPTR_CONST_STRING_VAR, ATTR_FORMAT_SCANF_2_3)
! DEF_LIB_BUILTIN        (BUILT_IN_FWRITE, "fwrite", BT_FN_SIZE_CONST_PTR_SIZE_SIZE_FILEPTR, ATTR_NONNULL_1_4)
! DEF_EXT_LIB_BUILTIN    (BUILT_IN_FWRITE_UNLOCKED, "fwrite_unlocked", BT_FN_SIZE_CONST_PTR_SIZE_SIZE_FILEPTR, ATTR_NONNULL_1_4)
  DEF_LIB_BUILTIN        (BUILT_IN_PRINTF, "printf", BT_FN_INT_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_1_2)
  DEF_EXT_LIB_BUILTIN    (BUILT_IN_PRINTF_UNLOCKED, "printf_unlocked", BT_FN_INT_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_1_2)
! DEF_LIB_BUILTIN        (BUILT_IN_PUTCHAR, "putchar", BT_FN_INT_INT, ATTR_NULL)
! DEF_EXT_LIB_BUILTIN    (BUILT_IN_PUTCHAR_UNLOCKED, "putchar_unlocked", BT_FN_INT_INT, ATTR_NULL)
! DEF_LIB_BUILTIN        (BUILT_IN_PUTS, "puts", BT_FN_INT_CONST_STRING, ATTR_NONNULL_1)
! DEF_EXT_LIB_BUILTIN    (BUILT_IN_PUTS_UNLOCKED, "puts_unlocked", BT_FN_INT_CONST_STRING, ATTR_NONNULL_1)
  DEF_LIB_BUILTIN        (BUILT_IN_SCANF, "scanf", BT_FN_INT_CONST_STRING_VAR, ATTR_FORMAT_SCANF_1_2)
  DEF_C99_BUILTIN        (BUILT_IN_SNPRINTF, "snprintf", BT_FN_INT_STRING_SIZE_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_3_4)
  DEF_LIB_BUILTIN        (BUILT_IN_SPRINTF, "sprintf", BT_FN_INT_STRING_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_2_3)
  DEF_LIB_BUILTIN        (BUILT_IN_SSCANF, "sscanf", BT_FN_INT_CONST_STRING_CONST_STRING_VAR, ATTR_FORMAT_SCANF_2_3)
! DEF_LIB_BUILTIN        (BUILT_IN_VFPRINTF, "vfprintf", BT_FN_INT_FILEPTR_CONST_STRING_VALIST_ARG, ATTR_FORMAT_PRINTF_2_0)
! DEF_C99_BUILTIN        (BUILT_IN_VFSCANF, "vfscanf", BT_FN_INT_FILEPTR_CONST_STRING_VALIST_ARG, ATTR_FORMAT_SCANF_2_0)
  DEF_LIB_BUILTIN        (BUILT_IN_VPRINTF, "vprintf", BT_FN_INT_CONST_STRING_VALIST_ARG, ATTR_FORMAT_PRINTF_1_0)
  DEF_C99_BUILTIN        (BUILT_IN_VSCANF, "vscanf", BT_FN_INT_CONST_STRING_VALIST_ARG, ATTR_FORMAT_SCANF_1_0)
  DEF_C99_BUILTIN        (BUILT_IN_VSNPRINTF, "vsnprintf", BT_FN_INT_STRING_SIZE_CONST_STRING_VALIST_ARG, ATTR_FORMAT_PRINTF_3_0)
  DEF_LIB_BUILTIN        (BUILT_IN_VSPRINTF, "vsprintf", BT_FN_INT_STRING_CONST_STRING_VALIST_ARG, ATTR_FORMAT_PRINTF_2_0)
  DEF_C99_BUILTIN        (BUILT_IN_VSSCANF, "vsscanf", BT_FN_INT_CONST_STRING_CONST_STRING_VALIST_ARG, ATTR_FORMAT_SCANF_2_0)
  
+ /* Category: ctype builtins.  */
+ DEF_LIB_BUILTIN        (BUILT_IN_ISALNUM, "isalnum", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LIST)
+ DEF_LIB_BUILTIN        (BUILT_IN_ISALPHA, "isalpha", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LIST)
+ DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISASCII, "isascii", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LIST)
+ DEF_C99_BUILTIN        (BUILT_IN_ISBLANK, "isblank", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LIST)
+ DEF_LIB_BUILTIN        (BUILT_IN_ISCNTRL, "iscntrl", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LIST)
+ DEF_LIB_BUILTIN        (BUILT_IN_ISDIGIT, "isdigit", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LIST)
+ DEF_LIB_BUILTIN        (BUILT_IN_ISGRAPH, "isgraph", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LIST)
+ DEF_LIB_BUILTIN        (BUILT_IN_ISLOWER, "islower", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LIST)
+ DEF_LIB_BUILTIN        (BUILT_IN_ISPRINT, "isprint", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LIST)
+ DEF_LIB_BUILTIN        (BUILT_IN_ISPUNCT, "ispunct", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LIST)
+ DEF_LIB_BUILTIN        (BUILT_IN_ISSPACE, "isspace", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LIST)
+ DEF_LIB_BUILTIN        (BUILT_IN_ISUPPER, "isupper", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LIST)
+ DEF_LIB_BUILTIN        (BUILT_IN_ISXDIGIT, "isxdigit", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LIST)
+ DEF_EXT_LIB_BUILTIN    (BUILT_IN_TOASCII, "toascii", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LIST)
+ DEF_LIB_BUILTIN        (BUILT_IN_TOLOWER, "tolower", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LIST)
+ DEF_LIB_BUILTIN        (BUILT_IN_TOUPPER, "toupper", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LIST)
+ 
+ /* Category: wctype builtins.  */
+ DEF_C94_BUILTIN        (BUILT_IN_ISWALNUM, "iswalnum", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LIST)
+ DEF_C94_BUILTIN        (BUILT_IN_ISWALPHA, "iswalpha", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LIST)
+ DEF_C99_BUILTIN        (BUILT_IN_ISWBLANK, "iswblank", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LIST)
+ DEF_C94_BUILTIN        (BUILT_IN_ISWCNTRL, "iswcntrl", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LIST)
+ DEF_C94_BUILTIN        (BUILT_IN_ISWDIGIT, "iswdigit", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LIST)
+ DEF_C94_BUILTIN        (BUILT_IN_ISWGRAPH, "iswgraph", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LIST)
+ DEF_C94_BUILTIN        (BUILT_IN_ISWLOWER, "iswlower", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LIST)
+ DEF_C94_BUILTIN        (BUILT_IN_ISWPRINT, "iswprint", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LIST)
+ DEF_C94_BUILTIN        (BUILT_IN_ISWPUNCT, "iswpunct", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LIST)
+ DEF_C94_BUILTIN        (BUILT_IN_ISWSPACE, "iswspace", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LIST)
+ DEF_C94_BUILTIN        (BUILT_IN_ISWUPPER, "iswupper", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LIST)
+ DEF_C94_BUILTIN        (BUILT_IN_ISWXDIGIT, "iswxdigit", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LIST)
+ DEF_C94_BUILTIN        (BUILT_IN_TOWLOWER, "towlower", BT_FN_WINT_WINT, ATTR_PURE_NOTHROW_LIST)
+ DEF_C94_BUILTIN        (BUILT_IN_TOWUPPER, "towupper", BT_FN_WINT_WINT, ATTR_PURE_NOTHROW_LIST)
+ 
  /* Category: miscellaneous builtins.  */
  DEF_LIB_BUILTIN        (BUILT_IN_ABORT, "abort", BT_FN_VOID, ATTR_NORETURN_NOTHROW_LIST)
  DEF_LIB_BUILTIN        (BUILT_IN_ABS, "abs", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LIST)
*************** DEF_GCC_BUILTIN        (BUILT_IN_APPLY_A
*** 497,524 ****
  DEF_GCC_BUILTIN        (BUILT_IN_ARGS_INFO, "args_info", BT_FN_INT_INT, ATTR_NULL)
  DEF_LIB_BUILTIN        (BUILT_IN_CALLOC, "calloc", BT_FN_PTR_SIZE_SIZE, ATTR_MALLOC_NOTHROW_LIST)
  DEF_GCC_BUILTIN        (BUILT_IN_CLASSIFY_TYPE, "classify_type", BT_FN_INT_VAR, ATTR_NULL)
! DEF_GCC_BUILTIN        (BUILT_IN_CLZ, "clz", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LIST)
! DEF_GCC_BUILTIN        (BUILT_IN_CLZL, "clzl", BT_FN_INT_LONG, ATTR_CONST_NOTHROW_LIST)
! DEF_GCC_BUILTIN        (BUILT_IN_CLZLL, "clzll", BT_FN_INT_LONGLONG, ATTR_CONST_NOTHROW_LIST)
  DEF_GCC_BUILTIN        (BUILT_IN_CONSTANT_P, "constant_p", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_LIST)
! DEF_GCC_BUILTIN        (BUILT_IN_CTZ, "ctz", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LIST)
! DEF_GCC_BUILTIN        (BUILT_IN_CTZL, "ctzl", BT_FN_INT_LONG, ATTR_CONST_NOTHROW_LIST)
! DEF_GCC_BUILTIN        (BUILT_IN_CTZLL, "ctzll", BT_FN_INT_LONGLONG, ATTR_CONST_NOTHROW_LIST)
  DEF_EXT_LIB_BUILTIN    (BUILT_IN_DCGETTEXT, "dcgettext", BT_FN_STRING_CONST_STRING_CONST_STRING_INT, ATTR_FORMAT_ARG_2)
  DEF_EXT_LIB_BUILTIN    (BUILT_IN_DGETTEXT, "dgettext", BT_FN_STRING_CONST_STRING_CONST_STRING, ATTR_FORMAT_ARG_2)
  DEF_GCC_BUILTIN        (BUILT_IN_DWARF_CFA, "dwarf_cfa", BT_FN_PTR, ATTR_NULL)
! DEF_GCC_BUILTIN        (BUILT_IN_DWARF_SP_COLUMN, "dwarf_sp_column", BT_FN_UNSIGNED, ATTR_NULL)
  DEF_GCC_BUILTIN        (BUILT_IN_EH_RETURN, "eh_return", BT_FN_VOID_PTRMODE_PTR, ATTR_NORETURN_NOTHROW_LIST)
  DEF_GCC_BUILTIN        (BUILT_IN_EH_RETURN_DATA_REGNO, "eh_return_data_regno", BT_FN_INT_INT, ATTR_NULL)
  DEF_LIB_BUILTIN        (BUILT_IN_EXIT, "exit", BT_FN_VOID_INT, ATTR_NORETURN_NOTHROW_LIST)
! DEF_GCC_BUILTIN        (BUILT_IN_EXPECT, "expect", BT_FN_LONG_LONG_LONG, ATTR_NULL)
  DEF_GCC_BUILTIN        (BUILT_IN_EXTEND_POINTER, "extend_pointer", BT_FN_WORD_PTR, ATTR_CONST_NOTHROW_LIST)
  DEF_GCC_BUILTIN        (BUILT_IN_EXTRACT_RETURN_ADDR, "extract_return_addr", BT_FN_PTR_PTR, ATTR_NULL)
! DEF_GCC_BUILTIN        (BUILT_IN_FRAME_ADDRESS, "frame_address", BT_FN_PTR_UNSIGNED, ATTR_NULL)
  DEF_GCC_BUILTIN        (BUILT_IN_FROB_RETURN_ADDR, "frob_return_addr", BT_FN_PTR_PTR, ATTR_NULL)
  DEF_EXT_LIB_BUILTIN    (BUILT_IN_GETTEXT, "gettext", BT_FN_STRING_CONST_STRING, ATTR_FORMAT_ARG_1)
  DEF_C99_BUILTIN        (BUILT_IN_IMAXABS, "imaxabs", BT_FN_INTMAX_INTMAX, ATTR_CONST_NOTHROW_LIST)
  DEF_GCC_BUILTIN        (BUILT_IN_INIT_DWARF_REG_SIZES, "init_dwarf_reg_size_table", BT_FN_VOID_PTR, ATTR_NULL)
  DEF_GCC_BUILTIN        (BUILT_IN_ISGREATER, "isgreater", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_LIST)
  DEF_GCC_BUILTIN        (BUILT_IN_ISGREATEREQUAL, "isgreaterequal", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_LIST)
  DEF_GCC_BUILTIN        (BUILT_IN_ISLESS, "isless", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_LIST)
--- 549,598 ----
  DEF_GCC_BUILTIN        (BUILT_IN_ARGS_INFO, "args_info", BT_FN_INT_INT, ATTR_NULL)
  DEF_LIB_BUILTIN        (BUILT_IN_CALLOC, "calloc", BT_FN_PTR_SIZE_SIZE, ATTR_MALLOC_NOTHROW_LIST)
  DEF_GCC_BUILTIN        (BUILT_IN_CLASSIFY_TYPE, "classify_type", BT_FN_INT_VAR, ATTR_NULL)
! DEF_GCC_BUILTIN        (BUILT_IN_CLZ, "clz", BT_FN_INT_UINT, ATTR_CONST_NOTHROW_LIST)
! DEF_GCC_BUILTIN        (BUILT_IN_CLZIMAX, "clzimax", BT_FN_INT_UINTMAX, ATTR_CONST_NOTHROW_LIST)
! DEF_GCC_BUILTIN        (BUILT_IN_CLZL, "clzl", BT_FN_INT_ULONG, ATTR_CONST_NOTHROW_LIST)
! DEF_GCC_BUILTIN        (BUILT_IN_CLZLL, "clzll", BT_FN_INT_ULONGLONG, ATTR_CONST_NOTHROW_LIST)
  DEF_GCC_BUILTIN        (BUILT_IN_CONSTANT_P, "constant_p", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_LIST)
! DEF_GCC_BUILTIN        (BUILT_IN_CTZ, "ctz", BT_FN_INT_UINT, ATTR_CONST_NOTHROW_LIST)
! DEF_GCC_BUILTIN        (BUILT_IN_CTZIMAX, "ctzimax", BT_FN_INT_UINTMAX, ATTR_CONST_NOTHROW_LIST)
! DEF_GCC_BUILTIN        (BUILT_IN_CTZL, "ctzl", BT_FN_INT_ULONG, ATTR_CONST_NOTHROW_LIST)
! DEF_GCC_BUILTIN        (BUILT_IN_CTZLL, "ctzll", BT_FN_INT_ULONGLONG, ATTR_CONST_NOTHROW_LIST)
  DEF_EXT_LIB_BUILTIN    (BUILT_IN_DCGETTEXT, "dcgettext", BT_FN_STRING_CONST_STRING_CONST_STRING_INT, ATTR_FORMAT_ARG_2)
  DEF_EXT_LIB_BUILTIN    (BUILT_IN_DGETTEXT, "dgettext", BT_FN_STRING_CONST_STRING_CONST_STRING, ATTR_FORMAT_ARG_2)
  DEF_GCC_BUILTIN        (BUILT_IN_DWARF_CFA, "dwarf_cfa", BT_FN_PTR, ATTR_NULL)
! DEF_GCC_BUILTIN        (BUILT_IN_DWARF_SP_COLUMN, "dwarf_sp_column", BT_FN_UINT, ATTR_NULL)
  DEF_GCC_BUILTIN        (BUILT_IN_EH_RETURN, "eh_return", BT_FN_VOID_PTRMODE_PTR, ATTR_NORETURN_NOTHROW_LIST)
  DEF_GCC_BUILTIN        (BUILT_IN_EH_RETURN_DATA_REGNO, "eh_return_data_regno", BT_FN_INT_INT, ATTR_NULL)
+ DEF_EXT_LIB_BUILTIN        (BUILT_IN_EXECL, "execl", BT_FN_INT_CONST_STRING_CONST_STRING_VAR, ATTR_SENTINEL_NOTHROW_LIST)
+ DEF_EXT_LIB_BUILTIN        (BUILT_IN_EXECLP, "execlp", BT_FN_INT_CONST_STRING_CONST_STRING_VAR, ATTR_SENTINEL_NOTHROW_LIST)
+ DEF_EXT_LIB_BUILTIN        (BUILT_IN_EXECLE, "execle", BT_FN_INT_CONST_STRING_CONST_STRING_VAR, ATTR_NOTHROW_SENTINEL_1)
+ DEF_EXT_LIB_BUILTIN        (BUILT_IN_EXECV, "execv", BT_FN_INT_CONST_STRING_PTR_CONST_STRING, ATTR_NOTHROW_LIST)
+ DEF_EXT_LIB_BUILTIN        (BUILT_IN_EXECVP, "execvp", BT_FN_INT_CONST_STRING_PTR_CONST_STRING, ATTR_NOTHROW_LIST)
+ DEF_EXT_LIB_BUILTIN        (BUILT_IN_EXECVE, "execve", BT_FN_INT_CONST_STRING_PTR_CONST_STRING_PTR_CONST_STRING, ATTR_NOTHROW_LIST)
  DEF_LIB_BUILTIN        (BUILT_IN_EXIT, "exit", BT_FN_VOID_INT, ATTR_NORETURN_NOTHROW_LIST)
! DEF_GCC_BUILTIN        (BUILT_IN_EXPECT, "expect", BT_FN_LONG_LONG_LONG, ATTR_CONST_NOTHROW_LIST)
  DEF_GCC_BUILTIN        (BUILT_IN_EXTEND_POINTER, "extend_pointer", BT_FN_WORD_PTR, ATTR_CONST_NOTHROW_LIST)
  DEF_GCC_BUILTIN        (BUILT_IN_EXTRACT_RETURN_ADDR, "extract_return_addr", BT_FN_PTR_PTR, ATTR_NULL)
! DEF_EXT_LIB_BUILTIN    (BUILT_IN_FFS, "ffs", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LIST)
! DEF_EXT_LIB_BUILTIN    (BUILT_IN_FFSIMAX, "ffsimax", BT_FN_INT_INTMAX, ATTR_CONST_NOTHROW_LIST)
! DEF_EXT_LIB_BUILTIN    (BUILT_IN_FFSL, "ffsl", BT_FN_INT_LONG, ATTR_CONST_NOTHROW_LIST)
! DEF_EXT_LIB_BUILTIN    (BUILT_IN_FFSLL, "ffsll", BT_FN_INT_LONGLONG, ATTR_CONST_NOTHROW_LIST)
! DEF_EXT_LIB_BUILTIN        (BUILT_IN_FORK, "fork", BT_FN_PID, ATTR_NOTHROW_LIST)
! DEF_GCC_BUILTIN        (BUILT_IN_FRAME_ADDRESS, "frame_address", BT_FN_PTR_UINT, ATTR_NULL)
  DEF_GCC_BUILTIN        (BUILT_IN_FROB_RETURN_ADDR, "frob_return_addr", BT_FN_PTR_PTR, ATTR_NULL)
  DEF_EXT_LIB_BUILTIN    (BUILT_IN_GETTEXT, "gettext", BT_FN_STRING_CONST_STRING, ATTR_FORMAT_ARG_1)
  DEF_C99_BUILTIN        (BUILT_IN_IMAXABS, "imaxabs", BT_FN_INTMAX_INTMAX, ATTR_CONST_NOTHROW_LIST)
  DEF_GCC_BUILTIN        (BUILT_IN_INIT_DWARF_REG_SIZES, "init_dwarf_reg_size_table", BT_FN_VOID_PTR, ATTR_NULL)
+ DEF_EXT_LIB_BUILTIN    (BUILT_IN_FINITE, "finite", BT_FN_INT_DOUBLE, ATTR_CONST_NOTHROW_LIST)
+ DEF_EXT_LIB_BUILTIN    (BUILT_IN_FINITEF, "finitef", BT_FN_INT_FLOAT, ATTR_CONST_NOTHROW_LIST)
+ DEF_EXT_LIB_BUILTIN    (BUILT_IN_FINITEL, "finitel", BT_FN_INT_LONGDOUBLE, ATTR_CONST_NOTHROW_LIST)
+ DEF_C99_C90RES_BUILTIN (BUILT_IN_ISINF, "isinf", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_LIST)
+ DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISINFF, "isinff", BT_FN_INT_FLOAT, ATTR_CONST_NOTHROW_LIST)
+ DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISINFL, "isinfl", BT_FN_INT_LONGDOUBLE, ATTR_CONST_NOTHROW_LIST)
+ DEF_C99_C90RES_BUILTIN (BUILT_IN_ISNAN, "isnan", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_LIST)
+ DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISNANF, "isnanf", BT_FN_INT_FLOAT, ATTR_CONST_NOTHROW_LIST)
+ DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISNANL, "isnanl", BT_FN_INT_LONGDOUBLE, ATTR_CONST_NOTHROW_LIST)
  DEF_GCC_BUILTIN        (BUILT_IN_ISGREATER, "isgreater", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_LIST)
  DEF_GCC_BUILTIN        (BUILT_IN_ISGREATEREQUAL, "isgreaterequal", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_LIST)
  DEF_GCC_BUILTIN        (BUILT_IN_ISLESS, "isless", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_LIST)
*************** DEF_C99_BUILTIN        (BUILT_IN_LLABS, 
*** 530,544 ****
  DEF_GCC_BUILTIN        (BUILT_IN_LONGJMP, "longjmp", BT_FN_VOID_PTR_INT, ATTR_NORETURN_NOTHROW_LIST)
  DEF_LIB_BUILTIN        (BUILT_IN_MALLOC, "malloc", BT_FN_PTR_SIZE, ATTR_MALLOC_NOTHROW_LIST)
  DEF_GCC_BUILTIN        (BUILT_IN_NEXT_ARG, "next_arg", BT_FN_PTR_VAR, ATTR_NULL)
! DEF_GCC_BUILTIN        (BUILT_IN_PARITY, "parity", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LIST)
! DEF_GCC_BUILTIN        (BUILT_IN_PARITYL, "parityl", BT_FN_INT_LONG, ATTR_CONST_NOTHROW_LIST)
! DEF_GCC_BUILTIN        (BUILT_IN_PARITYLL, "parityll", BT_FN_INT_LONGLONG, ATTR_CONST_NOTHROW_LIST)
! DEF_GCC_BUILTIN        (BUILT_IN_POPCOUNT, "popcount", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LIST)
! DEF_GCC_BUILTIN        (BUILT_IN_POPCOUNTL, "popcountl", BT_FN_INT_LONG, ATTR_CONST_NOTHROW_LIST)
! DEF_GCC_BUILTIN        (BUILT_IN_POPCOUNTLL, "popcountll", BT_FN_INT_LONGLONG, ATTR_CONST_NOTHROW_LIST)
  DEF_GCC_BUILTIN        (BUILT_IN_PREFETCH, "prefetch", BT_FN_VOID_CONST_PTR_VAR, ATTR_NULL)
  DEF_GCC_BUILTIN        (BUILT_IN_RETURN, "return", BT_FN_VOID_PTR, ATTR_NORETURN_NOTHROW_LIST)
! DEF_GCC_BUILTIN        (BUILT_IN_RETURN_ADDRESS, "return_address", BT_FN_PTR_UNSIGNED, ATTR_NULL)
  DEF_GCC_BUILTIN        (BUILT_IN_SAVEREGS, "saveregs", BT_FN_PTR_VAR, ATTR_NULL)
  DEF_GCC_BUILTIN        (BUILT_IN_SETJMP, "setjmp", BT_FN_INT_PTR, ATTR_NULL)
  DEF_GCC_BUILTIN        (BUILT_IN_STDARG_START, "stdarg_start", BT_FN_VOID_VALIST_REF_VAR, ATTR_NULL)
--- 604,620 ----
  DEF_GCC_BUILTIN        (BUILT_IN_LONGJMP, "longjmp", BT_FN_VOID_PTR_INT, ATTR_NORETURN_NOTHROW_LIST)
  DEF_LIB_BUILTIN        (BUILT_IN_MALLOC, "malloc", BT_FN_PTR_SIZE, ATTR_MALLOC_NOTHROW_LIST)
  DEF_GCC_BUILTIN        (BUILT_IN_NEXT_ARG, "next_arg", BT_FN_PTR_VAR, ATTR_NULL)
! DEF_GCC_BUILTIN        (BUILT_IN_PARITY, "parity", BT_FN_INT_UINT, ATTR_CONST_NOTHROW_LIST)
! DEF_GCC_BUILTIN        (BUILT_IN_PARITYIMAX, "parityimax", BT_FN_INT_UINTMAX, ATTR_CONST_NOTHROW_LIST)
! DEF_GCC_BUILTIN        (BUILT_IN_PARITYL, "parityl", BT_FN_INT_ULONG, ATTR_CONST_NOTHROW_LIST)
! DEF_GCC_BUILTIN        (BUILT_IN_PARITYLL, "parityll", BT_FN_INT_ULONGLONG, ATTR_CONST_NOTHROW_LIST)
! DEF_GCC_BUILTIN        (BUILT_IN_POPCOUNT, "popcount", BT_FN_INT_UINT, ATTR_CONST_NOTHROW_LIST)
! DEF_GCC_BUILTIN        (BUILT_IN_POPCOUNTIMAX, "popcountimax", BT_FN_INT_UINTMAX, ATTR_CONST_NOTHROW_LIST)
! DEF_GCC_BUILTIN        (BUILT_IN_POPCOUNTL, "popcountl", BT_FN_INT_ULONG, ATTR_CONST_NOTHROW_LIST)
! DEF_GCC_BUILTIN        (BUILT_IN_POPCOUNTLL, "popcountll", BT_FN_INT_ULONGLONG, ATTR_CONST_NOTHROW_LIST)
  DEF_GCC_BUILTIN        (BUILT_IN_PREFETCH, "prefetch", BT_FN_VOID_CONST_PTR_VAR, ATTR_NULL)
  DEF_GCC_BUILTIN        (BUILT_IN_RETURN, "return", BT_FN_VOID_PTR, ATTR_NORETURN_NOTHROW_LIST)
! DEF_GCC_BUILTIN        (BUILT_IN_RETURN_ADDRESS, "return_address", BT_FN_PTR_UINT, ATTR_NULL)
  DEF_GCC_BUILTIN        (BUILT_IN_SAVEREGS, "saveregs", BT_FN_PTR_VAR, ATTR_NULL)
  DEF_GCC_BUILTIN        (BUILT_IN_SETJMP, "setjmp", BT_FN_INT_PTR, ATTR_NULL)
  DEF_GCC_BUILTIN        (BUILT_IN_STDARG_START, "stdarg_start", BT_FN_VOID_VALIST_REF_VAR, ATTR_NULL)
*************** DEF_EXT_LIB_BUILTIN    (BUILT_IN_STRFMON
*** 546,553 ****
--- 622,643 ----
  DEF_LIB_BUILTIN        (BUILT_IN_STRFTIME, "strftime", BT_FN_SIZE_STRING_SIZE_CONST_STRING_CONST_PTR, ATTR_FORMAT_STRFTIME_3_0)
  DEF_GCC_BUILTIN        (BUILT_IN_TRAP, "trap", BT_FN_VOID, ATTR_NORETURN_NOTHROW_LIST)
  DEF_GCC_BUILTIN        (BUILT_IN_UNWIND_INIT, "unwind_init", BT_FN_VOID, ATTR_NULL)
+ DEF_GCC_BUILTIN        (BUILT_IN_UPDATE_SETJMP_BUF, "update_setjmp_buf", BT_FN_VOID_PTR_INT, ATTR_NULL)
  DEF_GCC_BUILTIN        (BUILT_IN_VA_COPY, "va_copy", BT_FN_VOID_VALIST_REF_VALIST_ARG, ATTR_NULL)
  DEF_GCC_BUILTIN        (BUILT_IN_VA_END, "va_end", BT_FN_VOID_VALIST_REF, ATTR_NULL)
  DEF_GCC_BUILTIN        (BUILT_IN_VA_START, "va_start", BT_FN_VOID_VALIST_REF_VAR, ATTR_NULL)
  DEF_EXT_LIB_BUILTIN    (BUILT_IN__EXIT, "_exit", BT_FN_VOID_INT, ATTR_NORETURN_NOTHROW_LIST)
  DEF_C99_BUILTIN        (BUILT_IN__EXIT2, "_Exit", BT_FN_VOID_INT, ATTR_NORETURN_NOTHROW_LIST)
+ 
+ /* Implementing nested functions.  */
+ DEF_BUILTIN_STUB (BUILT_IN_INIT_TRAMPOLINE, "__builtin_init_trampoline")
+ DEF_BUILTIN_STUB (BUILT_IN_ADJUST_TRAMPOLINE, "__builtin_adjust_trampoline")
+ DEF_BUILTIN_STUB (BUILT_IN_NONLOCAL_GOTO, "__builtin_nonlocal_goto")
+ 
+ /* Implementing variable sized local variables.  */
+ DEF_BUILTIN_STUB (BUILT_IN_STACK_SAVE, "__builtin_stack_save")
+ DEF_BUILTIN_STUB (BUILT_IN_STACK_RESTORE, "__builtin_stack_restore")
+ 
+ /* Profiling hooks.  */
+ DEF_BUILTIN_STUB (BUILT_IN_PROFILE_FUNC_ENTER, "profile_func_enter")
+ DEF_BUILTIN_STUB (BUILT_IN_PROFILE_FUNC_EXIT, "profile_func_exit")
diff -Nrcpad gcc-3.4.3/gcc/c-aux-info.c gcc-4.0.0/gcc/c-aux-info.c
*** gcc-3.4.3/gcc/c-aux-info.c	Mon Sep 22 05:09:11 2003
--- gcc-4.0.0/gcc/c-aux-info.c	Sun Oct  3 20:52:59 2004
***************
*** 2,8 ****
     on information stored in GCC's tree structure.  This code implements the
     -aux-info option.
     Copyright (C) 1989, 1991, 1994, 1995, 1997, 1998,
!    1999, 2000, 2003 Free Software Foundation, Inc.
     Contributed by Ron Guilmette (rfg@segfault.us.com).
  
  This file is part of GCC.
--- 2,8 ----
     on information stored in GCC's tree structure.  This code implements the
     -aux-info option.
     Copyright (C) 1989, 1991, 1994, 1995, 1997, 1998,
!    1999, 2000, 2003, 2004 Free Software Foundation, Inc.
     Contributed by Ron Guilmette (rfg@segfault.us.com).
  
  This file is part of GCC.
*************** gen_type (const char *ret_val, tree t, f
*** 430,436 ****
            data_type = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (t)));
            /* Normally, `unsigned' is part of the deal.  Not so if it comes
  	     with a type qualifier.  */
!           if (TREE_UNSIGNED (t) && TYPE_QUALS (t))
  	    data_type = concat ("unsigned ", data_type, NULL);
  	  break;
  
--- 430,436 ----
            data_type = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (t)));
            /* Normally, `unsigned' is part of the deal.  Not so if it comes
  	     with a type qualifier.  */
!           if (TYPE_UNSIGNED (t) && TYPE_QUALS (t))
  	    data_type = concat ("unsigned ", data_type, NULL);
  	  break;
  
*************** gen_type (const char *ret_val, tree t, f
*** 447,453 ****
  	  break;
  
          default:
!           abort ();
          }
      }
    if (TYPE_READONLY (t))
--- 447,453 ----
  	  break;
  
          default:
!           gcc_unreachable ();
          }
      }
    if (TYPE_READONLY (t))
*************** gen_decl (tree decl, int is_func_definit
*** 531,537 ****
  
    ret_val = affix_data_type (ret_val);
  
!   if (TREE_CODE (decl) != FUNCTION_DECL && DECL_REGISTER (decl))
      ret_val = concat ("register ", ret_val, NULL);
    if (TREE_PUBLIC (decl))
      ret_val = concat ("extern ", ret_val, NULL);
--- 531,537 ----
  
    ret_val = affix_data_type (ret_val);
  
!   if (TREE_CODE (decl) != FUNCTION_DECL && C_DECL_REGISTER (decl))
      ret_val = concat ("register ", ret_val, NULL);
    if (TREE_PUBLIC (decl))
      ret_val = concat ("extern ", ret_val, NULL);
*************** gen_aux_info_record (tree fndecl, int is
*** 554,564 ****
    if (flag_gen_aux_info)
      {
        static int compiled_from_record = 0;
  
        /* Each output .X file must have a header line.  Write one now if we
  	 have not yet done so.  */
  
!       if (! compiled_from_record++)
  	{
  	  /* The first line tells which directory file names are relative to.
  	     Currently, -aux-info works only for files in the working
--- 554,565 ----
    if (flag_gen_aux_info)
      {
        static int compiled_from_record = 0;
+       expanded_location xloc = expand_location (DECL_SOURCE_LOCATION (fndecl));
  
        /* Each output .X file must have a header line.  Write one now if we
  	 have not yet done so.  */
  
!       if (!compiled_from_record++)
  	{
  	  /* The first line tells which directory file names are relative to.
  	     Currently, -aux-info works only for files in the working
*************** gen_aux_info_record (tree fndecl, int is
*** 569,576 ****
        /* Write the actual line of auxiliary info.  */
  
        fprintf (aux_info_file, "/* %s:%d:%c%c */ %s;",
! 	       DECL_SOURCE_FILE (fndecl),
! 	       DECL_SOURCE_LINE (fndecl),
  	       (is_implicit) ? 'I' : (is_prototyped) ? 'N' : 'O',
  	       (is_definition) ? 'F' : 'C',
  	       gen_decl (fndecl, is_definition, ansi));
--- 570,576 ----
        /* Write the actual line of auxiliary info.  */
  
        fprintf (aux_info_file, "/* %s:%d:%c%c */ %s;",
! 	       xloc.file, xloc.line,
  	       (is_implicit) ? 'I' : (is_prototyped) ? 'N' : 'O',
  	       (is_definition) ? 'F' : 'C',
  	       gen_decl (fndecl, is_definition, ansi));
diff -Nrcpad gcc-3.4.3/gcc/c-common.c gcc-4.0.0/gcc/c-common.c
*** gcc-3.4.3/gcc/c-common.c	Wed Oct 13 23:29:04 2004
--- gcc-4.0.0/gcc/c-common.c	Wed Mar 30 01:38:04 2005
***************
*** 1,6 ****
  /* Subroutines shared by all languages that are variants of C.
     Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
!    2001, 2002, 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
--- 1,6 ----
  /* Subroutines shared by all languages that are variants of C.
     Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
!    2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
*************** Software Foundation, 59 Temple Place - S
*** 42,47 ****
--- 42,52 ----
  #include "tree-inline.h"
  #include "c-tree.h"
  #include "toplev.h"
+ #include "tree-iterator.h"
+ #include "hashtab.h"
+ #include "tree-mudflap.h"
+ #include "opts.h"
+ #include "real.h"
  
  cpp_reader *parse_in;		/* Declared in c-pragma.h.  */
  
*************** cpp_reader *parse_in;		/* Declared in c-
*** 55,60 ****
--- 60,69 ----
  #define SIZE_TYPE "long unsigned int"
  #endif
  
+ #ifndef PID_TYPE
+ #define PID_TYPE "int"
+ #endif
+ 
  #ifndef WCHAR_TYPE
  #define WCHAR_TYPE "int"
  #endif
*************** char flag_dump_macros;
*** 211,216 ****
--- 220,229 ----
  
  char flag_dump_includes;
  
+ /* Nonzero means process PCH files while preprocessing.  */
+ 
+ bool flag_pch_preprocess;
+ 
  /* The file name to which we should write a precompiled header, or
     NULL if no header will be written in this compile.  */
  
*************** int flag_const_strings;
*** 256,322 ****
  /* Nonzero means to treat bitfields as signed unless they say `unsigned'.  */
  
  int flag_signed_bitfields = 1;
- int explicit_flag_signed_bitfields;
- 
- /* Nonzero means warn about pointer casts that can drop a type qualifier
-    from the pointer target type.  */
- 
- int warn_cast_qual;
- 
- /* Warn about functions which might be candidates for format attributes.  */
- 
- int warn_missing_format_attribute;
- 
- /* Nonzero means warn about sizeof(function) or addition/subtraction
-    of function pointers.  */
- 
- int warn_pointer_arith;
- 
- /* Nonzero means warn for any global function def
-    without separate previous prototype decl.  */
- 
- int warn_missing_prototypes;
- 
- /* Warn if adding () is suggested.  */
- 
- int warn_parentheses;
- 
- /* Warn if initializer is not completely bracketed.  */
- 
- int warn_missing_braces;
- 
- /* Warn about comparison of signed and unsigned values.
-    If -1, neither -Wsign-compare nor -Wno-sign-compare has been specified
-    (in which case -Wextra gets to decide).  */
- 
- int warn_sign_compare = -1;
- 
- /* Nonzero means warn about usage of long long when `-pedantic'.  */
- 
- int warn_long_long = 1;
  
  /* Nonzero means warn about deprecated conversion from string constant to
     `char *'.  */
  
  int warn_write_strings;
  
- /* Nonzero means warn about multiple (redundant) decls for the same single
-    variable or function.  */
- 
- int warn_redundant_decls;
- 
- /* Warn about testing equality of floating point numbers.  */
- 
- int warn_float_equal;
- 
- /* Warn about a subscript that has type char.  */
- 
- int warn_char_subscripts;
- 
- /* Warn if a type conversion is done that might have confusing results.  */
- 
- int warn_conversion;
- 
  /* Warn about #pragma directives that are not recognized.  */
  
  int warn_unknown_pragmas; /* Tri state variable.  */
--- 269,280 ----
*************** int warn_unknown_pragmas; /* Tri state v
*** 326,351 ****
  
  int warn_format;
  
- /* Warn about Y2K problems with strftime formats.  */
- 
- int warn_format_y2k;
- 
- /* Warn about excess arguments to formats.  */
- 
- int warn_format_extra_args;
- 
- /* Warn about zero-length formats.  */
- 
- int warn_format_zero_length;
- 
- /* Warn about non-literal format arguments.  */
- 
- int warn_format_nonliteral;
- 
- /* Warn about possible security problems with calls to format functions.  */
- 
- int warn_format_security;
- 
  /* Zero means that faster, ...NonNil variants of objc_msgSend...
     calls will be used in ObjC; passing nil receivers to such calls
     will most likely result in crashes.  */
--- 284,289 ----
*************** int flag_nil_receivers = 1;
*** 355,360 ****
--- 293,301 ----
     @try, etc.) in source code.  */
  int flag_objc_exceptions = 0;
  
+ /* Nonzero means that we generate NeXT setjmp based exceptions.  */
+ int flag_objc_sjlj_exceptions = -1;
+ 
  /* Nonzero means that code generation will be altered to support
     "zero-link" execution.  This currently affects ObjC only, but may
     affect other languages in the future.  */
*************** int flag_zero_link = 0;
*** 364,377 ****
     unit.  It will inform the ObjC runtime that class definition(s) herein
     contained are to replace one(s) previously loaded.  */
  int flag_replace_objc_classes = 0;
-    
- /* C/ObjC language option variables.  */
  
  
- /* Nonzero means message about use of implicit function declarations;
-  1 means warning; 2 means error.  */
- 
- int mesg_implicit_function_declaration = -1;
  
  /* Nonzero means allow type mismatches in conditional expressions;
     just make their values `void'.  */
--- 305,313 ----
     unit.  It will inform the ObjC runtime that class definition(s) herein
     contained are to replace one(s) previously loaded.  */
  int flag_replace_objc_classes = 0;
  
+ /* C/ObjC language option variables.  */
  
  
  /* Nonzero means allow type mismatches in conditional expressions;
     just make their values `void'.  */
*************** int flag_isoc99;
*** 390,456 ****
  
  int flag_hosted = 1;
  
- /* Nonzero means warn when casting a function call to a type that does
-    not match the return type (e.g. (float)sqrt() or (anything*)malloc()
-    when there is no previous declaration of sqrt or malloc.  */
- 
- int warn_bad_function_cast;
- 
- /* Warn about traditional constructs whose meanings changed in ANSI C.  */
- 
- int warn_traditional;
- 
- /* Nonzero means warn for a declaration found after a statement.  */
- 
- int warn_declaration_after_statement;
- 
- /* Nonzero means warn for non-prototype function decls
-    or non-prototyped defs without previous prototype.  */
- 
- int warn_strict_prototypes;
- 
- /* Nonzero means warn for any global function def
-    without separate previous decl.  */
- 
- int warn_missing_declarations;
- 
- /* Nonzero means warn about declarations of objects not at
-    file-scope level and about *all* declarations of functions (whether
-    or static) not at file-scope level.  Note that we exclude
-    implicit function declarations.  To get warnings about those, use
-    -Wimplicit.  */
- 
- int warn_nested_externs;
- 
  /* Warn if main is suspicious.  */
  
  int warn_main;
  
- /* Nonzero means warn about possible violations of sequence point rules.  */
- 
- int warn_sequence_point;
- 
- /* Nonzero means warn about uninitialized variable when it is initialized with itself.
-    For example: int i = i;, GCC will not warn about this when warn_init_self is nonzero.  */
- 
- int warn_init_self;
- 
- /* Nonzero means to warn about compile-time division by zero.  */
- int warn_div_by_zero = 1;
- 
- /* Nonzero means warn about use of implicit int.  */
- 
- int warn_implicit_int;
- 
- /* Warn about NULL being passed to argument slots marked as requiring
-    non-NULL.  */
- 
- int warn_nonnull;
- 
- /* Warn about old-style parameter declaration.  */
- 
- int warn_old_style_definition;
- 
  
  /* ObjC language option variables.  */
  
--- 326,335 ----
*************** int print_struct_values;
*** 478,502 ****
  
  const char *constant_string_class_name;
  
- /* Warn if multiple methods are seen for the same selector, but with
-    different argument types.  Performs the check on the whole selector
-    table at the end of compilation.  */
- 
- int warn_selector;
- 
- /* Warn if a @selector() is found, and no method with that selector
-    has been previously declared.  The check is done on each
-    @selector() as soon as it is found - so it warns about forward
-    declarations.  */
- 
- int warn_undeclared_selector;
- 
- /* Warn if methods required by a protocol are not implemented in the
-    class adopting it.  When turned off, methods inherited to that
-    class are also considered implemented.  */
- 
- int warn_protocol = 1;
- 
  
  /* C++ language option variables.  */
  
--- 357,362 ----
*************** int flag_permissive;
*** 599,668 ****
  
  int flag_enforce_eh_specs = 1;
  
! /* Nonzero means warn about things that will change when compiling
!    with an ABI-compliant compiler.  */
! 
! int warn_abi = 0;
! 
! /* Nonzero means warn about invalid uses of offsetof.  */
  
! int warn_invalid_offsetof = 1;
  
  /* Nonzero means warn about implicit declarations.  */
  
  int warn_implicit = 1;
  
- /* Nonzero means warn when all ctors or dtors are private, and the class
-    has no friends.  */
- 
- int warn_ctor_dtor_privacy = 0;
- 
- /* Nonzero means warn in function declared in derived class has the
-    same name as a virtual in the base class, but fails to match the
-    type signature of any virtual function in the base class.  */
- 
- int warn_overloaded_virtual;
- 
- /* Nonzero means warn when declaring a class that has a non virtual
-    destructor, when it really ought to have a virtual one.  */
- 
- int warn_nonvdtor;
- 
- /* Nonzero means warn when the compiler will reorder code.  */
- 
- int warn_reorder;
- 
- /* Nonzero means warn when synthesis behavior differs from Cfront's.  */
- 
- int warn_synth;
- 
- /* Nonzero means warn when we convert a pointer to member function
-    into a pointer to (void or function).  */
- 
- int warn_pmf2ptr = 1;
- 
- /* Nonzero means warn about violation of some Effective C++ style rules.  */
- 
- int warn_ecpp;
- 
- /* Nonzero means warn where overload resolution chooses a promotion from
-    unsigned to signed over a conversion to an unsigned of the same size.  */
- 
- int warn_sign_promo;
- 
- /* Nonzero means warn when an old-style cast is used.  */
- 
- int warn_old_style_cast;
- 
- /* Nonzero means warn when non-templatized friend functions are
-    declared within a template */
- 
- int warn_nontemplate_friend = 1;
- 
- /* Nonzero means complain about deprecated features.  */
- 
- int warn_deprecated = 1;
- 
  /* Maximum template instantiation depth.  This limit is rather
     arbitrary, but it exists to limit the time it takes to notice
     infinite template instantiations.  */
--- 459,473 ----
  
  int flag_enforce_eh_specs = 1;
  
! /* Nonzero means to generate thread-safe code for initializing local
!    statics.  */
  
! int flag_threadsafe_statics = 1;
  
  /* Nonzero means warn about implicit declarations.  */
  
  int warn_implicit = 1;
  
  /* Maximum template instantiation depth.  This limit is rather
     arbitrary, but it exists to limit the time it takes to notice
     infinite template instantiations.  */
*************** tree *ridpointers;
*** 677,686 ****
  
  tree (*make_fname_decl) (tree, int);
  
- /* If non-NULL, the address of a language-specific function that takes
-    any action required right before expand_function_end is called.  */
- void (*lang_expand_function_end) (void);
- 
  /* Nonzero means the expression being parsed will never be evaluated.
     This is a count, since unevaluated expressions can nest.  */
  int skip_evaluation;
--- 482,487 ----
*************** const struct fname_var_t fname_vars[] =
*** 707,733 ****
  };
  
  static int constant_fits_type_p (tree, tree);
! 
! /* Keep a stack of if statements.  We record the number of compound
!    statements seen up to the if keyword, as well as the line number
!    and file of the if.  If a potentially ambiguous else is seen, that
!    fact is recorded; the warning is issued when we can be sure that
!    the enclosing if statement does not have an else branch.  */
! typedef struct
! {
!   int compstmt_count;
!   location_t locus;
!   int needs_warning;
!   tree if_stmt;
! } if_elt;
! 
! static if_elt *if_stack;
! 
! /* Amount of space in the if statement stack.  */
! static int if_stack_space = 0;
! 
! /* Stack pointer.  */
! static int if_stack_pointer = 0;
  
  static tree handle_packed_attribute (tree *, tree, tree, int, bool *);
  static tree handle_nocommon_attribute (tree *, tree, tree, int, bool *);
--- 508,515 ----
  };
  
  static int constant_fits_type_p (tree, tree);
! static tree check_case_value (tree);
! static bool check_case_bounds (tree, tree, tree *, tree *);
  
  static tree handle_packed_attribute (tree *, tree, tree, int, bool *);
  static tree handle_nocommon_attribute (tree *, tree, tree, int, bool *);
*************** static tree handle_nothrow_attribute (tr
*** 767,772 ****
--- 549,555 ----
  static tree handle_cleanup_attribute (tree *, tree, tree, int, bool *);
  static tree handle_warn_unused_result_attribute (tree *, tree, tree, int,
  						 bool *);
+ static tree handle_sentinel_attribute (tree *, tree, tree, int, bool *);
  
  static void check_function_nonnull (tree, tree);
  static void check_nonnull_arg (void *, tree, unsigned HOST_WIDE_INT);
*************** const struct attribute_spec c_common_att
*** 832,838 ****
  			      handle_deprecated_attribute },
    { "vector_size",	      1, 1, false, true, false,
  			      handle_vector_size_attribute },
!   { "visibility",	      1, 1, true,  false, false,
  			      handle_visibility_attribute },
    { "tls_model",	      1, 1, true,  false, false,
  			      handle_tls_model_attribute },
--- 615,621 ----
  			      handle_deprecated_attribute },
    { "vector_size",	      1, 1, false, true, false,
  			      handle_vector_size_attribute },
!   { "visibility",	      1, 1, false, false, false,
  			      handle_visibility_attribute },
    { "tls_model",	      1, 1, true,  false, false,
  			      handle_tls_model_attribute },
*************** const struct attribute_spec c_common_att
*** 845,850 ****
--- 628,635 ----
  			      handle_cleanup_attribute },
    { "warn_unused_result",     0, 0, false, true, true,
  			      handle_warn_unused_result_attribute },
+   { "sentinel",               0, 1, false, true, true,
+ 			      handle_sentinel_attribute },
    { NULL,                     0, 0, false, false, false, NULL }
  };
  
*************** const struct attribute_spec c_common_for
*** 861,991 ****
    { NULL,                     0, 0, false, false, false, NULL }
  };
  
- /* Record the start of an if-then, and record the start of it
-    for ambiguous else detection.
- 
-    COND is the condition for the if-then statement.
- 
-    IF_STMT is the statement node that has already been created for
-    this if-then statement.  It is created before parsing the
-    condition to keep line number information accurate.  */
- 
- void
- c_expand_start_cond (tree cond, int compstmt_count, tree if_stmt)
- {
-   /* Make sure there is enough space on the stack.  */
-   if (if_stack_space == 0)
-     {
-       if_stack_space = 10;
-       if_stack = xmalloc (10 * sizeof (if_elt));
-     }
-   else if (if_stack_space == if_stack_pointer)
-     {
-       if_stack_space += 10;
-       if_stack = xrealloc (if_stack, if_stack_space * sizeof (if_elt));
-     }
- 
-   IF_COND (if_stmt) = cond;
-   add_stmt (if_stmt);
- 
-   /* Record this if statement.  */
-   if_stack[if_stack_pointer].compstmt_count = compstmt_count;
-   if_stack[if_stack_pointer].locus = input_location;
-   if_stack[if_stack_pointer].needs_warning = 0;
-   if_stack[if_stack_pointer].if_stmt = if_stmt;
-   if_stack_pointer++;
- }
- 
- /* Called after the then-clause for an if-statement is processed.  */
- 
- void
- c_finish_then (void)
- {
-   tree if_stmt = if_stack[if_stack_pointer - 1].if_stmt;
-   RECHAIN_STMTS (if_stmt, THEN_CLAUSE (if_stmt));
- }
- 
- /* Record the end of an if-then.  Optionally warn if a nested
-    if statement had an ambiguous else clause.  */
- 
- void
- c_expand_end_cond (void)
- {
-   if_stack_pointer--;
-   if (if_stack[if_stack_pointer].needs_warning)
-     warning ("%Hsuggest explicit braces to avoid ambiguous `else'",
-              &if_stack[if_stack_pointer].locus);
-   last_expr_type = NULL_TREE;
- }
- 
- /* Called between the then-clause and the else-clause
-    of an if-then-else.  */
- 
- void
- c_expand_start_else (void)
- {
-   /* An ambiguous else warning must be generated for the enclosing if
-      statement, unless we see an else branch for that one, too.  */
-   if (warn_parentheses
-       && if_stack_pointer > 1
-       && (if_stack[if_stack_pointer - 1].compstmt_count
- 	  == if_stack[if_stack_pointer - 2].compstmt_count))
-     if_stack[if_stack_pointer - 2].needs_warning = 1;
- 
-   /* Even if a nested if statement had an else branch, it can't be
-      ambiguous if this one also has an else.  So don't warn in that
-      case.  Also don't warn for any if statements nested in this else.  */
-   if_stack[if_stack_pointer - 1].needs_warning = 0;
-   if_stack[if_stack_pointer - 1].compstmt_count--;
- }
- 
- /* Called after the else-clause for an if-statement is processed.  */
- 
- void
- c_finish_else (void)
- {
-   tree if_stmt = if_stack[if_stack_pointer - 1].if_stmt;
-   RECHAIN_STMTS (if_stmt, ELSE_CLAUSE (if_stmt));
- }
- 
- /* Begin an if-statement.  Returns a newly created IF_STMT if
-    appropriate.
- 
-    Unlike the C++ front-end, we do not call add_stmt here; it is
-    probably safe to do so, but I am not very familiar with this
-    code so I am being extra careful not to change its behavior
-    beyond what is strictly necessary for correctness.  */
- 
- tree
- c_begin_if_stmt (void)
- {
-   tree r;
-   r = build_stmt (IF_STMT, NULL_TREE, NULL_TREE, NULL_TREE);
-   return r;
- }
- 
- /* Begin a while statement.  Returns a newly created WHILE_STMT if
-    appropriate.
- 
-    Unlike the C++ front-end, we do not call add_stmt here; it is
-    probably safe to do so, but I am not very familiar with this
-    code so I am being extra careful not to change its behavior
-    beyond what is strictly necessary for correctness.  */
- 
- tree
- c_begin_while_stmt (void)
- {
-   tree r;
-   r = build_stmt (WHILE_STMT, NULL_TREE, NULL_TREE);
-   return r;
- }
- 
- void
- c_finish_while_stmt_cond (tree cond, tree while_stmt)
- {
-   WHILE_COND (while_stmt) = cond;
- }
- 
  /* Push current bindings for the function name VAR_DECLS.  */
  
  void
--- 646,651 ----
*************** start_fname_decls (void)
*** 1000,1006 ****
  
        if (decl)
  	{
! 	  saved = tree_cons (decl, build_int_2 (ix, 0), saved);
  	  *fname_vars[ix].decl = NULL_TREE;
  	}
      }
--- 660,666 ----
  
        if (decl)
  	{
! 	  saved = tree_cons (decl, build_int_cst (NULL_TREE, ix), saved);
  	  *fname_vars[ix].decl = NULL_TREE;
  	}
      }
*************** start_fname_decls (void)
*** 1011,1053 ****
  					   saved_function_name_decls);
  }
  
! /* Finish up the current bindings, adding them into the
!    current function's statement tree. This is done by wrapping the
!    function's body in a COMPOUND_STMT containing these decls too. This
!    must be done _before_ finish_stmt_tree is called. If there is no
!    current function, we must be at file scope and no statements are
!    involved. Pop the previous bindings.  */
  
  void
  finish_fname_decls (void)
  {
    unsigned ix;
!   tree body = NULL_TREE;
    tree stack = saved_function_name_decls;
  
    for (; stack && TREE_VALUE (stack); stack = TREE_CHAIN (stack))
!     body = chainon (TREE_VALUE (stack), body);
  
!   if (body)
      {
!       /* They were called into existence, so add to statement tree.  Add
! 	 the DECL_STMTs inside the outermost scope.  */
!       tree *p = &DECL_SAVED_TREE (current_function_decl);
!       /* Skip the dummy EXPR_STMT and any EH_SPEC_BLOCK.  */
!       while (TREE_CODE (*p) != COMPOUND_STMT)
!        {
!          if (TREE_CODE (*p) == EXPR_STMT)
!            p = &TREE_CHAIN (*p);
!          else
!            p = &TREE_OPERAND(*p, 0);
!        }
  
!       p = &COMPOUND_BODY (*p);
!       if (TREE_CODE (*p) == SCOPE_STMT)
! 	p = &TREE_CHAIN (*p);
  
!       body = chainon (body, *p);
!       *p = body;
      }
  
    for (ix = 0; fname_vars[ix].decl; ix++)
--- 671,700 ----
  					   saved_function_name_decls);
  }
  
! /* Finish up the current bindings, adding them into the current function's
!    statement tree.  This must be done _before_ finish_stmt_tree is called.
!    If there is no current function, we must be at file scope and no statements
!    are involved. Pop the previous bindings.  */
  
  void
  finish_fname_decls (void)
  {
    unsigned ix;
!   tree stmts = NULL_TREE;
    tree stack = saved_function_name_decls;
  
    for (; stack && TREE_VALUE (stack); stack = TREE_CHAIN (stack))
!     append_to_statement_list (TREE_VALUE (stack), &stmts);
  
!   if (stmts)
      {
!       tree *bodyp = &DECL_SAVED_TREE (current_function_decl);
  
!       if (TREE_CODE (*bodyp) == BIND_EXPR)
! 	bodyp = &BIND_EXPR_BODY (*bodyp);
  
!       append_to_statement_list (*bodyp, &stmts);
!       *bodyp = stmts;
      }
  
    for (ix = 0; fname_vars[ix].decl; ix++)
*************** finish_fname_decls (void)
*** 1071,1096 ****
  }
  
  /* Return the text name of the current function, suitably prettified
!    by PRETTY_P.  */
  
  const char *
  fname_as_string (int pretty_p)
  {
    const char *name = "top level";
    int vrb = 2;
  
!   if (! pretty_p)
      {
        name = "";
        vrb = 0;
      }
  
    if (current_function_decl)
!     name = (*lang_hooks.decl_printable_name) (current_function_decl, vrb);
  
!   return name;
  }
  
  /* Return the VAR_DECL for a const char array naming the current
     function. If the VAR_DECL has not yet been created, create it
     now. RID indicates how it should be formatted and IDENTIFIER_NODE
--- 718,785 ----
  }
  
  /* Return the text name of the current function, suitably prettified
!    by PRETTY_P.  Return string must be freed by caller.  */
  
  const char *
  fname_as_string (int pretty_p)
  {
    const char *name = "top level";
+   char *namep;
    int vrb = 2;
  
!   if (!pretty_p)
      {
        name = "";
        vrb = 0;
      }
  
    if (current_function_decl)
!     name = lang_hooks.decl_printable_name (current_function_decl, vrb);
  
!   if (c_lex_string_translate)
!     {
!       int len = strlen (name) + 3; /* Two for '"'s.  One for NULL.  */
!       cpp_string cstr = { 0, 0 }, strname;
! 
!       namep = XNEWVEC (char, len);
!       snprintf (namep, len, "\"%s\"", name);
!       strname.text = (unsigned char *) namep;
!       strname.len = len - 1;
! 
!       if (cpp_interpret_string (parse_in, &strname, 1, &cstr, false))
! 	{
! 	  XDELETEVEC (namep);
! 	  return (char *) cstr.text;
! 	}
!     }
!   else
!     namep = xstrdup (name);
! 
!   return namep;
! }
! 
! /* Expand DECL if it declares an entity not handled by the
!    common code.  */
! 
! int
! c_expand_decl (tree decl)
! {
!   if (TREE_CODE (decl) == VAR_DECL && !TREE_STATIC (decl))
!     {
!       /* Let the back-end know about this variable.  */
!       if (!anon_aggr_type_p (TREE_TYPE (decl)))
!         emit_local_var (decl);
!       else
!         expand_anon_union_decl (decl, NULL_TREE,
!                                 DECL_ANON_UNION_ELEMS (decl));
!     }
!   else
!     return 0;
! 
!   return 1;
  }
  
+ 
  /* Return the VAR_DECL for a const char array naming the current
     function. If the VAR_DECL has not yet been created, create it
     now. RID indicates how it should be formatted and IDENTIFIER_NODE
*************** fname_decl (unsigned int rid, tree id)
*** 1111,1143 ****
    decl = *fname_vars[ix].decl;
    if (!decl)
      {
-       tree saved_last_tree = last_tree;
        /* If a tree is built here, it would normally have the lineno of
  	 the current statement.  Later this tree will be moved to the
  	 beginning of the function and this line number will be wrong.
  	 To avoid this problem set the lineno to 0 here; that prevents
  	 it from appearing in the RTL.  */
!       int saved_lineno = input_line;
        input_line = 0;
  
        decl = (*make_fname_decl) (id, fname_vars[ix].pretty);
!       if (last_tree != saved_last_tree)
! 	{
! 	  /* We created some statement tree for the decl. This belongs
! 	     at the start of the function, so remove it now and reinsert
! 	     it after the function is complete.  */
! 	  tree stmts = TREE_CHAIN (saved_last_tree);
! 
! 	  TREE_CHAIN (saved_last_tree) = NULL_TREE;
! 	  last_tree = saved_last_tree;
! 	  saved_function_name_decls = tree_cons (decl, stmts,
! 						 saved_function_name_decls);
! 	}
        *fname_vars[ix].decl = decl;
!       input_line = saved_lineno;
      }
    if (!ix && !current_function_decl)
!     pedwarn ("%J'%D' is not defined outside of function scope", decl, decl);
  
    return decl;
  }
--- 800,829 ----
    decl = *fname_vars[ix].decl;
    if (!decl)
      {
        /* If a tree is built here, it would normally have the lineno of
  	 the current statement.  Later this tree will be moved to the
  	 beginning of the function and this line number will be wrong.
  	 To avoid this problem set the lineno to 0 here; that prevents
  	 it from appearing in the RTL.  */
!       tree stmts;
!       location_t saved_location = input_location;
! #ifdef USE_MAPPED_LOCATION
!       input_location = UNKNOWN_LOCATION;
! #else
        input_line = 0;
+ #endif
  
+       stmts = push_stmt_list ();
        decl = (*make_fname_decl) (id, fname_vars[ix].pretty);
!       stmts = pop_stmt_list (stmts);
!       if (!IS_EMPTY_STMT (stmts))
! 	saved_function_name_decls
! 	  = tree_cons (decl, stmts, saved_function_name_decls);
        *fname_vars[ix].decl = decl;
!       input_location = saved_location;
      }
    if (!ix && !current_function_decl)
!     pedwarn ("%qD is not defined outside of function scope", decl);
  
    return decl;
  }
*************** fix_string_type (tree value)
*** 1152,1185 ****
    const int nchars_max = flag_isoc99 ? 4095 : 509;
    int length = TREE_STRING_LENGTH (value);
    int nchars;
  
    /* Compute the number of elements, for the array type.  */
    nchars = wide_flag ? length / wchar_bytes : length;
  
    if (pedantic && nchars - 1 > nchars_max && !c_dialect_cxx ())
!     pedwarn ("string length `%d' is greater than the length `%d' ISO C%d compilers are required to support",
  	     nchars - 1, nchars_max, flag_isoc99 ? 99 : 89);
  
!   /* Create the array type for the string constant.
!      -Wwrite-strings says make the string constant an array of const char
!      so that copying it to a non-const pointer will get a warning.
!      For C++, this is the standard behavior.  */
!   if (flag_const_strings && ! flag_writable_strings)
!     {
!       tree elements
! 	= build_type_variant (wide_flag ? wchar_type_node : char_type_node,
! 			      1, 0);
!       TREE_TYPE (value)
! 	= build_array_type (elements,
! 			    build_index_type (build_int_2 (nchars - 1, 0)));
!     }
!   else
!     TREE_TYPE (value)
!       = build_array_type (wide_flag ? wchar_type_node : char_type_node,
! 			  build_index_type (build_int_2 (nchars - 1, 0)));
  
    TREE_CONSTANT (value) = 1;
!   TREE_READONLY (value) = ! flag_writable_strings;
    TREE_STATIC (value) = 1;
    return value;
  }
--- 838,873 ----
    const int nchars_max = flag_isoc99 ? 4095 : 509;
    int length = TREE_STRING_LENGTH (value);
    int nchars;
+   tree e_type, i_type, a_type;
  
    /* Compute the number of elements, for the array type.  */
    nchars = wide_flag ? length / wchar_bytes : length;
  
    if (pedantic && nchars - 1 > nchars_max && !c_dialect_cxx ())
!     pedwarn ("string length %qd is greater than the length %qd ISO C%d compilers are required to support",
  	     nchars - 1, nchars_max, flag_isoc99 ? 99 : 89);
  
!   e_type = wide_flag ? wchar_type_node : char_type_node;
!   /* Create the array type for the string constant.  flag_const_strings
!      says make the string constant an array of const char so that
!      copying it to a non-const pointer will get a warning.  For C++,
!      this is the standard behavior.
  
+      The C++ front end relies on TYPE_MAIN_VARIANT of a cv-qualified
+      array type being the unqualified version of that type.
+      Therefore, if we are constructing an array of const char, we must
+      construct the matching unqualified array type first.  The C front
+      end does not require this, but it does no harm, so we do it
+      unconditionally.  */
+   i_type = build_index_type (build_int_cst (NULL_TREE, nchars - 1));
+   a_type = build_array_type (e_type, i_type);
+   if (flag_const_strings)
+     a_type = c_build_qualified_type (a_type, TYPE_QUAL_CONST);
+ 
+   TREE_TYPE (value) = a_type;
    TREE_CONSTANT (value) = 1;
!   TREE_INVARIANT (value) = 1;
!   TREE_READONLY (value) = 1;
    TREE_STATIC (value) = 1;
    return value;
  }
*************** unsigned_conversion_warning (tree result
*** 1248,1254 ****
  
    if (TREE_CODE (operand) == INTEGER_CST
        && TREE_CODE (type) == INTEGER_TYPE
!       && TREE_UNSIGNED (type)
        && skip_evaluation == 0
        && !int_fits_type_p (operand, type))
      {
--- 936,942 ----
  
    if (TREE_CODE (operand) == INTEGER_CST
        && TREE_CODE (type) == INTEGER_TYPE
!       && TYPE_UNSIGNED (type)
        && skip_evaluation == 0
        && !int_fits_type_p (operand, type))
      {
*************** constant_fits_type_p (tree c, tree type)
*** 1273,1278 ****
--- 961,978 ----
    return !TREE_OVERFLOW (c);
  }
  
+ /* Nonzero if vector types T1 and T2 can be converted to each other
+    without an explicit cast.  */
+ int
+ vector_types_convertible_p (tree t1, tree t2)
+ {
+   return targetm.vector_opaque_p (t1)
+ 	 || targetm.vector_opaque_p (t2)
+          || (tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2))
+ 	     && INTEGRAL_TYPE_P (TREE_TYPE (t1))
+ 		== INTEGRAL_TYPE_P (TREE_TYPE (t2)));
+ }
+ 
  /* Convert EXPR to TYPE, warning about conversion problems with constants.
     Invoke this function on every expression that is converted implicitly,
     i.e. because of language rules and not because of an explicit cast.  */
*************** convert_and_check (tree type, tree expr)
*** 1292,1307 ****
  	  TREE_CONSTANT_OVERFLOW (t) = TREE_CONSTANT_OVERFLOW (expr);
  
  	  /* No warning for converting 0x80000000 to int.  */
! 	  if (!(TREE_UNSIGNED (type) < TREE_UNSIGNED (TREE_TYPE (expr))
  		&& TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
  		&& TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (expr))))
  	    /* If EXPR fits in the unsigned version of TYPE,
  	       don't warn unless pedantic.  */
  	    if ((pedantic
! 		 || TREE_UNSIGNED (type)
! 		 || ! constant_fits_type_p (expr,
! 					    c_common_unsigned_type (type)))
! 	        && skip_evaluation == 0)
  	      warning ("overflow in implicit constant conversion");
  	}
        else
--- 992,1007 ----
  	  TREE_CONSTANT_OVERFLOW (t) = TREE_CONSTANT_OVERFLOW (expr);
  
  	  /* No warning for converting 0x80000000 to int.  */
! 	  if (!(TYPE_UNSIGNED (type) < TYPE_UNSIGNED (TREE_TYPE (expr))
  		&& TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
  		&& TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (expr))))
  	    /* If EXPR fits in the unsigned version of TYPE,
  	       don't warn unless pedantic.  */
  	    if ((pedantic
! 		 || TYPE_UNSIGNED (type)
! 		 || !constant_fits_type_p (expr,
! 					   c_common_unsigned_type (type)))
! 		&& skip_evaluation == 0)
  	      warning ("overflow in implicit constant conversion");
  	}
        else
*************** static int warning_candidate_p (tree);
*** 1348,1361 ****
  static void warn_for_collisions (struct tlist *);
  static void warn_for_collisions_1 (tree, tree, struct tlist *, int);
  static struct tlist *new_tlist (struct tlist *, tree, tree);
- static void verify_sequence_points (tree);
  
  /* Create a new struct tlist and fill in its fields.  */
  static struct tlist *
  new_tlist (struct tlist *next, tree t, tree writer)
  {
    struct tlist *l;
!   l = obstack_alloc (&tlist_obstack, sizeof *l);
    l->next = next;
    l->expr = t;
    l->writer = writer;
--- 1048,1060 ----
  static void warn_for_collisions (struct tlist *);
  static void warn_for_collisions_1 (tree, tree, struct tlist *, int);
  static struct tlist *new_tlist (struct tlist *, tree, tree);
  
  /* Create a new struct tlist and fill in its fields.  */
  static struct tlist *
  new_tlist (struct tlist *next, tree t, tree writer)
  {
    struct tlist *l;
!   l = XOBNEW (&tlist_obstack, struct tlist);
    l->next = next;
    l->expr = t;
    l->writer = writer;
*************** add_tlist (struct tlist **to, struct tli
*** 1371,1379 ****
    while (add)
      {
        struct tlist *next = add->next;
!       if (! copy)
  	add->next = *to;
!       if (! exclude_writer || add->writer != exclude_writer)
  	*to = copy ? new_tlist (*to, add->expr, add->writer) : add;
        add = next;
      }
--- 1070,1078 ----
    while (add)
      {
        struct tlist *next = add->next;
!       if (!copy)
  	add->next = *to;
!       if (!exclude_writer || add->writer != exclude_writer)
  	*to = copy ? new_tlist (*to, add->expr, add->writer) : add;
        add = next;
      }
*************** merge_tlist (struct tlist **to, struct t
*** 1403,1412 ****
  	if (tmp2->expr == add->expr)
  	  {
  	    found = 1;
! 	    if (! tmp2->writer)
  	      tmp2->writer = add->writer;
  	  }
!       if (! found)
  	{
  	  *end = copy ? add : new_tlist (NULL, add->expr, add->writer);
  	  end = &(*end)->next;
--- 1102,1111 ----
  	if (tmp2->expr == add->expr)
  	  {
  	    found = 1;
! 	    if (!tmp2->writer)
  	      tmp2->writer = add->writer;
  	  }
!       if (!found)
  	{
  	  *end = copy ? add : new_tlist (NULL, add->expr, add->writer);
  	  end = &(*end)->next;
*************** warn_for_collisions_1 (tree written, tre
*** 1435,1444 ****
      {
        if (list->expr == written
  	  && list->writer != writer
! 	  && (! only_writes || list->writer))
  	{
  	  warned_ids = new_tlist (warned_ids, written, NULL_TREE);
! 	  warning ("operation on `%s' may be undefined",
  		   IDENTIFIER_POINTER (DECL_NAME (list->expr)));
  	}
        list = list->next;
--- 1134,1144 ----
      {
        if (list->expr == written
  	  && list->writer != writer
! 	  && (!only_writes || list->writer)
! 	  && DECL_NAME (list->expr))
  	{
  	  warned_ids = new_tlist (warned_ids, written, NULL_TREE);
! 	  warning ("operation on %qs may be undefined",
  		   IDENTIFIER_POINTER (DECL_NAME (list->expr)));
  	}
        list = list->next;
*************** verify_tree (tree x, struct tlist **pbef
*** 1499,1505 ****
  {
    struct tlist *tmp_before, *tmp_nosp, *tmp_list2, *tmp_list3;
    enum tree_code code;
!   char class;
  
    /* X may be NULL if it is the operand of an empty statement expression
       ({ }).  */
--- 1199,1205 ----
  {
    struct tlist *tmp_before, *tmp_nosp, *tmp_list2, *tmp_list3;
    enum tree_code code;
!   enum tree_code_class cl;
  
    /* X may be NULL if it is the operand of an empty statement expression
       ({ }).  */
*************** verify_tree (tree x, struct tlist **pbef
*** 1508,1514 ****
  
   restart:
    code = TREE_CODE (x);
!   class = TREE_CODE_CLASS (code);
  
    if (warning_candidate_p (x))
      {
--- 1208,1214 ----
  
   restart:
    code = TREE_CODE (x);
!   cl = TREE_CODE_CLASS (code);
  
    if (warning_candidate_p (x))
      {
*************** verify_tree (tree x, struct tlist **pbef
*** 1623,1631 ****
  	  if (t->expr == x)
  	    break;
  
! 	if (! t)
  	  {
! 	    t = obstack_alloc (&tlist_obstack, sizeof *t);
  	    t->next = save_expr_cache;
  	    t->expr = x;
  	    save_expr_cache = t;
--- 1323,1331 ----
  	  if (t->expr == x)
  	    break;
  
! 	if (!t)
  	  {
! 	    t = XOBNEW (&tlist_obstack, struct tlist_cache);
  	    t->next = save_expr_cache;
  	    t->expr = x;
  	    save_expr_cache = t;
*************** verify_tree (tree x, struct tlist **pbef
*** 1648,1694 ****
  	add_tlist (pno_sp, t->cache_after_sp, NULL_TREE, 1);
  	return;
        }
-     default:
-       break;
-     }
  
!   if (class == '1')
!     {
!       if (first_rtl_op (code) == 0)
! 	return;
!       x = TREE_OPERAND (x, 0);
!       writer = 0;
!       goto restart;
!     }
! 
!   switch (class)
!     {
!     case 'r':
!     case '<':
!     case '2':
!     case 'b':
!     case 'e':
!     case 's':
!     case 'x':
!       {
! 	int lp;
! 	int max = first_rtl_op (TREE_CODE (x));
! 	for (lp = 0; lp < max; lp++)
! 	  {
! 	    tmp_before = tmp_nosp = 0;
! 	    verify_tree (TREE_OPERAND (x, lp), &tmp_before, &tmp_nosp, NULL_TREE);
! 	    merge_tlist (&tmp_nosp, tmp_before, 0);
! 	    add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
! 	  }
! 	break;
!       }
      }
  }
  
  /* Try to warn for undefined behavior in EXPR due to missing sequence
     points.  */
  
! static void
  verify_sequence_points (tree expr)
  {
    struct tlist *before_sp = 0, *after_sp = 0;
--- 1348,1384 ----
  	add_tlist (pno_sp, t->cache_after_sp, NULL_TREE, 1);
  	return;
        }
  
!     default:
!       /* For other expressions, simply recurse on their operands.
!          Manual tail recursion for unary expressions.
! 	 Other non-expressions need not be processed.  */
!       if (cl == tcc_unary)
! 	{
! 	  x = TREE_OPERAND (x, 0);
! 	  writer = 0;
! 	  goto restart;
! 	}
!       else if (IS_EXPR_CODE_CLASS (cl))
! 	{
! 	  int lp;
! 	  int max = TREE_CODE_LENGTH (TREE_CODE (x));
! 	  for (lp = 0; lp < max; lp++)
! 	    {
! 	      tmp_before = tmp_nosp = 0;
! 	      verify_tree (TREE_OPERAND (x, lp), &tmp_before, &tmp_nosp, 0);
! 	      merge_tlist (&tmp_nosp, tmp_before, 0);
! 	      add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
! 	    }
! 	}
!       return;
      }
  }
  
  /* Try to warn for undefined behavior in EXPR due to missing sequence
     points.  */
  
! void
  verify_sequence_points (tree expr)
  {
    struct tlist *before_sp = 0, *after_sp = 0;
*************** verify_sequence_points (tree expr)
*** 1698,1736 ****
    if (tlist_firstobj == 0)
      {
        gcc_obstack_init (&tlist_obstack);
!       tlist_firstobj = obstack_alloc (&tlist_obstack, 0);
      }
  
    verify_tree (expr, &before_sp, &after_sp, 0);
    warn_for_collisions (after_sp);
    obstack_free (&tlist_obstack, tlist_firstobj);
  }
- 
- tree
- c_expand_expr_stmt (tree expr)
- {
-   /* Do default conversion if safe and possibly important,
-      in case within ({...}).  */
-   if ((TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE
-        && (flag_isoc99 || lvalue_p (expr)))
-       || TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE)
-     expr = default_conversion (expr);
- 
-   if (warn_sequence_point)
-     verify_sequence_points (expr);
- 
-   if (TREE_TYPE (expr) != error_mark_node
-       && !COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (expr))
-       && TREE_CODE (TREE_TYPE (expr)) != ARRAY_TYPE)
-     error ("expression statement has incomplete type");
- 
-   last_expr_type = TREE_TYPE (expr);
-   return add_stmt (build_stmt (EXPR_STMT, expr));
- }
  
  /* Validate the expression after `case' and apply default promotions.  */
  
! tree
  check_case_value (tree value)
  {
    if (value == NULL_TREE)
--- 1388,1404 ----
    if (tlist_firstobj == 0)
      {
        gcc_obstack_init (&tlist_obstack);
!       tlist_firstobj = (char *) obstack_alloc (&tlist_obstack, 0);
      }
  
    verify_tree (expr, &before_sp, &after_sp, 0);
    warn_for_collisions (after_sp);
    obstack_free (&tlist_obstack, tlist_firstobj);
  }
  
  /* Validate the expression after `case' and apply default promotions.  */
  
! static tree
  check_case_value (tree value)
  {
    if (value == NULL_TREE)
*************** check_case_value (tree value)
*** 1766,1771 ****
--- 1434,1508 ----
    return value;
  }
  
+ /* See if the case values LOW and HIGH are in the range of the original
+    type (i.e. before the default conversion to int) of the switch testing
+    expression.
+    TYPE is the promoted type of the testing expression, and ORIG_TYPE is
+    the type before promoting it.  CASE_LOW_P is a pointer to the lower
+    bound of the case label, and CASE_HIGH_P is the upper bound or NULL
+    if the case is not a case range.
+    The caller has to make sure that we are not called with NULL for
+    CASE_LOW_P (i.e. the default case).
+    Returns true if the case label is in range of ORIG_TYPE (satured or
+    untouched) or false if the label is out of range.  */
+ 
+ static bool
+ check_case_bounds (tree type, tree orig_type,
+ 		   tree *case_low_p, tree *case_high_p)
+ {
+   tree min_value, max_value;
+   tree case_low = *case_low_p;
+   tree case_high = case_high_p ? *case_high_p : case_low;
+ 
+   /* If there was a problem with the original type, do nothing.  */
+   if (orig_type == error_mark_node)
+     return true;
+ 
+   min_value = TYPE_MIN_VALUE (orig_type);
+   max_value = TYPE_MAX_VALUE (orig_type);
+ 
+   /* Case label is less than minimum for type.  */
+   if (tree_int_cst_compare (case_low, min_value) < 0
+       && tree_int_cst_compare (case_high, min_value) < 0)
+     {
+       warning ("case label value is less than minimum value for type");
+       return false;
+     }
+ 
+   /* Case value is greater than maximum for type.  */
+   if (tree_int_cst_compare (case_low, max_value) > 0
+       && tree_int_cst_compare (case_high, max_value) > 0)
+     {
+       warning ("case label value exceeds maximum value for type");
+       return false;
+     }
+ 
+   /* Saturate lower case label value to minimum.  */
+   if (tree_int_cst_compare (case_high, min_value) >= 0
+       && tree_int_cst_compare (case_low, min_value) < 0)
+     {
+       warning ("lower value in case label range"
+ 	       " less than minimum value for type");
+       case_low = min_value;
+     }
+ 
+   /* Saturate upper case label value to maximum.  */
+   if (tree_int_cst_compare (case_low, max_value) <= 0
+       && tree_int_cst_compare (case_high, max_value) > 0)
+     {
+       warning ("upper value in case label range"
+ 	       " exceeds maximum value for type");
+       case_high = max_value;
+     }
+ 
+   if (*case_low_p != case_low)
+     *case_low_p = convert (type, case_low);
+   if (case_high_p && *case_high_p != case_high)
+     *case_high_p = convert (type, case_high);
+ 
+   return true;
+ }
+ 
  /* Return an integer type with BITS bits of precision,
     that is unsigned if UNSIGNEDP is nonzero, otherwise signed.  */
  
*************** c_common_type_for_mode (enum machine_mod
*** 1837,1843 ****
  
    if (mode == TYPE_MODE (widest_integer_literal_type_node))
      return unsignedp ? widest_unsigned_literal_type_node
!                      : widest_integer_literal_type_node;
  
    if (mode == QImode)
      return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
--- 1574,1580 ----
  
    if (mode == TYPE_MODE (widest_integer_literal_type_node))
      return unsignedp ? widest_unsigned_literal_type_node
! 		     : widest_integer_literal_type_node;
  
    if (mode == QImode)
      return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
*************** c_common_type_for_mode (enum machine_mod
*** 1867,1911 ****
  
    if (mode == TYPE_MODE (void_type_node))
      return void_type_node;
!   
    if (mode == TYPE_MODE (build_pointer_type (char_type_node)))
!     return unsignedp ? make_unsigned_type (mode) : make_signed_type (mode);
  
    if (mode == TYPE_MODE (build_pointer_type (integer_type_node)))
!     return unsignedp ? make_unsigned_type (mode) : make_signed_type (mode);
  
!   switch (mode)
      {
!     case V16QImode:
!       return unsignedp ? unsigned_V16QI_type_node : V16QI_type_node;
!     case V8HImode:
!       return unsignedp ? unsigned_V8HI_type_node : V8HI_type_node;
!     case V4SImode:
!       return unsignedp ? unsigned_V4SI_type_node : V4SI_type_node;
!     case V2DImode:
!       return unsignedp ? unsigned_V2DI_type_node : V2DI_type_node;
!     case V2SImode:
!       return unsignedp ? unsigned_V2SI_type_node : V2SI_type_node;
!     case V2HImode:
!       return unsignedp ? unsigned_V2HI_type_node : V2HI_type_node;
!     case V4HImode:
!       return unsignedp ? unsigned_V4HI_type_node : V4HI_type_node;
!     case V8QImode:
!       return unsignedp ? unsigned_V8QI_type_node : V8QI_type_node;
!     case V1DImode:
!       return unsignedp ? unsigned_V1DI_type_node : V1DI_type_node;
!     case V16SFmode:
!       return V16SF_type_node;
!     case V4SFmode:
!       return V4SF_type_node;
!     case V2SFmode:
!       return V2SF_type_node;
!     case V2DFmode:
!       return V2DF_type_node;
!     case V4DFmode:
!       return V4DF_type_node;
!     default:
!       break;
      }
  
    for (t = registered_builtin_types; t; t = TREE_CHAIN (t))
--- 1604,1646 ----
  
    if (mode == TYPE_MODE (void_type_node))
      return void_type_node;
! 
    if (mode == TYPE_MODE (build_pointer_type (char_type_node)))
!     return (unsignedp
! 	    ? make_unsigned_type (GET_MODE_PRECISION (mode))
! 	    : make_signed_type (GET_MODE_PRECISION (mode)));
  
    if (mode == TYPE_MODE (build_pointer_type (integer_type_node)))
!     return (unsignedp
! 	    ? make_unsigned_type (GET_MODE_PRECISION (mode))
! 	    : make_signed_type (GET_MODE_PRECISION (mode)));
  
!   if (COMPLEX_MODE_P (mode))
      {
!       enum machine_mode inner_mode;
!       tree inner_type;
! 
!       if (mode == TYPE_MODE (complex_float_type_node))
! 	return complex_float_type_node;
!       if (mode == TYPE_MODE (complex_double_type_node))
! 	return complex_double_type_node;
!       if (mode == TYPE_MODE (complex_long_double_type_node))
! 	return complex_long_double_type_node;
! 
!       if (mode == TYPE_MODE (complex_integer_type_node) && !unsignedp)
! 	return complex_integer_type_node;
! 
!       inner_mode = GET_MODE_INNER (mode);
!       inner_type = c_common_type_for_mode (inner_mode, unsignedp);
!       if (inner_type != NULL_TREE)
! 	return build_complex_type (inner_type);
!     }
!   else if (VECTOR_MODE_P (mode))
!     {
!       enum machine_mode inner_mode = GET_MODE_INNER (mode);
!       tree inner_type = c_common_type_for_mode (inner_mode, unsignedp);
!       if (inner_type != NULL_TREE)
! 	return build_vector_type_for_mode (inner_type, mode);
      }
  
    for (t = registered_builtin_types; t; t = TREE_CHAIN (t))
*************** c_common_signed_type (tree type)
*** 1988,2031 ****
  tree
  c_common_signed_or_unsigned_type (int unsignedp, tree type)
  {
!   if (! INTEGRAL_TYPE_P (type)
!       || TREE_UNSIGNED (type) == unsignedp)
      return type;
  
!   /* Must check the mode of the types, not the precision.  Enumeral types
!      in C++ have precision set to match their range, but may use a wider
!      mode to match an ABI.  If we change modes, we may wind up with bad
!      conversions.  */
  
!   if (TYPE_MODE (type) == TYPE_MODE (signed_char_type_node))
      return unsignedp ? unsigned_char_type_node : signed_char_type_node;
!   if (TYPE_MODE (type) == TYPE_MODE (integer_type_node))
      return unsignedp ? unsigned_type_node : integer_type_node;
!   if (TYPE_MODE (type) == TYPE_MODE (short_integer_type_node))
      return unsignedp ? short_unsigned_type_node : short_integer_type_node;
!   if (TYPE_MODE (type) == TYPE_MODE (long_integer_type_node))
      return unsignedp ? long_unsigned_type_node : long_integer_type_node;
!   if (TYPE_MODE (type) == TYPE_MODE (long_long_integer_type_node))
      return (unsignedp ? long_long_unsigned_type_node
  	    : long_long_integer_type_node);
!   if (TYPE_MODE (type) == TYPE_MODE (widest_integer_literal_type_node))
      return (unsignedp ? widest_unsigned_literal_type_node
  	    : widest_integer_literal_type_node);
  
  #if HOST_BITS_PER_WIDE_INT >= 64
!   if (TYPE_MODE (type) == TYPE_MODE (intTI_type_node))
      return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
  #endif
!   if (TYPE_MODE (type) == TYPE_MODE (intDI_type_node))
      return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
!   if (TYPE_MODE (type) == TYPE_MODE (intSI_type_node))
      return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
!   if (TYPE_MODE (type) == TYPE_MODE (intHI_type_node))
      return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
!   if (TYPE_MODE (type) == TYPE_MODE (intQI_type_node))
      return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
  
!   return type;
  }
  
  /* The C version of the register_builtin_type langhook.  */
--- 1723,1777 ----
  tree
  c_common_signed_or_unsigned_type (int unsignedp, tree type)
  {
!   if (!INTEGRAL_TYPE_P (type)
!       || TYPE_UNSIGNED (type) == unsignedp)
      return type;
  
!   /* For ENUMERAL_TYPEs in C++, must check the mode of the types, not
!      the precision; they have precision set to match their range, but
!      may use a wider mode to match an ABI.  If we change modes, we may
!      wind up with bad conversions.  For INTEGER_TYPEs in C, must check
!      the precision as well, so as to yield correct results for
!      bit-field types.  C++ does not have these separate bit-field
!      types, and producing a signed or unsigned variant of an
!      ENUMERAL_TYPE may cause other problems as well.  */
  
! #define TYPE_OK(node)							    \
!   (TYPE_MODE (type) == TYPE_MODE (node)					    \
!    && (c_dialect_cxx () || TYPE_PRECISION (type) == TYPE_PRECISION (node)))
!   if (TYPE_OK (signed_char_type_node))
      return unsignedp ? unsigned_char_type_node : signed_char_type_node;
!   if (TYPE_OK (integer_type_node))
      return unsignedp ? unsigned_type_node : integer_type_node;
!   if (TYPE_OK (short_integer_type_node))
      return unsignedp ? short_unsigned_type_node : short_integer_type_node;
!   if (TYPE_OK (long_integer_type_node))
      return unsignedp ? long_unsigned_type_node : long_integer_type_node;
!   if (TYPE_OK (long_long_integer_type_node))
      return (unsignedp ? long_long_unsigned_type_node
  	    : long_long_integer_type_node);
!   if (TYPE_OK (widest_integer_literal_type_node))
      return (unsignedp ? widest_unsigned_literal_type_node
  	    : widest_integer_literal_type_node);
  
  #if HOST_BITS_PER_WIDE_INT >= 64
!   if (TYPE_OK (intTI_type_node))
      return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
  #endif
!   if (TYPE_OK (intDI_type_node))
      return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
!   if (TYPE_OK (intSI_type_node))
      return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
!   if (TYPE_OK (intHI_type_node))
      return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
!   if (TYPE_OK (intQI_type_node))
      return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
+ #undef TYPE_OK
  
!   if (c_dialect_cxx ())
!     return type;
!   else
!     return build_nonstandard_integer_type (TYPE_PRECISION (type), unsignedp);
  }
  
  /* The C version of the register_builtin_type langhook.  */
*************** min_precision (tree value, int unsignedp
*** 2069,2075 ****
    else
      log = tree_floor_log2 (value);
  
!   return log + 1 + ! unsignedp;
  }
  
  /* Print an error message for invalid operands to arith operation
--- 1815,1821 ----
    else
      log = tree_floor_log2 (value);
  
!   return log + 1 + !unsignedp;
  }
  
  /* Print an error message for invalid operands to arith operation
*************** binary_op_error (enum tree_code code)
*** 2129,2139 ****
        opname = "||"; break;
      case BIT_XOR_EXPR:
        opname = "^"; break;
-     case LROTATE_EXPR:
-     case RROTATE_EXPR:
-       opname = "rotate"; break;
      default:
!       opname = "unknown"; break;
      }
    error ("invalid operands to binary %s", opname);
  }
--- 1875,1882 ----
        opname = "||"; break;
      case BIT_XOR_EXPR:
        opname = "^"; break;
      default:
!       gcc_unreachable ();
      }
    error ("invalid operands to binary %s", opname);
  }
*************** shorten_compare (tree *op0_ptr, tree *op
*** 2174,2182 ****
       but it *requires* conversion to FINAL_TYPE.  */
  
    if (op0 == primop0 && TREE_TYPE (op0) != *restype_ptr)
!     unsignedp0 = TREE_UNSIGNED (TREE_TYPE (op0));
    if (op1 == primop1 && TREE_TYPE (op1) != *restype_ptr)
!     unsignedp1 = TREE_UNSIGNED (TREE_TYPE (op1));
  
    /* If one of the operands must be floated, we cannot optimize.  */
    real1 = TREE_CODE (TREE_TYPE (primop0)) == REAL_TYPE;
--- 1917,1925 ----
       but it *requires* conversion to FINAL_TYPE.  */
  
    if (op0 == primop0 && TREE_TYPE (op0) != *restype_ptr)
!     unsignedp0 = TYPE_UNSIGNED (TREE_TYPE (op0));
    if (op1 == primop1 && TREE_TYPE (op1) != *restype_ptr)
!     unsignedp1 = TYPE_UNSIGNED (TREE_TYPE (op1));
  
    /* If one of the operands must be floated, we cannot optimize.  */
    real1 = TREE_CODE (TREE_TYPE (primop0)) == REAL_TYPE;
*************** shorten_compare (tree *op0_ptr, tree *op
*** 2187,2193 ****
       the second arg is 0.  */
  
    if (TREE_CONSTANT (primop0)
!       && ! integer_zerop (primop1) && ! real_zerop (primop1))
      {
        tree tem = primop0;
        int temi = unsignedp0;
--- 1930,1936 ----
       the second arg is 0.  */
  
    if (TREE_CONSTANT (primop0)
!       && !integer_zerop (primop1) && !real_zerop (primop1))
      {
        tree tem = primop0;
        int temi = unsignedp0;
*************** shorten_compare (tree *op0_ptr, tree *op
*** 2248,2267 ****
        int min_gt, max_gt, min_lt, max_lt;
        tree maxval, minval;
        /* 1 if comparison is nominally unsigned.  */
!       int unsignedp = TREE_UNSIGNED (*restype_ptr);
        tree val;
  
        type = c_common_signed_or_unsigned_type (unsignedp0,
  					       TREE_TYPE (primop0));
  
-       /* In C, if TYPE is an enumeration, then we need to get its
- 	 min/max values from it's underlying integral type, not the
- 	 enumerated type itself.  In C++, TYPE_MAX_VALUE and
- 	 TYPE_MIN_VALUE have already been set correctly on the
- 	 enumeration type.  */
-       if (!c_dialect_cxx() && TREE_CODE (type) == ENUMERAL_TYPE)
- 	type = c_common_type_for_size (TYPE_PRECISION (type), unsignedp0);
- 
        maxval = TYPE_MAX_VALUE (type);
        minval = TYPE_MIN_VALUE (type);
  
--- 1991,2002 ----
        int min_gt, max_gt, min_lt, max_lt;
        tree maxval, minval;
        /* 1 if comparison is nominally unsigned.  */
!       int unsignedp = TYPE_UNSIGNED (*restype_ptr);
        tree val;
  
        type = c_common_signed_or_unsigned_type (unsignedp0,
  					       TREE_TYPE (primop0));
  
        maxval = TYPE_MAX_VALUE (type);
        minval = TYPE_MIN_VALUE (type);
  
*************** shorten_compare (tree *op0_ptr, tree *op
*** 2269,2275 ****
  	*restype_ptr = c_common_signed_type (*restype_ptr);
  
        if (TREE_TYPE (primop1) != *restype_ptr)
! 	primop1 = convert (*restype_ptr, primop1);
        if (type != *restype_ptr)
  	{
  	  minval = convert (*restype_ptr, minval);
--- 2004,2019 ----
  	*restype_ptr = c_common_signed_type (*restype_ptr);
  
        if (TREE_TYPE (primop1) != *restype_ptr)
! 	{
! 	  /* Convert primop1 to target type, but do not introduce
! 	     additional overflow.  We know primop1 is an int_cst.  */
! 	  tree tmp = build_int_cst_wide (*restype_ptr,
! 					 TREE_INT_CST_LOW (primop1),
! 					 TREE_INT_CST_HIGH (primop1));
! 
! 	  primop1 = force_fit_type (tmp, 0, TREE_OVERFLOW (primop1),
! 				    TREE_CONSTANT_OVERFLOW (primop1));
! 	}
        if (type != *restype_ptr)
  	{
  	  minval = convert (*restype_ptr, minval);
*************** shorten_compare (tree *op0_ptr, tree *op
*** 2378,2384 ****
  	{
  	  /* Don't forget to evaluate PRIMOP0 if it has side effects.  */
  	  if (TREE_SIDE_EFFECTS (primop0))
! 	    return build (COMPOUND_EXPR, TREE_TYPE (val), primop0, val);
  	  return val;
  	}
  
--- 2122,2128 ----
  	{
  	  /* Don't forget to evaluate PRIMOP0 if it has side effects.  */
  	  if (TREE_SIDE_EFFECTS (primop0))
! 	    return build2 (COMPOUND_EXPR, TREE_TYPE (val), primop0, val);
  	  return val;
  	}
  
*************** shorten_compare (tree *op0_ptr, tree *op
*** 2405,2411 ****
      {
        type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
        type = c_common_signed_or_unsigned_type (unsignedp0
! 					       || TREE_UNSIGNED (*restype_ptr),
  					       type);
        /* Make sure shorter operand is extended the right way
  	 to match the longer operand.  */
--- 2149,2155 ----
      {
        type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
        type = c_common_signed_or_unsigned_type (unsignedp0
! 					       || TYPE_UNSIGNED (*restype_ptr),
  					       type);
        /* Make sure shorter operand is extended the right way
  	 to match the longer operand.  */
*************** shorten_compare (tree *op0_ptr, tree *op
*** 2427,2433 ****
        primop1 = op1;
  
        if (!real1 && !real2 && integer_zerop (primop1)
! 	  && TREE_UNSIGNED (*restype_ptr))
  	{
  	  tree value = 0;
  	  switch (code)
--- 2171,2177 ----
        primop1 = op1;
  
        if (!real1 && !real2 && integer_zerop (primop1)
! 	  && TYPE_UNSIGNED (*restype_ptr))
  	{
  	  tree value = 0;
  	  switch (code)
*************** shorten_compare (tree *op0_ptr, tree *op
*** 2438,2455 ****
  		 >= 0, the signedness of the comparison isn't an issue,
  		 so suppress the warning.  */
  	      if (extra_warnings && !in_system_header
! 		  && ! (TREE_CODE (primop0) == INTEGER_CST
! 			&& ! TREE_OVERFLOW (convert (c_common_signed_type (type),
! 						     primop0))))
  		warning ("comparison of unsigned expression >= 0 is always true");
  	      value = truthvalue_true_node;
  	      break;
  
  	    case LT_EXPR:
  	      if (extra_warnings && !in_system_header
! 		  && ! (TREE_CODE (primop0) == INTEGER_CST
! 			&& ! TREE_OVERFLOW (convert (c_common_signed_type (type),
! 						     primop0))))
  		warning ("comparison of unsigned expression < 0 is always false");
  	      value = truthvalue_false_node;
  	      break;
--- 2182,2199 ----
  		 >= 0, the signedness of the comparison isn't an issue,
  		 so suppress the warning.  */
  	      if (extra_warnings && !in_system_header
! 		  && !(TREE_CODE (primop0) == INTEGER_CST
! 		       && !TREE_OVERFLOW (convert (c_common_signed_type (type),
! 						   primop0))))
  		warning ("comparison of unsigned expression >= 0 is always true");
  	      value = truthvalue_true_node;
  	      break;
  
  	    case LT_EXPR:
  	      if (extra_warnings && !in_system_header
! 		  && !(TREE_CODE (primop0) == INTEGER_CST
! 		       && !TREE_OVERFLOW (convert (c_common_signed_type (type),
! 						   primop0))))
  		warning ("comparison of unsigned expression < 0 is always false");
  	      value = truthvalue_false_node;
  	      break;
*************** shorten_compare (tree *op0_ptr, tree *op
*** 2462,2469 ****
  	    {
  	      /* Don't forget to evaluate PRIMOP0 if it has side effects.  */
  	      if (TREE_SIDE_EFFECTS (primop0))
! 		return build (COMPOUND_EXPR, TREE_TYPE (value),
! 			      primop0, value);
  	      return value;
  	    }
  	}
--- 2206,2213 ----
  	    {
  	      /* Don't forget to evaluate PRIMOP0 if it has side effects.  */
  	      if (TREE_SIDE_EFFECTS (primop0))
! 		return build2 (COMPOUND_EXPR, TREE_TYPE (value),
! 			       primop0, value);
  	      return value;
  	    }
  	}
*************** pointer_int_sum (enum tree_code resultco
*** 2485,2493 ****
  {
    tree size_exp;
  
-   tree result;
-   tree folded;
- 
    /* The result is a pointer of the same type that is being added.  */
  
    tree result_type = TREE_TYPE (ptrop);
--- 2229,2234 ----
*************** pointer_int_sum (enum tree_code resultco
*** 2495,2501 ****
    if (TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE)
      {
        if (pedantic || warn_pointer_arith)
! 	pedwarn ("pointer of type `void *' used in arithmetic");
        size_exp = integer_one_node;
      }
    else if (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE)
--- 2236,2242 ----
    if (TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE)
      {
        if (pedantic || warn_pointer_arith)
! 	pedwarn ("pointer of type %<void *%> used in arithmetic");
        size_exp = integer_one_node;
      }
    else if (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE)
*************** pointer_int_sum (enum tree_code resultco
*** 2519,2525 ****
       This helps produce common subexpressions.  */
  
    if ((TREE_CODE (intop) == PLUS_EXPR || TREE_CODE (intop) == MINUS_EXPR)
!       && ! TREE_CONSTANT (intop)
        && TREE_CONSTANT (TREE_OPERAND (intop, 1))
        && TREE_CONSTANT (size_exp)
        /* If the constant comes from pointer subtraction,
--- 2260,2266 ----
       This helps produce common subexpressions.  */
  
    if ((TREE_CODE (intop) == PLUS_EXPR || TREE_CODE (intop) == MINUS_EXPR)
!       && !TREE_CONSTANT (intop)
        && TREE_CONSTANT (TREE_OPERAND (intop, 1))
        && TREE_CONSTANT (size_exp)
        /* If the constant comes from pointer subtraction,
*************** pointer_int_sum (enum tree_code resultco
*** 2528,2534 ****
        /* If the constant is unsigned, and smaller than the pointer size,
  	 then we must skip this optimization.  This is because it could cause
  	 an overflow error if the constant is negative but INTOP is not.  */
!       && (! TREE_UNSIGNED (TREE_TYPE (intop))
  	  || (TYPE_PRECISION (TREE_TYPE (intop))
  	      == TYPE_PRECISION (TREE_TYPE (ptrop)))))
      {
--- 2269,2275 ----
        /* If the constant is unsigned, and smaller than the pointer size,
  	 then we must skip this optimization.  This is because it could cause
  	 an overflow error if the constant is negative but INTOP is not.  */
!       && (!TYPE_UNSIGNED (TREE_TYPE (intop))
  	  || (TYPE_PRECISION (TREE_TYPE (intop))
  	      == TYPE_PRECISION (TREE_TYPE (ptrop)))))
      {
*************** pointer_int_sum (enum tree_code resultco
*** 2548,2556 ****
       so the multiply won't overflow spuriously.  */
  
    if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype)
!       || TREE_UNSIGNED (TREE_TYPE (intop)) != TREE_UNSIGNED (sizetype))
      intop = convert (c_common_type_for_size (TYPE_PRECISION (sizetype),
! 					     TREE_UNSIGNED (sizetype)), intop);
  
    /* Replace the integer argument with a suitable product by the object size.
       Do this multiplication as signed, then convert to the appropriate
--- 2289,2297 ----
       so the multiply won't overflow spuriously.  */
  
    if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype)
!       || TYPE_UNSIGNED (TREE_TYPE (intop)) != TYPE_UNSIGNED (sizetype))
      intop = convert (c_common_type_for_size (TYPE_PRECISION (sizetype),
! 					     TYPE_UNSIGNED (sizetype)), intop);
  
    /* Replace the integer argument with a suitable product by the object size.
       Do this multiplication as signed, then convert to the appropriate
*************** pointer_int_sum (enum tree_code resultco
*** 2561,2573 ****
  				    convert (TREE_TYPE (intop), size_exp), 1));
  
    /* Create the sum or difference.  */
! 
!   result = build (resultcode, result_type, ptrop, intop);
! 
!   folded = fold (result);
!   if (folded == result)
!     TREE_CONSTANT (folded) = TREE_CONSTANT (ptrop) & TREE_CONSTANT (intop);
!   return folded;
  }
  
  /* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
--- 2302,2308 ----
  				    convert (TREE_TYPE (intop), size_exp), 1));
  
    /* Create the sum or difference.  */
!   return fold (build2 (resultcode, result_type, ptrop, intop));
  }
  
  /* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
*************** pointer_int_sum (enum tree_code resultco
*** 2584,2647 ****
  tree
  c_common_truthvalue_conversion (tree expr)
  {
-   if (TREE_CODE (expr) == ERROR_MARK)
-     return expr;
- 
-   if (TREE_CODE (expr) == FUNCTION_DECL)
-     expr = build_unary_op (ADDR_EXPR, expr, 0);
- 
- #if 0 /* This appears to be wrong for C++.  */
-   /* These really should return error_mark_node after 2.4 is stable.
-      But not all callers handle ERROR_MARK properly.  */
-   switch (TREE_CODE (TREE_TYPE (expr)))
-     {
-     case RECORD_TYPE:
-       error ("struct type value used where scalar is required");
-       return truthvalue_false_node;
- 
-     case UNION_TYPE:
-       error ("union type value used where scalar is required");
-       return truthvalue_false_node;
- 
-     case ARRAY_TYPE:
-       error ("array type value used where scalar is required");
-       return truthvalue_false_node;
- 
-     default:
-       break;
-     }
- #endif /* 0 */
- 
    switch (TREE_CODE (expr))
      {
!     case EQ_EXPR:
!     case NE_EXPR: case LE_EXPR: case GE_EXPR: case LT_EXPR: case GT_EXPR:
      case TRUTH_ANDIF_EXPR:
      case TRUTH_ORIF_EXPR:
      case TRUTH_AND_EXPR:
      case TRUTH_OR_EXPR:
      case TRUTH_XOR_EXPR:
      case TRUTH_NOT_EXPR:
!       TREE_TYPE (expr) = truthvalue_type_node;
!       return expr;
  
      case ERROR_MARK:
        return expr;
  
      case INTEGER_CST:
!       return integer_zerop (expr) ? truthvalue_false_node : truthvalue_true_node;
  
      case REAL_CST:
!       return real_zerop (expr) ? truthvalue_false_node : truthvalue_true_node;
  
      case ADDR_EXPR:
        {
  	if (TREE_CODE (TREE_OPERAND (expr, 0)) == FUNCTION_DECL
! 	    && ! DECL_WEAK (TREE_OPERAND (expr, 0)))
  	  {
  	    /* Common Ada/Pascal programmer's mistake.  We always warn
  	       about this since it is so bad.  */
! 	    warning ("the address of `%D', will always evaluate as `true'",
  		     TREE_OPERAND (expr, 0));
  	    return truthvalue_true_node;
  	  }
--- 2319,2378 ----
  tree
  c_common_truthvalue_conversion (tree expr)
  {
    switch (TREE_CODE (expr))
      {
!     case EQ_EXPR:   case NE_EXPR:   case UNEQ_EXPR: case LTGT_EXPR:
!     case LE_EXPR:   case GE_EXPR:   case LT_EXPR:   case GT_EXPR:
!     case UNLE_EXPR: case UNGE_EXPR: case UNLT_EXPR: case UNGT_EXPR:
!     case ORDERED_EXPR: case UNORDERED_EXPR:
!       if (TREE_TYPE (expr) == truthvalue_type_node)
! 	return expr;
!       return build2 (TREE_CODE (expr), truthvalue_type_node,
! 		     TREE_OPERAND (expr, 0), TREE_OPERAND (expr, 1));
! 
      case TRUTH_ANDIF_EXPR:
      case TRUTH_ORIF_EXPR:
      case TRUTH_AND_EXPR:
      case TRUTH_OR_EXPR:
      case TRUTH_XOR_EXPR:
+       if (TREE_TYPE (expr) == truthvalue_type_node)
+ 	return expr;
+       return build2 (TREE_CODE (expr), truthvalue_type_node,
+ 		 lang_hooks.truthvalue_conversion (TREE_OPERAND (expr, 0)),
+ 		 lang_hooks.truthvalue_conversion (TREE_OPERAND (expr, 1)));
+ 
      case TRUTH_NOT_EXPR:
!       if (TREE_TYPE (expr) == truthvalue_type_node)
! 	return expr;
!       return build1 (TREE_CODE (expr), truthvalue_type_node,
! 		 lang_hooks.truthvalue_conversion (TREE_OPERAND (expr, 0)));
  
      case ERROR_MARK:
        return expr;
  
      case INTEGER_CST:
!       /* Avoid integer_zerop to ignore TREE_CONSTANT_OVERFLOW.  */
!       return (TREE_INT_CST_LOW (expr) != 0 || TREE_INT_CST_HIGH (expr) != 0)
! 	     ? truthvalue_true_node
! 	     : truthvalue_false_node;
  
      case REAL_CST:
!       return real_compare (NE_EXPR, &TREE_REAL_CST (expr), &dconst0)
! 	     ? truthvalue_true_node
! 	     : truthvalue_false_node;
! 
!     case FUNCTION_DECL:
!       expr = build_unary_op (ADDR_EXPR, expr, 0);
!       /* Fall through.  */
  
      case ADDR_EXPR:
        {
  	if (TREE_CODE (TREE_OPERAND (expr, 0)) == FUNCTION_DECL
! 	    && !DECL_WEAK (TREE_OPERAND (expr, 0)))
  	  {
  	    /* Common Ada/Pascal programmer's mistake.  We always warn
  	       about this since it is so bad.  */
! 	    warning ("the address of %qD, will always evaluate as %<true%>",
  		     TREE_OPERAND (expr, 0));
  	    return truthvalue_true_node;
  	  }
*************** c_common_truthvalue_conversion (tree exp
*** 2653,2660 ****
  	  break;
  
  	if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 0)))
! 	  return build (COMPOUND_EXPR, truthvalue_type_node,
! 			TREE_OPERAND (expr, 0), truthvalue_true_node);
  	else
  	  return truthvalue_true_node;
        }
--- 2384,2391 ----
  	  break;
  
  	if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 0)))
! 	  return build2 (COMPOUND_EXPR, truthvalue_type_node,
! 			 TREE_OPERAND (expr, 0), truthvalue_true_node);
  	else
  	  return truthvalue_true_node;
        }
*************** c_common_truthvalue_conversion (tree exp
*** 2662,2692 ****
      case COMPLEX_EXPR:
        return build_binary_op ((TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
  			       ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
! 		c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)),
! 		c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)),
  			      0);
  
      case NEGATE_EXPR:
      case ABS_EXPR:
      case FLOAT_EXPR:
        /* These don't change whether an object is nonzero or zero.  */
!       return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
  
      case LROTATE_EXPR:
      case RROTATE_EXPR:
        /* These don't change whether an object is zero or nonzero, but
  	 we can't ignore them if their second arg has side-effects.  */
        if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1)))
! 	return build (COMPOUND_EXPR, truthvalue_type_node, TREE_OPERAND (expr, 1),
! 		      c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)));
        else
! 	return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
  
      case COND_EXPR:
        /* Distribute the conversion into the arms of a COND_EXPR.  */
!       return fold (build (COND_EXPR, truthvalue_type_node, TREE_OPERAND (expr, 0),
! 		c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)),
! 		c_common_truthvalue_conversion (TREE_OPERAND (expr, 2))));
  
      case CONVERT_EXPR:
        /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
--- 2393,2425 ----
      case COMPLEX_EXPR:
        return build_binary_op ((TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
  			       ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
! 		lang_hooks.truthvalue_conversion (TREE_OPERAND (expr, 0)),
! 		lang_hooks.truthvalue_conversion (TREE_OPERAND (expr, 1)),
  			      0);
  
      case NEGATE_EXPR:
      case ABS_EXPR:
      case FLOAT_EXPR:
        /* These don't change whether an object is nonzero or zero.  */
!       return lang_hooks.truthvalue_conversion (TREE_OPERAND (expr, 0));
  
      case LROTATE_EXPR:
      case RROTATE_EXPR:
        /* These don't change whether an object is zero or nonzero, but
  	 we can't ignore them if their second arg has side-effects.  */
        if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1)))
! 	return build2 (COMPOUND_EXPR, truthvalue_type_node,
! 		       TREE_OPERAND (expr, 1),
! 		       lang_hooks.truthvalue_conversion (TREE_OPERAND (expr, 0)));
        else
! 	return lang_hooks.truthvalue_conversion (TREE_OPERAND (expr, 0));
  
      case COND_EXPR:
        /* Distribute the conversion into the arms of a COND_EXPR.  */
!       return fold (build3 (COND_EXPR, truthvalue_type_node,
! 		TREE_OPERAND (expr, 0),
! 		lang_hooks.truthvalue_conversion (TREE_OPERAND (expr, 1)),
! 		lang_hooks.truthvalue_conversion (TREE_OPERAND (expr, 2))));
  
      case CONVERT_EXPR:
        /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
*************** c_common_truthvalue_conversion (tree exp
*** 2699,2705 ****
        /* If this is widening the argument, we can ignore it.  */
        if (TYPE_PRECISION (TREE_TYPE (expr))
  	  >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
! 	return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
        break;
  
      case MINUS_EXPR:
--- 2432,2438 ----
        /* If this is widening the argument, we can ignore it.  */
        if (TYPE_PRECISION (TREE_TYPE (expr))
  	  >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
! 	return lang_hooks.truthvalue_conversion (TREE_OPERAND (expr, 0));
        break;
  
      case MINUS_EXPR:
*************** c_common_truthvalue_conversion (tree exp
*** 2734,2740 ****
        break;
  
      case MODIFY_EXPR:
!       if (warn_parentheses && C_EXP_ORIGINAL_CODE (expr) == MODIFY_EXPR)
  	warning ("suggest parentheses around assignment used as truth value");
        break;
  
--- 2467,2473 ----
        break;
  
      case MODIFY_EXPR:
!       if (warn_parentheses && !TREE_NO_WARNING (expr))
  	warning ("suggest parentheses around assignment used as truth value");
        break;
  
*************** c_common_truthvalue_conversion (tree exp
*** 2748,2764 ****
        return (build_binary_op
  	      ((TREE_SIDE_EFFECTS (expr)
  		? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
! 	c_common_truthvalue_conversion (build_unary_op (REALPART_EXPR, t, 0)),
! 	c_common_truthvalue_conversion (build_unary_op (IMAGPART_EXPR, t, 0)),
  	       0));
      }
  
    return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
  }
  
! static tree builtin_function_2 (const char *, const char *, tree, tree,
! 				int, enum built_in_class, int, int,
! 				tree);
  
  /* Make a variant type in the proper way for C/C++, propagating qualifiers
     down to the element type of an array.  */
--- 2481,2500 ----
        return (build_binary_op
  	      ((TREE_SIDE_EFFECTS (expr)
  		? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
! 	lang_hooks.truthvalue_conversion (build_unary_op (REALPART_EXPR, t, 0)),
! 	lang_hooks.truthvalue_conversion (build_unary_op (IMAGPART_EXPR, t, 0)),
  	       0));
      }
  
    return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
  }
  
! static tree builtin_function_2 (const char *builtin_name, const char *name,
! 				tree builtin_type, tree type,
! 				enum built_in_function function_code,
! 				enum built_in_class cl, int library_name_p,
! 				bool nonansi_p,
! 				tree attrs);
  
  /* Make a variant type in the proper way for C/C++, propagating qualifiers
     down to the element type of an array.  */
*************** c_build_qualified_type (tree type, int t
*** 2768,2778 ****
  {
    if (type == error_mark_node)
      return type;
!   
    if (TREE_CODE (type) == ARRAY_TYPE)
!     return build_array_type (c_build_qualified_type (TREE_TYPE (type),
! 						     type_quals),
! 			     TYPE_DOMAIN (type));
  
    /* A restrict-qualified pointer type must be a pointer to object or
       incomplete type.  Note that the use of POINTER_TYPE_P also allows
--- 2504,2533 ----
  {
    if (type == error_mark_node)
      return type;
! 
    if (TREE_CODE (type) == ARRAY_TYPE)
!     {
!       tree t;
!       tree element_type = c_build_qualified_type (TREE_TYPE (type),
! 						  type_quals);
! 
!       /* See if we already have an identically qualified type.  */
!       for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
! 	{
! 	  if (TYPE_QUALS (strip_array_types (t)) == type_quals
! 	      && TYPE_NAME (t) == TYPE_NAME (type)
! 	      && TYPE_CONTEXT (t) == TYPE_CONTEXT (type)
! 	      && attribute_list_equal (TYPE_ATTRIBUTES (t),
! 				       TYPE_ATTRIBUTES (type)))
! 	    break;
! 	}
!       if (!t)
! 	{
! 	  t = build_variant_type_copy (type);
! 	  TREE_TYPE (t) = element_type;
! 	}
!       return t;
!     }
  
    /* A restrict-qualified pointer type must be a pointer to object or
       incomplete type.  Note that the use of POINTER_TYPE_P also allows
*************** c_build_qualified_type (tree type, int t
*** 2781,2787 ****
        && (!POINTER_TYPE_P (type)
  	  || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type))))
      {
!       error ("invalid use of `restrict'");
        type_quals &= ~TYPE_QUAL_RESTRICT;
      }
  
--- 2536,2542 ----
        && (!POINTER_TYPE_P (type)
  	  || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type))))
      {
!       error ("invalid use of %<restrict%>");
        type_quals &= ~TYPE_QUAL_RESTRICT;
      }
  
*************** void
*** 2794,2800 ****
  c_apply_type_quals_to_decl (int type_quals, tree decl)
  {
    tree type = TREE_TYPE (decl);
!   
    if (type == error_mark_node)
      return;
  
--- 2549,2555 ----
  c_apply_type_quals_to_decl (int type_quals, tree decl)
  {
    tree type = TREE_TYPE (decl);
! 
    if (type == error_mark_node)
      return;
  
*************** c_apply_type_quals_to_decl (int type_qua
*** 2821,2827 ****
        if (!type
  	  || !POINTER_TYPE_P (type)
  	  || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type)))
! 	error ("invalid use of `restrict'");
        else if (flag_strict_aliasing && type == TREE_TYPE (decl))
  	/* Indicate we need to make a unique alias set for this pointer.
  	   We can't do it here because it might be pointing to an
--- 2576,2582 ----
        if (!type
  	  || !POINTER_TYPE_P (type)
  	  || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type)))
! 	error ("invalid use of %<restrict%>");
        else if (flag_strict_aliasing && type == TREE_TYPE (decl))
  	/* Indicate we need to make a unique alias set for this pointer.
  	   We can't do it here because it might be pointing to an
*************** c_apply_type_quals_to_decl (int type_qua
*** 2830,2835 ****
--- 2585,2635 ----
      }
  }
  
+ /* Hash function for the problem of multiple type definitions in
+    different files.  This must hash all types that will compare
+    equal via comptypes to the same value.  In practice it hashes
+    on some of the simple stuff and leaves the details to comptypes.  */
+ 
+ static hashval_t
+ c_type_hash (const void *p)
+ {
+   int i = 0;
+   int shift, size;
+   tree t = (tree) p;
+   tree t2;
+   switch (TREE_CODE (t))
+     {
+     /* For pointers, hash on pointee type plus some swizzling.  */
+     case POINTER_TYPE:
+       return c_type_hash (TREE_TYPE (t)) ^ 0x3003003;
+     /* Hash on number of elements and total size.  */
+     case ENUMERAL_TYPE:
+       shift = 3;
+       t2 = TYPE_VALUES (t);
+       break;
+     case RECORD_TYPE:
+       shift = 0;
+       t2 = TYPE_FIELDS (t);
+       break;
+     case QUAL_UNION_TYPE:
+       shift = 1;
+       t2 = TYPE_FIELDS (t);
+       break;
+     case UNION_TYPE:
+       shift = 2;
+       t2 = TYPE_FIELDS (t);
+       break;
+     default:
+       gcc_unreachable ();
+     }
+   for (; t2; t2 = TREE_CHAIN (t2))
+     i++;
+   size = TREE_INT_CST_LOW (TYPE_SIZE (t));
+   return ((size << 24) | (i << shift));
+ }
+ 
+ static GTY((param_is (union tree_node))) htab_t type_hash_table;
+ 
  /* Return the typed-based alias set for T, which may be an expression
     or a type.  Return -1 if we don't do anything special.  */
  
*************** HOST_WIDE_INT
*** 2837,2842 ****
--- 2637,2643 ----
  c_common_get_alias_set (tree t)
  {
    tree u;
+   PTR *slot;
  
    /* Permit type-punning when accessing a union, provided the access
       is directly through the union.  For example, this code does not
*************** c_common_get_alias_set (tree t)
*** 2852,2858 ****
        return 0;
  
    /* That's all the expressions we handle specially.  */
!   if (! TYPE_P (t))
      return -1;
  
    /* The C standard guarantees that any object may be accessed via an
--- 2653,2659 ----
        return 0;
  
    /* That's all the expressions we handle specially.  */
!   if (!TYPE_P (t))
      return -1;
  
    /* The C standard guarantees that any object may be accessed via an
*************** c_common_get_alias_set (tree t)
*** 2869,2875 ****
    /* The C standard specifically allows aliasing between signed and
       unsigned variants of the same type.  We treat the signed
       variant as canonical.  */
!   if (TREE_CODE (t) == INTEGER_TYPE && TREE_UNSIGNED (t))
      {
        tree t1 = c_common_signed_type (t);
  
--- 2670,2676 ----
    /* The C standard specifically allows aliasing between signed and
       unsigned variants of the same type.  We treat the signed
       variant as canonical.  */
!   if (TREE_CODE (t) == INTEGER_TYPE && TYPE_UNSIGNED (t))
      {
        tree t1 = c_common_signed_type (t);
  
*************** c_common_get_alias_set (tree t)
*** 2893,2906 ****
  	 technically, an `int **' and `const int **' cannot point at
  	 the same thing.
  
!          But, the standard is wrong.  In particular, this code is
  	 legal C++:
  
              int *ip;
              int **ipp = &ip;
!             const int* const* cipp = &ipp;
  
!          And, it doesn't make sense for that to be legal unless you
  	 can dereference IPP and CIPP.  So, we ignore cv-qualifiers on
  	 the pointed-to types.  This issue has been reported to the
  	 C++ committee.  */
--- 2694,2707 ----
  	 technically, an `int **' and `const int **' cannot point at
  	 the same thing.
  
! 	 But, the standard is wrong.  In particular, this code is
  	 legal C++:
  
              int *ip;
              int **ipp = &ip;
!             const int* const* cipp = ipp;
  
! 	 And, it doesn't make sense for that to be legal unless you
  	 can dereference IPP and CIPP.  So, we ignore cv-qualifiers on
  	 the pointed-to types.  This issue has been reported to the
  	 C++ committee.  */
*************** c_common_get_alias_set (tree t)
*** 2909,2914 ****
--- 2710,2775 ----
  	return get_alias_set (t1);
      }
  
+   /* Handle the case of multiple type nodes referring to "the same" type,
+      which occurs with IMA.  These share an alias set.  FIXME:  Currently only
+      C90 is handled.  (In C99 type compatibility is not transitive, which
+      complicates things mightily. The alias set splay trees can theoretically
+      represent this, but insertion is tricky when you consider all the
+      different orders things might arrive in.) */
+ 
+   if (c_language != clk_c || flag_isoc99)
+     return -1;
+ 
+   /* Save time if there's only one input file.  */
+   if (num_in_fnames == 1)
+     return -1;
+ 
+   /* Pointers need special handling if they point to any type that
+      needs special handling (below).  */
+   if (TREE_CODE (t) == POINTER_TYPE)
+     {
+       tree t2;
+       /* Find bottom type under any nested POINTERs.  */
+       for (t2 = TREE_TYPE (t);
+      TREE_CODE (t2) == POINTER_TYPE;
+      t2 = TREE_TYPE (t2))
+   ;
+       if (TREE_CODE (t2) != RECORD_TYPE
+     && TREE_CODE (t2) != ENUMERAL_TYPE
+     && TREE_CODE (t2) != QUAL_UNION_TYPE
+     && TREE_CODE (t2) != UNION_TYPE)
+   return -1;
+       if (TYPE_SIZE (t2) == 0)
+   return -1;
+     }
+   /* These are the only cases that need special handling.  */
+   if (TREE_CODE (t) != RECORD_TYPE
+       && TREE_CODE (t) != ENUMERAL_TYPE
+       && TREE_CODE (t) != QUAL_UNION_TYPE
+       && TREE_CODE (t) != UNION_TYPE
+       && TREE_CODE (t) != POINTER_TYPE)
+     return -1;
+   /* Undefined? */
+   if (TYPE_SIZE (t) == 0)
+     return -1;
+ 
+   /* Look up t in hash table.  Only one of the compatible types within each
+      alias set is recorded in the table.  */
+   if (!type_hash_table)
+     type_hash_table = htab_create_ggc (1021, c_type_hash,
+ 	    (htab_eq) lang_hooks.types_compatible_p,
+ 	    NULL);
+   slot = htab_find_slot (type_hash_table, t, INSERT);
+   if (*slot != NULL)
+     {
+       TYPE_ALIAS_SET (t) = TYPE_ALIAS_SET ((tree)*slot);
+       return TYPE_ALIAS_SET ((tree)*slot);
+     }
+   else
+     /* Our caller will assign and record (in t) a new alias set; all we need
+        to do is remember t in the hash table.  */
+     *slot = t;
+ 
    return -1;
  }
  
*************** c_sizeof_or_alignof_type (tree type, enu
*** 2923,2929 ****
    tree value = NULL;
    enum tree_code type_code = TREE_CODE (type);
  
!   my_friendly_assert (op == SIZEOF_EXPR || op == ALIGNOF_EXPR, 20020720);
    op_name = op == SIZEOF_EXPR ? "sizeof" : "__alignof__";
  
    if (type_code == FUNCTION_TYPE)
--- 2784,2790 ----
    tree value = NULL;
    enum tree_code type_code = TREE_CODE (type);
  
!   gcc_assert (op == SIZEOF_EXPR || op == ALIGNOF_EXPR);
    op_name = op == SIZEOF_EXPR ? "sizeof" : "__alignof__";
  
    if (type_code == FUNCTION_TYPE)
*************** c_sizeof_or_alignof_type (tree type, enu
*** 2931,2937 ****
        if (op == SIZEOF_EXPR)
  	{
  	  if (complain && (pedantic || warn_pointer_arith))
! 	    pedwarn ("invalid application of `sizeof' to a function type");
  	  value = size_one_node;
  	}
        else
--- 2792,2798 ----
        if (op == SIZEOF_EXPR)
  	{
  	  if (complain && (pedantic || warn_pointer_arith))
! 	    pedwarn ("invalid application of %<sizeof%> to a function type");
  	  value = size_one_node;
  	}
        else
*************** c_sizeof_or_alignof_type (tree type, enu
*** 2941,2965 ****
      {
        if (type_code == VOID_TYPE
  	  && complain && (pedantic || warn_pointer_arith))
! 	pedwarn ("invalid application of `%s' to a void type", op_name);
        value = size_one_node;
      }
    else if (!COMPLETE_TYPE_P (type))
      {
        if (complain)
! 	error ("invalid application of `%s' to incomplete type `%T' ", 
  	       op_name, type);
        value = size_zero_node;
      }
    else
      {
!       if (op == SIZEOF_EXPR)
  	/* Convert in case a char is more than one unit.  */
  	value = size_binop (CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
  			    size_int (TYPE_PRECISION (char_type_node)
  				      / BITS_PER_UNIT));
        else
! 	value = size_int (TYPE_ALIGN (type) / BITS_PER_UNIT);
      }
  
    /* VALUE will have an integer type with TYPE_IS_SIZETYPE set.
--- 2802,2826 ----
      {
        if (type_code == VOID_TYPE
  	  && complain && (pedantic || warn_pointer_arith))
! 	pedwarn ("invalid application of %qs to a void type", op_name);
        value = size_one_node;
      }
    else if (!COMPLETE_TYPE_P (type))
      {
        if (complain)
! 	error ("invalid application of %qs to incomplete type %qT ",
  	       op_name, type);
        value = size_zero_node;
      }
    else
      {
!       if (op == (enum tree_code) SIZEOF_EXPR)
  	/* Convert in case a char is more than one unit.  */
  	value = size_binop (CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
  			    size_int (TYPE_PRECISION (char_type_node)
  				      / BITS_PER_UNIT));
        else
! 	value = size_int (TYPE_ALIGN_UNIT (type));
      }
  
    /* VALUE will have an integer type with TYPE_IS_SIZETYPE set.
*************** c_sizeof_or_alignof_type (tree type, enu
*** 2967,2973 ****
       never happen.  However, this node should really have type
       `size_t', which is just a typedef for an ordinary integer type.  */
    value = fold (build1 (NOP_EXPR, size_type_node, value));
!   my_friendly_assert (!TYPE_IS_SIZETYPE (TREE_TYPE (value)), 20001021);
  
    return value;
  }
--- 2828,2834 ----
       never happen.  However, this node should really have type
       `size_t', which is just a typedef for an ordinary integer type.  */
    value = fold (build1 (NOP_EXPR, size_type_node, value));
!   gcc_assert (!TYPE_IS_SIZETYPE (TREE_TYPE (value)));
  
    return value;
  }
*************** c_alignof_expr (tree expr)
*** 2983,2999 ****
    tree t;
  
    if (TREE_CODE (expr) == VAR_DECL)
!     t = size_int (DECL_ALIGN (expr) / BITS_PER_UNIT);
  
    else if (TREE_CODE (expr) == COMPONENT_REF
  	   && DECL_C_BIT_FIELD (TREE_OPERAND (expr, 1)))
      {
!       error ("`__alignof' applied to a bit-field");
        t = size_one_node;
      }
    else if (TREE_CODE (expr) == COMPONENT_REF
  	   && TREE_CODE (TREE_OPERAND (expr, 1)) == FIELD_DECL)
!     t = size_int (DECL_ALIGN (TREE_OPERAND (expr, 1)) / BITS_PER_UNIT);
  
    else if (TREE_CODE (expr) == INDIRECT_REF)
      {
--- 2844,2860 ----
    tree t;
  
    if (TREE_CODE (expr) == VAR_DECL)
!     t = size_int (DECL_ALIGN_UNIT (expr));
  
    else if (TREE_CODE (expr) == COMPONENT_REF
  	   && DECL_C_BIT_FIELD (TREE_OPERAND (expr, 1)))
      {
!       error ("%<__alignof%> applied to a bit-field");
        t = size_one_node;
      }
    else if (TREE_CODE (expr) == COMPONENT_REF
  	   && TREE_CODE (TREE_OPERAND (expr, 1)) == FIELD_DECL)
!     t = size_int (DECL_ALIGN_UNIT (TREE_OPERAND (expr, 1)));
  
    else if (TREE_CODE (expr) == INDIRECT_REF)
      {
*************** c_common_nodes_and_builtins (void)
*** 3116,3158 ****
  
    /* These are types that c_common_type_for_size and
       c_common_type_for_mode use.  */
!   (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
! 					    intQI_type_node));
!   (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
! 					    intHI_type_node));
!   (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
! 					    intSI_type_node));
!   (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
! 					    intDI_type_node));
  #if HOST_BITS_PER_WIDE_INT >= 64
!   (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
! 					    get_identifier ("__int128_t"),
! 					    intTI_type_node));
  #endif
!   (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
! 					    unsigned_intQI_type_node));
!   (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
! 					    unsigned_intHI_type_node));
!   (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
! 					    unsigned_intSI_type_node));
!   (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
! 					    unsigned_intDI_type_node));
  #if HOST_BITS_PER_WIDE_INT >= 64
!   (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
! 					    get_identifier ("__uint128_t"),
! 					    unsigned_intTI_type_node));
  #endif
  
    /* Create the widest literal types.  */
    widest_integer_literal_type_node
      = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
!   (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
! 					    widest_integer_literal_type_node));
  
    widest_unsigned_literal_type_node
      = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
!   (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
! 					    widest_unsigned_literal_type_node));
  
    /* `unsigned long' is the standard type for sizeof.
       Note that stddef.h uses `unsigned long',
--- 2977,3021 ----
  
    /* These are types that c_common_type_for_size and
       c_common_type_for_mode use.  */
!   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
! 					 intQI_type_node));
!   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
! 					 intHI_type_node));
!   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
! 					 intSI_type_node));
!   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
! 					 intDI_type_node));
  #if HOST_BITS_PER_WIDE_INT >= 64
!   if (targetm.scalar_mode_supported_p (TImode))
!     lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
! 					   get_identifier ("__int128_t"),
! 					   intTI_type_node));
  #endif
!   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
! 					 unsigned_intQI_type_node));
!   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
! 					 unsigned_intHI_type_node));
!   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
! 					 unsigned_intSI_type_node));
!   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
! 					 unsigned_intDI_type_node));
  #if HOST_BITS_PER_WIDE_INT >= 64
!   if (targetm.scalar_mode_supported_p (TImode))
!     lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
! 					   get_identifier ("__uint128_t"),
! 					   unsigned_intTI_type_node));
  #endif
  
    /* Create the widest literal types.  */
    widest_integer_literal_type_node
      = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
!   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
! 					 widest_integer_literal_type_node));
  
    widest_unsigned_literal_type_node
      = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
!   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
! 					 widest_unsigned_literal_type_node));
  
    /* `unsigned long' is the standard type for sizeof.
       Note that stddef.h uses `unsigned long',
*************** c_common_nodes_and_builtins (void)
*** 3162,3242 ****
    signed_size_type_node = c_common_signed_type (size_type_node);
    set_sizetype (size_type_node);
  
    build_common_tree_nodes_2 (flag_short_double);
  
    record_builtin_type (RID_FLOAT, NULL, float_type_node);
    record_builtin_type (RID_DOUBLE, NULL, double_type_node);
    record_builtin_type (RID_MAX, "long double", long_double_type_node);
  
!   (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
! 					    get_identifier ("complex int"),
! 					    complex_integer_type_node));
!   (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
! 					    get_identifier ("complex float"),
! 					    complex_float_type_node));
!   (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
! 					    get_identifier ("complex double"),
! 					    complex_double_type_node));
!   (*lang_hooks.decls.pushdecl)
      (build_decl (TYPE_DECL, get_identifier ("complex long double"),
  		 complex_long_double_type_node));
  
!   /* Types which are common to the fortran compiler and libf2c.  When
!      changing these, you also need to be concerned with f/com.h.  */
! 
!   if (TYPE_PRECISION (float_type_node)
!       == TYPE_PRECISION (long_integer_type_node))
!     {
!       g77_integer_type_node = long_integer_type_node;
!       g77_uinteger_type_node = long_unsigned_type_node;
!     }
!   else if (TYPE_PRECISION (float_type_node)
! 	   == TYPE_PRECISION (integer_type_node))
!     {
!       g77_integer_type_node = integer_type_node;
!       g77_uinteger_type_node = unsigned_type_node;
!     }
!   else
!     g77_integer_type_node = g77_uinteger_type_node = NULL_TREE;
! 
!   if (g77_integer_type_node != NULL_TREE)
!     {
!       (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
! 						get_identifier ("__g77_integer"),
! 						g77_integer_type_node));
!       (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
! 						get_identifier ("__g77_uinteger"),
! 						g77_uinteger_type_node));
!     }
! 
!   if (TYPE_PRECISION (float_type_node) * 2
!       == TYPE_PRECISION (long_integer_type_node))
!     {
!       g77_longint_type_node = long_integer_type_node;
!       g77_ulongint_type_node = long_unsigned_type_node;
!     }
!   else if (TYPE_PRECISION (float_type_node) * 2
! 	   == TYPE_PRECISION (long_long_integer_type_node))
!     {
!       g77_longint_type_node = long_long_integer_type_node;
!       g77_ulongint_type_node = long_long_unsigned_type_node;
!     }
!   else
!     g77_longint_type_node = g77_ulongint_type_node = NULL_TREE;
! 
!   if (g77_longint_type_node != NULL_TREE)
!     {
!       (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
! 						get_identifier ("__g77_longint"),
! 						g77_longint_type_node));
!       (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
! 						get_identifier ("__g77_ulongint"),
! 						g77_ulongint_type_node));
!     }
  
    record_builtin_type (RID_VOID, NULL, void_type_node);
  
!   void_zero_node = build_int_2 (0, 0);
    TREE_TYPE (void_zero_node) = void_type_node;
  
    void_list_node = build_void_list_node ();
--- 3025,3061 ----
    signed_size_type_node = c_common_signed_type (size_type_node);
    set_sizetype (size_type_node);
  
+   pid_type_node =
+     TREE_TYPE (identifier_global_value (get_identifier (PID_TYPE)));
+ 
    build_common_tree_nodes_2 (flag_short_double);
  
    record_builtin_type (RID_FLOAT, NULL, float_type_node);
    record_builtin_type (RID_DOUBLE, NULL, double_type_node);
    record_builtin_type (RID_MAX, "long double", long_double_type_node);
  
!   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
! 					 get_identifier ("complex int"),
! 					 complex_integer_type_node));
!   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
! 					 get_identifier ("complex float"),
! 					 complex_float_type_node));
!   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
! 					 get_identifier ("complex double"),
! 					 complex_double_type_node));
!   lang_hooks.decls.pushdecl
      (build_decl (TYPE_DECL, get_identifier ("complex long double"),
  		 complex_long_double_type_node));
  
!   if (c_dialect_cxx ())
!     /* For C++, make fileptr_type_node a distinct void * type until
!        FILE type is defined.  */
!     fileptr_type_node = build_variant_type_copy (ptr_type_node);
  
    record_builtin_type (RID_VOID, NULL, void_type_node);
  
!   /* This node must not be shared.  */
!   void_zero_node = make_node (INTEGER_CST);
    TREE_TYPE (void_zero_node) = void_type_node;
  
    void_list_node = build_void_list_node ();
*************** c_common_nodes_and_builtins (void)
*** 3269,3275 ****
    wchar_type_size = TYPE_PRECISION (wchar_type_node);
    if (c_dialect_cxx ())
      {
!       if (TREE_UNSIGNED (wchar_type_node))
  	wchar_type_node = make_unsigned_type (wchar_type_size);
        else
  	wchar_type_node = make_signed_type (wchar_type_size);
--- 3088,3094 ----
    wchar_type_size = TYPE_PRECISION (wchar_type_node);
    if (c_dialect_cxx ())
      {
!       if (TYPE_UNSIGNED (wchar_type_node))
  	wchar_type_node = make_unsigned_type (wchar_type_size);
        else
  	wchar_type_node = make_signed_type (wchar_type_size);
*************** c_common_nodes_and_builtins (void)
*** 3298,3315 ****
      = TREE_TYPE (identifier_global_value (get_identifier (PTRDIFF_TYPE)));
    unsigned_ptrdiff_type_node = c_common_unsigned_type (ptrdiff_type_node);
  
!   (*lang_hooks.decls.pushdecl)
      (build_decl (TYPE_DECL, get_identifier ("__builtin_va_list"),
  		 va_list_type_node));
  
-   (*lang_hooks.decls.pushdecl)
-     (build_decl (TYPE_DECL, get_identifier ("__builtin_ptrdiff_t"),
- 		 ptrdiff_type_node));
- 
-   (*lang_hooks.decls.pushdecl)
-     (build_decl (TYPE_DECL, get_identifier ("__builtin_size_t"),
- 		 sizetype));
- 
    if (TREE_CODE (va_list_type_node) == ARRAY_TYPE)
      {
        va_list_arg_type_node = va_list_ref_type_node =
--- 3117,3126 ----
      = TREE_TYPE (identifier_global_value (get_identifier (PTRDIFF_TYPE)));
    unsigned_ptrdiff_type_node = c_common_unsigned_type (ptrdiff_type_node);
  
!   lang_hooks.decls.pushdecl
      (build_decl (TYPE_DECL, get_identifier ("__builtin_va_list"),
  		 va_list_type_node));
  
    if (TREE_CODE (va_list_type_node) == ARRAY_TYPE)
      {
        va_list_arg_type_node = va_list_ref_type_node =
*************** c_common_nodes_and_builtins (void)
*** 3416,3432 ****
  
    c_init_attributes ();
  
! #define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE,			\
! 		    BOTH_P, FALLBACK_P, NONANSI_P, ATTRS, IMPLICIT)	\
!   if (NAME)								\
      {									\
        tree decl;							\
  									\
!       if (strncmp (NAME, "__builtin_", strlen ("__builtin_")) != 0)	\
! 	abort ();							\
  									\
        if (!BOTH_P)							\
! 	decl = builtin_function (NAME, builtin_types[TYPE], ENUM,	\
  				 CLASS,					\
  				 (FALLBACK_P				\
  				  ? (NAME + strlen ("__builtin_"))	\
--- 3227,3244 ----
  
    c_init_attributes ();
  
! #define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P, \
! 		    NONANSI_P, ATTRS, IMPLICIT, COND)			\
!   if (NAME && COND)							\
      {									\
        tree decl;							\
  									\
!       gcc_assert (!strncmp (NAME, "__builtin_",				\
! 			    strlen ("__builtin_")));			\
  									\
        if (!BOTH_P)							\
! 	decl = lang_hooks.builtin_function (NAME, builtin_types[TYPE],	\
! 				 ENUM,					\
  				 CLASS,					\
  				 (FALLBACK_P				\
  				  ? (NAME + strlen ("__builtin_"))	\
*************** c_common_nodes_and_builtins (void)
*** 3445,3460 ****
  									\
        built_in_decls[(int) ENUM] = decl;				\
        if (IMPLICIT)							\
!         implicit_built_in_decls[(int) ENUM] = decl;			\
      }
  #include "builtins.def"
  #undef DEF_BUILTIN
  
!   (*targetm.init_builtins) ();
  
    main_identifier_node = get_identifier ("main");
  }
  
  tree
  build_va_arg (tree expr, tree type)
  {
--- 3257,3296 ----
  									\
        built_in_decls[(int) ENUM] = decl;				\
        if (IMPLICIT)							\
! 	implicit_built_in_decls[(int) ENUM] = decl;			\
      }
  #include "builtins.def"
  #undef DEF_BUILTIN
  
!   build_common_builtin_nodes ();
! 
!   targetm.init_builtins ();
!   if (flag_mudflap)
!     mudflap_init ();
  
    main_identifier_node = get_identifier ("main");
  }
  
+ /* Look up the function in built_in_decls that corresponds to DECL
+    and set ASMSPEC as its user assembler name.  DECL must be a
+    function decl that declares a builtin. */
+ 
+ void
+ set_builtin_user_assembler_name (tree decl, const char *asmspec)
+ {
+   tree builtin;
+   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
+ 	      && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL
+ 	      && asmspec != 0);
+ 
+   builtin = built_in_decls [DECL_FUNCTION_CODE (decl)];
+   set_user_assembler_name (builtin, asmspec);
+   if (DECL_FUNCTION_CODE (decl) == BUILT_IN_MEMCPY)
+     init_block_move_fn (asmspec);
+   else if (DECL_FUNCTION_CODE (decl) == BUILT_IN_MEMSET)
+     init_block_clear_fn (asmspec);
+ }
+ 
  tree
  build_va_arg (tree expr, tree type)
  {
*************** void
*** 3480,3492 ****
  disable_builtin_function (const char *name)
  {
    if (strncmp (name, "__builtin_", strlen ("__builtin_")) == 0)
!     error ("cannot disable built-in function `%s'", name);
    else
      {
!       disabled_builtin *new = xmalloc (sizeof (disabled_builtin));
!       new->name = name;
!       new->next = disabled_builtins;
!       disabled_builtins = new;
      }
  }
  
--- 3316,3328 ----
  disable_builtin_function (const char *name)
  {
    if (strncmp (name, "__builtin_", strlen ("__builtin_")) == 0)
!     error ("cannot disable built-in function %qs", name);
    else
      {
!       disabled_builtin *new_disabled_builtin = XNEW (disabled_builtin);
!       new_disabled_builtin->name = name;
!       new_disabled_builtin->next = disabled_builtins;
!       disabled_builtins = new_disabled_builtin;
      }
  }
  
*************** builtin_function_disabled_p (const char 
*** 3513,3522 ****
     BUILTIN_TYPE is the type of the __builtin_-prefixed function;
     TYPE is the type of the function with the ordinary name.  These
     may differ if the ordinary name is declared with a looser type to avoid
!    conflicts with headers.  FUNCTION_CODE and CLASS are as for
     builtin_function.  If LIBRARY_NAME_P is nonzero, NAME is passed as
     the LIBRARY_NAME parameter to builtin_function when declaring BUILTIN_NAME.
!    If NONANSI_P is nonzero, the name NAME is treated as a non-ANSI name;
     ATTRS is the tree list representing the builtin's function attributes.
     Returns the declaration of BUILTIN_NAME, if any, otherwise
     the declaration of NAME.  Does not declare NAME if flag_no_builtin,
--- 3349,3358 ----
     BUILTIN_TYPE is the type of the __builtin_-prefixed function;
     TYPE is the type of the function with the ordinary name.  These
     may differ if the ordinary name is declared with a looser type to avoid
!    conflicts with headers.  FUNCTION_CODE and CL are as for
     builtin_function.  If LIBRARY_NAME_P is nonzero, NAME is passed as
     the LIBRARY_NAME parameter to builtin_function when declaring BUILTIN_NAME.
!    If NONANSI_P is true, the name NAME is treated as a non-ANSI name;
     ATTRS is the tree list representing the builtin's function attributes.
     Returns the declaration of BUILTIN_NAME, if any, otherwise
     the declaration of NAME.  Does not declare NAME if flag_no_builtin,
*************** builtin_function_disabled_p (const char 
*** 3524,3543 ****
  
  static tree
  builtin_function_2 (const char *builtin_name, const char *name,
! 		    tree builtin_type, tree type, int function_code,
! 		    enum built_in_class class, int library_name_p,
! 		    int nonansi_p, tree attrs)
  {
    tree bdecl = NULL_TREE;
    tree decl = NULL_TREE;
  
    if (builtin_name != 0)
!     bdecl = builtin_function (builtin_name, builtin_type, function_code,
! 			      class, library_name_p ? name : NULL, attrs);
  
    if (name != 0 && !flag_no_builtin && !builtin_function_disabled_p (name)
        && !(nonansi_p && flag_no_nonansi_builtin))
!     decl = builtin_function (name, type, function_code, class, NULL, attrs);
  
    return (bdecl != 0 ? bdecl : decl);
  }
--- 3360,3382 ----
  
  static tree
  builtin_function_2 (const char *builtin_name, const char *name,
! 		    tree builtin_type, tree type,
! 		    enum built_in_function function_code,
! 		    enum built_in_class cl, int library_name_p,
! 		    bool nonansi_p, tree attrs)
  {
    tree bdecl = NULL_TREE;
    tree decl = NULL_TREE;
  
    if (builtin_name != 0)
!     bdecl = lang_hooks.builtin_function (builtin_name, builtin_type,
! 					 function_code, cl,
! 					 library_name_p ? name : NULL, attrs);
  
    if (name != 0 && !flag_no_builtin && !builtin_function_disabled_p (name)
        && !(nonansi_p && flag_no_nonansi_builtin))
!     decl = lang_hooks.builtin_function (name, type, function_code, cl,
! 					NULL, attrs);
  
    return (bdecl != 0 ? bdecl : decl);
  }
*************** strip_pointer_operator (tree t)
*** 3619,3843 ****
    return t;
  }
  
- static tree expand_unordered_cmp (tree, tree, enum tree_code, enum tree_code);
- 
- /* Expand a call to an unordered comparison function such as
-    __builtin_isgreater().  FUNCTION is the function's declaration and
-    PARAMS a list of the values passed.  For __builtin_isunordered(),
-    UNORDERED_CODE is UNORDERED_EXPR and ORDERED_CODE is NOP_EXPR.  In
-    other cases, UNORDERED_CODE and ORDERED_CODE are comparison codes
-    that give the opposite of the desired result.  UNORDERED_CODE is
-    used for modes that can hold NaNs and ORDERED_CODE is used for the
-    rest.  */
- 
- static tree
- expand_unordered_cmp (tree function, tree params,
- 		      enum tree_code unordered_code,
- 		      enum tree_code ordered_code)
- {
-   tree arg0, arg1, type;
-   enum tree_code code0, code1;
- 
-   /* Check that we have exactly two arguments.  */
-   if (params == 0 || TREE_CHAIN (params) == 0)
-     {
-       error ("too few arguments to function `%s'",
- 	     IDENTIFIER_POINTER (DECL_NAME (function)));
-       return error_mark_node;
-     }
-   else if (TREE_CHAIN (TREE_CHAIN (params)) != 0)
-     {
-       error ("too many arguments to function `%s'",
- 	     IDENTIFIER_POINTER (DECL_NAME (function)));
-       return error_mark_node;
-     }
- 
-   arg0 = TREE_VALUE (params);
-   arg1 = TREE_VALUE (TREE_CHAIN (params));
- 
-   code0 = TREE_CODE (TREE_TYPE (arg0));
-   code1 = TREE_CODE (TREE_TYPE (arg1));
- 
-   /* Make sure that the arguments have a common type of REAL.  */
-   type = 0;
-   if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
-       && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
-     type = common_type (TREE_TYPE (arg0), TREE_TYPE (arg1));
- 
-   if (type == 0 || TREE_CODE (type) != REAL_TYPE)
-     {
-       error ("non-floating-point argument to function `%s'",
- 	     IDENTIFIER_POINTER (DECL_NAME (function)));
-       return error_mark_node;
-     }
- 
-   if (unordered_code == UNORDERED_EXPR)
-     {
-       if (MODE_HAS_NANS (TYPE_MODE (type)))
- 	return build_binary_op (unordered_code,
- 				convert (type, arg0),
- 				convert (type, arg1),
- 				0);
-       else
- 	return integer_zero_node;
-     }
- 
-   return build_unary_op (TRUTH_NOT_EXPR,
- 			 build_binary_op (MODE_HAS_NANS (TYPE_MODE (type))
- 					  ? unordered_code
- 					  : ordered_code,
- 					  convert (type, arg0),
- 					  convert (type, arg1),
- 					  0),
- 			 0);
- }
- 
- 
- /* Recognize certain built-in functions so we can make tree-codes
-    other than CALL_EXPR.  We do this when it enables fold-const.c
-    to do something useful.  */
- /* ??? By rights this should go in builtins.c, but only C and C++
-    implement build_{binary,unary}_op.  Not exactly sure what bits
-    of functionality are actually needed from those functions, or
-    where the similar functionality exists in the other front ends.  */
- 
- tree
- expand_tree_builtin (tree function, tree params, tree coerced_params)
- {
-   if (DECL_BUILT_IN_CLASS (function) != BUILT_IN_NORMAL)
-     return NULL_TREE;
- 
-   switch (DECL_FUNCTION_CODE (function))
-     {
-     case BUILT_IN_ABS:
-     case BUILT_IN_LABS:
-     case BUILT_IN_LLABS:
-     case BUILT_IN_IMAXABS:
-     case BUILT_IN_FABS:
-     case BUILT_IN_FABSL:
-     case BUILT_IN_FABSF:
-       if (coerced_params == 0)
- 	return integer_zero_node;
-       return build_unary_op (ABS_EXPR, TREE_VALUE (coerced_params), 0);
- 
-     case BUILT_IN_CONJ:
-     case BUILT_IN_CONJF:
-     case BUILT_IN_CONJL:
-       if (coerced_params == 0)
- 	return integer_zero_node;
-       return build_unary_op (CONJ_EXPR, TREE_VALUE (coerced_params), 0);
- 
-     case BUILT_IN_CREAL:
-     case BUILT_IN_CREALF:
-     case BUILT_IN_CREALL:
-       if (coerced_params == 0)
- 	return integer_zero_node;
-       return non_lvalue (build_unary_op (REALPART_EXPR,
- 					 TREE_VALUE (coerced_params), 0));
- 
-     case BUILT_IN_CIMAG:
-     case BUILT_IN_CIMAGF:
-     case BUILT_IN_CIMAGL:
-       if (coerced_params == 0)
- 	return integer_zero_node;
-       return non_lvalue (build_unary_op (IMAGPART_EXPR,
- 					 TREE_VALUE (coerced_params), 0));
- 
-     case BUILT_IN_ISGREATER:
-       return expand_unordered_cmp (function, params, UNLE_EXPR, LE_EXPR);
- 
-     case BUILT_IN_ISGREATEREQUAL:
-       return expand_unordered_cmp (function, params, UNLT_EXPR, LT_EXPR);
- 
-     case BUILT_IN_ISLESS:
-       return expand_unordered_cmp (function, params, UNGE_EXPR, GE_EXPR);
- 
-     case BUILT_IN_ISLESSEQUAL:
-       return expand_unordered_cmp (function, params, UNGT_EXPR, GT_EXPR);
- 
-     case BUILT_IN_ISLESSGREATER:
-       return expand_unordered_cmp (function, params, UNEQ_EXPR, EQ_EXPR);
- 
-     case BUILT_IN_ISUNORDERED:
-       return expand_unordered_cmp (function, params, UNORDERED_EXPR, NOP_EXPR);
- 
-     default:
-       break;
-     }
- 
-   return NULL_TREE;
- }
- 
- /* Walk the statement tree, rooted at *tp.  Apply FUNC to all the
-    sub-trees of *TP in a pre-order traversal.  FUNC is called with the
-    DATA and the address of each sub-tree.  If FUNC returns a non-NULL
-    value, the traversal is aborted, and the value returned by FUNC is
-    returned.  If FUNC sets WALK_SUBTREES to zero, then the subtrees of
-    the node being visited are not walked.
- 
-    We don't need a without_duplicates variant of this one because the
-    statement tree is a tree, not a graph.  */
- 
- tree
- walk_stmt_tree (tree *tp, walk_tree_fn func, void *data)
- {
-   enum tree_code code;
-   int walk_subtrees;
-   tree result;
-   int i, len;
- 
- #define WALK_SUBTREE(NODE)				\
-   do							\
-     {							\
-       result = walk_stmt_tree (&(NODE), func, data);	\
-       if (result)					\
- 	return result;					\
-     }							\
-   while (0)
- 
-   /* Skip empty subtrees.  */
-   if (!*tp)
-     return NULL_TREE;
- 
-   /* Skip subtrees below non-statement nodes.  */
-   if (!STATEMENT_CODE_P (TREE_CODE (*tp)))
-     return NULL_TREE;
- 
-   /* Call the function.  */
-   walk_subtrees = 1;
-   result = (*func) (tp, &walk_subtrees, data);
- 
-   /* If we found something, return it.  */
-   if (result)
-     return result;
- 
-   /* FUNC may have modified the tree, recheck that we're looking at a
-      statement node.  */
-   code = TREE_CODE (*tp);
-   if (!STATEMENT_CODE_P (code))
-     return NULL_TREE;
- 
-   /* Visit the subtrees unless FUNC decided that there was nothing
-      interesting below this point in the tree.  */
-   if (walk_subtrees)
-     {
-       /* Walk over all the sub-trees of this operand.  Statement nodes
- 	 never contain RTL, and we needn't worry about TARGET_EXPRs.  */
-       len = TREE_CODE_LENGTH (code);
- 
-       /* Go through the subtrees.  We need to do this in forward order so
- 	 that the scope of a FOR_EXPR is handled properly.  */
-       for (i = 0; i < len; ++i)
- 	WALK_SUBTREE (TREE_OPERAND (*tp, i));
-     }
- 
-   /* Finally visit the chain.  This can be tail-recursion optimized if
-      we write it this way.  */
-   return walk_stmt_tree (&TREE_CHAIN (*tp), func, data);
- 
- #undef WALK_SUBTREE
- }
- 
  /* Used to compare case labels.  K1 and K2 are actually tree nodes
     representing case labels, or NULL_TREE for a `default' label.
     Returns -1 if K1 is ordered before K2, -1 if K1 is ordered after
--- 3458,3463 ----
*************** case_compare (splay_tree_key k1, splay_t
*** 3862,3873 ****
     case label was declared using the usual C/C++ syntax, rather than
     the GNU case range extension.  CASES is a tree containing all the
     case ranges processed so far; COND is the condition for the
!    switch-statement itself.  Returns the CASE_LABEL created, or
!    ERROR_MARK_NODE if no CASE_LABEL is created.  */
  
  tree
! c_add_case_label (splay_tree cases, tree cond, tree low_value,
! 		  tree high_value)
  {
    tree type;
    tree label;
--- 3482,3493 ----
     case label was declared using the usual C/C++ syntax, rather than
     the GNU case range extension.  CASES is a tree containing all the
     case ranges processed so far; COND is the condition for the
!    switch-statement itself.  Returns the CASE_LABEL_EXPR created, or
!    ERROR_MARK_NODE if no CASE_LABEL_EXPR is created.  */
  
  tree
! c_add_case_label (splay_tree cases, tree cond, tree orig_type,
! 		  tree low_value, tree high_value)
  {
    tree type;
    tree label;
*************** c_add_case_label (splay_tree cases, tree
*** 3875,3893 ****
    splay_tree_node node;
  
    /* Create the LABEL_DECL itself.  */
!   label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
!   DECL_CONTEXT (label) = current_function_decl;
  
    /* If there was an error processing the switch condition, bail now
       before we get more confused.  */
    if (!cond || cond == error_mark_node)
!     {
!       /* Add a label anyhow so that the back-end doesn't think that
! 	 the beginning of the switch is unreachable.  */
!       if (!cases->root)
! 	add_stmt (build_case_label (NULL_TREE, NULL_TREE, label));
!       return error_mark_node;
!     }
  
    if ((low_value && TREE_TYPE (low_value)
         && POINTER_TYPE_P (TREE_TYPE (low_value)))
--- 3495,3506 ----
    splay_tree_node node;
  
    /* Create the LABEL_DECL itself.  */
!   label = create_artificial_label ();
  
    /* If there was an error processing the switch condition, bail now
       before we get more confused.  */
    if (!cond || cond == error_mark_node)
!     goto error_out;
  
    if ((low_value && TREE_TYPE (low_value)
         && POINTER_TYPE_P (TREE_TYPE (low_value)))
*************** c_add_case_label (splay_tree cases, tree
*** 3913,3923 ****
  
    /* If an error has occurred, bail out now.  */
    if (low_value == error_mark_node || high_value == error_mark_node)
!     {
!       if (!cases->root)
! 	add_stmt (build_case_label (NULL_TREE, NULL_TREE, label));
!       return error_mark_node;
!     }
  
    /* If the LOW_VALUE and HIGH_VALUE are the same, then this isn't
       really a case range, even though it was written that way.  Remove
--- 3526,3532 ----
  
    /* If an error has occurred, bail out now.  */
    if (low_value == error_mark_node || high_value == error_mark_node)
!     goto error_out;
  
    /* If the LOW_VALUE and HIGH_VALUE are the same, then this isn't
       really a case range, even though it was written that way.  Remove
*************** c_add_case_label (splay_tree cases, tree
*** 3928,3933 ****
--- 3537,3550 ----
        && !tree_int_cst_lt (low_value, high_value))
      warning ("empty range specified");
  
+   /* See if the case is in range of the type of the original testing
+      expression.  If both low_value and high_value are out of range,
+      don't insert the case label and return NULL_TREE.  */
+   if (low_value
+       && !check_case_bounds (type, orig_type,
+ 			     &low_value, high_value ? &high_value : NULL))
+     return NULL_TREE;
+ 
    /* Look up the LOW_VALUE in the table of case labels we already
       have.  */
    node = splay_tree_lookup (cases, (splay_tree_key) low_value);
*************** c_add_case_label (splay_tree cases, tree
*** 3973,3979 ****
    /* If there was an overlap, issue an error.  */
    if (node)
      {
!       tree duplicate = CASE_LABEL_DECL ((tree) node->value);
  
        if (high_value)
  	{
--- 3590,3596 ----
    /* If there was an overlap, issue an error.  */
    if (node)
      {
!       tree duplicate = CASE_LABEL ((tree) node->value);
  
        if (high_value)
  	{
*************** c_add_case_label (splay_tree cases, tree
*** 3990,3997 ****
  	  error ("multiple default labels in one switch");
  	  error ("%Jthis is the first default label", duplicate);
  	}
!       if (!cases->root)
! 	add_stmt (build_case_label (NULL_TREE, NULL_TREE, label));
      }
  
    /* Add a CASE_LABEL to the statement-tree.  */
--- 3607,3613 ----
  	  error ("multiple default labels in one switch");
  	  error ("%Jthis is the first default label", duplicate);
  	}
!       goto error_out;
      }
  
    /* Add a CASE_LABEL to the statement-tree.  */
*************** c_add_case_label (splay_tree cases, tree
*** 4002,4007 ****
--- 3618,3779 ----
  		     (splay_tree_value) case_label);
  
    return case_label;
+ 
+  error_out:
+   /* Add a label so that the back-end doesn't think that the beginning of
+      the switch is unreachable.  Note that we do not add a case label, as
+      that just leads to duplicates and thence to aborts later on.  */
+   if (!cases->root)
+     {
+       tree t = create_artificial_label ();
+       add_stmt (build_stmt (LABEL_EXPR, t));
+     }
+   return error_mark_node;
+ }
+ 
+ /* Subroutines of c_do_switch_warnings, called via splay_tree_foreach.
+    Used to verify that case values match up with enumerator values.  */
+ 
+ static void
+ match_case_to_enum_1 (tree key, tree type, tree label)
+ {
+   char buf[2 + 2*HOST_BITS_PER_WIDE_INT/4 + 1];
+ 
+   /* ??? Not working too hard to print the double-word value.
+      Should perhaps be done with %lwd in the diagnostic routines?  */
+   if (TREE_INT_CST_HIGH (key) == 0)
+     snprintf (buf, sizeof (buf), HOST_WIDE_INT_PRINT_UNSIGNED,
+ 	      TREE_INT_CST_LOW (key));
+   else if (!TYPE_UNSIGNED (type)
+ 	   && TREE_INT_CST_HIGH (key) == -1
+ 	   && TREE_INT_CST_LOW (key) != 0)
+     snprintf (buf, sizeof (buf), "-" HOST_WIDE_INT_PRINT_UNSIGNED,
+ 	      -TREE_INT_CST_LOW (key));
+   else
+     snprintf (buf, sizeof (buf), HOST_WIDE_INT_PRINT_DOUBLE_HEX,
+ 	      TREE_INT_CST_HIGH (key), TREE_INT_CST_LOW (key));
+ 
+   if (TYPE_NAME (type) == 0)
+     warning ("%Jcase value %qs not in enumerated type",
+ 	     CASE_LABEL (label), buf);
+   else
+     warning ("%Jcase value %qs not in enumerated type %qT",
+ 	     CASE_LABEL (label), buf, type);
+ }
+ 
+ static int
+ match_case_to_enum (splay_tree_node node, void *data)
+ {
+   tree label = (tree) node->value;
+   tree type = (tree) data;
+ 
+   /* Skip default case.  */
+   if (!CASE_LOW (label))
+     return 0;
+ 
+   /* If TREE_ADDRESSABLE is not set, that means CASE_LOW did not appear
+      when we did our enum->case scan.  Reset our scratch bit after.  */
+   if (!TREE_ADDRESSABLE (label))
+     match_case_to_enum_1 (CASE_LOW (label), type, label);
+   else
+     TREE_ADDRESSABLE (label) = 0;
+ 
+   /* If CASE_HIGH is non-null, we have a range.  Here we must search.
+      Note that the old code in stmt.c did not check for the values in
+      the range either, just the endpoints.  */
+   if (CASE_HIGH (label))
+     {
+       tree chain, key = CASE_HIGH (label);
+ 
+       for (chain = TYPE_VALUES (type);
+ 	   chain && !tree_int_cst_equal (key, TREE_VALUE (chain));
+ 	   chain = TREE_CHAIN (chain))
+ 	continue;
+       if (!chain)
+ 	match_case_to_enum_1 (key, type, label);
+     }
+ 
+   return 0;
+ }
+ 
+ /* Handle -Wswitch*.  Called from the front end after parsing the switch
+    construct.  */
+ /* ??? Should probably be somewhere generic, since other languages besides
+    C and C++ would want this.  We'd want to agree on the datastructure,
+    however, which is a problem.  Alternately, we operate on gimplified
+    switch_exprs, which I don't especially like.  At the moment, however,
+    C/C++ are the only tree-ssa languages that support enumerations at all,
+    so the point is moot.  */
+ 
+ void
+ c_do_switch_warnings (splay_tree cases, tree switch_stmt)
+ {
+   splay_tree_node default_node;
+   location_t switch_location;
+   tree type;
+ 
+   if (!warn_switch && !warn_switch_enum && !warn_switch_default)
+     return;
+ 
+   if (EXPR_HAS_LOCATION (switch_stmt))
+     switch_location = EXPR_LOCATION (switch_stmt);
+   else
+     switch_location = input_location;
+ 
+   type = SWITCH_STMT_TYPE (switch_stmt);
+ 
+   default_node = splay_tree_lookup (cases, (splay_tree_key) NULL);
+   if (warn_switch_default && !default_node)
+     warning ("%Hswitch missing default case", &switch_location);
+ 
+   /* If the switch expression was an enumerated type, check that
+      exactly all enumeration literals are covered by the cases.
+      The check is made when -Wswitch was specified and there is no
+      default case, or when -Wswitch-enum was specified.  */
+   if (((warn_switch && !default_node) || warn_switch_enum)
+       && type && TREE_CODE (type) == ENUMERAL_TYPE
+       && TREE_CODE (SWITCH_STMT_COND (switch_stmt)) != INTEGER_CST)
+     {
+       tree chain;
+ 
+       /* The time complexity here is O(N*lg(N)) worst case, but for the
+ 	 common case of monotonically increasing enumerators, it is
+ 	 O(N), since the nature of the splay tree will keep the next
+ 	 element adjacent to the root at all times.  */
+ 
+       for (chain = TYPE_VALUES (type); chain; chain = TREE_CHAIN (chain))
+ 	{
+ 	  splay_tree_node node
+ 	    = splay_tree_lookup (cases, (splay_tree_key) TREE_VALUE (chain));
+ 
+ 	  if (node)
+ 	    {
+ 	      /* Mark the CASE_LOW part of the case entry as seen, so
+ 		 that we save time later.  Choose TREE_ADDRESSABLE
+ 		 randomly as a bit that won't have been set to-date.  */
+ 	      tree label = (tree) node->value;
+ 	      TREE_ADDRESSABLE (label) = 1;
+ 	    }
+ 	  else
+ 	    {
+ 	      /* Warn if there are enumerators that don't correspond to
+ 		 case expressions.  */
+ 	      warning ("%Henumeration value %qE not handled in switch",
+ 		       &switch_location, TREE_PURPOSE (chain));
+ 	    }
+ 	}
+ 
+       /* Warn if there are case expressions that don't correspond to
+ 	 enumerators.  This can occur since C and C++ don't enforce
+ 	 type-checking of assignments to enumeration variables.
+ 
+ 	 The time complexity here is O(N**2) worst case, since we've
+ 	 not sorted the enumeration values.  However, in the absence
+ 	 of case ranges this is O(N), since all single cases that
+ 	 corresponded to enumerations have been marked above.  */
+ 
+       splay_tree_foreach (cases, match_case_to_enum, type);
+     }
  }
  
  /* Finish an expression taking the address of LABEL (an
*************** finish_label_address_expr (tree label)
*** 4025,4031 ****
      {
        TREE_USED (label) = 1;
        result = build1 (ADDR_EXPR, ptr_type_node, label);
-       TREE_CONSTANT (result) = 1;
        /* The current function in not necessarily uninlinable.
  	 Computed gotos are incompatible with inlining, but the value
  	 here could be used only in a diagnostic, for example.  */
--- 3797,3802 ----
*************** finish_label_address_expr (tree label)
*** 4035,4130 ****
  }
  
  /* Hook used by expand_expr to expand language-specific tree codes.  */
  
  rtx
! c_expand_expr (tree exp, rtx target, enum machine_mode tmode, 
  	       int modifier /* Actually enum_modifier.  */,
  	       rtx *alt_rtl)
  {
    switch (TREE_CODE (exp))
      {
-     case STMT_EXPR:
-       {
- 	tree rtl_expr;
- 	rtx result;
- 	bool preserve_result = false;
- 
- 	if (STMT_EXPR_WARN_UNUSED_RESULT (exp) && target == const0_rtx)
- 	  {
- 	    tree stmt = STMT_EXPR_STMT (exp);
- 	    tree scope;
- 
- 	    for (scope = COMPOUND_BODY (stmt);
- 		 scope && TREE_CODE (scope) != SCOPE_STMT;
- 		 scope = TREE_CHAIN (scope));
- 
- 	    if (scope && SCOPE_STMT_BLOCK (scope))
- 	      warning ("%Hignoring return value of `%D', "
- 		       "declared with attribute warn_unused_result",
- 		       &expr_wfl_stack->location,
- 		       BLOCK_ABSTRACT_ORIGIN (SCOPE_STMT_BLOCK (scope)));
- 	    else
- 	      warning ("%Hignoring return value of function "
- 		       "declared with attribute warn_unused_result",
- 		       &expr_wfl_stack->location);
- 	  }
- 
- 	/* Since expand_expr_stmt calls free_temp_slots after every
- 	   expression statement, we must call push_temp_slots here.
- 	   Otherwise, any temporaries in use now would be considered
- 	   out-of-scope after the first EXPR_STMT from within the
- 	   STMT_EXPR.  */
- 	push_temp_slots ();
- 	rtl_expr = expand_start_stmt_expr (!STMT_EXPR_NO_SCOPE (exp));
- 
- 	/* If we want the result of this expression, find the last
-            EXPR_STMT in the COMPOUND_STMT and mark it as addressable.  */
- 	if (target != const0_rtx
- 	    && TREE_CODE (STMT_EXPR_STMT (exp)) == COMPOUND_STMT
- 	    && TREE_CODE (COMPOUND_BODY (STMT_EXPR_STMT (exp))) == SCOPE_STMT)
- 	  {
- 	    tree expr = COMPOUND_BODY (STMT_EXPR_STMT (exp));
- 	    tree last = TREE_CHAIN (expr);
- 
- 	    while (TREE_CHAIN (last))
- 	      {
- 		expr = last;
- 		last = TREE_CHAIN (last);
- 	      }
- 
- 	    if (TREE_CODE (last) == SCOPE_STMT
- 		&& TREE_CODE (expr) == EXPR_STMT)
- 	      {
- 		/* Otherwise, note that we want the value from the last
- 		   expression.  */
- 		TREE_ADDRESSABLE (expr) = 1;
- 		preserve_result = true;
- 	      }
- 	  }
- 
- 	expand_stmt (STMT_EXPR_STMT (exp));
- 	expand_end_stmt_expr (rtl_expr);
- 
- 	result = expand_expr_real (rtl_expr, target, tmode, modifier, alt_rtl);
- 	if (preserve_result && GET_CODE (result) == MEM)
- 	  {
- 	    if (GET_MODE (result) != BLKmode)
- 	      result = copy_to_reg (result);
- 	    else
- 	      preserve_temp_slots (result);
- 	  }
- 
- 	/* If the statment-expression does not have a scope, then the
- 	   new temporaries we created within it must live beyond the
- 	   statement-expression.  */
- 	if (STMT_EXPR_NO_SCOPE (exp))
- 	  preserve_temp_slots (NULL_RTX);
- 
- 	pop_temp_slots ();
- 	return result;
-       }
-       break;
- 
      case COMPOUND_LITERAL_EXPR:
        {
  	/* Initialize the anonymous variable declared in the compound
--- 3806,3822 ----
  }
  
  /* Hook used by expand_expr to expand language-specific tree codes.  */
+ /* The only things that should go here are bits needed to expand
+    constant initializers.  Everything else should be handled by the
+    gimplification routines.  */
  
  rtx
! c_expand_expr (tree exp, rtx target, enum machine_mode tmode,
  	       int modifier /* Actually enum_modifier.  */,
  	       rtx *alt_rtl)
  {
    switch (TREE_CODE (exp))
      {
      case COMPOUND_LITERAL_EXPR:
        {
  	/* Initialize the anonymous variable declared in the compound
*************** c_expand_expr (tree exp, rtx target, enu
*** 4135,4197 ****
        }
  
      default:
!       abort ();
!     }
! 
!   abort ();
!   return NULL;
! }
! 
! /* Hook used by safe_from_p to handle language-specific tree codes.  */
! 
! int
! c_safe_from_p (rtx target, tree exp)
! {
!   /* We can see statements here when processing the body of a
!      statement-expression.  For a declaration statement declaring a
!      variable, look at the variable's initializer.  */
!   if (TREE_CODE (exp) == DECL_STMT)
!     {
!       tree decl = DECL_STMT_DECL (exp);
! 
!       if (TREE_CODE (decl) == VAR_DECL
! 	  && DECL_INITIAL (decl)
! 	  && !safe_from_p (target, DECL_INITIAL (decl), /*top_p=*/0))
! 	return 0;
      }
- 
-   /* For any statement, we must follow the statement-chain.  */
-   if (STATEMENT_CODE_P (TREE_CODE (exp)) && TREE_CHAIN (exp))
-     return safe_from_p (target, TREE_CHAIN (exp), /*top_p=*/0);
- 
-   /* Assume everything else is safe.  */
-   return 1;
- }
- 
- /* Hook used by unsafe_for_reeval to handle language-specific tree codes.  */
- 
- int
- c_common_unsafe_for_reeval (tree exp)
- {
-   /* Statement expressions may not be reevaluated, likewise compound
-      literals.  */
-   if (TREE_CODE (exp) == STMT_EXPR
-       || TREE_CODE (exp) == COMPOUND_LITERAL_EXPR)
-     return 2;
- 
-   /* Walk all other expressions.  */
-   return -1;
  }
  
  /* Hook used by staticp to handle language-specific tree codes.  */
  
! int
  c_staticp (tree exp)
  {
!   if (TREE_CODE (exp) == COMPOUND_LITERAL_EXPR
!       && TREE_STATIC (COMPOUND_LITERAL_EXPR_DECL (exp)))
!     return 1;
!   return 0;
  }
  
  
--- 3827,3844 ----
        }
  
      default:
!       gcc_unreachable ();
      }
  }
  
  /* Hook used by staticp to handle language-specific tree codes.  */
  
! tree
  c_staticp (tree exp)
  {
!   return (TREE_CODE (exp) == COMPOUND_LITERAL_EXPR
! 	  && TREE_STATIC (COMPOUND_LITERAL_EXPR_DECL (exp))
! 	  ? exp : NULL);
  }
  
  
*************** boolean_increment (enum tree_code code, 
*** 4208,4232 ****
    switch (code)
      {
      case PREINCREMENT_EXPR:
!       val = build (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
        break;
      case POSTINCREMENT_EXPR:
!       val = build (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
        arg = save_expr (arg);
!       val = build (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
!       val = build (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
        break;
      case PREDECREMENT_EXPR:
!       val = build (MODIFY_EXPR, TREE_TYPE (arg), arg, invert_truthvalue (arg));
        break;
      case POSTDECREMENT_EXPR:
!       val = build (MODIFY_EXPR, TREE_TYPE (arg), arg, invert_truthvalue (arg));
        arg = save_expr (arg);
!       val = build (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
!       val = build (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
        break;
      default:
!       abort ();
      }
    TREE_SIDE_EFFECTS (val) = 1;
    return val;
--- 3855,3881 ----
    switch (code)
      {
      case PREINCREMENT_EXPR:
!       val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
        break;
      case POSTINCREMENT_EXPR:
!       val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
        arg = save_expr (arg);
!       val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
!       val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
        break;
      case PREDECREMENT_EXPR:
!       val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg,
! 		    invert_truthvalue (arg));
        break;
      case POSTDECREMENT_EXPR:
!       val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg,
! 		    invert_truthvalue (arg));
        arg = save_expr (arg);
!       val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
!       val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
        break;
      default:
!       gcc_unreachable ();
      }
    TREE_SIDE_EFFECTS (val) = 1;
    return val;
*************** c_stddef_cpp_builtins(void)
*** 4241,4256 ****
    builtin_define_with_value ("__PTRDIFF_TYPE__", PTRDIFF_TYPE, 0);
    builtin_define_with_value ("__WCHAR_TYPE__", MODIFIED_WCHAR_TYPE, 0);
    builtin_define_with_value ("__WINT_TYPE__", WINT_TYPE, 0);
  }
  
  static void
  c_init_attributes (void)
  {
    /* Fill in the built_in_attributes array.  */
! #define DEF_ATTR_NULL_TREE(ENUM)		\
    built_in_attributes[(int) ENUM] = NULL_TREE;
! #define DEF_ATTR_INT(ENUM, VALUE)					     \
!   built_in_attributes[(int) ENUM] = build_int_2 (VALUE, VALUE < 0 ? -1 : 0);
  #define DEF_ATTR_IDENT(ENUM, STRING)				\
    built_in_attributes[(int) ENUM] = get_identifier (STRING);
  #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN)	\
--- 3890,3907 ----
    builtin_define_with_value ("__PTRDIFF_TYPE__", PTRDIFF_TYPE, 0);
    builtin_define_with_value ("__WCHAR_TYPE__", MODIFIED_WCHAR_TYPE, 0);
    builtin_define_with_value ("__WINT_TYPE__", WINT_TYPE, 0);
+   builtin_define_with_value ("__INTMAX_TYPE__", INTMAX_TYPE, 0);
+   builtin_define_with_value ("__UINTMAX_TYPE__", UINTMAX_TYPE, 0);
  }
  
  static void
  c_init_attributes (void)
  {
    /* Fill in the built_in_attributes array.  */
! #define DEF_ATTR_NULL_TREE(ENUM)				\
    built_in_attributes[(int) ENUM] = NULL_TREE;
! #define DEF_ATTR_INT(ENUM, VALUE)				\
!   built_in_attributes[(int) ENUM] = build_int_cst (NULL_TREE, VALUE);
  #define DEF_ATTR_IDENT(ENUM, STRING)				\
    built_in_attributes[(int) ENUM] = get_identifier (STRING);
  #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN)	\
*************** c_init_attributes (void)
*** 4271,4299 ****
     struct attribute_spec.handler.  */
  
  static tree
! handle_packed_attribute (tree *node, tree name, tree args  ATTRIBUTE_UNUSED,
  			 int flags, bool *no_add_attrs)
  {
    if (TYPE_P (*node))
      {
        if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
! 	*node = build_type_copy (*node);
        TYPE_PACKED (*node) = 1;
        if (TYPE_MAIN_VARIANT (*node) == *node)
  	{
  	  /* If it is the main variant, then pack the other variants
     	     too. This happens in,
! 	     
  	     struct Foo {
  	       struct Foo const *ptr; // creates a variant w/o packed flag
  	       } __ attribute__((packed)); // packs it now.
  	  */
  	  tree probe;
! 	  
  	  for (probe = *node; probe; probe = TYPE_NEXT_VARIANT (probe))
  	    TYPE_PACKED (probe) = 1;
  	}
!       
      }
    else if (TREE_CODE (*node) == FIELD_DECL)
      DECL_PACKED (*node) = 1;
--- 3922,3950 ----
     struct attribute_spec.handler.  */
  
  static tree
! handle_packed_attribute (tree *node, tree name, tree ARG_UNUSED (args),
  			 int flags, bool *no_add_attrs)
  {
    if (TYPE_P (*node))
      {
        if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
! 	*node = build_variant_type_copy (*node);
        TYPE_PACKED (*node) = 1;
        if (TYPE_MAIN_VARIANT (*node) == *node)
  	{
  	  /* If it is the main variant, then pack the other variants
     	     too. This happens in,
! 
  	     struct Foo {
  	       struct Foo const *ptr; // creates a variant w/o packed flag
  	       } __ attribute__((packed)); // packs it now.
  	  */
  	  tree probe;
! 
  	  for (probe = *node; probe; probe = TYPE_NEXT_VARIANT (probe))
  	    TYPE_PACKED (probe) = 1;
  	}
! 
      }
    else if (TREE_CODE (*node) == FIELD_DECL)
      DECL_PACKED (*node) = 1;
*************** handle_packed_attribute (tree *node, tre
*** 4303,4309 ****
       that changes what the typedef is typing.  */
    else
      {
!       warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
        *no_add_attrs = true;
      }
  
--- 3954,3960 ----
       that changes what the typedef is typing.  */
    else
      {
!       warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
        *no_add_attrs = true;
      }
  
*************** handle_packed_attribute (tree *node, tre
*** 4315,4328 ****
  
  static tree
  handle_nocommon_attribute (tree *node, tree name,
! 			   tree args ATTRIBUTE_UNUSED,
! 			   int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
  {
    if (TREE_CODE (*node) == VAR_DECL)
      DECL_COMMON (*node) = 0;
    else
      {
!       warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
        *no_add_attrs = true;
      }
  
--- 3966,3979 ----
  
  static tree
  handle_nocommon_attribute (tree *node, tree name,
! 			   tree ARG_UNUSED (args),
! 			   int ARG_UNUSED (flags), bool *no_add_attrs)
  {
    if (TREE_CODE (*node) == VAR_DECL)
      DECL_COMMON (*node) = 0;
    else
      {
!       warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
        *no_add_attrs = true;
      }
  
*************** handle_nocommon_attribute (tree *node, t
*** 4333,4346 ****
     struct attribute_spec.handler.  */
  
  static tree
! handle_common_attribute (tree *node, tree name, tree args ATTRIBUTE_UNUSED,
! 			 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
  {
    if (TREE_CODE (*node) == VAR_DECL)
      DECL_COMMON (*node) = 1;
    else
      {
!       warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
        *no_add_attrs = true;
      }
  
--- 3984,3997 ----
     struct attribute_spec.handler.  */
  
  static tree
! handle_common_attribute (tree *node, tree name, tree ARG_UNUSED (args),
! 			 int ARG_UNUSED (flags), bool *no_add_attrs)
  {
    if (TREE_CODE (*node) == VAR_DECL)
      DECL_COMMON (*node) = 1;
    else
      {
!       warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
        *no_add_attrs = true;
      }
  
*************** handle_common_attribute (tree *node, tre
*** 4351,4358 ****
     struct attribute_spec.handler.  */
  
  static tree
! handle_noreturn_attribute (tree *node, tree name, tree args ATTRIBUTE_UNUSED,
! 			   int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
  {
    tree type = TREE_TYPE (*node);
  
--- 4002,4009 ----
     struct attribute_spec.handler.  */
  
  static tree
! handle_noreturn_attribute (tree *node, tree name, tree ARG_UNUSED (args),
! 			   int ARG_UNUSED (flags), bool *no_add_attrs)
  {
    tree type = TREE_TYPE (*node);
  
*************** handle_noreturn_attribute (tree *node, t
*** 4364,4373 ****
      TREE_TYPE (*node)
        = build_pointer_type
  	(build_type_variant (TREE_TYPE (type),
! 			     TREE_READONLY (TREE_TYPE (type)), 1));
    else
      {
!       warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
        *no_add_attrs = true;
      }
  
--- 4015,4024 ----
      TREE_TYPE (*node)
        = build_pointer_type
  	(build_type_variant (TREE_TYPE (type),
! 			     TYPE_READONLY (TREE_TYPE (type)), 1));
    else
      {
!       warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
        *no_add_attrs = true;
      }
  
*************** handle_noreturn_attribute (tree *node, t
*** 4379,4392 ****
  
  static tree
  handle_noinline_attribute (tree *node, tree name,
! 			   tree args ATTRIBUTE_UNUSED,
! 			   int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
  {
    if (TREE_CODE (*node) == FUNCTION_DECL)
      DECL_UNINLINABLE (*node) = 1;
    else
      {
!       warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
        *no_add_attrs = true;
      }
  
--- 4030,4043 ----
  
  static tree
  handle_noinline_attribute (tree *node, tree name,
! 			   tree ARG_UNUSED (args),
! 			   int ARG_UNUSED (flags), bool *no_add_attrs)
  {
    if (TREE_CODE (*node) == FUNCTION_DECL)
      DECL_UNINLINABLE (*node) = 1;
    else
      {
!       warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
        *no_add_attrs = true;
      }
  
*************** handle_noinline_attribute (tree *node, t
*** 4398,4405 ****
  
  static tree
  handle_always_inline_attribute (tree *node, tree name,
! 				tree args ATTRIBUTE_UNUSED,
! 				int flags ATTRIBUTE_UNUSED,
  				bool *no_add_attrs)
  {
    if (TREE_CODE (*node) == FUNCTION_DECL)
--- 4049,4056 ----
  
  static tree
  handle_always_inline_attribute (tree *node, tree name,
! 				tree ARG_UNUSED (args),
! 				int ARG_UNUSED (flags),
  				bool *no_add_attrs)
  {
    if (TREE_CODE (*node) == FUNCTION_DECL)
*************** handle_always_inline_attribute (tree *no
*** 4409,4415 ****
      }
    else
      {
!       warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
        *no_add_attrs = true;
      }
  
--- 4060,4066 ----
      }
    else
      {
!       warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
        *no_add_attrs = true;
      }
  
*************** handle_always_inline_attribute (tree *no
*** 4420,4427 ****
     struct attribute_spec.handler.  */
  
  static tree
! handle_used_attribute (tree *pnode, tree name, tree args ATTRIBUTE_UNUSED,
! 		       int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
  {
    tree node = *pnode;
  
--- 4071,4078 ----
     struct attribute_spec.handler.  */
  
  static tree
! handle_used_attribute (tree *pnode, tree name, tree ARG_UNUSED (args),
! 		       int ARG_UNUSED (flags), bool *no_add_attrs)
  {
    tree node = *pnode;
  
*************** handle_used_attribute (tree *pnode, tree
*** 4429,4438 ****
        || (TREE_CODE (node) == VAR_DECL && TREE_STATIC (node)))
      {
        TREE_USED (node) = 1;
      }
    else
      {
!       warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
        *no_add_attrs = true;
      }
  
--- 4080,4090 ----
        || (TREE_CODE (node) == VAR_DECL && TREE_STATIC (node)))
      {
        TREE_USED (node) = 1;
+       DECL_PRESERVE_P (node) = 1;
      }
    else
      {
!       warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
        *no_add_attrs = true;
      }
  
*************** handle_used_attribute (tree *pnode, tree
*** 4443,4450 ****
     struct attribute_spec.handler.  */
  
  static tree
! handle_unused_attribute (tree *node, tree name, tree args ATTRIBUTE_UNUSED,
! 			 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
  {
    if (DECL_P (*node))
      {
--- 4095,4102 ----
     struct attribute_spec.handler.  */
  
  static tree
! handle_unused_attribute (tree *node, tree name, tree ARG_UNUSED (args),
! 			 int flags, bool *no_add_attrs)
  {
    if (DECL_P (*node))
      {
*************** handle_unused_attribute (tree *node, tre
*** 4458,4471 ****
  	TREE_USED (decl) = 1;
        else
  	{
! 	  warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
  	  *no_add_attrs = true;
  	}
      }
    else
      {
        if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
! 	*node = build_type_copy (*node);
        TREE_USED (*node) = 1;
      }
  
--- 4110,4123 ----
  	TREE_USED (decl) = 1;
        else
  	{
! 	  warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
  	  *no_add_attrs = true;
  	}
      }
    else
      {
        if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
! 	*node = build_variant_type_copy (*node);
        TREE_USED (*node) = 1;
      }
  
*************** handle_unused_attribute (tree *node, tre
*** 4476,4483 ****
     struct attribute_spec.handler.  */
  
  static tree
! handle_const_attribute (tree *node, tree name, tree args ATTRIBUTE_UNUSED,
! 			int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
  {
    tree type = TREE_TYPE (*node);
  
--- 4128,4135 ----
     struct attribute_spec.handler.  */
  
  static tree
! handle_const_attribute (tree *node, tree name, tree ARG_UNUSED (args),
! 			int ARG_UNUSED (flags), bool *no_add_attrs)
  {
    tree type = TREE_TYPE (*node);
  
*************** handle_const_attribute (tree *node, tree
*** 4492,4498 ****
  			     TREE_THIS_VOLATILE (TREE_TYPE (type))));
    else
      {
!       warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
        *no_add_attrs = true;
      }
  
--- 4144,4150 ----
  			     TREE_THIS_VOLATILE (TREE_TYPE (type))));
    else
      {
!       warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
        *no_add_attrs = true;
      }
  
*************** handle_const_attribute (tree *node, tree
*** 4504,4510 ****
  
  static tree
  handle_transparent_union_attribute (tree *node, tree name,
! 				    tree args ATTRIBUTE_UNUSED, int flags,
  				    bool *no_add_attrs)
  {
    tree decl = NULL_TREE;
--- 4156,4162 ----
  
  static tree
  handle_transparent_union_attribute (tree *node, tree name,
! 				    tree ARG_UNUSED (args), int flags,
  				    bool *no_add_attrs)
  {
    tree decl = NULL_TREE;
*************** handle_transparent_union_attribute (tree
*** 4527,4533 ****
  	      && TYPE_MODE (*type) == DECL_MODE (TYPE_FIELDS (*type)))))
      {
        if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
! 	*type = build_type_copy (*type);
        TYPE_TRANSPARENT_UNION (*type) = 1;
      }
    else if (decl != 0 && TREE_CODE (decl) == PARM_DECL
--- 4179,4185 ----
  	      && TYPE_MODE (*type) == DECL_MODE (TYPE_FIELDS (*type)))))
      {
        if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
! 	*type = build_variant_type_copy (*type);
        TYPE_TRANSPARENT_UNION (*type) = 1;
      }
    else if (decl != 0 && TREE_CODE (decl) == PARM_DECL
*************** handle_transparent_union_attribute (tree
*** 4536,4542 ****
      DECL_TRANSPARENT_UNION (decl) = 1;
    else
      {
!       warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
        *no_add_attrs = true;
      }
  
--- 4188,4194 ----
      DECL_TRANSPARENT_UNION (decl) = 1;
    else
      {
!       warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
        *no_add_attrs = true;
      }
  
*************** handle_transparent_union_attribute (tree
*** 4548,4555 ****
  
  static tree
  handle_constructor_attribute (tree *node, tree name,
! 			      tree args ATTRIBUTE_UNUSED,
! 			      int flags ATTRIBUTE_UNUSED,
  			      bool *no_add_attrs)
  {
    tree decl = *node;
--- 4200,4207 ----
  
  static tree
  handle_constructor_attribute (tree *node, tree name,
! 			      tree ARG_UNUSED (args),
! 			      int ARG_UNUSED (flags),
  			      bool *no_add_attrs)
  {
    tree decl = *node;
*************** handle_constructor_attribute (tree *node
*** 4564,4570 ****
      }
    else
      {
!       warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
        *no_add_attrs = true;
      }
  
--- 4216,4222 ----
      }
    else
      {
!       warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
        *no_add_attrs = true;
      }
  
*************** handle_constructor_attribute (tree *node
*** 4576,4583 ****
  
  static tree
  handle_destructor_attribute (tree *node, tree name,
! 			     tree args ATTRIBUTE_UNUSED,
! 			     int flags ATTRIBUTE_UNUSED,
  			     bool *no_add_attrs)
  {
    tree decl = *node;
--- 4228,4235 ----
  
  static tree
  handle_destructor_attribute (tree *node, tree name,
! 			     tree ARG_UNUSED (args),
! 			     int ARG_UNUSED (flags),
  			     bool *no_add_attrs)
  {
    tree decl = *node;
*************** handle_destructor_attribute (tree *node,
*** 4592,4598 ****
      }
    else
      {
!       warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
        *no_add_attrs = true;
      }
  
--- 4244,4250 ----
      }
    else
      {
!       warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
        *no_add_attrs = true;
      }
  
*************** handle_destructor_attribute (tree *node,
*** 4603,4617 ****
     struct attribute_spec.handler.  */
  
  static tree
! handle_mode_attribute (tree *node, tree name, tree args ATTRIBUTE_UNUSED,
! 		       int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
  {
    tree type = *node;
  
    *no_add_attrs = true;
  
    if (TREE_CODE (TREE_VALUE (args)) != IDENTIFIER_NODE)
!     warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
    else
      {
        int j;
--- 4255,4269 ----
     struct attribute_spec.handler.  */
  
  static tree
! handle_mode_attribute (tree *node, tree name, tree args,
! 		       int ARG_UNUSED (flags), bool *no_add_attrs)
  {
    tree type = *node;
  
    *no_add_attrs = true;
  
    if (TREE_CODE (TREE_VALUE (args)) != IDENTIFIER_NODE)
!     warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
    else
      {
        int j;
*************** handle_mode_attribute (tree *node, tree 
*** 4619,4630 ****
        int len = strlen (p);
        enum machine_mode mode = VOIDmode;
        tree typefm;
!       tree ptr_type;
  
        if (len > 4 && p[0] == '_' && p[1] == '_'
  	  && p[len - 1] == '_' && p[len - 2] == '_')
  	{
! 	  char *newp = alloca (len - 1);
  
  	  strcpy (newp, &p[2]);
  	  newp[len - 4] = '\0';
--- 4271,4282 ----
        int len = strlen (p);
        enum machine_mode mode = VOIDmode;
        tree typefm;
!       bool valid_mode;
  
        if (len > 4 && p[0] == '_' && p[1] == '_'
  	  && p[len - 1] == '_' && p[len - 2] == '_')
  	{
! 	  char *newp = (char *) alloca (len - 1);
  
  	  strcpy (newp, &p[2]);
  	  newp[len - 4] = '\0';
*************** handle_mode_attribute (tree *node, tree 
*** 4633,4643 ****
  
        /* Change this type to have a type with the specified mode.
  	 First check for the special modes.  */
!       if (! strcmp (p, "byte"))
  	mode = byte_mode;
        else if (!strcmp (p, "word"))
  	mode = word_mode;
!       else if (! strcmp (p, "pointer"))
  	mode = ptr_mode;
        else
  	for (j = 0; j < NUM_MACHINE_MODES; j++)
--- 4285,4295 ----
  
        /* Change this type to have a type with the specified mode.
  	 First check for the special modes.  */
!       if (!strcmp (p, "byte"))
  	mode = byte_mode;
        else if (!strcmp (p, "word"))
  	mode = word_mode;
!       else if (!strcmp (p, "pointer"))
  	mode = ptr_mode;
        else
  	for (j = 0; j < NUM_MACHINE_MODES; j++)
*************** handle_mode_attribute (tree *node, tree 
*** 4648,4696 ****
  	    }
  
        if (mode == VOIDmode)
- 	error ("unknown machine mode `%s'", p);
-       else if (0 == (typefm = (*lang_hooks.types.type_for_mode)
- 		     (mode, TREE_UNSIGNED (type))))
- 	error ("no data type for mode `%s'", p);
-       else if ((TREE_CODE (type) == POINTER_TYPE
- 		|| TREE_CODE (type) == REFERENCE_TYPE)
- 	       && !(*targetm.valid_pointer_mode) (mode))
- 	error ("invalid pointer mode `%s'", p);
-       else
  	{
! 	  /* If this is a vector, make sure we either have hardware
! 	     support, or we can emulate it.  */
! 	  if (VECTOR_MODE_P (mode) && !vector_mode_valid_p (mode))
  	    {
! 	      error ("unable to emulate '%s'", GET_MODE_NAME (mode));
  	      return NULL_TREE;
  	    }
  
! 	  if (TREE_CODE (type) == POINTER_TYPE)
! 	    {
! 	      ptr_type = build_pointer_type_for_mode (TREE_TYPE (type),
! 						      mode);
! 	      *node = ptr_type;
! 	    }
! 	  else if (TREE_CODE (type) == REFERENCE_TYPE)
! 	    {
! 	      ptr_type = build_reference_type_for_mode (TREE_TYPE (type),
! 							mode);
! 	      *node = ptr_type;
! 	    }
! 	  else if (VECTOR_MODE_P (mode)
! 		   ? TREE_CODE (type) != TREE_CODE (TREE_TYPE (typefm))
! 		   : TREE_CODE (type) != TREE_CODE (typefm))
! 		   
  	    {
! 	      error ("mode `%s' applied to inappropriate type", p);
  	      return NULL_TREE;
  	    }
- 	  else
- 	    *node = typefm;
  
! 	  /* No need to layout the type here.  The caller should do this.  */
  	}
      }
  
    return NULL_TREE;
--- 4300,4401 ----
  	    }
  
        if (mode == VOIDmode)
  	{
! 	  error ("unknown machine mode %qs", p);
! 	  return NULL_TREE;
! 	}
! 
!       valid_mode = false;
!       switch (GET_MODE_CLASS (mode))
! 	{
! 	case MODE_INT:
! 	case MODE_PARTIAL_INT:
! 	case MODE_FLOAT:
! 	  valid_mode = targetm.scalar_mode_supported_p (mode);
! 	  break;
! 
! 	case MODE_COMPLEX_INT:
! 	case MODE_COMPLEX_FLOAT:
! 	  valid_mode = targetm.scalar_mode_supported_p (GET_MODE_INNER (mode));
! 	  break;
! 
! 	case MODE_VECTOR_INT:
! 	case MODE_VECTOR_FLOAT:
! 	  warning ("specifying vector types with __attribute__ ((mode)) "
! 		   "is deprecated");
! 	  warning ("use __attribute__ ((vector_size)) instead");
! 	  valid_mode = vector_mode_valid_p (mode);
! 	  break;
! 
! 	default:
! 	  break;
! 	}
!       if (!valid_mode)
! 	{
! 	  error ("unable to emulate %qs", p);
! 	  return NULL_TREE;
! 	}
! 
!       if (POINTER_TYPE_P (type))
! 	{
! 	  tree (*fn)(tree, enum machine_mode, bool);
! 
! 	  if (!targetm.valid_pointer_mode (mode))
  	    {
! 	      error ("invalid pointer mode %qs", p);
  	      return NULL_TREE;
  	    }
  
!           if (TREE_CODE (type) == POINTER_TYPE)
! 	    fn = build_pointer_type_for_mode;
! 	  else
! 	    fn = build_reference_type_for_mode;
! 	  typefm = fn (TREE_TYPE (type), mode, false);
! 	}
!       else
!         typefm = lang_hooks.types.type_for_mode (mode, TYPE_UNSIGNED (type));
! 
!       if (typefm == NULL_TREE)
! 	{
! 	  error ("no data type for mode %qs", p);
! 	  return NULL_TREE;
! 	}
!       else if (TREE_CODE (type) == ENUMERAL_TYPE)
! 	{
! 	  /* For enumeral types, copy the precision from the integer
! 	     type returned above.  If not an INTEGER_TYPE, we can't use
! 	     this mode for this type.  */
! 	  if (TREE_CODE (typefm) != INTEGER_TYPE)
  	    {
! 	      error ("cannot use mode %qs for enumeral types", p);
  	      return NULL_TREE;
  	    }
  
! 	  if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
! 	    type = build_variant_type_copy (type);
! 
! 	  /* We cannot use layout_type here, because that will attempt
! 	     to re-layout all variants, corrupting our original.  */
! 	  TYPE_PRECISION (type) = TYPE_PRECISION (typefm);
! 	  TYPE_MIN_VALUE (type) = TYPE_MIN_VALUE (typefm);
! 	  TYPE_MAX_VALUE (type) = TYPE_MAX_VALUE (typefm);
! 	  TYPE_SIZE (type) = TYPE_SIZE (typefm);
! 	  TYPE_SIZE_UNIT (type) = TYPE_SIZE_UNIT (typefm);
! 	  TYPE_MODE (type) = TYPE_MODE (typefm);
! 	  if (!TYPE_USER_ALIGN (type))
! 	    TYPE_ALIGN (type) = TYPE_ALIGN (typefm);
! 
! 	  typefm = type;
! 	}
!       else if (VECTOR_MODE_P (mode)
! 	       ? TREE_CODE (type) != TREE_CODE (TREE_TYPE (typefm))
! 	       : TREE_CODE (type) != TREE_CODE (typefm))
! 	{
! 	  error ("mode %qs applied to inappropriate type", p);
! 	  return NULL_TREE;
  	}
+ 
+       *node = typefm;
      }
  
    return NULL_TREE;
*************** handle_mode_attribute (tree *node, tree 
*** 4700,4722 ****
     struct attribute_spec.handler.  */
  
  static tree
! handle_section_attribute (tree *node, tree name ATTRIBUTE_UNUSED, tree args,
! 			  int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
  {
    tree decl = *node;
  
    if (targetm.have_named_sections)
      {
        if ((TREE_CODE (decl) == FUNCTION_DECL
  	   || TREE_CODE (decl) == VAR_DECL)
  	  && TREE_CODE (TREE_VALUE (args)) == STRING_CST)
  	{
  	  if (TREE_CODE (decl) == VAR_DECL
  	      && current_function_decl != NULL_TREE
! 	      && ! TREE_STATIC (decl))
  	    {
  	      error ("%Jsection attribute cannot be specified for "
!                      "local variables", decl);
  	      *no_add_attrs = true;
  	    }
  
--- 4405,4429 ----
     struct attribute_spec.handler.  */
  
  static tree
! handle_section_attribute (tree *node, tree ARG_UNUSED (name), tree args,
! 			  int ARG_UNUSED (flags), bool *no_add_attrs)
  {
    tree decl = *node;
  
    if (targetm.have_named_sections)
      {
+       user_defined_section_attribute = true;
+ 
        if ((TREE_CODE (decl) == FUNCTION_DECL
  	   || TREE_CODE (decl) == VAR_DECL)
  	  && TREE_CODE (TREE_VALUE (args)) == STRING_CST)
  	{
  	  if (TREE_CODE (decl) == VAR_DECL
  	      && current_function_decl != NULL_TREE
! 	      && !TREE_STATIC (decl))
  	    {
  	      error ("%Jsection attribute cannot be specified for "
! 		     "local variables", decl);
  	      *no_add_attrs = true;
  	    }
  
*************** handle_section_attribute (tree *node, tr
*** 4726,4733 ****
  		   && strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME (decl)),
  			      TREE_STRING_POINTER (TREE_VALUE (args))) != 0)
  	    {
! 	      error ("%Jsection of '%D' conflicts with previous declaration",
!                      *node, *node);
  	      *no_add_attrs = true;
  	    }
  	  else
--- 4433,4440 ----
  		   && strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME (decl)),
  			      TREE_STRING_POINTER (TREE_VALUE (args))) != 0)
  	    {
! 	      error ("%Jsection of %qD conflicts with previous declaration",
! 		     *node, *node);
  	      *no_add_attrs = true;
  	    }
  	  else
*************** handle_section_attribute (tree *node, tr
*** 4735,4741 ****
  	}
        else
  	{
! 	  error ("%Jsection attribute not allowed for '%D'", *node, *node);
  	  *no_add_attrs = true;
  	}
      }
--- 4442,4448 ----
  	}
        else
  	{
! 	  error ("%Jsection attribute not allowed for %qD", *node, *node);
  	  *no_add_attrs = true;
  	}
      }
*************** handle_section_attribute (tree *node, tr
*** 4752,4758 ****
     struct attribute_spec.handler.  */
  
  static tree
! handle_aligned_attribute (tree *node, tree name ATTRIBUTE_UNUSED, tree args,
  			  int flags, bool *no_add_attrs)
  {
    tree decl = NULL_TREE;
--- 4459,4465 ----
     struct attribute_spec.handler.  */
  
  static tree
! handle_aligned_attribute (tree *node, tree ARG_UNUSED (name), tree args,
  			  int flags, bool *no_add_attrs)
  {
    tree decl = NULL_TREE;
*************** handle_aligned_attribute (tree *node, tr
*** 4800,4813 ****
  	  && DECL_ORIGINAL_TYPE (decl) == NULL_TREE)
  	{
  	  tree tt = TREE_TYPE (decl);
! 	  *type = build_type_copy (*type);
  	  DECL_ORIGINAL_TYPE (decl) = tt;
  	  TYPE_NAME (*type) = decl;
  	  TREE_USED (*type) = TREE_USED (decl);
  	  TREE_TYPE (decl) = *type;
  	}
        else if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
! 	*type = build_type_copy (*type);
  
        TYPE_ALIGN (*type) = (1 << i) * BITS_PER_UNIT;
        TYPE_USER_ALIGN (*type) = 1;
--- 4507,4520 ----
  	  && DECL_ORIGINAL_TYPE (decl) == NULL_TREE)
  	{
  	  tree tt = TREE_TYPE (decl);
! 	  *type = build_variant_type_copy (*type);
  	  DECL_ORIGINAL_TYPE (decl) = tt;
  	  TYPE_NAME (*type) = decl;
  	  TREE_USED (*type) = TREE_USED (decl);
  	  TREE_TYPE (decl) = *type;
  	}
        else if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
! 	*type = build_variant_type_copy (*type);
  
        TYPE_ALIGN (*type) = (1 << i) * BITS_PER_UNIT;
        TYPE_USER_ALIGN (*type) = 1;
*************** handle_aligned_attribute (tree *node, tr
*** 4815,4821 ****
    else if (TREE_CODE (decl) != VAR_DECL
  	   && TREE_CODE (decl) != FIELD_DECL)
      {
!       error ("%Jalignment may not be specified for '%D'", decl, decl);
        *no_add_attrs = true;
      }
    else
--- 4522,4528 ----
    else if (TREE_CODE (decl) != VAR_DECL
  	   && TREE_CODE (decl) != FIELD_DECL)
      {
!       error ("%Jalignment may not be specified for %qD", decl, decl);
        *no_add_attrs = true;
      }
    else
*************** handle_aligned_attribute (tree *node, tr
*** 4831,4840 ****
     struct attribute_spec.handler.  */
  
  static tree
! handle_weak_attribute (tree *node, tree name ATTRIBUTE_UNUSED,
! 		       tree args ATTRIBUTE_UNUSED,
! 		       int flags ATTRIBUTE_UNUSED,
! 		       bool *no_add_attrs ATTRIBUTE_UNUSED)
  {
    declare_weak (*node);
  
--- 4538,4547 ----
     struct attribute_spec.handler.  */
  
  static tree
! handle_weak_attribute (tree *node, tree ARG_UNUSED (name),
! 		       tree ARG_UNUSED (args),
! 		       int ARG_UNUSED (flags),
! 		       bool * ARG_UNUSED (no_add_attrs))
  {
    declare_weak (*node);
  
*************** handle_weak_attribute (tree *node, tree 
*** 4846,4869 ****
  
  static tree
  handle_alias_attribute (tree *node, tree name, tree args,
! 			int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
  {
    tree decl = *node;
  
    if ((TREE_CODE (decl) == FUNCTION_DECL && DECL_INITIAL (decl))
!       || (TREE_CODE (decl) != FUNCTION_DECL && ! DECL_EXTERNAL (decl)))
      {
!       error ("%J'%D' defined both normally and as an alias", decl, decl);
        *no_add_attrs = true;
      }
!   else if (decl_function_context (decl) == 0)
      {
        tree id;
  
        id = TREE_VALUE (args);
        if (TREE_CODE (id) != STRING_CST)
  	{
! 	  error ("alias arg not a string");
  	  *no_add_attrs = true;
  	  return NULL_TREE;
  	}
--- 4553,4582 ----
  
  static tree
  handle_alias_attribute (tree *node, tree name, tree args,
! 			int ARG_UNUSED (flags), bool *no_add_attrs)
  {
    tree decl = *node;
  
    if ((TREE_CODE (decl) == FUNCTION_DECL && DECL_INITIAL (decl))
!       || (TREE_CODE (decl) != FUNCTION_DECL && !DECL_EXTERNAL (decl)))
      {
!       error ("%J%qD defined both normally and as an alias", decl, decl);
        *no_add_attrs = true;
      }
! 
!   /* Note that the very first time we process a nested declaration,
!      decl_function_context will not be set.  Indeed, *would* never
!      be set except for the DECL_INITIAL/DECL_EXTERNAL frobbery that
!      we do below.  After such frobbery, pushdecl would set the context.
!      In any case, this is never what we want.  */
!   else if (decl_function_context (decl) == 0 && current_function_decl == NULL)
      {
        tree id;
  
        id = TREE_VALUE (args);
        if (TREE_CODE (id) != STRING_CST)
  	{
! 	  error ("alias argument not a string");
  	  *no_add_attrs = true;
  	  return NULL_TREE;
  	}
*************** handle_alias_attribute (tree *node, tree
*** 4874,4884 ****
        if (TREE_CODE (decl) == FUNCTION_DECL)
  	DECL_INITIAL (decl) = error_mark_node;
        else
! 	DECL_EXTERNAL (decl) = 0;
      }
    else
      {
!       warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
        *no_add_attrs = true;
      }
  
--- 4587,4600 ----
        if (TREE_CODE (decl) == FUNCTION_DECL)
  	DECL_INITIAL (decl) = error_mark_node;
        else
! 	{
! 	  DECL_EXTERNAL (decl) = 0;
! 	  TREE_STATIC (decl) = 1;
! 	}
      }
    else
      {
!       warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
        *no_add_attrs = true;
      }
  
*************** handle_alias_attribute (tree *node, tree
*** 4890,4896 ****
  
  static tree
  handle_visibility_attribute (tree *node, tree name, tree args,
! 			     int flags ATTRIBUTE_UNUSED,
  			     bool *no_add_attrs)
  {
    tree decl = *node;
--- 4606,4612 ----
  
  static tree
  handle_visibility_attribute (tree *node, tree name, tree args,
! 			     int ARG_UNUSED (flags),
  			     bool *no_add_attrs)
  {
    tree decl = *node;
*************** handle_visibility_attribute (tree *node,
*** 4898,4941 ****
  
    *no_add_attrs = true;
  
!   if (decl_function_context (decl) != 0 || ! TREE_PUBLIC (decl))
      {
!       warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
        return NULL_TREE;
      }
  
    if (TREE_CODE (id) != STRING_CST)
      {
!       error ("visibility arg not a string");
        return NULL_TREE;
      }
  
    if (strcmp (TREE_STRING_POINTER (id), "default") == 0)
      DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
    else if (strcmp (TREE_STRING_POINTER (id), "internal") == 0)
      DECL_VISIBILITY (decl) = VISIBILITY_INTERNAL;
    else if (strcmp (TREE_STRING_POINTER (id), "hidden") == 0)
!     DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN;  
    else if (strcmp (TREE_STRING_POINTER (id), "protected") == 0)
      DECL_VISIBILITY (decl) = VISIBILITY_PROTECTED;
    else
!     error ("visibility arg must be one of \"default\", \"hidden\", \"protected\" or \"internal\"");
  
    return NULL_TREE;
  }
  
  /* Handle an "tls_model" attribute; arguments as in
     struct attribute_spec.handler.  */
  
  static tree
  handle_tls_model_attribute (tree *node, tree name, tree args,
! 			    int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
  {
    tree decl = *node;
  
!   if (! DECL_THREAD_LOCAL (decl))
      {
!       warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
        *no_add_attrs = true;
      }
    else
--- 4614,4723 ----
  
    *no_add_attrs = true;
  
!   if (TYPE_P (*node))
      {
!       if (TREE_CODE (*node) != RECORD_TYPE && TREE_CODE (*node) != UNION_TYPE)
!        {
!          warning ("%qs attribute ignored on non-class types",
!                   IDENTIFIER_POINTER (name));
!          return NULL_TREE;
!        }
!     }
!   else if (decl_function_context (decl) != 0 || !TREE_PUBLIC (decl))
!     {
!       warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
        return NULL_TREE;
      }
  
    if (TREE_CODE (id) != STRING_CST)
      {
!       error ("visibility argument not a string");
        return NULL_TREE;
      }
  
+   /*  If this is a type, set the visibility on the type decl.  */
+   if (TYPE_P (decl))
+     {
+       decl = TYPE_NAME (decl);
+       if (!decl)
+         return NULL_TREE;
+       if (TREE_CODE (decl) == IDENTIFIER_NODE)
+ 	{
+ 	   warning ("%qE attribute ignored on types",
+ 		    name);
+ 	   return NULL_TREE;
+ 	}
+     }
+ 
    if (strcmp (TREE_STRING_POINTER (id), "default") == 0)
      DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
    else if (strcmp (TREE_STRING_POINTER (id), "internal") == 0)
      DECL_VISIBILITY (decl) = VISIBILITY_INTERNAL;
    else if (strcmp (TREE_STRING_POINTER (id), "hidden") == 0)
!     DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN;
    else if (strcmp (TREE_STRING_POINTER (id), "protected") == 0)
      DECL_VISIBILITY (decl) = VISIBILITY_PROTECTED;
    else
!     error ("visibility argument must be one of \"default\", \"hidden\", \"protected\" or \"internal\"");
!   DECL_VISIBILITY_SPECIFIED (decl) = 1;
! 
!   /* For decls only, go ahead and attach the attribute to the node as well.
!      This is needed so we can determine whether we have VISIBILITY_DEFAULT
!      because the visibility was not specified, or because it was explicitly
!      overridden from the class visibility.  */
!   if (DECL_P (*node))
!     *no_add_attrs = false;
  
    return NULL_TREE;
  }
  
+ /* Determine the ELF symbol visibility for DECL, which is either a
+    variable or a function.  It is an error to use this function if a
+    definition of DECL is not available in this translation unit.
+    Returns true if the final visibility has been determined by this
+    function; false if the caller is free to make additional
+    modifications.  */
+ 
+ bool
+ c_determine_visibility (tree decl)
+ {
+   gcc_assert (TREE_CODE (decl) == VAR_DECL
+ 	      || TREE_CODE (decl) == FUNCTION_DECL);
+ 
+   /* If the user explicitly specified the visibility with an
+      attribute, honor that.  DECL_VISIBILITY will have been set during
+      the processing of the attribute.  We check for an explicit
+      attribute, rather than just checking DECL_VISIBILITY_SPECIFIED,
+      to distinguish the use of an attribute from the use of a "#pragma
+      GCC visibility push(...)"; in the latter case we still want other
+      considerations to be able to overrule the #pragma.  */
+   if (lookup_attribute ("visibility", DECL_ATTRIBUTES (decl)))
+     return true;
+ 
+   /* Anything that is exported must have default visibility.  */
+   if (TARGET_DLLIMPORT_DECL_ATTRIBUTES
+       && lookup_attribute ("dllexport", DECL_ATTRIBUTES (decl)))
+     {
+       DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
+       DECL_VISIBILITY_SPECIFIED (decl) = 1;
+       return true;
+     }
+ 
+   return false;
+ }
+ 
  /* Handle an "tls_model" attribute; arguments as in
     struct attribute_spec.handler.  */
  
  static tree
  handle_tls_model_attribute (tree *node, tree name, tree args,
! 			    int ARG_UNUSED (flags), bool *no_add_attrs)
  {
    tree decl = *node;
  
!   if (!DECL_THREAD_LOCAL (decl))
      {
!       warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
        *no_add_attrs = true;
      }
    else
*************** handle_tls_model_attribute (tree *node, 
*** 4945,4951 ****
        id = TREE_VALUE (args);
        if (TREE_CODE (id) != STRING_CST)
  	{
! 	  error ("tls_model arg not a string");
  	  *no_add_attrs = true;
  	  return NULL_TREE;
  	}
--- 4727,4733 ----
        id = TREE_VALUE (args);
        if (TREE_CODE (id) != STRING_CST)
  	{
! 	  error ("tls_model argument not a string");
  	  *no_add_attrs = true;
  	  return NULL_TREE;
  	}
*************** handle_tls_model_attribute (tree *node, 
*** 4954,4960 ****
  	  && strcmp (TREE_STRING_POINTER (id), "local-dynamic")
  	  && strcmp (TREE_STRING_POINTER (id), "global-dynamic"))
  	{
! 	  error ("tls_model arg must be one of \"local-exec\", \"initial-exec\", \"local-dynamic\" or \"global-dynamic\"");
  	  *no_add_attrs = true;
  	  return NULL_TREE;
  	}
--- 4736,4742 ----
  	  && strcmp (TREE_STRING_POINTER (id), "local-dynamic")
  	  && strcmp (TREE_STRING_POINTER (id), "global-dynamic"))
  	{
! 	  error ("tls_model argument must be one of \"local-exec\", \"initial-exec\", \"local-dynamic\" or \"global-dynamic\"");
  	  *no_add_attrs = true;
  	  return NULL_TREE;
  	}
*************** handle_tls_model_attribute (tree *node, 
*** 4968,4987 ****
  
  static tree
  handle_no_instrument_function_attribute (tree *node, tree name,
! 					 tree args ATTRIBUTE_UNUSED,
! 					 int flags ATTRIBUTE_UNUSED,
  					 bool *no_add_attrs)
  {
    tree decl = *node;
  
    if (TREE_CODE (decl) != FUNCTION_DECL)
      {
!       error ("%J'%E' attribute applies only to functions", decl, name);
        *no_add_attrs = true;
      }
    else if (DECL_INITIAL (decl))
      {
!       error ("%Jcan't set '%E' attribute after definition", decl, name);
        *no_add_attrs = true;
      }
    else
--- 4750,4769 ----
  
  static tree
  handle_no_instrument_function_attribute (tree *node, tree name,
! 					 tree ARG_UNUSED (args),
! 					 int ARG_UNUSED (flags),
  					 bool *no_add_attrs)
  {
    tree decl = *node;
  
    if (TREE_CODE (decl) != FUNCTION_DECL)
      {
!       error ("%J%qE attribute applies only to functions", decl, name);
        *no_add_attrs = true;
      }
    else if (DECL_INITIAL (decl))
      {
!       error ("%Jcan%'t set %qE attribute after definition", decl, name);
        *no_add_attrs = true;
      }
    else
*************** handle_no_instrument_function_attribute 
*** 4994,5008 ****
     struct attribute_spec.handler.  */
  
  static tree
! handle_malloc_attribute (tree *node, tree name, tree args ATTRIBUTE_UNUSED,
! 			 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
  {
    if (TREE_CODE (*node) == FUNCTION_DECL)
      DECL_IS_MALLOC (*node) = 1;
    /* ??? TODO: Support types.  */
    else
      {
!       warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
        *no_add_attrs = true;
      }
  
--- 4776,4790 ----
     struct attribute_spec.handler.  */
  
  static tree
! handle_malloc_attribute (tree *node, tree name, tree ARG_UNUSED (args),
! 			 int ARG_UNUSED (flags), bool *no_add_attrs)
  {
    if (TREE_CODE (*node) == FUNCTION_DECL)
      DECL_IS_MALLOC (*node) = 1;
    /* ??? TODO: Support types.  */
    else
      {
!       warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
        *no_add_attrs = true;
      }
  
*************** handle_malloc_attribute (tree *node, tre
*** 5014,5033 ****
  
  static tree
  handle_no_limit_stack_attribute (tree *node, tree name,
! 				 tree args ATTRIBUTE_UNUSED,
! 				 int flags ATTRIBUTE_UNUSED,
  				 bool *no_add_attrs)
  {
    tree decl = *node;
  
    if (TREE_CODE (decl) != FUNCTION_DECL)
      {
!       error ("%J'%E' attribute applies only to functions", decl, name);
        *no_add_attrs = true;
      }
    else if (DECL_INITIAL (decl))
      {
!       error ("%Jcan't set '%E' attribute after definition", decl, name);
        *no_add_attrs = true;
      }
    else
--- 4796,4815 ----
  
  static tree
  handle_no_limit_stack_attribute (tree *node, tree name,
! 				 tree ARG_UNUSED (args),
! 				 int ARG_UNUSED (flags),
  				 bool *no_add_attrs)
  {
    tree decl = *node;
  
    if (TREE_CODE (decl) != FUNCTION_DECL)
      {
!       error ("%J%qE attribute applies only to functions", decl, name);
        *no_add_attrs = true;
      }
    else if (DECL_INITIAL (decl))
      {
!       error ("%Jcan%'t set %qE attribute after definition", decl, name);
        *no_add_attrs = true;
      }
    else
*************** handle_no_limit_stack_attribute (tree *n
*** 5040,5054 ****
     struct attribute_spec.handler.  */
  
  static tree
! handle_pure_attribute (tree *node, tree name, tree args ATTRIBUTE_UNUSED,
! 		       int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
  {
    if (TREE_CODE (*node) == FUNCTION_DECL)
      DECL_IS_PURE (*node) = 1;
    /* ??? TODO: Support types.  */
    else
      {
!       warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
        *no_add_attrs = true;
      }
  
--- 4822,4836 ----
     struct attribute_spec.handler.  */
  
  static tree
! handle_pure_attribute (tree *node, tree name, tree ARG_UNUSED (args),
! 		       int ARG_UNUSED (flags), bool *no_add_attrs)
  {
    if (TREE_CODE (*node) == FUNCTION_DECL)
      DECL_IS_PURE (*node) = 1;
    /* ??? TODO: Support types.  */
    else
      {
!       warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
        *no_add_attrs = true;
      }
  
*************** handle_pure_attribute (tree *node, tree 
*** 5060,5066 ****
  
  static tree
  handle_deprecated_attribute (tree *node, tree name,
! 			     tree args ATTRIBUTE_UNUSED, int flags,
  			     bool *no_add_attrs)
  {
    tree type = NULL_TREE;
--- 4842,4848 ----
  
  static tree
  handle_deprecated_attribute (tree *node, tree name,
! 			     tree ARG_UNUSED (args), int flags,
  			     bool *no_add_attrs)
  {
    tree type = NULL_TREE;
*************** handle_deprecated_attribute (tree *node,
*** 5084,5090 ****
    else if (TYPE_P (*node))
      {
        if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
! 	*node = build_type_copy (*node);
        TREE_DEPRECATED (*node) = 1;
        type = *node;
      }
--- 4866,4872 ----
    else if (TYPE_P (*node))
      {
        if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
! 	*node = build_variant_type_copy (*node);
        TREE_DEPRECATED (*node) = 1;
        type = *node;
      }
*************** handle_deprecated_attribute (tree *node,
*** 5103,5148 ****
  	    what = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
  	}
        if (what)
! 	warning ("`%s' attribute ignored for `%s'",
  		  IDENTIFIER_POINTER (name), what);
        else
! 	warning ("`%s' attribute ignored",
  		      IDENTIFIER_POINTER (name));
      }
  
    return NULL_TREE;
  }
  
- /* Keep a list of vector type nodes we created in handle_vector_size_attribute,
-    to prevent us from duplicating type nodes unnecessarily.
-    The normal mechanism to prevent duplicates is to use type_hash_canon, but
-    since we want to distinguish types that are essentially identical (except
-    for their debug representation), we use a local list here.  */
- static GTY(()) tree vector_type_node_list = 0;
- 
  /* Handle a "vector_size" attribute; arguments as in
     struct attribute_spec.handler.  */
  
  static tree
  handle_vector_size_attribute (tree *node, tree name, tree args,
! 			      int flags ATTRIBUTE_UNUSED,
  			      bool *no_add_attrs)
  {
    unsigned HOST_WIDE_INT vecsize, nunits;
!   enum machine_mode mode, orig_mode, new_mode;
!   tree type = *node, new_type = NULL_TREE;
!   tree type_list_node;
  
    *no_add_attrs = true;
  
!   if (! host_integerp (TREE_VALUE (args), 1))
      {
!       warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
        return NULL_TREE;
      }
  
    /* Get the vector size (in bytes).  */
!   vecsize = tree_low_cst (TREE_VALUE (args), 1);
  
    /* We need to provide for vector pointers, vector arrays, and
       functions returning vectors.  For example:
--- 4885,4928 ----
  	    what = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
  	}
        if (what)
! 	warning ("%qs attribute ignored for %qs",
  		  IDENTIFIER_POINTER (name), what);
        else
! 	warning ("%qs attribute ignored",
  		      IDENTIFIER_POINTER (name));
      }
  
    return NULL_TREE;
  }
  
  /* Handle a "vector_size" attribute; arguments as in
     struct attribute_spec.handler.  */
  
  static tree
  handle_vector_size_attribute (tree *node, tree name, tree args,
! 			      int ARG_UNUSED (flags),
  			      bool *no_add_attrs)
  {
    unsigned HOST_WIDE_INT vecsize, nunits;
!   enum machine_mode orig_mode;
!   tree type = *node, new_type, size;
  
    *no_add_attrs = true;
  
!   /* Stripping NON_LVALUE_EXPR allows declarations such as
!      typedef short v4si __attribute__((vector_size (4 * sizeof(short)))).  */
!   size = TREE_VALUE (args);
!   if (TREE_CODE (size) == NON_LVALUE_EXPR)
!     size = TREE_OPERAND (size, 0);
! 
!   if (!host_integerp (size, 1))
      {
!       warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
        return NULL_TREE;
      }
  
    /* Get the vector size (in bytes).  */
!   vecsize = tree_low_cst (size, 1);
  
    /* We need to provide for vector pointers, vector arrays, and
       functions returning vectors.  For example:
*************** handle_vector_size_attribute (tree *node
*** 5164,5260 ****
    if (TREE_CODE (type) == RECORD_TYPE
        || (GET_MODE_CLASS (orig_mode) != MODE_FLOAT
  	  && GET_MODE_CLASS (orig_mode) != MODE_INT)
!       || ! host_integerp (TYPE_SIZE_UNIT (type), 1))
      {
!       error ("invalid vector type for attribute `%s'",
  	     IDENTIFIER_POINTER (name));
        return NULL_TREE;
      }
  
    /* Calculate how many units fit in the vector.  */
    nunits = vecsize / tree_low_cst (TYPE_SIZE_UNIT (type), 1);
! 
!   /* Find a suitably sized vector.  */
!   new_mode = VOIDmode;
!   for (mode = GET_CLASS_NARROWEST_MODE (GET_MODE_CLASS (orig_mode) == MODE_INT
! 					? MODE_VECTOR_INT
! 					: MODE_VECTOR_FLOAT);
!        mode != VOIDmode;
!        mode = GET_MODE_WIDER_MODE (mode))
!     if (vecsize == GET_MODE_SIZE (mode)
! 	&& nunits == (unsigned HOST_WIDE_INT) GET_MODE_NUNITS (mode))
!       {
! 	new_mode = mode;
! 	break;
!       }
! 
!     if (new_mode == VOIDmode)
      {
!       error ("no vector mode with the size and type specified could be found");
        return NULL_TREE;
      }
  
!   for (type_list_node = vector_type_node_list; type_list_node;
!        type_list_node = TREE_CHAIN (type_list_node))
!     {
!       tree other_type = TREE_VALUE (type_list_node);
!       tree record = TYPE_DEBUG_REPRESENTATION_TYPE (other_type);
!       tree fields = TYPE_FIELDS (record);
!       tree field_type = TREE_TYPE (fields);
!       tree array_type = TREE_TYPE (field_type);
!       if (TREE_CODE (fields) != FIELD_DECL
! 	  || TREE_CODE (field_type) != ARRAY_TYPE)
! 	abort ();
! 
!       if (TYPE_MODE (other_type) == mode && type == array_type)
! 	{
! 	  new_type = other_type;
! 	  break;
! 	}
!     }
! 
!   if (new_type == NULL_TREE)
!     {
!       tree index, array, rt, list_node;
! 
!       new_type = (*lang_hooks.types.type_for_mode) (new_mode,
! 						    TREE_UNSIGNED (type));
! 
!       if (!new_type)
! 	{
! 	  error ("no vector mode with the size and type specified could be found");
! 	  return NULL_TREE;
! 	}
! 
!       new_type = build_type_copy (new_type);
! 
!       /* If this is a vector, make sure we either have hardware
!          support, or we can emulate it.  */
!       if ((GET_MODE_CLASS (mode) == MODE_VECTOR_INT
! 	   || GET_MODE_CLASS (mode) == MODE_VECTOR_FLOAT)
! 	  && !vector_mode_valid_p (mode))
! 	{
! 	  error ("unable to emulate '%s'", GET_MODE_NAME (mode));
! 	  return NULL_TREE;
! 	}
! 
!       /* Set the debug information here, because this is the only
! 	 place where we know the underlying type for a vector made
! 	 with vector_size.  For debugging purposes we pretend a vector
! 	 is an array within a structure.  */
!       index = build_int_2 (TYPE_VECTOR_SUBPARTS (new_type) - 1, 0);
!       array = build_array_type (type, build_index_type (index));
!       rt = make_node (RECORD_TYPE);
! 
!       TYPE_FIELDS (rt) = build_decl (FIELD_DECL, get_identifier ("f"), array);
!       DECL_CONTEXT (TYPE_FIELDS (rt)) = rt;
!       layout_type (rt);
!       TYPE_DEBUG_REPRESENTATION_TYPE (new_type) = rt;
! 
!       list_node = build_tree_list (NULL, new_type);
!       TREE_CHAIN (list_node) = vector_type_node_list;
!       vector_type_node_list = list_node;
!     }
  
    /* Build back pointers if needed.  */
    *node = reconstruct_complex_type (*node, new_type);
--- 4944,4965 ----
    if (TREE_CODE (type) == RECORD_TYPE
        || (GET_MODE_CLASS (orig_mode) != MODE_FLOAT
  	  && GET_MODE_CLASS (orig_mode) != MODE_INT)
!       || !host_integerp (TYPE_SIZE_UNIT (type), 1))
      {
!       error ("invalid vector type for attribute %qs",
  	     IDENTIFIER_POINTER (name));
        return NULL_TREE;
      }
  
    /* Calculate how many units fit in the vector.  */
    nunits = vecsize / tree_low_cst (TYPE_SIZE_UNIT (type), 1);
!   if (nunits & (nunits - 1))
      {
!       error ("number of components of the vector not a power of two");
        return NULL_TREE;
      }
  
!   new_type = build_vector_type (type, nunits);
  
    /* Build back pointers if needed.  */
    *node = reconstruct_complex_type (*node, new_type);
*************** handle_vector_size_attribute (tree *node
*** 5264,5271 ****
  
  /* Handle the "nonnull" attribute.  */
  static tree
! handle_nonnull_attribute (tree *node, tree name ATTRIBUTE_UNUSED,
! 			  tree args, int flags ATTRIBUTE_UNUSED,
  			  bool *no_add_attrs)
  {
    tree type = *node;
--- 4969,4976 ----
  
  /* Handle the "nonnull" attribute.  */
  static tree
! handle_nonnull_attribute (tree *node, tree ARG_UNUSED (name),
! 			  tree args, int ARG_UNUSED (flags),
  			  bool *no_add_attrs)
  {
    tree type = *node;
*************** handle_nonnull_attribute (tree *node, tr
*** 5274,5285 ****
    /* If no arguments are specified, all pointer arguments should be
       non-null.  Verify a full prototype is given so that the arguments
       will have the correct types when we actually check them later.  */
!   if (! args)
      {
!       if (! TYPE_ARG_TYPES (type))
  	{
  	  error ("nonnull attribute without arguments on a non-prototype");
!           *no_add_attrs = true;
  	}
        return NULL_TREE;
      }
--- 4979,4990 ----
    /* If no arguments are specified, all pointer arguments should be
       non-null.  Verify a full prototype is given so that the arguments
       will have the correct types when we actually check them later.  */
!   if (!args)
      {
!       if (!TYPE_ARG_TYPES (type))
  	{
  	  error ("nonnull attribute without arguments on a non-prototype");
! 	  *no_add_attrs = true;
  	}
        return NULL_TREE;
      }
*************** handle_nonnull_attribute (tree *node, tr
*** 5289,5299 ****
    for (attr_arg_num = 1; args; args = TREE_CHAIN (args))
      {
        tree argument;
!       unsigned HOST_WIDE_INT arg_num, ck_num;
  
!       if (! get_nonnull_operand (TREE_VALUE (args), &arg_num))
  	{
! 	  error ("nonnull argument has invalid operand number (arg %lu)",
  		 (unsigned long) attr_arg_num);
  	  *no_add_attrs = true;
  	  return NULL_TREE;
--- 4994,5004 ----
    for (attr_arg_num = 1; args; args = TREE_CHAIN (args))
      {
        tree argument;
!       unsigned HOST_WIDE_INT arg_num = 0, ck_num;
  
!       if (!get_nonnull_operand (TREE_VALUE (args), &arg_num))
  	{
! 	  error ("nonnull argument has invalid operand number (argument %lu)",
  		 (unsigned long) attr_arg_num);
  	  *no_add_attrs = true;
  	  return NULL_TREE;
*************** handle_nonnull_attribute (tree *node, tr
*** 5304,5326 ****
  	{
  	  for (ck_num = 1; ; ck_num++)
  	    {
! 	      if (! argument || ck_num == arg_num)
  		break;
  	      argument = TREE_CHAIN (argument);
  	    }
  
!           if (! argument
  	      || TREE_CODE (TREE_VALUE (argument)) == VOID_TYPE)
  	    {
! 	      error ("nonnull argument with out-of-range operand number (arg %lu, operand %lu)",
  		     (unsigned long) attr_arg_num, (unsigned long) arg_num);
  	      *no_add_attrs = true;
  	      return NULL_TREE;
  	    }
  
!           if (TREE_CODE (TREE_VALUE (argument)) != POINTER_TYPE)
  	    {
! 	      error ("nonnull argument references non-pointer operand (arg %lu, operand %lu)",
  		   (unsigned long) attr_arg_num, (unsigned long) arg_num);
  	      *no_add_attrs = true;
  	      return NULL_TREE;
--- 5009,5031 ----
  	{
  	  for (ck_num = 1; ; ck_num++)
  	    {
! 	      if (!argument || ck_num == arg_num)
  		break;
  	      argument = TREE_CHAIN (argument);
  	    }
  
! 	  if (!argument
  	      || TREE_CODE (TREE_VALUE (argument)) == VOID_TYPE)
  	    {
! 	      error ("nonnull argument with out-of-range operand number (argument %lu, operand %lu)",
  		     (unsigned long) attr_arg_num, (unsigned long) arg_num);
  	      *no_add_attrs = true;
  	      return NULL_TREE;
  	    }
  
! 	  if (TREE_CODE (TREE_VALUE (argument)) != POINTER_TYPE)
  	    {
! 	      error ("nonnull argument references non-pointer operand (argument %lu, operand %lu)",
  		   (unsigned long) attr_arg_num, (unsigned long) arg_num);
  	      *no_add_attrs = true;
  	      return NULL_TREE;
*************** check_function_nonnull (tree attrs, tree
*** 5344,5365 ****
      {
        if (is_attribute_p ("nonnull", TREE_PURPOSE (a)))
  	{
!           args = TREE_VALUE (a);
  
!           /* Walk the argument list.  If we encounter an argument number we
!              should check for non-null, do it.  If the attribute has no args,
!              then every pointer argument is checked (in which case the check
  	     for pointer type is done in check_nonnull_arg).  */
!           for (param = params, param_num = 1; ;
!                param_num++, param = TREE_CHAIN (param))
!             {
!               if (! param)
  	break;
!               if (! args || nonnull_check_p (args, param_num))
  	check_function_arguments_recurse (check_nonnull_arg, NULL,
  					  TREE_VALUE (param),
  					  param_num);
!             }
  	}
      }
  }
--- 5049,5123 ----
      {
        if (is_attribute_p ("nonnull", TREE_PURPOSE (a)))
  	{
! 	  args = TREE_VALUE (a);
  
! 	  /* Walk the argument list.  If we encounter an argument number we
! 	     should check for non-null, do it.  If the attribute has no args,
! 	     then every pointer argument is checked (in which case the check
  	     for pointer type is done in check_nonnull_arg).  */
! 	  for (param = params, param_num = 1; ;
! 	       param_num++, param = TREE_CHAIN (param))
! 	    {
! 	      if (!param)
  	break;
! 	      if (!args || nonnull_check_p (args, param_num))
  	check_function_arguments_recurse (check_nonnull_arg, NULL,
  					  TREE_VALUE (param),
  					  param_num);
! 	    }
! 	}
!     }
! }
! 
! /* Check that the Nth argument of a function call (counting backwards
!    from the end) is a (pointer)0.  */
! 
! static void
! check_function_sentinel (tree attrs, tree params)
! {
!   tree attr = lookup_attribute ("sentinel", attrs);
! 
!   if (attr)
!     {
!       if (!params)
! 	warning ("missing sentinel in function call");
!       else
!         {
! 	  tree sentinel, end;
! 	  unsigned pos = 0;
! 	  
! 	  if (TREE_VALUE (attr))
! 	    {
! 	      tree p = TREE_VALUE (TREE_VALUE (attr));
! 	      STRIP_NOPS (p);
! 	      pos = TREE_INT_CST_LOW (p);
! 	    }
! 
! 	  sentinel = end = params;
! 
! 	  /* Advance `end' ahead of `sentinel' by `pos' positions.  */
! 	  while (pos > 0 && TREE_CHAIN (end))
! 	    {
! 	      pos--;
! 	      end = TREE_CHAIN (end);
! 	    }
! 	  if (pos > 0)
! 	    {
! 	      warning ("not enough arguments to fit a sentinel");
! 	      return;
! 	    }
! 
! 	  /* Now advance both until we find the last parameter.  */
! 	  while (TREE_CHAIN (end))
! 	    {
! 	      end = TREE_CHAIN (end);
! 	      sentinel = TREE_CHAIN (sentinel);
! 	    }
! 
! 	  /* Validate the sentinel.  */
! 	  if (!POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (sentinel)))
! 	      || !integer_zerop (TREE_VALUE (sentinel)))
! 	    warning ("missing sentinel in function call");
  	}
      }
  }
*************** check_function_nonnull (tree attrs, tree
*** 5371,5382 ****
  static bool
  nonnull_check_p (tree args, unsigned HOST_WIDE_INT param_num)
  {
!   unsigned HOST_WIDE_INT arg_num;
  
    for (; args; args = TREE_CHAIN (args))
      {
!       if (! get_nonnull_operand (TREE_VALUE (args), &arg_num))
!         abort ();
  
        if (arg_num == param_num)
  	return true;
--- 5129,5141 ----
  static bool
  nonnull_check_p (tree args, unsigned HOST_WIDE_INT param_num)
  {
!   unsigned HOST_WIDE_INT arg_num = 0;
  
    for (; args; args = TREE_CHAIN (args))
      {
!       bool found = get_nonnull_operand (TREE_VALUE (args), &arg_num);
! 
!       gcc_assert (found);
  
        if (arg_num == param_num)
  	return true;
*************** nonnull_check_p (tree args, unsigned HOS
*** 5389,5395 ****
     via check_function_arguments_recurse.  */
  
  static void
! check_nonnull_arg (void *ctx ATTRIBUTE_UNUSED, tree param,
  		   unsigned HOST_WIDE_INT param_num)
  {
    /* Just skip checking the argument if it's not a pointer.  This can
--- 5148,5154 ----
     via check_function_arguments_recurse.  */
  
  static void
! check_nonnull_arg (void * ARG_UNUSED (ctx), tree param,
  		   unsigned HOST_WIDE_INT param_num)
  {
    /* Just skip checking the argument if it's not a pointer.  This can
*************** check_nonnull_arg (void *ctx ATTRIBUTE_U
*** 5400,5407 ****
      return;
  
    if (integer_zerop (param))
!     warning ("null argument where non-null required (arg %lu)",
!              (unsigned long) param_num);
  }
  
  /* Helper for nonnull attribute handling; fetch the operand number
--- 5159,5166 ----
      return;
  
    if (integer_zerop (param))
!     warning ("null argument where non-null required (argument %lu)",
! 	     (unsigned long) param_num);
  }
  
  /* Helper for nonnull attribute handling; fetch the operand number
*************** get_nonnull_operand (tree arg_num_expr, 
*** 5429,5443 ****
     struct attribute_spec.handler.  */
  
  static tree
! handle_nothrow_attribute (tree *node, tree name, tree args ATTRIBUTE_UNUSED,
! 			  int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
  {
    if (TREE_CODE (*node) == FUNCTION_DECL)
      TREE_NOTHROW (*node) = 1;
    /* ??? TODO: Support types.  */
    else
      {
!       warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
        *no_add_attrs = true;
      }
  
--- 5188,5202 ----
     struct attribute_spec.handler.  */
  
  static tree
! handle_nothrow_attribute (tree *node, tree name, tree ARG_UNUSED (args),
! 			  int ARG_UNUSED (flags), bool *no_add_attrs)
  {
    if (TREE_CODE (*node) == FUNCTION_DECL)
      TREE_NOTHROW (*node) = 1;
    /* ??? TODO: Support types.  */
    else
      {
!       warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
        *no_add_attrs = true;
      }
  
*************** handle_nothrow_attribute (tree *node, tr
*** 5449,5455 ****
  
  static tree
  handle_cleanup_attribute (tree *node, tree name, tree args,
! 			  int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
  {
    tree decl = *node;
    tree cleanup_id, cleanup_decl;
--- 5208,5214 ----
  
  static tree
  handle_cleanup_attribute (tree *node, tree name, tree args,
! 			  int ARG_UNUSED (flags), bool *no_add_attrs)
  {
    tree decl = *node;
    tree cleanup_id, cleanup_decl;
*************** handle_cleanup_attribute (tree *node, tr
*** 5460,5466 ****
       we'd be missing too much, since we do have attribute constructor.  */
    if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl))
      {
!       warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
        *no_add_attrs = true;
        return NULL_TREE;
      }
--- 5219,5225 ----
       we'd be missing too much, since we do have attribute constructor.  */
    if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl))
      {
!       warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
        *no_add_attrs = true;
        return NULL_TREE;
      }
*************** handle_cleanup_attribute (tree *node, tr
*** 5471,5484 ****
    cleanup_id = TREE_VALUE (args);
    if (TREE_CODE (cleanup_id) != IDENTIFIER_NODE)
      {
!       error ("cleanup arg not an identifier");
        *no_add_attrs = true;
        return NULL_TREE;
      }
    cleanup_decl = lookup_name (cleanup_id);
    if (!cleanup_decl || TREE_CODE (cleanup_decl) != FUNCTION_DECL)
      {
!       error ("cleanup arg not a function");
        *no_add_attrs = true;
        return NULL_TREE;
      }
--- 5230,5243 ----
    cleanup_id = TREE_VALUE (args);
    if (TREE_CODE (cleanup_id) != IDENTIFIER_NODE)
      {
!       error ("cleanup argument not an identifier");
        *no_add_attrs = true;
        return NULL_TREE;
      }
    cleanup_decl = lookup_name (cleanup_id);
    if (!cleanup_decl || TREE_CODE (cleanup_decl) != FUNCTION_DECL)
      {
!       error ("cleanup argument not a function");
        *no_add_attrs = true;
        return NULL_TREE;
      }
*************** handle_cleanup_attribute (tree *node, tr
*** 5493,5510 ****
  
  static tree
  handle_warn_unused_result_attribute (tree *node, tree name,
! 			       tree args ATTRIBUTE_UNUSED,
! 			       int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
  {
    /* Ignore the attribute for functions not returning any value.  */
    if (VOID_TYPE_P (TREE_TYPE (*node)))
      {
!       warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
        *no_add_attrs = true;
      }
  
    return NULL_TREE;
  }
  
  /* Check for valid arguments being passed to a function.  */
  void
--- 5252,5319 ----
  
  static tree
  handle_warn_unused_result_attribute (tree *node, tree name,
! 			       tree ARG_UNUSED (args),
! 			       int ARG_UNUSED (flags), bool *no_add_attrs)
  {
    /* Ignore the attribute for functions not returning any value.  */
    if (VOID_TYPE_P (TREE_TYPE (*node)))
      {
!       warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
        *no_add_attrs = true;
      }
  
    return NULL_TREE;
  }
+ 
+ /* Handle a "sentinel" attribute.  */
+ 
+ static tree
+ handle_sentinel_attribute (tree *node, tree name, tree args,
+ 			   int ARG_UNUSED (flags), bool *no_add_attrs)
+ {
+   tree params = TYPE_ARG_TYPES (*node);
+ 
+   if (!params)
+     {
+       warning ("%qs attribute requires prototypes with named arguments",
+                IDENTIFIER_POINTER (name));
+       *no_add_attrs = true;
+     }
+   else
+     {
+       while (TREE_CHAIN (params))
+ 	params = TREE_CHAIN (params);
+ 
+       if (VOID_TYPE_P (TREE_VALUE (params)))
+         {
+ 	  warning ("%qs attribute only applies to variadic functions",
+ 		   IDENTIFIER_POINTER (name));
+ 	  *no_add_attrs = true;
+ 	}
+     }
+   
+   if (args)
+     {
+       tree position = TREE_VALUE (args);
+ 
+       STRIP_NOPS (position);
+       if (TREE_CODE (position) != INTEGER_CST)
+         {
+ 	  warning ("requested position is not an integer constant");
+ 	  *no_add_attrs = true;
+ 	}
+       else
+         {
+ 	  if (tree_int_cst_lt (position, integer_zero_node))
+ 	    {
+ 	      warning ("requested position is less than zero");
+ 	      *no_add_attrs = true;
+ 	    }
+ 	}
+     }
+   
+   return NULL_TREE;
+ }
  
  /* Check for valid arguments being passed to a function.  */
  void
*************** check_function_arguments (tree attrs, tr
*** 5519,5525 ****
    /* Check for errors in format strings.  */
  
    if (warn_format)
!     check_function_format (NULL, attrs, params);
  }
  
  /* Generic argument checking recursion routine.  PARAM is the argument to
--- 5328,5337 ----
    /* Check for errors in format strings.  */
  
    if (warn_format)
!     {
!       check_function_format (attrs, params);
!       check_function_sentinel (attrs, params);
!     }
  }
  
  /* Generic argument checking recursion routine.  PARAM is the argument to
*************** check_function_arguments_recurse (void (
*** 5535,5541 ****
      {
        /* Strip coercion.  */
        check_function_arguments_recurse (callback, ctx,
! 				        TREE_OPERAND (param, 0), param_num);
        return;
      }
  
--- 5347,5353 ----
      {
        /* Strip coercion.  */
        check_function_arguments_recurse (callback, ctx,
! 					TREE_OPERAND (param, 0), param_num);
        return;
      }
  
*************** check_function_arguments_recurse (void (
*** 5567,5575 ****
  		   || TREE_CODE (format_num_expr) == NON_LVALUE_EXPR)
  	      format_num_expr = TREE_OPERAND (format_num_expr, 0);
  
! 	    if (TREE_CODE (format_num_expr) != INTEGER_CST
! 		|| TREE_INT_CST_HIGH (format_num_expr) != 0)
! 	      abort ();
  
  	    format_num = TREE_INT_CST_LOW (format_num_expr);
  
--- 5379,5386 ----
  		   || TREE_CODE (format_num_expr) == NON_LVALUE_EXPR)
  	      format_num_expr = TREE_OPERAND (format_num_expr, 0);
  
! 	    gcc_assert (TREE_CODE (format_num_expr) == INTEGER_CST
! 			&& !TREE_INT_CST_HIGH (format_num_expr));
  
  	    format_num = TREE_INT_CST_LOW (format_num_expr);
  
*************** check_function_arguments_recurse (void (
*** 5597,5605 ****
      {
        /* Check both halves of the conditional expression.  */
        check_function_arguments_recurse (callback, ctx,
! 				        TREE_OPERAND (param, 1), param_num);
        check_function_arguments_recurse (callback, ctx,
! 				        TREE_OPERAND (param, 2), param_num);
        return;
      }
  
--- 5408,5416 ----
      {
        /* Check both halves of the conditional expression.  */
        check_function_arguments_recurse (callback, ctx,
! 					TREE_OPERAND (param, 1), param_num);
        check_function_arguments_recurse (callback, ctx,
! 					TREE_OPERAND (param, 2), param_num);
        return;
      }
  
*************** check_function_arguments_recurse (void (
*** 5611,5618 ****
  int
  field_decl_cmp (const void *x_p, const void *y_p)
  {
!   const tree *const x = x_p;
!   const tree *const y = y_p;
    if (DECL_NAME (*x) == DECL_NAME (*y))
      /* A nontype is "greater" than a type.  */
      return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
--- 5422,5430 ----
  int
  field_decl_cmp (const void *x_p, const void *y_p)
  {
!   const tree *const x = (const tree *const) x_p;
!   const tree *const y = (const tree *const) y_p;
! 
    if (DECL_NAME (*x) == DECL_NAME (*y))
      /* A nontype is "greater" than a type.  */
      return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
*************** pointer operator in resort_data.  */
*** 5636,5643 ****
  static int
  resort_field_decl_cmp (const void *x_p, const void *y_p)
  {
!   const tree *const x = x_p;
!   const tree *const y = y_p;
  
    if (DECL_NAME (*x) == DECL_NAME (*y))
      /* A nontype is "greater" than a type.  */
--- 5448,5455 ----
  static int
  resort_field_decl_cmp (const void *x_p, const void *y_p)
  {
!   const tree *const x = (const tree *const) x_p;
!   const tree *const y = (const tree *const) y_p;
  
    if (DECL_NAME (*x) == DECL_NAME (*y))
      /* A nontype is "greater" than a type.  */
*************** resort_field_decl_cmp (const void *x_p, 
*** 5661,5865 ****
  
  void
  resort_sorted_fields (void *obj,
!                       void *orig_obj ATTRIBUTE_UNUSED ,
!                       gt_pointer_operator new_value,
!                       void *cookie)
  {
!   struct sorted_fields_type *sf = obj;
    resort_data.new_value = new_value;
    resort_data.cookie = cookie;
    qsort (&sf->elts[0], sf->len, sizeof (tree),
!          resort_field_decl_cmp);
  }
  
! /* Used by estimate_num_insns.  Estimate number of instructions seen
!    by given statement.  */
! static tree
! c_estimate_num_insns_1 (tree *tp, int *walk_subtrees, void *data)
  {
!   int *count = data;
!   tree x = *tp;
  
!   if (TYPE_P (x) || DECL_P (x))
      {
!       *walk_subtrees = 0;
!       return NULL;
      }
!   /* Assume that constants and references counts nothing.  These should
!      be majorized by amount of operations among them we count later
!      and are common target of CSE and similar optimizations.  */
!   if (TREE_CODE_CLASS (TREE_CODE (x)) == 'c'
!       || TREE_CODE_CLASS (TREE_CODE (x)) == 'r')
!     return NULL;
!   switch (TREE_CODE (x))
!     { 
!     /* Recognize assignments of large structures and constructors of
!        big arrays.  */
!     case MODIFY_EXPR:
!     case CONSTRUCTOR:
!       {
! 	HOST_WIDE_INT size;
  
! 	size = int_size_in_bytes (TREE_TYPE (x));
  
! 	if (size < 0 || size > MOVE_MAX_PIECES * MOVE_RATIO)
! 	  *count += 10;
! 	else
! 	  *count += ((size + MOVE_MAX_PIECES - 1) / MOVE_MAX_PIECES);
!       }
        break;
-     case CALL_EXPR:
-       {
- 	tree decl = get_callee_fndecl (x);
  
! 	if (decl && DECL_BUILT_IN (decl))
! 	  switch (DECL_FUNCTION_CODE (decl))
! 	    {
! 	    case BUILT_IN_CONSTANT_P:
! 	      *walk_subtrees = 0;
! 	      return NULL_TREE;
! 	    case BUILT_IN_EXPECT:
! 	      return NULL_TREE;
! 	    default:
! 	      break;
! 	    }
! 	*count += 10;
! 	break;
!       }
!     /* Few special cases of expensive operations.  This is usefull
!        to avoid inlining on functions having too many of these.  */
!     case TRUNC_DIV_EXPR:
!     case CEIL_DIV_EXPR:
!     case FLOOR_DIV_EXPR:
!     case ROUND_DIV_EXPR:
!     case TRUNC_MOD_EXPR:
!     case CEIL_MOD_EXPR:
!     case FLOOR_MOD_EXPR:
!     case ROUND_MOD_EXPR:
!     case RDIV_EXPR:
!       *count += 10;
        break;
-     /* Various containers that will produce no code themselves.  */
-     case INIT_EXPR:
-     case TARGET_EXPR:
      case BIND_EXPR:
!     case BLOCK:
!     case TREE_LIST:
!     case TREE_VEC:
!     case IDENTIFIER_NODE:
!     case PLACEHOLDER_EXPR:
!     case WITH_CLEANUP_EXPR:
!     case CLEANUP_POINT_EXPR:
!     case NOP_EXPR:
!     case VIEW_CONVERT_EXPR:
!     case SAVE_EXPR:
!     case UNSAVE_EXPR:
!     case COMPLEX_EXPR:
!     case REALPART_EXPR:
!     case IMAGPART_EXPR:
!     case TRY_CATCH_EXPR:
      case TRY_FINALLY_EXPR:
!     case LABEL_EXPR:
!     case EXIT_EXPR:
!     case LABELED_BLOCK_EXPR:
!     case EXIT_BLOCK_EXPR:
!     case EXPR_WITH_FILE_LOCATION:
  
!     case EXPR_STMT:
!     case COMPOUND_STMT:
!     case RETURN_STMT:
!     case LABEL_STMT:
!     case SCOPE_STMT:
!     case FILE_STMT:
!     case CASE_LABEL:
!     case STMT_EXPR:
!     case CLEANUP_STMT:
  
!     case SIZEOF_EXPR:
!     case ARROW_EXPR:
!     case ALIGNOF_EXPR:
!       break;
!     case DECL_STMT:
!       /* Do not account static initializers.  */
!       if (TREE_STATIC (TREE_OPERAND (x, 0)))
! 	*walk_subtrees = 0;
        break;
      default:
!       (*count)++;
      }
-   return NULL;
  }
  
! /*  Estimate number of instructions that will be created by expanding the body.  */
! int
! c_estimate_num_insns (tree decl)
  {
!   int num = 0;
!   walk_tree_without_duplicates (&DECL_SAVED_TREE (decl), c_estimate_num_insns_1, &num);
!   return num;
  }
  
! /* Used by c_decl_uninit to find where expressions like x = x + 1; */
  
  static tree
! c_decl_uninit_1 (tree *t, int *walk_sub_trees, void *x)
  {
!   /* If x = EXP(&x)EXP, then do not warn about the use of x.  */
!   if (TREE_CODE (*t) == ADDR_EXPR && TREE_OPERAND (*t, 0) == x)
      {
!       *walk_sub_trees = 0;
!       return NULL_TREE;
      }
!   if (*t == x)
!     return *t;
!   return NULL_TREE;
  }
  
! /* Find out if a variable is uninitialized based on DECL_INITIAL.  */
  
! bool
! c_decl_uninit (tree t)
  {
!   /* int x = x; is GCC extension to turn off this warning, only if warn_init_self is zero.  */
!   if (DECL_INITIAL (t) == t)
!     return warn_init_self ? true : false;
  
!   /* Walk the trees looking for the variable itself.  */
!   if (walk_tree_without_duplicates (&DECL_INITIAL (t), c_decl_uninit_1, t))
!     return true;
!   return false;
! }
  
! /* Issue the error given by MSGID, indicating that it occurred before
!    TOKEN, which had the associated VALUE.  */
  
! void
! c_parse_error (const char *msgid, enum cpp_ttype token, tree value)
  {
!   const char *string = _(msgid);
  
!   if (token == CPP_EOF)
!     error ("%s at end of input", string);
!   else if (token == CPP_CHAR || token == CPP_WCHAR)
      {
!       unsigned int val = TREE_INT_CST_LOW (value);
!       const char *const ell = (token == CPP_CHAR) ? "" : "L";
!       if (val <= UCHAR_MAX && ISGRAPH (val))
! 	error ("%s before %s'%c'", string, ell, val);
        else
! 	error ("%s before %s'\\x%x'", string, ell, val);
      }
-   else if (token == CPP_STRING
- 	   || token == CPP_WSTRING)
-     error ("%s before string constant", string);
-   else if (token == CPP_NUMBER)
-     error ("%s before numeric constant", string);
-   else if (token == CPP_NAME)
-     error ("%s before \"%s\"", string, IDENTIFIER_POINTER (value));
-   else if (token < N_TTYPES)
-     error ("%s before '%s' token", string, cpp_type2name (token));
    else
!     error ("%s", string);
  }
  
  #include "gt-c-common.h"
--- 5473,5842 ----
  
  void
  resort_sorted_fields (void *obj,
! 		      void * ARG_UNUSED (orig_obj),
! 		      gt_pointer_operator new_value,
! 		      void *cookie)
  {
!   struct sorted_fields_type *sf = (struct sorted_fields_type *) obj;
    resort_data.new_value = new_value;
    resort_data.cookie = cookie;
    qsort (&sf->elts[0], sf->len, sizeof (tree),
! 	 resort_field_decl_cmp);
  }
  
! /* Subroutine of c_parse_error.
!    Return the result of concatenating LHS and RHS. RHS is really
!    a string literal, its first character is indicated by RHS_START and
!    RHS_SIZE is its length (including the terminating NUL character).
! 
!    The caller is responsible for deleting the returned pointer.  */
! 
! static char *
! catenate_strings (const char *lhs, const char *rhs_start, int rhs_size)
  {
!   const int lhs_size = strlen (lhs);
!   char *result = XNEWVEC (char, lhs_size + rhs_size);
!   strncpy (result, lhs, lhs_size);
!   strncpy (result + lhs_size, rhs_start, rhs_size);
!   return result;
! }
  
! /* Issue the error given by MSGID, indicating that it occurred before
!    TOKEN, which had the associated VALUE.  */
! 
! void
! c_parse_error (const char *msgid, enum cpp_ttype token, tree value)
! {
! #define catenate_messages(M1, M2) catenate_strings ((M1), (M2), sizeof (M2))
! 
!   char *message = NULL;
! 
!   if (token == CPP_EOF)
!     message = catenate_messages (msgid, " at end of input");
!   else if (token == CPP_CHAR || token == CPP_WCHAR)
      {
!       unsigned int val = TREE_INT_CST_LOW (value);
!       const char *const ell = (token == CPP_CHAR) ? "" : "L";
!       if (val <= UCHAR_MAX && ISGRAPH (val))
!         message = catenate_messages (msgid, " before %s'%c'");
!       else
!         message = catenate_messages (msgid, " before %s'\\x%x'");
! 
!       error (message, ell, val);
!       free (message);
!       message = NULL;
      }
!   else if (token == CPP_STRING || token == CPP_WSTRING)
!     message = catenate_messages (msgid, " before string constant");
!   else if (token == CPP_NUMBER)
!     message = catenate_messages (msgid, " before numeric constant");
!   else if (token == CPP_NAME)
!     {
!       message = catenate_messages (msgid, " before %qs");
!       error (message, IDENTIFIER_POINTER (value));
!       free (message);
!       message = NULL;
!     }
!   else if (token < N_TTYPES)
!     {
!       message = catenate_messages (msgid, " before %qs token");
!       error (message, cpp_type2name (token));
!       free (message);
!       message = NULL;
!     }
!   else
!     error (msgid);
  
!   if (message)
!     {
!       error (message);
!       free (message);
!     }
! #undef catenate_messages  
! }
  
! /* Walk a gimplified function and warn for functions whose return value is
!    ignored and attribute((warn_unused_result)) is set.  This is done before
!    inlining, so we don't have to worry about that.  */
! 
! void
! c_warn_unused_result (tree *top_p)
! {
!   tree t = *top_p;
!   tree_stmt_iterator i;
!   tree fdecl, ftype;
! 
!   switch (TREE_CODE (t))
!     {
!     case STATEMENT_LIST:
!       for (i = tsi_start (*top_p); !tsi_end_p (i); tsi_next (&i))
! 	c_warn_unused_result (tsi_stmt_ptr (i));
        break;
  
!     case COND_EXPR:
!       c_warn_unused_result (&COND_EXPR_THEN (t));
!       c_warn_unused_result (&COND_EXPR_ELSE (t));
        break;
      case BIND_EXPR:
!       c_warn_unused_result (&BIND_EXPR_BODY (t));
!       break;
      case TRY_FINALLY_EXPR:
!     case TRY_CATCH_EXPR:
!       c_warn_unused_result (&TREE_OPERAND (t, 0));
!       c_warn_unused_result (&TREE_OPERAND (t, 1));
!       break;
!     case CATCH_EXPR:
!       c_warn_unused_result (&CATCH_BODY (t));
!       break;
!     case EH_FILTER_EXPR:
!       c_warn_unused_result (&EH_FILTER_FAILURE (t));
!       break;
  
!     case CALL_EXPR:
!       if (TREE_USED (t))
! 	break;
  
!       /* This is a naked call, as opposed to a CALL_EXPR nested inside
! 	 a MODIFY_EXPR.  All calls whose value is ignored should be
! 	 represented like this.  Look for the attribute.  */
!       fdecl = get_callee_fndecl (t);
!       if (fdecl)
! 	ftype = TREE_TYPE (fdecl);
!       else
! 	{
! 	  ftype = TREE_TYPE (TREE_OPERAND (t, 0));
! 	  /* Look past pointer-to-function to the function type itself.  */
! 	  ftype = TREE_TYPE (ftype);
! 	}
! 
!       if (lookup_attribute ("warn_unused_result", TYPE_ATTRIBUTES (ftype)))
! 	{
! 	  if (fdecl)
! 	    warning ("%Hignoring return value of %qD, "
! 		     "declared with attribute warn_unused_result",
! 		     EXPR_LOCUS (t), fdecl);
! 	  else
! 	    warning ("%Hignoring return value of function "
! 		     "declared with attribute warn_unused_result",
! 		     EXPR_LOCUS (t));
! 	}
        break;
+ 
      default:
!       /* Not a container, not a call, or a call whose value is used.  */
!       break;
      }
  }
  
! /* Convert a character from the host to the target execution character
!    set.  cpplib handles this, mostly.  */
! 
! HOST_WIDE_INT
! c_common_to_target_charset (HOST_WIDE_INT c)
  {
!   /* Character constants in GCC proper are sign-extended under -fsigned-char,
!      zero-extended under -fno-signed-char.  cpplib insists that characters
!      and character constants are always unsigned.  Hence we must convert
!      back and forth.  */
!   cppchar_t uc = ((cppchar_t)c) & ((((cppchar_t)1) << CHAR_BIT)-1);
! 
!   uc = cpp_host_to_exec_charset (parse_in, uc);
! 
!   if (flag_signed_char)
!     return ((HOST_WIDE_INT)uc) << (HOST_BITS_PER_WIDE_INT - CHAR_TYPE_SIZE)
! 			       >> (HOST_BITS_PER_WIDE_INT - CHAR_TYPE_SIZE);
!   else
!     return uc;
  }
  
! /* Build the result of __builtin_offsetof.  EXPR is a nested sequence of
!    component references, with an INDIRECT_REF at the bottom; much like
!    the traditional rendering of offsetof as a macro.  Returns the folded
!    and properly cast result.  */
  
  static tree
! fold_offsetof_1 (tree expr)
  {
!   enum tree_code code = PLUS_EXPR;
!   tree base, off, t;
! 
!   switch (TREE_CODE (expr))
      {
!     case ERROR_MARK:
!       return expr;
! 
!     case INDIRECT_REF:
!       return size_zero_node;
! 
!     case COMPONENT_REF:
!       base = fold_offsetof_1 (TREE_OPERAND (expr, 0));
!       if (base == error_mark_node)
! 	return base;
! 
!       t = TREE_OPERAND (expr, 1);
!       if (DECL_C_BIT_FIELD (t))
! 	{
! 	  error ("attempt to take address of bit-field structure "
! 		 "member %qs", IDENTIFIER_POINTER (DECL_NAME (t)));
! 	  return error_mark_node;
! 	}
!       off = size_binop (PLUS_EXPR, DECL_FIELD_OFFSET (t),
! 			size_int (tree_low_cst (DECL_FIELD_BIT_OFFSET (t), 1)
! 				  / BITS_PER_UNIT));
!       break;
! 
!     case ARRAY_REF:
!       base = fold_offsetof_1 (TREE_OPERAND (expr, 0));
!       if (base == error_mark_node)
! 	return base;
! 
!       t = TREE_OPERAND (expr, 1);
!       if (TREE_CODE (t) == INTEGER_CST && tree_int_cst_sgn (t) < 0)
! 	{
! 	  code = MINUS_EXPR;
! 	  t = fold (build1 (NEGATE_EXPR, TREE_TYPE (t), t));
! 	}
!       t = convert (sizetype, t);
!       off = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (TREE_TYPE (expr)), t);
!       break;
! 
!     default:
!       gcc_unreachable ();
      }
! 
!   return size_binop (code, base, off);
  }
  
! tree
! fold_offsetof (tree expr)
! {
!   /* Convert back from the internal sizetype to size_t.  */
!   return convert (size_type_node, fold_offsetof_1 (expr));
! }
  
! /* Return nonzero if REF is an lvalue valid for this language;
!    otherwise, print an error message and return zero.  USE says
!    how the lvalue is being used and so selects the error message.  */
! 
! int
! lvalue_or_else (tree ref, enum lvalue_use use)
  {
!   int win = lvalue_p (ref);
  
!   if (!win)
!     {
!       switch (use)
! 	{
! 	case lv_assign:
! 	  error ("invalid lvalue in assignment");
! 	  break;
! 	case lv_increment:
! 	  error ("invalid lvalue in increment");
! 	  break;
! 	case lv_decrement:
! 	  error ("invalid lvalue in decrement");
! 	  break;
! 	case lv_addressof:
! 	  error ("invalid lvalue in unary %<&%>");
! 	  break;
! 	case lv_asm:
! 	  error ("invalid lvalue in asm statement");
! 	  break;
! 	default:
! 	  gcc_unreachable ();
! 	}
!     }
  
!   return win;
! }
! 
! /* *PTYPE is an incomplete array.  Complete it with a domain based on
!    INITIAL_VALUE.  If INITIAL_VALUE is not present, use 1 if DO_DEFAULT
!    is true.  Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
!    2 if INITIAL_VALUE was NULL, and 3 if INITIAL_VALUE was empty.  */
  
! int
! complete_array_type (tree *ptype, tree initial_value, bool do_default)
  {
!   tree maxindex, type, main_type, elt, unqual_elt;
!   int failure = 0, quals;
  
!   maxindex = size_zero_node;
!   if (initial_value)
      {
!       if (TREE_CODE (initial_value) == STRING_CST)
! 	{
! 	  int eltsize
! 	    = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
! 	  maxindex = size_int (TREE_STRING_LENGTH (initial_value)/eltsize - 1);
! 	}
!       else if (TREE_CODE (initial_value) == CONSTRUCTOR)
! 	{
! 	  tree elts = CONSTRUCTOR_ELTS (initial_value);
! 
! 	  if (elts == NULL)
! 	    {
! 	      if (pedantic)
! 		failure = 3;
! 	      maxindex = integer_minus_one_node;
! 	    }
! 	  else
! 	    {
! 	      tree curindex;
! 
! 	      if (TREE_PURPOSE (elts))
! 		maxindex = fold_convert (sizetype, TREE_PURPOSE (elts));
! 	      curindex = maxindex;
! 
! 	      for (elts = TREE_CHAIN (elts); elts; elts = TREE_CHAIN (elts))
! 		{
! 		  if (TREE_PURPOSE (elts))
! 		    curindex = fold_convert (sizetype, TREE_PURPOSE (elts));
! 		  else
! 		    curindex = size_binop (PLUS_EXPR, curindex, size_one_node);
! 
! 		  if (tree_int_cst_lt (maxindex, curindex))
! 		    maxindex = curindex;
! 		}
! 	    }
! 	}
        else
! 	{
! 	  /* Make an error message unless that happened already.  */
! 	  if (initial_value != error_mark_node)
! 	    failure = 1;
! 	}
      }
    else
!     {
!       failure = 2;
!       if (!do_default)
! 	return failure;
!     }
! 
!   type = *ptype;
!   elt = TREE_TYPE (type);
!   quals = TYPE_QUALS (strip_array_types (elt));
!   if (quals == 0)
!     unqual_elt = elt;
!   else
!     unqual_elt = c_build_qualified_type (elt, TYPE_UNQUALIFIED);
! 
!   /* Using build_distinct_type_copy and modifying things afterward instead
!      of using build_array_type to create a new type preserves all of the
!      TYPE_LANG_FLAG_? bits that the front end may have set.  */
!   main_type = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
!   TREE_TYPE (main_type) = unqual_elt;
!   TYPE_DOMAIN (main_type) = build_index_type (maxindex);
!   layout_type (main_type);
! 
!   if (quals == 0)
!     type = main_type;
!   else
!     type = c_build_qualified_type (main_type, quals);
! 
!   *ptype = type;
!   return failure;
  }
  
  #include "gt-c-common.h"
diff -Nrcpad gcc-3.4.3/gcc/c-common.def gcc-4.0.0/gcc/c-common.def
*** gcc-3.4.3/gcc/c-common.def	Mon Apr  7 06:03:09 2003
--- gcc-4.0.0/gcc/c-common.def	Thu Jan 27 18:22:19 2005
***************
*** 2,8 ****
     additional tree codes used in the GNU C++ compiler (see tree.def
     for the standard codes).
     Copyright (C) 1987, 1988, 1990, 1993, 1997, 1998,
!    1999, 2000, 2001 Free Software Foundation, Inc.
     Written by Benjamin Chelf <chelf@codesourcery.com>
  
  This file is part of GCC.
--- 2,8 ----
     additional tree codes used in the GNU C++ compiler (see tree.def
     for the standard codes).
     Copyright (C) 1987, 1988, 1990, 1993, 1997, 1998,
!    1999, 2000, 2001, 2004, 2005 Free Software Foundation, Inc.
     Written by Benjamin Chelf <chelf@codesourcery.com>
  
  This file is part of GCC.
*************** Software Foundation, 59 Temple Place - S
*** 25,119 ****
  /* Tree nodes relevant to both C and C++. These were originally in
  cp-tree.def in the cp subdir.  */
  
! DEFTREECODE (SIZEOF_EXPR, "sizeof_expr", '1', 1)
! DEFTREECODE (ARROW_EXPR, "arrow_expr", 'e', 1)
! DEFTREECODE (ALIGNOF_EXPR, "alignof_expr", '1', 1)
  
  /* Used to represent an expression statement.  Use `EXPR_STMT_EXPR' to
     obtain the expression.  */
! DEFTREECODE (EXPR_STMT, "expr_stmt", 'e', 1)
! 
! /* Used to represent a brace-enclosed block.  The operand is
!    COMPOUND_BODY.  */
! DEFTREECODE (COMPOUND_STMT, "compound_stmt", 'e', 1)
! 
! /* Used to represent a local declaration. The operand is
!    DECL_STMT_DECL.  */
! DEFTREECODE (DECL_STMT, "decl_stmt", 'e', 1)
! 
! /* Represents an 'if' statement. The operands are IF_COND,
!    THEN_CLAUSE, and ELSE_CLAUSE, respectively.  */
! DEFTREECODE (IF_STMT, "if_stmt", 'e', 3)
  
  /* Used to represent a `for' statement. The operands are
     FOR_INIT_STMT, FOR_COND, FOR_EXPR, and FOR_BODY, respectively.  */
! DEFTREECODE (FOR_STMT, "for_stmt", 'e', 4)
  
  /* Used to represent a 'while' statement. The operands are WHILE_COND
     and WHILE_BODY, respectively.  */
! DEFTREECODE (WHILE_STMT, "while_stmt", 'e', 2)
  
  /* Used to represent a 'do' statement. The operands are DO_BODY and
     DO_COND, respectively.  */
! DEFTREECODE (DO_STMT, "do_stmt", 'e', 2)
! 
! /* Used to represent a 'return' statement. The operand is
!    RETURN_STMT_EXPR.  */
! DEFTREECODE (RETURN_STMT, "return_stmt", 'e', 1)
  
  /* Used to represent a 'break' statement.  */
! DEFTREECODE (BREAK_STMT, "break_stmt", 'e', 0)
  
  /* Used to represent a 'continue' statement.  */
! DEFTREECODE (CONTINUE_STMT, "continue_stmt", 'e', 0)
  
  /* Used to represent a 'switch' statement. The operands are
!    SWITCH_COND, SWITCH_BODY and SWITCH_TYPE, respectively.  */
! DEFTREECODE (SWITCH_STMT, "switch_stmt", 'e', 3)
! 
! /* Used to represent a 'goto' statement. The operand is GOTO_DESTINATION.  */
! DEFTREECODE (GOTO_STMT, "goto_stmt", 'e', 1)
! 
! /* Used to represent a 'label' statement. The operand is a LABEL_DECL
!    and can be obtained through the macro LABEL_STMT_LABEL.  */
! DEFTREECODE (LABEL_STMT, "label_stmt", 'e', 1)
! 
! /* Used to represent an inline assembly statement.  */
! DEFTREECODE (ASM_STMT, "asm_stmt", 'e', 5)
! 
! /* A SCOPE_STMT marks the beginning or end of a scope.  If
!    SCOPE_BEGIN_P holds, then this is the start of a scope.  If
!    SCOPE_END_P holds, then this is the end of a scope.  If
!    SCOPE_NULLIFIED_P holds then there turned out to be no variables in
!    this scope.  The SCOPE_STMT_BLOCK is the BLOCK containing the
!    variables declared in this scope.  */
! DEFTREECODE (SCOPE_STMT, "scope_stmt", 'e', 1)
! 
! /* A FILE_STMT marks the spot where a function changes files.  It has no
!    other semantics.  FILE_STMT_FILENAME gives the name.  */
! DEFTREECODE (FILE_STMT, "file_stmt", 'e', 1)
! 
! /* Used to represent a CASE_LABEL. The operands are CASE_LOW and
!    CASE_HIGH, respectively. If CASE_LOW is NULL_TREE, the label is a
!    'default' label. If CASE_HIGH is NULL_TREE, the label is a normal case
!    label.  The CASE_LABEL_DECL is a LABEL_DECL for this node.  */
! DEFTREECODE (CASE_LABEL, "case_label", 'e', 3)
  
  /* A STMT_EXPR represents a statement-expression.  The
     STMT_EXPR_STMT is the statement given by the expression.  */
! DEFTREECODE (STMT_EXPR, "stmt_expr", 'e', 1)
  
  /* A COMPOUND_LITERAL_EXPR represents a C99 compound literal.  The
     COMPOUND_LITERAL_EXPR_DECL_STMT is the a DECL_STMT containing the decl
     for the anonymous object represented by the COMPOUND_LITERAL;
     the DECL_INITIAL of that decl is the CONSTRUCTOR that initializes
     the compound literal.  */
! DEFTREECODE (COMPOUND_LITERAL_EXPR, "compound_literal_expr", 'e', 1)
! 
! /* A CLEANUP_STMT marks the point at which a declaration is fully
!    constructed.  If, after this point, the CLEANUP_DECL goes out of
!    scope, the CLEANUP_EXPR must be run.  */
! DEFTREECODE (CLEANUP_STMT, "cleanup_stmt", 'e', 2)
  
  /*
  Local variables:
--- 25,70 ----
  /* Tree nodes relevant to both C and C++. These were originally in
  cp-tree.def in the cp subdir.  */
  
! DEFTREECODE (SIZEOF_EXPR, "sizeof_expr", tcc_unary, 1)
! DEFTREECODE (ARROW_EXPR, "arrow_expr", tcc_expression, 1)
! DEFTREECODE (ALIGNOF_EXPR, "alignof_expr", tcc_unary, 1)
  
  /* Used to represent an expression statement.  Use `EXPR_STMT_EXPR' to
     obtain the expression.  */
! DEFTREECODE (EXPR_STMT, "expr_stmt", tcc_expression, 1)
  
  /* Used to represent a `for' statement. The operands are
     FOR_INIT_STMT, FOR_COND, FOR_EXPR, and FOR_BODY, respectively.  */
! DEFTREECODE (FOR_STMT, "for_stmt", tcc_expression, 4)
  
  /* Used to represent a 'while' statement. The operands are WHILE_COND
     and WHILE_BODY, respectively.  */
! DEFTREECODE (WHILE_STMT, "while_stmt", tcc_expression, 2)
  
  /* Used to represent a 'do' statement. The operands are DO_BODY and
     DO_COND, respectively.  */
! DEFTREECODE (DO_STMT, "do_stmt", tcc_expression, 2)
  
  /* Used to represent a 'break' statement.  */
! DEFTREECODE (BREAK_STMT, "break_stmt", tcc_expression, 0)
  
  /* Used to represent a 'continue' statement.  */
! DEFTREECODE (CONTINUE_STMT, "continue_stmt", tcc_expression, 0)
  
  /* Used to represent a 'switch' statement. The operands are
!    SWITCH_STMT_COND, SWITCH_STMT_BODY and SWITCH_STMT_TYPE, respectively.  */
! DEFTREECODE (SWITCH_STMT, "switch_stmt", tcc_expression, 3)
  
  /* A STMT_EXPR represents a statement-expression.  The
     STMT_EXPR_STMT is the statement given by the expression.  */
! DEFTREECODE (STMT_EXPR, "stmt_expr", tcc_expression, 1)
  
  /* A COMPOUND_LITERAL_EXPR represents a C99 compound literal.  The
     COMPOUND_LITERAL_EXPR_DECL_STMT is the a DECL_STMT containing the decl
     for the anonymous object represented by the COMPOUND_LITERAL;
     the DECL_INITIAL of that decl is the CONSTRUCTOR that initializes
     the compound literal.  */
! DEFTREECODE (COMPOUND_LITERAL_EXPR, "compound_literal_expr", tcc_expression, 1)
  
  /*
  Local variables:
diff -Nrcpad gcc-3.4.3/gcc/c-common.h gcc-4.0.0/gcc/c-common.h
*** gcc-3.4.3/gcc/c-common.h	Wed Feb 18 00:09:01 2004
--- gcc-4.0.0/gcc/c-common.h	Wed Mar 30 01:38:07 2005
***************
*** 1,6 ****
  /* Definitions for c-common.c.
     Copyright (C) 1987, 1993, 1994, 1995, 1997, 1998,
!    1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
--- 1,6 ----
  /* Definitions for c-common.c.
     Copyright (C) 1987, 1993, 1994, 1995, 1997, 1998,
!    1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
*************** Software Foundation, 59 Temple Place - S
*** 27,47 ****
  #include "ggc.h"
  
  /* Usage of TREE_LANG_FLAG_?:
!    0: COMPOUND_STMT_NO_SCOPE (in COMPOUND_STMT).
!       TREE_NEGATED_INT (in INTEGER_CST).
        IDENTIFIER_MARKED (used by search routines).
-       SCOPE_BEGIN_P (in SCOPE_STMT)
        DECL_PRETTY_FUNCTION_P (in VAR_DECL)
-       NEW_FOR_SCOPE_P (in FOR_STMT)
-       ASM_INPUT_P (in ASM_STMT)
        STMT_EXPR_NO_SCOPE (in STMT_EXPR)
     1: C_DECLARED_LABEL_FLAG (in LABEL_DECL)
        STMT_IS_FULL_EXPR_P (in _STMT)
!    2: STMT_LINENO_FOR_FN_P (in _STMT)
!    3: SCOPE_NO_CLEANUPS_P (in SCOPE_STMT)
!       COMPOUND_STMT_BODY_BLOCK (in COMPOUND_STMT)
!       STMT_EXPR_WARN_UNUSED_RESULT (in STMT_EXPR)
!    4: SCOPE_PARTIAL_P (in SCOPE_STMT)
  */
  
  /* Reserved identifiers.  This is the union of all the keywords for C,
--- 27,42 ----
  #include "ggc.h"
  
  /* Usage of TREE_LANG_FLAG_?:
!    0: TREE_NEGATED_INT (in INTEGER_CST).
        IDENTIFIER_MARKED (used by search routines).
        DECL_PRETTY_FUNCTION_P (in VAR_DECL)
        STMT_EXPR_NO_SCOPE (in STMT_EXPR)
     1: C_DECLARED_LABEL_FLAG (in LABEL_DECL)
        STMT_IS_FULL_EXPR_P (in _STMT)
!       STATEMENT_LIST_STMT_EXPR (in STATEMENT_LIST)
!    2: unused
!    3: STATEMENT_LIST_HAS_LABEL (in STATEMENT_LIST)
!    4: unused
  */
  
  /* Reserved identifiers.  This is the union of all the keywords for C,
*************** enum rid
*** 77,84 ****
  
    /* C extensions */
    RID_ASM,       RID_TYPEOF,   RID_ALIGNOF,  RID_ATTRIBUTE,  RID_VA_ARG,
!   RID_EXTENSION, RID_IMAGPART, RID_REALPART, RID_LABEL,      RID_PTRBASE,
!   RID_PTREXTENT, RID_PTRVALUE, RID_CHOOSE_EXPR, RID_TYPES_COMPATIBLE_P,
  
    /* Too many ways of getting the name of a function as a string */
    RID_FUNCTION_NAME, RID_PRETTY_FUNCTION_NAME, RID_C99_FUNCTION_NAME,
--- 72,79 ----
  
    /* C extensions */
    RID_ASM,       RID_TYPEOF,   RID_ALIGNOF,  RID_ATTRIBUTE,  RID_VA_ARG,
!   RID_EXTENSION, RID_IMAGPART, RID_REALPART, RID_LABEL,      RID_CHOOSE_EXPR,
!   RID_TYPES_COMPATIBLE_P,
  
    /* Too many ways of getting the name of a function as a string */
    RID_FUNCTION_NAME, RID_PRETTY_FUNCTION_NAME, RID_C99_FUNCTION_NAME,
*************** enum rid
*** 97,103 ****
    RID_CONSTCAST, RID_DYNCAST, RID_REINTCAST, RID_STATCAST,
  
    /* Objective-C */
!   RID_ID,          RID_AT_ENCODE,    RID_AT_END,
    RID_AT_CLASS,    RID_AT_ALIAS,     RID_AT_DEFS,
    RID_AT_PRIVATE,  RID_AT_PROTECTED, RID_AT_PUBLIC,
    RID_AT_PROTOCOL, RID_AT_SELECTOR,  
--- 92,98 ----
    RID_CONSTCAST, RID_DYNCAST, RID_REINTCAST, RID_STATCAST,
  
    /* Objective-C */
!   RID_AT_ENCODE,   RID_AT_END,
    RID_AT_CLASS,    RID_AT_ALIAS,     RID_AT_DEFS,
    RID_AT_PRIVATE,  RID_AT_PROTECTED, RID_AT_PUBLIC,
    RID_AT_PROTOCOL, RID_AT_SELECTOR,  
*************** enum rid
*** 118,133 ****
  };
  
  #define OBJC_IS_AT_KEYWORD(rid) \
!   ((unsigned int)(rid) >= (unsigned int)RID_FIRST_AT && \
!    (unsigned int)(rid) <= (unsigned int)RID_LAST_AT)
  
  #define OBJC_IS_PQ_KEYWORD(rid) \
!   ((unsigned int)(rid) >= (unsigned int)RID_FIRST_PQ && \
!    (unsigned int)(rid) <= (unsigned int)RID_LAST_PQ)
  
  /* The elements of `ridpointers' are identifier nodes for the reserved
     type names and storage classes.  It is indexed by a RID_... value.  */
! extern GTY ((length ("(int)RID_MAX"))) tree *ridpointers;
  
  /* Standard named or nameless data types of the C compiler.  */
  
--- 113,128 ----
  };
  
  #define OBJC_IS_AT_KEYWORD(rid) \
!   ((unsigned int) (rid) >= (unsigned int) RID_FIRST_AT && \
!    (unsigned int) (rid) <= (unsigned int) RID_LAST_AT)
  
  #define OBJC_IS_PQ_KEYWORD(rid) \
!   ((unsigned int) (rid) >= (unsigned int) RID_FIRST_PQ && \
!    (unsigned int) (rid) <= (unsigned int) RID_LAST_PQ)
  
  /* The elements of `ridpointers' are identifier nodes for the reserved
     type names and storage classes.  It is indexed by a RID_... value.  */
! extern GTY ((length ("(int) RID_MAX"))) tree *ridpointers;
  
  /* Standard named or nameless data types of the C compiler.  */
  
*************** enum c_tree_index
*** 157,167 ****
  
      CTI_DEFAULT_FUNCTION_TYPE,
  
-     CTI_G77_INTEGER_TYPE,
-     CTI_G77_UINTEGER_TYPE,
-     CTI_G77_LONGINT_TYPE,
-     CTI_G77_ULONGINT_TYPE,
- 
      /* These are not types, but we have to look them up all the time.  */
      CTI_FUNCTION_NAME_DECL,
      CTI_PRETTY_FUNCTION_NAME_DECL,
--- 152,157 ----
*************** struct c_common_identifier GTY(())
*** 206,217 ****
  
  #define default_function_type		c_global_trees[CTI_DEFAULT_FUNCTION_TYPE]
  
- /* g77 integer types, which which must be kept in sync with f/com.h */
- #define g77_integer_type_node		c_global_trees[CTI_G77_INTEGER_TYPE]
- #define g77_uinteger_type_node		c_global_trees[CTI_G77_UINTEGER_TYPE]
- #define g77_longint_type_node		c_global_trees[CTI_G77_LONGINT_TYPE]
- #define g77_ulongint_type_node		c_global_trees[CTI_G77_ULONGINT_TYPE]
- 
  #define function_name_decl_node		c_global_trees[CTI_FUNCTION_NAME_DECL]
  #define pretty_function_name_decl_node	c_global_trees[CTI_PRETTY_FUNCTION_NAME_DECL]
  #define c99_function_name_decl_node		c_global_trees[CTI_C99_FUNCTION_NAME_DECL]
--- 196,201 ----
*************** extern c_language_kind c_language;
*** 257,269 ****
  /* Information about a statement tree.  */
  
  struct stmt_tree_s GTY(()) {
!   /* The last statement added to the tree.  */
!   tree x_last_stmt;
!   /* The type of the last expression statement.  (This information is
!      needed to implement the statement-expression extension.)  */
!   tree x_last_expr_type;
!   /* The last filename we recorded.  */
!   const char *x_last_expr_filename;
    /* In C++, Nonzero if we should treat statements as full
       expressions.  In particular, this variable is no-zero if at the
       end of a statement we should destroy any temporaries created
--- 241,249 ----
  /* Information about a statement tree.  */
  
  struct stmt_tree_s GTY(()) {
!   /* The current statement list being collected.  */
!   tree x_cur_stmt_list;
! 
    /* In C++, Nonzero if we should treat statements as full
       expressions.  In particular, this variable is no-zero if at the
       end of a statement we should destroy any temporaries created
*************** struct c_language_function GTY(()) {
*** 290,353 ****
    /* While we are parsing the function, this contains information
       about the statement-tree that we are building.  */
    struct stmt_tree_s x_stmt_tree;
-   /* The stack of SCOPE_STMTs for the current function.  */
-   tree x_scope_stmt_stack;
  };
  
! /* When building a statement-tree, this is the last statement added to
!    the tree.  */
! 
! #define last_tree (current_stmt_tree ()->x_last_stmt)
! 
! /* The type of the last expression-statement we have seen.  */
! 
! #define last_expr_type (current_stmt_tree ()->x_last_expr_type)
! 
! /* The name of the last file we have seen.  */
! 
! #define last_expr_filename (current_stmt_tree ()->x_last_expr_filename)
! 
! /* LAST_TREE contains the last statement parsed.  These are chained
!    together through the TREE_CHAIN field, but often need to be
!    re-organized since the parse is performed bottom-up.  This macro
!    makes LAST_TREE the indicated SUBSTMT of STMT.  */
  
! #define RECHAIN_STMTS(stmt, substmt)		\
!   do {						\
!     substmt = TREE_CHAIN (stmt);		\
!     TREE_CHAIN (stmt) = NULL_TREE;		\
!     last_tree = stmt;				\
!   } while (0)
  
  /* Language-specific hooks.  */
  
- extern void (*lang_expand_stmt) (tree);
- extern void (*lang_expand_decl_stmt) (tree);
- extern void (*lang_expand_function_end) (void);
- 
  /* Callback that determines if it's ok for a function to have no
     noreturn attribute.  */
  extern int (*lang_missing_noreturn_ok_p) (tree);
  
  extern int yyparse (void);
  extern stmt_tree current_stmt_tree (void);
! extern tree *current_scope_stmt_stack (void);
! extern void begin_stmt_tree (tree *);
  extern tree add_stmt (tree);
! extern void add_decl_stmt (tree);
! extern tree add_scope_stmt (int, int);
! extern void finish_stmt_tree (tree *);
  
! extern tree walk_stmt_tree (tree *, walk_tree_fn, void *);
! extern void prep_stmt (tree);
! extern void expand_stmt (tree);
! extern tree c_begin_if_stmt (void);
! extern tree c_begin_while_stmt (void);
! extern void c_finish_while_stmt_cond (tree, tree);
  
  extern int field_decl_cmp (const void *, const void *);
  extern void resort_sorted_fields (void *, void *, gt_pointer_operator, 
                                    void *);
  
  /* Switches common to the C front ends.  */
  
--- 270,308 ----
    /* While we are parsing the function, this contains information
       about the statement-tree that we are building.  */
    struct stmt_tree_s x_stmt_tree;
  };
  
! /* When building a statement-tree, this is the current statement list
!    being collected.  It's TREE_CHAIN is a back-pointer to the previous
!    statement list.  */
  
! #define cur_stmt_list (current_stmt_tree ()->x_cur_stmt_list)
  
  /* Language-specific hooks.  */
  
  /* Callback that determines if it's ok for a function to have no
     noreturn attribute.  */
  extern int (*lang_missing_noreturn_ok_p) (tree);
  
+ /* If non-NULL, this function is called after a precompile header file
+    is loaded.  */
+ extern void (*lang_post_pch_load) (void);
+ 
+ extern void push_file_scope (void);
+ extern void pop_file_scope (void);
  extern int yyparse (void);
  extern stmt_tree current_stmt_tree (void);
! extern tree push_stmt_list (void);
! extern tree pop_stmt_list (tree);
  extern tree add_stmt (tree);
! extern void push_cleanup (tree, tree, bool);
  
! extern int c_expand_decl (tree);
  
  extern int field_decl_cmp (const void *, const void *);
  extern void resort_sorted_fields (void *, void *, gt_pointer_operator, 
                                    void *);
+ extern bool has_c_linkage (tree decl);
  
  /* Switches common to the C front ends.  */
  
*************** extern int flag_nil_receivers;
*** 364,369 ****
--- 319,327 ----
     @try, etc.) in source code.  */
  extern int flag_objc_exceptions;
  
+ /* Nonzero means that we generate NeXT setjmp based exceptions.  */
+ extern int flag_objc_sjlj_exceptions;
+ 
  /* Nonzero means that code generation will be altered to support
     "zero-link" execution.  This currently affects ObjC only, but may
     affect other languages in the future.  */
*************** extern char flag_dump_macros;
*** 392,397 ****
--- 350,359 ----
  
  extern char flag_dump_includes;
  
+ /* Nonzero means process PCH files while preprocessing.  */
+ 
+ extern bool flag_pch_preprocess;
+ 
  /* The file name to which we should write a precompiled header, or
     NULL if no header will be written in this compile.  */
  
*************** extern int flag_const_strings;
*** 439,504 ****
  /* Nonzero means to treat bitfields as signed unless they say `unsigned'.  */
  
  extern int flag_signed_bitfields;
- extern int explicit_flag_signed_bitfields;
- 
- /* Nonzero means warn about pointer casts that can drop a type qualifier
-    from the pointer target type.  */
- 
- extern int warn_cast_qual;
- 
- /* Warn about functions which might be candidates for format attributes.  */
- 
- extern int warn_missing_format_attribute;
- 
- /* Nonzero means warn about sizeof(function) or addition/subtraction
-    of function pointers.  */
- 
- extern int warn_pointer_arith;
- 
- /* Nonzero means warn for any global function def
-    without separate previous prototype decl.  */
- 
- extern int warn_missing_prototypes;
- 
- /* Warn if adding () is suggested.  */
- 
- extern int warn_parentheses;
- 
- /* Warn if initializer is not completely bracketed.  */
- 
- extern int warn_missing_braces;
- 
- /* Warn about comparison of signed and unsigned values.
-    If -1, neither -Wsign-compare nor -Wno-sign-compare has been specified.  */
- 
- extern int warn_sign_compare;
- 
- /* Nonzero means warn about usage of long long when `-pedantic'.  */
- 
- extern int warn_long_long;
  
  /* Nonzero means warn about deprecated conversion from string constant to
     `char *'.  */
  
  extern int warn_write_strings;
  
- /* Nonzero means warn about multiple (redundant) decls for the same single
-    variable or function.  */
- 
- extern int warn_redundant_decls;
- 
- /* Warn about testing equality of floating point numbers.  */
- 
- extern int warn_float_equal;
- 
- /* Warn about a subscript that has type char.  */
- 
- extern int warn_char_subscripts;
- 
- /* Warn if a type conversion is done that might have confusing results.  */
- 
- extern int warn_conversion;
- 
  /* Warn about #pragma directives that are not recognized.  */      
  
  extern int warn_unknown_pragmas; /* Tri state variable.  */  
--- 401,412 ----
*************** extern int warn_unknown_pragmas; /* Tri 
*** 508,542 ****
  
  extern int warn_format;
  
- /* Warn about Y2K problems with strftime formats.  */
- 
- extern int warn_format_y2k;
- 
- /* Warn about excess arguments to formats.  */
- 
- extern int warn_format_extra_args;
- 
- /* Warn about zero-length formats.  */
- 
- extern int warn_format_zero_length;
- 
- /* Warn about non-literal format arguments.  */
- 
- extern int warn_format_nonliteral;
- 
- /* Warn about possible security problems with calls to format functions.  */
- 
- extern int warn_format_security;
- 
  
  /* C/ObjC language option variables.  */
  
  
- /* Nonzero means message about use of implicit function declarations;
-  1 means warning; 2 means error.  */
- 
- extern int mesg_implicit_function_declaration;
- 
  /* Nonzero means allow type mismatches in conditional expressions;
     just make their values `void'.  */
  
--- 416,425 ----
*************** extern int flag_isoc99;
*** 554,621 ****
  
  extern int flag_hosted;
  
- /* Nonzero means warn when casting a function call to a type that does
-    not match the return type (e.g. (float)sqrt() or (anything*)malloc()
-    when there is no previous declaration of sqrt or malloc.  */
- 
- extern int warn_bad_function_cast;
- 
- /* Warn about traditional constructs whose meanings changed in ANSI C.  */
- 
- extern int warn_traditional;
- 
- /* Nonzero means warn for a declaration found after a statement.  */
- 
- extern int warn_declaration_after_statement;
- 
- /* Nonzero means warn for non-prototype function decls
-    or non-prototyped defs without previous prototype.  */
- 
- extern int warn_strict_prototypes;
- 
- /* Nonzero means warn for any global function def
-    without separate previous decl.  */
- 
- extern int warn_missing_declarations;
- 
- /* Nonzero means warn about extern declarations of objects not at
-    file-scope level and about *all* declarations of functions (whether
-    extern or static) not at file-scope level.  Note that we exclude
-    implicit function declarations.  To get warnings about those, use
-    -Wimplicit.  */
- 
- extern int warn_nested_externs;
- 
  /* Warn if main is suspicious.  */
  
  extern int warn_main;
  
- /* Nonzero means warn about possible violations of sequence point rules.  */
- 
- extern int warn_sequence_point;
- 
- /* Nonzero means warn about uninitialized variable when it is initialized with itself. 
-    For example: int i = i;, GCC will not warn about this when warn_init_self is nonzero.  */
- 
- extern int warn_init_self;
- 
- 
- /* Nonzero means to warn about compile-time division by zero.  */
- extern int warn_div_by_zero;
- 
- /* Nonzero means warn about use of implicit int.  */
- 
- extern int warn_implicit_int;
- 
- /* Warn about NULL being passed to argument slots marked as requiring
-    non-NULL.  */ 
-       
- extern int warn_nonnull;
- 
- /* Warn about old-style parameter declaration.  */
- 
- extern int warn_old_style_definition;
- 
  
  /* ObjC language option variables.  */
  
--- 437,446 ----
*************** extern int print_struct_values;
*** 639,663 ****
  
  extern const char *constant_string_class_name;
  
- /* Warn if multiple methods are seen for the same selector, but with
-    different argument types.  Performs the check on the whole selector
-    table at the end of compilation.  */
- 
- extern int warn_selector;
- 
- /* Warn if a @selector() is found, and no method with that selector
-    has been previously declared.  The check is done on each
-    @selector() as soon as it is found - so it warns about forward
-    declarations.  */
- 
- extern int warn_undeclared_selector;
- 
- /* Warn if methods required by a protocol are not implemented in the 
-    class adopting it.  When turned off, methods inherited to that
-    class are also considered implemented.  */
- 
- extern int warn_protocol;
- 
  
  /* C++ language option variables.  */
  
--- 464,469 ----
*************** extern int flag_permissive;
*** 760,829 ****
  
  extern int flag_enforce_eh_specs;
  
! /* Nonzero means warn about things that will change when compiling
!    with an ABI-compliant compiler.  */
! 
! extern int warn_abi;
  
! /* Nonzero means warn about invalid uses of offsetof.  */
!  
! extern int warn_invalid_offsetof;
  
  /* Nonzero means warn about implicit declarations.  */
  
  extern int warn_implicit;
  
- /* Nonzero means warn when all ctors or dtors are private, and the class
-    has no friends.  */
- 
- extern int warn_ctor_dtor_privacy;
- 
- /* Nonzero means warn in function declared in derived class has the
-    same name as a virtual in the base class, but fails to match the
-    type signature of any virtual function in the base class.  */
- 
- extern int warn_overloaded_virtual;
- 
- /* Nonzero means warn when declaring a class that has a non virtual
-    destructor, when it really ought to have a virtual one.  */
- 
- extern int warn_nonvdtor;
- 
- /* Nonzero means warn when the compiler will reorder code.  */
- 
- extern int warn_reorder;
- 
- /* Nonzero means warn when synthesis behavior differs from Cfront's.  */
- 
- extern int warn_synth;
- 
- /* Nonzero means warn when we convert a pointer to member function
-    into a pointer to (void or function).  */
- 
- extern int warn_pmf2ptr;
- 
- /* Nonzero means warn about violation of some Effective C++ style rules.  */
- 
- extern int warn_ecpp;
- 
- /* Nonzero means warn where overload resolution chooses a promotion from
-    unsigned to signed over a conversion to an unsigned of the same size.  */
- 
- extern int warn_sign_promo;
- 
- /* Nonzero means warn when an old-style cast is used.  */
- 
- extern int warn_old_style_cast;
- 
- /* Nonzero means warn when non-templatized friend functions are
-    declared within a template */
- 
- extern int warn_nontemplate_friend;
- 
- /* Nonzero means complain about deprecated features.  */
- 
- extern int warn_deprecated;
- 
  /* Maximum template instantiation depth.  This limit is rather
     arbitrary, but it exists to limit the time it takes to notice
     infinite template instantiations.  */
--- 566,580 ----
  
  extern int flag_enforce_eh_specs;
  
! /* Nonzero (the default) means to generate thread-safe code for
!    initializing local statics.  */
  
! extern int flag_threadsafe_statics;
  
  /* Nonzero means warn about implicit declarations.  */
  
  extern int warn_implicit;
  
  /* Maximum template instantiation depth.  This limit is rather
     arbitrary, but it exists to limit the time it takes to notice
     infinite template instantiations.  */
*************** extern int skip_evaluation;
*** 851,860 ****
  #define C_TYPE_OBJECT_OR_INCOMPLETE_P(type) \
    (!C_TYPE_FUNCTION_P (type))
  
- /* Record in each node resulting from a binary operator
-    what operator was specified for it.  */
- #define C_EXP_ORIGINAL_CODE(exp) ((enum tree_code) TREE_COMPLEXITY (exp))
- 
  /* Attribute table common to the C front ends.  */
  extern const struct attribute_spec c_common_attribute_table[];
  extern const struct attribute_spec c_common_format_attribute_table[];
--- 602,607 ----
*************** extern void check_function_arguments_rec
*** 880,886 ****
  					       unsigned HOST_WIDE_INT),
  					      void *, tree,
  					      unsigned HOST_WIDE_INT);
! extern void check_function_format (int *, tree, tree);
  extern void set_Wformat (int);
  extern tree handle_format_attribute (tree *, tree, tree, int, bool *);
  extern tree handle_format_arg_attribute (tree *, tree, tree, int, bool *);
--- 627,633 ----
  					       unsigned HOST_WIDE_INT),
  					      void *, tree,
  					      unsigned HOST_WIDE_INT);
! extern void check_function_format (tree, tree);
  extern void set_Wformat (int);
  extern tree handle_format_attribute (tree *, tree, tree, int, bool *);
  extern tree handle_format_arg_attribute (tree *, tree, tree, int, bool *);
*************** extern tree c_alignof_expr (tree);
*** 898,924 ****
  /* Print an error message for invalid operands to arith operation CODE.
     NOP_EXPR is used as a special case (see truthvalue_conversion).  */
  extern void binary_op_error (enum tree_code);
- #define my_friendly_assert(EXP, N) (void) \
-  (((EXP) == 0) ? (fancy_abort (__FILE__, __LINE__, __FUNCTION__), 0) : 0)
- 
- extern tree c_expand_expr_stmt (tree);
- extern void c_expand_start_cond (tree, int, tree);
- extern void c_finish_then (void);
- extern void c_expand_start_else (void);
- extern void c_finish_else (void);
- extern void c_expand_end_cond (void);
- /* Validate the expression after `case' and apply default promotions.  */
- extern tree check_case_value (tree);
  extern tree fix_string_type (tree);
  struct varray_head_tag;
  extern void constant_expression_warning (tree);
  extern tree convert_and_check (tree, tree);
  extern void overflow_warning (tree);
  extern void unsigned_conversion_warning (tree, tree);
  
- /* Read the rest of the current #-directive line.  */
- extern char *get_directive_line (void);
- #define GET_DIRECTIVE_LINE() get_directive_line ()
  #define c_sizeof(T)  c_sizeof_or_alignof_type (T, SIZEOF_EXPR, 1)
  #define c_alignof(T) c_sizeof_or_alignof_type (T, ALIGNOF_EXPR, 1)
  
--- 645,658 ----
  /* Print an error message for invalid operands to arith operation CODE.
     NOP_EXPR is used as a special case (see truthvalue_conversion).  */
  extern void binary_op_error (enum tree_code);
  extern tree fix_string_type (tree);
  struct varray_head_tag;
  extern void constant_expression_warning (tree);
  extern tree convert_and_check (tree, tree);
  extern void overflow_warning (tree);
  extern void unsigned_conversion_warning (tree, tree);
+ extern bool c_determine_visibility (tree);
  
  #define c_sizeof(T)  c_sizeof_or_alignof_type (T, SIZEOF_EXPR, 1)
  #define c_alignof(T) c_sizeof_or_alignof_type (T, ALIGNOF_EXPR, 1)
  
*************** extern tree c_build_qualified_type (tree
*** 937,942 ****
--- 671,678 ----
     frontends.  */
  extern void c_common_nodes_and_builtins (void);
  
+ extern void set_builtin_user_assembler_name (tree decl, const char *asmspec);
+ 
  extern void disable_builtin_function (const char *);
  
  extern tree build_va_arg (tree, tree);
*************** extern bool c_promoting_integer_type_p (
*** 952,966 ****
  extern int self_promoting_args_p (tree);
  extern tree strip_array_types (tree);
  extern tree strip_pointer_operator (tree);
  
- /* This function resets the parsers' state in preparation for parsing
-    a new file.  */
- extern void c_reset_state (void);
  /* This is the basic parsing function.  */
  extern void c_parse_file (void);
  /* This is misnamed, it actually performs end-of-compilation processing.  */
  extern void finish_file	(void);
  
  /* These macros provide convenient access to the various _STMT nodes.  */
  
  /* Nonzero if this statement should be considered a full-expression,
--- 688,701 ----
  extern int self_promoting_args_p (tree);
  extern tree strip_array_types (tree);
  extern tree strip_pointer_operator (tree);
+ extern HOST_WIDE_INT c_common_to_target_charset (HOST_WIDE_INT);
  
  /* This is the basic parsing function.  */
  extern void c_parse_file (void);
  /* This is misnamed, it actually performs end-of-compilation processing.  */
  extern void finish_file	(void);
  
+ 
  /* These macros provide convenient access to the various _STMT nodes.  */
  
  /* Nonzero if this statement should be considered a full-expression,
*************** extern void finish_file	(void);
*** 969,980 ****
     will always be false, since there are no destructors.)  */
  #define STMT_IS_FULL_EXPR_P(NODE) TREE_LANG_FLAG_1 ((NODE))
  
! /* IF_STMT accessors. These give access to the condition of the if
!    statement, the then block of the if statement, and the else block
!    of the if statement if it exists.  */
! #define IF_COND(NODE)           TREE_OPERAND (IF_STMT_CHECK (NODE), 0)
! #define THEN_CLAUSE(NODE)       TREE_OPERAND (IF_STMT_CHECK (NODE), 1)
! #define ELSE_CLAUSE(NODE)       TREE_OPERAND (IF_STMT_CHECK (NODE), 2)
  
  /* WHILE_STMT accessors. These give access to the condition of the
     while statement and the body of the while statement, respectively.  */
--- 704,717 ----
     will always be false, since there are no destructors.)  */
  #define STMT_IS_FULL_EXPR_P(NODE) TREE_LANG_FLAG_1 ((NODE))
  
! /* Nonzero if a given STATEMENT_LIST represents the outermost binding
!    if a statement expression.  */
! #define STATEMENT_LIST_STMT_EXPR(NODE) \
!   TREE_LANG_FLAG_1 (STATEMENT_LIST_CHECK (NODE))
! 
! /* Nonzero if a label has been added to the statement list.  */
! #define STATEMENT_LIST_HAS_LABEL(NODE) \
!   TREE_LANG_FLAG_3 (STATEMENT_LIST_CHECK (NODE))
  
  /* WHILE_STMT accessors. These give access to the condition of the
     while statement and the body of the while statement, respectively.  */
*************** extern void finish_file	(void);
*** 986,996 ****
  #define DO_COND(NODE)           TREE_OPERAND (DO_STMT_CHECK (NODE), 0)
  #define DO_BODY(NODE)           TREE_OPERAND (DO_STMT_CHECK (NODE), 1)
  
- /* RETURN_STMT accessors. These give the expression associated with a
-    return statement, and whether it should be ignored when expanding
-    (as opposed to inlining).  */
- #define RETURN_STMT_EXPR(NODE)  TREE_OPERAND (RETURN_STMT_CHECK (NODE), 0)
- 
  /* EXPR_STMT accessor. This gives the expression associated with an
     expression statement.  */
  #define EXPR_STMT_EXPR(NODE)    TREE_OPERAND (EXPR_STMT_CHECK (NODE), 0)
--- 723,728 ----
*************** extern void finish_file	(void);
*** 1003,1046 ****
  #define FOR_EXPR(NODE)          TREE_OPERAND (FOR_STMT_CHECK (NODE), 2)
  #define FOR_BODY(NODE)          TREE_OPERAND (FOR_STMT_CHECK (NODE), 3)
  
! /* SWITCH_STMT accessors. These give access to the condition, body and
!    original condition type (before any compiler conversions)
!    of the switch statement, respectively.  */
! #define SWITCH_COND(NODE)       TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 0)
! #define SWITCH_BODY(NODE)       TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 1)
! #define SWITCH_TYPE(NODE)	TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 2)
! 
! /* CASE_LABEL accessors. These give access to the high and low values
!    of a case label, respectively.  */
! #define CASE_LOW(NODE)          TREE_OPERAND (CASE_LABEL_CHECK (NODE), 0)
! #define CASE_HIGH(NODE)         TREE_OPERAND (CASE_LABEL_CHECK (NODE), 1)
! #define CASE_LABEL_DECL(NODE)   TREE_OPERAND (CASE_LABEL_CHECK (NODE), 2)
! 
! /* GOTO_STMT accessor. This gives access to the label associated with
!    a goto statement.  */
! #define GOTO_DESTINATION(NODE)  TREE_OPERAND (GOTO_STMT_CHECK (NODE), 0)
! /* True for goto created artificially by the compiler.  */
! #define GOTO_FAKE_P(NODE)	(TREE_LANG_FLAG_0 (GOTO_STMT_CHECK (NODE)))
! 
! /* COMPOUND_STMT accessor. This gives access to the TREE_LIST of
!    statements associated with a compound statement. The result is the
!    first statement in the list. Succeeding nodes can be accessed by
!    calling TREE_CHAIN on a node in the list.  */
! #define COMPOUND_BODY(NODE)     TREE_OPERAND (COMPOUND_STMT_CHECK (NODE), 0)
! 
! /* ASM_STMT accessors. ASM_STRING returns a STRING_CST for the
!    instruction (e.g., "mov x, y"). ASM_OUTPUTS, ASM_INPUTS, and
!    ASM_CLOBBERS represent the outputs, inputs, and clobbers for the
!    statement.  */
! #define ASM_CV_QUAL(NODE)       TREE_OPERAND (ASM_STMT_CHECK (NODE), 0)
! #define ASM_STRING(NODE)        TREE_OPERAND (ASM_STMT_CHECK (NODE), 1)
! #define ASM_OUTPUTS(NODE)       TREE_OPERAND (ASM_STMT_CHECK (NODE), 2)
! #define ASM_INPUTS(NODE)        TREE_OPERAND (ASM_STMT_CHECK (NODE), 3)
! #define ASM_CLOBBERS(NODE)      TREE_OPERAND (ASM_STMT_CHECK (NODE), 4)
! 
! /* DECL_STMT accessor. This gives access to the DECL associated with
!    the given declaration statement.  */
! #define DECL_STMT_DECL(NODE)    TREE_OPERAND (DECL_STMT_CHECK (NODE), 0)
  
  /* STMT_EXPR accessor.  */
  #define STMT_EXPR_STMT(NODE)    TREE_OPERAND (STMT_EXPR_CHECK (NODE), 0)
--- 735,743 ----
  #define FOR_EXPR(NODE)          TREE_OPERAND (FOR_STMT_CHECK (NODE), 2)
  #define FOR_BODY(NODE)          TREE_OPERAND (FOR_STMT_CHECK (NODE), 3)
  
! #define SWITCH_STMT_COND(NODE)	TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 0)
! #define SWITCH_STMT_BODY(NODE)	TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 1)
! #define SWITCH_STMT_TYPE(NODE)	TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 2)
  
  /* STMT_EXPR accessor.  */
  #define STMT_EXPR_STMT(NODE)    TREE_OPERAND (STMT_EXPR_CHECK (NODE), 0)
*************** extern void finish_file	(void);
*** 1049,1141 ****
  #define STMT_EXPR_NO_SCOPE(NODE) \
     TREE_LANG_FLAG_0 (STMT_EXPR_CHECK (NODE))
  
- /* Nonzero if this statement-expression should cause warning if its result
-    is not used.  */
- #define STMT_EXPR_WARN_UNUSED_RESULT(NODE) \
-    TREE_LANG_FLAG_3 (STMT_EXPR_CHECK (NODE))
- 
- /* LABEL_STMT accessor. This gives access to the label associated with
-    the given label statement.  */
- #define LABEL_STMT_LABEL(NODE)  TREE_OPERAND (LABEL_STMT_CHECK (NODE), 0)
- 
  /* COMPOUND_LITERAL_EXPR accessors.  */
  #define COMPOUND_LITERAL_EXPR_DECL_STMT(NODE)		\
    TREE_OPERAND (COMPOUND_LITERAL_EXPR_CHECK (NODE), 0)
  #define COMPOUND_LITERAL_EXPR_DECL(NODE)			\
!   DECL_STMT_DECL (COMPOUND_LITERAL_EXPR_DECL_STMT (NODE))
! 
! /* Nonzero if this SCOPE_STMT is for the beginning of a scope.  */
! #define SCOPE_BEGIN_P(NODE) \
!   (TREE_LANG_FLAG_0 (SCOPE_STMT_CHECK (NODE)))
! 
! /* Nonzero if this SCOPE_STMT is for the end of a scope.  */
! #define SCOPE_END_P(NODE) \
!   (!SCOPE_BEGIN_P (SCOPE_STMT_CHECK (NODE)))
! 
! /* The BLOCK containing the declarations contained in this scope.  */
! #define SCOPE_STMT_BLOCK(NODE) \
!   (TREE_OPERAND (SCOPE_STMT_CHECK (NODE), 0))
! 
! /* Nonzero for a SCOPE_STMT if there were no variables in this scope.  */
! #define SCOPE_NULLIFIED_P(NODE) \
!   (SCOPE_STMT_BLOCK ((NODE)) == NULL_TREE)
! 
! /* Nonzero for a SCOPE_STMT which represents a lexical scope, but
!    which should be treated as non-existent from the point of view of
!    running cleanup actions.  */
! #define SCOPE_NO_CLEANUPS_P(NODE) \
!   (TREE_LANG_FLAG_3 (SCOPE_STMT_CHECK (NODE)))
! 
! /* Nonzero for a SCOPE_STMT if this statement is for a partial scope.
!    For example, in:
! 
!      S s;
!      l:
!      S s2;
!      goto l;
! 
!    there is (implicitly) a new scope after `l', even though there are
!    no curly braces.  In particular, when we hit the goto, we must
!    destroy s2 and then re-construct it.  For the implicit scope,
!    SCOPE_PARTIAL_P will be set.  */
! #define SCOPE_PARTIAL_P(NODE) \
!   (TREE_LANG_FLAG_4 (SCOPE_STMT_CHECK (NODE)))
! 
! /* Nonzero for an ASM_STMT if the assembly statement is volatile.  */
! #define ASM_VOLATILE_P(NODE)			\
!   (ASM_CV_QUAL (ASM_STMT_CHECK (NODE)) != NULL_TREE)
! 
! /* The VAR_DECL to clean up in a CLEANUP_STMT.  */
! #define CLEANUP_DECL(NODE) \
!   TREE_OPERAND (CLEANUP_STMT_CHECK (NODE), 0)
! /* The cleanup to run in a CLEANUP_STMT.  */
! #define CLEANUP_EXPR(NODE) \
!   TREE_OPERAND (CLEANUP_STMT_CHECK (NODE), 1)
! 
! /* The filename we are changing to as of this FILE_STMT.  */
! #define FILE_STMT_FILENAME_NODE(NODE) \
!   (TREE_OPERAND (FILE_STMT_CHECK (NODE), 0))
! #define FILE_STMT_FILENAME(NODE) \
!   (IDENTIFIER_POINTER (FILE_STMT_FILENAME_NODE (NODE)))
! 
! /* The line-number at which a statement began.  But if
!    STMT_LINENO_FOR_FN_P does holds, then this macro gives the
!    line number for the end of the current function instead.  */
! #define STMT_LINENO(NODE)			\
!   (TREE_COMPLEXITY ((NODE)))
! 
! /* If nonzero, the STMT_LINENO for NODE is the line at which the
!    function ended.  */
! #define STMT_LINENO_FOR_FN_P(NODE)		\
!   (TREE_LANG_FLAG_2 ((NODE)))
! 
! /* Nonzero if we want the new ISO rules for pushing a new scope for `for'
!    initialization variables.  */
! #define NEW_FOR_SCOPE_P(NODE) (TREE_LANG_FLAG_0 (NODE))
! 
! /* Nonzero if we want to create an ASM_INPUT instead of an
!    ASM_OPERAND with no operands.  */
! #define ASM_INPUT_P(NODE) (TREE_LANG_FLAG_0 (NODE))
  
  #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) SYM,
  
--- 746,756 ----
  #define STMT_EXPR_NO_SCOPE(NODE) \
     TREE_LANG_FLAG_0 (STMT_EXPR_CHECK (NODE))
  
  /* COMPOUND_LITERAL_EXPR accessors.  */
  #define COMPOUND_LITERAL_EXPR_DECL_STMT(NODE)		\
    TREE_OPERAND (COMPOUND_LITERAL_EXPR_CHECK (NODE), 0)
  #define COMPOUND_LITERAL_EXPR_DECL(NODE)			\
!   DECL_EXPR_DECL (COMPOUND_LITERAL_EXPR_DECL_STMT (NODE))
  
  #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) SYM,
  
*************** enum c_tree_code {
*** 1148,1159 ****
  #undef DEFTREECODE
  
  #define c_common_stmt_codes				\
!    CLEANUP_STMT,	EXPR_STMT,	COMPOUND_STMT,	\
!    DECL_STMT,		IF_STMT,	FOR_STMT,	\
!    WHILE_STMT,		DO_STMT,	RETURN_STMT,	\
!    BREAK_STMT,		CONTINUE_STMT,	SCOPE_STMT,	\
!    SWITCH_STMT,		GOTO_STMT,	LABEL_STMT,	\
!    ASM_STMT,		FILE_STMT,	CASE_LABEL
  
  /* TRUE if a code represents a statement.  The front end init
     langhook should take care of initialization of this array.  */
--- 763,771 ----
  #undef DEFTREECODE
  
  #define c_common_stmt_codes				\
!    EXPR_STMT,		FOR_STMT,			\
!    WHILE_STMT,		DO_STMT,			\
!    BREAK_STMT,		CONTINUE_STMT,	SWITCH_STMT
  
  /* TRUE if a code represents a statement.  The front end init
     langhook should take care of initialization of this array.  */
*************** extern bool statement_code_p[MAX_TREE_CO
*** 1169,1192 ****
        statement_code_p[STMT_CODES[i]] = true;			\
    } while (0)
  
- extern void genrtl_do_pushlevel (void);
- extern void genrtl_goto_stmt (tree);
- extern void genrtl_expr_stmt (tree);
- extern void genrtl_expr_stmt_value (tree, int, int);
- extern void genrtl_decl_stmt (tree);
- extern void genrtl_if_stmt (tree);
- extern void genrtl_while_stmt (tree);
- extern void genrtl_do_stmt (tree);
- extern void genrtl_return_stmt (tree);
- extern void genrtl_for_stmt (tree);
- extern void genrtl_break_stmt (void);
- extern void genrtl_continue_stmt (void);
- extern void genrtl_scope_stmt (tree);
- extern void genrtl_switch_stmt (tree);
- extern void genrtl_case_label (tree);
- extern void genrtl_compound_stmt (tree);
- extern void genrtl_asm_stmt (tree, tree, tree, tree, tree, int);
- extern void genrtl_cleanup_stmt (tree);
  extern int stmts_are_full_exprs_p (void);
  extern int anon_aggr_type_p (tree);
  
--- 781,786 ----
*************** extern int anon_aggr_type_p (tree);
*** 1202,1229 ****
  #define CLEAR_DECL_C_BIT_FIELD(NODE) \
    (DECL_LANG_FLAG_4 (FIELD_DECL_CHECK (NODE)) = 0)
  
- /* In a VAR_DECL, nonzero if the decl is a register variable with
-    an explicit asm specification.  */
- #define DECL_C_HARD_REGISTER(DECL)  DECL_LANG_FLAG_4 (VAR_DECL_CHECK (DECL))
- 
  extern void emit_local_var (tree);
- extern void make_rtl_for_local_static (tree);
- extern tree expand_cond (tree);
- extern tree c_expand_return (tree);
  extern tree do_case (tree, tree);
  extern tree build_stmt (enum tree_code, ...);
  extern tree build_case_label (tree, tree, tree);
  extern tree build_continue_stmt (void);
  extern tree build_break_stmt (void);
- extern tree build_return_stmt (tree);
- 
- #define COMPOUND_STMT_NO_SCOPE(NODE)	TREE_LANG_FLAG_0 (NODE)
- 
- /* Used by the C++ frontend to mark the block around the member
-    initializers and cleanups.  */
- #define COMPOUND_STMT_BODY_BLOCK(NODE)	TREE_LANG_FLAG_3 (NODE)
- 
- extern void c_expand_asm_operands (tree, tree, tree, tree, int, location_t);
  
  /* These functions must be defined by each front-end which implements
     a variant of the C language.  They are used in c-common.c.  */
--- 796,807 ----
*************** extern tree default_conversion (tree);
*** 1238,1257 ****
  
  extern tree common_type (tree, tree);
  
- extern tree expand_tree_builtin (tree, tree, tree);
- 
  extern tree decl_constant_value (tree);
  
  /* Handle increment and decrement of boolean types.  */
  extern tree boolean_increment (enum tree_code, tree);
  
- /* Hook currently used only by the C++ front end to reset internal state
-    after entering or leaving a header file.  */
- extern void extract_interface_info (void);
- 
  extern int case_compare (splay_tree_key, splay_tree_key);
  
! extern tree c_add_case_label (splay_tree, tree, tree, tree);
  
  extern tree build_function_call (tree, tree);
  
--- 816,831 ----
  
  extern tree common_type (tree, tree);
  
  extern tree decl_constant_value (tree);
  
  /* Handle increment and decrement of boolean types.  */
  extern tree boolean_increment (enum tree_code, tree);
  
  extern int case_compare (splay_tree_key, splay_tree_key);
  
! extern tree c_add_case_label (splay_tree, tree, tree, tree, tree);
! 
! extern void c_do_switch_warnings (splay_tree, tree);
  
  extern tree build_function_call (tree, tree);
  
*************** extern tree finish_label_address_expr (t
*** 1261,1273 ****
     different implementations.  Used in c-common.c.  */
  extern tree lookup_label (tree);
  
! extern rtx c_expand_expr (tree, rtx, enum machine_mode, int, rtx *);
! 
! extern int c_safe_from_p (rtx, tree);
  
! extern int c_staticp (tree);
  
! extern int c_common_unsafe_for_reeval (tree);
  
  extern void init_c_lex (void);
  
--- 835,845 ----
     different implementations.  Used in c-common.c.  */
  extern tree lookup_label (tree);
  
! extern int vector_types_convertible_p (tree t1, tree t2);
  
! extern rtx c_expand_expr (tree, rtx, enum machine_mode, int, rtx *);
  
! extern tree c_staticp (tree);
  
  extern void init_c_lex (void);
  
*************** extern void c_cpp_builtins (cpp_reader *
*** 1275,1288 ****
  
  /* Positive if an implicit `extern "C"' scope has just been entered;
     negative if such a scope has just been exited.  */
! extern int pending_lang_change;
  
  /* Information recorded about each file examined during compilation.  */
  
  struct c_fileinfo
  {
    int time;	/* Time spent in the file.  */
!   short interface_only;		/* Flags - used only by C++ */
    short interface_unknown;
  };
  
--- 847,867 ----
  
  /* Positive if an implicit `extern "C"' scope has just been entered;
     negative if such a scope has just been exited.  */
! extern GTY(()) int pending_lang_change;
  
  /* Information recorded about each file examined during compilation.  */
  
  struct c_fileinfo
  {
    int time;	/* Time spent in the file.  */
! 
!   /* Flags used only by C++.
!      INTERFACE_ONLY nonzero means that we are in an "interface" section
!      of the compiler.  INTERFACE_UNKNOWN nonzero means we cannot trust
!      the value of INTERFACE_ONLY.  If INTERFACE_UNKNOWN is zero and
!      INTERFACE_ONLY is zero, it means that we are responsible for
!      exporting definitions that others might need.  */
!   short interface_only;
    short interface_unknown;
  };
  
*************** extern void dump_time_statistics (void);
*** 1291,1320 ****
  
  extern bool c_dump_tree (void *, tree);
  
  extern void pch_init (void);
  extern int c_common_valid_pch (cpp_reader *pfile, const char *name, int fd);
  extern void c_common_read_pch (cpp_reader *pfile, const char *name, int fd,
  			       const char *orig);
  extern void c_common_write_pch (void);
  extern void c_common_no_more_pch (void);
  extern void builtin_define_with_value (const char *, const char *, int);
  extern void c_stddef_cpp_builtins (void);
  extern void fe_file_change (const struct line_map *);
- extern int c_estimate_num_insns (tree decl);
- extern bool c_decl_uninit (tree t);
  extern void c_parse_error (const char *, enum cpp_ttype, tree);
  
! /* The following have been moved here from c-tree.h, since they're needed
!    in the ObjC++ world, too.  What is more, stub-objc.c could use a few
!    prototypes.  */
! extern tree lookup_interface (tree);
! extern tree is_class_name (tree);
  extern tree objc_is_object_ptr (tree);
  extern void objc_check_decl (tree);
  extern int objc_comptypes (tree, tree, int);
  extern tree objc_message_selector (void);
! extern tree lookup_objc_ivar (tree);
! extern void *get_current_scope (void);
  extern void objc_mark_locals_volatile (void *);
  
  /* In c-ppoutput.c  */
--- 870,971 ----
  
  extern bool c_dump_tree (void *, tree);
  
+ extern void c_warn_unused_result (tree *);
+ 
+ extern void verify_sequence_points (tree);
+ 
+ extern tree fold_offsetof (tree);
+ 
+ /* Places where an lvalue, or modifiable lvalue, may be required.
+    Used to select diagnostic messages in lvalue_or_else and
+    readonly_error.  */
+ enum lvalue_use {
+   lv_assign,
+   lv_increment,
+   lv_decrement,
+   lv_addressof,
+   lv_asm
+ };
+ 
+ extern int lvalue_or_else (tree, enum lvalue_use);
+ 
+ extern int complete_array_type (tree *, tree, bool);
+ 
+ /* In c-gimplify.c  */
+ extern void c_genericize (tree);
+ extern int c_gimplify_expr (tree *, tree *, tree *);
+ extern tree c_build_bind_expr (tree, tree);
+ 
+ /* In c-pch.c  */
  extern void pch_init (void);
  extern int c_common_valid_pch (cpp_reader *pfile, const char *name, int fd);
  extern void c_common_read_pch (cpp_reader *pfile, const char *name, int fd,
  			       const char *orig);
  extern void c_common_write_pch (void);
  extern void c_common_no_more_pch (void);
+ extern void c_common_pch_pragma (cpp_reader *pfile);
+ 
  extern void builtin_define_with_value (const char *, const char *, int);
  extern void c_stddef_cpp_builtins (void);
  extern void fe_file_change (const struct line_map *);
  extern void c_parse_error (const char *, enum cpp_ttype, tree);
  
! /* Objective-C / Objective-C++ entry points.  */
! 
! /* The following ObjC/ObjC++ functions are called by the C and/or C++
!    front-ends; they all must have corresponding stubs in stub-objc.c.  */
! extern tree objc_is_class_name (tree);
  extern tree objc_is_object_ptr (tree);
  extern void objc_check_decl (tree);
+ extern int objc_is_reserved_word (tree);
  extern int objc_comptypes (tree, tree, int);
  extern tree objc_message_selector (void);
! extern tree objc_lookup_ivar (tree, tree);
! extern void objc_clear_super_receiver (void);
! extern int objc_is_public (tree, tree);
! extern tree objc_is_id (tree);
! extern void objc_declare_alias (tree, tree);
! extern void objc_declare_class (tree);
! extern void objc_declare_protocols (tree);
! extern tree objc_build_message_expr (tree);
! extern tree objc_finish_message_expr (tree, tree, tree);
! extern tree objc_build_selector_expr (tree);
! extern tree objc_build_protocol_expr (tree);
! extern tree objc_build_encode_expr (tree);
! extern tree objc_build_string_object (tree);
! extern tree objc_get_protocol_qualified_type (tree, tree);
! extern tree objc_get_class_reference (tree);
! extern tree objc_get_class_ivars (tree);
! extern void objc_start_class_interface (tree, tree, tree);
! extern void objc_start_category_interface (tree, tree, tree);
! extern void objc_start_protocol (tree, tree);
! extern void objc_continue_interface (void);
! extern void objc_finish_interface (void);
! extern void objc_start_class_implementation (tree, tree);
! extern void objc_start_category_implementation (tree, tree);
! extern void objc_continue_implementation (void);
! extern void objc_finish_implementation (void);
! extern void objc_set_visibility (int);
! extern void objc_set_method_type (enum tree_code);
! extern tree objc_build_method_signature (tree, tree, tree);
! extern void objc_add_method_declaration (tree);
! extern void objc_start_method_definition (tree);
! extern void objc_finish_method_definition (tree);
! extern void objc_add_instance_variable (tree);
! extern tree objc_build_keyword_decl (tree, tree, tree);
! extern tree objc_build_throw_stmt (tree);
! extern void objc_begin_try_stmt (location_t, tree);
! extern void objc_finish_try_stmt (void);
! extern void objc_begin_catch_clause (tree);
! extern void objc_finish_catch_clause (void);
! extern void objc_build_finally_clause (location_t, tree);
! extern void objc_build_synchronized (location_t, tree, tree);
! extern int objc_static_init_needed_p (void);
! extern tree objc_generate_static_init_call (tree);
! 
! /* The following are provided by the C and C++ front-ends, and called by
!    ObjC/ObjC++.  */
! extern void *objc_get_current_scope (void);
  extern void objc_mark_locals_volatile (void *);
  
  /* In c-ppoutput.c  */
diff -Nrcpad gcc-3.4.3/gcc/c-convert.c gcc-4.0.0/gcc/c-convert.c
*** gcc-3.4.3/gcc/c-convert.c	Thu Jun 19 19:43:58 2003
--- gcc-4.0.0/gcc/c-convert.c	Thu May 13 06:39:28 2004
***************
*** 1,5 ****
  /* Language-level data type conversion for GNU C.
!    Copyright (C) 1987, 1988, 1991, 1998, 2002, 2003
     Free Software Foundation, Inc.
  
  This file is part of GCC.
--- 1,5 ----
  /* Language-level data type conversion for GNU C.
!    Copyright (C) 1987, 1988, 1991, 1998, 2002, 2003, 2004
     Free Software Foundation, Inc.
  
  This file is part of GCC.
*************** Software Foundation, 59 Temple Place - S
*** 33,38 ****
--- 33,39 ----
  #include "flags.h"
  #include "convert.h"
  #include "c-common.h"
+ #include "langhooks.h"
  #include "toplev.h"
  
  /* Change of width--truncation and extension of integers or reals--
*************** convert (tree type, tree expr)
*** 94,100 ****
      return fold (convert_to_integer (type, e));
    if (code == BOOLEAN_TYPE)
      {
!       tree t = c_common_truthvalue_conversion (expr);
        /* If it returns a NOP_EXPR, we must fold it here to avoid
  	 infinite recursion between fold () and convert ().  */
        if (TREE_CODE (t) == NOP_EXPR)
--- 95,104 ----
      return fold (convert_to_integer (type, e));
    if (code == BOOLEAN_TYPE)
      {
!       tree t = lang_hooks.truthvalue_conversion (expr);
!       if (TREE_CODE (t) == ERROR_MARK)
! 	return t;
! 
        /* If it returns a NOP_EXPR, we must fold it here to avoid
  	 infinite recursion between fold () and convert ().  */
        if (TREE_CODE (t) == NOP_EXPR)
*************** convert (tree type, tree expr)
*** 110,115 ****
--- 114,122 ----
      return fold (convert_to_complex (type, e));
    if (code == VECTOR_TYPE)
      return fold (convert_to_vector (type, e));
+   if ((code == RECORD_TYPE || code == UNION_TYPE)
+       && lang_hooks.types_compatible_p (type, TREE_TYPE (expr)))
+       return e;
  
    error ("conversion to non-scalar type requested");
    return error_mark_node;
diff -Nrcpad gcc-3.4.3/gcc/c-cppbuiltin.c gcc-4.0.0/gcc/c-cppbuiltin.c
*** gcc-3.4.3/gcc/c-cppbuiltin.c	Thu Mar  4 10:24:54 2004
--- gcc-4.0.0/gcc/c-cppbuiltin.c	Fri Jan 21 16:57:02 2005
***************
*** 1,5 ****
  /* Define builtin-in macros for the C family front ends.
!    Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
--- 1,5 ----
  /* Define builtin-in macros for the C family front ends.
!    Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
*************** Software Foundation, 59 Temple Place - S
*** 23,28 ****
--- 23,29 ----
  #include "coretypes.h"
  #include "tm.h"
  #include "tree.h"
+ #include "version.h"
  #include "flags.h"
  #include "real.h"
  #include "c-common.h"
*************** Software Foundation, 59 Temple Place - S
*** 31,36 ****
--- 32,38 ----
  #include "except.h"		/* For USING_SJLJ_EXCEPTIONS.  */
  #include "toplev.h"
  #include "tm_p.h"		/* Target prototypes.  */
+ #include "target.h"
  
  #ifndef TARGET_OS_CPP_BUILTINS
  # define TARGET_OS_CPP_BUILTINS()
*************** static void builtin_define_with_int_valu
*** 52,57 ****
--- 54,60 ----
  static void builtin_define_with_hex_fp_value (const char *, tree,
  					      int, const char *,
  					      const char *);
+ static void builtin_define_stdint_macros (void);
  static void builtin_define_type_max (const char *, tree, int);
  static void builtin_define_type_precision (const char *, tree);
  static void builtin_define_float_constants (const char *, const char *,
*************** builtin_define_float_constants (const ch
*** 216,222 ****
    /* The difference between 1 and the least value greater than 1 that is
       representable in the given floating point type, b**(1-p).  */
    sprintf (name, "__%s_EPSILON__", name_prefix);
!   sprintf (buf, "0x1p%d", (1 - fmt->p) * fmt->log2_b);
    builtin_define_with_hex_fp_value (name, type, decimal_dig, buf, fp_suffix);
  
    /* For C++ std::numeric_limits<T>::denorm_min.  The minimum denormalized
--- 219,230 ----
    /* The difference between 1 and the least value greater than 1 that is
       representable in the given floating point type, b**(1-p).  */
    sprintf (name, "__%s_EPSILON__", name_prefix);
!   if (fmt->pnan < fmt->p)
!     /* This is an IBM extended double format, so 1.0 + any double is
!        representable precisely.  */
!       sprintf (buf, "0x1p%d", (fmt->emin - fmt->p) * fmt->log2_b);
!     else      
!       sprintf (buf, "0x1p%d", (1 - fmt->p) * fmt->log2_b);
    builtin_define_with_hex_fp_value (name, type, decimal_dig, buf, fp_suffix);
  
    /* For C++ std::numeric_limits<T>::denorm_min.  The minimum denormalized
*************** define__GNUC__ (void)
*** 256,265 ****
       ([^0-9]*-)?[0-9]+[.][0-9]+([.][0-9]+)?([- ].*)?  */
    const char *q, *v = version_string;
  
!   while (*v && ! ISDIGIT (*v))
      v++;
!   if (!*v || (v > version_string && v[-1] != '-'))
!     abort ();
  
    q = v;
    while (ISDIGIT (*v))
--- 264,272 ----
       ([^0-9]*-)?[0-9]+[.][0-9]+([.][0-9]+)?([- ].*)?  */
    const char *q, *v = version_string;
  
!   while (*v && !ISDIGIT (*v))
      v++;
!   gcc_assert (*v && (v <= version_string || v[-1] == '-'));
  
    q = v;
    while (ISDIGIT (*v))
*************** define__GNUC__ (void)
*** 268,275 ****
    if (c_dialect_cxx ())
      builtin_define_with_value_n ("__GNUG__", q, v - q);
  
!   if (*v != '.' || !ISDIGIT (v[1]))
!     abort ();
    q = ++v;
    while (ISDIGIT (*v))
      v++;
--- 275,282 ----
    if (c_dialect_cxx ())
      builtin_define_with_value_n ("__GNUG__", q, v - q);
  
!   gcc_assert (*v == '.' && ISDIGIT (v[1]));
!   
    q = ++v;
    while (ISDIGIT (*v))
      v++;
*************** define__GNUC__ (void)
*** 277,284 ****
  
    if (*v == '.')
      {
!       if (!ISDIGIT (v[1]))
! 	abort ();
        q = ++v;
        while (ISDIGIT (*v))
  	v++;
--- 284,290 ----
  
    if (*v == '.')
      {
!       gcc_assert (ISDIGIT (v[1]));
        q = ++v;
        while (ISDIGIT (*v))
  	v++;
*************** define__GNUC__ (void)
*** 287,294 ****
    else
      builtin_define_with_value_n ("__GNUC_PATCHLEVEL__", "0", 1);
  
!   if (*v && *v != ' ' && *v != '-')
!     abort ();
  }
  
  /* Hook that registers front end and target-specific built-ins.  */
--- 293,316 ----
    else
      builtin_define_with_value_n ("__GNUC_PATCHLEVEL__", "0", 1);
  
!   gcc_assert (!*v || *v == ' ' || *v == '-');
! }
! 
! /* Define macros used by <stdint.h>.  Currently only defines limits
!    for intmax_t, used by the testsuite.  */
! static void
! builtin_define_stdint_macros (void)
! {
!   int intmax_long;
!   if (intmax_type_node == long_long_integer_type_node)
!     intmax_long = 2;
!   else if (intmax_type_node == long_integer_type_node)
!     intmax_long = 1;
!   else if (intmax_type_node == integer_type_node)
!     intmax_long = 0;
!   else
!     gcc_unreachable ();
!   builtin_define_type_max ("__INTMAX_MAX__", intmax_type_node, intmax_long);
  }
  
  /* Hook that registers front end and target-specific built-ins.  */
*************** c_cpp_builtins (cpp_reader *pfile)
*** 330,336 ****
         different from system to system.  */
      builtin_define_with_int_value ("__GXX_ABI_VERSION", 999999);
    else if (flag_abi_version == 1)
!     /* Due to an historical accident, this version had the value
         "102".  */
      builtin_define_with_int_value ("__GXX_ABI_VERSION", 102);
    else
--- 352,358 ----
         different from system to system.  */
      builtin_define_with_int_value ("__GXX_ABI_VERSION", 999999);
    else if (flag_abi_version == 1)
!     /* Due to a historical accident, this version had the value
         "102".  */
      builtin_define_with_int_value ("__GXX_ABI_VERSION", 102);
    else
*************** c_cpp_builtins (cpp_reader *pfile)
*** 352,357 ****
--- 374,382 ----
  
    builtin_define_type_precision ("__CHAR_BIT__", char_type_node);
  
+   /* stdint.h (eventually) and the testsuite need to know these.  */
+   builtin_define_stdint_macros ();
+ 
    /* float.h needs to know these.  */
  
    builtin_define_with_int_value ("__FLT_EVAL_METHOD__",
*************** c_cpp_builtins (cpp_reader *pfile)
*** 401,413 ****
    if (!flag_signed_char)
      cpp_define (pfile, "__CHAR_UNSIGNED__");
  
!   if (c_dialect_cxx () && TREE_UNSIGNED (wchar_type_node))
      cpp_define (pfile, "__WCHAR_UNSIGNED__");
  
    /* Make the choice of ObjC runtime visible to source code.  */
    if (c_dialect_objc () && flag_next_runtime)
      cpp_define (pfile, "__NEXT_RUNTIME__");
  
    /* A straightforward target hook doesn't work, because of problems
       linking that hook's body when part of non-C front ends.  */
  # define preprocessing_asm_p() (cpp_get_options (pfile)->lang == CLK_ASM)
--- 426,445 ----
    if (!flag_signed_char)
      cpp_define (pfile, "__CHAR_UNSIGNED__");
  
!   if (c_dialect_cxx () && TYPE_UNSIGNED (wchar_type_node))
      cpp_define (pfile, "__WCHAR_UNSIGNED__");
  
    /* Make the choice of ObjC runtime visible to source code.  */
    if (c_dialect_objc () && flag_next_runtime)
      cpp_define (pfile, "__NEXT_RUNTIME__");
  
+   /* Show the availability of some target pragmas.  */
+   if (flag_mudflap || targetm.handle_pragma_redefine_extname)
+     cpp_define (pfile, "__PRAGMA_REDEFINE_EXTNAME");
+ 
+   if (targetm.handle_pragma_extern_prefix)
+     cpp_define (pfile, "__PRAGMA_EXTERN_PREFIX");
+ 
    /* A straightforward target hook doesn't work, because of problems
       linking that hook's body when part of non-C front ends.  */
  # define preprocessing_asm_p() (cpp_get_options (pfile)->lang == CLK_ASM)
*************** c_cpp_builtins (cpp_reader *pfile)
*** 417,422 ****
--- 449,463 ----
    TARGET_CPU_CPP_BUILTINS ();
    TARGET_OS_CPP_BUILTINS ();
    TARGET_OBJFMT_CPP_BUILTINS ();
+ 
+   /* Support the __declspec keyword by turning them into attributes.
+      Note that the current way we do this may result in a collision
+      with predefined attributes later on.  This can be solved by using
+      one attribute, say __declspec__, and passing args to it.  The
+      problem with that approach is that args are not accumulated: each
+      new appearance would clobber any existing args.  */
+   if (TARGET_DECLSPEC)
+     builtin_define ("__declspec(x)=__attribute__((x))");
  }
  
  /* Pass an object-like macro.  If it doesn't lie in the user's
*************** builtin_define_type_max (const char *mac
*** 578,588 ****
      case 32:	idx = 4; break;
      case 64:	idx = 6; break;
      case 128:	idx = 8; break;
!     default:    abort ();
      }
  
!   value = values[idx + TREE_UNSIGNED (type)];
!   suffix = suffixes[is_long * 2 + TREE_UNSIGNED (type)];
  
    buf = alloca (strlen (macro) + 1 + strlen (value) + strlen (suffix) + 1);
    sprintf (buf, "%s=%s%s", macro, value, suffix);
--- 619,629 ----
      case 32:	idx = 4; break;
      case 64:	idx = 6; break;
      case 128:	idx = 8; break;
!     default:    gcc_unreachable ();
      }
  
!   value = values[idx + TYPE_UNSIGNED (type)];
!   suffix = suffixes[is_long * 2 + TYPE_UNSIGNED (type)];
  
    buf = alloca (strlen (macro) + 1 + strlen (value) + strlen (suffix) + 1);
    sprintf (buf, "%s=%s%s", macro, value, suffix);
diff -Nrcpad gcc-3.4.3/gcc/c-decl.c gcc-4.0.0/gcc/c-decl.c
*** gcc-3.4.3/gcc/c-decl.c	Tue Aug 17 16:24:57 2004
--- gcc-4.0.0/gcc/c-decl.c	Wed Apr  6 17:21:35 2005
***************
*** 1,6 ****
  /* Process declarations and variables for C compiler.
     Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
!    2001, 2002, 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
--- 1,6 ----
  /* Process declarations and variables for C compiler.
     Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
!    2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
*************** Software Foundation, 59 Temple Place - S
*** 29,34 ****
--- 29,35 ----
  #include "config.h"
  #include "system.h"
  #include "coretypes.h"
+ #include "input.h"
  #include "tm.h"
  #include "intl.h"
  #include "tree.h"
*************** Software Foundation, 59 Temple Place - S
*** 49,54 ****
--- 50,60 ----
  #include "timevar.h"
  #include "c-common.h"
  #include "c-pragma.h"
+ #include "langhooks.h"
+ #include "tree-mudflap.h"
+ #include "tree-gimple.h"
+ #include "diagnostic.h"
+ #include "tree-dump.h"
  #include "cgraph.h"
  #include "hashtab.h"
  #include "libfuncs.h"
*************** enum decl_context
*** 66,76 ****
  
  /* Nonzero if we have seen an invalid cross reference
     to a struct, union, or enum, but not yet printed the message.  */
- 
  tree pending_invalid_xref;
  /* File and line to appear in the eventual error message.  */
  location_t pending_invalid_xref_location;
  
  /* While defining an enum type, this is 1 plus the last enumerator
     constant value.  Note that will do not have to save this or `enum_overflow'
     around nested function definition since such a definition could only
--- 72,85 ----
  
  /* Nonzero if we have seen an invalid cross reference
     to a struct, union, or enum, but not yet printed the message.  */
  tree pending_invalid_xref;
+ 
  /* File and line to appear in the eventual error message.  */
  location_t pending_invalid_xref_location;
  
+ /* True means we've initialized exception handling.  */
+ bool c_eh_initialized_p;
+ 
  /* While defining an enum type, this is 1 plus the last enumerator
     constant value.  Note that will do not have to save this or `enum_overflow'
     around nested function definition since such a definition could only
*************** static tree enum_next_value;
*** 83,146 ****
  
  static int enum_overflow;
  
! /* Parsing a function declarator leaves a list of parameter names
!    or a chain of parameter decls here.  */
! 
! static tree last_function_parms;
! 
! /* ... and a chain of structure and enum types declared in the
!    parmlist here.  */
! 
! static tree last_function_parm_tags;
! 
! /* ... and a chain of all non-parameter declarations (such as
!    CONST_DECLs from enumerations) here.  */
! 
! static tree last_function_parm_others;
! 
! /* After parsing the declarator that starts a function definition,
!    `start_function' puts the list of parameter names or chain of decls here
!    for `store_parm_decls' to find.  */
! 
! static tree current_function_parms;
! 
! /* Similar, for last_function_parm_tags.  */
! 
! static tree current_function_parm_tags;
  
! /* And for last_function_parm_others.  */
  
! static tree current_function_parm_others;
  
! /* Similar, for the file and line that the prototype came from if this is
!    an old-style definition.  */
  
! static location_t current_function_prototype_locus;
  
  /* The current statement tree.  */
  
  static GTY(()) struct stmt_tree_s c_stmt_tree;
  
- /* The current scope statement stack.  */
- 
- static GTY(()) tree c_scope_stmt_stack;
- 
  /* State saving variables.  */
! int c_in_iteration_stmt;
! int c_in_case_stmt;
! 
! /* A list of external DECLs that appeared at block scope when there was
!    some other global meaning for that identifier.  */
! static GTY(()) tree truly_local_externals;
! 
! /* All the builtins; this is a subset of the entries of global_scope.  */
  
! static GTY(()) tree first_builtin_decl;
! static GTY(()) tree last_builtin_decl;
  
! /* A DECL for the current file-scope context.  */
  
! static GTY(()) tree current_file_decl;
  
  /* Set to 0 at beginning of a function definition, set to 1 if
     a return statement that specifies a return value is seen.  */
--- 92,129 ----
  
  static int enum_overflow;
  
! /* The file and line that the prototype came from if this is an
!    old-style definition; used for diagnostics in
!    store_parm_decls_oldstyle.  */
  
! static location_t current_function_prototype_locus;
  
! /* The argument information structure for the function currently being
!    defined.  */
  
! static struct c_arg_info *current_function_arg_info;
  
! /* The obstack on which parser and related data structures, which are
!    not live beyond their top-level declaration or definition, are
!    allocated.  */
! struct obstack parser_obstack;
  
  /* The current statement tree.  */
  
  static GTY(()) struct stmt_tree_s c_stmt_tree;
  
  /* State saving variables.  */
! tree c_break_label;
! tree c_cont_label;
  
! /* Linked list of TRANSLATION_UNIT_DECLS for the translation units
!    included in this invocation.  Note that the current translation
!    unit is not included in this list.  */
  
! static GTY(()) tree all_translation_units;
  
! /* A list of decls to be made automatically visible in each file scope.  */
! static GTY(()) tree visible_builtins;
  
  /* Set to 0 at beginning of a function definition, set to 1 if
     a return statement that specifies a return value is seen.  */
*************** static int warn_about_return_type;
*** 165,174 ****
  /* Nonzero when starting a function declared `extern inline'.  */
  
  static int current_extern_inline;
  
! /* Each c_scope structure describes the complete contents of one scope.
!    Three scopes are distinguished specially: the innermost or current
!    scope, the innermost function scope, and the outermost or file scope.
  
     Most declarations are recorded in the current scope.
  
--- 148,262 ----
  /* Nonzero when starting a function declared `extern inline'.  */
  
  static int current_extern_inline;
+ 
+ /* Nonzero when the current toplevel function contains a declaration
+    of a nested function which is never defined.  */
+ 
+ static bool undef_nested_function;
+ 
+ /* True means global_bindings_p should return false even if the scope stack
+    says we are in file scope.  */
+ bool c_override_global_bindings_to_false;
+ 
  
! /* Each c_binding structure describes one binding of an identifier to
!    a decl.  All the decls in a scope - irrespective of namespace - are
!    chained together by the ->prev field, which (as the name implies)
!    runs in reverse order.  All the decls in a given namespace bound to
!    a given identifier are chained by the ->shadowed field, which runs
!    from inner to outer scopes.
! 
!    The ->decl field usually points to a DECL node, but there are two
!    exceptions.  In the namespace of type tags, the bound entity is a
!    RECORD_TYPE, UNION_TYPE, or ENUMERAL_TYPE node.  If an undeclared
!    identifier is encountered, it is bound to error_mark_node to
!    suppress further errors about that identifier in the current
!    function.
! 
!    The ->type field stores the type of the declaration in this scope;
!    if NULL, the type is the type of the ->decl field.  This is only of
!    relevance for objects with external or internal linkage which may
!    be redeclared in inner scopes, forming composite types that only
!    persist for the duration of those scopes.  In the external scope,
!    this stores the composite of all the types declared for this
!    object, visible or not.  The ->inner_comp field (used only at file
!    scope) stores whether an incomplete array type at file scope was
!    completed at an inner scope to an array size other than 1.
! 
!    The depth field is copied from the scope structure that holds this
!    decl.  It is used to preserve the proper ordering of the ->shadowed
!    field (see bind()) and also for a handful of special-case checks.
!    Finally, the invisible bit is true for a decl which should be
!    ignored for purposes of normal name lookup, and the nested bit is
!    true for a decl that's been bound a second time in an inner scope;
!    in all such cases, the binding in the outer scope will have its
!    invisible bit true.  */
! 
! struct c_binding GTY((chain_next ("%h.prev")))
! {
!   tree decl;			/* the decl bound */
!   tree type;			/* the type in this scope */
!   tree id;			/* the identifier it's bound to */
!   struct c_binding *prev;	/* the previous decl in this scope */
!   struct c_binding *shadowed;	/* the innermost decl shadowed by this one */
!   unsigned int depth : 28;      /* depth of this scope */
!   BOOL_BITFIELD invisible : 1;  /* normal lookup should ignore this binding */
!   BOOL_BITFIELD nested : 1;     /* do not set DECL_CONTEXT when popping */
!   BOOL_BITFIELD inner_comp : 1; /* incomplete array completed in inner scope */
!   /* one free bit */
! };
! #define B_IN_SCOPE(b1, b2) ((b1)->depth == (b2)->depth)
! #define B_IN_CURRENT_SCOPE(b) ((b)->depth == current_scope->depth)
! #define B_IN_FILE_SCOPE(b) ((b)->depth == 1 /*file_scope->depth*/)
! #define B_IN_EXTERNAL_SCOPE(b) ((b)->depth == 0 /*external_scope->depth*/)
! 
! #define I_SYMBOL_BINDING(node) \
!   (((struct lang_identifier *) IDENTIFIER_NODE_CHECK(node))->symbol_binding)
! #define I_SYMBOL_DECL(node) \
!  (I_SYMBOL_BINDING(node) ? I_SYMBOL_BINDING(node)->decl : 0)
! 
! #define I_TAG_BINDING(node) \
!   (((struct lang_identifier *) IDENTIFIER_NODE_CHECK(node))->tag_binding)
! #define I_TAG_DECL(node) \
!  (I_TAG_BINDING(node) ? I_TAG_BINDING(node)->decl : 0)
! 
! #define I_LABEL_BINDING(node) \
!   (((struct lang_identifier *) IDENTIFIER_NODE_CHECK(node))->label_binding)
! #define I_LABEL_DECL(node) \
!  (I_LABEL_BINDING(node) ? I_LABEL_BINDING(node)->decl : 0)
! 
! /* Each C symbol points to three linked lists of c_binding structures.
!    These describe the values of the identifier in the three different
!    namespaces defined by the language.  */
! 
! struct lang_identifier GTY(())
! {
!   struct c_common_identifier common_id;
!   struct c_binding *symbol_binding; /* vars, funcs, constants, typedefs */
!   struct c_binding *tag_binding;    /* struct/union/enum tags */
!   struct c_binding *label_binding;  /* labels */
! };
! 
! /* Validate c-lang.c's assumptions.  */
! extern char C_SIZEOF_STRUCT_LANG_IDENTIFIER_isnt_accurate
! [(sizeof(struct lang_identifier) == C_SIZEOF_STRUCT_LANG_IDENTIFIER) ? 1 : -1];
! 
! /* The resulting tree type.  */
! 
! union lang_tree_node
!   GTY((desc ("TREE_CODE (&%h.generic) == IDENTIFIER_NODE"),
!        chain_next ("TREE_CODE (&%h.generic) == INTEGER_TYPE ? (union lang_tree_node *) TYPE_NEXT_VARIANT (&%h.generic) : (union lang_tree_node *) TREE_CHAIN (&%h.generic)")))
! {
!   union tree_node GTY ((tag ("0"),
! 			desc ("tree_node_structure (&%h)")))
!     generic;
!   struct lang_identifier GTY ((tag ("1"))) identifier;
! };
! 
! /* Each c_scope structure describes the complete contents of one
!    scope.  Four scopes are distinguished specially: the innermost or
!    current scope, the innermost function scope, the file scope (always
!    the second to outermost) and the outermost or external scope.
  
     Most declarations are recorded in the current scope.
  
*************** static int current_extern_inline;
*** 178,197 ****
     hence the 'innermost' qualifier.)  Explicitly declared labels
     (using the __label__ extension) appear in the current scope.
  
!    Being in the global scope (current_scope == global_scope) causes
     special behavior in several places below.  Also, under some
     conditions the Objective-C front end records declarations in the
!    global scope even though that isn't the current scope.
  
!    The order of the names, parms, and blocks lists matters, and they
!    are frequently appended to.  To avoid having to walk all the way to
!    the end of the list on each insertion, or reverse the lists later,
!    we maintain a pointer to the last list entry for each of the lists.
  
!    The order of the tags, shadowed, and shadowed_tags
!    lists does not matter, so we just prepend to these lists.  */
  
! struct c_scope GTY(())
  {
    /* The scope containing this one.  */
    struct c_scope *outer;
--- 266,304 ----
     hence the 'innermost' qualifier.)  Explicitly declared labels
     (using the __label__ extension) appear in the current scope.
  
!    Being in the file scope (current_scope == file_scope) causes
     special behavior in several places below.  Also, under some
     conditions the Objective-C front end records declarations in the
!    file scope even though that isn't the current scope.
  
!    All declarations with external linkage are recorded in the external
!    scope, even if they aren't visible there; this models the fact that
!    such declarations are visible to the entire program, and (with a
!    bit of cleverness, see pushdecl) allows diagnosis of some violations
!    of C99 6.2.2p7 and 6.2.7p2:
  
!      If, within the same translation unit, the same identifier appears
!      with both internal and external linkage, the behavior is
!      undefined.
  
!      All declarations that refer to the same object or function shall
!      have compatible type; otherwise, the behavior is undefined.
! 
!    Initially only the built-in declarations, which describe compiler
!    intrinsic functions plus a subset of the standard library, are in
!    this scope.
! 
!    The order of the blocks list matters, and it is frequently appended
!    to.  To avoid having to walk all the way to the end of the list on
!    each insertion, or reverse the list later, we maintain a pointer to
!    the last list entry.  (FIXME: It should be feasible to use a reversed
!    list here.)
! 
!    The bindings list is strictly in reverse order of declarations;
!    pop_scope relies on this.  */
! 
! 
! struct c_scope GTY((chain_next ("%h.outer")))
  {
    /* The scope containing this one.  */
    struct c_scope *outer;
*************** struct c_scope GTY(())
*** 199,233 ****
    /* The next outermost function scope.  */
    struct c_scope *outer_function;
  
!   /* All variables, constants, functions, labels, and typedef names.  */
!   tree names;
!   tree names_last;
! 
!   /* All parameter declarations.  Used only in the outermost scope of
!      a function.  */
!   tree parms;
!   tree parms_last;
! 
!   /* All structure, union, and enum type tags.  */
!   tree tags;
! 
!   /* For each scope, a list of shadowed outer-scope definitions
!      to be restored when this scope is popped.
!      Each link is a TREE_LIST whose TREE_PURPOSE is an identifier and
!      whose TREE_VALUE is its old definition (a kind of ..._DECL node).  */
!   tree shadowed;
! 
!   /* For each scope, a list of shadowed outer-scope tag definitions
!      to be restored when this scope is popped.
!      Each link is a TREE_LIST whose TREE_PURPOSE is an identifier and
!      whose TREE_VALUE is its old definition (a kind of ..._TYPE node).  */
!   tree shadowed_tags;
  
    /* For each scope (except the global one), a chain of BLOCK nodes
       for all the scopes that were entered and exited one level down.  */
    tree blocks;
    tree blocks_last;
  
    /* True if we are currently filling this scope with parameter
       declarations.  */
    BOOL_BITFIELD parm_flag : 1;
--- 306,323 ----
    /* The next outermost function scope.  */
    struct c_scope *outer_function;
  
!   /* All bindings in this scope.  */
!   struct c_binding *bindings;
  
    /* For each scope (except the global one), a chain of BLOCK nodes
       for all the scopes that were entered and exited one level down.  */
    tree blocks;
    tree blocks_last;
  
+   /* The depth of this scope.  Used to keep the ->shadowed chain of
+      bindings sorted innermost to outermost.  */
+   unsigned int depth : 28;
+ 
    /* True if we are currently filling this scope with parameter
       declarations.  */
    BOOL_BITFIELD parm_flag : 1;
*************** struct c_scope GTY(())
*** 251,270 ****
  
  static GTY(()) struct c_scope *current_scope;
  
- /* A chain of c_scope structures awaiting reuse.  */
- 
- static GTY((deletable (""))) struct c_scope *scope_freelist;
- 
  /* The innermost function scope.  Ordinary (not explicitly declared)
     labels, bindings to error_mark_node, and the lazily-created
     bindings of __func__ and its friends get this scope.  */
  
  static GTY(()) struct c_scope *current_function_scope;
  
! /* The outermost scope, corresponding to the C "file scope".  This is
!    created when the compiler is started and exists through the entire run.  */
  
! static GTY(()) struct c_scope *global_scope;
  
  /* Append VAR to LIST in scope SCOPE.  */
  #define SCOPE_LIST_APPEND(scope, list, decl) do {	\
--- 341,368 ----
  
  static GTY(()) struct c_scope *current_scope;
  
  /* The innermost function scope.  Ordinary (not explicitly declared)
     labels, bindings to error_mark_node, and the lazily-created
     bindings of __func__ and its friends get this scope.  */
  
  static GTY(()) struct c_scope *current_function_scope;
  
! /* The C file scope.  This is reset for each input translation unit.  */
  
! static GTY(()) struct c_scope *file_scope;
! 
! /* The outermost scope.  This is used for all declarations with
!    external linkage, and only these, hence the name.  */
! 
! static GTY(()) struct c_scope *external_scope;
! 
! /* A chain of c_scope structures awaiting reuse.  */
! 
! static GTY((deletable)) struct c_scope *scope_freelist;
! 
! /* A chain of c_binding structures awaiting reuse.  */
! 
! static GTY((deletable)) struct c_binding *binding_freelist;
  
  /* Append VAR to LIST in scope SCOPE.  */
  #define SCOPE_LIST_APPEND(scope, list, decl) do {	\
*************** static GTY(()) struct c_scope *global_sc
*** 292,298 ****
  
  static bool keep_next_level_flag;
  
! /* True means the next call to pushlevel will be the outermost scope
     of a function body, so do not push a new scope, merely cease
     expecting parameter decls.  */
  
--- 390,396 ----
  
  static bool keep_next_level_flag;
  
! /* True means the next call to push_scope will be the outermost scope
     of a function body, so do not push a new scope, merely cease
     expecting parameter decls.  */
  
*************** static bool next_is_function_body;
*** 300,331 ****
  
  /* Functions called automatically at the beginning and end of execution.  */
  
! tree static_ctors, static_dtors;
  
  /* Forward declarations.  */
! 
! static struct c_scope *make_scope (void);
! static void pop_scope (void);
! static tree make_label (tree, location_t);
! static void bind_label (tree, tree, struct c_scope *);
! static void implicit_decl_warning (tree);
! static tree lookup_tag (enum tree_code, tree, int);
! static tree lookup_name_current_level (tree);
! static tree grokdeclarator (tree, tree, enum decl_context, int, tree *);
! static tree grokparms (tree, int);
! static void layout_array_type (tree);
! static void store_parm_decls_newstyle (void);
! static void store_parm_decls_oldstyle (void);
  static tree c_make_fname_decl (tree, int);
! static void c_expand_body_1 (tree, int);
! static tree any_external_decl (tree);
! static void record_external_decl (tree);
! static void warn_if_shadowing (tree, tree);
! static void check_bitfield_type_and_width (tree *, tree *, const char *);
! static void clone_underlying_type (tree);
! static bool flexible_array_type_p (tree);
! static hashval_t link_hash_hash	(const void *);
! static int link_hash_eq (const void *, const void *);
  
  /* States indicating how grokdeclarator() should handle declspecs marked
     with __attribute__((deprecated)).  An object declared as
--- 398,414 ----
  
  /* Functions called automatically at the beginning and end of execution.  */
  
! static GTY(()) tree static_ctors;
! static GTY(()) tree static_dtors;
  
  /* Forward declarations.  */
! static tree lookup_name_in_scope (tree, struct c_scope *);
  static tree c_make_fname_decl (tree, int);
! static tree grokdeclarator (const struct c_declarator *,
! 			    struct c_declspecs *,
! 			    enum decl_context, bool, tree *);
! static tree grokparms (struct c_arg_info *, bool);
! static void layout_array_type (tree);
  
  /* States indicating how grokdeclarator() should handle declspecs marked
     with __attribute__((deprecated)).  An object declared as
*************** static enum deprecated_states deprecated
*** 342,350 ****
  void
  c_print_identifier (FILE *file, tree node, int indent)
  {
!   print_node (file, "symbol", IDENTIFIER_SYMBOL_VALUE (node), indent + 4);
!   print_node (file, "tag", IDENTIFIER_TAG_VALUE (node), indent + 4);
!   print_node (file, "label", IDENTIFIER_LABEL_VALUE (node), indent + 4);
    if (C_IS_RESERVED_WORD (node))
      {
        tree rid = ridpointers[C_RID_CODE (node)];
--- 425,433 ----
  void
  c_print_identifier (FILE *file, tree node, int indent)
  {
!   print_node (file, "symbol", I_SYMBOL_DECL (node), indent + 4);
!   print_node (file, "tag", I_TAG_DECL (node), indent + 4);
!   print_node (file, "label", I_LABEL_DECL (node), indent + 4);
    if (C_IS_RESERVED_WORD (node))
      {
        tree rid = ridpointers[C_RID_CODE (node)];
*************** c_print_identifier (FILE *file, tree nod
*** 353,358 ****
--- 436,517 ----
  	       (void *) rid, IDENTIFIER_POINTER (rid));
      }
  }
+ 
+ /* Establish a binding between NAME, an IDENTIFIER_NODE, and DECL,
+    which may be any of several kinds of DECL or TYPE or error_mark_node,
+    in the scope SCOPE.  */
+ static void
+ bind (tree name, tree decl, struct c_scope *scope, bool invisible, bool nested)
+ {
+   struct c_binding *b, **here;
+ 
+   if (binding_freelist)
+     {
+       b = binding_freelist;
+       binding_freelist = b->prev;
+     }
+   else
+     b = GGC_NEW (struct c_binding);
+ 
+   b->shadowed = 0;
+   b->decl = decl;
+   b->id = name;
+   b->depth = scope->depth;
+   b->invisible = invisible;
+   b->nested = nested;
+   b->inner_comp = 0;
+ 
+   b->type = 0;
+ 
+   b->prev = scope->bindings;
+   scope->bindings = b;
+ 
+   if (!name)
+     return;
+ 
+   switch (TREE_CODE (decl))
+     {
+     case LABEL_DECL:     here = &I_LABEL_BINDING (name);   break;
+     case ENUMERAL_TYPE:
+     case UNION_TYPE:
+     case RECORD_TYPE:    here = &I_TAG_BINDING (name);     break;
+     case VAR_DECL:
+     case FUNCTION_DECL:
+     case TYPE_DECL:
+     case CONST_DECL:
+     case PARM_DECL:
+     case ERROR_MARK:     here = &I_SYMBOL_BINDING (name);  break;
+ 
+     default:
+       gcc_unreachable ();
+     }
+ 
+   /* Locate the appropriate place in the chain of shadowed decls
+      to insert this binding.  Normally, scope == current_scope and
+      this does nothing.  */
+   while (*here && (*here)->depth > scope->depth)
+     here = &(*here)->shadowed;
+ 
+   b->shadowed = *here;
+   *here = b;
+ }
+ 
+ /* Clear the binding structure B, stick it on the binding_freelist,
+    and return the former value of b->prev.  This is used by pop_scope
+    and get_parm_info to iterate destructively over all the bindings
+    from a given scope.  */
+ static struct c_binding *
+ free_binding_and_advance (struct c_binding *b)
+ {
+   struct c_binding *prev = b->prev;
+ 
+   memset (b, 0, sizeof (struct c_binding));
+   b->prev = binding_freelist;
+   binding_freelist = b;
+ 
+   return prev;
+ }
+ 
  
  /* Hook called at end of compilation to assume 1 elt
     for a file-scope tentative array defn that wasn't complete before.  */
*************** c_finish_incomplete_decl (tree decl)
*** 365,420 ****
        tree type = TREE_TYPE (decl);
        if (type != error_mark_node
  	  && TREE_CODE (type) == ARRAY_TYPE
! 	  && ! DECL_EXTERNAL (decl)
  	  && TYPE_DOMAIN (type) == 0)
  	{
! 	  warning ("%Jarray '%D' assumed to have one element", decl, decl);
  
! 	  complete_array_type (type, NULL_TREE, 1);
  
  	  layout_decl (decl, 0);
  	}
      }
  }
  
- /* Reuse or create a struct for this scope.  */
- 
- static struct c_scope *
- make_scope (void)
- {
-   struct c_scope *result;
-   if (scope_freelist)
-     {
-       result = scope_freelist;
-       scope_freelist = result->outer;
-     }
-   else
-     result = ggc_alloc_cleared (sizeof (struct c_scope));
- 
-   return result;
- }
- 
- /* Remove the topmost scope from the stack and add it to the
-    free list, updating current_function_scope if necessary.  */
- 
- static void
- pop_scope (void)
- {
-   struct c_scope *scope = current_scope;
- 
-   current_scope = scope->outer;
-   if (scope->function_body)
-     current_function_scope = scope->outer_function;
- 
-   memset (scope, 0, sizeof (struct c_scope));
-   scope->outer = scope_freelist;
-   scope_freelist = scope;
- }
- 
  /* The Objective-C front-end often needs to determine the current scope.  */
  
  void *
! get_current_scope (void)
  {
    return current_scope;
  }
--- 524,545 ----
        tree type = TREE_TYPE (decl);
        if (type != error_mark_node
  	  && TREE_CODE (type) == ARRAY_TYPE
! 	  && !DECL_EXTERNAL (decl)
  	  && TYPE_DOMAIN (type) == 0)
  	{
! 	  warning ("%Jarray %qD assumed to have one element", decl, decl);
  
! 	  complete_array_type (&TREE_TYPE (decl), NULL_TREE, true);
  
  	  layout_decl (decl, 0);
  	}
      }
  }
  
  /* The Objective-C front-end often needs to determine the current scope.  */
  
  void *
! objc_get_current_scope (void)
  {
    return current_scope;
  }
*************** void
*** 426,455 ****
  objc_mark_locals_volatile (void *enclosing_blk)
  {
    struct c_scope *scope;
  
    for (scope = current_scope;
         scope && scope != enclosing_blk;
         scope = scope->outer)
      {
!       tree decl;
! 
!       for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
  	{
! 	  DECL_REGISTER (decl) = 0;
! 	  TREE_THIS_VOLATILE (decl) = 1;
  	}
        /* Do not climb up past the current function.  */
        if (scope->function_body)
  	break;
      }
  }
  
! /* Nonzero if we are currently in the global scope.  */
  
  int
  global_bindings_p (void)
  {
!   return current_scope == global_scope;
  }
  
  void
--- 551,585 ----
  objc_mark_locals_volatile (void *enclosing_blk)
  {
    struct c_scope *scope;
+   struct c_binding *b;
  
    for (scope = current_scope;
         scope && scope != enclosing_blk;
         scope = scope->outer)
      {
!       for (b = scope->bindings; b; b = b->prev)
  	{
! 	  if (TREE_CODE (b->decl) == VAR_DECL
! 	      || TREE_CODE (b->decl) == PARM_DECL)
! 	    {
! 	      C_DECL_REGISTER (b->decl) = 0;
! 	      DECL_REGISTER (b->decl) = 0;
! 	      TREE_THIS_VOLATILE (b->decl) = 1;
! 	    }
  	}
+ 
        /* Do not climb up past the current function.  */
        if (scope->function_body)
  	break;
      }
  }
  
! /* Nonzero if we are currently in file scope.  */
  
  int
  global_bindings_p (void)
  {
!   return current_scope == file_scope && !c_override_global_bindings_to_false;
  }
  
  void
*************** declare_parm_level (void)
*** 466,484 ****
    current_scope->parm_flag = true;
  }
  
- /* Nonzero if currently making parm declarations.  */
- 
- int
- in_parm_level_p (void)
- {
-   return current_scope->parm_flag;
- }
- 
- /* Enter a new scope.  The dummy parameter is for signature
-    compatibility with lang_hooks.decls.pushlevel.  */
- 
  void
! pushlevel (int dummy ATTRIBUTE_UNUSED)
  {
    if (next_is_function_body)
      {
--- 596,603 ----
    current_scope->parm_flag = true;
  }
  
  void
! push_scope (void)
  {
    if (next_is_function_body)
      {
*************** pushlevel (int dummy ATTRIBUTE_UNUSED)
*** 503,551 ****
      }
    else
      {
!       struct c_scope *scope = make_scope ();
  
        scope->keep          = keep_next_level_flag;
        scope->outer         = current_scope;
        current_scope        = scope;
        keep_next_level_flag = false;
      }
  }
  
! /* Exit a scope.  Restore the state of the identifier-decl mappings
!    that were in effect when this scope was entered.
! 
!    If KEEP is KEEP_YES (1), this scope had explicit declarations, so
!    create a BLOCK node to record its declarations and subblocks for
!    debugging output.  If KEEP is KEEP_MAYBE, do so only if the names
!    or tags lists are nonempty.
! 
!    The second parameter is ignored; it is present only for
!    signature compatibility with lang_hooks.decls.poplevel.
  
!    If FUNCTIONBODY is nonzero, this level is the body of a function,
!    even if current_scope->function_body is not set.  This is used
!    by language-independent code that generates synthetic functions,
!    and cannot set current_scope->function_body.
  
!    FIXME: Eliminate the need for all arguments.  */
  
  tree
! poplevel (int keep, int dummy ATTRIBUTE_UNUSED, int functionbody)
  {
    struct c_scope *scope = current_scope;
!   tree block;
!   tree decl;
!   tree p;
! 
!   /* The following line does not use |= due to a bug in HP's C compiler.  */
!   scope->function_body = scope->function_body | functionbody;
! 
!   if (keep == KEEP_MAYBE)
!     keep = (scope->names || scope->tags);
  
!   keep |= scope->keep;
!   keep |= scope->function_body;
  
    /* If appropriate, create a BLOCK to record the decls for the life
       of this function.  */
--- 622,677 ----
      }
    else
      {
!       struct c_scope *scope;
!       if (scope_freelist)
! 	{
! 	  scope = scope_freelist;
! 	  scope_freelist = scope->outer;
! 	}
!       else
! 	scope = GGC_CNEW (struct c_scope);
  
        scope->keep          = keep_next_level_flag;
        scope->outer         = current_scope;
+       scope->depth	   = current_scope ? (current_scope->depth + 1) : 0;
+ 
+       /* Check for scope depth overflow.  Unlikely (2^28 == 268,435,456) but
+ 	 possible.  */
+       if (current_scope && scope->depth == 0)
+ 	{
+ 	  scope->depth--;
+ 	  sorry ("GCC supports only %u nested scopes", scope->depth);
+ 	}
+ 
        current_scope        = scope;
        keep_next_level_flag = false;
      }
  }
  
! /* Set the TYPE_CONTEXT of all of TYPE's variants to CONTEXT.  */
  
! static void
! set_type_context (tree type, tree context)
! {
!   for (type = TYPE_MAIN_VARIANT (type); type;
!        type = TYPE_NEXT_VARIANT (type))
!     TYPE_CONTEXT (type) = context;
! }
  
! /* Exit a scope.  Restore the state of the identifier-decl mappings
!    that were in effect when this scope was entered.  Return a BLOCK
!    node containing all the DECLs in this scope that are of interest
!    to debug info generation.  */
  
  tree
! pop_scope (void)
  {
    struct c_scope *scope = current_scope;
!   tree block, context, p;
!   struct c_binding *b;
  
!   bool functionbody = scope->function_body;
!   bool keep = functionbody || scope->keep || scope->bindings;
  
    /* If appropriate, create a BLOCK to record the decls for the life
       of this function.  */
*************** poplevel (int keep, int dummy ATTRIBUTE_
*** 553,680 ****
    if (keep)
      {
        block = make_node (BLOCK);
-       BLOCK_VARS (block) = scope->names;
        BLOCK_SUBBLOCKS (block) = scope->blocks;
        TREE_USED (block) = 1;
-     }
  
!   /* In each subblock, record that this is its superior.  */
!   for (p = scope->blocks; p; p = TREE_CHAIN (p))
!     BLOCK_SUPERCONTEXT (p) = block;
  
!   /* Clear out the variable bindings in this scope.
  
!      Propagate TREE_ADDRESSABLE from nested functions to their
!      containing functions.
  
!      Issue warnings for unused variables and labels, and errors for
!      undefined labels, if there are any.  */
  
!   for (p = scope->names; p; p = TREE_CHAIN (p))
      {
        switch (TREE_CODE (p))
  	{
  	case LABEL_DECL:
  	  if (TREE_USED (p) && !DECL_INITIAL (p))
  	    {
! 	      error ("%Jlabel `%D' used but not defined", p, p);
  	      DECL_INITIAL (p) = error_mark_node;
  	    }
  	  else if (!TREE_USED (p) && warn_unused_label)
  	    {
  	      if (DECL_INITIAL (p))
! 		warning ("%Jlabel `%D' defined but not used", p, p);
  	      else
! 		warning ("%Jlabel `%D' declared but not defined", p, p);
  	    }
  
! 	  IDENTIFIER_LABEL_VALUE (DECL_NAME (p)) = 0;
! 	  break;
  
  	case FUNCTION_DECL:
! 	  if (! TREE_ASM_WRITTEN (p)
  	      && DECL_INITIAL (p) != 0
  	      && TREE_ADDRESSABLE (p)
  	      && DECL_ABSTRACT_ORIGIN (p) != 0
  	      && DECL_ABSTRACT_ORIGIN (p) != p)
  	    TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (p)) = 1;
! 	  goto normal;
  
  	case VAR_DECL:
! 	  /* Keep this in sync with stmt.c:warn_about_unused_variables.
! 	     No warnings when the global scope is popped because the
! 	     global scope isn't popped for the last translation unit,
! 	     so the warnings are done in c_write_global_declaration.  */
! 	  if (warn_unused_variable && scope != global_scope
  	      && !TREE_USED (p)
  	      && !DECL_IN_SYSTEM_HEADER (p)
  	      && DECL_NAME (p)
! 	      && !DECL_ARTIFICIAL (p))
! 	    warning ("%Junused variable `%D'", p, p);
! 	  /* fall through */
  
! 	default:
! 	normal:
! 	  if (DECL_NAME (p))
  	    {
! 	      if (DECL_EXTERNAL (p) && scope != global_scope)
! 		/* External decls stay in the symbol-value slot but are
! 		   inaccessible.  */
! 		C_DECL_INVISIBLE (p) = 1;
! 	      else
! 		IDENTIFIER_SYMBOL_VALUE (DECL_NAME (p)) = 0;
  	    }
- 	  break;
- 	}
-     }
- 
-   /* Clear out the parameter bindings in this scope, if any.
-      Unused-parameter warnings are handled by function.c.  */
-   for (p = scope->parms; p; p = TREE_CHAIN (p))
-     if (DECL_NAME (p))
-       IDENTIFIER_SYMBOL_VALUE (DECL_NAME (p)) = 0;
  
!   /* Clear out the tag-meanings declared in this scope.
! 
!      Set the TYPE_CONTEXTs for all of the tagged types belonging to
!      this scope so that they point to the appropriate construct, i.e.
!      either to the current FUNCTION_DECL node, or else to the BLOCK
!      node we just constructed.
  
!      Note that for tagged types whose scope is just the formal
!      parameter list for some function type specification, we can't
!      properly set their TYPE_CONTEXTs here, because we don't have a
!      pointer to the appropriate FUNCTION_TYPE node readily available
!      to us.  For those cases, the TYPE_CONTEXTs of the relevant tagged
!      type nodes get set in `grokdeclarator' as soon as we have created
!      the FUNCTION_TYPE node which will represent the "scope" for these
!      "parameter list local" tagged types.  */
  
!   decl = scope->function_body ? current_function_decl : block;
!   for (p = scope->tags; p; p = TREE_CHAIN (p))
!     {
!       if (TREE_PURPOSE (p))
! 	IDENTIFIER_TAG_VALUE (TREE_PURPOSE (p)) = 0;
!       if (decl)
! 	TYPE_CONTEXT (TREE_VALUE (p)) = decl;
      }
  
-   /* Restore all name- and label-meanings from outer scopes that were
-      shadowed by this scope.  */
-   for (p = scope->shadowed; p; p = TREE_CHAIN (p))
-     if (TREE_VALUE (p) && TREE_CODE (TREE_VALUE (p)) == LABEL_DECL)
-       IDENTIFIER_LABEL_VALUE (TREE_PURPOSE (p)) = TREE_VALUE (p);
-     else
-       IDENTIFIER_SYMBOL_VALUE (TREE_PURPOSE (p)) = TREE_VALUE (p);
- 
-   /* Restore all tag-meanings from outer scopes that were shadowed by
-      this scope.  */
-   for (p = scope->shadowed_tags; p; p = TREE_CHAIN (p))
-     IDENTIFIER_TAG_VALUE (TREE_PURPOSE (p)) = TREE_VALUE (p);
  
    /* Dispose of the block that we just made inside some higher level.  */
!   if (scope->function_body && current_function_decl)
!     DECL_INITIAL (current_function_decl) = block;
    else if (scope->outer)
      {
        if (block)
--- 679,848 ----
    if (keep)
      {
        block = make_node (BLOCK);
        BLOCK_SUBBLOCKS (block) = scope->blocks;
        TREE_USED (block) = 1;
  
!       /* In each subblock, record that this is its superior.  */
!       for (p = scope->blocks; p; p = TREE_CHAIN (p))
! 	BLOCK_SUPERCONTEXT (p) = block;
  
!       BLOCK_VARS (block) = 0;
!     }
  
!   /* The TYPE_CONTEXTs for all of the tagged types belonging to this
!      scope must be set so that they point to the appropriate
!      construct, i.e.  either to the current FUNCTION_DECL node, or
!      else to the BLOCK node we just constructed.
  
!      Note that for tagged types whose scope is just the formal
!      parameter list for some function type specification, we can't
!      properly set their TYPE_CONTEXTs here, because we don't have a
!      pointer to the appropriate FUNCTION_TYPE node readily available
!      to us.  For those cases, the TYPE_CONTEXTs of the relevant tagged
!      type nodes get set in `grokdeclarator' as soon as we have created
!      the FUNCTION_TYPE node which will represent the "scope" for these
!      "parameter list local" tagged types.  */
!   if (scope->function_body)
!     context = current_function_decl;
!   else if (scope == file_scope)
!     {
!       tree file_decl = build_decl (TRANSLATION_UNIT_DECL, 0, 0);
!       TREE_CHAIN (file_decl) = all_translation_units;
!       all_translation_units = file_decl;
!       context = file_decl;
!     }
!   else
!     context = block;
  
!   /* Clear all bindings in this scope.  */
!   for (b = scope->bindings; b; b = free_binding_and_advance (b))
      {
+       p = b->decl;
        switch (TREE_CODE (p))
  	{
  	case LABEL_DECL:
+ 	  /* Warnings for unused labels, errors for undefined labels.  */
  	  if (TREE_USED (p) && !DECL_INITIAL (p))
  	    {
! 	      error ("%Jlabel %qD used but not defined", p, p);
  	      DECL_INITIAL (p) = error_mark_node;
  	    }
  	  else if (!TREE_USED (p) && warn_unused_label)
  	    {
  	      if (DECL_INITIAL (p))
! 		warning ("%Jlabel %qD defined but not used", p, p);
  	      else
! 		warning ("%Jlabel %qD declared but not defined", p, p);
  	    }
+ 	  /* Labels go in BLOCK_VARS.  */
+ 	  TREE_CHAIN (p) = BLOCK_VARS (block);
+ 	  BLOCK_VARS (block) = p;
+ 	  gcc_assert (I_LABEL_BINDING (b->id) == b);
+  	  I_LABEL_BINDING (b->id) = b->shadowed;
+  	  break;
  
! 	case ENUMERAL_TYPE:
! 	case UNION_TYPE:
! 	case RECORD_TYPE:
! 	  set_type_context (p, context);
! 
! 	  /* Types may not have tag-names, in which case the type
! 	     appears in the bindings list with b->id NULL.  */
! 	  if (b->id)
! 	    {
! 	      gcc_assert (I_TAG_BINDING (b->id) == b);
! 	      I_TAG_BINDING (b->id) = b->shadowed;
! 	    }
!   	  break;
  
  	case FUNCTION_DECL:
! 	  /* Propagate TREE_ADDRESSABLE from nested functions to their
! 	     containing functions.  */
! 	  if (!TREE_ASM_WRITTEN (p)
  	      && DECL_INITIAL (p) != 0
  	      && TREE_ADDRESSABLE (p)
  	      && DECL_ABSTRACT_ORIGIN (p) != 0
  	      && DECL_ABSTRACT_ORIGIN (p) != p)
  	    TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (p)) = 1;
! 	  if (!DECL_EXTERNAL (p)
! 	      && DECL_INITIAL (p) == 0)
! 	    {
! 	      error ("%Jnested function %qD declared but never defined", p, p);
! 	      undef_nested_function = true;
! 	    }
! 	  goto common_symbol;
  
  	case VAR_DECL:
! 	  /* Warnings for unused variables.  */
! 	  if (warn_unused_variable
  	      && !TREE_USED (p)
  	      && !DECL_IN_SYSTEM_HEADER (p)
  	      && DECL_NAME (p)
! 	      && !DECL_ARTIFICIAL (p)
! 	      && scope != file_scope
! 	      && scope != external_scope) 
! 	    warning ("%Junused variable %qD", p, p);
  
! 	  if (b->inner_comp)
  	    {
! 	      error ("%Jtype of array %qD completed incompatibly with"
! 		     " implicit initialization", p, p);
  	    }
  
! 	  /* Fall through.  */
! 	case TYPE_DECL:
! 	case CONST_DECL:
! 	common_symbol:
! 	  /* All of these go in BLOCK_VARS, but only if this is the
! 	     binding in the home scope.  */
! 	  if (!b->nested)
! 	    {
! 	      TREE_CHAIN (p) = BLOCK_VARS (block);
! 	      BLOCK_VARS (block) = p;
! 	    }
! 	  /* If this is the file scope, and we are processing more
! 	     than one translation unit in this compilation, set
! 	     DECL_CONTEXT of each decl to the TRANSLATION_UNIT_DECL.
! 	     This makes same_translation_unit_p work, and causes
! 	     static declarations to be given disambiguating suffixes.  */
! 	  if (scope == file_scope && num_in_fnames > 1)
! 	    {
! 	      DECL_CONTEXT (p) = context;
! 	      if (TREE_CODE (p) == TYPE_DECL)
! 		set_type_context (TREE_TYPE (p), context);
! 	    }
  
! 	  /* Fall through.  */
! 	  /* Parameters go in DECL_ARGUMENTS, not BLOCK_VARS, and have
! 	     already been put there by store_parm_decls.  Unused-
! 	     parameter warnings are handled by function.c.
! 	     error_mark_node obviously does not go in BLOCK_VARS and
! 	     does not get unused-variable warnings.  */
! 	case PARM_DECL:
! 	case ERROR_MARK:
! 	  /* It is possible for a decl not to have a name.  We get
! 	     here with b->id NULL in this case.  */
! 	  if (b->id)
! 	    {
! 	      gcc_assert (I_SYMBOL_BINDING (b->id) == b);
! 	      I_SYMBOL_BINDING (b->id) = b->shadowed;
! 	      if (b->shadowed && b->shadowed->type)
! 		TREE_TYPE (b->shadowed->decl) = b->shadowed->type;
! 	    }
! 	  break;
  
! 	default:
! 	  gcc_unreachable ();
! 	}
      }
  
  
    /* Dispose of the block that we just made inside some higher level.  */
!   if ((scope->function_body || scope == file_scope) && context)
!     {
!       DECL_INITIAL (context) = block;
!       BLOCK_SUPERCONTEXT (block) = context;
!     }
    else if (scope->outer)
      {
        if (block)
*************** poplevel (int keep, int dummy ATTRIBUTE_
*** 687,697 ****
      }
  
    /* Pop the current scope, and free the structure for reuse.  */
!   pop_scope ();
  
    return block;
  }
  
  /* Insert BLOCK at the end of the list of subblocks of the current
     scope.  This is used when a BIND_EXPR is expanded, to handle the
     BLOCK node inside the BIND_EXPR.  */
--- 855,918 ----
      }
  
    /* Pop the current scope, and free the structure for reuse.  */
!   current_scope = scope->outer;
!   if (scope->function_body)
!     current_function_scope = scope->outer_function;
! 
!   memset (scope, 0, sizeof (struct c_scope));
!   scope->outer = scope_freelist;
!   scope_freelist = scope;
  
    return block;
  }
  
+ void
+ push_file_scope (void)
+ {
+   tree decl;
+ 
+   if (file_scope)
+     return;
+ 
+   push_scope ();
+   file_scope = current_scope;
+ 
+   start_fname_decls ();
+ 
+   for (decl = visible_builtins; decl; decl = TREE_CHAIN (decl))
+     bind (DECL_NAME (decl), decl, file_scope,
+ 	  /*invisible=*/false, /*nested=*/true);
+ }
+ 
+ void
+ pop_file_scope (void)
+ {
+   /* In case there were missing closebraces, get us back to the global
+      binding level.  */
+   while (current_scope != file_scope)
+     pop_scope ();
+ 
+   /* __FUNCTION__ is defined at file scope ("").  This
+      call may not be necessary as my tests indicate it
+      still works without it.  */
+   finish_fname_decls ();
+ 
+   /* This is the point to write out a PCH if we're doing that.
+      In that case we do not want to do anything else.  */
+   if (pch_file)
+     {
+       c_common_write_pch ();
+       return;
+     }
+ 
+   /* Pop off the file scope and close this translation unit.  */
+   pop_scope ();
+   file_scope = 0;
+ 
+   maybe_apply_pending_pragma_weaks ();
+   cgraph_finalize_compilation_unit ();
+ }
+ 
  /* Insert BLOCK at the end of the list of subblocks of the current
     scope.  This is used when a BIND_EXPR is expanded, to handle the
     BLOCK node inside the BIND_EXPR.  */
*************** insert_block (tree block)
*** 702,716 ****
    TREE_USED (block) = 1;
    SCOPE_LIST_APPEND (current_scope, blocks, block);
  }
- 
- /* Set the BLOCK node for the innermost scope (the one we are
-    currently in).  The RTL expansion machinery requires us to provide
-    this hook, but it is not useful in function-at-a-time mode.  */
- 
- void
- set_block (tree block ATTRIBUTE_UNUSED)
- {
- }
  
  /* Push a definition or a declaration of struct, union or enum tag "name".
     "type" should be the type node.
--- 923,928 ----
*************** set_block (tree block ATTRIBUTE_UNUSED)
*** 719,742 ****
     Note that the definition may really be just a forward reference.
     In that case, the TYPE_SIZE will be zero.  */
  
! void
  pushtag (tree name, tree type)
  {
-   struct c_scope *b = current_scope;
- 
    /* Record the identifier as the type's name if it has none.  */
!   if (name)
!     {
!       if (TYPE_NAME (type) == 0)
! 	TYPE_NAME (type) = name;
! 
!       if (IDENTIFIER_TAG_VALUE (name))
! 	b->shadowed_tags = tree_cons (name, IDENTIFIER_TAG_VALUE (name),
! 				      b->shadowed_tags);
!       IDENTIFIER_TAG_VALUE (name) = type;
!     }
! 
!   b->tags = tree_cons (name, type, b->tags);
  
    /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE will be the
       tagged type we just added to the current scope.  This fake
--- 931,943 ----
     Note that the definition may really be just a forward reference.
     In that case, the TYPE_SIZE will be zero.  */
  
! static void
  pushtag (tree name, tree type)
  {
    /* Record the identifier as the type's name if it has none.  */
!   if (name && !TYPE_NAME (type))
!     TYPE_NAME (type) = name;
!   bind (name, type, current_scope, /*invisible=*/false, /*nested=*/false);
  
    /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE will be the
       tagged type we just added to the current scope.  This fake
*************** pushtag (tree name, tree type)
*** 748,754 ****
    TYPE_STUB_DECL (type) = pushdecl (build_decl (TYPE_DECL, NULL_TREE, type));
  
    /* An approximation for now, so we can tell this is a function-scope tag.
!      This will be updated in poplevel.  */
    TYPE_CONTEXT (type) = DECL_CONTEXT (TYPE_STUB_DECL (type));
  }
  
--- 949,955 ----
    TYPE_STUB_DECL (type) = pushdecl (build_decl (TYPE_DECL, NULL_TREE, type));
  
    /* An approximation for now, so we can tell this is a function-scope tag.
!      This will be updated in pop_scope.  */
    TYPE_CONTEXT (type) = DECL_CONTEXT (TYPE_STUB_DECL (type));
  }
  
*************** match_builtin_function_types (tree newty
*** 776,785 ****
  
    while (oldargs || newargs)
      {
!       if (! oldargs
! 	  || ! newargs
! 	  || ! TREE_VALUE (oldargs)
! 	  || ! TREE_VALUE (newargs)
  	  || TYPE_MODE (TREE_VALUE (oldargs))
  	     != TYPE_MODE (TREE_VALUE (newargs)))
  	return 0;
--- 977,986 ----
  
    while (oldargs || newargs)
      {
!       if (!oldargs
! 	  || !newargs
! 	  || !TREE_VALUE (oldargs)
! 	  || !TREE_VALUE (newargs)
  	  || TYPE_MODE (TREE_VALUE (oldargs))
  	     != TYPE_MODE (TREE_VALUE (newargs)))
  	return 0;
*************** match_builtin_function_types (tree newty
*** 792,800 ****
    return build_type_attribute_variant (trytype, TYPE_ATTRIBUTES (oldtype));
  }
  
! /* Subroutine of diagnose_mismathed_decls.  Check for function type
     mismatch involving an empty arglist vs a nonempty one and give clearer
!    diagnostics. */
  static void
  diagnose_arglist_conflict (tree newdecl, tree olddecl,
  			   tree newtype, tree oldtype)
--- 993,1001 ----
    return build_type_attribute_variant (trytype, TYPE_ATTRIBUTES (oldtype));
  }
  
! /* Subroutine of diagnose_mismatched_decls.  Check for function type
     mismatch involving an empty arglist vs a nonempty one and give clearer
!    diagnostics.  */
  static void
  diagnose_arglist_conflict (tree newdecl, tree olddecl,
  			   tree newtype, tree oldtype)
*************** diagnose_arglist_conflict (tree newdecl,
*** 802,808 ****
    tree t;
  
    if (TREE_CODE (olddecl) != FUNCTION_DECL
!       || !comptypes (TREE_TYPE (oldtype), TREE_TYPE (newtype), COMPARE_STRICT)
        || !((TYPE_ARG_TYPES (oldtype) == 0 && DECL_INITIAL (olddecl) == 0)
  	   ||
  	   (TYPE_ARG_TYPES (newtype) == 0 && DECL_INITIAL (newdecl) == 0)))
--- 1003,1009 ----
    tree t;
  
    if (TREE_CODE (olddecl) != FUNCTION_DECL
!       || !comptypes (TREE_TYPE (oldtype), TREE_TYPE (newtype))
        || !((TYPE_ARG_TYPES (oldtype) == 0 && DECL_INITIAL (olddecl) == 0)
  	   ||
  	   (TYPE_ARG_TYPES (newtype) == 0 && DECL_INITIAL (newdecl) == 0)))
*************** diagnose_arglist_conflict (tree newdecl,
*** 818,831 ****
        if (TREE_CHAIN (t) == 0
  	  && TYPE_MAIN_VARIANT (type) != void_type_node)
  	{
! 	  inform ("a parameter list with an ellipsis can't match "
  		  "an empty parameter name list declaration");
  	  break;
  	}
  
        if (c_type_promotes_to (type) != type)
  	{
! 	  inform ("an argument type that has a default promotion can't match "
  		  "an empty parameter name list declaration");
  	  break;
  	}
--- 1019,1032 ----
        if (TREE_CHAIN (t) == 0
  	  && TYPE_MAIN_VARIANT (type) != void_type_node)
  	{
! 	  inform ("a parameter list with an ellipsis can%'t match "
  		  "an empty parameter name list declaration");
  	  break;
  	}
  
        if (c_type_promotes_to (type) != type)
  	{
! 	  inform ("an argument type that has a default promotion can%'t match "
  		  "an empty parameter name list declaration");
  	  break;
  	}
*************** validate_proto_after_old_defn (tree newd
*** 842,849 ****
    tree newargs, oldargs;
    int i;
  
!   /* ??? Elsewhere TYPE_MAIN_VARIANT is not used in this context.  */
! #define END_OF_ARGLIST(t) (TYPE_MAIN_VARIANT (t) == void_type_node)
  
    oldargs = TYPE_ACTUAL_ARG_TYPES (oldtype);
    newargs = TYPE_ARG_TYPES (newtype);
--- 1043,1049 ----
    tree newargs, oldargs;
    int i;
  
! #define END_OF_ARGLIST(t) ((t) == void_type_node)
  
    oldargs = TYPE_ACTUAL_ARG_TYPES (oldtype);
    newargs = TYPE_ARG_TYPES (newtype);
*************** validate_proto_after_old_defn (tree newd
*** 851,858 ****
  
    for (;;)
      {
!       tree oldargtype = TREE_VALUE (oldargs);
!       tree newargtype = TREE_VALUE (newargs);
  
        if (END_OF_ARGLIST (oldargtype) && END_OF_ARGLIST (newargtype))
  	break;
--- 1051,1058 ----
  
    for (;;)
      {
!       tree oldargtype = TYPE_MAIN_VARIANT (TREE_VALUE (oldargs));
!       tree newargtype = TYPE_MAIN_VARIANT (TREE_VALUE (newargs));
  
        if (END_OF_ARGLIST (oldargtype) && END_OF_ARGLIST (newargtype))
  	break;
*************** validate_proto_after_old_defn (tree newd
*** 861,882 ****
  	 agree on the number of arguments.  */
        if (END_OF_ARGLIST (oldargtype))
  	{
! 	  error ("%Jprototype for '%D' declares more arguments "
  		 "than previous old-style definition", newdecl, newdecl);
  	  return false;
  	}
        else if (END_OF_ARGLIST (newargtype))
  	{
! 	  error ("%Jprototype for '%D' declares fewer arguments "
  		 "than previous old-style definition", newdecl, newdecl);
  	  return false;
  	}
  
        /* Type for passing arg must be consistent with that declared
  	 for the arg.  */
!       else if (! comptypes (oldargtype, newargtype, COMPARE_STRICT))
  	{
! 	  error ("%Jprototype for '%D' declares arg %d with incompatible type",
  		 newdecl, newdecl, i);
  	  return false;
  	}
--- 1061,1083 ----
  	 agree on the number of arguments.  */
        if (END_OF_ARGLIST (oldargtype))
  	{
! 	  error ("%Jprototype for %qD declares more arguments "
  		 "than previous old-style definition", newdecl, newdecl);
  	  return false;
  	}
        else if (END_OF_ARGLIST (newargtype))
  	{
! 	  error ("%Jprototype for %qD declares fewer arguments "
  		 "than previous old-style definition", newdecl, newdecl);
  	  return false;
  	}
  
        /* Type for passing arg must be consistent with that declared
  	 for the arg.  */
!       else if (!comptypes (oldargtype, newargtype))
  	{
! 	  error ("%Jprototype for %qD declares argument %d"
! 		 " with incompatible type",
  		 newdecl, newdecl, i);
  	  return false;
  	}
*************** validate_proto_after_old_defn (tree newd
*** 888,894 ****
  
    /* If we get here, no errors were found, but do issue a warning
       for this poor-style construct.  */
!   warning ("%Jprototype for '%D' follows non-prototype definition",
  	   newdecl, newdecl);
    return true;
  #undef END_OF_ARGLIST
--- 1089,1095 ----
  
    /* If we get here, no errors were found, but do issue a warning
       for this poor-style construct.  */
!   warning ("%Jprototype for %qD follows non-prototype definition",
  	   newdecl, newdecl);
    return true;
  #undef END_OF_ARGLIST
*************** locate_old_decl (tree decl, void (*diag)
*** 903,913 ****
    if (TREE_CODE (decl) == FUNCTION_DECL && DECL_BUILT_IN (decl))
      ;
    else if (DECL_INITIAL (decl))
!     diag (N_("%Jprevious definition of '%D' was here"), decl, decl);
    else if (C_DECL_IMPLICIT (decl))
!     diag (N_("%Jprevious implicit declaration of '%D' was here"), decl, decl);
    else
!     diag (N_("%Jprevious declaration of '%D' was here"), decl, decl);
  }
  
  /* Subroutine of duplicate_decls.  Compare NEWDECL to OLDDECL.
--- 1104,1114 ----
    if (TREE_CODE (decl) == FUNCTION_DECL && DECL_BUILT_IN (decl))
      ;
    else if (DECL_INITIAL (decl))
!     diag (N_("%Jprevious definition of %qD was here"), decl, decl);
    else if (C_DECL_IMPLICIT (decl))
!     diag (N_("%Jprevious implicit declaration of %qD was here"), decl, decl);
    else
!     diag (N_("%Jprevious declaration of %qD was here"), decl, decl);
  }
  
  /* Subroutine of duplicate_decls.  Compare NEWDECL to OLDDECL.
*************** diagnose_mismatched_decls (tree newdecl,
*** 925,930 ****
--- 1126,1132 ----
    tree newtype, oldtype;
    bool pedwarned = false;
    bool warned = false;
+   bool retval = true;
  
    /* If we have error_mark_node for either decl or type, just discard
       the previous decl - we're in an error cascade already.  */
*************** diagnose_mismatched_decls (tree newdecl,
*** 939,983 ****
       unless OLDDECL is a builtin.  OLDDECL will be discarded in any case.  */
    if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
      {
!       if (TREE_CODE (olddecl) != FUNCTION_DECL
!           || !DECL_BUILT_IN (olddecl) || !C_DECL_INVISIBLE (olddecl))
  	{
! 	  error ("%J'%D' redeclared as different kind of symbol",
  		 newdecl, newdecl);
  	  locate_old_decl (olddecl, error);
  	}
        else if (TREE_PUBLIC (newdecl))
! 	warning ("%Jbuilt-in function '%D' declared as non-function",
  		 newdecl, newdecl);
        else if (warn_shadow)
! 	warning ("%Jshadowing built-in function '%D'",
  		 newdecl, newdecl);
        return false;
      }
  
!   if (!comptypes (oldtype, newtype, COMPARE_STRICT))
      {
        if (TREE_CODE (olddecl) == FUNCTION_DECL
! 	  && DECL_BUILT_IN (olddecl) && C_DECL_INVISIBLE (olddecl))
  	{
  	  /* Accept harmless mismatch in function types.
  	     This is for the ffs and fprintf builtins.  */
  	  tree trytype = match_builtin_function_types (newtype, oldtype);
  
! 	  if (trytype && comptypes (newtype, trytype, COMPARE_STRICT))
  	    *oldtypep = oldtype = trytype;
  	  else
  	    {
  	      /* If types don't match for a built-in, throw away the
  		 built-in.  No point in calling locate_old_decl here, it
! 		 won't print anything. */
! 	      warning ("%Jconflicting types for built-in function '%D'",
  		       newdecl, newdecl);
  	      return false;
  	    }
  	}
        else if (TREE_CODE (olddecl) == FUNCTION_DECL
! 	       && DECL_SOURCE_LINE (olddecl) == 0)
  	{
  	  /* A conflicting function declaration for a predeclared
  	     function that isn't actually built in.  Objective C uses
--- 1141,1195 ----
       unless OLDDECL is a builtin.  OLDDECL will be discarded in any case.  */
    if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
      {
!       if (!(TREE_CODE (olddecl) == FUNCTION_DECL
! 	    && DECL_BUILT_IN (olddecl)
! 	    && !C_DECL_DECLARED_BUILTIN (olddecl)))
  	{
! 	  error ("%J%qD redeclared as different kind of symbol",
  		 newdecl, newdecl);
  	  locate_old_decl (olddecl, error);
  	}
        else if (TREE_PUBLIC (newdecl))
! 	warning ("%Jbuilt-in function %qD declared as non-function",
  		 newdecl, newdecl);
        else if (warn_shadow)
! 	warning ("%Jdeclaration of %qD shadows a built-in function",
  		 newdecl, newdecl);
        return false;
      }
  
!   /* Enumerators have no linkage, so may only be declared once in a
!      given scope.  */
!   if (TREE_CODE (olddecl) == CONST_DECL)
!     {
!       error ("%Jredeclaration of enumerator %qD", newdecl, newdecl);
!       locate_old_decl (olddecl, error);
!       return false;
!     }
! 
!   if (!comptypes (oldtype, newtype))
      {
        if (TREE_CODE (olddecl) == FUNCTION_DECL
! 	  && DECL_BUILT_IN (olddecl) && !C_DECL_DECLARED_BUILTIN (olddecl))
  	{
  	  /* Accept harmless mismatch in function types.
  	     This is for the ffs and fprintf builtins.  */
  	  tree trytype = match_builtin_function_types (newtype, oldtype);
  
! 	  if (trytype && comptypes (newtype, trytype))
  	    *oldtypep = oldtype = trytype;
  	  else
  	    {
  	      /* If types don't match for a built-in, throw away the
  		 built-in.  No point in calling locate_old_decl here, it
! 		 won't print anything.  */
! 	      warning ("%Jconflicting types for built-in function %qD",
  		       newdecl, newdecl);
  	      return false;
  	    }
  	}
        else if (TREE_CODE (olddecl) == FUNCTION_DECL
! 	       && DECL_IS_BUILTIN (olddecl))
  	{
  	  /* A conflicting function declaration for a predeclared
  	     function that isn't actually built in.  Objective C uses
*************** diagnose_mismatched_decls (tree newdecl,
*** 993,1009 ****
        else if (TREE_CODE (newdecl) == FUNCTION_DECL && DECL_INITIAL (newdecl)
  	       && TYPE_MAIN_VARIANT (TREE_TYPE (oldtype)) == void_type_node
  	       && TYPE_MAIN_VARIANT (TREE_TYPE (newtype)) == integer_type_node
! 	       && C_FUNCTION_IMPLICIT_INT (newdecl))
  	{
! 	  pedwarn ("%Jconflicting types for '%D'", newdecl, newdecl);
  	  /* Make sure we keep void as the return type.  */
  	  TREE_TYPE (newdecl) = *newtypep = newtype = oldtype;
  	  C_FUNCTION_IMPLICIT_INT (newdecl) = 0;
  	  pedwarned = true;
  	}
        else
  	{
! 	  error ("%Jconflicting types for '%D'", newdecl, newdecl);
  	  diagnose_arglist_conflict (newdecl, olddecl, newtype, oldtype);
  	  locate_old_decl (olddecl, error);
  	  return false;
--- 1205,1236 ----
        else if (TREE_CODE (newdecl) == FUNCTION_DECL && DECL_INITIAL (newdecl)
  	       && TYPE_MAIN_VARIANT (TREE_TYPE (oldtype)) == void_type_node
  	       && TYPE_MAIN_VARIANT (TREE_TYPE (newtype)) == integer_type_node
! 	       && C_FUNCTION_IMPLICIT_INT (newdecl) && !DECL_INITIAL (olddecl))
  	{
! 	  pedwarn ("%Jconflicting types for %qD", newdecl, newdecl);
  	  /* Make sure we keep void as the return type.  */
  	  TREE_TYPE (newdecl) = *newtypep = newtype = oldtype;
  	  C_FUNCTION_IMPLICIT_INT (newdecl) = 0;
  	  pedwarned = true;
  	}
+       /* Permit void foo (...) to match an earlier call to foo (...) with
+ 	 no declared type (thus, implicitly int).  */
+       else if (TREE_CODE (newdecl) == FUNCTION_DECL
+ 	       && TYPE_MAIN_VARIANT (TREE_TYPE (newtype)) == void_type_node
+ 	       && TYPE_MAIN_VARIANT (TREE_TYPE (oldtype)) == integer_type_node
+ 	       && C_DECL_IMPLICIT (olddecl) && !DECL_INITIAL (olddecl))
+ 	{
+ 	  pedwarn ("%Jconflicting types for %qD", newdecl, newdecl);
+ 	  /* Make sure we keep void as the return type.  */
+ 	  TREE_TYPE (olddecl) = *oldtypep = oldtype = newtype;
+ 	  pedwarned = true;
+ 	}
        else
  	{
! 	  if (TYPE_QUALS (newtype) != TYPE_QUALS (oldtype))
! 	    error ("%J conflicting type qualifiers for %qD", newdecl, newdecl);
! 	  else
! 	    error ("%Jconflicting types for %qD", newdecl, newdecl);
  	  diagnose_arglist_conflict (newdecl, olddecl, newtype, oldtype);
  	  locate_old_decl (olddecl, error);
  	  return false;
*************** diagnose_mismatched_decls (tree newdecl,
*** 1016,1024 ****
    if (TREE_CODE (newdecl) == TYPE_DECL)
      {
        if (DECL_IN_SYSTEM_HEADER (newdecl) || DECL_IN_SYSTEM_HEADER (olddecl))
! 	return true;  /* allow OLDDECL to continue in use */
!       
!       error ("%Jredefinition of typedef '%D'", newdecl, newdecl);
        locate_old_decl (olddecl, error);
        return false;
      }
--- 1243,1251 ----
    if (TREE_CODE (newdecl) == TYPE_DECL)
      {
        if (DECL_IN_SYSTEM_HEADER (newdecl) || DECL_IN_SYSTEM_HEADER (olddecl))
! 	return true;  /* Allow OLDDECL to continue in use.  */
! 
!       error ("%Jredefinition of typedef %qD", newdecl, newdecl);
        locate_old_decl (olddecl, error);
        return false;
      }
*************** diagnose_mismatched_decls (tree newdecl,
*** 1036,1064 ****
  	 can't validate the argument list) the built-in definition is
  	 overridden, but optionally warn this was a bad choice of name.  */
        if (DECL_BUILT_IN (olddecl)
! 	  && C_DECL_INVISIBLE (olddecl)
  	  && (!TREE_PUBLIC (newdecl)
  	      || (DECL_INITIAL (newdecl)
  		  && !TYPE_ARG_TYPES (TREE_TYPE (newdecl)))))
  	{
  	  if (warn_shadow)
! 	    warning ("%Jshadowing built-in function '%D'", newdecl, newdecl);
  	  /* Discard the old built-in function.  */
  	  return false;
  	}
!       
        if (DECL_INITIAL (newdecl))
  	{
! 	  if (DECL_INITIAL (olddecl)
! 	      && !(DECL_DECLARED_INLINE_P (olddecl)
! 		   && DECL_EXTERNAL (olddecl)
! 		   && !(DECL_DECLARED_INLINE_P (newdecl)
! 			&& DECL_EXTERNAL (newdecl))))
  	    {
! 	      error ("%Jredefinition of '%D'", newdecl, newdecl);
! 	      locate_old_decl (olddecl, error);
! 	      return false;
! 	    }
  	}
        /* If we have a prototype after an old-style function definition,
  	 the argument types must be checked specially.  */
--- 1263,1323 ----
  	 can't validate the argument list) the built-in definition is
  	 overridden, but optionally warn this was a bad choice of name.  */
        if (DECL_BUILT_IN (olddecl)
! 	  && !C_DECL_DECLARED_BUILTIN (olddecl)
  	  && (!TREE_PUBLIC (newdecl)
  	      || (DECL_INITIAL (newdecl)
  		  && !TYPE_ARG_TYPES (TREE_TYPE (newdecl)))))
  	{
  	  if (warn_shadow)
! 	    warning ("%Jdeclaration of %qD shadows a built-in function",
! 		     newdecl, newdecl);
  	  /* Discard the old built-in function.  */
  	  return false;
  	}
! 
        if (DECL_INITIAL (newdecl))
  	{
! 	  if (DECL_INITIAL (olddecl))
  	    {
! 	      /* If both decls have extern inline and are in the same TU,
! 	         reject the new decl.  */
! 	      if (DECL_DECLARED_INLINE_P (olddecl)
! 		  && DECL_EXTERNAL (olddecl)
! 		  && DECL_DECLARED_INLINE_P (newdecl)
! 		  && DECL_EXTERNAL (newdecl)
! 		  && same_translation_unit_p (newdecl, olddecl))
! 		{
! 		  error ("%Jredefinition of %qD", newdecl, newdecl);
! 		  locate_old_decl (olddecl, error);
! 		  return false;
! 		}
! 	      /* If both decls have not extern inline, reject the new decl.  */
! 	      if (!DECL_DECLARED_INLINE_P (olddecl)
! 		  && !DECL_EXTERNAL (olddecl)
! 		  && !DECL_DECLARED_INLINE_P (newdecl)
! 		  && !DECL_EXTERNAL (newdecl))
! 		{
! 		  error ("%Jredefinition of %qD", newdecl, newdecl);
! 		  locate_old_decl (olddecl, error);
! 		  return false;
! 		}
! 	      /* If the new decl is declared as extern inline, error if they are
! 	         in the same TU, otherwise retain the old decl.  */
! 	      if (!DECL_DECLARED_INLINE_P (olddecl)
! 		  && !DECL_EXTERNAL (olddecl)
! 		  && DECL_DECLARED_INLINE_P (newdecl)
! 		  && DECL_EXTERNAL (newdecl))
! 		{
! 		  if (same_translation_unit_p (newdecl, olddecl))
! 		    {
! 		      error ("%Jredefinition of %qD", newdecl, newdecl);
! 		      locate_old_decl (olddecl, error);
! 		      return false;
! 		    }
! 		  else
! 		    retval = false;
! 		}
! 	   }
  	}
        /* If we have a prototype after an old-style function definition,
  	 the argument types must be checked specially.  */
*************** diagnose_mismatched_decls (tree newdecl,
*** 1070,1102 ****
  	  locate_old_decl (olddecl, error);
  	  return false;
  	}
!       /* Mismatched non-static and static is considered poor style.
!          We only diagnose static then non-static if -Wtraditional,
! 	 because it is the most convenient way to get some effects
! 	 (see e.g.  what unwind-dw2-fde-glibc.c does to the definition
! 	 of _Unwind_Find_FDE in unwind-dw2-fde.c).  Revisit?  */
        if (TREE_PUBLIC (olddecl) && !TREE_PUBLIC (newdecl))
  	{
! 	  /* A static function declaration for a predeclared function
! 	     that isn't actually built in, silently overrides the
! 	     default.  Objective C uses these.  See also above.
! 	     FIXME: Make Objective C use normal builtins.  */
! 	  if (TREE_CODE (olddecl) == FUNCTION_DECL
! 	      && DECL_SOURCE_LINE (olddecl) == 0)
! 	    return false;
! 	  else
  	    {
! 	      warning ("%Jstatic declaration of '%D' follows "
! 		       "non-static declaration", newdecl, newdecl);
! 	      warned = true;
  	    }
  	}
!       else if (TREE_PUBLIC (newdecl) && !TREE_PUBLIC (olddecl)
! 	       && warn_traditional)
  	{
! 	  warning ("%Jnon-static declaration of '%D' follows "
! 		   "static declaration", newdecl, newdecl);
! 	  warned = true;
  	}
      }
    else if (TREE_CODE (newdecl) == VAR_DECL)
--- 1329,1375 ----
  	  locate_old_decl (olddecl, error);
  	  return false;
  	}
!       /* A non-static declaration (even an "extern") followed by a
! 	 static declaration is undefined behavior per C99 6.2.2p3-5,7.
! 	 The same is true for a static forward declaration at block
! 	 scope followed by a non-static declaration/definition at file
! 	 scope.  Static followed by non-static at the same scope is
! 	 not undefined behavior, and is the most convenient way to get
! 	 some effects (see e.g.  what unwind-dw2-fde-glibc.c does to
! 	 the definition of _Unwind_Find_FDE in unwind-dw2-fde.c), but
! 	 we do diagnose it if -Wtraditional.  */
        if (TREE_PUBLIC (olddecl) && !TREE_PUBLIC (newdecl))
  	{
! 	  /* Two exceptions to the rule.  If olddecl is an extern
! 	     inline, or a predeclared function that isn't actually
! 	     built in, newdecl silently overrides olddecl.  The latter
! 	     occur only in Objective C; see also above.  (FIXME: Make
! 	     Objective C use normal builtins.)  */
! 	  if (!DECL_IS_BUILTIN (olddecl)
! 	      && !(DECL_EXTERNAL (olddecl)
! 		   && DECL_DECLARED_INLINE_P (olddecl)))
  	    {
! 	      error ("%Jstatic declaration of %qD follows "
! 		     "non-static declaration", newdecl, newdecl);
! 	      locate_old_decl (olddecl, error);
  	    }
+ 	  return false;
  	}
!       else if (TREE_PUBLIC (newdecl) && !TREE_PUBLIC (olddecl))
  	{
! 	  if (DECL_CONTEXT (olddecl))
! 	    {
! 	      error ("%Jnon-static declaration of %qD follows "
! 		     "static declaration", newdecl, newdecl);
! 	      locate_old_decl (olddecl, error);
! 	      return false;
! 	    }
! 	  else if (warn_traditional)
! 	    {
! 	      warning ("%Jnon-static declaration of %qD follows "
! 		       "static declaration", newdecl, newdecl);
! 	      warned = true;
! 	    }
  	}
      }
    else if (TREE_CODE (newdecl) == VAR_DECL)
*************** diagnose_mismatched_decls (tree newdecl,
*** 1106,1115 ****
        if (DECL_THREAD_LOCAL (newdecl) != DECL_THREAD_LOCAL (olddecl))
  	{
  	  if (DECL_THREAD_LOCAL (newdecl))
! 	    error ("%Jthread-local declaration of '%D' follows "
  		   "non-thread-local declaration", newdecl, newdecl);
  	  else
! 	    error ("%Jnon-thread-local declaration of '%D' follows "
  		   "thread-local declaration", newdecl, newdecl);
  
  	  locate_old_decl (olddecl, error);
--- 1379,1388 ----
        if (DECL_THREAD_LOCAL (newdecl) != DECL_THREAD_LOCAL (olddecl))
  	{
  	  if (DECL_THREAD_LOCAL (newdecl))
! 	    error ("%Jthread-local declaration of %qD follows "
  		   "non-thread-local declaration", newdecl, newdecl);
  	  else
! 	    error ("%Jnon-thread-local declaration of %qD follows "
  		   "thread-local declaration", newdecl, newdecl);
  
  	  locate_old_decl (olddecl, error);
*************** diagnose_mismatched_decls (tree newdecl,
*** 1119,1142 ****
        /* Multiple initialized definitions are not allowed (6.9p3,5).  */
        if (DECL_INITIAL (newdecl) && DECL_INITIAL (olddecl))
  	{
! 	  error ("%Jredefinition of '%D'", newdecl, newdecl);
  	  locate_old_decl (olddecl, error);
  	  return false;
  	}
  
!       /* Objects declared at file scope: if at least one is 'extern',
! 	 it's fine (6.2.2p4); otherwise the linkage must agree (6.2.2p7).  */
!       if (DECL_FILE_SCOPE_P (newdecl))
  	{
! 	  if (!DECL_EXTERNAL (newdecl)
! 	      && !DECL_EXTERNAL (olddecl)
! 	      && TREE_PUBLIC (newdecl) != TREE_PUBLIC (olddecl))
  	    {
  	      if (TREE_PUBLIC (newdecl))
! 		error ("%Jnon-static declaration of '%D' follows "
  		       "static declaration", newdecl, newdecl);
  	      else
! 		error ("%Jstatic declaration of '%D' follows "
  		       "non-static declaration", newdecl, newdecl);
  
  	      locate_old_decl (olddecl, error);
--- 1392,1436 ----
        /* Multiple initialized definitions are not allowed (6.9p3,5).  */
        if (DECL_INITIAL (newdecl) && DECL_INITIAL (olddecl))
  	{
! 	  error ("%Jredefinition of %qD", newdecl, newdecl);
  	  locate_old_decl (olddecl, error);
  	  return false;
  	}
  
!       /* Objects declared at file scope: if the first declaration had
! 	 external linkage (even if it was an external reference) the
! 	 second must have external linkage as well, or the behavior is
! 	 undefined.  If the first declaration had internal linkage, then
! 	 the second must too, or else be an external reference (in which
! 	 case the composite declaration still has internal linkage).
! 	 As for function declarations, we warn about the static-then-
! 	 extern case only for -Wtraditional.  See generally 6.2.2p3-5,7.  */
!       if (DECL_FILE_SCOPE_P (newdecl)
! 	  && TREE_PUBLIC (newdecl) != TREE_PUBLIC (olddecl))
  	{
! 	  if (DECL_EXTERNAL (newdecl))
! 	    {
! 	      if (!DECL_FILE_SCOPE_P (olddecl))
! 		{
! 		  error ("%Jextern declaration of %qD follows "
! 			 "declaration with no linkage", newdecl, newdecl);
! 		  locate_old_decl (olddecl, error);
! 		  return false;
! 		}
! 	      else if (warn_traditional)
! 		{
! 		  warning ("%Jnon-static declaration of %qD follows "
! 			   "static declaration", newdecl, newdecl);
! 		  warned = true;
! 		}
! 	    }
! 	  else
  	    {
  	      if (TREE_PUBLIC (newdecl))
! 		error ("%Jnon-static declaration of %qD follows "
  		       "static declaration", newdecl, newdecl);
  	      else
! 		error ("%Jstatic declaration of %qD follows "
  		       "non-static declaration", newdecl, newdecl);
  
  	      locate_old_decl (olddecl, error);
*************** diagnose_mismatched_decls (tree newdecl,
*** 1145,1175 ****
  	}
        /* Two objects with the same name declared at the same block
  	 scope must both be external references (6.7p3).  */
!       else if (DECL_CONTEXT (newdecl) == DECL_CONTEXT (olddecl)
! 	       && (!DECL_EXTERNAL (newdecl) || !DECL_EXTERNAL (olddecl)))
  	{
  	  if (DECL_EXTERNAL (newdecl))
! 	    error ("%Jextern declaration of '%D' follows "
! 		   "declaration with no linkage", newdecl, newdecl);
  	  else if (DECL_EXTERNAL (olddecl))
! 	    error ("%Jdeclaration of '%D' with no linkage follows "
! 		   "extern declaration", newdecl, newdecl);
  	  else
! 	    error ("%Jredeclaration of '%D' with no linkage",
! 		   newdecl, newdecl);
  
- 	  locate_old_decl (olddecl, error);
  	  return false;
  	}
      }
  
    /* warnings */
!   /* All decls must agree on a non-default visibility.  */
!   if (DECL_VISIBILITY (newdecl) != VISIBILITY_DEFAULT
!       && DECL_VISIBILITY (olddecl) != VISIBILITY_DEFAULT
        && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
      {
!       warning ("%Jredeclaration of '%D' with different visibility "
  	       "(old visibility preserved)", newdecl, newdecl);
        warned = true;
      }
--- 1439,1474 ----
  	}
        /* Two objects with the same name declared at the same block
  	 scope must both be external references (6.7p3).  */
!       else if (!DECL_FILE_SCOPE_P (newdecl))
  	{
  	  if (DECL_EXTERNAL (newdecl))
! 	    {
! 	      /* Extern with initializer at block scope, which will
! 		 already have received an error.  */
! 	    }
  	  else if (DECL_EXTERNAL (olddecl))
! 	    {
! 	      error ("%Jdeclaration of %qD with no linkage follows "
! 		     "extern declaration", newdecl, newdecl);
! 	      locate_old_decl (olddecl, error);
! 	    }
  	  else
! 	    {
! 	      error ("%Jredeclaration of %qD with no linkage",
! 		     newdecl, newdecl);
! 	      locate_old_decl (olddecl, error);
! 	    }
  
  	  return false;
  	}
      }
  
    /* warnings */
!   /* All decls must agree on a visibility.  */
!   if (DECL_VISIBILITY_SPECIFIED (newdecl) && DECL_VISIBILITY_SPECIFIED (olddecl)
        && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
      {
!       warning ("%Jredeclaration of %qD with different visibility "
  	       "(old visibility preserved)", newdecl, newdecl);
        warned = true;
      }
*************** diagnose_mismatched_decls (tree newdecl,
*** 1180,1211 ****
        if (DECL_DECLARED_INLINE_P (newdecl)
  	  && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
  	{
! 	  warning ("%Jinline declaration of '%D' follows "
  		   "declaration with attribute noinline", newdecl, newdecl);
  	  warned = true;
  	}
        else if (DECL_DECLARED_INLINE_P (olddecl)
  	       && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
  	{
! 	  warning ("%Jdeclaration of '%D' with attribute noinline follows "
  		   "inline declaration ", newdecl, newdecl);
  	  warned = true;
  	}
  
        /* Inline declaration after use or definition.
  	 ??? Should we still warn about this now we have unit-at-a-time
! 	 mode and can get it right?  */
!       if (DECL_DECLARED_INLINE_P (newdecl) && !DECL_DECLARED_INLINE_P (olddecl))
  	{
  	  if (TREE_USED (olddecl))
  	    {
! 	      warning ("%J'%D' declared inline after being called",
  		       olddecl, olddecl);
  	      warned = true;
  	    }
  	  else if (DECL_INITIAL (olddecl))
  	    {
! 	      warning ("%J'%D' declared inline after its definition",
  		       olddecl, olddecl);
  	      warned = true;
  	    }
--- 1479,1513 ----
        if (DECL_DECLARED_INLINE_P (newdecl)
  	  && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
  	{
! 	  warning ("%Jinline declaration of %qD follows "
  		   "declaration with attribute noinline", newdecl, newdecl);
  	  warned = true;
  	}
        else if (DECL_DECLARED_INLINE_P (olddecl)
  	       && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
  	{
! 	  warning ("%Jdeclaration of %qD with attribute noinline follows "
  		   "inline declaration ", newdecl, newdecl);
  	  warned = true;
  	}
  
        /* Inline declaration after use or definition.
  	 ??? Should we still warn about this now we have unit-at-a-time
! 	 mode and can get it right?
! 	 Definitely don't complain if the decls are in different translation
! 	 units.  */
!       if (DECL_DECLARED_INLINE_P (newdecl) && !DECL_DECLARED_INLINE_P (olddecl)
! 	  && same_translation_unit_p (olddecl, newdecl))
  	{
  	  if (TREE_USED (olddecl))
  	    {
! 	      warning ("%J%qD declared inline after being called",
  		       olddecl, olddecl);
  	      warned = true;
  	    }
  	  else if (DECL_INITIAL (olddecl))
  	    {
! 	      warning ("%J%qD declared inline after its definition",
  		       olddecl, olddecl);
  	      warned = true;
  	    }
*************** diagnose_mismatched_decls (tree newdecl,
*** 1213,1249 ****
      }
    else /* PARM_DECL, VAR_DECL */
      {
!       /* Redeclaration of a PARM_DECL is invalid unless this is the
! 	 real position of a forward-declared parameter (GCC extension).  */
        if (TREE_CODE (newdecl) == PARM_DECL
  	  && (!TREE_ASM_WRITTEN (olddecl) || TREE_ASM_WRITTEN (newdecl)))
  	{
! 	  error ("%Jredefinition of parameter '%D'", newdecl, newdecl);
  	  locate_old_decl (olddecl, error);
  	  return false;
  	}
- 
-       /* These bits are only type qualifiers when applied to objects.  */
-       if (TREE_THIS_VOLATILE (newdecl) != TREE_THIS_VOLATILE (olddecl))
- 	{
- 	  if (TREE_THIS_VOLATILE (newdecl))
- 	    pedwarn ("%Jvolatile declaration of '%D' follows "
- 		     "non-volatile declaration", newdecl, newdecl);
- 	  else
- 	    pedwarn ("%Jnon-volatile declaration of '%D' follows "
- 		     "volatile declaration", newdecl, newdecl);
- 	  pedwarned = true;
- 	}
-       if (TREE_READONLY (newdecl) != TREE_READONLY (olddecl))
- 	{
- 	  if (TREE_READONLY (newdecl))
- 	    pedwarn ("%Jconst declaration of '%D' follows "
- 		     "non-const declaration", newdecl, newdecl);
- 	  else
- 	    pedwarn ("%Jnon-const declaration of '%D' follows "
- 		     "const declaration", newdecl, newdecl);
- 	  pedwarned = true;
- 	}
      }
  
    /* Optional warning for completely redundant decls.  */
--- 1515,1536 ----
      }
    else /* PARM_DECL, VAR_DECL */
      {
!       /* Redeclaration of a parameter is a constraint violation (this is
! 	 not explicitly stated, but follows from C99 6.7p3 [no more than
! 	 one declaration of the same identifier with no linkage in the
! 	 same scope, except type tags] and 6.2.2p6 [parameters have no
! 	 linkage]).  We must check for a forward parameter declaration,
! 	 indicated by TREE_ASM_WRITTEN on the old declaration - this is
! 	 an extension, the mandatory diagnostic for which is handled by
! 	 mark_forward_parm_decls.  */
! 
        if (TREE_CODE (newdecl) == PARM_DECL
  	  && (!TREE_ASM_WRITTEN (olddecl) || TREE_ASM_WRITTEN (newdecl)))
  	{
! 	  error ("%Jredefinition of parameter %qD", newdecl, newdecl);
  	  locate_old_decl (olddecl, error);
  	  return false;
  	}
      }
  
    /* Optional warning for completely redundant decls.  */
*************** diagnose_mismatched_decls (tree newdecl,
*** 1253,1270 ****
  	 definition.  */
        && !(TREE_CODE (newdecl) == FUNCTION_DECL
  	   && DECL_INITIAL (newdecl) && !DECL_INITIAL (olddecl))
!       /* Don't warn about redundant redeclarations of builtins. */
        && !(TREE_CODE (newdecl) == FUNCTION_DECL
  	   && !DECL_BUILT_IN (newdecl)
  	   && DECL_BUILT_IN (olddecl)
! 	   && C_DECL_INVISIBLE (olddecl))
        /* Don't warn about an extern followed by a definition.  */
        && !(DECL_EXTERNAL (olddecl) && !DECL_EXTERNAL (newdecl))
        /* Don't warn about forward parameter decls.  */
        && !(TREE_CODE (newdecl) == PARM_DECL
  	   && TREE_ASM_WRITTEN (olddecl) && !TREE_ASM_WRITTEN (newdecl)))
      {
!       warning ("%Jredundant redeclaration of '%D'", newdecl, newdecl);
        warned = true;
      }
  
--- 1540,1557 ----
  	 definition.  */
        && !(TREE_CODE (newdecl) == FUNCTION_DECL
  	   && DECL_INITIAL (newdecl) && !DECL_INITIAL (olddecl))
!       /* Don't warn about redundant redeclarations of builtins.  */
        && !(TREE_CODE (newdecl) == FUNCTION_DECL
  	   && !DECL_BUILT_IN (newdecl)
  	   && DECL_BUILT_IN (olddecl)
! 	   && !C_DECL_DECLARED_BUILTIN (olddecl))
        /* Don't warn about an extern followed by a definition.  */
        && !(DECL_EXTERNAL (olddecl) && !DECL_EXTERNAL (newdecl))
        /* Don't warn about forward parameter decls.  */
        && !(TREE_CODE (newdecl) == PARM_DECL
  	   && TREE_ASM_WRITTEN (olddecl) && !TREE_ASM_WRITTEN (newdecl)))
      {
!       warning ("%Jredundant redeclaration of %qD", newdecl, newdecl);
        warned = true;
      }
  
*************** diagnose_mismatched_decls (tree newdecl,
*** 1272,1278 ****
    if (warned || pedwarned)
      locate_old_decl (olddecl, pedwarned ? pedwarn : warning);
  
!   return true;
  }
  
  /* Subroutine of duplicate_decls.  NEWDECL has been found to be
--- 1559,1565 ----
    if (warned || pedwarned)
      locate_old_decl (olddecl, pedwarned ? pedwarn : warning);
  
!   return retval;
  }
  
  /* Subroutine of duplicate_decls.  NEWDECL has been found to be
*************** merge_decls (tree newdecl, tree olddecl,
*** 1286,1310 ****
    int new_is_definition = (TREE_CODE (newdecl) == FUNCTION_DECL
  			   && DECL_INITIAL (newdecl) != 0);
  
!   /* For real parm decl following a forward decl, return 1 so old decl
!      will be reused.  Only allow this to happen once.  */
    if (TREE_CODE (newdecl) == PARM_DECL
!       && TREE_ASM_WRITTEN (olddecl) && ! TREE_ASM_WRITTEN (newdecl))
      {
        TREE_ASM_WRITTEN (olddecl) = 0;
-       return;
      }
  
    DECL_ATTRIBUTES (newdecl)
!     = (*targetm.merge_decl_attributes) (olddecl, newdecl);
  
    /* Merge the data types specified in the two decls.  */
    TREE_TYPE (newdecl)
      = TREE_TYPE (olddecl)
!     = common_type (newtype, oldtype);
  
    /* Lay the type out, unless already done.  */
!   if (oldtype != TREE_TYPE (newdecl))
      {
        if (TREE_TYPE (newdecl) != error_mark_node)
  	layout_type (TREE_TYPE (newdecl));
--- 1573,1610 ----
    int new_is_definition = (TREE_CODE (newdecl) == FUNCTION_DECL
  			   && DECL_INITIAL (newdecl) != 0);
  
!   /* For real parm decl following a forward decl, rechain the old decl
!      in its new location and clear TREE_ASM_WRITTEN (it's not a
!      forward decl anymore).  */
    if (TREE_CODE (newdecl) == PARM_DECL
!       && TREE_ASM_WRITTEN (olddecl) && !TREE_ASM_WRITTEN (newdecl))
      {
+       struct c_binding *b, **here;
+ 
+       for (here = &current_scope->bindings; *here; here = &(*here)->prev)
+ 	if ((*here)->decl == olddecl)
+ 	  goto found;
+       gcc_unreachable ();
+ 
+     found:
+       b = *here;
+       *here = b->prev;
+       b->prev = current_scope->bindings;
+       current_scope->bindings = b;
+ 
        TREE_ASM_WRITTEN (olddecl) = 0;
      }
  
    DECL_ATTRIBUTES (newdecl)
!     = targetm.merge_decl_attributes (olddecl, newdecl);
  
    /* Merge the data types specified in the two decls.  */
    TREE_TYPE (newdecl)
      = TREE_TYPE (olddecl)
!     = composite_type (newtype, oldtype);
  
    /* Lay the type out, unless already done.  */
!   if (!comptypes (oldtype, TREE_TYPE (newdecl)))
      {
        if (TREE_TYPE (newdecl) != error_mark_node)
  	layout_type (TREE_TYPE (newdecl));
*************** merge_decls (tree newdecl, tree olddecl,
*** 1341,1346 ****
--- 1641,1650 ----
  	make_var_volatile (newdecl);
      }
  
+   /* Merge deprecatedness.  */
+   if (TREE_DEPRECATED (newdecl))
+     TREE_DEPRECATED (olddecl) = 1;
+ 
    /* Keep source location of definition rather than declaration.  */
    if (DECL_INITIAL (newdecl) == 0 && DECL_INITIAL (olddecl) != 0)
      DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
*************** merge_decls (tree newdecl, tree olddecl,
*** 1366,1374 ****
       Currently, it can only be defined in the prototype.  */
    COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
  
!   /* If either declaration has a nondefault visibility, use it.  */
!   if (DECL_VISIBILITY (olddecl) != VISIBILITY_DEFAULT)
!     DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
  
    if (TREE_CODE (newdecl) == FUNCTION_DECL)
      {
--- 1670,1681 ----
       Currently, it can only be defined in the prototype.  */
    COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
  
!   /* Use visibility of whichever declaration had it specified */
!   if (DECL_VISIBILITY_SPECIFIED (olddecl))
!     {
!       DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
!       DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
!     }
  
    if (TREE_CODE (newdecl) == FUNCTION_DECL)
      {
*************** merge_decls (tree newdecl, tree olddecl,
*** 1394,1400 ****
  	 copy the attributes of NEWDECL into OLDDECL.  */
        TREE_PUBLIC (olddecl) = TREE_PUBLIC (newdecl);
        /* If this clears `static', clear it in the identifier too.  */
!       if (! TREE_PUBLIC (olddecl))
  	TREE_PUBLIC (DECL_NAME (olddecl)) = 0;
      }
    if (DECL_EXTERNAL (newdecl))
--- 1701,1707 ----
  	 copy the attributes of NEWDECL into OLDDECL.  */
        TREE_PUBLIC (olddecl) = TREE_PUBLIC (newdecl);
        /* If this clears `static', clear it in the identifier too.  */
!       if (!TREE_PUBLIC (olddecl))
  	TREE_PUBLIC (DECL_NAME (olddecl)) = 0;
      }
    if (DECL_EXTERNAL (newdecl))
*************** merge_decls (tree newdecl, tree olddecl,
*** 1404,1410 ****
  
        /* An extern decl does not override previous storage class.  */
        TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
!       if (! DECL_EXTERNAL (newdecl))
  	{
  	  DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
  	  DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
--- 1711,1717 ----
  
        /* An extern decl does not override previous storage class.  */
        TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
!       if (!DECL_EXTERNAL (newdecl))
  	{
  	  DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
  	  DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
*************** merge_decls (tree newdecl, tree olddecl,
*** 1449,1471 ****
  
        if (DECL_BUILT_IN (olddecl))
  	{
! 	  /* If redeclaring a builtin function, it stays built in.  */
  	  DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
  	  DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
  	}
  
        /* Also preserve various other info from the definition.  */
!       if (! new_is_definition)
  	{
  	  DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
  	  DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
! 	  DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl);
  	  DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
  	  DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
  
  	  /* Set DECL_INLINE on the declaration if we've got a body
  	     from which to instantiate.  */
! 	  if (DECL_INLINE (olddecl) && ! DECL_UNINLINABLE (newdecl))
  	    {
  	      DECL_INLINE (newdecl) = 1;
  	      DECL_ABSTRACT_ORIGIN (newdecl)
--- 1756,1780 ----
  
        if (DECL_BUILT_IN (olddecl))
  	{
! 	  /* If redeclaring a builtin function, it stays built in.
! 	     But it gets tagged as having been declared.  */
  	  DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
  	  DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
+ 	  C_DECL_DECLARED_BUILTIN (newdecl) = 1;
  	}
  
        /* Also preserve various other info from the definition.  */
!       if (!new_is_definition)
  	{
  	  DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
  	  DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
! 	  DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
  	  DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
  	  DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
  
  	  /* Set DECL_INLINE on the declaration if we've got a body
  	     from which to instantiate.  */
! 	  if (DECL_INLINE (olddecl) && !DECL_UNINLINABLE (newdecl))
  	    {
  	      DECL_INLINE (newdecl) = 1;
  	      DECL_ABSTRACT_ORIGIN (newdecl)
*************** merge_decls (tree newdecl, tree olddecl,
*** 1477,1498 ****
  	  /* If a previous declaration said inline, mark the
  	     definition as inlinable.  */
  	  if (DECL_DECLARED_INLINE_P (newdecl)
! 	      && ! DECL_UNINLINABLE (newdecl))
  	    DECL_INLINE (newdecl) = 1;
  	}
      }
  
    /* Copy most of the decl-specific fields of NEWDECL into OLDDECL.
!      But preserve OLDDECL's DECL_UID and C_DECL_INVISIBLE.  */
    {
      unsigned olddecl_uid = DECL_UID (olddecl);
!     unsigned olddecl_invisible = C_DECL_INVISIBLE (olddecl);
  
      memcpy ((char *) olddecl + sizeof (struct tree_common),
  	    (char *) newdecl + sizeof (struct tree_common),
  	    sizeof (struct tree_decl) - sizeof (struct tree_common));
      DECL_UID (olddecl) = olddecl_uid;
!     C_DECL_INVISIBLE (olddecl) = olddecl_invisible;
    }
  
    /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
--- 1786,1807 ----
  	  /* If a previous declaration said inline, mark the
  	     definition as inlinable.  */
  	  if (DECL_DECLARED_INLINE_P (newdecl)
! 	      && !DECL_UNINLINABLE (newdecl))
  	    DECL_INLINE (newdecl) = 1;
  	}
      }
  
    /* Copy most of the decl-specific fields of NEWDECL into OLDDECL.
!      But preserve OLDDECL's DECL_UID and DECL_CONTEXT.  */
    {
      unsigned olddecl_uid = DECL_UID (olddecl);
!     tree olddecl_context = DECL_CONTEXT (olddecl);
  
      memcpy ((char *) olddecl + sizeof (struct tree_common),
  	    (char *) newdecl + sizeof (struct tree_common),
  	    sizeof (struct tree_decl) - sizeof (struct tree_common));
      DECL_UID (olddecl) = olddecl_uid;
!     DECL_CONTEXT (olddecl) = olddecl_context;
    }
  
    /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
*************** merge_decls (tree newdecl, tree olddecl,
*** 1502,1508 ****
        && (TREE_CODE (olddecl) == FUNCTION_DECL
  	  || (TREE_CODE (olddecl) == VAR_DECL
  	      && TREE_STATIC (olddecl))))
!     make_decl_rtl (olddecl, NULL);
  }
  
  /* Handle when a new declaration NEWDECL has the same name as an old
--- 1811,1817 ----
        && (TREE_CODE (olddecl) == FUNCTION_DECL
  	  || (TREE_CODE (olddecl) == VAR_DECL
  	      && TREE_STATIC (olddecl))))
!     make_decl_rtl (olddecl);
  }
  
  /* Handle when a new declaration NEWDECL has the same name as an old
*************** merge_decls (tree newdecl, tree olddecl,
*** 1515,1521 ****
  static bool
  duplicate_decls (tree newdecl, tree olddecl)
  {
!   tree newtype, oldtype;
  
    if (!diagnose_mismatched_decls (newdecl, olddecl, &newtype, &oldtype))
      return false;
--- 1824,1830 ----
  static bool
  duplicate_decls (tree newdecl, tree olddecl)
  {
!   tree newtype = NULL, oldtype = NULL;
  
    if (!diagnose_mismatched_decls (newdecl, olddecl, &newtype, &oldtype))
      return false;
*************** duplicate_decls (tree newdecl, tree oldd
*** 1523,1595 ****
    merge_decls (newdecl, olddecl, newtype, oldtype);
    return true;
  }
-   
- 
- /* Return any external DECL associated with ID, whether or not it is
-    currently in scope.  */
- 
- static tree
- any_external_decl (tree id)
- {
-   tree decl = IDENTIFIER_SYMBOL_VALUE (id);
-   tree t;
- 
-   if (decl == 0 || TREE_CODE (decl) == ERROR_MARK)
-     return 0;
-   else if (TREE_CODE (decl) != TYPE_DECL && DECL_EXTERNAL (decl))
-     return decl;
- 
-   t = purpose_member (id, truly_local_externals);
-   if (t)
-     return TREE_VALUE (t);
- 
-   return 0;
- }
  
! /* Record an external decl DECL.  This only does something if a
!    shadowing decl already exists.  */
  static void
! record_external_decl (tree decl)
  {
!   tree name = DECL_NAME (decl);
!   if (!IDENTIFIER_SYMBOL_VALUE (name))
!     return;
! 
!   truly_local_externals = tree_cons (name, decl, truly_local_externals);
! }
  
! /* Check whether decl-node X shadows an existing declaration.
!    OLD is the old IDENTIFIER_SYMBOL_VALUE of the DECL_NAME of X,
!    which might be a NULL_TREE.  */
! static void
! warn_if_shadowing (tree x, tree old)
! {
!   /* Nothing to shadow?  */
!   if (old == 0
!       /* Shadow warnings not wanted?  */
!       || !warn_shadow
        /* No shadow warnings for internally generated vars.  */
!       || DECL_SOURCE_LINE (x) == 0
        /* No shadow warnings for vars made for inlining.  */
!       || DECL_FROM_INLINE (x)
        /* Don't warn about the parm names in function declarator
! 	 within a function declarator.
! 	 It would be nice to avoid warning in any function
! 	 declarator in a declaration, as opposed to a definition,
! 	 but there is no way to tell it's not a definition.  */
!       || (TREE_CODE (x) == PARM_DECL && current_scope->outer->parm_flag)
!       /* Shadow warnings only apply to local variables and parameters.  */
!       || (TREE_CODE (x) != PARM_DECL && DECL_FILE_SCOPE_P (x)))
      return;
  
!   if (TREE_CODE (old) == PARM_DECL)
!     warning ("%Jdeclaration of '%D' shadows a parameter", x, x);
!   else if (DECL_FILE_SCOPE_P (old))
!     warning ("%Jdeclaration of '%D' shadows a global declaration", x, x);
!   else
!     warning ("%Jdeclaration of '%D' shadows a previous local", x, x);
  
!   warning ("%Jshadowed declaration is here", old);
  }
  
  
--- 1832,1892 ----
    merge_decls (newdecl, olddecl, newtype, oldtype);
    return true;
  }
  
! 
! /* Check whether decl-node NEW_DECL shadows an existing declaration.  */
  static void
! warn_if_shadowing (tree new_decl)
  {
!   struct c_binding *b;
  
!   /* Shadow warnings wanted?  */
!   if (!warn_shadow
        /* No shadow warnings for internally generated vars.  */
!       || DECL_IS_BUILTIN (new_decl)
        /* No shadow warnings for vars made for inlining.  */
!       || DECL_FROM_INLINE (new_decl)
        /* Don't warn about the parm names in function declarator
! 	 within a function declarator.  It would be nice to avoid
! 	 warning in any function declarator in a declaration, as
! 	 opposed to a definition, but there is no way to tell
! 	 it's not a definition at this point.  */
!       || (TREE_CODE (new_decl) == PARM_DECL && current_scope->outer->parm_flag))
      return;
  
!   /* Is anything being shadowed?  Invisible decls do not count.  */
!   for (b = I_SYMBOL_BINDING (DECL_NAME (new_decl)); b; b = b->shadowed)
!     if (b->decl && b->decl != new_decl && !b->invisible)
!       {
! 	tree old_decl = b->decl;
  
! 	if (old_decl == error_mark_node)
! 	  {
! 	    warning ("%Jdeclaration of %qD shadows previous non-variable",
! 		     new_decl, new_decl);
! 	    break;
! 	  }
! 	else if (TREE_CODE (old_decl) == PARM_DECL)
! 	  warning ("%Jdeclaration of %qD shadows a parameter",
! 		   new_decl, new_decl);
! 	else if (DECL_FILE_SCOPE_P (old_decl))
! 	  warning ("%Jdeclaration of %qD shadows a global declaration",
! 		   new_decl, new_decl);
! 	else if (TREE_CODE (old_decl) == FUNCTION_DECL
! 		 && DECL_BUILT_IN (old_decl))
! 	  {
! 	    warning ("%Jdeclaration of %qD shadows a built-in function",
! 		     new_decl, new_decl);
! 	    break;
! 	  }
! 	else
! 	  warning ("%Jdeclaration of %qD shadows a previous local",
! 		   new_decl, new_decl);
! 
! 	warning ("%Jshadowed declaration is here", old_decl);
! 
! 	break;
!       }
  }
  
  
*************** warn_if_shadowing (tree x, tree old)
*** 1640,1646 ****
  static void
  clone_underlying_type (tree x)
  {
!   if (DECL_SOURCE_LINE (x) == 0)
      {
        if (TYPE_NAME (TREE_TYPE (x)) == 0)
  	TYPE_NAME (TREE_TYPE (x)) = x;
--- 1937,1943 ----
  static void
  clone_underlying_type (tree x)
  {
!   if (DECL_IS_BUILTIN (x))
      {
        if (TYPE_NAME (TREE_TYPE (x)) == 0)
  	TYPE_NAME (TREE_TYPE (x)) = x;
*************** clone_underlying_type (tree x)
*** 1650,1656 ****
      {
        tree tt = TREE_TYPE (x);
        DECL_ORIGINAL_TYPE (x) = tt;
!       tt = build_type_copy (tt);
        TYPE_NAME (tt) = x;
        TREE_USED (tt) = TREE_USED (x);
        TREE_TYPE (x) = tt;
--- 1947,1953 ----
      {
        tree tt = TREE_TYPE (x);
        DECL_ORIGINAL_TYPE (x) = tt;
!       tt = build_variant_type_copy (tt);
        TYPE_NAME (tt) = x;
        TREE_USED (tt) = TREE_USED (x);
        TREE_TYPE (x) = tt;
*************** pushdecl (tree x)
*** 1670,1803 ****
  {
    tree name = DECL_NAME (x);
    struct c_scope *scope = current_scope;
! 
! #ifdef ENABLE_CHECKING
!   if (error_mark_node == 0)
!     /* Called too early.  */
!     abort ();
! #endif
  
    /* Functions need the lang_decl data.  */
!   if (TREE_CODE (x) == FUNCTION_DECL && ! DECL_LANG_SPECIFIC (x))
!     DECL_LANG_SPECIFIC (x) = ggc_alloc_cleared (sizeof (struct lang_decl));
  
!   /* A local extern declaration for a function doesn't constitute nesting.
!      A local auto declaration does, since it's a forward decl
!      for a nested function coming later.  */
!   if (current_function_decl == NULL
!       || ((TREE_CODE (x) == FUNCTION_DECL || TREE_CODE (x) == VAR_DECL)
! 	  && DECL_INITIAL (x) == 0 && DECL_EXTERNAL (x)))
!     DECL_CONTEXT (x) = current_file_decl;
!   else
      DECL_CONTEXT (x) = current_function_decl;
  
!   if (name)
      {
!       tree old;
  
        if (warn_nested_externs
! 	  && scope != global_scope
! 	  && DECL_EXTERNAL (x)
  	  && !DECL_IN_SYSTEM_HEADER (x))
! 	warning ("nested extern declaration of `%s'",
! 		 IDENTIFIER_POINTER (name));
  
!       old = lookup_name_current_level (name);
!       if (old && duplicate_decls (x, old))
  	{
! 	  /* For PARM_DECLs, old may be a forward declaration.
! 	     If so, we want to remove it from its old location
! 	     (in the variables chain) and rechain it in the
! 	     location given by the new declaration.  */
! 	  if (TREE_CODE (x) == PARM_DECL)
  	    {
! 	      tree *p;
! 	      for (p = &scope->names; *p; p = &TREE_CHAIN (*p))
! 		if (*p == old)
! 		  {
! 		    *p = TREE_CHAIN (old);
! 		    SCOPE_LIST_APPEND (scope, parms, old);
! 		    break;
! 		  }
  	    }
! 	  return old;
! 	}
!       if (DECL_EXTERNAL (x) || scope == global_scope)
! 	{
! 	  /* Find and check against a previous, not-in-scope, external
! 	     decl for this identifier.  (C99 6.2.7p2: All declarations
! 	     that refer to the same object or function shall have
! 	     compatible type; otherwise, the behavior is undefined.)  */
!  	  tree ext = any_external_decl (name);
! 	  if (ext)
  	    {
! 	      if (duplicate_decls (x, ext))
! 		x = copy_node (ext);
  	    }
! 	  else
! 	    record_external_decl (x);
  	}
  
!       if (TREE_CODE (x) == TYPE_DECL)
! 	clone_underlying_type (x);
  
!       /* If storing a local value, there may already be one
! 	 (inherited).  If so, record it for restoration when this
! 	 scope ends.  Take care not to do this if we are replacing an
! 	 older decl in the same scope (i.e.  duplicate_decls returned
! 	 false, above).  */
!       if (scope != global_scope)
  	{
! 	  tree inherited_decl = lookup_name (name);
! 	  if (inherited_decl && inherited_decl != old)
  	    {
! 	      warn_if_shadowing (x, inherited_decl);
! 	      scope->shadowed = tree_cons (name, inherited_decl,
! 					   scope->shadowed);
  	    }
  	}
  
!       /* Install the new declaration in the requested scope.  */
!       IDENTIFIER_SYMBOL_VALUE (name) = x;
!       C_DECL_INVISIBLE (x) = 0;
  
!       /* If x's type is incomplete because it's based on a
! 	 structure or union which has not yet been fully declared,
! 	 attach it to that structure or union type, so we can go
! 	 back and complete the variable declaration later, if the
! 	 structure or union gets fully declared.
  
! 	 If the input is erroneous, we can have error_mark in the type
! 	 slot (e.g. "f(void a, ...)") - that doesn't count as an
! 	 incomplete type.  */
!       if (TREE_TYPE (x) != error_mark_node
! 	  && !COMPLETE_TYPE_P (TREE_TYPE (x)))
! 	{
! 	  tree element = TREE_TYPE (x);
  
! 	  while (TREE_CODE (element) == ARRAY_TYPE)
! 	    element = TREE_TYPE (element);
! 	  element = TYPE_MAIN_VARIANT (element);
  
! 	  if ((TREE_CODE (element) == RECORD_TYPE
! 	       || TREE_CODE (element) == UNION_TYPE)
! 	      && (TREE_CODE (x) != TYPE_DECL
! 		  || TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE)
! 	      && !COMPLETE_TYPE_P (element))
! 	    C_TYPE_INCOMPLETE_VARS (element)
! 	      = tree_cons (NULL_TREE, x, C_TYPE_INCOMPLETE_VARS (element));
! 	}
!     }
  
!   if (TREE_CODE (x) == PARM_DECL)
!     SCOPE_LIST_APPEND (scope, parms, x);
!   else
!     SCOPE_LIST_APPEND (scope, names, x);
  
    return x;
  }
  
! /* Record X as belonging to the global scope (C99 "file scope").
     This is used only internally by the Objective-C front end,
     and is limited to its needs.  duplicate_decls is not called;
     if there is any preexisting decl for this identifier, it is an ICE.  */
--- 1967,2164 ----
  {
    tree name = DECL_NAME (x);
    struct c_scope *scope = current_scope;
!   struct c_binding *b;
!   bool nested = false;
  
    /* Functions need the lang_decl data.  */
!   if (TREE_CODE (x) == FUNCTION_DECL && !DECL_LANG_SPECIFIC (x))
!     DECL_LANG_SPECIFIC (x) = GGC_CNEW (struct lang_decl);
  
!   /* Must set DECL_CONTEXT for everything not at file scope or
!      DECL_FILE_SCOPE_P won't work.  Local externs don't count
!      unless they have initializers (which generate code).  */
!   if (current_function_decl
!       && ((TREE_CODE (x) != FUNCTION_DECL && TREE_CODE (x) != VAR_DECL)
! 	  || DECL_INITIAL (x) || !DECL_EXTERNAL (x)))
      DECL_CONTEXT (x) = current_function_decl;
  
!   /* Anonymous decls are just inserted in the scope.  */
!   if (!name)
      {
!       bind (name, x, scope, /*invisible=*/false, /*nested=*/false);
!       return x;
!     }
! 
!   /* First, see if there is another declaration with the same name in
!      the current scope.  If there is, duplicate_decls may do all the
!      work for us.  If duplicate_decls returns false, that indicates
!      two incompatible decls in the same scope; we are to silently
!      replace the old one (duplicate_decls has issued all appropriate
!      diagnostics).  In particular, we should not consider possible
!      duplicates in the external scope, or shadowing.  */
!   b = I_SYMBOL_BINDING (name);
!   if (b && B_IN_SCOPE (b, scope))
!     {
!       if (TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE
! 	  && COMPLETE_TYPE_P (TREE_TYPE (x)))
! 	b->inner_comp = false;
!       if (duplicate_decls (x, b->decl))
! 	return b->decl;
!       else
! 	goto skip_external_and_shadow_checks;
!     }
! 
!   /* All declarations with external linkage, and all external
!      references, go in the external scope, no matter what scope is
!      current.  However, the binding in that scope is ignored for
!      purposes of normal name lookup.  A separate binding structure is
!      created in the requested scope; this governs the normal
!      visibility of the symbol.
  
+      The binding in the externals scope is used exclusively for
+      detecting duplicate declarations of the same object, no matter
+      what scope they are in; this is what we do here.  (C99 6.2.7p2:
+      All declarations that refer to the same object or function shall
+      have compatible type; otherwise, the behavior is undefined.)  */
+   if (DECL_EXTERNAL (x) || scope == file_scope)
+     {
+       tree type = TREE_TYPE (x);
+       tree vistype = 0;
+       tree visdecl = 0;
+       bool type_saved = false;
+       if (b && !B_IN_EXTERNAL_SCOPE (b)
+ 	  && (TREE_CODE (b->decl) == FUNCTION_DECL
+ 	      || TREE_CODE (b->decl) == VAR_DECL)
+ 	  && DECL_FILE_SCOPE_P (b->decl))
+ 	{
+ 	  visdecl = b->decl;
+ 	  vistype = TREE_TYPE (visdecl);
+ 	}
        if (warn_nested_externs
! 	  && scope != file_scope
  	  && !DECL_IN_SYSTEM_HEADER (x))
! 	warning ("nested extern declaration of %qD", x);
  
!       while (b && !B_IN_EXTERNAL_SCOPE (b))
  	{
! 	  /* If this decl might be modified, save its type.  This is
! 	     done here rather than when the decl is first bound
! 	     because the type may change after first binding, through
! 	     being completed or through attributes being added.  If we
! 	     encounter multiple such decls, only the first should have
! 	     its type saved; the others will already have had their
! 	     proper types saved and the types will not have changed as
! 	     their scopes will not have been re-entered.  */
! 	  if (DECL_P (b->decl) && DECL_FILE_SCOPE_P (b->decl) && !type_saved)
  	    {
! 	      b->type = TREE_TYPE (b->decl);
! 	      type_saved = true;
  	    }
! 	  if (B_IN_FILE_SCOPE (b)
! 	      && TREE_CODE (b->decl) == VAR_DECL
! 	      && TREE_STATIC (b->decl)
! 	      && TREE_CODE (TREE_TYPE (b->decl)) == ARRAY_TYPE
! 	      && !TYPE_DOMAIN (TREE_TYPE (b->decl))
! 	      && TREE_CODE (type) == ARRAY_TYPE
! 	      && TYPE_DOMAIN (type)
! 	      && TYPE_MAX_VALUE (TYPE_DOMAIN (type))
! 	      && !integer_zerop (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
  	    {
! 	      /* Array type completed in inner scope, which should be
! 		 diagnosed if the completion does not have size 1 and
! 		 it does not get completed in the file scope.  */
! 	      b->inner_comp = true;
  	    }
! 	  b = b->shadowed;
  	}
  
!       /* If a matching external declaration has been found, set its
! 	 type to the composite of all the types of that declaration.
! 	 After the consistency checks, it will be reset to the
! 	 composite of the visible types only.  */
!       if (b && (TREE_PUBLIC (x) || same_translation_unit_p (x, b->decl))
! 	  && b->type)
! 	TREE_TYPE (b->decl) = b->type;
  
!       /* The point of the same_translation_unit_p check here is,
! 	 we want to detect a duplicate decl for a construct like
! 	 foo() { extern bar(); } ... static bar();  but not if
! 	 they are in different translation units.  In any case,
! 	 the static does not go in the externals scope.  */
!       if (b
! 	  && (TREE_PUBLIC (x) || same_translation_unit_p (x, b->decl))
! 	  && duplicate_decls (x, b->decl))
  	{
! 	  tree thistype;
! 	  thistype = (vistype ? composite_type (vistype, type) : type);
! 	  b->type = TREE_TYPE (b->decl);
! 	  if (TREE_CODE (b->decl) == FUNCTION_DECL && DECL_BUILT_IN (b->decl))
! 	    thistype
! 	      = build_type_attribute_variant (thistype,
! 					      TYPE_ATTRIBUTES (b->type));
! 	  TREE_TYPE (b->decl) = thistype;
! 	  bind (name, b->decl, scope, /*invisible=*/false, /*nested=*/true);
! 	  return b->decl;
! 	}
!       else if (TREE_PUBLIC (x))
! 	{
! 	  if (visdecl && !b && duplicate_decls (x, visdecl))
  	    {
! 	      /* An external declaration at block scope referring to a
! 		 visible entity with internal linkage.  The composite
! 		 type will already be correct for this scope, so we
! 		 just need to fall through to make the declaration in
! 		 this scope.  */
! 	      nested = true;
! 	      x = visdecl;
! 	    }
! 	  else
! 	    {
! 	      bind (name, x, external_scope, /*invisible=*/true,
! 		    /*nested=*/false);
! 	      nested = true;
  	    }
  	}
+     }
  
!   warn_if_shadowing (x);
  
!  skip_external_and_shadow_checks:
!   if (TREE_CODE (x) == TYPE_DECL)
!     clone_underlying_type (x);
  
!   bind (name, x, scope, /*invisible=*/false, nested);
  
!   /* If x's type is incomplete because it's based on a
!      structure or union which has not yet been fully declared,
!      attach it to that structure or union type, so we can go
!      back and complete the variable declaration later, if the
!      structure or union gets fully declared.
  
!      If the input is erroneous, we can have error_mark in the type
!      slot (e.g. "f(void a, ...)") - that doesn't count as an
!      incomplete type.  */
!   if (TREE_TYPE (x) != error_mark_node
!       && !COMPLETE_TYPE_P (TREE_TYPE (x)))
!     {
!       tree element = TREE_TYPE (x);
  
!       while (TREE_CODE (element) == ARRAY_TYPE)
! 	element = TREE_TYPE (element);
!       element = TYPE_MAIN_VARIANT (element);
  
+       if ((TREE_CODE (element) == RECORD_TYPE
+ 	   || TREE_CODE (element) == UNION_TYPE)
+ 	  && (TREE_CODE (x) != TYPE_DECL
+ 	      || TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE)
+ 	  && !COMPLETE_TYPE_P (element))
+ 	C_TYPE_INCOMPLETE_VARS (element)
+ 	  = tree_cons (NULL_TREE, x, C_TYPE_INCOMPLETE_VARS (element));
+     }
    return x;
  }
  
! /* Record X as belonging to file scope.
     This is used only internally by the Objective-C front end,
     and is limited to its needs.  duplicate_decls is not called;
     if there is any preexisting decl for this identifier, it is an ICE.  */
*************** tree
*** 1806,1855 ****
  pushdecl_top_level (tree x)
  {
    tree name;
! 
!   if (TREE_CODE (x) != VAR_DECL)
!     abort ();
  
    name = DECL_NAME (x);
  
!   if (IDENTIFIER_SYMBOL_VALUE (name))
!     abort ();
  
!   DECL_CONTEXT (x) = current_file_decl;
!   IDENTIFIER_SYMBOL_VALUE (name) = x;
  
-   SCOPE_LIST_APPEND (global_scope, names, x);
    return x;
  }
  
  /* Generate an implicit declaration for identifier FUNCTIONID as a
     function of type int ().  */
  
  tree
  implicitly_declare (tree functionid)
  {
!   tree decl = any_external_decl (functionid);
  
!   if (decl)
      {
!       /* Implicit declaration of a function already declared
! 	 (somehow) in a different scope, or as a built-in.
! 	 If this is the first time this has happened, warn;
! 	 then recycle the old declaration.  */
!       if (!C_DECL_IMPLICIT (decl))
  	{
! 	  implicit_decl_warning (DECL_NAME (decl));
! 	  if (! DECL_FILE_SCOPE_P (decl))
! 	    warning ("%Jprevious declaration of '%D'", decl, decl);
! 	  C_DECL_IMPLICIT (decl) = 1;
  	}
!       /* If this function is global, then it must already be in the
! 	 global scope, so there's no need to push it again.  */
!       if (current_scope == global_scope)
  	return decl;
!       /* If this is a local declaration, make a copy; we can't have
! 	 the same DECL listed in two different scopes.  */
!       return pushdecl (copy_node (decl));
      }
  
    /* Not seen before.  */
--- 2167,2283 ----
  pushdecl_top_level (tree x)
  {
    tree name;
!   bool nested = false;
!   gcc_assert (TREE_CODE (x) == VAR_DECL || TREE_CODE (x) == CONST_DECL);
  
    name = DECL_NAME (x);
  
!  gcc_assert (TREE_CODE (x) == CONST_DECL || !I_SYMBOL_BINDING (name));
  
!   if (TREE_PUBLIC (x))
!     {
!       bind (name, x, external_scope, /*invisible=*/true, /*nested=*/false);
!       nested = true;
!     }
!   if (file_scope)
!     bind (name, x, file_scope, /*invisible=*/false, nested);
  
    return x;
  }
  
+ static void
+ implicit_decl_warning (tree id, tree olddecl)
+ {
+   void (*diag) (const char *, ...);
+   switch (mesg_implicit_function_declaration)
+     {
+     case 0: return;
+     case 1: diag = warning; break;
+     case 2: diag = error;   break;
+     default: gcc_unreachable ();
+     }
+ 
+   diag (N_("implicit declaration of function %qE"), id);
+   if (olddecl)
+     locate_old_decl (olddecl, diag);
+ }
+ 
  /* Generate an implicit declaration for identifier FUNCTIONID as a
     function of type int ().  */
  
  tree
  implicitly_declare (tree functionid)
  {
!   struct c_binding *b;
!   tree decl = 0;
!   tree asmspec_tree;
  
!   for (b = I_SYMBOL_BINDING (functionid); b; b = b->shadowed)
      {
!       if (B_IN_SCOPE (b, external_scope))
  	{
! 	  decl = b->decl;
! 	  break;
  	}
!     }
! 
!   if (decl)
!     {
!       if (decl == error_mark_node)
  	return decl;
! 
!       /* FIXME: Objective-C has weird not-really-builtin functions
! 	 which are supposed to be visible automatically.  They wind up
! 	 in the external scope because they're pushed before the file
! 	 scope gets created.  Catch this here and rebind them into the
! 	 file scope.  */
!       if (!DECL_BUILT_IN (decl) && DECL_IS_BUILTIN (decl))
! 	{
! 	  bind (functionid, decl, file_scope,
! 		/*invisible=*/false, /*nested=*/true);
! 	  return decl;
! 	}
!       else
! 	{
! 	  tree newtype = default_function_type;
! 	  if (b->type)
! 	    TREE_TYPE (decl) = b->type;
! 	  /* Implicit declaration of a function already declared
! 	     (somehow) in a different scope, or as a built-in.
! 	     If this is the first time this has happened, warn;
! 	     then recycle the old declaration but with the new type.  */
! 	  if (!C_DECL_IMPLICIT (decl))
! 	    {
! 	      implicit_decl_warning (functionid, decl);
! 	      C_DECL_IMPLICIT (decl) = 1;
! 	    }
! 	  if (DECL_BUILT_IN (decl))
! 	    {
! 	      newtype = build_type_attribute_variant (newtype,
! 						      TYPE_ATTRIBUTES
! 						      (TREE_TYPE (decl)));
! 	      if (!comptypes (newtype, TREE_TYPE (decl)))
! 		{
! 		  warning ("incompatible implicit declaration of built-in"
! 			   " function %qD", decl);
! 		  newtype = TREE_TYPE (decl);
! 		}
! 	    }
! 	  else
! 	    {
! 	      if (!comptypes (newtype, TREE_TYPE (decl)))
! 		{
! 		  error ("incompatible implicit declaration of function %qD",
! 			 decl);
! 		  locate_old_decl (decl, error);
! 		}
! 	    }
! 	  b->type = TREE_TYPE (decl);
! 	  TREE_TYPE (decl) = newtype;
! 	  bind (functionid, decl, current_scope,
! 		/*invisible=*/false, /*nested=*/true);
! 	  return decl;
! 	}
      }
  
    /* Not seen before.  */
*************** implicitly_declare (tree functionid)
*** 1857,1870 ****
    DECL_EXTERNAL (decl) = 1;
    TREE_PUBLIC (decl) = 1;
    C_DECL_IMPLICIT (decl) = 1;
!   implicit_decl_warning (functionid);
  
    /* C89 says implicit declarations are in the innermost block.
       So we record the decl in the standard fashion.  */
    decl = pushdecl (decl);
  
    /* No need to call objc_check_decl here - it's a function type.  */
!   rest_of_decl_compilation (decl, NULL, 0, 0);
  
    /* Write a record describing this implicit function declaration
       to the prototypes file (if requested).  */
--- 2285,2301 ----
    DECL_EXTERNAL (decl) = 1;
    TREE_PUBLIC (decl) = 1;
    C_DECL_IMPLICIT (decl) = 1;
!   implicit_decl_warning (functionid, 0);
!   asmspec_tree = maybe_apply_renaming_pragma (decl, /*asmname=*/NULL);
!   if (asmspec_tree)
!     set_user_assembler_name (decl, TREE_STRING_POINTER (asmspec_tree));
  
    /* C89 says implicit declarations are in the innermost block.
       So we record the decl in the standard fashion.  */
    decl = pushdecl (decl);
  
    /* No need to call objc_check_decl here - it's a function type.  */
!   rest_of_decl_compilation (decl, 0, 0);
  
    /* Write a record describing this implicit function declaration
       to the prototypes file (if requested).  */
*************** implicitly_declare (tree functionid)
*** 1876,1891 ****
    return decl;
  }
  
- static void
- implicit_decl_warning (tree id)
- {
-   const char *name = IDENTIFIER_POINTER (id);
-   if (mesg_implicit_function_declaration == 2)
-     error ("implicit declaration of function `%s'", name);
-   else if (mesg_implicit_function_declaration == 1)
-     warning ("implicit declaration of function `%s'", name);
- }
- 
  /* Issue an error message for a reference to an undeclared variable
     ID, including a reference to a builtin outside of function-call
     context.  Establish a binding of the identifier to error_mark_node
--- 2307,2312 ----
*************** undeclared_variable (tree id)
*** 1899,1926 ****
  
    if (current_function_decl == 0)
      {
!       error ("`%s' undeclared here (not in a function)",
! 	     IDENTIFIER_POINTER (id));
        scope = current_scope;
      }
    else
      {
!       error ("`%s' undeclared (first use in this function)",
! 	     IDENTIFIER_POINTER (id));
  
!       if (! already)
  	{
  	  error ("(Each undeclared identifier is reported only once");
  	  error ("for each function it appears in.)");
  	  already = true;
  	}
  
!       scope = current_function_scope;
      }
! 
!   scope->shadowed = tree_cons (id, IDENTIFIER_SYMBOL_VALUE (id),
! 			       scope->shadowed);
!   IDENTIFIER_SYMBOL_VALUE (id) = error_mark_node;
  }
  
  /* Subroutine of lookup_label, declare_label, define_label: construct a
--- 2320,2344 ----
  
    if (current_function_decl == 0)
      {
!       error ("%qE undeclared here (not in a function)", id);
        scope = current_scope;
      }
    else
      {
!       error ("%qE undeclared (first use in this function)", id);
  
!       if (!already)
  	{
  	  error ("(Each undeclared identifier is reported only once");
  	  error ("for each function it appears in.)");
  	  already = true;
  	}
  
!       /* If we are parsing old-style parameter decls, current_function_decl
!          will be nonnull but current_function_scope will be null.  */
!       scope = current_function_scope ? current_function_scope : current_scope;
      }
!   bind (id, error_mark_node, scope, /*invisible=*/false, /*nested=*/false);
  }
  
  /* Subroutine of lookup_label, declare_label, define_label: construct a
*************** make_label (tree name, location_t locati
*** 1938,1957 ****
    return label;
  }
  
- /* Another subroutine of lookup_label, declare_label, define_label:
-    set up the binding of name to LABEL_DECL in the given SCOPE.  */
- 
- static void
- bind_label (tree name, tree label, struct c_scope *scope)
- {
-   if (IDENTIFIER_LABEL_VALUE (name))
-     scope->shadowed = tree_cons (name, IDENTIFIER_LABEL_VALUE (name),
- 				 scope->shadowed);
-   IDENTIFIER_LABEL_VALUE (name) = label;
- 
-   SCOPE_LIST_APPEND (scope, names, label);
- }
- 
  /* Get the LABEL_DECL corresponding to identifier NAME as a label.
     Create one if none exists so far for the current function.
     This is called when a label is used in a goto expression or
--- 2356,2361 ----
*************** lookup_label (tree name)
*** 1964,1970 ****
  
    if (current_function_decl == 0)
      {
!       error ("label %s referenced outside of any function",
  	     IDENTIFIER_POINTER (name));
        return 0;
      }
--- 2368,2374 ----
  
    if (current_function_decl == 0)
      {
!       error ("label %qs referenced outside of any function",
  	     IDENTIFIER_POINTER (name));
        return 0;
      }
*************** lookup_label (tree name)
*** 1972,1978 ****
    /* Use a label already defined or ref'd with this name, but not if
       it is inherited from a containing function and wasn't declared
       using __label__.  */
!   label = IDENTIFIER_LABEL_VALUE (name);
    if (label && (DECL_CONTEXT (label) == current_function_decl
  		|| C_DECLARED_LABEL_FLAG (label)))
      {
--- 2376,2382 ----
    /* Use a label already defined or ref'd with this name, but not if
       it is inherited from a containing function and wasn't declared
       using __label__.  */
!   label = I_LABEL_DECL (name);
    if (label && (DECL_CONTEXT (label) == current_function_decl
  		|| C_DECLARED_LABEL_FLAG (label)))
      {
*************** lookup_label (tree name)
*** 1988,1994 ****
    label = make_label (name, input_location);
  
    /* Ordinary labels go in the current function scope.  */
!   bind_label (name, label, current_function_scope);
    return label;
  }
  
--- 2392,2399 ----
    label = make_label (name, input_location);
  
    /* Ordinary labels go in the current function scope.  */
!   bind (name, label, current_function_scope,
! 	/*invisible=*/false, /*nested=*/false);
    return label;
  }
  
*************** lookup_label (tree name)
*** 1996,2028 ****
     any that may be inherited from containing functions or containing
     scopes.  This is called for __label__ declarations.  */
  
- /* Note that valid use, if the label being shadowed comes from another
-    scope in the same function, requires calling declare_nonlocal_label
-    right away.  (Is this still true?  -zw 2003-07-17)  */
- 
  tree
  declare_label (tree name)
  {
!   tree label = IDENTIFIER_LABEL_VALUE (name);
!   tree dup;
  
    /* Check to make sure that the label hasn't already been declared
       at this scope */
!   for (dup = current_scope->names; dup; dup = TREE_CHAIN (dup))
!     if (dup == label)
!       {
! 	error ("duplicate label declaration `%s'", IDENTIFIER_POINTER (name));
! 	error ("%Jthis is a previous declaration", dup);
  
! 	/* Just use the previous declaration.  */
! 	return dup;
!       }
  
    label = make_label (name, input_location);
    C_DECLARED_LABEL_FLAG (label) = 1;
  
    /* Declared labels go in the current scope.  */
!   bind_label (name, label, current_scope);
    return label;
  }
  
--- 2401,2429 ----
     any that may be inherited from containing functions or containing
     scopes.  This is called for __label__ declarations.  */
  
  tree
  declare_label (tree name)
  {
!   struct c_binding *b = I_LABEL_BINDING (name);
!   tree label;
  
    /* Check to make sure that the label hasn't already been declared
       at this scope */
!   if (b && B_IN_CURRENT_SCOPE (b))
!     {
!       error ("duplicate label declaration %qs", IDENTIFIER_POINTER (name));
!       locate_old_decl (b->decl, error);
  
!       /* Just use the previous declaration.  */
!       return b->decl;
!     }
  
    label = make_label (name, input_location);
    C_DECLARED_LABEL_FLAG (label) = 1;
  
    /* Declared labels go in the current scope.  */
!   bind (name, label, current_scope,
! 	/*invisible=*/false, /*nested=*/false);
    return label;
  }
  
*************** declare_label (tree name)
*** 2033,2045 ****
  tree
  define_label (location_t location, tree name)
  {
-   tree label;
- 
    /* Find any preexisting label with this name.  It is an error
       if that label has already been defined in this function, or
       if there is a containing function with a declared label with
       the same name.  */
!   label = IDENTIFIER_LABEL_VALUE (name);
  
    if (label
        && ((DECL_CONTEXT (label) == current_function_decl
--- 2434,2445 ----
  tree
  define_label (location_t location, tree name)
  {
    /* Find any preexisting label with this name.  It is an error
       if that label has already been defined in this function, or
       if there is a containing function with a declared label with
       the same name.  */
!   tree label = I_LABEL_DECL (name);
!   struct c_label_list *nlist;
  
    if (label
        && ((DECL_CONTEXT (label) == current_function_decl
*************** define_label (location_t location, tree 
*** 2047,2057 ****
  	  || (DECL_CONTEXT (label) != current_function_decl
  	      && C_DECLARED_LABEL_FLAG (label))))
      {
!       error ("%Hduplicate label `%D'", &location, label);
!       if (DECL_INITIAL (label))
! 	error ("%J`%D' previously defined here", label, label);
!       else
! 	error ("%J`%D' previously declared here", label, label);
        return 0;
      }
    else if (label && DECL_CONTEXT (label) == current_function_decl)
--- 2447,2454 ----
  	  || (DECL_CONTEXT (label) != current_function_decl
  	      && C_DECLARED_LABEL_FLAG (label))))
      {
!       error ("%Hduplicate label %qD", &location, label);
!       locate_old_decl (label, error);
        return 0;
      }
    else if (label && DECL_CONTEXT (label) == current_function_decl)
*************** define_label (location_t location, tree 
*** 2059,2064 ****
--- 2456,2463 ----
        /* The label has been used or declared already in this function,
  	 but not defined.  Update its location to point to this
  	 definition.  */
+       if (C_DECL_UNDEFINABLE_STMT_EXPR (label))
+ 	error ("%Jjump into statement expression", label);
        DECL_SOURCE_LOCATION (label) = location;
      }
    else
*************** define_label (location_t location, tree 
*** 2067,2094 ****
        label = make_label (name, location);
  
        /* Ordinary labels go in the current function scope.  */
!       bind_label (name, label, current_function_scope);
      }
  
    if (warn_traditional && !in_system_header && lookup_name (name))
      warning ("%Htraditional C lacks a separate namespace for labels, "
!              "identifier `%s' conflicts", &location,
  	     IDENTIFIER_POINTER (name));
  
    /* Mark label as having been defined.  */
    DECL_INITIAL (label) = error_mark_node;
    return label;
  }
  
- /* Return the list of declarations of the current scope.  */
- 
- tree
- getdecls (void)
- {
-   return current_scope->names;
- }
- 
- 
  /* Given NAME, an IDENTIFIER_NODE,
     return the structure (or union or enum) definition for that name.
     If THISLEVEL_ONLY is nonzero, searches only the current_scope.
--- 2466,2490 ----
        label = make_label (name, location);
  
        /* Ordinary labels go in the current function scope.  */
!       bind (name, label, current_function_scope,
! 	    /*invisible=*/false, /*nested=*/false);
      }
  
    if (warn_traditional && !in_system_header && lookup_name (name))
      warning ("%Htraditional C lacks a separate namespace for labels, "
!              "identifier %qs conflicts", &location,
  	     IDENTIFIER_POINTER (name));
  
+   nlist = XOBNEW (&parser_obstack, struct c_label_list);
+   nlist->next = label_context_stack->labels_def;
+   nlist->label = label;
+   label_context_stack->labels_def = nlist;
+ 
    /* Mark label as having been defined.  */
    DECL_INITIAL (label) = error_mark_node;
    return label;
  }
  
  /* Given NAME, an IDENTIFIER_NODE,
     return the structure (or union or enum) definition for that name.
     If THISLEVEL_ONLY is nonzero, searches only the current_scope.
*************** getdecls (void)
*** 2099,2123 ****
  static tree
  lookup_tag (enum tree_code code, tree name, int thislevel_only)
  {
!   tree tag = IDENTIFIER_TAG_VALUE (name);
    int thislevel = 0;
  
!   if (!tag)
      return 0;
  
    /* We only care about whether it's in this level if
       thislevel_only was set or it might be a type clash.  */
!   if (thislevel_only || TREE_CODE (tag) != code)
      {
!       if (current_scope == global_scope
! 	  || purpose_member (name, current_scope->tags))
  	thislevel = 1;
      }
  
    if (thislevel_only && !thislevel)
      return 0;
  
!   if (TREE_CODE (tag) != code)
      {
        /* Definition isn't the kind we were looking for.  */
        pending_invalid_xref = name;
--- 2495,2523 ----
  static tree
  lookup_tag (enum tree_code code, tree name, int thislevel_only)
  {
!   struct c_binding *b = I_TAG_BINDING (name);
    int thislevel = 0;
  
!   if (!b || !b->decl)
      return 0;
  
    /* We only care about whether it's in this level if
       thislevel_only was set or it might be a type clash.  */
!   if (thislevel_only || TREE_CODE (b->decl) != code)
      {
!       /* For our purposes, a tag in the external scope is the same as
! 	 a tag in the file scope.  (Primarily relevant to Objective-C
! 	 and its builtin structure tags, which get pushed before the
! 	 file scope is created.)  */
!       if (B_IN_CURRENT_SCOPE (b)
! 	  || (current_scope == file_scope && B_IN_EXTERNAL_SCOPE (b)))
  	thislevel = 1;
      }
  
    if (thislevel_only && !thislevel)
      return 0;
  
!   if (TREE_CODE (b->decl) != code)
      {
        /* Definition isn't the kind we were looking for.  */
        pending_invalid_xref = name;
*************** lookup_tag (enum tree_code code, tree na
*** 2130,2136 ****
        if (thislevel)
  	pending_xref_error ();
      }
!   return tag;
  }
  
  /* Print an error message now
--- 2530,2536 ----
        if (thislevel)
  	pending_xref_error ();
      }
!   return b->decl;
  }
  
  /* Print an error message now
*************** void
*** 2142,2148 ****
  pending_xref_error (void)
  {
    if (pending_invalid_xref != 0)
!     error ("%H`%s' defined as wrong kind of tag",
             &pending_invalid_xref_location,
             IDENTIFIER_POINTER (pending_invalid_xref));
    pending_invalid_xref = 0;
--- 2542,2548 ----
  pending_xref_error (void)
  {
    if (pending_invalid_xref != 0)
!     error ("%H%qs defined as wrong kind of tag",
             &pending_invalid_xref_location,
             IDENTIFIER_POINTER (pending_invalid_xref));
    pending_invalid_xref = 0;
*************** pending_xref_error (void)
*** 2157,2192 ****
  tree
  lookup_name (tree name)
  {
!   tree decl = IDENTIFIER_SYMBOL_VALUE (name);
!   if (decl == 0 || decl == error_mark_node)
!     return decl;
!   if (C_DECL_INVISIBLE (decl))
!     return 0;
!   return decl;
  }
  
! /* Similar to `lookup_name' but look only at the current scope.  */
  
  static tree
! lookup_name_current_level (tree name)
  {
!   tree decl = IDENTIFIER_SYMBOL_VALUE (name);
! 
!   if (decl == 0 || decl == error_mark_node || C_DECL_INVISIBLE (decl))
!     return 0;
! 
!   if (current_scope == global_scope)
!     return decl;
! 
!   /* Scan the current scope for a decl with name NAME.
!      For PARM_DECLs, we have to look at both ->parms and ->names, since
!      forward parameter declarations wind up on the ->names list.  */
!   if (TREE_CODE (decl) == PARM_DECL
!       && chain_member (decl, current_scope->parms))
!     return decl;
!   if (chain_member (decl, current_scope->names))
!     return decl;
  
    return 0;
  }
  
--- 2557,2578 ----
  tree
  lookup_name (tree name)
  {
!   struct c_binding *b = I_SYMBOL_BINDING (name);
!   if (b && !b->invisible)
!     return b->decl;
!   return 0;
  }
  
! /* Similar to `lookup_name' but look only at the indicated scope.  */
  
  static tree
! lookup_name_in_scope (tree name, struct c_scope *scope)
  {
!   struct c_binding *b;
  
+   for (b = I_SYMBOL_BINDING (name); b; b = b->shadowed)
+     if (B_IN_SCOPE (b, scope))
+       return b->decl;
    return 0;
  }
  
*************** c_init_decl_processing (void)
*** 2207,2226 ****
  
    current_function_decl = 0;
  
!   /* Make the c_scope structure for global names.  */
!   pushlevel (0);
!   global_scope = current_scope;
  
    /* Declarations from c_common_nodes_and_builtins must not be associated
       with this input file, lest we get differences between using and not
       using preprocessed headers.  */
!   input_location.file = "<internal>";
    input_location.line = 0;
  
!   /* Make the DECL for the toplevel file scope.  */
!   current_file_decl = build_decl (TRANSLATION_UNIT_DECL, NULL, NULL);
! 
!   build_common_tree_nodes (flag_signed_char);
  
    c_common_nodes_and_builtins ();
  
--- 2593,2615 ----
  
    current_function_decl = 0;
  
!   gcc_obstack_init (&parser_obstack);
! 
!   /* Make the externals scope.  */
!   push_scope ();
!   external_scope = current_scope;
  
    /* Declarations from c_common_nodes_and_builtins must not be associated
       with this input file, lest we get differences between using and not
       using preprocessed headers.  */
! #ifdef USE_MAPPED_LOCATION
!   input_location = BUILTINS_LOCATION;
! #else
!   input_location.file = "<built-in>";
    input_location.line = 0;
+ #endif
  
!   build_common_tree_nodes (flag_signed_char, false);
  
    c_common_nodes_and_builtins ();
  
*************** c_init_decl_processing (void)
*** 2241,2253 ****
  
    input_location = save_loc;
  
!   pedantic_lvalues = pedantic;
  
    make_fname_decl = c_make_fname_decl;
    start_fname_decls ();
- 
-   first_builtin_decl = global_scope->names;
-   last_builtin_decl = global_scope->names_last;
  }
  
  /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give the
--- 2630,2639 ----
  
    input_location = save_loc;
  
!   pedantic_lvalues = true;
  
    make_fname_decl = c_make_fname_decl;
    start_fname_decls ();
  }
  
  /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give the
*************** c_make_fname_decl (tree id, int type_dep
*** 2264,2272 ****
    tree decl, type, init;
    size_t length = strlen (name);
  
!   type =  build_array_type
!           (build_qualified_type (char_type_node, TYPE_QUAL_CONST),
! 	   build_index_type (size_int (length)));
  
    decl = build_decl (VAR_DECL, id, type);
  
--- 2650,2658 ----
    tree decl, type, init;
    size_t length = strlen (name);
  
!   type = build_array_type (char_type_node,
! 			   build_index_type (size_int (length)));
!   type = c_build_qualified_type (type, TYPE_QUAL_CONST);
  
    decl = build_decl (VAR_DECL, id, type);
  
*************** c_make_fname_decl (tree id, int type_dep
*** 2275,2280 ****
--- 2661,2667 ----
    DECL_ARTIFICIAL (decl) = 1;
  
    init = build_string (length + 1, name);
+   free ((char *) name);
    TREE_TYPE (init) = type;
    DECL_INITIAL (decl) = init;
  
*************** c_make_fname_decl (tree id, int type_dep
*** 2283,2290 ****
    if (current_function_decl)
      {
        DECL_CONTEXT (decl) = current_function_decl;
!       IDENTIFIER_SYMBOL_VALUE (id) = decl;
!       SCOPE_LIST_APPEND (current_function_scope, names, decl);
      }
  
    finish_decl (decl, init, NULL_TREE);
--- 2670,2677 ----
    if (current_function_decl)
      {
        DECL_CONTEXT (decl) = current_function_decl;
!       bind (id, decl, current_function_scope,
! 	    /*invisible=*/false, /*nested=*/false);
      }
  
    finish_decl (decl, init, NULL_TREE);
*************** c_make_fname_decl (tree id, int type_dep
*** 2303,2325 ****
  
  tree
  builtin_function (const char *name, tree type, int function_code,
! 		  enum built_in_class class, const char *library_name,
  		  tree attrs)
  {
!   tree decl = build_decl (FUNCTION_DECL, get_identifier (name), type);
!   DECL_EXTERNAL (decl) = 1;
    TREE_PUBLIC (decl) = 1;
    if (library_name)
      SET_DECL_ASSEMBLER_NAME (decl, get_identifier (library_name));
-   make_decl_rtl (decl, NULL);
-   pushdecl (decl);
-   DECL_BUILT_IN_CLASS (decl) = class;
-   DECL_FUNCTION_CODE (decl) = function_code;
  
!   /* Warn if a function in the namespace for users
!      is used without an occasion to consider it declared.  */
!   if (name[0] != '_' || name[1] != '_')
!     C_DECL_INVISIBLE (decl) = 1;
  
    /* Possibly apply some default attributes to this built-in function.  */
    if (attrs)
--- 2690,2720 ----
  
  tree
  builtin_function (const char *name, tree type, int function_code,
! 		  enum built_in_class cl, const char *library_name,
  		  tree attrs)
  {
!   tree id = get_identifier (name);
!   tree decl = build_decl (FUNCTION_DECL, id, type);
    TREE_PUBLIC (decl) = 1;
+   DECL_EXTERNAL (decl) = 1;
+   DECL_LANG_SPECIFIC (decl) = GGC_CNEW (struct lang_decl);
+   DECL_BUILT_IN_CLASS (decl) = cl;
+   DECL_FUNCTION_CODE (decl) = function_code;
    if (library_name)
      SET_DECL_ASSEMBLER_NAME (decl, get_identifier (library_name));
  
!   /* Should never be called on a symbol with a preexisting meaning.  */
!   gcc_assert (!I_SYMBOL_BINDING (id));
! 
!   bind (id, decl, external_scope, /*invisible=*/true, /*nested=*/false);
! 
!   /* Builtins in the implementation namespace are made visible without
!      needing to be explicitly declared.  See push_file_scope.  */
!   if (name[0] == '_' && (name[1] == '_' || ISUPPER (name[1])))
!     {
!       TREE_CHAIN (decl) = visible_builtins;
!       visible_builtins = decl;
!     }
  
    /* Possibly apply some default attributes to this built-in function.  */
    if (attrs)
*************** builtin_function (const char *name, tree
*** 2339,2369 ****
     Otherwise, it is an error.  */
  
  void
! shadow_tag (tree declspecs)
  {
    shadow_tag_warned (declspecs, 0);
  }
  
  void
! shadow_tag_warned (tree declspecs, int warned)
! 
! 
!      /* 1 => we have done a pedwarn.  2 => we have done a warning, but
! 	no pedwarn.  */
  {
!   int found_tag = 0;
!   tree link;
!   tree specs, attrs;
! 
!   pending_invalid_xref = 0;
! 
!   /* Remove the attributes from declspecs, since they will confuse the
!      following code.  */
!   split_specs_attrs (declspecs, &specs, &attrs);
  
!   for (link = specs; link; link = TREE_CHAIN (link))
      {
!       tree value = TREE_VALUE (link);
        enum tree_code code = TREE_CODE (value);
  
        if (code == RECORD_TYPE || code == UNION_TYPE || code == ENUMERAL_TYPE)
--- 2734,2754 ----
     Otherwise, it is an error.  */
  
  void
! shadow_tag (const struct c_declspecs *declspecs)
  {
    shadow_tag_warned (declspecs, 0);
  }
  
+ /* WARNED is 1 if we have done a pedwarn, 2 if we have done a warning,
+    but no pedwarn.  */
  void
! shadow_tag_warned (const struct c_declspecs *declspecs, int warned)
  {
!   bool found_tag = false;
  
!   if (declspecs->type && !declspecs->default_int_p && !declspecs->typedef_p)
      {
!       tree value = declspecs->type;
        enum tree_code code = TREE_CODE (value);
  
        if (code == RECORD_TYPE || code == UNION_TYPE || code == ENUMERAL_TYPE)
*************** shadow_tag_warned (tree declspecs, int w
*** 2373,2379 ****
  	  tree name = TYPE_NAME (value);
  	  tree t;
  
! 	  found_tag++;
  
  	  if (name == 0)
  	    {
--- 2758,2764 ----
  	  tree name = TYPE_NAME (value);
  	  tree t;
  
! 	  found_tag = true;
  
  	  if (name == 0)
  	    {
*************** shadow_tag_warned (tree declspecs, int w
*** 2384,2391 ****
--- 2769,2797 ----
  		  warned = 1;
  		}
  	    }
+ 	  else if (!declspecs->tag_defined_p
+ 		   && declspecs->storage_class != csc_none)
+ 	    {
+ 	      if (warned != 1)
+ 		pedwarn ("empty declaration with storage class specifier "
+ 			 "does not redeclare tag");
+ 	      warned = 1;
+ 	      pending_xref_error ();
+ 	    }
+ 	  else if (!declspecs->tag_defined_p
+ 		   && (declspecs->const_p
+ 		       || declspecs->volatile_p
+ 		       || declspecs->restrict_p))
+ 	    {
+ 	      if (warned != 1)
+ 		pedwarn ("empty declaration with type qualifier "
+ 			 "does not redeclare tag");
+ 	      warned = 1;
+ 	      pending_xref_error ();
+ 	    }
  	  else
  	    {
+ 	      pending_invalid_xref = 0;
  	      t = lookup_tag (code, name, 1);
  
  	      if (t == 0)
*************** shadow_tag_warned (tree declspecs, int w
*** 2397,2463 ****
  	}
        else
  	{
! 	  if (!warned && ! in_system_header)
  	    {
! 	      warning ("useless keyword or type name in empty declaration");
! 	      warned = 2;
  	    }
  	}
      }
  
!   if (found_tag > 1)
!     error ("two types specified in one empty declaration");
  
    if (warned != 1)
      {
!       if (found_tag == 0)
  	pedwarn ("empty declaration");
      }
  }
  
  /* Construct an array declarator.  EXPR is the expression inside [], or
     NULL_TREE.  QUALS are the type qualifiers inside the [] (to be applied
     to the pointer to which a parameter array is converted).  STATIC_P is
!    nonzero if "static" is inside the [], zero otherwise.  VLA_UNSPEC_P
!    is nonzero is the array is [*], a VLA of unspecified length which is
     nevertheless a complete type (not currently implemented by GCC),
!    zero otherwise.  The declarator is constructed as an ARRAY_REF
!    (to be decoded by grokdeclarator), whose operand 0 is what's on the
!    left of the [] (filled by in set_array_declarator_type) and operand 1
!    is the expression inside; whose TREE_TYPE is the type qualifiers and
!    which has TREE_STATIC set if "static" is used.  */
  
! tree
! build_array_declarator (tree expr, tree quals, int static_p, int vla_unspec_p)
  {
!   tree decl;
!   decl = build_nt (ARRAY_REF, NULL_TREE, expr);
!   TREE_TYPE (decl) = quals;
!   TREE_STATIC (decl) = (static_p ? 1 : 0);
    if (pedantic && !flag_isoc99)
      {
!       if (static_p || quals != NULL_TREE)
! 	pedwarn ("ISO C90 does not support `static' or type qualifiers in parameter array declarators");
        if (vla_unspec_p)
! 	pedwarn ("ISO C90 does not support `[*]' array declarators");
      }
    if (vla_unspec_p)
!     warning ("GCC does not yet properly implement `[*]' array declarators");
!   return decl;
  }
  
! /* Set the type of an array declarator.  DECL is the declarator, as
!    constructed by build_array_declarator; TYPE is what appears on the left
!    of the [] and goes in operand 0.  ABSTRACT_P is nonzero if it is an
!    abstract declarator, zero otherwise; this is used to reject static and
!    type qualifiers in abstract declarators, where they are not in the
!    C99 grammar.  */
  
! tree
! set_array_declarator_type (tree decl, tree type, int abstract_p)
  {
!   TREE_OPERAND (decl, 0) = type;
!   if (abstract_p && (TREE_TYPE (decl) != NULL_TREE || TREE_STATIC (decl)))
      error ("static or type qualifiers in abstract declarator");
    return decl;
  }
--- 2803,2955 ----
  	}
        else
  	{
! 	  if (warned != 1 && !in_system_header)
  	    {
! 	      pedwarn ("useless type name in empty declaration");
! 	      warned = 1;
  	    }
  	}
      }
+   else if (warned != 1 && !in_system_header && declspecs->typedef_p)
+     {
+       pedwarn ("useless type name in empty declaration");
+       warned = 1;
+     }
  
!   pending_invalid_xref = 0;
! 
!   if (declspecs->inline_p)
!     {
!       error ("%<inline%> in empty declaration");
!       warned = 1;
!     }
! 
!   if (current_scope == file_scope && declspecs->storage_class == csc_auto)
!     {
!       error ("%<auto%> in file-scope empty declaration");
!       warned = 1;
!     }
! 
!   if (current_scope == file_scope && declspecs->storage_class == csc_register)
!     {
!       error ("%<register%> in file-scope empty declaration");
!       warned = 1;
!     }
! 
!   if (!warned && !in_system_header && declspecs->storage_class != csc_none)
!     {
!       warning ("useless storage class specifier in empty declaration");
!       warned = 2;
!     }
! 
!   if (!warned && !in_system_header && declspecs->thread_p)
!     {
!       warning ("useless %<__thread%> in empty declaration");
!       warned = 2;
!     }
! 
!   if (!warned && !in_system_header && (declspecs->const_p
! 				       || declspecs->volatile_p
! 				       || declspecs->restrict_p))
!     {
!       warning ("useless type qualifier in empty declaration");
!       warned = 2;
!     }
  
    if (warned != 1)
      {
!       if (!found_tag)
  	pedwarn ("empty declaration");
      }
  }
  
+ 
+ /* Return the qualifiers from SPECS as a bitwise OR of TYPE_QUAL_*
+    bits.  SPECS represents declaration specifiers that the grammar
+    only permits to contain type qualifiers and attributes.  */
+ 
+ int
+ quals_from_declspecs (const struct c_declspecs *specs)
+ {
+   int quals = ((specs->const_p ? TYPE_QUAL_CONST : 0)
+ 	       | (specs->volatile_p ? TYPE_QUAL_VOLATILE : 0)
+ 	       | (specs->restrict_p ? TYPE_QUAL_RESTRICT : 0));
+   gcc_assert (!specs->type
+ 	      && !specs->decl_attr
+ 	      && specs->typespec_word == cts_none
+ 	      && specs->storage_class == csc_none
+ 	      && !specs->typedef_p
+ 	      && !specs->explicit_signed_p
+ 	      && !specs->deprecated_p
+ 	      && !specs->long_p
+ 	      && !specs->long_long_p
+ 	      && !specs->short_p
+ 	      && !specs->signed_p
+ 	      && !specs->unsigned_p
+ 	      && !specs->complex_p
+ 	      && !specs->inline_p
+ 	      && !specs->thread_p);
+   return quals;
+ }
+ 
  /* Construct an array declarator.  EXPR is the expression inside [], or
     NULL_TREE.  QUALS are the type qualifiers inside the [] (to be applied
     to the pointer to which a parameter array is converted).  STATIC_P is
!    true if "static" is inside the [], false otherwise.  VLA_UNSPEC_P
!    is true if the array is [*], a VLA of unspecified length which is
     nevertheless a complete type (not currently implemented by GCC),
!    false otherwise.  The field for the contained declarator is left to be
!    filled in by set_array_declarator_inner.  */
  
! struct c_declarator *
! build_array_declarator (tree expr, struct c_declspecs *quals, bool static_p,
! 			bool vla_unspec_p)
  {
!   struct c_declarator *declarator = XOBNEW (&parser_obstack,
! 					    struct c_declarator);
!   declarator->kind = cdk_array;
!   declarator->declarator = 0;
!   declarator->u.array.dimen = expr;
!   if (quals)
!     {
!       declarator->u.array.attrs = quals->attrs;
!       declarator->u.array.quals = quals_from_declspecs (quals);
!     }
!   else
!     {
!       declarator->u.array.attrs = NULL_TREE;
!       declarator->u.array.quals = 0;
!     }
!   declarator->u.array.static_p = static_p;
!   declarator->u.array.vla_unspec_p = vla_unspec_p;
    if (pedantic && !flag_isoc99)
      {
!       if (static_p || quals != NULL)
! 	pedwarn ("ISO C90 does not support %<static%> or type "
! 		 "qualifiers in parameter array declarators");
        if (vla_unspec_p)
! 	pedwarn ("ISO C90 does not support %<[*]%> array declarators");
      }
    if (vla_unspec_p)
!     warning ("GCC does not yet properly implement %<[*]%> array declarators");
!   return declarator;
  }
  
! /* Set the contained declarator of an array declarator.  DECL is the
!    declarator, as constructed by build_array_declarator; INNER is what
!    appears on the left of the [].  ABSTRACT_P is true if it is an
!    abstract declarator, false otherwise; this is used to reject static
!    and type qualifiers in abstract declarators, where they are not in
!    the C99 grammar (subject to possible change in DR#289).  */
  
! struct c_declarator *
! set_array_declarator_inner (struct c_declarator *decl,
! 			    struct c_declarator *inner, bool abstract_p)
  {
!   decl->declarator = inner;
!   if (abstract_p && (decl->u.array.quals != TYPE_UNQUALIFIED
! 		     || decl->u.array.attrs != NULL_TREE
! 		     || decl->u.array.static_p))
      error ("static or type qualifiers in abstract declarator");
    return decl;
  }
*************** set_array_declarator_type (tree decl, tr
*** 2465,2498 ****
  /* Decode a "typename", such as "int **", returning a ..._TYPE node.  */
  
  tree
! groktypename (tree typename)
  {
!   tree specs, attrs;
! 
!   if (TREE_CODE (typename) != TREE_LIST)
!     return typename;
  
!   split_specs_attrs (TREE_PURPOSE (typename), &specs, &attrs);
  
!   typename = grokdeclarator (TREE_VALUE (typename), specs, TYPENAME, 0,
! 			     NULL);
  
    /* Apply attributes.  */
!   decl_attributes (&typename, attrs, 0);
! 
!   return typename;
! }
! 
! /* Return a PARM_DECL node for a given pair of specs and declarator.  */
  
! tree
! groktypename_in_parm_context (tree typename)
! {
!   if (TREE_CODE (typename) != TREE_LIST)
!     return typename;
!   return grokdeclarator (TREE_VALUE (typename),
! 			 TREE_PURPOSE (typename),
! 			 PARM, 0, NULL);
  }
  
  /* Decode a declarator in an ordinary declaration or data definition.
--- 2957,2976 ----
  /* Decode a "typename", such as "int **", returning a ..._TYPE node.  */
  
  tree
! groktypename (struct c_type_name *type_name)
  {
!   tree type;
!   tree attrs = type_name->specs->attrs;
  
!   type_name->specs->attrs = NULL_TREE;
  
!   type = grokdeclarator (type_name->declarator, type_name->specs, TYPENAME,
! 			 false, NULL);
  
    /* Apply attributes.  */
!   decl_attributes (&type, attrs, 0);
  
!   return type;
  }
  
  /* Decode a declarator in an ordinary declaration or data definition.
*************** groktypename_in_parm_context (tree typen
*** 2511,2517 ****
     grokfield and not through here.  */
  
  tree
! start_decl (tree declarator, tree declspecs, int initialized, tree attributes)
  {
    tree decl;
    tree tem;
--- 2989,2996 ----
     grokfield and not through here.  */
  
  tree
! start_decl (struct c_declarator *declarator, struct c_declspecs *declspecs,
! 	    bool initialized, tree attributes)
  {
    tree decl;
    tree tem;
*************** start_decl (tree declarator, tree declsp
*** 2523,2566 ****
  
    decl = grokdeclarator (declarator, declspecs,
  			 NORMAL, initialized, NULL);
  
    deprecated_state = DEPRECATED_NORMAL;
  
    if (warn_main > 0 && TREE_CODE (decl) != FUNCTION_DECL
        && MAIN_NAME_P (DECL_NAME (decl)))
!     warning ("%J'%D' is usually a function", decl, decl);
  
    if (initialized)
      /* Is it valid for this decl to have an initializer at all?
         If not, set INITIALIZED to zero, which will indirectly
!        tell `finish_decl' to ignore the initializer once it is parsed.  */
      switch (TREE_CODE (decl))
        {
        case TYPE_DECL:
! 	error ("typedef `%s' is initialized (use __typeof__ instead)",
! 	       IDENTIFIER_POINTER (DECL_NAME (decl)));
  	initialized = 0;
  	break;
  
        case FUNCTION_DECL:
! 	error ("function `%s' is initialized like a variable",
! 	       IDENTIFIER_POINTER (DECL_NAME (decl)));
  	initialized = 0;
  	break;
  
        case PARM_DECL:
  	/* DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE.  */
! 	error ("parameter `%s' is initialized",
! 	       IDENTIFIER_POINTER (DECL_NAME (decl)));
  	initialized = 0;
  	break;
  
        default:
! 	/* Don't allow initializations for incomplete types
! 	   except for arrays which might be completed by the initialization.  */
  
! 	/* This can happen if the array size is an undefined macro.  We already
! 	   gave a warning, so we don't need another one.  */
  	if (TREE_TYPE (decl) == error_mark_node)
  	  initialized = 0;
  	else if (COMPLETE_TYPE_P (TREE_TYPE (decl)))
--- 3002,3044 ----
  
    decl = grokdeclarator (declarator, declspecs,
  			 NORMAL, initialized, NULL);
+   if (!decl)
+     return 0;
  
    deprecated_state = DEPRECATED_NORMAL;
  
    if (warn_main > 0 && TREE_CODE (decl) != FUNCTION_DECL
        && MAIN_NAME_P (DECL_NAME (decl)))
!     warning ("%J%qD is usually a function", decl, decl);
  
    if (initialized)
      /* Is it valid for this decl to have an initializer at all?
         If not, set INITIALIZED to zero, which will indirectly
!        tell 'finish_decl' to ignore the initializer once it is parsed.  */
      switch (TREE_CODE (decl))
        {
        case TYPE_DECL:
! 	error ("typedef %qD is initialized (use __typeof__ instead)", decl);
  	initialized = 0;
  	break;
  
        case FUNCTION_DECL:
! 	error ("function %qD is initialized like a variable", decl);
  	initialized = 0;
  	break;
  
        case PARM_DECL:
  	/* DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE.  */
! 	error ("parameter %qD is initialized", decl);
  	initialized = 0;
  	break;
  
        default:
! 	/* Don't allow initializations for incomplete types except for
! 	   arrays which might be completed by the initialization.  */
  
! 	/* This can happen if the array size is an undefined macro.
! 	   We already gave a warning, so we don't need another one.  */
  	if (TREE_TYPE (decl) == error_mark_node)
  	  initialized = 0;
  	else if (COMPLETE_TYPE_P (TREE_TYPE (decl)))
*************** start_decl (tree declarator, tree declsp
*** 2576,2602 ****
  	  }
  	else if (TREE_CODE (TREE_TYPE (decl)) != ARRAY_TYPE)
  	  {
! 	    error ("variable `%s' has initializer but incomplete type",
! 		   IDENTIFIER_POINTER (DECL_NAME (decl)));
  	    initialized = 0;
  	  }
! 	else if (!COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (decl))))
  	  {
! 	    error ("elements of array `%s' have incomplete type",
! 		   IDENTIFIER_POINTER (DECL_NAME (decl)));
  	    initialized = 0;
  	  }
        }
  
    if (initialized)
      {
!       DECL_EXTERNAL (decl) = 0;
!       if (current_scope == global_scope)
  	TREE_STATIC (decl) = 1;
  
!       /* Tell `pushdecl' this is an initialized decl
  	 even though we don't yet have the initializer expression.
! 	 Also tell `finish_decl' it may store the real initializer.  */
        DECL_INITIAL (decl) = error_mark_node;
      }
  
--- 3054,3081 ----
  	  }
  	else if (TREE_CODE (TREE_TYPE (decl)) != ARRAY_TYPE)
  	  {
! 	    error ("variable %qD has initializer but incomplete type", decl);
  	    initialized = 0;
  	  }
! 	else if (C_DECL_VARIABLE_SIZE (decl))
  	  {
! 	    /* Although C99 is unclear about whether incomplete arrays
! 	       of VLAs themselves count as VLAs, it does not make
! 	       sense to permit them to be initialized given that
! 	       ordinary VLAs may not be initialized.  */
! 	    error ("variable-sized object may not be initialized");
  	    initialized = 0;
  	  }
        }
  
    if (initialized)
      {
!       if (current_scope == file_scope)
  	TREE_STATIC (decl) = 1;
  
!       /* Tell 'pushdecl' this is an initialized decl
  	 even though we don't yet have the initializer expression.
! 	 Also tell 'finish_decl' it may store the real initializer.  */
        DECL_INITIAL (decl) = error_mark_node;
      }
  
*************** start_decl (tree declarator, tree declsp
*** 2630,2646 ****
    if (TREE_CODE (decl) == FUNCTION_DECL
        && targetm.calls.promote_prototypes (TREE_TYPE (decl)))
      {
!       tree ce = declarator;
  
!       if (TREE_CODE (ce) == INDIRECT_REF)
! 	ce = TREE_OPERAND (declarator, 0);
!       if (TREE_CODE (ce) == CALL_EXPR)
  	{
! 	  tree args = TREE_PURPOSE (TREE_OPERAND (ce, 1));
  	  for (; args; args = TREE_CHAIN (args))
  	    {
  	      tree type = TREE_TYPE (args);
! 	      if (INTEGRAL_TYPE_P (type)
  		  && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
  		DECL_ARG_TYPE (args) = integer_type_node;
  	    }
--- 3109,3125 ----
    if (TREE_CODE (decl) == FUNCTION_DECL
        && targetm.calls.promote_prototypes (TREE_TYPE (decl)))
      {
!       struct c_declarator *ce = declarator;
  
!       if (ce->kind == cdk_pointer)
! 	ce = declarator->declarator;
!       if (ce->kind == cdk_function)
  	{
! 	  tree args = ce->u.arg_info->parms;
  	  for (; args; args = TREE_CHAIN (args))
  	    {
  	      tree type = TREE_TYPE (args);
! 	      if (type && INTEGRAL_TYPE_P (type)
  		  && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
  		DECL_ARG_TYPE (args) = integer_type_node;
  	    }
*************** start_decl (tree declarator, tree declsp
*** 2651,2675 ****
        && DECL_DECLARED_INLINE_P (decl)
        && DECL_UNINLINABLE (decl)
        && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
!     warning ("%Jinline function '%D' given attribute noinline", decl, decl);
  
    /* Add this decl to the current scope.
       TEM may equal DECL or it may be a previous decl of the same name.  */
    tem = pushdecl (decl);
  
!   /* For a local variable, define the RTL now.  */
!   if (current_scope != global_scope
!       /* But not if this is a duplicate decl
! 	 and we preserved the rtl from the previous one
! 	 (which may or may not happen).  */
!       && !DECL_RTL_SET_P (tem)
!       && DECL_FILE_SCOPE_P (tem))
      {
!       if (TREE_TYPE (tem) != error_mark_node
! 	  && (COMPLETE_TYPE_P (TREE_TYPE (tem))
! 	      || (TREE_CODE (TREE_TYPE (tem)) == ARRAY_TYPE
! 		  && DECL_INITIAL (tem) != 0)))
! 	expand_decl (tem);
      }
  
    return tem;
--- 3130,3145 ----
        && DECL_DECLARED_INLINE_P (decl)
        && DECL_UNINLINABLE (decl)
        && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
!     warning ("%Jinline function %qD given attribute noinline", decl, decl);
  
    /* Add this decl to the current scope.
       TEM may equal DECL or it may be a previous decl of the same name.  */
    tem = pushdecl (decl);
  
!   if (initialized && DECL_EXTERNAL (tem))
      {
!       DECL_EXTERNAL (tem) = 0;
!       TREE_STATIC (tem) = 1;
      }
  
    return tem;
*************** finish_decl (tree decl, tree init, tree 
*** 2688,2694 ****
    const char *asmspec = 0;
  
    /* If a name was specified, get the string.  */
!   if (current_scope == global_scope)
      asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
    if (asmspec_tree)
      asmspec = TREE_STRING_POINTER (asmspec_tree);
--- 3158,3165 ----
    const char *asmspec = 0;
  
    /* If a name was specified, get the string.  */
!   if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
!       && DECL_FILE_SCOPE_P (decl))
      asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
    if (asmspec_tree)
      asmspec = TREE_STRING_POINTER (asmspec_tree);
*************** finish_decl (tree decl, tree init, tree 
*** 2705,2712 ****
      store_init_value (decl, init);
  
    if (c_dialect_objc () && (TREE_CODE (decl) == VAR_DECL
! 		    || TREE_CODE (decl) == FUNCTION_DECL
! 		    || TREE_CODE (decl) == FIELD_DECL))
      objc_check_decl (decl);
  
    /* Deduce size of array from initialization, if not already known.  */
--- 3176,3183 ----
      store_init_value (decl, init);
  
    if (c_dialect_objc () && (TREE_CODE (decl) == VAR_DECL
! 			    || TREE_CODE (decl) == FUNCTION_DECL
! 			    || TREE_CODE (decl) == FIELD_DECL))
      objc_check_decl (decl);
  
    /* Deduce size of array from initialization, if not already known.  */
*************** finish_decl (tree decl, tree init, tree 
*** 2714,2754 ****
        && TYPE_DOMAIN (type) == 0
        && TREE_CODE (decl) != TYPE_DECL)
      {
!       int do_default
  	= (TREE_STATIC (decl)
  	   /* Even if pedantic, an external linkage array
  	      may have incomplete type at first.  */
  	   ? pedantic && !TREE_PUBLIC (decl)
  	   : !DECL_EXTERNAL (decl));
        int failure
! 	= complete_array_type (type, DECL_INITIAL (decl), do_default);
  
        /* Get the completed type made by complete_array_type.  */
        type = TREE_TYPE (decl);
  
        if (failure == 1)
! 	error ("%Jinitializer fails to determine size of '%D'", decl, decl);
  
        else if (failure == 2)
  	{
  	  if (do_default)
! 	    error ("%Jarray size missing in '%D'", decl, decl);
  	  /* If a `static' var's size isn't known,
  	     make it extern as well as static, so it does not get
  	     allocated.
  	     If it is not `static', then do not mark extern;
  	     finish_incomplete_decl will give it a default size
  	     and it will get allocated.  */
! 	  else if (!pedantic && TREE_STATIC (decl) && ! TREE_PUBLIC (decl))
  	    DECL_EXTERNAL (decl) = 1;
  	}
  
!       /* TYPE_MAX_VALUE is always one less than the number of elements
! 	 in the array, because we start counting at zero.  Therefore,
! 	 warn only if the value is less than zero.  */
!       else if (pedantic && TYPE_DOMAIN (type) != 0
! 	      && tree_int_cst_sgn (TYPE_MAX_VALUE (TYPE_DOMAIN (type))) < 0)
! 	error ("%Jzero or negative size array '%D'", decl, decl);
  
        layout_decl (decl, 0);
      }
--- 3185,3224 ----
        && TYPE_DOMAIN (type) == 0
        && TREE_CODE (decl) != TYPE_DECL)
      {
!       bool do_default
  	= (TREE_STATIC (decl)
  	   /* Even if pedantic, an external linkage array
  	      may have incomplete type at first.  */
  	   ? pedantic && !TREE_PUBLIC (decl)
  	   : !DECL_EXTERNAL (decl));
        int failure
! 	= complete_array_type (&TREE_TYPE (decl), DECL_INITIAL (decl),
! 			       do_default);
  
        /* Get the completed type made by complete_array_type.  */
        type = TREE_TYPE (decl);
  
        if (failure == 1)
! 	error ("%Jinitializer fails to determine size of %qD", decl, decl);
  
        else if (failure == 2)
  	{
  	  if (do_default)
! 	    error ("%Jarray size missing in %qD", decl, decl);
  	  /* If a `static' var's size isn't known,
  	     make it extern as well as static, so it does not get
  	     allocated.
  	     If it is not `static', then do not mark extern;
  	     finish_incomplete_decl will give it a default size
  	     and it will get allocated.  */
! 	  else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
  	    DECL_EXTERNAL (decl) = 1;
  	}
+       else if (failure == 3)
+ 	error ("%Jzero or negative size array %qD", decl, decl);
  
!       if (DECL_INITIAL (decl))
! 	TREE_TYPE (DECL_INITIAL (decl)) = type;
  
        layout_decl (decl, 0);
      }
*************** finish_decl (tree decl, tree init, tree 
*** 2763,2784 ****
  	  /* Don't give an error if we already gave one earlier.  */
  	  && TREE_TYPE (decl) != error_mark_node
  	  && (TREE_STATIC (decl)
! 	      ?
! 		/* A static variable with an incomplete type
! 		   is an error if it is initialized.
! 		   Also if it is not file scope.
! 		   Otherwise, let it through, but if it is not `extern'
! 		   then it may cause an error message later.  */
! 		(DECL_INITIAL (decl) != 0
  		 || !DECL_FILE_SCOPE_P (decl))
! 	      :
! 		/* An automatic variable with an incomplete type
! 		   is an error.  */
! 		!DECL_EXTERNAL (decl)))
! 	{
! 	  error ("%Jstorage size of '%D' isn't known", decl, decl);
! 	  TREE_TYPE (decl) = error_mark_node;
! 	}
  
        if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
  	  && DECL_SIZE (decl) != 0)
--- 3233,3252 ----
  	  /* Don't give an error if we already gave one earlier.  */
  	  && TREE_TYPE (decl) != error_mark_node
  	  && (TREE_STATIC (decl)
! 	      /* A static variable with an incomplete type
! 		 is an error if it is initialized.
! 		 Also if it is not file scope.
! 		 Otherwise, let it through, but if it is not `extern'
! 		 then it may cause an error message later.  */
! 	      ? (DECL_INITIAL (decl) != 0
  		 || !DECL_FILE_SCOPE_P (decl))
! 	      /* An automatic variable with an incomplete type
! 		 is an error.  */
! 	      : !DECL_EXTERNAL (decl)))
! 	 {
! 	   error ("%Jstorage size of %qD isn%'t known", decl, decl);
! 	   TREE_TYPE (decl) = error_mark_node;
! 	 }
  
        if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
  	  && DECL_SIZE (decl) != 0)
*************** finish_decl (tree decl, tree init, tree 
*** 2786,2792 ****
  	  if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
  	    constant_expression_warning (DECL_SIZE (decl));
  	  else
! 	    error ("%Jstorage size of '%D' isn't constant", decl, decl);
  	}
  
        if (TREE_USED (type))
--- 3254,3260 ----
  	  if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
  	    constant_expression_warning (DECL_SIZE (decl));
  	  else
! 	    error ("%Jstorage size of %qD isn%'t constant", decl, decl);
  	}
  
        if (TREE_USED (type))
*************** finish_decl (tree decl, tree init, tree 
*** 2798,2833 ****
       was a normal built-in.  */
    if (TREE_CODE (decl) == FUNCTION_DECL && asmspec)
      {
-       /* ASMSPEC is given, and not the name of a register.  Mark the
-       name with a star so assemble_name won't munge it.  */
-       char *starred = alloca (strlen (asmspec) + 2);
-       starred[0] = '*';
-       strcpy (starred + 1, asmspec);
- 
        if (DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
! 	{
! 	  tree builtin = built_in_decls [DECL_FUNCTION_CODE (decl)];
! 	  SET_DECL_RTL (builtin, NULL_RTX);
! 	  SET_DECL_ASSEMBLER_NAME (builtin, get_identifier (starred));
! #ifdef TARGET_MEM_FUNCTIONS
! 	  if (DECL_FUNCTION_CODE (decl) == BUILT_IN_MEMCPY)
! 	    init_block_move_fn (starred);
! 	  else if (DECL_FUNCTION_CODE (decl) == BUILT_IN_MEMSET)
! 	    init_block_clear_fn (starred);
! #else
! 	  if (DECL_FUNCTION_CODE (decl) == BUILT_IN_BCOPY)
! 	    init_block_move_fn (starred);
! 	  else if (DECL_FUNCTION_CODE (decl) == BUILT_IN_BZERO)
! 	    init_block_clear_fn (starred);
! #endif
! 	}
!       SET_DECL_RTL (decl, NULL_RTX);
!       change_decl_assembler_name (decl, get_identifier (starred));
      }
  
    /* If #pragma weak was used, mark the decl weak now.  */
!   if (current_scope == global_scope)
!     maybe_apply_pragma_weak (decl);
  
    /* Output the assembler code and/or RTL code for variables and functions,
       unless the type is an undefined structure or union.
--- 3266,3284 ----
       was a normal built-in.  */
    if (TREE_CODE (decl) == FUNCTION_DECL && asmspec)
      {
        if (DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
! 	set_builtin_user_assembler_name (decl, asmspec);
!       set_user_assembler_name (decl, asmspec);
      }
  
    /* If #pragma weak was used, mark the decl weak now.  */
!   maybe_apply_pragma_weak (decl);
! 
!   /* If this is a variable definition, determine its ELF visibility.  */
!   if (TREE_CODE (decl) == VAR_DECL 
!       && TREE_STATIC (decl) 
!       && !DECL_EXTERNAL (decl))
!     c_determine_visibility (decl);
  
    /* Output the assembler code and/or RTL code for variables and functions,
       unless the type is an undefined structure or union.
*************** finish_decl (tree decl, tree init, tree 
*** 2839,2844 ****
--- 3290,3314 ----
        if (c_dialect_objc ())
  	objc_check_decl (decl);
  
+       if (asmspec) 
+ 	{
+ 	  /* If this is not a static variable, issue a warning.
+ 	     It doesn't make any sense to give an ASMSPEC for an
+ 	     ordinary, non-register local variable.  Historically,
+ 	     GCC has accepted -- but ignored -- the ASMSPEC in
+ 	     this case.  */
+ 	  if (!DECL_FILE_SCOPE_P (decl)
+ 	      && TREE_CODE (decl) == VAR_DECL
+ 	      && !C_DECL_REGISTER (decl)
+ 	      && !TREE_STATIC (decl))
+ 	    warning ("%Jignoring asm-specifier for non-static local "
+ 		     "variable %qD", decl, decl);
+ 	  else if (C_DECL_REGISTER (decl))
+ 	    change_decl_assembler_name (decl, get_identifier (asmspec));
+ 	  else
+ 	    set_user_assembler_name (decl, asmspec);
+ 	}
+       
        if (DECL_FILE_SCOPE_P (decl))
  	{
  	  if (DECL_INITIAL (decl) == NULL_TREE
*************** finish_decl (tree decl, tree init, tree 
*** 2847,2890 ****
  	       when a tentative file-scope definition is seen.
  	       But at end of compilation, do output code for them.  */
  	    DECL_DEFER_OUTPUT (decl) = 1;
! 	  rest_of_decl_compilation (decl, asmspec, true, 0);
  	}
        else
  	{
! 	  /* This is a local variable.  If there is an ASMSPEC, the
! 	     user has requested that we handle it specially.  */
! 	  if (asmspec)
  	    {
! 	      /* In conjunction with an ASMSPEC, the `register'
! 		 keyword indicates that we should place the variable
! 		 in a particular register.  */
! 	      if (DECL_REGISTER (decl))
! 		DECL_C_HARD_REGISTER (decl) = 1;
! 
! 	      /* If this is not a static variable, issue a warning.
! 		 It doesn't make any sense to give an ASMSPEC for an
! 		 ordinary, non-register local variable.  Historically,
! 		 GCC has accepted -- but ignored -- the ASMSPEC in
! 		 this case.  */
! 	      if (TREE_CODE (decl) == VAR_DECL
! 		  && !DECL_REGISTER (decl)
! 		  && !TREE_STATIC (decl))
! 		warning ("%Jignoring asm-specifier for non-static local "
!                          "variable '%D'", decl, decl);
! 	      else
! 		change_decl_assembler_name (decl, get_identifier (asmspec));
  	    }
  
  	  if (TREE_CODE (decl) != FUNCTION_DECL)
! 	    add_decl_stmt (decl);
  	}
  
        if (!DECL_FILE_SCOPE_P (decl))
  	{
  	  /* Recompute the RTL of a local array now
  	     if it used to be an incomplete type.  */
  	  if (was_incomplete
! 	      && ! TREE_STATIC (decl) && ! DECL_EXTERNAL (decl))
  	    {
  	      /* If we used it already as memory, it must stay in memory.  */
  	      TREE_ADDRESSABLE (decl) = TREE_USED (decl);
--- 3317,3367 ----
  	       when a tentative file-scope definition is seen.
  	       But at end of compilation, do output code for them.  */
  	    DECL_DEFER_OUTPUT (decl) = 1;
! 	  rest_of_decl_compilation (decl, true, 0);
  	}
        else
  	{
! 	  /* In conjunction with an ASMSPEC, the `register'
! 	     keyword indicates that we should place the variable
! 	     in a particular register.  */
! 	  if (asmspec && C_DECL_REGISTER (decl))
  	    {
! 	      DECL_HARD_REGISTER (decl) = 1;
! 	      /* This cannot be done for a structure with volatile
! 		 fields, on which DECL_REGISTER will have been
! 		 reset.  */
! 	      if (!DECL_REGISTER (decl))
! 		error ("cannot put object with volatile field into register");
  	    }
  
  	  if (TREE_CODE (decl) != FUNCTION_DECL)
! 	    {
! 	      /* If we're building a variable sized type, and we might be
! 		 reachable other than via the top of the current binding
! 		 level, then create a new BIND_EXPR so that we deallocate
! 		 the object at the right time.  */
! 	      /* Note that DECL_SIZE can be null due to errors.  */
! 	      if (DECL_SIZE (decl)
! 		  && !TREE_CONSTANT (DECL_SIZE (decl))
! 		  && STATEMENT_LIST_HAS_LABEL (cur_stmt_list))
! 		{
! 		  tree bind;
! 		  bind = build3 (BIND_EXPR, void_type_node, NULL, NULL, NULL);
! 		  TREE_SIDE_EFFECTS (bind) = 1;
! 		  add_stmt (bind);
! 		  BIND_EXPR_BODY (bind) = push_stmt_list ();
! 		}
! 	      add_stmt (build_stmt (DECL_EXPR, decl));
! 	    }
  	}
+   
  
        if (!DECL_FILE_SCOPE_P (decl))
  	{
  	  /* Recompute the RTL of a local array now
  	     if it used to be an incomplete type.  */
  	  if (was_incomplete
! 	      && !TREE_STATIC (decl) && !DECL_EXTERNAL (decl))
  	    {
  	      /* If we used it already as memory, it must stay in memory.  */
  	      TREE_ADDRESSABLE (decl) = TREE_USED (decl);
*************** finish_decl (tree decl, tree init, tree 
*** 2897,2911 ****
  
    /* If this was marked 'used', be sure it will be output.  */
    if (lookup_attribute ("used", DECL_ATTRIBUTES (decl)))
!     mark_referenced (DECL_ASSEMBLER_NAME (decl));
  
    if (TREE_CODE (decl) == TYPE_DECL)
!     rest_of_decl_compilation (decl, NULL, DECL_FILE_SCOPE_P (decl), 0);
  
    /* At the end of a declaration, throw away any variable type sizes
       of types defined inside that declaration.  There is no use
       computing them in the following function definition.  */
!   if (current_scope == global_scope)
      get_pending_sizes ();
  
    /* Install a cleanup (aka destructor) if one was given.  */
--- 3374,3394 ----
  
    /* If this was marked 'used', be sure it will be output.  */
    if (lookup_attribute ("used", DECL_ATTRIBUTES (decl)))
!     mark_decl_referenced (decl);
  
    if (TREE_CODE (decl) == TYPE_DECL)
!     {
!       if (!DECL_FILE_SCOPE_P (decl)
! 	  && variably_modified_type_p (TREE_TYPE (decl), NULL_TREE))
! 	add_stmt (build_stmt (DECL_EXPR, decl));
! 
!       rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl), 0);
!     }
  
    /* At the end of a declaration, throw away any variable type sizes
       of types defined inside that declaration.  There is no use
       computing them in the following function definition.  */
!   if (current_scope == file_scope)
      get_pending_sizes ();
  
    /* Install a cleanup (aka destructor) if one was given.  */
*************** finish_decl (tree decl, tree init, tree 
*** 2914,2921 ****
        tree attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
        if (attr)
  	{
- 	  static bool eh_initialized_p;
- 
  	  tree cleanup_id = TREE_VALUE (TREE_VALUE (attr));
  	  tree cleanup_decl = lookup_name (cleanup_id);
  	  tree cleanup;
--- 3397,3402 ----
*************** finish_decl (tree decl, tree init, tree 
*** 2927,2937 ****
  
  	  /* Don't warn about decl unused; the cleanup uses it.  */
  	  TREE_USED (decl) = 1;
  
  	  /* Initialize EH, if we've been told to do so.  */
! 	  if (flag_exceptions && !eh_initialized_p)
  	    {
! 	      eh_initialized_p = true;
  	      eh_personality_libfunc
  		= init_one_libfunc (USING_SJLJ_EXCEPTIONS
  				    ? "__gcc_personality_sj0"
--- 3408,3419 ----
  
  	  /* Don't warn about decl unused; the cleanup uses it.  */
  	  TREE_USED (decl) = 1;
+ 	  TREE_USED (cleanup_decl) = 1;
  
  	  /* Initialize EH, if we've been told to do so.  */
! 	  if (flag_exceptions && !c_eh_initialized_p)
  	    {
! 	      c_eh_initialized_p = true;
  	      eh_personality_libfunc
  		= init_one_libfunc (USING_SJLJ_EXCEPTIONS
  				    ? "__gcc_personality_sj0"
*************** finish_decl (tree decl, tree init, tree 
*** 2939,2982 ****
  	      using_eh_for_cleanups ();
  	    }
  
! 	  add_stmt (build_stmt (CLEANUP_STMT, decl, cleanup));
  	}
      }
  }
  
  /* Given a parsed parameter declaration, decode it into a PARM_DECL
     and push that on the current scope.  */
  
  void
! push_parm_decl (tree parm)
  {
    tree decl;
  
!   /* Don't attempt to expand sizes while parsing this decl.
!      (We can get here with i_s_e 1 somehow from Objective-C.)  */
!   int save_immediate_size_expand = immediate_size_expand;
!   immediate_size_expand = 0;
! 
!   decl = grokdeclarator (TREE_VALUE (TREE_PURPOSE (parm)),
! 			 TREE_PURPOSE (TREE_PURPOSE (parm)),
! 			 PARM, 0, NULL);
!   decl_attributes (&decl, TREE_VALUE (parm), 0);
  
    decl = pushdecl (decl);
  
    finish_decl (decl, NULL_TREE, NULL_TREE);
- 
-   immediate_size_expand = save_immediate_size_expand;
  }
  
! /* Mark all the parameter declarations to date as forward decls,
!    shift them to the variables list, and reset the parameters list.
     Also diagnose use of this extension.  */
  
  void
  mark_forward_parm_decls (void)
  {
!   tree parm;
  
    if (pedantic && !current_scope->warned_forward_parm_decls)
      {
--- 3421,3467 ----
  	      using_eh_for_cleanups ();
  	    }
  
! 	  push_cleanup (decl, cleanup, false);
  	}
      }
  }
  
+ /* Given a parsed parameter declaration, decode it into a PARM_DECL.  */
+ 
+ tree
+ grokparm (const struct c_parm *parm)
+ {
+   tree decl = grokdeclarator (parm->declarator, parm->specs, PARM, false,
+ 			      NULL);
+ 
+   decl_attributes (&decl, parm->attrs, 0);
+ 
+   return decl;
+ }
+ 
  /* Given a parsed parameter declaration, decode it into a PARM_DECL
     and push that on the current scope.  */
  
  void
! push_parm_decl (const struct c_parm *parm)
  {
    tree decl;
  
!   decl = grokdeclarator (parm->declarator, parm->specs, PARM, false, NULL);
!   decl_attributes (&decl, parm->attrs, 0);
  
    decl = pushdecl (decl);
  
    finish_decl (decl, NULL_TREE, NULL_TREE);
  }
  
! /* Mark all the parameter declarations to date as forward decls.
     Also diagnose use of this extension.  */
  
  void
  mark_forward_parm_decls (void)
  {
!   struct c_binding *b;
  
    if (pedantic && !current_scope->warned_forward_parm_decls)
      {
*************** mark_forward_parm_decls (void)
*** 2984,2995 ****
        current_scope->warned_forward_parm_decls = true;
      }
  
!   for (parm = current_scope->parms; parm; parm = TREE_CHAIN (parm))
!     TREE_ASM_WRITTEN (parm) = 1;
! 
!   SCOPE_LIST_CONCAT (current_scope, names, current_scope, parms);
!   current_scope->parms = 0;
!   current_scope->parms_last = 0;
  }
  
  static GTY(()) int compound_literal_number;
--- 3469,3477 ----
        current_scope->warned_forward_parm_decls = true;
      }
  
!   for (b = current_scope->bindings; b; b = b->prev)
!     if (TREE_CODE (b->decl) == PARM_DECL)
!       TREE_ASM_WRITTEN (b->decl) = 1;
  }
  
  static GTY(()) int compound_literal_number;
*************** build_compound_literal (tree type, tree 
*** 3004,3035 ****
  {
    /* We do not use start_decl here because we have a type, not a declarator;
       and do not use finish_decl because the decl should be stored inside
!      the COMPOUND_LITERAL_EXPR rather than added elsewhere as a DECL_STMT.  */
!   tree decl = build_decl (VAR_DECL, NULL_TREE, type);
    tree complit;
    tree stmt;
    DECL_EXTERNAL (decl) = 0;
    TREE_PUBLIC (decl) = 0;
!   TREE_STATIC (decl) = (current_scope == global_scope);
    DECL_CONTEXT (decl) = current_function_decl;
    TREE_USED (decl) = 1;
    TREE_TYPE (decl) = type;
!   TREE_READONLY (decl) = TREE_READONLY (type);
    store_init_value (decl, init);
  
    if (TREE_CODE (type) == ARRAY_TYPE && !COMPLETE_TYPE_P (type))
      {
!       int failure = complete_array_type (type, DECL_INITIAL (decl), 1);
!       if (failure)
! 	abort ();
      }
  
-   type = TREE_TYPE (decl);
    if (type == error_mark_node || !COMPLETE_TYPE_P (type))
      return error_mark_node;
  
!   stmt = build_stmt (DECL_STMT, decl);
!   complit = build1 (COMPOUND_LITERAL_EXPR, TREE_TYPE (decl), stmt);
    TREE_SIDE_EFFECTS (complit) = 1;
  
    layout_decl (decl, 0);
--- 3486,3524 ----
  {
    /* We do not use start_decl here because we have a type, not a declarator;
       and do not use finish_decl because the decl should be stored inside
!      the COMPOUND_LITERAL_EXPR rather than added elsewhere as a DECL_EXPR.  */
!   tree decl;
    tree complit;
    tree stmt;
+ 
+   if (type == error_mark_node)
+     return error_mark_node;
+ 
+   decl = build_decl (VAR_DECL, NULL_TREE, type);
    DECL_EXTERNAL (decl) = 0;
    TREE_PUBLIC (decl) = 0;
!   TREE_STATIC (decl) = (current_scope == file_scope);
    DECL_CONTEXT (decl) = current_function_decl;
    TREE_USED (decl) = 1;
    TREE_TYPE (decl) = type;
!   TREE_READONLY (decl) = TYPE_READONLY (type);
    store_init_value (decl, init);
  
    if (TREE_CODE (type) == ARRAY_TYPE && !COMPLETE_TYPE_P (type))
      {
!       int failure = complete_array_type (&TREE_TYPE (decl),
! 					 DECL_INITIAL (decl), true);
!       gcc_assert (!failure);
! 
!       type = TREE_TYPE (decl);
!       TREE_TYPE (DECL_INITIAL (decl)) = type;
      }
  
    if (type == error_mark_node || !COMPLETE_TYPE_P (type))
      return error_mark_node;
  
!   stmt = build_stmt (DECL_EXPR, decl);
!   complit = build1 (COMPOUND_LITERAL_EXPR, type, stmt);
    TREE_SIDE_EFFECTS (complit) = 1;
  
    layout_decl (decl, 0);
*************** build_compound_literal (tree type, tree 
*** 3047,3126 ****
        DECL_DEFER_OUTPUT (decl) = 1;
        DECL_COMDAT (decl) = 1;
        DECL_ARTIFICIAL (decl) = 1;
        pushdecl (decl);
!       rest_of_decl_compilation (decl, NULL, 1, 0);
      }
  
    return complit;
  }
  
- /* Make TYPE a complete type based on INITIAL_VALUE.
-    Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
-    2 if there was no information (in which case assume 1 if DO_DEFAULT).  */
- 
- int
- complete_array_type (tree type, tree initial_value, int do_default)
- {
-   tree maxindex = NULL_TREE;
-   int value = 0;
- 
-   if (initial_value)
-     {
-       /* Note MAXINDEX  is really the maximum index,
- 	 one less than the size.  */
-       if (TREE_CODE (initial_value) == STRING_CST)
- 	{
- 	  int eltsize
- 	    = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
- 	  maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
- 				   / eltsize) - 1, 0);
- 	}
-       else if (TREE_CODE (initial_value) == CONSTRUCTOR)
- 	{
- 	  tree elts = CONSTRUCTOR_ELTS (initial_value);
- 	  maxindex = build_int_2 (-1, -1);
- 	  for (; elts; elts = TREE_CHAIN (elts))
- 	    {
- 	      if (TREE_PURPOSE (elts))
- 		maxindex = TREE_PURPOSE (elts);
- 	      else
- 		maxindex = fold (build (PLUS_EXPR, integer_type_node,
- 					maxindex, integer_one_node));
- 	    }
- 	  maxindex = copy_node (maxindex);
- 	}
-       else
- 	{
- 	  /* Make an error message unless that happened already.  */
- 	  if (initial_value != error_mark_node)
- 	    value = 1;
- 
- 	  /* Prevent further error messages.  */
- 	  maxindex = build_int_2 (0, 0);
- 	}
-     }
- 
-   if (!maxindex)
-     {
-       if (do_default)
- 	maxindex = build_int_2 (0, 0);
-       value = 2;
-     }
- 
-   if (maxindex)
-     {
-       TYPE_DOMAIN (type) = build_index_type (maxindex);
-       if (!TREE_TYPE (maxindex))
- 	TREE_TYPE (maxindex) = TYPE_DOMAIN (type);
-     }
- 
-   /* Lay out the type now that we can get the real answer.  */
- 
-   layout_type (type);
- 
-   return value;
- }
- 
  /* Determine whether TYPE is a structure with a flexible array member,
     or a union containing such a structure (possibly recursively).  */
  
--- 3536,3549 ----
        DECL_DEFER_OUTPUT (decl) = 1;
        DECL_COMDAT (decl) = 1;
        DECL_ARTIFICIAL (decl) = 1;
+       DECL_IGNORED_P (decl) = 1;
        pushdecl (decl);
!       rest_of_decl_compilation (decl, 1, 0);
      }
  
    return complit;
  }
  
  /* Determine whether TYPE is a structure with a flexible array member,
     or a union containing such a structure (possibly recursively).  */
  
*************** check_bitfield_type_and_width (tree *typ
*** 3169,3177 ****
  
    /* Detect and ignore out of range field width and process valid
       field widths.  */
!   if (TREE_CODE (*width) != INTEGER_CST)
      {
!       error ("bit-field `%s' width not an integer constant", name);
        *width = integer_one_node;
      }
    else
--- 3592,3601 ----
  
    /* Detect and ignore out of range field width and process valid
       field widths.  */
!   if (!INTEGRAL_TYPE_P (TREE_TYPE (*width))
!       || TREE_CODE (*width) != INTEGER_CST)
      {
!       error ("bit-field %qs width not an integer constant", name);
        *width = integer_one_node;
      }
    else
*************** check_bitfield_type_and_width (tree *typ
*** 3179,3190 ****
        constant_expression_warning (*width);
        if (tree_int_cst_sgn (*width) < 0)
  	{
! 	  error ("negative width in bit-field `%s'", name);
  	  *width = integer_one_node;
  	}
        else if (integer_zerop (*width) && orig_name)
  	{
! 	  error ("zero width for bit-field `%s'", name);
  	  *width = integer_one_node;
  	}
      }
--- 3603,3614 ----
        constant_expression_warning (*width);
        if (tree_int_cst_sgn (*width) < 0)
  	{
! 	  error ("negative width in bit-field %qs", name);
  	  *width = integer_one_node;
  	}
        else if (integer_zerop (*width) && orig_name)
  	{
! 	  error ("zero width for bit-field %qs", name);
  	  *width = integer_one_node;
  	}
      }
*************** check_bitfield_type_and_width (tree *typ
*** 3194,3200 ****
        && TREE_CODE (*type) != BOOLEAN_TYPE
        && TREE_CODE (*type) != ENUMERAL_TYPE)
      {
!       error ("bit-field `%s' has invalid type", name);
        *type = unsigned_type_node;
      }
  
--- 3618,3624 ----
        && TREE_CODE (*type) != BOOLEAN_TYPE
        && TREE_CODE (*type) != ENUMERAL_TYPE)
      {
!       error ("bit-field %qs has invalid type", name);
        *type = unsigned_type_node;
      }
  
*************** check_bitfield_type_and_width (tree *typ
*** 3203,3209 ****
        && type_mv != integer_type_node
        && type_mv != unsigned_type_node
        && type_mv != boolean_type_node)
!     pedwarn ("type of bit-field `%s' is a GCC extension", name);
  
    if (type_mv == boolean_type_node)
      max_width = CHAR_TYPE_SIZE;
--- 3627,3633 ----
        && type_mv != integer_type_node
        && type_mv != unsigned_type_node
        && type_mv != boolean_type_node)
!     pedwarn ("type of bit-field %qs is a GCC extension", name);
  
    if (type_mv == boolean_type_node)
      max_width = CHAR_TYPE_SIZE;
*************** check_bitfield_type_and_width (tree *typ
*** 3212,3228 ****
  
    if (0 < compare_tree_int (*width, max_width))
      {
!       error ("width of `%s' exceeds its type", name);
        w = max_width;
!       *width = build_int_2 (w, 0);
      }
    else
      w = tree_low_cst (*width, 1);
  
!   if (TREE_CODE (*type) == ENUMERAL_TYPE
!       && (w < min_precision (TYPE_MIN_VALUE (*type), TREE_UNSIGNED (*type))
! 	  || w < min_precision (TYPE_MAX_VALUE (*type), TREE_UNSIGNED (*type))))
!     warning ("`%s' is narrower than values of its type", name);
  }
  
  /* Given declspecs and a declarator,
--- 3636,3656 ----
  
    if (0 < compare_tree_int (*width, max_width))
      {
!       error ("width of %qs exceeds its type", name);
        w = max_width;
!       *width = build_int_cst (NULL_TREE, w);
      }
    else
      w = tree_low_cst (*width, 1);
  
!   if (TREE_CODE (*type) == ENUMERAL_TYPE)
!     {
!       struct lang_type *lt = TYPE_LANG_SPECIFIC (*type);
!       if (!lt
!           || w < min_precision (lt->enum_min, TYPE_UNSIGNED (*type))
! 	  || w < min_precision (lt->enum_max, TYPE_UNSIGNED (*type)))
! 	warning ("%qs is narrower than values of its type", name);
!     }
  }
  
  /* Given declspecs and a declarator,
*************** check_bitfield_type_and_width (tree *typ
*** 3231,3238 ****
     (In one case we can return a ..._TYPE node instead.
      For invalid input we sometimes return 0.)
  
!    DECLSPECS is a chain of tree_list nodes whose value fields
!     are the storage classes and type specifiers.
  
     DECL_CONTEXT says which syntactic context this declaration is in:
       NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
--- 3659,3665 ----
     (In one case we can return a ..._TYPE node instead.
      For invalid input we sometimes return 0.)
  
!    DECLSPECS is a c_declspecs structure for the declaration specifiers.
  
     DECL_CONTEXT says which syntactic context this declaration is in:
       NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
*************** check_bitfield_type_and_width (tree *typ
*** 3244,3250 ****
       TYPENAME if for a typename (in a cast or sizeof).
        Don't make a DECL node; just return the ..._TYPE node.
       FIELD for a struct or union field; make a FIELD_DECL.
!    INITIALIZED is 1 if the decl has an initializer.
     WIDTH is non-NULL for bit-fields, and is a pointer to an INTEGER_CST node
     representing the width of the bit-field.
  
--- 3671,3677 ----
       TYPENAME if for a typename (in a cast or sizeof).
        Don't make a DECL node; just return the ..._TYPE node.
       FIELD for a struct or union field; make a FIELD_DECL.
!    INITIALIZED is true if the decl has an initializer.
     WIDTH is non-NULL for bit-fields, and is a pointer to an INTEGER_CST node
     representing the width of the bit-field.
  
*************** check_bitfield_type_and_width (tree *typ
*** 3256,3288 ****
     and `extern' are interpreted.  */
  
  static tree
! grokdeclarator (tree declarator, tree declspecs,
! 		enum decl_context decl_context, int initialized, tree *width)
  {
!   int specbits = 0;
!   tree spec;
!   tree type = NULL_TREE;
!   int longlong = 0;
    int constp;
    int restrictp;
    int volatilep;
    int type_quals = TYPE_UNQUALIFIED;
-   int inlinep;
-   int explicit_int = 0;
-   int explicit_char = 0;
-   int defaulted_int = 0;
-   tree typedef_decl = 0;
    const char *name, *orig_name;
    tree typedef_type = 0;
    int funcdef_flag = 0;
!   enum tree_code innermost_code = ERROR_MARK;
    int size_varies = 0;
!   tree decl_attr = NULL_TREE;
!   tree array_ptr_quals = NULL_TREE;
    int array_parm_static = 0;
    tree returned_attrs = NULL_TREE;
    bool bitfield = width != NULL;
    tree element_type;
  
    if (decl_context == FUNCDEF)
      funcdef_flag = 1, decl_context = NORMAL;
--- 3683,3712 ----
     and `extern' are interpreted.  */
  
  static tree
! grokdeclarator (const struct c_declarator *declarator,
! 		struct c_declspecs *declspecs,
! 		enum decl_context decl_context, bool initialized, tree *width)
  {
!   tree type = declspecs->type;
!   bool threadp = declspecs->thread_p;
!   enum c_storage_class storage_class = declspecs->storage_class;
    int constp;
    int restrictp;
    int volatilep;
    int type_quals = TYPE_UNQUALIFIED;
    const char *name, *orig_name;
    tree typedef_type = 0;
    int funcdef_flag = 0;
!   bool funcdef_syntax = false;
    int size_varies = 0;
!   tree decl_attr = declspecs->decl_attr;
!   int array_ptr_quals = TYPE_UNQUALIFIED;
!   tree array_ptr_attrs = NULL_TREE;
    int array_parm_static = 0;
    tree returned_attrs = NULL_TREE;
    bool bitfield = width != NULL;
    tree element_type;
+   struct c_arg_info *arg_info = 0;
  
    if (decl_context == FUNCDEF)
      funcdef_flag = 1, decl_context = NORMAL;
*************** grokdeclarator (tree declarator, tree de
*** 3290,3319 ****
    /* Look inside a declarator for the name being declared
       and get it as a string, for an error message.  */
    {
!     tree decl = declarator;
      name = 0;
  
      while (decl)
!       switch (TREE_CODE (decl))
  	{
! 	case ARRAY_REF:
! 	case INDIRECT_REF:
! 	case CALL_EXPR:
! 	  innermost_code = TREE_CODE (decl);
! 	  decl = TREE_OPERAND (decl, 0);
  	  break;
  
! 	case TREE_LIST:
! 	  decl = TREE_VALUE (decl);
  	  break;
  
! 	case IDENTIFIER_NODE:
! 	  name = IDENTIFIER_POINTER (decl);
  	  decl = 0;
  	  break;
  
  	default:
! 	  abort ();
  	}
      orig_name = name;
      if (name == 0)
--- 3714,3744 ----
    /* Look inside a declarator for the name being declared
       and get it as a string, for an error message.  */
    {
!     const struct c_declarator *decl = declarator;
      name = 0;
  
      while (decl)
!       switch (decl->kind)
  	{
! 	case cdk_function:
! 	case cdk_array:
! 	case cdk_pointer:
! 	  funcdef_syntax = (decl->kind == cdk_function);
! 	  decl = decl->declarator;
  	  break;
  
! 	case cdk_attrs:
! 	  decl = decl->declarator;
  	  break;
  
! 	case cdk_id:
! 	  if (decl->u.id)
! 	    name = IDENTIFIER_POINTER (decl->u.id);
  	  decl = 0;
  	  break;
  
  	default:
! 	  gcc_unreachable ();
  	}
      orig_name = name;
      if (name == 0)
*************** grokdeclarator (tree declarator, tree de
*** 3323,3628 ****
    /* A function definition's declarator must have the form of
       a function declarator.  */
  
!   if (funcdef_flag && innermost_code != CALL_EXPR)
      return 0;
  
    /* If this looks like a function definition, make it one,
       even if it occurs where parms are expected.
       Then store_parm_decls will reject it and not use it as a parm.  */
!   if (decl_context == NORMAL && !funcdef_flag
!       && current_scope->parm_flag)
      decl_context = PARM;
  
!   /* Look through the decl specs and record which ones appear.
!      Some typespecs are defined as built-in typenames.
!      Others, the ones that are modifiers of other types,
!      are represented by bits in SPECBITS: set the bits for
!      the modifiers that appear.  Storage class keywords are also in SPECBITS.
! 
!      If there is a typedef name or a type, store the type in TYPE.
!      This includes builtin typedefs such as `int'.
! 
!      Set EXPLICIT_INT or EXPLICIT_CHAR if the type is `int' or `char'
!      and did not come from a user typedef.
! 
!      Set LONGLONG if `long' is mentioned twice.  */
! 
!   for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
!     {
!       tree id = TREE_VALUE (spec);
! 
!       /* If the entire declaration is itself tagged as deprecated then
!          suppress reports of deprecated items.  */
!       if (id && TREE_DEPRECATED (id))
!         {
! 	  if (deprecated_state != DEPRECATED_SUPPRESS)
! 	    warn_deprecated_use (id);
!         }
! 
!       if (id == ridpointers[(int) RID_INT])
! 	explicit_int = 1;
!       if (id == ridpointers[(int) RID_CHAR])
! 	explicit_char = 1;
! 
!       if (TREE_CODE (id) == IDENTIFIER_NODE && C_IS_RESERVED_WORD (id))
! 	{
! 	  enum rid i = C_RID_CODE (id);
! 	  if ((int) i <= (int) RID_LAST_MODIFIER)
! 	    {
! 	      if (i == RID_LONG && (specbits & (1 << (int) RID_LONG)))
! 		{
! 		  if (longlong)
! 		    error ("`long long long' is too long for GCC");
! 		  else
! 		    {
! 		      if (pedantic && !flag_isoc99 && ! in_system_header
! 			  && warn_long_long)
! 			pedwarn ("ISO C90 does not support `long long'");
! 		      longlong = 1;
! 		    }
! 		}
! 	      else if (specbits & (1 << (int) i))
! 		{
! 		  if (i == RID_CONST || i == RID_VOLATILE || i == RID_RESTRICT)
! 		    {
! 		      if (pedantic && !flag_isoc99)
! 			pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
! 		    }
! 		  else
! 		    error ("duplicate `%s'", IDENTIFIER_POINTER (id));
! 		}
! 
! 	      /* Diagnose "__thread extern".  Recall that this list
! 		 is in the reverse order seen in the text.  */
! 	      if (i == RID_THREAD
! 		  && (specbits & (1 << (int) RID_EXTERN
! 				  | 1 << (int) RID_STATIC)))
! 		{
! 		  if (specbits & 1 << (int) RID_EXTERN)
! 		    error ("`__thread' before `extern'");
! 		  else
! 		    error ("`__thread' before `static'");
! 		}
! 
! 	      specbits |= 1 << (int) i;
! 	      goto found;
! 	    }
! 	}
!       if (type)
! 	error ("two or more data types in declaration of `%s'", name);
!       /* Actual typedefs come to us as TYPE_DECL nodes.  */
!       else if (TREE_CODE (id) == TYPE_DECL)
! 	{
! 	  if (TREE_TYPE (id) == error_mark_node)
! 	    ; /* Allow the type to default to int to avoid cascading errors.  */
! 	  else
! 	    {
! 	      type = TREE_TYPE (id);
! 	      decl_attr = DECL_ATTRIBUTES (id);
! 	      typedef_decl = id;
! 	    }
! 	}
!       /* Built-in types come as identifiers.  */
!       else if (TREE_CODE (id) == IDENTIFIER_NODE)
! 	{
! 	  tree t = lookup_name (id);
! 	  if (TREE_TYPE (t) == error_mark_node)
! 	    ;
! 	  else if (!t || TREE_CODE (t) != TYPE_DECL)
! 	    error ("`%s' fails to be a typedef or built in type",
! 		   IDENTIFIER_POINTER (id));
! 	  else
! 	    {
! 	      type = TREE_TYPE (t);
! 	      typedef_decl = t;
! 	    }
! 	}
!       else if (TREE_CODE (id) != ERROR_MARK)
! 	type = id;
! 
!     found:
!       ;
!     }
  
    typedef_type = type;
!   if (type)
!     size_varies = C_TYPE_VARIABLE_SIZE (type);
! 
!   /* No type at all: default to `int', and set DEFAULTED_INT
!      because it was not a user-defined typedef.  */
! 
!   if (type == 0)
!     {
!       if ((! (specbits & ((1 << (int) RID_LONG) | (1 << (int) RID_SHORT)
! 			  | (1 << (int) RID_SIGNED)
! 			  | (1 << (int) RID_UNSIGNED)
! 			  | (1 << (int) RID_COMPLEX))))
! 	  /* Don't warn about typedef foo = bar.  */
! 	  && ! (specbits & (1 << (int) RID_TYPEDEF) && initialized)
! 	  && ! in_system_header)
! 	{
! 	  /* Issue a warning if this is an ISO C 99 program or if -Wreturn-type
! 	     and this is a function, or if -Wimplicit; prefer the former
! 	     warning since it is more explicit.  */
! 	  if ((warn_implicit_int || warn_return_type || flag_isoc99)
! 	      && funcdef_flag)
! 	    warn_about_return_type = 1;
! 	  else if (warn_implicit_int || flag_isoc99)
! 	    pedwarn_c99 ("type defaults to `int' in declaration of `%s'",
! 			 name);
! 	}
! 
!       defaulted_int = 1;
!       type = integer_type_node;
!     }
! 
!   /* Now process the modifiers that were specified
!      and check for invalid combinations.  */
! 
!   /* Long double is a special combination.  */
! 
!   if ((specbits & 1 << (int) RID_LONG) && ! longlong
!       && TYPE_MAIN_VARIANT (type) == double_type_node)
!     {
!       specbits &= ~(1 << (int) RID_LONG);
!       type = long_double_type_node;
!     }
! 
!   /* Check all other uses of type modifiers.  */
! 
!   if (specbits & ((1 << (int) RID_LONG) | (1 << (int) RID_SHORT)
! 		  | (1 << (int) RID_UNSIGNED) | (1 << (int) RID_SIGNED)))
!     {
!       int ok = 0;
! 
!       if ((specbits & 1 << (int) RID_LONG)
! 	  && (specbits & 1 << (int) RID_SHORT))
! 	error ("both long and short specified for `%s'", name);
!       else if (((specbits & 1 << (int) RID_LONG)
! 		|| (specbits & 1 << (int) RID_SHORT))
! 	       && explicit_char)
! 	error ("long or short specified with char for `%s'", name);
!       else if (((specbits & 1 << (int) RID_LONG)
! 		|| (specbits & 1 << (int) RID_SHORT))
! 	       && TREE_CODE (type) == REAL_TYPE)
! 	{
! 	  static int already = 0;
! 
! 	  error ("long or short specified with floating type for `%s'", name);
! 	  if (! already && ! pedantic)
! 	    {
! 	      error ("the only valid combination is `long double'");
! 	      already = 1;
! 	    }
! 	}
!       else if ((specbits & 1 << (int) RID_SIGNED)
! 	       && (specbits & 1 << (int) RID_UNSIGNED))
! 	error ("both signed and unsigned specified for `%s'", name);
!       else if (TREE_CODE (type) != INTEGER_TYPE)
! 	error ("long, short, signed or unsigned invalid for `%s'", name);
!       else
! 	{
! 	  ok = 1;
! 	  if (!explicit_int && !defaulted_int && !explicit_char)
! 	    {
! 	      error ("long, short, signed or unsigned used invalidly for `%s'",
! 		     name);
! 	      ok = 0;
! 	    }
! 	}
! 
!       /* Discard the type modifiers if they are invalid.  */
!       if (! ok)
! 	{
! 	  specbits &= ~((1 << (int) RID_LONG) | (1 << (int) RID_SHORT)
! 			| (1 << (int) RID_UNSIGNED) | (1 << (int) RID_SIGNED));
! 	  longlong = 0;
! 	}
!     }
! 
!   if ((specbits & (1 << (int) RID_COMPLEX))
!       && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
!     {
!       error ("complex invalid for `%s'", name);
!       specbits &= ~(1 << (int) RID_COMPLEX);
!     }
  
!   /* Decide whether an integer type is signed or not.
!      Optionally treat bit-fields as signed by default.  */
!   if (specbits & 1 << (int) RID_UNSIGNED
!       || (bitfield && ! flag_signed_bitfields
! 	  && (explicit_int || defaulted_int || explicit_char
! 	      /* A typedef for plain `int' without `signed'
! 		 can be controlled just like plain `int'.  */
! 	      || ! (typedef_decl != 0
! 		    && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
! 	  && TREE_CODE (type) != ENUMERAL_TYPE
! 	  && !(specbits & 1 << (int) RID_SIGNED)))
!     {
!       if (longlong)
! 	type = long_long_unsigned_type_node;
!       else if (specbits & 1 << (int) RID_LONG)
! 	type = long_unsigned_type_node;
!       else if (specbits & 1 << (int) RID_SHORT)
! 	type = short_unsigned_type_node;
!       else if (type == char_type_node)
! 	type = unsigned_char_type_node;
!       else if (typedef_decl)
! 	type = c_common_unsigned_type (type);
!       else
! 	type = unsigned_type_node;
!     }
!   else if ((specbits & 1 << (int) RID_SIGNED)
! 	   && type == char_type_node)
!     type = signed_char_type_node;
!   else if (longlong)
!     type = long_long_integer_type_node;
!   else if (specbits & 1 << (int) RID_LONG)
!     type = long_integer_type_node;
!   else if (specbits & 1 << (int) RID_SHORT)
!     type = short_integer_type_node;
  
!   if (specbits & 1 << (int) RID_COMPLEX)
      {
!       if (pedantic && !flag_isoc99)
! 	pedwarn ("ISO C90 does not support complex types");
!       /* If we just have "complex", it is equivalent to
! 	 "complex double", but if any modifiers at all are specified it is
! 	 the complex form of TYPE.  E.g, "complex short" is
! 	 "complex short int".  */
! 
!       if (defaulted_int && ! longlong
! 	  && ! (specbits & ((1 << (int) RID_LONG) | (1 << (int) RID_SHORT)
! 			    | (1 << (int) RID_SIGNED)
! 			    | (1 << (int) RID_UNSIGNED))))
! 	{
! 	  if (pedantic)
! 	    pedwarn ("ISO C does not support plain `complex' meaning `double complex'");
! 	  type = complex_double_type_node;
! 	}
!       else if (type == integer_type_node)
! 	{
! 	  if (pedantic)
! 	    pedwarn ("ISO C does not support complex integer types");
! 	  type = complex_integer_type_node;
! 	}
!       else if (type == float_type_node)
! 	type = complex_float_type_node;
!       else if (type == double_type_node)
! 	type = complex_double_type_node;
!       else if (type == long_double_type_node)
! 	type = complex_long_double_type_node;
!       else
! 	{
! 	  if (pedantic)
! 	    pedwarn ("ISO C does not support complex integer types");
! 	  type = build_complex_type (type);
! 	}
      }
  
!   /* Check the type and width of a bit-field.  */
!   if (bitfield)
!     check_bitfield_type_and_width (&type, width, orig_name);
  
    /* Figure out the type qualifiers for the declaration.  There are
       two ways a declaration can become qualified.  One is something
--- 3748,3788 ----
    /* A function definition's declarator must have the form of
       a function declarator.  */
  
!   if (funcdef_flag && !funcdef_syntax)
      return 0;
  
    /* If this looks like a function definition, make it one,
       even if it occurs where parms are expected.
       Then store_parm_decls will reject it and not use it as a parm.  */
!   if (decl_context == NORMAL && !funcdef_flag && current_scope->parm_flag)
      decl_context = PARM;
  
!   if (declspecs->deprecated_p && deprecated_state != DEPRECATED_SUPPRESS)
!     warn_deprecated_use (declspecs->type);
  
    typedef_type = type;
!   size_varies = C_TYPE_VARIABLE_SIZE (type);
  
!   /* Diagnose defaulting to "int".  */
  
!   if (declspecs->default_int_p && !in_system_header)
      {
!       /* Issue a warning if this is an ISO C 99 program or if
! 	 -Wreturn-type and this is a function, or if -Wimplicit;
! 	 prefer the former warning since it is more explicit.  */
!       if ((warn_implicit_int || warn_return_type || flag_isoc99)
! 	  && funcdef_flag)
! 	warn_about_return_type = 1;
!       else if (warn_implicit_int || flag_isoc99)
! 	pedwarn_c99 ("type defaults to %<int%> in declaration of %qs", name);
      }
  
!   /* Adjust the type if a bit-field is being declared,
!      -funsigned-bitfields applied and the type is not explicitly
!      "signed".  */
!   if (bitfield && !flag_signed_bitfields && !declspecs->explicit_signed_p
!       && TREE_CODE (type) == INTEGER_TYPE)
!     type = c_common_unsigned_type (type);
  
    /* Figure out the type qualifiers for the declaration.  There are
       two ways a declaration can become qualified.  One is something
*************** grokdeclarator (tree declarator, tree de
*** 3636,3776 ****
       duplicate qualifiers should be diagnosed in this case, but it
       seems most appropriate to do so).  */
    element_type = strip_array_types (type);
!   constp = !! (specbits & 1 << (int) RID_CONST) + TYPE_READONLY (element_type);
!   restrictp
!     = !! (specbits & 1 << (int) RID_RESTRICT) + TYPE_RESTRICT (element_type);
!   volatilep
!     = !! (specbits & 1 << (int) RID_VOLATILE) + TYPE_VOLATILE (element_type);
!   inlinep = !! (specbits & (1 << (int) RID_INLINE));
    if (pedantic && !flag_isoc99)
      {
        if (constp > 1)
! 	pedwarn ("duplicate `const'");
        if (restrictp > 1)
! 	pedwarn ("duplicate `restrict'");
        if (volatilep > 1)
! 	pedwarn ("duplicate `volatile'");
      }
!   if (! flag_gen_aux_info && (TYPE_QUALS (type)))
      type = TYPE_MAIN_VARIANT (type);
    type_quals = ((constp ? TYPE_QUAL_CONST : 0)
  		| (restrictp ? TYPE_QUAL_RESTRICT : 0)
  		| (volatilep ? TYPE_QUAL_VOLATILE : 0));
  
!   /* Warn if two storage classes are given. Default to `auto'.  */
! 
!   {
!     int nclasses = 0;
! 
!     if (specbits & 1 << (int) RID_AUTO) nclasses++;
!     if (specbits & 1 << (int) RID_STATIC) nclasses++;
!     if (specbits & 1 << (int) RID_EXTERN) nclasses++;
!     if (specbits & 1 << (int) RID_REGISTER) nclasses++;
!     if (specbits & 1 << (int) RID_TYPEDEF) nclasses++;
! 
!     /* "static __thread" and "extern __thread" are allowed.  */
!     if ((specbits & (1 << (int) RID_THREAD
! 		     | 1 << (int) RID_STATIC
! 		     | 1 << (int) RID_EXTERN)) == (1 << (int) RID_THREAD))
!       nclasses++;
! 
!     /* Warn about storage classes that are invalid for certain
!        kinds of declarations (parameters, typenames, etc.).  */
  
!     if (nclasses > 1)
!       error ("multiple storage classes in declaration of `%s'", name);
!     else if (funcdef_flag
! 	     && (specbits
! 		 & ((1 << (int) RID_REGISTER)
! 		    | (1 << (int) RID_AUTO)
! 		    | (1 << (int) RID_TYPEDEF)
! 		    | (1 << (int) RID_THREAD))))
!       {
! 	if (specbits & 1 << (int) RID_AUTO
! 	    && (pedantic || current_scope == global_scope))
! 	  pedwarn ("function definition declared `auto'");
! 	if (specbits & 1 << (int) RID_REGISTER)
! 	  error ("function definition declared `register'");
! 	if (specbits & 1 << (int) RID_TYPEDEF)
! 	  error ("function definition declared `typedef'");
! 	if (specbits & 1 << (int) RID_THREAD)
! 	  error ("function definition declared `__thread'");
! 	specbits &= ~((1 << (int) RID_TYPEDEF) | (1 << (int) RID_REGISTER)
! 		      | (1 << (int) RID_AUTO) | (1 << (int) RID_THREAD));
!       }
!     else if (decl_context != NORMAL && nclasses > 0)
!       {
! 	if (decl_context == PARM && specbits & 1 << (int) RID_REGISTER)
! 	  ;
! 	else
! 	  {
! 	    switch (decl_context)
! 	      {
! 	      case FIELD:
! 		error ("storage class specified for structure field `%s'",
! 		       name);
! 		break;
! 	      case PARM:
! 		error ("storage class specified for parameter `%s'", name);
! 		break;
! 	      default:
! 		error ("storage class specified for typename");
! 		break;
! 	      }
! 	    specbits &= ~((1 << (int) RID_TYPEDEF) | (1 << (int) RID_REGISTER)
! 			  | (1 << (int) RID_AUTO) | (1 << (int) RID_STATIC)
! 			  | (1 << (int) RID_EXTERN) | (1 << (int) RID_THREAD));
! 	  }
!       }
!     else if (specbits & 1 << (int) RID_EXTERN && initialized && ! funcdef_flag)
!       {
! 	/* `extern' with initialization is invalid if not at file scope.  */
! 	if (current_scope == global_scope)
! 	  warning ("`%s' initialized and declared `extern'", name);
! 	else
! 	  error ("`%s' has both `extern' and initializer", name);
!       }
!     else if (current_scope == global_scope)
!       {
! 	if (specbits & 1 << (int) RID_AUTO)
! 	  error ("file-scope declaration of `%s' specifies `auto'", name);
!       }
!     else
!       {
! 	if (specbits & 1 << (int) RID_EXTERN && funcdef_flag)
! 	  error ("nested function `%s' declared `extern'", name);
! 	else if ((specbits & (1 << (int) RID_THREAD
! 			       | 1 << (int) RID_EXTERN
! 			       | 1 << (int) RID_STATIC))
! 		 == (1 << (int) RID_THREAD))
! 	  {
! 	    error ("function-scope `%s' implicitly auto and declared `__thread'",
! 		   name);
! 	    specbits &= ~(1 << (int) RID_THREAD);
! 	  }
!       }
!   }
  
    /* Now figure out the structure of the declarator proper.
       Descend through it, creating more complex types, until we reach
!      the declared identifier (or NULL_TREE, in an absolute declarator).  */
  
!   while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE)
      {
        if (type == error_mark_node)
  	{
! 	  declarator = TREE_OPERAND (declarator, 0);
  	  continue;
  	}
  
!       /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
! 	 an INDIRECT_REF (for *...),
! 	 a CALL_EXPR (for ...(...)),
! 	 a TREE_LIST (for nested attributes),
! 	 an identifier (for the name being declared)
! 	 or a null pointer (for the place in an absolute declarator
  	 where the name was omitted).
! 	 For the last two cases, we have just exited the loop.
  
  	 At this point, TYPE is the type of elements of an array,
  	 or for a function to return, or for a pointer to point to.
--- 3796,3922 ----
       duplicate qualifiers should be diagnosed in this case, but it
       seems most appropriate to do so).  */
    element_type = strip_array_types (type);
!   constp = declspecs->const_p + TYPE_READONLY (element_type);
!   restrictp = declspecs->restrict_p + TYPE_RESTRICT (element_type);
!   volatilep = declspecs->volatile_p + TYPE_VOLATILE (element_type);
    if (pedantic && !flag_isoc99)
      {
        if (constp > 1)
! 	pedwarn ("duplicate %<const%>");
        if (restrictp > 1)
! 	pedwarn ("duplicate %<restrict%>");
        if (volatilep > 1)
! 	pedwarn ("duplicate %<volatile%>");
      }
!   if (!flag_gen_aux_info && (TYPE_QUALS (element_type)))
      type = TYPE_MAIN_VARIANT (type);
    type_quals = ((constp ? TYPE_QUAL_CONST : 0)
  		| (restrictp ? TYPE_QUAL_RESTRICT : 0)
  		| (volatilep ? TYPE_QUAL_VOLATILE : 0));
  
!   /* Warn about storage classes that are invalid for certain
!      kinds of declarations (parameters, typenames, etc.).  */
  
!   if (funcdef_flag
!       && (threadp
! 	  || storage_class == csc_auto
! 	  || storage_class == csc_register
! 	  || storage_class == csc_typedef))
!     {
!       if (storage_class == csc_auto
! 	  && (pedantic || current_scope == file_scope))
! 	pedwarn ("function definition declared %<auto%>");
!       if (storage_class == csc_register)
! 	error ("function definition declared %<register%>");
!       if (storage_class == csc_typedef)
! 	error ("function definition declared %<typedef%>");
!       if (threadp)
! 	error ("function definition declared %<__thread%>");
!       threadp = false;
!       if (storage_class == csc_auto
! 	  || storage_class == csc_register
! 	  || storage_class == csc_typedef)
! 	storage_class = csc_none;
!     }
!   else if (decl_context != NORMAL && (storage_class != csc_none || threadp))
!     {
!       if (decl_context == PARM && storage_class == csc_register)
! 	;
!       else
! 	{
! 	  switch (decl_context)
! 	    {
! 	    case FIELD:
! 	      error ("storage class specified for structure field %qs",
! 		     name);
! 	      break;
! 	    case PARM:
! 	      error ("storage class specified for parameter %qs", name);
! 	      break;
! 	    default:
! 	      error ("storage class specified for typename");
! 	      break;
! 	    }
! 	  storage_class = csc_none;
! 	  threadp = false;
! 	}
!     }
!   else if (storage_class == csc_extern
! 	   && initialized
! 	   && !funcdef_flag)
!     {
!       /* 'extern' with initialization is invalid if not at file scope.  */
!       if (current_scope == file_scope)
! 	warning ("%qs initialized and declared %<extern%>", name);
!       else
! 	error ("%qs has both %<extern%> and initializer", name);
!     }
!   else if (current_scope == file_scope)
!     {
!       if (storage_class == csc_auto)
! 	error ("file-scope declaration of %qs specifies %<auto%>", name);
!       if (pedantic && storage_class == csc_register)
! 	pedwarn ("file-scope declaration of %qs specifies %<register%>", name);
!     }
!   else
!     {
!       if (storage_class == csc_extern && funcdef_flag)
! 	error ("nested function %qs declared %<extern%>", name);
!       else if (threadp && storage_class == csc_none)
! 	{
! 	  error ("function-scope %qs implicitly auto and declared "
! 		 "%<__thread%>",
! 		 name);
! 	  threadp = false;
! 	}
!     }
  
    /* Now figure out the structure of the declarator proper.
       Descend through it, creating more complex types, until we reach
!      the declared identifier (or NULL_TREE, in an absolute declarator).
!      At each stage we maintain an unqualified version of the type
!      together with any qualifiers that should be applied to it with
!      c_build_qualified_type; this way, array types including
!      multidimensional array types are first built up in unqualified
!      form and then the qualified form is created with
!      TYPE_MAIN_VARIANT pointing to the unqualified form.  */
  
!   while (declarator && declarator->kind != cdk_id)
      {
        if (type == error_mark_node)
  	{
! 	  declarator = declarator->declarator;
  	  continue;
  	}
  
!       /* Each level of DECLARATOR is either a cdk_array (for ...[..]),
! 	 a cdk_pointer (for *...),
! 	 a cdk_function (for ...(...)),
! 	 a cdk_attrs (for nested attributes),
! 	 or a cdk_id (for the name being declared
! 	 or the place in an absolute declarator
  	 where the name was omitted).
! 	 For the last case, we have just exited the loop.
  
  	 At this point, TYPE is the type of elements of an array,
  	 or for a function to return, or for a pointer to point to.
*************** grokdeclarator (tree declarator, tree de
*** 3778,4137 ****
  	 array or function or pointer, and DECLARATOR has had its
  	 outermost layer removed.  */
  
!       if (array_ptr_quals != NULL_TREE || array_parm_static)
  	{
  	  /* Only the innermost declarator (making a parameter be of
  	     array type which is converted to pointer type)
  	     may have static or type qualifiers.  */
  	  error ("static or type qualifiers in non-parameter array declarator");
! 	  array_ptr_quals = NULL_TREE;
  	  array_parm_static = 0;
  	}
  
!       if (TREE_CODE (declarator) == TREE_LIST)
! 	{
! 	  /* We encode a declarator with embedded attributes using
! 	     a TREE_LIST.  */
! 	  tree attrs = TREE_PURPOSE (declarator);
! 	  tree inner_decl;
! 	  int attr_flags = 0;
! 	  declarator = TREE_VALUE (declarator);
! 	  inner_decl = declarator;
! 	  while (inner_decl != NULL_TREE
! 		 && TREE_CODE (inner_decl) == TREE_LIST)
! 	    inner_decl = TREE_VALUE (inner_decl);
! 	  if (inner_decl == NULL_TREE
! 	      || TREE_CODE (inner_decl) == IDENTIFIER_NODE)
! 	    attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
! 	  else if (TREE_CODE (inner_decl) == CALL_EXPR)
! 	    attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
! 	  else if (TREE_CODE (inner_decl) == ARRAY_REF)
! 	    attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
! 	  returned_attrs = decl_attributes (&type,
! 					    chainon (returned_attrs, attrs),
! 					    attr_flags);
! 	}
!       else if (TREE_CODE (declarator) == ARRAY_REF)
  	{
! 	  tree itype = NULL_TREE;
! 	  tree size = TREE_OPERAND (declarator, 1);
! 	  /* The index is a signed object `sizetype' bits wide.  */
! 	  tree index_type = c_common_signed_type (sizetype);
! 
! 	  array_ptr_quals = TREE_TYPE (declarator);
! 	  array_parm_static = TREE_STATIC (declarator);
! 
! 	  declarator = TREE_OPERAND (declarator, 0);
! 
! 	  /* Check for some types that there cannot be arrays of.  */
  
! 	  if (VOID_TYPE_P (type))
! 	    {
! 	      error ("declaration of `%s' as array of voids", name);
! 	      type = error_mark_node;
! 	    }
  
! 	  if (TREE_CODE (type) == FUNCTION_TYPE)
! 	    {
! 	      error ("declaration of `%s' as array of functions", name);
  	      type = error_mark_node;
! 	    }
! 
! 	  if (pedantic && !in_system_header && flexible_array_type_p (type))
! 	    pedwarn ("invalid use of structure with flexible array member");
! 
! 	  if (size == error_mark_node)
! 	    type = error_mark_node;
! 
! 	  if (type == error_mark_node)
! 	    continue;
! 
! 	  /* If size was specified, set ITYPE to a range-type for that size.
! 	     Otherwise, ITYPE remains null.  finish_decl may figure it out
! 	     from an initial value.  */
! 
! 	  if (size)
! 	    {
! 	      /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue.  */
! 	      STRIP_TYPE_NOPS (size);
! 
! 	      if (! INTEGRAL_TYPE_P (TREE_TYPE (size)))
! 		{
! 		  error ("size of array `%s' has non-integer type", name);
! 		  size = integer_one_node;
! 		}
! 
! 	      if (pedantic && integer_zerop (size))
! 		pedwarn ("ISO C forbids zero-size array `%s'", name);
! 
! 	      if (TREE_CODE (size) == INTEGER_CST)
! 		{
! 		  constant_expression_warning (size);
! 		  if (tree_int_cst_sgn (size) < 0)
! 		    {
! 		      error ("size of array `%s' is negative", name);
! 		      size = integer_one_node;
! 		    }
! 		}
! 	      else
! 		{
! 		  /* Make sure the array size remains visibly nonconstant
! 		     even if it is (eg) a const variable with known value.  */
! 		  size_varies = 1;
! 
! 		  if (!flag_isoc99 && pedantic)
! 		    {
! 		      if (TREE_CONSTANT (size))
! 			pedwarn ("ISO C90 forbids array `%s' whose size can't be evaluated",
! 				 name);
! 		      else
! 			pedwarn ("ISO C90 forbids variable-size array `%s'",
! 				 name);
! 		    }
! 		}
  
! 	      if (integer_zerop (size))
! 		{
! 		  /* A zero-length array cannot be represented with an
! 		     unsigned index type, which is what we'll get with
! 		     build_index_type.  Create an open-ended range instead.  */
! 		  itype = build_range_type (sizetype, size, NULL_TREE);
! 		}
! 	      else
! 		{
! 		  /* Compute the maximum valid index, that is, size - 1.
! 		     Do the calculation in index_type, so that if it is
! 		     a variable the computations will be done in the
! 		     proper mode.  */
! 	          itype = fold (build (MINUS_EXPR, index_type,
! 				       convert (index_type, size),
! 				       convert (index_type, size_one_node)));
  
! 	          /* If that overflowed, the array is too big.
! 		     ??? While a size of INT_MAX+1 technically shouldn't
! 		     cause an overflow (because we subtract 1), the overflow
! 		     is recorded during the conversion to index_type, before
! 		     the subtraction.  Handling this case seems like an
! 		     unnecessary complication.  */
! 		  if (TREE_OVERFLOW (itype))
! 		    {
! 		      error ("size of array `%s' is too large", name);
! 		      type = error_mark_node;
! 		      continue;
! 		    }
  
! 		  if (size_varies)
! 		    {
! 		      /* We must be able to distinguish the
! 			 SAVE_EXPR_CONTEXT for the variably-sized type
! 			 so that we can set it correctly in
! 			 set_save_expr_context.  The convention is
! 			 that all SAVE_EXPRs that need to be reset
! 			 have NULL_TREE for their SAVE_EXPR_CONTEXT.  */
! 		      tree cfd = current_function_decl;
! 		      if (decl_context == PARM)
! 			current_function_decl = NULL_TREE;
! 		      itype = variable_size (itype);
! 		      if (decl_context == PARM)
! 			current_function_decl = cfd;
! 		    }
! 		  itype = build_index_type (itype);
! 		}
! 	    }
! 	  else if (decl_context == FIELD)
! 	    {
! 	      if (pedantic && !flag_isoc99 && !in_system_header)
! 		pedwarn ("ISO C90 does not support flexible array members");
  
! 	      /* ISO C99 Flexible array members are effectively identical
! 		 to GCC's zero-length array extension.  */
! 	      itype = build_range_type (sizetype, size_zero_node, NULL_TREE);
! 	    }
  
! 	  /* If pedantic, complain about arrays of incomplete types.  */
  
! 	  if (pedantic && !COMPLETE_TYPE_P (type))
! 	    pedwarn ("array type has incomplete element type");
  
! 	  /* Build the array type itself, then merge any constancy or
! 	     volatility into the target type.  We must do it in this order
! 	     to ensure that the TYPE_MAIN_VARIANT field of the array type
! 	     is set correctly.  */
  
! 	  type = build_array_type (type, itype);
! 	  if (type_quals)
! 	    type = c_build_qualified_type (type, type_quals);
  
! 	  if (size_varies)
! 	    C_TYPE_VARIABLE_SIZE (type) = 1;
  
! 	  /* The GCC extension for zero-length arrays differs from
! 	     ISO flexible array members in that sizeof yields zero.  */
! 	  if (size && integer_zerop (size))
! 	    {
! 	      layout_type (type);
! 	      TYPE_SIZE (type) = bitsize_zero_node;
! 	      TYPE_SIZE_UNIT (type) = size_zero_node;
! 	    }
! 	  if (decl_context != PARM
! 	      && (array_ptr_quals != NULL_TREE || array_parm_static))
! 	    {
! 	      error ("static or type qualifiers in non-parameter array declarator");
! 	      array_ptr_quals = NULL_TREE;
! 	      array_parm_static = 0;
! 	    }
! 	}
!       else if (TREE_CODE (declarator) == CALL_EXPR)
! 	{
! 	  /* Say it's a definition only for the declarator closest to
! 	     the identifier, apart possibly from some attributes.  */
! 	  bool really_funcdef = false;
! 	  tree arg_types;
! 	  if (funcdef_flag)
! 	    {
! 	      tree t = TREE_OPERAND (declarator, 0);
! 	      while (TREE_CODE (t) == TREE_LIST)
! 		t = TREE_VALUE (t);
! 	      really_funcdef = (TREE_CODE (t) == IDENTIFIER_NODE);
! 	    }
  
! 	  /* Declaring a function type.
! 	     Make sure we have a valid type for the function to return.  */
! 	  if (type == error_mark_node)
! 	    continue;
  
! 	  size_varies = 0;
  
! 	  /* Warn about some types functions can't return.  */
  
! 	  if (TREE_CODE (type) == FUNCTION_TYPE)
! 	    {
! 	      error ("`%s' declared as function returning a function", name);
! 	      type = integer_type_node;
! 	    }
! 	  if (TREE_CODE (type) == ARRAY_TYPE)
  	    {
! 	      error ("`%s' declared as function returning an array", name);
! 	      type = integer_type_node;
  	    }
  
! 	  /* Construct the function type and go to the next
! 	     inner layer of declarator.  */
! 
! 	  arg_types = grokparms (TREE_OPERAND (declarator, 1),
! 				 really_funcdef);
! 	  /* Type qualifiers before the return type of the function
! 	     qualify the return type, not the function type.  */
! 	  if (type_quals)
! 	    {
! 	      /* Type qualifiers on a function return type are normally
! 		 permitted by the standard but have no effect, so give a
! 		 warning at -Wextra.  Qualifiers on a void return type have
! 		 meaning as a GNU extension, and are banned on function
! 		 definitions in ISO C.  FIXME: strictly we shouldn't
! 		 pedwarn for qualified void return types except on function
! 		 definitions, but not doing so could lead to the undesirable
! 		 state of a "volatile void" function return type not being
! 		 warned about, and a use of the function being compiled
! 		 with GNU semantics, with no diagnostics under -pedantic.  */
! 	      if (VOID_TYPE_P (type) && pedantic && !in_system_header)
! 		pedwarn ("ISO C forbids qualified void function return type");
! 	      else if (extra_warnings
! 		       && !(VOID_TYPE_P (type)
! 			    && type_quals == TYPE_QUAL_VOLATILE))
! 		warning ("type qualifiers ignored on function return type");
! 
  	      type = c_build_qualified_type (type, type_quals);
! 	    }
! 	  type_quals = TYPE_UNQUALIFIED;
! 
! 	  type = build_function_type (type, arg_types);
! 	  declarator = TREE_OPERAND (declarator, 0);
! 
! 	  /* Set the TYPE_CONTEXTs for each tagged type which is local to
! 	     the formal parameter list of this FUNCTION_TYPE to point to
! 	     the FUNCTION_TYPE node itself.  */
  
! 	  {
! 	    tree link;
  
! 	    for (link = last_function_parm_tags;
! 		 link;
! 		 link = TREE_CHAIN (link))
! 	      TYPE_CONTEXT (TREE_VALUE (link)) = type;
  	  }
  	}
-       else if (TREE_CODE (declarator) == INDIRECT_REF)
- 	{
- 	  /* Merge any constancy or volatility into the target type
- 	     for the pointer.  */
- 
- 	  if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
- 	      && type_quals)
- 	    pedwarn ("ISO C forbids qualified function types");
- 	  if (type_quals)
- 	    type = c_build_qualified_type (type, type_quals);
- 	  type_quals = TYPE_UNQUALIFIED;
- 	  size_varies = 0;
- 
- 	  type = build_pointer_type (type);
- 
- 	  /* Process a list of type modifier keywords
- 	     (such as const or volatile) that were given inside the `*'.  */
- 
- 	  if (TREE_TYPE (declarator))
- 	    {
- 	      tree typemodlist;
- 	      int erred = 0;
- 
- 	      constp = 0;
- 	      volatilep = 0;
- 	      restrictp = 0;
- 	      for (typemodlist = TREE_TYPE (declarator); typemodlist;
- 		   typemodlist = TREE_CHAIN (typemodlist))
- 		{
- 		  tree qualifier = TREE_VALUE (typemodlist);
- 
- 		  if (C_IS_RESERVED_WORD (qualifier))
- 		    {
- 		      if (C_RID_CODE (qualifier) == RID_CONST)
- 			constp++;
- 		      else if (C_RID_CODE (qualifier) == RID_VOLATILE)
- 			volatilep++;
- 		      else if (C_RID_CODE (qualifier) == RID_RESTRICT)
- 			restrictp++;
- 		      else
- 			erred++;
- 		    }
- 		  else
- 		    erred++;
- 		}
- 
- 	      if (erred)
- 		error ("invalid type modifier within pointer declarator");
- 	      if (pedantic && !flag_isoc99)
- 		{
- 		  if (constp > 1)
- 		    pedwarn ("duplicate `const'");
- 		  if (volatilep > 1)
- 		    pedwarn ("duplicate `volatile'");
- 		  if (restrictp > 1)
- 		    pedwarn ("duplicate `restrict'");
- 		}
- 
- 	      type_quals = ((constp ? TYPE_QUAL_CONST : 0)
- 			    | (restrictp ? TYPE_QUAL_RESTRICT : 0)
- 			    | (volatilep ? TYPE_QUAL_VOLATILE : 0));
- 	    }
- 
- 	  declarator = TREE_OPERAND (declarator, 0);
- 	}
-       else
- 	abort ();
- 
      }
  
!   /* Now TYPE has the actual type.  */
  
    /* Did array size calculations overflow?  */
  
--- 3924,4239 ----
  	 array or function or pointer, and DECLARATOR has had its
  	 outermost layer removed.  */
  
!       if (array_ptr_quals != TYPE_UNQUALIFIED
! 	  || array_ptr_attrs != NULL_TREE
! 	  || array_parm_static)
  	{
  	  /* Only the innermost declarator (making a parameter be of
  	     array type which is converted to pointer type)
  	     may have static or type qualifiers.  */
  	  error ("static or type qualifiers in non-parameter array declarator");
! 	  array_ptr_quals = TYPE_UNQUALIFIED;
! 	  array_ptr_attrs = NULL_TREE;
  	  array_parm_static = 0;
  	}
  
!       switch (declarator->kind)
  	{
! 	case cdk_attrs:
! 	  {
! 	    /* A declarator with embedded attributes.  */
! 	    tree attrs = declarator->u.attrs;
! 	    const struct c_declarator *inner_decl;
! 	    int attr_flags = 0;
! 	    declarator = declarator->declarator;
! 	    inner_decl = declarator;
! 	    while (inner_decl->kind == cdk_attrs)
! 	      inner_decl = inner_decl->declarator;
! 	    if (inner_decl->kind == cdk_id)
! 	      attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
! 	    else if (inner_decl->kind == cdk_function)
! 	      attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
! 	    else if (inner_decl->kind == cdk_array)
! 	      attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
! 	    returned_attrs = decl_attributes (&type,
! 					      chainon (returned_attrs, attrs),
! 					      attr_flags);
! 	    break;
! 	  }
! 	case cdk_array:
! 	  {
! 	    tree itype = NULL_TREE;
! 	    tree size = declarator->u.array.dimen;
! 	    /* The index is a signed object `sizetype' bits wide.  */
! 	    tree index_type = c_common_signed_type (sizetype);
  
! 	    array_ptr_quals = declarator->u.array.quals;
! 	    array_ptr_attrs = declarator->u.array.attrs;
! 	    array_parm_static = declarator->u.array.static_p;
! 	    
! 	    declarator = declarator->declarator;
  
! 	    /* Check for some types that there cannot be arrays of.  */
! 	    
! 	    if (VOID_TYPE_P (type))
! 	      {
! 		error ("declaration of %qs as array of voids", name);
! 		type = error_mark_node;
! 	      }
! 	    
! 	    if (TREE_CODE (type) == FUNCTION_TYPE)
! 	      {
! 		error ("declaration of %qs as array of functions", name);
! 		type = error_mark_node;
! 	      }
! 	    
! 	    if (pedantic && !in_system_header && flexible_array_type_p (type))
! 	      pedwarn ("invalid use of structure with flexible array member");
! 	    
! 	    if (size == error_mark_node)
  	      type = error_mark_node;
! 	    
! 	    if (type == error_mark_node)
! 	      continue;
  
! 	    /* If size was specified, set ITYPE to a range-type for
! 	       that size.  Otherwise, ITYPE remains null.  finish_decl
! 	       may figure it out from an initial value.  */
  
! 	    if (size)
! 	      {
! 		/* Strip NON_LVALUE_EXPRs since we aren't using as an
! 		   lvalue.  */
! 		STRIP_TYPE_NOPS (size);
! 		
! 		if (!INTEGRAL_TYPE_P (TREE_TYPE (size)))
! 		  {
! 		    error ("size of array %qs has non-integer type", name);
! 		    size = integer_one_node;
! 		  }
! 		
! 		if (pedantic && integer_zerop (size))
! 		  pedwarn ("ISO C forbids zero-size array %qs", name);
! 		
! 		if (TREE_CODE (size) == INTEGER_CST)
! 		  {
! 		    constant_expression_warning (size);
! 		    if (tree_int_cst_sgn (size) < 0)
! 		      {
! 			error ("size of array %qs is negative", name);
! 			size = integer_one_node;
! 		      }
! 		  }
! 		else
! 		  {
! 		    /* Make sure the array size remains visibly
! 		       nonconstant even if it is (eg) a const variable
! 		       with known value.  */
! 		    size_varies = 1;
! 		    
! 		    if (!flag_isoc99 && pedantic)
! 		      {
! 			if (TREE_CONSTANT (size))
! 			  pedwarn ("ISO C90 forbids array %qs whose size "
! 				   "can%'t be evaluated",
! 				   name);
! 			else
! 			  pedwarn ("ISO C90 forbids variable-size array %qs",
! 				   name);
! 		      }
! 		  }
  
! 		if (integer_zerop (size))
! 		  {
! 		    /* 	A zero-length array cannot be represented with
! 		        an unsigned index type, which is what we'll
! 		        get with build_index_type.  Create an
! 		        open-ended range instead.  */
! 		    itype = build_range_type (sizetype, size, NULL_TREE);
! 		  }
! 		else
! 		  {
! 		    /* Arrange for the SAVE_EXPR on the inside of the
! 		       MINUS_EXPR, which allows the -1 to get folded
! 		       with the +1 that happens when building TYPE_SIZE.  */
! 		    if (size_varies)
! 		      size = variable_size (size);
  
! 		    /* Compute the maximum valid index, that is, size
! 		       - 1.  Do the calculation in index_type, so that
! 		       if it is a variable the computations will be
! 		       done in the proper mode.  */
! 		    itype = fold (build2 (MINUS_EXPR, index_type,
! 					  convert (index_type, size),
! 					  convert (index_type,
! 						   size_one_node)));
  
! 		    /* If that overflowed, the array is too big.  ??? 
! 		       While a size of INT_MAX+1 technically shouldn't
! 		       cause an overflow (because we subtract 1), the
! 		       overflow is recorded during the conversion to
! 		       index_type, before the subtraction.  Handling
! 		       this case seems like an unnecessary
! 		       complication.  */
! 		    if (TREE_OVERFLOW (itype))
! 		      {
! 			error ("size of array %qs is too large", name);
! 			type = error_mark_node;
! 			continue;
! 		      }
! 		    
! 		    itype = build_index_type (itype);
! 		  }
! 	      }
! 	    else if (decl_context == FIELD)
! 	      {
! 		if (pedantic && !flag_isoc99 && !in_system_header)
! 		  pedwarn ("ISO C90 does not support flexible array members");
  
! 		/* ISO C99 Flexible array members are effectively
! 		   identical to GCC's zero-length array extension.  */
! 		itype = build_range_type (sizetype, size_zero_node, NULL_TREE);
! 	      }
  
! 	     /* Complain about arrays of incomplete types.  */
! 	    if (!COMPLETE_TYPE_P (type))
! 	      {
! 		error ("array type has incomplete element type");
! 	        type = error_mark_node;
! 	      }
! 	    else
! 	      type = build_array_type (type, itype);
  
! 	    if (size_varies)
! 	      C_TYPE_VARIABLE_SIZE (type) = 1;
  
! 	    /* The GCC extension for zero-length arrays differs from
! 	       ISO flexible array members in that sizeof yields
! 	       zero.  */
! 	    if (size && integer_zerop (size))
! 	      {
! 		TYPE_SIZE (type) = bitsize_zero_node;
! 		TYPE_SIZE_UNIT (type) = size_zero_node;
! 	      }
  
! 	    if (decl_context != PARM
! 		&& (array_ptr_quals != TYPE_UNQUALIFIED
! 		    || array_ptr_attrs != NULL_TREE
! 		    || array_parm_static))
! 	      {
! 		error ("static or type qualifiers in non-parameter array declarator");
! 		array_ptr_quals = TYPE_UNQUALIFIED;
! 		array_ptr_attrs = NULL_TREE;
! 		array_parm_static = 0;
! 	      }
! 	    break;
! 	  }
! 	case cdk_function:
! 	  {
! 	    /* Say it's a definition only for the declarator closest
! 	       to the identifier, apart possibly from some
! 	       attributes.  */
! 	    bool really_funcdef = false;
! 	    tree arg_types;
! 	    if (funcdef_flag)
! 	      {
! 		const struct c_declarator *t = declarator->declarator;
! 		while (t->kind == cdk_attrs)
! 		  t = t->declarator;
! 		really_funcdef = (t->kind == cdk_id);
! 	      }
  
! 	    /* Declaring a function type.  Make sure we have a valid
! 	       type for the function to return.  */
! 	    if (type == error_mark_node)
! 	      continue;
! 	    
! 	    size_varies = 0;
  
! 	    /* Warn about some types functions can't return.  */
! 	    if (TREE_CODE (type) == FUNCTION_TYPE)
! 	      {
! 		error ("%qs declared as function returning a function", name);
! 		type = integer_type_node;
! 	      }
! 	    if (TREE_CODE (type) == ARRAY_TYPE)
! 	      {
! 		error ("%qs declared as function returning an array", name);
! 		type = integer_type_node;
! 	      }
  
! 	    /* Construct the function type and go to the next
! 	       inner layer of declarator.  */
! 	    arg_info = declarator->u.arg_info;
! 	    arg_types = grokparms (arg_info, really_funcdef);
  
! 	    /* Type qualifiers before the return type of the function
! 	       qualify the return type, not the function type.  */
! 	    if (type_quals)
! 	      {
! 	        /* Type qualifiers on a function return type are
! 		   normally permitted by the standard but have no
! 		   effect, so give a warning at -Wreturn-type.
! 		   Qualifiers on a void return type are banned on
! 		   function definitions in ISO C; GCC used to used
! 		   them for noreturn functions.  */
! 		if (VOID_TYPE_P (type) && really_funcdef)
! 		  pedwarn ("function definition has qualified void return type");
! 		else if (warn_return_type)
! 		  warning ("type qualifiers ignored on function return type");
! 		
! 		type = c_build_qualified_type (type, type_quals);
! 	      }
! 	    type_quals = TYPE_UNQUALIFIED;
! 	    
! 	    type = build_function_type (type, arg_types);
! 	    declarator = declarator->declarator;
! 	    
! 	    /* Set the TYPE_CONTEXTs for each tagged type which is local to
! 	       the formal parameter list of this FUNCTION_TYPE to point to
! 	       the FUNCTION_TYPE node itself.  */
  	    {
! 	      tree link;
! 	      
! 	      for (link = arg_info->tags;
! 		   link;
! 		   link = TREE_CHAIN (link))
! 		TYPE_CONTEXT (TREE_VALUE (link)) = type;
  	    }
+ 	    break;
+ 	  }
+ 	case cdk_pointer:
+ 	  {
+ 	    /* Merge any constancy or volatility into the target type
+ 	       for the pointer.  */
  
! 	    if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
! 		&& type_quals)
! 	      pedwarn ("ISO C forbids qualified function types");
! 	    if (type_quals)
  	      type = c_build_qualified_type (type, type_quals);
! 	    size_varies = 0;
  
! 	    type = build_pointer_type (type);
! 	    
! 	    /* Process type qualifiers (such as const or volatile)
! 	       that were given inside the `*'.  */
! 	    type_quals = declarator->u.pointer_quals;
  
! 	    declarator = declarator->declarator;
! 	    break;
  	  }
+ 	default:
+ 	  gcc_unreachable ();
  	}
      }
  
!   /* Now TYPE has the actual type, apart from any qualifiers in
!      TYPE_QUALS.  */
! 
!   /* Check the type and width of a bit-field.  */
!   if (bitfield)
!     check_bitfield_type_and_width (&type, width, orig_name);
  
    /* Did array size calculations overflow?  */
  
*************** grokdeclarator (tree declarator, tree de
*** 4139,4145 ****
        && COMPLETE_TYPE_P (type)
        && TREE_OVERFLOW (TYPE_SIZE (type)))
      {
!       error ("size of array `%s' is too large", name);
        /* If we proceed with the array type as it is, we'll eventually
  	 crash in tree_low_cst().  */
        type = error_mark_node;
--- 4241,4247 ----
        && COMPLETE_TYPE_P (type)
        && TREE_OVERFLOW (TYPE_SIZE (type)))
      {
!       error ("size of array %qs is too large", name);
        /* If we proceed with the array type as it is, we'll eventually
  	 crash in tree_low_cst().  */
        type = error_mark_node;
*************** grokdeclarator (tree declarator, tree de
*** 4147,4167 ****
  
    /* If this is declaring a typedef name, return a TYPE_DECL.  */
  
!   if (specbits & (1 << (int) RID_TYPEDEF))
      {
        tree decl;
-       /* Note that the grammar rejects storage classes
- 	 in typenames, fields or parameters */
        if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
  	  && type_quals)
  	pedwarn ("ISO C forbids qualified function types");
        if (type_quals)
  	type = c_build_qualified_type (type, type_quals);
!       decl = build_decl (TYPE_DECL, declarator, type);
!       if ((specbits & (1 << (int) RID_SIGNED))
! 	  || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
  	C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
        decl_attributes (&decl, returned_attrs, 0);
        return decl;
      }
  
--- 4249,4268 ----
  
    /* If this is declaring a typedef name, return a TYPE_DECL.  */
  
!   if (storage_class == csc_typedef)
      {
        tree decl;
        if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
  	  && type_quals)
  	pedwarn ("ISO C forbids qualified function types");
        if (type_quals)
  	type = c_build_qualified_type (type, type_quals);
!       decl = build_decl (TYPE_DECL, declarator->u.id, type);
!       if (declspecs->explicit_signed_p)
  	C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
        decl_attributes (&decl, returned_attrs, 0);
+       if (declspecs->inline_p)
+ 	pedwarn ("%Jtypedef %qD declared %<inline%>", decl, decl);
        return decl;
      }
  
*************** grokdeclarator (tree declarator, tree de
*** 4185,4192 ****
  
    if (decl_context == TYPENAME)
      {
!       /* Note that the grammar rejects storage classes
! 	 in typenames, fields or parameters */
        if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
  	  && type_quals)
  	pedwarn ("ISO C forbids const or volatile function types");
--- 4286,4295 ----
  
    if (decl_context == TYPENAME)
      {
!       /* Note that the grammar rejects storage classes in typenames
! 	 and fields.  */
!       gcc_assert (storage_class == csc_none && !threadp
! 		  && !declspecs->inline_p);
        if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
  	  && type_quals)
  	pedwarn ("ISO C forbids const or volatile function types");
*************** grokdeclarator (tree declarator, tree de
*** 4203,4215 ****
       a better error message can be made later.  */
  
    if (VOID_TYPE_P (type) && decl_context != PARM
!       && ! ((decl_context != FIELD && TREE_CODE (type) != FUNCTION_TYPE)
! 	    && ((specbits & (1 << (int) RID_EXTERN))
! 		|| (current_scope == global_scope
! 		    && !(specbits
! 			 & ((1 << (int) RID_STATIC) | (1 << (int) RID_REGISTER)))))))
      {
!       error ("variable or field `%s' declared void", name);
        type = integer_type_node;
      }
  
--- 4306,4318 ----
       a better error message can be made later.  */
  
    if (VOID_TYPE_P (type) && decl_context != PARM
!       && !((decl_context != FIELD && TREE_CODE (type) != FUNCTION_TYPE)
! 	    && (storage_class == csc_extern
! 		|| (current_scope == file_scope
! 		    && !(storage_class == csc_static
! 			 || storage_class == csc_register)))))
      {
!       error ("variable or field %qs declared void", name);
        type = integer_type_node;
      }
  
*************** grokdeclarator (tree declarator, tree de
*** 4234,4278 ****
  	    if (type_quals)
  	      type = c_build_qualified_type (type, type_quals);
  	    type = build_pointer_type (type);
! 	    type_quals = TYPE_UNQUALIFIED;
! 	    if (array_ptr_quals)
! 	      {
! 		tree new_ptr_quals, new_ptr_attrs;
! 		int erred = 0;
! 		split_specs_attrs (array_ptr_quals, &new_ptr_quals, &new_ptr_attrs);
! 		/* We don't yet implement attributes in this context.  */
! 		if (new_ptr_attrs != NULL_TREE)
! 		  warning ("attributes in parameter array declarator ignored");
! 
! 		constp = 0;
! 		volatilep = 0;
! 		restrictp = 0;
! 		for (; new_ptr_quals; new_ptr_quals = TREE_CHAIN (new_ptr_quals))
! 		  {
! 		    tree qualifier = TREE_VALUE (new_ptr_quals);
! 
! 		    if (C_IS_RESERVED_WORD (qualifier))
! 		      {
! 			if (C_RID_CODE (qualifier) == RID_CONST)
! 			  constp++;
! 			else if (C_RID_CODE (qualifier) == RID_VOLATILE)
! 			  volatilep++;
! 			else if (C_RID_CODE (qualifier) == RID_RESTRICT)
! 			  restrictp++;
! 			else
! 			  erred++;
! 		      }
! 		    else
! 		      erred++;
! 		  }
  
! 		if (erred)
! 		  error ("invalid type modifier within array declarator");
  
- 		type_quals = ((constp ? TYPE_QUAL_CONST : 0)
- 			      | (restrictp ? TYPE_QUAL_RESTRICT : 0)
- 			      | (volatilep ? TYPE_QUAL_VOLATILE : 0));
- 	      }
  	    size_varies = 0;
  	  }
  	else if (TREE_CODE (type) == FUNCTION_TYPE)
--- 4337,4348 ----
  	    if (type_quals)
  	      type = c_build_qualified_type (type, type_quals);
  	    type = build_pointer_type (type);
! 	    type_quals = array_ptr_quals;
  
! 	    /* We don't yet implement attributes in this context.  */
! 	    if (array_ptr_attrs != NULL_TREE)
! 	      warning ("attributes in parameter array declarator ignored");
  
  	    size_varies = 0;
  	  }
  	else if (TREE_CODE (type) == FUNCTION_TYPE)
*************** grokdeclarator (tree declarator, tree de
*** 4289,4295 ****
  
  	type_as_written = type;
  
! 	decl = build_decl (PARM_DECL, declarator, type);
  	if (size_varies)
  	  C_DECL_VARIABLE_SIZE (decl) = 1;
  
--- 4359,4365 ----
  
  	type_as_written = type;
  
! 	decl = build_decl (PARM_DECL, declarator->u.id, type);
  	if (size_varies)
  	  C_DECL_VARIABLE_SIZE (decl) = 1;
  
*************** grokdeclarator (tree declarator, tree de
*** 4305,4332 ****
  
  	DECL_ARG_TYPE (decl) = promoted_type;
  	DECL_ARG_TYPE_AS_WRITTEN (decl) = type_as_written;
        }
      else if (decl_context == FIELD)
        {
  	/* Structure field.  It may not be a function.  */
  
  	if (TREE_CODE (type) == FUNCTION_TYPE)
  	  {
! 	    error ("field `%s' declared as a function", name);
  	    type = build_pointer_type (type);
  	  }
  	else if (TREE_CODE (type) != ERROR_MARK
  	         && !COMPLETE_OR_UNBOUND_ARRAY_TYPE_P (type))
  	  {
! 	    error ("field `%s' has incomplete type", name);
  	    type = error_mark_node;
  	  }
! 	/* Move type qualifiers down to element of an array.  */
! 	if (TREE_CODE (type) == ARRAY_TYPE && type_quals)
! 	  type = build_array_type (c_build_qualified_type (TREE_TYPE (type),
! 							   type_quals),
! 				   TYPE_DOMAIN (type));
! 	decl = build_decl (FIELD_DECL, declarator, type);
  	DECL_NONADDRESSABLE_P (decl) = bitfield;
  
  	if (size_varies)
--- 4375,4405 ----
  
  	DECL_ARG_TYPE (decl) = promoted_type;
  	DECL_ARG_TYPE_AS_WRITTEN (decl) = type_as_written;
+ 	if (declspecs->inline_p)
+ 	  pedwarn ("%Jparameter %qD declared %<inline%>", decl, decl);
        }
      else if (decl_context == FIELD)
        {
+ 	/* Note that the grammar rejects storage classes in typenames
+ 	   and fields.  */
+ 	gcc_assert (storage_class == csc_none && !threadp
+ 		    && !declspecs->inline_p);
+ 
  	/* Structure field.  It may not be a function.  */
  
  	if (TREE_CODE (type) == FUNCTION_TYPE)
  	  {
! 	    error ("field %qs declared as a function", name);
  	    type = build_pointer_type (type);
  	  }
  	else if (TREE_CODE (type) != ERROR_MARK
  	         && !COMPLETE_OR_UNBOUND_ARRAY_TYPE_P (type))
  	  {
! 	    error ("field %qs has incomplete type", name);
  	    type = error_mark_node;
  	  }
! 	type = c_build_qualified_type (type, type_quals);
! 	decl = build_decl (FIELD_DECL, declarator->u.id, type);
  	DECL_NONADDRESSABLE_P (decl) = bitfield;
  
  	if (size_varies)
*************** grokdeclarator (tree declarator, tree de
*** 4334,4393 ****
        }
      else if (TREE_CODE (type) == FUNCTION_TYPE)
        {
! 	/* Every function declaration is "external"
! 	   except for those which are inside a function body
! 	   in which `auto' is used.
! 	   That is a case not specified by ANSI C,
! 	   and we use it for forward declarations for nested functions.  */
! 	int extern_ref = (!(specbits & (1 << (int) RID_AUTO))
! 			  || current_scope == global_scope);
! 
! 	if (specbits & (1 << (int) RID_AUTO)
! 	    && (pedantic || current_scope == global_scope))
! 	  pedwarn ("invalid storage class for function `%s'", name);
! 	if (specbits & (1 << (int) RID_REGISTER))
! 	  error ("invalid storage class for function `%s'", name);
! 	if (specbits & (1 << (int) RID_THREAD))
! 	  error ("invalid storage class for function `%s'", name);
! 	/* Function declaration not at file scope.
! 	   Storage classes other than `extern' are not allowed
! 	   and `extern' makes no difference.  */
! 	if (current_scope != global_scope
! 	    && (specbits & ((1 << (int) RID_STATIC) | (1 << (int) RID_INLINE)))
! 	    && pedantic)
! 	  pedwarn ("invalid storage class for function `%s'", name);
  
! 	decl = build_decl (FUNCTION_DECL, declarator, type);
  	decl = build_decl_attribute_variant (decl, decl_attr);
  
! 	DECL_LANG_SPECIFIC (decl)
! 	  = ggc_alloc_cleared (sizeof (struct lang_decl));
  
! 	if (pedantic && type_quals && ! DECL_IN_SYSTEM_HEADER (decl))
  	  pedwarn ("ISO C forbids qualified function types");
  
! 	/* GNU C interprets a `volatile void' return type to indicate
  	   that the function does not return.  */
  	if ((type_quals & TYPE_QUAL_VOLATILE)
  	    && !VOID_TYPE_P (TREE_TYPE (TREE_TYPE (decl))))
! 	  warning ("`noreturn' function returns non-void value");
  
! 	if (extern_ref)
  	  DECL_EXTERNAL (decl) = 1;
  	/* Record absence of global scope for `static' or `auto'.  */
  	TREE_PUBLIC (decl)
! 	  = !(specbits & ((1 << (int) RID_STATIC) | (1 << (int) RID_AUTO)));
  
! 	if (defaulted_int)
  	  C_FUNCTION_IMPLICIT_INT (decl) = 1;
  
  	/* Record presence of `inline', if it is reasonable.  */
! 	if (MAIN_NAME_P (declarator))
  	  {
! 	    if (inlinep)
! 	      warning ("cannot inline function `main'");
  	  }
! 	else if (inlinep)
  	  {
  	    /* Record that the function is declared `inline'.  */
  	    DECL_DECLARED_INLINE_P (decl) = 1;
--- 4407,4481 ----
        }
      else if (TREE_CODE (type) == FUNCTION_TYPE)
        {
! 	if (storage_class == csc_register || threadp)
! 	  {
! 	    error ("invalid storage class for function %qs", name);
! 	   }
! 	else if (current_scope != file_scope)
! 	  {
! 	    /* Function declaration not at file scope.  Storage
! 	       classes other than `extern' are not allowed, C99
! 	       6.7.1p5, and `extern' makes no difference.  However,
! 	       GCC allows 'auto', perhaps with 'inline', to support
! 	       nested functions.  */
! 	    if (storage_class == csc_auto)
! 	      {
! 		if (pedantic)
! 		  pedwarn ("invalid storage class for function %qs", name);
! 	      }
! 	    else if (storage_class == csc_static)
! 	      {
! 	        error ("invalid storage class for function %qs", name);
! 	        if (funcdef_flag)
! 		  storage_class = declspecs->storage_class = csc_none;
! 		else
! 		  return 0;
! 	      }
! 	  }
  
! 	decl = build_decl (FUNCTION_DECL, declarator->u.id, type);
  	decl = build_decl_attribute_variant (decl, decl_attr);
  
! 	DECL_LANG_SPECIFIC (decl) = GGC_CNEW (struct lang_decl);
  
! 	if (pedantic && type_quals && !DECL_IN_SYSTEM_HEADER (decl))
  	  pedwarn ("ISO C forbids qualified function types");
  
! 	/* GNU C interprets a volatile-qualified function type to indicate
  	   that the function does not return.  */
  	if ((type_quals & TYPE_QUAL_VOLATILE)
  	    && !VOID_TYPE_P (TREE_TYPE (TREE_TYPE (decl))))
! 	  warning ("%<noreturn%> function returns non-void value");
  
! 	/* Every function declaration is an external reference
! 	   (DECL_EXTERNAL) except for those which are not at file
! 	   scope and are explicitly declared "auto".  This is
! 	   forbidden by standard C (C99 6.7.1p5) and is interpreted by
! 	   GCC to signify a forward declaration of a nested function.  */
! 	if (storage_class == csc_auto && current_scope != file_scope)
! 	  DECL_EXTERNAL (decl) = 0;
! 	else
  	  DECL_EXTERNAL (decl) = 1;
+ 
  	/* Record absence of global scope for `static' or `auto'.  */
  	TREE_PUBLIC (decl)
! 	  = !(storage_class == csc_static || storage_class == csc_auto);
  
! 	/* For a function definition, record the argument information
! 	   block where store_parm_decls will look for it.  */
! 	if (funcdef_flag)
! 	  current_function_arg_info = arg_info;
! 
! 	if (declspecs->default_int_p)
  	  C_FUNCTION_IMPLICIT_INT (decl) = 1;
  
  	/* Record presence of `inline', if it is reasonable.  */
! 	if (flag_hosted && MAIN_NAME_P (declarator->u.id))
  	  {
! 	    if (declspecs->inline_p)
! 	      pedwarn ("cannot inline function %<main%>");
  	  }
! 	else if (declspecs->inline_p)
  	  {
  	    /* Record that the function is declared `inline'.  */
  	    DECL_DECLARED_INLINE_P (decl) = 1;
*************** grokdeclarator (tree declarator, tree de
*** 4399,4405 ****
  	    if (initialized)
  	      {
  		DECL_INLINE (decl) = 1;
! 		if (specbits & (1 << (int) RID_EXTERN))
  		  current_extern_inline = 1;
  	      }
  	  }
--- 4487,4493 ----
  	    if (initialized)
  	      {
  		DECL_INLINE (decl) = 1;
! 		if (storage_class == csc_extern)
  		  current_extern_inline = 1;
  	      }
  	  }
*************** grokdeclarator (tree declarator, tree de
*** 4413,4475 ****
        {
  	/* It's a variable.  */
  	/* An uninitialized decl with `extern' is a reference.  */
! 	int extern_ref = !initialized && (specbits & (1 << (int) RID_EXTERN));
  
! 	/* Move type qualifiers down to element of an array.  */
! 	if (TREE_CODE (type) == ARRAY_TYPE && type_quals)
! 	  {
! 	    int saved_align = TYPE_ALIGN(type);
! 	    type = build_array_type (c_build_qualified_type (TREE_TYPE (type),
! 							     type_quals),
! 				     TYPE_DOMAIN (type));
! 	    TYPE_ALIGN (type) = saved_align;
! 	  }
! 	else if (type_quals)
! 	  type = c_build_qualified_type (type, type_quals);
  
! 	/* It is invalid to create an `extern' declaration for a
  	   variable if there is a global declaration that is
! 	   `static' and the global declaration is not visible.  */
! 	if (extern_ref && current_scope != global_scope)
  	  {
! 	    tree global_decl;
  
- 	    global_decl = identifier_global_value (declarator);
  	    if (global_decl
  		&& TREE_CODE (global_decl) == VAR_DECL
- 		&& lookup_name (declarator) != global_decl
  		&& !TREE_PUBLIC (global_decl))
! 	      error ("variable previously declared `static' redeclared "
! 		     "`extern'");
  	  }
  
! 	decl = build_decl (VAR_DECL, declarator, type);
  	if (size_varies)
  	  C_DECL_VARIABLE_SIZE (decl) = 1;
  
! 	if (inlinep)
! 	  pedwarn ("%Jvariable '%D' declared `inline'", decl, decl);
  
! 	DECL_EXTERNAL (decl) = extern_ref;
  
  	/* At file scope, the presence of a `static' or `register' storage
  	   class specifier, or the absence of all storage class specifiers
  	   makes this declaration a definition (perhaps tentative).  Also,
  	   the absence of both `static' and `register' makes it public.  */
! 	if (current_scope == global_scope)
  	  {
! 	    TREE_PUBLIC (decl) = !(specbits & ((1 << (int) RID_STATIC)
! 					       | (1 << (int) RID_REGISTER)));
  	    TREE_STATIC (decl) = !extern_ref;
  	  }
  	/* Not at file scope, only `static' makes a static definition.  */
  	else
  	  {
! 	    TREE_STATIC (decl) = (specbits & (1 << (int) RID_STATIC)) != 0;
  	    TREE_PUBLIC (decl) = extern_ref;
  	  }
  
! 	if (specbits & 1 << (int) RID_THREAD)
  	  {
  	    if (targetm.have_tls)
  	      DECL_THREAD_LOCAL (decl) = 1;
--- 4501,4559 ----
        {
  	/* It's a variable.  */
  	/* An uninitialized decl with `extern' is a reference.  */
! 	int extern_ref = !initialized && storage_class == csc_extern;
  
! 	type = c_build_qualified_type (type, type_quals);
  
! 	/* C99 6.2.2p7: It is invalid (compile-time undefined
! 	   behavior) to create an 'extern' declaration for a
  	   variable if there is a global declaration that is
! 	   'static' and the global declaration is not visible.
! 	   (If the static declaration _is_ currently visible,
! 	   the 'extern' declaration is taken to refer to that decl.) */
! 	if (extern_ref && current_scope != file_scope)
  	  {
! 	    tree global_decl  = identifier_global_value (declarator->u.id);
! 	    tree visible_decl = lookup_name (declarator->u.id);
  
  	    if (global_decl
+ 		&& global_decl != visible_decl
  		&& TREE_CODE (global_decl) == VAR_DECL
  		&& !TREE_PUBLIC (global_decl))
! 	      error ("variable previously declared %<static%> redeclared "
! 		     "%<extern%>");
  	  }
  
! 	decl = build_decl (VAR_DECL, declarator->u.id, type);
  	if (size_varies)
  	  C_DECL_VARIABLE_SIZE (decl) = 1;
  
! 	if (declspecs->inline_p)
! 	  pedwarn ("%Jvariable %qD declared %<inline%>", decl, decl);
  
! 	/* At file scope, an initialized extern declaration may follow
! 	   a static declaration.  In that case, DECL_EXTERNAL will be
! 	   reset later in start_decl.  */
! 	DECL_EXTERNAL (decl) = (storage_class == csc_extern);
  
  	/* At file scope, the presence of a `static' or `register' storage
  	   class specifier, or the absence of all storage class specifiers
  	   makes this declaration a definition (perhaps tentative).  Also,
  	   the absence of both `static' and `register' makes it public.  */
! 	if (current_scope == file_scope)
  	  {
! 	    TREE_PUBLIC (decl) = !(storage_class == csc_static
! 				   || storage_class == csc_register);
  	    TREE_STATIC (decl) = !extern_ref;
  	  }
  	/* Not at file scope, only `static' makes a static definition.  */
  	else
  	  {
! 	    TREE_STATIC (decl) = (storage_class == csc_static);
  	    TREE_PUBLIC (decl) = extern_ref;
  	  }
  
! 	if (threadp)
  	  {
  	    if (targetm.have_tls)
  	      DECL_THREAD_LOCAL (decl) = 1;
*************** grokdeclarator (tree declarator, tree de
*** 4483,4490 ****
      /* Record `register' declaration for warnings on &
         and in case doing stupid register allocation.  */
  
!     if (specbits & (1 << (int) RID_REGISTER))
!       DECL_REGISTER (decl) = 1;
  
      /* Record constancy and volatility.  */
      c_apply_type_quals_to_decl (type_quals, decl);
--- 4567,4577 ----
      /* Record `register' declaration for warnings on &
         and in case doing stupid register allocation.  */
  
!     if (storage_class == csc_register)
!       {
! 	C_DECL_REGISTER (decl) = 1;
! 	DECL_REGISTER (decl) = 1;
!       }
  
      /* Record constancy and volatility.  */
      c_apply_type_quals_to_decl (type_quals, decl);
*************** grokdeclarator (tree declarator, tree de
*** 4493,4506 ****
         Otherwise, the fact that those components are volatile
         will be ignored, and would even crash the compiler.  */
      if (C_TYPE_FIELDS_VOLATILE (TREE_TYPE (decl)))
!       c_mark_addressable (decl);
  
- #ifdef ENABLE_CHECKING
    /* This is the earliest point at which we might know the assembler
       name of a variable.  Thus, if it's known before this, die horribly.  */
!   if (DECL_ASSEMBLER_NAME_SET_P (decl))
!     abort ();
! #endif
  
      decl_attributes (&decl, returned_attrs, 0);
  
--- 4580,4599 ----
         Otherwise, the fact that those components are volatile
         will be ignored, and would even crash the compiler.  */
      if (C_TYPE_FIELDS_VOLATILE (TREE_TYPE (decl)))
!       {
! 	/* It is not an error for a structure with volatile fields to
! 	   be declared register, but reset DECL_REGISTER since it
! 	   cannot actually go in a register.  */
! 	int was_reg = C_DECL_REGISTER (decl);
! 	C_DECL_REGISTER (decl) = 0;
! 	DECL_REGISTER (decl) = 0;
! 	c_mark_addressable (decl);
! 	C_DECL_REGISTER (decl) = was_reg;
!       }
  
    /* This is the earliest point at which we might know the assembler
       name of a variable.  Thus, if it's known before this, die horribly.  */
!     gcc_assert (!DECL_ASSEMBLER_NAME_SET_P (decl));
  
      decl_attributes (&decl, returned_attrs, 0);
  
*************** grokdeclarator (tree declarator, tree de
*** 4516,4726 ****
     of calls is different.  The last call to `grokparms' is always the one
     that contains the formal parameter names of a function definition.
  
-    Store in `last_function_parms' a chain of the decls of parms.
-    Also store in `last_function_parm_tags' a chain of the struct, union,
-    and enum tags declared among the parms.
- 
     Return a list of arg types to use in the FUNCTION_TYPE for this function.
  
!    FUNCDEF_FLAG is nonzero for a function definition, 0 for
     a mere declaration.  A nonempty identifier-list gets an error message
!    when FUNCDEF_FLAG is zero.  */
  
  static tree
! grokparms (tree parms_info, int funcdef_flag)
  {
!   tree first_parm = TREE_CHAIN (parms_info);
! 
!   last_function_parms = TREE_PURPOSE (parms_info);
!   last_function_parm_tags = TREE_VALUE (parms_info);
!   last_function_parm_others = TREE_TYPE (parms_info);
  
!   if (warn_strict_prototypes && first_parm == 0 && !funcdef_flag
        && !in_system_header)
!     warning ("function declaration isn't a prototype");
  
!   if (first_parm != 0
!       && TREE_CODE (TREE_VALUE (first_parm)) == IDENTIFIER_NODE)
      {
!       if (! funcdef_flag)
  	pedwarn ("parameter names (without types) in function declaration");
  
!       last_function_parms = first_parm;
        return 0;
      }
    else
      {
!       tree parm;
!       tree typelt;
!       /* If the arg types are incomplete in a declaration,
! 	 they must include undefined tags.
! 	 These tags can never be defined in the scope of the declaration,
! 	 so the types can never be completed,
! 	 and no call can be compiled successfully.  */
  
!       for (parm = last_function_parms, typelt = first_parm;
  	   parm;
! 	   parm = TREE_CHAIN (parm))
! 	/* Skip over any enumeration constants declared here.  */
! 	if (TREE_CODE (parm) == PARM_DECL)
! 	  {
! 	    /* Barf if the parameter itself has an incomplete type.  */
! 	    tree type = TREE_VALUE (typelt);
! 	    if (type == error_mark_node)
! 	      continue;
! 	    if (!COMPLETE_TYPE_P (type))
! 	      {
! 		if (funcdef_flag && DECL_NAME (parm) != 0)
! 		  error ("parameter `%s' has incomplete type",
! 			 IDENTIFIER_POINTER (DECL_NAME (parm)));
! 		else
! 		  warning ("parameter has incomplete type");
! 		if (funcdef_flag)
! 		  {
! 		    TREE_VALUE (typelt) = error_mark_node;
! 		    TREE_TYPE (parm) = error_mark_node;
! 		  }
! 	      }
! 	    typelt = TREE_CHAIN (typelt);
! 	  }
  
!       return first_parm;
      }
  }
  
! /* Return a tree_list node with info on a parameter list just parsed.
!    The TREE_PURPOSE is a list of decls of those parms.
!    The TREE_VALUE is a list of structure, union and enum tags defined.
!    The TREE_CHAIN is a list of argument types to go in the FUNCTION_TYPE.
!    The TREE_TYPE is a list of non-parameter decls which appeared with the
!    parameters.
!    This tree_list node is later fed to `grokparms'.
  
!    VOID_AT_END nonzero means append `void' to the end of the type-list.
!    Zero means the parmlist ended with an ellipsis so don't append `void'.  */
  
! tree
! get_parm_info (int void_at_end)
  {
!   tree decl, type, list;
!   tree types = 0;
!   tree *last_type = &types;
!   tree tags = current_scope->tags;
!   tree parms = current_scope->parms;
!   tree others = current_scope->names;
    static bool explained_incomplete_types = false;
    bool gave_void_only_once_err = false;
  
!   /* Just "void" (and no ellipsis) is special.  There are really no parms.
!      But if the "void" is qualified (by "const" or "volatile"), or has a
!      storage class specifier ("register"), then the behavior is undefined;
!      issue an error.  Typedefs for "void" are OK (see DR#157).  */
!   if (void_at_end && parms != 0
!       && TREE_CHAIN (parms) == 0
!       && VOID_TYPE_P (TREE_TYPE (parms))
!       && !DECL_NAME (parms))
!     {
!       if (TREE_THIS_VOLATILE (parms)
! 	  || TREE_READONLY (parms)
! 	  || DECL_REGISTER (parms))
! 	error ("\"void\" as only parameter may not be qualified");
  
!       return tree_cons (0, 0, tree_cons (0, void_type_node, 0));
!     }
  
!   /* Sanity check all of the parameter declarations.  */
!   for (decl = parms; decl; decl = TREE_CHAIN (decl))
!     {
!       if (TREE_CODE (decl) != PARM_DECL)
! 	abort ();
!       if (TREE_ASM_WRITTEN (decl))
! 	abort ();
  
!       /* Since there is a prototype, args are passed in their
! 	 declared types.  The back end may override this.  */
!       type = TREE_TYPE (decl);
!       DECL_ARG_TYPE (decl) = type;
  
!       /* Check for (..., void, ...) and issue an error.  */
!       if (VOID_TYPE_P (type) && !DECL_NAME (decl) && !gave_void_only_once_err)
! 	{
! 	  error ("\"void\" must be the only parameter");
! 	  gave_void_only_once_err = true;
! 	}
  
!       type = build_tree_list (0, type);
!       *last_type = type;
!       last_type = &TREE_CHAIN (type);
      }
  
!   /* Check the list of non-parameter decls for any forward parm decls
!      that never got real decls.  */
!   for (decl = others; decl; decl = TREE_CHAIN (decl))
!     if (TREE_CODE (decl) == PARM_DECL)
!       {
! 	if (!TREE_ASM_WRITTEN (decl))
! 	  abort ();
! 
! 	  error ("%Jparameter \"%D\" has just a forward declaration",
! 		 decl, decl);
!       }
  
!   /* Warn about any struct, union or enum tags defined within this
!      list.  The scope of such types is limited to this declaration,
!      which is rarely if ever desirable (it's impossible to call such
!      a function with type-correct arguments).  */
!   for (decl = tags; decl; decl = TREE_CHAIN (decl))
      {
!       enum tree_code code = TREE_CODE (TREE_VALUE (decl));
        const char *keyword;
-       /* An anonymous union parm type is meaningful as a GNU extension.
- 	 So don't warn for that.  */
-       if (code == UNION_TYPE && TREE_PURPOSE (decl) == 0 && !pedantic)
- 	continue;
  
!       /* The keyword should not be translated.  */
!       switch (code)
  	{
! 	case RECORD_TYPE:   keyword = "struct"; break;
! 	case UNION_TYPE:    keyword = "union";  break;
! 	case ENUMERAL_TYPE: keyword = "enum";   break;
! 	default: abort ();
! 	}
  
!       if (TREE_PURPOSE (decl))
! 	/* The first %s will be one of 'struct', 'union', or 'enum'.  */
! 	warning ("\"%s %s\" declared inside parameter list",
! 		 keyword, IDENTIFIER_POINTER (TREE_PURPOSE (decl)));
!       else
! 	/* The %s will be one of 'struct', 'union', or 'enum'.  */
! 	warning ("anonymous %s declared inside parameter list", keyword);
  
!       if (! explained_incomplete_types)
! 	{
! 	  warning ("its scope is only this definition or declaration,"
! 		   " which is probably not what you want");
! 	  explained_incomplete_types = true;
! 	}
!     }
  
  
!   if (void_at_end)
!     {
!       type = build_tree_list (0, void_type_node);
!       *last_type = type;
      }
  
!   list = tree_cons (parms, tags, types);
!   TREE_TYPE (list) = others;
!   return list;
  }
  
  /* Get the struct, enum or union (CODE says which) with tag NAME.
!    Define the tag as a forward-reference if it is not defined.  */
  
! tree
! xref_tag (enum tree_code code, tree name)
  {
    /* If a cross reference is requested, look up the type
       already defined for this tag and return it.  */
  
--- 4609,4884 ----
     of calls is different.  The last call to `grokparms' is always the one
     that contains the formal parameter names of a function definition.
  
     Return a list of arg types to use in the FUNCTION_TYPE for this function.
  
!    FUNCDEF_FLAG is true for a function definition, false for
     a mere declaration.  A nonempty identifier-list gets an error message
!    when FUNCDEF_FLAG is false.  */
  
  static tree
! grokparms (struct c_arg_info *arg_info, bool funcdef_flag)
  {
!   tree arg_types = arg_info->types;
  
!   if (warn_strict_prototypes && arg_types == 0 && !funcdef_flag
        && !in_system_header)
!     warning ("function declaration isn%'t a prototype");
  
!   if (arg_types == error_mark_node)
!     return 0;  /* don't set TYPE_ARG_TYPES in this case */
! 
!   else if (arg_types && TREE_CODE (TREE_VALUE (arg_types)) == IDENTIFIER_NODE)
      {
!       if (!funcdef_flag)
  	pedwarn ("parameter names (without types) in function declaration");
  
!       arg_info->parms = arg_info->types;
!       arg_info->types = 0;
        return 0;
      }
    else
      {
!       tree parm, type, typelt;
!       unsigned int parmno;
  
!       /* If there is a parameter of incomplete type in a definition,
! 	 this is an error.  In a declaration this is valid, and a
! 	 struct or union type may be completed later, before any calls
! 	 or definition of the function.  In the case where the tag was
! 	 first declared within the parameter list, a warning has
! 	 already been given.  If a parameter has void type, then
! 	 however the function cannot be defined or called, so
! 	 warn.  */
! 
!       for (parm = arg_info->parms, typelt = arg_types, parmno = 1;
  	   parm;
! 	   parm = TREE_CHAIN (parm), typelt = TREE_CHAIN (typelt), parmno++)
! 	{
! 	  type = TREE_VALUE (typelt);
! 	  if (type == error_mark_node)
! 	    continue;
  
! 	  if (!COMPLETE_TYPE_P (type))
! 	    {
! 	      if (funcdef_flag)
! 		{
! 		  if (DECL_NAME (parm))
! 		    error ("%Jparameter %u (%qD) has incomplete type",
! 			   parm, parmno, parm);
! 		  else
! 		    error ("%Jparameter %u has incomplete type",
! 			   parm, parmno);
! 
! 		  TREE_VALUE (typelt) = error_mark_node;
! 		  TREE_TYPE (parm) = error_mark_node;
! 		}
! 	      else if (VOID_TYPE_P (type))
! 		{
! 		  if (DECL_NAME (parm))
! 		    warning ("%Jparameter %u (%qD) has void type",
! 			     parm, parmno, parm);
! 		  else
! 		    warning ("%Jparameter %u has void type",
! 			     parm, parmno);
! 		}
! 	    }
! 	}
!       return arg_types;
      }
  }
  
! /* Take apart the current scope and return a c_arg_info structure with
!    info on a parameter list just parsed.
  
!    This structure is later fed to 'grokparms' and 'store_parm_decls'.
  
!    ELLIPSIS being true means the argument list ended in '...' so don't
!    append a sentinel (void_list_node) to the end of the type-list.  */
! 
! struct c_arg_info *
! get_parm_info (bool ellipsis)
  {
!   struct c_binding *b = current_scope->bindings;
!   struct c_arg_info *arg_info = XOBNEW (&parser_obstack,
! 					struct c_arg_info);
!   tree parms    = 0;
!   tree tags     = 0;
!   tree types    = 0;
!   tree others   = 0;
! 
    static bool explained_incomplete_types = false;
    bool gave_void_only_once_err = false;
  
!   arg_info->parms = 0;
!   arg_info->tags = 0;
!   arg_info->types = 0;
!   arg_info->others = 0;
  
!   /* The bindings in this scope must not get put into a block.
!      We will take care of deleting the binding nodes.  */
!   current_scope->bindings = 0;
  
!   /* This function is only called if there was *something* on the
!      parameter list.  */
!   gcc_assert (b);
  
!   /* A parameter list consisting solely of 'void' indicates that the
!      function takes no arguments.  But if the 'void' is qualified
!      (by 'const' or 'volatile'), or has a storage class specifier
!      ('register'), then the behavior is undefined; issue an error.
!      Typedefs for 'void' are OK (see DR#157).  */
!   if (b->prev == 0		            /* one binding */
!       && TREE_CODE (b->decl) == PARM_DECL   /* which is a parameter */
!       && !DECL_NAME (b->decl)               /* anonymous */
!       && VOID_TYPE_P (TREE_TYPE (b->decl))) /* of void type */
!     {
!       if (TREE_THIS_VOLATILE (b->decl)
! 	  || TREE_READONLY (b->decl)
! 	  || C_DECL_REGISTER (b->decl))
! 	error ("%<void%> as only parameter may not be qualified");
  
!       /* There cannot be an ellipsis.  */
!       if (ellipsis)
! 	error ("%<void%> must be the only parameter");
  
!       arg_info->types = void_list_node;
!       return arg_info;
      }
  
!   if (!ellipsis)
!     types = void_list_node;
  
!   /* Break up the bindings list into parms, tags, types, and others;
!      apply sanity checks; purge the name-to-decl bindings.  */
!   while (b)
      {
!       tree decl = b->decl;
!       tree type = TREE_TYPE (decl);
        const char *keyword;
  
!       switch (TREE_CODE (decl))
  	{
! 	case PARM_DECL:
! 	  if (b->id)
! 	    {
! 	      gcc_assert (I_SYMBOL_BINDING (b->id) == b);
! 	      I_SYMBOL_BINDING (b->id) = b->shadowed;
! 	    }
  
! 	  /* Check for forward decls that never got their actual decl.  */
! 	  if (TREE_ASM_WRITTEN (decl))
! 	    error ("%Jparameter %qD has just a forward declaration",
! 		   decl, decl);
! 	  /* Check for (..., void, ...) and issue an error.  */
! 	  else if (VOID_TYPE_P (type) && !DECL_NAME (decl))
! 	    {
! 	      if (!gave_void_only_once_err)
! 		{
! 		  error ("%<void%> must be the only parameter");
! 		  gave_void_only_once_err = true;
! 		}
! 	    }
! 	  else
! 	    {
! 	      /* Valid parameter, add it to the list.  */
! 	      TREE_CHAIN (decl) = parms;
! 	      parms = decl;
  
! 	      /* Since there is a prototype, args are passed in their
! 		 declared types.  The back end may override this later.  */
! 	      DECL_ARG_TYPE (decl) = type;
! 	      types = tree_cons (0, type, types);
! 	    }
! 	  break;
  
+ 	case ENUMERAL_TYPE: keyword = "enum"; goto tag;
+ 	case UNION_TYPE:    keyword = "union"; goto tag;
+ 	case RECORD_TYPE:   keyword = "struct"; goto tag;
+ 	tag:
+ 	  /* Types may not have tag-names, in which case the type
+ 	     appears in the bindings list with b->id NULL.  */
+ 	  if (b->id)
+ 	    {
+ 	      gcc_assert (I_TAG_BINDING (b->id) == b);
+ 	      I_TAG_BINDING (b->id) = b->shadowed;
+ 	    }
  
! 	  /* Warn about any struct, union or enum tags defined in a
! 	     parameter list.  The scope of such types is limited to
! 	     the parameter list, which is rarely if ever desirable
! 	     (it's impossible to call such a function with type-
! 	     correct arguments).  An anonymous union parm type is
! 	     meaningful as a GNU extension, so don't warn for that.  */
! 	  if (TREE_CODE (decl) != UNION_TYPE || b->id != 0)
! 	    {
! 	      if (b->id)
! 		/* The %s will be one of 'struct', 'union', or 'enum'.  */
! 		warning ("%<%s %E%> declared inside parameter list",
! 			 keyword, b->id);
! 	      else
! 		/* The %s will be one of 'struct', 'union', or 'enum'.  */
! 		warning ("anonymous %s declared inside parameter list",
! 			 keyword);
! 
! 	      if (!explained_incomplete_types)
! 		{
! 		  warning ("its scope is only this definition or declaration,"
! 			   " which is probably not what you want");
! 		  explained_incomplete_types = true;
! 		}
! 	    }
! 
! 	  tags = tree_cons (b->id, decl, tags);
! 	  break;
! 
! 	case CONST_DECL:
! 	case TYPE_DECL:
! 	case FUNCTION_DECL:
! 	  /* CONST_DECLs appear here when we have an embedded enum,
! 	     and TYPE_DECLs appear here when we have an embedded struct
! 	     or union.  No warnings for this - we already warned about the
! 	     type itself.  FUNCTION_DECLs appear when there is an implicit
! 	     function declaration in the parameter list.  */
! 
! 	  TREE_CHAIN (decl) = others;
! 	  others = decl;
! 	  /* fall through */
! 
! 	case ERROR_MARK:
! 	  /* error_mark_node appears here when we have an undeclared
! 	     variable.  Just throw it away.  */
! 	  if (b->id)
! 	    {
! 	      gcc_assert (I_SYMBOL_BINDING (b->id) == b);
! 	      I_SYMBOL_BINDING (b->id) = b->shadowed;
! 	    }
! 	  break;
! 
! 	  /* Other things that might be encountered.  */
! 	case LABEL_DECL:
! 	case VAR_DECL:
! 	default:
! 	  gcc_unreachable ();
! 	}
! 
!       b = free_binding_and_advance (b);
      }
  
!   arg_info->parms = parms;
!   arg_info->tags = tags;
!   arg_info->types = types;
!   arg_info->others = others;
!   return arg_info;
  }
  
  /* Get the struct, enum or union (CODE says which) with tag NAME.
!    Define the tag as a forward-reference if it is not defined.
!    Return a c_typespec structure for the type specifier.  */
  
! struct c_typespec
! parser_xref_tag (enum tree_code code, tree name)
  {
+   struct c_typespec ret;
    /* If a cross reference is requested, look up the type
       already defined for this tag and return it.  */
  
*************** xref_tag (enum tree_code code, tree name
*** 4736,4743 ****
       this would not work properly if we return the reference found.
       (For example, with "struct foo" in an outer scope, "union foo;"
       must shadow that tag with a new one of union type.)  */
    if (ref && TREE_CODE (ref) == code)
!     return ref;
  
    /* If no such tag is yet defined, create a forward-reference node
       and record it as the "definition".
--- 4894,4905 ----
       this would not work properly if we return the reference found.
       (For example, with "struct foo" in an outer scope, "union foo;"
       must shadow that tag with a new one of union type.)  */
+   ret.kind = (ref ? ctsk_tagref : ctsk_tagfirstref);
    if (ref && TREE_CODE (ref) == code)
!     {
!       ret.spec = ref;
!       return ret;
!     }
  
    /* If no such tag is yet defined, create a forward-reference node
       and record it as the "definition".
*************** xref_tag (enum tree_code code, tree name
*** 4752,4758 ****
        TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
        TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
        TYPE_USER_ALIGN (ref) = 0;
!       TREE_UNSIGNED (ref) = 1;
        TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
        TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
        TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
--- 4914,4920 ----
        TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
        TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
        TYPE_USER_ALIGN (ref) = 0;
!       TYPE_UNSIGNED (ref) = 1;
        TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
        TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
        TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
*************** xref_tag (enum tree_code code, tree name
*** 4760,4766 ****
  
    pushtag (name, ref);
  
!   return ref;
  }
  
  /* Make sure that the tag NAME is defined *in the current scope*
--- 4922,4939 ----
  
    pushtag (name, ref);
  
!   ret.spec = ref;
!   return ret;
! }
! 
! /* Get the struct, enum or union (CODE says which) with tag NAME.
!    Define the tag as a forward-reference if it is not defined.
!    Return a tree for the type.  */
! 
! tree
! xref_tag (enum tree_code code, tree name)
! {
!   return parser_xref_tag (code, name).spec;
  }
  
  /* Make sure that the tag NAME is defined *in the current scope*
*************** start_struct (enum tree_code code, tree 
*** 4779,4790 ****
      ref = lookup_tag (code, name, 1);
    if (ref && TREE_CODE (ref) == code)
      {
!       if (TYPE_FIELDS (ref))
          {
  	  if (code == UNION_TYPE)
! 	    error ("redefinition of `union %s'", IDENTIFIER_POINTER (name));
            else
! 	    error ("redefinition of `struct %s'", IDENTIFIER_POINTER (name));
  	}
      }
    else
--- 4952,4972 ----
      ref = lookup_tag (code, name, 1);
    if (ref && TREE_CODE (ref) == code)
      {
!       if (TYPE_SIZE (ref))
          {
  	  if (code == UNION_TYPE)
! 	    error ("redefinition of %<union %s%>", IDENTIFIER_POINTER (name));
            else
! 	    error ("redefinition of %<struct %s%>", IDENTIFIER_POINTER (name));
! 	}
!       else if (C_TYPE_BEING_DEFINED (ref))
! 	{
! 	  if (code == UNION_TYPE)
! 	    error ("nested redefinition of %<union %s%>",
! 		   IDENTIFIER_POINTER (name));
!           else
! 	    error ("nested redefinition of %<struct %s%>",
! 		   IDENTIFIER_POINTER (name));
  	}
      }
    else
*************** start_struct (enum tree_code code, tree 
*** 4800,4806 ****
    return ref;
  }
  
! /* Process the specs, declarator (NULL if omitted) and width (NULL if omitted)
     of a structure component, returning a FIELD_DECL node.
     WIDTH is non-NULL for bit-fields only, and is an INTEGER_CST node.
  
--- 4982,4988 ----
    return ref;
  }
  
! /* Process the specs, declarator and width (NULL if omitted)
     of a structure component, returning a FIELD_DECL node.
     WIDTH is non-NULL for bit-fields only, and is an INTEGER_CST node.
  
*************** start_struct (enum tree_code code, tree 
*** 4809,4819 ****
     are ultimately passed to `build_struct' to make the RECORD_TYPE node.  */
  
  tree
! grokfield (tree declarator, tree declspecs, tree width)
  {
    tree value;
  
!   if (declarator == NULL_TREE && width == NULL_TREE)
      {
        /* This is an unnamed decl.
  
--- 4991,5003 ----
     are ultimately passed to `build_struct' to make the RECORD_TYPE node.  */
  
  tree
! grokfield (struct c_declarator *declarator, struct c_declspecs *declspecs,
! 	   tree width)
  {
    tree value;
  
!   if (declarator->kind == cdk_id && declarator->u.id == NULL_TREE
!       && width == NULL_TREE)
      {
        /* This is an unnamed decl.
  
*************** grokfield (tree declarator, tree declspe
*** 4834,4863 ****
  	 took this from Plan 9 or if it was an accident of implementation
  	 that took root before someone noticed the bug...  */
  
!       tree type = TREE_VALUE (declspecs);
  
!       if (flag_ms_extensions && TREE_CODE (type) == TYPE_DECL)
! 	type = TREE_TYPE (type);
!       if (TREE_CODE (type) == RECORD_TYPE || TREE_CODE (type) == UNION_TYPE)
  	{
  	  if (flag_ms_extensions)
! 	    ; /* ok */
  	  else if (flag_iso)
! 	    goto warn_unnamed_field;
  	  else if (TYPE_NAME (type) == NULL)
! 	    ; /* ok */
  	  else
! 	    goto warn_unnamed_field;
  	}
!       else
  	{
! 	warn_unnamed_field:
! 	  warning ("declaration does not declare anything");
  	  return NULL_TREE;
  	}
      }
  
!   value = grokdeclarator (declarator, declspecs, FIELD, 0,
  			  width ? &width : NULL);
  
    finish_decl (value, NULL_TREE, NULL_TREE);
--- 5018,5050 ----
  	 took this from Plan 9 or if it was an accident of implementation
  	 that took root before someone noticed the bug...  */
  
!       tree type = declspecs->type;
!       bool type_ok = (TREE_CODE (type) == RECORD_TYPE
! 		      || TREE_CODE (type) == UNION_TYPE);
!       bool ok = false;
  
!       if (type_ok
! 	  && (flag_ms_extensions || !declspecs->typedef_p))
  	{
  	  if (flag_ms_extensions)
! 	    ok = true;
  	  else if (flag_iso)
! 	    ok = false;
  	  else if (TYPE_NAME (type) == NULL)
! 	    ok = true;
  	  else
! 	    ok = false;
  	}
!       if (!ok)
  	{
! 	  pedwarn ("declaration does not declare anything");
  	  return NULL_TREE;
  	}
+       if (pedantic)
+ 	pedwarn ("ISO C doesn%'t support unnamed structs/unions");
      }
  
!   value = grokdeclarator (declarator, declspecs, FIELD, false,
  			  width ? &width : NULL);
  
    finish_decl (value, NULL_TREE, NULL_TREE);
*************** detect_field_duplicates (tree fieldlist)
*** 4897,4903 ****
  	    for (y = fieldlist; y != x; y = TREE_CHAIN (y))
  	      if (DECL_NAME (y) == DECL_NAME (x))
  		{
! 		  error ("%Jduplicate member '%D'", x, x);
  		  DECL_NAME (x) = NULL_TREE;
  		}
  	  }
--- 5084,5090 ----
  	    for (y = fieldlist; y != x; y = TREE_CHAIN (y))
  	      if (DECL_NAME (y) == DECL_NAME (x))
  		{
! 		  error ("%Jduplicate member %qD", x, x);
  		  DECL_NAME (x) = NULL_TREE;
  		}
  	  }
*************** detect_field_duplicates (tree fieldlist)
*** 4913,4919 ****
  	    slot = htab_find_slot (htab, y, INSERT);
  	    if (*slot)
  	      {
! 		error ("%Jduplicate member '%D'", x, x);
  		DECL_NAME (x) = NULL_TREE;
  	      }
  	    *slot = y;
--- 5100,5106 ----
  	    slot = htab_find_slot (htab, y, INSERT);
  	    if (*slot)
  	      {
! 		error ("%Jduplicate member %qD", x, x);
  		DECL_NAME (x) = NULL_TREE;
  	      }
  	    *slot = y;
*************** tree
*** 4931,4937 ****
  finish_struct (tree t, tree fieldlist, tree attributes)
  {
    tree x;
!   int toplevel = global_scope == current_scope;
    int saw_named_field;
  
    /* If this type was previously laid out as a forward reference,
--- 5118,5124 ----
  finish_struct (tree t, tree fieldlist, tree attributes)
  {
    tree x;
!   bool toplevel = file_scope == current_scope;
    int saw_named_field;
  
    /* If this type was previously laid out as a forward reference,
*************** finish_struct (tree t, tree fieldlist, t
*** 4941,4959 ****
  
    decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
  
-   /* Nameless union parm types are useful as GCC extension.  */
-   if (! (TREE_CODE (t) == UNION_TYPE && TYPE_NAME (t) == 0) && !pedantic)
-     /* Otherwise, warn about any struct or union def. in parmlist.  */
-     if (in_parm_level_p ())
-       {
- 	if (pedantic)
- 	  pedwarn ("%s defined inside parms",
- 		   TREE_CODE (t) == UNION_TYPE ? _("union") : _("structure"));
- 	else
- 	  warning ("%s defined inside parms",
- 		   TREE_CODE (t) == UNION_TYPE ? _("union") : _("structure"));
-       }
- 
    if (pedantic)
      {
        for (x = fieldlist; x; x = TREE_CHAIN (x))
--- 5128,5133 ----
*************** finish_struct (tree t, tree fieldlist, t
*** 4961,4975 ****
  	  break;
  
        if (x == 0)
! 	pedwarn ("%s has no %s",
! 		 TREE_CODE (t) == UNION_TYPE ? _("union") : _("struct"),
! 		 fieldlist ? _("named members") : _("members"));
      }
  
    /* Install struct as DECL_CONTEXT of each field decl.
!      Also process specified field sizes,m which is found in the DECL_INITIAL.
!      Store 0 there, except for ": 0" fields (so we can find them
!      and delete them, below).  */
  
    saw_named_field = 0;
    for (x = fieldlist; x; x = TREE_CHAIN (x))
--- 5135,5164 ----
  	  break;
  
        if (x == 0)
! 	{
! 	  if (TREE_CODE (t) == UNION_TYPE)
! 	    {
! 	      if (fieldlist)
! 		pedwarn ("union has no named members");
! 	      else
! 		pedwarn ("union has no members");
! 	    }
! 	  else
! 	    {
! 	      if (fieldlist)
! 		pedwarn ("struct has no named members");
! 	      else
! 		pedwarn ("struct has no members");
! 	    }
! 	}
      }
  
    /* Install struct as DECL_CONTEXT of each field decl.
!      Also process specified field sizes, found in the DECL_INITIAL,
!      storing 0 there after the type has been changed to precision equal
!      to its width, rather than the precision of the specified standard
!      type.  (Correct layout requires the original type to have been preserved
!      until now.)  */
  
    saw_named_field = 0;
    for (x = fieldlist; x; x = TREE_CHAIN (x))
*************** finish_struct (tree t, tree fieldlist, t
*** 5000,5010 ****
        if (C_DECL_VARIABLE_SIZE (x))
  	C_TYPE_VARIABLE_SIZE (t) = 1;
  
-       /* Detect invalid nested redefinition.  */
-       if (TREE_TYPE (x) == t)
- 	error ("nested redefinition of `%s'",
- 	       IDENTIFIER_POINTER (TYPE_NAME (t)));
- 
        if (DECL_INITIAL (x))
  	{
  	  unsigned HOST_WIDE_INT width = tree_low_cst (DECL_INITIAL (x), 1);
--- 5189,5194 ----
*************** finish_struct (tree t, tree fieldlist, t
*** 5013,5020 ****
  	  SET_DECL_C_BIT_FIELD (x);
  	}
  
-       DECL_INITIAL (x) = 0;
- 
        /* Detect flexible array member in an invalid context.  */
        if (TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE
  	  && TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
--- 5197,5202 ----
*************** finish_struct (tree t, tree fieldlist, t
*** 5031,5037 ****
  	      error ("%Jflexible array member not at end of struct", x);
  	      TREE_TYPE (x) = error_mark_node;
  	    }
! 	  else if (! saw_named_field)
  	    {
  	      error ("%Jflexible array member in otherwise empty struct", x);
  	      TREE_TYPE (x) = error_mark_node;
--- 5213,5219 ----
  	      error ("%Jflexible array member not at end of struct", x);
  	      TREE_TYPE (x) = error_mark_node;
  	    }
! 	  else if (!saw_named_field)
  	    {
  	      error ("%Jflexible array member in otherwise empty struct", x);
  	      TREE_TYPE (x) = error_mark_node;
*************** finish_struct (tree t, tree fieldlist, t
*** 5055,5066 ****
  
    layout_type (t);
  
!   /* Delete all zero-width bit-fields from the fieldlist.  */
    {
      tree *fieldlistp = &fieldlist;
      while (*fieldlistp)
!       if (TREE_CODE (*fieldlistp) == FIELD_DECL && DECL_INITIAL (*fieldlistp))
! 	*fieldlistp = TREE_CHAIN (*fieldlistp);
        else
  	fieldlistp = &TREE_CHAIN (*fieldlistp);
    }
--- 5237,5260 ----
  
    layout_type (t);
  
!   /* Give bit-fields their proper types.  */
    {
      tree *fieldlistp = &fieldlist;
      while (*fieldlistp)
!       if (TREE_CODE (*fieldlistp) == FIELD_DECL && DECL_INITIAL (*fieldlistp)
! 	  && TREE_TYPE (*fieldlistp) != error_mark_node)
! 	{
! 	  unsigned HOST_WIDE_INT width
! 	    = tree_low_cst (DECL_INITIAL (*fieldlistp), 1);
! 	  tree type = TREE_TYPE (*fieldlistp);
! 	  if (width != TYPE_PRECISION (type))
! 	    {
! 	      TREE_TYPE (*fieldlistp)
! 	        = build_nonstandard_integer_type (width, TYPE_UNSIGNED (type));
! 	      DECL_MODE (*fieldlistp) = TYPE_MODE (TREE_TYPE (*fieldlistp));
! 	    }
! 	  DECL_INITIAL (*fieldlistp) = 0;
! 	}
        else
  	fieldlistp = &TREE_CHAIN (*fieldlistp);
    }
*************** finish_struct (tree t, tree fieldlist, t
*** 5095,5102 ****
            ensure that this lives as long as the rest of the struct decl.
            All decls in an inline function need to be saved.  */
  
!         space = ggc_alloc (sizeof (struct lang_type));
!         space2 = ggc_alloc (sizeof (struct sorted_fields_type) + len * sizeof (tree));
  
          len = 0;
  	space->s = space2;
--- 5289,5297 ----
            ensure that this lives as long as the rest of the struct decl.
            All decls in an inline function need to be saved.  */
  
!         space = GGC_CNEW (struct lang_type);
!         space2 = GGC_NEWVAR (struct sorted_fields_type,
! 			     sizeof (struct sorted_fields_type) + len * sizeof (tree));
  
          len = 0;
  	space->s = space2;
*************** finish_struct (tree t, tree fieldlist, t
*** 5152,5159 ****
  	  layout_decl (decl, 0);
  	  if (c_dialect_objc ())
  	    objc_check_decl (decl);
! 	  rest_of_decl_compilation (decl, NULL, toplevel, 0);
! 	  if (! toplevel)
  	    expand_decl (decl);
  	}
      }
--- 5347,5354 ----
  	  layout_decl (decl, 0);
  	  if (c_dialect_objc ())
  	    objc_check_decl (decl);
! 	  rest_of_decl_compilation (decl, toplevel, 0);
! 	  if (!toplevel)
  	    expand_decl (decl);
  	}
      }
*************** finish_struct (tree t, tree fieldlist, t
*** 5162,5167 ****
--- 5357,5368 ----
    /* Finish debugging output for this type.  */
    rest_of_type_compilation (t, toplevel);
  
+   /* If we're inside a function proper, i.e. not file-scope and not still
+      parsing parameters, then arrange for the size of a variable sized type
+      to be bound now.  */
+   if (cur_stmt_list && variably_modified_type_p (t, NULL))
+     add_stmt (build_stmt (DECL_EXPR, build_decl (TYPE_DECL, NULL, t)));
+ 
    return t;
  }
  
*************** start_enum (tree name)
*** 5199,5210 ****
        pushtag (name, enumtype);
      }
  
    C_TYPE_BEING_DEFINED (enumtype) = 1;
  
    if (TYPE_VALUES (enumtype) != 0)
      {
        /* This enum is a named one that has been declared already.  */
!       error ("redeclaration of `enum %s'", IDENTIFIER_POINTER (name));
  
        /* Completely replace its old definition.
  	 The old enumerators remain defined, however.  */
--- 5400,5414 ----
        pushtag (name, enumtype);
      }
  
+   if (C_TYPE_BEING_DEFINED (enumtype))
+     error ("nested redefinition of %<enum %s%>", IDENTIFIER_POINTER (name));
+ 
    C_TYPE_BEING_DEFINED (enumtype) = 1;
  
    if (TYPE_VALUES (enumtype) != 0)
      {
        /* This enum is a named one that has been declared already.  */
!       error ("redeclaration of %<enum %s%>", IDENTIFIER_POINTER (name));
  
        /* Completely replace its old definition.
  	 The old enumerators remain defined, however.  */
*************** tree
*** 5230,5241 ****
  finish_enum (tree enumtype, tree values, tree attributes)
  {
    tree pair, tem;
!   tree minnode = 0, maxnode = 0, enum_value_type;
    int precision, unsign;
!   int toplevel = (global_scope == current_scope);
! 
!   if (in_parm_level_p ())
!     warning ("enum defined inside parms");
  
    decl_attributes (&enumtype, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
  
--- 5434,5443 ----
  finish_enum (tree enumtype, tree values, tree attributes)
  {
    tree pair, tem;
!   tree minnode = 0, maxnode = 0;
    int precision, unsign;
!   bool toplevel = (file_scope == current_scope);
!   struct lang_type *lt;
  
    decl_attributes (&enumtype, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
  
*************** finish_enum (tree enumtype, tree values,
*** 5263,5292 ****
    unsign = (tree_int_cst_sgn (minnode) >= 0);
    precision = MAX (min_precision (minnode, unsign),
  		   min_precision (maxnode, unsign));
    if (TYPE_PACKED (enumtype) || precision > TYPE_PRECISION (integer_type_node))
      {
!       tree narrowest = c_common_type_for_size (precision, unsign);
!       if (narrowest == 0)
  	{
  	  warning ("enumeration values exceed range of largest integer");
! 	  narrowest = long_long_integer_type_node;
  	}
- 
-       precision = TYPE_PRECISION (narrowest);
      }
    else
!     precision = TYPE_PRECISION (integer_type_node);
  
!   if (precision == TYPE_PRECISION (integer_type_node))
!     enum_value_type = c_common_type_for_size (precision, 0);
    else
!     enum_value_type = enumtype;
  
-   TYPE_MIN_VALUE (enumtype) = minnode;
-   TYPE_MAX_VALUE (enumtype) = maxnode;
-   TYPE_PRECISION (enumtype) = precision;
-   TREE_UNSIGNED (enumtype) = unsign;
-   TYPE_SIZE (enumtype) = 0;
    layout_type (enumtype);
  
    if (values != error_mark_node)
--- 5465,5498 ----
    unsign = (tree_int_cst_sgn (minnode) >= 0);
    precision = MAX (min_precision (minnode, unsign),
  		   min_precision (maxnode, unsign));
+ 
    if (TYPE_PACKED (enumtype) || precision > TYPE_PRECISION (integer_type_node))
      {
!       tem = c_common_type_for_size (precision, unsign);
!       if (tem == NULL)
  	{
  	  warning ("enumeration values exceed range of largest integer");
! 	  tem = long_long_integer_type_node;
  	}
      }
    else
!     tem = unsign ? unsigned_type_node : integer_type_node;
  
!   TYPE_MIN_VALUE (enumtype) = TYPE_MIN_VALUE (tem);
!   TYPE_MAX_VALUE (enumtype) = TYPE_MAX_VALUE (tem);
!   TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (tem);
!   TYPE_SIZE (enumtype) = 0;
! 
!   /* If the precision of the type was specific with an attribute and it
!      was too small, give an error.  Otherwise, use it.  */
!   if (TYPE_PRECISION (enumtype))
!     {
!       if (precision > TYPE_PRECISION (enumtype))
! 	error ("specified mode too small for enumeral values");
!     }
    else
!     TYPE_PRECISION (enumtype) = TYPE_PRECISION (tem);
  
    layout_type (enumtype);
  
    if (values != error_mark_node)
*************** finish_enum (tree enumtype, tree values,
*** 5301,5306 ****
--- 5507,5513 ----
        for (pair = values; pair; pair = TREE_CHAIN (pair))
  	{
  	  tree enu = TREE_PURPOSE (pair);
+ 	  tree ini = DECL_INITIAL (enu);
  
  	  TREE_TYPE (enu) = enumtype;
  
*************** finish_enum (tree enumtype, tree values,
*** 5311,5328 ****
  	     when comparing integers with enumerators that fit in the
  	     int range.  When -pedantic is given, build_enumerator()
  	     would have already taken care of those that don't fit.  */
! 	  if (int_fits_type_p (DECL_INITIAL (enu), enum_value_type))
! 	    DECL_INITIAL (enu) = convert (enum_value_type, DECL_INITIAL (enu));
  	  else
! 	    DECL_INITIAL (enu) = convert (enumtype, DECL_INITIAL (enu));
  
  	  TREE_PURPOSE (pair) = DECL_NAME (enu);
! 	  TREE_VALUE (pair) = DECL_INITIAL (enu);
  	}
  
        TYPE_VALUES (enumtype) = values;
      }
  
    /* Fix up all variant types of this enum type.  */
    for (tem = TYPE_MAIN_VARIANT (enumtype); tem; tem = TYPE_NEXT_VARIANT (tem))
      {
--- 5518,5544 ----
  	     when comparing integers with enumerators that fit in the
  	     int range.  When -pedantic is given, build_enumerator()
  	     would have already taken care of those that don't fit.  */
! 	  if (int_fits_type_p (ini, integer_type_node))
! 	    tem = integer_type_node;
  	  else
! 	    tem = enumtype;
! 	  ini = convert (tem, ini);
  
+ 	  DECL_INITIAL (enu) = ini;
  	  TREE_PURPOSE (pair) = DECL_NAME (enu);
! 	  TREE_VALUE (pair) = ini;
  	}
  
        TYPE_VALUES (enumtype) = values;
      }
  
+   /* Record the min/max values so that we can warn about bit-field
+      enumerations that are too small for the values.  */
+   lt = GGC_CNEW (struct lang_type);
+   lt->enum_min = minnode;
+   lt->enum_max = maxnode;
+   TYPE_LANG_SPECIFIC (enumtype) = lt;
+ 
    /* Fix up all variant types of this enum type.  */
    for (tem = TYPE_MAIN_VARIANT (enumtype); tem; tem = TYPE_NEXT_VARIANT (tem))
      {
*************** finish_enum (tree enumtype, tree values,
*** 5337,5343 ****
        TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
        TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
        TYPE_USER_ALIGN (tem) = TYPE_USER_ALIGN (enumtype);
!       TREE_UNSIGNED (tem) = TREE_UNSIGNED (enumtype);
      }
  
    /* Finish debugging output for this type.  */
--- 5553,5560 ----
        TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
        TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
        TYPE_USER_ALIGN (tem) = TYPE_USER_ALIGN (enumtype);
!       TYPE_UNSIGNED (tem) = TYPE_UNSIGNED (enumtype);
!       TYPE_LANG_SPECIFIC (tem) = TYPE_LANG_SPECIFIC (enumtype);
      }
  
    /* Finish debugging output for this type.  */
*************** build_enumerator (tree name, tree value)
*** 5364,5379 ****
  
    if (value != 0)
      {
!       if (TREE_CODE (value) == INTEGER_CST)
  	{
! 	  value = default_conversion (value);
! 	  constant_expression_warning (value);
  	}
        else
  	{
! 	  error ("enumerator value for `%s' not integer constant",
! 		 IDENTIFIER_POINTER (name));
! 	  value = 0;
  	}
      }
  
--- 5581,5600 ----
  
    if (value != 0)
      {
!       /* Don't issue more errors for error_mark_node (i.e. an
! 	 undeclared identifier) - just ignore the value expression.  */
!       if (value == error_mark_node)
! 	value = 0;
!       else if (!INTEGRAL_TYPE_P (TREE_TYPE (value))
! 	       || TREE_CODE (value) != INTEGER_CST)
  	{
! 	  error ("enumerator value for %qE is not an integer constant", name);
! 	  value = 0;
  	}
        else
  	{
! 	  value = default_conversion (value);
! 	  constant_expression_warning (value);
  	}
      }
  
*************** build_enumerator (tree name, tree value)
*** 5387,5395 ****
  	error ("overflow in enumeration values");
      }
  
!   if (pedantic && ! int_fits_type_p (value, integer_type_node))
      {
!       pedwarn ("ISO C restricts enumerator values to range of `int'");
        value = convert (integer_type_node, value);
      }
  
--- 5608,5618 ----
  	error ("overflow in enumeration values");
      }
  
!   if (pedantic && !int_fits_type_p (value, integer_type_node))
      {
!       pedwarn ("ISO C restricts enumerator values to range of %<int%>");
!       /* XXX This causes -pedantic to change the meaning of the program.
! 	 Remove?  -zw 2004-03-15  */
        value = convert (integer_type_node, value);
      }
  
*************** build_enumerator (tree name, tree value)
*** 5404,5410 ****
  				      TYPE_PRECISION (integer_type_node)),
  				 (TYPE_PRECISION (type)
  				  >= TYPE_PRECISION (integer_type_node)
! 				  && TREE_UNSIGNED (type)));
  
    decl = build_decl (CONST_DECL, name, type);
    DECL_INITIAL (decl) = convert (type, value);
--- 5627,5633 ----
  				      TYPE_PRECISION (integer_type_node)),
  				 (TYPE_PRECISION (type)
  				  >= TYPE_PRECISION (integer_type_node)
! 				  && TYPE_UNSIGNED (type)));
  
    decl = build_decl (CONST_DECL, name, type);
    DECL_INITIAL (decl) = convert (type, value);
*************** build_enumerator (tree name, tree value)
*** 5427,5465 ****
     yyparse to report a parse error.  */
  
  int
! start_function (tree declspecs, tree declarator, tree attributes)
  {
    tree decl1, old_decl;
!   tree restype;
!   int old_immediate_size_expand = immediate_size_expand;
  
    current_function_returns_value = 0;  /* Assume, until we see it does.  */
    current_function_returns_null = 0;
    current_function_returns_abnormally = 0;
    warn_about_return_type = 0;
    current_extern_inline = 0;
!   c_in_iteration_stmt = 0;
!   c_in_case_stmt = 0;
  
!   /* Don't expand any sizes in the return type of the function.  */
!   immediate_size_expand = 0;
  
!   decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, NULL);
  
    /* If the declarator is not suitable for a function definition,
       cause a syntax error.  */
    if (decl1 == 0)
!     {
!       immediate_size_expand = old_immediate_size_expand;
!       return 0;
!     }
  
    decl_attributes (&decl1, attributes, 0);
  
    if (DECL_DECLARED_INLINE_P (decl1)
        && DECL_UNINLINABLE (decl1)
        && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl1)))
!     warning ("%Jinline function '%D' given attribute noinline", decl1, decl1);
  
    announce_function (decl1);
  
--- 5650,5693 ----
     yyparse to report a parse error.  */
  
  int
! start_function (struct c_declspecs *declspecs, struct c_declarator *declarator,
! 		tree attributes)
  {
    tree decl1, old_decl;
!   tree restype, resdecl;
!   struct c_label_context *nstack;
  
    current_function_returns_value = 0;  /* Assume, until we see it does.  */
    current_function_returns_null = 0;
    current_function_returns_abnormally = 0;
    warn_about_return_type = 0;
    current_extern_inline = 0;
!   c_switch_stack = NULL;
  
!   nstack = XOBNEW (&parser_obstack, struct c_label_context);
!   nstack->labels_def = NULL;
!   nstack->labels_used = NULL;
!   nstack->next = label_context_stack;
!   label_context_stack = nstack;
  
!   /* Indicate no valid break/continue context by setting these variables
!      to some non-null, non-label value.  We'll notice and emit the proper
!      error message in c_finish_bc_stmt.  */
!   c_break_label = c_cont_label = size_zero_node;
! 
!   decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, true, NULL);
  
    /* If the declarator is not suitable for a function definition,
       cause a syntax error.  */
    if (decl1 == 0)
!     return 0;
  
    decl_attributes (&decl1, attributes, 0);
  
    if (DECL_DECLARED_INLINE_P (decl1)
        && DECL_UNINLINABLE (decl1)
        && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl1)))
!     warning ("%Jinline function %qD given attribute noinline", decl1, decl1);
  
    announce_function (decl1);
  
*************** start_function (tree declspecs, tree dec
*** 5473,5534 ****
      }
  
    if (warn_about_return_type)
!     pedwarn_c99 ("return type defaults to `int'");
! 
!   /* Save the parm names or decls from this function's declarator
!      where store_parm_decls will find them.  */
!   current_function_parms = last_function_parms;
!   current_function_parm_tags = last_function_parm_tags;
!   current_function_parm_others = last_function_parm_others;
  
    /* Make the init_value nonzero so pushdecl knows this is not tentative.
!      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
    DECL_INITIAL (decl1) = error_mark_node;
  
    /* If this definition isn't a prototype and we had a prototype declaration
!      before, copy the arg type info from that prototype.
!      But not if what we had before was a builtin function.  */
!   old_decl = lookup_name_current_level (DECL_NAME (decl1));
    if (old_decl != 0 && TREE_CODE (TREE_TYPE (old_decl)) == FUNCTION_TYPE
!       && !DECL_BUILT_IN (old_decl)
!       && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (decl1)))
! 	  == TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (old_decl))))
        && TYPE_ARG_TYPES (TREE_TYPE (decl1)) == 0)
      {
!       TREE_TYPE (decl1) = TREE_TYPE (old_decl);
        current_function_prototype_locus = DECL_SOURCE_LOCATION (old_decl);
      }
  
    /* Optionally warn of old-fashioned def with no previous prototype.  */
    if (warn_strict_prototypes
        && TYPE_ARG_TYPES (TREE_TYPE (decl1)) == 0
        && C_DECL_ISNT_PROTOTYPE (old_decl))
!     warning ("function declaration isn't a prototype");
    /* Optionally warn of any global def with no previous prototype.  */
    else if (warn_missing_prototypes
  	   && TREE_PUBLIC (decl1)
! 	   && ! MAIN_NAME_P (DECL_NAME (decl1))
  	   && C_DECL_ISNT_PROTOTYPE (old_decl))
!     warning ("%Jno previous prototype for '%D'", decl1, decl1);
    /* Optionally warn of any def with no previous prototype
       if the function has already been used.  */
    else if (warn_missing_prototypes
! 	   && old_decl != 0 && TREE_USED (old_decl)
  	   && TYPE_ARG_TYPES (TREE_TYPE (old_decl)) == 0)
!     warning ("%J'%D' was used with no prototype before its definition",
  	     decl1, decl1);
    /* Optionally warn of any global def with no previous declaration.  */
    else if (warn_missing_declarations
  	   && TREE_PUBLIC (decl1)
  	   && old_decl == 0
! 	   && ! MAIN_NAME_P (DECL_NAME (decl1)))
!     warning ("%Jno previous declaration for '%D'", decl1, decl1);
    /* Optionally warn of any def with no previous declaration
       if the function has already been used.  */
    else if (warn_missing_declarations
! 	   && old_decl != 0 && TREE_USED (old_decl)
  	   && C_DECL_IMPLICIT (old_decl))
!     warning ("%J`%D' was used with no declaration before its definition",
  	     decl1, decl1);
  
    /* This is a definition, not a reference.
--- 5701,5761 ----
      }
  
    if (warn_about_return_type)
!     pedwarn_c99 ("return type defaults to %<int%>");
  
    /* Make the init_value nonzero so pushdecl knows this is not tentative.
!      error_mark_node is replaced below (in pop_scope) with the BLOCK.  */
    DECL_INITIAL (decl1) = error_mark_node;
  
    /* If this definition isn't a prototype and we had a prototype declaration
!      before, copy the arg type info from that prototype.  */
!   old_decl = lookup_name_in_scope (DECL_NAME (decl1), current_scope);
    if (old_decl != 0 && TREE_CODE (TREE_TYPE (old_decl)) == FUNCTION_TYPE
!       && comptypes (TREE_TYPE (TREE_TYPE (decl1)),
! 		    TREE_TYPE (TREE_TYPE (old_decl)))
        && TYPE_ARG_TYPES (TREE_TYPE (decl1)) == 0)
      {
!       TREE_TYPE (decl1) = composite_type (TREE_TYPE (old_decl),
! 					  TREE_TYPE (decl1));
        current_function_prototype_locus = DECL_SOURCE_LOCATION (old_decl);
      }
  
    /* Optionally warn of old-fashioned def with no previous prototype.  */
    if (warn_strict_prototypes
+       && old_decl != error_mark_node
        && TYPE_ARG_TYPES (TREE_TYPE (decl1)) == 0
        && C_DECL_ISNT_PROTOTYPE (old_decl))
!     warning ("function declaration isn%'t a prototype");
    /* Optionally warn of any global def with no previous prototype.  */
    else if (warn_missing_prototypes
+ 	   && old_decl != error_mark_node
  	   && TREE_PUBLIC (decl1)
! 	   && !MAIN_NAME_P (DECL_NAME (decl1))
  	   && C_DECL_ISNT_PROTOTYPE (old_decl))
!     warning ("%Jno previous prototype for %qD", decl1, decl1);
    /* Optionally warn of any def with no previous prototype
       if the function has already been used.  */
    else if (warn_missing_prototypes
! 	   && old_decl != 0
! 	   && old_decl != error_mark_node
! 	   && TREE_USED (old_decl)
  	   && TYPE_ARG_TYPES (TREE_TYPE (old_decl)) == 0)
!     warning ("%J%qD was used with no prototype before its definition",
  	     decl1, decl1);
    /* Optionally warn of any global def with no previous declaration.  */
    else if (warn_missing_declarations
  	   && TREE_PUBLIC (decl1)
  	   && old_decl == 0
! 	   && !MAIN_NAME_P (DECL_NAME (decl1)))
!     warning ("%Jno previous declaration for %qD", decl1, decl1);
    /* Optionally warn of any def with no previous declaration
       if the function has already been used.  */
    else if (warn_missing_declarations
! 	   && old_decl != 0
! 	   && old_decl != error_mark_node
! 	   && TREE_USED (old_decl)
  	   && C_DECL_IMPLICIT (old_decl))
!     warning ("%J%qD was used with no declaration before its definition",
  	     decl1, decl1);
  
    /* This is a definition, not a reference.
*************** start_function (tree declspecs, tree dec
*** 5545,5559 ****
    if (current_function_decl != 0)
      TREE_PUBLIC (decl1) = 0;
  
- #ifdef ENABLE_CHECKING
    /* This is the earliest point at which we might know the assembler
       name of the function.  Thus, if it's set before this, die horribly.  */
!   if (DECL_ASSEMBLER_NAME_SET_P (decl1))
!     abort ();
! #endif
  
    /* If #pragma weak was used, mark the decl weak now.  */
!   if (current_scope == global_scope)
      maybe_apply_pragma_weak (decl1);
  
    /* Warn for unlikely, improbable, or stupid declarations of `main'.  */
--- 5772,5783 ----
    if (current_function_decl != 0)
      TREE_PUBLIC (decl1) = 0;
  
    /* This is the earliest point at which we might know the assembler
       name of the function.  Thus, if it's set before this, die horribly.  */
!   gcc_assert (!DECL_ASSEMBLER_NAME_SET_P (decl1));
  
    /* If #pragma weak was used, mark the decl weak now.  */
!   if (current_scope == file_scope)
      maybe_apply_pragma_weak (decl1);
  
    /* Warn for unlikely, improbable, or stupid declarations of `main'.  */
*************** start_function (tree declspecs, tree dec
*** 5564,5570 ****
  
        if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (decl1)))
  	  != integer_type_node)
! 	pedwarn ("%Jreturn type of '%D' is not `int'", decl1, decl1);
  
        for (args = TYPE_ARG_TYPES (TREE_TYPE (decl1)); args;
  	   args = TREE_CHAIN (args))
--- 5788,5794 ----
  
        if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (decl1)))
  	  != integer_type_node)
! 	pedwarn ("%Jreturn type of %qD is not %<int%>", decl1, decl1);
  
        for (args = TYPE_ARG_TYPES (TREE_TYPE (decl1)); args;
  	   args = TREE_CHAIN (args))
*************** start_function (tree declspecs, tree dec
*** 5579,5585 ****
  	    {
  	    case 1:
  	      if (TYPE_MAIN_VARIANT (type) != integer_type_node)
! 		pedwarn ("%Jfirst argument of '%D' should be `int'",
  			 decl1, decl1);
  	      break;
  
--- 5803,5809 ----
  	    {
  	    case 1:
  	      if (TYPE_MAIN_VARIANT (type) != integer_type_node)
! 		pedwarn ("%Jfirst argument of %qD should be %<int%>",
  			 decl1, decl1);
  	      break;
  
*************** start_function (tree declspecs, tree dec
*** 5588,5594 ****
  		  || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
  		  || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
  		      != char_type_node))
! 		pedwarn ("%Jsecond argument of '%D' should be 'char **'",
                           decl1, decl1);
  	      break;
  
--- 5812,5818 ----
  		  || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
  		  || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
  		      != char_type_node))
! 		pedwarn ("%Jsecond argument of %qD should be %<char **%>",
                           decl1, decl1);
  	      break;
  
*************** start_function (tree declspecs, tree dec
*** 5597,5604 ****
  		  || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
  		  || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
  		      != char_type_node))
! 		pedwarn ("%Jthird argument of '%D' should probably be "
!                          "'char **'", decl1, decl1);
  	      break;
  	    }
  	}
--- 5821,5828 ----
  		  || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
  		  || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
  		      != char_type_node))
! 		pedwarn ("%Jthird argument of %qD should probably be "
!                          "%<char **%>", decl1, decl1);
  	      break;
  	    }
  	}
*************** start_function (tree declspecs, tree dec
*** 5607,5616 ****
  	 argument because it's only mentioned in an appendix of the
  	 standard.  */
        if (argct > 0 && (argct < 2 || argct > 3))
! 	pedwarn ("%J'%D' takes only zero or two arguments", decl1, decl1);
  
!       if (! TREE_PUBLIC (decl1))
! 	pedwarn ("%J'%D' is normally a non-static function", decl1, decl1);
      }
  
    /* Record the decl so that the function name is defined.
--- 5831,5840 ----
  	 argument because it's only mentioned in an appendix of the
  	 standard.  */
        if (argct > 0 && (argct < 2 || argct > 3))
! 	pedwarn ("%J%qD takes only zero or two arguments", decl1, decl1);
  
!       if (!TREE_PUBLIC (decl1))
! 	pedwarn ("%J%qD is normally a non-static function", decl1, decl1);
      }
  
    /* Record the decl so that the function name is defined.
*************** start_function (tree declspecs, tree dec
*** 5619,5650 ****
  
    current_function_decl = pushdecl (decl1);
  
!   pushlevel (0);
    declare_parm_level ();
  
-   make_decl_rtl (current_function_decl, NULL);
- 
    restype = TREE_TYPE (TREE_TYPE (current_function_decl));
    /* Promote the value to int before returning it.  */
    if (c_promoting_integer_type_p (restype))
      {
        /* It retains unsignedness if not really getting wider.  */
!       if (TREE_UNSIGNED (restype)
  	  && (TYPE_PRECISION (restype)
  		  == TYPE_PRECISION (integer_type_node)))
  	restype = unsigned_type_node;
        else
  	restype = integer_type_node;
      }
-   DECL_RESULT (current_function_decl)
-     = build_decl (RESULT_DECL, NULL_TREE, restype);
- 
-   /* If this fcn was already referenced via a block-scope `extern' decl
-      (or an implicit decl), propagate certain information about the usage.  */
-   if (TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (current_function_decl)))
-     TREE_ADDRESSABLE (current_function_decl) = 1;
  
!   immediate_size_expand = old_immediate_size_expand;
  
    start_fname_decls ();
  
--- 5843,5868 ----
  
    current_function_decl = pushdecl (decl1);
  
!   push_scope ();
    declare_parm_level ();
  
    restype = TREE_TYPE (TREE_TYPE (current_function_decl));
    /* Promote the value to int before returning it.  */
    if (c_promoting_integer_type_p (restype))
      {
        /* It retains unsignedness if not really getting wider.  */
!       if (TYPE_UNSIGNED (restype)
  	  && (TYPE_PRECISION (restype)
  		  == TYPE_PRECISION (integer_type_node)))
  	restype = unsigned_type_node;
        else
  	restype = integer_type_node;
      }
  
!   resdecl = build_decl (RESULT_DECL, NULL_TREE, restype);
!   DECL_ARTIFICIAL (resdecl) = 1;
!   DECL_IGNORED_P (resdecl) = 1;
!   DECL_RESULT (current_function_decl) = resdecl;
  
    start_fname_decls ();
  
*************** start_function (tree declspecs, tree dec
*** 5656,5754 ****
     need only record them as in effect and complain if any redundant
     old-style parm decls were written.  */
  static void
! store_parm_decls_newstyle (void)
  {
!   tree decl, last;
!   tree fndecl = current_function_decl;
!   tree parms = current_function_parms;
!   tree tags = current_function_parm_tags;
!   tree others = current_function_parm_others;
  
!   if (current_scope->parms || current_scope->names || current_scope->tags)
      {
        error ("%Jold-style parameter declarations in prototyped "
  	     "function definition", fndecl);
  
        /* Get rid of the old-style declarations.  */
!       poplevel (0, 0, 0);
!       pushlevel (0);
      }
  
    /* Now make all the parameter declarations visible in the function body.
       We can bypass most of the grunt work of pushdecl.  */
!   for (last = 0, decl = parms; decl; last = decl, decl = TREE_CHAIN (decl))
      {
        DECL_CONTEXT (decl) = current_function_decl;
!       if (DECL_NAME (decl) == 0)
! 	error ("%Jparameter name omitted", decl);
        else
! 	{
! 	  if (IDENTIFIER_SYMBOL_VALUE (DECL_NAME (decl)))
! 	    current_scope->shadowed
! 	      = tree_cons (DECL_NAME (decl),
! 			   IDENTIFIER_SYMBOL_VALUE (DECL_NAME (decl)),
! 			   current_scope->shadowed);
! 	  IDENTIFIER_SYMBOL_VALUE (DECL_NAME (decl)) = decl;
! 	}
      }
-   current_scope->parms = parms;
-   current_scope->parms_last = last;
  
    /* Record the parameter list in the function declaration.  */
!   DECL_ARGUMENTS (fndecl) = parms;
  
    /* Now make all the ancillary declarations visible, likewise.  */
!   for (last = 0, decl = others; decl; last = decl, decl = TREE_CHAIN (decl))
      {
        DECL_CONTEXT (decl) = current_function_decl;
!       if (DECL_NAME (decl)
! 	  && TYPE_MAIN_VARIANT (TREE_TYPE (decl)) != void_type_node)
! 	{
! 	  if (IDENTIFIER_SYMBOL_VALUE (DECL_NAME (decl)))
! 	    current_scope->shadowed
! 	      = tree_cons (DECL_NAME (decl),
! 			   IDENTIFIER_SYMBOL_VALUE (DECL_NAME (decl)),
! 			   current_scope->shadowed);
! 	  IDENTIFIER_SYMBOL_VALUE (DECL_NAME (decl)) = decl;
! 	}
      }
-   current_scope->names = others;
-   current_scope->names_last = last;
  
    /* And all the tag declarations.  */
!   for (decl = tags; decl; decl = TREE_CHAIN (decl))
      if (TREE_PURPOSE (decl))
!       {
! 	if (IDENTIFIER_TAG_VALUE (TREE_PURPOSE (decl)))
! 	  current_scope->shadowed_tags
! 	    = tree_cons (TREE_PURPOSE (decl),
! 			 IDENTIFIER_SYMBOL_VALUE (TREE_PURPOSE (decl)),
! 			 current_scope->shadowed_tags);
! 	IDENTIFIER_TAG_VALUE (TREE_PURPOSE (decl)) = TREE_VALUE (decl);
!       }
!   current_scope->tags = tags;
  }
  
  /* Subroutine of store_parm_decls which handles old-style function
     definitions (separate parameter list and declarations).  */
  
  static void
! store_parm_decls_oldstyle (void)
  {
    tree parm, decl, last;
!   tree fndecl = current_function_decl;
! 
!   /* This is the identifier list from the function declarator.  */
!   tree parmids = current_function_parms;
  
    /* We use DECL_WEAK as a flag to show which parameters have been
       seen already, since it is not used on PARM_DECL.  */
  #ifdef ENABLE_CHECKING
!   for (parm = current_scope->parms; parm; parm = TREE_CHAIN (parm))
!     if (DECL_WEAK (parm))
!       abort ();
  #endif
  
    /* Match each formal parameter name with its declaration.  Save each
       decl in the appropriate TREE_PURPOSE slot of the parmids chain.  */
    for (parm = parmids; parm; parm = TREE_CHAIN (parm))
--- 5874,5952 ----
     need only record them as in effect and complain if any redundant
     old-style parm decls were written.  */
  static void
! store_parm_decls_newstyle (tree fndecl, const struct c_arg_info *arg_info)
  {
!   tree decl;
  
!   if (current_scope->bindings)
      {
        error ("%Jold-style parameter declarations in prototyped "
  	     "function definition", fndecl);
  
        /* Get rid of the old-style declarations.  */
!       pop_scope ();
!       push_scope ();
      }
+   /* Don't issue this warning for nested functions, and don't issue this
+      warning if we got here because ARG_INFO_TYPES was error_mark_node
+      (this happens when a function definition has just an ellipsis in
+      its parameter list).  */
+   else if (warn_traditional && !in_system_header && !current_function_scope
+ 	   && arg_info->types != error_mark_node)
+     warning ("%Jtraditional C rejects ISO C style function definitions",
+ 	     fndecl);
  
    /* Now make all the parameter declarations visible in the function body.
       We can bypass most of the grunt work of pushdecl.  */
!   for (decl = arg_info->parms; decl; decl = TREE_CHAIN (decl))
      {
        DECL_CONTEXT (decl) = current_function_decl;
!       if (DECL_NAME (decl))
! 	bind (DECL_NAME (decl), decl, current_scope,
! 	      /*invisible=*/false, /*nested=*/false);
        else
! 	error ("%Jparameter name omitted", decl);
      }
  
    /* Record the parameter list in the function declaration.  */
!   DECL_ARGUMENTS (fndecl) = arg_info->parms;
  
    /* Now make all the ancillary declarations visible, likewise.  */
!   for (decl = arg_info->others; decl; decl = TREE_CHAIN (decl))
      {
        DECL_CONTEXT (decl) = current_function_decl;
!       if (DECL_NAME (decl))
! 	bind (DECL_NAME (decl), decl, current_scope,
! 	      /*invisible=*/false, /*nested=*/false);
      }
  
    /* And all the tag declarations.  */
!   for (decl = arg_info->tags; decl; decl = TREE_CHAIN (decl))
      if (TREE_PURPOSE (decl))
!       bind (TREE_PURPOSE (decl), TREE_VALUE (decl), current_scope,
! 	    /*invisible=*/false, /*nested=*/false);
  }
  
  /* Subroutine of store_parm_decls which handles old-style function
     definitions (separate parameter list and declarations).  */
  
  static void
! store_parm_decls_oldstyle (tree fndecl, const struct c_arg_info *arg_info)
  {
+   struct c_binding *b;
    tree parm, decl, last;
!   tree parmids = arg_info->parms;
  
    /* We use DECL_WEAK as a flag to show which parameters have been
       seen already, since it is not used on PARM_DECL.  */
  #ifdef ENABLE_CHECKING
!   for (b = current_scope->bindings; b; b = b->prev)
!     gcc_assert (TREE_CODE (b->decl) != PARM_DECL || !DECL_WEAK (b->decl));
  #endif
  
+   if (warn_old_style_definition && !in_system_header)
+     warning ("%Jold-style function definition", fndecl);
+ 
    /* Match each formal parameter name with its declaration.  Save each
       decl in the appropriate TREE_PURPOSE slot of the parmids chain.  */
    for (parm = parmids; parm; parm = TREE_CHAIN (parm))
*************** store_parm_decls_oldstyle (void)
*** 5760,5776 ****
  	  continue;
  	}
  
!       decl = IDENTIFIER_SYMBOL_VALUE (TREE_VALUE (parm));
!       if (decl && DECL_CONTEXT (decl) == fndecl)
  	{
  	  /* If we got something other than a PARM_DECL it is an error.  */
  	  if (TREE_CODE (decl) != PARM_DECL)
! 	    error ("%J\"%D\" declared as a non-parameter", decl, decl);
  	  /* If the declaration is already marked, we have a duplicate
  	     name.  Complain and ignore the duplicate.  */
  	  else if (DECL_WEAK (decl))
  	    {
! 	      error ("%Jmultiple parameters named \"%D\"", decl, decl);
  	      TREE_PURPOSE (parm) = 0;
  	      continue;
  	    }
--- 5958,5975 ----
  	  continue;
  	}
  
!       b = I_SYMBOL_BINDING (TREE_VALUE (parm));
!       if (b && B_IN_CURRENT_SCOPE (b))
  	{
+ 	  decl = b->decl;
  	  /* If we got something other than a PARM_DECL it is an error.  */
  	  if (TREE_CODE (decl) != PARM_DECL)
! 	    error ("%J%qD declared as a non-parameter", decl, decl);
  	  /* If the declaration is already marked, we have a duplicate
  	     name.  Complain and ignore the duplicate.  */
  	  else if (DECL_WEAK (decl))
  	    {
! 	      error ("%Jmultiple parameters named %qD", decl, decl);
  	      TREE_PURPOSE (parm) = 0;
  	      continue;
  	    }
*************** store_parm_decls_oldstyle (void)
*** 5778,5784 ****
  	     an int.  */
  	  else if (VOID_TYPE_P (TREE_TYPE (decl)))
  	    {
! 	      error ("%Jparameter \"%D\" declared void", decl, decl);
  	      TREE_TYPE (decl) = integer_type_node;
  	      DECL_ARG_TYPE (decl) = integer_type_node;
  	      layout_decl (decl, 0);
--- 5977,5983 ----
  	     an int.  */
  	  else if (VOID_TYPE_P (TREE_TYPE (decl)))
  	    {
! 	      error ("%Jparameter %qD declared with void type", decl, decl);
  	      TREE_TYPE (decl) = integer_type_node;
  	      DECL_ARG_TYPE (decl) = integer_type_node;
  	      layout_decl (decl, 0);
*************** store_parm_decls_oldstyle (void)
*** 5793,5801 ****
  	  pushdecl (decl);
  
  	  if (flag_isoc99)
! 	    pedwarn ("%Jtype of \"%D\" defaults to \"int\"", decl, decl);
  	  else if (extra_warnings)
! 	    warning ("%Jtype of \"%D\" defaults to \"int\"", decl, decl);
  	}
  
        TREE_PURPOSE (parm) = decl;
--- 5992,6000 ----
  	  pushdecl (decl);
  
  	  if (flag_isoc99)
! 	    pedwarn ("%Jtype of %qD defaults to %<int%>", decl, decl);
  	  else if (extra_warnings)
! 	    warning ("%Jtype of %qD defaults to %<int%>", decl, decl);
  	}
  
        TREE_PURPOSE (parm) = decl;
*************** store_parm_decls_oldstyle (void)
*** 5805,5821 ****
    /* Now examine the parms chain for incomplete declarations
       and declarations with no corresponding names.  */
  
!   for (parm = current_scope->parms; parm; parm = TREE_CHAIN (parm))
      {
!       if (!COMPLETE_TYPE_P (TREE_TYPE (parm)))
  	{
! 	  error ("%Jparameter \"%D\" has incomplete type", parm, parm);
  	  TREE_TYPE (parm) = error_mark_node;
  	}
  
!       if (! DECL_WEAK (parm))
  	{
! 	  error ("%Jdeclaration for parameter \"%D\" but no such parameter",
  		 parm, parm);
  
  	  /* Pretend the parameter was not missing.
--- 6004,6025 ----
    /* Now examine the parms chain for incomplete declarations
       and declarations with no corresponding names.  */
  
!   for (b = current_scope->bindings; b; b = b->prev)
      {
!       parm = b->decl;
!       if (TREE_CODE (parm) != PARM_DECL)
! 	continue;
! 
!       if (TREE_TYPE (parm) != error_mark_node
! 	  && !COMPLETE_TYPE_P (TREE_TYPE (parm)))
  	{
! 	  error ("%Jparameter %qD has incomplete type", parm, parm);
  	  TREE_TYPE (parm) = error_mark_node;
  	}
  
!       if (!DECL_WEAK (parm))
  	{
! 	  error ("%Jdeclaration for parameter %qD but no such parameter",
  		 parm, parm);
  
  	  /* Pretend the parameter was not missing.
*************** store_parm_decls_oldstyle (void)
*** 5837,5843 ****
      {
        last = TREE_PURPOSE (parm);
        DECL_ARGUMENTS (fndecl) = last;
-       current_scope->parms = last;
        DECL_WEAK (last) = 0;
  
        for (parm = TREE_CHAIN (parm); parm; parm = TREE_CHAIN (parm))
--- 6041,6046 ----
*************** store_parm_decls_oldstyle (void)
*** 5847,5853 ****
  	    last = TREE_PURPOSE (parm);
  	    DECL_WEAK (last) = 0;
  	  }
-       current_scope->parms_last = last;
        TREE_CHAIN (last) = 0;
      }
  
--- 6050,6055 ----
*************** store_parm_decls_oldstyle (void)
*** 5867,5873 ****
  	  if (parm == 0 || type == 0
  	      || TYPE_MAIN_VARIANT (TREE_VALUE (type)) == void_type_node)
  	    {
! 	      error ("number of arguments doesn't match prototype");
  	      error ("%Hprototype declaration",
  		     &current_function_prototype_locus);
  	      break;
--- 6069,6075 ----
  	  if (parm == 0 || type == 0
  	      || TYPE_MAIN_VARIANT (TREE_VALUE (type)) == void_type_node)
  	    {
! 	      error ("number of arguments doesn%'t match prototype");
  	      error ("%Hprototype declaration",
  		     &current_function_prototype_locus);
  	      break;
*************** store_parm_decls_oldstyle (void)
*** 5875,5883 ****
  	  /* Type for passing arg must be consistent with that
  	     declared for the arg.  ISO C says we take the unqualified
  	     type for parameters declared with qualified type.  */
! 	  if (! comptypes (TYPE_MAIN_VARIANT (DECL_ARG_TYPE (parm)),
! 			   TYPE_MAIN_VARIANT (TREE_VALUE (type)),
! 			   COMPARE_STRICT))
  	    {
  	      if (TYPE_MAIN_VARIANT (TREE_TYPE (parm))
  		  == TYPE_MAIN_VARIANT (TREE_VALUE (type)))
--- 6077,6084 ----
  	  /* Type for passing arg must be consistent with that
  	     declared for the arg.  ISO C says we take the unqualified
  	     type for parameters declared with qualified type.  */
! 	  if (!comptypes (TYPE_MAIN_VARIANT (DECL_ARG_TYPE (parm)),
! 			  TYPE_MAIN_VARIANT (TREE_VALUE (type))))
  	    {
  	      if (TYPE_MAIN_VARIANT (TREE_TYPE (parm))
  		  == TYPE_MAIN_VARIANT (TREE_VALUE (type)))
*************** store_parm_decls_oldstyle (void)
*** 5897,5911 ****
  
  		  if (pedantic)
  		    {
! 		      pedwarn ("promoted argument \"%D\" "
! 			       "doesn't match prototype", parm);
  		      pedwarn ("%Hprototype declaration",
  			       &current_function_prototype_locus);
  		    }
  		}
  	      else
  		{
! 		  error ("argument \"%D\" doesn't match prototype", parm);
  		  error ("%Hprototype declaration",
  			 &current_function_prototype_locus);
  		}
--- 6098,6112 ----
  
  		  if (pedantic)
  		    {
! 		      pedwarn ("promoted argument %qD "
! 			       "doesn%'t match prototype", parm);
  		      pedwarn ("%Hprototype declaration",
  			       &current_function_prototype_locus);
  		    }
  		}
  	      else
  		{
! 		  error ("argument %qD doesn%'t match prototype", parm);
  		  error ("%Hprototype declaration",
  			 &current_function_prototype_locus);
  		}
*************** store_parm_decls_oldstyle (void)
*** 5943,5954 ****
  	 will be a variant of the main variant of the original function
  	 type.  */
  
!       TREE_TYPE (fndecl) = build_type_copy (TREE_TYPE (fndecl));
  
        TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl)) = actual;
      }
  }
  
  /* Store the parameter declarations into the current function declaration.
     This is called after parsing the parameter declarations, before
     digesting the body of the function.
--- 6144,6165 ----
  	 will be a variant of the main variant of the original function
  	 type.  */
  
!       TREE_TYPE (fndecl) = build_variant_type_copy (TREE_TYPE (fndecl));
  
        TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl)) = actual;
      }
  }
  
+ /* Store parameter declarations passed in ARG_INFO into the current
+    function declaration.  */
+ 
+ void
+ store_parm_decls_from (struct c_arg_info *arg_info)
+ {
+   current_function_arg_info = arg_info;
+   store_parm_decls ();
+ }
+ 
  /* Store the parameter declarations into the current function declaration.
     This is called after parsing the parameter declarations, before
     digesting the body of the function.
*************** void
*** 5960,6019 ****
  store_parm_decls (void)
  {
    tree fndecl = current_function_decl;
  
!   /* The function containing FNDECL, if any.  */
!   tree context = decl_function_context (fndecl);
  
!   /* True if this definition is written with a prototype.  */
!   bool prototype = (current_function_parms
! 		    && TREE_CODE (current_function_parms) != TREE_LIST);
  
!   if (prototype)
!     store_parm_decls_newstyle ();
    else
!     store_parm_decls_oldstyle ();
  
!   /* The next call to pushlevel will be a function body.  */
  
    next_is_function_body = true;
  
    /* Write a record describing this function definition to the prototypes
       file (if requested).  */
  
!   gen_aux_info_record (fndecl, 1, 0, prototype);
  
    /* Initialize the RTL code for the function.  */
    allocate_struct_function (fndecl);
  
    /* Begin the statement tree for this function.  */
!   begin_stmt_tree (&DECL_SAVED_TREE (fndecl));
! 
!   /* If this is a nested function, save away the sizes of any
!      variable-size types so that we can expand them when generating
!      RTL.  */
!   if (context)
!     {
!       tree t;
! 
!       DECL_LANG_SPECIFIC (fndecl)->pending_sizes
! 	= nreverse (get_pending_sizes ());
!       for (t = DECL_LANG_SPECIFIC (fndecl)->pending_sizes;
! 	   t;
! 	   t = TREE_CHAIN (t))
! 	SAVE_EXPR_CONTEXT (TREE_VALUE (t)) = context;
!     }
  
!   /* This function is being processed in whole-function mode.  */
!   cfun->x_whole_function_mode_p = 1;
  
    /* Even though we're inside a function body, we still don't want to
       call expand_expr to calculate the size of a variable-sized array.
       We haven't necessarily assigned RTL to all variables yet, so it's
       not safe to try to expand expressions involving them.  */
-   immediate_size_expand = 0;
    cfun->x_dont_save_pending_sizes_p = 1;
  }
  
  /* Finish up a function declaration and compile that function
     all the way to assembler language output.  The free the storage
     for the function definition.
--- 6171,6245 ----
  store_parm_decls (void)
  {
    tree fndecl = current_function_decl;
+   bool proto;
  
!   /* The argument information block for FNDECL.  */
!   struct c_arg_info *arg_info = current_function_arg_info;
!   current_function_arg_info = 0;
  
!   /* True if this definition is written with a prototype.  Note:
!      despite C99 6.7.5.3p14, we can *not* treat an empty argument
!      list in a function definition as equivalent to (void) -- an
!      empty argument list specifies the function has no parameters,
!      but only (void) sets up a prototype for future calls.  */
!   proto = arg_info->types != 0;
  
!   if (proto)
!     store_parm_decls_newstyle (fndecl, arg_info);
    else
!     store_parm_decls_oldstyle (fndecl, arg_info);
  
!   /* The next call to push_scope will be a function body.  */
  
    next_is_function_body = true;
  
    /* Write a record describing this function definition to the prototypes
       file (if requested).  */
  
!   gen_aux_info_record (fndecl, 1, 0, proto);
  
    /* Initialize the RTL code for the function.  */
    allocate_struct_function (fndecl);
  
    /* Begin the statement tree for this function.  */
!   DECL_SAVED_TREE (fndecl) = push_stmt_list ();
  
!   /* ??? Insert the contents of the pending sizes list into the function
!      to be evaluated.  The only reason left to have this is
! 	void foo(int n, int array[n++])
!      because we throw away the array type in favor of a pointer type, and
!      thus won't naturally see the SAVE_EXPR containing the increment.  All
!      other pending sizes would be handled by gimplify_parameters.  */
!   {
!     tree t;
!     for (t = nreverse (get_pending_sizes ()); t ; t = TREE_CHAIN (t))
!       add_stmt (TREE_VALUE (t));
!   }
  
    /* Even though we're inside a function body, we still don't want to
       call expand_expr to calculate the size of a variable-sized array.
       We haven't necessarily assigned RTL to all variables yet, so it's
       not safe to try to expand expressions involving them.  */
    cfun->x_dont_save_pending_sizes_p = 1;
  }
  
+ /* Handle attribute((warn_unused_result)) on FNDECL and all its nested
+    functions.  */
+ 
+ static void
+ c_warn_unused_result_recursively (tree fndecl)
+ {
+   struct cgraph_node *cgn;
+ 
+   /* Handle attribute((warn_unused_result)).  Relies on gimple input.  */
+   c_warn_unused_result (&DECL_SAVED_TREE (fndecl));
+ 
+   /* Finalize all nested functions now.  */
+   cgn = cgraph_node (fndecl);
+   for (cgn = cgn->nested; cgn ; cgn = cgn->next_nested)
+     c_warn_unused_result_recursively (cgn->decl);
+ }
+ 
  /* Finish up a function declaration and compile that function
     all the way to assembler language output.  The free the storage
     for the function definition.
*************** finish_function (void)
*** 6025,6045 ****
  {
    tree fndecl = current_function_decl;
  
!   /* When a function declaration is totally empty, e.g.
!         void foo(void) { }
!      (the argument list is irrelevant) the compstmt rule will not
!      bother calling pushlevel/poplevel, which means we get here with
!      the scope stack out of sync.  Detect this situation by noticing
!      that current_scope is still as store_parm_decls left it, and do
!      a dummy push/pop to get back to consistency.
!      Note that the call to pushlevel does not actually push another
!      scope - see there for details.  */
! 
!   if (current_scope->parm_flag && next_is_function_body)
!     {
!       pushlevel (0);
!       poplevel (0, 0, 0);
!     }
  
    if (TREE_CODE (fndecl) == FUNCTION_DECL
        && targetm.calls.promote_prototypes (TREE_TYPE (fndecl)))
--- 6251,6257 ----
  {
    tree fndecl = current_function_decl;
  
!   label_context_stack = label_context_stack->next;
  
    if (TREE_CODE (fndecl) == FUNCTION_DECL
        && targetm.calls.promote_prototypes (TREE_TYPE (fndecl)))
*************** finish_function (void)
*** 6070,6093 ****
  	  /* If warn_main is 1 (-Wmain) or 2 (-Wall), we have already warned.
  	     If warn_main is -1 (-Wno-main) we don't want to be warned.  */
  	  if (!warn_main)
! 	    pedwarn ("%Jreturn type of '%D' is not `int'", fndecl, fndecl);
  	}
        else
  	{
- #ifdef DEFAULT_MAIN_RETURN
- 	  /* Make it so that `main' always returns success by default.  */
- 	  DEFAULT_MAIN_RETURN;
- #else
  	  if (flag_isoc99)
! 	    c_expand_return (integer_zero_node);
! #endif
  	}
      }
  
-   finish_fname_decls ();
- 
    /* Tie off the statement tree for this function.  */
!   finish_stmt_tree (&DECL_SAVED_TREE (fndecl));
  
    /* Complain if there's just no return statement.  */
    if (warn_return_type
--- 6282,6306 ----
  	  /* If warn_main is 1 (-Wmain) or 2 (-Wall), we have already warned.
  	     If warn_main is -1 (-Wno-main) we don't want to be warned.  */
  	  if (!warn_main)
! 	    pedwarn ("%Jreturn type of %qD is not %<int%>", fndecl, fndecl);
  	}
        else
  	{
  	  if (flag_isoc99)
! 	    {
! 	      tree stmt = c_finish_return (integer_zero_node);
! 	      /* Hack.  We don't want the middle-end to warn that this
! 		 return is unreachable, so put the statement on the
! 		 special line 0.  */
! 	      annotate_with_file_line (stmt, input_filename, 0);
! 	    }
  	}
      }
  
    /* Tie off the statement tree for this function.  */
!   DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
! 
!   finish_fname_decls ();
  
    /* Complain if there's just no return statement.  */
    if (warn_return_type
*************** finish_function (void)
*** 6111,6199 ****
        && current_function_returns_null)
      warning ("this function may return with or without a value");
  
!   /* We're leaving the context of this function, so zap cfun.  It's still in
!      DECL_SAVED_INSNS, and we'll restore it in tree_rest_of_compilation.  */
!   cfun = NULL;
! 
!   /* ??? Objc emits functions after finalizing the compilation unit.
!      This should be cleaned up later and this conditional removed.  */
!   if (!cgraph_global_info_ready)
!     cgraph_finalize_function (fndecl, false);
!   else
!     c_expand_body (fndecl);
!   current_function_decl = NULL;
! }
  
! /* Generate the RTL for a deferred function FNDECL.  */
  
! void
! c_expand_deferred_function (tree fndecl)
! {
!   /* DECL_INLINE or DECL_RESULT might got cleared after the inline
!      function was deferred, e.g. in duplicate_decls.  */
!   if (DECL_INLINE (fndecl) && DECL_RESULT (fndecl))
!     {
!       if (flag_inline_trees)
! 	{
! 	  timevar_push (TV_INTEGRATION);
! 	  optimize_inline_calls (fndecl);
! 	  timevar_pop (TV_INTEGRATION);
! 	}
!       c_expand_body (fndecl);
!       current_function_decl = NULL;
!     }
! }
  
! /* Generate the RTL for the body of FNDECL.  If NESTED_P is nonzero,
!    then we are already in the process of generating RTL for another
!    function.  */
  
! static void
! c_expand_body_1 (tree fndecl, int nested_p)
! {
!   if (nested_p)
      {
!       /* Make sure that we will evaluate variable-sized types involved
! 	 in our function's type.  */
!       expand_pending_sizes (DECL_LANG_SPECIFIC (fndecl)->pending_sizes);
! 
!       /* Squirrel away our current state.  */
!       push_function_context ();
!     }
!     
!   tree_rest_of_compilation (fndecl, nested_p);
  
!   if (nested_p)
!     /* Return to the enclosing function.  */
!     pop_function_context ();
  
!   if (DECL_STATIC_CONSTRUCTOR (fndecl))
!     {
!       if (targetm.have_ctors_dtors)
! 	(* targetm.asm_out.constructor) (XEXP (DECL_RTL (fndecl), 0),
! 				         DEFAULT_INIT_PRIORITY);
        else
! 	static_ctors = tree_cons (NULL_TREE, fndecl, static_ctors);
      }
  
!   if (DECL_STATIC_DESTRUCTOR (fndecl))
!     {
!       if (targetm.have_ctors_dtors)
! 	(* targetm.asm_out.destructor) (XEXP (DECL_RTL (fndecl), 0),
! 				        DEFAULT_INIT_PRIORITY);
!       else
! 	static_dtors = tree_cons (NULL_TREE, fndecl, static_dtors);
!     }
  }
  
! /* Like c_expand_body_1 but only for unnested functions.  */
  
  void
  c_expand_body (tree fndecl)
  {
  
!   if (DECL_INITIAL (fndecl) && DECL_INITIAL (fndecl) != error_mark_node)
!     c_expand_body_1 (fndecl, 0);
  }
  
  /* Check the declarations given in a for-loop for satisfying the C99
--- 6324,6406 ----
        && current_function_returns_null)
      warning ("this function may return with or without a value");
  
!   /* Store the end of the function, so that we get good line number
!      info for the epilogue.  */
!   cfun->function_end_locus = input_location;
  
!   /* If we don't have ctors/dtors sections, and this is a static
!      constructor or destructor, it must be recorded now.  */
!   if (DECL_STATIC_CONSTRUCTOR (fndecl)
!       && !targetm.have_ctors_dtors)
!     static_ctors = tree_cons (NULL_TREE, fndecl, static_ctors);
!   if (DECL_STATIC_DESTRUCTOR (fndecl)
!       && !targetm.have_ctors_dtors)
!     static_dtors = tree_cons (NULL_TREE, fndecl, static_dtors);
  
!   /* Finalize the ELF visibility for the function.  */
!   c_determine_visibility (fndecl);
  
!   /* Genericize before inlining.  Delay genericizing nested functions
!      until their parent function is genericized.  Since finalizing
!      requires GENERIC, delay that as well.  */
  
!   if (DECL_INITIAL (fndecl) && DECL_INITIAL (fndecl) != error_mark_node
!       && !undef_nested_function)
      {
!       if (!decl_function_context (fndecl))
!         {
!           c_genericize (fndecl);
!           c_warn_unused_result_recursively (fndecl);
  
! 	  /* ??? Objc emits functions after finalizing the compilation unit.
! 	     This should be cleaned up later and this conditional removed.  */
! 	  if (cgraph_global_info_ready)
! 	    {
! 	      c_expand_body (fndecl);
! 	      return;
! 	    }
  
! 	  cgraph_finalize_function (fndecl, false);
!         }
        else
!         {
!           /* Register this function with cgraph just far enough to get it
!             added to our parent's nested function list.  Handy, since the
!             C front end doesn't have such a list.  */
!           (void) cgraph_node (fndecl);
!         }
      }
  
!   if (!decl_function_context (fndecl))
!     undef_nested_function = false;
! 
!   /* We're leaving the context of this function, so zap cfun.
!      It's still in DECL_STRUCT_FUNCTION, and we'll restore it in
!      tree_rest_of_compilation.  */
!   cfun = NULL;
!   current_function_decl = NULL;
  }
  
! /* Generate the RTL for the body of FNDECL.  */
  
  void
  c_expand_body (tree fndecl)
  {
  
!   if (!DECL_INITIAL (fndecl)
!       || DECL_INITIAL (fndecl) == error_mark_node)
!     return;
! 
!   tree_rest_of_compilation (fndecl);
! 
!   if (DECL_STATIC_CONSTRUCTOR (fndecl)
!       && targetm.have_ctors_dtors)
!     targetm.asm_out.constructor (XEXP (DECL_RTL (fndecl), 0),
!                                  DEFAULT_INIT_PRIORITY);
!   if (DECL_STATIC_DESTRUCTOR (fndecl)
!       && targetm.have_ctors_dtors)
!     targetm.asm_out.destructor (XEXP (DECL_RTL (fndecl), 0),
!                                 DEFAULT_INIT_PRIORITY);
  }
  
  /* Check the declarations given in a for-loop for satisfying the C99
*************** c_expand_body (tree fndecl)
*** 6201,6214 ****
  void
  check_for_loop_decls (void)
  {
!   tree t;
  
    if (!flag_isoc99)
      {
        /* If we get here, declarations have been used in a for loop without
  	 the C99 for loop scope.  This doesn't make much sense, so don't
  	 allow it.  */
!       error ("'for' loop initial declaration used outside C99 mode");
        return;
      }
    /* C99 subclause 6.8.5 paragraph 3:
--- 6408,6421 ----
  void
  check_for_loop_decls (void)
  {
!   struct c_binding *b;
  
    if (!flag_isoc99)
      {
        /* If we get here, declarations have been used in a for loop without
  	 the C99 for loop scope.  This doesn't make much sense, so don't
  	 allow it.  */
!       error ("%<for%> loop initial declaration used outside C99 mode");
        return;
      }
    /* C99 subclause 6.8.5 paragraph 3:
*************** check_for_loop_decls (void)
*** 6225,6259 ****
       interpretation, to avoid creating an extension which later causes
       problems.  */
  
!   for (t = current_scope->tags; t; t = TREE_CHAIN (t))
      {
!       if (TREE_PURPOSE (t) != 0)
!         {
!           enum tree_code code = TREE_CODE (TREE_VALUE (t));
  
!           if (code == RECORD_TYPE)
!             error ("'struct %s' declared in 'for' loop initial declaration",
!                    IDENTIFIER_POINTER (TREE_PURPOSE (t)));
!           else if (code == UNION_TYPE)
!             error ("'union %s' declared in 'for' loop initial declaration",
!                    IDENTIFIER_POINTER (TREE_PURPOSE (t)));
!           else
!             error ("'enum %s' declared in 'for' loop initial declaration",
!                    IDENTIFIER_POINTER (TREE_PURPOSE (t)));
!         }
!     }
  
!   for (t = getdecls (); t; t = TREE_CHAIN (t))
!     {
!       if (TREE_CODE (t) != VAR_DECL && DECL_NAME (t))
! 	error ("%Jdeclaration of non-variable '%D' in 'for' loop "
!                "initial declaration", t, t);
!       else if (TREE_STATIC (t))
! 	error ("%Jdeclaration of static variable '%D' in 'for' loop "
! 	       "initial declaration", t, t);
!       else if (DECL_EXTERNAL (t))
! 	error ("%Jdeclaration of 'extern' variable '%D' in 'for' loop "
!                "initial declaration", t, t);
      }
  }
  
--- 6432,6472 ----
       interpretation, to avoid creating an extension which later causes
       problems.  */
  
!   for (b = current_scope->bindings; b; b = b->prev)
      {
!       tree id = b->id;
!       tree decl = b->decl;
  
!       if (!id)
! 	continue;
  
!       switch (TREE_CODE (decl))
! 	{
! 	case VAR_DECL:
! 	  if (TREE_STATIC (decl))
! 	    error ("%Jdeclaration of static variable %qD in %<for%> loop "
! 		   "initial declaration", decl, decl);
! 	  else if (DECL_EXTERNAL (decl))
! 	    error ("%Jdeclaration of %<extern%> variable %qD in %<for%> loop "
! 		   "initial declaration", decl, decl);
! 	  break;
! 
! 	case RECORD_TYPE:
! 	  error ("%<struct %E%> declared in %<for%> loop initial declaration",
! 		 id);
! 	  break;
! 	case UNION_TYPE:
! 	  error ("%<union %E%> declared in %<for%> loop initial declaration",
! 		 id);
! 	  break;
! 	case ENUMERAL_TYPE:
! 	  error ("%<enum %E%> declared in %<for%> loop initial declaration",
! 		 id);
! 	  break;
! 	default:
! 	  error ("%Jdeclaration of non-variable %qD in %<for%> loop "
! 		 "initial declaration", decl, decl);
! 	}
      }
  }
  
*************** void
*** 6264,6276 ****
  c_push_function_context (struct function *f)
  {
    struct language_function *p;
!   p = ggc_alloc (sizeof (struct language_function));
    f->language = p;
  
    p->base.x_stmt_tree = c_stmt_tree;
!   p->base.x_scope_stmt_stack = c_scope_stmt_stack;
!   p->x_in_iteration_stmt = c_in_iteration_stmt;
!   p->x_in_case_stmt = c_in_case_stmt;
    p->returns_value = current_function_returns_value;
    p->returns_null = current_function_returns_null;
    p->returns_abnormally = current_function_returns_abnormally;
--- 6477,6490 ----
  c_push_function_context (struct function *f)
  {
    struct language_function *p;
!   p = GGC_NEW (struct language_function);
    f->language = p;
  
    p->base.x_stmt_tree = c_stmt_tree;
!   p->x_break_label = c_break_label;
!   p->x_cont_label = c_cont_label;
!   p->x_switch_stack = c_switch_stack;
!   p->arg_info = current_function_arg_info;
    p->returns_value = current_function_returns_value;
    p->returns_null = current_function_returns_null;
    p->returns_abnormally = current_function_returns_abnormally;
*************** c_pop_function_context (struct function 
*** 6285,6291 ****
  {
    struct language_function *p = f->language;
  
!   if (DECL_SAVED_INSNS (current_function_decl) == 0
        && DECL_SAVED_TREE (current_function_decl) == NULL_TREE)
      {
        /* Stop pointing to the local nodes about to be freed.  */
--- 6499,6505 ----
  {
    struct language_function *p = f->language;
  
!   if (DECL_STRUCT_FUNCTION (current_function_decl) == 0
        && DECL_SAVED_TREE (current_function_decl) == NULL_TREE)
      {
        /* Stop pointing to the local nodes about to be freed.  */
*************** c_pop_function_context (struct function 
*** 6296,6304 ****
      }
  
    c_stmt_tree = p->base.x_stmt_tree;
!   c_scope_stmt_stack = p->base.x_scope_stmt_stack;
!   c_in_iteration_stmt = p->x_in_iteration_stmt;
!   c_in_case_stmt = p->x_in_case_stmt;
    current_function_returns_value = p->returns_value;
    current_function_returns_null = p->returns_null;
    current_function_returns_abnormally = p->returns_abnormally;
--- 6510,6519 ----
      }
  
    c_stmt_tree = p->base.x_stmt_tree;
!   c_break_label = p->x_break_label;
!   c_cont_label = p->x_cont_label;
!   c_switch_stack = p->x_switch_stack;
!   current_function_arg_info = p->arg_info;
    current_function_returns_value = p->returns_value;
    current_function_returns_null = p->returns_null;
    current_function_returns_abnormally = p->returns_abnormally;
*************** c_dup_lang_specific_decl (tree decl)
*** 6318,6324 ****
    if (!DECL_LANG_SPECIFIC (decl))
      return;
  
!   ld = ggc_alloc (sizeof (struct lang_decl));
    memcpy (ld, DECL_LANG_SPECIFIC (decl), sizeof (struct lang_decl));
    DECL_LANG_SPECIFIC (decl) = ld;
  }
--- 6533,6539 ----
    if (!DECL_LANG_SPECIFIC (decl))
      return;
  
!   ld = GGC_NEW (struct lang_decl);
    memcpy (ld, DECL_LANG_SPECIFIC (decl), sizeof (struct lang_decl));
    DECL_LANG_SPECIFIC (decl) = ld;
  }
*************** current_stmt_tree (void)
*** 6348,6421 ****
    return &c_stmt_tree;
  }
  
- /* Returns the stack of SCOPE_STMTs for the current function.  */
- 
- tree *
- current_scope_stmt_stack (void)
- {
-   return &c_scope_stmt_stack;
- }
- 
  /* Nonzero if TYPE is an anonymous union or struct type.  Always 0 in
     C.  */
  
  int
! anon_aggr_type_p (tree node ATTRIBUTE_UNUSED)
  {
    return 0;
  }
  
- /* Dummy function in place of callback used by C++.  */
- 
- void
- extract_interface_info (void)
- {
- }
- 
- /* Return a new COMPOUND_STMT, after adding it to the current
-    statement tree.  */
- 
- tree
- c_begin_compound_stmt (void)
- {
-   tree stmt;
- 
-   /* Create the COMPOUND_STMT.  */
-   stmt = add_stmt (build_stmt (COMPOUND_STMT, NULL_TREE));
- 
-   return stmt;
- }
- 
- /* Expand T (a DECL_STMT) if it declares an entity not handled by the
-    common code.  */
- 
- void
- c_expand_decl_stmt (tree t)
- {
-   tree decl = DECL_STMT_DECL (t);
- 
-   /* Expand nested functions.  */
-   if (TREE_CODE (decl) == FUNCTION_DECL
-       && DECL_CONTEXT (decl) == current_function_decl
-       && DECL_SAVED_TREE (decl))
-     c_expand_body_1 (decl, 1);
- }
- 
  /* Return the global value of T as a symbol.  */
  
  tree
  identifier_global_value	(tree t)
  {
!   tree decl = IDENTIFIER_SYMBOL_VALUE (t);
!   if (decl == 0 || DECL_FILE_SCOPE_P (decl))
!     return decl;
  
!   /* Shadowed by something else; find the true global value.  */
!   for (decl = global_scope->names; decl; decl = TREE_CHAIN (decl))
!     if (DECL_NAME (decl) == t)
!       return decl;
  
-   /* Only local values for this decl.  */
    return 0;
  }
  
--- 6563,6588 ----
    return &c_stmt_tree;
  }
  
  /* Nonzero if TYPE is an anonymous union or struct type.  Always 0 in
     C.  */
  
  int
! anon_aggr_type_p (tree ARG_UNUSED (node))
  {
    return 0;
  }
  
  /* Return the global value of T as a symbol.  */
  
  tree
  identifier_global_value	(tree t)
  {
!   struct c_binding *b;
  
!   for (b = I_SYMBOL_BINDING (t); b; b = b->shadowed)
!     if (B_IN_FILE_SCOPE (b) || B_IN_EXTERNAL_SCOPE (b))
!       return b->decl;
  
    return 0;
  }
  
*************** identifier_global_value	(tree t)
*** 6425,6436 ****
  void
  record_builtin_type (enum rid rid_index, const char *name, tree type)
  {
!   tree id;
    if (name == 0)
      id = ridpointers[(int) rid_index];
    else
      id = get_identifier (name);
!   pushdecl (build_decl (TYPE_DECL, id, type));
  }
  
  /* Build the void_list_node (void_type_node having been created).  */
--- 6592,6606 ----
  void
  record_builtin_type (enum rid rid_index, const char *name, tree type)
  {
!   tree id, decl;
    if (name == 0)
      id = ridpointers[(int) rid_index];
    else
      id = get_identifier (name);
!   decl = build_decl (TYPE_DECL, id, type);
!   pushdecl (decl);
!   if (debug_hooks->type_decl)
!     debug_hooks->type_decl (decl, false);
  }
  
  /* Build the void_list_node (void_type_node having been created).  */
*************** build_void_list_node (void)
*** 6441,6654 ****
    return t;
  }
  
! /* Return something to represent absolute declarators containing a *.
!    TARGET is the absolute declarator that the * contains.
!    TYPE_QUALS_ATTRS is a list of modifiers such as const or volatile
!    to apply to the pointer type, represented as identifiers, possible mixed
!    with attributes.
! 
!    We return an INDIRECT_REF whose "contents" are TARGET (inside a TREE_LIST,
!    if attributes are present) and whose type is the modifier list.  */
  
! tree
! make_pointer_declarator (tree type_quals_attrs, tree target)
  {
!   tree quals, attrs;
!   tree itarget = target;
!   split_specs_attrs (type_quals_attrs, &quals, &attrs);
!   if (attrs != NULL_TREE)
!     itarget = tree_cons (attrs, target, NULL_TREE);
!   return build1 (INDIRECT_REF, quals, itarget);
  }
  
! /* A wrapper around lhd_set_decl_assembler_name that gives static
!    variables their C names if they are at file scope and only one
!    translation unit is being compiled, for backwards compatibility
!    with certain bizarre assembler hacks (like crtstuff.c).  */
  
! void
! c_static_assembler_name (tree decl)
  {
!   if (num_in_fnames == 1
!       && !TREE_PUBLIC (decl) && DECL_CONTEXT (decl)
!       && TREE_CODE (DECL_CONTEXT (decl)) == TRANSLATION_UNIT_DECL)
!     SET_DECL_ASSEMBLER_NAME (decl, DECL_NAME (decl));
!   else
!     lhd_set_decl_assembler_name (decl);
  }
  
! /* Hash and equality functions for link_hash_table: key off
!    DECL_ASSEMBLER_NAME.  */
  
! static hashval_t
! link_hash_hash (const void *x_p)
  {
!   tree x = (tree)x_p;
!   return (hashval_t) (long)DECL_ASSEMBLER_NAME (x);
  }
  
! static int
! link_hash_eq (const void *x1_p, const void *x2_p)
  {
!   tree x1 = (tree)x1_p;
!   tree x2 = (tree)x2_p;
!   return DECL_ASSEMBLER_NAME (x1) == DECL_ASSEMBLER_NAME (x2);
  }
  
! /* Propagate information between definitions and uses between multiple
!    translation units in TU_LIST based on linkage rules.  */
  
! void
! merge_translation_unit_decls (void)
  {
!   const tree tu_list = current_file_decl;
!   tree tu;
!   tree decl;
!   htab_t link_hash_table;
!   tree block;
  
!   /* Create the BLOCK that poplevel would have created, but don't
!      actually call poplevel since that's expensive.  */
!   block = make_node (BLOCK);
!   BLOCK_VARS (block) = current_scope->names;
!   TREE_USED (block) = 1;
!   DECL_INITIAL (current_file_decl) = block;
  
!   /* If only one translation unit seen, no copying necessary.  */
!   if (TREE_CHAIN (tu_list) == NULL_TREE)
!     return;
  
!   link_hash_table = htab_create (1021, link_hash_hash, link_hash_eq, NULL);
  
!   /* Enter any actual definitions into the hash table.  */
!   for (tu = tu_list; tu; tu = TREE_CHAIN (tu))
!     for (decl = BLOCK_VARS (DECL_INITIAL (tu)); decl; decl = TREE_CHAIN (decl))
!       if (TREE_PUBLIC (decl) && ! DECL_EXTERNAL (decl))
! 	{
! 	  PTR *slot;
! 	  slot = htab_find_slot (link_hash_table, decl, INSERT);
  
! 	  /* If we've already got a definition, work out which one is
! 	     the real one, put it into the hash table, and make the
! 	     other one DECL_EXTERNAL.  This is important to avoid
! 	     putting out two definitions of the same symbol in the
! 	     assembly output.  */
! 	  if (*slot != NULL)
! 	    {
! 	      tree old_decl = (tree) *slot;
  
! 	      /* If this is weak or common or whatever, suppress it
! 		 in favor of the other definition.  */
! 	      if (DECL_WEAK (decl))
! 		DECL_EXTERNAL (decl) = 1;
! 	      else if (DECL_WEAK (old_decl) && ! DECL_WEAK (decl))
! 		DECL_EXTERNAL (old_decl) = 1;
! 	      else if (DECL_COMMON (decl) || DECL_ONE_ONLY (decl))
! 		DECL_EXTERNAL (decl) = 1;
! 	      else if (DECL_COMMON (old_decl) || DECL_ONE_ONLY (old_decl))
! 		DECL_EXTERNAL (old_decl) = 1;
  
! 	      if (DECL_EXTERNAL (decl))
  		{
! 		  DECL_INITIAL (decl) = NULL_TREE;
! 		  DECL_COMMON (decl) = 0;
! 		  DECL_ONE_ONLY (decl) = 0;
! 		  DECL_WEAK (decl) = 0;
  		}
! 	      else if (DECL_EXTERNAL (old_decl))
  		{
! 		  DECL_INITIAL (old_decl) = NULL_TREE;
! 		  DECL_COMMON (old_decl) = 0;
! 		  DECL_ONE_ONLY (old_decl) = 0;
! 		  DECL_WEAK (old_decl) = 0;
! 		  *slot = decl;
  		}
  	      else
! 		{
! 		  error ("%Jredefinition of global '%D'", decl, decl);
! 		  error ("%J'%D' previously defined here", old_decl, old_decl);
! 		}
  	    }
- 	  else
- 	    *slot = decl;
  	}
  
!   /* Now insert the desired information from all the definitions
!      into any plain declarations.  */
!   for (tu = tu_list; tu; tu = TREE_CHAIN (tu))
!     for (decl = BLOCK_VARS (DECL_INITIAL (tu)); decl; decl = TREE_CHAIN (decl))
!       if (TREE_PUBLIC (decl) && DECL_EXTERNAL (decl))
  	{
! 	  tree global_decl;
! 	  global_decl = htab_find (link_hash_table, decl);
  
! 	  if (! global_decl)
! 	    continue;
  
! 	  /* Print any appropriate error messages, and partially merge
! 	     the decls.  */
! 	  (void) duplicate_decls (decl, global_decl);
  	}
  
!   htab_delete (link_hash_table);
  }
  
! /* Perform final processing on file-scope data.  */
  
! void
! c_write_global_declarations(void)
  {
!   tree link;
  
!   for (link = current_file_decl; link; link = TREE_CHAIN (link))
      {
!       tree globals = BLOCK_VARS (DECL_INITIAL (link));
!       int len = list_length (globals);
!       tree *vec = xmalloc (sizeof (tree) * len);
!       int i;
!       tree decl;
  
!       /* Process the decls in the order they were written.  */
  
!       for (i = 0, decl = globals; i < len; i++, decl = TREE_CHAIN (decl))
! 	vec[i] = decl;
  
!       wrapup_global_declarations (vec, len);
  
!       check_global_declarations (vec, len);
  
!       /* Clean up.  */
!       free (vec);
!     }
  }
  
! /* Reset the parser's state in preparation for a new file.  */
  
  void
! c_reset_state (void)
  {
!   tree link;
!   tree file_scope_decl;
  
!   /* Pop the global scope.  */
!   if (current_scope != global_scope)
!       current_scope = global_scope;
!   file_scope_decl = current_file_decl;
!   DECL_INITIAL (file_scope_decl) = poplevel (1, 0, 0);
!   BLOCK_SUPERCONTEXT (DECL_INITIAL (file_scope_decl)) = file_scope_decl;
!   truly_local_externals = NULL_TREE;
  
!   /* Start a new global binding level.  */
!   pushlevel (0);
!   global_scope = current_scope;
!   current_file_decl = build_decl (TRANSLATION_UNIT_DECL, NULL, NULL);
!   TREE_CHAIN (current_file_decl) = file_scope_decl;
  
!   /* Reintroduce the builtin declarations.  */
!   for (link = first_builtin_decl;
!        link != TREE_CHAIN (last_builtin_decl);
!        link = TREE_CHAIN (link))
!     pushdecl (copy_node (link));
  }
  
  #include "gt-c-decl.h"
--- 6611,7375 ----
    return t;
  }
  
! /* Return a c_parm structure with the given SPECS, ATTRS and DECLARATOR.  */
  
! struct c_parm *
! build_c_parm (struct c_declspecs *specs, tree attrs,
! 	      struct c_declarator *declarator)
  {
!   struct c_parm *ret = XOBNEW (&parser_obstack, struct c_parm);
!   ret->specs = specs;
!   ret->attrs = attrs;
!   ret->declarator = declarator;
!   return ret;
  }
  
! /* Return a declarator with nested attributes.  TARGET is the inner
!    declarator to which these attributes apply.  ATTRS are the
!    attributes.  */
  
! struct c_declarator *
! build_attrs_declarator (tree attrs, struct c_declarator *target)
  {
!   struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
!   ret->kind = cdk_attrs;
!   ret->declarator = target;
!   ret->u.attrs = attrs;
!   return ret;
  }
  
! /* Return a declarator for a function with arguments specified by ARGS
!    and return type specified by TARGET.  */
  
! struct c_declarator *
! build_function_declarator (struct c_arg_info *args,
! 			   struct c_declarator *target)
  {
!   struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
!   ret->kind = cdk_function;
!   ret->declarator = target;
!   ret->u.arg_info = args;
!   return ret;
  }
  
! /* Return a declarator for the identifier IDENT (which may be
!    NULL_TREE for an abstract declarator).  */
! 
! struct c_declarator *
! build_id_declarator (tree ident)
  {
!   struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
!   ret->kind = cdk_id;
!   ret->declarator = 0;
!   ret->u.id = ident;
!   return ret;
  }
  
! /* Return something to represent absolute declarators containing a *.
!    TARGET is the absolute declarator that the * contains.
!    TYPE_QUALS_ATTRS is a structure for type qualifiers and attributes
!    to apply to the pointer type.  */
  
! struct c_declarator *
! make_pointer_declarator (struct c_declspecs *type_quals_attrs,
! 			 struct c_declarator *target)
  {
!   tree attrs;
!   int quals = 0;
!   struct c_declarator *itarget = target;
!   struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
!   if (type_quals_attrs)
!     {
!       attrs = type_quals_attrs->attrs;
!       quals = quals_from_declspecs (type_quals_attrs);
!       if (attrs != NULL_TREE)
! 	itarget = build_attrs_declarator (attrs, target);
!     }
!   ret->kind = cdk_pointer;
!   ret->declarator = itarget;
!   ret->u.pointer_quals = quals;
!   return ret;
! }
  
! /* Return a pointer to a structure for an empty list of declaration
!    specifiers.  */
  
! struct c_declspecs *
! build_null_declspecs (void)
! {
!   struct c_declspecs *ret = XOBNEW (&parser_obstack, struct c_declspecs);
!   ret->type = 0;
!   ret->decl_attr = 0;
!   ret->attrs = 0;
!   ret->typespec_word = cts_none;
!   ret->storage_class = csc_none;
!   ret->non_sc_seen_p = false;
!   ret->typedef_p = false;
!   ret->tag_defined_p = false;
!   ret->explicit_signed_p = false;
!   ret->deprecated_p = false;
!   ret->default_int_p = false;
!   ret->long_p = false;
!   ret->long_long_p = false;
!   ret->short_p = false;
!   ret->signed_p = false;
!   ret->unsigned_p = false;
!   ret->complex_p = false;
!   ret->inline_p = false;
!   ret->thread_p = false;
!   ret->const_p = false;
!   ret->volatile_p = false;
!   ret->restrict_p = false;
!   return ret;
! }
  
! /* Add the type qualifier QUAL to the declaration specifiers SPECS,
!    returning SPECS.  */
  
! struct c_declspecs *
! declspecs_add_qual (struct c_declspecs *specs, tree qual)
! {
!   enum rid i;
!   bool dupe = false;
!   specs->non_sc_seen_p = true;
!   gcc_assert (TREE_CODE (qual) == IDENTIFIER_NODE
! 	      && C_IS_RESERVED_WORD (qual));
!   i = C_RID_CODE (qual);
!   switch (i)
!     {
!     case RID_CONST:
!       dupe = specs->const_p;
!       specs->const_p = true;
!       break;
!     case RID_VOLATILE:
!       dupe = specs->volatile_p;
!       specs->volatile_p = true;
!       break;
!     case RID_RESTRICT:
!       dupe = specs->restrict_p;
!       specs->restrict_p = true;
!       break;
!     default:
!       gcc_unreachable ();
!     }
!   if (dupe && pedantic && !flag_isoc99)
!     pedwarn ("duplicate %qs", IDENTIFIER_POINTER (qual));
!   return specs;
! }
  
! /* Add the type specifier TYPE to the declaration specifiers SPECS,
!    returning SPECS.  */
  
! struct c_declspecs *
! declspecs_add_type (struct c_declspecs *specs, struct c_typespec spec)
! {
!   tree type = spec.spec;
!   specs->non_sc_seen_p = true;
!   if (TREE_DEPRECATED (type))
!     specs->deprecated_p = true;
  
!   /* Handle type specifier keywords.  */
!   if (TREE_CODE (type) == IDENTIFIER_NODE && C_IS_RESERVED_WORD (type))
!     {
!       enum rid i = C_RID_CODE (type);
!       if (specs->type)
! 	{
! 	  error ("two or more data types in declaration specifiers");
! 	  return specs;
! 	}
!       if ((int) i <= (int) RID_LAST_MODIFIER)
! 	{
! 	  /* "long", "short", "signed", "unsigned" or "_Complex".  */
! 	  bool dupe = false;
! 	  switch (i)
! 	    {
! 	    case RID_LONG:
! 	      if (specs->long_long_p)
  		{
! 		  error ("%<long long long%> is too long for GCC");
! 		  break;
  		}
! 	      if (specs->long_p)
  		{
! 		  if (specs->typespec_word == cts_double)
! 		    {
! 		      error ("both %<long long%> and %<double%> in "
! 			     "declaration specifiers");
! 		      break;
! 		    }
! 		  if (pedantic && !flag_isoc99 && !in_system_header
! 		      && warn_long_long)
! 		    pedwarn ("ISO C90 does not support %<long long%>");
! 		  specs->long_long_p = 1;
! 		  break;
  		}
+ 	      if (specs->short_p)
+ 		error ("both %<long%> and %<short%> in "
+ 		       "declaration specifiers");
+ 	      else if (specs->typespec_word == cts_void)
+ 		error ("both %<long%> and %<void%> in "
+ 		       "declaration specifiers");
+ 	      else if (specs->typespec_word == cts_bool)
+ 		error ("both %<long%> and %<_Bool%> in "
+ 		       "declaration specifiers");
+ 	      else if (specs->typespec_word == cts_char)
+ 		error ("both %<long%> and %<char%> in "
+ 		       "declaration specifiers");
+ 	      else if (specs->typespec_word == cts_float)
+ 		error ("both %<long%> and %<float%> in "
+ 		       "declaration specifiers");
  	      else
! 		specs->long_p = true;
! 	      break;
! 	    case RID_SHORT:
! 	      dupe = specs->short_p;
! 	      if (specs->long_p)
! 		error ("both %<long%> and %<short%> in "
! 		       "declaration specifiers");
! 	      else if (specs->typespec_word == cts_void)
! 		error ("both %<short%> and %<void%> in "
! 		       "declaration specifiers");
! 	      else if (specs->typespec_word == cts_bool)
! 		error ("both %<short%> and %<_Bool%> in "
! 		       "declaration specifiers");
! 	      else if (specs->typespec_word == cts_char)
! 		error ("both %<short%> and %<char%> in "
! 		       "declaration specifiers");
! 	      else if (specs->typespec_word == cts_float)
! 		error ("both %<short%> and %<float%> in "
! 		       "declaration specifiers");
! 	      else if (specs->typespec_word == cts_double)
! 		error ("both %<short%> and %<double%> in "
! 		       "declaration specifiers");
! 	      else
! 		specs->short_p = true;
! 	      break;
! 	    case RID_SIGNED:
! 	      dupe = specs->signed_p;
! 	      if (specs->unsigned_p)
! 		error ("both %<signed%> and %<unsigned%> in "
! 		       "declaration specifiers");
! 	      else if (specs->typespec_word == cts_void)
! 		error ("both %<signed%> and %<void%> in "
! 		       "declaration specifiers");
! 	      else if (specs->typespec_word == cts_bool)
! 		error ("both %<signed%> and %<_Bool%> in "
! 		       "declaration specifiers");
! 	      else if (specs->typespec_word == cts_float)
! 		error ("both %<signed%> and %<float%> in "
! 		       "declaration specifiers");
! 	      else if (specs->typespec_word == cts_double)
! 		error ("both %<signed%> and %<double%> in "
! 		       "declaration specifiers");
! 	      else
! 		specs->signed_p = true;
! 	      break;
! 	    case RID_UNSIGNED:
! 	      dupe = specs->unsigned_p;
! 	      if (specs->signed_p)
! 		error ("both %<signed%> and %<unsigned%> in "
! 		       "declaration specifiers");
! 	      else if (specs->typespec_word == cts_void)
! 		error ("both %<unsigned%> and %<void%> in "
! 		       "declaration specifiers");
! 	      else if (specs->typespec_word == cts_bool)
! 		error ("both %<unsigned%> and %<_Bool%> in "
! 		       "declaration specifiers");
! 	      else if (specs->typespec_word == cts_float)
! 		error ("both %<unsigned%> and %<float%> in "
! 		       "declaration specifiers");
! 	      else if (specs->typespec_word == cts_double)
! 		error ("both %<unsigned%> and %<double%> in "
! 		       "declaration specifiers");
! 	      else
! 		specs->unsigned_p = true;
! 	      break;
! 	    case RID_COMPLEX:
! 	      dupe = specs->complex_p;
! 	      if (pedantic && !flag_isoc99 && !in_system_header)
! 		pedwarn ("ISO C90 does not support complex types");
! 	      if (specs->typespec_word == cts_void)
! 		error ("both %<complex%> and %<void%> in "
! 		       "declaration specifiers");
! 	      else if (specs->typespec_word == cts_bool)
! 		error ("both %<complex%> and %<_Bool%> in "
! 		       "declaration specifiers");
! 	      else
! 		specs->complex_p = true;
! 	      break;
! 	    default:
! 	      gcc_unreachable ();
! 	    }
! 
! 	  if (dupe)
! 	    error ("duplicate %qs", IDENTIFIER_POINTER (type));
! 
! 	  return specs;
! 	}
!       else
! 	{
! 	  /* "void", "_Bool", "char", "int", "float" or "double".  */
! 	  if (specs->typespec_word != cts_none)
! 	    {
! 	      error ("two or more data types in declaration specifiers");
! 	      return specs;
! 	    }
! 	  switch (i)
! 	    {
! 	    case RID_VOID:
! 	      if (specs->long_p)
! 		error ("both %<long%> and %<void%> in "
! 		       "declaration specifiers");
! 	      else if (specs->short_p)
! 		error ("both %<short%> and %<void%> in "
! 		       "declaration specifiers");
! 	      else if (specs->signed_p)
! 		error ("both %<signed%> and %<void%> in "
! 		       "declaration specifiers");
! 	      else if (specs->unsigned_p)
! 		error ("both %<unsigned%> and %<void%> in "
! 		       "declaration specifiers");
! 	      else if (specs->complex_p)
! 		error ("both %<complex%> and %<void%> in "
! 		       "declaration specifiers");
! 	      else
! 		specs->typespec_word = cts_void;
! 	      return specs;
! 	    case RID_BOOL:
! 	      if (specs->long_p)
! 		error ("both %<long%> and %<_Bool%> in "
! 		       "declaration specifiers");
! 	      else if (specs->short_p)
! 		error ("both %<short%> and %<_Bool%> in "
! 		       "declaration specifiers");
! 	      else if (specs->signed_p)
! 		error ("both %<signed%> and %<_Bool%> in "
! 		       "declaration specifiers");
! 	      else if (specs->unsigned_p)
! 		error ("both %<unsigned%> and %<_Bool%> in "
! 		       "declaration specifiers");
! 	      else if (specs->complex_p)
! 		error ("both %<complex%> and %<_Bool%> in "
! 		       "declaration specifiers");
! 	      else
! 		specs->typespec_word = cts_bool;
! 	      return specs;
! 	    case RID_CHAR:
! 	      if (specs->long_p)
! 		error ("both %<long%> and %<char%> in "
! 		       "declaration specifiers");
! 	      else if (specs->short_p)
! 		error ("both %<short%> and %<char%> in "
! 		       "declaration specifiers");
! 	      else
! 		specs->typespec_word = cts_char;
! 	      return specs;
! 	    case RID_INT:
! 	      specs->typespec_word = cts_int;
! 	      return specs;
! 	    case RID_FLOAT:
! 	      if (specs->long_p)
! 		error ("both %<long%> and %<float%> in "
! 		       "declaration specifiers");
! 	      else if (specs->short_p)
! 		error ("both %<short%> and %<float%> in "
! 		       "declaration specifiers");
! 	      else if (specs->signed_p)
! 		error ("both %<signed%> and %<float%> in "
! 		       "declaration specifiers");
! 	      else if (specs->unsigned_p)
! 		error ("both %<unsigned%> and %<float%> in "
! 		       "declaration specifiers");
! 	      else
! 		specs->typespec_word = cts_float;
! 	      return specs;
! 	    case RID_DOUBLE:
! 	      if (specs->long_long_p)
! 		error ("both %<long long%> and %<double%> in "
! 		       "declaration specifiers");
! 	      else if (specs->short_p)
! 		error ("both %<short%> and %<double%> in "
! 		       "declaration specifiers");
! 	      else if (specs->signed_p)
! 		error ("both %<signed%> and %<double%> in "
! 		       "declaration specifiers");
! 	      else if (specs->unsigned_p)
! 		error ("both %<unsigned%> and %<double%> in "
! 		       "declaration specifiers");
! 	      else
! 		specs->typespec_word = cts_double;
! 	      return specs;
! 	    default:
! 	      /* ObjC reserved word "id", handled below.  */
! 	      break;
  	    }
  	}
+     }
  
!   /* Now we have a typedef (a TYPE_DECL node), an identifier (some
!      form of ObjC type, cases such as "int" and "long" being handled
!      above), a TYPE (struct, union, enum and typeof specifiers) or an
!      ERROR_MARK.  In none of these cases may there have previously
!      been any type specifiers.  */
!   if (specs->type || specs->typespec_word != cts_none
!       || specs->long_p || specs->short_p || specs->signed_p
!       || specs->unsigned_p || specs->complex_p)
!     error ("two or more data types in declaration specifiers");
!   else if (TREE_CODE (type) == TYPE_DECL)
!     {
!       if (TREE_TYPE (type) == error_mark_node)
! 	; /* Allow the type to default to int to avoid cascading errors.  */
!       else
  	{
! 	  specs->type = TREE_TYPE (type);
! 	  specs->decl_attr = DECL_ATTRIBUTES (type);
! 	  specs->typedef_p = true;
! 	  specs->explicit_signed_p = C_TYPEDEF_EXPLICITLY_SIGNED (type);
! 	}
!     }
!   else if (TREE_CODE (type) == IDENTIFIER_NODE)
!     {
!       tree t = lookup_name (type);
!       if (!t || TREE_CODE (t) != TYPE_DECL)
! 	error ("%qs fails to be a typedef or built in type",
! 	       IDENTIFIER_POINTER (type));
!       else if (TREE_TYPE (t) == error_mark_node)
! 	;
!       else
! 	specs->type = TREE_TYPE (t);
!     }
!   else if (TREE_CODE (type) != ERROR_MARK)
!     {
!       if (spec.kind == ctsk_tagdef || spec.kind == ctsk_tagfirstref)
! 	specs->tag_defined_p = true;
!       if (spec.kind == ctsk_typeof)
! 	specs->typedef_p = true;
!       specs->type = type;
!     }
  
!   return specs;
! }
  
! /* Add the storage class specifier or function specifier SCSPEC to the
!    declaration specifiers SPECS, returning SPECS.  */
! 
! struct c_declspecs *
! declspecs_add_scspec (struct c_declspecs *specs, tree scspec)
! {
!   enum rid i;
!   enum c_storage_class n = csc_none;
!   bool dupe = false;
!   gcc_assert (TREE_CODE (scspec) == IDENTIFIER_NODE
! 	      && C_IS_RESERVED_WORD (scspec));
!   i = C_RID_CODE (scspec);
!   if (extra_warnings && specs->non_sc_seen_p)
!     warning ("%qs is not at beginning of declaration",
! 	     IDENTIFIER_POINTER (scspec));
!   switch (i)
!     {
!     case RID_INLINE:
!       /* C99 permits duplicate inline.  Although of doubtful utility,
! 	 it seems simplest to permit it in gnu89 mode as well, as
! 	 there is also little utility in maintaining this as a
! 	 difference between gnu89 and C99 inline.  */
!       dupe = false;
!       specs->inline_p = true;
!       break;
!     case RID_THREAD:
!       dupe = specs->thread_p;
!       if (specs->storage_class == csc_auto)
! 	error ("%<__thread%> used with %<auto%>");
!       else if (specs->storage_class == csc_register)
! 	error ("%<__thread%> used with %<register%>");
!       else if (specs->storage_class == csc_typedef)
! 	error ("%<__thread%> used with %<typedef%>");
!       else
! 	specs->thread_p = true;
!       break;
!     case RID_AUTO:
!       n = csc_auto;
!       break;
!     case RID_EXTERN:
!       n = csc_extern;
!       /* Diagnose "__thread extern".  */
!       if (specs->thread_p)
! 	error ("%<__thread%> before %<extern%>");
!       break;
!     case RID_REGISTER:
!       n = csc_register;
!       break;
!     case RID_STATIC:
!       n = csc_static;
!       /* Diagnose "__thread static".  */
!       if (specs->thread_p)
! 	error ("%<__thread%> before %<static%>");
!       break;
!     case RID_TYPEDEF:
!       n = csc_typedef;
!       break;
!     default:
!       gcc_unreachable ();
!     }
!   if (n != csc_none && n == specs->storage_class)
!     dupe = true;
!   if (dupe)
!     error ("duplicate %qs", IDENTIFIER_POINTER (scspec));
!   if (n != csc_none)
!     {
!       if (specs->storage_class != csc_none && n != specs->storage_class)
! 	{
! 	  error ("multiple storage classes in declaration specifiers");
! 	}
!       else
! 	{
! 	  specs->storage_class = n;
! 	  if (n != csc_extern && n != csc_static && specs->thread_p)
! 	    {
! 	      error ("%<__thread%> used with %qs",
! 		     IDENTIFIER_POINTER (scspec));
! 	      specs->thread_p = false;
! 	    }
  	}
+     }
+   return specs;
+ }
  
! /* Add the attributes ATTRS to the declaration specifiers SPECS,
!    returning SPECS.  */
! 
! struct c_declspecs *
! declspecs_add_attrs (struct c_declspecs *specs, tree attrs)
! {
!   specs->attrs = chainon (attrs, specs->attrs);
!   return specs;
  }
  
! /* Combine "long", "short", "signed", "unsigned" and "_Complex" type
!    specifiers with any other type specifier to determine the resulting
!    type.  This is where ISO C checks on complex types are made, since
!    "_Complex long" is a prefix of the valid ISO C type "_Complex long
!    double".  */
  
! struct c_declspecs *
! finish_declspecs (struct c_declspecs *specs)
  {
!   /* If a type was specified as a whole, we have no modifiers and are
!      done.  */
!   if (specs->type != NULL_TREE)
!     {
!       gcc_assert (!specs->long_p && !specs->long_long_p && !specs->short_p
! 		  && !specs->signed_p && !specs->unsigned_p
! 		  && !specs->complex_p);
!       return specs;
!     }
  
!   /* If none of "void", "_Bool", "char", "int", "float" or "double"
!      has been specified, treat it as "int" unless "_Complex" is
!      present and there are no other specifiers.  If we just have
!      "_Complex", it is equivalent to "_Complex double", but e.g.
!      "_Complex short" is equivalent to "_Complex short int".  */
!   if (specs->typespec_word == cts_none)
      {
!       if (specs->long_p || specs->short_p
! 	  || specs->signed_p || specs->unsigned_p)
! 	{
! 	  specs->typespec_word = cts_int;
! 	}
!       else if (specs->complex_p)
! 	{
! 	  specs->typespec_word = cts_double;
! 	  if (pedantic)
! 	    pedwarn ("ISO C does not support plain %<complex%> meaning "
! 		     "%<double complex%>");
! 	}
!       else
! 	{
! 	  specs->typespec_word = cts_int;
! 	  specs->default_int_p = true;
! 	  /* We don't diagnose this here because grokdeclarator will
! 	     give more specific diagnostics according to whether it is
! 	     a function definition.  */
! 	}
!     }
  
!   /* If "signed" was specified, record this to distinguish "int" and
!      "signed int" in the case of a bit-field with
!      -funsigned-bitfields.  */
!   specs->explicit_signed_p = specs->signed_p;
  
!   /* Now compute the actual type.  */
!   switch (specs->typespec_word)
!     {
!     case cts_void:
!       gcc_assert (!specs->long_p && !specs->short_p
! 		  && !specs->signed_p && !specs->unsigned_p
! 		  && !specs->complex_p);
!       specs->type = void_type_node;
!       break;
!     case cts_bool:
!       gcc_assert (!specs->long_p && !specs->short_p
! 		  && !specs->signed_p && !specs->unsigned_p
! 		  && !specs->complex_p);
!       specs->type = boolean_type_node;
!       break;
!     case cts_char:
!       gcc_assert (!specs->long_p && !specs->short_p);
!       gcc_assert (!(specs->signed_p && specs->unsigned_p));
!       if (specs->signed_p)
! 	specs->type = signed_char_type_node;
!       else if (specs->unsigned_p)
! 	specs->type = unsigned_char_type_node;
!       else
! 	specs->type = char_type_node;
!       if (specs->complex_p)
! 	{
! 	  if (pedantic)
! 	    pedwarn ("ISO C does not support complex integer types");
! 	  specs->type = build_complex_type (specs->type);
! 	}
!       break;
!     case cts_int:
!       gcc_assert (!(specs->long_p && specs->short_p));
!       gcc_assert (!(specs->signed_p && specs->unsigned_p));
!       if (specs->long_long_p)
! 	specs->type = (specs->unsigned_p
! 		       ? long_long_unsigned_type_node
! 		       : long_long_integer_type_node);
!       else if (specs->long_p)
! 	specs->type = (specs->unsigned_p
! 		       ? long_unsigned_type_node
! 		       : long_integer_type_node);
!       else if (specs->short_p)
! 	specs->type = (specs->unsigned_p
! 		       ? short_unsigned_type_node
! 		       : short_integer_type_node);
!       else
! 	specs->type = (specs->unsigned_p
! 		       ? unsigned_type_node
! 		       : integer_type_node);
!       if (specs->complex_p)
! 	{
! 	  if (pedantic)
! 	    pedwarn ("ISO C does not support complex integer types");
! 	  specs->type = build_complex_type (specs->type);
! 	}
!       break;
!     case cts_float:
!       gcc_assert (!specs->long_p && !specs->short_p
! 		  && !specs->signed_p && !specs->unsigned_p);
!       specs->type = (specs->complex_p
! 		     ? complex_float_type_node
! 		     : float_type_node);
!       break;
!     case cts_double:
!       gcc_assert (!specs->long_long_p && !specs->short_p
! 		  && !specs->signed_p && !specs->unsigned_p);
!       if (specs->long_p)
! 	{
! 	  specs->type = (specs->complex_p
! 			 ? complex_long_double_type_node
! 			 : long_double_type_node);
! 	}
!       else
! 	{
! 	  specs->type = (specs->complex_p
! 			 ? complex_double_type_node
! 			 : double_type_node);
! 	}
!       break;
!     default:
!       gcc_unreachable ();
!     }
  
!   return specs;
! }
  
! /* Synthesize a function which calls all the global ctors or global
!    dtors in this file.  This is only used for targets which do not
!    support .ctors/.dtors sections.  FIXME: Migrate into cgraph.  */
! static void
! build_cdtor (int method_type, tree cdtors)
! {
!   tree body = 0;
  
!   if (!cdtors)
!     return;
! 
!   for (; cdtors; cdtors = TREE_CHAIN (cdtors))
!     append_to_statement_list (build_function_call (TREE_VALUE (cdtors), 0),
! 			      &body);
! 
!   cgraph_build_static_cdtor (method_type, body, DEFAULT_INIT_PRIORITY);
  }
  
! /* Perform final processing on one file scope's declarations (or the
!    external scope's declarations), GLOBALS.  */
! static void
! c_write_global_declarations_1 (tree globals)
! {
!   size_t len = list_length (globals);
!   tree *vec = XNEWVEC (tree, len);
!   size_t i;
!   tree decl;
! 
!   /* Process the decls in the order they were written.  */
!   for (i = 0, decl = globals; i < len; i++, decl = TREE_CHAIN (decl))
!     {
!       vec[i] = decl;
!       /* Check for used but undefined static functions using the C
! 	 standard's definition of "used", and set TREE_NO_WARNING so
! 	 that check_global_declarations doesn't repeat the check.  */
!       if (TREE_CODE (decl) == FUNCTION_DECL
! 	  && DECL_INITIAL (decl) == 0
! 	  && DECL_EXTERNAL (decl)
! 	  && !TREE_PUBLIC (decl)
! 	  && C_DECL_USED (decl))
! 	{
! 	  pedwarn ("%J%qF used but never defined", decl, decl);
! 	  TREE_NO_WARNING (decl) = 1;
! 	}
!     }
! 
!   wrapup_global_declarations (vec, len);
!   check_global_declarations (vec, len);
! 
!   free (vec);
! }
  
  void
! c_write_global_declarations (void)
  {
!   tree ext_block, t;
  
!   /* We don't want to do this if generating a PCH.  */
!   if (pch_file)
!     return;
  
!   /* Don't waste time on further processing if -fsyntax-only or we've
!      encountered errors.  */
!   if (flag_syntax_only || errorcount || sorrycount || cpp_errors (parse_in))
!     return;
  
!   /* Close the external scope.  */
!   ext_block = pop_scope ();
!   external_scope = 0;
!   gcc_assert (!current_scope);
! 
!   /* Process all file scopes in this compilation, and the external_scope,
!      through wrapup_global_declarations and check_global_declarations.  */
!   for (t = all_translation_units; t; t = TREE_CHAIN (t))
!     c_write_global_declarations_1 (BLOCK_VARS (DECL_INITIAL (t)));
!   c_write_global_declarations_1 (BLOCK_VARS (ext_block));
! 
!   /* Generate functions to call static constructors and destructors
!      for targets that do not support .ctors/.dtors sections.  These
!      functions have magic names which are detected by collect2.  */
!   build_cdtor ('I', static_ctors); static_ctors = 0;
!   build_cdtor ('D', static_dtors); static_dtors = 0;
! 
!   /* We're done parsing; proceed to optimize and emit assembly.
!      FIXME: shouldn't be the front end's responsibility to call this.  */
!   cgraph_optimize ();
  }
  
  #include "gt-c-decl.h"
diff -Nrcpad gcc-3.4.3/gcc/c-dump.c gcc-4.0.0/gcc/c-dump.c
*** gcc-3.4.3/gcc/c-dump.c	Thu Jun 19 19:43:58 2003
--- gcc-4.0.0/gcc/c-dump.c	Thu Jan 27 18:22:19 2005
***************
*** 1,5 ****
  /* Tree-dumping functionality for C-family languages.
!    Copyright (C) 2002 Free Software Foundation, Inc.
     Written by Mark Mitchell <mark@codesourcery.com>
  
  This file is part of GCC.
--- 1,5 ----
  /* Tree-dumping functionality for C-family languages.
!    Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
     Written by Mark Mitchell <mark@codesourcery.com>
  
  This file is part of GCC.
*************** Software Foundation, 59 Temple Place - S
*** 32,46 ****
  void
  dump_stmt (dump_info_p di, tree t)
  {
!   dump_int (di, "line", STMT_LINENO (t));
! }
! 
! /* Dump the next statement after STMT.  */
! 
! void
! dump_next_stmt (dump_info_p di, tree t)
! {
!   dump_child ("next", TREE_CHAIN (t));
  }
  
  /* Dump any C-specific tree codes and attributes of common codes.  */
--- 32,39 ----
  void
  dump_stmt (dump_info_p di, tree t)
  {
!   if (EXPR_HAS_LOCATION (t))
!     dump_int (di, "line", EXPR_LINENO (t));
  }
  
  /* Dump any C-specific tree codes and attributes of common codes.  */
*************** c_dump_tree (void *dump_info, tree t)
*** 61,121 ****
  	dump_string (di, "bitfield");
        break;
  
-     case ASM_STMT:
-       dump_stmt (di, t);
-       if (ASM_VOLATILE_P (t))
- 	dump_string (di, "volatile");
-       dump_child ("strg", ASM_STRING (t));
-       dump_child ("outs", ASM_OUTPUTS (t));
-       dump_child ("ins", ASM_INPUTS (t));
-       dump_child ("clbr", ASM_CLOBBERS (t));
-       dump_next_stmt (di, t);
-       break;
- 
      case BREAK_STMT:
      case CONTINUE_STMT:
        dump_stmt (di, t);
-       dump_next_stmt (di, t);
-       break;
- 
-     case CASE_LABEL:
-       /* Note that a case label is not like other statements; there is
- 	 no way to get the line-number of a case label.  */
-       dump_child ("low", CASE_LOW (t));
-       dump_child ("high", CASE_HIGH (t));
-       dump_next_stmt (di, t);
-       break;
- 
-     case CLEANUP_STMT:
-       dump_stmt (di, t);
-       dump_child ("decl", CLEANUP_DECL (t));
-       dump_child ("expr", CLEANUP_EXPR (t));
-       dump_next_stmt (di, t);
-       break;
- 
-     case COMPOUND_STMT:
-       dump_stmt (di, t);
-       dump_child ("body", COMPOUND_BODY (t));
-       dump_next_stmt (di, t);
-       break;
- 
-     case DECL_STMT:
-       dump_stmt (di, t);
-       dump_child ("decl", DECL_STMT_DECL (t));
-       dump_next_stmt (di, t);
        break;
  
      case DO_STMT:
        dump_stmt (di, t);
        dump_child ("body", DO_BODY (t));
        dump_child ("cond", DO_COND (t));
-       dump_next_stmt (di, t);
        break;
  
      case EXPR_STMT:
        dump_stmt (di, t);
        dump_child ("expr", EXPR_STMT_EXPR (t));
-       dump_next_stmt (di, t);
        break;
  
      case FOR_STMT:
--- 54,73 ----
*************** c_dump_tree (void *dump_info, tree t)
*** 124,183 ****
        dump_child ("cond", FOR_COND (t));
        dump_child ("expr", FOR_EXPR (t));
        dump_child ("body", FOR_BODY (t));
-       dump_next_stmt (di, t);
-       break;
- 
-     case GOTO_STMT:
-       dump_stmt (di, t);
-       dump_child ("dest", GOTO_DESTINATION (t));
-       dump_next_stmt (di, t);
-       break;
- 
-     case IF_STMT:
-       dump_stmt (di, t);
-       dump_child ("cond", IF_COND (t));
-       dump_child ("then", THEN_CLAUSE (t));
-       dump_child ("else", ELSE_CLAUSE (t));
-       dump_next_stmt (di, t);
-       break;
- 
-     case LABEL_STMT:
-       dump_stmt (di, t);
-       dump_child ("labl", LABEL_STMT_LABEL (t));
-       dump_next_stmt (di, t);
-       break;
- 
-     case RETURN_STMT:
-       dump_stmt (di, t);
-       dump_child ("expr", RETURN_STMT_EXPR (t));
-       dump_next_stmt (di, t);
        break;
  
      case SWITCH_STMT:
        dump_stmt (di, t);
!       dump_child ("cond", SWITCH_COND (t));
!       dump_child ("body", SWITCH_BODY (t));
!       dump_next_stmt (di, t);
        break;
  
      case WHILE_STMT:
        dump_stmt (di, t);
        dump_child ("cond", WHILE_COND (t));
        dump_child ("body", WHILE_BODY (t));
-       dump_next_stmt (di, t);
-       break;
- 
-     case SCOPE_STMT:
-       dump_stmt (di, t);
-       if (SCOPE_BEGIN_P (t))
- 	dump_string (di, "begn");
-       else
- 	dump_string (di, "end");
-       if (SCOPE_NULLIFIED_P (t))
- 	dump_string (di, "null");
-       if (!SCOPE_NO_CLEANUPS_P (t))
- 	dump_string (di, "clnp");
-       dump_next_stmt (di, t);
        break;
  
      case STMT_EXPR:
--- 76,93 ----
        dump_child ("cond", FOR_COND (t));
        dump_child ("expr", FOR_EXPR (t));
        dump_child ("body", FOR_BODY (t));
        break;
  
      case SWITCH_STMT:
        dump_stmt (di, t);
!       dump_child ("cond", SWITCH_STMT_COND (t));
!       dump_child ("body", SWITCH_STMT_BODY (t));
        break;
  
      case WHILE_STMT:
        dump_stmt (di, t);
        dump_child ("cond", WHILE_COND (t));
        dump_child ("body", WHILE_BODY (t));
        break;
  
      case STMT_EXPR:
diff -Nrcpad gcc-3.4.3/gcc/c-format.c gcc-4.0.0/gcc/c-format.c
*** gcc-3.4.3/gcc/c-format.c	Sat Dec 20 00:00:27 2003
--- gcc-4.0.0/gcc/c-format.c	Tue Nov  9 10:20:09 2004
***************
*** 1,6 ****
  /* Check calls to formatted I/O functions (-Wformat).
     Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
!    2001, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
--- 1,6 ----
  /* Check calls to formatted I/O functions (-Wformat).
     Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
!    2001, 2002, 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
*************** Software Foundation, 59 Temple Place - S
*** 30,35 ****
--- 30,36 ----
  #include "intl.h"
  #include "diagnostic.h"
  #include "langhooks.h"
+ #include "c-format.h"
  
  /* Set format warning options according to a -Wformat=n option.  */
  
*************** set_Wformat (int setting)
*** 53,75 ****
  
  /* Handle attributes associated with format checking.  */
  
! /* This must be in the same order as format_types, with format_type_error
!    last.  */
  enum format_type { printf_format_type, asm_fprintf_format_type,
  		   gcc_diag_format_type, gcc_cdiag_format_type,
  		   gcc_cxxdiag_format_type,
  		   scanf_format_type, strftime_format_type,
! 		   strfmon_format_type, format_type_error };
  
  typedef struct function_format_info
  {
!   enum format_type format_type;	/* type of format (printf, scanf, etc.) */
    unsigned HOST_WIDE_INT format_num;	/* number of format argument */
    unsigned HOST_WIDE_INT first_arg_num;	/* number of first arg (zero for varargs) */
  } function_format_info;
  
  static bool decode_format_attr (tree, function_format_info *, int);
! static enum format_type decode_format_type (const char *);
  
  static bool check_format_string (tree argument,
  				 unsigned HOST_WIDE_INT format_num,
--- 54,77 ----
  
  /* Handle attributes associated with format checking.  */
  
! /* This must be in the same order as format_types, except for
!    format_type_error.  Target-specific format types do not have
!    matching enum values.  */
  enum format_type { printf_format_type, asm_fprintf_format_type,
  		   gcc_diag_format_type, gcc_cdiag_format_type,
  		   gcc_cxxdiag_format_type,
  		   scanf_format_type, strftime_format_type,
! 		   strfmon_format_type, format_type_error = -1};
  
  typedef struct function_format_info
  {
!   int format_type;			/* type of format (printf, scanf, etc.) */
    unsigned HOST_WIDE_INT format_num;	/* number of format argument */
    unsigned HOST_WIDE_INT first_arg_num;	/* number of first arg (zero for varargs) */
  } function_format_info;
  
  static bool decode_format_attr (tree, function_format_info *, int);
! static int decode_format_type (const char *);
  
  static bool check_format_string (tree argument,
  				 unsigned HOST_WIDE_INT format_num,
*************** static bool get_constant (tree expr, uns
*** 81,92 ****
  /* Handle a "format_arg" attribute; arguments as in
     struct attribute_spec.handler.  */
  tree
! handle_format_arg_attribute (tree *node, tree name ATTRIBUTE_UNUSED,
  			     tree args, int flags, bool *no_add_attrs)
  {
    tree type = *node;
    tree format_num_expr = TREE_VALUE (args);
!   unsigned HOST_WIDE_INT format_num;
    tree argument;
  
    if (!get_constant (format_num_expr, &format_num, 0))
--- 83,94 ----
  /* Handle a "format_arg" attribute; arguments as in
     struct attribute_spec.handler.  */
  tree
! handle_format_arg_attribute (tree *node, tree ARG_UNUSED (name),
  			     tree args, int flags, bool *no_add_attrs)
  {
    tree type = *node;
    tree format_num_expr = TREE_VALUE (args);
!   unsigned HOST_WIDE_INT format_num = 0;
    tree argument;
  
    if (!get_constant (format_num_expr, &format_num, 0))
*************** check_format_string (tree argument, unsi
*** 137,143 ****
  	  != char_type_node))
      {
        if (!(flags & (int) ATTR_FLAG_BUILT_IN))
! 	error ("format string arg not a string type");
        *no_add_attrs = true;
        return false;
      }
--- 139,145 ----
  	  != char_type_node))
      {
        if (!(flags & (int) ATTR_FLAG_BUILT_IN))
! 	error ("format string argument not a string type");
        *no_add_attrs = true;
        return false;
      }
*************** check_format_string (tree argument, unsi
*** 149,155 ****
     and store its value. If validated_p is true, abort on errors.
     Returns true on success, false otherwise.  */
  static bool
! get_constant(tree expr, unsigned HOST_WIDE_INT *value, int validated_p)
  {
    while (TREE_CODE (expr) == NOP_EXPR
  	 || TREE_CODE (expr) == CONVERT_EXPR
--- 151,157 ----
     and store its value. If validated_p is true, abort on errors.
     Returns true on success, false otherwise.  */
  static bool
! get_constant (tree expr, unsigned HOST_WIDE_INT *value, int validated_p)
  {
    while (TREE_CODE (expr) == NOP_EXPR
  	 || TREE_CODE (expr) == CONVERT_EXPR
*************** get_constant(tree expr, unsigned HOST_WI
*** 158,165 ****
  
    if (TREE_CODE (expr) != INTEGER_CST || TREE_INT_CST_HIGH (expr) != 0)
      {
!       if (validated_p)
! 	abort ();
        return false;
      }
  
--- 160,166 ----
  
    if (TREE_CODE (expr) != INTEGER_CST || TREE_INT_CST_HIGH (expr) != 0)
      {
!       gcc_assert (!validated_p);
        return false;
      }
  
*************** decode_format_attr (tree args, function_
*** 185,192 ****
  
    if (TREE_CODE (format_type_id) != IDENTIFIER_NODE)
      {
!       if (validated_p)
! 	abort ();
        error ("unrecognized format specifier");
        return false;
      }
--- 186,192 ----
  
    if (TREE_CODE (format_type_id) != IDENTIFIER_NODE)
      {
!       gcc_assert (!validated_p);
        error ("unrecognized format specifier");
        return false;
      }
*************** decode_format_attr (tree args, function_
*** 198,206 ****
  
        if (info->format_type == format_type_error)
  	{
! 	  if (validated_p)
! 	    abort ();
! 	  warning ("`%s' is an unrecognized format function type", p);
  	  return false;
  	}
      }
--- 198,205 ----
  
        if (info->format_type == format_type_error)
  	{
! 	  gcc_assert (!validated_p);
! 	  warning ("%qs is an unrecognized format function type", p);
  	  return false;
  	}
      }
*************** decode_format_attr (tree args, function_
*** 213,227 ****
  
    if (!get_constant (first_arg_num_expr, &info->first_arg_num, validated_p))
      {
!       error ("'...' has invalid operand number");
        return false;
      }
  
    if (info->first_arg_num != 0 && info->first_arg_num <= info->format_num)
      {
!       if (validated_p)
! 	abort ();
!       error ("format string arg follows the args to be formatted");
        return false;
      }
  
--- 212,225 ----
  
    if (!get_constant (first_arg_num_expr, &info->first_arg_num, validated_p))
      {
!       error ("%<...%> has invalid operand number");
        return false;
      }
  
    if (info->first_arg_num != 0 && info->first_arg_num <= info->format_num)
      {
!       gcc_assert (!validated_p);
!       error ("format string argument follows the args to be formatted");
        return false;
      }
  
*************** decode_format_attr (tree args, function_
*** 230,270 ****
  
  /* Check a call to a format function against a parameter list.  */
  
- /* The meaningfully distinct length modifiers for format checking recognized
-    by GCC.  */
- enum format_lengths
- {
-   FMT_LEN_none,
-   FMT_LEN_hh,
-   FMT_LEN_h,
-   FMT_LEN_l,
-   FMT_LEN_ll,
-   FMT_LEN_L,
-   FMT_LEN_z,
-   FMT_LEN_t,
-   FMT_LEN_j,
-   FMT_LEN_MAX
- };
- 
- 
- /* The standard versions in which various format features appeared.  */
- enum format_std_version
- {
-   STD_C89,
-   STD_C94,
-   STD_C9L, /* C99, but treat as C89 if -Wno-long-long.  */
-   STD_C99,
-   STD_EXT
- };
- 
  /* The C standard version C++ is treated as equivalent to
     or inheriting from, for the purpose of format features supported.  */
  #define CPLUSPLUS_STD_VER	STD_C94
  /* The C standard version we are checking formats against when pedantic.  */
! #define C_STD_VER		((int)(c_dialect_cxx ()			  \
! 				 ? CPLUSPLUS_STD_VER			  \
! 				 : (flag_isoc99				  \
! 				    ? STD_C99				  \
  				    : (flag_isoc94 ? STD_C94 : STD_C89))))
  /* The name to give to the standard version we are warning about when
     pedantic.  FEATURE_VER is the version in which the feature warned out
--- 228,241 ----
  
  /* Check a call to a format function against a parameter list.  */
  
  /* The C standard version C++ is treated as equivalent to
     or inheriting from, for the purpose of format features supported.  */
  #define CPLUSPLUS_STD_VER	STD_C94
  /* The C standard version we are checking formats against when pedantic.  */
! #define C_STD_VER		((int) (c_dialect_cxx ()		   \
! 				 ? CPLUSPLUS_STD_VER			   \
! 				 : (flag_isoc99				   \
! 				    ? STD_C99				   \
  				    : (flag_isoc94 ? STD_C94 : STD_C89))))
  /* The name to give to the standard version we are warning about when
     pedantic.  FEATURE_VER is the version in which the feature warned out
*************** enum format_std_version
*** 276,474 ****
  				    : "ISO C90"))
  /* Adjust a C standard version, which may be STD_C9L, to account for
     -Wno-long-long.  Returns other standard versions unchanged.  */
! #define ADJ_STD(VER)		((int)((VER) == STD_C9L			      \
  				       ? (warn_long_long ? STD_C99 : STD_C89) \
  				       : (VER)))
  
- /* Flags that may apply to a particular kind of format checked by GCC.  */
- enum
- {
-   /* This format converts arguments of types determined by the
-      format string.  */
-   FMT_FLAG_ARG_CONVERT = 1,
-   /* The scanf allocation 'a' kludge applies to this format kind.  */
-   FMT_FLAG_SCANF_A_KLUDGE = 2,
-   /* A % during parsing a specifier is allowed to be a modified % rather
-      that indicating the format is broken and we are out-of-sync.  */
-   FMT_FLAG_FANCY_PERCENT_OK = 4,
-   /* With $ operand numbers, it is OK to reference the same argument more
-      than once.  */
-   FMT_FLAG_DOLLAR_MULTIPLE = 8,
-   /* This format type uses $ operand numbers (strfmon doesn't).  */
-   FMT_FLAG_USE_DOLLAR = 16,
-   /* Zero width is bad in this type of format (scanf).  */
-   FMT_FLAG_ZERO_WIDTH_BAD = 32,
-   /* Empty precision specification is OK in this type of format (printf).  */
-   FMT_FLAG_EMPTY_PREC_OK = 64,
-   /* Gaps are allowed in the arguments with $ operand numbers if all
-      arguments are pointers (scanf).  */
-   FMT_FLAG_DOLLAR_GAP_POINTER_OK = 128
-   /* Not included here: details of whether width or precision may occur
-      (controlled by width_char and precision_char); details of whether
-      '*' can be used for these (width_type and precision_type); details
-      of whether length modifiers can occur (length_char_specs).  */
- };
- 
- 
- /* Structure describing a length modifier supported in format checking, and
-    possibly a doubled version such as "hh".  */
- typedef struct
- {
-   /* Name of the single-character length modifier.  */
-   const char *name;
-   /* Index into a format_char_info.types array.  */
-   enum format_lengths index;
-   /* Standard version this length appears in.  */
-   enum format_std_version std;
-   /* Same, if the modifier can be repeated, or NULL if it can't.  */
-   const char *double_name;
-   enum format_lengths double_index;
-   enum format_std_version double_std;
- } format_length_info;
- 
- 
- /* Structure describing the combination of a conversion specifier
-    (or a set of specifiers which act identically) and a length modifier.  */
- typedef struct
- {
-   /* The standard version this combination of length and type appeared in.
-      This is only relevant if greater than those for length and type
-      individually; otherwise it is ignored.  */
-   enum format_std_version std;
-   /* The name to use for the type, if different from that generated internally
-      (e.g., "signed size_t").  */
-   const char *name;
-   /* The type itself.  */
-   tree *type;
- } format_type_detail;
- 
- 
- /* Macros to fill out tables of these.  */
- #define NOARGUMENTS	{ T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }
- #define BADLEN	{ 0, NULL, NULL }
- #define NOLENGTHS	{ BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }
- 
- 
- /* Structure describing a format conversion specifier (or a set of specifiers
-    which act identically), and the length modifiers used with it.  */
- typedef struct
- {
-   const char *format_chars;
-   int pointer_count;
-   enum format_std_version std;
-   /* Types accepted for each length modifier.  */
-   format_type_detail types[FMT_LEN_MAX];
-   /* List of other modifier characters allowed with these specifiers.
-      This lists flags, and additionally "w" for width, "p" for precision
-      (right precision, for strfmon), "#" for left precision (strfmon),
-      "a" for scanf "a" allocation extension (not applicable in C99 mode),
-      "*" for scanf suppression, and "E" and "O" for those strftime
-      modifiers.  */
-   const char *flag_chars;
-   /* List of additional flags describing these conversion specifiers.
-      "c" for generic character pointers being allowed, "2" for strftime
-      two digit year formats, "3" for strftime formats giving two digit
-      years in some locales, "4" for "2" which becomes "3" with an "E" modifier,
-      "o" if use of strftime "O" is a GNU extension beyond C99,
-      "W" if the argument is a pointer which is dereferenced and written into,
-      "R" if the argument is a pointer which is dereferenced and read from,
-      "i" for printf integer formats where the '0' flag is ignored with
-      precision, and "[" for the starting character of a scanf scanset.  */
-   const char *flags2;
- } format_char_info;
- 
- 
- /* Structure describing a flag accepted by some kind of format.  */
- typedef struct
- {
-   /* The flag character in question (0 for end of array).  */
-   int flag_char;
-   /* Zero if this entry describes the flag character in general, or a
-      nonzero character that may be found in flags2 if it describes the
-      flag when used with certain formats only.  If the latter, only
-      the first such entry found that applies to the current conversion
-      specifier is used; the values of `name' and `long_name' it supplies
-      will be used, if non-NULL and the standard version is higher than
-      the unpredicated one, for any pedantic warning.  For example, 'o'
-      for strftime formats (meaning 'O' is an extension over C99).  */
-   int predicate;
-   /* Nonzero if the next character after this flag in the format should
-      be skipped ('=' in strfmon), zero otherwise.  */
-   int skip_next_char;
-   /* The name to use for this flag in diagnostic messages.  For example,
-      N_("`0' flag"), N_("field width").  */
-   const char *name;
-   /* Long name for this flag in diagnostic messages; currently only used for
-      "ISO C does not support ...".  For example, N_("the `I' printf flag").  */
-   const char *long_name;
-   /* The standard version in which it appeared.  */
-   enum format_std_version std;
- } format_flag_spec;
- 
- 
- /* Structure describing a combination of flags that is bad for some kind
-    of format.  */
- typedef struct
- {
-   /* The first flag character in question (0 for end of array).  */
-   int flag_char1;
-   /* The second flag character.  */
-   int flag_char2;
-   /* Nonzero if the message should say that the first flag is ignored with
-      the second, zero if the combination should simply be objected to.  */
-   int ignored;
-   /* Zero if this entry applies whenever this flag combination occurs,
-      a nonzero character from flags2 if it only applies in some
-      circumstances (e.g. 'i' for printf formats ignoring 0 with precision).  */
-   int predicate;
- } format_flag_pair;
- 
- 
- /* Structure describing a particular kind of format processed by GCC.  */
- typedef struct
- {
-   /* The name of this kind of format, for use in diagnostics.  Also
-      the name of the attribute (without preceding and following __).  */
-   const char *name;
-   /* Specifications of the length modifiers accepted; possibly NULL.  */
-   const format_length_info *length_char_specs;
-   /* Details of the conversion specification characters accepted.  */
-   const format_char_info *conversion_specs;
-   /* String listing the flag characters that are accepted.  */
-   const char *flag_chars;
-   /* String listing modifier characters (strftime) accepted.  May be NULL.  */
-   const char *modifier_chars;
-   /* Details of the flag characters, including pseudo-flags.  */
-   const format_flag_spec *flag_specs;
-   /* Details of bad combinations of flags.  */
-   const format_flag_pair *bad_flag_pairs;
-   /* Flags applicable to this kind of format.  */
-   int flags;
-   /* Flag character to treat a width as, or 0 if width not used.  */
-   int width_char;
-   /* Flag character to treat a left precision (strfmon) as,
-      or 0 if left precision not used.  */
-   int left_precision_char;
-   /* Flag character to treat a precision (for strfmon, right precision) as,
-      or 0 if precision not used.  */
-   int precision_char;
-   /* If a flag character has the effect of suppressing the conversion of
-      an argument ('*' in scanf), that flag character, otherwise 0.  */
-   int suppression_char;
-   /* Flag character to treat a length modifier as (ignored if length
-      modifiers not used).  Need not be placed in flag_chars for conversion
-      specifiers, but is used to check for bad combinations such as length
-      modifier with assignment suppression in scanf.  */
-   int length_code_char;
-   /* Pointer to type of argument expected if '*' is used for a width,
-      or NULL if '*' not used for widths.  */
-   tree *width_type;
-   /* Pointer to type of argument expected if '*' is used for a precision,
-      or NULL if '*' not used for precisions.  */
-   tree *precision_type;
- } format_kind_info;
- 
- 
  /* Structure describing details of a type expected in format checking,
     and the type to check against it.  */
  typedef struct format_wanted_type
--- 247,256 ----
  				    : "ISO C90"))
  /* Adjust a C standard version, which may be STD_C9L, to account for
     -Wno-long-long.  Returns other standard versions unchanged.  */
! #define ADJ_STD(VER)		((int) ((VER) == STD_C9L		      \
  				       ? (warn_long_long ? STD_C99 : STD_C89) \
  				       : (VER)))
  
  /* Structure describing details of a type expected in format checking,
     and the type to check against it.  */
  typedef struct format_wanted_type
*************** typedef struct format_wanted_type
*** 488,499 ****
    /* Whether the argument, dereferenced once, is read from and so
       must not be a NULL pointer.  */
    int reading_from_flag;
!   /* If warnings should be of the form "field precision is not type int",
!      the name to use (in this case "field precision"), otherwise NULL,
!      for "%s format, %s arg" type messages.  If (in an extension), this
!      is a pointer type, wanted_type_name should be set to include the
!      terminating '*' characters of the type name to give a correct
!      message.  */
    const char *name;
    /* The actual parameter to check against the wanted type.  */
    tree param;
--- 270,279 ----
    /* Whether the argument, dereferenced once, is read from and so
       must not be a NULL pointer.  */
    int reading_from_flag;
!   /* If warnings should be of the form "field precision should have
!      type 'int'", the name to use (in this case "field precision"),
!      otherwise NULL, for "format expects type 'long'" type
!      messages.  */
    const char *name;
    /* The actual parameter to check against the wanted type.  */
    tree param;
*************** static const format_length_info strfmon_
*** 562,574 ****
  
  static const format_flag_spec printf_flag_specs[] =
  {
!   { ' ',  0, 0, N_("` ' flag"),        N_("the ` ' printf flag"),              STD_C89 },
!   { '+',  0, 0, N_("`+' flag"),        N_("the `+' printf flag"),              STD_C89 },
!   { '#',  0, 0, N_("`#' flag"),        N_("the `#' printf flag"),              STD_C89 },
!   { '0',  0, 0, N_("`0' flag"),        N_("the `0' printf flag"),              STD_C89 },
!   { '-',  0, 0, N_("`-' flag"),        N_("the `-' printf flag"),              STD_C89 },
!   { '\'', 0, 0, N_("`'' flag"),        N_("the `'' printf flag"),              STD_EXT },
!   { 'I',  0, 0, N_("`I' flag"),        N_("the `I' printf flag"),              STD_EXT },
    { 'w',  0, 0, N_("field width"),     N_("field width in printf format"),     STD_C89 },
    { 'p',  0, 0, N_("precision"),       N_("precision in printf format"),       STD_C89 },
    { 'L',  0, 0, N_("length modifier"), N_("length modifier in printf format"), STD_C89 },
--- 342,354 ----
  
  static const format_flag_spec printf_flag_specs[] =
  {
!   { ' ',  0, 0, N_("' ' flag"),        N_("the ' ' printf flag"),              STD_C89 },
!   { '+',  0, 0, N_("'+' flag"),        N_("the '+' printf flag"),              STD_C89 },
!   { '#',  0, 0, N_("'#' flag"),        N_("the '#' printf flag"),              STD_C89 },
!   { '0',  0, 0, N_("'0' flag"),        N_("the '0' printf flag"),              STD_C89 },
!   { '-',  0, 0, N_("'-' flag"),        N_("the '-' printf flag"),              STD_C89 },
!   { '\'', 0, 0, N_("''' flag"),        N_("the ''' printf flag"),              STD_EXT },
!   { 'I',  0, 0, N_("'I' flag"),        N_("the 'I' printf flag"),              STD_EXT },
    { 'w',  0, 0, N_("field width"),     N_("field width in printf format"),     STD_C89 },
    { 'p',  0, 0, N_("precision"),       N_("precision in printf format"),       STD_C89 },
    { 'L',  0, 0, N_("length modifier"), N_("length modifier in printf format"), STD_C89 },
*************** static const format_flag_pair printf_fla
*** 586,596 ****
  
  static const format_flag_spec asm_fprintf_flag_specs[] =
  {
!   { ' ',  0, 0, N_("` ' flag"),        N_("the ` ' printf flag"),              STD_C89 },
!   { '+',  0, 0, N_("`+' flag"),        N_("the `+' printf flag"),              STD_C89 },
!   { '#',  0, 0, N_("`#' flag"),        N_("the `#' printf flag"),              STD_C89 },
!   { '0',  0, 0, N_("`0' flag"),        N_("the `0' printf flag"),              STD_C89 },
!   { '-',  0, 0, N_("`-' flag"),        N_("the `-' printf flag"),              STD_C89 },
    { 'w',  0, 0, N_("field width"),     N_("field width in printf format"),     STD_C89 },
    { 'p',  0, 0, N_("precision"),       N_("precision in printf format"),       STD_C89 },
    { 'L',  0, 0, N_("length modifier"), N_("length modifier in printf format"), STD_C89 },
--- 366,376 ----
  
  static const format_flag_spec asm_fprintf_flag_specs[] =
  {
!   { ' ',  0, 0, N_("' ' flag"),        N_("the ' ' printf flag"),              STD_C89 },
!   { '+',  0, 0, N_("'+' flag"),        N_("the '+' printf flag"),              STD_C89 },
!   { '#',  0, 0, N_("'#' flag"),        N_("the '#' printf flag"),              STD_C89 },
!   { '0',  0, 0, N_("'0' flag"),        N_("the '0' printf flag"),              STD_C89 },
!   { '-',  0, 0, N_("'-' flag"),        N_("the '-' printf flag"),              STD_C89 },
    { 'w',  0, 0, N_("field width"),     N_("field width in printf format"),     STD_C89 },
    { 'p',  0, 0, N_("precision"),       N_("precision in printf format"),       STD_C89 },
    { 'L',  0, 0, N_("length modifier"), N_("length modifier in printf format"), STD_C89 },
*************** static const format_flag_pair gcc_diag_f
*** 615,620 ****
--- 395,401 ----
  
  static const format_flag_spec gcc_diag_flag_specs[] =
  {
+   { 'q',  0, 0, N_("'q' flag"),        N_("the 'q' diagnostic flag"),          STD_C89 },
    { 'p',  0, 0, N_("precision"),       N_("precision in printf format"),       STD_C89 },
    { 'L',  0, 0, N_("length modifier"), N_("length modifier in printf format"), STD_C89 },
    { 0, 0, 0, NULL, NULL, 0 }
*************** static const format_flag_spec gcc_diag_f
*** 624,631 ****
  
  static const format_flag_spec gcc_cxxdiag_flag_specs[] =
  {
!   { '+',  0, 0, N_("`+' flag"),        N_("the `+' printf flag"),              STD_C89 },
!   { '#',  0, 0, N_("`#' flag"),        N_("the `#' printf flag"),              STD_C89 },
    { 'p',  0, 0, N_("precision"),       N_("precision in printf format"),       STD_C89 },
    { 'L',  0, 0, N_("length modifier"), N_("length modifier in printf format"), STD_C89 },
    { 0, 0, 0, NULL, NULL, 0 }
--- 405,413 ----
  
  static const format_flag_spec gcc_cxxdiag_flag_specs[] =
  {
!   { '+',  0, 0, N_("'+' flag"),        N_("the '+' printf flag"),              STD_C89 },
!   { '#',  0, 0, N_("'#' flag"),        N_("the '#' printf flag"),              STD_C89 },
!   { 'q',  0, 0, N_("'q' flag"),        N_("the 'q' diagnostic flag"),          STD_C89 },
    { 'p',  0, 0, N_("precision"),       N_("precision in printf format"),       STD_C89 },
    { 'L',  0, 0, N_("length modifier"), N_("length modifier in printf format"), STD_C89 },
    { 0, 0, 0, NULL, NULL, 0 }
*************** static const format_flag_spec gcc_cxxdia
*** 634,644 ****
  static const format_flag_spec scanf_flag_specs[] =
  {
    { '*',  0, 0, N_("assignment suppression"), N_("the assignment suppression scanf feature"), STD_C89 },
!   { 'a',  0, 0, N_("`a' flag"),               N_("the `a' scanf flag"),                       STD_EXT },
    { 'w',  0, 0, N_("field width"),            N_("field width in scanf format"),              STD_C89 },
    { 'L',  0, 0, N_("length modifier"),        N_("length modifier in scanf format"),          STD_C89 },
!   { '\'', 0, 0, N_("`'' flag"),               N_("the `'' scanf flag"),                       STD_EXT },
!   { 'I',  0, 0, N_("`I' flag"),               N_("the `I' scanf flag"),                       STD_EXT },
    { 0, 0, 0, NULL, NULL, 0 }
  };
  
--- 416,426 ----
  static const format_flag_spec scanf_flag_specs[] =
  {
    { '*',  0, 0, N_("assignment suppression"), N_("the assignment suppression scanf feature"), STD_C89 },
!   { 'a',  0, 0, N_("'a' flag"),               N_("the 'a' scanf flag"),                       STD_EXT },
    { 'w',  0, 0, N_("field width"),            N_("field width in scanf format"),              STD_C89 },
    { 'L',  0, 0, N_("length modifier"),        N_("length modifier in scanf format"),          STD_C89 },
!   { '\'', 0, 0, N_("''' flag"),               N_("the ''' scanf flag"),                       STD_EXT },
!   { 'I',  0, 0, N_("'I' flag"),               N_("the 'I' scanf flag"),                       STD_EXT },
    { 0, 0, 0, NULL, NULL, 0 }
  };
  
*************** static const format_flag_pair scanf_flag
*** 652,666 ****
  
  static const format_flag_spec strftime_flag_specs[] =
  {
!   { '_', 0,   0, N_("`_' flag"),     N_("the `_' strftime flag"),          STD_EXT },
!   { '-', 0,   0, N_("`-' flag"),     N_("the `-' strftime flag"),          STD_EXT },
!   { '0', 0,   0, N_("`0' flag"),     N_("the `0' strftime flag"),          STD_EXT },
!   { '^', 0,   0, N_("`^' flag"),     N_("the `^' strftime flag"),          STD_EXT },
!   { '#', 0,   0, N_("`#' flag"),     N_("the `#' strftime flag"),          STD_EXT },
    { 'w', 0,   0, N_("field width"),  N_("field width in strftime format"), STD_EXT },
!   { 'E', 0,   0, N_("`E' modifier"), N_("the `E' strftime modifier"),      STD_C99 },
!   { 'O', 0,   0, N_("`O' modifier"), N_("the `O' strftime modifier"),      STD_C99 },
!   { 'O', 'o', 0, NULL,               N_("the `O' modifier"),               STD_EXT },
    { 0, 0, 0, NULL, NULL, 0 }
  };
  
--- 434,448 ----
  
  static const format_flag_spec strftime_flag_specs[] =
  {
!   { '_', 0,   0, N_("'_' flag"),     N_("the '_' strftime flag"),          STD_EXT },
!   { '-', 0,   0, N_("'-' flag"),     N_("the '-' strftime flag"),          STD_EXT },
!   { '0', 0,   0, N_("'0' flag"),     N_("the '0' strftime flag"),          STD_EXT },
!   { '^', 0,   0, N_("'^' flag"),     N_("the '^' strftime flag"),          STD_EXT },
!   { '#', 0,   0, N_("'#' flag"),     N_("the '#' strftime flag"),          STD_EXT },
    { 'w', 0,   0, N_("field width"),  N_("field width in strftime format"), STD_EXT },
!   { 'E', 0,   0, N_("'E' modifier"), N_("the 'E' strftime modifier"),      STD_C99 },
!   { 'O', 0,   0, N_("'O' modifier"), N_("the 'O' strftime modifier"),      STD_C99 },
!   { 'O', 'o', 0, NULL,               N_("the 'O' modifier"),               STD_EXT },
    { 0, 0, 0, NULL, NULL, 0 }
  };
  
*************** static const format_flag_pair strftime_f
*** 679,689 ****
  static const format_flag_spec strfmon_flag_specs[] =
  {
    { '=',  0, 1, N_("fill character"),  N_("fill character in strfmon format"),  STD_C89 },
!   { '^',  0, 0, N_("`^' flag"),        N_("the `^' strfmon flag"),              STD_C89 },
!   { '+',  0, 0, N_("`+' flag"),        N_("the `+' strfmon flag"),              STD_C89 },
!   { '(',  0, 0, N_("`(' flag"),        N_("the `(' strfmon flag"),              STD_C89 },
!   { '!',  0, 0, N_("`!' flag"),        N_("the `!' strfmon flag"),              STD_C89 },
!   { '-',  0, 0, N_("`-' flag"),        N_("the `-' strfmon flag"),              STD_C89 },
    { 'w',  0, 0, N_("field width"),     N_("field width in strfmon format"),     STD_C89 },
    { '#',  0, 0, N_("left precision"),  N_("left precision in strfmon format"),  STD_C89 },
    { 'p',  0, 0, N_("right precision"), N_("right precision in strfmon format"), STD_C89 },
--- 461,471 ----
  static const format_flag_spec strfmon_flag_specs[] =
  {
    { '=',  0, 1, N_("fill character"),  N_("fill character in strfmon format"),  STD_C89 },
!   { '^',  0, 0, N_("'^' flag"),        N_("the '^' strfmon flag"),              STD_C89 },
!   { '+',  0, 0, N_("'+' flag"),        N_("the '+' strfmon flag"),              STD_C89 },
!   { '(',  0, 0, N_("'(' flag"),        N_("the '(' strfmon flag"),              STD_C89 },
!   { '!',  0, 0, N_("'!' flag"),        N_("the '!' strfmon flag"),              STD_C89 },
!   { '-',  0, 0, N_("'-' flag"),        N_("the '-' strfmon flag"),              STD_C89 },
    { 'w',  0, 0, N_("field width"),     N_("field width in strfmon format"),     STD_C89 },
    { '#',  0, 0, N_("left precision"),  N_("left precision in strfmon format"),  STD_C89 },
    { 'p',  0, 0, N_("right precision"), N_("right precision in strfmon format"), STD_C89 },
*************** static const format_flag_pair strfmon_fl
*** 698,923 ****
  };
  
  
- #define T_I	&integer_type_node
- #define T89_I	{ STD_C89, NULL, T_I }
- #define T_L	&long_integer_type_node
- #define T89_L	{ STD_C89, NULL, T_L }
- #define T_LL	&long_long_integer_type_node
- #define T9L_LL	{ STD_C9L, NULL, T_LL }
- #define TEX_LL	{ STD_EXT, NULL, T_LL }
- #define T_S	&short_integer_type_node
- #define T89_S	{ STD_C89, NULL, T_S }
- #define T_UI	&unsigned_type_node
- #define T89_UI	{ STD_C89, NULL, T_UI }
- #define T_UL	&long_unsigned_type_node
- #define T89_UL	{ STD_C89, NULL, T_UL }
- #define T_ULL	&long_long_unsigned_type_node
- #define T9L_ULL	{ STD_C9L, NULL, T_ULL }
- #define TEX_ULL	{ STD_EXT, NULL, T_ULL }
- #define T_US	&short_unsigned_type_node
- #define T89_US	{ STD_C89, NULL, T_US }
- #define T_F	&float_type_node
- #define T89_F	{ STD_C89, NULL, T_F }
- #define T99_F	{ STD_C99, NULL, T_F }
- #define T_D	&double_type_node
- #define T89_D	{ STD_C89, NULL, T_D }
- #define T99_D	{ STD_C99, NULL, T_D }
- #define T_LD	&long_double_type_node
- #define T89_LD	{ STD_C89, NULL, T_LD }
- #define T99_LD	{ STD_C99, NULL, T_LD }
- #define T_C	&char_type_node
- #define T89_C	{ STD_C89, NULL, T_C }
- #define T_SC	&signed_char_type_node
- #define T99_SC	{ STD_C99, NULL, T_SC }
- #define T_UC	&unsigned_char_type_node
- #define T99_UC	{ STD_C99, NULL, T_UC }
- #define T_V	&void_type_node
- #define T89_V	{ STD_C89, NULL, T_V }
- #define T_W	&wchar_type_node
- #define T94_W	{ STD_C94, "wchar_t", T_W }
- #define TEX_W	{ STD_EXT, "wchar_t", T_W }
- #define T_WI	&wint_type_node
- #define T94_WI	{ STD_C94, "wint_t", T_WI }
- #define TEX_WI	{ STD_EXT, "wint_t", T_WI }
- #define T_ST    &size_type_node
- #define T99_ST	{ STD_C99, "size_t", T_ST }
- #define T_SST   &signed_size_type_node
- #define T99_SST	{ STD_C99, "signed size_t", T_SST }
- #define T_PD    &ptrdiff_type_node
- #define T99_PD	{ STD_C99, "ptrdiff_t", T_PD }
- #define T_UPD   &unsigned_ptrdiff_type_node
- #define T99_UPD	{ STD_C99, "unsigned ptrdiff_t", T_UPD }
- #define T_IM    &intmax_type_node
- #define T99_IM	{ STD_C99, "intmax_t", T_IM }
- #define T_UIM   &uintmax_type_node
- #define T99_UIM	{ STD_C99, "uintmax_t", T_UIM }
- 
  static const format_char_info print_char_table[] =
  {
    /* C89 conversion specifiers.  */
!   { "di",  0, STD_C89, { T89_I,   T99_SC,  T89_S,   T89_L,   T9L_LL,  TEX_LL,  T99_SST, T99_PD,  T99_IM  }, "-wp0 +'I",  "i"  },
!   { "oxX", 0, STD_C89, { T89_UI,  T99_UC,  T89_US,  T89_UL,  T9L_ULL, TEX_ULL, T99_ST,  T99_UPD, T99_UIM }, "-wp0#",     "i"  },
!   { "u",   0, STD_C89, { T89_UI,  T99_UC,  T89_US,  T89_UL,  T9L_ULL, TEX_ULL, T99_ST,  T99_UPD, T99_UIM }, "-wp0'I",    "i"  },
!   { "fgG", 0, STD_C89, { T89_D,   BADLEN,  BADLEN,  T99_D,   BADLEN,  T89_LD,  BADLEN,  BADLEN,  BADLEN  }, "-wp0 +#'I", ""   },
!   { "eE",  0, STD_C89, { T89_D,   BADLEN,  BADLEN,  T99_D,   BADLEN,  T89_LD,  BADLEN,  BADLEN,  BADLEN  }, "-wp0 +#I",  ""   },
!   { "c",   0, STD_C89, { T89_I,   BADLEN,  BADLEN,  T94_WI,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-w",        ""   },
!   { "s",   1, STD_C89, { T89_C,   BADLEN,  BADLEN,  T94_W,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-wp",       "cR" },
!   { "p",   1, STD_C89, { T89_V,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-w",        "c"  },
!   { "n",   1, STD_C89, { T89_I,   T99_SC,  T89_S,   T89_L,   T9L_LL,  BADLEN,  T99_SST, T99_PD,  T99_IM  }, "",          "W"  },
    /* C99 conversion specifiers.  */
!   { "F",   0, STD_C99, { T99_D,   BADLEN,  BADLEN,  T99_D,   BADLEN,  T99_LD,  BADLEN,  BADLEN,  BADLEN  }, "-wp0 +#'I", ""   },
!   { "aA",  0, STD_C99, { T99_D,   BADLEN,  BADLEN,  T99_D,   BADLEN,  T99_LD,  BADLEN,  BADLEN,  BADLEN  }, "-wp0 +#",   ""   },
    /* X/Open conversion specifiers.  */
!   { "C",   0, STD_EXT, { TEX_WI,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-w",        ""   },
!   { "S",   1, STD_EXT, { TEX_W,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-wp",       "R"  },
    /* GNU conversion specifiers.  */
!   { "m",   0, STD_EXT, { T89_V,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-wp",       ""   },
!   { NULL,  0, 0, NOLENGTHS, NULL, NULL }
  };
  
  static const format_char_info asm_fprintf_char_table[] =
  {
    /* C89 conversion specifiers.  */
!   { "di",  0, STD_C89, { T89_I,   BADLEN,  BADLEN,  T89_L,   T9L_LL,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-wp0 +",  "i" },
!   { "oxX", 0, STD_C89, { T89_UI,  BADLEN,  BADLEN,  T89_UL,  T9L_ULL, BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-wp0#",   "i" },
!   { "u",   0, STD_C89, { T89_UI,  BADLEN,  BADLEN,  T89_UL,  T9L_ULL, BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-wp0",    "i" },
!   { "c",   0, STD_C89, { T89_I,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-w",       "" },
!   { "s",   1, STD_C89, { T89_C,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-wp",    "cR" },
  
    /* asm_fprintf conversion specifiers.  */
!   { "O",   0, STD_C89, NOARGUMENTS, "",      ""   },
!   { "R",   0, STD_C89, NOARGUMENTS, "",      ""   },
!   { "I",   0, STD_C89, NOARGUMENTS, "",      ""   },
!   { "L",   0, STD_C89, NOARGUMENTS, "",      ""   },
!   { "U",   0, STD_C89, NOARGUMENTS, "",      ""   },
!   { "r",   0, STD_C89, { T89_I,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "",  "" },
!   { "@",   0, STD_C89, NOARGUMENTS, "",      ""   },
!   { NULL,  0, 0, NOLENGTHS, NULL, NULL }
  };
  
  static const format_char_info gcc_diag_char_table[] =
  {
    /* C89 conversion specifiers.  */
!   { "di",  0, STD_C89, { T89_I,   BADLEN,  BADLEN,  T89_L,   T9L_LL,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "",  ""   },
!   { "ox",  0, STD_C89, { T89_UI,  BADLEN,  BADLEN,  T89_UL,  T9L_ULL, BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "",  ""   },
!   { "u",   0, STD_C89, { T89_UI,  BADLEN,  BADLEN,  T89_UL,  T9L_ULL, BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "",  ""   },
!   { "c",   0, STD_C89, { T89_I,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "",   ""   },
!   { "s",   1, STD_C89, { T89_C,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "p",  "cR" },
!   { "p",   1, STD_C89, { T89_V,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "",   "c"  },
  
    /* Custom conversion specifiers.  */
  
    /* %H will require "location_t" at runtime.  */
!   { "H",   0, STD_C89, { T89_V,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "",   ""   },
  
    /* These will require a "tree" at runtime.  */
!   { "J", 0, STD_C89, { T89_V,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "",   ""   },
  
!   { "m",   0, STD_C89, NOARGUMENTS, "",      ""   },
!   { NULL,  0, 0, NOLENGTHS, NULL, NULL }
  };
  
  static const format_char_info gcc_cdiag_char_table[] =
  {
    /* C89 conversion specifiers.  */
!   { "di",  0, STD_C89, { T89_I,   BADLEN,  BADLEN,  T89_L,   T9L_LL,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "",  ""   },
!   { "ox",  0, STD_C89, { T89_UI,  BADLEN,  BADLEN,  T89_UL,  T9L_ULL, BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "",  ""   },
!   { "u",   0, STD_C89, { T89_UI,  BADLEN,  BADLEN,  T89_UL,  T9L_ULL, BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "",  ""   },
!   { "c",   0, STD_C89, { T89_I,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "",   ""   },
!   { "s",   1, STD_C89, { T89_C,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "p",  "cR" },
!   { "p",   1, STD_C89, { T89_V,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "",   "c"  },
  
    /* Custom conversion specifiers.  */
  
    /* %H will require "location_t" at runtime.  */
!   { "H",   0, STD_C89, { T89_V,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "",   ""   },
  
    /* These will require a "tree" at runtime.  */
!   { "DEFJT", 0, STD_C89, { T89_V,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "",   ""   },
  
!   { "m",   0, STD_C89, NOARGUMENTS, "",      ""   },
!   { NULL,  0, 0, NOLENGTHS, NULL, NULL }
  };
  
  static const format_char_info gcc_cxxdiag_char_table[] =
  {
    /* C89 conversion specifiers.  */
!   { "di",  0, STD_C89, { T89_I,   BADLEN,  BADLEN,  T89_L,   T9L_LL,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "",  ""   },
!   { "ox",  0, STD_C89, { T89_UI,  BADLEN,  BADLEN,  T89_UL,  T9L_ULL, BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "",  ""   },
!   { "u",   0, STD_C89, { T89_UI,  BADLEN,  BADLEN,  T89_UL,  T9L_ULL, BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "",  ""   },
!   { "c",   0, STD_C89, { T89_I,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "",   ""   },
!   { "s",   1, STD_C89, { T89_C,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "p",  "cR" },
!   { "p",   1, STD_C89, { T89_V,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "",   "c"  },
  
    /* Custom conversion specifiers.  */
  
    /* %H will require "location_t" at runtime.  */
!   { "H",   0, STD_C89, { T89_V,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "",   ""   },
  
    /* These will require a "tree" at runtime.  */
!   { "ADEFJTV",0,STD_C89,{ T89_V,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "+#",   ""   },
  
!   /* These accept either an `int' or an `enum tree_code' (which is handled as an `int'.)  */
!   { "CLOPQ",0,STD_C89, { T89_I,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "",   ""   },
  
!   { "m",   0, STD_C89, NOARGUMENTS, "",      ""   },
!   { NULL,  0, 0, NOLENGTHS, NULL, NULL }
  };
  
  static const format_char_info scan_char_table[] =
  {
    /* C89 conversion specifiers.  */
!   { "di",    1, STD_C89, { T89_I,   T99_SC,  T89_S,   T89_L,   T9L_LL,  TEX_LL,  T99_SST, T99_PD,  T99_IM  }, "*w'I", "W"   },
!   { "u",     1, STD_C89, { T89_UI,  T99_UC,  T89_US,  T89_UL,  T9L_ULL, TEX_ULL, T99_ST,  T99_UPD, T99_UIM }, "*w'I", "W"   },
!   { "oxX",   1, STD_C89, { T89_UI,  T99_UC,  T89_US,  T89_UL,  T9L_ULL, TEX_ULL, T99_ST,  T99_UPD, T99_UIM }, "*w",   "W"   },
!   { "efgEG", 1, STD_C89, { T89_F,   BADLEN,  BADLEN,  T89_D,   BADLEN,  T89_LD,  BADLEN,  BADLEN,  BADLEN  }, "*w'",  "W"   },
!   { "c",     1, STD_C89, { T89_C,   BADLEN,  BADLEN,  T94_W,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "*w",   "cW"  },
!   { "s",     1, STD_C89, { T89_C,   BADLEN,  BADLEN,  T94_W,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "*aw",  "cW"  },
!   { "[",     1, STD_C89, { T89_C,   BADLEN,  BADLEN,  T94_W,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "*aw",  "cW[" },
!   { "p",     2, STD_C89, { T89_V,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "*w",   "W"   },
!   { "n",     1, STD_C89, { T89_I,   T99_SC,  T89_S,   T89_L,   T9L_LL,  BADLEN,  T99_SST, T99_PD,  T99_IM  }, "",     "W"   },
    /* C99 conversion specifiers.  */
!   { "FaA",   1, STD_C99, { T99_F,   BADLEN,  BADLEN,  T99_D,   BADLEN,  T99_LD,  BADLEN,  BADLEN,  BADLEN  }, "*w'",  "W"   },
    /* X/Open conversion specifiers.  */
!   { "C",     1, STD_EXT, { TEX_W,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "*w",   "W"   },
!   { "S",     1, STD_EXT, { TEX_W,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "*aw",  "W"   },
!   { NULL, 0, 0, NOLENGTHS, NULL, NULL }
  };
  
  static const format_char_info time_char_table[] =
  {
    /* C89 conversion specifiers.  */
!   { "ABZab",		0, STD_C89, NOLENGTHS, "^#",     ""   },
!   { "cx", 		0, STD_C89, NOLENGTHS, "E",      "3"  },
!   { "HIMSUWdmw",	0, STD_C89, NOLENGTHS, "-_0Ow",  ""   },
!   { "j",		0, STD_C89, NOLENGTHS, "-_0Ow",  "o"  },
!   { "p",		0, STD_C89, NOLENGTHS, "#",      ""   },
!   { "X",		0, STD_C89, NOLENGTHS, "E",      ""   },
!   { "y", 		0, STD_C89, NOLENGTHS, "EO-_0w", "4"  },
!   { "Y",		0, STD_C89, NOLENGTHS, "-_0EOw", "o"  },
!   { "%",		0, STD_C89, NOLENGTHS, "",       ""   },
    /* C99 conversion specifiers.  */
!   { "C",		0, STD_C99, NOLENGTHS, "-_0EOw", "o"  },
!   { "D", 		0, STD_C99, NOLENGTHS, "",       "2"  },
!   { "eVu",		0, STD_C99, NOLENGTHS, "-_0Ow",  ""   },
!   { "FRTnrt",		0, STD_C99, NOLENGTHS, "",       ""   },
!   { "g", 		0, STD_C99, NOLENGTHS, "O-_0w",  "2o" },
!   { "G",		0, STD_C99, NOLENGTHS, "-_0Ow",  "o"  },
!   { "h",		0, STD_C99, NOLENGTHS, "^#",     ""   },
!   { "z",		0, STD_C99, NOLENGTHS, "O",      "o"  },
    /* GNU conversion specifiers.  */
!   { "kls",		0, STD_EXT, NOLENGTHS, "-_0Ow",  ""   },
!   { "P",		0, STD_EXT, NOLENGTHS, "",       ""   },
!   { NULL,		0, 0, NOLENGTHS, NULL, NULL }
  };
  
  static const format_char_info monetary_char_table[] =
  {
!   { "in", 0, STD_C89, { T89_D, BADLEN, BADLEN, BADLEN, BADLEN, T89_LD, BADLEN, BADLEN, BADLEN }, "=^+(!-w#p", "" },
!   { NULL, 0, 0, NOLENGTHS, NULL, NULL }
  };
  
- 
  /* This must be in the same order as enum format_type.  */
  static const format_kind_info format_types_orig[] =
  {
--- 480,653 ----
  };
  
  
  static const format_char_info print_char_table[] =
  {
    /* C89 conversion specifiers.  */
!   { "di",  0, STD_C89, { T89_I,   T99_SC,  T89_S,   T89_L,   T9L_LL,  TEX_LL,  T99_SST, T99_PD,  T99_IM  }, "-wp0 +'I",  "i",  NULL },
!   { "oxX", 0, STD_C89, { T89_UI,  T99_UC,  T89_US,  T89_UL,  T9L_ULL, TEX_ULL, T99_ST,  T99_UPD, T99_UIM }, "-wp0#",     "i",  NULL },
!   { "u",   0, STD_C89, { T89_UI,  T99_UC,  T89_US,  T89_UL,  T9L_ULL, TEX_ULL, T99_ST,  T99_UPD, T99_UIM }, "-wp0'I",    "i",  NULL },
!   { "fgG", 0, STD_C89, { T89_D,   BADLEN,  BADLEN,  T99_D,   BADLEN,  T89_LD,  BADLEN,  BADLEN,  BADLEN  }, "-wp0 +#'I", "",   NULL },
!   { "eE",  0, STD_C89, { T89_D,   BADLEN,  BADLEN,  T99_D,   BADLEN,  T89_LD,  BADLEN,  BADLEN,  BADLEN  }, "-wp0 +#I",  "",   NULL },
!   { "c",   0, STD_C89, { T89_I,   BADLEN,  BADLEN,  T94_WI,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-w",        "",   NULL },
!   { "s",   1, STD_C89, { T89_C,   BADLEN,  BADLEN,  T94_W,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-wp",       "cR", NULL },
!   { "p",   1, STD_C89, { T89_V,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-w",        "c",  NULL },
!   { "n",   1, STD_C89, { T89_I,   T99_SC,  T89_S,   T89_L,   T9L_LL,  BADLEN,  T99_SST, T99_PD,  T99_IM  }, "",          "W",  NULL },
    /* C99 conversion specifiers.  */
!   { "F",   0, STD_C99, { T99_D,   BADLEN,  BADLEN,  T99_D,   BADLEN,  T99_LD,  BADLEN,  BADLEN,  BADLEN  }, "-wp0 +#'I", "",   NULL },
!   { "aA",  0, STD_C99, { T99_D,   BADLEN,  BADLEN,  T99_D,   BADLEN,  T99_LD,  BADLEN,  BADLEN,  BADLEN  }, "-wp0 +#",   "",   NULL },
    /* X/Open conversion specifiers.  */
!   { "C",   0, STD_EXT, { TEX_WI,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-w",        "",   NULL },
!   { "S",   1, STD_EXT, { TEX_W,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-wp",       "R",  NULL },
    /* GNU conversion specifiers.  */
!   { "m",   0, STD_EXT, { T89_V,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-wp",       "",   NULL },
!   { NULL,  0, 0, NOLENGTHS, NULL, NULL, NULL }
  };
  
  static const format_char_info asm_fprintf_char_table[] =
  {
    /* C89 conversion specifiers.  */
!   { "di",  0, STD_C89, { T89_I,   BADLEN,  BADLEN,  T89_L,   T9L_LL,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-wp0 +",  "i", NULL },
!   { "oxX", 0, STD_C89, { T89_UI,  BADLEN,  BADLEN,  T89_UL,  T9L_ULL, BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-wp0#",   "i", NULL },
!   { "u",   0, STD_C89, { T89_UI,  BADLEN,  BADLEN,  T89_UL,  T9L_ULL, BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-wp0",    "i", NULL },
!   { "c",   0, STD_C89, { T89_I,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-w",       "", NULL },
!   { "s",   1, STD_C89, { T89_C,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-wp",    "cR", NULL },
  
    /* asm_fprintf conversion specifiers.  */
!   { "O",   0, STD_C89, NOARGUMENTS, "",      "",   NULL },
!   { "R",   0, STD_C89, NOARGUMENTS, "",      "",   NULL },
!   { "I",   0, STD_C89, NOARGUMENTS, "",      "",   NULL },
!   { "L",   0, STD_C89, NOARGUMENTS, "",      "",   NULL },
!   { "U",   0, STD_C89, NOARGUMENTS, "",      "",   NULL },
!   { "r",   0, STD_C89, { T89_I,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "",  "", NULL },
!   { "@",   0, STD_C89, NOARGUMENTS, "",      "",   NULL },
!   { NULL,  0, 0, NOLENGTHS, NULL, NULL, NULL }
  };
  
  static const format_char_info gcc_diag_char_table[] =
  {
    /* C89 conversion specifiers.  */
!   { "di",  0, STD_C89, { T89_I,   BADLEN,  BADLEN,  T89_L,   T9L_LL,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "q",  "",   NULL },
!   { "ox",  0, STD_C89, { T89_UI,  BADLEN,  BADLEN,  T89_UL,  T9L_ULL, BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "q",  "",   NULL },
!   { "u",   0, STD_C89, { T89_UI,  BADLEN,  BADLEN,  T89_UL,  T9L_ULL, BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "q",  "",   NULL },
!   { "c",   0, STD_C89, { T89_I,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "q",  "",   NULL },
!   { "s",   1, STD_C89, { T89_C,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "pq", "cR", NULL },
!   { "p",   1, STD_C89, { T89_V,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "q",  "c",  NULL },
  
    /* Custom conversion specifiers.  */
  
    /* %H will require "location_t" at runtime.  */
!   { "H",   0, STD_C89, { T89_V,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "q",  "",   NULL },
  
    /* These will require a "tree" at runtime.  */
!   { "J", 0, STD_C89, { T89_V,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "q",    "",   NULL },
  
!   { "<>'", 0, STD_C89, NOARGUMENTS, "",      "",   NULL },
!   { "m",   0, STD_C89, NOARGUMENTS, "q",     "",   NULL },
!   { NULL,  0, 0, NOLENGTHS, NULL, NULL, NULL }
  };
  
  static const format_char_info gcc_cdiag_char_table[] =
  {
    /* C89 conversion specifiers.  */
!   { "di",  0, STD_C89, { T89_I,   BADLEN,  BADLEN,  T89_L,   T9L_LL,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "q",  "",   NULL },
!   { "ox",  0, STD_C89, { T89_UI,  BADLEN,  BADLEN,  T89_UL,  T9L_ULL, BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "q",  "",   NULL },
!   { "u",   0, STD_C89, { T89_UI,  BADLEN,  BADLEN,  T89_UL,  T9L_ULL, BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "q",  "",   NULL },
!   { "c",   0, STD_C89, { T89_I,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "q",  "",   NULL },
!   { "s",   1, STD_C89, { T89_C,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "pq", "cR", NULL },
!   { "p",   1, STD_C89, { T89_V,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "q",  "c",  NULL },
  
    /* Custom conversion specifiers.  */
  
    /* %H will require "location_t" at runtime.  */
!   { "H",   0, STD_C89, { T89_V,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "q",  "",   NULL },
  
    /* These will require a "tree" at runtime.  */
!   { "DEFJT", 0, STD_C89, { T89_V,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "q", "",   NULL },
  
!   { "<>'", 0, STD_C89, NOARGUMENTS, "",      "",   NULL },
!   { "m",   0, STD_C89, NOARGUMENTS, "q",     "",   NULL },
!   { NULL,  0, 0, NOLENGTHS, NULL, NULL, NULL }
  };
  
  static const format_char_info gcc_cxxdiag_char_table[] =
  {
    /* C89 conversion specifiers.  */
!   { "di",  0, STD_C89, { T89_I,   BADLEN,  BADLEN,  T89_L,   T9L_LL,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "q",  "",   NULL },
!   { "ox",  0, STD_C89, { T89_UI,  BADLEN,  BADLEN,  T89_UL,  T9L_ULL, BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "q",  "",   NULL },
!   { "u",   0, STD_C89, { T89_UI,  BADLEN,  BADLEN,  T89_UL,  T9L_ULL, BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "q",  "",   NULL },
!   { "c",   0, STD_C89, { T89_I,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "q",  "",   NULL },
!   { "s",   1, STD_C89, { T89_C,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "pq", "cR", NULL },
!   { "p",   1, STD_C89, { T89_V,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "q",  "c",  NULL },
  
    /* Custom conversion specifiers.  */
  
    /* %H will require "location_t" at runtime.  */
!   { "H",   0, STD_C89, { T89_V,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "q",  "",   NULL },
  
    /* These will require a "tree" at runtime.  */
!   { "ADEFJTV",0,STD_C89,{ T89_V,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "q+#",   "",   NULL },
  
!   /* These accept either an 'int' or an 'enum tree_code' (which is handled as an 'int'.)  */
!   { "CLOPQ",0,STD_C89, { T89_I,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "q",  "",   NULL },
  
!   { "<>'", 0, STD_C89, NOARGUMENTS, "",      "",   NULL },
!   { "m",   0, STD_C89, NOARGUMENTS, "q",     "",   NULL },
!   { NULL,  0, 0, NOLENGTHS, NULL, NULL, NULL }
  };
  
  static const format_char_info scan_char_table[] =
  {
    /* C89 conversion specifiers.  */
!   { "di",    1, STD_C89, { T89_I,   T99_SC,  T89_S,   T89_L,   T9L_LL,  TEX_LL,  T99_SST, T99_PD,  T99_IM  }, "*w'I", "W",   NULL },
!   { "u",     1, STD_C89, { T89_UI,  T99_UC,  T89_US,  T89_UL,  T9L_ULL, TEX_ULL, T99_ST,  T99_UPD, T99_UIM }, "*w'I", "W",   NULL },
!   { "oxX",   1, STD_C89, { T89_UI,  T99_UC,  T89_US,  T89_UL,  T9L_ULL, TEX_ULL, T99_ST,  T99_UPD, T99_UIM }, "*w",   "W",   NULL },
!   { "efgEG", 1, STD_C89, { T89_F,   BADLEN,  BADLEN,  T89_D,   BADLEN,  T89_LD,  BADLEN,  BADLEN,  BADLEN  }, "*w'",  "W",   NULL },
!   { "c",     1, STD_C89, { T89_C,   BADLEN,  BADLEN,  T94_W,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "*w",   "cW",  NULL },
!   { "s",     1, STD_C89, { T89_C,   BADLEN,  BADLEN,  T94_W,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "*aw",  "cW",  NULL },
!   { "[",     1, STD_C89, { T89_C,   BADLEN,  BADLEN,  T94_W,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "*aw",  "cW[", NULL },
!   { "p",     2, STD_C89, { T89_V,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "*w",   "W",   NULL },
!   { "n",     1, STD_C89, { T89_I,   T99_SC,  T89_S,   T89_L,   T9L_LL,  BADLEN,  T99_SST, T99_PD,  T99_IM  }, "",     "W",   NULL },
    /* C99 conversion specifiers.  */
!   { "FaA",   1, STD_C99, { T99_F,   BADLEN,  BADLEN,  T99_D,   BADLEN,  T99_LD,  BADLEN,  BADLEN,  BADLEN  }, "*w'",  "W",   NULL },
    /* X/Open conversion specifiers.  */
!   { "C",     1, STD_EXT, { TEX_W,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "*w",   "W",   NULL },
!   { "S",     1, STD_EXT, { TEX_W,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "*aw",  "W",   NULL },
!   { NULL, 0, 0, NOLENGTHS, NULL, NULL, NULL }
  };
  
  static const format_char_info time_char_table[] =
  {
    /* C89 conversion specifiers.  */
!   { "ABZab",		0, STD_C89, NOLENGTHS, "^#",     "",   NULL },
!   { "cx", 		0, STD_C89, NOLENGTHS, "E",      "3",  NULL },
!   { "HIMSUWdmw",	0, STD_C89, NOLENGTHS, "-_0Ow",  "",   NULL },
!   { "j",		0, STD_C89, NOLENGTHS, "-_0Ow",  "o",  NULL },
!   { "p",		0, STD_C89, NOLENGTHS, "#",      "",   NULL },
!   { "X",		0, STD_C89, NOLENGTHS, "E",      "",   NULL },
!   { "y", 		0, STD_C89, NOLENGTHS, "EO-_0w", "4",  NULL },
!   { "Y",		0, STD_C89, NOLENGTHS, "-_0EOw", "o",  NULL },
!   { "%",		0, STD_C89, NOLENGTHS, "",       "",   NULL },
    /* C99 conversion specifiers.  */
!   { "C",		0, STD_C99, NOLENGTHS, "-_0EOw", "o",  NULL },
!   { "D", 		0, STD_C99, NOLENGTHS, "",       "2",  NULL },
!   { "eVu",		0, STD_C99, NOLENGTHS, "-_0Ow",  "",   NULL },
!   { "FRTnrt",		0, STD_C99, NOLENGTHS, "",       "",   NULL },
!   { "g", 		0, STD_C99, NOLENGTHS, "O-_0w",  "2o", NULL },
!   { "G",		0, STD_C99, NOLENGTHS, "-_0Ow",  "o",  NULL },
!   { "h",		0, STD_C99, NOLENGTHS, "^#",     "",   NULL },
!   { "z",		0, STD_C99, NOLENGTHS, "O",      "o",  NULL },
    /* GNU conversion specifiers.  */
!   { "kls",		0, STD_EXT, NOLENGTHS, "-_0Ow",  "",   NULL },
!   { "P",		0, STD_EXT, NOLENGTHS, "",       "",   NULL },
!   { NULL,		0, 0, NOLENGTHS, NULL, NULL, NULL }
  };
  
  static const format_char_info monetary_char_table[] =
  {
!   { "in", 0, STD_C89, { T89_D, BADLEN, BADLEN, BADLEN, BADLEN, T89_LD, BADLEN, BADLEN, BADLEN }, "=^+(!-w#p", "", NULL },
!   { NULL, 0, 0, NOLENGTHS, NULL, NULL, NULL }
  };
  
  /* This must be in the same order as enum format_type.  */
  static const format_kind_info format_types_orig[] =
  {
*************** static const format_kind_info format_typ
*** 933,951 ****
      'w', 0, 'p', 0, 'L',
      NULL, NULL
    },
!   { "gcc_diag",   gcc_diag_length_specs,  gcc_diag_char_table, "", NULL, 
      gcc_diag_flag_specs, gcc_diag_flag_pairs,
      FMT_FLAG_ARG_CONVERT,
      0, 0, 'p', 0, 'L',
      NULL, &integer_type_node
    },
!   { "gcc_cdiag",   gcc_cdiag_length_specs,  gcc_cdiag_char_table, "", NULL, 
      gcc_cdiag_flag_specs, gcc_cdiag_flag_pairs,
      FMT_FLAG_ARG_CONVERT,
      0, 0, 'p', 0, 'L',
      NULL, &integer_type_node
    },
!   { "gcc_cxxdiag",   gcc_cxxdiag_length_specs,  gcc_cxxdiag_char_table, "+#", NULL, 
      gcc_cxxdiag_flag_specs, gcc_cxxdiag_flag_pairs,
      FMT_FLAG_ARG_CONVERT,
      0, 0, 'p', 0, 'L',
--- 663,681 ----
      'w', 0, 'p', 0, 'L',
      NULL, NULL
    },
!   { "gcc_diag",   gcc_diag_length_specs,  gcc_diag_char_table, "q", NULL, 
      gcc_diag_flag_specs, gcc_diag_flag_pairs,
      FMT_FLAG_ARG_CONVERT,
      0, 0, 'p', 0, 'L',
      NULL, &integer_type_node
    },
!   { "gcc_cdiag",   gcc_cdiag_length_specs,  gcc_cdiag_char_table, "q", NULL, 
      gcc_cdiag_flag_specs, gcc_cdiag_flag_pairs,
      FMT_FLAG_ARG_CONVERT,
      0, 0, 'p', 0, 'L',
      NULL, &integer_type_node
    },
!   { "gcc_cxxdiag",   gcc_cxxdiag_length_specs,  gcc_cxxdiag_char_table, "q+#", NULL, 
      gcc_cxxdiag_flag_specs, gcc_cxxdiag_flag_pairs,
      FMT_FLAG_ARG_CONVERT,
      0, 0, 'p', 0, 'L',
*************** static const format_kind_info format_typ
*** 973,981 ****
     new data if necessary, while still allowing the original data to be
     const.  */
  static const format_kind_info *format_types = format_types_orig;
! /* We can modify this one.  */
  static format_kind_info *dynamic_format_types;
  
  /* Structure detailing the results of checking a format function call
     where the format expression may be a conditional expression with
     many leaves resulting from nested conditional expressions.  */
--- 703,714 ----
     new data if necessary, while still allowing the original data to be
     const.  */
  static const format_kind_info *format_types = format_types_orig;
! /* We can modify this one.  We also add target-specific format types
!    to the end of the array.  */
  static format_kind_info *dynamic_format_types;
  
+ static int n_format_types = ARRAY_SIZE (format_types_orig);
+ 
  /* Structure detailing the results of checking a format function call
     where the format expression may be a conditional expression with
     many leaves resulting from nested conditional expressions.  */
*************** typedef struct
*** 1008,1056 ****
    format_check_results *res;
    function_format_info *info;
    tree params;
-   int *status;
  } format_check_context;
  
! static void check_format_info (int *, function_format_info *, tree);
  static void check_format_arg (void *, tree, unsigned HOST_WIDE_INT);
! static void check_format_info_main (int *, format_check_results *,
  				    function_format_info *,
  				    const char *, int, tree,
  				    unsigned HOST_WIDE_INT);
- static void status_warning (int *, const char *, ...)
-      ATTRIBUTE_PRINTF_2;
  
  static void init_dollar_format_checking (int, tree);
! static int maybe_read_dollar_number (int *, const char **, int,
  				     tree, tree *, const format_kind_info *);
! static void finish_dollar_format_checking (int *, format_check_results *, int);
  
  static const format_flag_spec *get_flag_spec (const format_flag_spec *,
  					      int, const char *);
  
! static void check_format_types (int *, format_wanted_type *);
  
  /* Decode a format type from a string, returning the type, or
     format_type_error if not valid, in which case the caller should print an
     error message.  */
! static enum format_type
  decode_format_type (const char *s)
  {
    int i;
    int slen;
    slen = strlen (s);
!   for (i = 0; i < (int) format_type_error; i++)
      {
        int alen;
        if (!strcmp (s, format_types[i].name))
! 	break;
        alen = strlen (format_types[i].name);
        if (slen == alen + 4 && s[0] == '_' && s[1] == '_'
  	  && s[slen - 1] == '_' && s[slen - 2] == '_'
  	  && !strncmp (s + 2, format_types[i].name, alen))
! 	break;
      }
!   return ((enum format_type) i);
  }
  
  
--- 741,789 ----
    format_check_results *res;
    function_format_info *info;
    tree params;
  } format_check_context;
  
! static void check_format_info (function_format_info *, tree);
  static void check_format_arg (void *, tree, unsigned HOST_WIDE_INT);
! static void check_format_info_main (format_check_results *,
  				    function_format_info *,
  				    const char *, int, tree,
  				    unsigned HOST_WIDE_INT);
  
  static void init_dollar_format_checking (int, tree);
! static int maybe_read_dollar_number (const char **, int,
  				     tree, tree *, const format_kind_info *);
! static bool avoid_dollar_number (const char *);
! static void finish_dollar_format_checking (format_check_results *, int);
  
  static const format_flag_spec *get_flag_spec (const format_flag_spec *,
  					      int, const char *);
  
! static void check_format_types (format_wanted_type *, const char *, int);
! static void format_type_warning (const char *, const char *, int, tree,
! 				 int, const char *, tree, int);
  
  /* Decode a format type from a string, returning the type, or
     format_type_error if not valid, in which case the caller should print an
     error message.  */
! static int
  decode_format_type (const char *s)
  {
    int i;
    int slen;
    slen = strlen (s);
!   for (i = 0; i < n_format_types; i++)
      {
        int alen;
        if (!strcmp (s, format_types[i].name))
! 	return i;
        alen = strlen (format_types[i].name);
        if (slen == alen + 4 && s[0] == '_' && s[1] == '_'
  	  && s[slen - 1] == '_' && s[slen - 2] == '_'
  	  && !strncmp (s + 2, format_types[i].name, alen))
! 	return i;
      }
!   return format_type_error;
  }
  
  
*************** decode_format_type (const char *s)
*** 1061,1067 ****
     attribute themselves.  */
  
  void
! check_function_format (int *status, tree attrs, tree params)
  {
    tree a;
  
--- 794,800 ----
     attribute themselves.  */
  
  void
! check_function_format (tree attrs, tree params)
  {
    tree a;
  
*************** check_function_format (int *status, tree
*** 1073,1079 ****
  	  /* Yup; check it.  */
  	  function_format_info info;
  	  decode_format_attr (TREE_VALUE (a), &info, 1);
! 	  check_format_info (status, &info, params);
  	  if (warn_missing_format_attribute && info.first_arg_num == 0
  	      && (format_types[info.format_type].flags
  		  & (int) FMT_FLAG_ARG_CONVERT))
--- 806,812 ----
  	  /* Yup; check it.  */
  	  function_format_info info;
  	  decode_format_attr (TREE_VALUE (a), &info, 1);
! 	  check_format_info (&info, params);
  	  if (warn_missing_format_attribute && info.first_arg_num == 0
  	      && (format_types[info.format_type].flags
  		  & (int) FMT_FLAG_ARG_CONVERT))
*************** check_function_format (int *status, tree
*** 1104,1110 ****
  			break;
  		    }
  		  if (args != 0)
! 		    warning ("function might be possible candidate for `%s' format attribute",
  			     format_types[info.format_type].name);
  		}
  	    }
--- 837,843 ----
  			break;
  		    }
  		  if (args != 0)
! 		    warning ("function might be possible candidate for %qs format attribute",
  			     format_types[info.format_type].name);
  		}
  	    }
*************** check_function_format (int *status, tree
*** 1112,1142 ****
      }
  }
  
- /* This function replaces `warning' inside the printf format checking
-    functions.  If the `status' parameter is non-NULL, then it is
-    dereferenced and set to 1 whenever a warning is caught.  Otherwise
-    it warns as usual by replicating the innards of the warning
-    function from diagnostic.c.  */
- static void
- status_warning (int *status, const char *msgid, ...)
- {
-   diagnostic_info diagnostic ;
-   va_list ap;
-   
-   va_start (ap, msgid);
- 
-   if (status)
-     *status = 1;
-   else
-     {
-       /* This duplicates the warning function behavior.  */
-       diagnostic_set_info (&diagnostic, _(msgid), &ap,
- 			   input_location, DK_WARNING);
-       report_diagnostic (&diagnostic);
-     }
- 
-   va_end (ap);
- }
  
  /* Variables used by the checking of $ operand number formats.  */
  static char *dollar_arguments_used = NULL;
--- 845,850 ----
*************** init_dollar_format_checking (int first_a
*** 1177,1184 ****
        if (dollar_arguments_pointer_p)
  	free (dollar_arguments_pointer_p);
        dollar_arguments_alloc = dollar_arguments_count;
!       dollar_arguments_used = xmalloc (dollar_arguments_alloc);
!       dollar_arguments_pointer_p = xmalloc (dollar_arguments_alloc);
      }
    if (dollar_arguments_alloc)
      {
--- 885,892 ----
        if (dollar_arguments_pointer_p)
  	free (dollar_arguments_pointer_p);
        dollar_arguments_alloc = dollar_arguments_count;
!       dollar_arguments_used = XNEWVEC (char, dollar_arguments_alloc);
!       dollar_arguments_pointer_p = XNEWVEC (char, dollar_arguments_alloc);
      }
    if (dollar_arguments_alloc)
      {
*************** init_dollar_format_checking (int first_a
*** 1209,1226 ****
     a $ format is found, *FORMAT is updated to point just after it.  */
  
  static int
! maybe_read_dollar_number (int *status, const char **format,
  			  int dollar_needed, tree params, tree *param_ptr,
  			  const format_kind_info *fki)
  {
    int argnum;
    int overflow_flag;
    const char *fcp = *format;
!   if (! ISDIGIT (*fcp))
      {
        if (dollar_needed)
  	{
! 	  status_warning (status, "missing $ operand number in format");
  	  return -1;
  	}
        else
--- 917,934 ----
     a $ format is found, *FORMAT is updated to point just after it.  */
  
  static int
! maybe_read_dollar_number (const char **format,
  			  int dollar_needed, tree params, tree *param_ptr,
  			  const format_kind_info *fki)
  {
    int argnum;
    int overflow_flag;
    const char *fcp = *format;
!   if (!ISDIGIT (*fcp))
      {
        if (dollar_needed)
  	{
! 	  warning ("missing $ operand number in format");
  	  return -1;
  	}
        else
*************** maybe_read_dollar_number (int *status, c
*** 1241,1247 ****
      {
        if (dollar_needed)
  	{
! 	  status_warning (status, "missing $ operand number in format");
  	  return -1;
  	}
        else
--- 949,955 ----
      {
        if (dollar_needed)
  	{
! 	  warning ("missing $ operand number in format");
  	  return -1;
  	}
        else
*************** maybe_read_dollar_number (int *status, c
*** 1250,1264 ****
    *format = fcp + 1;
    if (pedantic && !dollar_format_warned)
      {
!       status_warning (status,
! 		      "%s does not support %%n$ operand number formats",
! 		      C_STD_NAME (STD_EXT));
        dollar_format_warned = 1;
      }
    if (overflow_flag || argnum == 0
        || (dollar_first_arg_num && argnum > dollar_arguments_count))
      {
!       status_warning (status, "operand number out of range in format");
        return -1;
      }
    if (argnum > dollar_max_arg_used)
--- 958,971 ----
    *format = fcp + 1;
    if (pedantic && !dollar_format_warned)
      {
!       warning ("%s does not support %%n$ operand number formats",
! 	       C_STD_NAME (STD_EXT));
        dollar_format_warned = 1;
      }
    if (overflow_flag || argnum == 0
        || (dollar_first_arg_num && argnum > dollar_arguments_count))
      {
!       warning ("operand number out of range in format");
        return -1;
      }
    if (argnum > dollar_max_arg_used)
*************** maybe_read_dollar_number (int *status, c
*** 1269,1277 ****
      {
        int nalloc;
        nalloc = 2 * dollar_arguments_alloc + 16;
!       dollar_arguments_used = xrealloc (dollar_arguments_used, nalloc);
!       dollar_arguments_pointer_p = xrealloc (dollar_arguments_pointer_p,
! 					     nalloc);
        memset (dollar_arguments_used + dollar_arguments_alloc, 0,
  	      nalloc - dollar_arguments_alloc);
        dollar_arguments_alloc = nalloc;
--- 976,985 ----
      {
        int nalloc;
        nalloc = 2 * dollar_arguments_alloc + 16;
!       dollar_arguments_used = XRESIZEVEC (char, dollar_arguments_used,
! 					  nalloc);
!       dollar_arguments_pointer_p = XRESIZEVEC (char, dollar_arguments_pointer_p,
! 					       nalloc);
        memset (dollar_arguments_used + dollar_arguments_alloc, 0,
  	      nalloc - dollar_arguments_alloc);
        dollar_arguments_alloc = nalloc;
*************** maybe_read_dollar_number (int *status, c
*** 1280,1288 ****
        && dollar_arguments_used[argnum - 1] == 1)
      {
        dollar_arguments_used[argnum - 1] = 2;
!       status_warning (status,
! 		      "format argument %d used more than once in %s format",
! 		      argnum, fki->name);
      }
    else
      dollar_arguments_used[argnum - 1] = 1;
--- 988,995 ----
        && dollar_arguments_used[argnum - 1] == 1)
      {
        dollar_arguments_used[argnum - 1] = 2;
!       warning ("format argument %d used more than once in %s format",
! 	       argnum, fki->name);
      }
    else
      dollar_arguments_used[argnum - 1] = 1;
*************** maybe_read_dollar_number (int *status, c
*** 1293,1309 ****
        for (i = 1; i < argnum && *param_ptr != 0; i++)
  	*param_ptr = TREE_CHAIN (*param_ptr);
  
!       if (*param_ptr == 0)
! 	{
! 	  /* This case shouldn't be caught here.  */
! 	  abort ();
! 	}
      }
    else
      *param_ptr = 0;
    return argnum;
  }
  
  
  /* Finish the checking for a format string that used $ operand number formats
     instead of non-$ formats.  We check for unused operands before used ones
--- 1000,1031 ----
        for (i = 1; i < argnum && *param_ptr != 0; i++)
  	*param_ptr = TREE_CHAIN (*param_ptr);
  
!       /* This case shouldn't be caught here.  */
!       gcc_assert (*param_ptr);
      }
    else
      *param_ptr = 0;
    return argnum;
  }
  
+ /* Ensure that FORMAT does not start with a decimal number followed by
+    a $; give a diagnostic and return true if it does, false otherwise.  */
+ 
+ static bool
+ avoid_dollar_number (const char *format)
+ {
+   if (!ISDIGIT (*format))
+     return false;
+   while (ISDIGIT (*format))
+     format++;
+   if (*format == '$')
+     {
+       warning ("$ operand number used after format without operand number");
+       return true;
+     }
+   return false;
+ }
+ 
  
  /* Finish the checking for a format string that used $ operand number formats
     instead of non-$ formats.  We check for unused operands before used ones
*************** maybe_read_dollar_number (int *status, c
*** 1316,1322 ****
     pointers.  */
  
  static void
! finish_dollar_format_checking (int *status, format_check_results *res, int pointer_gap_ok)
  {
    int i;
    bool found_pointer_gap = false;
--- 1038,1044 ----
     pointers.  */
  
  static void
! finish_dollar_format_checking (format_check_results *res, int pointer_gap_ok)
  {
    int i;
    bool found_pointer_gap = false;
*************** finish_dollar_format_checking (int *stat
*** 1328,1335 ****
  				 || dollar_arguments_pointer_p[i]))
  	    found_pointer_gap = true;
  	  else
! 	    status_warning (status, "format argument %d unused before used argument %d in $-style format",
! 			    i + 1, dollar_max_arg_used);
  	}
      }
    if (found_pointer_gap
--- 1050,1057 ----
  				 || dollar_arguments_pointer_p[i]))
  	    found_pointer_gap = true;
  	  else
! 	    warning ("format argument %d unused before used argument %d in $-style format",
! 		     i + 1, dollar_max_arg_used);
  	}
      }
    if (found_pointer_gap
*************** get_flag_spec (const format_flag_spec *s
*** 1367,1376 ****
        else if (spec[i].predicate == 0)
  	return &spec[i];
      }
!   if (predicates == NULL)
!     abort ();
!   else
!     return NULL;
  }
  
  
--- 1089,1096 ----
        else if (spec[i].predicate == 0)
  	return &spec[i];
      }
!   gcc_assert (predicates);
!   return NULL;
  }
  
  
*************** get_flag_spec (const format_flag_spec *s
*** 1379,1385 ****
     PARAMS is the list of argument values.  */
  
  static void
! check_format_info (int *status, function_format_info *info, tree params)
  {
    format_check_context format_ctx;
    unsigned HOST_WIDE_INT arg_num;
--- 1099,1105 ----
     PARAMS is the list of argument values.  */
  
  static void
! check_format_info (function_format_info *info, tree params)
  {
    format_check_context format_ctx;
    unsigned HOST_WIDE_INT arg_num;
*************** check_format_info (int *status, function
*** 1411,1417 ****
    format_ctx.res = &res;
    format_ctx.info = info;
    format_ctx.params = params;
-   format_ctx.status = status;
  
    check_function_arguments_recurse (check_format_arg, &format_ctx,
  				    format_tree, arg_num);
--- 1131,1136 ----
*************** check_format_info (int *status, function
*** 1426,1432 ****
  	  /* For strftime-like formats, warn for not checking the format
  	     string; but there are no arguments to check.  */
  	  if (warn_format_nonliteral)
! 	    status_warning (status, "format not a string literal, format string not checked");
  	}
        else if (info->first_arg_num != 0)
  	{
--- 1145,1151 ----
  	  /* For strftime-like formats, warn for not checking the format
  	     string; but there are no arguments to check.  */
  	  if (warn_format_nonliteral)
! 	    warning ("format not a string literal, format string not checked");
  	}
        else if (info->first_arg_num != 0)
  	{
*************** check_format_info (int *status, function
*** 1440,1448 ****
  	      ++arg_num;
  	    }
  	  if (params == 0 && (warn_format_nonliteral || warn_format_security))
! 	    status_warning (status, "format not a string literal and no format arguments");
  	  else if (warn_format_nonliteral)
! 	    status_warning (status, "format not a string literal, argument types not checked");
  	}
      }
  
--- 1159,1167 ----
  	      ++arg_num;
  	    }
  	  if (params == 0 && (warn_format_nonliteral || warn_format_security))
! 	    warning ("format not a string literal and no format arguments");
  	  else if (warn_format_nonliteral)
! 	    warning ("format not a string literal, argument types not checked");
  	}
      }
  
*************** check_format_info (int *status, function
*** 1455,1474 ****
       case of extra format arguments.  */
    if (res.number_extra_args > 0 && res.number_non_literal == 0
        && res.number_other == 0 && warn_format_extra_args)
!     status_warning (status, "too many arguments for format");
    if (res.number_dollar_extra_args > 0 && res.number_non_literal == 0
        && res.number_other == 0 && warn_format_extra_args)
!     status_warning (status, "unused arguments in $-style format");
    if (res.number_empty > 0 && res.number_non_literal == 0
        && res.number_other == 0 && warn_format_zero_length)
!     status_warning (status, "zero-length %s format string",
! 		    format_types[info->format_type].name);
  
    if (res.number_wide > 0)
!     status_warning (status, "format is a wide character string");
  
    if (res.number_unterminated > 0)
!     status_warning (status, "unterminated format string");
  }
  
  /* Callback from check_function_arguments_recurse to check a
--- 1174,1193 ----
       case of extra format arguments.  */
    if (res.number_extra_args > 0 && res.number_non_literal == 0
        && res.number_other == 0 && warn_format_extra_args)
!     warning ("too many arguments for format");
    if (res.number_dollar_extra_args > 0 && res.number_non_literal == 0
        && res.number_other == 0 && warn_format_extra_args)
!     warning ("unused arguments in $-style format");
    if (res.number_empty > 0 && res.number_non_literal == 0
        && res.number_other == 0 && warn_format_zero_length)
!     warning ("zero-length %s format string",
! 	     format_types[info->format_type].name);
  
    if (res.number_wide > 0)
!     warning ("format is a wide character string");
  
    if (res.number_unterminated > 0)
!     warning ("unterminated format string");
  }
  
  /* Callback from check_function_arguments_recurse to check a
*************** static void
*** 1480,1490 ****
  check_format_arg (void *ctx, tree format_tree,
  		  unsigned HOST_WIDE_INT arg_num)
  {
!   format_check_context *format_ctx = ctx;
    format_check_results *res = format_ctx->res;
    function_format_info *info = format_ctx->info;
    tree params = format_ctx->params;
-   int *status = format_ctx->status;
  
    int format_length;
    HOST_WIDE_INT offset;
--- 1199,1208 ----
  check_format_arg (void *ctx, tree format_tree,
  		  unsigned HOST_WIDE_INT arg_num)
  {
!   format_check_context *format_ctx = (format_check_context *) ctx;
    format_check_results *res = format_ctx->res;
    function_format_info *info = format_ctx->info;
    tree params = format_ctx->params;
  
    int format_length;
    HOST_WIDE_INT offset;
*************** check_format_arg (void *ctx, tree format
*** 1572,1579 ****
    if (array_size != 0)
      {
        /* Variable length arrays can't be initialized.  */
!       if (TREE_CODE (array_size) != INTEGER_CST)
! 	abort ();
        if (host_integerp (array_size, 0))
  	{
  	  HOST_WIDE_INT array_size_value = TREE_INT_CST_LOW (array_size);
--- 1290,1297 ----
    if (array_size != 0)
      {
        /* Variable length arrays can't be initialized.  */
!       gcc_assert (TREE_CODE (array_size) == INTEGER_CST);
!       
        if (host_integerp (array_size, 0))
  	{
  	  HOST_WIDE_INT array_size_value = TREE_INT_CST_LOW (array_size);
*************** check_format_arg (void *ctx, tree format
*** 1621,1627 ****
       will decrement it if it finds there are extra arguments, but this way
       need not adjust it for every return.  */
    res->number_other++;
!   check_format_info_main (status, res, info, format_chars, format_length,
  			  params, arg_num);
  }
  
--- 1339,1345 ----
       will decrement it if it finds there are extra arguments, but this way
       need not adjust it for every return.  */
    res->number_other++;
!   check_format_info_main (res, info, format_chars, format_length,
  			  params, arg_num);
  }
  
*************** check_format_arg (void *ctx, tree format
*** 1634,1640 ****
     argument in the list of arguments.  */
  
  static void
! check_format_info_main (int *status, format_check_results *res,
  			function_format_info *info, const char *format_chars,
  			int format_length, tree params,
  			unsigned HOST_WIDE_INT arg_num)
--- 1352,1358 ----
     argument in the list of arguments.  */
  
  static void
! check_format_info_main (format_check_results *res,
  			function_format_info *info, const char *format_chars,
  			int format_length, tree params,
  			unsigned HOST_WIDE_INT arg_num)
*************** check_format_info_main (int *status, for
*** 1675,1684 ****
        const format_char_info *fci = NULL;
        char flag_chars[256];
        int aflag = 0;
        if (*format_chars == 0)
  	{
  	  if (format_chars - orig_format_chars != format_length)
! 	    status_warning (status, "embedded `\\0' in format");
  	  if (info->first_arg_num != 0 && params != 0
  	      && has_operand_number <= 0)
  	    {
--- 1393,1403 ----
        const format_char_info *fci = NULL;
        char flag_chars[256];
        int aflag = 0;
+       const char *format_start = format_chars;
        if (*format_chars == 0)
  	{
  	  if (format_chars - orig_format_chars != format_length)
! 	    warning ("embedded %<\\0%> in format");
  	  if (info->first_arg_num != 0 && params != 0
  	      && has_operand_number <= 0)
  	    {
*************** check_format_info_main (int *status, for
*** 1686,1699 ****
  	      res->number_extra_args++;
  	    }
  	  if (has_operand_number > 0)
! 	    finish_dollar_format_checking (status, res, fki->flags & (int) FMT_FLAG_DOLLAR_GAP_POINTER_OK);
  	  return;
  	}
        if (*format_chars++ != '%')
  	continue;
        if (*format_chars == 0)
  	{
! 	  status_warning (status, "spurious trailing `%%' in format");
  	  continue;
  	}
        if (*format_chars == '%')
--- 1405,1418 ----
  	      res->number_extra_args++;
  	    }
  	  if (has_operand_number > 0)
! 	    finish_dollar_format_checking (res, fki->flags & (int) FMT_FLAG_DOLLAR_GAP_POINTER_OK);
  	  return;
  	}
        if (*format_chars++ != '%')
  	continue;
        if (*format_chars == 0)
  	{
! 	  warning ("spurious trailing %<%%%> in format");
  	  continue;
  	}
        if (*format_chars == '%')
*************** check_format_info_main (int *status, for
*** 1710,1716 ****
  	     is not used here, we can't immediately conclude this is a
  	     format without them, since it could be printf %m or scanf %*.  */
  	  int opnum;
! 	  opnum = maybe_read_dollar_number (status, &format_chars, 0,
  					    first_fillin_param,
  					    &main_arg_params, fki);
  	  if (opnum == -1)
--- 1429,1435 ----
  	     is not used here, we can't immediately conclude this is a
  	     format without them, since it could be printf %m or scanf %*.  */
  	  int opnum;
! 	  opnum = maybe_read_dollar_number (&format_chars, 0,
  					    first_fillin_param,
  					    &main_arg_params, fki);
  	  if (opnum == -1)
*************** check_format_info_main (int *status, for
*** 1721,1726 ****
--- 1440,1450 ----
  	      main_arg_num = opnum + info->first_arg_num - 1;
  	    }
  	}
+       else if (fki->flags & FMT_FLAG_USE_DOLLAR)
+ 	{
+ 	  if (avoid_dollar_number (format_chars))
+ 	    return;
+ 	}
  
        /* Read any format flags, but do not yet validate them beyond removing
  	 duplicates, since in general validation depends on the rest of
*************** check_format_info_main (int *status, for
*** 1732,1738 ****
  						     *format_chars, NULL);
  	  if (strchr (flag_chars, *format_chars) != 0)
  	    {
! 	      status_warning (status, "repeated %s in format", _(s->name));
  	    }
  	  else
  	    {
--- 1456,1462 ----
  						     *format_chars, NULL);
  	  if (strchr (flag_chars, *format_chars) != 0)
  	    {
! 	      warning ("repeated %s in format", _(s->name));
  	    }
  	  else
  	    {
*************** check_format_info_main (int *status, for
*** 1745,1751 ****
  	      ++format_chars;
  	      if (*format_chars == 0)
  		{
! 		  status_warning (status, "missing fill character at end of strfmon format");
  		  return;
  		}
  	    }
--- 1469,1475 ----
  	      ++format_chars;
  	      if (*format_chars == 0)
  		{
! 		  warning ("missing fill character at end of strfmon format");
  		  return;
  		}
  	    }
*************** check_format_info_main (int *status, for
*** 1766,1772 ****
  	      if (has_operand_number != 0)
  		{
  		  int opnum;
! 		  opnum = maybe_read_dollar_number (status, &format_chars,
  						    has_operand_number == 1,
  						    first_fillin_param,
  						    &params, fki);
--- 1490,1496 ----
  	      if (has_operand_number != 0)
  		{
  		  int opnum;
! 		  opnum = maybe_read_dollar_number (&format_chars,
  						    has_operand_number == 1,
  						    first_fillin_param,
  						    &params, fki);
*************** check_format_info_main (int *status, for
*** 1780,1790 ****
  		  else
  		    has_operand_number = 0;
  		}
  	      if (info->first_arg_num != 0)
  		{
  		  if (params == 0)
  		    {
! 		      status_warning (status, "too few arguments for format");
  		      return;
  		    }
  		  cur_param = TREE_VALUE (params);
--- 1504,1519 ----
  		  else
  		    has_operand_number = 0;
  		}
+ 	      else
+ 		{
+ 		  if (avoid_dollar_number (format_chars))
+ 		    return;
+ 		}
  	      if (info->first_arg_num != 0)
  		{
  		  if (params == 0)
  		    {
! 		      warning ("too few arguments for format");
  		      return;
  		    }
  		  cur_param = TREE_VALUE (params);
*************** check_format_info_main (int *status, for
*** 1825,1832 ****
  		}
  	      if (found_width && !non_zero_width_char &&
  		  (fki->flags & (int) FMT_FLAG_ZERO_WIDTH_BAD))
! 		status_warning (status, "zero width in %s format",
! 				fki->name);
  	      if (found_width)
  		{
  		  i = strlen (flag_chars);
--- 1554,1560 ----
  		}
  	      if (found_width && !non_zero_width_char &&
  		  (fki->flags & (int) FMT_FLAG_ZERO_WIDTH_BAD))
! 		warning ("zero width in %s format", fki->name);
  	      if (found_width)
  		{
  		  i = strlen (flag_chars);
*************** check_format_info_main (int *status, for
*** 1844,1851 ****
  	  flag_chars[i++] = fki->left_precision_char;
  	  flag_chars[i] = 0;
  	  if (!ISDIGIT (*format_chars))
! 	    status_warning (status, "empty left precision in %s format",
! 			    fki->name);
  	  while (ISDIGIT (*format_chars))
  	    ++format_chars;
  	}
--- 1572,1578 ----
  	  flag_chars[i++] = fki->left_precision_char;
  	  flag_chars[i] = 0;
  	  if (!ISDIGIT (*format_chars))
! 	    warning ("empty left precision in %s format", fki->name);
  	  while (ISDIGIT (*format_chars))
  	    ++format_chars;
  	}
*************** check_format_info_main (int *status, for
*** 1865,1871 ****
  	      if (has_operand_number != 0)
  		{
  		  int opnum;
! 		  opnum = maybe_read_dollar_number (status, &format_chars,
  						    has_operand_number == 1,
  						    first_fillin_param,
  						    &params, fki);
--- 1592,1598 ----
  	      if (has_operand_number != 0)
  		{
  		  int opnum;
! 		  opnum = maybe_read_dollar_number (&format_chars,
  						    has_operand_number == 1,
  						    first_fillin_param,
  						    &params, fki);
*************** check_format_info_main (int *status, for
*** 1879,1889 ****
  		  else
  		    has_operand_number = 0;
  		}
  	      if (info->first_arg_num != 0)
  		{
  		  if (params == 0)
  		    {
! 		      status_warning (status, "too few arguments for format");
  		      return;
  		    }
  		  cur_param = TREE_VALUE (params);
--- 1606,1621 ----
  		  else
  		    has_operand_number = 0;
  		}
+ 	      else
+ 		{
+ 		  if (avoid_dollar_number (format_chars))
+ 		    return;
+ 		}
  	      if (info->first_arg_num != 0)
  		{
  		  if (params == 0)
  		    {
! 		      warning ("too few arguments for format");
  		      return;
  		    }
  		  cur_param = TREE_VALUE (params);
*************** check_format_info_main (int *status, for
*** 1913,1920 ****
  	    {
  	      if (!(fki->flags & (int) FMT_FLAG_EMPTY_PREC_OK)
  		  && !ISDIGIT (*format_chars))
! 		status_warning (status, "empty precision in %s format",
! 				fki->name);
  	      while (ISDIGIT (*format_chars))
  		++format_chars;
  	    }
--- 1645,1651 ----
  	    {
  	      if (!(fki->flags & (int) FMT_FLAG_EMPTY_PREC_OK)
  		  && !ISDIGIT (*format_chars))
! 		warning ("empty precision in %s format", fki->name);
  	      while (ISDIGIT (*format_chars))
  		++format_chars;
  	    }
*************** check_format_info_main (int *status, for
*** 1953,1961 ****
  	    {
  	      /* Warn if the length modifier is non-standard.  */
  	      if (ADJ_STD (length_chars_std) > C_STD_VER)
! 		status_warning (status, "%s does not support the `%s' %s length modifier",
! 				C_STD_NAME (length_chars_std), length_chars,
! 				fki->name);
  	    }
  	}
  
--- 1684,1692 ----
  	    {
  	      /* Warn if the length modifier is non-standard.  */
  	      if (ADJ_STD (length_chars_std) > C_STD_VER)
! 		warning ("%s does not support the %qs %s length modifier",
! 			 C_STD_NAME (length_chars_std), length_chars,
! 			 fki->name);
  	    }
  	}
  
*************** check_format_info_main (int *status, for
*** 1969,1975 ****
  		{
  		  const format_flag_spec *s = get_flag_spec (flag_specs,
  							     *format_chars, NULL);
! 		  status_warning (status, "repeated %s in format", _(s->name));
  		}
  	      else
  		{
--- 1700,1706 ----
  		{
  		  const format_flag_spec *s = get_flag_spec (flag_specs,
  							     *format_chars, NULL);
! 		  warning ("repeated %s in format", _(s->name));
  		}
  	      else
  		{
*************** check_format_info_main (int *status, for
*** 1989,1995 ****
  	      if (format_chars[1] == 's' || format_chars[1] == 'S'
  		  || format_chars[1] == '[')
  		{
! 		  /* `a' is used as a flag.  */
  		  i = strlen (flag_chars);
  		  flag_chars[i++] = 'a';
  		  flag_chars[i] = 0;
--- 1720,1726 ----
  	      if (format_chars[1] == 's' || format_chars[1] == 'S'
  		  || format_chars[1] == '[')
  		{
! 		  /* 'a' is used as a flag.  */
  		  i = strlen (flag_chars);
  		  flag_chars[i++] = 'a';
  		  flag_chars[i] = 0;
*************** check_format_info_main (int *status, for
*** 2003,2009 ****
  	  || (!(fki->flags & (int) FMT_FLAG_FANCY_PERCENT_OK)
  	      && format_char == '%'))
  	{
! 	  status_warning (status, "conversion lacks type at end of format");
  	  continue;
  	}
        format_chars++;
--- 1734,1740 ----
  	  || (!(fki->flags & (int) FMT_FLAG_FANCY_PERCENT_OK)
  	      && format_char == '%'))
  	{
! 	  warning ("conversion lacks type at end of format");
  	  continue;
  	}
        format_chars++;
*************** check_format_info_main (int *status, for
*** 2013,2031 ****
  	  ++fci;
        if (fci->format_chars == 0)
  	{
!           if (ISGRAPH(format_char))
! 	    status_warning (status, "unknown conversion type character `%c' in format",
  		     format_char);
  	  else
! 	    status_warning (status, "unknown conversion type character 0x%x in format",
  		     format_char);
  	  continue;
  	}
        if (pedantic)
  	{
  	  if (ADJ_STD (fci->std) > C_STD_VER)
! 	    status_warning (status, "%s does not support the `%%%c' %s format",
! 			    C_STD_NAME (fci->std), format_char, fki->name);
  	}
  
        /* Validate the individual flags used, removing any that are invalid.  */
--- 1744,1762 ----
  	  ++fci;
        if (fci->format_chars == 0)
  	{
!           if (ISGRAPH (format_char))
! 	    warning ("unknown conversion type character %qc in format",
  		     format_char);
  	  else
! 	    warning ("unknown conversion type character 0x%x in format",
  		     format_char);
  	  continue;
  	}
        if (pedantic)
  	{
  	  if (ADJ_STD (fci->std) > C_STD_VER)
! 	    warning ("%s does not support the %<%%%c%> %s format",
! 		     C_STD_NAME (fci->std), format_char, fki->name);
  	}
  
        /* Validate the individual flags used, removing any that are invalid.  */
*************** check_format_info_main (int *status, for
*** 2040,2047 ****
  	      continue;
  	    if (strchr (fci->flag_chars, flag_chars[i]) == 0)
  	      {
! 		status_warning (status, "%s used with `%%%c' %s format",
! 				_(s->name), format_char, fki->name);
  		d++;
  		continue;
  	      }
--- 1771,1778 ----
  	      continue;
  	    if (strchr (fci->flag_chars, flag_chars[i]) == 0)
  	      {
! 		warning ("%s used with %<%%%c%> %s format",
! 			 _(s->name), format_char, fki->name);
  		d++;
  		continue;
  	      }
*************** check_format_info_main (int *status, for
*** 2049,2056 ****
  	      {
  		const format_flag_spec *t;
  		if (ADJ_STD (s->std) > C_STD_VER)
! 		  status_warning (status, "%s does not support %s",
! 				  C_STD_NAME (s->std), _(s->long_name));
  		t = get_flag_spec (flag_specs, flag_chars[i], fci->flags2);
  		if (t != NULL && ADJ_STD (t->std) > ADJ_STD (s->std))
  		  {
--- 1780,1787 ----
  	      {
  		const format_flag_spec *t;
  		if (ADJ_STD (s->std) > C_STD_VER)
! 		  warning ("%s does not support %s",
! 			   C_STD_NAME (s->std), _(s->long_name));
  		t = get_flag_spec (flag_specs, flag_chars[i], fci->flags2);
  		if (t != NULL && ADJ_STD (t->std) > ADJ_STD (s->std))
  		  {
*************** check_format_info_main (int *status, for
*** 2058,2066 ****
  					     ? t->long_name
  					     : s->long_name);
  		    if (ADJ_STD (t->std) > C_STD_VER)
! 		      status_warning (status, "%s does not support %s with the `%%%c' %s format",
! 				      C_STD_NAME (t->std), _(long_name),
! 				      format_char, fki->name);
  		  }
  	      }
  	  }
--- 1789,1797 ----
  					     ? t->long_name
  					     : s->long_name);
  		    if (ADJ_STD (t->std) > C_STD_VER)
! 		      warning ("%s does not support %s with the %<%%%c%> %s format",
! 			       C_STD_NAME (t->std), _(long_name),
! 			       format_char, fki->name);
  		  }
  	      }
  	  }
*************** check_format_info_main (int *status, for
*** 2091,2112 ****
  	  if (bad_flag_pairs[i].ignored)
  	    {
  	      if (bad_flag_pairs[i].predicate != 0)
! 		status_warning (status, "%s ignored with %s and `%%%c' %s format",
! 				_(s->name), _(t->name), format_char,
! 				fki->name);
  	      else
! 		status_warning (status, "%s ignored with %s in %s format",
! 				_(s->name), _(t->name), fki->name);
  	    }
  	  else
  	    {
  	      if (bad_flag_pairs[i].predicate != 0)
! 		status_warning (status, "use of %s and %s together with `%%%c' %s format",
! 				_(s->name), _(t->name), format_char,
! 				fki->name);
  	      else
! 		status_warning (status, "use of %s and %s together in %s format",
! 				_(s->name), _(t->name), fki->name);
  	    }
  	}
  
--- 1822,1843 ----
  	  if (bad_flag_pairs[i].ignored)
  	    {
  	      if (bad_flag_pairs[i].predicate != 0)
! 		warning ("%s ignored with %s and %<%%%c%> %s format",
! 			 _(s->name), _(t->name), format_char,
! 			 fki->name);
  	      else
! 		warning ("%s ignored with %s in %s format",
! 			 _(s->name), _(t->name), fki->name);
  	    }
  	  else
  	    {
  	      if (bad_flag_pairs[i].predicate != 0)
! 		warning ("use of %s and %s together with %<%%%c%> %s format",
! 			 _(s->name), _(t->name), format_char,
! 			 fki->name);
  	      else
! 		warning ("use of %s and %s together in %s format",
! 			 _(s->name), _(t->name), fki->name);
  	    }
  	}
  
*************** check_format_info_main (int *status, for
*** 2124,2133 ****
  	  else if (strchr (fci->flags2, '2') != 0)
  	    y2k_level = 2;
  	  if (y2k_level == 3)
! 	    status_warning (status, "`%%%c' yields only last 2 digits of year in some locales",
! 			    format_char);
  	  else if (y2k_level == 2)
! 	    status_warning (status, "`%%%c' yields only last 2 digits of year", format_char);
  	}
  
        if (strchr (fci->flags2, '[') != 0)
--- 1855,1864 ----
  	  else if (strchr (fci->flags2, '2') != 0)
  	    y2k_level = 2;
  	  if (y2k_level == 3)
! 	    warning ("%<%%%c%> yields only last 2 digits of year in some locales",
! 		     format_char);
  	  else if (y2k_level == 2)
! 	    warning ("%<%%%c%> yields only last 2 digits of year", format_char);
  	}
  
        if (strchr (fci->flags2, '[') != 0)
*************** check_format_info_main (int *status, for
*** 2143,2149 ****
  	    ++format_chars;
  	  if (*format_chars != ']')
  	    /* The end of the format string was reached.  */
! 	    status_warning (status, "no closing `]' for `%%[' format");
  	}
  
        wanted_type = 0;
--- 1874,1880 ----
  	    ++format_chars;
  	  if (*format_chars != ']')
  	    /* The end of the format string was reached.  */
! 	    warning ("no closing %<]%> for %<%%[%> format");
  	}
  
        wanted_type = 0;
*************** check_format_info_main (int *status, for
*** 2156,2169 ****
  	  wanted_type_std = fci->types[length_chars_val].std;
  	  if (wanted_type == 0)
  	    {
! 	      status_warning (status, "use of `%s' length modifier with `%c' type character",
! 			      length_chars, format_char);
  	      /* Heuristic: skip one argument when an invalid length/type
  		 combination is encountered.  */
  	      arg_num++;
  	      if (params == 0)
  		{
! 		  status_warning (status, "too few arguments for format");
  		  return;
  		}
  	      params = TREE_CHAIN (params);
--- 1887,1900 ----
  	  wanted_type_std = fci->types[length_chars_val].std;
  	  if (wanted_type == 0)
  	    {
! 	      warning ("use of %qs length modifier with %qc type character",
! 		       length_chars, format_char);
  	      /* Heuristic: skip one argument when an invalid length/type
  		 combination is encountered.  */
  	      arg_num++;
  	      if (params == 0)
  		{
! 		  warning ("too few arguments for format");
  		  return;
  		}
  	      params = TREE_CHAIN (params);
*************** check_format_info_main (int *status, for
*** 2177,2188 ****
  		   && ADJ_STD (wanted_type_std) > ADJ_STD (fci->std))
  	    {
  	      if (ADJ_STD (wanted_type_std) > C_STD_VER)
! 		status_warning (status, "%s does not support the `%%%s%c' %s format",
! 				C_STD_NAME (wanted_type_std), length_chars,
! 				format_char, fki->name);
  	    }
  	}
  
        /* Finally. . .check type of argument against desired type!  */
        if (info->first_arg_num == 0)
  	continue;
--- 1908,1921 ----
  		   && ADJ_STD (wanted_type_std) > ADJ_STD (fci->std))
  	    {
  	      if (ADJ_STD (wanted_type_std) > C_STD_VER)
! 		warning ("%s does not support the %<%%%s%c%> %s format",
! 			 C_STD_NAME (wanted_type_std), length_chars,
! 			 format_char, fki->name);
  	    }
  	}
  
+       main_wanted_type.next = NULL;
+ 
        /* Finally. . .check type of argument against desired type!  */
        if (info->first_arg_num == 0)
  	continue;
*************** check_format_info_main (int *status, for
*** 2192,2204 ****
  	  if (main_arg_num != 0)
  	    {
  	      if (suppressed)
! 		status_warning (status, "operand number specified with suppressed assignment");
  	      else
! 		status_warning (status, "operand number specified for format taking no argument");
  	    }
  	}
        else
  	{
  	  if (main_arg_num != 0)
  	    {
  	      arg_num = main_arg_num;
--- 1925,1939 ----
  	  if (main_arg_num != 0)
  	    {
  	      if (suppressed)
! 		warning ("operand number specified with suppressed assignment");
  	      else
! 		warning ("operand number specified for format taking no argument");
  	    }
  	}
        else
  	{
+ 	  format_wanted_type *wanted_type_ptr;
+ 
  	  if (main_arg_num != 0)
  	    {
  	      arg_num = main_arg_num;
*************** check_format_info_main (int *status, for
*** 2209,2258 ****
  	      ++arg_num;
  	      if (has_operand_number > 0)
  		{
! 		  status_warning (status, "missing $ operand number in format");
  		  return;
  		}
  	      else
  		has_operand_number = 0;
  	      if (params == 0)
  		{
! 		  status_warning (status, "too few arguments for format");
  		  return;
  		}
  	    }
- 	  cur_param = TREE_VALUE (params);
- 	  params = TREE_CHAIN (params);
- 	  main_wanted_type.wanted_type = wanted_type;
- 	  main_wanted_type.wanted_type_name = wanted_type_name;
- 	  main_wanted_type.pointer_count = fci->pointer_count + aflag;
- 	  main_wanted_type.char_lenient_flag = 0;
- 	  if (strchr (fci->flags2, 'c') != 0)
- 	    main_wanted_type.char_lenient_flag = 1;
- 	  main_wanted_type.writing_in_flag = 0;
- 	  main_wanted_type.reading_from_flag = 0;
- 	  if (aflag)
- 	    main_wanted_type.writing_in_flag = 1;
- 	  else
- 	    {
- 	      if (strchr (fci->flags2, 'W') != 0)
- 		main_wanted_type.writing_in_flag = 1;
- 	      if (strchr (fci->flags2, 'R') != 0)
- 		main_wanted_type.reading_from_flag = 1;
- 	    }
- 	  main_wanted_type.name = NULL;
- 	  main_wanted_type.param = cur_param;
- 	  main_wanted_type.arg_num = arg_num;
- 	  main_wanted_type.next = NULL;
- 	  if (last_wanted_type != 0)
- 	    last_wanted_type->next = &main_wanted_type;
- 	  if (first_wanted_type == 0)
- 	    first_wanted_type = &main_wanted_type;
- 	  last_wanted_type = &main_wanted_type;
  	}
  
        if (first_wanted_type != 0)
! 	check_format_types (status, first_wanted_type);
  
      }
  }
  
--- 1944,2020 ----
  	      ++arg_num;
  	      if (has_operand_number > 0)
  		{
! 		  warning ("missing $ operand number in format");
  		  return;
  		}
  	      else
  		has_operand_number = 0;
+ 	    }
+ 
+ 	  wanted_type_ptr = &main_wanted_type;
+ 	  while (fci)
+ 	    {
  	      if (params == 0)
  		{
! 		  warning ("too few arguments for format");
  		  return;
  		}
+ 
+ 	      cur_param = TREE_VALUE (params);
+ 	      params = TREE_CHAIN (params);
+ 
+ 	      wanted_type_ptr->wanted_type = wanted_type;
+ 	      wanted_type_ptr->wanted_type_name = wanted_type_name;
+ 	      wanted_type_ptr->pointer_count = fci->pointer_count + aflag;
+ 	      wanted_type_ptr->char_lenient_flag = 0;
+ 	      if (strchr (fci->flags2, 'c') != 0)
+ 		wanted_type_ptr->char_lenient_flag = 1;
+ 	      wanted_type_ptr->writing_in_flag = 0;
+ 	      wanted_type_ptr->reading_from_flag = 0;
+ 	      if (aflag)
+ 		wanted_type_ptr->writing_in_flag = 1;
+ 	      else
+ 		{
+ 		  if (strchr (fci->flags2, 'W') != 0)
+ 		    wanted_type_ptr->writing_in_flag = 1;
+ 		  if (strchr (fci->flags2, 'R') != 0)
+ 		    wanted_type_ptr->reading_from_flag = 1;
+ 		}
+ 	      wanted_type_ptr->name = NULL;
+ 	      wanted_type_ptr->param = cur_param;
+ 	      wanted_type_ptr->arg_num = arg_num;
+ 	      wanted_type_ptr->next = NULL;
+ 	      if (last_wanted_type != 0)
+ 		last_wanted_type->next = wanted_type_ptr;
+ 	      if (first_wanted_type == 0)
+ 		first_wanted_type = wanted_type_ptr;
+ 	      last_wanted_type = wanted_type_ptr;
+ 
+ 	      fci = fci->chain;
+ 	      if (fci)
+ 		{
+ 		  wanted_type_ptr = ggc_alloc (sizeof (main_wanted_type));
+ 		  arg_num++;
+ 		  wanted_type = *fci->types[length_chars_val].type;
+ 		  wanted_type_name = fci->types[length_chars_val].name;
+ 		}
  	    }
  	}
  
        if (first_wanted_type != 0)
! 	check_format_types (first_wanted_type, format_start,
! 			    format_chars - format_start);
  
+       if (main_wanted_type.next != NULL)
+ 	{
+ 	  format_wanted_type *wanted_type_ptr = main_wanted_type.next;
+ 	  while (wanted_type_ptr)
+ 	    {
+ 	      format_wanted_type *next = wanted_type_ptr->next;
+ 	      ggc_free (wanted_type_ptr);
+ 	      wanted_type_ptr = next;
+ 	    }
+ 	}
      }
  }
  
*************** check_format_info_main (int *status, for
*** 2260,2266 ****
  /* Check the argument types from a single format conversion (possibly
     including width and precision arguments).  */
  static void
! check_format_types (int *status, format_wanted_type *types)
  {
    for (; types != 0; types = types->next)
      {
--- 2022,2029 ----
  /* Check the argument types from a single format conversion (possibly
     including width and precision arguments).  */
  static void
! check_format_types (format_wanted_type *types, const char *format_start,
! 		    int format_length)
  {
    for (; types != 0; types = types->next)
      {
*************** check_format_types (int *status, format_
*** 2275,2292 ****
        cur_type = TREE_TYPE (cur_param);
        if (cur_type == error_mark_node)
  	continue;
        char_type_flag = 0;
        wanted_type = types->wanted_type;
        arg_num = types->arg_num;
  
        /* The following should not occur here.  */
!       if (wanted_type == 0)
! 	abort ();
!       if (wanted_type == void_type_node && types->pointer_count == 0)
! 	abort ();
  
        if (types->pointer_count == 0)
! 	wanted_type = (*lang_hooks.types.type_promotes_to) (wanted_type);
  
        STRIP_NOPS (cur_param);
  
--- 2038,2056 ----
        cur_type = TREE_TYPE (cur_param);
        if (cur_type == error_mark_node)
  	continue;
+       orig_cur_type = cur_type;
        char_type_flag = 0;
        wanted_type = types->wanted_type;
        arg_num = types->arg_num;
  
        /* The following should not occur here.  */
!       gcc_assert (wanted_type);
!       gcc_assert (wanted_type != void_type_node || types->pointer_count);
  
        if (types->pointer_count == 0)
! 	wanted_type = lang_hooks.types.type_promotes_to (wanted_type);
! 
!       wanted_type = TYPE_MAIN_VARIANT (wanted_type);
  
        STRIP_NOPS (cur_param);
  
*************** check_format_types (int *status, format_
*** 2305,2322 ****
  		  && i == 0
  		  && cur_param != 0
  		  && integer_zerop (cur_param))
! 		status_warning (status,
! 				"writing through null pointer (arg %d)",
! 				arg_num);
  
  	      /* Check for reading through a NULL pointer.  */
  	      if (types->reading_from_flag
  		  && i == 0
  		  && cur_param != 0
  		  && integer_zerop (cur_param))
! 		status_warning (status,
! 				"reading through null pointer (arg %d)",
! 				arg_num);
  
  	      if (cur_param != 0 && TREE_CODE (cur_param) == ADDR_EXPR)
  		cur_param = TREE_OPERAND (cur_param, 0);
--- 2069,2084 ----
  		  && i == 0
  		  && cur_param != 0
  		  && integer_zerop (cur_param))
! 		warning ("writing through null pointer (argument %d)",
! 			 arg_num);
  
  	      /* Check for reading through a NULL pointer.  */
  	      if (types->reading_from_flag
  		  && i == 0
  		  && cur_param != 0
  		  && integer_zerop (cur_param))
! 		warning ("reading through null pointer (argument %d)",
! 			 arg_num);
  
  	      if (cur_param != 0 && TREE_CODE (cur_param) == ADDR_EXPR)
  		cur_param = TREE_OPERAND (cur_param, 0);
*************** check_format_types (int *status, format_
*** 2332,2341 ****
  		  && i == 0
  		  && (TYPE_READONLY (cur_type)
  		      || (cur_param != 0
! 			  && (TREE_CODE_CLASS (TREE_CODE (cur_param)) == 'c'
  			      || (DECL_P (cur_param)
  				  && TREE_READONLY (cur_param))))))
! 		status_warning (status, "writing into constant object (arg %d)", arg_num);
  
  	      /* If there are extra type qualifiers beyond the first
  		 indirection, then this makes the types technically
--- 2094,2104 ----
  		  && i == 0
  		  && (TYPE_READONLY (cur_type)
  		      || (cur_param != 0
! 			  && (CONSTANT_CLASS_P (cur_param)
  			      || (DECL_P (cur_param)
  				  && TREE_READONLY (cur_param))))))
! 		warning ("writing into constant object (argument %d)",
! 			 arg_num);
  
  	      /* If there are extra type qualifiers beyond the first
  		 indirection, then this makes the types technically
*************** check_format_types (int *status, format_
*** 2345,2360 ****
  		  && (TYPE_READONLY (cur_type)
  		      || TYPE_VOLATILE (cur_type)
  		      || TYPE_RESTRICT (cur_type)))
! 		status_warning (status, "extra type qualifiers in format argument (arg %d)",
  			 arg_num);
  
  	    }
  	  else
  	    {
! 	      if (types->pointer_count == 1)
! 		status_warning (status, "format argument is not a pointer (arg %d)", arg_num);
! 	      else
! 		status_warning (status, "format argument is not a pointer to a pointer (arg %d)", arg_num);
  	      break;
  	    }
  	}
--- 2108,2124 ----
  		  && (TYPE_READONLY (cur_type)
  		      || TYPE_VOLATILE (cur_type)
  		      || TYPE_RESTRICT (cur_type)))
! 		warning ("extra type qualifiers in format argument "
! 			 "(argument %d)",
  			 arg_num);
  
  	    }
  	  else
  	    {
! 	      format_type_warning (types->name, format_start, format_length,
! 				   wanted_type, types->pointer_count,
! 				   types->wanted_type_name, orig_cur_type,
! 				   arg_num);
  	      break;
  	    }
  	}
*************** check_format_types (int *status, format_
*** 2362,2368 ****
        if (i < types->pointer_count)
  	continue;
  
-       orig_cur_type = cur_type;
        cur_type = TYPE_MAIN_VARIANT (cur_type);
  
        /* Check whether the argument type is a character type.  This leniency
--- 2126,2131 ----
*************** check_format_types (int *status, format_
*** 2376,2382 ****
        /* Check the type of the "real" argument, if there's a type we want.  */
        if (wanted_type == cur_type)
  	continue;
!       /* If we want `void *', allow any pointer type.
  	 (Anything else would already have got a warning.)
  	 With -pedantic, only allow pointers to void and to character
  	 types.  */
--- 2139,2145 ----
        /* Check the type of the "real" argument, if there's a type we want.  */
        if (wanted_type == cur_type)
  	continue;
!       /* If we want 'void *', allow any pointer type.
  	 (Anything else would already have got a warning.)
  	 With -pedantic, only allow pointers to void and to character
  	 types.  */
*************** check_format_types (int *status, format_
*** 2389,2484 ****
  	 a second level of indirection.  */
        if (TREE_CODE (wanted_type) == INTEGER_TYPE
  	  && TREE_CODE (cur_type) == INTEGER_TYPE
! 	  && (! pedantic || i == 0 || (i == 1 && char_type_flag))
! 	  && (TREE_UNSIGNED (wanted_type)
  	      ? wanted_type == c_common_unsigned_type (cur_type)
  	      : wanted_type == c_common_signed_type (cur_type)))
  	continue;
        /* Likewise, "signed char", "unsigned char" and "char" are
  	 equivalent but the above test won't consider them equivalent.  */
        if (wanted_type == char_type_node
! 	  && (! pedantic || i < 2)
  	  && char_type_flag)
  	continue;
        /* Now we have a type mismatch.  */
!       {
! 	const char *this;
! 	const char *that;
! 	tree tmp;
! 
! 	tmp = TYPE_NAME (wanted_type);
! 	if (TREE_CODE (tmp) == TYPE_DECL)
! 	  tmp = DECL_NAME (tmp);
! 	this = IDENTIFIER_POINTER (tmp);
! 
! 	that = 0;
! 	if (TYPE_NAME (orig_cur_type) != 0
! 	    && TREE_CODE (orig_cur_type) != INTEGER_TYPE
! 	    && !(TREE_CODE (orig_cur_type) == POINTER_TYPE
! 		 && TREE_CODE (TREE_TYPE (orig_cur_type)) == INTEGER_TYPE))
! 	  {
! 	    tmp = TYPE_NAME (orig_cur_type);
! 	    if (TREE_CODE (tmp) == TYPE_DECL)
! 	      tmp = DECL_NAME (tmp);
! 	    if (tmp)
! 	      that = IDENTIFIER_POINTER (tmp);
! 	  }
! 
! 	/* A nameless type can't possibly match what the format wants.
! 	   So there will be a warning for it.
! 	   Make up a string to describe vaguely what it is.  */
! 	if (that == 0)
! 	  {
! 	    if (TREE_CODE (orig_cur_type) == POINTER_TYPE)
! 	      that = _("pointer");
! 	    else
! 	      that = _("different type");
! 	  }
  
- 	/* Make the warning better in case of mismatch of int vs long.  */
- 	if (TREE_CODE (orig_cur_type) == INTEGER_TYPE
- 	    && TREE_CODE (wanted_type) == INTEGER_TYPE
- 	    && TYPE_PRECISION (orig_cur_type) == TYPE_PRECISION (wanted_type)
- 	    && TYPE_NAME (orig_cur_type) != 0
- 	    && TREE_CODE (TYPE_NAME (orig_cur_type)) == TYPE_DECL)
- 	  that = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (orig_cur_type)));
  
! 	if (strcmp (this, that) != 0)
! 	  {
! 	    /* There may be a better name for the format, e.g. size_t,
! 	       but we should allow for programs with a perverse typedef
! 	       making size_t something other than what the compiler
! 	       thinks.  */
! 	    if (types->wanted_type_name != 0
! 		&& strcmp (types->wanted_type_name, that) != 0)
! 	      this = types->wanted_type_name;
! 	    if (types->name != 0)
! 	      status_warning (status, "%s is not type %s (arg %d)", types->name, this,
! 		       arg_num);
! 	    else
! 	      status_warning (status, "%s format, %s arg (arg %d)", this, that, arg_num);
! 	  }
!       }
      }
  }
  
  /* Given a format_char_info array FCI, and a character C, this function
     returns the index into the conversion_specs where that specifier's
     data is located.  If the character isn't found it aborts.  */
  static unsigned int
  find_char_info_specifier_index (const format_char_info *fci, int c)
  {
!   unsigned int i = 0;
!   
!   while (fci->format_chars)
!     {
!       if (strchr (fci->format_chars, c))
! 	return i;
!       i++; fci++;
!     }
    
    /* We shouldn't be looking for a non-existent specifier.  */
!   abort ();
  }
  
  /* Given a format_length_info array FLI, and a character C, this
--- 2152,2257 ----
  	 a second level of indirection.  */
        if (TREE_CODE (wanted_type) == INTEGER_TYPE
  	  && TREE_CODE (cur_type) == INTEGER_TYPE
! 	  && (!pedantic || i == 0 || (i == 1 && char_type_flag))
! 	  && (TYPE_UNSIGNED (wanted_type)
  	      ? wanted_type == c_common_unsigned_type (cur_type)
  	      : wanted_type == c_common_signed_type (cur_type)))
  	continue;
        /* Likewise, "signed char", "unsigned char" and "char" are
  	 equivalent but the above test won't consider them equivalent.  */
        if (wanted_type == char_type_node
! 	  && (!pedantic || i < 2)
  	  && char_type_flag)
  	continue;
        /* Now we have a type mismatch.  */
!       format_type_warning (types->name, format_start, format_length,
! 			   wanted_type, types->pointer_count,
! 			   types->wanted_type_name, orig_cur_type, arg_num);
!     }
! }
  
  
! /* Give a warning about a format argument of different type from that
!    expected.  DESCR is a description such as "field precision", or
!    NULL for an ordinary format.  For an ordinary format, FORMAT_START
!    points to where the format starts in the format string and
!    FORMAT_LENGTH is its length.  WANTED_TYPE is the type the argument
!    should have after POINTER_COUNT pointer dereferences.
!    WANTED_NAME_NAME is a possibly more friendly name of WANTED_TYPE,
!    or NULL if the ordinary name of the type should be used.  ARG_TYPE
!    is the type of the actual argument.  ARG_NUM is the number of that
!    argument.  */
! static void
! format_type_warning (const char *descr, const char *format_start,
! 		     int format_length, tree wanted_type, int pointer_count,
! 		     const char *wanted_type_name, tree arg_type, int arg_num)
! {
!   char *p;
!   /* If ARG_TYPE is a typedef with a misleading name (for example,
!      size_t but not the standard size_t expected by printf %zu), avoid
!      printing the typedef name.  */
!   if (wanted_type_name
!       && TYPE_NAME (arg_type)
!       && TREE_CODE (TYPE_NAME (arg_type)) == TYPE_DECL
!       && DECL_NAME (TYPE_NAME (arg_type))
!       && !strcmp (wanted_type_name,
! 		  lang_hooks.decl_printable_name (TYPE_NAME (arg_type), 2)))
!     arg_type = TYPE_MAIN_VARIANT (arg_type);
!   /* The format type and name exclude any '*' for pointers, so those
!      must be formatted manually.  For all the types we currently have,
!      this is adequate, but formats taking pointers to functions or
!      arrays would require the full type to be built up in order to
!      print it with %T.  */
!   p = alloca (pointer_count + 2);
!   if (pointer_count == 0)
!     p[0] = 0;
!   else if (c_dialect_cxx ())
!     {
!       memset (p, '*', pointer_count);
!       p[pointer_count] = 0;
!     }
!   else
!     {
!       p[0] = ' ';
!       memset (p + 1, '*', pointer_count);
!       p[pointer_count + 1] = 0;
!     }
!   if (wanted_type_name)
!     {
!       if (descr)
! 	warning ("%s should have type %<%s%s%>, but argument %d has type %qT",
! 		 descr, wanted_type_name, p, arg_num, arg_type);
!       else
! 	warning ("format %q.*s expects type %<%s%s%>, but argument %d has type %qT",
! 		 format_length, format_start, wanted_type_name, p,
! 		 arg_num, arg_type);
!     }
!   else
!     {
!       if (descr)
! 	warning ("%s should have type %<%T%s%>, but argument %d has type %qT",
! 		 descr, wanted_type, p, arg_num, arg_type);
!       else
! 	warning ("format %q.*s expects type %<%T%s%>, but argument %d has type %qT",
! 		 format_length, format_start, wanted_type, p, arg_num, arg_type);
      }
  }
  
+ 
  /* Given a format_char_info array FCI, and a character C, this function
     returns the index into the conversion_specs where that specifier's
     data is located.  If the character isn't found it aborts.  */
  static unsigned int
  find_char_info_specifier_index (const format_char_info *fci, int c)
  {
!   unsigned i;
! 
!   for (i = 0; fci->format_chars; i++, fci++)
!     if (strchr (fci->format_chars, c))
!       return i;
    
    /* We shouldn't be looking for a non-existent specifier.  */
!   gcc_unreachable ();
  }
  
  /* Given a format_length_info array FLI, and a character C, this
*************** find_char_info_specifier_index (const fo
*** 2488,2504 ****
  static unsigned int
  find_length_info_modifier_index (const format_length_info *fli, int c)
  {
!   unsigned int i = 0;
!   
!   while (fli->name)
!     {
!       if (strchr (fli->name, c))
! 	return i;
!       i++; fli++;
!     }
    
    /* We shouldn't be looking for a non-existent modifier.  */
!   abort ();
  }
  
  /* Determine the type of HOST_WIDE_INT in the code being compiled for
--- 2261,2274 ----
  static unsigned int
  find_length_info_modifier_index (const format_length_info *fli, int c)
  {
!   unsigned i;
! 
!   for (i = 0; fli->name; i++, fli++)
!     if (strchr (fli->name, c))
!       return i;
    
    /* We shouldn't be looking for a non-existent modifier.  */
!   gcc_unreachable ();
  }
  
  /* Determine the type of HOST_WIDE_INT in the code being compiled for
*************** static void
*** 2508,2514 ****
  init_dynamic_asm_fprintf_info (void)
  {
    static tree hwi;
!       
    if (!hwi)
      {
        format_length_info *new_asm_fprintf_length_specs;
--- 2278,2284 ----
  init_dynamic_asm_fprintf_info (void)
  {
    static tree hwi;
! 
    if (!hwi)
      {
        format_length_info *new_asm_fprintf_length_specs;
*************** init_dynamic_asm_fprintf_info (void)
*** 2518,2529 ****
  	 length modifier to work, one must have issued: "typedef
  	 HOST_WIDE_INT __gcc_host_wide_int__;" in one's source code
  	 prior to using that modifier.  */
!       if (!(hwi = maybe_get_identifier ("__gcc_host_wide_int__"))
! 	  || !(hwi = DECL_ORIGINAL_TYPE (identifier_global_value (hwi))))
! 	abort ();
  
        /* Create a new (writable) copy of asm_fprintf_length_specs.  */
!       new_asm_fprintf_length_specs = xmemdup (asm_fprintf_length_specs,
  					      sizeof (asm_fprintf_length_specs),
  					      sizeof (asm_fprintf_length_specs));
  
--- 2288,2301 ----
  	 length modifier to work, one must have issued: "typedef
  	 HOST_WIDE_INT __gcc_host_wide_int__;" in one's source code
  	 prior to using that modifier.  */
!       hwi = maybe_get_identifier ("__gcc_host_wide_int__");
!       gcc_assert (hwi);
!       hwi = DECL_ORIGINAL_TYPE (identifier_global_value (hwi));
!       gcc_assert (hwi);
  
        /* Create a new (writable) copy of asm_fprintf_length_specs.  */
!       new_asm_fprintf_length_specs = (format_length_info *)
! 				     xmemdup (asm_fprintf_length_specs,
  					      sizeof (asm_fprintf_length_specs),
  					      sizeof (asm_fprintf_length_specs));
  
*************** init_dynamic_asm_fprintf_info (void)
*** 2534,2540 ****
        else if (hwi == long_long_integer_type_node)
  	new_asm_fprintf_length_specs[i].index = FMT_LEN_ll;
        else
! 	abort ();
  
        /* Assign the new data for use.  */
        dynamic_format_types[asm_fprintf_format_type].length_char_specs =
--- 2306,2312 ----
        else if (hwi == long_long_integer_type_node)
  	new_asm_fprintf_length_specs[i].index = FMT_LEN_ll;
        else
! 	gcc_unreachable ();
  
        /* Assign the new data for use.  */
        dynamic_format_types[asm_fprintf_format_type].length_char_specs =
*************** static void
*** 2549,2555 ****
  init_dynamic_diag_info (void)
  {
    static tree t, loc, hwi;
!       
    if (!loc || !t || !hwi)
      {
        static format_char_info *diag_fci, *cdiag_fci, *cxxdiag_fci;
--- 2321,2327 ----
  init_dynamic_diag_info (void)
  {
    static tree t, loc, hwi;
! 
    if (!loc || !t || !hwi)
      {
        static format_char_info *diag_fci, *cdiag_fci, *cxxdiag_fci;
*************** init_dynamic_diag_info (void)
*** 2557,2563 ****
        unsigned int i;
  
        /* For the GCC-diagnostics custom format specifiers to work, one
! 	 must have declared `tree' and/or `location_t' prior to using
  	 those attributes.  If we haven't seen these declarations then
  	 you shouldn't use the specifiers requiring these types.
  	 However we don't force a hard ICE because we may see only one
--- 2329,2335 ----
        unsigned int i;
  
        /* For the GCC-diagnostics custom format specifiers to work, one
! 	 must have declared 'tree' and/or 'location_t' prior to using
  	 those attributes.  If we haven't seen these declarations then
  	 you shouldn't use the specifiers requiring these types.
  	 However we don't force a hard ICE because we may see only one
*************** init_dynamic_diag_info (void)
*** 2565,2571 ****
        if ((loc = maybe_get_identifier ("location_t")))
  	loc = TREE_TYPE (identifier_global_value (loc));
  
!       /* We need to grab the underlying `union tree_node' so peek into
  	 an extra type level.  */
        if ((t = maybe_get_identifier ("tree")))
  	t = TREE_TYPE (TREE_TYPE (identifier_global_value (t)));
--- 2337,2343 ----
        if ((loc = maybe_get_identifier ("location_t")))
  	loc = TREE_TYPE (identifier_global_value (loc));
  
!       /* We need to grab the underlying 'union tree_node' so peek into
  	 an extra type level.  */
        if ((t = maybe_get_identifier ("tree")))
  	t = TREE_TYPE (TREE_TYPE (identifier_global_value (t)));
*************** init_dynamic_diag_info (void)
*** 2580,2590 ****
        /* Assign the new data for use.  */
  
        /* All the GCC diag formats use the same length specs.  */
!       if (! diag_ls)
  	dynamic_format_types[gcc_diag_format_type].length_char_specs =
  	  dynamic_format_types[gcc_cdiag_format_type].length_char_specs =
  	  dynamic_format_types[gcc_cxxdiag_format_type].length_char_specs =
! 	  diag_ls = xmemdup (gcc_diag_length_specs,
  			     sizeof (gcc_diag_length_specs),
  			     sizeof (gcc_diag_length_specs)); 
        if (hwi)
--- 2352,2363 ----
        /* Assign the new data for use.  */
  
        /* All the GCC diag formats use the same length specs.  */
!       if (!diag_ls)
  	dynamic_format_types[gcc_diag_format_type].length_char_specs =
  	  dynamic_format_types[gcc_cdiag_format_type].length_char_specs =
  	  dynamic_format_types[gcc_cxxdiag_format_type].length_char_specs =
! 	  diag_ls = (format_length_info *)
! 		    xmemdup (gcc_diag_length_specs,
  			     sizeof (gcc_diag_length_specs),
  			     sizeof (gcc_diag_length_specs)); 
        if (hwi)
*************** init_dynamic_diag_info (void)
*** 2596,2610 ****
  	  else if (hwi == long_long_integer_type_node)
  	    diag_ls[i].index = FMT_LEN_ll;
  	  else
! 	    abort ();
  	}
  
        /* Handle the __gcc_diag__ format specifics.  */
!       if (! diag_fci)
  	dynamic_format_types[gcc_diag_format_type].conversion_specs =
! 	  diag_fci = xmemdup (gcc_diag_char_table,
! 			      sizeof(gcc_diag_char_table),
! 			      sizeof(gcc_diag_char_table));
        if (loc)
          {
  	  i = find_char_info_specifier_index (diag_fci, 'H');
--- 2369,2384 ----
  	  else if (hwi == long_long_integer_type_node)
  	    diag_ls[i].index = FMT_LEN_ll;
  	  else
! 	    gcc_unreachable ();
  	}
  
        /* Handle the __gcc_diag__ format specifics.  */
!       if (!diag_fci)
  	dynamic_format_types[gcc_diag_format_type].conversion_specs =
! 	  diag_fci = (format_char_info *)
! 		     xmemdup (gcc_diag_char_table,
! 			      sizeof (gcc_diag_char_table),
! 			      sizeof (gcc_diag_char_table));
        if (loc)
          {
  	  i = find_char_info_specifier_index (diag_fci, 'H');
*************** init_dynamic_diag_info (void)
*** 2619,2629 ****
  	}
  
        /* Handle the __gcc_cdiag__ format specifics.  */
!       if (! cdiag_fci)
  	dynamic_format_types[gcc_cdiag_format_type].conversion_specs =
! 	  cdiag_fci = xmemdup (gcc_cdiag_char_table,
! 			       sizeof(gcc_cdiag_char_table),
! 			       sizeof(gcc_cdiag_char_table));
        if (loc)
          {
  	  i = find_char_info_specifier_index (cdiag_fci, 'H');
--- 2393,2404 ----
  	}
  
        /* Handle the __gcc_cdiag__ format specifics.  */
!       if (!cdiag_fci)
  	dynamic_format_types[gcc_cdiag_format_type].conversion_specs =
! 	  cdiag_fci = (format_char_info *)
! 		      xmemdup (gcc_cdiag_char_table,
! 			       sizeof (gcc_cdiag_char_table),
! 			       sizeof (gcc_cdiag_char_table));
        if (loc)
          {
  	  i = find_char_info_specifier_index (cdiag_fci, 'H');
*************** init_dynamic_diag_info (void)
*** 2642,2652 ****
  	}
  
        /* Handle the __gcc_cxxdiag__ format specifics.  */
!       if (! cxxdiag_fci)
  	dynamic_format_types[gcc_cxxdiag_format_type].conversion_specs =
! 	  cxxdiag_fci = xmemdup (gcc_cxxdiag_char_table,
! 				 sizeof(gcc_cxxdiag_char_table),
! 				 sizeof(gcc_cxxdiag_char_table));
        if (loc)
          {
  	  i = find_char_info_specifier_index (cxxdiag_fci, 'H');
--- 2417,2428 ----
  	}
  
        /* Handle the __gcc_cxxdiag__ format specifics.  */
!       if (!cxxdiag_fci)
  	dynamic_format_types[gcc_cxxdiag_format_type].conversion_specs =
! 	  cxxdiag_fci = (format_char_info *)
! 			xmemdup (gcc_cxxdiag_char_table,
! 				 sizeof (gcc_cxxdiag_char_table),
! 				 sizeof (gcc_cxxdiag_char_table));
        if (loc)
          {
  	  i = find_char_info_specifier_index (cxxdiag_fci, 'H');
*************** init_dynamic_diag_info (void)
*** 2666,2681 ****
      }
  }
  
  /* Handle a "format" attribute; arguments as in
     struct attribute_spec.handler.  */
  tree
! handle_format_attribute (tree *node, tree name ATTRIBUTE_UNUSED, tree args,
  			 int flags, bool *no_add_attrs)
  {
    tree type = *node;
    function_format_info info;
    tree argument;
  
    if (!decode_format_attr (args, &info, 0))
      {
        *no_add_attrs = true;
--- 2442,2478 ----
      }
  }
  
+ #ifdef TARGET_FORMAT_TYPES
+ extern const format_kind_info TARGET_FORMAT_TYPES[];
+ #endif
+ 
  /* Handle a "format" attribute; arguments as in
     struct attribute_spec.handler.  */
  tree
! handle_format_attribute (tree *node, tree ARG_UNUSED (name), tree args,
  			 int flags, bool *no_add_attrs)
  {
    tree type = *node;
    function_format_info info;
    tree argument;
  
+ #ifdef TARGET_FORMAT_TYPES
+   /* If the target provides additional format types, we need to
+      add them to FORMAT_TYPES at first use.  */
+   if (TARGET_FORMAT_TYPES != NULL && !dynamic_format_types)
+     {
+       dynamic_format_types = xmalloc ((n_format_types + TARGET_N_FORMAT_TYPES)
+ 				      * sizeof (dynamic_format_types[0]));
+       memcpy (dynamic_format_types, format_types_orig,
+ 	      sizeof (format_types_orig));
+       memcpy (&dynamic_format_types[n_format_types], TARGET_FORMAT_TYPES,
+ 	      TARGET_N_FORMAT_TYPES * sizeof (dynamic_format_types[0]));
+ 
+       format_types = dynamic_format_types;
+       n_format_types += TARGET_N_FORMAT_TYPES;
+     }
+ #endif
+ 
    if (!decode_format_attr (args, &info, 0))
      {
        *no_add_attrs = true;
*************** handle_format_attribute (tree *node, tre
*** 2701,2707 ****
  	  if (arg_num != info.first_arg_num)
  	    {
  	      if (!(flags & (int) ATTR_FLAG_BUILT_IN))
! 		error ("args to be formatted is not '...'");
  	      *no_add_attrs = true;
  	      return NULL_TREE;
  	    }
--- 2498,2504 ----
  	  if (arg_num != info.first_arg_num)
  	    {
  	      if (!(flags & (int) ATTR_FLAG_BUILT_IN))
! 		error ("args to be formatted is not %<...%>");
  	      *no_add_attrs = true;
  	      return NULL_TREE;
  	    }
*************** handle_format_attribute (tree *node, tre
*** 2725,2746 ****
        /* Our first time through, we have to make sure that our
           format_type data is allocated dynamically and is modifiable.  */
        if (!dynamic_format_types)
! 	format_types = dynamic_format_types =
  	  xmemdup (format_types_orig, sizeof (format_types_orig),
  		   sizeof (format_types_orig));
  
        /* If this is format __asm_fprintf__, we have to initialize
           GCC's notion of HOST_WIDE_INT for checking %wd.  */
        if (info.format_type == asm_fprintf_format_type)
! 	init_dynamic_asm_fprintf_info();
        /* If this is one of the diagnostic attributes, then we have to
!          initialize `location_t' and `tree' at runtime.  */
        else if (info.format_type == gcc_diag_format_type
  	       || info.format_type == gcc_cdiag_format_type
  	       || info.format_type == gcc_cxxdiag_format_type)
! 	init_dynamic_diag_info();
        else
! 	abort();
      }
  
    return NULL_TREE;
--- 2522,2543 ----
        /* Our first time through, we have to make sure that our
           format_type data is allocated dynamically and is modifiable.  */
        if (!dynamic_format_types)
! 	format_types = dynamic_format_types = (format_kind_info *)
  	  xmemdup (format_types_orig, sizeof (format_types_orig),
  		   sizeof (format_types_orig));
  
        /* If this is format __asm_fprintf__, we have to initialize
           GCC's notion of HOST_WIDE_INT for checking %wd.  */
        if (info.format_type == asm_fprintf_format_type)
! 	init_dynamic_asm_fprintf_info ();
        /* If this is one of the diagnostic attributes, then we have to
!          initialize 'location_t' and 'tree' at runtime.  */
        else if (info.format_type == gcc_diag_format_type
  	       || info.format_type == gcc_cdiag_format_type
  	       || info.format_type == gcc_cxxdiag_format_type)
! 	init_dynamic_diag_info ();
        else
! 	gcc_unreachable ();
      }
  
    return NULL_TREE;
diff -Nrcpad gcc-3.4.3/gcc/c-format.h gcc-4.0.0/gcc/c-format.h
*** gcc-3.4.3/gcc/c-format.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/c-format.h	Tue Nov  9 10:12:14 2004
***************
*** 0 ****
--- 1,299 ----
+ /* Check calls to formatted I/O functions (-Wformat).
+    Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+    2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GCC.
+ 
+ GCC is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2, or (at your option) any later
+ version.
+ 
+ GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING.  If not, write to the Free
+ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+ 02111-1307, USA.  */
+ 
+ #ifndef GCC_C_FORMAT_H
+ #define GCC_C_FORMAT_H
+ 
+ /* The meaningfully distinct length modifiers for format checking recognized
+    by GCC.  */
+ enum format_lengths
+ {
+   FMT_LEN_none,
+   FMT_LEN_hh,
+   FMT_LEN_h,
+   FMT_LEN_l,
+   FMT_LEN_ll,
+   FMT_LEN_L,
+   FMT_LEN_z,
+   FMT_LEN_t,
+   FMT_LEN_j,
+   FMT_LEN_MAX
+ };
+ 
+ 
+ /* The standard versions in which various format features appeared.  */
+ enum format_std_version
+ {
+   STD_C89,
+   STD_C94,
+   STD_C9L, /* C99, but treat as C89 if -Wno-long-long.  */
+   STD_C99,
+   STD_EXT
+ };
+ 
+ /* Flags that may apply to a particular kind of format checked by GCC.  */
+ enum
+ {
+   /* This format converts arguments of types determined by the
+      format string.  */
+   FMT_FLAG_ARG_CONVERT = 1,
+   /* The scanf allocation 'a' kludge applies to this format kind.  */
+   FMT_FLAG_SCANF_A_KLUDGE = 2,
+   /* A % during parsing a specifier is allowed to be a modified % rather
+      that indicating the format is broken and we are out-of-sync.  */
+   FMT_FLAG_FANCY_PERCENT_OK = 4,
+   /* With $ operand numbers, it is OK to reference the same argument more
+      than once.  */
+   FMT_FLAG_DOLLAR_MULTIPLE = 8,
+   /* This format type uses $ operand numbers (strfmon doesn't).  */
+   FMT_FLAG_USE_DOLLAR = 16,
+   /* Zero width is bad in this type of format (scanf).  */
+   FMT_FLAG_ZERO_WIDTH_BAD = 32,
+   /* Empty precision specification is OK in this type of format (printf).  */
+   FMT_FLAG_EMPTY_PREC_OK = 64,
+   /* Gaps are allowed in the arguments with $ operand numbers if all
+      arguments are pointers (scanf).  */
+   FMT_FLAG_DOLLAR_GAP_POINTER_OK = 128
+   /* Not included here: details of whether width or precision may occur
+      (controlled by width_char and precision_char); details of whether
+      '*' can be used for these (width_type and precision_type); details
+      of whether length modifiers can occur (length_char_specs).  */
+ };
+ 
+ 
+ /* Structure describing a length modifier supported in format checking, and
+    possibly a doubled version such as "hh".  */
+ typedef struct
+ {
+   /* Name of the single-character length modifier.  */
+   const char *name;
+   /* Index into a format_char_info.types array.  */
+   enum format_lengths index;
+   /* Standard version this length appears in.  */
+   enum format_std_version std;
+   /* Same, if the modifier can be repeated, or NULL if it can't.  */
+   const char *double_name;
+   enum format_lengths double_index;
+   enum format_std_version double_std;
+ } format_length_info;
+ 
+ 
+ /* Structure describing the combination of a conversion specifier
+    (or a set of specifiers which act identically) and a length modifier.  */
+ typedef struct
+ {
+   /* The standard version this combination of length and type appeared in.
+      This is only relevant if greater than those for length and type
+      individually; otherwise it is ignored.  */
+   enum format_std_version std;
+   /* The name to use for the type, if different from that generated internally
+      (e.g., "signed size_t").  */
+   const char *name;
+   /* The type itself.  */
+   tree *type;
+ } format_type_detail;
+ 
+ 
+ /* Macros to fill out tables of these.  */
+ #define NOARGUMENTS	{ T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }
+ #define BADLEN	{ 0, NULL, NULL }
+ #define NOLENGTHS	{ BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }
+ 
+ 
+ /* Structure describing a format conversion specifier (or a set of specifiers
+    which act identically), and the length modifiers used with it.  */
+ typedef struct format_char_info
+ {
+   const char *format_chars;
+   int pointer_count;
+   enum format_std_version std;
+   /* Types accepted for each length modifier.  */
+   format_type_detail types[FMT_LEN_MAX];
+   /* List of other modifier characters allowed with these specifiers.
+      This lists flags, and additionally "w" for width, "p" for precision
+      (right precision, for strfmon), "#" for left precision (strfmon),
+      "a" for scanf "a" allocation extension (not applicable in C99 mode),
+      "*" for scanf suppression, and "E" and "O" for those strftime
+      modifiers.  */
+   const char *flag_chars;
+   /* List of additional flags describing these conversion specifiers.
+      "c" for generic character pointers being allowed, "2" for strftime
+      two digit year formats, "3" for strftime formats giving two digit
+      years in some locales, "4" for "2" which becomes "3" with an "E" modifier,
+      "o" if use of strftime "O" is a GNU extension beyond C99,
+      "W" if the argument is a pointer which is dereferenced and written into,
+      "R" if the argument is a pointer which is dereferenced and read from,
+      "i" for printf integer formats where the '0' flag is ignored with
+      precision, and "[" for the starting character of a scanf scanset.  */
+   const char *flags2;
+   /* If this format conversion character consumes more than one argument,
+      CHAIN points to information about the next argument.  For later
+      arguments, only POINTER_COUNT, TYPES, and the "c", "R", and "W" flags
+      in FLAGS2 are used.  */
+   const struct format_char_info *chain;
+ } format_char_info;
+ 
+ 
+ /* Structure describing a flag accepted by some kind of format.  */
+ typedef struct
+ {
+   /* The flag character in question (0 for end of array).  */
+   int flag_char;
+   /* Zero if this entry describes the flag character in general, or a
+      nonzero character that may be found in flags2 if it describes the
+      flag when used with certain formats only.  If the latter, only
+      the first such entry found that applies to the current conversion
+      specifier is used; the values of 'name' and 'long_name' it supplies
+      will be used, if non-NULL and the standard version is higher than
+      the unpredicated one, for any pedantic warning.  For example, 'o'
+      for strftime formats (meaning 'O' is an extension over C99).  */
+   int predicate;
+   /* Nonzero if the next character after this flag in the format should
+      be skipped ('=' in strfmon), zero otherwise.  */
+   int skip_next_char;
+   /* The name to use for this flag in diagnostic messages.  For example,
+      N_("'0' flag"), N_("field width").  */
+   const char *name;
+   /* Long name for this flag in diagnostic messages; currently only used for
+      "ISO C does not support ...".  For example, N_("the 'I' printf flag").  */
+   const char *long_name;
+   /* The standard version in which it appeared.  */
+   enum format_std_version std;
+ } format_flag_spec;
+ 
+ 
+ /* Structure describing a combination of flags that is bad for some kind
+    of format.  */
+ typedef struct
+ {
+   /* The first flag character in question (0 for end of array).  */
+   int flag_char1;
+   /* The second flag character.  */
+   int flag_char2;
+   /* Nonzero if the message should say that the first flag is ignored with
+      the second, zero if the combination should simply be objected to.  */
+   int ignored;
+   /* Zero if this entry applies whenever this flag combination occurs,
+      a nonzero character from flags2 if it only applies in some
+      circumstances (e.g. 'i' for printf formats ignoring 0 with precision).  */
+   int predicate;
+ } format_flag_pair;
+ 
+ 
+ /* Structure describing a particular kind of format processed by GCC.  */
+ typedef struct
+ {
+   /* The name of this kind of format, for use in diagnostics.  Also
+      the name of the attribute (without preceding and following __).  */
+   const char *name;
+   /* Specifications of the length modifiers accepted; possibly NULL.  */
+   const format_length_info *length_char_specs;
+   /* Details of the conversion specification characters accepted.  */
+   const format_char_info *conversion_specs;
+   /* String listing the flag characters that are accepted.  */
+   const char *flag_chars;
+   /* String listing modifier characters (strftime) accepted.  May be NULL.  */
+   const char *modifier_chars;
+   /* Details of the flag characters, including pseudo-flags.  */
+   const format_flag_spec *flag_specs;
+   /* Details of bad combinations of flags.  */
+   const format_flag_pair *bad_flag_pairs;
+   /* Flags applicable to this kind of format.  */
+   int flags;
+   /* Flag character to treat a width as, or 0 if width not used.  */
+   int width_char;
+   /* Flag character to treat a left precision (strfmon) as,
+      or 0 if left precision not used.  */
+   int left_precision_char;
+   /* Flag character to treat a precision (for strfmon, right precision) as,
+      or 0 if precision not used.  */
+   int precision_char;
+   /* If a flag character has the effect of suppressing the conversion of
+      an argument ('*' in scanf), that flag character, otherwise 0.  */
+   int suppression_char;
+   /* Flag character to treat a length modifier as (ignored if length
+      modifiers not used).  Need not be placed in flag_chars for conversion
+      specifiers, but is used to check for bad combinations such as length
+      modifier with assignment suppression in scanf.  */
+   int length_code_char;
+   /* Pointer to type of argument expected if '*' is used for a width,
+      or NULL if '*' not used for widths.  */
+   tree *width_type;
+   /* Pointer to type of argument expected if '*' is used for a precision,
+      or NULL if '*' not used for precisions.  */
+   tree *precision_type;
+ } format_kind_info;
+ 
+ #define T_I	&integer_type_node
+ #define T89_I	{ STD_C89, NULL, T_I }
+ #define T_L	&long_integer_type_node
+ #define T89_L	{ STD_C89, NULL, T_L }
+ #define T_LL	&long_long_integer_type_node
+ #define T9L_LL	{ STD_C9L, NULL, T_LL }
+ #define TEX_LL	{ STD_EXT, NULL, T_LL }
+ #define T_S	&short_integer_type_node
+ #define T89_S	{ STD_C89, NULL, T_S }
+ #define T_UI	&unsigned_type_node
+ #define T89_UI	{ STD_C89, NULL, T_UI }
+ #define T_UL	&long_unsigned_type_node
+ #define T89_UL	{ STD_C89, NULL, T_UL }
+ #define T_ULL	&long_long_unsigned_type_node
+ #define T9L_ULL	{ STD_C9L, NULL, T_ULL }
+ #define TEX_ULL	{ STD_EXT, NULL, T_ULL }
+ #define T_US	&short_unsigned_type_node
+ #define T89_US	{ STD_C89, NULL, T_US }
+ #define T_F	&float_type_node
+ #define T89_F	{ STD_C89, NULL, T_F }
+ #define T99_F	{ STD_C99, NULL, T_F }
+ #define T_D	&double_type_node
+ #define T89_D	{ STD_C89, NULL, T_D }
+ #define T99_D	{ STD_C99, NULL, T_D }
+ #define T_LD	&long_double_type_node
+ #define T89_LD	{ STD_C89, NULL, T_LD }
+ #define T99_LD	{ STD_C99, NULL, T_LD }
+ #define T_C	&char_type_node
+ #define T89_C	{ STD_C89, NULL, T_C }
+ #define T_SC	&signed_char_type_node
+ #define T99_SC	{ STD_C99, NULL, T_SC }
+ #define T_UC	&unsigned_char_type_node
+ #define T99_UC	{ STD_C99, NULL, T_UC }
+ #define T_V	&void_type_node
+ #define T89_V	{ STD_C89, NULL, T_V }
+ #define T_W	&wchar_type_node
+ #define T94_W	{ STD_C94, "wchar_t", T_W }
+ #define TEX_W	{ STD_EXT, "wchar_t", T_W }
+ #define T_WI	&wint_type_node
+ #define T94_WI	{ STD_C94, "wint_t", T_WI }
+ #define TEX_WI	{ STD_EXT, "wint_t", T_WI }
+ #define T_ST    &size_type_node
+ #define T99_ST	{ STD_C99, "size_t", T_ST }
+ #define T_SST   &signed_size_type_node
+ #define T99_SST	{ STD_C99, "signed size_t", T_SST }
+ #define T_PD    &ptrdiff_type_node
+ #define T99_PD	{ STD_C99, "ptrdiff_t", T_PD }
+ #define T_UPD   &unsigned_ptrdiff_type_node
+ #define T99_UPD	{ STD_C99, "unsigned ptrdiff_t", T_UPD }
+ #define T_IM    &intmax_type_node
+ #define T99_IM	{ STD_C99, "intmax_t", T_IM }
+ #define T_UIM   &uintmax_type_node
+ #define T99_UIM	{ STD_C99, "uintmax_t", T_UIM }
+ 
+ #endif /* GCC_C_FORMAT_H */
diff -Nrcpad gcc-3.4.3/gcc/c-gimplify.c gcc-4.0.0/gcc/c-gimplify.c
*** gcc-3.4.3/gcc/c-gimplify.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/c-gimplify.c	Thu Jan 27 18:22:19 2005
***************
*** 0 ****
--- 1,544 ----
+ /* Tree lowering pass.  This pass gimplifies the tree representation built
+    by the C-based front ends.  The structure of gimplified, or
+    language-independent, trees is dictated by the grammar described in this
+    file.
+    Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+    Lowering of expressions contributed by Sebastian Pop <s.pop@laposte.net>
+    Re-written to support lowering of whole function trees, documentation
+    and miscellaneous cleanups by Diego Novillo <dnovillo@redhat.com>
+ 
+ This file is part of GCC.
+ 
+ GCC is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2, or (at your option) any later
+ version.
+ 
+ GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING.  If not, write to the Free
+ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+ 02111-1307, USA.  */
+ 
+ #include "config.h"
+ #include "system.h"
+ #include "coretypes.h"
+ #include "tm.h"
+ #include "tree.h"
+ #include "errors.h"
+ #include "varray.h"
+ #include "c-tree.h"
+ #include "c-common.h"
+ #include "tree-gimple.h"
+ #include "hard-reg-set.h"
+ #include "basic-block.h"
+ #include "tree-flow.h"
+ #include "tree-inline.h"
+ #include "diagnostic.h"
+ #include "langhooks.h"
+ #include "langhooks-def.h"
+ #include "flags.h"
+ #include "rtl.h"
+ #include "toplev.h"
+ #include "tree-dump.h"
+ #include "c-pretty-print.h"
+ #include "cgraph.h"
+ 
+ 
+ /*  The gimplification pass converts the language-dependent trees
+     (ld-trees) emitted by the parser into language-independent trees
+     (li-trees) that are the target of SSA analysis and transformations.
+ 
+     Language-independent trees are based on the SIMPLE intermediate
+     representation used in the McCAT compiler framework:
+ 
+     "Designing the McCAT Compiler Based on a Family of Structured
+     Intermediate Representations,"
+     L. Hendren, C. Donawa, M. Emami, G. Gao, Justiani, and B. Sridharan,
+     Proceedings of the 5th International Workshop on Languages and
+     Compilers for Parallel Computing, no. 757 in Lecture Notes in
+     Computer Science, New Haven, Connecticut, pp. 406-420,
+     Springer-Verlag, August 3-5, 1992.
+ 
+     http://www-acaps.cs.mcgill.ca/info/McCAT/McCAT.html
+ 
+     Basically, we walk down gimplifying the nodes that we encounter.  As we
+     walk back up, we check that they fit our constraints, and copy them
+     into temporaries if not.  */
+ 
+ /* Local declarations.  */
+ 
+ enum bc_t { bc_break = 0, bc_continue = 1 };
+ 
+ static struct c_gimplify_ctx
+ {
+   /* For handling break and continue.  */
+   tree current_bc_label;
+   tree bc_id[2];
+ } *ctxp;
+ 
+ static void
+ push_context (void)
+ {
+   gcc_assert (!ctxp);
+   ctxp = (struct c_gimplify_ctx *) xcalloc (1, sizeof (struct c_gimplify_ctx));
+   ctxp->bc_id[bc_continue] = get_identifier ("continue");
+   ctxp->bc_id[bc_break] = get_identifier ("break");
+ }
+ 
+ static void
+ pop_context (void)
+ {
+   gcc_assert (ctxp && !ctxp->current_bc_label);
+   free (ctxp);
+   ctxp = NULL;
+ }
+ 
+ /* Gimplification of statement trees.  */
+ 
+ /* Convert the tree representation of FNDECL from C frontend trees to
+    GENERIC.  */
+ 
+ void
+ c_genericize (tree fndecl)
+ {
+   FILE *dump_file;
+   int local_dump_flags;
+   struct cgraph_node *cgn;
+ 
+   /* Dump the C-specific tree IR.  */
+   dump_file = dump_begin (TDI_original, &local_dump_flags);
+   if (dump_file)
+     {
+       fprintf (dump_file, "\n;; Function %s",
+ 	       lang_hooks.decl_printable_name (fndecl, 2));
+       fprintf (dump_file, " (%s)\n",
+ 	       IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (fndecl)));
+       fprintf (dump_file, ";; enabled by -%s\n", dump_flag_name (TDI_original));
+       fprintf (dump_file, "\n");
+ 
+       if (local_dump_flags & TDF_RAW)
+ 	dump_node (DECL_SAVED_TREE (fndecl),
+ 		   TDF_SLIM | local_dump_flags, dump_file);
+       else
+ 	print_c_tree (dump_file, DECL_SAVED_TREE (fndecl));
+       fprintf (dump_file, "\n");
+ 
+       dump_end (TDI_original, dump_file);
+     }
+ 
+   /* Go ahead and gimplify for now.  */
+   push_context ();
+   gimplify_function_tree (fndecl);
+   pop_context ();
+ 
+   /* Dump the genericized tree IR.  */
+   dump_function (TDI_generic, fndecl);
+ 
+   /* Genericize all nested functions now.  We do things in this order so
+      that items like VLA sizes are expanded properly in the context of
+      the correct function.  */
+   cgn = cgraph_node (fndecl);
+   for (cgn = cgn->nested; cgn ; cgn = cgn->next_nested)
+     c_genericize (cgn->decl);
+ }
+ 
+ static void
+ add_block_to_enclosing (tree block)
+ {
+   tree enclosing;
+ 
+   for (enclosing = gimple_current_bind_expr ();
+        enclosing; enclosing = TREE_CHAIN (enclosing))
+     if (BIND_EXPR_BLOCK (enclosing))
+       break;
+ 
+   enclosing = BIND_EXPR_BLOCK (enclosing);
+   BLOCK_SUBBLOCKS (enclosing) = chainon (BLOCK_SUBBLOCKS (enclosing), block);
+ }
+ 
+ /* Genericize a scope by creating a new BIND_EXPR.
+    BLOCK is either a BLOCK representing the scope or a chain of _DECLs.
+      In the latter case, we need to create a new BLOCK and add it to the
+      BLOCK_SUBBLOCKS of the enclosing block.
+    BODY is a chain of C _STMT nodes for the contents of the scope, to be
+      genericized.  */
+ 
+ tree
+ c_build_bind_expr (tree block, tree body)
+ {
+   tree decls, bind;
+ 
+   if (block == NULL_TREE)
+     decls = NULL_TREE;
+   else if (TREE_CODE (block) == BLOCK)
+     decls = BLOCK_VARS (block);
+   else
+     {
+       decls = block;
+       if (DECL_ARTIFICIAL (decls))
+ 	block = NULL_TREE;
+       else
+ 	{
+ 	  block = make_node (BLOCK);
+ 	  BLOCK_VARS (block) = decls;
+ 	  add_block_to_enclosing (block);
+ 	}
+     }
+ 
+   if (!body)
+     body = build_empty_stmt ();
+   if (decls || block)
+     {
+       bind = build3 (BIND_EXPR, void_type_node, decls, body, block);
+       TREE_SIDE_EFFECTS (bind) = 1;
+     }
+   else
+     bind = body;
+ 
+   return bind;
+ }
+ 
+ /*  Gimplify an EXPR_STMT node.
+ 
+     STMT is the statement node.
+ 
+     PRE_P points to the list where side effects that must happen before
+ 	STMT should be stored.
+ 
+     POST_P points to the list where side effects that must happen after
+ 	STMT should be stored.  */
+ 
+ static enum gimplify_status
+ gimplify_expr_stmt (tree *stmt_p)
+ {
+   tree stmt = EXPR_STMT_EXPR (*stmt_p);
+ 
+   if (stmt == error_mark_node)
+     stmt = NULL;
+ 
+   /* Gimplification of a statement expression will nullify the
+      statement if all its side effects are moved to *PRE_P and *POST_P.
+ 
+      In this case we will not want to emit the gimplified statement.
+      However, we may still want to emit a warning, so we do that before
+      gimplification.  */
+   if (stmt && (extra_warnings || warn_unused_value))
+     {
+       if (!TREE_SIDE_EFFECTS (stmt))
+ 	{
+ 	  if (!IS_EMPTY_STMT (stmt)
+ 	      && !VOID_TYPE_P (TREE_TYPE (stmt))
+ 	      && !TREE_NO_WARNING (stmt))
+ 	    warning ("statement with no effect");
+ 	}
+       else if (warn_unused_value)
+ 	warn_if_unused_value (stmt, input_location);
+     }
+ 
+   if (stmt == NULL_TREE)
+     stmt = alloc_stmt_list ();
+ 
+   *stmt_p = stmt;
+ 
+   return GS_OK;
+ }
+ 
+ /* Begin a scope which can be exited by a break or continue statement.  BC
+    indicates which.
+ 
+    Just creates a label and pushes it into the current context.  */
+ 
+ static tree
+ begin_bc_block (enum bc_t bc)
+ {
+   tree label = create_artificial_label ();
+   DECL_NAME (label) = ctxp->bc_id[bc];
+   TREE_CHAIN (label) = ctxp->current_bc_label;
+   ctxp->current_bc_label = label;
+   return label;
+ }
+ 
+ /* Finish a scope which can be exited by a break or continue statement.
+    LABEL was returned from the most recent call to begin_bc_block.  BODY is
+    an expression for the contents of the scope.
+ 
+    If we saw a break (or continue) in the scope, append a LABEL_EXPR to
+    body.  Otherwise, just forget the label.  */
+ 
+ static tree
+ finish_bc_block (tree label, tree body)
+ {
+   gcc_assert (label == ctxp->current_bc_label);
+ 
+   if (TREE_USED (label))
+     {
+       tree t, sl = NULL;
+ 
+       /* Clear the name so flow can delete the label.  */
+       DECL_NAME (label) = NULL_TREE;
+       t = build1 (LABEL_EXPR, void_type_node, label);
+ 
+       append_to_statement_list (body, &sl);
+       append_to_statement_list (t, &sl);
+       body = sl;
+     }
+ 
+   ctxp->current_bc_label = TREE_CHAIN (label);
+   TREE_CHAIN (label) = NULL_TREE;
+   return body;
+ }
+ 
+ /* Build a GOTO_EXPR to represent a break or continue statement.  BC
+    indicates which.  */
+ 
+ static tree
+ build_bc_goto (enum bc_t bc)
+ {
+   tree label;
+   tree target_name = ctxp->bc_id[bc];
+ 
+   /* Look for the appropriate type of label.  */
+   for (label = ctxp->current_bc_label;
+        label;
+        label = TREE_CHAIN (label))
+     if (DECL_NAME (label) == target_name)
+       break;
+ 
+   if (label == NULL_TREE)
+     {
+       if (bc == bc_break)
+ 	error ("break statement not within loop or switch");
+       else
+ 	error ("continue statement not within loop or switch");
+ 
+       return NULL_TREE;
+     }
+ 
+   /* Mark the label used for finish_bc_block.  */
+   TREE_USED (label) = 1;
+   return build1 (GOTO_EXPR, void_type_node, label);
+ }
+ 
+ /* Build a generic representation of one of the C loop forms.  COND is the
+    loop condition or NULL_TREE.  BODY is the (possibly compound) statement
+    controlled by the loop.  INCR is the increment expression of a for-loop,
+    or NULL_TREE.  COND_IS_FIRST indicates whether the condition is
+    evaluated before the loop body as in while and for loops, or after the
+    loop body as in do-while loops.  */
+ 
+ static tree
+ gimplify_c_loop (tree cond, tree body, tree incr, bool cond_is_first)
+ {
+   tree top, entry, exit, cont_block, break_block, stmt_list, t;
+   location_t stmt_locus;
+ 
+   stmt_locus = input_location;
+   stmt_list = NULL_TREE;
+   entry = NULL_TREE;
+ 
+   break_block = begin_bc_block (bc_break);
+   cont_block = begin_bc_block (bc_continue);
+ 
+   /* If condition is zero don't generate a loop construct.  */
+   if (cond && integer_zerop (cond))
+     {
+       top = NULL_TREE;
+       exit = NULL_TREE;
+       if (cond_is_first)
+ 	{
+ 	  t = build_bc_goto (bc_break);
+ 	  append_to_statement_list (t, &stmt_list);
+ 	}
+     }
+   else
+     {
+       /* If we use a LOOP_EXPR here, we have to feed the whole thing
+ 	 back through the main gimplifier to lower it.  Given that we
+ 	 have to gimplify the loop body NOW so that we can resolve
+ 	 break/continue stmts, seems easier to just expand to gotos.  */
+       top = build1 (LABEL_EXPR, void_type_node, NULL_TREE);
+ 
+       /* If we have an exit condition, then we build an IF with gotos either
+ 	 out of the loop, or to the top of it.  If there's no exit condition,
+ 	 then we just build a jump back to the top.  */
+       exit = build_and_jump (&LABEL_EXPR_LABEL (top));
+       if (cond && !integer_nonzerop (cond))
+ 	{
+ 	  t = build_bc_goto (bc_break);
+ 	  exit = build3 (COND_EXPR, void_type_node, cond, exit, t);
+ 	  exit = fold (exit);
+ 	  gimplify_stmt (&exit);
+ 
+ 	  if (cond_is_first)
+ 	    {
+ 	      if (incr)
+ 		{
+ 		  entry = build1 (LABEL_EXPR, void_type_node, NULL_TREE);
+ 		  t = build_and_jump (&LABEL_EXPR_LABEL (entry));
+ 		}
+ 	      else
+ 		t = build_bc_goto (bc_continue);
+ 	      append_to_statement_list (t, &stmt_list);
+ 	    }
+ 	}
+     }
+ 
+   gimplify_stmt (&body);
+   gimplify_stmt (&incr);
+ 
+   body = finish_bc_block (cont_block, body);
+ 
+   append_to_statement_list (top, &stmt_list);
+   append_to_statement_list (body, &stmt_list);
+   append_to_statement_list (incr, &stmt_list);
+   append_to_statement_list (entry, &stmt_list);
+   append_to_statement_list (exit, &stmt_list);
+ 
+   annotate_all_with_locus (&stmt_list, stmt_locus);
+ 
+   return finish_bc_block (break_block, stmt_list);
+ }
+ 
+ /* Gimplify a FOR_STMT node.  Move the stuff in the for-init-stmt into the
+    prequeue and hand off to gimplify_c_loop.  */
+ 
+ static enum gimplify_status
+ gimplify_for_stmt (tree *stmt_p, tree *pre_p)
+ {
+   tree stmt = *stmt_p;
+ 
+   if (FOR_INIT_STMT (stmt))
+     gimplify_and_add (FOR_INIT_STMT (stmt), pre_p);
+ 
+   *stmt_p = gimplify_c_loop (FOR_COND (stmt), FOR_BODY (stmt),
+ 			     FOR_EXPR (stmt), 1);
+ 
+   return GS_ALL_DONE;
+ }
+ 
+ /* Gimplify a WHILE_STMT node.  */
+ 
+ static enum gimplify_status
+ gimplify_while_stmt (tree *stmt_p)
+ {
+   tree stmt = *stmt_p;
+   *stmt_p = gimplify_c_loop (WHILE_COND (stmt), WHILE_BODY (stmt),
+ 			     NULL_TREE, 1);
+   return GS_ALL_DONE;
+ }
+ 
+ /* Gimplify a DO_STMT node.  */
+ 
+ static enum gimplify_status
+ gimplify_do_stmt (tree *stmt_p)
+ {
+   tree stmt = *stmt_p;
+   *stmt_p = gimplify_c_loop (DO_COND (stmt), DO_BODY (stmt),
+ 			     NULL_TREE, 0);
+   return GS_ALL_DONE;
+ }
+ 
+ /* Genericize a SWITCH_STMT by turning it into a SWITCH_EXPR.  */
+ 
+ static enum gimplify_status
+ gimplify_switch_stmt (tree *stmt_p)
+ {
+   tree stmt = *stmt_p;
+   tree break_block, body;
+   location_t stmt_locus = input_location;
+ 
+   break_block = begin_bc_block (bc_break);
+ 
+   body = SWITCH_STMT_BODY (stmt);
+   if (!body)
+     body = build_empty_stmt ();
+ 
+   *stmt_p = build3 (SWITCH_EXPR, SWITCH_STMT_TYPE (stmt),
+ 		    SWITCH_STMT_COND (stmt), body, NULL_TREE);
+   SET_EXPR_LOCATION (*stmt_p, stmt_locus);
+   gimplify_stmt (stmt_p);
+ 
+   *stmt_p = finish_bc_block (break_block, *stmt_p);
+   return GS_ALL_DONE;
+ }
+ 
+ /* Gimplification of expression trees.  */
+ 
+ /* Gimplify a C99 compound literal expression.  This just means adding the
+    DECL_EXPR before the current EXPR_STMT and using its anonymous decl
+    instead.  */
+ 
+ static enum gimplify_status
+ gimplify_compound_literal_expr (tree *expr_p, tree *pre_p)
+ {
+   tree decl_s = COMPOUND_LITERAL_EXPR_DECL_STMT (*expr_p);
+   tree decl = DECL_EXPR_DECL (decl_s);
+ 
+   /* This decl isn't mentioned in the enclosing block, so add it to the
+      list of temps.  FIXME it seems a bit of a kludge to say that
+      anonymous artificial vars aren't pushed, but everything else is.  */
+   if (DECL_NAME (decl) == NULL_TREE)
+     gimple_add_tmp_var (decl);
+ 
+   gimplify_and_add (decl_s, pre_p);
+   *expr_p = decl;
+   return GS_OK;
+ }
+ 
+ /* Do C-specific gimplification.  Args are as for gimplify_expr.  */
+ 
+ int
+ c_gimplify_expr (tree *expr_p, tree *pre_p, tree *post_p ATTRIBUTE_UNUSED)
+ {
+   enum tree_code code = TREE_CODE (*expr_p);
+ 
+   switch (code)
+     {
+     case DECL_EXPR:
+       /* This is handled mostly by gimplify.c, but we have to deal with
+ 	 not warning about int x = x; as it is a GCC extension to turn off
+ 	 this warning but only if warn_init_self is zero.  */
+       if (TREE_CODE (DECL_EXPR_DECL (*expr_p)) == VAR_DECL
+ 	  && !DECL_EXTERNAL (DECL_EXPR_DECL (*expr_p))
+ 	  && !TREE_STATIC (DECL_EXPR_DECL (*expr_p))
+ 	  && (DECL_INITIAL (DECL_EXPR_DECL (*expr_p))
+ 	      == DECL_EXPR_DECL (*expr_p))
+ 	  && !warn_init_self)
+ 	TREE_NO_WARNING (DECL_EXPR_DECL (*expr_p)) = 1;
+       return GS_UNHANDLED;
+       
+     case COMPOUND_LITERAL_EXPR:
+       return gimplify_compound_literal_expr (expr_p, pre_p);
+ 
+     case FOR_STMT:
+       return gimplify_for_stmt (expr_p, pre_p);
+ 
+     case WHILE_STMT:
+       return gimplify_while_stmt (expr_p);
+ 
+     case DO_STMT:
+       return gimplify_do_stmt (expr_p);
+ 
+     case SWITCH_STMT:
+       return gimplify_switch_stmt (expr_p);
+ 
+     case EXPR_STMT:
+       return gimplify_expr_stmt (expr_p);
+ 
+     case CONTINUE_STMT:
+       *expr_p = build_bc_goto (bc_continue);
+       return GS_ALL_DONE;
+ 
+     case BREAK_STMT:
+       *expr_p = build_bc_goto (bc_break);
+       return GS_ALL_DONE;
+ 
+     default:
+       return GS_UNHANDLED;
+     }
+ }
diff -Nrcpad gcc-3.4.3/gcc/c-incpath.c gcc-4.0.0/gcc/c-incpath.c
*** gcc-3.4.3/gcc/c-incpath.c	Mon May 31 10:37:47 2004
--- gcc-4.0.0/gcc/c-incpath.c	Sun Jan 23 15:05:27 2005
***************
*** 1,6 ****
  /* Set up combined include path chain for the preprocessor.
     Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
!    1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
  
     Broken out of cppinit.c and cppfiles.c and rewritten Mar 2003.
  
--- 1,6 ----
  /* Set up combined include path chain for the preprocessor.
     Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
!    1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
  
     Broken out of cppinit.c and cppfiles.c and rewritten Mar 2003.
  
*************** Foundation, 59 Temple Place - Suite 330,
*** 21,26 ****
--- 21,28 ----
  #include "config.h"
  #include "system.h"
  #include "coretypes.h"
+ #include "machmode.h"
+ #include "target.h"
  #include "tm.h"
  #include "cpplib.h"
  #include "prefix.h"
*************** Foundation, 59 Temple Place - Suite 330,
*** 35,41 ****
  # define INO_T_EQ(A, B) (!memcmp (&(A), &(B), sizeof (A)))
  # define INO_T_COPY(DEST, SRC) memcpy(&(DEST), &(SRC), sizeof (SRC))
  #else
! # if (defined _WIN32 && ! defined (_UWIN)) || defined __MSDOS__
  #  define INO_T_EQ(A, B) 0
  # else
  #  define INO_T_EQ(A, B) ((A) == (B))
--- 37,43 ----
  # define INO_T_EQ(A, B) (!memcmp (&(A), &(B), sizeof (A)))
  # define INO_T_COPY(DEST, SRC) memcpy(&(DEST), &(SRC), sizeof (SRC))
  #else
! # if (defined _WIN32 && !defined (_UWIN)) || defined __MSDOS__
  #  define INO_T_EQ(A, B) 0
  # else
  #  define INO_T_EQ(A, B) ((A) == (B))
*************** add_env_var_paths (const char *env_var, 
*** 112,118 ****
  	  path[q - p] = '\0';
  	}
  
!       add_path (path, chain, chain == SYSTEM);
      }
  }
  
--- 114,120 ----
  	  path[q - p] = '\0';
  	}
  
!       add_path (path, chain, chain == SYSTEM, false);
      }
  }
  
*************** add_standard_paths (const char *sysroot,
*** 126,132 ****
    if (iprefix && (len = cpp_GCC_INCLUDE_DIR_len) != 0)
      {
        /* Look for directories that start with the standard prefix.
! 	 "Translate" them, ie. replace /usr/local/lib/gcc... with
  	 IPREFIX and search them first.  */
        for (p = cpp_include_defaults; p->fname; p++)
  	{
--- 128,134 ----
    if (iprefix && (len = cpp_GCC_INCLUDE_DIR_len) != 0)
      {
        /* Look for directories that start with the standard prefix.
! 	 "Translate" them, i.e. replace /usr/local/lib/gcc... with
  	 IPREFIX and search them first.  */
        for (p = cpp_include_defaults; p->fname; p++)
  	{
*************** add_standard_paths (const char *sysroot,
*** 140,146 ****
  	      if (!strncmp (p->fname, cpp_GCC_INCLUDE_DIR, len))
  		{
  		  char *str = concat (iprefix, p->fname + len, NULL);
! 		  add_path (str, SYSTEM, p->cxx_aware);
  		}
  	    }
  	}
--- 142,148 ----
  	      if (!strncmp (p->fname, cpp_GCC_INCLUDE_DIR, len))
  		{
  		  char *str = concat (iprefix, p->fname + len, NULL);
! 		  add_path (str, SYSTEM, p->cxx_aware, false);
  		}
  	    }
  	}
*************** add_standard_paths (const char *sysroot,
*** 158,164 ****
  	  else
  	    str = update_path (p->fname, p->component);
  
! 	  add_path (str, SYSTEM, p->cxx_aware);
  	}
      }
  }
--- 160,166 ----
  	  else
  	    str = update_path (p->fname, p->component);
  
! 	  add_path (str, SYSTEM, p->cxx_aware, false);
  	}
      }
  }
*************** add_standard_paths (const char *sysroot,
*** 169,174 ****
--- 171,177 ----
     JOIN, unless it duplicates JOIN in which case the last path is
     removed.  Return the head of the resulting chain.  Any of HEAD,
     JOIN and SYSTEM can be NULL.  */
+ 
  static struct cpp_dir *
  remove_duplicates (cpp_reader *pfile, struct cpp_dir *head,
  		   struct cpp_dir *system, struct cpp_dir *join,
*************** remove_duplicates (cpp_reader *pfile, st
*** 189,195 ****
  	  if (errno != ENOENT)
  	    cpp_errno (pfile, CPP_DL_ERROR, cur->name);
  	  else
! 	    reason = REASON_NOENT;
  	}
        else if (!S_ISDIR (st.st_mode))
  	cpp_error_with_line (pfile, CPP_DL_ERROR, 0, 0,
--- 192,204 ----
  	  if (errno != ENOENT)
  	    cpp_errno (pfile, CPP_DL_ERROR, cur->name);
  	  else
! 	    {
! 	      /* If -Wmissing-include-dirs is given, warn.  */
! 	      cpp_options *opts = cpp_get_options (pfile);
! 	      if (opts->warn_missing_include_dirs && cur->user_supplied_p)
! 		cpp_errno (pfile, CPP_DL_WARNING, cur->name);
! 	      reason = REASON_NOENT;
! 	    }
  	}
        else if (!S_ISDIR (st.st_mode))
  	cpp_error_with_line (pfile, CPP_DL_ERROR, 0, 0,
*************** remove_duplicates (cpp_reader *pfile, st
*** 202,208 ****
  	  /* Remove this one if it is in the system chain.  */
  	  reason = REASON_DUP_SYS;
  	  for (tmp = system; tmp; tmp = tmp->next)
! 	    if (INO_T_EQ (tmp->ino, cur->ino) && tmp->dev == cur->dev)
  	      break;
  
  	  if (!tmp)
--- 211,218 ----
  	  /* Remove this one if it is in the system chain.  */
  	  reason = REASON_DUP_SYS;
  	  for (tmp = system; tmp; tmp = tmp->next)
!            if (INO_T_EQ (tmp->ino, cur->ino) && tmp->dev == cur->dev
!                && cur->construct == tmp->construct)
  	      break;
  
  	  if (!tmp)
*************** remove_duplicates (cpp_reader *pfile, st
*** 210,223 ****
  	      /* Duplicate of something earlier in the same chain?  */
  	      reason = REASON_DUP;
  	      for (tmp = head; tmp != cur; tmp = tmp->next)
! 		if (INO_T_EQ (cur->ino, tmp->ino) && cur->dev == tmp->dev)
  		  break;
  
  	      if (tmp == cur
  		  /* Last in the chain and duplicate of JOIN?  */
  		  && !(cur->next == NULL && join
  		       && INO_T_EQ (cur->ino, join->ino)
! 		       && cur->dev == join->dev))
  		{
  		  /* Unique, so keep this directory.  */
  		  pcur = &cur->next;
--- 220,235 ----
  	      /* Duplicate of something earlier in the same chain?  */
  	      reason = REASON_DUP;
  	      for (tmp = head; tmp != cur; tmp = tmp->next)
!                if (INO_T_EQ (cur->ino, tmp->ino) && cur->dev == tmp->dev
!                    && cur->construct == tmp->construct)
  		  break;
  
  	      if (tmp == cur
  		  /* Last in the chain and duplicate of JOIN?  */
  		  && !(cur->next == NULL && join
  		       && INO_T_EQ (cur->ino, join->ino)
!                       && cur->dev == join->dev
!                       && cur->construct == join->construct))
  		{
  		  /* Unique, so keep this directory.  */
  		  pcur = &cur->next;
*************** remove_duplicates (cpp_reader *pfile, st
*** 241,249 ****
  
     We can't just merge the lists and then uniquify them because then
     we may lose directories from the <> search path that should be
!    there; consider -Ifoo -Ibar -I- -Ifoo -Iquux.  It is however safe
!    to treat -Ibar -Ifoo -I- -Ifoo -Iquux as if written -Ibar -I- -Ifoo
!    -Iquux.  */
  static void
  merge_include_chains (cpp_reader *pfile, int verbose)
  {
--- 253,262 ----
  
     We can't just merge the lists and then uniquify them because then
     we may lose directories from the <> search path that should be
!    there; consider -iquote foo -iquote bar -Ifoo -Iquux.  It is
!    however safe to treat -iquote bar -iquote foo -Ifoo -Iquux as if
!    written -iquote bar -Ifoo -Iquux.  */
! 
  static void
  merge_include_chains (cpp_reader *pfile, int verbose)
  {
*************** split_quote_chain (void)
*** 298,313 ****
    quote_ignores_source_dir = true;
  }
  
  /* Add PATH to the include chain CHAIN. PATH must be malloc-ed and
     NUL-terminated.  */
  void
! add_path (char *path, int chain, int cxx_aware)
  {
!   struct cpp_dir *p;
  
  #if defined (HAVE_DOS_BASED_FILE_SYSTEM)
    /* Convert all backslashes to slashes.  The native CRT stat()
!      function does not recognise a directory that ends in a backslash
       (unless it is a drive root dir, such "c:\").  Forward slashes,
       trailing or otherwise, cause no problems for stat().  */
    char* c;
--- 311,338 ----
    quote_ignores_source_dir = true;
  }
  
+ /* Add P to the chain specified by CHAIN.  */
+ 
+ void
+ add_cpp_dir_path (cpp_dir *p, int chain)
+ {
+   if (tails[chain])
+     tails[chain]->next = p;
+   else
+     heads[chain] = p;
+   tails[chain] = p;
+ }
+ 
  /* Add PATH to the include chain CHAIN. PATH must be malloc-ed and
     NUL-terminated.  */
  void
! add_path (char *path, int chain, int cxx_aware, bool user_supplied_p)
  {
!   cpp_dir *p;
  
  #if defined (HAVE_DOS_BASED_FILE_SYSTEM)
    /* Convert all backslashes to slashes.  The native CRT stat()
!      function does not recognize a directory that ends in a backslash
       (unless it is a drive root dir, such "c:\").  Forward slashes,
       trailing or otherwise, cause no problems for stat().  */
    char* c;
*************** add_path (char *path, int chain, int cxx
*** 315,333 ****
      if (*c == '\\') *c = '/';
  #endif
  
!   p = xmalloc (sizeof (struct cpp_dir));
    p->next = NULL;
    p->name = path;
    if (chain == SYSTEM || chain == AFTER)
      p->sysp = 1 + !cxx_aware;
    else
      p->sysp = 0;
  
!   if (tails[chain])
!     tails[chain]->next = p;
!   else
!     heads[chain] = p;
!   tails[chain] = p;
  }
  
  /* Exported function to handle include chain merging, duplicate
--- 340,356 ----
      if (*c == '\\') *c = '/';
  #endif
  
!   p = xmalloc (sizeof (cpp_dir));
    p->next = NULL;
    p->name = path;
    if (chain == SYSTEM || chain == AFTER)
      p->sysp = 1 + !cxx_aware;
    else
      p->sysp = 0;
+   p->construct = 0;
+   p->user_supplied_p = user_supplied_p;
  
!   add_cpp_dir_path (p, chain);
  }
  
  /* Exported function to handle include chain merging, duplicate
*************** register_include_chains (cpp_reader *pfi
*** 352,364 ****
--- 375,408 ----
       include chain.  */
    add_env_var_paths ("CPATH", BRACKET);
    add_env_var_paths (lang_env_vars[idx], SYSTEM);
+   
+   target_c_incpath.extra_pre_includes (sysroot, iprefix, stdinc);
  
    /* Finally chain on the standard directories.  */
    if (stdinc)
      add_standard_paths (sysroot, iprefix, cxx_stdinc);
  
+   target_c_incpath.extra_includes (sysroot, iprefix, stdinc);
+ 
    merge_include_chains (pfile, verbose);
  
    cpp_set_include_chains (pfile, heads[QUOTE], heads[BRACKET],
  			  quote_ignores_source_dir);
  }
+ #if !(defined TARGET_EXTRA_INCLUDES) || !(defined TARGET_EXTRA_PRE_INCLUDES)
+ static void hook_void_charptr_charptr_int (const char *sysroot ATTRIBUTE_UNUSED,
+ 					   const char *iprefix ATTRIBUTE_UNUSED,
+ 					   int stdinc ATTRIBUTE_UNUSED)
+ {
+ }
+ #endif
+ 
+ #ifndef TARGET_EXTRA_INCLUDES
+ #define TARGET_EXTRA_INCLUDES hook_void_charptr_charptr_int
+ #endif
+ #ifndef TARGET_EXTRA_PRE_INCLUDES
+ #define TARGET_EXTRA_PRE_INCLUDES hook_void_charptr_charptr_int
+ #endif
+ 
+ struct target_c_incpath_s target_c_incpath = { TARGET_EXTRA_PRE_INCLUDES, TARGET_EXTRA_INCLUDES };
+ 
diff -Nrcpad gcc-3.4.3/gcc/c-incpath.h gcc-4.0.0/gcc/c-incpath.h
*** gcc-3.4.3/gcc/c-incpath.h	Thu Jun 19 19:43:59 2003
--- gcc-4.0.0/gcc/c-incpath.h	Sun Jan 23 15:05:28 2005
***************
*** 1,5 ****
  /* Set up combined include path for the preprocessor.
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This program is free software; you can redistribute it and/or modify it
  under the terms of the GNU General Public License as published by the
--- 1,5 ----
  /* Set up combined include path for the preprocessor.
!    Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
  
  This program is free software; you can redistribute it and/or modify it
  under the terms of the GNU General Public License as published by the
*************** along with this program; if not, write t
*** 16,23 ****
  Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
  
  extern void split_quote_chain (void);
! extern void add_path (char *, int, int);
  extern void register_include_chains (cpp_reader *, const char *,
  				     const char *, int, int, int);
  
  enum { QUOTE = 0, BRACKET, SYSTEM, AFTER };
--- 16,32 ----
  Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
  
  extern void split_quote_chain (void);
! extern void add_path (char *, int, int, bool);
  extern void register_include_chains (cpp_reader *, const char *,
  				     const char *, int, int, int);
+ extern void add_cpp_dir_path (struct cpp_dir *, int);
+ 
+ struct target_c_incpath_s {
+   /* Do extra includes processing.  STDINC is false iff -nostdinc was given.  */
+   void (*extra_pre_includes) (const char *, const char *, int);
+   void (*extra_includes) (const char *, const char *, int);
+ };
+ 
+ extern struct target_c_incpath_s target_c_incpath;
  
  enum { QUOTE = 0, BRACKET, SYSTEM, AFTER };
diff -Nrcpad gcc-3.4.3/gcc/c-lang.c gcc-4.0.0/gcc/c-lang.c
*** gcc-3.4.3/gcc/c-lang.c	Thu Sep 25 01:25:46 2003
--- gcc-4.0.0/gcc/c-lang.c	Tue Jan 18 11:35:59 2005
***************
*** 1,6 ****
  /* Language-specific hook definitions for C front end.
     Copyright (C) 1991, 1995, 1997, 1998,
!    1999, 2000, 2001, 2003 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
--- 1,6 ----
  /* Language-specific hook definitions for C front end.
     Copyright (C) 1991, 1995, 1997, 1998,
!    1999, 2000, 2001, 2003, 2004, 2005 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
*************** Software Foundation, 59 Temple Place - S
*** 30,156 ****
  #include "ggc.h"
  #include "langhooks.h"
  #include "langhooks-def.h"
  #include "diagnostic.h"
  #include "c-pretty-print.h"
! 
! static void c_initialize_diagnostics (diagnostic_context *);
  
  enum c_language_kind c_language = clk_c;
  
! /* ### When changing hooks, consider if ObjC needs changing too!! ### */
  
  #undef LANG_HOOKS_NAME
  #define LANG_HOOKS_NAME "GNU C"
  #undef LANG_HOOKS_INIT
  #define LANG_HOOKS_INIT c_objc_common_init
- #undef LANG_HOOKS_FINISH
- #define LANG_HOOKS_FINISH c_common_finish
- #undef LANG_HOOKS_INIT_OPTIONS
- #define LANG_HOOKS_INIT_OPTIONS c_common_init_options
- #undef LANG_HOOKS_INITIALIZE_DIAGNOSTICS
- #define LANG_HOOKS_INITIALIZE_DIAGNOSTICS c_initialize_diagnostics
- #undef LANG_HOOKS_HANDLE_OPTION
- #define LANG_HOOKS_HANDLE_OPTION c_common_handle_option
- #undef LANG_HOOKS_MISSING_ARGUMENT
- #define LANG_HOOKS_MISSING_ARGUMENT c_common_missing_argument
- #undef LANG_HOOKS_POST_OPTIONS
- #define LANG_HOOKS_POST_OPTIONS c_common_post_options
- #undef LANG_HOOKS_GET_ALIAS_SET
- #define LANG_HOOKS_GET_ALIAS_SET c_common_get_alias_set
- #undef LANG_HOOKS_SAFE_FROM_P
- #define LANG_HOOKS_SAFE_FROM_P c_safe_from_p
- #undef LANG_HOOKS_EXPAND_EXPR
- #define LANG_HOOKS_EXPAND_EXPR c_expand_expr
- #undef LANG_HOOKS_MARK_ADDRESSABLE
- #define LANG_HOOKS_MARK_ADDRESSABLE c_mark_addressable
- #undef LANG_HOOKS_PARSE_FILE
- #define LANG_HOOKS_PARSE_FILE c_common_parse_file
- #undef LANG_HOOKS_TRUTHVALUE_CONVERSION
- #define LANG_HOOKS_TRUTHVALUE_CONVERSION c_common_truthvalue_conversion
- #undef LANG_HOOKS_FINISH_INCOMPLETE_DECL
- #define LANG_HOOKS_FINISH_INCOMPLETE_DECL c_finish_incomplete_decl
- #undef LANG_HOOKS_UNSAFE_FOR_REEVAL
- #define LANG_HOOKS_UNSAFE_FOR_REEVAL c_common_unsafe_for_reeval
- #undef LANG_HOOKS_STATICP
- #define LANG_HOOKS_STATICP c_staticp
- #undef LANG_HOOKS_SET_DECL_ASSEMBLER_NAME
- #define LANG_HOOKS_SET_DECL_ASSEMBLER_NAME c_static_assembler_name
- #undef LANG_HOOKS_NO_BODY_BLOCKS
- #define LANG_HOOKS_NO_BODY_BLOCKS true
- #undef LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL
- #define LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL c_warn_unused_global_decl
- #undef LANG_HOOKS_PRINT_IDENTIFIER
- #define LANG_HOOKS_PRINT_IDENTIFIER c_print_identifier
- #undef LANG_HOOKS_FUNCTION_ENTER_NESTED
- #define LANG_HOOKS_FUNCTION_ENTER_NESTED c_push_function_context
- #undef LANG_HOOKS_FUNCTION_LEAVE_NESTED
- #define LANG_HOOKS_FUNCTION_LEAVE_NESTED c_pop_function_context
- #undef LANG_HOOKS_DUP_LANG_SPECIFIC_DECL
- #define LANG_HOOKS_DUP_LANG_SPECIFIC_DECL c_dup_lang_specific_decl
- #undef LANG_HOOKS_DECL_UNINIT
- #define LANG_HOOKS_DECL_UNINIT c_decl_uninit
- 
- #undef LANG_HOOKS_RTL_EXPAND_STMT
- #define LANG_HOOKS_RTL_EXPAND_STMT expand_stmt
- 
- /* Attribute hooks.  */
- #undef LANG_HOOKS_COMMON_ATTRIBUTE_TABLE
- #define LANG_HOOKS_COMMON_ATTRIBUTE_TABLE c_common_attribute_table
- #undef LANG_HOOKS_FORMAT_ATTRIBUTE_TABLE
- #define LANG_HOOKS_FORMAT_ATTRIBUTE_TABLE c_common_format_attribute_table
  
! #undef LANG_HOOKS_TREE_INLINING_CANNOT_INLINE_TREE_FN
! #define LANG_HOOKS_TREE_INLINING_CANNOT_INLINE_TREE_FN \
!   c_cannot_inline_tree_fn
! #undef LANG_HOOKS_TREE_INLINING_DISREGARD_INLINE_LIMITS
! #define LANG_HOOKS_TREE_INLINING_DISREGARD_INLINE_LIMITS \
!   c_disregard_inline_limits
! #undef LANG_HOOKS_TREE_INLINING_ANON_AGGR_TYPE_P
! #define LANG_HOOKS_TREE_INLINING_ANON_AGGR_TYPE_P \
!   anon_aggr_type_p
! #undef LANG_HOOKS_TREE_INLINING_CONVERT_PARM_FOR_INLINING
! #define LANG_HOOKS_TREE_INLINING_CONVERT_PARM_FOR_INLINING \
!   c_convert_parm_for_inlining
! #undef LANG_HOOKS_TREE_INLINING_ESTIMATE_NUM_INSNS
! #define LANG_HOOKS_TREE_INLINING_ESTIMATE_NUM_INSNS c_estimate_num_insns
! #undef LANG_HOOKS_TREE_DUMP_DUMP_TREE_FN
! #define LANG_HOOKS_TREE_DUMP_DUMP_TREE_FN c_dump_tree
! 
! #undef LANG_HOOKS_CALLGRAPH_EXPAND_FUNCTION
! #define LANG_HOOKS_CALLGRAPH_EXPAND_FUNCTION c_expand_body
! 
! #undef LANG_HOOKS_TYPE_FOR_MODE
! #define LANG_HOOKS_TYPE_FOR_MODE c_common_type_for_mode
! #undef LANG_HOOKS_TYPE_FOR_SIZE
! #define LANG_HOOKS_TYPE_FOR_SIZE c_common_type_for_size
! #undef LANG_HOOKS_SIGNED_TYPE
! #define LANG_HOOKS_SIGNED_TYPE c_common_signed_type
! #undef LANG_HOOKS_UNSIGNED_TYPE
! #define LANG_HOOKS_UNSIGNED_TYPE c_common_unsigned_type
! #undef LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE
! #define LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE c_common_signed_or_unsigned_type
! #undef LANG_HOOKS_INCOMPLETE_TYPE_ERROR
! #define LANG_HOOKS_INCOMPLETE_TYPE_ERROR c_incomplete_type_error
! #undef LANG_HOOKS_TYPE_PROMOTES_TO
! #define LANG_HOOKS_TYPE_PROMOTES_TO c_type_promotes_to
! #undef LANG_HOOKS_REGISTER_BUILTIN_TYPE
! #define LANG_HOOKS_REGISTER_BUILTIN_TYPE c_register_builtin_type
! 
! #undef LANG_HOOKS_WRITE_GLOBALS
! #define LANG_HOOKS_WRITE_GLOBALS c_write_global_declarations
! 
! /* ### When changing hooks, consider if ObjC needs changing too!! ### */
! 
! /* Each front end provides its own.  */
  const struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
  
  /* Tree code classes.  */
  
  #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE,
  
! const char tree_code_type[] = {
  #include "tree.def"
!   'x',
  #include "c-common.def"
  };
  #undef DEFTREECODE
--- 30,61 ----
  #include "ggc.h"
  #include "langhooks.h"
  #include "langhooks-def.h"
+ #include "tree-inline.h"
  #include "diagnostic.h"
  #include "c-pretty-print.h"
! #include "c-objc-common.h"
! #include "c-pragma.h"
  
  enum c_language_kind c_language = clk_c;
  
! /* Lang hooks common to C and ObjC are declared in c-objc-common.h;
!    consequently, there should be very few hooks below.  */
  
  #undef LANG_HOOKS_NAME
  #define LANG_HOOKS_NAME "GNU C"
  #undef LANG_HOOKS_INIT
  #define LANG_HOOKS_INIT c_objc_common_init
  
! /* Each front end provides its own lang hook initializer.  */
  const struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
  
  /* Tree code classes.  */
  
  #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE,
  
! const enum tree_code_class tree_code_type[] = {
  #include "tree.def"
!   tcc_exceptional,
  #include "c-common.def"
  };
  #undef DEFTREECODE
*************** const char *const tree_code_name[] = {
*** 179,201 ****
  };
  #undef DEFTREECODE
  
  void
  finish_file (void)
  {
-   c_objc_common_finish_file ();
- }
- 
- static void
- c_initialize_diagnostics (diagnostic_context *context)
- {
-   pretty_printer *base = context->printer;
-   c_pretty_printer *pp = xmalloc (sizeof (c_pretty_printer));
-   memcpy (pp_base (pp), base, sizeof (pretty_printer));
-   pp_c_pretty_printer_init (pp);
-   context->printer = (pretty_printer *) pp;
- 
-   /* It is safe to free this object because it was previously malloc()'d.  */
-   free (base);
  }
  
  #include "gtype-c.h"
--- 84,94 ----
  };
  #undef DEFTREECODE
  
+ /* Final processing of file-scope data.  The Objective-C version of
+    this function still does something.  */
  void
  finish_file (void)
  {
  }
  
  #include "gtype-c.h"
diff -Nrcpad gcc-3.4.3/gcc/c-lex.c gcc-4.0.0/gcc/c-lex.c
*** gcc-3.4.3/gcc/c-lex.c	Thu Feb  5 06:59:58 2004
--- gcc-4.0.0/gcc/c-lex.c	Wed Oct 27 17:24:20 2004
*************** Software Foundation, 59 Temple Place - S
*** 27,33 ****
  #include "real.h"
  #include "rtl.h"
  #include "tree.h"
- #include "expr.h"
  #include "input.h"
  #include "output.h"
  #include "c-tree.h"
--- 27,32 ----
*************** Software Foundation, 59 Temple Place - S
*** 42,50 ****
  #include "splay-tree.h"
  #include "debug.h"
  
- /* The current line map.  */
- static const struct line_map *map;
- 
  /* We may keep statistics about how long which files took to compile.  */
  static int header_time, body_time;
  static splay_tree file_info_tree;
--- 41,46 ----
*************** static splay_tree file_info_tree;
*** 58,69 ****
  int pending_lang_change; /* If we need to switch languages - C++ only */
  int c_header_level;	 /* depth in C headers - C++ only */
  
  static tree interpret_integer (const cpp_token *, unsigned int);
  static tree interpret_float (const cpp_token *, unsigned int);
! static enum integer_type_kind
!   narrowest_unsigned_type (tree, unsigned int);
! static enum integer_type_kind
!   narrowest_signed_type (tree, unsigned int);
  static enum cpp_ttype lex_string (const cpp_token *, tree *, bool);
  static tree lex_charconst (const cpp_token *);
  static void update_header_times (const char *);
--- 54,75 ----
  int pending_lang_change; /* If we need to switch languages - C++ only */
  int c_header_level;	 /* depth in C headers - C++ only */
  
+ /* If we need to translate characters received.  This is tri-state:
+    0 means use only the untranslated string; 1 means use only
+    the translated string; -1 means chain the translated string
+    to the untranslated one.  */
+ int c_lex_string_translate = 1;
+ 
+ /* True if strings should be passed to the caller of c_lex completely
+    unmolested (no concatenation, no translation).  */
+ bool c_lex_return_raw_strings = false;
+ 
  static tree interpret_integer (const cpp_token *, unsigned int);
  static tree interpret_float (const cpp_token *, unsigned int);
! static enum integer_type_kind narrowest_unsigned_type
! 	(unsigned HOST_WIDE_INT, unsigned HOST_WIDE_INT, unsigned int);
! static enum integer_type_kind narrowest_signed_type
! 	(unsigned HOST_WIDE_INT, unsigned HOST_WIDE_INT, unsigned int);
  static enum cpp_ttype lex_string (const cpp_token *, tree *, bool);
  static tree lex_charconst (const cpp_token *);
  static void update_header_times (const char *);
*************** init_c_lex (void)
*** 80,89 ****
    struct cpp_callbacks *cb;
    struct c_fileinfo *toplevel;
  
!   /* Set up filename timing.  Must happen before cpp_read_main_file.  */
!   file_info_tree = splay_tree_new ((splay_tree_compare_fn)strcmp,
! 				   0,
! 				   (splay_tree_delete_value_fn)free);
    toplevel = get_fileinfo ("<top level>");
    if (flag_detailed_statistics)
      {
--- 86,93 ----
    struct cpp_callbacks *cb;
    struct c_fileinfo *toplevel;
  
!   /* The get_fileinfo data structure must be initialized before
!      cpp_read_main_file is called.  */
    toplevel = get_fileinfo ("<top level>");
    if (flag_detailed_statistics)
      {
*************** init_c_lex (void)
*** 102,108 ****
  
    /* Set the debug callbacks if we can use them.  */
    if (debug_info_level == DINFO_LEVEL_VERBOSE
!       && (write_symbols == DWARF_DEBUG || write_symbols == DWARF2_DEBUG
            || write_symbols == VMS_AND_DWARF2_DEBUG))
      {
        cb->define = cb_define;
--- 106,112 ----
  
    /* Set the debug callbacks if we can use them.  */
    if (debug_info_level == DINFO_LEVEL_VERBOSE
!       && (write_symbols == DWARF2_DEBUG
            || write_symbols == VMS_AND_DWARF2_DEBUG))
      {
        cb->define = cb_define;
*************** get_fileinfo (const char *name)
*** 116,126 ****
    splay_tree_node n;
    struct c_fileinfo *fi;
  
    n = splay_tree_lookup (file_info_tree, (splay_tree_key) name);
    if (n)
      return (struct c_fileinfo *) n->value;
  
!   fi = xmalloc (sizeof (struct c_fileinfo));
    fi->time = 0;
    fi->interface_only = 0;
    fi->interface_unknown = 1;
--- 120,135 ----
    splay_tree_node n;
    struct c_fileinfo *fi;
  
+   if (!file_info_tree)
+     file_info_tree = splay_tree_new ((splay_tree_compare_fn) strcmp,
+ 				     0,
+ 				     (splay_tree_delete_value_fn) free);
+ 
    n = splay_tree_lookup (file_info_tree, (splay_tree_key) name);
    if (n)
      return (struct c_fileinfo *) n->value;
  
!   fi = XNEW (struct c_fileinfo);
    fi->time = 0;
    fi->interface_only = 0;
    fi->interface_unknown = 1;
*************** update_header_times (const char *name)
*** 145,151 ****
  }
  
  static int
! dump_one_header (splay_tree_node n, void *dummy ATTRIBUTE_UNUSED)
  {
    print_time ((const char *) n->key,
  	      ((struct c_fileinfo *) n->value)->time);
--- 154,160 ----
  }
  
  static int
! dump_one_header (splay_tree_node n, void * ARG_UNUSED (dummy))
  {
    print_time ((const char *) n->key,
  	      ((struct c_fileinfo *) n->value)->time);
*************** dump_time_statistics (void)
*** 163,188 ****
    print_time ("header files (total)", header_time);
    print_time ("main file (total)", this_time - body_time);
    fprintf (stderr, "ratio = %g : 1\n",
! 	   (double)header_time / (double)(this_time - body_time));
    fprintf (stderr, "\n******\n");
  
    splay_tree_foreach (file_info_tree, dump_one_header, 0);
  }
  
  static void
! cb_ident (cpp_reader *pfile ATTRIBUTE_UNUSED,
! 	  unsigned int line ATTRIBUTE_UNUSED,
! 	  const cpp_string *str ATTRIBUTE_UNUSED)
  {
  #ifdef ASM_OUTPUT_IDENT
!   if (! flag_no_ident)
      {
        /* Convert escapes in the string.  */
        cpp_string cstr = { 0, 0 };
        if (cpp_interpret_string (pfile, str, 1, &cstr, false))
  	{
  	  ASM_OUTPUT_IDENT (asm_out_file, (const char *) cstr.text);
! 	  free ((void *)cstr.text);
  	}
      }
  #endif
--- 172,197 ----
    print_time ("header files (total)", header_time);
    print_time ("main file (total)", this_time - body_time);
    fprintf (stderr, "ratio = %g : 1\n",
! 	   (double) header_time / (double) (this_time - body_time));
    fprintf (stderr, "\n******\n");
  
    splay_tree_foreach (file_info_tree, dump_one_header, 0);
  }
  
  static void
! cb_ident (cpp_reader * ARG_UNUSED (pfile),
! 	  unsigned int ARG_UNUSED (line),
! 	  const cpp_string * ARG_UNUSED (str))
  {
  #ifdef ASM_OUTPUT_IDENT
!   if (!flag_no_ident)
      {
        /* Convert escapes in the string.  */
        cpp_string cstr = { 0, 0 };
        if (cpp_interpret_string (pfile, str, 1, &cstr, false))
  	{
  	  ASM_OUTPUT_IDENT (asm_out_file, (const char *) cstr.text);
! 	  free ((void *) cstr.text);
  	}
      }
  #endif
*************** cb_ident (cpp_reader *pfile ATTRIBUTE_UN
*** 191,224 ****
  /* Called at the start of every non-empty line.  TOKEN is the first
     lexed token on the line.  Used for diagnostic line numbers.  */
  static void
! cb_line_change (cpp_reader *pfile ATTRIBUTE_UNUSED, const cpp_token *token,
  		int parsing_args)
  {
!   if (token->type == CPP_EOF || parsing_args)
!     return;
! 
!   input_line = SOURCE_LINE (map, token->line);
  }
  
  void
  fe_file_change (const struct line_map *new_map)
  {
    if (new_map == NULL)
!     {
!       map = NULL;
!       return;
!     }
  
    if (new_map->reason == LC_ENTER)
      {
        /* Don't stack the main buffer on the input stack;
  	 we already did in compile_file.  */
!       if (map != NULL)
  	{
!           int included_at = SOURCE_LINE (new_map - 1, new_map->from_line - 1);
  
  	  input_line = included_at;
  	  push_srcloc (new_map->to_file, 1);
  	  (*debug_hooks->start_source_file) (included_at, new_map->to_file);
  #ifndef NO_IMPLICIT_EXTERN_C
  	  if (c_header_level)
--- 200,243 ----
  /* Called at the start of every non-empty line.  TOKEN is the first
     lexed token on the line.  Used for diagnostic line numbers.  */
  static void
! cb_line_change (cpp_reader * ARG_UNUSED (pfile), const cpp_token *token,
  		int parsing_args)
  {
!   if (token->type != CPP_EOF && !parsing_args)
! #ifdef USE_MAPPED_LOCATION
!     input_location = token->src_loc;
! #else
!     {
!       source_location loc = token->src_loc;
!       const struct line_map *map = linemap_lookup (&line_table, loc);
!       input_line = SOURCE_LINE (map, loc);
!     }
! #endif
  }
  
  void
  fe_file_change (const struct line_map *new_map)
  {
    if (new_map == NULL)
!     return;
  
    if (new_map->reason == LC_ENTER)
      {
        /* Don't stack the main buffer on the input stack;
  	 we already did in compile_file.  */
!       if (!MAIN_FILE_P (new_map))
  	{
! #ifdef USE_MAPPED_LOCATION
!           int included_at = LAST_SOURCE_LINE_LOCATION (new_map - 1);
! 
! 	  input_location = included_at;
! 	  push_srcloc (new_map->start_location);
! #else
!           int included_at = LAST_SOURCE_LINE (new_map - 1);
  
  	  input_line = included_at;
  	  push_srcloc (new_map->to_file, 1);
+ #endif
  	  (*debug_hooks->start_source_file) (included_at, new_map->to_file);
  #ifndef NO_IMPLICIT_EXTERN_C
  	  if (c_header_level)
*************** fe_file_change (const struct line_map *n
*** 248,263 ****
  
    update_header_times (new_map->to_file);
    in_system_header = new_map->sysp != 0;
    input_filename = new_map->to_file;
    input_line = new_map->to_line;
!   map = new_map;
! 
!   /* Hook for C++.  */
!   extract_interface_info ();
  }
  
  static void
! cb_def_pragma (cpp_reader *pfile, unsigned int line)
  {
    /* Issue a warning message if we have been asked to do so.  Ignore
       unknown pragmas in system headers unless an explicit
--- 267,282 ----
  
    update_header_times (new_map->to_file);
    in_system_header = new_map->sysp != 0;
+ #ifdef USE_MAPPED_LOCATION
+   input_location = new_map->start_location;
+ #else
    input_filename = new_map->to_file;
    input_line = new_map->to_line;
! #endif
  }
  
  static void
! cb_def_pragma (cpp_reader *pfile, source_location loc)
  {
    /* Issue a warning message if we have been asked to do so.  Ignore
       unknown pragmas in system headers unless an explicit
*************** cb_def_pragma (cpp_reader *pfile, unsign
*** 266,271 ****
--- 285,298 ----
      {
        const unsigned char *space, *name;
        const cpp_token *s;
+ #ifndef USE_MAPPED_LOCATION
+       location_t fe_loc;
+       const struct line_map *map = linemap_lookup (&line_table, loc);
+       fe_loc.file = map->to_file;
+       fe_loc.line = SOURCE_LINE (map, loc);
+ #else
+       location_t fe_loc = loc;
+ #endif
  
        space = name = (const unsigned char *) "";
        s = cpp_get_token (pfile);
*************** cb_def_pragma (cpp_reader *pfile, unsign
*** 277,330 ****
  	    name = cpp_token_as_text (pfile, s);
  	}
  
!       input_line = SOURCE_LINE (map, line);
!       warning ("ignoring #pragma %s %s", space, name);
      }
  }
  
  /* #define callback for DWARF and DWARF2 debug info.  */
  static void
! cb_define (cpp_reader *pfile, unsigned int line, cpp_hashnode *node)
  {
!   (*debug_hooks->define) (SOURCE_LINE (map, line),
  			  (const char *) cpp_macro_definition (pfile, node));
  }
  
  /* #undef callback for DWARF and DWARF2 debug info.  */
  static void
! cb_undef (cpp_reader *pfile ATTRIBUTE_UNUSED, unsigned int line,
  	  cpp_hashnode *node)
  {
!   (*debug_hooks->undef) (SOURCE_LINE (map, line),
  			 (const char *) NODE_NAME (node));
  }
  
! static inline const cpp_token *
! get_nonpadding_token (void)
! {
!   const cpp_token *tok;
!   timevar_push (TV_CPP);
!   do
!     tok = cpp_get_token (parse_in);
!   while (tok->type == CPP_PADDING);
!   timevar_pop (TV_CPP);
! 
!   return tok;
! }  
  
! int
  c_lex_with_flags (tree *value, unsigned char *cpp_flags)
  {
-   const cpp_token *tok;
-   location_t atloc;
    static bool no_more_pch;
  
   retry:
!   tok = get_nonpadding_token ();
! 
   retry_after_at:
!   switch (tok->type)
      {
      case CPP_NAME:
        *value = HT_IDENT_TO_GCC_IDENT (HT_NODE (tok->val.node));
        break;
--- 304,354 ----
  	    name = cpp_token_as_text (pfile, s);
  	}
  
!       warning ("%Hignoring #pragma %s %s", &fe_loc, space, name);
      }
  }
  
  /* #define callback for DWARF and DWARF2 debug info.  */
  static void
! cb_define (cpp_reader *pfile, source_location loc, cpp_hashnode *node)
  {
!   const struct line_map *map = linemap_lookup (&line_table, loc);
!   (*debug_hooks->define) (SOURCE_LINE (map, loc),
  			  (const char *) cpp_macro_definition (pfile, node));
  }
  
  /* #undef callback for DWARF and DWARF2 debug info.  */
  static void
! cb_undef (cpp_reader * ARG_UNUSED (pfile), source_location loc,
  	  cpp_hashnode *node)
  {
!   const struct line_map *map = linemap_lookup (&line_table, loc);
!   (*debug_hooks->undef) (SOURCE_LINE (map, loc),
  			 (const char *) NODE_NAME (node));
  }
  
! /* Read a token and return its type.  Fill *VALUE with its value, if
!    applicable.  Fill *CPP_FLAGS with the token's flags, if it is
!    non-NULL.  */
  
! enum cpp_ttype
  c_lex_with_flags (tree *value, unsigned char *cpp_flags)
  {
    static bool no_more_pch;
+   const cpp_token *tok;
+   enum cpp_ttype type;
  
+   timevar_push (TV_CPP);
   retry:
!   tok = cpp_get_token (parse_in);
!   type = tok->type;
!   
   retry_after_at:
!   switch (type)
      {
+     case CPP_PADDING:
+       goto retry;
+       
      case CPP_NAME:
        *value = HT_IDENT_TO_GCC_IDENT (HT_NODE (tok->val.node));
        break;
*************** c_lex_with_flags (tree *value, unsigned 
*** 349,389 ****
  	    break;
  
  	  default:
! 	    abort ();
  	  }
        }
        break;
  
      case CPP_ATSIGN:
        /* An @ may give the next token special significance in Objective-C.  */
-       atloc = input_location;
-       tok = get_nonpadding_token ();
        if (c_dialect_objc ())
  	{
! 	  tree val;
! 	  switch (tok->type)
  	    {
  	    case CPP_NAME:
! 	      val = HT_IDENT_TO_GCC_IDENT (HT_NODE (tok->val.node));
! 	      if (C_IS_RESERVED_WORD (val)
! 		  && OBJC_IS_AT_KEYWORD (C_RID_CODE (val)))
  		{
! 		  *value = val;
! 		  return CPP_AT_NAME;
  		}
! 	      break;
! 
! 	    case CPP_STRING:
! 	    case CPP_WSTRING:
! 	      return lex_string (tok, value, true);
  
! 	    default: break;
  	    }
  	}
  
!       /* ... or not.  */
!       error ("%Hstray '@' in program", &atloc);
!       goto retry_after_at;
  
      case CPP_OTHER:
        {
--- 373,431 ----
  	    break;
  
  	  default:
! 	    gcc_unreachable ();
  	  }
        }
        break;
  
      case CPP_ATSIGN:
        /* An @ may give the next token special significance in Objective-C.  */
        if (c_dialect_objc ())
  	{
! 	  location_t atloc = input_location;
! 	  
! 	retry_at:
! 	  tok = cpp_get_token (parse_in);
! 	  type = tok->type;
! 	  switch (type)
  	    {
+ 	    case CPP_PADDING:
+ 	      goto retry_at;
+ 	      
+ 	    case CPP_STRING:
+ 	    case CPP_WSTRING:
+ 	      type = lex_string (tok, value, true);
+ 	      break;
+ 
  	    case CPP_NAME:
! 	      *value = HT_IDENT_TO_GCC_IDENT (HT_NODE (tok->val.node));
! 	      if (objc_is_reserved_word (*value))
  		{
! 		  type = CPP_AT_NAME;
! 		  break;
  		}
! 	      /* FALLTHROUGH */
  
! 	    default:
! 	      /* ... or not.  */
! 	      error ("%Hstray %<@%> in program", &atloc);
! 	      goto retry_after_at;
  	    }
+ 	  break;
  	}
  
!       /* FALLTHROUGH */
!     case CPP_HASH:
!     case CPP_PASTE:
!       {
! 	unsigned char name[4];
! 	
! 	*cpp_spell_token (parse_in, tok, name) = 0;
! 	
! 	error ("stray %qs in program", name);
!       }
!       
!       goto retry;
  
      case CPP_OTHER:
        {
*************** c_lex_with_flags (tree *value, unsigned 
*** 392,400 ****
  	if (c == '"' || c == '\'')
  	  error ("missing terminating %c character", (int) c);
  	else if (ISGRAPH (c))
! 	  error ("stray '%c' in program", (int) c);
  	else
! 	  error ("stray '\\%o' in program", (int) c);
        }
        goto retry;
  
--- 434,442 ----
  	if (c == '"' || c == '\'')
  	  error ("missing terminating %c character", (int) c);
  	else if (ISGRAPH (c))
! 	  error ("stray %qc in program", (int) c);
  	else
! 	  error ("stray %<\\%o%> in program", (int) c);
        }
        goto retry;
  
*************** c_lex_with_flags (tree *value, unsigned 
*** 405,446 ****
  
      case CPP_STRING:
      case CPP_WSTRING:
!       return lex_string (tok, value, false);
        break;
  
        /* These tokens should not be visible outside cpplib.  */
      case CPP_HEADER_NAME:
      case CPP_COMMENT:
      case CPP_MACRO_ARG:
!       abort ();
  
      default:
        *value = NULL_TREE;
        break;
      }
  
!   if (! no_more_pch)
      {
        no_more_pch = true;
        c_common_no_more_pch ();
      }
! 
!   if (cpp_flags)
!     *cpp_flags = tok->flags;
!   return tok->type;
  }
  
! int
  c_lex (tree *value)
  {
    return c_lex_with_flags (value, NULL);
  }
  
  /* Returns the narrowest C-visible unsigned type, starting with the
!    minimum specified by FLAGS, that can fit VALUE, or itk_none if
     there isn't one.  */
  static enum integer_type_kind
! narrowest_unsigned_type (tree value, unsigned int flags)
  {
    enum integer_type_kind itk;
  
--- 447,503 ----
  
      case CPP_STRING:
      case CPP_WSTRING:
!       if (!c_lex_return_raw_strings)
! 	{
! 	  type = lex_string (tok, value, false);
! 	  break;
! 	}
!       
!       /* FALLTHROUGH */
! 
!     case CPP_PRAGMA:
!       *value = build_string (tok->val.str.len, (char *) tok->val.str.text);
        break;
  
        /* These tokens should not be visible outside cpplib.  */
      case CPP_HEADER_NAME:
      case CPP_COMMENT:
      case CPP_MACRO_ARG:
!       gcc_unreachable ();
  
      default:
        *value = NULL_TREE;
        break;
      }
  
!   if (cpp_flags)
!     *cpp_flags = tok->flags;
! 
!   if (!no_more_pch)
      {
        no_more_pch = true;
        c_common_no_more_pch ();
      }
!   
!   timevar_pop (TV_CPP);
!   
!   return type;
  }
  
! enum cpp_ttype
  c_lex (tree *value)
  {
    return c_lex_with_flags (value, NULL);
  }
  
  /* Returns the narrowest C-visible unsigned type, starting with the
!    minimum specified by FLAGS, that can fit HIGH:LOW, or itk_none if
     there isn't one.  */
+ 
  static enum integer_type_kind
! narrowest_unsigned_type (unsigned HOST_WIDE_INT low,
! 			 unsigned HOST_WIDE_INT high,
! 			 unsigned int flags)
  {
    enum integer_type_kind itk;
  
*************** narrowest_unsigned_type (tree value, uns
*** 451,470 ****
    else
      itk = itk_unsigned_long_long;
  
-   /* int_fits_type_p must think the type of its first argument is
-      wider than its second argument, or it won't do the proper check.  */
-   TREE_TYPE (value) = widest_unsigned_literal_type_node;
- 
    for (; itk < itk_none; itk += 2 /* skip unsigned types */)
!     if (int_fits_type_p (value, integer_types[itk]))
!       return itk;
  
    return itk_none;
  }
  
  /* Ditto, but narrowest signed type.  */
  static enum integer_type_kind
! narrowest_signed_type (tree value, unsigned int flags)
  {
    enum integer_type_kind itk;
  
--- 508,530 ----
    else
      itk = itk_unsigned_long_long;
  
    for (; itk < itk_none; itk += 2 /* skip unsigned types */)
!     {
!       tree upper = TYPE_MAX_VALUE (integer_types[itk]);
! 
!       if ((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (upper) > high
! 	  || ((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (upper) == high
! 	      && TREE_INT_CST_LOW (upper) >= low))
! 	return itk;
!     }
  
    return itk_none;
  }
  
  /* Ditto, but narrowest signed type.  */
  static enum integer_type_kind
! narrowest_signed_type (unsigned HOST_WIDE_INT low,
! 		       unsigned HOST_WIDE_INT high, unsigned int flags)
  {
    enum integer_type_kind itk;
  
*************** narrowest_signed_type (tree value, unsig
*** 475,487 ****
    else
      itk = itk_long_long;
  
-   /* int_fits_type_p must think the type of its first argument is
-      wider than its second argument, or it won't do the proper check.  */
-   TREE_TYPE (value) = widest_unsigned_literal_type_node;
  
    for (; itk < itk_none; itk += 2 /* skip signed types */)
!     if (int_fits_type_p (value, integer_types[itk]))
!       return itk;
  
    return itk_none;
  }
--- 535,550 ----
    else
      itk = itk_long_long;
  
  
    for (; itk < itk_none; itk += 2 /* skip signed types */)
!     {
!       tree upper = TYPE_MAX_VALUE (integer_types[itk]);
!       
!       if ((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (upper) > high
! 	  || ((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (upper) == high
! 	      && TREE_INT_CST_LOW (upper) >= low))
! 	return itk;
!     }
  
    return itk_none;
  }
*************** interpret_integer (const cpp_token *toke
*** 497,514 ****
  
    integer = cpp_interpret_integer (parse_in, token, flags);
    integer = cpp_num_sign_extend (integer, options->precision);
-   value = build_int_2_wide (integer.low, integer.high);
  
    /* The type of a constant with a U suffix is straightforward.  */
    if (flags & CPP_N_UNSIGNED)
!     itk = narrowest_unsigned_type (value, flags);
    else
      {
        /* The type of a potentially-signed integer constant varies
  	 depending on the base it's in, the standard in use, and the
  	 length suffixes.  */
!       enum integer_type_kind itk_u = narrowest_unsigned_type (value, flags);
!       enum integer_type_kind itk_s = narrowest_signed_type (value, flags);
  
        /* In both C89 and C99, octal and hex constants may be signed or
  	 unsigned, whichever fits tighter.  We do not warn about this
--- 560,578 ----
  
    integer = cpp_interpret_integer (parse_in, token, flags);
    integer = cpp_num_sign_extend (integer, options->precision);
  
    /* The type of a constant with a U suffix is straightforward.  */
    if (flags & CPP_N_UNSIGNED)
!     itk = narrowest_unsigned_type (integer.low, integer.high, flags);
    else
      {
        /* The type of a potentially-signed integer constant varies
  	 depending on the base it's in, the standard in use, and the
  	 length suffixes.  */
!       enum integer_type_kind itk_u
! 	= narrowest_unsigned_type (integer.low, integer.high, flags);
!       enum integer_type_kind itk_s
! 	= narrowest_signed_type (integer.low, integer.high, flags);
  
        /* In both C89 and C99, octal and hex constants may be signed or
  	 unsigned, whichever fits tighter.  We do not warn about this
*************** interpret_integer (const cpp_token *toke
*** 550,564 ****
  
    if (itk > itk_unsigned_long
        && (flags & CPP_N_WIDTH) != CPP_N_LARGE
!       && ! in_system_header && ! flag_isoc99)
!     pedwarn ("integer constant is too large for \"%s\" type",
  	     (flags & CPP_N_UNSIGNED) ? "unsigned long" : "long");
  
!   TREE_TYPE (value) = type;
  
    /* Convert imaginary to a complex type.  */
    if (flags & CPP_N_IMAGINARY)
!     value = build_complex (NULL_TREE, convert (type, integer_zero_node), value);
  
    return value;
  }
--- 614,628 ----
  
    if (itk > itk_unsigned_long
        && (flags & CPP_N_WIDTH) != CPP_N_LARGE
!       && !in_system_header && !flag_isoc99)
!     pedwarn ("integer constant is too large for %qs type",
  	     (flags & CPP_N_UNSIGNED) ? "unsigned long" : "long");
  
!   value = build_int_cst_wide (type, integer.low, integer.high);
  
    /* Convert imaginary to a complex type.  */
    if (flags & CPP_N_IMAGINARY)
!     value = build_complex (NULL_TREE, build_int_cst (type, 0), value);
  
    return value;
  }
*************** interpret_float (const cpp_token *token,
*** 573,596 ****
    REAL_VALUE_TYPE real;
    char *copy;
    size_t copylen;
!   const char *typename;
  
!   /* FIXME: make %T work in error/warning, then we don't need typename.  */
    if ((flags & CPP_N_WIDTH) == CPP_N_LARGE)
      {
        type = long_double_type_node;
!       typename = "long double";
      }
    else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL
  	   || flag_single_precision_constant)
      {
        type = float_type_node;
!       typename = "float";
      }
    else
      {
        type = double_type_node;
!       typename = "double";
      }
  
    /* Copy the constant to a nul-terminated buffer.  If the constant
--- 637,660 ----
    REAL_VALUE_TYPE real;
    char *copy;
    size_t copylen;
!   const char *type_name;
  
!   /* FIXME: make %T work in error/warning, then we don't need type_name.  */
    if ((flags & CPP_N_WIDTH) == CPP_N_LARGE)
      {
        type = long_double_type_node;
!       type_name = "long double";
      }
    else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL
  	   || flag_single_precision_constant)
      {
        type = float_type_node;
!       type_name = "float";
      }
    else
      {
        type = double_type_node;
!       type_name = "double";
      }
  
    /* Copy the constant to a nul-terminated buffer.  If the constant
*************** interpret_float (const cpp_token *token,
*** 604,623 ****
      /* I or J suffix.  */
      copylen--;
  
!   copy = alloca (copylen + 1);
    memcpy (copy, token->val.str.text, copylen);
    copy[copylen] = '\0';
  
    real_from_string (&real, copy);
    real_convert (&real, TYPE_MODE (type), &real);
  
!   /* A diagnostic is required for "soft" overflow by some ISO C
!      testsuites.  This is not pedwarn, because some people don't want
!      an error for this.
!      ??? That's a dubious reason... is this a mandatory diagnostic or
!      isn't it?   -- zw, 2001-08-21.  */
    if (REAL_VALUE_ISINF (real) && pedantic)
!     warning ("floating constant exceeds range of \"%s\"", typename);
  
    /* Create a node with determined type and value.  */
    value = build_real (type, real);
--- 668,687 ----
      /* I or J suffix.  */
      copylen--;
  
!   copy = (char *) alloca (copylen + 1);
    memcpy (copy, token->val.str.text, copylen);
    copy[copylen] = '\0';
  
    real_from_string (&real, copy);
    real_convert (&real, TYPE_MODE (type), &real);
  
!   /* Both C and C++ require a diagnostic for a floating constant
!      outside the range of representable values of its type.  Since we
!      have __builtin_inf* to produce an infinity, it might now be
!      appropriate for this to be a mandatory pedwarn rather than
!      conditioned on -pedantic.  */
    if (REAL_VALUE_ISINF (real) && pedantic)
!     pedwarn ("floating constant exceeds range of %<%s%>", type_name);
  
    /* Create a node with determined type and value.  */
    value = build_real (type, real);
*************** lex_string (const cpp_token *tok, tree *
*** 648,654 ****
  {
    tree value;
    bool wide = false;
!   size_t count = 1;
    struct obstack str_ob;
    cpp_string istr;
  
--- 712,718 ----
  {
    tree value;
    bool wide = false;
!   size_t concats = 0;
    struct obstack str_ob;
    cpp_string istr;
  
*************** lex_string (const cpp_token *tok, tree *
*** 660,704 ****
    if (tok->type == CPP_WSTRING)
      wide = true;
  
!   tok = get_nonpadding_token ();
!   if (c_dialect_objc () && tok->type == CPP_ATSIGN)
!     {
!       objc_string = true;
!       tok = get_nonpadding_token ();
!     }
!   if (tok->type == CPP_STRING || tok->type == CPP_WSTRING)
      {
!       gcc_obstack_init (&str_ob);
!       obstack_grow (&str_ob, &str, sizeof (cpp_string));
! 
!       do
  	{
! 	  count++;
! 	  if (tok->type == CPP_WSTRING)
! 	    wide = true;
! 	  obstack_grow (&str_ob, &tok->val.str, sizeof (cpp_string));
! 	  
! 	  tok = get_nonpadding_token ();
! 	  if (c_dialect_objc () && tok->type == CPP_ATSIGN)
! 	    {
! 	      objc_string = true;
! 	      tok = get_nonpadding_token ();
! 	    }
  	}
!       while (tok->type == CPP_STRING || tok->type == CPP_WSTRING);
!       strs = obstack_finish (&str_ob);
      }
  
    /* We have read one more token than we want.  */
    _cpp_backup_tokens (parse_in, 1);
  
!   if (count > 1 && !objc_string && warn_traditional && !in_system_header)
      warning ("traditional C rejects string constant concatenation");
  
!   if (cpp_interpret_string (parse_in, strs, count, &istr, wide))
      {
!       value = build_string (istr.len, (char *)istr.text);
!       free ((void *)istr.text);
      }
    else
      {
--- 724,798 ----
    if (tok->type == CPP_WSTRING)
      wide = true;
  
!  retry:
!   tok = cpp_get_token (parse_in);
!   switch (tok->type)
      {
!     case CPP_PADDING:
!       goto retry;
!     case CPP_ATSIGN:
!       if (c_dialect_objc ())
  	{
! 	  objc_string = true;
! 	  goto retry;
  	}
!       /* FALLTHROUGH */
!       
!     default:
!       break;
!       
!     case CPP_WSTRING:
!       wide = true;
!       /* FALLTHROUGH */
!       
!     case CPP_STRING:
!       if (!concats)
! 	{
! 	  gcc_obstack_init (&str_ob);
! 	  obstack_grow (&str_ob, &str, sizeof (cpp_string));
! 	}
! 	
!       concats++;
!       obstack_grow (&str_ob, &tok->val.str, sizeof (cpp_string));
!       goto retry;
      }
  
    /* We have read one more token than we want.  */
    _cpp_backup_tokens (parse_in, 1);
+   if (concats)
+     strs = (cpp_string *) obstack_finish (&str_ob);
  
!   if (concats && !objc_string && warn_traditional && !in_system_header)
      warning ("traditional C rejects string constant concatenation");
  
!   if ((c_lex_string_translate
!        ? cpp_interpret_string : cpp_interpret_string_notranslate)
!       (parse_in, strs, concats + 1, &istr, wide))
      {
!       value = build_string (istr.len, (char *) istr.text);
!       free ((void *) istr.text);
! 
!       if (c_lex_string_translate == -1)
! 	{
! 	  int xlated = cpp_interpret_string_notranslate (parse_in, strs,
! 							 concats + 1,
! 							 &istr, wide);
! 	  /* Assume that, if we managed to translate the string above,
! 	     then the untranslated parsing will always succeed.  */
! 	  gcc_assert (xlated);
! 	  
! 	  if (TREE_STRING_LENGTH (value) != (int) istr.len
! 	      || 0 != strncmp (TREE_STRING_POINTER (value), (char *) istr.text,
! 			       istr.len))
! 	    {
! 	      /* Arrange for us to return the untranslated string in
! 		 *valp, but to set up the C type of the translated
! 		 one.  */
! 	      *valp = build_string (istr.len, (char *) istr.text);
! 	      valp = &TREE_CHAIN (*valp);
! 	    }
! 	  free ((void *) istr.text);
! 	}
      }
    else
      {
*************** lex_string (const cpp_token *tok, tree *
*** 717,723 ****
    TREE_TYPE (value) = wide ? wchar_array_type_node : char_array_type_node;
    *valp = fix_string_type (value);
  
!   if (strs != &str)
      obstack_free (&str_ob, 0);
  
    return objc_string ? CPP_OBJC_STRING : wide ? CPP_WSTRING : CPP_STRING;
--- 811,817 ----
    TREE_TYPE (value) = wide ? wchar_array_type_node : char_array_type_node;
    *valp = fix_string_type (value);
  
!   if (concats)
      obstack_free (&str_ob, 0);
  
    return objc_string ? CPP_OBJC_STRING : wide ? CPP_WSTRING : CPP_STRING;
*************** lex_charconst (const cpp_token *token)
*** 735,747 ****
    result = cpp_interpret_charconst (parse_in, token,
  				    &chars_seen, &unsignedp);
  
-   /* Cast to cppchar_signed_t to get correct sign-extension of RESULT
-      before possibly widening to HOST_WIDE_INT for build_int_2.  */
-   if (unsignedp || (cppchar_signed_t) result >= 0)
-     value = build_int_2 (result, 0);
-   else
-     value = build_int_2 ((cppchar_signed_t) result, -1);
- 
    if (token->type == CPP_WCHAR)
      type = wchar_type_node;
    /* In C, a character constant has type 'int'.
--- 829,834 ----
*************** lex_charconst (const cpp_token *token)
*** 751,756 ****
    else
      type = char_type_node;
  
!   TREE_TYPE (value) = type;
    return value;
  }
--- 838,849 ----
    else
      type = char_type_node;
  
!   /* Cast to cppchar_signed_t to get correct sign-extension of RESULT
!      before possibly widening to HOST_WIDE_INT for build_int_cst.  */
!   if (unsignedp || (cppchar_signed_t) result >= 0)
!     value = build_int_cst_wide (type, result, 0);
!   else
!     value = build_int_cst_wide (type, (cppchar_signed_t) result, -1);
! 
    return value;
  }
diff -Nrcpad gcc-3.4.3/gcc/c-objc-common.c gcc-4.0.0/gcc/c-objc-common.c
*** gcc-3.4.3/gcc/c-objc-common.c	Sun Feb  8 23:12:17 2004
--- gcc-4.0.0/gcc/c-objc-common.c	Thu Jan 27 18:22:19 2005
***************
*** 1,5 ****
  /* Some code common to C and ObjC front ends.
!    Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
--- 1,5 ----
  /* Some code common to C and ObjC front ends.
!    Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
*************** Software Foundation, 59 Temple Place - S
*** 26,33 ****
  #include "rtl.h"
  #include "insn-config.h"
  #include "integrate.h"
- #include "expr.h"
  #include "c-tree.h"
  #include "function.h"
  #include "flags.h"
  #include "toplev.h"
--- 26,33 ----
  #include "rtl.h"
  #include "insn-config.h"
  #include "integrate.h"
  #include "c-tree.h"
+ #include "c-pretty-print.h"
  #include "function.h"
  #include "flags.h"
  #include "toplev.h"
*************** Software Foundation, 59 Temple Place - S
*** 36,49 ****
  #include "varray.h"
  #include "ggc.h"
  #include "langhooks.h"
  #include "target.h"
! #include "cgraph.h"
  
  static bool c_tree_printer (pretty_printer *, text_info *);
- static tree start_cdtor (int);
- static void finish_cdtor (tree);
  
! int
  c_missing_noreturn_ok_p (tree decl)
  {
    /* A missing noreturn is not ok for freestanding implementations and
--- 36,48 ----
  #include "varray.h"
  #include "ggc.h"
  #include "langhooks.h"
+ #include "tree-mudflap.h"
  #include "target.h"
! #include "c-objc-common.h"
  
  static bool c_tree_printer (pretty_printer *, text_info *);
  
! bool
  c_missing_noreturn_ok_p (tree decl)
  {
    /* A missing noreturn is not ok for freestanding implementations and
*************** int
*** 69,75 ****
  c_cannot_inline_tree_fn (tree *fnp)
  {
    tree fn = *fnp;
-   tree t;
    bool do_warning = (warn_inline
  		     && DECL_INLINE (fn)
  		     && DECL_DECLARED_INLINE_P (fn)
--- 68,73 ----
*************** c_cannot_inline_tree_fn (tree *fnp)
*** 79,136 ****
        && lookup_attribute ("always_inline", DECL_ATTRIBUTES (fn)) == NULL)
      {
        if (do_warning)
! 	warning ("%Jfunction '%F' can never be inlined because it "
  		 "is suppressed using -fno-inline", fn, fn);
        goto cannot_inline;
      }
  
    /* Don't auto-inline anything that might not be bound within
       this unit of translation.  */
!   if (!DECL_DECLARED_INLINE_P (fn) && !(*targetm.binds_local_p) (fn))
      {
        if (do_warning)
! 	warning ("%Jfunction '%F' can never be inlined because it might not "
  		 "be bound within this unit of translation", fn, fn);
        goto cannot_inline;
      }
  
!   if (! function_attribute_inlinable_p (fn))
      {
        if (do_warning)
! 	warning ("%Jfunction '%F' can never be inlined because it uses "
  		 "attributes conflicting with inlining", fn, fn);
        goto cannot_inline;
      }
  
-   /* If a function has pending sizes, we must not defer its
-      compilation, and we can't inline it as a tree.  */
-   if (fn == current_function_decl)
-     {
-       t = get_pending_sizes ();
-       put_pending_sizes (t);
- 
-       if (t)
- 	{
- 	  if (do_warning)
- 	    warning ("%Jfunction '%F' can never be inlined because it has "
- 		     "pending sizes", fn, fn);
- 	  goto cannot_inline;
- 	}
-     }
- 
-   if (! DECL_FILE_SCOPE_P (fn))
-     {
-       /* If a nested function has pending sizes, we may have already
-          saved them.  */
-       if (DECL_LANG_SPECIFIC (fn)->pending_sizes)
- 	{
- 	  if (do_warning)
- 	    warning ("%Jnested function '%F' can never be inlined because it "
- 		     "has possibly saved pending sizes", fn, fn);
- 	  goto cannot_inline;
- 	}
-     }
- 
    return 0;
  
   cannot_inline:
--- 77,105 ----
        && lookup_attribute ("always_inline", DECL_ATTRIBUTES (fn)) == NULL)
      {
        if (do_warning)
! 	warning ("%Jfunction %qF can never be inlined because it "
  		 "is suppressed using -fno-inline", fn, fn);
        goto cannot_inline;
      }
  
    /* Don't auto-inline anything that might not be bound within
       this unit of translation.  */
!   if (!DECL_DECLARED_INLINE_P (fn) && !targetm.binds_local_p (fn))
      {
        if (do_warning)
! 	warning ("%Jfunction %qF can never be inlined because it might not "
  		 "be bound within this unit of translation", fn, fn);
        goto cannot_inline;
      }
  
!   if (!function_attribute_inlinable_p (fn))
      {
        if (do_warning)
! 	warning ("%Jfunction %qF can never be inlined because it uses "
  		 "attributes conflicting with inlining", fn, fn);
        goto cannot_inline;
      }
  
    return 0;
  
   cannot_inline:
*************** c_objc_common_init (void)
*** 166,178 ****
    if (c_common_init () == false)
      return false;
  
-   lang_expand_decl_stmt = c_expand_decl_stmt;
- 
    /* These were not defined in the Objective-C front end, but I'm
       putting them here anyway.  The diagnostic format decoder might
       want an enhanced ObjC implementation.  */
    diagnostic_format_decoder (global_dc) = &c_tree_printer;
-   lang_missing_noreturn_ok_p = &c_missing_noreturn_ok_p;
  
    /* If still unspecified, make it match -std=c99
       (allowing for -pedantic-errors).  */
--- 135,144 ----
*************** c_objc_common_init (void)
*** 187,288 ****
    return true;
  }
  
- static tree
- start_cdtor (int method_type)
- {
-   tree fnname = get_file_function_name (method_type);
-   tree void_list_node_1 = build_tree_list (NULL_TREE, void_type_node);
-   tree body;
- 
-   start_function (void_list_node_1,
- 		  build_nt (CALL_EXPR, fnname,
- 			    tree_cons (NULL_TREE, NULL_TREE, void_list_node_1),
- 			    NULL_TREE),
- 		  NULL_TREE);
-   store_parm_decls ();
- 
-   current_function_cannot_inline
-     = "static constructors and destructors cannot be inlined";
- 
-   body = c_begin_compound_stmt ();
- 
-   pushlevel (0);
-   clear_last_expr ();
-   add_scope_stmt (/*begin_p=*/1, /*partial_p=*/0);
- 
-   return body;
- }
- 
- static void
- finish_cdtor (tree body)
- {
-   tree scope;
-   tree block;
- 
-   scope = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0);
-   block = poplevel (0, 0, 0);
-   SCOPE_STMT_BLOCK (TREE_PURPOSE (scope)) = block;
-   SCOPE_STMT_BLOCK (TREE_VALUE (scope)) = block;
- 
-   RECHAIN_STMTS (body, COMPOUND_BODY (body));
- 
-   finish_function ();
- }
- 
- /* Called at end of parsing, but before end-of-file processing.  */
- 
- void
- c_objc_common_finish_file (void)
- {
-   if (pch_file)
-     c_common_write_pch ();
- 
-   /* If multiple translation units were built, copy information between
-      them based on linkage rules.  */
-   merge_translation_unit_decls ();
- 
-   cgraph_finalize_compilation_unit ();
-   cgraph_optimize ();
- 
-   if (static_ctors)
-     {
-       tree body = start_cdtor ('I');
- 
-       for (; static_ctors; static_ctors = TREE_CHAIN (static_ctors))
- 	c_expand_expr_stmt (build_function_call (TREE_VALUE (static_ctors),
- 						 NULL_TREE));
- 
-       finish_cdtor (body);
-     }
- 
-   if (static_dtors)
-     {
-       tree body = start_cdtor ('D');
- 
-       for (; static_dtors; static_dtors = TREE_CHAIN (static_dtors))
- 	c_expand_expr_stmt (build_function_call (TREE_VALUE (static_dtors),
- 						 NULL_TREE));
- 
-       finish_cdtor (body);
-     }
- 
-   {
-     int flags;
-     FILE *stream = dump_begin (TDI_all, &flags);
- 
-     if (stream)
-       {
- 	dump_node (getdecls (), flags & ~TDF_SLIM, stream);
- 	dump_end (TDI_all, stream);
-       }
-   }
- }
- 
  /* Called during diagnostic message formatting process to print a
     source-level entity onto BUFFER.  The meaning of the format specifiers
     is as follows:
     %D: a general decl,
!    %E: An expression,
     %F: a function declaration,
     %T: a type.
  
--- 153,163 ----
    return true;
  }
  
  /* Called during diagnostic message formatting process to print a
     source-level entity onto BUFFER.  The meaning of the format specifiers
     is as follows:
     %D: a general decl,
!    %E: an identifier or expression,
     %F: a function declaration,
     %T: a type.
  
*************** static bool
*** 294,320 ****
  c_tree_printer (pretty_printer *pp, text_info *text)
  {
    tree t = va_arg (*text->args_ptr, tree);
    const char *n = "({anonymous})";
  
    switch (*text->format_spec)
      {
      case 'D':
      case 'F':
        if (DECL_NAME (t))
! 	n = (*lang_hooks.decl_printable_name) (t, 2);
        break;
  
      case 'T':
!       if (TREE_CODE (t) == TYPE_DECL)
  	{
! 	  if (DECL_NAME (t))
! 	    n = (*lang_hooks.decl_printable_name) (t, 2);
  	}
        else
  	{
! 	  t = TYPE_NAME (t);
! 	  if (t)
! 	    n = IDENTIFIER_POINTER (t);
  	}
        break;
  
--- 169,214 ----
  c_tree_printer (pretty_printer *pp, text_info *text)
  {
    tree t = va_arg (*text->args_ptr, tree);
+   tree name;
    const char *n = "({anonymous})";
+   c_pretty_printer *cpp = (c_pretty_printer *) pp;
+   pp->padding = pp_none;
  
    switch (*text->format_spec)
      {
      case 'D':
+       if (DECL_DEBUG_EXPR (t) && DECL_DEBUG_EXPR_IS_FROM (t))
+ 	{
+ 	  t = DECL_DEBUG_EXPR (t);
+ 	  if (!DECL_P (t))
+ 	    {
+ 	      pp_c_expression (cpp, t);
+ 	      return true;
+ 	    }
+ 	}
+       /* FALLTHRU */
+ 
      case 'F':
        if (DECL_NAME (t))
! 	n = lang_hooks.decl_printable_name (t, 2);
        break;
  
      case 'T':
!       gcc_assert (TYPE_P (t));
!       name = TYPE_NAME (t);
!       
!       if (name && TREE_CODE (name) == TYPE_DECL)
  	{
! 	  if (DECL_NAME (name))
! 	    pp_string (cpp, lang_hooks.decl_printable_name (name, 2));
! 	  else
! 	    pp_type_id (cpp, t);
! 	  return true;
  	}
        else
  	{
! 	  pp_type_id (cpp, t);
! 	  return true;
  	}
        break;
  
*************** c_tree_printer (pretty_printer *pp, text
*** 322,334 ****
        if (TREE_CODE (t) == IDENTIFIER_NODE)
  	n = IDENTIFIER_POINTER (t);
        else
!         return false;
        break;
  
      default:
        return false;
      }
  
!   pp_string (pp, n);
    return true;
  }
--- 216,285 ----
        if (TREE_CODE (t) == IDENTIFIER_NODE)
  	n = IDENTIFIER_POINTER (t);
        else
! 	{
! 	  pp_expression (cpp, t);
! 	  return true;
! 	}
        break;
  
      default:
        return false;
      }
  
!   pp_string (cpp, n);
!   return true;
! }
! 
! tree
! c_objc_common_truthvalue_conversion (tree expr)
! {
!  retry:
!   switch (TREE_CODE (TREE_TYPE (expr)))
!     {
!     case ARRAY_TYPE:
!       expr = default_conversion (expr);
!       if (TREE_CODE (TREE_TYPE (expr)) != ARRAY_TYPE)
! 	goto retry;
! 
!       error ("used array that cannot be converted to pointer where scalar is required");
!       return error_mark_node;
! 
!     case RECORD_TYPE:
!       error ("used struct type value where scalar is required");
!       return error_mark_node;
! 
!     case UNION_TYPE:
!       error ("used union type value where scalar is required");
!       return error_mark_node;
!     default:
!       break;
!     }
! 
!   return c_common_truthvalue_conversion (expr);
! }
! 
! /* In C and ObjC, all decls have "C" linkage.  */
! bool
! has_c_linkage (tree decl ATTRIBUTE_UNUSED)
! {
    return true;
  }
+ 
+ void
+ c_initialize_diagnostics (diagnostic_context *context)
+ {
+   pretty_printer *base = context->printer;
+   c_pretty_printer *pp = XNEW (c_pretty_printer);
+   memcpy (pp_base (pp), base, sizeof (pretty_printer));
+   pp_c_pretty_printer_init (pp);
+   context->printer = (pretty_printer *) pp;
+ 
+   /* It is safe to free this object because it was previously XNEW()'d.  */
+   XDELETE (base);
+ }
+ 
+ int
+ c_types_compatible_p (tree x, tree y)
+ {
+     return comptypes (TYPE_MAIN_VARIANT (x), TYPE_MAIN_VARIANT (y));
+ }
diff -Nrcpad gcc-3.4.3/gcc/c-objc-common.h gcc-4.0.0/gcc/c-objc-common.h
*** gcc-3.4.3/gcc/c-objc-common.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/c-objc-common.h	Mon Feb 21 14:39:46 2005
***************
*** 0 ****
--- 1,137 ----
+ /* Language hooks common to C and ObjC front ends.
+    Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+    Contributed by Ziemowit Laski  <zlaski@apple.com>
+ 
+ This file is part of GCC.
+ 
+ GCC is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2, or (at your option) any later
+ version.
+ 
+ GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING.  If not, write to the Free
+ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+ 02111-1307, USA.  */
+ 
+ #ifndef GCC_C_OBJC_COMMON
+ #define GCC_C_OBJC_COMMON
+ 
+ /* In c-objc-common.c.  */
+ extern void c_initialize_diagnostics (diagnostic_context *);
+ 
+ /* Lang hooks that are shared between C and ObjC are defined here.  Hooks
+    specific to C or ObjC go in c-lang.c and objc/objc-lang.c, respectively.  */
+ 
+ #undef LANG_HOOKS_IDENTIFIER_SIZE
+ #define LANG_HOOKS_IDENTIFIER_SIZE C_SIZEOF_STRUCT_LANG_IDENTIFIER
+ #undef LANG_HOOKS_FINISH
+ #define LANG_HOOKS_FINISH c_common_finish
+ #undef LANG_HOOKS_INIT_OPTIONS
+ #define LANG_HOOKS_INIT_OPTIONS c_common_init_options
+ #undef LANG_HOOKS_INITIALIZE_DIAGNOSTICS
+ #define LANG_HOOKS_INITIALIZE_DIAGNOSTICS c_initialize_diagnostics
+ #undef LANG_HOOKS_HANDLE_OPTION
+ #define LANG_HOOKS_HANDLE_OPTION c_common_handle_option
+ #undef LANG_HOOKS_MISSING_ARGUMENT
+ #define LANG_HOOKS_MISSING_ARGUMENT c_common_missing_argument
+ #undef LANG_HOOKS_POST_OPTIONS
+ #define LANG_HOOKS_POST_OPTIONS c_common_post_options
+ #undef LANG_HOOKS_GET_ALIAS_SET
+ #define LANG_HOOKS_GET_ALIAS_SET c_common_get_alias_set
+ #undef LANG_HOOKS_EXPAND_EXPR
+ #define LANG_HOOKS_EXPAND_EXPR c_expand_expr
+ #undef LANG_HOOKS_EXPAND_DECL
+ #define LANG_HOOKS_EXPAND_DECL c_expand_decl
+ #undef LANG_HOOKS_MARK_ADDRESSABLE
+ #define LANG_HOOKS_MARK_ADDRESSABLE c_mark_addressable
+ #undef LANG_HOOKS_PARSE_FILE
+ #define LANG_HOOKS_PARSE_FILE c_common_parse_file
+ #undef LANG_HOOKS_TRUTHVALUE_CONVERSION
+ #define LANG_HOOKS_TRUTHVALUE_CONVERSION c_objc_common_truthvalue_conversion
+ #undef LANG_HOOKS_FINISH_INCOMPLETE_DECL
+ #define LANG_HOOKS_FINISH_INCOMPLETE_DECL c_finish_incomplete_decl
+ #undef LANG_HOOKS_REDUCE_BIT_FIELD_OPERATIONS
+ #define LANG_HOOKS_REDUCE_BIT_FIELD_OPERATIONS true
+ #undef LANG_HOOKS_STATICP
+ #define LANG_HOOKS_STATICP c_staticp
+ #undef LANG_HOOKS_NO_BODY_BLOCKS
+ #define LANG_HOOKS_NO_BODY_BLOCKS true
+ #undef LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL
+ #define LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL c_warn_unused_global_decl
+ #undef LANG_HOOKS_PRINT_IDENTIFIER
+ #define LANG_HOOKS_PRINT_IDENTIFIER c_print_identifier
+ #undef LANG_HOOKS_TYPES_COMPATIBLE_P
+ #define LANG_HOOKS_TYPES_COMPATIBLE_P c_types_compatible_p
+ #undef LANG_HOOKS_FUNCTION_ENTER_NESTED
+ #define LANG_HOOKS_FUNCTION_ENTER_NESTED c_push_function_context
+ #undef LANG_HOOKS_FUNCTION_LEAVE_NESTED
+ #define LANG_HOOKS_FUNCTION_LEAVE_NESTED c_pop_function_context
+ #undef LANG_HOOKS_FUNCTION_MISSING_NORETURN_OK_P
+ #define LANG_HOOKS_FUNCTION_MISSING_NORETURN_OK_P c_missing_noreturn_ok_p
+ #undef LANG_HOOKS_DUP_LANG_SPECIFIC_DECL
+ #define LANG_HOOKS_DUP_LANG_SPECIFIC_DECL c_dup_lang_specific_decl
+ 
+ /* Attribute hooks.  */
+ #undef LANG_HOOKS_COMMON_ATTRIBUTE_TABLE
+ #define LANG_HOOKS_COMMON_ATTRIBUTE_TABLE c_common_attribute_table
+ #undef LANG_HOOKS_FORMAT_ATTRIBUTE_TABLE
+ #define LANG_HOOKS_FORMAT_ATTRIBUTE_TABLE c_common_format_attribute_table
+ 
+ #undef LANG_HOOKS_TREE_INLINING_CANNOT_INLINE_TREE_FN
+ #define LANG_HOOKS_TREE_INLINING_CANNOT_INLINE_TREE_FN \
+   c_cannot_inline_tree_fn
+ #undef LANG_HOOKS_TREE_INLINING_DISREGARD_INLINE_LIMITS
+ #define LANG_HOOKS_TREE_INLINING_DISREGARD_INLINE_LIMITS \
+   c_disregard_inline_limits
+ #undef LANG_HOOKS_TREE_INLINING_ANON_AGGR_TYPE_P
+ #define LANG_HOOKS_TREE_INLINING_ANON_AGGR_TYPE_P \
+   anon_aggr_type_p
+ #undef LANG_HOOKS_TREE_INLINING_CONVERT_PARM_FOR_INLINING
+ #define LANG_HOOKS_TREE_INLINING_CONVERT_PARM_FOR_INLINING \
+   c_convert_parm_for_inlining
+ #undef LANG_HOOKS_TREE_DUMP_DUMP_TREE_FN
+ #define LANG_HOOKS_TREE_DUMP_DUMP_TREE_FN c_dump_tree
+ 
+ #undef LANG_HOOKS_CALLGRAPH_EXPAND_FUNCTION
+ #define LANG_HOOKS_CALLGRAPH_EXPAND_FUNCTION c_expand_body
+ 
+ #undef LANG_HOOKS_TYPE_FOR_MODE
+ #define LANG_HOOKS_TYPE_FOR_MODE c_common_type_for_mode
+ #undef LANG_HOOKS_TYPE_FOR_SIZE
+ #define LANG_HOOKS_TYPE_FOR_SIZE c_common_type_for_size
+ #undef LANG_HOOKS_SIGNED_TYPE
+ #define LANG_HOOKS_SIGNED_TYPE c_common_signed_type
+ #undef LANG_HOOKS_UNSIGNED_TYPE
+ #define LANG_HOOKS_UNSIGNED_TYPE c_common_unsigned_type
+ #undef LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE
+ #define LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE c_common_signed_or_unsigned_type
+ #undef LANG_HOOKS_INCOMPLETE_TYPE_ERROR
+ #define LANG_HOOKS_INCOMPLETE_TYPE_ERROR c_incomplete_type_error
+ #undef LANG_HOOKS_TYPE_PROMOTES_TO
+ #define LANG_HOOKS_TYPE_PROMOTES_TO c_type_promotes_to
+ #undef LANG_HOOKS_REGISTER_BUILTIN_TYPE
+ #define LANG_HOOKS_REGISTER_BUILTIN_TYPE c_register_builtin_type
+ #undef LANG_HOOKS_TO_TARGET_CHARSET
+ #define LANG_HOOKS_TO_TARGET_CHARSET c_common_to_target_charset
+ 
+ /* The C front end's scoping structure is very different from
+    that expected by the language-independent code; it is best
+    to disable getdecls.
+    This means it must also provide its own write_globals.  */
+ 
+ #undef LANG_HOOKS_GETDECLS
+ #define LANG_HOOKS_GETDECLS lhd_return_null_tree_v
+ #undef LANG_HOOKS_WRITE_GLOBALS
+ #define LANG_HOOKS_WRITE_GLOBALS c_write_global_declarations
+ 
+ /* Hooks for tree gimplification.  */
+ #undef LANG_HOOKS_GIMPLIFY_EXPR
+ #define LANG_HOOKS_GIMPLIFY_EXPR c_gimplify_expr
+ 
+ #endif /* GCC_C_OBJC_COMMON */
diff -Nrcpad gcc-3.4.3/gcc/c-opts.c gcc-4.0.0/gcc/c-opts.c
*** gcc-3.4.3/gcc/c-opts.c	Thu Oct 14 21:43:34 2004
--- gcc-4.0.0/gcc/c-opts.c	Wed Mar 23 01:38:39 2005
***************
*** 1,5 ****
  /* C/ObjC/C++ command line option handling.
!    Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
     Contributed by Neil Booth.
  
  This file is part of GCC.
--- 1,5 ----
  /* C/ObjC/C++ command line option handling.
!    Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
     Contributed by Neil Booth.
  
  This file is part of GCC.
*************** Software Foundation, 59 Temple Place - S
*** 37,42 ****
--- 37,43 ----
  #include "debug.h"		/* For debug_hooks.  */
  #include "opts.h"
  #include "options.h"
+ #include "mkdeps.h"
  
  #ifndef DOLLARS_IN_IDENTIFIERS
  # define DOLLARS_IN_IDENTIFIERS true
*************** Software Foundation, 59 Temple Place - S
*** 46,52 ****
  # define TARGET_SYSTEM_ROOT NULL
  #endif
  
! static int saved_lineno;
  
  /* CPP's options.  */
  static cpp_options *cpp_opts;
--- 47,55 ----
  # define TARGET_SYSTEM_ROOT NULL
  #endif
  
! #ifndef TARGET_OPTF
! #define TARGET_OPTF(ARG)
! #endif
  
  /* CPP's options.  */
  static cpp_options *cpp_opts;
*************** static bool quote_chain_split;
*** 88,102 ****
  /* If -Wunused-macros.  */
  static bool warn_unused_macros;
  
  /* Number of deferred options.  */
  static size_t deferred_count;
  
  /* Number of deferred options scanned for -include.  */
  static size_t include_cursor;
  
- /* Permit Fotran front-end options.  */
- static bool permit_fortran_options;
- 
  static void set_Wimplicit (int);
  static void handle_OPT_d (const char *);
  static void set_std_cxx98 (int);
--- 91,105 ----
  /* If -Wunused-macros.  */
  static bool warn_unused_macros;
  
+ /* If -Wvariadic-macros.  */
+ static bool warn_variadic_macros = true;
+ 
  /* Number of deferred options.  */
  static size_t deferred_count;
  
  /* Number of deferred options scanned for -include.  */
  static size_t include_cursor;
  
  static void set_Wimplicit (int);
  static void handle_OPT_d (const char *);
  static void set_std_cxx98 (int);
*************** c_common_missing_argument (const char *o
*** 138,160 ****
        return false;
  
      case OPT_fconstant_string_class_:
!       error ("no class name specified with \"%s\"", opt);
        break;
  
      case OPT_A:
!       error ("assertion missing after \"%s\"", opt);
        break;
  
      case OPT_D:
      case OPT_U:
!       error ("macro name missing after \"%s\"", opt);
        break;
  
      case OPT_I:
      case OPT_idirafter:
      case OPT_isysroot:
      case OPT_isystem:
!       error ("missing path after \"%s\"", opt);
        break;
  
      case OPT_MF:
--- 141,165 ----
        return false;
  
      case OPT_fconstant_string_class_:
!       error ("no class name specified with %qs", opt);
        break;
  
      case OPT_A:
!       error ("assertion missing after %qs", opt);
        break;
  
      case OPT_D:
      case OPT_U:
!       error ("macro name missing after %qs", opt);
        break;
  
+     case OPT_F:
      case OPT_I:
      case OPT_idirafter:
      case OPT_isysroot:
      case OPT_isystem:
!     case OPT_iquote:
!       error ("missing path after %qs", opt);
        break;
  
      case OPT_MF:
*************** c_common_missing_argument (const char *o
*** 163,174 ****
      case OPT_include:
      case OPT_imacros:
      case OPT_o:
!       error ("missing filename after \"%s\"", opt);
        break;
  
      case OPT_MQ:
      case OPT_MT:
!       error ("missing makefile target after \"%s\"", opt);
        break;
      }
  
--- 168,179 ----
      case OPT_include:
      case OPT_imacros:
      case OPT_o:
!       error ("missing filename after %qs", opt);
        break;
  
      case OPT_MQ:
      case OPT_MT:
!       error ("missing makefile target after %qs", opt);
        break;
      }
  
*************** c_common_init_options (unsigned int argc
*** 204,210 ****
      }
  
    parse_in = cpp_create_reader (c_dialect_cxx () ? CLK_GNUCXX: CLK_GNUC89,
! 				ident_hash);
  
    cpp_opts = cpp_get_options (parse_in);
    cpp_opts->dollars_in_ident = DOLLARS_IN_IDENTIFIERS;
--- 209,215 ----
      }
  
    parse_in = cpp_create_reader (c_dialect_cxx () ? CLK_GNUCXX: CLK_GNUC89,
! 				ident_hash, &line_table);
  
    cpp_opts = cpp_get_options (parse_in);
    cpp_opts->dollars_in_ident = DOLLARS_IN_IDENTIFIERS;
*************** c_common_init_options (unsigned int argc
*** 218,246 ****
    flag_exceptions = c_dialect_cxx ();
    warn_pointer_arith = c_dialect_cxx ();
  
!   deferred_opts = xmalloc (argc * sizeof (struct deferred_opt));
  
    result = lang_flags[c_language];
  
    if (c_language == clk_c)
      {
        for (i = 1; i < argc; i++)
! 	{
! 	  /* If preprocessing assembly language, accept any of the C-family
! 	     front end options since the driver may pass them through.  */
! 	  if (! strcmp (argv[i], "-lang-asm"))
  	    result |= CL_C | CL_ObjC | CL_CXX | CL_ObjCXX;
! #ifdef CL_F77
! 	  /* If potentially preprocessing Fortran we have to accept its
! 	     front end options since the driver may them through.  */
! 	  else if (! strcmp (argv[i], "-traditional-cpp"))
! 	    {
! 	      permit_fortran_options = true;
! 	      result |= CL_F77;
! 	    }
! #endif
! 	}
      }
    return result;
  }
  
--- 223,244 ----
    flag_exceptions = c_dialect_cxx ();
    warn_pointer_arith = c_dialect_cxx ();
  
!   deferred_opts = XNEWVEC (struct deferred_opt, argc);
  
    result = lang_flags[c_language];
  
    if (c_language == clk_c)
      {
+       /* If preprocessing assembly language, accept any of the C-family
+ 	 front end options since the driver may pass them through.  */
        for (i = 1; i < argc; i++)
! 	if (! strcmp (argv[i], "-lang-asm"))
! 	  {
  	    result |= CL_C | CL_ObjC | CL_CXX | CL_ObjCXX;
! 	    break;
! 	  }
      }
+ 
    return result;
  }
  
*************** c_common_handle_option (size_t scode, co
*** 258,264 ****
    switch (code)
      {
      default:
!       result = permit_fortran_options;
        break;
  
      case OPT__output_pch_:
--- 256,264 ----
    switch (code)
      {
      default:
!       if (cl_options[code].flags & (CL_C | CL_CXX | CL_ObjC | CL_ObjCXX))
! 	break;
!       result = 0;
        break;
  
      case OPT__output_pch_:
*************** c_common_handle_option (size_t scode, co
*** 290,304 ****
        cpp_opts->print_include_names = 1;
        break;
  
      case OPT_I:
        if (strcmp (arg, "-"))
! 	add_path (xstrdup (arg), BRACKET, 0);
        else
  	{
  	  if (quote_chain_split)
  	    error ("-I- specified twice");
  	  quote_chain_split = true;
  	  split_quote_chain ();
  	}
        break;
  
--- 290,309 ----
        cpp_opts->print_include_names = 1;
        break;
  
+     case OPT_F:
+       TARGET_OPTF (xstrdup (arg));
+       break;
+ 
      case OPT_I:
        if (strcmp (arg, "-"))
! 	add_path (xstrdup (arg), BRACKET, 0, true);
        else
  	{
  	  if (quote_chain_split)
  	    error ("-I- specified twice");
  	  quote_chain_split = true;
  	  split_quote_chain ();
+ 	  inform ("obsolete option -I- used, please use -iquote instead");
  	}
        break;
  
*************** c_common_handle_option (size_t scode, co
*** 352,361 ****
        defer_opt (code, arg);
        break;
  
-     case OPT_Wabi:
-       warn_abi = value;
-       break;
- 
      case OPT_Wall:
        set_Wunused (value);
        set_Wformat (value);
--- 357,362 ----
*************** c_common_handle_option (size_t scode, co
*** 398,434 ****
        cpp_opts->warn_multichar = value;	/* Was C++ only.  */
        break;
  
-     case OPT_Wbad_function_cast:
-       warn_bad_function_cast = value;
-       break;
- 
-     case OPT_Wcast_qual:
-       warn_cast_qual = value;
-       break;
- 
-     case OPT_Wchar_subscripts:
-       warn_char_subscripts = value;
-       break;
- 
      case OPT_Wcomment:
      case OPT_Wcomments:
        cpp_opts->warn_comments = value;
        break;
  
-     case OPT_Wconversion:
-       warn_conversion = value;
-       break;
- 
-     case OPT_Wctor_dtor_privacy:
-       warn_ctor_dtor_privacy = value;
-       break;
- 
-     case OPT_Wdeclaration_after_statement:
-       warn_declaration_after_statement = value;
-       break;
- 
      case OPT_Wdeprecated:
-       warn_deprecated = value;
        cpp_opts->warn_deprecated = value;
        break;
  
--- 399,410 ----
*************** c_common_handle_option (size_t scode, co
*** 436,461 ****
        warn_div_by_zero = value;
        break;
  
-     case OPT_Weffc__:
-       warn_ecpp = value;
-       break;
- 
      case OPT_Wendif_labels:
        cpp_opts->warn_endif_labels = value;
        break;
  
      case OPT_Werror:
        cpp_opts->warnings_are_errors = value;
        break;
  
      case OPT_Werror_implicit_function_declaration:
        mesg_implicit_function_declaration = 2;
        break;
  
-     case OPT_Wfloat_equal:
-       warn_float_equal = value;
-       break;
- 
      case OPT_Wformat:
        set_Wformat (value);
        break;
--- 412,430 ----
        warn_div_by_zero = value;
        break;
  
      case OPT_Wendif_labels:
        cpp_opts->warn_endif_labels = value;
        break;
  
      case OPT_Werror:
        cpp_opts->warnings_are_errors = value;
+       global_dc->warning_as_error_requested = value;
        break;
  
      case OPT_Werror_implicit_function_declaration:
        mesg_implicit_function_declaration = 2;
        break;
  
      case OPT_Wformat:
        set_Wformat (value);
        break;
*************** c_common_handle_option (size_t scode, co
*** 464,521 ****
        set_Wformat (atoi (arg));
        break;
  
-     case OPT_Wformat_extra_args:
-       warn_format_extra_args = value;
-       break;
- 
-     case OPT_Wformat_nonliteral:
-       warn_format_nonliteral = value;
-       break;
- 
-     case OPT_Wformat_security:
-       warn_format_security = value;
-       break;
- 
-     case OPT_Wformat_y2k:
-       warn_format_y2k = value;
-       break;
- 
-     case OPT_Wformat_zero_length:
-       warn_format_zero_length = value;
-       break;
- 
-     case OPT_Winit_self:
-       warn_init_self = value;
-       break;
- 
      case OPT_Wimplicit:
        set_Wimplicit (value);
        break;
  
-     case OPT_Wimplicit_function_declaration:
-       mesg_implicit_function_declaration = value;
-       break;
- 
-     case OPT_Wimplicit_int:
-       warn_implicit_int = value;
-       break;
- 
      case OPT_Wimport:
        /* Silently ignore for now.  */
        break;
  
-     case OPT_Winvalid_offsetof:
-       warn_invalid_offsetof = value;
-       break;
- 
      case OPT_Winvalid_pch:
        cpp_opts->warn_invalid_pch = value;
        break;
  
-     case OPT_Wlong_long:
-       warn_long_long = value;
-       break;
- 
      case OPT_Wmain:
        if (value)
  	warn_main = 1;
--- 433,450 ----
*************** c_common_handle_option (size_t scode, co
*** 523,634 ****
  	warn_main = -1;
        break;
  
!     case OPT_Wmissing_braces:
!       warn_missing_braces = value;
!       break;
! 
!     case OPT_Wmissing_declarations:
!       warn_missing_declarations = value;
!       break;
! 
!     case OPT_Wmissing_format_attribute:
!       warn_missing_format_attribute = value;
!       break;
! 
!     case OPT_Wmissing_prototypes:
!       warn_missing_prototypes = value;
        break;
  
      case OPT_Wmultichar:
        cpp_opts->warn_multichar = value;
        break;
  
-     case OPT_Wnested_externs:
-       warn_nested_externs = value;
-       break;
- 
-     case OPT_Wnon_template_friend:
-       warn_nontemplate_friend = value;
-       break;
- 
-     case OPT_Wnon_virtual_dtor:
-       warn_nonvdtor = value;
-       break;
- 
-     case OPT_Wnonnull:
-       warn_nonnull = value;
-       break;
- 
-     case OPT_Wold_style_definition:
-       warn_old_style_definition = value;
-       break;
- 
-     case OPT_Wold_style_cast:
-       warn_old_style_cast = value;
-       break;
- 
-     case OPT_Woverloaded_virtual:
-       warn_overloaded_virtual = value;
-       break;
- 
-     case OPT_Wparentheses:
-       warn_parentheses = value;
-       break;
- 
-     case OPT_Wpmf_conversions:
-       warn_pmf2ptr = value;
-       break;
- 
-     case OPT_Wpointer_arith:
-       warn_pointer_arith = value;
-       break;
- 
-     case OPT_Wprotocol:
-       warn_protocol = value;
-       break;
- 
-     case OPT_Wselector:
-       warn_selector = value;
-       break;
- 
-     case OPT_Wredundant_decls:
-       warn_redundant_decls = value;
-       break;
- 
-     case OPT_Wreorder:
-       warn_reorder = value;
-       break;
- 
      case OPT_Wreturn_type:
        warn_return_type = value;
        break;
  
-     case OPT_Wsequence_point:
-       warn_sequence_point = value;
-       break;
- 
-     case OPT_Wsign_compare:
-       warn_sign_compare = value;
-       break;
- 
-     case OPT_Wsign_promo:
-       warn_sign_promo = value;
-       break;
- 
-     case OPT_Wstrict_prototypes:
-       warn_strict_prototypes = value;
-       break;
- 
-     case OPT_Wsynth:
-       warn_synth = value;
-       break;
- 
      case OPT_Wsystem_headers:
        cpp_opts->warn_system_headers = value;
        break;
  
      case OPT_Wtraditional:
-       warn_traditional = value;
        cpp_opts->warn_traditional = value;
        break;
  
--- 452,474 ----
  	warn_main = -1;
        break;
  
!     case OPT_Wmissing_include_dirs:
!       cpp_opts->warn_missing_include_dirs = value;
        break;
  
      case OPT_Wmultichar:
        cpp_opts->warn_multichar = value;
        break;
  
      case OPT_Wreturn_type:
        warn_return_type = value;
        break;
  
      case OPT_Wsystem_headers:
        cpp_opts->warn_system_headers = value;
        break;
  
      case OPT_Wtraditional:
        cpp_opts->warn_traditional = value;
        break;
  
*************** c_common_handle_option (size_t scode, co
*** 636,645 ****
        cpp_opts->warn_trigraphs = value;
        break;
  
-     case OPT_Wundeclared_selector:
-       warn_undeclared_selector = value;
-       break;
- 
      case OPT_Wundef:
        cpp_opts->warn_undef = value;
        break;
--- 476,481 ----
*************** c_common_handle_option (size_t scode, co
*** 654,659 ****
--- 490,499 ----
        warn_unused_macros = value;
        break;
  
+     case OPT_Wvariadic_macros:
+       warn_variadic_macros = value;
+       break;
+ 
      case OPT_Wwrite_strings:
        if (!c_dialect_cxx ())
  	flag_const_strings = value;
*************** c_common_handle_option (size_t scode, co
*** 697,703 ****
      case OPT_fvtable_thunks:
      case OPT_fxref:
      case OPT_fvtable_gc:
!       warning ("switch \"%s\" is no longer supported", option->opt_text);
        break;
  
      case OPT_faccess_control:
--- 537,543 ----
      case OPT_fvtable_thunks:
      case OPT_fxref:
      case OPT_fvtable_gc:
!       warning ("switch %qs is no longer supported", option->opt_text);
        break;
  
      case OPT_faccess_control:
*************** c_common_handle_option (size_t scode, co
*** 723,733 ****
        cpp_opts->dollars_in_ident = value;
        break;
  
-     case OPT_fdump_:
-       if (!dump_switch_p (arg))
- 	result = 0;
-       break;
- 
      case OPT_ffreestanding:
        value = !value;
        /* Fall through....  */
--- 563,568 ----
*************** c_common_handle_option (size_t scode, co
*** 753,759 ****
  
      case OPT_fsigned_bitfields:
        flag_signed_bitfields = value;
-       explicit_flag_signed_bitfields = 1;
        break;
  
      case OPT_fsigned_char:
--- 588,593 ----
*************** c_common_handle_option (size_t scode, co
*** 762,768 ****
  
      case OPT_funsigned_bitfields:
        flag_signed_bitfields = !value;
-       explicit_flag_signed_bitfields = 1;
        break;
  
      case OPT_funsigned_char:
--- 596,601 ----
*************** c_common_handle_option (size_t scode, co
*** 853,858 ****
--- 686,695 ----
        flag_objc_exceptions = value;
        break;
  
+     case OPT_fobjc_sjlj_exceptions:
+       flag_objc_sjlj_exceptions = value;
+       break;
+ 
      case OPT_foperator_names:
        cpp_opts->operator_names = value;
        break;
*************** c_common_handle_option (size_t scode, co
*** 865,870 ****
--- 702,711 ----
        cpp_opts->restore_pch_deps = value;
        break;
  
+     case OPT_fpch_preprocess:
+       flag_pch_preprocess = value;
+       break;
+ 
      case OPT_fpermissive:
        flag_permissive = value;
        break;
*************** c_common_handle_option (size_t scode, co
*** 920,930 ****
--- 761,779 ----
      case OPT_fuse_cxa_atexit:
        flag_use_cxa_atexit = value;
        break;
+       
+     case OPT_fvisibility_inlines_hidden:
+       visibility_options.inlines_hidden = value;
+       break;
  
      case OPT_fweak:
        flag_weak = value;
        break;
  
+     case OPT_fthreadsafe_statics:
+       flag_threadsafe_statics = value;
+       break;
+ 
      case OPT_fzero_link:
        flag_zero_link = value;
        break;
*************** c_common_handle_option (size_t scode, co
*** 934,940 ****
        break;
  
      case OPT_idirafter:
!       add_path (xstrdup (arg), AFTER, 0);
        break;
  
      case OPT_imacros:
--- 783,789 ----
        break;
  
      case OPT_idirafter:
!       add_path (xstrdup (arg), AFTER, 0, true);
        break;
  
      case OPT_imacros:
*************** c_common_handle_option (size_t scode, co
*** 946,957 ****
        iprefix = arg;
        break;
  
      case OPT_isysroot:
        sysroot = arg;
        break;
  
      case OPT_isystem:
!       add_path (xstrdup (arg), SYSTEM, 0);
        break;
  
      case OPT_iwithprefix:
--- 795,810 ----
        iprefix = arg;
        break;
  
+     case OPT_iquote:
+       add_path (xstrdup (arg), QUOTE, 0, true);
+       break;
+ 
      case OPT_isysroot:
        sysroot = arg;
        break;
  
      case OPT_isystem:
!       add_path (xstrdup (arg), SYSTEM, 0, true);
        break;
  
      case OPT_iwithprefix:
*************** c_common_post_options (const char **pfil
*** 1065,1071 ****
    /* Canonicalize the input and output filenames.  */
    if (in_fnames == NULL)
      {
!       in_fnames = xmalloc (sizeof (in_fnames[0]));
        in_fnames[0] = "";
      }
    else if (strcmp (in_fnames[0], "-") == 0)
--- 918,924 ----
    /* Canonicalize the input and output filenames.  */
    if (in_fnames == NULL)
      {
!       in_fnames = XNEWVEC (const char *, 1);
        in_fnames[0] = "";
      }
    else if (strcmp (in_fnames[0], "-") == 0)
*************** c_common_post_options (const char **pfil
*** 1086,1113 ****
  
    flag_inline_trees = 1;
  
!   /* Use tree inlining if possible.  Function instrumentation is only
!      done in the RTL level, so we disable tree inlining.  */
!   if (flag_instrument_function_entry_exit)
!     {
!       flag_no_inline = 1;
!       flag_really_no_inline = 1;
!     }
!   else
!     {
!       if (!flag_no_inline)
! 	flag_no_inline = 1;
!       if (flag_inline_functions)
! 	{
! 	  flag_inline_trees = 2;
! 	  flag_inline_functions = 0;
! 	}
!     }
  
!   /* -Wextra implies -Wsign-compare, but not if explicitly
!       overridden.  */
    if (warn_sign_compare == -1)
      warn_sign_compare = extra_warnings;
  
    /* Special format checking options don't work without -Wformat; warn if
       they are used.  */
--- 939,967 ----
  
    flag_inline_trees = 1;
  
!   /* Use tree inlining.  */
!   if (!flag_no_inline)
!     flag_no_inline = 1;
!   if (flag_inline_functions)
!     flag_inline_trees = 2;
  
!   /* If we are given more than one input file, we must use
!      unit-at-a-time mode.  */
!   if (num_in_fnames > 1)
!     flag_unit_at_a_time = 1;
! 
!   /* Default to ObjC sjlj exception handling if NeXT runtime.  */
!   if (flag_objc_sjlj_exceptions < 0)
!     flag_objc_sjlj_exceptions = flag_next_runtime;
!   if (flag_objc_exceptions && !flag_objc_sjlj_exceptions)
!     flag_exceptions = 1;
! 
!   /* -Wextra implies -Wsign-compare and -Wmissing-field-initializers,
!      but not if explicitly overridden.  */
    if (warn_sign_compare == -1)
      warn_sign_compare = extra_warnings;
+   if (warn_missing_field_initializers == -1)
+     warn_missing_field_initializers = extra_warnings;
  
    /* Special format checking options don't work without -Wformat; warn if
       they are used.  */
*************** c_common_post_options (const char **pfil
*** 1124,1129 ****
--- 978,988 ----
    if (warn_missing_format_attribute && !warn_format)
      warning ("-Wmissing-format-attribute ignored without -Wformat");
  
+   /* C99 requires special handling of complex multiplication and division;
+      -ffast-math and -fcx-limited-range are handled in process_options.  */
+   if (flag_isoc99)
+     flag_complex_method = 2;
+ 
    if (flag_preprocess_only)
      {
        /* Open the output now.  We must do so even if flag_no_output is
*************** c_common_post_options (const char **pfil
*** 1151,1157 ****
        init_c_lex ();
  
        /* Yuk.  WTF is this?  I do know ObjC relies on it somewhere.  */
!       input_line = 0;
      }
  
    cb = cpp_get_callbacks (parse_in);
--- 1010,1016 ----
        init_c_lex ();
  
        /* Yuk.  WTF is this?  I do know ObjC relies on it somewhere.  */
!       input_location = UNKNOWN_LOCATION;
      }
  
    cb = cpp_get_callbacks (parse_in);
*************** c_common_post_options (const char **pfil
*** 1159,1166 ****
    cb->dir_change = cb_dir_change;
    cpp_post_options (parse_in);
  
!   saved_lineno = input_line;
!   input_line = 0;
  
    /* If an error has occurred in cpplib, note it so we fail
       immediately.  */
--- 1018,1024 ----
    cb->dir_change = cb_dir_change;
    cpp_post_options (parse_in);
  
!   input_location = UNKNOWN_LOCATION;
  
    /* If an error has occurred in cpplib, note it so we fail
       immediately.  */
*************** c_common_post_options (const char **pfil
*** 1168,1178 ****
  
    *pfilename = this_input_filename
      = cpp_read_main_file (parse_in, in_fnames[0]);
    if (this_input_filename == NULL)
!     return true;
  
    if (flag_working_directory
!       && flag_preprocess_only && ! flag_no_line_commands)
      pp_dir_change (parse_in, get_src_pwd ());
  
    return flag_preprocess_only;
--- 1026,1040 ----
  
    *pfilename = this_input_filename
      = cpp_read_main_file (parse_in, in_fnames[0]);
+   /* Don't do any compilation or preprocessing if there is no input file.  */
    if (this_input_filename == NULL)
!     {
!       errorcount++;
!       return false;
!     }
  
    if (flag_working_directory
!       && flag_preprocess_only && !flag_no_line_commands)
      pp_dir_change (parse_in, get_src_pwd ());
  
    return flag_preprocess_only;
*************** c_common_post_options (const char **pfil
*** 1182,1196 ****
  bool
  c_common_init (void)
  {
-   input_line = saved_lineno;
- 
    /* Set up preprocessor arithmetic.  Must be done after call to
       c_common_nodes_and_builtins for type nodes to be good.  */
    cpp_opts->precision = TYPE_PRECISION (intmax_type_node);
    cpp_opts->char_precision = TYPE_PRECISION (char_type_node);
    cpp_opts->int_precision = TYPE_PRECISION (integer_type_node);
    cpp_opts->wchar_precision = TYPE_PRECISION (wchar_type_node);
!   cpp_opts->unsigned_wchar = TREE_UNSIGNED (wchar_type_node);
    cpp_opts->bytes_big_endian = BYTES_BIG_ENDIAN;
  
    /* This can't happen until after wchar_precision and bytes_big_endian
--- 1044,1056 ----
  bool
  c_common_init (void)
  {
    /* Set up preprocessor arithmetic.  Must be done after call to
       c_common_nodes_and_builtins for type nodes to be good.  */
    cpp_opts->precision = TYPE_PRECISION (intmax_type_node);
    cpp_opts->char_precision = TYPE_PRECISION (char_type_node);
    cpp_opts->int_precision = TYPE_PRECISION (integer_type_node);
    cpp_opts->wchar_precision = TYPE_PRECISION (wchar_type_node);
!   cpp_opts->unsigned_wchar = TYPE_UNSIGNED (wchar_type_node);
    cpp_opts->bytes_big_endian = BYTES_BIG_ENDIAN;
  
    /* This can't happen until after wchar_precision and bytes_big_endian
*************** c_common_init (void)
*** 1213,1253 ****
  /* Initialize the integrated preprocessor after debug output has been
     initialized; loop over each input file.  */
  void
! c_common_parse_file (int set_yydebug ATTRIBUTE_UNUSED)
  {
!   unsigned file_index;
!   
  #if YYDEBUG != 0
    yydebug = set_yydebug;
  #else
!   warning ("YYDEBUG not defined");
  #endif
  
!   file_index = 0;
!   
!   do
      {
!       if (file_index > 0)
! 	{
! 	  /* Reset the state of the parser.  */
! 	  c_reset_state();
! 
! 	  /* Reset cpplib's macros and start a new file.  */
! 	  cpp_undef_all (parse_in);
! 	  main_input_filename = this_input_filename
! 	    = cpp_read_main_file (parse_in, in_fnames[file_index]);
! 	  if (this_input_filename == NULL)
! 	    break;
! 	}
        finish_options ();
!       if (file_index == 0)
! 	pch_init();
        c_parse_file ();
! 
!       file_index++;
!     } while (file_index < num_in_fnames);
!   
!   finish_file ();
  }
  
  /* Common finish hook for the C, ObjC and C++ front ends.  */
--- 1073,1116 ----
  /* Initialize the integrated preprocessor after debug output has been
     initialized; loop over each input file.  */
  void
! c_common_parse_file (int set_yydebug)
  {
!   unsigned int i;
! 
!   /* Enable parser debugging, if requested and we can.  If requested
!      and we can't, notify the user.  */
  #if YYDEBUG != 0
    yydebug = set_yydebug;
  #else
!   if (set_yydebug)
!     warning ("YYDEBUG was not defined at build time, -dy ignored");
  #endif
  
!   i = 0;
!   for (;;)
      {
!       /* Start the main input file, if the debug writer wants it.  */
!       if (debug_hooks->start_end_main_source_file)
!         (*debug_hooks->start_source_file) (0, this_input_filename);
        finish_options ();
!       pch_init ();
!       push_file_scope ();
        c_parse_file ();
!       finish_file ();
!       pop_file_scope ();
!       /* And end the main input file, if the debug writer wants it */
!       if (debug_hooks->start_end_main_source_file)
!         (*debug_hooks->end_source_file) (0);
!       if (++i >= num_in_fnames)
! 	break;
!       cpp_undef_all (parse_in);
!       this_input_filename
! 	= cpp_read_main_file (parse_in, in_fnames[i]);
!       /* If an input file is missing, abandon further compilation.
!          cpplib has issued a diagnostic.  */
!       if (!this_input_filename)
! 	break;
!     }
  }
  
  /* Common finish hook for the C, ObjC and C++ front ends.  */
*************** check_deps_environment_vars (void)
*** 1323,1328 ****
--- 1186,1192 ----
  	deps_file = spec;
  
        deps_append = 1;
+       deps_seen = true;
      }
  }
  
*************** static void
*** 1331,1343 ****
  handle_deferred_opts (void)
  {
    size_t i;
  
    for (i = 0; i < deferred_count; i++)
      {
        struct deferred_opt *opt = &deferred_opts[i];
  
        if (opt->code == OPT_MT || opt->code == OPT_MQ)
! 	cpp_add_dependency_target (parse_in, opt->arg, opt->code == OPT_MQ);
      }
  }
  
--- 1195,1216 ----
  handle_deferred_opts (void)
  {
    size_t i;
+   struct deps *deps;
+ 
+   /* Avoid allocating the deps buffer if we don't need it.
+      (This flag may be true without there having been -MT or -MQ
+      options, but we'll still need the deps buffer.)  */
+   if (!deps_seen)
+     return;
+ 
+   deps = cpp_get_deps (parse_in);
  
    for (i = 0; i < deferred_count; i++)
      {
        struct deferred_opt *opt = &deferred_opts[i];
  
        if (opt->code == OPT_MT || opt->code == OPT_MQ)
! 	deps_add_target (deps, opt->arg, opt->code == OPT_MQ);
      }
  }
  
*************** sanitize_cpp_opts (void)
*** 1358,1368 ****
--- 1231,1243 ----
  
    /* Disable -dD, -dN and -dI if normal output is suppressed.  Allow
       -dM since at least glibc relies on -M -dM to work.  */
+   /* Also, flag_no_output implies flag_no_line_commands, always. */
    if (flag_no_output)
      {
        if (flag_dump_macros != 'M')
  	flag_dump_macros = 0;
        flag_dump_includes = 0;
+       flag_no_line_commands = 1;
      }
  
    cpp_opts->unsigned_char = !flag_signed_char;
*************** sanitize_cpp_opts (void)
*** 1373,1378 ****
--- 1248,1258 ----
    cpp_opts->warn_long_long
      = warn_long_long && ((!flag_isoc99 && pedantic) || warn_traditional);
  
+   /* Similarly with -Wno-variadic-macros.  No check for c99 here, since
+      this also turns off warnings about GCCs extension.  */
+   cpp_opts->warn_variadic_macros
+     = warn_variadic_macros && (pedantic || warn_traditional);
+ 
    /* If we're generating preprocessor output, emit current directory
       if explicitly requested or if debugging information is enabled.
       ??? Maybe we should only do it for debugging formats that
*************** add_prefixed_path (const char *suffix, s
*** 1393,1404 ****
    prefix     = iprefix ? iprefix : cpp_GCC_INCLUDE_DIR;
    prefix_len = iprefix ? strlen (iprefix) : cpp_GCC_INCLUDE_DIR_len;
  
!   path = xmalloc (prefix_len + suffix_len + 1);
    memcpy (path, prefix, prefix_len);
    memcpy (path + prefix_len, suffix, suffix_len);
    path[prefix_len + suffix_len] = '\0';
  
!   add_path (path, chain, 0);
  }
  
  /* Handle -D, -U, -A, -imacros, and the first -include.  */
--- 1273,1284 ----
    prefix     = iprefix ? iprefix : cpp_GCC_INCLUDE_DIR;
    prefix_len = iprefix ? strlen (iprefix) : cpp_GCC_INCLUDE_DIR_len;
  
!   path = (char *) xmalloc (prefix_len + suffix_len + 1);
    memcpy (path, prefix, prefix_len);
    memcpy (path + prefix_len, suffix, suffix_len);
    path[prefix_len + suffix_len] = '\0';
  
!   add_path (path, chain, 0, false);
  }
  
  /* Handle -D, -U, -A, -imacros, and the first -include.  */
*************** push_command_line_include (void)
*** 1469,1475 ****
      {
        struct deferred_opt *opt = &deferred_opts[include_cursor++];
  
!       if (! cpp_opts->preprocessed && opt->code == OPT_include
  	  && cpp_push_include (parse_in, opt->arg))
  	return;
      }
--- 1349,1355 ----
      {
        struct deferred_opt *opt = &deferred_opts[include_cursor++];
  
!       if (!cpp_opts->preprocessed && opt->code == OPT_include
  	  && cpp_push_include (parse_in, opt->arg))
  	return;
      }
*************** push_command_line_include (void)
*** 1480,1498 ****
        /* -Wunused-macros should only warn about macros defined hereafter.  */
        cpp_opts->warn_unused_macros = warn_unused_macros;
        /* Restore the line map from <command line>.  */
!       if (! cpp_opts->preprocessed)
! 	cpp_change_file (parse_in, LC_RENAME, main_input_filename);
  
        /* Set this here so the client can change the option if it wishes,
  	 and after stacking the main file so we don't trace the main file.  */
!       cpp_get_line_maps (parse_in)->trace_includes
! 	= cpp_opts->print_include_names;
      }
  }
  
  /* File change callback.  Has to handle -include files.  */
  static void
! cb_file_change (cpp_reader *pfile ATTRIBUTE_UNUSED,
  		const struct line_map *new_map)
  {
    if (flag_preprocess_only)
--- 1360,1377 ----
        /* -Wunused-macros should only warn about macros defined hereafter.  */
        cpp_opts->warn_unused_macros = warn_unused_macros;
        /* Restore the line map from <command line>.  */
!       if (!cpp_opts->preprocessed)
! 	cpp_change_file (parse_in, LC_RENAME, this_input_filename);
  
        /* Set this here so the client can change the option if it wishes,
  	 and after stacking the main file so we don't trace the main file.  */
!       line_table.trace_includes = cpp_opts->print_include_names;
      }
  }
  
  /* File change callback.  Has to handle -include files.  */
  static void
! cb_file_change (cpp_reader * ARG_UNUSED (pfile),
  		const struct line_map *new_map)
  {
    if (flag_preprocess_only)
*************** cb_file_change (cpp_reader *pfile ATTRIB
*** 1505,1513 ****
  }
  
  void
! cb_dir_change (cpp_reader *pfile ATTRIBUTE_UNUSED, const char *dir)
  {
!   if (! set_src_pwd (dir))
      warning ("too late for # directive to set debug directory");
  }
  
--- 1384,1392 ----
  }
  
  void
! cb_dir_change (cpp_reader * ARG_UNUSED (pfile), const char *dir)
  {
!   if (!set_src_pwd (dir))
      warning ("too late for # directive to set debug directory");
  }
  
*************** set_std_c89 (int c94, int iso)
*** 1523,1529 ****
    flag_no_nonansi_builtin = iso;
    flag_isoc94 = c94;
    flag_isoc99 = 0;
-   flag_writable_strings = 0;
  }
  
  /* Set the C 99 standard (without GNU extensions if ISO).  */
--- 1402,1407 ----
*************** set_std_c99 (int iso)
*** 1536,1542 ****
    flag_iso = iso;
    flag_isoc99 = 1;
    flag_isoc94 = 1;
-   flag_writable_strings = 0;
  }
  
  /* Set the C++ 98 standard (without GNU extensions if ISO).  */
--- 1414,1419 ----
diff -Nrcpad gcc-3.4.3/gcc/c-parse.c gcc-4.0.0/gcc/c-parse.c
*** gcc-3.4.3/gcc/c-parse.c	Fri Nov  5 04:15:34 2004
--- gcc-4.0.0/gcc/c-parse.c	Thu Apr 21 07:06:19 2005
***************
*** 9,80 ****
  # define	STATIC	260
  # define	TYPESPEC	261
  # define	TYPE_QUAL	262
! # define	CONSTANT	263
! # define	STRING	264
! # define	ELLIPSIS	265
! # define	SIZEOF	266
! # define	ENUM	267
! # define	STRUCT	268
! # define	UNION	269
! # define	IF	270
! # define	ELSE	271
! # define	WHILE	272
! # define	DO	273
! # define	FOR	274
! # define	SWITCH	275
! # define	CASE	276
! # define	DEFAULT	277
! # define	BREAK	278
! # define	CONTINUE	279
! # define	RETURN	280
! # define	GOTO	281
! # define	ASM_KEYWORD	282
! # define	TYPEOF	283
! # define	ALIGNOF	284
! # define	ATTRIBUTE	285
! # define	EXTENSION	286
! # define	LABEL	287
! # define	REALPART	288
! # define	IMAGPART	289
! # define	VA_ARG	290
! # define	CHOOSE_EXPR	291
! # define	TYPES_COMPATIBLE_P	292
! # define	PTR_VALUE	293
! # define	PTR_BASE	294
! # define	PTR_EXTENT	295
! # define	FUNC_NAME	296
! # define	ASSIGN	297
! # define	OROR	298
! # define	ANDAND	299
! # define	EQCOMPARE	300
! # define	ARITHCOMPARE	301
! # define	LSHIFT	302
! # define	RSHIFT	303
! # define	UNARY	304
! # define	PLUSPLUS	305
! # define	MINUSMINUS	306
! # define	HYPERUNARY	307
! # define	POINTSAT	308
! # define	INTERFACE	309
! # define	IMPLEMENTATION	310
! # define	END	311
! # define	SELECTOR	312
! # define	DEFS	313
! # define	ENCODE	314
! # define	CLASSNAME	315
! # define	PUBLIC	316
! # define	PRIVATE	317
! # define	PROTECTED	318
! # define	PROTOCOL	319
! # define	OBJECTNAME	320
! # define	CLASS	321
! # define	ALIAS	322
! # define	AT_THROW	323
! # define	AT_TRY	324
! # define	AT_CATCH	325
! # define	AT_FINALLY	326
! # define	AT_SYNCHRONIZED	327
! # define	OBJC_STRING	328
  
  #line 34 "c-parse.y"
  
--- 9,78 ----
  # define	STATIC	260
  # define	TYPESPEC	261
  # define	TYPE_QUAL	262
! # define	OBJC_TYPE_QUAL	263
! # define	CONSTANT	264
! # define	STRING	265
! # define	ELLIPSIS	266
! # define	SIZEOF	267
! # define	ENUM	268
! # define	STRUCT	269
! # define	UNION	270
! # define	IF	271
! # define	ELSE	272
! # define	WHILE	273
! # define	DO	274
! # define	FOR	275
! # define	SWITCH	276
! # define	CASE	277
! # define	DEFAULT	278
! # define	BREAK	279
! # define	CONTINUE	280
! # define	RETURN	281
! # define	GOTO	282
! # define	ASM_KEYWORD	283
! # define	TYPEOF	284
! # define	ALIGNOF	285
! # define	ATTRIBUTE	286
! # define	EXTENSION	287
! # define	LABEL	288
! # define	REALPART	289
! # define	IMAGPART	290
! # define	VA_ARG	291
! # define	CHOOSE_EXPR	292
! # define	TYPES_COMPATIBLE_P	293
! # define	FUNC_NAME	294
! # define	OFFSETOF	295
! # define	ASSIGN	296
! # define	OROR	297
! # define	ANDAND	298
! # define	EQCOMPARE	299
! # define	ARITHCOMPARE	300
! # define	LSHIFT	301
! # define	RSHIFT	302
! # define	UNARY	303
! # define	PLUSPLUS	304
! # define	MINUSMINUS	305
! # define	HYPERUNARY	306
! # define	POINTSAT	307
! # define	AT_INTERFACE	308
! # define	AT_IMPLEMENTATION	309
! # define	AT_END	310
! # define	AT_SELECTOR	311
! # define	AT_DEFS	312
! # define	AT_ENCODE	313
! # define	CLASSNAME	314
! # define	AT_PUBLIC	315
! # define	AT_PRIVATE	316
! # define	AT_PROTECTED	317
! # define	AT_PROTOCOL	318
! # define	AT_CLASS	319
! # define	AT_ALIAS	320
! # define	AT_THROW	321
! # define	AT_TRY	322
! # define	AT_CATCH	323
! # define	AT_FINALLY	324
! # define	AT_SYNCHRONIZED	325
! # define	OBJC_STRING	326
  
  #line 34 "c-parse.y"
  
***************
*** 83,88 ****
--- 81,87 ----
  #include "coretypes.h"
  #include "tm.h"
  #include "tree.h"
+ #include "langhooks.h"
  #include "input.h"
  #include "cpplib.h"
  #include "intl.h"
***************
*** 94,102 ****
  #include "output.h"
  #include "toplev.h"
  #include "ggc.h"
  
- 
- /* Like YYERROR but do call yyerror.  */
  #define YYERROR1 { yyerror ("syntax error"); YYERROR; }
  
  /* Like the default stack expander, except (1) use realloc when possible,
--- 93,100 ----
  #include "output.h"
  #include "toplev.h"
  #include "ggc.h"
+ #include "c-common.h"
  
  #define YYERROR1 { yyerror ("syntax error"); YYERROR; }
  
  /* Like the default stack expander, except (1) use realloc when possible,
*************** do {									\
*** 142,166 ****
  
  #line 100 "c-parse.y"
  #ifndef YYSTYPE
! typedef union {long itype; tree ttype; enum tree_code code;
! 	location_t location; } yystype;
  # define YYSTYPE yystype
  # define YYSTYPE_IS_TRIVIAL 1
  #endif
! #line 234 "c-parse.y"
! 
! /* Number of statements (loosely speaking) and compound statements
!    seen so far.  */
! static int stmt_count;
! static int compstmt_count;
! 
! /* Input location of the end of the body of last simple_if;
!    used by the stmt-rule immediately after simple_if returns.  */
! static location_t if_stmt_locus;
! 
  
! /* List of types and structure classes of the current declaration.  */
! static GTY(()) tree current_declspecs;
  static GTY(()) tree prefix_attributes;
  
  /* List of all the attributes applying to the identifier currently being
--- 140,157 ----
  
  #line 100 "c-parse.y"
  #ifndef YYSTYPE
! typedef union {long itype; tree ttype; void *otype; struct c_expr exprtype;
! 	struct c_arg_info *arginfotype; struct c_declarator *dtrtype;
! 	struct c_type_name *typenametype; struct c_parm *parmtype;
! 	struct c_declspecs *dsptype; struct c_typespec tstype;
! 	enum tree_code code; location_t location; } yystype;
  # define YYSTYPE yystype
  # define YYSTYPE_IS_TRIVIAL 1
  #endif
! #line 251 "c-parse.y"
  
! /* Declaration specifiers of the current declaration.  */
! static struct c_declspecs *current_declspecs;
  static GTY(()) tree prefix_attributes;
  
  /* List of all the attributes applying to the identifier currently being
*************** static GTY(()) tree prefix_attributes;
*** 168,193 ****
     just after a comma.  */
  static GTY(()) tree all_prefix_attributes;
  
  /* Stack of saved values of current_declspecs, prefix_attributes and
     all_prefix_attributes.  */
! static GTY(()) tree declspec_stack;
  
  /* PUSH_DECLSPEC_STACK is called from setspecs; POP_DECLSPEC_STACK
     should be called from the productions making use of setspecs.  */
! #define PUSH_DECLSPEC_STACK						 \
!   do {									 \
!     declspec_stack = tree_cons (build_tree_list (prefix_attributes,	 \
! 						 all_prefix_attributes), \
! 				current_declspecs,			 \
! 				declspec_stack);			 \
    } while (0)
  
  #define POP_DECLSPEC_STACK						\
    do {									\
!     current_declspecs = TREE_VALUE (declspec_stack);			\
!     prefix_attributes = TREE_PURPOSE (TREE_PURPOSE (declspec_stack));	\
!     all_prefix_attributes = TREE_VALUE (TREE_PURPOSE (declspec_stack));	\
!     declspec_stack = TREE_CHAIN (declspec_stack);			\
    } while (0)
  
  /* For __extension__, save/restore the warning flags which are
--- 159,202 ----
     just after a comma.  */
  static GTY(()) tree all_prefix_attributes;
  
+ /* Structure to save declaration specifiers.  */
+ struct c_declspec_stack {
+   /* Saved value of current_declspecs.  */
+   struct c_declspecs *current_declspecs;
+   /* Saved value of prefix_attributes.  */
+   tree prefix_attributes;
+   /* Saved value of all_prefix_attributes.  */
+   tree all_prefix_attributes;
+   /* Next level of stack.  */
+   struct c_declspec_stack *next;
+ };
+ 
  /* Stack of saved values of current_declspecs, prefix_attributes and
     all_prefix_attributes.  */
! static struct c_declspec_stack *declspec_stack;
! 
! /* INDIRECT_REF with a TREE_TYPE of the type being queried for offsetof.  */
! static tree offsetof_base;
  
  /* PUSH_DECLSPEC_STACK is called from setspecs; POP_DECLSPEC_STACK
     should be called from the productions making use of setspecs.  */
! #define PUSH_DECLSPEC_STACK						\
!   do {									\
!     struct c_declspec_stack *t = XOBNEW (&parser_obstack,		\
! 					 struct c_declspec_stack);	\
!     t->current_declspecs = current_declspecs;				\
!     t->prefix_attributes = prefix_attributes;				\
!     t->all_prefix_attributes = all_prefix_attributes;			\
!     t->next = declspec_stack;						\
!     declspec_stack = t;							\
    } while (0)
  
  #define POP_DECLSPEC_STACK						\
    do {									\
!     current_declspecs = declspec_stack->current_declspecs;		\
!     prefix_attributes = declspec_stack->prefix_attributes;		\
!     all_prefix_attributes = declspec_stack->all_prefix_attributes;	\
!     declspec_stack = declspec_stack->next;				\
    } while (0)
  
  /* For __extension__, save/restore the warning flags which are
*************** static GTY(()) tree declspec_stack;
*** 209,216 ****
  
  #define OBJC_NEED_RAW_IDENTIFIER(VAL)	/* nothing */
  
- static bool parsing_iso_function_signature;
- 
  /* Tell yyparse how to print a token's value, if yydebug is set.  */
  
  #define YYPRINT(FILE,YYCHAR,YYLVAL) yyprint(FILE,YYCHAR,YYLVAL)
--- 218,223 ----
*************** static inline int _yylex (void);
*** 222,228 ****
  static int  yylex (void);
  static void init_reswords (void);
  
!   /* Initialisation routine for this file.  */
  void
  c_parse_init (void)
  {
--- 229,235 ----
  static int  yylex (void);
  static void init_reswords (void);
  
!   /* Initialization routine for this file.  */
  void
  c_parse_init (void)
  {
*************** c_parse_init (void)
*** 235,246 ****
  
  
  
! #define	YYFINAL		881
  #define	YYFLAG		-32768
! #define	YYNTBASE	97
  
  /* YYTRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */
! #define YYTRANSLATE(x) ((unsigned)(x) <= 328 ? yytranslate[x] : 297)
  
  /* YYTRANSLATE[YYLEX] -- Bison token number corresponding to YYLEX. */
  static const char yytranslate[] =
--- 242,253 ----
  
  
  
! #define	YYFINAL		933
  #define	YYFLAG		-32768
! #define	YYNTBASE	95
  
  /* YYTRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */
! #define YYTRANSLATE(x) ((unsigned)(x) <= 326 ? yytranslate[x] : 303)
  
  /* YYTRANSLATE[YYLEX] -- Bison token number corresponding to YYLEX. */
  static const char yytranslate[] =
*************** static const char yytranslate[] =
*** 248,263 ****
         0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
         2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
         2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
!        2,     2,     2,    93,     2,     2,     2,    60,    51,     2,
!       67,    89,    58,    56,    94,    57,    66,    59,     2,     2,
!        2,     2,     2,     2,     2,     2,     2,     2,    46,    90,
!        2,    44,     2,    45,     2,     2,     2,     2,     2,     2,
         2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
         2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
!        2,    68,     2,    96,    50,     2,     2,     2,     2,     2,
         2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
         2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
!        2,     2,     2,    95,    49,    91,    92,     2,     2,     2,
         2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
         2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
         2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
--- 255,270 ----
         0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
         2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
         2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
!        2,     2,     2,    90,     2,     2,     2,    59,    50,     2,
!       66,    92,    57,    55,    91,    56,    65,    58,     2,     2,
!        2,     2,     2,     2,     2,     2,     2,     2,    45,    87,
!        2,    43,     2,    44,     2,     2,     2,     2,     2,     2,
         2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
         2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
!        2,    67,     2,    94,    49,     2,     2,     2,     2,     2,
         2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
         2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
!        2,     2,     2,    93,    48,    88,    89,     2,     2,     2,
         2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
         2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
         2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
*************** static const char yytranslate[] =
*** 274,517 ****
         6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
        16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
        26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
!       36,    37,    38,    39,    40,    41,    42,    43,    47,    48,
!       52,    53,    54,    55,    61,    62,    63,    64,    65,    69,
        70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
!       80,    81,    82,    83,    84,    85,    86,    87,    88
  };
  
  #if YYDEBUG
  static const short yyprhs[] =
  {
!        0,     0,     1,     3,     4,     7,     8,    12,    14,    16,
!       18,    24,    27,    31,    36,    41,    44,    47,    50,    52,
!       53,    54,    63,    68,    69,    70,    79,    84,    85,    86,
!       94,    98,   100,   102,   104,   106,   108,   110,   112,   114,
!      116,   118,   119,   121,   123,   127,   129,   132,   135,   138,
!      141,   144,   149,   152,   157,   160,   163,   165,   167,   169,
!      171,   176,   178,   182,   186,   190,   194,   198,   202,   206,
!      210,   214,   218,   222,   226,   227,   232,   233,   238,   239,
!      240,   248,   249,   255,   259,   263,   265,   267,   269,   271,
!      272,   280,   284,   288,   292,   296,   301,   308,   317,   324,
!      329,   333,   337,   340,   343,   345,   346,   348,   351,   353,
!      355,   358,   361,   366,   371,   374,   377,   380,   381,   383,
!      388,   393,   397,   401,   404,   407,   409,   412,   415,   418,
!      421,   424,   426,   429,   431,   434,   437,   440,   443,   446,
!      449,   451,   454,   457,   460,   463,   466,   469,   472,   475,
!      478,   481,   484,   487,   490,   493,   496,   499,   501,   504,
!      507,   510,   513,   516,   519,   522,   525,   528,   531,   534,
!      537,   540,   543,   546,   549,   552,   555,   558,   561,   564,
!      567,   570,   573,   576,   579,   582,   585,   588,   591,   594,
!      597,   600,   603,   606,   609,   612,   615,   618,   621,   624,
!      627,   630,   633,   635,   637,   639,   641,   643,   645,   647,
!      649,   651,   653,   655,   657,   659,   661,   663,   665,   667,
!      669,   671,   673,   675,   677,   679,   681,   683,   685,   687,
!      689,   691,   693,   695,   697,   699,   701,   703,   705,   707,
!      709,   711,   713,   715,   717,   719,   721,   723,   725,   727,
!      729,   731,   733,   735,   737,   739,   741,   743,   745,   746,
!      748,   750,   752,   754,   756,   758,   760,   762,   767,   772,
!      774,   779,   781,   786,   787,   792,   793,   800,   804,   805,
!      812,   816,   817,   819,   821,   824,   831,   833,   837,   838,
!      840,   845,   852,   857,   859,   861,   863,   865,   867,   869,
!      871,   872,   877,   879,   880,   883,   885,   889,   893,   896,
!      897,   902,   904,   905,   910,   912,   914,   916,   919,   922,
!      928,   932,   933,   934,   941,   942,   943,   950,   952,   954,
!      959,   963,   966,   970,   972,   974,   976,   980,   983,   985,
!      989,   992,   996,  1000,  1005,  1009,  1014,  1018,  1021,  1023,
!     1025,  1028,  1030,  1033,  1035,  1038,  1039,  1047,  1053,  1054,
!     1062,  1068,  1069,  1078,  1079,  1087,  1090,  1093,  1096,  1097,
!     1099,  1100,  1102,  1104,  1107,  1108,  1112,  1115,  1119,  1122,
!     1126,  1128,  1130,  1133,  1135,  1140,  1142,  1147,  1150,  1155,
!     1159,  1162,  1167,  1171,  1173,  1177,  1179,  1181,  1185,  1186,
!     1190,  1191,  1193,  1194,  1196,  1199,  1201,  1203,  1205,  1209,
!     1212,  1216,  1221,  1225,  1228,  1231,  1233,  1238,  1242,  1247,
!     1253,  1259,  1261,  1263,  1265,  1267,  1269,  1272,  1275,  1278,
!     1281,  1283,  1286,  1289,  1292,  1294,  1297,  1300,  1303,  1306,
!     1308,  1311,  1313,  1315,  1317,  1319,  1322,  1323,  1324,  1325,
!     1326,  1327,  1329,  1331,  1334,  1338,  1340,  1343,  1345,  1347,
!     1353,  1355,  1357,  1360,  1363,  1366,  1369,  1370,  1376,  1377,
!     1382,  1383,  1385,  1388,  1392,  1395,  1398,  1399,  1404,  1406,
!     1410,  1411,  1412,  1420,  1426,  1429,  1430,  1431,  1432,  1433,
!     1446,  1447,  1454,  1457,  1459,  1461,  1464,  1468,  1471,  1474,
!     1477,  1481,  1488,  1497,  1508,  1521,  1525,  1530,  1532,  1536,
!     1542,  1545,  1550,  1551,  1553,  1554,  1556,  1557,  1559,  1561,
!     1565,  1570,  1578,  1580,  1584,  1585,  1589,  1592,  1593,  1594,
!     1601,  1604,  1605,  1607,  1609,  1613,  1615,  1619,  1624,  1629,
!     1633,  1638,  1642,  1647,  1652,  1656,  1661,  1665,  1667,  1668,
!     1672,  1674,  1677,  1679,  1683,  1685,  1689
  };
  static const short yyrhs[] =
  {
!       -1,    98,     0,     0,    99,   101,     0,     0,    98,   100,
!      101,     0,   102,     0,   104,     0,   103,     0,    28,    67,
!      113,    89,    90,     0,   296,   101,     0,   135,   169,    90,
!        0,   155,   135,   169,    90,     0,   154,   135,   168,    90,
!        0,   161,    90,     0,     1,    90,     0,     1,    91,     0,
!       90,     0,     0,     0,   154,   135,   198,   105,   129,   258,
!      106,   247,     0,   154,   135,   198,     1,     0,     0,     0,
!      155,   135,   203,   107,   129,   258,   108,   247,     0,   155,
!      135,   203,     1,     0,     0,     0,   135,   203,   109,   129,
!      258,   110,   247,     0,   135,   203,     1,     0,     3,     0,
!        4,     0,    51,     0,    57,     0,    56,     0,    62,     0,
!       63,     0,    92,     0,    93,     0,   115,     0,     0,   115,
!        0,   121,     0,   115,    94,   121,     0,   127,     0,    58,
!      120,     0,   296,   120,     0,   112,   120,     0,    48,   111,
!        0,   117,   116,     0,   117,    67,   224,    89,     0,   118,
!      116,     0,   118,    67,   224,    89,     0,    34,   120,     0,
!       35,   120,     0,    12,     0,    30,     0,    29,     0,   116,
!        0,    67,   224,    89,   120,     0,   120,     0,   121,    56,
!      121,     0,   121,    57,   121,     0,   121,    58,   121,     0,
!      121,    59,   121,     0,   121,    60,   121,     0,   121,    54,
!      121,     0,   121,    55,   121,     0,   121,    53,   121,     0,
!      121,    52,   121,     0,   121,    51,   121,     0,   121,    49,
!      121,     0,   121,    50,   121,     0,     0,   121,    48,   122,
!      121,     0,     0,   121,    47,   123,   121,     0,     0,     0,
!      121,    45,   124,   113,    46,   125,   121,     0,     0,   121,
!       45,   126,    46,   121,     0,   121,    44,   121,     0,   121,
!       43,   121,     0,     3,     0,     9,     0,    10,     0,    42,
!        0,     0,    67,   224,    89,    95,   128,   184,    91,     0,
!       67,   113,    89,     0,    67,     1,    89,     0,   251,   249,
!       89,     0,   251,     1,    89,     0,   127,    67,   114,    89,
!        0,    36,    67,   121,    94,   224,    89,     0,    37,    67,
!      121,    94,   121,    94,   121,    89,     0,    38,    67,   224,
!       94,   224,    89,     0,   127,    68,   113,    96,     0,   127,
!       66,   111,     0,   127,    65,   111,     0,   127,    62,     0,
!      127,    63,     0,   130,     0,     0,   132,     0,   258,   133,
!        0,   131,     0,   239,     0,   132,   131,     0,   131,   239,
!        0,   156,   135,   168,    90,     0,   157,   135,   169,    90,
!        0,   156,    90,     0,   157,    90,     0,   258,   137,     0,
!        0,   175,     0,   154,   135,   168,    90,     0,   155,   135,
!      169,    90,     0,   154,   135,   192,     0,   155,   135,   195,
!        0,   161,    90,     0,   296,   137,     0,     8,     0,   138,
!        8,     0,   139,     8,     0,   138,   176,     0,   140,     8,
!        0,   141,     8,     0,   176,     0,   140,   176,     0,   163,
!        0,   142,     8,     0,   143,     8,     0,   142,   165,     0,
!      143,   165,     0,   138,   163,     0,   139,   163,     0,   164,
!        0,   142,   176,     0,   142,   166,     0,   143,   166,     0,
!      138,   164,     0,   139,   164,     0,   144,     8,     0,   145,
!        8,     0,   144,   165,     0,   145,   165,     0,   140,   163,
!        0,   141,   163,     0,   144,   176,     0,   144,   166,     0,
!      145,   166,     0,   140,   164,     0,   141,   164,     0,   181,
!        0,   146,     8,     0,   147,     8,     0,   138,   181,     0,
!      139,   181,     0,   146,   181,     0,   147,   181,     0,   146,
!      176,     0,   148,     8,     0,   149,     8,     0,   140,   181,
!        0,   141,   181,     0,   148,   181,     0,   149,   181,     0,
!      148,   176,     0,   150,     8,     0,   151,     8,     0,   150,
!      165,     0,   151,   165,     0,   146,   163,     0,   147,   163,
!        0,   142,   181,     0,   143,   181,     0,   150,   181,     0,
!      151,   181,     0,   150,   176,     0,   150,   166,     0,   151,
!      166,     0,   146,   164,     0,   147,   164,     0,   152,     8,
!        0,   153,     8,     0,   152,   165,     0,   153,   165,     0,
!      148,   163,     0,   149,   163,     0,   144,   181,     0,   145,
!      181,     0,   152,   181,     0,   153,   181,     0,   152,   176,
!        0,   152,   166,     0,   153,   166,     0,   148,   164,     0,
!      149,   164,     0,   142,     0,   143,     0,   144,     0,   145,
!        0,   150,     0,   151,     0,   152,     0,   153,     0,   138,
!        0,   139,     0,   140,     0,   141,     0,   146,     0,   147,
!        0,   148,     0,   149,     0,   142,     0,   143,     0,   150,
!        0,   151,     0,   138,     0,   139,     0,   146,     0,   147,
!        0,   142,     0,   143,     0,   144,     0,   145,     0,   138,
         0,   139,     0,   140,     0,   141,     0,   142,     0,   143,
!        0,   144,     0,   145,     0,   138,     0,   139,     0,   140,
!        0,   141,     0,   138,     0,   139,     0,   140,     0,   141,
!        0,   142,     0,   143,     0,   144,     0,   145,     0,   146,
!        0,   147,     0,   148,     0,   149,     0,   150,     0,   151,
!        0,   152,     0,   153,     0,     0,   159,     0,   165,     0,
!      167,     0,   166,     0,     7,     0,   212,     0,   207,     0,
!        4,     0,   119,    67,   113,    89,     0,   119,    67,   224,
!       89,     0,   171,     0,   168,    94,   136,   171,     0,   173,
!        0,   169,    94,   136,   173,     0,     0,    28,    67,    10,
!       89,     0,     0,   198,   170,   175,    44,   172,   182,     0,
!      198,   170,   175,     0,     0,   203,   170,   175,    44,   174,
!      182,     0,   203,   170,   175,     0,     0,   176,     0,   177,
!        0,   176,   177,     0,    31,    67,    67,   178,    89,    89,
!        0,   179,     0,   178,    94,   179,     0,     0,   180,     0,
!      180,    67,     3,    89,     0,   180,    67,     3,    94,   115,
!       89,     0,   180,    67,   114,    89,     0,   111,     0,   181,
!        0,     7,     0,     8,     0,     6,     0,     5,     0,   121,
!        0,     0,    95,   183,   184,    91,     0,     1,     0,     0,
!      185,   213,     0,   186,     0,   185,    94,   186,     0,   190,
!       44,   188,     0,   191,   188,     0,     0,   111,    46,   187,
!      188,     0,   188,     0,     0,    95,   189,   184,    91,     0,
!      121,     0,     1,     0,   191,     0,   190,   191,     0,    66,
!      111,     0,    68,   121,    11,   121,    96,     0,    68,   121,
!       96,     0,     0,     0,   198,   193,   129,   258,   194,   252,
!        0,     0,     0,   203,   196,   129,   258,   197,   252,     0,
!      199,     0,   203,     0,    67,   175,   199,    89,     0,   199,
!       67,   291,     0,   199,   232,     0,    58,   162,   199,     0,
!        4,     0,   201,     0,   202,     0,   201,    67,   291,     0,
!      201,   232,     0,     4,     0,   202,    67,   291,     0,   202,
!      232,     0,    58,   162,   201,     0,    58,   162,   202,     0,
!       67,   175,   202,    89,     0,   203,    67,   291,     0,    67,
!      175,   203,    89,     0,    58,   162,   203,     0,   203,   232,
!        0,     3,     0,    14,     0,    14,   176,     0,    15,     0,
!       15,   176,     0,    13,     0,    13,   176,     0,     0,   204,
!      111,    95,   208,   215,    91,   175,     0,   204,    95,   215,
!       91,   175,     0,     0,   205,   111,    95,   209,   215,    91,
!      175,     0,   205,    95,   215,    91,   175,     0,     0,   206,
!      111,    95,   210,   222,   214,    91,   175,     0,     0,   206,
!       95,   211,   222,   214,    91,   175,     0,   204,   111,     0,
!      205,   111,     0,   206,   111,     0,     0,    94,     0,     0,
!       94,     0,   216,     0,   216,   217,     0,     0,   216,   217,
!       90,     0,   216,    90,     0,   158,   135,   218,     0,   158,
!      135,     0,   159,   135,   219,     0,   159,     0,     1,     0,
!      296,   217,     0,   220,     0,   218,    94,   136,   220,     0,
!      221,     0,   219,    94,   136,   221,     0,   198,   175,     0,
!      198,    46,   121,   175,     0,    46,   121,   175,     0,   203,
!      175,     0,   203,    46,   121,   175,     0,    46,   121,   175,
!        0,   223,     0,   222,    94,   223,     0,     1,     0,   111,
!        0,   111,    44,   121,     0,     0,   160,   225,   226,     0,
!        0,   228,     0,     0,   228,     0,   229,   176,     0,   230,
!        0,   229,     0,   231,     0,    58,   162,   229,     0,    58,
!      162,     0,    58,   162,   230,     0,    67,   175,   228,    89,
!        0,   231,    67,   281,     0,   231,   232,     0,    67,   281,
!        0,   232,     0,    68,   162,   121,    96,     0,    68,   162,
!       96,     0,    68,   162,    58,    96,     0,    68,     6,   162,
!      121,    96,     0,    68,   159,     6,   121,    96,     0,   234,
!        0,   235,     0,   236,     0,   237,     0,   261,     0,   234,
!      261,     0,   235,   261,     0,   236,   261,     0,   237,   261,
!        0,   134,     0,   234,   134,     0,   235,   134,     0,   237,
!      134,     0,   262,     0,   234,   262,     0,   235,   262,     0,
!      236,   262,     0,   237,   262,     0,   239,     0,   238,   239,
!        0,   234,     0,   235,     0,   236,     0,   237,     0,     1,
!       90,     0,     0,     0,     0,     0,     0,   245,     0,   246,
!        0,   245,   246,     0,    33,   295,    90,     0,   252,     0,
!        1,   252,     0,    95,     0,    91,     0,   240,   244,   250,
!       91,   241,     0,   233,     0,     1,     0,    67,    95,     0,
!      248,   249,     0,   254,   260,     0,   254,     1,     0,     0,
!       16,   255,    67,   113,    89,     0,     0,    19,   257,   260,
!       18,     0,     0,   261,     0,   262,   259,     0,   242,   259,
!      243,     0,   258,   273,     0,   258,   274,     0,     0,   253,
!       17,   264,   260,     0,   253,     0,   253,    17,     1,     0,
!        0,     0,    18,   265,    67,   113,    89,   266,   260,     0,
!      256,    67,   113,    89,    90,     0,   256,     1,     0,     0,
!        0,     0,     0,    20,   267,    67,   272,   268,   276,    90,
!      269,   276,    89,   270,   260,     0,     0,    21,    67,   113,
!       89,   271,   260,     0,   276,    90,     0,   137,     0,   252,
!        0,   113,    90,     0,   242,   263,   243,     0,    24,    90,
!        0,    25,    90,     0,    26,    90,     0,    26,   113,    90,
!        0,    28,   275,    67,   113,    89,    90,     0,    28,   275,
!       67,   113,    46,   277,    89,    90,     0,    28,   275,    67,
!      113,    46,   277,    46,   277,    89,    90,     0,    28,   275,
!       67,   113,    46,   277,    46,   277,    46,   280,    89,    90,
!        0,    27,   111,    90,     0,    27,    58,   113,    90,     0,
!       90,     0,    22,   121,    46,     0,    22,   121,    11,   121,
!       46,     0,    23,    46,     0,   111,   258,    46,   175,     0,
!        0,     8,     0,     0,   113,     0,     0,   278,     0,   279,
!        0,   278,    94,   279,     0,    10,    67,   113,    89,     0,
!       68,   111,    96,    10,    67,   113,    89,     0,    10,     0,
!      280,    94,    10,     0,     0,   175,   282,   283,     0,   286,
!       89,     0,     0,     0,   287,    90,   284,   175,   285,   283,
!        0,     1,    89,     0,     0,    11,     0,   287,     0,   287,
!       94,    11,     0,   289,     0,   287,    94,   288,     0,   154,
!      135,   200,   175,     0,   154,   135,   203,   175,     0,   154,
!      135,   227,     0,   155,   135,   203,   175,     0,   155,   135,
!      227,     0,   156,   290,   200,   175,     0,   156,   290,   203,
!      175,     0,   156,   290,   227,     0,   157,   290,   203,   175,
!        0,   157,   290,   227,     0,   135,     0,     0,   175,   292,
!      293,     0,   283,     0,   294,    89,     0,     3,     0,   294,
!       94,     3,     0,   111,     0,   295,    94,   111,     0,    32,
!        0
  };
  
  #endif
--- 281,534 ----
         6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
        16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
        26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
!       36,    37,    38,    39,    40,    41,    42,    46,    47,    51,
!       52,    53,    54,    60,    61,    62,    63,    64,    68,    69,
        70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
!       80,    81,    82,    83,    84,    85,    86
  };
  
  #if YYDEBUG
  static const short yyprhs[] =
  {
!        0,     0,     1,     3,     4,     8,     9,    14,    16,    18,
!       20,    23,    24,    28,    33,    38,    41,    44,    47,    49,
!       50,    51,    60,    65,    66,    67,    76,    81,    82,    83,
!       91,    95,    97,    99,   101,   103,   105,   107,   109,   111,
!      113,   115,   119,   120,   122,   124,   128,   130,   133,   136,
!      139,   142,   145,   150,   153,   158,   161,   164,   166,   168,
!      170,   172,   177,   179,   183,   187,   191,   195,   199,   203,
!      207,   211,   215,   219,   223,   227,   228,   233,   234,   239,
!      240,   241,   249,   250,   256,   260,   264,   266,   268,   270,
!      272,   273,   281,   285,   289,   293,   297,   302,   309,   310,
!      318,   323,   332,   337,   344,   349,   354,   358,   362,   365,
!      368,   370,   374,   379,   380,   382,   385,   387,   389,   392,
!      395,   400,   405,   408,   411,   414,   415,   417,   422,   427,
!      431,   435,   438,   441,   443,   446,   449,   452,   455,   458,
!      460,   463,   465,   468,   471,   474,   477,   480,   483,   485,
!      488,   491,   494,   497,   500,   503,   506,   509,   512,   515,
!      518,   521,   524,   527,   530,   533,   535,   538,   541,   544,
!      547,   550,   553,   556,   559,   562,   565,   568,   571,   574,
!      577,   580,   583,   586,   589,   592,   595,   598,   601,   604,
!      607,   610,   613,   616,   619,   622,   625,   628,   631,   634,
!      637,   640,   643,   646,   649,   652,   655,   658,   661,   664,
!      667,   669,   671,   673,   675,   677,   679,   681,   683,   685,
!      687,   689,   691,   693,   695,   697,   699,   701,   703,   705,
!      707,   709,   711,   713,   715,   717,   719,   721,   723,   725,
!      727,   729,   731,   733,   735,   737,   739,   741,   743,   745,
!      747,   749,   751,   753,   755,   757,   759,   761,   763,   765,
!      767,   769,   771,   773,   775,   777,   779,   780,   782,   784,
!      786,   788,   790,   792,   794,   796,   801,   806,   808,   813,
!      815,   820,   821,   828,   832,   833,   840,   844,   845,   847,
!      849,   852,   861,   865,   867,   871,   872,   874,   879,   886,
!      891,   893,   895,   897,   899,   901,   903,   905,   906,   911,
!      913,   914,   917,   919,   923,   927,   930,   931,   936,   938,
!      939,   944,   946,   948,   950,   953,   956,   958,   964,   968,
!      969,   970,   977,   978,   979,   986,   988,   990,   995,   999,
!     1002,  1006,  1008,  1010,  1012,  1016,  1019,  1021,  1025,  1028,
!     1032,  1036,  1041,  1045,  1050,  1054,  1057,  1059,  1061,  1064,
!     1066,  1069,  1071,  1074,  1075,  1083,  1089,  1090,  1098,  1104,
!     1105,  1114,  1115,  1123,  1126,  1129,  1132,  1133,  1135,  1136,
!     1138,  1140,  1143,  1144,  1148,  1151,  1155,  1158,  1162,  1164,
!     1166,  1169,  1171,  1176,  1178,  1183,  1186,  1191,  1195,  1198,
!     1203,  1207,  1209,  1213,  1215,  1217,  1221,  1222,  1226,  1227,
!     1229,  1230,  1232,  1235,  1237,  1239,  1241,  1245,  1248,  1252,
!     1257,  1261,  1264,  1267,  1269,  1274,  1278,  1283,  1289,  1295,
!     1297,  1299,  1301,  1303,  1305,  1308,  1311,  1314,  1317,  1319,
!     1322,  1325,  1328,  1330,  1333,  1336,  1339,  1342,  1344,  1347,
!     1349,  1351,  1353,  1355,  1358,  1359,  1360,  1362,  1364,  1367,
!     1371,  1373,  1376,  1378,  1380,  1384,  1386,  1388,  1391,  1394,
!     1395,  1396,  1399,  1403,  1406,  1409,  1412,  1416,  1420,  1422,
!     1432,  1442,  1450,  1458,  1459,  1460,  1470,  1471,  1472,  1486,
!     1487,  1489,  1492,  1494,  1497,  1499,  1512,  1513,  1522,  1525,
!     1527,  1529,  1531,  1533,  1535,  1538,  1541,  1544,  1548,  1550,
!     1554,  1559,  1561,  1563,  1565,  1569,  1575,  1578,  1583,  1590,
!     1591,  1593,  1596,  1601,  1610,  1612,  1616,  1622,  1630,  1631,
!     1633,  1634,  1636,  1638,  1642,  1649,  1659,  1661,  1665,  1667,
!     1668,  1669,  1670,  1674,  1677,  1678,  1679,  1686,  1689,  1690,
!     1692,  1694,  1698,  1700,  1704,  1709,  1714,  1718,  1723,  1727,
!     1732,  1737,  1741,  1746,  1750,  1752,  1753,  1757,  1759,  1762,
!     1764,  1768,  1770,  1774
  };
  static const short yyrhs[] =
  {
!       -1,    96,     0,     0,   100,    97,    99,     0,     0,    96,
!      100,    98,    99,     0,   102,     0,   101,     0,   276,     0,
!      302,    99,     0,     0,   134,   168,    87,     0,   154,   134,
!      168,    87,     0,   153,   134,   167,    87,     0,   160,    87,
!        0,     1,    87,     0,     1,    88,     0,    87,     0,     0,
!        0,   153,   134,   197,   103,   129,   249,   104,   243,     0,
!      153,   134,   197,     1,     0,     0,     0,   154,   134,   202,
!      105,   129,   249,   106,   243,     0,   154,   134,   202,     1,
!        0,     0,     0,   134,   202,   107,   129,   249,   108,   243,
!        0,   134,   202,     1,     0,     3,     0,     4,     0,    50,
!        0,    56,     0,    55,     0,    61,     0,    62,     0,    89,
!        0,    90,     0,   119,     0,   111,    91,   119,     0,     0,
!      113,     0,   119,     0,   113,    91,   119,     0,   125,     0,
!       57,   118,     0,   302,   118,     0,   110,   118,     0,    47,
!      109,     0,   115,   114,     0,   115,    66,   223,    92,     0,
!      116,   114,     0,   116,    66,   223,    92,     0,    35,   118,
!        0,    36,   118,     0,    13,     0,    31,     0,    30,     0,
!      114,     0,    66,   223,    92,   118,     0,   118,     0,   119,
!       55,   119,     0,   119,    56,   119,     0,   119,    57,   119,
!        0,   119,    58,   119,     0,   119,    59,   119,     0,   119,
!       53,   119,     0,   119,    54,   119,     0,   119,    52,   119,
!        0,   119,    51,   119,     0,   119,    50,   119,     0,   119,
!       48,   119,     0,   119,    49,   119,     0,     0,   119,    47,
!      120,   119,     0,     0,   119,    46,   121,   119,     0,     0,
!        0,   119,    44,   122,   111,    45,   123,   119,     0,     0,
!      119,    44,   124,    45,   119,     0,   119,    43,   119,     0,
!      119,    42,   119,     0,     3,     0,    10,     0,    11,     0,
!       40,     0,     0,    66,   223,    92,    93,   126,   182,    88,
!        0,    66,   111,    92,     0,    66,     1,    92,     0,   247,
!      245,    92,     0,   247,     1,    92,     0,   125,    66,   112,
!       92,     0,    37,    66,   119,    91,   223,    92,     0,     0,
!       41,    66,   223,    91,   127,   128,    92,     0,    41,    66,
!        1,    92,     0,    38,    66,   119,    91,   119,    91,   119,
!       92,     0,    38,    66,     1,    92,     0,    39,    66,   223,
!       91,   223,    92,     0,    39,    66,     1,    92,     0,   125,
!       67,   111,    94,     0,   125,    65,   109,     0,   125,    64,
!      109,     0,   125,    61,     0,   125,    62,     0,   109,     0,
!      128,    65,   109,     0,   128,    67,   111,    94,     0,     0,
!      131,     0,   249,   132,     0,   130,     0,   238,     0,   131,
!      130,     0,   130,   238,     0,   155,   134,   167,    87,     0,
!      156,   134,   168,    87,     0,   155,    87,     0,   156,    87,
!        0,   249,   136,     0,     0,   173,     0,   153,   134,   167,
!       87,     0,   154,   134,   168,    87,     0,   153,   134,   191,
!        0,   154,   134,   194,     0,   160,    87,     0,   302,   136,
!        0,     8,     0,   137,     8,     0,   138,     8,     0,   137,
!      174,     0,   139,     8,     0,   140,     8,     0,   174,     0,
!      139,   174,     0,   162,     0,   141,     8,     0,   142,     8,
!        0,   141,   164,     0,   142,   164,     0,   137,   162,     0,
!      138,   162,     0,   163,     0,   141,   174,     0,   141,   165,
!        0,   142,   165,     0,   137,   163,     0,   138,   163,     0,
!      143,     8,     0,   144,     8,     0,   143,   164,     0,   144,
!      164,     0,   139,   162,     0,   140,   162,     0,   143,   174,
!        0,   143,   165,     0,   144,   165,     0,   139,   163,     0,
!      140,   163,     0,   179,     0,   145,     8,     0,   146,     8,
!        0,   137,   179,     0,   138,   179,     0,   145,   179,     0,
!      146,   179,     0,   145,   174,     0,   147,     8,     0,   148,
!        8,     0,   139,   179,     0,   140,   179,     0,   147,   179,
!        0,   148,   179,     0,   147,   174,     0,   149,     8,     0,
!      150,     8,     0,   149,   164,     0,   150,   164,     0,   145,
!      162,     0,   146,   162,     0,   141,   179,     0,   142,   179,
!        0,   149,   179,     0,   150,   179,     0,   149,   174,     0,
!      149,   165,     0,   150,   165,     0,   145,   163,     0,   146,
!      163,     0,   151,     8,     0,   152,     8,     0,   151,   164,
!        0,   152,   164,     0,   147,   162,     0,   148,   162,     0,
!      143,   179,     0,   144,   179,     0,   151,   179,     0,   152,
!      179,     0,   151,   174,     0,   151,   165,     0,   152,   165,
!        0,   147,   163,     0,   148,   163,     0,   141,     0,   142,
!        0,   143,     0,   144,     0,   149,     0,   150,     0,   151,
!        0,   152,     0,   137,     0,   138,     0,   139,     0,   140,
!        0,   145,     0,   146,     0,   147,     0,   148,     0,   141,
!        0,   142,     0,   149,     0,   150,     0,   137,     0,   138,
!        0,   145,     0,   146,     0,   141,     0,   142,     0,   143,
!        0,   144,     0,   137,     0,   138,     0,   139,     0,   140,
!        0,   141,     0,   142,     0,   143,     0,   144,     0,   137,
!        0,   138,     0,   139,     0,   140,     0,   137,     0,   138,
         0,   139,     0,   140,     0,   141,     0,   142,     0,   143,
!        0,   144,     0,   145,     0,   146,     0,   147,     0,   148,
!        0,   149,     0,   150,     0,   151,     0,   152,     0,     0,
!      158,     0,   164,     0,   166,     0,   165,     0,     7,     0,
!      211,     0,   206,     0,     4,     0,   117,    66,   111,    92,
!        0,   117,    66,   223,    92,     0,   169,     0,   167,    91,
!      135,   169,     0,   171,     0,   168,    91,   135,   171,     0,
!        0,   197,   275,   173,    43,   170,   180,     0,   197,   275,
!      173,     0,     0,   202,   275,   173,    43,   172,   180,     0,
!      202,   275,   173,     0,     0,   174,     0,   175,     0,   174,
!      175,     0,    32,   285,    66,    66,   176,    92,    92,   286,
!        0,    32,     1,   286,     0,   177,     0,   176,    91,   177,
!        0,     0,   178,     0,   178,    66,     3,    92,     0,   178,
!       66,     3,    91,   113,    92,     0,   178,    66,   112,    92,
!        0,   109,     0,   179,     0,     7,     0,     8,     0,     6,
!        0,     5,     0,   119,     0,     0,    93,   181,   182,    88,
!        0,     1,     0,     0,   183,   212,     0,   184,     0,   183,
!       91,   184,     0,   188,    43,   186,     0,   190,   186,     0,
!        0,   109,    45,   185,   186,     0,   186,     0,     0,    93,
!      187,   182,    88,     0,   119,     0,     1,     0,   189,     0,
!      188,   189,     0,    65,   109,     0,   190,     0,    67,   119,
!       12,   119,    94,     0,    67,   119,    94,     0,     0,     0,
!      197,   192,   129,   249,   193,   248,     0,     0,     0,   202,
!      195,   129,   249,   196,   248,     0,   198,     0,   202,     0,
!       66,   173,   198,    92,     0,   198,    66,   297,     0,   198,
!      231,     0,    57,   161,   198,     0,     4,     0,   200,     0,
!      201,     0,   200,    66,   297,     0,   200,   231,     0,     4,
!        0,   201,    66,   297,     0,   201,   231,     0,    57,   161,
!      200,     0,    57,   161,   201,     0,    66,   173,   201,    92,
!        0,   202,    66,   297,     0,    66,   173,   202,    92,     0,
!       57,   161,   202,     0,   202,   231,     0,     3,     0,    15,
!        0,    15,   174,     0,    16,     0,    16,   174,     0,    14,
!        0,    14,   174,     0,     0,   203,   109,    93,   207,   214,
!       88,   173,     0,   203,    93,   214,    88,   173,     0,     0,
!      204,   109,    93,   208,   214,    88,   173,     0,   204,    93,
!      214,    88,   173,     0,     0,   205,   109,    93,   209,   221,
!      213,    88,   173,     0,     0,   205,    93,   210,   221,   213,
!       88,   173,     0,   203,   109,     0,   204,   109,     0,   205,
!      109,     0,     0,    91,     0,     0,    91,     0,   215,     0,
!      215,   216,     0,     0,   215,   216,    87,     0,   215,    87,
!        0,   157,   134,   217,     0,   157,   134,     0,   158,   134,
!      218,     0,   158,     0,     1,     0,   302,   216,     0,   219,
!        0,   217,    91,   135,   219,     0,   220,     0,   218,    91,
!      135,   220,     0,   197,   173,     0,   197,    45,   119,   173,
!        0,    45,   119,   173,     0,   202,   173,     0,   202,    45,
!      119,   173,     0,    45,   119,   173,     0,   222,     0,   221,
!       91,   222,     0,     1,     0,   109,     0,   109,    43,   119,
!        0,     0,   159,   224,   225,     0,     0,   227,     0,     0,
!      227,     0,   228,   174,     0,   229,     0,   228,     0,   230,
!        0,    57,   161,   228,     0,    57,   161,     0,    57,   161,
!      229,     0,    66,   173,   227,    92,     0,   230,    66,   287,
!        0,   230,   231,     0,    66,   287,     0,   231,     0,    67,
!      161,   119,    94,     0,    67,   161,    94,     0,    67,   161,
!       57,    94,     0,    67,     6,   161,   119,    94,     0,    67,
!      158,     6,   119,    94,     0,   233,     0,   234,     0,   235,
!        0,   236,     0,   252,     0,   233,   252,     0,   234,   252,
!        0,   235,   252,     0,   236,   252,     0,   133,     0,   233,
!      133,     0,   234,   133,     0,   236,   133,     0,   253,     0,
!      233,   253,     0,   234,   253,     0,   235,   253,     0,   236,
!      253,     0,   238,     0,   237,   238,     0,   233,     0,   234,
!        0,   235,     0,   236,     0,     1,    87,     0,     0,     0,
!      241,     0,   242,     0,   241,   242,     0,    34,   301,    87,
!        0,   248,     0,     1,   248,     0,    93,     0,    88,     0,
!      240,   246,    88,     0,   232,     0,     1,     0,    66,    93,
!        0,   244,   245,     0,     0,     0,   250,   253,     0,   239,
!      250,   252,     0,   249,   272,     0,   249,   273,     0,   249,
!      111,     0,   239,   250,   257,     0,   239,   250,    87,     0,
!      251,     0,    17,   239,   249,    66,   254,    92,   255,    18,
!      256,     0,    17,   239,   249,    66,   254,    92,   256,    18,
!      256,     0,    17,   239,   249,    66,   254,    92,   255,     0,
!       17,   239,   249,    66,   254,    92,   256,     0,     0,     0,
!       19,   239,   249,    66,   254,    92,   258,   259,   251,     0,
!        0,     0,    20,   239,   249,   258,   259,   251,    19,   262,
!      263,    66,   254,    92,    87,     0,     0,   111,     0,   264,
!       87,     0,   136,     0,   249,   264,     0,   264,     0,    21,
!      239,    66,   265,   249,   266,    87,   267,    92,   258,   259,
!      251,     0,     0,    22,   239,    66,   111,    92,   270,   258,
!      251,     0,   111,    87,     0,   257,     0,   260,     0,   261,
!        0,   268,     0,   269,     0,    25,    87,     0,    26,    87,
!        0,    27,    87,     0,    27,   111,    87,     0,   277,     0,
!       28,   109,    87,     0,    28,    57,   111,    87,     0,    87,
!        0,   248,     0,   271,     0,    23,   119,    45,     0,    23,
!      119,    12,   119,    45,     0,    24,    45,     0,   109,   249,
!       45,   173,     0,    29,   285,    66,   284,    92,   286,     0,
!        0,   274,     0,   274,    87,     0,    29,     1,   286,    87,
!        0,    29,   279,   285,    66,   278,    92,   286,    87,     0,
!      284,     0,   284,    45,   280,     0,   284,    45,   280,    45,
!      280,     0,   284,    45,   280,    45,   280,    45,   283,     0,
!        0,     8,     0,     0,   281,     0,   282,     0,   281,    91,
!      282,     0,   284,   286,    66,   111,    92,   285,     0,    67,
!      109,    94,   284,   286,    66,   111,    92,   285,     0,   284,
!        0,   283,    91,   284,     0,    11,     0,     0,     0,     0,
!      173,   288,   289,     0,   292,    92,     0,     0,     0,   293,
!       87,   290,   173,   291,   289,     0,     1,    92,     0,     0,
!       12,     0,   293,     0,   293,    91,    12,     0,   295,     0,
!      293,    91,   294,     0,   153,   134,   199,   173,     0,   153,
!      134,   202,   173,     0,   153,   134,   226,     0,   154,   134,
!      202,   173,     0,   154,   134,   226,     0,   155,   296,   199,
!      173,     0,   155,   296,   202,   173,     0,   155,   296,   226,
!        0,   156,   296,   202,   173,     0,   156,   296,   226,     0,
!      134,     0,     0,   173,   298,   299,     0,   289,     0,   300,
!       92,     0,     3,     0,   300,    91,     3,     0,   109,     0,
!      301,    91,   109,     0,    33,     0
  };
  
  #endif
*************** static const short yyrhs[] =
*** 520,581 ****
  /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
  static const short yyrline[] =
  {
!        0,   318,   322,   329,   329,   331,   331,   334,   339,   341,
!      342,   350,   354,   362,   364,   366,   368,   369,   370,   375,
!      375,   375,   387,   389,   389,   389,   400,   402,   402,   402,
!      413,   417,   419,   422,   424,   426,   431,   433,   435,   437,
!      441,   445,   448,   451,   454,   458,   460,   463,   466,   470,
!      472,   478,   481,   484,   487,   489,   493,   497,   501,   505,
!      507,   511,   513,   515,   517,   519,   521,   523,   525,   527,
!      529,   531,   533,   535,   537,   537,   544,   544,   551,   551,
!      551,   561,   561,   572,   579,   590,   597,   598,   599,   601,
!      601,   614,   619,   621,   635,   641,   643,   646,   656,   666,
!      668,   672,   678,   680,   684,   691,   702,   712,   717,   719,
!      720,   721,   728,   731,   733,   736,   744,   753,   763,   768,
!      771,   773,   775,   777,   779,   835,   839,   842,   847,   853,
!      857,   862,   866,   871,   875,   878,   881,   884,   887,   890,
!      895,   899,   902,   905,   908,   911,   916,   920,   923,   926,
!      929,   932,   937,   941,   944,   947,   950,   955,   959,   962,
!      965,   971,   977,   983,   991,   997,  1001,  1004,  1010,  1016,
!     1022,  1030,  1036,  1040,  1043,  1046,  1049,  1052,  1055,  1061,
!     1067,  1073,  1081,  1085,  1088,  1091,  1094,  1099,  1103,  1106,
!     1109,  1112,  1115,  1118,  1124,  1130,  1136,  1144,  1148,  1151,
!     1154,  1157,  1163,  1165,  1166,  1167,  1168,  1169,  1170,  1171,
!     1174,  1176,  1177,  1178,  1179,  1180,  1181,  1182,  1185,  1187,
!     1188,  1189,  1192,  1194,  1195,  1196,  1199,  1201,  1202,  1203,
!     1206,  1208,  1209,  1210,  1213,  1215,  1216,  1217,  1218,  1219,
!     1220,  1221,  1224,  1226,  1227,  1228,  1229,  1230,  1231,  1232,
!     1233,  1234,  1235,  1236,  1237,  1238,  1239,  1240,  1244,  1247,
!     1272,  1274,  1277,  1281,  1284,  1287,  1291,  1296,  1302,  1308,
!     1310,  1313,  1315,  1318,  1321,  1325,  1325,  1334,  1341,  1341,
!     1350,  1357,  1360,  1364,  1367,  1371,  1376,  1379,  1383,  1386,
!     1388,  1390,  1392,  1399,  1401,  1402,  1403,  1406,  1408,  1413,
!     1415,  1415,  1419,  1424,  1428,  1431,  1433,  1438,  1442,  1445,
!     1445,  1451,  1454,  1454,  1459,  1461,  1464,  1466,  1469,  1472,
!     1476,  1480,  1480,  1480,  1511,  1511,  1511,  1545,  1547,  1552,
!     1555,  1560,  1562,  1564,  1571,  1573,  1576,  1582,  1584,  1587,
!     1593,  1595,  1597,  1599,  1606,  1612,  1614,  1616,  1618,  1621,
!     1624,  1628,  1631,  1635,  1638,  1648,  1648,  1656,  1660,  1660,
!     1665,  1669,  1669,  1674,  1674,  1681,  1684,  1686,  1694,  1696,
!     1699,  1701,  1718,  1721,  1726,  1728,  1730,  1735,  1739,  1749,
!     1752,  1757,  1759,  1764,  1766,  1770,  1772,  1776,  1781,  1785,
!     1791,  1796,  1800,  1809,  1811,  1816,  1821,  1824,  1828,  1828,
!     1836,  1839,  1842,  1847,  1851,  1857,  1859,  1862,  1864,  1868,
!     1871,  1875,  1878,  1880,  1882,  1884,  1890,  1893,  1895,  1897,
!     1900,  1910,  1912,  1913,  1917,  1920,  1922,  1923,  1924,  1925,
!     1928,  1930,  1936,  1937,  1940,  1942,  1943,  1944,  1945,  1948,
!     1950,  1953,  1955,  1956,  1957,  1960,  1963,  1970,  1977,  1993,
!     2008,  2010,  2015,  2017,  2020,  2034,  2037,  2040,  2044,  2046,
!     2053,  2055,  2058,  2076,  2083,  2089,  2092,  2092,  2113,  2113,
!     2136,  2142,  2144,  2148,  2154,  2168,  2177,  2177,  2186,  2198,
!     2208,  2208,  2208,  2220,  2223,  2225,  2225,  2225,  2225,  2225,
!     2242,  2242,  2251,  2254,  2259,  2262,  2265,  2269,  2278,  2287,
!     2290,  2293,  2297,  2301,  2306,  2310,  2322,  2328,  2336,  2339,
!     2342,  2345,  2360,  2363,  2367,  2370,  2375,  2377,  2380,  2382,
!     2386,  2389,  2395,  2398,  2407,  2407,  2416,  2418,  2418,  2418,
!     2425,  2431,  2433,  2444,  2448,  2454,  2457,  2463,  2469,  2474,
!     2477,  2483,  2490,  2496,  2501,  2504,  2510,  2515,  2524,  2524,
!     2533,  2535,  2552,  2555,  2560,  2563,  2567
  };
  #endif
  
--- 537,600 ----
  /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
  static const short yyrline[] =
  {
!        0,   341,   345,   352,   352,   355,   355,   360,   362,   363,
!      364,   370,   374,   378,   380,   382,   384,   385,   386,   391,
!      391,   391,   403,   405,   405,   405,   416,   418,   418,   418,
!      429,   433,   435,   438,   440,   442,   447,   449,   451,   453,
!      457,   458,   463,   466,   469,   472,   476,   478,   482,   485,
!      490,   493,   500,   504,   509,   514,   517,   522,   526,   530,
!      534,   536,   541,   543,   545,   547,   549,   551,   553,   555,
!      557,   559,   561,   563,   565,   567,   567,   574,   574,   581,
!      581,   581,   593,   593,   605,   609,   616,   624,   626,   628,
!      631,   631,   652,   657,   659,   665,   670,   673,   677,   677,
!      687,   689,   701,   703,   715,   717,   720,   723,   729,   732,
!      741,   744,   746,   750,   752,   758,   763,   765,   766,   767,
!      774,   777,   779,   782,   790,   799,   819,   824,   827,   829,
!      831,   833,   835,   880,   883,   885,   889,   894,   897,   901,
!      904,   908,   911,   913,   915,   917,   919,   921,   925,   928,
!      930,   932,   934,   936,   940,   943,   945,   947,   949,   951,
!      955,   958,   960,   962,   964,   968,   971,   973,   975,   977,
!      979,   981,   985,   990,   993,   995,   997,   999,  1001,  1005,
!     1010,  1013,  1015,  1017,  1019,  1021,  1023,  1025,  1027,  1029,
!     1033,  1036,  1038,  1040,  1042,  1046,  1049,  1051,  1053,  1055,
!     1057,  1059,  1061,  1063,  1065,  1069,  1072,  1074,  1076,  1078,
!     1083,  1085,  1086,  1087,  1088,  1089,  1090,  1091,  1094,  1096,
!     1097,  1098,  1099,  1100,  1101,  1102,  1105,  1107,  1108,  1109,
!     1112,  1114,  1115,  1116,  1119,  1121,  1122,  1123,  1126,  1128,
!     1129,  1130,  1133,  1135,  1136,  1137,  1138,  1139,  1140,  1141,
!     1144,  1146,  1147,  1148,  1149,  1150,  1151,  1152,  1153,  1154,
!     1155,  1156,  1157,  1158,  1159,  1160,  1164,  1167,  1192,  1194,
!     1197,  1201,  1206,  1209,  1213,  1219,  1229,  1240,  1242,  1245,
!     1247,  1250,  1250,  1266,  1274,  1274,  1290,  1298,  1301,  1305,
!     1308,  1312,  1316,  1320,  1323,  1327,  1330,  1332,  1334,  1336,
!     1343,  1345,  1346,  1347,  1350,  1352,  1357,  1360,  1360,  1364,
!     1369,  1373,  1376,  1378,  1383,  1387,  1390,  1390,  1396,  1399,
!     1399,  1404,  1406,  1409,  1411,  1414,  1417,  1420,  1425,  1429,
!     1429,  1429,  1459,  1459,  1459,  1492,  1494,  1499,  1502,  1504,
!     1506,  1508,  1516,  1518,  1521,  1524,  1526,  1530,  1533,  1535,
!     1537,  1539,  1546,  1549,  1551,  1553,  1555,  1559,  1562,  1566,
!     1569,  1573,  1576,  1586,  1586,  1595,  1601,  1601,  1607,  1613,
!     1613,  1619,  1619,  1627,  1630,  1632,  1640,  1642,  1645,  1647,
!     1664,  1667,  1672,  1674,  1676,  1681,  1685,  1693,  1696,  1701,
!     1703,  1708,  1710,  1714,  1716,  1720,  1725,  1729,  1736,  1741,
!     1745,  1755,  1757,  1762,  1767,  1770,  1774,  1774,  1784,  1787,
!     1790,  1794,  1797,  1803,  1805,  1808,  1810,  1814,  1818,  1822,
!     1825,  1827,  1829,  1832,  1839,  1842,  1844,  1846,  1849,  1859,
!     1861,  1862,  1866,  1869,  1871,  1872,  1873,  1874,  1877,  1879,
!     1885,  1886,  1889,  1891,  1892,  1893,  1894,  1897,  1899,  1902,
!     1904,  1905,  1906,  1909,  1913,  1919,  1921,  1926,  1928,  1931,
!     1945,  1948,  1951,  1954,  1955,  1958,  1960,  1963,  1975,  1983,
!     1989,  1991,  1995,  2000,  2018,  2023,  2035,  2040,  2045,  2048,
!     2053,  2057,  2061,  2067,  2071,  2075,  2084,  2084,  2084,  2095,
!     2098,  2102,  2105,  2109,  2121,  2125,  2135,  2135,  2148,  2151,
!     2153,  2155,  2157,  2159,  2161,  2163,  2165,  2167,  2169,  2170,
!     2172,  2174,  2179,  2182,  2189,  2191,  2193,  2195,  2211,  2218,
!     2221,  2225,  2228,  2234,  2240,  2245,  2248,  2251,  2257,  2260,
!     2273,  2275,  2278,  2280,  2284,  2289,  2296,  2299,  2304,  2316,
!     2320,  2330,  2330,  2339,  2341,  2341,  2341,  2348,  2358,  2364,
!     2373,  2375,  2379,  2382,  2388,  2393,  2397,  2400,  2405,  2412,
!     2417,  2421,  2424,  2429,  2434,  2443,  2443,  2452,  2454,  2468,
!     2471,  2476,  2479,  2483
  };
  #endif
  
*************** static const short yyrline[] =
*** 586,612 ****
  static const char *const yytname[] =
  {
    "$", "error", "$undefined.", "IDENTIFIER", "TYPENAME", "SCSPEC", "STATIC", 
!   "TYPESPEC", "TYPE_QUAL", "CONSTANT", "STRING", "ELLIPSIS", "SIZEOF", 
!   "ENUM", "STRUCT", "UNION", "IF", "ELSE", "WHILE", "DO", "FOR", "SWITCH", 
!   "CASE", "DEFAULT", "BREAK", "CONTINUE", "RETURN", "GOTO", "ASM_KEYWORD", 
!   "TYPEOF", "ALIGNOF", "ATTRIBUTE", "EXTENSION", "LABEL", "REALPART", 
!   "IMAGPART", "VA_ARG", "CHOOSE_EXPR", "TYPES_COMPATIBLE_P", "PTR_VALUE", 
!   "PTR_BASE", "PTR_EXTENT", "FUNC_NAME", "ASSIGN", "'='", "'?'", "':'", 
!   "OROR", "ANDAND", "'|'", "'^'", "'&'", "EQCOMPARE", "ARITHCOMPARE", 
!   "LSHIFT", "RSHIFT", "'+'", "'-'", "'*'", "'/'", "'%'", "UNARY", 
!   "PLUSPLUS", "MINUSMINUS", "HYPERUNARY", "POINTSAT", "'.'", "'('", "'['", 
!   "INTERFACE", "IMPLEMENTATION", "END", "SELECTOR", "DEFS", "ENCODE", 
!   "CLASSNAME", "PUBLIC", "PRIVATE", "PROTECTED", "PROTOCOL", "OBJECTNAME", 
!   "CLASS", "ALIAS", "AT_THROW", "AT_TRY", "AT_CATCH", "AT_FINALLY", 
!   "AT_SYNCHRONIZED", "OBJC_STRING", "')'", "';'", "'}'", "'~'", "'!'", 
!   "','", "'{'", "']'", "program", "extdefs", "@1", "@2", "extdef", 
!   "extdef_1", "datadef", "fndef", "@3", "@4", "@5", "@6", "@7", "@8", 
!   "identifier", "unop", "expr", "exprlist", "nonnull_exprlist", 
!   "unary_expr", "sizeof", "alignof", "typeof", "cast_expr", 
!   "expr_no_commas", "@9", "@10", "@11", "@12", "@13", "primary", "@14", 
!   "old_style_parm_decls", "old_style_parm_decls_1", "lineno_datadecl", 
!   "datadecls", "datadecl", "lineno_decl", "setspecs", "maybe_resetattrs", 
!   "decl", "declspecs_nosc_nots_nosa_noea", "declspecs_nosc_nots_nosa_ea", 
    "declspecs_nosc_nots_sa_noea", "declspecs_nosc_nots_sa_ea", 
    "declspecs_nosc_ts_nosa_noea", "declspecs_nosc_ts_nosa_ea", 
    "declspecs_nosc_ts_sa_noea", "declspecs_nosc_ts_sa_ea", 
--- 605,632 ----
  static const char *const yytname[] =
  {
    "$", "error", "$undefined.", "IDENTIFIER", "TYPENAME", "SCSPEC", "STATIC", 
!   "TYPESPEC", "TYPE_QUAL", "OBJC_TYPE_QUAL", "CONSTANT", "STRING", 
!   "ELLIPSIS", "SIZEOF", "ENUM", "STRUCT", "UNION", "IF", "ELSE", "WHILE", 
!   "DO", "FOR", "SWITCH", "CASE", "DEFAULT", "BREAK", "CONTINUE", "RETURN", 
!   "GOTO", "ASM_KEYWORD", "TYPEOF", "ALIGNOF", "ATTRIBUTE", "EXTENSION", 
!   "LABEL", "REALPART", "IMAGPART", "VA_ARG", "CHOOSE_EXPR", 
!   "TYPES_COMPATIBLE_P", "FUNC_NAME", "OFFSETOF", "ASSIGN", "'='", "'?'", 
!   "':'", "OROR", "ANDAND", "'|'", "'^'", "'&'", "EQCOMPARE", 
!   "ARITHCOMPARE", "LSHIFT", "RSHIFT", "'+'", "'-'", "'*'", "'/'", "'%'", 
!   "UNARY", "PLUSPLUS", "MINUSMINUS", "HYPERUNARY", "POINTSAT", "'.'", 
!   "'('", "'['", "AT_INTERFACE", "AT_IMPLEMENTATION", "AT_END", 
!   "AT_SELECTOR", "AT_DEFS", "AT_ENCODE", "CLASSNAME", "AT_PUBLIC", 
!   "AT_PRIVATE", "AT_PROTECTED", "AT_PROTOCOL", "AT_CLASS", "AT_ALIAS", 
!   "AT_THROW", "AT_TRY", "AT_CATCH", "AT_FINALLY", "AT_SYNCHRONIZED", 
!   "OBJC_STRING", "';'", "'}'", "'~'", "'!'", "','", "')'", "'{'", "']'", 
!   "program", "extdefs", "@1", "@2", "extdef", "save_obstack_position", 
!   "datadef", "fndef", "@3", "@4", "@5", "@6", "@7", "@8", "identifier", 
!   "unop", "expr", "exprlist", "nonnull_exprlist", "unary_expr", "sizeof", 
!   "alignof", "typeof", "cast_expr", "expr_no_commas", "@9", "@10", "@11", 
!   "@12", "@13", "primary", "@14", "@15", "offsetof_member_designator", 
!   "old_style_parm_decls", "lineno_datadecl", "datadecls", "datadecl", 
!   "lineno_decl", "setspecs", "maybe_resetattrs", "decl", 
!   "declspecs_nosc_nots_nosa_noea", "declspecs_nosc_nots_nosa_ea", 
    "declspecs_nosc_nots_sa_noea", "declspecs_nosc_nots_sa_ea", 
    "declspecs_nosc_ts_nosa_noea", "declspecs_nosc_ts_nosa_ea", 
    "declspecs_nosc_ts_sa_noea", "declspecs_nosc_ts_sa_ea", 
*************** static const char *const yytname[] =
*** 619,779 ****
    "declspecs", "maybe_type_quals_attrs", "typespec_nonattr", 
    "typespec_attr", "typespec_reserved_nonattr", "typespec_reserved_attr", 
    "typespec_nonreserved_nonattr", "initdecls", "notype_initdecls", 
!   "maybeasm", "initdcl", "@15", "notype_initdcl", "@16", 
!   "maybe_attribute", "attributes", "attribute", "attribute_list", 
!   "attrib", "any_word", "scspec", "init", "@17", "initlist_maybe_comma", 
!   "initlist1", "initelt", "@18", "initval", "@19", "designator_list", 
!   "designator", "nested_function", "@20", "@21", "notype_nested_function", 
!   "@22", "@23", "declarator", "after_type_declarator", "parm_declarator", 
    "parm_declarator_starttypename", "parm_declarator_nostarttypename", 
    "notype_declarator", "struct_head", "union_head", "enum_head", 
!   "structsp_attr", "@24", "@25", "@26", "@27", "structsp_nonattr", 
    "maybecomma", "maybecomma_warn", "component_decl_list", 
    "component_decl_list2", "component_decl", "components", 
    "components_notype", "component_declarator", 
    "component_notype_declarator", "enumlist", "enumerator", "typename", 
!   "@28", "absdcl", "absdcl_maybe_attribute", "absdcl1", "absdcl1_noea", 
    "absdcl1_ea", "direct_absdcl1", "array_declarator", "stmts_and_decls", 
    "lineno_stmt_decl_or_labels_ending_stmt", 
    "lineno_stmt_decl_or_labels_ending_decl", 
    "lineno_stmt_decl_or_labels_ending_label", 
    "lineno_stmt_decl_or_labels_ending_error", "lineno_stmt_decl_or_labels", 
!   "errstmt", "pushlevel", "poplevel", "c99_block_start", "c99_block_end", 
!   "maybe_label_decls", "label_decls", "label_decl", "compstmt_or_error", 
!   "compstmt_start", "compstmt_nostart", "compstmt_contents_nonempty", 
!   "compstmt_primary_start", "compstmt", "simple_if", "if_prefix", "@29", 
!   "do_stmt_start", "@30", "save_location", "lineno_labeled_stmt", 
!   "c99_block_lineno_labeled_stmt", "lineno_stmt", "lineno_label", 
!   "select_or_iter_stmt", "@31", "@32", "@33", "@34", "@35", "@36", "@37", 
!   "@38", "for_init_stmt", "stmt", "label", "maybe_type_qual", "xexpr", 
!   "asm_operands", "nonnull_asm_operands", "asm_operand", "asm_clobbers", 
!   "parmlist", "@39", "parmlist_1", "@40", "@41", "parmlist_2", "parms", 
!   "parm", "firstparm", "setspecs_fp", "parmlist_or_identifiers", "@42", 
!   "parmlist_or_identifiers_1", "identifiers", "identifiers_or_typenames", 
!   "extension", 0
  };
  #endif
  
  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
  static const short yyr1[] =
  {
!        0,    97,    97,    99,    98,   100,    98,   101,   102,   102,
!      102,   102,   103,   103,   103,   103,   103,   103,   103,   105,
!      106,   104,   104,   107,   108,   104,   104,   109,   110,   104,
!      104,   111,   111,   112,   112,   112,   112,   112,   112,   112,
!      113,   114,   114,   115,   115,   116,   116,   116,   116,   116,
!      116,   116,   116,   116,   116,   116,   117,   118,   119,   120,
!      120,   121,   121,   121,   121,   121,   121,   121,   121,   121,
!      121,   121,   121,   121,   122,   121,   123,   121,   124,   125,
!      121,   126,   121,   121,   121,   127,   127,   127,   127,   128,
!      127,   127,   127,   127,   127,   127,   127,   127,   127,   127,
!      127,   127,   127,   127,   129,   130,   130,   131,   132,   132,
!      132,   132,   133,   133,   133,   133,   134,   135,   136,   137,
!      137,   137,   137,   137,   137,   138,   138,   138,   139,   140,
!      140,   141,   141,   142,   142,   142,   142,   142,   142,   142,
!      143,   143,   143,   143,   143,   143,   144,   144,   144,   144,
!      144,   144,   145,   145,   145,   145,   145,   146,   146,   146,
!      146,   146,   146,   146,   147,   148,   148,   148,   148,   148,
!      148,   149,   150,   150,   150,   150,   150,   150,   150,   150,
!      150,   150,   151,   151,   151,   151,   151,   152,   152,   152,
!      152,   152,   152,   152,   152,   152,   152,   153,   153,   153,
!      153,   153,   154,   154,   154,   154,   154,   154,   154,   154,
!      155,   155,   155,   155,   155,   155,   155,   155,   156,   156,
!      156,   156,   157,   157,   157,   157,   158,   158,   158,   158,
!      159,   159,   159,   159,   160,   160,   160,   160,   160,   160,
!      160,   160,   161,   161,   161,   161,   161,   161,   161,   161,
!      161,   161,   161,   161,   161,   161,   161,   161,   162,   162,
!      163,   163,   164,   165,   165,   166,   167,   167,   167,   168,
!      168,   169,   169,   170,   170,   172,   171,   171,   174,   173,
!      173,   175,   175,   176,   176,   177,   178,   178,   179,   179,
!      179,   179,   179,   180,   180,   180,   180,   181,   181,   182,
!      183,   182,   182,   184,   184,   185,   185,   186,   186,   187,
!      186,   186,   189,   188,   188,   188,   190,   190,   191,   191,
!      191,   193,   194,   192,   196,   197,   195,   198,   198,   199,
!      199,   199,   199,   199,   200,   200,   201,   201,   201,   202,
!      202,   202,   202,   202,   203,   203,   203,   203,   203,   204,
!      204,   205,   205,   206,   206,   208,   207,   207,   209,   207,
!      207,   210,   207,   211,   207,   212,   212,   212,   213,   213,
!      214,   214,   215,   215,   216,   216,   216,   217,   217,   217,
!      217,   217,   217,   218,   218,   219,   219,   220,   220,   220,
!      221,   221,   221,   222,   222,   222,   223,   223,   225,   224,
!      226,   226,   227,   227,   227,   228,   228,   229,   229,   230,
!      230,   231,   231,   231,   231,   231,   232,   232,   232,   232,
!      232,   233,   233,   233,   233,   234,   234,   234,   234,   234,
!      235,   235,   235,   235,   236,   236,   236,   236,   236,   237,
!      237,   238,   238,   238,   238,   239,   240,   241,   242,   243,
!      244,   244,   245,   245,   246,   247,   247,   248,   249,   249,
!      250,   250,   251,   252,   253,   253,   255,   254,   257,   256,
!      258,   259,   259,   260,   261,   262,   264,   263,   263,   263,
!      265,   266,   263,   263,   263,   267,   268,   269,   270,   263,
!      271,   263,   272,   272,   273,   273,   273,   273,   273,   273,
!      273,   273,   273,   273,   273,   273,   273,   273,   274,   274,
!      274,   274,   275,   275,   276,   276,   277,   277,   278,   278,
!      279,   279,   280,   280,   282,   281,   283,   284,   285,   283,
!      283,   286,   286,   286,   286,   287,   287,   288,   288,   288,
!      288,   288,   289,   289,   289,   289,   289,   290,   292,   291,
!      293,   293,   294,   294,   295,   295,   296
  };
  
  /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
  static const short yyr2[] =
  {
!        0,     0,     1,     0,     2,     0,     3,     1,     1,     1,
!        5,     2,     3,     4,     4,     2,     2,     2,     1,     0,
         0,     8,     4,     0,     0,     8,     4,     0,     0,     7,
         3,     1,     1,     1,     1,     1,     1,     1,     1,     1,
!        1,     0,     1,     1,     3,     1,     2,     2,     2,     2,
!        2,     4,     2,     4,     2,     2,     1,     1,     1,     1,
!        4,     1,     3,     3,     3,     3,     3,     3,     3,     3,
!        3,     3,     3,     3,     0,     4,     0,     4,     0,     0,
!        7,     0,     5,     3,     3,     1,     1,     1,     1,     0,
!        7,     3,     3,     3,     3,     4,     6,     8,     6,     4,
!        3,     3,     2,     2,     1,     0,     1,     2,     1,     1,
!        2,     2,     4,     4,     2,     2,     2,     0,     1,     4,
!        4,     3,     3,     2,     2,     1,     2,     2,     2,     2,
!        2,     1,     2,     1,     2,     2,     2,     2,     2,     2,
!        1,     2,     2,     2,     2,     2,     2,     2,     2,     2,
!        2,     2,     2,     2,     2,     2,     2,     1,     2,     2,
         2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
         2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
         2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
         2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-        2,     2,     1,     1,     1,     1,     1,     1,     1,     1,
         1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
         1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
         1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
         1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
!        1,     1,     1,     1,     1,     1,     1,     1,     0,     1,
!        1,     1,     1,     1,     1,     1,     1,     4,     4,     1,
!        4,     1,     4,     0,     4,     0,     6,     3,     0,     6,
!        3,     0,     1,     1,     2,     6,     1,     3,     0,     1,
!        4,     6,     4,     1,     1,     1,     1,     1,     1,     1,
!        0,     4,     1,     0,     2,     1,     3,     3,     2,     0,
!        4,     1,     0,     4,     1,     1,     1,     2,     2,     5,
!        3,     0,     0,     6,     0,     0,     6,     1,     1,     4,
!        3,     2,     3,     1,     1,     1,     3,     2,     1,     3,
!        2,     3,     3,     4,     3,     4,     3,     2,     1,     1,
!        2,     1,     2,     1,     2,     0,     7,     5,     0,     7,
!        5,     0,     8,     0,     7,     2,     2,     2,     0,     1,
!        0,     1,     1,     2,     0,     3,     2,     3,     2,     3,
!        1,     1,     2,     1,     4,     1,     4,     2,     4,     3,
!        2,     4,     3,     1,     3,     1,     1,     3,     0,     3,
!        0,     1,     0,     1,     2,     1,     1,     1,     3,     2,
!        3,     4,     3,     2,     2,     1,     4,     3,     4,     5,
!        5,     1,     1,     1,     1,     1,     2,     2,     2,     2,
!        1,     2,     2,     2,     1,     2,     2,     2,     2,     1,
!        2,     1,     1,     1,     1,     2,     0,     0,     0,     0,
!        0,     1,     1,     2,     3,     1,     2,     1,     1,     5,
!        1,     1,     2,     2,     2,     2,     0,     5,     0,     4,
!        0,     1,     2,     3,     2,     2,     0,     4,     1,     3,
!        0,     0,     7,     5,     2,     0,     0,     0,     0,    12,
!        0,     6,     2,     1,     1,     2,     3,     2,     2,     2,
!        3,     6,     8,    10,    12,     3,     4,     1,     3,     5,
!        2,     4,     0,     1,     0,     1,     0,     1,     1,     3,
!        4,     7,     1,     3,     0,     3,     2,     0,     0,     6,
!        2,     0,     1,     1,     3,     1,     3,     4,     4,     3,
!        4,     3,     4,     4,     3,     4,     3,     1,     0,     3,
!        1,     2,     1,     3,     1,     3,     1
  };
  
  /* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE
--- 639,807 ----
    "declspecs", "maybe_type_quals_attrs", "typespec_nonattr", 
    "typespec_attr", "typespec_reserved_nonattr", "typespec_reserved_attr", 
    "typespec_nonreserved_nonattr", "initdecls", "notype_initdecls", 
!   "initdcl", "@16", "notype_initdcl", "@17", "maybe_attribute", 
!   "attributes", "attribute", "attribute_list", "attrib", "any_word", 
!   "scspec", "init", "@18", "initlist_maybe_comma", "initlist1", "initelt", 
!   "@19", "initval", "@20", "designator_list", "designator", 
!   "array_designator", "nested_function", "@21", "@22", 
!   "notype_nested_function", "@23", "@24", "declarator", 
!   "after_type_declarator", "parm_declarator", 
    "parm_declarator_starttypename", "parm_declarator_nostarttypename", 
    "notype_declarator", "struct_head", "union_head", "enum_head", 
!   "structsp_attr", "@25", "@26", "@27", "@28", "structsp_nonattr", 
    "maybecomma", "maybecomma_warn", "component_decl_list", 
    "component_decl_list2", "component_decl", "components", 
    "components_notype", "component_declarator", 
    "component_notype_declarator", "enumlist", "enumerator", "typename", 
!   "@29", "absdcl", "absdcl_maybe_attribute", "absdcl1", "absdcl1_noea", 
    "absdcl1_ea", "direct_absdcl1", "array_declarator", "stmts_and_decls", 
    "lineno_stmt_decl_or_labels_ending_stmt", 
    "lineno_stmt_decl_or_labels_ending_decl", 
    "lineno_stmt_decl_or_labels_ending_label", 
    "lineno_stmt_decl_or_labels_ending_error", "lineno_stmt_decl_or_labels", 
!   "errstmt", "c99_block_start", "maybe_label_decls", "label_decls", 
!   "label_decl", "compstmt_or_error", "compstmt_start", "compstmt_nostart", 
!   "compstmt_contents_nonempty", "compstmt_primary_start", "compstmt", 
!   "save_location", "lineno_labels", "c99_block_lineno_labeled_stmt", 
!   "lineno_stmt", "lineno_label", "condition", "if_statement_1", 
!   "if_statement_2", "if_statement", "start_break", "start_continue", 
!   "while_statement", "do_statement", "@30", "@31", "xexpr", 
!   "for_init_stmt", "for_cond_expr", "for_incr_expr", "for_statement", 
!   "switch_statement", "@32", "stmt_nocomp", "stmt", "label", 
!   "simple_asm_expr", "maybeasm", "asmdef", "asm_stmt", "asm_argument", 
!   "maybe_volatile", "asm_operands", "nonnull_asm_operands", "asm_operand", 
!   "asm_clobbers", "asm_string", "stop_string_translation", 
!   "start_string_translation", "parmlist", "@33", "parmlist_1", "@34", 
!   "@35", "parmlist_2", "parms", "parm", "firstparm", "setspecs_fp", 
!   "parmlist_or_identifiers", "@36", "parmlist_or_identifiers_1", 
!   "identifiers", "identifiers_or_typenames", "extension", 0
  };
  #endif
  
  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
  static const short yyr1[] =
  {
!        0,    95,    95,    97,    96,    98,    96,    99,    99,    99,
!       99,   100,   101,   101,   101,   101,   101,   101,   101,   103,
!      104,   102,   102,   105,   106,   102,   102,   107,   108,   102,
!      102,   109,   109,   110,   110,   110,   110,   110,   110,   110,
!      111,   111,   112,   112,   113,   113,   114,   114,   114,   114,
!      114,   114,   114,   114,   114,   114,   114,   115,   116,   117,
!      118,   118,   119,   119,   119,   119,   119,   119,   119,   119,
!      119,   119,   119,   119,   119,   120,   119,   121,   119,   122,
!      123,   119,   124,   119,   119,   119,   125,   125,   125,   125,
!      126,   125,   125,   125,   125,   125,   125,   125,   127,   125,
!      125,   125,   125,   125,   125,   125,   125,   125,   125,   125,
!      128,   128,   128,   129,   129,   130,   131,   131,   131,   131,
!      132,   132,   132,   132,   133,   134,   135,   136,   136,   136,
!      136,   136,   136,   137,   137,   137,   138,   139,   139,   140,
!      140,   141,   141,   141,   141,   141,   141,   141,   142,   142,
!      142,   142,   142,   142,   143,   143,   143,   143,   143,   143,
!      144,   144,   144,   144,   144,   145,   145,   145,   145,   145,
!      145,   145,   146,   147,   147,   147,   147,   147,   147,   148,
!      149,   149,   149,   149,   149,   149,   149,   149,   149,   149,
!      150,   150,   150,   150,   150,   151,   151,   151,   151,   151,
!      151,   151,   151,   151,   151,   152,   152,   152,   152,   152,
!      153,   153,   153,   153,   153,   153,   153,   153,   154,   154,
!      154,   154,   154,   154,   154,   154,   155,   155,   155,   155,
!      156,   156,   156,   156,   157,   157,   157,   157,   158,   158,
!      158,   158,   159,   159,   159,   159,   159,   159,   159,   159,
!      160,   160,   160,   160,   160,   160,   160,   160,   160,   160,
!      160,   160,   160,   160,   160,   160,   161,   161,   162,   162,
!      163,   164,   164,   165,   166,   166,   166,   167,   167,   168,
!      168,   170,   169,   169,   172,   171,   171,   173,   173,   174,
!      174,   175,   175,   176,   176,   177,   177,   177,   177,   177,
!      178,   178,   178,   178,   179,   179,   180,   181,   180,   180,
!      182,   182,   183,   183,   184,   184,   185,   184,   184,   187,
!      186,   186,   186,   188,   188,   189,   189,   190,   190,   192,
!      193,   191,   195,   196,   194,   197,   197,   198,   198,   198,
!      198,   198,   199,   199,   200,   200,   200,   201,   201,   201,
!      201,   201,   202,   202,   202,   202,   202,   203,   203,   204,
!      204,   205,   205,   207,   206,   206,   208,   206,   206,   209,
!      206,   210,   206,   211,   211,   211,   212,   212,   213,   213,
!      214,   214,   215,   215,   215,   216,   216,   216,   216,   216,
!      216,   217,   217,   218,   218,   219,   219,   219,   220,   220,
!      220,   221,   221,   221,   222,   222,   224,   223,   225,   225,
!      226,   226,   226,   227,   227,   228,   228,   229,   229,   230,
!      230,   230,   230,   230,   231,   231,   231,   231,   231,   232,
!      232,   232,   232,   233,   233,   233,   233,   233,   234,   234,
!      234,   234,   235,   235,   235,   235,   235,   236,   236,   237,
!      237,   237,   237,   238,   239,   240,   240,   241,   241,   242,
!      243,   243,   244,   245,   245,   246,   246,   247,   248,   249,
!      250,   250,   251,   252,   253,   254,   255,   256,   256,   257,
!      257,   257,   257,   258,   259,   260,   262,   263,   261,   264,
!      264,   265,   265,   266,   267,   268,   270,   269,   271,   271,
!      271,   271,   271,   271,   271,   271,   271,   271,   271,   271,
!      271,   271,   272,   272,   273,   273,   273,   273,   274,   275,
!      275,   276,   276,   277,   278,   278,   278,   278,   279,   279,
!      280,   280,   281,   281,   282,   282,   283,   283,   284,   285,
!      286,   288,   287,   289,   290,   291,   289,   289,   292,   292,
!      292,   292,   293,   293,   294,   294,   294,   294,   294,   295,
!      295,   295,   295,   295,   296,   298,   297,   299,   299,   300,
!      300,   301,   301,   302
  };
  
  /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
  static const short yyr2[] =
  {
!        0,     0,     1,     0,     3,     0,     4,     1,     1,     1,
!        2,     0,     3,     4,     4,     2,     2,     2,     1,     0,
         0,     8,     4,     0,     0,     8,     4,     0,     0,     7,
         3,     1,     1,     1,     1,     1,     1,     1,     1,     1,
!        1,     3,     0,     1,     1,     3,     1,     2,     2,     2,
!        2,     2,     4,     2,     4,     2,     2,     1,     1,     1,
!        1,     4,     1,     3,     3,     3,     3,     3,     3,     3,
!        3,     3,     3,     3,     3,     0,     4,     0,     4,     0,
!        0,     7,     0,     5,     3,     3,     1,     1,     1,     1,
!        0,     7,     3,     3,     3,     3,     4,     6,     0,     7,
!        4,     8,     4,     6,     4,     4,     3,     3,     2,     2,
!        1,     3,     4,     0,     1,     2,     1,     1,     2,     2,
!        4,     4,     2,     2,     2,     0,     1,     4,     4,     3,
!        3,     2,     2,     1,     2,     2,     2,     2,     2,     1,
!        2,     1,     2,     2,     2,     2,     2,     2,     1,     2,
!        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
!        2,     2,     2,     2,     2,     1,     2,     2,     2,     2,
         2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
         2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
         2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
         2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
         1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
         1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
         1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
         1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
!        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
!        1,     1,     1,     1,     1,     1,     0,     1,     1,     1,
!        1,     1,     1,     1,     1,     4,     4,     1,     4,     1,
!        4,     0,     6,     3,     0,     6,     3,     0,     1,     1,
!        2,     8,     3,     1,     3,     0,     1,     4,     6,     4,
!        1,     1,     1,     1,     1,     1,     1,     0,     4,     1,
!        0,     2,     1,     3,     3,     2,     0,     4,     1,     0,
!        4,     1,     1,     1,     2,     2,     1,     5,     3,     0,
!        0,     6,     0,     0,     6,     1,     1,     4,     3,     2,
!        3,     1,     1,     1,     3,     2,     1,     3,     2,     3,
!        3,     4,     3,     4,     3,     2,     1,     1,     2,     1,
!        2,     1,     2,     0,     7,     5,     0,     7,     5,     0,
!        8,     0,     7,     2,     2,     2,     0,     1,     0,     1,
!        1,     2,     0,     3,     2,     3,     2,     3,     1,     1,
!        2,     1,     4,     1,     4,     2,     4,     3,     2,     4,
!        3,     1,     3,     1,     1,     3,     0,     3,     0,     1,
!        0,     1,     2,     1,     1,     1,     3,     2,     3,     4,
!        3,     2,     2,     1,     4,     3,     4,     5,     5,     1,
!        1,     1,     1,     1,     2,     2,     2,     2,     1,     2,
!        2,     2,     1,     2,     2,     2,     2,     1,     2,     1,
!        1,     1,     1,     2,     0,     0,     1,     1,     2,     3,
!        1,     2,     1,     1,     3,     1,     1,     2,     2,     0,
!        0,     2,     3,     2,     2,     2,     3,     3,     1,     9,
!        9,     7,     7,     0,     0,     9,     0,     0,    13,     0,
!        1,     2,     1,     2,     1,    12,     0,     8,     2,     1,
!        1,     1,     1,     1,     2,     2,     2,     3,     1,     3,
!        4,     1,     1,     1,     3,     5,     2,     4,     6,     0,
!        1,     2,     4,     8,     1,     3,     5,     7,     0,     1,
!        0,     1,     1,     3,     6,     9,     1,     3,     1,     0,
!        0,     0,     3,     2,     0,     0,     6,     2,     0,     1,
!        1,     3,     1,     3,     4,     4,     3,     4,     3,     4,
!        4,     3,     4,     3,     1,     0,     3,     1,     2,     1,
!        3,     1,     3,     1
  };
  
  /* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE
*************** static const short yyr2[] =
*** 781,1690 ****
     error. */
  static const short yydefact[] =
  {
!        3,     5,     0,     0,     0,   266,   298,   297,   263,   125,
!      353,   349,   351,     0,    58,     0,   556,    18,     4,     7,
!        9,     8,     0,     0,   210,   211,   212,   213,   202,   203,
!      204,   205,   214,   215,   216,   217,   206,   207,   208,   209,
!      117,   117,     0,   133,   140,   260,   262,   261,   131,   283,
!      157,     0,     0,     0,   265,   264,     0,     6,    16,    17,
!      354,   350,   352,     0,     0,     0,   348,   258,   281,     0,
!      271,     0,   126,   138,   144,   128,   160,   127,   139,   145,
!      161,   129,   150,   155,   132,   167,   130,   151,   156,   168,
!      134,   136,   142,   141,   178,   135,   137,   143,   179,   146,
!      148,   153,   152,   193,   147,   149,   154,   194,   158,   176,
!      185,   164,   162,   159,   177,   186,   163,   165,   191,   200,
!      171,   169,   166,   192,   201,   170,   172,   174,   183,   182,
!      180,   173,   175,   184,   181,   187,   189,   198,   197,   195,
!      188,   190,   199,   196,     0,     0,    15,   284,    31,    32,
!      374,   365,   374,   366,   363,   367,    11,    85,    86,    87,
!       56,    57,     0,     0,     0,     0,     0,    88,     0,    33,
!       35,    34,     0,    36,    37,     0,    38,    39,     0,     0,
!       40,    59,     0,     0,    61,    43,    45,     0,     0,   288,
!        0,   238,   239,   240,   241,   234,   235,   236,   237,   398,
!        0,   230,   231,   232,   233,   259,     0,     0,   282,    12,
!      281,    30,     0,   281,   258,     0,   281,   347,   333,   258,
!      281,     0,   269,     0,   327,   328,     0,     0,     0,     0,
!      355,     0,   358,     0,   361,    54,    55,     0,     0,     0,
!       49,    46,     0,   462,     0,     0,    48,     0,     0,     0,
!       50,     0,    52,     0,     0,    78,    76,    74,     0,     0,
!        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
!      102,   103,     0,     0,    41,     0,     0,   458,   450,     0,
!       47,   295,   296,   293,     0,   286,   289,   294,   267,   400,
!      268,   346,     0,     0,   118,     0,   548,   344,   258,   259,
!        0,     0,   470,   104,     0,   470,   109,     0,   280,     0,
!        0,    14,   281,    22,     0,   281,   281,   331,    13,    26,
!        0,   281,   381,   376,   230,   231,   232,   233,   226,   227,
!      228,   229,   117,   117,   373,     0,   374,   281,   374,   395,
!      396,   370,   393,     0,     0,     0,     0,    92,    91,     0,
!       10,    44,     0,     0,    84,    83,     0,     0,     0,     0,
!       72,    73,    71,    70,    69,    67,    68,    62,    63,    64,
!       65,    66,   101,   100,     0,    42,     0,    94,     0,     0,
!      451,   452,    93,     0,   288,    41,   258,   281,   399,   401,
!      406,   405,   407,   415,   345,   272,   273,     0,     0,     0,
!        0,     0,   417,     0,   445,    28,   111,   110,   107,   222,
!      223,   218,   219,   224,   225,   220,   221,   117,   117,   278,
!      332,     0,     0,   470,   277,   330,   470,   357,   378,     0,
!      375,   382,     0,   360,     0,     0,   371,     0,   370,     0,
!        0,     0,    89,    60,    51,    53,     0,     0,    77,    75,
!       95,    99,   554,     0,   461,   430,   460,   470,   470,   470,
!      470,     0,   439,     0,   448,   425,   434,   453,   285,   287,
!       85,     0,   409,   524,   414,   281,   413,   274,     0,   552,
!      532,   117,   117,   550,     0,   533,   535,   549,     0,     0,
!        0,   418,   416,     0,   114,     0,   115,     0,     0,   329,
!      270,   273,    20,   275,    24,     0,   281,   377,   383,     0,
!      281,   379,   385,   281,   281,   397,   394,   281,     0,     0,
!        0,     0,     0,    79,    82,   454,     0,   431,   426,   435,
!      432,   427,   436,   448,   428,   437,   433,   429,   438,   440,
!      447,    85,   266,     0,     0,     0,     0,     0,     0,   512,
!      507,   457,   470,     0,   116,   117,   117,     0,     0,   446,
!      494,   474,   475,     0,   290,     0,   292,   408,   410,     0,
!        0,   524,   412,   530,   547,   402,   402,   526,   527,     0,
!      551,     0,   419,   420,     0,    29,   455,     0,     0,   302,
!      300,   299,   279,     0,     0,     0,   281,     0,   387,   281,
!      281,     0,   390,   281,   356,   359,   364,   281,    96,     0,
!       98,   315,     0,     0,   312,     0,   314,     0,   368,   305,
!      311,     0,     0,     0,   555,   459,     0,   510,   497,   498,
!      499,     0,     0,     0,   513,     0,     0,   495,     0,     0,
!      123,   466,   480,   468,   485,     0,   478,     0,     0,   449,
!      463,   124,     0,   411,   525,   338,   258,   281,   281,   334,
!      335,   281,   544,   403,   406,   258,   281,   281,   546,   281,
!      534,   210,   211,   212,   213,   202,   203,   204,   205,   214,
!      215,   216,   217,   206,   207,   208,   209,   117,   117,   536,
!      553,   456,   112,   113,     0,    21,   276,    25,   389,   281,
!        0,   392,   281,     0,   362,     0,   318,     0,     0,   309,
!       90,     0,   304,     0,   317,   308,    80,     0,   508,   500,
!        0,   505,     0,   281,     0,   121,   321,     0,   122,   324,
!        0,     0,   448,     0,     0,     0,   465,   470,   464,   484,
!        0,   496,   291,   409,   524,   542,   281,   337,   281,   340,
!      543,   404,   409,   524,   545,   528,   402,   402,     0,   388,
!      384,   391,   386,    97,     0,   320,     0,     0,   306,   307,
!        0,   506,     0,   511,   119,     0,   120,     0,     0,     0,
!        0,   514,     0,   479,   448,   449,   471,   470,     0,   341,
!      342,     0,   336,   339,     0,   281,   281,   539,   281,   541,
!      301,     0,   313,   310,   509,   516,     0,   470,   470,     0,
!        0,   469,   515,   493,   486,     0,   490,   477,   473,   472,
!        0,   343,   529,   537,   538,   540,   319,     0,     0,     0,
!      517,   518,   501,   322,   325,   467,   481,   514,   492,   448,
!      483,     0,     0,   516,     0,     0,     0,     0,   448,     0,
!      491,     0,     0,     0,   502,   519,   323,   326,   482,   487,
!      520,     0,     0,     0,   514,     0,   522,     0,   503,     0,
!        0,     0,     0,   488,   521,   504,   523,   448,   489,     0,
!        0,     0
  };
  
  static const short yydefgoto[] =
  {
!      879,     1,     2,     3,    18,    19,    20,    21,   314,   593,
!      320,   595,   215,   493,   615,   178,   244,   374,   180,   181,
!      182,   183,    22,   184,   185,   359,   358,   356,   623,   357,
!      186,   522,   302,   303,   304,   305,   408,   455,    23,   293,
!      554,   191,   192,   193,   194,   195,   196,   197,   198,    32,
!       33,    34,    35,    36,    37,    38,    39,    40,    41,   481,
!      482,   332,   205,   199,    42,   206,    43,    44,    45,    46,
!       47,   221,    69,   216,   222,   594,    70,   498,   294,   208,
!       49,   284,   285,   286,    50,   592,   694,   617,   618,   619,
!      767,   620,   708,   621,   622,   725,   775,   846,   728,   777,
!      847,   501,   224,   658,   659,   660,   225,    51,    52,    53,
!       54,   336,   338,   343,   233,    55,   712,   437,   228,   229,
!      334,   507,   511,   508,   512,   341,   342,   200,   289,   388,
!      662,   663,   390,   391,   392,   217,   456,   457,   458,   459,
!      460,   461,   306,   278,   625,   737,   741,   379,   380,   381,
!      585,   559,   279,   463,   187,   586,   646,   647,   730,   648,
!      732,   307,   785,   738,   786,   787,   649,   784,   731,   848,
!      733,   837,   864,   877,   839,   814,   561,   562,   635,   815,
!      829,   830,   831,   867,   474,   570,   483,   669,   794,   484,
!      485,   689,   486,   575,   297,   398,   487,   488,   453,   188
  };
  
  static const short yypact[] =
  {
!       73,    94,  2813,  2813,   291,-32768,-32768,-32768,-32768,-32768,
!       88,    88,    88,    35,-32768,    56,-32768,-32768,-32768,-32768,
!   -32768,-32768,    70,    92,   612,  1168,  1296,  2041,  1008,   390,
!     1300,   898,  1603,  2103,  1696,  2214,  1607,   958,  2010,  1329,
!   -32768,-32768,   105,-32768,-32768,-32768,-32768,-32768,    88,-32768,
!   -32768,    48,    50,    63,-32768,-32768,  2813,-32768,-32768,-32768,
!       88,    88,    88,  2601,    90,  2496,-32768,    62,    88,   186,
!   -32768,  1202,-32768,-32768,-32768,    88,-32768,-32768,-32768,-32768,
!   -32768,-32768,-32768,-32768,    88,-32768,-32768,-32768,-32768,-32768,
!   -32768,-32768,-32768,    88,-32768,-32768,-32768,-32768,-32768,-32768,
!   -32768,-32768,    88,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
!   -32768,    88,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
!       88,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,    88,
!   -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,    88,-32768,
!   -32768,-32768,-32768,-32768,   327,    92,-32768,-32768,-32768,-32768,
!   -32768,    74,-32768,   119,-32768,   136,-32768,-32768,-32768,-32768,
!   -32768,-32768,  2601,  2601,   134,   199,   202,-32768,   526,-32768,
!   -32768,-32768,  2601,-32768,-32768,  1787,-32768,-32768,  2601,   164,
!      190,-32768,  2641,  2706,-32768,  3219,   641,  1345,  2601,   952,
!      207,   807,  2232,  1471,  3214,   615,   682,   741,   924,-32768,
!      209,   100,   312,   147,   315,-32768,    92,    92,    88,-32768,
!       88,-32768,   273,    88,   349,   894,    88,-32768,-32768,    62,
!       88,   343,-32768,   939,   115,   356,   368,  2070,   279,   851,
!   -32768,   281,-32768,   532,-32768,-32768,-32768,  2601,  2601,  2167,
!   -32768,-32768,   302,-32768,   311,   317,-32768,   340,  2601,  1787,
!   -32768,  1787,-32768,  2601,  2601,   410,-32768,-32768,  2601,  2601,
!     2601,  2601,  2601,  2601,  2601,  2601,  2601,  2601,  2601,  2601,
!   -32768,-32768,   526,   526,  2601,  2601,   350,-32768,   442,   407,
!   -32768,-32768,-32768,-32768,    32,-32768,   322,-32768,-32768,   107,
!   -32768,   356,   299,    92,-32768,   510,-32768,-32768,    62,   543,
!     2110,   461,-32768,-32768,  1039,    43,-32768,   421,   488,   327,
!      327,-32768,    88,-32768,   894,    88,    88,-32768,-32768,-32768,
!      894,    88,-32768,-32768,   807,  2232,  1471,  3214,   615,   682,
!      741,   924,-32768,   433,   483,  3095,-32768,    88,-32768,-32768,
!      524,   484,-32768,   532,  2934,  2961,   487,-32768,-32768,  2364,
!   -32768,  3219,   496,   535,  3219,  3219,  2601,   541,  2601,  2601,
!     2462,  1857,  2395,  2892,   673,   503,   503,   481,   481,-32768,
!   -32768,-32768,-32768,-32768,   546,   190,   501,-32768,   526,  1534,
!      442,-32768,-32768,   547,   952,  2746,    62,    88,-32768,-32768,
!   -32768,-32768,   498,-32768,-32768,-32768,   179,   551,  1234,  2601,
!     2601,  2175,-32768,  2834,-32768,-32768,-32768,-32768,-32768,  2120,
!      990,  1700,  1453,  3142,  1666,  2074,  1759,   552,   554,-32768,
!      115,   375,   327,-32768,   601,-32768,-32768,-32768,   374,   193,
!   -32768,-32768,   557,-32768,   560,  2601,   526,   561,   484,  2167,
!     2601,  2167,-32768,-32768,   558,   558,   608,  2601,  3248,  2994,
!   -32768,-32768,-32768,   373,   461,-32768,-32768,    71,    79,    80,
!       81,   655,-32768,   567,  2250,-32768,-32768,-32768,-32768,-32768,
!      165,   572,   107,   107,-32768,    88,-32768,-32768,   573,-32768,
!   -32768,-32768,-32768,-32768,   574,   387,-32768,-32768,   168,  2861,
!     2884,-32768,-32768,    44,-32768,   327,-32768,    92,  1935,-32768,
!   -32768,   636,-32768,-32768,-32768,  2601,   203,   576,-32768,  2601,
!      239,   578,-32768,    88,    88,  3219,-32768,    88,   577,   584,
!     2982,   585,  1414,-32768,  3235,-32768,   526,-32768,-32768,-32768,
!   -32768,-32768,-32768,  2324,-32768,-32768,-32768,-32768,-32768,-32768,
!   -32768,   629,   630,  2601,   632,   590,   596,  2536,   103,   679,
!   -32768,-32768,-32768,   603,-32768,-32768,-32768,   604,   575,   600,
!   -32768,-32768,-32768,  2431,-32768,  2601,-32768,-32768,-32768,   609,
!     1116,-32768,-32768,-32768,-32768,   325,   301,-32768,-32768,  2716,
!   -32768,   696,-32768,-32768,   605,-32768,-32768,   395,   396,-32768,
!   -32768,  3219,-32768,    44,  1935,    44,  3085,  2601,-32768,    88,
!     3085,  2601,-32768,    88,-32768,-32768,-32768,    88,-32768,  2601,
!   -32768,-32768,   526,  2601,-32768,   664,  3219,   626,   625,-32768,
!   -32768,   251,  1895,  2601,-32768,-32768,  3013,-32768,-32768,-32768,
!   -32768,   631,  2601,   634,-32768,   653,   690,-32768,   327,    92,
!   -32768,-32768,-32768,-32768,-32768,   670,   723,  1627,    77,-32768,
!   -32768,-32768,   254,-32768,-32768,-32768,    62,    88,    88,   508,
!      533,   142,-32768,-32768,    88,    62,    88,   142,-32768,    88,
!   -32768,  2120,   990,  3154,  3185,  1700,  1453,  2470,  2316,  3142,
!     1666,  3173,  3202,  2074,  1759,  2609,  2817,-32768,-32768,-32768,
!   -32768,-32768,-32768,-32768,  1414,-32768,-32768,-32768,-32768,  3085,
!      374,-32768,  3085,   193,-32768,  3034,-32768,  2804,  1414,-32768,
!   -32768,  1827,-32768,  2002,-32768,-32768,  3235,  2601,-32768,-32768,
!      651,-32768,  2601,    88,   398,-32768,   188,   404,-32768,   196,
!      676,   685,-32768,   691,  2601,  1720,-32768,-32768,-32768,-32768,
!     2601,-32768,-32768,   325,   307,-32768,    88,-32768,    88,-32768,
!   -32768,    88,   301,   301,-32768,-32768,   325,   301,   669,-32768,
!   -32768,-32768,-32768,-32768,  2601,-32768,   671,  2002,-32768,-32768,
!     3201,-32768,    28,-32768,-32768,   894,-32768,   894,  2601,  2601,
!      746,  2431,   677,-32768,-32768,-32768,-32768,-32768,   681,   508,
!      533,   393,-32768,-32768,  1116,    88,   142,-32768,   142,-32768,
!   -32768,  2911,-32768,-32768,-32768,    67,   678,-32768,-32768,   684,
!      686,-32768,-32768,-32768,-32768,   687,-32768,-32768,-32768,-32768,
!      689,-32768,-32768,-32768,-32768,-32768,-32768,   713,   526,    41,
!      695,-32768,-32768,-32768,-32768,-32768,-32768,  2601,-32768,-32768,
!   -32768,  2601,   688,    67,   693,    67,   605,   605,-32768,   701,
!   -32768,   692,   782,    58,-32768,-32768,-32768,-32768,-32768,-32768,
!   -32768,   727,   786,   707,  2601,  2601,-32768,   319,-32768,   710,
!      716,   717,   796,-32768,-32768,-32768,-32768,-32768,-32768,   809,
!      816,-32768
  };
  
  static const short yypgoto[] =
  {
!   -32768,-32768,-32768,-32768,    53,-32768,-32768,-32768,-32768,-32768,
!   -32768,-32768,-32768,-32768,    -5,-32768,   -63,   427,  -256,   422,
!   -32768,-32768,-32768,    14,   819,-32768,-32768,-32768,-32768,-32768,
!   -32768,-32768,  -301,-32768,   514,-32768,-32768,    -9,   305,  -250,
!     -540,     1,     4,    23,    36,     9,    19,    27,    29,  -257,
!     -252,   246,   247,  -246,  -238,   248,   258,  -431,  -430,   549,
!      556,-32768,  -171,-32768,  -429,  -199,   420,   520,   812,   840,
!   -32768,  -453,  -121,  -207,   417,-32768,   579,-32768,   318,    86,
!      106,-32768,   469,-32768,   478,   260,-32768,  -608,-32768,   162,
!   -32768,  -573,-32768,-32768,   253,-32768,-32768,-32768,-32768,-32768,
!   -32768,  -116,   300,   125,   132,  -112,   -18,-32768,-32768,-32768,
!   -32768,-32768,-32768,-32768,-32768,-32768,-32768,   446,  -125,-32768,
!      550,-32768,-32768,   197,   183,   553,   474,  -138,-32768,-32768,
!     -535,  -275,  -396,  -455,-32768,   529,-32768,-32768,-32768,-32768,
!   -32768,-32768,  -264,-32768,-32768,  -405,   130,-32768,-32768,   536,
!     -350,-32768,   358,-32768,-32768,  -428,-32768,-32768,-32768,-32768,
!   -32768,   224,   133,  -648,  -254,  -186,-32768,-32768,-32768,-32768,
!   -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  -773,
!       76,-32768,    82,-32768,   447,-32768,  -569,-32768,-32768,-32768,
!   -32768,-32768,-32768,   444,  -308,-32768,-32768,-32768,-32768,     7
  };
  
  
! #define	YYLAST		3308
  
  
  static const short yytable[] =
  {
!      179,   654,   190,    24,    24,    71,    25,    25,   425,    56,
!       56,    28,    28,   423,   389,   300,   315,   568,   375,   426,
!      309,    29,    29,   651,   226,    26,    26,   231,   223,    30,
!       30,    31,    31,   555,   556,   557,   560,   245,    27,    27,
!      406,   668,   587,   299,  -106,   584,   151,   153,   155,   715,
!      413,   148,   149,   148,   149,   414,    57,    24,   333,   558,
!       25,   415,   422,    56,   849,    28,   148,   149,   201,   416,
!        9,   202,  -441,    -1,   805,    29,   567,   827,   739,    26,
!     -442,  -443,  -444,    30,   780,    31,   758,   843,    48,    48,
!      203,   869,    27,    15,    -2,    66,    60,    61,    62,   399,
!      766,   346,    63,   204,   862,   560,   148,   149,    72,   156,
!       75,   352,    84,   353,    93,   462,   102,   806,   111,    15,
!      120,   383,   129,    64,   138,   465,   384,   227,   558,   375,
!      844,    15,   555,   556,   557,   828,   817,    65,  -106,   551,
!      769,   413,    48,   150,   740,   152,   414,   863,   687,   688,
!       67,    48,   415,    48,   147,    81,   691,   189,   154,    68,
!      416,   632,  -421,   240,   333,   386,   147,   147,   147,   230,
!     -422,  -423,  -424,    15,   387,   214,   235,   236,    15,   664,
!      664,   147,   316,   214,   283,   724,   241,   472,   291,   292,
!      147,   850,   246,   466,   803,   146,    66,   539,   569,   147,
!      858,   237,   280,   528,   531,   534,   537,   212,   147,   213,
!      214,   432,   376,   434,   232,   201,   212,   147,   202,  -273,
!      201,   797,   799,   202,   212,   822,   147,  -273,   340,   878,
!      324,   234,  -273,   325,    15,   147,   335,   203,   328,   509,
!     -273,   813,   203,   695,   147,   697,   213,   214,   329,   597,
!      204,    67,   326,   247,   564,   204,   330,   580,   331,   565,
!       68,    48,   581,   213,   214,   327,   238,   372,   373,   239,
!       15,   529,   532,   535,   538,   396,   209,    75,  -273,    84,
!      210,    93,  -273,   102,   248,   601,  -273,    75,   568,    84,
!     -273,   291,   292,   446,   315,   713,   288,   568,   290,   201,
!       48,   519,   202,   521,    66,    48,   213,   214,   409,   652,
!       66,   410,   506,   413,   147,    48,   411,   612,   414,   613,
!       77,   203,   679,    86,   415,    48,   412,   680,    66,   655,
!       66,   218,   416,   683,   204,    48,   324,    48,   340,   325,
!      295,   684,   335,   742,   328,   144,   145,   567,   248,   700,
!      555,   556,   557,   703,   329,   298,   567,     9,   326,   665,
!      664,   664,   330,   443,   331,   656,   213,   214,   666,   214,
!      321,   327,   337,   452,   657,   214,   588,    66,   218,   283,
!       15,    58,    59,   656,    48,   219,   207,   201,   394,   385,
!      202,   347,   657,   214,   220,     6,     7,     8,    95,   409,
!      348,   553,   410,    10,    11,    12,   349,   411,   871,   203,
!       75,   510,    84,   872,    93,   241,   102,   412,   856,   857,
!      505,    48,   204,   213,   214,     5,     6,     7,     8,     9,
!      350,   340,   219,   311,    10,    11,    12,   312,   792,   377,
!      793,   220,   316,   214,    73,    78,    82,    87,   527,   530,
!       14,   536,   109,   114,   118,   123,   -81,   743,   318,   552,
!      748,   214,   210,   525,   499,    24,   752,   526,    25,   569,
!      553,   563,    48,    28,   807,   378,   808,   578,   569,   396,
!     -247,   579,   821,    29,   631,   692,   693,    26,   774,   312,
!      210,    30,   312,    31,   776,    75,   382,    93,   210,   111,
!       27,   129,    76,    80,    85,    89,    94,    98,   103,   107,
!      112,   116,   121,   125,   130,   134,   139,   143,   727,   315,
!      397,   624,   726,  -380,  -380,    48,   405,    48,   552,   148,
!      149,   296,   419,   339,   308,   148,   149,   413,   310,   267,
!      268,   269,   414,   633,    74,    79,    83,    88,   415,   400,
!       48,   404,   110,   115,   119,   124,   416,   661,   667,   265,
!      266,   267,   268,   269,    24,   475,   214,    25,   435,   720,
!      563,   409,    28,   430,   410,   746,   214,   280,   436,   411,
!      671,   441,    29,   672,   506,   444,    26,   447,   675,   412,
!       30,   641,    31,   642,   643,   644,   645,   451,   676,    27,
!      748,   214,   673,   464,   250,   252,   677,   706,   678,   420,
!      421,    73,    78,    82,    87,   674,     5,     6,     7,     8,
!       72,   729,     8,    90,   445,    10,    11,    12,    10,    11,
!       12,   790,   791,   424,   296,   450,   468,   428,   429,   427,
!      477,    14,   494,    15,   496,   503,    15,   502,   513,    48,
!      504,   514,   517,   442,   523,   433,   301,   201,   540,   772,
!      202,   566,   573,   577,   212,    48,   201,   287,   607,   202,
!      599,   782,   603,   608,   610,   -31,   -32,   788,   627,   203,
!      628,   464,   464,   533,   464,   510,   629,   634,   203,     8,
!       95,   277,   204,   637,   640,    10,    11,    12,   653,   690,
!      551,   204,  -242,   270,   271,   473,   272,   273,   274,   275,
!      709,    74,    79,    83,    88,   809,   810,   710,   812,   711,
!      722,   719,   495,   497,   721,   291,   292,   263,   264,   265,
!      266,   267,   268,   269,   291,   292,   723,   734,   796,   798,
!      735,   771,    48,   778,    73,    78,    82,    87,     8,    99,
!      751,    48,   779,   317,    10,    11,    12,    75,   781,    84,
!      800,    93,   802,   102,   811,   111,   816,   120,   832,   129,
!      820,   138,    15,   835,   812,   836,   636,   838,   851,   840,
!      841,   860,    24,   854,   852,    25,   574,   574,   563,   845,
!       28,   859,   861,   571,   865,   409,   866,   868,   410,   873,
!       29,   812,   870,   411,    26,   874,   876,   875,    30,   880,
!       31,     5,   471,   412,     8,    72,   881,    27,   393,   407,
!       10,    11,    12,   842,   598,   681,   682,   685,   602,    73,
!       78,   604,   605,   109,   114,   606,    14,   686,    15,   500,
!       91,    96,   100,   105,    74,    79,    83,    88,   127,   132,
!      136,   141,   322,   469,   696,     5,   417,   147,     8,     9,
!      638,   639,   287,   418,    10,    11,    12,    48,    92,    97,
!      101,   106,   395,   768,   714,   789,   128,   133,   137,   142,
!       14,   795,    15,    16,   518,   431,   762,    76,    80,    94,
!       98,   112,   116,   130,   134,   301,   438,   760,  -470,  -470,
!     -470,  -470,  -470,     6,     7,     8,   104,  -470,  -470,  -470,
!      516,    10,    11,    12,   698,   818,   467,   650,   701,   853,
!      819,   476,   572,  -470,     0,   704,   576,   855,     0,    74,
!       79,     8,   104,   110,   115,     0,     0,    10,    11,    12,
!      313,   323,  -372,   -19,   -19,   -19,   -19,   -19,     0,   317,
!      317,     0,   -19,   -19,   -19,   148,   149,     6,     7,   281,
!      282,   533,     0,     6,     7,     8,   131,   212,   -19,     0,
!     -273,    10,    11,    12,     0,   744,   745,     0,     0,   750,
!        0,     0,     0,  -273,   753,   754,     0,   755,  -249,  -105,
!        0,     0,   756,   757,     5,     6,     7,     8,    77,     0,
!        0,   393,   393,    10,    11,    12,     0,    91,    96,   100,
!      105,   533,     0,     6,     7,     8,    90,   759,     0,    14,
!      761,    10,    11,    12,     0,     0,     0,     0,     0,  -273,
!        0,   833,   834,  -273,   -19,    92,    97,   101,   106,    15,
!      301,   773,     0,  -108,  -108,  -108,  -108,  -108,  -255,     0,
!        0,     0,  -108,  -108,  -108,     0,   344,   345,     0,     0,
!        0,     0,     0,     0,   296,     0,   296,   351,  -108,     0,
!        0,     0,   354,   355,     0,     0,     0,   360,   361,   362,
!      363,   364,   365,   366,   367,   368,   369,   370,   371,     0,
!        0,    73,    78,    82,    87,     0,     0,     0,  -246,   109,
!      114,   118,   123,     0,   393,   393,     0,     0,     0,     0,
!        0,     0,     0,   823,   824,     0,   825,   478,     0,   403,
!        5,     6,     7,     8,     9,     0,     0,   480,     0,    10,
!       11,    12,     0,     0,  -108,     0,     0,     0,     0,     0,
!       91,    96,   100,   105,     0,    14,     0,     0,     0,    76,
!       80,    85,    89,    94,    98,   103,   107,   112,   116,   121,
!      125,   130,   134,   139,   143,     0,     0,     0,    92,    97,
!      101,   106,     5,     6,     7,     8,    77,   448,   449,     0,
!        0,    10,    11,    12,     0,     0,     0,     0,   747,   749,
!        0,    74,    79,    83,    88,     0,     0,    14,     0,   110,
!      115,   119,   124,   211,     0,  -531,   -27,   -27,   -27,   -27,
!      -27,     0,     0,     0,     0,   -27,   -27,   -27,   489,   490,
!        0,     0,     0,    91,    96,     0,     0,   127,   132,     0,
!      212,   -27,     0,  -273,     0,   478,     0,   479,     5,     6,
!        7,     8,     9,     0,     0,   480,  -273,    10,    11,    12,
!        0,    92,    97,     0,   515,   128,   133,     0,  -243,   520,
!        0,     0,     0,    14,     0,     0,   524,     0,     0,   213,
!      214,     0,   393,   393,     0,     0,     0,     0,     0,     0,
!        0,   393,   393,     0,     0,   393,   393,     0,     0,     0,
!        0,     0,  -273,     0,     0,     0,  -273,   -27,     0,     0,
!        5,     6,     7,     8,    81,     6,     7,     8,    99,    10,
!       11,    12,     0,    10,    11,    12,     0,   591,   747,   749,
!      749,     0,     0,  -531,   596,    14,     0,    15,   600,     0,
!        0,    15,     0,     0,     6,     7,     8,   140,     0,     0,
!        0,   616,    10,    11,    12,     0,   276,     0,  -446,  -446,
!     -446,  -446,  -446,  -446,  -446,  -446,     0,  -446,  -446,  -446,
!     -446,  -446,   626,  -446,  -446,  -446,  -446,  -446,  -446,  -446,
!     -446,  -446,  -446,  -446,  -446,  -446,  -446,  -446,  -446,  -446,
!     -446,  -446,  -446,  -446,     0,     0,  -244,  -446,     0,     0,
!     -248,     0,     0,  -446,     0,     0,  -446,     0,     0,     0,
!        0,  -446,  -446,  -446,     0,     0,     0,  -446,  -446,     0,
!        0,     0,  -446,   591,     0,   611,   699,   541,   149,  -257,
!      702,     0,     0,   158,   159,     0,   160,     0,   705,     0,
!        0,     0,   707,     0,     0,  -446,   277,  -446,  -446,     0,
!     -446,   616,   716,     0,   161,     0,    16,     0,   162,   163,
!      164,   165,   166,     0,     0,     0,   167,     0,     6,     7,
!        8,    95,   168,     0,     0,   169,    10,    11,    12,     0,
!      170,   171,   172,     0,     0,     5,   173,   174,     8,    81,
!      612,   175,   613,     0,    10,    11,    12,    91,    96,   100,
!      105,     0,     0,     0,     0,   127,   132,   136,   141,     0,
!       14,     0,    15,     0,     0,  -303,   176,   177,     0,   614,
!        0,     0,     0,   616,     0,    92,    97,   101,   106,     0,
!        0,     0,     0,   128,   133,   137,   142,   616,     0,     0,
!      616,     0,   616,     0,     0,   454,   770,  -470,  -470,  -470,
!     -470,  -470,  -470,  -470,  -470,     0,  -470,  -470,  -470,  -470,
!     -470,     0,  -470,  -470,  -470,  -470,  -470,  -470,  -470,  -470,
!     -470,  -470,  -470,  -470,  -470,  -470,  -470,     0,  -470,  -470,
!     -470,  -470,  -470,     0,     0,     0,  -470,     0,     0,     0,
!        0,     0,  -470,   801,     0,  -470,   616,     0,     0,     0,
!     -470,  -470,  -470,     0,     0,     0,  -470,  -470,     0,     0,
!        0,  -470,     0,     0,     0,     0,     0,     5,     6,     7,
!        8,   108,     6,     7,     8,   126,    10,    11,    12,     0,
!       10,    11,    12,     0,  -470,     0,  -470,  -470,   736,  -470,
!     -448,  -448,    14,     0,    15,     0,  -448,  -448,    15,  -448,
!        0,     0,     0,  -448,     0,  -448,  -448,  -448,  -448,  -448,
!     -448,  -448,  -448,  -448,  -448,  -448,     0,  -448,     0,  -448,
!        0,  -448,  -448,  -448,  -448,  -448,     0,     0,     0,  -448,
!        5,     6,     7,     8,   113,  -448,     0,     0,  -448,    10,
!       11,    12,     0,  -448,  -448,  -448,     0,     0,     0,  -448,
!     -448,     0,     0,  -250,  -448,    14,     0,  -254,     0,     0,
!        5,     6,     7,     8,   117,     6,     7,     8,    90,    10,
!       11,    12,     0,    10,    11,    12,     0,  -448,     0,  -448,
!     -448,   783,  -448,  -476,  -476,    14,     0,    15,     0,  -476,
!     -476,    15,  -476,     0,     0,     0,  -476,     0,  -476,  -476,
!     -476,  -476,  -476,  -476,  -476,  -476,  -476,  -476,  -476,     0,
!     -476,     0,  -476,     0,  -476,  -476,  -476,  -476,  -476,     0,
!        0,     0,  -476,     0,     6,     7,     8,   131,  -476,     0,
!        0,  -476,    10,    11,    12,     0,  -476,  -476,  -476,     0,
!        0,     0,  -476,  -476,     0,     0,  -252,  -476,   242,     0,
!      157,     5,     0,     0,     8,     9,   158,   159,     0,   160,
!       10,    11,    12,     0,     0,     0,     0,     0,     0,     0,
!     -476,     0,  -476,  -476,     0,  -476,    14,   161,    15,    16,
!        0,   162,   163,   164,   165,   166,     0,     0,   611,   167,
!      541,   149,     0,     0,     0,   168,   158,   159,   169,   160,
!        0,     0,     0,   170,   171,   172,     0,     0,     0,   173,
!      174,     0,     0,     0,   175,     0,     0,   161,     0,    16,
!        0,   162,   163,   164,   165,   166,     0,     0,     0,   167,
!        0,     0,     0,     0,     0,   168,     0,     0,   169,   176,
!      177,     0,   243,   170,   171,   172,     0,     0,     0,   173,
!      174,     0,     0,   612,   175,   613,   611,     0,   157,     0,
!        0,     0,     0,     0,   158,   159,     0,   160,   260,   261,
!      262,   263,   264,   265,   266,   267,   268,   269,  -369,   176,
!      177,     0,   614,     0,     0,   161,     0,    16,     0,   162,
!      163,   164,   165,   166,     0,     0,   589,   167,   157,  -316,
!        0,     0,     0,   168,   158,   159,   169,   160,     0,     0,
!        0,   170,   171,   172,     0,     0,     0,   173,   174,     0,
!        0,  -316,   175,  -316,     0,   161,     0,    16,     0,   162,
!      163,   164,   165,   166,     0,     0,     0,   167,     0,     0,
!        0,     0,     0,   168,     0,     0,   169,   176,   177,     0,
!      614,   170,   171,   172,     0,     0,     0,   173,   174,     0,
!        0,     0,   175,   611,     0,   157,     0,     0,     0,     0,
!        0,   158,   159,     0,   160,     6,     7,     8,   135,     0,
!        0,     0,     0,    10,    11,    12,     0,   176,   177,     0,
!      590,     0,   161,     0,    16,     0,   162,   163,   164,   165,
!      166,    15,     0,     0,   167,     5,     6,     7,     8,    86,
!      168,     0,     0,   169,    10,    11,    12,     0,   170,   171,
!      172,     0,     0,     0,   173,   174,     0,     0,     0,   175,
!       14,   319,     0,     0,   -23,   -23,   -23,   -23,   -23,     6,
!        7,     8,   126,   -23,   -23,   -23,     0,    10,    11,    12,
!        0,     0,     0,     0,   176,   177,     0,   614,   212,   -23,
!     -256,  -273,     0,     0,     0,    15,     0,     5,     6,     7,
!        8,   113,     0,   157,  -273,     0,    10,    11,    12,   158,
!      159,     0,   160,     0,     5,     6,     7,     8,    72,     0,
!        0,  -245,    14,    10,    11,    12,     0,   213,   214,     0,
!      161,     0,    16,     0,   162,   163,   164,   165,   166,    14,
!        0,    15,   167,     0,     0,     0,     0,     0,   168,     0,
!     -273,   169,     0,     0,  -273,   -23,   170,   171,   401,     0,
!        0,     5,   173,   174,     8,     9,     0,   175,   157,     0,
!       10,    11,    12,     0,   158,   159,     0,   160,     0,     0,
!        0,     0,     0,  -251,     0,     0,    14,     0,    15,     0,
!        0,     0,   176,   177,     0,   161,   402,    16,     0,   162,
!      163,   164,   165,   166,     0,     0,     0,   167,     5,     6,
!        7,     8,   122,   168,     0,     0,   169,    10,    11,    12,
!        0,   170,   171,   172,     0,     0,     5,   173,   174,     8,
!       77,     0,   175,    14,     0,    10,    11,    12,     0,     0,
!        0,     0,     0,   541,   542,     6,     7,     8,     9,   158,
!      159,    14,   160,    10,    11,    12,     0,   176,   177,     0,
!        0,   491,   543,   544,   545,   546,   547,   548,   549,    14,
!      161,    15,    16,     0,   162,   163,   164,   165,   166,     0,
!        0,     0,   167,     0,     0,     0,     0,     0,   168,     0,
!        0,   169,     0,     0,  -253,     0,   170,   171,   172,     0,
!        0,     0,   173,   174,     0,     0,     0,   175,     0,     0,
!        0,     6,     7,     8,   104,     0,     0,   541,   149,    10,
!       11,    12,     0,   158,   159,     0,   160,     0,     0,     0,
!      550,     0,   176,   177,     0,   551,   543,   544,   545,   546,
!      547,   548,   549,     0,   161,     0,    16,     0,   162,   163,
!      164,   165,   166,     0,     0,     0,   167,   157,     0,     0,
!        0,     0,   168,   158,   159,   169,   160,     0,     0,     0,
!      170,   171,   172,     0,     0,     0,   173,   174,     0,     0,
!        0,   175,     0,     0,   161,     0,    16,     0,   162,   163,
!      164,   165,   166,     0,     0,     0,   167,     0,     0,     0,
!        0,     0,   168,     0,   550,   169,   176,   177,     0,   551,
!      170,   171,   172,     0,     0,     0,   173,   174,     0,     0,
!        0,   175,     0,     0,   157,     5,     6,     7,     8,     9,
!      158,   159,     0,   160,    10,    11,    12,   261,   262,   263,
!      264,   265,   266,   267,   268,   269,   176,   177,     0,   442,
!       14,   161,    15,    16,     0,   162,   163,   164,   165,   166,
!        0,     0,     0,   167,     0,     6,     7,     8,    99,   168,
!        0,     0,   169,    10,    11,    12,     0,   170,   171,   172,
!        0,     0,     0,   173,   174,     0,     0,     0,   175,   157,
!        5,    15,     0,     8,     9,   158,   159,     0,   160,    10,
!       11,    12,   259,   260,   261,   262,   263,   264,   265,   266,
!      267,   268,   269,   176,   177,    14,   161,    15,    16,     0,
!      162,   163,   164,   165,   166,     0,     0,     0,   167,   157,
!        0,     0,     0,     0,   168,   158,   159,   169,   160,     0,
!        0,     0,   170,   171,   172,     0,     0,     0,   173,   174,
!        0,     0,     0,   175,     0,     0,   161,     0,    16,     0,
!      162,   163,   164,   165,   166,     0,     0,     0,   167,     0,
!        0,     0,     0,     0,   168,     0,     0,   169,   176,   177,
!        0,     0,   170,   171,   172,     0,     0,     0,   173,   174,
!        0,     0,     0,   175,   157,     0,     0,     0,     0,     0,
!      158,   159,     0,   160,     6,     7,     8,   135,     0,     0,
!        0,     0,    10,    11,    12,     0,   630,     0,   176,   177,
!        0,   161,     0,    16,     0,   162,   163,   164,   165,   166,
!       15,     0,     0,   167,   157,     0,     0,     0,     0,   168,
!      158,   159,   169,   160,     0,     0,     0,   170,   171,   172,
!        0,     0,     0,   173,   174,     0,     0,     0,   175,     0,
!        0,   161,     0,    16,     0,   162,   163,   164,   165,   166,
!        0,     0,     0,   167,     0,     0,     0,     0,     0,   168,
!        0,     0,   169,   176,   177,     0,     0,   170,   171,   172,
!        0,     0,     0,   173,   174,     0,     0,     0,   249,   157,
!        0,     0,     0,     0,     0,   158,   159,     0,   160,     0,
!        5,     6,     7,     8,     9,     0,     0,   670,     0,    10,
!       11,    12,     0,   176,   177,     0,   161,     0,    16,     0,
!      162,   163,   164,   165,   166,    14,     0,    15,   167,   470,
!        0,     0,     0,     0,   168,   158,   159,   169,   160,     0,
!        0,     0,   170,   171,   172,     0,     0,     0,   173,   174,
!        0,     0,     0,   251,     0,     0,   161,     0,    16,     0,
!      162,   163,   164,   165,   166,     0,     0,     0,   167,     0,
!        0,     0,     0,     0,   168,     0,     0,   169,   176,   177,
!        0,     0,   170,   171,   172,     0,     0,     0,   173,   174,
!        0,     0,     0,   175,     4,   764,  -117,     5,     6,     7,
!        8,     9,     6,     7,     8,   140,    10,    11,    12,     0,
!       10,    11,    12,     0,     0,     0,     0,     0,   176,   177,
!        0,    13,    14,     0,    15,    16,     0,   253,   254,   255,
!        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
!      265,   266,   267,   268,   269,     0,     0,     0,     0,     0,
!        0,  -117,     0,     0,     0,     0,     0,   253,   254,   255,
!     -117,   256,   257,   258,   259,   260,   261,   262,   263,   264,
!      265,   266,   267,   268,   269,     0,     0,     0,     0,     0,
!      765,     0,     0,    17,   253,   254,   255,     0,   256,   257,
!      258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
!      268,   269,     0,     0,     0,     0,     0,   253,   254,   255,
!      492,   256,   257,   258,   259,   260,   261,   262,   263,   264,
!      265,   266,   267,   268,   269,   262,   263,   264,   265,   266,
!      267,   268,   269,     0,   253,   254,   255,   582,   256,   257,
!      258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
!      268,   269,     0,     0,     0,     0,     0,   253,   254,   255,
!      583,   256,   257,   258,   259,   260,   261,   262,   263,   264,
!      265,   266,   267,   268,   269,     0,     0,     0,     0,     0,
!        0,     0,     0,     0,   253,   254,   255,   826,   256,   257,
!      258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
!      268,   269,     0,     0,   717,   253,   254,   255,   439,   256,
!      257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
!      267,   268,   269,   258,   259,   260,   261,   262,   263,   264,
!      265,   266,   267,   268,   269,   440,   253,   254,   255,   718,
!      256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
!      266,   267,   268,   269,     0,     0,   609,   253,   254,   255,
!        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
!      265,   266,   267,   268,   269,     0,   322,     0,     0,     5,
!        0,     0,     8,     9,     0,     0,     0,     0,    10,    11,
!       12,     0,     0,     0,     0,     0,    15,     0,     0,     0,
!        0,     0,     0,   763,    14,     0,    15,    16,   253,   254,
!      255,     0,   256,   257,   258,   259,   260,   261,   262,   263,
!      264,   265,   266,   267,   268,   269,     5,     6,     7,     8,
!      108,     0,     0,     0,     0,    10,    11,    12,     5,     6,
!        7,     8,    81,     0,     0,     0,     0,    10,    11,    12,
!        0,    14,     0,    15,     0,     0,     0,     5,     6,     7,
!        8,   117,     0,    14,     0,    15,    10,    11,    12,     5,
!        6,     7,     8,    86,     0,     0,     0,     0,    10,    11,
!       12,     0,    14,     0,    15,     0,     5,     6,     7,     8,
!      122,     0,     0,     0,    14,    10,    11,    12,     5,     0,
!        0,     8,    86,     0,     0,     0,     0,    10,    11,    12,
!        0,    14,     0,     0,     0,     0,     0,     0,     0,     0,
!        0,     0,     0,    14,   253,   254,   255,   804,   256,   257,
!      258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
!      268,   269,   253,   254,   255,     0,   256,   257,   258,   259,
!      260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
!      255,     0,   256,   257,   258,   259,   260,   261,   262,   263,
!      264,   265,   266,   267,   268,   269,   257,   258,   259,   260,
!      261,   262,   263,   264,   265,   266,   267,   268,   269
  };
  
  static const short yycheck[] =
  {
!       63,   570,    65,     2,     3,    23,     2,     3,   316,     2,
!        3,     2,     3,   314,   289,   214,   223,   472,   274,   320,
!      219,     2,     3,   563,   145,     2,     3,   152,   144,     2,
!        3,     2,     3,   464,   464,   464,   464,   175,     2,     3,
!      304,   576,   495,   214,     1,     1,    51,    52,    53,   622,
!      307,     3,     4,     3,     4,   307,     3,    56,   229,   464,
!       56,   307,   312,    56,   837,    56,     3,     4,    67,   307,
!        8,    67,     1,     0,    46,    56,   472,    10,     1,    56,
!        1,     1,     1,    56,   732,    56,   694,    46,     2,     3,
!       67,   864,    56,    31,     0,     3,    10,    11,    12,   298,
!      708,   239,    67,    67,    46,   533,     3,     4,     8,    56,
!       24,   249,    26,   251,    28,   379,    30,    89,    32,    31,
!       34,    89,    36,    67,    38,   379,    94,   145,   533,   385,
!       89,    31,   563,   563,   563,    68,   784,    67,    95,    95,
!      713,   398,    56,    95,    67,    95,   398,    89,   579,   579,
!       58,    65,   398,    67,    48,     8,   584,    67,    95,    67,
!      398,    58,    91,   168,   335,    58,    60,    61,    62,    95,
!       91,    91,    91,    31,    67,    68,   162,   163,    31,   575,
!      576,    75,    67,    68,   189,   638,   172,   386,   206,   207,
!       84,   839,   178,   379,   767,    90,     3,   461,   473,    93,
!      848,    67,   188,   457,   458,   459,   460,    28,   102,    67,
!       68,   336,   275,   338,    95,   214,    28,   111,   214,    31,
!      219,   756,   757,   219,    28,   794,   120,    31,   233,   877,
!      229,    95,    44,   229,    31,   129,   229,   214,   229,    46,
!       44,   781,   219,   593,   138,   595,    67,    68,   229,    46,
!      214,    58,   229,    89,    89,   219,   229,    89,   229,    94,
!       67,   175,    94,    67,    68,   229,    67,   272,   273,    67,
!       31,   457,   458,   459,   460,   293,    90,   191,    90,   193,
!       94,   195,    94,   197,    94,    46,    90,   201,   743,   203,
!       94,   309,   310,   356,   501,    44,    89,   752,    89,   298,
!      214,   439,   298,   441,     3,   219,    67,    68,   307,   565,
!        3,   307,   428,   570,   208,   229,   307,    66,   570,    68,
!        8,   298,   579,     8,   570,   239,   307,   579,     3,     4,
!        3,     4,   570,   579,   298,   249,   335,   251,   343,   335,
!       67,   579,   335,    89,   335,    40,    41,   743,    94,   599,
!      781,   781,   781,   603,   335,     6,   752,     8,   335,    58,
!      756,   757,   335,   349,   335,    58,    67,    68,    67,    68,
!       91,   335,    91,   378,    67,    68,   497,     3,     4,   384,
!       31,    90,    91,    58,   298,    58,    68,   386,    89,    67,
!      386,    89,    67,    68,    67,     5,     6,     7,     8,   398,
!       89,   464,   398,    13,    14,    15,    89,   398,    89,   386,
!      324,   429,   326,    94,   328,   401,   330,   398,   846,   847,
!       46,   335,   386,    67,    68,     4,     5,     6,     7,     8,
!       90,   436,    58,    90,    13,    14,    15,    94,   746,    89,
!      748,    67,    67,    68,    24,    25,    26,    27,   457,   458,
!       29,   460,    32,    33,    34,    35,    46,   656,    90,   464,
!       67,    68,    94,    90,    89,   464,   665,    94,   464,   744,
!      533,   464,   386,   464,   775,    33,   777,    90,   753,   497,
!       90,    94,    89,   464,   547,    90,    90,   464,    90,    94,
!       94,   464,    94,   464,    90,   409,    89,   411,    94,   413,
!      464,   415,    24,    25,    26,    27,    28,    29,    30,    31,
!       32,    33,    34,    35,    36,    37,    38,    39,   639,   726,
!       10,   526,   638,    90,    91,   439,   302,   441,   533,     3,
!        4,   213,    44,     1,   216,     3,     4,   794,   220,    58,
!       59,    60,   794,   548,    24,    25,    26,    27,   794,     6,
!      464,    90,    32,    33,    34,    35,   794,   575,   576,    56,
!       57,    58,    59,    60,   563,    67,    68,   563,    44,   632,
!      563,   570,   563,    90,   570,    67,    68,   563,    94,   570,
!      579,    94,   563,   579,   700,    89,   563,    46,   579,   570,
!      563,    16,   563,    18,    19,    20,    21,    96,   579,   563,
!       67,    68,   579,   379,   182,   183,   579,   612,   579,   309,
!      310,   191,   192,   193,   194,   579,     4,     5,     6,     7,
!        8,   639,     7,     8,    89,    13,    14,    15,    13,    14,
!       15,   743,   744,   315,   316,    89,    89,   332,   333,   321,
!       89,    29,    90,    31,    90,    44,    31,   423,    91,   563,
!      426,    91,    91,    95,    46,   337,     1,   656,    91,   722,
!      656,    89,    89,    89,    28,   579,   665,   189,    91,   665,
!       94,   734,    94,    89,    89,    46,    46,   740,    46,   656,
!       90,   457,   458,   459,   460,   703,    90,     8,   665,     7,
!        8,    91,   656,    90,    90,    13,    14,    15,    89,     3,
!       95,   665,    90,    62,    63,   387,    65,    66,    67,    68,
!       46,   191,   192,   193,   194,   778,   779,    91,   781,    94,
!       67,    90,   417,   418,    90,   743,   744,    54,    55,    56,
!       57,    58,    59,    60,   752,   753,    46,    67,   756,   757,
!       17,    90,   656,    67,   324,   325,   326,   327,     7,     8,
!      664,   665,    67,   224,    13,    14,    15,   671,    67,   673,
!       91,   675,    91,   677,    18,   679,    89,   681,    90,   683,
!       89,   685,    31,    89,   837,    89,   552,    90,   841,    90,
!       67,    89,   781,    90,    96,   781,   481,   482,   781,    94,
!      781,    90,    10,   475,    67,   794,    10,    90,   794,    89,
!      781,   864,   865,   794,   781,    89,    10,    90,   781,     0,
!      781,     4,   385,   794,     7,     8,     0,   781,   289,   305,
!       13,    14,    15,   828,   506,   579,   579,   579,   510,   409,
!      410,   513,   514,   413,   414,   517,    29,   579,    31,   422,
!       28,    29,    30,    31,   324,   325,   326,   327,    36,    37,
!       38,    39,     1,   384,   594,     4,   307,   751,     7,     8,
!      555,   556,   384,   307,    13,    14,    15,   781,    28,    29,
!       30,    31,   293,   711,   621,   743,    36,    37,    38,    39,
!       29,   756,    31,    32,   438,   335,   703,   409,   410,   411,
!      412,   413,   414,   415,   416,     1,   343,   700,     4,     5,
!        6,     7,     8,     5,     6,     7,     8,    13,    14,    15,
!      436,    13,    14,    15,   596,   785,   380,   559,   600,   843,
!      787,   392,   475,    29,    -1,   607,   482,   845,    -1,   409,
!      410,     7,     8,   413,   414,    -1,    -1,    13,    14,    15,
!        1,    90,    91,     4,     5,     6,     7,     8,    -1,   420,
!      421,    -1,    13,    14,    15,     3,     4,     5,     6,     7,
!        8,   737,    -1,     5,     6,     7,     8,    28,    29,    -1,
!       31,    13,    14,    15,    -1,   657,   658,    -1,    -1,   661,
!       -1,    -1,    -1,    44,   666,   667,    -1,   669,    90,    95,
!       -1,    -1,   687,   688,     4,     5,     6,     7,     8,    -1,
!       -1,   472,   473,    13,    14,    15,    -1,   195,   196,   197,
!      198,   787,    -1,     5,     6,     7,     8,   699,    -1,    29,
!      702,    13,    14,    15,    -1,    -1,    -1,    -1,    -1,    90,
!       -1,   807,   808,    94,    95,   195,   196,   197,   198,    31,
!        1,   723,    -1,     4,     5,     6,     7,     8,    90,    -1,
!       -1,    -1,    13,    14,    15,    -1,   237,   238,    -1,    -1,
!       -1,    -1,    -1,    -1,   746,    -1,   748,   248,    29,    -1,
!       -1,    -1,   253,   254,    -1,    -1,    -1,   258,   259,   260,
!      261,   262,   263,   264,   265,   266,   267,   268,   269,    -1,
!       -1,   671,   672,   673,   674,    -1,    -1,    -1,    90,   679,
!      680,   681,   682,    -1,   575,   576,    -1,    -1,    -1,    -1,
!       -1,    -1,    -1,   795,   796,    -1,   798,     1,    -1,   300,
!        4,     5,     6,     7,     8,    -1,    -1,    11,    -1,    13,
!       14,    15,    -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,
!      328,   329,   330,   331,    -1,    29,    -1,    -1,    -1,   671,
!      672,   673,   674,   675,   676,   677,   678,   679,   680,   681,
!      682,   683,   684,   685,   686,    -1,    -1,    -1,   328,   329,
!      330,   331,     4,     5,     6,     7,     8,   358,   359,    -1,
!       -1,    13,    14,    15,    -1,    -1,    -1,    -1,   659,   660,
!       -1,   671,   672,   673,   674,    -1,    -1,    29,    -1,   679,
!      680,   681,   682,     1,    -1,    89,     4,     5,     6,     7,
!        8,    -1,    -1,    -1,    -1,    13,    14,    15,   399,   400,
!       -1,    -1,    -1,   411,   412,    -1,    -1,   415,   416,    -1,
!       28,    29,    -1,    31,    -1,     1,    -1,     3,     4,     5,
!        6,     7,     8,    -1,    -1,    11,    44,    13,    14,    15,
!       -1,   411,   412,    -1,   435,   415,   416,    -1,    90,   440,
!       -1,    -1,    -1,    29,    -1,    -1,   447,    -1,    -1,    67,
!       68,    -1,   743,   744,    -1,    -1,    -1,    -1,    -1,    -1,
!       -1,   752,   753,    -1,    -1,   756,   757,    -1,    -1,    -1,
!       -1,    -1,    90,    -1,    -1,    -1,    94,    95,    -1,    -1,
!        4,     5,     6,     7,     8,     5,     6,     7,     8,    13,
!       14,    15,    -1,    13,    14,    15,    -1,   498,   789,   790,
!      791,    -1,    -1,    89,   505,    29,    -1,    31,   509,    -1,
!       -1,    31,    -1,    -1,     5,     6,     7,     8,    -1,    -1,
!       -1,   522,    13,    14,    15,    -1,     1,    -1,     3,     4,
!        5,     6,     7,     8,     9,    10,    -1,    12,    13,    14,
!       15,    16,   543,    18,    19,    20,    21,    22,    23,    24,
!       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
!       35,    36,    37,    38,    -1,    -1,    90,    42,    -1,    -1,
!       90,    -1,    -1,    48,    -1,    -1,    51,    -1,    -1,    -1,
!       -1,    56,    57,    58,    -1,    -1,    -1,    62,    63,    -1,
!       -1,    -1,    67,   594,    -1,     1,   597,     3,     4,    90,
!      601,    -1,    -1,     9,    10,    -1,    12,    -1,   609,    -1,
!       -1,    -1,   613,    -1,    -1,    90,    91,    92,    93,    -1,
!       95,   622,   623,    -1,    30,    -1,    32,    -1,    34,    35,
!       36,    37,    38,    -1,    -1,    -1,    42,    -1,     5,     6,
!        7,     8,    48,    -1,    -1,    51,    13,    14,    15,    -1,
!       56,    57,    58,    -1,    -1,     4,    62,    63,     7,     8,
!       66,    67,    68,    -1,    13,    14,    15,   675,   676,   677,
!      678,    -1,    -1,    -1,    -1,   683,   684,   685,   686,    -1,
!       29,    -1,    31,    -1,    -1,    91,    92,    93,    -1,    95,
!       -1,    -1,    -1,   694,    -1,   675,   676,   677,   678,    -1,
!       -1,    -1,    -1,   683,   684,   685,   686,   708,    -1,    -1,
!      711,    -1,   713,    -1,    -1,     1,   717,     3,     4,     5,
!        6,     7,     8,     9,    10,    -1,    12,    13,    14,    15,
!       16,    -1,    18,    19,    20,    21,    22,    23,    24,    25,
!       26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
!       36,    37,    38,    -1,    -1,    -1,    42,    -1,    -1,    -1,
!       -1,    -1,    48,   764,    -1,    51,   767,    -1,    -1,    -1,
!       56,    57,    58,    -1,    -1,    -1,    62,    63,    -1,    -1,
!       -1,    67,    -1,    -1,    -1,    -1,    -1,     4,     5,     6,
!        7,     8,     5,     6,     7,     8,    13,    14,    15,    -1,
!       13,    14,    15,    -1,    90,    -1,    92,    93,     1,    95,
!        3,     4,    29,    -1,    31,    -1,     9,    10,    31,    12,
!       -1,    -1,    -1,    16,    -1,    18,    19,    20,    21,    22,
!       23,    24,    25,    26,    27,    28,    -1,    30,    -1,    32,
!       -1,    34,    35,    36,    37,    38,    -1,    -1,    -1,    42,
!        4,     5,     6,     7,     8,    48,    -1,    -1,    51,    13,
!       14,    15,    -1,    56,    57,    58,    -1,    -1,    -1,    62,
!       63,    -1,    -1,    90,    67,    29,    -1,    90,    -1,    -1,
!        4,     5,     6,     7,     8,     5,     6,     7,     8,    13,
!       14,    15,    -1,    13,    14,    15,    -1,    90,    -1,    92,
!       93,     1,    95,     3,     4,    29,    -1,    31,    -1,     9,
!       10,    31,    12,    -1,    -1,    -1,    16,    -1,    18,    19,
!       20,    21,    22,    23,    24,    25,    26,    27,    28,    -1,
!       30,    -1,    32,    -1,    34,    35,    36,    37,    38,    -1,
!       -1,    -1,    42,    -1,     5,     6,     7,     8,    48,    -1,
!       -1,    51,    13,    14,    15,    -1,    56,    57,    58,    -1,
!       -1,    -1,    62,    63,    -1,    -1,    90,    67,     1,    -1,
!        3,     4,    -1,    -1,     7,     8,     9,    10,    -1,    12,
!       13,    14,    15,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
!       90,    -1,    92,    93,    -1,    95,    29,    30,    31,    32,
!       -1,    34,    35,    36,    37,    38,    -1,    -1,     1,    42,
!        3,     4,    -1,    -1,    -1,    48,     9,    10,    51,    12,
!       -1,    -1,    -1,    56,    57,    58,    -1,    -1,    -1,    62,
!       63,    -1,    -1,    -1,    67,    -1,    -1,    30,    -1,    32,
!       -1,    34,    35,    36,    37,    38,    -1,    -1,    -1,    42,
!       -1,    -1,    -1,    -1,    -1,    48,    -1,    -1,    51,    92,
!       93,    -1,    95,    56,    57,    58,    -1,    -1,    -1,    62,
!       63,    -1,    -1,    66,    67,    68,     1,    -1,     3,    -1,
!       -1,    -1,    -1,    -1,     9,    10,    -1,    12,    51,    52,
!       53,    54,    55,    56,    57,    58,    59,    60,    91,    92,
!       93,    -1,    95,    -1,    -1,    30,    -1,    32,    -1,    34,
!       35,    36,    37,    38,    -1,    -1,     1,    42,     3,    44,
!       -1,    -1,    -1,    48,     9,    10,    51,    12,    -1,    -1,
!       -1,    56,    57,    58,    -1,    -1,    -1,    62,    63,    -1,
!       -1,    66,    67,    68,    -1,    30,    -1,    32,    -1,    34,
!       35,    36,    37,    38,    -1,    -1,    -1,    42,    -1,    -1,
!       -1,    -1,    -1,    48,    -1,    -1,    51,    92,    93,    -1,
!       95,    56,    57,    58,    -1,    -1,    -1,    62,    63,    -1,
!       -1,    -1,    67,     1,    -1,     3,    -1,    -1,    -1,    -1,
!       -1,     9,    10,    -1,    12,     5,     6,     7,     8,    -1,
!       -1,    -1,    -1,    13,    14,    15,    -1,    92,    93,    -1,
!       95,    -1,    30,    -1,    32,    -1,    34,    35,    36,    37,
!       38,    31,    -1,    -1,    42,     4,     5,     6,     7,     8,
!       48,    -1,    -1,    51,    13,    14,    15,    -1,    56,    57,
!       58,    -1,    -1,    -1,    62,    63,    -1,    -1,    -1,    67,
!       29,     1,    -1,    -1,     4,     5,     6,     7,     8,     5,
!        6,     7,     8,    13,    14,    15,    -1,    13,    14,    15,
!       -1,    -1,    -1,    -1,    92,    93,    -1,    95,    28,    29,
!       90,    31,    -1,    -1,    -1,    31,    -1,     4,     5,     6,
!        7,     8,    -1,     3,    44,    -1,    13,    14,    15,     9,
!       10,    -1,    12,    -1,     4,     5,     6,     7,     8,    -1,
!       -1,    90,    29,    13,    14,    15,    -1,    67,    68,    -1,
!       30,    -1,    32,    -1,    34,    35,    36,    37,    38,    29,
!       -1,    31,    42,    -1,    -1,    -1,    -1,    -1,    48,    -1,
!       90,    51,    -1,    -1,    94,    95,    56,    57,    58,    -1,
!       -1,     4,    62,    63,     7,     8,    -1,    67,     3,    -1,
!       13,    14,    15,    -1,     9,    10,    -1,    12,    -1,    -1,
!       -1,    -1,    -1,    90,    -1,    -1,    29,    -1,    31,    -1,
!       -1,    -1,    92,    93,    -1,    30,    96,    32,    -1,    34,
!       35,    36,    37,    38,    -1,    -1,    -1,    42,     4,     5,
!        6,     7,     8,    48,    -1,    -1,    51,    13,    14,    15,
!       -1,    56,    57,    58,    -1,    -1,     4,    62,    63,     7,
!        8,    -1,    67,    29,    -1,    13,    14,    15,    -1,    -1,
!       -1,    -1,    -1,     3,     4,     5,     6,     7,     8,     9,
!       10,    29,    12,    13,    14,    15,    -1,    92,    93,    -1,
!       -1,    96,    22,    23,    24,    25,    26,    27,    28,    29,
!       30,    31,    32,    -1,    34,    35,    36,    37,    38,    -1,
!       -1,    -1,    42,    -1,    -1,    -1,    -1,    -1,    48,    -1,
!       -1,    51,    -1,    -1,    90,    -1,    56,    57,    58,    -1,
!       -1,    -1,    62,    63,    -1,    -1,    -1,    67,    -1,    -1,
!       -1,     5,     6,     7,     8,    -1,    -1,     3,     4,    13,
!       14,    15,    -1,     9,    10,    -1,    12,    -1,    -1,    -1,
!       90,    -1,    92,    93,    -1,    95,    22,    23,    24,    25,
!       26,    27,    28,    -1,    30,    -1,    32,    -1,    34,    35,
!       36,    37,    38,    -1,    -1,    -1,    42,     3,    -1,    -1,
!       -1,    -1,    48,     9,    10,    51,    12,    -1,    -1,    -1,
!       56,    57,    58,    -1,    -1,    -1,    62,    63,    -1,    -1,
!       -1,    67,    -1,    -1,    30,    -1,    32,    -1,    34,    35,
!       36,    37,    38,    -1,    -1,    -1,    42,    -1,    -1,    -1,
!       -1,    -1,    48,    -1,    90,    51,    92,    93,    -1,    95,
!       56,    57,    58,    -1,    -1,    -1,    62,    63,    -1,    -1,
!       -1,    67,    -1,    -1,     3,     4,     5,     6,     7,     8,
!        9,    10,    -1,    12,    13,    14,    15,    52,    53,    54,
!       55,    56,    57,    58,    59,    60,    92,    93,    -1,    95,
!       29,    30,    31,    32,    -1,    34,    35,    36,    37,    38,
!       -1,    -1,    -1,    42,    -1,     5,     6,     7,     8,    48,
!       -1,    -1,    51,    13,    14,    15,    -1,    56,    57,    58,
!       -1,    -1,    -1,    62,    63,    -1,    -1,    -1,    67,     3,
!        4,    31,    -1,     7,     8,     9,    10,    -1,    12,    13,
!       14,    15,    50,    51,    52,    53,    54,    55,    56,    57,
!       58,    59,    60,    92,    93,    29,    30,    31,    32,    -1,
!       34,    35,    36,    37,    38,    -1,    -1,    -1,    42,     3,
!       -1,    -1,    -1,    -1,    48,     9,    10,    51,    12,    -1,
!       -1,    -1,    56,    57,    58,    -1,    -1,    -1,    62,    63,
!       -1,    -1,    -1,    67,    -1,    -1,    30,    -1,    32,    -1,
!       34,    35,    36,    37,    38,    -1,    -1,    -1,    42,    -1,
!       -1,    -1,    -1,    -1,    48,    -1,    -1,    51,    92,    93,
!       -1,    -1,    56,    57,    58,    -1,    -1,    -1,    62,    63,
!       -1,    -1,    -1,    67,     3,    -1,    -1,    -1,    -1,    -1,
!        9,    10,    -1,    12,     5,     6,     7,     8,    -1,    -1,
!       -1,    -1,    13,    14,    15,    -1,    90,    -1,    92,    93,
!       -1,    30,    -1,    32,    -1,    34,    35,    36,    37,    38,
!       31,    -1,    -1,    42,     3,    -1,    -1,    -1,    -1,    48,
!        9,    10,    51,    12,    -1,    -1,    -1,    56,    57,    58,
!       -1,    -1,    -1,    62,    63,    -1,    -1,    -1,    67,    -1,
!       -1,    30,    -1,    32,    -1,    34,    35,    36,    37,    38,
!       -1,    -1,    -1,    42,    -1,    -1,    -1,    -1,    -1,    48,
!       -1,    -1,    51,    92,    93,    -1,    -1,    56,    57,    58,
!       -1,    -1,    -1,    62,    63,    -1,    -1,    -1,    67,     3,
!       -1,    -1,    -1,    -1,    -1,     9,    10,    -1,    12,    -1,
!        4,     5,     6,     7,     8,    -1,    -1,    11,    -1,    13,
!       14,    15,    -1,    92,    93,    -1,    30,    -1,    32,    -1,
!       34,    35,    36,    37,    38,    29,    -1,    31,    42,     3,
!       -1,    -1,    -1,    -1,    48,     9,    10,    51,    12,    -1,
!       -1,    -1,    56,    57,    58,    -1,    -1,    -1,    62,    63,
!       -1,    -1,    -1,    67,    -1,    -1,    30,    -1,    32,    -1,
!       34,    35,    36,    37,    38,    -1,    -1,    -1,    42,    -1,
!       -1,    -1,    -1,    -1,    48,    -1,    -1,    51,    92,    93,
!       -1,    -1,    56,    57,    58,    -1,    -1,    -1,    62,    63,
!       -1,    -1,    -1,    67,     1,    11,     3,     4,     5,     6,
!        7,     8,     5,     6,     7,     8,    13,    14,    15,    -1,
!       13,    14,    15,    -1,    -1,    -1,    -1,    -1,    92,    93,
!       -1,    28,    29,    -1,    31,    32,    -1,    43,    44,    45,
!       -1,    47,    48,    49,    50,    51,    52,    53,    54,    55,
!       56,    57,    58,    59,    60,    -1,    -1,    -1,    -1,    -1,
!       -1,    58,    -1,    -1,    -1,    -1,    -1,    43,    44,    45,
!       67,    47,    48,    49,    50,    51,    52,    53,    54,    55,
!       56,    57,    58,    59,    60,    -1,    -1,    -1,    -1,    -1,
!       96,    -1,    -1,    90,    43,    44,    45,    -1,    47,    48,
!       49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
!       59,    60,    -1,    -1,    -1,    -1,    -1,    43,    44,    45,
!       96,    47,    48,    49,    50,    51,    52,    53,    54,    55,
!       56,    57,    58,    59,    60,    53,    54,    55,    56,    57,
!       58,    59,    60,    -1,    43,    44,    45,    96,    47,    48,
!       49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
!       59,    60,    -1,    -1,    -1,    -1,    -1,    43,    44,    45,
!       96,    47,    48,    49,    50,    51,    52,    53,    54,    55,
!       56,    57,    58,    59,    60,    -1,    -1,    -1,    -1,    -1,
!       -1,    -1,    -1,    -1,    43,    44,    45,    96,    47,    48,
!       49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
!       59,    60,    -1,    -1,    11,    43,    44,    45,    94,    47,
        48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
!       58,    59,    60,    49,    50,    51,    52,    53,    54,    55,
!       56,    57,    58,    59,    60,    94,    43,    44,    45,    46,
!       47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
!       57,    58,    59,    60,    -1,    -1,    94,    43,    44,    45,
!       -1,    47,    48,    49,    50,    51,    52,    53,    54,    55,
!       56,    57,    58,    59,    60,    -1,     1,    -1,    -1,     4,
!       -1,    -1,     7,     8,    -1,    -1,    -1,    -1,    13,    14,
!       15,    -1,    -1,    -1,    -1,    -1,    31,    -1,    -1,    -1,
!       -1,    -1,    -1,    89,    29,    -1,    31,    32,    43,    44,
!       45,    -1,    47,    48,    49,    50,    51,    52,    53,    54,
!       55,    56,    57,    58,    59,    60,     4,     5,     6,     7,
!        8,    -1,    -1,    -1,    -1,    13,    14,    15,     4,     5,
!        6,     7,     8,    -1,    -1,    -1,    -1,    13,    14,    15,
!       -1,    29,    -1,    31,    -1,    -1,    -1,     4,     5,     6,
!        7,     8,    -1,    29,    -1,    31,    13,    14,    15,     4,
!        5,     6,     7,     8,    -1,    -1,    -1,    -1,    13,    14,
!       15,    -1,    29,    -1,    31,    -1,     4,     5,     6,     7,
!        8,    -1,    -1,    -1,    29,    13,    14,    15,     4,    -1,
!       -1,     7,     8,    -1,    -1,    -1,    -1,    13,    14,    15,
!       -1,    29,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
!       -1,    -1,    -1,    29,    43,    44,    45,    46,    47,    48,
!       49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
!       59,    60,    43,    44,    45,    -1,    47,    48,    49,    50,
!       51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
!       45,    -1,    47,    48,    49,    50,    51,    52,    53,    54,
!       55,    56,    57,    58,    59,    60,    48,    49,    50,    51,
!       52,    53,    54,    55,    56,    57,    58,    59,    60
  };
  /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
  #line 3 "/usr/share/bison/bison.simple"
--- 809,1718 ----
     error. */
  static const short yydefact[] =
  {
!       11,    11,     3,     5,     0,     0,     0,   274,   305,   304,
!      271,   133,   361,   357,   359,     0,    59,     0,   573,    18,
!        4,     8,     7,     0,     0,   218,   219,   220,   221,   210,
!      211,   212,   213,   222,   223,   224,   225,   214,   215,   216,
!      217,   125,   125,     0,   141,   148,   268,   270,   269,   139,
!      289,   165,     0,     0,     0,   273,   272,     0,     9,     0,
!        6,    16,    17,   362,   358,   360,   540,     0,   540,     0,
!        0,   356,   266,   287,     0,   279,     0,   134,   146,   152,
!      136,   168,   135,   147,   153,   169,   137,   158,   163,   140,
!      175,   138,   159,   164,   176,   142,   144,   150,   149,   186,
!      143,   145,   151,   187,   154,   156,   161,   160,   201,   155,
!      157,   162,   202,   166,   184,   193,   172,   170,   167,   185,
!      194,   171,   173,   199,   208,   179,   177,   174,   200,   209,
!      178,   180,   182,   191,   190,   188,   181,   183,   192,   189,
!      195,   197,   206,   205,   203,   196,   198,   207,   204,     0,
!        0,    15,   290,    31,    32,   382,   373,   382,   374,   371,
!      375,   521,    10,     0,     0,   292,     0,    86,    87,    88,
!       57,    58,     0,     0,     0,     0,     0,    89,     0,     0,
!       33,    35,    34,     0,    36,    37,     0,    38,    39,     0,
!        0,    60,     0,     0,    62,    40,    46,   246,   247,   248,
!      249,   242,   243,   244,   245,   406,     0,     0,     0,   238,
!      239,   240,   241,   267,     0,     0,   288,    12,   287,    30,
!      539,   287,   266,     0,   355,   520,   287,   341,   266,   287,
!        0,   277,     0,   335,   336,     0,     0,     0,     0,   363,
!        0,   366,     0,   369,   522,   538,     0,   295,    55,    56,
!        0,     0,     0,     0,    50,    47,     0,   467,     0,     0,
!       49,     0,   275,     0,    51,     0,    53,     0,     0,    79,
!       77,    75,     0,     0,     0,     0,     0,     0,     0,     0,
!        0,     0,     0,     0,   108,   109,     0,     0,    42,     0,
!      408,   276,     0,     0,   463,     0,   456,   457,     0,    48,
!      354,     0,     0,   126,   565,   352,   266,   267,     0,     0,
!      469,     0,   469,   117,     0,   286,     0,     0,    14,   287,
!       22,     0,   287,   287,   339,    13,    26,     0,   287,   389,
!      384,   238,   239,   240,   241,   234,   235,   236,   237,   125,
!      125,   381,     0,   382,   287,   382,   403,   404,   378,   401,
!        0,   540,   302,   303,   300,     0,   293,   296,   301,     0,
!        0,     0,     0,     0,     0,     0,    93,    92,     0,    41,
!        0,     0,    85,    84,     0,     0,     0,     0,    73,    74,
!       72,    71,    70,    68,    69,    63,    64,    65,    66,    67,
!      107,   106,     0,    43,    44,     0,   266,   287,   407,   409,
!      414,   413,   415,   423,    95,   571,     0,   466,   438,   465,
!      469,   469,   469,   469,     0,   447,     0,     0,   433,   442,
!      458,    94,   353,   280,   519,     0,     0,     0,     0,   425,
!        0,   453,    28,   119,   118,   115,   230,   231,   226,   227,
!      232,   233,   228,   229,   125,   125,   284,   340,     0,     0,
!      469,   283,   338,   469,   365,   386,     0,   383,   390,     0,
!      368,     0,     0,   379,     0,   378,   518,   295,     0,    42,
!        0,   102,     0,   104,     0,   100,    98,    90,    61,    52,
!       54,     0,     0,    78,    76,    96,     0,   105,   417,   541,
!      422,   287,   421,   459,     0,   439,   434,   443,   440,   435,
!      444,     0,   436,   445,   441,   437,   446,   448,   464,    86,
!      274,   454,   454,   454,   454,   454,     0,     0,     0,     0,
!        0,     0,   528,   511,   462,   469,     0,   124,   125,   125,
!        0,   455,   512,   499,   500,   501,   502,   503,   513,   473,
!      474,   508,     0,     0,   569,   549,   125,   125,   567,     0,
!      550,   552,   566,     0,     0,     0,   426,   424,     0,   122,
!        0,   123,     0,     0,   337,   278,   519,    20,   281,    24,
!        0,   287,   385,   391,     0,   287,   387,   393,   287,   287,
!      405,   402,   287,     0,   294,   540,    86,     0,     0,     0,
!        0,     0,     0,    80,    83,    45,   416,   418,     0,     0,
!      541,   420,   572,   469,   469,   469,     0,     0,     0,   516,
!      504,   505,   506,     0,     0,     0,   529,   539,     0,   498,
!        0,     0,   131,   468,   132,   547,   564,   410,   410,   543,
!      544,     0,     0,   568,   427,   428,     0,    29,   460,     0,
!        0,   309,   307,   306,   285,     0,     0,     0,   287,     0,
!      395,   287,   287,     0,   398,   287,   364,   367,   372,   287,
!      291,     0,   297,   299,    97,     0,   103,   110,     0,   322,
!        0,     0,   319,     0,   321,     0,   376,   312,   318,     0,
!      323,     0,     0,   419,   542,     0,     0,   483,   489,     0,
!        0,   514,   507,     0,   509,     0,   287,     0,   129,   329,
!        0,   130,   332,   346,   266,   287,   287,   342,   343,   287,
!      561,   411,   414,   266,   287,   287,   563,   287,   551,   218,
!      219,   220,   221,   210,   211,   212,   213,   222,   223,   224,
!      225,   214,   215,   216,   217,   125,   125,   553,   570,   461,
!      120,   121,     0,    21,   282,    25,   397,   287,     0,   400,
!      287,     0,   370,     0,     0,     0,     0,    99,   325,     0,
!        0,   316,    91,     0,   311,     0,   324,   326,   315,    81,
!      469,   469,   484,   490,   492,     0,   469,     0,     0,   510,
!        0,   517,   127,     0,   128,     0,   417,   541,   559,   287,
!      345,   287,   348,   560,   412,   417,   541,   562,   545,   410,
!      410,     0,   396,   392,   399,   394,   298,   101,   111,     0,
!        0,   328,     0,     0,   313,   314,     0,     0,     0,   454,
!      491,   469,   496,   515,     0,   524,   469,   469,   349,   350,
!        0,   344,   347,     0,   287,   287,   556,   287,   558,   308,
!      112,     0,   320,   317,   475,   454,   483,   470,     0,   489,
!        0,   483,   540,   530,   330,   333,   351,   546,   554,   555,
!      557,   327,   470,   478,   481,   482,   484,   469,   486,   493,
!      489,   454,     0,     0,   525,   531,   532,   540,     0,     0,
!      469,   454,   454,   454,   472,   471,   487,   494,     0,   497,
!      523,     0,   530,     0,     0,   331,   334,   477,   476,   470,
!      479,   480,   485,     0,   483,     0,   526,   533,     0,   469,
!      469,   484,   540,     0,     0,     0,   454,     0,   527,   536,
!      539,     0,   495,     0,     0,   534,   488,     0,   537,   539,
!      535,     0,     0,     0
  };
  
  static const short yydefgoto[] =
  {
!      931,     1,     4,     5,    20,     2,    21,    22,   321,   645,
!      327,   647,   223,   558,   673,   189,   258,   392,   393,   191,
!      192,   193,    23,   194,   195,   377,   376,   374,   682,   375,
!      196,   592,   591,   668,   310,   311,   312,   435,   408,    24,
!      302,   527,   197,   198,   199,   200,   201,   202,   203,   204,
!       33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
!      546,   547,   339,   213,   205,    43,   214,    44,    45,    46,
!       47,    48,   230,    74,   231,   646,    75,   563,   303,   216,
!       50,   355,   356,   357,    51,   644,   742,   675,   676,   677,
!      813,   678,   760,   679,   680,   681,   698,   783,   878,   701,
!      785,   879,   566,   233,   706,   707,   708,   234,    52,    53,
!       54,    55,   343,   345,   350,   242,    56,   764,   464,   237,
!      238,   341,   572,   576,   573,   577,   348,   349,   206,   290,
!      398,   710,   711,   400,   401,   402,   224,   409,   410,   411,
!      412,   413,   414,   313,   847,   295,   296,   297,   637,   531,
!      298,   416,   207,   638,   314,   867,   863,   884,   885,   817,
!      864,   865,   533,   772,   819,   534,   535,   886,   903,   775,
!      776,   850,   888,   536,   537,   851,   538,   539,   540,   225,
!      226,    58,   541,   824,   617,   874,   875,   876,   918,   877,
!       67,   163,   490,   599,   548,   717,   833,   549,   550,   737,
!      551,   627,   305,   425,   552,   553,   406,   208
  };
  
  static const short yypact[] =
  {
!      113,   155,-32768,-32768,  1362,  1362,   281,-32768,-32768,-32768,
!   -32768,-32768,   104,   104,   104,    96,-32768,   100,-32768,-32768,
!   -32768,-32768,-32768,    54,   245,  1127,  1094,  1132,  1602,   202,
!     1193,   398,  1210,  1306,  1658,  1582,  1686,   554,  1260,   972,
!     1367,-32768,-32768,   117,-32768,-32768,-32768,-32768,-32768,   104,
!   -32768,-32768,    74,    76,    84,-32768,-32768,   134,-32768,  1362,
!   -32768,-32768,-32768,   104,   104,   104,-32768,   157,-32768,   173,
!     2564,-32768,   271,   104,    41,-32768,  1468,-32768,-32768,-32768,
!      104,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   104,
!   -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   104,-32768,
!   -32768,-32768,-32768,-32768,-32768,-32768,-32768,   104,-32768,-32768,
!   -32768,-32768,-32768,-32768,-32768,-32768,   104,-32768,-32768,-32768,
!   -32768,-32768,-32768,-32768,-32768,   104,-32768,-32768,-32768,-32768,
!   -32768,-32768,-32768,-32768,   104,-32768,-32768,-32768,-32768,-32768,
!   -32768,-32768,-32768,   104,-32768,-32768,-32768,-32768,-32768,   284,
!      245,-32768,-32768,-32768,-32768,-32768,   164,-32768,   171,-32768,
!      189,-32768,-32768,   207,   301,-32768,   255,-32768,-32768,-32768,
!   -32768,-32768,  2646,  2646,   260,   310,   334,-32768,   342,   434,
!   -32768,-32768,-32768,  2646,-32768,-32768,  1030,-32768,-32768,  2646,
!      376,-32768,  2687,  2728,-32768,  3160,  1359,  2431,   607,  3041,
!     3153,   540,   582,   709,   759,-32768,   318,  1764,  2646,   278,
!      329,   285,   408,-32768,   245,   245,   104,-32768,   104,-32768,
!   -32768,   104,   369,   379,-32768,-32768,   104,-32768,   271,   104,
!       47,-32768,  1241,   470,   491,   180,  2092,   330,   994,-32768,
!      336,-32768,   378,-32768,-32768,-32768,   361,   645,-32768,-32768,
!     2646,  2439,  1716,  1808,-32768,-32768,   386,-32768,   473,   403,
!   -32768,  2646,-32768,  1030,-32768,  1030,-32768,  2646,  2646,   399,
!   -32768,-32768,  2646,  2646,  2646,  2646,  2646,  2646,  2646,  2646,
!     2646,  2646,  2646,  2646,-32768,-32768,   434,   434,  2646,  2646,
!      383,-32768,   405,   434,-32768,  1877,   431,-32768,   426,-32768,
!      491,   206,   245,-32768,-32768,-32768,   271,   469,  2107,   433,
!   -32768,   577,    57,-32768,  1691,   483,   284,   284,-32768,   104,
!   -32768,   379,   104,   104,-32768,-32768,-32768,   379,   104,-32768,
!   -32768,  2431,   607,  3041,  3153,   540,   582,   709,   759,-32768,
!      507,   441,  1159,-32768,   104,-32768,-32768,   487,   443,-32768,
!      378,-32768,-32768,-32768,-32768,   537,-32768,   474,-32768,  2916,
!      458,  2935,   460,   452,   475,   480,-32768,-32768,  2375,  3160,
!      482,   485,  3160,  3160,  2646,   534,  2646,  2646,  2532,   911,
!     1247,   959,  1058,   698,   698,   567,   567,-32768,-32768,-32768,
!   -32768,-32768,   495,   511,  3160,   308,   271,   104,-32768,-32768,
!   -32768,-32768,   597,-32768,-32768,-32768,   222,   433,-32768,-32768,
!       88,    90,    93,    94,   605,-32768,   516,  2259,-32768,-32768,
!   -32768,-32768,-32768,-32768,   225,   914,  2646,  2646,  2167,-32768,
!     2790,-32768,-32768,-32768,-32768,-32768,  2097,  3105,  1472,  1402,
!     2205,  3122,  1728,  1512,   523,   531,-32768,   470,   298,   284,
!   -32768,   587,-32768,-32768,-32768,   388,   114,-32768,-32768,   544,
!   -32768,   546,  2646,   434,   548,   443,-32768,   645,   552,  2769,
!     3054,-32768,  2646,-32768,  3054,-32768,-32768,-32768,-32768,   545,
!      545,    82,  2646,  3189,  3123,-32768,  2646,-32768,   383,   383,
!   -32768,   104,-32768,-32768,   434,-32768,-32768,-32768,-32768,-32768,
!   -32768,  2334,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   612,
!      614,-32768,-32768,-32768,-32768,-32768,  2646,   616,   578,   580,
!     2605,   144,   661,-32768,-32768,-32768,   240,-32768,-32768,-32768,
!      584,    69,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
!   -32768,-32768,  2503,   586,-32768,-32768,-32768,-32768,-32768,   599,
!      258,-32768,-32768,   592,  2818,  2839,-32768,-32768,    63,-32768,
!      284,-32768,   245,  1985,-32768,-32768,   647,-32768,-32768,-32768,
!     2646,   199,   598,-32768,  2646,   391,   620,-32768,   104,   104,
!     3160,-32768,   104,   606,-32768,-32768,   609,   604,   613,  2962,
!      622,   434,  1401,-32768,  3176,  3160,-32768,-32768,   626,   944,
!   -32768,-32768,-32768,-32768,-32768,-32768,   632,   655,  2985,-32768,
!   -32768,-32768,-32768,   320,  2646,   639,-32768,-32768,   684,-32768,
!      284,   245,-32768,-32768,-32768,-32768,-32768,   136,   209,-32768,
!   -32768,  1998,   730,-32768,-32768,-32768,   642,-32768,-32768,   365,
!      368,-32768,-32768,  3160,-32768,    63,  1985,    63,  3045,  2646,
!   -32768,   104,  3045,  2646,-32768,   104,-32768,-32768,-32768,   104,
!   -32768,  2646,-32768,-32768,-32768,  2646,-32768,-32768,   178,-32768,
!      434,  2646,-32768,   693,  3160,   654,   667,-32768,-32768,   186,
!   -32768,  1918,  2646,-32768,-32768,   702,   704,-32768,  2503,  2646,
!     2646,-32768,-32768,   373,-32768,   706,   104,   392,-32768,    83,
!      430,-32768,   448,-32768,   271,   104,   104,   636,   641,   229,
!   -32768,-32768,   104,   271,   104,   229,-32768,   104,-32768,  2097,
!     3105,  2297,  3135,  1472,  1402,  2236,  1747,  2205,  3122,  2516,
!     3140,  1728,  1512,  3100,  2325,-32768,-32768,-32768,-32768,-32768,
!   -32768,-32768,  1401,-32768,-32768,-32768,-32768,  3045,   388,-32768,
!     3045,   114,-32768,   640,  2888,   434,  2646,-32768,-32768,  1817,
!     1401,-32768,-32768,  1620,-32768,  2026,-32768,-32768,-32768,  3176,
!   -32768,-32768,-32768,   694,-32768,   700,-32768,   653,  3142,-32768,
!      301,-32768,-32768,   379,-32768,   379,   136,   233,-32768,   104,
!   -32768,   104,-32768,-32768,   104,   209,   209,-32768,-32768,   136,
!      209,   701,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   352,
!     2646,-32768,   703,  2026,-32768,-32768,  2646,   708,   718,-32768,
!   -32768,-32768,-32768,-32768,   720,   770,-32768,-32768,   636,   641,
!      305,-32768,-32768,   944,   104,   229,-32768,   229,-32768,-32768,
!   -32768,  2867,-32768,-32768,   694,-32768,-32768,-32768,   797,  2646,
!      737,-32768,-32768,   120,-32768,-32768,-32768,-32768,-32768,-32768,
!   -32768,-32768,-32768,-32768,   808,   813,-32768,-32768,-32768,-32768,
!     2646,-32768,   745,   434,   791,   747,-32768,-32768,   642,   642,
!       48,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   751,-32768,
!   -32768,   750,   120,   120,   785,-32768,-32768,-32768,-32768,-32768,
!   -32768,-32768,-32768,   786,-32768,   301,   814,-32768,  2646,   773,
!   -32768,-32768,-32768,   301,   685,   774,-32768,   799,   776,-32768,
!   -32768,   783,-32768,  2646,   301,-32768,-32768,   687,-32768,-32768,
!   -32768,   872,   873,-32768
  };
  
  static const short yypgoto[] =
  {
!   -32768,-32768,-32768,-32768,   191,   891,-32768,-32768,-32768,-32768,
!   -32768,-32768,-32768,-32768,   -28,-32768,   -69,   425,   235,   603,
!   -32768,-32768,-32768,  -127,  1076,-32768,-32768,-32768,-32768,-32768,
!   -32768,-32768,-32768,-32768,  -278,   588,-32768,-32768,   -50,   236,
!     -296,  -502,     0,     2,    24,    46,     4,     9,    31,   105,
!     -302,  -295,   267,   274,  -292,  -284,   275,   276,  -350,  -348,
!      594,   602,-32768,  -167,-32768,  -363,  -181,   794,   822,   471,
!      903,-32768,  -462,  -140,   453,-32768,   621,-32768,    34,   457,
!      -32,-32768,   444,-32768,   850,   279,-32768,  -636,-32768,   161,
!   -32768,  -628,-32768,-32768,   257,   259,-32768,-32768,-32768,-32768,
!   -32768,-32768,  -131,   481,   138,   153,    16,    18,-32768,-32768,
!   -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   488,  -118,
!   -32768,   615,-32768,-32768,   198,   196,   623,   492,  -100,-32768,
!   -32768,  -594,  -263,  -467,  -428,-32768,   601,-32768,-32768,-32768,
!   -32768,-32768,-32768,  -219,  -369,-32768,-32768,   658,  -434,-32768,
!      450,-32768,-32768,  -380,   451,  -777,  -767,  -222,  -213,  -727,
!   -32768,   -41,   102,  -732,  -631,-32768,-32768,-32768,-32768,  -741,
!   -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,    95,
!     -212,-32768,-32768,-32768,-32768,    91,-32768,    92,-32768,  -153,
!      -17,   -66,   484,-32768,  -596,-32768,-32768,-32768,-32768,-32768,
!   -32768,   437,  -285,-32768,-32768,-32768,-32768,    11
  };
  
  
! #define	YYLAST		3248
  
  
  static const short yytable[] =
  {
!       69,   190,   165,   684,    25,    25,    26,    26,    29,    29,
!      235,   246,   440,    30,    30,    59,    59,   152,   232,   441,
!      322,   596,   442,   449,   156,   158,   160,   399,    27,    27,
!      443,   152,   152,   152,   716,    31,    31,   532,   452,   240,
!      624,   308,    76,   450,   818,   248,   249,   316,   152,   453,
!       28,    28,   848,   768,   530,   307,   255,   152,  -114,    25,
!      597,    26,   260,    29,   636,   511,   152,   528,    30,   529,
!       59,   340,   209,   418,   210,   152,   415,   153,   154,   153,
!      154,   299,   419,    27,   152,   880,   259,   153,   154,  -449,
!       31,  -450,   433,   152,  -451,  -452,   211,    66,   639,    57,
!       57,    68,   152,   293,   889,    28,   801,   215,   869,    32,
!       32,   152,   220,    -1,   866,  -519,   902,    71,   212,   871,
!       70,   532,   909,   440,   812,   426,  -519,   593,   217,   887,
!      441,   245,   218,   442,   318,   897,    17,   815,   319,    71,
!      703,   443,   603,   604,   605,   606,   607,   153,   154,   922,
!     -114,   254,   363,   365,    57,    -2,   524,   294,   697,   574,
!      712,   712,  -539,   370,    32,   371,  -539,   155,   236,   157,
!     -519,    72,   911,   261,  -519,   340,  -429,   159,  -430,   530,
!       73,  -431,  -432,   915,   152,   843,   774,   873,   496,   499,
!      502,   505,   528,   704,   529,   507,    60,   497,   500,   503,
!      506,   614,   705,   222,   151,   836,   838,     8,     9,    10,
!       95,   743,    71,   745,   347,   488,    12,    13,    14,   354,
!      395,   161,   209,   164,   210,   459,   598,   461,   209,   765,
!      210,    17,   300,   301,    17,   883,    71,   857,   331,   166,
!      332,   478,   335,   755,   649,   756,   211,   336,    71,   342,
!      162,   670,   211,   671,   220,   304,   739,   239,   390,   391,
!      315,    17,   333,   317,   241,   405,   713,   325,   212,   337,
!      757,   218,   221,   222,   212,   714,   222,   149,   150,    11,
!      916,   735,   243,   736,   334,   466,    77,    71,   227,  -254,
!      704,   221,   222,    86,   244,   221,   222,   440,   422,   705,
!      222,   255,    72,    17,   441,   481,   209,   442,   210,   493,
!       17,    73,   245,   494,   436,   443,   437,    17,   438,   596,
!      424,   247,   347,   439,   571,   530,   250,   619,   596,   727,
!      211,   261,   712,   712,   300,   301,   728,    82,   528,   731,
!      529,   228,   331,   338,   332,   630,   335,   732,   526,   631,
!      229,   336,   212,   342,   322,   748,   451,   304,   597,   751,
!      495,   498,   454,   504,   323,   222,   333,   597,    61,    62,
!      588,   791,   222,   337,   590,   306,   251,    11,   460,   346,
!      309,   153,   154,  -469,  -469,  -469,  -469,  -469,   334,   525,
!      564,    71,   227,  -469,  -469,  -469,   209,   856,   210,   261,
!      252,    17,   487,     8,     9,    10,   104,   692,   253,  -469,
!      291,   261,    12,    13,    14,   299,    91,    25,   328,    26,
!      211,    29,   640,    17,   344,   436,    30,   437,   542,   438,
!       17,   489,   526,   570,   439,   347,   653,   153,   154,   354,
!      396,    27,   212,   261,   -82,   228,   840,   338,    31,   397,
!      222,   613,   740,   351,   229,   741,   319,   221,   222,   218,
!      779,    49,    49,    28,   261,   293,   602,   261,   262,    63,
!       64,    65,  -113,   525,   575,   427,   862,   220,   366,   782,
!     -519,   700,    80,   319,    89,  -256,    98,   322,   107,   699,
!      116,  -519,   125,   615,   134,   368,   143,   404,   895,   896,
!       96,   101,   105,   110,   831,   826,   832,   827,   132,   137,
!      141,   146,   899,   899,   221,   222,    49,   784,   421,   660,
!      431,   218,    32,   786,   598,   600,   446,    49,   457,    49,
!      462,   440,   795,   598,   463,  -519,   323,   222,   441,  -519,
!      469,   442,    25,   474,    26,   693,    29,    10,    95,   443,
!      471,    30,   473,   542,    12,    13,    14,   221,   222,     8,
!        9,    10,   131,   667,   261,   367,    27,   475,    12,    13,
!       14,   476,    17,    31,   479,   455,   456,   480,   309,   482,
!      424,  -116,  -116,  -116,  -116,  -116,    17,   485,    28,    10,
!      100,  -116,  -116,  -116,  -388,  -388,    12,    13,    14,   436,
!      695,   437,   486,   438,   508,   650,   309,  -116,   439,   654,
!      559,     7,   656,   657,    10,    82,   658,   571,   561,   773,
!      777,    12,    13,    14,   281,   282,   283,   825,   467,   468,
!      568,   719,   578,   720,   579,   723,   582,    16,   477,   702,
!      724,  -262,   758,    49,   585,   709,   715,    32,   153,   154,
!        8,     9,   352,   353,    80,   721,    89,   -31,    98,   -32,
!      107,   609,   725,   491,   222,   610,    80,   611,    89,   616,
!     -116,   622,    96,   101,   105,   110,   220,   722,   625,    49,
!      560,   562,   746,   632,   633,    49,   749,   809,    25,   651,
!       26,   629,    29,   752,   659,    49,   663,    30,   688,   542,
!      661,   662,   789,   222,   209,   664,   210,   791,   222,    49,
!       49,   655,    27,   209,   666,   210,    10,   104,   683,    31,
!       49,   689,    49,    12,    13,    14,   694,   808,   211,   696,
!      781,   486,   806,   738,    28,   524,   726,   211,   761,   787,
!      788,    17,   762,   793,   261,   822,   417,   844,   796,   797,
!      212,   798,   912,   279,   280,   281,   282,   283,   763,   212,
!      919,   432,   152,    49,   620,   621,    10,   109,   770,   575,
!      771,   928,   780,    12,    13,    14,   261,   920,   261,   929,
!      773,   802,   626,   626,   804,   261,   872,   820,    80,   839,
!       89,   842,    98,    32,   107,   264,   266,   447,   448,    49,
!      845,   773,   829,   830,   300,   301,    96,   101,   105,   110,
!      846,   894,   852,   300,   301,   853,   868,   835,   837,    78,
!       83,    87,    92,   304,   870,   304,   881,   114,   119,   123,
!      128,   882,   890,   436,   324,   437,   892,   438,   893,   914,
!      900,   901,   439,   904,   905,   891,   917,    79,    84,    88,
!       93,   908,   910,    49,   927,   115,   120,   124,   129,   913,
!      897,   417,   417,   501,   417,   923,   921,   924,   858,   859,
!      926,   860,   932,   933,    49,    81,    85,    90,    94,    99,
!      103,   108,   112,   117,   121,   126,   130,   135,   139,   144,
!      148,   403,     3,    80,   587,    98,   753,   116,   729,   134,
!      434,   567,   565,   925,   569,   730,   733,   734,   444,    96,
!      101,   584,   930,   132,   137,   543,   445,   544,     7,     8,
!        9,    10,    11,   423,   814,   744,   545,    49,    12,    13,
!       14,    49,    97,   102,   106,   111,   766,   834,   767,   828,
!      133,   138,   142,   147,    16,   543,   803,   805,     7,     8,
!        9,    10,    11,   583,   420,   581,   545,   458,    12,    13,
!       14,   274,   275,   276,   277,   278,   279,   280,   281,   282,
!      283,   799,   800,   465,    16,   601,   618,     8,     9,    10,
!      140,   623,   898,   906,   628,   907,    12,    13,    14,     0,
!        0,    78,    83,    87,    92,   329,     0,     0,     7,    49,
!        0,    10,    11,   492,    17,     0,  -548,     0,    12,    13,
!       14,   276,   277,   278,   279,   280,   281,   282,   283,    79,
!       84,    88,    93,     0,    16,     0,    17,    18,     0,     0,
!        0,   256,     0,   167,     7,     0,  -548,    10,    11,     0,
!      168,   169,     0,   170,    12,    13,    14,     0,   324,   324,
!        0,     0,     0,     0,   685,   686,   687,     0,     0,  -264,
!       16,   171,    17,    18,     0,   172,   173,   174,   175,   176,
!      177,   178,     0,     0,     0,     0,     0,   179,     0,     0,
!      180,   330,  -380,     0,     0,   181,   182,   183,    49,   403,
!      403,   184,   185,     0,     0,     0,   186,   358,     7,     8,
!        9,    10,    82,     0,    97,   102,   106,   111,    12,    13,
!       14,   277,   278,   279,   280,   281,   282,   283,     0,   187,
!      188,     0,     0,   257,    16,    78,    83,    87,    92,     0,
!        0,     7,     8,     9,    10,    77,     7,     8,     9,    10,
!       86,    12,    13,    14,     0,    49,    12,    13,    14,     0,
!        0,     0,     0,    79,    84,    88,    93,    16,     0,    17,
!      329,    49,    16,     7,    17,     0,    10,    11,     0,   794,
!       49,     0,     0,    12,    13,    14,    80,     0,    89,     0,
!       98,  -251,   107,     0,   116,     0,   125,     0,   134,    16,
!      143,    17,    18,     0,    96,   101,   105,   110,     8,     9,
!       10,   100,   132,   137,   141,   146,     0,    12,    13,    14,
!        0,     0,     0,     0,  -250,     8,     9,    10,   109,  -252,
!        0,   816,   816,     0,    12,    13,    14,   821,   403,   403,
!       78,    83,     0,     0,   114,   119,     0,     0,    97,   102,
!      106,   111,   320,     0,     0,   -19,   -19,   -19,   -19,   -19,
!        0,     0,     0,     0,     0,   -19,   -19,   -19,    79,    84,
!        0,     0,   115,   120,     0,     8,     9,    10,   136,     0,
!      220,   -19,   849,  -519,    12,    13,    14,   854,   855,     0,
!     -255,     0,     0,     0,  -519,     0,    81,    85,    99,   103,
!      117,   121,   135,   139,     0,     0,     0,  -257,   275,   276,
!      277,   278,   279,   280,   281,   282,   283,     0,   790,   792,
!        7,     8,     9,    10,   113,     0,     0,   358,   501,     0,
!       12,    13,    14,     0,     0,     0,   359,   361,  -519,     0,
!        0,   501,  -519,     0,   -19,     0,    16,   369,    17,     0,
!        0,    97,   102,   372,   373,   133,   138,  -263,   378,   379,
!      380,   381,   382,   383,   384,   385,   386,   387,   388,   389,
!      501,   816,     0,     6,   394,  -125,     7,     8,     9,    10,
!       11,     0,     8,     9,    10,   145,    12,    13,    14,     0,
!        0,    12,    13,    14,   430,     0,     0,   403,   403,     0,
!        0,    15,    16,  -258,    17,    18,   403,   403,     0,     0,
!      403,   403,   669,     0,   509,   154,     0,     8,     9,    10,
!      100,   168,   169,     0,   170,     0,    12,    13,    14,  -125,
!      284,   285,     0,   286,   287,   288,   289,     0,  -125,   790,
!      792,   792,   171,     0,    18,     0,   172,   173,   174,   175,
!      176,   177,   178,     0,     0,     0,     0,     0,   179,    19,
!        0,   180,   483,   484,  -265,     0,   181,   182,   183,     0,
!        0,     0,   184,   185,     0,     0,   670,   186,   671,   219,
!        0,     0,   -27,   -27,   -27,   -27,   -27,     8,     9,    10,
!       95,     0,   -27,   -27,   -27,     0,    12,    13,    14,  -310,
!      187,   188,     0,     0,   672,     0,     0,   220,   -27,     0,
!     -519,     0,   554,   555,    17,     0,     0,     0,     0,     0,
!        0,  -519,     0,    78,    83,    87,    92,     8,     9,    10,
!      136,   114,   119,   123,   128,     0,    12,    13,    14,     0,
!        0,     0,     0,     0,   221,   222,     0,     0,   580,     0,
!        0,    79,    84,    88,    93,   394,     0,     0,   589,   115,
!      120,   124,   129,     0,     0,  -519,     0,     0,   594,  -519,
!        0,   -27,   595,     0,     0,     0,     0,     0,     0,    81,
!       85,    90,    94,    99,   103,   108,   112,   117,   121,   126,
!      130,   135,   139,   144,   148,     0,     7,     8,     9,    10,
!      122,     0,   608,     0,     0,     0,    12,    13,    14,     0,
!        0,     0,     0,     0,     0,     0,     7,     8,     9,    10,
!       91,     0,    16,     0,    17,     0,    12,    13,    14,     0,
!        0,   669,     0,   509,   154,     0,    97,   102,   106,   111,
!      168,   169,    16,   170,   133,   138,   142,   147,     0,   643,
!        0,     0,     0,     0,     0,     0,   648,     0,     0,     0,
!      652,   171,     0,    18,     0,   172,   173,   174,   175,   176,
!      177,   178,     7,     8,     9,    10,   118,   179,   674,  -260,
!      180,     0,    12,    13,    14,   181,   182,   183,     0,     0,
!        0,   184,   185,     0,     0,   670,   186,   671,    16,  -253,
!        7,     8,     9,    10,   127,     7,     8,     9,    10,    11,
!       12,    13,    14,     0,     0,    12,    13,    14,  -377,   187,
!      188,     0,     0,   672,     0,     0,    16,   362,     0,     0,
!        7,    16,   643,    10,    11,   747,     0,     0,     0,   750,
!       12,    13,    14,     8,     9,    10,   131,   394,     0,     0,
!        0,   754,    12,    13,    14,  -259,    16,   759,    17,     0,
!        0,     0,     8,     9,    10,   109,     0,   674,   769,     0,
!       17,    12,    13,    14,     0,   292,   778,  -455,  -455,  -455,
!     -455,  -455,  -455,  -261,  -455,  -455,     0,  -455,  -455,  -455,
!     -455,  -455,     0,  -455,  -455,  -455,  -455,  -455,  -455,  -455,
!     -455,  -455,  -455,  -455,  -455,  -455,  -455,  -455,   293,  -455,
!     -455,  -455,  -455,  -455,  -455,  -455,     0,     0,     0,   364,
!        0,  -455,     7,     0,  -455,    10,    11,     0,   674,  -455,
!     -455,  -455,    12,    13,    14,  -455,  -455,     0,     0,   810,
!     -455,     0,     0,     0,     0,     0,   674,     0,    16,   674,
!       17,   674,     0,     0,     0,     0,     0,     0,     0,     0,
!        0,  -455,   294,  -455,  -455,     0,     0,  -455,     0,   267,
!      268,   269,     0,   270,   271,   272,   273,   274,   275,   276,
!      277,   278,   279,   280,   281,   282,   283,     0,   407,     0,
!     -469,  -469,  -469,  -469,  -469,  -469,   841,  -469,  -469,   674,
!     -469,  -469,  -469,  -469,  -469,     0,  -469,  -469,  -469,  -469,
!     -469,  -469,  -469,  -469,  -469,  -469,  -469,  -469,  -469,  -469,
!     -469,   811,  -469,  -469,  -469,  -469,  -469,  -469,  -469,   669,
!        0,   167,     0,     0,  -469,     0,     0,  -469,   168,   169,
!        0,   170,  -469,  -469,  -469,     0,     0,     0,  -469,  -469,
!        0,     0,     0,  -469,     0,     0,     0,     0,     0,   171,
!        0,    18,     0,   172,   173,   174,   175,   176,   177,   178,
!        0,  -326,     0,     0,  -469,   179,  -469,  -469,   180,     0,
!     -469,     0,     0,   181,   182,   183,     0,     0,     0,   184,
!      185,     0,     0,  -326,   186,  -326,   641,     0,   167,     0,
!        0,     0,     0,     0,     0,   168,   169,     0,   170,     0,
!        0,     0,     7,     8,     9,    10,    11,   187,   188,     0,
!      718,   672,    12,    13,    14,     0,   171,     0,    18,     0,
!      172,   173,   174,   175,   176,   177,   178,   669,    16,   167,
!       17,     0,   179,     0,     0,   180,   168,   169,     0,   170,
!      181,   182,   183,     0,     0,     0,   184,   185,     0,     0,
!        0,   186,     0,     0,     0,     0,     0,   171,     0,    18,
!        0,   172,   173,   174,   175,   176,   177,   178,     0,     0,
!        0,     0,     0,   179,   187,   188,   180,     0,   642,     0,
!        0,   181,   182,   183,     0,     0,     0,   184,   185,     0,
!        0,     0,   186,   326,     0,     0,   -23,   -23,   -23,   -23,
!      -23,     7,     8,     9,    10,    77,   -23,   -23,   -23,     0,
!      167,    12,    13,    14,     0,   187,   188,   168,   169,   672,
!      170,   220,   -23,     0,  -519,     0,     0,    16,     0,    17,
!        0,     0,     0,     0,     0,  -519,     0,     0,   171,     0,
!       18,     0,   172,   173,   174,   175,   176,   177,   178,     0,
!        0,     0,     0,     0,   179,     0,     0,   180,   221,   222,
!        0,     0,   181,   182,   428,     0,     0,     0,   184,   185,
!      167,     0,     0,   186,     0,     0,     0,   168,   169,  -519,
!      170,     0,     0,  -519,     0,   -23,     0,     0,     0,     0,
!        0,     0,     0,     0,     0,     0,   187,   188,   171,     0,
!       18,   429,   172,   173,   174,   175,   176,   177,   178,     7,
!        8,     9,    10,   113,   179,     0,     0,   180,     0,    12,
!       13,    14,   181,   182,   183,     0,     0,     0,   184,   185,
!        0,     0,     0,   186,     0,    16,     0,    17,     0,     0,
!        0,     8,     9,    10,   104,     0,     0,     0,     0,     0,
!       12,    13,    14,     0,     0,     0,   187,   188,     0,     0,
!        0,   556,   509,   510,     8,     9,    10,    11,    17,   168,
!      169,     0,   170,    12,    13,    14,   511,     0,   512,   513,
!      514,   515,   516,   517,   518,   519,   520,   521,   522,    16,
!      171,    17,    18,     0,   172,   173,   174,   175,   176,   177,
!      178,     7,     8,     9,    10,    86,   179,     0,     0,   180,
!        0,    12,    13,    14,   181,   182,   183,     0,     0,     0,
!      184,   185,     0,     0,     0,   186,     0,    16,     0,    17,
!        8,     9,    10,   145,     0,     0,     0,   509,   154,    12,
!       13,    14,     0,     0,   168,   169,   523,   170,   187,   188,
!        0,   511,   524,   512,   513,   514,   515,   516,   517,   518,
!      519,   520,   521,   522,     0,   171,     0,    18,     0,   172,
!      173,   174,   175,   176,   177,   178,     0,     0,   167,     0,
!        0,   179,     0,     0,   180,   168,   169,     0,   170,   181,
!      182,   183,     0,     0,     0,   184,   185,     0,     0,     0,
!      186,     0,     0,     0,     0,     0,   171,     0,    18,     0,
!      172,   173,   174,   175,   176,   177,   178,     0,     0,     0,
!        0,   523,   179,   187,   188,   180,     0,   524,     0,     0,
!      181,   182,   183,     0,     0,     7,   184,   185,    10,    77,
!      360,   186,   167,     0,     0,    12,    13,    14,     0,   168,
!      169,     0,   170,     0,     0,     0,     0,     0,     0,     0,
!        0,    16,     0,    17,   187,   188,     0,     0,   477,     0,
!      171,     0,    18,     0,   172,   173,   174,   175,   176,   177,
!      178,     0,     0,     0,     0,     0,   179,     0,     0,   180,
!        0,     0,     0,     0,   181,   182,   183,     0,     0,     0,
!      184,   185,     0,     0,     0,   186,   167,     7,     8,     9,
!       10,    11,     0,   168,   169,     0,   170,    12,    13,    14,
!        7,     8,     9,    10,   122,     0,     0,     0,   187,   188,
!       12,    13,    14,    16,   171,    17,    18,     0,   172,   173,
!      174,   175,   176,   177,   178,     0,    16,     0,    17,     0,
!      179,     0,     0,   180,     0,     0,     0,     0,   181,   182,
!      183,     0,     0,     0,   184,   185,     0,   167,     7,   186,
!        0,    10,    11,     0,   168,   169,     0,   170,    12,    13,
!       14,   273,   274,   275,   276,   277,   278,   279,   280,   281,
!      282,   283,   187,   188,    16,   171,    17,    18,     0,   172,
!      173,   174,   175,   176,   177,   178,     0,     0,   167,     0,
!        0,   179,     0,     0,   180,   168,   169,     0,   170,   181,
!      182,   183,     0,     0,     0,   184,   185,     0,     0,     0,
!      186,     0,     0,     0,     0,     0,   171,     0,    18,     0,
!      172,   173,   174,   175,   176,   177,   178,     0,     0,   167,
!        0,     0,   179,   187,   188,   180,   168,   169,     0,   170,
!      181,   182,   183,     0,     0,     0,   184,   185,     0,     0,
!        0,   186,     0,     0,     0,     0,     0,   171,     0,    18,
!        0,   172,   173,   174,   175,   176,   177,   178,     0,     0,
!      167,     0,   612,   179,   187,   188,   180,   168,   169,     0,
!      170,   181,   182,   183,     0,     0,     0,   184,   185,     0,
!        0,     0,   186,     0,     0,     0,     0,     0,   171,     0,
!       18,     0,   172,   173,   174,   175,   176,   177,   178,     0,
!        0,   167,     0,     0,   179,   187,   188,   180,   168,   169,
!        0,   170,   181,   182,   183,     0,     0,     0,   184,   185,
!        0,     0,     0,   263,     0,     0,     0,     0,     0,   171,
!        0,    18,     0,   172,   173,   174,   175,   176,   177,   178,
!        0,     0,   586,     0,     0,   179,   187,   188,   180,   168,
!      169,     0,   170,   181,   182,   183,     0,     0,     0,   184,
!      185,     0,     0,     0,   265,     0,     0,     0,     0,     0,
!      171,     0,    18,     0,   172,   173,   174,   175,   176,   177,
!      178,     0,     0,     0,     0,     0,   179,   187,   188,   180,
!        0,     0,     0,     0,   181,   182,   183,     0,     0,     0,
!      184,   185,   267,   268,   269,   186,   270,   271,   272,   273,
!      274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
!        0,     0,     0,     0,     0,     0,     0,     0,   187,   188,
!      267,   268,   269,     0,   270,   271,   272,   273,   274,   275,
!      276,   277,   278,   279,   280,   281,   282,   283,     0,     0,
!        0,   267,   268,   269,   557,   270,   271,   272,   273,   274,
!      275,   276,   277,   278,   279,   280,   281,   282,   283,     0,
!        0,     0,     0,     0,     0,     0,     0,     0,     0,   267,
!      268,   269,   634,   270,   271,   272,   273,   274,   275,   276,
!      277,   278,   279,   280,   281,   282,   283,     0,     0,     0,
!      267,   268,   269,   635,   270,   271,   272,   273,   274,   275,
!      276,   277,   278,   279,   280,   281,   282,   283,     0,     0,
!        0,     0,     0,     0,     0,     0,     0,     0,   267,   268,
!      269,   861,   270,   271,   272,   273,   274,   275,   276,   277,
!      278,   279,   280,   281,   282,   283,     0,   267,   268,   269,
!      807,   270,   271,   272,   273,   274,   275,   276,   277,   278,
!      279,   280,   281,   282,   283,     0,     0,   690,     0,     0,
!        0,     0,     0,     0,   267,   268,   269,   470,   270,   271,
!      272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
!      282,   283,     0,     0,     0,     0,   472,   267,   268,   269,
!      691,   270,   271,   272,   273,   274,   275,   276,   277,   278,
!      279,   280,   281,   282,   283,     7,     0,     0,    10,    86,
!        0,     0,     0,   665,     0,    12,    13,    14,     7,     0,
!        0,    10,    11,     0,     0,     0,     0,     0,    12,    13,
!       14,    16,     0,    17,     0,     0,     0,    17,     0,     0,
!        0,     0,     0,     0,    16,     0,    17,   267,   268,   269,
!        0,   270,   271,   272,   273,   274,   275,   276,   277,   278,
!      279,   280,   281,   282,   283,     8,     9,    10,   140,     7,
!        8,     9,    10,    82,    12,    13,    14,     0,     0,    12,
!       13,    14,     0,     0,     0,     0,     7,     8,     9,    10,
!      118,     0,    17,     0,     0,    16,    12,    13,    14,     7,
!        8,     9,    10,    91,     7,     8,     9,    10,   127,    12,
!       13,    14,    16,     0,    12,    13,    14,     7,     0,     0,
!       10,    91,     0,     0,     0,    16,     0,    12,    13,    14,
!       16,   272,   273,   274,   275,   276,   277,   278,   279,   280,
!      281,   282,   283,    16,   267,   268,   269,   823,   270,   271,
!      272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
!      282,   283,   267,   268,   269,     0,   270,   271,   272,   273,
!      274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
!      269,     0,   270,   271,   272,   273,   274,   275,   276,   277,
!      278,   279,   280,   281,   282,   283,   271,   272,   273,   274,
!      275,   276,   277,   278,   279,   280,   281,   282,   283
  };
  
  static const short yycheck[] =
  {
!       17,    70,    68,   599,     4,     5,     4,     5,     4,     5,
!      150,   164,   314,     4,     5,     4,     5,    49,   149,   314,
!      232,   488,   314,   319,    52,    53,    54,   290,     4,     5,
!      314,    63,    64,    65,   628,     4,     5,   417,   323,   157,
!      542,   222,    24,   321,   771,   172,   173,   228,    80,   327,
!        4,     5,   819,   681,   417,   222,   183,    89,     1,    59,
!      488,    59,   189,    59,     1,    17,    98,   417,    59,   417,
!       59,   238,    72,   295,    72,   107,   295,     3,     4,     3,
!        4,   208,   295,    59,   116,   862,   186,     3,     4,     1,
!       59,     1,   311,   125,     1,     1,    72,     1,   560,     4,
!        5,     1,   134,    34,   871,    59,   742,    73,   849,     4,
!        5,   143,    29,     0,   846,    32,   883,     3,    72,   851,
!       66,   501,   899,   425,   760,   306,    43,    45,    87,   870,
!      425,    11,    91,   425,    87,    87,    32,   765,    91,     3,
!        4,   425,   511,   512,   513,   514,   515,     3,     4,   916,
!       93,   179,   252,   253,    59,     0,    93,    88,   620,    45,
!      627,   628,    66,   263,    59,   265,    66,    93,   150,    93,
!       87,    57,   904,    91,    91,   342,    88,    93,    88,   542,
!       66,    88,    88,   910,   216,   813,   688,    67,   410,   411,
!      412,   413,   542,    57,   542,   414,     5,   410,   411,   412,
!      413,    57,    66,    67,    87,   799,   800,     5,     6,     7,
!        8,   645,     3,   647,   242,   396,    14,    15,    16,   247,
!      289,    87,   222,    66,   222,   343,   489,   345,   228,    43,
!      228,    32,   214,   215,    32,   866,     3,   833,   238,    66,
!      238,   368,   238,    65,    45,    67,   222,   238,     3,   238,
!       59,    65,   228,    67,    29,   221,   636,    93,   286,   287,
!      226,    32,   238,   229,    93,   293,    57,    87,   222,   238,
!       92,    91,    66,    67,   228,    66,    67,    41,    42,     8,
!      911,   631,    93,   631,   238,   351,     8,     3,     4,    87,
!       57,    66,    67,     8,    87,    66,    67,   599,    92,    66,
!       67,   428,    57,    32,   599,   374,   306,   599,   306,    87,
!       32,    66,    11,    91,   314,   599,   314,    32,   314,   786,
!      302,    66,   350,   314,   455,   688,    66,    87,   795,   631,
!      306,    91,   799,   800,   316,   317,   631,     8,   688,   631,
!      688,    57,   342,   238,   342,    87,   342,   631,   417,    91,
!       66,   342,   306,   342,   566,   651,   322,   323,   786,   655,
!      410,   411,   328,   413,    66,    67,   342,   795,    87,    88,
!      470,    66,    67,   342,   474,     6,    66,     8,   344,     1,
!        1,     3,     4,     4,     5,     6,     7,     8,   342,   417,
!       92,     3,     4,    14,    15,    16,   396,    92,   396,    91,
!       66,    32,    94,     5,     6,     7,     8,    87,    66,    30,
!       92,    91,    14,    15,    16,   542,     8,   417,    88,   417,
!      396,   417,   562,    32,    88,   425,   417,   425,   417,   425,
!       32,   397,   501,    45,   425,   463,    45,     3,     4,   467,
!       57,   417,   396,    91,    45,    57,    94,   342,   417,    66,
!       67,   520,    87,    92,    66,    87,    91,    66,    67,    91,
!       87,     4,     5,   417,    91,    34,   494,    91,    92,    12,
!       13,    14,    93,   501,   456,     6,   845,    29,    92,    87,
!       32,   621,    25,    91,    27,    87,    29,   699,    31,   620,
!       33,    43,    35,   521,    37,    92,    39,    92,   878,   879,
!       29,    30,    31,    32,   789,   783,   791,   785,    37,    38,
!       39,    40,   881,   882,    66,    67,    59,    87,    92,   585,
!       87,    91,   417,   704,   787,   491,    43,    70,    87,    72,
!       43,   833,   713,   796,    91,    87,    66,    67,   833,    91,
!       66,   833,   542,    91,   542,   614,   542,     7,     8,   833,
!       92,   542,    92,   542,    14,    15,    16,    66,    67,     5,
!        6,     7,     8,   591,    91,    92,   542,    92,    14,    15,
!       16,    91,    32,   542,    92,   339,   340,    92,     1,    45,
!      562,     4,     5,     6,     7,     8,    32,    92,   542,     7,
!        8,    14,    15,    16,    87,    88,    14,    15,    16,   599,
!      617,   599,    91,   599,    88,   571,     1,    30,   599,   575,
!       87,     4,   578,   579,     7,     8,   582,   748,    87,   688,
!      689,    14,    15,    16,    57,    58,    59,   780,    91,    92,
!       43,   631,    88,   631,    88,   631,    88,    30,    93,   621,
!      631,    87,   670,   186,    92,   627,   628,   542,     3,     4,
!        5,     6,     7,     8,   197,   631,   199,    45,   201,    45,
!      203,    45,   631,    66,    67,    87,   209,    87,   211,     8,
!       93,    87,   201,   202,   203,   204,    29,   631,    92,   222,
!      444,   445,   648,    91,    92,   228,   652,   756,   688,    91,
!      688,    92,   688,   659,    88,   238,    92,   688,    66,   688,
!       91,    92,    66,    67,   704,    92,   704,    66,    67,   252,
!      253,    91,   688,   713,    92,   713,     7,     8,    92,   688,
!      263,    66,   265,    14,    15,    16,    87,   755,   704,    45,
!      696,    91,    92,     3,   688,    93,   631,   713,    45,   705,
!      706,    32,    88,   709,    91,    92,   295,   816,   714,   715,
!      704,   717,   905,    55,    56,    57,    58,    59,    91,   713,
!      913,   310,   794,   306,   528,   529,     7,     8,    66,   751,
!       66,   924,    66,    14,    15,    16,    91,    92,    91,    92,
!      849,   747,   546,   547,   750,    91,   852,    87,   331,    88,
!      333,    88,   335,   688,   337,   192,   193,   316,   317,   342,
!       92,   870,   786,   787,   786,   787,   335,   336,   337,   338,
!       92,   877,    92,   795,   796,    45,    19,   799,   800,    25,
!       26,    27,    28,   789,    87,   791,    18,    33,    34,    35,
!       36,    18,    87,   833,   233,   833,    45,   833,    91,   908,
!      881,   882,   833,    92,    94,   873,   912,    25,    26,    27,
!       28,    66,    66,   396,   923,    33,    34,    35,    36,    45,
!       87,   410,   411,   412,   413,    66,    92,    91,   834,   835,
!       87,   837,     0,     0,   417,    25,    26,    27,    28,    29,
!       30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
!       40,   290,     1,   436,   469,   438,   661,   440,   631,   442,
!      312,   450,   449,   920,   453,   631,   631,   631,   314,   438,
!      439,   467,   929,   442,   443,     1,   314,     3,     4,     5,
!        6,     7,     8,   302,   763,   646,    12,   470,    14,    15,
!       16,   474,    29,    30,    31,    32,   679,   799,   679,   786,
!       37,    38,    39,    40,    30,     1,   748,   751,     4,     5,
!        6,     7,     8,   465,   296,   463,    12,   342,    14,    15,
!       16,    50,    51,    52,    53,    54,    55,    56,    57,    58,
!       59,   735,   736,   350,    30,   491,   525,     5,     6,     7,
!        8,   531,   880,   892,   547,   893,    14,    15,    16,    -1,
!       -1,   197,   198,   199,   200,     1,    -1,    -1,     4,   542,
!       -1,     7,     8,   402,    32,    -1,    92,    -1,    14,    15,
!       16,    52,    53,    54,    55,    56,    57,    58,    59,   197,
!      198,   199,   200,    -1,    30,    -1,    32,    33,    -1,    -1,
!       -1,     1,    -1,     3,     4,    -1,    92,     7,     8,    -1,
!       10,    11,    -1,    13,    14,    15,    16,    -1,   447,   448,
!       -1,    -1,    -1,    -1,   603,   604,   605,    -1,    -1,    87,
!       30,    31,    32,    33,    -1,    35,    36,    37,    38,    39,
!       40,    41,    -1,    -1,    -1,    -1,    -1,    47,    -1,    -1,
!       50,    87,    88,    -1,    -1,    55,    56,    57,   631,   488,
!      489,    61,    62,    -1,    -1,    -1,    66,   247,     4,     5,
!        6,     7,     8,    -1,   201,   202,   203,   204,    14,    15,
!       16,    53,    54,    55,    56,    57,    58,    59,    -1,    89,
!       90,    -1,    -1,    93,    30,   331,   332,   333,   334,    -1,
!       -1,     4,     5,     6,     7,     8,     4,     5,     6,     7,
!        8,    14,    15,    16,    -1,   688,    14,    15,    16,    -1,
!       -1,    -1,    -1,   331,   332,   333,   334,    30,    -1,    32,
!        1,   704,    30,     4,    32,    -1,     7,     8,    -1,   712,
!      713,    -1,    -1,    14,    15,    16,   719,    -1,   721,    -1,
!      723,    87,   725,    -1,   727,    -1,   729,    -1,   731,    30,
!      733,    32,    33,    -1,   723,   724,   725,   726,     5,     6,
!        7,     8,   731,   732,   733,   734,    -1,    14,    15,    16,
!       -1,    -1,    -1,    -1,    87,     5,     6,     7,     8,    87,
!       -1,   770,   771,    -1,    14,    15,    16,   776,   627,   628,
!      436,   437,    -1,    -1,   440,   441,    -1,    -1,   335,   336,
!      337,   338,     1,    -1,    -1,     4,     5,     6,     7,     8,
!       -1,    -1,    -1,    -1,    -1,    14,    15,    16,   436,   437,
!       -1,    -1,   440,   441,    -1,     5,     6,     7,     8,    -1,
!       29,    30,   821,    32,    14,    15,    16,   826,   827,    -1,
!       87,    -1,    -1,    -1,    43,    -1,   436,   437,   438,   439,
!      440,   441,   442,   443,    -1,    -1,    -1,    87,    51,    52,
!       53,    54,    55,    56,    57,    58,    59,    -1,   707,   708,
!        4,     5,     6,     7,     8,    -1,    -1,   467,   867,    -1,
!       14,    15,    16,    -1,    -1,    -1,   250,   251,    87,    -1,
!       -1,   880,    91,    -1,    93,    -1,    30,   261,    32,    -1,
!       -1,   438,   439,   267,   268,   442,   443,    87,   272,   273,
!      274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
!      909,   910,    -1,     1,   288,     3,     4,     5,     6,     7,
!        8,    -1,     5,     6,     7,     8,    14,    15,    16,    -1,
!       -1,    14,    15,    16,   308,    -1,    -1,   786,   787,    -1,
!       -1,    29,    30,    87,    32,    33,   795,   796,    -1,    -1,
!      799,   800,     1,    -1,     3,     4,    -1,     5,     6,     7,
!        8,    10,    11,    -1,    13,    -1,    14,    15,    16,    57,
!       61,    62,    -1,    64,    65,    66,    67,    -1,    66,   828,
!      829,   830,    31,    -1,    33,    -1,    35,    36,    37,    38,
!       39,    40,    41,    -1,    -1,    -1,    -1,    -1,    47,    87,
!       -1,    50,   376,   377,    87,    -1,    55,    56,    57,    -1,
!       -1,    -1,    61,    62,    -1,    -1,    65,    66,    67,     1,
!       -1,    -1,     4,     5,     6,     7,     8,     5,     6,     7,
!        8,    -1,    14,    15,    16,    -1,    14,    15,    16,    88,
!       89,    90,    -1,    -1,    93,    -1,    -1,    29,    30,    -1,
!       32,    -1,   426,   427,    32,    -1,    -1,    -1,    -1,    -1,
!       -1,    43,    -1,   719,   720,   721,   722,     5,     6,     7,
!        8,   727,   728,   729,   730,    -1,    14,    15,    16,    -1,
!       -1,    -1,    -1,    -1,    66,    67,    -1,    -1,   462,    -1,
!       -1,   719,   720,   721,   722,   469,    -1,    -1,   472,   727,
!      728,   729,   730,    -1,    -1,    87,    -1,    -1,   482,    91,
!       -1,    93,   486,    -1,    -1,    -1,    -1,    -1,    -1,   719,
!      720,   721,   722,   723,   724,   725,   726,   727,   728,   729,
!      730,   731,   732,   733,   734,    -1,     4,     5,     6,     7,
!        8,    -1,   516,    -1,    -1,    -1,    14,    15,    16,    -1,
!       -1,    -1,    -1,    -1,    -1,    -1,     4,     5,     6,     7,
!        8,    -1,    30,    -1,    32,    -1,    14,    15,    16,    -1,
!       -1,     1,    -1,     3,     4,    -1,   723,   724,   725,   726,
!       10,    11,    30,    13,   731,   732,   733,   734,    -1,   563,
!       -1,    -1,    -1,    -1,    -1,    -1,   570,    -1,    -1,    -1,
!      574,    31,    -1,    33,    -1,    35,    36,    37,    38,    39,
!       40,    41,     4,     5,     6,     7,     8,    47,   592,    87,
!       50,    -1,    14,    15,    16,    55,    56,    57,    -1,    -1,
!       -1,    61,    62,    -1,    -1,    65,    66,    67,    30,    87,
!        4,     5,     6,     7,     8,     4,     5,     6,     7,     8,
!       14,    15,    16,    -1,    -1,    14,    15,    16,    88,    89,
!       90,    -1,    -1,    93,    -1,    -1,    30,     1,    -1,    -1,
!        4,    30,   646,     7,     8,   649,    -1,    -1,    -1,   653,
!       14,    15,    16,     5,     6,     7,     8,   661,    -1,    -1,
!       -1,   665,    14,    15,    16,    87,    30,   671,    32,    -1,
!       -1,    -1,     5,     6,     7,     8,    -1,   681,   682,    -1,
!       32,    14,    15,    16,    -1,     1,   690,     3,     4,     5,
!        6,     7,     8,    87,    10,    11,    -1,    13,    14,    15,
!       16,    17,    -1,    19,    20,    21,    22,    23,    24,    25,
!       26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
!       36,    37,    38,    39,    40,    41,    -1,    -1,    -1,     1,
!       -1,    47,     4,    -1,    50,     7,     8,    -1,   742,    55,
!       56,    57,    14,    15,    16,    61,    62,    -1,    -1,    12,
!       66,    -1,    -1,    -1,    -1,    -1,   760,    -1,    30,   763,
!       32,   765,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
!       -1,    87,    88,    89,    90,    -1,    -1,    93,    -1,    42,
!       43,    44,    -1,    46,    47,    48,    49,    50,    51,    52,
!       53,    54,    55,    56,    57,    58,    59,    -1,     1,    -1,
!        3,     4,     5,     6,     7,     8,   810,    10,    11,   813,
!       13,    14,    15,    16,    17,    -1,    19,    20,    21,    22,
!       23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
!       33,    94,    35,    36,    37,    38,    39,    40,    41,     1,
!       -1,     3,    -1,    -1,    47,    -1,    -1,    50,    10,    11,
!       -1,    13,    55,    56,    57,    -1,    -1,    -1,    61,    62,
!       -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,    31,
!       -1,    33,    -1,    35,    36,    37,    38,    39,    40,    41,
!       -1,    43,    -1,    -1,    87,    47,    89,    90,    50,    -1,
!       93,    -1,    -1,    55,    56,    57,    -1,    -1,    -1,    61,
!       62,    -1,    -1,    65,    66,    67,     1,    -1,     3,    -1,
!       -1,    -1,    -1,    -1,    -1,    10,    11,    -1,    13,    -1,
!       -1,    -1,     4,     5,     6,     7,     8,    89,    90,    -1,
!       12,    93,    14,    15,    16,    -1,    31,    -1,    33,    -1,
!       35,    36,    37,    38,    39,    40,    41,     1,    30,     3,
!       32,    -1,    47,    -1,    -1,    50,    10,    11,    -1,    13,
!       55,    56,    57,    -1,    -1,    -1,    61,    62,    -1,    -1,
!       -1,    66,    -1,    -1,    -1,    -1,    -1,    31,    -1,    33,
!       -1,    35,    36,    37,    38,    39,    40,    41,    -1,    -1,
!       -1,    -1,    -1,    47,    89,    90,    50,    -1,    93,    -1,
!       -1,    55,    56,    57,    -1,    -1,    -1,    61,    62,    -1,
!       -1,    -1,    66,     1,    -1,    -1,     4,     5,     6,     7,
!        8,     4,     5,     6,     7,     8,    14,    15,    16,    -1,
!        3,    14,    15,    16,    -1,    89,    90,    10,    11,    93,
!       13,    29,    30,    -1,    32,    -1,    -1,    30,    -1,    32,
!       -1,    -1,    -1,    -1,    -1,    43,    -1,    -1,    31,    -1,
!       33,    -1,    35,    36,    37,    38,    39,    40,    41,    -1,
!       -1,    -1,    -1,    -1,    47,    -1,    -1,    50,    66,    67,
!       -1,    -1,    55,    56,    57,    -1,    -1,    -1,    61,    62,
!        3,    -1,    -1,    66,    -1,    -1,    -1,    10,    11,    87,
!       13,    -1,    -1,    91,    -1,    93,    -1,    -1,    -1,    -1,
!       -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    31,    -1,
!       33,    94,    35,    36,    37,    38,    39,    40,    41,     4,
!        5,     6,     7,     8,    47,    -1,    -1,    50,    -1,    14,
!       15,    16,    55,    56,    57,    -1,    -1,    -1,    61,    62,
!       -1,    -1,    -1,    66,    -1,    30,    -1,    32,    -1,    -1,
!       -1,     5,     6,     7,     8,    -1,    -1,    -1,    -1,    -1,
!       14,    15,    16,    -1,    -1,    -1,    89,    90,    -1,    -1,
!       -1,    94,     3,     4,     5,     6,     7,     8,    32,    10,
!       11,    -1,    13,    14,    15,    16,    17,    -1,    19,    20,
!       21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
!       31,    32,    33,    -1,    35,    36,    37,    38,    39,    40,
!       41,     4,     5,     6,     7,     8,    47,    -1,    -1,    50,
!       -1,    14,    15,    16,    55,    56,    57,    -1,    -1,    -1,
!       61,    62,    -1,    -1,    -1,    66,    -1,    30,    -1,    32,
!        5,     6,     7,     8,    -1,    -1,    -1,     3,     4,    14,
!       15,    16,    -1,    -1,    10,    11,    87,    13,    89,    90,
!       -1,    17,    93,    19,    20,    21,    22,    23,    24,    25,
!       26,    27,    28,    29,    -1,    31,    -1,    33,    -1,    35,
!       36,    37,    38,    39,    40,    41,    -1,    -1,     3,    -1,
!       -1,    47,    -1,    -1,    50,    10,    11,    -1,    13,    55,
!       56,    57,    -1,    -1,    -1,    61,    62,    -1,    -1,    -1,
!       66,    -1,    -1,    -1,    -1,    -1,    31,    -1,    33,    -1,
!       35,    36,    37,    38,    39,    40,    41,    -1,    -1,    -1,
!       -1,    87,    47,    89,    90,    50,    -1,    93,    -1,    -1,
!       55,    56,    57,    -1,    -1,     4,    61,    62,     7,     8,
!        1,    66,     3,    -1,    -1,    14,    15,    16,    -1,    10,
!       11,    -1,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
!       -1,    30,    -1,    32,    89,    90,    -1,    -1,    93,    -1,
!       31,    -1,    33,    -1,    35,    36,    37,    38,    39,    40,
!       41,    -1,    -1,    -1,    -1,    -1,    47,    -1,    -1,    50,
!       -1,    -1,    -1,    -1,    55,    56,    57,    -1,    -1,    -1,
!       61,    62,    -1,    -1,    -1,    66,     3,     4,     5,     6,
!        7,     8,    -1,    10,    11,    -1,    13,    14,    15,    16,
!        4,     5,     6,     7,     8,    -1,    -1,    -1,    89,    90,
!       14,    15,    16,    30,    31,    32,    33,    -1,    35,    36,
!       37,    38,    39,    40,    41,    -1,    30,    -1,    32,    -1,
!       47,    -1,    -1,    50,    -1,    -1,    -1,    -1,    55,    56,
!       57,    -1,    -1,    -1,    61,    62,    -1,     3,     4,    66,
!       -1,     7,     8,    -1,    10,    11,    -1,    13,    14,    15,
!       16,    49,    50,    51,    52,    53,    54,    55,    56,    57,
!       58,    59,    89,    90,    30,    31,    32,    33,    -1,    35,
!       36,    37,    38,    39,    40,    41,    -1,    -1,     3,    -1,
!       -1,    47,    -1,    -1,    50,    10,    11,    -1,    13,    55,
!       56,    57,    -1,    -1,    -1,    61,    62,    -1,    -1,    -1,
!       66,    -1,    -1,    -1,    -1,    -1,    31,    -1,    33,    -1,
!       35,    36,    37,    38,    39,    40,    41,    -1,    -1,     3,
!       -1,    -1,    47,    89,    90,    50,    10,    11,    -1,    13,
!       55,    56,    57,    -1,    -1,    -1,    61,    62,    -1,    -1,
!       -1,    66,    -1,    -1,    -1,    -1,    -1,    31,    -1,    33,
!       -1,    35,    36,    37,    38,    39,    40,    41,    -1,    -1,
!        3,    -1,    87,    47,    89,    90,    50,    10,    11,    -1,
!       13,    55,    56,    57,    -1,    -1,    -1,    61,    62,    -1,
!       -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,    31,    -1,
!       33,    -1,    35,    36,    37,    38,    39,    40,    41,    -1,
!       -1,     3,    -1,    -1,    47,    89,    90,    50,    10,    11,
!       -1,    13,    55,    56,    57,    -1,    -1,    -1,    61,    62,
!       -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,    31,
!       -1,    33,    -1,    35,    36,    37,    38,    39,    40,    41,
!       -1,    -1,     3,    -1,    -1,    47,    89,    90,    50,    10,
!       11,    -1,    13,    55,    56,    57,    -1,    -1,    -1,    61,
!       62,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,
!       31,    -1,    33,    -1,    35,    36,    37,    38,    39,    40,
!       41,    -1,    -1,    -1,    -1,    -1,    47,    89,    90,    50,
!       -1,    -1,    -1,    -1,    55,    56,    57,    -1,    -1,    -1,
!       61,    62,    42,    43,    44,    66,    46,    47,    48,    49,
!       50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
!       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,
!       42,    43,    44,    -1,    46,    47,    48,    49,    50,    51,
!       52,    53,    54,    55,    56,    57,    58,    59,    -1,    -1,
!       -1,    42,    43,    44,    94,    46,    47,    48,    49,    50,
!       51,    52,    53,    54,    55,    56,    57,    58,    59,    -1,
!       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,
!       43,    44,    94,    46,    47,    48,    49,    50,    51,    52,
!       53,    54,    55,    56,    57,    58,    59,    -1,    -1,    -1,
!       42,    43,    44,    94,    46,    47,    48,    49,    50,    51,
!       52,    53,    54,    55,    56,    57,    58,    59,    -1,    -1,
!       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,    43,
!       44,    94,    46,    47,    48,    49,    50,    51,    52,    53,
!       54,    55,    56,    57,    58,    59,    -1,    42,    43,    44,
!       92,    46,    47,    48,    49,    50,    51,    52,    53,    54,
!       55,    56,    57,    58,    59,    -1,    -1,    12,    -1,    -1,
!       -1,    -1,    -1,    -1,    42,    43,    44,    91,    46,    47,
        48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
!       58,    59,    -1,    -1,    -1,    -1,    91,    42,    43,    44,
!       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
!       55,    56,    57,    58,    59,     4,    -1,    -1,     7,     8,
!       -1,    -1,    -1,    91,    -1,    14,    15,    16,     4,    -1,
!       -1,     7,     8,    -1,    -1,    -1,    -1,    -1,    14,    15,
!       16,    30,    -1,    32,    -1,    -1,    -1,    32,    -1,    -1,
!       -1,    -1,    -1,    -1,    30,    -1,    32,    42,    43,    44,
!       -1,    46,    47,    48,    49,    50,    51,    52,    53,    54,
!       55,    56,    57,    58,    59,     5,     6,     7,     8,     4,
!        5,     6,     7,     8,    14,    15,    16,    -1,    -1,    14,
!       15,    16,    -1,    -1,    -1,    -1,     4,     5,     6,     7,
!        8,    -1,    32,    -1,    -1,    30,    14,    15,    16,     4,
!        5,     6,     7,     8,     4,     5,     6,     7,     8,    14,
!       15,    16,    30,    -1,    14,    15,    16,     4,    -1,    -1,
!        7,     8,    -1,    -1,    -1,    30,    -1,    14,    15,    16,
!       30,    48,    49,    50,    51,    52,    53,    54,    55,    56,
!       57,    58,    59,    30,    42,    43,    44,    45,    46,    47,
!       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
!       58,    59,    42,    43,    44,    -1,    46,    47,    48,    49,
!       50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
!       44,    -1,    46,    47,    48,    49,    50,    51,    52,    53,
!       54,    55,    56,    57,    58,    59,    47,    48,    49,    50,
!       51,    52,    53,    54,    55,    56,    57,    58,    59
  };
  /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
  #line 3 "/usr/share/bison/bison.simple"
*************** yyreduce:
*** 2394,4607 ****
    switch (yyn) {
  
  case 1:
! #line 319 "c-parse.y"
  { if (pedantic)
  		    pedwarn ("ISO C forbids an empty source file");
  		;
      break;}
  case 3:
! #line 330 "c-parse.y"
! {yyval.ttype = NULL_TREE; ;
      break;}
  case 5:
! #line 331 "c-parse.y"
! {yyval.ttype = NULL_TREE; ggc_collect(); ;
      break;}
! case 7:
! #line 336 "c-parse.y"
! { parsing_iso_function_signature = false; ;
      break;}
  case 10:
! #line 343 "c-parse.y"
! { STRIP_NOPS (yyvsp[-2].ttype);
! 		  if ((TREE_CODE (yyvsp[-2].ttype) == ADDR_EXPR
! 		       && TREE_CODE (TREE_OPERAND (yyvsp[-2].ttype, 0)) == STRING_CST)
! 		      || TREE_CODE (yyvsp[-2].ttype) == STRING_CST)
! 		    assemble_asm (yyvsp[-2].ttype);
! 		  else
! 		    error ("argument of `asm' is not a constant string"); ;
      break;}
  case 11:
! #line 351 "c-parse.y"
! { RESTORE_EXT_FLAGS (yyvsp[-1].itype); ;
      break;}
  case 12:
! #line 356 "c-parse.y"
! { if (pedantic)
! 		    error ("ISO C forbids data definition with no type or storage class");
! 		  else
! 		    warning ("data definition has no type or storage class");
! 
  		  POP_DECLSPEC_STACK; ;
      break;}
  case 13:
! #line 363 "c-parse.y"
  { POP_DECLSPEC_STACK; ;
      break;}
  case 14:
! #line 365 "c-parse.y"
  { POP_DECLSPEC_STACK; ;
      break;}
  case 15:
! #line 367 "c-parse.y"
! { shadow_tag (yyvsp[-1].ttype); ;
      break;}
  case 18:
! #line 371 "c-parse.y"
  { if (pedantic)
! 		    pedwarn ("ISO C does not allow extra `;' outside of a function"); ;
      break;}
  case 19:
! #line 377 "c-parse.y"
! { if (! start_function (current_declspecs, yyvsp[0].ttype,
! 					all_prefix_attributes))
  		    YYERROR1;
  		;
      break;}
  case 20:
! #line 382 "c-parse.y"
  { DECL_SOURCE_LOCATION (current_function_decl) = yyvsp[0].location;
  		  store_parm_decls (); ;
      break;}
  case 21:
! #line 385 "c-parse.y"
  { finish_function ();
  		  POP_DECLSPEC_STACK; ;
      break;}
  case 22:
! #line 388 "c-parse.y"
  { POP_DECLSPEC_STACK; ;
      break;}
  case 23:
! #line 390 "c-parse.y"
! { if (! start_function (current_declspecs, yyvsp[0].ttype,
! 					all_prefix_attributes))
  		    YYERROR1;
  		;
      break;}
  case 24:
! #line 395 "c-parse.y"
  { DECL_SOURCE_LOCATION (current_function_decl) = yyvsp[0].location;
  		  store_parm_decls (); ;
      break;}
  case 25:
! #line 398 "c-parse.y"
  { finish_function ();
  		  POP_DECLSPEC_STACK; ;
      break;}
  case 26:
! #line 401 "c-parse.y"
  { POP_DECLSPEC_STACK; ;
      break;}
  case 27:
! #line 403 "c-parse.y"
! { if (! start_function (NULL_TREE, yyvsp[0].ttype,
! 					all_prefix_attributes))
  		    YYERROR1;
  		;
      break;}
  case 28:
! #line 408 "c-parse.y"
  { DECL_SOURCE_LOCATION (current_function_decl) = yyvsp[0].location;
  		  store_parm_decls (); ;
      break;}
  case 29:
! #line 411 "c-parse.y"
  { finish_function ();
  		  POP_DECLSPEC_STACK; ;
      break;}
  case 30:
! #line 414 "c-parse.y"
  { POP_DECLSPEC_STACK; ;
      break;}
  case 33:
! #line 423 "c-parse.y"
  { yyval.code = ADDR_EXPR; ;
      break;}
  case 34:
! #line 425 "c-parse.y"
  { yyval.code = NEGATE_EXPR; ;
      break;}
  case 35:
! #line 427 "c-parse.y"
  { yyval.code = CONVERT_EXPR;
    if (warn_traditional && !in_system_header)
      warning ("traditional C rejects the unary plus operator");
  		;
      break;}
  case 36:
! #line 432 "c-parse.y"
  { yyval.code = PREINCREMENT_EXPR; ;
      break;}
  case 37:
! #line 434 "c-parse.y"
  { yyval.code = PREDECREMENT_EXPR; ;
      break;}
  case 38:
! #line 436 "c-parse.y"
  { yyval.code = BIT_NOT_EXPR; ;
      break;}
  case 39:
! #line 438 "c-parse.y"
  { yyval.code = TRUTH_NOT_EXPR; ;
      break;}
- case 40:
- #line 442 "c-parse.y"
- { yyval.ttype = build_compound_expr (yyvsp[0].ttype); ;
-     break;}
  case 41:
! #line 447 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
      break;}
! case 43:
! #line 453 "c-parse.y"
! { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
      break;}
  case 44:
! #line 455 "c-parse.y"
! { chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
      break;}
! case 46:
! #line 461 "c-parse.y"
! { yyval.ttype = build_indirect_ref (yyvsp[0].ttype, "unary *"); ;
      break;}
  case 47:
! #line 464 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype;
! 		  RESTORE_EXT_FLAGS (yyvsp[-1].itype); ;
      break;}
  case 48:
! #line 467 "c-parse.y"
! { yyval.ttype = build_unary_op (yyvsp[-1].code, yyvsp[0].ttype, 0);
! 		  overflow_warning (yyval.ttype); ;
      break;}
  case 49:
! #line 471 "c-parse.y"
! { yyval.ttype = finish_label_address_expr (yyvsp[0].ttype); ;
      break;}
  case 50:
! #line 473 "c-parse.y"
! { skip_evaluation--;
! 		  if (TREE_CODE (yyvsp[0].ttype) == COMPONENT_REF
! 		      && DECL_C_BIT_FIELD (TREE_OPERAND (yyvsp[0].ttype, 1)))
! 		    error ("`sizeof' applied to a bit-field");
! 		  yyval.ttype = c_sizeof (TREE_TYPE (yyvsp[0].ttype)); ;
      break;}
  case 51:
! #line 479 "c-parse.y"
  { skip_evaluation--;
! 		  yyval.ttype = c_sizeof (groktypename (yyvsp[-1].ttype)); ;
      break;}
  case 52:
! #line 482 "c-parse.y"
  { skip_evaluation--;
! 		  yyval.ttype = c_alignof_expr (yyvsp[0].ttype); ;
      break;}
  case 53:
! #line 485 "c-parse.y"
  { skip_evaluation--;
! 		  yyval.ttype = c_alignof (groktypename (yyvsp[-1].ttype)); ;
      break;}
  case 54:
! #line 488 "c-parse.y"
! { yyval.ttype = build_unary_op (REALPART_EXPR, yyvsp[0].ttype, 0); ;
      break;}
  case 55:
! #line 490 "c-parse.y"
! { yyval.ttype = build_unary_op (IMAGPART_EXPR, yyvsp[0].ttype, 0); ;
      break;}
  case 56:
! #line 494 "c-parse.y"
! { skip_evaluation++; ;
      break;}
  case 57:
! #line 498 "c-parse.y"
! { skip_evaluation++; ;
      break;}
  case 58:
! #line 502 "c-parse.y"
! { skip_evaluation++; ;
      break;}
! case 60:
! #line 508 "c-parse.y"
! { yyval.ttype = c_cast_expr (yyvsp[-2].ttype, yyvsp[0].ttype); ;
      break;}
! case 62:
! #line 514 "c-parse.y"
! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
      break;}
  case 63:
! #line 516 "c-parse.y"
! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
      break;}
  case 64:
! #line 518 "c-parse.y"
! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
      break;}
  case 65:
! #line 520 "c-parse.y"
! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
      break;}
  case 66:
! #line 522 "c-parse.y"
! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
      break;}
  case 67:
! #line 524 "c-parse.y"
! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
      break;}
  case 68:
! #line 526 "c-parse.y"
! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
      break;}
  case 69:
! #line 528 "c-parse.y"
! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
      break;}
  case 70:
! #line 530 "c-parse.y"
! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
      break;}
  case 71:
! #line 532 "c-parse.y"
! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
      break;}
  case 72:
! #line 534 "c-parse.y"
! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
      break;}
  case 73:
! #line 536 "c-parse.y"
! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
      break;}
  case 74:
! #line 538 "c-parse.y"
! { yyvsp[-1].ttype = c_common_truthvalue_conversion
! 		    (default_conversion (yyvsp[-1].ttype));
! 		  skip_evaluation += yyvsp[-1].ttype == truthvalue_false_node; ;
      break;}
  case 75:
! #line 542 "c-parse.y"
! { skip_evaluation -= yyvsp[-3].ttype == truthvalue_false_node;
! 		  yyval.ttype = parser_build_binary_op (TRUTH_ANDIF_EXPR, yyvsp[-3].ttype, yyvsp[0].ttype); ;
      break;}
  case 76:
! #line 545 "c-parse.y"
! { yyvsp[-1].ttype = c_common_truthvalue_conversion
! 		    (default_conversion (yyvsp[-1].ttype));
! 		  skip_evaluation += yyvsp[-1].ttype == truthvalue_true_node; ;
      break;}
  case 77:
! #line 549 "c-parse.y"
! { skip_evaluation -= yyvsp[-3].ttype == truthvalue_true_node;
! 		  yyval.ttype = parser_build_binary_op (TRUTH_ORIF_EXPR, yyvsp[-3].ttype, yyvsp[0].ttype); ;
      break;}
  case 78:
! #line 552 "c-parse.y"
! { yyvsp[-1].ttype = c_common_truthvalue_conversion
! 		    (default_conversion (yyvsp[-1].ttype));
! 		  skip_evaluation += yyvsp[-1].ttype == truthvalue_false_node; ;
      break;}
  case 79:
! #line 556 "c-parse.y"
! { skip_evaluation += ((yyvsp[-4].ttype == truthvalue_true_node)
! 				      - (yyvsp[-4].ttype == truthvalue_false_node)); ;
      break;}
  case 80:
! #line 559 "c-parse.y"
! { skip_evaluation -= yyvsp[-6].ttype == truthvalue_true_node;
! 		  yyval.ttype = build_conditional_expr (yyvsp[-6].ttype, yyvsp[-3].ttype, yyvsp[0].ttype); ;
      break;}
  case 81:
! #line 562 "c-parse.y"
  { if (pedantic)
  		    pedwarn ("ISO C forbids omitting the middle term of a ?: expression");
  		  /* Make sure first operand is calculated only once.  */
! 		  yyvsp[0].ttype = save_expr (yyvsp[-1].ttype);
! 		  yyvsp[-1].ttype = c_common_truthvalue_conversion
! 		    (default_conversion (yyvsp[0].ttype));
! 		  skip_evaluation += yyvsp[-1].ttype == truthvalue_true_node; ;
!     break;}
! case 82:
! #line 570 "c-parse.y"
! { skip_evaluation -= yyvsp[-4].ttype == truthvalue_true_node;
! 		  yyval.ttype = build_conditional_expr (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[0].ttype); ;
      break;}
  case 83:
! #line 573 "c-parse.y"
! { char class;
! 		  yyval.ttype = build_modify_expr (yyvsp[-2].ttype, NOP_EXPR, yyvsp[0].ttype);
! 		  class = TREE_CODE_CLASS (TREE_CODE (yyval.ttype));
! 		  if (IS_EXPR_CODE_CLASS (class))
! 		    C_SET_EXP_ORIGINAL_CODE (yyval.ttype, MODIFY_EXPR);
! 		;
      break;}
  case 84:
! #line 580 "c-parse.y"
! { char class;
! 		  yyval.ttype = build_modify_expr (yyvsp[-2].ttype, yyvsp[-1].code, yyvsp[0].ttype);
! 		  /* This inhibits warnings in
! 		     c_common_truthvalue_conversion.  */
! 		  class = TREE_CODE_CLASS (TREE_CODE (yyval.ttype));
! 		  if (IS_EXPR_CODE_CLASS (class))
! 		    C_SET_EXP_ORIGINAL_CODE (yyval.ttype, ERROR_MARK);
  		;
      break;}
  case 85:
! #line 592 "c-parse.y"
  {
  		  if (yychar == YYEMPTY)
  		    yychar = YYLEX;
! 		  yyval.ttype = build_external_ref (yyvsp[0].ttype, yychar == '(');
  		;
      break;}
  case 88:
! #line 600 "c-parse.y"
! { yyval.ttype = fname_decl (C_RID_CODE (yyval.ttype), yyval.ttype); ;
      break;}
  case 89:
! #line 602 "c-parse.y"
! { start_init (NULL_TREE, NULL, 0);
! 		  yyvsp[-2].ttype = groktypename (yyvsp[-2].ttype);
! 		  really_start_incremental_init (yyvsp[-2].ttype); ;
      break;}
  case 90:
! #line 606 "c-parse.y"
! { tree constructor = pop_init_level (0);
! 		  tree type = yyvsp[-5].ttype;
  		  finish_init ();
  
! 		  if (pedantic && ! flag_isoc99)
  		    pedwarn ("ISO C90 forbids compound literals");
! 		  yyval.ttype = build_compound_literal (type, constructor);
  		;
      break;}
- case 91:
- #line 615 "c-parse.y"
- { char class = TREE_CODE_CLASS (TREE_CODE (yyvsp[-1].ttype));
- 		  if (IS_EXPR_CODE_CLASS (class))
- 		    C_SET_EXP_ORIGINAL_CODE (yyvsp[-1].ttype, ERROR_MARK);
- 		  yyval.ttype = yyvsp[-1].ttype; ;
-     break;}
  case 92:
! #line 620 "c-parse.y"
! { yyval.ttype = error_mark_node; ;
      break;}
  case 93:
! #line 622 "c-parse.y"
! { tree saved_last_tree;
! 
! 		   if (pedantic)
! 		     pedwarn ("ISO C forbids braced-groups within expressions");
! 		  saved_last_tree = COMPOUND_BODY (yyvsp[-2].ttype);
! 		  RECHAIN_STMTS (yyvsp[-2].ttype, COMPOUND_BODY (yyvsp[-2].ttype));
! 		  last_tree = saved_last_tree;
! 		  TREE_CHAIN (last_tree) = NULL_TREE;
! 		  if (!last_expr_type)
! 		    last_expr_type = void_type_node;
! 		  yyval.ttype = build1 (STMT_EXPR, last_expr_type, yyvsp[-2].ttype);
! 		  TREE_SIDE_EFFECTS (yyval.ttype) = 1;
! 		;
      break;}
  case 94:
! #line 636 "c-parse.y"
! {
! 		  last_tree = COMPOUND_BODY (yyvsp[-2].ttype);
! 		  TREE_CHAIN (last_tree) = NULL_TREE;
! 		  yyval.ttype = error_mark_node;
  		;
      break;}
  case 95:
! #line 642 "c-parse.y"
! { yyval.ttype = build_function_call (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
      break;}
  case 96:
! #line 644 "c-parse.y"
! { yyval.ttype = build_va_arg (yyvsp[-3].ttype, groktypename (yyvsp[-1].ttype)); ;
      break;}
  case 97:
! #line 647 "c-parse.y"
! {
!                   tree c;
! 
!                   c = fold (yyvsp[-5].ttype);
!                   STRIP_NOPS (c);
!                   if (TREE_CODE (c) != INTEGER_CST)
!                     error ("first argument to __builtin_choose_expr not a constant");
!                   yyval.ttype = integer_zerop (c) ? yyvsp[-1].ttype : yyvsp[-3].ttype;
! 		;
      break;}
  case 98:
! #line 657 "c-parse.y"
! {
! 		  tree e1, e2;
! 
! 		  e1 = TYPE_MAIN_VARIANT (groktypename (yyvsp[-3].ttype));
! 		  e2 = TYPE_MAIN_VARIANT (groktypename (yyvsp[-1].ttype));
! 
! 		  yyval.ttype = comptypes (e1, e2, COMPARE_STRICT)
! 		    ? build_int_2 (1, 0) : build_int_2 (0, 0);
  		;
      break;}
  case 99:
! #line 667 "c-parse.y"
! { yyval.ttype = build_array_ref (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
      break;}
  case 100:
! #line 669 "c-parse.y"
! {
! 		      yyval.ttype = build_component_ref (yyvsp[-2].ttype, yyvsp[0].ttype);
! 		;
      break;}
  case 101:
! #line 673 "c-parse.y"
  {
!                   tree expr = build_indirect_ref (yyvsp[-2].ttype, "->");
  
! 			yyval.ttype = build_component_ref (expr, yyvsp[0].ttype);
  		;
      break;}
  case 102:
! #line 679 "c-parse.y"
! { yyval.ttype = build_unary_op (POSTINCREMENT_EXPR, yyvsp[-1].ttype, 0); ;
      break;}
  case 103:
! #line 681 "c-parse.y"
! { yyval.ttype = build_unary_op (POSTDECREMENT_EXPR, yyvsp[-1].ttype, 0); ;
      break;}
  case 104:
! #line 686 "c-parse.y"
! {
! 	  parsing_iso_function_signature = false; /* Reset after decls.  */
! 	;
      break;}
  case 105:
! #line 693 "c-parse.y"
! {
! 	  if (warn_traditional && !in_system_header
! 	      && parsing_iso_function_signature)
! 	    warning ("traditional C rejects ISO C style function definitions");
! 	  if (warn_old_style_definition && !in_system_header
! 	      && !parsing_iso_function_signature)
! 	    warning ("old-style parameter declaration");
! 	  parsing_iso_function_signature = false; /* Reset after warning.  */
! 	;
      break;}
  case 106:
! #line 703 "c-parse.y"
! {
! 	  if (warn_old_style_definition && !in_system_header)
! 	    warning ("old-style parameter declaration");
! 	;
      break;}
  case 107:
! #line 714 "c-parse.y"
! { ;
      break;}
! case 112:
  #line 730 "c-parse.y"
! { POP_DECLSPEC_STACK; ;
!     break;}
! case 113:
! #line 732 "c-parse.y"
! { POP_DECLSPEC_STACK; ;
!     break;}
! case 114:
! #line 734 "c-parse.y"
! { shadow_tag_warned (yyvsp[-1].ttype, 1);
! 		  pedwarn ("empty declaration"); ;
      break;}
! case 115:
! #line 737 "c-parse.y"
! { pedwarn ("empty declaration"); ;
      break;}
! case 116:
! #line 746 "c-parse.y"
! { ;
      break;}
! case 117:
! #line 754 "c-parse.y"
! { pending_xref_error ();
! 		  PUSH_DECLSPEC_STACK;
! 		  split_specs_attrs (yyvsp[0].ttype,
! 				     &current_declspecs, &prefix_attributes);
! 		  all_prefix_attributes = prefix_attributes; ;
      break;}
! case 118:
! #line 765 "c-parse.y"
! { all_prefix_attributes = chainon (yyvsp[0].ttype, prefix_attributes); ;
      break;}
! case 119:
! #line 770 "c-parse.y"
! { POP_DECLSPEC_STACK; ;
      break;}
  case 120:
! #line 772 "c-parse.y"
  { POP_DECLSPEC_STACK; ;
      break;}
  case 121:
! #line 774 "c-parse.y"
  { POP_DECLSPEC_STACK; ;
      break;}
  case 122:
! #line 776 "c-parse.y"
! { POP_DECLSPEC_STACK; ;
      break;}
  case 123:
! #line 778 "c-parse.y"
! { shadow_tag (yyvsp[-1].ttype); ;
      break;}
  case 124:
! #line 780 "c-parse.y"
! { RESTORE_EXT_FLAGS (yyvsp[-1].itype); ;
      break;}
  case 125:
! #line 837 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 126:
! #line 840 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 127:
! #line 843 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 128:
! #line 849 "c-parse.y"
! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
      break;}
  case 129:
! #line 855 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 130:
! #line 858 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 131:
! #line 864 "c-parse.y"
! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, NULL_TREE);
! 		  TREE_STATIC (yyval.ttype) = 0; ;
      break;}
  case 132:
! #line 867 "c-parse.y"
! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
      break;}
  case 133:
! #line 873 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 134:
! #line 876 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 135:
! #line 879 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 136:
! #line 882 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 137:
! #line 885 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 138:
! #line 888 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 139:
! #line 891 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 140:
! #line 897 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 141:
! #line 900 "c-parse.y"
! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
      break;}
  case 142:
! #line 903 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 143:
! #line 906 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 144:
! #line 909 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 145:
! #line 912 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 146:
! #line 918 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 147:
! #line 921 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 148:
! #line 924 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 149:
! #line 927 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 150:
! #line 930 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 151:
  #line 933 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 152:
! #line 939 "c-parse.y"
! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
      break;}
  case 153:
! #line 942 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 154:
! #line 945 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 155:
! #line 948 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 156:
! #line 951 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 157:
! #line 957 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE);
! 		  TREE_STATIC (yyval.ttype) = 0; ;
      break;}
  case 158:
! #line 960 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 159:
! #line 963 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 160:
! #line 966 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER (yyvsp[0].ttype));
! 		  yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
      break;}
  case 161:
! #line 972 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER (yyvsp[0].ttype));
! 		  yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
      break;}
  case 162:
! #line 978 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER (yyvsp[0].ttype));
! 		  yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
      break;}
  case 163:
! #line 984 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER (yyvsp[0].ttype));
! 		  yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
      break;}
  case 164:
! #line 993 "c-parse.y"
! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
      break;}
  case 165:
! #line 999 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 166:
! #line 1002 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 167:
! #line 1005 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER (yyvsp[0].ttype));
! 		  yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
      break;}
  case 168:
! #line 1011 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER (yyvsp[0].ttype));
! 		  yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
      break;}
  case 169:
! #line 1017 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER (yyvsp[0].ttype));
! 		  yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
      break;}
  case 170:
! #line 1023 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER (yyvsp[0].ttype));
! 		  yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
      break;}
  case 171:
! #line 1032 "c-parse.y"
! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
      break;}
  case 172:
! #line 1038 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 173:
! #line 1041 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 174:
! #line 1044 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 175:
! #line 1047 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 176:
! #line 1050 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 177:
! #line 1053 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 178:
! #line 1056 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER (yyvsp[0].ttype));
! 		  yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
      break;}
  case 179:
! #line 1062 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER (yyvsp[0].ttype));
! 		  yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
      break;}
  case 180:
! #line 1068 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER (yyvsp[0].ttype));
! 		  yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
      break;}
  case 181:
! #line 1074 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER (yyvsp[0].ttype));
! 		  yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
      break;}
  case 182:
! #line 1083 "c-parse.y"
! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
      break;}
  case 183:
! #line 1086 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 184:
! #line 1089 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 185:
! #line 1092 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 186:
! #line 1095 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 187:
! #line 1101 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 188:
! #line 1104 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 189:
! #line 1107 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 190:
! #line 1110 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 191:
! #line 1113 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 192:
! #line 1116 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 193:
! #line 1119 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER (yyvsp[0].ttype));
! 		  yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
      break;}
  case 194:
! #line 1125 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER (yyvsp[0].ttype));
! 		  yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
      break;}
  case 195:
! #line 1131 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER (yyvsp[0].ttype));
! 		  yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
      break;}
  case 196:
! #line 1137 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER (yyvsp[0].ttype));
! 		  yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
      break;}
  case 197:
! #line 1146 "c-parse.y"
! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
      break;}
  case 198:
! #line 1149 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 199:
! #line 1152 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 200:
! #line 1155 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
  case 201:
! #line 1158 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! 		  TREE_STATIC (yyval.ttype) = 1; ;
      break;}
! case 258:
! #line 1246 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
      break;}
! case 259:
! #line 1248 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;
      break;}
! case 263:
! #line 1283 "c-parse.y"
! { OBJC_NEED_RAW_IDENTIFIER (1);	;
      break;}
  case 266:
! #line 1293 "c-parse.y"
! { /* For a typedef name, record the meaning, not the name.
! 		     In case of `foo foo, bar;'.  */
! 		  yyval.ttype = lookup_name (yyvsp[0].ttype); ;
      break;}
  case 267:
! #line 1297 "c-parse.y"
! { skip_evaluation--;
! 		  if (TREE_CODE (yyvsp[-1].ttype) == COMPONENT_REF
! 		      && DECL_C_BIT_FIELD (TREE_OPERAND (yyvsp[-1].ttype, 1)))
! 		    error ("`typeof' applied to a bit-field");
! 		  yyval.ttype = TREE_TYPE (yyvsp[-1].ttype); ;
!     break;}
! case 268:
! #line 1303 "c-parse.y"
! { skip_evaluation--; yyval.ttype = groktypename (yyvsp[-1].ttype); ;
      break;}
! case 273:
! #line 1320 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
      break;}
  case 274:
! #line 1322 "c-parse.y"
! { yyval.ttype = yyvsp[-1].ttype; ;
      break;}
  case 275:
! #line 1327 "c-parse.y"
! { yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1,
  					  chainon (yyvsp[-1].ttype, all_prefix_attributes));
  		  start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); ;
      break;}
! case 276:
! #line 1332 "c-parse.y"
  { finish_init ();
! 		  finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ;
      break;}
! case 277:
! #line 1335 "c-parse.y"
! { tree d = start_decl (yyvsp[-2].ttype, current_declspecs, 0,
  				       chainon (yyvsp[0].ttype, all_prefix_attributes));
! 		  finish_decl (d, NULL_TREE, yyvsp[-1].ttype);
                  ;
      break;}
! case 278:
! #line 1343 "c-parse.y"
! { yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1,
  					  chainon (yyvsp[-1].ttype, all_prefix_attributes));
  		  start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); ;
      break;}
! case 279:
! #line 1348 "c-parse.y"
  { finish_init ();
! 		  finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ;
      break;}
! case 280:
! #line 1351 "c-parse.y"
! { tree d = start_decl (yyvsp[-2].ttype, current_declspecs, 0,
  				       chainon (yyvsp[0].ttype, all_prefix_attributes));
! 		  finish_decl (d, NULL_TREE, yyvsp[-1].ttype); ;
      break;}
! case 281:
! #line 1359 "c-parse.y"
  { yyval.ttype = NULL_TREE; ;
      break;}
! case 282:
! #line 1361 "c-parse.y"
  { yyval.ttype = yyvsp[0].ttype; ;
      break;}
! case 283:
! #line 1366 "c-parse.y"
  { yyval.ttype = yyvsp[0].ttype; ;
      break;}
! case 284:
! #line 1368 "c-parse.y"
  { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ;
      break;}
! case 285:
! #line 1373 "c-parse.y"
! { yyval.ttype = yyvsp[-2].ttype; ;
      break;}
! case 286:
! #line 1378 "c-parse.y"
  { yyval.ttype = yyvsp[0].ttype; ;
      break;}
! case 287:
! #line 1380 "c-parse.y"
  { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
      break;}
! case 288:
! #line 1385 "c-parse.y"
  { yyval.ttype = NULL_TREE; ;
      break;}
! case 289:
! #line 1387 "c-parse.y"
  { yyval.ttype = build_tree_list (yyvsp[0].ttype, NULL_TREE); ;
      break;}
! case 290:
! #line 1389 "c-parse.y"
  { yyval.ttype = build_tree_list (yyvsp[-3].ttype, build_tree_list (NULL_TREE, yyvsp[-1].ttype)); ;
      break;}
! case 291:
! #line 1391 "c-parse.y"
  { yyval.ttype = build_tree_list (yyvsp[-5].ttype, tree_cons (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype)); ;
      break;}
! case 292:
! #line 1393 "c-parse.y"
  { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
      break;}
! case 300:
! #line 1416 "c-parse.y"
  { really_start_incremental_init (NULL_TREE); ;
      break;}
! case 301:
! #line 1418 "c-parse.y"
! { yyval.ttype = pop_init_level (0); ;
      break;}
! case 302:
! #line 1420 "c-parse.y"
! { yyval.ttype = error_mark_node; ;
      break;}
! case 303:
! #line 1426 "c-parse.y"
  { if (pedantic)
  		    pedwarn ("ISO C forbids empty initializer braces"); ;
      break;}
! case 307:
! #line 1440 "c-parse.y"
! { if (pedantic && ! flag_isoc99)
  		    pedwarn ("ISO C90 forbids specifying subobject to initialize"); ;
      break;}
! case 308:
! #line 1443 "c-parse.y"
  { if (pedantic)
! 		    pedwarn ("obsolete use of designated initializer without `='"); ;
      break;}
! case 309:
! #line 1446 "c-parse.y"
  { set_init_label (yyvsp[-1].ttype);
  		  if (pedantic)
! 		    pedwarn ("obsolete use of designated initializer with `:'"); ;
      break;}
! case 310:
! #line 1450 "c-parse.y"
  {;
      break;}
! case 312:
! #line 1456 "c-parse.y"
  { push_init_level (0); ;
      break;}
! case 313:
! #line 1458 "c-parse.y"
  { process_init_element (pop_init_level (0)); ;
      break;}
! case 314:
! #line 1460 "c-parse.y"
! { process_init_element (yyvsp[0].ttype); ;
      break;}
! case 318:
! #line 1471 "c-parse.y"
  { set_init_label (yyvsp[0].ttype); ;
      break;}
! case 319:
! #line 1473 "c-parse.y"
! { set_init_index (yyvsp[-3].ttype, yyvsp[-1].ttype);
  		  if (pedantic)
  		    pedwarn ("ISO C forbids specifying range of elements to initialize"); ;
      break;}
! case 320:
! #line 1477 "c-parse.y"
! { set_init_index (yyvsp[-1].ttype, NULL_TREE); ;
      break;}
! case 321:
! #line 1482 "c-parse.y"
  { if (pedantic)
  		    pedwarn ("ISO C forbids nested functions");
  
  		  push_function_context ();
! 		  if (! start_function (current_declspecs, yyvsp[0].ttype,
! 					all_prefix_attributes))
  		    {
  		      pop_function_context ();
  		      YYERROR1;
  		    }
- 		  parsing_iso_function_signature = false; /* Don't warn about nested functions.  */
  		;
      break;}
! case 322:
! #line 1495 "c-parse.y"
  { tree decl = current_function_decl;
  		  DECL_SOURCE_LOCATION (decl) = yyvsp[0].location;
  		  store_parm_decls (); ;
      break;}
! case 323:
! #line 1505 "c-parse.y"
  { tree decl = current_function_decl;
  		  finish_function ();
  		  pop_function_context ();
! 		  add_decl_stmt (decl); ;
      break;}
! case 324:
! #line 1513 "c-parse.y"
  { if (pedantic)
  		    pedwarn ("ISO C forbids nested functions");
  
  		  push_function_context ();
! 		  if (! start_function (current_declspecs, yyvsp[0].ttype,
! 					all_prefix_attributes))
  		    {
  		      pop_function_context ();
  		      YYERROR1;
  		    }
- 		  parsing_iso_function_signature = false; /* Don't warn about nested functions.  */
  		;
      break;}
! case 325:
! #line 1526 "c-parse.y"
  { tree decl = current_function_decl;
  		  DECL_SOURCE_LOCATION (decl) = yyvsp[0].location;
  		  store_parm_decls (); ;
      break;}
! case 326:
! #line 1536 "c-parse.y"
  { tree decl = current_function_decl;
  		  finish_function ();
  		  pop_function_context ();
! 		  add_decl_stmt (decl); ;
!     break;}
! case 329:
! #line 1554 "c-parse.y"
! { yyval.ttype = yyvsp[-2].ttype ? tree_cons (yyvsp[-2].ttype, yyvsp[-1].ttype, NULL_TREE) : yyvsp[-1].ttype; ;
!     break;}
! case 330:
! #line 1556 "c-parse.y"
! { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
!     break;}
! case 331:
! #line 1561 "c-parse.y"
! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); ;
!     break;}
! case 332:
! #line 1563 "c-parse.y"
! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
!     break;}
! case 336:
! #line 1578 "c-parse.y"
! { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
      break;}
  case 337:
! #line 1583 "c-parse.y"
! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); ;
      break;}
  case 339:
! #line 1589 "c-parse.y"
! { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
      break;}
  case 340:
! #line 1594 "c-parse.y"
! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); ;
      break;}
  case 341:
! #line 1596 "c-parse.y"
! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
!     break;}
! case 342:
! #line 1598 "c-parse.y"
! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
!     break;}
! case 343:
! #line 1600 "c-parse.y"
! { yyval.ttype = yyvsp[-2].ttype ? tree_cons (yyvsp[-2].ttype, yyvsp[-1].ttype, NULL_TREE) : yyvsp[-1].ttype; ;
      break;}
  case 344:
! #line 1608 "c-parse.y"
! { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
      break;}
  case 345:
! #line 1613 "c-parse.y"
! { yyval.ttype = yyvsp[-2].ttype ? tree_cons (yyvsp[-2].ttype, yyvsp[-1].ttype, NULL_TREE) : yyvsp[-1].ttype; ;
      break;}
  case 346:
! #line 1615 "c-parse.y"
! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
      break;}
  case 347:
! #line 1617 "c-parse.y"
! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); ;
      break;}
  case 349:
! #line 1623 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
      break;}
  case 350:
! #line 1625 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;
      break;}
  case 351:
! #line 1630 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
      break;}
  case 352:
! #line 1632 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;
      break;}
  case 353:
! #line 1637 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
      break;}
  case 354:
! #line 1639 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;
      break;}
  case 355:
! #line 1650 "c-parse.y"
! { yyval.ttype = start_struct (RECORD_TYPE, yyvsp[-1].ttype);
! 		  /* Start scope of tag before parsing components.  */
! 		;
      break;}
  case 356:
! #line 1654 "c-parse.y"
! { yyval.ttype = finish_struct (yyvsp[-3].ttype, nreverse (yyvsp[-2].ttype),
! 				      chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); ;
      break;}
  case 357:
! #line 1657 "c-parse.y"
! { yyval.ttype = finish_struct (start_struct (RECORD_TYPE, NULL_TREE),
! 				      nreverse (yyvsp[-2].ttype), chainon (yyvsp[-4].ttype, yyvsp[0].ttype));
! 		;
      break;}
  case 358:
! #line 1661 "c-parse.y"
! { yyval.ttype = start_struct (UNION_TYPE, yyvsp[-1].ttype); ;
      break;}
  case 359:
! #line 1663 "c-parse.y"
! { yyval.ttype = finish_struct (yyvsp[-3].ttype, nreverse (yyvsp[-2].ttype),
! 				      chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); ;
      break;}
  case 360:
! #line 1666 "c-parse.y"
! { yyval.ttype = finish_struct (start_struct (UNION_TYPE, NULL_TREE),
! 				      nreverse (yyvsp[-2].ttype), chainon (yyvsp[-4].ttype, yyvsp[0].ttype));
! 		;
      break;}
  case 361:
! #line 1670 "c-parse.y"
! { yyval.ttype = start_enum (yyvsp[-1].ttype); ;
      break;}
  case 362:
! #line 1672 "c-parse.y"
! { yyval.ttype = finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype),
! 				    chainon (yyvsp[-7].ttype, yyvsp[0].ttype)); ;
      break;}
  case 363:
! #line 1675 "c-parse.y"
! { yyval.ttype = start_enum (NULL_TREE); ;
      break;}
  case 364:
! #line 1677 "c-parse.y"
! { yyval.ttype = finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype),
! 				    chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); ;
      break;}
  case 365:
! #line 1683 "c-parse.y"
! { yyval.ttype = xref_tag (RECORD_TYPE, yyvsp[0].ttype); ;
      break;}
  case 366:
! #line 1685 "c-parse.y"
! { yyval.ttype = xref_tag (UNION_TYPE, yyvsp[0].ttype); ;
      break;}
  case 367:
! #line 1687 "c-parse.y"
! { yyval.ttype = xref_tag (ENUMERAL_TYPE, yyvsp[0].ttype);
  		  /* In ISO C, enumerated types can be referred to
  		     only if already defined.  */
! 		  if (pedantic && !COMPLETE_TYPE_P (yyval.ttype))
! 		    pedwarn ("ISO C forbids forward references to `enum' types"); ;
      break;}
! case 371:
! #line 1702 "c-parse.y"
! { if (pedantic && ! flag_isoc99)
  		    pedwarn ("comma at end of enumerator list"); ;
      break;}
! case 372:
! #line 1720 "c-parse.y"
  { yyval.ttype = yyvsp[0].ttype; ;
      break;}
! case 373:
! #line 1722 "c-parse.y"
  { yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-1].ttype);
  		  pedwarn ("no semicolon at end of struct or union"); ;
      break;}
! case 374:
! #line 1727 "c-parse.y"
  { yyval.ttype = NULL_TREE; ;
      break;}
! case 375:
! #line 1729 "c-parse.y"
  { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[-2].ttype); ;
      break;}
! case 376:
! #line 1731 "c-parse.y"
  { if (pedantic)
  		    pedwarn ("extra semicolon in struct or union specified"); ;
      break;}
! case 377:
! #line 1737 "c-parse.y"
  { yyval.ttype = yyvsp[0].ttype;
  		  POP_DECLSPEC_STACK; ;
      break;}
! case 378:
! #line 1740 "c-parse.y"
  {
  		  /* Support for unnamed structs or unions as members of
  		     structs or unions (which is [a] useful and [b] supports
  		     MS P-SDK).  */
! 		  if (pedantic)
! 		    pedwarn ("ISO C doesn't support unnamed structs/unions");
! 
! 		  yyval.ttype = grokfield(NULL, current_declspecs, NULL_TREE);
  		  POP_DECLSPEC_STACK; ;
      break;}
! case 379:
! #line 1750 "c-parse.y"
  { yyval.ttype = yyvsp[0].ttype;
  		  POP_DECLSPEC_STACK; ;
      break;}
! case 380:
! #line 1753 "c-parse.y"
  { if (pedantic)
  		    pedwarn ("ISO C forbids member declarations with no members");
! 		  shadow_tag_warned (yyvsp[0].ttype, pedantic);
  		  yyval.ttype = NULL_TREE; ;
      break;}
! case 381:
! #line 1758 "c-parse.y"
  { yyval.ttype = NULL_TREE; ;
      break;}
! case 382:
! #line 1760 "c-parse.y"
  { yyval.ttype = yyvsp[0].ttype;
  		  RESTORE_EXT_FLAGS (yyvsp[-1].itype); ;
      break;}
! case 384:
! #line 1767 "c-parse.y"
  { TREE_CHAIN (yyvsp[0].ttype) = yyvsp[-3].ttype; yyval.ttype = yyvsp[0].ttype; ;
      break;}
! case 386:
! #line 1773 "c-parse.y"
  { TREE_CHAIN (yyvsp[0].ttype) = yyvsp[-3].ttype; yyval.ttype = yyvsp[0].ttype; ;
      break;}
! case 387:
! #line 1778 "c-parse.y"
! { yyval.ttype = grokfield (yyvsp[-1].ttype, current_declspecs, NULL_TREE);
  		  decl_attributes (&yyval.ttype,
  				   chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;
      break;}
! case 388:
! #line 1782 "c-parse.y"
! { yyval.ttype = grokfield (yyvsp[-3].ttype, current_declspecs, yyvsp[-1].ttype);
  		  decl_attributes (&yyval.ttype,
  				   chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;
      break;}
! case 389:
! #line 1786 "c-parse.y"
! { yyval.ttype = grokfield (NULL_TREE, current_declspecs, yyvsp[-1].ttype);
  		  decl_attributes (&yyval.ttype,
  				   chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;
      break;}
! case 390:
! #line 1793 "c-parse.y"
! { yyval.ttype = grokfield (yyvsp[-1].ttype, current_declspecs, NULL_TREE);
  		  decl_attributes (&yyval.ttype,
  				   chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;
      break;}
! case 391:
! #line 1797 "c-parse.y"
! { yyval.ttype = grokfield (yyvsp[-3].ttype, current_declspecs, yyvsp[-1].ttype);
  		  decl_attributes (&yyval.ttype,
  				   chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;
      break;}
! case 392:
! #line 1801 "c-parse.y"
! { yyval.ttype = grokfield (NULL_TREE, current_declspecs, yyvsp[-1].ttype);
  		  decl_attributes (&yyval.ttype,
  				   chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;
      break;}
! case 394:
! #line 1812 "c-parse.y"
  { if (yyvsp[-2].ttype == error_mark_node)
  		    yyval.ttype = yyvsp[-2].ttype;
  		  else
  		    TREE_CHAIN (yyvsp[0].ttype) = yyvsp[-2].ttype, yyval.ttype = yyvsp[0].ttype; ;
      break;}
! case 395:
! #line 1817 "c-parse.y"
  { yyval.ttype = error_mark_node; ;
      break;}
! case 396:
! #line 1823 "c-parse.y"
  { yyval.ttype = build_enumerator (yyvsp[0].ttype, NULL_TREE); ;
      break;}
! case 397:
! #line 1825 "c-parse.y"
! { yyval.ttype = build_enumerator (yyvsp[-2].ttype, yyvsp[0].ttype); ;
      break;}
! case 398:
! #line 1830 "c-parse.y"
  { pending_xref_error ();
! 		  yyval.ttype = yyvsp[0].ttype; ;
!     break;}
! case 399:
! #line 1833 "c-parse.y"
! { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
!     break;}
! case 400:
! #line 1838 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
!     break;}
! case 402:
! #line 1844 "c-parse.y"
! { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
! 							 NULL_TREE),
! 					all_prefix_attributes); ;
!     break;}
! case 403:
! #line 1848 "c-parse.y"
! { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
! 							 yyvsp[0].ttype),
! 					all_prefix_attributes); ;
      break;}
! case 404:
! #line 1852 "c-parse.y"
! { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
! 							 yyvsp[-1].ttype),
! 					chainon (yyvsp[0].ttype, all_prefix_attributes)); ;
      break;}
  case 408:
! #line 1865 "c-parse.y"
! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
!     break;}
! case 409:
! #line 1870 "c-parse.y"
! { yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ;
      break;}
  case 410:
! #line 1872 "c-parse.y"
! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
      break;}
  case 411:
! #line 1877 "c-parse.y"
! { yyval.ttype = yyvsp[-2].ttype ? tree_cons (yyvsp[-2].ttype, yyvsp[-1].ttype, NULL_TREE) : yyvsp[-1].ttype; ;
      break;}
  case 412:
! #line 1879 "c-parse.y"
! { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
!     break;}
! case 413:
! #line 1881 "c-parse.y"
! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 1); ;
!     break;}
! case 414:
! #line 1883 "c-parse.y"
! { yyval.ttype = build_nt (CALL_EXPR, NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
!     break;}
! case 415:
! #line 1885 "c-parse.y"
! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, NULL_TREE, 1); ;
      break;}
  case 416:
! #line 1892 "c-parse.y"
! { yyval.ttype = build_array_declarator (yyvsp[-1].ttype, yyvsp[-2].ttype, 0, 0); ;
      break;}
  case 417:
! #line 1894 "c-parse.y"
! { yyval.ttype = build_array_declarator (NULL_TREE, yyvsp[-1].ttype, 0, 0); ;
      break;}
  case 418:
! #line 1896 "c-parse.y"
! { yyval.ttype = build_array_declarator (NULL_TREE, yyvsp[-2].ttype, 0, 1); ;
      break;}
  case 419:
! #line 1898 "c-parse.y"
! { yyval.ttype = build_array_declarator (yyvsp[-1].ttype, yyvsp[-2].ttype, 1, 0); ;
      break;}
  case 420:
! #line 1901 "c-parse.y"
! { yyval.ttype = build_array_declarator (yyvsp[-1].ttype, yyvsp[-3].ttype, 1, 0); ;
      break;}
  case 423:
! #line 1914 "c-parse.y"
  {
  		  error ("label at end of compound statement");
  		;
      break;}
! case 431:
! #line 1931 "c-parse.y"
  {
  		  if ((pedantic && !flag_isoc99)
  		      || warn_declaration_after_statement)
  		    pedwarn_c90 ("ISO C90 forbids mixed declarations and code");
  		;
      break;}
! case 446:
! #line 1964 "c-parse.y"
! { pushlevel (0);
! 		  clear_last_expr ();
! 		  add_scope_stmt (/*begin_p=*/1, /*partial_p=*/0);
! 		;
!     break;}
! case 447:
! #line 1971 "c-parse.y"
! {
! 		  yyval.ttype = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0);
! 		;
!     break;}
! case 448:
! #line 1978 "c-parse.y"
! { if (flag_isoc99)
! 		    {
! 		      yyval.ttype = c_begin_compound_stmt ();
! 		      pushlevel (0);
! 		      clear_last_expr ();
! 		      add_scope_stmt (/*begin_p=*/1, /*partial_p=*/0);
! 		    }
! 		  else
! 		    yyval.ttype = NULL_TREE;
! 		;
!     break;}
! case 449:
! #line 1994 "c-parse.y"
! { if (flag_isoc99)
! 		    {
! 		      tree scope_stmt = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0);
! 		      yyval.ttype = poplevel (KEEP_MAYBE, 0, 0);
! 		      SCOPE_STMT_BLOCK (TREE_PURPOSE (scope_stmt))
! 			= SCOPE_STMT_BLOCK (TREE_VALUE (scope_stmt))
! 			= yyval.ttype;
! 		    }
! 		  else
! 		    yyval.ttype = NULL_TREE; ;
      break;}
! case 451:
! #line 2011 "c-parse.y"
  { if (pedantic)
  		    pedwarn ("ISO C forbids label declarations"); ;
      break;}
! case 454:
! #line 2022 "c-parse.y"
  { tree link;
  		  for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link))
  		    {
  		      tree label = declare_label (TREE_VALUE (link));
  		      C_DECLARED_LABEL_FLAG (label) = 1;
! 		      add_decl_stmt (label);
  		    }
  		;
      break;}
! case 455:
! #line 2036 "c-parse.y"
! {;
!     break;}
! case 457:
! #line 2040 "c-parse.y"
! { compstmt_count++;
!                       yyval.ttype = c_begin_compound_stmt (); ;
!     break;}
! case 458:
! #line 2045 "c-parse.y"
! { yyval.ttype = convert (void_type_node, integer_zero_node); ;
!     break;}
! case 459:
! #line 2047 "c-parse.y"
! { yyval.ttype = poplevel (KEEP_MAYBE, 0, 0);
! 		  SCOPE_STMT_BLOCK (TREE_PURPOSE (yyvsp[0].ttype))
! 		    = SCOPE_STMT_BLOCK (TREE_VALUE (yyvsp[0].ttype))
! 		    = yyval.ttype; ;
      break;}
  case 462:
! #line 2060 "c-parse.y"
! { if (last_tree == NULL)
  		    {
! 		      error ("braced-group within expression allowed only inside a function");
  		      YYERROR;
  		    }
! 		  /* We must force a BLOCK for this level
! 		     so that, if it is not expanded later,
! 		     there is a way to turn off the entire subtree of blocks
! 		     that are contained in it.  */
! 		  keep_next_level ();
! 		  compstmt_count++;
! 		  yyval.ttype = add_stmt (build_stmt (COMPOUND_STMT, last_tree));
! 		  last_expr_type = NULL_TREE;
  		;
      break;}
- case 463:
- #line 2077 "c-parse.y"
- { RECHAIN_STMTS (yyvsp[-1].ttype, COMPOUND_BODY (yyvsp[-1].ttype));
- 		  last_expr_type = NULL_TREE;
-                   yyval.ttype = yyvsp[-1].ttype; ;
-     break;}
- case 464:
- #line 2085 "c-parse.y"
- { c_finish_then (); ;
-     break;}
- case 466:
- #line 2102 "c-parse.y"
- { yyval.ttype = c_begin_if_stmt (); ;
-     break;}
- case 467:
- #line 2104 "c-parse.y"
- { c_expand_start_cond (c_common_truthvalue_conversion (yyvsp[-1].ttype),
- 				       compstmt_count,yyvsp[-3].ttype);
- 		  yyval.itype = stmt_count;
- 		  if_stmt_locus = yyvsp[-6].location; ;
-     break;}
  case 468:
! #line 2115 "c-parse.y"
! { stmt_count++;
! 		  compstmt_count++;
! 		  c_in_iteration_stmt++;
! 		  yyval.ttype
! 		    = add_stmt (build_stmt (DO_STMT, NULL_TREE,
! 					    NULL_TREE));
! 		  /* In the event that a parse error prevents
! 		     parsing the complete do-statement, set the
! 		     condition now.  Otherwise, we can get crashes at
! 		     RTL-generation time.  */
! 		  DO_COND (yyval.ttype) = error_mark_node; ;
      break;}
  case 469:
! #line 2127 "c-parse.y"
! { yyval.ttype = yyvsp[-2].ttype;
! 		  RECHAIN_STMTS (yyval.ttype, DO_BODY (yyval.ttype));
! 		  c_in_iteration_stmt--; ;
!     break;}
! case 470:
! #line 2137 "c-parse.y"
  { if (yychar == YYEMPTY)
  		    yychar = YYLEX;
  		  yyval.location = input_location; ;
      break;}
  case 473:
! #line 2150 "c-parse.y"
! { if (flag_isoc99)
! 		    RECHAIN_STMTS (yyvsp[-2].ttype, COMPOUND_BODY (yyvsp[-2].ttype)); ;
      break;}
  case 474:
! #line 2156 "c-parse.y"
! { if (yyvsp[0].ttype)
! 		    {
! 		      STMT_LINENO (yyvsp[0].ttype) = yyvsp[-1].location.line;
! 		      /* ??? We currently have no way of recording
! 			 the filename for a statement.  This probably
! 			 matters little in practice at the moment,
! 			 but I suspect that problems will occur when
! 			 doing inlining at the tree level.  */
! 		    }
! 		;
      break;}
  case 475:
! #line 2170 "c-parse.y"
! { if (yyvsp[0].ttype)
! 		    {
! 		      STMT_LINENO (yyvsp[0].ttype) = yyvsp[-1].location.line;
! 		    }
! 		;
      break;}
  case 476:
! #line 2179 "c-parse.y"
! { c_expand_start_else ();
! 		  yyvsp[-1].itype = stmt_count; ;
      break;}
  case 477:
! #line 2182 "c-parse.y"
! { c_finish_else ();
! 		  c_expand_end_cond ();
! 		  if (extra_warnings && stmt_count == yyvsp[-3].itype)
! 		    warning ("empty body in an else-statement"); ;
!     break;}
! case 478:
! #line 2187 "c-parse.y"
! { c_expand_end_cond ();
! 		  /* This warning is here instead of in simple_if, because we
! 		     do not want a warning if an empty if is followed by an
! 		     else statement.  Increment stmt_count so we don't
! 		     give a second error if this is a nested `if'.  */
! 		  if (extra_warnings && stmt_count++ == yyvsp[0].itype)
! 		    warning ("%Hempty body in an if-statement",
!                              &if_stmt_locus); ;
      break;}
  case 479:
! #line 2199 "c-parse.y"
! { c_expand_end_cond (); ;
      break;}
  case 480:
! #line 2209 "c-parse.y"
! { stmt_count++;
! 		  yyval.ttype = c_begin_while_stmt (); ;
      break;}
  case 481:
! #line 2212 "c-parse.y"
! { c_in_iteration_stmt++;
! 		  yyvsp[-1].ttype = c_common_truthvalue_conversion (yyvsp[-1].ttype);
! 		  c_finish_while_stmt_cond
! 		    (c_common_truthvalue_conversion (yyvsp[-1].ttype), yyvsp[-3].ttype);
! 		  yyval.ttype = add_stmt (yyvsp[-3].ttype); ;
      break;}
  case 482:
! #line 2218 "c-parse.y"
! { c_in_iteration_stmt--;
! 		  RECHAIN_STMTS (yyvsp[-1].ttype, WHILE_BODY (yyvsp[-1].ttype)); ;
      break;}
  case 483:
! #line 2222 "c-parse.y"
! { DO_COND (yyvsp[-4].ttype) = c_common_truthvalue_conversion (yyvsp[-2].ttype); ;
      break;}
  case 484:
! #line 2224 "c-parse.y"
! { ;
      break;}
  case 485:
! #line 2226 "c-parse.y"
! { yyval.ttype = build_stmt (FOR_STMT, NULL_TREE, NULL_TREE,
! 					  NULL_TREE, NULL_TREE);
! 		  add_stmt (yyval.ttype); ;
      break;}
  case 486:
! #line 2230 "c-parse.y"
! { stmt_count++;
! 		  RECHAIN_STMTS (yyvsp[-2].ttype, FOR_INIT_STMT (yyvsp[-2].ttype)); ;
      break;}
  case 487:
! #line 2233 "c-parse.y"
! { if (yyvsp[-1].ttype)
! 		    FOR_COND (yyvsp[-5].ttype)
! 		      = c_common_truthvalue_conversion (yyvsp[-1].ttype); ;
      break;}
  case 488:
! #line 2237 "c-parse.y"
! { c_in_iteration_stmt++;
! 		  FOR_EXPR (yyvsp[-8].ttype) = yyvsp[-1].ttype; ;
      break;}
  case 489:
! #line 2240 "c-parse.y"
! { RECHAIN_STMTS (yyvsp[-10].ttype, FOR_BODY (yyvsp[-10].ttype));
! 		  c_in_iteration_stmt--;;
      break;}
  case 490:
! #line 2243 "c-parse.y"
! { stmt_count++;
! 		  yyval.ttype = c_start_case (yyvsp[-1].ttype);
! 		  c_in_case_stmt++; ;
      break;}
  case 491:
! #line 2247 "c-parse.y"
! { c_finish_case ();
! 		  c_in_case_stmt--; ;
      break;}
  case 492:
! #line 2253 "c-parse.y"
! { add_stmt (build_stmt (EXPR_STMT, yyvsp[-1].ttype)); ;
      break;}
  case 493:
! #line 2255 "c-parse.y"
! { check_for_loop_decls (); ;
      break;}
  case 494:
! #line 2261 "c-parse.y"
! { stmt_count++; yyval.ttype = yyvsp[0].ttype; ;
      break;}
  case 495:
! #line 2263 "c-parse.y"
! { stmt_count++;
! 		  yyval.ttype = c_expand_expr_stmt (yyvsp[-1].ttype); ;
      break;}
  case 496:
! #line 2266 "c-parse.y"
! { if (flag_isoc99)
! 		    RECHAIN_STMTS (yyvsp[-2].ttype, COMPOUND_BODY (yyvsp[-2].ttype));
! 		  yyval.ttype = NULL_TREE; ;
      break;}
  case 497:
! #line 2270 "c-parse.y"
! { stmt_count++;
! 		if (!(c_in_iteration_stmt || c_in_case_stmt))
! 		  {
! 		    error ("break statement not within loop or switch");
! 		    yyval.ttype = NULL_TREE;
! 		  }
! 		else
! 		  yyval.ttype = add_stmt (build_break_stmt ()); ;
      break;}
  case 498:
! #line 2279 "c-parse.y"
! { stmt_count++;
! 		if (!c_in_iteration_stmt)
! 		  {
! 		    error ("continue statement not within a loop");
! 		    yyval.ttype = NULL_TREE;
! 		  }
! 		else
! 		  yyval.ttype = add_stmt (build_continue_stmt ()); ;
      break;}
  case 499:
! #line 2288 "c-parse.y"
! { stmt_count++;
! 		  yyval.ttype = c_expand_return (NULL_TREE); ;
      break;}
  case 500:
! #line 2291 "c-parse.y"
! { stmt_count++;
! 		  yyval.ttype = c_expand_return (yyvsp[-1].ttype); ;
      break;}
  case 501:
! #line 2294 "c-parse.y"
! { stmt_count++;
! 		  yyval.ttype = simple_asm_stmt (yyvsp[-2].ttype); ;
      break;}
  case 502:
! #line 2298 "c-parse.y"
! { stmt_count++;
! 		  yyval.ttype = build_asm_stmt (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, NULL_TREE); ;
      break;}
  case 503:
! #line 2303 "c-parse.y"
! { stmt_count++;
! 		  yyval.ttype = build_asm_stmt (yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE); ;
      break;}
  case 504:
! #line 2308 "c-parse.y"
! { stmt_count++;
! 		  yyval.ttype = build_asm_stmt (yyvsp[-10].ttype, yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype); ;
      break;}
  case 505:
! #line 2311 "c-parse.y"
! { tree decl;
! 		  stmt_count++;
! 		  decl = lookup_label (yyvsp[-1].ttype);
! 		  if (decl != 0)
! 		    {
! 		      TREE_USED (decl) = 1;
! 		      yyval.ttype = add_stmt (build_stmt (GOTO_STMT, decl));
! 		    }
! 		  else
! 		    yyval.ttype = NULL_TREE;
! 		;
      break;}
  case 506:
! #line 2323 "c-parse.y"
! { if (pedantic)
! 		    pedwarn ("ISO C forbids `goto *expr;'");
! 		  stmt_count++;
! 		  yyvsp[-1].ttype = convert (ptr_type_node, yyvsp[-1].ttype);
! 		  yyval.ttype = add_stmt (build_stmt (GOTO_STMT, yyvsp[-1].ttype)); ;
      break;}
  case 507:
! #line 2329 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
!     break;}
! case 508:
! #line 2337 "c-parse.y"
! { stmt_count++;
! 		  yyval.ttype = do_case (yyvsp[-1].ttype, NULL_TREE); ;
      break;}
  case 509:
! #line 2340 "c-parse.y"
! { stmt_count++;
! 		  yyval.ttype = do_case (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
      break;}
  case 510:
! #line 2343 "c-parse.y"
! { stmt_count++;
! 		  yyval.ttype = do_case (NULL_TREE, NULL_TREE); ;
      break;}
  case 511:
! #line 2346 "c-parse.y"
  { tree label = define_label (yyvsp[-2].location, yyvsp[-3].ttype);
- 		  stmt_count++;
  		  if (label)
  		    {
  		      decl_attributes (&label, yyvsp[0].ttype, 0);
! 		      yyval.ttype = add_stmt (build_stmt (LABEL_STMT, label));
  		    }
  		  else
  		    yyval.ttype = NULL_TREE;
  		;
      break;}
! case 512:
! #line 2362 "c-parse.y"
  { yyval.ttype = NULL_TREE; ;
      break;}
! case 513:
! #line 2364 "c-parse.y"
! { ;
      break;}
! case 514:
! #line 2369 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
      break;}
! case 516:
! #line 2376 "c-parse.y"
  { yyval.ttype = NULL_TREE; ;
      break;}
! case 519:
! #line 2383 "c-parse.y"
  { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
      break;}
! case 520:
! #line 2388 "c-parse.y"
! { yyval.ttype = build_tree_list (build_tree_list (NULL_TREE, yyvsp[-3].ttype), yyvsp[-1].ttype); ;
      break;}
! case 521:
! #line 2390 "c-parse.y"
! { yyvsp[-5].ttype = build_string (IDENTIFIER_LENGTH (yyvsp[-5].ttype),
! 				     IDENTIFIER_POINTER (yyvsp[-5].ttype));
! 		  yyval.ttype = build_tree_list (build_tree_list (yyvsp[-5].ttype, yyvsp[-3].ttype), yyvsp[-1].ttype); ;
      break;}
! case 522:
! #line 2397 "c-parse.y"
  { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
      break;}
! case 523:
! #line 2399 "c-parse.y"
  { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype); ;
      break;}
! case 524:
! #line 2409 "c-parse.y"
! { pushlevel (0);
  		  declare_parm_level (); ;
      break;}
! case 525:
! #line 2412 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype;
! 		  poplevel (0, 0, 0); ;
      break;}
! case 527:
! #line 2419 "c-parse.y"
  { mark_forward_parm_decls (); ;
      break;}
! case 528:
! #line 2421 "c-parse.y"
  { /* Dummy action so attributes are in known place
  		     on parser stack.  */ ;
      break;}
! case 529:
! #line 2424 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;
      break;}
! case 530:
! #line 2426 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); ;
      break;}
! case 531:
! #line 2432 "c-parse.y"
! { yyval.ttype = get_parm_info (0); ;
      break;}
! case 532:
! #line 2434 "c-parse.y"
! { yyval.ttype = get_parm_info (0);
! 		  /* Gcc used to allow this as an extension.  However, it does
! 		     not work for all targets, and thus has been disabled.
! 		     Also, since func (...) and func () are indistinguishable,
! 		     it caused problems with the code in expand_builtin which
! 		     tries to verify that BUILT_IN_NEXT_ARG is being used
! 		     correctly.  */
! 		  error ("ISO C requires a named argument before `...'");
! 		  parsing_iso_function_signature = true;
  		;
      break;}
! case 533:
! #line 2445 "c-parse.y"
! { yyval.ttype = get_parm_info (1);
! 		  parsing_iso_function_signature = true;
! 		;
      break;}
! case 534:
! #line 2449 "c-parse.y"
! { yyval.ttype = get_parm_info (0);
! 		  parsing_iso_function_signature = true;
! 		;
      break;}
! case 535:
! #line 2456 "c-parse.y"
! { push_parm_decl (yyvsp[0].ttype); ;
      break;}
! case 536:
! #line 2458 "c-parse.y"
! { push_parm_decl (yyvsp[0].ttype); ;
      break;}
! case 537:
! #line 2465 "c-parse.y"
! { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
! 							 yyvsp[-1].ttype),
! 					chainon (yyvsp[0].ttype, all_prefix_attributes));
  		  POP_DECLSPEC_STACK; ;
      break;}
! case 538:
! #line 2470 "c-parse.y"
! { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
! 							 yyvsp[-1].ttype),
! 					chainon (yyvsp[0].ttype, all_prefix_attributes));
  		  POP_DECLSPEC_STACK; ;
      break;}
! case 539:
! #line 2475 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype;
  		  POP_DECLSPEC_STACK; ;
      break;}
! case 540:
! #line 2478 "c-parse.y"
! { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
! 							 yyvsp[-1].ttype),
! 					chainon (yyvsp[0].ttype, all_prefix_attributes));
  		  POP_DECLSPEC_STACK; ;
      break;}
! case 541:
! #line 2484 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype;
  		  POP_DECLSPEC_STACK; ;
      break;}
! case 542:
! #line 2492 "c-parse.y"
! { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
! 							 yyvsp[-1].ttype),
! 					chainon (yyvsp[0].ttype, all_prefix_attributes));
  		  POP_DECLSPEC_STACK; ;
      break;}
! case 543:
! #line 2497 "c-parse.y"
! { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
! 							 yyvsp[-1].ttype),
! 					chainon (yyvsp[0].ttype, all_prefix_attributes));
  		  POP_DECLSPEC_STACK; ;
      break;}
! case 544:
! #line 2502 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype;
  		  POP_DECLSPEC_STACK; ;
      break;}
! case 545:
! #line 2505 "c-parse.y"
! { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
! 							 yyvsp[-1].ttype),
! 					chainon (yyvsp[0].ttype, all_prefix_attributes));
  		  POP_DECLSPEC_STACK; ;
      break;}
! case 546:
! #line 2511 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype;
  		  POP_DECLSPEC_STACK; ;
      break;}
! case 547:
! #line 2517 "c-parse.y"
  { prefix_attributes = chainon (prefix_attributes, yyvsp[-3].ttype);
  		  all_prefix_attributes = prefix_attributes; ;
      break;}
! case 548:
! #line 2526 "c-parse.y"
! { pushlevel (0);
  		  declare_parm_level (); ;
      break;}
! case 549:
! #line 2529 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype;
! 		  poplevel (0, 0, 0); ;
      break;}
! case 551:
! #line 2536 "c-parse.y"
! { tree t;
! 		  for (t = yyvsp[-1].ttype; t; t = TREE_CHAIN (t))
! 		    if (TREE_VALUE (t) == NULL_TREE)
! 		      error ("`...' in old-style identifier list");
! 		  yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, yyvsp[-1].ttype);
  
  		  /* Make sure we have a parmlist after attributes.  */
! 		  if (yyvsp[-3].ttype != 0
! 		      && (TREE_CODE (yyval.ttype) != TREE_LIST
! 			  || TREE_PURPOSE (yyval.ttype) == 0
! 			  || TREE_CODE (TREE_PURPOSE (yyval.ttype)) != PARM_DECL))
  		    YYERROR1;
  		;
      break;}
! case 552:
! #line 2554 "c-parse.y"
  { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
      break;}
! case 553:
! #line 2556 "c-parse.y"
  { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
      break;}
! case 554:
! #line 2562 "c-parse.y"
  { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
      break;}
! case 555:
! #line 2564 "c-parse.y"
  { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
      break;}
! case 556:
! #line 2569 "c-parse.y"
! { yyval.itype = SAVE_EXT_FLAGS();
  		  pedantic = 0;
  		  warn_pointer_arith = 0;
  		  warn_traditional = 0;
--- 2422,4541 ----
    switch (yyn) {
  
  case 1:
! #line 342 "c-parse.y"
  { if (pedantic)
  		    pedwarn ("ISO C forbids an empty source file");
  		;
      break;}
  case 3:
! #line 353 "c-parse.y"
! { yyval.dsptype = NULL; ;
!     break;}
! case 4:
! #line 354 "c-parse.y"
! { obstack_free (&parser_obstack, yyvsp[-2].otype); ;
      break;}
  case 5:
! #line 356 "c-parse.y"
! { yyval.dsptype = NULL; ggc_collect (); ;
      break;}
! case 6:
! #line 357 "c-parse.y"
! { obstack_free (&parser_obstack, yyvsp[-2].otype); ;
      break;}
  case 10:
! #line 365 "c-parse.y"
! { RESTORE_EXT_FLAGS (yyvsp[-1].itype); ;
      break;}
  case 11:
! #line 371 "c-parse.y"
! { yyval.otype = obstack_alloc (&parser_obstack, 0); ;
      break;}
  case 12:
! #line 376 "c-parse.y"
! { pedwarn ("data definition has no type or storage class");
  		  POP_DECLSPEC_STACK; ;
      break;}
  case 13:
! #line 379 "c-parse.y"
  { POP_DECLSPEC_STACK; ;
      break;}
  case 14:
! #line 381 "c-parse.y"
  { POP_DECLSPEC_STACK; ;
      break;}
  case 15:
! #line 383 "c-parse.y"
! { shadow_tag (finish_declspecs (yyvsp[-1].dsptype)); ;
      break;}
  case 18:
! #line 387 "c-parse.y"
  { if (pedantic)
! 		    pedwarn ("ISO C does not allow extra %<;%> outside of a function"); ;
      break;}
  case 19:
! #line 393 "c-parse.y"
! { if (!start_function (current_declspecs, yyvsp[0].dtrtype,
! 				       all_prefix_attributes))
  		    YYERROR1;
  		;
      break;}
  case 20:
! #line 398 "c-parse.y"
  { DECL_SOURCE_LOCATION (current_function_decl) = yyvsp[0].location;
  		  store_parm_decls (); ;
      break;}
  case 21:
! #line 401 "c-parse.y"
  { finish_function ();
  		  POP_DECLSPEC_STACK; ;
      break;}
  case 22:
! #line 404 "c-parse.y"
  { POP_DECLSPEC_STACK; ;
      break;}
  case 23:
! #line 406 "c-parse.y"
! { if (!start_function (current_declspecs, yyvsp[0].dtrtype,
! 				       all_prefix_attributes))
  		    YYERROR1;
  		;
      break;}
  case 24:
! #line 411 "c-parse.y"
  { DECL_SOURCE_LOCATION (current_function_decl) = yyvsp[0].location;
  		  store_parm_decls (); ;
      break;}
  case 25:
! #line 414 "c-parse.y"
  { finish_function ();
  		  POP_DECLSPEC_STACK; ;
      break;}
  case 26:
! #line 417 "c-parse.y"
  { POP_DECLSPEC_STACK; ;
      break;}
  case 27:
! #line 419 "c-parse.y"
! { if (!start_function (current_declspecs, yyvsp[0].dtrtype,
! 				       all_prefix_attributes))
  		    YYERROR1;
  		;
      break;}
  case 28:
! #line 424 "c-parse.y"
  { DECL_SOURCE_LOCATION (current_function_decl) = yyvsp[0].location;
  		  store_parm_decls (); ;
      break;}
  case 29:
! #line 427 "c-parse.y"
  { finish_function ();
  		  POP_DECLSPEC_STACK; ;
      break;}
  case 30:
! #line 430 "c-parse.y"
  { POP_DECLSPEC_STACK; ;
      break;}
  case 33:
! #line 439 "c-parse.y"
  { yyval.code = ADDR_EXPR; ;
      break;}
  case 34:
! #line 441 "c-parse.y"
  { yyval.code = NEGATE_EXPR; ;
      break;}
  case 35:
! #line 443 "c-parse.y"
  { yyval.code = CONVERT_EXPR;
    if (warn_traditional && !in_system_header)
      warning ("traditional C rejects the unary plus operator");
  		;
      break;}
  case 36:
! #line 448 "c-parse.y"
  { yyval.code = PREINCREMENT_EXPR; ;
      break;}
  case 37:
! #line 450 "c-parse.y"
  { yyval.code = PREDECREMENT_EXPR; ;
      break;}
  case 38:
! #line 452 "c-parse.y"
  { yyval.code = BIT_NOT_EXPR; ;
      break;}
  case 39:
! #line 454 "c-parse.y"
  { yyval.code = TRUTH_NOT_EXPR; ;
      break;}
  case 41:
! #line 459 "c-parse.y"
! { yyval.exprtype.value = build_compound_expr (yyvsp[-2].exprtype.value, yyvsp[0].exprtype.value);
! 		  yyval.exprtype.original_code = COMPOUND_EXPR; ;
      break;}
! case 42:
! #line 465 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
      break;}
  case 44:
! #line 471 "c-parse.y"
! { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].exprtype.value); ;
      break;}
! case 45:
! #line 473 "c-parse.y"
! { chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].exprtype.value)); ;
      break;}
  case 47:
! #line 479 "c-parse.y"
! { yyval.exprtype.value = build_indirect_ref (yyvsp[0].exprtype.value, "unary *");
! 		  yyval.exprtype.original_code = ERROR_MARK; ;
      break;}
  case 48:
! #line 483 "c-parse.y"
! { yyval.exprtype = yyvsp[0].exprtype;
! 		  RESTORE_EXT_FLAGS (yyvsp[-1].itype); ;
      break;}
  case 49:
! #line 486 "c-parse.y"
! { yyval.exprtype.value = build_unary_op (yyvsp[-1].code, yyvsp[0].exprtype.value, 0);
! 		  overflow_warning (yyval.exprtype.value);
! 		  yyval.exprtype.original_code = ERROR_MARK; ;
      break;}
  case 50:
! #line 491 "c-parse.y"
! { yyval.exprtype.value = finish_label_address_expr (yyvsp[0].ttype);
! 		  yyval.exprtype.original_code = ERROR_MARK; ;
      break;}
  case 51:
! #line 494 "c-parse.y"
  { skip_evaluation--;
! 		  in_sizeof--;
! 		  if (TREE_CODE (yyvsp[0].exprtype.value) == COMPONENT_REF
! 		      && DECL_C_BIT_FIELD (TREE_OPERAND (yyvsp[0].exprtype.value, 1)))
! 		    error ("%<sizeof%> applied to a bit-field");
! 		  yyval.exprtype = c_expr_sizeof_expr (yyvsp[0].exprtype); ;
      break;}
  case 52:
! #line 501 "c-parse.y"
  { skip_evaluation--;
! 		  in_sizeof--;
! 		  yyval.exprtype = c_expr_sizeof_type (yyvsp[-1].typenametype); ;
      break;}
  case 53:
! #line 505 "c-parse.y"
  { skip_evaluation--;
! 		  in_alignof--;
! 		  yyval.exprtype.value = c_alignof_expr (yyvsp[0].exprtype.value);
! 		  yyval.exprtype.original_code = ERROR_MARK; ;
      break;}
  case 54:
! #line 510 "c-parse.y"
! { skip_evaluation--;
! 		  in_alignof--;
! 		  yyval.exprtype.value = c_alignof (groktypename (yyvsp[-1].typenametype));
! 		  yyval.exprtype.original_code = ERROR_MARK; ;
      break;}
  case 55:
! #line 515 "c-parse.y"
! { yyval.exprtype.value = build_unary_op (REALPART_EXPR, yyvsp[0].exprtype.value, 0);
! 		  yyval.exprtype.original_code = ERROR_MARK; ;
      break;}
  case 56:
! #line 518 "c-parse.y"
! { yyval.exprtype.value = build_unary_op (IMAGPART_EXPR, yyvsp[0].exprtype.value, 0);
! 		  yyval.exprtype.original_code = ERROR_MARK; ;
      break;}
  case 57:
! #line 523 "c-parse.y"
! { skip_evaluation++; in_sizeof++; ;
      break;}
  case 58:
! #line 527 "c-parse.y"
! { skip_evaluation++; in_alignof++; ;
      break;}
! case 59:
! #line 531 "c-parse.y"
! { skip_evaluation++; in_typeof++; ;
      break;}
! case 61:
! #line 537 "c-parse.y"
! { yyval.exprtype.value = c_cast_expr (yyvsp[-2].typenametype, yyvsp[0].exprtype.value);
! 		  yyval.exprtype.original_code = ERROR_MARK; ;
      break;}
  case 63:
! #line 544 "c-parse.y"
! { yyval.exprtype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].exprtype, yyvsp[0].exprtype); ;
      break;}
  case 64:
! #line 546 "c-parse.y"
! { yyval.exprtype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].exprtype, yyvsp[0].exprtype); ;
      break;}
  case 65:
! #line 548 "c-parse.y"
! { yyval.exprtype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].exprtype, yyvsp[0].exprtype); ;
      break;}
  case 66:
! #line 550 "c-parse.y"
! { yyval.exprtype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].exprtype, yyvsp[0].exprtype); ;
      break;}
  case 67:
! #line 552 "c-parse.y"
! { yyval.exprtype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].exprtype, yyvsp[0].exprtype); ;
      break;}
  case 68:
! #line 554 "c-parse.y"
! { yyval.exprtype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].exprtype, yyvsp[0].exprtype); ;
      break;}
  case 69:
! #line 556 "c-parse.y"
! { yyval.exprtype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].exprtype, yyvsp[0].exprtype); ;
      break;}
  case 70:
! #line 558 "c-parse.y"
! { yyval.exprtype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].exprtype, yyvsp[0].exprtype); ;
      break;}
  case 71:
! #line 560 "c-parse.y"
! { yyval.exprtype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].exprtype, yyvsp[0].exprtype); ;
      break;}
  case 72:
! #line 562 "c-parse.y"
! { yyval.exprtype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].exprtype, yyvsp[0].exprtype); ;
      break;}
  case 73:
! #line 564 "c-parse.y"
! { yyval.exprtype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].exprtype, yyvsp[0].exprtype); ;
      break;}
  case 74:
! #line 566 "c-parse.y"
! { yyval.exprtype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].exprtype, yyvsp[0].exprtype); ;
      break;}
  case 75:
! #line 568 "c-parse.y"
! { yyvsp[-1].exprtype.value = lang_hooks.truthvalue_conversion
! 		    (default_conversion (yyvsp[-1].exprtype.value));
! 		  skip_evaluation += yyvsp[-1].exprtype.value == truthvalue_false_node; ;
      break;}
  case 76:
! #line 572 "c-parse.y"
! { skip_evaluation -= yyvsp[-3].exprtype.value == truthvalue_false_node;
! 		  yyval.exprtype = parser_build_binary_op (TRUTH_ANDIF_EXPR, yyvsp[-3].exprtype, yyvsp[0].exprtype); ;
      break;}
  case 77:
! #line 575 "c-parse.y"
! { yyvsp[-1].exprtype.value = lang_hooks.truthvalue_conversion
! 		    (default_conversion (yyvsp[-1].exprtype.value));
! 		  skip_evaluation += yyvsp[-1].exprtype.value == truthvalue_true_node; ;
      break;}
  case 78:
! #line 579 "c-parse.y"
! { skip_evaluation -= yyvsp[-3].exprtype.value == truthvalue_true_node;
! 		  yyval.exprtype = parser_build_binary_op (TRUTH_ORIF_EXPR, yyvsp[-3].exprtype, yyvsp[0].exprtype); ;
      break;}
  case 79:
! #line 582 "c-parse.y"
! { yyvsp[-1].exprtype.value = lang_hooks.truthvalue_conversion
! 		    (default_conversion (yyvsp[-1].exprtype.value));
! 		  skip_evaluation += yyvsp[-1].exprtype.value == truthvalue_false_node; ;
      break;}
  case 80:
! #line 586 "c-parse.y"
! { skip_evaluation += ((yyvsp[-4].exprtype.value == truthvalue_true_node)
! 				      - (yyvsp[-4].exprtype.value == truthvalue_false_node)); ;
      break;}
  case 81:
! #line 589 "c-parse.y"
! { skip_evaluation -= yyvsp[-6].exprtype.value == truthvalue_true_node;
! 		  yyval.exprtype.value = build_conditional_expr (yyvsp[-6].exprtype.value, yyvsp[-3].exprtype.value,
! 						     yyvsp[0].exprtype.value);
! 		  yyval.exprtype.original_code = ERROR_MARK; ;
!     break;}
! case 82:
! #line 594 "c-parse.y"
  { if (pedantic)
  		    pedwarn ("ISO C forbids omitting the middle term of a ?: expression");
  		  /* Make sure first operand is calculated only once.  */
! 		  yyvsp[0].ttype = save_expr (default_conversion (yyvsp[-1].exprtype.value));
! 		  yyvsp[-1].exprtype.value = lang_hooks.truthvalue_conversion (yyvsp[0].ttype);
! 		  skip_evaluation += yyvsp[-1].exprtype.value == truthvalue_true_node; ;
      break;}
  case 83:
! #line 601 "c-parse.y"
! { skip_evaluation -= yyvsp[-4].exprtype.value == truthvalue_true_node;
! 		  yyval.exprtype.value = build_conditional_expr (yyvsp[-4].exprtype.value, yyvsp[-3].ttype,
! 						     yyvsp[0].exprtype.value);
! 		  yyval.exprtype.original_code = ERROR_MARK; ;
      break;}
  case 84:
! #line 606 "c-parse.y"
! { yyval.exprtype.value = build_modify_expr (yyvsp[-2].exprtype.value, NOP_EXPR, yyvsp[0].exprtype.value);
! 		  yyval.exprtype.original_code = MODIFY_EXPR;
  		;
      break;}
  case 85:
! #line 610 "c-parse.y"
! { yyval.exprtype.value = build_modify_expr (yyvsp[-2].exprtype.value, yyvsp[-1].code, yyvsp[0].exprtype.value);
! 		  TREE_NO_WARNING (yyval.exprtype.value) = 1;
! 		  yyval.exprtype.original_code = ERROR_MARK;
! 		;
!     break;}
! case 86:
! #line 618 "c-parse.y"
  {
  		  if (yychar == YYEMPTY)
  		    yychar = YYLEX;
! 		  yyval.exprtype.value = build_external_ref (yyvsp[0].ttype, yychar == '(');
! 		  yyval.exprtype.original_code = ERROR_MARK;
  		;
      break;}
+ case 87:
+ #line 625 "c-parse.y"
+ { yyval.exprtype.value = yyvsp[0].ttype; yyval.exprtype.original_code = ERROR_MARK; ;
+     break;}
  case 88:
! #line 627 "c-parse.y"
! { yyval.exprtype.value = yyvsp[0].ttype; yyval.exprtype.original_code = STRING_CST; ;
      break;}
  case 89:
! #line 629 "c-parse.y"
! { yyval.exprtype.value = fname_decl (C_RID_CODE (yyvsp[0].ttype), yyvsp[0].ttype);
! 		  yyval.exprtype.original_code = ERROR_MARK; ;
      break;}
  case 90:
! #line 632 "c-parse.y"
! { start_init (NULL_TREE, NULL, 0);
! 		  yyval.ttype = groktypename (yyvsp[-2].typenametype);
! 		  if (C_TYPE_VARIABLE_SIZE (yyval.ttype))
! 		    {
! 		      error ("compound literal has variable size");
! 		      yyval.ttype = error_mark_node;
! 		    }
! 		  really_start_incremental_init (yyval.ttype); ;
!     break;}
! case 91:
! #line 641 "c-parse.y"
! { struct c_expr init = pop_init_level (0);
! 		  tree constructor = init.value;
! 		  tree type = yyvsp[-2].ttype;
  		  finish_init ();
+ 		  maybe_warn_string_init (type, init);
  
! 		  if (pedantic && !flag_isoc99)
  		    pedwarn ("ISO C90 forbids compound literals");
! 		  yyval.exprtype.value = build_compound_literal (type, constructor);
! 		  yyval.exprtype.original_code = ERROR_MARK;
  		;
      break;}
  case 92:
! #line 653 "c-parse.y"
! { yyval.exprtype.value = yyvsp[-1].exprtype.value;
! 		  if (TREE_CODE (yyval.exprtype.value) == MODIFY_EXPR)
! 		    TREE_NO_WARNING (yyval.exprtype.value) = 1;
! 		  yyval.exprtype.original_code = ERROR_MARK; ;
      break;}
  case 93:
! #line 658 "c-parse.y"
! { yyval.exprtype.value = error_mark_node; yyval.exprtype.original_code = ERROR_MARK; ;
      break;}
  case 94:
! #line 660 "c-parse.y"
! { if (pedantic)
! 		    pedwarn ("ISO C forbids braced-groups within expressions");
! 		  yyval.exprtype.value = c_finish_stmt_expr (yyvsp[-2].ttype);
! 		  yyval.exprtype.original_code = ERROR_MARK;
  		;
      break;}
  case 95:
! #line 666 "c-parse.y"
! { c_finish_stmt_expr (yyvsp[-2].ttype);
! 		  yyval.exprtype.value = error_mark_node;
! 		  yyval.exprtype.original_code = ERROR_MARK;
! 		;
      break;}
  case 96:
! #line 671 "c-parse.y"
! { yyval.exprtype.value = build_function_call (yyvsp[-3].exprtype.value, yyvsp[-1].ttype);
! 		  yyval.exprtype.original_code = ERROR_MARK; ;
      break;}
  case 97:
! #line 674 "c-parse.y"
! { yyval.exprtype.value = build_va_arg (yyvsp[-3].exprtype.value, groktypename (yyvsp[-1].typenametype));
! 		  yyval.exprtype.original_code = ERROR_MARK; ;
      break;}
  case 98:
! #line 678 "c-parse.y"
! { tree type = groktypename (yyvsp[-1].typenametype);
! 		  if (type == error_mark_node)
! 		    offsetof_base = error_mark_node;
! 		  else
! 		    offsetof_base = build1 (INDIRECT_REF, type, NULL);
  		;
      break;}
  case 99:
! #line 685 "c-parse.y"
! { yyval.exprtype.value = fold_offsetof (yyvsp[-1].ttype);
! 		  yyval.exprtype.original_code = ERROR_MARK; ;
      break;}
  case 100:
! #line 688 "c-parse.y"
! { yyval.exprtype.value = error_mark_node; yyval.exprtype.original_code = ERROR_MARK; ;
      break;}
  case 101:
! #line 691 "c-parse.y"
  {
!                   tree c;
  
!                   c = fold (yyvsp[-5].exprtype.value);
!                   STRIP_NOPS (c);
!                   if (TREE_CODE (c) != INTEGER_CST)
!                     error ("first argument to %<__builtin_choose_expr%> not"
! 			   " a constant");
!                   yyval.exprtype = integer_zerop (c) ? yyvsp[-1].exprtype : yyvsp[-3].exprtype;
  		;
      break;}
  case 102:
! #line 702 "c-parse.y"
! { yyval.exprtype.value = error_mark_node; yyval.exprtype.original_code = ERROR_MARK; ;
      break;}
  case 103:
! #line 704 "c-parse.y"
! {
! 		  tree e1, e2;
! 
! 		  e1 = TYPE_MAIN_VARIANT (groktypename (yyvsp[-3].typenametype));
! 		  e2 = TYPE_MAIN_VARIANT (groktypename (yyvsp[-1].typenametype));
! 
! 		  yyval.exprtype.value = comptypes (e1, e2)
! 		    ? build_int_cst (NULL_TREE, 1)
! 		    : build_int_cst (NULL_TREE, 0);
! 		  yyval.exprtype.original_code = ERROR_MARK;
! 		;
      break;}
  case 104:
! #line 716 "c-parse.y"
! { yyval.exprtype.value = error_mark_node; yyval.exprtype.original_code = ERROR_MARK; ;
      break;}
  case 105:
! #line 718 "c-parse.y"
! { yyval.exprtype.value = build_array_ref (yyvsp[-3].exprtype.value, yyvsp[-1].exprtype.value);
! 		  yyval.exprtype.original_code = ERROR_MARK; ;
      break;}
  case 106:
! #line 721 "c-parse.y"
! { yyval.exprtype.value = build_component_ref (yyvsp[-2].exprtype.value, yyvsp[0].ttype);
! 		  yyval.exprtype.original_code = ERROR_MARK; ;
      break;}
  case 107:
! #line 724 "c-parse.y"
! {
!                   tree expr = build_indirect_ref (yyvsp[-2].exprtype.value, "->");
! 		  yyval.exprtype.value = build_component_ref (expr, yyvsp[0].ttype);
! 		  yyval.exprtype.original_code = ERROR_MARK;
! 		;
      break;}
! case 108:
  #line 730 "c-parse.y"
! { yyval.exprtype.value = build_unary_op (POSTINCREMENT_EXPR, yyvsp[-1].exprtype.value, 0);
! 		  yyval.exprtype.original_code = ERROR_MARK; ;
      break;}
! case 109:
! #line 733 "c-parse.y"
! { yyval.exprtype.value = build_unary_op (POSTDECREMENT_EXPR, yyvsp[-1].exprtype.value, 0);
! 		  yyval.exprtype.original_code = ERROR_MARK; ;
      break;}
! case 110:
! #line 743 "c-parse.y"
! { yyval.ttype = build_component_ref (offsetof_base, yyvsp[0].ttype); ;
      break;}
! case 111:
! #line 745 "c-parse.y"
! { yyval.ttype = build_component_ref (yyvsp[-2].ttype, yyvsp[0].ttype); ;
      break;}
! case 112:
! #line 747 "c-parse.y"
! { yyval.ttype = build_array_ref (yyvsp[-3].ttype, yyvsp[-1].exprtype.value); ;
      break;}
! case 115:
! #line 760 "c-parse.y"
! { ;
      break;}
  case 120:
! #line 776 "c-parse.y"
  { POP_DECLSPEC_STACK; ;
      break;}
  case 121:
! #line 778 "c-parse.y"
  { POP_DECLSPEC_STACK; ;
      break;}
  case 122:
! #line 780 "c-parse.y"
! { shadow_tag_warned (finish_declspecs (yyvsp[-1].dsptype), 1);
! 		  pedwarn ("empty declaration"); ;
      break;}
  case 123:
! #line 783 "c-parse.y"
! { pedwarn ("empty declaration"); ;
      break;}
  case 124:
! #line 792 "c-parse.y"
! { ;
      break;}
  case 125:
! #line 800 "c-parse.y"
! { pending_xref_error ();
! 		  PUSH_DECLSPEC_STACK;
! 		  if (yyvsp[0].dsptype)
! 		    {
! 		      prefix_attributes = yyvsp[0].dsptype->attrs;
! 		      yyvsp[0].dsptype->attrs = NULL_TREE;
! 		      current_declspecs = yyvsp[0].dsptype;
! 		    }
! 		  else
! 		    {
! 		      prefix_attributes = NULL_TREE;
! 		      current_declspecs = build_null_declspecs ();
! 		    }
! 		  current_declspecs = finish_declspecs (current_declspecs);
! 		  all_prefix_attributes = prefix_attributes; ;
      break;}
  case 126:
! #line 821 "c-parse.y"
! { all_prefix_attributes = chainon (yyvsp[0].ttype, prefix_attributes); ;
      break;}
  case 127:
! #line 826 "c-parse.y"
! { POP_DECLSPEC_STACK; ;
      break;}
  case 128:
! #line 828 "c-parse.y"
! { POP_DECLSPEC_STACK; ;
      break;}
  case 129:
! #line 830 "c-parse.y"
! { POP_DECLSPEC_STACK; ;
      break;}
  case 130:
! #line 832 "c-parse.y"
! { POP_DECLSPEC_STACK; ;
      break;}
  case 131:
! #line 834 "c-parse.y"
! { shadow_tag (finish_declspecs (yyvsp[-1].dsptype)); ;
      break;}
  case 132:
! #line 836 "c-parse.y"
! { RESTORE_EXT_FLAGS (yyvsp[-1].itype); ;
      break;}
  case 133:
! #line 882 "c-parse.y"
! { yyval.dsptype = declspecs_add_qual (build_null_declspecs (), yyvsp[0].ttype); ;
      break;}
  case 134:
! #line 884 "c-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;
      break;}
  case 135:
! #line 886 "c-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;
      break;}
  case 136:
! #line 891 "c-parse.y"
! { yyval.dsptype = declspecs_add_attrs (yyvsp[-1].dsptype, yyvsp[0].ttype); ;
      break;}
  case 137:
! #line 896 "c-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;
      break;}
  case 138:
! #line 898 "c-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;
      break;}
  case 139:
! #line 903 "c-parse.y"
! { yyval.dsptype = declspecs_add_attrs (build_null_declspecs (), yyvsp[0].ttype); ;
      break;}
  case 140:
! #line 905 "c-parse.y"
! { yyval.dsptype = declspecs_add_attrs (yyvsp[-1].dsptype, yyvsp[0].ttype); ;
      break;}
  case 141:
! #line 910 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (build_null_declspecs (), yyvsp[0].tstype); ;
      break;}
  case 142:
! #line 912 "c-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;
      break;}
  case 143:
! #line 914 "c-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;
      break;}
  case 144:
! #line 916 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;
      break;}
  case 145:
! #line 918 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;
      break;}
  case 146:
! #line 920 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;
      break;}
  case 147:
! #line 922 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;
      break;}
  case 148:
! #line 927 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (build_null_declspecs (), yyvsp[0].tstype); ;
      break;}
  case 149:
! #line 929 "c-parse.y"
! { yyval.dsptype = declspecs_add_attrs (yyvsp[-1].dsptype, yyvsp[0].ttype); ;
      break;}
  case 150:
! #line 931 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;
      break;}
  case 151:
  #line 933 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;
      break;}
  case 152:
! #line 935 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;
      break;}
  case 153:
! #line 937 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;
      break;}
  case 154:
! #line 942 "c-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;
      break;}
  case 155:
! #line 944 "c-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;
      break;}
  case 156:
! #line 946 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;
      break;}
  case 157:
! #line 948 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;
      break;}
  case 158:
! #line 950 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;
      break;}
  case 159:
! #line 952 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;
      break;}
  case 160:
! #line 957 "c-parse.y"
! { yyval.dsptype = declspecs_add_attrs (yyvsp[-1].dsptype, yyvsp[0].ttype); ;
      break;}
  case 161:
! #line 959 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;
      break;}
  case 162:
! #line 961 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;
      break;}
  case 163:
! #line 963 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;
      break;}
  case 164:
! #line 965 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;
      break;}
  case 165:
! #line 970 "c-parse.y"
! { yyval.dsptype = declspecs_add_scspec (build_null_declspecs (), yyvsp[0].ttype); ;
      break;}
  case 166:
! #line 972 "c-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;
      break;}
  case 167:
! #line 974 "c-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;
      break;}
  case 168:
! #line 976 "c-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;
      break;}
  case 169:
! #line 978 "c-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;
      break;}
  case 170:
! #line 980 "c-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;
      break;}
  case 171:
! #line 982 "c-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;
      break;}
  case 172:
! #line 987 "c-parse.y"
! { yyval.dsptype = declspecs_add_attrs (yyvsp[-1].dsptype, yyvsp[0].ttype); ;
      break;}
  case 173:
! #line 992 "c-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;
      break;}
  case 174:
! #line 994 "c-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;
      break;}
  case 175:
! #line 996 "c-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;
      break;}
  case 176:
! #line 998 "c-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;
      break;}
  case 177:
! #line 1000 "c-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;
      break;}
  case 178:
! #line 1002 "c-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;
      break;}
  case 179:
! #line 1007 "c-parse.y"
! { yyval.dsptype = declspecs_add_attrs (yyvsp[-1].dsptype, yyvsp[0].ttype); ;
      break;}
  case 180:
! #line 1012 "c-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;
      break;}
  case 181:
! #line 1014 "c-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;
      break;}
  case 182:
! #line 1016 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;
      break;}
  case 183:
! #line 1018 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;
      break;}
  case 184:
! #line 1020 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;
      break;}
  case 185:
! #line 1022 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;
      break;}
  case 186:
! #line 1024 "c-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;
      break;}
  case 187:
! #line 1026 "c-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;
      break;}
  case 188:
! #line 1028 "c-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;
      break;}
  case 189:
! #line 1030 "c-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;
      break;}
  case 190:
! #line 1035 "c-parse.y"
! { yyval.dsptype = declspecs_add_attrs (yyvsp[-1].dsptype, yyvsp[0].ttype); ;
      break;}
  case 191:
! #line 1037 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;
      break;}
  case 192:
! #line 1039 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;
      break;}
  case 193:
! #line 1041 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;
      break;}
  case 194:
! #line 1043 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;
      break;}
  case 195:
! #line 1048 "c-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;
      break;}
  case 196:
! #line 1050 "c-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;
      break;}
  case 197:
! #line 1052 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;
      break;}
  case 198:
! #line 1054 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;
      break;}
  case 199:
! #line 1056 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;
      break;}
  case 200:
! #line 1058 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;
      break;}
  case 201:
! #line 1060 "c-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;
      break;}
! case 202:
! #line 1062 "c-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;
      break;}
! case 203:
! #line 1064 "c-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;
      break;}
! case 204:
! #line 1066 "c-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;
!     break;}
! case 205:
! #line 1071 "c-parse.y"
! { yyval.dsptype = declspecs_add_attrs (yyvsp[-1].dsptype, yyvsp[0].ttype); ;
!     break;}
! case 206:
! #line 1073 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;
!     break;}
! case 207:
! #line 1075 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;
!     break;}
! case 208:
! #line 1077 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;
!     break;}
! case 209:
! #line 1079 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;
      break;}
  case 266:
! #line 1166 "c-parse.y"
! { yyval.dsptype = NULL; ;
      break;}
  case 267:
! #line 1168 "c-parse.y"
! { yyval.dsptype = yyvsp[0].dsptype; ;
      break;}
! case 271:
! #line 1203 "c-parse.y"
! { OBJC_NEED_RAW_IDENTIFIER (1);
! 		  yyval.tstype.kind = ctsk_resword;
! 		  yyval.tstype.spec = yyvsp[0].ttype; ;
      break;}
  case 274:
! #line 1215 "c-parse.y"
! { /* For a typedef name, record the meaning, not the name.
! 		     In case of `foo foo, bar;'.  */
! 		  yyval.tstype.kind = ctsk_typedef;
! 		  yyval.tstype.spec = lookup_name (yyvsp[0].ttype); ;
      break;}
  case 275:
! #line 1220 "c-parse.y"
! { skip_evaluation--;
! 		  in_typeof--;
! 		  if (TREE_CODE (yyvsp[-1].exprtype.value) == COMPONENT_REF
! 		      && DECL_C_BIT_FIELD (TREE_OPERAND (yyvsp[-1].exprtype.value, 1)))
! 		    error ("%<typeof%> applied to a bit-field");
! 		  yyval.tstype.kind = ctsk_typeof;
! 		  yyval.tstype.spec = TREE_TYPE (yyvsp[-1].exprtype.value);
! 		  pop_maybe_used (variably_modified_type_p (yyval.tstype.spec,
! 							    NULL_TREE)); ;
!     break;}
! case 276:
! #line 1230 "c-parse.y"
! { skip_evaluation--;
! 		  in_typeof--;
! 		  yyval.tstype.kind = ctsk_typeof;
! 		  yyval.tstype.spec = groktypename (yyvsp[-1].typenametype);
! 		  pop_maybe_used (variably_modified_type_p (yyval.tstype.spec,
! 							    NULL_TREE)); ;
!     break;}
! case 281:
! #line 1252 "c-parse.y"
! { yyval.ttype = start_decl (yyvsp[-3].dtrtype, current_declspecs, true,
  					  chainon (yyvsp[-1].ttype, all_prefix_attributes));
+ 		  if (!yyval.ttype)
+ 		    yyval.ttype = error_mark_node;
  		  start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); ;
      break;}
! case 282:
! #line 1259 "c-parse.y"
  { finish_init ();
! 		  if (yyvsp[-1].ttype != error_mark_node)
! 		    {
! 		      maybe_warn_string_init (TREE_TYPE (yyvsp[-1].ttype), yyvsp[0].exprtype);
! 		      finish_decl (yyvsp[-1].ttype, yyvsp[0].exprtype.value, yyvsp[-4].ttype);
! 		    }
! 		;
      break;}
! case 283:
! #line 1267 "c-parse.y"
! { tree d = start_decl (yyvsp[-2].dtrtype, current_declspecs, false,
  				       chainon (yyvsp[0].ttype, all_prefix_attributes));
! 		  if (d)
! 		    finish_decl (d, NULL_TREE, yyvsp[-1].ttype);
                  ;
      break;}
! case 284:
! #line 1276 "c-parse.y"
! { yyval.ttype = start_decl (yyvsp[-3].dtrtype, current_declspecs, true,
  					  chainon (yyvsp[-1].ttype, all_prefix_attributes));
+ 		  if (!yyval.ttype)
+ 		    yyval.ttype = error_mark_node;
  		  start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); ;
      break;}
! case 285:
! #line 1283 "c-parse.y"
  { finish_init ();
! 		  if (yyvsp[-1].ttype != error_mark_node)
! 		    {
! 		      maybe_warn_string_init (TREE_TYPE (yyvsp[-1].ttype), yyvsp[0].exprtype);
! 		      finish_decl (yyvsp[-1].ttype, yyvsp[0].exprtype.value, yyvsp[-4].ttype);
! 		    }
! 		;
      break;}
! case 286:
! #line 1291 "c-parse.y"
! { tree d = start_decl (yyvsp[-2].dtrtype, current_declspecs, false,
  				       chainon (yyvsp[0].ttype, all_prefix_attributes));
! 		  if (d)
!                     finish_decl (d, NULL_TREE, yyvsp[-1].ttype); ;
      break;}
! case 287:
! #line 1300 "c-parse.y"
  { yyval.ttype = NULL_TREE; ;
      break;}
! case 288:
! #line 1302 "c-parse.y"
  { yyval.ttype = yyvsp[0].ttype; ;
      break;}
! case 289:
! #line 1307 "c-parse.y"
  { yyval.ttype = yyvsp[0].ttype; ;
      break;}
! case 290:
! #line 1309 "c-parse.y"
  { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ;
      break;}
! case 291:
! #line 1315 "c-parse.y"
! { yyval.ttype = yyvsp[-3].ttype; ;
      break;}
! case 292:
! #line 1317 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
!     break;}
! case 293:
! #line 1322 "c-parse.y"
  { yyval.ttype = yyvsp[0].ttype; ;
      break;}
! case 294:
! #line 1324 "c-parse.y"
  { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
      break;}
! case 295:
! #line 1329 "c-parse.y"
  { yyval.ttype = NULL_TREE; ;
      break;}
! case 296:
! #line 1331 "c-parse.y"
  { yyval.ttype = build_tree_list (yyvsp[0].ttype, NULL_TREE); ;
      break;}
! case 297:
! #line 1333 "c-parse.y"
  { yyval.ttype = build_tree_list (yyvsp[-3].ttype, build_tree_list (NULL_TREE, yyvsp[-1].ttype)); ;
      break;}
! case 298:
! #line 1335 "c-parse.y"
  { yyval.ttype = build_tree_list (yyvsp[-5].ttype, tree_cons (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype)); ;
      break;}
! case 299:
! #line 1337 "c-parse.y"
  { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
      break;}
! case 306:
! #line 1359 "c-parse.y"
! { yyval.exprtype = yyvsp[0].exprtype; ;
!     break;}
! case 307:
! #line 1361 "c-parse.y"
  { really_start_incremental_init (NULL_TREE); ;
      break;}
! case 308:
! #line 1363 "c-parse.y"
! { yyval.exprtype = pop_init_level (0); ;
      break;}
! case 309:
! #line 1365 "c-parse.y"
! { yyval.exprtype.value = error_mark_node; yyval.exprtype.original_code = ERROR_MARK; ;
      break;}
! case 310:
! #line 1371 "c-parse.y"
  { if (pedantic)
  		    pedwarn ("ISO C forbids empty initializer braces"); ;
      break;}
! case 314:
! #line 1385 "c-parse.y"
! { if (pedantic && !flag_isoc99)
  		    pedwarn ("ISO C90 forbids specifying subobject to initialize"); ;
      break;}
! case 315:
! #line 1388 "c-parse.y"
  { if (pedantic)
! 		    pedwarn ("obsolete use of designated initializer without %<=%>"); ;
      break;}
! case 316:
! #line 1391 "c-parse.y"
  { set_init_label (yyvsp[-1].ttype);
  		  if (pedantic)
! 		    pedwarn ("obsolete use of designated initializer with %<:%>"); ;
      break;}
! case 317:
! #line 1395 "c-parse.y"
  {;
      break;}
! case 319:
! #line 1401 "c-parse.y"
  { push_init_level (0); ;
      break;}
! case 320:
! #line 1403 "c-parse.y"
  { process_init_element (pop_init_level (0)); ;
      break;}
! case 321:
! #line 1405 "c-parse.y"
! { process_init_element (yyvsp[0].exprtype); ;
      break;}
! case 325:
! #line 1416 "c-parse.y"
  { set_init_label (yyvsp[0].ttype); ;
      break;}
! case 327:
! #line 1422 "c-parse.y"
! { set_init_index (yyvsp[-3].exprtype.value, yyvsp[-1].exprtype.value);
  		  if (pedantic)
  		    pedwarn ("ISO C forbids specifying range of elements to initialize"); ;
      break;}
! case 328:
! #line 1426 "c-parse.y"
! { set_init_index (yyvsp[-1].exprtype.value, NULL_TREE); ;
      break;}
! case 329:
! #line 1431 "c-parse.y"
  { if (pedantic)
  		    pedwarn ("ISO C forbids nested functions");
  
  		  push_function_context ();
! 		  if (!start_function (current_declspecs, yyvsp[0].dtrtype,
! 				       all_prefix_attributes))
  		    {
  		      pop_function_context ();
  		      YYERROR1;
  		    }
  		;
      break;}
! case 330:
! #line 1443 "c-parse.y"
  { tree decl = current_function_decl;
  		  DECL_SOURCE_LOCATION (decl) = yyvsp[0].location;
  		  store_parm_decls (); ;
      break;}
! case 331:
! #line 1452 "c-parse.y"
  { tree decl = current_function_decl;
+ 		  add_stmt (yyvsp[0].ttype);
  		  finish_function ();
  		  pop_function_context ();
! 		  add_stmt (build_stmt (DECL_EXPR, decl)); ;
      break;}
! case 332:
! #line 1461 "c-parse.y"
  { if (pedantic)
  		    pedwarn ("ISO C forbids nested functions");
  
  		  push_function_context ();
! 		  if (!start_function (current_declspecs, yyvsp[0].dtrtype,
! 				       all_prefix_attributes))
  		    {
  		      pop_function_context ();
  		      YYERROR1;
  		    }
  		;
      break;}
! case 333:
! #line 1473 "c-parse.y"
  { tree decl = current_function_decl;
  		  DECL_SOURCE_LOCATION (decl) = yyvsp[0].location;
  		  store_parm_decls (); ;
      break;}
! case 334:
! #line 1482 "c-parse.y"
  { tree decl = current_function_decl;
+ 		  add_stmt (yyvsp[0].ttype);
  		  finish_function ();
  		  pop_function_context ();
! 		  add_stmt (build_stmt (DECL_EXPR, decl)); ;
      break;}
  case 337:
! #line 1501 "c-parse.y"
! { yyval.dtrtype = yyvsp[-2].ttype ? build_attrs_declarator (yyvsp[-2].ttype, yyvsp[-1].dtrtype) : yyvsp[-1].dtrtype; ;
!     break;}
! case 338:
! #line 1503 "c-parse.y"
! { yyval.dtrtype = build_function_declarator (yyvsp[0].arginfotype, yyvsp[-2].dtrtype); ;
      break;}
  case 339:
! #line 1505 "c-parse.y"
! { yyval.dtrtype = set_array_declarator_inner (yyvsp[0].dtrtype, yyvsp[-1].dtrtype, false); ;
      break;}
  case 340:
! #line 1507 "c-parse.y"
! { yyval.dtrtype = make_pointer_declarator (yyvsp[-1].dsptype, yyvsp[0].dtrtype); ;
      break;}
  case 341:
! #line 1509 "c-parse.y"
! { yyval.dtrtype = build_id_declarator (yyvsp[0].ttype); ;
      break;}
  case 344:
! #line 1523 "c-parse.y"
! { yyval.dtrtype = build_function_declarator (yyvsp[0].arginfotype, yyvsp[-2].dtrtype); ;
      break;}
  case 345:
! #line 1525 "c-parse.y"
! { yyval.dtrtype = set_array_declarator_inner (yyvsp[0].dtrtype, yyvsp[-1].dtrtype, false); ;
      break;}
  case 346:
! #line 1527 "c-parse.y"
! { yyval.dtrtype = build_id_declarator (yyvsp[0].ttype); ;
      break;}
  case 347:
! #line 1532 "c-parse.y"
! { yyval.dtrtype = build_function_declarator (yyvsp[0].arginfotype, yyvsp[-2].dtrtype); ;
!     break;}
! case 348:
! #line 1534 "c-parse.y"
! { yyval.dtrtype = set_array_declarator_inner (yyvsp[0].dtrtype, yyvsp[-1].dtrtype, false); ;
      break;}
  case 349:
! #line 1536 "c-parse.y"
! { yyval.dtrtype = make_pointer_declarator (yyvsp[-1].dsptype, yyvsp[0].dtrtype); ;
      break;}
  case 350:
! #line 1538 "c-parse.y"
! { yyval.dtrtype = make_pointer_declarator (yyvsp[-1].dsptype, yyvsp[0].dtrtype); ;
      break;}
  case 351:
! #line 1540 "c-parse.y"
! { yyval.dtrtype = yyvsp[-2].ttype ? build_attrs_declarator (yyvsp[-2].ttype, yyvsp[-1].dtrtype) : yyvsp[-1].dtrtype; ;
      break;}
  case 352:
! #line 1548 "c-parse.y"
! { yyval.dtrtype = build_function_declarator (yyvsp[0].arginfotype, yyvsp[-2].dtrtype); ;
      break;}
  case 353:
! #line 1550 "c-parse.y"
! { yyval.dtrtype = yyvsp[-2].ttype ? build_attrs_declarator (yyvsp[-2].ttype, yyvsp[-1].dtrtype) : yyvsp[-1].dtrtype; ;
      break;}
  case 354:
! #line 1552 "c-parse.y"
! { yyval.dtrtype = make_pointer_declarator (yyvsp[-1].dsptype, yyvsp[0].dtrtype); ;
      break;}
  case 355:
! #line 1554 "c-parse.y"
! { yyval.dtrtype = set_array_declarator_inner (yyvsp[0].dtrtype, yyvsp[-1].dtrtype, false); ;
      break;}
  case 356:
! #line 1556 "c-parse.y"
! { yyval.dtrtype = build_id_declarator (yyvsp[0].ttype); ;
      break;}
  case 357:
! #line 1561 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
      break;}
  case 358:
! #line 1563 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;
      break;}
  case 359:
! #line 1568 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
      break;}
  case 360:
! #line 1570 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;
      break;}
  case 361:
! #line 1575 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
      break;}
  case 362:
! #line 1577 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;
      break;}
  case 363:
! #line 1588 "c-parse.y"
! { yyval.ttype = start_struct (RECORD_TYPE, yyvsp[-1].ttype);
! 		  /* Start scope of tag before parsing components.  */
! 		;
      break;}
  case 364:
! #line 1592 "c-parse.y"
! { yyval.tstype.spec = finish_struct (yyvsp[-3].ttype, nreverse (yyvsp[-2].ttype),
! 					   chainon (yyvsp[-6].ttype, yyvsp[0].ttype));
! 		  yyval.tstype.kind = ctsk_tagdef; ;
      break;}
  case 365:
! #line 1596 "c-parse.y"
! { yyval.tstype.spec = finish_struct (start_struct (RECORD_TYPE,
! 							 NULL_TREE),
! 					   nreverse (yyvsp[-2].ttype), chainon (yyvsp[-4].ttype, yyvsp[0].ttype));
! 		  yyval.tstype.kind = ctsk_tagdef;
! 		;
      break;}
  case 366:
! #line 1602 "c-parse.y"
! { yyval.ttype = start_struct (UNION_TYPE, yyvsp[-1].ttype); ;
      break;}
  case 367:
! #line 1604 "c-parse.y"
! { yyval.tstype.spec = finish_struct (yyvsp[-3].ttype, nreverse (yyvsp[-2].ttype),
! 					   chainon (yyvsp[-6].ttype, yyvsp[0].ttype));
! 		  yyval.tstype.kind = ctsk_tagdef; ;
!     break;}
! case 368:
! #line 1608 "c-parse.y"
! { yyval.tstype.spec = finish_struct (start_struct (UNION_TYPE,
! 							 NULL_TREE),
! 					   nreverse (yyvsp[-2].ttype), chainon (yyvsp[-4].ttype, yyvsp[0].ttype));
! 		  yyval.tstype.kind = ctsk_tagdef;
! 		;
!     break;}
! case 369:
! #line 1614 "c-parse.y"
! { yyval.ttype = start_enum (yyvsp[-1].ttype); ;
!     break;}
! case 370:
! #line 1616 "c-parse.y"
! { yyval.tstype.spec = finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype),
! 					 chainon (yyvsp[-7].ttype, yyvsp[0].ttype));
! 		  yyval.tstype.kind = ctsk_tagdef; ;
!     break;}
! case 371:
! #line 1620 "c-parse.y"
! { yyval.ttype = start_enum (NULL_TREE); ;
!     break;}
! case 372:
! #line 1622 "c-parse.y"
! { yyval.tstype.spec = finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype),
! 					 chainon (yyvsp[-6].ttype, yyvsp[0].ttype));
! 		  yyval.tstype.kind = ctsk_tagdef; ;
!     break;}
! case 373:
! #line 1629 "c-parse.y"
! { yyval.tstype = parser_xref_tag (RECORD_TYPE, yyvsp[0].ttype); ;
!     break;}
! case 374:
! #line 1631 "c-parse.y"
! { yyval.tstype = parser_xref_tag (UNION_TYPE, yyvsp[0].ttype); ;
!     break;}
! case 375:
! #line 1633 "c-parse.y"
! { yyval.tstype = parser_xref_tag (ENUMERAL_TYPE, yyvsp[0].ttype);
  		  /* In ISO C, enumerated types can be referred to
  		     only if already defined.  */
! 		  if (pedantic && !COMPLETE_TYPE_P (yyval.tstype.spec))
! 		    pedwarn ("ISO C forbids forward references to %<enum%> types"); ;
      break;}
! case 379:
! #line 1648 "c-parse.y"
! { if (pedantic && !flag_isoc99)
  		    pedwarn ("comma at end of enumerator list"); ;
      break;}
! case 380:
! #line 1666 "c-parse.y"
  { yyval.ttype = yyvsp[0].ttype; ;
      break;}
! case 381:
! #line 1668 "c-parse.y"
  { yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-1].ttype);
  		  pedwarn ("no semicolon at end of struct or union"); ;
      break;}
! case 382:
! #line 1673 "c-parse.y"
  { yyval.ttype = NULL_TREE; ;
      break;}
! case 383:
! #line 1675 "c-parse.y"
  { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[-2].ttype); ;
      break;}
! case 384:
! #line 1677 "c-parse.y"
  { if (pedantic)
  		    pedwarn ("extra semicolon in struct or union specified"); ;
      break;}
! case 385:
! #line 1683 "c-parse.y"
  { yyval.ttype = yyvsp[0].ttype;
  		  POP_DECLSPEC_STACK; ;
      break;}
! case 386:
! #line 1686 "c-parse.y"
  {
  		  /* Support for unnamed structs or unions as members of
  		     structs or unions (which is [a] useful and [b] supports
  		     MS P-SDK).  */
! 		  yyval.ttype = grokfield (build_id_declarator (NULL_TREE),
! 				  current_declspecs, NULL_TREE);
  		  POP_DECLSPEC_STACK; ;
      break;}
! case 387:
! #line 1694 "c-parse.y"
  { yyval.ttype = yyvsp[0].ttype;
  		  POP_DECLSPEC_STACK; ;
      break;}
! case 388:
! #line 1697 "c-parse.y"
  { if (pedantic)
  		    pedwarn ("ISO C forbids member declarations with no members");
! 		  shadow_tag_warned (finish_declspecs (yyvsp[0].dsptype), pedantic);
  		  yyval.ttype = NULL_TREE; ;
      break;}
! case 389:
! #line 1702 "c-parse.y"
  { yyval.ttype = NULL_TREE; ;
      break;}
! case 390:
! #line 1704 "c-parse.y"
  { yyval.ttype = yyvsp[0].ttype;
  		  RESTORE_EXT_FLAGS (yyvsp[-1].itype); ;
      break;}
! case 392:
! #line 1711 "c-parse.y"
  { TREE_CHAIN (yyvsp[0].ttype) = yyvsp[-3].ttype; yyval.ttype = yyvsp[0].ttype; ;
      break;}
! case 394:
! #line 1717 "c-parse.y"
  { TREE_CHAIN (yyvsp[0].ttype) = yyvsp[-3].ttype; yyval.ttype = yyvsp[0].ttype; ;
      break;}
! case 395:
! #line 1722 "c-parse.y"
! { yyval.ttype = grokfield (yyvsp[-1].dtrtype, current_declspecs, NULL_TREE);
  		  decl_attributes (&yyval.ttype,
  				   chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;
      break;}
! case 396:
! #line 1726 "c-parse.y"
! { yyval.ttype = grokfield (yyvsp[-3].dtrtype, current_declspecs, yyvsp[-1].exprtype.value);
  		  decl_attributes (&yyval.ttype,
  				   chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;
      break;}
! case 397:
! #line 1730 "c-parse.y"
! { yyval.ttype = grokfield (build_id_declarator (NULL_TREE),
! 				  current_declspecs, yyvsp[-1].exprtype.value);
  		  decl_attributes (&yyval.ttype,
  				   chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;
      break;}
! case 398:
! #line 1738 "c-parse.y"
! { yyval.ttype = grokfield (yyvsp[-1].dtrtype, current_declspecs, NULL_TREE);
  		  decl_attributes (&yyval.ttype,
  				   chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;
      break;}
! case 399:
! #line 1742 "c-parse.y"
! { yyval.ttype = grokfield (yyvsp[-3].dtrtype, current_declspecs, yyvsp[-1].exprtype.value);
  		  decl_attributes (&yyval.ttype,
  				   chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;
      break;}
! case 400:
! #line 1746 "c-parse.y"
! { yyval.ttype = grokfield (build_id_declarator (NULL_TREE),
! 				  current_declspecs, yyvsp[-1].exprtype.value);
  		  decl_attributes (&yyval.ttype,
  				   chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;
      break;}
! case 402:
! #line 1758 "c-parse.y"
  { if (yyvsp[-2].ttype == error_mark_node)
  		    yyval.ttype = yyvsp[-2].ttype;
  		  else
  		    TREE_CHAIN (yyvsp[0].ttype) = yyvsp[-2].ttype, yyval.ttype = yyvsp[0].ttype; ;
      break;}
! case 403:
! #line 1763 "c-parse.y"
  { yyval.ttype = error_mark_node; ;
      break;}
! case 404:
! #line 1769 "c-parse.y"
  { yyval.ttype = build_enumerator (yyvsp[0].ttype, NULL_TREE); ;
      break;}
! case 405:
! #line 1771 "c-parse.y"
! { yyval.ttype = build_enumerator (yyvsp[-2].ttype, yyvsp[0].exprtype.value); ;
      break;}
! case 406:
! #line 1776 "c-parse.y"
  { pending_xref_error ();
! 		  yyval.dsptype = finish_declspecs (yyvsp[0].dsptype); ;
      break;}
! case 407:
! #line 1779 "c-parse.y"
! { yyval.typenametype = XOBNEW (&parser_obstack, struct c_type_name);
! 		  yyval.typenametype->specs = yyvsp[-1].dsptype;
! 		  yyval.typenametype->declarator = yyvsp[0].dtrtype; ;
      break;}
  case 408:
! #line 1786 "c-parse.y"
! { yyval.dtrtype = build_id_declarator (NULL_TREE); ;
      break;}
  case 410:
! #line 1792 "c-parse.y"
! { yyval.parmtype = build_c_parm (current_declspecs, all_prefix_attributes,
! 				     build_id_declarator (NULL_TREE)); ;
      break;}
  case 411:
! #line 1795 "c-parse.y"
! { yyval.parmtype = build_c_parm (current_declspecs, all_prefix_attributes,
! 				     yyvsp[0].dtrtype); ;
      break;}
  case 412:
! #line 1798 "c-parse.y"
! { yyval.parmtype = build_c_parm (current_declspecs,
! 				     chainon (yyvsp[0].ttype, all_prefix_attributes),
! 				     yyvsp[-1].dtrtype); ;
      break;}
  case 416:
! #line 1811 "c-parse.y"
! { yyval.dtrtype = make_pointer_declarator (yyvsp[-1].dsptype, yyvsp[0].dtrtype); ;
      break;}
  case 417:
! #line 1816 "c-parse.y"
! { yyval.dtrtype = make_pointer_declarator
! 		    (yyvsp[0].dsptype, build_id_declarator (NULL_TREE)); ;
      break;}
  case 418:
! #line 1819 "c-parse.y"
! { yyval.dtrtype = make_pointer_declarator (yyvsp[-1].dsptype, yyvsp[0].dtrtype); ;
      break;}
  case 419:
! #line 1824 "c-parse.y"
! { yyval.dtrtype = yyvsp[-2].ttype ? build_attrs_declarator (yyvsp[-2].ttype, yyvsp[-1].dtrtype) : yyvsp[-1].dtrtype; ;
      break;}
  case 420:
! #line 1826 "c-parse.y"
! { yyval.dtrtype = build_function_declarator (yyvsp[0].arginfotype, yyvsp[-2].dtrtype); ;
!     break;}
! case 421:
! #line 1828 "c-parse.y"
! { yyval.dtrtype = set_array_declarator_inner (yyvsp[0].dtrtype, yyvsp[-1].dtrtype, true); ;
!     break;}
! case 422:
! #line 1830 "c-parse.y"
! { yyval.dtrtype = build_function_declarator
! 		    (yyvsp[0].arginfotype, build_id_declarator (NULL_TREE)); ;
      break;}
  case 423:
! #line 1833 "c-parse.y"
! { yyval.dtrtype = set_array_declarator_inner
! 		    (yyvsp[0].dtrtype, build_id_declarator (NULL_TREE), true); ;
!     break;}
! case 424:
! #line 1841 "c-parse.y"
! { yyval.dtrtype = build_array_declarator (yyvsp[-1].exprtype.value, yyvsp[-2].dsptype, false, false); ;
!     break;}
! case 425:
! #line 1843 "c-parse.y"
! { yyval.dtrtype = build_array_declarator (NULL_TREE, yyvsp[-1].dsptype, false, false); ;
!     break;}
! case 426:
! #line 1845 "c-parse.y"
! { yyval.dtrtype = build_array_declarator (NULL_TREE, yyvsp[-2].dsptype, false, true); ;
!     break;}
! case 427:
! #line 1847 "c-parse.y"
! { yyval.dtrtype = build_array_declarator (yyvsp[-1].exprtype.value, yyvsp[-2].dsptype, true, false); ;
!     break;}
! case 428:
! #line 1850 "c-parse.y"
! { yyval.dtrtype = build_array_declarator (yyvsp[-1].exprtype.value, yyvsp[-3].dsptype, true, false); ;
!     break;}
! case 431:
! #line 1863 "c-parse.y"
  {
  		  error ("label at end of compound statement");
  		;
      break;}
! case 439:
! #line 1880 "c-parse.y"
  {
  		  if ((pedantic && !flag_isoc99)
  		      || warn_declaration_after_statement)
  		    pedwarn_c90 ("ISO C90 forbids mixed declarations and code");
  		;
      break;}
! case 454:
! #line 1914 "c-parse.y"
! { yyval.ttype = c_begin_compound_stmt (flag_isoc99); ;
      break;}
! case 456:
! #line 1922 "c-parse.y"
  { if (pedantic)
  		    pedwarn ("ISO C forbids label declarations"); ;
      break;}
! case 459:
! #line 1933 "c-parse.y"
  { tree link;
  		  for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link))
  		    {
  		      tree label = declare_label (TREE_VALUE (link));
  		      C_DECLARED_LABEL_FLAG (label) = 1;
! 		      add_stmt (build_stmt (DECL_EXPR, label));
  		    }
  		;
      break;}
! case 460:
! #line 1947 "c-parse.y"
! { add_stmt (yyvsp[0].ttype); ;
      break;}
  case 462:
! #line 1951 "c-parse.y"
! { yyval.ttype = c_begin_compound_stmt (true); ;
!     break;}
! case 467:
! #line 1965 "c-parse.y"
! { if (cur_stmt_list == NULL)
  		    {
! 		      error ("braced-group within expression allowed "
! 			     "only inside a function");
  		      YYERROR;
  		    }
! 		  yyval.ttype = c_begin_stmt_expr ();
  		;
      break;}
  case 468:
! #line 1976 "c-parse.y"
! { yyval.ttype = c_end_compound_stmt (yyvsp[-1].ttype, true); ;
      break;}
  case 469:
! #line 1984 "c-parse.y"
  { if (yychar == YYEMPTY)
  		    yychar = YYLEX;
  		  yyval.location = input_location; ;
      break;}
+ case 472:
+ #line 1997 "c-parse.y"
+ { yyval.ttype = c_end_compound_stmt (yyvsp[-2].ttype, flag_isoc99); ;
+     break;}
  case 473:
! #line 2002 "c-parse.y"
! {
! 		  /* Two cases cannot and do not have line numbers associated:
! 		     If stmt is degenerate, such as "2;", then stmt is an
! 		     INTEGER_CST, which cannot hold line numbers.  But that's
! 		     ok because the statement will either be changed to a
! 		     MODIFY_EXPR during gimplification of the statement expr,
! 		     or discarded.  If stmt was compound, but without new
! 		     variables, we will have skipped the creation of a BIND
! 		     and will have a bare STATEMENT_LIST.  But that's ok
! 		     because (recursively) all of the component statments
! 		     should already have line numbers assigned.  */
! 		  if (yyvsp[0].ttype && EXPR_P (yyvsp[0].ttype))
! 		    SET_EXPR_LOCATION (yyvsp[0].ttype, yyvsp[-1].location);
! 		;
      break;}
  case 474:
! #line 2020 "c-parse.y"
! { if (yyvsp[0].ttype) SET_EXPR_LOCATION (yyvsp[0].ttype, yyvsp[-1].location); ;
      break;}
  case 475:
! #line 2024 "c-parse.y"
! { yyval.ttype = lang_hooks.truthvalue_conversion (yyvsp[0].exprtype.value);
! 		  if (EXPR_P (yyval.ttype))
! 		    SET_EXPR_LOCATION (yyval.ttype, yyvsp[-1].location); ;
      break;}
  case 476:
! #line 2037 "c-parse.y"
! { yyval.ttype = c_end_compound_stmt (yyvsp[-2].ttype, flag_isoc99); ;
      break;}
  case 477:
! #line 2042 "c-parse.y"
! { if (extra_warnings)
! 		    add_stmt (build (NOP_EXPR, NULL_TREE, NULL_TREE));
! 		  yyval.ttype = c_end_compound_stmt (yyvsp[-2].ttype, flag_isoc99); ;
      break;}
  case 479:
! #line 2051 "c-parse.y"
! { c_finish_if_stmt (yyvsp[-6].location, yyvsp[-4].ttype, yyvsp[-2].ttype, yyvsp[0].ttype, true);
! 		  add_stmt (c_end_compound_stmt (yyvsp[-7].ttype, flag_isoc99)); ;
      break;}
  case 480:
! #line 2055 "c-parse.y"
! { c_finish_if_stmt (yyvsp[-6].location, yyvsp[-4].ttype, yyvsp[-2].ttype, yyvsp[0].ttype, false);
! 		  add_stmt (c_end_compound_stmt (yyvsp[-7].ttype, flag_isoc99)); ;
      break;}
  case 481:
! #line 2059 "c-parse.y"
! { c_finish_if_stmt (yyvsp[-4].location, yyvsp[-2].ttype, yyvsp[0].ttype, NULL, true);
! 		  add_stmt (c_end_compound_stmt (yyvsp[-5].ttype, flag_isoc99)); ;
      break;}
  case 482:
! #line 2063 "c-parse.y"
! { c_finish_if_stmt (yyvsp[-4].location, yyvsp[-2].ttype, yyvsp[0].ttype, NULL, false);
! 		  add_stmt (c_end_compound_stmt (yyvsp[-5].ttype, flag_isoc99)); ;
      break;}
  case 483:
! #line 2068 "c-parse.y"
! { yyval.ttype = c_break_label; c_break_label = NULL; ;
      break;}
  case 484:
! #line 2072 "c-parse.y"
! { yyval.ttype = c_cont_label; c_cont_label = NULL; ;
      break;}
  case 485:
! #line 2078 "c-parse.y"
! { c_finish_loop (yyvsp[-6].location, yyvsp[-4].ttype, NULL, yyvsp[0].ttype, c_break_label,
! 				 c_cont_label, true);
! 		  add_stmt (c_end_compound_stmt (yyvsp[-7].ttype, flag_isoc99));
! 		  c_break_label = yyvsp[-2].ttype; c_cont_label = yyvsp[-1].ttype; ;
      break;}
  case 486:
! #line 2087 "c-parse.y"
! { yyval.ttype = c_break_label; c_break_label = yyvsp[-3].ttype; ;
      break;}
  case 487:
! #line 2088 "c-parse.y"
! { yyval.ttype = c_cont_label; c_cont_label = yyvsp[-3].ttype; ;
      break;}
  case 488:
! #line 2090 "c-parse.y"
! { c_finish_loop (yyvsp[-10].location, yyvsp[-2].ttype, NULL, yyvsp[-7].ttype, yyvsp[-5].ttype,
! 				 yyvsp[-4].ttype, false);
! 		  add_stmt (c_end_compound_stmt (yyvsp[-11].ttype, flag_isoc99)); ;
      break;}
  case 489:
! #line 2097 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
      break;}
  case 490:
! #line 2099 "c-parse.y"
! { yyval.ttype = yyvsp[0].exprtype.value; ;
      break;}
  case 491:
! #line 2104 "c-parse.y"
! { c_finish_expr_stmt (yyvsp[-1].ttype); ;
      break;}
  case 492:
! #line 2106 "c-parse.y"
! { check_for_loop_decls (); ;
      break;}
  case 493:
! #line 2110 "c-parse.y"
! { if (yyvsp[0].ttype)
! 		    {
! 		      yyval.ttype = lang_hooks.truthvalue_conversion (yyvsp[0].ttype);
! 		      if (EXPR_P (yyval.ttype))
! 			SET_EXPR_LOCATION (yyval.ttype, yyvsp[-1].location);
! 		    }
! 		  else
! 		    yyval.ttype = NULL;
! 		;
      break;}
  case 494:
! #line 2122 "c-parse.y"
! { yyval.ttype = c_process_expr_stmt (yyvsp[0].ttype); ;
      break;}
  case 495:
! #line 2129 "c-parse.y"
! { c_finish_loop (yyvsp[-7].location, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[0].ttype, c_break_label,
! 				 c_cont_label, true);
! 		  add_stmt (c_end_compound_stmt (yyvsp[-10].ttype, flag_isoc99));
! 		  c_break_label = yyvsp[-2].ttype; c_cont_label = yyvsp[-1].ttype; ;
      break;}
  case 496:
! #line 2137 "c-parse.y"
! { yyval.ttype = c_start_case (yyvsp[-1].exprtype.value); ;
      break;}
  case 497:
! #line 2139 "c-parse.y"
! { c_finish_case (yyvsp[0].ttype);
! 		  if (c_break_label)
! 		    add_stmt (build (LABEL_EXPR, void_type_node,
! 				     c_break_label));
! 		  c_break_label = yyvsp[-1].ttype;
! 		  add_stmt (c_end_compound_stmt (yyvsp[-6].ttype, flag_isoc99)); ;
      break;}
  case 498:
! #line 2150 "c-parse.y"
! { yyval.ttype = c_finish_expr_stmt (yyvsp[-1].exprtype.value); ;
      break;}
  case 499:
! #line 2152 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
      break;}
  case 500:
! #line 2154 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
      break;}
  case 501:
! #line 2156 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
      break;}
  case 502:
! #line 2158 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
      break;}
  case 503:
! #line 2160 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
      break;}
  case 504:
! #line 2162 "c-parse.y"
! { yyval.ttype = c_finish_bc_stmt (&c_break_label, true); ;
      break;}
  case 505:
! #line 2164 "c-parse.y"
! { yyval.ttype = c_finish_bc_stmt (&c_cont_label, false); ;
      break;}
  case 506:
! #line 2166 "c-parse.y"
! { yyval.ttype = c_finish_return (NULL_TREE); ;
      break;}
  case 507:
! #line 2168 "c-parse.y"
! { yyval.ttype = c_finish_return (yyvsp[-1].exprtype.value); ;
      break;}
  case 509:
! #line 2171 "c-parse.y"
! { yyval.ttype = c_finish_goto_label (yyvsp[-1].ttype); ;
      break;}
  case 510:
! #line 2173 "c-parse.y"
! { yyval.ttype = c_finish_goto_ptr (yyvsp[-1].exprtype.value); ;
      break;}
  case 511:
! #line 2175 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
!     break;}
! case 512:
! #line 2181 "c-parse.y"
! { add_stmt (yyvsp[0].ttype); yyval.ttype = NULL_TREE; ;
!     break;}
! case 514:
! #line 2190 "c-parse.y"
! { yyval.ttype = do_case (yyvsp[-1].exprtype.value, NULL_TREE); ;
!     break;}
! case 515:
! #line 2192 "c-parse.y"
! { yyval.ttype = do_case (yyvsp[-3].exprtype.value, yyvsp[-1].exprtype.value); ;
!     break;}
! case 516:
! #line 2194 "c-parse.y"
! { yyval.ttype = do_case (NULL_TREE, NULL_TREE); ;
!     break;}
! case 517:
! #line 2196 "c-parse.y"
  { tree label = define_label (yyvsp[-2].location, yyvsp[-3].ttype);
  		  if (label)
  		    {
  		      decl_attributes (&label, yyvsp[0].ttype, 0);
! 		      yyval.ttype = add_stmt (build_stmt (LABEL_EXPR, label));
  		    }
  		  else
  		    yyval.ttype = NULL_TREE;
  		;
      break;}
! case 518:
! #line 2214 "c-parse.y"
! { yyval.ttype = yyvsp[-2].ttype; ;
!     break;}
! case 519:
! #line 2220 "c-parse.y"
  { yyval.ttype = NULL_TREE; ;
      break;}
! case 521:
! #line 2227 "c-parse.y"
! { assemble_asm (yyvsp[-1].ttype); ;
      break;}
! case 522:
! #line 2229 "c-parse.y"
! {;
      break;}
! case 523:
! #line 2237 "c-parse.y"
! { yyval.ttype = build_asm_stmt (yyvsp[-6].ttype, yyvsp[-3].ttype); ;
!     break;}
! case 524:
! #line 2243 "c-parse.y"
! { yyval.ttype = build_asm_expr (yyvsp[0].ttype, 0, 0, 0, true); ;
!     break;}
! case 525:
! #line 2246 "c-parse.y"
! { yyval.ttype = build_asm_expr (yyvsp[-2].ttype, yyvsp[0].ttype, 0, 0, false); ;
!     break;}
! case 526:
! #line 2249 "c-parse.y"
! { yyval.ttype = build_asm_expr (yyvsp[-4].ttype, yyvsp[-2].ttype, yyvsp[0].ttype, 0, false); ;
!     break;}
! case 527:
! #line 2252 "c-parse.y"
! { yyval.ttype = build_asm_expr (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, yyvsp[0].ttype, false); ;
!     break;}
! case 528:
! #line 2259 "c-parse.y"
! { yyval.ttype = 0; ;
!     break;}
! case 529:
! #line 2261 "c-parse.y"
! { if (yyvsp[0].ttype != ridpointers[RID_VOLATILE])
! 		    {
! 		      warning ("%E qualifier ignored on asm", yyvsp[0].ttype);
! 		      yyval.ttype = 0;
! 		    }
! 		  else
! 		    yyval.ttype = yyvsp[0].ttype;
! 		;
!     break;}
! case 530:
! #line 2274 "c-parse.y"
  { yyval.ttype = NULL_TREE; ;
      break;}
! case 533:
! #line 2281 "c-parse.y"
  { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
      break;}
! case 534:
! #line 2287 "c-parse.y"
! { yyval.ttype = build_tree_list (build_tree_list (NULL_TREE, yyvsp[-5].ttype),
! 					yyvsp[-2].exprtype.value); ;
      break;}
! case 535:
! #line 2291 "c-parse.y"
! { yyvsp[-7].ttype = build_string (IDENTIFIER_LENGTH (yyvsp[-7].ttype),
! 				     IDENTIFIER_POINTER (yyvsp[-7].ttype));
! 		  yyval.ttype = build_tree_list (build_tree_list (yyvsp[-7].ttype, yyvsp[-5].ttype), yyvsp[-2].exprtype.value); ;
      break;}
! case 536:
! #line 2298 "c-parse.y"
  { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
      break;}
! case 537:
! #line 2300 "c-parse.y"
  { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype); ;
      break;}
! case 538:
! #line 2306 "c-parse.y"
! { if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (yyvsp[0].ttype)))
! 		      != char_type_node)
! 		    {
! 		      error ("wide string literal in %<asm%>");
! 		      yyval.ttype = build_string (1, "");
! 		    }
! 		  else
! 		    yyval.ttype = yyvsp[0].ttype; ;
!     break;}
! case 539:
! #line 2317 "c-parse.y"
! { c_lex_string_translate = 0; ;
!     break;}
! case 540:
! #line 2321 "c-parse.y"
! { c_lex_string_translate = 1; ;
!     break;}
! case 541:
! #line 2332 "c-parse.y"
! { push_scope ();
  		  declare_parm_level (); ;
      break;}
! case 542:
! #line 2335 "c-parse.y"
! { yyval.arginfotype = yyvsp[0].arginfotype;
! 		  pop_scope (); ;
      break;}
! case 544:
! #line 2342 "c-parse.y"
  { mark_forward_parm_decls (); ;
      break;}
! case 545:
! #line 2344 "c-parse.y"
  { /* Dummy action so attributes are in known place
  		     on parser stack.  */ ;
      break;}
! case 546:
! #line 2347 "c-parse.y"
! { yyval.arginfotype = yyvsp[0].arginfotype; ;
      break;}
! case 547:
! #line 2349 "c-parse.y"
! { yyval.arginfotype = XOBNEW (&parser_obstack, struct c_arg_info);
! 		  yyval.arginfotype->parms = 0;
! 		  yyval.arginfotype->tags = 0;
! 		  yyval.arginfotype->types = 0;
! 		  yyval.arginfotype->others = 0; ;
      break;}
! case 548:
! #line 2359 "c-parse.y"
! { yyval.arginfotype = XOBNEW (&parser_obstack, struct c_arg_info);
! 		  yyval.arginfotype->parms = 0;
! 		  yyval.arginfotype->tags = 0;
! 		  yyval.arginfotype->types = 0;
! 		  yyval.arginfotype->others = 0; ;
      break;}
! case 549:
! #line 2365 "c-parse.y"
! { yyval.arginfotype = XOBNEW (&parser_obstack, struct c_arg_info);
! 		  yyval.arginfotype->parms = 0;
! 		  yyval.arginfotype->tags = 0;
! 		  yyval.arginfotype->others = 0;
! 		  /* Suppress -Wold-style-definition for this case.  */
! 		  yyval.arginfotype->types = error_mark_node;
! 		  error ("ISO C requires a named argument before %<...%>");
  		;
      break;}
! case 550:
! #line 2374 "c-parse.y"
! { yyval.arginfotype = get_parm_info (/*ellipsis=*/false); ;
      break;}
! case 551:
! #line 2376 "c-parse.y"
! { yyval.arginfotype = get_parm_info (/*ellipsis=*/true); ;
      break;}
! case 552:
! #line 2381 "c-parse.y"
! { push_parm_decl (yyvsp[0].parmtype); ;
      break;}
! case 553:
! #line 2383 "c-parse.y"
! { push_parm_decl (yyvsp[0].parmtype); ;
      break;}
! case 554:
! #line 2390 "c-parse.y"
! { yyval.parmtype = build_c_parm (current_declspecs,
! 				     chainon (yyvsp[0].ttype, all_prefix_attributes), yyvsp[-1].dtrtype);
  		  POP_DECLSPEC_STACK; ;
      break;}
! case 555:
! #line 2394 "c-parse.y"
! { yyval.parmtype = build_c_parm (current_declspecs,
! 				     chainon (yyvsp[0].ttype, all_prefix_attributes), yyvsp[-1].dtrtype);
  		  POP_DECLSPEC_STACK; ;
      break;}
! case 556:
! #line 2398 "c-parse.y"
! { yyval.parmtype = yyvsp[0].parmtype;
  		  POP_DECLSPEC_STACK; ;
      break;}
! case 557:
! #line 2401 "c-parse.y"
! { yyval.parmtype = build_c_parm (current_declspecs,
! 				     chainon (yyvsp[0].ttype, all_prefix_attributes), yyvsp[-1].dtrtype);
  		  POP_DECLSPEC_STACK; ;
      break;}
! case 558:
! #line 2406 "c-parse.y"
! { yyval.parmtype = yyvsp[0].parmtype;
  		  POP_DECLSPEC_STACK; ;
      break;}
! case 559:
! #line 2414 "c-parse.y"
! { yyval.parmtype = build_c_parm (current_declspecs,
! 				     chainon (yyvsp[0].ttype, all_prefix_attributes), yyvsp[-1].dtrtype);
  		  POP_DECLSPEC_STACK; ;
      break;}
! case 560:
! #line 2418 "c-parse.y"
! { yyval.parmtype = build_c_parm (current_declspecs,
! 				     chainon (yyvsp[0].ttype, all_prefix_attributes), yyvsp[-1].dtrtype);
  		  POP_DECLSPEC_STACK; ;
      break;}
! case 561:
! #line 2422 "c-parse.y"
! { yyval.parmtype = yyvsp[0].parmtype;
  		  POP_DECLSPEC_STACK; ;
      break;}
! case 562:
! #line 2425 "c-parse.y"
! { yyval.parmtype = build_c_parm (current_declspecs,
! 				     chainon (yyvsp[0].ttype, all_prefix_attributes), yyvsp[-1].dtrtype);
  		  POP_DECLSPEC_STACK; ;
      break;}
! case 563:
! #line 2430 "c-parse.y"
! { yyval.parmtype = yyvsp[0].parmtype;
  		  POP_DECLSPEC_STACK; ;
      break;}
! case 564:
! #line 2436 "c-parse.y"
  { prefix_attributes = chainon (prefix_attributes, yyvsp[-3].ttype);
  		  all_prefix_attributes = prefix_attributes; ;
      break;}
! case 565:
! #line 2445 "c-parse.y"
! { push_scope ();
  		  declare_parm_level (); ;
      break;}
! case 566:
! #line 2448 "c-parse.y"
! { yyval.arginfotype = yyvsp[0].arginfotype;
! 		  pop_scope (); ;
      break;}
! case 568:
! #line 2455 "c-parse.y"
! { yyval.arginfotype = XOBNEW (&parser_obstack, struct c_arg_info);
! 		  yyval.arginfotype->parms = 0;
! 		  yyval.arginfotype->tags = 0;
! 		  yyval.arginfotype->types = yyvsp[-1].ttype;
! 		  yyval.arginfotype->others = 0;
  
  		  /* Make sure we have a parmlist after attributes.  */
! 		  if (yyvsp[-3].ttype != 0)
  		    YYERROR1;
  		;
      break;}
! case 569:
! #line 2470 "c-parse.y"
  { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
      break;}
! case 570:
! #line 2472 "c-parse.y"
  { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
      break;}
! case 571:
! #line 2478 "c-parse.y"
  { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
      break;}
! case 572:
! #line 2480 "c-parse.y"
  { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
      break;}
! case 573:
! #line 2485 "c-parse.y"
! { yyval.itype = SAVE_EXT_FLAGS ();
  		  pedantic = 0;
  		  warn_pointer_arith = 0;
  		  warn_traditional = 0;
*************** yyreturn:
*** 4840,4846 ****
  #endif
    return yyresult;
  }
! #line 2576 "c-parse.y"
  
  
  /* yylex() is a thin wrapper around c_lex(), all it does is translate
--- 4774,4780 ----
  #endif
    return yyresult;
  }
! #line 2492 "c-parse.y"
  
  
  /* yylex() is a thin wrapper around c_lex(), all it does is translate
*************** static const struct resword reswords[] =
*** 4876,4881 ****
--- 4810,4816 ----
    { "__attribute",	RID_ATTRIBUTE,	0 },
    { "__attribute__",	RID_ATTRIBUTE,	0 },
    { "__builtin_choose_expr", RID_CHOOSE_EXPR, 0 },
+   { "__builtin_offsetof", RID_OFFSETOF, 0 },
    { "__builtin_types_compatible_p", RID_TYPES_COMPATIBLE_P, 0 },
    { "__builtin_va_arg",	RID_VA_ARG,	0 },
    { "__complex",	RID_COMPLEX,	0 },
*************** static const struct resword reswords[] =
*** 4889,4900 ****
    { "__inline",		RID_INLINE,	0 },
    { "__inline__",	RID_INLINE,	0 },
    { "__label__",	RID_LABEL,	0 },
-   { "__ptrbase",	RID_PTRBASE,	0 },
-   { "__ptrbase__",	RID_PTRBASE,	0 },
-   { "__ptrextent",	RID_PTREXTENT,	0 },
-   { "__ptrextent__",	RID_PTREXTENT,	0 },
-   { "__ptrvalue",	RID_PTRVALUE,	0 },
-   { "__ptrvalue__",	RID_PTRVALUE,	0 },
    { "__real",		RID_REALPART,	0 },
    { "__real__",		RID_REALPART,	0 },
    { "__restrict",	RID_RESTRICT,	0 },
--- 4824,4829 ----
*************** static const struct resword reswords[] =
*** 4942,4947 ****
--- 4871,4877 ----
    { "void",		RID_VOID,	0 },
    { "volatile",		RID_VOLATILE,	0 },
    { "while",		RID_WHILE,	0 },
+ 
  };
  #define N_reswords (sizeof reswords / sizeof (struct resword))
  
*************** static const short rid_to_yy[RID_MAX] =
*** 4976,4987 ****
    /* RID_MUTABLE */	0,
  
    /* ObjC */
!   /* RID_IN */		TYPE_QUAL,
!   /* RID_OUT */		TYPE_QUAL,
!   /* RID_INOUT */	TYPE_QUAL,
!   /* RID_BYCOPY */	TYPE_QUAL,
!   /* RID_BYREF */	TYPE_QUAL,
!   /* RID_ONEWAY */	TYPE_QUAL,
  
    /* C */
    /* RID_INT */		TYPESPEC,
--- 4906,4917 ----
    /* RID_MUTABLE */	0,
  
    /* ObjC */
!   /* RID_IN */		OBJC_TYPE_QUAL,
!   /* RID_OUT */		OBJC_TYPE_QUAL,
!   /* RID_INOUT */	OBJC_TYPE_QUAL,
!   /* RID_BYCOPY */	OBJC_TYPE_QUAL,
!   /* RID_BYREF */	OBJC_TYPE_QUAL,
!   /* RID_ONEWAY */	OBJC_TYPE_QUAL,
  
    /* C */
    /* RID_INT */		TYPESPEC,
*************** static const short rid_to_yy[RID_MAX] =
*** 5016,5024 ****
    /* RID_IMAGPART */	IMAGPART,
    /* RID_REALPART */	REALPART,
    /* RID_LABEL */	LABEL,
-   /* RID_PTRBASE */	PTR_BASE,
-   /* RID_PTREXTENT */	PTR_EXTENT,
-   /* RID_PTRVALUE */	PTR_VALUE,
  
    /* RID_CHOOSE_EXPR */			CHOOSE_EXPR,
    /* RID_TYPES_COMPATIBLE_P */		TYPES_COMPATIBLE_P,
--- 4946,4951 ----
*************** static const short rid_to_yy[RID_MAX] =
*** 5041,5047 ****
    /* RID_FALSE */	0,
    /* RID_NAMESPACE */	0,
    /* RID_NEW */		0,
!   /* RID_OFFSETOF */    0,
    /* RID_OPERATOR */	0,
    /* RID_THIS */	0,
    /* RID_THROW */	0,
--- 4968,4974 ----
    /* RID_FALSE */	0,
    /* RID_NAMESPACE */	0,
    /* RID_NEW */		0,
!   /* RID_OFFSETOF */    OFFSETOF,
    /* RID_OPERATOR */	0,
    /* RID_THIS */	0,
    /* RID_THROW */	0,
*************** static const short rid_to_yy[RID_MAX] =
*** 5058,5081 ****
    /* RID_STATCAST */	0,
  
    /* Objective C */
!   /* RID_ID */			OBJECTNAME,
!   /* RID_AT_ENCODE */		ENCODE,
!   /* RID_AT_END */		END,
!   /* RID_AT_CLASS */		CLASS,
!   /* RID_AT_ALIAS */		ALIAS,
!   /* RID_AT_DEFS */		DEFS,
!   /* RID_AT_PRIVATE */		PRIVATE,
!   /* RID_AT_PROTECTED */	PROTECTED,
!   /* RID_AT_PUBLIC */		PUBLIC,
!   /* RID_AT_PROTOCOL */		PROTOCOL,
!   /* RID_AT_SELECTOR */		SELECTOR,
    /* RID_AT_THROW */		AT_THROW,
    /* RID_AT_TRY */		AT_TRY,
    /* RID_AT_CATCH */		AT_CATCH,
    /* RID_AT_FINALLY */		AT_FINALLY,
    /* RID_AT_SYNCHRONIZED */	AT_SYNCHRONIZED,
!   /* RID_AT_INTERFACE */	INTERFACE,
!   /* RID_AT_IMPLEMENTATION */	IMPLEMENTATION
  };
  
  static void
--- 4985,5007 ----
    /* RID_STATCAST */	0,
  
    /* Objective C */
!   /* RID_AT_ENCODE */		AT_ENCODE,
!   /* RID_AT_END */		AT_END,
!   /* RID_AT_CLASS */		AT_CLASS,
!   /* RID_AT_ALIAS */		AT_ALIAS,
!   /* RID_AT_DEFS */		AT_DEFS,
!   /* RID_AT_PRIVATE */		AT_PRIVATE,
!   /* RID_AT_PROTECTED */	AT_PROTECTED,
!   /* RID_AT_PUBLIC */		AT_PUBLIC,
!   /* RID_AT_PROTOCOL */		AT_PROTOCOL,
!   /* RID_AT_SELECTOR */		AT_SELECTOR,
    /* RID_AT_THROW */		AT_THROW,
    /* RID_AT_TRY */		AT_TRY,
    /* RID_AT_CATCH */		AT_CATCH,
    /* RID_AT_FINALLY */		AT_FINALLY,
    /* RID_AT_SYNCHRONIZED */	AT_SYNCHRONIZED,
!   /* RID_AT_INTERFACE */	AT_INTERFACE,
!   /* RID_AT_IMPLEMENTATION */	AT_IMPLEMENTATION
  };
  
  static void
*************** init_reswords (void)
*** 5089,5095 ****
    if (!c_dialect_objc ())
       mask |= D_OBJC;
  
!   ridpointers = ggc_calloc ((int) RID_MAX, sizeof (tree));
    for (i = 0; i < N_reswords; i++)
      {
        /* If a keyword is disabled, do not enter it into the table
--- 5015,5021 ----
    if (!c_dialect_objc ())
       mask |= D_OBJC;
  
!   ridpointers = GGC_CNEWVEC (tree, (int) RID_MAX);
    for (i = 0; i < N_reswords; i++)
      {
        /* If a keyword is disabled, do not enter it into the table
*************** _yylex (void)
*** 5234,5240 ****
        /* These tokens should not survive translation phase 4.  */
      case CPP_HASH:
      case CPP_PASTE:
!       error ("syntax error at '%s' token", NAME(last_token));
        goto get_next;
  
      default:
--- 5160,5166 ----
        /* These tokens should not survive translation phase 4.  */
      case CPP_HASH:
      case CPP_PASTE:
!       error ("syntax error at %qs token", NAME(last_token));
        goto get_next;
  
      default:
*************** yyprint (FILE *file, int yychar, YYSTYPE
*** 5266,5278 ****
      {
      case IDENTIFIER:
      case TYPENAME:
-     case OBJECTNAME:
      case TYPESPEC:
      case TYPE_QUAL:
      case SCSPEC:
      case STATIC:
        if (IDENTIFIER_POINTER (t))
! 	fprintf (file, " `%s'", IDENTIFIER_POINTER (t));
        break;
  
      case CONSTANT:
--- 5192,5203 ----
      {
      case IDENTIFIER:
      case TYPENAME:
      case TYPESPEC:
      case TYPE_QUAL:
      case SCSPEC:
      case STATIC:
        if (IDENTIFIER_POINTER (t))
! 	fprintf (file, " '%s'", IDENTIFIER_POINTER (t));
        break;
  
      case CONSTANT:
*************** yyprint (FILE *file, int yychar, YYSTYPE
*** 5287,5308 ****
      }
  }
  
! /* This is not the ideal place to put these, but we have to get them out
!    of c-lex.c because cp/lex.c has its own versions.  */
  
  /* Parse the file.  */
  void
  c_parse_file (void)
  {
    yyparse ();
-   /* In case there were missing closebraces, get us back to the global
-      binding level.  */
-   while (! global_bindings_p ())
-     poplevel (0, 0, 0);
-   /* __FUNCTION__ is defined at file scope ("").  This
-      call may not be necessary as my tests indicate it
-      still works without it.  */
-   finish_fname_decls ();
  
    if (malloced_yyss)
      {
--- 5212,5225 ----
      }
  }
  
! /* This is not the ideal place to put this, but we have to get it out
!    of c-lex.c because cp/lex.c has its own version.  */
  
  /* Parse the file.  */
  void
  c_parse_file (void)
  {
    yyparse ();
  
    if (malloced_yyss)
      {
*************** c_parse_file (void)
*** 5312,5315 ****
--- 5229,5249 ----
      }
  }
  
+ #ifdef __XGETTEXT__
+ /* Depending on the version of Bison used to compile this grammar,
+    it may issue generic diagnostics spelled "syntax error" or
+    "parse error".  To prevent this from changing the translation
+    template randomly, we list all the variants of this particular
+    diagnostic here.  Translators: there is no fine distinction
+    between diagnostics with "syntax error" in them, and diagnostics
+    with "parse error" in them.  It's okay to give them both the same
+    translation.  */
+ const char d1[] = N_("syntax error");
+ const char d2[] = N_("parse error");
+ const char d3[] = N_("syntax error; also virtual memory exhausted");
+ const char d4[] = N_("parse error; also virtual memory exhausted");
+ const char d5[] = N_("syntax error: cannot back up");
+ const char d6[] = N_("parse error: cannot back up");
+ #endif
+ 
  #include "gt-c-parse.h"
diff -Nrcpad gcc-3.4.3/gcc/c-parse.in gcc-4.0.0/gcc/c-parse.in
*** gcc-3.4.3/gcc/c-parse.in	Thu Oct 14 23:12:53 2004
--- gcc-4.0.0/gcc/c-parse.in	Wed Jan  5 17:08:35 2005
***************
*** 1,6 ****
  /* YACC parser for C syntax and for Objective C.  -*-c-*-
!    Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997,
!    1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
--- 1,6 ----
  /* YACC parser for C syntax and for Objective C.  -*-c-*-
!    Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
!    1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
*************** Software Foundation, 59 Temple Place - S
*** 29,35 ****
     written by AT&T, but I have never seen it.  */
  
  @@ifc
! %expect 10 /* shift/reduce conflicts, and no reduce/reduce conflicts.  */
  @@end_ifc
  
  %{
--- 29,35 ----
     written by AT&T, but I have never seen it.  */
  
  @@ifc
! %expect 13 /* shift/reduce conflicts, and no reduce/reduce conflicts.  */
  @@end_ifc
  
  %{
*************** Software Foundation, 59 Temple Place - S
*** 38,43 ****
--- 38,44 ----
  #include "coretypes.h"
  #include "tm.h"
  #include "tree.h"
+ #include "langhooks.h"
  #include "input.h"
  #include "cpplib.h"
  #include "intl.h"
*************** Software Foundation, 59 Temple Place - S
*** 49,60 ****
  #include "output.h"
  #include "toplev.h"
  #include "ggc.h"
  
- @@ifobjc
- #include "objc-act.h"
- @@end_ifobjc
- 
- /* Like YYERROR but do call yyerror.  */
  #define YYERROR1 { yyerror ("syntax error"); YYERROR; }
  
  /* Like the default stack expander, except (1) use realloc when possible,
--- 50,57 ----
  #include "output.h"
  #include "toplev.h"
  #include "ggc.h"
+ #include "c-common.h"
  
  #define YYERROR1 { yyerror ("syntax error"); YYERROR; }
  
  /* Like the default stack expander, except (1) use realloc when possible,
*************** do {									\
*** 101,108 ****
  
  %start program
  
! %union {long itype; tree ttype; enum tree_code code;
! 	location_t location; }
  
  /* All identifiers that are not reserved words
     and are not declared typedefs in the current block */
--- 98,108 ----
  
  %start program
  
! %union {long itype; tree ttype; void *otype; struct c_expr exprtype;
! 	struct c_arg_info *arginfotype; struct c_declarator *dtrtype;
! 	struct c_type_name *typenametype; struct c_parm *parmtype;
! 	struct c_declspecs *dsptype; struct c_typespec tstype;
! 	enum tree_code code; location_t location; }
  
  /* All identifiers that are not reserved words
     and are not declared typedefs in the current block */
*************** do {									\
*** 126,131 ****
--- 126,135 ----
     yylval contains an IDENTIFIER_NODE which indicates which one.  */
  %token TYPE_QUAL
  
+ /* Objective-C protocol qualifiers.  These acquire their magic powers
+    only in certain contexts.  */
+ %token OBJC_TYPE_QUAL
+ 
  /* Character or numeric constants.
     yylval is the node for the constant.  */
  %token CONSTANT
*************** do {									\
*** 144,151 ****
  %token BREAK CONTINUE RETURN GOTO ASM_KEYWORD TYPEOF ALIGNOF
  %token ATTRIBUTE EXTENSION LABEL
  %token REALPART IMAGPART VA_ARG CHOOSE_EXPR TYPES_COMPATIBLE_P
! %token PTR_VALUE PTR_BASE PTR_EXTENT
! %token FUNC_NAME
  
  /* Add precedence rules to solve dangling else s/r conflict */
  %nonassoc IF
--- 148,154 ----
  %token BREAK CONTINUE RETURN GOTO ASM_KEYWORD TYPEOF ALIGNOF
  %token ATTRIBUTE EXTENSION LABEL
  %token REALPART IMAGPART VA_ARG CHOOSE_EXPR TYPES_COMPATIBLE_P
! %token FUNC_NAME OFFSETOF
  
  /* Add precedence rules to solve dangling else s/r conflict */
  %nonassoc IF
*************** do {									\
*** 173,180 ****
  
  /* The Objective-C keywords.  These are included in C and in
     Objective C, so that the token codes are the same in both.  */
! %token INTERFACE IMPLEMENTATION END SELECTOR DEFS ENCODE
! %token CLASSNAME PUBLIC PRIVATE PROTECTED PROTOCOL OBJECTNAME CLASS ALIAS
  %token AT_THROW AT_TRY AT_CATCH AT_FINALLY AT_SYNCHRONIZED
  %token OBJC_STRING
  
--- 176,184 ----
  
  /* The Objective-C keywords.  These are included in C and in
     Objective C, so that the token codes are the same in both.  */
! %token AT_INTERFACE AT_IMPLEMENTATION AT_END AT_SELECTOR AT_DEFS AT_ENCODE
! %token CLASSNAME AT_PUBLIC AT_PRIVATE AT_PROTECTED AT_PROTOCOL
! %token AT_CLASS AT_ALIAS
  %token AT_THROW AT_TRY AT_CATCH AT_FINALLY AT_SYNCHRONIZED
  %token OBJC_STRING
  
*************** do {									\
*** 182,269 ****
  %type <ttype> ENUM STRUCT UNION IF ELSE WHILE DO FOR SWITCH CASE DEFAULT
  %type <ttype> BREAK CONTINUE RETURN GOTO ASM_KEYWORD SIZEOF TYPEOF ALIGNOF
  
! %type <ttype> identifier IDENTIFIER TYPENAME CONSTANT expr nonnull_exprlist exprlist
! %type <ttype> expr_no_commas cast_expr unary_expr primary STRING
! %type <ttype> declspecs_nosc_nots_nosa_noea declspecs_nosc_nots_nosa_ea
! %type <ttype> declspecs_nosc_nots_sa_noea declspecs_nosc_nots_sa_ea
! %type <ttype> declspecs_nosc_ts_nosa_noea declspecs_nosc_ts_nosa_ea
! %type <ttype> declspecs_nosc_ts_sa_noea declspecs_nosc_ts_sa_ea
! %type <ttype> declspecs_sc_nots_nosa_noea declspecs_sc_nots_nosa_ea
! %type <ttype> declspecs_sc_nots_sa_noea declspecs_sc_nots_sa_ea
! %type <ttype> declspecs_sc_ts_nosa_noea declspecs_sc_ts_nosa_ea
! %type <ttype> declspecs_sc_ts_sa_noea declspecs_sc_ts_sa_ea
! %type <ttype> declspecs_ts declspecs_nots
! %type <ttype> declspecs_ts_nosa declspecs_nots_nosa
! %type <ttype> declspecs_nosc_ts declspecs_nosc_nots declspecs_nosc declspecs
! %type <ttype> maybe_type_quals_attrs typespec_nonattr typespec_attr
! %type <ttype> typespec_reserved_nonattr typespec_reserved_attr
! %type <ttype> typespec_nonreserved_nonattr
  
! %type <ttype> scspec SCSPEC STATIC TYPESPEC TYPE_QUAL maybe_type_qual
  %type <ttype> initdecls notype_initdecls initdcl notype_initdcl
! %type <ttype> init maybeasm
  %type <ttype> asm_operands nonnull_asm_operands asm_operand asm_clobbers
  %type <ttype> maybe_attribute attributes attribute attribute_list attrib
  %type <ttype> any_word
  
! %type <ttype> compstmt compstmt_start compstmt_nostart compstmt_primary_start
! %type <ttype> do_stmt_start poplevel stmt label
  
! %type <ttype> c99_block_start c99_block_end
! %type <ttype> declarator
! %type <ttype> notype_declarator after_type_declarator
! %type <ttype> parm_declarator
! %type <ttype> parm_declarator_starttypename parm_declarator_nostarttypename
! %type <ttype> array_declarator
  
! %type <ttype> structsp_attr structsp_nonattr
  %type <ttype> component_decl_list component_decl_list2
  %type <ttype> component_decl components components_notype component_declarator
  %type <ttype> component_notype_declarator
  %type <ttype> enumlist enumerator
  %type <ttype> struct_head union_head enum_head
! %type <ttype> typename absdcl absdcl1 absdcl1_ea absdcl1_noea
! %type <ttype> direct_absdcl1 absdcl_maybe_attribute
! %type <ttype> xexpr parms parm firstparm identifiers
  
! %type <ttype> parmlist parmlist_1 parmlist_2
! %type <ttype> parmlist_or_identifiers parmlist_or_identifiers_1
  %type <ttype> identifiers_or_typenames
  
  %type <itype> setspecs setspecs_fp extension
  
  %type <location> save_location
  
  @@ifobjc
  /* the Objective-C nonterminals */
  
- %type <ttype> ivar_decl_list ivar_decls ivar_decl ivars ivar_declarator
  %type <ttype> methoddecl unaryselector keywordselector selector
  %type <ttype> keyworddecl receiver objcmessageexpr messageargs
  %type <ttype> keywordexpr keywordarglist keywordarg
! %type <ttype> myparms myparm optparmlist reservedwords objcselectorexpr
  %type <ttype> selectorarg keywordnamelist keywordname objcencodeexpr
  %type <ttype> non_empty_protocolrefs protocolrefs identifier_list objcprotocolexpr
  
! %type <ttype> CLASSNAME OBJECTNAME OBJC_STRING
  
! %type <ttype> superclass
! %type <itype> objc_try_catch_stmt objc_finally_block
  @@end_ifobjc
  
  %{
! /* Number of statements (loosely speaking) and compound statements
!    seen so far.  */
! static int stmt_count;
! static int compstmt_count;
! 
! /* Input location of the end of the body of last simple_if;
!    used by the stmt-rule immediately after simple_if returns.  */
! static location_t if_stmt_locus;
! 
! 
! /* List of types and structure classes of the current declaration.  */
! static GTY(()) tree current_declspecs;
  static GTY(()) tree prefix_attributes;
  
  /* List of all the attributes applying to the identifier currently being
--- 186,273 ----
  %type <ttype> ENUM STRUCT UNION IF ELSE WHILE DO FOR SWITCH CASE DEFAULT
  %type <ttype> BREAK CONTINUE RETURN GOTO ASM_KEYWORD SIZEOF TYPEOF ALIGNOF
  
! %type <ttype> identifier IDENTIFIER TYPENAME CONSTANT STRING FUNC_NAME
! %type <ttype> nonnull_exprlist exprlist
! %type <exprtype> expr expr_no_commas cast_expr unary_expr primary
! %type <dsptype> declspecs_nosc_nots_nosa_noea declspecs_nosc_nots_nosa_ea
! %type <dsptype> declspecs_nosc_nots_sa_noea declspecs_nosc_nots_sa_ea
! %type <dsptype> declspecs_nosc_ts_nosa_noea declspecs_nosc_ts_nosa_ea
! %type <dsptype> declspecs_nosc_ts_sa_noea declspecs_nosc_ts_sa_ea
! %type <dsptype> declspecs_sc_nots_nosa_noea declspecs_sc_nots_nosa_ea
! %type <dsptype> declspecs_sc_nots_sa_noea declspecs_sc_nots_sa_ea
! %type <dsptype> declspecs_sc_ts_nosa_noea declspecs_sc_ts_nosa_ea
! %type <dsptype> declspecs_sc_ts_sa_noea declspecs_sc_ts_sa_ea
! %type <dsptype> declspecs_ts declspecs_nots
! %type <dsptype> declspecs_ts_nosa declspecs_nots_nosa
! %type <dsptype> declspecs_nosc_ts declspecs_nosc_nots declspecs_nosc declspecs
! %type <dsptype> maybe_type_quals_attrs
! %type <tstype> typespec_nonattr typespec_attr
! %type <tstype> typespec_reserved_nonattr typespec_reserved_attr
! %type <tstype> typespec_nonreserved_nonattr
! %type <ttype> offsetof_member_designator
  
! %type <ttype> scspec SCSPEC STATIC TYPESPEC TYPE_QUAL maybe_volatile
  %type <ttype> initdecls notype_initdecls initdcl notype_initdcl
! %type <exprtype> init
! %type <ttype> simple_asm_expr maybeasm asm_stmt asm_argument asm_string
  %type <ttype> asm_operands nonnull_asm_operands asm_operand asm_clobbers
  %type <ttype> maybe_attribute attributes attribute attribute_list attrib
  %type <ttype> any_word
  
! %type <ttype> compstmt compstmt_start compstmt_primary_start
! %type <ttype> stmt label stmt_nocomp start_break start_continue
  
! %type <ttype> c99_block_start c99_block_lineno_labeled_stmt
! %type <ttype> if_statement_1 if_statement_2
! %type <dtrtype> declarator
! %type <dtrtype> notype_declarator after_type_declarator
! %type <dtrtype> parm_declarator
! %type <dtrtype> parm_declarator_starttypename parm_declarator_nostarttypename
! %type <dtrtype> array_declarator
  
! %type <tstype> structsp_attr structsp_nonattr
  %type <ttype> component_decl_list component_decl_list2
  %type <ttype> component_decl components components_notype component_declarator
  %type <ttype> component_notype_declarator
  %type <ttype> enumlist enumerator
  %type <ttype> struct_head union_head enum_head
! %type <typenametype> typename
! %type <dtrtype> absdcl absdcl1 absdcl1_ea absdcl1_noea direct_absdcl1
! %type <parmtype> absdcl_maybe_attribute
! %type <ttype> condition xexpr for_cond_expr for_incr_expr
! %type <parmtype> parm firstparm
! %type <ttype> identifiers
  
! %type <arginfotype> parms parmlist parmlist_1 parmlist_2
! %type <arginfotype> parmlist_or_identifiers parmlist_or_identifiers_1
  %type <ttype> identifiers_or_typenames
  
  %type <itype> setspecs setspecs_fp extension
  
  %type <location> save_location
+ 
+ %type <otype> save_obstack_position
  
  @@ifobjc
  /* the Objective-C nonterminals */
  
  %type <ttype> methoddecl unaryselector keywordselector selector
+ %type <code> methodtype
  %type <ttype> keyworddecl receiver objcmessageexpr messageargs
  %type <ttype> keywordexpr keywordarglist keywordarg
! %type <ttype> optparmlist optparms reservedwords objcselectorexpr
  %type <ttype> selectorarg keywordnamelist keywordname objcencodeexpr
  %type <ttype> non_empty_protocolrefs protocolrefs identifier_list objcprotocolexpr
  
! %type <ttype> CLASSNAME OBJC_STRING OBJC_TYPE_QUAL
  
! %type <ttype> superclass objc_quals objc_qual objc_typename
! %type <itype> objc_try_catch_stmt optellipsis
  @@end_ifobjc
  
  %{
! /* Declaration specifiers of the current declaration.  */
! static struct c_declspecs *current_declspecs;
  static GTY(()) tree prefix_attributes;
  
  /* List of all the attributes applying to the identifier currently being
*************** static GTY(()) tree prefix_attributes;
*** 271,296 ****
     just after a comma.  */
  static GTY(()) tree all_prefix_attributes;
  
  /* Stack of saved values of current_declspecs, prefix_attributes and
     all_prefix_attributes.  */
! static GTY(()) tree declspec_stack;
  
  /* PUSH_DECLSPEC_STACK is called from setspecs; POP_DECLSPEC_STACK
     should be called from the productions making use of setspecs.  */
! #define PUSH_DECLSPEC_STACK						 \
!   do {									 \
!     declspec_stack = tree_cons (build_tree_list (prefix_attributes,	 \
! 						 all_prefix_attributes), \
! 				current_declspecs,			 \
! 				declspec_stack);			 \
    } while (0)
  
  #define POP_DECLSPEC_STACK						\
    do {									\
!     current_declspecs = TREE_VALUE (declspec_stack);			\
!     prefix_attributes = TREE_PURPOSE (TREE_PURPOSE (declspec_stack));	\
!     all_prefix_attributes = TREE_VALUE (TREE_PURPOSE (declspec_stack));	\
!     declspec_stack = TREE_CHAIN (declspec_stack);			\
    } while (0)
  
  /* For __extension__, save/restore the warning flags which are
--- 275,318 ----
     just after a comma.  */
  static GTY(()) tree all_prefix_attributes;
  
+ /* Structure to save declaration specifiers.  */
+ struct c_declspec_stack {
+   /* Saved value of current_declspecs.  */
+   struct c_declspecs *current_declspecs;
+   /* Saved value of prefix_attributes.  */
+   tree prefix_attributes;
+   /* Saved value of all_prefix_attributes.  */
+   tree all_prefix_attributes;
+   /* Next level of stack.  */
+   struct c_declspec_stack *next;
+ };
+ 
  /* Stack of saved values of current_declspecs, prefix_attributes and
     all_prefix_attributes.  */
! static struct c_declspec_stack *declspec_stack;
! 
! /* INDIRECT_REF with a TREE_TYPE of the type being queried for offsetof.  */
! static tree offsetof_base;
  
  /* PUSH_DECLSPEC_STACK is called from setspecs; POP_DECLSPEC_STACK
     should be called from the productions making use of setspecs.  */
! #define PUSH_DECLSPEC_STACK						\
!   do {									\
!     struct c_declspec_stack *t = XOBNEW (&parser_obstack,		\
! 					 struct c_declspec_stack);	\
!     t->current_declspecs = current_declspecs;				\
!     t->prefix_attributes = prefix_attributes;				\
!     t->all_prefix_attributes = all_prefix_attributes;			\
!     t->next = declspec_stack;						\
!     declspec_stack = t;							\
    } while (0)
  
  #define POP_DECLSPEC_STACK						\
    do {									\
!     current_declspecs = declspec_stack->current_declspecs;		\
!     prefix_attributes = declspec_stack->prefix_attributes;		\
!     all_prefix_attributes = declspec_stack->all_prefix_attributes;	\
!     declspec_stack = declspec_stack->next;				\
    } while (0)
  
  /* For __extension__, save/restore the warning flags which are
*************** static GTY(()) tree declspec_stack;
*** 312,319 ****
  @@ifobjc
  /* Objective-C specific parser/lexer information */
  
! static enum tree_code objc_inherit_code;
! static int objc_pq_context = 0, objc_public_flag = 0;
  
  /* The following flag is needed to contextualize ObjC lexical analysis.
     In some cases (e.g., 'int NSObject;'), it is undesirable to bind
--- 334,340 ----
  @@ifobjc
  /* Objective-C specific parser/lexer information */
  
! static int objc_pq_context = 0;
  
  /* The following flag is needed to contextualize ObjC lexical analysis.
     In some cases (e.g., 'int NSObject;'), it is undesirable to bind
*************** static int objc_need_raw_identifier;
*** 327,334 ****
  #define OBJC_NEED_RAW_IDENTIFIER(VAL)	/* nothing */
  @@end_ifc
  
- static bool parsing_iso_function_signature;
- 
  /* Tell yyparse how to print a token's value, if yydebug is set.  */
  
  #define YYPRINT(FILE,YYCHAR,YYLVAL) yyprint(FILE,YYCHAR,YYLVAL)
--- 348,353 ----
*************** static inline int _yylex (void);
*** 340,346 ****
  static int  yylex (void);
  static void init_reswords (void);
  
!   /* Initialisation routine for this file.  */
  void
  c_parse_init (void)
  {
--- 359,365 ----
  static int  yylex (void);
  static void init_reswords (void);
  
!   /* Initialization routine for this file.  */
  void
  c_parse_init (void)
  {
*************** program: /* empty */
*** 359,419 ****
  
  /* the reason for the strange actions in this rule
   is so that notype_initdecls when reached via datadef
!  can find a valid list of type and sc specs in $0. */
  
  extdefs:
! 	{$<ttype>$ = NULL_TREE; } extdef
! 	| extdefs {$<ttype>$ = NULL_TREE; ggc_collect(); } extdef
  	;
  
  extdef:
- 	extdef_1
- 	{ parsing_iso_function_signature = false; } /* Reset after any external definition.  */
- 	;
- 
- extdef_1:
  	fndef
  	| datadef
  @@ifobjc
  	| objcdef
  @@end_ifobjc
! 	| ASM_KEYWORD '(' expr ')' ';'
! 		{ STRIP_NOPS ($3);
! 		  if ((TREE_CODE ($3) == ADDR_EXPR
! 		       && TREE_CODE (TREE_OPERAND ($3, 0)) == STRING_CST)
! 		      || TREE_CODE ($3) == STRING_CST)
! 		    assemble_asm ($3);
! 		  else
! 		    error ("argument of `asm' is not a constant string"); }
! 	| extension extdef
! 		{ RESTORE_EXT_FLAGS ($1); }
  	;
  
  datadef:
  	  setspecs notype_initdecls ';'
! 		{ if (pedantic)
! 		    error ("ISO C forbids data definition with no type or storage class");
! 		  else
! 		    warning ("data definition has no type or storage class");
! 
  		  POP_DECLSPEC_STACK; }
          | declspecs_nots setspecs notype_initdecls ';'
  		{ POP_DECLSPEC_STACK; }
  	| declspecs_ts setspecs initdecls ';'
  		{ POP_DECLSPEC_STACK; }
  	| declspecs ';'
! 	  { shadow_tag ($1); }
  	| error ';'
  	| error '}'
  	| ';'
  		{ if (pedantic)
! 		    pedwarn ("ISO C does not allow extra `;' outside of a function"); }
  	;
  
  fndef:
  	  declspecs_ts setspecs declarator
! 		{ if (! start_function (current_declspecs, $3,
! 					all_prefix_attributes))
  		    YYERROR1;
  		}
  	  old_style_parm_decls save_location
--- 378,431 ----
  
  /* the reason for the strange actions in this rule
   is so that notype_initdecls when reached via datadef
!  can find valid declaration specifiers in $0. */
  
  extdefs:
! 	save_obstack_position { $<dsptype>$ = NULL; } extdef
! 		{ obstack_free (&parser_obstack, $1); }
! 	| extdefs save_obstack_position
! 		{ $<dsptype>$ = NULL; ggc_collect (); } extdef
! 		{ obstack_free (&parser_obstack, $2); }
  	;
  
  extdef:
  	fndef
  	| datadef
+ 	| asmdef
+ 	| extension extdef
+ 		{ RESTORE_EXT_FLAGS ($1); }
  @@ifobjc
  	| objcdef
  @@end_ifobjc
! 	;
! 
! /* Record the current position of parser_obstack before a
!    declaration to restore it afterwards.  */
! save_obstack_position:
! 		{ $$ = obstack_alloc (&parser_obstack, 0); }
  	;
  
  datadef:
  	  setspecs notype_initdecls ';'
! 		{ pedwarn ("data definition has no type or storage class");
  		  POP_DECLSPEC_STACK; }
          | declspecs_nots setspecs notype_initdecls ';'
  		{ POP_DECLSPEC_STACK; }
  	| declspecs_ts setspecs initdecls ';'
  		{ POP_DECLSPEC_STACK; }
  	| declspecs ';'
! 	  { shadow_tag (finish_declspecs ($1)); }
  	| error ';'
  	| error '}'
  	| ';'
  		{ if (pedantic)
! 		    pedwarn ("ISO C does not allow extra %<;%> outside of a function"); }
  	;
  
  fndef:
  	  declspecs_ts setspecs declarator
! 		{ if (!start_function (current_declspecs, $3,
! 				       all_prefix_attributes))
  		    YYERROR1;
  		}
  	  old_style_parm_decls save_location
*************** fndef:
*** 425,432 ****
  	| declspecs_ts setspecs declarator error
  		{ POP_DECLSPEC_STACK; }
  	| declspecs_nots setspecs notype_declarator
! 		{ if (! start_function (current_declspecs, $3,
! 					all_prefix_attributes))
  		    YYERROR1;
  		}
  	  old_style_parm_decls save_location
--- 437,444 ----
  	| declspecs_ts setspecs declarator error
  		{ POP_DECLSPEC_STACK; }
  	| declspecs_nots setspecs notype_declarator
! 		{ if (!start_function (current_declspecs, $3,
! 				       all_prefix_attributes))
  		    YYERROR1;
  		}
  	  old_style_parm_decls save_location
*************** fndef:
*** 438,445 ****
  	| declspecs_nots setspecs notype_declarator error
  		{ POP_DECLSPEC_STACK; }
  	| setspecs notype_declarator
! 		{ if (! start_function (NULL_TREE, $2,
! 					all_prefix_attributes))
  		    YYERROR1;
  		}
  	  old_style_parm_decls save_location
--- 450,457 ----
  	| declspecs_nots setspecs notype_declarator error
  		{ POP_DECLSPEC_STACK; }
  	| setspecs notype_declarator
! 		{ if (!start_function (current_declspecs, $2,
! 				       all_prefix_attributes))
  		    YYERROR1;
  		}
  	  old_style_parm_decls save_location
*************** identifier:
*** 456,462 ****
  	IDENTIFIER
  	| TYPENAME
  @@ifobjc
- 	| OBJECTNAME
  	| CLASSNAME
  @@end_ifobjc
  	;
--- 468,473 ----
*************** unop:     '&'
*** 482,489 ****
  		{ $$ = TRUTH_NOT_EXPR; }
  	;
  
! expr:	nonnull_exprlist
! 		{ $$ = build_compound_expr ($1); }
  	;
  
  exprlist:
--- 493,502 ----
  		{ $$ = TRUTH_NOT_EXPR; }
  	;
  
! expr:	expr_no_commas
! 	| expr ',' expr_no_commas
! 		{ $$.value = build_compound_expr ($1.value, $3.value);
! 		  $$.original_code = COMPOUND_EXPR; }
  	;
  
  exprlist:
*************** exprlist:
*** 494,555 ****
  
  nonnull_exprlist:
  	expr_no_commas
! 		{ $$ = build_tree_list (NULL_TREE, $1); }
  	| nonnull_exprlist ',' expr_no_commas
! 		{ chainon ($1, build_tree_list (NULL_TREE, $3)); }
  	;
  
  unary_expr:
  	primary
  	| '*' cast_expr   %prec UNARY
! 		{ $$ = build_indirect_ref ($2, "unary *"); }
  	/* __extension__ turns off -pedantic for following primary.  */
  	| extension cast_expr	  %prec UNARY
  		{ $$ = $2;
  		  RESTORE_EXT_FLAGS ($1); }
  	| unop cast_expr  %prec UNARY
! 		{ $$ = build_unary_op ($1, $2, 0);
! 		  overflow_warning ($$); }
  	/* Refer to the address of a label as a pointer.  */
  	| ANDAND identifier
! 		{ $$ = finish_label_address_expr ($2); }
  	| sizeof unary_expr  %prec UNARY
  		{ skip_evaluation--;
! 		  if (TREE_CODE ($2) == COMPONENT_REF
! 		      && DECL_C_BIT_FIELD (TREE_OPERAND ($2, 1)))
! 		    error ("`sizeof' applied to a bit-field");
! 		  $$ = c_sizeof (TREE_TYPE ($2)); }
  	| sizeof '(' typename ')'  %prec HYPERUNARY
  		{ skip_evaluation--;
! 		  $$ = c_sizeof (groktypename ($3)); }
  	| alignof unary_expr  %prec UNARY
  		{ skip_evaluation--;
! 		  $$ = c_alignof_expr ($2); }
  	| alignof '(' typename ')'  %prec HYPERUNARY
  		{ skip_evaluation--;
! 		  $$ = c_alignof (groktypename ($3)); }
  	| REALPART cast_expr %prec UNARY
! 		{ $$ = build_unary_op (REALPART_EXPR, $2, 0); }
  	| IMAGPART cast_expr %prec UNARY
! 		{ $$ = build_unary_op (IMAGPART_EXPR, $2, 0); }
  	;
  
  sizeof:
! 	SIZEOF { skip_evaluation++; }
  	;
  
  alignof:
! 	ALIGNOF { skip_evaluation++; }
  	;
  
  typeof:
! 	TYPEOF { skip_evaluation++; }
  	;
  
  cast_expr:
  	unary_expr
  	| '(' typename ')' cast_expr  %prec UNARY
! 		{ $$ = c_cast_expr ($2, $4); }
  	;
  
  expr_no_commas:
--- 507,580 ----
  
  nonnull_exprlist:
  	expr_no_commas
! 		{ $$ = build_tree_list (NULL_TREE, $1.value); }
  	| nonnull_exprlist ',' expr_no_commas
! 		{ chainon ($1, build_tree_list (NULL_TREE, $3.value)); }
  	;
  
  unary_expr:
  	primary
  	| '*' cast_expr   %prec UNARY
! 		{ $$.value = build_indirect_ref ($2.value, "unary *");
! 		  $$.original_code = ERROR_MARK; }
  	/* __extension__ turns off -pedantic for following primary.  */
  	| extension cast_expr	  %prec UNARY
  		{ $$ = $2;
  		  RESTORE_EXT_FLAGS ($1); }
  	| unop cast_expr  %prec UNARY
! 		{ $$.value = build_unary_op ($1, $2.value, 0);
! 		  overflow_warning ($$.value);
! 		  $$.original_code = ERROR_MARK; }
  	/* Refer to the address of a label as a pointer.  */
  	| ANDAND identifier
! 		{ $$.value = finish_label_address_expr ($2);
! 		  $$.original_code = ERROR_MARK; }
  	| sizeof unary_expr  %prec UNARY
  		{ skip_evaluation--;
! 		  in_sizeof--;
! 		  if (TREE_CODE ($2.value) == COMPONENT_REF
! 		      && DECL_C_BIT_FIELD (TREE_OPERAND ($2.value, 1)))
! 		    error ("%<sizeof%> applied to a bit-field");
! 		  $$ = c_expr_sizeof_expr ($2); }
  	| sizeof '(' typename ')'  %prec HYPERUNARY
  		{ skip_evaluation--;
! 		  in_sizeof--;
! 		  $$ = c_expr_sizeof_type ($3); }
  	| alignof unary_expr  %prec UNARY
  		{ skip_evaluation--;
! 		  in_alignof--;
! 		  $$.value = c_alignof_expr ($2.value);
! 		  $$.original_code = ERROR_MARK; }
  	| alignof '(' typename ')'  %prec HYPERUNARY
  		{ skip_evaluation--;
! 		  in_alignof--;
! 		  $$.value = c_alignof (groktypename ($3));
! 		  $$.original_code = ERROR_MARK; }
  	| REALPART cast_expr %prec UNARY
! 		{ $$.value = build_unary_op (REALPART_EXPR, $2.value, 0);
! 		  $$.original_code = ERROR_MARK; }
  	| IMAGPART cast_expr %prec UNARY
! 		{ $$.value = build_unary_op (IMAGPART_EXPR, $2.value, 0);
! 		  $$.original_code = ERROR_MARK; }
  	;
  
  sizeof:
! 	SIZEOF { skip_evaluation++; in_sizeof++; }
  	;
  
  alignof:
! 	ALIGNOF { skip_evaluation++; in_alignof++; }
  	;
  
  typeof:
! 	TYPEOF { skip_evaluation++; in_typeof++; }
  	;
  
  cast_expr:
  	unary_expr
  	| '(' typename ')' cast_expr  %prec UNARY
! 		{ $$.value = c_cast_expr ($2, $4.value);
! 		  $$.original_code = ERROR_MARK; }
  	;
  
  expr_no_commas:
*************** expr_no_commas:
*** 579,633 ****
  	| expr_no_commas '^' expr_no_commas
  		{ $$ = parser_build_binary_op ($2, $1, $3); }
  	| expr_no_commas ANDAND
! 		{ $1 = c_common_truthvalue_conversion
! 		    (default_conversion ($1));
! 		  skip_evaluation += $1 == truthvalue_false_node; }
  	  expr_no_commas
! 		{ skip_evaluation -= $1 == truthvalue_false_node;
  		  $$ = parser_build_binary_op (TRUTH_ANDIF_EXPR, $1, $4); }
  	| expr_no_commas OROR
! 		{ $1 = c_common_truthvalue_conversion
! 		    (default_conversion ($1));
! 		  skip_evaluation += $1 == truthvalue_true_node; }
  	  expr_no_commas
! 		{ skip_evaluation -= $1 == truthvalue_true_node;
  		  $$ = parser_build_binary_op (TRUTH_ORIF_EXPR, $1, $4); }
  	| expr_no_commas '?'
! 		{ $1 = c_common_truthvalue_conversion
! 		    (default_conversion ($1));
! 		  skip_evaluation += $1 == truthvalue_false_node; }
            expr ':'
! 		{ skip_evaluation += (($1 == truthvalue_true_node)
! 				      - ($1 == truthvalue_false_node)); }
  	  expr_no_commas
! 		{ skip_evaluation -= $1 == truthvalue_true_node;
! 		  $$ = build_conditional_expr ($1, $4, $7); }
  	| expr_no_commas '?'
  		{ if (pedantic)
  		    pedwarn ("ISO C forbids omitting the middle term of a ?: expression");
  		  /* Make sure first operand is calculated only once.  */
! 		  $<ttype>2 = save_expr ($1);
! 		  $1 = c_common_truthvalue_conversion
! 		    (default_conversion ($<ttype>2));
! 		  skip_evaluation += $1 == truthvalue_true_node; }
  	  ':' expr_no_commas
! 		{ skip_evaluation -= $1 == truthvalue_true_node;
! 		  $$ = build_conditional_expr ($1, $<ttype>2, $5); }
  	| expr_no_commas '=' expr_no_commas
! 		{ char class;
! 		  $$ = build_modify_expr ($1, NOP_EXPR, $3);
! 		  class = TREE_CODE_CLASS (TREE_CODE ($$));
! 		  if (IS_EXPR_CODE_CLASS (class))
! 		    C_SET_EXP_ORIGINAL_CODE ($$, MODIFY_EXPR);
  		}
  	| expr_no_commas ASSIGN expr_no_commas
! 		{ char class;
! 		  $$ = build_modify_expr ($1, $2, $3);
! 		  /* This inhibits warnings in
! 		     c_common_truthvalue_conversion.  */
! 		  class = TREE_CODE_CLASS (TREE_CODE ($$));
! 		  if (IS_EXPR_CODE_CLASS (class))
! 		    C_SET_EXP_ORIGINAL_CODE ($$, ERROR_MARK);
  		}
  	;
  
--- 604,654 ----
  	| expr_no_commas '^' expr_no_commas
  		{ $$ = parser_build_binary_op ($2, $1, $3); }
  	| expr_no_commas ANDAND
! 		{ $1.value = lang_hooks.truthvalue_conversion
! 		    (default_conversion ($1.value));
! 		  skip_evaluation += $1.value == truthvalue_false_node; }
  	  expr_no_commas
! 		{ skip_evaluation -= $1.value == truthvalue_false_node;
  		  $$ = parser_build_binary_op (TRUTH_ANDIF_EXPR, $1, $4); }
  	| expr_no_commas OROR
! 		{ $1.value = lang_hooks.truthvalue_conversion
! 		    (default_conversion ($1.value));
! 		  skip_evaluation += $1.value == truthvalue_true_node; }
  	  expr_no_commas
! 		{ skip_evaluation -= $1.value == truthvalue_true_node;
  		  $$ = parser_build_binary_op (TRUTH_ORIF_EXPR, $1, $4); }
  	| expr_no_commas '?'
! 		{ $1.value = lang_hooks.truthvalue_conversion
! 		    (default_conversion ($1.value));
! 		  skip_evaluation += $1.value == truthvalue_false_node; }
            expr ':'
! 		{ skip_evaluation += (($1.value == truthvalue_true_node)
! 				      - ($1.value == truthvalue_false_node)); }
  	  expr_no_commas
! 		{ skip_evaluation -= $1.value == truthvalue_true_node;
! 		  $$.value = build_conditional_expr ($1.value, $4.value,
! 						     $7.value);
! 		  $$.original_code = ERROR_MARK; }
  	| expr_no_commas '?'
  		{ if (pedantic)
  		    pedwarn ("ISO C forbids omitting the middle term of a ?: expression");
  		  /* Make sure first operand is calculated only once.  */
! 		  $<ttype>2 = save_expr (default_conversion ($1.value));
! 		  $1.value = lang_hooks.truthvalue_conversion ($<ttype>2);
! 		  skip_evaluation += $1.value == truthvalue_true_node; }
  	  ':' expr_no_commas
! 		{ skip_evaluation -= $1.value == truthvalue_true_node;
! 		  $$.value = build_conditional_expr ($1.value, $<ttype>2,
! 						     $5.value);
! 		  $$.original_code = ERROR_MARK; }
  	| expr_no_commas '=' expr_no_commas
! 		{ $$.value = build_modify_expr ($1.value, NOP_EXPR, $3.value);
! 		  $$.original_code = MODIFY_EXPR;
  		}
  	| expr_no_commas ASSIGN expr_no_commas
! 		{ $$.value = build_modify_expr ($1.value, $2, $3.value);
! 		  TREE_NO_WARNING ($$.value) = 1;
! 		  $$.original_code = ERROR_MARK;
  		}
  	;
  
*************** primary:
*** 636,775 ****
  		{
  		  if (yychar == YYEMPTY)
  		    yychar = YYLEX;
! 		  $$ = build_external_ref ($1, yychar == '(');
  		}
  	| CONSTANT
  	| STRING
  	| FUNC_NAME
! 		{ $$ = fname_decl (C_RID_CODE ($$), $$); }
  	| '(' typename ')' '{'
  		{ start_init (NULL_TREE, NULL, 0);
! 		  $2 = groktypename ($2);
! 		  really_start_incremental_init ($2); }
  	  initlist_maybe_comma '}'  %prec UNARY
! 		{ tree constructor = pop_init_level (0);
! 		  tree type = $2;
  		  finish_init ();
  
! 		  if (pedantic && ! flag_isoc99)
  		    pedwarn ("ISO C90 forbids compound literals");
! 		  $$ = build_compound_literal (type, constructor);
  		}
  	| '(' expr ')'
! 		{ char class = TREE_CODE_CLASS (TREE_CODE ($2));
! 		  if (IS_EXPR_CODE_CLASS (class))
! 		    C_SET_EXP_ORIGINAL_CODE ($2, ERROR_MARK);
! 		  $$ = $2; }
  	| '(' error ')'
! 		{ $$ = error_mark_node; }
  	| compstmt_primary_start compstmt_nostart ')'
!                  { tree saved_last_tree;
! 
! 		   if (pedantic)
! 		     pedwarn ("ISO C forbids braced-groups within expressions");
! 		  saved_last_tree = COMPOUND_BODY ($1);
! 		  RECHAIN_STMTS ($1, COMPOUND_BODY ($1));
! 		  last_tree = saved_last_tree;
! 		  TREE_CHAIN (last_tree) = NULL_TREE;
! 		  if (!last_expr_type)
! 		    last_expr_type = void_type_node;
! 		  $$ = build1 (STMT_EXPR, last_expr_type, $1);
! 		  TREE_SIDE_EFFECTS ($$) = 1;
  		}
  	| compstmt_primary_start error ')'
! 		{
! 		  last_tree = COMPOUND_BODY ($1);
! 		  TREE_CHAIN (last_tree) = NULL_TREE;
! 		  $$ = error_mark_node;
  		}
  	| primary '(' exprlist ')'   %prec '.'
! 		{ $$ = build_function_call ($1, $3); }
  	| VA_ARG '(' expr_no_commas ',' typename ')'
! 		{ $$ = build_va_arg ($3, groktypename ($5)); }
  
!       | CHOOSE_EXPR '(' expr_no_commas ',' expr_no_commas ',' expr_no_commas ')'
  		{
                    tree c;
  
!                   c = fold ($3);
                    STRIP_NOPS (c);
                    if (TREE_CODE (c) != INTEGER_CST)
!                     error ("first argument to __builtin_choose_expr not a constant");
                    $$ = integer_zerop (c) ? $7 : $5;
  		}
!       | TYPES_COMPATIBLE_P '(' typename ',' typename ')'
  		{
  		  tree e1, e2;
  
  		  e1 = TYPE_MAIN_VARIANT (groktypename ($3));
  		  e2 = TYPE_MAIN_VARIANT (groktypename ($5));
  
! 		  $$ = comptypes (e1, e2, COMPARE_STRICT)
! 		    ? build_int_2 (1, 0) : build_int_2 (0, 0);
  		}
  	| primary '[' expr ']'   %prec '.'
! 		{ $$ = build_array_ref ($1, $3); }
  	| primary '.' identifier
! 		{
! @@ifobjc
! 		    if (!is_public ($1, $3))
! 		      $$ = error_mark_node;
! 		    else
! @@end_ifobjc
! 		      $$ = build_component_ref ($1, $3);
! 		}
  	| primary POINTSAT identifier
  		{
!                   tree expr = build_indirect_ref ($1, "->");
! 
! @@ifobjc
! 		      if (!is_public (expr, $3))
! 			$$ = error_mark_node;
! 		      else
! @@end_ifobjc
! 			$$ = build_component_ref (expr, $3);
  		}
  	| primary PLUSPLUS
! 		{ $$ = build_unary_op (POSTINCREMENT_EXPR, $1, 0); }
  	| primary MINUSMINUS
! 		{ $$ = build_unary_op (POSTDECREMENT_EXPR, $1, 0); }
  @@ifobjc
  	| objcmessageexpr
! 		{ $$ = build_message_expr ($1); }
  	| objcselectorexpr
! 		{ $$ = build_selector_expr ($1); }
  	| objcprotocolexpr
! 		{ $$ = build_protocol_expr ($1); }
  	| objcencodeexpr
! 		{ $$ = build_encode_expr ($1); }
  	| OBJC_STRING
! 		{ $$ = build_objc_string_object ($1); }
  @@end_ifobjc
  	;
  
! old_style_parm_decls:
! 	old_style_parm_decls_1
! 	{
! 	  parsing_iso_function_signature = false; /* Reset after decls.  */
! 	}
  	;
  
! old_style_parm_decls_1:
  	/* empty */
- 	{
- 	  if (warn_traditional && !in_system_header
- 	      && parsing_iso_function_signature)
- 	    warning ("traditional C rejects ISO C style function definitions");
- 	  if (warn_old_style_definition && !in_system_header
- 	      && !parsing_iso_function_signature)
- 	    warning ("old-style parameter declaration");
- 	  parsing_iso_function_signature = false; /* Reset after warning.  */
- 	}
  	| datadecls
- 	{
- 	  if (warn_old_style_definition && !in_system_header)
- 	    warning ("old-style parameter declaration");
- 	}
  	;
  
  /* The following are analogous to lineno_decl, decls and decl
--- 657,811 ----
  		{
  		  if (yychar == YYEMPTY)
  		    yychar = YYLEX;
! 		  $$.value = build_external_ref ($1, yychar == '(');
! 		  $$.original_code = ERROR_MARK;
  		}
  	| CONSTANT
+ 		{ $$.value = $1; $$.original_code = ERROR_MARK; }
  	| STRING
+ 		{ $$.value = $1; $$.original_code = STRING_CST; }
  	| FUNC_NAME
! 		{ $$.value = fname_decl (C_RID_CODE ($1), $1);
! 		  $$.original_code = ERROR_MARK; }
  	| '(' typename ')' '{'
  		{ start_init (NULL_TREE, NULL, 0);
! 		  $<ttype>$ = groktypename ($2);
! 		  if (C_TYPE_VARIABLE_SIZE ($<ttype>$))
! 		    {
! 		      error ("compound literal has variable size");
! 		      $<ttype>$ = error_mark_node;
! 		    }
! 		  really_start_incremental_init ($<ttype>$); }
  	  initlist_maybe_comma '}'  %prec UNARY
! 		{ struct c_expr init = pop_init_level (0);
! 		  tree constructor = init.value;
! 		  tree type = $<ttype>5;
  		  finish_init ();
+ 		  maybe_warn_string_init (type, init);
  
! 		  if (pedantic && !flag_isoc99)
  		    pedwarn ("ISO C90 forbids compound literals");
! 		  $$.value = build_compound_literal (type, constructor);
! 		  $$.original_code = ERROR_MARK;
  		}
  	| '(' expr ')'
! 		{ $$.value = $2.value;
! 		  if (TREE_CODE ($$.value) == MODIFY_EXPR)
! 		    TREE_NO_WARNING ($$.value) = 1;
! 		  $$.original_code = ERROR_MARK; }
  	| '(' error ')'
! 		{ $$.value = error_mark_node; $$.original_code = ERROR_MARK; }
  	| compstmt_primary_start compstmt_nostart ')'
!                 { if (pedantic)
! 		    pedwarn ("ISO C forbids braced-groups within expressions");
! 		  $$.value = c_finish_stmt_expr ($1);
! 		  $$.original_code = ERROR_MARK;
  		}
  	| compstmt_primary_start error ')'
! 		{ c_finish_stmt_expr ($1);
! 		  $$.value = error_mark_node;
! 		  $$.original_code = ERROR_MARK;
  		}
  	| primary '(' exprlist ')'   %prec '.'
! 		{ $$.value = build_function_call ($1.value, $3);
! 		  $$.original_code = ERROR_MARK; }
  	| VA_ARG '(' expr_no_commas ',' typename ')'
! 		{ $$.value = build_va_arg ($3.value, groktypename ($5));
! 		  $$.original_code = ERROR_MARK; }
  
! 	| OFFSETOF '(' typename ','
! 		{ tree type = groktypename ($3);
! 		  if (type == error_mark_node)
! 		    offsetof_base = error_mark_node;
! 		  else
! 		    offsetof_base = build1 (INDIRECT_REF, type, NULL);
! 		}
! 	  offsetof_member_designator ')'
! 		{ $$.value = fold_offsetof ($6);
! 		  $$.original_code = ERROR_MARK; }
! 	| OFFSETOF '(' error ')'
! 		{ $$.value = error_mark_node; $$.original_code = ERROR_MARK; }
! 	| CHOOSE_EXPR '(' expr_no_commas ',' expr_no_commas ','
! 			  expr_no_commas ')'
  		{
                    tree c;
  
!                   c = fold ($3.value);
                    STRIP_NOPS (c);
                    if (TREE_CODE (c) != INTEGER_CST)
!                     error ("first argument to %<__builtin_choose_expr%> not"
! 			   " a constant");
                    $$ = integer_zerop (c) ? $7 : $5;
  		}
! 	| CHOOSE_EXPR '(' error ')'
! 		{ $$.value = error_mark_node; $$.original_code = ERROR_MARK; }
! 	| TYPES_COMPATIBLE_P '(' typename ',' typename ')'
  		{
  		  tree e1, e2;
  
  		  e1 = TYPE_MAIN_VARIANT (groktypename ($3));
  		  e2 = TYPE_MAIN_VARIANT (groktypename ($5));
  
! 		  $$.value = comptypes (e1, e2)
! 		    ? build_int_cst (NULL_TREE, 1)
! 		    : build_int_cst (NULL_TREE, 0);
! 		  $$.original_code = ERROR_MARK;
  		}
+ 	| TYPES_COMPATIBLE_P '(' error ')'
+ 		{ $$.value = error_mark_node; $$.original_code = ERROR_MARK; }
  	| primary '[' expr ']'   %prec '.'
! 		{ $$.value = build_array_ref ($1.value, $3.value);
! 		  $$.original_code = ERROR_MARK; }
  	| primary '.' identifier
! 		{ $$.value = build_component_ref ($1.value, $3);
! 		  $$.original_code = ERROR_MARK; }
  	| primary POINTSAT identifier
  		{
!                   tree expr = build_indirect_ref ($1.value, "->");
! 		  $$.value = build_component_ref (expr, $3);
! 		  $$.original_code = ERROR_MARK;
  		}
  	| primary PLUSPLUS
! 		{ $$.value = build_unary_op (POSTINCREMENT_EXPR, $1.value, 0);
! 		  $$.original_code = ERROR_MARK; }
  	| primary MINUSMINUS
! 		{ $$.value = build_unary_op (POSTDECREMENT_EXPR, $1.value, 0);
! 		  $$.original_code = ERROR_MARK; }
  @@ifobjc
  	| objcmessageexpr
! 		{ $$.value = objc_build_message_expr ($1);
! 		  $$.original_code = ERROR_MARK; }
  	| objcselectorexpr
! 		{ $$.value = objc_build_selector_expr ($1);
! 		  $$.original_code = ERROR_MARK; }
  	| objcprotocolexpr
! 		{ $$.value = objc_build_protocol_expr ($1);
! 		  $$.original_code = ERROR_MARK; }
  	| objcencodeexpr
! 		{ $$.value = objc_build_encode_expr ($1);
! 		  $$.original_code = ERROR_MARK; }
  	| OBJC_STRING
! 		{ $$.value = objc_build_string_object ($1);
! 		  $$.original_code = ERROR_MARK; }
  @@end_ifobjc
  	;
  
! /* This is the second argument to __builtin_offsetof.  We must have one
!    identifier, and beyond that we want to accept sub structure and sub
!    array references.  */
! 
! offsetof_member_designator:
! 	  identifier
! 		{ $$ = build_component_ref (offsetof_base, $1); }
! 	| offsetof_member_designator '.' identifier
! 		{ $$ = build_component_ref ($1, $3); }
! 	| offsetof_member_designator '[' expr ']'
! 		{ $$ = build_array_ref ($1, $3.value); }
  	;
  
! old_style_parm_decls:
  	/* empty */
  	| datadecls
  	;
  
  /* The following are analogous to lineno_decl, decls and decl
*************** datadecl:
*** 797,803 ****
  	| declspecs_nots_nosa setspecs notype_initdecls ';'
  		{ POP_DECLSPEC_STACK; }
  	| declspecs_ts_nosa ';'
! 		{ shadow_tag_warned ($1, 1);
  		  pedwarn ("empty declaration"); }
  	| declspecs_nots_nosa ';'
  		{ pedwarn ("empty declaration"); }
--- 833,839 ----
  	| declspecs_nots_nosa setspecs notype_initdecls ';'
  		{ POP_DECLSPEC_STACK; }
  	| declspecs_ts_nosa ';'
! 		{ shadow_tag_warned (finish_declspecs ($1), 1);
  		  pedwarn ("empty declaration"); }
  	| declspecs_nots_nosa ';'
  		{ pedwarn ("empty declaration"); }
*************** lineno_decl:
*** 819,826 ****
  setspecs: /* empty */
  		{ pending_xref_error ();
  		  PUSH_DECLSPEC_STACK;
! 		  split_specs_attrs ($<ttype>0,
! 				     &current_declspecs, &prefix_attributes);
  		  all_prefix_attributes = prefix_attributes; }
  	;
  
--- 855,872 ----
  setspecs: /* empty */
  		{ pending_xref_error ();
  		  PUSH_DECLSPEC_STACK;
! 		  if ($<dsptype>0)
! 		    {
! 		      prefix_attributes = $<dsptype>0->attrs;
! 		      $<dsptype>0->attrs = NULL_TREE;
! 		      current_declspecs = $<dsptype>0;
! 		    }
! 		  else
! 		    {
! 		      prefix_attributes = NULL_TREE;
! 		      current_declspecs = build_null_declspecs ();
! 		    }
! 		  current_declspecs = finish_declspecs (current_declspecs);
  		  all_prefix_attributes = prefix_attributes; }
  	;
  
*************** decl:
*** 841,847 ****
  	| declspecs_nots setspecs notype_nested_function
  		{ POP_DECLSPEC_STACK; }
  	| declspecs ';'
! 		{ shadow_tag ($1); }
  	| extension decl
  		{ RESTORE_EXT_FLAGS ($1); }
  	;
--- 887,893 ----
  	| declspecs_nots setspecs notype_nested_function
  		{ POP_DECLSPEC_STACK; }
  	| declspecs ';'
! 		{ shadow_tag (finish_declspecs ($1)); }
  	| extension decl
  		{ RESTORE_EXT_FLAGS ($1); }
  	;
*************** decl:
*** 857,872 ****
  
     - Attribute specifier lists (attributes).
  
-    These are stored as a TREE_LIST; the head of the list is the last
-    item in the specifier list.  Each entry in the list has either a
-    TREE_PURPOSE that is an attribute specifier list, or a TREE_VALUE that
-    is a single other specifier or qualifier; and a TREE_CHAIN that is the
-    rest of the list.  TREE_STATIC is set on the list if something other
-    than a storage class specifier or attribute has been seen; this is used
-    to warn for the obsolescent usage of storage class specifiers other than
-    at the start of the list.  (Doing this properly would require function
-    specifiers to be handled separately from storage class specifiers.)
- 
     The various cases below are classified according to:
  
     (a) Whether a storage class specifier is included or not; some
--- 903,908 ----
*************** decl:
*** 895,1228 ****
  
  /* Declspecs which contain at least one type specifier or typedef name.
     (Just `const' or `volatile' is not enough.)
!    A typedef'd name following these is taken as a name to be declared.
!    Declspecs have a non-NULL TREE_VALUE, attributes do not.  */
  
  declspecs_nosc_nots_nosa_noea:
  	  TYPE_QUAL
! 		{ $$ = tree_cons (NULL_TREE, $1, NULL_TREE);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_nots_nosa_noea TYPE_QUAL
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_nots_nosa_ea TYPE_QUAL
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	;
  
  declspecs_nosc_nots_nosa_ea:
  	  declspecs_nosc_nots_nosa_noea attributes
! 		{ $$ = tree_cons ($2, NULL_TREE, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	;
  
  declspecs_nosc_nots_sa_noea:
  	  declspecs_nosc_nots_sa_noea TYPE_QUAL
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_nots_sa_ea TYPE_QUAL
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	;
  
  declspecs_nosc_nots_sa_ea:
  	  attributes
! 		{ $$ = tree_cons ($1, NULL_TREE, NULL_TREE);
! 		  TREE_STATIC ($$) = 0; }
  	| declspecs_nosc_nots_sa_noea attributes
! 		{ $$ = tree_cons ($2, NULL_TREE, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	;
  
  declspecs_nosc_ts_nosa_noea:
  	  typespec_nonattr
! 		{ $$ = tree_cons (NULL_TREE, $1, NULL_TREE);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_ts_nosa_noea TYPE_QUAL
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_ts_nosa_ea TYPE_QUAL
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_ts_nosa_noea typespec_reserved_nonattr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_ts_nosa_ea typespec_reserved_nonattr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_nots_nosa_noea typespec_nonattr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_nots_nosa_ea typespec_nonattr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	;
  
  declspecs_nosc_ts_nosa_ea:
  	  typespec_attr
! 		{ $$ = tree_cons (NULL_TREE, $1, NULL_TREE);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_ts_nosa_noea attributes
! 		{ $$ = tree_cons ($2, NULL_TREE, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	| declspecs_nosc_ts_nosa_noea typespec_reserved_attr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_ts_nosa_ea typespec_reserved_attr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_nots_nosa_noea typespec_attr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_nots_nosa_ea typespec_attr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	;
  
  declspecs_nosc_ts_sa_noea:
  	  declspecs_nosc_ts_sa_noea TYPE_QUAL
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_ts_sa_ea TYPE_QUAL
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_ts_sa_noea typespec_reserved_nonattr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_ts_sa_ea typespec_reserved_nonattr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_nots_sa_noea typespec_nonattr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_nots_sa_ea typespec_nonattr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	;
  
  declspecs_nosc_ts_sa_ea:
  	  declspecs_nosc_ts_sa_noea attributes
! 		{ $$ = tree_cons ($2, NULL_TREE, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	| declspecs_nosc_ts_sa_noea typespec_reserved_attr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_ts_sa_ea typespec_reserved_attr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_nots_sa_noea typespec_attr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_nots_sa_ea typespec_attr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	;
  
  declspecs_sc_nots_nosa_noea:
  	  scspec
! 		{ $$ = tree_cons (NULL_TREE, $1, NULL_TREE);
! 		  TREE_STATIC ($$) = 0; }
  	| declspecs_sc_nots_nosa_noea TYPE_QUAL
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_sc_nots_nosa_ea TYPE_QUAL
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_nots_nosa_noea scspec
! 		{ if (extra_warnings && TREE_STATIC ($1))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER ($2));
! 		  $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	| declspecs_nosc_nots_nosa_ea scspec
! 		{ if (extra_warnings && TREE_STATIC ($1))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER ($2));
! 		  $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	| declspecs_sc_nots_nosa_noea scspec
! 		{ if (extra_warnings && TREE_STATIC ($1))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER ($2));
! 		  $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	| declspecs_sc_nots_nosa_ea scspec
! 		{ if (extra_warnings && TREE_STATIC ($1))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER ($2));
! 		  $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	;
  
  declspecs_sc_nots_nosa_ea:
  	  declspecs_sc_nots_nosa_noea attributes
! 		{ $$ = tree_cons ($2, NULL_TREE, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	;
  
  declspecs_sc_nots_sa_noea:
  	  declspecs_sc_nots_sa_noea TYPE_QUAL
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_sc_nots_sa_ea TYPE_QUAL
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_nots_sa_noea scspec
! 		{ if (extra_warnings && TREE_STATIC ($1))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER ($2));
! 		  $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	| declspecs_nosc_nots_sa_ea scspec
! 		{ if (extra_warnings && TREE_STATIC ($1))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER ($2));
! 		  $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	| declspecs_sc_nots_sa_noea scspec
! 		{ if (extra_warnings && TREE_STATIC ($1))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER ($2));
! 		  $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	| declspecs_sc_nots_sa_ea scspec
! 		{ if (extra_warnings && TREE_STATIC ($1))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER ($2));
! 		  $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	;
  
  declspecs_sc_nots_sa_ea:
  	  declspecs_sc_nots_sa_noea attributes
! 		{ $$ = tree_cons ($2, NULL_TREE, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	;
  
  declspecs_sc_ts_nosa_noea:
  	  declspecs_sc_ts_nosa_noea TYPE_QUAL
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_sc_ts_nosa_ea TYPE_QUAL
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_sc_ts_nosa_noea typespec_reserved_nonattr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_sc_ts_nosa_ea typespec_reserved_nonattr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_sc_nots_nosa_noea typespec_nonattr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_sc_nots_nosa_ea typespec_nonattr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_ts_nosa_noea scspec
! 		{ if (extra_warnings && TREE_STATIC ($1))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER ($2));
! 		  $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	| declspecs_nosc_ts_nosa_ea scspec
! 		{ if (extra_warnings && TREE_STATIC ($1))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER ($2));
! 		  $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	| declspecs_sc_ts_nosa_noea scspec
! 		{ if (extra_warnings && TREE_STATIC ($1))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER ($2));
! 		  $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	| declspecs_sc_ts_nosa_ea scspec
! 		{ if (extra_warnings && TREE_STATIC ($1))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER ($2));
! 		  $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	;
  
  declspecs_sc_ts_nosa_ea:
  	  declspecs_sc_ts_nosa_noea attributes
! 		{ $$ = tree_cons ($2, NULL_TREE, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	| declspecs_sc_ts_nosa_noea typespec_reserved_attr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_sc_ts_nosa_ea typespec_reserved_attr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_sc_nots_nosa_noea typespec_attr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_sc_nots_nosa_ea typespec_attr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	;
  
  declspecs_sc_ts_sa_noea:
  	  declspecs_sc_ts_sa_noea TYPE_QUAL
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_sc_ts_sa_ea TYPE_QUAL
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_sc_ts_sa_noea typespec_reserved_nonattr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_sc_ts_sa_ea typespec_reserved_nonattr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_sc_nots_sa_noea typespec_nonattr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_sc_nots_sa_ea typespec_nonattr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_ts_sa_noea scspec
! 		{ if (extra_warnings && TREE_STATIC ($1))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER ($2));
! 		  $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	| declspecs_nosc_ts_sa_ea scspec
! 		{ if (extra_warnings && TREE_STATIC ($1))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER ($2));
! 		  $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	| declspecs_sc_ts_sa_noea scspec
! 		{ if (extra_warnings && TREE_STATIC ($1))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER ($2));
! 		  $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	| declspecs_sc_ts_sa_ea scspec
! 		{ if (extra_warnings && TREE_STATIC ($1))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER ($2));
! 		  $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	;
  
  declspecs_sc_ts_sa_ea:
  	  declspecs_sc_ts_sa_noea attributes
! 		{ $$ = tree_cons ($2, NULL_TREE, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	| declspecs_sc_ts_sa_noea typespec_reserved_attr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_sc_ts_sa_ea typespec_reserved_attr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_sc_nots_sa_noea typespec_attr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_sc_nots_sa_ea typespec_attr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	;
  
  /* Particular useful classes of declspecs.  */
--- 931,1138 ----
  
  /* Declspecs which contain at least one type specifier or typedef name.
     (Just `const' or `volatile' is not enough.)
!    A typedef'd name following these is taken as a name to be declared.  */
  
  declspecs_nosc_nots_nosa_noea:
  	  TYPE_QUAL
! 		{ $$ = declspecs_add_qual (build_null_declspecs (), $1); }
  	| declspecs_nosc_nots_nosa_noea TYPE_QUAL
! 		{ $$ = declspecs_add_qual ($1, $2); }
  	| declspecs_nosc_nots_nosa_ea TYPE_QUAL
! 		{ $$ = declspecs_add_qual ($1, $2); }
  	;
  
  declspecs_nosc_nots_nosa_ea:
  	  declspecs_nosc_nots_nosa_noea attributes
! 		{ $$ = declspecs_add_attrs ($1, $2); }
  	;
  
  declspecs_nosc_nots_sa_noea:
  	  declspecs_nosc_nots_sa_noea TYPE_QUAL
! 		{ $$ = declspecs_add_qual ($1, $2); }
  	| declspecs_nosc_nots_sa_ea TYPE_QUAL
! 		{ $$ = declspecs_add_qual ($1, $2); }
  	;
  
  declspecs_nosc_nots_sa_ea:
  	  attributes
! 		{ $$ = declspecs_add_attrs (build_null_declspecs (), $1); }
  	| declspecs_nosc_nots_sa_noea attributes
! 		{ $$ = declspecs_add_attrs ($1, $2); }
  	;
  
  declspecs_nosc_ts_nosa_noea:
  	  typespec_nonattr
! 		{ $$ = declspecs_add_type (build_null_declspecs (), $1); }
  	| declspecs_nosc_ts_nosa_noea TYPE_QUAL
! 		{ $$ = declspecs_add_qual ($1, $2); }
  	| declspecs_nosc_ts_nosa_ea TYPE_QUAL
! 		{ $$ = declspecs_add_qual ($1, $2); }
  	| declspecs_nosc_ts_nosa_noea typespec_reserved_nonattr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_nosc_ts_nosa_ea typespec_reserved_nonattr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_nosc_nots_nosa_noea typespec_nonattr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_nosc_nots_nosa_ea typespec_nonattr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	;
  
  declspecs_nosc_ts_nosa_ea:
  	  typespec_attr
! 		{ $$ = declspecs_add_type (build_null_declspecs (), $1); }
  	| declspecs_nosc_ts_nosa_noea attributes
! 		{ $$ = declspecs_add_attrs ($1, $2); }
  	| declspecs_nosc_ts_nosa_noea typespec_reserved_attr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_nosc_ts_nosa_ea typespec_reserved_attr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_nosc_nots_nosa_noea typespec_attr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_nosc_nots_nosa_ea typespec_attr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	;
  
  declspecs_nosc_ts_sa_noea:
  	  declspecs_nosc_ts_sa_noea TYPE_QUAL
! 		{ $$ = declspecs_add_qual ($1, $2); }
  	| declspecs_nosc_ts_sa_ea TYPE_QUAL
! 		{ $$ = declspecs_add_qual ($1, $2); }
  	| declspecs_nosc_ts_sa_noea typespec_reserved_nonattr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_nosc_ts_sa_ea typespec_reserved_nonattr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_nosc_nots_sa_noea typespec_nonattr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_nosc_nots_sa_ea typespec_nonattr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	;
  
  declspecs_nosc_ts_sa_ea:
  	  declspecs_nosc_ts_sa_noea attributes
! 		{ $$ = declspecs_add_attrs ($1, $2); }
  	| declspecs_nosc_ts_sa_noea typespec_reserved_attr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_nosc_ts_sa_ea typespec_reserved_attr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_nosc_nots_sa_noea typespec_attr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_nosc_nots_sa_ea typespec_attr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	;
  
  declspecs_sc_nots_nosa_noea:
  	  scspec
! 		{ $$ = declspecs_add_scspec (build_null_declspecs (), $1); }
  	| declspecs_sc_nots_nosa_noea TYPE_QUAL
! 		{ $$ = declspecs_add_qual ($1, $2); }
  	| declspecs_sc_nots_nosa_ea TYPE_QUAL
! 		{ $$ = declspecs_add_qual ($1, $2); }
  	| declspecs_nosc_nots_nosa_noea scspec
! 		{ $$ = declspecs_add_scspec ($1, $2); }
  	| declspecs_nosc_nots_nosa_ea scspec
! 		{ $$ = declspecs_add_scspec ($1, $2); }
  	| declspecs_sc_nots_nosa_noea scspec
! 		{ $$ = declspecs_add_scspec ($1, $2); }
  	| declspecs_sc_nots_nosa_ea scspec
! 		{ $$ = declspecs_add_scspec ($1, $2); }
  	;
  
  declspecs_sc_nots_nosa_ea:
  	  declspecs_sc_nots_nosa_noea attributes
! 		{ $$ = declspecs_add_attrs ($1, $2); }
  	;
  
  declspecs_sc_nots_sa_noea:
  	  declspecs_sc_nots_sa_noea TYPE_QUAL
! 		{ $$ = declspecs_add_qual ($1, $2); }
  	| declspecs_sc_nots_sa_ea TYPE_QUAL
! 		{ $$ = declspecs_add_qual ($1, $2); }
  	| declspecs_nosc_nots_sa_noea scspec
! 		{ $$ = declspecs_add_scspec ($1, $2); }
  	| declspecs_nosc_nots_sa_ea scspec
! 		{ $$ = declspecs_add_scspec ($1, $2); }
  	| declspecs_sc_nots_sa_noea scspec
! 		{ $$ = declspecs_add_scspec ($1, $2); }
  	| declspecs_sc_nots_sa_ea scspec
! 		{ $$ = declspecs_add_scspec ($1, $2); }
  	;
  
  declspecs_sc_nots_sa_ea:
  	  declspecs_sc_nots_sa_noea attributes
! 		{ $$ = declspecs_add_attrs ($1, $2); }
  	;
  
  declspecs_sc_ts_nosa_noea:
  	  declspecs_sc_ts_nosa_noea TYPE_QUAL
! 		{ $$ = declspecs_add_qual ($1, $2); }
  	| declspecs_sc_ts_nosa_ea TYPE_QUAL
! 		{ $$ = declspecs_add_qual ($1, $2); }
  	| declspecs_sc_ts_nosa_noea typespec_reserved_nonattr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_sc_ts_nosa_ea typespec_reserved_nonattr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_sc_nots_nosa_noea typespec_nonattr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_sc_nots_nosa_ea typespec_nonattr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_nosc_ts_nosa_noea scspec
! 		{ $$ = declspecs_add_scspec ($1, $2); }
  	| declspecs_nosc_ts_nosa_ea scspec
! 		{ $$ = declspecs_add_scspec ($1, $2); }
  	| declspecs_sc_ts_nosa_noea scspec
! 		{ $$ = declspecs_add_scspec ($1, $2); }
  	| declspecs_sc_ts_nosa_ea scspec
! 		{ $$ = declspecs_add_scspec ($1, $2); }
  	;
  
  declspecs_sc_ts_nosa_ea:
  	  declspecs_sc_ts_nosa_noea attributes
! 		{ $$ = declspecs_add_attrs ($1, $2); }
  	| declspecs_sc_ts_nosa_noea typespec_reserved_attr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_sc_ts_nosa_ea typespec_reserved_attr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_sc_nots_nosa_noea typespec_attr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_sc_nots_nosa_ea typespec_attr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	;
  
  declspecs_sc_ts_sa_noea:
  	  declspecs_sc_ts_sa_noea TYPE_QUAL
! 		{ $$ = declspecs_add_qual ($1, $2); }
  	| declspecs_sc_ts_sa_ea TYPE_QUAL
! 		{ $$ = declspecs_add_qual ($1, $2); }
  	| declspecs_sc_ts_sa_noea typespec_reserved_nonattr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_sc_ts_sa_ea typespec_reserved_nonattr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_sc_nots_sa_noea typespec_nonattr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_sc_nots_sa_ea typespec_nonattr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_nosc_ts_sa_noea scspec
! 		{ $$ = declspecs_add_scspec ($1, $2); }
  	| declspecs_nosc_ts_sa_ea scspec
! 		{ $$ = declspecs_add_scspec ($1, $2); }
  	| declspecs_sc_ts_sa_noea scspec
! 		{ $$ = declspecs_add_scspec ($1, $2); }
  	| declspecs_sc_ts_sa_ea scspec
! 		{ $$ = declspecs_add_scspec ($1, $2); }
  	;
  
  declspecs_sc_ts_sa_ea:
  	  declspecs_sc_ts_sa_noea attributes
! 		{ $$ = declspecs_add_attrs ($1, $2); }
  	| declspecs_sc_ts_sa_noea typespec_reserved_attr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_sc_ts_sa_ea typespec_reserved_attr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_sc_nots_sa_noea typespec_attr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_sc_nots_sa_ea typespec_attr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	;
  
  /* Particular useful classes of declspecs.  */
*************** declspecs:
*** 1309,1315 ****
  /* A (possibly empty) sequence of type qualifiers and attributes.  */
  maybe_type_quals_attrs:
  	  /* empty */
! 		{ $$ = NULL_TREE; }
  	| declspecs_nosc_nots
  		{ $$ = $1; }
  	;
--- 1219,1225 ----
  /* A (possibly empty) sequence of type qualifiers and attributes.  */
  maybe_type_quals_attrs:
  	  /* empty */
! 		{ $$ = NULL; }
  	| declspecs_nosc_nots
  		{ $$ = $1; }
  	;
*************** maybe_type_quals_attrs:
*** 1333,1339 ****
     or are such that any following attributes would
     be parsed as part of the specifier.
  
!    _nonattr: specifiers.  */
  
  typespec_nonattr:
  	  typespec_reserved_nonattr
--- 1243,1249 ----
     or are such that any following attributes would
     be parsed as part of the specifier.
  
!    _nonattr: other specifiers not ending with attributes.  */
  
  typespec_nonattr:
  	  typespec_reserved_nonattr
*************** typespec_attr:
*** 1346,1352 ****
  
  typespec_reserved_nonattr:
  	  TYPESPEC
! 		{ OBJC_NEED_RAW_IDENTIFIER (1);	}
  	| structsp_nonattr
  	;
  
--- 1256,1264 ----
  
  typespec_reserved_nonattr:
  	  TYPESPEC
! 		{ OBJC_NEED_RAW_IDENTIFIER (1);
! 		  $$.kind = ctsk_resword;
! 		  $$.spec = $1; }
  	| structsp_nonattr
  	;
  
*************** typespec_nonreserved_nonattr:
*** 1358,1383 ****
  	  TYPENAME
  		{ /* For a typedef name, record the meaning, not the name.
  		     In case of `foo foo, bar;'.  */
! 		  $$ = lookup_name ($1); }
  @@ifobjc
  	| CLASSNAME protocolrefs
! 		{ $$ = get_static_reference ($1, $2); }
! 	| OBJECTNAME protocolrefs
! 		{ $$ = get_object_reference ($2); }
  
  /* Make "<SomeProtocol>" equivalent to "id <SomeProtocol>"
     - nisse@lysator.liu.se */
          | non_empty_protocolrefs
!                 { $$ = get_object_reference ($1); }
  @@end_ifobjc
  	| typeof '(' expr ')'
  		{ skip_evaluation--;
! 		  if (TREE_CODE ($3) == COMPONENT_REF
! 		      && DECL_C_BIT_FIELD (TREE_OPERAND ($3, 1)))
! 		    error ("`typeof' applied to a bit-field");
! 		  $$ = TREE_TYPE ($3); }
  	| typeof '(' typename ')'
! 		{ skip_evaluation--; $$ = groktypename ($3); }
  	;
  
  /* typespec_nonreserved_attr does not exist.  */
--- 1270,1308 ----
  	  TYPENAME
  		{ /* For a typedef name, record the meaning, not the name.
  		     In case of `foo foo, bar;'.  */
! 		  $$.kind = ctsk_typedef;
! 		  $$.spec = lookup_name ($1); }
  @@ifobjc
  	| CLASSNAME protocolrefs
! 		{ $$.kind = ctsk_objc;
! 		  $$.spec = objc_get_protocol_qualified_type ($1, $2); }
! 	| TYPENAME non_empty_protocolrefs
! 		{ $$.kind = ctsk_objc;
! 		  $$.spec = objc_get_protocol_qualified_type ($1, $2); }
  
  /* Make "<SomeProtocol>" equivalent to "id <SomeProtocol>"
     - nisse@lysator.liu.se */
          | non_empty_protocolrefs
!                 { $$.kind = ctsk_objc;
! 		  $$.spec = objc_get_protocol_qualified_type (NULL_TREE, $1); }
  @@end_ifobjc
  	| typeof '(' expr ')'
  		{ skip_evaluation--;
! 		  in_typeof--;
! 		  if (TREE_CODE ($3.value) == COMPONENT_REF
! 		      && DECL_C_BIT_FIELD (TREE_OPERAND ($3.value, 1)))
! 		    error ("%<typeof%> applied to a bit-field");
! 		  $$.kind = ctsk_typeof;
! 		  $$.spec = TREE_TYPE ($3.value);
! 		  pop_maybe_used (variably_modified_type_p ($$.spec,
! 							    NULL_TREE)); }
  	| typeof '(' typename ')'
! 		{ skip_evaluation--;
! 		  in_typeof--;
! 		  $$.kind = ctsk_typeof;
! 		  $$.spec = groktypename ($3);
! 		  pop_maybe_used (variably_modified_type_p ($$.spec,
! 							    NULL_TREE)); }
  	;
  
  /* typespec_nonreserved_attr does not exist.  */
*************** notype_initdecls:
*** 1392,1433 ****
  	| notype_initdecls ',' maybe_resetattrs notype_initdcl
  	;
  
- maybeasm:
- 	  /* empty */
- 		{ $$ = NULL_TREE; }
- 	| ASM_KEYWORD '(' STRING ')'
- 		{ $$ = $3; }
- 	;
- 
  initdcl:
  	  declarator maybeasm maybe_attribute '='
! 		{ $<ttype>$ = start_decl ($1, current_declspecs, 1,
  					  chainon ($3, all_prefix_attributes));
  		  start_init ($<ttype>$, $2, global_bindings_p ()); }
  	  init
  /* Note how the declaration of the variable is in effect while its init is parsed! */
  		{ finish_init ();
! 		  finish_decl ($<ttype>5, $6, $2); }
  	| declarator maybeasm maybe_attribute
! 		{ tree d = start_decl ($1, current_declspecs, 0,
  				       chainon ($3, all_prefix_attributes));
! 		  finish_decl (d, NULL_TREE, $2);
                  }
  	;
  
  notype_initdcl:
  	  notype_declarator maybeasm maybe_attribute '='
! 		{ $<ttype>$ = start_decl ($1, current_declspecs, 1,
  					  chainon ($3, all_prefix_attributes));
  		  start_init ($<ttype>$, $2, global_bindings_p ()); }
  	  init
  /* Note how the declaration of the variable is in effect while its init is parsed! */
  		{ finish_init ();
! 		  finish_decl ($<ttype>5, $6, $2); }
  	| notype_declarator maybeasm maybe_attribute
! 		{ tree d = start_decl ($1, current_declspecs, 0,
  				       chainon ($3, all_prefix_attributes));
! 		  finish_decl (d, NULL_TREE, $2); }
  	;
  /* the * rules are dummies to accept the Apollo extended syntax
     so that the header files compile. */
--- 1317,1367 ----
  	| notype_initdecls ',' maybe_resetattrs notype_initdcl
  	;
  
  initdcl:
  	  declarator maybeasm maybe_attribute '='
! 		{ $<ttype>$ = start_decl ($1, current_declspecs, true,
  					  chainon ($3, all_prefix_attributes));
+ 		  if (!$<ttype>$)
+ 		    $<ttype>$ = error_mark_node;
  		  start_init ($<ttype>$, $2, global_bindings_p ()); }
  	  init
  /* Note how the declaration of the variable is in effect while its init is parsed! */
  		{ finish_init ();
! 		  if ($<ttype>5 != error_mark_node)
! 		    {
! 		      maybe_warn_string_init (TREE_TYPE ($<ttype>5), $6);
! 		      finish_decl ($<ttype>5, $6.value, $2);
! 		    }
! 		}
  	| declarator maybeasm maybe_attribute
! 		{ tree d = start_decl ($1, current_declspecs, false,
  				       chainon ($3, all_prefix_attributes));
! 		  if (d)
! 		    finish_decl (d, NULL_TREE, $2);
                  }
  	;
  
  notype_initdcl:
  	  notype_declarator maybeasm maybe_attribute '='
! 		{ $<ttype>$ = start_decl ($1, current_declspecs, true,
  					  chainon ($3, all_prefix_attributes));
+ 		  if (!$<ttype>$)
+ 		    $<ttype>$ = error_mark_node;
  		  start_init ($<ttype>$, $2, global_bindings_p ()); }
  	  init
  /* Note how the declaration of the variable is in effect while its init is parsed! */
  		{ finish_init ();
! 		  if ($<ttype>5 != error_mark_node)
! 		    {
! 		      maybe_warn_string_init (TREE_TYPE ($<ttype>5), $6);
! 		      finish_decl ($<ttype>5, $6.value, $2);
! 		    }
! 		}
  	| notype_declarator maybeasm maybe_attribute
! 		{ tree d = start_decl ($1, current_declspecs, false,
  				       chainon ($3, all_prefix_attributes));
! 		  if (d)
!                     finish_decl (d, NULL_TREE, $2); }
  	;
  /* the * rules are dummies to accept the Apollo extended syntax
     so that the header files compile. */
*************** attributes:
*** 1446,1453 ****
  	;
  
  attribute:
!       ATTRIBUTE '(' '(' attribute_list ')' ')'
! 		{ $$ = $4; }
  	;
  
  attribute_list:
--- 1380,1390 ----
  	;
  
  attribute:
!       ATTRIBUTE stop_string_translation
!                 '(' '(' attribute_list ')' ')' start_string_translation
! 		{ $$ = $5; }
!       | ATTRIBUTE error start_string_translation
!                 { $$ = NULL_TREE; }
  	;
  
  attribute_list:
*************** scspec:
*** 1489,1500 ****
  
  init:
  	expr_no_commas
  	| '{'
  		{ really_start_incremental_init (NULL_TREE); }
  	  initlist_maybe_comma '}'
  		{ $$ = pop_init_level (0); }
  	| error
! 		{ $$ = error_mark_node; }
  	;
  
  /* `initlist_maybe_comma' is the guts of an initializer in braces.  */
--- 1426,1438 ----
  
  init:
  	expr_no_commas
+ 		{ $$ = $1; }
  	| '{'
  		{ really_start_incremental_init (NULL_TREE); }
  	  initlist_maybe_comma '}'
  		{ $$ = pop_init_level (0); }
  	| error
! 		{ $$.value = error_mark_node; $$.original_code = ERROR_MARK; }
  	;
  
  /* `initlist_maybe_comma' is the guts of an initializer in braces.  */
*************** initlist1:
*** 1514,1528 ****
     It may use braces.  */
  initelt:
  	  designator_list '=' initval
! 		{ if (pedantic && ! flag_isoc99)
  		    pedwarn ("ISO C90 forbids specifying subobject to initialize"); }
! 	| designator initval
  		{ if (pedantic)
! 		    pedwarn ("obsolete use of designated initializer without `='"); }
  	| identifier ':'
  		{ set_init_label ($1);
  		  if (pedantic)
! 		    pedwarn ("obsolete use of designated initializer with `:'"); }
  	  initval
  		{}
  	| initval
--- 1452,1466 ----
     It may use braces.  */
  initelt:
  	  designator_list '=' initval
! 		{ if (pedantic && !flag_isoc99)
  		    pedwarn ("ISO C90 forbids specifying subobject to initialize"); }
! 	| array_designator initval
  		{ if (pedantic)
! 		    pedwarn ("obsolete use of designated initializer without %<=%>"); }
  	| identifier ':'
  		{ set_init_label ($1);
  		  if (pedantic)
! 		    pedwarn ("obsolete use of designated initializer with %<:%>"); }
  	  initval
  		{}
  	| initval
*************** designator_list:
*** 1546,1619 ****
  designator:
  	  '.' identifier
  		{ set_init_label ($2); }
! 	| '[' expr_no_commas ELLIPSIS expr_no_commas ']'
! 		{ set_init_index ($2, $4);
  		  if (pedantic)
  		    pedwarn ("ISO C forbids specifying range of elements to initialize"); }
  	| '[' expr_no_commas ']'
! 		{ set_init_index ($2, NULL_TREE); }
  	;
  
  nested_function:
! 	  declarator
  		{ if (pedantic)
  		    pedwarn ("ISO C forbids nested functions");
  
  		  push_function_context ();
! 		  if (! start_function (current_declspecs, $1,
! 					all_prefix_attributes))
  		    {
  		      pop_function_context ();
  		      YYERROR1;
  		    }
- 		  parsing_iso_function_signature = false; /* Don't warn about nested functions.  */
  		}
! 	   old_style_parm_decls save_location
  		{ tree decl = current_function_decl;
  		  DECL_SOURCE_LOCATION (decl) = $4;
  		  store_parm_decls (); }
! /* This used to use compstmt_or_error.
!    That caused a bug with input `f(g) int g {}',
!    where the use of YYERROR1 above caused an error
!    which then was handled by compstmt_or_error.
!    There followed a repeated execution of that same rule,
!    which called YYERROR1 again, and so on.  */
! 	  compstmt
  		{ tree decl = current_function_decl;
  		  finish_function ();
  		  pop_function_context ();
! 		  add_decl_stmt (decl); }
  	;
  
  notype_nested_function:
! 	  notype_declarator
  		{ if (pedantic)
  		    pedwarn ("ISO C forbids nested functions");
  
  		  push_function_context ();
! 		  if (! start_function (current_declspecs, $1,
! 					all_prefix_attributes))
  		    {
  		      pop_function_context ();
  		      YYERROR1;
  		    }
- 		  parsing_iso_function_signature = false; /* Don't warn about nested functions.  */
  		}
! 	  old_style_parm_decls save_location
  		{ tree decl = current_function_decl;
  		  DECL_SOURCE_LOCATION (decl) = $4;
  		  store_parm_decls (); }
! /* This used to use compstmt_or_error.
!    That caused a bug with input `f(g) int g {}',
!    where the use of YYERROR1 above caused an error
!    which then was handled by compstmt_or_error.
!    There followed a repeated execution of that same rule,
!    which called YYERROR1 again, and so on.  */
! 	  compstmt
  		{ tree decl = current_function_decl;
  		  finish_function ();
  		  pop_function_context ();
! 		  add_decl_stmt (decl); }
  	;
  
  /* Any kind of declarator (thus, all declarators allowed
--- 1484,1559 ----
  designator:
  	  '.' identifier
  		{ set_init_label ($2); }
! 	| array_designator
! 	;
! 
! array_designator:
! 	  '[' expr_no_commas ELLIPSIS expr_no_commas ']'
! 		{ set_init_index ($2.value, $4.value);
  		  if (pedantic)
  		    pedwarn ("ISO C forbids specifying range of elements to initialize"); }
  	| '[' expr_no_commas ']'
! 		{ set_init_index ($2.value, NULL_TREE); }
  	;
  
  nested_function:
! 	declarator
  		{ if (pedantic)
  		    pedwarn ("ISO C forbids nested functions");
  
  		  push_function_context ();
! 		  if (!start_function (current_declspecs, $1,
! 				       all_prefix_attributes))
  		    {
  		      pop_function_context ();
  		      YYERROR1;
  		    }
  		}
! 	old_style_parm_decls save_location
  		{ tree decl = current_function_decl;
  		  DECL_SOURCE_LOCATION (decl) = $4;
  		  store_parm_decls (); }
! 	/* This used to use compstmt_or_error.  That caused a bug with
! 	   input `f(g) int g {}', where the use of YYERROR1 above caused
! 	   an error which then was handled by compstmt_or_error.  There
! 	   followed a repeated execution of that same rule, which called
! 	   YYERROR1 again, and so on.  */
! 	compstmt
  		{ tree decl = current_function_decl;
+ 		  add_stmt ($6);
  		  finish_function ();
  		  pop_function_context ();
! 		  add_stmt (build_stmt (DECL_EXPR, decl)); }
  	;
  
  notype_nested_function:
! 	notype_declarator
  		{ if (pedantic)
  		    pedwarn ("ISO C forbids nested functions");
  
  		  push_function_context ();
! 		  if (!start_function (current_declspecs, $1,
! 				       all_prefix_attributes))
  		    {
  		      pop_function_context ();
  		      YYERROR1;
  		    }
  		}
! 	old_style_parm_decls save_location
  		{ tree decl = current_function_decl;
  		  DECL_SOURCE_LOCATION (decl) = $4;
  		  store_parm_decls (); }
! 	/* This used to use compstmt_or_error.  That caused a bug with
! 	   input `f(g) int g {}', where the use of YYERROR1 above caused
! 	   an error which then was handled by compstmt_or_error.  There
! 	   followed a repeated execution of that same rule, which called
! 	   YYERROR1 again, and so on.  */
! 	compstmt
  		{ tree decl = current_function_decl;
+ 		  add_stmt ($6);
  		  finish_function ();
  		  pop_function_context ();
! 		  add_stmt (build_stmt (DECL_EXPR, decl)); }
  	;
  
  /* Any kind of declarator (thus, all declarators allowed
*************** declarator:
*** 1628,1647 ****
  
  after_type_declarator:
  	  '(' maybe_attribute after_type_declarator ')'
! 		{ $$ = $2 ? tree_cons ($2, $3, NULL_TREE) : $3; }
  	| after_type_declarator '(' parmlist_or_identifiers  %prec '.'
! 		{ $$ = build_nt (CALL_EXPR, $1, $3, NULL_TREE); }
! /*	| after_type_declarator '(' error ')'  %prec '.'
! 		{ $$ = build_nt (CALL_EXPR, $1, NULL_TREE, NULL_TREE);
! 		  poplevel (0, 0, 0); }  */
  	| after_type_declarator array_declarator  %prec '.'
! 		{ $$ = set_array_declarator_type ($2, $1, 0); }
  	| '*' maybe_type_quals_attrs after_type_declarator  %prec UNARY
  		{ $$ = make_pointer_declarator ($2, $3); }
  	| TYPENAME
! @@ifobjc
! 	| OBJECTNAME
! @@end_ifobjc
  	;
  
  /* Kinds of declarator that can appear in a parameter list
--- 1568,1582 ----
  
  after_type_declarator:
  	  '(' maybe_attribute after_type_declarator ')'
! 		{ $$ = $2 ? build_attrs_declarator ($2, $3) : $3; }
  	| after_type_declarator '(' parmlist_or_identifiers  %prec '.'
! 		{ $$ = build_function_declarator ($3, $1); }
  	| after_type_declarator array_declarator  %prec '.'
! 		{ $$ = set_array_declarator_inner ($2, $1, false); }
  	| '*' maybe_type_quals_attrs after_type_declarator  %prec UNARY
  		{ $$ = make_pointer_declarator ($2, $3); }
  	| TYPENAME
! 		{ $$ = build_id_declarator ($1); }
  	;
  
  /* Kinds of declarator that can appear in a parameter list
*************** parm_declarator:
*** 1655,1686 ****
  
  parm_declarator_starttypename:
  	  parm_declarator_starttypename '(' parmlist_or_identifiers  %prec '.'
! 		{ $$ = build_nt (CALL_EXPR, $1, $3, NULL_TREE); }
! /*	| parm_declarator_starttypename '(' error ')'  %prec '.'
! 		{ $$ = build_nt (CALL_EXPR, $1, NULL_TREE, NULL_TREE);
! 		  poplevel (0, 0, 0); }  */
  	| parm_declarator_starttypename array_declarator  %prec '.'
! 		{ $$ = set_array_declarator_type ($2, $1, 0); }
  	| TYPENAME
! @@ifobjc
! 	| OBJECTNAME
! @@end_ifobjc
  	;
  
  parm_declarator_nostarttypename:
  	  parm_declarator_nostarttypename '(' parmlist_or_identifiers  %prec '.'
! 		{ $$ = build_nt (CALL_EXPR, $1, $3, NULL_TREE); }
! /*	| parm_declarator_nostarttypename '(' error ')'  %prec '.'
! 		{ $$ = build_nt (CALL_EXPR, $1, NULL_TREE, NULL_TREE);
! 		  poplevel (0, 0, 0); }  */
  	| parm_declarator_nostarttypename array_declarator  %prec '.'
! 		{ $$ = set_array_declarator_type ($2, $1, 0); }
  	| '*' maybe_type_quals_attrs parm_declarator_starttypename  %prec UNARY
  		{ $$ = make_pointer_declarator ($2, $3); }
  	| '*' maybe_type_quals_attrs parm_declarator_nostarttypename  %prec UNARY
  		{ $$ = make_pointer_declarator ($2, $3); }
  	| '(' maybe_attribute parm_declarator_nostarttypename ')'
! 		{ $$ = $2 ? tree_cons ($2, $3, NULL_TREE) : $3; }
  	;
  
  /* A declarator allowed whether or not there has been
--- 1590,1613 ----
  
  parm_declarator_starttypename:
  	  parm_declarator_starttypename '(' parmlist_or_identifiers  %prec '.'
! 		{ $$ = build_function_declarator ($3, $1); }
  	| parm_declarator_starttypename array_declarator  %prec '.'
! 		{ $$ = set_array_declarator_inner ($2, $1, false); }
  	| TYPENAME
! 		{ $$ = build_id_declarator ($1); }
  	;
  
  parm_declarator_nostarttypename:
  	  parm_declarator_nostarttypename '(' parmlist_or_identifiers  %prec '.'
! 		{ $$ = build_function_declarator ($3, $1); }
  	| parm_declarator_nostarttypename array_declarator  %prec '.'
! 		{ $$ = set_array_declarator_inner ($2, $1, false); }
  	| '*' maybe_type_quals_attrs parm_declarator_starttypename  %prec UNARY
  		{ $$ = make_pointer_declarator ($2, $3); }
  	| '*' maybe_type_quals_attrs parm_declarator_nostarttypename  %prec UNARY
  		{ $$ = make_pointer_declarator ($2, $3); }
  	| '(' maybe_attribute parm_declarator_nostarttypename ')'
! 		{ $$ = $2 ? build_attrs_declarator ($2, $3) : $3; }
  	;
  
  /* A declarator allowed whether or not there has been
*************** parm_declarator_nostarttypename:
*** 1688,1704 ****
  
  notype_declarator:
  	  notype_declarator '(' parmlist_or_identifiers  %prec '.'
! 		{ $$ = build_nt (CALL_EXPR, $1, $3, NULL_TREE); }
! /*	| notype_declarator '(' error ')'  %prec '.'
! 		{ $$ = build_nt (CALL_EXPR, $1, NULL_TREE, NULL_TREE);
! 		  poplevel (0, 0, 0); }  */
  	| '(' maybe_attribute notype_declarator ')'
! 		{ $$ = $2 ? tree_cons ($2, $3, NULL_TREE) : $3; }
  	| '*' maybe_type_quals_attrs notype_declarator  %prec UNARY
  		{ $$ = make_pointer_declarator ($2, $3); }
  	| notype_declarator array_declarator  %prec '.'
! 		{ $$ = set_array_declarator_type ($2, $1, 0); }
  	| IDENTIFIER
  	;
  
  struct_head:
--- 1615,1629 ----
  
  notype_declarator:
  	  notype_declarator '(' parmlist_or_identifiers  %prec '.'
! 		{ $$ = build_function_declarator ($3, $1); }
  	| '(' maybe_attribute notype_declarator ')'
! 		{ $$ = $2 ? build_attrs_declarator ($2, $3) : $3; }
  	| '*' maybe_type_quals_attrs notype_declarator  %prec UNARY
  		{ $$ = make_pointer_declarator ($2, $3); }
  	| notype_declarator array_declarator  %prec '.'
! 		{ $$ = set_array_declarator_inner ($2, $1, false); }
  	| IDENTIFIER
+ 		{ $$ = build_id_declarator ($1); }
  	;
  
  struct_head:
*************** enum_head:
*** 1730,1777 ****
  
  structsp_attr:
  	  struct_head identifier '{'
! 		{ $$ = start_struct (RECORD_TYPE, $2);
  		  /* Start scope of tag before parsing components.  */
  		}
  	  component_decl_list '}' maybe_attribute
! 		{ $$ = finish_struct ($<ttype>4, nreverse ($5),
! 				      chainon ($1, $7)); }
  	| struct_head '{' component_decl_list '}' maybe_attribute
! 		{ $$ = finish_struct (start_struct (RECORD_TYPE, NULL_TREE),
! 				      nreverse ($3), chainon ($1, $5));
  		}
  	| union_head identifier '{'
! 		{ $$ = start_struct (UNION_TYPE, $2); }
  	  component_decl_list '}' maybe_attribute
! 		{ $$ = finish_struct ($<ttype>4, nreverse ($5),
! 				      chainon ($1, $7)); }
  	| union_head '{' component_decl_list '}' maybe_attribute
! 		{ $$ = finish_struct (start_struct (UNION_TYPE, NULL_TREE),
! 				      nreverse ($3), chainon ($1, $5));
  		}
  	| enum_head identifier '{'
! 		{ $$ = start_enum ($2); }
  	  enumlist maybecomma_warn '}' maybe_attribute
! 		{ $$ = finish_enum ($<ttype>4, nreverse ($5),
! 				    chainon ($1, $8)); }
  	| enum_head '{'
! 		{ $$ = start_enum (NULL_TREE); }
  	  enumlist maybecomma_warn '}' maybe_attribute
! 		{ $$ = finish_enum ($<ttype>3, nreverse ($4),
! 				    chainon ($1, $7)); }
  	;
  
  structsp_nonattr:
  	  struct_head identifier
! 		{ $$ = xref_tag (RECORD_TYPE, $2); }
  	| union_head identifier
! 		{ $$ = xref_tag (UNION_TYPE, $2); }
  	| enum_head identifier
! 		{ $$ = xref_tag (ENUMERAL_TYPE, $2);
  		  /* In ISO C, enumerated types can be referred to
  		     only if already defined.  */
! 		  if (pedantic && !COMPLETE_TYPE_P ($$))
! 		    pedwarn ("ISO C forbids forward references to `enum' types"); }
  	;
  
  maybecomma:
--- 1655,1710 ----
  
  structsp_attr:
  	  struct_head identifier '{'
! 		{ $<ttype>$ = start_struct (RECORD_TYPE, $2);
  		  /* Start scope of tag before parsing components.  */
  		}
  	  component_decl_list '}' maybe_attribute
! 		{ $$.spec = finish_struct ($<ttype>4, nreverse ($5),
! 					   chainon ($1, $7));
! 		  $$.kind = ctsk_tagdef; }
  	| struct_head '{' component_decl_list '}' maybe_attribute
! 		{ $$.spec = finish_struct (start_struct (RECORD_TYPE,
! 							 NULL_TREE),
! 					   nreverse ($3), chainon ($1, $5));
! 		  $$.kind = ctsk_tagdef;
  		}
  	| union_head identifier '{'
! 		{ $<ttype>$ = start_struct (UNION_TYPE, $2); }
  	  component_decl_list '}' maybe_attribute
! 		{ $$.spec = finish_struct ($<ttype>4, nreverse ($5),
! 					   chainon ($1, $7));
! 		  $$.kind = ctsk_tagdef; }
  	| union_head '{' component_decl_list '}' maybe_attribute
! 		{ $$.spec = finish_struct (start_struct (UNION_TYPE,
! 							 NULL_TREE),
! 					   nreverse ($3), chainon ($1, $5));
! 		  $$.kind = ctsk_tagdef;
  		}
  	| enum_head identifier '{'
! 		{ $<ttype>$ = start_enum ($2); }
  	  enumlist maybecomma_warn '}' maybe_attribute
! 		{ $$.spec = finish_enum ($<ttype>4, nreverse ($5),
! 					 chainon ($1, $8));
! 		  $$.kind = ctsk_tagdef; }
  	| enum_head '{'
! 		{ $<ttype>$ = start_enum (NULL_TREE); }
  	  enumlist maybecomma_warn '}' maybe_attribute
! 		{ $$.spec = finish_enum ($<ttype>3, nreverse ($4),
! 					 chainon ($1, $7));
! 		  $$.kind = ctsk_tagdef; }
  	;
  
  structsp_nonattr:
  	  struct_head identifier
! 		{ $$ = parser_xref_tag (RECORD_TYPE, $2); }
  	| union_head identifier
! 		{ $$ = parser_xref_tag (UNION_TYPE, $2); }
  	| enum_head identifier
! 		{ $$ = parser_xref_tag (ENUMERAL_TYPE, $2);
  		  /* In ISO C, enumerated types can be referred to
  		     only if already defined.  */
! 		  if (pedantic && !COMPLETE_TYPE_P ($$.spec))
! 		    pedwarn ("ISO C forbids forward references to %<enum%> types"); }
  	;
  
  maybecomma:
*************** maybecomma:
*** 1782,1788 ****
  maybecomma_warn:
  	  /* empty */
  	| ','
! 		{ if (pedantic && ! flag_isoc99)
  		    pedwarn ("comma at end of enumerator list"); }
  	;
  
--- 1715,1721 ----
  maybecomma_warn:
  	  /* empty */
  	| ','
! 		{ if (pedantic && !flag_isoc99)
  		    pedwarn ("comma at end of enumerator list"); }
  	;
  
*************** component_decl_list2:	/* empty */
*** 1815,1822 ****
  		    pedwarn ("extra semicolon in struct or union specified"); }
  @@ifobjc
  	/* foo(sizeof(struct{ @defs(ClassName)})); */
! 	| DEFS '(' CLASSNAME ')'
! 		{ $$ = nreverse (get_class_ivars_from_name ($3)); }
  @@end_ifobjc
  	;
  
--- 1748,1755 ----
  		    pedwarn ("extra semicolon in struct or union specified"); }
  @@ifobjc
  	/* foo(sizeof(struct{ @defs(ClassName)})); */
! 	| AT_DEFS '(' CLASSNAME ')'
! 		{ $$ = nreverse (objc_get_class_ivars ($3)); }
  @@end_ifobjc
  	;
  
*************** component_decl:
*** 1829,1838 ****
  		  /* Support for unnamed structs or unions as members of
  		     structs or unions (which is [a] useful and [b] supports
  		     MS P-SDK).  */
! 		  if (pedantic)
! 		    pedwarn ("ISO C doesn't support unnamed structs/unions");
! 
! 		  $$ = grokfield(NULL, current_declspecs, NULL_TREE);
  		  POP_DECLSPEC_STACK; }
  	| declspecs_nosc_nots setspecs components_notype
  		{ $$ = $3;
--- 1762,1769 ----
  		  /* Support for unnamed structs or unions as members of
  		     structs or unions (which is [a] useful and [b] supports
  		     MS P-SDK).  */
! 		  $$ = grokfield (build_id_declarator (NULL_TREE),
! 				  current_declspecs, NULL_TREE);
  		  POP_DECLSPEC_STACK; }
  	| declspecs_nosc_nots setspecs components_notype
  		{ $$ = $3;
*************** component_decl:
*** 1840,1846 ****
  	| declspecs_nosc_nots
  		{ if (pedantic)
  		    pedwarn ("ISO C forbids member declarations with no members");
! 		  shadow_tag_warned ($1, pedantic);
  		  $$ = NULL_TREE; }
  	| error
  		{ $$ = NULL_TREE; }
--- 1771,1777 ----
  	| declspecs_nosc_nots
  		{ if (pedantic)
  		    pedwarn ("ISO C forbids member declarations with no members");
! 		  shadow_tag_warned (finish_declspecs ($1), pedantic);
  		  $$ = NULL_TREE; }
  	| error
  		{ $$ = NULL_TREE; }
*************** component_declarator:
*** 1867,1877 ****
  		  decl_attributes (&$$,
  				   chainon ($2, all_prefix_attributes), 0); }
  	| declarator ':' expr_no_commas maybe_attribute
! 		{ $$ = grokfield ($1, current_declspecs, $3);
  		  decl_attributes (&$$,
  				   chainon ($4, all_prefix_attributes), 0); }
  	| ':' expr_no_commas maybe_attribute
! 		{ $$ = grokfield (NULL_TREE, current_declspecs, $2);
  		  decl_attributes (&$$,
  				   chainon ($3, all_prefix_attributes), 0); }
  	;
--- 1798,1809 ----
  		  decl_attributes (&$$,
  				   chainon ($2, all_prefix_attributes), 0); }
  	| declarator ':' expr_no_commas maybe_attribute
! 		{ $$ = grokfield ($1, current_declspecs, $3.value);
  		  decl_attributes (&$$,
  				   chainon ($4, all_prefix_attributes), 0); }
  	| ':' expr_no_commas maybe_attribute
! 		{ $$ = grokfield (build_id_declarator (NULL_TREE),
! 				  current_declspecs, $2.value);
  		  decl_attributes (&$$,
  				   chainon ($3, all_prefix_attributes), 0); }
  	;
*************** component_notype_declarator:
*** 1882,1892 ****
  		  decl_attributes (&$$,
  				   chainon ($2, all_prefix_attributes), 0); }
  	| notype_declarator ':' expr_no_commas maybe_attribute
! 		{ $$ = grokfield ($1, current_declspecs, $3);
  		  decl_attributes (&$$,
  				   chainon ($4, all_prefix_attributes), 0); }
  	| ':' expr_no_commas maybe_attribute
! 		{ $$ = grokfield (NULL_TREE, current_declspecs, $2);
  		  decl_attributes (&$$,
  				   chainon ($3, all_prefix_attributes), 0); }
  	;
--- 1814,1825 ----
  		  decl_attributes (&$$,
  				   chainon ($2, all_prefix_attributes), 0); }
  	| notype_declarator ':' expr_no_commas maybe_attribute
! 		{ $$ = grokfield ($1, current_declspecs, $3.value);
  		  decl_attributes (&$$,
  				   chainon ($4, all_prefix_attributes), 0); }
  	| ':' expr_no_commas maybe_attribute
! 		{ $$ = grokfield (build_id_declarator (NULL_TREE),
! 				  current_declspecs, $2.value);
  		  decl_attributes (&$$,
  				   chainon ($3, all_prefix_attributes), 0); }
  	;
*************** enumerator:
*** 1910,1945 ****
  	  identifier
  		{ $$ = build_enumerator ($1, NULL_TREE); }
  	| identifier '=' expr_no_commas
! 		{ $$ = build_enumerator ($1, $3); }
  	;
  
  typename:
  	  declspecs_nosc
  		{ pending_xref_error ();
! 		  $<ttype>$ = $1; }
  	  absdcl
! 		{ $$ = build_tree_list ($<ttype>2, $3); }
  	;
  
  absdcl:   /* an absolute declarator */
  	/* empty */
! 		{ $$ = NULL_TREE; }
  	| absdcl1
  	;
  
  absdcl_maybe_attribute:   /* absdcl maybe_attribute, but not just attributes */
  	/* empty */
! 		{ $$ = build_tree_list (build_tree_list (current_declspecs,
! 							 NULL_TREE),
! 					all_prefix_attributes); }
  	| absdcl1
! 		{ $$ = build_tree_list (build_tree_list (current_declspecs,
! 							 $1),
! 					all_prefix_attributes); }
  	| absdcl1_noea attributes
! 		{ $$ = build_tree_list (build_tree_list (current_declspecs,
! 							 $1),
! 					chainon ($2, all_prefix_attributes)); }
  	;
  
  absdcl1:  /* a nonempty absolute declarator */
--- 1843,1878 ----
  	  identifier
  		{ $$ = build_enumerator ($1, NULL_TREE); }
  	| identifier '=' expr_no_commas
! 		{ $$ = build_enumerator ($1, $3.value); }
  	;
  
  typename:
  	  declspecs_nosc
  		{ pending_xref_error ();
! 		  $<dsptype>$ = finish_declspecs ($1); }
  	  absdcl
! 		{ $$ = XOBNEW (&parser_obstack, struct c_type_name);
! 		  $$->specs = $<dsptype>2;
! 		  $$->declarator = $3; }
  	;
  
  absdcl:   /* an absolute declarator */
  	/* empty */
! 		{ $$ = build_id_declarator (NULL_TREE); }
  	| absdcl1
  	;
  
  absdcl_maybe_attribute:   /* absdcl maybe_attribute, but not just attributes */
  	/* empty */
! 		{ $$ = build_c_parm (current_declspecs, all_prefix_attributes,
! 				     build_id_declarator (NULL_TREE)); }
  	| absdcl1
! 		{ $$ = build_c_parm (current_declspecs, all_prefix_attributes,
! 				     $1); }
  	| absdcl1_noea attributes
! 		{ $$ = build_c_parm (current_declspecs,
! 				     chainon ($2, all_prefix_attributes),
! 				     $1); }
  	;
  
  absdcl1:  /* a nonempty absolute declarator */
*************** absdcl1_noea:
*** 1955,1992 ****
  
  absdcl1_ea:
  	  '*' maybe_type_quals_attrs
! 		{ $$ = make_pointer_declarator ($2, NULL_TREE); }
  	| '*' maybe_type_quals_attrs absdcl1_ea
  		{ $$ = make_pointer_declarator ($2, $3); }
  	;
  
  direct_absdcl1:
  	  '(' maybe_attribute absdcl1 ')'
! 		{ $$ = $2 ? tree_cons ($2, $3, NULL_TREE) : $3; }
  	| direct_absdcl1 '(' parmlist
! 		{ $$ = build_nt (CALL_EXPR, $1, $3, NULL_TREE); }
  	| direct_absdcl1 array_declarator
! 		{ $$ = set_array_declarator_type ($2, $1, 1); }
  	| '(' parmlist
! 		{ $$ = build_nt (CALL_EXPR, NULL_TREE, $2, NULL_TREE); }
  	| array_declarator
! 		{ $$ = set_array_declarator_type ($1, NULL_TREE, 1); }
  	;
  
  /* The [...] part of a declarator for an array type.  */
  
  array_declarator:
  	'[' maybe_type_quals_attrs expr_no_commas ']'
! 		{ $$ = build_array_declarator ($3, $2, 0, 0); }
  	| '[' maybe_type_quals_attrs ']'
! 		{ $$ = build_array_declarator (NULL_TREE, $2, 0, 0); }
  	| '[' maybe_type_quals_attrs '*' ']'
! 		{ $$ = build_array_declarator (NULL_TREE, $2, 0, 1); }
  	| '[' STATIC maybe_type_quals_attrs expr_no_commas ']'
! 		{ $$ = build_array_declarator ($4, $3, 1, 0); }
  	/* declspecs_nosc_nots is a synonym for type_quals_attrs.  */
  	| '[' declspecs_nosc_nots STATIC expr_no_commas ']'
! 		{ $$ = build_array_declarator ($4, $2, 1, 0); }
  	;
  
  /* A nonempty series of declarations and statements (possibly followed by
--- 1888,1928 ----
  
  absdcl1_ea:
  	  '*' maybe_type_quals_attrs
! 		{ $$ = make_pointer_declarator
! 		    ($2, build_id_declarator (NULL_TREE)); }
  	| '*' maybe_type_quals_attrs absdcl1_ea
  		{ $$ = make_pointer_declarator ($2, $3); }
  	;
  
  direct_absdcl1:
  	  '(' maybe_attribute absdcl1 ')'
! 		{ $$ = $2 ? build_attrs_declarator ($2, $3) : $3; }
  	| direct_absdcl1 '(' parmlist
! 		{ $$ = build_function_declarator ($3, $1); }
  	| direct_absdcl1 array_declarator
! 		{ $$ = set_array_declarator_inner ($2, $1, true); }
  	| '(' parmlist
! 		{ $$ = build_function_declarator
! 		    ($2, build_id_declarator (NULL_TREE)); }
  	| array_declarator
! 		{ $$ = set_array_declarator_inner
! 		    ($1, build_id_declarator (NULL_TREE), true); }
  	;
  
  /* The [...] part of a declarator for an array type.  */
  
  array_declarator:
  	'[' maybe_type_quals_attrs expr_no_commas ']'
! 		{ $$ = build_array_declarator ($3.value, $2, false, false); }
  	| '[' maybe_type_quals_attrs ']'
! 		{ $$ = build_array_declarator (NULL_TREE, $2, false, false); }
  	| '[' maybe_type_quals_attrs '*' ']'
! 		{ $$ = build_array_declarator (NULL_TREE, $2, false, true); }
  	| '[' STATIC maybe_type_quals_attrs expr_no_commas ']'
! 		{ $$ = build_array_declarator ($4.value, $3, true, false); }
  	/* declspecs_nosc_nots is a synonym for type_quals_attrs.  */
  	| '[' declspecs_nosc_nots STATIC expr_no_commas ']'
! 		{ $$ = build_array_declarator ($4.value, $2, true, false); }
  	;
  
  /* A nonempty series of declarations and statements (possibly followed by
*************** lineno_stmt_decl_or_labels:
*** 2048,2098 ****
  errstmt:  error ';'
  	;
  
- pushlevel:  /* empty */
- 		{ pushlevel (0);
- 		  clear_last_expr ();
- 		  add_scope_stmt (/*begin_p=*/1, /*partial_p=*/0);
- 		}
- 	;
- 
- poplevel:  /* empty */
-                 {
- @@ifobjc
- 		  if (c_dialect_objc ())
- 		    objc_clear_super_receiver ();
- @@end_ifobjc
- 		  $$ = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0);
- 		}
-         ;
- 
  /* Start and end blocks created for the new scopes of C99.  */
  c99_block_start: /* empty */
! 		{ if (flag_isoc99)
! 		    {
! 		      $$ = c_begin_compound_stmt ();
! 		      pushlevel (0);
! 		      clear_last_expr ();
! 		      add_scope_stmt (/*begin_p=*/1, /*partial_p=*/0);
! 		    }
! 		  else
! 		    $$ = NULL_TREE;
! 		}
! 	;
! 
! /* Productions using c99_block_start and c99_block_end will need to do what's
!    in compstmt: RECHAIN_STMTS ($1, COMPOUND_BODY ($1)); $$ = $2; where
!    $1 is the value of c99_block_start and $2 of c99_block_end.  */
! c99_block_end: /* empty */
!                 { if (flag_isoc99)
! 		    {
! 		      tree scope_stmt = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0);
! 		      $$ = poplevel (KEEP_MAYBE, 0, 0);
! 		      SCOPE_STMT_BLOCK (TREE_PURPOSE (scope_stmt))
! 			= SCOPE_STMT_BLOCK (TREE_VALUE (scope_stmt))
! 			= $$;
! 		    }
! 		  else
! 		    $$ = NULL_TREE; }
  	;
  
  /* Read zero or more forward-declarations for labels
--- 1984,1992 ----
  errstmt:  error ';'
  	;
  
  /* Start and end blocks created for the new scopes of C99.  */
  c99_block_start: /* empty */
! 		{ $$ = c_begin_compound_stmt (flag_isoc99); }
  	;
  
  /* Read zero or more forward-declarations for labels
*************** label_decl:
*** 2116,2122 ****
  		    {
  		      tree label = declare_label (TREE_VALUE (link));
  		      C_DECLARED_LABEL_FLAG (label) = 1;
! 		      add_decl_stmt (label);
  		    }
  		}
  	;
--- 2010,2016 ----
  		    {
  		      tree label = declare_label (TREE_VALUE (link));
  		      C_DECLARED_LABEL_FLAG (label) = 1;
! 		      add_stmt (build_stmt (DECL_EXPR, label));
  		    }
  		}
  	;
*************** label_decl:
*** 2125,2145 ****
     It causes syntax errors to ignore to the next openbrace.  */
  compstmt_or_error:
  	  compstmt
! 		{}
  	| error compstmt
  	;
  
! compstmt_start: '{' { compstmt_count++;
!                       $$ = c_begin_compound_stmt (); }
          ;
  
  compstmt_nostart: '}'
! 		{ $$ = convert (void_type_node, integer_zero_node); }
! 	| pushlevel maybe_label_decls compstmt_contents_nonempty '}' poplevel
! 		{ $$ = poplevel (KEEP_MAYBE, 0, 0);
! 		  SCOPE_STMT_BLOCK (TREE_PURPOSE ($5))
! 		    = SCOPE_STMT_BLOCK (TREE_VALUE ($5))
! 		    = $$; }
  	;
  
  compstmt_contents_nonempty:
--- 2019,2033 ----
     It causes syntax errors to ignore to the next openbrace.  */
  compstmt_or_error:
  	  compstmt
! 		{ add_stmt ($1); }
  	| error compstmt
  	;
  
! compstmt_start: '{' { $$ = c_begin_compound_stmt (true); }
          ;
  
  compstmt_nostart: '}'
! 	| maybe_label_decls compstmt_contents_nonempty '}'
  	;
  
  compstmt_contents_nonempty:
*************** compstmt_contents_nonempty:
*** 2149,2224 ****
  
  compstmt_primary_start:
  	'(' '{'
! 		{ if (last_tree == NULL)
  		    {
! 		      error ("braced-group within expression allowed only inside a function");
  		      YYERROR;
  		    }
! 		  /* We must force a BLOCK for this level
! 		     so that, if it is not expanded later,
! 		     there is a way to turn off the entire subtree of blocks
! 		     that are contained in it.  */
! 		  keep_next_level ();
! 		  compstmt_count++;
! 		  $$ = add_stmt (build_stmt (COMPOUND_STMT, last_tree));
! 		  last_expr_type = NULL_TREE;
  		}
          ;
  
  compstmt: compstmt_start compstmt_nostart
! 		{ RECHAIN_STMTS ($1, COMPOUND_BODY ($1));
! 		  last_expr_type = NULL_TREE;
!                   $$ = $1; }
! 	;
! 
! /* Value is number of statements counted as of the closeparen.  */
! simple_if:
! 	  if_prefix c99_block_lineno_labeled_stmt
!                 { c_finish_then (); }
! /* Make sure c_expand_end_cond is run once
!    for each call to c_expand_start_cond.
!    Otherwise a crash is likely.  */
! 	| if_prefix error
! 	;
! 
! if_prefix:
! 	  /* We must build the IF_STMT node before parsing its
! 	     condition so that STMT_LINENO refers to the line
! 	     containing the "if", and not the line containing
! 	     the close-parenthesis.
! 
! 	     c_begin_if_stmt returns the IF_STMT node, which
! 	     we later pass to c_expand_start_cond to fill
! 	     in the condition and other tidbits.  */
!           IF
!                 { $<ttype>$ = c_begin_if_stmt (); }
!             '(' expr ')'
! 		{ c_expand_start_cond (c_common_truthvalue_conversion ($4),
! 				       compstmt_count,$<ttype>2);
! 		  $<itype>$ = stmt_count;
! 		  if_stmt_locus = $<location>-1; }
!         ;
! 
! /* This is a subroutine of stmt.
!    It is used twice, once for valid DO statements
!    and once for catching errors in parsing the end test.  */
! do_stmt_start:
! 	  DO
! 		{ stmt_count++;
! 		  compstmt_count++;
! 		  c_in_iteration_stmt++;
! 		  $<ttype>$
! 		    = add_stmt (build_stmt (DO_STMT, NULL_TREE,
! 					    NULL_TREE));
! 		  /* In the event that a parse error prevents
! 		     parsing the complete do-statement, set the
! 		     condition now.  Otherwise, we can get crashes at
! 		     RTL-generation time.  */
! 		  DO_COND ($<ttype>$) = error_mark_node; }
! 	  c99_block_lineno_labeled_stmt WHILE
! 		{ $$ = $<ttype>2;
! 		  RECHAIN_STMTS ($$, DO_BODY ($$));
! 		  c_in_iteration_stmt--; }
  	;
  
  /* The forced readahead in here is because we might be at the end of a
--- 2037,2054 ----
  
  compstmt_primary_start:
  	'(' '{'
! 		{ if (cur_stmt_list == NULL)
  		    {
! 		      error ("braced-group within expression allowed "
! 			     "only inside a function");
  		      YYERROR;
  		    }
! 		  $$ = c_begin_stmt_expr ();
  		}
          ;
  
  compstmt: compstmt_start compstmt_nostart
! 		{ $$ = c_end_compound_stmt ($1, true); }
  	;
  
  /* The forced readahead in here is because we might be at the end of a
*************** save_location:
*** 2231,2518 ****
  		  $$ = input_location; }
  	;
  
! lineno_labeled_stmt:
! 	  lineno_stmt
! 	| lineno_label lineno_labeled_stmt
  	;
  
! /* Like lineno_labeled_stmt, but a block in C99.  */
  c99_block_lineno_labeled_stmt:
! 	  c99_block_start lineno_labeled_stmt c99_block_end
! 		{ if (flag_isoc99)
! 		    RECHAIN_STMTS ($1, COMPOUND_BODY ($1)); }
  	;
  
  lineno_stmt:
  	  save_location stmt
! 		{ if ($2)
! 		    {
! 		      STMT_LINENO ($2) = $1.line;
! 		      /* ??? We currently have no way of recording
! 			 the filename for a statement.  This probably
! 			 matters little in practice at the moment,
! 			 but I suspect that problems will occur when
! 			 doing inlining at the tree level.  */
! 		    }
  		}
  	;
  
  lineno_label:
  	  save_location label
! 		{ if ($2)
! 		    {
! 		      STMT_LINENO ($2) = $1.line;
! 		    }
! 		}
  	;
  
! select_or_iter_stmt:
! 	  simple_if ELSE
! 		{ c_expand_start_else ();
! 		  $<itype>1 = stmt_count; }
! 	  c99_block_lineno_labeled_stmt
!                 { c_finish_else ();
! 		  c_expand_end_cond ();
! 		  if (extra_warnings && stmt_count == $<itype>1)
! 		    warning ("empty body in an else-statement"); }
! 	| simple_if %prec IF
! 		{ c_expand_end_cond ();
! 		  /* This warning is here instead of in simple_if, because we
! 		     do not want a warning if an empty if is followed by an
! 		     else statement.  Increment stmt_count so we don't
! 		     give a second error if this is a nested `if'.  */
! 		  if (extra_warnings && stmt_count++ == $<itype>1)
! 		    warning ("%Hempty body in an if-statement",
!                              &if_stmt_locus); }
! /* Make sure c_expand_end_cond is run once
!    for each call to c_expand_start_cond.
!    Otherwise a crash is likely.  */
! 	| simple_if ELSE error
! 		{ c_expand_end_cond (); }
!        /* We must build the WHILE_STMT node before parsing its
! 	  condition so that STMT_LINENO refers to the line
! 	  containing the "while", and not the line containing
! 	  the close-parenthesis.
  
! 	  c_begin_while_stmt returns the WHILE_STMT node, which
! 	  we later pass to c_finish_while_stmt_cond to fill
! 	  in the condition and other tidbits.  */
! 	| WHILE
!                 { stmt_count++;
! 		  $<ttype>$ = c_begin_while_stmt (); }
! 	  '(' expr ')'
!                 { c_in_iteration_stmt++;
! 		  $4 = c_common_truthvalue_conversion ($4);
! 		  c_finish_while_stmt_cond
! 		    (c_common_truthvalue_conversion ($4), $<ttype>2);
! 		  $<ttype>$ = add_stmt ($<ttype>2); }
! 	  c99_block_lineno_labeled_stmt
!                 { c_in_iteration_stmt--;
! 		  RECHAIN_STMTS ($<ttype>6, WHILE_BODY ($<ttype>6)); }
! 	| do_stmt_start
! 	  '(' expr ')' ';'
!                 { DO_COND ($1) = c_common_truthvalue_conversion ($3); }
! 	| do_stmt_start error
! 		{ }
! 	| FOR
! 		{ $<ttype>$ = build_stmt (FOR_STMT, NULL_TREE, NULL_TREE,
! 					  NULL_TREE, NULL_TREE);
! 		  add_stmt ($<ttype>$); }
! 	  '(' for_init_stmt
! 		{ stmt_count++;
! 		  RECHAIN_STMTS ($<ttype>2, FOR_INIT_STMT ($<ttype>2)); }
! 	  xexpr ';'
!                 { if ($6)
! 		    FOR_COND ($<ttype>2)
! 		      = c_common_truthvalue_conversion ($6); }
! 	  xexpr ')'
!                 { c_in_iteration_stmt++;
! 		  FOR_EXPR ($<ttype>2) = $9; }
! 	  c99_block_lineno_labeled_stmt
!                 { RECHAIN_STMTS ($<ttype>2, FOR_BODY ($<ttype>2));
! 		  c_in_iteration_stmt--;}
! 	| SWITCH '(' expr ')'
! 		{ stmt_count++;
! 		  $<ttype>$ = c_start_case ($3);
! 		  c_in_case_stmt++; }
! 	  c99_block_lineno_labeled_stmt
!                 { c_finish_case ();
! 		  c_in_case_stmt--; }
  	;
  
  for_init_stmt:
  	  xexpr ';'
! 		{ add_stmt (build_stmt (EXPR_STMT, $1)); }
  	| decl
  		{ check_for_loop_decls (); }
  	;
  
! /* Parse a single real statement, not including any labels.  */
! stmt:
! 	  compstmt
! 		{ stmt_count++; $$ = $1; }
! 	| expr ';'
! 		{ stmt_count++;
! 		  $$ = c_expand_expr_stmt ($1); }
! 	| c99_block_start select_or_iter_stmt c99_block_end
! 		{ if (flag_isoc99)
! 		    RECHAIN_STMTS ($1, COMPOUND_BODY ($1));
! 		  $$ = NULL_TREE; }
  	| BREAK ';'
! 	        { stmt_count++;
! 		if (!(c_in_iteration_stmt || c_in_case_stmt))
! 		  {
! 		    error ("break statement not within loop or switch");
! 		    $$ = NULL_TREE;
! 		  }
! 		else
! 		  $$ = add_stmt (build_break_stmt ()); }
  	| CONTINUE ';'
!                 { stmt_count++;
! 		if (!c_in_iteration_stmt)
! 		  {
! 		    error ("continue statement not within a loop");
! 		    $$ = NULL_TREE;
! 		  }
! 		else
! 		  $$ = add_stmt (build_continue_stmt ()); }
  	| RETURN ';'
!                 { stmt_count++;
! 		  $$ = c_expand_return (NULL_TREE); }
  	| RETURN expr ';'
!                 { stmt_count++;
! 		  $$ = c_expand_return ($2); }
! 	| ASM_KEYWORD maybe_type_qual '(' expr ')' ';'
! 		{ stmt_count++;
! 		  $$ = simple_asm_stmt ($4); }
! 	/* This is the case with just output operands.  */
! 	| ASM_KEYWORD maybe_type_qual '(' expr ':' asm_operands ')' ';'
! 		{ stmt_count++;
! 		  $$ = build_asm_stmt ($2, $4, $6, NULL_TREE, NULL_TREE); }
! 	/* This is the case with input operands as well.  */
! 	| ASM_KEYWORD maybe_type_qual '(' expr ':' asm_operands ':'
! 	  asm_operands ')' ';'
! 		{ stmt_count++;
! 		  $$ = build_asm_stmt ($2, $4, $6, $8, NULL_TREE); }
! 	/* This is the case with clobbered registers as well.  */
! 	| ASM_KEYWORD maybe_type_qual '(' expr ':' asm_operands ':'
! 	  asm_operands ':' asm_clobbers ')' ';'
! 		{ stmt_count++;
! 		  $$ = build_asm_stmt ($2, $4, $6, $8, $10); }
  	| GOTO identifier ';'
! 		{ tree decl;
! 		  stmt_count++;
! 		  decl = lookup_label ($2);
! 		  if (decl != 0)
! 		    {
! 		      TREE_USED (decl) = 1;
! 		      $$ = add_stmt (build_stmt (GOTO_STMT, decl));
! 		    }
! 		  else
! 		    $$ = NULL_TREE;
! 		}
  	| GOTO '*' expr ';'
! 		{ if (pedantic)
! 		    pedwarn ("ISO C forbids `goto *expr;'");
! 		  stmt_count++;
! 		  $3 = convert (ptr_type_node, $3);
! 		  $$ = add_stmt (build_stmt (GOTO_STMT, $3)); }
  	| ';'
  		{ $$ = NULL_TREE; }
  @@ifobjc
  	| AT_THROW expr ';'
! 		{ stmt_count++;
! 		  $$ = objc_build_throw_stmt ($2);
! 		}
  	| AT_THROW ';'
! 		{ stmt_count++;
! 		  $$ = objc_build_throw_stmt (NULL_TREE);
! 		}
  	| objc_try_catch_stmt
! 		{ objc_build_finally_prologue (); }
! 	  objc_finally_block
! 		{ $$ = objc_build_try_catch_finally_stmt ($1, $3); }
! 	| AT_SYNCHRONIZED '(' expr ')'
! 		{ objc_build_synchronized_prologue ($3); }
! 	  compstmt
! 		{ $$ = objc_build_synchronized_epilogue (); }
  	;
  
! objc_try_catch_stmt:
! 	  objc_try_stmt
! 		{ objc_build_try_epilogue (1); }
! 	  objc_catch_list
! 		{ objc_build_catch_epilogue (); $$ = 1; }
! 	| objc_try_stmt
! 		{ objc_build_try_epilogue (0); $$ = 0; }
  	;
  
  
! objc_try_stmt:
! 	  AT_TRY
! 		{ objc_build_try_prologue (); }
! 	  compstmt
  	;
  
! objc_catch_list:
! 	  objc_catch_list objc_catch_block
! 	| objc_catch_block
  	;
  
! objc_catch_block:
! 	  AT_CATCH '(' parm ')'
! 		{ objc_build_catch_stmt ($3); }
! 	  compstmt
! 		{ stmt_count++; }
  	;
  
! objc_finally_block:
! 	  AT_FINALLY compstmt
! 	    { $$ = 1; }
! 	| /* NULL */
! 	    { $$ = 0; }
  @@end_ifobjc
  	;
  
  /* Any kind of label, including jump labels and case labels.
     ANSI C accepts labels only before statements, but we allow them
     also at the end of a compound statement.  */
  
  label:	  CASE expr_no_commas ':'
!                 { stmt_count++;
! 		  $$ = do_case ($2, NULL_TREE); }
  	| CASE expr_no_commas ELLIPSIS expr_no_commas ':'
!                 { stmt_count++;
! 		  $$ = do_case ($2, $4); }
  	| DEFAULT ':'
!                 { stmt_count++;
! 		  $$ = do_case (NULL_TREE, NULL_TREE); }
  	| identifier save_location ':' maybe_attribute
  		{ tree label = define_label ($2, $1);
- 		  stmt_count++;
  		  if (label)
  		    {
  		      decl_attributes (&label, $4, 0);
! 		      $$ = add_stmt (build_stmt (LABEL_STMT, label));
  		    }
  		  else
  		    $$ = NULL_TREE;
  		}
  	;
  
! /* Either a type-qualifier or nothing.  First thing in an `asm' statement.  */
  
! maybe_type_qual:
! 	/* empty */
  		{ $$ = NULL_TREE; }
! 	| TYPE_QUAL
! 		{ }
  	;
  
! xexpr:
  	/* empty */
! 		{ $$ = NULL_TREE; }
! 	| expr
  	;
  
  /* These are the operands other than the first string and colon
--- 2061,2391 ----
  		  $$ = input_location; }
  	;
  
! lineno_labels:
! 	  /* empty */
! 	| lineno_labels lineno_label
  	;
  
! /* A labeled statement.  In C99 it also generates an implicit block.  */
  c99_block_lineno_labeled_stmt:
! 	  c99_block_start lineno_labels lineno_stmt
!                 { $$ = c_end_compound_stmt ($1, flag_isoc99); }
  	;
  
  lineno_stmt:
  	  save_location stmt
! 		{
! 		  /* Two cases cannot and do not have line numbers associated:
! 		     If stmt is degenerate, such as "2;", then stmt is an
! 		     INTEGER_CST, which cannot hold line numbers.  But that's
! 		     ok because the statement will either be changed to a
! 		     MODIFY_EXPR during gimplification of the statement expr,
! 		     or discarded.  If stmt was compound, but without new
! 		     variables, we will have skipped the creation of a BIND
! 		     and will have a bare STATEMENT_LIST.  But that's ok
! 		     because (recursively) all of the component statments
! 		     should already have line numbers assigned.  */
! 		  if ($2 && EXPR_P ($2))
! 		    SET_EXPR_LOCATION ($2, $1);
  		}
  	;
  
  lineno_label:
  	  save_location label
! 		{ if ($2) SET_EXPR_LOCATION ($2, $1); }
  	;
  
! condition: save_location expr
! 		{ $$ = lang_hooks.truthvalue_conversion ($2.value);
! 		  if (EXPR_P ($$))
! 		    SET_EXPR_LOCATION ($$, $1); }
! 	;
  
! /* Implement -Wparenthesis by special casing IF statement directly nested
!    within IF statement.  This requires some amount of duplication of the
!    productions under c99_block_lineno_labeled_stmt in order to work out.
!    But it's still likely more maintainable than lots of state outside the
!    parser...  */
! 
! if_statement_1:
! 	c99_block_start lineno_labels if_statement
! 		{ $$ = c_end_compound_stmt ($1, flag_isoc99); }
! 	;
! 
! if_statement_2:
! 	  c99_block_start lineno_labels ';'
! 		{ if (extra_warnings)
! 		    add_stmt (build (NOP_EXPR, NULL_TREE, NULL_TREE));
! 		  $$ = c_end_compound_stmt ($1, flag_isoc99); }
! 	| c99_block_lineno_labeled_stmt
! 	;
! 
! if_statement:
! 	  IF c99_block_start save_location '(' condition ')'
! 	    if_statement_1 ELSE if_statement_2
! 		{ c_finish_if_stmt ($3, $5, $7, $9, true);
! 		  add_stmt (c_end_compound_stmt ($2, flag_isoc99)); }
! 	| IF c99_block_start save_location '(' condition ')'
! 	    if_statement_2 ELSE if_statement_2
! 		{ c_finish_if_stmt ($3, $5, $7, $9, false);
! 		  add_stmt (c_end_compound_stmt ($2, flag_isoc99)); }
! 	| IF c99_block_start save_location '(' condition ')'
! 	    if_statement_1				%prec IF
! 		{ c_finish_if_stmt ($3, $5, $7, NULL, true);
! 		  add_stmt (c_end_compound_stmt ($2, flag_isoc99)); }
! 	| IF c99_block_start save_location '(' condition ')'
! 	    if_statement_2				%prec IF
! 		{ c_finish_if_stmt ($3, $5, $7, NULL, false);
! 		  add_stmt (c_end_compound_stmt ($2, flag_isoc99)); }
! 	;
! 
! start_break: /* empty */
! 		{ $$ = c_break_label; c_break_label = NULL; }
! 	;
! 
! start_continue: /* empty */
! 		{ $$ = c_cont_label; c_cont_label = NULL; }
! 	;
! 
! while_statement:
! 	WHILE c99_block_start save_location '(' condition ')'
! 	start_break start_continue c99_block_lineno_labeled_stmt
! 		{ c_finish_loop ($3, $5, NULL, $9, c_break_label,
! 				 c_cont_label, true);
! 		  add_stmt (c_end_compound_stmt ($2, flag_isoc99));
! 		  c_break_label = $7; c_cont_label = $8; }
! 	;
! 
! do_statement:
! 	DO c99_block_start save_location start_break start_continue
! 	c99_block_lineno_labeled_stmt WHILE
! 		{ $<ttype>$ = c_break_label; c_break_label = $4; }
! 		{ $<ttype>$ = c_cont_label; c_cont_label = $5; }
! 	'(' condition ')' ';'
!                 { c_finish_loop ($3, $11, NULL, $6, $<ttype>8,
! 				 $<ttype>9, false);
! 		  add_stmt (c_end_compound_stmt ($2, flag_isoc99)); }
! 	;
! 
! xexpr:
! 	/* empty */
! 		{ $$ = NULL_TREE; }
! 	| expr
! 		{ $$ = $1.value; }
  	;
  
  for_init_stmt:
  	  xexpr ';'
! 		{ c_finish_expr_stmt ($1); }
  	| decl
  		{ check_for_loop_decls (); }
  	;
  
! for_cond_expr: save_location xexpr
! 		{ if ($2)
! 		    {
! 		      $$ = lang_hooks.truthvalue_conversion ($2);
! 		      if (EXPR_P ($$))
! 			SET_EXPR_LOCATION ($$, $1);
! 		    }
! 		  else
! 		    $$ = NULL;
! 		}
! 	;
! 
! for_incr_expr: xexpr
! 		{ $$ = c_process_expr_stmt ($1); }
! 	;
! 
! for_statement:
! 	FOR c99_block_start '(' for_init_stmt
! 	save_location for_cond_expr ';' for_incr_expr ')'
! 	start_break start_continue c99_block_lineno_labeled_stmt
! 		{ c_finish_loop ($5, $6, $8, $12, c_break_label,
! 				 c_cont_label, true);
! 		  add_stmt (c_end_compound_stmt ($2, flag_isoc99));
! 		  c_break_label = $10; c_cont_label = $11; }
! 	;
! 
! switch_statement:
! 	SWITCH c99_block_start '(' expr ')'
! 		{ $<ttype>$ = c_start_case ($4.value); }
! 	start_break c99_block_lineno_labeled_stmt
!                 { c_finish_case ($8);
! 		  if (c_break_label)
! 		    add_stmt (build (LABEL_EXPR, void_type_node,
! 				     c_break_label));
! 		  c_break_label = $7;
! 		  add_stmt (c_end_compound_stmt ($2, flag_isoc99)); }
! 	;
! 
! /* Parse a single real statement, not including any labels or compounds.  */
! stmt_nocomp:
! 	  expr ';'
! 		{ $$ = c_finish_expr_stmt ($1.value); }
! 	| if_statement
! 		{ $$ = NULL_TREE; }
! 	| while_statement
! 		{ $$ = NULL_TREE; }
! 	| do_statement
! 		{ $$ = NULL_TREE; }
! 	| for_statement
! 		{ $$ = NULL_TREE; }
! 	| switch_statement
! 		{ $$ = NULL_TREE; }
  	| BREAK ';'
! 	        { $$ = c_finish_bc_stmt (&c_break_label, true); }
  	| CONTINUE ';'
!                 { $$ = c_finish_bc_stmt (&c_cont_label, false); }
  	| RETURN ';'
!                 { $$ = c_finish_return (NULL_TREE); }
  	| RETURN expr ';'
!                 { $$ = c_finish_return ($2.value); }
! 	| asm_stmt
  	| GOTO identifier ';'
! 		{ $$ = c_finish_goto_label ($2); }
  	| GOTO '*' expr ';'
! 		{ $$ = c_finish_goto_ptr ($3.value); }
  	| ';'
  		{ $$ = NULL_TREE; }
  @@ifobjc
  	| AT_THROW expr ';'
! 		{ $$ = objc_build_throw_stmt ($2.value); }
  	| AT_THROW ';'
! 		{ $$ = objc_build_throw_stmt (NULL_TREE); }
  	| objc_try_catch_stmt
! 		{ $$ = NULL_TREE; }
! 	| AT_SYNCHRONIZED save_location '(' expr ')' compstmt
! 		{ objc_build_synchronized ($2, $4.value, $6); $$ = NULL_TREE; }
  	;
  
! objc_catch_prefix:
! 	AT_CATCH '(' parm ')'
! 		{ objc_begin_catch_clause (grokparm ($3)); }
  	;
  
+ objc_catch_clause:
+ 	  objc_catch_prefix '{' compstmt_nostart
+ 		{ objc_finish_catch_clause (); }
+ 	| objc_catch_prefix '{' error '}'
+ 		{ objc_finish_catch_clause (); }
+ 	;
  
! objc_opt_catch_list:
! 	  /* empty */
! 	| objc_opt_catch_list objc_catch_clause
  	;
  
! objc_try_catch_clause:
! 	AT_TRY save_location compstmt
! 		{ objc_begin_try_stmt ($2, $3); }
! 	objc_opt_catch_list
  	;
  
! objc_finally_clause:
! 	AT_FINALLY save_location compstmt
! 		{ objc_build_finally_clause ($2, $3); }
  	;
  
! objc_try_catch_stmt:
! 	  objc_try_catch_clause
! 		{ objc_finish_try_stmt (); }
! 	| objc_try_catch_clause objc_finally_clause
! 		{ objc_finish_try_stmt (); }
  @@end_ifobjc
  	;
  
+ /* Parse a single or compound real statement, not including any labels.  */
+ stmt:
+ 	  compstmt
+ 		{ add_stmt ($1); $$ = NULL_TREE; }
+ 	| stmt_nocomp
+ 	;
+ 
  /* Any kind of label, including jump labels and case labels.
     ANSI C accepts labels only before statements, but we allow them
     also at the end of a compound statement.  */
  
  label:	  CASE expr_no_commas ':'
!                 { $$ = do_case ($2.value, NULL_TREE); }
  	| CASE expr_no_commas ELLIPSIS expr_no_commas ':'
!                 { $$ = do_case ($2.value, $4.value); }
  	| DEFAULT ':'
!                 { $$ = do_case (NULL_TREE, NULL_TREE); }
  	| identifier save_location ':' maybe_attribute
  		{ tree label = define_label ($2, $1);
  		  if (label)
  		    {
  		      decl_attributes (&label, $4, 0);
! 		      $$ = add_stmt (build_stmt (LABEL_EXPR, label));
  		    }
  		  else
  		    $$ = NULL_TREE;
  		}
  	;
  
! /* Asm expressions and statements */
  
! /* simple_asm_expr is used in restricted contexts, where a full
!    expression with inputs and outputs does not make sense.  */
! simple_asm_expr:
! 	ASM_KEYWORD stop_string_translation
! 	      '(' asm_string ')' start_string_translation
! 		{ $$ = $4; }
! 	;
! 
! /* maybeasm: used for assembly names for declarations */
! maybeasm:
! 	  /* empty */
  		{ $$ = NULL_TREE; }
! 	| simple_asm_expr
  	;
  
! /* asmdef: asm() outside a function body.  */
! asmdef:
! 	simple_asm_expr ';'
! 		{ assemble_asm ($1); }
!         | ASM_KEYWORD error start_string_translation ';'
!                 {}
! 	;
! 
! /* Full-blown asm statement with inputs, outputs, clobbers, and
!    volatile tag allowed.  */
! asm_stmt:
! 	ASM_KEYWORD maybe_volatile stop_string_translation
! 	        '(' asm_argument ')' start_string_translation ';'
! 		{ $$ = build_asm_stmt ($2, $5); }
! 	;
! 
! asm_argument:
! 	/* no operands */
! 	asm_string
! 		{ $$ = build_asm_expr ($1, 0, 0, 0, true); }
! 	/* output operands */
! 	| asm_string ':' asm_operands
! 		{ $$ = build_asm_expr ($1, $3, 0, 0, false); }
! 	/* output and input operands */
! 	| asm_string ':' asm_operands ':' asm_operands
! 		{ $$ = build_asm_expr ($1, $3, $5, 0, false); }
! 	/* output and input operands and clobbers */
! 	| asm_string ':' asm_operands ':' asm_operands ':' asm_clobbers
! 		{ $$ = build_asm_expr ($1, $3, $5, $7, false); }
! 	;
! 
! /* Either 'volatile' or nothing.  First thing in an `asm' statement.  */
! 
! maybe_volatile:
  	/* empty */
! 		{ $$ = 0; }
! 	| TYPE_QUAL
! 		{ if ($1 != ridpointers[RID_VOLATILE])
! 		    {
! 		      warning ("%E qualifier ignored on asm", $1);
! 		      $$ = 0;
! 		    }
! 		  else
! 		    $$ = $1;
! 		}
  	;
  
  /* These are the operands other than the first string and colon
*************** nonnull_asm_operands:
*** 2529,2548 ****
  	;
  
  asm_operand:
! 	  STRING '(' expr ')'
! 		{ $$ = build_tree_list (build_tree_list (NULL_TREE, $1), $3); }
! 	| '[' identifier ']' STRING '(' expr ')'
  		{ $2 = build_string (IDENTIFIER_LENGTH ($2),
  				     IDENTIFIER_POINTER ($2));
! 		  $$ = build_tree_list (build_tree_list ($2, $4), $6); }
  	;
  
  asm_clobbers:
! 	  STRING
  		{ $$ = tree_cons (NULL_TREE, $1, NULL_TREE); }
! 	| asm_clobbers ',' STRING
  		{ $$ = tree_cons (NULL_TREE, $3, $1); }
  	;
  
  /* This is what appears inside the parens in a function declarator.
     Its value is a list of ..._TYPE nodes.  Attributes must appear here
--- 2402,2446 ----
  	;
  
  asm_operand:
! 	  asm_string start_string_translation '(' expr ')'
! 	    stop_string_translation
! 		{ $$ = build_tree_list (build_tree_list (NULL_TREE, $1),
! 					$4.value); }
! 	| '[' identifier ']' asm_string start_string_translation
! 	  '(' expr ')' stop_string_translation
  		{ $2 = build_string (IDENTIFIER_LENGTH ($2),
  				     IDENTIFIER_POINTER ($2));
! 		  $$ = build_tree_list (build_tree_list ($2, $4), $7.value); }
  	;
  
  asm_clobbers:
! 	  asm_string
  		{ $$ = tree_cons (NULL_TREE, $1, NULL_TREE); }
! 	| asm_clobbers ',' asm_string
  		{ $$ = tree_cons (NULL_TREE, $3, $1); }
  	;
+ 
+ /* Strings in 'asm' must be narrow strings.  */
+ asm_string:
+ 	  STRING
+ 		{ if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE ($1)))
+ 		      != char_type_node)
+ 		    {
+ 		      error ("wide string literal in %<asm%>");
+ 		      $$ = build_string (1, "");
+ 		    }
+ 		  else
+ 		    $$ = $1; }
+ 	;
+ 
+ stop_string_translation:
+         { c_lex_string_translate = 0; }
+         ;
+ 
+ start_string_translation:
+         { c_lex_string_translate = 1; }
+         ;
+ 
  
  /* This is what appears inside the parens in a function declarator.
     Its value is a list of ..._TYPE nodes.  Attributes must appear here
*************** asm_clobbers:
*** 2551,2561 ****
     "void bar (int (__attribute__((__mode__(SI))) int foo));".  */
  parmlist:
  	  maybe_attribute
! 		{ pushlevel (0);
  		  declare_parm_level (); }
  	  parmlist_1
  		{ $$ = $3;
! 		  poplevel (0, 0, 0); }
  	;
  
  parmlist_1:
--- 2449,2459 ----
     "void bar (int (__attribute__((__mode__(SI))) int foo));".  */
  parmlist:
  	  maybe_attribute
! 		{ push_scope ();
  		  declare_parm_level (); }
  	  parmlist_1
  		{ $$ = $3;
! 		  pop_scope (); }
  	;
  
  parmlist_1:
*************** parmlist_1:
*** 2568,2599 ****
  	  parmlist_1
  		{ $$ = $6; }
  	| error ')'
! 		{ $$ = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); }
  	;
  
  /* This is what appears inside the parens in a function declarator.
!    Is value is represented in the format that grokdeclarator expects.  */
  parmlist_2:  /* empty */
! 		{ $$ = get_parm_info (0); }
  	| ELLIPSIS
! 		{ $$ = get_parm_info (0);
! 		  /* Gcc used to allow this as an extension.  However, it does
! 		     not work for all targets, and thus has been disabled.
! 		     Also, since func (...) and func () are indistinguishable,
! 		     it caused problems with the code in expand_builtin which
! 		     tries to verify that BUILT_IN_NEXT_ARG is being used
! 		     correctly.  */
! 		  error ("ISO C requires a named argument before `...'");
! 		  parsing_iso_function_signature = true;
  		}
  	| parms
! 		{ $$ = get_parm_info (1);
! 		  parsing_iso_function_signature = true;
! 		}
  	| parms ',' ELLIPSIS
! 		{ $$ = get_parm_info (0);
! 		  parsing_iso_function_signature = true;
! 		}
  	;
  
  parms:
--- 2466,2499 ----
  	  parmlist_1
  		{ $$ = $6; }
  	| error ')'
! 		{ $$ = XOBNEW (&parser_obstack, struct c_arg_info);
! 		  $$->parms = 0;
! 		  $$->tags = 0;
! 		  $$->types = 0;
! 		  $$->others = 0; }
  	;
  
  /* This is what appears inside the parens in a function declarator.
!    Its value is represented in the format that grokdeclarator expects.  */
  parmlist_2:  /* empty */
! 		{ $$ = XOBNEW (&parser_obstack, struct c_arg_info);
! 		  $$->parms = 0;
! 		  $$->tags = 0;
! 		  $$->types = 0;
! 		  $$->others = 0; }
  	| ELLIPSIS
! 		{ $$ = XOBNEW (&parser_obstack, struct c_arg_info);
! 		  $$->parms = 0;
! 		  $$->tags = 0;
! 		  $$->others = 0;
! 		  /* Suppress -Wold-style-definition for this case.  */
! 		  $$->types = error_mark_node;
! 		  error ("ISO C requires a named argument before %<...%>");
  		}
  	| parms
! 		{ $$ = get_parm_info (/*ellipsis=*/false); }
  	| parms ',' ELLIPSIS
! 		{ $$ = get_parm_info (/*ellipsis=*/true); }
  	;
  
  parms:
*************** parms:
*** 2607,2628 ****
     as found in a parmlist.  */
  parm:
  	  declspecs_ts setspecs parm_declarator maybe_attribute
! 		{ $$ = build_tree_list (build_tree_list (current_declspecs,
! 							 $3),
! 					chainon ($4, all_prefix_attributes));
  		  POP_DECLSPEC_STACK; }
  	| declspecs_ts setspecs notype_declarator maybe_attribute
! 		{ $$ = build_tree_list (build_tree_list (current_declspecs,
! 							 $3),
! 					chainon ($4, all_prefix_attributes));
  		  POP_DECLSPEC_STACK; }
  	| declspecs_ts setspecs absdcl_maybe_attribute
  		{ $$ = $3;
  		  POP_DECLSPEC_STACK; }
  	| declspecs_nots setspecs notype_declarator maybe_attribute
! 		{ $$ = build_tree_list (build_tree_list (current_declspecs,
! 							 $3),
! 					chainon ($4, all_prefix_attributes));
  		  POP_DECLSPEC_STACK; }
  
  	| declspecs_nots setspecs absdcl_maybe_attribute
--- 2507,2525 ----
     as found in a parmlist.  */
  parm:
  	  declspecs_ts setspecs parm_declarator maybe_attribute
! 		{ $$ = build_c_parm (current_declspecs,
! 				     chainon ($4, all_prefix_attributes), $3);
  		  POP_DECLSPEC_STACK; }
  	| declspecs_ts setspecs notype_declarator maybe_attribute
! 		{ $$ = build_c_parm (current_declspecs,
! 				     chainon ($4, all_prefix_attributes), $3);
  		  POP_DECLSPEC_STACK; }
  	| declspecs_ts setspecs absdcl_maybe_attribute
  		{ $$ = $3;
  		  POP_DECLSPEC_STACK; }
  	| declspecs_nots setspecs notype_declarator maybe_attribute
! 		{ $$ = build_c_parm (current_declspecs,
! 				     chainon ($4, all_prefix_attributes), $3);
  		  POP_DECLSPEC_STACK; }
  
  	| declspecs_nots setspecs absdcl_maybe_attribute
*************** parm:
*** 2634,2655 ****
     stack.  */
  firstparm:
  	  declspecs_ts_nosa setspecs_fp parm_declarator maybe_attribute
! 		{ $$ = build_tree_list (build_tree_list (current_declspecs,
! 							 $3),
! 					chainon ($4, all_prefix_attributes));
  		  POP_DECLSPEC_STACK; }
  	| declspecs_ts_nosa setspecs_fp notype_declarator maybe_attribute
! 		{ $$ = build_tree_list (build_tree_list (current_declspecs,
! 							 $3),
! 					chainon ($4, all_prefix_attributes));
  		  POP_DECLSPEC_STACK; }
  	| declspecs_ts_nosa setspecs_fp absdcl_maybe_attribute
  		{ $$ = $3;
  		  POP_DECLSPEC_STACK; }
  	| declspecs_nots_nosa setspecs_fp notype_declarator maybe_attribute
! 		{ $$ = build_tree_list (build_tree_list (current_declspecs,
! 							 $3),
! 					chainon ($4, all_prefix_attributes));
  		  POP_DECLSPEC_STACK; }
  
  	| declspecs_nots_nosa setspecs_fp absdcl_maybe_attribute
--- 2531,2549 ----
     stack.  */
  firstparm:
  	  declspecs_ts_nosa setspecs_fp parm_declarator maybe_attribute
! 		{ $$ = build_c_parm (current_declspecs,
! 				     chainon ($4, all_prefix_attributes), $3);
  		  POP_DECLSPEC_STACK; }
  	| declspecs_ts_nosa setspecs_fp notype_declarator maybe_attribute
! 		{ $$ = build_c_parm (current_declspecs,
! 				     chainon ($4, all_prefix_attributes), $3);
  		  POP_DECLSPEC_STACK; }
  	| declspecs_ts_nosa setspecs_fp absdcl_maybe_attribute
  		{ $$ = $3;
  		  POP_DECLSPEC_STACK; }
  	| declspecs_nots_nosa setspecs_fp notype_declarator maybe_attribute
! 		{ $$ = build_c_parm (current_declspecs,
! 				     chainon ($4, all_prefix_attributes), $3);
  		  POP_DECLSPEC_STACK; }
  
  	| declspecs_nots_nosa setspecs_fp absdcl_maybe_attribute
*************** setspecs_fp:
*** 2668,2694 ****
     Its value is a list of ..._TYPE nodes or a list of identifiers.  */
  parmlist_or_identifiers:
  	  maybe_attribute
! 		{ pushlevel (0);
  		  declare_parm_level (); }
  	  parmlist_or_identifiers_1
  		{ $$ = $3;
! 		  poplevel (0, 0, 0); }
  	;
  
  parmlist_or_identifiers_1:
  	  parmlist_1
  	| identifiers ')'
! 		{ tree t;
! 		  for (t = $1; t; t = TREE_CHAIN (t))
! 		    if (TREE_VALUE (t) == NULL_TREE)
! 		      error ("`...' in old-style identifier list");
! 		  $$ = tree_cons (NULL_TREE, NULL_TREE, $1);
  
  		  /* Make sure we have a parmlist after attributes.  */
! 		  if ($<ttype>-1 != 0
! 		      && (TREE_CODE ($$) != TREE_LIST
! 			  || TREE_PURPOSE ($$) == 0
! 			  || TREE_CODE (TREE_PURPOSE ($$)) != PARM_DECL))
  		    YYERROR1;
  		}
  	;
--- 2562,2585 ----
     Its value is a list of ..._TYPE nodes or a list of identifiers.  */
  parmlist_or_identifiers:
  	  maybe_attribute
! 		{ push_scope ();
  		  declare_parm_level (); }
  	  parmlist_or_identifiers_1
  		{ $$ = $3;
! 		  pop_scope (); }
  	;
  
  parmlist_or_identifiers_1:
  	  parmlist_1
  	| identifiers ')'
! 		{ $$ = XOBNEW (&parser_obstack, struct c_arg_info);
! 		  $$->parms = 0;
! 		  $$->tags = 0;
! 		  $$->types = $1;
! 		  $$->others = 0;
  
  		  /* Make sure we have a parmlist after attributes.  */
! 		  if ($<ttype>-1 != 0)
  		    YYERROR1;
  		}
  	;
*************** identifiers_or_typenames:
*** 2711,2717 ****
  
  extension:
  	EXTENSION
! 		{ $$ = SAVE_EXT_FLAGS();
  		  pedantic = 0;
  		  warn_pointer_arith = 0;
  		  warn_traditional = 0;
--- 2602,2608 ----
  
  extension:
  	EXTENSION
! 		{ $$ = SAVE_EXT_FLAGS ();
  		  pedantic = 0;
  		  warn_pointer_arith = 0;
  		  warn_traditional = 0;
*************** objcdef:
*** 2727,2742 ****
  	| aliasdecl
  	| protocoldef
  	| methoddef
! 	| END
  		{
! 		  if (objc_implementation_context)
!                     {
! 		      finish_class (objc_implementation_context);
! 		      objc_ivar_chain = NULL_TREE;
! 		      objc_implementation_context = NULL_TREE;
! 		    }
! 		  else
! 		    warning ("`@end' must appear in an implementation context");
  		}
  	;
  
--- 2618,2626 ----
  	| aliasdecl
  	| protocoldef
  	| methoddef
! 	| AT_END
  		{
! 		  objc_finish_implementation ();
  		}
  	;
  
*************** identifier_list:
*** 2749,2762 ****
  	;
  
  classdecl:
! 	  CLASS identifier_list ';'
  		{
  		  objc_declare_class ($2);
  		}
  	;
  
  aliasdecl:
! 	  ALIAS identifier identifier ';'
  		{
  		  objc_declare_alias ($2, $3);
  		}
--- 2633,2646 ----
  	;
  
  classdecl:
! 	  AT_CLASS identifier_list ';'
  		{
  		  objc_declare_class ($2);
  		}
  	;
  
  aliasdecl:
! 	  AT_ALIAS identifier identifier ';'
  		{
  		  objc_declare_alias ($2, $3);
  		}
*************** class_ivars:
*** 2773,2844 ****
  	;
  
  classdef:
! 	  INTERFACE identifier superclass protocolrefs
  		{
! 		  objc_interface_context = objc_ivar_context
! 		    = start_class (CLASS_INTERFACE_TYPE, $2, $3, $4);
!                   objc_public_flag = 0;
  		}
  	  class_ivars
  		{
!                   continue_class (objc_interface_context);
  		}
! 	  methodprotolist END
  		{
! 		  finish_class (objc_interface_context);
! 		  objc_interface_context = NULL_TREE;
  		}
  
! 	| IMPLEMENTATION identifier superclass
  		{
! 		  objc_implementation_context = objc_ivar_context
! 		    = start_class (CLASS_IMPLEMENTATION_TYPE, $2, $3, NULL_TREE);
!                   objc_public_flag = 0;
  		}
  	  class_ivars
  		{
!                   objc_ivar_chain
! 		    = continue_class (objc_implementation_context);
  		}
  
! 	| INTERFACE identifier '(' identifier ')' protocolrefs
  		{
! 		  objc_interface_context
! 		    = start_class (CATEGORY_INTERFACE_TYPE, $2, $4, $6);
!                   continue_class (objc_interface_context);
  		}
! 	  methodprotolist END
  		{
! 		  finish_class (objc_interface_context);
! 		  objc_interface_context = NULL_TREE;
  		}
  
! 	| IMPLEMENTATION identifier '(' identifier ')'
  		{
! 		  objc_implementation_context
! 		    = start_class (CATEGORY_IMPLEMENTATION_TYPE, $2, $4, NULL_TREE);
!                   objc_ivar_chain
! 		    = continue_class (objc_implementation_context);
  		}
  	;
  
  protocoldef:
! 	  PROTOCOL identifier protocolrefs
  		{
  		  objc_pq_context = 1;
! 		  objc_interface_context
! 		    = start_protocol(PROTOCOL_INTERFACE_TYPE, $2, $3);
  		}
! 	  methodprotolist END
  		{
  		  objc_pq_context = 0;
! 		  finish_protocol(objc_interface_context);
! 		  objc_interface_context = NULL_TREE;
  		}
  	/* The @protocol forward-declaration production introduces a
  	   reduce/reduce conflict on ';', which should be resolved in
  	   favor of the production 'identifier_list -> identifier'.  */
! 	| PROTOCOL identifier_list ';'
  		{
  		  objc_declare_protocols ($2);
  		}
--- 2657,2714 ----
  	;
  
  classdef:
! 	  AT_INTERFACE identifier superclass protocolrefs
  		{
! 		  objc_start_class_interface ($2, $3, $4);
  		}
  	  class_ivars
  		{
! 		  objc_continue_interface ();
  		}
! 	  methodprotolist AT_END
  		{
! 		  objc_finish_interface ();
  		}
  
! 	| AT_IMPLEMENTATION identifier superclass
  		{
! 		  objc_start_class_implementation ($2, $3);
  		}
  	  class_ivars
  		{
! 		  objc_continue_implementation ();
  		}
  
! 	| AT_INTERFACE identifier '(' identifier ')' protocolrefs
  		{
! 		  objc_start_category_interface ($2, $4, $6);
  		}
! 	  methodprotolist AT_END
  		{
! 		  objc_finish_interface ();
  		}
  
! 	| AT_IMPLEMENTATION identifier '(' identifier ')'
  		{
! 		  objc_start_category_implementation ($2, $4);
  		}
  	;
  
  protocoldef:
! 	  AT_PROTOCOL identifier protocolrefs
  		{
  		  objc_pq_context = 1;
! 		  objc_start_protocol ($2, $3);
  		}
! 	  methodprotolist AT_END
  		{
  		  objc_pq_context = 0;
! 		  objc_finish_interface ();
  		}
  	/* The @protocol forward-declaration production introduces a
  	   reduce/reduce conflict on ';', which should be resolved in
  	   favor of the production 'identifier_list -> identifier'.  */
! 	| AT_PROTOCOL identifier_list ';'
  		{
  		  objc_declare_protocols ($2);
  		}
*************** non_empty_protocolrefs:
*** 2863,2971 ****
  	;
  
  ivar_decl_list:
!           ivar_decl_list visibility_spec ivar_decls
!         | ivar_decls
          ;
  
  visibility_spec:
! 	  PRIVATE { objc_public_flag = 2; }
! 	| PROTECTED { objc_public_flag = 0; }
! 	| PUBLIC { objc_public_flag = 1; }
  	;
  
  ivar_decls:
!           /* empty */
! 		{
!                   $$ = NULL_TREE;
!                 }
  	| ivar_decls ivar_decl ';'
  	| ivar_decls ';'
  		{
!                   if (pedantic)
  		    pedwarn ("extra semicolon in struct or union specified");
!                 }
  	;
  
- 
- /* There is a shift-reduce conflict here, because `components' may
-    start with a `typename'.  It happens that shifting (the default resolution)
-    does the right thing, because it treats the `typename' as part of
-    a `typed_typespecs'.
- 
-    It is possible that this same technique would allow the distinction
-    between `notype_initdecls' and `initdecls' to be eliminated.
-    But I am being cautious and not trying it.  */
- 
  ivar_decl:
! 	declspecs_nosc_ts setspecs ivars
! 	        { $$ = $3;
! 		  POP_DECLSPEC_STACK; }
! 	| declspecs_nosc_nots setspecs ivars
! 		{ $$ = $3;
! 		  POP_DECLSPEC_STACK; }
! 	| error
! 		{ $$ = NULL_TREE; }
! 	;
  
! ivars:
! 	  /* empty */
! 		{ $$ = NULL_TREE; }
! 	| ivar_declarator
! 	| ivars ',' maybe_resetattrs ivar_declarator
  	;
  
! ivar_declarator:
! 	  declarator
! 		{
! 		  $$ = add_instance_variable (objc_ivar_context,
! 					      objc_public_flag,
! 					      $1, current_declspecs,
! 					      NULL_TREE);
!                 }
! 	| declarator ':' expr_no_commas
! 		{
! 		  $$ = add_instance_variable (objc_ivar_context,
! 					      objc_public_flag,
! 					      $1, current_declspecs, $3);
!                 }
! 	| ':' expr_no_commas
  		{
! 		  $$ = add_instance_variable (objc_ivar_context,
! 					      objc_public_flag,
! 					      NULL_TREE,
! 					      current_declspecs, $2);
!                 }
  	;
  
  methodtype:
  	  '+'
- 		{ objc_inherit_code = CLASS_METHOD_DECL; }
  	| '-'
- 		{ objc_inherit_code = INSTANCE_METHOD_DECL; }
  	;
  
  methoddef:
  	  methodtype
  		{
  		  objc_pq_context = 1;
- 		  if (!objc_implementation_context)
- 		    fatal_error ("method definition not in class context");
  		}
! 	  methoddecl
  		{
  		  objc_pq_context = 0;
! 		  objc_add_method (objc_implementation_context,
! 				   $3,
! 				   objc_inherit_code == CLASS_METHOD_DECL);
! 		  start_method_def ($3);
! 		}
! 	  optarglist
! 		{
! 		  continue_method_def ();
  		}
  	  compstmt_or_error
  		{
! 		  finish_method_def ();
  		}
  	;
  
--- 2733,2799 ----
  	;
  
  ivar_decl_list:
! 	  /* empty */
!         | ivar_decl_list visibility_spec ivar_decls
          ;
  
  visibility_spec:
! 	  /* empty */
! 	| AT_PRIVATE { objc_set_visibility (2); }
! 	| AT_PROTECTED { objc_set_visibility (0); }
! 	| AT_PUBLIC { objc_set_visibility (1); }
  	;
  
  ivar_decls:
! 	  /* empty */
  	| ivar_decls ivar_decl ';'
  	| ivar_decls ';'
  		{
! 		  if (pedantic)
  		    pedwarn ("extra semicolon in struct or union specified");
! 		}
  	;
  
  ivar_decl:
! 	component_decl
! 		{
! 		  /* Comma-separated ivars are chained together in
! 		     reverse order; add them one by one.  */
! 		  tree ivar = nreverse ($1);
  
! 		  for (; ivar; ivar = TREE_CHAIN (ivar))
! 		    objc_add_instance_variable (copy_node (ivar));
! 		}
  	;
  
! opt_semi:
! 	  /* NULL */
! 	| ';'
  		{
! 		  if (pedantic)
! 		    pedwarn ("extra semicolon in method definition specified");
! 		}
  	;
  
  methodtype:
  	  '+'
  	| '-'
  	;
  
  methoddef:
  	  methodtype
  		{
+ 		  objc_set_method_type ($1);
  		  objc_pq_context = 1;
  		}
! 	  methoddecl opt_semi
  		{
  		  objc_pq_context = 0;
! 		  objc_start_method_definition ($3);
  		}
  	  compstmt_or_error
  		{
! 		  objc_finish_method_definition (current_function_decl);
  		}
  	;
  
*************** semi_or_error:
*** 2987,2992 ****
--- 2815,2821 ----
  methodproto:
  	  methodtype
  		{
+ 		  objc_set_method_type ($1);
  		  /* Remember protocol qualifiers in prototypes.  */
  		  objc_pq_context = 1;
  		}
*************** methodproto:
*** 2994,3102 ****
  		{
  		  /* Forget protocol qualifiers here.  */
  		  objc_pq_context = 0;
! 		  objc_add_method (objc_interface_context,
! 				   $3,
! 				   objc_inherit_code == CLASS_METHOD_DECL);
  		}
  	  semi_or_error
  	;
  
  methoddecl:
! 	  '(' typename ')' unaryselector
  		{
! 		  $$ = build_method_decl (objc_inherit_code, $2, $4, NULL_TREE);
  		}
  
  	| unaryselector
  		{
! 		  $$ = build_method_decl (objc_inherit_code, NULL_TREE, $1, NULL_TREE);
  		}
  
! 	| '(' typename ')' keywordselector optparmlist
  		{
! 		  $$ = build_method_decl (objc_inherit_code, $2, $4, $5);
  		}
  
  	| keywordselector optparmlist
  		{
! 		  $$ = build_method_decl (objc_inherit_code, NULL_TREE, $1, $2);
  		}
  	;
  
! /* "optarglist" assumes that start_method_def has already been called...
!    if it is not, the "xdecls" will not be placed in the proper scope */
! 
! optarglist:
! 	  /* empty */
! 	| ';' myxdecls
! 	;
! 
! /* to get around the following situation: "int foo (int a) int b; {}" that
!    is synthesized when parsing "- a:a b:b; id c; id d; { ... }" */
! 
! myxdecls:
! 	  /* empty */
! 	| mydecls
! 	;
! 
! mydecls:
! 	mydecl
! 	| errstmt
! 	| mydecls mydecl
! 	| mydecl errstmt
! 	;
! 
! mydecl:
! 	declspecs_ts setspecs myparms ';'
! 		{ POP_DECLSPEC_STACK; }
! 	| declspecs_ts ';'
! 		{ shadow_tag ($1); }
! 	| declspecs_nots ';'
! 		{ pedwarn ("empty declaration"); }
! 	;
! 
! myparms:
! 	myparm
! 		{ push_parm_decl ($1); }
! 	| myparms ',' myparm
! 		{ push_parm_decl ($3); }
! 	;
! 
! /* A single parameter declaration or parameter type name,
!    as found in a parmlist. DOES NOT ALLOW AN INITIALIZER OR ASMSPEC */
  
! myparm:
! 	  parm_declarator maybe_attribute
! 		{ $$ = build_tree_list (build_tree_list (current_declspecs,
! 							 $1),
! 					chainon ($2, all_prefix_attributes)); }
! 	| notype_declarator maybe_attribute
! 		{ $$ = build_tree_list (build_tree_list (current_declspecs,
! 							 $1),
! 					chainon ($2, all_prefix_attributes)); }
! 	| absdcl_maybe_attribute
! 		{ $$ = $1; }
  	;
  
! optparmlist:
! 	  /* empty */
  		{
! 		  $$ = NULL_TREE;
  		}
! 	| ',' ELLIPSIS
  		{
! 		  /* oh what a kludge! */
! 		  $$ = objc_ellipsis_node;
  		}
! 	| ','
  		{
! 		  pushlevel (0);
  		}
! 	  parmlist_2
  		{
! 		  /* returns a tree list node generated by get_parm_info */
! 		  $$ = $3;
! 		  poplevel (0, 0, 0);
  		}
  	;
  
--- 2823,2885 ----
  		{
  		  /* Forget protocol qualifiers here.  */
  		  objc_pq_context = 0;
! 		  objc_add_method_declaration ($3);
  		}
  	  semi_or_error
  	;
  
  methoddecl:
! 	  '(' objc_typename ')' unaryselector
  		{
! 		  $$ = objc_build_method_signature ($2, $4, NULL_TREE);
  		}
  
  	| unaryselector
  		{
! 		  $$ = objc_build_method_signature (NULL_TREE, $1, NULL_TREE);
  		}
  
! 	| '(' objc_typename ')' keywordselector optparmlist
  		{
! 		  $$ = objc_build_method_signature ($2, $4, $5);
  		}
  
  	| keywordselector optparmlist
  		{
! 		  $$ = objc_build_method_signature (NULL_TREE, $1, $2);
  		}
  	;
  
! /* Optional ObjC method parameters follow the C syntax, and may include '...'
!    to denote a variable number of arguments.  */
  
! optparmlist:
! 	  optparms optellipsis
! 		{
! 		  TREE_OVERFLOW ($$) = $2;
! 		}
  	;
  
! optparms:
! 	  /* NULL */
  		{
! 		  $$ = make_node (TREE_LIST);
  		}
! 	| optparms ',' parm
  		{
! 		  $$ = chainon ($1, build_tree_list (NULL_TREE,
! 						     grokparm ($3)));
  		}
! 	;
! 
! optellipsis:
! 	  /* NULL */
  		{
! 		  $$ = 0;
  		}
! 	| ',' ELLIPSIS
  		{
! 		  $$ = 1;
  		}
  	;
  
*************** selector:
*** 3117,3152 ****
  	  IDENTIFIER
  	| TYPENAME
  	| CLASSNAME
- 	| OBJECTNAME
  	| reservedwords
  	;
  
  reservedwords:
! 	  ENUM | STRUCT	| UNION	| IF | ELSE | WHILE | DO | FOR
  	| SWITCH | CASE | DEFAULT | BREAK | CONTINUE | RETURN
  	| GOTO | ASM_KEYWORD | SIZEOF | TYPEOF | ALIGNOF
! 	| TYPESPEC | TYPE_QUAL
  	;
  
  keyworddecl:
! 	  selector ':' '(' typename ')' identifier
  		{
! 		  $$ = build_keyword_decl ($1, $4, $6);
  		}
  
  	| selector ':' identifier
  		{
! 		  $$ = build_keyword_decl ($1, NULL_TREE, $3);
  		}
  
! 	| ':' '(' typename ')' identifier
  		{
! 		  $$ = build_keyword_decl (NULL_TREE, $3, $5);
  		}
  
  	| ':' identifier
  		{
! 		  $$ = build_keyword_decl (NULL_TREE, NULL_TREE, $2);
  		}
  	;
  
--- 2900,2960 ----
  	  IDENTIFIER
  	| TYPENAME
  	| CLASSNAME
  	| reservedwords
  	;
  
  reservedwords:
! 	  ENUM | STRUCT | UNION | IF | ELSE | WHILE | DO | FOR
  	| SWITCH | CASE | DEFAULT | BREAK | CONTINUE | RETURN
  	| GOTO | ASM_KEYWORD | SIZEOF | TYPEOF | ALIGNOF
! 	| TYPESPEC | TYPE_QUAL | OBJC_TYPE_QUAL
! 	;
! 
! objc_qual:
! 	  OBJC_TYPE_QUAL
! 	;
! 
! objc_quals:
! 	  objc_quals objc_qual
! 		{
! 		  $$ = chainon ($1, build_tree_list (NULL_TREE, $2));
! 		}
! 	| /* NULL */
! 		{
! 		  $$ = NULL_TREE;
! 		}
! 	;
! 
! objc_typename:
! 	  objc_quals typename
! 		{
! 		  $$ = build_tree_list ($1, groktypename ($2));
! 		}
! 	| objc_quals
! 		{
! 		  $$ = build_tree_list ($1, NULL_TREE);
! 		}
  	;
  
  keyworddecl:
! 	  selector ':' '(' objc_typename ')' identifier
  		{
! 		  $$ = objc_build_keyword_decl ($1, $4, $6);
  		}
  
  	| selector ':' identifier
  		{
! 		  $$ = objc_build_keyword_decl ($1, NULL_TREE, $3);
  		}
  
! 	| ':' '(' objc_typename ')' identifier
  		{
! 		  $$ = objc_build_keyword_decl (NULL_TREE, $3, $5);
  		}
  
  	| ':' identifier
  		{
! 		  $$ = objc_build_keyword_decl (NULL_TREE, NULL_TREE, $2);
  		}
  	;
  
*************** keywordarg:
*** 3189,3201 ****
  
  receiver:
  	  expr
  	| CLASSNAME
  		{
! 		  $$ = get_class_reference ($1);
  		}
  	| TYPENAME
  		{
! 		  $$ = get_class_reference ($1);
  		}
  	;
  
--- 2997,3010 ----
  
  receiver:
  	  expr
+ 		{ $$ = $1.value; }
  	| CLASSNAME
  		{
! 		  $$ = objc_get_class_reference ($1);
  		}
  	| TYPENAME
  		{
! 		  $$ = objc_get_class_reference ($1);
  		}
  	;
  
*************** keywordname:
*** 3229,3242 ****
  	;
  
  objcselectorexpr:
! 	  SELECTOR '(' selectorarg ')'
  		{
  		  $$ = $3;
  		}
  	;
  
  objcprotocolexpr:
! 	  PROTOCOL '(' identifier ')'
  		{
  		  $$ = $3;
  		}
--- 3038,3051 ----
  	;
  
  objcselectorexpr:
! 	  AT_SELECTOR '(' selectorarg ')'
  		{
  		  $$ = $3;
  		}
  	;
  
  objcprotocolexpr:
! 	  AT_PROTOCOL '(' identifier ')'
  		{
  		  $$ = $3;
  		}
*************** objcprotocolexpr:
*** 3245,3251 ****
  /* extension to support C-structures in the archiver */
  
  objcencodeexpr:
! 	  ENCODE '(' typename ')'
  		{
  		  $$ = groktypename ($3);
  		}
--- 3054,3060 ----
  /* extension to support C-structures in the archiver */
  
  objcencodeexpr:
! 	  AT_ENCODE '(' typename ')'
  		{
  		  $$ = groktypename ($3);
  		}
*************** static const struct resword reswords[] =
*** 3287,3292 ****
--- 3096,3102 ----
    { "__attribute",	RID_ATTRIBUTE,	0 },
    { "__attribute__",	RID_ATTRIBUTE,	0 },
    { "__builtin_choose_expr", RID_CHOOSE_EXPR, 0 },
+   { "__builtin_offsetof", RID_OFFSETOF, 0 },
    { "__builtin_types_compatible_p", RID_TYPES_COMPATIBLE_P, 0 },
    { "__builtin_va_arg",	RID_VA_ARG,	0 },
    { "__complex",	RID_COMPLEX,	0 },
*************** static const struct resword reswords[] =
*** 3300,3311 ****
    { "__inline",		RID_INLINE,	0 },
    { "__inline__",	RID_INLINE,	0 },
    { "__label__",	RID_LABEL,	0 },
-   { "__ptrbase",	RID_PTRBASE,	0 },
-   { "__ptrbase__",	RID_PTRBASE,	0 },
-   { "__ptrextent",	RID_PTREXTENT,	0 },
-   { "__ptrextent__",	RID_PTREXTENT,	0 },
-   { "__ptrvalue",	RID_PTRVALUE,	0 },
-   { "__ptrvalue__",	RID_PTRVALUE,	0 },
    { "__real",		RID_REALPART,	0 },
    { "__real__",		RID_REALPART,	0 },
    { "__restrict",	RID_RESTRICT,	0 },
--- 3110,3115 ----
*************** static const struct resword reswords[] =
*** 3353,3360 ****
    { "void",		RID_VOID,	0 },
    { "volatile",		RID_VOLATILE,	0 },
    { "while",		RID_WHILE,	0 },
  @@ifobjc
-   { "id",		RID_ID,			D_OBJC },
  
    /* These objc keywords are recognized only immediately after
       an '@'.  */
--- 3157,3164 ----
    { "void",		RID_VOID,	0 },
    { "volatile",		RID_VOLATILE,	0 },
    { "while",		RID_WHILE,	0 },
+ 
  @@ifobjc
  
    /* These objc keywords are recognized only immediately after
       an '@'.  */
*************** static const short rid_to_yy[RID_MAX] =
*** 3418,3429 ****
    /* RID_MUTABLE */	0,
  
    /* ObjC */
!   /* RID_IN */		TYPE_QUAL,
!   /* RID_OUT */		TYPE_QUAL,
!   /* RID_INOUT */	TYPE_QUAL,
!   /* RID_BYCOPY */	TYPE_QUAL,
!   /* RID_BYREF */	TYPE_QUAL,
!   /* RID_ONEWAY */	TYPE_QUAL,
  
    /* C */
    /* RID_INT */		TYPESPEC,
--- 3222,3233 ----
    /* RID_MUTABLE */	0,
  
    /* ObjC */
!   /* RID_IN */		OBJC_TYPE_QUAL,
!   /* RID_OUT */		OBJC_TYPE_QUAL,
!   /* RID_INOUT */	OBJC_TYPE_QUAL,
!   /* RID_BYCOPY */	OBJC_TYPE_QUAL,
!   /* RID_BYREF */	OBJC_TYPE_QUAL,
!   /* RID_ONEWAY */	OBJC_TYPE_QUAL,
  
    /* C */
    /* RID_INT */		TYPESPEC,
*************** static const short rid_to_yy[RID_MAX] =
*** 3458,3466 ****
    /* RID_IMAGPART */	IMAGPART,
    /* RID_REALPART */	REALPART,
    /* RID_LABEL */	LABEL,
-   /* RID_PTRBASE */	PTR_BASE,
-   /* RID_PTREXTENT */	PTR_EXTENT,
-   /* RID_PTRVALUE */	PTR_VALUE,
  
    /* RID_CHOOSE_EXPR */			CHOOSE_EXPR,
    /* RID_TYPES_COMPATIBLE_P */		TYPES_COMPATIBLE_P,
--- 3262,3267 ----
*************** static const short rid_to_yy[RID_MAX] =
*** 3483,3489 ****
    /* RID_FALSE */	0,
    /* RID_NAMESPACE */	0,
    /* RID_NEW */		0,
!   /* RID_OFFSETOF */    0,
    /* RID_OPERATOR */	0,
    /* RID_THIS */	0,
    /* RID_THROW */	0,
--- 3284,3290 ----
    /* RID_FALSE */	0,
    /* RID_NAMESPACE */	0,
    /* RID_NEW */		0,
!   /* RID_OFFSETOF */    OFFSETOF,
    /* RID_OPERATOR */	0,
    /* RID_THIS */	0,
    /* RID_THROW */	0,
*************** static const short rid_to_yy[RID_MAX] =
*** 3500,3523 ****
    /* RID_STATCAST */	0,
  
    /* Objective C */
!   /* RID_ID */			OBJECTNAME,
!   /* RID_AT_ENCODE */		ENCODE,
!   /* RID_AT_END */		END,
!   /* RID_AT_CLASS */		CLASS,
!   /* RID_AT_ALIAS */		ALIAS,
!   /* RID_AT_DEFS */		DEFS,
!   /* RID_AT_PRIVATE */		PRIVATE,
!   /* RID_AT_PROTECTED */	PROTECTED,
!   /* RID_AT_PUBLIC */		PUBLIC,
!   /* RID_AT_PROTOCOL */		PROTOCOL,
!   /* RID_AT_SELECTOR */		SELECTOR,
    /* RID_AT_THROW */		AT_THROW,
    /* RID_AT_TRY */		AT_TRY,
    /* RID_AT_CATCH */		AT_CATCH,
    /* RID_AT_FINALLY */		AT_FINALLY,
    /* RID_AT_SYNCHRONIZED */	AT_SYNCHRONIZED,
!   /* RID_AT_INTERFACE */	INTERFACE,
!   /* RID_AT_IMPLEMENTATION */	IMPLEMENTATION
  };
  
  static void
--- 3301,3323 ----
    /* RID_STATCAST */	0,
  
    /* Objective C */
!   /* RID_AT_ENCODE */		AT_ENCODE,
!   /* RID_AT_END */		AT_END,
!   /* RID_AT_CLASS */		AT_CLASS,
!   /* RID_AT_ALIAS */		AT_ALIAS,
!   /* RID_AT_DEFS */		AT_DEFS,
!   /* RID_AT_PRIVATE */		AT_PRIVATE,
!   /* RID_AT_PROTECTED */	AT_PROTECTED,
!   /* RID_AT_PUBLIC */		AT_PUBLIC,
!   /* RID_AT_PROTOCOL */		AT_PROTOCOL,
!   /* RID_AT_SELECTOR */		AT_SELECTOR,
    /* RID_AT_THROW */		AT_THROW,
    /* RID_AT_TRY */		AT_TRY,
    /* RID_AT_CATCH */		AT_CATCH,
    /* RID_AT_FINALLY */		AT_FINALLY,
    /* RID_AT_SYNCHRONIZED */	AT_SYNCHRONIZED,
!   /* RID_AT_INTERFACE */	AT_INTERFACE,
!   /* RID_AT_IMPLEMENTATION */	AT_IMPLEMENTATION
  };
  
  static void
*************** init_reswords (void)
*** 3531,3537 ****
    if (!c_dialect_objc ())
       mask |= D_OBJC;
  
!   ridpointers = ggc_calloc ((int) RID_MAX, sizeof (tree));
    for (i = 0; i < N_reswords; i++)
      {
        /* If a keyword is disabled, do not enter it into the table
--- 3331,3337 ----
    if (!c_dialect_objc ())
       mask |= D_OBJC;
  
!   ridpointers = GGC_CNEWVEC (tree, (int) RID_MAX);
    for (i = 0; i < N_reswords; i++)
      {
        /* If a keyword is disabled, do not enter it into the table
*************** yylexname (void)
*** 3569,3583 ****
        enum rid rid_code = C_RID_CODE (yylval.ttype);
  
  @@ifobjc
-       /* Turn non-typedefed refs to "id" into plain identifiers; this
- 	 allows constructs like "void foo(id id);" to work.  */
-       if (rid_code == RID_ID)
-       {
- 	decl = lookup_name (yylval.ttype);
- 	if (decl == NULL_TREE || TREE_CODE (decl) != TYPE_DECL)
- 	  return IDENTIFIER;
-       }
- 
        if (!OBJC_IS_AT_KEYWORD (rid_code)
  	  && (!OBJC_IS_PQ_KEYWORD (rid_code) || objc_pq_context))
  @@end_ifobjc
--- 3369,3374 ----
*************** yylexname (void)
*** 3597,3603 ****
  @@ifobjc
    else
      {
!       tree objc_interface_decl = is_class_name (yylval.ttype);
        /* ObjC class names are in the same namespace as variables and
  	 typedefs, and hence are shadowed by local declarations.  */
        if (objc_interface_decl
--- 3388,3394 ----
  @@ifobjc
    else
      {
!       tree objc_interface_decl = objc_is_class_name (yylval.ttype);
        /* ObjC class names are in the same namespace as variables and
  	 typedefs, and hence are shadowed by local declarations.  */
        if (objc_interface_decl
*************** _yylex (void)
*** 3708,3714 ****
        /* These tokens should not survive translation phase 4.  */
      case CPP_HASH:
      case CPP_PASTE:
!       error ("syntax error at '%s' token", NAME(last_token));
        goto get_next;
  
      default:
--- 3499,3505 ----
        /* These tokens should not survive translation phase 4.  */
      case CPP_HASH:
      case CPP_PASTE:
!       error ("syntax error at %qs token", NAME(last_token));
        goto get_next;
  
      default:
*************** yyprint (FILE *file, int yychar, YYSTYPE
*** 3740,3752 ****
      {
      case IDENTIFIER:
      case TYPENAME:
-     case OBJECTNAME:
      case TYPESPEC:
      case TYPE_QUAL:
      case SCSPEC:
      case STATIC:
        if (IDENTIFIER_POINTER (t))
! 	fprintf (file, " `%s'", IDENTIFIER_POINTER (t));
        break;
  
      case CONSTANT:
--- 3531,3542 ----
      {
      case IDENTIFIER:
      case TYPENAME:
      case TYPESPEC:
      case TYPE_QUAL:
      case SCSPEC:
      case STATIC:
        if (IDENTIFIER_POINTER (t))
! 	fprintf (file, " '%s'", IDENTIFIER_POINTER (t));
        break;
  
      case CONSTANT:
*************** yyprint (FILE *file, int yychar, YYSTYPE
*** 3761,3782 ****
      }
  }
  
! /* This is not the ideal place to put these, but we have to get them out
!    of c-lex.c because cp/lex.c has its own versions.  */
  
  /* Parse the file.  */
  void
  c_parse_file (void)
  {
    yyparse ();
-   /* In case there were missing closebraces, get us back to the global
-      binding level.  */
-   while (! global_bindings_p ())
-     poplevel (0, 0, 0);
-   /* __FUNCTION__ is defined at file scope ("").  This
-      call may not be necessary as my tests indicate it
-      still works without it.  */
-   finish_fname_decls ();
  
    if (malloced_yyss)
      {
--- 3551,3564 ----
      }
  }
  
! /* This is not the ideal place to put this, but we have to get it out
!    of c-lex.c because cp/lex.c has its own version.  */
  
  /* Parse the file.  */
  void
  c_parse_file (void)
  {
    yyparse ();
  
    if (malloced_yyss)
      {
*************** c_parse_file (void)
*** 3786,3789 ****
--- 3568,3588 ----
      }
  }
  
+ #ifdef __XGETTEXT__
+ /* Depending on the version of Bison used to compile this grammar,
+    it may issue generic diagnostics spelled "syntax error" or
+    "parse error".  To prevent this from changing the translation
+    template randomly, we list all the variants of this particular
+    diagnostic here.  Translators: there is no fine distinction
+    between diagnostics with "syntax error" in them, and diagnostics
+    with "parse error" in them.  It's okay to give them both the same
+    translation.  */
+ const char d1[] = N_("syntax error");
+ const char d2[] = N_("parse error");
+ const char d3[] = N_("syntax error; also virtual memory exhausted");
+ const char d4[] = N_("parse error; also virtual memory exhausted");
+ const char d5[] = N_("syntax error: cannot back up");
+ const char d6[] = N_("parse error: cannot back up");
+ #endif
+ 
  #include "gt-c-parse.h"
diff -Nrcpad gcc-3.4.3/gcc/c-parse.y gcc-4.0.0/gcc/c-parse.y
*** gcc-3.4.3/gcc/c-parse.y	Fri Nov  5 04:15:34 2004
--- gcc-4.0.0/gcc/c-parse.y	Thu Apr 21 07:06:19 2005
***************
*** 1,7 ****
  /*WARNING: This file is automatically generated!*/
  /* YACC parser for C syntax and for Objective C.  -*-c-*-
!    Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997,
!    1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
--- 1,7 ----
  /*WARNING: This file is automatically generated!*/
  /* YACC parser for C syntax and for Objective C.  -*-c-*-
!    Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
!    1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
*************** Software Foundation, 59 Temple Place - S
*** 29,35 ****
  /* To whomever it may concern: I have heard that such a thing was once
     written by AT&T, but I have never seen it.  */
  
! %expect 10 /* shift/reduce conflicts, and no reduce/reduce conflicts.  */
  
  %{
  #include "config.h"
--- 29,35 ----
  /* To whomever it may concern: I have heard that such a thing was once
     written by AT&T, but I have never seen it.  */
  
! %expect 13 /* shift/reduce conflicts, and no reduce/reduce conflicts.  */
  
  %{
  #include "config.h"
*************** Software Foundation, 59 Temple Place - S
*** 37,42 ****
--- 37,43 ----
  #include "coretypes.h"
  #include "tm.h"
  #include "tree.h"
+ #include "langhooks.h"
  #include "input.h"
  #include "cpplib.h"
  #include "intl.h"
*************** Software Foundation, 59 Temple Place - S
*** 48,56 ****
  #include "output.h"
  #include "toplev.h"
  #include "ggc.h"
  
- 
- /* Like YYERROR but do call yyerror.  */
  #define YYERROR1 { yyerror ("syntax error"); YYERROR; }
  
  /* Like the default stack expander, except (1) use realloc when possible,
--- 49,56 ----
  #include "output.h"
  #include "toplev.h"
  #include "ggc.h"
+ #include "c-common.h"
  
  #define YYERROR1 { yyerror ("syntax error"); YYERROR; }
  
  /* Like the default stack expander, except (1) use realloc when possible,
*************** do {									\
*** 97,104 ****
  
  %start program
  
! %union {long itype; tree ttype; enum tree_code code;
! 	location_t location; }
  
  /* All identifiers that are not reserved words
     and are not declared typedefs in the current block */
--- 97,107 ----
  
  %start program
  
! %union {long itype; tree ttype; void *otype; struct c_expr exprtype;
! 	struct c_arg_info *arginfotype; struct c_declarator *dtrtype;
! 	struct c_type_name *typenametype; struct c_parm *parmtype;
! 	struct c_declspecs *dsptype; struct c_typespec tstype;
! 	enum tree_code code; location_t location; }
  
  /* All identifiers that are not reserved words
     and are not declared typedefs in the current block */
*************** do {									\
*** 122,127 ****
--- 125,134 ----
     yylval contains an IDENTIFIER_NODE which indicates which one.  */
  %token TYPE_QUAL
  
+ /* Objective-C protocol qualifiers.  These acquire their magic powers
+    only in certain contexts.  */
+ %token OBJC_TYPE_QUAL
+ 
  /* Character or numeric constants.
     yylval is the node for the constant.  */
  %token CONSTANT
*************** do {									\
*** 140,147 ****
  %token BREAK CONTINUE RETURN GOTO ASM_KEYWORD TYPEOF ALIGNOF
  %token ATTRIBUTE EXTENSION LABEL
  %token REALPART IMAGPART VA_ARG CHOOSE_EXPR TYPES_COMPATIBLE_P
! %token PTR_VALUE PTR_BASE PTR_EXTENT
! %token FUNC_NAME
  
  /* Add precedence rules to solve dangling else s/r conflict */
  %nonassoc IF
--- 147,153 ----
  %token BREAK CONTINUE RETURN GOTO ASM_KEYWORD TYPEOF ALIGNOF
  %token ATTRIBUTE EXTENSION LABEL
  %token REALPART IMAGPART VA_ARG CHOOSE_EXPR TYPES_COMPATIBLE_P
! %token FUNC_NAME OFFSETOF
  
  /* Add precedence rules to solve dangling else s/r conflict */
  %nonassoc IF
*************** do {									\
*** 169,176 ****
  
  /* The Objective-C keywords.  These are included in C and in
     Objective C, so that the token codes are the same in both.  */
! %token INTERFACE IMPLEMENTATION END SELECTOR DEFS ENCODE
! %token CLASSNAME PUBLIC PRIVATE PROTECTED PROTOCOL OBJECTNAME CLASS ALIAS
  %token AT_THROW AT_TRY AT_CATCH AT_FINALLY AT_SYNCHRONIZED
  %token OBJC_STRING
  
--- 175,183 ----
  
  /* The Objective-C keywords.  These are included in C and in
     Objective C, so that the token codes are the same in both.  */
! %token AT_INTERFACE AT_IMPLEMENTATION AT_END AT_SELECTOR AT_DEFS AT_ENCODE
! %token CLASSNAME AT_PUBLIC AT_PRIVATE AT_PROTECTED AT_PROTOCOL
! %token AT_CLASS AT_ALIAS
  %token AT_THROW AT_TRY AT_CATCH AT_FINALLY AT_SYNCHRONIZED
  %token OBJC_STRING
  
*************** do {									\
*** 178,249 ****
  %type <ttype> ENUM STRUCT UNION IF ELSE WHILE DO FOR SWITCH CASE DEFAULT
  %type <ttype> BREAK CONTINUE RETURN GOTO ASM_KEYWORD SIZEOF TYPEOF ALIGNOF
  
! %type <ttype> identifier IDENTIFIER TYPENAME CONSTANT expr nonnull_exprlist exprlist
! %type <ttype> expr_no_commas cast_expr unary_expr primary STRING
! %type <ttype> declspecs_nosc_nots_nosa_noea declspecs_nosc_nots_nosa_ea
! %type <ttype> declspecs_nosc_nots_sa_noea declspecs_nosc_nots_sa_ea
! %type <ttype> declspecs_nosc_ts_nosa_noea declspecs_nosc_ts_nosa_ea
! %type <ttype> declspecs_nosc_ts_sa_noea declspecs_nosc_ts_sa_ea
! %type <ttype> declspecs_sc_nots_nosa_noea declspecs_sc_nots_nosa_ea
! %type <ttype> declspecs_sc_nots_sa_noea declspecs_sc_nots_sa_ea
! %type <ttype> declspecs_sc_ts_nosa_noea declspecs_sc_ts_nosa_ea
! %type <ttype> declspecs_sc_ts_sa_noea declspecs_sc_ts_sa_ea
! %type <ttype> declspecs_ts declspecs_nots
! %type <ttype> declspecs_ts_nosa declspecs_nots_nosa
! %type <ttype> declspecs_nosc_ts declspecs_nosc_nots declspecs_nosc declspecs
! %type <ttype> maybe_type_quals_attrs typespec_nonattr typespec_attr
! %type <ttype> typespec_reserved_nonattr typespec_reserved_attr
! %type <ttype> typespec_nonreserved_nonattr
  
! %type <ttype> scspec SCSPEC STATIC TYPESPEC TYPE_QUAL maybe_type_qual
  %type <ttype> initdecls notype_initdecls initdcl notype_initdcl
! %type <ttype> init maybeasm
  %type <ttype> asm_operands nonnull_asm_operands asm_operand asm_clobbers
  %type <ttype> maybe_attribute attributes attribute attribute_list attrib
  %type <ttype> any_word
  
! %type <ttype> compstmt compstmt_start compstmt_nostart compstmt_primary_start
! %type <ttype> do_stmt_start poplevel stmt label
  
! %type <ttype> c99_block_start c99_block_end
! %type <ttype> declarator
! %type <ttype> notype_declarator after_type_declarator
! %type <ttype> parm_declarator
! %type <ttype> parm_declarator_starttypename parm_declarator_nostarttypename
! %type <ttype> array_declarator
  
! %type <ttype> structsp_attr structsp_nonattr
  %type <ttype> component_decl_list component_decl_list2
  %type <ttype> component_decl components components_notype component_declarator
  %type <ttype> component_notype_declarator
  %type <ttype> enumlist enumerator
  %type <ttype> struct_head union_head enum_head
! %type <ttype> typename absdcl absdcl1 absdcl1_ea absdcl1_noea
! %type <ttype> direct_absdcl1 absdcl_maybe_attribute
! %type <ttype> xexpr parms parm firstparm identifiers
  
! %type <ttype> parmlist parmlist_1 parmlist_2
! %type <ttype> parmlist_or_identifiers parmlist_or_identifiers_1
  %type <ttype> identifiers_or_typenames
  
  %type <itype> setspecs setspecs_fp extension
  
  %type <location> save_location
  
  
  %{
! /* Number of statements (loosely speaking) and compound statements
!    seen so far.  */
! static int stmt_count;
! static int compstmt_count;
! 
! /* Input location of the end of the body of last simple_if;
!    used by the stmt-rule immediately after simple_if returns.  */
! static location_t if_stmt_locus;
! 
! 
! /* List of types and structure classes of the current declaration.  */
! static GTY(()) tree current_declspecs;
  static GTY(()) tree prefix_attributes;
  
  /* List of all the attributes applying to the identifier currently being
--- 185,256 ----
  %type <ttype> ENUM STRUCT UNION IF ELSE WHILE DO FOR SWITCH CASE DEFAULT
  %type <ttype> BREAK CONTINUE RETURN GOTO ASM_KEYWORD SIZEOF TYPEOF ALIGNOF
  
! %type <ttype> identifier IDENTIFIER TYPENAME CONSTANT STRING FUNC_NAME
! %type <ttype> nonnull_exprlist exprlist
! %type <exprtype> expr expr_no_commas cast_expr unary_expr primary
! %type <dsptype> declspecs_nosc_nots_nosa_noea declspecs_nosc_nots_nosa_ea
! %type <dsptype> declspecs_nosc_nots_sa_noea declspecs_nosc_nots_sa_ea
! %type <dsptype> declspecs_nosc_ts_nosa_noea declspecs_nosc_ts_nosa_ea
! %type <dsptype> declspecs_nosc_ts_sa_noea declspecs_nosc_ts_sa_ea
! %type <dsptype> declspecs_sc_nots_nosa_noea declspecs_sc_nots_nosa_ea
! %type <dsptype> declspecs_sc_nots_sa_noea declspecs_sc_nots_sa_ea
! %type <dsptype> declspecs_sc_ts_nosa_noea declspecs_sc_ts_nosa_ea
! %type <dsptype> declspecs_sc_ts_sa_noea declspecs_sc_ts_sa_ea
! %type <dsptype> declspecs_ts declspecs_nots
! %type <dsptype> declspecs_ts_nosa declspecs_nots_nosa
! %type <dsptype> declspecs_nosc_ts declspecs_nosc_nots declspecs_nosc declspecs
! %type <dsptype> maybe_type_quals_attrs
! %type <tstype> typespec_nonattr typespec_attr
! %type <tstype> typespec_reserved_nonattr typespec_reserved_attr
! %type <tstype> typespec_nonreserved_nonattr
! %type <ttype> offsetof_member_designator
  
! %type <ttype> scspec SCSPEC STATIC TYPESPEC TYPE_QUAL maybe_volatile
  %type <ttype> initdecls notype_initdecls initdcl notype_initdcl
! %type <exprtype> init
! %type <ttype> simple_asm_expr maybeasm asm_stmt asm_argument asm_string
  %type <ttype> asm_operands nonnull_asm_operands asm_operand asm_clobbers
  %type <ttype> maybe_attribute attributes attribute attribute_list attrib
  %type <ttype> any_word
  
! %type <ttype> compstmt compstmt_start compstmt_primary_start
! %type <ttype> stmt label stmt_nocomp start_break start_continue
  
! %type <ttype> c99_block_start c99_block_lineno_labeled_stmt
! %type <ttype> if_statement_1 if_statement_2
! %type <dtrtype> declarator
! %type <dtrtype> notype_declarator after_type_declarator
! %type <dtrtype> parm_declarator
! %type <dtrtype> parm_declarator_starttypename parm_declarator_nostarttypename
! %type <dtrtype> array_declarator
  
! %type <tstype> structsp_attr structsp_nonattr
  %type <ttype> component_decl_list component_decl_list2
  %type <ttype> component_decl components components_notype component_declarator
  %type <ttype> component_notype_declarator
  %type <ttype> enumlist enumerator
  %type <ttype> struct_head union_head enum_head
! %type <typenametype> typename
! %type <dtrtype> absdcl absdcl1 absdcl1_ea absdcl1_noea direct_absdcl1
! %type <parmtype> absdcl_maybe_attribute
! %type <ttype> condition xexpr for_cond_expr for_incr_expr
! %type <parmtype> parm firstparm
! %type <ttype> identifiers
  
! %type <arginfotype> parms parmlist parmlist_1 parmlist_2
! %type <arginfotype> parmlist_or_identifiers parmlist_or_identifiers_1
  %type <ttype> identifiers_or_typenames
  
  %type <itype> setspecs setspecs_fp extension
  
  %type <location> save_location
+ 
+ %type <otype> save_obstack_position
  
  
  %{
! /* Declaration specifiers of the current declaration.  */
! static struct c_declspecs *current_declspecs;
  static GTY(()) tree prefix_attributes;
  
  /* List of all the attributes applying to the identifier currently being
*************** static GTY(()) tree prefix_attributes;
*** 251,276 ****
     just after a comma.  */
  static GTY(()) tree all_prefix_attributes;
  
  /* Stack of saved values of current_declspecs, prefix_attributes and
     all_prefix_attributes.  */
! static GTY(()) tree declspec_stack;
  
  /* PUSH_DECLSPEC_STACK is called from setspecs; POP_DECLSPEC_STACK
     should be called from the productions making use of setspecs.  */
! #define PUSH_DECLSPEC_STACK						 \
!   do {									 \
!     declspec_stack = tree_cons (build_tree_list (prefix_attributes,	 \
! 						 all_prefix_attributes), \
! 				current_declspecs,			 \
! 				declspec_stack);			 \
    } while (0)
  
  #define POP_DECLSPEC_STACK						\
    do {									\
!     current_declspecs = TREE_VALUE (declspec_stack);			\
!     prefix_attributes = TREE_PURPOSE (TREE_PURPOSE (declspec_stack));	\
!     all_prefix_attributes = TREE_VALUE (TREE_PURPOSE (declspec_stack));	\
!     declspec_stack = TREE_CHAIN (declspec_stack);			\
    } while (0)
  
  /* For __extension__, save/restore the warning flags which are
--- 258,301 ----
     just after a comma.  */
  static GTY(()) tree all_prefix_attributes;
  
+ /* Structure to save declaration specifiers.  */
+ struct c_declspec_stack {
+   /* Saved value of current_declspecs.  */
+   struct c_declspecs *current_declspecs;
+   /* Saved value of prefix_attributes.  */
+   tree prefix_attributes;
+   /* Saved value of all_prefix_attributes.  */
+   tree all_prefix_attributes;
+   /* Next level of stack.  */
+   struct c_declspec_stack *next;
+ };
+ 
  /* Stack of saved values of current_declspecs, prefix_attributes and
     all_prefix_attributes.  */
! static struct c_declspec_stack *declspec_stack;
! 
! /* INDIRECT_REF with a TREE_TYPE of the type being queried for offsetof.  */
! static tree offsetof_base;
  
  /* PUSH_DECLSPEC_STACK is called from setspecs; POP_DECLSPEC_STACK
     should be called from the productions making use of setspecs.  */
! #define PUSH_DECLSPEC_STACK						\
!   do {									\
!     struct c_declspec_stack *t = XOBNEW (&parser_obstack,		\
! 					 struct c_declspec_stack);	\
!     t->current_declspecs = current_declspecs;				\
!     t->prefix_attributes = prefix_attributes;				\
!     t->all_prefix_attributes = all_prefix_attributes;			\
!     t->next = declspec_stack;						\
!     declspec_stack = t;							\
    } while (0)
  
  #define POP_DECLSPEC_STACK						\
    do {									\
!     current_declspecs = declspec_stack->current_declspecs;		\
!     prefix_attributes = declspec_stack->prefix_attributes;		\
!     all_prefix_attributes = declspec_stack->all_prefix_attributes;	\
!     declspec_stack = declspec_stack->next;				\
    } while (0)
  
  /* For __extension__, save/restore the warning flags which are
*************** static GTY(()) tree declspec_stack;
*** 292,299 ****
  
  #define OBJC_NEED_RAW_IDENTIFIER(VAL)	/* nothing */
  
- static bool parsing_iso_function_signature;
- 
  /* Tell yyparse how to print a token's value, if yydebug is set.  */
  
  #define YYPRINT(FILE,YYCHAR,YYLVAL) yyprint(FILE,YYCHAR,YYLVAL)
--- 317,322 ----
*************** static inline int _yylex (void);
*** 305,311 ****
  static int  yylex (void);
  static void init_reswords (void);
  
!   /* Initialisation routine for this file.  */
  void
  c_parse_init (void)
  {
--- 328,334 ----
  static int  yylex (void);
  static void init_reswords (void);
  
!   /* Initialization routine for this file.  */
  void
  c_parse_init (void)
  {
*************** program: /* empty */
*** 324,381 ****
  
  /* the reason for the strange actions in this rule
   is so that notype_initdecls when reached via datadef
!  can find a valid list of type and sc specs in $0. */
  
  extdefs:
! 	{$<ttype>$ = NULL_TREE; } extdef
! 	| extdefs {$<ttype>$ = NULL_TREE; ggc_collect(); } extdef
  	;
  
  extdef:
- 	extdef_1
- 	{ parsing_iso_function_signature = false; } /* Reset after any external definition.  */
- 	;
- 
- extdef_1:
  	fndef
  	| datadef
! 	| ASM_KEYWORD '(' expr ')' ';'
! 		{ STRIP_NOPS ($3);
! 		  if ((TREE_CODE ($3) == ADDR_EXPR
! 		       && TREE_CODE (TREE_OPERAND ($3, 0)) == STRING_CST)
! 		      || TREE_CODE ($3) == STRING_CST)
! 		    assemble_asm ($3);
! 		  else
! 		    error ("argument of `asm' is not a constant string"); }
  	| extension extdef
  		{ RESTORE_EXT_FLAGS ($1); }
  	;
  
  datadef:
  	  setspecs notype_initdecls ';'
! 		{ if (pedantic)
! 		    error ("ISO C forbids data definition with no type or storage class");
! 		  else
! 		    warning ("data definition has no type or storage class");
! 
  		  POP_DECLSPEC_STACK; }
          | declspecs_nots setspecs notype_initdecls ';'
  		{ POP_DECLSPEC_STACK; }
  	| declspecs_ts setspecs initdecls ';'
  		{ POP_DECLSPEC_STACK; }
  	| declspecs ';'
! 	  { shadow_tag ($1); }
  	| error ';'
  	| error '}'
  	| ';'
  		{ if (pedantic)
! 		    pedwarn ("ISO C does not allow extra `;' outside of a function"); }
  	;
  
  fndef:
  	  declspecs_ts setspecs declarator
! 		{ if (! start_function (current_declspecs, $3,
! 					all_prefix_attributes))
  		    YYERROR1;
  		}
  	  old_style_parm_decls save_location
--- 347,397 ----
  
  /* the reason for the strange actions in this rule
   is so that notype_initdecls when reached via datadef
!  can find valid declaration specifiers in $0. */
  
  extdefs:
! 	save_obstack_position { $<dsptype>$ = NULL; } extdef
! 		{ obstack_free (&parser_obstack, $1); }
! 	| extdefs save_obstack_position
! 		{ $<dsptype>$ = NULL; ggc_collect (); } extdef
! 		{ obstack_free (&parser_obstack, $2); }
  	;
  
  extdef:
  	fndef
  	| datadef
! 	| asmdef
  	| extension extdef
  		{ RESTORE_EXT_FLAGS ($1); }
  	;
  
+ /* Record the current position of parser_obstack before a
+    declaration to restore it afterwards.  */
+ save_obstack_position:
+ 		{ $$ = obstack_alloc (&parser_obstack, 0); }
+ 	;
+ 
  datadef:
  	  setspecs notype_initdecls ';'
! 		{ pedwarn ("data definition has no type or storage class");
  		  POP_DECLSPEC_STACK; }
          | declspecs_nots setspecs notype_initdecls ';'
  		{ POP_DECLSPEC_STACK; }
  	| declspecs_ts setspecs initdecls ';'
  		{ POP_DECLSPEC_STACK; }
  	| declspecs ';'
! 	  { shadow_tag (finish_declspecs ($1)); }
  	| error ';'
  	| error '}'
  	| ';'
  		{ if (pedantic)
! 		    pedwarn ("ISO C does not allow extra %<;%> outside of a function"); }
  	;
  
  fndef:
  	  declspecs_ts setspecs declarator
! 		{ if (!start_function (current_declspecs, $3,
! 				       all_prefix_attributes))
  		    YYERROR1;
  		}
  	  old_style_parm_decls save_location
*************** fndef:
*** 387,394 ****
  	| declspecs_ts setspecs declarator error
  		{ POP_DECLSPEC_STACK; }
  	| declspecs_nots setspecs notype_declarator
! 		{ if (! start_function (current_declspecs, $3,
! 					all_prefix_attributes))
  		    YYERROR1;
  		}
  	  old_style_parm_decls save_location
--- 403,410 ----
  	| declspecs_ts setspecs declarator error
  		{ POP_DECLSPEC_STACK; }
  	| declspecs_nots setspecs notype_declarator
! 		{ if (!start_function (current_declspecs, $3,
! 				       all_prefix_attributes))
  		    YYERROR1;
  		}
  	  old_style_parm_decls save_location
*************** fndef:
*** 400,407 ****
  	| declspecs_nots setspecs notype_declarator error
  		{ POP_DECLSPEC_STACK; }
  	| setspecs notype_declarator
! 		{ if (! start_function (NULL_TREE, $2,
! 					all_prefix_attributes))
  		    YYERROR1;
  		}
  	  old_style_parm_decls save_location
--- 416,423 ----
  	| declspecs_nots setspecs notype_declarator error
  		{ POP_DECLSPEC_STACK; }
  	| setspecs notype_declarator
! 		{ if (!start_function (current_declspecs, $2,
! 				       all_prefix_attributes))
  		    YYERROR1;
  		}
  	  old_style_parm_decls save_location
*************** unop:     '&'
*** 438,445 ****
  		{ $$ = TRUTH_NOT_EXPR; }
  	;
  
! expr:	nonnull_exprlist
! 		{ $$ = build_compound_expr ($1); }
  	;
  
  exprlist:
--- 454,463 ----
  		{ $$ = TRUTH_NOT_EXPR; }
  	;
  
! expr:	expr_no_commas
! 	| expr ',' expr_no_commas
! 		{ $$.value = build_compound_expr ($1.value, $3.value);
! 		  $$.original_code = COMPOUND_EXPR; }
  	;
  
  exprlist:
*************** exprlist:
*** 450,511 ****
  
  nonnull_exprlist:
  	expr_no_commas
! 		{ $$ = build_tree_list (NULL_TREE, $1); }
  	| nonnull_exprlist ',' expr_no_commas
! 		{ chainon ($1, build_tree_list (NULL_TREE, $3)); }
  	;
  
  unary_expr:
  	primary
  	| '*' cast_expr   %prec UNARY
! 		{ $$ = build_indirect_ref ($2, "unary *"); }
  	/* __extension__ turns off -pedantic for following primary.  */
  	| extension cast_expr	  %prec UNARY
  		{ $$ = $2;
  		  RESTORE_EXT_FLAGS ($1); }
  	| unop cast_expr  %prec UNARY
! 		{ $$ = build_unary_op ($1, $2, 0);
! 		  overflow_warning ($$); }
  	/* Refer to the address of a label as a pointer.  */
  	| ANDAND identifier
! 		{ $$ = finish_label_address_expr ($2); }
  	| sizeof unary_expr  %prec UNARY
  		{ skip_evaluation--;
! 		  if (TREE_CODE ($2) == COMPONENT_REF
! 		      && DECL_C_BIT_FIELD (TREE_OPERAND ($2, 1)))
! 		    error ("`sizeof' applied to a bit-field");
! 		  $$ = c_sizeof (TREE_TYPE ($2)); }
  	| sizeof '(' typename ')'  %prec HYPERUNARY
  		{ skip_evaluation--;
! 		  $$ = c_sizeof (groktypename ($3)); }
  	| alignof unary_expr  %prec UNARY
  		{ skip_evaluation--;
! 		  $$ = c_alignof_expr ($2); }
  	| alignof '(' typename ')'  %prec HYPERUNARY
  		{ skip_evaluation--;
! 		  $$ = c_alignof (groktypename ($3)); }
  	| REALPART cast_expr %prec UNARY
! 		{ $$ = build_unary_op (REALPART_EXPR, $2, 0); }
  	| IMAGPART cast_expr %prec UNARY
! 		{ $$ = build_unary_op (IMAGPART_EXPR, $2, 0); }
  	;
  
  sizeof:
! 	SIZEOF { skip_evaluation++; }
  	;
  
  alignof:
! 	ALIGNOF { skip_evaluation++; }
  	;
  
  typeof:
! 	TYPEOF { skip_evaluation++; }
  	;
  
  cast_expr:
  	unary_expr
  	| '(' typename ')' cast_expr  %prec UNARY
! 		{ $$ = c_cast_expr ($2, $4); }
  	;
  
  expr_no_commas:
--- 468,541 ----
  
  nonnull_exprlist:
  	expr_no_commas
! 		{ $$ = build_tree_list (NULL_TREE, $1.value); }
  	| nonnull_exprlist ',' expr_no_commas
! 		{ chainon ($1, build_tree_list (NULL_TREE, $3.value)); }
  	;
  
  unary_expr:
  	primary
  	| '*' cast_expr   %prec UNARY
! 		{ $$.value = build_indirect_ref ($2.value, "unary *");
! 		  $$.original_code = ERROR_MARK; }
  	/* __extension__ turns off -pedantic for following primary.  */
  	| extension cast_expr	  %prec UNARY
  		{ $$ = $2;
  		  RESTORE_EXT_FLAGS ($1); }
  	| unop cast_expr  %prec UNARY
! 		{ $$.value = build_unary_op ($1, $2.value, 0);
! 		  overflow_warning ($$.value);
! 		  $$.original_code = ERROR_MARK; }
  	/* Refer to the address of a label as a pointer.  */
  	| ANDAND identifier
! 		{ $$.value = finish_label_address_expr ($2);
! 		  $$.original_code = ERROR_MARK; }
  	| sizeof unary_expr  %prec UNARY
  		{ skip_evaluation--;
! 		  in_sizeof--;
! 		  if (TREE_CODE ($2.value) == COMPONENT_REF
! 		      && DECL_C_BIT_FIELD (TREE_OPERAND ($2.value, 1)))
! 		    error ("%<sizeof%> applied to a bit-field");
! 		  $$ = c_expr_sizeof_expr ($2); }
  	| sizeof '(' typename ')'  %prec HYPERUNARY
  		{ skip_evaluation--;
! 		  in_sizeof--;
! 		  $$ = c_expr_sizeof_type ($3); }
  	| alignof unary_expr  %prec UNARY
  		{ skip_evaluation--;
! 		  in_alignof--;
! 		  $$.value = c_alignof_expr ($2.value);
! 		  $$.original_code = ERROR_MARK; }
  	| alignof '(' typename ')'  %prec HYPERUNARY
  		{ skip_evaluation--;
! 		  in_alignof--;
! 		  $$.value = c_alignof (groktypename ($3));
! 		  $$.original_code = ERROR_MARK; }
  	| REALPART cast_expr %prec UNARY
! 		{ $$.value = build_unary_op (REALPART_EXPR, $2.value, 0);
! 		  $$.original_code = ERROR_MARK; }
  	| IMAGPART cast_expr %prec UNARY
! 		{ $$.value = build_unary_op (IMAGPART_EXPR, $2.value, 0);
! 		  $$.original_code = ERROR_MARK; }
  	;
  
  sizeof:
! 	SIZEOF { skip_evaluation++; in_sizeof++; }
  	;
  
  alignof:
! 	ALIGNOF { skip_evaluation++; in_alignof++; }
  	;
  
  typeof:
! 	TYPEOF { skip_evaluation++; in_typeof++; }
  	;
  
  cast_expr:
  	unary_expr
  	| '(' typename ')' cast_expr  %prec UNARY
! 		{ $$.value = c_cast_expr ($2, $4.value);
! 		  $$.original_code = ERROR_MARK; }
  	;
  
  expr_no_commas:
*************** expr_no_commas:
*** 535,589 ****
  	| expr_no_commas '^' expr_no_commas
  		{ $$ = parser_build_binary_op ($2, $1, $3); }
  	| expr_no_commas ANDAND
! 		{ $1 = c_common_truthvalue_conversion
! 		    (default_conversion ($1));
! 		  skip_evaluation += $1 == truthvalue_false_node; }
  	  expr_no_commas
! 		{ skip_evaluation -= $1 == truthvalue_false_node;
  		  $$ = parser_build_binary_op (TRUTH_ANDIF_EXPR, $1, $4); }
  	| expr_no_commas OROR
! 		{ $1 = c_common_truthvalue_conversion
! 		    (default_conversion ($1));
! 		  skip_evaluation += $1 == truthvalue_true_node; }
  	  expr_no_commas
! 		{ skip_evaluation -= $1 == truthvalue_true_node;
  		  $$ = parser_build_binary_op (TRUTH_ORIF_EXPR, $1, $4); }
  	| expr_no_commas '?'
! 		{ $1 = c_common_truthvalue_conversion
! 		    (default_conversion ($1));
! 		  skip_evaluation += $1 == truthvalue_false_node; }
            expr ':'
! 		{ skip_evaluation += (($1 == truthvalue_true_node)
! 				      - ($1 == truthvalue_false_node)); }
  	  expr_no_commas
! 		{ skip_evaluation -= $1 == truthvalue_true_node;
! 		  $$ = build_conditional_expr ($1, $4, $7); }
  	| expr_no_commas '?'
  		{ if (pedantic)
  		    pedwarn ("ISO C forbids omitting the middle term of a ?: expression");
  		  /* Make sure first operand is calculated only once.  */
! 		  $<ttype>2 = save_expr ($1);
! 		  $1 = c_common_truthvalue_conversion
! 		    (default_conversion ($<ttype>2));
! 		  skip_evaluation += $1 == truthvalue_true_node; }
  	  ':' expr_no_commas
! 		{ skip_evaluation -= $1 == truthvalue_true_node;
! 		  $$ = build_conditional_expr ($1, $<ttype>2, $5); }
  	| expr_no_commas '=' expr_no_commas
! 		{ char class;
! 		  $$ = build_modify_expr ($1, NOP_EXPR, $3);
! 		  class = TREE_CODE_CLASS (TREE_CODE ($$));
! 		  if (IS_EXPR_CODE_CLASS (class))
! 		    C_SET_EXP_ORIGINAL_CODE ($$, MODIFY_EXPR);
  		}
  	| expr_no_commas ASSIGN expr_no_commas
! 		{ char class;
! 		  $$ = build_modify_expr ($1, $2, $3);
! 		  /* This inhibits warnings in
! 		     c_common_truthvalue_conversion.  */
! 		  class = TREE_CODE_CLASS (TREE_CODE ($$));
! 		  if (IS_EXPR_CODE_CLASS (class))
! 		    C_SET_EXP_ORIGINAL_CODE ($$, ERROR_MARK);
  		}
  	;
  
--- 565,615 ----
  	| expr_no_commas '^' expr_no_commas
  		{ $$ = parser_build_binary_op ($2, $1, $3); }
  	| expr_no_commas ANDAND
! 		{ $1.value = lang_hooks.truthvalue_conversion
! 		    (default_conversion ($1.value));
! 		  skip_evaluation += $1.value == truthvalue_false_node; }
  	  expr_no_commas
! 		{ skip_evaluation -= $1.value == truthvalue_false_node;
  		  $$ = parser_build_binary_op (TRUTH_ANDIF_EXPR, $1, $4); }
  	| expr_no_commas OROR
! 		{ $1.value = lang_hooks.truthvalue_conversion
! 		    (default_conversion ($1.value));
! 		  skip_evaluation += $1.value == truthvalue_true_node; }
  	  expr_no_commas
! 		{ skip_evaluation -= $1.value == truthvalue_true_node;
  		  $$ = parser_build_binary_op (TRUTH_ORIF_EXPR, $1, $4); }
  	| expr_no_commas '?'
! 		{ $1.value = lang_hooks.truthvalue_conversion
! 		    (default_conversion ($1.value));
! 		  skip_evaluation += $1.value == truthvalue_false_node; }
            expr ':'
! 		{ skip_evaluation += (($1.value == truthvalue_true_node)
! 				      - ($1.value == truthvalue_false_node)); }
  	  expr_no_commas
! 		{ skip_evaluation -= $1.value == truthvalue_true_node;
! 		  $$.value = build_conditional_expr ($1.value, $4.value,
! 						     $7.value);
! 		  $$.original_code = ERROR_MARK; }
  	| expr_no_commas '?'
  		{ if (pedantic)
  		    pedwarn ("ISO C forbids omitting the middle term of a ?: expression");
  		  /* Make sure first operand is calculated only once.  */
! 		  $<ttype>2 = save_expr (default_conversion ($1.value));
! 		  $1.value = lang_hooks.truthvalue_conversion ($<ttype>2);
! 		  skip_evaluation += $1.value == truthvalue_true_node; }
  	  ':' expr_no_commas
! 		{ skip_evaluation -= $1.value == truthvalue_true_node;
! 		  $$.value = build_conditional_expr ($1.value, $<ttype>2,
! 						     $5.value);
! 		  $$.original_code = ERROR_MARK; }
  	| expr_no_commas '=' expr_no_commas
! 		{ $$.value = build_modify_expr ($1.value, NOP_EXPR, $3.value);
! 		  $$.original_code = MODIFY_EXPR;
  		}
  	| expr_no_commas ASSIGN expr_no_commas
! 		{ $$.value = build_modify_expr ($1.value, $2, $3.value);
! 		  TREE_NO_WARNING ($$.value) = 1;
! 		  $$.original_code = ERROR_MARK;
  		}
  	;
  
*************** primary:
*** 592,709 ****
  		{
  		  if (yychar == YYEMPTY)
  		    yychar = YYLEX;
! 		  $$ = build_external_ref ($1, yychar == '(');
  		}
  	| CONSTANT
  	| STRING
  	| FUNC_NAME
! 		{ $$ = fname_decl (C_RID_CODE ($$), $$); }
  	| '(' typename ')' '{'
  		{ start_init (NULL_TREE, NULL, 0);
! 		  $2 = groktypename ($2);
! 		  really_start_incremental_init ($2); }
  	  initlist_maybe_comma '}'  %prec UNARY
! 		{ tree constructor = pop_init_level (0);
! 		  tree type = $2;
  		  finish_init ();
  
! 		  if (pedantic && ! flag_isoc99)
  		    pedwarn ("ISO C90 forbids compound literals");
! 		  $$ = build_compound_literal (type, constructor);
  		}
  	| '(' expr ')'
! 		{ char class = TREE_CODE_CLASS (TREE_CODE ($2));
! 		  if (IS_EXPR_CODE_CLASS (class))
! 		    C_SET_EXP_ORIGINAL_CODE ($2, ERROR_MARK);
! 		  $$ = $2; }
  	| '(' error ')'
! 		{ $$ = error_mark_node; }
  	| compstmt_primary_start compstmt_nostart ')'
!                  { tree saved_last_tree;
! 
! 		   if (pedantic)
! 		     pedwarn ("ISO C forbids braced-groups within expressions");
! 		  saved_last_tree = COMPOUND_BODY ($1);
! 		  RECHAIN_STMTS ($1, COMPOUND_BODY ($1));
! 		  last_tree = saved_last_tree;
! 		  TREE_CHAIN (last_tree) = NULL_TREE;
! 		  if (!last_expr_type)
! 		    last_expr_type = void_type_node;
! 		  $$ = build1 (STMT_EXPR, last_expr_type, $1);
! 		  TREE_SIDE_EFFECTS ($$) = 1;
  		}
  	| compstmt_primary_start error ')'
! 		{
! 		  last_tree = COMPOUND_BODY ($1);
! 		  TREE_CHAIN (last_tree) = NULL_TREE;
! 		  $$ = error_mark_node;
  		}
  	| primary '(' exprlist ')'   %prec '.'
! 		{ $$ = build_function_call ($1, $3); }
  	| VA_ARG '(' expr_no_commas ',' typename ')'
! 		{ $$ = build_va_arg ($3, groktypename ($5)); }
  
!       | CHOOSE_EXPR '(' expr_no_commas ',' expr_no_commas ',' expr_no_commas ')'
  		{
                    tree c;
  
!                   c = fold ($3);
                    STRIP_NOPS (c);
                    if (TREE_CODE (c) != INTEGER_CST)
!                     error ("first argument to __builtin_choose_expr not a constant");
                    $$ = integer_zerop (c) ? $7 : $5;
  		}
!       | TYPES_COMPATIBLE_P '(' typename ',' typename ')'
  		{
  		  tree e1, e2;
  
  		  e1 = TYPE_MAIN_VARIANT (groktypename ($3));
  		  e2 = TYPE_MAIN_VARIANT (groktypename ($5));
  
! 		  $$ = comptypes (e1, e2, COMPARE_STRICT)
! 		    ? build_int_2 (1, 0) : build_int_2 (0, 0);
  		}
  	| primary '[' expr ']'   %prec '.'
! 		{ $$ = build_array_ref ($1, $3); }
  	| primary '.' identifier
! 		{
! 		      $$ = build_component_ref ($1, $3);
! 		}
  	| primary POINTSAT identifier
  		{
!                   tree expr = build_indirect_ref ($1, "->");
! 
! 			$$ = build_component_ref (expr, $3);
  		}
  	| primary PLUSPLUS
! 		{ $$ = build_unary_op (POSTINCREMENT_EXPR, $1, 0); }
  	| primary MINUSMINUS
! 		{ $$ = build_unary_op (POSTDECREMENT_EXPR, $1, 0); }
  	;
  
! old_style_parm_decls:
! 	old_style_parm_decls_1
! 	{
! 	  parsing_iso_function_signature = false; /* Reset after decls.  */
! 	}
  	;
  
! old_style_parm_decls_1:
  	/* empty */
- 	{
- 	  if (warn_traditional && !in_system_header
- 	      && parsing_iso_function_signature)
- 	    warning ("traditional C rejects ISO C style function definitions");
- 	  if (warn_old_style_definition && !in_system_header
- 	      && !parsing_iso_function_signature)
- 	    warning ("old-style parameter declaration");
- 	  parsing_iso_function_signature = false; /* Reset after warning.  */
- 	}
  	| datadecls
- 	{
- 	  if (warn_old_style_definition && !in_system_header)
- 	    warning ("old-style parameter declaration");
- 	}
  	;
  
  /* The following are analogous to lineno_decl, decls and decl
--- 618,755 ----
  		{
  		  if (yychar == YYEMPTY)
  		    yychar = YYLEX;
! 		  $$.value = build_external_ref ($1, yychar == '(');
! 		  $$.original_code = ERROR_MARK;
  		}
  	| CONSTANT
+ 		{ $$.value = $1; $$.original_code = ERROR_MARK; }
  	| STRING
+ 		{ $$.value = $1; $$.original_code = STRING_CST; }
  	| FUNC_NAME
! 		{ $$.value = fname_decl (C_RID_CODE ($1), $1);
! 		  $$.original_code = ERROR_MARK; }
  	| '(' typename ')' '{'
  		{ start_init (NULL_TREE, NULL, 0);
! 		  $<ttype>$ = groktypename ($2);
! 		  if (C_TYPE_VARIABLE_SIZE ($<ttype>$))
! 		    {
! 		      error ("compound literal has variable size");
! 		      $<ttype>$ = error_mark_node;
! 		    }
! 		  really_start_incremental_init ($<ttype>$); }
  	  initlist_maybe_comma '}'  %prec UNARY
! 		{ struct c_expr init = pop_init_level (0);
! 		  tree constructor = init.value;
! 		  tree type = $<ttype>5;
  		  finish_init ();
+ 		  maybe_warn_string_init (type, init);
  
! 		  if (pedantic && !flag_isoc99)
  		    pedwarn ("ISO C90 forbids compound literals");
! 		  $$.value = build_compound_literal (type, constructor);
! 		  $$.original_code = ERROR_MARK;
  		}
  	| '(' expr ')'
! 		{ $$.value = $2.value;
! 		  if (TREE_CODE ($$.value) == MODIFY_EXPR)
! 		    TREE_NO_WARNING ($$.value) = 1;
! 		  $$.original_code = ERROR_MARK; }
  	| '(' error ')'
! 		{ $$.value = error_mark_node; $$.original_code = ERROR_MARK; }
  	| compstmt_primary_start compstmt_nostart ')'
!                 { if (pedantic)
! 		    pedwarn ("ISO C forbids braced-groups within expressions");
! 		  $$.value = c_finish_stmt_expr ($1);
! 		  $$.original_code = ERROR_MARK;
  		}
  	| compstmt_primary_start error ')'
! 		{ c_finish_stmt_expr ($1);
! 		  $$.value = error_mark_node;
! 		  $$.original_code = ERROR_MARK;
  		}
  	| primary '(' exprlist ')'   %prec '.'
! 		{ $$.value = build_function_call ($1.value, $3);
! 		  $$.original_code = ERROR_MARK; }
  	| VA_ARG '(' expr_no_commas ',' typename ')'
! 		{ $$.value = build_va_arg ($3.value, groktypename ($5));
! 		  $$.original_code = ERROR_MARK; }
  
! 	| OFFSETOF '(' typename ','
! 		{ tree type = groktypename ($3);
! 		  if (type == error_mark_node)
! 		    offsetof_base = error_mark_node;
! 		  else
! 		    offsetof_base = build1 (INDIRECT_REF, type, NULL);
! 		}
! 	  offsetof_member_designator ')'
! 		{ $$.value = fold_offsetof ($6);
! 		  $$.original_code = ERROR_MARK; }
! 	| OFFSETOF '(' error ')'
! 		{ $$.value = error_mark_node; $$.original_code = ERROR_MARK; }
! 	| CHOOSE_EXPR '(' expr_no_commas ',' expr_no_commas ','
! 			  expr_no_commas ')'
  		{
                    tree c;
  
!                   c = fold ($3.value);
                    STRIP_NOPS (c);
                    if (TREE_CODE (c) != INTEGER_CST)
!                     error ("first argument to %<__builtin_choose_expr%> not"
! 			   " a constant");
                    $$ = integer_zerop (c) ? $7 : $5;
  		}
! 	| CHOOSE_EXPR '(' error ')'
! 		{ $$.value = error_mark_node; $$.original_code = ERROR_MARK; }
! 	| TYPES_COMPATIBLE_P '(' typename ',' typename ')'
  		{
  		  tree e1, e2;
  
  		  e1 = TYPE_MAIN_VARIANT (groktypename ($3));
  		  e2 = TYPE_MAIN_VARIANT (groktypename ($5));
  
! 		  $$.value = comptypes (e1, e2)
! 		    ? build_int_cst (NULL_TREE, 1)
! 		    : build_int_cst (NULL_TREE, 0);
! 		  $$.original_code = ERROR_MARK;
  		}
+ 	| TYPES_COMPATIBLE_P '(' error ')'
+ 		{ $$.value = error_mark_node; $$.original_code = ERROR_MARK; }
  	| primary '[' expr ']'   %prec '.'
! 		{ $$.value = build_array_ref ($1.value, $3.value);
! 		  $$.original_code = ERROR_MARK; }
  	| primary '.' identifier
! 		{ $$.value = build_component_ref ($1.value, $3);
! 		  $$.original_code = ERROR_MARK; }
  	| primary POINTSAT identifier
  		{
!                   tree expr = build_indirect_ref ($1.value, "->");
! 		  $$.value = build_component_ref (expr, $3);
! 		  $$.original_code = ERROR_MARK;
  		}
  	| primary PLUSPLUS
! 		{ $$.value = build_unary_op (POSTINCREMENT_EXPR, $1.value, 0);
! 		  $$.original_code = ERROR_MARK; }
  	| primary MINUSMINUS
! 		{ $$.value = build_unary_op (POSTDECREMENT_EXPR, $1.value, 0);
! 		  $$.original_code = ERROR_MARK; }
  	;
  
! /* This is the second argument to __builtin_offsetof.  We must have one
!    identifier, and beyond that we want to accept sub structure and sub
!    array references.  */
! 
! offsetof_member_designator:
! 	  identifier
! 		{ $$ = build_component_ref (offsetof_base, $1); }
! 	| offsetof_member_designator '.' identifier
! 		{ $$ = build_component_ref ($1, $3); }
! 	| offsetof_member_designator '[' expr ']'
! 		{ $$ = build_array_ref ($1, $3.value); }
  	;
  
! old_style_parm_decls:
  	/* empty */
  	| datadecls
  	;
  
  /* The following are analogous to lineno_decl, decls and decl
*************** datadecl:
*** 731,737 ****
  	| declspecs_nots_nosa setspecs notype_initdecls ';'
  		{ POP_DECLSPEC_STACK; }
  	| declspecs_ts_nosa ';'
! 		{ shadow_tag_warned ($1, 1);
  		  pedwarn ("empty declaration"); }
  	| declspecs_nots_nosa ';'
  		{ pedwarn ("empty declaration"); }
--- 777,783 ----
  	| declspecs_nots_nosa setspecs notype_initdecls ';'
  		{ POP_DECLSPEC_STACK; }
  	| declspecs_ts_nosa ';'
! 		{ shadow_tag_warned (finish_declspecs ($1), 1);
  		  pedwarn ("empty declaration"); }
  	| declspecs_nots_nosa ';'
  		{ pedwarn ("empty declaration"); }
*************** lineno_decl:
*** 753,760 ****
  setspecs: /* empty */
  		{ pending_xref_error ();
  		  PUSH_DECLSPEC_STACK;
! 		  split_specs_attrs ($<ttype>0,
! 				     &current_declspecs, &prefix_attributes);
  		  all_prefix_attributes = prefix_attributes; }
  	;
  
--- 799,816 ----
  setspecs: /* empty */
  		{ pending_xref_error ();
  		  PUSH_DECLSPEC_STACK;
! 		  if ($<dsptype>0)
! 		    {
! 		      prefix_attributes = $<dsptype>0->attrs;
! 		      $<dsptype>0->attrs = NULL_TREE;
! 		      current_declspecs = $<dsptype>0;
! 		    }
! 		  else
! 		    {
! 		      prefix_attributes = NULL_TREE;
! 		      current_declspecs = build_null_declspecs ();
! 		    }
! 		  current_declspecs = finish_declspecs (current_declspecs);
  		  all_prefix_attributes = prefix_attributes; }
  	;
  
*************** decl:
*** 775,781 ****
  	| declspecs_nots setspecs notype_nested_function
  		{ POP_DECLSPEC_STACK; }
  	| declspecs ';'
! 		{ shadow_tag ($1); }
  	| extension decl
  		{ RESTORE_EXT_FLAGS ($1); }
  	;
--- 831,837 ----
  	| declspecs_nots setspecs notype_nested_function
  		{ POP_DECLSPEC_STACK; }
  	| declspecs ';'
! 		{ shadow_tag (finish_declspecs ($1)); }
  	| extension decl
  		{ RESTORE_EXT_FLAGS ($1); }
  	;
*************** decl:
*** 791,806 ****
  
     - Attribute specifier lists (attributes).
  
-    These are stored as a TREE_LIST; the head of the list is the last
-    item in the specifier list.  Each entry in the list has either a
-    TREE_PURPOSE that is an attribute specifier list, or a TREE_VALUE that
-    is a single other specifier or qualifier; and a TREE_CHAIN that is the
-    rest of the list.  TREE_STATIC is set on the list if something other
-    than a storage class specifier or attribute has been seen; this is used
-    to warn for the obsolescent usage of storage class specifiers other than
-    at the start of the list.  (Doing this properly would require function
-    specifiers to be handled separately from storage class specifiers.)
- 
     The various cases below are classified according to:
  
     (a) Whether a storage class specifier is included or not; some
--- 847,852 ----
*************** decl:
*** 829,1162 ****
  
  /* Declspecs which contain at least one type specifier or typedef name.
     (Just `const' or `volatile' is not enough.)
!    A typedef'd name following these is taken as a name to be declared.
!    Declspecs have a non-NULL TREE_VALUE, attributes do not.  */
  
  declspecs_nosc_nots_nosa_noea:
  	  TYPE_QUAL
! 		{ $$ = tree_cons (NULL_TREE, $1, NULL_TREE);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_nots_nosa_noea TYPE_QUAL
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_nots_nosa_ea TYPE_QUAL
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	;
  
  declspecs_nosc_nots_nosa_ea:
  	  declspecs_nosc_nots_nosa_noea attributes
! 		{ $$ = tree_cons ($2, NULL_TREE, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	;
  
  declspecs_nosc_nots_sa_noea:
  	  declspecs_nosc_nots_sa_noea TYPE_QUAL
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_nots_sa_ea TYPE_QUAL
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	;
  
  declspecs_nosc_nots_sa_ea:
  	  attributes
! 		{ $$ = tree_cons ($1, NULL_TREE, NULL_TREE);
! 		  TREE_STATIC ($$) = 0; }
  	| declspecs_nosc_nots_sa_noea attributes
! 		{ $$ = tree_cons ($2, NULL_TREE, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	;
  
  declspecs_nosc_ts_nosa_noea:
  	  typespec_nonattr
! 		{ $$ = tree_cons (NULL_TREE, $1, NULL_TREE);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_ts_nosa_noea TYPE_QUAL
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_ts_nosa_ea TYPE_QUAL
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_ts_nosa_noea typespec_reserved_nonattr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_ts_nosa_ea typespec_reserved_nonattr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_nots_nosa_noea typespec_nonattr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_nots_nosa_ea typespec_nonattr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	;
  
  declspecs_nosc_ts_nosa_ea:
  	  typespec_attr
! 		{ $$ = tree_cons (NULL_TREE, $1, NULL_TREE);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_ts_nosa_noea attributes
! 		{ $$ = tree_cons ($2, NULL_TREE, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	| declspecs_nosc_ts_nosa_noea typespec_reserved_attr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_ts_nosa_ea typespec_reserved_attr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_nots_nosa_noea typespec_attr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_nots_nosa_ea typespec_attr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	;
  
  declspecs_nosc_ts_sa_noea:
  	  declspecs_nosc_ts_sa_noea TYPE_QUAL
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_ts_sa_ea TYPE_QUAL
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_ts_sa_noea typespec_reserved_nonattr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_ts_sa_ea typespec_reserved_nonattr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_nots_sa_noea typespec_nonattr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_nots_sa_ea typespec_nonattr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	;
  
  declspecs_nosc_ts_sa_ea:
  	  declspecs_nosc_ts_sa_noea attributes
! 		{ $$ = tree_cons ($2, NULL_TREE, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	| declspecs_nosc_ts_sa_noea typespec_reserved_attr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_ts_sa_ea typespec_reserved_attr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_nots_sa_noea typespec_attr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_nots_sa_ea typespec_attr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	;
  
  declspecs_sc_nots_nosa_noea:
  	  scspec
! 		{ $$ = tree_cons (NULL_TREE, $1, NULL_TREE);
! 		  TREE_STATIC ($$) = 0; }
  	| declspecs_sc_nots_nosa_noea TYPE_QUAL
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_sc_nots_nosa_ea TYPE_QUAL
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_nots_nosa_noea scspec
! 		{ if (extra_warnings && TREE_STATIC ($1))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER ($2));
! 		  $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	| declspecs_nosc_nots_nosa_ea scspec
! 		{ if (extra_warnings && TREE_STATIC ($1))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER ($2));
! 		  $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	| declspecs_sc_nots_nosa_noea scspec
! 		{ if (extra_warnings && TREE_STATIC ($1))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER ($2));
! 		  $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	| declspecs_sc_nots_nosa_ea scspec
! 		{ if (extra_warnings && TREE_STATIC ($1))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER ($2));
! 		  $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	;
  
  declspecs_sc_nots_nosa_ea:
  	  declspecs_sc_nots_nosa_noea attributes
! 		{ $$ = tree_cons ($2, NULL_TREE, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	;
  
  declspecs_sc_nots_sa_noea:
  	  declspecs_sc_nots_sa_noea TYPE_QUAL
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_sc_nots_sa_ea TYPE_QUAL
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_nots_sa_noea scspec
! 		{ if (extra_warnings && TREE_STATIC ($1))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER ($2));
! 		  $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	| declspecs_nosc_nots_sa_ea scspec
! 		{ if (extra_warnings && TREE_STATIC ($1))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER ($2));
! 		  $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	| declspecs_sc_nots_sa_noea scspec
! 		{ if (extra_warnings && TREE_STATIC ($1))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER ($2));
! 		  $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	| declspecs_sc_nots_sa_ea scspec
! 		{ if (extra_warnings && TREE_STATIC ($1))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER ($2));
! 		  $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	;
  
  declspecs_sc_nots_sa_ea:
  	  declspecs_sc_nots_sa_noea attributes
! 		{ $$ = tree_cons ($2, NULL_TREE, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	;
  
  declspecs_sc_ts_nosa_noea:
  	  declspecs_sc_ts_nosa_noea TYPE_QUAL
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_sc_ts_nosa_ea TYPE_QUAL
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_sc_ts_nosa_noea typespec_reserved_nonattr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_sc_ts_nosa_ea typespec_reserved_nonattr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_sc_nots_nosa_noea typespec_nonattr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_sc_nots_nosa_ea typespec_nonattr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_ts_nosa_noea scspec
! 		{ if (extra_warnings && TREE_STATIC ($1))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER ($2));
! 		  $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	| declspecs_nosc_ts_nosa_ea scspec
! 		{ if (extra_warnings && TREE_STATIC ($1))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER ($2));
! 		  $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	| declspecs_sc_ts_nosa_noea scspec
! 		{ if (extra_warnings && TREE_STATIC ($1))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER ($2));
! 		  $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	| declspecs_sc_ts_nosa_ea scspec
! 		{ if (extra_warnings && TREE_STATIC ($1))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER ($2));
! 		  $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	;
  
  declspecs_sc_ts_nosa_ea:
  	  declspecs_sc_ts_nosa_noea attributes
! 		{ $$ = tree_cons ($2, NULL_TREE, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	| declspecs_sc_ts_nosa_noea typespec_reserved_attr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_sc_ts_nosa_ea typespec_reserved_attr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_sc_nots_nosa_noea typespec_attr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_sc_nots_nosa_ea typespec_attr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	;
  
  declspecs_sc_ts_sa_noea:
  	  declspecs_sc_ts_sa_noea TYPE_QUAL
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_sc_ts_sa_ea TYPE_QUAL
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_sc_ts_sa_noea typespec_reserved_nonattr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_sc_ts_sa_ea typespec_reserved_nonattr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_sc_nots_sa_noea typespec_nonattr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_sc_nots_sa_ea typespec_nonattr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_nosc_ts_sa_noea scspec
! 		{ if (extra_warnings && TREE_STATIC ($1))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER ($2));
! 		  $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	| declspecs_nosc_ts_sa_ea scspec
! 		{ if (extra_warnings && TREE_STATIC ($1))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER ($2));
! 		  $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	| declspecs_sc_ts_sa_noea scspec
! 		{ if (extra_warnings && TREE_STATIC ($1))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER ($2));
! 		  $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	| declspecs_sc_ts_sa_ea scspec
! 		{ if (extra_warnings && TREE_STATIC ($1))
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER ($2));
! 		  $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	;
  
  declspecs_sc_ts_sa_ea:
  	  declspecs_sc_ts_sa_noea attributes
! 		{ $$ = tree_cons ($2, NULL_TREE, $1);
! 		  TREE_STATIC ($$) = TREE_STATIC ($1); }
  	| declspecs_sc_ts_sa_noea typespec_reserved_attr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_sc_ts_sa_ea typespec_reserved_attr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_sc_nots_sa_noea typespec_attr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	| declspecs_sc_nots_sa_ea typespec_attr
! 		{ $$ = tree_cons (NULL_TREE, $2, $1);
! 		  TREE_STATIC ($$) = 1; }
  	;
  
  /* Particular useful classes of declspecs.  */
--- 875,1082 ----
  
  /* Declspecs which contain at least one type specifier or typedef name.
     (Just `const' or `volatile' is not enough.)
!    A typedef'd name following these is taken as a name to be declared.  */
  
  declspecs_nosc_nots_nosa_noea:
  	  TYPE_QUAL
! 		{ $$ = declspecs_add_qual (build_null_declspecs (), $1); }
  	| declspecs_nosc_nots_nosa_noea TYPE_QUAL
! 		{ $$ = declspecs_add_qual ($1, $2); }
  	| declspecs_nosc_nots_nosa_ea TYPE_QUAL
! 		{ $$ = declspecs_add_qual ($1, $2); }
  	;
  
  declspecs_nosc_nots_nosa_ea:
  	  declspecs_nosc_nots_nosa_noea attributes
! 		{ $$ = declspecs_add_attrs ($1, $2); }
  	;
  
  declspecs_nosc_nots_sa_noea:
  	  declspecs_nosc_nots_sa_noea TYPE_QUAL
! 		{ $$ = declspecs_add_qual ($1, $2); }
  	| declspecs_nosc_nots_sa_ea TYPE_QUAL
! 		{ $$ = declspecs_add_qual ($1, $2); }
  	;
  
  declspecs_nosc_nots_sa_ea:
  	  attributes
! 		{ $$ = declspecs_add_attrs (build_null_declspecs (), $1); }
  	| declspecs_nosc_nots_sa_noea attributes
! 		{ $$ = declspecs_add_attrs ($1, $2); }
  	;
  
  declspecs_nosc_ts_nosa_noea:
  	  typespec_nonattr
! 		{ $$ = declspecs_add_type (build_null_declspecs (), $1); }
  	| declspecs_nosc_ts_nosa_noea TYPE_QUAL
! 		{ $$ = declspecs_add_qual ($1, $2); }
  	| declspecs_nosc_ts_nosa_ea TYPE_QUAL
! 		{ $$ = declspecs_add_qual ($1, $2); }
  	| declspecs_nosc_ts_nosa_noea typespec_reserved_nonattr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_nosc_ts_nosa_ea typespec_reserved_nonattr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_nosc_nots_nosa_noea typespec_nonattr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_nosc_nots_nosa_ea typespec_nonattr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	;
  
  declspecs_nosc_ts_nosa_ea:
  	  typespec_attr
! 		{ $$ = declspecs_add_type (build_null_declspecs (), $1); }
  	| declspecs_nosc_ts_nosa_noea attributes
! 		{ $$ = declspecs_add_attrs ($1, $2); }
  	| declspecs_nosc_ts_nosa_noea typespec_reserved_attr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_nosc_ts_nosa_ea typespec_reserved_attr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_nosc_nots_nosa_noea typespec_attr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_nosc_nots_nosa_ea typespec_attr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	;
  
  declspecs_nosc_ts_sa_noea:
  	  declspecs_nosc_ts_sa_noea TYPE_QUAL
! 		{ $$ = declspecs_add_qual ($1, $2); }
  	| declspecs_nosc_ts_sa_ea TYPE_QUAL
! 		{ $$ = declspecs_add_qual ($1, $2); }
  	| declspecs_nosc_ts_sa_noea typespec_reserved_nonattr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_nosc_ts_sa_ea typespec_reserved_nonattr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_nosc_nots_sa_noea typespec_nonattr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_nosc_nots_sa_ea typespec_nonattr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	;
  
  declspecs_nosc_ts_sa_ea:
  	  declspecs_nosc_ts_sa_noea attributes
! 		{ $$ = declspecs_add_attrs ($1, $2); }
  	| declspecs_nosc_ts_sa_noea typespec_reserved_attr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_nosc_ts_sa_ea typespec_reserved_attr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_nosc_nots_sa_noea typespec_attr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_nosc_nots_sa_ea typespec_attr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	;
  
  declspecs_sc_nots_nosa_noea:
  	  scspec
! 		{ $$ = declspecs_add_scspec (build_null_declspecs (), $1); }
  	| declspecs_sc_nots_nosa_noea TYPE_QUAL
! 		{ $$ = declspecs_add_qual ($1, $2); }
  	| declspecs_sc_nots_nosa_ea TYPE_QUAL
! 		{ $$ = declspecs_add_qual ($1, $2); }
  	| declspecs_nosc_nots_nosa_noea scspec
! 		{ $$ = declspecs_add_scspec ($1, $2); }
  	| declspecs_nosc_nots_nosa_ea scspec
! 		{ $$ = declspecs_add_scspec ($1, $2); }
  	| declspecs_sc_nots_nosa_noea scspec
! 		{ $$ = declspecs_add_scspec ($1, $2); }
  	| declspecs_sc_nots_nosa_ea scspec
! 		{ $$ = declspecs_add_scspec ($1, $2); }
  	;
  
  declspecs_sc_nots_nosa_ea:
  	  declspecs_sc_nots_nosa_noea attributes
! 		{ $$ = declspecs_add_attrs ($1, $2); }
  	;
  
  declspecs_sc_nots_sa_noea:
  	  declspecs_sc_nots_sa_noea TYPE_QUAL
! 		{ $$ = declspecs_add_qual ($1, $2); }
  	| declspecs_sc_nots_sa_ea TYPE_QUAL
! 		{ $$ = declspecs_add_qual ($1, $2); }
  	| declspecs_nosc_nots_sa_noea scspec
! 		{ $$ = declspecs_add_scspec ($1, $2); }
  	| declspecs_nosc_nots_sa_ea scspec
! 		{ $$ = declspecs_add_scspec ($1, $2); }
  	| declspecs_sc_nots_sa_noea scspec
! 		{ $$ = declspecs_add_scspec ($1, $2); }
  	| declspecs_sc_nots_sa_ea scspec
! 		{ $$ = declspecs_add_scspec ($1, $2); }
  	;
  
  declspecs_sc_nots_sa_ea:
  	  declspecs_sc_nots_sa_noea attributes
! 		{ $$ = declspecs_add_attrs ($1, $2); }
  	;
  
  declspecs_sc_ts_nosa_noea:
  	  declspecs_sc_ts_nosa_noea TYPE_QUAL
! 		{ $$ = declspecs_add_qual ($1, $2); }
  	| declspecs_sc_ts_nosa_ea TYPE_QUAL
! 		{ $$ = declspecs_add_qual ($1, $2); }
  	| declspecs_sc_ts_nosa_noea typespec_reserved_nonattr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_sc_ts_nosa_ea typespec_reserved_nonattr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_sc_nots_nosa_noea typespec_nonattr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_sc_nots_nosa_ea typespec_nonattr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_nosc_ts_nosa_noea scspec
! 		{ $$ = declspecs_add_scspec ($1, $2); }
  	| declspecs_nosc_ts_nosa_ea scspec
! 		{ $$ = declspecs_add_scspec ($1, $2); }
  	| declspecs_sc_ts_nosa_noea scspec
! 		{ $$ = declspecs_add_scspec ($1, $2); }
  	| declspecs_sc_ts_nosa_ea scspec
! 		{ $$ = declspecs_add_scspec ($1, $2); }
  	;
  
  declspecs_sc_ts_nosa_ea:
  	  declspecs_sc_ts_nosa_noea attributes
! 		{ $$ = declspecs_add_attrs ($1, $2); }
  	| declspecs_sc_ts_nosa_noea typespec_reserved_attr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_sc_ts_nosa_ea typespec_reserved_attr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_sc_nots_nosa_noea typespec_attr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_sc_nots_nosa_ea typespec_attr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	;
  
  declspecs_sc_ts_sa_noea:
  	  declspecs_sc_ts_sa_noea TYPE_QUAL
! 		{ $$ = declspecs_add_qual ($1, $2); }
  	| declspecs_sc_ts_sa_ea TYPE_QUAL
! 		{ $$ = declspecs_add_qual ($1, $2); }
  	| declspecs_sc_ts_sa_noea typespec_reserved_nonattr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_sc_ts_sa_ea typespec_reserved_nonattr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_sc_nots_sa_noea typespec_nonattr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_sc_nots_sa_ea typespec_nonattr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_nosc_ts_sa_noea scspec
! 		{ $$ = declspecs_add_scspec ($1, $2); }
  	| declspecs_nosc_ts_sa_ea scspec
! 		{ $$ = declspecs_add_scspec ($1, $2); }
  	| declspecs_sc_ts_sa_noea scspec
! 		{ $$ = declspecs_add_scspec ($1, $2); }
  	| declspecs_sc_ts_sa_ea scspec
! 		{ $$ = declspecs_add_scspec ($1, $2); }
  	;
  
  declspecs_sc_ts_sa_ea:
  	  declspecs_sc_ts_sa_noea attributes
! 		{ $$ = declspecs_add_attrs ($1, $2); }
  	| declspecs_sc_ts_sa_noea typespec_reserved_attr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_sc_ts_sa_ea typespec_reserved_attr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_sc_nots_sa_noea typespec_attr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	| declspecs_sc_nots_sa_ea typespec_attr
! 		{ $$ = declspecs_add_type ($1, $2); }
  	;
  
  /* Particular useful classes of declspecs.  */
*************** declspecs:
*** 1243,1249 ****
  /* A (possibly empty) sequence of type qualifiers and attributes.  */
  maybe_type_quals_attrs:
  	  /* empty */
! 		{ $$ = NULL_TREE; }
  	| declspecs_nosc_nots
  		{ $$ = $1; }
  	;
--- 1163,1169 ----
  /* A (possibly empty) sequence of type qualifiers and attributes.  */
  maybe_type_quals_attrs:
  	  /* empty */
! 		{ $$ = NULL; }
  	| declspecs_nosc_nots
  		{ $$ = $1; }
  	;
*************** maybe_type_quals_attrs:
*** 1267,1273 ****
     or are such that any following attributes would
     be parsed as part of the specifier.
  
!    _nonattr: specifiers.  */
  
  typespec_nonattr:
  	  typespec_reserved_nonattr
--- 1187,1193 ----
     or are such that any following attributes would
     be parsed as part of the specifier.
  
!    _nonattr: other specifiers not ending with attributes.  */
  
  typespec_nonattr:
  	  typespec_reserved_nonattr
*************** typespec_attr:
*** 1280,1286 ****
  
  typespec_reserved_nonattr:
  	  TYPESPEC
! 		{ OBJC_NEED_RAW_IDENTIFIER (1);	}
  	| structsp_nonattr
  	;
  
--- 1200,1208 ----
  
  typespec_reserved_nonattr:
  	  TYPESPEC
! 		{ OBJC_NEED_RAW_IDENTIFIER (1);
! 		  $$.kind = ctsk_resword;
! 		  $$.spec = $1; }
  	| structsp_nonattr
  	;
  
*************** typespec_nonreserved_nonattr:
*** 1292,1306 ****
  	  TYPENAME
  		{ /* For a typedef name, record the meaning, not the name.
  		     In case of `foo foo, bar;'.  */
! 		  $$ = lookup_name ($1); }
  	| typeof '(' expr ')'
  		{ skip_evaluation--;
! 		  if (TREE_CODE ($3) == COMPONENT_REF
! 		      && DECL_C_BIT_FIELD (TREE_OPERAND ($3, 1)))
! 		    error ("`typeof' applied to a bit-field");
! 		  $$ = TREE_TYPE ($3); }
  	| typeof '(' typename ')'
! 		{ skip_evaluation--; $$ = groktypename ($3); }
  	;
  
  /* typespec_nonreserved_attr does not exist.  */
--- 1214,1238 ----
  	  TYPENAME
  		{ /* For a typedef name, record the meaning, not the name.
  		     In case of `foo foo, bar;'.  */
! 		  $$.kind = ctsk_typedef;
! 		  $$.spec = lookup_name ($1); }
  	| typeof '(' expr ')'
  		{ skip_evaluation--;
! 		  in_typeof--;
! 		  if (TREE_CODE ($3.value) == COMPONENT_REF
! 		      && DECL_C_BIT_FIELD (TREE_OPERAND ($3.value, 1)))
! 		    error ("%<typeof%> applied to a bit-field");
! 		  $$.kind = ctsk_typeof;
! 		  $$.spec = TREE_TYPE ($3.value);
! 		  pop_maybe_used (variably_modified_type_p ($$.spec,
! 							    NULL_TREE)); }
  	| typeof '(' typename ')'
! 		{ skip_evaluation--;
! 		  in_typeof--;
! 		  $$.kind = ctsk_typeof;
! 		  $$.spec = groktypename ($3);
! 		  pop_maybe_used (variably_modified_type_p ($$.spec,
! 							    NULL_TREE)); }
  	;
  
  /* typespec_nonreserved_attr does not exist.  */
*************** notype_initdecls:
*** 1315,1356 ****
  	| notype_initdecls ',' maybe_resetattrs notype_initdcl
  	;
  
- maybeasm:
- 	  /* empty */
- 		{ $$ = NULL_TREE; }
- 	| ASM_KEYWORD '(' STRING ')'
- 		{ $$ = $3; }
- 	;
- 
  initdcl:
  	  declarator maybeasm maybe_attribute '='
! 		{ $<ttype>$ = start_decl ($1, current_declspecs, 1,
  					  chainon ($3, all_prefix_attributes));
  		  start_init ($<ttype>$, $2, global_bindings_p ()); }
  	  init
  /* Note how the declaration of the variable is in effect while its init is parsed! */
  		{ finish_init ();
! 		  finish_decl ($<ttype>5, $6, $2); }
  	| declarator maybeasm maybe_attribute
! 		{ tree d = start_decl ($1, current_declspecs, 0,
  				       chainon ($3, all_prefix_attributes));
! 		  finish_decl (d, NULL_TREE, $2);
                  }
  	;
  
  notype_initdcl:
  	  notype_declarator maybeasm maybe_attribute '='
! 		{ $<ttype>$ = start_decl ($1, current_declspecs, 1,
  					  chainon ($3, all_prefix_attributes));
  		  start_init ($<ttype>$, $2, global_bindings_p ()); }
  	  init
  /* Note how the declaration of the variable is in effect while its init is parsed! */
  		{ finish_init ();
! 		  finish_decl ($<ttype>5, $6, $2); }
  	| notype_declarator maybeasm maybe_attribute
! 		{ tree d = start_decl ($1, current_declspecs, 0,
  				       chainon ($3, all_prefix_attributes));
! 		  finish_decl (d, NULL_TREE, $2); }
  	;
  /* the * rules are dummies to accept the Apollo extended syntax
     so that the header files compile. */
--- 1247,1297 ----
  	| notype_initdecls ',' maybe_resetattrs notype_initdcl
  	;
  
  initdcl:
  	  declarator maybeasm maybe_attribute '='
! 		{ $<ttype>$ = start_decl ($1, current_declspecs, true,
  					  chainon ($3, all_prefix_attributes));
+ 		  if (!$<ttype>$)
+ 		    $<ttype>$ = error_mark_node;
  		  start_init ($<ttype>$, $2, global_bindings_p ()); }
  	  init
  /* Note how the declaration of the variable is in effect while its init is parsed! */
  		{ finish_init ();
! 		  if ($<ttype>5 != error_mark_node)
! 		    {
! 		      maybe_warn_string_init (TREE_TYPE ($<ttype>5), $6);
! 		      finish_decl ($<ttype>5, $6.value, $2);
! 		    }
! 		}
  	| declarator maybeasm maybe_attribute
! 		{ tree d = start_decl ($1, current_declspecs, false,
  				       chainon ($3, all_prefix_attributes));
! 		  if (d)
! 		    finish_decl (d, NULL_TREE, $2);
                  }
  	;
  
  notype_initdcl:
  	  notype_declarator maybeasm maybe_attribute '='
! 		{ $<ttype>$ = start_decl ($1, current_declspecs, true,
  					  chainon ($3, all_prefix_attributes));
+ 		  if (!$<ttype>$)
+ 		    $<ttype>$ = error_mark_node;
  		  start_init ($<ttype>$, $2, global_bindings_p ()); }
  	  init
  /* Note how the declaration of the variable is in effect while its init is parsed! */
  		{ finish_init ();
! 		  if ($<ttype>5 != error_mark_node)
! 		    {
! 		      maybe_warn_string_init (TREE_TYPE ($<ttype>5), $6);
! 		      finish_decl ($<ttype>5, $6.value, $2);
! 		    }
! 		}
  	| notype_declarator maybeasm maybe_attribute
! 		{ tree d = start_decl ($1, current_declspecs, false,
  				       chainon ($3, all_prefix_attributes));
! 		  if (d)
!                     finish_decl (d, NULL_TREE, $2); }
  	;
  /* the * rules are dummies to accept the Apollo extended syntax
     so that the header files compile. */
*************** attributes:
*** 1369,1376 ****
  	;
  
  attribute:
!       ATTRIBUTE '(' '(' attribute_list ')' ')'
! 		{ $$ = $4; }
  	;
  
  attribute_list:
--- 1310,1320 ----
  	;
  
  attribute:
!       ATTRIBUTE stop_string_translation
!                 '(' '(' attribute_list ')' ')' start_string_translation
! 		{ $$ = $5; }
!       | ATTRIBUTE error start_string_translation
!                 { $$ = NULL_TREE; }
  	;
  
  attribute_list:
*************** scspec:
*** 1412,1423 ****
  
  init:
  	expr_no_commas
  	| '{'
  		{ really_start_incremental_init (NULL_TREE); }
  	  initlist_maybe_comma '}'
  		{ $$ = pop_init_level (0); }
  	| error
! 		{ $$ = error_mark_node; }
  	;
  
  /* `initlist_maybe_comma' is the guts of an initializer in braces.  */
--- 1356,1368 ----
  
  init:
  	expr_no_commas
+ 		{ $$ = $1; }
  	| '{'
  		{ really_start_incremental_init (NULL_TREE); }
  	  initlist_maybe_comma '}'
  		{ $$ = pop_init_level (0); }
  	| error
! 		{ $$.value = error_mark_node; $$.original_code = ERROR_MARK; }
  	;
  
  /* `initlist_maybe_comma' is the guts of an initializer in braces.  */
*************** initlist1:
*** 1437,1451 ****
     It may use braces.  */
  initelt:
  	  designator_list '=' initval
! 		{ if (pedantic && ! flag_isoc99)
  		    pedwarn ("ISO C90 forbids specifying subobject to initialize"); }
! 	| designator initval
  		{ if (pedantic)
! 		    pedwarn ("obsolete use of designated initializer without `='"); }
  	| identifier ':'
  		{ set_init_label ($1);
  		  if (pedantic)
! 		    pedwarn ("obsolete use of designated initializer with `:'"); }
  	  initval
  		{}
  	| initval
--- 1382,1396 ----
     It may use braces.  */
  initelt:
  	  designator_list '=' initval
! 		{ if (pedantic && !flag_isoc99)
  		    pedwarn ("ISO C90 forbids specifying subobject to initialize"); }
! 	| array_designator initval
  		{ if (pedantic)
! 		    pedwarn ("obsolete use of designated initializer without %<=%>"); }
  	| identifier ':'
  		{ set_init_label ($1);
  		  if (pedantic)
! 		    pedwarn ("obsolete use of designated initializer with %<:%>"); }
  	  initval
  		{}
  	| initval
*************** designator_list:
*** 1469,1542 ****
  designator:
  	  '.' identifier
  		{ set_init_label ($2); }
! 	| '[' expr_no_commas ELLIPSIS expr_no_commas ']'
! 		{ set_init_index ($2, $4);
  		  if (pedantic)
  		    pedwarn ("ISO C forbids specifying range of elements to initialize"); }
  	| '[' expr_no_commas ']'
! 		{ set_init_index ($2, NULL_TREE); }
  	;
  
  nested_function:
! 	  declarator
  		{ if (pedantic)
  		    pedwarn ("ISO C forbids nested functions");
  
  		  push_function_context ();
! 		  if (! start_function (current_declspecs, $1,
! 					all_prefix_attributes))
  		    {
  		      pop_function_context ();
  		      YYERROR1;
  		    }
- 		  parsing_iso_function_signature = false; /* Don't warn about nested functions.  */
  		}
! 	   old_style_parm_decls save_location
  		{ tree decl = current_function_decl;
  		  DECL_SOURCE_LOCATION (decl) = $4;
  		  store_parm_decls (); }
! /* This used to use compstmt_or_error.
!    That caused a bug with input `f(g) int g {}',
!    where the use of YYERROR1 above caused an error
!    which then was handled by compstmt_or_error.
!    There followed a repeated execution of that same rule,
!    which called YYERROR1 again, and so on.  */
! 	  compstmt
  		{ tree decl = current_function_decl;
  		  finish_function ();
  		  pop_function_context ();
! 		  add_decl_stmt (decl); }
  	;
  
  notype_nested_function:
! 	  notype_declarator
  		{ if (pedantic)
  		    pedwarn ("ISO C forbids nested functions");
  
  		  push_function_context ();
! 		  if (! start_function (current_declspecs, $1,
! 					all_prefix_attributes))
  		    {
  		      pop_function_context ();
  		      YYERROR1;
  		    }
- 		  parsing_iso_function_signature = false; /* Don't warn about nested functions.  */
  		}
! 	  old_style_parm_decls save_location
  		{ tree decl = current_function_decl;
  		  DECL_SOURCE_LOCATION (decl) = $4;
  		  store_parm_decls (); }
! /* This used to use compstmt_or_error.
!    That caused a bug with input `f(g) int g {}',
!    where the use of YYERROR1 above caused an error
!    which then was handled by compstmt_or_error.
!    There followed a repeated execution of that same rule,
!    which called YYERROR1 again, and so on.  */
! 	  compstmt
  		{ tree decl = current_function_decl;
  		  finish_function ();
  		  pop_function_context ();
! 		  add_decl_stmt (decl); }
  	;
  
  /* Any kind of declarator (thus, all declarators allowed
--- 1414,1489 ----
  designator:
  	  '.' identifier
  		{ set_init_label ($2); }
! 	| array_designator
! 	;
! 
! array_designator:
! 	  '[' expr_no_commas ELLIPSIS expr_no_commas ']'
! 		{ set_init_index ($2.value, $4.value);
  		  if (pedantic)
  		    pedwarn ("ISO C forbids specifying range of elements to initialize"); }
  	| '[' expr_no_commas ']'
! 		{ set_init_index ($2.value, NULL_TREE); }
  	;
  
  nested_function:
! 	declarator
  		{ if (pedantic)
  		    pedwarn ("ISO C forbids nested functions");
  
  		  push_function_context ();
! 		  if (!start_function (current_declspecs, $1,
! 				       all_prefix_attributes))
  		    {
  		      pop_function_context ();
  		      YYERROR1;
  		    }
  		}
! 	old_style_parm_decls save_location
  		{ tree decl = current_function_decl;
  		  DECL_SOURCE_LOCATION (decl) = $4;
  		  store_parm_decls (); }
! 	/* This used to use compstmt_or_error.  That caused a bug with
! 	   input `f(g) int g {}', where the use of YYERROR1 above caused
! 	   an error which then was handled by compstmt_or_error.  There
! 	   followed a repeated execution of that same rule, which called
! 	   YYERROR1 again, and so on.  */
! 	compstmt
  		{ tree decl = current_function_decl;
+ 		  add_stmt ($6);
  		  finish_function ();
  		  pop_function_context ();
! 		  add_stmt (build_stmt (DECL_EXPR, decl)); }
  	;
  
  notype_nested_function:
! 	notype_declarator
  		{ if (pedantic)
  		    pedwarn ("ISO C forbids nested functions");
  
  		  push_function_context ();
! 		  if (!start_function (current_declspecs, $1,
! 				       all_prefix_attributes))
  		    {
  		      pop_function_context ();
  		      YYERROR1;
  		    }
  		}
! 	old_style_parm_decls save_location
  		{ tree decl = current_function_decl;
  		  DECL_SOURCE_LOCATION (decl) = $4;
  		  store_parm_decls (); }
! 	/* This used to use compstmt_or_error.  That caused a bug with
! 	   input `f(g) int g {}', where the use of YYERROR1 above caused
! 	   an error which then was handled by compstmt_or_error.  There
! 	   followed a repeated execution of that same rule, which called
! 	   YYERROR1 again, and so on.  */
! 	compstmt
  		{ tree decl = current_function_decl;
+ 		  add_stmt ($6);
  		  finish_function ();
  		  pop_function_context ();
! 		  add_stmt (build_stmt (DECL_EXPR, decl)); }
  	;
  
  /* Any kind of declarator (thus, all declarators allowed
*************** declarator:
*** 1551,1567 ****
  
  after_type_declarator:
  	  '(' maybe_attribute after_type_declarator ')'
! 		{ $$ = $2 ? tree_cons ($2, $3, NULL_TREE) : $3; }
  	| after_type_declarator '(' parmlist_or_identifiers  %prec '.'
! 		{ $$ = build_nt (CALL_EXPR, $1, $3, NULL_TREE); }
! /*	| after_type_declarator '(' error ')'  %prec '.'
! 		{ $$ = build_nt (CALL_EXPR, $1, NULL_TREE, NULL_TREE);
! 		  poplevel (0, 0, 0); }  */
  	| after_type_declarator array_declarator  %prec '.'
! 		{ $$ = set_array_declarator_type ($2, $1, 0); }
  	| '*' maybe_type_quals_attrs after_type_declarator  %prec UNARY
  		{ $$ = make_pointer_declarator ($2, $3); }
  	| TYPENAME
  	;
  
  /* Kinds of declarator that can appear in a parameter list
--- 1498,1512 ----
  
  after_type_declarator:
  	  '(' maybe_attribute after_type_declarator ')'
! 		{ $$ = $2 ? build_attrs_declarator ($2, $3) : $3; }
  	| after_type_declarator '(' parmlist_or_identifiers  %prec '.'
! 		{ $$ = build_function_declarator ($3, $1); }
  	| after_type_declarator array_declarator  %prec '.'
! 		{ $$ = set_array_declarator_inner ($2, $1, false); }
  	| '*' maybe_type_quals_attrs after_type_declarator  %prec UNARY
  		{ $$ = make_pointer_declarator ($2, $3); }
  	| TYPENAME
+ 		{ $$ = build_id_declarator ($1); }
  	;
  
  /* Kinds of declarator that can appear in a parameter list
*************** parm_declarator:
*** 1575,1603 ****
  
  parm_declarator_starttypename:
  	  parm_declarator_starttypename '(' parmlist_or_identifiers  %prec '.'
! 		{ $$ = build_nt (CALL_EXPR, $1, $3, NULL_TREE); }
! /*	| parm_declarator_starttypename '(' error ')'  %prec '.'
! 		{ $$ = build_nt (CALL_EXPR, $1, NULL_TREE, NULL_TREE);
! 		  poplevel (0, 0, 0); }  */
  	| parm_declarator_starttypename array_declarator  %prec '.'
! 		{ $$ = set_array_declarator_type ($2, $1, 0); }
  	| TYPENAME
  	;
  
  parm_declarator_nostarttypename:
  	  parm_declarator_nostarttypename '(' parmlist_or_identifiers  %prec '.'
! 		{ $$ = build_nt (CALL_EXPR, $1, $3, NULL_TREE); }
! /*	| parm_declarator_nostarttypename '(' error ')'  %prec '.'
! 		{ $$ = build_nt (CALL_EXPR, $1, NULL_TREE, NULL_TREE);
! 		  poplevel (0, 0, 0); }  */
  	| parm_declarator_nostarttypename array_declarator  %prec '.'
! 		{ $$ = set_array_declarator_type ($2, $1, 0); }
  	| '*' maybe_type_quals_attrs parm_declarator_starttypename  %prec UNARY
  		{ $$ = make_pointer_declarator ($2, $3); }
  	| '*' maybe_type_quals_attrs parm_declarator_nostarttypename  %prec UNARY
  		{ $$ = make_pointer_declarator ($2, $3); }
  	| '(' maybe_attribute parm_declarator_nostarttypename ')'
! 		{ $$ = $2 ? tree_cons ($2, $3, NULL_TREE) : $3; }
  	;
  
  /* A declarator allowed whether or not there has been
--- 1520,1543 ----
  
  parm_declarator_starttypename:
  	  parm_declarator_starttypename '(' parmlist_or_identifiers  %prec '.'
! 		{ $$ = build_function_declarator ($3, $1); }
  	| parm_declarator_starttypename array_declarator  %prec '.'
! 		{ $$ = set_array_declarator_inner ($2, $1, false); }
  	| TYPENAME
+ 		{ $$ = build_id_declarator ($1); }
  	;
  
  parm_declarator_nostarttypename:
  	  parm_declarator_nostarttypename '(' parmlist_or_identifiers  %prec '.'
! 		{ $$ = build_function_declarator ($3, $1); }
  	| parm_declarator_nostarttypename array_declarator  %prec '.'
! 		{ $$ = set_array_declarator_inner ($2, $1, false); }
  	| '*' maybe_type_quals_attrs parm_declarator_starttypename  %prec UNARY
  		{ $$ = make_pointer_declarator ($2, $3); }
  	| '*' maybe_type_quals_attrs parm_declarator_nostarttypename  %prec UNARY
  		{ $$ = make_pointer_declarator ($2, $3); }
  	| '(' maybe_attribute parm_declarator_nostarttypename ')'
! 		{ $$ = $2 ? build_attrs_declarator ($2, $3) : $3; }
  	;
  
  /* A declarator allowed whether or not there has been
*************** parm_declarator_nostarttypename:
*** 1605,1621 ****
  
  notype_declarator:
  	  notype_declarator '(' parmlist_or_identifiers  %prec '.'
! 		{ $$ = build_nt (CALL_EXPR, $1, $3, NULL_TREE); }
! /*	| notype_declarator '(' error ')'  %prec '.'
! 		{ $$ = build_nt (CALL_EXPR, $1, NULL_TREE, NULL_TREE);
! 		  poplevel (0, 0, 0); }  */
  	| '(' maybe_attribute notype_declarator ')'
! 		{ $$ = $2 ? tree_cons ($2, $3, NULL_TREE) : $3; }
  	| '*' maybe_type_quals_attrs notype_declarator  %prec UNARY
  		{ $$ = make_pointer_declarator ($2, $3); }
  	| notype_declarator array_declarator  %prec '.'
! 		{ $$ = set_array_declarator_type ($2, $1, 0); }
  	| IDENTIFIER
  	;
  
  struct_head:
--- 1545,1559 ----
  
  notype_declarator:
  	  notype_declarator '(' parmlist_or_identifiers  %prec '.'
! 		{ $$ = build_function_declarator ($3, $1); }
  	| '(' maybe_attribute notype_declarator ')'
! 		{ $$ = $2 ? build_attrs_declarator ($2, $3) : $3; }
  	| '*' maybe_type_quals_attrs notype_declarator  %prec UNARY
  		{ $$ = make_pointer_declarator ($2, $3); }
  	| notype_declarator array_declarator  %prec '.'
! 		{ $$ = set_array_declarator_inner ($2, $1, false); }
  	| IDENTIFIER
+ 		{ $$ = build_id_declarator ($1); }
  	;
  
  struct_head:
*************** enum_head:
*** 1647,1694 ****
  
  structsp_attr:
  	  struct_head identifier '{'
! 		{ $$ = start_struct (RECORD_TYPE, $2);
  		  /* Start scope of tag before parsing components.  */
  		}
  	  component_decl_list '}' maybe_attribute
! 		{ $$ = finish_struct ($<ttype>4, nreverse ($5),
! 				      chainon ($1, $7)); }
  	| struct_head '{' component_decl_list '}' maybe_attribute
! 		{ $$ = finish_struct (start_struct (RECORD_TYPE, NULL_TREE),
! 				      nreverse ($3), chainon ($1, $5));
  		}
  	| union_head identifier '{'
! 		{ $$ = start_struct (UNION_TYPE, $2); }
  	  component_decl_list '}' maybe_attribute
! 		{ $$ = finish_struct ($<ttype>4, nreverse ($5),
! 				      chainon ($1, $7)); }
  	| union_head '{' component_decl_list '}' maybe_attribute
! 		{ $$ = finish_struct (start_struct (UNION_TYPE, NULL_TREE),
! 				      nreverse ($3), chainon ($1, $5));
  		}
  	| enum_head identifier '{'
! 		{ $$ = start_enum ($2); }
  	  enumlist maybecomma_warn '}' maybe_attribute
! 		{ $$ = finish_enum ($<ttype>4, nreverse ($5),
! 				    chainon ($1, $8)); }
  	| enum_head '{'
! 		{ $$ = start_enum (NULL_TREE); }
  	  enumlist maybecomma_warn '}' maybe_attribute
! 		{ $$ = finish_enum ($<ttype>3, nreverse ($4),
! 				    chainon ($1, $7)); }
  	;
  
  structsp_nonattr:
  	  struct_head identifier
! 		{ $$ = xref_tag (RECORD_TYPE, $2); }
  	| union_head identifier
! 		{ $$ = xref_tag (UNION_TYPE, $2); }
  	| enum_head identifier
! 		{ $$ = xref_tag (ENUMERAL_TYPE, $2);
  		  /* In ISO C, enumerated types can be referred to
  		     only if already defined.  */
! 		  if (pedantic && !COMPLETE_TYPE_P ($$))
! 		    pedwarn ("ISO C forbids forward references to `enum' types"); }
  	;
  
  maybecomma:
--- 1585,1640 ----
  
  structsp_attr:
  	  struct_head identifier '{'
! 		{ $<ttype>$ = start_struct (RECORD_TYPE, $2);
  		  /* Start scope of tag before parsing components.  */
  		}
  	  component_decl_list '}' maybe_attribute
! 		{ $$.spec = finish_struct ($<ttype>4, nreverse ($5),
! 					   chainon ($1, $7));
! 		  $$.kind = ctsk_tagdef; }
  	| struct_head '{' component_decl_list '}' maybe_attribute
! 		{ $$.spec = finish_struct (start_struct (RECORD_TYPE,
! 							 NULL_TREE),
! 					   nreverse ($3), chainon ($1, $5));
! 		  $$.kind = ctsk_tagdef;
  		}
  	| union_head identifier '{'
! 		{ $<ttype>$ = start_struct (UNION_TYPE, $2); }
  	  component_decl_list '}' maybe_attribute
! 		{ $$.spec = finish_struct ($<ttype>4, nreverse ($5),
! 					   chainon ($1, $7));
! 		  $$.kind = ctsk_tagdef; }
  	| union_head '{' component_decl_list '}' maybe_attribute
! 		{ $$.spec = finish_struct (start_struct (UNION_TYPE,
! 							 NULL_TREE),
! 					   nreverse ($3), chainon ($1, $5));
! 		  $$.kind = ctsk_tagdef;
  		}
  	| enum_head identifier '{'
! 		{ $<ttype>$ = start_enum ($2); }
  	  enumlist maybecomma_warn '}' maybe_attribute
! 		{ $$.spec = finish_enum ($<ttype>4, nreverse ($5),
! 					 chainon ($1, $8));
! 		  $$.kind = ctsk_tagdef; }
  	| enum_head '{'
! 		{ $<ttype>$ = start_enum (NULL_TREE); }
  	  enumlist maybecomma_warn '}' maybe_attribute
! 		{ $$.spec = finish_enum ($<ttype>3, nreverse ($4),
! 					 chainon ($1, $7));
! 		  $$.kind = ctsk_tagdef; }
  	;
  
  structsp_nonattr:
  	  struct_head identifier
! 		{ $$ = parser_xref_tag (RECORD_TYPE, $2); }
  	| union_head identifier
! 		{ $$ = parser_xref_tag (UNION_TYPE, $2); }
  	| enum_head identifier
! 		{ $$ = parser_xref_tag (ENUMERAL_TYPE, $2);
  		  /* In ISO C, enumerated types can be referred to
  		     only if already defined.  */
! 		  if (pedantic && !COMPLETE_TYPE_P ($$.spec))
! 		    pedwarn ("ISO C forbids forward references to %<enum%> types"); }
  	;
  
  maybecomma:
*************** maybecomma:
*** 1699,1705 ****
  maybecomma_warn:
  	  /* empty */
  	| ','
! 		{ if (pedantic && ! flag_isoc99)
  		    pedwarn ("comma at end of enumerator list"); }
  	;
  
--- 1645,1651 ----
  maybecomma_warn:
  	  /* empty */
  	| ','
! 		{ if (pedantic && !flag_isoc99)
  		    pedwarn ("comma at end of enumerator list"); }
  	;
  
*************** component_decl:
*** 1741,1750 ****
  		  /* Support for unnamed structs or unions as members of
  		     structs or unions (which is [a] useful and [b] supports
  		     MS P-SDK).  */
! 		  if (pedantic)
! 		    pedwarn ("ISO C doesn't support unnamed structs/unions");
! 
! 		  $$ = grokfield(NULL, current_declspecs, NULL_TREE);
  		  POP_DECLSPEC_STACK; }
  	| declspecs_nosc_nots setspecs components_notype
  		{ $$ = $3;
--- 1687,1694 ----
  		  /* Support for unnamed structs or unions as members of
  		     structs or unions (which is [a] useful and [b] supports
  		     MS P-SDK).  */
! 		  $$ = grokfield (build_id_declarator (NULL_TREE),
! 				  current_declspecs, NULL_TREE);
  		  POP_DECLSPEC_STACK; }
  	| declspecs_nosc_nots setspecs components_notype
  		{ $$ = $3;
*************** component_decl:
*** 1752,1758 ****
  	| declspecs_nosc_nots
  		{ if (pedantic)
  		    pedwarn ("ISO C forbids member declarations with no members");
! 		  shadow_tag_warned ($1, pedantic);
  		  $$ = NULL_TREE; }
  	| error
  		{ $$ = NULL_TREE; }
--- 1696,1702 ----
  	| declspecs_nosc_nots
  		{ if (pedantic)
  		    pedwarn ("ISO C forbids member declarations with no members");
! 		  shadow_tag_warned (finish_declspecs ($1), pedantic);
  		  $$ = NULL_TREE; }
  	| error
  		{ $$ = NULL_TREE; }
*************** component_declarator:
*** 1779,1789 ****
  		  decl_attributes (&$$,
  				   chainon ($2, all_prefix_attributes), 0); }
  	| declarator ':' expr_no_commas maybe_attribute
! 		{ $$ = grokfield ($1, current_declspecs, $3);
  		  decl_attributes (&$$,
  				   chainon ($4, all_prefix_attributes), 0); }
  	| ':' expr_no_commas maybe_attribute
! 		{ $$ = grokfield (NULL_TREE, current_declspecs, $2);
  		  decl_attributes (&$$,
  				   chainon ($3, all_prefix_attributes), 0); }
  	;
--- 1723,1734 ----
  		  decl_attributes (&$$,
  				   chainon ($2, all_prefix_attributes), 0); }
  	| declarator ':' expr_no_commas maybe_attribute
! 		{ $$ = grokfield ($1, current_declspecs, $3.value);
  		  decl_attributes (&$$,
  				   chainon ($4, all_prefix_attributes), 0); }
  	| ':' expr_no_commas maybe_attribute
! 		{ $$ = grokfield (build_id_declarator (NULL_TREE),
! 				  current_declspecs, $2.value);
  		  decl_attributes (&$$,
  				   chainon ($3, all_prefix_attributes), 0); }
  	;
*************** component_notype_declarator:
*** 1794,1804 ****
  		  decl_attributes (&$$,
  				   chainon ($2, all_prefix_attributes), 0); }
  	| notype_declarator ':' expr_no_commas maybe_attribute
! 		{ $$ = grokfield ($1, current_declspecs, $3);
  		  decl_attributes (&$$,
  				   chainon ($4, all_prefix_attributes), 0); }
  	| ':' expr_no_commas maybe_attribute
! 		{ $$ = grokfield (NULL_TREE, current_declspecs, $2);
  		  decl_attributes (&$$,
  				   chainon ($3, all_prefix_attributes), 0); }
  	;
--- 1739,1750 ----
  		  decl_attributes (&$$,
  				   chainon ($2, all_prefix_attributes), 0); }
  	| notype_declarator ':' expr_no_commas maybe_attribute
! 		{ $$ = grokfield ($1, current_declspecs, $3.value);
  		  decl_attributes (&$$,
  				   chainon ($4, all_prefix_attributes), 0); }
  	| ':' expr_no_commas maybe_attribute
! 		{ $$ = grokfield (build_id_declarator (NULL_TREE),
! 				  current_declspecs, $2.value);
  		  decl_attributes (&$$,
  				   chainon ($3, all_prefix_attributes), 0); }
  	;
*************** enumerator:
*** 1822,1857 ****
  	  identifier
  		{ $$ = build_enumerator ($1, NULL_TREE); }
  	| identifier '=' expr_no_commas
! 		{ $$ = build_enumerator ($1, $3); }
  	;
  
  typename:
  	  declspecs_nosc
  		{ pending_xref_error ();
! 		  $<ttype>$ = $1; }
  	  absdcl
! 		{ $$ = build_tree_list ($<ttype>2, $3); }
  	;
  
  absdcl:   /* an absolute declarator */
  	/* empty */
! 		{ $$ = NULL_TREE; }
  	| absdcl1
  	;
  
  absdcl_maybe_attribute:   /* absdcl maybe_attribute, but not just attributes */
  	/* empty */
! 		{ $$ = build_tree_list (build_tree_list (current_declspecs,
! 							 NULL_TREE),
! 					all_prefix_attributes); }
  	| absdcl1
! 		{ $$ = build_tree_list (build_tree_list (current_declspecs,
! 							 $1),
! 					all_prefix_attributes); }
  	| absdcl1_noea attributes
! 		{ $$ = build_tree_list (build_tree_list (current_declspecs,
! 							 $1),
! 					chainon ($2, all_prefix_attributes)); }
  	;
  
  absdcl1:  /* a nonempty absolute declarator */
--- 1768,1803 ----
  	  identifier
  		{ $$ = build_enumerator ($1, NULL_TREE); }
  	| identifier '=' expr_no_commas
! 		{ $$ = build_enumerator ($1, $3.value); }
  	;
  
  typename:
  	  declspecs_nosc
  		{ pending_xref_error ();
! 		  $<dsptype>$ = finish_declspecs ($1); }
  	  absdcl
! 		{ $$ = XOBNEW (&parser_obstack, struct c_type_name);
! 		  $$->specs = $<dsptype>2;
! 		  $$->declarator = $3; }
  	;
  
  absdcl:   /* an absolute declarator */
  	/* empty */
! 		{ $$ = build_id_declarator (NULL_TREE); }
  	| absdcl1
  	;
  
  absdcl_maybe_attribute:   /* absdcl maybe_attribute, but not just attributes */
  	/* empty */
! 		{ $$ = build_c_parm (current_declspecs, all_prefix_attributes,
! 				     build_id_declarator (NULL_TREE)); }
  	| absdcl1
! 		{ $$ = build_c_parm (current_declspecs, all_prefix_attributes,
! 				     $1); }
  	| absdcl1_noea attributes
! 		{ $$ = build_c_parm (current_declspecs,
! 				     chainon ($2, all_prefix_attributes),
! 				     $1); }
  	;
  
  absdcl1:  /* a nonempty absolute declarator */
*************** absdcl1_noea:
*** 1867,1904 ****
  
  absdcl1_ea:
  	  '*' maybe_type_quals_attrs
! 		{ $$ = make_pointer_declarator ($2, NULL_TREE); }
  	| '*' maybe_type_quals_attrs absdcl1_ea
  		{ $$ = make_pointer_declarator ($2, $3); }
  	;
  
  direct_absdcl1:
  	  '(' maybe_attribute absdcl1 ')'
! 		{ $$ = $2 ? tree_cons ($2, $3, NULL_TREE) : $3; }
  	| direct_absdcl1 '(' parmlist
! 		{ $$ = build_nt (CALL_EXPR, $1, $3, NULL_TREE); }
  	| direct_absdcl1 array_declarator
! 		{ $$ = set_array_declarator_type ($2, $1, 1); }
  	| '(' parmlist
! 		{ $$ = build_nt (CALL_EXPR, NULL_TREE, $2, NULL_TREE); }
  	| array_declarator
! 		{ $$ = set_array_declarator_type ($1, NULL_TREE, 1); }
  	;
  
  /* The [...] part of a declarator for an array type.  */
  
  array_declarator:
  	'[' maybe_type_quals_attrs expr_no_commas ']'
! 		{ $$ = build_array_declarator ($3, $2, 0, 0); }
  	| '[' maybe_type_quals_attrs ']'
! 		{ $$ = build_array_declarator (NULL_TREE, $2, 0, 0); }
  	| '[' maybe_type_quals_attrs '*' ']'
! 		{ $$ = build_array_declarator (NULL_TREE, $2, 0, 1); }
  	| '[' STATIC maybe_type_quals_attrs expr_no_commas ']'
! 		{ $$ = build_array_declarator ($4, $3, 1, 0); }
  	/* declspecs_nosc_nots is a synonym for type_quals_attrs.  */
  	| '[' declspecs_nosc_nots STATIC expr_no_commas ']'
! 		{ $$ = build_array_declarator ($4, $2, 1, 0); }
  	;
  
  /* A nonempty series of declarations and statements (possibly followed by
--- 1813,1853 ----
  
  absdcl1_ea:
  	  '*' maybe_type_quals_attrs
! 		{ $$ = make_pointer_declarator
! 		    ($2, build_id_declarator (NULL_TREE)); }
  	| '*' maybe_type_quals_attrs absdcl1_ea
  		{ $$ = make_pointer_declarator ($2, $3); }
  	;
  
  direct_absdcl1:
  	  '(' maybe_attribute absdcl1 ')'
! 		{ $$ = $2 ? build_attrs_declarator ($2, $3) : $3; }
  	| direct_absdcl1 '(' parmlist
! 		{ $$ = build_function_declarator ($3, $1); }
  	| direct_absdcl1 array_declarator
! 		{ $$ = set_array_declarator_inner ($2, $1, true); }
  	| '(' parmlist
! 		{ $$ = build_function_declarator
! 		    ($2, build_id_declarator (NULL_TREE)); }
  	| array_declarator
! 		{ $$ = set_array_declarator_inner
! 		    ($1, build_id_declarator (NULL_TREE), true); }
  	;
  
  /* The [...] part of a declarator for an array type.  */
  
  array_declarator:
  	'[' maybe_type_quals_attrs expr_no_commas ']'
! 		{ $$ = build_array_declarator ($3.value, $2, false, false); }
  	| '[' maybe_type_quals_attrs ']'
! 		{ $$ = build_array_declarator (NULL_TREE, $2, false, false); }
  	| '[' maybe_type_quals_attrs '*' ']'
! 		{ $$ = build_array_declarator (NULL_TREE, $2, false, true); }
  	| '[' STATIC maybe_type_quals_attrs expr_no_commas ']'
! 		{ $$ = build_array_declarator ($4.value, $3, true, false); }
  	/* declspecs_nosc_nots is a synonym for type_quals_attrs.  */
  	| '[' declspecs_nosc_nots STATIC expr_no_commas ']'
! 		{ $$ = build_array_declarator ($4.value, $2, true, false); }
  	;
  
  /* A nonempty series of declarations and statements (possibly followed by
*************** lineno_stmt_decl_or_labels:
*** 1960,2006 ****
  errstmt:  error ';'
  	;
  
- pushlevel:  /* empty */
- 		{ pushlevel (0);
- 		  clear_last_expr ();
- 		  add_scope_stmt (/*begin_p=*/1, /*partial_p=*/0);
- 		}
- 	;
- 
- poplevel:  /* empty */
-                 {
- 		  $$ = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0);
- 		}
-         ;
- 
  /* Start and end blocks created for the new scopes of C99.  */
  c99_block_start: /* empty */
! 		{ if (flag_isoc99)
! 		    {
! 		      $$ = c_begin_compound_stmt ();
! 		      pushlevel (0);
! 		      clear_last_expr ();
! 		      add_scope_stmt (/*begin_p=*/1, /*partial_p=*/0);
! 		    }
! 		  else
! 		    $$ = NULL_TREE;
! 		}
! 	;
! 
! /* Productions using c99_block_start and c99_block_end will need to do what's
!    in compstmt: RECHAIN_STMTS ($1, COMPOUND_BODY ($1)); $$ = $2; where
!    $1 is the value of c99_block_start and $2 of c99_block_end.  */
! c99_block_end: /* empty */
!                 { if (flag_isoc99)
! 		    {
! 		      tree scope_stmt = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0);
! 		      $$ = poplevel (KEEP_MAYBE, 0, 0);
! 		      SCOPE_STMT_BLOCK (TREE_PURPOSE (scope_stmt))
! 			= SCOPE_STMT_BLOCK (TREE_VALUE (scope_stmt))
! 			= $$;
! 		    }
! 		  else
! 		    $$ = NULL_TREE; }
  	;
  
  /* Read zero or more forward-declarations for labels
--- 1909,1917 ----
  errstmt:  error ';'
  	;
  
  /* Start and end blocks created for the new scopes of C99.  */
  c99_block_start: /* empty */
! 		{ $$ = c_begin_compound_stmt (flag_isoc99); }
  	;
  
  /* Read zero or more forward-declarations for labels
*************** label_decl:
*** 2024,2030 ****
  		    {
  		      tree label = declare_label (TREE_VALUE (link));
  		      C_DECLARED_LABEL_FLAG (label) = 1;
! 		      add_decl_stmt (label);
  		    }
  		}
  	;
--- 1935,1941 ----
  		    {
  		      tree label = declare_label (TREE_VALUE (link));
  		      C_DECLARED_LABEL_FLAG (label) = 1;
! 		      add_stmt (build_stmt (DECL_EXPR, label));
  		    }
  		}
  	;
*************** label_decl:
*** 2033,2053 ****
     It causes syntax errors to ignore to the next openbrace.  */
  compstmt_or_error:
  	  compstmt
! 		{}
  	| error compstmt
  	;
  
! compstmt_start: '{' { compstmt_count++;
!                       $$ = c_begin_compound_stmt (); }
          ;
  
  compstmt_nostart: '}'
! 		{ $$ = convert (void_type_node, integer_zero_node); }
! 	| pushlevel maybe_label_decls compstmt_contents_nonempty '}' poplevel
! 		{ $$ = poplevel (KEEP_MAYBE, 0, 0);
! 		  SCOPE_STMT_BLOCK (TREE_PURPOSE ($5))
! 		    = SCOPE_STMT_BLOCK (TREE_VALUE ($5))
! 		    = $$; }
  	;
  
  compstmt_contents_nonempty:
--- 1944,1958 ----
     It causes syntax errors to ignore to the next openbrace.  */
  compstmt_or_error:
  	  compstmt
! 		{ add_stmt ($1); }
  	| error compstmt
  	;
  
! compstmt_start: '{' { $$ = c_begin_compound_stmt (true); }
          ;
  
  compstmt_nostart: '}'
! 	| maybe_label_decls compstmt_contents_nonempty '}'
  	;
  
  compstmt_contents_nonempty:
*************** compstmt_contents_nonempty:
*** 2057,2132 ****
  
  compstmt_primary_start:
  	'(' '{'
! 		{ if (last_tree == NULL)
  		    {
! 		      error ("braced-group within expression allowed only inside a function");
  		      YYERROR;
  		    }
! 		  /* We must force a BLOCK for this level
! 		     so that, if it is not expanded later,
! 		     there is a way to turn off the entire subtree of blocks
! 		     that are contained in it.  */
! 		  keep_next_level ();
! 		  compstmt_count++;
! 		  $$ = add_stmt (build_stmt (COMPOUND_STMT, last_tree));
! 		  last_expr_type = NULL_TREE;
  		}
          ;
  
  compstmt: compstmt_start compstmt_nostart
! 		{ RECHAIN_STMTS ($1, COMPOUND_BODY ($1));
! 		  last_expr_type = NULL_TREE;
!                   $$ = $1; }
! 	;
! 
! /* Value is number of statements counted as of the closeparen.  */
! simple_if:
! 	  if_prefix c99_block_lineno_labeled_stmt
!                 { c_finish_then (); }
! /* Make sure c_expand_end_cond is run once
!    for each call to c_expand_start_cond.
!    Otherwise a crash is likely.  */
! 	| if_prefix error
! 	;
! 
! if_prefix:
! 	  /* We must build the IF_STMT node before parsing its
! 	     condition so that STMT_LINENO refers to the line
! 	     containing the "if", and not the line containing
! 	     the close-parenthesis.
! 
! 	     c_begin_if_stmt returns the IF_STMT node, which
! 	     we later pass to c_expand_start_cond to fill
! 	     in the condition and other tidbits.  */
!           IF
!                 { $<ttype>$ = c_begin_if_stmt (); }
!             '(' expr ')'
! 		{ c_expand_start_cond (c_common_truthvalue_conversion ($4),
! 				       compstmt_count,$<ttype>2);
! 		  $<itype>$ = stmt_count;
! 		  if_stmt_locus = $<location>-1; }
!         ;
! 
! /* This is a subroutine of stmt.
!    It is used twice, once for valid DO statements
!    and once for catching errors in parsing the end test.  */
! do_stmt_start:
! 	  DO
! 		{ stmt_count++;
! 		  compstmt_count++;
! 		  c_in_iteration_stmt++;
! 		  $<ttype>$
! 		    = add_stmt (build_stmt (DO_STMT, NULL_TREE,
! 					    NULL_TREE));
! 		  /* In the event that a parse error prevents
! 		     parsing the complete do-statement, set the
! 		     condition now.  Otherwise, we can get crashes at
! 		     RTL-generation time.  */
! 		  DO_COND ($<ttype>$) = error_mark_node; }
! 	  c99_block_lineno_labeled_stmt WHILE
! 		{ $$ = $<ttype>2;
! 		  RECHAIN_STMTS ($$, DO_BODY ($$));
! 		  c_in_iteration_stmt--; }
  	;
  
  /* The forced readahead in here is because we might be at the end of a
--- 1962,1979 ----
  
  compstmt_primary_start:
  	'(' '{'
! 		{ if (cur_stmt_list == NULL)
  		    {
! 		      error ("braced-group within expression allowed "
! 			     "only inside a function");
  		      YYERROR;
  		    }
! 		  $$ = c_begin_stmt_expr ();
  		}
          ;
  
  compstmt: compstmt_start compstmt_nostart
! 		{ $$ = c_end_compound_stmt ($1, true); }
  	;
  
  /* The forced readahead in here is because we might be at the end of a
*************** save_location:
*** 2139,2373 ****
  		  $$ = input_location; }
  	;
  
! lineno_labeled_stmt:
! 	  lineno_stmt
! 	| lineno_label lineno_labeled_stmt
  	;
  
! /* Like lineno_labeled_stmt, but a block in C99.  */
  c99_block_lineno_labeled_stmt:
! 	  c99_block_start lineno_labeled_stmt c99_block_end
! 		{ if (flag_isoc99)
! 		    RECHAIN_STMTS ($1, COMPOUND_BODY ($1)); }
  	;
  
  lineno_stmt:
  	  save_location stmt
! 		{ if ($2)
! 		    {
! 		      STMT_LINENO ($2) = $1.line;
! 		      /* ??? We currently have no way of recording
! 			 the filename for a statement.  This probably
! 			 matters little in practice at the moment,
! 			 but I suspect that problems will occur when
! 			 doing inlining at the tree level.  */
! 		    }
  		}
  	;
  
  lineno_label:
  	  save_location label
! 		{ if ($2)
! 		    {
! 		      STMT_LINENO ($2) = $1.line;
! 		    }
! 		}
  	;
  
! select_or_iter_stmt:
! 	  simple_if ELSE
! 		{ c_expand_start_else ();
! 		  $<itype>1 = stmt_count; }
! 	  c99_block_lineno_labeled_stmt
!                 { c_finish_else ();
! 		  c_expand_end_cond ();
! 		  if (extra_warnings && stmt_count == $<itype>1)
! 		    warning ("empty body in an else-statement"); }
! 	| simple_if %prec IF
! 		{ c_expand_end_cond ();
! 		  /* This warning is here instead of in simple_if, because we
! 		     do not want a warning if an empty if is followed by an
! 		     else statement.  Increment stmt_count so we don't
! 		     give a second error if this is a nested `if'.  */
! 		  if (extra_warnings && stmt_count++ == $<itype>1)
! 		    warning ("%Hempty body in an if-statement",
!                              &if_stmt_locus); }
! /* Make sure c_expand_end_cond is run once
!    for each call to c_expand_start_cond.
!    Otherwise a crash is likely.  */
! 	| simple_if ELSE error
! 		{ c_expand_end_cond (); }
!        /* We must build the WHILE_STMT node before parsing its
! 	  condition so that STMT_LINENO refers to the line
! 	  containing the "while", and not the line containing
! 	  the close-parenthesis.
  
! 	  c_begin_while_stmt returns the WHILE_STMT node, which
! 	  we later pass to c_finish_while_stmt_cond to fill
! 	  in the condition and other tidbits.  */
! 	| WHILE
!                 { stmt_count++;
! 		  $<ttype>$ = c_begin_while_stmt (); }
! 	  '(' expr ')'
!                 { c_in_iteration_stmt++;
! 		  $4 = c_common_truthvalue_conversion ($4);
! 		  c_finish_while_stmt_cond
! 		    (c_common_truthvalue_conversion ($4), $<ttype>2);
! 		  $<ttype>$ = add_stmt ($<ttype>2); }
! 	  c99_block_lineno_labeled_stmt
!                 { c_in_iteration_stmt--;
! 		  RECHAIN_STMTS ($<ttype>6, WHILE_BODY ($<ttype>6)); }
! 	| do_stmt_start
! 	  '(' expr ')' ';'
!                 { DO_COND ($1) = c_common_truthvalue_conversion ($3); }
! 	| do_stmt_start error
! 		{ }
! 	| FOR
! 		{ $<ttype>$ = build_stmt (FOR_STMT, NULL_TREE, NULL_TREE,
! 					  NULL_TREE, NULL_TREE);
! 		  add_stmt ($<ttype>$); }
! 	  '(' for_init_stmt
! 		{ stmt_count++;
! 		  RECHAIN_STMTS ($<ttype>2, FOR_INIT_STMT ($<ttype>2)); }
! 	  xexpr ';'
!                 { if ($6)
! 		    FOR_COND ($<ttype>2)
! 		      = c_common_truthvalue_conversion ($6); }
! 	  xexpr ')'
!                 { c_in_iteration_stmt++;
! 		  FOR_EXPR ($<ttype>2) = $9; }
! 	  c99_block_lineno_labeled_stmt
!                 { RECHAIN_STMTS ($<ttype>2, FOR_BODY ($<ttype>2));
! 		  c_in_iteration_stmt--;}
! 	| SWITCH '(' expr ')'
! 		{ stmt_count++;
! 		  $<ttype>$ = c_start_case ($3);
! 		  c_in_case_stmt++; }
! 	  c99_block_lineno_labeled_stmt
!                 { c_finish_case ();
! 		  c_in_case_stmt--; }
  	;
  
  for_init_stmt:
  	  xexpr ';'
! 		{ add_stmt (build_stmt (EXPR_STMT, $1)); }
  	| decl
  		{ check_for_loop_decls (); }
  	;
  
! /* Parse a single real statement, not including any labels.  */
! stmt:
! 	  compstmt
! 		{ stmt_count++; $$ = $1; }
! 	| expr ';'
! 		{ stmt_count++;
! 		  $$ = c_expand_expr_stmt ($1); }
! 	| c99_block_start select_or_iter_stmt c99_block_end
! 		{ if (flag_isoc99)
! 		    RECHAIN_STMTS ($1, COMPOUND_BODY ($1));
! 		  $$ = NULL_TREE; }
  	| BREAK ';'
! 	        { stmt_count++;
! 		if (!(c_in_iteration_stmt || c_in_case_stmt))
! 		  {
! 		    error ("break statement not within loop or switch");
! 		    $$ = NULL_TREE;
! 		  }
! 		else
! 		  $$ = add_stmt (build_break_stmt ()); }
  	| CONTINUE ';'
!                 { stmt_count++;
! 		if (!c_in_iteration_stmt)
! 		  {
! 		    error ("continue statement not within a loop");
! 		    $$ = NULL_TREE;
! 		  }
! 		else
! 		  $$ = add_stmt (build_continue_stmt ()); }
  	| RETURN ';'
!                 { stmt_count++;
! 		  $$ = c_expand_return (NULL_TREE); }
  	| RETURN expr ';'
!                 { stmt_count++;
! 		  $$ = c_expand_return ($2); }
! 	| ASM_KEYWORD maybe_type_qual '(' expr ')' ';'
! 		{ stmt_count++;
! 		  $$ = simple_asm_stmt ($4); }
! 	/* This is the case with just output operands.  */
! 	| ASM_KEYWORD maybe_type_qual '(' expr ':' asm_operands ')' ';'
! 		{ stmt_count++;
! 		  $$ = build_asm_stmt ($2, $4, $6, NULL_TREE, NULL_TREE); }
! 	/* This is the case with input operands as well.  */
! 	| ASM_KEYWORD maybe_type_qual '(' expr ':' asm_operands ':'
! 	  asm_operands ')' ';'
! 		{ stmt_count++;
! 		  $$ = build_asm_stmt ($2, $4, $6, $8, NULL_TREE); }
! 	/* This is the case with clobbered registers as well.  */
! 	| ASM_KEYWORD maybe_type_qual '(' expr ':' asm_operands ':'
! 	  asm_operands ':' asm_clobbers ')' ';'
! 		{ stmt_count++;
! 		  $$ = build_asm_stmt ($2, $4, $6, $8, $10); }
  	| GOTO identifier ';'
! 		{ tree decl;
! 		  stmt_count++;
! 		  decl = lookup_label ($2);
! 		  if (decl != 0)
! 		    {
! 		      TREE_USED (decl) = 1;
! 		      $$ = add_stmt (build_stmt (GOTO_STMT, decl));
! 		    }
! 		  else
! 		    $$ = NULL_TREE;
! 		}
  	| GOTO '*' expr ';'
! 		{ if (pedantic)
! 		    pedwarn ("ISO C forbids `goto *expr;'");
! 		  stmt_count++;
! 		  $3 = convert (ptr_type_node, $3);
! 		  $$ = add_stmt (build_stmt (GOTO_STMT, $3)); }
  	| ';'
  		{ $$ = NULL_TREE; }
  	;
  
  /* Any kind of label, including jump labels and case labels.
     ANSI C accepts labels only before statements, but we allow them
     also at the end of a compound statement.  */
  
  label:	  CASE expr_no_commas ':'
!                 { stmt_count++;
! 		  $$ = do_case ($2, NULL_TREE); }
  	| CASE expr_no_commas ELLIPSIS expr_no_commas ':'
!                 { stmt_count++;
! 		  $$ = do_case ($2, $4); }
  	| DEFAULT ':'
!                 { stmt_count++;
! 		  $$ = do_case (NULL_TREE, NULL_TREE); }
  	| identifier save_location ':' maybe_attribute
  		{ tree label = define_label ($2, $1);
- 		  stmt_count++;
  		  if (label)
  		    {
  		      decl_attributes (&label, $4, 0);
! 		      $$ = add_stmt (build_stmt (LABEL_STMT, label));
  		    }
  		  else
  		    $$ = NULL_TREE;
  		}
  	;
  
! /* Either a type-qualifier or nothing.  First thing in an `asm' statement.  */
  
! maybe_type_qual:
! 	/* empty */
  		{ $$ = NULL_TREE; }
! 	| TYPE_QUAL
! 		{ }
  	;
  
! xexpr:
  	/* empty */
! 		{ $$ = NULL_TREE; }
! 	| expr
  	;
  
  /* These are the operands other than the first string and colon
--- 1986,2271 ----
  		  $$ = input_location; }
  	;
  
! lineno_labels:
! 	  /* empty */
! 	| lineno_labels lineno_label
  	;
  
! /* A labeled statement.  In C99 it also generates an implicit block.  */
  c99_block_lineno_labeled_stmt:
! 	  c99_block_start lineno_labels lineno_stmt
!                 { $$ = c_end_compound_stmt ($1, flag_isoc99); }
  	;
  
  lineno_stmt:
  	  save_location stmt
! 		{
! 		  /* Two cases cannot and do not have line numbers associated:
! 		     If stmt is degenerate, such as "2;", then stmt is an
! 		     INTEGER_CST, which cannot hold line numbers.  But that's
! 		     ok because the statement will either be changed to a
! 		     MODIFY_EXPR during gimplification of the statement expr,
! 		     or discarded.  If stmt was compound, but without new
! 		     variables, we will have skipped the creation of a BIND
! 		     and will have a bare STATEMENT_LIST.  But that's ok
! 		     because (recursively) all of the component statments
! 		     should already have line numbers assigned.  */
! 		  if ($2 && EXPR_P ($2))
! 		    SET_EXPR_LOCATION ($2, $1);
  		}
  	;
  
  lineno_label:
  	  save_location label
! 		{ if ($2) SET_EXPR_LOCATION ($2, $1); }
  	;
  
! condition: save_location expr
! 		{ $$ = lang_hooks.truthvalue_conversion ($2.value);
! 		  if (EXPR_P ($$))
! 		    SET_EXPR_LOCATION ($$, $1); }
! 	;
  
! /* Implement -Wparenthesis by special casing IF statement directly nested
!    within IF statement.  This requires some amount of duplication of the
!    productions under c99_block_lineno_labeled_stmt in order to work out.
!    But it's still likely more maintainable than lots of state outside the
!    parser...  */
! 
! if_statement_1:
! 	c99_block_start lineno_labels if_statement
! 		{ $$ = c_end_compound_stmt ($1, flag_isoc99); }
! 	;
! 
! if_statement_2:
! 	  c99_block_start lineno_labels ';'
! 		{ if (extra_warnings)
! 		    add_stmt (build (NOP_EXPR, NULL_TREE, NULL_TREE));
! 		  $$ = c_end_compound_stmt ($1, flag_isoc99); }
! 	| c99_block_lineno_labeled_stmt
! 	;
! 
! if_statement:
! 	  IF c99_block_start save_location '(' condition ')'
! 	    if_statement_1 ELSE if_statement_2
! 		{ c_finish_if_stmt ($3, $5, $7, $9, true);
! 		  add_stmt (c_end_compound_stmt ($2, flag_isoc99)); }
! 	| IF c99_block_start save_location '(' condition ')'
! 	    if_statement_2 ELSE if_statement_2
! 		{ c_finish_if_stmt ($3, $5, $7, $9, false);
! 		  add_stmt (c_end_compound_stmt ($2, flag_isoc99)); }
! 	| IF c99_block_start save_location '(' condition ')'
! 	    if_statement_1				%prec IF
! 		{ c_finish_if_stmt ($3, $5, $7, NULL, true);
! 		  add_stmt (c_end_compound_stmt ($2, flag_isoc99)); }
! 	| IF c99_block_start save_location '(' condition ')'
! 	    if_statement_2				%prec IF
! 		{ c_finish_if_stmt ($3, $5, $7, NULL, false);
! 		  add_stmt (c_end_compound_stmt ($2, flag_isoc99)); }
! 	;
! 
! start_break: /* empty */
! 		{ $$ = c_break_label; c_break_label = NULL; }
! 	;
! 
! start_continue: /* empty */
! 		{ $$ = c_cont_label; c_cont_label = NULL; }
! 	;
! 
! while_statement:
! 	WHILE c99_block_start save_location '(' condition ')'
! 	start_break start_continue c99_block_lineno_labeled_stmt
! 		{ c_finish_loop ($3, $5, NULL, $9, c_break_label,
! 				 c_cont_label, true);
! 		  add_stmt (c_end_compound_stmt ($2, flag_isoc99));
! 		  c_break_label = $7; c_cont_label = $8; }
! 	;
! 
! do_statement:
! 	DO c99_block_start save_location start_break start_continue
! 	c99_block_lineno_labeled_stmt WHILE
! 		{ $<ttype>$ = c_break_label; c_break_label = $4; }
! 		{ $<ttype>$ = c_cont_label; c_cont_label = $5; }
! 	'(' condition ')' ';'
!                 { c_finish_loop ($3, $11, NULL, $6, $<ttype>8,
! 				 $<ttype>9, false);
! 		  add_stmt (c_end_compound_stmt ($2, flag_isoc99)); }
! 	;
! 
! xexpr:
! 	/* empty */
! 		{ $$ = NULL_TREE; }
! 	| expr
! 		{ $$ = $1.value; }
  	;
  
  for_init_stmt:
  	  xexpr ';'
! 		{ c_finish_expr_stmt ($1); }
  	| decl
  		{ check_for_loop_decls (); }
  	;
  
! for_cond_expr: save_location xexpr
! 		{ if ($2)
! 		    {
! 		      $$ = lang_hooks.truthvalue_conversion ($2);
! 		      if (EXPR_P ($$))
! 			SET_EXPR_LOCATION ($$, $1);
! 		    }
! 		  else
! 		    $$ = NULL;
! 		}
! 	;
! 
! for_incr_expr: xexpr
! 		{ $$ = c_process_expr_stmt ($1); }
! 	;
! 
! for_statement:
! 	FOR c99_block_start '(' for_init_stmt
! 	save_location for_cond_expr ';' for_incr_expr ')'
! 	start_break start_continue c99_block_lineno_labeled_stmt
! 		{ c_finish_loop ($5, $6, $8, $12, c_break_label,
! 				 c_cont_label, true);
! 		  add_stmt (c_end_compound_stmt ($2, flag_isoc99));
! 		  c_break_label = $10; c_cont_label = $11; }
! 	;
! 
! switch_statement:
! 	SWITCH c99_block_start '(' expr ')'
! 		{ $<ttype>$ = c_start_case ($4.value); }
! 	start_break c99_block_lineno_labeled_stmt
!                 { c_finish_case ($8);
! 		  if (c_break_label)
! 		    add_stmt (build (LABEL_EXPR, void_type_node,
! 				     c_break_label));
! 		  c_break_label = $7;
! 		  add_stmt (c_end_compound_stmt ($2, flag_isoc99)); }
! 	;
! 
! /* Parse a single real statement, not including any labels or compounds.  */
! stmt_nocomp:
! 	  expr ';'
! 		{ $$ = c_finish_expr_stmt ($1.value); }
! 	| if_statement
! 		{ $$ = NULL_TREE; }
! 	| while_statement
! 		{ $$ = NULL_TREE; }
! 	| do_statement
! 		{ $$ = NULL_TREE; }
! 	| for_statement
! 		{ $$ = NULL_TREE; }
! 	| switch_statement
! 		{ $$ = NULL_TREE; }
  	| BREAK ';'
! 	        { $$ = c_finish_bc_stmt (&c_break_label, true); }
  	| CONTINUE ';'
!                 { $$ = c_finish_bc_stmt (&c_cont_label, false); }
  	| RETURN ';'
!                 { $$ = c_finish_return (NULL_TREE); }
  	| RETURN expr ';'
!                 { $$ = c_finish_return ($2.value); }
! 	| asm_stmt
  	| GOTO identifier ';'
! 		{ $$ = c_finish_goto_label ($2); }
  	| GOTO '*' expr ';'
! 		{ $$ = c_finish_goto_ptr ($3.value); }
  	| ';'
  		{ $$ = NULL_TREE; }
  	;
  
+ /* Parse a single or compound real statement, not including any labels.  */
+ stmt:
+ 	  compstmt
+ 		{ add_stmt ($1); $$ = NULL_TREE; }
+ 	| stmt_nocomp
+ 	;
+ 
  /* Any kind of label, including jump labels and case labels.
     ANSI C accepts labels only before statements, but we allow them
     also at the end of a compound statement.  */
  
  label:	  CASE expr_no_commas ':'
!                 { $$ = do_case ($2.value, NULL_TREE); }
  	| CASE expr_no_commas ELLIPSIS expr_no_commas ':'
!                 { $$ = do_case ($2.value, $4.value); }
  	| DEFAULT ':'
!                 { $$ = do_case (NULL_TREE, NULL_TREE); }
  	| identifier save_location ':' maybe_attribute
  		{ tree label = define_label ($2, $1);
  		  if (label)
  		    {
  		      decl_attributes (&label, $4, 0);
! 		      $$ = add_stmt (build_stmt (LABEL_EXPR, label));
  		    }
  		  else
  		    $$ = NULL_TREE;
  		}
  	;
  
! /* Asm expressions and statements */
  
! /* simple_asm_expr is used in restricted contexts, where a full
!    expression with inputs and outputs does not make sense.  */
! simple_asm_expr:
! 	ASM_KEYWORD stop_string_translation
! 	      '(' asm_string ')' start_string_translation
! 		{ $$ = $4; }
! 	;
! 
! /* maybeasm: used for assembly names for declarations */
! maybeasm:
! 	  /* empty */
  		{ $$ = NULL_TREE; }
! 	| simple_asm_expr
  	;
  
! /* asmdef: asm() outside a function body.  */
! asmdef:
! 	simple_asm_expr ';'
! 		{ assemble_asm ($1); }
!         | ASM_KEYWORD error start_string_translation ';'
!                 {}
! 	;
! 
! /* Full-blown asm statement with inputs, outputs, clobbers, and
!    volatile tag allowed.  */
! asm_stmt:
! 	ASM_KEYWORD maybe_volatile stop_string_translation
! 	        '(' asm_argument ')' start_string_translation ';'
! 		{ $$ = build_asm_stmt ($2, $5); }
! 	;
! 
! asm_argument:
! 	/* no operands */
! 	asm_string
! 		{ $$ = build_asm_expr ($1, 0, 0, 0, true); }
! 	/* output operands */
! 	| asm_string ':' asm_operands
! 		{ $$ = build_asm_expr ($1, $3, 0, 0, false); }
! 	/* output and input operands */
! 	| asm_string ':' asm_operands ':' asm_operands
! 		{ $$ = build_asm_expr ($1, $3, $5, 0, false); }
! 	/* output and input operands and clobbers */
! 	| asm_string ':' asm_operands ':' asm_operands ':' asm_clobbers
! 		{ $$ = build_asm_expr ($1, $3, $5, $7, false); }
! 	;
! 
! /* Either 'volatile' or nothing.  First thing in an `asm' statement.  */
! 
! maybe_volatile:
  	/* empty */
! 		{ $$ = 0; }
! 	| TYPE_QUAL
! 		{ if ($1 != ridpointers[RID_VOLATILE])
! 		    {
! 		      warning ("%E qualifier ignored on asm", $1);
! 		      $$ = 0;
! 		    }
! 		  else
! 		    $$ = $1;
! 		}
  	;
  
  /* These are the operands other than the first string and colon
*************** nonnull_asm_operands:
*** 2384,2403 ****
  	;
  
  asm_operand:
! 	  STRING '(' expr ')'
! 		{ $$ = build_tree_list (build_tree_list (NULL_TREE, $1), $3); }
! 	| '[' identifier ']' STRING '(' expr ')'
  		{ $2 = build_string (IDENTIFIER_LENGTH ($2),
  				     IDENTIFIER_POINTER ($2));
! 		  $$ = build_tree_list (build_tree_list ($2, $4), $6); }
  	;
  
  asm_clobbers:
! 	  STRING
  		{ $$ = tree_cons (NULL_TREE, $1, NULL_TREE); }
! 	| asm_clobbers ',' STRING
  		{ $$ = tree_cons (NULL_TREE, $3, $1); }
  	;
  
  /* This is what appears inside the parens in a function declarator.
     Its value is a list of ..._TYPE nodes.  Attributes must appear here
--- 2282,2326 ----
  	;
  
  asm_operand:
! 	  asm_string start_string_translation '(' expr ')'
! 	    stop_string_translation
! 		{ $$ = build_tree_list (build_tree_list (NULL_TREE, $1),
! 					$4.value); }
! 	| '[' identifier ']' asm_string start_string_translation
! 	  '(' expr ')' stop_string_translation
  		{ $2 = build_string (IDENTIFIER_LENGTH ($2),
  				     IDENTIFIER_POINTER ($2));
! 		  $$ = build_tree_list (build_tree_list ($2, $4), $7.value); }
  	;
  
  asm_clobbers:
! 	  asm_string
  		{ $$ = tree_cons (NULL_TREE, $1, NULL_TREE); }
! 	| asm_clobbers ',' asm_string
  		{ $$ = tree_cons (NULL_TREE, $3, $1); }
  	;
+ 
+ /* Strings in 'asm' must be narrow strings.  */
+ asm_string:
+ 	  STRING
+ 		{ if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE ($1)))
+ 		      != char_type_node)
+ 		    {
+ 		      error ("wide string literal in %<asm%>");
+ 		      $$ = build_string (1, "");
+ 		    }
+ 		  else
+ 		    $$ = $1; }
+ 	;
+ 
+ stop_string_translation:
+         { c_lex_string_translate = 0; }
+         ;
+ 
+ start_string_translation:
+         { c_lex_string_translate = 1; }
+         ;
+ 
  
  /* This is what appears inside the parens in a function declarator.
     Its value is a list of ..._TYPE nodes.  Attributes must appear here
*************** asm_clobbers:
*** 2406,2416 ****
     "void bar (int (__attribute__((__mode__(SI))) int foo));".  */
  parmlist:
  	  maybe_attribute
! 		{ pushlevel (0);
  		  declare_parm_level (); }
  	  parmlist_1
  		{ $$ = $3;
! 		  poplevel (0, 0, 0); }
  	;
  
  parmlist_1:
--- 2329,2339 ----
     "void bar (int (__attribute__((__mode__(SI))) int foo));".  */
  parmlist:
  	  maybe_attribute
! 		{ push_scope ();
  		  declare_parm_level (); }
  	  parmlist_1
  		{ $$ = $3;
! 		  pop_scope (); }
  	;
  
  parmlist_1:
*************** parmlist_1:
*** 2423,2454 ****
  	  parmlist_1
  		{ $$ = $6; }
  	| error ')'
! 		{ $$ = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); }
  	;
  
  /* This is what appears inside the parens in a function declarator.
!    Is value is represented in the format that grokdeclarator expects.  */
  parmlist_2:  /* empty */
! 		{ $$ = get_parm_info (0); }
  	| ELLIPSIS
! 		{ $$ = get_parm_info (0);
! 		  /* Gcc used to allow this as an extension.  However, it does
! 		     not work for all targets, and thus has been disabled.
! 		     Also, since func (...) and func () are indistinguishable,
! 		     it caused problems with the code in expand_builtin which
! 		     tries to verify that BUILT_IN_NEXT_ARG is being used
! 		     correctly.  */
! 		  error ("ISO C requires a named argument before `...'");
! 		  parsing_iso_function_signature = true;
  		}
  	| parms
! 		{ $$ = get_parm_info (1);
! 		  parsing_iso_function_signature = true;
! 		}
  	| parms ',' ELLIPSIS
! 		{ $$ = get_parm_info (0);
! 		  parsing_iso_function_signature = true;
! 		}
  	;
  
  parms:
--- 2346,2379 ----
  	  parmlist_1
  		{ $$ = $6; }
  	| error ')'
! 		{ $$ = XOBNEW (&parser_obstack, struct c_arg_info);
! 		  $$->parms = 0;
! 		  $$->tags = 0;
! 		  $$->types = 0;
! 		  $$->others = 0; }
  	;
  
  /* This is what appears inside the parens in a function declarator.
!    Its value is represented in the format that grokdeclarator expects.  */
  parmlist_2:  /* empty */
! 		{ $$ = XOBNEW (&parser_obstack, struct c_arg_info);
! 		  $$->parms = 0;
! 		  $$->tags = 0;
! 		  $$->types = 0;
! 		  $$->others = 0; }
  	| ELLIPSIS
! 		{ $$ = XOBNEW (&parser_obstack, struct c_arg_info);
! 		  $$->parms = 0;
! 		  $$->tags = 0;
! 		  $$->others = 0;
! 		  /* Suppress -Wold-style-definition for this case.  */
! 		  $$->types = error_mark_node;
! 		  error ("ISO C requires a named argument before %<...%>");
  		}
  	| parms
! 		{ $$ = get_parm_info (/*ellipsis=*/false); }
  	| parms ',' ELLIPSIS
! 		{ $$ = get_parm_info (/*ellipsis=*/true); }
  	;
  
  parms:
*************** parms:
*** 2462,2483 ****
     as found in a parmlist.  */
  parm:
  	  declspecs_ts setspecs parm_declarator maybe_attribute
! 		{ $$ = build_tree_list (build_tree_list (current_declspecs,
! 							 $3),
! 					chainon ($4, all_prefix_attributes));
  		  POP_DECLSPEC_STACK; }
  	| declspecs_ts setspecs notype_declarator maybe_attribute
! 		{ $$ = build_tree_list (build_tree_list (current_declspecs,
! 							 $3),
! 					chainon ($4, all_prefix_attributes));
  		  POP_DECLSPEC_STACK; }
  	| declspecs_ts setspecs absdcl_maybe_attribute
  		{ $$ = $3;
  		  POP_DECLSPEC_STACK; }
  	| declspecs_nots setspecs notype_declarator maybe_attribute
! 		{ $$ = build_tree_list (build_tree_list (current_declspecs,
! 							 $3),
! 					chainon ($4, all_prefix_attributes));
  		  POP_DECLSPEC_STACK; }
  
  	| declspecs_nots setspecs absdcl_maybe_attribute
--- 2387,2405 ----
     as found in a parmlist.  */
  parm:
  	  declspecs_ts setspecs parm_declarator maybe_attribute
! 		{ $$ = build_c_parm (current_declspecs,
! 				     chainon ($4, all_prefix_attributes), $3);
  		  POP_DECLSPEC_STACK; }
  	| declspecs_ts setspecs notype_declarator maybe_attribute
! 		{ $$ = build_c_parm (current_declspecs,
! 				     chainon ($4, all_prefix_attributes), $3);
  		  POP_DECLSPEC_STACK; }
  	| declspecs_ts setspecs absdcl_maybe_attribute
  		{ $$ = $3;
  		  POP_DECLSPEC_STACK; }
  	| declspecs_nots setspecs notype_declarator maybe_attribute
! 		{ $$ = build_c_parm (current_declspecs,
! 				     chainon ($4, all_prefix_attributes), $3);
  		  POP_DECLSPEC_STACK; }
  
  	| declspecs_nots setspecs absdcl_maybe_attribute
*************** parm:
*** 2489,2510 ****
     stack.  */
  firstparm:
  	  declspecs_ts_nosa setspecs_fp parm_declarator maybe_attribute
! 		{ $$ = build_tree_list (build_tree_list (current_declspecs,
! 							 $3),
! 					chainon ($4, all_prefix_attributes));
  		  POP_DECLSPEC_STACK; }
  	| declspecs_ts_nosa setspecs_fp notype_declarator maybe_attribute
! 		{ $$ = build_tree_list (build_tree_list (current_declspecs,
! 							 $3),
! 					chainon ($4, all_prefix_attributes));
  		  POP_DECLSPEC_STACK; }
  	| declspecs_ts_nosa setspecs_fp absdcl_maybe_attribute
  		{ $$ = $3;
  		  POP_DECLSPEC_STACK; }
  	| declspecs_nots_nosa setspecs_fp notype_declarator maybe_attribute
! 		{ $$ = build_tree_list (build_tree_list (current_declspecs,
! 							 $3),
! 					chainon ($4, all_prefix_attributes));
  		  POP_DECLSPEC_STACK; }
  
  	| declspecs_nots_nosa setspecs_fp absdcl_maybe_attribute
--- 2411,2429 ----
     stack.  */
  firstparm:
  	  declspecs_ts_nosa setspecs_fp parm_declarator maybe_attribute
! 		{ $$ = build_c_parm (current_declspecs,
! 				     chainon ($4, all_prefix_attributes), $3);
  		  POP_DECLSPEC_STACK; }
  	| declspecs_ts_nosa setspecs_fp notype_declarator maybe_attribute
! 		{ $$ = build_c_parm (current_declspecs,
! 				     chainon ($4, all_prefix_attributes), $3);
  		  POP_DECLSPEC_STACK; }
  	| declspecs_ts_nosa setspecs_fp absdcl_maybe_attribute
  		{ $$ = $3;
  		  POP_DECLSPEC_STACK; }
  	| declspecs_nots_nosa setspecs_fp notype_declarator maybe_attribute
! 		{ $$ = build_c_parm (current_declspecs,
! 				     chainon ($4, all_prefix_attributes), $3);
  		  POP_DECLSPEC_STACK; }
  
  	| declspecs_nots_nosa setspecs_fp absdcl_maybe_attribute
*************** setspecs_fp:
*** 2523,2549 ****
     Its value is a list of ..._TYPE nodes or a list of identifiers.  */
  parmlist_or_identifiers:
  	  maybe_attribute
! 		{ pushlevel (0);
  		  declare_parm_level (); }
  	  parmlist_or_identifiers_1
  		{ $$ = $3;
! 		  poplevel (0, 0, 0); }
  	;
  
  parmlist_or_identifiers_1:
  	  parmlist_1
  	| identifiers ')'
! 		{ tree t;
! 		  for (t = $1; t; t = TREE_CHAIN (t))
! 		    if (TREE_VALUE (t) == NULL_TREE)
! 		      error ("`...' in old-style identifier list");
! 		  $$ = tree_cons (NULL_TREE, NULL_TREE, $1);
  
  		  /* Make sure we have a parmlist after attributes.  */
! 		  if ($<ttype>-1 != 0
! 		      && (TREE_CODE ($$) != TREE_LIST
! 			  || TREE_PURPOSE ($$) == 0
! 			  || TREE_CODE (TREE_PURPOSE ($$)) != PARM_DECL))
  		    YYERROR1;
  		}
  	;
--- 2442,2465 ----
     Its value is a list of ..._TYPE nodes or a list of identifiers.  */
  parmlist_or_identifiers:
  	  maybe_attribute
! 		{ push_scope ();
  		  declare_parm_level (); }
  	  parmlist_or_identifiers_1
  		{ $$ = $3;
! 		  pop_scope (); }
  	;
  
  parmlist_or_identifiers_1:
  	  parmlist_1
  	| identifiers ')'
! 		{ $$ = XOBNEW (&parser_obstack, struct c_arg_info);
! 		  $$->parms = 0;
! 		  $$->tags = 0;
! 		  $$->types = $1;
! 		  $$->others = 0;
  
  		  /* Make sure we have a parmlist after attributes.  */
! 		  if ($<ttype>-1 != 0)
  		    YYERROR1;
  		}
  	;
*************** identifiers_or_typenames:
*** 2566,2572 ****
  
  extension:
  	EXTENSION
! 		{ $$ = SAVE_EXT_FLAGS();
  		  pedantic = 0;
  		  warn_pointer_arith = 0;
  		  warn_traditional = 0;
--- 2482,2488 ----
  
  extension:
  	EXTENSION
! 		{ $$ = SAVE_EXT_FLAGS ();
  		  pedantic = 0;
  		  warn_pointer_arith = 0;
  		  warn_traditional = 0;
*************** static const struct resword reswords[] =
*** 2608,2613 ****
--- 2524,2530 ----
    { "__attribute",	RID_ATTRIBUTE,	0 },
    { "__attribute__",	RID_ATTRIBUTE,	0 },
    { "__builtin_choose_expr", RID_CHOOSE_EXPR, 0 },
+   { "__builtin_offsetof", RID_OFFSETOF, 0 },
    { "__builtin_types_compatible_p", RID_TYPES_COMPATIBLE_P, 0 },
    { "__builtin_va_arg",	RID_VA_ARG,	0 },
    { "__complex",	RID_COMPLEX,	0 },
*************** static const struct resword reswords[] =
*** 2621,2632 ****
    { "__inline",		RID_INLINE,	0 },
    { "__inline__",	RID_INLINE,	0 },
    { "__label__",	RID_LABEL,	0 },
-   { "__ptrbase",	RID_PTRBASE,	0 },
-   { "__ptrbase__",	RID_PTRBASE,	0 },
-   { "__ptrextent",	RID_PTREXTENT,	0 },
-   { "__ptrextent__",	RID_PTREXTENT,	0 },
-   { "__ptrvalue",	RID_PTRVALUE,	0 },
-   { "__ptrvalue__",	RID_PTRVALUE,	0 },
    { "__real",		RID_REALPART,	0 },
    { "__real__",		RID_REALPART,	0 },
    { "__restrict",	RID_RESTRICT,	0 },
--- 2538,2543 ----
*************** static const struct resword reswords[] =
*** 2674,2679 ****
--- 2585,2591 ----
    { "void",		RID_VOID,	0 },
    { "volatile",		RID_VOLATILE,	0 },
    { "while",		RID_WHILE,	0 },
+ 
  };
  #define N_reswords (sizeof reswords / sizeof (struct resword))
  
*************** static const short rid_to_yy[RID_MAX] =
*** 2708,2719 ****
    /* RID_MUTABLE */	0,
  
    /* ObjC */
!   /* RID_IN */		TYPE_QUAL,
!   /* RID_OUT */		TYPE_QUAL,
!   /* RID_INOUT */	TYPE_QUAL,
!   /* RID_BYCOPY */	TYPE_QUAL,
!   /* RID_BYREF */	TYPE_QUAL,
!   /* RID_ONEWAY */	TYPE_QUAL,
  
    /* C */
    /* RID_INT */		TYPESPEC,
--- 2620,2631 ----
    /* RID_MUTABLE */	0,
  
    /* ObjC */
!   /* RID_IN */		OBJC_TYPE_QUAL,
!   /* RID_OUT */		OBJC_TYPE_QUAL,
!   /* RID_INOUT */	OBJC_TYPE_QUAL,
!   /* RID_BYCOPY */	OBJC_TYPE_QUAL,
!   /* RID_BYREF */	OBJC_TYPE_QUAL,
!   /* RID_ONEWAY */	OBJC_TYPE_QUAL,
  
    /* C */
    /* RID_INT */		TYPESPEC,
*************** static const short rid_to_yy[RID_MAX] =
*** 2748,2756 ****
    /* RID_IMAGPART */	IMAGPART,
    /* RID_REALPART */	REALPART,
    /* RID_LABEL */	LABEL,
-   /* RID_PTRBASE */	PTR_BASE,
-   /* RID_PTREXTENT */	PTR_EXTENT,
-   /* RID_PTRVALUE */	PTR_VALUE,
  
    /* RID_CHOOSE_EXPR */			CHOOSE_EXPR,
    /* RID_TYPES_COMPATIBLE_P */		TYPES_COMPATIBLE_P,
--- 2660,2665 ----
*************** static const short rid_to_yy[RID_MAX] =
*** 2773,2779 ****
    /* RID_FALSE */	0,
    /* RID_NAMESPACE */	0,
    /* RID_NEW */		0,
!   /* RID_OFFSETOF */    0,
    /* RID_OPERATOR */	0,
    /* RID_THIS */	0,
    /* RID_THROW */	0,
--- 2682,2688 ----
    /* RID_FALSE */	0,
    /* RID_NAMESPACE */	0,
    /* RID_NEW */		0,
!   /* RID_OFFSETOF */    OFFSETOF,
    /* RID_OPERATOR */	0,
    /* RID_THIS */	0,
    /* RID_THROW */	0,
*************** static const short rid_to_yy[RID_MAX] =
*** 2790,2813 ****
    /* RID_STATCAST */	0,
  
    /* Objective C */
!   /* RID_ID */			OBJECTNAME,
!   /* RID_AT_ENCODE */		ENCODE,
!   /* RID_AT_END */		END,
!   /* RID_AT_CLASS */		CLASS,
!   /* RID_AT_ALIAS */		ALIAS,
!   /* RID_AT_DEFS */		DEFS,
!   /* RID_AT_PRIVATE */		PRIVATE,
!   /* RID_AT_PROTECTED */	PROTECTED,
!   /* RID_AT_PUBLIC */		PUBLIC,
!   /* RID_AT_PROTOCOL */		PROTOCOL,
!   /* RID_AT_SELECTOR */		SELECTOR,
    /* RID_AT_THROW */		AT_THROW,
    /* RID_AT_TRY */		AT_TRY,
    /* RID_AT_CATCH */		AT_CATCH,
    /* RID_AT_FINALLY */		AT_FINALLY,
    /* RID_AT_SYNCHRONIZED */	AT_SYNCHRONIZED,
!   /* RID_AT_INTERFACE */	INTERFACE,
!   /* RID_AT_IMPLEMENTATION */	IMPLEMENTATION
  };
  
  static void
--- 2699,2721 ----
    /* RID_STATCAST */	0,
  
    /* Objective C */
!   /* RID_AT_ENCODE */		AT_ENCODE,
!   /* RID_AT_END */		AT_END,
!   /* RID_AT_CLASS */		AT_CLASS,
!   /* RID_AT_ALIAS */		AT_ALIAS,
!   /* RID_AT_DEFS */		AT_DEFS,
!   /* RID_AT_PRIVATE */		AT_PRIVATE,
!   /* RID_AT_PROTECTED */	AT_PROTECTED,
!   /* RID_AT_PUBLIC */		AT_PUBLIC,
!   /* RID_AT_PROTOCOL */		AT_PROTOCOL,
!   /* RID_AT_SELECTOR */		AT_SELECTOR,
    /* RID_AT_THROW */		AT_THROW,
    /* RID_AT_TRY */		AT_TRY,
    /* RID_AT_CATCH */		AT_CATCH,
    /* RID_AT_FINALLY */		AT_FINALLY,
    /* RID_AT_SYNCHRONIZED */	AT_SYNCHRONIZED,
!   /* RID_AT_INTERFACE */	AT_INTERFACE,
!   /* RID_AT_IMPLEMENTATION */	AT_IMPLEMENTATION
  };
  
  static void
*************** init_reswords (void)
*** 2821,2827 ****
    if (!c_dialect_objc ())
       mask |= D_OBJC;
  
!   ridpointers = ggc_calloc ((int) RID_MAX, sizeof (tree));
    for (i = 0; i < N_reswords; i++)
      {
        /* If a keyword is disabled, do not enter it into the table
--- 2729,2735 ----
    if (!c_dialect_objc ())
       mask |= D_OBJC;
  
!   ridpointers = GGC_CNEWVEC (tree, (int) RID_MAX);
    for (i = 0; i < N_reswords; i++)
      {
        /* If a keyword is disabled, do not enter it into the table
*************** _yylex (void)
*** 2966,2972 ****
        /* These tokens should not survive translation phase 4.  */
      case CPP_HASH:
      case CPP_PASTE:
!       error ("syntax error at '%s' token", NAME(last_token));
        goto get_next;
  
      default:
--- 2874,2880 ----
        /* These tokens should not survive translation phase 4.  */
      case CPP_HASH:
      case CPP_PASTE:
!       error ("syntax error at %qs token", NAME(last_token));
        goto get_next;
  
      default:
*************** yyprint (FILE *file, int yychar, YYSTYPE
*** 2998,3010 ****
      {
      case IDENTIFIER:
      case TYPENAME:
-     case OBJECTNAME:
      case TYPESPEC:
      case TYPE_QUAL:
      case SCSPEC:
      case STATIC:
        if (IDENTIFIER_POINTER (t))
! 	fprintf (file, " `%s'", IDENTIFIER_POINTER (t));
        break;
  
      case CONSTANT:
--- 2906,2917 ----
      {
      case IDENTIFIER:
      case TYPENAME:
      case TYPESPEC:
      case TYPE_QUAL:
      case SCSPEC:
      case STATIC:
        if (IDENTIFIER_POINTER (t))
! 	fprintf (file, " '%s'", IDENTIFIER_POINTER (t));
        break;
  
      case CONSTANT:
*************** yyprint (FILE *file, int yychar, YYSTYPE
*** 3019,3040 ****
      }
  }
  
! /* This is not the ideal place to put these, but we have to get them out
!    of c-lex.c because cp/lex.c has its own versions.  */
  
  /* Parse the file.  */
  void
  c_parse_file (void)
  {
    yyparse ();
-   /* In case there were missing closebraces, get us back to the global
-      binding level.  */
-   while (! global_bindings_p ())
-     poplevel (0, 0, 0);
-   /* __FUNCTION__ is defined at file scope ("").  This
-      call may not be necessary as my tests indicate it
-      still works without it.  */
-   finish_fname_decls ();
  
    if (malloced_yyss)
      {
--- 2926,2939 ----
      }
  }
  
! /* This is not the ideal place to put this, but we have to get it out
!    of c-lex.c because cp/lex.c has its own version.  */
  
  /* Parse the file.  */
  void
  c_parse_file (void)
  {
    yyparse ();
  
    if (malloced_yyss)
      {
*************** c_parse_file (void)
*** 3044,3047 ****
--- 2943,2963 ----
      }
  }
  
+ #ifdef __XGETTEXT__
+ /* Depending on the version of Bison used to compile this grammar,
+    it may issue generic diagnostics spelled "syntax error" or
+    "parse error".  To prevent this from changing the translation
+    template randomly, we list all the variants of this particular
+    diagnostic here.  Translators: there is no fine distinction
+    between diagnostics with "syntax error" in them, and diagnostics
+    with "parse error" in them.  It's okay to give them both the same
+    translation.  */
+ const char d1[] = N_("syntax error");
+ const char d2[] = N_("parse error");
+ const char d3[] = N_("syntax error; also virtual memory exhausted");
+ const char d4[] = N_("parse error; also virtual memory exhausted");
+ const char d5[] = N_("syntax error: cannot back up");
+ const char d6[] = N_("parse error: cannot back up");
+ #endif
+ 
  #include "gt-c-parse.h"
diff -Nrcpad gcc-3.4.3/gcc/c-pch.c gcc-4.0.0/gcc/c-pch.c
*** gcc-3.4.3/gcc/c-pch.c	Wed Mar 24 22:27:54 2004
--- gcc-4.0.0/gcc/c-pch.c	Tue Nov  9 10:12:15 2004
***************
*** 1,5 ****
  /* Precompiled header implementation for the C languages.
!    Copyright (C) 2000, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
--- 1,5 ----
  /* Precompiled header implementation for the C languages.
!    Copyright (C) 2000, 2002, 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
*************** Boston, MA 02111-1307, USA.  */
*** 35,40 ****
--- 35,57 ----
  #include "hosthooks.h"
  #include "target.h"
  
+ /* This is a list of flag variables that must match exactly, and their
+    names for the error message.  The possible values for *flag_var must
+    fit in a 'signed char'.  */
+ 
+ static const struct c_pch_matching 
+ {
+   int *flag_var;
+   const char *flag_name;
+ } pch_matching[] = {
+   { &flag_exceptions, "-fexceptions" },
+   { &flag_unit_at_a_time, "-funit-at-a-time" }
+ };
+ 
+ enum {
+   MATCH_SIZE = ARRAY_SIZE (pch_matching)
+ };
+ 
  /* This structure is read very early when validating the PCH, and
     might be read for a PCH which is for a completely different compiler
     for a different operating system.  Thus, it should really only contain
*************** Boston, MA 02111-1307, USA.  */
*** 44,54 ****
     the version number in get_ident().  
  
     There are a bunch of fields named *_length; those are lengths of data that
!    follows this structure in the same order as the fields in the structure.
! 
!    The flags_info field is used to verify that certain flags settings that
!    have to be the same during the compilation of the PCH and a compilation
!    using the PCH are indeed the same.  */
  
  struct c_pch_validity
  {
--- 61,67 ----
     the version number in get_ident().  
  
     There are a bunch of fields named *_length; those are lengths of data that
!    follows this structure in the same order as the fields in the structure.  */
  
  struct c_pch_validity
  {
*************** struct c_pch_validity
*** 56,70 ****
    unsigned char target_machine_length;
    unsigned char version_length;
    unsigned char debug_info_type;
!   unsigned int flags_info;
    void (*pch_init) (void);
    size_t target_data_length;
  };
  
- /* If -funit-at-a-time is set, we require that it was also set during the
-    compilation of the PCH we may be using.  */
- #define FLAG_UNIT_AT_A_TIME_SET 1 << 0
- 
  struct c_pch_header 
  {
    unsigned long asm_size;
--- 69,79 ----
    unsigned char target_machine_length;
    unsigned char version_length;
    unsigned char debug_info_type;
!   signed char match[MATCH_SIZE];
    void (*pch_init) (void);
    size_t target_data_length;
  };
  
  struct c_pch_header 
  {
    unsigned long asm_size;
*************** static const char *get_ident (void);
*** 90,96 ****
     format.  */
  
  static const char *
! get_ident(void)
  {
    static char result[IDENT_LENGTH];
    static const char template[IDENT_LENGTH] = "gpch.012";
--- 99,105 ----
     format.  */
  
  static const char *
! get_ident (void)
  {
    static char result[IDENT_LENGTH];
    static const char template[IDENT_LENGTH] = "gpch.012";
*************** pch_init (void)
*** 112,139 ****
    struct c_pch_validity v;
    void *target_validity;
    static const char partial_pch[IDENT_LENGTH] = "gpcWrite";
-   unsigned int current_flags_info = 0;
    
!   if (! pch_file)
      return;
! 
!   if (flag_unit_at_a_time)
!     current_flags_info |= FLAG_UNIT_AT_A_TIME_SET;
! 
    f = fopen (pch_file, "w+b");
    if (f == NULL)
!     fatal_error ("can't create precompiled header %s: %m", pch_file);
    pch_outfile = f;
!   
!   if (strlen (host_machine) > 255 || strlen (target_machine) > 255
!       || strlen (version_string) > 255)
!     abort ();
    
    v.host_machine_length = strlen (host_machine);
    v.target_machine_length = strlen (target_machine);
    v.version_length = strlen (version_string);
    v.debug_info_type = write_symbols;
!   v.flags_info = current_flags_info;
    v.pch_init = &pch_init;
    target_validity = targetm.get_pch_validity (&v.target_data_length);
    
--- 121,151 ----
    struct c_pch_validity v;
    void *target_validity;
    static const char partial_pch[IDENT_LENGTH] = "gpcWrite";
    
!   if (!pch_file)
      return;
!   
    f = fopen (pch_file, "w+b");
    if (f == NULL)
!     fatal_error ("can%'t create precompiled header %s: %m", pch_file);
    pch_outfile = f;
! 
!   gcc_assert (strlen (host_machine) < 256
! 	      && strlen (target_machine) < 256
! 	      && strlen (version_string) < 256);
    
    v.host_machine_length = strlen (host_machine);
    v.target_machine_length = strlen (target_machine);
    v.version_length = strlen (version_string);
    v.debug_info_type = write_symbols;
!   {
!     size_t i;
!     for (i = 0; i < MATCH_SIZE; i++)
!       {
! 	v.match[i] = *pch_matching[i].flag_var;
! 	gcc_assert (v.match[i] == *pch_matching[i].flag_var);
!       }
!   }
    v.pch_init = &pch_init;
    target_validity = targetm.get_pch_validity (&v.target_data_length);
    
*************** pch_init (void)
*** 143,155 ****
        || fwrite (target_machine, v.target_machine_length, 1, f) != 1
        || fwrite (version_string, v.version_length, 1, f) != 1
        || fwrite (target_validity, v.target_data_length, 1, f) != 1)
!     fatal_error ("can't write to %s: %m", pch_file);
  
    /* We need to be able to re-read the output.  */
    /* The driver always provides a valid -o option.  */
    if (asm_file_name == NULL
        || strcmp (asm_file_name, "-") == 0)
!     fatal_error ("`%s' is not a valid output file", asm_file_name);
    
    asm_file_startpos = ftell (asm_out_file);
    
--- 155,167 ----
        || fwrite (target_machine, v.target_machine_length, 1, f) != 1
        || fwrite (version_string, v.version_length, 1, f) != 1
        || fwrite (target_validity, v.target_data_length, 1, f) != 1)
!     fatal_error ("can%'t write to %s: %m", pch_file);
  
    /* We need to be able to re-read the output.  */
    /* The driver always provides a valid -o option.  */
    if (asm_file_name == NULL
        || strcmp (asm_file_name, "-") == 0)
!     fatal_error ("%qs is not a valid output file", asm_file_name);
    
    asm_file_startpos = ftell (asm_out_file);
    
*************** c_common_write_pch (void)
*** 178,190 ****
    h.asm_size = asm_file_end - asm_file_startpos;
    
    if (fwrite (&h, sizeof (h), 1, pch_outfile) != 1)
!     fatal_error ("can't write %s: %m", pch_file);
    
    buf = xmalloc (16384);
-   fflush (asm_out_file);
  
    if (fseek (asm_out_file, asm_file_startpos, SEEK_SET) != 0)
!     fatal_error ("can't seek in %s: %m", asm_file_name);
  
    for (written = asm_file_startpos; written < asm_file_end; )
      {
--- 190,201 ----
    h.asm_size = asm_file_end - asm_file_startpos;
    
    if (fwrite (&h, sizeof (h), 1, pch_outfile) != 1)
!     fatal_error ("can%'t write %s: %m", pch_file);
    
    buf = xmalloc (16384);
  
    if (fseek (asm_out_file, asm_file_startpos, SEEK_SET) != 0)
!     fatal_error ("can%'t seek in %s: %m", asm_file_name);
  
    for (written = asm_file_startpos; written < asm_file_end; )
      {
*************** c_common_write_pch (void)
*** 192,212 ****
        if (size > 16384)
  	size = 16384;
        if (fread (buf, size, 1, asm_out_file) != 1)
! 	fatal_error ("can't read %s: %m", asm_file_name);
        if (fwrite (buf, size, 1, pch_outfile) != 1)
! 	fatal_error ("can't write %s: %m", pch_file);
        written += size;
      }
    free (buf);
!   /* asm_out_file can be written afterwards, so must be flushed first.  */
!   fflush (asm_out_file);
  
    gt_pch_save (pch_outfile);
    cpp_write_pch_state (parse_in, pch_outfile);
  
    if (fseek (pch_outfile, 0, SEEK_SET) != 0
        || fwrite (get_ident (), IDENT_LENGTH, 1, pch_outfile) != 1)
!     fatal_error ("can't write %s: %m", pch_file);
  
    fclose (pch_outfile);
  }
--- 203,225 ----
        if (size > 16384)
  	size = 16384;
        if (fread (buf, size, 1, asm_out_file) != 1)
! 	fatal_error ("can%'t read %s: %m", asm_file_name);
        if (fwrite (buf, size, 1, pch_outfile) != 1)
! 	fatal_error ("can%'t write %s: %m", pch_file);
        written += size;
      }
    free (buf);
!   /* asm_out_file can be written afterwards, so fseek to clear
!      _IOREAD flag.  */
!   if (fseek (asm_out_file, 0, SEEK_END) != 0)
!     fatal_error ("can%'t seek in %s: %m", asm_file_name);
  
    gt_pch_save (pch_outfile);
    cpp_write_pch_state (parse_in, pch_outfile);
  
    if (fseek (pch_outfile, 0, SEEK_SET) != 0
        || fwrite (get_ident (), IDENT_LENGTH, 1, pch_outfile) != 1)
!     fatal_error ("can%'t write %s: %m", pch_file);
  
    fclose (pch_outfile);
  }
*************** c_common_valid_pch (cpp_reader *pfile, c
*** 226,243 ****
    int strings_length;
    const char *pch_ident;
    struct c_pch_validity v;
-   unsigned int current_flags_info = 0;
- 
-   if (flag_unit_at_a_time)
-     current_flags_info |= FLAG_UNIT_AT_A_TIME_SET;
  
    /* Perform a quick test of whether this is a valid
!      precompiled header for the current language
!      and with the current flag settings.  */
  
    sizeread = read (fd, ident, IDENT_LENGTH);
    if (sizeread == -1)
!     fatal_error ("can't read %s: %m", name);
    else if (sizeread != IDENT_LENGTH)
      return 2;
    
--- 239,251 ----
    int strings_length;
    const char *pch_ident;
    struct c_pch_validity v;
  
    /* Perform a quick test of whether this is a valid
!      precompiled header for the current language.  */
  
    sizeread = read (fd, ident, IDENT_LENGTH);
    if (sizeread == -1)
!     fatal_error ("can%'t read %s: %m", name);
    else if (sizeread != IDENT_LENGTH)
      return 2;
    
*************** c_common_valid_pch (cpp_reader *pfile, c
*** 265,282 ****
    /* At this point, we know it's a PCH file, so it ought to be long enough
       that we can read a c_pch_validity structure.  */
    if (read (fd, &v, sizeof (v)) != sizeof (v))
!     fatal_error ("can't read %s: %m", name);
  
    strings_length = (v.host_machine_length + v.target_machine_length 
  		    + v.version_length);
    if (read (fd, short_strings, strings_length) != strings_length)
!     fatal_error ("can't read %s: %m", name);
    if (v.host_machine_length != strlen (host_machine)
        || memcmp (host_machine, short_strings, strlen (host_machine)) != 0)
      {
        if (cpp_get_options (pfile)->warn_invalid_pch)
  	cpp_error (pfile, CPP_DL_WARNING, 
! 		   "%s: created on host `%.*s', but used on host `%s'", name,
  		   v.host_machine_length, short_strings, host_machine);
        return 2;
      }
--- 273,290 ----
    /* At this point, we know it's a PCH file, so it ought to be long enough
       that we can read a c_pch_validity structure.  */
    if (read (fd, &v, sizeof (v)) != sizeof (v))
!     fatal_error ("can%'t read %s: %m", name);
  
    strings_length = (v.host_machine_length + v.target_machine_length 
  		    + v.version_length);
    if (read (fd, short_strings, strings_length) != strings_length)
!     fatal_error ("can%'t read %s: %m", name);
    if (v.host_machine_length != strlen (host_machine)
        || memcmp (host_machine, short_strings, strlen (host_machine)) != 0)
      {
        if (cpp_get_options (pfile)->warn_invalid_pch)
  	cpp_error (pfile, CPP_DL_WARNING, 
! 		   "%s: created on host '%.*s', but used on host '%s'", name,
  		   v.host_machine_length, short_strings, host_machine);
        return 2;
      }
*************** c_common_valid_pch (cpp_reader *pfile, c
*** 286,292 ****
      {
        if (cpp_get_options (pfile)->warn_invalid_pch)
  	cpp_error (pfile, CPP_DL_WARNING, 
! 		   "%s: created for target `%.*s', but used for target `%s'", 
  		   name, v.target_machine_length, 
  		   short_strings + v.host_machine_length, target_machine);
        return 2;
--- 294,300 ----
      {
        if (cpp_get_options (pfile)->warn_invalid_pch)
  	cpp_error (pfile, CPP_DL_WARNING, 
! 		   "%s: created for target '%.*s', but used for target '%s'", 
  		   name, v.target_machine_length, 
  		   short_strings + v.host_machine_length, target_machine);
        return 2;
*************** c_common_valid_pch (cpp_reader *pfile, c
*** 299,319 ****
      {
        if (cpp_get_options (pfile)->warn_invalid_pch)
  	cpp_error (pfile, CPP_DL_WARNING,
! 		   "%s: created by version `%.*s', but this is version `%s'", 
  		   name, v.version_length, 
  		   (short_strings + v.host_machine_length 
  		    + v.target_machine_length), 
  		   version_string);
        return 2;
      }
-   if (v.flags_info != current_flags_info)
-     {
-       if (cpp_get_options (pfile)->warn_invalid_pch)
- 	cpp_error (pfile, CPP_DL_WARNING,
- 		   "%s: created using different flags",
- 		   name);
-       return 2;
-     }
  
    /* The allowable debug info combinations are that either the PCH file
       was built with the same as is being used now, or the PCH file was
--- 307,319 ----
      {
        if (cpp_get_options (pfile)->warn_invalid_pch)
  	cpp_error (pfile, CPP_DL_WARNING,
! 		   "%s: created by version '%.*s', but this is version '%s'", 
  		   name, v.version_length, 
  		   (short_strings + v.host_machine_length 
  		    + v.target_machine_length), 
  		   version_string);
        return 2;
      }
  
    /* The allowable debug info combinations are that either the PCH file
       was built with the same as is being used now, or the PCH file was
*************** c_common_valid_pch (cpp_reader *pfile, c
*** 329,334 ****
--- 329,348 ----
        return 2;
      }
  
+   /* Check flags that must match exactly.  */
+   {
+     size_t i;
+     for (i = 0; i < MATCH_SIZE; i++)
+       if (*pch_matching[i].flag_var != v.match[i])
+ 	{
+ 	  if (cpp_get_options (pfile)->warn_invalid_pch)
+ 	    cpp_error (pfile, CPP_DL_WARNING, 
+ 		       "%s: settings for %s do not match", name,
+ 		       pch_matching[i].flag_name);
+ 	  return 2;
+ 	}
+   }
+ 
    /* If the text segment was not loaded at the same address as it was
       when the PCH file was created, function pointers loaded from the
       PCH will not be valid.  We could in theory remap all the function
*************** c_common_valid_pch (cpp_reader *pfile, c
*** 348,354 ****
      
      if ((size_t) read (fd, this_file_data, v.target_data_length)
  	!= v.target_data_length)
!       fatal_error ("can't read %s: %m", name);
      msg = targetm.pch_valid_p (this_file_data, v.target_data_length);
      free (this_file_data);
      if (msg != NULL)
--- 362,368 ----
      
      if ((size_t) read (fd, this_file_data, v.target_data_length)
  	!= v.target_data_length)
!       fatal_error ("can%'t read %s: %m", name);
      msg = targetm.pch_valid_p (this_file_data, v.target_data_length);
      free (this_file_data);
      if (msg != NULL)
*************** c_common_valid_pch (cpp_reader *pfile, c
*** 369,374 ****
--- 383,392 ----
      return result == 0;
  }
  
+ /* If non-NULL, this function is called after a precompile header file
+    is loaded.  */
+ void (*lang_post_pch_load) (void);
+ 
  /* Load in the PCH file NAME, open on FD.  It was originally searched for
     by ORIG_NAME.  */
  
*************** c_common_read_pch (cpp_reader *pfile, co
*** 378,385 ****
  {
    FILE *f;
    struct c_pch_header h;
-   char *buf;
-   unsigned long written;
    struct save_macro_data *smd;
    
    f = fdopen (fd, "rb");
--- 396,401 ----
*************** c_common_read_pch (cpp_reader *pfile, co
*** 397,414 ****
        return;
      }
  
!   buf = xmalloc (16384);
!   for (written = 0; written < h.asm_size; )
      {
!       long size = h.asm_size - written;
!       if (size > 16384)
! 	size = 16384;
!       if (fread (buf, size, 1, f) != 1
! 	  || fwrite (buf, size, 1, asm_out_file) != 1)
! 	cpp_errno (pfile, CPP_DL_ERROR, "reading");
!       written += size;
      }
-   free (buf);
  
    cpp_prepare_state (pfile, &smd);
  
--- 413,442 ----
        return;
      }
  
!   if (!flag_preprocess_only)
      {
!       unsigned long written;
!       char * buf = xmalloc (16384);
! 
!       for (written = 0; written < h.asm_size; )
! 	{
! 	  long size = h.asm_size - written;
! 	  if (size > 16384)
! 	    size = 16384;
! 	  if (fread (buf, size, 1, f) != 1
! 	      || fwrite (buf, size, 1, asm_out_file) != 1)
! 	    cpp_errno (pfile, CPP_DL_ERROR, "reading");
! 	  written += size;
! 	}
!       free (buf);
!     }
!   else
!     {
!       /* If we're preprocessing, don't write to a NULL
! 	 asm_out_file.  */
!       if (fseek (f, h.asm_size, SEEK_CUR) != 0)
! 	cpp_errno (pfile, CPP_DL_ERROR, "seeking");
      }
  
    cpp_prepare_state (pfile, &smd);
  
*************** c_common_read_pch (cpp_reader *pfile, co
*** 418,423 ****
--- 446,456 ----
      return;
  
    fclose (f);
+   
+   /* Give the front end a chance to take action after a PCH file has
+      been loaded.  */
+   if (lang_post_pch_load)
+     (*lang_post_pch_load) ();
  }
  
  /* Indicate that no more PCH files should be read.  */
*************** c_common_no_more_pch (void)
*** 428,433 ****
    if (cpp_get_callbacks (parse_in)->valid_pch)
      {
        cpp_get_callbacks (parse_in)->valid_pch = NULL;
!       host_hooks.gt_pch_use_address (NULL, 0);
      }
  }
--- 461,510 ----
    if (cpp_get_callbacks (parse_in)->valid_pch)
      {
        cpp_get_callbacks (parse_in)->valid_pch = NULL;
!       host_hooks.gt_pch_use_address (NULL, 0, -1, 0);
      }
  }
+ 
+ /* Handle #pragma GCC pch_preprocess, to load in the PCH file.  */
+ 
+ #ifndef O_BINARY
+ # define O_BINARY 0
+ #endif
+ 
+ void
+ c_common_pch_pragma (cpp_reader *pfile)
+ {
+   tree name_t;
+   const char *name;
+   int fd;
+ 
+   if (c_lex (&name_t) != CPP_STRING)
+     {
+       error ("malformed #pragma GCC pch_preprocess, ignored");
+       return;
+     }
+ 
+   if (!cpp_get_options (pfile)->preprocessed)
+     {
+       error ("pch_preprocess pragma should only be used with -fpreprocessed");
+       inform ("use #include instead");
+       return;
+     }
+ 
+   name = TREE_STRING_POINTER (name_t);
+   
+   fd = open (name, O_RDONLY | O_BINARY, 0666);
+   if (fd == -1)
+     fatal_error ("%s: couldn%'t open PCH file: %m\n", name);
+   
+   if (c_common_valid_pch (pfile, name, fd) != 1)
+     {
+       if (!cpp_get_options (pfile)->warn_invalid_pch)
+ 	inform ("use -Winvalid-pch for more information");
+       fatal_error ("%s: PCH file was invalid", name);
+     }
+   
+   c_common_read_pch (pfile, name, fd, name);
+   
+   close (fd);
+ }
diff -Nrcpad gcc-3.4.3/gcc/c-ppoutput.c gcc-4.0.0/gcc/c-ppoutput.c
*** gcc-3.4.3/gcc/c-ppoutput.c	Sat Oct  9 00:25:04 2004
--- gcc-4.0.0/gcc/c-ppoutput.c	Sun Nov 28 23:29:41 2004
*************** Foundation, 59 Temple Place - Suite 330,
*** 22,28 ****
  #include "coretypes.h"
  #include "tm.h"
  #include "cpplib.h"
! #include "cpphash.h"
  #include "tree.h"
  #include "c-common.h"		/* For flags.  */
  #include "c-pragma.h"		/* For parse_in.  */
--- 22,28 ----
  #include "coretypes.h"
  #include "tm.h"
  #include "cpplib.h"
! #include "../libcpp/internal.h"
  #include "tree.h"
  #include "c-common.h"		/* For flags.  */
  #include "c-pragma.h"		/* For parse_in.  */
*************** Foundation, 59 Temple Place - Suite 330,
*** 32,42 ****
  static struct
  {
    FILE *outf;			/* Stream to write to.  */
-   const struct line_map *map;	/* Logical to physical line mappings.  */
    const cpp_token *prev;	/* Previous token.  */
    const cpp_token *source;	/* Source token for spacing.  */
!   fileline line;		/* Line currently being written.  */
    unsigned char printed;	/* Nonzero if something output at line.  */
  } print;
  
  /* General output routines.  */
--- 32,42 ----
  static struct
  {
    FILE *outf;			/* Stream to write to.  */
    const cpp_token *prev;	/* Previous token.  */
    const cpp_token *source;	/* Source token for spacing.  */
!   int src_line;			/* Line number currently being written.  */
    unsigned char printed;	/* Nonzero if something output at line.  */
+   bool first_time;		/* pp_file_change hasn't been called yet.  */
  } print;
  
  /* General output routines.  */
*************** static void scan_translation_unit_trad (
*** 45,62 ****
  static void account_for_newlines (const unsigned char *, size_t);
  static int dump_macro (cpp_reader *, cpp_hashnode *, void *);
  
! static void print_line (const struct line_map *, fileline, const char *);
! static void maybe_print_line (const struct line_map *, fileline);
  
  /* Callback routines for the parser.   Most of these are active only
     in specific modes.  */
  static void cb_line_change (cpp_reader *, const cpp_token *, int);
! static void cb_define (cpp_reader *, fileline, cpp_hashnode *);
! static void cb_undef (cpp_reader *, fileline, cpp_hashnode *);
! static void cb_include (cpp_reader *, fileline, const unsigned char *,
  			const char *, int);
! static void cb_ident (cpp_reader *, fileline, const cpp_string *);
! static void cb_def_pragma (cpp_reader *, fileline);
  
  /* Preprocess and output.  */
  void
--- 45,64 ----
  static void account_for_newlines (const unsigned char *, size_t);
  static int dump_macro (cpp_reader *, cpp_hashnode *, void *);
  
! static void print_line (source_location, const char *);
! static void maybe_print_line (source_location);
  
  /* Callback routines for the parser.   Most of these are active only
     in specific modes.  */
  static void cb_line_change (cpp_reader *, const cpp_token *, int);
! static void cb_define (cpp_reader *, source_location, cpp_hashnode *);
! static void cb_undef (cpp_reader *, source_location, cpp_hashnode *);
! static void cb_include (cpp_reader *, source_location, const unsigned char *,
  			const char *, int);
! static void cb_ident (cpp_reader *, source_location, const cpp_string *);
! static void cb_def_pragma (cpp_reader *, source_location);
! static void cb_read_pch (cpp_reader *pfile, const char *name,
! 			 int fd, const char *orig_name);
  
  /* Preprocess and output.  */
  void
*************** init_pp_output (FILE *out_stream)
*** 106,125 ****
    if (flag_dump_includes)
      cb->include  = cb_include;
  
    if (flag_dump_macros == 'N' || flag_dump_macros == 'D')
      {
        cb->define = cb_define;
        cb->undef  = cb_undef;
      }
  
!   /* Initialize the print structure.  Setting print.line to -1 here is
       a trick to guarantee that the first token of the file will cause
       a linemarker to be output by maybe_print_line.  */
!   print.line = (fileline) -1;
    print.printed = 0;
    print.prev = 0;
-   print.map = 0;
    print.outf = out_stream;
  }
  
  /* Writes out the preprocessed file, handling spacing and paste
--- 108,133 ----
    if (flag_dump_includes)
      cb->include  = cb_include;
  
+   if (flag_pch_preprocess)
+     {
+       cb->valid_pch = c_common_valid_pch;
+       cb->read_pch = cb_read_pch;
+     }
+ 
    if (flag_dump_macros == 'N' || flag_dump_macros == 'D')
      {
        cb->define = cb_define;
        cb->undef  = cb_undef;
      }
  
!   /* Initialize the print structure.  Setting print.src_line to -1 here is
       a trick to guarantee that the first token of the file will cause
       a linemarker to be output by maybe_print_line.  */
!   print.src_line = -1;
    print.printed = 0;
    print.prev = 0;
    print.outf = out_stream;
+   print.first_time = 1;
  }
  
  /* Writes out the preprocessed file, handling spacing and paste
*************** scan_translation_unit (cpp_reader *pfile
*** 171,183 ****
      }
  }
  
! /* Adjust print.line for newlines embedded in output.  */
  static void
  account_for_newlines (const unsigned char *str, size_t len)
  {
    while (len--)
      if (*str++ == '\n')
!       print.line++;
  }
  
  /* Writes out a traditionally preprocessed file.  */
--- 179,191 ----
      }
  }
  
! /* Adjust print.src_line for newlines embedded in output.  */
  static void
  account_for_newlines (const unsigned char *str, size_t len)
  {
    while (len--)
      if (*str++ == '\n')
!       print.src_line++;
  }
  
  /* Writes out a traditionally preprocessed file.  */
*************** scan_translation_unit_trad (cpp_reader *
*** 187,193 ****
    while (_cpp_read_logical_line_trad (pfile))
      {
        size_t len = pfile->out.cur - pfile->out.base;
!       maybe_print_line (print.map, pfile->out.first_line);
        fwrite (pfile->out.base, 1, len, print.outf);
        print.printed = 1;
        if (!CPP_OPTION (pfile, discard_comments))
--- 195,201 ----
    while (_cpp_read_logical_line_trad (pfile))
      {
        size_t len = pfile->out.cur - pfile->out.base;
!       maybe_print_line (pfile->out.first_line);
        fwrite (pfile->out.base, 1, len, print.outf);
        print.printed = 1;
        if (!CPP_OPTION (pfile, discard_comments))
*************** scan_translation_unit_trad (cpp_reader *
*** 199,250 ****
     different line to the current one, output the required newlines or
     a line marker, and return 1.  Otherwise return 0.  */
  static void
! maybe_print_line (const struct line_map *map, fileline line)
  {
    /* End the previous line of text.  */
    if (print.printed)
      {
        putc ('\n', print.outf);
!       print.line++;
        print.printed = 0;
      }
  
!   if (line >= print.line && line < print.line + 8)
      {
!       while (line > print.line)
  	{
  	  putc ('\n', print.outf);
! 	  print.line++;
  	}
      }
    else
!     print_line (map, line, "");
  }
  
  /* Output a line marker for logical line LINE.  Special flags are "1"
     or "2" indicating entering or leaving a file.  */
  static void
! print_line (const struct line_map *map, fileline line, const char *special_flags)
  {
    /* End any previous line of text.  */
    if (print.printed)
      putc ('\n', print.outf);
    print.printed = 0;
  
-   print.line = line;
    if (!flag_no_line_commands)
      {
        size_t to_file_len = strlen (map->to_file);
        unsigned char *to_file_quoted = alloca (to_file_len * 4 + 1);
        unsigned char *p;
  
        /* cpp_quote_string does not nul-terminate, so we have to do it
  	 ourselves.  */
        p = cpp_quote_string (to_file_quoted,
! 			    (unsigned char *)map->to_file, to_file_len);
        *p = '\0';
!       fprintf (print.outf, "# %u \"%s\"%s",
! 	       SOURCE_LINE (map, print.line),
  	       to_file_quoted, special_flags);
  
        if (map->sysp == 2)
--- 207,262 ----
     different line to the current one, output the required newlines or
     a line marker, and return 1.  Otherwise return 0.  */
  static void
! maybe_print_line (source_location src_loc)
  {
+   const struct line_map *map = linemap_lookup (&line_table, src_loc);
+   int src_line = SOURCE_LINE (map, src_loc);
    /* End the previous line of text.  */
    if (print.printed)
      {
        putc ('\n', print.outf);
!       print.src_line++;
        print.printed = 0;
      }
  
!   if (src_line >= print.src_line && src_line < print.src_line + 8)
      {
!       while (src_line > print.src_line)
  	{
  	  putc ('\n', print.outf);
! 	  print.src_line++;
  	}
      }
    else
!     print_line (src_loc, "");
  }
  
  /* Output a line marker for logical line LINE.  Special flags are "1"
     or "2" indicating entering or leaving a file.  */
  static void
! print_line (source_location src_loc, const char *special_flags)
  {
    /* End any previous line of text.  */
    if (print.printed)
      putc ('\n', print.outf);
    print.printed = 0;
  
    if (!flag_no_line_commands)
      {
+       const struct line_map *map = linemap_lookup (&line_table, src_loc);
+ 
        size_t to_file_len = strlen (map->to_file);
        unsigned char *to_file_quoted = alloca (to_file_len * 4 + 1);
        unsigned char *p;
  
+       print.src_line = SOURCE_LINE (map, src_loc);
+ 
        /* cpp_quote_string does not nul-terminate, so we have to do it
  	 ourselves.  */
        p = cpp_quote_string (to_file_quoted,
! 			    (unsigned char *) map->to_file, to_file_len);
        *p = '\0';
!       fprintf (print.outf, "# %u \"%s\"%s", print.src_line,
  	       to_file_quoted, special_flags);
  
        if (map->sysp == 2)
*************** static void
*** 262,271 ****
  cb_line_change (cpp_reader *pfile, const cpp_token *token,
  		int parsing_args)
  {
    if (token->type == CPP_EOF || parsing_args)
      return;
  
!   maybe_print_line (print.map, token->line);
    print.prev = 0;
    print.source = 0;
  
--- 274,285 ----
  cb_line_change (cpp_reader *pfile, const cpp_token *token,
  		int parsing_args)
  {
+   source_location src_loc = token->src_loc;
+ 
    if (token->type == CPP_EOF || parsing_args)
      return;
  
!   maybe_print_line (src_loc);
    print.prev = 0;
    print.source = 0;
  
*************** cb_line_change (cpp_reader *pfile, const
*** 276,305 ****
       ought to care.  Some things do care; the fault lies with them.  */
    if (!CPP_OPTION (pfile, traditional))
      {
        print.printed = 1;
-       if (token->col > 2)
- 	{
- 	  unsigned int spaces = token->col - 2;
  
! 	  while (spaces--)
! 	    putc (' ', print.outf);
! 	}
      }
  }
  
  static void
! cb_ident (cpp_reader *pfile ATTRIBUTE_UNUSED, fileline line,
  	  const cpp_string *str)
  {
!   maybe_print_line (print.map, line);
    fprintf (print.outf, "#ident %s\n", str->text);
!   print.line++;
  }
  
  static void
! cb_define (cpp_reader *pfile, fileline line, cpp_hashnode *node)
  {
!   maybe_print_line (print.map, line);
    fputs ("#define ", print.outf);
  
    /* 'D' is whole definition; 'N' is name only.  */
--- 290,317 ----
       ought to care.  Some things do care; the fault lies with them.  */
    if (!CPP_OPTION (pfile, traditional))
      {
+       const struct line_map *map = linemap_lookup (&line_table, src_loc);
+       int spaces = SOURCE_COLUMN (map, src_loc) - 2;
        print.printed = 1;
  
!       while (-- spaces >= 0)
! 	putc (' ', print.outf);
      }
  }
  
  static void
! cb_ident (cpp_reader *pfile ATTRIBUTE_UNUSED, source_location line,
  	  const cpp_string *str)
  {
!   maybe_print_line (line);
    fprintf (print.outf, "#ident %s\n", str->text);
!   print.src_line++;
  }
  
  static void
! cb_define (cpp_reader *pfile, source_location line, cpp_hashnode *node)
  {
!   maybe_print_line (line);
    fputs ("#define ", print.outf);
  
    /* 'D' is whole definition; 'N' is name only.  */
*************** cb_define (cpp_reader *pfile, fileline l
*** 310,341 ****
      fputs ((const char *) NODE_NAME (node), print.outf);
  
    putc ('\n', print.outf);
!   print.line++;
  }
  
  static void
! cb_undef (cpp_reader *pfile ATTRIBUTE_UNUSED, fileline line,
  	  cpp_hashnode *node)
  {
!   maybe_print_line (print.map, line);
    fprintf (print.outf, "#undef %s\n", NODE_NAME (node));
!   print.line++;
  }
  
  static void
! cb_include (cpp_reader *pfile ATTRIBUTE_UNUSED, fileline line,
  	    const unsigned char *dir, const char *header, int angle_brackets)
  {
!   maybe_print_line (print.map, line);
    if (angle_brackets)
      fprintf (print.outf, "#%s <%s>\n", dir, header);
    else
      fprintf (print.outf, "#%s \"%s\"\n", dir, header);
!   print.line++;
  }
  
  /* Callback called when -fworking-director and -E to emit working
!    diretory in cpp output file. */
  
  void
  pp_dir_change (cpp_reader *pfile ATTRIBUTE_UNUSED, const char *dir)
--- 322,353 ----
      fputs ((const char *) NODE_NAME (node), print.outf);
  
    putc ('\n', print.outf);
!   print.src_line++;
  }
  
  static void
! cb_undef (cpp_reader *pfile ATTRIBUTE_UNUSED, source_location line,
  	  cpp_hashnode *node)
  {
!   maybe_print_line (line);
    fprintf (print.outf, "#undef %s\n", NODE_NAME (node));
!   print.src_line++;
  }
  
  static void
! cb_include (cpp_reader *pfile ATTRIBUTE_UNUSED, source_location line,
  	    const unsigned char *dir, const char *header, int angle_brackets)
  {
!   maybe_print_line (line);
    if (angle_brackets)
      fprintf (print.outf, "#%s <%s>\n", dir, header);
    else
      fprintf (print.outf, "#%s \"%s\"\n", dir, header);
!   print.src_line++;
  }
  
  /* Callback called when -fworking-director and -E to emit working
!    directory in cpp output file.  */
  
  void
  pp_dir_change (cpp_reader *pfile ATTRIBUTE_UNUSED, const char *dir)
*************** pp_dir_change (cpp_reader *pfile ATTRIBU
*** 344,401 ****
    unsigned char *to_file_quoted = alloca (to_file_len * 4 + 1);
    unsigned char *p;
  
!   /* cpp_quote_string does not nul-terminate, so we have to do it ourselves. */
    p = cpp_quote_string (to_file_quoted, (unsigned char *) dir, to_file_len);
    *p = '\0';
    fprintf (print.outf, "# 1 \"%s//\"\n", to_file_quoted);
  }
  
  /* The file name, line number or system header flags have changed, as
!    described in MAP.  From this point on, the old print.map might be
!    pointing to freed memory, and so must not be dereferenced.  */
  
  void
  pp_file_change (const struct line_map *map)
  {
    const char *flags = "";
  
!   if (flag_no_line_commands || flag_no_output)
      return;
  
    if (map != NULL)
      {
!       /* First time?  */
!       if (print.map == NULL)
  	{
  	  /* Avoid printing foo.i when the main file is foo.c.  */
  	  if (!cpp_get_options (parse_in)->preprocessed)
! 	    print_line (map, map->from_line, flags);
  	}
        else
  	{
  	  /* Bring current file to correct line when entering a new file.  */
  	  if (map->reason == LC_ENTER)
! 	    maybe_print_line (map - 1, map->from_line - 1);
! 
  	  if (map->reason == LC_ENTER)
  	    flags = " 1";
  	  else if (map->reason == LC_LEAVE)
  	    flags = " 2";
! 	  print_line (map, map->from_line, flags);
  	}
      }
- 
-   print.map = map;
  }
  
  /* Copy a #pragma directive to the preprocessed output.  */
  static void
! cb_def_pragma (cpp_reader *pfile, fileline line)
  {
!   maybe_print_line (print.map, line);
    fputs ("#pragma ", print.outf);
    cpp_output_line (pfile, print.outf);
!   print.line++;
  }
  
  /* Dump out the hash table.  */
--- 356,412 ----
    unsigned char *to_file_quoted = alloca (to_file_len * 4 + 1);
    unsigned char *p;
  
!   /* cpp_quote_string does not nul-terminate, so we have to do it ourselves.  */
    p = cpp_quote_string (to_file_quoted, (unsigned char *) dir, to_file_len);
    *p = '\0';
    fprintf (print.outf, "# 1 \"%s//\"\n", to_file_quoted);
  }
  
  /* The file name, line number or system header flags have changed, as
!    described in MAP.  */
  
  void
  pp_file_change (const struct line_map *map)
  {
    const char *flags = "";
  
!   if (flag_no_line_commands)
      return;
  
    if (map != NULL)
      {
!       if (print.first_time)
  	{
  	  /* Avoid printing foo.i when the main file is foo.c.  */
  	  if (!cpp_get_options (parse_in)->preprocessed)
! 	    print_line (map->start_location, flags);
! 	  print.first_time = 0;
  	}
        else
  	{
  	  /* Bring current file to correct line when entering a new file.  */
  	  if (map->reason == LC_ENTER)
! 	    {
! 	      const struct line_map *from = INCLUDED_FROM (&line_table, map);
! 	      maybe_print_line (LAST_SOURCE_LINE_LOCATION (from));
! 	    }
  	  if (map->reason == LC_ENTER)
  	    flags = " 1";
  	  else if (map->reason == LC_LEAVE)
  	    flags = " 2";
! 	  print_line (map->start_location, flags);
  	}
      }
  }
  
  /* Copy a #pragma directive to the preprocessed output.  */
  static void
! cb_def_pragma (cpp_reader *pfile, source_location line)
  {
!   maybe_print_line (line);
    fputs ("#pragma ", print.outf);
    cpp_output_line (pfile, print.outf);
!   print.src_line++;
  }
  
  /* Dump out the hash table.  */
*************** dump_macro (cpp_reader *pfile, cpp_hashn
*** 408,415 ****
        fputs ((const char *) cpp_macro_definition (pfile, node),
  	     print.outf);
        putc ('\n', print.outf);
!       print.line++;
      }
  
    return 1;
  }
--- 419,440 ----
        fputs ((const char *) cpp_macro_definition (pfile, node),
  	     print.outf);
        putc ('\n', print.outf);
!       print.src_line++;
      }
  
    return 1;
  }
+ 
+ /* Load in the PCH file NAME, open on FD.  It was originally searched for
+    by ORIG_NAME.  Also, print out a #include command so that the PCH
+    file can be loaded when the preprocessed output is compiled.  */
+ 
+ static void
+ cb_read_pch (cpp_reader *pfile, const char *name,
+ 	     int fd, const char *orig_name ATTRIBUTE_UNUSED)
+ {
+   c_common_read_pch (pfile, name, fd, orig_name);
+   
+   fprintf (print.outf, "#pragma GCC pch_preprocess \"%s\"\n", name);
+   print.src_line++;
+ }
diff -Nrcpad gcc-3.4.3/gcc/c-pragma.c gcc-4.0.0/gcc/c-pragma.c
*** gcc-3.4.3/gcc/c-pragma.c	Fri May  7 07:07:30 2004
--- gcc-4.0.0/gcc/c-pragma.c	Mon Nov 29 18:53:53 2004
*************** Software Foundation, 59 Temple Place - S
*** 34,39 ****
--- 34,40 ----
  #include "c-common.h"
  #include "output.h"
  #include "tm_p.h"
+ #include "target.h"
  
  #define GCC_BAD(msgid) do { warning (msgid); return; } while (0)
  #define GCC_BAD2(msgid, arg) do { warning (msgid, arg); return; } while (0)
*************** Software Foundation, 59 Temple Place - S
*** 41,47 ****
  typedef struct align_stack GTY(())
  {
    int                  alignment;
-   unsigned int         num_pushes;
    tree                 id;
    struct align_stack * prev;
  } align_stack;
--- 42,47 ----
*************** static void handle_pragma_pack (cpp_read
*** 58,65 ****
     happens, we restore the value to this, not to a value of 0 for
     maximum_field_alignment.  Value is in bits.  */
  static int default_alignment;
! #define SET_GLOBAL_ALIGNMENT(ALIGN) \
!   (default_alignment = maximum_field_alignment = (ALIGN))
  
  static void push_alignment (int, tree);
  static void pop_alignment (tree);
--- 58,66 ----
     happens, we restore the value to this, not to a value of 0 for
     maximum_field_alignment.  Value is in bits.  */
  static int default_alignment;
! #define SET_GLOBAL_ALIGNMENT(ALIGN) (maximum_field_alignment = *(alignment_stack == NULL \
! 	? &default_alignment \
! 	: &alignment_stack->alignment) = (ALIGN))
  
  static void push_alignment (int, tree);
  static void pop_alignment (tree);
*************** static void pop_alignment (tree);
*** 68,98 ****
  static void
  push_alignment (int alignment, tree id)
  {
!   if (alignment_stack == NULL
!       || alignment_stack->alignment != alignment
!       || id != NULL_TREE)
!     {
!       align_stack * entry;
  
!       entry = ggc_alloc (sizeof (* entry));
  
!       entry->alignment  = alignment;
!       entry->num_pushes = 1;
!       entry->id         = id;
!       entry->prev       = alignment_stack;
!       
!       /* The current value of maximum_field_alignment is not necessarily 
! 	 0 since there may be a #pragma pack(<n>) in effect; remember it 
! 	 so that we can restore it after the final #pragma pop().  */
!       if (alignment_stack == NULL)
! 	default_alignment = maximum_field_alignment;
!       
!       alignment_stack = entry;
  
!       maximum_field_alignment = alignment;
!     }
!   else
!     alignment_stack->num_pushes ++;
  }
  
  /* Undo a push of an alignment onto the stack.  */
--- 69,91 ----
  static void
  push_alignment (int alignment, tree id)
  {
!   align_stack * entry;
  
!   entry = ggc_alloc (sizeof (* entry));
  
!   entry->alignment  = alignment;
!   entry->id         = id;
!   entry->prev       = alignment_stack;
!        
!   /* The current value of maximum_field_alignment is not necessarily 
!      0 since there may be a #pragma pack(<n>) in effect; remember it 
!      so that we can restore it after the final #pragma pop().  */
!   if (alignment_stack == NULL)
!     default_alignment = maximum_field_alignment;
!  
!   alignment_stack = entry;
  
!   maximum_field_alignment = alignment;
  }
  
  /* Undo a push of an alignment onto the stack.  */
*************** pop_alignment (tree id)
*** 102,113 ****
    align_stack * entry;
        
    if (alignment_stack == NULL)
!     {
!       warning ("\
! #pragma pack (pop) encountered without matching #pragma pack (push, <n>)"
! 	       );
!       return;
!     }
  
    /* If we got an identifier, strip away everything above the target
       entry so that the next step will restore the state just below it.  */
--- 95,101 ----
    align_stack * entry;
        
    if (alignment_stack == NULL)
!     GCC_BAD ("#pragma pack (pop) encountered without matching #pragma pack (push)");
  
    /* If we got an identifier, strip away everything above the target
       entry so that the next step will restore the state just below it.  */
*************** pop_alignment (tree id)
*** 116,160 ****
        for (entry = alignment_stack; entry; entry = entry->prev)
  	if (entry->id == id)
  	  {
- 	    entry->num_pushes = 1;
  	    alignment_stack = entry;
  	    break;
  	  }
        if (entry == NULL)
  	warning ("\
! #pragma pack(pop, %s) encountered without matching #pragma pack(push, %s, <n>)"
  		 , IDENTIFIER_POINTER (id), IDENTIFIER_POINTER (id));
      }
  
!   if (-- alignment_stack->num_pushes == 0)
!     {
!       entry = alignment_stack->prev;
  
!       if (entry == NULL)
! 	maximum_field_alignment = default_alignment;
!       else
! 	maximum_field_alignment = entry->alignment;
  
!       alignment_stack = entry;
!     }
  }
  #else  /* not HANDLE_PRAGMA_PACK_PUSH_POP */
  #define SET_GLOBAL_ALIGNMENT(ALIGN) (maximum_field_alignment = (ALIGN))
  #define push_alignment(ID, N) \
!     GCC_BAD("#pragma pack(push[, id], <n>) is not supported on this target")
  #define pop_alignment(ID) \
!     GCC_BAD("#pragma pack(pop[, id], <n>) is not supported on this target")
  #endif /* HANDLE_PRAGMA_PACK_PUSH_POP */
  
  /* #pragma pack ()
     #pragma pack (N)
     
     #pragma pack (push, N)
     #pragma pack (push, ID, N)
     #pragma pack (pop)
     #pragma pack (pop, ID) */
  static void
! handle_pragma_pack (cpp_reader *dummy ATTRIBUTE_UNUSED)
  {
    tree x, id = 0;
    int align = -1;
--- 104,143 ----
        for (entry = alignment_stack; entry; entry = entry->prev)
  	if (entry->id == id)
  	  {
  	    alignment_stack = entry;
  	    break;
  	  }
        if (entry == NULL)
  	warning ("\
! #pragma pack(pop, %s) encountered without matching #pragma pack(push, %s)"
  		 , IDENTIFIER_POINTER (id), IDENTIFIER_POINTER (id));
      }
  
!   entry = alignment_stack->prev;
  
!   maximum_field_alignment = entry ? entry->alignment : default_alignment;
  
!   alignment_stack = entry;
  }
  #else  /* not HANDLE_PRAGMA_PACK_PUSH_POP */
  #define SET_GLOBAL_ALIGNMENT(ALIGN) (maximum_field_alignment = (ALIGN))
  #define push_alignment(ID, N) \
!     GCC_BAD ("#pragma pack(push[, id], <n>) is not supported on this target")
  #define pop_alignment(ID) \
!     GCC_BAD ("#pragma pack(pop[, id], <n>) is not supported on this target")
  #endif /* HANDLE_PRAGMA_PACK_PUSH_POP */
  
  /* #pragma pack ()
     #pragma pack (N)
     
+    #pragma pack (push)
     #pragma pack (push, N)
+    #pragma pack (push, ID)
     #pragma pack (push, ID, N)
     #pragma pack (pop)
     #pragma pack (pop, ID) */
  static void
! handle_pragma_pack (cpp_reader * ARG_UNUSED (dummy))
  {
    tree x, id = 0;
    int align = -1;
*************** handle_pragma_pack (cpp_reader *dummy AT
*** 162,188 ****
    enum { set, push, pop } action;
  
    if (c_lex (&x) != CPP_OPEN_PAREN)
!     GCC_BAD ("missing '(' after '#pragma pack' - ignored");
  
    token = c_lex (&x);
    if (token == CPP_CLOSE_PAREN)
      {
        action = set;
!       align = 0;
      }
    else if (token == CPP_NUMBER)
      {
        align = TREE_INT_CST_LOW (x);
        action = set;
        if (c_lex (&x) != CPP_CLOSE_PAREN)
! 	GCC_BAD ("malformed '#pragma pack' - ignored");
      }
    else if (token == CPP_NAME)
      {
! #define GCC_BAD_ACTION do { if (action == push) \
! 	  GCC_BAD ("malformed '#pragma pack(push[, id], <n>)' - ignored"); \
  	else \
! 	  GCC_BAD ("malformed '#pragma pack(pop[, id])' - ignored"); \
  	} while (0)
  
        const char *op = IDENTIFIER_POINTER (x);
--- 145,171 ----
    enum { set, push, pop } action;
  
    if (c_lex (&x) != CPP_OPEN_PAREN)
!     GCC_BAD ("missing %<(%> after %<#pragma pack%> - ignored");
  
    token = c_lex (&x);
    if (token == CPP_CLOSE_PAREN)
      {
        action = set;
!       align = initial_max_fld_align;
      }
    else if (token == CPP_NUMBER)
      {
        align = TREE_INT_CST_LOW (x);
        action = set;
        if (c_lex (&x) != CPP_CLOSE_PAREN)
! 	GCC_BAD ("malformed %<#pragma pack%> - ignored");
      }
    else if (token == CPP_NAME)
      {
! #define GCC_BAD_ACTION do { if (action != pop) \
! 	  GCC_BAD ("malformed %<#pragma pack(push[, id][, <n>])%> - ignored"); \
  	else \
! 	  GCC_BAD ("malformed %<#pragma pack(pop[, id])%> - ignored"); \
  	} while (0)
  
        const char *op = IDENTIFIER_POINTER (x);
*************** handle_pragma_pack (cpp_reader *dummy AT
*** 191,223 ****
        else if (!strcmp (op, "pop"))
  	action = pop;
        else
! 	GCC_BAD2 ("unknown action '%s' for '#pragma pack' - ignored", op);
! 
!       token = c_lex (&x);
!       if (token != CPP_COMMA && action == push)
! 	GCC_BAD_ACTION;
  
!       if (token == CPP_COMMA)
  	{
  	  token = c_lex (&x);
! 	  if (token == CPP_NAME)
  	    {
  	      id = x;
- 	      if (action == push && c_lex (&x) != CPP_COMMA)
- 		GCC_BAD_ACTION;
- 	      token = c_lex (&x);
  	    }
! 
! 	  if (action == push)
  	    {
! 	      if (token == CPP_NUMBER)
! 		{
! 		  align = TREE_INT_CST_LOW (x);
! 		  token = c_lex (&x);
! 		}
! 	      else
! 		GCC_BAD_ACTION;
  	    }
  	}
  
        if (token != CPP_CLOSE_PAREN)
--- 174,196 ----
        else if (!strcmp (op, "pop"))
  	action = pop;
        else
! 	GCC_BAD2 ("unknown action %qs for %<#pragma pack%> - ignored", op);
  
!       while ((token = c_lex (&x)) == CPP_COMMA)
  	{
  	  token = c_lex (&x);
! 	  if (token == CPP_NAME && id == 0)
  	    {
  	      id = x;
  	    }
! 	  else if (token == CPP_NUMBER && action == push && align == -1)
  	    {
! 	      align = TREE_INT_CST_LOW (x);
! 	      if (align == -1)
! 		action = set;
  	    }
+ 	  else
+ 	    GCC_BAD_ACTION;
  	}
  
        if (token != CPP_CLOSE_PAREN)
*************** handle_pragma_pack (cpp_reader *dummy AT
*** 225,234 ****
  #undef GCC_BAD_ACTION
      }
    else
!     GCC_BAD ("malformed '#pragma pack' - ignored");
  
    if (c_lex (&x) != CPP_EOF)
!     warning ("junk at end of '#pragma pack'");
  
    if (action != pop)
      switch (align)
--- 198,210 ----
  #undef GCC_BAD_ACTION
      }
    else
!     GCC_BAD ("malformed %<#pragma pack%> - ignored");
  
    if (c_lex (&x) != CPP_EOF)
!     warning ("junk at end of %<#pragma pack%>");
! 
!   if (flag_pack_struct)
!     GCC_BAD ("#pragma pack has no effect with -fpack-struct - ignored");
  
    if (action != pop)
      switch (align)
*************** handle_pragma_pack (cpp_reader *dummy AT
*** 241,246 ****
--- 217,228 ----
        case 16:
  	align *= BITS_PER_UNIT;
  	break;
+       case -1:
+ 	if (action == push)
+ 	  {
+ 	    align = maximum_field_alignment;
+ 	    break;
+ 	  }
        default:
  	GCC_BAD2 ("alignment must be a small power of two, not %d", align);
        }
*************** apply_pragma_weak (tree decl, tree value
*** 275,281 ****
    if (SUPPORTS_WEAK && DECL_EXTERNAL (decl) && TREE_USED (decl)
        && !DECL_WEAK (decl) /* Don't complain about a redundant #pragma.  */
        && TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)))
!     warning ("%Japplying #pragma weak '%D' after first use results "
               "in unspecified behavior", decl, decl);
  
    declare_weak (decl);
--- 257,263 ----
    if (SUPPORTS_WEAK && DECL_EXTERNAL (decl) && TREE_USED (decl)
        && !DECL_WEAK (decl) /* Don't complain about a redundant #pragma.  */
        && TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)))
!     warning ("%Japplying #pragma weak %qD after first use results "
               "in unspecified behavior", decl, decl);
  
    declare_weak (decl);
*************** maybe_apply_pragma_weak (tree decl)
*** 297,303 ****
      return;
    /* If it's not a function or a variable, it can't be weak.
       FIXME: what kinds of things are visible outside this file but
!      aren't functions or variables?   Should this be an abort() instead?  */
    if (TREE_CODE (decl) != FUNCTION_DECL && TREE_CODE (decl) != VAR_DECL)
      return;
  
--- 279,285 ----
      return;
    /* If it's not a function or a variable, it can't be weak.
       FIXME: what kinds of things are visible outside this file but
!      aren't functions or variables?   Should this be an assert instead?  */
    if (TREE_CODE (decl) != FUNCTION_DECL && TREE_CODE (decl) != VAR_DECL)
      return;
  
*************** maybe_apply_pragma_weak (tree decl)
*** 312,320 ****
        }
  }
  
  /* #pragma weak name [= value] */
  static void
! handle_pragma_weak (cpp_reader *dummy ATTRIBUTE_UNUSED)
  {
    tree name, value, x, decl;
    enum cpp_ttype t;
--- 294,329 ----
        }
  }
  
+ /* Process all "#pragma weak A = B" directives where we have not seen
+    a decl for A.  */
+ void
+ maybe_apply_pending_pragma_weaks (void)
+ {
+   tree *p, t, alias_id, id, decl, *next;
+ 
+   for (p = &pending_weaks; (t = *p) ; p = next)
+     {
+       next = &TREE_CHAIN (t);
+       alias_id = TREE_PURPOSE (t);
+       id = TREE_VALUE (t);
+ 
+       if (TREE_VALUE (t) == NULL)
+ 	continue;
+ 
+       decl = build_decl (FUNCTION_DECL, alias_id, default_function_type);
+ 
+       DECL_ARTIFICIAL (decl) = 1;
+       TREE_PUBLIC (decl) = 1;
+       DECL_EXTERNAL (decl) = 1;
+       DECL_WEAK (decl) = 1;
+ 
+       assemble_alias (decl, id);
+     }
+ }
+ 
  /* #pragma weak name [= value] */
  static void
! handle_pragma_weak (cpp_reader * ARG_UNUSED (dummy))
  {
    tree name, value, x, decl;
    enum cpp_ttype t;
*************** handle_pragma_weak (cpp_reader *dummy AT
*** 334,340 ****
      warning ("junk at end of #pragma weak");
  
    decl = identifier_global_value (name);
!   if (decl && TREE_CODE_CLASS (TREE_CODE (decl)) == 'd')
      {
        apply_pragma_weak (decl, value);
        if (value)
--- 343,349 ----
      warning ("junk at end of #pragma weak");
  
    decl = identifier_global_value (name);
!   if (decl && DECL_P (decl))
      {
        apply_pragma_weak (decl, value);
        if (value)
*************** handle_pragma_weak (cpp_reader *dummy AT
*** 345,427 ****
  }
  #else
  void
! maybe_apply_pragma_weak (tree decl ATTRIBUTE_UNUSED)
  {
  }
  #endif /* HANDLE_PRAGMA_WEAK */
  
  static GTY(()) tree pending_redefine_extname;
  
- #ifdef HANDLE_PRAGMA_REDEFINE_EXTNAME
  static void handle_pragma_redefine_extname (cpp_reader *);
  
! /* #pragma redefined_extname oldname newname */
  static void
! handle_pragma_redefine_extname (cpp_reader *dummy ATTRIBUTE_UNUSED)
  {
    tree oldname, newname, decl, x;
    enum cpp_ttype t;
  
    if (c_lex (&oldname) != CPP_NAME)
!     {
!       warning ("malformed #pragma redefine_extname, ignored");
!       return;
!     }
    if (c_lex (&newname) != CPP_NAME)
!     {
!       warning ("malformed #pragma redefine_extname, ignored");
!       return;
!     }
    t = c_lex (&x);
    if (t != CPP_EOF)
      warning ("junk at end of #pragma redefine_extname");
  
    decl = identifier_global_value (oldname);
!   if (decl && (TREE_CODE (decl) == FUNCTION_DECL
! 	       || TREE_CODE (decl) == VAR_DECL))
      {
!       if (DECL_ASSEMBLER_NAME_SET_P (decl)
! 	  && DECL_ASSEMBLER_NAME (decl) != newname)
!         warning ("#pragma redefine_extname conflicts with declaration");
!       change_decl_assembler_name (decl, newname);
      }
    else
!     add_to_renaming_pragma_list(oldname, newname);
  }
- #endif
  
  void
  add_to_renaming_pragma_list (tree oldname, tree newname)
  {
    pending_redefine_extname
      = tree_cons (oldname, newname, pending_redefine_extname);
  }
  
  static GTY(()) tree pragma_extern_prefix;
  
- #ifdef HANDLE_PRAGMA_EXTERN_PREFIX
- static void handle_pragma_extern_prefix (cpp_reader *);
- 
  /* #pragma extern_prefix "prefix" */
  static void
! handle_pragma_extern_prefix (cpp_reader *dummy ATTRIBUTE_UNUSED)
  {
    tree prefix, x;
    enum cpp_ttype t;
  
    if (c_lex (&prefix) != CPP_STRING)
!     {
!       warning ("malformed #pragma extern_prefix, ignored");
!       return;
!     }
    t = c_lex (&x);
    if (t != CPP_EOF)
      warning ("junk at end of #pragma extern_prefix");
  
!   /* Note that the length includes the null terminator.  */
!   pragma_extern_prefix = (TREE_STRING_LENGTH (prefix) > 1 ? prefix : NULL);
  }
- #endif
  
  /* Hook from the front ends to apply the results of one of the preceding
     pragmas that rename variables.  */
--- 354,493 ----
  }
  #else
  void
! maybe_apply_pragma_weak (tree ARG_UNUSED (decl))
! {
! }
! 
! void
! maybe_apply_pending_pragma_weaks (void)
  {
  }
  #endif /* HANDLE_PRAGMA_WEAK */
  
+ /* GCC supports two #pragma directives for renaming the external
+    symbol associated with a declaration (DECL_ASSEMBLER_NAME), for
+    compatibility with the Solaris and Tru64 system headers.  GCC also
+    has its own notation for this, __asm__("name") annotations.
+ 
+    Corner cases of these features and their interaction:
+ 
+    1) Both pragmas silently apply only to declarations with external
+       linkage (that is, TREE_PUBLIC || DECL_EXTERNAL).  Asm labels
+       do not have this restriction.
+ 
+    2) In C++, both #pragmas silently apply only to extern "C" declarations.
+       Asm labels do not have this restriction.
+ 
+    3) If any of the three ways of changing DECL_ASSEMBLER_NAME is
+       applied to a decl whose DECL_ASSEMBLER_NAME is already set, and the
+       new name is different, a warning issues and the name does not change.
+ 
+    4) The "source name" for #pragma redefine_extname is the DECL_NAME,
+       *not* the DECL_ASSEMBLER_NAME.
+ 
+    5) If #pragma extern_prefix is in effect and a declaration occurs
+       with an __asm__ name, the #pragma extern_prefix is silently
+       ignored for that declaration.
+ 
+    6) If #pragma extern_prefix and #pragma redefine_extname apply to
+       the same declaration, whichever triggered first wins, and a warning
+       is issued.  (We would like to have #pragma redefine_extname always
+       win, but it can appear either before or after the declaration, and
+       if it appears afterward, we have no way of knowing whether a modified
+       DECL_ASSEMBLER_NAME is due to #pragma extern_prefix.)  */
+ 
  static GTY(()) tree pending_redefine_extname;
  
  static void handle_pragma_redefine_extname (cpp_reader *);
  
! /* #pragma redefine_extname oldname newname */
  static void
! handle_pragma_redefine_extname (cpp_reader * ARG_UNUSED (dummy))
  {
    tree oldname, newname, decl, x;
    enum cpp_ttype t;
  
    if (c_lex (&oldname) != CPP_NAME)
!     GCC_BAD ("malformed #pragma redefine_extname, ignored");
    if (c_lex (&newname) != CPP_NAME)
!     GCC_BAD ("malformed #pragma redefine_extname, ignored");
    t = c_lex (&x);
    if (t != CPP_EOF)
      warning ("junk at end of #pragma redefine_extname");
  
+   if (!flag_mudflap && !targetm.handle_pragma_redefine_extname)
+     {
+       if (warn_unknown_pragmas > in_system_header)
+ 	warning ("#pragma redefine_extname not supported on this target");
+       return;
+     }
+ 
    decl = identifier_global_value (oldname);
!   if (decl
!       && (TREE_PUBLIC (decl) || DECL_EXTERNAL (decl))
!       && (TREE_CODE (decl) == FUNCTION_DECL
! 	  || TREE_CODE (decl) == VAR_DECL)
!       && has_c_linkage (decl))
      {
!       if (DECL_ASSEMBLER_NAME_SET_P (decl))
! 	{
! 	  const char *name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
! 	  name = targetm.strip_name_encoding (name);
! 
! 	  if (strcmp (name, IDENTIFIER_POINTER (newname)))
! 	    warning ("#pragma redefine_extname ignored due to conflict with "
! 		     "previous rename");
! 	}
!       else
! 	change_decl_assembler_name (decl, newname);
      }
    else
!     /* We have to add this to the rename list even if there's already
!        a global value that doesn't meet the above criteria, because in
!        C++ "struct foo {...};" puts "foo" in the current namespace but
!        does *not* conflict with a subsequent declaration of a function
!        or variable foo.  See g++.dg/other/pragma-re-2.C.  */
!     add_to_renaming_pragma_list (oldname, newname);
  }
  
+ /* This is called from here and from ia64.c.  */
  void
  add_to_renaming_pragma_list (tree oldname, tree newname)
  {
+   tree previous = purpose_member (oldname, pending_redefine_extname);
+   if (previous)
+     {
+       if (TREE_VALUE (previous) != newname)
+ 	warning ("#pragma redefine_extname ignored due to conflict with "
+ 		 "previous #pragma redefine_extname");
+       return;
+     }
+   
    pending_redefine_extname
      = tree_cons (oldname, newname, pending_redefine_extname);
  }
  
  static GTY(()) tree pragma_extern_prefix;
  
  /* #pragma extern_prefix "prefix" */
  static void
! handle_pragma_extern_prefix (cpp_reader * ARG_UNUSED (dummy))
  {
    tree prefix, x;
    enum cpp_ttype t;
  
    if (c_lex (&prefix) != CPP_STRING)
!     GCC_BAD ("malformed #pragma extern_prefix, ignored");
    t = c_lex (&x);
    if (t != CPP_EOF)
      warning ("junk at end of #pragma extern_prefix");
  
!   if (targetm.handle_pragma_extern_prefix)
!     /* Note that the length includes the null terminator.  */
!     pragma_extern_prefix = (TREE_STRING_LENGTH (prefix) > 1 ? prefix : NULL);
!   else if (warn_unknown_pragmas > in_system_header)
!     warning ("#pragma extern_prefix not supported on this target");
  }
  
  /* Hook from the front ends to apply the results of one of the preceding
     pragmas that rename variables.  */
*************** handle_pragma_extern_prefix (cpp_reader 
*** 429,493 ****
  tree
  maybe_apply_renaming_pragma (tree decl, tree asmname)
  {
!   tree oldname;
  
!   /* Copied from the check in set_decl_assembler_name.  */
!   if (TREE_CODE (decl) == FUNCTION_DECL
!       || (TREE_CODE (decl) == VAR_DECL 
!           && (TREE_STATIC (decl) 
!               || DECL_EXTERNAL (decl) 
!               || TREE_PUBLIC (decl))))
!     oldname = DECL_ASSEMBLER_NAME (decl);
!   else
      return asmname;
  
!   /* If the name begins with a *, that's a sign of an asmname attached to
!      a previous declaration.  */
!   if (IDENTIFIER_POINTER (oldname)[0] == '*')
      {
!       const char *oldasmname = IDENTIFIER_POINTER (oldname) + 1;
!       if (asmname && strcmp (TREE_STRING_POINTER (asmname), oldasmname) != 0)
! 	warning ("asm declaration conflicts with previous rename");
!       asmname = build_string (strlen (oldasmname), oldasmname);
      }
  
!   {
!     tree *p, t;
  
!     for (p = &pending_redefine_extname; (t = *p) ; p = &TREE_CHAIN (t))
!       if (oldname == TREE_PURPOSE (t))
! 	{
! 	  const char *newname = IDENTIFIER_POINTER (TREE_VALUE (t));
  
! 	  if (asmname && strcmp (TREE_STRING_POINTER (asmname), newname) != 0)
!             warning ("#pragma redefine_extname conflicts with declaration");
! 	  *p = TREE_CHAIN (t);
  
! 	  return build_string (strlen (newname), newname);
! 	}
!   }
  
! #ifdef HANDLE_PRAGMA_EXTERN_PREFIX
!   if (pragma_extern_prefix && !asmname)
      {
!       char *x = concat (TREE_STRING_POINTER (pragma_extern_prefix),
! 			IDENTIFIER_POINTER (oldname), NULL);
!       asmname = build_string (strlen (x), x);
!       free (x);
!       return asmname;
      }
- #endif
  
!   return asmname;
  }
  
! /* Front-end wrapper for pragma registration to avoid dragging
     cpplib.h in almost everywhere.  */
  void
  c_register_pragma (const char *space, const char *name,
  		   void (*handler) (struct cpp_reader *))
  {
!   cpp_register_pragma (parse_in, space, name, handler);
  }
  
  /* Set up front-end pragmas.  */
--- 495,678 ----
  tree
  maybe_apply_renaming_pragma (tree decl, tree asmname)
  {
!   tree *p, t;
  
!   /* The renaming pragmas are only applied to declarations with
!      external linkage.  */
!   if ((TREE_CODE (decl) != FUNCTION_DECL && TREE_CODE (decl) != VAR_DECL)
!       || (!TREE_PUBLIC (decl) && !DECL_EXTERNAL (decl))
!       || !has_c_linkage (decl))
      return asmname;
  
!   /* If the DECL_ASSEMBLER_NAME is already set, it does not change,
!      but we may warn about a rename that conflicts.  */
!   if (DECL_ASSEMBLER_NAME_SET_P (decl))
      {
!       const char *oldname = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
!       oldname = targetm.strip_name_encoding (oldname);
! 
!       if (asmname && strcmp (TREE_STRING_POINTER (asmname), oldname))
! 	  warning ("asm declaration ignored due to "
! 		   "conflict with previous rename");
! 
!       /* Take any pending redefine_extname off the list.  */
!       for (p = &pending_redefine_extname; (t = *p); p = &TREE_CHAIN (t))
! 	if (DECL_NAME (decl) == TREE_PURPOSE (t))
! 	  {
! 	    /* Only warn if there is a conflict.  */
! 	    if (strcmp (IDENTIFIER_POINTER (TREE_VALUE (t)), oldname))
! 	      warning ("#pragma redefine_extname ignored due to "
! 		       "conflict with previous rename");
! 
! 	    *p = TREE_CHAIN (t);
! 	    break;
! 	  }
!       return 0;
      }
  
!   /* Find out if we have a pending #pragma redefine_extname.  */
!   for (p = &pending_redefine_extname; (t = *p); p = &TREE_CHAIN (t))
!     if (DECL_NAME (decl) == TREE_PURPOSE (t))
!       {
! 	tree newname = TREE_VALUE (t);
! 	*p = TREE_CHAIN (t);
  
! 	/* If we already have an asmname, #pragma redefine_extname is
!  	   ignored (with a warning if it conflicts).  */
! 	if (asmname)
! 	  {
! 	    if (strcmp (TREE_STRING_POINTER (asmname),
! 			IDENTIFIER_POINTER (newname)) != 0)
! 	      warning ("#pragma redefine_extname ignored due to "
! 		       "conflict with __asm__ declaration");
! 	    return asmname;
! 	  }
  
! 	/* Otherwise we use what we've got; #pragma extern_prefix is
! 	   silently ignored.  */
! 	return build_string (IDENTIFIER_LENGTH (newname),
! 			     IDENTIFIER_POINTER (newname));
!       }
  
!   /* If we've got an asmname, #pragma extern_prefix is silently ignored.  */
!   if (asmname)
!     return asmname;
  
!   /* If #pragma extern_prefix is in effect, apply it.  */
!   if (pragma_extern_prefix)
      {
!       const char *prefix = TREE_STRING_POINTER (pragma_extern_prefix);
!       size_t plen = TREE_STRING_LENGTH (pragma_extern_prefix) - 1;
! 
!       const char *id = IDENTIFIER_POINTER (DECL_NAME (decl));
!       size_t ilen = IDENTIFIER_LENGTH (DECL_NAME (decl));
! 	
!       char *newname = (char *) alloca (plen + ilen + 1);
! 
!       memcpy (newname,        prefix, plen);
!       memcpy (newname + plen, id, ilen + 1);
! 
!       return build_string (plen + ilen, newname);
      }
  
!   /* Nada.  */
!   return 0;
  }
  
! 
! #ifdef HANDLE_PRAGMA_VISIBILITY
! static void handle_pragma_visibility (cpp_reader *);
! 
! /* Sets the default visibility for symbols to something other than that
!    specified on the command line.  */
! static void
! handle_pragma_visibility (cpp_reader *dummy ATTRIBUTE_UNUSED)
! { /* Form is #pragma GCC visibility push(hidden)|pop */
!   static int visstack [16], visidx;
!   tree x;
!   enum cpp_ttype token;
!   enum { bad, push, pop } action = bad;
!  
!   token = c_lex (&x);
!   if (token == CPP_NAME)
!     {
!       const char *op = IDENTIFIER_POINTER (x);
!       if (!strcmp (op, "push"))
!         action = push;
!       else if (!strcmp (op, "pop"))
!         action = pop;
!     }
!   if (bad == action)
!     GCC_BAD ("#pragma GCC visibility must be followed by push or pop");
!   else
!     {
!       if (pop == action)
!         {
!           if (!visidx)
!             {
!               GCC_BAD ("No matching push for %<#pragma GCC visibility pop%>");
!             }
!           else
!             {
!               default_visibility = visstack[--visidx];
!               visibility_options.inpragma = (visidx>0);
!             }
!         }
!       else
!         {
!           if (c_lex (&x) != CPP_OPEN_PAREN)
!             GCC_BAD ("missing %<(%> after %<#pragma GCC visibility push%> - ignored");
!           token = c_lex (&x);
!           if (token != CPP_NAME)
!             {
!               GCC_BAD ("malformed #pragma GCC visibility push");
!             }
!           else if (visidx >= 16)
!             {
!               GCC_BAD ("No more than sixteen #pragma GCC visibility pushes allowed at once");
!             }
!           else
!             {
!               const char *str = IDENTIFIER_POINTER (x);
!               visstack[visidx++] = default_visibility;
!               if (!strcmp (str, "default"))
!                 default_visibility = VISIBILITY_DEFAULT;
!               else if (!strcmp (str, "internal"))
!                 default_visibility = VISIBILITY_INTERNAL;
!               else if (!strcmp (str, "hidden"))
!                 default_visibility = VISIBILITY_HIDDEN;  
!               else if (!strcmp (str, "protected"))
!                 default_visibility = VISIBILITY_PROTECTED;
!               else
!                 {
!                   GCC_BAD ("#pragma GCC visibility push() must specify default, internal, hidden or protected");
!                 }
!               visibility_options.inpragma = 1;
!             }
!           if (c_lex (&x) != CPP_CLOSE_PAREN)
!             GCC_BAD ("missing %<(%> after %<#pragma GCC visibility push%> - ignored");
!         }
!     }
!   if (c_lex (&x) != CPP_EOF)
!     warning ("junk at end of %<#pragma GCC visibility%>");
! }
! 
! #endif
! 
! /* Front-end wrappers for pragma registration to avoid dragging
     cpplib.h in almost everywhere.  */
  void
  c_register_pragma (const char *space, const char *name,
  		   void (*handler) (struct cpp_reader *))
  {
!   cpp_register_pragma (parse_in, space, name, handler, 0);
! }
! 
! void
! c_register_pragma_with_expansion (const char *space, const char *name,
! 				  void (*handler) (struct cpp_reader *))
! {
!   cpp_register_pragma (parse_in, space, name, handler, 1);
  }
  
  /* Set up front-end pragmas.  */
*************** void
*** 495,511 ****
  init_pragma (void)
  {
  #ifdef HANDLE_PRAGMA_PACK
    c_register_pragma (0, "pack", handle_pragma_pack);
  #endif
  #ifdef HANDLE_PRAGMA_WEAK
    c_register_pragma (0, "weak", handle_pragma_weak);
  #endif
! #ifdef HANDLE_PRAGMA_REDEFINE_EXTNAME
!   c_register_pragma (0, "redefine_extname", handle_pragma_redefine_extname);
  #endif
! #ifdef HANDLE_PRAGMA_EXTERN_PREFIX
    c_register_pragma (0, "extern_prefix", handle_pragma_extern_prefix);
! #endif
  
  #ifdef REGISTER_TARGET_PRAGMAS
    REGISTER_TARGET_PRAGMAS ();
--- 680,702 ----
  init_pragma (void)
  {
  #ifdef HANDLE_PRAGMA_PACK
+ #ifdef HANDLE_PRAGMA_PACK_WITH_EXPANSION
+   c_register_pragma_with_expansion (0, "pack", handle_pragma_pack);
+ #else
    c_register_pragma (0, "pack", handle_pragma_pack);
  #endif
+ #endif
  #ifdef HANDLE_PRAGMA_WEAK
    c_register_pragma (0, "weak", handle_pragma_weak);
  #endif
! #ifdef HANDLE_PRAGMA_VISIBILITY
!   c_register_pragma ("GCC", "visibility", handle_pragma_visibility);
  #endif
! 
!   c_register_pragma (0, "redefine_extname", handle_pragma_redefine_extname);
    c_register_pragma (0, "extern_prefix", handle_pragma_extern_prefix);
! 
!   c_register_pragma ("GCC", "pch_preprocess", c_common_pch_pragma);
  
  #ifdef REGISTER_TARGET_PRAGMAS
    REGISTER_TARGET_PRAGMAS ();
diff -Nrcpad gcc-3.4.3/gcc/c-pragma.h gcc-4.0.0/gcc/c-pragma.h
*** gcc-3.4.3/gcc/c-pragma.h	Sat Jan 31 06:18:05 2004
--- gcc-4.0.0/gcc/c-pragma.h	Mon Nov 29 18:53:54 2004
*************** Software Foundation, 59 Temple Place - S
*** 22,27 ****
--- 22,29 ----
  #ifndef GCC_C_PRAGMA_H
  #define GCC_C_PRAGMA_H
  
+ #include <cpplib.h> /* For enum cpp_ttype.  */
+ 
  /* Cause the `yydebug' variable to be defined.  */
  #define YYDEBUG 1
  extern int yydebug;
*************** extern struct cpp_reader* parse_in;
*** 44,60 ****
  #define HANDLE_PRAGMA_PACK 1
  #endif /* HANDLE_PRAGMA_PACK_PUSH_POP */
  
  extern void init_pragma (void);
  
! /* Front-end wrapper for pragma registration to avoid dragging
     cpplib.h in almost everywhere.  */
  extern void c_register_pragma (const char *, const char *,
  			       void (*) (struct cpp_reader *));
  extern void maybe_apply_pragma_weak (tree);
  extern tree maybe_apply_renaming_pragma (tree, tree);
  extern void add_to_renaming_pragma_list (tree, tree);
  
! extern int c_lex (tree *);
! extern int c_lex_with_flags (tree *, unsigned char *);
  
  #endif /* GCC_C_PRAGMA_H */
--- 46,80 ----
  #define HANDLE_PRAGMA_PACK 1
  #endif /* HANDLE_PRAGMA_PACK_PUSH_POP */
  
+ /* It's safe to always leave visibility pragma enabled as if
+    visibility is not supported on the host OS platform the
+    statements are ignored.  */
+ #define HANDLE_PRAGMA_VISIBILITY 1
+ 
  extern void init_pragma (void);
  
! /* Front-end wrappers for pragma registration to avoid dragging
     cpplib.h in almost everywhere.  */
  extern void c_register_pragma (const char *, const char *,
  			       void (*) (struct cpp_reader *));
+ extern void c_register_pragma_with_expansion (const char *, const char *,
+ 					      void (*) (struct cpp_reader *));
  extern void maybe_apply_pragma_weak (tree);
+ extern void maybe_apply_pending_pragma_weaks (void);
  extern tree maybe_apply_renaming_pragma (tree, tree);
  extern void add_to_renaming_pragma_list (tree, tree);
  
! extern enum cpp_ttype c_lex (tree *);
! extern enum cpp_ttype c_lex_with_flags (tree *, unsigned char *);
! 
! /* If 1, then lex strings into the execution character set.  
!    If 0, lex strings into the host character set.
!    If -1, lex both, and chain them together, such that the former
!    is the TREE_CHAIN of the latter.  */
! extern int c_lex_string_translate;
! 
! /* If true, strings should be passed to the caller of c_lex completely
!    unmolested (no concatenation, no translation).  */
! extern bool c_lex_return_raw_strings;
  
  #endif /* GCC_C_PRAGMA_H */
diff -Nrcpad gcc-3.4.3/gcc/c-pretty-print.c gcc-4.0.0/gcc/c-pretty-print.c
*** gcc-3.4.3/gcc/c-pretty-print.c	Fri Jan 23 23:35:53 2004
--- gcc-4.0.0/gcc/c-pretty-print.c	Mon Feb 21 14:39:46 2005
***************
*** 1,5 ****
  /* Subroutines common to both C and C++ pretty-printers.
!    Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
     Contributed by Gabriel Dos Reis <gdr@integrable-solutions.net>
  
  This file is part of GCC.
--- 1,5 ----
  /* Subroutines common to both C and C++ pretty-printers.
!    Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
     Contributed by Gabriel Dos Reis <gdr@integrable-solutions.net>
  
  This file is part of GCC.
*************** Software Foundation, 59 Temple Place - S
*** 26,31 ****
--- 26,33 ----
  #include "real.h"
  #include "c-pretty-print.h"
  #include "c-tree.h"
+ #include "tree-iterator.h"
+ #include "diagnostic.h"
  
  /* The pretty-printer code is primarily designed to closely follow
     (GNU) C and C++ grammars.  That is to be contrasted with spaghetti
*************** Software Foundation, 59 Temple Place - S
*** 41,64 ****
         pp_c_whitespace (PP);                 \
     } while (0)
  
- #define pp_c_left_bracket(PP)         \
-   do {                                \
-     pp_left_bracket (PP);             \
-     pp_base (PP)->padding = pp_none;  \
-   } while (0)
- 
- #define pp_c_right_bracket(PP)        \
-   do {                                \
-     pp_right_bracket (PP);            \
-     pp_base (PP)->padding = pp_none;  \
-   } while (0)
- 
- #define pp_c_star(PP)                 \
-   do {                                \
-     pp_star (PP);                     \
-     pp_base (PP)->padding = pp_none;  \
-   } while (0)
- 
  /* literal  */
  static void pp_c_char (c_pretty_printer *, int);
  
--- 43,48 ----
*************** pp_c_right_brace (c_pretty_printer *pp)
*** 119,124 ****
--- 103,122 ----
  }
  
  void
+ pp_c_left_bracket (c_pretty_printer *pp)
+ {
+   pp_left_bracket (pp);
+   pp_base (pp)->padding = pp_none;
+ }
+ 
+ void
+ pp_c_right_bracket (c_pretty_printer *pp)
+ {
+   pp_right_bracket (pp);
+   pp_base (pp)->padding = pp_none;
+ }
+ 
+ void
  pp_c_dot (c_pretty_printer *pp)
  {
    pp_dot (pp);
*************** pp_c_ampersand (c_pretty_printer *pp)
*** 133,138 ****
--- 131,143 ----
  }
  
  void
+ pp_c_star (c_pretty_printer *pp)
+ {
+   pp_star (pp);
+   pp_base (pp)->padding = pp_none;
+ }
+ 
+ void
  pp_c_arrow (c_pretty_printer *pp)
  {
    pp_arrow (pp);
*************** pp_c_arrow (c_pretty_printer *pp)
*** 140,156 ****
  }
  
  void
! pp_c_semicolon(c_pretty_printer *pp)
  {
    pp_semicolon (pp);
    pp_base (pp)->padding = pp_none;
  }
  
  static void
  pp_c_cv_qualifier (c_pretty_printer *pp, const char *cv)
  {
    const char *p = pp_last_position_in_text (pp);
!   if (p != NULL && *p == '*')
      pp_c_whitespace (pp);
    pp_c_identifier (pp, cv);
  }
--- 145,180 ----
  }
  
  void
! pp_c_semicolon (c_pretty_printer *pp)
  {
    pp_semicolon (pp);
    pp_base (pp)->padding = pp_none;
  }
  
+ void
+ pp_c_complement (c_pretty_printer *pp)
+ {
+   pp_complement (pp);
+   pp_base (pp)->padding = pp_none;
+ }
+ 
+ void
+ pp_c_exclamation (c_pretty_printer *pp)
+ {
+   pp_exclamation (pp);
+   pp_base (pp)->padding = pp_none;
+ }
+ 
+ /* Print out the external representation of CV-QUALIFIER.  */
+ 
  static void
  pp_c_cv_qualifier (c_pretty_printer *pp, const char *cv)
  {
    const char *p = pp_last_position_in_text (pp);
!   /* The C programming language does not have references, but it is much
!      simpler to handle those here rather than going through the same
!      logic in the C++ pretty-printer.  */
!   if (p != NULL && (*p == '*' || *p == '&'))
      pp_c_whitespace (pp);
    pp_c_identifier (pp, cv);
  }
*************** pp_c_type_cast (c_pretty_printer *pp, tr
*** 165,170 ****
--- 189,197 ----
    pp_c_right_paren (pp);
  }
  
+ /* We're about to pretty-print a pointer type as indicated by T.
+    Output a whitespace, if needed, preparing for subsequent output.  */
+ 
  void
  pp_c_space_for_pointer_operator (c_pretty_printer *pp, tree t)
  {
*************** void
*** 198,204 ****
  pp_c_type_qualifier_list (c_pretty_printer *pp, tree t)
  {
     int qualifiers;
!    
    if (!TYPE_P (t))
      t = TREE_TYPE (t);
  
--- 225,231 ----
  pp_c_type_qualifier_list (c_pretty_printer *pp, tree t)
  {
     int qualifiers;
! 
    if (!TYPE_P (t))
      t = TREE_TYPE (t);
  
*************** pp_c_pointer (c_pretty_printer *pp, tree
*** 234,239 ****
--- 261,273 ----
        pp_c_type_qualifier_list (pp, t);
        break;
  
+       /* ??? This node is now in GENERIC and so shouldn't be here.  But
+ 	 we'll fix that later.  */
+     case DECL_EXPR:
+       pp_declaration (pp, DECL_EXPR_DECL (t));
+       pp_needs_newline (pp) = true;
+       break;
+ 
      default:
        pp_unsupported_tree (pp, t);
      }
*************** pp_c_type_specifier (c_pretty_printer *p
*** 272,278 ****
        break;
  
      case IDENTIFIER_NODE:
!       pp_c_tree_identifier (pp, t);
        break;
  
      case VOID_TYPE:
--- 306,312 ----
        break;
  
      case IDENTIFIER_NODE:
!       pp_c_tree_decl_identifier (pp, t);
        break;
  
      case VOID_TYPE:
*************** pp_c_type_specifier (c_pretty_printer *p
*** 283,289 ****
        if (TYPE_NAME (t))
          t = TYPE_NAME (t);
        else
!         t = c_common_type_for_mode (TYPE_MODE (t), TREE_UNSIGNED (t));
        pp_c_type_specifier (pp, t);
        break;
  
--- 317,323 ----
        if (TYPE_NAME (t))
          t = TYPE_NAME (t);
        else
!         t = c_common_type_for_mode (TYPE_MODE (t), TYPE_UNSIGNED (t));
        pp_c_type_specifier (pp, t);
        break;
  
*************** pp_c_specifier_qualifier_list (c_pretty_
*** 350,355 ****
--- 384,391 ----
              pp_c_whitespace (pp);
              pp_c_left_paren (pp);
            }
+ 	else if (!c_dialect_cxx ())
+ 	  pp_c_whitespace (pp);
          pp_ptr_operator (pp, t);
        }
        break;
*************** pp_c_direct_abstract_declarator (c_prett
*** 445,451 ****
      case POINTER_TYPE:
        pp_abstract_declarator (pp, t);
        break;
!       
      case FUNCTION_TYPE:
        pp_c_parameter_type_list (pp, t);
        pp_direct_abstract_declarator (pp, TREE_TYPE (t));
--- 481,487 ----
      case POINTER_TYPE:
        pp_abstract_declarator (pp, t);
        break;
! 
      case FUNCTION_TYPE:
        pp_c_parameter_type_list (pp, t);
        pp_direct_abstract_declarator (pp, TREE_TYPE (t));
*************** pp_c_direct_abstract_declarator (c_prett
*** 453,459 ****
  
      case ARRAY_TYPE:
        pp_c_left_bracket (pp);
!       if (TYPE_DOMAIN (t))
          pp_expression (pp, TYPE_MAX_VALUE (TYPE_DOMAIN (t)));
        pp_c_right_bracket (pp);
        pp_direct_abstract_declarator (pp, TREE_TYPE (t));
--- 489,495 ----
  
      case ARRAY_TYPE:
        pp_c_left_bracket (pp);
!       if (TYPE_DOMAIN (t) && TYPE_MAX_VALUE (TYPE_DOMAIN (t)))
          pp_expression (pp, TYPE_MAX_VALUE (TYPE_DOMAIN (t)));
        pp_c_right_bracket (pp);
        pp_direct_abstract_declarator (pp, TREE_TYPE (t));
*************** pp_c_direct_abstract_declarator (c_prett
*** 471,477 ****
      case COMPLEX_TYPE:
      case TYPE_DECL:
        break;
!       
      default:
        pp_unsupported_tree (pp, t);
        break;
--- 507,513 ----
      case COMPLEX_TYPE:
      case TYPE_DECL:
        break;
! 
      default:
        pp_unsupported_tree (pp, t);
        break;
*************** pp_c_declaration_specifiers (c_pretty_pr
*** 540,546 ****
        direct-declarator [ static type-qualifier-list(opt) assignment-expression(opt)]
        direct-declarator [ type-qualifier-list static assignment-expression ]
        direct-declarator [ type-qualifier-list * ]
!       direct-declaratpr ( parameter-type-list )
        direct-declarator ( identifier-list(opt) )  */
  
  void
--- 576,582 ----
        direct-declarator [ static type-qualifier-list(opt) assignment-expression(opt)]
        direct-declarator [ type-qualifier-list static assignment-expression ]
        direct-declarator [ type-qualifier-list * ]
!       direct-declarator ( parameter-type-list )
        direct-declarator ( identifier-list(opt) )  */
  
  void
*************** pp_c_direct_declarator (c_pretty_printer
*** 553,563 ****
      case TYPE_DECL:
      case FIELD_DECL:
      case LABEL_DECL:
!       if (DECL_NAME (t))
!         {
!           pp_c_space_for_pointer_operator (pp, TREE_TYPE (t));
!           pp_c_tree_identifier (pp, DECL_NAME (t));
!         }
      case ARRAY_TYPE:
      case POINTER_TYPE:
        pp_abstract_declarator (pp, TREE_TYPE (t));
--- 589,598 ----
      case TYPE_DECL:
      case FIELD_DECL:
      case LABEL_DECL:
!       pp_c_space_for_pointer_operator (pp, TREE_TYPE (t));
!       pp_c_tree_decl_identifier (pp, t);
!       break;
! 
      case ARRAY_TYPE:
      case POINTER_TYPE:
        pp_abstract_declarator (pp, TREE_TYPE (t));
*************** pp_c_direct_declarator (c_pretty_printer
*** 570,576 ****
  
      case FUNCTION_DECL:
        pp_c_space_for_pointer_operator (pp, TREE_TYPE (TREE_TYPE (t)));
!       pp_c_tree_identifier (pp, DECL_NAME (t));
        if (pp_c_base (pp)->flags & pp_c_flag_abstract)
          pp_abstract_declarator (pp, TREE_TYPE (t));
        else
--- 605,611 ----
  
      case FUNCTION_DECL:
        pp_c_space_for_pointer_operator (pp, TREE_TYPE (TREE_TYPE (t)));
!       pp_c_tree_decl_identifier (pp, t);
        if (pp_c_base (pp)->flags & pp_c_flag_abstract)
          pp_abstract_declarator (pp, TREE_TYPE (t));
        else
*************** pp_c_declarator (c_pretty_printer *pp, t
*** 619,625 ****
        pp_direct_declarator (pp, t);
      break;
  
!     
      default:
        pp_unsupported_tree (pp, t);
        break;
--- 654,660 ----
        pp_direct_declarator (pp, t);
      break;
  
! 
      default:
        pp_unsupported_tree (pp, t);
        break;
*************** pp_c_function_definition (c_pretty_print
*** 677,726 ****
  
  /* Expressions.  */
  
! /* Print out a c-char.  */
  
  static void
  pp_c_char (c_pretty_printer *pp, int c)
  {
!   switch (c)
      {
!     case TARGET_NEWLINE:
!       pp_string (pp, "\\n");
!       break;
!     case TARGET_TAB:
!       pp_string (pp, "\\t");
!       break;
!     case TARGET_VT:
!       pp_string (pp, "\\v");
!       break;
!     case TARGET_BS:
!       pp_string (pp, "\\b");
!       break;
!     case TARGET_CR:
!       pp_string (pp, "\\r");
!       break;
!     case TARGET_FF:
!       pp_string (pp, "\\f");
!       break;
!     case TARGET_BELL:
!       pp_string (pp, "\\a");
!       break;
!     case '\\':
!       pp_string (pp, "\\\\");
!       break;
!     case '\'':
!       pp_string (pp, "\\'");
!       break;
!     case '\"':
!       pp_string (pp, "\\\"");
!       break;
!     default:
!       if (ISPRINT (c))
! 	pp_character (pp, c);
!       else
! 	pp_scalar (pp, "\\%03o", (unsigned) c);
!       break;
      }
  }
  
  /* Print out a STRING literal.  */
--- 712,748 ----
  
  /* Expressions.  */
  
! /* Print out a c-char.  This is called solely for characters which are
!    in the *target* execution character set.  We ought to convert them
!    back to the *host* execution character set before printing, but we
!    have no way to do this at present.  A decent compromise is to print
!    all characters as if they were in the host execution character set,
!    and not attempt to recover any named escape characters, but render
!    all unprintables as octal escapes.  If the host and target character
!    sets are the same, this produces relatively readable output.  If they
!    are not the same, strings may appear as gibberish, but that's okay
!    (in fact, it may well be what the reader wants, e.g. if they are looking
!    to see if conversion to the target character set happened correctly).
! 
!    A special case: we need to prefix \, ", and ' with backslashes.  It is
!    correct to do so for the *host*'s \, ", and ', because the rest of the
!    file appears in the host character set.  */
  
  static void
  pp_c_char (c_pretty_printer *pp, int c)
  {
!   if (ISPRINT (c))
      {
!       switch (c)
! 	{
! 	case '\\': pp_string (pp, "\\\\"); break;
! 	case '\'': pp_string (pp, "\\\'"); break;
! 	case '\"': pp_string (pp, "\\\""); break;
! 	default:   pp_character (pp, c);
! 	}
      }
+   else
+     pp_scalar (pp, "\\%03o", (unsigned) c);
  }
  
  /* Print out a STRING literal.  */
*************** pp_c_string_literal (c_pretty_printer *p
*** 737,742 ****
--- 759,766 ----
    pp_doublequote (pp);
  }
  
+ /* Pretty-print an INTEGER literal.  */
+ 
  static void
  pp_c_integer_constant (c_pretty_printer *pp, tree i)
  {
*************** pp_c_integer_constant (c_pretty_printer 
*** 748,763 ****
      {
        if (tree_int_cst_sgn (i) < 0)
          {
!           pp_c_char (pp, '-');
!           i = build_int_2 (-TREE_INT_CST_LOW (i),
!                            ~TREE_INT_CST_HIGH (i) + !TREE_INT_CST_LOW (i));
          }
        sprintf (pp_buffer (pp)->digit_buffer,
                 HOST_WIDE_INT_PRINT_DOUBLE_HEX,
                 TREE_INT_CST_HIGH (i), TREE_INT_CST_LOW (i));
        pp_string (pp, pp_buffer (pp)->digit_buffer);
      }
!   if (TREE_UNSIGNED (type))
      pp_character (pp, 'u');
    if (type == long_integer_type_node || type == long_unsigned_type_node)
      pp_character (pp, 'l');
--- 772,789 ----
      {
        if (tree_int_cst_sgn (i) < 0)
          {
!           pp_character (pp, '-');
!           i = build_int_cst_wide (NULL_TREE,
! 				  -TREE_INT_CST_LOW (i),
! 				  ~TREE_INT_CST_HIGH (i)
! 				  + !TREE_INT_CST_LOW (i));
          }
        sprintf (pp_buffer (pp)->digit_buffer,
                 HOST_WIDE_INT_PRINT_DOUBLE_HEX,
                 TREE_INT_CST_HIGH (i), TREE_INT_CST_LOW (i));
        pp_string (pp, pp_buffer (pp)->digit_buffer);
      }
!   if (TYPE_UNSIGNED (type))
      pp_character (pp, 'u');
    if (type == long_integer_type_node || type == long_unsigned_type_node)
      pp_character (pp, 'l');
*************** pp_c_character_constant (c_pretty_printe
*** 773,782 ****
  {
    tree type = TREE_TYPE (c);
    if (type == wchar_type_node)
!     pp_character (pp, 'L'); 
    pp_quote (pp);
!   if (host_integerp (c, TREE_UNSIGNED (type)))
!     pp_c_char (pp, tree_low_cst (c, TREE_UNSIGNED (type)));
    else
      pp_scalar (pp, "\\x%x", (unsigned) TREE_INT_CST_LOW (c));
    pp_quote (pp);
--- 799,808 ----
  {
    tree type = TREE_TYPE (c);
    if (type == wchar_type_node)
!     pp_character (pp, 'L');
    pp_quote (pp);
!   if (host_integerp (c, TYPE_UNSIGNED (type)))
!     pp_c_char (pp, tree_low_cst (c, TYPE_UNSIGNED (type)));
    else
      pp_scalar (pp, "\\x%x", (unsigned) TREE_INT_CST_LOW (c));
    pp_quote (pp);
*************** pp_c_floating_constant (c_pretty_printer
*** 856,867 ****
  }
  
  /* Pretty-print a compound literal expression.  GNU extensions include
!    vector constants.  */ 
  
  static void
  pp_c_compound_literal (c_pretty_printer *pp, tree e)
  {
!   tree type = TREE_TYPE (e);  
    pp_c_type_cast (pp, type);
  
    switch (TREE_CODE (type))
--- 882,893 ----
  }
  
  /* Pretty-print a compound literal expression.  GNU extensions include
!    vector constants.  */
  
  static void
  pp_c_compound_literal (c_pretty_printer *pp, tree e)
  {
!   tree type = TREE_TYPE (e);
    pp_c_type_cast (pp, type);
  
    switch (TREE_CODE (type))
*************** pp_c_constant (c_pretty_printer *pp, tre
*** 902,909 ****
            pp_c_character_constant (pp, e);
          else if (TREE_CODE (type) == ENUMERAL_TYPE
                   && pp_c_enumeration_constant (pp, e))
!           ; 
!         else 
            pp_c_integer_constant (pp, e);
        }
        break;
--- 928,935 ----
            pp_c_character_constant (pp, e);
          else if (TREE_CODE (type) == ENUMERAL_TYPE
                   && pp_c_enumeration_constant (pp, e))
!           ;
!         else
            pp_c_integer_constant (pp, e);
        }
        break;
*************** pp_c_constant (c_pretty_printer *pp, tre
*** 922,932 ****
      }
  }
  
  void
  pp_c_identifier (c_pretty_printer *pp, const char *id)
  {
!   pp_c_maybe_whitespace (pp);            
!   pp_identifier (pp, id);  
    pp_base (pp)->padding = pp_before;
  }
  
--- 948,960 ----
      }
  }
  
+ /* Pretty-print an IDENTIFIER_NODE, preceded by whitespace is necessary.  */
+ 
  void
  pp_c_identifier (c_pretty_printer *pp, const char *id)
  {
!   pp_c_maybe_whitespace (pp);
!   pp_identifier (pp, id);
    pp_base (pp)->padding = pp_before;
  }
  
*************** pp_c_primary_expression (c_pretty_printe
*** 948,955 ****
      case CONST_DECL:
      case FUNCTION_DECL:
      case LABEL_DECL:
!       e = DECL_NAME (e);
!       /* Fall through.  */
      case IDENTIFIER_NODE:
        pp_c_tree_identifier (pp, e);
        break;
--- 976,984 ----
      case CONST_DECL:
      case FUNCTION_DECL:
      case LABEL_DECL:
!       pp_c_tree_decl_identifier (pp, e);
!       break;
! 
      case IDENTIFIER_NODE:
        pp_c_tree_identifier (pp, e);
        break;
*************** pp_c_primary_expression (c_pretty_printe
*** 968,973 ****
--- 997,1018 ----
        pp_c_constant (pp, e);
        break;
  
+     case TARGET_EXPR:
+       pp_c_identifier (pp, "__builtin_memcpy");
+       pp_c_left_paren (pp);
+       pp_ampersand (pp);
+       pp_primary_expression (pp, TREE_OPERAND (e, 0));
+       pp_separate_with (pp, ',');
+       pp_ampersand (pp);
+       pp_initializer (pp, TREE_OPERAND (e, 1));
+       if (TREE_OPERAND (e, 2))
+ 	{
+ 	  pp_separate_with (pp, ',');
+ 	  pp_c_expression (pp, TREE_OPERAND (e, 2));
+ 	}
+       pp_c_right_paren (pp);
+       break;
+ 
      case STMT_EXPR:
        pp_c_left_paren (pp);
        pp_statement (pp, STMT_EXPR_STMT (e));
*************** static void
*** 993,1005 ****
  pp_c_initializer (c_pretty_printer *pp, tree e)
  {
    if (TREE_CODE (e) == CONSTRUCTOR)
!     {
!       enum tree_code code = TREE_CODE (TREE_TYPE (e));
!       if (code == RECORD_TYPE || code == UNION_TYPE || code == ARRAY_TYPE)
!         pp_c_brace_enclosed_initializer_list (pp, e);
!       else
! 	pp_unsupported_tree (pp, TREE_OPERAND (e, 1));
!     }
    else
      pp_expression (pp, e);
  }
--- 1038,1044 ----
  pp_c_initializer (c_pretty_printer *pp, tree e)
  {
    if (TREE_CODE (e) == CONSTRUCTOR)
!     pp_c_brace_enclosed_initializer_list (pp, e);
    else
      pp_expression (pp, e);
  }
*************** void
*** 1012,1018 ****
  pp_c_init_declarator (c_pretty_printer *pp, tree t)
  {
    pp_declarator (pp, t);
!   if (DECL_INITIAL (t))
      {
        tree init = DECL_INITIAL (t);
        /* This C++ bit is handled here because it is easier to do so.
--- 1051,1059 ----
  pp_c_init_declarator (c_pretty_printer *pp, tree t)
  {
    pp_declarator (pp, t);
!   /* We don't want to output function definitions here.  There are handled
!      elsewhere (and the syntactic form is bogus anyway).  */
!   if (TREE_CODE (t) != FUNCTION_DECL && DECL_INITIAL (t))
      {
        tree init = DECL_INITIAL (t);
        /* This C++ bit is handled here because it is easier to do so.
*************** pp_c_initializer_list (c_pretty_printer 
*** 1085,1109 ****
                pp_separate_with (pp, ',');
            }
        }
!       break;
  
      case VECTOR_TYPE:
!       pp_c_expression_list (pp, TREE_VECTOR_CST_ELTS (e));
!       break;
  
      case COMPLEX_TYPE:
!       {
!         const bool cst = TREE_CODE (e) == COMPLEX_CST;
!         pp_expression (pp, cst ? TREE_REALPART (e) : TREE_OPERAND (e, 0));
!         pp_separate_with (pp, ',');
!         pp_expression (pp, cst ? TREE_IMAGPART (e) : TREE_OPERAND (e, 1));
!       }
!       break;
  
      default:
-       pp_unsupported_tree (pp, type);
        break;
      }
  }
  
  /* Pretty-print a brace-enclosed initializer-list.  */
--- 1126,1161 ----
                pp_separate_with (pp, ',');
            }
        }
!       return;
  
      case VECTOR_TYPE:
!       if (TREE_CODE (e) == VECTOR_CST)
!         pp_c_expression_list (pp, TREE_VECTOR_CST_ELTS (e));
!       else if (TREE_CODE (e) == CONSTRUCTOR)
!         pp_c_expression_list (pp, CONSTRUCTOR_ELTS (e));
!       else
!         break;
!       return;
  
      case COMPLEX_TYPE:
!       if (TREE_CODE (e) == CONSTRUCTOR)
! 	pp_c_expression_list (pp, CONSTRUCTOR_ELTS (e));
!       else if (TREE_CODE (e) == COMPLEX_CST || TREE_CODE (e) == COMPLEX_EXPR)
! 	{
! 	  const bool cst = TREE_CODE (e) == COMPLEX_CST;
! 	  pp_expression (pp, cst ? TREE_REALPART (e) : TREE_OPERAND (e, 0));
! 	  pp_separate_with (pp, ',');
! 	  pp_expression (pp, cst ? TREE_IMAGPART (e) : TREE_OPERAND (e, 1));
! 	}
!       else
! 	break;
!       return;
  
      default:
        break;
      }
+ 
+   pp_unsupported_tree (pp, type);
  }
  
  /* Pretty-print a brace-enclosed initializer-list.  */
*************** pp_c_id_expression (c_pretty_printer *pp
*** 1135,1141 ****
      case FUNCTION_DECL:
      case FIELD_DECL:
      case LABEL_DECL:
!       t = DECL_NAME (t);
      case IDENTIFIER_NODE:
        pp_c_tree_identifier (pp, t);
        break;
--- 1187,1195 ----
      case FUNCTION_DECL:
      case FIELD_DECL:
      case LABEL_DECL:
!       pp_c_tree_decl_identifier (pp, t);
!       break;
! 
      case IDENTIFIER_NODE:
        pp_c_tree_identifier (pp, t);
        break;
*************** pp_c_postfix_expression (c_pretty_printe
*** 1186,1191 ****
--- 1240,1301 ----
        pp_c_call_argument_list (pp, TREE_OPERAND (e, 1));
        break;
  
+     case UNORDERED_EXPR:
+       pp_c_identifier (pp, flag_isoc99
+ 			   ? "isunordered"
+ 			   : "__builtin_isunordered");
+       goto two_args_fun;
+ 
+     case ORDERED_EXPR:
+       pp_c_identifier (pp, flag_isoc99
+ 			   ? "!isunordered"
+ 			   : "!__builtin_isunordered");
+       goto two_args_fun;
+ 
+     case UNLT_EXPR:
+       pp_c_identifier (pp, flag_isoc99
+ 			   ? "!isgreaterequal"
+ 			   : "!__builtin_isgreaterequal");
+       goto two_args_fun;
+ 
+     case UNLE_EXPR:
+       pp_c_identifier (pp, flag_isoc99
+ 			   ? "!isgreater"
+ 			   : "!__builtin_isgreater");
+       goto two_args_fun;
+ 
+     case UNGT_EXPR:
+       pp_c_identifier (pp, flag_isoc99
+ 			   ? "!islessequal"
+ 			   : "!__builtin_islessequal");
+       goto two_args_fun;
+ 
+     case UNGE_EXPR:
+       pp_c_identifier (pp, flag_isoc99
+ 			   ? "!isless"
+ 			   : "!__builtin_isless");
+       goto two_args_fun;
+ 
+     case UNEQ_EXPR:
+       pp_c_identifier (pp, flag_isoc99
+ 			   ? "!islessgreater"
+ 			   : "!__builtin_islessgreater");
+       goto two_args_fun;
+ 
+     case LTGT_EXPR:
+       pp_c_identifier (pp, flag_isoc99
+ 			   ? "islessgreater"
+ 			   : "__builtin_islessgreater");
+       goto two_args_fun;
+ 
+     two_args_fun:
+       pp_c_left_paren (pp);
+       pp_expression (pp, TREE_OPERAND (e, 0));
+       pp_separate_with (pp, ',');
+       pp_expression (pp, TREE_OPERAND (e, 1));
+       pp_c_right_paren (pp);
+       break;
+ 
      case ABS_EXPR:
        pp_c_identifier (pp, "__builtin_abs");
        pp_c_left_paren (pp);
*************** pp_c_call_argument_list (c_pretty_printe
*** 1280,1286 ****
  
    unary-operator: one of
        * &  + - ! ~
!       
     GNU extensions.
     unary-expression:
        __alignof__ unary-expression
--- 1390,1396 ----
  
    unary-operator: one of
        * &  + - ! ~
! 
     GNU extensions.
     unary-expression:
        __alignof__ unary-expression
*************** pp_c_additive_expression (c_pretty_print
*** 1417,1423 ****
        else
  	pp_minus (pp);
        pp_c_whitespace (pp);
!       pp_multiplicative_expression (pp, TREE_OPERAND (e, 1)); 
        break;
  
      default:
--- 1527,1533 ----
        else
  	pp_minus (pp);
        pp_c_whitespace (pp);
!       pp_multiplicative_expression (pp, TREE_OPERAND (e, 1));
        break;
  
      default:
*************** pp_c_conditional_expression (c_pretty_pr
*** 1635,1641 ****
  
  /* assignment-expression:
        conditional-expression
!       unary-expression assignment-operator  assignment-expression 
  
     assignment-expression: one of
        =    *=    /=    %=    +=    -=    >>=    <<=    &=    ^=    |=  */
--- 1745,1751 ----
  
  /* assignment-expression:
        conditional-expression
!       unary-expression assignment-operator  assignment-expression
  
     assignment-expression: one of
        =    *=    /=    %=    +=    -=    >>=    <<=    &=    ^=    |=  */
*************** pp_c_expression (c_pretty_printer *pp, t
*** 1704,1709 ****
--- 1814,1827 ----
      case COMPLEX_CST:
      case COMPLEX_EXPR:
      case VECTOR_CST:
+     case ORDERED_EXPR:
+     case UNORDERED_EXPR:
+     case LTGT_EXPR:
+     case UNEQ_EXPR:
+     case UNLE_EXPR:
+     case UNLT_EXPR:
+     case UNGE_EXPR:
+     case UNGT_EXPR:
      case ABS_EXPR:
      case CONSTRUCTOR:
      case COMPOUND_LITERAL_EXPR:
*************** pp_c_expression (c_pretty_printer *pp, t
*** 1774,1780 ****
      case NE_EXPR:
        pp_c_equality_expression (pp, e);
        break;
!       
      case COND_EXPR:
        pp_conditional_expression (pp, e);
        break;
--- 1892,1898 ----
      case NE_EXPR:
        pp_c_equality_expression (pp, e);
        break;
! 
      case COND_EXPR:
        pp_conditional_expression (pp, e);
        break;
*************** pp_c_expression (c_pretty_printer *pp, t
*** 1800,1813 ****
      case NOP_EXPR:
      case NON_LVALUE_EXPR:
      case SAVE_EXPR:
-     case UNSAVE_EXPR:
        pp_expression (pp, TREE_OPERAND (e, 0));
        break;
  
      case TARGET_EXPR:
        pp_postfix_expression (pp, TREE_OPERAND (e, 1));
        break;
!       
      default:
        pp_unsupported_tree (pp, e);
        break;
--- 1918,1930 ----
      case NOP_EXPR:
      case NON_LVALUE_EXPR:
      case SAVE_EXPR:
        pp_expression (pp, TREE_OPERAND (e, 0));
        break;
  
      case TARGET_EXPR:
        pp_postfix_expression (pp, TREE_OPERAND (e, 1));
        break;
! 
      default:
        pp_unsupported_tree (pp, e);
        break;
*************** pp_c_statement (c_pretty_printer *pp, tr
*** 1833,1946 ****
  
    if (stmt == NULL)
      return;
!   
    code = TREE_CODE (stmt);
    switch (code)
      {
-        /* labeled-statement:
-              identifier : statement
-              case constant-expression : statement
-              default : statement   */
-     case LABEL_STMT:
-     case CASE_LABEL:
-       if (pp_needs_newline (pp))
-         pp_newline_and_indent (pp, -3);
-       else
-         pp_indentation (pp) -= 3;
-       if (code == LABEL_STMT)
- 	pp_tree_identifier (pp, DECL_NAME (LABEL_STMT_LABEL (stmt)));
-       else if (code == CASE_LABEL)
- 	{
- 	  if (CASE_LOW (stmt) == NULL_TREE)
- 	    pp_identifier (pp, "default");
- 	  else
- 	    {
- 	      pp_c_identifier (pp, "case");
- 	      pp_c_whitespace (pp);
- 	      pp_conditional_expression (pp, CASE_LOW (stmt));
- 	      if (CASE_HIGH (stmt))
- 		{
- 		  pp_identifier (pp, "...");
- 		  pp_conditional_expression (pp, CASE_HIGH (stmt));
- 		}
- 	    }
- 	}
-       pp_colon (pp);
-       pp_indentation (pp) += 3;
-       pp_needs_newline (pp) = true;
-       break;
- 
-       /* compound-statement:
-             {  block-item-list(opt) }
- 
-          block-item-list:
-             block-item
-             block-item-list block-item
- 
-          block-item:
-             declaration
-             statement   */
-     case COMPOUND_STMT:
-       if (pp_needs_newline (pp))
-         pp_newline_and_indent (pp, 0);
-       pp_c_left_brace (pp);
-       pp_newline_and_indent (pp, 3);
-       for (stmt = COMPOUND_BODY (stmt); stmt; stmt = TREE_CHAIN (stmt))
- 	pp_statement (pp, stmt);
-       pp_newline_and_indent (pp, -3);
-       pp_c_right_brace (pp);
-       pp_needs_newline (pp) = true;
-       break;
- 
        /* expression-statement:
              expression(opt) ;  */
      case EXPR_STMT:
!     case CLEANUP_STMT:
!       if (pp_needs_newline (pp))
!         pp_newline_and_indent (pp, 0);
!       {
!         tree e = code == EXPR_STMT
!           ? EXPR_STMT_EXPR (stmt)
!           : CLEANUP_EXPR (stmt);
!         if (e)
!           pp_expression (pp, e);
!       }
        pp_c_semicolon (pp);
        pp_needs_newline (pp) = true;
        break;
  
-       /* selection-statement:
-             if ( expression ) statement
-             if ( expression ) statement else statement
-             switch ( expression ) statement   */
-     case IF_STMT:
-       if (pp_needs_newline (pp))
-         pp_newline_and_indent (pp, 0);
-       pp_c_identifier (pp, "if");
-       pp_c_whitespace (pp);
-       pp_c_left_paren (pp);
-       pp_expression (pp, IF_COND (stmt));
-       pp_c_right_paren (pp);
-       pp_newline_and_indent (pp, 3);
-       pp_statement (pp, THEN_CLAUSE (stmt));
-       pp_newline_and_indent (pp, -3);
-       if (ELSE_CLAUSE (stmt))
- 	{
- 	  tree else_clause = ELSE_CLAUSE (stmt);
- 	  pp_c_identifier (pp, "else");
- 	  if (TREE_CODE (else_clause) == IF_STMT)
- 	    pp_c_whitespace (pp);
- 	  else
- 	    pp_newline_and_indent (pp, 3);
- 	  pp_statement (pp, else_clause);
- 	  if (TREE_CODE (else_clause) != IF_STMT)
- 	    pp_newline_and_indent (pp, -3);
- 	}
-       break;
- 
      case SWITCH_STMT:
-       if (pp_needs_newline (pp))
-         pp_newline_and_indent (pp, 0);
        pp_c_identifier (pp, "switch");
        pp_space (pp);
        pp_c_left_paren (pp);
--- 1950,1971 ----
  
    if (stmt == NULL)
      return;
! 
!   if (pp_needs_newline (pp))
!     pp_newline_and_indent (pp, 0);
! 
    code = TREE_CODE (stmt);
    switch (code)
      {
        /* expression-statement:
              expression(opt) ;  */
      case EXPR_STMT:
!       pp_expression (pp, EXPR_STMT_EXPR (stmt));
        pp_c_semicolon (pp);
        pp_needs_newline (pp) = true;
        break;
  
      case SWITCH_STMT:
        pp_c_identifier (pp, "switch");
        pp_space (pp);
        pp_c_left_paren (pp);
*************** pp_c_statement (c_pretty_printer *pp, tr
*** 1958,1965 ****
              for ( expression(opt) ; expression(opt) ; expression(opt) ) statement
              for ( declaration expression(opt) ; expression(opt) ) statement  */
      case WHILE_STMT:
-       if (pp_needs_newline (pp))
-         pp_newline_and_indent (pp, 0);
        pp_c_identifier (pp, "while");
        pp_space (pp);
        pp_c_left_paren (pp);
--- 1983,1988 ----
*************** pp_c_statement (c_pretty_printer *pp, tr
*** 1972,1979 ****
        break;
  
      case DO_STMT:
-       if (pp_needs_newline (pp))
-         pp_newline_and_indent (pp, 0);
        pp_c_identifier (pp, "do");
        pp_newline_and_indent (pp, 3);
        pp_statement (pp, DO_BODY (stmt));
--- 1995,2000 ----
*************** pp_c_statement (c_pretty_printer *pp, tr
*** 1988,1995 ****
        break;
  
      case FOR_STMT:
-       if (pp_needs_newline (pp))
-         pp_newline_and_indent (pp, 0);
        pp_c_identifier (pp, "for");
        pp_space (pp);
        pp_c_left_paren (pp);
--- 2009,2014 ----
*************** pp_c_statement (c_pretty_printer *pp, tr
*** 2019,2124 ****
              return expression(opt) ;  */
      case BREAK_STMT:
      case CONTINUE_STMT:
-       if (pp_needs_newline (pp))
-         pp_newline_and_indent (pp, 0);
        pp_identifier (pp, code == BREAK_STMT ? "break" : "continue");
        pp_c_semicolon (pp);
        pp_needs_newline (pp) = true;
        break;
  
-     case RETURN_STMT:
-     case GOTO_STMT:
-       {
- 	tree e = code == RETURN_STMT
- 	  ? RETURN_STMT_EXPR (stmt)
- 	  : GOTO_DESTINATION (stmt);
-         if (pp_needs_newline (pp))
-           pp_newline_and_indent (pp, 0);
- 	pp_c_identifier (pp, code == RETURN_STMT ? "return" : "goto");
-         pp_c_whitespace (pp);
- 	if (e)
-           {
-             if (TREE_CODE (e) == INIT_EXPR
-                 && TREE_CODE (TREE_OPERAND (e, 0)) == RESULT_DECL)
-               e = TREE_OPERAND (e, 1);
-             pp_expression (pp, e);
-           }
- 	pp_c_semicolon (pp);
- 	pp_needs_newline (pp) = true;
-       }
-       break;
- 
-     case SCOPE_STMT:
-       if (!SCOPE_NULLIFIED_P (stmt) && SCOPE_NO_CLEANUPS_P (stmt))
-         {
-           int i = 0;
-           if (pp_needs_newline (pp))
-             pp_newline_and_indent (pp, 0);
-           if (SCOPE_BEGIN_P (stmt))
-             {
-               pp_left_brace (pp);
-               i = 3;
-             }
-           else if (SCOPE_END_P (stmt))
-             {
-               pp_right_brace (pp);
-               i = -3;
-             }
-           pp_indentation (pp) += i;
-           pp_needs_newline (pp) = true;
-         }
-       break;
- 
-     case DECL_STMT:
-       if (pp_needs_newline (pp))
-         pp_newline_and_indent (pp, 0);
-       pp_declaration (pp, DECL_STMT_DECL (stmt));
-       pp_needs_newline (pp) = true;
-       break;
- 
-     case ASM_STMT:
-       {
- 	bool has_volatile_p = ASM_VOLATILE_P (stmt);
- 	bool is_extended = has_volatile_p || ASM_INPUTS (stmt)
- 	  || ASM_OUTPUTS (stmt) || ASM_CLOBBERS (stmt);
- 	pp_c_identifier (pp, is_extended ? "__asm__" : "asm");
- 	if (has_volatile_p)
- 	  pp_c_identifier (pp, "__volatile__");
- 	pp_space (pp);
- 	pp_c_left_paren (pp);
- 	pp_c_string_literal (pp, ASM_STRING (stmt));
- 	if (is_extended)
- 	  {
- 	    pp_space (pp);
- 	    pp_separate_with (pp, ':');
- 	    if (ASM_OUTPUTS (stmt))
- 	      pp_expression (pp, ASM_OUTPUTS (stmt));
- 	    pp_space (pp);
- 	    pp_separate_with (pp, ':');
- 	    if (ASM_INPUTS (stmt))
- 	      pp_expression (pp, ASM_INPUTS (stmt));
- 	    pp_space (pp);
- 	    pp_separate_with (pp, ':');
- 	    if (ASM_CLOBBERS (stmt))
- 	      pp_expression (pp, ASM_CLOBBERS (stmt));
- 	  }
- 	pp_c_right_paren (pp);
- 	pp_newline (pp);
-       }
-       break;
- 
-     case FILE_STMT:
-       pp_c_identifier (pp, "__FILE__");
-       pp_space (pp);
-       pp_equal (pp);
-       pp_c_whitespace (pp);
-       pp_c_identifier (pp, FILE_STMT_FILENAME (stmt));
-       pp_c_semicolon (pp);
-       pp_needs_newline (pp) = true;
-       break;
- 
      default:
!       pp_unsupported_tree (pp, stmt);
      }
  }
  
--- 2038,2051 ----
              return expression(opt) ;  */
      case BREAK_STMT:
      case CONTINUE_STMT:
        pp_identifier (pp, code == BREAK_STMT ? "break" : "continue");
        pp_c_semicolon (pp);
        pp_needs_newline (pp) = true;
        break;
  
      default:
!       dump_generic_node (pp_base (pp), stmt, pp_indentation (pp), 0, true);
!       break;
      }
  }
  
*************** pp_c_pretty_printer_init (c_pretty_print
*** 2156,2158 ****
--- 2083,2141 ----
    pp->assignment_expression     = pp_c_assignment_expression;
    pp->expression                = pp_c_expression;
  }
+ 
+ 
+ /* Print the tree T in full, on file FILE.  */
+ 
+ void
+ print_c_tree (FILE *file, tree t)
+ {
+   static c_pretty_printer pp_rec;
+   static bool initialized = 0;
+   c_pretty_printer *pp = &pp_rec;
+ 
+   if (!initialized)
+     {
+       initialized = 1;
+       pp_construct (pp_base (pp), NULL, 0);
+       pp_c_pretty_printer_init (pp);
+       pp_needs_newline (pp) = true;
+     }
+   pp_base (pp)->buffer->stream = file;
+ 
+   pp_statement (pp, t);
+ 
+   pp_newline (pp);
+   pp_flush (pp);
+ }
+ 
+ /* Print the tree T in full, on stderr.  */
+ 
+ void
+ debug_c_tree (tree t)
+ {
+   print_c_tree (stderr, t);
+   fputc ('\n', stderr);
+ }
+ 
+ /* Output the DECL_NAME of T.  If T has no DECL_NAME, output a string made
+    up of T's memory address.  */
+ 
+ void
+ pp_c_tree_decl_identifier (c_pretty_printer *pp, tree t)
+ {
+   const char *name;
+ 
+   gcc_assert (DECL_P (t));
+ 
+   if (DECL_NAME (t))
+     name = IDENTIFIER_POINTER (DECL_NAME (t));
+   else
+     {
+       static char xname[8];
+       sprintf (xname, "<U%4x>", ((unsigned)((unsigned long)(t) & 0xffff)));
+       name = xname;
+     }
+ 
+   pp_c_identifier (pp, name);
+ }
diff -Nrcpad gcc-3.4.3/gcc/c-pretty-print.h gcc-4.0.0/gcc/c-pretty-print.h
*** gcc-3.4.3/gcc/c-pretty-print.h	Sun Oct  5 19:50:54 2003
--- gcc-4.0.0/gcc/c-pretty-print.h	Mon May 31 15:25:49 2004
***************
*** 1,5 ****
  /* Various declarations for the C and C++ pretty-printers.
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
     Contributed by Gabriel Dos Reis <gdr@integrable-solutions.net>
  
  This file is part of GCC.
--- 1,5 ----
  /* Various declarations for the C and C++ pretty-printers.
!    Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
     Contributed by Gabriel Dos Reis <gdr@integrable-solutions.net>
  
  This file is part of GCC.
*************** struct c_pretty_print_info
*** 95,101 ****
  #undef pp_base
  #define pp_base(PP)  (&pp_c_base (PP)->base)
  
!      
  #define pp_c_tree_identifier(PPI, ID)              \
     pp_c_identifier (PPI, IDENTIFIER_POINTER (ID))
  
--- 95,101 ----
  #undef pp_base
  #define pp_base(PP)  (&pp_c_base (PP)->base)
  
! 
  #define pp_c_tree_identifier(PPI, ID)              \
     pp_c_identifier (PPI, IDENTIFIER_POINTER (ID))
  
*************** void pp_c_left_paren (c_pretty_printer *
*** 159,171 ****
--- 159,177 ----
  void pp_c_right_paren (c_pretty_printer *);
  void pp_c_left_brace (c_pretty_printer *);
  void pp_c_right_brace (c_pretty_printer *);
+ void pp_c_left_bracket (c_pretty_printer *);
+ void pp_c_right_bracket (c_pretty_printer *);
  void pp_c_dot (c_pretty_printer *);
  void pp_c_ampersand (c_pretty_printer *);
+ void pp_c_star (c_pretty_printer *);
  void pp_c_arrow (c_pretty_printer *);
  void pp_c_semicolon (c_pretty_printer *);
+ void pp_c_complement (c_pretty_printer *);
+ void pp_c_exclamation (c_pretty_printer *);
  void pp_c_space_for_pointer_operator (c_pretty_printer *, tree);
  
  /* Declarations.  */
+ void pp_c_tree_decl_identifier (c_pretty_printer *, tree);
  void pp_c_function_definition (c_pretty_printer *, tree);
  void pp_c_attributes (c_pretty_printer *, tree);
  void pp_c_type_qualifier_list (c_pretty_printer *, tree);
*************** void pp_c_id_expression (c_pretty_printe
*** 197,200 ****
--- 203,208 ----
  void pp_c_identifier (c_pretty_printer *, const char *);
  void pp_c_string_literal (c_pretty_printer *, tree);
  
+ void print_c_tree (FILE *file, tree t);
+ 
  #endif /* GCC_C_PRETTY_PRINTER */
diff -Nrcpad gcc-3.4.3/gcc/c-semantics.c gcc-4.0.0/gcc/c-semantics.c
*** gcc-3.4.3/gcc/c-semantics.c	Tue Aug 24 04:02:34 2004
--- gcc-4.0.0/gcc/c-semantics.c	Fri Oct 22 18:54:25 2004
*************** Software Foundation, 59 Temple Place - S
*** 39,263 ****
  #include "flags.h"
  #include "ggc.h"
  #include "rtl.h"
- #include "expr.h"
  #include "output.h"
  #include "timevar.h"
  #include "predict.h"
  #include "tree-inline.h"
! 
! /* If non-NULL, the address of a language-specific function for
!    expanding statements.  */
! void (*lang_expand_stmt) (tree);
! 
! /* If non-NULL, the address of a language-specific function for
!    expanding a DECL_STMT.  After the language-independent cases are
!    handled, this function will be called.  If this function is not
!    defined, it is assumed that declarations other than those for
!    variables and labels do not require any RTL generation.  */
! void (*lang_expand_decl_stmt) (tree);
! 
! static tree find_reachable_label_1 (tree *, int *, void *);
! static tree find_reachable_label (tree);
! static bool expand_unreachable_if_stmt (tree);
! static tree expand_unreachable_stmt (tree, int);
! static void genrtl_do_stmt_1 (tree, tree);
  
  /* Create an empty statement tree rooted at T.  */
  
! void
! begin_stmt_tree (tree *t)
  {
!   /* We create a trivial EXPR_STMT so that last_tree is never NULL in
!      what follows.  We remove the extraneous statement in
!      finish_stmt_tree.  */
!   *t = build_nt (EXPR_STMT, void_zero_node);
!   last_tree = *t;
!   last_expr_type = NULL_TREE;
!   last_expr_filename = input_filename;
  }
  
! /* T is a statement.  Add it to the statement-tree.  */
  
  tree
! add_stmt (tree t)
  {
!   if (input_filename != last_expr_filename)
      {
!       /* If the filename has changed, also add in a FILE_STMT.  Do a string
! 	 compare first, though, as it might be an equivalent string.  */
!       int add = (strcmp (input_filename, last_expr_filename) != 0);
!       last_expr_filename = input_filename;
!       if (add)
! 	{
! 	  tree pos = build_nt (FILE_STMT, get_identifier (input_filename));
! 	  add_stmt (pos);
! 	}
      }
  
!   /* Add T to the statement-tree.  */
!   TREE_CHAIN (last_tree) = t;
!   last_tree = t;
  
!   /* When we expand a statement-tree, we must know whether or not the
!      statements are full-expressions.  We record that fact here.  */
!   STMT_IS_FULL_EXPR_P (last_tree) = stmts_are_full_exprs_p ();
  
    return t;
  }
  
! /* Create a declaration statement for the declaration given by the
!    DECL.  */
! 
! void
! add_decl_stmt (tree decl)
! {
!   tree decl_stmt;
! 
!   /* We need the type to last until instantiation time.  */
!   decl_stmt = build_stmt (DECL_STMT, decl);
!   add_stmt (decl_stmt);
! }
! 
! /* Add a scope-statement to the statement-tree.  BEGIN_P indicates
!    whether this statements opens or closes a scope.  PARTIAL_P is true
!    for a partial scope, i.e, the scope that begins after a label when
!    an object that needs a cleanup is created.  If BEGIN_P is nonzero,
!    returns a new TREE_LIST representing the top of the SCOPE_STMT
!    stack.  The TREE_PURPOSE is the new SCOPE_STMT.  If BEGIN_P is
!    zero, returns a TREE_LIST whose TREE_VALUE is the new SCOPE_STMT,
!    and whose TREE_PURPOSE is the matching SCOPE_STMT with
!    SCOPE_BEGIN_P set.  */
  
  tree
! add_scope_stmt (int begin_p, int partial_p)
  {
!   tree *stack_ptr = current_scope_stmt_stack ();
!   tree ss;
!   tree top = *stack_ptr;
! 
!   /* Build the statement.  */
!   ss = build_stmt (SCOPE_STMT, NULL_TREE);
!   SCOPE_BEGIN_P (ss) = begin_p;
!   SCOPE_PARTIAL_P (ss) = partial_p;
  
!   /* Keep the scope stack up to date.  */
!   if (begin_p)
!     {
!       top = tree_cons (ss, NULL_TREE, top);
!       *stack_ptr = top;
!     }
!   else
      {
!       if (partial_p != SCOPE_PARTIAL_P (TREE_PURPOSE (top)))
! 	abort ();
!       TREE_VALUE (top) = ss;
!       *stack_ptr = TREE_CHAIN (top);
!     }
! 
!   /* Add the new statement to the statement-tree.  */
!   add_stmt (ss);
! 
!   return top;
! }
  
! /* Finish the statement tree rooted at T.  */
  
! void
! finish_stmt_tree (tree *t)
! {
!   tree stmt;
  
!   /* Remove the fake extra statement added in begin_stmt_tree.  */
!   stmt = TREE_CHAIN (*t);
!   *t = stmt;
!   last_tree = NULL_TREE;
  
!   if (cfun && stmt)
!     {
!       /* The line-number recorded in the outermost statement in a function
! 	 is the line number of the end of the function.  */
!       STMT_LINENO (stmt) = input_line;
!       STMT_LINENO_FOR_FN_P (stmt) = 1;
!     }
  }
  
  /* Build a generic statement based on the given type of node and
     arguments. Similar to `build_nt', except that we set
!    STMT_LINENO to be the current line number.  */
  /* ??? This should be obsolete with the lineno_stmt productions
     in the grammar.  */
  
  tree
  build_stmt (enum tree_code code, ...)
  {
!   tree t;
!   int length;
!   int i;
    va_list p;
  
    va_start (p, code);
  
!   t = make_node (code);
    length = TREE_CODE_LENGTH (code);
!   STMT_LINENO (t) = input_line;
! 
!   for (i = 0; i < length; i++)
!     TREE_OPERAND (t, i) = va_arg (p, tree);
! 
!   va_end (p);
!   return t;
! }
! 
! /* Some statements, like for-statements or if-statements, require a
!    condition.  This condition can be a declaration.  If T is such a
!    declaration it is processed, and an expression appropriate to use
!    as the condition is returned.  Otherwise, T itself is returned.  */
  
! tree
! expand_cond (tree t)
! {
!   if (t && TREE_CODE (t) == TREE_LIST)
      {
!       expand_stmt (TREE_PURPOSE (t));
!       return TREE_VALUE (t);
      }
-   else
-     return t;
- }
- 
- /* Create RTL for the local static variable DECL.  */
- 
- void
- make_rtl_for_local_static (tree decl)
- {
-   const char *asmspec = NULL;
- 
-   /* If we inlined this variable, we could see it's declaration
-      again.  */
-   if (TREE_ASM_WRITTEN (decl))
-     return;
  
!   /* If the DECL_ASSEMBLER_NAME is not the same as the DECL_NAME, then
!      either we already created RTL for this DECL (and since it was a
!      local variable, its DECL_ASSEMBLER_NAME got hacked up to prevent
!      clashes with other local statics with the same name by a previous
!      call to make_decl_rtl), or the user explicitly requested a
!      particular assembly name for this variable, using the GNU
!      extension for this purpose:
! 
!        int i asm ("j");
  
!      There's no way to know which case we're in, here.  But, it turns
!      out we're safe.  If there's already RTL, then
!      rest_of_decl_compilation ignores the ASMSPEC parameter, so we
!      may as well not pass it in.  If there isn't RTL, then we didn't
!      already create RTL, which means that the modification to
!      DECL_ASSEMBLER_NAME came only via the explicit extension.  */
!   if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl)
!       && !DECL_RTL_SET_P (decl))
!     asmspec = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
  
!   rest_of_decl_compilation (decl, asmspec, /*top_level=*/0, /*at_end=*/0);
  }
  
  /* Let the back-end know about DECL.  */
--- 39,178 ----
  #include "flags.h"
  #include "ggc.h"
  #include "rtl.h"
  #include "output.h"
  #include "timevar.h"
  #include "predict.h"
  #include "tree-inline.h"
! #include "tree-gimple.h"
! #include "langhooks.h"
  
  /* Create an empty statement tree rooted at T.  */
  
! tree
! push_stmt_list (void)
  {
!   tree t;
!   t = alloc_stmt_list ();
!   TREE_CHAIN (t) = cur_stmt_list;
!   cur_stmt_list = t;
!   return t;
  }
  
! /* Finish the statement tree rooted at T.  */
  
  tree
! pop_stmt_list (tree t)
  {
!   tree u = cur_stmt_list, chain;
! 
!   /* Pop statement lists until we reach the target level.  The extra
!      nestings will be due to outstanding cleanups.  */
!   while (1)
      {
!       chain = TREE_CHAIN (u);
!       TREE_CHAIN (u) = NULL_TREE;
!       if (t == u)
! 	break;
!       u = chain;
      }
+   cur_stmt_list = chain;
  
!   /* If the statement list is completely empty, just return it.  This is
!      just as good small as build_empty_stmt, with the advantage that 
!      statement lists are merged when they appended to one another.  So
!      using the STATEMENT_LIST avoids pathological buildup of EMPTY_STMT_P
!      statements.  */
!   if (TREE_SIDE_EFFECTS (t))
!     {
!       tree_stmt_iterator i = tsi_start (t);
  
!       /* If the statement list contained exactly one statement, then
! 	 extract it immediately.  */
!       if (tsi_one_before_end_p (i))
! 	{
! 	  u = tsi_stmt (i);
! 	  tsi_delink (&i);
! 	  free_stmt_list (t);
! 	  t = u;
! 	}
!     }
  
    return t;
  }
  
! /* T is a statement.  Add it to the statement-tree.  */
  
  tree
! add_stmt (tree t)
  {
!   enum tree_code code = TREE_CODE (t);
  
!   if ((EXPR_P (t) || STATEMENT_CODE_P (code)) && code != LABEL_EXPR)
      {
!       if (!EXPR_HAS_LOCATION (t))
! 	SET_EXPR_LOCATION (t, input_location);
  
!       /* When we expand a statement-tree, we must know whether or not the
! 	 statements are full-expressions.  We record that fact here.  */
!       STMT_IS_FULL_EXPR_P (t) = stmts_are_full_exprs_p ();
!     }
  
!   if (code == LABEL_EXPR || code == CASE_LABEL_EXPR)
!     STATEMENT_LIST_HAS_LABEL (cur_stmt_list) = 1;
  
!   /* Add T to the statement-tree.  Non-side-effect statements need to be
!      recorded during statement expressions.  */
!   append_to_statement_list_force (t, &cur_stmt_list);
  
!   return t;
  }
  
  /* Build a generic statement based on the given type of node and
     arguments. Similar to `build_nt', except that we set
!    EXPR_LOCATION to be the current source location.  */
  /* ??? This should be obsolete with the lineno_stmt productions
     in the grammar.  */
  
  tree
  build_stmt (enum tree_code code, ...)
  {
!   tree ret;
!   int length, i;
    va_list p;
+   bool side_effects;
  
    va_start (p, code);
  
!   ret = make_node (code);
!   TREE_TYPE (ret) = void_type_node;
    length = TREE_CODE_LENGTH (code);
!   SET_EXPR_LOCATION (ret, input_location);
  
!   /* Most statements have implicit side effects all on their own, 
!      such as control transfer.  For those that do, we'll compute
!      the real value of TREE_SIDE_EFFECTS from its arguments.  */
!   switch (code)
      {
!     case EXPR_STMT:
!       side_effects = false;
!       break;
!     default:
!       side_effects = true;
!       break;
      }
  
!   for (i = 0; i < length; i++)
!     {
!       tree t = va_arg (p, tree);
!       if (t && IS_NON_TYPE_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (t))))
!         side_effects |= TREE_SIDE_EFFECTS (t);
!       TREE_OPERAND (ret, i) = t;
!     }
  
!   TREE_SIDE_EFFECTS (ret) = side_effects;
  
!   va_end (p);
!   return ret;
  }
  
  /* Let the back-end know about DECL.  */
*************** emit_local_var (tree decl)
*** 268,576 ****
    /* Create RTL for this variable.  */
    if (!DECL_RTL_SET_P (decl))
      {
!       if (DECL_C_HARD_REGISTER (decl))
  	/* The user specified an assembler name for this variable.
  	   Set that up now.  */
! 	rest_of_decl_compilation
! 	  (decl, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)),
! 	   /*top_level=*/0, /*at_end=*/0);
        else
  	expand_decl (decl);
      }
- 
-   if (DECL_INITIAL (decl))
-     {
-       /* Actually do the initialization.  */
-       if (stmts_are_full_exprs_p ())
- 	expand_start_target_temps ();
- 
-       expand_decl_init (decl);
- 
-       if (stmts_are_full_exprs_p ())
- 	expand_end_target_temps ();
-     }
- }
- 
- /* Helper for generating the RTL at the beginning of a scope.  */
- 
- void
- genrtl_do_pushlevel (void)
- {
-   emit_line_note (input_location);
-   clear_last_expr ();
- }
- 
- /* Generate the RTL for DESTINATION, which is a GOTO_STMT.  */
- 
- void
- genrtl_goto_stmt (tree destination)
- {
-   if (TREE_CODE (destination) == IDENTIFIER_NODE)
-     abort ();
- 
-   /* We warn about unused labels with -Wunused.  That means we have to
-      mark the used labels as used.  */
-   if (TREE_CODE (destination) == LABEL_DECL)
-     TREE_USED (destination) = 1;
- 
-   emit_line_note (input_location);
- 
-   if (TREE_CODE (destination) == LABEL_DECL)
-     {
-       label_rtx (destination);
-       expand_goto (destination);
-     }
-   else
-     expand_computed_goto (destination);
- }
- 
- /* Generate the RTL for EXPR, which is an EXPR_STMT.  Provided just
-    for backward compatibility.  genrtl_expr_stmt_value() should be
-    used for new code.  */
- 
- void
- genrtl_expr_stmt (tree expr)
- {
-   genrtl_expr_stmt_value (expr, -1, 1);
- }
- 
- /* Generate the RTL for EXPR, which is an EXPR_STMT.  WANT_VALUE tells
-    whether to (1) save the value of the expression, (0) discard it or
-    (-1) use expr_stmts_for_value to tell.  The use of -1 is
-    deprecated, and retained only for backward compatibility.
-    MAYBE_LAST is nonzero if this EXPR_STMT might be the last statement
-    in expression statement.  */
- 
- void
- genrtl_expr_stmt_value (tree expr, int want_value, int maybe_last)
- {
-   if (expr != NULL_TREE)
-     {
-       emit_line_note (input_location);
- 
-       if (stmts_are_full_exprs_p ())
- 	expand_start_target_temps ();
- 
-       if (expr != error_mark_node)
- 	expand_expr_stmt_value (expr, want_value, maybe_last);
- 
-       if (stmts_are_full_exprs_p ())
- 	expand_end_target_temps ();
-     }
- }
- 
- /* Generate the RTL for T, which is a DECL_STMT.  */
- 
- void
- genrtl_decl_stmt (tree t)
- {
-   tree decl;
-   emit_line_note (input_location);
-   decl = DECL_STMT_DECL (t);
-   /* If this is a declaration for an automatic local
-      variable, initialize it.  Note that we might also see a
-      declaration for a namespace-scope object (declared with
-      `extern').  We don't have to handle the initialization
-      of those objects here; they can only be declarations,
-      rather than definitions.  */
-   if (TREE_CODE (decl) == VAR_DECL
-       && !TREE_STATIC (decl)
-       && !DECL_EXTERNAL (decl))
-     {
-       /* Let the back-end know about this variable.  */
-       if (!anon_aggr_type_p (TREE_TYPE (decl)))
- 	emit_local_var (decl);
-       else
- 	expand_anon_union_decl (decl, NULL_TREE,
- 				DECL_ANON_UNION_ELEMS (decl));
-     }
-   else if (TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl))
-     make_rtl_for_local_static (decl);
-   else if (TREE_CODE (decl) == LABEL_DECL
- 	   && C_DECLARED_LABEL_FLAG (decl))
-     declare_nonlocal_label (decl);
-   else if (lang_expand_decl_stmt)
-     (*lang_expand_decl_stmt) (t);
- }
- 
- /* Generate the RTL for T, which is an IF_STMT.  */
- 
- void
- genrtl_if_stmt (tree t)
- {
-   tree cond;
-   genrtl_do_pushlevel ();
-   cond = expand_cond (IF_COND (t));
-   emit_line_note (input_location);
-   expand_start_cond (cond, 0);
-   if (THEN_CLAUSE (t))
-     {
-       tree nextt = THEN_CLAUSE (t);
- 
-       if (cond && integer_zerop (cond))
- 	nextt = expand_unreachable_stmt (nextt, warn_notreached);
-       expand_stmt (nextt);
-     }
- 
-   if (ELSE_CLAUSE (t))
-     {
-       tree nextt = ELSE_CLAUSE (t);
-       expand_start_else ();
-       if (cond && integer_nonzerop (cond))
- 	nextt = expand_unreachable_stmt (nextt, warn_notreached);
-       expand_stmt (nextt);
-     }
-   expand_end_cond ();
- }
- 
- /* Generate the RTL for T, which is a WHILE_STMT.  */
- 
- void
- genrtl_while_stmt (tree t)
- {
-   tree cond = WHILE_COND (t);
- 
-   emit_line_note (input_location);
-   expand_start_loop (1);
-   genrtl_do_pushlevel ();
- 
-   if (cond && !integer_nonzerop (cond))
-     {
-       cond = expand_cond (cond);
-       emit_line_note (input_location);
-       expand_exit_loop_top_cond (0, cond);
-       genrtl_do_pushlevel ();
-     }
- 
-   expand_stmt (WHILE_BODY (t));
- 
-   expand_end_loop ();
- }
- 
- /* Generate the RTL for a DO_STMT with condition COND and loop BODY
-    body.  This is reused for expanding unreachable WHILE_STMTS.  */
- 
- static void
- genrtl_do_stmt_1 (tree cond, tree body)
- {
-   /* Recognize the common special-case of do { ... } while (0) and do
-      not emit the loop widgetry in this case.  In particular this
-      avoids cluttering the rtl with dummy loop notes, which can affect
-      alignment of adjacent labels.  COND can be NULL due to parse
-      errors.  */
-   if (!cond || integer_zerop (cond))
-     {
-       expand_start_null_loop ();
-       expand_stmt (body);
-       expand_end_null_loop ();
-     }
-   else if (integer_nonzerop (cond))
-     {
-       emit_line_note (input_location);
-       expand_start_loop (1);
- 
-       expand_stmt (body);
- 
-       emit_line_note (input_location);
-       expand_end_loop ();
-     }
-   else
-     {
-       emit_line_note (input_location);
-       expand_start_loop_continue_elsewhere (1);
- 
-       expand_stmt (body);
- 
-       expand_loop_continue_here ();
-       cond = expand_cond (cond);
-       emit_line_note (input_location);
-       expand_exit_loop_if_false (0, cond);
-       expand_end_loop ();
-     }
- }
- 
- /* Generate the RTL for T, which is a DO_STMT.  */
- 
- void
- genrtl_do_stmt (tree t)
- {
-   genrtl_do_stmt_1 (DO_COND (t), DO_BODY (t));
- }
- 
- /* Build the node for a return statement and return it.  */
- 
- tree
- build_return_stmt (tree expr)
- {
-   return (build_stmt (RETURN_STMT, expr));
- }
- 
- /* Generate the RTL for STMT, which is a RETURN_STMT.  */
- 
- void
- genrtl_return_stmt (tree stmt)
- {
-   tree expr;
- 
-   expr = RETURN_STMT_EXPR (stmt);
- 
-   emit_line_note (input_location);
-   if (!expr)
-     expand_null_return ();
-   else
-     {
-       expand_start_target_temps ();
-       expand_return (expr);
-       expand_end_target_temps ();
-     }
- }
- 
- /* Generate the RTL for T, which is a FOR_STMT.  */
- 
- void
- genrtl_for_stmt (tree t)
- {
-   tree cond = FOR_COND (t);
-   location_t saved_loc;
- 
-   if (NEW_FOR_SCOPE_P (t))
-     genrtl_do_pushlevel ();
- 
-   expand_stmt (FOR_INIT_STMT (t));
- 
-   /* Expand the initialization.  */
-   emit_line_note (input_location);
-   if (FOR_EXPR (t))
-     expand_start_loop_continue_elsewhere (1);
-   else
-     expand_start_loop (1);
-   genrtl_do_pushlevel ();
- 
-   /* Save the filename and line number so that we expand the FOR_EXPR
-      we can reset them back to the saved values.  */
-   saved_loc = input_location;
- 
-   /* Expand the condition.  */
-   if (cond && !integer_nonzerop (cond))
-     {
-       cond = expand_cond (cond);
-       emit_line_note (input_location);
-       expand_exit_loop_top_cond (0, cond);
-       genrtl_do_pushlevel ();
-     }
- 
-   /* Expand the body.  */
-   expand_stmt (FOR_BODY (t));
- 
-   /* Expand the increment expression.  */
-   input_location = saved_loc;
-   emit_line_note (input_location);
-   if (FOR_EXPR (t))
-     {
-       expand_loop_continue_here ();
-       genrtl_expr_stmt (FOR_EXPR (t));
-     }
-   expand_end_loop ();
  }
  
  /* Build a break statement node and return it.  */
--- 183,195 ----
    /* Create RTL for this variable.  */
    if (!DECL_RTL_SET_P (decl))
      {
!       if (DECL_HARD_REGISTER (decl))
  	/* The user specified an assembler name for this variable.
  	   Set that up now.  */
! 	rest_of_decl_compilation (decl, 0, 0);
        else
  	expand_decl (decl);
      }
  }
  
  /* Build a break statement node and return it.  */
*************** build_break_stmt (void)
*** 581,596 ****
    return (build_stmt (BREAK_STMT));
  }
  
- /* Generate the RTL for a BREAK_STMT.  */
- 
- void
- genrtl_break_stmt (void)
- {
-   emit_line_note (input_location);
-   if ( ! expand_exit_something ())
-     abort ();
- }
- 
  /* Build a continue statement node and return it.  */
  
  tree
--- 200,205 ----
*************** build_continue_stmt (void)
*** 599,1060 ****
    return (build_stmt (CONTINUE_STMT));
  }
  
! /* Generate the RTL for a CONTINUE_STMT.  */
! 
! void
! genrtl_continue_stmt (void)
! {
!   emit_line_note (input_location);
!   if (! expand_continue_loop (0))
!     abort ();
! }
! 
! /* Generate the RTL for T, which is a SCOPE_STMT.  */
! 
! void
! genrtl_scope_stmt (tree t)
! {
!   tree block = SCOPE_STMT_BLOCK (t);
! 
!   if (!SCOPE_NO_CLEANUPS_P (t))
!     {
!       if (SCOPE_BEGIN_P (t))
! 	expand_start_bindings_and_block (2 * SCOPE_NULLIFIED_P (t), block);
!       else if (SCOPE_END_P (t))
! 	expand_end_bindings (NULL_TREE, !SCOPE_NULLIFIED_P (t), 0);
!     }
!   else if (!SCOPE_NULLIFIED_P (t))
!     {
!       rtx note = emit_note (SCOPE_BEGIN_P (t)
! 			    ? NOTE_INSN_BLOCK_BEG : NOTE_INSN_BLOCK_END);
!       NOTE_BLOCK (note) = block;
!     }
! 
!   /* If we're at the end of a scope that contains inlined nested
!      functions, we have to decide whether or not to write them out.  */
!   if (block && SCOPE_END_P (t))
!     {
!       tree fn;
! 
!       for (fn = BLOCK_VARS (block); fn; fn = TREE_CHAIN (fn))
! 	{
! 	  if (TREE_CODE (fn) == FUNCTION_DECL
! 	      && DECL_CONTEXT (fn) == current_function_decl
! 	      && DECL_SAVED_INSNS (fn)
! 	      && DECL_SAVED_INSNS (fn)->saved_for_inline
! 	      && !TREE_ASM_WRITTEN (fn)
! 	      && TREE_ADDRESSABLE (fn))
! 	    {
! 	      push_function_context ();
! 	      output_inline_function (fn);
! 	      pop_function_context ();
! 	    }
! 	}
!     }
! }
! 
! /* Generate the RTL for T, which is a SWITCH_STMT.  */
! 
! void
! genrtl_switch_stmt (tree t)
! {
!   tree cond;
!   genrtl_do_pushlevel ();
! 
!   cond = expand_cond (SWITCH_COND (t));
!   if (cond == error_mark_node)
!     /* The code is in error, but we don't want expand_end_case to
!        crash.  */
!     cond = truthvalue_false_node;
! 
!   emit_line_note (input_location);
!   expand_start_case (1, cond, TREE_TYPE (cond), "switch statement");
!   expand_stmt (expand_unreachable_stmt (SWITCH_BODY (t), warn_notreached));
!   expand_end_case_type (cond, SWITCH_TYPE (t));
! }
! 
! /* Create a CASE_LABEL tree node and return it.  */
  
  tree
  build_case_label (tree low_value, tree high_value, tree label_decl)
  {
!   return build_stmt (CASE_LABEL, low_value, high_value, label_decl);
! }
! 
! 
! /* Generate the RTL for a CASE_LABEL.  */
! 
! void
! genrtl_case_label (tree case_label)
! {
!   tree duplicate;
!   tree cleanup;
! 
!   cleanup = last_cleanup_this_contour ();
!   if (cleanup)
!     {
!       static int explained = 0;
!       warning ("destructor needed for `%D'", (TREE_PURPOSE (cleanup)));
!       warning ("where case label appears here");
!       if (!explained)
! 	{
! 	  warning ("(enclose actions of previous case statements requiring destructors in their own scope.)");
! 	  explained = 1;
! 	}
!     }
! 
!   add_case_node (CASE_LOW (case_label), CASE_HIGH (case_label),
! 		 CASE_LABEL_DECL (case_label), &duplicate);
! }
! 
! /* Generate the RTL for T, which is a COMPOUND_STMT.  */
! 
! void
! genrtl_compound_stmt (tree t)
! {
! #ifdef ENABLE_CHECKING
!   struct nesting *n = current_nesting_level ();
! #endif
! 
!   expand_stmt (COMPOUND_BODY (t));
! 
! #ifdef ENABLE_CHECKING
!   /* Make sure that we've pushed and popped the same number of levels.  */
!   if (!COMPOUND_STMT_NO_SCOPE (t) && n != current_nesting_level ())
!     abort ();
! #endif
! }
! 
! /* Generate the RTL for an ASM_STMT.  */
! 
! void
! genrtl_asm_stmt (tree cv_qualifier, tree string, tree output_operands,
! 		 tree input_operands, tree clobbers, int asm_input_p)
! {
!   if (cv_qualifier != NULL_TREE
!       && cv_qualifier != ridpointers[(int) RID_VOLATILE])
!     {
!       warning ("%s qualifier ignored on asm",
! 	       IDENTIFIER_POINTER (cv_qualifier));
!       cv_qualifier = NULL_TREE;
!     }
! 
!   emit_line_note (input_location);
!   if (asm_input_p)
!     expand_asm (string, cv_qualifier != NULL_TREE);
!   else
!     c_expand_asm_operands (string, output_operands, input_operands,
! 			   clobbers, cv_qualifier != NULL_TREE,
! 			   input_location);
! }
! 
! /* Generate the RTL for a CLEANUP_STMT.  */
! 
! void
! genrtl_cleanup_stmt (tree t)
! {
!   tree decl = CLEANUP_DECL (t);
!   if (!decl || !DECL_P (decl)
!       || (DECL_SIZE (decl) && TREE_TYPE (decl) != error_mark_node))
!     expand_decl_cleanup_eh (decl, CLEANUP_EXPR (t), CLEANUP_EH_ONLY (t));
! }
! 
! /* We're about to expand T, a statement.  Set up appropriate context
!    for the substitution.  */
! 
! void
! prep_stmt (tree t)
! {
!   if (!STMT_LINENO_FOR_FN_P (t))
!     input_line = STMT_LINENO (t);
!   current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
! }
! 
! /* Generate the RTL for the statement T, its substatements, and any
!    other statements at its nesting level.  */
! 
! void
! expand_stmt (tree t)
! {
!   while (t && t != error_mark_node)
!     {
!       int saved_stmts_are_full_exprs_p;
! 
!       /* Set up context appropriately for handling this statement.  */
!       saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
!       prep_stmt (t);
! 
!       switch (TREE_CODE (t))
! 	{
! 	case FILE_STMT:
! 	  input_filename = FILE_STMT_FILENAME (t);
! 	  break;
! 
! 	case RETURN_STMT:
! 	  genrtl_return_stmt (t);
! 	  t = expand_unreachable_stmt (TREE_CHAIN (t), warn_notreached);
! 	  goto process_t;
! 
! 	case EXPR_STMT:
! 	  genrtl_expr_stmt_value (EXPR_STMT_EXPR (t), TREE_ADDRESSABLE (t),
! 				  TREE_CHAIN (t) == NULL
! 				  || (TREE_CODE (TREE_CHAIN (t)) == SCOPE_STMT
! 				      && TREE_CHAIN (TREE_CHAIN (t)) == NULL));
! 	  break;
! 
! 	case DECL_STMT:
! 	  genrtl_decl_stmt (t);
! 	  break;
! 
! 	case FOR_STMT:
! 	  genrtl_for_stmt (t);
! 	  break;
! 
! 	case WHILE_STMT:
! 	  genrtl_while_stmt (t);
! 	  break;
! 
! 	case DO_STMT:
! 	  genrtl_do_stmt (t);
! 	  break;
! 
! 	case IF_STMT:
! 	  genrtl_if_stmt (t);
! 	  break;
! 
! 	case COMPOUND_STMT:
! 	  genrtl_compound_stmt (t);
! 	  break;
! 
! 	case BREAK_STMT:
! 	  genrtl_break_stmt ();
! 	  t = expand_unreachable_stmt (TREE_CHAIN (t), warn_notreached);
! 	  goto process_t;
! 
! 	case CONTINUE_STMT:
! 	  genrtl_continue_stmt ();
! 	  t = expand_unreachable_stmt (TREE_CHAIN (t), warn_notreached);
! 	  goto process_t;
! 
! 	case SWITCH_STMT:
! 	  genrtl_switch_stmt (t);
! 	  break;
! 
! 	case CASE_LABEL:
! 	  genrtl_case_label (t);
! 	  break;
! 
! 	case LABEL_STMT:
! 	  expand_label (LABEL_STMT_LABEL (t));
! 	  break;
! 
! 	case GOTO_STMT:
! 	  /* Emit information for branch prediction.  */
! 	  if (!GOTO_FAKE_P (t)
! 	      && TREE_CODE (GOTO_DESTINATION (t)) == LABEL_DECL
! 	      && flag_guess_branch_prob)
! 	    {
! 	      rtx note = emit_note (NOTE_INSN_PREDICTION);
! 
! 	      NOTE_PREDICTION (note) = NOTE_PREDICT (PRED_GOTO, NOT_TAKEN);
! 	    }
! 	  genrtl_goto_stmt (GOTO_DESTINATION (t));
! 	  t = expand_unreachable_stmt (TREE_CHAIN (t), warn_notreached);
! 	  goto process_t;
! 
! 	case ASM_STMT:
! 	  genrtl_asm_stmt (ASM_CV_QUAL (t), ASM_STRING (t),
! 			   ASM_OUTPUTS (t), ASM_INPUTS (t),
! 			   ASM_CLOBBERS (t), ASM_INPUT_P (t));
! 	  break;
! 
! 	case SCOPE_STMT:
! 	  genrtl_scope_stmt (t);
! 	  break;
! 
! 	case CLEANUP_STMT:
! 	  genrtl_cleanup_stmt (t);
! 	  break;
! 
! 	default:
! 	  if (lang_expand_stmt)
! 	    (*lang_expand_stmt) (t);
! 	  else
! 	    abort ();
! 	  break;
! 	}
! 
!       /* Go on to the next statement in this scope.  */
!       t = TREE_CHAIN (t);
! 
!     process_t:
!       /* Restore saved state.  */
!       current_stmt_tree ()->stmts_are_full_exprs_p
! 	= saved_stmts_are_full_exprs_p;
!     }
! }
! 
! /* If *TP is a potentially reachable label, return nonzero.  */
! 
! static tree
! find_reachable_label_1 (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED,
! 			void *data ATTRIBUTE_UNUSED)
! {
!   switch (TREE_CODE (*tp))
!     {
!     case LABEL_STMT:
!     case CASE_LABEL:
!       return *tp;
! 
!     default:
!       break;
!     }
!   return NULL_TREE;
! }
! 
! /* Determine whether expression EXP contains a potentially
!    reachable label.  */
! static tree
! find_reachable_label (tree exp)
! {
!   location_t saved_loc = input_location;
!   tree ret = walk_tree_without_duplicates
! 		(&exp, find_reachable_label_1, NULL);
!   input_location = saved_loc;
!   return ret;
! }
! 
! /* Expand an unreachable if statement, T.  This function returns
!    true if the IF_STMT contains a potentially reachable code_label.  */
! static bool
! expand_unreachable_if_stmt (tree t)
! {
!   tree n;
! 
!   if (find_reachable_label (IF_COND (t)) != NULL_TREE)
!     {
!       genrtl_if_stmt (t);
!       return true;
!     }
! 
!   if (THEN_CLAUSE (t) && ELSE_CLAUSE (t))
!     {
!       n = expand_unreachable_stmt (THEN_CLAUSE (t), 0);
! 
!       if (n != NULL_TREE)
! 	{
! 	  rtx label;
! 	  expand_stmt (n);
! 	  label = gen_label_rtx ();
! 	  emit_jump (label);
! 	  expand_stmt (expand_unreachable_stmt (ELSE_CLAUSE (t), 0));
! 	  emit_label (label);
! 	  return true;
! 	}
!       else
! 	n = expand_unreachable_stmt (ELSE_CLAUSE (t), 0);
!     }
!   else if (THEN_CLAUSE (t))
!     n = expand_unreachable_stmt (THEN_CLAUSE (t), 0);
!   else if (ELSE_CLAUSE (t))
!     n = expand_unreachable_stmt (ELSE_CLAUSE (t), 0);
!   else
!     n = NULL_TREE;
! 
!   expand_stmt (n);
! 
!   return n != NULL_TREE;
! }
! 
! /* Expand an unreachable statement list.  This function skips all
!    statements preceding the first potentially reachable label and
!    then returns the label (or, in same cases, the statement after
!    one containing the label).  This function returns NULL_TREE if
!    the end of the given statement list is unreachable, and a
!    non-NULL value, possibly error_mark_node, otherwise.  */
! static tree
! expand_unreachable_stmt (tree t, int warn)
! {
!   int saved;
! 
!   while (t && t != error_mark_node)
!     {
!       if (warn)
! 	switch (TREE_CODE (t))
! 	  {
! 	  case BREAK_STMT:
! 	  case CONTINUE_STMT:
! 	  case EXPR_STMT:
! 	  case GOTO_STMT:
! 	  case IF_STMT:
! 	  case RETURN_STMT:
! 	    if (!STMT_LINENO_FOR_FN_P (t))
! 	      input_line = STMT_LINENO (t);
! 	    warning("will never be executed");
! 	    warn = false;
! 	    break;
! 
! 	  default:
! 	    break;
! 	  }
! 
!       switch (TREE_CODE (t))
! 	{
! 	case GOTO_STMT:
! 	case CONTINUE_STMT:
! 	case BREAK_STMT:
! 	  break;
! 
! 	case FILE_STMT:
! 	  input_filename = FILE_STMT_FILENAME (t);
! 	  break;
! 
! 	case RETURN_STMT:
! 	  if (find_reachable_label (RETURN_STMT_EXPR (t)) != NULL_TREE)
! 	    return t;
! 	  break;
! 
! 	case EXPR_STMT:
! 	  if (find_reachable_label (EXPR_STMT_EXPR (t)) != NULL_TREE)
! 	    return t;
! 	  break;
! 
! 	case IF_STMT:
! 	  if (expand_unreachable_if_stmt (t))
! 	    return TREE_CHAIN (t) ? TREE_CHAIN (t) : error_mark_node;
! 	  break;
! 
! 	case WHILE_STMT:
! 	  /* If the start of a while statement is unreachable, there is
! 	     no need to rotate the loop, instead the WHILE_STMT can be
! 	     expanded like a DO_STMT.  */
! 	  genrtl_do_stmt_1 (WHILE_COND (t), WHILE_BODY (t));
! 	  return TREE_CHAIN (t) ? TREE_CHAIN (t) : error_mark_node;
! 
! 	case COMPOUND_STMT:
! 	  {
! 	    tree n;
! 	    n = expand_unreachable_stmt (COMPOUND_BODY (t), warn);
! 	    if (n != NULL_TREE)
! 	      {
! 		expand_stmt (n);
! 		return TREE_CHAIN (t) ? TREE_CHAIN (t) : error_mark_node;
! 	      }
! 	    warn = false;
! 	    break;
! 	  }
! 
! 	case SCOPE_STMT:
! 	  saved = stmts_are_full_exprs_p ();
! 	  prep_stmt (t);
! 	  genrtl_scope_stmt (t);
! 	  current_stmt_tree ()->stmts_are_full_exprs_p = saved;
! 	  break;
! 
! 	default:
! 	  return t;
! 	}
!       t = TREE_CHAIN (t);
!     }
!   return NULL_TREE;
  }
--- 208,217 ----
    return (build_stmt (CONTINUE_STMT));
  }
  
! /* Create a CASE_LABEL_EXPR tree node and return it.  */
  
  tree
  build_case_label (tree low_value, tree high_value, tree label_decl)
  {
!   return build_stmt (CASE_LABEL_EXPR, low_value, high_value, label_decl);
  }
diff -Nrcpad gcc-3.4.3/gcc/c-tree.h gcc-4.0.0/gcc/c-tree.h
*** gcc-3.4.3/gcc/c-tree.h	Sun Feb 29 23:34:49 2004
--- gcc-4.0.0/gcc/c-tree.h	Wed Mar 30 19:59:12 2005
***************
*** 1,6 ****
  /* Definitions for C parsing and type checking.
     Copyright (C) 1987, 1993, 1994, 1995, 1997, 1998,
!    1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
--- 1,6 ----
  /* Definitions for C parsing and type checking.
     Copyright (C) 1987, 1993, 1994, 1995, 1997, 1998,
!    1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
*************** Software Foundation, 59 Temple Place - S
*** 23,89 ****
  #define GCC_C_TREE_H
  
  #include "c-common.h"
  
! /* Language-dependent contents of an identifier.  */
! 
! /* The limbo_value is used for block level extern declarations, which need
!    to be type checked against subsequent extern declarations.  They can't
!    be referenced after they fall out of scope, so they can't be global.
! 
!    The rid_code field is used for keywords.  It is in all
!    lang_identifier nodes, because some keywords are only special in a
!    particular context.  */
! 
! struct lang_identifier GTY(())
! {
!   struct c_common_identifier common_id;
!   tree symbol_value;
!   tree tag_value;
!   tree label_value;
! };
! 
! /* The resulting tree type.  */
  
! union lang_tree_node
!   GTY((desc ("TREE_CODE (&%h.generic) == IDENTIFIER_NODE"),
!        chain_next ("TREE_CODE (&%h.generic) == INTEGER_TYPE ? (union lang_tree_node *)TYPE_NEXT_VARIANT (&%h.generic) : (union lang_tree_node *)TREE_CHAIN (&%h.generic)")))
! {
!   union tree_node GTY ((tag ("0"),
! 			desc ("tree_node_structure (&%h)")))
!     generic;
!   struct lang_identifier GTY ((tag ("1"))) identifier;
! };
  
  /* Language-specific declaration information.  */
  
  struct lang_decl GTY(())
  {
!   /* The return types and parameter types may have variable size.
!      This is a list of any SAVE_EXPRs that need to be evaluated to
!      compute those sizes.  */
!   tree pending_sizes;
  };
  
- /* Macros for access to language-specific slots in an identifier.  */
- /* Each of these slots contains a DECL node or null.  */
- 
- /* The value of the identifier in the namespace of "ordinary identifiers"
-    (data objects, enum constants, functions, typedefs).  */
- #define IDENTIFIER_SYMBOL_VALUE(NODE)	\
-   (((struct lang_identifier *) (NODE))->symbol_value)
- /* The value of the identifier in the namespace of struct, union,
-    and enum tags.  */
- #define IDENTIFIER_TAG_VALUE(NODE)	\
-   (((struct lang_identifier *) (NODE))->tag_value)
- /* The value of the identifier in the namespace of labels.  */
- #define IDENTIFIER_LABEL_VALUE(NODE)	\
-   (((struct lang_identifier *) (NODE))->label_value)
- 
- /* In identifiers, C uses the following fields in a special way:
-    TREE_PUBLIC        to record that there was a previous local extern decl.
-    TREE_USED          to record that such a decl was used.
-    TREE_ADDRESSABLE   to record that the address of such a decl was used.  */
- 
  /* In a RECORD_TYPE or UNION_TYPE, nonzero if any component is read-only.  */
  #define C_TYPE_FIELDS_READONLY(TYPE) TREE_LANG_FLAG_1 (TYPE)
  
--- 23,49 ----
  #define GCC_C_TREE_H
  
  #include "c-common.h"
+ #include "diagnostic.h"
  
! /* struct lang_identifier is private to c-decl.c, but langhooks.c needs to
!    know how big it is.  This is sanity-checked in c-decl.c.  */
! #define C_SIZEOF_STRUCT_LANG_IDENTIFIER \
!   (sizeof (struct c_common_identifier) + 3 * sizeof (void *))
  
! /* For gc purposes, return the most likely link for the longest chain.  */
! #define C_LANG_TREE_NODE_CHAIN_NEXT(T)				\
!   ((union lang_tree_node *)					\
!    (TREE_CODE (T) == INTEGER_TYPE ? TYPE_NEXT_VARIANT (T)	\
!     : TREE_CODE (T) == COMPOUND_EXPR ? TREE_OPERAND (T, 1)	\
!     : TREE_CHAIN (T)))
  
  /* Language-specific declaration information.  */
  
  struct lang_decl GTY(())
  {
!   char dummy;
  };
  
  /* In a RECORD_TYPE or UNION_TYPE, nonzero if any component is read-only.  */
  #define C_TYPE_FIELDS_READONLY(TYPE) TREE_LANG_FLAG_1 (TYPE)
  
*************** struct lang_decl GTY(())
*** 103,112 ****
     and C_RID_YYCODE is the token number wanted by Yacc.  */
  #define C_IS_RESERVED_WORD(ID) TREE_LANG_FLAG_0 (ID)
  
- /* In a RECORD_TYPE, a sorted array of the fields of the type.  */
  struct lang_type GTY(())
  {
    struct sorted_fields_type * GTY ((reorder ("resort_sorted_fields"))) s;
  };
  
  /* Record whether a type or decl was written with nonconstant size.
--- 63,79 ----
     and C_RID_YYCODE is the token number wanted by Yacc.  */
  #define C_IS_RESERVED_WORD(ID) TREE_LANG_FLAG_0 (ID)
  
  struct lang_type GTY(())
  {
+   /* In a RECORD_TYPE, a sorted array of the fields of the type.  */
    struct sorted_fields_type * GTY ((reorder ("resort_sorted_fields"))) s;
+   /* In an ENUMERAL_TYPE, the min and max values.  */
+   tree enum_min;
+   tree enum_max;
+   /* In a RECORD_TYPE, information specific to Objective-C, such
+      as a list of adopted protocols or a pointer to a corresponding
+      @interface.  See objc/objc-act.h for details.  */
+   tree objc_info;
  };
  
  /* Record whether a type or decl was written with nonconstant size.
*************** struct lang_type GTY(())
*** 114,123 ****
  #define C_TYPE_VARIABLE_SIZE(TYPE) TYPE_LANG_FLAG_1 (TYPE)
  #define C_DECL_VARIABLE_SIZE(TYPE) DECL_LANG_FLAG_0 (TYPE)
  
- /* Store a value in that field.  */
- #define C_SET_EXP_ORIGINAL_CODE(EXP, CODE) \
-   (TREE_COMPLEXITY (EXP) = (int) (CODE))
- 
  /* Record whether a typedef for type `int' was actually `signed int'.  */
  #define C_TYPEDEF_EXPLICITLY_SIGNED(EXP) DECL_LANG_FLAG_1 (EXP)
  
--- 81,86 ----
*************** struct lang_type GTY(())
*** 128,138 ****
  /* For a FUNCTION_DECL, nonzero if it was an implicit declaration.  */
  #define C_DECL_IMPLICIT(EXP) DECL_LANG_FLAG_2 (EXP)
  
! /* Nonzero for a declaration of an external object which is not
!    currently in scope.  This is either a built-in declaration of
!    a library function, before a real declaration has been seen,
!    or a declaration that appeared in an inner scope that has ended.  */
! #define C_DECL_INVISIBLE(EXP) DECL_LANG_FLAG_3 (EXP)
  
  /* Nonzero for a decl which either doesn't exist or isn't a prototype.
     N.B. Could be simplified if all built-in decls had complete prototypes
--- 91,121 ----
  /* For a FUNCTION_DECL, nonzero if it was an implicit declaration.  */
  #define C_DECL_IMPLICIT(EXP) DECL_LANG_FLAG_2 (EXP)
  
! /* For FUNCTION_DECLs, evaluates true if the decl is built-in but has
!    been declared.  */
! #define C_DECL_DECLARED_BUILTIN(EXP) DECL_LANG_FLAG_3 (EXP)
! 
! /* Record whether a decl was declared register.  This is strictly a
!    front-end flag, whereas DECL_REGISTER is used for code generation;
!    they may differ for structures with volatile fields.  */
! #define C_DECL_REGISTER(EXP) DECL_LANG_FLAG_4 (EXP)
! 
! /* Record whether a decl was used in an expression anywhere except an
!    unevaluated operand of sizeof / typeof / alignof.  This is only
!    used for functions declared static but not defined, though outside
!    sizeof and typeof it is set for other function decls as well.  */
! #define C_DECL_USED(EXP) DECL_LANG_FLAG_5 (EXP)
! 
! /* Record whether a label was defined in a statement expression which
!    has finished and so can no longer be jumped to.  */
! #define C_DECL_UNJUMPABLE_STMT_EXPR(EXP)	\
!   DECL_LANG_FLAG_6 (LABEL_DECL_CHECK (EXP))
! 
! /* Record whether a label was the subject of a goto from outside the
!    current level of statement expression nesting and so cannot be
!    defined right now.  */
! #define C_DECL_UNDEFINABLE_STMT_EXPR(EXP)	\
!   DECL_LANG_FLAG_7 (LABEL_DECL_CHECK (EXP))
  
  /* Nonzero for a decl which either doesn't exist or isn't a prototype.
     N.B. Could be simplified if all built-in decls had complete prototypes
*************** struct lang_type GTY(())
*** 145,156 ****
  /* For FUNCTION_TYPE, a hidden list of types of arguments.  The same as
     TYPE_ARG_TYPES for functions with prototypes, but created for functions
     without prototypes.  */
! #define TYPE_ACTUAL_ARG_TYPES(NODE) TYPE_BINFO (NODE)
  
! /* Values for the first parameter to poplevel.  */
! #define KEEP_NO		0
! #define KEEP_YES	1
! #define KEEP_MAYBE	2
  
  /* Save and restore the variables in this file and elsewhere
     that keep track of the progress of compilation of the current function.
--- 128,342 ----
  /* For FUNCTION_TYPE, a hidden list of types of arguments.  The same as
     TYPE_ARG_TYPES for functions with prototypes, but created for functions
     without prototypes.  */
! #define TYPE_ACTUAL_ARG_TYPES(NODE) TYPE_LANG_SLOT_1 (NODE)
  
! /* Record parser information about an expression that is irrelevant
!    for code generation alongside a tree representing its value.  */
! struct c_expr
! {
!   /* The value of the expression.  */
!   tree value;
!   /* Record the original binary operator of an expression, which may
!      have been changed by fold, STRING_CST for unparenthesized string
!      constants, or ERROR_MARK for other expressions (including
!      parenthesized expressions).  */
!   enum tree_code original_code;
! };
! 
! /* A kind of type specifier.  Note that this information is currently
!    only used to distinguish tag definitions, tag references and typeof
!    uses.  */
! enum c_typespec_kind {
!   /* A reserved keyword type specifier.  */
!   ctsk_resword,
!   /* A reference to a tag, previously declared, such as "struct foo".
!      This includes where the previous declaration was as a different
!      kind of tag, in which case this is only valid if shadowing that
!      tag in an inner scope.  */
!   ctsk_tagref,
!   /* A reference to a tag, not previously declared in a visible
!      scope.  */
!   ctsk_tagfirstref,
!   /* A definition of a tag such as "struct foo { int a; }".  */
!   ctsk_tagdef,
!   /* A typedef name.  */
!   ctsk_typedef,
!   /* An ObjC-specific kind of type specifier.  */
!   ctsk_objc,
!   /* A typeof specifier.  */
!   ctsk_typeof
! };
! 
! /* A type specifier: this structure is created in the parser and
!    passed to declspecs_add_type only.  */
! struct c_typespec {
!   /* What kind of type specifier this is.  */
!   enum c_typespec_kind kind;
!   /* The specifier itself.  */
!   tree spec;
! };
! 
! /* A storage class specifier.  */
! enum c_storage_class {
!   csc_none,
!   csc_auto,
!   csc_extern,
!   csc_register,
!   csc_static,
!   csc_typedef
! };
! 
! /* A type specifier keyword "void", "_Bool", "char", "int", "float",
!    "double", or none of these.  */
! enum c_typespec_keyword {
!   cts_none,
!   cts_void,
!   cts_bool,
!   cts_char,
!   cts_int,
!   cts_float,
!   cts_double
! };
! 
! /* A sequence of declaration specifiers in C.  */
! struct c_declspecs {
!   /* The type specified, if a single type specifier such as a struct,
!      union or enum specifier, typedef name or typeof specifies the
!      whole type, or NULL_TREE if none or a keyword such as "void" or
!      "char" is used.  Does not include qualifiers.  */
!   tree type;
!   /* The attributes from a typedef decl.  */
!   tree decl_attr;
!   /* When parsing, the attributes.  Outside the parser, this will be
!      NULL; attributes (possibly from multiple lists) will be passed
!      separately.  */
!   tree attrs;
!   /* Any type specifier keyword used such as "int", not reflecting
!      modifiers such as "short", or cts_none if none.  */
!   enum c_typespec_keyword typespec_word;
!   /* The storage class specifier, or csc_none if none.  */
!   enum c_storage_class storage_class;
!   /* Whether something other than a storage class specifier or
!      attribute has been seen.  This is used to warn for the
!      obsolescent usage of storage class specifiers other than at the
!      start of the list.  (Doing this properly would require function
!      specifiers to be handled separately from storage class
!      specifiers.)  */
!   BOOL_BITFIELD non_sc_seen_p : 1;
!   /* Whether the type is specified by a typedef or typeof name.  */
!   BOOL_BITFIELD typedef_p : 1;
!   /* Whether a struct, union or enum type either had its content
!      defined by a type specifier in the list or was the first visible
!      declaration of its tag.  */
!   BOOL_BITFIELD tag_defined_p : 1;
!   /* Whether the type is explicitly "signed" or specified by a typedef
!      whose type is explicitly "signed".  */
!   BOOL_BITFIELD explicit_signed_p : 1;
!   /* Whether the specifiers include a deprecated typedef.  */
!   BOOL_BITFIELD deprecated_p : 1;
!   /* Whether the type defaulted to "int" because there were no type
!      specifiers.  */
!   BOOL_BITFIELD default_int_p;
!   /* Whether "long" was specified.  */
!   BOOL_BITFIELD long_p : 1;
!   /* Whether "long" was specified more than once.  */
!   BOOL_BITFIELD long_long_p : 1;
!   /* Whether "short" was specified.  */
!   BOOL_BITFIELD short_p : 1;
!   /* Whether "signed" was specified.  */
!   BOOL_BITFIELD signed_p : 1;
!   /* Whether "unsigned" was specified.  */
!   BOOL_BITFIELD unsigned_p : 1;
!   /* Whether "complex" was specified.  */
!   BOOL_BITFIELD complex_p : 1;
!   /* Whether "inline" was specified.  */
!   BOOL_BITFIELD inline_p : 1;
!   /* Whether "__thread" was specified.  */
!   BOOL_BITFIELD thread_p : 1;
!   /* Whether "const" was specified.  */
!   BOOL_BITFIELD const_p : 1;
!   /* Whether "volatile" was specified.  */
!   BOOL_BITFIELD volatile_p : 1;
!   /* Whether "restrict" was specified.  */
!   BOOL_BITFIELD restrict_p : 1;
! };
! 
! /* The various kinds of declarators in C.  */
! enum c_declarator_kind {
!   /* An identifier.  */
!   cdk_id,
!   /* A function.  */
!   cdk_function,
!   /* An array.  */
!   cdk_array,
!   /* A pointer.  */
!   cdk_pointer,
!   /* Parenthesized declarator with nested attributes.  */
!   cdk_attrs
! };
! 
! /* Information about the parameters in a function declarator.  */
! struct c_arg_info {
!   /* A list of parameter decls.  */
!   tree parms;
!   /* A list of structure, union and enum tags defined.  */
!   tree tags;
!   /* A list of argument types to go in the FUNCTION_TYPE.  */
!   tree types;
!   /* A list of non-parameter decls (notably enumeration constants)
!      defined with the parameters.  */
!   tree others;
! };
! 
! /* A declarator.  */
! struct c_declarator {
!   /* The kind of declarator.  */
!   enum c_declarator_kind kind;
!   /* Except for cdk_id, the contained declarator.  For cdk_id, NULL.  */
!   struct c_declarator *declarator;
!   union {
!     /* For identifiers, an IDENTIFIER_NODE or NULL_TREE if an abstract
!        declarator.  */
!     tree id;
!     /* For functions.  */
!     struct c_arg_info *arg_info;
!     /* For arrays.  */
!     struct {
!       /* The array dimension, or NULL for [] and [*].  */
!       tree dimen;
!       /* The qualifiers inside [].  */
!       int quals;
!       /* The attributes (currently ignored) inside [].  */
!       tree attrs;
!       /* Whether [static] was used.  */
!       BOOL_BITFIELD static_p : 1;
!       /* Whether [*] was used.  */
!       BOOL_BITFIELD vla_unspec_p : 1;
!     } array;
!     /* For pointers, the qualifiers on the pointer type.  */
!     int pointer_quals;
!     /* For attributes.  */
!     tree attrs;
!   } u;
! };
! 
! /* A type name.  */
! struct c_type_name {
!   /* The declaration specifiers.  */
!   struct c_declspecs *specs;
!   /* The declarator.  */
!   struct c_declarator *declarator;
! };
! 
! /* A parameter.  */
! struct c_parm {
!   /* The declaration specifiers, minus any prefix attributes.  */
!   struct c_declspecs *specs;
!   /* The attributes.  */
!   tree attrs;
!   /* The declarator.  */
!   struct c_declarator *declarator;
! };
  
  /* Save and restore the variables in this file and elsewhere
     that keep track of the progress of compilation of the current function.
*************** struct lang_type GTY(())
*** 159,171 ****
  struct language_function GTY(())
  {
    struct c_language_function base;
    int returns_value;
    int returns_null;
    int returns_abnormally;
    int warn_about_return_type;
    int extern_inline;
!   int x_in_iteration_stmt;
!   int x_in_case_stmt;
  };
  
  
--- 345,380 ----
  struct language_function GTY(())
  {
    struct c_language_function base;
+   tree x_break_label;
+   tree x_cont_label;
+   struct c_switch * GTY((skip)) x_switch_stack;
+   struct c_arg_info * GTY((skip)) arg_info;
    int returns_value;
    int returns_null;
    int returns_abnormally;
    int warn_about_return_type;
    int extern_inline;
! };
! 
! /* Save lists of labels used or defined in particular statement
!    expression contexts.  Allocated on the parser obstack.  */
! 
! struct c_label_list
! {
!   /* The label at the head of the list.  */
!   tree label;
!   /* The rest of the list.  */
!   struct c_label_list *next;
! };
! 
! struct c_label_context
! {
!   /* The labels defined at this level of nesting.  */
!   struct c_label_list *labels_def;
!   /* The labels used at this level of nesting.  */
!   struct c_label_list *labels_used;
!   /* The next outermost context.  */
!   struct c_label_context *next;
  };
  
  
*************** extern void c_parse_init (void);
*** 176,200 ****
  extern void gen_aux_info_record (tree, int, int, int);
  
  /* in c-decl.c */
! extern int c_in_iteration_stmt;
! extern int c_in_case_stmt;
  
  extern int global_bindings_p (void);
! extern tree getdecls (void);
! extern void pushlevel (int);
  extern void insert_block (tree);
- extern void set_block (tree);
  extern tree pushdecl (tree);
  extern void c_expand_body (tree);
  
  extern void c_init_decl_processing (void);
  extern void c_dup_lang_specific_decl (tree);
  extern void c_print_identifier (FILE *, tree, int);
! extern tree build_array_declarator (tree, tree, int, int);
  extern tree build_enumerator (tree, tree);
  extern void check_for_loop_decls (void);
  extern void mark_forward_parm_decls (void);
- extern int  complete_array_type (tree, tree, int);
  extern void declare_parm_level (void);
  extern void undeclared_variable (tree);
  extern tree declare_label (tree);
--- 385,410 ----
  extern void gen_aux_info_record (tree, int, int, int);
  
  /* in c-decl.c */
! extern struct obstack parser_obstack;
! extern tree c_break_label;
! extern tree c_cont_label;
  
  extern int global_bindings_p (void);
! extern void push_scope (void);
! extern tree pop_scope (void);
  extern void insert_block (tree);
  extern tree pushdecl (tree);
  extern void c_expand_body (tree);
  
  extern void c_init_decl_processing (void);
  extern void c_dup_lang_specific_decl (tree);
  extern void c_print_identifier (FILE *, tree, int);
! extern int quals_from_declspecs (const struct c_declspecs *);
! extern struct c_declarator *build_array_declarator (tree, struct c_declspecs *,
! 						    bool, bool);
  extern tree build_enumerator (tree, tree);
  extern void check_for_loop_decls (void);
  extern void mark_forward_parm_decls (void);
  extern void declare_parm_level (void);
  extern void undeclared_variable (tree);
  extern tree declare_label (tree);
*************** extern void finish_decl (tree, tree, tre
*** 203,298 ****
  extern tree finish_enum (tree, tree, tree);
  extern void finish_function (void);
  extern tree finish_struct (tree, tree, tree);
! extern tree get_parm_info (int);
! extern tree grokfield (tree, tree, tree);
! extern tree groktypename (tree);
! extern tree groktypename_in_parm_context (tree);
  extern tree implicitly_declare (tree);
- extern int  in_parm_level_p (void);
  extern void keep_next_level (void);
  extern tree lookup_name (tree);
  extern void pending_xref_error (void);
  extern void c_push_function_context (struct function *);
  extern void c_pop_function_context (struct function *);
! extern void push_parm_decl (tree);
  extern tree pushdecl_top_level (tree);
! extern void pushtag (tree, tree);
! extern tree set_array_declarator_type (tree, tree, int);
! extern void shadow_tag (tree);
! extern void shadow_tag_warned (tree, int);
  extern tree start_enum (tree);
! extern int  start_function (tree, tree, tree);
! extern tree start_decl (tree, tree, int, tree);
  extern tree start_struct (enum tree_code, tree);
  extern void store_parm_decls (void);
  extern tree xref_tag (enum tree_code, tree);
! extern tree c_begin_compound_stmt (void);
! extern void c_expand_deferred_function (tree);
! extern void c_expand_decl_stmt (tree);
! extern void c_static_assembler_name (tree);
! extern tree make_pointer_declarator (tree, tree);
! extern void merge_translation_unit_decls (void);
  
  /* in c-objc-common.c */
  extern int c_disregard_inline_limits (tree);
  extern int c_cannot_inline_tree_fn (tree *);
  extern bool c_objc_common_init (void);
! extern int c_missing_noreturn_ok_p (tree);
! extern void c_objc_common_finish_file (void);
! extern int defer_fn (tree);
  extern bool c_warn_unused_global_decl (tree);
  
  #define c_build_type_variant(TYPE, CONST_P, VOLATILE_P)		  \
    c_build_qualified_type ((TYPE),				  \
  			  ((CONST_P) ? TYPE_QUAL_CONST : 0) |	  \
  			  ((VOLATILE_P) ? TYPE_QUAL_VOLATILE : 0))
  
- #define c_sizeof_nowarn(T)  c_sizeof_or_alignof_type (T, SIZEOF_EXPR, 0)
- 
  /* in c-typeck.c */
  
! /* For use with comptypes.  */
! enum {
!   COMPARE_STRICT = 0
! };
  
  extern tree require_complete_type (tree);
! extern int comptypes (tree, tree, int);
! extern tree c_size_in_bytes (tree);
  extern bool c_mark_addressable (tree);
  extern void c_incomplete_type_error (tree, tree);
  extern tree c_type_promotes_to (tree);
  extern tree build_component_ref (tree, tree);
  extern tree build_indirect_ref (tree, const char *);
  extern tree build_array_ref (tree, tree);
  extern tree build_external_ref (tree, int);
! extern tree parser_build_binary_op (enum tree_code, tree, tree);
! extern int c_tree_expr_nonnegative_p (tree);
! extern void readonly_error (tree, const char *);
  extern tree build_conditional_expr (tree, tree, tree);
! extern tree build_compound_expr (tree);
! extern tree c_cast_expr (tree, tree);
  extern tree build_c_cast (tree, tree);
  extern tree build_modify_expr (tree, enum tree_code, tree);
  extern void store_init_value (tree, tree);
  extern void error_init (const char *);
  extern void pedwarn_init (const char *);
  extern void start_init (tree, tree, int);
  extern void finish_init (void);
  extern void really_start_incremental_init (tree);
  extern void push_init_level (int);
! extern tree pop_init_level (int);
  extern void set_init_index (tree, tree);
  extern void set_init_label (tree);
! extern void process_init_element (tree);
  extern tree build_compound_literal (tree, tree);
- extern void pedwarn_c90 (const char *, ...) ATTRIBUTE_PRINTF_1;
- extern void pedwarn_c99 (const char *, ...) ATTRIBUTE_PRINTF_1;
  extern tree c_start_case (tree);
! extern void c_finish_case (void);
! extern tree simple_asm_stmt (tree);
! extern tree build_asm_stmt (tree, tree, tree, tree, tree);
  extern tree c_convert_parm_for_inlining (tree, tree, tree, int);
  
  /* Set to 0 at beginning of a function definition, set to 1 if
     a return statement that specifies a return value is seen.  */
--- 413,538 ----
  extern tree finish_enum (tree, tree, tree);
  extern void finish_function (void);
  extern tree finish_struct (tree, tree, tree);
! extern struct c_arg_info *get_parm_info (bool);
! extern tree grokfield (struct c_declarator *, struct c_declspecs *, tree);
! extern tree groktypename (struct c_type_name *);
! extern tree grokparm (const struct c_parm *);
  extern tree implicitly_declare (tree);
  extern void keep_next_level (void);
  extern tree lookup_name (tree);
  extern void pending_xref_error (void);
  extern void c_push_function_context (struct function *);
  extern void c_pop_function_context (struct function *);
! extern void push_parm_decl (const struct c_parm *);
  extern tree pushdecl_top_level (tree);
! extern struct c_declarator *set_array_declarator_inner (struct c_declarator *,
! 							struct c_declarator *,
! 							bool);
! extern tree builtin_function (const char *, tree, int, enum built_in_class,
! 			      const char *, tree);
! extern void shadow_tag (const struct c_declspecs *);
! extern void shadow_tag_warned (const struct c_declspecs *, int);
  extern tree start_enum (tree);
! extern int  start_function (struct c_declspecs *, struct c_declarator *, tree);
! extern tree start_decl (struct c_declarator *, struct c_declspecs *, bool,
! 			tree);
  extern tree start_struct (enum tree_code, tree);
  extern void store_parm_decls (void);
+ extern void store_parm_decls_from (struct c_arg_info *);
  extern tree xref_tag (enum tree_code, tree);
! extern struct c_typespec parser_xref_tag (enum tree_code, tree);
! extern int c_expand_decl (tree);
! extern struct c_parm *build_c_parm (struct c_declspecs *, tree,
! 				    struct c_declarator *);
! extern struct c_declarator *build_attrs_declarator (tree,
! 						    struct c_declarator *);
! extern struct c_declarator *build_function_declarator (struct c_arg_info *,
! 						       struct c_declarator *);
! extern struct c_declarator *build_id_declarator (tree);
! extern struct c_declarator *make_pointer_declarator (struct c_declspecs *,
! 						     struct c_declarator *);
! extern struct c_declspecs *build_null_declspecs (void);
! extern struct c_declspecs *declspecs_add_qual (struct c_declspecs *, tree);
! extern struct c_declspecs *declspecs_add_type (struct c_declspecs *,
! 					       struct c_typespec);
! extern struct c_declspecs *declspecs_add_scspec (struct c_declspecs *, tree);
! extern struct c_declspecs *declspecs_add_attrs (struct c_declspecs *, tree);
! extern struct c_declspecs *finish_declspecs (struct c_declspecs *);
  
  /* in c-objc-common.c */
  extern int c_disregard_inline_limits (tree);
  extern int c_cannot_inline_tree_fn (tree *);
  extern bool c_objc_common_init (void);
! extern bool c_missing_noreturn_ok_p (tree);
! extern tree c_objc_common_truthvalue_conversion (tree expr);
  extern bool c_warn_unused_global_decl (tree);
+ extern void c_initialize_diagnostics (diagnostic_context *);
  
  #define c_build_type_variant(TYPE, CONST_P, VOLATILE_P)		  \
    c_build_qualified_type ((TYPE),				  \
  			  ((CONST_P) ? TYPE_QUAL_CONST : 0) |	  \
  			  ((VOLATILE_P) ? TYPE_QUAL_VOLATILE : 0))
  
  /* in c-typeck.c */
+ extern int in_alignof;
+ extern int in_sizeof;
+ extern int in_typeof;
  
! extern struct c_switch *c_switch_stack;
! extern struct c_label_context *label_context_stack;
  
  extern tree require_complete_type (tree);
! extern int same_translation_unit_p (tree, tree);
! extern int comptypes (tree, tree);
  extern bool c_mark_addressable (tree);
  extern void c_incomplete_type_error (tree, tree);
  extern tree c_type_promotes_to (tree);
+ extern tree composite_type (tree, tree);
  extern tree build_component_ref (tree, tree);
  extern tree build_indirect_ref (tree, const char *);
  extern tree build_array_ref (tree, tree);
  extern tree build_external_ref (tree, int);
! extern void pop_maybe_used (bool);
! extern struct c_expr c_expr_sizeof_expr (struct c_expr);
! extern struct c_expr c_expr_sizeof_type (struct c_type_name *);
! extern struct c_expr parser_build_binary_op (enum tree_code, struct c_expr,
! 					     struct c_expr);
  extern tree build_conditional_expr (tree, tree, tree);
! extern tree build_compound_expr (tree, tree);
! extern tree c_cast_expr (struct c_type_name *, tree);
  extern tree build_c_cast (tree, tree);
  extern tree build_modify_expr (tree, enum tree_code, tree);
  extern void store_init_value (tree, tree);
  extern void error_init (const char *);
  extern void pedwarn_init (const char *);
+ extern void maybe_warn_string_init (tree, struct c_expr);
  extern void start_init (tree, tree, int);
  extern void finish_init (void);
  extern void really_start_incremental_init (tree);
  extern void push_init_level (int);
! extern struct c_expr pop_init_level (int);
  extern void set_init_index (tree, tree);
  extern void set_init_label (tree);
! extern void process_init_element (struct c_expr);
  extern tree build_compound_literal (tree, tree);
  extern tree c_start_case (tree);
! extern void c_finish_case (tree);
! extern tree build_asm_expr (tree, tree, tree, tree, bool);
! extern tree build_asm_stmt (tree, tree);
  extern tree c_convert_parm_for_inlining (tree, tree, tree, int);
+ extern int c_types_compatible_p (tree, tree);
+ extern tree c_begin_compound_stmt (bool);
+ extern tree c_end_compound_stmt (tree, bool);
+ extern void c_finish_if_stmt (location_t, tree, tree, tree, bool);
+ extern void c_finish_loop (location_t, tree, tree, tree, tree, tree, bool);
+ extern tree c_begin_stmt_expr (void);
+ extern tree c_finish_stmt_expr (tree);
+ extern tree c_process_expr_stmt (tree);
+ extern tree c_finish_expr_stmt (tree);
+ extern tree c_finish_return (tree);
+ extern tree c_finish_bc_stmt (tree *, bool);
+ extern tree c_finish_goto_label (tree);
+ extern tree c_finish_goto_ptr (tree);
  
  /* Set to 0 at beginning of a function definition, set to 1 if
     a return statement that specifies a return value is seen.  */
*************** extern int current_function_returns_abno
*** 313,330 ****
  
  extern int system_header_p;
  
  /* In c-decl.c */
  extern void c_finish_incomplete_decl (tree);
- extern void *get_current_scope (void);
- extern void objc_mark_locals_volatile (void *);
  extern void c_write_global_declarations (void);
  
- extern GTY(()) tree static_ctors;
- extern GTY(()) tree static_dtors;
- 
  /* In order for the format checking to accept the C frontend
     diagnostic framework extensions, you must include this file before
     toplev.h, not after.  */
  #define GCC_DIAG_STYLE __gcc_cdiag__
  
  #endif /* ! GCC_C_TREE_H */
--- 553,581 ----
  
  extern int system_header_p;
  
+ /* True means global_bindings_p should return false even if the scope stack
+    says we are in file scope.  */
+ 
+ extern bool c_override_global_bindings_to_false;
+ 
+ /* True means we've initialized exception handling.  */
+ extern bool c_eh_initialized_p;
+ 
  /* In c-decl.c */
  extern void c_finish_incomplete_decl (tree);
  extern void c_write_global_declarations (void);
  
  /* In order for the format checking to accept the C frontend
     diagnostic framework extensions, you must include this file before
     toplev.h, not after.  */
  #define GCC_DIAG_STYLE __gcc_cdiag__
+ #if GCC_VERSION >= 3005
+ #define ATTRIBUTE_GCC_CDIAG(m, n) __attribute__ ((__format__ (GCC_DIAG_STYLE, m ,n))) ATTRIBUTE_NONNULL(m)
+ #else
+ #define ATTRIBUTE_GCC_CDIAG(m, n) ATTRIBUTE_NONNULL(m)
+ #endif
+ 
+ extern void pedwarn_c90 (const char *, ...) ATTRIBUTE_GCC_CDIAG(1,2);
+ extern void pedwarn_c99 (const char *, ...) ATTRIBUTE_GCC_CDIAG(1,2);
  
  #endif /* ! GCC_C_TREE_H */
diff -Nrcpad gcc-3.4.3/gcc/c-typeck.c gcc-4.0.0/gcc/c-typeck.c
*** gcc-3.4.3/gcc/c-typeck.c	Thu Sep 23 15:05:13 2004
--- gcc-4.0.0/gcc/c-typeck.c	Wed Mar 30 19:59:12 2005
***************
*** 1,6 ****
  /* Build expressions with type checking for C compiler.
!    Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
!    1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
--- 1,6 ----
  /* Build expressions with type checking for C compiler.
!    Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
!    1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
*************** Software Foundation, 59 Temple Place - S
*** 23,33 ****
  /* This file is part of the C front end.
     It contains routines to build C expressions given their operands,
     including computing the types of the result, C-specific error checks,
!    and some optimization.
! 
!    There are also routines to build RETURN_STMT nodes and CASE_STMT nodes,
!    and to process initializations in declarations (since they work
!    like a strange sort of assignment).  */
  
  #include "config.h"
  #include "system.h"
--- 23,29 ----
  /* This file is part of the C front end.
     It contains routines to build C expressions given their operands,
     including computing the types of the result, C-specific error checks,
!    and some optimization.  */
  
  #include "config.h"
  #include "system.h"
*************** Software Foundation, 59 Temple Place - S
*** 35,40 ****
--- 31,37 ----
  #include "tm.h"
  #include "rtl.h"
  #include "tree.h"
+ #include "langhooks.h"
  #include "c-tree.h"
  #include "tm_p.h"
  #include "flags.h"
*************** Software Foundation, 59 Temple Place - S
*** 44,49 ****
--- 41,70 ----
  #include "intl.h"
  #include "ggc.h"
  #include "target.h"
+ #include "tree-iterator.h"
+ #include "tree-gimple.h"
+ #include "tree-flow.h"
+ 
+ /* Possible cases of implicit bad conversions.  Used to select
+    diagnostic messages in convert_for_assignment.  */
+ enum impl_conv {
+   ic_argpass,
+   ic_argpass_nonproto,
+   ic_assign,
+   ic_init,
+   ic_return
+ };
+ 
+ /* The level of nesting inside "__alignof__".  */
+ int in_alignof;
+ 
+ /* The level of nesting inside "sizeof".  */
+ int in_sizeof;
+ 
+ /* The level of nesting inside "typeof".  */
+ int in_typeof;
+ 
+ struct c_label_context *label_context_stack;
  
  /* Nonzero if we've already printed a "missing braces around initializer"
     message within this initializer.  */
*************** static int require_constant_value;
*** 53,74 ****
  static int require_constant_elements;
  
  static tree qualify_type (tree, tree);
! static int same_translation_unit_p (tree, tree);
! static int tagged_types_tu_compatible_p (tree, tree, int);
  static int comp_target_types (tree, tree, int);
! static int function_types_compatible_p (tree, tree, int);
! static int type_lists_compatible_p (tree, tree, int);
  static tree decl_constant_value_for_broken_optimization (tree);
  static tree default_function_array_conversion (tree);
  static tree lookup_field (tree, tree);
  static tree convert_arguments (tree, tree, tree, tree);
  static tree pointer_diff (tree, tree);
! static tree unary_complex_lvalue (enum tree_code, tree, int);
! static void pedantic_lvalue_warning (enum tree_code);
! static tree internal_build_compound_expr (tree, int);
! static tree convert_for_assignment (tree, tree, const char *, tree, tree,
  				    int);
- static void warn_for_assignment (const char *, const char *, tree, int);
  static tree valid_compound_expr_initializer (tree, tree);
  static void push_string (const char *);
  static void push_member_name (tree);
--- 74,90 ----
  static int require_constant_elements;
  
  static tree qualify_type (tree, tree);
! static int tagged_types_tu_compatible_p (tree, tree);
  static int comp_target_types (tree, tree, int);
! static int function_types_compatible_p (tree, tree);
! static int type_lists_compatible_p (tree, tree);
  static tree decl_constant_value_for_broken_optimization (tree);
  static tree default_function_array_conversion (tree);
  static tree lookup_field (tree, tree);
  static tree convert_arguments (tree, tree, tree, tree);
  static tree pointer_diff (tree, tree);
! static tree convert_for_assignment (tree, tree, enum impl_conv, tree, tree,
  				    int);
  static tree valid_compound_expr_initializer (tree, tree);
  static void push_string (const char *);
  static void push_member_name (tree);
*************** static void push_array_bounds (int);
*** 76,83 ****
  static int spelling_length (void);
  static char *print_spelling (char *);
  static void warning_init (const char *);
! static tree digest_init (tree, tree, int);
! static void output_init_element (tree, tree, tree, int);
  static void output_pending_init_elements (int);
  static int set_designator (int);
  static void push_range_stack (tree);
--- 92,99 ----
  static int spelling_length (void);
  static char *print_spelling (char *);
  static void warning_init (const char *);
! static tree digest_init (tree, tree, bool, int);
! static void output_init_element (tree, bool, tree, tree, int);
  static void output_pending_init_elements (int);
  static int set_designator (int);
  static void push_range_stack (tree);
*************** static void add_pending_init (tree, tree
*** 85,90 ****
--- 101,108 ----
  static void set_nonincremental_init (void);
  static void set_nonincremental_init_from_string (tree);
  static tree find_init_member (tree);
+ static void readonly_error (tree, enum lvalue_use);
+ static void record_maybe_used_decl (tree);
  
  /* Do `exp = require_complete_type (exp);' to make sure exp
     does not have an incomplete type.  (That includes void types.)  */
*************** c_incomplete_type_error (tree value, tre
*** 120,126 ****
  
    if (value != 0 && (TREE_CODE (value) == VAR_DECL
  		     || TREE_CODE (value) == PARM_DECL))
!     error ("`%s' has an incomplete type",
  	   IDENTIFIER_POINTER (DECL_NAME (value)));
    else
      {
--- 138,144 ----
  
    if (value != 0 && (TREE_CODE (value) == VAR_DECL
  		     || TREE_CODE (value) == PARM_DECL))
!     error ("%qs has an incomplete type",
  	   IDENTIFIER_POINTER (DECL_NAME (value)));
    else
      {
*************** c_incomplete_type_error (tree value, tre
*** 160,174 ****
  	  return;
  
  	default:
! 	  abort ();
  	}
  
        if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
! 	error ("invalid use of undefined type `%s %s'",
  	       type_code_string, IDENTIFIER_POINTER (TYPE_NAME (type)));
        else
  	/* If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL.  */
! 	error ("invalid use of incomplete typedef `%s'",
  	       IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))));
      }
  }
--- 178,192 ----
  	  return;
  
  	default:
! 	  gcc_unreachable ();
  	}
  
        if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
! 	error ("invalid use of undefined type %<%s %s%>",
  	       type_code_string, IDENTIFIER_POINTER (TYPE_NAME (type)));
        else
  	/* If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL.  */
! 	error ("invalid use of incomplete typedef %qs",
  	       IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))));
      }
  }
*************** c_type_promotes_to (tree type)
*** 185,191 ****
    if (c_promoting_integer_type_p (type))
      {
        /* Preserve unsignedness if not really getting any wider.  */
!       if (TREE_UNSIGNED (type)
            && (TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node)))
          return unsigned_type_node;
        return integer_type_node;
--- 203,209 ----
    if (c_promoting_integer_type_p (type))
      {
        /* Preserve unsignedness if not really getting any wider.  */
!       if (TYPE_UNSIGNED (type)
            && (TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node)))
          return unsigned_type_node;
        return integer_type_node;
*************** qualify_type (tree type, tree like)
*** 204,219 ****
  				 TYPE_QUALS (type) | TYPE_QUALS (like));
  }
  
! /* Return the common type of two types.
!    We assume that comptypes has already been done and returned 1;
!    if that isn't so, this may crash.  In particular, we assume that qualifiers
!    match.
  
!    This is the type for the result of most arithmetic operations
!    if the operands have the given two types.  */
  
  tree
! common_type (tree t1, tree t2)
  {
    enum tree_code code1;
    enum tree_code code2;
--- 222,235 ----
  				 TYPE_QUALS (type) | TYPE_QUALS (like));
  }
  
! /* Return the composite type of two compatible types.
  
!    We assume that comptypes has already been done and returned
!    nonzero; if that isn't so, this may crash.  In particular, we
!    assume that qualifiers match.  */
  
  tree
! composite_type (tree t1, tree t2)
  {
    enum tree_code code1;
    enum tree_code code2;
*************** common_type (tree t1, tree t2)
*** 229,354 ****
    if (t2 == error_mark_node)
      return t1;
  
-   /* Merge the attributes.  */
-   attributes = (*targetm.merge_type_attributes) (t1, t2);
- 
-   /* Treat an enum type as the unsigned integer type of the same width.  */
- 
-   if (TREE_CODE (t1) == ENUMERAL_TYPE)
-     t1 = c_common_type_for_size (TYPE_PRECISION (t1), 1);
-   if (TREE_CODE (t2) == ENUMERAL_TYPE)
-     t2 = c_common_type_for_size (TYPE_PRECISION (t2), 1);
- 
    code1 = TREE_CODE (t1);
    code2 = TREE_CODE (t2);
  
!   /* If one type is complex, form the common type of the non-complex
!      components, then make that complex.  Use T1 or T2 if it is the
!      required type.  */
!   if (code1 == COMPLEX_TYPE || code2 == COMPLEX_TYPE)
!     {
!       tree subtype1 = code1 == COMPLEX_TYPE ? TREE_TYPE (t1) : t1;
!       tree subtype2 = code2 == COMPLEX_TYPE ? TREE_TYPE (t2) : t2;
!       tree subtype = common_type (subtype1, subtype2);
! 
!       if (code1 == COMPLEX_TYPE && TREE_TYPE (t1) == subtype)
! 	return build_type_attribute_variant (t1, attributes);
!       else if (code2 == COMPLEX_TYPE && TREE_TYPE (t2) == subtype)
! 	return build_type_attribute_variant (t2, attributes);
!       else
! 	return build_type_attribute_variant (build_complex_type (subtype),
! 					     attributes);
!     }
! 
!   switch (code1)
!     {
!     case INTEGER_TYPE:
!     case REAL_TYPE:
!       /* If only one is real, use it as the result.  */
! 
!       if (code1 == REAL_TYPE && code2 != REAL_TYPE)
! 	return build_type_attribute_variant (t1, attributes);
! 
!       if (code2 == REAL_TYPE && code1 != REAL_TYPE)
! 	return build_type_attribute_variant (t2, attributes);
! 
!       /* Both real or both integers; use the one with greater precision.  */
! 
!       if (TYPE_PRECISION (t1) > TYPE_PRECISION (t2))
! 	return build_type_attribute_variant (t1, attributes);
!       else if (TYPE_PRECISION (t2) > TYPE_PRECISION (t1))
! 	return build_type_attribute_variant (t2, attributes);
! 
!       /* Same precision.  Prefer longs to ints even when same size.  */
! 
!       if (TYPE_MAIN_VARIANT (t1) == long_unsigned_type_node
! 	  || TYPE_MAIN_VARIANT (t2) == long_unsigned_type_node)
! 	{
! 	  t1 = build_qualified_type (long_unsigned_type_node,
! 				     TYPE_QUALS (t1));
! 	  return build_type_attribute_variant (t1, attributes);
! 	}
! 
!       if (TYPE_MAIN_VARIANT (t1) == long_integer_type_node
! 	  || TYPE_MAIN_VARIANT (t2) == long_integer_type_node)
! 	{
! 	  tree ntype;
! 
! 	  /* But preserve unsignedness from the other type,
! 	     since long cannot hold all the values of an unsigned int.  */
! 	  if (TREE_UNSIGNED (t1) || TREE_UNSIGNED (t2))
! 	     ntype = long_unsigned_type_node;
! 	  else
! 	     ntype = long_integer_type_node;
! 
! 	  ntype = build_qualified_type (ntype, TYPE_QUALS (t1));
! 	  return build_type_attribute_variant (ntype, attributes);
! 	}
  
!       /* Likewise, prefer long double to double even if same size.  */
!       if (TYPE_MAIN_VARIANT (t1) == long_double_type_node
! 	  || TYPE_MAIN_VARIANT (t2) == long_double_type_node)
! 	{
! 	  t1 = build_qualified_type (long_double_type_node,
! 				     TYPE_QUALS (t1));
! 	  return build_type_attribute_variant (t1, attributes);
! 	}
  
!       /* Otherwise prefer the unsigned one.  */
  
!       if (TREE_UNSIGNED (t1))
! 	return build_type_attribute_variant (t1, attributes);
!       else
! 	return build_type_attribute_variant (t2, attributes);
  
      case POINTER_TYPE:
!       /* For two pointers, do this recursively on the target type,
! 	 and combine the qualifiers of the two types' targets.  */
!       /* This code was turned off; I don't know why.
! 	 But ANSI C specifies doing this with the qualifiers.
! 	 So I turned it on again.  */
        {
  	tree pointed_to_1 = TREE_TYPE (t1);
  	tree pointed_to_2 = TREE_TYPE (t2);
! 	tree target = common_type (TYPE_MAIN_VARIANT (pointed_to_1),
! 				   TYPE_MAIN_VARIANT (pointed_to_2));
! 	t1 = build_pointer_type (c_build_qualified_type
! 				 (target,
! 				  TYPE_QUALS (pointed_to_1) |
! 				  TYPE_QUALS (pointed_to_2)));
! 	return build_type_attribute_variant (t1, attributes);
        }
  
      case ARRAY_TYPE:
        {
! 	tree elt = common_type (TREE_TYPE (t1), TREE_TYPE (t2));
  	/* Save space: see if the result is identical to one of the args.  */
  	if (elt == TREE_TYPE (t1) && TYPE_DOMAIN (t1))
  	  return build_type_attribute_variant (t1, attributes);
  	if (elt == TREE_TYPE (t2) && TYPE_DOMAIN (t2))
  	  return build_type_attribute_variant (t2, attributes);
! 	/* Merge the element types, and have a size if either arg has one.  */
! 	t1 = build_array_type (elt, TYPE_DOMAIN (TYPE_DOMAIN (t1) ? t1 : t2));
  	return build_type_attribute_variant (t1, attributes);
        }
  
--- 245,311 ----
    if (t2 == error_mark_node)
      return t1;
  
    code1 = TREE_CODE (t1);
    code2 = TREE_CODE (t2);
  
!   /* Merge the attributes.  */
!   attributes = targetm.merge_type_attributes (t1, t2);
  
!   /* If one is an enumerated type and the other is the compatible
!      integer type, the composite type might be either of the two
!      (DR#013 question 3).  For consistency, use the enumerated type as
!      the composite type.  */
  
!   if (code1 == ENUMERAL_TYPE && code2 == INTEGER_TYPE)
!     return t1;
!   if (code2 == ENUMERAL_TYPE && code1 == INTEGER_TYPE)
!     return t2;
  
!   gcc_assert (code1 == code2);
  
+   switch (code1)
+     {
      case POINTER_TYPE:
!       /* For two pointers, do this recursively on the target type.  */
        {
  	tree pointed_to_1 = TREE_TYPE (t1);
  	tree pointed_to_2 = TREE_TYPE (t2);
! 	tree target = composite_type (pointed_to_1, pointed_to_2);
! 	t1 = build_pointer_type (target);
! 	t1 = build_type_attribute_variant (t1, attributes);
! 	return qualify_type (t1, t2);
        }
  
      case ARRAY_TYPE:
        {
! 	tree elt = composite_type (TREE_TYPE (t1), TREE_TYPE (t2));
! 	int quals;
! 	tree unqual_elt;
! 
! 	/* We should not have any type quals on arrays at all.  */
! 	gcc_assert (!TYPE_QUALS (t1) && !TYPE_QUALS (t2));
! 	
  	/* Save space: see if the result is identical to one of the args.  */
  	if (elt == TREE_TYPE (t1) && TYPE_DOMAIN (t1))
  	  return build_type_attribute_variant (t1, attributes);
  	if (elt == TREE_TYPE (t2) && TYPE_DOMAIN (t2))
  	  return build_type_attribute_variant (t2, attributes);
! 	
! 	if (elt == TREE_TYPE (t1) && !TYPE_DOMAIN (t2) && !TYPE_DOMAIN (t1))
! 	  return build_type_attribute_variant (t1, attributes);
! 	if (elt == TREE_TYPE (t2) && !TYPE_DOMAIN (t2) && !TYPE_DOMAIN (t1))
! 	  return build_type_attribute_variant (t2, attributes);
! 	
! 	/* Merge the element types, and have a size if either arg has
! 	   one.  We may have qualifiers on the element types.  To set
! 	   up TYPE_MAIN_VARIANT correctly, we need to form the
! 	   composite of the unqualified types and add the qualifiers
! 	   back at the end.  */
! 	quals = TYPE_QUALS (strip_array_types (elt));
! 	unqual_elt = c_build_qualified_type (elt, TYPE_UNQUALIFIED);
! 	t1 = build_array_type (unqual_elt,
! 			       TYPE_DOMAIN (TYPE_DOMAIN (t1) ? t1 : t2));
! 	t1 = c_build_qualified_type (t1, quals);
  	return build_type_attribute_variant (t1, attributes);
        }
  
*************** common_type (tree t1, tree t2)
*** 356,362 ****
        /* Function types: prefer the one that specified arg types.
  	 If both do, merge the arg types.  Also merge the return types.  */
        {
! 	tree valtype = common_type (TREE_TYPE (t1), TREE_TYPE (t2));
  	tree p1 = TYPE_ARG_TYPES (t1);
  	tree p2 = TYPE_ARG_TYPES (t2);
  	int len;
--- 313,319 ----
        /* Function types: prefer the one that specified arg types.
  	 If both do, merge the arg types.  Also merge the return types.  */
        {
! 	tree valtype = composite_type (TREE_TYPE (t1), TREE_TYPE (t2));
  	tree p1 = TYPE_ARG_TYPES (t1);
  	tree p2 = TYPE_ARG_TYPES (t2);
  	int len;
*************** common_type (tree t1, tree t2)
*** 364,391 ****
  	int i;
  
  	/* Save space: see if the result is identical to one of the args.  */
! 	if (valtype == TREE_TYPE (t1) && ! TYPE_ARG_TYPES (t2))
  	  return build_type_attribute_variant (t1, attributes);
! 	if (valtype == TREE_TYPE (t2) && ! TYPE_ARG_TYPES (t1))
  	  return build_type_attribute_variant (t2, attributes);
  
  	/* Simple way if one arg fails to specify argument types.  */
  	if (TYPE_ARG_TYPES (t1) == 0)
  	 {
! 	   t1 = build_function_type (valtype, TYPE_ARG_TYPES (t2));
! 	   return build_type_attribute_variant (t1, attributes);
  	 }
  	if (TYPE_ARG_TYPES (t2) == 0)
  	 {
  	   t1 = build_function_type (valtype, TYPE_ARG_TYPES (t1));
! 	   return build_type_attribute_variant (t1, attributes);
  	 }
  
  	/* If both args specify argument types, we must merge the two
  	   lists, argument by argument.  */
! 
! 	pushlevel (0);
! 	declare_parm_level ();
  
  	len = list_length (p1);
  	newargs = 0;
--- 321,350 ----
  	int i;
  
  	/* Save space: see if the result is identical to one of the args.  */
! 	if (valtype == TREE_TYPE (t1) && !TYPE_ARG_TYPES (t2))
  	  return build_type_attribute_variant (t1, attributes);
! 	if (valtype == TREE_TYPE (t2) && !TYPE_ARG_TYPES (t1))
  	  return build_type_attribute_variant (t2, attributes);
  
  	/* Simple way if one arg fails to specify argument types.  */
  	if (TYPE_ARG_TYPES (t1) == 0)
  	 {
! 	    t1 = build_function_type (valtype, TYPE_ARG_TYPES (t2));
! 	    t1 = build_type_attribute_variant (t1, attributes);
! 	    return qualify_type (t1, t2);
  	 }
  	if (TYPE_ARG_TYPES (t2) == 0)
  	 {
  	   t1 = build_function_type (valtype, TYPE_ARG_TYPES (t1));
! 	   t1 = build_type_attribute_variant (t1, attributes);
! 	   return qualify_type (t1, t2);
  	 }
  
  	/* If both args specify argument types, we must merge the two
  	   lists, argument by argument.  */
! 	/* Tell global_bindings_p to return false so that variable_size
! 	   doesn't abort on VLAs in parameter types.  */
! 	c_override_global_bindings_to_false = true;
  
  	len = list_length (p1);
  	newargs = 0;
*************** common_type (tree t1, tree t2)
*** 418,456 ****
  		&& TREE_VALUE (p1) != TREE_VALUE (p2))
  	      {
  		tree memb;
  		for (memb = TYPE_FIELDS (TREE_VALUE (p1));
  		     memb; memb = TREE_CHAIN (memb))
! 		  if (comptypes (TREE_TYPE (memb), TREE_VALUE (p2),
! 				 COMPARE_STRICT))
! 		    {
! 		      TREE_VALUE (n) = TREE_VALUE (p2);
! 		      if (pedantic)
! 			pedwarn ("function types not truly compatible in ISO C");
! 		      goto parm_done;
! 		    }
  	      }
  	    if (TREE_CODE (TREE_VALUE (p2)) == UNION_TYPE
  		&& TREE_VALUE (p2) != TREE_VALUE (p1))
  	      {
  		tree memb;
  		for (memb = TYPE_FIELDS (TREE_VALUE (p2));
  		     memb; memb = TREE_CHAIN (memb))
! 		  if (comptypes (TREE_TYPE (memb), TREE_VALUE (p1),
! 				 COMPARE_STRICT))
! 		    {
! 		      TREE_VALUE (n) = TREE_VALUE (p1);
! 		      if (pedantic)
! 			pedwarn ("function types not truly compatible in ISO C");
! 		      goto parm_done;
! 		    }
  	      }
! 	    TREE_VALUE (n) = common_type (TREE_VALUE (p1), TREE_VALUE (p2));
  	  parm_done: ;
  	  }
  
! 	poplevel (0, 0, 0);
! 
  	t1 = build_function_type (valtype, newargs);
  	/* ... falls through ...  */
        }
  
--- 377,435 ----
  		&& TREE_VALUE (p1) != TREE_VALUE (p2))
  	      {
  		tree memb;
+ 		tree mv2 = TREE_VALUE (p2);
+ 		if (mv2 && mv2 != error_mark_node
+ 		    && TREE_CODE (mv2) != ARRAY_TYPE)
+ 		  mv2 = TYPE_MAIN_VARIANT (mv2);
  		for (memb = TYPE_FIELDS (TREE_VALUE (p1));
  		     memb; memb = TREE_CHAIN (memb))
! 		  {
! 		    tree mv3 = TREE_TYPE (memb);
! 		    if (mv3 && mv3 != error_mark_node
! 			&& TREE_CODE (mv3) != ARRAY_TYPE)
! 		      mv3 = TYPE_MAIN_VARIANT (mv3);
! 		    if (comptypes (mv3, mv2))
! 		      {
! 			TREE_VALUE (n) = composite_type (TREE_TYPE (memb),
! 							 TREE_VALUE (p2));
! 			if (pedantic)
! 			  pedwarn ("function types not truly compatible in ISO C");
! 			goto parm_done;
! 		      }
! 		  }
  	      }
  	    if (TREE_CODE (TREE_VALUE (p2)) == UNION_TYPE
  		&& TREE_VALUE (p2) != TREE_VALUE (p1))
  	      {
  		tree memb;
+ 		tree mv1 = TREE_VALUE (p1);
+ 		if (mv1 && mv1 != error_mark_node
+ 		    && TREE_CODE (mv1) != ARRAY_TYPE)
+ 		  mv1 = TYPE_MAIN_VARIANT (mv1);
  		for (memb = TYPE_FIELDS (TREE_VALUE (p2));
  		     memb; memb = TREE_CHAIN (memb))
! 		  {
! 		    tree mv3 = TREE_TYPE (memb);
! 		    if (mv3 && mv3 != error_mark_node
! 			&& TREE_CODE (mv3) != ARRAY_TYPE)
! 		      mv3 = TYPE_MAIN_VARIANT (mv3);
! 		    if (comptypes (mv3, mv1))
! 		      {
! 			TREE_VALUE (n) = composite_type (TREE_TYPE (memb),
! 							 TREE_VALUE (p1));
! 			if (pedantic)
! 			  pedwarn ("function types not truly compatible in ISO C");
! 			goto parm_done;
! 		      }
! 		  }
  	      }
! 	    TREE_VALUE (n) = composite_type (TREE_VALUE (p1), TREE_VALUE (p2));
  	  parm_done: ;
  	  }
  
! 	c_override_global_bindings_to_false = false;
  	t1 = build_function_type (valtype, newargs);
+ 	t1 = qualify_type (t1, t2);
  	/* ... falls through ...  */
        }
  
*************** common_type (tree t1, tree t2)
*** 459,471 ****
      }
  
  }
  
  /* Return 1 if TYPE1 and TYPE2 are compatible types for assignment
     or various other operations.  Return 2 if they are compatible
     but a warning may be needed if you use them together.  */
  
  int
! comptypes (tree type1, tree type2, int flags)
  {
    tree t1 = type1;
    tree t2 = type2;
--- 438,639 ----
      }
  
  }
+ 
+ /* Return the type of a conditional expression between pointers to
+    possibly differently qualified versions of compatible types.
+ 
+    We assume that comp_target_types has already been done and returned
+    nonzero; if that isn't so, this may crash.  */
+ 
+ static tree
+ common_pointer_type (tree t1, tree t2)
+ {
+   tree attributes;
+   tree pointed_to_1, mv1;
+   tree pointed_to_2, mv2;
+   tree target;
+ 
+   /* Save time if the two types are the same.  */
+ 
+   if (t1 == t2) return t1;
+ 
+   /* If one type is nonsense, use the other.  */
+   if (t1 == error_mark_node)
+     return t2;
+   if (t2 == error_mark_node)
+     return t1;
+ 
+   gcc_assert (TREE_CODE (t1) == POINTER_TYPE
+  	      && TREE_CODE (t2) == POINTER_TYPE);
+ 
+   /* Merge the attributes.  */
+   attributes = targetm.merge_type_attributes (t1, t2);
+ 
+   /* Find the composite type of the target types, and combine the
+      qualifiers of the two types' targets.  Do not lose qualifiers on
+      array element types by taking the TYPE_MAIN_VARIANT.  */
+   mv1 = pointed_to_1 = TREE_TYPE (t1);
+   mv2 = pointed_to_2 = TREE_TYPE (t2);
+   if (TREE_CODE (mv1) != ARRAY_TYPE)
+     mv1 = TYPE_MAIN_VARIANT (pointed_to_1);
+   if (TREE_CODE (mv2) != ARRAY_TYPE)
+     mv2 = TYPE_MAIN_VARIANT (pointed_to_2);
+   target = composite_type (mv1, mv2);
+   t1 = build_pointer_type (c_build_qualified_type
+ 			   (target,
+ 			    TYPE_QUALS (pointed_to_1) |
+ 			    TYPE_QUALS (pointed_to_2)));
+   return build_type_attribute_variant (t1, attributes);
+ }
+ 
+ /* Return the common type for two arithmetic types under the usual
+    arithmetic conversions.  The default conversions have already been
+    applied, and enumerated types converted to their compatible integer
+    types.  The resulting type is unqualified and has no attributes.
+ 
+    This is the type for the result of most arithmetic operations
+    if the operands have the given two types.  */
+ 
+ static tree
+ c_common_type (tree t1, tree t2)
+ {
+   enum tree_code code1;
+   enum tree_code code2;
+ 
+   /* If one type is nonsense, use the other.  */
+   if (t1 == error_mark_node)
+     return t2;
+   if (t2 == error_mark_node)
+     return t1;
+ 
+   if (TYPE_QUALS (t1) != TYPE_UNQUALIFIED)
+     t1 = TYPE_MAIN_VARIANT (t1);
+ 
+   if (TYPE_QUALS (t2) != TYPE_UNQUALIFIED)
+     t2 = TYPE_MAIN_VARIANT (t2);
+ 
+   if (TYPE_ATTRIBUTES (t1) != NULL_TREE)
+     t1 = build_type_attribute_variant (t1, NULL_TREE);
+ 
+   if (TYPE_ATTRIBUTES (t2) != NULL_TREE)
+     t2 = build_type_attribute_variant (t2, NULL_TREE);
+ 
+   /* Save time if the two types are the same.  */
+ 
+   if (t1 == t2) return t1;
+ 
+   code1 = TREE_CODE (t1);
+   code2 = TREE_CODE (t2);
+ 
+   gcc_assert (code1 == VECTOR_TYPE || code1 == COMPLEX_TYPE
+ 	      || code1 == REAL_TYPE || code1 == INTEGER_TYPE);
+   gcc_assert (code2 == VECTOR_TYPE || code2 == COMPLEX_TYPE
+ 	      || code2 == REAL_TYPE || code2 == INTEGER_TYPE);
+ 
+   /* If one type is a vector type, return that type.  (How the usual
+      arithmetic conversions apply to the vector types extension is not
+      precisely specified.)  */
+   if (code1 == VECTOR_TYPE)
+     return t1;
+ 
+   if (code2 == VECTOR_TYPE)
+     return t2;
+ 
+   /* If one type is complex, form the common type of the non-complex
+      components, then make that complex.  Use T1 or T2 if it is the
+      required type.  */
+   if (code1 == COMPLEX_TYPE || code2 == COMPLEX_TYPE)
+     {
+       tree subtype1 = code1 == COMPLEX_TYPE ? TREE_TYPE (t1) : t1;
+       tree subtype2 = code2 == COMPLEX_TYPE ? TREE_TYPE (t2) : t2;
+       tree subtype = c_common_type (subtype1, subtype2);
+ 
+       if (code1 == COMPLEX_TYPE && TREE_TYPE (t1) == subtype)
+ 	return t1;
+       else if (code2 == COMPLEX_TYPE && TREE_TYPE (t2) == subtype)
+ 	return t2;
+       else
+ 	return build_complex_type (subtype);
+     }
+ 
+   /* If only one is real, use it as the result.  */
+ 
+   if (code1 == REAL_TYPE && code2 != REAL_TYPE)
+     return t1;
+ 
+   if (code2 == REAL_TYPE && code1 != REAL_TYPE)
+     return t2;
+ 
+   /* Both real or both integers; use the one with greater precision.  */
+ 
+   if (TYPE_PRECISION (t1) > TYPE_PRECISION (t2))
+     return t1;
+   else if (TYPE_PRECISION (t2) > TYPE_PRECISION (t1))
+     return t2;
+ 
+   /* Same precision.  Prefer long longs to longs to ints when the
+      same precision, following the C99 rules on integer type rank
+      (which are equivalent to the C90 rules for C90 types).  */
+ 
+   if (TYPE_MAIN_VARIANT (t1) == long_long_unsigned_type_node
+       || TYPE_MAIN_VARIANT (t2) == long_long_unsigned_type_node)
+     return long_long_unsigned_type_node;
+ 
+   if (TYPE_MAIN_VARIANT (t1) == long_long_integer_type_node
+       || TYPE_MAIN_VARIANT (t2) == long_long_integer_type_node)
+     {
+       if (TYPE_UNSIGNED (t1) || TYPE_UNSIGNED (t2))
+ 	return long_long_unsigned_type_node;
+       else
+         return long_long_integer_type_node;
+     }
+ 
+   if (TYPE_MAIN_VARIANT (t1) == long_unsigned_type_node
+       || TYPE_MAIN_VARIANT (t2) == long_unsigned_type_node)
+     return long_unsigned_type_node;
+ 
+   if (TYPE_MAIN_VARIANT (t1) == long_integer_type_node
+       || TYPE_MAIN_VARIANT (t2) == long_integer_type_node)
+     {
+       /* But preserve unsignedness from the other type,
+ 	 since long cannot hold all the values of an unsigned int.  */
+       if (TYPE_UNSIGNED (t1) || TYPE_UNSIGNED (t2))
+ 	return long_unsigned_type_node;
+       else
+ 	return long_integer_type_node;
+     }
+ 
+   /* Likewise, prefer long double to double even if same size.  */
+   if (TYPE_MAIN_VARIANT (t1) == long_double_type_node
+       || TYPE_MAIN_VARIANT (t2) == long_double_type_node)
+     return long_double_type_node;
+ 
+   /* Otherwise prefer the unsigned one.  */
+ 
+   if (TYPE_UNSIGNED (t1))
+     return t1;
+   else
+     return t2;
+ }
+ 
+ /* Wrapper around c_common_type that is used by c-common.c.  ENUMERAL_TYPEs
+    are allowed here and are converted to their compatible integer types.  */
+ tree
+ common_type (tree t1, tree t2)
+ {
+   if (TREE_CODE (t1) == ENUMERAL_TYPE)
+     t1 = c_common_type_for_size (TYPE_PRECISION (t1), 1);
+   if (TREE_CODE (t2) == ENUMERAL_TYPE)
+     t2 = c_common_type_for_size (TYPE_PRECISION (t2), 1);
+   return c_common_type (t1, t2);
+ }
  
  /* Return 1 if TYPE1 and TYPE2 are compatible types for assignment
     or various other operations.  Return 2 if they are compatible
     but a warning may be needed if you use them together.  */
  
  int
! comptypes (tree type1, tree type2)
  {
    tree t1 = type1;
    tree t2 = type2;
*************** comptypes (tree type1, tree type2, int f
*** 480,500 ****
    /* If either type is the internal version of sizetype, return the
       language version.  */
    if (TREE_CODE (t1) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t1)
!       && TYPE_DOMAIN (t1) != 0)
!     t1 = TYPE_DOMAIN (t1);
  
    if (TREE_CODE (t2) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t2)
!       && TYPE_DOMAIN (t2) != 0)
!     t2 = TYPE_DOMAIN (t2);
  
    /* Enumerated types are compatible with integer types, but this is
       not transitive: two enumerated types in the same translation unit
       are compatible with each other only if they are the same type.  */
  
    if (TREE_CODE (t1) == ENUMERAL_TYPE && TREE_CODE (t2) != ENUMERAL_TYPE)
!     t1 = c_common_type_for_size (TYPE_PRECISION (t1), TREE_UNSIGNED (t1));
    else if (TREE_CODE (t2) == ENUMERAL_TYPE && TREE_CODE (t1) != ENUMERAL_TYPE)
!     t2 = c_common_type_for_size (TYPE_PRECISION (t2), TREE_UNSIGNED (t2));
  
    if (t1 == t2)
      return 1;
--- 648,669 ----
    /* If either type is the internal version of sizetype, return the
       language version.  */
    if (TREE_CODE (t1) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t1)
!       && TYPE_ORIG_SIZE_TYPE (t1))
!     t1 = TYPE_ORIG_SIZE_TYPE (t1);
  
    if (TREE_CODE (t2) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t2)
!       && TYPE_ORIG_SIZE_TYPE (t2))
!     t2 = TYPE_ORIG_SIZE_TYPE (t2);
! 
  
    /* Enumerated types are compatible with integer types, but this is
       not transitive: two enumerated types in the same translation unit
       are compatible with each other only if they are the same type.  */
  
    if (TREE_CODE (t1) == ENUMERAL_TYPE && TREE_CODE (t2) != ENUMERAL_TYPE)
!     t1 = c_common_type_for_size (TYPE_PRECISION (t1), TYPE_UNSIGNED (t1));
    else if (TREE_CODE (t2) == ENUMERAL_TYPE && TREE_CODE (t1) != ENUMERAL_TYPE)
!     t2 = c_common_type_for_size (TYPE_PRECISION (t2), TYPE_UNSIGNED (t2));
  
    if (t1 == t2)
      return 1;
*************** comptypes (tree type1, tree type2, int f
*** 504,510 ****
    if (TREE_CODE (t1) != TREE_CODE (t2))
      return 0;
  
!   /* Qualifiers must match.  */
  
    if (TYPE_QUALS (t1) != TYPE_QUALS (t2))
      return 0;
--- 673,679 ----
    if (TREE_CODE (t1) != TREE_CODE (t2))
      return 0;
  
!   /* Qualifiers must match. C99 6.7.3p9 */
  
    if (TYPE_QUALS (t1) != TYPE_QUALS (t2))
      return 0;
*************** comptypes (tree type1, tree type2, int f
*** 513,523 ****
       definition.  Note that we already checked for equality of the type
       qualifiers (just above).  */
  
!   if (TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
      return 1;
  
    /* 1 if no need for warning yet, 2 if warning cause has been seen.  */
!   if (! (attrval = (*targetm.comp_type_attributes) (t1, t2)))
       return 0;
  
    /* 1 if no need for warning yet, 2 if warning cause has been seen.  */
--- 682,693 ----
       definition.  Note that we already checked for equality of the type
       qualifiers (just above).  */
  
!   if (TREE_CODE (t1) != ARRAY_TYPE
!       && TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
      return 1;
  
    /* 1 if no need for warning yet, 2 if warning cause has been seen.  */
!   if (!(attrval = targetm.comp_type_attributes (t1, t2)))
       return 0;
  
    /* 1 if no need for warning yet, 2 if warning cause has been seen.  */
*************** comptypes (tree type1, tree type2, int f
*** 530,541 ****
  	   protocol qualifiers may be involved.  */
        if (c_dialect_objc () && (val = objc_comptypes (t1, t2, 0)) >= 0)
  	break;
        val = (TREE_TYPE (t1) == TREE_TYPE (t2)
! 	     ? 1 : comptypes (TREE_TYPE (t1), TREE_TYPE (t2), flags));
        break;
  
      case FUNCTION_TYPE:
!       val = function_types_compatible_p (t1, t2, flags);
        break;
  
      case ARRAY_TYPE:
--- 700,715 ----
  	   protocol qualifiers may be involved.  */
        if (c_dialect_objc () && (val = objc_comptypes (t1, t2, 0)) >= 0)
  	break;
+       /* Do not remove mode or aliasing information.  */
+       if (TYPE_MODE (t1) != TYPE_MODE (t2)
+ 	  || TYPE_REF_CAN_ALIAS_ALL (t1) != TYPE_REF_CAN_ALIAS_ALL (t2))
+ 	break;
        val = (TREE_TYPE (t1) == TREE_TYPE (t2)
! 	     ? 1 : comptypes (TREE_TYPE (t1), TREE_TYPE (t2)));
        break;
  
      case FUNCTION_TYPE:
!       val = function_types_compatible_p (t1, t2);
        break;
  
      case ARRAY_TYPE:
*************** comptypes (tree type1, tree type2, int f
*** 548,568 ****
  
  	/* Target types must match incl. qualifiers.  */
  	if (TREE_TYPE (t1) != TREE_TYPE (t2)
! 	    && 0 == (val = comptypes (TREE_TYPE (t1), TREE_TYPE (t2),
! 				      flags)))
  	  return 0;
  
  	/* Sizes must match unless one is missing or variable.  */
  	if (d1 == 0 || d2 == 0 || d1 == d2)
  	  break;
  
! 	d1_zero = ! TYPE_MAX_VALUE (d1);
! 	d2_zero = ! TYPE_MAX_VALUE (d2);
  
! 	d1_variable = (! d1_zero
  		       && (TREE_CODE (TYPE_MIN_VALUE (d1)) != INTEGER_CST
  			   || TREE_CODE (TYPE_MAX_VALUE (d1)) != INTEGER_CST));
! 	d2_variable = (! d2_zero
  		       && (TREE_CODE (TYPE_MIN_VALUE (d2)) != INTEGER_CST
  			   || TREE_CODE (TYPE_MAX_VALUE (d2)) != INTEGER_CST));
  
--- 722,741 ----
  
  	/* Target types must match incl. qualifiers.  */
  	if (TREE_TYPE (t1) != TREE_TYPE (t2)
! 	    && 0 == (val = comptypes (TREE_TYPE (t1), TREE_TYPE (t2))))
  	  return 0;
  
  	/* Sizes must match unless one is missing or variable.  */
  	if (d1 == 0 || d2 == 0 || d1 == d2)
  	  break;
  
! 	d1_zero = !TYPE_MAX_VALUE (d1);
! 	d2_zero = !TYPE_MAX_VALUE (d2);
  
! 	d1_variable = (!d1_zero
  		       && (TREE_CODE (TYPE_MIN_VALUE (d1)) != INTEGER_CST
  			   || TREE_CODE (TYPE_MAX_VALUE (d1)) != INTEGER_CST));
! 	d2_variable = (!d2_zero
  		       && (TREE_CODE (TYPE_MIN_VALUE (d2)) != INTEGER_CST
  			   || TREE_CODE (TYPE_MAX_VALUE (d2)) != INTEGER_CST));
  
*************** comptypes (tree type1, tree type2, int f
*** 571,578 ****
  	if (d1_zero && d2_zero)
  	  break;
  	if (d1_zero || d2_zero
! 	    || ! tree_int_cst_equal (TYPE_MIN_VALUE (d1), TYPE_MIN_VALUE (d2))
! 	    || ! tree_int_cst_equal (TYPE_MAX_VALUE (d1), TYPE_MAX_VALUE (d2)))
  	  val = 0;
  
          break;
--- 744,751 ----
  	if (d1_zero && d2_zero)
  	  break;
  	if (d1_zero || d2_zero
! 	    || !tree_int_cst_equal (TYPE_MIN_VALUE (d1), TYPE_MIN_VALUE (d2))
! 	    || !tree_int_cst_equal (TYPE_MAX_VALUE (d1), TYPE_MAX_VALUE (d2)))
  	  val = 0;
  
          break;
*************** comptypes (tree type1, tree type2, int f
*** 587,599 ****
      case ENUMERAL_TYPE:
      case UNION_TYPE:
        if (val != 1 && !same_translation_unit_p (t1, t2))
! 	val = tagged_types_tu_compatible_p (t1, t2, flags);
        break;
  
      case VECTOR_TYPE:
!       /* The target might allow certain vector types to be compatible.  */
!       val = (*targetm.vector_opaque_p) (t1)
! 	|| (*targetm.vector_opaque_p) (t2);
        break;
  
      default:
--- 760,771 ----
      case ENUMERAL_TYPE:
      case UNION_TYPE:
        if (val != 1 && !same_translation_unit_p (t1, t2))
! 	val = tagged_types_tu_compatible_p (t1, t2);
        break;
  
      case VECTOR_TYPE:
!       val = TYPE_VECTOR_SUBPARTS (t1) == TYPE_VECTOR_SUBPARTS (t2)
! 	    && comptypes (TREE_TYPE (t1), TREE_TYPE (t2));
        break;
  
      default:
*************** static int
*** 613,625 ****
  comp_target_types (tree ttl, tree ttr, int reflexive)
  {
    int val;
  
    /* Give objc_comptypes a crack at letting these types through.  */
    if ((val = objc_comptypes (ttl, ttr, reflexive)) >= 0)
      return val;
  
!   val = comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (ttl)),
! 		   TYPE_MAIN_VARIANT (TREE_TYPE (ttr)), COMPARE_STRICT);
  
    if (val == 2 && pedantic)
      pedwarn ("types are not quite compatible");
--- 785,805 ----
  comp_target_types (tree ttl, tree ttr, int reflexive)
  {
    int val;
+   tree mvl, mvr;
  
    /* Give objc_comptypes a crack at letting these types through.  */
    if ((val = objc_comptypes (ttl, ttr, reflexive)) >= 0)
      return val;
  
!   /* Do not lose qualifiers on element types of array types that are
!      pointer targets by taking their TYPE_MAIN_VARIANT.  */
!   mvl = TREE_TYPE (ttl);
!   mvr = TREE_TYPE (ttr);
!   if (TREE_CODE (mvl) != ARRAY_TYPE)
!     mvl = TYPE_MAIN_VARIANT (mvl);
!   if (TREE_CODE (mvr) != ARRAY_TYPE)
!     mvr = TYPE_MAIN_VARIANT (mvr);
!   val = comptypes (mvl, mvr);
  
    if (val == 2 && pedantic)
      pedwarn ("types are not quite compatible");
*************** comp_target_types (tree ttl, tree ttr, i
*** 628,656 ****
  
  /* Subroutines of `comptypes'.  */
  
! /* Determine whether two types derive from the same translation unit.
!    If the CONTEXT chain ends in a null, that type's context is still
!    being parsed, so if two types have context chains ending in null,
     they're in the same translation unit.  */
! static int
  same_translation_unit_p (tree t1, tree t2)
  {
    while (t1 && TREE_CODE (t1) != TRANSLATION_UNIT_DECL)
      switch (TREE_CODE_CLASS (TREE_CODE (t1)))
        {
!       case 'd': t1 = DECL_CONTEXT (t1); break;
!       case 't': t1 = TYPE_CONTEXT (t1); break;
!       case 'b': t1 = BLOCK_SUPERCONTEXT (t1); break;
!       default: abort ();
        }
  
    while (t2 && TREE_CODE (t2) != TRANSLATION_UNIT_DECL)
      switch (TREE_CODE_CLASS (TREE_CODE (t2)))
        {
!       case 'd': t2 = DECL_CONTEXT (t1); break;
!       case 't': t2 = TYPE_CONTEXT (t2); break;
!       case 'b': t2 = BLOCK_SUPERCONTEXT (t2); break;
!       default: abort ();
        }
  
    return t1 == t2;
--- 808,842 ----
  
  /* Subroutines of `comptypes'.  */
  
! /* Determine whether two trees derive from the same translation unit.
!    If the CONTEXT chain ends in a null, that tree's context is still
!    being parsed, so if two trees have context chains ending in null,
     they're in the same translation unit.  */
! int
  same_translation_unit_p (tree t1, tree t2)
  {
    while (t1 && TREE_CODE (t1) != TRANSLATION_UNIT_DECL)
      switch (TREE_CODE_CLASS (TREE_CODE (t1)))
        {
!       case tcc_declaration:
! 	t1 = DECL_CONTEXT (t1); break;
!       case tcc_type:
! 	t1 = TYPE_CONTEXT (t1); break;
!       case tcc_exceptional:
! 	t1 = BLOCK_SUPERCONTEXT (t1); break;  /* assume block */
!       default: gcc_unreachable ();
        }
  
    while (t2 && TREE_CODE (t2) != TRANSLATION_UNIT_DECL)
      switch (TREE_CODE_CLASS (TREE_CODE (t2)))
        {
!       case tcc_declaration:
! 	t2 = DECL_CONTEXT (t2); break;
!       case tcc_type:
! 	t2 = TYPE_CONTEXT (t2); break;
!       case tcc_exceptional:
! 	t2 = BLOCK_SUPERCONTEXT (t2); break;  /* assume block */
!       default: gcc_unreachable ();
        }
  
    return t1 == t2;
*************** static const struct tagged_tu_seen * tag
*** 679,685 ****
     rules.  */
  
  static int
! tagged_types_tu_compatible_p (tree t1, tree t2, int flags)
  {
    tree s1, s2;
    bool needs_warning = false;
--- 865,871 ----
     rules.  */
  
  static int
! tagged_types_tu_compatible_p (tree t1, tree t2)
  {
    tree s1, s2;
    bool needs_warning = false;
*************** tagged_types_tu_compatible_p (tree t1, t
*** 687,693 ****
    /* We have to verify that the tags of the types are the same.  This
       is harder than it looks because this may be a typedef, so we have
       to go look at the original type.  It may even be a typedef of a
!      typedef...  */
    while (TYPE_NAME (t1)
  	 && TREE_CODE (TYPE_NAME (t1)) == TYPE_DECL
  	 && DECL_ORIGINAL_TYPE (TYPE_NAME (t1)))
--- 873,881 ----
    /* We have to verify that the tags of the types are the same.  This
       is harder than it looks because this may be a typedef, so we have
       to go look at the original type.  It may even be a typedef of a
!      typedef...
!      In the case of compiler-created builtin structs the TYPE_DECL
!      may be a dummy, with no DECL_ORIGINAL_TYPE.  Don't fault.  */
    while (TYPE_NAME (t1)
  	 && TREE_CODE (TYPE_NAME (t1)) == TYPE_DECL
  	 && DECL_ORIGINAL_TYPE (TYPE_NAME (t1)))
*************** tagged_types_tu_compatible_p (tree t1, t
*** 720,725 ****
--- 908,934 ----
      {
      case ENUMERAL_TYPE:
        {
+ 
+         /* Speed up the case where the type values are in the same order.  */
+         tree tv1 = TYPE_VALUES (t1);
+         tree tv2 = TYPE_VALUES (t2);
+ 
+         if (tv1 == tv2)
+           return 1;
+ 
+         for (;tv1 && tv2; tv1 = TREE_CHAIN (tv1), tv2 = TREE_CHAIN (tv2))
+           {
+             if (TREE_PURPOSE (tv1) != TREE_PURPOSE (tv2))
+               break;
+             if (simple_cst_equal (TREE_VALUE (tv1), TREE_VALUE (tv2)) != 1)
+               return 0;
+           }
+ 
+         if (tv1 == NULL_TREE && tv2 == NULL_TREE)
+           return 1;
+         if (tv1 == NULL_TREE || tv2 == NULL_TREE)
+           return 0;
+ 
  	if (list_length (TYPE_VALUES (t1)) != list_length (TYPE_VALUES (t2)))
  	  return 0;
  
*************** tagged_types_tu_compatible_p (tree t1, t
*** 749,759 ****
  	    tagged_tu_seen_base = &tts;
  
  	    if (DECL_NAME (s1) != NULL)
! 	      for (s2 = TYPE_VALUES (t2); s2; s2 = TREE_CHAIN (s2))
  		if (DECL_NAME (s1) == DECL_NAME (s2))
  		  {
  		    int result;
! 		    result = comptypes (TREE_TYPE (s1), TREE_TYPE (s2), flags);
  		    if (result == 0)
  		      break;
  		    if (result == 2)
--- 958,968 ----
  	    tagged_tu_seen_base = &tts;
  
  	    if (DECL_NAME (s1) != NULL)
! 	      for (s2 = TYPE_FIELDS (t2); s2; s2 = TREE_CHAIN (s2))
  		if (DECL_NAME (s1) == DECL_NAME (s2))
  		  {
  		    int result;
! 		    result = comptypes (TREE_TYPE (s1), TREE_TYPE (s2));
  		    if (result == 0)
  		      break;
  		    if (result == 2)
*************** tagged_types_tu_compatible_p (tree t1, t
*** 768,774 ****
  		    break;
  		  }
  	    tagged_tu_seen_base = tts.next;
! 	    if (! ok)
  	      return 0;
  	  }
  	return needs_warning ? 2 : 1;
--- 977,983 ----
  		    break;
  		  }
  	    tagged_tu_seen_base = tts.next;
! 	    if (!ok)
  	      return 0;
  	  }
  	return needs_warning ? 2 : 1;
*************** tagged_types_tu_compatible_p (tree t1, t
*** 791,797 ****
  	    if (TREE_CODE (s1) != TREE_CODE (s2)
  		|| DECL_NAME (s1) != DECL_NAME (s2))
  	      break;
! 	    result = comptypes (TREE_TYPE (s1), TREE_TYPE (s2), flags);
  	    if (result == 0)
  	      break;
  	    if (result == 2)
--- 1000,1006 ----
  	    if (TREE_CODE (s1) != TREE_CODE (s2)
  		|| DECL_NAME (s1) != DECL_NAME (s2))
  	      break;
! 	    result = comptypes (TREE_TYPE (s1), TREE_TYPE (s2));
  	    if (result == 0)
  	      break;
  	    if (result == 2)
*************** tagged_types_tu_compatible_p (tree t1, t
*** 809,815 ****
        }
  
      default:
!       abort ();
      }
  }
  
--- 1018,1024 ----
        }
  
      default:
!       gcc_unreachable ();
      }
  }
  
*************** tagged_types_tu_compatible_p (tree t1, t
*** 821,827 ****
     Otherwise, the argument types must match.  */
  
  static int
! function_types_compatible_p (tree f1, tree f2, int flags)
  {
    tree args1, args2;
    /* 1 if no need for warning yet, 2 if warning cause has been seen.  */
--- 1030,1036 ----
     Otherwise, the argument types must match.  */
  
  static int
! function_types_compatible_p (tree f1, tree f2)
  {
    tree args1, args2;
    /* 1 if no need for warning yet, 2 if warning cause has been seen.  */
*************** function_types_compatible_p (tree f1, tr
*** 832,848 ****
    ret1 = TREE_TYPE (f1);
    ret2 = TREE_TYPE (f2);
  
!   /* 'volatile' qualifiers on a function's return type mean the function
!      is noreturn.  */
!   if (pedantic && TYPE_VOLATILE (ret1) != TYPE_VOLATILE (ret2))
!     pedwarn ("function return types not compatible due to `volatile'");
    if (TYPE_VOLATILE (ret1))
      ret1 = build_qualified_type (TYPE_MAIN_VARIANT (ret1),
  				 TYPE_QUALS (ret1) & ~TYPE_QUAL_VOLATILE);
    if (TYPE_VOLATILE (ret2))
      ret2 = build_qualified_type (TYPE_MAIN_VARIANT (ret2),
  				 TYPE_QUALS (ret2) & ~TYPE_QUAL_VOLATILE);
!   val = comptypes (ret1, ret2, flags);
    if (val == 0)
      return 0;
  
--- 1041,1057 ----
    ret1 = TREE_TYPE (f1);
    ret2 = TREE_TYPE (f2);
  
!   /* 'volatile' qualifiers on a function's return type used to mean
!      the function is noreturn.  */
!   if (TYPE_VOLATILE (ret1) != TYPE_VOLATILE (ret2))
!     pedwarn ("function return types not compatible due to %<volatile%>");
    if (TYPE_VOLATILE (ret1))
      ret1 = build_qualified_type (TYPE_MAIN_VARIANT (ret1),
  				 TYPE_QUALS (ret1) & ~TYPE_QUAL_VOLATILE);
    if (TYPE_VOLATILE (ret2))
      ret2 = build_qualified_type (TYPE_MAIN_VARIANT (ret2),
  				 TYPE_QUALS (ret2) & ~TYPE_QUAL_VOLATILE);
!   val = comptypes (ret1, ret2);
    if (val == 0)
      return 0;
  
*************** function_types_compatible_p (tree f1, tr
*** 860,867 ****
  	 compare that with the other type's arglist.
  	 If they don't match, ask for a warning (but no error).  */
        if (TYPE_ACTUAL_ARG_TYPES (f1)
! 	  && 1 != type_lists_compatible_p (args2, TYPE_ACTUAL_ARG_TYPES (f1),
! 					   flags))
  	val = 2;
        return val;
      }
--- 1069,1075 ----
  	 compare that with the other type's arglist.
  	 If they don't match, ask for a warning (but no error).  */
        if (TYPE_ACTUAL_ARG_TYPES (f1)
! 	  && 1 != type_lists_compatible_p (args2, TYPE_ACTUAL_ARG_TYPES (f1)))
  	val = 2;
        return val;
      }
*************** function_types_compatible_p (tree f1, tr
*** 870,883 ****
        if (!self_promoting_args_p (args1))
  	return 0;
        if (TYPE_ACTUAL_ARG_TYPES (f2)
! 	  && 1 != type_lists_compatible_p (args1, TYPE_ACTUAL_ARG_TYPES (f2),
! 					   flags))
  	val = 2;
        return val;
      }
  
    /* Both types have argument lists: compare them and propagate results.  */
!   val1 = type_lists_compatible_p (args1, args2, flags);
    return val1 != 1 ? val1 : val;
  }
  
--- 1078,1090 ----
        if (!self_promoting_args_p (args1))
  	return 0;
        if (TYPE_ACTUAL_ARG_TYPES (f2)
! 	  && 1 != type_lists_compatible_p (args1, TYPE_ACTUAL_ARG_TYPES (f2)))
  	val = 2;
        return val;
      }
  
    /* Both types have argument lists: compare them and propagate results.  */
!   val1 = type_lists_compatible_p (args1, args2);
    return val1 != 1 ? val1 : val;
  }
  
*************** function_types_compatible_p (tree f1, tr
*** 886,892 ****
     or 2 for compatible with warning.  */
  
  static int
! type_lists_compatible_p (tree args1, tree args2, int flags)
  {
    /* 1 if no need for warning yet, 2 if warning cause has been seen.  */
    int val = 1;
--- 1093,1099 ----
     or 2 for compatible with warning.  */
  
  static int
! type_lists_compatible_p (tree args1, tree args2)
  {
    /* 1 if no need for warning yet, 2 if warning cause has been seen.  */
    int val = 1;
*************** type_lists_compatible_p (tree args1, tre
*** 894,958 ****
  
    while (1)
      {
        if (args1 == 0 && args2 == 0)
  	return val;
        /* If one list is shorter than the other,
  	 they fail to match.  */
        if (args1 == 0 || args2 == 0)
  	return 0;
        /* A null pointer instead of a type
  	 means there is supposed to be an argument
  	 but nothing is specified about what type it has.
  	 So match anything that self-promotes.  */
!       if (TREE_VALUE (args1) == 0)
  	{
! 	  if (c_type_promotes_to (TREE_VALUE (args2)) != TREE_VALUE (args2))
  	    return 0;
  	}
!       else if (TREE_VALUE (args2) == 0)
  	{
! 	  if (c_type_promotes_to (TREE_VALUE (args1)) != TREE_VALUE (args1))
  	    return 0;
  	}
        /* If one of the lists has an error marker, ignore this arg.  */
!       else if (TREE_CODE (TREE_VALUE (args1)) == ERROR_MARK
! 	       || TREE_CODE (TREE_VALUE (args2)) == ERROR_MARK)
  	;
!       else if (! (newval = comptypes (TYPE_MAIN_VARIANT (TREE_VALUE (args1)),
! 				      TYPE_MAIN_VARIANT (TREE_VALUE (args2)),
! 				      flags)))
  	{
  	  /* Allow  wait (union {union wait *u; int *i} *)
  	     and  wait (union wait *)  to be compatible.  */
! 	  if (TREE_CODE (TREE_VALUE (args1)) == UNION_TYPE
! 	      && (TYPE_NAME (TREE_VALUE (args1)) == 0
! 		  || TYPE_TRANSPARENT_UNION (TREE_VALUE (args1)))
! 	      && TREE_CODE (TYPE_SIZE (TREE_VALUE (args1))) == INTEGER_CST
! 	      && tree_int_cst_equal (TYPE_SIZE (TREE_VALUE (args1)),
! 				     TYPE_SIZE (TREE_VALUE (args2))))
  	    {
  	      tree memb;
! 	      for (memb = TYPE_FIELDS (TREE_VALUE (args1));
  		   memb; memb = TREE_CHAIN (memb))
! 		if (comptypes (TREE_TYPE (memb), TREE_VALUE (args2),
! 			       flags))
! 		  break;
  	      if (memb == 0)
  		return 0;
  	    }
! 	  else if (TREE_CODE (TREE_VALUE (args2)) == UNION_TYPE
! 		   && (TYPE_NAME (TREE_VALUE (args2)) == 0
! 		       || TYPE_TRANSPARENT_UNION (TREE_VALUE (args2)))
! 		   && TREE_CODE (TYPE_SIZE (TREE_VALUE (args2))) == INTEGER_CST
! 		   && tree_int_cst_equal (TYPE_SIZE (TREE_VALUE (args2)),
! 					  TYPE_SIZE (TREE_VALUE (args1))))
  	    {
  	      tree memb;
! 	      for (memb = TYPE_FIELDS (TREE_VALUE (args2));
  		   memb; memb = TREE_CHAIN (memb))
! 		if (comptypes (TREE_TYPE (memb), TREE_VALUE (args1),
! 			       flags))
! 		  break;
  	      if (memb == 0)
  		return 0;
  	    }
--- 1101,1180 ----
  
    while (1)
      {
+       tree a1, mv1, a2, mv2;
        if (args1 == 0 && args2 == 0)
  	return val;
        /* If one list is shorter than the other,
  	 they fail to match.  */
        if (args1 == 0 || args2 == 0)
  	return 0;
+       mv1 = a1 = TREE_VALUE (args1);
+       mv2 = a2 = TREE_VALUE (args2);
+       if (mv1 && mv1 != error_mark_node && TREE_CODE (mv1) != ARRAY_TYPE)
+ 	mv1 = TYPE_MAIN_VARIANT (mv1);
+       if (mv2 && mv2 != error_mark_node && TREE_CODE (mv2) != ARRAY_TYPE)
+ 	mv2 = TYPE_MAIN_VARIANT (mv2);
        /* A null pointer instead of a type
  	 means there is supposed to be an argument
  	 but nothing is specified about what type it has.
  	 So match anything that self-promotes.  */
!       if (a1 == 0)
  	{
! 	  if (c_type_promotes_to (a2) != a2)
  	    return 0;
  	}
!       else if (a2 == 0)
  	{
! 	  if (c_type_promotes_to (a1) != a1)
  	    return 0;
  	}
        /* If one of the lists has an error marker, ignore this arg.  */
!       else if (TREE_CODE (a1) == ERROR_MARK
! 	       || TREE_CODE (a2) == ERROR_MARK)
  	;
!       else if (!(newval = comptypes (mv1, mv2)))
  	{
  	  /* Allow  wait (union {union wait *u; int *i} *)
  	     and  wait (union wait *)  to be compatible.  */
! 	  if (TREE_CODE (a1) == UNION_TYPE
! 	      && (TYPE_NAME (a1) == 0
! 		  || TYPE_TRANSPARENT_UNION (a1))
! 	      && TREE_CODE (TYPE_SIZE (a1)) == INTEGER_CST
! 	      && tree_int_cst_equal (TYPE_SIZE (a1),
! 				     TYPE_SIZE (a2)))
  	    {
  	      tree memb;
! 	      for (memb = TYPE_FIELDS (a1);
  		   memb; memb = TREE_CHAIN (memb))
! 		{
! 		  tree mv3 = TREE_TYPE (memb);
! 		  if (mv3 && mv3 != error_mark_node
! 		      && TREE_CODE (mv3) != ARRAY_TYPE)
! 		    mv3 = TYPE_MAIN_VARIANT (mv3);
! 		  if (comptypes (mv3, mv2))
! 		    break;
! 		}
  	      if (memb == 0)
  		return 0;
  	    }
! 	  else if (TREE_CODE (a2) == UNION_TYPE
! 		   && (TYPE_NAME (a2) == 0
! 		       || TYPE_TRANSPARENT_UNION (a2))
! 		   && TREE_CODE (TYPE_SIZE (a2)) == INTEGER_CST
! 		   && tree_int_cst_equal (TYPE_SIZE (a2),
! 					  TYPE_SIZE (a1)))
  	    {
  	      tree memb;
! 	      for (memb = TYPE_FIELDS (a2);
  		   memb; memb = TREE_CHAIN (memb))
! 		{
! 		  tree mv3 = TREE_TYPE (memb);
! 		  if (mv3 && mv3 != error_mark_node
! 		      && TREE_CODE (mv3) != ARRAY_TYPE)
! 		    mv3 = TYPE_MAIN_VARIANT (mv3);
! 		  if (comptypes (mv3, mv1))
! 		    break;
! 		}
  	      if (memb == 0)
  		return 0;
  	    }
*************** type_lists_compatible_p (tree args1, tre
*** 971,977 ****
  
  /* Compute the size to increment a pointer by.  */
  
! tree
  c_size_in_bytes (tree type)
  {
    enum tree_code code = TREE_CODE (type);
--- 1193,1199 ----
  
  /* Compute the size to increment a pointer by.  */
  
! static tree
  c_size_in_bytes (tree type)
  {
    enum tree_code code = TREE_CODE (type);
*************** tree
*** 997,1005 ****
  decl_constant_value (tree decl)
  {
    if (/* Don't change a variable array bound or initial value to a constant
! 	 in a place where a variable is invalid.  */
        current_function_decl != 0
!       && ! TREE_THIS_VOLATILE (decl)
        && TREE_READONLY (decl)
        && DECL_INITIAL (decl) != 0
        && TREE_CODE (DECL_INITIAL (decl)) != ERROR_MARK
--- 1219,1229 ----
  decl_constant_value (tree decl)
  {
    if (/* Don't change a variable array bound or initial value to a constant
! 	 in a place where a variable is invalid.  Note that DECL_INITIAL
! 	 isn't valid for a PARM_DECL.  */
        current_function_decl != 0
!       && TREE_CODE (decl) != PARM_DECL
!       && !TREE_THIS_VOLATILE (decl)
        && TREE_READONLY (decl)
        && DECL_INITIAL (decl) != 0
        && TREE_CODE (DECL_INITIAL (decl)) != ERROR_MARK
*************** default_function_array_conversion (tree 
*** 1058,1066 ****
        exp = TREE_OPERAND (exp, 0);
      }
  
!   /* Preserve the original expression code.  */
!   if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (exp))))
!     C_SET_EXP_ORIGINAL_CODE (exp, C_EXP_ORIGINAL_CODE (orig_exp));
  
    if (code == FUNCTION_TYPE)
      {
--- 1282,1289 ----
        exp = TREE_OPERAND (exp, 0);
      }
  
!   if (TREE_NO_WARNING (orig_exp))
!     TREE_NO_WARNING (exp) = 1;
  
    if (code == FUNCTION_TYPE)
      {
*************** default_function_array_conversion (tree 
*** 1075,1081 ****
        int volatilep = 0;
        int lvalue_array_p;
  
!       if (TREE_CODE_CLASS (TREE_CODE (exp)) == 'r' || DECL_P (exp))
  	{
  	  constp = TREE_READONLY (exp);
  	  volatilep = TREE_THIS_VOLATILE (exp);
--- 1298,1304 ----
        int volatilep = 0;
        int lvalue_array_p;
  
!       if (REFERENCE_CLASS_P (exp) || DECL_P (exp))
  	{
  	  constp = TREE_READONLY (exp);
  	  volatilep = TREE_THIS_VOLATILE (exp);
*************** default_function_array_conversion (tree 
*** 1089,1102 ****
  				    | (volatilep * TYPE_QUAL_VOLATILE));
  
        if (TREE_CODE (exp) == INDIRECT_REF)
! 	return convert (TYPE_POINTER_TO (restype),
  			TREE_OPERAND (exp, 0));
  
        if (TREE_CODE (exp) == COMPOUND_EXPR)
  	{
  	  tree op1 = default_conversion (TREE_OPERAND (exp, 1));
! 	  return build (COMPOUND_EXPR, TREE_TYPE (op1),
! 			TREE_OPERAND (exp, 0), op1);
  	}
  
        lvalue_array_p = !not_lvalue && lvalue_p (exp);
--- 1312,1325 ----
  				    | (volatilep * TYPE_QUAL_VOLATILE));
  
        if (TREE_CODE (exp) == INDIRECT_REF)
! 	return convert (build_pointer_type (restype),
  			TREE_OPERAND (exp, 0));
  
        if (TREE_CODE (exp) == COMPOUND_EXPR)
  	{
  	  tree op1 = default_conversion (TREE_OPERAND (exp, 1));
! 	  return build2 (COMPOUND_EXPR, TREE_TYPE (op1),
! 			 TREE_OPERAND (exp, 0), op1);
  	}
  
        lvalue_array_p = !not_lvalue && lvalue_p (exp);
*************** default_function_array_conversion (tree 
*** 1113,1126 ****
  
        if (TREE_CODE (exp) == VAR_DECL)
  	{
! 	  /* ??? This is not really quite correct
! 	     in that the type of the operand of ADDR_EXPR
! 	     is not the target type of the type of the ADDR_EXPR itself.
! 	     Question is, can this lossage be avoided?  */
  	  adr = build1 (ADDR_EXPR, ptrtype, exp);
  	  if (!c_mark_addressable (exp))
  	    return error_mark_node;
- 	  TREE_CONSTANT (adr) = staticp (exp);
  	  TREE_SIDE_EFFECTS (adr) = 0;   /* Default would be, same as EXP.  */
  	  return adr;
  	}
--- 1336,1348 ----
  
        if (TREE_CODE (exp) == VAR_DECL)
  	{
! 	  /* We are making an ADDR_EXPR of ptrtype.  This is a valid
! 	     ADDR_EXPR because it's the best way of representing what
! 	     happens in C when we take the address of an array and place
! 	     it in a pointer to the element type.  */
  	  adr = build1 (ADDR_EXPR, ptrtype, exp);
  	  if (!c_mark_addressable (exp))
  	    return error_mark_node;
  	  TREE_SIDE_EFFECTS (adr) = 0;   /* Default would be, same as EXP.  */
  	  return adr;
  	}
*************** default_conversion (tree exp)
*** 1171,1179 ****
  	     && TREE_TYPE (TREE_OPERAND (exp, 0)) == TREE_TYPE (exp)))
      exp = TREE_OPERAND (exp, 0);
  
!   /* Preserve the original expression code.  */
!   if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (exp))))
!     C_SET_EXP_ORIGINAL_CODE (exp, C_EXP_ORIGINAL_CODE (orig_exp));
  
    /* Normally convert enums to int,
       but convert wide enums to something wider.  */
--- 1393,1400 ----
  	     && TREE_TYPE (TREE_OPERAND (exp, 0)) == TREE_TYPE (exp)))
      exp = TREE_OPERAND (exp, 0);
  
!   if (TREE_NO_WARNING (orig_exp))
!     TREE_NO_WARNING (exp) = 1;
  
    /* Normally convert enums to int,
       but convert wide enums to something wider.  */
*************** default_conversion (tree exp)
*** 1183,1189 ****
  					  TYPE_PRECISION (integer_type_node)),
  				     ((TYPE_PRECISION (type)
  				       >= TYPE_PRECISION (integer_type_node))
! 				      && TREE_UNSIGNED (type)));
  
        return convert (type, exp);
      }
--- 1404,1410 ----
  					  TYPE_PRECISION (integer_type_node)),
  				     ((TYPE_PRECISION (type)
  				       >= TYPE_PRECISION (integer_type_node))
! 				      && TYPE_UNSIGNED (type)));
  
        return convert (type, exp);
      }
*************** default_conversion (tree exp)
*** 1199,1205 ****
    if (c_promoting_integer_type_p (type))
      {
        /* Preserve unsignedness if not really getting any wider.  */
!       if (TREE_UNSIGNED (type)
  	  && TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node))
  	return convert (unsigned_type_node, exp);
  
--- 1420,1426 ----
    if (c_promoting_integer_type_p (type))
      {
        /* Preserve unsignedness if not really getting any wider.  */
!       if (TYPE_UNSIGNED (type)
  	  && TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node))
  	return convert (unsigned_type_node, exp);
  
*************** lookup_field (tree decl, tree component)
*** 1234,1240 ****
       find the element.  Otherwise, do a linear search.  TYPE_LANG_SPECIFIC
       will always be set for structures which have many elements.  */
  
!   if (TYPE_LANG_SPECIFIC (type))
      {
        int bot, top, half;
        tree *field_array = &TYPE_LANG_SPECIFIC (type)->s->elts[0];
--- 1455,1461 ----
       find the element.  Otherwise, do a linear search.  TYPE_LANG_SPECIFIC
       will always be set for structures which have many elements.  */
  
!   if (TYPE_LANG_SPECIFIC (type) && TYPE_LANG_SPECIFIC (type)->s)
      {
        int bot, top, half;
        tree *field_array = &TYPE_LANG_SPECIFIC (type)->s->elts[0];
*************** build_component_ref (tree datum, tree co
*** 1320,1325 ****
--- 1541,1549 ----
    tree field = NULL;
    tree ref;
  
+   if (!objc_is_public (datum, component))
+     return error_mark_node;
+ 
    /* See if there is a field or component with name COMPONENT.  */
  
    if (code == RECORD_TYPE || code == UNION_TYPE)
*************** build_component_ref (tree datum, tree co
*** 1334,1341 ****
  
        if (!field)
  	{
! 	  error ("%s has no member named `%s'",
! 		 code == RECORD_TYPE ? "structure" : "union",
  		 IDENTIFIER_POINTER (component));
  	  return error_mark_node;
  	}
--- 1558,1564 ----
  
        if (!field)
  	{
! 	  error ("%qT has no member named %qs", type,
  		 IDENTIFIER_POINTER (component));
  	  return error_mark_node;
  	}
*************** build_component_ref (tree datum, tree co
*** 1352,1358 ****
  	  if (TREE_TYPE (subdatum) == error_mark_node)
  	    return error_mark_node;
  
! 	  ref = build (COMPONENT_REF, TREE_TYPE (subdatum), datum, subdatum);
  	  if (TREE_READONLY (datum) || TREE_READONLY (subdatum))
  	    TREE_READONLY (ref) = 1;
  	  if (TREE_THIS_VOLATILE (datum) || TREE_THIS_VOLATILE (subdatum))
--- 1575,1582 ----
  	  if (TREE_TYPE (subdatum) == error_mark_node)
  	    return error_mark_node;
  
! 	  ref = build3 (COMPONENT_REF, TREE_TYPE (subdatum), datum, subdatum,
! 			NULL_TREE);
  	  if (TREE_READONLY (datum) || TREE_READONLY (subdatum))
  	    TREE_READONLY (ref) = 1;
  	  if (TREE_THIS_VOLATILE (datum) || TREE_THIS_VOLATILE (subdatum))
*************** build_component_ref (tree datum, tree co
*** 1370,1376 ****
        return ref;
      }
    else if (code != ERROR_MARK)
!     error ("request for member `%s' in something not a structure or union",
  	    IDENTIFIER_POINTER (component));
  
    return error_mark_node;
--- 1594,1600 ----
        return ref;
      }
    else if (code != ERROR_MARK)
!     error ("request for member %qs in something not a structure or union",
  	    IDENTIFIER_POINTER (component));
  
    return error_mark_node;
*************** build_indirect_ref (tree ptr, const char
*** 1395,1401 ****
        else
  	{
  	  tree t = TREE_TYPE (type);
! 	  tree ref = build1 (INDIRECT_REF, TYPE_MAIN_VARIANT (t), pointer);
  
  	  if (!COMPLETE_OR_VOID_TYPE_P (t) && TREE_CODE (t) != ARRAY_TYPE)
  	    {
--- 1619,1630 ----
        else
  	{
  	  tree t = TREE_TYPE (type);
! 	  tree mvt = t;
! 	  tree ref;
! 
! 	  if (TREE_CODE (mvt) != ARRAY_TYPE)
! 	    mvt = TYPE_MAIN_VARIANT (mvt);
! 	  ref = build1 (INDIRECT_REF, mvt, pointer);
  
  	  if (!COMPLETE_OR_VOID_TYPE_P (t) && TREE_CODE (t) != ARRAY_TYPE)
  	    {
*************** build_indirect_ref (tree ptr, const char
*** 1403,1409 ****
  	      return error_mark_node;
  	    }
  	  if (VOID_TYPE_P (t) && skip_evaluation == 0)
! 	    warning ("dereferencing `void *' pointer");
  
  	  /* We *must* set TREE_READONLY when dereferencing a pointer to const,
  	     so that we get the proper error message if the result is used
--- 1632,1638 ----
  	      return error_mark_node;
  	    }
  	  if (VOID_TYPE_P (t) && skip_evaluation == 0)
! 	    warning ("dereferencing %<void *%> pointer");
  
  	  /* We *must* set TREE_READONLY when dereferencing a pointer to const,
  	     so that we get the proper error message if the result is used
*************** build_indirect_ref (tree ptr, const char
*** 1420,1426 ****
  	}
      }
    else if (TREE_CODE (pointer) != ERROR_MARK)
!     error ("invalid type argument of `%s'", errorstring);
    return error_mark_node;
  }
  
--- 1649,1655 ----
  	}
      }
    else if (TREE_CODE (pointer) != ERROR_MARK)
!     error ("invalid type argument of %qs", errorstring);
    return error_mark_node;
  }
  
*************** build_indirect_ref (tree ptr, const char
*** 1436,1475 ****
  tree
  build_array_ref (tree array, tree index)
  {
!   if (index == 0)
!     {
!       error ("subscript missing in array reference");
!       return error_mark_node;
!     }
! 
    if (TREE_TYPE (array) == error_mark_node
        || TREE_TYPE (index) == error_mark_node)
      return error_mark_node;
  
!   if (TREE_CODE (TREE_TYPE (array)) == ARRAY_TYPE
!       && TREE_CODE (array) != INDIRECT_REF)
      {
!       tree rval, type;
! 
!       /* Subscripting with type char is likely to lose
! 	 on a machine where chars are signed.
! 	 So warn on any machine, but optionally.
! 	 Don't warn for unsigned char since that type is safe.
! 	 Don't warn for signed char because anyone who uses that
! 	 must have done so deliberately.  */
!       if (warn_char_subscripts
! 	  && TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node)
! 	warning ("array subscript has type `char'");
! 
!       /* Apply default promotions *after* noticing character types.  */
!       index = default_conversion (index);
! 
!       /* Require integer *after* promotion, for sake of enums.  */
!       if (TREE_CODE (TREE_TYPE (index)) != INTEGER_TYPE)
  	{
! 	  error ("array subscript is not an integer");
  	  return error_mark_node;
  	}
  
        /* An array that is indexed by a non-constant
  	 cannot be stored in a register; we must be able to do
--- 1665,1722 ----
  tree
  build_array_ref (tree array, tree index)
  {
!   bool swapped = false;
    if (TREE_TYPE (array) == error_mark_node
        || TREE_TYPE (index) == error_mark_node)
      return error_mark_node;
  
!   if (TREE_CODE (TREE_TYPE (array)) != ARRAY_TYPE
!       && TREE_CODE (TREE_TYPE (array)) != POINTER_TYPE)
      {
!       tree temp;
!       if (TREE_CODE (TREE_TYPE (index)) != ARRAY_TYPE
! 	  && TREE_CODE (TREE_TYPE (index)) != POINTER_TYPE)
  	{
! 	  error ("subscripted value is neither array nor pointer");
  	  return error_mark_node;
  	}
+       temp = array;
+       array = index;
+       index = temp;
+       swapped = true;
+     }
+ 
+   if (!INTEGRAL_TYPE_P (TREE_TYPE (index)))
+     {
+       error ("array subscript is not an integer");
+       return error_mark_node;
+     }
+ 
+   if (TREE_CODE (TREE_TYPE (TREE_TYPE (array))) == FUNCTION_TYPE)
+     {
+       error ("subscripted value is pointer to function");
+       return error_mark_node;
+     }
+ 
+   /* Subscripting with type char is likely to lose on a machine where
+      chars are signed.  So warn on any machine, but optionally.  Don't
+      warn for unsigned char since that type is safe.  Don't warn for
+      signed char because anyone who uses that must have done so
+      deliberately.  ??? Existing practice has also been to warn only
+      when the char index is syntactically the index, not for
+      char[array].  */
+   if (warn_char_subscripts && !swapped
+       && TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node)
+     warning ("array subscript has type %<char%>");
+ 
+   /* Apply default promotions *after* noticing character types.  */
+   index = default_conversion (index);
+ 
+   gcc_assert (TREE_CODE (TREE_TYPE (index)) == INTEGER_TYPE);
+ 
+   if (TREE_CODE (TREE_TYPE (array)) == ARRAY_TYPE)
+     {
+       tree rval, type;
  
        /* An array that is indexed by a non-constant
  	 cannot be stored in a register; we must be able to do
*************** build_array_ref (tree array, tree index)
*** 1487,1494 ****
  	 would get a crash in store_bit_field/extract_bit_field when trying
  	 to access a non-existent part of the register.  */
        if (TREE_CODE (index) == INTEGER_CST
! 	  && TYPE_VALUES (TREE_TYPE (array))
! 	  && ! int_fits_type_p (index, TYPE_VALUES (TREE_TYPE (array))))
  	{
  	  if (!c_mark_addressable (array))
  	    return error_mark_node;
--- 1734,1741 ----
  	 would get a crash in store_bit_field/extract_bit_field when trying
  	 to access a non-existent part of the register.  */
        if (TREE_CODE (index) == INTEGER_CST
! 	  && TYPE_DOMAIN (TREE_TYPE (array))
! 	  && !int_fits_type_p (index, TYPE_DOMAIN (TREE_TYPE (array))))
  	{
  	  if (!c_mark_addressable (array))
  	    return error_mark_node;
*************** build_array_ref (tree array, tree index)
*** 1499,1512 ****
  	  tree foo = array;
  	  while (TREE_CODE (foo) == COMPONENT_REF)
  	    foo = TREE_OPERAND (foo, 0);
! 	  if (TREE_CODE (foo) == VAR_DECL && DECL_REGISTER (foo))
! 	    pedwarn ("ISO C forbids subscripting `register' array");
! 	  else if (! flag_isoc99 && ! lvalue_p (foo))
  	    pedwarn ("ISO C90 forbids subscripting non-lvalue array");
  	}
  
!       type = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (array)));
!       rval = build (ARRAY_REF, type, array, index);
        /* Array ref is const/volatile if the array elements are
           or if the array is.  */
        TREE_READONLY (rval)
--- 1746,1761 ----
  	  tree foo = array;
  	  while (TREE_CODE (foo) == COMPONENT_REF)
  	    foo = TREE_OPERAND (foo, 0);
! 	  if (TREE_CODE (foo) == VAR_DECL && C_DECL_REGISTER (foo))
! 	    pedwarn ("ISO C forbids subscripting %<register%> array");
! 	  else if (!flag_isoc99 && !lvalue_p (foo))
  	    pedwarn ("ISO C90 forbids subscripting non-lvalue array");
  	}
  
!       type = TREE_TYPE (TREE_TYPE (array));
!       if (TREE_CODE (type) != ARRAY_TYPE)
! 	type = TYPE_MAIN_VARIANT (type);
!       rval = build4 (ARRAY_REF, type, array, index, NULL_TREE, NULL_TREE);
        /* Array ref is const/volatile if the array elements are
           or if the array is.  */
        TREE_READONLY (rval)
*************** build_array_ref (tree array, tree index)
*** 1524,1568 ****
  	    | TREE_THIS_VOLATILE (array));
        return require_complete_type (fold (rval));
      }
  
!   {
!     tree ar = default_conversion (array);
!     tree ind = default_conversion (index);
! 
!     /* Do the same warning check as above, but only on the part that's
!        syntactically the index and only if it is also semantically
!        the index.  */
!     if (warn_char_subscripts
! 	&& TREE_CODE (TREE_TYPE (index)) == INTEGER_TYPE
! 	&& TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node)
!       warning ("subscript has type `char'");
! 
!     /* Put the integer in IND to simplify error checking.  */
!     if (TREE_CODE (TREE_TYPE (ar)) == INTEGER_TYPE)
!       {
! 	tree temp = ar;
! 	ar = ind;
! 	ind = temp;
!       }
! 
!     if (ar == error_mark_node)
!       return ar;
  
!     if (TREE_CODE (TREE_TYPE (ar)) != POINTER_TYPE
! 	|| TREE_CODE (TREE_TYPE (TREE_TYPE (ar))) == FUNCTION_TYPE)
!       {
! 	error ("subscripted value is neither array nor pointer");
! 	return error_mark_node;
!       }
!     if (TREE_CODE (TREE_TYPE (ind)) != INTEGER_TYPE)
!       {
! 	error ("array subscript is not an integer");
! 	return error_mark_node;
!       }
  
!     return build_indirect_ref (build_binary_op (PLUS_EXPR, ar, ind, 0),
! 			       "array indexing");
!   }
  }
  
  /* Build an external reference to identifier ID.  FUN indicates
--- 1773,1791 ----
  	    | TREE_THIS_VOLATILE (array));
        return require_complete_type (fold (rval));
      }
+   else
+     {
+       tree ar = default_conversion (array);
  
!       if (ar == error_mark_node)
! 	return ar;
  
!       gcc_assert (TREE_CODE (TREE_TYPE (ar)) == POINTER_TYPE);
!       gcc_assert (TREE_CODE (TREE_TYPE (TREE_TYPE (ar))) != FUNCTION_TYPE);
  
!       return build_indirect_ref (build_binary_op (PLUS_EXPR, ar, index, 0),
! 				 "array indexing");
!     }
  }
  
  /* Build an external reference to identifier ID.  FUN indicates
*************** build_external_ref (tree id, int fun)
*** 1572,1595 ****
  {
    tree ref;
    tree decl = lookup_name (id);
!   tree objc_ivar = lookup_objc_ivar (id);
  
    if (decl && decl != error_mark_node)
!     {
!       /* Properly declared variable or function reference.  */
!       if (!objc_ivar)
! 	ref = decl;
!       else if (decl != objc_ivar && !DECL_FILE_SCOPE_P (decl))
! 	{
! 	  warning ("local declaration of `%s' hides instance variable",
! 		   IDENTIFIER_POINTER (id));
! 	  ref = decl;
! 	}
!       else
! 	ref = objc_ivar;
!     }
!   else if (objc_ivar)
!     ref = objc_ivar;
    else if (fun)
      /* Implicit function declaration.  */
      ref = implicitly_declare (id);
--- 1795,1807 ----
  {
    tree ref;
    tree decl = lookup_name (id);
! 
!   /* In Objective-C, an instance variable (ivar) may be preferred to
!      whatever lookup_name() found.  */
!   decl = objc_lookup_ivar (decl, id);
  
    if (decl && decl != error_mark_node)
!     ref = decl;
    else if (fun)
      /* Implicit function declaration.  */
      ref = implicitly_declare (id);
*************** build_external_ref (tree id, int fun)
*** 1613,1622 ****
--- 1825,1845 ----
      assemble_external (ref);
    TREE_USED (ref) = 1;
  
+   if (TREE_CODE (ref) == FUNCTION_DECL && !in_alignof)
+     {
+       if (!in_sizeof && !in_typeof)
+ 	C_DECL_USED (ref) = 1;
+       else if (DECL_INITIAL (ref) == 0
+ 	       && DECL_EXTERNAL (ref)
+ 	       && !TREE_PUBLIC (ref))
+ 	record_maybe_used_decl (ref);
+     }
+ 
    if (TREE_CODE (ref) == CONST_DECL)
      {
        ref = DECL_INITIAL (ref);
        TREE_CONSTANT (ref) = 1;
+       TREE_INVARIANT (ref) = 1;
      }
    else if (current_function_decl != 0
  	   && !DECL_FILE_SCOPE_P (current_function_decl)
*************** build_external_ref (tree id, int fun)
*** 1633,1638 ****
--- 1856,1950 ----
    return ref;
  }
  
+ /* Record details of decls possibly used inside sizeof or typeof.  */
+ struct maybe_used_decl
+ {
+   /* The decl.  */
+   tree decl;
+   /* The level seen at (in_sizeof + in_typeof).  */
+   int level;
+   /* The next one at this level or above, or NULL.  */
+   struct maybe_used_decl *next;
+ };
+ 
+ static struct maybe_used_decl *maybe_used_decls;
+ 
+ /* Record that DECL, an undefined static function reference seen
+    inside sizeof or typeof, might be used if the operand of sizeof is
+    a VLA type or the operand of typeof is a variably modified
+    type.  */
+ 
+ static void
+ record_maybe_used_decl (tree decl)
+ {
+   struct maybe_used_decl *t = XOBNEW (&parser_obstack, struct maybe_used_decl);
+   t->decl = decl;
+   t->level = in_sizeof + in_typeof;
+   t->next = maybe_used_decls;
+   maybe_used_decls = t;
+ }
+ 
+ /* Pop the stack of decls possibly used inside sizeof or typeof.  If
+    USED is false, just discard them.  If it is true, mark them used
+    (if no longer inside sizeof or typeof) or move them to the next
+    level up (if still inside sizeof or typeof).  */
+ 
+ void
+ pop_maybe_used (bool used)
+ {
+   struct maybe_used_decl *p = maybe_used_decls;
+   int cur_level = in_sizeof + in_typeof;
+   while (p && p->level > cur_level)
+     {
+       if (used)
+ 	{
+ 	  if (cur_level == 0)
+ 	    C_DECL_USED (p->decl) = 1;
+ 	  else
+ 	    p->level = cur_level;
+ 	}
+       p = p->next;
+     }
+   if (!used || cur_level == 0)
+     maybe_used_decls = p;
+ }
+ 
+ /* Return the result of sizeof applied to EXPR.  */
+ 
+ struct c_expr
+ c_expr_sizeof_expr (struct c_expr expr)
+ {
+   struct c_expr ret;
+   if (expr.value == error_mark_node)
+     {
+       ret.value = error_mark_node;
+       ret.original_code = ERROR_MARK;
+       pop_maybe_used (false);
+     }
+   else
+     {
+       ret.value = c_sizeof (TREE_TYPE (expr.value));
+       ret.original_code = ERROR_MARK;
+       pop_maybe_used (C_TYPE_VARIABLE_SIZE (TREE_TYPE (expr.value)));
+     }
+   return ret;
+ }
+ 
+ /* Return the result of sizeof applied to T, a structure for the type
+    name passed to sizeof (rather than the type itself).  */
+ 
+ struct c_expr
+ c_expr_sizeof_type (struct c_type_name *t)
+ {
+   tree type;
+   struct c_expr ret;
+   type = groktypename (t);
+   ret.value = c_sizeof (type);
+   ret.original_code = ERROR_MARK;
+   pop_maybe_used (C_TYPE_VARIABLE_SIZE (type));
+   return ret;
+ }
+ 
  /* Build a function call to function FUNCTION with parameters PARAMS.
     PARAMS is a list--a chain of TREE_LIST nodes--in which the
     TREE_VALUE of each node is a parameter-expression.
*************** build_function_call (tree function, tree
*** 1674,1680 ****
    if (!(TREE_CODE (fntype) == POINTER_TYPE
  	&& TREE_CODE (TREE_TYPE (fntype)) == FUNCTION_TYPE))
      {
!       error ("called object is not a function");
        return error_mark_node;
      }
  
--- 1986,1992 ----
    if (!(TREE_CODE (fntype) == POINTER_TYPE
  	&& TREE_CODE (TREE_TYPE (fntype)) == FUNCTION_TYPE))
      {
!       error ("called object %qE is not a function", function);
        return error_mark_node;
      }
  
*************** build_function_call (tree function, tree
*** 1693,1703 ****
       ??? This doesn't work for Objective-C because objc_comptypes
       refuses to compare function prototypes, yet the compiler appears
       to build calls that are flagged as invalid by C's comptypes.  */
!   if (! c_dialect_objc ()
        && TREE_CODE (function) == NOP_EXPR
        && TREE_CODE (tem = TREE_OPERAND (function, 0)) == ADDR_EXPR
        && TREE_CODE (tem = TREE_OPERAND (tem, 0)) == FUNCTION_DECL
!       && ! comptypes (fntype, TREE_TYPE (tem), COMPARE_STRICT))
      {
        tree return_type = TREE_TYPE (fntype);
        tree trap = build_function_call (built_in_decls[BUILT_IN_TRAP],
--- 2005,2015 ----
       ??? This doesn't work for Objective-C because objc_comptypes
       refuses to compare function prototypes, yet the compiler appears
       to build calls that are flagged as invalid by C's comptypes.  */
!   if (!c_dialect_objc ()
        && TREE_CODE (function) == NOP_EXPR
        && TREE_CODE (tem = TREE_OPERAND (function, 0)) == ADDR_EXPR
        && TREE_CODE (tem = TREE_OPERAND (tem, 0)) == FUNCTION_DECL
!       && !comptypes (fntype, TREE_TYPE (tem)))
      {
        tree return_type = TREE_TYPE (fntype);
        tree trap = build_function_call (built_in_decls[BUILT_IN_TRAP],
*************** build_function_call (tree function, tree
*** 1725,1731 ****
  	  else
  	    rhs = fold (build1 (NOP_EXPR, return_type, integer_zero_node));
  
! 	  return build (COMPOUND_EXPR, return_type, trap, rhs);
  	}
      }
  
--- 2037,2043 ----
  	  else
  	    rhs = fold (build1 (NOP_EXPR, return_type, integer_zero_node));
  
! 	  return build2 (COMPOUND_EXPR, return_type, trap, rhs);
  	}
      }
  
*************** build_function_call (tree function, tree
*** 1733,1760 ****
       function prototype, or apply default promotions.  */
  
    coerced_params
!     = convert_arguments (TYPE_ARG_TYPES (fntype), params, name, fundecl);
  
    /* Check that the arguments to the function are valid.  */
  
    check_function_arguments (TYPE_ATTRIBUTES (fntype), coerced_params);
  
!   /* Recognize certain built-in functions so we can make tree-codes
!      other than CALL_EXPR.  We do this when it enables fold-const.c
!      to do something useful.  */
! 
!   if (TREE_CODE (function) == ADDR_EXPR
!       && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL
!       && DECL_BUILT_IN (TREE_OPERAND (function, 0)))
!     {
!       result = expand_tree_builtin (TREE_OPERAND (function, 0),
! 				    params, coerced_params);
!       if (result)
! 	return result;
!     }
! 
!   result = build (CALL_EXPR, TREE_TYPE (fntype),
! 		  function, coerced_params, NULL_TREE);
    TREE_SIDE_EFFECTS (result) = 1;
  
    if (require_constant_value)
--- 2045,2061 ----
       function prototype, or apply default promotions.  */
  
    coerced_params
!     = convert_arguments (TYPE_ARG_TYPES (fntype), params, function, fundecl);
! 
!   if (coerced_params == error_mark_node)
!     return error_mark_node;
  
    /* Check that the arguments to the function are valid.  */
  
    check_function_arguments (TYPE_ATTRIBUTES (fntype), coerced_params);
  
!   result = build3 (CALL_EXPR, TREE_TYPE (fntype),
! 		   function, coerced_params, NULL_TREE);
    TREE_SIDE_EFFECTS (result) = 1;
  
    if (require_constant_value)
*************** build_function_call (tree function, tree
*** 1776,1782 ****
  
  /* Convert the argument expressions in the list VALUES
     to the types in the list TYPELIST.  The result is a list of converted
!    argument expressions.
  
     If TYPELIST is exhausted, or when an element has NULL as its type,
     perform the default conversions.
--- 2077,2084 ----
  
  /* Convert the argument expressions in the list VALUES
     to the types in the list TYPELIST.  The result is a list of converted
!    argument expressions, unless there are too few arguments in which
!    case it is error_mark_node.
  
     If TYPELIST is exhausted, or when an element has NULL as its type,
     perform the default conversions.
*************** build_function_call (tree function, tree
*** 1785,1791 ****
     It may be 0, if that info is not available.
     It is used only for generating error messages.
  
!    NAME is an IDENTIFIER_NODE or 0.  It is used only for error messages.
  
     This is also where warnings about wrong number of args are generated.
  
--- 2087,2094 ----
     It may be 0, if that info is not available.
     It is used only for generating error messages.
  
!    FUNCTION is a tree for the called function.  It is used only for
!    error messages, where it is formatted with %qE.
  
     This is also where warnings about wrong number of args are generated.
  
*************** build_function_call (tree function, tree
*** 1793,1803 ****
     with the elements of the list in the TREE_VALUE slots of those nodes.  */
  
  static tree
! convert_arguments (tree typelist, tree values, tree name, tree fundecl)
  {
    tree typetail, valtail;
    tree result = NULL;
    int parmnum;
  
    /* Scan the given expressions and types, producing individual
       converted arguments and pushing them on RESULT in reverse order.  */
--- 2096,2116 ----
     with the elements of the list in the TREE_VALUE slots of those nodes.  */
  
  static tree
! convert_arguments (tree typelist, tree values, tree function, tree fundecl)
  {
    tree typetail, valtail;
    tree result = NULL;
    int parmnum;
+   tree selector;
+ 
+   /* Change pointer to function to the function itself for
+      diagnostics.  */
+   if (TREE_CODE (function) == ADDR_EXPR
+       && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
+     function = TREE_OPERAND (function, 0);
+ 
+   /* Handle an ObjC selector specially for diagnostics.  */
+   selector = objc_message_selector ();
  
    /* Scan the given expressions and types, producing individual
       converted arguments and pushing them on RESULT in reverse order.  */
*************** convert_arguments (tree typelist, tree v
*** 1808,1824 ****
      {
        tree type = typetail ? TREE_VALUE (typetail) : 0;
        tree val = TREE_VALUE (valtail);
  
        if (type == void_type_node)
  	{
! 	  if (name)
! 	    error ("too many arguments to function `%s'",
! 		   IDENTIFIER_POINTER (name));
! 	  else
! 	    error ("too many arguments to function");
  	  break;
  	}
  
        /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue.  */
        /* Do not use STRIP_NOPS here!  We do not want an enumerator with value 0
  	 to convert automatically to a pointer.  */
--- 2121,2141 ----
      {
        tree type = typetail ? TREE_VALUE (typetail) : 0;
        tree val = TREE_VALUE (valtail);
+       tree rname = function;
+       int argnum = parmnum + 1;
  
        if (type == void_type_node)
  	{
! 	  error ("too many arguments to function %qE", function);
  	  break;
  	}
  
+       if (selector && argnum > 2)
+ 	{
+ 	  rname = selector;
+ 	  argnum -= 2;
+ 	}
+ 
        /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue.  */
        /* Do not use STRIP_NOPS here!  We do not want an enumerator with value 0
  	 to convert automatically to a pointer.  */
*************** convert_arguments (tree typelist, tree v
*** 1834,1840 ****
  	  /* Formal parm type is specified by a function prototype.  */
  	  tree parmval;
  
! 	  if (!COMPLETE_TYPE_P (type))
  	    {
  	      error ("type of formal parameter %d is incomplete", parmnum + 1);
  	      parmval = val;
--- 2151,2157 ----
  	  /* Formal parm type is specified by a function prototype.  */
  	  tree parmval;
  
! 	  if (type == error_mark_node || !COMPLETE_TYPE_P (type))
  	    {
  	      error ("type of formal parameter %d is incomplete", parmnum + 1);
  	      parmval = val;
*************** convert_arguments (tree typelist, tree v
*** 1845,1870 ****
  		 differ from the default conversions.  */
  	      if (warn_conversion || warn_traditional)
  		{
! 		  int formal_prec = TYPE_PRECISION (type);
  
  		  if (INTEGRAL_TYPE_P (type)
  		      && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
! 		    warn_for_assignment ("%s as integer rather than floating due to prototype", (char *) 0, name, parmnum + 1);
  		  if (INTEGRAL_TYPE_P (type)
  		      && TREE_CODE (TREE_TYPE (val)) == COMPLEX_TYPE)
! 		    warn_for_assignment ("%s as integer rather than complex due to prototype", (char *) 0, name, parmnum + 1);
  		  else if (TREE_CODE (type) == COMPLEX_TYPE
  			   && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
! 		    warn_for_assignment ("%s as complex rather than floating due to prototype", (char *) 0, name, parmnum + 1);
  		  else if (TREE_CODE (type) == REAL_TYPE
  			   && INTEGRAL_TYPE_P (TREE_TYPE (val)))
! 		    warn_for_assignment ("%s as floating rather than integer due to prototype", (char *) 0, name, parmnum + 1);
  		  else if (TREE_CODE (type) == COMPLEX_TYPE
  			   && INTEGRAL_TYPE_P (TREE_TYPE (val)))
! 		    warn_for_assignment ("%s as complex rather than integer due to prototype", (char *) 0, name, parmnum + 1);
  		  else if (TREE_CODE (type) == REAL_TYPE
  			   && TREE_CODE (TREE_TYPE (val)) == COMPLEX_TYPE)
! 		    warn_for_assignment ("%s as floating rather than complex due to prototype", (char *) 0, name, parmnum + 1);
  		  /* ??? At some point, messages should be written about
  		     conversions between complex types, but that's too messy
  		     to do now.  */
--- 2162,2199 ----
  		 differ from the default conversions.  */
  	      if (warn_conversion || warn_traditional)
  		{
! 		  unsigned int formal_prec = TYPE_PRECISION (type);
  
  		  if (INTEGRAL_TYPE_P (type)
  		      && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
! 		    warning ("passing argument %d of %qE as integer "
! 			     "rather than floating due to prototype",
! 			     argnum, rname);
  		  if (INTEGRAL_TYPE_P (type)
  		      && TREE_CODE (TREE_TYPE (val)) == COMPLEX_TYPE)
! 		    warning ("passing argument %d of %qE as integer "
! 			     "rather than complex due to prototype",
! 			     argnum, rname);
  		  else if (TREE_CODE (type) == COMPLEX_TYPE
  			   && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
! 		    warning ("passing argument %d of %qE as complex "
! 			     "rather than floating due to prototype",
! 			     argnum, rname);
  		  else if (TREE_CODE (type) == REAL_TYPE
  			   && INTEGRAL_TYPE_P (TREE_TYPE (val)))
! 		    warning ("passing argument %d of %qE as floating "
! 			     "rather than integer due to prototype",
! 			     argnum, rname);
  		  else if (TREE_CODE (type) == COMPLEX_TYPE
  			   && INTEGRAL_TYPE_P (TREE_TYPE (val)))
! 		    warning ("passing argument %d of %qE as complex "
! 			     "rather than integer due to prototype",
! 			     argnum, rname);
  		  else if (TREE_CODE (type) == REAL_TYPE
  			   && TREE_CODE (TREE_TYPE (val)) == COMPLEX_TYPE)
! 		    warning ("passing argument %d of %qE as floating "
! 			     "rather than complex due to prototype",
! 			     argnum, rname);
  		  /* ??? At some point, messages should be written about
  		     conversions between complex types, but that's too messy
  		     to do now.  */
*************** convert_arguments (tree typelist, tree v
*** 1874,1880 ****
  		      /* Warn if any argument is passed as `float',
  			 since without a prototype it would be `double'.  */
  		      if (formal_prec == TYPE_PRECISION (float_type_node))
! 			warn_for_assignment ("%s as `float' rather than `double' due to prototype", (char *) 0, name, parmnum + 1);
  		    }
  		  /* Detect integer changing in width or signedness.
  		     These warnings are only activated with
--- 2203,2211 ----
  		      /* Warn if any argument is passed as `float',
  			 since without a prototype it would be `double'.  */
  		      if (formal_prec == TYPE_PRECISION (float_type_node))
! 			warning ("passing argument %d of %qE as %<float%> "
! 				 "rather than %<double%> due to prototype",
! 				 argnum, rname);
  		    }
  		  /* Detect integer changing in width or signedness.
  		     These warnings are only activated with
*************** convert_arguments (tree typelist, tree v
*** 1892,1899 ****
  			   and the actual arg is that enum type.  */
  			;
  		      else if (formal_prec != TYPE_PRECISION (type1))
! 			warn_for_assignment ("%s with different width due to prototype", (char *) 0, name, parmnum + 1);
! 		      else if (TREE_UNSIGNED (type) == TREE_UNSIGNED (type1))
  			;
  		      /* Don't complain if the formal parameter type
  			 is an enum, because we can't tell now whether
--- 2223,2231 ----
  			   and the actual arg is that enum type.  */
  			;
  		      else if (formal_prec != TYPE_PRECISION (type1))
! 			warning ("passing argument %d of %qE with different "
! 				 "width due to prototype", argnum, rname);
! 		      else if (TYPE_UNSIGNED (type) == TYPE_UNSIGNED (type1))
  			;
  		      /* Don't complain if the formal parameter type
  			 is an enum, because we can't tell now whether
*************** convert_arguments (tree typelist, tree v
*** 1915,1932 ****
  			 pass it as signed or unsigned; the value
  			 certainly is the same either way.  */
  		      else if (TYPE_PRECISION (TREE_TYPE (val)) < TYPE_PRECISION (type)
! 			       && TREE_UNSIGNED (TREE_TYPE (val)))
  			;
! 		      else if (TREE_UNSIGNED (type))
! 			warn_for_assignment ("%s as unsigned due to prototype", (char *) 0, name, parmnum + 1);
  		      else
! 			warn_for_assignment ("%s as signed due to prototype", (char *) 0, name, parmnum + 1);
  		    }
  		}
  
! 	      parmval = convert_for_assignment (type, val,
! 					        (char *) 0, /* arg passing  */
! 						fundecl, name, parmnum + 1);
  
  	      if (targetm.calls.promote_prototypes (fundecl ? TREE_TYPE (fundecl) : 0)
  		  && INTEGRAL_TYPE_P (type)
--- 2247,2266 ----
  			 pass it as signed or unsigned; the value
  			 certainly is the same either way.  */
  		      else if (TYPE_PRECISION (TREE_TYPE (val)) < TYPE_PRECISION (type)
! 			       && TYPE_UNSIGNED (TREE_TYPE (val)))
  			;
! 		      else if (TYPE_UNSIGNED (type))
! 			warning ("passing argument %d of %qE as unsigned "
! 				 "due to prototype", argnum, rname);
  		      else
! 			warning ("passing argument %d of %qE as signed "
! 				 "due to prototype", argnum, rname);
  		    }
  		}
  
! 	      parmval = convert_for_assignment (type, val, ic_argpass,
! 						fundecl, function,
! 						parmnum + 1);
  
  	      if (targetm.calls.promote_prototypes (fundecl ? TREE_TYPE (fundecl) : 0)
  		  && INTEGRAL_TYPE_P (type)
*************** convert_arguments (tree typelist, tree v
*** 1950,1960 ****
  
    if (typetail != 0 && TREE_VALUE (typetail) != void_type_node)
      {
!       if (name)
! 	error ("too few arguments to function `%s'",
! 	       IDENTIFIER_POINTER (name));
!       else
! 	error ("too few arguments to function");
      }
  
    return nreverse (result);
--- 2284,2291 ----
  
    if (typetail != 0 && TREE_VALUE (typetail) != void_type_node)
      {
!       error ("too few arguments to function %qE", function);
!       return error_mark_node;
      }
  
    return nreverse (result);
*************** convert_arguments (tree typelist, tree v
*** 1966,1993 ****
     we check for operands that were written with other binary operators
     in a way that is likely to confuse the user.  */
  
! tree
! parser_build_binary_op (enum tree_code code, tree arg1, tree arg2)
  {
!   tree result = build_binary_op (code, arg1, arg2, 1);
  
!   char class;
!   char class1 = TREE_CODE_CLASS (TREE_CODE (arg1));
!   char class2 = TREE_CODE_CLASS (TREE_CODE (arg2));
!   enum tree_code code1 = ERROR_MARK;
!   enum tree_code code2 = ERROR_MARK;
  
!   if (TREE_CODE (result) == ERROR_MARK)
!     return error_mark_node;
  
!   if (IS_EXPR_CODE_CLASS (class1))
!     code1 = C_EXP_ORIGINAL_CODE (arg1);
!   if (IS_EXPR_CODE_CLASS (class2))
!     code2 = C_EXP_ORIGINAL_CODE (arg2);
  
    /* Check for cases such as x+y<<z which users are likely
!      to misinterpret.  If parens are used, C_EXP_ORIGINAL_CODE
!      is cleared to prevent these warnings.  */
    if (warn_parentheses)
      {
        if (code == LSHIFT_EXPR || code == RSHIFT_EXPR)
--- 2297,2319 ----
     we check for operands that were written with other binary operators
     in a way that is likely to confuse the user.  */
  
! struct c_expr
! parser_build_binary_op (enum tree_code code, struct c_expr arg1,
! 			struct c_expr arg2)
  {
!   struct c_expr result;
  
!   enum tree_code code1 = arg1.original_code;
!   enum tree_code code2 = arg2.original_code;
  
!   result.value = build_binary_op (code, arg1.value, arg2.value, 1);
!   result.original_code = code;
  
!   if (TREE_CODE (result.value) == ERROR_MARK)
!     return result;
  
    /* Check for cases such as x+y<<z which users are likely
!      to misinterpret.  */
    if (warn_parentheses)
      {
        if (code == LSHIFT_EXPR || code == RSHIFT_EXPR)
*************** parser_build_binary_op (enum tree_code c
*** 2012,2018 ****
  	      || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
  	    warning ("suggest parentheses around arithmetic in operand of |");
  	  /* Check cases like x|y==z */
! 	  if (TREE_CODE_CLASS (code1) == '<' || TREE_CODE_CLASS (code2) == '<')
  	    warning ("suggest parentheses around comparison in operand of |");
  	}
  
--- 2338,2345 ----
  	      || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
  	    warning ("suggest parentheses around arithmetic in operand of |");
  	  /* Check cases like x|y==z */
! 	  if (TREE_CODE_CLASS (code1) == tcc_comparison
! 	      || TREE_CODE_CLASS (code2) == tcc_comparison)
  	    warning ("suggest parentheses around comparison in operand of |");
  	}
  
*************** parser_build_binary_op (enum tree_code c
*** 2024,2030 ****
  	      || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
  	    warning ("suggest parentheses around arithmetic in operand of ^");
  	  /* Check cases like x^y==z */
! 	  if (TREE_CODE_CLASS (code1) == '<' || TREE_CODE_CLASS (code2) == '<')
  	    warning ("suggest parentheses around comparison in operand of ^");
  	}
  
--- 2351,2358 ----
  	      || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
  	    warning ("suggest parentheses around arithmetic in operand of ^");
  	  /* Check cases like x^y==z */
! 	  if (TREE_CODE_CLASS (code1) == tcc_comparison
! 	      || TREE_CODE_CLASS (code2) == tcc_comparison)
  	    warning ("suggest parentheses around comparison in operand of ^");
  	}
  
*************** parser_build_binary_op (enum tree_code c
*** 2034,2101 ****
  	      || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
  	    warning ("suggest parentheses around + or - in operand of &");
  	  /* Check cases like x&y==z */
! 	  if (TREE_CODE_CLASS (code1) == '<' || TREE_CODE_CLASS (code2) == '<')
  	    warning ("suggest parentheses around comparison in operand of &");
  	}
!     }
! 
!   /* Similarly, check for cases like 1<=i<=10 that are probably errors.  */
!   if (TREE_CODE_CLASS (code) == '<' && extra_warnings
!       && (TREE_CODE_CLASS (code1) == '<' || TREE_CODE_CLASS (code2) == '<'))
!     warning ("comparisons like X<=Y<=Z do not have their mathematical meaning");
! 
!   unsigned_conversion_warning (result, arg1);
!   unsigned_conversion_warning (result, arg2);
!   overflow_warning (result);
! 
!   class = TREE_CODE_CLASS (TREE_CODE (result));
  
-   /* Record the code that was specified in the source,
-      for the sake of warnings about confusing nesting.  */
-   if (IS_EXPR_CODE_CLASS (class))
-     C_SET_EXP_ORIGINAL_CODE (result, code);
-   else
-     {
-       int flag = TREE_CONSTANT (result);
-       /* We used to use NOP_EXPR rather than NON_LVALUE_EXPR
- 	 so that convert_for_assignment wouldn't strip it.
- 	 That way, we got warnings for things like p = (1 - 1).
- 	 But it turns out we should not get those warnings.  */
-       result = build1 (NON_LVALUE_EXPR, TREE_TYPE (result), result);
-       C_SET_EXP_ORIGINAL_CODE (result, code);
-       TREE_CONSTANT (result) = flag;
      }
  
    return result;
  }
  
- 
- /* Return true if `t' is known to be non-negative.  */
- 
- int
- c_tree_expr_nonnegative_p (tree t)
- {
-   if (TREE_CODE (t) == STMT_EXPR)
-     {
-       t = COMPOUND_BODY (STMT_EXPR_STMT (t));
- 
-       /* Find the last statement in the chain, ignoring the final
- 	     * scope statement */
-       while (TREE_CHAIN (t) != NULL_TREE
-              && TREE_CODE (TREE_CHAIN (t)) != SCOPE_STMT)
-         t = TREE_CHAIN (t);
-       return tree_expr_nonnegative_p (TREE_OPERAND (t, 0));
-     }
-   return tree_expr_nonnegative_p (t);
- }
- 
  /* Return a tree for the difference of pointers OP0 and OP1.
     The resulting tree has type int.  */
  
  static tree
  pointer_diff (tree op0, tree op1)
  {
-   tree result, folded;
    tree restype = ptrdiff_type_node;
  
    tree target_type = TREE_TYPE (TREE_TYPE (op0));
--- 2362,2392 ----
  	      || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
  	    warning ("suggest parentheses around + or - in operand of &");
  	  /* Check cases like x&y==z */
! 	  if (TREE_CODE_CLASS (code1) == tcc_comparison
! 	      || TREE_CODE_CLASS (code2) == tcc_comparison)
  	    warning ("suggest parentheses around comparison in operand of &");
  	}
!       /* Similarly, check for cases like 1<=i<=10 that are probably errors.  */
!       if (TREE_CODE_CLASS (code) == tcc_comparison
! 	  && (TREE_CODE_CLASS (code1) == tcc_comparison
! 	      || TREE_CODE_CLASS (code2) == tcc_comparison))
! 	warning ("comparisons like X<=Y<=Z do not have their mathematical meaning");
  
      }
  
+   unsigned_conversion_warning (result.value, arg1.value);
+   unsigned_conversion_warning (result.value, arg2.value);
+   overflow_warning (result.value);
+ 
    return result;
  }
  
  /* Return a tree for the difference of pointers OP0 and OP1.
     The resulting tree has type int.  */
  
  static tree
  pointer_diff (tree op0, tree op1)
  {
    tree restype = ptrdiff_type_node;
  
    tree target_type = TREE_TYPE (TREE_TYPE (op0));
*************** pointer_diff (tree op0, tree op1)
*** 2105,2111 ****
    if (pedantic || warn_pointer_arith)
      {
        if (TREE_CODE (target_type) == VOID_TYPE)
! 	pedwarn ("pointer of type `void *' used in subtraction");
        if (TREE_CODE (target_type) == FUNCTION_TYPE)
  	pedwarn ("pointer to a function used in subtraction");
      }
--- 2396,2402 ----
    if (pedantic || warn_pointer_arith)
      {
        if (TREE_CODE (target_type) == VOID_TYPE)
! 	pedwarn ("pointer of type %<void *%> used in subtraction");
        if (TREE_CODE (target_type) == FUNCTION_TYPE)
  	pedwarn ("pointer to a function used in subtraction");
      }
*************** pointer_diff (tree op0, tree op1)
*** 2159,2171 ****
    op1 = c_size_in_bytes (target_type);
  
    /* Divide by the size, in easiest possible way.  */
! 
!   result = build (EXACT_DIV_EXPR, restype, op0, convert (restype, op1));
! 
!   folded = fold (result);
!   if (folded == result)
!     TREE_CONSTANT (folded) = TREE_CONSTANT (op0) & TREE_CONSTANT (op1);
!   return folded;
  }
  
  /* Construct and perhaps optimize a tree representation
--- 2450,2456 ----
    op1 = c_size_in_bytes (target_type);
  
    /* Divide by the size, in easiest possible way.  */
!   return fold (build2 (EXACT_DIV_EXPR, restype, op0, convert (restype, op1)));
  }
  
  /* Construct and perhaps optimize a tree representation
*************** build_unary_op (enum tree_code code, tre
*** 2199,2205 ****
  	 is enough to prevent anybody from looking inside for
  	 associativity, but won't generate any code.  */
        if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
! 	    || typecode == COMPLEX_TYPE))
  	{
  	  error ("wrong type argument to unary plus");
  	  return error_mark_node;
--- 2484,2491 ----
  	 is enough to prevent anybody from looking inside for
  	 associativity, but won't generate any code.  */
        if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
! 	    || typecode == COMPLEX_TYPE
! 	    || typecode == VECTOR_TYPE))
  	{
  	  error ("wrong type argument to unary plus");
  	  return error_mark_node;
*************** build_unary_op (enum tree_code code, tre
*** 2231,2237 ****
  	{
  	  code = CONJ_EXPR;
  	  if (pedantic)
! 	    pedwarn ("ISO C does not support `~' for complex conjugation");
  	  if (!noconvert)
  	    arg = default_conversion (arg);
  	}
--- 2517,2523 ----
  	{
  	  code = CONJ_EXPR;
  	  if (pedantic)
! 	    pedwarn ("ISO C does not support %<~%> for complex conjugation");
  	  if (!noconvert)
  	    arg = default_conversion (arg);
  	}
*************** build_unary_op (enum tree_code code, tre
*** 2274,2280 ****
  	  error ("wrong type argument to unary exclamation mark");
  	  return error_mark_node;
  	}
!       arg = c_common_truthvalue_conversion (arg);
        return invert_truthvalue (arg);
  
      case NOP_EXPR:
--- 2560,2566 ----
  	  error ("wrong type argument to unary exclamation mark");
  	  return error_mark_node;
  	}
!       arg = lang_hooks.truthvalue_conversion (arg);
        return invert_truthvalue (arg);
  
      case NOP_EXPR:
*************** build_unary_op (enum tree_code code, tre
*** 2300,2311 ****
      case POSTINCREMENT_EXPR:
      case PREDECREMENT_EXPR:
      case POSTDECREMENT_EXPR:
-       /* Handle complex lvalues (when permitted)
- 	 by reduction to simpler cases.  */
- 
-       val = unary_complex_lvalue (code, arg, 0);
-       if (val != 0)
- 	return val;
  
        /* Increment or decrement the real part of the value,
  	 and don't change the imaginary part.  */
--- 2586,2591 ----
*************** build_unary_op (enum tree_code code, tre
*** 2314,2326 ****
  	  tree real, imag;
  
  	  if (pedantic)
! 	    pedwarn ("ISO C does not support `++' and `--' on complex types");
  
  	  arg = stabilize_reference (arg);
  	  real = build_unary_op (REALPART_EXPR, arg, 1);
  	  imag = build_unary_op (IMAGPART_EXPR, arg, 1);
! 	  return build (COMPLEX_EXPR, TREE_TYPE (arg),
! 			build_unary_op (code, real, 1), imag);
  	}
  
        /* Report invalid types.  */
--- 2594,2607 ----
  	  tree real, imag;
  
  	  if (pedantic)
! 	    pedwarn ("ISO C does not support %<++%> and %<--%>"
! 		     " on complex types");
  
  	  arg = stabilize_reference (arg);
  	  real = build_unary_op (REALPART_EXPR, arg, 1);
  	  imag = build_unary_op (IMAGPART_EXPR, arg, 1);
! 	  return build2 (COMPLEX_EXPR, TREE_TYPE (arg),
! 			 build_unary_op (code, real, 1), imag);
  	}
  
        /* Report invalid types.  */
*************** build_unary_op (enum tree_code code, tre
*** 2373,2434 ****
  
  	inc = convert (argtype, inc);
  
- 	/* Handle incrementing a cast-expression.  */
- 
- 	while (1)
- 	  switch (TREE_CODE (arg))
- 	    {
- 	    case NOP_EXPR:
- 	    case CONVERT_EXPR:
- 	    case FLOAT_EXPR:
- 	    case FIX_TRUNC_EXPR:
- 	    case FIX_FLOOR_EXPR:
- 	    case FIX_ROUND_EXPR:
- 	    case FIX_CEIL_EXPR:
- 	      pedantic_lvalue_warning (CONVERT_EXPR);
- 	      /* If the real type has the same machine representation
- 		 as the type it is cast to, we can make better output
- 		 by adding directly to the inside of the cast.  */
- 	      if ((TREE_CODE (TREE_TYPE (arg))
- 		   == TREE_CODE (TREE_TYPE (TREE_OPERAND (arg, 0))))
- 		  && (TYPE_MODE (TREE_TYPE (arg))
- 		      == TYPE_MODE (TREE_TYPE (TREE_OPERAND (arg, 0)))))
- 		arg = TREE_OPERAND (arg, 0);
- 	      else
- 		{
- 		  tree incremented, modify, value;
- 		  if (TREE_CODE (TREE_TYPE (arg)) == BOOLEAN_TYPE)
- 		    value = boolean_increment (code, arg);
- 		  else
- 		    {
- 		      arg = stabilize_reference (arg);
- 		      if (code == PREINCREMENT_EXPR || code == PREDECREMENT_EXPR)
- 			value = arg;
- 		      else
- 			value = save_expr (arg);
- 		      incremented = build (((code == PREINCREMENT_EXPR
- 					     || code == POSTINCREMENT_EXPR)
- 					    ? PLUS_EXPR : MINUS_EXPR),
- 					   argtype, value, inc);
- 		      TREE_SIDE_EFFECTS (incremented) = 1;
- 		      modify = build_modify_expr (arg, NOP_EXPR, incremented);
- 		      value = build (COMPOUND_EXPR, TREE_TYPE (arg), modify, value);
- 		    }
- 		  TREE_USED (value) = 1;
- 		  return value;
- 		}
- 	      break;
- 
- 	    default:
- 	      goto give_up;
- 	    }
-       give_up:
- 
  	/* Complain about anything else that is not a true lvalue.  */
  	if (!lvalue_or_else (arg, ((code == PREINCREMENT_EXPR
  				    || code == POSTINCREMENT_EXPR)
! 				   ? "invalid lvalue in increment"
! 				   : "invalid lvalue in decrement")))
  	  return error_mark_node;
  
  	/* Report a read-only lvalue.  */
--- 2654,2664 ----
  
  	inc = convert (argtype, inc);
  
  	/* Complain about anything else that is not a true lvalue.  */
  	if (!lvalue_or_else (arg, ((code == PREINCREMENT_EXPR
  				    || code == POSTINCREMENT_EXPR)
! 				   ? lv_increment
! 				   : lv_decrement)))
  	  return error_mark_node;
  
  	/* Report a read-only lvalue.  */
*************** build_unary_op (enum tree_code code, tre
*** 2436,2451 ****
  	  readonly_error (arg,
  			  ((code == PREINCREMENT_EXPR
  			    || code == POSTINCREMENT_EXPR)
! 			   ? "increment" : "decrement"));
  
  	if (TREE_CODE (TREE_TYPE (arg)) == BOOLEAN_TYPE)
  	  val = boolean_increment (code, arg);
  	else
! 	  val = build (code, TREE_TYPE (arg), arg, inc);
  	TREE_SIDE_EFFECTS (val) = 1;
  	val = convert (result_type, val);
  	if (TREE_CODE (val) != code)
! 	  TREE_NO_UNUSED_WARNING (val) = 1;
  	return val;
        }
  
--- 2666,2681 ----
  	  readonly_error (arg,
  			  ((code == PREINCREMENT_EXPR
  			    || code == POSTINCREMENT_EXPR)
! 			   ? lv_increment : lv_decrement));
  
  	if (TREE_CODE (TREE_TYPE (arg)) == BOOLEAN_TYPE)
  	  val = boolean_increment (code, arg);
  	else
! 	  val = build2 (code, TREE_TYPE (arg), arg, inc);
  	TREE_SIDE_EFFECTS (val) = 1;
  	val = convert (result_type, val);
  	if (TREE_CODE (val) != code)
! 	  TREE_NO_WARNING (val) = 1;
  	return val;
        }
  
*************** build_unary_op (enum tree_code code, tre
*** 2470,2485 ****
  				  TREE_OPERAND (arg, 1), 1);
  	}
  
-       /* Handle complex lvalues (when permitted)
- 	 by reduction to simpler cases.  */
-       val = unary_complex_lvalue (code, arg, flag);
-       if (val != 0)
- 	return val;
- 
        /* Anything not already handled and not a true memory reference
  	 or a non-lvalue array is an error.  */
        else if (typecode != FUNCTION_TYPE && !flag
! 	       && !lvalue_or_else (arg, "invalid lvalue in unary `&'"))
  	return error_mark_node;
  
        /* Ordinary case; arg is a COMPONENT_REF or a decl.  */
--- 2700,2709 ----
  				  TREE_OPERAND (arg, 1), 1);
  	}
  
        /* Anything not already handled and not a true memory reference
  	 or a non-lvalue array is an error.  */
        else if (typecode != FUNCTION_TYPE && !flag
! 	       && !lvalue_or_else (arg, lv_addressof))
  	return error_mark_node;
  
        /* Ordinary case; arg is a COMPONENT_REF or a decl.  */
*************** build_unary_op (enum tree_code code, tre
*** 2489,2536 ****
           to which the address will point.  Note that you can't get a
  	 restricted pointer by taking the address of something, so we
  	 only have to deal with `const' and `volatile' here.  */
!       if ((DECL_P (arg) || TREE_CODE_CLASS (TREE_CODE (arg)) == 'r')
  	  && (TREE_READONLY (arg) || TREE_THIS_VOLATILE (arg)))
  	  argtype = c_build_type_variant (argtype,
  					  TREE_READONLY (arg),
  					  TREE_THIS_VOLATILE (arg));
  
-       argtype = build_pointer_type (argtype);
- 
        if (!c_mark_addressable (arg))
  	return error_mark_node;
  
!       {
! 	tree addr;
  
! 	if (TREE_CODE (arg) == COMPONENT_REF)
! 	  {
! 	    tree field = TREE_OPERAND (arg, 1);
  
! 	    addr = build_unary_op (ADDR_EXPR, TREE_OPERAND (arg, 0), flag);
  
! 	    if (DECL_C_BIT_FIELD (field))
! 	      {
! 		error ("attempt to take address of bit-field structure member `%s'",
! 		       IDENTIFIER_POINTER (DECL_NAME (field)));
! 		return error_mark_node;
! 	      }
  
! 	    addr = fold (build (PLUS_EXPR, argtype,
! 				convert (argtype, addr),
! 				convert (argtype, byte_position (field))));
! 	  }
! 	else
! 	  addr = build1 (code, argtype, arg);
  
! 	/* Address of a static or external variable or
! 	   file-scope function counts as a constant.  */
! 	if (staticp (arg)
! 	    && ! (TREE_CODE (arg) == FUNCTION_DECL
! 		  && !DECL_FILE_SCOPE_P (arg)))
! 	  TREE_CONSTANT (addr) = 1;
! 	return addr;
!       }
  
      default:
        break;
--- 2713,2745 ----
           to which the address will point.  Note that you can't get a
  	 restricted pointer by taking the address of something, so we
  	 only have to deal with `const' and `volatile' here.  */
!       if ((DECL_P (arg) || REFERENCE_CLASS_P (arg))
  	  && (TREE_READONLY (arg) || TREE_THIS_VOLATILE (arg)))
  	  argtype = c_build_type_variant (argtype,
  					  TREE_READONLY (arg),
  					  TREE_THIS_VOLATILE (arg));
  
        if (!c_mark_addressable (arg))
  	return error_mark_node;
  
!       gcc_assert (TREE_CODE (arg) != COMPONENT_REF
! 		  || !DECL_C_BIT_FIELD (TREE_OPERAND (arg, 1)));
  
!       argtype = build_pointer_type (argtype);
  
!       /* ??? Cope with user tricks that amount to offsetof.  Delete this
! 	 when we have proper support for integer constant expressions.  */
!       val = get_base_address (arg);
!       if (val && TREE_CODE (val) == INDIRECT_REF
! 	  && integer_zerop (TREE_OPERAND (val, 0)))
! 	return fold_convert (argtype, fold_offsetof (arg));
  
!       val = build1 (ADDR_EXPR, argtype, arg);
  
!       if (TREE_CODE (arg) == COMPOUND_LITERAL_EXPR)
! 	TREE_INVARIANT (val) = TREE_CONSTANT (val) = 1;
  
!       return val;
  
      default:
        break;
*************** build_unary_op (enum tree_code code, tre
*** 2544,2550 ****
  
  /* Return nonzero if REF is an lvalue valid for this language.
     Lvalues can be assigned, unless their type has TYPE_READONLY.
!    Lvalues can have their address taken, unless they have DECL_REGISTER.  */
  
  int
  lvalue_p (tree ref)
--- 2753,2759 ----
  
  /* Return nonzero if REF is an lvalue valid for this language.
     Lvalues can be assigned, unless their type has TYPE_READONLY.
!    Lvalues can have their address taken, unless they have C_DECL_REGISTER.  */
  
  int
  lvalue_p (tree ref)
*************** lvalue_p (tree ref)
*** 2572,2679 ****
  	      && TREE_CODE (TREE_TYPE (ref)) != METHOD_TYPE);
  
      case BIND_EXPR:
-     case RTL_EXPR:
        return TREE_CODE (TREE_TYPE (ref)) == ARRAY_TYPE;
  
      default:
        return 0;
      }
  }
- 
- /* Return nonzero if REF is an lvalue valid for this language;
-    otherwise, print an error message and return zero.  */
- 
- int
- lvalue_or_else (tree ref, const char *msgid)
- {
-   int win = lvalue_p (ref);
- 
-   if (! win)
-     error ("%s", msgid);
- 
-   return win;
- }
- 
- /* Apply unary lvalue-demanding operator CODE to the expression ARG
-    for certain kinds of expressions which are not really lvalues
-    but which we can accept as lvalues.  If FLAG is nonzero, then
-    non-lvalues are OK since we may be converting a non-lvalue array to
-    a pointer in C99.
- 
-    If ARG is not a kind of expression we can handle, return zero.  */
- 
- static tree
- unary_complex_lvalue (enum tree_code code, tree arg, int flag)
- {
-   /* Handle (a, b) used as an "lvalue".  */
-   if (TREE_CODE (arg) == COMPOUND_EXPR)
-     {
-       tree real_result = build_unary_op (code, TREE_OPERAND (arg, 1), 0);
- 
-       /* If this returns a function type, it isn't really being used as
- 	 an lvalue, so don't issue a warning about it.  */
-       if (TREE_CODE (TREE_TYPE (arg)) != FUNCTION_TYPE && !flag)
- 	pedantic_lvalue_warning (COMPOUND_EXPR);
- 
-       return build (COMPOUND_EXPR, TREE_TYPE (real_result),
- 		    TREE_OPERAND (arg, 0), real_result);
-     }
- 
-   /* Handle (a ? b : c) used as an "lvalue".  */
-   if (TREE_CODE (arg) == COND_EXPR)
-     {
-       if (!flag)
- 	pedantic_lvalue_warning (COND_EXPR);
-       if (TREE_CODE (TREE_TYPE (arg)) != FUNCTION_TYPE && !flag)
- 	pedantic_lvalue_warning (COMPOUND_EXPR);
- 
-       return (build_conditional_expr
- 	      (TREE_OPERAND (arg, 0),
- 	       build_unary_op (code, TREE_OPERAND (arg, 1), flag),
- 	       build_unary_op (code, TREE_OPERAND (arg, 2), flag)));
-     }
- 
-   return 0;
- }
- 
- /* If pedantic, warn about improper lvalue.   CODE is either COND_EXPR
-    COMPOUND_EXPR, or CONVERT_EXPR (for casts).  */
- 
- static void
- pedantic_lvalue_warning (enum tree_code code)
- {
-   switch (code)
-     {
-     case COND_EXPR:
-       pedwarn ("use of conditional expressions as lvalues is deprecated");
-       break;
-     case COMPOUND_EXPR:
-       pedwarn ("use of compound expressions as lvalues is deprecated");
-       break;
-     default:
-       pedwarn ("use of cast expressions as lvalues is deprecated");
-       break;
-     }
- }
  
! /* Warn about storing in something that is `const'.  */
  
! void
! readonly_error (tree arg, const char *msgid)
  {
    if (TREE_CODE (arg) == COMPONENT_REF)
      {
        if (TYPE_READONLY (TREE_TYPE (TREE_OPERAND (arg, 0))))
! 	readonly_error (TREE_OPERAND (arg, 0), msgid);
        else
! 	error ("%s of read-only member `%s'", _(msgid),
  	       IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (arg, 1))));
      }
    else if (TREE_CODE (arg) == VAR_DECL)
!     error ("%s of read-only variable `%s'", _(msgid),
  	   IDENTIFIER_POINTER (DECL_NAME (arg)));
    else
!     error ("%s of read-only location", _(msgid));
  }
  
  /* Mark EXP saying that we need to be able to take the
--- 2781,2824 ----
  	      && TREE_CODE (TREE_TYPE (ref)) != METHOD_TYPE);
  
      case BIND_EXPR:
        return TREE_CODE (TREE_TYPE (ref)) == ARRAY_TYPE;
  
      default:
        return 0;
      }
  }
  
! /* Give an error for storing in something that is 'const'.  */
  
! static void
! readonly_error (tree arg, enum lvalue_use use)
  {
+   gcc_assert (use == lv_assign || use == lv_increment || use == lv_decrement);
+   /* Using this macro rather than (for example) arrays of messages
+      ensures that all the format strings are checked at compile
+      time.  */
+ #define READONLY_MSG(A, I, D) (use == lv_assign				\
+ 			       ? (A)					\
+ 			       : (use == lv_increment ? (I) : (D)))
    if (TREE_CODE (arg) == COMPONENT_REF)
      {
        if (TYPE_READONLY (TREE_TYPE (TREE_OPERAND (arg, 0))))
! 	readonly_error (TREE_OPERAND (arg, 0), use);
        else
! 	error (READONLY_MSG (N_("assignment of read-only member %qs"),
! 			     N_("increment of read-only member %qs"),
! 			     N_("decrement of read-only member %qs")),
  	       IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (arg, 1))));
      }
    else if (TREE_CODE (arg) == VAR_DECL)
!     error (READONLY_MSG (N_("assignment of read-only variable %qs"),
! 			 N_("increment of read-only variable %qs"),
! 			 N_("decrement of read-only variable %qs")),
  	   IDENTIFIER_POINTER (DECL_NAME (arg)));
    else
!     error (READONLY_MSG (N_("assignment of read-only location"),
! 			 N_("increment of read-only location"),
! 			 N_("decrement of read-only location")));
  }
  
  /* Mark EXP saying that we need to be able to take the
*************** c_mark_addressable (tree exp)
*** 2691,2698 ****
        case COMPONENT_REF:
  	if (DECL_C_BIT_FIELD (TREE_OPERAND (x, 1)))
  	  {
! 	    error ("cannot take address of bit-field `%s'",
! 		   IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (x, 1))));
  	    return false;
  	  }
  
--- 2836,2843 ----
        case COMPONENT_REF:
  	if (DECL_C_BIT_FIELD (TREE_OPERAND (x, 1)))
  	  {
! 	    error
! 	      ("cannot take address of bit-field %qD", TREE_OPERAND (x, 1));
  	    return false;
  	  }
  
*************** c_mark_addressable (tree exp)
*** 2714,2755 ****
        case CONST_DECL:
        case PARM_DECL:
        case RESULT_DECL:
! 	if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x)
  	    && DECL_NONLOCAL (x))
  	  {
  	    if (TREE_PUBLIC (x) || TREE_STATIC (x) || DECL_EXTERNAL (x))
  	      {
! 		error ("global register variable `%s' used in nested function",
! 		       IDENTIFIER_POINTER (DECL_NAME (x)));
  		return false;
  	      }
! 	    pedwarn ("register variable `%s' used in nested function",
! 		     IDENTIFIER_POINTER (DECL_NAME (x)));
  	  }
! 	else if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x))
  	  {
  	    if (TREE_PUBLIC (x) || TREE_STATIC (x) || DECL_EXTERNAL (x))
! 	      {
! 		error ("address of global register variable `%s' requested",
! 		       IDENTIFIER_POINTER (DECL_NAME (x)));
! 		return false;
! 	      }
! 
! 	    /* If we are making this addressable due to its having
! 	       volatile components, give a different error message.  Also
! 	       handle the case of an unnamed parameter by not trying
! 	       to give the name.  */
! 
! 	    else if (C_TYPE_FIELDS_VOLATILE (TREE_TYPE (x)))
! 	      {
! 		error ("cannot put object with volatile field into register");
! 		return false;
! 	      }
! 
! 	    pedwarn ("address of register variable `%s' requested",
! 		     IDENTIFIER_POINTER (DECL_NAME (x)));
  	  }
- 	put_var_into_stack (x, /*rescan=*/true);
  
  	/* drops in */
        case FUNCTION_DECL:
--- 2859,2883 ----
        case CONST_DECL:
        case PARM_DECL:
        case RESULT_DECL:
! 	if (C_DECL_REGISTER (x)
  	    && DECL_NONLOCAL (x))
  	  {
  	    if (TREE_PUBLIC (x) || TREE_STATIC (x) || DECL_EXTERNAL (x))
  	      {
! 		error
! 		  ("global register variable %qD used in nested function", x);
  		return false;
  	      }
! 	    pedwarn ("register variable %qD used in nested function", x);
  	  }
! 	else if (C_DECL_REGISTER (x))
  	  {
  	    if (TREE_PUBLIC (x) || TREE_STATIC (x) || DECL_EXTERNAL (x))
! 	      error ("address of global register variable %qD requested", x);
! 	    else
! 	      error ("address of register variable %qD requested", x);
! 	    return false;
  	  }
  
  	/* drops in */
        case FUNCTION_DECL:
*************** build_conditional_expr (tree ifexp, tree
*** 2772,2778 ****
    tree result_type = NULL;
    tree orig_op1 = op1, orig_op2 = op2;
  
!   ifexp = c_common_truthvalue_conversion (default_conversion (ifexp));
  
    /* Promote both alternatives.  */
  
--- 2900,2906 ----
    tree result_type = NULL;
    tree orig_op1 = op1, orig_op2 = op2;
  
!   ifexp = lang_hooks.truthvalue_conversion (default_conversion (ifexp));
  
    /* Promote both alternatives.  */
  
*************** build_conditional_expr (tree ifexp, tree
*** 2791,2796 ****
--- 2919,2932 ----
    type2 = TREE_TYPE (op2);
    code2 = TREE_CODE (type2);
  
+   /* C90 does not permit non-lvalue arrays in conditional expressions.
+      In C99 they will be pointers by now.  */
+   if (code1 == ARRAY_TYPE || code2 == ARRAY_TYPE)
+     {
+       error ("non-lvalue array in conditional expression");
+       return error_mark_node;
+     }
+ 
    /* Quickly detect the usual case where op1 and op2 have the same type
       after promotion.  */
    if (TYPE_MAIN_VARIANT (type1) == TYPE_MAIN_VARIANT (type2))
*************** build_conditional_expr (tree ifexp, tree
*** 2805,2811 ****
             && (code2 == INTEGER_TYPE || code2 == REAL_TYPE
                 || code2 == COMPLEX_TYPE))
      {
!       result_type = common_type (type1, type2);
  
        /* If -Wsign-compare, warn here if type1 and type2 have
  	 different signedness.  We'll promote the signed to unsigned
--- 2941,2947 ----
             && (code2 == INTEGER_TYPE || code2 == REAL_TYPE
                 || code2 == COMPLEX_TYPE))
      {
!       result_type = c_common_type (type1, type2);
  
        /* If -Wsign-compare, warn here if type1 and type2 have
  	 different signedness.  We'll promote the signed to unsigned
*************** build_conditional_expr (tree ifexp, tree
*** 2814,2834 ****
  	 will be considered, but default promotions won't.  */
        if (warn_sign_compare && !skip_evaluation)
  	{
! 	  int unsigned_op1 = TREE_UNSIGNED (TREE_TYPE (orig_op1));
! 	  int unsigned_op2 = TREE_UNSIGNED (TREE_TYPE (orig_op2));
  
  	  if (unsigned_op1 ^ unsigned_op2)
  	    {
  	      /* Do not warn if the result type is signed, since the
  		 signed type will only be chosen if it can represent
  		 all the values of the unsigned type.  */
! 	      if (! TREE_UNSIGNED (result_type))
  		/* OK */;
  	      /* Do not warn if the signed quantity is an unsuffixed
  		 integer literal (or some static constant expression
  		 involving such literals) and it is non-negative.  */
! 	      else if ((unsigned_op2 && c_tree_expr_nonnegative_p (op1))
! 		       || (unsigned_op1 && c_tree_expr_nonnegative_p (op2)))
  		/* OK */;
  	      else
  		warning ("signed and unsigned type in conditional expression");
--- 2950,2970 ----
  	 will be considered, but default promotions won't.  */
        if (warn_sign_compare && !skip_evaluation)
  	{
! 	  int unsigned_op1 = TYPE_UNSIGNED (TREE_TYPE (orig_op1));
! 	  int unsigned_op2 = TYPE_UNSIGNED (TREE_TYPE (orig_op2));
  
  	  if (unsigned_op1 ^ unsigned_op2)
  	    {
  	      /* Do not warn if the result type is signed, since the
  		 signed type will only be chosen if it can represent
  		 all the values of the unsigned type.  */
! 	      if (!TYPE_UNSIGNED (result_type))
  		/* OK */;
  	      /* Do not warn if the signed quantity is an unsuffixed
  		 integer literal (or some static constant expression
  		 involving such literals) and it is non-negative.  */
! 	      else if ((unsigned_op2 && tree_expr_nonnegative_p (op1))
! 		       || (unsigned_op1 && tree_expr_nonnegative_p (op2)))
  		/* OK */;
  	      else
  		warning ("signed and unsigned type in conditional expression");
*************** build_conditional_expr (tree ifexp, tree
*** 2844,2850 ****
    else if (code1 == POINTER_TYPE && code2 == POINTER_TYPE)
      {
        if (comp_target_types (type1, type2, 1))
! 	result_type = common_type (type1, type2);
        else if (integer_zerop (op1) && TREE_TYPE (type1) == void_type_node
  	       && TREE_CODE (orig_op1) != NOP_EXPR)
  	result_type = qualify_type (type2, type1);
--- 2980,2986 ----
    else if (code1 == POINTER_TYPE && code2 == POINTER_TYPE)
      {
        if (comp_target_types (type1, type2, 1))
! 	result_type = common_pointer_type (type1, type2);
        else if (integer_zerop (op1) && TREE_TYPE (type1) == void_type_node
  	       && TREE_CODE (orig_op1) != NOP_EXPR)
  	result_type = qualify_type (type2, type1);
*************** build_conditional_expr (tree ifexp, tree
*** 2854,2867 ****
        else if (VOID_TYPE_P (TREE_TYPE (type1)))
  	{
  	  if (pedantic && TREE_CODE (TREE_TYPE (type2)) == FUNCTION_TYPE)
! 	    pedwarn ("ISO C forbids conditional expr between `void *' and function pointer");
  	  result_type = build_pointer_type (qualify_type (TREE_TYPE (type1),
  							  TREE_TYPE (type2)));
  	}
        else if (VOID_TYPE_P (TREE_TYPE (type2)))
  	{
  	  if (pedantic && TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE)
! 	    pedwarn ("ISO C forbids conditional expr between `void *' and function pointer");
  	  result_type = build_pointer_type (qualify_type (TREE_TYPE (type2),
  							  TREE_TYPE (type1)));
  	}
--- 2990,3005 ----
        else if (VOID_TYPE_P (TREE_TYPE (type1)))
  	{
  	  if (pedantic && TREE_CODE (TREE_TYPE (type2)) == FUNCTION_TYPE)
! 	    pedwarn ("ISO C forbids conditional expr between "
! 		     "%<void *%> and function pointer");
  	  result_type = build_pointer_type (qualify_type (TREE_TYPE (type1),
  							  TREE_TYPE (type2)));
  	}
        else if (VOID_TYPE_P (TREE_TYPE (type2)))
  	{
  	  if (pedantic && TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE)
! 	    pedwarn ("ISO C forbids conditional expr between "
! 		     "%<void *%> and function pointer");
  	  result_type = build_pointer_type (qualify_type (TREE_TYPE (type2),
  							  TREE_TYPE (type1)));
  	}
*************** build_conditional_expr (tree ifexp, tree
*** 2873,2879 ****
      }
    else if (code1 == POINTER_TYPE && code2 == INTEGER_TYPE)
      {
!       if (! integer_zerop (op2))
  	pedwarn ("pointer/integer type mismatch in conditional expression");
        else
  	{
--- 3011,3017 ----
      }
    else if (code1 == POINTER_TYPE && code2 == INTEGER_TYPE)
      {
!       if (!integer_zerop (op2))
  	pedwarn ("pointer/integer type mismatch in conditional expression");
        else
  	{
*************** build_conditional_expr (tree ifexp, tree
*** 2915,2963 ****
      op2 = convert_and_check (result_type, op2);
  
    if (TREE_CODE (ifexp) == INTEGER_CST)
!     return pedantic_non_lvalue (integer_zerop (ifexp) ? op2 : op1);
  
!   return fold (build (COND_EXPR, result_type, ifexp, op1, op2));
  }
  
! /* Given a list of expressions, return a compound expression
!    that performs them all and returns the value of the last of them.  */
  
  tree
! build_compound_expr (tree list)
! {
!   return internal_build_compound_expr (list, TRUE);
! }
! 
! static tree
! internal_build_compound_expr (tree list, int first_p)
  {
!   tree rest;
! 
!   if (TREE_CHAIN (list) == 0)
!     {
!       /* Convert arrays and functions to pointers when there
! 	 really is a comma operator.  */
!       if (!first_p)
! 	TREE_VALUE (list)
! 	  = default_function_array_conversion (TREE_VALUE (list));
! 
!       /* Don't let (0, 0) be null pointer constant.  */
!       if (!first_p && integer_zerop (TREE_VALUE (list)))
! 	return non_lvalue (TREE_VALUE (list));
!       return TREE_VALUE (list);
!     }
! 
!   rest = internal_build_compound_expr (TREE_CHAIN (list), FALSE);
  
!   if (! TREE_SIDE_EFFECTS (TREE_VALUE (list)))
      {
        /* The left-hand operand of a comma expression is like an expression
           statement: with -Wextra or -Wunused, we should warn if it doesn't have
  	 any side-effects, unless it was explicitly cast to (void).  */
        if (warn_unused_value
!            && ! (TREE_CODE (TREE_VALUE (list)) == CONVERT_EXPR
!                 && VOID_TYPE_P (TREE_TYPE (TREE_VALUE (list)))))
          warning ("left-hand operand of comma expression has no effect");
      }
  
--- 3053,3080 ----
      op2 = convert_and_check (result_type, op2);
  
    if (TREE_CODE (ifexp) == INTEGER_CST)
!     return non_lvalue (integer_zerop (ifexp) ? op2 : op1);
  
!   return fold (build3 (COND_EXPR, result_type, ifexp, op1, op2));
  }
  
! /* Return a compound expression that performs two expressions and
!    returns the value of the second of them.  */
  
  tree
! build_compound_expr (tree expr1, tree expr2)
  {
!   /* Convert arrays and functions to pointers.  */
!   expr2 = default_function_array_conversion (expr2);
  
!   if (!TREE_SIDE_EFFECTS (expr1))
      {
        /* The left-hand operand of a comma expression is like an expression
           statement: with -Wextra or -Wunused, we should warn if it doesn't have
  	 any side-effects, unless it was explicitly cast to (void).  */
        if (warn_unused_value
!            && !(TREE_CODE (expr1) == CONVERT_EXPR
!                 && VOID_TYPE_P (TREE_TYPE (expr1))))
          warning ("left-hand operand of comma expression has no effect");
      }
  
*************** internal_build_compound_expr (tree list,
*** 2966,2974 ****
       `foo() + bar(), baz()' the result of the `+' operator is not used,
       so we should issue a warning.  */
    else if (warn_unused_value)
!     warn_if_unused_value (TREE_VALUE (list));
  
!   return build (COMPOUND_EXPR, TREE_TYPE (rest), TREE_VALUE (list), rest);
  }
  
  /* Build an expression representing a cast to type TYPE of expression EXPR.  */
--- 3083,3091 ----
       `foo() + bar(), baz()' the result of the `+' operator is not used,
       so we should issue a warning.  */
    else if (warn_unused_value)
!     warn_if_unused_value (expr1, input_location);
  
!   return build2 (COMPOUND_EXPR, TREE_TYPE (expr2), expr1, expr2);
  }
  
  /* Build an expression representing a cast to type TYPE of expression EXPR.  */
*************** build_c_cast (tree type, tree expr)
*** 2984,2991 ****
    /* The ObjC front-end uses TYPE_MAIN_VARIANT to tie together types differing
       only in <protocol> qualifications.  But when constructing cast expressions,
       the protocols do matter and must be kept around.  */
!   if (!c_dialect_objc () || !objc_is_object_ptr (type))
!     type = TYPE_MAIN_VARIANT (type);
  
    if (TREE_CODE (type) == ARRAY_TYPE)
      {
--- 3101,3110 ----
    /* The ObjC front-end uses TYPE_MAIN_VARIANT to tie together types differing
       only in <protocol> qualifications.  But when constructing cast expressions,
       the protocols do matter and must be kept around.  */
!   if (objc_is_object_ptr (type) && objc_is_object_ptr (TREE_TYPE (expr)))
!     return build1 (NOP_EXPR, type, expr);
! 
!   type = TYPE_MAIN_VARIANT (type);
  
    if (TREE_CODE (type) == ARRAY_TYPE)
      {
*************** build_c_cast (tree type, tree expr)
*** 3015,3021 ****
  
        for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
  	if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (field)),
! 		       TYPE_MAIN_VARIANT (TREE_TYPE (value)), COMPARE_STRICT))
  	  break;
  
        if (field)
--- 3134,3140 ----
  
        for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
  	if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (field)),
! 		       TYPE_MAIN_VARIANT (TREE_TYPE (value))))
  	  break;
  
        if (field)
*************** build_c_cast (tree type, tree expr)
*** 3027,3034 ****
  	  t = digest_init (type,
  			   build_constructor (type,
  					      build_tree_list (field, value)),
! 			   0);
  	  TREE_CONSTANT (t) = TREE_CONSTANT (value);
  	  return t;
  	}
        error ("cast to union type from type not present in union");
--- 3146,3154 ----
  	  t = digest_init (type,
  			   build_constructor (type,
  					      build_tree_list (field, value)),
! 			   true, 0);
  	  TREE_CONSTANT (t) = TREE_CONSTANT (value);
+ 	  TREE_INVARIANT (t) = TREE_INVARIANT (value);
  	  return t;
  	}
        error ("cast to union type from type not present in union");
*************** build_c_cast (tree type, tree expr)
*** 3113,3119 ****
        if (warn_bad_function_cast
  	  && TREE_CODE (value) == CALL_EXPR
  	  && TREE_CODE (type) != TREE_CODE (otype))
! 	warning ("cast does not match function type");
  
        if (TREE_CODE (type) == POINTER_TYPE
  	  && TREE_CODE (otype) == INTEGER_TYPE
--- 3233,3240 ----
        if (warn_bad_function_cast
  	  && TREE_CODE (value) == CALL_EXPR
  	  && TREE_CODE (type) != TREE_CODE (otype))
! 	warning ("cast from function call of type %qT to non-matching "
! 		 "type %qT", otype, type);
  
        if (TREE_CODE (type) == POINTER_TYPE
  	  && TREE_CODE (otype) == INTEGER_TYPE
*************** build_c_cast (tree type, tree expr)
*** 3133,3142 ****
  	     if the cast breaks type based aliasing.  */
  	  if (!COMPLETE_TYPE_P (TREE_TYPE (type)))
  	    warning ("type-punning to incomplete type might break strict-aliasing rules");
! 	  else if (!alias_sets_conflict_p
! 		   (get_alias_set (TREE_TYPE (TREE_OPERAND (expr, 0))),
! 		    get_alias_set (TREE_TYPE (type))))
! 	    warning ("dereferencing type-punned pointer will break strict-aliasing rules");
  	}
  
        /* If pedantic, warn for conversions between function and object
--- 3254,3270 ----
  	     if the cast breaks type based aliasing.  */
  	  if (!COMPLETE_TYPE_P (TREE_TYPE (type)))
  	    warning ("type-punning to incomplete type might break strict-aliasing rules");
! 	  else
! 	    {
! 	      HOST_WIDE_INT set1 = get_alias_set (TREE_TYPE (TREE_OPERAND (expr, 0)));
! 	      HOST_WIDE_INT set2 = get_alias_set (TREE_TYPE (type));
! 
! 	      if (!alias_sets_conflict_p (set1, set2))
! 		warning ("dereferencing type-punned pointer will break strict-aliasing rules");
! 	      else if (warn_strict_aliasing > 1
! 		       && !alias_sets_might_conflict_p (set1, set2))
! 		warning ("dereferencing type-punned pointer might break strict-aliasing rules");
! 	    }
  	}
  
        /* If pedantic, warn for conversions between function and object
*************** build_c_cast (tree type, tree expr)
*** 3159,3185 ****
  	pedwarn ("ISO C forbids conversion of object pointer to function pointer type");
  
        ovalue = value;
-       /* Replace a nonvolatile const static variable with its value.  */
-       if (optimize && TREE_CODE (value) == VAR_DECL)
- 	value = decl_constant_value (value);
        value = convert (type, value);
  
        /* Ignore any integer overflow caused by the cast.  */
        if (TREE_CODE (value) == INTEGER_CST)
  	{
! 	  TREE_OVERFLOW (value) = TREE_OVERFLOW (ovalue);
! 	  TREE_CONSTANT_OVERFLOW (value) = TREE_CONSTANT_OVERFLOW (ovalue);
  	}
      }
  
!   /* Pedantically, don't let (void *) (FOO *) 0 be a null pointer constant.  */
!   if (pedantic && TREE_CODE (value) == INTEGER_CST
!       && TREE_CODE (expr) == INTEGER_CST
!       && TREE_CODE (TREE_TYPE (expr)) != INTEGER_TYPE)
!     value = non_lvalue (value);
! 
!   /* If pedantic, don't let a cast be an lvalue.  */
!   if (value == expr && pedantic)
      value = non_lvalue (value);
  
    return value;
--- 3287,3313 ----
  	pedwarn ("ISO C forbids conversion of object pointer to function pointer type");
  
        ovalue = value;
        value = convert (type, value);
  
        /* Ignore any integer overflow caused by the cast.  */
        if (TREE_CODE (value) == INTEGER_CST)
  	{
! 	  if (EXPR_P (ovalue))
! 	    /* If OVALUE had overflow set, then so will VALUE, so it
! 	       is safe to overwrite.  */
! 	    TREE_OVERFLOW (value) = TREE_OVERFLOW (ovalue);
! 	  else
! 	    TREE_OVERFLOW (value) = 0;
! 	  
! 	  if (CONSTANT_CLASS_P (ovalue))
! 	    /* Similarly, constant_overflow cannot have become
! 	       cleared.  */
! 	    TREE_CONSTANT_OVERFLOW (value) = TREE_CONSTANT_OVERFLOW (ovalue);
  	}
      }
  
!   /* Don't let a cast be an lvalue.  */
!   if (value == expr)
      value = non_lvalue (value);
  
    return value;
*************** build_c_cast (tree type, tree expr)
*** 3187,3201 ****
  
  /* Interpret a cast of expression EXPR to type TYPE.  */
  tree
! c_cast_expr (tree type, tree expr)
  {
    int saved_wsp = warn_strict_prototypes;
  
    /* This avoids warnings about unprototyped casts on
       integers.  E.g. "#define SIG_DFL (void(*)())0".  */
    if (TREE_CODE (expr) == INTEGER_CST)
      warn_strict_prototypes = 0;
!   type = groktypename (type);
    warn_strict_prototypes = saved_wsp;
  
    return build_c_cast (type, expr);
--- 3315,3330 ----
  
  /* Interpret a cast of expression EXPR to type TYPE.  */
  tree
! c_cast_expr (struct c_type_name *type_name, tree expr)
  {
+   tree type;
    int saved_wsp = warn_strict_prototypes;
  
    /* This avoids warnings about unprototyped casts on
       integers.  E.g. "#define SIG_DFL (void(*)())0".  */
    if (TREE_CODE (expr) == INTEGER_CST)
      warn_strict_prototypes = 0;
!   type = groktypename (type_name);
    warn_strict_prototypes = saved_wsp;
  
    return build_c_cast (type, expr);
*************** build_modify_expr (tree lhs, enum tree_c
*** 3230,3274 ****
  
    newrhs = rhs;
  
-   /* Handle control structure constructs used as "lvalues".  */
- 
-   switch (TREE_CODE (lhs))
-     {
-       /* Handle (a, b) used as an "lvalue".  */
-     case COMPOUND_EXPR:
-       pedantic_lvalue_warning (COMPOUND_EXPR);
-       newrhs = build_modify_expr (TREE_OPERAND (lhs, 1), modifycode, rhs);
-       if (TREE_CODE (newrhs) == ERROR_MARK)
- 	return error_mark_node;
-       return build (COMPOUND_EXPR, lhstype,
- 		    TREE_OPERAND (lhs, 0), newrhs);
- 
-       /* Handle (a ? b : c) used as an "lvalue".  */
-     case COND_EXPR:
-       pedantic_lvalue_warning (COND_EXPR);
-       rhs = save_expr (rhs);
-       {
- 	/* Produce (a ? (b = rhs) : (c = rhs))
- 	   except that the RHS goes through a save-expr
- 	   so the code to compute it is only emitted once.  */
- 	tree cond
- 	  = build_conditional_expr (TREE_OPERAND (lhs, 0),
- 				    build_modify_expr (TREE_OPERAND (lhs, 1),
- 						       modifycode, rhs),
- 				    build_modify_expr (TREE_OPERAND (lhs, 2),
- 						       modifycode, rhs));
- 	if (TREE_CODE (cond) == ERROR_MARK)
- 	  return cond;
- 	/* Make sure the code to compute the rhs comes out
- 	   before the split.  */
- 	return build (COMPOUND_EXPR, TREE_TYPE (lhs),
- 		      /* But cast it to void to avoid an "unused" error.  */
- 		      convert (void_type_node, rhs), cond);
-       }
-     default:
-       break;
-     }
- 
    /* If a binary op has been requested, combine the old LHS value with the RHS
       producing the value we should actually store into the LHS.  */
  
--- 3359,3364 ----
*************** build_modify_expr (tree lhs, enum tree_c
*** 3278,3329 ****
        newrhs = build_binary_op (modifycode, lhs, rhs, 1);
      }
  
!   /* Handle a cast used as an "lvalue".
!      We have already performed any binary operator using the value as cast.
!      Now convert the result to the cast type of the lhs,
!      and then true type of the lhs and store it there;
!      then convert result back to the cast type to be the value
!      of the assignment.  */
! 
!   switch (TREE_CODE (lhs))
!     {
!     case NOP_EXPR:
!     case CONVERT_EXPR:
!     case FLOAT_EXPR:
!     case FIX_TRUNC_EXPR:
!     case FIX_FLOOR_EXPR:
!     case FIX_ROUND_EXPR:
!     case FIX_CEIL_EXPR:
!       newrhs = default_function_array_conversion (newrhs);
!       {
! 	tree inner_lhs = TREE_OPERAND (lhs, 0);
! 	tree result;
! 	result = build_modify_expr (inner_lhs, NOP_EXPR,
! 				    convert (TREE_TYPE (inner_lhs),
! 					     convert (lhstype, newrhs)));
! 	if (TREE_CODE (result) == ERROR_MARK)
! 	  return result;
! 	pedantic_lvalue_warning (CONVERT_EXPR);
! 	return convert (TREE_TYPE (lhs), result);
!       }
! 
!     default:
!       break;
!     }
! 
!   /* Now we have handled acceptable kinds of LHS that are not truly lvalues.
!      Reject anything strange now.  */
! 
!   if (!lvalue_or_else (lhs, "invalid lvalue in assignment"))
      return error_mark_node;
  
!   /* Warn about storing in something that is `const'.  */
  
    if (TREE_READONLY (lhs) || TYPE_READONLY (lhstype)
        || ((TREE_CODE (lhstype) == RECORD_TYPE
  	   || TREE_CODE (lhstype) == UNION_TYPE)
  	  && C_TYPE_FIELDS_READONLY (lhstype)))
!     readonly_error (lhs, "assignment");
  
    /* If storing into a structure or union member,
       it has probably been given type `int'.
--- 3368,3383 ----
        newrhs = build_binary_op (modifycode, lhs, rhs, 1);
      }
  
!   if (!lvalue_or_else (lhs, lv_assign))
      return error_mark_node;
  
!   /* Give an error for storing in something that is 'const'.  */
  
    if (TREE_READONLY (lhs) || TYPE_READONLY (lhstype)
        || ((TREE_CODE (lhstype) == RECORD_TYPE
  	   || TREE_CODE (lhstype) == UNION_TYPE)
  	  && C_TYPE_FIELDS_READONLY (lhstype)))
!     readonly_error (lhs, lv_assign);
  
    /* If storing into a structure or union member,
       it has probably been given type `int'.
*************** build_modify_expr (tree lhs, enum tree_c
*** 3348,3361 ****
  
    /* Convert new value to destination type.  */
  
!   newrhs = convert_for_assignment (lhstype, newrhs, _("assignment"),
  				   NULL_TREE, NULL_TREE, 0);
    if (TREE_CODE (newrhs) == ERROR_MARK)
      return error_mark_node;
  
!   /* Scan operands */
  
!   result = build (MODIFY_EXPR, lhstype, lhs, newrhs);
    TREE_SIDE_EFFECTS (result) = 1;
  
    /* If we got the LHS in a different type for storing in,
--- 3402,3415 ----
  
    /* Convert new value to destination type.  */
  
!   newrhs = convert_for_assignment (lhstype, newrhs, ic_assign,
  				   NULL_TREE, NULL_TREE, 0);
    if (TREE_CODE (newrhs) == ERROR_MARK)
      return error_mark_node;
  
!   /* Scan operands.  */
  
!   result = build2 (MODIFY_EXPR, lhstype, lhs, newrhs);
    TREE_SIDE_EFFECTS (result) = 1;
  
    /* If we got the LHS in a different type for storing in,
*************** build_modify_expr (tree lhs, enum tree_c
*** 3365,3371 ****
  
    if (olhstype == TREE_TYPE (result))
      return result;
!   return convert_for_assignment (olhstype, result, _("assignment"),
  				 NULL_TREE, NULL_TREE, 0);
  }
  
--- 3419,3425 ----
  
    if (olhstype == TREE_TYPE (result))
      return result;
!   return convert_for_assignment (olhstype, result, ic_assign,
  				 NULL_TREE, NULL_TREE, 0);
  }
  
*************** build_modify_expr (tree lhs, enum tree_c
*** 3374,3394 ****
     The real work of conversion is done by `convert'.
     The purpose of this function is to generate error messages
     for assignments that are not allowed in C.
!    ERRTYPE is a string to use in error messages:
!    "assignment", "return", etc.  If it is null, this is parameter passing
!    for a function call (and different error messages are output).
  
!    FUNNAME is the name of the function being called,
!    as an IDENTIFIER_NODE, or null.
     PARMNUM is the number of the argument, for printing in error messages.  */
  
  static tree
! convert_for_assignment (tree type, tree rhs, const char *errtype,
! 			tree fundecl, tree funname, int parmnum)
  {
    enum tree_code codel = TREE_CODE (type);
    tree rhstype;
    enum tree_code coder;
  
    /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue.  */
    /* Do not use STRIP_NOPS here.  We do not want an enumerator
--- 3428,3493 ----
     The real work of conversion is done by `convert'.
     The purpose of this function is to generate error messages
     for assignments that are not allowed in C.
!    ERRTYPE says whether it is argument passing, assignment,
!    initialization or return.
  
!    FUNCTION is a tree for the function being called.
     PARMNUM is the number of the argument, for printing in error messages.  */
  
  static tree
! convert_for_assignment (tree type, tree rhs, enum impl_conv errtype,
! 			tree fundecl, tree function, int parmnum)
  {
    enum tree_code codel = TREE_CODE (type);
    tree rhstype;
    enum tree_code coder;
+   tree rname = NULL_TREE;
+ 
+   if (errtype == ic_argpass || errtype == ic_argpass_nonproto)
+     {
+       tree selector;
+       /* Change pointer to function to the function itself for
+ 	 diagnostics.  */
+       if (TREE_CODE (function) == ADDR_EXPR
+ 	  && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
+ 	function = TREE_OPERAND (function, 0);
+ 
+       /* Handle an ObjC selector specially for diagnostics.  */
+       selector = objc_message_selector ();
+       rname = function;
+       if (selector && parmnum > 2)
+ 	{
+ 	  rname = selector;
+ 	  parmnum -= 2;
+ 	}
+     }
+ 
+   /* This macro is used to emit diagnostics to ensure that all format
+      strings are complete sentences, visible to gettext and checked at
+      compile time.  */
+ #define WARN_FOR_ASSIGNMENT(AR, AS, IN, RE)	\
+   do {						\
+     switch (errtype)				\
+       {						\
+       case ic_argpass:				\
+ 	pedwarn (AR, parmnum, rname);		\
+ 	break;					\
+       case ic_argpass_nonproto:			\
+ 	warning (AR, parmnum, rname);		\
+ 	break;					\
+       case ic_assign:				\
+ 	pedwarn (AS);				\
+ 	break;					\
+       case ic_init:				\
+ 	pedwarn (IN);				\
+ 	break;					\
+       case ic_return:				\
+ 	pedwarn (RE);				\
+ 	break;					\
+       default:					\
+ 	gcc_unreachable ();			\
+       }						\
+   } while (0)
  
    /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue.  */
    /* Do not use STRIP_NOPS here.  We do not want an enumerator
*************** convert_for_assignment (tree type, tree 
*** 3421,3426 ****
--- 3520,3530 ----
  
    if (coder == VOID_TYPE)
      {
+       /* Except for passing an argument to an unprototyped function,
+ 	 this is a constraint violation.  When passing an argument to
+ 	 an unprototyped function, it is compile-time undefined;
+ 	 making it a constraint in that case was rejected in
+ 	 DR#252.  */
        error ("void value not ignored as it ought to be");
        return error_mark_node;
      }
*************** convert_for_assignment (tree type, tree 
*** 3428,3434 ****
       This code doesn't fully support references, it's just for the
       special case of va_start and va_copy.  */
    if (codel == REFERENCE_TYPE
!       && comptypes (TREE_TYPE (type), TREE_TYPE (rhs), COMPARE_STRICT) == 1)
      {
        if (!lvalue_p (rhs))
  	{
--- 3532,3538 ----
       This code doesn't fully support references, it's just for the
       special case of va_start and va_copy.  */
    if (codel == REFERENCE_TYPE
!       && comptypes (TREE_TYPE (type), TREE_TYPE (rhs)) == 1)
      {
        if (!lvalue_p (rhs))
  	{
*************** convert_for_assignment (tree type, tree 
*** 3452,3459 ****
      }
    /* Some types can interconvert without explicit casts.  */
    else if (codel == VECTOR_TYPE && coder == VECTOR_TYPE
! 	   && ((*targetm.vector_opaque_p) (type)
! 	       || (*targetm.vector_opaque_p) (rhstype)))
      return convert (type, rhs);
    /* Arithmetic types all interconvert, and enum is treated like int.  */
    else if ((codel == INTEGER_TYPE || codel == REAL_TYPE
--- 3556,3562 ----
      }
    /* Some types can interconvert without explicit casts.  */
    else if (codel == VECTOR_TYPE && coder == VECTOR_TYPE
!            && vector_types_convertible_p (type, TREE_TYPE (rhs)))
      return convert (type, rhs);
    /* Arithmetic types all interconvert, and enum is treated like int.  */
    else if ((codel == INTEGER_TYPE || codel == REAL_TYPE
*************** convert_for_assignment (tree type, tree 
*** 3466,3472 ****
  
    /* Conversion to a transparent union from its member types.
       This applies only to function arguments.  */
!   else if (codel == UNION_TYPE && TYPE_TRANSPARENT_UNION (type) && ! errtype)
      {
        tree memb_types;
        tree marginal_memb_type = 0;
--- 3569,3576 ----
  
    /* Conversion to a transparent union from its member types.
       This applies only to function arguments.  */
!   else if (codel == UNION_TYPE && TYPE_TRANSPARENT_UNION (type)
! 	   && (errtype == ic_argpass || errtype == ic_argpass_nonproto))
      {
        tree memb_types;
        tree marginal_memb_type = 0;
*************** convert_for_assignment (tree type, tree 
*** 3477,3483 ****
  	  tree memb_type = TREE_TYPE (memb_types);
  
  	  if (comptypes (TYPE_MAIN_VARIANT (memb_type),
! 			 TYPE_MAIN_VARIANT (rhstype), COMPARE_STRICT))
  	    break;
  
  	  if (TREE_CODE (memb_type) != POINTER_TYPE)
--- 3581,3587 ----
  	  tree memb_type = TREE_TYPE (memb_types);
  
  	  if (comptypes (TYPE_MAIN_VARIANT (memb_type),
! 			 TYPE_MAIN_VARIANT (rhstype)))
  	    break;
  
  	  if (TREE_CODE (memb_type) != POINTER_TYPE)
*************** convert_for_assignment (tree type, tree 
*** 3506,3512 ****
  		    break;
  
  		  /* Keep looking for a better type, but remember this one.  */
! 		  if (! marginal_memb_type)
  		    marginal_memb_type = memb_type;
  		}
  	    }
--- 3610,3616 ----
  		    break;
  
  		  /* Keep looking for a better type, but remember this one.  */
! 		  if (!marginal_memb_type)
  		    marginal_memb_type = memb_type;
  		}
  	    }
*************** convert_for_assignment (tree type, tree 
*** 3523,3529 ****
  
        if (memb_types || marginal_memb_type)
  	{
! 	  if (! memb_types)
  	    {
  	      /* We have only a marginally acceptable member type;
  		 it needs a warning.  */
--- 3627,3633 ----
  
        if (memb_types || marginal_memb_type)
  	{
! 	  if (!memb_types)
  	    {
  	      /* We have only a marginally acceptable member type;
  		 it needs a warning.  */
*************** convert_for_assignment (tree type, tree 
*** 3541,3556 ****
  		     function where an ordinary one is wanted, but not
  		     vice-versa.  */
  		  if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr))
! 		    warn_for_assignment ("%s makes qualified function pointer from unqualified",
! 					 errtype, funname, parmnum);
  		}
  	      else if (TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl))
! 		warn_for_assignment ("%s discards qualifiers from pointer target type",
! 				     errtype, funname,
! 				     parmnum);
  	    }
  
! 	  if (pedantic && ! DECL_IN_SYSTEM_HEADER (fundecl))
  	    pedwarn ("ISO C prohibits argument conversion to union type");
  
  	  return build1 (NOP_EXPR, type, rhs);
--- 3645,3674 ----
  		     function where an ordinary one is wanted, but not
  		     vice-versa.  */
  		  if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr))
! 		    WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE "
! 					    "makes qualified function "
! 					    "pointer from unqualified"),
! 					 N_("assignment makes qualified "
! 					    "function pointer from "
! 					    "unqualified"),
! 					 N_("initialization makes qualified "
! 					    "function pointer from "
! 					    "unqualified"),
! 					 N_("return makes qualified function "
! 					    "pointer from unqualified"));
  		}
  	      else if (TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl))
! 		WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE discards "
! 					"qualifiers from pointer target type"),
! 				     N_("assignment discards qualifiers "
! 					"from pointer target type"),
! 				     N_("initialization discards qualifiers "
! 					"from pointer target type"),
! 				     N_("return discards qualifiers from "
! 					"pointer target type"));
  	    }
  
! 	  if (pedantic && !DECL_IN_SYSTEM_HEADER (fundecl))
  	    pedwarn ("ISO C prohibits argument conversion to union type");
  
  	  return build1 (NOP_EXPR, type, rhs);
*************** convert_for_assignment (tree type, tree 
*** 3563,3574 ****
      {
        tree ttl = TREE_TYPE (type);
        tree ttr = TREE_TYPE (rhstype);
        bool is_opaque_pointer;
        int target_cmp = 0;   /* Cache comp_target_types () result.  */
  
        /* Opaque pointers are treated like void pointers.  */
!       is_opaque_pointer = ((*targetm.vector_opaque_p) (type)
!                            || (*targetm.vector_opaque_p) (rhstype))
          && TREE_CODE (ttl) == VECTOR_TYPE
          && TREE_CODE (ttr) == VECTOR_TYPE;
  
--- 3681,3698 ----
      {
        tree ttl = TREE_TYPE (type);
        tree ttr = TREE_TYPE (rhstype);
+       tree mvl = ttl;
+       tree mvr = ttr;
        bool is_opaque_pointer;
        int target_cmp = 0;   /* Cache comp_target_types () result.  */
  
+       if (TREE_CODE (mvl) != ARRAY_TYPE)
+ 	mvl = TYPE_MAIN_VARIANT (mvl);
+       if (TREE_CODE (mvr) != ARRAY_TYPE)
+ 	mvr = TYPE_MAIN_VARIANT (mvr);
        /* Opaque pointers are treated like void pointers.  */
!       is_opaque_pointer = (targetm.vector_opaque_p (type)
!                            || targetm.vector_opaque_p (rhstype))
          && TREE_CODE (ttl) == VECTOR_TYPE
          && TREE_CODE (ttr) == VECTOR_TYPE;
  
*************** convert_for_assignment (tree type, tree 
*** 3578,3585 ****
        if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
  	  || (target_cmp = comp_target_types (type, rhstype, 0))
  	  || is_opaque_pointer
! 	  || (c_common_unsigned_type (TYPE_MAIN_VARIANT (ttl))
! 	      == c_common_unsigned_type (TYPE_MAIN_VARIANT (ttr))))
  	{
  	  if (pedantic
  	      && ((VOID_TYPE_P (ttl) && TREE_CODE (ttr) == FUNCTION_TYPE)
--- 3702,3709 ----
        if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
  	  || (target_cmp = comp_target_types (type, rhstype, 0))
  	  || is_opaque_pointer
! 	  || (c_common_unsigned_type (mvl)
! 	      == c_common_unsigned_type (mvr)))
  	{
  	  if (pedantic
  	      && ((VOID_TYPE_P (ttl) && TREE_CODE (ttr) == FUNCTION_TYPE)
*************** convert_for_assignment (tree type, tree 
*** 3589,3613 ****
  		      which are not ANSI null ptr constants.  */
  		   && (!integer_zerop (rhs) || TREE_CODE (rhs) == NOP_EXPR)
  		   && TREE_CODE (ttl) == FUNCTION_TYPE)))
! 	    warn_for_assignment ("ISO C forbids %s between function pointer and `void *'",
! 				 errtype, funname, parmnum);
  	  /* Const and volatile mean something different for function types,
  	     so the usual warnings are not appropriate.  */
  	  else if (TREE_CODE (ttr) != FUNCTION_TYPE
  		   && TREE_CODE (ttl) != FUNCTION_TYPE)
  	    {
  	      if (TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl))
! 		warn_for_assignment ("%s discards qualifiers from pointer target type",
! 				     errtype, funname, parmnum);
  	      /* If this is not a case of ignoring a mismatch in signedness,
  		 no warning.  */
  	      else if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
  		       || target_cmp)
  		;
  	      /* If there is a mismatch, do warn.  */
! 	      else if (pedantic)
! 		warn_for_assignment ("pointer targets in %s differ in signedness",
! 				     errtype, funname, parmnum);
  	    }
  	  else if (TREE_CODE (ttl) == FUNCTION_TYPE
  		   && TREE_CODE (ttr) == FUNCTION_TYPE)
--- 3713,3756 ----
  		      which are not ANSI null ptr constants.  */
  		   && (!integer_zerop (rhs) || TREE_CODE (rhs) == NOP_EXPR)
  		   && TREE_CODE (ttl) == FUNCTION_TYPE)))
! 	    WARN_FOR_ASSIGNMENT (N_("ISO C forbids passing argument %d of "
! 				    "%qE between function pointer "
! 				    "and %<void *%>"),
! 				 N_("ISO C forbids assignment between "
! 				    "function pointer and %<void *%>"),
! 				 N_("ISO C forbids initialization between "
! 				    "function pointer and %<void *%>"),
! 				 N_("ISO C forbids return between function "
! 				    "pointer and %<void *%>"));
  	  /* Const and volatile mean something different for function types,
  	     so the usual warnings are not appropriate.  */
  	  else if (TREE_CODE (ttr) != FUNCTION_TYPE
  		   && TREE_CODE (ttl) != FUNCTION_TYPE)
  	    {
  	      if (TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl))
! 		WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE discards "
! 					"qualifiers from pointer target type"),
! 				     N_("assignment discards qualifiers "
! 					"from pointer target type"),
! 				     N_("initialization discards qualifiers "
! 					"from pointer target type"),
! 				     N_("return discards qualifiers from "
! 					"pointer target type"));
  	      /* If this is not a case of ignoring a mismatch in signedness,
  		 no warning.  */
  	      else if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
  		       || target_cmp)
  		;
  	      /* If there is a mismatch, do warn.  */
! 	      else if (warn_pointer_sign)
! 		WARN_FOR_ASSIGNMENT (N_("pointer targets in passing argument "
! 					"%d of %qE differ in signedness"),
! 				     N_("pointer targets in assignment "
! 					"differ in signedness"),
! 				     N_("pointer targets in initialization "
! 					"differ in signedness"),
! 				     N_("pointer targets in return differ "
! 					"in signedness"));
  	    }
  	  else if (TREE_CODE (ttl) == FUNCTION_TYPE
  		   && TREE_CODE (ttr) == FUNCTION_TYPE)
*************** convert_for_assignment (tree type, tree 
*** 3617,3633 ****
  		 it is okay to use a const or volatile function
  		 where an ordinary one is wanted, but not vice-versa.  */
  	      if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr))
! 		warn_for_assignment ("%s makes qualified function pointer from unqualified",
! 				     errtype, funname, parmnum);
  	    }
  	}
        else
! 	warn_for_assignment ("%s from incompatible pointer type",
! 			     errtype, funname, parmnum);
        return convert (type, rhs);
      }
    else if (codel == POINTER_TYPE && coder == ARRAY_TYPE)
      {
        error ("invalid use of non-lvalue array");
        return error_mark_node;
      }
--- 3760,3789 ----
  		 it is okay to use a const or volatile function
  		 where an ordinary one is wanted, but not vice-versa.  */
  	      if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr))
! 		WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE makes "
! 					"qualified function pointer "
! 					"from unqualified"),
! 				     N_("assignment makes qualified function "
! 					"pointer from unqualified"),
! 				     N_("initialization makes qualified "
! 					"function pointer from unqualified"),
! 				     N_("return makes qualified function "
! 					"pointer from unqualified"));
  	    }
  	}
        else
! 	WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE from "
! 				"incompatible pointer type"),
! 			     N_("assignment from incompatible pointer type"),
! 			     N_("initialization from incompatible "
! 				"pointer type"),
! 			     N_("return from incompatible pointer type"));
        return convert (type, rhs);
      }
    else if (codel == POINTER_TYPE && coder == ARRAY_TYPE)
      {
+       /* ??? This should not be an error when inlining calls to
+ 	 unprototyped functions.  */
        error ("invalid use of non-lvalue array");
        return error_mark_node;
      }
*************** convert_for_assignment (tree type, tree 
*** 3636,3680 ****
        /* An explicit constant 0 can convert to a pointer,
  	 or one that results from arithmetic, even including
  	 a cast to integer type.  */
!       if (! (TREE_CODE (rhs) == INTEGER_CST && integer_zerop (rhs))
  	  &&
! 	  ! (TREE_CODE (rhs) == NOP_EXPR
! 	     && TREE_CODE (TREE_TYPE (rhs)) == INTEGER_TYPE
! 	     && TREE_CODE (TREE_OPERAND (rhs, 0)) == INTEGER_CST
! 	     && integer_zerop (TREE_OPERAND (rhs, 0))))
! 	  warn_for_assignment ("%s makes pointer from integer without a cast",
! 			       errtype, funname, parmnum);
  
        return convert (type, rhs);
      }
    else if (codel == INTEGER_TYPE && coder == POINTER_TYPE)
      {
!       warn_for_assignment ("%s makes integer from pointer without a cast",
! 			   errtype, funname, parmnum);
        return convert (type, rhs);
      }
    else if (codel == BOOLEAN_TYPE && coder == POINTER_TYPE)
      return convert (type, rhs);
  
!   if (!errtype)
      {
!       if (funname)
! 	{
! 	  tree selector = objc_message_selector ();
! 
! 	  if (selector && parmnum > 2)
! 	    error ("incompatible type for argument %d of `%s'",
! 		   parmnum - 2, IDENTIFIER_POINTER (selector));
! 	  else
! 	    error ("incompatible type for argument %d of `%s'",
! 		   parmnum, IDENTIFIER_POINTER (funname));
! 	}
!       else
! 	error ("incompatible type for argument %d of indirect function call",
! 	       parmnum);
      }
-   else
-     error ("incompatible types in %s", errtype);
  
    return error_mark_node;
  }
--- 3792,3849 ----
        /* An explicit constant 0 can convert to a pointer,
  	 or one that results from arithmetic, even including
  	 a cast to integer type.  */
!       if (!(TREE_CODE (rhs) == INTEGER_CST && integer_zerop (rhs))
  	  &&
! 	  !(TREE_CODE (rhs) == NOP_EXPR
! 	    && TREE_CODE (TREE_TYPE (rhs)) == INTEGER_TYPE
! 	    && TREE_CODE (TREE_OPERAND (rhs, 0)) == INTEGER_CST
! 	    && integer_zerop (TREE_OPERAND (rhs, 0))))
! 	WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE makes "
! 				"pointer from integer without a cast"),
! 			     N_("assignment makes pointer from integer "
! 				"without a cast"),
! 			     N_("initialization makes pointer from "
! 				"integer without a cast"),
! 			     N_("return makes pointer from integer "
! 				"without a cast"));
  
        return convert (type, rhs);
      }
    else if (codel == INTEGER_TYPE && coder == POINTER_TYPE)
      {
!       WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE makes integer "
! 			      "from pointer without a cast"),
! 			   N_("assignment makes integer from pointer "
! 			      "without a cast"),
! 			   N_("initialization makes integer from pointer "
! 			      "without a cast"),
! 			   N_("return makes integer from pointer "
! 			      "without a cast"));
        return convert (type, rhs);
      }
    else if (codel == BOOLEAN_TYPE && coder == POINTER_TYPE)
      return convert (type, rhs);
  
!   switch (errtype)
      {
!     case ic_argpass:
!     case ic_argpass_nonproto:
!       /* ??? This should not be an error when inlining calls to
! 	 unprototyped functions.  */
!       error ("incompatible type for argument %d of %qE", parmnum, rname);
!       break;
!     case ic_assign:
!       error ("incompatible types in assignment");
!       break;
!     case ic_init:
!       error ("incompatible types in initialization");
!       break;
!     case ic_return:
!       error ("incompatible types in return");
!       break;
!     default:
!       gcc_unreachable ();
      }
  
    return error_mark_node;
  }
*************** c_convert_parm_for_inlining (tree parm, 
*** 3690,3769 ****
  
    /* If FN was prototyped, the value has been converted already
       in convert_arguments.  */
!   if (! value || TYPE_ARG_TYPES (TREE_TYPE (fn)))
      return value;
  
    type = TREE_TYPE (parm);
    ret = convert_for_assignment (type, value,
! 				(char *) 0 /* arg passing  */, fn,
! 				DECL_NAME (fn), argnum);
    if (targetm.calls.promote_prototypes (TREE_TYPE (fn))
        && INTEGRAL_TYPE_P (type)
        && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
      ret = default_conversion (ret);
    return ret;
  }
- 
- /* Print a warning using MSGID.
-    It gets OPNAME as its one parameter.
-    if OPNAME is null and ARGNUM is 0, it is replaced by "passing arg of `FUNCTION'".
-    Otherwise if OPNAME is null, it is replaced by "passing arg ARGNUM of `FUNCTION'".
-    FUNCTION and ARGNUM are handled specially if we are building an
-    Objective-C selector.  */
- 
- static void
- warn_for_assignment (const char *msgid, const char *opname, tree function,
- 		     int argnum)
- {
-   if (opname == 0)
-     {
-       tree selector = objc_message_selector ();
-       char * new_opname;
- 
-       if (selector && argnum > 2)
- 	{
- 	  function = selector;
- 	  argnum -= 2;
- 	}
-       if (argnum == 0)
- 	{
- 	  if (function)
- 	    {
- 	      /* Function name is known; supply it.  */
- 	      const char *const argstring = _("passing arg of `%s'");
- 	      new_opname = alloca (IDENTIFIER_LENGTH (function)
- 				   + strlen (argstring) + 1 + 1);
- 	      sprintf (new_opname, argstring,
- 		       IDENTIFIER_POINTER (function));
- 	    }
- 	  else
- 	    {
- 	      /* Function name unknown (call through ptr).  */
- 	      const char *const argnofun = _("passing arg of pointer to function");
- 	      new_opname = alloca (strlen (argnofun) + 1 + 1);
- 	      sprintf (new_opname, argnofun);
- 	    }
- 	}
-       else if (function)
- 	{
- 	  /* Function name is known; supply it.  */
- 	  const char *const argstring = _("passing arg %d of `%s'");
- 	  new_opname = alloca (IDENTIFIER_LENGTH (function)
- 			       + strlen (argstring) + 1 + 25 /*%d*/ + 1);
- 	  sprintf (new_opname, argstring, argnum,
- 		   IDENTIFIER_POINTER (function));
- 	}
-       else
- 	{
- 	  /* Function name unknown (call through ptr); just give arg number.  */
- 	  const char *const argnofun = _("passing arg %d of pointer to function");
- 	  new_opname = alloca (strlen (argnofun) + 1 + 25 /*%d*/ + 1);
- 	  sprintf (new_opname, argnofun, argnum);
- 	}
-       opname = new_opname;
-     }
-   pedwarn (msgid, opname);
- }
  
  /* If VALUE is a compound expr all of whose expressions are constant, then
     return its value.  Otherwise, return error_mark_node.
--- 3859,3877 ----
  
    /* If FN was prototyped, the value has been converted already
       in convert_arguments.  */
!   if (!value || TYPE_ARG_TYPES (TREE_TYPE (fn)))
      return value;
  
    type = TREE_TYPE (parm);
    ret = convert_for_assignment (type, value,
! 				ic_argpass_nonproto, fn,
! 				fn, argnum);
    if (targetm.calls.promote_prototypes (TREE_TYPE (fn))
        && INTEGRAL_TYPE_P (type)
        && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
      ret = default_conversion (ret);
    return ret;
  }
  
  /* If VALUE is a compound expr all of whose expressions are constant, then
     return its value.  Otherwise, return error_mark_node.
*************** valid_compound_expr_initializer (tree va
*** 3782,3789 ****
        return valid_compound_expr_initializer (TREE_OPERAND (value, 1),
  					      endtype);
      }
!   else if (! TREE_CONSTANT (value)
! 	   && ! initializer_constant_valid_p (value, endtype))
      return error_mark_node;
    else
      return value;
--- 3890,3896 ----
        return valid_compound_expr_initializer (TREE_OPERAND (value, 1),
  					      endtype);
      }
!   else if (!initializer_constant_valid_p (value, endtype))
      return error_mark_node;
    else
      return value;
*************** store_init_value (tree decl, tree init)
*** 3807,3818 ****
  
    /* Digest the specified initializer into an expression.  */
  
!   value = digest_init (type, init, TREE_STATIC (decl));
  
    /* Store the expression if valid; else report error.  */
  
    if (warn_traditional && !in_system_header
!       && AGGREGATE_TYPE_P (TREE_TYPE (decl)) && ! TREE_STATIC (decl))
      warning ("traditional C rejects automatic aggregate initialization");
  
    DECL_INITIAL (decl) = value;
--- 3914,3925 ----
  
    /* Digest the specified initializer into an expression.  */
  
!   value = digest_init (type, init, true, TREE_STATIC (decl));
  
    /* Store the expression if valid; else report error.  */
  
    if (warn_traditional && !in_system_header
!       && AGGREGATE_TYPE_P (TREE_TYPE (decl)) && !TREE_STATIC (decl))
      warning ("traditional C rejects automatic aggregate initialization");
  
    DECL_INITIAL (decl) = value;
*************** static int spelling_size;		/* Size of th
*** 3888,3898 ****
    if (depth >= spelling_size)						\
      {									\
        spelling_size += 10;						\
!       if (spelling_base == 0)						\
! 	spelling_base = xmalloc (spelling_size * sizeof (struct spelling)); \
!       else								\
!         spelling_base = xrealloc (spelling_base,		\
! 				  spelling_size * sizeof (struct spelling)); \
        RESTORE_SPELLING_DEPTH (depth);					\
      }									\
  									\
--- 3995,4002 ----
    if (depth >= spelling_size)						\
      {									\
        spelling_size += 10;						\
!       spelling_base = XRESIZEVEC (struct spelling, spelling_base,	\
! 				  spelling_size);			\
        RESTORE_SPELLING_DEPTH (depth);					\
      }									\
  									\
*************** error_init (const char *msgid)
*** 3982,3990 ****
    char *ofwhat;
  
    error ("%s", _(msgid));
!   ofwhat = print_spelling (alloca (spelling_length () + 1));
    if (*ofwhat)
!     error ("(near initialization for `%s')", ofwhat);
  }
  
  /* Issue a pedantic warning for a bad initializer component.
--- 4086,4094 ----
    char *ofwhat;
  
    error ("%s", _(msgid));
!   ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
    if (*ofwhat)
!     error ("(near initialization for %qs)", ofwhat);
  }
  
  /* Issue a pedantic warning for a bad initializer component.
*************** pedwarn_init (const char *msgid)
*** 3997,4005 ****
    char *ofwhat;
  
    pedwarn ("%s", _(msgid));
!   ofwhat = print_spelling (alloca (spelling_length () + 1));
    if (*ofwhat)
!     pedwarn ("(near initialization for `%s')", ofwhat);
  }
  
  /* Issue a warning for a bad initializer component.
--- 4101,4109 ----
    char *ofwhat;
  
    pedwarn ("%s", _(msgid));
!   ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
    if (*ofwhat)
!     pedwarn ("(near initialization for %qs)", ofwhat);
  }
  
  /* Issue a warning for a bad initializer component.
*************** warning_init (const char *msgid)
*** 4012,4030 ****
    char *ofwhat;
  
    warning ("%s", _(msgid));
!   ofwhat = print_spelling (alloca (spelling_length () + 1));
    if (*ofwhat)
!     warning ("(near initialization for `%s')", ofwhat);
  }
  
  /* Digest the parser output INIT as an initializer for type TYPE.
     Return a C expression of type TYPE to represent the initial value.
  
     REQUIRE_CONSTANT requests an error if non-constant initializers or
     elements are seen.  */
  
  static tree
! digest_init (tree type, tree init, int require_constant)
  {
    enum tree_code code = TREE_CODE (type);
    tree inside_init = init;
--- 4116,4152 ----
    char *ofwhat;
  
    warning ("%s", _(msgid));
!   ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
    if (*ofwhat)
!     warning ("(near initialization for %qs)", ofwhat);
  }
  
+ /* If TYPE is an array type and EXPR is a parenthesized string
+    constant, warn if pedantic that EXPR is being used to initialize an
+    object of type TYPE.  */
+ 
+ void
+ maybe_warn_string_init (tree type, struct c_expr expr)
+ {
+   if (pedantic
+       && TREE_CODE (type) == ARRAY_TYPE
+       && TREE_CODE (expr.value) == STRING_CST
+       && expr.original_code != STRING_CST)
+     pedwarn_init ("array initialized from parenthesized string constant");
+ }
+ 
  /* Digest the parser output INIT as an initializer for type TYPE.
     Return a C expression of type TYPE to represent the initial value.
  
+    If INIT is a string constant, STRICT_STRING is true if it is
+    unparenthesized or we should not warn here for it being parenthesized.
+    For other types of INIT, STRICT_STRING is not used.
+ 
     REQUIRE_CONSTANT requests an error if non-constant initializers or
     elements are seen.  */
  
  static tree
! digest_init (tree type, tree init, bool strict_string, int require_constant)
  {
    enum tree_code code = TREE_CODE (type);
    tree inside_init = init;
*************** digest_init (tree type, tree init, int r
*** 4045,4076 ****
    /* Initialization of an array of chars from a string constant
       optionally enclosed in braces.  */
  
!   if (code == ARRAY_TYPE)
      {
        tree typ1 = TYPE_MAIN_VARIANT (TREE_TYPE (type));
!       if ((typ1 == char_type_node
! 	   || typ1 == signed_char_type_node
! 	   || typ1 == unsigned_char_type_node
! 	   || typ1 == unsigned_wchar_type_node
! 	   || typ1 == signed_wchar_type_node)
! 	  && ((inside_init && TREE_CODE (inside_init) == STRING_CST)))
  	{
  	  if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
! 			 TYPE_MAIN_VARIANT (type), COMPARE_STRICT))
  	    return inside_init;
  
! 	  if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (inside_init)))
! 	       != char_type_node)
! 	      && TYPE_PRECISION (typ1) == TYPE_PRECISION (char_type_node))
  	    {
  	      error_init ("char-array initialized from wide string");
  	      return error_mark_node;
  	    }
! 	  if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (inside_init)))
! 	       == char_type_node)
! 	      && TYPE_PRECISION (typ1) != TYPE_PRECISION (char_type_node))
  	    {
! 	      error_init ("int-array initialized from non-wide string");
  	      return error_mark_node;
  	    }
  
--- 4167,4207 ----
    /* Initialization of an array of chars from a string constant
       optionally enclosed in braces.  */
  
!   if (code == ARRAY_TYPE && inside_init
!       && TREE_CODE (inside_init) == STRING_CST)
      {
        tree typ1 = TYPE_MAIN_VARIANT (TREE_TYPE (type));
!       /* Note that an array could be both an array of character type
! 	 and an array of wchar_t if wchar_t is signed char or unsigned
! 	 char.  */
!       bool char_array = (typ1 == char_type_node
! 			 || typ1 == signed_char_type_node
! 			 || typ1 == unsigned_char_type_node);
!       bool wchar_array = !!comptypes (typ1, wchar_type_node);
!       if (char_array || wchar_array)
  	{
+ 	  struct c_expr expr;
+ 	  bool char_string;
+ 	  expr.value = inside_init;
+ 	  expr.original_code = (strict_string ? STRING_CST : ERROR_MARK);
+ 	  maybe_warn_string_init (type, expr);
+ 
+ 	  char_string
+ 	    = (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (inside_init)))
+ 	       == char_type_node);
+ 
  	  if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
! 			 TYPE_MAIN_VARIANT (type)))
  	    return inside_init;
  
! 	  if (!wchar_array && !char_string)
  	    {
  	      error_init ("char-array initialized from wide string");
  	      return error_mark_node;
  	    }
! 	  if (char_string && !char_array)
  	    {
! 	      error_init ("wchar_t-array initialized from non-wide string");
  	      return error_mark_node;
  	    }
  
*************** digest_init (tree type, tree init, int r
*** 4092,4133 ****
  
  	  return inside_init;
  	}
      }
  
    /* Build a VECTOR_CST from a *constant* vector constructor.  If the
       vector constructor is not constant (e.g. {1,2,3,foo()}) then punt
       below and handle as a constructor.  */
!     if (code == VECTOR_TYPE
!         && comptypes (TREE_TYPE (inside_init), type, COMPARE_STRICT)
!         && TREE_CONSTANT (inside_init))
!       {
! 	if (TREE_CODE (inside_init) == VECTOR_CST
! 	    && comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
! 			  TYPE_MAIN_VARIANT (type),
! 			  COMPARE_STRICT))
! 	  return inside_init;
! 	else
! 	  return build_vector (type, CONSTRUCTOR_ELTS (inside_init));
!       }
  
    /* Any type can be initialized
       from an expression of the same type, optionally with braces.  */
  
    if (inside_init && TREE_TYPE (inside_init) != 0
        && (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
! 		     TYPE_MAIN_VARIANT (type), COMPARE_STRICT)
  	  || (code == ARRAY_TYPE
! 	      && comptypes (TREE_TYPE (inside_init), type, COMPARE_STRICT))
  	  || (code == VECTOR_TYPE
! 	      && comptypes (TREE_TYPE (inside_init), type, COMPARE_STRICT))
  	  || (code == POINTER_TYPE
  	      && TREE_CODE (TREE_TYPE (inside_init)) == ARRAY_TYPE
  	      && comptypes (TREE_TYPE (TREE_TYPE (inside_init)),
! 			    TREE_TYPE (type), COMPARE_STRICT))
  	  || (code == POINTER_TYPE
  	      && TREE_CODE (TREE_TYPE (inside_init)) == FUNCTION_TYPE
  	      && comptypes (TREE_TYPE (inside_init),
! 			    TREE_TYPE (type), COMPARE_STRICT))))
      {
        if (code == POINTER_TYPE)
  	{
--- 4223,4284 ----
  
  	  return inside_init;
  	}
+       else if (INTEGRAL_TYPE_P (typ1))
+ 	{
+ 	  error_init ("array of inappropriate type initialized "
+ 		      "from string constant");
+ 	  return error_mark_node;
+ 	}
      }
  
    /* Build a VECTOR_CST from a *constant* vector constructor.  If the
       vector constructor is not constant (e.g. {1,2,3,foo()}) then punt
       below and handle as a constructor.  */
!   if (code == VECTOR_TYPE
!       && TREE_CODE (TREE_TYPE (inside_init)) == VECTOR_TYPE
!       && vector_types_convertible_p (TREE_TYPE (inside_init), type)
!       && TREE_CONSTANT (inside_init))
!     {
!       if (TREE_CODE (inside_init) == VECTOR_CST
! 	  && comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
! 			TYPE_MAIN_VARIANT (type)))
! 	return inside_init;
! 
!       if (TREE_CODE (inside_init) == CONSTRUCTOR)
! 	{
! 	  tree link;
! 
! 	  /* Iterate through elements and check if all constructor
! 	     elements are *_CSTs.  */
! 	  for (link = CONSTRUCTOR_ELTS (inside_init);
! 	       link;
! 	       link = TREE_CHAIN (link))
! 	    if (! CONSTANT_CLASS_P (TREE_VALUE (link)))
! 	      break;
! 
! 	  if (link == NULL)
! 	    return build_vector (type, CONSTRUCTOR_ELTS (inside_init));
! 	}
!     }
  
    /* Any type can be initialized
       from an expression of the same type, optionally with braces.  */
  
    if (inside_init && TREE_TYPE (inside_init) != 0
        && (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
! 		     TYPE_MAIN_VARIANT (type))
  	  || (code == ARRAY_TYPE
! 	      && comptypes (TREE_TYPE (inside_init), type))
  	  || (code == VECTOR_TYPE
! 	      && comptypes (TREE_TYPE (inside_init), type))
  	  || (code == POINTER_TYPE
  	      && TREE_CODE (TREE_TYPE (inside_init)) == ARRAY_TYPE
  	      && comptypes (TREE_TYPE (TREE_TYPE (inside_init)),
! 			    TREE_TYPE (type)))
  	  || (code == POINTER_TYPE
  	      && TREE_CODE (TREE_TYPE (inside_init)) == FUNCTION_TYPE
  	      && comptypes (TREE_TYPE (inside_init),
! 			    TREE_TYPE (type)))))
      {
        if (code == POINTER_TYPE)
  	{
*************** digest_init (tree type, tree init, int r
*** 4182,4197 ****
  	    inside_init = error_mark_node;
  	}
        else if (require_constant
! 	       && (!TREE_CONSTANT (inside_init)
! 		   /* This test catches things like `7 / 0' which
! 		      result in an expression for which TREE_CONSTANT
! 		      is true, but which is not actually something
! 		      that is a legal constant.  We really should not
! 		      be using this function, because it is a part of
! 		      the back-end.  Instead, the expression should
! 		      already have been turned into ERROR_MARK_NODE.  */
! 		   || !initializer_constant_valid_p (inside_init,
! 						     TREE_TYPE (inside_init))))
  	{
  	  error_init ("initializer element is not constant");
  	  inside_init = error_mark_node;
--- 4333,4340 ----
  	    inside_init = error_mark_node;
  	}
        else if (require_constant
! 	       && !initializer_constant_valid_p (inside_init,
! 						 TREE_TYPE (inside_init)))
  	{
  	  error_init ("initializer element is not constant");
  	  inside_init = error_mark_node;
*************** digest_init (tree type, tree init, int r
*** 4203,4224 ****
    /* Handle scalar types, including conversions.  */
  
    if (code == INTEGER_TYPE || code == REAL_TYPE || code == POINTER_TYPE
!       || code == ENUMERAL_TYPE || code == BOOLEAN_TYPE || code == COMPLEX_TYPE)
      {
        /* Note that convert_for_assignment calls default_conversion
  	 for arrays and functions.  We must not call it in the
  	 case where inside_init is a null pointer constant.  */
        inside_init
! 	= convert_for_assignment (type, init, _("initialization"),
  				  NULL_TREE, NULL_TREE, 0);
  
!       if (require_constant && ! TREE_CONSTANT (inside_init))
  	{
  	  error_init ("initializer element is not constant");
  	  inside_init = error_mark_node;
  	}
        else if (require_constant
! 	       && initializer_constant_valid_p (inside_init, TREE_TYPE (inside_init)) == 0)
  	{
  	  error_init ("initializer element is not computable at load time");
  	  inside_init = error_mark_node;
--- 4346,4372 ----
    /* Handle scalar types, including conversions.  */
  
    if (code == INTEGER_TYPE || code == REAL_TYPE || code == POINTER_TYPE
!       || code == ENUMERAL_TYPE || code == BOOLEAN_TYPE || code == COMPLEX_TYPE
!       || code == VECTOR_TYPE)
      {
        /* Note that convert_for_assignment calls default_conversion
  	 for arrays and functions.  We must not call it in the
  	 case where inside_init is a null pointer constant.  */
        inside_init
! 	= convert_for_assignment (type, init, ic_init,
  				  NULL_TREE, NULL_TREE, 0);
  
!       /* Check to see if we have already given an error message.  */
!       if (inside_init == error_mark_node)
! 	;
!       else if (require_constant && !TREE_CONSTANT (inside_init))
  	{
  	  error_init ("initializer element is not constant");
  	  inside_init = error_mark_node;
  	}
        else if (require_constant
! 	       && !initializer_constant_valid_p (inside_init,
! 						 TREE_TYPE (inside_init)))
  	{
  	  error_init ("initializer element is not computable at load time");
  	  inside_init = error_mark_node;
*************** static struct init_node *constructor_pen
*** 4307,4323 ****
  /* The SPELLING_DEPTH of this constructor.  */
  static int constructor_depth;
  
- /* 0 if implicitly pushing constructor levels is allowed.  */
- int constructor_no_implicit = 0; /* 0 for C; 1 for some other languages.  */
- 
  /* DECL node for which an initializer is being read.
     0 means we are reading a constructor expression
     such as (struct foo) {...}.  */
  static tree constructor_decl;
  
- /* start_init saves the ASMSPEC arg here for really_start_incremental_init.  */
- static const char *constructor_asmspec;
- 
  /* Nonzero if this is an initializer for a top-level decl.  */
  static int constructor_top_level;
  
--- 4455,4465 ----
*************** struct constructor_stack
*** 4351,4359 ****
    struct init_node *pending_elts;
    int offset;
    int depth;
!   /* If nonzero, this value should replace the entire
       constructor at this level.  */
!   tree replacement_value;
    struct constructor_range_stack *range_stack;
    char constant;
    char simple;
--- 4493,4501 ----
    struct init_node *pending_elts;
    int offset;
    int depth;
!   /* If value nonzero, this value should replace the entire
       constructor at this level.  */
!   struct c_expr replacement_value;
    struct constructor_range_stack *range_stack;
    char constant;
    char simple;
*************** struct initializer_stack
*** 4389,4395 ****
  {
    struct initializer_stack *next;
    tree decl;
-   const char *asmspec;
    struct constructor_stack *constructor_stack;
    struct constructor_range_stack *constructor_range_stack;
    tree elements;
--- 4531,4536 ----
*************** struct initializer_stack *initializer_st
*** 4406,4422 ****
  /* Prepare to parse and output the initializer for variable DECL.  */
  
  void
! start_init (tree decl, tree asmspec_tree, int top_level)
  {
    const char *locus;
    struct initializer_stack *p = xmalloc (sizeof (struct initializer_stack));
-   const char *asmspec = 0;
- 
-   if (asmspec_tree)
-     asmspec = TREE_STRING_POINTER (asmspec_tree);
  
    p->decl = constructor_decl;
-   p->asmspec = constructor_asmspec;
    p->require_constant_value = require_constant_value;
    p->require_constant_elements = require_constant_elements;
    p->constructor_stack = constructor_stack;
--- 4547,4558 ----
  /* Prepare to parse and output the initializer for variable DECL.  */
  
  void
! start_init (tree decl, tree asmspec_tree ATTRIBUTE_UNUSED, int top_level)
  {
    const char *locus;
    struct initializer_stack *p = xmalloc (sizeof (struct initializer_stack));
  
    p->decl = constructor_decl;
    p->require_constant_value = require_constant_value;
    p->require_constant_elements = require_constant_elements;
    p->constructor_stack = constructor_stack;
*************** start_init (tree decl, tree asmspec_tree
*** 4430,4440 ****
    initializer_stack = p;
  
    constructor_decl = decl;
-   constructor_asmspec = asmspec;
    constructor_designated = 0;
    constructor_top_level = top_level;
  
!   if (decl != 0)
      {
        require_constant_value = TREE_STATIC (decl);
        require_constant_elements
--- 4566,4575 ----
    initializer_stack = p;
  
    constructor_decl = decl;
    constructor_designated = 0;
    constructor_top_level = top_level;
  
!   if (decl != 0 && decl != error_mark_node)
      {
        require_constant_value = TREE_STATIC (decl);
        require_constant_elements
*************** finish_init (void)
*** 4480,4493 ****
        free (q);
      }
  
!   if (constructor_range_stack)
!     abort ();
  
    /* Pop back to the data of the outer initializer (if any).  */
    free (spelling_base);
  
    constructor_decl = p->decl;
-   constructor_asmspec = p->asmspec;
    require_constant_value = p->require_constant_value;
    require_constant_elements = p->require_constant_elements;
    constructor_stack = p->constructor_stack;
--- 4615,4626 ----
        free (q);
      }
  
!   gcc_assert (!constructor_range_stack);
  
    /* Pop back to the data of the outer initializer (if any).  */
    free (spelling_base);
  
    constructor_decl = p->decl;
    require_constant_value = p->require_constant_value;
    require_constant_elements = p->require_constant_elements;
    constructor_stack = p->constructor_stack;
*************** finish_init (void)
*** 4511,4522 ****
  void
  really_start_incremental_init (tree type)
  {
!   struct constructor_stack *p = xmalloc (sizeof (struct constructor_stack));
  
    if (type == 0)
      type = TREE_TYPE (constructor_decl);
  
!   if ((*targetm.vector_opaque_p) (type))
      error ("opaque vector types cannot be initialized");
  
    p->type = constructor_type;
--- 4644,4655 ----
  void
  really_start_incremental_init (tree type)
  {
!   struct constructor_stack *p = XNEW (struct constructor_stack);
  
    if (type == 0)
      type = TREE_TYPE (constructor_decl);
  
!   if (targetm.vector_opaque_p (type))
      error ("opaque vector types cannot be initialized");
  
    p->type = constructor_type;
*************** really_start_incremental_init (tree type
*** 4532,4538 ****
    p->erroneous = constructor_erroneous;
    p->pending_elts = constructor_pending_elts;
    p->depth = constructor_depth;
!   p->replacement_value = 0;
    p->implicit = 0;
    p->range_stack = 0;
    p->outer = 0;
--- 4665,4672 ----
    p->erroneous = constructor_erroneous;
    p->pending_elts = constructor_pending_elts;
    p->depth = constructor_depth;
!   p->replacement_value.value = 0;
!   p->replacement_value.original_code = ERROR_MARK;
    p->implicit = 0;
    p->range_stack = 0;
    p->outer = 0;
*************** really_start_incremental_init (tree type
*** 4574,4594 ****
  	  /* Detect non-empty initializations of zero-length arrays.  */
  	  if (constructor_max_index == NULL_TREE
  	      && TYPE_SIZE (constructor_type))
! 	    constructor_max_index = build_int_2 (-1, -1);
  
  	  /* constructor_max_index needs to be an INTEGER_CST.  Attempts
  	     to initialize VLAs will cause a proper error; avoid tree
  	     checking errors as well by setting a safe value.  */
  	  if (constructor_max_index
  	      && TREE_CODE (constructor_max_index) != INTEGER_CST)
! 	    constructor_max_index = build_int_2 (-1, -1);
  
  	  constructor_index
  	    = convert (bitsizetype,
  		       TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
  	}
        else
! 	constructor_index = bitsize_zero_node;
  
        constructor_unfilled_index = constructor_index;
      }
--- 4708,4731 ----
  	  /* Detect non-empty initializations of zero-length arrays.  */
  	  if (constructor_max_index == NULL_TREE
  	      && TYPE_SIZE (constructor_type))
! 	    constructor_max_index = build_int_cst (NULL_TREE, -1);
  
  	  /* constructor_max_index needs to be an INTEGER_CST.  Attempts
  	     to initialize VLAs will cause a proper error; avoid tree
  	     checking errors as well by setting a safe value.  */
  	  if (constructor_max_index
  	      && TREE_CODE (constructor_max_index) != INTEGER_CST)
! 	    constructor_max_index = build_int_cst (NULL_TREE, -1);
  
  	  constructor_index
  	    = convert (bitsizetype,
  		       TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
  	}
        else
! 	{
! 	  constructor_index = bitsize_zero_node;
! 	  constructor_max_index = NULL_TREE;
! 	}
  
        constructor_unfilled_index = constructor_index;
      }
*************** really_start_incremental_init (tree type
*** 4596,4602 ****
      {
        /* Vectors are like simple fixed-size arrays.  */
        constructor_max_index =
! 	build_int_2 (TYPE_VECTOR_SUBPARTS (constructor_type) - 1, 0);
        constructor_index = convert (bitsizetype, bitsize_zero_node);
        constructor_unfilled_index = constructor_index;
      }
--- 4733,4739 ----
      {
        /* Vectors are like simple fixed-size arrays.  */
        constructor_max_index =
! 	build_int_cst (NULL_TREE, TYPE_VECTOR_SUBPARTS (constructor_type) - 1);
        constructor_index = convert (bitsizetype, bitsize_zero_node);
        constructor_unfilled_index = constructor_index;
      }
*************** push_init_level (int implicit)
*** 4647,4653 ****
  	value = find_init_member (constructor_index);
      }
  
!   p = xmalloc (sizeof (struct constructor_stack));
    p->type = constructor_type;
    p->fields = constructor_fields;
    p->index = constructor_index;
--- 4784,4790 ----
  	value = find_init_member (constructor_index);
      }
  
!   p = XNEW (struct constructor_stack);
    p->type = constructor_type;
    p->fields = constructor_fields;
    p->index = constructor_index;
*************** push_init_level (int implicit)
*** 4661,4667 ****
    p->erroneous = constructor_erroneous;
    p->pending_elts = constructor_pending_elts;
    p->depth = constructor_depth;
!   p->replacement_value = 0;
    p->implicit = implicit;
    p->outer = 0;
    p->incremental = constructor_incremental;
--- 4798,4805 ----
    p->erroneous = constructor_erroneous;
    p->pending_elts = constructor_pending_elts;
    p->depth = constructor_depth;
!   p->replacement_value.value = 0;
!   p->replacement_value.original_code = ERROR_MARK;
    p->implicit = implicit;
    p->outer = 0;
    p->incremental = constructor_incremental;
*************** push_init_level (int implicit)
*** 4750,4756 ****
      {
        /* Vectors are like simple fixed-size arrays.  */
        constructor_max_index =
! 	build_int_2 (TYPE_VECTOR_SUBPARTS (constructor_type) - 1, 0);
        constructor_index = convert (bitsizetype, integer_zero_node);
        constructor_unfilled_index = constructor_index;
      }
--- 4888,4894 ----
      {
        /* Vectors are like simple fixed-size arrays.  */
        constructor_max_index =
! 	build_int_cst (NULL_TREE, TYPE_VECTOR_SUBPARTS (constructor_type) - 1);
        constructor_index = convert (bitsizetype, integer_zero_node);
        constructor_unfilled_index = constructor_index;
      }
*************** push_init_level (int implicit)
*** 4764,4777 ****
  	  /* Detect non-empty initializations of zero-length arrays.  */
  	  if (constructor_max_index == NULL_TREE
  	      && TYPE_SIZE (constructor_type))
! 	    constructor_max_index = build_int_2 (-1, -1);
  
  	  /* constructor_max_index needs to be an INTEGER_CST.  Attempts
  	     to initialize VLAs will cause a proper error; avoid tree
  	     checking errors as well by setting a safe value.  */
  	  if (constructor_max_index
  	      && TREE_CODE (constructor_max_index) != INTEGER_CST)
! 	    constructor_max_index = build_int_2 (-1, -1);
  
  	  constructor_index
  	    = convert (bitsizetype,
--- 4902,4915 ----
  	  /* Detect non-empty initializations of zero-length arrays.  */
  	  if (constructor_max_index == NULL_TREE
  	      && TYPE_SIZE (constructor_type))
! 	    constructor_max_index = build_int_cst (NULL_TREE, -1);
  
  	  /* constructor_max_index needs to be an INTEGER_CST.  Attempts
  	     to initialize VLAs will cause a proper error; avoid tree
  	     checking errors as well by setting a safe value.  */
  	  if (constructor_max_index
  	      && TREE_CODE (constructor_max_index) != INTEGER_CST)
! 	    constructor_max_index = build_int_cst (NULL_TREE, -1);
  
  	  constructor_index
  	    = convert (bitsizetype,
*************** push_init_level (int implicit)
*** 4791,4815 ****
      }
    else
      {
!       warning_init ("braces around scalar initializer");
        constructor_fields = constructor_type;
        constructor_unfilled_fields = constructor_type;
      }
  }
  
  /* At the end of an implicit or explicit brace level,
!    finish up that level of constructor.
!    If we were outputting the elements as they are read, return 0
     from inner levels (process_init_element ignores that),
!    but return error_mark_node from the outermost level
     (that's what we want to put in DECL_INITIAL).
!    Otherwise, return a CONSTRUCTOR expression.  */
  
! tree
  pop_init_level (int implicit)
  {
    struct constructor_stack *p;
!   tree constructor = 0;
  
    if (implicit == 0)
      {
--- 4929,4959 ----
      }
    else
      {
!       if (constructor_type != error_mark_node)
! 	warning_init ("braces around scalar initializer");
        constructor_fields = constructor_type;
        constructor_unfilled_fields = constructor_type;
      }
  }
  
  /* At the end of an implicit or explicit brace level,
!    finish up that level of constructor.  If a single expression
!    with redundant braces initialized that level, return the
!    c_expr structure for that expression.  Otherwise, the original_code
!    element is set to ERROR_MARK.
!    If we were outputting the elements as they are read, return 0 as the value
     from inner levels (process_init_element ignores that),
!    but return error_mark_node as the value from the outermost level
     (that's what we want to put in DECL_INITIAL).
!    Otherwise, return a CONSTRUCTOR expression as the value.  */
  
! struct c_expr
  pop_init_level (int implicit)
  {
    struct constructor_stack *p;
!   struct c_expr ret;
!   ret.value = 0;
!   ret.original_code = ERROR_MARK;
  
    if (implicit == 0)
      {
*************** pop_init_level (int implicit)
*** 4818,4825 ****
        while (constructor_stack->implicit)
  	process_init_element (pop_init_level (1));
  
!       if (constructor_range_stack)
! 	abort ();
      }
  
    /* Now output all pending elements.  */
--- 4962,4968 ----
        while (constructor_stack->implicit)
  	process_init_element (pop_init_level (1));
  
!       gcc_assert (!constructor_range_stack);
      }
  
    /* Now output all pending elements.  */
*************** pop_init_level (int implicit)
*** 4833,4846 ****
    if (constructor_type && constructor_fields
        && TREE_CODE (constructor_type) == ARRAY_TYPE
        && TYPE_DOMAIN (constructor_type)
!       && ! TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type)))
      {
        /* Silently discard empty initializations.  The parser will
  	 already have pedwarned for empty brackets.  */
        if (integer_zerop (constructor_unfilled_index))
  	constructor_type = NULL_TREE;
!       else if (! TYPE_SIZE (constructor_type))
  	{
  	  if (constructor_depth > 2)
  	    error_init ("initialization of flexible array member in a nested context");
  	  else if (pedantic)
--- 4976,4991 ----
    if (constructor_type && constructor_fields
        && TREE_CODE (constructor_type) == ARRAY_TYPE
        && TYPE_DOMAIN (constructor_type)
!       && !TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type)))
      {
        /* Silently discard empty initializations.  The parser will
  	 already have pedwarned for empty brackets.  */
        if (integer_zerop (constructor_unfilled_index))
  	constructor_type = NULL_TREE;
!       else
  	{
+ 	  gcc_assert (!TYPE_SIZE (constructor_type));
+ 	  
  	  if (constructor_depth > 2)
  	    error_init ("initialization of flexible array member in a nested context");
  	  else if (pedantic)
*************** pop_init_level (int implicit)
*** 4852,4872 ****
  	  if (TREE_CHAIN (constructor_fields) != NULL_TREE)
  	    constructor_type = NULL_TREE;
  	}
-       else
- 	/* Zero-length arrays are no longer special, so we should no longer
- 	   get here.  */
- 	abort ();
      }
  
    /* Warn when some struct elements are implicitly initialized to zero.  */
!   if (extra_warnings
        && constructor_type
        && TREE_CODE (constructor_type) == RECORD_TYPE
        && constructor_unfilled_fields)
      {
  	/* Do not warn for flexible array members or zero-length arrays.  */
  	while (constructor_unfilled_fields
! 	       && (! DECL_SIZE (constructor_unfilled_fields)
  		   || integer_zerop (DECL_SIZE (constructor_unfilled_fields))))
  	  constructor_unfilled_fields = TREE_CHAIN (constructor_unfilled_fields);
  
--- 4997,5013 ----
  	  if (TREE_CHAIN (constructor_fields) != NULL_TREE)
  	    constructor_type = NULL_TREE;
  	}
      }
  
    /* Warn when some struct elements are implicitly initialized to zero.  */
!   if (warn_missing_field_initializers
        && constructor_type
        && TREE_CODE (constructor_type) == RECORD_TYPE
        && constructor_unfilled_fields)
      {
  	/* Do not warn for flexible array members or zero-length arrays.  */
  	while (constructor_unfilled_fields
! 	       && (!DECL_SIZE (constructor_unfilled_fields)
  		   || integer_zerop (DECL_SIZE (constructor_unfilled_fields))))
  	  constructor_unfilled_fields = TREE_CHAIN (constructor_unfilled_fields);
  
*************** pop_init_level (int implicit)
*** 4881,4890 ****
      }
  
    /* Pad out the end of the structure.  */
!   if (p->replacement_value)
      /* If this closes a superfluous brace pair,
         just pass out the element between them.  */
!     constructor = p->replacement_value;
    else if (constructor_type == 0)
      ;
    else if (TREE_CODE (constructor_type) != RECORD_TYPE
--- 5022,5031 ----
      }
  
    /* Pad out the end of the structure.  */
!   if (p->replacement_value.value)
      /* If this closes a superfluous brace pair,
         just pass out the element between them.  */
!     ret = p->replacement_value;
    else if (constructor_type == 0)
      ;
    else if (TREE_CODE (constructor_type) != RECORD_TYPE
*************** pop_init_level (int implicit)
*** 4898,4925 ****
  	{
  	  if (!constructor_erroneous)
  	    error_init ("empty scalar initializer");
! 	  constructor = error_mark_node;
  	}
        else if (TREE_CHAIN (constructor_elements) != 0)
  	{
  	  error_init ("extra elements in scalar initializer");
! 	  constructor = TREE_VALUE (constructor_elements);
  	}
        else
! 	constructor = TREE_VALUE (constructor_elements);
      }
    else
      {
        if (constructor_erroneous)
! 	constructor = error_mark_node;
        else
  	{
! 	  constructor = build_constructor (constructor_type,
! 					   nreverse (constructor_elements));
  	  if (constructor_constant)
! 	    TREE_CONSTANT (constructor) = 1;
  	  if (constructor_constant && constructor_simple)
! 	    TREE_STATIC (constructor) = 1;
  	}
      }
  
--- 5039,5066 ----
  	{
  	  if (!constructor_erroneous)
  	    error_init ("empty scalar initializer");
! 	  ret.value = error_mark_node;
  	}
        else if (TREE_CHAIN (constructor_elements) != 0)
  	{
  	  error_init ("extra elements in scalar initializer");
! 	  ret.value = TREE_VALUE (constructor_elements);
  	}
        else
! 	ret.value = TREE_VALUE (constructor_elements);
      }
    else
      {
        if (constructor_erroneous)
! 	ret.value = error_mark_node;
        else
  	{
! 	  ret.value = build_constructor (constructor_type,
! 					 nreverse (constructor_elements));
  	  if (constructor_constant)
! 	    TREE_CONSTANT (ret.value) = TREE_INVARIANT (ret.value) = 1;
  	  if (constructor_constant && constructor_simple)
! 	    TREE_STATIC (ret.value) = 1;
  	}
      }
  
*************** pop_init_level (int implicit)
*** 4945,4957 ****
    constructor_stack = p->next;
    free (p);
  
!   if (constructor == 0)
      {
        if (constructor_stack == 0)
! 	return error_mark_node;
!       return NULL_TREE;
      }
!   return constructor;
  }
  
  /* Common handling for both array range and field name designators.
--- 5086,5101 ----
    constructor_stack = p->next;
    free (p);
  
!   if (ret.value == 0)
      {
        if (constructor_stack == 0)
! 	{
! 	  ret.value = error_mark_node;
! 	  return ret;
! 	}
!       return ret;
      }
!   return ret;
  }
  
  /* Common handling for both array range and field name designators.
*************** set_designator (int array)
*** 4968,4981 ****
    if (constructor_type == 0)
      return 1;
  
!   /* If there were errors in this designator list already, bail out silently.  */
    if (designator_errorneous)
      return 1;
  
    if (!designator_depth)
      {
!       if (constructor_range_stack)
! 	abort ();
  
        /* Designator list starts at the level of closest explicit
  	 braces.  */
--- 5112,5125 ----
    if (constructor_type == 0)
      return 1;
  
!   /* If there were errors in this designator list already, bail out
!      silently.  */
    if (designator_errorneous)
      return 1;
  
    if (!designator_depth)
      {
!       gcc_assert (!constructor_range_stack);
  
        /* Designator list starts at the level of closest explicit
  	 braces.  */
*************** set_designator (int array)
*** 4985,5009 ****
        return 0;
      }
  
!   if (constructor_no_implicit)
!     {
!       error_init ("initialization designators may not nest");
!       return 1;
!     }
! 
!   if (TREE_CODE (constructor_type) == RECORD_TYPE
!       || TREE_CODE (constructor_type) == UNION_TYPE)
      {
        subtype = TREE_TYPE (constructor_fields);
        if (subtype != error_mark_node)
  	subtype = TYPE_MAIN_VARIANT (subtype);
!     }
!   else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
!     {
        subtype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
      }
-   else
-     abort ();
  
    subcode = TREE_CODE (subtype);
    if (array && subcode != ARRAY_TYPE)
--- 5129,5148 ----
        return 0;
      }
  
!   switch (TREE_CODE (constructor_type))
      {
+     case  RECORD_TYPE:
+     case  UNION_TYPE:
        subtype = TREE_TYPE (constructor_fields);
        if (subtype != error_mark_node)
  	subtype = TYPE_MAIN_VARIANT (subtype);
!       break;
!     case ARRAY_TYPE:
        subtype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
+       break;
+     default:
+       gcc_unreachable ();
      }
  
    subcode = TREE_CODE (subtype);
    if (array && subcode != ARRAY_TYPE)
*************** push_range_stack (tree range_end)
*** 5031,5037 ****
  {
    struct constructor_range_stack *p;
  
!   p = ggc_alloc (sizeof (struct constructor_range_stack));
    p->prev = constructor_range_stack;
    p->next = 0;
    p->fields = constructor_fields;
--- 5170,5176 ----
  {
    struct constructor_range_stack *p;
  
!   p = GGC_NEW (struct constructor_range_stack);
    p->prev = constructor_range_stack;
    p->next = 0;
    p->fields = constructor_fields;
*************** set_init_index (tree first, tree last)
*** 5056,5061 ****
--- 5195,5207 ----
  
    designator_errorneous = 1;
  
+   if (!INTEGRAL_TYPE_P (TREE_TYPE (first))
+       || (last && !INTEGRAL_TYPE_P (TREE_TYPE (last))))
+     {
+       error_init ("array index in initializer not of integer type");
+       return;
+     }
+ 
    while ((TREE_CODE (first) == NOP_EXPR
  	  || TREE_CODE (first) == CONVERT_EXPR
  	  || TREE_CODE (first) == NON_LVALUE_EXPR)
*************** set_init_label (tree fieldname)
*** 5141,5147 ****
      }
  
    if (tail == 0)
!     error ("unknown field `%s' specified in initializer",
  	   IDENTIFIER_POINTER (fieldname));
    else
      {
--- 5287,5293 ----
      }
  
    if (tail == 0)
!     error ("unknown field %qs specified in initializer",
  	   IDENTIFIER_POINTER (fieldname));
    else
      {
*************** add_pending_init (tree purpose, tree val
*** 5205,5211 ****
  	}
      }
  
!   r = ggc_alloc (sizeof (struct init_node));
    r->purpose = purpose;
    r->value = value;
  
--- 5351,5357 ----
  	}
      }
  
!   r = GGC_NEW (struct init_node);
    r->purpose = purpose;
    r->value = value;
  
*************** set_nonincremental_init_from_string (tre
*** 5416,5433 ****
    const char *p, *end;
    int byte, wchar_bytes, charwidth, bitpos;
  
!   if (TREE_CODE (constructor_type) != ARRAY_TYPE)
!     abort ();
  
    if (TYPE_PRECISION (TREE_TYPE (TREE_TYPE (str)))
        == TYPE_PRECISION (char_type_node))
      wchar_bytes = 1;
-   else if (TYPE_PRECISION (TREE_TYPE (TREE_TYPE (str)))
- 	   == TYPE_PRECISION (wchar_type_node))
-     wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
    else
!     abort ();
! 
    charwidth = TYPE_PRECISION (char_type_node);
    type = TREE_TYPE (constructor_type);
    p = TREE_STRING_POINTER (str);
--- 5562,5578 ----
    const char *p, *end;
    int byte, wchar_bytes, charwidth, bitpos;
  
!   gcc_assert (TREE_CODE (constructor_type) == ARRAY_TYPE);
  
    if (TYPE_PRECISION (TREE_TYPE (TREE_TYPE (str)))
        == TYPE_PRECISION (char_type_node))
      wchar_bytes = 1;
    else
!     {
!       gcc_assert (TYPE_PRECISION (TREE_TYPE (TREE_TYPE (str)))
! 		  == TYPE_PRECISION (wchar_type_node));
!       wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
!     }
    charwidth = TYPE_PRECISION (char_type_node);
    type = TREE_TYPE (constructor_type);
    p = TREE_STRING_POINTER (str);
*************** set_nonincremental_init_from_string (tre
*** 5458,5464 ****
  	    }
  	}
  
!       if (!TREE_UNSIGNED (type))
  	{
  	  bitpos = ((wchar_bytes - 1) * charwidth) + HOST_BITS_PER_CHAR;
  	  if (bitpos < HOST_BITS_PER_WIDE_INT)
--- 5603,5609 ----
  	    }
  	}
  
!       if (!TYPE_UNSIGNED (type))
  	{
  	  bitpos = ((wchar_bytes - 1) * charwidth) + HOST_BITS_PER_CHAR;
  	  if (bitpos < HOST_BITS_PER_WIDE_INT)
*************** set_nonincremental_init_from_string (tre
*** 5480,5487 ****
  		      << (bitpos - HOST_BITS_PER_WIDE_INT);
  	}
  
!       value = build_int_2 (val[1], val[0]);
!       TREE_TYPE (value) = type;
        add_pending_init (purpose, value);
      }
  
--- 5625,5631 ----
  		      << (bitpos - HOST_BITS_PER_WIDE_INT);
  	}
  
!       value = build_int_cst_wide (type, val[1], val[0]);
        add_pending_init (purpose, value);
      }
  
*************** find_init_member (tree field)
*** 5548,5562 ****
     Otherwise, collect it in a list from which we will make a CONSTRUCTOR.
     TYPE is the data type that the containing data type wants here.
     FIELD is the field (a FIELD_DECL) or the index that this element fills.
  
     PENDING if non-nil means output pending elements that belong
     right after this element.  (PENDING is normally 1;
     it is 0 while outputting pending elements, to avoid recursion.)  */
  
  static void
! output_init_element (tree value, tree type, tree field, int pending)
  {
!   if (type == error_mark_node)
      {
        constructor_erroneous = 1;
        return;
--- 5692,5710 ----
     Otherwise, collect it in a list from which we will make a CONSTRUCTOR.
     TYPE is the data type that the containing data type wants here.
     FIELD is the field (a FIELD_DECL) or the index that this element fills.
+    If VALUE is a string constant, STRICT_STRING is true if it is
+    unparenthesized or we should not warn here for it being parenthesized.
+    For other types of VALUE, STRICT_STRING is not used.
  
     PENDING if non-nil means output pending elements that belong
     right after this element.  (PENDING is normally 1;
     it is 0 while outputting pending elements, to avoid recursion.)  */
  
  static void
! output_init_element (tree value, bool strict_string, tree type, tree field,
! 		     int pending)
  {
!   if (type == error_mark_node || value == error_mark_node)
      {
        constructor_erroneous = 1;
        return;
*************** output_init_element (tree value, tree ty
*** 5565,5573 ****
        || (TREE_CODE (TREE_TYPE (value)) == ARRAY_TYPE
  	  && !(TREE_CODE (value) == STRING_CST
  	       && TREE_CODE (type) == ARRAY_TYPE
! 	       && TREE_CODE (TREE_TYPE (type)) == INTEGER_TYPE)
  	  && !comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (value)),
! 			 TYPE_MAIN_VARIANT (type), COMPARE_STRICT)))
      value = default_conversion (value);
  
    if (TREE_CODE (value) == COMPOUND_LITERAL_EXPR
--- 5713,5721 ----
        || (TREE_CODE (TREE_TYPE (value)) == ARRAY_TYPE
  	  && !(TREE_CODE (value) == STRING_CST
  	       && TREE_CODE (type) == ARRAY_TYPE
! 	       && INTEGRAL_TYPE_P (TREE_TYPE (type)))
  	  && !comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (value)),
! 			 TYPE_MAIN_VARIANT (type))))
      value = default_conversion (value);
  
    if (TREE_CODE (value) == COMPOUND_LITERAL_EXPR
*************** output_init_element (tree value, tree ty
*** 5584,5604 ****
      constructor_erroneous = 1;
    else if (!TREE_CONSTANT (value))
      constructor_constant = 0;
!   else if (initializer_constant_valid_p (value, TREE_TYPE (value)) == 0
  	   || ((TREE_CODE (constructor_type) == RECORD_TYPE
  		|| TREE_CODE (constructor_type) == UNION_TYPE)
  	       && DECL_C_BIT_FIELD (field)
  	       && TREE_CODE (value) != INTEGER_CST))
      constructor_simple = 0;
  
!   if (require_constant_value && ! TREE_CONSTANT (value))
      {
!       error_init ("initializer element is not constant");
!       value = error_mark_node;
      }
-   else if (require_constant_elements
- 	   && initializer_constant_valid_p (value, TREE_TYPE (value)) == 0)
-     pedwarn ("initializer element is not computable at load time");
  
    /* If this field is empty (and not at the end of structure),
       don't do anything other than checking the initializer.  */
--- 5732,5754 ----
      constructor_erroneous = 1;
    else if (!TREE_CONSTANT (value))
      constructor_constant = 0;
!   else if (!initializer_constant_valid_p (value, TREE_TYPE (value))
  	   || ((TREE_CODE (constructor_type) == RECORD_TYPE
  		|| TREE_CODE (constructor_type) == UNION_TYPE)
  	       && DECL_C_BIT_FIELD (field)
  	       && TREE_CODE (value) != INTEGER_CST))
      constructor_simple = 0;
  
!   if (!initializer_constant_valid_p (value, TREE_TYPE (value)))
      {
!       if (require_constant_value)
! 	{
! 	  error_init ("initializer element is not constant");
! 	  value = error_mark_node;
! 	}
!       else if (require_constant_elements)
! 	pedwarn ("initializer element is not computable at load time");
      }
  
    /* If this field is empty (and not at the end of structure),
       don't do anything other than checking the initializer.  */
*************** output_init_element (tree value, tree ty
*** 5610,5616 ****
  		  || TREE_CHAIN (field)))))
      return;
  
!   value = digest_init (type, value, require_constant_value);
    if (value == error_mark_node)
      {
        constructor_erroneous = 1;
--- 5760,5766 ----
  		  || TREE_CHAIN (field)))))
      return;
  
!   value = digest_init (type, value, strict_string, require_constant_value);
    if (value == error_mark_node)
      {
        constructor_erroneous = 1;
*************** output_pending_init_elements (int all)
*** 5730,5736 ****
  	{
  	  if (tree_int_cst_equal (elt->purpose,
  				  constructor_unfilled_index))
! 	    output_init_element (elt->value,
  				 TREE_TYPE (constructor_type),
  				 constructor_unfilled_index, 0);
  	  else if (tree_int_cst_lt (constructor_unfilled_index,
--- 5880,5886 ----
  	{
  	  if (tree_int_cst_equal (elt->purpose,
  				  constructor_unfilled_index))
! 	    output_init_element (elt->value, true,
  				 TREE_TYPE (constructor_type),
  				 constructor_unfilled_index, 0);
  	  else if (tree_int_cst_lt (constructor_unfilled_index,
*************** output_pending_init_elements (int all)
*** 5784,5790 ****
  	  if (tree_int_cst_equal (elt_bitpos, ctor_unfilled_bitpos))
  	    {
  	      constructor_unfilled_fields = elt->purpose;
! 	      output_init_element (elt->value, TREE_TYPE (elt->purpose),
  				   elt->purpose, 0);
  	    }
  	  else if (tree_int_cst_lt (ctor_unfilled_bitpos, elt_bitpos))
--- 5934,5940 ----
  	  if (tree_int_cst_equal (elt_bitpos, ctor_unfilled_bitpos))
  	    {
  	      constructor_unfilled_fields = elt->purpose;
! 	      output_init_element (elt->value, true, TREE_TYPE (elt->purpose),
  				   elt->purpose, 0);
  	    }
  	  else if (tree_int_cst_lt (ctor_unfilled_bitpos, elt_bitpos))
*************** output_pending_init_elements (int all)
*** 5826,5832 ****
  
    /* Ordinarily return, but not if we want to output all
       and there are elements left.  */
!   if (! (all && next != 0))
      return;
  
    /* If it's not incremental, just skip over the gap, so that after
--- 5976,5982 ----
  
    /* Ordinarily return, but not if we want to output all
       and there are elements left.  */
!   if (!(all && next != 0))
      return;
  
    /* If it's not incremental, just skip over the gap, so that after
*************** output_pending_init_elements (int all)
*** 5851,5860 ****
     it calls output_init_element.  */
  
  void
! process_init_element (tree value)
  {
!   tree orig_value = value;
!   int string_flag = value != 0 && TREE_CODE (value) == STRING_CST;
  
    designator_depth = 0;
    designator_errorneous = 0;
--- 6001,6011 ----
     it calls output_init_element.  */
  
  void
! process_init_element (struct c_expr value)
  {
!   tree orig_value = value.value;
!   int string_flag = orig_value != 0 && TREE_CODE (orig_value) == STRING_CST;
!   bool strict_string = value.original_code == STRING_CST;
  
    designator_depth = 0;
    designator_errorneous = 0;
*************** process_init_element (tree value)
*** 5864,5879 ****
    if (string_flag
        && constructor_type
        && TREE_CODE (constructor_type) == ARRAY_TYPE
!       && TREE_CODE (TREE_TYPE (constructor_type)) == INTEGER_TYPE
        && integer_zerop (constructor_unfilled_index))
      {
!       if (constructor_stack->replacement_value)
          error_init ("excess elements in char array initializer");
        constructor_stack->replacement_value = value;
        return;
      }
  
!   if (constructor_stack->replacement_value != 0)
      {
        error_init ("excess elements in struct initializer");
        return;
--- 6015,6030 ----
    if (string_flag
        && constructor_type
        && TREE_CODE (constructor_type) == ARRAY_TYPE
!       && INTEGRAL_TYPE_P (TREE_TYPE (constructor_type))
        && integer_zerop (constructor_unfilled_index))
      {
!       if (constructor_stack->replacement_value.value)
          error_init ("excess elements in char array initializer");
        constructor_stack->replacement_value = value;
        return;
      }
  
!   if (constructor_stack->replacement_value.value != 0)
      {
        error_init ("excess elements in struct initializer");
        return;
*************** process_init_element (tree value)
*** 5906,5915 ****
      {
        /* If value is a compound literal and we'll be just using its
  	 content, don't put it into a SAVE_EXPR.  */
!       if (TREE_CODE (value) != COMPOUND_LITERAL_EXPR
  	  || !require_constant_value
  	  || flag_isoc99)
! 	value = save_expr (value);
      }
  
    while (1)
--- 6057,6066 ----
      {
        /* If value is a compound literal and we'll be just using its
  	 content, don't put it into a SAVE_EXPR.  */
!       if (TREE_CODE (value.value) != COMPOUND_LITERAL_EXPR
  	  || !require_constant_value
  	  || flag_isoc99)
! 	value.value = save_expr (value.value);
      }
  
    while (1)
*************** process_init_element (tree value)
*** 5941,5956 ****
  	    }
  
  	  /* Accept a string constant to initialize a subarray.  */
! 	  if (value != 0
  	      && fieldcode == ARRAY_TYPE
! 	      && TREE_CODE (TREE_TYPE (fieldtype)) == INTEGER_TYPE
  	      && string_flag)
! 	    value = orig_value;
  	  /* Otherwise, if we have come to a subaggregate,
  	     and we don't have an element of its type, push into it.  */
! 	  else if (value != 0 && !constructor_no_implicit
! 		   && value != error_mark_node
! 		   && TYPE_MAIN_VARIANT (TREE_TYPE (value)) != fieldtype
  		   && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
  		       || fieldcode == UNION_TYPE))
  	    {
--- 6092,6107 ----
  	    }
  
  	  /* Accept a string constant to initialize a subarray.  */
! 	  if (value.value != 0
  	      && fieldcode == ARRAY_TYPE
! 	      && INTEGRAL_TYPE_P (TREE_TYPE (fieldtype))
  	      && string_flag)
! 	    value.value = orig_value;
  	  /* Otherwise, if we have come to a subaggregate,
  	     and we don't have an element of its type, push into it.  */
! 	  else if (value.value != 0
! 		   && value.value != error_mark_node
! 		   && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != fieldtype
  		   && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
  		       || fieldcode == UNION_TYPE))
  	    {
*************** process_init_element (tree value)
*** 5958,5967 ****
  	      continue;
  	    }
  
! 	  if (value)
  	    {
  	      push_member_name (constructor_fields);
! 	      output_init_element (value, fieldtype, constructor_fields, 1);
  	      RESTORE_SPELLING_DEPTH (constructor_depth);
  	    }
  	  else
--- 6109,6119 ----
  	      continue;
  	    }
  
! 	  if (value.value)
  	    {
  	      push_member_name (constructor_fields);
! 	      output_init_element (value.value, strict_string,
! 				   fieldtype, constructor_fields, 1);
  	      RESTORE_SPELLING_DEPTH (constructor_depth);
  	    }
  	  else
*************** process_init_element (tree value)
*** 6023,6042 ****
  	     __STDC__ anyway (and we've already complained about the
  	     member-designator already).  */
  	  if (warn_traditional && !in_system_header && !constructor_designated
! 	      && !(value && (integer_zerop (value) || real_zerop (value))))
  	    warning ("traditional C rejects initialization of unions");
  
  	  /* Accept a string constant to initialize a subarray.  */
! 	  if (value != 0
  	      && fieldcode == ARRAY_TYPE
! 	      && TREE_CODE (TREE_TYPE (fieldtype)) == INTEGER_TYPE
  	      && string_flag)
! 	    value = orig_value;
  	  /* Otherwise, if we have come to a subaggregate,
  	     and we don't have an element of its type, push into it.  */
! 	  else if (value != 0 && !constructor_no_implicit
! 		   && value != error_mark_node
! 		   && TYPE_MAIN_VARIANT (TREE_TYPE (value)) != fieldtype
  		   && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
  		       || fieldcode == UNION_TYPE))
  	    {
--- 6175,6195 ----
  	     __STDC__ anyway (and we've already complained about the
  	     member-designator already).  */
  	  if (warn_traditional && !in_system_header && !constructor_designated
! 	      && !(value.value && (integer_zerop (value.value)
! 				   || real_zerop (value.value))))
  	    warning ("traditional C rejects initialization of unions");
  
  	  /* Accept a string constant to initialize a subarray.  */
! 	  if (value.value != 0
  	      && fieldcode == ARRAY_TYPE
! 	      && INTEGRAL_TYPE_P (TREE_TYPE (fieldtype))
  	      && string_flag)
! 	    value.value = orig_value;
  	  /* Otherwise, if we have come to a subaggregate,
  	     and we don't have an element of its type, push into it.  */
! 	  else if (value.value != 0
! 		   && value.value != error_mark_node
! 		   && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != fieldtype
  		   && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
  		       || fieldcode == UNION_TYPE))
  	    {
*************** process_init_element (tree value)
*** 6044,6053 ****
  	      continue;
  	    }
  
! 	  if (value)
  	    {
  	      push_member_name (constructor_fields);
! 	      output_init_element (value, fieldtype, constructor_fields, 1);
  	      RESTORE_SPELLING_DEPTH (constructor_depth);
  	    }
  	  else
--- 6197,6207 ----
  	      continue;
  	    }
  
! 	  if (value.value)
  	    {
  	      push_member_name (constructor_fields);
! 	      output_init_element (value.value, strict_string,
! 				   fieldtype, constructor_fields, 1);
  	      RESTORE_SPELLING_DEPTH (constructor_depth);
  	    }
  	  else
*************** process_init_element (tree value)
*** 6066,6081 ****
  	  enum tree_code eltcode = TREE_CODE (elttype);
  
  	  /* Accept a string constant to initialize a subarray.  */
! 	  if (value != 0
  	      && eltcode == ARRAY_TYPE
! 	      && TREE_CODE (TREE_TYPE (elttype)) == INTEGER_TYPE
  	      && string_flag)
! 	    value = orig_value;
  	  /* Otherwise, if we have come to a subaggregate,
  	     and we don't have an element of its type, push into it.  */
! 	  else if (value != 0 && !constructor_no_implicit
! 		   && value != error_mark_node
! 		   && TYPE_MAIN_VARIANT (TREE_TYPE (value)) != elttype
  		   && (eltcode == RECORD_TYPE || eltcode == ARRAY_TYPE
  		       || eltcode == UNION_TYPE))
  	    {
--- 6220,6235 ----
  	  enum tree_code eltcode = TREE_CODE (elttype);
  
  	  /* Accept a string constant to initialize a subarray.  */
! 	  if (value.value != 0
  	      && eltcode == ARRAY_TYPE
! 	      && INTEGRAL_TYPE_P (TREE_TYPE (elttype))
  	      && string_flag)
! 	    value.value = orig_value;
  	  /* Otherwise, if we have come to a subaggregate,
  	     and we don't have an element of its type, push into it.  */
! 	  else if (value.value != 0
! 		   && value.value != error_mark_node
! 		   && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != elttype
  		   && (eltcode == RECORD_TYPE || eltcode == ARRAY_TYPE
  		       || eltcode == UNION_TYPE))
  	    {
*************** process_init_element (tree value)
*** 6092,6108 ****
  	    }
  
  	  /* Now output the actual element.  */
! 	  if (value)
  	    {
  	      push_array_bounds (tree_low_cst (constructor_index, 0));
! 	      output_init_element (value, elttype, constructor_index, 1);
  	      RESTORE_SPELLING_DEPTH (constructor_depth);
  	    }
  
  	  constructor_index
  	    = size_binop (PLUS_EXPR, constructor_index, bitsize_one_node);
  
! 	  if (! value)
  	    /* If we are doing the bookkeeping for an element that was
  	       directly output as a constructor, we must update
  	       constructor_unfilled_index.  */
--- 6246,6263 ----
  	    }
  
  	  /* Now output the actual element.  */
! 	  if (value.value)
  	    {
  	      push_array_bounds (tree_low_cst (constructor_index, 0));
! 	      output_init_element (value.value, strict_string,
! 				   elttype, constructor_index, 1);
  	      RESTORE_SPELLING_DEPTH (constructor_depth);
  	    }
  
  	  constructor_index
  	    = size_binop (PLUS_EXPR, constructor_index, bitsize_one_node);
  
! 	  if (!value.value)
  	    /* If we are doing the bookkeeping for an element that was
  	       directly output as a constructor, we must update
  	       constructor_unfilled_index.  */
*************** process_init_element (tree value)
*** 6121,6133 ****
  	    }
  
  	  /* Now output the actual element.  */
! 	  if (value)
! 	    output_init_element (value, elttype, constructor_index, 1);
  
  	  constructor_index
  	    = size_binop (PLUS_EXPR, constructor_index, bitsize_one_node);
  
! 	  if (! value)
  	    /* If we are doing the bookkeeping for an element that was
  	       directly output as a constructor, we must update
  	       constructor_unfilled_index.  */
--- 6276,6289 ----
  	    }
  
  	  /* Now output the actual element.  */
! 	  if (value.value)
! 	    output_init_element (value.value, strict_string,
! 				 elttype, constructor_index, 1);
  
  	  constructor_index
  	    = size_binop (PLUS_EXPR, constructor_index, bitsize_one_node);
  
! 	  if (!value.value)
  	    /* If we are doing the bookkeeping for an element that was
  	       directly output as a constructor, we must update
  	       constructor_unfilled_index.  */
*************** process_init_element (tree value)
*** 6136,6150 ****
  
        /* Handle the sole element allowed in a braced initializer
  	 for a scalar variable.  */
!       else if (constructor_fields == 0)
  	{
  	  pedwarn_init ("excess elements in scalar initializer");
  	  break;
  	}
        else
  	{
! 	  if (value)
! 	    output_init_element (value, constructor_type, NULL_TREE, 1);
  	  constructor_fields = 0;
  	}
  
--- 6292,6308 ----
  
        /* Handle the sole element allowed in a braced initializer
  	 for a scalar variable.  */
!       else if (constructor_type != error_mark_node
! 	       && constructor_fields == 0)
  	{
  	  pedwarn_init ("excess elements in scalar initializer");
  	  break;
  	}
        else
  	{
! 	  if (value.value)
! 	    output_init_element (value.value, strict_string,
! 				 constructor_type, NULL_TREE, 1);
  	  constructor_fields = 0;
  	}
  
*************** process_init_element (tree value)
*** 6159,6174 ****
  	  constructor_range_stack = 0;
  	  while (constructor_stack != range_stack->stack)
  	    {
! 	      if (!constructor_stack->implicit)
! 		abort ();
  	      process_init_element (pop_init_level (1));
  	    }
  	  for (p = range_stack;
  	       !p->range_end || tree_int_cst_equal (p->index, p->range_end);
  	       p = p->prev)
  	    {
! 	      if (!constructor_stack->implicit)
! 		abort ();
  	      process_init_element (pop_init_level (1));
  	    }
  
--- 6317,6330 ----
  	  constructor_range_stack = 0;
  	  while (constructor_stack != range_stack->stack)
  	    {
! 	      gcc_assert (constructor_stack->implicit);
  	      process_init_element (pop_init_level (1));
  	    }
  	  for (p = range_stack;
  	       !p->range_end || tree_int_cst_equal (p->index, p->range_end);
  	       p = p->prev)
  	    {
! 	      gcc_assert (constructor_stack->implicit);
  	      process_init_element (pop_init_level (1));
  	    }
  
*************** process_init_element (tree value)
*** 6205,6385 ****
    constructor_range_stack = 0;
  }
  
! /* Build a simple asm-statement, from one string literal.  */
  tree
! simple_asm_stmt (tree expr)
  {
!   STRIP_NOPS (expr);
! 
!   if (TREE_CODE (expr) == ADDR_EXPR)
!     expr = TREE_OPERAND (expr, 0);
! 
!   if (TREE_CODE (expr) == STRING_CST)
!     {
!       tree stmt;
! 
!       /* Simple asm statements are treated as volatile.  */
!       stmt = add_stmt (build_stmt (ASM_STMT, ridpointers[(int) RID_VOLATILE],
! 				   expr, NULL_TREE, NULL_TREE, NULL_TREE));
!       ASM_INPUT_P (stmt) = 1;
!       return stmt;
!     }
! 
!   error ("argument of `asm' is not a constant string");
!   return NULL_TREE;
  }
  
! /* Build an asm-statement, whose components are a CV_QUALIFIER, a
!    STRING, some OUTPUTS, some INPUTS, and some CLOBBERS.  */
! 
  tree
! build_asm_stmt (tree cv_qualifier, tree string, tree outputs, tree inputs,
! 		tree clobbers)
  {
    tree tail;
  
!   if (TREE_CODE (string) != STRING_CST)
!     {
!       error ("asm template is not a string constant");
!       return NULL_TREE;
!     }
  
!   if (cv_qualifier != NULL_TREE
!       && cv_qualifier != ridpointers[(int) RID_VOLATILE])
!     {
!       warning ("%s qualifier ignored on asm",
! 	       IDENTIFIER_POINTER (cv_qualifier));
!       cv_qualifier = NULL_TREE;
!     }
  
!   /* We can remove output conversions that change the type,
!      but not the mode.  */
!   for (tail = outputs; tail; tail = TREE_CHAIN (tail))
      {
        tree output = TREE_VALUE (tail);
  
        STRIP_NOPS (output);
-       TREE_VALUE (tail) = output;
  
!       /* Allow conversions as LHS here.  build_modify_expr as called below
! 	 will do the right thing with them.  */
!       while (TREE_CODE (output) == NOP_EXPR
! 	     || TREE_CODE (output) == CONVERT_EXPR
! 	     || TREE_CODE (output) == FLOAT_EXPR
! 	     || TREE_CODE (output) == FIX_TRUNC_EXPR
! 	     || TREE_CODE (output) == FIX_FLOOR_EXPR
! 	     || TREE_CODE (output) == FIX_ROUND_EXPR
! 	     || TREE_CODE (output) == FIX_CEIL_EXPR)
! 	output = TREE_OPERAND (output, 0);
  
!       lvalue_or_else (TREE_VALUE (tail), "invalid lvalue in asm statement");
!     }
  
-   /* Remove output conversions that change the type but not the mode.  */
-   for (tail = outputs; tail; tail = TREE_CHAIN (tail))
-     {
-       tree output = TREE_VALUE (tail);
-       STRIP_NOPS (output);
        TREE_VALUE (tail) = output;
      }
  
    /* Perform default conversions on array and function inputs.
       Don't do this for other types as it would screw up operands
       expected to be in memory.  */
!   for (tail = inputs; tail; tail = TREE_CHAIN (tail))
!     TREE_VALUE (tail) = default_function_array_conversion (TREE_VALUE (tail));
  
!   return add_stmt (build_stmt (ASM_STMT, cv_qualifier, string,
! 			       outputs, inputs, clobbers));
! }
  
! /* Expand an ASM statement with operands, handling output operands
!    that are not variables or INDIRECT_REFS by transforming such
!    cases into cases that expand_asm_operands can handle.
  
!    Arguments are same as for expand_asm_operands.  */
  
! void
! c_expand_asm_operands (tree string, tree outputs, tree inputs,
! 		       tree clobbers, int vol, location_t locus)
! {
!   int noutputs = list_length (outputs);
!   int i;
!   /* o[I] is the place that output number I should be written.  */
!   tree *o = alloca (noutputs * sizeof (tree));
!   tree tail;
  
!   /* Record the contents of OUTPUTS before it is modified.  */
!   for (i = 0, tail = outputs; tail; tail = TREE_CHAIN (tail), i++)
      {
!       o[i] = TREE_VALUE (tail);
!       if (o[i] == error_mark_node)
! 	return;
      }
  
!   /* Generate the ASM_OPERANDS insn; store into the TREE_VALUEs of
!      OUTPUTS some trees for where the values were actually stored.  */
!   expand_asm_operands (string, outputs, inputs, clobbers, vol, locus);
  
!   /* Copy all the intermediate outputs into the specified outputs.  */
!   for (i = 0, tail = outputs; tail; tail = TREE_CHAIN (tail), i++)
      {
!       if (o[i] != TREE_VALUE (tail))
! 	{
! 	  expand_expr (build_modify_expr (o[i], NOP_EXPR, TREE_VALUE (tail)),
! 		       NULL_RTX, VOIDmode, EXPAND_NORMAL);
! 	  free_temp_slots ();
  
! 	  /* Restore the original value so that it's correct the next
! 	     time we expand this function.  */
! 	  TREE_VALUE (tail) = o[i];
! 	}
!       /* Detect modification of read-only values.
! 	 (Otherwise done by build_modify_expr.)  */
!       else
! 	{
! 	  tree type = TREE_TYPE (o[i]);
! 	  if (TREE_READONLY (o[i])
! 	      || TYPE_READONLY (type)
! 	      || ((TREE_CODE (type) == RECORD_TYPE
! 		   || TREE_CODE (type) == UNION_TYPE)
! 		  && C_TYPE_FIELDS_READONLY (type)))
! 	    readonly_error (o[i], "modification by `asm'");
! 	}
      }
  
!   /* Those MODIFY_EXPRs could do autoincrements.  */
!   emit_queue ();
  }
! 
! /* Expand a C `return' statement.
!    RETVAL is the expression for what to return,
!    or a null pointer for `return;' with no value.  */
  
  tree
! c_expand_return (tree retval)
  {
    tree valtype = TREE_TYPE (TREE_TYPE (current_function_decl));
  
    if (TREE_THIS_VOLATILE (current_function_decl))
!     warning ("function declared `noreturn' has a `return' statement");
  
    if (!retval)
      {
        current_function_returns_null = 1;
        if ((warn_return_type || flag_isoc99)
  	  && valtype != 0 && TREE_CODE (valtype) != VOID_TYPE)
! 	pedwarn_c99 ("`return' with no value, in function returning non-void");
      }
    else if (valtype == 0 || TREE_CODE (valtype) == VOID_TYPE)
      {
        current_function_returns_null = 1;
        if (pedantic || TREE_CODE (TREE_TYPE (retval)) != VOID_TYPE)
! 	pedwarn ("`return' with a value, in function returning void");
      }
    else
      {
!       tree t = convert_for_assignment (valtype, retval, _("return"),
  				       NULL_TREE, NULL_TREE, 0);
        tree res = DECL_RESULT (current_function_decl);
        tree inner;
--- 6361,6546 ----
    constructor_range_stack = 0;
  }
  
! /* Build a complete asm-statement, whose components are a CV_QUALIFIER
!    (guaranteed to be 'volatile' or null) and ARGS (represented using
!    an ASM_EXPR node).  */
  tree
! build_asm_stmt (tree cv_qualifier, tree args)
  {
!   if (!ASM_VOLATILE_P (args) && cv_qualifier)
!     ASM_VOLATILE_P (args) = 1;
!   return add_stmt (args);
  }
  
! /* Build an asm-expr, whose components are a STRING, some OUTPUTS,
!    some INPUTS, and some CLOBBERS.  The latter three may be NULL.
!    SIMPLE indicates whether there was anything at all after the
!    string in the asm expression -- asm("blah") and asm("blah" : )
!    are subtly different.  We use a ASM_EXPR node to represent this.  */
  tree
! build_asm_expr (tree string, tree outputs, tree inputs, tree clobbers,
! 		bool simple)
  {
    tree tail;
+   tree args;
+   int i;
+   const char *constraint;
+   const char **oconstraints;
+   bool allows_mem, allows_reg, is_inout;
+   int ninputs, noutputs;
  
!   ninputs = list_length (inputs);
!   noutputs = list_length (outputs);
!   oconstraints = (const char **) alloca (noutputs * sizeof (const char *));
  
!   string = resolve_asm_operand_names (string, outputs, inputs);
  
!   /* Remove output conversions that change the type but not the mode.  */
!   for (i = 0, tail = outputs; tail; ++i, tail = TREE_CHAIN (tail))
      {
        tree output = TREE_VALUE (tail);
  
+       /* ??? Really, this should not be here.  Users should be using a
+ 	 proper lvalue, dammit.  But there's a long history of using casts
+ 	 in the output operands.  In cases like longlong.h, this becomes a
+ 	 primitive form of typechecking -- if the cast can be removed, then
+ 	 the output operand had a type of the proper width; otherwise we'll
+ 	 get an error.  Gross, but ...  */
        STRIP_NOPS (output);
  
!       if (!lvalue_or_else (output, lv_asm))
! 	output = error_mark_node;
  
!       constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (tail)));
!       oconstraints[i] = constraint;
! 
!       if (parse_output_constraint (&constraint, i, ninputs, noutputs,
! 				   &allows_mem, &allows_reg, &is_inout))
! 	{
! 	  /* If the operand is going to end up in memory,
! 	     mark it addressable.  */
! 	  if (!allows_reg && !c_mark_addressable (output))
! 	    output = error_mark_node;
! 	}
!       else
!         output = error_mark_node;
  
        TREE_VALUE (tail) = output;
      }
  
    /* Perform default conversions on array and function inputs.
       Don't do this for other types as it would screw up operands
       expected to be in memory.  */
!   for (i = 0, tail = inputs; tail; ++i, tail = TREE_CHAIN (tail))
!     {
!       tree input;
  
!       constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (tail)));
!       input = TREE_VALUE (tail);
  
!       input = default_function_array_conversion (input);
  
!       if (parse_input_constraint (&constraint, i, ninputs, noutputs, 0,
! 				  oconstraints, &allows_mem, &allows_reg))
! 	{
! 	  /* If the operand is going to end up in memory,
! 	     mark it addressable.  */
! 	  if (!allows_reg && allows_mem)
! 	    {
! 	      /* Strip the nops as we allow this case.  FIXME, this really
! 		 should be rejected or made deprecated.  */
! 	      STRIP_NOPS (input);
! 	      if (!c_mark_addressable (input))
! 		input = error_mark_node;
! 	  }
! 	}
!       else
! 	input = error_mark_node;
  
!       TREE_VALUE (tail) = input;
!     }
  
!   args = build_stmt (ASM_EXPR, string, outputs, inputs, clobbers);
! 
!   /* Simple asm statements are treated as volatile.  */
!   if (simple)
      {
!       ASM_VOLATILE_P (args) = 1;
!       ASM_INPUT_P (args) = 1;
      }
  
!   return args;
! }
! 
! /* Generate a goto statement to LABEL.  */
  
! tree
! c_finish_goto_label (tree label)
! {
!   tree decl = lookup_label (label);
!   if (!decl)
!     return NULL_TREE;
! 
!   if (C_DECL_UNJUMPABLE_STMT_EXPR (decl))
      {
!       error ("jump into statement expression");
!       return NULL_TREE;
!     }
  
!   if (!C_DECL_UNDEFINABLE_STMT_EXPR (decl))
!     {
!       /* No jump from outside this statement expression context, so
! 	 record that there is a jump from within this context.  */
!       struct c_label_list *nlist;
!       nlist = XOBNEW (&parser_obstack, struct c_label_list);
!       nlist->next = label_context_stack->labels_used;
!       nlist->label = decl;
!       label_context_stack->labels_used = nlist;
      }
  
!   TREE_USED (decl) = 1;
!   return add_stmt (build1 (GOTO_EXPR, void_type_node, decl));
  }
! 
! /* Generate a computed goto statement to EXPR.  */
  
  tree
! c_finish_goto_ptr (tree expr)
! {
!   if (pedantic)
!     pedwarn ("ISO C forbids %<goto *expr;%>");
!   expr = convert (ptr_type_node, expr);
!   return add_stmt (build1 (GOTO_EXPR, void_type_node, expr));
! }
! 
! /* Generate a C `return' statement.  RETVAL is the expression for what
!    to return, or a null pointer for `return;' with no value.  */
! 
! tree
! c_finish_return (tree retval)
  {
    tree valtype = TREE_TYPE (TREE_TYPE (current_function_decl));
  
    if (TREE_THIS_VOLATILE (current_function_decl))
!     warning ("function declared %<noreturn%> has a %<return%> statement");
  
    if (!retval)
      {
        current_function_returns_null = 1;
        if ((warn_return_type || flag_isoc99)
  	  && valtype != 0 && TREE_CODE (valtype) != VOID_TYPE)
! 	pedwarn_c99 ("%<return%> with no value, in "
! 		     "function returning non-void");
      }
    else if (valtype == 0 || TREE_CODE (valtype) == VOID_TYPE)
      {
        current_function_returns_null = 1;
        if (pedantic || TREE_CODE (TREE_TYPE (retval)) != VOID_TYPE)
! 	pedwarn ("%<return%> with a value, in function returning void");
      }
    else
      {
!       tree t = convert_for_assignment (valtype, retval, ic_return,
  				       NULL_TREE, NULL_TREE, 0);
        tree res = DECL_RESULT (current_function_decl);
        tree inner;
*************** c_expand_return (tree retval)
*** 6408,6414 ****
  	      {
  		tree op1 = TREE_OPERAND (inner, 1);
  
! 		while (! POINTER_TYPE_P (TREE_TYPE (op1))
  		       && (TREE_CODE (op1) == NOP_EXPR
  			   || TREE_CODE (op1) == NON_LVALUE_EXPR
  			   || TREE_CODE (op1) == CONVERT_EXPR))
--- 6569,6575 ----
  	      {
  		tree op1 = TREE_OPERAND (inner, 1);
  
! 		while (!POINTER_TYPE_P (TREE_TYPE (op1))
  		       && (TREE_CODE (op1) == NOP_EXPR
  			   || TREE_CODE (op1) == NON_LVALUE_EXPR
  			   || TREE_CODE (op1) == CONVERT_EXPR))
*************** c_expand_return (tree retval)
*** 6424,6435 ****
  	    case ADDR_EXPR:
  	      inner = TREE_OPERAND (inner, 0);
  
! 	      while (TREE_CODE_CLASS (TREE_CODE (inner)) == 'r')
  		inner = TREE_OPERAND (inner, 0);
  
! 	      if (TREE_CODE (inner) == VAR_DECL
! 		  && ! DECL_EXTERNAL (inner)
! 		  && ! TREE_STATIC (inner)
  		  && DECL_CONTEXT (inner) == current_function_decl)
  		warning ("function returns address of local variable");
  	      break;
--- 6585,6597 ----
  	    case ADDR_EXPR:
  	      inner = TREE_OPERAND (inner, 0);
  
! 	      while (REFERENCE_CLASS_P (inner)
! 	             && TREE_CODE (inner) != INDIRECT_REF)
  		inner = TREE_OPERAND (inner, 0);
  
! 	      if (DECL_P (inner)
! 		  && !DECL_EXTERNAL (inner)
! 		  && !TREE_STATIC (inner)
  		  && DECL_CONTEXT (inner) == current_function_decl)
  		warning ("function returns address of local variable");
  	      break;
*************** c_expand_return (tree retval)
*** 6441,6461 ****
  	  break;
  	}
  
!       retval = build (MODIFY_EXPR, TREE_TYPE (res), res, t);
      }
  
!  return add_stmt (build_return_stmt (retval));
  }
  
  struct c_switch {
    /* The SWITCH_STMT being built.  */
    tree switch_stmt;
    /* A splay-tree mapping the low element of a case range to the high
       element, or NULL_TREE if there is no high element.  Used to
       determine whether or not a new case label duplicates an old case
       label.  We need a tree, rather than simply a hash table, because
       of the GNU case range extension.  */
    splay_tree cases;
    /* The next node on the stack.  */
    struct c_switch *next;
  };
--- 6603,6634 ----
  	  break;
  	}
  
!       retval = build2 (MODIFY_EXPR, TREE_TYPE (res), res, t);
      }
  
!   return add_stmt (build_stmt (RETURN_EXPR, retval));
  }
  
  struct c_switch {
    /* The SWITCH_STMT being built.  */
    tree switch_stmt;
+ 
+   /* The original type of the testing expression, i.e. before the
+      default conversion is applied.  */
+   tree orig_type;
+ 
    /* A splay-tree mapping the low element of a case range to the high
       element, or NULL_TREE if there is no high element.  Used to
       determine whether or not a new case label duplicates an old case
       label.  We need a tree, rather than simply a hash table, because
       of the GNU case range extension.  */
    splay_tree cases;
+ 
+   /* Number of nested statement expressions within this switch
+      statement; if nonzero, case and default labels may not
+      appear.  */
+   unsigned int blocked_stmt_expr;
+ 
    /* The next node on the stack.  */
    struct c_switch *next;
  };
*************** struct c_switch {
*** 6466,6472 ****
     during the processing of the body of a function, and we never
     collect at that point.  */
  
! static struct c_switch *switch_stack;
  
  /* Start a C switch statement, testing expression EXP.  Return the new
     SWITCH_STMT.  */
--- 6639,6645 ----
     during the processing of the body of a function, and we never
     collect at that point.  */
  
! struct c_switch *c_switch_stack;
  
  /* Start a C switch statement, testing expression EXP.  Return the new
     SWITCH_STMT.  */
*************** c_start_case (tree exp)
*** 6483,6493 ****
        code = TREE_CODE (TREE_TYPE (exp));
        orig_type = TREE_TYPE (exp);
  
!       if (! INTEGRAL_TYPE_P (orig_type)
  	  && code != ERROR_MARK)
  	{
  	  error ("switch quantity not an integer");
  	  exp = integer_zero_node;
  	}
        else
  	{
--- 6656,6667 ----
        code = TREE_CODE (TREE_TYPE (exp));
        orig_type = TREE_TYPE (exp);
  
!       if (!INTEGRAL_TYPE_P (orig_type)
  	  && code != ERROR_MARK)
  	{
  	  error ("switch quantity not an integer");
  	  exp = integer_zero_node;
+ 	  orig_type = error_mark_node;
  	}
        else
  	{
*************** c_start_case (tree exp)
*** 6496,6502 ****
  	  if (warn_traditional && !in_system_header
  	      && (type == long_integer_type_node
  		  || type == long_unsigned_type_node))
! 	    warning ("`long' switch expression not converted to `int' in ISO C");
  
  	  exp = default_conversion (exp);
  	  type = TREE_TYPE (exp);
--- 6670,6677 ----
  	  if (warn_traditional && !in_system_header
  	      && (type == long_integer_type_node
  		  || type == long_unsigned_type_node))
! 	    warning ("%<long%> switch expression not converted to "
! 		     "%<int%> in ISO C");
  
  	  exp = default_conversion (exp);
  	  type = TREE_TYPE (exp);
*************** c_start_case (tree exp)
*** 6504,6516 ****
      }
  
    /* Add this new SWITCH_STMT to the stack.  */
!   cs = xmalloc (sizeof (*cs));
    cs->switch_stmt = build_stmt (SWITCH_STMT, exp, NULL_TREE, orig_type);
    cs->cases = splay_tree_new (case_compare, NULL, NULL);
!   cs->next = switch_stack;
!   switch_stack = cs;
  
!   return add_stmt (switch_stack->switch_stmt);
  }
  
  /* Process a case label.  */
--- 6679,6693 ----
      }
  
    /* Add this new SWITCH_STMT to the stack.  */
!   cs = XNEW (struct c_switch);
    cs->switch_stmt = build_stmt (SWITCH_STMT, exp, NULL_TREE, orig_type);
+   cs->orig_type = orig_type;
    cs->cases = splay_tree_new (case_compare, NULL, NULL);
!   cs->blocked_stmt_expr = 0;
!   cs->next = c_switch_stack;
!   c_switch_stack = cs;
  
!   return add_stmt (cs->switch_stmt);
  }
  
  /* Process a case label.  */
*************** do_case (tree low_value, tree high_value
*** 6520,6545 ****
  {
    tree label = NULL_TREE;
  
!   if (switch_stack)
      {
!       bool switch_was_empty_p = (SWITCH_BODY (switch_stack->switch_stmt) == NULL_TREE);
! 
!       label = c_add_case_label (switch_stack->cases,
! 				SWITCH_COND (switch_stack->switch_stmt),
  				low_value, high_value);
        if (label == error_mark_node)
  	label = NULL_TREE;
!       else if (switch_was_empty_p)
! 	{
! 	  /* Attach the first case label to the SWITCH_BODY.  */
! 	  SWITCH_BODY (switch_stack->switch_stmt) = TREE_CHAIN (switch_stack->switch_stmt);
! 	  TREE_CHAIN (switch_stack->switch_stmt) = NULL_TREE;
! 	}
      }
    else if (low_value)
      error ("case label not within a switch statement");
    else
!     error ("`default' label not within a switch statement");
  
    return label;
  }
--- 6697,6724 ----
  {
    tree label = NULL_TREE;
  
!   if (c_switch_stack && !c_switch_stack->blocked_stmt_expr)
      {
!       label = c_add_case_label (c_switch_stack->cases,
! 				SWITCH_STMT_COND (c_switch_stack->switch_stmt),
! 				c_switch_stack->orig_type,
  				low_value, high_value);
        if (label == error_mark_node)
  	label = NULL_TREE;
!     }
!   else if (c_switch_stack && c_switch_stack->blocked_stmt_expr)
!     {
!       if (low_value)
! 	error ("case label in statement expression not containing "
! 	       "enclosing switch statement");
!       else
! 	error ("%<default%> label in statement expression not containing "
! 	       "enclosing switch statement");
      }
    else if (low_value)
      error ("case label not within a switch statement");
    else
!     error ("%<default%> label not within a switch statement");
  
    return label;
  }
*************** do_case (tree low_value, tree high_value
*** 6547,6565 ****
  /* Finish the switch statement.  */
  
  void
! c_finish_case (void)
  {
!   struct c_switch *cs = switch_stack;
  
!   /* Rechain the next statements to the SWITCH_STMT.  */
!   last_tree = cs->switch_stmt;
  
    /* Pop the stack.  */
!   switch_stack = switch_stack->next;
    splay_tree_delete (cs->cases);
!   free (cs);
  }
  
  /* Build a binary-operation expression without default conversions.
     CODE is the kind of expression to build.
     This function differs from `build' in several ways:
--- 6726,7205 ----
  /* Finish the switch statement.  */
  
  void
! c_finish_case (tree body)
  {
!   struct c_switch *cs = c_switch_stack;
  
!   SWITCH_STMT_BODY (cs->switch_stmt) = body;
! 
!   gcc_assert (!cs->blocked_stmt_expr);
! 
!   /* Emit warnings as needed.  */
!   c_do_switch_warnings (cs->cases, cs->switch_stmt);
  
    /* Pop the stack.  */
!   c_switch_stack = cs->next;
    splay_tree_delete (cs->cases);
!   XDELETE (cs);
! }
! 
! /* Emit an if statement.  IF_LOCUS is the location of the 'if'.  COND,
!    THEN_BLOCK and ELSE_BLOCK are expressions to be used; ELSE_BLOCK
!    may be null.  NESTED_IF is true if THEN_BLOCK contains another IF
!    statement, and was not surrounded with parenthesis.  */
! 
! void
! c_finish_if_stmt (location_t if_locus, tree cond, tree then_block,
! 		  tree else_block, bool nested_if)
! {
!   tree stmt;
! 
!   /* Diagnose an ambiguous else if if-then-else is nested inside if-then.  */
!   if (warn_parentheses && nested_if && else_block == NULL)
!     {
!       tree inner_if = then_block;
! 
!       /* We know from the grammar productions that there is an IF nested
! 	 within THEN_BLOCK.  Due to labels and c99 conditional declarations,
! 	 it might not be exactly THEN_BLOCK, but should be the last
! 	 non-container statement within.  */
!       while (1)
! 	switch (TREE_CODE (inner_if))
! 	  {
! 	  case COND_EXPR:
! 	    goto found;
! 	  case BIND_EXPR:
! 	    inner_if = BIND_EXPR_BODY (inner_if);
! 	    break;
! 	  case STATEMENT_LIST:
! 	    inner_if = expr_last (then_block);
! 	    break;
! 	  case TRY_FINALLY_EXPR:
! 	  case TRY_CATCH_EXPR:
! 	    inner_if = TREE_OPERAND (inner_if, 0);
! 	    break;
! 	  default:
! 	    gcc_unreachable ();
! 	  }
!     found:
! 
!       if (COND_EXPR_ELSE (inner_if))
! 	 warning ("%Hsuggest explicit braces to avoid ambiguous %<else%>",
! 		  &if_locus);
!     }
! 
!   /* Diagnose ";" via the special empty statement node that we create.  */
!   if (extra_warnings)
!     {
!       if (TREE_CODE (then_block) == NOP_EXPR && !TREE_TYPE (then_block))
! 	{
! 	  if (!else_block)
! 	    warning ("%Hempty body in an if-statement",
! 		     EXPR_LOCUS (then_block));
! 	  then_block = alloc_stmt_list ();
! 	}
!       if (else_block
! 	  && TREE_CODE (else_block) == NOP_EXPR
! 	  && !TREE_TYPE (else_block))
! 	{
! 	  warning ("%Hempty body in an else-statement",
! 		   EXPR_LOCUS (else_block));
! 	  else_block = alloc_stmt_list ();
! 	}
!     }
! 
!   stmt = build3 (COND_EXPR, NULL_TREE, cond, then_block, else_block);
!   SET_EXPR_LOCATION (stmt, if_locus);
!   add_stmt (stmt);
! }
! 
! /* Emit a general-purpose loop construct.  START_LOCUS is the location of
!    the beginning of the loop.  COND is the loop condition.  COND_IS_FIRST
!    is false for DO loops.  INCR is the FOR increment expression.  BODY is
!    the statement controlled by the loop.  BLAB is the break label.  CLAB is
!    the continue label.  Everything is allowed to be NULL.  */
! 
! void
! c_finish_loop (location_t start_locus, tree cond, tree incr, tree body,
! 	       tree blab, tree clab, bool cond_is_first)
! {
!   tree entry = NULL, exit = NULL, t;
! 
!   /* If the condition is zero don't generate a loop construct.  */
!   if (cond && integer_zerop (cond))
!     {
!       if (cond_is_first)
! 	{
! 	  t = build_and_jump (&blab);
! 	  SET_EXPR_LOCATION (t, start_locus);
! 	  add_stmt (t);
! 	}
!     }
!   else
!     {
!       tree top = build1 (LABEL_EXPR, void_type_node, NULL_TREE);
!  
!       /* If we have an exit condition, then we build an IF with gotos either
!          out of the loop, or to the top of it.  If there's no exit condition,
!          then we just build a jump back to the top.  */
!       exit = build_and_jump (&LABEL_EXPR_LABEL (top));
!  
!       if (cond && !integer_nonzerop (cond))
!         {
!           /* Canonicalize the loop condition to the end.  This means
!              generating a branch to the loop condition.  Reuse the
!              continue label, if possible.  */
!           if (cond_is_first)
!             {
!               if (incr || !clab)
!                 {
!                   entry = build1 (LABEL_EXPR, void_type_node, NULL_TREE);
!                   t = build_and_jump (&LABEL_EXPR_LABEL (entry));
!                 }
!               else
!                 t = build1 (GOTO_EXPR, void_type_node, clab);
! 	      SET_EXPR_LOCATION (t, start_locus);
!               add_stmt (t);
!             }
!  
! 	  t = build_and_jump (&blab);
!           exit = build3 (COND_EXPR, void_type_node, cond, exit, t);
!           exit = fold (exit);
! 	  if (cond_is_first)
!             SET_EXPR_LOCATION (exit, start_locus);
! 	  else
!             SET_EXPR_LOCATION (exit, input_location);
!         }
!  
!       add_stmt (top);
!     }
!  
!   if (body)
!     add_stmt (body);
!   if (clab)
!     add_stmt (build1 (LABEL_EXPR, void_type_node, clab));
!   if (incr)
!     add_stmt (incr);
!   if (entry)
!     add_stmt (entry);
!   if (exit)
!     add_stmt (exit);
!   if (blab)
!     add_stmt (build1 (LABEL_EXPR, void_type_node, blab));
! }
! 
! tree
! c_finish_bc_stmt (tree *label_p, bool is_break)
! {
!   bool skip;
!   tree label = *label_p;
! 
!   /* In switch statements break is sometimes stylistically used after
!      a return statement.  This can lead to spurious warnings about
!      control reaching the end of a non-void function when it is
!      inlined.  Note that we are calling block_may_fallthru with
!      language specific tree nodes; this works because
!      block_may_fallthru returns true when given something it does not
!      understand.  */
!   skip = !block_may_fallthru (cur_stmt_list);
! 
!   if (!label)
!     {
!       if (!skip)
! 	*label_p = label = create_artificial_label ();
!     }
!   else if (TREE_CODE (label) != LABEL_DECL)
!     {
!       if (is_break)
! 	error ("break statement not within loop or switch");
!       else
!         error ("continue statement not within a loop");
!       return NULL_TREE;
!     }
! 
!   if (skip)
!     return NULL_TREE;
! 
!   return add_stmt (build1 (GOTO_EXPR, void_type_node, label));
! }
! 
! /* A helper routine for c_process_expr_stmt and c_finish_stmt_expr.  */
! 
! static void
! emit_side_effect_warnings (tree expr)
! {
!   if (expr == error_mark_node)
!     ;
!   else if (!TREE_SIDE_EFFECTS (expr))
!     {
!       if (!VOID_TYPE_P (TREE_TYPE (expr)) && !TREE_NO_WARNING (expr))
! 	warning ("%Hstatement with no effect",
! 		 EXPR_HAS_LOCATION (expr) ? EXPR_LOCUS (expr) : &input_location);
!     }
!   else if (warn_unused_value)
!     warn_if_unused_value (expr, input_location);
! }
! 
! /* Process an expression as if it were a complete statement.  Emit
!    diagnostics, but do not call ADD_STMT.  */
! 
! tree
! c_process_expr_stmt (tree expr)
! {
!   if (!expr)
!     return NULL_TREE;
! 
!   /* Do default conversion if safe and possibly important,
!      in case within ({...}).  */
!   if ((TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE
!        && (flag_isoc99 || lvalue_p (expr)))
!       || TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE)
!     expr = default_conversion (expr);
! 
!   if (warn_sequence_point)
!     verify_sequence_points (expr);
! 
!   if (TREE_TYPE (expr) != error_mark_node
!       && !COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (expr))
!       && TREE_CODE (TREE_TYPE (expr)) != ARRAY_TYPE)
!     error ("expression statement has incomplete type");
! 
!   /* If we're not processing a statement expression, warn about unused values.
!      Warnings for statement expressions will be emitted later, once we figure
!      out which is the result.  */
!   if (!STATEMENT_LIST_STMT_EXPR (cur_stmt_list)
!       && (extra_warnings || warn_unused_value))
!     emit_side_effect_warnings (expr);
! 
!   /* If the expression is not of a type to which we cannot assign a line
!      number, wrap the thing in a no-op NOP_EXPR.  */
!   if (DECL_P (expr) || CONSTANT_CLASS_P (expr))
!     expr = build1 (NOP_EXPR, TREE_TYPE (expr), expr);
! 
!   if (EXPR_P (expr))
!     SET_EXPR_LOCATION (expr, input_location);
! 
!   return expr;
! }
! 
! /* Emit an expression as a statement.  */
! 
! tree
! c_finish_expr_stmt (tree expr)
! {
!   if (expr)
!     return add_stmt (c_process_expr_stmt (expr));
!   else
!     return NULL;
! }
! 
! /* Do the opposite and emit a statement as an expression.  To begin,
!    create a new binding level and return it.  */
! 
! tree
! c_begin_stmt_expr (void)
! {
!   tree ret;
!   struct c_label_context *nstack;
!   struct c_label_list *glist;
! 
!   /* We must force a BLOCK for this level so that, if it is not expanded
!      later, there is a way to turn off the entire subtree of blocks that
!      are contained in it.  */
!   keep_next_level ();
!   ret = c_begin_compound_stmt (true);
!   if (c_switch_stack)
!     {
!       c_switch_stack->blocked_stmt_expr++;
!       gcc_assert (c_switch_stack->blocked_stmt_expr != 0);
!     }
!   for (glist = label_context_stack->labels_used;
!        glist != NULL;
!        glist = glist->next)
!     {
!       C_DECL_UNDEFINABLE_STMT_EXPR (glist->label) = 1;
!     }
!   nstack = XOBNEW (&parser_obstack, struct c_label_context);
!   nstack->labels_def = NULL;
!   nstack->labels_used = NULL;
!   nstack->next = label_context_stack;
!   label_context_stack = nstack;
! 
!   /* Mark the current statement list as belonging to a statement list.  */
!   STATEMENT_LIST_STMT_EXPR (ret) = 1;
! 
!   return ret;
! }
! 
! tree
! c_finish_stmt_expr (tree body)
! {
!   tree last, type, tmp, val;
!   tree *last_p;
!   struct c_label_list *dlist, *glist, *glist_prev = NULL;
! 
!   body = c_end_compound_stmt (body, true);
!   if (c_switch_stack)
!     {
!       gcc_assert (c_switch_stack->blocked_stmt_expr != 0);
!       c_switch_stack->blocked_stmt_expr--;
!     }
!   /* It is no longer possible to jump to labels defined within this
!      statement expression.  */
!   for (dlist = label_context_stack->labels_def;
!        dlist != NULL;
!        dlist = dlist->next)
!     {
!       C_DECL_UNJUMPABLE_STMT_EXPR (dlist->label) = 1;
!     }
!   /* It is again possible to define labels with a goto just outside
!      this statement expression.  */
!   for (glist = label_context_stack->next->labels_used;
!        glist != NULL;
!        glist = glist->next)
!     {
!       C_DECL_UNDEFINABLE_STMT_EXPR (glist->label) = 0;
!       glist_prev = glist;
!     }
!   if (glist_prev != NULL)
!     glist_prev->next = label_context_stack->labels_used;
!   else
!     label_context_stack->next->labels_used = label_context_stack->labels_used;
!   label_context_stack = label_context_stack->next;
! 
!   /* Locate the last statement in BODY.  See c_end_compound_stmt
!      about always returning a BIND_EXPR.  */
!   last_p = &BIND_EXPR_BODY (body);
!   last = BIND_EXPR_BODY (body);
! 
!  continue_searching:
!   if (TREE_CODE (last) == STATEMENT_LIST)
!     {
!       tree_stmt_iterator i;
! 
!       /* This can happen with degenerate cases like ({ }).  No value.  */
!       if (!TREE_SIDE_EFFECTS (last))
! 	return body;
! 
!       /* If we're supposed to generate side effects warnings, process
! 	 all of the statements except the last.  */
!       if (extra_warnings || warn_unused_value)
! 	{
! 	  for (i = tsi_start (last); !tsi_one_before_end_p (i); tsi_next (&i))
! 	    emit_side_effect_warnings (tsi_stmt (i));
! 	}
!       else
! 	i = tsi_last (last);
!       last_p = tsi_stmt_ptr (i);
!       last = *last_p;
!     }
! 
!   /* If the end of the list is exception related, then the list was split
!      by a call to push_cleanup.  Continue searching.  */
!   if (TREE_CODE (last) == TRY_FINALLY_EXPR
!       || TREE_CODE (last) == TRY_CATCH_EXPR)
!     {
!       last_p = &TREE_OPERAND (last, 0);
!       last = *last_p;
!       goto continue_searching;
!     }
! 
!   /* In the case that the BIND_EXPR is not necessary, return the
!      expression out from inside it.  */
!   if (last == error_mark_node
!       || (last == BIND_EXPR_BODY (body)
! 	  && BIND_EXPR_VARS (body) == NULL))
!     return last;
! 
!   /* Extract the type of said expression.  */
!   type = TREE_TYPE (last);
! 
!   /* If we're not returning a value at all, then the BIND_EXPR that
!      we already have is a fine expression to return.  */
!   if (!type || VOID_TYPE_P (type))
!     return body;
! 
!   /* Now that we've located the expression containing the value, it seems
!      silly to make voidify_wrapper_expr repeat the process.  Create a
!      temporary of the appropriate type and stick it in a TARGET_EXPR.  */
!   tmp = create_tmp_var_raw (type, NULL);
! 
!   /* Unwrap a no-op NOP_EXPR as added by c_finish_expr_stmt.  This avoids
!      tree_expr_nonnegative_p giving up immediately.  */
!   val = last;
!   if (TREE_CODE (val) == NOP_EXPR
!       && TREE_TYPE (val) == TREE_TYPE (TREE_OPERAND (val, 0)))
!     val = TREE_OPERAND (val, 0);
! 
!   *last_p = build2 (MODIFY_EXPR, void_type_node, tmp, val);
!   SET_EXPR_LOCUS (*last_p, EXPR_LOCUS (last));
! 
!   return build4 (TARGET_EXPR, type, tmp, body, NULL_TREE, NULL_TREE);
! }
! 
! /* Begin and end compound statements.  This is as simple as pushing
!    and popping new statement lists from the tree.  */
! 
! tree
! c_begin_compound_stmt (bool do_scope)
! {
!   tree stmt = push_stmt_list ();
!   if (do_scope)
!     push_scope ();
!   return stmt;
! }
! 
! tree
! c_end_compound_stmt (tree stmt, bool do_scope)
! {
!   tree block = NULL;
! 
!   if (do_scope)
!     {
!       if (c_dialect_objc ())
! 	objc_clear_super_receiver ();
!       block = pop_scope ();
!     }
! 
!   stmt = pop_stmt_list (stmt);
!   stmt = c_build_bind_expr (block, stmt);
! 
!   /* If this compound statement is nested immediately inside a statement
!      expression, then force a BIND_EXPR to be created.  Otherwise we'll
!      do the wrong thing for ({ { 1; } }) or ({ 1; { } }).  In particular,
!      STATEMENT_LISTs merge, and thus we can lose track of what statement
!      was really last.  */
!   if (cur_stmt_list
!       && STATEMENT_LIST_STMT_EXPR (cur_stmt_list)
!       && TREE_CODE (stmt) != BIND_EXPR)
!     {
!       stmt = build3 (BIND_EXPR, void_type_node, NULL, stmt, NULL);
!       TREE_SIDE_EFFECTS (stmt) = 1;
!     }
! 
!   return stmt;
  }
  
+ /* Queue a cleanup.  CLEANUP is an expression/statement to be executed
+    when the current scope is exited.  EH_ONLY is true when this is not
+    meant to apply to normal control flow transfer.  */
+ 
+ void
+ push_cleanup (tree ARG_UNUSED (decl), tree cleanup, bool eh_only)
+ {
+   enum tree_code code;
+   tree stmt, list;
+   bool stmt_expr;
+ 
+   code = eh_only ? TRY_CATCH_EXPR : TRY_FINALLY_EXPR;
+   stmt = build_stmt (code, NULL, cleanup);
+   add_stmt (stmt);
+   stmt_expr = STATEMENT_LIST_STMT_EXPR (cur_stmt_list);
+   list = push_stmt_list ();
+   TREE_OPERAND (stmt, 0) = list;
+   STATEMENT_LIST_STMT_EXPR (list) = stmt_expr;
+ }
+ 
  /* Build a binary-operation expression without default conversions.
     CODE is the kind of expression to build.
     This function differs from `build' in several ways:
*************** build_binary_op (enum tree_code code, tr
*** 6698,6703 ****
--- 7338,7348 ----
  	  && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
  	      || code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE))
  	{
+ 	  if (code0 == COMPLEX_TYPE || code0 == VECTOR_TYPE)
+ 	    code0 = TREE_CODE (TREE_TYPE (TREE_TYPE (op0)));
+ 	  if (code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE)
+ 	    code1 = TREE_CODE (TREE_TYPE (TREE_TYPE (op1)));
+ 
  	  if (!(code0 == INTEGER_TYPE && code1 == INTEGER_TYPE))
  	    resultcode = RDIV_EXPR;
  	  else
*************** build_binary_op (enum tree_code code, tr
*** 6706,6714 ****
  	       undefined if the quotient can't be represented in the
  	       computation mode.  We shorten only if unsigned or if
  	       dividing by something we know != -1.  */
! 	    shorten = (TREE_UNSIGNED (TREE_TYPE (orig_op0))
  		       || (TREE_CODE (op1) == INTEGER_CST
! 			   && ! integer_all_onesp (op1)));
  	  common = 1;
  	}
        break;
--- 7351,7359 ----
  	       undefined if the quotient can't be represented in the
  	       computation mode.  We shorten only if unsigned or if
  	       dividing by something we know != -1.  */
! 	    shorten = (TYPE_UNSIGNED (TREE_TYPE (orig_op0))
  		       || (TREE_CODE (op1) == INTEGER_CST
! 			   && !integer_all_onesp (op1)));
  	  common = 1;
  	}
        break;
*************** build_binary_op (enum tree_code code, tr
*** 6733,6741 ****
  	     on some targets, since the modulo instruction is undefined if the
  	     quotient can't be represented in the computation mode.  We shorten
  	     only if unsigned or if dividing by something we know != -1.  */
! 	  shorten = (TREE_UNSIGNED (TREE_TYPE (orig_op0))
  		     || (TREE_CODE (op1) == INTEGER_CST
! 			 && ! integer_all_onesp (op1)));
  	  common = 1;
  	}
        break;
--- 7378,7386 ----
  	     on some targets, since the modulo instruction is undefined if the
  	     quotient can't be represented in the computation mode.  We shorten
  	     only if unsigned or if dividing by something we know != -1.  */
! 	  shorten = (TYPE_UNSIGNED (TREE_TYPE (orig_op0))
  		     || (TREE_CODE (op1) == INTEGER_CST
! 			 && !integer_all_onesp (op1)));
  	  common = 1;
  	}
        break;
*************** build_binary_op (enum tree_code code, tr
*** 6754,6761 ****
  	     but that does not mean the operands should be
  	     converted to ints!  */
  	  result_type = integer_type_node;
! 	  op0 = c_common_truthvalue_conversion (op0);
! 	  op1 = c_common_truthvalue_conversion (op1);
  	  converted = 1;
  	}
        break;
--- 7399,7406 ----
  	     but that does not mean the operands should be
  	     converted to ints!  */
  	  result_type = integer_type_node;
! 	  op0 = lang_hooks.truthvalue_conversion (op0);
! 	  op1 = lang_hooks.truthvalue_conversion (op1);
  	  converted = 1;
  	}
        break;
*************** build_binary_op (enum tree_code code, tr
*** 6773,6779 ****
  		warning ("right shift count is negative");
  	      else
  		{
! 		  if (! integer_zerop (op1))
  		    short_shift = 1;
  
  		  if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
--- 7418,7424 ----
  		warning ("right shift count is negative");
  	      else
  		{
! 		  if (!integer_zerop (op1))
  		    short_shift = 1;
  
  		  if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
*************** build_binary_op (enum tree_code code, tr
*** 6815,6843 ****
  	}
        break;
  
-     case RROTATE_EXPR:
-     case LROTATE_EXPR:
-       if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
- 	{
- 	  if (TREE_CODE (op1) == INTEGER_CST && skip_evaluation == 0)
- 	    {
- 	      if (tree_int_cst_sgn (op1) < 0)
- 		warning ("shift count is negative");
- 	      else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
- 		warning ("shift count >= width of type");
- 	    }
- 
- 	  /* Use the type of the value to be shifted.  */
- 	  result_type = type0;
- 	  /* Convert the shift-count to an integer, regardless of size
- 	     of value being shifted.  */
- 	  if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
- 	    op1 = convert (integer_type_node, op1);
- 	  /* Avoid converting op1 to result_type later.  */
- 	  converted = 1;
- 	}
-       break;
- 
      case EQ_EXPR:
      case NE_EXPR:
        if (warn_float_equal && (code0 == REAL_TYPE || code1 == REAL_TYPE))
--- 7460,7465 ----
*************** build_binary_op (enum tree_code code, tr
*** 6858,6877 ****
  	     Otherwise, the targets must be compatible
  	     and both must be object or both incomplete.  */
  	  if (comp_target_types (type0, type1, 1))
! 	    result_type = common_type (type0, type1);
  	  else if (VOID_TYPE_P (tt0))
  	    {
  	      /* op0 != orig_op0 detects the case of something
  		 whose value is 0 but which isn't a valid null ptr const.  */
  	      if (pedantic && (!integer_zerop (op0) || op0 != orig_op0)
  		  && TREE_CODE (tt1) == FUNCTION_TYPE)
! 		pedwarn ("ISO C forbids comparison of `void *' with function pointer");
  	    }
  	  else if (VOID_TYPE_P (tt1))
  	    {
  	      if (pedantic && (!integer_zerop (op1) || op1 != orig_op1)
  		  && TREE_CODE (tt0) == FUNCTION_TYPE)
! 		pedwarn ("ISO C forbids comparison of `void *' with function pointer");
  	    }
  	  else
  	    pedwarn ("comparison of distinct pointer types lacks a cast");
--- 7480,7501 ----
  	     Otherwise, the targets must be compatible
  	     and both must be object or both incomplete.  */
  	  if (comp_target_types (type0, type1, 1))
! 	    result_type = common_pointer_type (type0, type1);
  	  else if (VOID_TYPE_P (tt0))
  	    {
  	      /* op0 != orig_op0 detects the case of something
  		 whose value is 0 but which isn't a valid null ptr const.  */
  	      if (pedantic && (!integer_zerop (op0) || op0 != orig_op0)
  		  && TREE_CODE (tt1) == FUNCTION_TYPE)
! 		pedwarn ("ISO C forbids comparison of %<void *%>"
! 			 " with function pointer");
  	    }
  	  else if (VOID_TYPE_P (tt1))
  	    {
  	      if (pedantic && (!integer_zerop (op1) || op1 != orig_op1)
  		  && TREE_CODE (tt0) == FUNCTION_TYPE)
! 		pedwarn ("ISO C forbids comparison of %<void *%>"
! 			 " with function pointer");
  	    }
  	  else
  	    pedwarn ("comparison of distinct pointer types lacks a cast");
*************** build_binary_op (enum tree_code code, tr
*** 6897,6924 ****
  	}
        break;
  
-     case MAX_EXPR:
-     case MIN_EXPR:
-       if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
- 	  && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
- 	shorten = 1;
-       else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
- 	{
- 	  if (comp_target_types (type0, type1, 1))
- 	    {
- 	      result_type = common_type (type0, type1);
- 	      if (pedantic
- 		  && TREE_CODE (TREE_TYPE (type0)) == FUNCTION_TYPE)
- 		pedwarn ("ISO C forbids ordered comparisons of pointers to functions");
- 	    }
- 	  else
- 	    {
- 	      result_type = ptr_type_node;
- 	      pedwarn ("comparison of distinct pointer types lacks a cast");
- 	    }
- 	}
-       break;
- 
      case LE_EXPR:
      case GE_EXPR:
      case LT_EXPR:
--- 7521,7526 ----
*************** build_binary_op (enum tree_code code, tr
*** 6931,6937 ****
  	{
  	  if (comp_target_types (type0, type1, 1))
  	    {
! 	      result_type = common_type (type0, type1);
  	      if (!COMPLETE_TYPE_P (TREE_TYPE (type0))
  		  != !COMPLETE_TYPE_P (TREE_TYPE (type1)))
  		pedwarn ("comparison of complete and incomplete pointers");
--- 7533,7539 ----
  	{
  	  if (comp_target_types (type0, type1, 1))
  	    {
! 	      result_type = common_pointer_type (type0, type1);
  	      if (!COMPLETE_TYPE_P (TREE_TYPE (type0))
  		  != !COMPLETE_TYPE_P (TREE_TYPE (type1)))
  		pedwarn ("comparison of complete and incomplete pointers");
*************** build_binary_op (enum tree_code code, tr
*** 6971,6996 ****
  	}
        break;
  
-     case UNORDERED_EXPR:
-     case ORDERED_EXPR:
-     case UNLT_EXPR:
-     case UNLE_EXPR:
-     case UNGT_EXPR:
-     case UNGE_EXPR:
-     case UNEQ_EXPR:
-       build_type = integer_type_node;
-       if (code0 != REAL_TYPE || code1 != REAL_TYPE)
- 	{
- 	  error ("unordered comparison on non-floating point argument");
- 	  return error_mark_node;
- 	}
-       common = 1;
-       break;
- 
      default:
!       break;
      }
  
    if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE || code0 == COMPLEX_TYPE
         || code0 == VECTOR_TYPE)
        &&
--- 7573,7585 ----
  	}
        break;
  
      default:
!       gcc_unreachable ();
      }
  
+   if (code0 == ERROR_MARK || code1 == ERROR_MARK)
+     return error_mark_node;
+ 
    if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE || code0 == COMPLEX_TYPE
         || code0 == VECTOR_TYPE)
        &&
*************** build_binary_op (enum tree_code code, tr
*** 7000,7006 ****
        int none_complex = (code0 != COMPLEX_TYPE && code1 != COMPLEX_TYPE);
  
        if (shorten || common || short_compare)
! 	result_type = common_type (type0, type1);
  
        /* For certain operations (which identify themselves by shorten != 0)
  	 if both args were extended from the same smaller type,
--- 7589,7595 ----
        int none_complex = (code0 != COMPLEX_TYPE && code1 != COMPLEX_TYPE);
  
        if (shorten || common || short_compare)
! 	result_type = c_common_type (type0, type1);
  
        /* For certain operations (which identify themselves by shorten != 0)
  	 if both args were extended from the same smaller type,
*************** build_binary_op (enum tree_code code, tr
*** 7019,7025 ****
  	  tree arg0 = get_narrower (op0, &unsigned0);
  	  tree arg1 = get_narrower (op1, &unsigned1);
  	  /* UNS is 1 if the operation to be done is an unsigned one.  */
! 	  int uns = TREE_UNSIGNED (result_type);
  	  tree type;
  
  	  final_type = result_type;
--- 7608,7614 ----
  	  tree arg0 = get_narrower (op0, &unsigned0);
  	  tree arg1 = get_narrower (op1, &unsigned1);
  	  /* UNS is 1 if the operation to be done is an unsigned one.  */
! 	  int uns = TYPE_UNSIGNED (result_type);
  	  tree type;
  
  	  final_type = result_type;
*************** build_binary_op (enum tree_code code, tr
*** 7030,7040 ****
  	  if ((TYPE_PRECISION (TREE_TYPE (op0))
  	       == TYPE_PRECISION (TREE_TYPE (arg0)))
  	      && TREE_TYPE (op0) != final_type)
! 	    unsigned0 = TREE_UNSIGNED (TREE_TYPE (op0));
  	  if ((TYPE_PRECISION (TREE_TYPE (op1))
  	       == TYPE_PRECISION (TREE_TYPE (arg1)))
  	      && TREE_TYPE (op1) != final_type)
! 	    unsigned1 = TREE_UNSIGNED (TREE_TYPE (op1));
  
  	  /* Now UNSIGNED0 is 1 if ARG0 zero-extends to FINAL_TYPE.  */
  
--- 7619,7629 ----
  	  if ((TYPE_PRECISION (TREE_TYPE (op0))
  	       == TYPE_PRECISION (TREE_TYPE (arg0)))
  	      && TREE_TYPE (op0) != final_type)
! 	    unsigned0 = TYPE_UNSIGNED (TREE_TYPE (op0));
  	  if ((TYPE_PRECISION (TREE_TYPE (op1))
  	       == TYPE_PRECISION (TREE_TYPE (arg1)))
  	      && TREE_TYPE (op1) != final_type)
! 	    unsigned1 = TYPE_UNSIGNED (TREE_TYPE (op1));
  
  	  /* Now UNSIGNED0 is 1 if ARG0 zero-extends to FINAL_TYPE.  */
  
*************** build_binary_op (enum tree_code code, tr
*** 7058,7064 ****
  	      && (unsigned0 || !uns))
  	    result_type
  	      = c_common_signed_or_unsigned_type
! 	      (unsigned0, common_type (TREE_TYPE (arg0), TREE_TYPE (arg1)));
  	  else if (TREE_CODE (arg0) == INTEGER_CST
  		   && (unsigned1 || !uns)
  		   && (TYPE_PRECISION (TREE_TYPE (arg1))
--- 7647,7653 ----
  	      && (unsigned0 || !uns))
  	    result_type
  	      = c_common_signed_or_unsigned_type
! 	      (unsigned0, c_common_type (TREE_TYPE (arg0), TREE_TYPE (arg1)));
  	  else if (TREE_CODE (arg0) == INTEGER_CST
  		   && (unsigned1 || !uns)
  		   && (TYPE_PRECISION (TREE_TYPE (arg1))
*************** build_binary_op (enum tree_code code, tr
*** 7089,7102 ****
  	  final_type = result_type;
  
  	  if (arg0 == op0 && final_type == TREE_TYPE (op0))
! 	    unsigned_arg = TREE_UNSIGNED (TREE_TYPE (op0));
  
  	  if (TYPE_PRECISION (TREE_TYPE (arg0)) < TYPE_PRECISION (result_type)
  	      /* We can shorten only if the shift count is less than the
  		 number of bits in the smaller type size.  */
  	      && compare_tree_int (op1, TYPE_PRECISION (TREE_TYPE (arg0))) < 0
  	      /* We cannot drop an unsigned shift after sign-extension.  */
! 	      && (!TREE_UNSIGNED (final_type) || unsigned_arg))
  	    {
  	      /* Do an unsigned shift if the operand was zero-extended.  */
  	      result_type
--- 7678,7691 ----
  	  final_type = result_type;
  
  	  if (arg0 == op0 && final_type == TREE_TYPE (op0))
! 	    unsigned_arg = TYPE_UNSIGNED (TREE_TYPE (op0));
  
  	  if (TYPE_PRECISION (TREE_TYPE (arg0)) < TYPE_PRECISION (result_type)
  	      /* We can shorten only if the shift count is less than the
  		 number of bits in the smaller type size.  */
  	      && compare_tree_int (op1, TYPE_PRECISION (TREE_TYPE (arg0))) < 0
  	      /* We cannot drop an unsigned shift after sign-extension.  */
! 	      && (!TYPE_UNSIGNED (final_type) || unsigned_arg))
  	    {
  	      /* Do an unsigned shift if the operand was zero-extended.  */
  	      result_type
*************** build_binary_op (enum tree_code code, tr
*** 7132,7139 ****
  
  	  if (warn_sign_compare && skip_evaluation == 0)
  	    {
! 	      int op0_signed = ! TREE_UNSIGNED (TREE_TYPE (orig_op0));
! 	      int op1_signed = ! TREE_UNSIGNED (TREE_TYPE (orig_op1));
  	      int unsignedp0, unsignedp1;
  	      tree primop0 = get_narrower (op0, &unsignedp0);
  	      tree primop1 = get_narrower (op1, &unsignedp1);
--- 7721,7728 ----
  
  	  if (warn_sign_compare && skip_evaluation == 0)
  	    {
! 	      int op0_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op0));
! 	      int op1_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op1));
  	      int unsignedp0, unsignedp1;
  	      tree primop0 = get_narrower (op0, &unsignedp0);
  	      tree primop1 = get_narrower (op1, &unsignedp1);
*************** build_binary_op (enum tree_code code, tr
*** 7152,7158 ****
  		 Do not warn if the comparison is being done in a signed type,
  		 since the signed type will only be chosen if it can represent
  		 all the values of the unsigned type.  */
! 	      if (! TREE_UNSIGNED (result_type))
  		/* OK */;
                /* Do not warn if both operands are the same signedness.  */
                else if (op0_signed == op1_signed)
--- 7741,7747 ----
  		 Do not warn if the comparison is being done in a signed type,
  		 since the signed type will only be chosen if it can represent
  		 all the values of the unsigned type.  */
! 	      if (!TYPE_UNSIGNED (result_type))
  		/* OK */;
                /* Do not warn if both operands are the same signedness.  */
                else if (op0_signed == op1_signed)
*************** build_binary_op (enum tree_code code, tr
*** 7171,7177 ****
  		     constant expression involving such literals or a
  		     conditional expression involving such literals)
  		     and it is non-negative.  */
! 		  if (c_tree_expr_nonnegative_p (sop))
  		    /* OK */;
  		  /* Do not warn if the comparison is an equality operation,
  		     the unsigned quantity is an integral constant, and it
--- 7760,7766 ----
  		     constant expression involving such literals or a
  		     conditional expression involving such literals)
  		     and it is non-negative.  */
! 		  if (tree_expr_nonnegative_p (sop))
  		    /* OK */;
  		  /* Do not warn if the comparison is an equality operation,
  		     the unsigned quantity is an integral constant, and it
*************** build_binary_op (enum tree_code code, tr
*** 7187,7193 ****
  		  else if (TREE_CODE (uop) == INTEGER_CST
  			   && TREE_CODE (TREE_TYPE (uop)) == ENUMERAL_TYPE
  			   && int_fits_type_p
! 			   (TYPE_MAX_VALUE (TREE_TYPE(uop)),
  			    c_common_signed_type (result_type)))
  		    /* OK */;
  		  else
--- 7776,7782 ----
  		  else if (TREE_CODE (uop) == INTEGER_CST
  			   && TREE_CODE (TREE_TYPE (uop)) == ENUMERAL_TYPE
  			   && int_fits_type_p
! 			   (TYPE_MAX_VALUE (TREE_TYPE (uop)),
  			    c_common_signed_type (result_type)))
  		    /* OK */;
  		  else
*************** build_binary_op (enum tree_code code, tr
*** 7235,7241 ****
  		      if (bits < TYPE_PRECISION (result_type)
  			  && bits < HOST_BITS_PER_WIDE_INT && unsignedp)
  			{
! 			  mask = (~ (HOST_WIDE_INT) 0) << bits;
  			  if ((mask & constant) != mask)
  			    warning ("comparison of promoted ~unsigned with constant");
  			}
--- 7824,7830 ----
  		      if (bits < TYPE_PRECISION (result_type)
  			  && bits < HOST_BITS_PER_WIDE_INT && unsignedp)
  			{
! 			  mask = (~(HOST_WIDE_INT) 0) << bits;
  			  if ((mask & constant) != mask)
  			    warning ("comparison of promoted ~unsigned with constant");
  			}
*************** build_binary_op (enum tree_code code, tr
*** 7263,7290 ****
        return error_mark_node;
      }
  
!   if (! converted)
      {
        if (TREE_TYPE (op0) != result_type)
  	op0 = convert (result_type, op0);
        if (TREE_TYPE (op1) != result_type)
  	op1 = convert (result_type, op1);
      }
  
    if (build_type == NULL_TREE)
      build_type = result_type;
  
    {
!     tree result = build (resultcode, build_type, op0, op1);
!     tree folded;
  
      /* Treat expressions in initializers specially as they can't trap.  */
!     folded = require_constant_value ? fold_initializer (result)
  				    : fold (result);
!     if (folded == result)
!       TREE_CONSTANT (folded) = TREE_CONSTANT (op0) & TREE_CONSTANT (op1);
      if (final_type != 0)
!       return convert (final_type, folded);
!     return folded;
    }
  }
--- 7852,7882 ----
        return error_mark_node;
      }
  
!   if (!converted)
      {
        if (TREE_TYPE (op0) != result_type)
  	op0 = convert (result_type, op0);
        if (TREE_TYPE (op1) != result_type)
  	op1 = convert (result_type, op1);
+ 
+       /* This can happen if one operand has a vector type, and the other
+ 	 has a different type.  */
+       if (TREE_CODE (op0) == ERROR_MARK || TREE_CODE (op1) == ERROR_MARK)
+ 	return error_mark_node;
      }
  
    if (build_type == NULL_TREE)
      build_type = result_type;
  
    {
!     tree result = build2 (resultcode, build_type, op0, op1);
  
      /* Treat expressions in initializers specially as they can't trap.  */
!     result = require_constant_value ? fold_initializer (result)
  				    : fold (result);
! 
      if (final_type != 0)
!       result = convert (final_type, result);
!     return result;
    }
  }
diff -Nrcpad gcc-3.4.3/gcc/c.opt gcc-4.0.0/gcc/c.opt
*** gcc-3.4.3/gcc/c.opt	Wed Feb 18 00:09:03 2004
--- gcc-4.0.0/gcc/c.opt	Wed Apr  6 19:35:31 2005
***************
*** 1,5 ****
  ; Options for the C, ObjC, C++ and ObjC++ front ends.
! ; Copyright (C) 2003 Free Software Foundation, Inc.
  ;
  ; This file is part of GCC.
  ;
--- 1,5 ----
  ; Options for the C, ObjC, C++ and ObjC++ front ends.
! ; Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
  ;
  ; This file is part of GCC.
  ;
***************
*** 36,42 ****
  ; "JoinedOrMissing" instead of "Joined".  If the argument to a switch
  ; is a non-negative integer, you can specify "UInteger" and the switch
  ; decoder will convert the argument for you, or complain to the user
! ; if the argument is invalid.
  
  ; The third field is the help text to output with --help.  This is
  ; automatically line-wrapped on output.  Normally the switch is output
--- 36,49 ----
  ; "JoinedOrMissing" instead of "Joined".  If the argument to a switch
  ; is a non-negative integer, you can specify "UInteger" and the switch
  ; decoder will convert the argument for you, or complain to the user
! ; if the argument is invalid.  "Var(name,set)" creates an integer
! ; variable "name".  The variable is declared and initialized to value
! ; given by "Init(value)" (or zero if this property is not defined).
! ; When the option is passed to compiler, this variable is set to "set"
! ; if value passed through the flag is nonzero, !"set" if value is zero,
! ; or to value if "set" is omitted.  If "VarExists"  is specified, the
! ; declaration for the variable is not created.  If "Report" is specified,
! ; the flag is output with -fverbose-asm.
  
  ; The third field is the help text to output with --help.  This is
  ; automatically line-wrapped on output.  Normally the switch is output
*************** C ObjC C++ ObjC++ Joined Separate
*** 93,105 ****
  E
  C ObjC C++ ObjC++ Undocumented
  
  H
  C ObjC C++ ObjC++
  Print the name of header files as they are used
  
  I
  C ObjC C++ ObjC++ Joined Separate
! -I <dir>	Add <dir> to the end of the main include path.  -I- gives more include path control; see info documentation
  
  M
  C ObjC C++ ObjC++
--- 100,116 ----
  E
  C ObjC C++ ObjC++ Undocumented
  
+ F
+ C ObjC C++ ObjC++ Joined Separate
+ -F <dir>	Add <dir> to the end of the main framework include path
+ 
  H
  C ObjC C++ ObjC++
  Print the name of header files as they are used
  
  I
  C ObjC C++ ObjC++ Joined Separate
! -I <dir>	Add <dir> to the end of the main include path
  
  M
  C ObjC C++ ObjC++
*************** C ObjC C++ ObjC++ Joined Separate
*** 146,167 ****
  -U<macro>	Undefine <macro>
  
  Wabi
! C++ ObjC++
  
  Wall
  C ObjC C++ ObjC++
  Enable most warning messages
  
  Wbad-function-cast
! C ObjC
  Warn about casting functions to incompatible types
  
  Wcast-qual
! C ObjC C++ ObjC++
  Warn about casts which discard qualifiers
  
  Wchar-subscripts
! C ObjC C++ ObjC++
  Warn about subscripts whose type is \"char\"
  
  Wcomment
--- 157,179 ----
  -U<macro>	Undefine <macro>
  
  Wabi
! C++ ObjC++ Var(warn_abi)
! Warn about things that will change when compiling with an ABI-compliant compiler
  
  Wall
  C ObjC C++ ObjC++
  Enable most warning messages
  
  Wbad-function-cast
! C ObjC Var(warn_bad_function_cast)
  Warn about casting functions to incompatible types
  
  Wcast-qual
! C ObjC C++ ObjC++ Var(warn_cast_qual)
  Warn about casts which discard qualifiers
  
  Wchar-subscripts
! C ObjC C++ ObjC++ Var(warn_char_subscripts)
  Warn about subscripts whose type is \"char\"
  
  Wcomment
*************** C ObjC C++ ObjC++
*** 173,199 ****
  Synonym for -Wcomment
  
  Wconversion
! C ObjC C++ ObjC++
  Warn about possibly confusing type conversions
  
  Wctor-dtor-privacy
! C++ ObjC++
  Warn when all constructors and destructors are private
  
  Wdeclaration-after-statement
! C ObjC
  Warn when a declaration is found after a statement
  
  Wdeprecated
! C++ ObjC++
  Warn about deprecated compiler features
  
  Wdiv-by-zero
! C ObjC
  Warn about compile-time integer division by zero
  
  Weffc++
! C++ ObjC++
  Warn about violations of Effective C++ style rules
  
  Wendif-labels
--- 185,211 ----
  Synonym for -Wcomment
  
  Wconversion
! C ObjC C++ ObjC++ Var(warn_conversion)
  Warn about possibly confusing type conversions
  
  Wctor-dtor-privacy
! C++ ObjC++ Var(warn_ctor_dtor_privacy)
  Warn when all constructors and destructors are private
  
  Wdeclaration-after-statement
! C ObjC Var(warn_declaration_after_statement)
  Warn when a declaration is found after a statement
  
  Wdeprecated
! C++ ObjC++ Var(warn_deprecated) Init(1)
  Warn about deprecated compiler features
  
  Wdiv-by-zero
! C ObjC Var(warn_div_by_zero) Init(1)
  Warn about compile-time integer division by zero
  
  Weffc++
! C++ ObjC++ Var(warn_ecpp)
  Warn about violations of Effective C++ style rules
  
  Wendif-labels
*************** C ObjC RejectNegative
*** 209,215 ****
  Make implicit function declarations an error
  
  Wfloat-equal
! C ObjC C++ ObjC++
  Warn if testing floating point numbers for equality
  
  Wformat
--- 221,227 ----
  Make implicit function declarations an error
  
  Wfloat-equal
! C ObjC C++ ObjC++ Var(warn_float_equal)
  Warn if testing floating point numbers for equality
  
  Wformat
*************** C ObjC C++ ObjC++
*** 217,256 ****
  Warn about printf/scanf/strftime/strfmon format string anomalies
  
  Wformat-extra-args
! C ObjC C++ ObjC++
  Warn if passing too many arguments to a function for its format string
  
  Wformat-nonliteral
! C ObjC C++ ObjC++
  Warn about format strings that are not literals
  
  Wformat-security
! C ObjC C++ ObjC++
  Warn about possible security problems with format functions
  
  Wformat-y2k
! C ObjC C++ ObjC++
  Warn about strftime formats yielding 2-digit years
  
  Wformat-zero-length
! C ObjC
  
  Wformat=
  C ObjC C++ ObjC++ Joined
  
  Winit-self
! C ObjC C++ ObjC++
  Warn about variables which are initialized to themselves.
  
  Wimplicit
  C ObjC C++ ObjC++
  
  Wimplicit-function-declaration
! C ObjC
  Warn about implicit function declarations
  
  Wimplicit-int
! C ObjC
  Warn when a declaration does not specify a type
  
  Wimport
--- 229,269 ----
  Warn about printf/scanf/strftime/strfmon format string anomalies
  
  Wformat-extra-args
! C ObjC C++ ObjC++ Var(warn_format_extra_args)
  Warn if passing too many arguments to a function for its format string
  
  Wformat-nonliteral
! C ObjC C++ ObjC++ Var(warn_format_nonliteral)
  Warn about format strings that are not literals
  
  Wformat-security
! C ObjC C++ ObjC++ Var(warn_format_security)
  Warn about possible security problems with format functions
  
  Wformat-y2k
! C ObjC C++ ObjC++ Var(warn_format_y2k)
  Warn about strftime formats yielding 2-digit years
  
  Wformat-zero-length
! C ObjC Var(warn_format_zero_length)
! Warn about zero-length formats
  
  Wformat=
  C ObjC C++ ObjC++ Joined
  
  Winit-self
! C ObjC C++ ObjC++ Var(warn_init_self)
  Warn about variables which are initialized to themselves.
  
  Wimplicit
  C ObjC C++ ObjC++
  
  Wimplicit-function-declaration
! C ObjC Var(mesg_implicit_function_declaration) Init(-1)
  Warn about implicit function declarations
  
  Wimplicit-int
! C ObjC Var(warn_implicit_int)
  Warn when a declaration does not specify a type
  
  Wimport
*************** C ObjC C++ ObjC++
*** 258,264 ****
  Deprecated.  This switch has no effect.
  
  Winvalid-offsetof
! C++ ObjC++
  Warn about invalid uses of the \"offsetof\" macro
  
  Winvalid-pch
--- 271,277 ----
  Deprecated.  This switch has no effect.
  
  Winvalid-offsetof
! C++ ObjC++ Var(warn_invalid_offsetof) Init(1)
  Warn about invalid uses of the \"offsetof\" macro
  
  Winvalid-pch
*************** C ObjC C++ ObjC++
*** 266,272 ****
  Warn about PCH files that are found but not used
  
  Wlong-long
! C ObjC C++ ObjC++
  Do not warn about using \"long long\" when -pedantic
  
  Wmain
--- 279,285 ----
  Warn about PCH files that are found but not used
  
  Wlong-long
! C ObjC C++ ObjC++ Var(warn_long_long) Init(1)
  Do not warn about using \"long long\" when -pedantic
  
  Wmain
*************** C ObjC
*** 274,292 ****
  Warn about suspicious declarations of \"main\"
  
  Wmissing-braces
! C ObjC C++ ObjC++
  Warn about possibly missing braces around initializers
  
  Wmissing-declarations
! C ObjC
  Warn about global functions without previous declarations
  
  Wmissing-format-attribute
! C ObjC C++ ObjC++
  Warn about functions which might be candidates for format attributes
  
  Wmissing-prototypes
! C ObjC
  Warn about global functions without prototypes
  
  Wmultichar
--- 287,313 ----
  Warn about suspicious declarations of \"main\"
  
  Wmissing-braces
! C ObjC C++ ObjC++ Var(warn_missing_braces)
  Warn about possibly missing braces around initializers
  
  Wmissing-declarations
! C ObjC Var(warn_missing_declarations)
  Warn about global functions without previous declarations
  
+ Wmissing-field-initializers
+ C ObjC C++ ObjC++ Var(warn_missing_field_initializers) Init(-1)
+ Warn about missing fields in struct initializers
+ 
  Wmissing-format-attribute
! C ObjC C++ ObjC++ Var(warn_missing_format_attribute)
  Warn about functions which might be candidates for format attributes
  
+ Wmissing-include-dirs
+ C ObjC C++ ObjC++
+ Warn about user-specified include directories that do not exist
+ 
  Wmissing-prototypes
! C ObjC Var(warn_missing_prototypes)
  Warn about global functions without prototypes
  
  Wmultichar
*************** C ObjC C++ ObjC++
*** 294,347 ****
  Warn about use of multi-character character constants
  
  Wnested-externs
! C ObjC
  Warn about \"extern\" declarations not at file scope
  
  Wnon-template-friend
! C++ ObjC++
  Warn when non-templatized friend functions are declared within a template
  
  Wnon-virtual-dtor
! C++ ObjC++
  Warn about non-virtual destructors
  
  Wnonnull
! C ObjC
  
  Wold-style-cast
! C++ ObjC++
  Warn if a C-style cast is used in a program
  
  Wold-style-definition
! C ObjC
  Warn if an old-style parameter definition is used
  
  Woverloaded-virtual
! C++ ObjC++
  Warn about overloaded virtual function names
  
  Wparentheses
! C ObjC C++ ObjC++
  Warn about possibly missing parentheses
  
  Wpmf-conversions
! C++ ObjC++
  Warn when converting the type of pointers to member functions
  
  Wpointer-arith
! C ObjC C++ ObjC++
  Warn about function pointer arithmetic
  
  Wprotocol
! ObjC ObjC++
  Warn if inherited methods are unimplemented
  
  Wredundant-decls
! C ObjC C++ ObjC++
  Warn about multiple declarations of the same object
  
  Wreorder
! C++ ObjC++
  Warn when the compiler reorders code
  
  Wreturn-type
--- 315,369 ----
  Warn about use of multi-character character constants
  
  Wnested-externs
! C ObjC Var(warn_nested_externs)
  Warn about \"extern\" declarations not at file scope
  
  Wnon-template-friend
! C++ ObjC++ Var(warn_nontemplate_friend) Init(1)
  Warn when non-templatized friend functions are declared within a template
  
  Wnon-virtual-dtor
! C++ ObjC++ Var(warn_nonvdtor)
  Warn about non-virtual destructors
  
  Wnonnull
! C ObjC Var(warn_nonnull)
! Warn about NULL being passed to argument slots marked as requiring non-NULL
  
  Wold-style-cast
! C++ ObjC++ Var(warn_old_style_cast)
  Warn if a C-style cast is used in a program
  
  Wold-style-definition
! C ObjC Var(warn_old_style_definition)
  Warn if an old-style parameter definition is used
  
  Woverloaded-virtual
! C++ ObjC++ Var(warn_overloaded_virtual)
  Warn about overloaded virtual function names
  
  Wparentheses
! C ObjC C++ ObjC++ Var(warn_parentheses)
  Warn about possibly missing parentheses
  
  Wpmf-conversions
! C++ ObjC++ Var(warn_pmf2ptr) Init(1)
  Warn when converting the type of pointers to member functions
  
  Wpointer-arith
! C ObjC C++ ObjC++ Var(warn_pointer_arith)
  Warn about function pointer arithmetic
  
  Wprotocol
! ObjC ObjC++ Var(warn_protocol) Init(1)
  Warn if inherited methods are unimplemented
  
  Wredundant-decls
! C ObjC C++ ObjC++ Var(warn_redundant_decls)
  Warn about multiple declarations of the same object
  
  Wreorder
! C++ ObjC++ Var(warn_reorder)
  Warn when the compiler reorders code
  
  Wreturn-type
*************** C ObjC C++ ObjC++
*** 349,375 ****
  Warn whenever a function's return type defaults to \"int\" (C), or about inconsistent return types (C++)
  
  Wselector
! ObjC ObjC++
  Warn if a selector has multiple methods
  
  Wsequence-point
! C ObjC
  Warn about possible violations of sequence point rules
  
  Wsign-compare
! C ObjC C++ ObjC++
  Warn about signed-unsigned comparisons
  
  Wsign-promo
! C++ ObjC++
  Warn when overload promotes from unsigned to signed
  
  Wstrict-prototypes
! C ObjC
  Warn about unprototyped function declarations
  
  Wsynth
! C++ ObjC++
  Warn when synthesis behavior differs from Cfront
  
  Wsystem-headers
--- 371,397 ----
  Warn whenever a function's return type defaults to \"int\" (C), or about inconsistent return types (C++)
  
  Wselector
! ObjC ObjC++ Var(warn_selector)
  Warn if a selector has multiple methods
  
  Wsequence-point
! C ObjC C++ ObjC++ Var(warn_sequence_point)
  Warn about possible violations of sequence point rules
  
  Wsign-compare
! C ObjC C++ ObjC++ Var(warn_sign_compare) Init(-1)
  Warn about signed-unsigned comparisons
  
  Wsign-promo
! C++ ObjC++ Var(warn_sign_promo)
  Warn when overload promotes from unsigned to signed
  
  Wstrict-prototypes
! C ObjC Var(warn_strict_prototypes)
  Warn about unprototyped function declarations
  
  Wsynth
! C++ ObjC++ Var(warn_synth)
  Warn when synthesis behavior differs from Cfront
  
  Wsystem-headers
*************** C ObjC C++ ObjC++
*** 377,383 ****
  Do not suppress warnings from system headers
  
  Wtraditional
! C ObjC
  Warn about features not present in traditional C
  
  Wtrigraphs
--- 399,405 ----
  Do not suppress warnings from system headers
  
  Wtraditional
! C ObjC Var(warn_traditional)
  Warn about features not present in traditional C
  
  Wtrigraphs
*************** C ObjC C++ ObjC++
*** 385,391 ****
  Warn if trigraphs are encountered that might affect the meaning of the program
  
  Wundeclared-selector
! ObjC ObjC++
  
  Wundef
  C ObjC C++ ObjC++
--- 407,414 ----
  Warn if trigraphs are encountered that might affect the meaning of the program
  
  Wundeclared-selector
! ObjC ObjC++ Var(warn_undeclared_selector)
! Warn about @selector()s without previously declared methods
  
  Wundef
  C ObjC C++ ObjC++
*************** Wunused-macros
*** 399,411 ****
  C ObjC C++ ObjC++
  Warn about macros defined in the main file that are not used
  
  Wwrite-strings
  C ObjC C++ ObjC++
  Give strings the type \"array of char\"
  
  ansi
  C ObjC C++ ObjC++
! A synonym for -std=c89.  In a future version of GCC it will become synonymous with -std=c99 instead
  
  d
  C ObjC C++ ObjC++ Joined
--- 422,442 ----
  C ObjC C++ ObjC++
  Warn about macros defined in the main file that are not used
  
+ Wvariadic-macros
+ C ObjC C++ ObjC++
+ Do not warn about using variadic macros when -pedantic
+ 
  Wwrite-strings
  C ObjC C++ ObjC++
  Give strings the type \"array of char\"
  
+ Wpointer-sign
+ C ObjC Var(warn_pointer_sign) Init(1)
+ Warn when a pointer differs in signedness in an assignment.
+ 
  ansi
  C ObjC C++ ObjC++
! A synonym for -std=c89 (for C) or -std=c++98 (for C++).
  
  d
  C ObjC C++ ObjC++ Joined
*************** fdollars-in-identifiers
*** 461,470 ****
  C ObjC C++ ObjC++
  Permit '$' as an identifier character
  
- fdump-
- C ObjC C++ ObjC++ Joined RejectNegative
- -fdump-<type>	Dump various compiler internals to a file
- 
  felide-constructors
  C++ ObjC++
  
--- 492,497 ----
*************** C ObjC C++ ObjC++ Joined RejectNegative
*** 481,487 ****
  
  finput-charset=
  C ObjC C++ ObjC++ Joined RejectNegative
! -finput-charset=<cset>      Specify the default character set for source files.
  
  
  fexternal-templates
--- 508,514 ----
  
  finput-charset=
  C ObjC C++ ObjC++ Joined RejectNegative
! -finput-charset=<cset>	Specify the default character set for source files.
  
  
  fexternal-templates
*************** fobjc-exceptions
*** 569,574 ****
--- 596,605 ----
  ObjC ObjC++
  Enable Objective-C exception and synchronization syntax
  
+ fobjc-sjlj-exceptions
+ ObjC ObjC++
+ Enable Objective-C setjmp exception handling runtime
+ 
  foperator-names
  C++ ObjC++
  Recognize C++ kewords like \"compl\" and \"xor\"
*************** Enable optional diagnostics
*** 580,585 ****
--- 611,620 ----
  fpch-deps
  C ObjC C++ ObjC++
  
+ fpch-preprocess
+ C ObjC C++ ObjC++
+ Look for and use PCH files even when preprocessing
+ 
  fpermissive
  C++ ObjC++
  Downgrade conformance errors to warnings
*************** C++ ObjC++ Joined RejectNegative UIntege
*** 644,649 ****
--- 679,688 ----
  fthis-is-variable
  C++ ObjC++
  
+ fthreadsafe-statics
+ C++ ObjC++
+ -fno-threadsafe-statics	Do not generate thread-safe code for initializing local statics.
+ 
  funsigned-bitfields
  C ObjC C++ ObjC++
  When \"signed\" or \"unsigned\" is not given make the bitfield unsigned
*************** fuse-cxa-atexit
*** 656,661 ****
--- 695,704 ----
  C++ ObjC++
  Use __cxa_atexit to register destructors
  
+ fvisibility-inlines-hidden
+ C++ ObjC++
+ Marks all inlined methods as having hidden visibility
+ 
  fvtable-gc
  C++ ObjC++
  Discard unused virtual functions
*************** isystem
*** 712,717 ****
--- 755,764 ----
  C ObjC C++ ObjC++ Joined Separate
  -isystem <dir>	Add <dir> to the start of the system include path
  
+ iquote
+ C ObjC C++ ObjC++ Joined Separate
+ -iquote <dir>	Add <dir> to the end of the quote include path
+ 
  iwithprefix
  C ObjC C++ ObjC++ Joined Separate
  -iwithprefix <dir>	Add <dir> to the end of the system include path
*************** Deprecated in favor of -std=gnu99
*** 788,794 ****
  
  std=iso9899:1990
  C ObjC
! Deprecated in favor of -std=c89
  
  std=iso9899:199409
  C ObjC
--- 835,841 ----
  
  std=iso9899:1990
  C ObjC
! Conform to the ISO 1990 C standard
  
  std=iso9899:199409
  C ObjC
*************** Conform to the ISO 1990 C standard as am
*** 796,806 ****
  
  std=iso9899:1999
  C ObjC
! Deprecated in favor of -std=c99
  
  std=iso9899:199x
  C ObjC
! Deprecated in favor of -std=c99
  
  traditional-cpp
  C ObjC C++ ObjC++
--- 843,853 ----
  
  std=iso9899:1999
  C ObjC
! Conform to the ISO 1999 C standard
  
  std=iso9899:199x
  C ObjC
! Deprecated in favor of -std=iso9899:1999
  
  traditional-cpp
  C ObjC C++ ObjC++
diff -Nrcpad gcc-3.4.3/gcc/caller-save.c gcc-4.0.0/gcc/caller-save.c
*** gcc-3.4.3/gcc/caller-save.c	Sun Dec 21 14:08:32 2003
--- gcc-4.0.0/gcc/caller-save.c	Tue Nov 23 23:10:16 2004
***************
*** 1,6 ****
  /* Save and restore call-clobbered registers which are live across a call.
     Copyright (C) 1989, 1992, 1994, 1995, 1997, 1998,
!    1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
--- 1,6 ----
  /* Save and restore call-clobbered registers which are live across a call.
     Copyright (C) 1989, 1992, 1994, 1995, 1997, 1998,
!    1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
*************** Software Foundation, 59 Temple Place - S
*** 24,32 ****
  #include "coretypes.h"
  #include "tm.h"
  #include "rtl.h"
  #include "insn-config.h"
  #include "flags.h"
- #include "regs.h"
  #include "hard-reg-set.h"
  #include "recog.h"
  #include "basic-block.h"
--- 24,32 ----
  #include "coretypes.h"
  #include "tm.h"
  #include "rtl.h"
+ #include "regs.h"
  #include "insn-config.h"
  #include "flags.h"
  #include "hard-reg-set.h"
  #include "recog.h"
  #include "basic-block.h"
*************** init_caller_save (void)
*** 160,167 ****
  	 [(int) MODE_BASE_REG_CLASS (regno_save_mode [i][1])], i))
        break;
  
!   if (i == FIRST_PSEUDO_REGISTER)
!     abort ();
  
    addr_reg = gen_rtx_REG (Pmode, i);
  
--- 160,166 ----
  	 [(int) MODE_BASE_REG_CLASS (regno_save_mode [i][1])], i))
        break;
  
!   gcc_assert (i < FIRST_PSEUDO_REGISTER);
  
    addr_reg = gen_rtx_REG (Pmode, i);
  
*************** setup_save_areas (void)
*** 300,306 ****
        {
  	unsigned int regno = reg_renumber[i];
  	unsigned int endregno
! 	  = regno + HARD_REGNO_NREGS (regno, GET_MODE (regno_reg_rtx[i]));
  
  	for (r = regno; r < endregno; r++)
  	  if (call_used_regs[r])
--- 299,305 ----
        {
  	unsigned int regno = reg_renumber[i];
  	unsigned int endregno
! 	  = regno + hard_regno_nregs[regno][GET_MODE (regno_reg_rtx[i])];
  
  	for (r = regno; r < endregno; r++)
  	  if (call_used_regs[r])
*************** save_call_clobbered_regs (void)
*** 381,390 ****
  
        next = chain->next;
  
!       if (chain->is_caller_save_insn)
! 	abort ();
  
!       if (GET_RTX_CLASS (code) == 'i')
  	{
  	  /* If some registers have been saved, see if INSN references
  	     any of them.  We must restore them before the insn if so.  */
--- 380,388 ----
  
        next = chain->next;
  
!       gcc_assert (!chain->is_caller_save_insn);
  
!       if (INSN_P (insn))
  	{
  	  /* If some registers have been saved, see if INSN references
  	     any of them.  We must restore them before the insn if so.  */
*************** save_call_clobbered_regs (void)
*** 410,417 ****
  
  	  if (code == CALL_INSN && ! find_reg_note (insn, REG_NORETURN, NULL))
  	    {
! 	      int regno;
  	      HARD_REG_SET hard_regs_to_save;
  
  	      /* Use the register life information in CHAIN to compute which
  		 regs are live during the call.  */
--- 408,416 ----
  
  	  if (code == CALL_INSN && ! find_reg_note (insn, REG_NORETURN, NULL))
  	    {
! 	      unsigned regno;
  	      HARD_REG_SET hard_regs_to_save;
+ 	      reg_set_iterator rsi;
  
  	      /* Use the register life information in CHAIN to compute which
  		 regs are live during the call.  */
*************** save_call_clobbered_regs (void)
*** 427,453 ****
  	      /* Look through all live pseudos, mark their hard registers
  		 and choose proper mode for saving.  */
  	      EXECUTE_IF_SET_IN_REG_SET
! 		(&chain->live_throughout, FIRST_PSEUDO_REGISTER, regno,
! 		 {
! 		   int r = reg_renumber[regno];
! 		   int nregs;
! 
! 		   if (r >= 0)
! 		     {
! 		       enum machine_mode mode;
  
! 		       nregs = HARD_REGNO_NREGS (r, PSEUDO_REGNO_MODE (regno));
! 		       mode = HARD_REGNO_CALLER_SAVE_MODE
! 			        (r, nregs, PSEUDO_REGNO_MODE (regno));
! 		       if (GET_MODE_BITSIZE (mode)
! 			   > GET_MODE_BITSIZE (save_mode[r]))
! 			 save_mode[r] = mode;
! 		       while (nregs-- > 0)
! 			 SET_HARD_REG_BIT (hard_regs_to_save, r + nregs);
! 		     }
! 		   else
! 		     abort ();
! 		 });
  
  	      /* Record all registers set in this call insn.  These don't need
  		 to be saved.  N.B. the call insn might set a subreg of a
--- 426,447 ----
  	      /* Look through all live pseudos, mark their hard registers
  		 and choose proper mode for saving.  */
  	      EXECUTE_IF_SET_IN_REG_SET
! 		(&chain->live_throughout, FIRST_PSEUDO_REGISTER, regno, rsi)
! 		{
! 		  int r = reg_renumber[regno];
! 		  int nregs;
! 		  enum machine_mode mode;
  
! 		  gcc_assert (r >= 0);
! 		  nregs = hard_regno_nregs[r][PSEUDO_REGNO_MODE (regno)];
! 		  mode = HARD_REGNO_CALLER_SAVE_MODE
! 		    (r, nregs, PSEUDO_REGNO_MODE (regno));
! 		  if (GET_MODE_BITSIZE (mode)
! 		      > GET_MODE_BITSIZE (save_mode[r]))
! 		    save_mode[r] = mode;
! 		  while (nregs-- > 0)
! 		    SET_HARD_REG_BIT (hard_regs_to_save, r + nregs);
! 		}
  
  	      /* Record all registers set in this call insn.  These don't need
  		 to be saved.  N.B. the call insn might set a subreg of a
*************** save_call_clobbered_regs (void)
*** 484,490 ****
  	  if (n_regs_saved)
  	    for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
  	      if (TEST_HARD_REG_BIT (hard_regs_saved, regno))
! 		regno += insert_restore (chain, GET_CODE (insn) == JUMP_INSN,
  					 regno, MOVE_MAX_WORDS, save_mode);
  	}
      }
--- 478,484 ----
  	  if (n_regs_saved)
  	    for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
  	      if (TEST_HARD_REG_BIT (hard_regs_saved, regno))
! 		regno += insert_restore (chain, JUMP_P (insn),
  					 regno, MOVE_MAX_WORDS, save_mode);
  	}
      }
*************** mark_set_regs (rtx reg, rtx setter ATTRI
*** 504,521 ****
    if (GET_CODE (reg) == SUBREG)
      {
        rtx inner = SUBREG_REG (reg);
!       if (GET_CODE (inner) != REG || REGNO (inner) >= FIRST_PSEUDO_REGISTER)
  	return;
! 
!       regno = subreg_hard_regno (reg, 1);
      }
!   else if (GET_CODE (reg) == REG
  	   && REGNO (reg) < FIRST_PSEUDO_REGISTER)
      regno = REGNO (reg);
    else
      return;
  
!   endregno = regno + HARD_REGNO_NREGS (regno, mode);
  
    for (i = regno; i < endregno; i++)
      SET_HARD_REG_BIT (this_insn_sets, i);
--- 498,514 ----
    if (GET_CODE (reg) == SUBREG)
      {
        rtx inner = SUBREG_REG (reg);
!       if (!REG_P (inner) || REGNO (inner) >= FIRST_PSEUDO_REGISTER)
  	return;
!       regno = subreg_regno (reg);
      }
!   else if (REG_P (reg)
  	   && REGNO (reg) < FIRST_PSEUDO_REGISTER)
      regno = REGNO (reg);
    else
      return;
  
!   endregno = regno + hard_regno_nregs[regno][mode];
  
    for (i = regno; i < endregno; i++)
      SET_HARD_REG_BIT (this_insn_sets, i);
*************** add_stored_regs (rtx reg, rtx setter, vo
*** 535,541 ****
    if (GET_CODE (setter) == CLOBBER)
      return;
  
!   if (GET_CODE (reg) == SUBREG && GET_CODE (SUBREG_REG (reg)) == REG)
      {
        offset = subreg_regno_offset (REGNO (SUBREG_REG (reg)),
  				    GET_MODE (SUBREG_REG (reg)),
--- 528,534 ----
    if (GET_CODE (setter) == CLOBBER)
      return;
  
!   if (GET_CODE (reg) == SUBREG && REG_P (SUBREG_REG (reg)))
      {
        offset = subreg_regno_offset (REGNO (SUBREG_REG (reg)),
  				    GET_MODE (SUBREG_REG (reg)),
*************** add_stored_regs (rtx reg, rtx setter, vo
*** 544,554 ****
        reg = SUBREG_REG (reg);
      }
  
!   if (GET_CODE (reg) != REG || REGNO (reg) >= FIRST_PSEUDO_REGISTER)
      return;
  
    regno = REGNO (reg) + offset;
!   endregno = regno + HARD_REGNO_NREGS (regno, mode);
  
    for (i = regno; i < endregno; i++)
      SET_REGNO_REG_SET ((regset) data, i);
--- 537,547 ----
        reg = SUBREG_REG (reg);
      }
  
!   if (!REG_P (reg) || REGNO (reg) >= FIRST_PSEUDO_REGISTER)
      return;
  
    regno = REGNO (reg) + offset;
!   endregno = regno + hard_regno_nregs[regno][mode];
  
    for (i = regno; i < endregno; i++)
      SET_REGNO_REG_SET ((regset) data, i);
*************** mark_referenced_regs (rtx x)
*** 570,576 ****
        code = GET_CODE (x);
        if ((code == REG && REGNO (x) < FIRST_PSEUDO_REGISTER)
  	  || code == PC || code == CC0
! 	  || (code == SUBREG && GET_CODE (SUBREG_REG (x)) == REG
  	      && REGNO (SUBREG_REG (x)) < FIRST_PSEUDO_REGISTER
  	      /* If we're setting only part of a multi-word register,
  		 we shall mark it as referenced, because the words
--- 563,569 ----
        code = GET_CODE (x);
        if ((code == REG && REGNO (x) < FIRST_PSEUDO_REGISTER)
  	  || code == PC || code == CC0
! 	  || (code == SUBREG && REG_P (SUBREG_REG (x))
  	      && REGNO (SUBREG_REG (x)) < FIRST_PSEUDO_REGISTER
  	      /* If we're setting only part of a multi-word register,
  		 we shall mark it as referenced, because the words
*************** mark_referenced_regs (rtx x)
*** 595,601 ****
  
        if (hardregno >= 0)
  	{
! 	  int nregs = HARD_REGNO_NREGS (hardregno, GET_MODE (x));
  	  while (nregs-- > 0)
  	    SET_HARD_REG_BIT (referenced_regs, hardregno + nregs);
  	}
--- 588,594 ----
  
        if (hardregno >= 0)
  	{
! 	  int nregs = hard_regno_nregs[hardregno][GET_MODE (x)];
  	  while (nregs-- > 0)
  	    SET_HARD_REG_BIT (referenced_regs, hardregno + nregs);
  	}
*************** insert_restore (struct insn_chain *chain
*** 650,658 ****
       or SET_SRC.  Instead of doing so and causing a crash later, check
       for this common case and abort here instead.  This will remove one
       step in debugging such problems.  */
! 
!   if (regno_save_mem[regno][1] == 0)
!     abort ();
  
    /* Get the pattern to emit and update our status.
  
--- 643,649 ----
       or SET_SRC.  Instead of doing so and causing a crash later, check
       for this common case and abort here instead.  This will remove one
       step in debugging such problems.  */
!   gcc_assert (regno_save_mem[regno][1]);
  
    /* Get the pattern to emit and update our status.
  
*************** insert_restore (struct insn_chain *chain
*** 683,690 ****
    mem = regno_save_mem [regno][numregs];
    if (save_mode [regno] != VOIDmode
        && save_mode [regno] != GET_MODE (mem)
!       && numregs == (unsigned int) HARD_REGNO_NREGS (regno, save_mode [regno]))
      mem = adjust_address (mem, save_mode[regno], 0);
    pat = gen_rtx_SET (VOIDmode,
  		     gen_rtx_REG (GET_MODE (mem),
  				  regno), mem);
--- 674,683 ----
    mem = regno_save_mem [regno][numregs];
    if (save_mode [regno] != VOIDmode
        && save_mode [regno] != GET_MODE (mem)
!       && numregs == (unsigned int) hard_regno_nregs[regno][save_mode [regno]])
      mem = adjust_address (mem, save_mode[regno], 0);
+   else
+     mem = copy_rtx (mem);
    pat = gen_rtx_SET (VOIDmode,
  		     gen_rtx_REG (GET_MODE (mem),
  				  regno), mem);
*************** insert_save (struct insn_chain *chain, i
*** 723,731 ****
       or SET_SRC.  Instead of doing so and causing a crash later, check
       for this common case and abort here instead.  This will remove one
       step in debugging such problems.  */
! 
!   if (regno_save_mem[regno][1] == 0)
!     abort ();
  
    /* Get the pattern to emit and update our status.
  
--- 716,722 ----
       or SET_SRC.  Instead of doing so and causing a crash later, check
       for this common case and abort here instead.  This will remove one
       step in debugging such problems.  */
!   gcc_assert (regno_save_mem[regno][1]);
  
    /* Get the pattern to emit and update our status.
  
*************** insert_save (struct insn_chain *chain, i
*** 755,762 ****
    mem = regno_save_mem [regno][numregs];
    if (save_mode [regno] != VOIDmode
        && save_mode [regno] != GET_MODE (mem)
!       && numregs == (unsigned int) HARD_REGNO_NREGS (regno, save_mode [regno]))
      mem = adjust_address (mem, save_mode[regno], 0);
    pat = gen_rtx_SET (VOIDmode, mem,
  		     gen_rtx_REG (GET_MODE (mem),
  				  regno));
--- 746,755 ----
    mem = regno_save_mem [regno][numregs];
    if (save_mode [regno] != VOIDmode
        && save_mode [regno] != GET_MODE (mem)
!       && numregs == (unsigned int) hard_regno_nregs[regno][save_mode [regno]])
      mem = adjust_address (mem, save_mode[regno], 0);
+   else
+     mem = copy_rtx (mem);
    pat = gen_rtx_SET (VOIDmode, mem,
  		     gen_rtx_REG (GET_MODE (mem),
  				  regno));
*************** insert_one_insn (struct insn_chain *chai
*** 789,795 ****
       isn't a problem.  We do, however, assume here that CALL_INSNs don't
       reference CC0.  Guard against non-INSN's like CODE_LABEL.  */
  
!   if ((GET_CODE (insn) == INSN || GET_CODE (insn) == JUMP_INSN)
        && before_p
        && reg_referenced_p (cc0_rtx, PATTERN (insn)))
      chain = chain->prev, insn = chain->insn;
--- 782,788 ----
       isn't a problem.  We do, however, assume here that CALL_INSNs don't
       reference CC0.  Guard against non-INSN's like CODE_LABEL.  */
  
!   if ((NONJUMP_INSN_P (insn) || JUMP_P (insn))
        && before_p
        && reg_referenced_p (cc0_rtx, PATTERN (insn)))
      chain = chain->prev, insn = chain->insn;
*************** insert_one_insn (struct insn_chain *chai
*** 820,834 ****
  	      rtx reg = XEXP (link, 0);
  	      int regno, i;
  
! 	      if (GET_CODE (reg) != REG)
! 		abort ();
! 
  	      regno = REGNO (reg);
  	      if (regno >= FIRST_PSEUDO_REGISTER)
  		regno = reg_renumber[regno];
  	      if (regno < 0)
  		continue;
! 	      for (i = HARD_REGNO_NREGS (regno, GET_MODE (reg)) - 1;
  		   i >= 0; i--)
  		SET_REGNO_REG_SET (&new->live_throughout, regno + i);
  	    }
--- 813,825 ----
  	      rtx reg = XEXP (link, 0);
  	      int regno, i;
  
! 	      gcc_assert (REG_P (reg));
  	      regno = REGNO (reg);
  	      if (regno >= FIRST_PSEUDO_REGISTER)
  		regno = reg_renumber[regno];
  	      if (regno < 0)
  		continue;
! 	      for (i = hard_regno_nregs[regno][GET_MODE (reg)] - 1;
  		   i >= 0; i--)
  		SET_REGNO_REG_SET (&new->live_throughout, regno + i);
  	    }
diff -Nrcpad gcc-3.4.3/gcc/calls.c gcc-4.0.0/gcc/calls.c
*** gcc-3.4.3/gcc/calls.c	Thu Jun 24 07:26:50 2004
--- gcc-4.0.0/gcc/calls.c	Wed Apr  6 01:11:40 2005
***************
*** 1,6 ****
  /* Convert function calls to rtl insns, for GNU C compiler.
     Copyright (C) 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
!    1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
--- 1,7 ----
  /* Convert function calls to rtl insns, for GNU C compiler.
     Copyright (C) 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
!    1999, 2000, 2001, 2002, 2003, 2004, 2005
!    Free Software Foundation, Inc.
  
  This file is part of GCC.
  
*************** struct arg_data
*** 64,69 ****
--- 65,73 ----
       This is not the same register as for normal calls on machines with
       register windows.  */
    rtx tail_call_reg;
+   /* If REG is a PARALLEL, this is a copy of VALUE pulled into the correct
+      form for emit_group_move.  */
+   rtx parallel_value;
    /* If REG was promoted from the actual mode of the argument expression,
       indicates whether the promotion is sign- or zero-extended.  */
    int unsignedp;
*************** static sbitmap stored_args_map;
*** 117,126 ****
     argument list for the constructor call.  */
  int stack_arg_under_construction;
  
! static int calls_function (tree, int);
! static int calls_function_1 (tree, int);
! 
! static void emit_call_1 (rtx, tree, tree, HOST_WIDE_INT, HOST_WIDE_INT,
  			 HOST_WIDE_INT, rtx, rtx, int, rtx, int,
  			 CUMULATIVE_ARGS *);
  static void precompute_register_parameters (int, struct arg_data *, int *);
--- 121,127 ----
     argument list for the constructor call.  */
  int stack_arg_under_construction;
  
! static void emit_call_1 (rtx, tree, tree, tree, HOST_WIDE_INT, HOST_WIDE_INT,
  			 HOST_WIDE_INT, rtx, rtx, int, rtx, int,
  			 CUMULATIVE_ARGS *);
  static void precompute_register_parameters (int, struct arg_data *, int *);
*************** static void initialize_argument_informat
*** 134,140 ****
  					     struct args_size *, int, tree,
  					     tree, CUMULATIVE_ARGS *, int,
  					     rtx *, int *, int *, int *,
! 					     bool);
  static void compute_argument_addresses (struct arg_data *, rtx, int);
  static rtx rtx_for_function_call (tree, tree);
  static void load_register_parameters (struct arg_data *, int, rtx *, int,
--- 135,141 ----
  					     struct args_size *, int, tree,
  					     tree, CUMULATIVE_ARGS *, int,
  					     rtx *, int *, int *, int *,
! 					     bool *, bool);
  static void compute_argument_addresses (struct arg_data *, rtx, int);
  static rtx rtx_for_function_call (tree, tree);
  static void load_register_parameters (struct arg_data *, int, rtx *, int,
*************** static void load_register_parameters (st
*** 142,277 ****
  static rtx emit_library_call_value_1 (int, rtx, rtx, enum libcall_type,
  				      enum machine_mode, int, va_list);
  static int special_function_p (tree, int);
- static rtx try_to_integrate (tree, tree, rtx, int, tree, rtx);
  static int check_sibcall_argument_overlap_1 (rtx);
  static int check_sibcall_argument_overlap (rtx, struct arg_data *, int);
  
  static int combine_pending_stack_adjustment_and_call (int, struct args_size *,
! 						      int);
! static tree fix_unsafe_tree (tree);
! static bool shift_returned_value (tree, rtx *);
  
  #ifdef REG_PARM_STACK_SPACE
  static rtx save_fixed_argument_area (int, rtx, int *, int *);
  static void restore_fixed_argument_area (rtx, rtx, int, int);
  #endif
  
- /* If WHICH is 1, return 1 if EXP contains a call to the built-in function
-    `alloca'.
- 
-    If WHICH is 0, return 1 if EXP contains a call to any function.
-    Actually, we only need return 1 if evaluating EXP would require pushing
-    arguments on the stack, but that is too difficult to compute, so we just
-    assume any function call might require the stack.  */
- 
- static tree calls_function_save_exprs;
- 
- static int
- calls_function (tree exp, int which)
- {
-   int val;
- 
-   calls_function_save_exprs = 0;
-   val = calls_function_1 (exp, which);
-   calls_function_save_exprs = 0;
-   return val;
- }
- 
- /* Recursive function to do the work of above function.  */
- 
- static int
- calls_function_1 (tree exp, int which)
- {
-   int i;
-   enum tree_code code = TREE_CODE (exp);
-   int class = TREE_CODE_CLASS (code);
-   int length = first_rtl_op (code);
- 
-   /* If this code is language-specific, we don't know what it will do.  */
-   if ((int) code >= NUM_TREE_CODES)
-     return 1;
- 
-   switch (code)
-     {
-     case CALL_EXPR:
-       if (which == 0)
- 	return 1;
-       else if ((TREE_CODE (TREE_TYPE (TREE_TYPE (TREE_OPERAND (exp, 0))))
- 		== FUNCTION_TYPE)
- 	       && (TYPE_RETURNS_STACK_DEPRESSED
- 		   (TREE_TYPE (TREE_TYPE (TREE_OPERAND (exp, 0))))))
- 	return 1;
-       else if (TREE_CODE (TREE_OPERAND (exp, 0)) == ADDR_EXPR
- 	       && (TREE_CODE (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
- 		   == FUNCTION_DECL)
- 	       && (special_function_p (TREE_OPERAND (TREE_OPERAND (exp, 0), 0),
- 				       0)
- 		   & ECF_MAY_BE_ALLOCA))
- 	return 1;
- 
-       break;
- 
-     case CONSTRUCTOR:
-       {
- 	tree tem;
- 
- 	for (tem = CONSTRUCTOR_ELTS (exp); tem != 0; tem = TREE_CHAIN (tem))
- 	  if (calls_function_1 (TREE_VALUE (tem), which))
- 	    return 1;
-       }
- 
-       return 0;
- 
-     case SAVE_EXPR:
-       if (SAVE_EXPR_RTL (exp) != 0)
- 	return 0;
-       if (value_member (exp, calls_function_save_exprs))
- 	return 0;
-       calls_function_save_exprs = tree_cons (NULL_TREE, exp,
- 					     calls_function_save_exprs);
-       return (TREE_OPERAND (exp, 0) != 0
- 	      && calls_function_1 (TREE_OPERAND (exp, 0), which));
- 
-     case BLOCK:
-       {
- 	tree local;
- 	tree subblock;
- 
- 	for (local = BLOCK_VARS (exp); local; local = TREE_CHAIN (local))
- 	  if (DECL_INITIAL (local) != 0
- 	      && calls_function_1 (DECL_INITIAL (local), which))
- 	    return 1;
- 
- 	for (subblock = BLOCK_SUBBLOCKS (exp);
- 	     subblock;
- 	     subblock = TREE_CHAIN (subblock))
- 	  if (calls_function_1 (subblock, which))
- 	    return 1;
-       }
-       return 0;
- 
-     case TREE_LIST:
-       for (; exp != 0; exp = TREE_CHAIN (exp))
- 	if (calls_function_1 (TREE_VALUE (exp), which))
- 	  return 1;
-       return 0;
- 
-     default:
-       break;
-     }
- 
-   /* Only expressions and blocks can contain calls.  */
-   if (! IS_EXPR_CODE_CLASS (class) && class != 'b')
-     return 0;
- 
-   for (i = 0; i < length; i++)
-     if (TREE_OPERAND (exp, i) != 0
- 	&& calls_function_1 (TREE_OPERAND (exp, i), which))
-       return 1;
- 
-   return 0;
- }
- 
  /* Force FUNEXP into a form suitable for the address of a CALL,
     and return that as an rtx.  Also load the static chain register
     if FNDECL is a nested function.
--- 143,161 ----
  static rtx emit_library_call_value_1 (int, rtx, rtx, enum libcall_type,
  				      enum machine_mode, int, va_list);
  static int special_function_p (tree, int);
  static int check_sibcall_argument_overlap_1 (rtx);
  static int check_sibcall_argument_overlap (rtx, struct arg_data *, int);
  
  static int combine_pending_stack_adjustment_and_call (int, struct args_size *,
! 						      unsigned int);
! static tree split_complex_values (tree);
! static tree split_complex_types (tree);
  
  #ifdef REG_PARM_STACK_SPACE
  static rtx save_fixed_argument_area (int, rtx, int *, int *);
  static void restore_fixed_argument_area (rtx, rtx, int, int);
  #endif
  
  /* Force FUNEXP into a form suitable for the address of a CALL,
     and return that as an rtx.  Also load the static chain register
     if FNDECL is a nested function.
*************** calls_function_1 (tree exp, int which)
*** 280,296 ****
     CALL_INSN_FUNCTION_USAGE information.  */
  
  rtx
! prepare_call_address (rtx funexp, tree fndecl, rtx *call_fusage,
! 		      int reg_parm_seen, int sibcallp)
  {
-   rtx static_chain_value = 0;
- 
-   funexp = protect_from_queue (funexp, 0);
- 
-   if (fndecl != 0)
-     /* Get possible static chain value for nested function in C.  */
-     static_chain_value = lookup_static_chain (fndecl);
- 
    /* Make a valid memory address and copy constants through pseudo-regs,
       but not for a constant address if -fno-function-cse.  */
    if (GET_CODE (funexp) != SYMBOL_REF)
--- 164,172 ----
     CALL_INSN_FUNCTION_USAGE information.  */
  
  rtx
! prepare_call_address (rtx funexp, rtx static_chain_value,
! 		      rtx *call_fusage, int reg_parm_seen, int sibcallp)
  {
    /* Make a valid memory address and copy constants through pseudo-regs,
       but not for a constant address if -fno-function-cse.  */
    if (GET_CODE (funexp) != SYMBOL_REF)
*************** prepare_call_address (rtx funexp, tree f
*** 303,320 ****
      {
  #ifndef NO_FUNCTION_CSE
        if (optimize && ! flag_no_function_cse)
! #ifdef NO_RECURSIVE_FUNCTION_CSE
! 	if (fndecl != current_function_decl)
! #endif
! 	  funexp = force_reg (Pmode, funexp);
  #endif
      }
  
    if (static_chain_value != 0)
      {
        emit_move_insn (static_chain_rtx, static_chain_value);
  
!       if (GET_CODE (static_chain_rtx) == REG)
  	use_reg (call_fusage, static_chain_rtx);
      }
  
--- 179,194 ----
      {
  #ifndef NO_FUNCTION_CSE
        if (optimize && ! flag_no_function_cse)
! 	funexp = force_reg (Pmode, funexp);
  #endif
      }
  
    if (static_chain_value != 0)
      {
+       static_chain_value = convert_memory_address (Pmode, static_chain_value);
        emit_move_insn (static_chain_rtx, static_chain_value);
  
!       if (REG_P (static_chain_rtx))
  	use_reg (call_fusage, static_chain_rtx);
      }
  
*************** prepare_call_address (rtx funexp, tree f
*** 362,368 ****
     denote registers used by the called function.  */
  
  static void
! emit_call_1 (rtx funexp, tree fndecl ATTRIBUTE_UNUSED, tree funtype ATTRIBUTE_UNUSED,
  	     HOST_WIDE_INT stack_size ATTRIBUTE_UNUSED,
  	     HOST_WIDE_INT rounded_stack_size,
  	     HOST_WIDE_INT struct_value_size ATTRIBUTE_UNUSED,
--- 236,243 ----
     denote registers used by the called function.  */
  
  static void
! emit_call_1 (rtx funexp, tree fntree, tree fndecl ATTRIBUTE_UNUSED,
! 	     tree funtype ATTRIBUTE_UNUSED,
  	     HOST_WIDE_INT stack_size ATTRIBUTE_UNUSED,
  	     HOST_WIDE_INT rounded_stack_size,
  	     HOST_WIDE_INT struct_value_size ATTRIBUTE_UNUSED,
*************** emit_call_1 (rtx funexp, tree fndecl ATT
*** 479,485 ****
      }
    else
  #endif
!     abort ();
  
    /* Find the call we just emitted.  */
    call_insn = last_call_insn ();
--- 354,360 ----
      }
    else
  #endif
!     gcc_unreachable ();
  
    /* Find the call we just emitted.  */
    call_insn = last_call_insn ();
*************** emit_call_1 (rtx funexp, tree fndecl ATT
*** 506,512 ****
      REG_NOTES (call_insn) = gen_rtx_EXPR_LIST (REG_EH_REGION, const0_rtx,
  					       REG_NOTES (call_insn));
    else
!     note_eh_region_may_contain_throw ();
  
    if (ecf_flags & ECF_NORETURN)
      REG_NOTES (call_insn) = gen_rtx_EXPR_LIST (REG_NORETURN, const0_rtx,
--- 381,396 ----
      REG_NOTES (call_insn) = gen_rtx_EXPR_LIST (REG_EH_REGION, const0_rtx,
  					       REG_NOTES (call_insn));
    else
!     {
!       int rn = lookup_stmt_eh_region (fntree);
! 
!       /* If rn < 0, then either (1) tree-ssa not used or (2) doesn't
! 	 throw, which we already took care of.  */
!       if (rn > 0)
! 	REG_NOTES (call_insn) = gen_rtx_EXPR_LIST (REG_EH_REGION, GEN_INT (rn),
! 						   REG_NOTES (call_insn));
!       note_current_region_may_contain_throw ();
!     }
  
    if (ecf_flags & ECF_NORETURN)
      REG_NOTES (call_insn) = gen_rtx_EXPR_LIST (REG_NORETURN, const0_rtx,
*************** emit_call_1 (rtx funexp, tree fndecl ATT
*** 551,557 ****
  
        if (rounded_stack_size != 0)
  	{
! 	  if (ecf_flags & (ECF_SP_DEPRESSED | ECF_NORETURN | ECF_LONGJMP))
  	    /* Just pretend we did the pop.  */
  	    stack_pointer_delta -= rounded_stack_size;
  	  else if (flag_defer_pop && inhibit_defer_pop == 0
--- 435,441 ----
  
        if (rounded_stack_size != 0)
  	{
! 	  if (ecf_flags & (ECF_SP_DEPRESSED | ECF_NORETURN))
  	    /* Just pretend we did the pop.  */
  	    stack_pointer_delta -= rounded_stack_size;
  	  else if (flag_defer_pop && inhibit_defer_pop == 0
*************** emit_call_1 (rtx funexp, tree fndecl ATT
*** 590,597 ****
  static int
  special_function_p (tree fndecl, int flags)
  {
!   if (! (flags & ECF_MALLOC)
!       && fndecl && DECL_NAME (fndecl)
        && IDENTIFIER_LENGTH (DECL_NAME (fndecl)) <= 17
        /* Exclude functions not at the file scope, or not `extern',
  	 since they are not the magic functions we would otherwise
--- 474,480 ----
  static int
  special_function_p (tree fndecl, int flags)
  {
!   if (fndecl && DECL_NAME (fndecl)
        && IDENTIFIER_LENGTH (DECL_NAME (fndecl)) <= 17
        /* Exclude functions not at the file scope, or not `extern',
  	 since they are not the magic functions we would otherwise
*************** special_function_p (tree fndecl, int fla
*** 600,606 ****
           hacky imitation of DECL_ASSEMBLER_NAME.  It's (also) wrong
           because you can declare fork() inside a function if you
           wish.  */
!       && (DECL_CONTEXT (fndecl) == NULL_TREE 
  	  || TREE_CODE (DECL_CONTEXT (fndecl)) == TRANSLATION_UNIT_DECL)
        && TREE_PUBLIC (fndecl))
      {
--- 483,489 ----
           hacky imitation of DECL_ASSEMBLER_NAME.  It's (also) wrong
           because you can declare fork() inside a function if you
           wish.  */
!       && (DECL_CONTEXT (fndecl) == NULL_TREE
  	  || TREE_CODE (DECL_CONTEXT (fndecl)) == TRANSLATION_UNIT_DECL)
        && TREE_PUBLIC (fndecl))
      {
*************** special_function_p (tree fndecl, int fla
*** 642,648 ****
  
  	  if (tname[1] == 'i'
  	      && ! strcmp (tname, "siglongjmp"))
! 	    flags |= ECF_LONGJMP;
  	}
        else if ((tname[0] == 'q' && tname[1] == 's'
  		&& ! strcmp (tname, "qsetjmp"))
--- 525,531 ----
  
  	  if (tname[1] == 'i'
  	      && ! strcmp (tname, "siglongjmp"))
! 	    flags |= ECF_NORETURN;
  	}
        else if ((tname[0] == 'q' && tname[1] == 's'
  		&& ! strcmp (tname, "qsetjmp"))
*************** special_function_p (tree fndecl, int fla
*** 652,673 ****
  
        else if (tname[0] == 'l' && tname[1] == 'o'
  	       && ! strcmp (tname, "longjmp"))
! 	flags |= ECF_LONGJMP;
! 
!       else if ((tname[0] == 'f' && tname[1] == 'o'
! 		&& ! strcmp (tname, "fork"))
! 	       /* Linux specific: __clone.  check NAME to insist on the
! 		  leading underscores, to avoid polluting the ISO / POSIX
! 		  namespace.  */
! 	       || (name[0] == '_' && name[1] == '_'
! 		   && ! strcmp (tname, "clone"))
! 	       || (tname[0] == 'e' && tname[1] == 'x' && tname[2] == 'e'
! 		   && tname[3] == 'c' && (tname[4] == 'l' || tname[4] == 'v')
! 		   && (tname[5] == '\0'
! 		       || ((tname[5] == 'p' || tname[5] == 'e')
! 			   && tname[6] == '\0'))))
! 	flags |= ECF_FORK_OR_EXEC;
      }
    return flags;
  }
  
--- 535,543 ----
  
        else if (tname[0] == 'l' && tname[1] == 'o'
  	       && ! strcmp (tname, "longjmp"))
! 	flags |= ECF_NORETURN;
      }
+ 
    return flags;
  }
  
*************** flags_from_decl_or_type (tree exp)
*** 726,735 ****
  	flags |= ECF_NOTHROW;
  
        if (TREE_READONLY (exp) && ! TREE_THIS_VOLATILE (exp))
! 	flags |= ECF_LIBCALL_BLOCK;
!     }
  
!   if (TREE_READONLY (exp) && ! TREE_THIS_VOLATILE (exp))
      flags |= ECF_CONST;
  
    if (TREE_THIS_VOLATILE (exp))
--- 596,606 ----
  	flags |= ECF_NOTHROW;
  
        if (TREE_READONLY (exp) && ! TREE_THIS_VOLATILE (exp))
! 	flags |= ECF_LIBCALL_BLOCK | ECF_CONST;
  
!       flags = special_function_p (exp, flags);
!     }
!   else if (TYPE_P (exp) && TYPE_READONLY (exp) && ! TREE_THIS_VOLATILE (exp))
      flags |= ECF_CONST;
  
    if (TREE_THIS_VOLATILE (exp))
*************** call_expr_flags (tree t)
*** 776,782 ****
     Set REG_PARM_SEEN if we encounter a register parameter.  */
  
  static void
! precompute_register_parameters (int num_actuals, struct arg_data *args, int *reg_parm_seen)
  {
    int i;
  
--- 647,654 ----
     Set REG_PARM_SEEN if we encounter a register parameter.  */
  
  static void
! precompute_register_parameters (int num_actuals, struct arg_data *args,
! 				int *reg_parm_seen)
  {
    int i;
  
*************** precompute_register_parameters (int num_
*** 794,803 ****
  					 VOIDmode, 0);
  	    preserve_temp_slots (args[i].value);
  	    pop_temp_slots ();
- 
- 	    /* ANSI doesn't require a sequence point here,
- 	       but PCC has one, so this will avoid some problems.  */
- 	    emit_queue ();
  	  }
  
  	/* If the value is a non-legitimate constant, force it into a
--- 666,671 ----
*************** precompute_register_parameters (int num_
*** 815,820 ****
--- 683,699 ----
  			     TYPE_MODE (TREE_TYPE (args[i].tree_value)),
  			     args[i].value, args[i].unsignedp);
  
+ 	/* If we're going to have to load the value by parts, pull the
+ 	   parts into pseudos.  The part extraction process can involve
+ 	   non-trivial computation.  */
+ 	if (GET_CODE (args[i].reg) == PARALLEL)
+ 	  {
+ 	    tree type = TREE_TYPE (args[i].tree_value);
+ 	    args[i].parallel_value
+ 	      = emit_group_load_into_temps (args[i].reg, args[i].value,
+ 					    type, int_size_in_bytes (type));
+ 	  }
+ 
  	/* If the value is expensive, and we are inside an appropriately
  	   short loop, put the value into a pseudo and then put the pseudo
  	   into the hard reg.
*************** precompute_register_parameters (int num_
*** 823,835 ****
  	   register parameters.  This is to avoid reload conflicts while
  	   loading the parameters registers.  */
  
! 	if ((! (GET_CODE (args[i].value) == REG
! 		|| (GET_CODE (args[i].value) == SUBREG
! 		    && GET_CODE (SUBREG_REG (args[i].value)) == REG)))
! 	    && args[i].mode != BLKmode
! 	    && rtx_cost (args[i].value, SET) > COSTS_N_INSNS (1)
! 	    && ((SMALL_REGISTER_CLASSES && *reg_parm_seen)
! 		|| preserve_subexpressions_p ()))
  	  args[i].value = copy_to_mode_reg (args[i].mode, args[i].value);
        }
  }
--- 702,714 ----
  	   register parameters.  This is to avoid reload conflicts while
  	   loading the parameters registers.  */
  
! 	else if ((! (REG_P (args[i].value)
! 		     || (GET_CODE (args[i].value) == SUBREG
! 			 && REG_P (SUBREG_REG (args[i].value)))))
! 		 && args[i].mode != BLKmode
! 		 && rtx_cost (args[i].value, SET) > COSTS_N_INSNS (1)
! 		 && ((SMALL_REGISTER_CLASSES && *reg_parm_seen)
! 		     || optimize))
  	  args[i].value = copy_to_mode_reg (args[i].mode, args[i].value);
        }
  }
*************** store_unaligned_arguments_into_pseudos (
*** 954,963 ****
  	    < (unsigned int) MIN (BIGGEST_ALIGNMENT, BITS_PER_WORD)))
        {
  	int bytes = int_size_in_bytes (TREE_TYPE (args[i].tree_value));
- 	int nregs = (bytes + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
  	int endian_correction = 0;
  
! 	args[i].n_aligned_regs = args[i].partial ? args[i].partial : nregs;
  	args[i].aligned_regs = xmalloc (sizeof (rtx) * args[i].n_aligned_regs);
  
  	/* Structures smaller than a word are normally aligned to the
--- 833,851 ----
  	    < (unsigned int) MIN (BIGGEST_ALIGNMENT, BITS_PER_WORD)))
        {
  	int bytes = int_size_in_bytes (TREE_TYPE (args[i].tree_value));
  	int endian_correction = 0;
  
! 	if (args[i].partial)
! 	  {
! 	    gcc_assert (args[i].partial % UNITS_PER_WORD == 0);
! 	    args[i].n_aligned_regs = args[i].partial / UNITS_PER_WORD;
! 	  }
! 	else
! 	  {
! 	    args[i].n_aligned_regs
! 	      = (bytes + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
! 	  }
! 
  	args[i].aligned_regs = xmalloc (sizeof (rtx) * args[i].n_aligned_regs);
  
  	/* Structures smaller than a word are normally aligned to the
*************** store_unaligned_arguments_into_pseudos (
*** 983,989 ****
  
  	    args[i].aligned_regs[j] = reg;
  	    word = extract_bit_field (word, bitsize, 0, 1, NULL_RTX,
! 				      word_mode, word_mode, BITS_PER_WORD);
  
  	    /* There is no need to restrict this code to loading items
  	       in TYPE_ALIGN sized hunks.  The bitfield instructions can
--- 871,877 ----
  
  	    args[i].aligned_regs[j] = reg;
  	    word = extract_bit_field (word, bitsize, 0, 1, NULL_RTX,
! 				      word_mode, word_mode);
  
  	    /* There is no need to restrict this code to loading items
  	       in TYPE_ALIGN sized hunks.  The bitfield instructions can
*************** store_unaligned_arguments_into_pseudos (
*** 1000,1006 ****
  
  	    bytes -= bitsize / BITS_PER_UNIT;
  	    store_bit_field (reg, bitsize, endian_correction, word_mode,
! 			     word, BITS_PER_WORD);
  	  }
        }
  }
--- 888,894 ----
  
  	    bytes -= bitsize / BITS_PER_UNIT;
  	    store_bit_field (reg, bitsize, endian_correction, word_mode,
! 			     word);
  	  }
        }
  }
*************** store_unaligned_arguments_into_pseudos (
*** 1024,1030 ****
     and may be modified by this routine.
  
     OLD_PENDING_ADJ, MUST_PREALLOCATE and FLAGS are pointers to integer
!    flags which may may be modified by this routine. 
  
     CALL_FROM_THUNK_P is true if this call is the jump from a thunk to
     the thunked-to function.  */
--- 912,921 ----
     and may be modified by this routine.
  
     OLD_PENDING_ADJ, MUST_PREALLOCATE and FLAGS are pointers to integer
!    flags which may may be modified by this routine.
! 
!    MAY_TAILCALL is cleared if we encounter an invisible pass-by-reference
!    that requires allocation of stack space.
  
     CALL_FROM_THUNK_P is true if this call is the jump from a thunk to
     the thunked-to function.  */
*************** initialize_argument_information (int num
*** 1039,1045 ****
  				 int reg_parm_stack_space,
  				 rtx *old_stack_level, int *old_pending_adj,
  				 int *must_preallocate, int *ecf_flags,
! 				 bool call_from_thunk_p)
  {
    /* 1 if scanning parms front to back, -1 if scanning back to front.  */
    int inc;
--- 930,936 ----
  				 int reg_parm_stack_space,
  				 rtx *old_stack_level, int *old_pending_adj,
  				 int *must_preallocate, int *ecf_flags,
! 				 bool *may_tailcall, bool call_from_thunk_p)
  {
    /* 1 if scanning parms front to back, -1 if scanning back to front.  */
    int inc;
*************** initialize_argument_information (int num
*** 1092,1098 ****
  	 args[i].reg is nonzero if all or part is passed in registers.
  
  	 args[i].partial is nonzero if part but not all is passed in registers,
! 	 and the exact value says how many words are passed in registers.
  
  	 args[i].pass_on_stack is nonzero if the argument must at least be
  	 computed on the stack.  It may then be loaded back into registers
--- 983,989 ----
  	 args[i].reg is nonzero if all or part is passed in registers.
  
  	 args[i].partial is nonzero if part but not all is passed in registers,
! 	 and the exact value says how many bytes are passed in registers.
  
  	 args[i].pass_on_stack is nonzero if the argument must at least be
  	 computed on the stack.  It may then be loaded back into registers
*************** initialize_argument_information (int num
*** 1102,1157 ****
  	 with those made by function.c.  */
  
        /* See if this argument should be passed by invisible reference.  */
!       if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE (type))
! 	  || TREE_ADDRESSABLE (type)
! #ifdef FUNCTION_ARG_PASS_BY_REFERENCE
! 	  || FUNCTION_ARG_PASS_BY_REFERENCE (*args_so_far, TYPE_MODE (type),
! 					     type, argpos < n_named_args)
! #endif
! 	  )
  	{
! 	  /* If we're compiling a thunk, pass through invisible
!              references instead of making a copy.  */
  	  if (call_from_thunk_p
! #ifdef FUNCTION_ARG_CALLEE_COPIES
! 	      || (FUNCTION_ARG_CALLEE_COPIES (*args_so_far, TYPE_MODE (type),
! 					     type, argpos < n_named_args)
! 		  /* If it's in a register, we must make a copy of it too.  */
! 		  /* ??? Is this a sufficient test?  Is there a better one? */
! 		  && !(TREE_CODE (args[i].tree_value) == VAR_DECL
! 		       && REG_P (DECL_RTL (args[i].tree_value)))
! 		  && ! TREE_ADDRESSABLE (type))
! #endif
! 	      )
  	    {
! 	      /* C++ uses a TARGET_EXPR to indicate that we want to make a
! 	         new object from the argument.  If we are passing by
! 	         invisible reference, the callee will do that for us, so we
! 	         can strip off the TARGET_EXPR.  This is not always safe,
! 	         but it is safe in the only case where this is a useful
! 	         optimization; namely, when the argument is a plain object.
! 	         In that case, the frontend is just asking the backend to
! 	         make a bitwise copy of the argument.  */
  
! 	      if (TREE_CODE (args[i].tree_value) == TARGET_EXPR
! 		  && (DECL_P (TREE_OPERAND (args[i].tree_value, 1)))
! 		  && ! REG_P (DECL_RTL (TREE_OPERAND (args[i].tree_value, 1))))
! 		args[i].tree_value = TREE_OPERAND (args[i].tree_value, 1);
  
! 	      args[i].tree_value = build1 (ADDR_EXPR,
! 					   build_pointer_type (type),
! 					   args[i].tree_value);
! 	      type = build_pointer_type (type);
! 	    }
! 	  else if (TREE_CODE (args[i].tree_value) == TARGET_EXPR)
! 	    {
! 	      /* In the V3 C++ ABI, parameters are destroyed in the caller.
! 		 We implement this by passing the address of the temporary
! 	         rather than expanding it into another allocated slot.  */
! 	      args[i].tree_value = build1 (ADDR_EXPR,
! 					   build_pointer_type (type),
! 					   args[i].tree_value);
! 	      type = build_pointer_type (type);
  	    }
  	  else
  	    {
--- 993,1025 ----
  	 with those made by function.c.  */
  
        /* See if this argument should be passed by invisible reference.  */
!       if (pass_by_reference (args_so_far, TYPE_MODE (type),
! 			     type, argpos < n_named_args))
  	{
! 	  bool callee_copies;
! 	  tree base;
! 
! 	  callee_copies
! 	    = reference_callee_copied (args_so_far, TYPE_MODE (type),
! 				       type, argpos < n_named_args);
! 
! 	  /* If we're compiling a thunk, pass through invisible references
! 	     instead of making a copy.  */
  	  if (call_from_thunk_p
! 	      || (callee_copies
! 		  && !TREE_ADDRESSABLE (type)
! 		  && (base = get_base_address (args[i].tree_value))
! 		  && (!DECL_P (base) || MEM_P (DECL_RTL (base)))))
  	    {
! 	      /* We can't use sibcalls if a callee-copied argument is
! 		 stored in the current function's frame.  */
! 	      if (!call_from_thunk_p && DECL_P (base) && !TREE_STATIC (base))
! 		*may_tailcall = false;
  
! 	      args[i].tree_value = build_fold_addr_expr (args[i].tree_value);
! 	      type = TREE_TYPE (args[i].tree_value);
  
! 	      *ecf_flags &= ~(ECF_CONST | ECF_LIBCALL_BLOCK);
  	    }
  	  else
  	    {
*************** initialize_argument_information (int num
*** 1185,1201 ****
  		copy = assign_temp (type, 0, 1, 0);
  
  	      store_expr (args[i].tree_value, copy, 0);
- 	      *ecf_flags &= ~(ECF_CONST | ECF_PURE | ECF_LIBCALL_BLOCK);
  
! 	      args[i].tree_value = build1 (ADDR_EXPR,
! 					   build_pointer_type (type),
! 					   make_tree (type, copy));
! 	      type = build_pointer_type (type);
  	    }
  	}
  
        mode = TYPE_MODE (type);
!       unsignedp = TREE_UNSIGNED (type);
  
        if (targetm.calls.promote_function_args (fndecl ? TREE_TYPE (fndecl) : 0))
  	mode = promote_mode (type, mode, &unsignedp, 1);
--- 1053,1073 ----
  		copy = assign_temp (type, 0, 1, 0);
  
  	      store_expr (args[i].tree_value, copy, 0);
  
! 	      if (callee_copies)
! 		*ecf_flags &= ~(ECF_CONST | ECF_LIBCALL_BLOCK);
! 	      else
! 		*ecf_flags &= ~(ECF_CONST | ECF_PURE | ECF_LIBCALL_BLOCK);
! 
! 	      args[i].tree_value
! 		= build_fold_addr_expr (make_tree (type, copy));
! 	      type = TREE_TYPE (args[i].tree_value);
! 	      *may_tailcall = false;
  	    }
  	}
  
        mode = TYPE_MODE (type);
!       unsignedp = TYPE_UNSIGNED (type);
  
        if (targetm.calls.promote_function_args (fndecl ? TREE_TYPE (fndecl) : 0))
  	mode = promote_mode (type, mode, &unsignedp, 1);
*************** initialize_argument_information (int num
*** 1215,1228 ****
        args[i].tail_call_reg = args[i].reg;
  #endif
  
- #ifdef FUNCTION_ARG_PARTIAL_NREGS
        if (args[i].reg)
  	args[i].partial
! 	  = FUNCTION_ARG_PARTIAL_NREGS (*args_so_far, mode, type,
! 					argpos < n_named_args);
! #endif
  
!       args[i].pass_on_stack = MUST_PASS_IN_STACK (mode, type);
  
        /* If FUNCTION_ARG returned a (parallel [(expr_list (nil) ...) ...]),
  	 it means that we are to pass this arg in the register(s) designated
--- 1087,1098 ----
        args[i].tail_call_reg = args[i].reg;
  #endif
  
        if (args[i].reg)
  	args[i].partial
! 	  = targetm.calls.arg_partial_bytes (args_so_far, mode, type,
! 					     argpos < n_named_args);
  
!       args[i].pass_on_stack = targetm.calls.must_pass_in_stack (mode, type);
  
        /* If FUNCTION_ARG returned a (parallel [(expr_list (nil) ...) ...]),
  	 it means that we are to pass this arg in the register(s) designated
*************** compute_argument_block_size (int reg_par
*** 1314,1321 ****
  	  /* We don't handle this case yet.  To handle it correctly we have
  	     to add the delta, round and subtract the delta.
  	     Currently no machine description requires this support.  */
! 	  if (stack_pointer_delta & (preferred_stack_boundary - 1))
! 	    abort ();
  	  args_size->var = round_up (args_size->var, preferred_stack_boundary);
  	}
  
--- 1184,1190 ----
  	  /* We don't handle this case yet.  To handle it correctly we have
  	     to add the delta, round and subtract the delta.
  	     Currently no machine description requires this support.  */
! 	  gcc_assert (!(stack_pointer_delta & (preferred_stack_boundary - 1)));
  	  args_size->var = round_up (args_size->var, preferred_stack_boundary);
  	}
  
*************** compute_argument_block_size (int reg_par
*** 1349,1359 ****
        args_size->constant = MAX (args_size->constant,
  				 reg_parm_stack_space);
  
- #ifdef MAYBE_REG_PARM_STACK_SPACE
-       if (reg_parm_stack_space == 0)
- 	args_size->constant = 0;
- #endif
- 
  #ifndef OUTGOING_REG_PARM_STACK_SPACE
        args_size->constant -= reg_parm_stack_space;
  #endif
--- 1218,1223 ----
*************** precompute_arguments (int flags, int num
*** 1376,1438 ****
  {
    int i;
  
!   /* If this function call is cse'able, precompute all the parameters.
!      Note that if the parameter is constructed into a temporary, this will
!      cause an additional copy because the parameter will be constructed
!      into a temporary location and then copied into the outgoing arguments.
!      If a parameter contains a call to alloca and this function uses the
!      stack, precompute the parameter.  */
! 
!   /* If we preallocated the stack space, and some arguments must be passed
!      on the stack, then we must precompute any parameter which contains a
!      function call which will store arguments on the stack.
!      Otherwise, evaluating the parameter may clobber previous parameters
!      which have already been stored into the stack.  (we have code to avoid
!      such case by saving the outgoing stack arguments, but it results in
!      worse code)  */
  
    for (i = 0; i < num_actuals; i++)
!     if ((flags & ECF_LIBCALL_BLOCK)
! 	|| calls_function (args[i].tree_value, !ACCUMULATE_OUTGOING_ARGS))
!       {
! 	enum machine_mode mode;
! 
! 	/* If this is an addressable type, we cannot pre-evaluate it.  */
! 	if (TREE_ADDRESSABLE (TREE_TYPE (args[i].tree_value)))
! 	  abort ();
! 
! 	args[i].value
! 	  = expand_expr (args[i].tree_value, NULL_RTX, VOIDmode, 0);
  
! 	/* ANSI doesn't require a sequence point here,
! 	   but PCC has one, so this will avoid some problems.  */
! 	emit_queue ();
  
! 	args[i].initial_value = args[i].value
! 	  = protect_from_queue (args[i].value, 0);
  
! 	mode = TYPE_MODE (TREE_TYPE (args[i].tree_value));
! 	if (mode != args[i].mode)
! 	  {
! 	    args[i].value
! 	      = convert_modes (args[i].mode, mode,
! 			       args[i].value, args[i].unsignedp);
! #ifdef PROMOTE_FOR_CALL_ONLY
! 	    /* CSE will replace this only if it contains args[i].value
! 	       pseudo, so convert it down to the declared mode using
! 	       a SUBREG.  */
! 	    if (GET_CODE (args[i].value) == REG
! 		&& GET_MODE_CLASS (args[i].mode) == MODE_INT)
! 	      {
! 		args[i].initial_value
! 		  = gen_lowpart_SUBREG (mode, args[i].value);
! 		SUBREG_PROMOTED_VAR_P (args[i].initial_value) = 1;
! 		SUBREG_PROMOTED_UNSIGNED_SET (args[i].initial_value,
! 		  args[i].unsignedp);
! 	      }
  #endif
! 	  }
!       }
  }
  
  /* Given the current state of MUST_PREALLOCATE and information about
--- 1240,1282 ----
  {
    int i;
  
!   /* If this is a libcall, then precompute all arguments so that we do not
!      get extraneous instructions emitted as part of the libcall sequence.  */
!   if ((flags & ECF_LIBCALL_BLOCK) == 0)
!     return;
  
    for (i = 0; i < num_actuals; i++)
!     {
!       enum machine_mode mode;
  
!       /* If this is an addressable type, we cannot pre-evaluate it.  */
!       gcc_assert (!TREE_ADDRESSABLE (TREE_TYPE (args[i].tree_value)));
  
!       args[i].initial_value = args[i].value
! 	= expand_expr (args[i].tree_value, NULL_RTX, VOIDmode, 0);
  
!       mode = TYPE_MODE (TREE_TYPE (args[i].tree_value));
!       if (mode != args[i].mode)
! 	{
! 	  args[i].value
! 	    = convert_modes (args[i].mode, mode,
! 			     args[i].value, args[i].unsignedp);
! #if defined(PROMOTE_FUNCTION_MODE) && !defined(PROMOTE_MODE)
! 	  /* CSE will replace this only if it contains args[i].value
! 	     pseudo, so convert it down to the declared mode using
! 	     a SUBREG.  */
! 	  if (REG_P (args[i].value)
! 	      && GET_MODE_CLASS (args[i].mode) == MODE_INT)
! 	    {
! 	      args[i].initial_value
! 		= gen_lowpart_SUBREG (mode, args[i].value);
! 	      SUBREG_PROMOTED_VAR_P (args[i].initial_value) = 1;
! 	      SUBREG_PROMOTED_UNSIGNED_SET (args[i].initial_value,
! 					    args[i].unsignedp);
! 	    }
  #endif
! 	}
!     }
  }
  
  /* Given the current state of MUST_PREALLOCATE and information about
*************** compute_argument_addresses (struct arg_d
*** 1514,1519 ****
--- 1358,1364 ----
  	  rtx offset = ARGS_SIZE_RTX (args[i].locate.offset);
  	  rtx slot_offset = ARGS_SIZE_RTX (args[i].locate.slot_offset);
  	  rtx addr;
+ 	  unsigned int align, boundary;
  
  	  /* Skip this parm if it will not be passed on the stack.  */
  	  if (! args[i].pass_on_stack && args[i].reg != 0)
*************** compute_argument_addresses (struct arg_d
*** 1526,1534 ****
  
  	  addr = plus_constant (addr, arg_offset);
  	  args[i].stack = gen_rtx_MEM (args[i].mode, addr);
- 	  set_mem_align (args[i].stack, PARM_BOUNDARY);
  	  set_mem_attributes (args[i].stack,
  			      TREE_TYPE (args[i].tree_value), 1);
  
  	  if (GET_CODE (slot_offset) == CONST_INT)
  	    addr = plus_constant (arg_reg, INTVAL (slot_offset));
--- 1371,1388 ----
  
  	  addr = plus_constant (addr, arg_offset);
  	  args[i].stack = gen_rtx_MEM (args[i].mode, addr);
  	  set_mem_attributes (args[i].stack,
  			      TREE_TYPE (args[i].tree_value), 1);
+ 	  align = BITS_PER_UNIT;
+ 	  boundary = args[i].locate.boundary;
+ 	  if (args[i].locate.where_pad != downward)
+ 	    align = boundary;
+ 	  else if (GET_CODE (offset) == CONST_INT)
+ 	    {
+ 	      align = INTVAL (offset) * BITS_PER_UNIT | boundary;
+ 	      align = align & -align;
+ 	    }
+ 	  set_mem_align (args[i].stack, align);
  
  	  if (GET_CODE (slot_offset) == CONST_INT)
  	    addr = plus_constant (arg_reg, INTVAL (slot_offset));
*************** compute_argument_addresses (struct arg_d
*** 1537,1545 ****
  
  	  addr = plus_constant (addr, arg_offset);
  	  args[i].stack_slot = gen_rtx_MEM (args[i].mode, addr);
- 	  set_mem_align (args[i].stack_slot, PARM_BOUNDARY);
  	  set_mem_attributes (args[i].stack_slot,
  			      TREE_TYPE (args[i].tree_value), 1);
  
  	  /* Function incoming arguments may overlap with sibling call
  	     outgoing arguments and we cannot allow reordering of reads
--- 1391,1399 ----
  
  	  addr = plus_constant (addr, arg_offset);
  	  args[i].stack_slot = gen_rtx_MEM (args[i].mode, addr);
  	  set_mem_attributes (args[i].stack_slot,
  			      TREE_TYPE (args[i].tree_value), 1);
+ 	  set_mem_align (args[i].stack_slot, args[i].locate.boundary);
  
  	  /* Function incoming arguments may overlap with sibling call
  	     outgoing arguments and we cannot allow reordering of reads
*************** rtx_for_function_call (tree fndecl, tree
*** 1584,1590 ****
        push_temp_slots ();
        funexp = expand_expr (addr, NULL_RTX, VOIDmode, 0);
        pop_temp_slots ();	/* FUNEXP can't be BLKmode.  */
-       emit_queue ();
      }
    return funexp;
  }
--- 1438,1443 ----
*************** load_register_parameters (struct arg_dat
*** 1621,1628 ****
  	     we just use a normal move insn.  This value can be zero if the
  	     argument is a zero size structure with no fields.  */
  	  nregs = -1;
! 	  if (partial)
! 	    nregs = partial;
  	  else if (TYPE_MODE (TREE_TYPE (args[i].tree_value)) == BLKmode)
  	    {
  	      size = int_size_in_bytes (TREE_TYPE (args[i].tree_value));
--- 1474,1486 ----
  	     we just use a normal move insn.  This value can be zero if the
  	     argument is a zero size structure with no fields.  */
  	  nregs = -1;
! 	  if (GET_CODE (reg) == PARALLEL)
! 	    ;
! 	  else if (partial)
! 	    {
! 	      gcc_assert (partial % UNITS_PER_WORD == 0);
! 	      nregs = partial / UNITS_PER_WORD;
! 	    }
  	  else if (TYPE_MODE (TREE_TYPE (args[i].tree_value)) == BLKmode)
  	    {
  	      size = int_size_in_bytes (TREE_TYPE (args[i].tree_value));
*************** load_register_parameters (struct arg_dat
*** 1635,1645 ****
  	     locations.  The Irix 6 ABI has examples of this.  */
  
  	  if (GET_CODE (reg) == PARALLEL)
! 	    {
! 	      tree type = TREE_TYPE (args[i].tree_value);
! 	      emit_group_load (reg, args[i].value, type,
! 			       int_size_in_bytes (type));
! 	    }
  
  	  /* If simple case, just do move.  If normal partial, store_one_arg
  	     has already loaded the register for us.  In all other cases,
--- 1493,1499 ----
  	     locations.  The Irix 6 ABI has examples of this.  */
  
  	  if (GET_CODE (reg) == PARALLEL)
! 	    emit_group_move (reg, args[i].parallel_value);
  
  	  /* If simple case, just do move.  If normal partial, store_one_arg
  	     has already loaded the register for us.  In all other cases,
*************** load_register_parameters (struct arg_dat
*** 1664,1671 ****
  		     call only uses SIZE bytes at the msb end, but it doesn't
  		     seem worth generating rtl to say that.  */
  		  reg = gen_rtx_REG (word_mode, REGNO (reg));
! 		  x = expand_binop (word_mode, ashl_optab, reg,
! 				    GEN_INT (shift), reg, 1, OPTAB_WIDEN);
  		  if (x != reg)
  		    emit_move_insn (reg, x);
  		}
--- 1518,1526 ----
  		     call only uses SIZE bytes at the msb end, but it doesn't
  		     seem worth generating rtl to say that.  */
  		  reg = gen_rtx_REG (word_mode, REGNO (reg));
! 		  x = expand_shift (LSHIFT_EXPR, word_mode, reg,
! 				    build_int_cst (NULL_TREE, shift),
! 				    reg, 1);
  		  if (x != reg)
  		    emit_move_insn (reg, x);
  		}
*************** load_register_parameters (struct arg_dat
*** 1684,1708 ****
  	    {
  	      rtx mem = validize_mem (args[i].value);
  
- #ifdef BLOCK_REG_PADDING
  	      /* Handle a BLKmode that needs shifting.  */
  	      if (nregs == 1 && size < UNITS_PER_WORD
! 		  && args[i].locate.where_pad == downward)
  		{
  		  rtx tem = operand_subword_force (mem, 0, args[i].mode);
  		  rtx ri = gen_rtx_REG (word_mode, REGNO (reg));
  		  rtx x = gen_reg_rtx (word_mode);
  		  int shift = (UNITS_PER_WORD - size) * BITS_PER_UNIT;
! 		  optab dir = BYTES_BIG_ENDIAN ? lshr_optab : ashl_optab;
  
  		  emit_move_insn (x, tem);
! 		  x = expand_binop (word_mode, dir, x, GEN_INT (shift),
! 				    ri, 1, OPTAB_WIDEN);
  		  if (x != ri)
  		    emit_move_insn (ri, x);
  		}
  	      else
- #endif
  		move_block_to_reg (REGNO (reg), mem, nregs, args[i].mode);
  	    }
  
--- 1539,1568 ----
  	    {
  	      rtx mem = validize_mem (args[i].value);
  
  	      /* Handle a BLKmode that needs shifting.  */
  	      if (nregs == 1 && size < UNITS_PER_WORD
! #ifdef BLOCK_REG_PADDING
! 		  && args[i].locate.where_pad == downward
! #else
! 		  && BYTES_BIG_ENDIAN
! #endif
! 		 )
  		{
  		  rtx tem = operand_subword_force (mem, 0, args[i].mode);
  		  rtx ri = gen_rtx_REG (word_mode, REGNO (reg));
  		  rtx x = gen_reg_rtx (word_mode);
  		  int shift = (UNITS_PER_WORD - size) * BITS_PER_UNIT;
! 		  enum tree_code dir = BYTES_BIG_ENDIAN ? RSHIFT_EXPR
! 							: LSHIFT_EXPR;
  
  		  emit_move_insn (x, tem);
! 		  x = expand_shift (dir, word_mode, x,
! 				    build_int_cst (NULL_TREE, shift),
! 				    ri, 1);
  		  if (x != ri)
  		    emit_move_insn (ri, x);
  		}
  	      else
  		move_block_to_reg (REGNO (reg), mem, nregs, args[i].mode);
  	    }
  
*************** load_register_parameters (struct arg_dat
*** 1719,1845 ****
  	    use_group_regs (call_fusage, reg);
  	  else if (nregs == -1)
  	    use_reg (call_fusage, reg);
! 	  else
! 	    use_regs (call_fusage, REGNO (reg), nregs == 0 ? 1 : nregs);
! 	}
!     }
! }
! 
! /* Try to integrate function.  See expand_inline_function for documentation
!    about the parameters.  */
! 
! static rtx
! try_to_integrate (tree fndecl, tree actparms, rtx target, int ignore,
! 		  tree type, rtx structure_value_addr)
! {
!   rtx temp;
!   rtx before_call;
!   int i;
!   rtx old_stack_level = 0;
!   int reg_parm_stack_space = 0;
! 
! #ifdef REG_PARM_STACK_SPACE
! #ifdef MAYBE_REG_PARM_STACK_SPACE
!   reg_parm_stack_space = MAYBE_REG_PARM_STACK_SPACE;
! #else
!   reg_parm_stack_space = REG_PARM_STACK_SPACE (fndecl);
! #endif
! #endif
! 
!   before_call = get_last_insn ();
! 
!   timevar_push (TV_INTEGRATION);
! 
!   temp = expand_inline_function (fndecl, actparms, target,
! 				 ignore, type,
! 				 structure_value_addr);
! 
!   timevar_pop (TV_INTEGRATION);
! 
!   /* If inlining succeeded, return.  */
!   if (temp != (rtx) (size_t) - 1)
!     {
!       if (ACCUMULATE_OUTGOING_ARGS)
! 	{
! 	  /* If the outgoing argument list must be preserved, push
! 	     the stack before executing the inlined function if it
! 	     makes any calls.  */
! 
! 	  i = reg_parm_stack_space;
! 	  if (i > highest_outgoing_arg_in_use)
! 	    i = highest_outgoing_arg_in_use;
! 	  while (--i >= 0 && stack_usage_map[i] == 0)
! 	    ;
! 
! 	  if (stack_arg_under_construction || i >= 0)
! 	    {
! 	      rtx first_insn
! 		= before_call ? NEXT_INSN (before_call) : get_insns ();
! 	      rtx insn = NULL_RTX, seq;
! 
! 	      /* Look for a call in the inline function code.
! 	         If DECL_SAVED_INSNS (fndecl)->outgoing_args_size is
! 	         nonzero then there is a call and it is not necessary
! 	         to scan the insns.  */
! 
! 	      if (DECL_SAVED_INSNS (fndecl)->outgoing_args_size == 0)
! 		for (insn = first_insn; insn; insn = NEXT_INSN (insn))
! 		  if (GET_CODE (insn) == CALL_INSN)
! 		    break;
! 
! 	      if (insn)
! 		{
! 		  /* Reserve enough stack space so that the largest
! 		     argument list of any function call in the inline
! 		     function does not overlap the argument list being
! 		     evaluated.  This is usually an overestimate because
! 		     allocate_dynamic_stack_space reserves space for an
! 		     outgoing argument list in addition to the requested
! 		     space, but there is no way to ask for stack space such
! 		     that an argument list of a certain length can be
! 		     safely constructed.
! 
! 		     Add the stack space reserved for register arguments, if
! 		     any, in the inline function.  What is really needed is the
! 		     largest value of reg_parm_stack_space in the inline
! 		     function, but that is not available.  Using the current
! 		     value of reg_parm_stack_space is wrong, but gives
! 		     correct results on all supported machines.  */
! 
! 		  int adjust = (DECL_SAVED_INSNS (fndecl)->outgoing_args_size
! 				+ reg_parm_stack_space);
! 
! 		  start_sequence ();
! 		  emit_stack_save (SAVE_BLOCK, &old_stack_level, NULL_RTX);
! 		  allocate_dynamic_stack_space (GEN_INT (adjust),
! 						NULL_RTX, BITS_PER_UNIT);
! 		  seq = get_insns ();
! 		  end_sequence ();
! 		  emit_insn_before (seq, first_insn);
! 		  emit_stack_restore (SAVE_BLOCK, old_stack_level, NULL_RTX);
! 		}
! 	    }
  	}
- 
-       /* If the result is equivalent to TARGET, return TARGET to simplify
-          checks in store_expr.  They can be equivalent but not equal in the
-          case of a function that returns BLKmode.  */
-       if (temp != target && rtx_equal_p (temp, target))
- 	return target;
-       return temp;
      }
- 
-   /* If inlining failed, mark FNDECL as needing to be compiled
-      separately after all.  If function was declared inline,
-      give a warning.  */
-   if (DECL_INLINE (fndecl) && warn_inline && !flag_no_inline
-       && optimize > 0 && !TREE_ADDRESSABLE (fndecl))
-     {
-       warning ("%Jinlining failed in call to '%F'", fndecl, fndecl);
-       warning ("called from here");
-     }
-   (*lang_hooks.mark_addressable) (fndecl);
-   return (rtx) (size_t) - 1;
  }
  
  /* We need to pop PENDING_STACK_ADJUST bytes.  But, if the arguments
--- 1579,1588 ----
  	    use_group_regs (call_fusage, reg);
  	  else if (nregs == -1)
  	    use_reg (call_fusage, reg);
! 	  else if (nregs > 0)
! 	    use_regs (call_fusage, REGNO (reg), nregs);
  	}
      }
  }
  
  /* We need to pop PENDING_STACK_ADJUST bytes.  But, if the arguments
*************** try_to_integrate (tree fndecl, tree actp
*** 1854,1867 ****
  static int
  combine_pending_stack_adjustment_and_call (int unadjusted_args_size,
  					   struct args_size *args_size,
! 					   int preferred_unit_stack_boundary)
  {
    /* The number of bytes to pop so that the stack will be
       under-aligned by UNADJUSTED_ARGS_SIZE bytes.  */
    HOST_WIDE_INT adjustment;
    /* The alignment of the stack after the arguments are pushed, if we
       just pushed the arguments without adjust the stack here.  */
!   HOST_WIDE_INT unadjusted_alignment;
  
    unadjusted_alignment
      = ((stack_pointer_delta + unadjusted_args_size)
--- 1597,1610 ----
  static int
  combine_pending_stack_adjustment_and_call (int unadjusted_args_size,
  					   struct args_size *args_size,
! 					   unsigned int preferred_unit_stack_boundary)
  {
    /* The number of bytes to pop so that the stack will be
       under-aligned by UNADJUSTED_ARGS_SIZE bytes.  */
    HOST_WIDE_INT adjustment;
    /* The alignment of the stack after the arguments are pushed, if we
       just pushed the arguments without adjust the stack here.  */
!   unsigned HOST_WIDE_INT unadjusted_alignment;
  
    unadjusted_alignment
      = ((stack_pointer_delta + unadjusted_args_size)
*************** check_sibcall_argument_overlap (rtx insn
*** 1996,2055 ****
    return insn != NULL_RTX;
  }
  
! static tree
! fix_unsafe_tree (tree t)
! {
!   switch (unsafe_for_reeval (t))
!     {
!     case 0: /* Safe.  */
!       break;
  
!     case 1: /* Mildly unsafe.  */
!       t = unsave_expr (t);
!       break;
  
!     case 2: /* Wildly unsafe.  */
!       {
! 	tree var = build_decl (VAR_DECL, NULL_TREE,
! 			       TREE_TYPE (t));
! 	SET_DECL_RTL (var,
! 		      expand_expr (t, NULL_RTX, VOIDmode, EXPAND_NORMAL));
! 	t = var;
!       }
!       break;
  
!     default:
!       abort ();
!     }
!   return t;
  }
  
  
! /* If function value *VALUE was returned at the most significant end of a
!    register, shift it towards the least significant end and convert it to
!    TYPE's mode.  Return true and update *VALUE if some action was needed.
! 
!    TYPE is the type of the function's return value, which is known not
!    to have mode BLKmode.  */
! 
! static bool
! shift_returned_value (tree type, rtx *value)
  {
!   if (targetm.calls.return_in_msb (type))
!     {
!       HOST_WIDE_INT shift;
  
!       shift = (GET_MODE_BITSIZE (GET_MODE (*value))
! 	       - BITS_PER_UNIT * int_size_in_bytes (type));
!       if (shift > 0)
  	{
! 	  *value = expand_binop (GET_MODE (*value), lshr_optab, *value,
! 				 GEN_INT (shift), 0, 1, OPTAB_WIDEN);
! 	  *value = convert_to_mode (TYPE_MODE (type), *value, 0);
! 	  return true;
  	}
      }
-   return false;
  }
  
  /* Generate all the code for a function call
--- 1739,1789 ----
    return insn != NULL_RTX;
  }
  
! /* Given that a function returns a value of mode MODE at the most
!    significant end of hard register VALUE, shift VALUE left or right
!    as specified by LEFT_P.  Return true if some action was needed.  */
  
! bool
! shift_return_value (enum machine_mode mode, bool left_p, rtx value)
! {
!   HOST_WIDE_INT shift;
  
!   gcc_assert (REG_P (value) && HARD_REGISTER_P (value));
!   shift = GET_MODE_BITSIZE (GET_MODE (value)) - GET_MODE_BITSIZE (mode);
!   if (shift == 0)
!     return false;
  
!   /* Use ashr rather than lshr for right shifts.  This is for the benefit
!      of the MIPS port, which requires SImode values to be sign-extended
!      when stored in 64-bit registers.  */
!   if (!force_expand_binop (GET_MODE (value), left_p ? ashl_optab : ashr_optab,
! 			   value, GEN_INT (shift), value, 1, OPTAB_WIDEN))
!     gcc_unreachable ();
!   return true;
  }
  
+ /* Remove all REG_EQUIV notes found in the insn chain.  */
  
! static void
! purge_reg_equiv_notes (void)
  {
!   rtx insn;
  
!   for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
!     {
!       while (1)
  	{
! 	  rtx note = find_reg_note (insn, REG_EQUIV, 0);
! 	  if (note)
! 	    {
! 	      /* Remove the note and keep looking at the notes for
! 		 this insn.  */
! 	      remove_note (insn, note);
! 	      continue;
! 	    }
! 	  break;
  	}
      }
  }
  
  /* Generate all the code for a function call
*************** expand_call (tree exp, rtx target, int i
*** 2068,2078 ****
    tree actparms = TREE_OPERAND (exp, 1);
    /* RTX for the function to be called.  */
    rtx funexp;
-   /* Sequence of insns to perform a tail recursive "call".  */
-   rtx tail_recursion_insns = NULL_RTX;
    /* Sequence of insns to perform a normal "call".  */
    rtx normal_call_insns = NULL_RTX;
!   /* Sequence of insns to perform a tail recursive "call".  */
    rtx tail_call_insns = NULL_RTX;
    /* Data type of the function.  */
    tree funtype;
--- 1802,1810 ----
    tree actparms = TREE_OPERAND (exp, 1);
    /* RTX for the function to be called.  */
    rtx funexp;
    /* Sequence of insns to perform a normal "call".  */
    rtx normal_call_insns = NULL_RTX;
!   /* Sequence of insns to perform a tail "call".  */
    rtx tail_call_insns = NULL_RTX;
    /* Data type of the function.  */
    tree funtype;
*************** expand_call (tree exp, rtx target, int i
*** 2082,2090 ****
    tree fndecl = 0;
    /* The type of the function being called.  */
    tree fntype;
!   rtx insn;
!   int try_tail_call = 1;
!   int try_tail_recursion = 1;
    int pass;
  
    /* Register in which non-BLKmode value will be returned,
--- 1814,1820 ----
    tree fndecl = 0;
    /* The type of the function being called.  */
    tree fntype;
!   bool try_tail_call = CALL_EXPR_TAILCALL (exp);
    int pass;
  
    /* Register in which non-BLKmode value will be returned,
*************** expand_call (tree exp, rtx target, int i
*** 2145,2152 ****
  
    /* Mask of ECF_ flags.  */
    int flags = 0;
-   /* Nonzero if this is a call to an inline function.  */
-   int is_integrable = 0;
  #ifdef REG_PARM_STACK_SPACE
    /* Define the boundary of the register parm stack space that needs to be
       saved, if any.  */
--- 1875,1880 ----
*************** expand_call (tree exp, rtx target, int i
*** 2155,2161 ****
  #endif
  
    int initial_highest_arg_in_use = highest_outgoing_arg_in_use;
-   rtx temp_target = 0;
    char *initial_stack_usage_map = stack_usage_map;
  
    int old_stack_allocated;
--- 1883,1888 ----
*************** expand_call (tree exp, rtx target, int i
*** 2176,2236 ****
    tree addr = TREE_OPERAND (exp, 0);
    int i;
    /* The alignment of the stack, in bits.  */
!   HOST_WIDE_INT preferred_stack_boundary;
    /* The alignment of the stack, in bytes.  */
!   HOST_WIDE_INT preferred_unit_stack_boundary;
! 
    /* See if this is "nothrow" function call.  */
    if (TREE_NOTHROW (exp))
      flags |= ECF_NOTHROW;
  
!   /* See if we can find a DECL-node for the actual function.
!      As a result, decide whether this is a call to an integrable function.  */
! 
    fndecl = get_callee_fndecl (exp);
    if (fndecl)
      {
        fntype = TREE_TYPE (fndecl);
-       if (!flag_no_inline
- 	  && fndecl != current_function_decl
- 	  && DECL_INLINE (fndecl)
- 	  && DECL_SAVED_INSNS (fndecl)
- 	  && DECL_SAVED_INSNS (fndecl)->inlinable)
- 	is_integrable = 1;
-       else if (! TREE_ADDRESSABLE (fndecl))
- 	{
- 	  /* In case this function later becomes inlinable,
- 	     record that there was already a non-inline call to it.
- 
- 	     Use abstraction instead of setting TREE_ADDRESSABLE
- 	     directly.  */
- 	  if (DECL_INLINE (fndecl) && warn_inline && !flag_no_inline
- 	      && optimize > 0)
- 	    {
- 	      warning ("%Jcan't inline call to '%F'", fndecl, fndecl);
- 	      warning ("called from here");
- 	    }
- 	  (*lang_hooks.mark_addressable) (fndecl);
- 	}
- 
-       if (ignore
- 	  && lookup_attribute ("warn_unused_result",
- 			       TYPE_ATTRIBUTES (TREE_TYPE (fndecl))))
- 	warning ("ignoring return value of `%D', "
- 		 "declared with attribute warn_unused_result", fndecl);
- 
        flags |= flags_from_decl_or_type (fndecl);
      }
- 
-   /* If we don't have specific function to call, see if we have a
-      attributes set in the type.  */
    else
      {
        fntype = TREE_TYPE (TREE_TYPE (p));
-       if (ignore
- 	  && lookup_attribute ("warn_unused_result", TYPE_ATTRIBUTES (fntype)))
- 	warning ("ignoring return value of function "
- 		 "declared with attribute warn_unused_result");
        flags |= flags_from_decl_or_type (fntype);
      }
  
--- 1903,1928 ----
    tree addr = TREE_OPERAND (exp, 0);
    int i;
    /* The alignment of the stack, in bits.  */
!   unsigned HOST_WIDE_INT preferred_stack_boundary;
    /* The alignment of the stack, in bytes.  */
!   unsigned HOST_WIDE_INT preferred_unit_stack_boundary;
!   /* The static chain value to use for this call.  */
!   rtx static_chain_value;
    /* See if this is "nothrow" function call.  */
    if (TREE_NOTHROW (exp))
      flags |= ECF_NOTHROW;
  
!   /* See if we can find a DECL-node for the actual function, and get the
!      function attributes (flags) from the function decl or type node.  */
    fndecl = get_callee_fndecl (exp);
    if (fndecl)
      {
        fntype = TREE_TYPE (fndecl);
        flags |= flags_from_decl_or_type (fndecl);
      }
    else
      {
        fntype = TREE_TYPE (TREE_TYPE (p));
        flags |= flags_from_decl_or_type (fntype);
      }
  
*************** expand_call (tree exp, rtx target, int i
*** 2268,2279 ****
      }
  
  #ifdef REG_PARM_STACK_SPACE
- #ifdef MAYBE_REG_PARM_STACK_SPACE
-   reg_parm_stack_space = MAYBE_REG_PARM_STACK_SPACE;
- #else
    reg_parm_stack_space = REG_PARM_STACK_SPACE (fndecl);
  #endif
- #endif
  
  #ifndef OUTGOING_REG_PARM_STACK_SPACE
    if (reg_parm_stack_space > 0 && PUSH_ARGS)
--- 1960,1967 ----
*************** expand_call (tree exp, rtx target, int i
*** 2291,2305 ****
  #ifdef PCC_STATIC_STRUCT_RETURN
        {
  	pcc_struct_value = 1;
- 	/* Easier than making that case work right.  */
- 	if (is_integrable)
- 	  {
- 	    /* In case this is a static function, note that it has been
- 	       used.  */
- 	    if (! TREE_ADDRESSABLE (fndecl))
- 	      (*lang_hooks.mark_addressable) (fndecl);
- 	    is_integrable = 0;
- 	  }
        }
  #else /* not PCC_STATIC_STRUCT_RETURN */
        {
--- 1979,1984 ----
*************** expand_call (tree exp, rtx target, int i
*** 2315,2322 ****
  	    structure_value_addr = expand_expr (return_arg, NULL_RTX,
  						VOIDmode, EXPAND_NORMAL);
  	  }
! 	else if (target && GET_CODE (target) == MEM)
  	  structure_value_addr = XEXP (target, 0);
  	else
  	  {
  	    /* For variable-sized objects, we must be called with a target
--- 1994,2003 ----
  	    structure_value_addr = expand_expr (return_arg, NULL_RTX,
  						VOIDmode, EXPAND_NORMAL);
  	  }
! #if 0
! 	else if (target && MEM_P (target))
  	  structure_value_addr = XEXP (target, 0);
+ #endif
  	else
  	  {
  	    /* For variable-sized objects, we must be called with a target
*************** expand_call (tree exp, rtx target, int i
*** 2332,2348 ****
  #endif /* not PCC_STATIC_STRUCT_RETURN */
      }
  
-   /* If called function is inline, try to integrate it.  */
- 
-   if (is_integrable)
-     {
-       rtx temp = try_to_integrate (fndecl, actparms, target,
- 				   ignore, TREE_TYPE (exp),
- 				   structure_value_addr);
-       if (temp != (rtx) (size_t) - 1)
- 	return temp;
-     }
- 
    /* Figure out the amount to which the stack should be aligned.  */
    preferred_stack_boundary = PREFERRED_STACK_BOUNDARY;
    if (fndecl)
--- 2013,2018 ----
*************** expand_call (tree exp, rtx target, int i
*** 2354,2361 ****
  
    /* Operand 0 is a pointer-to-function; get the type of the function.  */
    funtype = TREE_TYPE (addr);
!   if (! POINTER_TYPE_P (funtype))
!     abort ();
    funtype = TREE_TYPE (funtype);
  
    /* Munge the tree to split complex arguments into their imaginary
--- 2024,2030 ----
  
    /* Operand 0 is a pointer-to-function; get the type of the function.  */
    funtype = TREE_TYPE (addr);
!   gcc_assert (POINTER_TYPE_P (funtype));
    funtype = TREE_TYPE (funtype);
  
    /* Munge the tree to split complex arguments into their imaginary
*************** expand_call (tree exp, rtx target, int i
*** 2368,2377 ****
    else
      type_arg_types = TYPE_ARG_TYPES (funtype);
  
-   /* See if this is a call to a function that can return more than once
-      or a call to longjmp or malloc.  */
-   flags |= special_function_p (fndecl, flags);
- 
    if (flags & ECF_MAY_BE_ALLOCA)
      current_function_calls_alloca = 1;
  
--- 2037,2042 ----
*************** expand_call (tree exp, rtx target, int i
*** 2384,2394 ****
  	 is not a REG, we must always copy it into a register.
  	 If it is virtual_outgoing_args_rtx, we must copy it to another
  	 register in some cases.  */
!       rtx temp = (GET_CODE (structure_value_addr) != REG
  		  || (ACCUMULATE_OUTGOING_ARGS
  		      && stack_arg_under_construction
  		      && structure_value_addr == virtual_outgoing_args_rtx)
! 		  ? copy_addr_to_reg (convert_memory_address 
  				      (Pmode, structure_value_addr))
  		  : structure_value_addr);
  
--- 2049,2059 ----
  	 is not a REG, we must always copy it into a register.
  	 If it is virtual_outgoing_args_rtx, we must copy it to another
  	 register in some cases.  */
!       rtx temp = (!REG_P (structure_value_addr)
  		  || (ACCUMULATE_OUTGOING_ARGS
  		      && stack_arg_under_construction
  		      && structure_value_addr == virtual_outgoing_args_rtx)
! 		  ? copy_addr_to_reg (convert_memory_address
  				      (Pmode, structure_value_addr))
  		  : structure_value_addr);
  
*************** expand_call (tree exp, rtx target, int i
*** 2464,2470 ****
  				   &args_so_far, reg_parm_stack_space,
  				   &old_stack_level, &old_pending_adj,
  				   &must_preallocate, &flags,
! 				   CALL_FROM_THUNK_P (exp));
  
    if (args_size.var)
      {
--- 2129,2135 ----
  				   &args_so_far, reg_parm_stack_space,
  				   &old_stack_level, &old_pending_adj,
  				   &must_preallocate, &flags,
! 				   &try_tail_call, CALL_FROM_THUNK_P (exp));
  
    if (args_size.var)
      {
*************** expand_call (tree exp, rtx target, int i
*** 2494,2526 ****
  	  || (!ACCUMULATE_OUTGOING_ARGS && args_size.constant)))
      structure_value_addr = copy_to_reg (structure_value_addr);
  
!   /* Tail calls can make things harder to debug, and we're traditionally
       pushed these optimizations into -O2.  Don't try if we're already
       expanding a call, as that means we're an argument.  Don't try if
!      there's cleanups, as we know there's code to follow the call.
! 
!      If rtx_equal_function_value_matters is false, that means we've
!      finished with regular parsing.  Which means that some of the
!      machinery we use to generate tail-calls is no longer in place.
!      This is most often true of sjlj-exceptions, which we couldn't
!      tail-call to anyway.
  
-      If current_nesting_level () == 0, we're being called after
-      the function body has been expanded.  This can happen when
-      setting up trampolines in expand_function_end.  */
    if (currently_expanding_call++ != 0
        || !flag_optimize_sibling_calls
!       || !rtx_equal_function_value_matters
!       || current_nesting_level () == 0
!       || any_pending_cleanups ()
!       || args_size.var)
!     try_tail_call = try_tail_recursion = 0;
! 
!   /* Tail recursion fails, when we are not dealing with recursive calls.  */
!   if (!try_tail_recursion
!       || TREE_CODE (addr) != ADDR_EXPR
!       || TREE_OPERAND (addr, 0) != current_function_decl)
!     try_tail_recursion = 0;
  
    /*  Rest of purposes for tail call optimizations to fail.  */
    if (
--- 2159,2174 ----
  	  || (!ACCUMULATE_OUTGOING_ARGS && args_size.constant)))
      structure_value_addr = copy_to_reg (structure_value_addr);
  
!   /* Tail calls can make things harder to debug, and we've traditionally
       pushed these optimizations into -O2.  Don't try if we're already
       expanding a call, as that means we're an argument.  Don't try if
!      there's cleanups, as we know there's code to follow the call.  */
  
    if (currently_expanding_call++ != 0
        || !flag_optimize_sibling_calls
!       || args_size.var
!       || lookup_stmt_eh_region (exp) >= 0)
!     try_tail_call = 0;
  
    /*  Rest of purposes for tail call optimizations to fail.  */
    if (
*************** expand_call (tree exp, rtx target, int i
*** 2537,2546 ****
        || structure_value_addr != NULL_RTX
        /* Check whether the target is able to optimize the call
  	 into a sibcall.  */
!       || !(*targetm.function_ok_for_sibcall) (fndecl, exp)
        /* Functions that do not return exactly once may not be sibcall
           optimized.  */
!       || (flags & (ECF_RETURNS_TWICE | ECF_LONGJMP | ECF_NORETURN))
        || TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (addr)))
        /* If the called function is nested in the current one, it might access
           some of the caller's arguments, but could clobber them beforehand if
--- 2185,2194 ----
        || structure_value_addr != NULL_RTX
        /* Check whether the target is able to optimize the call
  	 into a sibcall.  */
!       || !targetm.function_ok_for_sibcall (fndecl, exp)
        /* Functions that do not return exactly once may not be sibcall
           optimized.  */
!       || (flags & (ECF_RETURNS_TWICE | ECF_NORETURN))
        || TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (addr)))
        /* If the called function is nested in the current one, it might access
           some of the caller's arguments, but could clobber them beforehand if
*************** expand_call (tree exp, rtx target, int i
*** 2555,2667 ****
  	  != RETURN_POPS_ARGS (current_function_decl,
  			       TREE_TYPE (current_function_decl),
  			       current_function_args_size))
!       || !(*lang_hooks.decls.ok_for_sibcall) (fndecl))
      try_tail_call = 0;
  
-   if (try_tail_call || try_tail_recursion)
-     {
-       int end, inc;
-       actparms = NULL_TREE;
-       /* Ok, we're going to give the tail call the old college try.
- 	 This means we're going to evaluate the function arguments
- 	 up to three times.  There are two degrees of badness we can
- 	 encounter, those that can be unsaved and those that can't.
- 	 (See unsafe_for_reeval commentary for details.)
- 
- 	 Generate a new argument list.  Pass safe arguments through
- 	 unchanged.  For the easy badness wrap them in UNSAVE_EXPRs.
- 	 For hard badness, evaluate them now and put their resulting
- 	 rtx in a temporary VAR_DECL.
- 
- 	 initialize_argument_information has ordered the array for the
- 	 order to be pushed, and we must remember this when reconstructing
- 	 the original argument order.  */
- 
-       if (PUSH_ARGS_REVERSED)
- 	{
- 	  inc = 1;
- 	  i = 0;
- 	  end = num_actuals;
- 	}
-       else
- 	{
- 	  inc = -1;
- 	  i = num_actuals - 1;
- 	  end = -1;
- 	}
- 
-       for (; i != end; i += inc)
- 	{
-           args[i].tree_value = fix_unsafe_tree (args[i].tree_value);
- 	  /* We need to build actparms for optimize_tail_recursion.  We can
- 	     safely trash away TREE_PURPOSE, since it is unused by this
- 	     function.  */
- 	  if (try_tail_recursion)
- 	    actparms = tree_cons (NULL_TREE, args[i].tree_value, actparms);
- 	}
-       /* Do the same for the function address if it is an expression.  */
-       if (!fndecl)
-         addr = fix_unsafe_tree (addr);
-       /* Expanding one of those dangerous arguments could have added
- 	 cleanups, but otherwise give it a whirl.  */
-       if (any_pending_cleanups ())
- 	try_tail_call = try_tail_recursion = 0;
-     }
- 
-   /* Generate a tail recursion sequence when calling ourselves.  */
- 
-   if (try_tail_recursion)
-     {
-       /* We want to emit any pending stack adjustments before the tail
- 	 recursion "call".  That way we know any adjustment after the tail
- 	 recursion call can be ignored if we indeed use the tail recursion
- 	 call expansion.  */
-       int save_pending_stack_adjust = pending_stack_adjust;
-       int save_stack_pointer_delta = stack_pointer_delta;
- 
-       /* Emit any queued insns now; otherwise they would end up in
- 	 only one of the alternates.  */
-       emit_queue ();
- 
-       /* Use a new sequence to hold any RTL we generate.  We do not even
- 	 know if we will use this RTL yet.  The final decision can not be
- 	 made until after RTL generation for the entire function is
- 	 complete.  */
-       start_sequence ();
-       /* If expanding any of the arguments creates cleanups, we can't
- 	 do a tailcall.  So, we'll need to pop the pending cleanups
- 	 list.  If, however, all goes well, and there are no cleanups
- 	 then the call to expand_start_target_temps will have no
- 	 effect.  */
-       expand_start_target_temps ();
-       if (optimize_tail_recursion (actparms, get_last_insn ()))
- 	{
- 	  if (any_pending_cleanups ())
- 	    try_tail_call = try_tail_recursion = 0;
- 	  else
- 	    tail_recursion_insns = get_insns ();
- 	}
-       expand_end_target_temps ();
-       end_sequence ();
- 
-       /* Restore the original pending stack adjustment for the sibling and
- 	 normal call cases below.  */
-       pending_stack_adjust = save_pending_stack_adjust;
-       stack_pointer_delta = save_stack_pointer_delta;
-     }
- 
-   if (profile_arc_flag && (flags & ECF_FORK_OR_EXEC))
-     {
-       /* A fork duplicates the profile information, and an exec discards
- 	 it.  We can't rely on fork/exec to be paired.  So write out the
- 	 profile information we have gathered so far, and clear it.  */
-       /* ??? When Linux's __clone is called with CLONE_VM set, profiling
- 	 is subject to race conditions, just as with multithreaded
- 	 programs.  */
- 
-       emit_library_call (gcov_flush_libfunc, LCT_ALWAYS_RETURN, VOIDmode, 0);
-     }
- 
    /* Ensure current function's preferred stack boundary is at least
       what we need.  We don't have to increase alignment for recursive
       functions.  */
--- 2203,2211 ----
  	  != RETURN_POPS_ARGS (current_function_decl,
  			       TREE_TYPE (current_function_decl),
  			       current_function_args_size))
!       || !lang_hooks.decls.ok_for_sibcall (fndecl))
      try_tail_call = 0;
  
    /* Ensure current function's preferred stack boundary is at least
       what we need.  We don't have to increase alignment for recursive
       functions.  */
*************** expand_call (tree exp, rtx target, int i
*** 2673,2680 ****
  
    preferred_unit_stack_boundary = preferred_stack_boundary / BITS_PER_UNIT;
  
-   function_call_count++;
- 
    /* We want to make two insn chains; one for a sibling call, the other
       for a normal call.  We will select one of the two chains after
       initial RTL generation is complete.  */
--- 2217,2222 ----
*************** expand_call (tree exp, rtx target, int i
*** 2683,2689 ****
        int sibcall_failure = 0;
        /* We want to emit any pending stack adjustments before the tail
  	 recursion "call".  That way we know any adjustment after the tail
! 	 recursion call can be ignored if we indeed use the tail recursion
  	 call expansion.  */
        int save_pending_stack_adjust = 0;
        int save_stack_pointer_delta = 0;
--- 2225,2231 ----
        int sibcall_failure = 0;
        /* We want to emit any pending stack adjustments before the tail
  	 recursion "call".  That way we know any adjustment after the tail
! 	 recursion call can be ignored if we indeed use the tail
  	 call expansion.  */
        int save_pending_stack_adjust = 0;
        int save_stack_pointer_delta = 0;
*************** expand_call (tree exp, rtx target, int i
*** 2692,2701 ****
  
        if (pass == 0)
  	{
- 	  /* Emit any queued insns now; otherwise they would end up in
-              only one of the alternates.  */
- 	  emit_queue ();
- 
  	  /* State variables we need to save and restore between
  	     iterations.  */
  	  save_pending_stack_adjust = pending_stack_adjust;
--- 2234,2239 ----
*************** expand_call (tree exp, rtx target, int i
*** 2717,2739 ****
  	 sibcall_failure instead of continuing the loop.  */
        start_sequence ();
  
-       if (pass == 0)
- 	{
- 	  /* We know at this point that there are not currently any
- 	     pending cleanups.  If, however, in the process of evaluating
- 	     the arguments we were to create some, we'll need to be
- 	     able to get rid of them.  */
- 	  expand_start_target_temps ();
- 	}
- 
        /* Don't let pending stack adjusts add up to too much.
  	 Also, do all pending adjustments now if there is any chance
  	 this might be a call to alloca or if we are expanding a sibling
  	 call sequence or if we are calling a function that is to return
! 	 with stack pointer depressed.  */
        if (pending_stack_adjust >= 32
  	  || (pending_stack_adjust > 0
  	      && (flags & (ECF_MAY_BE_ALLOCA | ECF_SP_DEPRESSED)))
  	  || pass == 0)
  	do_pending_stack_adjust ();
  
--- 2255,2272 ----
  	 sibcall_failure instead of continuing the loop.  */
        start_sequence ();
  
        /* Don't let pending stack adjusts add up to too much.
  	 Also, do all pending adjustments now if there is any chance
  	 this might be a call to alloca or if we are expanding a sibling
  	 call sequence or if we are calling a function that is to return
! 	 with stack pointer depressed.
! 	 Also do the adjustments before a throwing call, otherwise
! 	 exception handling can fail; PR 19225. */
        if (pending_stack_adjust >= 32
  	  || (pending_stack_adjust > 0
  	      && (flags & (ECF_MAY_BE_ALLOCA | ECF_SP_DEPRESSED)))
+ 	  || (pending_stack_adjust > 0
+ 	      && flag_exceptions && !(flags & ECF_NOTHROW))
  	  || pass == 0)
  	do_pending_stack_adjust ();
  
*************** expand_call (tree exp, rtx target, int i
*** 2742,2751 ****
        if (pass && (flags & ECF_LIBCALL_BLOCK))
  	NO_DEFER_POP;
  
- #ifdef FINAL_REG_PARM_STACK_SPACE
-       reg_parm_stack_space = FINAL_REG_PARM_STACK_SPACE (args_size.constant,
- 							 args_size.var);
- #endif
        /* Precompute any arguments as needed.  */
        if (pass)
  	precompute_arguments (flags, num_actuals, args);
--- 2275,2280 ----
*************** expand_call (tree exp, rtx target, int i
*** 3019,3024 ****
--- 2548,2559 ----
  	 once we have started filling any specific hard regs.  */
        precompute_register_parameters (num_actuals, args, &reg_parm_seen);
  
+       if (TREE_OPERAND (exp, 2))
+ 	static_chain_value = expand_expr (TREE_OPERAND (exp, 2),
+ 					  NULL_RTX, VOIDmode, 0);
+       else
+ 	static_chain_value = 0;
+ 
  #ifdef REG_PARM_STACK_SPACE
        /* Save the fixed argument area if it's part of the caller's frame and
  	 is clobbered by argument setup for this call.  */
*************** expand_call (tree exp, rtx target, int i
*** 3098,3123 ****
  	 structure value.  */
        if (pass != 0 && structure_value_addr && ! structure_value_addr_parm)
  	{
! 	  structure_value_addr 
  	    = convert_memory_address (Pmode, structure_value_addr);
  	  emit_move_insn (struct_value,
  			  force_reg (Pmode,
  				     force_operand (structure_value_addr,
  						    NULL_RTX)));
  
! 	  if (GET_CODE (struct_value) == REG)
  	    use_reg (&call_fusage, struct_value);
  	}
  
!       funexp = prepare_call_address (funexp, fndecl, &call_fusage,
! 				     reg_parm_seen, pass == 0);
  
        load_register_parameters (args, num_actuals, &call_fusage, flags,
  				pass == 0, &sibcall_failure);
  
-       /* Perform postincrements before actually calling the function.  */
-       emit_queue ();
- 
        /* Save a pointer to the last insn before the call, so that we can
  	 later safely search backwards to find the CALL_INSN.  */
        before_call = get_last_insn ();
--- 2633,2655 ----
  	 structure value.  */
        if (pass != 0 && structure_value_addr && ! structure_value_addr_parm)
  	{
! 	  structure_value_addr
  	    = convert_memory_address (Pmode, structure_value_addr);
  	  emit_move_insn (struct_value,
  			  force_reg (Pmode,
  				     force_operand (structure_value_addr,
  						    NULL_RTX)));
  
! 	  if (REG_P (struct_value))
  	    use_reg (&call_fusage, struct_value);
  	}
  
!       funexp = prepare_call_address (funexp, static_chain_value,
! 				     &call_fusage, reg_parm_seen, pass == 0);
  
        load_register_parameters (args, num_actuals, &call_fusage, flags,
  				pass == 0, &sibcall_failure);
  
        /* Save a pointer to the last insn before the call, so that we can
  	 later safely search backwards to find the CALL_INSN.  */
        before_call = get_last_insn ();
*************** expand_call (tree exp, rtx target, int i
*** 3137,3151 ****
  	 now!  */
  
        /* Stack must be properly aligned now.  */
!       if (pass && stack_pointer_delta % preferred_unit_stack_boundary)
! 	abort ();
  
        /* Generate the actual call instruction.  */
!       emit_call_1 (funexp, fndecl, funtype, unadjusted_args_size,
  		   adjusted_args_size.constant, struct_value_size,
  		   next_arg_reg, valreg, old_inhibit_defer_pop, call_fusage,
  		   flags, & args_so_far);
  
        /* If call is cse'able, make appropriate pair of reg-notes around it.
  	 Test valreg so we don't crash; may safely ignore `const'
  	 if return type is void.  Disable for PARALLEL return values, because
--- 2669,2697 ----
  	 now!  */
  
        /* Stack must be properly aligned now.  */
!       gcc_assert (!pass
! 		  || !(stack_pointer_delta % preferred_unit_stack_boundary));
  
        /* Generate the actual call instruction.  */
!       emit_call_1 (funexp, exp, fndecl, funtype, unadjusted_args_size,
  		   adjusted_args_size.constant, struct_value_size,
  		   next_arg_reg, valreg, old_inhibit_defer_pop, call_fusage,
  		   flags, & args_so_far);
  
+       /* If a non-BLKmode value is returned at the most significant end
+ 	 of a register, shift the register right by the appropriate amount
+ 	 and update VALREG accordingly.  BLKmode values are handled by the
+ 	 group load/store machinery below.  */
+       if (!structure_value_addr
+ 	  && !pcc_struct_value
+ 	  && TYPE_MODE (TREE_TYPE (exp)) != BLKmode
+ 	  && targetm.calls.return_in_msb (TREE_TYPE (exp)))
+ 	{
+ 	  if (shift_return_value (TYPE_MODE (TREE_TYPE (exp)), false, valreg))
+ 	    sibcall_failure = 1;
+ 	  valreg = gen_rtx_REG (TYPE_MODE (TREE_TYPE (exp)), REGNO (valreg));
+ 	}
+ 
        /* If call is cse'able, make appropriate pair of reg-notes around it.
  	 Test valreg so we don't crash; may safely ignore `const'
  	 if return type is void.  Disable for PARALLEL return values, because
*************** expand_call (tree exp, rtx target, int i
*** 3161,3167 ****
  	  /* Expansion of block moves possibly introduced a loop that may
  	     not appear inside libcall block.  */
  	  for (insn = insns; insn; insn = NEXT_INSN (insn))
! 	    if (GET_CODE (insn) == JUMP_INSN)
  	      failed = true;
  
  	  if (failed)
--- 2707,2713 ----
  	  /* Expansion of block moves possibly introduced a loop that may
  	     not appear inside libcall block.  */
  	  for (insn = insns; insn; insn = NEXT_INSN (insn))
! 	    if (JUMP_P (insn))
  	      failed = true;
  
  	  if (failed)
*************** expand_call (tree exp, rtx target, int i
*** 3182,3193 ****
  	      end_sequence ();
  	      if (flag_unsafe_math_optimizations
  		  && fndecl
! 		  && DECL_BUILT_IN (fndecl)
  		  && (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_SQRT
  		      || DECL_FUNCTION_CODE (fndecl) == BUILT_IN_SQRTF
  		      || DECL_FUNCTION_CODE (fndecl) == BUILT_IN_SQRTL))
! 		note = gen_rtx_fmt_e (SQRT, 
! 				      GET_MODE (temp), 
  				      args[0].initial_value);
  	      else
  		{
--- 2728,2739 ----
  	      end_sequence ();
  	      if (flag_unsafe_math_optimizations
  		  && fndecl
! 		  && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL
  		  && (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_SQRT
  		      || DECL_FUNCTION_CODE (fndecl) == BUILT_IN_SQRTF
  		      || DECL_FUNCTION_CODE (fndecl) == BUILT_IN_SQRTL))
! 		note = gen_rtx_fmt_e (SQRT,
! 				      GET_MODE (temp),
  				      args[0].initial_value);
  	      else
  		{
*************** expand_call (tree exp, rtx target, int i
*** 3198,3204 ****
  		    note = gen_rtx_EXPR_LIST (VOIDmode,
  					      args[i].initial_value, note);
  		  note = gen_rtx_EXPR_LIST (VOIDmode, funexp, note);
! 		  
  		  if (flags & ECF_PURE)
  		    note = gen_rtx_EXPR_LIST (VOIDmode,
  			gen_rtx_USE (VOIDmode,
--- 2744,2750 ----
  		    note = gen_rtx_EXPR_LIST (VOIDmode,
  					      args[i].initial_value, note);
  		  note = gen_rtx_EXPR_LIST (VOIDmode, funexp, note);
! 
  		  if (flags & ECF_PURE)
  		    note = gen_rtx_EXPR_LIST (VOIDmode,
  			gen_rtx_USE (VOIDmode,
*************** expand_call (tree exp, rtx target, int i
*** 3239,3257 ****
  	 if nonvolatile values are live.  For functions that cannot return,
  	 inform flow that control does not fall through.  */
  
!       if ((flags & (ECF_NORETURN | ECF_LONGJMP)) || pass == 0)
  	{
  	  /* The barrier must be emitted
  	     immediately after the CALL_INSN.  Some ports emit more
  	     than just a CALL_INSN above, so we must search for it here.  */
  
  	  rtx last = get_last_insn ();
! 	  while (GET_CODE (last) != CALL_INSN)
  	    {
  	      last = PREV_INSN (last);
  	      /* There was no CALL_INSN?  */
! 	      if (last == before_call)
! 		abort ();
  	    }
  
  	  emit_barrier_after (last);
--- 2785,2802 ----
  	 if nonvolatile values are live.  For functions that cannot return,
  	 inform flow that control does not fall through.  */
  
!       if ((flags & ECF_NORETURN) || pass == 0)
  	{
  	  /* The barrier must be emitted
  	     immediately after the CALL_INSN.  Some ports emit more
  	     than just a CALL_INSN above, so we must search for it here.  */
  
  	  rtx last = get_last_insn ();
! 	  while (!CALL_P (last))
  	    {
  	      last = PREV_INSN (last);
  	      /* There was no CALL_INSN?  */
! 	      gcc_assert (last != before_call);
  	    }
  
  	  emit_barrier_after (last);
*************** expand_call (tree exp, rtx target, int i
*** 3266,3292 ****
  	    }
  	}
  
-       if (flags & ECF_LONGJMP)
- 	current_function_calls_longjmp = 1;
- 
        /* If value type not void, return an rtx for the value.  */
  
-       /* If there are cleanups to be called, don't use a hard reg as target.
- 	 We need to double check this and see if it matters anymore.  */
-       if (any_pending_cleanups ())
- 	{
- 	  if (target && REG_P (target)
- 	      && REGNO (target) < FIRST_PSEUDO_REGISTER)
- 	    target = 0;
- 	  sibcall_failure = 1;
- 	}
- 
        if (TYPE_MODE (TREE_TYPE (exp)) == VOIDmode
  	  || ignore)
  	target = const0_rtx;
        else if (structure_value_addr)
  	{
! 	  if (target == 0 || GET_CODE (target) != MEM)
  	    {
  	      target
  		= gen_rtx_MEM (TYPE_MODE (TREE_TYPE (exp)),
--- 2811,2824 ----
  	    }
  	}
  
        /* If value type not void, return an rtx for the value.  */
  
        if (TYPE_MODE (TREE_TYPE (exp)) == VOIDmode
  	  || ignore)
  	target = const0_rtx;
        else if (structure_value_addr)
  	{
! 	  if (target == 0 || !MEM_P (target))
  	    {
  	      target
  		= gen_rtx_MEM (TYPE_MODE (TREE_TYPE (exp)),
*************** expand_call (tree exp, rtx target, int i
*** 3308,3318 ****
  	 The Irix 6 ABI has examples of this.  */
        else if (GET_CODE (valreg) == PARALLEL)
  	{
! 	  /* Second condition is added because "target" is freed at the
! 	     the end of "pass0" for -O2 when call is made to
! 	     expand_end_target_temps ().  Its "in_use" flag has been set
! 	     to false, so allocate a new temp.  */
! 	  if (target == 0 || (pass == 1 && target == temp_target))
  	    {
  	      /* This will only be assigned once, so it can be readonly.  */
  	      tree nt = build_qualified_type (TREE_TYPE (exp),
--- 2840,2846 ----
  	 The Irix 6 ABI has examples of this.  */
        else if (GET_CODE (valreg) == PARALLEL)
  	{
! 	  if (target == 0)
  	    {
  	      /* This will only be assigned once, so it can be readonly.  */
  	      tree nt = build_qualified_type (TREE_TYPE (exp),
*************** expand_call (tree exp, rtx target, int i
*** 3320,3327 ****
  					       | TYPE_QUAL_CONST));
  
  	      target = assign_temp (nt, 0, 1, 1);
- 	      temp_target = target;
- 	      preserve_temp_slots (target);
  	    }
  
  	  if (! rtx_equal_p (target, valreg))
--- 2848,2853 ----
*************** expand_call (tree exp, rtx target, int i
*** 3346,3352 ****
  	  /* If we are setting a MEM, this code must be executed.  Since it is
  	     emitted after the call insn, sibcall optimization cannot be
  	     performed in that case.  */
! 	  if (GET_CODE (target) == MEM)
  	    sibcall_failure = 1;
  	}
        else if (TYPE_MODE (TREE_TYPE (exp)) == BLKmode)
--- 2872,2878 ----
  	  /* If we are setting a MEM, this code must be executed.  Since it is
  	     emitted after the call insn, sibcall optimization cannot be
  	     performed in that case.  */
! 	  if (MEM_P (target))
  	    sibcall_failure = 1;
  	}
        else if (TYPE_MODE (TREE_TYPE (exp)) == BLKmode)
*************** expand_call (tree exp, rtx target, int i
*** 3357,3401 ****
  	  sibcall_failure = 1;
  	}
        else
! 	{
! 	  if (shift_returned_value (TREE_TYPE (exp), &valreg))
! 	    sibcall_failure = 1;
! 
! 	  target = copy_to_reg (valreg);
! 	}
  
        if (targetm.calls.promote_function_return(funtype))
  	{
!       /* If we promoted this return value, make the proper SUBREG.  TARGET
! 	 might be const0_rtx here, so be careful.  */
!       if (GET_CODE (target) == REG
! 	  && TYPE_MODE (TREE_TYPE (exp)) != BLKmode
! 	  && GET_MODE (target) != TYPE_MODE (TREE_TYPE (exp)))
! 	{
! 	  tree type = TREE_TYPE (exp);
! 	  int unsignedp = TREE_UNSIGNED (type);
! 	  int offset = 0;
! 
! 	  /* If we don't promote as expected, something is wrong.  */
! 	  if (GET_MODE (target)
! 	      != promote_mode (type, TYPE_MODE (type), &unsignedp, 1))
! 	    abort ();
! 
! 	if ((WORDS_BIG_ENDIAN || BYTES_BIG_ENDIAN)
! 	    && GET_MODE_SIZE (GET_MODE (target))
! 	       > GET_MODE_SIZE (TYPE_MODE (type)))
! 	  {
! 	    offset = GET_MODE_SIZE (GET_MODE (target))
! 		     - GET_MODE_SIZE (TYPE_MODE (type));
! 	    if (! BYTES_BIG_ENDIAN)
! 	      offset = (offset / UNITS_PER_WORD) * UNITS_PER_WORD;
! 	    else if (! WORDS_BIG_ENDIAN)
! 	      offset %= UNITS_PER_WORD;
! 	  }
! 	  target = gen_rtx_SUBREG (TYPE_MODE (type), target, offset);
! 	  SUBREG_PROMOTED_VAR_P (target) = 1;
! 	  SUBREG_PROMOTED_UNSIGNED_SET (target, unsignedp);
! 	}
  	}
  
        /* If size of args is variable or this was a constructor call for a stack
--- 2883,2922 ----
  	  sibcall_failure = 1;
  	}
        else
! 	target = copy_to_reg (valreg);
  
        if (targetm.calls.promote_function_return(funtype))
  	{
! 	  /* If we promoted this return value, make the proper SUBREG.
! 	     TARGET might be const0_rtx here, so be careful.  */
! 	  if (REG_P (target)
! 	      && TYPE_MODE (TREE_TYPE (exp)) != BLKmode
! 	      && GET_MODE (target) != TYPE_MODE (TREE_TYPE (exp)))
! 	    {
! 	      tree type = TREE_TYPE (exp);
! 	      int unsignedp = TYPE_UNSIGNED (type);
! 	      int offset = 0;
! 	      enum machine_mode pmode;
! 	      
! 	      pmode = promote_mode (type, TYPE_MODE (type), &unsignedp, 1);
! 	      /* If we don't promote as expected, something is wrong.  */
! 	      gcc_assert (GET_MODE (target) == pmode);
! 	      
! 	      if ((WORDS_BIG_ENDIAN || BYTES_BIG_ENDIAN)
! 		  && (GET_MODE_SIZE (GET_MODE (target))
! 		      > GET_MODE_SIZE (TYPE_MODE (type))))
! 		{
! 		  offset = GET_MODE_SIZE (GET_MODE (target))
! 		    - GET_MODE_SIZE (TYPE_MODE (type));
! 		  if (! BYTES_BIG_ENDIAN)
! 		    offset = (offset / UNITS_PER_WORD) * UNITS_PER_WORD;
! 		  else if (! WORDS_BIG_ENDIAN)
! 		    offset %= UNITS_PER_WORD;
! 		}
! 	      target = gen_rtx_SUBREG (TYPE_MODE (type), target, offset);
! 	      SUBREG_PROMOTED_VAR_P (target) = 1;
! 	      SUBREG_PROMOTED_UNSIGNED_SET (target, unsignedp);
! 	    }
  	}
  
        /* If size of args is variable or this was a constructor call for a stack
*************** expand_call (tree exp, rtx target, int i
*** 3406,3411 ****
--- 2927,2933 ----
  	  emit_stack_restore (SAVE_BLOCK, old_stack_level, NULL_RTX);
  	  stack_pointer_delta = old_stack_pointer_delta;
  	  pending_stack_adjust = old_pending_adj;
+ 	  old_stack_allocated = stack_pointer_delta - pending_stack_adjust;
  	  stack_arg_under_construction = old_stack_arg_under_construction;
  	  highest_outgoing_arg_in_use = initial_highest_arg_in_use;
  	  stack_usage_map = initial_stack_usage_map;
*************** expand_call (tree exp, rtx target, int i
*** 3445,3482 ****
  	 Check for the handler slots since we might not have a save area
  	 for non-local gotos.  */
  
!       if ((flags & ECF_MAY_BE_ALLOCA) && nonlocal_goto_handler_slots != 0)
! 	emit_stack_save (SAVE_NONLOCAL, &nonlocal_goto_stack_level, NULL_RTX);
  
        /* Free up storage we no longer need.  */
        for (i = 0; i < num_actuals; ++i)
  	if (args[i].aligned_regs)
  	  free (args[i].aligned_regs);
  
-       if (pass == 0)
- 	{
- 	  /* Undo the fake expand_start_target_temps we did earlier.  If
- 	     there had been any cleanups created, we've already set
- 	     sibcall_failure.  */
- 	  expand_end_target_temps ();
- 	}
- 
-       /* If this function is returning into a memory location marked as
- 	 readonly, it means it is initializing that location. We normally treat
- 	 functions as not clobbering such locations, so we need to specify that
- 	 this one does. We do this by adding the appropriate CLOBBER to the
- 	 CALL_INSN function usage list.  This cannot be done by emitting a
- 	 standalone CLOBBER after the call because the latter would be ignored
- 	 by at least the delay slot scheduling pass. We do this now instead of
- 	 adding to call_fusage before the call to emit_call_1 because TARGET
- 	 may be modified in the meantime.  */
-       if (structure_value_addr != 0 && target != 0
- 	  && GET_CODE (target) == MEM && RTX_UNCHANGING_P (target))
- 	add_function_usage_to
- 	  (last_call_insn (),
- 	   gen_rtx_EXPR_LIST (VOIDmode, gen_rtx_CLOBBER (VOIDmode, target),
- 			      NULL_RTX));
- 
        insns = get_insns ();
        end_sequence ();
  
--- 2967,2980 ----
  	 Check for the handler slots since we might not have a save area
  	 for non-local gotos.  */
  
!       if ((flags & ECF_MAY_BE_ALLOCA) && cfun->nonlocal_goto_save_area != 0)
! 	update_nonlocal_goto_save_area ();
  
        /* Free up storage we no longer need.  */
        for (i = 0; i < num_actuals; ++i)
  	if (args[i].aligned_regs)
  	  free (args[i].aligned_regs);
  
        insns = get_insns ();
        end_sequence ();
  
*************** expand_call (tree exp, rtx target, int i
*** 3505,3562 ****
  	  normal_call_insns = insns;
  
  	  /* Verify that we've deallocated all the stack we used.  */
! 	  if (! (flags & (ECF_NORETURN | ECF_LONGJMP))
! 	      && old_stack_allocated != stack_pointer_delta
! 					- pending_stack_adjust)
! 	    abort ();
  	}
  
        /* If something prevents making this a sibling call,
  	 zero out the sequence.  */
        if (sibcall_failure)
  	tail_call_insns = NULL_RTX;
      }
  
!   /* The function optimize_sibling_and_tail_recursive_calls doesn't
!      handle CALL_PLACEHOLDERs inside other CALL_PLACEHOLDERs.  This
!      can happen if the arguments to this function call an inline
!      function who's expansion contains another CALL_PLACEHOLDER.
! 
!      If there are any C_Ps in any of these sequences, replace them
!      with their normal call.  */
! 
!   for (insn = normal_call_insns; insn; insn = NEXT_INSN (insn))
!     if (GET_CODE (insn) == CALL_INSN
! 	&& GET_CODE (PATTERN (insn)) == CALL_PLACEHOLDER)
!       replace_call_placeholder (insn, sibcall_use_normal);
! 
!   for (insn = tail_call_insns; insn; insn = NEXT_INSN (insn))
!     if (GET_CODE (insn) == CALL_INSN
! 	&& GET_CODE (PATTERN (insn)) == CALL_PLACEHOLDER)
!       replace_call_placeholder (insn, sibcall_use_normal);
! 
!   for (insn = tail_recursion_insns; insn; insn = NEXT_INSN (insn))
!     if (GET_CODE (insn) == CALL_INSN
! 	&& GET_CODE (PATTERN (insn)) == CALL_PLACEHOLDER)
!       replace_call_placeholder (insn, sibcall_use_normal);
! 
!   /* If this was a potential tail recursion site, then emit a
!      CALL_PLACEHOLDER with the normal and the tail recursion streams.
!      One of them will be selected later.  */
!   if (tail_recursion_insns || tail_call_insns)
      {
!       /* The tail recursion label must be kept around.  We could expose
! 	 its use in the CALL_PLACEHOLDER, but that creates unwanted edges
! 	 and makes determining true tail recursion sites difficult.
! 
! 	 So we set LABEL_PRESERVE_P here, then clear it when we select
! 	 one of the call sequences after rtl generation is complete.  */
!       if (tail_recursion_insns)
! 	LABEL_PRESERVE_P (tail_recursion_label) = 1;
!       emit_call_insn (gen_rtx_CALL_PLACEHOLDER (VOIDmode, normal_call_insns,
! 						tail_call_insns,
! 						tail_recursion_insns,
! 						tail_recursion_label));
      }
    else
      emit_insn (normal_call_insns);
--- 3003,3027 ----
  	  normal_call_insns = insns;
  
  	  /* Verify that we've deallocated all the stack we used.  */
! 	  gcc_assert ((flags & ECF_NORETURN)
! 		      || (old_stack_allocated
! 			  == stack_pointer_delta - pending_stack_adjust));
  	}
  
        /* If something prevents making this a sibling call,
  	 zero out the sequence.  */
        if (sibcall_failure)
  	tail_call_insns = NULL_RTX;
+       else
+ 	break;
      }
  
!   /* If tail call production succeeded, we need to remove REG_EQUIV notes on
!      arguments too, as argument area is now clobbered by the call.  */
!   if (tail_call_insns)
      {
!       emit_insn (tail_call_insns);
!       cfun->tail_call_emit = true;
      }
    else
      emit_insn (normal_call_insns);
*************** expand_call (tree exp, rtx target, int i
*** 3569,3585 ****
    if (flags & ECF_SP_DEPRESSED)
      {
        clear_pending_stack_adjust ();
!       emit_insn (gen_rtx (CLOBBER, VOIDmode, stack_pointer_rtx));
        emit_move_insn (virtual_stack_dynamic_rtx, stack_pointer_rtx);
-       save_stack_pointer ();
      }
  
    return target;
  }
  
  /* Traverse an argument list in VALUES and expand all complex
     arguments into their components.  */
! tree
  split_complex_values (tree values)
  {
    tree p;
--- 3034,3065 ----
    if (flags & ECF_SP_DEPRESSED)
      {
        clear_pending_stack_adjust ();
!       emit_insn (gen_rtx_CLOBBER (VOIDmode, stack_pointer_rtx));
        emit_move_insn (virtual_stack_dynamic_rtx, stack_pointer_rtx);
      }
  
    return target;
  }
  
+ /* A sibling call sequence invalidates any REG_EQUIV notes made for
+    this function's incoming arguments.
+ 
+    At the start of RTL generation we know the only REG_EQUIV notes
+    in the rtl chain are those for incoming arguments, so we can safely
+    flush any REG_EQUIV note.
+ 
+    This is (slight) overkill.  We could keep track of the highest
+    argument we clobber and be more selective in removing notes, but it
+    does not seem to be worth the effort.  */
+ void
+ fixup_tail_calls (void)
+ {
+   purge_reg_equiv_notes ();
+ }
+ 
  /* Traverse an argument list in VALUES and expand all complex
     arguments into their components.  */
! static tree
  split_complex_values (tree values)
  {
    tree p;
*************** split_complex_values (tree values)
*** 3633,3639 ****
  
  /* Traverse a list of TYPES and expand all complex types into their
     components.  */
! tree
  split_complex_types (tree types)
  {
    tree p;
--- 3113,3119 ----
  
  /* Traverse a list of TYPES and expand all complex types into their
     components.  */
! static tree
  split_complex_types (tree types)
  {
    tree p;
*************** emit_library_call_value_1 (int retval, r
*** 3732,3743 ****
    rtx struct_value = targetm.calls.struct_value_rtx (0, 0);
  
  #ifdef REG_PARM_STACK_SPACE
- #ifdef MAYBE_REG_PARM_STACK_SPACE
-   reg_parm_stack_space = MAYBE_REG_PARM_STACK_SPACE;
- #else
    reg_parm_stack_space = REG_PARM_STACK_SPACE ((tree) 0);
  #endif
- #endif
  
    /* By default, library functions can not throw.  */
    flags = ECF_NOTHROW;
--- 3212,3219 ----
*************** emit_library_call_value_1 (int retval, r
*** 3782,3788 ****
       decide where in memory it should come back.  */
    if (outmode != VOIDmode)
      {
!       tfom = (*lang_hooks.types.type_for_mode) (outmode, 0);
        if (aggregate_value_p (tfom, 0))
  	{
  #ifdef PCC_STATIC_STRUCT_RETURN
--- 3258,3264 ----
       decide where in memory it should come back.  */
    if (outmode != VOIDmode)
      {
!       tfom = lang_hooks.types.type_for_mode (outmode, 0);
        if (aggregate_value_p (tfom, 0))
  	{
  #ifdef PCC_STATIC_STRUCT_RETURN
*************** emit_library_call_value_1 (int retval, r
*** 3794,3800 ****
  	    value = gen_reg_rtx (outmode);
  #else /* not PCC_STATIC_STRUCT_RETURN */
  	  struct_value_size = GET_MODE_SIZE (outmode);
! 	  if (value != 0 && GET_CODE (value) == MEM)
  	    mem_value = value;
  	  else
  	    mem_value = assign_temp (tfom, 0, 1, 1);
--- 3270,3276 ----
  	    value = gen_reg_rtx (outmode);
  #else /* not PCC_STATIC_STRUCT_RETURN */
  	  struct_value_size = GET_MODE_SIZE (outmode);
! 	  if (value != 0 && MEM_P (value))
  	    mem_value = value;
  	  else
  	    mem_value = assign_temp (tfom, 0, 1, 1);
*************** emit_library_call_value_1 (int retval, r
*** 3841,3850 ****
    if (mem_value && struct_value == 0 && ! pcc_struct_value)
      {
        rtx addr = XEXP (mem_value, 0);
        nargs++;
  
        /* Make sure it is a reasonable operand for a move or push insn.  */
!       if (GET_CODE (addr) != REG && GET_CODE (addr) != MEM
  	  && ! (CONSTANT_P (addr) && LEGITIMATE_CONSTANT_P (addr)))
  	addr = force_operand (addr, NULL_RTX);
  
--- 3317,3327 ----
    if (mem_value && struct_value == 0 && ! pcc_struct_value)
      {
        rtx addr = XEXP (mem_value, 0);
+       
        nargs++;
  
        /* Make sure it is a reasonable operand for a move or push insn.  */
!       if (!REG_P (addr) && !MEM_P (addr)
  	  && ! (CONSTANT_P (addr) && LEGITIMATE_CONSTANT_P (addr)))
  	addr = force_operand (addr, NULL_RTX);
  
*************** emit_library_call_value_1 (int retval, r
*** 3853,3862 ****
        argvec[count].partial = 0;
  
        argvec[count].reg = FUNCTION_ARG (args_so_far, Pmode, NULL_TREE, 1);
! #ifdef FUNCTION_ARG_PARTIAL_NREGS
!       if (FUNCTION_ARG_PARTIAL_NREGS (args_so_far, Pmode, NULL_TREE, 1))
! 	abort ();
! #endif
  
        locate_and_pad_parm (Pmode, NULL_TREE,
  #ifdef STACK_PARMS_IN_REG_PARM_AREA
--- 3330,3337 ----
        argvec[count].partial = 0;
  
        argvec[count].reg = FUNCTION_ARG (args_so_far, Pmode, NULL_TREE, 1);
!       gcc_assert (targetm.calls.arg_partial_bytes (&args_so_far, Pmode,
! 						   NULL_TREE, 1) == 0);
  
        locate_and_pad_parm (Pmode, NULL_TREE,
  #ifdef STACK_PARMS_IN_REG_PARM_AREA
*************** emit_library_call_value_1 (int retval, r
*** 3882,3909 ****
  
        /* We cannot convert the arg value to the mode the library wants here;
  	 must do it earlier where we know the signedness of the arg.  */
!       if (mode == BLKmode
! 	  || (GET_MODE (val) != mode && GET_MODE (val) != VOIDmode))
! 	abort ();
! 
!       /* There's no need to call protect_from_queue, because
! 	 either emit_move_insn or emit_push_insn will do that.  */
  
        /* Make sure it is a reasonable operand for a move or push insn.  */
!       if (GET_CODE (val) != REG && GET_CODE (val) != MEM
  	  && ! (CONSTANT_P (val) && LEGITIMATE_CONSTANT_P (val)))
  	val = force_operand (val, NULL_RTX);
  
! #ifdef FUNCTION_ARG_PASS_BY_REFERENCE
!       if (FUNCTION_ARG_PASS_BY_REFERENCE (args_so_far, mode, NULL_TREE, 1))
  	{
  	  rtx slot;
! 	  int must_copy = 1
! #ifdef FUNCTION_ARG_CALLEE_COPIES
! 	    && ! FUNCTION_ARG_CALLEE_COPIES (args_so_far, mode,
! 					     NULL_TREE, 1)
! #endif
! 	    ;
  
  	  /* loop.c won't look at CALL_INSN_FUNCTION_USAGE of const/pure
  	     functions, so we have to pretend this isn't such a function.  */
--- 3357,3375 ----
  
        /* We cannot convert the arg value to the mode the library wants here;
  	 must do it earlier where we know the signedness of the arg.  */
!       gcc_assert (mode != BLKmode
! 		  && (GET_MODE (val) == mode || GET_MODE (val) == VOIDmode));
  
        /* Make sure it is a reasonable operand for a move or push insn.  */
!       if (!REG_P (val) && !MEM_P (val)
  	  && ! (CONSTANT_P (val) && LEGITIMATE_CONSTANT_P (val)))
  	val = force_operand (val, NULL_RTX);
  
!       if (pass_by_reference (&args_so_far, mode, NULL_TREE, 1))
  	{
  	  rtx slot;
! 	  int must_copy
! 	    = !reference_callee_copied (&args_so_far, mode, NULL_TREE, 1);
  
  	  /* loop.c won't look at CALL_INSN_FUNCTION_USAGE of const/pure
  	     functions, so we have to pretend this isn't such a function.  */
*************** emit_library_call_value_1 (int retval, r
*** 3923,3947 ****
  	      flags |= ECF_PURE;
  	    }
  
! 	  if (GET_MODE (val) == MEM && ! must_copy)
  	    slot = val;
! 	  else if (must_copy)
  	    {
! 	      slot = assign_temp ((*lang_hooks.types.type_for_mode) (mode, 0),
  				  0, 1, 1);
  	      emit_move_insn (slot, val);
  	    }
- 	  else
- 	    {
- 	      tree type = (*lang_hooks.types.type_for_mode) (mode, 0);
- 
- 	      slot
- 		= gen_rtx_MEM (mode,
- 			       expand_expr (build1 (ADDR_EXPR,
- 						    build_pointer_type (type),
- 						    make_tree (type, val)),
- 					    NULL_RTX, VOIDmode, 0));
- 	    }
  
  	  call_fusage = gen_rtx_EXPR_LIST (VOIDmode,
  					   gen_rtx_USE (VOIDmode, slot),
--- 3389,3402 ----
  	      flags |= ECF_PURE;
  	    }
  
! 	  if (GET_MODE (val) == MEM && !must_copy)
  	    slot = val;
! 	  else
  	    {
! 	      slot = assign_temp (lang_hooks.types.type_for_mode (mode, 0),
  				  0, 1, 1);
  	      emit_move_insn (slot, val);
  	    }
  
  	  call_fusage = gen_rtx_EXPR_LIST (VOIDmode,
  					   gen_rtx_USE (VOIDmode, slot),
*************** emit_library_call_value_1 (int retval, r
*** 3955,3973 ****
  	  mode = Pmode;
  	  val = force_operand (XEXP (slot, 0), NULL_RTX);
  	}
- #endif
  
        argvec[count].value = val;
        argvec[count].mode = mode;
  
        argvec[count].reg = FUNCTION_ARG (args_so_far, mode, NULL_TREE, 1);
  
- #ifdef FUNCTION_ARG_PARTIAL_NREGS
        argvec[count].partial
! 	= FUNCTION_ARG_PARTIAL_NREGS (args_so_far, mode, NULL_TREE, 1);
! #else
!       argvec[count].partial = 0;
! #endif
  
        locate_and_pad_parm (mode, NULL_TREE,
  #ifdef STACK_PARMS_IN_REG_PARM_AREA
--- 3410,3423 ----
  	  mode = Pmode;
  	  val = force_operand (XEXP (slot, 0), NULL_RTX);
  	}
  
        argvec[count].value = val;
        argvec[count].mode = mode;
  
        argvec[count].reg = FUNCTION_ARG (args_so_far, mode, NULL_TREE, 1);
  
        argvec[count].partial
! 	= targetm.calls.arg_partial_bytes (&args_so_far, mode, NULL_TREE, 1);
  
        locate_and_pad_parm (mode, NULL_TREE,
  #ifdef STACK_PARMS_IN_REG_PARM_AREA
*************** emit_library_call_value_1 (int retval, r
*** 3978,3985 ****
  			   argvec[count].partial,
  			   NULL_TREE, &args_size, &argvec[count].locate);
  
!       if (argvec[count].locate.size.var)
! 	abort ();
  
        if (argvec[count].reg == 0 || argvec[count].partial != 0
  	  || reg_parm_stack_space > 0)
--- 3428,3434 ----
  			   argvec[count].partial,
  			   NULL_TREE, &args_size, &argvec[count].locate);
  
!       gcc_assert (!argvec[count].locate.size.var);
  
        if (argvec[count].reg == 0 || argvec[count].partial != 0
  	  || reg_parm_stack_space > 0)
*************** emit_library_call_value_1 (int retval, r
*** 3988,3997 ****
        FUNCTION_ARG_ADVANCE (args_so_far, mode, (tree) 0, 1);
      }
  
- #ifdef FINAL_REG_PARM_STACK_SPACE
-   reg_parm_stack_space = FINAL_REG_PARM_STACK_SPACE (args_size.constant,
- 						     args_size.var);
- #endif
    /* If this machine requires an external definition for library
       functions, write one out.  */
    assemble_external_libcall (fun);
--- 3437,3442 ----
*************** emit_library_call_value_1 (int retval, r
*** 4196,4202 ****
    else
      argnum = 0;
  
!   fun = prepare_call_address (fun, NULL_TREE, &call_fusage, 0, 0);
  
    /* Now load any reg parms into their regs.  */
  
--- 3641,3647 ----
    else
      argnum = 0;
  
!   fun = prepare_call_address (fun, NULL, &call_fusage, 0, 0);
  
    /* Now load any reg parms into their regs.  */
  
*************** emit_library_call_value_1 (int retval, r
*** 4204,4209 ****
--- 3649,3655 ----
       are to be pushed.  */
    for (count = 0; count < nargs; count++, argnum += inc)
      {
+       enum machine_mode mode = argvec[argnum].mode;
        rtx val = argvec[argnum].value;
        rtx reg = argvec[argnum].reg;
        int partial = argvec[argnum].partial;
*************** emit_library_call_value_1 (int retval, r
*** 4211,4217 ****
        /* Handle calls that pass values in multiple non-contiguous
  	 locations.  The PA64 has examples of this for library calls.  */
        if (reg != 0 && GET_CODE (reg) == PARALLEL)
! 	emit_group_load (reg, val, NULL_TREE, GET_MODE_SIZE (GET_MODE (val)));
        else if (reg != 0 && partial == 0)
  	emit_move_insn (reg, val);
  
--- 3657,3663 ----
        /* Handle calls that pass values in multiple non-contiguous
  	 locations.  The PA64 has examples of this for library calls.  */
        if (reg != 0 && GET_CODE (reg) == PARALLEL)
! 	emit_group_load (reg, val, NULL_TREE, GET_MODE_SIZE (mode));
        else if (reg != 0 && partial == 0)
  	emit_move_insn (reg, val);
  
*************** emit_library_call_value_1 (int retval, r
*** 4235,4241 ****
  		      force_reg (Pmode,
  				 force_operand (XEXP (mem_value, 0),
  						NULL_RTX)));
!       if (GET_CODE (struct_value) == REG)
  	use_reg (&call_fusage, struct_value);
      }
  
--- 3681,3687 ----
  		      force_reg (Pmode,
  				 force_operand (XEXP (mem_value, 0),
  						NULL_RTX)));
!       if (REG_P (struct_value))
  	use_reg (&call_fusage, struct_value);
      }
  
*************** emit_library_call_value_1 (int retval, r
*** 4246,4253 ****
  	    ? hard_libcall_value (outmode) : NULL_RTX);
  
    /* Stack must be properly aligned now.  */
!   if (stack_pointer_delta & (PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT - 1))
!     abort ();
  
    before_call = get_last_insn ();
  
--- 3692,3699 ----
  	    ? hard_libcall_value (outmode) : NULL_RTX);
  
    /* Stack must be properly aligned now.  */
!   gcc_assert (!(stack_pointer_delta
! 		& (PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT - 1)));
  
    before_call = get_last_insn ();
  
*************** emit_library_call_value_1 (int retval, r
*** 4258,4264 ****
       always signed.  We also assume that the list of arguments passed has
       no impact, so we pretend it is unknown.  */
  
!   emit_call_1 (fun,
  	       get_identifier (XSTR (orgfun, 0)),
  	       build_function_type (tfom, NULL_TREE),
  	       original_args_size.constant, args_size.constant,
--- 3704,3710 ----
       always signed.  We also assume that the list of arguments passed has
       no impact, so we pretend it is unknown.  */
  
!   emit_call_1 (fun, NULL,
  	       get_identifier (XSTR (orgfun, 0)),
  	       build_function_type (tfom, NULL_TREE),
  	       original_args_size.constant, args_size.constant,
*************** emit_library_call_value_1 (int retval, r
*** 4271,4289 ****
       if nonvolatile values are live.  For functions that cannot return,
       inform flow that control does not fall through.  */
  
!   if (flags & (ECF_NORETURN | ECF_LONGJMP))
      {
        /* The barrier note must be emitted
  	 immediately after the CALL_INSN.  Some ports emit more than
  	 just a CALL_INSN above, so we must search for it here.  */
  
        rtx last = get_last_insn ();
!       while (GET_CODE (last) != CALL_INSN)
  	{
  	  last = PREV_INSN (last);
  	  /* There was no CALL_INSN?  */
! 	  if (last == before_call)
! 	    abort ();
  	}
  
        emit_barrier_after (last);
--- 3717,3734 ----
       if nonvolatile values are live.  For functions that cannot return,
       inform flow that control does not fall through.  */
  
!   if (flags & ECF_NORETURN)
      {
        /* The barrier note must be emitted
  	 immediately after the CALL_INSN.  Some ports emit more than
  	 just a CALL_INSN above, so we must search for it here.  */
  
        rtx last = get_last_insn ();
!       while (!CALL_P (last))
  	{
  	  last = PREV_INSN (last);
  	  /* There was no CALL_INSN?  */
! 	  gcc_assert (last != before_call);
  	}
  
        emit_barrier_after (last);
*************** emit_library_call_value_1 (int retval, r
*** 4315,4321 ****
  	  if (GET_CODE (valreg) == PARALLEL)
  	    {
  	      temp = gen_reg_rtx (outmode);
! 	      emit_group_store (temp, valreg, NULL_TREE, 
  				GET_MODE_SIZE (outmode));
  	      valreg = temp;
  	    }
--- 3760,3766 ----
  	  if (GET_CODE (valreg) == PARALLEL)
  	    {
  	      temp = gen_reg_rtx (outmode);
! 	      emit_group_store (temp, valreg, NULL_TREE,
  				GET_MODE_SIZE (outmode));
  	      valreg = temp;
  	    }
*************** emit_library_call_value_1 (int retval, r
*** 4407,4413 ****
     for a value of mode OUTMODE,
     with NARGS different arguments, passed as alternating rtx values
     and machine_modes to convert them to.
-    The rtx values should have been passed through protect_from_queue already.
  
     FN_TYPE should be LCT_NORMAL for `normal' calls, LCT_CONST for `const'
     calls, LCT_PURE for `pure' calls, LCT_CONST_MAKE_BLOCK for `const' calls
--- 3852,3857 ----
*************** store_one_arg (struct arg_data *arg, rtx
*** 4560,4570 ****
        partial = arg->partial;
      }
  
!   if (reg != 0 && partial == 0)
!     /* Being passed entirely in a register.  We shouldn't be called in
!        this case.  */
!     abort ();
! 
    /* If this arg needs special alignment, don't load the registers
       here.  */
    if (arg->n_aligned_regs != 0)
--- 4004,4013 ----
        partial = arg->partial;
      }
  
!   /* Being passed entirely in a register.  We shouldn't be called in
!      this case.  */
!   gcc_assert (reg == 0 || partial != 0);
!   
    /* If this arg needs special alignment, don't load the registers
       here.  */
    if (arg->n_aligned_regs != 0)
*************** store_one_arg (struct arg_data *arg, rtx
*** 4684,4710 ****
  	}
        else
  	{
! 	  /* PUSH_ROUNDING has no effect on us, because
! 	     emit_push_insn for BLKmode is careful to avoid it.  */
! 	  if (reg && GET_CODE (reg) == PARALLEL)
! 	  {
! 	    /* Use the size of the elt to compute excess.  */
! 	    rtx elt = XEXP (XVECEXP (reg, 0, 0), 0);
! 	    excess = (arg->locate.size.constant
! 		      - int_size_in_bytes (TREE_TYPE (pval))
! 		      + partial * GET_MODE_SIZE (GET_MODE (elt)));
! 	  } 
! 	  else
! 	    excess = (arg->locate.size.constant
! 		      - int_size_in_bytes (TREE_TYPE (pval))
! 		      + partial * UNITS_PER_WORD);
  	  size_rtx = expand_expr (size_in_bytes (TREE_TYPE (pval)),
  				  NULL_RTX, TYPE_MODE (sizetype), 0);
  	}
  
!       /* Some types will require stricter alignment, which will be
! 	 provided for elsewhere in argument layout.  */
!       parm_align = MAX (PARM_BOUNDARY, TYPE_ALIGN (TREE_TYPE (pval)));
  
        /* When an argument is padded down, the block is aligned to
  	 PARM_BOUNDARY, but the actual argument isn't.  */
--- 4127,4142 ----
  	}
        else
  	{
! 	  /* PUSH_ROUNDING has no effect on us, because emit_push_insn
! 	     for BLKmode is careful to avoid it.  */
! 	  excess = (arg->locate.size.constant
! 		    - int_size_in_bytes (TREE_TYPE (pval))
! 		    + partial);
  	  size_rtx = expand_expr (size_in_bytes (TREE_TYPE (pval)),
  				  NULL_RTX, TYPE_MODE (sizetype), 0);
  	}
  
!       parm_align = arg->locate.boundary;
  
        /* When an argument is padded down, the block is aligned to
  	 PARM_BOUNDARY, but the actual argument isn't.  */
*************** store_one_arg (struct arg_data *arg, rtx
*** 4719,4725 ****
  	    }
  	}
  
!       if ((flags & ECF_SIBCALL) && GET_CODE (arg->value) == MEM)
  	{
  	  /* emit_push_insn might not work properly if arg->value and
  	     argblock + arg->locate.offset areas overlap.  */
--- 4151,4157 ----
  	    }
  	}
  
!       if ((flags & ECF_SIBCALL) && MEM_P (arg->value))
  	{
  	  /* emit_push_insn might not work properly if arg->value and
  	     argblock + arg->locate.offset areas overlap.  */
*************** store_one_arg (struct arg_data *arg, rtx
*** 4736,4743 ****
  		i = INTVAL (XEXP (XEXP (x, 0), 1));
  
  	      /* expand_call should ensure this.  */
! 	      if (arg->locate.offset.var || GET_CODE (size_rtx) != CONST_INT)
! 		abort ();
  
  	      if (arg->locate.offset.constant > i)
  		{
--- 4168,4175 ----
  		i = INTVAL (XEXP (XEXP (x, 0), 1));
  
  	      /* expand_call should ensure this.  */
! 	      gcc_assert (!arg->locate.offset.var
! 			  && GET_CODE (size_rtx) == CONST_INT);
  
  	      if (arg->locate.offset.constant > i)
  		{
*************** store_one_arg (struct arg_data *arg, rtx
*** 4769,4774 ****
--- 4201,4214 ----
  	arg->value = arg->stack_slot;
      }
  
+   if (arg->reg && GET_CODE (arg->reg) == PARALLEL)
+     {
+       tree type = TREE_TYPE (arg->tree_value);
+       arg->parallel_value
+ 	= emit_group_load_into_temps (arg->reg, arg->value, type,
+ 				      int_size_in_bytes (type));
+     }
+ 
    /* Mark all slots this store used.  */
    if (ACCUMULATE_OUTGOING_ARGS && !(flags & ECF_SIBCALL)
        && argblock && ! variable_size && arg->stack)
*************** store_one_arg (struct arg_data *arg, rtx
*** 4779,4788 ****
       be deferred during the rest of the arguments.  */
    NO_DEFER_POP;
  
-   /* ANSI doesn't require a sequence point here,
-      but PCC has one, so this will avoid some problems.  */
-   emit_queue ();
- 
    /* Free any temporary slots made in processing this argument.  Show
       that we might have taken the address of something and pushed that
       as an operand.  */
--- 4219,4224 ----
*************** store_one_arg (struct arg_data *arg, rtx
*** 4793,4816 ****
    return sibcall_failure;
  }
  
! /* Nonzero if we do not know how to pass TYPE solely in registers.
!    We cannot do so in the following cases:
  
!    - if the type has variable size
!    - if the type is marked as addressable (it is required to be constructed
!      into the stack)
!    - if the padding and mode of the type is such that a copy into a register
!      would put it into the wrong part of the register.
  
!    Which padding can't be supported depends on the byte endianness.
  
!    A value in a register is implicitly padded at the most significant end.
!    On a big-endian machine, that is the lower end in memory.
!    So a value padded in memory at the upper end can't go in a register.
!    For a little-endian machine, the reverse is true.  */
  
  bool
! default_must_pass_in_stack (enum machine_mode mode, tree type)
  {
    if (!type)
      return false;
--- 4229,4261 ----
    return sibcall_failure;
  }
  
! /* Nonzero if we do not know how to pass TYPE solely in registers.  */
  
! bool
! must_pass_in_stack_var_size (enum machine_mode mode ATTRIBUTE_UNUSED,
! 			     tree type)
! {
!   if (!type)
!     return false;
  
!   /* If the type has variable size...  */
!   if (TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
!     return true;
  
!   /* If the type is marked as addressable (it is required
!      to be constructed into the stack)...  */
!   if (TREE_ADDRESSABLE (type))
!     return true;
! 
!   return false;
! }
! 
! /* Another version of the TARGET_MUST_PASS_IN_STACK hook.  This one
!    takes trailing padding of a structure into account.  */
! /* ??? Should be able to merge these two by examining BLOCK_REG_PADDING.  */
  
  bool
! must_pass_in_stack_var_size_or_pad (enum machine_mode mode, tree type)
  {
    if (!type)
      return false;
diff -Nrcpad gcc-3.4.3/gcc/cfg.c gcc-4.0.0/gcc/cfg.c
*** gcc-3.4.3/gcc/cfg.c	Fri Jan 23 23:35:54 2004
--- gcc-4.0.0/gcc/cfg.c	Tue Feb 22 15:42:25 2005
***************
*** 1,6 ****
  /* Control flow graph manipulation code for GNU compiler.
     Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
!    1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
--- 1,7 ----
  /* Control flow graph manipulation code for GNU compiler.
     Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
!    1999, 2000, 2001, 2002, 2003, 2004, 2005
!    Free Software Foundation, Inc.
  
  This file is part of GCC.
  
*************** Software Foundation, 59 Temple Place - S
*** 52,58 ****
  #include "tree.h"
  #include "rtl.h"
  #include "hard-reg-set.h"
- #include "basic-block.h"
  #include "regs.h"
  #include "flags.h"
  #include "output.h"
--- 53,58 ----
*************** Software Foundation, 59 Temple Place - S
*** 60,80 ****
  #include "except.h"
  #include "toplev.h"
  #include "tm_p.h"
- #include "obstack.h"
  #include "alloc-pool.h"
  
  /* The obstack on which the flow graph components are allocated.  */
  
! struct obstack flow_obstack;
! static char *flow_firstobj;
! 
! /* Basic block object pool.  */
! 
! static alloc_pool bb_pool;
! 
! /* Edge object pool.  */
! 
! static alloc_pool edge_pool;
  
  /* Number of basic blocks in the current function.  */
  
--- 60,72 ----
  #include "except.h"
  #include "toplev.h"
  #include "tm_p.h"
  #include "alloc-pool.h"
+ #include "timevar.h"
+ #include "ggc.h"
  
  /* The obstack on which the flow graph components are allocated.  */
  
! struct bitmap_obstack reg_obstack;
  
  /* Number of basic blocks in the current function.  */
  
*************** int n_edges;
*** 93,186 ****
  varray_type basic_block_info;
  
  /* The special entry and exit blocks.  */
  
! struct basic_block_def entry_exit_blocks[2]
! = {{NULL,			/* head */
!     NULL,			/* end */
!     NULL,			/* head_tree */
!     NULL,			/* end_tree */
!     NULL,			/* pred */
!     NULL,			/* succ */
!     NULL,			/* local_set */
!     NULL,			/* cond_local_set */
!     NULL,			/* global_live_at_start */
!     NULL,			/* global_live_at_end */
!     NULL,			/* aux */
!     ENTRY_BLOCK,		/* index */
!     NULL,			/* prev_bb */
!     EXIT_BLOCK_PTR,		/* next_bb */
!     0,				/* loop_depth */
!     NULL,                       /* loop_father */
!     { NULL, NULL },		/* dom */
!     0,				/* count */
!     0,				/* frequency */
!     0,				/* flags */
!     NULL			/* rbi */
!   },
!   {
!     NULL,			/* head */
!     NULL,			/* end */
!     NULL,			/* head_tree */
!     NULL,			/* end_tree */
!     NULL,			/* pred */
!     NULL,			/* succ */
!     NULL,			/* local_set */
!     NULL,			/* cond_local_set */
!     NULL,			/* global_live_at_start */
!     NULL,			/* global_live_at_end */
!     NULL,			/* aux */
!     EXIT_BLOCK,			/* index */
!     ENTRY_BLOCK_PTR,		/* prev_bb */
!     NULL,			/* next_bb */
!     0,				/* loop_depth */
!     NULL,                       /* loop_father */
!     { NULL, NULL },		/* dom */
!     0,				/* count */
!     0,				/* frequency */
!     0,				/* flags */
!     NULL			/* rbi */
!   }
! };
  
  void debug_flow_info (void);
  static void free_edge (edge);
  
  /* Called once at initialization time.  */
  
  void
  init_flow (void)
  {
-   static int initialized;
- 
    n_edges = 0;
  
!   if (!initialized)
!     {
!       gcc_obstack_init (&flow_obstack);
!       flow_firstobj = obstack_alloc (&flow_obstack, 0);
!       initialized = 1;
!     }
!   else
!     {
!       free_alloc_pool (bb_pool);
!       free_alloc_pool (edge_pool);
!       obstack_free (&flow_obstack, flow_firstobj);
!       flow_firstobj = obstack_alloc (&flow_obstack, 0);
!     }
!   bb_pool = create_alloc_pool ("Basic block pool",
! 			       sizeof (struct basic_block_def), 100);
!   edge_pool = create_alloc_pool ("Edge pool",
! 			       sizeof (struct edge_def), 100);
  }
  
  /* Helper function for remove_edge and clear_edges.  Frees edge structure
     without actually unlinking it from the pred/succ lists.  */
  
  static void
! free_edge (edge e)
  {
    n_edges--;
!   pool_free (edge_pool, e);
  }
  
  /* Free the memory associated with the edge structures.  */
--- 85,124 ----
  varray_type basic_block_info;
  
  /* The special entry and exit blocks.  */
+ basic_block ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR;
  
! /* Memory alloc pool for bb member rbi.  */
! alloc_pool rbi_pool;
  
  void debug_flow_info (void);
  static void free_edge (edge);
+ 
+ /* Indicate the presence of the profile.  */
+ enum profile_status profile_status;
  
  /* Called once at initialization time.  */
  
  void
  init_flow (void)
  {
    n_edges = 0;
  
!   ENTRY_BLOCK_PTR = ggc_alloc_cleared (sizeof (*ENTRY_BLOCK_PTR));
!   ENTRY_BLOCK_PTR->index = ENTRY_BLOCK;
!   EXIT_BLOCK_PTR = ggc_alloc_cleared (sizeof (*EXIT_BLOCK_PTR));
!   EXIT_BLOCK_PTR->index = EXIT_BLOCK;
!   ENTRY_BLOCK_PTR->next_bb = EXIT_BLOCK_PTR;
!   EXIT_BLOCK_PTR->prev_bb = ENTRY_BLOCK_PTR;
  }
  
  /* Helper function for remove_edge and clear_edges.  Frees edge structure
     without actually unlinking it from the pred/succ lists.  */
  
  static void
! free_edge (edge e ATTRIBUTE_UNUSED)
  {
    n_edges--;
!   ggc_free (e);
  }
  
  /* Free the memory associated with the edge structures.  */
*************** clear_edges (void)
*** 190,226 ****
  {
    basic_block bb;
    edge e;
  
    FOR_EACH_BB (bb)
      {
!       edge e = bb->succ;
! 
!       while (e)
! 	{
! 	  edge next = e->succ_next;
! 
! 	  free_edge (e);
! 	  e = next;
! 	}
! 
!       bb->succ = NULL;
!       bb->pred = NULL;
!     }
! 
!   e = ENTRY_BLOCK_PTR->succ;
!   while (e)
!     {
!       edge next = e->succ_next;
! 
!       free_edge (e);
!       e = next;
      }
  
!   EXIT_BLOCK_PTR->pred = NULL;
!   ENTRY_BLOCK_PTR->succ = NULL;
  
!   if (n_edges)
!     abort ();
  }
  
  /* Allocate memory for basic_block.  */
--- 128,149 ----
  {
    basic_block bb;
    edge e;
+   edge_iterator ei;
  
    FOR_EACH_BB (bb)
      {
!       FOR_EACH_EDGE (e, ei, bb->succs)
! 	free_edge (e);
!       VEC_truncate (edge, bb->succs, 0);
!       VEC_truncate (edge, bb->preds, 0);
      }
  
!   FOR_EACH_EDGE (e, ei, ENTRY_BLOCK_PTR->succs)
!     free_edge (e);
!   VEC_truncate (edge, EXIT_BLOCK_PTR->preds, 0);
!   VEC_truncate (edge, ENTRY_BLOCK_PTR->succs, 0);
  
!   gcc_assert (!n_edges);
  }
  
  /* Allocate memory for basic_block.  */
*************** basic_block
*** 229,239 ****
  alloc_block (void)
  {
    basic_block bb;
!   bb = pool_alloc (bb_pool);
!   memset (bb, 0, sizeof (*bb));
    return bb;
  }
  
  /* Link block B to chain after AFTER.  */
  void
  link_block (basic_block b, basic_block after)
--- 152,190 ----
  alloc_block (void)
  {
    basic_block bb;
!   bb = ggc_alloc_cleared (sizeof (*bb));
    return bb;
  }
  
+ /* Create memory pool for rbi_pool.  */
+ 
+ void
+ alloc_rbi_pool (void)
+ {
+   rbi_pool = create_alloc_pool ("rbi pool", 
+ 				sizeof (struct reorder_block_def),
+ 				n_basic_blocks + 2);
+ }
+ 
+ /* Free rbi_pool.  */
+ 
+ void
+ free_rbi_pool (void)
+ {
+   free_alloc_pool (rbi_pool);
+ }
+ 
+ /* Initialize rbi (the structure containing data used by basic block
+    duplication and reordering) for the given basic block.  */
+ 
+ void
+ initialize_bb_rbi (basic_block bb)
+ {
+   gcc_assert (!bb->rbi);
+   bb->rbi = pool_alloc (rbi_pool);
+   memset (bb->rbi, 0, sizeof (struct reorder_block_def));
+ }
+ 
  /* Link block B to chain after AFTER.  */
  void
  link_block (basic_block b, basic_block after)
*************** unlink_block (basic_block b)
*** 250,255 ****
--- 201,208 ----
  {
    b->next_bb->prev_bb = b->prev_bb;
    b->prev_bb->next_bb = b->next_bb;
+   b->prev_bb = NULL;
+   b->next_bb = NULL;
  }
  
  /* Sequentially order blocks and compact the arrays.  */
*************** compact_blocks (void)
*** 267,274 ****
        i++;
      }
  
!   if (i != n_basic_blocks)
!     abort ();
  
    last_basic_block = n_basic_blocks;
  }
--- 220,229 ----
        i++;
      }
  
!   gcc_assert (i == n_basic_blocks);
! 
!   for (; i < last_basic_block; i++)
!     BASIC_BLOCK (i) = NULL;
  
    last_basic_block = n_basic_blocks;
  }
*************** expunge_block (basic_block b)
*** 281,287 ****
    unlink_block (b);
    BASIC_BLOCK (b->index) = NULL;
    n_basic_blocks--;
!   pool_free (bb_pool, b);
  }
  
  /* Create an edge connecting SRC and DEST with flags FLAGS.  Return newly
--- 236,246 ----
    unlink_block (b);
    BASIC_BLOCK (b->index) = NULL;
    n_basic_blocks--;
!   /* We should be able to ggc_free here, but we are not.
!      The dead SSA_NAMES are left pointing to dead statements that are pointing
!      to dead basic blocks making garbage collector to die.
!      We should be able to release all dead SSA_NAMES and at the same time we should
!      clear out BB pointer of dead statements consistently.  */
  }
  
  /* Create an edge connecting SRC and DEST with flags FLAGS.  Return newly
*************** edge
*** 292,309 ****
  unchecked_make_edge (basic_block src, basic_block dst, int flags)
  {
    edge e;
!   e = pool_alloc (edge_pool);
!   memset (e, 0, sizeof (*e));
    n_edges++;
  
!   e->succ_next = src->succ;
!   e->pred_next = dst->pred;
    e->src = src;
    e->dest = dst;
    e->flags = flags;
  
!   src->succ = e;
!   dst->pred = e;
  
    return e;
  }
--- 251,268 ----
  unchecked_make_edge (basic_block src, basic_block dst, int flags)
  {
    edge e;
!   e = ggc_alloc_cleared (sizeof (*e));
    n_edges++;
  
!   VEC_safe_push (edge, src->succs, e);
!   VEC_safe_push (edge, dst->preds, e);
! 
    e->src = src;
    e->dest = dst;
    e->flags = flags;
+   e->dest_idx = EDGE_COUNT (dst->preds) - 1;
  
!   execute_on_growing_pred (e);
  
    return e;
  }
*************** unchecked_make_edge (basic_block src, ba
*** 314,356 ****
  edge
  cached_make_edge (sbitmap *edge_cache, basic_block src, basic_block dst, int flags)
  {
!   int use_edge_cache;
!   edge e;
! 
!   /* Don't bother with edge cache for ENTRY or EXIT, if there aren't that
!      many edges to them, or we didn't allocate memory for it.  */
!   use_edge_cache = (edge_cache
! 		    && src != ENTRY_BLOCK_PTR && dst != EXIT_BLOCK_PTR);
  
!   /* Make sure we don't add duplicate edges.  */
!   switch (use_edge_cache)
      {
!     default:
!       /* Quick test for non-existence of the edge.  */
!       if (! TEST_BIT (edge_cache[src->index], dst->index))
! 	break;
! 
!       /* The edge exists; early exit if no work to do.  */
!       if (flags == 0)
! 	return NULL;
! 
!       /* Fall through.  */
!     case 0:
!       for (e = src->succ; e; e = e->succ_next)
! 	if (e->dest == dst)
! 	  {
! 	    e->flags |= flags;
! 	    return NULL;
! 	  }
!       break;
      }
  
!   e = unchecked_make_edge (src, dst, flags);
! 
!   if (use_edge_cache)
!     SET_BIT (edge_cache[src->index], dst->index);
  
!   return e;
  }
  
  /* Create an edge connecting SRC and DEST with flags FLAGS.  Return newly
--- 273,301 ----
  edge
  cached_make_edge (sbitmap *edge_cache, basic_block src, basic_block dst, int flags)
  {
!   if (edge_cache == NULL
!       || src == ENTRY_BLOCK_PTR
!       || dst == EXIT_BLOCK_PTR)
!     return make_edge (src, dst, flags);
  
!   /* Does the requested edge already exist?  */
!   if (! TEST_BIT (edge_cache[src->index], dst->index))
      {
!       /* The edge does not exist.  Create one and update the
! 	 cache.  */
!       SET_BIT (edge_cache[src->index], dst->index);
!       return unchecked_make_edge (src, dst, flags);
      }
  
!   /* At this point, we know that the requested edge exists.  Adjust
!      flags if necessary.  */
!   if (flags)
!     {
!       edge e = find_edge (src, dst);
!       e->flags |= flags;
!     }
  
!   return NULL;
  }
  
  /* Create an edge connecting SRC and DEST with flags FLAGS.  Return newly
*************** cached_make_edge (sbitmap *edge_cache, b
*** 359,365 ****
  edge
  make_edge (basic_block src, basic_block dest, int flags)
  {
!   return cached_make_edge (NULL, src, dest, flags);
  }
  
  /* Create an edge connecting SRC to DEST and set probability by knowing
--- 304,319 ----
  edge
  make_edge (basic_block src, basic_block dest, int flags)
  {
!   edge e = find_edge (src, dest);
! 
!   /* Make sure we don't add duplicate edges.  */
!   if (e)
!     {
!       e->flags |= flags;
!       return NULL;
!     }
! 
!   return unchecked_make_edge (src, dest, flags);
  }
  
  /* Create an edge connecting SRC to DEST and set probability by knowing
*************** make_single_succ_edge (basic_block src, 
*** 380,411 ****
  void
  remove_edge (edge e)
  {
-   edge last_pred = NULL;
-   edge last_succ = NULL;
    edge tmp;
    basic_block src, dest;
  
    src = e->src;
    dest = e->dest;
!   for (tmp = src->succ; tmp && tmp != e; tmp = tmp->succ_next)
!     last_succ = tmp;
  
!   if (!tmp)
!     abort ();
!   if (last_succ)
!     last_succ->succ_next = e->succ_next;
!   else
!     src->succ = e->succ_next;
  
!   for (tmp = dest->pred; tmp && tmp != e; tmp = tmp->pred_next)
!     last_pred = tmp;
  
!   if (!tmp)
!     abort ();
!   if (last_pred)
!     last_pred->pred_next = e->pred_next;
!   else
!     dest->pred = e->pred_next;
  
    free_edge (e);
  }
--- 334,371 ----
  void
  remove_edge (edge e)
  {
    edge tmp;
    basic_block src, dest;
+   unsigned int dest_idx;
+   bool found = false;
+   edge_iterator ei;
+ 
+   execute_on_shrinking_pred (e);
  
    src = e->src;
    dest = e->dest;
!   dest_idx = e->dest_idx;
  
!   for (ei = ei_start (src->succs); (tmp = ei_safe_edge (ei)); )
!     {
!       if (tmp == e)
! 	{
! 	  VEC_unordered_remove (edge, src->succs, ei.index);
! 	  found = true;
! 	  break;
! 	}
!       else
! 	ei_next (&ei);
!     }
  
!   gcc_assert (found);
  
!   VEC_unordered_remove (edge, dest->preds, dest_idx);
! 
!   /* If we removed an edge in the middle of the edge vector, we need
!      to update dest_idx of the edge that moved into the "hole".  */
!   if (dest_idx < EDGE_COUNT (dest->preds))
!     EDGE_PRED (dest, dest_idx)->dest_idx = dest_idx;
  
    free_edge (e);
  }
*************** remove_edge (edge e)
*** 415,431 ****
  void
  redirect_edge_succ (edge e, basic_block new_succ)
  {
!   edge *pe;
  
!   /* Disconnect the edge from the old successor block.  */
!   for (pe = &e->dest->pred; *pe != e; pe = &(*pe)->pred_next)
!     continue;
!   *pe = (*pe)->pred_next;
  
    /* Reconnect the edge to the new successor block.  */
!   e->pred_next = new_succ->pred;
!   new_succ->pred = e;
    e->dest = new_succ;
  }
  
  /* Like previous but avoid possible duplicate edge.  */
--- 375,397 ----
  void
  redirect_edge_succ (edge e, basic_block new_succ)
  {
!   basic_block dest = e->dest;
!   unsigned int dest_idx = e->dest_idx;
  
!   execute_on_shrinking_pred (e);
! 
!   VEC_unordered_remove (edge, dest->preds, dest_idx);
! 
!   /* If we removed an edge in the middle of the edge vector, we need
!      to update dest_idx of the edge that moved into the "hole".  */
!   if (dest_idx < EDGE_COUNT (dest->preds))
!     EDGE_PRED (dest, dest_idx)->dest_idx = dest_idx;
  
    /* Reconnect the edge to the new successor block.  */
!   VEC_safe_push (edge, new_succ->preds, e);
    e->dest = new_succ;
+   e->dest_idx = EDGE_COUNT (new_succ->preds) - 1;
+   execute_on_growing_pred (e);
  }
  
  /* Like previous but avoid possible duplicate edge.  */
*************** redirect_edge_succ_nodup (edge e, basic_
*** 435,446 ****
  {
    edge s;
  
!   /* Check whether the edge is already present.  */
!   for (s = e->src->succ; s; s = s->succ_next)
!     if (s->dest == new_succ && s != e)
!       break;
! 
!   if (s)
      {
        s->flags |= e->flags;
        s->probability += e->probability;
--- 401,408 ----
  {
    edge s;
  
!   s = find_edge (e->src, new_succ);
!   if (s && s != e)
      {
        s->flags |= e->flags;
        s->probability += e->probability;
*************** redirect_edge_succ_nodup (edge e, basic_
*** 461,551 ****
  void
  redirect_edge_pred (edge e, basic_block new_pred)
  {
!   edge *pe;
  
    /* Disconnect the edge from the old predecessor block.  */
!   for (pe = &e->src->succ; *pe != e; pe = &(*pe)->succ_next)
!     continue;
  
!   *pe = (*pe)->succ_next;
  
    /* Reconnect the edge to the new predecessor block.  */
!   e->succ_next = new_pred->succ;
!   new_pred->succ = e;
    e->src = new_pred;
  }
  
  void
  clear_bb_flags (void)
  {
    basic_block bb;
  
    FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb)
!     bb->flags = 0;
  }
  
  void
  dump_flow_info (FILE *file)
  {
    int i;
-   int max_regno = max_reg_num ();
    basic_block bb;
-   static const char * const reg_class_names[] = REG_CLASS_NAMES;
  
!   fprintf (file, "%d registers.\n", max_regno);
!   if (reg_n_info)
!     for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
!       if (REG_N_REFS (i))
! 	{
! 	  enum reg_class class, altclass;
  
! 	  fprintf (file, "\nRegister %d used %d times across %d insns",
! 		   i, REG_N_REFS (i), REG_LIVE_LENGTH (i));
! 	  if (REG_BASIC_BLOCK (i) >= 0)
! 	    fprintf (file, " in block %d", REG_BASIC_BLOCK (i));
! 	  if (REG_N_SETS (i))
! 	    fprintf (file, "; set %d time%s", REG_N_SETS (i),
! 		     (REG_N_SETS (i) == 1) ? "" : "s");
! 	  if (regno_reg_rtx[i] != NULL && REG_USERVAR_P (regno_reg_rtx[i]))
! 	    fprintf (file, "; user var");
! 	  if (REG_N_DEATHS (i) != 1)
! 	    fprintf (file, "; dies in %d places", REG_N_DEATHS (i));
! 	  if (REG_N_CALLS_CROSSED (i) == 1)
! 	    fprintf (file, "; crosses 1 call");
! 	  else if (REG_N_CALLS_CROSSED (i))
! 	    fprintf (file, "; crosses %d calls", REG_N_CALLS_CROSSED (i));
! 	  if (regno_reg_rtx[i] != NULL
! 	      && PSEUDO_REGNO_BYTES (i) != UNITS_PER_WORD)
! 	    fprintf (file, "; %d bytes", PSEUDO_REGNO_BYTES (i));
  
! 	  class = reg_preferred_class (i);
! 	  altclass = reg_alternate_class (i);
! 	  if (class != GENERAL_REGS || altclass != ALL_REGS)
! 	    {
! 	      if (altclass == ALL_REGS || class == ALL_REGS)
! 		fprintf (file, "; pref %s", reg_class_names[(int) class]);
! 	      else if (altclass == NO_REGS)
! 		fprintf (file, "; %s or none", reg_class_names[(int) class]);
! 	      else
! 		fprintf (file, "; pref %s, else %s",
! 			 reg_class_names[(int) class],
! 			 reg_class_names[(int) altclass]);
! 	    }
  
! 	  if (regno_reg_rtx[i] != NULL && REG_POINTER (regno_reg_rtx[i]))
! 	    fprintf (file, "; pointer");
! 	  fprintf (file, ".\n");
! 	}
  
    fprintf (file, "\n%d basic blocks, %d edges.\n", n_basic_blocks, n_edges);
    FOR_EACH_BB (bb)
      {
        edge e;
!       int sum;
!       gcov_type lsum;
  
!       fprintf (file, "\nBasic block %d: first insn %d, last %d, ",
! 	       bb->index, INSN_UID (BB_HEAD (bb)), INSN_UID (BB_END (bb)));
        fprintf (file, "prev %d, next %d, ",
  	       bb->prev_bb->index, bb->next_bb->index);
        fprintf (file, "loop_depth %d, count ", bb->loop_depth);
--- 423,573 ----
  void
  redirect_edge_pred (edge e, basic_block new_pred)
  {
!   edge tmp;
!   edge_iterator ei;
!   bool found = false;
  
    /* Disconnect the edge from the old predecessor block.  */
!   for (ei = ei_start (e->src->succs); (tmp = ei_safe_edge (ei)); )
!     {
!       if (tmp == e)
! 	{
! 	  VEC_unordered_remove (edge, e->src->succs, ei.index);
! 	  found = true;
! 	  break;
! 	}
!       else
! 	ei_next (&ei);
!     }
  
!   gcc_assert (found);
  
    /* Reconnect the edge to the new predecessor block.  */
!   VEC_safe_push (edge, new_pred->succs, e);
    e->src = new_pred;
  }
  
+ /* Clear all basic block flags, with the exception of partitioning.  */
  void
  clear_bb_flags (void)
  {
    basic_block bb;
  
    FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb)
!     bb->flags = BB_PARTITION (bb);
! }
! 
! /* Check the consistency of profile information.  We can't do that
!    in verify_flow_info, as the counts may get invalid for incompletely
!    solved graphs, later eliminating of conditionals or roundoff errors.
!    It is still practical to have them reported for debugging of simple
!    testcases.  */
! void
! check_bb_profile (basic_block bb, FILE * file)
! {
!   edge e;
!   int sum = 0;
!   gcov_type lsum;
!   edge_iterator ei;
! 
!   if (profile_status == PROFILE_ABSENT)
!     return;
! 
!   if (bb != EXIT_BLOCK_PTR)
!     {
!       FOR_EACH_EDGE (e, ei, bb->succs)
! 	sum += e->probability;
!       if (EDGE_COUNT (bb->succs) && abs (sum - REG_BR_PROB_BASE) > 100)
! 	fprintf (file, "Invalid sum of outgoing probabilities %.1f%%\n",
! 		 sum * 100.0 / REG_BR_PROB_BASE);
!       lsum = 0;
!       FOR_EACH_EDGE (e, ei, bb->succs)
! 	lsum += e->count;
!       if (EDGE_COUNT (bb->succs)
! 	  && (lsum - bb->count > 100 || lsum - bb->count < -100))
! 	fprintf (file, "Invalid sum of outgoing counts %i, should be %i\n",
! 		 (int) lsum, (int) bb->count);
!     }
!   if (bb != ENTRY_BLOCK_PTR)
!     {
!       sum = 0;
!       FOR_EACH_EDGE (e, ei, bb->preds)
! 	sum += EDGE_FREQUENCY (e);
!       if (abs (sum - bb->frequency) > 100)
! 	fprintf (file,
! 		 "Invalid sum of incoming frequencies %i, should be %i\n",
! 		 sum, bb->frequency);
!       lsum = 0;
!       FOR_EACH_EDGE (e, ei, bb->preds)
! 	lsum += e->count;
!       if (lsum - bb->count > 100 || lsum - bb->count < -100)
! 	fprintf (file, "Invalid sum of incoming counts %i, should be %i\n",
! 		 (int) lsum, (int) bb->count);
!     }
  }
  
  void
  dump_flow_info (FILE *file)
  {
    int i;
    basic_block bb;
  
!   /* There are no pseudo registers after reload.  Don't dump them.  */
!   if (reg_n_info && !reload_completed)
!     {
!       int max_regno = max_reg_num ();
!       fprintf (file, "%d registers.\n", max_regno);
!       for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
! 	if (REG_N_REFS (i))
! 	  {
! 	    enum reg_class class, altclass;
  
! 	    fprintf (file, "\nRegister %d used %d times across %d insns",
! 		     i, REG_N_REFS (i), REG_LIVE_LENGTH (i));
! 	    if (REG_BASIC_BLOCK (i) >= 0)
! 	      fprintf (file, " in block %d", REG_BASIC_BLOCK (i));
! 	    if (REG_N_SETS (i))
! 	      fprintf (file, "; set %d time%s", REG_N_SETS (i),
! 		       (REG_N_SETS (i) == 1) ? "" : "s");
! 	    if (regno_reg_rtx[i] != NULL && REG_USERVAR_P (regno_reg_rtx[i]))
! 	      fprintf (file, "; user var");
! 	    if (REG_N_DEATHS (i) != 1)
! 	      fprintf (file, "; dies in %d places", REG_N_DEATHS (i));
! 	    if (REG_N_CALLS_CROSSED (i) == 1)
! 	      fprintf (file, "; crosses 1 call");
! 	    else if (REG_N_CALLS_CROSSED (i))
! 	      fprintf (file, "; crosses %d calls", REG_N_CALLS_CROSSED (i));
! 	    if (regno_reg_rtx[i] != NULL
! 		&& PSEUDO_REGNO_BYTES (i) != UNITS_PER_WORD)
! 	      fprintf (file, "; %d bytes", PSEUDO_REGNO_BYTES (i));
  
! 	    class = reg_preferred_class (i);
! 	    altclass = reg_alternate_class (i);
! 	    if (class != GENERAL_REGS || altclass != ALL_REGS)
! 	      {
! 		if (altclass == ALL_REGS || class == ALL_REGS)
! 		  fprintf (file, "; pref %s", reg_class_names[(int) class]);
! 		else if (altclass == NO_REGS)
! 		  fprintf (file, "; %s or none", reg_class_names[(int) class]);
! 		else
! 		  fprintf (file, "; pref %s, else %s",
! 			   reg_class_names[(int) class],
! 			   reg_class_names[(int) altclass]);
! 	      }
  
! 	    if (regno_reg_rtx[i] != NULL && REG_POINTER (regno_reg_rtx[i]))
! 	      fprintf (file, "; pointer");
! 	    fprintf (file, ".\n");
! 	  }
!     }
  
    fprintf (file, "\n%d basic blocks, %d edges.\n", n_basic_blocks, n_edges);
    FOR_EACH_BB (bb)
      {
        edge e;
!       edge_iterator ei;
  
!       fprintf (file, "\nBasic block %d ", bb->index);
        fprintf (file, "prev %d, next %d, ",
  	       bb->prev_bb->index, bb->next_bb->index);
        fprintf (file, "loop_depth %d, count ", bb->loop_depth);
*************** dump_flow_info (FILE *file)
*** 558,608 ****
        fprintf (file, ".\n");
  
        fprintf (file, "Predecessors: ");
!       for (e = bb->pred; e; e = e->pred_next)
  	dump_edge_info (file, e, 0);
  
        fprintf (file, "\nSuccessors: ");
!       for (e = bb->succ; e; e = e->succ_next)
  	dump_edge_info (file, e, 1);
  
!       fprintf (file, "\nRegisters live at start:");
!       dump_regset (bb->global_live_at_start, file);
  
!       fprintf (file, "\nRegisters live at end:");
!       dump_regset (bb->global_live_at_end, file);
  
        putc ('\n', file);
! 
!       /* Check the consistency of profile information.  We can't do that
! 	 in verify_flow_info, as the counts may get invalid for incompletely
! 	 solved graphs, later eliminating of conditionals or roundoff errors.
! 	 It is still practical to have them reported for debugging of simple
! 	 testcases.  */
!       sum = 0;
!       for (e = bb->succ; e; e = e->succ_next)
! 	sum += e->probability;
!       if (bb->succ && abs (sum - REG_BR_PROB_BASE) > 100)
! 	fprintf (file, "Invalid sum of outgoing probabilities %.1f%%\n",
! 		 sum * 100.0 / REG_BR_PROB_BASE);
!       sum = 0;
!       for (e = bb->pred; e; e = e->pred_next)
! 	sum += EDGE_FREQUENCY (e);
!       if (abs (sum - bb->frequency) > 100)
! 	fprintf (file,
! 		 "Invalid sum of incomming frequencies %i, should be %i\n",
! 		 sum, bb->frequency);
!       lsum = 0;
!       for (e = bb->pred; e; e = e->pred_next)
! 	lsum += e->count;
!       if (lsum - bb->count > 100 || lsum - bb->count < -100)
! 	fprintf (file, "Invalid sum of incomming counts %i, should be %i\n",
! 		 (int)lsum, (int)bb->count);
!       lsum = 0;
!       for (e = bb->succ; e; e = e->succ_next)
! 	lsum += e->count;
!       if (bb->succ && (lsum - bb->count > 100 || lsum - bb->count < -100))
! 	fprintf (file, "Invalid sum of incomming counts %i, should be %i\n",
! 		 (int)lsum, (int)bb->count);
      }
  
    putc ('\n', file);
--- 580,606 ----
        fprintf (file, ".\n");
  
        fprintf (file, "Predecessors: ");
!       FOR_EACH_EDGE (e, ei, bb->preds)
  	dump_edge_info (file, e, 0);
  
        fprintf (file, "\nSuccessors: ");
!       FOR_EACH_EDGE (e, ei, bb->succs)
  	dump_edge_info (file, e, 1);
  
!       if (bb->global_live_at_start)
! 	{
! 	  fprintf (file, "\nRegisters live at start:");
! 	  dump_regset (bb->global_live_at_start, file);
! 	}
  
!       if (bb->global_live_at_end)
! 	{
! 	  fprintf (file, "\nRegisters live at end:");
! 	  dump_regset (bb->global_live_at_end, file);
! 	}
  
        putc ('\n', file);
!       check_bb_profile (bb, file);
      }
  
    putc ('\n', file);
*************** dump_edge_info (FILE *file, edge e, int 
*** 639,645 ****
      {
        static const char * const bitnames[] = {
  	"fallthru", "ab", "abcall", "eh", "fake", "dfs_back",
! 	"can_fallthru", "irreducible", "sibcall", "loop_exit"
        };
        int comma = 0;
        int i, flags = e->flags;
--- 637,644 ----
      {
        static const char * const bitnames[] = {
  	"fallthru", "ab", "abcall", "eh", "fake", "dfs_back",
! 	"can_fallthru", "irreducible", "sibcall", "loop_exit",
! 	"true", "false", "exec"
        };
        int comma = 0;
        int i, flags = e->flags;
*************** inline void
*** 677,684 ****
  alloc_aux_for_block (basic_block bb, int size)
  {
    /* Verify that aux field is clear.  */
!   if (bb->aux || !first_block_aux_obj)
!     abort ();
    bb->aux = obstack_alloc (&block_aux_obstack, size);
    memset (bb->aux, 0, size);
  }
--- 676,682 ----
  alloc_aux_for_block (basic_block bb, int size)
  {
    /* Verify that aux field is clear.  */
!   gcc_assert (!bb->aux && first_block_aux_obj);
    bb->aux = obstack_alloc (&block_aux_obstack, size);
    memset (bb->aux, 0, size);
  }
*************** alloc_aux_for_blocks (int size)
*** 696,705 ****
        gcc_obstack_init (&block_aux_obstack);
        initialized = 1;
      }
! 
!   /* Check whether AUX data are still allocated.  */
!   else if (first_block_aux_obj)
!     abort ();
    first_block_aux_obj = obstack_alloc (&block_aux_obstack, 0);
    if (size)
      {
--- 694,703 ----
        gcc_obstack_init (&block_aux_obstack);
        initialized = 1;
      }
!   else
!     /* Check whether AUX data are still allocated.  */
!     gcc_assert (!first_block_aux_obj);
!   
    first_block_aux_obj = obstack_alloc (&block_aux_obstack, 0);
    if (size)
      {
*************** clear_aux_for_blocks (void)
*** 727,734 ****
  void
  free_aux_for_blocks (void)
  {
!   if (!first_block_aux_obj)
!     abort ();
    obstack_free (&block_aux_obstack, first_block_aux_obj);
    first_block_aux_obj = NULL;
  
--- 725,731 ----
  void
  free_aux_for_blocks (void)
  {
!   gcc_assert (first_block_aux_obj);
    obstack_free (&block_aux_obstack, first_block_aux_obj);
    first_block_aux_obj = NULL;
  
*************** inline void
*** 742,749 ****
  alloc_aux_for_edge (edge e, int size)
  {
    /* Verify that aux field is clear.  */
!   if (e->aux || !first_edge_aux_obj)
!     abort ();
    e->aux = obstack_alloc (&edge_aux_obstack, size);
    memset (e->aux, 0, size);
  }
--- 739,745 ----
  alloc_aux_for_edge (edge e, int size)
  {
    /* Verify that aux field is clear.  */
!   gcc_assert (!e->aux && first_edge_aux_obj);
    e->aux = obstack_alloc (&edge_aux_obstack, size);
    memset (e->aux, 0, size);
  }
*************** alloc_aux_for_edges (int size)
*** 761,770 ****
        gcc_obstack_init (&edge_aux_obstack);
        initialized = 1;
      }
! 
!   /* Check whether AUX data are still allocated.  */
!   else if (first_edge_aux_obj)
!     abort ();
  
    first_edge_aux_obj = obstack_alloc (&edge_aux_obstack, 0);
    if (size)
--- 757,765 ----
        gcc_obstack_init (&edge_aux_obstack);
        initialized = 1;
      }
!   else
!     /* Check whether AUX data are still allocated.  */
!     gcc_assert (!first_edge_aux_obj);
  
    first_edge_aux_obj = obstack_alloc (&edge_aux_obstack, 0);
    if (size)
*************** alloc_aux_for_edges (int size)
*** 774,781 ****
        FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR, next_bb)
  	{
  	  edge e;
  
! 	  for (e = bb->succ; e; e = e->succ_next)
  	    alloc_aux_for_edge (e, size);
  	}
      }
--- 769,777 ----
        FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR, next_bb)
  	{
  	  edge e;
+ 	  edge_iterator ei;
  
! 	  FOR_EACH_EDGE (e, ei, bb->succs)
  	    alloc_aux_for_edge (e, size);
  	}
      }
*************** clear_aux_for_edges (void)
*** 791,797 ****
  
    FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR, next_bb)
      {
!       for (e = bb->succ; e; e = e->succ_next)
  	e->aux = NULL;
      }
  }
--- 787,794 ----
  
    FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR, next_bb)
      {
!       edge_iterator ei;
!       FOR_EACH_EDGE (e, ei, bb->succs)
  	e->aux = NULL;
      }
  }
*************** clear_aux_for_edges (void)
*** 802,994 ****
  void
  free_aux_for_edges (void)
  {
!   if (!first_edge_aux_obj)
!     abort ();
    obstack_free (&edge_aux_obstack, first_edge_aux_obj);
    first_edge_aux_obj = NULL;
  
    clear_aux_for_edges ();
  }
  
- /* Verify the CFG consistency.
- 
-    Currently it does following checks edge and basic block list correctness
-    and calls into IL dependent checking then.  */
  void
! verify_flow_info (void)
  {
!   size_t *edge_checksum;
!   int num_bb_notes, err = 0;
!   basic_block bb, last_bb_seen;
!   basic_block *last_visited;
! 
!   last_visited = xcalloc (last_basic_block + 2, sizeof (basic_block));
!   edge_checksum = xcalloc (last_basic_block + 2, sizeof (size_t));
! 
!   /* Check bb chain & numbers.  */
!   last_bb_seen = ENTRY_BLOCK_PTR;
!   FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR->next_bb, NULL, next_bb)
!     {
!       if (bb != EXIT_BLOCK_PTR
! 	  && bb != BASIC_BLOCK (bb->index))
! 	{
! 	  error ("bb %d on wrong place", bb->index);
! 	  err = 1;
! 	}
  
!       if (bb->prev_bb != last_bb_seen)
! 	{
! 	  error ("prev_bb of %d should be %d, not %d",
! 		 bb->index, last_bb_seen->index, bb->prev_bb->index);
! 	  err = 1;
! 	}
  
!       last_bb_seen = bb;
!     }
  
!   /* Now check the basic blocks (boundaries etc.) */
!   FOR_EACH_BB_REVERSE (bb)
      {
!       int n_fallthru = 0;
!       edge e;
  
!       if (bb->count < 0)
! 	{
! 	  error ("verify_flow_info: Wrong count of block %i %i",
! 	         bb->index, (int)bb->count);
! 	  err = 1;
! 	}
!       if (bb->frequency < 0)
! 	{
! 	  error ("verify_flow_info: Wrong frequency of block %i %i",
! 	         bb->index, bb->frequency);
! 	  err = 1;
! 	}
!       for (e = bb->succ; e; e = e->succ_next)
! 	{
! 	  if (last_visited [e->dest->index + 2] == bb)
! 	    {
! 	      error ("verify_flow_info: Duplicate edge %i->%i",
! 		     e->src->index, e->dest->index);
! 	      err = 1;
! 	    }
! 	  if (e->probability < 0 || e->probability > REG_BR_PROB_BASE)
! 	    {
! 	      error ("verify_flow_info: Wrong probability of edge %i->%i %i",
! 		     e->src->index, e->dest->index, e->probability);
! 	      err = 1;
! 	    }
! 	  if (e->count < 0)
! 	    {
! 	      error ("verify_flow_info: Wrong count of edge %i->%i %i",
! 		     e->src->index, e->dest->index, (int)e->count);
! 	      err = 1;
! 	    }
  
! 	  last_visited [e->dest->index + 2] = bb;
  
! 	  if (e->flags & EDGE_FALLTHRU)
! 	    n_fallthru++;
  
! 	  if (e->src != bb)
! 	    {
! 	      error ("verify_flow_info: Basic block %d succ edge is corrupted",
! 		     bb->index);
! 	      fprintf (stderr, "Predecessor: ");
! 	      dump_edge_info (stderr, e, 0);
! 	      fprintf (stderr, "\nSuccessor: ");
! 	      dump_edge_info (stderr, e, 1);
! 	      fprintf (stderr, "\n");
! 	      err = 1;
! 	    }
  
! 	  edge_checksum[e->dest->index + 2] += (size_t) e;
! 	}
!       if (n_fallthru > 1)
! 	{
! 	  error ("Wrong amount of branch edges after unconditional jump %i", bb->index);
! 	  err = 1;
! 	}
  
!       for (e = bb->pred; e; e = e->pred_next)
! 	{
! 	  if (e->dest != bb)
! 	    {
! 	      error ("basic block %d pred edge is corrupted", bb->index);
! 	      fputs ("Predecessor: ", stderr);
! 	      dump_edge_info (stderr, e, 0);
! 	      fputs ("\nSuccessor: ", stderr);
! 	      dump_edge_info (stderr, e, 1);
! 	      fputc ('\n', stderr);
! 	      err = 1;
! 	    }
! 	  edge_checksum[e->dest->index + 2] -= (size_t) e;
! 	}
      }
- 
-   /* Complete edge checksumming for ENTRY and EXIT.  */
-   {
-     edge e;
- 
-     for (e = ENTRY_BLOCK_PTR->succ; e ; e = e->succ_next)
-       edge_checksum[e->dest->index + 2] += (size_t) e;
- 
-     for (e = EXIT_BLOCK_PTR->pred; e ; e = e->pred_next)
-       edge_checksum[e->dest->index + 2] -= (size_t) e;
-   }
- 
-   FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb)
-     if (edge_checksum[bb->index + 2])
-       {
- 	error ("basic block %i edge lists are corrupted", bb->index);
- 	err = 1;
-       }
- 
-   num_bb_notes = 0;
-   last_bb_seen = ENTRY_BLOCK_PTR;
- 
-   /* Clean up.  */
-   free (last_visited);
-   free (edge_checksum);
-   err |= cfg_hooks->cfgh_verify_flow_info ();
-   if (err)
-     internal_error ("verify_flow_info failed");
  }
  
! /* Print out one basic block with live information at start and end.  */
  
  void
! dump_bb (basic_block bb, FILE *outf)
  {
!   edge e;
  
!   fprintf (outf, ";; Basic block %d, loop depth %d, count ",
! 	   bb->index, bb->loop_depth);
!   fprintf (outf, HOST_WIDEST_INT_PRINT_DEC, (HOST_WIDEST_INT) bb->count);
!   putc ('\n', outf);
!   fputs (";; Predecessors: ", outf);
!   for (e = bb->pred; e; e = e->pred_next)
!     dump_edge_info (outf, e, 0);
!   putc ('\n', outf);
  
!   cfg_hooks->dump_bb (bb, outf);
  
!   fputs (";; Successors: ", outf);
!   for (e = bb->succ; e; e = e->succ_next)
!     dump_edge_info (outf, e, 1);
!   putc ('\n', outf);
! }
  
! void
! debug_bb (basic_block bb)
! {
!   dump_bb (bb, stderr);
! }
  
! basic_block
! debug_bb_n (int n)
! {
!   basic_block bb = BASIC_BLOCK (n);
!   dump_bb (bb, stderr);
!   return bb;
  }
--- 799,942 ----
  void
  free_aux_for_edges (void)
  {
!   gcc_assert (first_edge_aux_obj);
    obstack_free (&edge_aux_obstack, first_edge_aux_obj);
    first_edge_aux_obj = NULL;
  
    clear_aux_for_edges ();
  }
  
  void
! debug_bb (basic_block bb)
  {
!   dump_bb (bb, stderr, 0);
! }
  
! basic_block
! debug_bb_n (int n)
! {
!   basic_block bb = BASIC_BLOCK (n);
!   dump_bb (bb, stderr, 0);
!   return bb;
! }
  
! /* Dumps cfg related information about basic block BB to FILE.  */
  
! static void
! dump_cfg_bb_info (FILE *file, basic_block bb)
! {
!   unsigned i;
!   edge_iterator ei;
!   bool first = true;
!   static const char * const bb_bitnames[] =
      {
!       "dirty", "new", "reachable", "visited", "irreducible_loop", "superblock"
!     };
!   const unsigned n_bitnames = sizeof (bb_bitnames) / sizeof (char *);
!   edge e;
  
!   fprintf (file, "Basic block %d", bb->index);
!   for (i = 0; i < n_bitnames; i++)
!     if (bb->flags & (1 << i))
!       {
! 	if (first)
! 	  fprintf (file, " (");
! 	else
! 	  fprintf (file, ", ");
! 	first = false;
! 	fprintf (file, bb_bitnames[i]);
!       }
!   if (!first)
!     fprintf (file, ")");
!   fprintf (file, "\n");
  
!   fprintf (file, "Predecessors: ");
!   FOR_EACH_EDGE (e, ei, bb->preds)
!     dump_edge_info (file, e, 0);
  
!   fprintf (file, "\nSuccessors: ");
!   FOR_EACH_EDGE (e, ei, bb->succs)
!     dump_edge_info (file, e, 1);
!   fprintf (file, "\n\n");
! }
  
! /* Dumps a brief description of cfg to FILE.  */
  
! void
! brief_dump_cfg (FILE *file)
! {
!   basic_block bb;
  
!   FOR_EACH_BB (bb)
!     {
!       dump_cfg_bb_info (file, bb);
      }
  }
  
! /* An edge originally destinating BB of FREQUENCY and COUNT has been proved to
!    leave the block by TAKEN_EDGE.  Update profile of BB such that edge E can be
!    redirected to destination of TAKEN_EDGE. 
  
+    This function may leave the profile inconsistent in the case TAKEN_EDGE
+    frequency or count is believed to be lower than FREQUENCY or COUNT
+    respectively.  */
  void
! update_bb_profile_for_threading (basic_block bb, int edge_frequency,
! 				 gcov_type count, edge taken_edge)
  {
!   edge c;
!   int prob;
!   edge_iterator ei;
  
!   bb->count -= count;
!   if (bb->count < 0)
!     bb->count = 0;
  
!   /* Compute the probability of TAKEN_EDGE being reached via threaded edge.
!      Watch for overflows.  */
!   if (bb->frequency)
!     prob = edge_frequency * REG_BR_PROB_BASE / bb->frequency;
!   else
!     prob = 0;
!   if (prob > taken_edge->probability)
!     {
!       if (dump_file)
! 	fprintf (dump_file, "Jump threading proved probability of edge "
! 		 "%i->%i too small (it is %i, should be %i).\n",
! 		 taken_edge->src->index, taken_edge->dest->index,
! 		 taken_edge->probability, prob);
!       prob = taken_edge->probability;
!     }
  
!   /* Now rescale the probabilities.  */
!   taken_edge->probability -= prob;
!   prob = REG_BR_PROB_BASE - prob;
!   bb->frequency -= edge_frequency;
!   if (bb->frequency < 0)
!     bb->frequency = 0;
!   if (prob <= 0)
!     {
!       if (dump_file)
! 	fprintf (dump_file, "Edge frequencies of bb %i has been reset, "
! 		 "frequency of block should end up being 0, it is %i\n",
! 		 bb->index, bb->frequency);
!       EDGE_SUCC (bb, 0)->probability = REG_BR_PROB_BASE;
!       ei = ei_start (bb->succs);
!       ei_next (&ei);
!       for (; (c = ei_safe_edge (ei)); ei_next (&ei))
! 	c->probability = 0;
!     }
!   else if (prob != REG_BR_PROB_BASE)
!     {
!       int scale = REG_BR_PROB_BASE / prob;
  
!       FOR_EACH_EDGE (c, ei, bb->succs)
! 	c->probability *= scale;
!     }
  
!   if (bb != taken_edge->src)
!     abort ();
!   taken_edge->count -= count;
!   if (taken_edge->count < 0)
!     taken_edge->count = 0;
  }
diff -Nrcpad gcc-3.4.3/gcc/cfganal.c gcc-4.0.0/gcc/cfganal.c
*** gcc-3.4.3/gcc/cfganal.c	Tue Feb 10 13:26:24 2004
--- gcc-4.0.0/gcc/cfganal.c	Mon Feb 21 16:21:00 2005
***************
*** 1,6 ****
  /* Control flow graph analysis code for GNU compiler.
     Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
!    1999, 2000, 2001, 2003 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
--- 1,6 ----
  /* Control flow graph analysis code for GNU compiler.
     Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
!    1999, 2000, 2001, 2003, 2004, 2005 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
*************** Software Foundation, 59 Temple Place - S
*** 25,36 ****
--- 25,38 ----
  #include "coretypes.h"
  #include "tm.h"
  #include "rtl.h"
+ #include "obstack.h"
  #include "hard-reg-set.h"
  #include "basic-block.h"
  #include "insn-config.h"
  #include "recog.h"
  #include "toplev.h"
  #include "tm_p.h"
+ #include "timevar.h"
  
  /* Store the data structures necessary for depth-first search.  */
  struct depth_first_search_dsS {
*************** typedef struct depth_first_search_dsS *d
*** 49,58 ****
  static void flow_dfs_compute_reverse_init (depth_first_search_ds);
  static void flow_dfs_compute_reverse_add_bb (depth_first_search_ds,
  					     basic_block);
! static basic_block flow_dfs_compute_reverse_execute (depth_first_search_ds);
  static void flow_dfs_compute_reverse_finish (depth_first_search_ds);
- static void remove_fake_successors (basic_block);
- static bool need_fake_edge_p (rtx);
  static bool flow_active_insn_p (rtx);
  
  /* Like active_insn_p, except keep the return value clobber around
--- 51,59 ----
  static void flow_dfs_compute_reverse_init (depth_first_search_ds);
  static void flow_dfs_compute_reverse_add_bb (depth_first_search_ds,
  					     basic_block);
! static basic_block flow_dfs_compute_reverse_execute (depth_first_search_ds,
! 						     basic_block);
  static void flow_dfs_compute_reverse_finish (depth_first_search_ds);
  static bool flow_active_insn_p (rtx);
  
  /* Like active_insn_p, except keep the return value clobber around
*************** flow_active_insn_p (rtx insn)
*** 70,76 ****
       function.  If we allow it to be skipped, we introduce the
       possibility for register livetime aborts.  */
    if (GET_CODE (PATTERN (insn)) == CLOBBER
!       && GET_CODE (XEXP (PATTERN (insn), 0)) == REG
        && REG_FUNCTION_VALUE_P (XEXP (PATTERN (insn), 0)))
      return true;
  
--- 71,77 ----
       function.  If we allow it to be skipped, we introduce the
       possibility for register livetime aborts.  */
    if (GET_CODE (PATTERN (insn)) == CLOBBER
!       && REG_P (XEXP (PATTERN (insn), 0))
        && REG_FUNCTION_VALUE_P (XEXP (PATTERN (insn), 0)))
      return true;
  
*************** forwarder_block_p (basic_block bb)
*** 86,92 ****
    rtx insn;
  
    if (bb == EXIT_BLOCK_PTR || bb == ENTRY_BLOCK_PTR
!       || !bb->succ || bb->succ->succ_next)
      return false;
  
    for (insn = BB_HEAD (bb); insn != BB_END (bb); insn = NEXT_INSN (insn))
--- 87,93 ----
    rtx insn;
  
    if (bb == EXIT_BLOCK_PTR || bb == ENTRY_BLOCK_PTR
!       || EDGE_COUNT (bb->succs) != 1)
      return false;
  
    for (insn = BB_HEAD (bb); insn != BB_END (bb); insn = NEXT_INSN (insn))
*************** forwarder_block_p (basic_block bb)
*** 94,100 ****
        return false;
  
    return (!INSN_P (insn)
! 	  || (GET_CODE (insn) == JUMP_INSN && simplejump_p (insn))
  	  || !flow_active_insn_p (insn));
  }
  
--- 95,101 ----
        return false;
  
    return (!INSN_P (insn)
! 	  || (JUMP_P (insn) && simplejump_p (insn))
  	  || !flow_active_insn_p (insn));
  }
  
*************** bool
*** 104,120 ****
  can_fallthru (basic_block src, basic_block target)
  {
    rtx insn = BB_END (src);
!   rtx insn2 = target == EXIT_BLOCK_PTR ? NULL : BB_HEAD (target);
  
    if (src->next_bb != target)
      return 0;
  
    if (insn2 && !active_insn_p (insn2))
      insn2 = next_active_insn (insn2);
  
    /* ??? Later we may add code to move jump tables offline.  */
    return next_active_insn (insn) == insn2;
  }
  
  /* Mark the back edges in DFS traversal.
     Return nonzero if a loop (natural or otherwise) is present.
--- 105,148 ----
  can_fallthru (basic_block src, basic_block target)
  {
    rtx insn = BB_END (src);
!   rtx insn2;
!   edge e;
!   edge_iterator ei;
  
+   if (target == EXIT_BLOCK_PTR)
+     return true;
    if (src->next_bb != target)
      return 0;
+   FOR_EACH_EDGE (e, ei, src->succs)
+     if (e->dest == EXIT_BLOCK_PTR
+ 	&& e->flags & EDGE_FALLTHRU)
+       return 0;
  
+   insn2 = BB_HEAD (target);
    if (insn2 && !active_insn_p (insn2))
      insn2 = next_active_insn (insn2);
  
    /* ??? Later we may add code to move jump tables offline.  */
    return next_active_insn (insn) == insn2;
  }
+ 
+ /* Return nonzero if we could reach target from src by falling through,
+    if the target was made adjacent.  If we already have a fall-through
+    edge to the exit block, we can't do that.  */
+ bool
+ could_fall_through (basic_block src, basic_block target)
+ {
+   edge e;
+   edge_iterator ei;
+ 
+   if (target == EXIT_BLOCK_PTR)
+     return true;
+   FOR_EACH_EDGE (e, ei, src->succs)
+     if (e->dest == EXIT_BLOCK_PTR
+ 	&& e->flags & EDGE_FALLTHRU)
+       return 0;
+   return true;
+ }
  
  /* Mark the back edges in DFS traversal.
     Return nonzero if a loop (natural or otherwise) is present.
*************** can_fallthru (basic_block src, basic_blo
*** 129,135 ****
  bool
  mark_dfs_back_edges (void)
  {
!   edge *stack;
    int *pre;
    int *post;
    int sp;
--- 157,163 ----
  bool
  mark_dfs_back_edges (void)
  {
!   edge_iterator *stack;
    int *pre;
    int *post;
    int sp;
*************** mark_dfs_back_edges (void)
*** 143,149 ****
    post = xcalloc (last_basic_block, sizeof (int));
  
    /* Allocate stack for back-tracking up CFG.  */
!   stack = xmalloc ((n_basic_blocks + 1) * sizeof (edge));
    sp = 0;
  
    /* Allocate bitmap to track nodes that have been visited.  */
--- 171,177 ----
    post = xcalloc (last_basic_block, sizeof (int));
  
    /* Allocate stack for back-tracking up CFG.  */
!   stack = xmalloc ((n_basic_blocks + 1) * sizeof (edge_iterator));
    sp = 0;
  
    /* Allocate bitmap to track nodes that have been visited.  */
*************** mark_dfs_back_edges (void)
*** 153,171 ****
    sbitmap_zero (visited);
  
    /* Push the first edge on to the stack.  */
!   stack[sp++] = ENTRY_BLOCK_PTR->succ;
  
    while (sp)
      {
!       edge e;
        basic_block src;
        basic_block dest;
  
        /* Look at the edge on the top of the stack.  */
!       e = stack[sp - 1];
!       src = e->src;
!       dest = e->dest;
!       e->flags &= ~EDGE_DFS_BACK;
  
        /* Check if the edge destination has been visited yet.  */
        if (dest != EXIT_BLOCK_PTR && ! TEST_BIT (visited, dest->index))
--- 181,199 ----
    sbitmap_zero (visited);
  
    /* Push the first edge on to the stack.  */
!   stack[sp++] = ei_start (ENTRY_BLOCK_PTR->succs);
  
    while (sp)
      {
!       edge_iterator ei;
        basic_block src;
        basic_block dest;
  
        /* Look at the edge on the top of the stack.  */
!       ei = stack[sp - 1];
!       src = ei_edge (ei)->src;
!       dest = ei_edge (ei)->dest;
!       ei_edge (ei)->flags &= ~EDGE_DFS_BACK;
  
        /* Check if the edge destination has been visited yet.  */
        if (dest != EXIT_BLOCK_PTR && ! TEST_BIT (visited, dest->index))
*************** mark_dfs_back_edges (void)
*** 174,184 ****
  	  SET_BIT (visited, dest->index);
  
  	  pre[dest->index] = prenum++;
! 	  if (dest->succ)
  	    {
  	      /* Since the DEST node has been visited for the first
  		 time, check its successors.  */
! 	      stack[sp++] = dest->succ;
  	    }
  	  else
  	    post[dest->index] = postnum++;
--- 202,212 ----
  	  SET_BIT (visited, dest->index);
  
  	  pre[dest->index] = prenum++;
! 	  if (EDGE_COUNT (dest->succs) > 0)
  	    {
  	      /* Since the DEST node has been visited for the first
  		 time, check its successors.  */
! 	      stack[sp++] = ei_start (dest->succs);
  	    }
  	  else
  	    post[dest->index] = postnum++;
*************** mark_dfs_back_edges (void)
*** 188,200 ****
  	  if (dest != EXIT_BLOCK_PTR && src != ENTRY_BLOCK_PTR
  	      && pre[src->index] >= pre[dest->index]
  	      && post[dest->index] == 0)
! 	    e->flags |= EDGE_DFS_BACK, found = true;
  
! 	  if (! e->succ_next && src != ENTRY_BLOCK_PTR)
  	    post[src->index] = postnum++;
  
! 	  if (e->succ_next)
! 	    stack[sp - 1] = e->succ_next;
  	  else
  	    sp--;
  	}
--- 216,228 ----
  	  if (dest != EXIT_BLOCK_PTR && src != ENTRY_BLOCK_PTR
  	      && pre[src->index] >= pre[dest->index]
  	      && post[dest->index] == 0)
! 	    ei_edge (ei)->flags |= EDGE_DFS_BACK, found = true;
  
! 	  if (ei_one_before_end_p (ei) && src != ENTRY_BLOCK_PTR)
  	    post[src->index] = postnum++;
  
! 	  if (!ei_one_before_end_p (ei))
! 	    ei_next (&stack[sp - 1]);
  	  else
  	    sp--;
  	}
*************** set_edge_can_fallthru_flag (void)
*** 218,225 ****
    FOR_EACH_BB (bb)
      {
        edge e;
  
!       for (e = bb->succ; e; e = e->succ_next)
  	{
  	  e->flags &= ~EDGE_CAN_FALLTHRU;
  
--- 246,254 ----
    FOR_EACH_BB (bb)
      {
        edge e;
+       edge_iterator ei;
  
!       FOR_EACH_EDGE (e, ei, bb->succs)
  	{
  	  e->flags &= ~EDGE_CAN_FALLTHRU;
  
*************** set_edge_can_fallthru_flag (void)
*** 230,408 ****
  
        /* If the BB ends with an invertible condjump all (2) edges are
  	 CAN_FALLTHRU edges.  */
!       if (!bb->succ || !bb->succ->succ_next || bb->succ->succ_next->succ_next)
  	continue;
        if (!any_condjump_p (BB_END (bb)))
  	continue;
        if (!invert_jump (BB_END (bb), JUMP_LABEL (BB_END (bb)), 0))
  	continue;
        invert_jump (BB_END (bb), JUMP_LABEL (BB_END (bb)), 0);
!       bb->succ->flags |= EDGE_CAN_FALLTHRU;
!       bb->succ->succ_next->flags |= EDGE_CAN_FALLTHRU;
!     }
! }
! 
! /* Return true if we need to add fake edge to exit.
!    Helper function for the flow_call_edges_add.  */
! 
! static bool
! need_fake_edge_p (rtx insn)
! {
!   if (!INSN_P (insn))
!     return false;
! 
!   if ((GET_CODE (insn) == CALL_INSN
!        && !SIBLING_CALL_P (insn)
!        && !find_reg_note (insn, REG_NORETURN, NULL)
!        && !find_reg_note (insn, REG_ALWAYS_RETURN, NULL)
!        && !CONST_OR_PURE_CALL_P (insn)))
!     return true;
! 
!   return ((GET_CODE (PATTERN (insn)) == ASM_OPERANDS
! 	   && MEM_VOLATILE_P (PATTERN (insn)))
! 	  || (GET_CODE (PATTERN (insn)) == PARALLEL
! 	      && asm_noperands (insn) != -1
! 	      && MEM_VOLATILE_P (XVECEXP (PATTERN (insn), 0, 0)))
! 	  || GET_CODE (PATTERN (insn)) == ASM_INPUT);
! }
! 
! /* Add fake edges to the function exit for any non constant and non noreturn
!    calls, volatile inline assembly in the bitmap of blocks specified by
!    BLOCKS or to the whole CFG if BLOCKS is zero.  Return the number of blocks
!    that were split.
! 
!    The goal is to expose cases in which entering a basic block does not imply
!    that all subsequent instructions must be executed.  */
! 
! int
! flow_call_edges_add (sbitmap blocks)
! {
!   int i;
!   int blocks_split = 0;
!   int last_bb = last_basic_block;
!   bool check_last_block = false;
! 
!   if (n_basic_blocks == 0)
!     return 0;
! 
!   if (! blocks)
!     check_last_block = true;
!   else
!     check_last_block = TEST_BIT (blocks, EXIT_BLOCK_PTR->prev_bb->index);
! 
!   /* In the last basic block, before epilogue generation, there will be
!      a fallthru edge to EXIT.  Special care is required if the last insn
!      of the last basic block is a call because make_edge folds duplicate
!      edges, which would result in the fallthru edge also being marked
!      fake, which would result in the fallthru edge being removed by
!      remove_fake_edges, which would result in an invalid CFG.
! 
!      Moreover, we can't elide the outgoing fake edge, since the block
!      profiler needs to take this into account in order to solve the minimal
!      spanning tree in the case that the call doesn't return.
! 
!      Handle this by adding a dummy instruction in a new last basic block.  */
!   if (check_last_block)
!     {
!       basic_block bb = EXIT_BLOCK_PTR->prev_bb;
!       rtx insn = BB_END (bb);
! 
!       /* Back up past insns that must be kept in the same block as a call.  */
!       while (insn != BB_HEAD (bb)
! 	     && keep_with_call_p (insn))
! 	insn = PREV_INSN (insn);
! 
!       if (need_fake_edge_p (insn))
! 	{
! 	  edge e;
! 
! 	  for (e = bb->succ; e; e = e->succ_next)
! 	    if (e->dest == EXIT_BLOCK_PTR)
! 	      {
! 		insert_insn_on_edge (gen_rtx_USE (VOIDmode, const0_rtx), e);
! 		commit_edge_insertions ();
! 		break;
! 	      }
! 	}
!     }
! 
!   /* Now add fake edges to the function exit for any non constant
!      calls since there is no way that we can determine if they will
!      return or not...  */
! 
!   for (i = 0; i < last_bb; i++)
!     {
!       basic_block bb = BASIC_BLOCK (i);
!       rtx libcall_end = NULL_RTX;
!       rtx insn;
!       rtx prev_insn;
! 
!       if (!bb)
! 	continue;
! 
!       if (blocks && !TEST_BIT (blocks, i))
! 	continue;
! 
!       for (insn = BB_END (bb); ; insn = prev_insn)
! 	{
! 	  prev_insn = PREV_INSN (insn);
! 	  if (need_fake_edge_p (insn))
! 	    {
! 	      edge e;
! 	      rtx split_at_insn = insn;
! 
! 	      /* Don't split libcalls.  */
! 	      if (libcall_end)
! 		split_at_insn = libcall_end;
! 
! 	      /* Don't split the block between a call and an insn that should
! 	         remain in the same block as the call.  */
! 	      else if (GET_CODE (insn) == CALL_INSN)
! 		while (split_at_insn != BB_END (bb)
! 		       && keep_with_call_p (NEXT_INSN (split_at_insn)))
! 		  split_at_insn = NEXT_INSN (split_at_insn);
! 
! 	      /* The handling above of the final block before the epilogue
! 	         should be enough to verify that there is no edge to the exit
! 		 block in CFG already.  Calling make_edge in such case would
! 		 cause us to mark that edge as fake and remove it later.  */
! 
! #ifdef ENABLE_CHECKING
! 	      if (split_at_insn == BB_END (bb))
! 		for (e = bb->succ; e; e = e->succ_next)
! 		  if (e->dest == EXIT_BLOCK_PTR)
! 		    abort ();
! #endif
! 
! 	      /* Note that the following may create a new basic block
! 		 and renumber the existing basic blocks.  */
! 	      if (split_at_insn != BB_END (bb))
! 		{
! 		  e = split_block (bb, split_at_insn);
! 		  if (e)
! 		    blocks_split++;
! 		}
! 
! 	      make_edge (bb, EXIT_BLOCK_PTR, EDGE_FAKE);
! 	    }
! 
! 	  /* Watch out for REG_LIBCALL/REG_RETVAL notes so that we know
! 	     whether we are currently in a libcall or not.  Remember that
! 	     we are scanning backwards!  */
! 	  if (find_reg_note (insn, REG_RETVAL, NULL_RTX))
! 	    libcall_end = insn;
! 	  if (find_reg_note (insn, REG_LIBCALL, NULL_RTX))
! 	    libcall_end = NULL_RTX;
! 
! 	  if (insn == BB_HEAD (bb))
! 	    break;
! 	}
      }
- 
-   if (blocks_split)
-     verify_flow_info ();
- 
-   return blocks_split;
  }
  
  /* Find unreachable blocks.  An unreachable block will have 0 in
--- 259,274 ----
  
        /* If the BB ends with an invertible condjump all (2) edges are
  	 CAN_FALLTHRU edges.  */
!       if (EDGE_COUNT (bb->succs) != 2)
  	continue;
        if (!any_condjump_p (BB_END (bb)))
  	continue;
        if (!invert_jump (BB_END (bb), JUMP_LABEL (BB_END (bb)), 0))
  	continue;
        invert_jump (BB_END (bb), JUMP_LABEL (BB_END (bb)), 0);
!       EDGE_SUCC (bb, 0)->flags |= EDGE_CAN_FALLTHRU;
!       EDGE_SUCC (bb, 1)->flags |= EDGE_CAN_FALLTHRU;
      }
  }
  
  /* Find unreachable blocks.  An unreachable block will have 0 in
*************** void
*** 413,418 ****
--- 279,285 ----
  find_unreachable_blocks (void)
  {
    edge e;
+   edge_iterator ei;
    basic_block *tos, *worklist, bb;
  
    tos = worklist = xmalloc (sizeof (basic_block) * n_basic_blocks);
*************** find_unreachable_blocks (void)
*** 426,432 ****
       be only one.  It isn't inconceivable that we might one day directly
       support Fortran alternate entry points.  */
  
!   for (e = ENTRY_BLOCK_PTR->succ; e; e = e->succ_next)
      {
        *tos++ = e->dest;
  
--- 293,299 ----
       be only one.  It isn't inconceivable that we might one day directly
       support Fortran alternate entry points.  */
  
!   FOR_EACH_EDGE (e, ei, ENTRY_BLOCK_PTR->succs)
      {
        *tos++ = e->dest;
  
*************** find_unreachable_blocks (void)
*** 440,451 ****
      {
        basic_block b = *--tos;
  
!       for (e = b->succ; e; e = e->succ_next)
! 	if (!(e->dest->flags & BB_REACHABLE))
! 	  {
! 	    *tos++ = e->dest;
! 	    e->dest->flags |= BB_REACHABLE;
! 	  }
      }
  
    free (worklist);
--- 307,322 ----
      {
        basic_block b = *--tos;
  
!       FOR_EACH_EDGE (e, ei, b->succs)
! 	{
! 	  basic_block dest = e->dest;
! 
! 	  if (!(dest->flags & BB_REACHABLE))
! 	    {
! 	      *tos++ = dest;
! 	      dest->flags |= BB_REACHABLE;
! 	    }
! 	}
      }
  
    free (worklist);
*************** create_edge_list (void)
*** 472,477 ****
--- 343,349 ----
    int num_edges;
    int block_count;
    basic_block bb;
+   edge_iterator ei;
  
    block_count = n_basic_blocks + 2;   /* Include the entry and exit blocks.  */
  
*************** create_edge_list (void)
*** 481,488 ****
       edges on each basic block.  */
    FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR, next_bb)
      {
!       for (e = bb->succ; e; e = e->succ_next)
! 	num_edges++;
      }
  
    elist = xmalloc (sizeof (struct edge_list));
--- 353,359 ----
       edges on each basic block.  */
    FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR, next_bb)
      {
!       num_edges += EDGE_COUNT (bb->succs);
      }
  
    elist = xmalloc (sizeof (struct edge_list));
*************** create_edge_list (void)
*** 494,500 ****
  
    /* Follow successors of blocks, and register these edges.  */
    FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR, next_bb)
!     for (e = bb->succ; e; e = e->succ_next)
        elist->index_to_edge[num_edges++] = e;
  
    return elist;
--- 365,371 ----
  
    /* Follow successors of blocks, and register these edges.  */
    FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR, next_bb)
!     FOR_EACH_EDGE (e, ei, bb->succs)
        elist->index_to_edge[num_edges++] = e;
  
    return elist;
*************** verify_edge_list (FILE *f, struct edge_l
*** 547,556 ****
    int pred, succ, index;
    edge e;
    basic_block bb, p, s;
  
    FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR, next_bb)
      {
!       for (e = bb->succ; e; e = e->succ_next)
  	{
  	  pred = e->src->index;
  	  succ = e->dest->index;
--- 418,428 ----
    int pred, succ, index;
    edge e;
    basic_block bb, p, s;
+   edge_iterator ei;
  
    FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR, next_bb)
      {
!       FOR_EACH_EDGE (e, ei, bb->succs)
  	{
  	  pred = e->src->index;
  	  succ = e->dest->index;
*************** verify_edge_list (FILE *f, struct edge_l
*** 578,591 ****
        {
  	int found_edge = 0;
  
! 	for (e = p->succ; e; e = e->succ_next)
  	  if (e->dest == s)
  	    {
  	      found_edge = 1;
  	      break;
  	    }
  
! 	for (e = s->pred; e; e = e->pred_next)
  	  if (e->src == p)
  	    {
  	      found_edge = 1;
--- 450,463 ----
        {
  	int found_edge = 0;
  
! 	FOR_EACH_EDGE (e, ei, p->succs)
  	  if (e->dest == s)
  	    {
  	      found_edge = 1;
  	      break;
  	    }
  
! 	FOR_EACH_EDGE (e, ei, s->preds)
  	  if (e->src == p)
  	    {
  	      found_edge = 1;
*************** verify_edge_list (FILE *f, struct edge_l
*** 603,608 ****
--- 475,505 ----
        }
  }
  
+ /* Given PRED and SUCC blocks, return the edge which connects the blocks.
+    If no such edge exists, return NULL.  */
+ 
+ edge
+ find_edge (basic_block pred, basic_block succ)
+ {
+   edge e;
+   edge_iterator ei;
+ 
+   if (EDGE_COUNT (pred->succs) <= EDGE_COUNT (succ->preds))
+     {
+       FOR_EACH_EDGE (e, ei, pred->succs)
+ 	if (e->dest == succ)
+ 	  return e;
+     }
+   else
+     {
+       FOR_EACH_EDGE (e, ei, succ->preds)
+ 	if (e->src == pred)
+ 	  return e;
+     }
+ 
+   return NULL;
+ }
+ 
  /* This routine will determine what, if any, edge there is between
     a specified predecessor and successor.  */
  
*************** flow_edge_list_print (const char *str, c
*** 653,674 ****
  }
  
  
! /* This routine will remove any fake successor edges for a basic block.
!    When the edge is removed, it is also removed from whatever predecessor
     list it is in.  */
  
  static void
! remove_fake_successors (basic_block bb)
  {
    edge e;
  
!   for (e = bb->succ; e;)
      {
!       edge tmp = e;
! 
!       e = e->succ_next;
!       if ((tmp->flags & EDGE_FAKE) == EDGE_FAKE)
! 	remove_edge (tmp);
      }
  }
  
--- 550,571 ----
  }
  
  
! /* This routine will remove any fake predecessor edges for a basic block.
!    When the edge is removed, it is also removed from whatever successor
     list it is in.  */
  
  static void
! remove_fake_predecessors (basic_block bb)
  {
    edge e;
+   edge_iterator ei;
  
!   for (ei = ei_start (bb->preds); (e = ei_safe_edge (ei)); )
      {
!       if ((e->flags & EDGE_FAKE) == EDGE_FAKE)
! 	remove_edge (e);
!       else
! 	ei_next (&ei);
      }
  }
  
*************** remove_fake_edges (void)
*** 681,690 ****
  {
    basic_block bb;
  
!   FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR, next_bb)
!     remove_fake_successors (bb);
  }
  
  /* This function will add a fake edge between any block which has no
     successors, and the exit block. Some data flow equations require these
     edges to exist.  */
--- 578,596 ----
  {
    basic_block bb;
  
!   FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR->next_bb, NULL, next_bb)
!     remove_fake_predecessors (bb);
! }
! 
! /* This routine will remove all fake edges to the EXIT_BLOCK.  */
! 
! void
! remove_fake_exit_edges (void)
! {
!   remove_fake_predecessors (EXIT_BLOCK_PTR);
  }
  
+ 
  /* This function will add a fake edge between any block which has no
     successors, and the exit block. Some data flow equations require these
     edges to exist.  */
*************** add_noreturn_fake_exit_edges (void)
*** 695,701 ****
    basic_block bb;
  
    FOR_EACH_BB (bb)
!     if (bb->succ == NULL)
        make_single_succ_edge (bb, EXIT_BLOCK_PTR, EDGE_FAKE);
  }
  
--- 601,607 ----
    basic_block bb;
  
    FOR_EACH_BB (bb)
!     if (EDGE_COUNT (bb->succs) == 0)
        make_single_succ_edge (bb, EXIT_BLOCK_PTR, EDGE_FAKE);
  }
  
*************** add_noreturn_fake_exit_edges (void)
*** 713,719 ****
  void
  connect_infinite_loops_to_exit (void)
  {
!   basic_block unvisited_block;
    struct depth_first_search_dsS dfs_ds;
  
    /* Perform depth-first search in the reverse graph to find nodes
--- 619,625 ----
  void
  connect_infinite_loops_to_exit (void)
  {
!   basic_block unvisited_block = EXIT_BLOCK_PTR;
    struct depth_first_search_dsS dfs_ds;
  
    /* Perform depth-first search in the reverse graph to find nodes
*************** connect_infinite_loops_to_exit (void)
*** 724,730 ****
    /* Repeatedly add fake edges, updating the unreachable nodes.  */
    while (1)
      {
!       unvisited_block = flow_dfs_compute_reverse_execute (&dfs_ds);
        if (!unvisited_block)
  	break;
  
--- 630,637 ----
    /* Repeatedly add fake edges, updating the unreachable nodes.  */
    while (1)
      {
!       unvisited_block = flow_dfs_compute_reverse_execute (&dfs_ds,
! 							  unvisited_block);
        if (!unvisited_block)
  	break;
  
*************** connect_infinite_loops_to_exit (void)
*** 741,753 ****
  void
  flow_reverse_top_sort_order_compute (int *rts_order)
  {
!   edge *stack;
    int sp;
    int postnum = 0;
    sbitmap visited;
  
    /* Allocate stack for back-tracking up CFG.  */
!   stack = xmalloc ((n_basic_blocks + 1) * sizeof (edge));
    sp = 0;
  
    /* Allocate bitmap to track nodes that have been visited.  */
--- 648,660 ----
  void
  flow_reverse_top_sort_order_compute (int *rts_order)
  {
!   edge_iterator *stack;
    int sp;
    int postnum = 0;
    sbitmap visited;
  
    /* Allocate stack for back-tracking up CFG.  */
!   stack = xmalloc ((n_basic_blocks + 1) * sizeof (edge_iterator));
    sp = 0;
  
    /* Allocate bitmap to track nodes that have been visited.  */
*************** flow_reverse_top_sort_order_compute (int
*** 757,774 ****
    sbitmap_zero (visited);
  
    /* Push the first edge on to the stack.  */
!   stack[sp++] = ENTRY_BLOCK_PTR->succ;
  
    while (sp)
      {
!       edge e;
        basic_block src;
        basic_block dest;
  
        /* Look at the edge on the top of the stack.  */
!       e = stack[sp - 1];
!       src = e->src;
!       dest = e->dest;
  
        /* Check if the edge destination has been visited yet.  */
        if (dest != EXIT_BLOCK_PTR && ! TEST_BIT (visited, dest->index))
--- 664,681 ----
    sbitmap_zero (visited);
  
    /* Push the first edge on to the stack.  */
!   stack[sp++] = ei_start (ENTRY_BLOCK_PTR->succs);
  
    while (sp)
      {
!       edge_iterator ei;
        basic_block src;
        basic_block dest;
  
        /* Look at the edge on the top of the stack.  */
!       ei = stack[sp - 1];
!       src = ei_edge (ei)->src;
!       dest = ei_edge (ei)->dest;
  
        /* Check if the edge destination has been visited yet.  */
        if (dest != EXIT_BLOCK_PTR && ! TEST_BIT (visited, dest->index))
*************** flow_reverse_top_sort_order_compute (int
*** 776,795 ****
  	  /* Mark that we have visited the destination.  */
  	  SET_BIT (visited, dest->index);
  
! 	  if (dest->succ)
  	    /* Since the DEST node has been visited for the first
  	       time, check its successors.  */
! 	    stack[sp++] = dest->succ;
  	  else
  	    rts_order[postnum++] = dest->index;
  	}
        else
  	{
! 	  if (! e->succ_next && src != ENTRY_BLOCK_PTR)
  	   rts_order[postnum++] = src->index;
  
! 	  if (e->succ_next)
! 	    stack[sp - 1] = e->succ_next;
  	  else
  	    sp--;
  	}
--- 683,702 ----
  	  /* Mark that we have visited the destination.  */
  	  SET_BIT (visited, dest->index);
  
! 	  if (EDGE_COUNT (dest->succs) > 0)
  	    /* Since the DEST node has been visited for the first
  	       time, check its successors.  */
! 	    stack[sp++] = ei_start (dest->succs);
  	  else
  	    rts_order[postnum++] = dest->index;
  	}
        else
  	{
! 	  if (ei_one_before_end_p (ei) && src != ENTRY_BLOCK_PTR)
  	   rts_order[postnum++] = src->index;
  
! 	  if (!ei_one_before_end_p (ei))
! 	    ei_next (&stack[sp - 1]);
  	  else
  	    sp--;
  	}
*************** flow_reverse_top_sort_order_compute (int
*** 809,822 ****
  int
  flow_depth_first_order_compute (int *dfs_order, int *rc_order)
  {
!   edge *stack;
    int sp;
    int dfsnum = 0;
    int rcnum = n_basic_blocks - 1;
    sbitmap visited;
  
    /* Allocate stack for back-tracking up CFG.  */
!   stack = xmalloc ((n_basic_blocks + 1) * sizeof (edge));
    sp = 0;
  
    /* Allocate bitmap to track nodes that have been visited.  */
--- 716,729 ----
  int
  flow_depth_first_order_compute (int *dfs_order, int *rc_order)
  {
!   edge_iterator *stack;
    int sp;
    int dfsnum = 0;
    int rcnum = n_basic_blocks - 1;
    sbitmap visited;
  
    /* Allocate stack for back-tracking up CFG.  */
!   stack = xmalloc ((n_basic_blocks + 1) * sizeof (edge_iterator));
    sp = 0;
  
    /* Allocate bitmap to track nodes that have been visited.  */
*************** flow_depth_first_order_compute (int *dfs
*** 826,843 ****
    sbitmap_zero (visited);
  
    /* Push the first edge on to the stack.  */
!   stack[sp++] = ENTRY_BLOCK_PTR->succ;
  
    while (sp)
      {
!       edge e;
        basic_block src;
        basic_block dest;
  
        /* Look at the edge on the top of the stack.  */
!       e = stack[sp - 1];
!       src = e->src;
!       dest = e->dest;
  
        /* Check if the edge destination has been visited yet.  */
        if (dest != EXIT_BLOCK_PTR && ! TEST_BIT (visited, dest->index))
--- 733,750 ----
    sbitmap_zero (visited);
  
    /* Push the first edge on to the stack.  */
!   stack[sp++] = ei_start (ENTRY_BLOCK_PTR->succs);
  
    while (sp)
      {
!       edge_iterator ei;
        basic_block src;
        basic_block dest;
  
        /* Look at the edge on the top of the stack.  */
!       ei = stack[sp - 1];
!       src = ei_edge (ei)->src;
!       dest = ei_edge (ei)->dest;
  
        /* Check if the edge destination has been visited yet.  */
        if (dest != EXIT_BLOCK_PTR && ! TEST_BIT (visited, dest->index))
*************** flow_depth_first_order_compute (int *dfs
*** 850,859 ****
  
  	  dfsnum++;
  
! 	  if (dest->succ)
  	    /* Since the DEST node has been visited for the first
  	       time, check its successors.  */
! 	    stack[sp++] = dest->succ;
  	  else if (rc_order)
  	    /* There are no successors for the DEST node so assign
  	       its reverse completion number.  */
--- 757,766 ----
  
  	  dfsnum++;
  
! 	  if (EDGE_COUNT (dest->succs) > 0)
  	    /* Since the DEST node has been visited for the first
  	       time, check its successors.  */
! 	    stack[sp++] = ei_start (dest->succs);
  	  else if (rc_order)
  	    /* There are no successors for the DEST node so assign
  	       its reverse completion number.  */
*************** flow_depth_first_order_compute (int *dfs
*** 861,874 ****
  	}
        else
  	{
! 	  if (! e->succ_next && src != ENTRY_BLOCK_PTR
  	      && rc_order)
  	    /* There are no more successors for the SRC node
  	       so assign its reverse completion number.  */
  	    rc_order[rcnum--] = src->index;
  
! 	  if (e->succ_next)
! 	    stack[sp - 1] = e->succ_next;
  	  else
  	    sp--;
  	}
--- 768,781 ----
  	}
        else
  	{
! 	  if (ei_one_before_end_p (ei) && src != ENTRY_BLOCK_PTR
  	      && rc_order)
  	    /* There are no more successors for the SRC node
  	       so assign its reverse completion number.  */
  	    rc_order[rcnum--] = src->index;
  
! 	  if (!ei_one_before_end_p (ei))
! 	    ei_next (&stack[sp - 1]);
  	  else
  	    sp--;
  	}
*************** flow_depth_first_order_compute (int *dfs
*** 877,1018 ****
    free (stack);
    sbitmap_free (visited);
  
!   /* The number of nodes visited should not be greater than
!      n_basic_blocks.  */
!   if (dfsnum > n_basic_blocks)
!     abort ();
! 
!   /* There are some nodes left in the CFG that are unreachable.  */
!   if (dfsnum < n_basic_blocks)
!     abort ();
  
    return dfsnum;
  }
  
- struct dfst_node
- {
-     unsigned nnodes;
-     struct dfst_node **node;
-     struct dfst_node *up;
- };
- 
- /* Compute a preorder transversal ordering such that a sub-tree which
-    is the source of a cross edge appears before the sub-tree which is
-    the destination of the cross edge.  This allows for easy detection
-    of all the entry blocks for a loop.
- 
-    The ordering is compute by:
- 
-      1) Generating a depth first spanning tree.
- 
-      2) Walking the resulting tree from right to left.  */
- 
- void
- flow_preorder_transversal_compute (int *pot_order)
- {
-   edge e;
-   edge *stack;
-   int i;
-   int max_successors;
-   int sp;
-   sbitmap visited;
-   struct dfst_node *node;
-   struct dfst_node *dfst;
-   basic_block bb;
- 
-   /* Allocate stack for back-tracking up CFG.  */
-   stack = xmalloc ((n_basic_blocks + 1) * sizeof (edge));
-   sp = 0;
- 
-   /* Allocate the tree.  */
-   dfst = xcalloc (last_basic_block, sizeof (struct dfst_node));
- 
-   FOR_EACH_BB (bb)
-     {
-       max_successors = 0;
-       for (e = bb->succ; e; e = e->succ_next)
- 	max_successors++;
- 
-       dfst[bb->index].node
- 	= (max_successors
- 	   ? xcalloc (max_successors, sizeof (struct dfst_node *)) : NULL);
-     }
- 
-   /* Allocate bitmap to track nodes that have been visited.  */
-   visited = sbitmap_alloc (last_basic_block);
- 
-   /* None of the nodes in the CFG have been visited yet.  */
-   sbitmap_zero (visited);
- 
-   /* Push the first edge on to the stack.  */
-   stack[sp++] = ENTRY_BLOCK_PTR->succ;
- 
-   while (sp)
-     {
-       basic_block src;
-       basic_block dest;
- 
-       /* Look at the edge on the top of the stack.  */
-       e = stack[sp - 1];
-       src = e->src;
-       dest = e->dest;
- 
-       /* Check if the edge destination has been visited yet.  */
-       if (dest != EXIT_BLOCK_PTR && ! TEST_BIT (visited, dest->index))
- 	{
- 	  /* Mark that we have visited the destination.  */
- 	  SET_BIT (visited, dest->index);
- 
- 	  /* Add the destination to the preorder tree.  */
- 	  if (src != ENTRY_BLOCK_PTR)
- 	    {
- 	      dfst[src->index].node[dfst[src->index].nnodes++]
- 		= &dfst[dest->index];
- 	      dfst[dest->index].up = &dfst[src->index];
- 	    }
- 
- 	  if (dest->succ)
- 	    /* Since the DEST node has been visited for the first
- 	       time, check its successors.  */
- 	    stack[sp++] = dest->succ;
- 	}
- 
-       else if (e->succ_next)
- 	stack[sp - 1] = e->succ_next;
-       else
- 	sp--;
-     }
- 
-   free (stack);
-   sbitmap_free (visited);
- 
-   /* Record the preorder transversal order by
-      walking the tree from right to left.  */
- 
-   i = 0;
-   node = &dfst[ENTRY_BLOCK_PTR->next_bb->index];
-   pot_order[i++] = 0;
- 
-   while (node)
-     {
-       if (node->nnodes)
- 	{
- 	  node = node->node[--node->nnodes];
- 	  pot_order[i++] = node - dfst;
- 	}
-       else
- 	node = node->up;
-     }
- 
-   /* Free the tree.  */
- 
-   for (i = 0; i < last_basic_block; i++)
-     if (dfst[i].node)
-       free (dfst[i].node);
- 
-   free (dfst);
- }
- 
  /* Compute the depth first search order on the _reverse_ graph and
     store in the array DFS_ORDER, marking the nodes visited in VISITED.
     Returns the number of nodes visited.
--- 784,795 ----
    free (stack);
    sbitmap_free (visited);
  
!   /* The number of nodes visited should be the number of blocks.  */
!   gcc_assert (dfsnum == n_basic_blocks);
  
    return dfsnum;
  }
  
  /* Compute the depth first search order on the _reverse_ graph and
     store in the array DFS_ORDER, marking the nodes visited in VISITED.
     Returns the number of nodes visited.
*************** flow_dfs_compute_reverse_add_bb (depth_f
*** 1077,1100 ****
     available.  */
  
  static basic_block
! flow_dfs_compute_reverse_execute (depth_first_search_ds data)
  {
    basic_block bb;
    edge e;
  
    while (data->sp > 0)
      {
        bb = data->stack[--data->sp];
  
        /* Perform depth-first search on adjacent vertices.  */
!       for (e = bb->pred; e; e = e->pred_next)
  	if (!TEST_BIT (data->visited_blocks,
  		       e->src->index - (INVALID_BLOCK + 1)))
  	  flow_dfs_compute_reverse_add_bb (data, e->src);
      }
  
    /* Determine if there are unvisited basic blocks.  */
!   FOR_BB_BETWEEN (bb, EXIT_BLOCK_PTR, NULL, prev_bb)
      if (!TEST_BIT (data->visited_blocks, bb->index - (INVALID_BLOCK + 1)))
        return bb;
  
--- 854,879 ----
     available.  */
  
  static basic_block
! flow_dfs_compute_reverse_execute (depth_first_search_ds data,
! 				  basic_block last_unvisited)
  {
    basic_block bb;
    edge e;
+   edge_iterator ei;
  
    while (data->sp > 0)
      {
        bb = data->stack[--data->sp];
  
        /* Perform depth-first search on adjacent vertices.  */
!       FOR_EACH_EDGE (e, ei, bb->preds)
  	if (!TEST_BIT (data->visited_blocks,
  		       e->src->index - (INVALID_BLOCK + 1)))
  	  flow_dfs_compute_reverse_add_bb (data, e->src);
      }
  
    /* Determine if there are unvisited basic blocks.  */
!   FOR_BB_BETWEEN (bb, last_unvisited, NULL, prev_bb)
      if (!TEST_BIT (data->visited_blocks, bb->index - (INVALID_BLOCK + 1)))
        return bb;
  
*************** dfs_enumerate_from (basic_block bb, int 
*** 1128,1152 ****
    while (sp)
      {
        edge e;
        lbb = st[--sp];
        if (reverse)
          {
!           for (e = lbb->pred; e; e = e->pred_next)
  	    if (!(e->src->flags & BB_VISITED) && predicate (e->src, data))
  	      {
! 	        if (tv == rslt_max)
! 	          abort ();
  	        rslt[tv++] = st[sp++] = e->src;
  	        e->src->flags |= BB_VISITED;
  	      }
          }
        else
          {
!           for (e = lbb->succ; e; e = e->succ_next)
  	    if (!(e->dest->flags & BB_VISITED) && predicate (e->dest, data))
  	      {
! 	        if (tv == rslt_max)
! 	          abort ();
  	        rslt[tv++] = st[sp++] = e->dest;
  	        e->dest->flags |= BB_VISITED;
  	      }
--- 907,930 ----
    while (sp)
      {
        edge e;
+       edge_iterator ei;
        lbb = st[--sp];
        if (reverse)
          {
! 	  FOR_EACH_EDGE (e, ei, lbb->preds)
  	    if (!(e->src->flags & BB_VISITED) && predicate (e->src, data))
  	      {
! 	        gcc_assert (tv != rslt_max);
  	        rslt[tv++] = st[sp++] = e->src;
  	        e->src->flags |= BB_VISITED;
  	      }
          }
        else
          {
! 	  FOR_EACH_EDGE (e, ei, lbb->succs)
  	    if (!(e->dest->flags & BB_VISITED) && predicate (e->dest, data))
  	      {
! 	        gcc_assert (tv != rslt_max);
  	        rslt[tv++] = st[sp++] = e->dest;
  	        e->dest->flags |= BB_VISITED;
  	      }
*************** dfs_enumerate_from (basic_block bb, int 
*** 1157,1159 ****
--- 935,1003 ----
      rslt[sp]->flags &= ~BB_VISITED;
    return tv;
  }
+ 
+ 
+ /* Compute dominance frontiers, ala Harvey, Ferrante, et al.
+    
+    This algorithm can be found in Timothy Harvey's PhD thesis, at
+    http://www.cs.rice.edu/~harv/dissertation.pdf in the section on iterative
+    dominance algorithms.
+ 
+    First, we identify each join point, j (any node with more than one
+    incoming edge is a join point). 
+ 
+    We then examine each predecessor, p, of j and walk up the dominator tree
+    starting at p. 
+    
+    We stop the walk when we reach j's immediate dominator - j is in the
+    dominance frontier of each of  the nodes in the walk, except for j's
+    immediate dominator. Intuitively, all of the rest of j's dominators are
+    shared by j's predecessors as well.
+    Since they dominate j, they will not have j in their dominance frontiers.
+ 
+    The number of nodes touched by this algorithm is equal to the size 
+    of the dominance frontiers, no more, no less.
+ */
+ 
+ 
+ static void
+ compute_dominance_frontiers_1 (bitmap *frontiers)
+ {
+   edge p;
+   edge_iterator ei;
+   basic_block b;
+   FOR_EACH_BB (b)
+     {
+       if (EDGE_COUNT (b->preds) >= 2)
+ 	{
+ 	  FOR_EACH_EDGE (p, ei, b->preds)
+ 	    {
+ 	      basic_block runner = p->src;
+ 	      basic_block domsb;
+ 	      if (runner == ENTRY_BLOCK_PTR)
+ 		continue;
+ 	      
+ 	      domsb = get_immediate_dominator (CDI_DOMINATORS, b);
+ 	      while (runner != domsb)
+ 		{
+ 		  bitmap_set_bit (frontiers[runner->index], 
+ 				  b->index);
+ 		  runner = get_immediate_dominator (CDI_DOMINATORS,
+ 						    runner);
+ 		}
+ 	    }
+ 	}
+     }
+ }	      
+   
+ 
+ void
+ compute_dominance_frontiers (bitmap *frontiers)
+ {
+   timevar_push (TV_DOM_FRONTIERS);
+ 
+   compute_dominance_frontiers_1 (frontiers);
+ 
+   timevar_pop (TV_DOM_FRONTIERS);
+ }
+ 
diff -Nrcpad gcc-3.4.3/gcc/cfgbuild.c gcc-4.0.0/gcc/cfgbuild.c
*** gcc-3.4.3/gcc/cfgbuild.c	Thu Dec 11 00:20:36 2003
--- gcc-4.0.0/gcc/cfgbuild.c	Tue Feb 15 07:18:23 2005
***************
*** 1,6 ****
  /* Control flow graph building code for GNU compiler.
     Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
!    1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
--- 1,6 ----
  /* Control flow graph building code for GNU compiler.
     Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
!    1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
*************** Software Foundation, 59 Temple Place - S
*** 50,59 ****
  
  static int count_basic_blocks (rtx);
  static void find_basic_blocks_1 (rtx);
! static rtx find_label_refs (rtx, rtx);
! static void make_edges (rtx, basic_block, basic_block, int);
  static void make_label_edge (sbitmap *, basic_block, rtx, int);
- static void make_eh_edge (sbitmap *, basic_block, rtx);
  static void find_bb_boundaries (basic_block);
  static void compute_outgoing_frequencies (basic_block);
  
--- 50,57 ----
  
  static int count_basic_blocks (rtx);
  static void find_basic_blocks_1 (rtx);
! static void make_edges (basic_block, basic_block, int);
  static void make_label_edge (sbitmap *, basic_block, rtx, int);
  static void find_bb_boundaries (basic_block);
  static void compute_outgoing_frequencies (basic_block);
  
*************** inside_basic_block_p (rtx insn)
*** 68,74 ****
      case CODE_LABEL:
        /* Avoid creating of basic block for jumptables.  */
        return (NEXT_INSN (insn) == 0
! 	      || GET_CODE (NEXT_INSN (insn)) != JUMP_INSN
  	      || (GET_CODE (PATTERN (NEXT_INSN (insn))) != ADDR_VEC
  		  && GET_CODE (PATTERN (NEXT_INSN (insn))) != ADDR_DIFF_VEC));
  
--- 66,72 ----
      case CODE_LABEL:
        /* Avoid creating of basic block for jumptables.  */
        return (NEXT_INSN (insn) == 0
! 	      || !JUMP_P (NEXT_INSN (insn))
  	      || (GET_CODE (PATTERN (NEXT_INSN (insn))) != ADDR_VEC
  		  && GET_CODE (PATTERN (NEXT_INSN (insn))) != ADDR_DIFF_VEC));
  
*************** inside_basic_block_p (rtx insn)
*** 85,91 ****
        return false;
  
      default:
!       abort ();
      }
  }
  
--- 83,89 ----
        return false;
  
      default:
!       gcc_unreachable ();
      }
  }
  
*************** control_flow_insn_p (rtx insn)
*** 109,114 ****
--- 107,118 ----
  	      && GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC);
  
      case CALL_INSN:
+       /* Noreturn and sibling call instructions terminate the basic blocks
+ 	 (but only if they happen unconditionally).  */
+       if ((SIBLING_CALL_P (insn)
+ 	   || find_reg_note (insn, REG_NORETURN, 0))
+ 	  && GET_CODE (PATTERN (insn)) != COND_EXEC)
+ 	return true;
        /* Call insn may return to the nonlocal goto handler.  */
        return ((nonlocal_goto_handler_labels
  	       && (0 == (note = find_reg_note (insn, REG_EH_REGION,
*************** control_flow_insn_p (rtx insn)
*** 127,133 ****
        return false;
  
      default:
!       abort ();
      }
  }
  
--- 131,137 ----
        return false;
  
      default:
!       gcc_unreachable ();
      }
  }
  
*************** count_basic_blocks (rtx f)
*** 144,150 ****
      {
        /* Code labels and barriers causes current basic block to be
           terminated at previous real insn.  */
!       if ((GET_CODE (insn) == CODE_LABEL || GET_CODE (insn) == BARRIER)
  	  && saw_insn)
  	count++, saw_insn = false;
  
--- 148,154 ----
      {
        /* Code labels and barriers causes current basic block to be
           terminated at previous real insn.  */
!       if ((LABEL_P (insn) || BARRIER_P (insn))
  	  && saw_insn)
  	count++, saw_insn = false;
  
*************** count_basic_blocks (rtx f)
*** 170,220 ****
  
    return count;
  }
- 
- /* Scan a list of insns for labels referred to other than by jumps.
-    This is used to scan the alternatives of a call placeholder.  */
- 
- static rtx
- find_label_refs (rtx f, rtx lvl)
- {
-   rtx insn;
- 
-   for (insn = f; insn; insn = NEXT_INSN (insn))
-     if (INSN_P (insn) && GET_CODE (insn) != JUMP_INSN)
-       {
- 	rtx note;
- 
- 	/* Make a list of all labels referred to other than by jumps
- 	   (which just don't have the REG_LABEL notes).
- 
- 	   Make a special exception for labels followed by an ADDR*VEC,
- 	   as this would be a part of the tablejump setup code.
- 
- 	   Make a special exception to registers loaded with label
- 	   values just before jump insns that use them.  */
- 
- 	for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
- 	  if (REG_NOTE_KIND (note) == REG_LABEL)
- 	    {
- 	      rtx lab = XEXP (note, 0), next;
- 
- 	      if ((next = next_nonnote_insn (lab)) != NULL
- 		  && GET_CODE (next) == JUMP_INSN
- 		  && (GET_CODE (PATTERN (next)) == ADDR_VEC
- 		      || GET_CODE (PATTERN (next)) == ADDR_DIFF_VEC))
- 		;
- 	      else if (GET_CODE (lab) == NOTE)
- 		;
- 	      else if (GET_CODE (NEXT_INSN (insn)) == JUMP_INSN
- 		       && find_reg_note (NEXT_INSN (insn), REG_LABEL, lab))
- 		;
- 	      else
- 		lvl = alloc_EXPR_LIST (0, XEXP (note, 0), lvl);
- 	    }
-       }
- 
-   return lvl;
- }
  
  /* Create an edge between two basic blocks.  FLAGS are auxiliary information
     about the edge that is accumulated between calls.  */
--- 174,179 ----
*************** find_label_refs (rtx f, rtx lvl)
*** 224,231 ****
  static void
  make_label_edge (sbitmap *edge_cache, basic_block src, rtx label, int flags)
  {
!   if (GET_CODE (label) != CODE_LABEL)
!     abort ();
  
    /* If the label was never emitted, this insn is junk, but avoid a
       crash trying to refer to BLOCK_FOR_INSN (label).  This can happen
--- 183,189 ----
  static void
  make_label_edge (sbitmap *edge_cache, basic_block src, rtx label, int flags)
  {
!   gcc_assert (LABEL_P (label));
  
    /* If the label was never emitted, this insn is junk, but avoid a
       crash trying to refer to BLOCK_FOR_INSN (label).  This can happen
*************** make_label_edge (sbitmap *edge_cache, ba
*** 240,249 ****
  
  /* Create the edges generated by INSN in REGION.  */
  
! static void
! make_eh_edge (sbitmap *edge_cache, basic_block src, rtx insn)
  {
!   int is_call = GET_CODE (insn) == CALL_INSN ? EDGE_ABNORMAL_CALL : 0;
    rtx handlers, i;
  
    handlers = reachable_handlers (insn);
--- 198,207 ----
  
  /* Create the edges generated by INSN in REGION.  */
  
! void
! rtl_make_eh_edge (sbitmap *edge_cache, basic_block src, rtx insn)
  {
!   int is_call = CALL_P (insn) ? EDGE_ABNORMAL_CALL : 0;
    rtx handlers, i;
  
    handlers = reachable_handlers (insn);
*************** make_eh_edge (sbitmap *edge_cache, basic
*** 264,281 ****
     the list of exception regions active at the end of the basic block.  */
  
  static void
! make_edges (rtx label_value_list, basic_block min, basic_block max, int update_p)
  {
    basic_block bb;
    sbitmap *edge_cache = NULL;
  
-   /* Assume no computed jump; revise as we create edges.  */
-   current_function_has_computed_jump = 0;
- 
    /* Heavy use of computed goto in machine-generated code can lead to
       nearly fully-connected CFGs.  In that case we spend a significant
       amount of time searching the edge lists for duplicates.  */
!   if (forced_labels || label_value_list || cfun->max_jumptable_ents > 100)
      {
        edge_cache = sbitmap_vector_alloc (last_basic_block, last_basic_block);
        sbitmap_vector_zero (edge_cache, last_basic_block);
--- 222,236 ----
     the list of exception regions active at the end of the basic block.  */
  
  static void
! make_edges (basic_block min, basic_block max, int update_p)
  {
    basic_block bb;
    sbitmap *edge_cache = NULL;
  
    /* Heavy use of computed goto in machine-generated code can lead to
       nearly fully-connected CFGs.  In that case we spend a significant
       amount of time searching the edge lists for duplicates.  */
!   if (forced_labels || cfun->max_jumptable_ents > 100)
      {
        edge_cache = sbitmap_vector_alloc (last_basic_block, last_basic_block);
        sbitmap_vector_zero (edge_cache, last_basic_block);
*************** make_edges (rtx label_value_list, basic_
*** 284,291 ****
          FOR_BB_BETWEEN (bb, min, max->next_bb, next_bb)
  	  {
  	    edge e;
  
! 	    for (e = bb->succ; e ; e = e->succ_next)
  	      if (e->dest != EXIT_BLOCK_PTR)
  		SET_BIT (edge_cache[bb->index], e->dest->index);
  	  }
--- 239,247 ----
          FOR_BB_BETWEEN (bb, min, max->next_bb, next_bb)
  	  {
  	    edge e;
+ 	    edge_iterator ei;
  
! 	    FOR_EACH_EDGE (e, ei, bb->succs)
  	      if (e->dest != EXIT_BLOCK_PTR)
  		SET_BIT (edge_cache[bb->index], e->dest->index);
  	  }
*************** make_edges (rtx label_value_list, basic_
*** 301,309 ****
      {
        rtx insn, x;
        enum rtx_code code;
!       int force_fallthru = 0;
  
!       if (GET_CODE (BB_HEAD (bb)) == CODE_LABEL
  	  && LABEL_ALT_ENTRY_P (BB_HEAD (bb)))
  	cached_make_edge (NULL, ENTRY_BLOCK_PTR, bb, 0);
  
--- 257,265 ----
      {
        rtx insn, x;
        enum rtx_code code;
!       edge e;
  
!       if (LABEL_P (BB_HEAD (bb))
  	  && LABEL_ALT_ENTRY_P (BB_HEAD (bb)))
  	cached_make_edge (NULL, ENTRY_BLOCK_PTR, bb, 0);
  
*************** make_edges (rtx label_value_list, basic_
*** 320,326 ****
  
  	  /* Recognize exception handling placeholders.  */
  	  if (GET_CODE (PATTERN (insn)) == RESX)
! 	    make_eh_edge (edge_cache, bb, insn);
  
  	  /* Recognize a non-local goto as a branch outside the
  	     current function.  */
--- 276,282 ----
  
  	  /* Recognize exception handling placeholders.  */
  	  if (GET_CODE (PATTERN (insn)) == RESX)
! 	    rtl_make_eh_edge (edge_cache, bb, insn);
  
  	  /* Recognize a non-local goto as a branch outside the
  	     current function.  */
*************** make_edges (rtx label_value_list, basic_
*** 351,373 ****
  		  && GET_CODE (XEXP (SET_SRC (tmp), 2)) == LABEL_REF)
  		make_label_edge (edge_cache, bb,
  				 XEXP (XEXP (SET_SRC (tmp), 2), 0), 0);
- 
- #ifdef CASE_DROPS_THROUGH
- 	      /* Silly VAXen.  The ADDR_VEC is going to be in the way of
- 		 us naturally detecting fallthru into the next block.  */
- 	      force_fallthru = 1;
- #endif
  	    }
  
  	  /* If this is a computed jump, then mark it as reaching
! 	     everything on the label_value_list and forced_labels list.  */
  	  else if (computed_jump_p (insn))
  	    {
- 	      current_function_has_computed_jump = 1;
- 
- 	      for (x = label_value_list; x; x = XEXP (x, 1))
- 		make_label_edge (edge_cache, bb, XEXP (x, 0), EDGE_ABNORMAL);
- 
  	      for (x = forced_labels; x; x = XEXP (x, 1))
  		make_label_edge (edge_cache, bb, XEXP (x, 0), EDGE_ABNORMAL);
  	    }
--- 307,318 ----
  		  && GET_CODE (XEXP (SET_SRC (tmp), 2)) == LABEL_REF)
  		make_label_edge (edge_cache, bb,
  				 XEXP (XEXP (SET_SRC (tmp), 2), 0), 0);
  	    }
  
  	  /* If this is a computed jump, then mark it as reaching
! 	     everything on the forced_labels list.  */
  	  else if (computed_jump_p (insn))
  	    {
  	      for (x = forced_labels; x; x = XEXP (x, 1))
  		make_label_edge (edge_cache, bb, XEXP (x, 0), EDGE_ABNORMAL);
  	    }
*************** make_edges (rtx label_value_list, basic_
*** 379,386 ****
  	  /* Otherwise, we have a plain conditional or unconditional jump.  */
  	  else
  	    {
! 	      if (! JUMP_LABEL (insn))
! 		abort ();
  	      make_label_edge (edge_cache, bb, JUMP_LABEL (insn), 0);
  	    }
  	}
--- 324,330 ----
  	  /* Otherwise, we have a plain conditional or unconditional jump.  */
  	  else
  	    {
! 	      gcc_assert (JUMP_LABEL (insn));
  	      make_label_edge (edge_cache, bb, JUMP_LABEL (insn), 0);
  	    }
  	}
*************** make_edges (rtx label_value_list, basic_
*** 400,406 ****
        else if (code == CALL_INSN || flag_non_call_exceptions)
  	{
  	  /* Add any appropriate EH edges.  */
! 	  make_eh_edge (edge_cache, bb, insn);
  
  	  if (code == CALL_INSN && nonlocal_goto_handler_labels)
  	    {
--- 344,350 ----
        else if (code == CALL_INSN || flag_non_call_exceptions)
  	{
  	  /* Add any appropriate EH edges.  */
! 	  rtl_make_eh_edge (edge_cache, bb, insn);
  
  	  if (code == CALL_INSN && nonlocal_goto_handler_labels)
  	    {
*************** make_edges (rtx label_value_list, basic_
*** 424,439 ****
  
        /* Find out if we can drop through to the next block.  */
        insn = NEXT_INSN (insn);
        while (insn
! 	     && GET_CODE (insn) == NOTE
  	     && NOTE_LINE_NUMBER (insn) != NOTE_INSN_BASIC_BLOCK)
  	insn = NEXT_INSN (insn);
  
!       if (!insn || (bb->next_bb == EXIT_BLOCK_PTR && force_fallthru))
  	cached_make_edge (edge_cache, bb, EXIT_BLOCK_PTR, EDGE_FALLTHRU);
        else if (bb->next_bb != EXIT_BLOCK_PTR)
  	{
! 	  if (force_fallthru || insn == BB_HEAD (bb->next_bb))
  	    cached_make_edge (edge_cache, bb, bb->next_bb, EDGE_FALLTHRU);
  	}
      }
--- 368,387 ----
  
        /* Find out if we can drop through to the next block.  */
        insn = NEXT_INSN (insn);
+       e = find_edge (bb, EXIT_BLOCK_PTR);
+       if (e && e->flags & EDGE_FALLTHRU)
+ 	insn = NULL;
+ 
        while (insn
! 	     && NOTE_P (insn)
  	     && NOTE_LINE_NUMBER (insn) != NOTE_INSN_BASIC_BLOCK)
  	insn = NEXT_INSN (insn);
  
!       if (!insn)
  	cached_make_edge (edge_cache, bb, EXIT_BLOCK_PTR, EDGE_FALLTHRU);
        else if (bb->next_bb != EXIT_BLOCK_PTR)
  	{
! 	  if (insn == BB_HEAD (bb->next_bb))
  	    cached_make_edge (edge_cache, bb, bb->next_bb, EDGE_FALLTHRU);
  	}
      }
*************** find_basic_blocks_1 (rtx f)
*** 452,459 ****
  {
    rtx insn, next;
    rtx bb_note = NULL_RTX;
-   rtx lvl = NULL_RTX;
-   rtx trll = NULL_RTX;
    rtx head = NULL_RTX;
    rtx end = NULL_RTX;
    basic_block prev = ENTRY_BLOCK_PTR;
--- 400,405 ----
*************** find_basic_blocks_1 (rtx f)
*** 470,476 ****
  
        next = NEXT_INSN (insn);
  
!       if ((GET_CODE (insn) == CODE_LABEL || GET_CODE (insn) == BARRIER)
  	  && head)
  	{
  	  prev = create_basic_block_structure (head, end, bb_note, prev);
--- 416,422 ----
  
        next = NEXT_INSN (insn);
  
!       if ((LABEL_P (insn) || BARRIER_P (insn))
  	  && head)
  	{
  	  prev = create_basic_block_structure (head, end, bb_note, prev);
*************** find_basic_blocks_1 (rtx f)
*** 514,570 ****
  
  	case CODE_LABEL:
  	case JUMP_INSN:
  	case INSN:
  	case BARRIER:
  	  break;
  
- 	case CALL_INSN:
- 	  if (GET_CODE (PATTERN (insn)) == CALL_PLACEHOLDER)
- 	    {
- 	      /* Scan each of the alternatives for label refs.  */
- 	      lvl = find_label_refs (XEXP (PATTERN (insn), 0), lvl);
- 	      lvl = find_label_refs (XEXP (PATTERN (insn), 1), lvl);
- 	      lvl = find_label_refs (XEXP (PATTERN (insn), 2), lvl);
- 	      /* Record its tail recursion label, if any.  */
- 	      if (XEXP (PATTERN (insn), 3) != NULL_RTX)
- 		trll = alloc_EXPR_LIST (0, XEXP (PATTERN (insn), 3), trll);
- 	    }
- 	  break;
- 
  	default:
! 	  abort ();
! 	}
! 
!       if (GET_CODE (insn) == INSN || GET_CODE (insn) == CALL_INSN)
! 	{
! 	  rtx note;
! 
! 	  /* Make a list of all labels referred to other than by jumps.
! 
! 	     Make a special exception for labels followed by an ADDR*VEC,
! 	     as this would be a part of the tablejump setup code.
! 
! 	     Make a special exception to registers loaded with label
! 	     values just before jump insns that use them.  */
! 
! 	  for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
! 	    if (REG_NOTE_KIND (note) == REG_LABEL)
! 	      {
! 		rtx lab = XEXP (note, 0), next;
! 
! 		if ((next = next_nonnote_insn (lab)) != NULL
! 			 && GET_CODE (next) == JUMP_INSN
! 			 && (GET_CODE (PATTERN (next)) == ADDR_VEC
! 			     || GET_CODE (PATTERN (next)) == ADDR_DIFF_VEC))
! 		  ;
! 		else if (GET_CODE (lab) == NOTE)
! 		  ;
! 		else if (GET_CODE (NEXT_INSN (insn)) == JUMP_INSN
! 			 && find_reg_note (NEXT_INSN (insn), REG_LABEL, lab))
! 		  ;
! 		else
! 		  lvl = alloc_EXPR_LIST (0, XEXP (note, 0), lvl);
! 	      }
  	}
      }
  
--- 460,472 ----
  
  	case CODE_LABEL:
  	case JUMP_INSN:
+ 	case CALL_INSN:
  	case INSN:
  	case BARRIER:
  	  break;
  
  	default:
! 	  gcc_unreachable ();
  	}
      }
  
*************** find_basic_blocks_1 (rtx f)
*** 573,594 ****
    else if (bb_note)
      delete_insn (bb_note);
  
!   if (last_basic_block != n_basic_blocks)
!     abort ();
  
-   label_value_list = lvl;
-   tail_recursion_label_list = trll;
    clear_aux_for_blocks ();
  }
  
  
  /* Find basic blocks of the current function.
!    F is the first insn of the function and NREGS the number of register
!    numbers in use.  */
  
  void
! find_basic_blocks (rtx f, int nregs ATTRIBUTE_UNUSED,
! 		   FILE *file ATTRIBUTE_UNUSED)
  {
    basic_block bb;
  
--- 475,491 ----
    else if (bb_note)
      delete_insn (bb_note);
  
!   gcc_assert (last_basic_block == n_basic_blocks);
  
    clear_aux_for_blocks ();
  }
  
  
  /* Find basic blocks of the current function.
!    F is the first insn of the function.  */
  
  void
! find_basic_blocks (rtx f)
  {
    basic_block bb;
  
*************** find_basic_blocks (rtx f, int nregs ATTR
*** 605,611 ****
        FOR_EACH_BB (bb)
  	bb->aux = NULL;
  
!       VARRAY_FREE (basic_block_info);
      }
  
    n_basic_blocks = count_basic_blocks (f);
--- 502,508 ----
        FOR_EACH_BB (bb)
  	bb->aux = NULL;
  
!       basic_block_info = NULL;
      }
  
    n_basic_blocks = count_basic_blocks (f);
*************** find_basic_blocks (rtx f, int nregs ATTR
*** 625,632 ****
  
    find_basic_blocks_1 (f);
  
    /* Discover the edges of our cfg.  */
!   make_edges (label_value_list, ENTRY_BLOCK_PTR->next_bb, EXIT_BLOCK_PTR->prev_bb, 0);
  
    /* Do very simple cleanup now, for the benefit of code that runs between
       here and cleanup_cfg, e.g. thread_prologue_and_epilogue_insns.  */
--- 522,531 ----
  
    find_basic_blocks_1 (f);
  
+   profile_status = PROFILE_ABSENT;
+ 
    /* Discover the edges of our cfg.  */
!   make_edges (ENTRY_BLOCK_PTR->next_bb, EXIT_BLOCK_PTR->prev_bb, 0);
  
    /* Do very simple cleanup now, for the benefit of code that runs between
       here and cleanup_cfg, e.g. thread_prologue_and_epilogue_insns.  */
*************** enum state {BLOCK_NEW = 0, BLOCK_ORIGINA
*** 644,664 ****
  #define STATE(BB) (enum state) ((size_t) (BB)->aux)
  #define SET_STATE(BB, STATE) ((BB)->aux = (void *) (size_t) (STATE))
  
  /* Scan basic block BB for possible BB boundaries inside the block
     and create new basic blocks in the progress.  */
  
  static void
  find_bb_boundaries (basic_block bb)
  {
    rtx insn = BB_HEAD (bb);
    rtx end = BB_END (bb);
    rtx flow_transfer_insn = NULL_RTX;
    edge fallthru = NULL;
  
    if (insn == BB_END (bb))
      return;
  
!   if (GET_CODE (insn) == CODE_LABEL)
      insn = NEXT_INSN (insn);
  
    /* Scan insn chain and try to find new basic block boundaries.  */
--- 543,622 ----
  #define STATE(BB) (enum state) ((size_t) (BB)->aux)
  #define SET_STATE(BB, STATE) ((BB)->aux = (void *) (size_t) (STATE))
  
+ /* Used internally by purge_dead_tablejump_edges, ORed into state.  */
+ #define BLOCK_USED_BY_TABLEJUMP		32
+ #define FULL_STATE(BB) ((size_t) (BB)->aux)
+ 
+ static void
+ mark_tablejump_edge (rtx label)
+ {
+   basic_block bb;
+ 
+   gcc_assert (LABEL_P (label));
+   /* See comment in make_label_edge.  */
+   if (INSN_UID (label) == 0)
+     return;
+   bb = BLOCK_FOR_INSN (label);
+   SET_STATE (bb, FULL_STATE (bb) | BLOCK_USED_BY_TABLEJUMP);
+ }
+ 
+ static void
+ purge_dead_tablejump_edges (basic_block bb, rtx table)
+ {
+   rtx insn = BB_END (bb), tmp;
+   rtvec vec;
+   int j;
+   edge_iterator ei;
+   edge e;
+ 
+   if (GET_CODE (PATTERN (table)) == ADDR_VEC)
+     vec = XVEC (PATTERN (table), 0);
+   else
+     vec = XVEC (PATTERN (table), 1);
+ 
+   for (j = GET_NUM_ELEM (vec) - 1; j >= 0; --j)
+     mark_tablejump_edge (XEXP (RTVEC_ELT (vec, j), 0));
+ 
+   /* Some targets (eg, ARM) emit a conditional jump that also
+      contains the out-of-range target.  Scan for these and
+      add an edge if necessary.  */
+   if ((tmp = single_set (insn)) != NULL
+        && SET_DEST (tmp) == pc_rtx
+        && GET_CODE (SET_SRC (tmp)) == IF_THEN_ELSE
+        && GET_CODE (XEXP (SET_SRC (tmp), 2)) == LABEL_REF)
+     mark_tablejump_edge (XEXP (XEXP (SET_SRC (tmp), 2), 0));
+ 
+   for (ei = ei_start (bb->succs); (e = ei_safe_edge (ei)); )
+     {
+       if (FULL_STATE (e->dest) & BLOCK_USED_BY_TABLEJUMP)
+         SET_STATE (e->dest, FULL_STATE (e->dest)
+                             & ~(size_t) BLOCK_USED_BY_TABLEJUMP);
+       else if (!(e->flags & (EDGE_ABNORMAL | EDGE_EH)))
+         {
+           remove_edge (e);
+           continue;
+         }
+       ei_next (&ei);
+     }
+ }
+ 
  /* Scan basic block BB for possible BB boundaries inside the block
     and create new basic blocks in the progress.  */
  
  static void
  find_bb_boundaries (basic_block bb)
  {
+   basic_block orig_bb = bb;
    rtx insn = BB_HEAD (bb);
    rtx end = BB_END (bb);
+   rtx table;
    rtx flow_transfer_insn = NULL_RTX;
    edge fallthru = NULL;
  
    if (insn == BB_END (bb))
      return;
  
!   if (LABEL_P (insn))
      insn = NEXT_INSN (insn);
  
    /* Scan insn chain and try to find new basic block boundaries.  */
*************** find_bb_boundaries (basic_block bb)
*** 708,713 ****
--- 666,676 ----
       followed by cleanup at fallthru edge, so the outgoing edges may
       be dead.  */
    purge_dead_edges (bb);
+ 
+   /* purge_dead_edges doesn't handle tablejump's, but if we have split the
+      basic block, we might need to kill some edges.  */
+   if (bb != orig_bb && tablejump_p (BB_END (bb), NULL, &table))
+     purge_dead_tablejump_edges (bb, table);
  }
  
  /*  Assume that frequency of basic block B is known.  Compute frequencies
*************** static void
*** 717,747 ****
  compute_outgoing_frequencies (basic_block b)
  {
    edge e, f;
  
!   if (b->succ && b->succ->succ_next && !b->succ->succ_next->succ_next)
      {
        rtx note = find_reg_note (BB_END (b), REG_BR_PROB, NULL);
        int probability;
  
!       if (!note)
! 	return;
! 
!       probability = INTVAL (XEXP (note, 0));
!       e = BRANCH_EDGE (b);
!       e->probability = probability;
!       e->count = ((b->count * probability + REG_BR_PROB_BASE / 2)
! 		  / REG_BR_PROB_BASE);
!       f = FALLTHRU_EDGE (b);
!       f->probability = REG_BR_PROB_BASE - probability;
!       f->count = b->count - e->count;
      }
  
!   if (b->succ && !b->succ->succ_next)
      {
!       e = b->succ;
        e->probability = REG_BR_PROB_BASE;
        e->count = b->count;
      }
  }
  
  /* Assume that someone emitted code with control flow instructions to the
--- 680,718 ----
  compute_outgoing_frequencies (basic_block b)
  {
    edge e, f;
+   edge_iterator ei;
  
!   if (EDGE_COUNT (b->succs) == 2)
      {
        rtx note = find_reg_note (BB_END (b), REG_BR_PROB, NULL);
        int probability;
  
!       if (note)
! 	{
! 	  probability = INTVAL (XEXP (note, 0));
! 	  e = BRANCH_EDGE (b);
! 	  e->probability = probability;
! 	  e->count = ((b->count * probability + REG_BR_PROB_BASE / 2)
! 		      / REG_BR_PROB_BASE);
! 	  f = FALLTHRU_EDGE (b);
! 	  f->probability = REG_BR_PROB_BASE - probability;
! 	  f->count = b->count - e->count;
! 	  return;
! 	}
      }
  
!   if (EDGE_COUNT (b->succs) == 1)
      {
!       e = EDGE_SUCC (b, 0);
        e->probability = REG_BR_PROB_BASE;
        e->count = b->count;
+       return;
      }
+   guess_outgoing_edge_probabilities (b);
+   if (b->count)
+     FOR_EACH_EDGE (e, ei, b->succs)
+       e->count = ((b->count * e->probability + REG_BR_PROB_BASE / 2)
+ 		  / REG_BR_PROB_BASE);
  }
  
  /* Assume that someone emitted code with control flow instructions to the
*************** find_many_sub_basic_blocks (sbitmap bloc
*** 771,799 ****
  
    /* Now re-scan and wire in all edges.  This expect simple (conditional)
       jumps at the end of each new basic blocks.  */
!   make_edges (NULL, min, max, 1);
  
    /* Update branch probabilities.  Expect only (un)conditional jumps
       to be created with only the forward edges.  */
!   FOR_BB_BETWEEN (bb, min, max->next_bb, next_bb)
!     {
!       edge e;
  
!       if (STATE (bb) == BLOCK_ORIGINAL)
! 	continue;
!       if (STATE (bb) == BLOCK_NEW)
! 	{
! 	  bb->count = 0;
! 	  bb->frequency = 0;
! 	  for (e = bb->pred; e; e = e->pred_next)
! 	    {
! 	      bb->count += e->count;
! 	      bb->frequency += EDGE_FREQUENCY (e);
! 	    }
! 	}
  
!       compute_outgoing_frequencies (bb);
!     }
  
    FOR_EACH_BB (bb)
      SET_STATE (bb, 0);
--- 742,772 ----
  
    /* Now re-scan and wire in all edges.  This expect simple (conditional)
       jumps at the end of each new basic blocks.  */
!   make_edges (min, max, 1);
  
    /* Update branch probabilities.  Expect only (un)conditional jumps
       to be created with only the forward edges.  */
!   if (profile_status != PROFILE_ABSENT)
!     FOR_BB_BETWEEN (bb, min, max->next_bb, next_bb)
!       {
! 	edge e;
! 	edge_iterator ei;
  
! 	if (STATE (bb) == BLOCK_ORIGINAL)
! 	  continue;
! 	if (STATE (bb) == BLOCK_NEW)
! 	  {
! 	    bb->count = 0;
! 	    bb->frequency = 0;
! 	    FOR_EACH_EDGE (e, ei, bb->preds)
! 	      {
! 		bb->count += e->count;
! 		bb->frequency += EDGE_FREQUENCY (e);
! 	      }
! 	  }
  
! 	compute_outgoing_frequencies (bb);
!       }
  
    FOR_EACH_BB (bb)
      SET_STATE (bb, 0);
*************** find_sub_basic_blocks (basic_block bb)
*** 813,831 ****
  
    /* Now re-scan and wire in all edges.  This expect simple (conditional)
       jumps at the end of each new basic blocks.  */
!   make_edges (NULL, min, max, 1);
  
    /* Update branch probabilities.  Expect only (un)conditional jumps
       to be created with only the forward edges.  */
    FOR_BB_BETWEEN (b, min, max->next_bb, next_bb)
      {
        edge e;
  
        if (b != min)
  	{
  	  b->count = 0;
  	  b->frequency = 0;
! 	  for (e = b->pred; e; e = e->pred_next)
  	    {
  	      b->count += e->count;
  	      b->frequency += EDGE_FREQUENCY (e);
--- 786,805 ----
  
    /* Now re-scan and wire in all edges.  This expect simple (conditional)
       jumps at the end of each new basic blocks.  */
!   make_edges (min, max, 1);
  
    /* Update branch probabilities.  Expect only (un)conditional jumps
       to be created with only the forward edges.  */
    FOR_BB_BETWEEN (b, min, max->next_bb, next_bb)
      {
        edge e;
+       edge_iterator ei;
  
        if (b != min)
  	{
  	  b->count = 0;
  	  b->frequency = 0;
! 	  FOR_EACH_EDGE (e, ei, b->preds)
  	    {
  	      b->count += e->count;
  	      b->frequency += EDGE_FREQUENCY (e);
diff -Nrcpad gcc-3.4.3/gcc/cfgcleanup.c gcc-4.0.0/gcc/cfgcleanup.c
*** gcc-3.4.3/gcc/cfgcleanup.c	Sat Mar  6 01:24:08 2004
--- gcc-4.0.0/gcc/cfgcleanup.c	Thu Feb 17 16:19:27 2005
***************
*** 1,6 ****
  /* Control flow optimization code for GNU compiler.
     Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
!    1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
--- 1,6 ----
  /* Control flow optimization code for GNU compiler.
     Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
!    1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
*************** along with GCC; see the file COPYING.  I
*** 19,29 ****
  Software Foundation, 59 Temple Place - Suite 330, Boston, MA
  02111-1307, USA.  */
  
! /* This file contains optimizer of the control flow.  The main entrypoint is
     cleanup_cfg.  Following optimizations are performed:
  
     - Unreachable blocks removal
!    - Edge forwarding (edge to the forwarder block is forwarded to it's
       successor.  Simplification of the branch instruction is performed by
       underlying infrastructure so branch can be converted to simplejump or
       eliminated).
--- 19,29 ----
  Software Foundation, 59 Temple Place - Suite 330, Boston, MA
  02111-1307, USA.  */
  
! /* This file contains optimizer of the control flow.  The main entry point is
     cleanup_cfg.  Following optimizations are performed:
  
     - Unreachable blocks removal
!    - Edge forwarding (edge to the forwarder block is forwarded to its
       successor.  Simplification of the branch instruction is performed by
       underlying infrastructure so branch can be converted to simplejump or
       eliminated).
*************** Software Foundation, 59 Temple Place - S
*** 37,43 ****
  #include "tm.h"
  #include "rtl.h"
  #include "hard-reg-set.h"
! #include "basic-block.h"
  #include "timevar.h"
  #include "output.h"
  #include "insn-config.h"
--- 37,43 ----
  #include "tm.h"
  #include "rtl.h"
  #include "hard-reg-set.h"
! #include "regs.h"
  #include "timevar.h"
  #include "output.h"
  #include "insn-config.h"
*************** Software Foundation, 59 Temple Place - S
*** 48,54 ****
  #include "params.h"
  #include "tm_p.h"
  #include "target.h"
! #include "expr.h"
  
  /* cleanup_cfg maintains following flags for each basic block.  */
  
--- 48,55 ----
  #include "params.h"
  #include "tm_p.h"
  #include "target.h"
! #include "cfglayout.h"
! #include "emit-rtl.h"
  
  /* cleanup_cfg maintains following flags for each basic block.  */
  
*************** enum bb_flags
*** 68,80 ****
  
  #define FORWARDER_BLOCK_P(BB) (BB_FLAGS (BB) & BB_FORWARDER_BLOCK)
  
  static bool try_crossjump_to_edge (int, edge, edge);
  static bool try_crossjump_bb (int, basic_block);
  static bool outgoing_edges_match (int, basic_block, basic_block);
  static int flow_find_cross_jump (int, basic_block, basic_block, rtx *, rtx *);
  static bool insns_match_p (int, rtx, rtx);
  
- static bool tail_recursion_label_p (rtx);
  static void merge_blocks_move_predecessor_nojumps (basic_block, basic_block);
  static void merge_blocks_move_successor_nojumps (basic_block, basic_block);
  static bool try_optimize_cfg (int);
--- 69,82 ----
  
  #define FORWARDER_BLOCK_P(BB) (BB_FLAGS (BB) & BB_FORWARDER_BLOCK)
  
+ /* Set to true when we are running first pass of try_optimize_cfg loop.  */
+ static bool first_pass;
  static bool try_crossjump_to_edge (int, edge, edge);
  static bool try_crossjump_bb (int, basic_block);
  static bool outgoing_edges_match (int, basic_block, basic_block);
  static int flow_find_cross_jump (int, basic_block, basic_block, rtx *, rtx *);
  static bool insns_match_p (int, rtx, rtx);
  
  static void merge_blocks_move_predecessor_nojumps (basic_block, basic_block);
  static void merge_blocks_move_successor_nojumps (basic_block, basic_block);
  static bool try_optimize_cfg (int);
*************** try_simplify_condjump (basic_block cbran
*** 119,131 ****
    basic_block jump_block, jump_dest_block, cbranch_dest_block;
    edge cbranch_jump_edge, cbranch_fallthru_edge;
    rtx cbranch_insn;
-   rtx insn, next;
-   rtx end;
  
    /* Verify that there are exactly two successors.  */
!   if (!cbranch_block->succ
!       || !cbranch_block->succ->succ_next
!       || cbranch_block->succ->succ_next->succ_next)
      return false;
  
    /* Verify that we've got a normal conditional branch at the end
--- 121,129 ----
    basic_block jump_block, jump_dest_block, cbranch_dest_block;
    edge cbranch_jump_edge, cbranch_fallthru_edge;
    rtx cbranch_insn;
  
    /* Verify that there are exactly two successors.  */
!   if (EDGE_COUNT (cbranch_block->succs) != 2)
      return false;
  
    /* Verify that we've got a normal conditional branch at the end
*************** try_simplify_condjump (basic_block cbran
*** 141,165 ****
       be the last block in the function, and must contain just the
       unconditional jump.  */
    jump_block = cbranch_fallthru_edge->dest;
!   if (jump_block->pred->pred_next
        || jump_block->next_bb == EXIT_BLOCK_PTR
        || !FORWARDER_BLOCK_P (jump_block))
      return false;
!   jump_dest_block = jump_block->succ->dest;
  
    /* The conditional branch must target the block after the
       unconditional branch.  */
    cbranch_dest_block = cbranch_jump_edge->dest;
  
!   if (!can_fallthru (jump_block, cbranch_dest_block))
      return false;
  
    /* Invert the conditional branch.  */
    if (!invert_jump (cbranch_insn, block_label (jump_dest_block), 0))
      return false;
  
!   if (rtl_dump_file)
!     fprintf (rtl_dump_file, "Simplifying condjump %i around jump %i\n",
  	     INSN_UID (cbranch_insn), INSN_UID (BB_END (jump_block)));
  
    /* Success.  Update the CFG to match.  Note that after this point
--- 139,179 ----
       be the last block in the function, and must contain just the
       unconditional jump.  */
    jump_block = cbranch_fallthru_edge->dest;
!   if (EDGE_COUNT (jump_block->preds) >= 2
        || jump_block->next_bb == EXIT_BLOCK_PTR
        || !FORWARDER_BLOCK_P (jump_block))
      return false;
!   jump_dest_block = EDGE_SUCC (jump_block, 0)->dest;
! 
!   /* If we are partitioning hot/cold basic blocks, we don't want to
!      mess up unconditional or indirect jumps that cross between hot
!      and cold sections. 
! 
!      Basic block partitioning may result in some jumps that appear to
!      be optimizable (or blocks that appear to be mergeable), but which really 
!      must be left untouched (they are required to make it safely across 
!      partition boundaries).  See the comments at the top of 
!      bb-reorder.c:partition_hot_cold_basic_blocks for complete details.  */
! 
!   if (flag_reorder_blocks_and_partition
!       && (BB_PARTITION (jump_block) != BB_PARTITION (jump_dest_block)
! 	  || (cbranch_jump_edge->flags & EDGE_CROSSING)))
!     return false;
  
    /* The conditional branch must target the block after the
       unconditional branch.  */
    cbranch_dest_block = cbranch_jump_edge->dest;
  
!   if (cbranch_dest_block == EXIT_BLOCK_PTR
!       || !can_fallthru (jump_block, cbranch_dest_block))
      return false;
  
    /* Invert the conditional branch.  */
    if (!invert_jump (cbranch_insn, block_label (jump_dest_block), 0))
      return false;
  
!   if (dump_file)
!     fprintf (dump_file, "Simplifying condjump %i around jump %i\n",
  	     INSN_UID (cbranch_insn), INSN_UID (BB_END (jump_block)));
  
    /* Success.  Update the CFG to match.  Note that after this point
*************** try_simplify_condjump (basic_block cbran
*** 173,201 ****
    cbranch_fallthru_edge->flags &= ~EDGE_FALLTHRU;
    update_br_prob_note (cbranch_block);
  
-   end = BB_END (jump_block);
-   /* Deleting a block may produce unreachable code warning even when we are
-      not deleting anything live.  Suppress it by moving all the line number
-      notes out of the block.  */
-   for (insn = BB_HEAD (jump_block); insn != NEXT_INSN (BB_END (jump_block));
-        insn = next)
-     {
-       next = NEXT_INSN (insn);
-       if (GET_CODE (insn) == NOTE && NOTE_LINE_NUMBER (insn) > 0)
- 	{
- 	  if (insn == BB_END (jump_block))
- 	    {
- 	      BB_END (jump_block) = PREV_INSN (insn);
- 	      if (insn == end)
- 	        break;
- 	    }
- 	  reorder_insns_nobb (insn, insn, end);
- 	  end = insn;
- 	}
-     }
    /* Delete the block with the unconditional jump, and clean up the mess.  */
!   delete_block (jump_block);
!   tidy_fallthru_edge (cbranch_jump_edge, cbranch_block, cbranch_dest_block);
  
    return true;
  }
--- 187,196 ----
    cbranch_fallthru_edge->flags &= ~EDGE_FALLTHRU;
    update_br_prob_note (cbranch_block);
  
    /* Delete the block with the unconditional jump, and clean up the mess.  */
!   delete_basic_block (jump_block);
!   tidy_fallthru_edge (cbranch_jump_edge);
!   update_forwarder_flag (cbranch_block);
  
    return true;
  }
*************** mark_effect (rtx exp, regset nonequal)
*** 220,226 ****
  	  CLEAR_REGNO_REG_SET (nonequal, regno);
  	  if (regno < FIRST_PSEUDO_REGISTER)
  	    {
! 	      int n = HARD_REGNO_NREGS (regno, GET_MODE (dest));
  	      while (--n > 0)
  		CLEAR_REGNO_REG_SET (nonequal, regno + n);
  	    }
--- 215,221 ----
  	  CLEAR_REGNO_REG_SET (nonequal, regno);
  	  if (regno < FIRST_PSEUDO_REGISTER)
  	    {
! 	      int n = hard_regno_nregs[regno][GET_MODE (dest)];
  	      while (--n > 0)
  		CLEAR_REGNO_REG_SET (nonequal, regno + n);
  	    }
*************** mark_effect (rtx exp, regset nonequal)
*** 239,245 ****
        SET_REGNO_REG_SET (nonequal, regno);
        if (regno < FIRST_PSEUDO_REGISTER)
  	{
! 	  int n = HARD_REGNO_NREGS (regno, GET_MODE (dest));
  	  while (--n > 0)
  	    SET_REGNO_REG_SET (nonequal, regno + n);
  	}
--- 234,240 ----
        SET_REGNO_REG_SET (nonequal, regno);
        if (regno < FIRST_PSEUDO_REGISTER)
  	{
! 	  int n = hard_regno_nregs[regno][GET_MODE (dest)];
  	  while (--n > 0)
  	    SET_REGNO_REG_SET (nonequal, regno + n);
  	}
*************** mentions_nonequal_regs (rtx *x, void *da
*** 265,271 ****
  	return 1;
        if (regno < FIRST_PSEUDO_REGISTER)
  	{
! 	  int n = HARD_REGNO_NREGS (regno, GET_MODE (*x));
  	  while (--n > 0)
  	    if (REGNO_REG_SET_P (nonequal, regno + n))
  	      return 1;
--- 260,266 ----
  	return 1;
        if (regno < FIRST_PSEUDO_REGISTER)
  	{
! 	  int n = hard_regno_nregs[regno][GET_MODE (*x)];
  	  while (--n > 0)
  	    if (REGNO_REG_SET_P (nonequal, regno + n))
  	      return 1;
*************** thread_jump (int mode, edge e, basic_blo
*** 283,300 ****
    rtx set1, set2, cond1, cond2, insn;
    enum rtx_code code1, code2, reversed_code2;
    bool reverse1 = false;
!   int i;
    regset nonequal;
    bool failed = false;
  
    if (BB_FLAGS (b) & BB_NONTHREADABLE_BLOCK)
      return NULL;
  
    /* At the moment, we do handle only conditional jumps, but later we may
       want to extend this code to tablejumps and others.  */
!   if (!e->src->succ->succ_next || e->src->succ->succ_next->succ_next)
      return NULL;
!   if (!b->succ || !b->succ->succ_next || b->succ->succ_next->succ_next)
      {
        BB_SET_FLAG (b, BB_NONTHREADABLE_BLOCK);
        return NULL;
--- 278,296 ----
    rtx set1, set2, cond1, cond2, insn;
    enum rtx_code code1, code2, reversed_code2;
    bool reverse1 = false;
!   unsigned i;
    regset nonequal;
    bool failed = false;
+   reg_set_iterator rsi;
  
    if (BB_FLAGS (b) & BB_NONTHREADABLE_BLOCK)
      return NULL;
  
    /* At the moment, we do handle only conditional jumps, but later we may
       want to extend this code to tablejumps and others.  */
!   if (EDGE_COUNT (e->src->succs) != 2)
      return NULL;
!   if (EDGE_COUNT (b->succs) != 2)
      {
        BB_SET_FLAG (b, BB_NONTHREADABLE_BLOCK);
        return NULL;
*************** thread_jump (int mode, edge e, basic_blo
*** 348,369 ****
  	return NULL;
        }
  
!   cselib_init ();
  
    /* First process all values computed in the source basic block.  */
!   for (insn = NEXT_INSN (BB_HEAD (e->src)); insn != NEXT_INSN (BB_END (e->src));
         insn = NEXT_INSN (insn))
      if (INSN_P (insn))
        cselib_process_insn (insn);
  
!   nonequal = BITMAP_XMALLOC();
    CLEAR_REG_SET (nonequal);
  
    /* Now assume that we've continued by the edge E to B and continue
       processing as if it were same basic block.
       Our goal is to prove that whole block is an NOOP.  */
  
!   for (insn = NEXT_INSN (BB_HEAD (b)); insn != NEXT_INSN (BB_END (b)) && !failed;
         insn = NEXT_INSN (insn))
      {
        if (INSN_P (insn))
--- 344,367 ----
  	return NULL;
        }
  
!   cselib_init (false);
  
    /* First process all values computed in the source basic block.  */
!   for (insn = NEXT_INSN (BB_HEAD (e->src));
!        insn != NEXT_INSN (BB_END (e->src));
         insn = NEXT_INSN (insn))
      if (INSN_P (insn))
        cselib_process_insn (insn);
  
!   nonequal = BITMAP_ALLOC (NULL);
    CLEAR_REG_SET (nonequal);
  
    /* Now assume that we've continued by the edge E to B and continue
       processing as if it were same basic block.
       Our goal is to prove that whole block is an NOOP.  */
  
!   for (insn = NEXT_INSN (BB_HEAD (b));
!        insn != NEXT_INSN (BB_END (b)) && !failed;
         insn = NEXT_INSN (insn))
      {
        if (INSN_P (insn))
*************** thread_jump (int mode, edge e, basic_blo
*** 372,378 ****
  
  	  if (GET_CODE (pat) == PARALLEL)
  	    {
! 	      for (i = 0; i < XVECLEN (pat, 0); i++)
  		failed |= mark_effect (XVECEXP (pat, 0, i), nonequal);
  	    }
  	  else
--- 370,376 ----
  
  	  if (GET_CODE (pat) == PARALLEL)
  	    {
! 	      for (i = 0; i < (unsigned)XVECLEN (pat, 0); i++)
  		failed |= mark_effect (XVECEXP (pat, 0, i), nonequal);
  	    }
  	  else
*************** thread_jump (int mode, edge e, basic_blo
*** 400,408 ****
    if (mode & CLEANUP_UPDATE_LIFE)
      AND_REG_SET (nonequal, b->global_live_at_end);
  
!   EXECUTE_IF_SET_IN_REG_SET (nonequal, 0, i, goto failed_exit;);
  
!   BITMAP_XFREE (nonequal);
    cselib_finish ();
    if ((comparison_dominates_p (code1, code2) != 0)
        != (XEXP (SET_SRC (set2), 1) == pc_rtx))
--- 398,407 ----
    if (mode & CLEANUP_UPDATE_LIFE)
      AND_REG_SET (nonequal, b->global_live_at_end);
  
!   EXECUTE_IF_SET_IN_REG_SET (nonequal, 0, i, rsi)
!     goto failed_exit;
  
!   BITMAP_FREE (nonequal);
    cselib_finish ();
    if ((comparison_dominates_p (code1, code2) != 0)
        != (XEXP (SET_SRC (set2), 1) == pc_rtx))
*************** thread_jump (int mode, edge e, basic_blo
*** 411,417 ****
      return FALLTHRU_EDGE (b);
  
  failed_exit:
!   BITMAP_XFREE (nonequal);
    cselib_finish ();
    return NULL;
  }
--- 410,416 ----
      return FALLTHRU_EDGE (b);
  
  failed_exit:
!   BITMAP_FREE (nonequal);
    cselib_finish ();
    return NULL;
  }
*************** static bool
*** 423,438 ****
  try_forward_edges (int mode, basic_block b)
  {
    bool changed = false;
!   edge e, next, *threaded_edges = NULL;
  
!   for (e = b->succ; e; e = next)
      {
        basic_block target, first;
        int counter;
        bool threaded = false;
        int nthreaded_edges = 0;
! 
!       next = e->succ_next;
  
        /* Skip complex edges because we don't know how to update them.
  
--- 422,451 ----
  try_forward_edges (int mode, basic_block b)
  {
    bool changed = false;
!   edge_iterator ei;
!   edge e, *threaded_edges = NULL;
  
!   /* If we are partitioning hot/cold basic blocks, we don't want to
!      mess up unconditional or indirect jumps that cross between hot
!      and cold sections. 
!   
!      Basic block partitioning may result in some jumps that appear to
!      be optimizable (or blocks that appear to be mergeable), but which really m
!      ust be left untouched (they are required to make it safely across 
!      partition boundaries).  See the comments at the top of 
!      bb-reorder.c:partition_hot_cold_basic_blocks for complete details.  */
! 
!   if (flag_reorder_blocks_and_partition
!       && find_reg_note (BB_END (b), REG_CROSSING_JUMP, NULL_RTX))
!     return false;
! 
!   for (ei = ei_start (b->succs); (e = ei_safe_edge (ei)); )
      {
        basic_block target, first;
        int counter;
        bool threaded = false;
        int nthreaded_edges = 0;
!       bool may_thread = first_pass | (b->flags & BB_DIRTY);
  
        /* Skip complex edges because we don't know how to update them.
  
*************** try_forward_edges (int mode, basic_block
*** 440,467 ****
           edge to the same place as the branch edge of conditional branch
           and turn conditional branch to an unconditional branch.  */
        if (e->flags & EDGE_COMPLEX)
! 	continue;
  
        target = first = e->dest;
        counter = 0;
  
        while (counter < n_basic_blocks)
  	{
  	  basic_block new_target = NULL;
  	  bool new_target_threaded = false;
  
  	  if (FORWARDER_BLOCK_P (target)
! 	      && target->succ->dest != EXIT_BLOCK_PTR)
  	    {
  	      /* Bypass trivial infinite loops.  */
! 	      if (target == target->succ->dest)
  		counter = n_basic_blocks;
! 	      new_target = target->succ->dest;
  	    }
  
  	  /* Allow to thread only over one edge at time to simplify updating
  	     of probabilities.  */
! 	  else if (mode & CLEANUP_THREADING)
  	    {
  	      edge t = thread_jump (mode, e, target);
  	      if (t)
--- 453,500 ----
           edge to the same place as the branch edge of conditional branch
           and turn conditional branch to an unconditional branch.  */
        if (e->flags & EDGE_COMPLEX)
! 	{
! 	  ei_next (&ei);
! 	  continue;
! 	}
  
        target = first = e->dest;
        counter = 0;
  
+       /* If we are partitioning hot/cold basic_blocks, we don't want to mess
+ 	 up jumps that cross between hot/cold sections.
+ 
+ 	 Basic block partitioning may result in some jumps that appear
+ 	 to be optimizable (or blocks that appear to be mergeable), but which 
+ 	 really must be left untouched (they are required to make it safely 
+ 	 across partition boundaries).  See the comments at the top of
+ 	 bb-reorder.c:partition_hot_cold_basic_blocks for complete
+ 	 details.  */
+ 
+       if (flag_reorder_blocks_and_partition
+ 	  && first != EXIT_BLOCK_PTR
+ 	  && find_reg_note (BB_END (first), REG_CROSSING_JUMP, NULL_RTX))
+ 	return false;
+ 
        while (counter < n_basic_blocks)
  	{
  	  basic_block new_target = NULL;
  	  bool new_target_threaded = false;
+ 	  may_thread |= target->flags & BB_DIRTY;
  
  	  if (FORWARDER_BLOCK_P (target)
!   	      && !(EDGE_SUCC (target, 0)->flags & EDGE_CROSSING)
! 	      && EDGE_SUCC (target, 0)->dest != EXIT_BLOCK_PTR)
  	    {
  	      /* Bypass trivial infinite loops.  */
! 	      if (target == EDGE_SUCC (target, 0)->dest)
  		counter = n_basic_blocks;
! 	      new_target = EDGE_SUCC (target, 0)->dest;
  	    }
  
  	  /* Allow to thread only over one edge at time to simplify updating
  	     of probabilities.  */
! 	  else if ((mode & CLEANUP_THREADING) && may_thread)
  	    {
  	      edge t = thread_jump (mode, e, target);
  	      if (t)
*************** try_forward_edges (int mode, basic_block
*** 489,496 ****
  		  if (t->dest == b)
  		    break;
  
! 		  if (nthreaded_edges >= n_basic_blocks)
! 		    abort ();
  		  threaded_edges[nthreaded_edges++] = t;
  
  		  new_target = t->dest;
--- 522,528 ----
  		  if (t->dest == b)
  		    break;
  
! 		  gcc_assert (nthreaded_edges < n_basic_blocks);
  		  threaded_edges[nthreaded_edges++] = t;
  
  		  new_target = t->dest;
*************** try_forward_edges (int mode, basic_block
*** 509,527 ****
  	     it must appear before the JUMP_INSN.  */
  	  if ((mode & CLEANUP_PRE_LOOP) && optimize)
  	    {
! 	      rtx insn = (target->succ->flags & EDGE_FALLTHRU
  			  ? BB_HEAD (target) : prev_nonnote_insn (BB_END (target)));
  
! 	      if (GET_CODE (insn) != NOTE)
  		insn = NEXT_INSN (insn);
  
! 	      for (; insn && GET_CODE (insn) != CODE_LABEL && !INSN_P (insn);
  		   insn = NEXT_INSN (insn))
! 		if (GET_CODE (insn) == NOTE
  		    && NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG)
  		  break;
  
! 	      if (GET_CODE (insn) == NOTE)
  		break;
  
  	      /* Do not clean up branches to just past the end of a loop
--- 541,559 ----
  	     it must appear before the JUMP_INSN.  */
  	  if ((mode & CLEANUP_PRE_LOOP) && optimize)
  	    {
! 	      rtx insn = (EDGE_SUCC (target, 0)->flags & EDGE_FALLTHRU
  			  ? BB_HEAD (target) : prev_nonnote_insn (BB_END (target)));
  
! 	      if (!NOTE_P (insn))
  		insn = NEXT_INSN (insn);
  
! 	      for (; insn && !LABEL_P (insn) && !INSN_P (insn);
  		   insn = NEXT_INSN (insn))
! 		if (NOTE_P (insn)
  		    && NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG)
  		  break;
  
! 	      if (NOTE_P (insn))
  		break;
  
  	      /* Do not clean up branches to just past the end of a loop
*************** try_forward_edges (int mode, basic_block
*** 529,535 ****
  		 recognition of some patterns.  */
  
  	      insn = PREV_INSN (BB_HEAD (target));
! 	      if (insn && GET_CODE (insn) == NOTE
  		    && NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_END)
  		break;
  	    }
--- 561,567 ----
  		 recognition of some patterns.  */
  
  	      insn = PREV_INSN (BB_HEAD (target));
! 	      if (insn && NOTE_P (insn)
  		    && NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_END)
  		break;
  	    }
*************** try_forward_edges (int mode, basic_block
*** 541,548 ****
  
        if (counter >= n_basic_blocks)
  	{
! 	  if (rtl_dump_file)
! 	    fprintf (rtl_dump_file, "Infinite loop in BB %i.\n",
  		     target->index);
  	}
        else if (target == first)
--- 573,580 ----
  
        if (counter >= n_basic_blocks)
  	{
! 	  if (dump_file)
! 	    fprintf (dump_file, "Infinite loop in BB %i.\n",
  		     target->index);
  	}
        else if (target == first)
*************** try_forward_edges (int mode, basic_block
*** 559,573 ****
  	  if (threaded && target != EXIT_BLOCK_PTR)
  	    {
  	      notice_new_block (redirect_edge_and_branch_force (e, target));
! 	      if (rtl_dump_file)
! 		fprintf (rtl_dump_file, "Conditionals threaded.\n");
  	    }
  	  else if (!redirect_edge_and_branch (e, target))
  	    {
! 	      if (rtl_dump_file)
! 		fprintf (rtl_dump_file,
  			 "Forwarding edge %i->%i to %i failed.\n",
  			 b->index, e->dest->index, target->index);
  	      continue;
  	    }
  
--- 591,606 ----
  	  if (threaded && target != EXIT_BLOCK_PTR)
  	    {
  	      notice_new_block (redirect_edge_and_branch_force (e, target));
! 	      if (dump_file)
! 		fprintf (dump_file, "Conditionals threaded.\n");
  	    }
  	  else if (!redirect_edge_and_branch (e, target))
  	    {
! 	      if (dump_file)
! 		fprintf (dump_file,
  			 "Forwarding edge %i->%i to %i failed.\n",
  			 b->index, e->dest->index, target->index);
+ 	      ei_next (&ei);
  	      continue;
  	    }
  
*************** try_forward_edges (int mode, basic_block
*** 585,626 ****
  	    {
  	      edge t;
  
! 	      first->count -= edge_count;
! 	      if (first->count < 0)
! 		first->count = 0;
! 	      first->frequency -= edge_frequency;
! 	      if (first->frequency < 0)
! 		first->frequency = 0;
! 	      if (first->succ->succ_next)
  		{
! 		  edge e;
! 		  int prob;
! 		  if (n >= nthreaded_edges)
! 		    abort ();
  		  t = threaded_edges [n++];
! 		  if (t->src != first)
! 		    abort ();
! 		  if (first->frequency)
! 		    prob = edge_frequency * REG_BR_PROB_BASE / first->frequency;
! 		  else
! 		    prob = 0;
! 		  if (prob > t->probability)
! 		    prob = t->probability;
! 		  t->probability -= prob;
! 		  prob = REG_BR_PROB_BASE - prob;
! 		  if (prob <= 0)
! 		    {
! 		      first->succ->probability = REG_BR_PROB_BASE;
! 		      first->succ->succ_next->probability = 0;
! 		    }
! 		  else
! 		    for (e = first->succ; e; e = e->succ_next)
! 		      e->probability = ((e->probability * REG_BR_PROB_BASE)
! 					/ (double) prob);
  		  update_br_prob_note (first);
  		}
  	      else
  		{
  		  /* It is possible that as the result of
  		     threading we've removed edge as it is
  		     threaded to the fallthru edge.  Avoid
--- 618,640 ----
  	    {
  	      edge t;
  
! 	      if (EDGE_COUNT (first->succs) > 1)
  		{
! 		  gcc_assert (n < nthreaded_edges);
  		  t = threaded_edges [n++];
! 		  gcc_assert (t->src == first);
! 		  update_bb_profile_for_threading (first, edge_frequency,
! 						   edge_count, t);
  		  update_br_prob_note (first);
  		}
  	      else
  		{
+ 		  first->count -= edge_count;
+ 		  if (first->count < 0)
+ 		    first->count = 0;
+ 		  first->frequency -= edge_frequency;
+ 		  if (first->frequency < 0)
+ 		    first->frequency = 0;
  		  /* It is possible that as the result of
  		     threading we've removed edge as it is
  		     threaded to the fallthru edge.  Avoid
*************** try_forward_edges (int mode, basic_block
*** 628,634 ****
  		  if (n < nthreaded_edges
  		      && first == threaded_edges [n]->src)
  		    n++;
! 		  t = first->succ;
  		}
  
  	      t->count -= edge_count;
--- 642,648 ----
  		  if (n < nthreaded_edges
  		      && first == threaded_edges [n]->src)
  		    n++;
! 		  t = EDGE_SUCC (first, 0);
  		}
  
  	      t->count -= edge_count;
*************** try_forward_edges (int mode, basic_block
*** 639,645 ****
--- 653,661 ----
  	  while (first != target);
  
  	  changed = true;
+ 	  continue;
  	}
+       ei_next (&ei);
      }
  
    if (threaded_edges)
*************** try_forward_edges (int mode, basic_block
*** 647,665 ****
    return changed;
  }
  
- /* Return true if LABEL is used for tail recursion.  */
- 
- static bool
- tail_recursion_label_p (rtx label)
- {
-   rtx x;
- 
-   for (x = tail_recursion_label_list; x; x = XEXP (x, 1))
-     if (label == XEXP (x, 0))
-       return true;
- 
-   return false;
- }
  
  /* Blocks A and B are to be merged into a single block.  A has no incoming
     fallthru edge, so it can be moved before B without adding or modifying
--- 663,668 ----
*************** static void
*** 669,678 ****
  merge_blocks_move_predecessor_nojumps (basic_block a, basic_block b)
  {
    rtx barrier;
  
    barrier = next_nonnote_insn (BB_END (a));
!   if (GET_CODE (barrier) != BARRIER)
!     abort ();
    delete_insn (barrier);
  
    /* Move block and loop notes out of the chain so that we do not
--- 672,696 ----
  merge_blocks_move_predecessor_nojumps (basic_block a, basic_block b)
  {
    rtx barrier;
+   bool only_notes;
+ 
+   /* If we are partitioning hot/cold basic blocks, we don't want to
+      mess up unconditional or indirect jumps that cross between hot
+      and cold sections.
+   
+      Basic block partitioning may result in some jumps that appear to
+      be optimizable (or blocks that appear to be mergeable), but which really 
+      must be left untouched (they are required to make it safely across 
+      partition boundaries).  See the comments at the top of 
+      bb-reorder.c:partition_hot_cold_basic_blocks for complete details.  */
+ 
+   if (flag_reorder_blocks_and_partition
+       && (BB_PARTITION (a) != BB_PARTITION (b)
+ 	  || find_reg_note (BB_END (a), REG_CROSSING_JUMP, NULL_RTX)))
+     return;
  
    barrier = next_nonnote_insn (BB_END (a));
!   gcc_assert (BARRIER_P (barrier));
    delete_insn (barrier);
  
    /* Move block and loop notes out of the chain so that we do not
*************** merge_blocks_move_predecessor_nojumps (b
*** 682,697 ****
       and adjust the block trees appropriately.   Even better would be to have
       a tighter connection between block trees and rtl so that this is not
       necessary.  */
!   if (squeeze_notes (&BB_HEAD (a), &BB_END (a)))
!     abort ();
  
    /* Scramble the insn chain.  */
    if (BB_END (a) != PREV_INSN (BB_HEAD (b)))
      reorder_insns_nobb (BB_HEAD (a), BB_END (a), PREV_INSN (BB_HEAD (b)));
    a->flags |= BB_DIRTY;
  
!   if (rtl_dump_file)
!     fprintf (rtl_dump_file, "Moved block %d before %d and merged.\n",
  	     a->index, b->index);
  
    /* Swap the records for the two blocks around.  */
--- 700,715 ----
       and adjust the block trees appropriately.   Even better would be to have
       a tighter connection between block trees and rtl so that this is not
       necessary.  */
!   only_notes = squeeze_notes (&BB_HEAD (a), &BB_END (a));
!   gcc_assert (!only_notes);
  
    /* Scramble the insn chain.  */
    if (BB_END (a) != PREV_INSN (BB_HEAD (b)))
      reorder_insns_nobb (BB_HEAD (a), BB_END (a), PREV_INSN (BB_HEAD (b)));
    a->flags |= BB_DIRTY;
  
!   if (dump_file)
!     fprintf (dump_file, "Moved block %d before %d and merged.\n",
  	     a->index, b->index);
  
    /* Swap the records for the two blocks around.  */
*************** merge_blocks_move_successor_nojumps (bas
*** 712,717 ****
--- 730,751 ----
  {
    rtx barrier, real_b_end;
    rtx label, table;
+   bool only_notes;
+ 
+   /* If we are partitioning hot/cold basic blocks, we don't want to
+      mess up unconditional or indirect jumps that cross between hot
+      and cold sections. 
+   
+      Basic block partitioning may result in some jumps that appear to
+      be optimizable (or blocks that appear to be mergeable), but which really 
+      must be left untouched (they are required to make it safely across 
+      partition boundaries).  See the comments at the top of 
+      bb-reorder.c:partition_hot_cold_basic_blocks for complete details.  */
+ 
+   if (flag_reorder_blocks_and_partition
+       && (find_reg_note (BB_END (a), REG_CROSSING_JUMP, NULL_RTX)
+ 	  || BB_PARTITION (a) != BB_PARTITION (b)))
+     return;
  
    real_b_end = BB_END (b);
  
*************** merge_blocks_move_successor_nojumps (bas
*** 725,731 ****
  
    /* There had better have been a barrier there.  Delete it.  */
    barrier = NEXT_INSN (BB_END (b));
!   if (barrier && GET_CODE (barrier) == BARRIER)
      delete_insn (barrier);
  
    /* Move block and loop notes out of the chain so that we do not
--- 759,765 ----
  
    /* There had better have been a barrier there.  Delete it.  */
    barrier = NEXT_INSN (BB_END (b));
!   if (barrier && BARRIER_P (barrier))
      delete_insn (barrier);
  
    /* Move block and loop notes out of the chain so that we do not
*************** merge_blocks_move_successor_nojumps (bas
*** 735,742 ****
       and adjust the block trees appropriately.   Even better would be to have
       a tighter connection between block trees and rtl so that this is not
       necessary.  */
!   if (squeeze_notes (&BB_HEAD (b), &BB_END (b)))
!     abort ();
  
    /* Scramble the insn chain.  */
    reorder_insns_nobb (BB_HEAD (b), BB_END (b), BB_END (a));
--- 769,777 ----
       and adjust the block trees appropriately.   Even better would be to have
       a tighter connection between block trees and rtl so that this is not
       necessary.  */
!   only_notes = squeeze_notes (&BB_HEAD (b), &BB_END (b));
!   gcc_assert (!only_notes);
!   
  
    /* Scramble the insn chain.  */
    reorder_insns_nobb (BB_HEAD (b), BB_END (b), BB_END (a));
*************** merge_blocks_move_successor_nojumps (bas
*** 744,751 ****
    /* Restore the real end of b.  */
    BB_END (b) = real_b_end;
  
!   if (rtl_dump_file)
!     fprintf (rtl_dump_file, "Moved block %d after %d and merged.\n",
  	     b->index, a->index);
  
    /* Now blocks A and B are contiguous.  Merge them.  */
--- 779,786 ----
    /* Restore the real end of b.  */
    BB_END (b) = real_b_end;
  
!   if (dump_file)
!     fprintf (dump_file, "Moved block %d after %d and merged.\n",
  	     b->index, a->index);
  
    /* Now blocks A and B are contiguous.  Merge them.  */
*************** static basic_block
*** 768,781 ****
  merge_blocks_move (edge e, basic_block b, basic_block c, int mode)
  {
    basic_block next;
!   /* If C has a tail recursion label, do not merge.  There is no
!      edge recorded from the call_placeholder back to this label, as
!      that would make optimize_sibling_and_tail_recursive_calls more
!      complex for no gain.  */
!   if ((mode & CLEANUP_PRE_SIBCALL)
!       && GET_CODE (BB_HEAD (c)) == CODE_LABEL
!       && tail_recursion_label_p (BB_HEAD (c)))
      return NULL;
  
    /* If B has a fallthru edge to C, no need to move anything.  */
    if (e->flags & EDGE_FALLTHRU)
--- 803,826 ----
  merge_blocks_move (edge e, basic_block b, basic_block c, int mode)
  {
    basic_block next;
! 
!   /* If we are partitioning hot/cold basic blocks, we don't want to
!      mess up unconditional or indirect jumps that cross between hot
!      and cold sections. 
!   
!      Basic block partitioning may result in some jumps that appear to
!      be optimizable (or blocks that appear to be mergeable), but which really 
!      must be left untouched (they are required to make it safely across 
!      partition boundaries).  See the comments at the top of 
!      bb-reorder.c:partition_hot_cold_basic_blocks for complete details.  */
! 
!   if (flag_reorder_blocks_and_partition
!       && (find_reg_note (BB_END (b), REG_CROSSING_JUMP, NULL_RTX)
! 	  || find_reg_note (BB_END (c), REG_CROSSING_JUMP, NULL_RTX)
! 	  || BB_PARTITION (b) != BB_PARTITION (c)))
      return NULL;
+       
+     
  
    /* If B has a fallthru edge to C, no need to move anything.  */
    if (e->flags & EDGE_FALLTHRU)
*************** merge_blocks_move (edge e, basic_block b
*** 784,791 ****
        merge_blocks (b, c);
        update_forwarder_flag (b);
  
!       if (rtl_dump_file)
! 	fprintf (rtl_dump_file, "Merged %d and %d without moving.\n",
  		 b_index, c_index);
  
        return b->prev_bb == ENTRY_BLOCK_PTR ? b : b->prev_bb;
--- 829,836 ----
        merge_blocks (b, c);
        update_forwarder_flag (b);
  
!       if (dump_file)
! 	fprintf (dump_file, "Merged %d and %d without moving.\n",
  		 b_index, c_index);
  
        return b->prev_bb == ENTRY_BLOCK_PTR ? b : b->prev_bb;
*************** merge_blocks_move (edge e, basic_block b
*** 798,803 ****
--- 843,849 ----
        edge tmp_edge, b_fallthru_edge;
        bool c_has_outgoing_fallthru;
        bool b_has_incoming_fallthru;
+       edge_iterator ei;
  
        /* Avoid overactive code motion, as the forwarder blocks should be
           eliminated by edge redirection instead.  One exception might have
*************** merge_blocks_move (edge e, basic_block b
*** 810,822 ****
  	 and loop notes.  This is done by squeezing out all the notes
  	 and leaving them there to lie.  Not ideal, but functional.  */
  
!       for (tmp_edge = c->succ; tmp_edge; tmp_edge = tmp_edge->succ_next)
  	if (tmp_edge->flags & EDGE_FALLTHRU)
  	  break;
  
        c_has_outgoing_fallthru = (tmp_edge != NULL);
  
!       for (tmp_edge = b->pred; tmp_edge; tmp_edge = tmp_edge->pred_next)
  	if (tmp_edge->flags & EDGE_FALLTHRU)
  	  break;
  
--- 856,868 ----
  	 and loop notes.  This is done by squeezing out all the notes
  	 and leaving them there to lie.  Not ideal, but functional.  */
  
!       FOR_EACH_EDGE (tmp_edge, ei, c->succs)
  	if (tmp_edge->flags & EDGE_FALLTHRU)
  	  break;
  
        c_has_outgoing_fallthru = (tmp_edge != NULL);
  
!       FOR_EACH_EDGE (tmp_edge, ei, b->preds)
  	if (tmp_edge->flags & EDGE_FALLTHRU)
  	  break;
  
*************** merge_memattrs (rtx x, rtx y)
*** 891,896 ****
--- 937,944 ----
  	MEM_ATTRS (x) = 0;
        else 
  	{
+ 	  rtx mem_size;
+ 
  	  if (MEM_ALIAS_SET (x) != MEM_ALIAS_SET (y))
  	    {
  	      set_mem_alias_set (x, 0);
*************** merge_memattrs (rtx x, rtx y)
*** 909,917 ****
  	      set_mem_offset (x, 0);
  	      set_mem_offset (y, 0);
  	    }
! 	  
! 	  set_mem_size (x, MAX (MEM_SIZE (x), MEM_SIZE (y)));
! 	  set_mem_size (y, MEM_SIZE (x));
  
  	  set_mem_align (x, MIN (MEM_ALIGN (x), MEM_ALIGN (y)));
  	  set_mem_align (y, MEM_ALIGN (x));
--- 957,972 ----
  	      set_mem_offset (x, 0);
  	      set_mem_offset (y, 0);
  	    }
! 	 
! 	  if (!MEM_SIZE (x))
! 	    mem_size = NULL_RTX;
! 	  else if (!MEM_SIZE (y))
! 	    mem_size = NULL_RTX;
! 	  else
! 	    mem_size = GEN_INT (MAX (INTVAL (MEM_SIZE (x)),
! 				     INTVAL (MEM_SIZE (y))));
! 	  set_mem_size (x, mem_size);
! 	  set_mem_size (y, mem_size);
  
  	  set_mem_align (x, MIN (MEM_ALIGN (x), MEM_ALIGN (y)));
  	  set_mem_align (y, MEM_ALIGN (x));
*************** insns_match_p (int mode ATTRIBUTE_UNUSED
*** 968,974 ****
       ??? We take the simple route for now and assume that if they're
       equal, they were constructed identically.  */
  
!   if (GET_CODE (i1) == CALL_INSN
        && (!rtx_equal_p (CALL_INSN_FUNCTION_USAGE (i1),
  		        CALL_INSN_FUNCTION_USAGE (i2))
  	  || SIBLING_CALL_P (i1) != SIBLING_CALL_P (i2)))
--- 1023,1029 ----
       ??? We take the simple route for now and assume that if they're
       equal, they were constructed identically.  */
  
!   if (CALL_P (i1)
        && (!rtx_equal_p (CALL_INSN_FUNCTION_USAGE (i1),
  		        CALL_INSN_FUNCTION_USAGE (i2))
  	  || SIBLING_CALL_P (i1) != SIBLING_CALL_P (i2)))
*************** flow_find_cross_jump (int mode ATTRIBUTE
*** 1146,1158 ****
        while (last1 != BB_HEAD (bb1) && !INSN_P (PREV_INSN (last1)))
  	last1 = PREV_INSN (last1);
  
!       if (last1 != BB_HEAD (bb1) && GET_CODE (PREV_INSN (last1)) == CODE_LABEL)
  	last1 = PREV_INSN (last1);
  
        while (last2 != BB_HEAD (bb2) && !INSN_P (PREV_INSN (last2)))
  	last2 = PREV_INSN (last2);
  
!       if (last2 != BB_HEAD (bb2) && GET_CODE (PREV_INSN (last2)) == CODE_LABEL)
  	last2 = PREV_INSN (last2);
  
        *f1 = last1;
--- 1201,1213 ----
        while (last1 != BB_HEAD (bb1) && !INSN_P (PREV_INSN (last1)))
  	last1 = PREV_INSN (last1);
  
!       if (last1 != BB_HEAD (bb1) && LABEL_P (PREV_INSN (last1)))
  	last1 = PREV_INSN (last1);
  
        while (last2 != BB_HEAD (bb2) && !INSN_P (PREV_INSN (last2)))
  	last2 = PREV_INSN (last2);
  
!       if (last2 != BB_HEAD (bb2) && LABEL_P (PREV_INSN (last2)))
  	last2 = PREV_INSN (last2);
  
        *f1 = last1;
*************** outgoing_edges_match (int mode, basic_bl
*** 1174,1194 ****
    int nehedges1 = 0, nehedges2 = 0;
    edge fallthru1 = 0, fallthru2 = 0;
    edge e1, e2;
  
    /* If BB1 has only one successor, we may be looking at either an
       unconditional jump, or a fake edge to exit.  */
!   if (bb1->succ && !bb1->succ->succ_next
!       && (bb1->succ->flags & (EDGE_COMPLEX | EDGE_FAKE)) == 0
!       && (GET_CODE (BB_END (bb1)) != JUMP_INSN || simplejump_p (BB_END (bb1))))
!     return (bb2->succ &&  !bb2->succ->succ_next
! 	    && (bb2->succ->flags & (EDGE_COMPLEX | EDGE_FAKE)) == 0
! 	    && (GET_CODE (BB_END (bb2)) != JUMP_INSN || simplejump_p (BB_END (bb2))));
  
    /* Match conditional jumps - this may get tricky when fallthru and branch
       edges are crossed.  */
!   if (bb1->succ
!       && bb1->succ->succ_next
!       && !bb1->succ->succ_next->succ_next
        && any_condjump_p (BB_END (bb1))
        && onlyjump_p (BB_END (bb1)))
      {
--- 1229,1248 ----
    int nehedges1 = 0, nehedges2 = 0;
    edge fallthru1 = 0, fallthru2 = 0;
    edge e1, e2;
+   edge_iterator ei;
  
    /* If BB1 has only one successor, we may be looking at either an
       unconditional jump, or a fake edge to exit.  */
!   if (EDGE_COUNT (bb1->succs) == 1
!       && (EDGE_SUCC (bb1, 0)->flags & (EDGE_COMPLEX | EDGE_FAKE)) == 0
!       && (!JUMP_P (BB_END (bb1)) || simplejump_p (BB_END (bb1))))
!     return (EDGE_COUNT (bb2->succs) == 1
! 	    && (EDGE_SUCC (bb2, 0)->flags & (EDGE_COMPLEX | EDGE_FAKE)) == 0
! 	    && (!JUMP_P (BB_END (bb2)) || simplejump_p (BB_END (bb2))));
  
    /* Match conditional jumps - this may get tricky when fallthru and branch
       edges are crossed.  */
!   if (EDGE_COUNT (bb1->succs) == 2
        && any_condjump_p (BB_END (bb1))
        && onlyjump_p (BB_END (bb1)))
      {
*************** outgoing_edges_match (int mode, basic_bl
*** 1197,1205 ****
        rtx set1, set2, cond1, cond2;
        enum rtx_code code1, code2;
  
!       if (!bb2->succ
! 	  || !bb2->succ->succ_next
! 	  || bb2->succ->succ_next->succ_next
  	  || !any_condjump_p (BB_END (bb2))
  	  || !onlyjump_p (BB_END (bb2)))
  	return false;
--- 1251,1257 ----
        rtx set1, set2, cond1, cond2;
        enum rtx_code code1, code2;
  
!       if (EDGE_COUNT (bb2->succs) != 2
  	  || !any_condjump_p (BB_END (bb2))
  	  || !onlyjump_p (BB_END (bb2)))
  	return false;
*************** outgoing_edges_match (int mode, basic_bl
*** 1212,1221 ****
        /* Get around possible forwarders on fallthru edges.  Other cases
           should be optimized out already.  */
        if (FORWARDER_BLOCK_P (f1->dest))
! 	f1 = f1->dest->succ;
  
        if (FORWARDER_BLOCK_P (f2->dest))
! 	f2 = f2->dest->succ;
  
        /* To simplify use of this function, return false if there are
  	 unneeded forwarder blocks.  These will get eliminated later
--- 1264,1273 ----
        /* Get around possible forwarders on fallthru edges.  Other cases
           should be optimized out already.  */
        if (FORWARDER_BLOCK_P (f1->dest))
! 	f1 = EDGE_SUCC (f1->dest, 0);
  
        if (FORWARDER_BLOCK_P (f2->dest))
! 	f2 = EDGE_SUCC (f2->dest, 0);
  
        /* To simplify use of this function, return false if there are
  	 unneeded forwarder blocks.  These will get eliminated later
*************** outgoing_edges_match (int mode, basic_bl
*** 1282,1298 ****
  	     outcomes.  */
  	  if (abs (b1->probability - prob2) > REG_BR_PROB_BASE / 2)
  	    {
! 	      if (rtl_dump_file)
! 		fprintf (rtl_dump_file,
! 			 "Outcomes of branch in bb %i and %i differs to much (%i %i)\n",
  			 bb1->index, bb2->index, b1->probability, prob2);
  
  	      return false;
  	    }
  	}
  
!       if (rtl_dump_file && match)
! 	fprintf (rtl_dump_file, "Conditionals in bb %i and %i match.\n",
  		 bb1->index, bb2->index);
  
        return match;
--- 1334,1350 ----
  	     outcomes.  */
  	  if (abs (b1->probability - prob2) > REG_BR_PROB_BASE / 2)
  	    {
! 	      if (dump_file)
! 		fprintf (dump_file,
! 			 "Outcomes of branch in bb %i and %i differ too much (%i %i)\n",
  			 bb1->index, bb2->index, b1->probability, prob2);
  
  	      return false;
  	    }
  	}
  
!       if (dump_file && match)
! 	fprintf (dump_file, "Conditionals in bb %i and %i match.\n",
  		 bb1->index, bb2->index);
  
        return match;
*************** outgoing_edges_match (int mode, basic_bl
*** 1301,1307 ****
    /* Generic case - we are seeing a computed jump, table jump or trapping
       instruction.  */
  
- #ifndef CASE_DROPS_THROUGH
    /* Check whether there are tablejumps in the end of BB1 and BB2.
       Return true if they are identical.  */
      {
--- 1353,1358 ----
*************** outgoing_edges_match (int mode, basic_bl
*** 1315,1321 ****
  	  /* The labels should never be the same rtx.  If they really are same
  	     the jump tables are same too. So disable crossjumping of blocks BB1
  	     and BB2 because when deleting the common insns in the end of BB1
! 	     by delete_block () the jump table would be deleted too.  */
  	  /* If LABEL2 is referenced in BB1->END do not do anything
  	     because we would loose information when replacing
  	     LABEL1 by LABEL2 and then LABEL2 by LABEL1 in BB1->END.  */
--- 1366,1372 ----
  	  /* The labels should never be the same rtx.  If they really are same
  	     the jump tables are same too. So disable crossjumping of blocks BB1
  	     and BB2 because when deleting the common insns in the end of BB1
! 	     by delete_basic_block () the jump table would be deleted too.  */
  	  /* If LABEL2 is referenced in BB1->END do not do anything
  	     because we would loose information when replacing
  	     LABEL1 by LABEL2 and then LABEL2 by LABEL1 in BB1->END.  */
*************** outgoing_edges_match (int mode, basic_bl
*** 1357,1364 ****
  		  for_each_rtx (&BB_END (bb1), replace_label, &rr);
  
  		  match = insns_match_p (mode, BB_END (bb1), BB_END (bb2));
! 		  if (rtl_dump_file && match)
! 		    fprintf (rtl_dump_file,
  			     "Tablejumps in bb %i and %i match.\n",
  			     bb1->index, bb2->index);
  
--- 1408,1415 ----
  		  for_each_rtx (&BB_END (bb1), replace_label, &rr);
  
  		  match = insns_match_p (mode, BB_END (bb1), BB_END (bb2));
! 		  if (dump_file && match)
! 		    fprintf (dump_file,
  			     "Tablejumps in bb %i and %i match.\n",
  			     bb1->index, bb2->index);
  
*************** outgoing_edges_match (int mode, basic_bl
*** 1375,1381 ****
  	  return false;
  	}
      }
- #endif
  
    /* First ensure that the instructions match.  There may be many outgoing
       edges so this test is generally cheaper.  */
--- 1426,1431 ----
*************** outgoing_edges_match (int mode, basic_bl
*** 1385,1393 ****
    /* Search the outgoing edges, ensure that the counts do match, find possible
       fallthru and exception handling edges since these needs more
       validation.  */
!   for (e1 = bb1->succ, e2 = bb2->succ; e1 && e2;
!        e1 = e1->succ_next, e2 = e2->succ_next)
      {
        if (e1->flags & EDGE_EH)
  	nehedges1++;
  
--- 1435,1447 ----
    /* Search the outgoing edges, ensure that the counts do match, find possible
       fallthru and exception handling edges since these needs more
       validation.  */
!   if (EDGE_COUNT (bb1->succs) != EDGE_COUNT (bb2->succs))
!     return false;
! 
!   FOR_EACH_EDGE (e1, ei, bb1->succs)
      {
+       e2 = EDGE_SUCC (bb2, ei.index);
+       
        if (e1->flags & EDGE_EH)
  	nehedges1++;
  
*************** outgoing_edges_match (int mode, basic_bl
*** 1401,1408 ****
      }
  
    /* If number of edges of various types does not match, fail.  */
!   if (e1 || e2
!       || nehedges1 != nehedges2
        || (fallthru1 != 0) != (fallthru2 != 0))
      return false;
  
--- 1455,1461 ----
      }
  
    /* If number of edges of various types does not match, fail.  */
!   if (nehedges1 != nehedges2
        || (fallthru1 != 0) != (fallthru2 != 0))
      return false;
  
*************** outgoing_edges_match (int mode, basic_bl
*** 1410,1418 ****
    if (fallthru1)
      {
        basic_block d1 = (forwarder_block_p (fallthru1->dest)
! 			? fallthru1->dest->succ->dest: fallthru1->dest);
        basic_block d2 = (forwarder_block_p (fallthru2->dest)
! 			? fallthru2->dest->succ->dest: fallthru2->dest);
  
        if (d1 != d2)
  	return false;
--- 1463,1471 ----
    if (fallthru1)
      {
        basic_block d1 = (forwarder_block_p (fallthru1->dest)
! 			? EDGE_SUCC (fallthru1->dest, 0)->dest: fallthru1->dest);
        basic_block d2 = (forwarder_block_p (fallthru2->dest)
! 			? EDGE_SUCC (fallthru2->dest, 0)->dest: fallthru2->dest);
  
        if (d1 != d2)
  	return false;
*************** try_crossjump_to_edge (int mode, edge e1
*** 1447,1466 ****
    basic_block redirect_to, redirect_from, to_remove;
    rtx newpos1, newpos2;
    edge s;
  
    /* Search backward through forwarder blocks.  We don't need to worry
       about multiple entry or chained forwarders, as they will be optimized
       away.  We do this to look past the unconditional jump following a
       conditional jump that is required due to the current CFG shape.  */
!   if (src1->pred
!       && !src1->pred->pred_next
        && FORWARDER_BLOCK_P (src1))
!     e1 = src1->pred, src1 = e1->src;
  
!   if (src2->pred
!       && !src2->pred->pred_next
        && FORWARDER_BLOCK_P (src2))
!     e2 = src2->pred, src2 = e2->src;
  
    /* Nothing to do if we reach ENTRY, or a common source block.  */
    if (src1 == ENTRY_BLOCK_PTR || src2 == ENTRY_BLOCK_PTR)
--- 1500,1532 ----
    basic_block redirect_to, redirect_from, to_remove;
    rtx newpos1, newpos2;
    edge s;
+   edge_iterator ei;
+ 
+   newpos1 = newpos2 = NULL_RTX;
+ 
+   /* If we have partitioned hot/cold basic blocks, it is a bad idea
+      to try this optimization. 
+ 
+      Basic block partitioning may result in some jumps that appear to
+      be optimizable (or blocks that appear to be mergeable), but which really 
+      must be left untouched (they are required to make it safely across 
+      partition boundaries).  See the comments at the top of 
+      bb-reorder.c:partition_hot_cold_basic_blocks for complete details.  */
+ 
+   if (flag_reorder_blocks_and_partition && no_new_pseudos)
+     return false;
  
    /* Search backward through forwarder blocks.  We don't need to worry
       about multiple entry or chained forwarders, as they will be optimized
       away.  We do this to look past the unconditional jump following a
       conditional jump that is required due to the current CFG shape.  */
!   if (EDGE_COUNT (src1->preds) == 1
        && FORWARDER_BLOCK_P (src1))
!     e1 = EDGE_PRED (src1, 0), src1 = e1->src;
  
!   if (EDGE_COUNT (src2->preds) == 1
        && FORWARDER_BLOCK_P (src2))
!     e2 = EDGE_PRED (src2, 0), src2 = e2->src;
  
    /* Nothing to do if we reach ENTRY, or a common source block.  */
    if (src1 == ENTRY_BLOCK_PTR || src2 == ENTRY_BLOCK_PTR)
*************** try_crossjump_to_edge (int mode, edge e1
*** 1470,1485 ****
  
    /* Seeing more than 1 forwarder blocks would confuse us later...  */
    if (FORWARDER_BLOCK_P (e1->dest)
!       && FORWARDER_BLOCK_P (e1->dest->succ->dest))
      return false;
  
    if (FORWARDER_BLOCK_P (e2->dest)
!       && FORWARDER_BLOCK_P (e2->dest->succ->dest))
      return false;
  
    /* Likewise with dead code (possibly newly created by the other optimizations
       of cfg_cleanup).  */
!   if (!src1->pred || !src2->pred)
      return false;
  
    /* Look for the common insn sequence, part the first ...  */
--- 1536,1551 ----
  
    /* Seeing more than 1 forwarder blocks would confuse us later...  */
    if (FORWARDER_BLOCK_P (e1->dest)
!       && FORWARDER_BLOCK_P (EDGE_SUCC (e1->dest, 0)->dest))
      return false;
  
    if (FORWARDER_BLOCK_P (e2->dest)
!       && FORWARDER_BLOCK_P (EDGE_SUCC (e2->dest, 0)->dest))
      return false;
  
    /* Likewise with dead code (possibly newly created by the other optimizations
       of cfg_cleanup).  */
!   if (EDGE_COUNT (src1->preds) == 0 || EDGE_COUNT (src2->preds) == 0)
      return false;
  
    /* Look for the common insn sequence, part the first ...  */
*************** try_crossjump_to_edge (int mode, edge e1
*** 1488,1497 ****
  
    /* ... and part the second.  */
    nmatch = flow_find_cross_jump (mode, src1, src2, &newpos1, &newpos2);
!   if (!nmatch)
      return false;
  
- #ifndef CASE_DROPS_THROUGH
    /* Here we know that the insns in the end of SRC1 which are common with SRC2
       will be deleted.
       If we have tablejumps in the end of SRC1 and SRC2
--- 1554,1568 ----
  
    /* ... and part the second.  */
    nmatch = flow_find_cross_jump (mode, src1, src2, &newpos1, &newpos2);
! 
!   /* Don't proceed with the crossjump unless we found a sufficient number
!      of matching instructions or the 'from' block was totally matched
!      (such that its predecessors will hopefully be redirected and the
!      block removed).  */
!   if ((nmatch < PARAM_VALUE (PARAM_MIN_CROSSJUMP_INSNS))
!       && (newpos1 != BB_HEAD (src1)))
      return false;
  
    /* Here we know that the insns in the end of SRC1 which are common with SRC2
       will be deleted.
       If we have tablejumps in the end of SRC1 and SRC2
*************** try_crossjump_to_edge (int mode, edge e1
*** 1522,1542 ****
  	    }
  	}
      }
- #endif
  
    /* Avoid splitting if possible.  */
    if (newpos2 == BB_HEAD (src2))
      redirect_to = src2;
    else
      {
!       if (rtl_dump_file)
! 	fprintf (rtl_dump_file, "Splitting bb %i before %i insns\n",
  		 src2->index, nmatch);
        redirect_to = split_block (src2, PREV_INSN (newpos2))->dest;
      }
  
!   if (rtl_dump_file)
!     fprintf (rtl_dump_file,
  	     "Cross jumping from bb %i to bb %i; %i common insns\n",
  	     src1->index, src2->index, nmatch);
  
--- 1593,1612 ----
  	    }
  	}
      }
  
    /* Avoid splitting if possible.  */
    if (newpos2 == BB_HEAD (src2))
      redirect_to = src2;
    else
      {
!       if (dump_file)
! 	fprintf (dump_file, "Splitting bb %i before %i insns\n",
  		 src2->index, nmatch);
        redirect_to = split_block (src2, PREV_INSN (newpos2))->dest;
      }
  
!   if (dump_file)
!     fprintf (dump_file,
  	     "Cross jumping from bb %i to bb %i; %i common insns\n",
  	     src1->index, src2->index, nmatch);
  
*************** try_crossjump_to_edge (int mode, edge e1
*** 1546,1564 ****
    redirect_to->flags |= BB_DIRTY;
  
    /* Recompute the frequencies and counts of outgoing edges.  */
!   for (s = redirect_to->succ; s; s = s->succ_next)
      {
        edge s2;
        basic_block d = s->dest;
  
        if (FORWARDER_BLOCK_P (d))
! 	d = d->succ->dest;
  
!       for (s2 = src1->succ; ; s2 = s2->succ_next)
  	{
  	  basic_block d2 = s2->dest;
  	  if (FORWARDER_BLOCK_P (d2))
! 	    d2 = d2->succ->dest;
  	  if (d == d2)
  	    break;
  	}
--- 1616,1635 ----
    redirect_to->flags |= BB_DIRTY;
  
    /* Recompute the frequencies and counts of outgoing edges.  */
!   FOR_EACH_EDGE (s, ei, redirect_to->succs)
      {
        edge s2;
+       edge_iterator ei;
        basic_block d = s->dest;
  
        if (FORWARDER_BLOCK_P (d))
! 	d = EDGE_SUCC (d, 0)->dest;
  
!       FOR_EACH_EDGE (s2, ei, src1->succs)
  	{
  	  basic_block d2 = s2->dest;
  	  if (FORWARDER_BLOCK_P (d2))
! 	    d2 = EDGE_SUCC (d2, 0)->dest;
  	  if (d == d2)
  	    break;
  	}
*************** try_crossjump_to_edge (int mode, edge e1
*** 1570,1585 ****
           into infinite loop.  */
        if (FORWARDER_BLOCK_P (s->dest))
  	{
! 	  s->dest->succ->count += s2->count;
  	  s->dest->count += s2->count;
  	  s->dest->frequency += EDGE_FREQUENCY (s);
  	}
  
        if (FORWARDER_BLOCK_P (s2->dest))
  	{
! 	  s2->dest->succ->count -= s2->count;
! 	  if (s2->dest->succ->count < 0)
! 	    s2->dest->succ->count = 0;
  	  s2->dest->count -= s2->count;
  	  s2->dest->frequency -= EDGE_FREQUENCY (s);
  	  if (s2->dest->frequency < 0)
--- 1641,1656 ----
           into infinite loop.  */
        if (FORWARDER_BLOCK_P (s->dest))
  	{
! 	  EDGE_SUCC (s->dest, 0)->count += s2->count;
  	  s->dest->count += s2->count;
  	  s->dest->frequency += EDGE_FREQUENCY (s);
  	}
  
        if (FORWARDER_BLOCK_P (s2->dest))
  	{
! 	  EDGE_SUCC (s2->dest, 0)->count -= s2->count;
! 	  if (EDGE_SUCC (s2->dest, 0)->count < 0)
! 	    EDGE_SUCC (s2->dest, 0)->count = 0;
  	  s2->dest->count -= s2->count;
  	  s2->dest->frequency -= EDGE_FREQUENCY (s);
  	  if (s2->dest->frequency < 0)
*************** try_crossjump_to_edge (int mode, edge e1
*** 1602,1618 ****
    /* Edit SRC1 to go to REDIRECT_TO at NEWPOS1.  */
  
    /* Skip possible basic block header.  */
!   if (GET_CODE (newpos1) == CODE_LABEL)
      newpos1 = NEXT_INSN (newpos1);
  
!   if (GET_CODE (newpos1) == NOTE)
      newpos1 = NEXT_INSN (newpos1);
  
    redirect_from = split_block (src1, PREV_INSN (newpos1))->src;
!   to_remove = redirect_from->succ->dest;
  
!   redirect_edge_and_branch_force (redirect_from->succ, redirect_to);
!   delete_block (to_remove);
  
    update_forwarder_flag (redirect_from);
  
--- 1673,1689 ----
    /* Edit SRC1 to go to REDIRECT_TO at NEWPOS1.  */
  
    /* Skip possible basic block header.  */
!   if (LABEL_P (newpos1))
      newpos1 = NEXT_INSN (newpos1);
  
!   if (NOTE_P (newpos1))
      newpos1 = NEXT_INSN (newpos1);
  
    redirect_from = split_block (src1, PREV_INSN (newpos1))->src;
!   to_remove = EDGE_SUCC (redirect_from, 0)->dest;
  
!   redirect_edge_and_branch_force (EDGE_SUCC (redirect_from, 0), redirect_to);
!   delete_basic_block (to_remove);
  
    update_forwarder_flag (redirect_from);
  
*************** try_crossjump_to_edge (int mode, edge e1
*** 1626,1637 ****
  static bool
  try_crossjump_bb (int mode, basic_block bb)
  {
!   edge e, e2, nexte2, nexte, fallthru;
    bool changed;
!   int n = 0, max;
  
    /* Nothing to do if there is not at least two incoming edges.  */
!   if (!bb->pred || !bb->pred->pred_next)
      return false;
  
    /* It is always cheapest to redirect a block that ends in a branch to
--- 1697,1732 ----
  static bool
  try_crossjump_bb (int mode, basic_block bb)
  {
!   edge e, e2, fallthru;
    bool changed;
!   unsigned max, ix, ix2;
!   basic_block ev, ev2;
!   edge_iterator ei;
  
    /* Nothing to do if there is not at least two incoming edges.  */
!   if (EDGE_COUNT (bb->preds) < 2)
!     return false;
! 
!   /* Don't crossjump if this block ends in a computed jump,
!      unless we are optimizing for size.  */
!   if (!optimize_size
!       && bb != EXIT_BLOCK_PTR
!       && computed_jump_p (BB_END (bb)))
!     return false;
! 
!   /* If we are partitioning hot/cold basic blocks, we don't want to
!      mess up unconditional or indirect jumps that cross between hot
!      and cold sections. 
!   
!      Basic block partitioning may result in some jumps that appear to
!      be optimizable (or blocks that appear to be mergeable), but which really 
!      must be left untouched (they are required to make it safely across 
!      partition boundaries).  See the comments at the top of 
!      bb-reorder.c:partition_hot_cold_basic_blocks for complete details.  */
! 
!   if (flag_reorder_blocks_and_partition
!       && (BB_PARTITION (EDGE_PRED (bb, 0)->src) != BB_PARTITION (EDGE_PRED (bb, 1)->src)
! 	  || (EDGE_PRED (bb, 0)->flags & EDGE_CROSSING)))
      return false;
  
    /* It is always cheapest to redirect a block that ends in a branch to
*************** try_crossjump_bb (int mode, basic_block 
*** 1639,1656 ****
       program.  We'll try that combination first.  */
    fallthru = NULL;
    max = PARAM_VALUE (PARAM_MAX_CROSSJUMP_EDGES);
!   for (e = bb->pred; e ; e = e->pred_next, n++)
      {
        if (e->flags & EDGE_FALLTHRU)
! 	fallthru = e;
!       if (n > max)
! 	return false;
      }
  
    changed = false;
!   for (e = bb->pred; e; e = nexte)
      {
!       nexte = e->pred_next;
  
        /* As noted above, first try with the fallthru predecessor.  */
        if (fallthru)
--- 1734,1754 ----
       program.  We'll try that combination first.  */
    fallthru = NULL;
    max = PARAM_VALUE (PARAM_MAX_CROSSJUMP_EDGES);
! 
!   if (EDGE_COUNT (bb->preds) > max)
!     return false;
! 
!   FOR_EACH_EDGE (e, ei, bb->preds)
      {
        if (e->flags & EDGE_FALLTHRU)
!         fallthru = e;
      }
  
    changed = false;
!   for (ix = 0, ev = bb; ix < EDGE_COUNT (ev->preds); )
      {
!       e = EDGE_PRED (ev, ix);
!       ix++;
  
        /* As noted above, first try with the fallthru predecessor.  */
        if (fallthru)
*************** try_crossjump_bb (int mode, basic_block 
*** 1659,1669 ****
  	     If there is a match, we'll do it the other way around.  */
  	  if (e == fallthru)
  	    continue;
  
  	  if (try_crossjump_to_edge (mode, e, fallthru))
  	    {
  	      changed = true;
! 	      nexte = bb->pred;
  	      continue;
  	    }
  	}
--- 1757,1774 ----
  	     If there is a match, we'll do it the other way around.  */
  	  if (e == fallthru)
  	    continue;
+ 	  /* If nothing changed since the last attempt, there is nothing
+ 	     we can do.  */
+ 	  if (!first_pass
+ 	      && (!(e->src->flags & BB_DIRTY)
+ 		  && !(fallthru->src->flags & BB_DIRTY)))
+ 	    continue;
  
  	  if (try_crossjump_to_edge (mode, e, fallthru))
  	    {
  	      changed = true;
! 	      ix = 0;
! 	      ev = bb;
  	      continue;
  	    }
  	}
*************** try_crossjump_bb (int mode, basic_block 
*** 1680,1691 ****
  	 can eliminate redundant checks of crossjump(A,B) by arbitrarily
  	 choosing to do the check from the block for which the edge
  	 in question is the first successor of A.  */
!       if (e->src->succ != e)
  	continue;
  
!       for (e2 = bb->pred; e2; e2 = nexte2)
  	{
! 	  nexte2 = e2->pred_next;
  
  	  if (e2 == e)
  	    continue;
--- 1785,1797 ----
  	 can eliminate redundant checks of crossjump(A,B) by arbitrarily
  	 choosing to do the check from the block for which the edge
  	 in question is the first successor of A.  */
!       if (EDGE_SUCC (e->src, 0) != e)
  	continue;
  
!       for (ix2 = 0, ev2 = bb; ix2 < EDGE_COUNT (ev2->preds); )
  	{
! 	  e2 = EDGE_PRED (ev2, ix2);
! 	  ix2++;
  
  	  if (e2 == e)
  	    continue;
*************** try_crossjump_bb (int mode, basic_block 
*** 1701,1710 ****
  	  if (e->src->index > e2->src->index)
  	    continue;
  
  	  if (try_crossjump_to_edge (mode, e, e2))
  	    {
  	      changed = true;
! 	      nexte = bb->pred;
  	      break;
  	    }
  	}
--- 1807,1824 ----
  	  if (e->src->index > e2->src->index)
  	    continue;
  
+ 	  /* If nothing changed since the last attempt, there is nothing
+ 	     we can do.  */
+ 	  if (!first_pass
+ 	      && (!(e->src->flags & BB_DIRTY)
+ 		  && !(e2->src->flags & BB_DIRTY)))
+ 	    continue;
+ 
  	  if (try_crossjump_to_edge (mode, e, e2))
  	    {
  	      changed = true;
! 	      ev2 = bb;
! 	      ix = 0;
  	      break;
  	    }
  	}
*************** try_optimize_cfg (int mode)
*** 1730,1740 ****
    FOR_EACH_BB (bb)
      update_forwarder_flag (bb);
  
!   if (mode & CLEANUP_UPDATE_LIFE)
      clear_bb_flags ();
  
!   if (! (* targetm.cannot_modify_jumps_p) ())
      {
        /* Attempt to merge blocks as made possible by edge removal.  If
  	 a block has only one successor, and the successor has only
  	 one predecessor, they may be combined.  */
--- 1844,1855 ----
    FOR_EACH_BB (bb)
      update_forwarder_flag (bb);
  
!   if (mode & (CLEANUP_UPDATE_LIFE | CLEANUP_CROSSJUMP | CLEANUP_THREADING))
      clear_bb_flags ();
  
!   if (! targetm.cannot_modify_jumps_p ())
      {
+       first_pass = true;
        /* Attempt to merge blocks as made possible by edge removal.  If
  	 a block has only one successor, and the successor has only
  	 one predecessor, they may be combined.  */
*************** try_optimize_cfg (int mode)
*** 1743,1750 ****
  	  changed = false;
  	  iterations++;
  
! 	  if (rtl_dump_file)
! 	    fprintf (rtl_dump_file,
  		     "\n\ntry_optimize_cfg iteration %i\n\n",
  		     iterations);
  
--- 1858,1865 ----
  	  changed = false;
  	  iterations++;
  
! 	  if (dump_file)
! 	    fprintf (dump_file,
  		     "\n\ntry_optimize_cfg iteration %i\n\n",
  		     iterations);
  
*************** try_optimize_cfg (int mode)
*** 1755,1792 ****
  	      bool changed_here = false;
  
  	      /* Delete trivially dead basic blocks.  */
! 	      while (b->pred == NULL)
  		{
  		  c = b->prev_bb;
! 		  if (rtl_dump_file)
! 		    fprintf (rtl_dump_file, "Deleting block %i.\n",
  			     b->index);
  
! 		  delete_block (b);
  		  if (!(mode & CLEANUP_CFGLAYOUT))
  		    changed = true;
  		  b = c;
  		}
  
! 	      /* Remove code labels no longer used.  Don't do this
! 		 before CALL_PLACEHOLDER is removed, as some branches
! 		 may be hidden within.  */
! 	      if (b->pred->pred_next == NULL
! 		  && (b->pred->flags & EDGE_FALLTHRU)
! 		  && !(b->pred->flags & EDGE_COMPLEX)
! 		  && GET_CODE (BB_HEAD (b)) == CODE_LABEL
! 		  && (!(mode & CLEANUP_PRE_SIBCALL)
! 		      || !tail_recursion_label_p (BB_HEAD (b)))
  		  /* If the previous block ends with a branch to this
  		     block, we can't delete the label.  Normally this
  		     is a condjump that is yet to be simplified, but
  		     if CASE_DROPS_THRU, this can be a tablejump with
  		     some element going to the same place as the
  		     default (fallthru).  */
! 		  && (b->pred->src == ENTRY_BLOCK_PTR
! 		      || GET_CODE (BB_END (b->pred->src)) != JUMP_INSN
  		      || ! label_is_jump_target_p (BB_HEAD (b),
! 						   BB_END (b->pred->src))))
  		{
  		  rtx label = BB_HEAD (b);
  
--- 1870,1903 ----
  	      bool changed_here = false;
  
  	      /* Delete trivially dead basic blocks.  */
! 	      while (EDGE_COUNT (b->preds) == 0)
  		{
  		  c = b->prev_bb;
! 		  if (dump_file)
! 		    fprintf (dump_file, "Deleting block %i.\n",
  			     b->index);
  
! 		  delete_basic_block (b);
  		  if (!(mode & CLEANUP_CFGLAYOUT))
  		    changed = true;
  		  b = c;
  		}
  
! 	      /* Remove code labels no longer used.  */
! 	      if (EDGE_COUNT (b->preds) == 1
! 		  && (EDGE_PRED (b, 0)->flags & EDGE_FALLTHRU)
! 		  && !(EDGE_PRED (b, 0)->flags & EDGE_COMPLEX)
! 		  && LABEL_P (BB_HEAD (b))
  		  /* If the previous block ends with a branch to this
  		     block, we can't delete the label.  Normally this
  		     is a condjump that is yet to be simplified, but
  		     if CASE_DROPS_THRU, this can be a tablejump with
  		     some element going to the same place as the
  		     default (fallthru).  */
! 		  && (EDGE_PRED (b, 0)->src == ENTRY_BLOCK_PTR
! 		      || !JUMP_P (BB_END (EDGE_PRED (b, 0)->src))
  		      || ! label_is_jump_target_p (BB_HEAD (b),
! 						   BB_END (EDGE_PRED (b, 0)->src))))
  		{
  		  rtx label = BB_HEAD (b);
  
*************** try_optimize_cfg (int mode)
*** 1800,1838 ****
  		      reorder_insns_nobb (label, label, bb_note);
  		      BB_HEAD (b) = bb_note;
  		    }
! 		  if (rtl_dump_file)
! 		    fprintf (rtl_dump_file, "Deleted label in block %i.\n",
  			     b->index);
  		}
  
  	      /* If we fall through an empty block, we can remove it.  */
  	      if (!(mode & CLEANUP_CFGLAYOUT)
! 		  && b->pred->pred_next == NULL
! 		  && (b->pred->flags & EDGE_FALLTHRU)
! 		  && GET_CODE (BB_HEAD (b)) != CODE_LABEL
  		  && FORWARDER_BLOCK_P (b)
  		  /* Note that forwarder_block_p true ensures that
  		     there is a successor for this block.  */
! 		  && (b->succ->flags & EDGE_FALLTHRU)
  		  && n_basic_blocks > 1)
  		{
! 		  if (rtl_dump_file)
! 		    fprintf (rtl_dump_file,
  			     "Deleting fallthru block %i.\n",
  			     b->index);
  
  		  c = b->prev_bb == ENTRY_BLOCK_PTR ? b->next_bb : b->prev_bb;
! 		  redirect_edge_succ_nodup (b->pred, b->succ->dest);
! 		  delete_block (b);
  		  changed = true;
  		  b = c;
  		}
  
! 	      if ((s = b->succ) != NULL
! 		  && s->succ_next == NULL
  		  && !(s->flags & EDGE_COMPLEX)
  		  && (c = s->dest) != EXIT_BLOCK_PTR
! 		  && c->pred->pred_next == NULL
  		  && b != c)
  		{
  		  /* When not in cfg_layout mode use code aware of reordering
--- 1911,1949 ----
  		      reorder_insns_nobb (label, label, bb_note);
  		      BB_HEAD (b) = bb_note;
  		    }
! 		  if (dump_file)
! 		    fprintf (dump_file, "Deleted label in block %i.\n",
  			     b->index);
  		}
  
  	      /* If we fall through an empty block, we can remove it.  */
  	      if (!(mode & CLEANUP_CFGLAYOUT)
! 		  && EDGE_COUNT (b->preds) == 1
! 		  && (EDGE_PRED (b, 0)->flags & EDGE_FALLTHRU)
! 		  && !LABEL_P (BB_HEAD (b))
  		  && FORWARDER_BLOCK_P (b)
  		  /* Note that forwarder_block_p true ensures that
  		     there is a successor for this block.  */
! 		  && (EDGE_SUCC (b, 0)->flags & EDGE_FALLTHRU)
  		  && n_basic_blocks > 1)
  		{
! 		  if (dump_file)
! 		    fprintf (dump_file,
  			     "Deleting fallthru block %i.\n",
  			     b->index);
  
  		  c = b->prev_bb == ENTRY_BLOCK_PTR ? b->next_bb : b->prev_bb;
! 		  redirect_edge_succ_nodup (EDGE_PRED (b, 0), EDGE_SUCC (b, 0)->dest);
! 		  delete_basic_block (b);
  		  changed = true;
  		  b = c;
  		}
  
! 	      if (EDGE_COUNT (b->succs) == 1
! 		  && (s = EDGE_SUCC (b, 0))
  		  && !(s->flags & EDGE_COMPLEX)
  		  && (c = s->dest) != EXIT_BLOCK_PTR
! 		  && EDGE_COUNT (c->preds) == 1
  		  && b != c)
  		{
  		  /* When not in cfg_layout mode use code aware of reordering
*************** try_optimize_cfg (int mode)
*** 1851,1860 ****
  		  else if (!(mode & CLEANUP_CFGLAYOUT)
  			   /* If the jump insn has side effects,
  			      we can't kill the edge.  */
! 			   && (GET_CODE (BB_END (b)) != JUMP_INSN
  			       || (reload_completed
  				   ? simplejump_p (BB_END (b))
! 				   : onlyjump_p (BB_END (b))))
  			   && (next = merge_blocks_move (s, b, c, mode)))
  		      {
  			b = next;
--- 1962,1973 ----
  		  else if (!(mode & CLEANUP_CFGLAYOUT)
  			   /* If the jump insn has side effects,
  			      we can't kill the edge.  */
! 			   && (!JUMP_P (BB_END (b))
  			       || (reload_completed
  				   ? simplejump_p (BB_END (b))
! 				   : (onlyjump_p (BB_END (b))
! 				      && !tablejump_p (BB_END (b),
! 						       NULL, NULL))))
  			   && (next = merge_blocks_move (s, b, c, mode)))
  		      {
  			b = next;
*************** try_optimize_cfg (int mode)
*** 1872,1882 ****
  		 non-trivial jump instruction without side-effects, we
  		 can either delete the jump entirely, or replace it
  		 with a simple unconditional jump.  */
! 	      if (b->succ
! 		  && ! b->succ->succ_next
! 		  && b->succ->dest != EXIT_BLOCK_PTR
  		  && onlyjump_p (BB_END (b))
! 		  && try_redirect_by_replacing_jump (b->succ, b->succ->dest,
  						     (mode & CLEANUP_CFGLAYOUT) != 0))
  		{
  		  update_forwarder_flag (b);
--- 1985,1995 ----
  		 non-trivial jump instruction without side-effects, we
  		 can either delete the jump entirely, or replace it
  		 with a simple unconditional jump.  */
! 	      if (EDGE_COUNT (b->succs) == 1
! 		  && EDGE_SUCC (b, 0)->dest != EXIT_BLOCK_PTR
  		  && onlyjump_p (BB_END (b))
! 		  && !find_reg_note (BB_END (b), REG_CROSSING_JUMP, NULL_RTX)
! 		  && try_redirect_by_replacing_jump (EDGE_SUCC (b, 0), EDGE_SUCC (b, 0)->dest,
  						     (mode & CLEANUP_CFGLAYOUT) != 0))
  		{
  		  update_forwarder_flag (b);
*************** try_optimize_cfg (int mode)
*** 1910,1921 ****
  #endif
  
  	  changed_overall |= changed;
  	}
        while (changed);
      }
  
    if (mode & CLEANUP_CROSSJUMP)
!     remove_fake_edges ();
  
    clear_aux_for_blocks ();
  
--- 2023,2035 ----
  #endif
  
  	  changed_overall |= changed;
+ 	  first_pass = false;
  	}
        while (changed);
      }
  
    if (mode & CLEANUP_CROSSJUMP)
!     remove_fake_exit_edges ();
  
    clear_aux_for_blocks ();
  
*************** delete_unreachable_blocks (void)
*** 1940,1946 ****
  
        if (!(b->flags & BB_REACHABLE))
  	{
! 	  delete_block (b);
  	  changed = true;
  	}
      }
--- 2054,2060 ----
  
        if (!(b->flags & BB_REACHABLE))
  	{
! 	  delete_basic_block (b);
  	  changed = true;
  	}
      }
*************** delete_unreachable_blocks (void)
*** 1949,1954 ****
--- 2063,2093 ----
      tidy_fallthru_edges ();
    return changed;
  }
+ 
+ /* Merges sequential blocks if possible.  */
+ 
+ bool
+ merge_seq_blocks (void)
+ {
+   basic_block bb;
+   bool changed = false;
+ 
+   for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; )
+     {
+       if (EDGE_COUNT (bb->succs) == 1
+ 	  && can_merge_blocks_p (bb, EDGE_SUCC (bb, 0)->dest))
+ 	{
+ 	  /* Merge the blocks and retry.  */
+ 	  merge_blocks (bb, EDGE_SUCC (bb, 0)->dest);
+ 	  changed = true;
+ 	  continue;
+ 	}
+ 
+       bb = bb->next_bb;
+     }
+ 
+   return changed;
+ }
  
  /* Tidy the CFG by deleting unreachable code and whatnot.  */
  
*************** cleanup_cfg (int mode)
*** 1963,1970 ****
        changed = true;
        /* We've possibly created trivially dead code.  Cleanup it right
  	 now to introduce more opportunities for try_optimize_cfg.  */
!       if (!(mode & (CLEANUP_NO_INSN_DEL
! 		    | CLEANUP_UPDATE_LIFE | CLEANUP_PRE_SIBCALL))
  	  && !reload_completed)
  	delete_trivially_dead_insns (get_insns(), max_reg_num ());
      }
--- 2102,2108 ----
        changed = true;
        /* We've possibly created trivially dead code.  Cleanup it right
  	 now to introduce more opportunities for try_optimize_cfg.  */
!       if (!(mode & (CLEANUP_NO_INSN_DEL | CLEANUP_UPDATE_LIFE))
  	  && !reload_completed)
  	delete_trivially_dead_insns (get_insns(), max_reg_num ());
      }
*************** cleanup_cfg (int mode)
*** 1987,1993 ****
  						    ? PROP_LOG_LINKS : 0)))
  	    break;
  	}
!       else if (!(mode & (CLEANUP_NO_INSN_DEL | CLEANUP_PRE_SIBCALL))
  	       && (mode & CLEANUP_EXPENSIVE)
  	       && !reload_completed)
  	{
--- 2125,2131 ----
  						    ? PROP_LOG_LINKS : 0)))
  	    break;
  	}
!       else if (!(mode & CLEANUP_NO_INSN_DEL)
  	       && (mode & CLEANUP_EXPENSIVE)
  	       && !reload_completed)
  	{
diff -Nrcpad gcc-3.4.3/gcc/cfgexpand.c gcc-4.0.0/gcc/cfgexpand.c
*** gcc-3.4.3/gcc/cfgexpand.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/cfgexpand.c	Thu Feb 24 21:47:19 2005
***************
*** 0 ****
--- 1,1365 ----
+ /* A pass for lowering trees to RTL.
+    Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GCC.
+ 
+ GCC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GCC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING.  If not, write to
+ the Free Software Foundation, 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.  */
+ 
+ #include "config.h"
+ #include "system.h"
+ #include "coretypes.h"
+ #include "tm.h"
+ #include "tree.h"
+ #include "rtl.h"
+ #include "tm_p.h"
+ #include "basic-block.h"
+ #include "function.h"
+ #include "expr.h"
+ #include "langhooks.h"
+ #include "tree-flow.h"
+ #include "timevar.h"
+ #include "tree-dump.h"
+ #include "tree-pass.h"
+ #include "except.h"
+ #include "flags.h"
+ #include "diagnostic.h"
+ #include "toplev.h"
+ 
+ /* Verify that there is exactly single jump instruction since last and attach
+    REG_BR_PROB note specifying probability.
+    ??? We really ought to pass the probability down to RTL expanders and let it
+    re-distribute it when the conditional expands into multiple conditionals.
+    This is however difficult to do.  */
+ static void
+ add_reg_br_prob_note (FILE *dump_file, rtx last, int probability)
+ {
+   if (profile_status == PROFILE_ABSENT)
+     return;
+   for (last = NEXT_INSN (last); last && NEXT_INSN (last); last = NEXT_INSN (last))
+     if (GET_CODE (last) == JUMP_INSN)
+       {
+ 	/* It is common to emit condjump-around-jump sequence when we don't know
+ 	   how to reverse the conditional.  Special case this.  */
+ 	if (!any_condjump_p (last)
+ 	    || GET_CODE (NEXT_INSN (last)) != JUMP_INSN
+ 	    || !simplejump_p (NEXT_INSN (last))
+ 	    || GET_CODE (NEXT_INSN (NEXT_INSN (last))) != BARRIER
+ 	    || GET_CODE (NEXT_INSN (NEXT_INSN (NEXT_INSN (last)))) != CODE_LABEL
+ 	    || NEXT_INSN (NEXT_INSN (NEXT_INSN (NEXT_INSN (last)))))
+ 	  goto failed;
+ 	if (find_reg_note (last, REG_BR_PROB, 0))
+ 	  abort ();
+ 	REG_NOTES (last)
+ 	  = gen_rtx_EXPR_LIST (REG_BR_PROB,
+ 			       GEN_INT (REG_BR_PROB_BASE - probability),
+ 			       REG_NOTES (last));
+ 	return;
+       }
+   if (!last || GET_CODE (last) != JUMP_INSN || !any_condjump_p (last))
+       goto failed;
+   if (find_reg_note (last, REG_BR_PROB, 0))
+     abort ();
+   REG_NOTES (last)
+     = gen_rtx_EXPR_LIST (REG_BR_PROB,
+ 			 GEN_INT (probability), REG_NOTES (last));
+   return;
+ failed:
+   if (dump_file)
+     fprintf (dump_file, "Failed to add probability note\n");
+ }
+ 
+ 
+ #ifndef LOCAL_ALIGNMENT
+ #define LOCAL_ALIGNMENT(TYPE, ALIGNMENT) ALIGNMENT
+ #endif
+ 
+ #ifndef STACK_ALIGNMENT_NEEDED
+ #define STACK_ALIGNMENT_NEEDED 1
+ #endif
+ 
+ #ifdef FRAME_GROWS_DOWNWARD
+ # undef FRAME_GROWS_DOWNWARD
+ # define FRAME_GROWS_DOWNWARD 1
+ #else
+ # define FRAME_GROWS_DOWNWARD 0
+ #endif
+ 
+ 
+ /* This structure holds data relevant to one variable that will be
+    placed in a stack slot.  */
+ struct stack_var
+ {
+   /* The Variable.  */
+   tree decl;
+ 
+   /* The offset of the variable.  During partitioning, this is the
+      offset relative to the partition.  After partitioning, this
+      is relative to the stack frame.  */
+   HOST_WIDE_INT offset;
+ 
+   /* Initially, the size of the variable.  Later, the size of the partition,
+      if this variable becomes it's partition's representative.  */
+   HOST_WIDE_INT size;
+ 
+   /* The *byte* alignment required for this variable.  Or as, with the
+      size, the alignment for this partition.  */
+   unsigned int alignb;
+ 
+   /* The partition representative.  */
+   size_t representative;
+ 
+   /* The next stack variable in the partition, or EOC.  */
+   size_t next;
+ };
+ 
+ #define EOC  ((size_t)-1)
+ 
+ /* We have an array of such objects while deciding allocation.  */
+ static struct stack_var *stack_vars;
+ static size_t stack_vars_alloc;
+ static size_t stack_vars_num;
+ 
+ /* An array of indicies such that stack_vars[stack_vars_sorted[i]].size
+    is non-decreasing.  */
+ static size_t *stack_vars_sorted;
+ 
+ /* We have an interference graph between such objects.  This graph
+    is lower triangular.  */
+ static bool *stack_vars_conflict;
+ static size_t stack_vars_conflict_alloc;
+ 
+ /* The phase of the stack frame.  This is the known misalignment of
+    virtual_stack_vars_rtx from PREFERRED_STACK_BOUNDARY.  That is,
+    (frame_offset+frame_phase) % PREFERRED_STACK_BOUNDARY == 0.  */
+ static int frame_phase;
+ 
+ 
+ /* Discover the byte alignment to use for DECL.  Ignore alignment
+    we can't do with expected alignment of the stack boundary.  */
+ 
+ static unsigned int
+ get_decl_align_unit (tree decl)
+ {
+   unsigned int align;
+ 
+   align = DECL_ALIGN (decl);
+   align = LOCAL_ALIGNMENT (TREE_TYPE (decl), align);
+   if (align > PREFERRED_STACK_BOUNDARY)
+     align = PREFERRED_STACK_BOUNDARY;
+   if (cfun->stack_alignment_needed < align)
+     cfun->stack_alignment_needed = align;
+ 
+   return align / BITS_PER_UNIT;
+ }
+ 
+ /* Allocate SIZE bytes at byte alignment ALIGN from the stack frame.
+    Return the frame offset.  */
+ 
+ static HOST_WIDE_INT
+ alloc_stack_frame_space (HOST_WIDE_INT size, HOST_WIDE_INT align)
+ {
+   HOST_WIDE_INT offset, new_frame_offset;
+ 
+   new_frame_offset = frame_offset;
+   if (FRAME_GROWS_DOWNWARD)
+     {
+       new_frame_offset -= size + frame_phase;
+       new_frame_offset &= -align;
+       new_frame_offset += frame_phase;
+       offset = new_frame_offset;
+     }
+   else
+     {
+       new_frame_offset -= frame_phase;
+       new_frame_offset += align - 1;
+       new_frame_offset &= -align;
+       new_frame_offset += frame_phase;
+       offset = new_frame_offset;
+       new_frame_offset += size;
+     }
+   frame_offset = new_frame_offset;
+ 
+   return offset;
+ }
+ 
+ /* Accumulate DECL into STACK_VARS.  */
+ 
+ static void
+ add_stack_var (tree decl)
+ {
+   if (stack_vars_num >= stack_vars_alloc)
+     {
+       if (stack_vars_alloc)
+ 	stack_vars_alloc = stack_vars_alloc * 3 / 2;
+       else
+ 	stack_vars_alloc = 32;
+       stack_vars
+ 	= XRESIZEVEC (struct stack_var, stack_vars, stack_vars_alloc);
+     }
+   stack_vars[stack_vars_num].decl = decl;
+   stack_vars[stack_vars_num].offset = 0;
+   stack_vars[stack_vars_num].size = tree_low_cst (DECL_SIZE_UNIT (decl), 1);
+   stack_vars[stack_vars_num].alignb = get_decl_align_unit (decl);
+ 
+   /* All variables are initially in their own partition.  */
+   stack_vars[stack_vars_num].representative = stack_vars_num;
+   stack_vars[stack_vars_num].next = EOC;
+ 
+   /* Ensure that this decl doesn't get put onto the list twice.  */
+   SET_DECL_RTL (decl, pc_rtx);
+ 
+   stack_vars_num++;
+ }
+ 
+ /* Compute the linear index of a lower-triangular coordinate (I, J).  */
+ 
+ static size_t
+ triangular_index (size_t i, size_t j)
+ {
+   if (i < j)
+     {
+       size_t t;
+       t = i, i = j, j = t;
+     }
+   return (i * (i + 1)) / 2 + j;
+ }
+ 
+ /* Ensure that STACK_VARS_CONFLICT is large enough for N objects.  */
+ 
+ static void
+ resize_stack_vars_conflict (size_t n)
+ {
+   size_t size = triangular_index (n-1, n-1) + 1;
+ 
+   if (size <= stack_vars_conflict_alloc)
+     return;
+ 
+   stack_vars_conflict = XRESIZEVEC (bool, stack_vars_conflict, size);
+   memset (stack_vars_conflict + stack_vars_conflict_alloc, 0,
+ 	  (size - stack_vars_conflict_alloc) * sizeof (bool));
+   stack_vars_conflict_alloc = size;
+ }
+ 
+ /* Make the decls associated with luid's X and Y conflict.  */
+ 
+ static void
+ add_stack_var_conflict (size_t x, size_t y)
+ {
+   size_t index = triangular_index (x, y);
+   gcc_assert (index < stack_vars_conflict_alloc);
+   stack_vars_conflict[index] = true;
+ }
+ 
+ /* Check whether the decls associated with luid's X and Y conflict.  */
+ 
+ static bool
+ stack_var_conflict_p (size_t x, size_t y)
+ {
+   size_t index = triangular_index (x, y);
+   gcc_assert (index < stack_vars_conflict_alloc);
+   return stack_vars_conflict[index];
+ }
+   
+ /* A subroutine of expand_used_vars.  If two variables X and Y have alias
+    sets that do not conflict, then do add a conflict for these variables
+    in the interference graph.  We also have to mind MEM_IN_STRUCT_P and
+    MEM_SCALAR_P.  */
+ 
+ static void
+ add_alias_set_conflicts (void)
+ {
+   size_t i, j, n = stack_vars_num;
+ 
+   for (i = 0; i < n; ++i)
+     {
+       bool aggr_i = AGGREGATE_TYPE_P (TREE_TYPE (stack_vars[i].decl));
+       HOST_WIDE_INT set_i = get_alias_set (stack_vars[i].decl);
+ 
+       for (j = 0; j < i; ++j)
+ 	{
+ 	  bool aggr_j = AGGREGATE_TYPE_P (TREE_TYPE (stack_vars[j].decl));
+ 	  HOST_WIDE_INT set_j = get_alias_set (stack_vars[j].decl);
+ 	  if (aggr_i != aggr_j || !alias_sets_conflict_p (set_i, set_j))
+ 	    add_stack_var_conflict (i, j);
+ 	}
+     }
+ }
+ 
+ /* A subroutine of partition_stack_vars.  A comparison function for qsort,
+    sorting an array of indicies by the size of the object.  */
+ 
+ static int
+ stack_var_size_cmp (const void *a, const void *b)
+ {
+   HOST_WIDE_INT sa = stack_vars[*(const size_t *)a].size;
+   HOST_WIDE_INT sb = stack_vars[*(const size_t *)b].size;
+ 
+   if (sa < sb)
+     return -1;
+   if (sa > sb)
+     return 1;
+   return 0;
+ }
+ 
+ /* A subroutine of partition_stack_vars.  The UNION portion of a UNION/FIND
+    partitioning algorithm.  Partitions A and B are known to be non-conflicting.
+    Merge them into a single partition A.
+ 
+    At the same time, add OFFSET to all variables in partition B.  At the end
+    of the partitioning process we've have a nice block easy to lay out within
+    the stack frame.  */
+ 
+ static void
+ union_stack_vars (size_t a, size_t b, HOST_WIDE_INT offset)
+ {
+   size_t i, last;
+ 
+   /* Update each element of partition B with the given offset,
+      and merge them into partition A.  */
+   for (last = i = b; i != EOC; last = i, i = stack_vars[i].next)
+     {
+       stack_vars[i].offset += offset;
+       stack_vars[i].representative = a;
+     }
+   stack_vars[last].next = stack_vars[a].next;
+   stack_vars[a].next = b;
+ 
+   /* Update the required alignment of partition A to account for B.  */
+   if (stack_vars[a].alignb < stack_vars[b].alignb)
+     stack_vars[a].alignb = stack_vars[b].alignb;
+ 
+   /* Update the interference graph and merge the conflicts.  */
+   for (last = stack_vars_num, i = 0; i < last; ++i)
+     if (stack_var_conflict_p (b, i))
+       add_stack_var_conflict (a, i);
+ }
+ 
+ /* A subroutine of expand_used_vars.  Binpack the variables into
+    partitions constrained by the interference graph.  The overall
+    algorithm used is as follows:
+ 
+ 	Sort the objects by size.
+ 	For each object A {
+ 	  S = size(A)
+ 	  O = 0
+ 	  loop {
+ 	    Look for the largest non-conflicting object B with size <= S.
+ 	    UNION (A, B)
+ 	    offset(B) = O
+ 	    O += size(B)
+ 	    S -= size(B)
+ 	  }
+ 	}
+ */
+ 
+ static void
+ partition_stack_vars (void)
+ {
+   size_t si, sj, n = stack_vars_num;
+ 
+   stack_vars_sorted = XNEWVEC (size_t, stack_vars_num);
+   for (si = 0; si < n; ++si)
+     stack_vars_sorted[si] = si;
+ 
+   if (n == 1)
+     return;
+ 
+   qsort (stack_vars_sorted, n, sizeof (size_t), stack_var_size_cmp);
+ 
+   /* Special case: detect when all variables conflict, and thus we can't
+      do anything during the partitioning loop.  It isn't uncommon (with
+      C code at least) to declare all variables at the top of the function,
+      and if we're not inlining, then all variables will be in the same scope.
+      Take advantage of very fast libc routines for this scan.  */
+   gcc_assert (sizeof(bool) == sizeof(char));
+   if (memchr (stack_vars_conflict, false, stack_vars_conflict_alloc) == NULL)
+     return;
+ 
+   for (si = 0; si < n; ++si)
+     {
+       size_t i = stack_vars_sorted[si];
+       HOST_WIDE_INT isize = stack_vars[i].size;
+       HOST_WIDE_INT offset = 0;
+ 
+       for (sj = si; sj-- > 0; )
+ 	{
+ 	  size_t j = stack_vars_sorted[sj];
+ 	  HOST_WIDE_INT jsize = stack_vars[j].size;
+ 	  unsigned int jalign = stack_vars[j].alignb;
+ 
+ 	  /* Ignore objects that aren't partition representatives.  */
+ 	  if (stack_vars[j].representative != j)
+ 	    continue;
+ 
+ 	  /* Ignore objects too large for the remaining space.  */
+ 	  if (isize < jsize)
+ 	    continue;
+ 
+ 	  /* Ignore conflicting objects.  */
+ 	  if (stack_var_conflict_p (i, j))
+ 	    continue;
+ 
+ 	  /* Refine the remaining space check to include alignment.  */
+ 	  if (offset & (jalign - 1))
+ 	    {
+ 	      HOST_WIDE_INT toff = offset;
+ 	      toff += jalign - 1;
+ 	      toff &= -(HOST_WIDE_INT)jalign;
+ 	      if (isize - (toff - offset) < jsize)
+ 		continue;
+ 
+ 	      isize -= toff - offset;
+ 	      offset = toff;
+ 	    }
+ 
+ 	  /* UNION the objects, placing J at OFFSET.  */
+ 	  union_stack_vars (i, j, offset);
+ 
+ 	  isize -= jsize;
+ 	  if (isize == 0)
+ 	    break;
+ 	}
+     }
+ }
+ 
+ /* A debugging aid for expand_used_vars.  Dump the generated partitions.  */
+ 
+ static void
+ dump_stack_var_partition (void)
+ {
+   size_t si, i, j, n = stack_vars_num;
+ 
+   for (si = 0; si < n; ++si)
+     {
+       i = stack_vars_sorted[si];
+ 
+       /* Skip variables that aren't partition representatives, for now.  */
+       if (stack_vars[i].representative != i)
+ 	continue;
+ 
+       fprintf (dump_file, "Partition %lu: size " HOST_WIDE_INT_PRINT_DEC
+ 	       " align %u\n", (unsigned long) i, stack_vars[i].size,
+ 	       stack_vars[i].alignb);
+ 
+       for (j = i; j != EOC; j = stack_vars[j].next)
+ 	{
+ 	  fputc ('\t', dump_file);
+ 	  print_generic_expr (dump_file, stack_vars[j].decl, dump_flags);
+ 	  fprintf (dump_file, ", offset " HOST_WIDE_INT_PRINT_DEC "\n",
+ 		   stack_vars[i].offset);
+ 	}
+     }
+ }
+ 
+ /* Assign rtl to DECL at frame offset OFFSET.  */
+ 
+ static void
+ expand_one_stack_var_at (tree decl, HOST_WIDE_INT offset)
+ {
+   HOST_WIDE_INT align;
+   rtx x;
+   
+   /* If this fails, we've overflowed the stack frame.  Error nicely?  */
+   gcc_assert (offset == trunc_int_for_mode (offset, Pmode));
+ 
+   x = plus_constant (virtual_stack_vars_rtx, offset);
+   x = gen_rtx_MEM (DECL_MODE (decl), x);
+ 
+   /* Set alignment we actually gave this decl.  */
+   offset -= frame_phase;
+   align = offset & -offset;
+   align *= BITS_PER_UNIT;
+   if (align > STACK_BOUNDARY || align == 0)
+     align = STACK_BOUNDARY;
+   DECL_ALIGN (decl) = align;
+   DECL_USER_ALIGN (decl) = 0;
+ 
+   set_mem_attributes (x, decl, true);
+   SET_DECL_RTL (decl, x);
+ }
+ 
+ /* A subroutine of expand_used_vars.  Give each partition representative
+    a unique location within the stack frame.  Update each partition member
+    with that location.  */
+ 
+ static void
+ expand_stack_vars (void)
+ {
+   size_t si, i, j, n = stack_vars_num;
+ 
+   for (si = 0; si < n; ++si)
+     {
+       HOST_WIDE_INT offset;
+ 
+       i = stack_vars_sorted[si];
+ 
+       /* Skip variables that aren't partition representatives, for now.  */
+       if (stack_vars[i].representative != i)
+ 	continue;
+ 
+       offset = alloc_stack_frame_space (stack_vars[i].size,
+ 					stack_vars[i].alignb);
+ 
+       /* Create rtl for each variable based on their location within the
+ 	 partition.  */
+       for (j = i; j != EOC; j = stack_vars[j].next)
+ 	expand_one_stack_var_at (stack_vars[j].decl,
+ 				 stack_vars[j].offset + offset);
+     }
+ }
+ 
+ /* A subroutine of expand_one_var.  Called to immediately assign rtl
+    to a variable to be allocated in the stack frame.  */
+ 
+ static void
+ expand_one_stack_var (tree var)
+ {
+   HOST_WIDE_INT size, offset, align;
+ 
+   size = tree_low_cst (DECL_SIZE_UNIT (var), 1);
+   align = get_decl_align_unit (var);
+   offset = alloc_stack_frame_space (size, align);
+ 
+   expand_one_stack_var_at (var, offset);
+ }
+ 
+ /* A subroutine of expand_one_var.  Called to assign rtl
+    to a TREE_STATIC VAR_DECL.  */
+ 
+ static void
+ expand_one_static_var (tree var)
+ {
+   /* If this is an inlined copy of a static local variable,
+      look up the original.  */
+   var = DECL_ORIGIN (var);
+ 
+   /* If we've already processed this variable because of that, do nothing.  */
+   if (TREE_ASM_WRITTEN (var))
+     return;
+ 
+   /* Give the front end a chance to do whatever.  In practice, this is
+      resolving duplicate names for IMA in C.  */
+   if (lang_hooks.expand_decl (var))
+     return;
+ 
+   /* Otherwise, just emit the variable.  */
+   rest_of_decl_compilation (var, 0, 0);
+ }
+ 
+ /* A subroutine of expand_one_var.  Called to assign rtl to a VAR_DECL
+    that will reside in a hard register.  */
+ 
+ static void
+ expand_one_hard_reg_var (tree var)
+ {
+   rest_of_decl_compilation (var, 0, 0);
+ }
+ 
+ /* A subroutine of expand_one_var.  Called to assign rtl to a VAR_DECL
+    that will reside in a pseudo register.  */
+ 
+ static void
+ expand_one_register_var (tree var)
+ {
+   tree type = TREE_TYPE (var);
+   int unsignedp = TYPE_UNSIGNED (type);
+   enum machine_mode reg_mode
+     = promote_mode (type, DECL_MODE (var), &unsignedp, 0);
+   rtx x = gen_reg_rtx (reg_mode);
+ 
+   SET_DECL_RTL (var, x);
+ 
+   /* Note if the object is a user variable.  */
+   if (!DECL_ARTIFICIAL (var))
+     {
+       mark_user_reg (x);
+ 
+       /* Trust user variables which have a pointer type to really
+ 	 be pointers.  Do not trust compiler generated temporaries
+ 	 as our type system is totally busted as it relates to
+ 	 pointer arithmetic which translates into lots of compiler
+ 	 generated objects with pointer types, but which are not really
+ 	 pointers.  */
+       if (POINTER_TYPE_P (type))
+ 	mark_reg_pointer (x, TYPE_ALIGN (TREE_TYPE (TREE_TYPE (var))));
+     }
+ }
+ 
+ /* A subroutine of expand_one_var.  Called to assign rtl to a VAR_DECL that
+    has some associated error, e.g. it's type is error-mark.  We just need
+    to pick something that won't crash the rest of the compiler.  */
+ 
+ static void
+ expand_one_error_var (tree var)
+ {
+   enum machine_mode mode = DECL_MODE (var);
+   rtx x;
+ 
+   if (mode == BLKmode)
+     x = gen_rtx_MEM (BLKmode, const0_rtx);
+   else if (mode == VOIDmode)
+     x = const0_rtx;
+   else
+     x = gen_reg_rtx (mode);
+ 
+   SET_DECL_RTL (var, x);
+ }
+ 
+ /* A subroutine of expand_one_var.  VAR is a variable that will be 
+    allocated to the local stack frame.  Return true if we wish to
+    add VAR to STACK_VARS so that it will be coalesced with other
+    variables.  Return false to allocate VAR immediately.
+ 
+    This function is used to reduce the number of variables considered
+    for coalescing, which reduces the size of the quadratic problem.  */
+ 
+ static bool
+ defer_stack_allocation (tree var, bool toplevel)
+ {
+   /* Variables in the outermost scope automatically conflict with
+      every other variable.  The only reason to want to defer them
+      at all is that, after sorting, we can more efficiently pack
+      small variables in the stack frame.  Continue to defer at -O2.  */
+   if (toplevel && optimize < 2)
+     return false;
+ 
+   /* Without optimization, *most* variables are allocated from the
+      stack, which makes the quadratic problem large exactly when we
+      want compilation to proceed as quickly as possible.  On the 
+      other hand, we don't want the function's stack frame size to
+      get completely out of hand.  So we avoid adding scalars and
+      "small" aggregates to the list at all.  */
+   if (optimize == 0 && tree_low_cst (DECL_SIZE_UNIT (var), 1) < 32)
+     return false;
+ 
+   return true;
+ }
+ 
+ /* A subroutine of expand_used_vars.  Expand one variable according to
+    its flavor.  Variables to be placed on the stack are not actually
+    expanded yet, merely recorded.  */
+ 
+ static void
+ expand_one_var (tree var, bool toplevel)
+ {
+   if (TREE_CODE (var) != VAR_DECL)
+     lang_hooks.expand_decl (var);
+   else if (DECL_EXTERNAL (var))
+     ;
+   else if (DECL_VALUE_EXPR (var))
+     ;
+   else if (TREE_STATIC (var))
+     expand_one_static_var (var);
+   else if (DECL_RTL_SET_P (var))
+     ;
+   else if (TREE_TYPE (var) == error_mark_node)
+     expand_one_error_var (var);
+   else if (DECL_HARD_REGISTER (var))
+     expand_one_hard_reg_var (var);
+   else if (use_register_for_decl (var))
+     expand_one_register_var (var);
+   else if (defer_stack_allocation (var, toplevel))
+     add_stack_var (var);
+   else
+     expand_one_stack_var (var);
+ }
+ 
+ /* A subroutine of expand_used_vars.  Walk down through the BLOCK tree
+    expanding variables.  Those variables that can be put into registers
+    are allocated pseudos; those that can't are put on the stack.
+ 
+    TOPLEVEL is true if this is the outermost BLOCK.  */
+ 
+ static void
+ expand_used_vars_for_block (tree block, bool toplevel)
+ {
+   size_t i, j, old_sv_num, this_sv_num, new_sv_num;
+   tree t;
+ 
+   old_sv_num = toplevel ? 0 : stack_vars_num;
+ 
+   /* Expand all variables at this level.  */
+   for (t = BLOCK_VARS (block); t ; t = TREE_CHAIN (t))
+     if (TREE_USED (t))
+       expand_one_var (t, toplevel);
+ 
+   this_sv_num = stack_vars_num;
+ 
+   /* Expand all variables at containing levels.  */
+   for (t = BLOCK_SUBBLOCKS (block); t ; t = BLOCK_CHAIN (t))
+     expand_used_vars_for_block (t, false);
+ 
+   /* Since we do not track exact variable lifetimes (which is not even
+      possible for varibles whose address escapes), we mirror the block
+      tree in the interference graph.  Here we cause all variables at this
+      level, and all sublevels, to conflict.  Do make certain that a
+      variable conflicts with itself.  */
+   if (old_sv_num < this_sv_num)
+     {
+       new_sv_num = stack_vars_num;
+       resize_stack_vars_conflict (new_sv_num);
+ 
+       for (i = old_sv_num; i < new_sv_num; ++i)
+ 	for (j = i < this_sv_num ? i+1 : this_sv_num; j-- > old_sv_num ;)
+ 	  add_stack_var_conflict (i, j);
+     }
+ }
+ 
+ /* A subroutine of expand_used_vars.  Walk down through the BLOCK tree
+    and clear TREE_USED on all local variables.  */
+ 
+ static void
+ clear_tree_used (tree block)
+ {
+   tree t;
+ 
+   for (t = BLOCK_VARS (block); t ; t = TREE_CHAIN (t))
+     /* if (!TREE_STATIC (t) && !DECL_EXTERNAL (t)) */
+       TREE_USED (t) = 0;
+ 
+   for (t = BLOCK_SUBBLOCKS (block); t ; t = BLOCK_CHAIN (t))
+     clear_tree_used (t);
+ }
+ 
+ /* Expand all variables used in the function.  */
+ 
+ static void
+ expand_used_vars (void)
+ {
+   tree t, outer_block = DECL_INITIAL (current_function_decl);
+ 
+   /* Compute the phase of the stack frame for this function.  */
+   {
+     int align = PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT;
+     int off = STARTING_FRAME_OFFSET % align;
+     frame_phase = off ? align - off : 0;
+   }
+ 
+   /* Set TREE_USED on all variables in the unexpanded_var_list.  */
+   for (t = cfun->unexpanded_var_list; t; t = TREE_CHAIN (t))
+     TREE_USED (TREE_VALUE (t)) = 1;
+ 
+   /* Clear TREE_USED on all variables associated with a block scope.  */
+   clear_tree_used (outer_block);
+ 
+   /* At this point all variables on the unexpanded_var_list with TREE_USED
+      set are not associated with any block scope.  Lay them out.  */
+   for (t = cfun->unexpanded_var_list; t; t = TREE_CHAIN (t))
+     {
+       tree var = TREE_VALUE (t);
+       bool expand_now = false;
+ 
+       /* We didn't set a block for static or extern because it's hard
+ 	 to tell the difference between a global variable (re)declared
+ 	 in a local scope, and one that's really declared there to
+ 	 begin with.  And it doesn't really matter much, since we're
+ 	 not giving them stack space.  Expand them now.  */
+       if (TREE_STATIC (var) || DECL_EXTERNAL (var))
+ 	expand_now = true;
+ 
+       /* Any variable that could have been hoisted into an SSA_NAME
+ 	 will have been propagated anywhere the optimizers chose,
+ 	 i.e. not confined to their original block.  Allocate them
+ 	 as if they were defined in the outermost scope.  */
+       else if (is_gimple_reg (var))
+ 	expand_now = true;
+ 
+       /* If the variable is not associated with any block, then it
+ 	 was created by the optimizers, and could be live anywhere
+ 	 in the function.  */
+       else if (TREE_USED (var))
+ 	expand_now = true;
+ 
+       /* Finally, mark all variables on the list as used.  We'll use
+ 	 this in a moment when we expand those associated with scopes.  */
+       TREE_USED (var) = 1;
+ 
+       if (expand_now)
+ 	expand_one_var (var, true);
+     }
+   cfun->unexpanded_var_list = NULL_TREE;
+ 
+   /* At this point, all variables within the block tree with TREE_USED
+      set are actually used by the optimized function.  Lay them out.  */
+   expand_used_vars_for_block (outer_block, true);
+ 
+   if (stack_vars_num > 0)
+     {
+       /* Due to the way alias sets work, no variables with non-conflicting
+ 	 alias sets may be assigned the same address.  Add conflicts to 
+ 	 reflect this.  */
+       add_alias_set_conflicts ();
+ 
+       /* Now that we have collected all stack variables, and have computed a 
+ 	 minimal interference graph, attempt to save some stack space.  */
+       partition_stack_vars ();
+       if (dump_file)
+ 	dump_stack_var_partition ();
+ 
+       /* Assign rtl to each variable based on these partitions.  */
+       expand_stack_vars ();
+ 
+       /* Free up stack variable graph data.  */
+       XDELETEVEC (stack_vars);
+       XDELETEVEC (stack_vars_sorted);
+       XDELETEVEC (stack_vars_conflict);
+       stack_vars = NULL;
+       stack_vars_alloc = stack_vars_num = 0;
+       stack_vars_conflict = NULL;
+       stack_vars_conflict_alloc = 0;
+     }
+ 
+   /* If the target requires that FRAME_OFFSET be aligned, do it.  */
+   if (STACK_ALIGNMENT_NEEDED)
+     {
+       HOST_WIDE_INT align = PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT;
+       if (!FRAME_GROWS_DOWNWARD)
+ 	frame_offset += align - 1;
+       frame_offset &= -align;
+     }
+ }
+ 
+ 
+ /* If we need to produce a detailed dump, print the tree representation
+    for STMT to the dump file.  SINCE is the last RTX after which the RTL
+    generated for STMT should have been appended.  */
+ 
+ static void
+ maybe_dump_rtl_for_tree_stmt (tree stmt, rtx since)
+ {
+   if (dump_file && (dump_flags & TDF_DETAILS))
+     {
+       fprintf (dump_file, "\n;; ");
+       print_generic_expr (dump_file, stmt, TDF_SLIM);
+       fprintf (dump_file, "\n");
+ 
+       print_rtl (dump_file, since ? NEXT_INSN (since) : since);
+     }
+ }
+ 
+ /* A subroutine of expand_gimple_basic_block.  Expand one COND_EXPR.
+    Returns a new basic block if we've terminated the current basic
+    block and created a new one.  */
+ 
+ static basic_block
+ expand_gimple_cond_expr (basic_block bb, tree stmt)
+ {
+   basic_block new_bb, dest;
+   edge new_edge;
+   edge true_edge;
+   edge false_edge;
+   tree pred = COND_EXPR_COND (stmt);
+   tree then_exp = COND_EXPR_THEN (stmt);
+   tree else_exp = COND_EXPR_ELSE (stmt);
+   rtx last2, last;
+ 
+   last2 = last = get_last_insn ();
+ 
+   extract_true_false_edges_from_block (bb, &true_edge, &false_edge);
+   if (EXPR_LOCUS (stmt))
+     {
+       emit_line_note (*(EXPR_LOCUS (stmt)));
+       record_block_change (TREE_BLOCK (stmt));
+     }
+ 
+   /* These flags have no purpose in RTL land.  */
+   true_edge->flags &= ~EDGE_TRUE_VALUE;
+   false_edge->flags &= ~EDGE_FALSE_VALUE;
+ 
+   /* We can either have a pure conditional jump with one fallthru edge or
+      two-way jump that needs to be decomposed into two basic blocks.  */
+   if (TREE_CODE (then_exp) == GOTO_EXPR && IS_EMPTY_STMT (else_exp))
+     {
+       jumpif (pred, label_rtx (GOTO_DESTINATION (then_exp)));
+       add_reg_br_prob_note (dump_file, last, true_edge->probability);
+       maybe_dump_rtl_for_tree_stmt (stmt, last);
+       if (EXPR_LOCUS (then_exp))
+ 	emit_line_note (*(EXPR_LOCUS (then_exp)));
+       return NULL;
+     }
+   if (TREE_CODE (else_exp) == GOTO_EXPR && IS_EMPTY_STMT (then_exp))
+     {
+       jumpifnot (pred, label_rtx (GOTO_DESTINATION (else_exp)));
+       add_reg_br_prob_note (dump_file, last, false_edge->probability);
+       maybe_dump_rtl_for_tree_stmt (stmt, last);
+       if (EXPR_LOCUS (else_exp))
+ 	emit_line_note (*(EXPR_LOCUS (else_exp)));
+       return NULL;
+     }
+   gcc_assert (TREE_CODE (then_exp) == GOTO_EXPR
+ 	      && TREE_CODE (else_exp) == GOTO_EXPR);
+ 
+   jumpif (pred, label_rtx (GOTO_DESTINATION (then_exp)));
+   add_reg_br_prob_note (dump_file, last, true_edge->probability);
+   last = get_last_insn ();
+   expand_expr (else_exp, const0_rtx, VOIDmode, 0);
+ 
+   BB_END (bb) = last;
+   if (BARRIER_P (BB_END (bb)))
+     BB_END (bb) = PREV_INSN (BB_END (bb));
+   update_bb_for_insn (bb);
+ 
+   new_bb = create_basic_block (NEXT_INSN (last), get_last_insn (), bb);
+   dest = false_edge->dest;
+   redirect_edge_succ (false_edge, new_bb);
+   false_edge->flags |= EDGE_FALLTHRU;
+   new_bb->count = false_edge->count;
+   new_bb->frequency = EDGE_FREQUENCY (false_edge);
+   new_edge = make_edge (new_bb, dest, 0);
+   new_edge->probability = REG_BR_PROB_BASE;
+   new_edge->count = new_bb->count;
+   if (BARRIER_P (BB_END (new_bb)))
+     BB_END (new_bb) = PREV_INSN (BB_END (new_bb));
+   update_bb_for_insn (new_bb);
+ 
+   maybe_dump_rtl_for_tree_stmt (stmt, last2);
+   
+   if (EXPR_LOCUS (else_exp))
+     emit_line_note (*(EXPR_LOCUS (else_exp)));
+ 
+   return new_bb;
+ }
+ 
+ /* A subroutine of expand_gimple_basic_block.  Expand one CALL_EXPR
+    that has CALL_EXPR_TAILCALL set.  Returns non-null if we actually
+    generated a tail call (something that might be denied by the ABI
+    rules governing the call; see calls.c).
+ 
+    Sets CAN_FALLTHRU if we generated a *conditional* tail call, and
+    can still reach the rest of BB.  The case here is __builtin_sqrt,
+    where the NaN result goes through the external function (with a
+    tailcall) and the normal result happens via a sqrt instruction.  */
+ 
+ static basic_block
+ expand_gimple_tailcall (basic_block bb, tree stmt, bool *can_fallthru)
+ {
+   rtx last2, last;
+   edge e;
+   edge_iterator ei;
+   int probability;
+   gcov_type count;
+ 
+   last2 = last = get_last_insn ();
+ 
+   expand_expr_stmt (stmt);
+ 
+   for (last = NEXT_INSN (last); last; last = NEXT_INSN (last))
+     if (CALL_P (last) && SIBLING_CALL_P (last))
+       goto found;
+ 
+   maybe_dump_rtl_for_tree_stmt (stmt, last2);
+ 
+   *can_fallthru = true;
+   return NULL;
+ 
+  found:
+   /* ??? Wouldn't it be better to just reset any pending stack adjust?
+      Any instructions emitted here are about to be deleted.  */
+   do_pending_stack_adjust ();
+ 
+   /* Remove any non-eh, non-abnormal edges that don't go to exit.  */
+   /* ??? I.e. the fallthrough edge.  HOWEVER!  If there were to be
+      EH or abnormal edges, we shouldn't have created a tail call in
+      the first place.  So it seems to me we should just be removing
+      all edges here, or redirecting the existing fallthru edge to
+      the exit block.  */
+ 
+   probability = 0;
+   count = 0;
+ 
+   for (ei = ei_start (bb->succs); (e = ei_safe_edge (ei)); )
+     {
+       if (!(e->flags & (EDGE_ABNORMAL | EDGE_EH)))
+ 	{
+ 	  if (e->dest != EXIT_BLOCK_PTR)
+ 	    {
+ 	      e->dest->count -= e->count;
+ 	      e->dest->frequency -= EDGE_FREQUENCY (e);
+ 	      if (e->dest->count < 0)
+ 	        e->dest->count = 0;
+ 	      if (e->dest->frequency < 0)
+ 	        e->dest->frequency = 0;
+ 	    }
+ 	  count += e->count;
+ 	  probability += e->probability;
+ 	  remove_edge (e);
+ 	}
+       else
+ 	ei_next (&ei);
+     }
+ 
+   /* This is somewhat ugly: the call_expr expander often emits instructions
+      after the sibcall (to perform the function return).  These confuse the
+      find_sub_basic_blocks code, so we need to get rid of these.  */
+   last = NEXT_INSN (last);
+   gcc_assert (BARRIER_P (last));
+ 
+   *can_fallthru = false;
+   while (NEXT_INSN (last))
+     {
+       /* For instance an sqrt builtin expander expands if with
+ 	 sibcall in the then and label for `else`.  */
+       if (LABEL_P (NEXT_INSN (last)))
+ 	{
+ 	  *can_fallthru = true;
+ 	  break;
+ 	}
+       delete_insn (NEXT_INSN (last));
+     }
+ 
+   e = make_edge (bb, EXIT_BLOCK_PTR, EDGE_ABNORMAL | EDGE_SIBCALL);
+   e->probability += probability;
+   e->count += count;
+   BB_END (bb) = last;
+   update_bb_for_insn (bb);
+ 
+   if (NEXT_INSN (last))
+     {
+       bb = create_basic_block (NEXT_INSN (last), get_last_insn (), bb);
+ 
+       last = BB_END (bb);
+       if (BARRIER_P (last))
+ 	BB_END (bb) = PREV_INSN (last);
+     }
+ 
+   maybe_dump_rtl_for_tree_stmt (stmt, last2);
+ 
+   return bb;
+ }
+ 
+ /* Expand basic block BB from GIMPLE trees to RTL.  */
+ 
+ static basic_block
+ expand_gimple_basic_block (basic_block bb, FILE * dump_file)
+ {
+   block_stmt_iterator bsi = bsi_start (bb);
+   tree stmt = NULL;
+   rtx note, last;
+   edge e;
+   edge_iterator ei;
+ 
+   if (dump_file)
+     {
+       fprintf (dump_file,
+ 	       "\n;; Generating RTL for tree basic block %d\n",
+ 	       bb->index);
+     }
+ 
+   if (!bsi_end_p (bsi))
+     stmt = bsi_stmt (bsi);
+ 
+   if (stmt && TREE_CODE (stmt) == LABEL_EXPR)
+     {
+       last = get_last_insn ();
+ 
+       expand_expr_stmt (stmt);
+ 
+       /* Java emits line number notes in the top of labels.
+          ??? Make this go away once line number notes are obsoleted.  */
+       BB_HEAD (bb) = NEXT_INSN (last);
+       if (NOTE_P (BB_HEAD (bb)))
+ 	BB_HEAD (bb) = NEXT_INSN (BB_HEAD (bb));
+       bsi_next (&bsi);
+       note = emit_note_after (NOTE_INSN_BASIC_BLOCK, BB_HEAD (bb));
+ 
+       maybe_dump_rtl_for_tree_stmt (stmt, last);
+     }
+   else
+     note = BB_HEAD (bb) = emit_note (NOTE_INSN_BASIC_BLOCK);
+ 
+   NOTE_BASIC_BLOCK (note) = bb;
+ 
+   for (ei = ei_start (bb->succs); (e = ei_safe_edge (ei)); )
+     {
+       /* Clear EDGE_EXECUTABLE.  This flag is never used in the backend.  */
+       e->flags &= ~EDGE_EXECUTABLE;
+ 
+       /* At the moment not all abnormal edges match the RTL representation.
+          It is safe to remove them here as find_sub_basic_blocks will
+          rediscover them.  In the future we should get this fixed properly.  */
+       if (e->flags & EDGE_ABNORMAL)
+ 	remove_edge (e);
+       else
+ 	ei_next (&ei);
+     }
+ 
+   for (; !bsi_end_p (bsi); bsi_next (&bsi))
+     {
+       tree stmt = bsi_stmt (bsi);
+       basic_block new_bb;
+ 
+       if (!stmt)
+ 	continue;
+ 
+       /* Expand this statement, then evaluate the resulting RTL and
+ 	 fixup the CFG accordingly.  */
+       if (TREE_CODE (stmt) == COND_EXPR)
+ 	{
+ 	  new_bb = expand_gimple_cond_expr (bb, stmt);
+ 	  if (new_bb)
+ 	    return new_bb;
+ 	}
+       else
+ 	{
+ 	  tree call = get_call_expr_in (stmt);
+ 	  if (call && CALL_EXPR_TAILCALL (call))
+ 	    {
+ 	      bool can_fallthru;
+ 	      new_bb = expand_gimple_tailcall (bb, stmt, &can_fallthru);
+ 	      if (new_bb)
+ 		{
+ 		  if (can_fallthru)
+ 		    bb = new_bb;
+ 		  else
+ 		    return new_bb;
+ 		}
+ 	    }
+ 	  else
+ 	    {
+ 	      last = get_last_insn ();
+ 	      expand_expr_stmt (stmt);
+ 	      maybe_dump_rtl_for_tree_stmt (stmt, last);
+ 	    }
+ 	}
+     }
+ 
+   do_pending_stack_adjust ();
+ 
+   /* Find the block tail.  The last insn in the block is the insn
+      before a barrier and/or table jump insn.  */
+   last = get_last_insn ();
+   if (BARRIER_P (last))
+     last = PREV_INSN (last);
+   if (JUMP_TABLE_DATA_P (last))
+     last = PREV_INSN (PREV_INSN (last));
+   BB_END (bb) = last;
+ 
+   update_bb_for_insn (bb);
+ 
+   return bb;
+ }
+ 
+ 
+ /* Create a basic block for initialization code.  */
+ 
+ static basic_block
+ construct_init_block (void)
+ {
+   basic_block init_block, first_block;
+   edge e = NULL, e2;
+   edge_iterator ei;
+ 
+   FOR_EACH_EDGE (e2, ei, ENTRY_BLOCK_PTR->succs)
+     {
+       /* Clear EDGE_EXECUTABLE.  This flag is never used in the backend.
+ 
+ 	 For all other blocks this edge flag is cleared while expanding
+ 	 a basic block in expand_gimple_basic_block, but there we never
+ 	 looked at the successors of the entry block.
+ 	 This caused PR17513.  */
+       e2->flags &= ~EDGE_EXECUTABLE;
+ 
+       if (e2->dest == ENTRY_BLOCK_PTR->next_bb)
+ 	e = e2;
+     }
+ 
+   init_block = create_basic_block (NEXT_INSN (get_insns ()),
+ 				   get_last_insn (),
+ 				   ENTRY_BLOCK_PTR);
+   init_block->frequency = ENTRY_BLOCK_PTR->frequency;
+   init_block->count = ENTRY_BLOCK_PTR->count;
+   if (e)
+     {
+       first_block = e->dest;
+       redirect_edge_succ (e, init_block);
+       e = make_edge (init_block, first_block, EDGE_FALLTHRU);
+     }
+   else
+     e = make_edge (init_block, EXIT_BLOCK_PTR, EDGE_FALLTHRU);
+   e->probability = REG_BR_PROB_BASE;
+   e->count = ENTRY_BLOCK_PTR->count;
+ 
+   update_bb_for_insn (init_block);
+   return init_block;
+ }
+ 
+ 
+ /* Create a block containing landing pads and similar stuff.  */
+ 
+ static void
+ construct_exit_block (void)
+ {
+   rtx head = get_last_insn ();
+   rtx end;
+   basic_block exit_block;
+   edge e, e2;
+   unsigned ix;
+   edge_iterator ei;
+ 
+   /* Make sure the locus is set to the end of the function, so that
+      epilogue line numbers and warnings are set properly.  */
+ #ifdef USE_MAPPED_LOCATION
+   if (cfun->function_end_locus != UNKNOWN_LOCATION)
+ #else
+   if (cfun->function_end_locus.file)
+ #endif
+     input_location = cfun->function_end_locus;
+ 
+   /* The following insns belong to the top scope.  */
+   record_block_change (DECL_INITIAL (current_function_decl));
+ 
+   /* Generate rtl for function exit.  */
+   expand_function_end ();
+ 
+   end = get_last_insn ();
+   if (head == end)
+     return;
+   while (NEXT_INSN (head) && NOTE_P (NEXT_INSN (head)))
+     head = NEXT_INSN (head);
+   exit_block = create_basic_block (NEXT_INSN (head), end,
+ 				   EXIT_BLOCK_PTR->prev_bb);
+   exit_block->frequency = EXIT_BLOCK_PTR->frequency;
+   exit_block->count = EXIT_BLOCK_PTR->count;
+ 
+   ix = 0;
+   while (ix < EDGE_COUNT (EXIT_BLOCK_PTR->preds))
+     {
+       e = EDGE_I (EXIT_BLOCK_PTR->preds, ix);
+       if (!(e->flags & EDGE_ABNORMAL))
+ 	redirect_edge_succ (e, exit_block);
+       else
+ 	ix++;
+     }
+ 
+   e = make_edge (exit_block, EXIT_BLOCK_PTR, EDGE_FALLTHRU);
+   e->probability = REG_BR_PROB_BASE;
+   e->count = EXIT_BLOCK_PTR->count;
+   FOR_EACH_EDGE (e2, ei, EXIT_BLOCK_PTR->preds)
+     if (e2 != e)
+       {
+         e->count -= e2->count;
+ 	exit_block->count -= e2->count;
+ 	exit_block->frequency -= EDGE_FREQUENCY (e2);
+       }
+   if (e->count < 0)
+     e->count = 0;
+   if (exit_block->count < 0)
+     exit_block->count = 0;
+   if (exit_block->frequency < 0)
+     exit_block->frequency = 0;
+   update_bb_for_insn (exit_block);
+ }
+ 
+ /* Translate the intermediate representation contained in the CFG
+    from GIMPLE trees to RTL.
+ 
+    We do conversion per basic block and preserve/update the tree CFG.
+    This implies we have to do some magic as the CFG can simultaneously
+    consist of basic blocks containing RTL and GIMPLE trees.  This can
+    confuse the CFG hooks, so be careful to not manipulate CFG during
+    the expansion.  */
+ 
+ static void
+ tree_expand_cfg (void)
+ {
+   basic_block bb, init_block;
+   sbitmap blocks;
+ 
+   /* Some backends want to know that we are expanding to RTL.  */
+   currently_expanding_to_rtl = 1;
+ 
+   /* Prepare the rtl middle end to start recording block changes.  */
+   reset_block_changes ();
+ 
+   /* Expand the variables recorded during gimple lowering.  */
+   expand_used_vars ();
+ 
+   /* Set up parameters and prepare for return, for the function.  */
+   expand_function_start (current_function_decl);
+ 
+   /* If this function is `main', emit a call to `__main'
+      to run global initializers, etc.  */
+   if (DECL_NAME (current_function_decl)
+       && MAIN_NAME_P (DECL_NAME (current_function_decl))
+       && DECL_FILE_SCOPE_P (current_function_decl))
+     expand_main_function ();
+ 
+   /* Register rtl specific functions for cfg.  */
+   rtl_register_cfg_hooks ();
+ 
+   init_block = construct_init_block ();
+ 
+   FOR_BB_BETWEEN (bb, init_block->next_bb, EXIT_BLOCK_PTR, next_bb)
+     bb = expand_gimple_basic_block (bb, dump_file);
+ 
+   construct_exit_block ();
+ 
+   /* We're done expanding trees to RTL.  */
+   currently_expanding_to_rtl = 0;
+ 
+   /* Convert tree EH labels to RTL EH labels, and clean out any unreachable
+      EH regions.  */
+   convert_from_eh_region_ranges ();
+ 
+   rebuild_jump_labels (get_insns ());
+   find_exception_handler_labels ();
+ 
+   blocks = sbitmap_alloc (last_basic_block);
+   sbitmap_ones (blocks);
+   find_many_sub_basic_blocks (blocks);
+   purge_all_dead_edges (0);
+   sbitmap_free (blocks);
+ 
+   compact_blocks ();
+ #ifdef ENABLE_CHECKING
+   verify_flow_info();
+ #endif
+ 
+   /* There's no need to defer outputting this function any more; we
+      know we want to output it.  */
+   DECL_DEFER_OUTPUT (current_function_decl) = 0;
+ 
+   /* Now that we're done expanding trees to RTL, we shouldn't have any
+      more CONCATs anywhere.  */
+   generating_concat_p = 0;
+ 
+   finalize_block_changes ();
+ 
+   if (dump_file)
+     {
+       fprintf (dump_file,
+ 	       "\n\n;;\n;; Full RTL generated for this function:\n;;\n");
+       /* And the pass manager will dump RTL for us.  */
+     }
+ }
+ 
+ struct tree_opt_pass pass_expand =
+ {
+   "expand",		                /* name */
+   NULL,                                 /* gate */
+   tree_expand_cfg,	                /* execute */
+   NULL,                                 /* sub */
+   NULL,                                 /* next */
+   0,                                    /* static_pass_number */
+   TV_EXPAND,		                /* tv_id */
+   /* ??? If TER is enabled, we actually receive GENERIC.  */
+   PROP_gimple_leh | PROP_cfg,           /* properties_required */
+   PROP_rtl,                             /* properties_provided */
+   PROP_gimple_leh,			/* properties_destroyed */
+   0,                                    /* todo_flags_start */
+   0,					/* todo_flags_finish */
+   'r'					/* letter */
+ };
diff -Nrcpad gcc-3.4.3/gcc/cfghooks.c gcc-4.0.0/gcc/cfghooks.c
*** gcc-3.4.3/gcc/cfghooks.c	Sun Jun 22 15:03:25 2003
--- gcc-4.0.0/gcc/cfghooks.c	Mon Nov 22 22:04:21 2004
***************
*** 1,5 ****
  /* Hooks for cfg representation specific functions.
!    Copyright (C) 2003 Free Software Foundation, Inc.
     Contributed by Sebastian Pop <s.pop@laposte.net>
  
  This file is part of GCC.
--- 1,5 ----
  /* Hooks for cfg representation specific functions.
!    Copyright (C) 2003, 2004 Free Software Foundation, Inc.
     Contributed by Sebastian Pop <s.pop@laposte.net>
  
  This file is part of GCC.
*************** Boston, MA 02111-1307, USA.  */
*** 26,37 ****
  #include "tree.h"
  #include "rtl.h"
  #include "basic-block.h"
! 
! extern struct cfg_hooks rtl_cfg_hooks;
! extern struct cfg_hooks cfg_layout_rtl_cfg_hooks;
  
  /* A pointer to one of the hooks containers.  */
! struct cfg_hooks *cfg_hooks;
  
  /* Initialization of functions specific to the rtl IR.  */
  void
--- 26,37 ----
  #include "tree.h"
  #include "rtl.h"
  #include "basic-block.h"
! #include "tree-flow.h"
! #include "timevar.h"
! #include "toplev.h"
  
  /* A pointer to one of the hooks containers.  */
! static struct cfg_hooks *cfg_hooks;
  
  /* Initialization of functions specific to the rtl IR.  */
  void
*************** cfg_layout_rtl_register_cfg_hooks (void)
*** 46,48 ****
--- 46,826 ----
  {
    cfg_hooks = &cfg_layout_rtl_cfg_hooks;
  }
+ 
+ /* Initialization of functions specific to the tree IR.  */
+ 
+ void
+ tree_register_cfg_hooks (void)
+ {
+   cfg_hooks = &tree_cfg_hooks;
+ }
+ 
+ /* Returns current ir type (rtl = 0, trees = 1).  */
+ 
+ int
+ ir_type (void)
+ {
+   return cfg_hooks == &tree_cfg_hooks ? 1 : 0;
+ }
+ 
+ /* Verify the CFG consistency.
+ 
+    Currently it does following: checks edge and basic block list correctness
+    and calls into IL dependent checking then.  */
+ 
+ void
+ verify_flow_info (void)
+ {
+   size_t *edge_checksum;
+   int num_bb_notes, err = 0;
+   basic_block bb, last_bb_seen;
+   basic_block *last_visited;
+ 
+   timevar_push (TV_CFG_VERIFY);
+   last_visited = xcalloc (last_basic_block + 2, sizeof (basic_block));
+   edge_checksum = xcalloc (last_basic_block + 2, sizeof (size_t));
+ 
+   /* Check bb chain & numbers.  */
+   last_bb_seen = ENTRY_BLOCK_PTR;
+   FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR->next_bb, NULL, next_bb)
+     {
+       if (bb != EXIT_BLOCK_PTR
+ 	  && bb != BASIC_BLOCK (bb->index))
+ 	{
+ 	  error ("bb %d on wrong place", bb->index);
+ 	  err = 1;
+ 	}
+ 
+       if (bb->prev_bb != last_bb_seen)
+ 	{
+ 	  error ("prev_bb of %d should be %d, not %d",
+ 		 bb->index, last_bb_seen->index, bb->prev_bb->index);
+ 	  err = 1;
+ 	}
+ 
+       last_bb_seen = bb;
+     }
+ 
+   /* Now check the basic blocks (boundaries etc.) */
+   FOR_EACH_BB_REVERSE (bb)
+     {
+       int n_fallthru = 0;
+       edge e;
+       edge_iterator ei;
+ 
+       if (bb->count < 0)
+ 	{
+ 	  error ("verify_flow_info: Wrong count of block %i %i",
+ 	         bb->index, (int)bb->count);
+ 	  err = 1;
+ 	}
+       if (bb->frequency < 0)
+ 	{
+ 	  error ("verify_flow_info: Wrong frequency of block %i %i",
+ 	         bb->index, bb->frequency);
+ 	  err = 1;
+ 	}
+       FOR_EACH_EDGE (e, ei, bb->succs)
+ 	{
+ 	  if (last_visited [e->dest->index + 2] == bb)
+ 	    {
+ 	      error ("verify_flow_info: Duplicate edge %i->%i",
+ 		     e->src->index, e->dest->index);
+ 	      err = 1;
+ 	    }
+ 	  if (e->probability < 0 || e->probability > REG_BR_PROB_BASE)
+ 	    {
+ 	      error ("verify_flow_info: Wrong probability of edge %i->%i %i",
+ 		     e->src->index, e->dest->index, e->probability);
+ 	      err = 1;
+ 	    }
+ 	  if (e->count < 0)
+ 	    {
+ 	      error ("verify_flow_info: Wrong count of edge %i->%i %i",
+ 		     e->src->index, e->dest->index, (int)e->count);
+ 	      err = 1;
+ 	    }
+ 
+ 	  last_visited [e->dest->index + 2] = bb;
+ 
+ 	  if (e->flags & EDGE_FALLTHRU)
+ 	    n_fallthru++;
+ 
+ 	  if (e->src != bb)
+ 	    {
+ 	      error ("verify_flow_info: Basic block %d succ edge is corrupted",
+ 		     bb->index);
+ 	      fprintf (stderr, "Predecessor: ");
+ 	      dump_edge_info (stderr, e, 0);
+ 	      fprintf (stderr, "\nSuccessor: ");
+ 	      dump_edge_info (stderr, e, 1);
+ 	      fprintf (stderr, "\n");
+ 	      err = 1;
+ 	    }
+ 
+ 	  edge_checksum[e->dest->index + 2] += (size_t) e;
+ 	}
+       if (n_fallthru > 1)
+ 	{
+ 	  error ("Wrong amount of branch edges after unconditional jump %i", bb->index);
+ 	  err = 1;
+ 	}
+ 
+       FOR_EACH_EDGE (e, ei, bb->preds)
+ 	{
+ 	  if (e->dest != bb)
+ 	    {
+ 	      error ("basic block %d pred edge is corrupted", bb->index);
+ 	      fputs ("Predecessor: ", stderr);
+ 	      dump_edge_info (stderr, e, 0);
+ 	      fputs ("\nSuccessor: ", stderr);
+ 	      dump_edge_info (stderr, e, 1);
+ 	      fputc ('\n', stderr);
+ 	      err = 1;
+ 	    }
+ 
+ 	  if (ei.index != e->dest_idx)
+ 	    {
+ 	      error ("basic block %d pred edge is corrupted", bb->index);
+ 	      error ("its dest_idx should be %d, not %d",
+ 		     ei.index, e->dest_idx);
+ 	      fputs ("Predecessor: ", stderr);
+ 	      dump_edge_info (stderr, e, 0);
+ 	      fputs ("\nSuccessor: ", stderr);
+ 	      dump_edge_info (stderr, e, 1);
+ 	      fputc ('\n', stderr);
+ 	      err = 1;
+ 	    }
+ 
+ 	  edge_checksum[e->dest->index + 2] -= (size_t) e;
+ 	}
+     }
+ 
+   /* Complete edge checksumming for ENTRY and EXIT.  */
+   {
+     edge e;
+     edge_iterator ei;
+ 
+     FOR_EACH_EDGE (e, ei, ENTRY_BLOCK_PTR->succs)
+       edge_checksum[e->dest->index + 2] += (size_t) e;
+ 
+     FOR_EACH_EDGE (e, ei, EXIT_BLOCK_PTR->preds)
+       edge_checksum[e->dest->index + 2] -= (size_t) e;
+   }
+ 
+   FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb)
+     if (edge_checksum[bb->index + 2])
+       {
+ 	error ("basic block %i edge lists are corrupted", bb->index);
+ 	err = 1;
+       }
+ 
+   num_bb_notes = 0;
+   last_bb_seen = ENTRY_BLOCK_PTR;
+ 
+   /* Clean up.  */
+   free (last_visited);
+   free (edge_checksum);
+ 
+   if (cfg_hooks->verify_flow_info)
+     err |= cfg_hooks->verify_flow_info ();
+   if (err)
+     internal_error ("verify_flow_info failed");
+   timevar_pop (TV_CFG_VERIFY);
+ }
+ 
+ /* Print out one basic block.  This function takes care of the purely
+    graph related information.  The cfg hook for the active representation
+    should dump representation-specific information.  */
+ 
+ void
+ dump_bb (basic_block bb, FILE *outf, int indent)
+ {
+   edge e;
+   edge_iterator ei;
+   char *s_indent;
+  
+   s_indent = alloca ((size_t) indent + 1);
+   memset (s_indent, ' ', (size_t) indent);
+   s_indent[indent] = '\0';
+ 
+   fprintf (outf, ";;%s basic block %d, loop depth %d, count ",
+ 	   s_indent, bb->index, bb->loop_depth);
+   fprintf (outf, HOST_WIDEST_INT_PRINT_DEC, (HOST_WIDEST_INT) bb->count);
+   putc ('\n', outf);
+ 
+   fprintf (outf, ";;%s prev block ", s_indent);
+   if (bb->prev_bb)
+     fprintf (outf, "%d, ", bb->prev_bb->index);
+   else
+     fprintf (outf, "(nil), ");
+   fprintf (outf, "next block ");
+   if (bb->next_bb)
+     fprintf (outf, "%d", bb->next_bb->index);
+   else
+     fprintf (outf, "(nil)");
+   putc ('\n', outf);
+ 
+   fprintf (outf, ";;%s pred:      ", s_indent);
+   FOR_EACH_EDGE (e, ei, bb->preds)
+     dump_edge_info (outf, e, 0);
+   putc ('\n', outf);
+ 
+   fprintf (outf, ";;%s succ:      ", s_indent);
+   FOR_EACH_EDGE (e, ei, bb->succs)
+     dump_edge_info (outf, e, 1);
+   putc ('\n', outf);
+ 
+   if (cfg_hooks->dump_bb)
+     cfg_hooks->dump_bb (bb, outf, indent);
+ }
+ 
+ /* Redirect edge E to the given basic block DEST and update underlying program
+    representation.  Returns edge representing redirected branch (that may not
+    be equivalent to E in the case of duplicate edges being removed) or NULL
+    if edge is not easily redirectable for whatever reason.  */
+ 
+ edge
+ redirect_edge_and_branch (edge e, basic_block dest)
+ {
+   edge ret;
+ 
+   if (!cfg_hooks->redirect_edge_and_branch)
+     internal_error ("%s does not support redirect_edge_and_branch.",
+ 		    cfg_hooks->name);
+ 
+   ret = cfg_hooks->redirect_edge_and_branch (e, dest);
+ 
+   return ret;
+ }
+ 
+ /* Redirect the edge E to basic block DEST even if it requires creating
+    of a new basic block; then it returns the newly created basic block.
+    Aborts when redirection is impossible.  */
+ 
+ basic_block
+ redirect_edge_and_branch_force (edge e, basic_block dest)
+ {
+   basic_block ret;
+ 
+   if (!cfg_hooks->redirect_edge_and_branch_force)
+     internal_error ("%s does not support redirect_edge_and_branch_force.",
+ 		    cfg_hooks->name);
+ 
+   ret = cfg_hooks->redirect_edge_and_branch_force (e, dest);
+ 
+   return ret;
+ }
+ 
+ /* Splits basic block BB after the specified instruction I (but at least after
+    the labels).  If I is NULL, splits just after labels.  The newly created edge
+    is returned.  The new basic block is created just after the old one.  */
+ 
+ edge
+ split_block (basic_block bb, void *i)
+ {
+   basic_block new_bb;
+ 
+   if (!cfg_hooks->split_block)
+     internal_error ("%s does not support split_block.", cfg_hooks->name);
+ 
+   new_bb = cfg_hooks->split_block (bb, i);
+   if (!new_bb)
+     return NULL;
+ 
+   new_bb->count = bb->count;
+   new_bb->frequency = bb->frequency;
+   new_bb->loop_depth = bb->loop_depth;
+ 
+   if (dom_info_available_p (CDI_DOMINATORS))
+     {
+       redirect_immediate_dominators (CDI_DOMINATORS, bb, new_bb);
+       set_immediate_dominator (CDI_DOMINATORS, new_bb, bb);
+     }
+ 
+   return make_single_succ_edge (bb, new_bb, EDGE_FALLTHRU);
+ }
+ 
+ /* Splits block BB just after labels.  The newly created edge is returned.  */
+ 
+ edge
+ split_block_after_labels (basic_block bb)
+ {
+   return split_block (bb, NULL);
+ }
+ 
+ /* Moves block BB immediately after block AFTER.  Returns false if the
+    movement was impossible.  */
+ 
+ bool
+ move_block_after (basic_block bb, basic_block after)
+ {
+   bool ret;
+ 
+   if (!cfg_hooks->move_block_after)
+     internal_error ("%s does not support move_block_after.", cfg_hooks->name);
+ 
+   ret = cfg_hooks->move_block_after (bb, after);
+ 
+   return ret;
+ }
+ 
+ /* Deletes the basic block BB.  */
+ 
+ void
+ delete_basic_block (basic_block bb)
+ {
+   if (!cfg_hooks->delete_basic_block)
+     internal_error ("%s does not support delete_basic_block.", cfg_hooks->name);
+ 
+   cfg_hooks->delete_basic_block (bb);
+ 
+   /* Remove the edges into and out of this block.  Note that there may
+      indeed be edges in, if we are removing an unreachable loop.  */
+   while (EDGE_COUNT (bb->preds) != 0)
+     remove_edge (EDGE_PRED (bb, 0));
+   while (EDGE_COUNT (bb->succs) != 0)
+     remove_edge (EDGE_SUCC (bb, 0));
+ 
+   if (dom_computed[CDI_DOMINATORS])
+     delete_from_dominance_info (CDI_DOMINATORS, bb);
+   if (dom_computed[CDI_POST_DOMINATORS])
+     delete_from_dominance_info (CDI_POST_DOMINATORS, bb);
+ 
+   /* Remove the basic block from the array.  */
+   expunge_block (bb);
+ }
+ 
+ /* Splits edge E and returns the newly created basic block.  */
+ 
+ basic_block
+ split_edge (edge e)
+ {
+   basic_block ret;
+   gcov_type count = e->count;
+   int freq = EDGE_FREQUENCY (e);
+   edge f;
+   bool irr = (e->flags & EDGE_IRREDUCIBLE_LOOP) != 0;
+ 
+   if (!cfg_hooks->split_edge)
+     internal_error ("%s does not support split_edge.", cfg_hooks->name);
+ 
+   ret = cfg_hooks->split_edge (e);
+   ret->count = count;
+   ret->frequency = freq;
+   EDGE_SUCC (ret, 0)->probability = REG_BR_PROB_BASE;
+   EDGE_SUCC (ret, 0)->count = count;
+ 
+   if (irr)
+     {
+       ret->flags |= BB_IRREDUCIBLE_LOOP;
+       EDGE_PRED (ret, 0)->flags |= EDGE_IRREDUCIBLE_LOOP;
+       EDGE_SUCC (ret, 0)->flags |= EDGE_IRREDUCIBLE_LOOP;
+     }
+ 
+   if (dom_computed[CDI_DOMINATORS])
+     set_immediate_dominator (CDI_DOMINATORS, ret, EDGE_PRED (ret, 0)->src);
+ 
+   if (dom_computed[CDI_DOMINATORS] >= DOM_NO_FAST_QUERY)
+     {
+       /* There are two cases:
+ 
+ 	 If the immediate dominator of e->dest is not e->src, it
+ 	 remains unchanged.
+ 
+ 	 If immediate dominator of e->dest is e->src, it may become
+ 	 ret, provided that all other predecessors of e->dest are
+ 	 dominated by e->dest.  */
+ 
+       if (get_immediate_dominator (CDI_DOMINATORS, EDGE_SUCC (ret, 0)->dest)
+ 	  == EDGE_PRED (ret, 0)->src)
+ 	{
+ 	  edge_iterator ei;
+ 	  FOR_EACH_EDGE (f, ei, EDGE_SUCC (ret, 0)->dest->preds)
+ 	    {
+ 	      if (f == EDGE_SUCC (ret, 0))
+ 		continue;
+ 
+ 	      if (!dominated_by_p (CDI_DOMINATORS, f->src,
+ 				   EDGE_SUCC (ret, 0)->dest))
+ 		break;
+ 	    }
+ 
+ 	  if (!f)
+ 	    set_immediate_dominator (CDI_DOMINATORS, EDGE_SUCC (ret, 0)->dest, ret);
+ 	}
+     };
+ 
+   return ret;
+ }
+ 
+ /* Creates a new basic block just after the basic block AFTER.
+    HEAD and END are the first and the last statement belonging
+    to the block.  If both are NULL, an empty block is created.  */
+ 
+ basic_block
+ create_basic_block (void *head, void *end, basic_block after)
+ {
+   basic_block ret;
+ 
+   if (!cfg_hooks->create_basic_block)
+     internal_error ("%s does not support create_basic_block.", cfg_hooks->name);
+ 
+   ret = cfg_hooks->create_basic_block (head, end, after);
+ 
+   if (dom_computed[CDI_DOMINATORS])
+     add_to_dominance_info (CDI_DOMINATORS, ret);
+   if (dom_computed[CDI_POST_DOMINATORS])
+     add_to_dominance_info (CDI_POST_DOMINATORS, ret);
+ 
+   return ret;
+ }
+ 
+ /* Creates an empty basic block just after basic block AFTER.  */
+ 
+ basic_block
+ create_empty_bb (basic_block after)
+ {
+   return create_basic_block (NULL, NULL, after);
+ }
+ 
+ /* Checks whether we may merge blocks BB1 and BB2.  */
+ 
+ bool
+ can_merge_blocks_p (basic_block bb1, basic_block bb2)
+ {
+   bool ret;
+ 
+   if (!cfg_hooks->can_merge_blocks_p)
+     internal_error ("%s does not support can_merge_blocks_p.", cfg_hooks->name);
+ 
+   ret = cfg_hooks->can_merge_blocks_p (bb1, bb2);
+ 
+   return ret;
+ }
+ 
+ void
+ predict_edge (edge e, enum br_predictor predictor, int probability)
+ {
+   if (!cfg_hooks->predict_edge)
+     internal_error ("%s does not support predict_edge.", cfg_hooks->name);
+ 
+   cfg_hooks->predict_edge (e, predictor, probability);
+ }
+ 
+ bool
+ predicted_by_p (basic_block bb, enum br_predictor predictor)
+ {
+   if (!cfg_hooks->predict_edge)
+     internal_error ("%s does not support predicted_by_p.", cfg_hooks->name);
+ 
+   return cfg_hooks->predicted_by_p (bb, predictor);
+ }
+ 
+ /* Merges basic block B into basic block A.  */
+ 
+ void
+ merge_blocks (basic_block a, basic_block b)
+ {
+   edge e;
+   edge_iterator ei;
+ 
+   if (!cfg_hooks->merge_blocks)
+     internal_error ("%s does not support merge_blocks.", cfg_hooks->name);
+ 
+   cfg_hooks->merge_blocks (a, b);
+ 
+   /* Normally there should only be one successor of A and that is B, but
+      partway though the merge of blocks for conditional_execution we'll
+      be merging a TEST block with THEN and ELSE successors.  Free the
+      whole lot of them and hope the caller knows what they're doing.  */
+ 
+   while (EDGE_COUNT (a->succs) != 0)
+    remove_edge (EDGE_SUCC (a, 0));
+ 
+   /* Adjust the edges out of B for the new owner.  */
+   FOR_EACH_EDGE (e, ei, b->succs)
+     e->src = a;
+   a->succs = b->succs;
+   a->flags |= b->flags;
+ 
+   /* B hasn't quite yet ceased to exist.  Attempt to prevent mishap.  */
+   b->preds = b->succs = NULL;
+   a->global_live_at_end = b->global_live_at_end;
+ 
+   if (dom_computed[CDI_DOMINATORS])
+     redirect_immediate_dominators (CDI_DOMINATORS, b, a);
+ 
+   if (dom_computed[CDI_DOMINATORS])
+     delete_from_dominance_info (CDI_DOMINATORS, b);
+   if (dom_computed[CDI_POST_DOMINATORS])
+     delete_from_dominance_info (CDI_POST_DOMINATORS, b);
+ 
+   expunge_block (b);
+ }
+ 
+ /* Split BB into entry part and the rest (the rest is the newly created block).
+    Redirect those edges for that REDIRECT_EDGE_P returns true to the entry
+    part.  Returns the edge connecting the entry part to the rest.  */
+ 
+ edge
+ make_forwarder_block (basic_block bb, bool (*redirect_edge_p) (edge),
+ 		      void (*new_bb_cbk) (basic_block))
+ {
+   edge e, fallthru;
+   edge_iterator ei;
+   basic_block dummy, jump;
+ 
+   if (!cfg_hooks->make_forwarder_block)
+     internal_error ("%s does not support make_forwarder_block.",
+ 		    cfg_hooks->name);
+ 
+   fallthru = split_block_after_labels (bb);
+   dummy = fallthru->src;
+   bb = fallthru->dest;
+ 
+   /* Redirect back edges we want to keep.  */
+   for (ei = ei_start (dummy->preds); (e = ei_safe_edge (ei)); )
+     {
+       if (redirect_edge_p (e))
+ 	{
+ 	  ei_next (&ei);
+ 	  continue;
+ 	}
+ 
+       dummy->frequency -= EDGE_FREQUENCY (e);
+       dummy->count -= e->count;
+       if (dummy->frequency < 0)
+ 	dummy->frequency = 0;
+       if (dummy->count < 0)
+ 	dummy->count = 0;
+       fallthru->count -= e->count;
+       if (fallthru->count < 0)
+ 	fallthru->count = 0;
+ 
+       jump = redirect_edge_and_branch_force (e, bb);
+       if (jump)
+ 	new_bb_cbk (jump);
+     }
+ 
+   if (dom_info_available_p (CDI_DOMINATORS))
+     {
+       basic_block doms_to_fix[2];
+ 
+       doms_to_fix[0] = dummy;
+       doms_to_fix[1] = bb;
+       iterate_fix_dominators (CDI_DOMINATORS, doms_to_fix, 2);
+     }
+ 
+   cfg_hooks->make_forwarder_block (fallthru);
+ 
+   return fallthru;
+ }
+ 
+ void
+ tidy_fallthru_edge (edge e)
+ {
+   if (cfg_hooks->tidy_fallthru_edge)
+     cfg_hooks->tidy_fallthru_edge (e);
+ }
+ 
+ /* Fix up edges that now fall through, or rather should now fall through
+    but previously required a jump around now deleted blocks.  Simplify
+    the search by only examining blocks numerically adjacent, since this
+    is how find_basic_blocks created them.  */
+ 
+ void
+ tidy_fallthru_edges (void)
+ {
+   basic_block b, c;
+ 
+   if (!cfg_hooks->tidy_fallthru_edge)
+     return;
+ 
+   if (ENTRY_BLOCK_PTR->next_bb == EXIT_BLOCK_PTR)
+     return;
+ 
+   FOR_BB_BETWEEN (b, ENTRY_BLOCK_PTR->next_bb, EXIT_BLOCK_PTR->prev_bb, next_bb)
+     {
+       edge s;
+ 
+       c = b->next_bb;
+ 
+       /* We care about simple conditional or unconditional jumps with
+ 	 a single successor.
+ 
+ 	 If we had a conditional branch to the next instruction when
+ 	 find_basic_blocks was called, then there will only be one
+ 	 out edge for the block which ended with the conditional
+ 	 branch (since we do not create duplicate edges).
+ 
+ 	 Furthermore, the edge will be marked as a fallthru because we
+ 	 merge the flags for the duplicate edges.  So we do not want to
+ 	 check that the edge is not a FALLTHRU edge.  */
+ 
+       if (EDGE_COUNT (b->succs) == 1)
+ 	{
+ 	  s = EDGE_SUCC (b, 0);
+ 	  if (! (s->flags & EDGE_COMPLEX)
+ 	      && s->dest == c
+ 	      && !find_reg_note (BB_END (b), REG_CROSSING_JUMP, NULL_RTX))
+ 	    tidy_fallthru_edge (s);
+ 	}
+     }
+ }
+ 
+ /* Returns true if we can duplicate basic block BB.  */
+ 
+ bool
+ can_duplicate_block_p (basic_block bb)
+ {
+   edge e;
+ 
+   if (!cfg_hooks->can_duplicate_block_p)
+     internal_error ("%s does not support can_duplicate_block_p.",
+ 		    cfg_hooks->name);
+ 
+   if (bb == EXIT_BLOCK_PTR || bb == ENTRY_BLOCK_PTR)
+     return false;
+ 
+   /* Duplicating fallthru block to exit would require adding a jump
+      and splitting the real last BB.  */
+   e = find_edge (bb, EXIT_BLOCK_PTR);
+   if (e && (e->flags & EDGE_FALLTHRU))
+     return false;
+ 
+   return cfg_hooks->can_duplicate_block_p (bb);
+ }
+ 
+ /* Duplicates basic block BB and redirects edge E to it.  Returns the
+    new basic block.  */
+ 
+ basic_block
+ duplicate_block (basic_block bb, edge e)
+ {
+   edge s, n;
+   basic_block new_bb;
+   gcov_type new_count = e ? e->count : 0;
+   edge_iterator ei;
+ 
+   if (!cfg_hooks->duplicate_block)
+     internal_error ("%s does not support duplicate_block.",
+ 		    cfg_hooks->name);
+ 
+   if (bb->count < new_count)
+     new_count = bb->count;
+ 
+ #ifdef ENABLE_CHECKING
+   gcc_assert (can_duplicate_block_p (bb));
+ #endif
+ 
+   new_bb = cfg_hooks->duplicate_block (bb);
+ 
+   new_bb->loop_depth = bb->loop_depth;
+   new_bb->flags = bb->flags;
+   FOR_EACH_EDGE (s, ei, bb->succs)
+     {
+       /* Since we are creating edges from a new block to successors
+ 	 of another block (which therefore are known to be disjoint), there
+ 	 is no need to actually check for duplicated edges.  */
+       n = unchecked_make_edge (new_bb, s->dest, s->flags);
+       n->probability = s->probability;
+       if (e && bb->count)
+ 	{
+ 	  /* Take care for overflows!  */
+ 	  n->count = s->count * (new_count * 10000 / bb->count) / 10000;
+ 	  s->count -= n->count;
+ 	}
+       else
+ 	n->count = s->count;
+       n->aux = s->aux;
+     }
+ 
+   if (e)
+     {
+       new_bb->count = new_count;
+       bb->count -= new_count;
+ 
+       new_bb->frequency = EDGE_FREQUENCY (e);
+       bb->frequency -= EDGE_FREQUENCY (e);
+ 
+       redirect_edge_and_branch_force (e, new_bb);
+ 
+       if (bb->count < 0)
+ 	bb->count = 0;
+       if (bb->frequency < 0)
+ 	bb->frequency = 0;
+     }
+   else
+     {
+       new_bb->count = bb->count;
+       new_bb->frequency = bb->frequency;
+     }
+ 
+   new_bb->rbi->original = bb;
+   bb->rbi->copy = new_bb;
+ 
+   return new_bb;
+ }
+ 
+ /* Return 1 if BB ends with a call, possibly followed by some
+    instructions that must stay with the call, 0 otherwise.  */
+ 
+ bool 
+ block_ends_with_call_p (basic_block bb)
+ {
+   if (!cfg_hooks->block_ends_with_call_p)
+     internal_error ("%s does not support block_ends_with_call_p", cfg_hooks->name);
+ 
+   return (cfg_hooks->block_ends_with_call_p) (bb);
+ }
+ 
+ /* Return 1 if BB ends with a conditional branch, 0 otherwise.  */
+ 
+ bool 
+ block_ends_with_condjump_p (basic_block bb)
+ {
+   if (!cfg_hooks->block_ends_with_condjump_p)
+     internal_error ("%s does not support block_ends_with_condjump_p",
+ 		    cfg_hooks->name);
+ 
+   return (cfg_hooks->block_ends_with_condjump_p) (bb);
+ }
+ 
+ /* Add fake edges to the function exit for any non constant and non noreturn
+    calls, volatile inline assembly in the bitmap of blocks specified by
+    BLOCKS or to the whole CFG if BLOCKS is zero.  Return the number of blocks
+    that were split.
+ 
+    The goal is to expose cases in which entering a basic block does not imply
+    that all subsequent instructions must be executed.  */
+ 
+ int
+ flow_call_edges_add (sbitmap blocks)
+ {
+   if (!cfg_hooks->flow_call_edges_add)
+     internal_error ("%s does not support flow_call_edges_add", 
+ 		    cfg_hooks->name);
+ 
+   return (cfg_hooks->flow_call_edges_add) (blocks);
+ }
+ 
+ /* This function is called immediately after edge E is added to the
+    edge vector E->dest->preds.  */
+ 
+ void
+ execute_on_growing_pred (edge e)
+ {
+   if (cfg_hooks->execute_on_growing_pred)
+     cfg_hooks->execute_on_growing_pred (e);
+ }
+ 
+ /* This function is called immediately before edge E is removed from
+    the edge vector E->dest->preds.  */
+ 
+ void
+ execute_on_shrinking_pred (edge e)
+ {
+   if (cfg_hooks->execute_on_shrinking_pred)
+     cfg_hooks->execute_on_shrinking_pred (e);
+ }
diff -Nrcpad gcc-3.4.3/gcc/cfghooks.h gcc-4.0.0/gcc/cfghooks.h
*** gcc-3.4.3/gcc/cfghooks.h	Sun Dec 21 14:08:32 2003
--- gcc-4.0.0/gcc/cfghooks.h	Mon Nov 22 22:04:21 2004
***************
*** 1,5 ****
  /* Hooks for cfg representation specific functions.
!    Copyright (C) 2003 Free Software Foundation, Inc.
     Contributed by Sebastian Pop <s.pop@laposte.net>
  
  This file is part of GCC.
--- 1,5 ----
  /* Hooks for cfg representation specific functions.
!    Copyright (C) 2003, 2004 Free Software Foundation, Inc.
     Contributed by Sebastian Pop <s.pop@laposte.net>
  
  This file is part of GCC.
*************** Boston, MA 02111-1307, USA.  */
*** 24,33 ****
  
  struct cfg_hooks
  {
!   /* Debugging.  Do not use macros to hook these so they can be called from
!      debugger!  */
!   int (*cfgh_verify_flow_info) (void);
!   void (*dump_bb) (basic_block, FILE *);
  
    /* Basic CFG manipulation.  */
  
--- 24,35 ----
  
  struct cfg_hooks
  {
!   /* Name of the corresponding ir.  */
!   const char *name;
! 
!   /* Debugging.  */
!   int (*verify_flow_info) (void);
!   void (*dump_bb) (basic_block, FILE *, int);
  
    /* Basic CFG manipulation.  */
  
*************** struct cfg_hooks
*** 35,54 ****
    basic_block (*create_basic_block) (void *head, void *end, basic_block after);
  
    /* Redirect edge E to the given basic block B and update underlying program
!      representation.  Returns false when edge is not easily redirectable for
!      whatever reason.  */
!   bool (*redirect_edge_and_branch) (edge e, basic_block b);
  
    /* Same as the above but allows redirecting of fallthru edges.  In that case
       newly created forwarder basic block is returned.  It aborts when called
       on abnormal edge.  */
    basic_block (*redirect_edge_and_branch_force) (edge, basic_block);
  
!   /* Remove given basic block and all edges possibly pointing into it.  */
!   void (*delete_block) (basic_block);
  
!   /* Split basic block B after specified instruction I.  */
!   edge (*split_block) (basic_block b, void * i);
  
    /* Return true when blocks A and B can be merged into single basic block.  */
    bool (*can_merge_blocks_p) (basic_block a, basic_block b);
--- 37,61 ----
    basic_block (*create_basic_block) (void *head, void *end, basic_block after);
  
    /* Redirect edge E to the given basic block B and update underlying program
!      representation.  Returns edge representing redirected branch (that may not
!      be equivalent to E in the case of duplicate edges being removed) or NULL
!      if edge is not easily redirectable for whatever reason.  */
!   edge (*redirect_edge_and_branch) (edge e, basic_block b);
  
    /* Same as the above but allows redirecting of fallthru edges.  In that case
       newly created forwarder basic block is returned.  It aborts when called
       on abnormal edge.  */
    basic_block (*redirect_edge_and_branch_force) (edge, basic_block);
  
!   /* Remove statements corresponding to a given basic block.  */
!   void (*delete_basic_block) (basic_block);
  
!   /* Creates a new basic block just after basic block B by splitting
!      everything after specified instruction I.  */
!   basic_block (*split_block) (basic_block b, void * i);
! 
!   /* Move block B immediately after block A.  */
!   bool (*move_block_after) (basic_block b, basic_block a);
  
    /* Return true when blocks A and B can be merged into single basic block.  */
    bool (*can_merge_blocks_p) (basic_block a, basic_block b);
*************** struct cfg_hooks
*** 56,83 ****
    /* Merge blocks A and B.  */
    void (*merge_blocks) (basic_block a, basic_block b);
  
    /* Higher level functions representable by primitive operations above if
       we didn't have some oddities in RTL and Tree representations.  */
!   basic_block (*cfgh_split_edge) (edge);
  };
  
! #define redirect_edge_and_branch(e,b)        cfg_hooks->redirect_edge_and_branch (e,b)
! #define redirect_edge_and_branch_force(e,b)  cfg_hooks->redirect_edge_and_branch_force (e,b)
! #define split_block(e,i)                     cfg_hooks->split_block (e,i)
! #define delete_block(b)			     cfg_hooks->delete_block (b)
! #define split_edge(e)                        cfg_hooks->cfgh_split_edge (e)
! #define create_basic_block(h,e,a)            cfg_hooks->create_basic_block (h,e,a)
! #define can_merge_blocks_p(a,b)		     cfg_hooks->can_merge_blocks_p (a,b)
! #define merge_blocks(a,b)		     cfg_hooks->merge_blocks (a,b)
  
  /* Hooks containers.  */
  extern struct cfg_hooks rtl_cfg_hooks;
! 
! /* A pointer to one of the hooks containers.  */
! extern struct cfg_hooks *cfg_hooks;
  
  /* Declarations.  */
  extern void rtl_register_cfg_hooks (void);
  extern void cfg_layout_rtl_register_cfg_hooks (void);
  
  #endif  /* GCC_CFGHOOKS_H */
--- 63,151 ----
    /* Merge blocks A and B.  */
    void (*merge_blocks) (basic_block a, basic_block b);
  
+   /* Predict edge E using PREDICTOR to given PROBABILITY.  */
+   void (*predict_edge) (edge e, enum br_predictor predictor, int probability);
+ 
+   /* Return true if the one of outgoing edges is already predicted by
+      PREDICTOR.  */
+   bool (*predicted_by_p) (basic_block bb, enum br_predictor predictor);
+ 
+   /* Return true when block A can be duplicated.  */
+   bool (*can_duplicate_block_p) (basic_block a);
+ 
+   /* Duplicate block A.  */
+   basic_block (*duplicate_block) (basic_block a);
+ 
    /* Higher level functions representable by primitive operations above if
       we didn't have some oddities in RTL and Tree representations.  */
!   basic_block (*split_edge) (edge);
!   void (*make_forwarder_block) (edge);
! 
!   /* Tries to make the edge fallthru.  */
!   void (*tidy_fallthru_edge) (edge);
! 
!   /* Say whether a block ends with a call, possibly followed by some
!      other code that must stay with the call.  */
!   bool (*block_ends_with_call_p) (basic_block);
! 
!   /* Say whether a block ends with a conditional branch.  Switches
!      and unconditional branches do not qualify.  */
!   bool (*block_ends_with_condjump_p) (basic_block);
! 
!   /* Add fake edges to the function exit for any non constant and non noreturn
!      calls, volatile inline assembly in the bitmap of blocks specified by
!      BLOCKS or to the whole CFG if BLOCKS is zero.  Return the number of blocks
!      that were split.
! 
!      The goal is to expose cases in which entering a basic block does not imply
!      that all subsequent instructions must be executed.  */
!   int (*flow_call_edges_add) (sbitmap);
! 
!   /* This function is called immediately after edge E is added to the
!      edge vector E->dest->preds.  */
!   void (*execute_on_growing_pred) (edge);
! 
!   /* This function is called immediately before edge E is removed from
!      the edge vector E->dest->preds.  */
!   void (*execute_on_shrinking_pred) (edge);
  };
  
! extern void verify_flow_info (void);
! extern void dump_bb (basic_block, FILE *, int);
! extern edge redirect_edge_and_branch (edge, basic_block);
! extern basic_block redirect_edge_and_branch_force (edge, basic_block);
! extern edge split_block (basic_block, void *);
! extern edge split_block_after_labels (basic_block);
! extern bool move_block_after (basic_block, basic_block);
! extern void delete_basic_block (basic_block);
! extern basic_block split_edge (edge);
! extern basic_block create_basic_block (void *, void *, basic_block);
! extern basic_block create_empty_bb (basic_block);
! extern bool can_merge_blocks_p (basic_block, basic_block);
! extern void merge_blocks (basic_block, basic_block);
! extern edge make_forwarder_block (basic_block, bool (*)(edge),
! 				  void (*) (basic_block));
! extern void tidy_fallthru_edge (edge);
! extern void tidy_fallthru_edges (void);
! extern void predict_edge (edge e, enum br_predictor predictor, int probability);
! extern bool predicted_by_p (basic_block bb, enum br_predictor predictor);
! extern bool can_duplicate_block_p (basic_block);
! extern basic_block duplicate_block (basic_block, edge);
! extern bool block_ends_with_call_p (basic_block bb);
! extern bool block_ends_with_condjump_p (basic_block bb);
! extern int flow_call_edges_add (sbitmap);
! extern void execute_on_growing_pred (edge);
! extern void execute_on_shrinking_pred (edge);
  
  /* Hooks containers.  */
+ extern struct cfg_hooks tree_cfg_hooks;
  extern struct cfg_hooks rtl_cfg_hooks;
! extern struct cfg_hooks cfg_layout_rtl_cfg_hooks;
  
  /* Declarations.  */
+ extern int ir_type (void);
  extern void rtl_register_cfg_hooks (void);
  extern void cfg_layout_rtl_register_cfg_hooks (void);
+ extern void tree_register_cfg_hooks (void);
  
  #endif  /* GCC_CFGHOOKS_H */
diff -Nrcpad gcc-3.4.3/gcc/cfglayout.c gcc-4.0.0/gcc/cfglayout.c
*** gcc-3.4.3/gcc/cfglayout.c	Thu Oct  7 06:11:59 2004
--- gcc-4.0.0/gcc/cfglayout.c	Tue Mar 22 13:39:12 2005
***************
*** 1,5 ****
  /* Basic block reordering routines for the GNU compiler.
!    Copyright (C) 2000, 2001, 2003 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
--- 1,5 ----
  /* Basic block reordering routines for the GNU compiler.
!    Copyright (C) 2000, 2001, 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
*************** Software Foundation, 59 Temple Place - S
*** 25,46 ****
  #include "tree.h"
  #include "rtl.h"
  #include "hard-reg-set.h"
  #include "basic-block.h"
  #include "insn-config.h"
  #include "output.h"
  #include "function.h"
- #include "obstack.h"
  #include "cfglayout.h"
  #include "cfgloop.h"
  #include "target.h"
  #include "ggc.h"
  #include "alloc-pool.h"
! 
! /* The contents of the current function definition are allocated
!    in this obstack, and all are freed at the end of the function.  */
! extern struct obstack flow_obstack;
! 
! alloc_pool cfg_layout_pool;
  
  /* Holds the interesting trailing notes for the function.  */
  rtx cfg_layout_function_footer, cfg_layout_function_header;
--- 25,41 ----
  #include "tree.h"
  #include "rtl.h"
  #include "hard-reg-set.h"
+ #include "obstack.h"
  #include "basic-block.h"
  #include "insn-config.h"
  #include "output.h"
  #include "function.h"
  #include "cfglayout.h"
  #include "cfgloop.h"
  #include "target.h"
  #include "ggc.h"
  #include "alloc-pool.h"
! #include "flags.h"
  
  /* Holds the interesting trailing notes for the function.  */
  rtx cfg_layout_function_footer, cfg_layout_function_header;
*************** static void change_scope (rtx, tree, tre
*** 55,63 ****
  
  void verify_insn_chain (void);
  static void fixup_fallthru_exit_predecessor (void);
- static rtx duplicate_insn_chain (rtx, rtx);
- static void break_superblocks (void);
  static tree insn_scope (rtx);
  
  rtx
  unlink_insn_chain (rtx first, rtx last)
--- 50,57 ----
  
  void verify_insn_chain (void);
  static void fixup_fallthru_exit_predecessor (void);
  static tree insn_scope (rtx);
+ static void update_unlikely_executed_notes (basic_block);
  
  rtx
  unlink_insn_chain (rtx first, rtx last)
*************** skip_insns_after_block (basic_block bb)
*** 121,127 ****
  
  	case CODE_LABEL:
  	  if (NEXT_INSN (insn)
! 	      && GET_CODE (NEXT_INSN (insn)) == JUMP_INSN
  	      && (GET_CODE (PATTERN (NEXT_INSN (insn))) == ADDR_VEC
  	          || GET_CODE (PATTERN (NEXT_INSN (insn))) == ADDR_DIFF_VEC))
  	    {
--- 115,121 ----
  
  	case CODE_LABEL:
  	  if (NEXT_INSN (insn)
! 	      && JUMP_P (NEXT_INSN (insn))
  	      && (GET_CODE (PATTERN (NEXT_INSN (insn))) == ADDR_VEC
  	          || GET_CODE (PATTERN (NEXT_INSN (insn))) == ADDR_DIFF_VEC))
  	    {
*************** skip_insns_after_block (basic_block bb)
*** 151,157 ****
    for (insn = last_insn; insn != BB_END (bb); insn = prev)
      {
        prev = PREV_INSN (insn);
!       if (GET_CODE (insn) == NOTE)
  	switch (NOTE_LINE_NUMBER (insn))
  	  {
  	  case NOTE_INSN_LOOP_END:
--- 145,151 ----
    for (insn = last_insn; insn != BB_END (bb); insn = prev)
      {
        prev = PREV_INSN (insn);
!       if (NOTE_P (insn))
  	switch (NOTE_LINE_NUMBER (insn))
  	  {
  	  case NOTE_INSN_LOOP_END:
*************** label_for_bb (basic_block bb)
*** 174,183 ****
  {
    rtx label = BB_HEAD (bb);
  
!   if (GET_CODE (label) != CODE_LABEL)
      {
!       if (rtl_dump_file)
! 	fprintf (rtl_dump_file, "Emitting label for block %d\n", bb->index);
  
        label = block_label (bb);
      }
--- 168,177 ----
  {
    rtx label = BB_HEAD (bb);
  
!   if (!LABEL_P (label))
      {
!       if (dump_file)
! 	fprintf (dump_file, "Emitting label for block %d\n", bb->index);
  
        label = block_label (bb);
      }
*************** record_effective_endpoints (void)
*** 197,208 ****
  
    for (insn = get_insns ();
         insn
!        && GET_CODE (insn) == NOTE
         && NOTE_LINE_NUMBER (insn) != NOTE_INSN_BASIC_BLOCK;
         insn = NEXT_INSN (insn))
      continue;
!   if (!insn)
!     abort ();  /* No basic blocks at all?  */
    if (PREV_INSN (insn))
      cfg_layout_function_header =
  	    unlink_insn_chain (get_insns (), PREV_INSN (insn));
--- 191,203 ----
  
    for (insn = get_insns ();
         insn
!        && NOTE_P (insn)
         && NOTE_LINE_NUMBER (insn) != NOTE_INSN_BASIC_BLOCK;
         insn = NEXT_INSN (insn))
      continue;
!   /* No basic blocks at all?  */
!   gcc_assert (insn);
!   
    if (PREV_INSN (insn))
      cfg_layout_function_header =
  	    unlink_insn_chain (get_insns (), PREV_INSN (insn));
*************** insn_locators_initialize (void)
*** 256,262 ****
    rtx insn, next;
    int loc = 0;
    int line_number = 0, last_line_number = 0;
!   char *file_name = NULL, *last_file_name = NULL;
  
    prologue_locator = epilogue_locator = 0;
  
--- 251,257 ----
    rtx insn, next;
    int loc = 0;
    int line_number = 0, last_line_number = 0;
!   const char *file_name = NULL, *last_file_name = NULL;
  
    prologue_locator = epilogue_locator = 0;
  
*************** insn_locators_initialize (void)
*** 269,280 ****
  
    for (insn = get_insns (); insn; insn = next)
      {
        next = NEXT_INSN (insn);
  
!       if ((active_insn_p (insn)
! 	   && GET_CODE (PATTERN (insn)) != ADDR_VEC
! 	   && GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC)
! 	  || !NEXT_INSN (insn)
  	  || (!prologue_locator && file_name))
  	{
  	  if (last_block != block)
--- 264,294 ----
  
    for (insn = get_insns (); insn; insn = next)
      {
+       int active = 0;
+       
        next = NEXT_INSN (insn);
  
!       if (NOTE_P (insn))
! 	{
! 	  gcc_assert (NOTE_LINE_NUMBER (insn) != NOTE_INSN_BLOCK_BEG
! 		      && NOTE_LINE_NUMBER (insn) != NOTE_INSN_BLOCK_END);
! 	  if (NOTE_LINE_NUMBER (insn) > 0)
! 	    {
! 	      expanded_location xloc;
! 	      NOTE_EXPANDED_LOCATION (xloc, insn);
! 	      line_number = xloc.line;
! 	      file_name = xloc.file;
! 	    }
! 	}
!       else
! 	active = (active_insn_p (insn)
! 		  && GET_CODE (PATTERN (insn)) != ADDR_VEC
! 		  && GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC);
!       
!       check_block_change (insn, &block);
! 
!       if (active
! 	  || !next
  	  || (!prologue_locator && file_name))
  	{
  	  if (last_block != block)
*************** insn_locators_initialize (void)
*** 295,338 ****
  	    {
  	      loc++;
  	      VARRAY_PUSH_INT (file_locators_locs, loc);
! 	      VARRAY_PUSH_CHAR_PTR (file_locators_files, file_name);
  	      last_file_name = file_name;
  	    }
! 	}
!       if (!prologue_locator && file_name)
! 	prologue_locator = loc;
!       if (!NEXT_INSN (insn))
! 	epilogue_locator = loc;
!       if (active_insn_p (insn))
!         INSN_LOCATOR (insn) = loc;
!       else if (GET_CODE (insn) == NOTE)
! 	{
! 	  switch (NOTE_LINE_NUMBER (insn))
! 	    {
! 	    case NOTE_INSN_BLOCK_BEG:
! 	      block = NOTE_BLOCK (insn);
! 	      delete_insn (insn);
! 	      break;
! 	    case NOTE_INSN_BLOCK_END:
! 	      block = BLOCK_SUPERCONTEXT (block);
! 	      if (block && TREE_CODE (block) == FUNCTION_DECL)
! 		block = 0;
! 	      delete_insn (insn);
! 	      break;
! 	    default:
! 	      if (NOTE_LINE_NUMBER (insn) > 0)
! 		{
! 		  line_number = NOTE_LINE_NUMBER (insn);
! 		  file_name = (char *)NOTE_SOURCE_FILE (insn);
! 		}
! 	      break;
! 	    }
  	}
      }
  
    /* Tag the blocks with a depth number so that change_scope can find
       the common parent easily.  */
    set_block_levels (DECL_INITIAL (cfun->decl), 0);
  }
  
  /* For each lexical block, set BLOCK_NUMBER to the depth at which it is
--- 309,331 ----
  	    {
  	      loc++;
  	      VARRAY_PUSH_INT (file_locators_locs, loc);
! 	      VARRAY_PUSH_CHAR_PTR (file_locators_files, (char *) file_name);
  	      last_file_name = file_name;
  	    }
! 	  if (!prologue_locator && file_name)
! 	    prologue_locator = loc;
! 	  if (!next)
! 	    epilogue_locator = loc;
! 	  if (active)
! 	    INSN_LOCATOR (insn) = loc;
  	}
      }
  
    /* Tag the blocks with a depth number so that change_scope can find
       the common parent easily.  */
    set_block_levels (DECL_INITIAL (cfun->decl), 0);
+ 
+   free_block_changes ();
  }
  
  /* For each lexical block, set BLOCK_NUMBER to the depth at which it is
*************** set_block_levels (tree block, int level)
*** 350,356 ****
  }
  
  /* Return sope resulting from combination of S1 and S2.  */
! tree
  choose_inner_scope (tree s1, tree s2)
  {
     if (!s1)
--- 343,349 ----
  }
  
  /* Return sope resulting from combination of S1 and S2.  */
! static tree
  choose_inner_scope (tree s1, tree s2)
  {
     if (!s1)
*************** change_scope (rtx orig_insn, tree s1, tr
*** 374,381 ****
  
    while (ts1 != ts2)
      {
!       if (ts1 == NULL || ts2 == NULL)
! 	abort ();
        if (BLOCK_NUMBER (ts1) > BLOCK_NUMBER (ts2))
  	ts1 = BLOCK_SUPERCONTEXT (ts1);
        else if (BLOCK_NUMBER (ts1) < BLOCK_NUMBER (ts2))
--- 367,373 ----
  
    while (ts1 != ts2)
      {
!       gcc_assert (ts1 && ts2);
        if (BLOCK_NUMBER (ts1) > BLOCK_NUMBER (ts2))
  	ts1 = BLOCK_SUPERCONTEXT (ts1);
        else if (BLOCK_NUMBER (ts1) < BLOCK_NUMBER (ts2))
*************** reemit_insn_block_notes (void)
*** 531,536 ****
--- 523,534 ----
      {
        tree this_block;
  
+       /* Avoid putting scope notes between jump table and its label.  */
+       if (JUMP_P (insn)
+ 	  && (GET_CODE (PATTERN (insn)) == ADDR_VEC
+ 	      || GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC))
+ 	continue;
+ 
        this_block = insn_scope (insn);
        /* For sequences compute scope resulting from merging all scopes
           of instructions nested inside.  */
*************** fixup_reorder_chain (void)
*** 612,619 ****
  	}
      }
  
!   if (index != n_basic_blocks)
!     abort ();
  
    NEXT_INSN (insn) = cfg_layout_function_footer;
    if (cfg_layout_function_footer)
--- 610,616 ----
  	}
      }
  
!   gcc_assert (index == n_basic_blocks);
  
    NEXT_INSN (insn) = cfg_layout_function_footer;
    if (cfg_layout_function_footer)
*************** fixup_reorder_chain (void)
*** 636,663 ****
        edge e_fall, e_taken, e;
        rtx bb_end_insn;
        basic_block nb;
  
!       if (bb->succ == NULL)
  	continue;
  
        /* Find the old fallthru edge, and another non-EH edge for
  	 a taken jump.  */
        e_taken = e_fall = NULL;
!       for (e = bb->succ; e ; e = e->succ_next)
  	if (e->flags & EDGE_FALLTHRU)
  	  e_fall = e;
  	else if (! (e->flags & EDGE_EH))
  	  e_taken = e;
  
        bb_end_insn = BB_END (bb);
!       if (GET_CODE (bb_end_insn) == JUMP_INSN)
  	{
  	  if (any_condjump_p (bb_end_insn))
  	    {
  	      /* If the old fallthru is still next, nothing to do.  */
  	      if (bb->rbi->next == e_fall->dest
! 	          || (!bb->rbi->next
! 		      && e_fall->dest == EXIT_BLOCK_PTR))
  		continue;
  
  	      /* The degenerated case of conditional jump jumping to the next
--- 633,662 ----
        edge e_fall, e_taken, e;
        rtx bb_end_insn;
        basic_block nb;
+       basic_block old_bb;
+       edge_iterator ei;
  
!       if (EDGE_COUNT (bb->succs) == 0)
  	continue;
  
        /* Find the old fallthru edge, and another non-EH edge for
  	 a taken jump.  */
        e_taken = e_fall = NULL;
! 
!       FOR_EACH_EDGE (e, ei, bb->succs)
  	if (e->flags & EDGE_FALLTHRU)
  	  e_fall = e;
  	else if (! (e->flags & EDGE_EH))
  	  e_taken = e;
  
        bb_end_insn = BB_END (bb);
!       if (JUMP_P (bb_end_insn))
  	{
  	  if (any_condjump_p (bb_end_insn))
  	    {
  	      /* If the old fallthru is still next, nothing to do.  */
  	      if (bb->rbi->next == e_fall->dest
! 	          || e_fall->dest == EXIT_BLOCK_PTR)
  		continue;
  
  	      /* The degenerated case of conditional jump jumping to the next
*************** fixup_reorder_chain (void)
*** 672,682 ****
  		{
  		  rtx note;
  		  edge e_fake;
  
  		  e_fake = unchecked_make_edge (bb, e_fall->dest, 0);
  
! 		  if (!redirect_jump (BB_END (bb), block_label (bb), 0))
! 		    abort ();
  		  note = find_reg_note (BB_END (bb), REG_BR_PROB, NULL_RTX);
  		  if (note)
  		    {
--- 671,684 ----
  		{
  		  rtx note;
  		  edge e_fake;
+ 		  bool redirected;
  
  		  e_fake = unchecked_make_edge (bb, e_fall->dest, 0);
  
! 		  redirected = redirect_jump (BB_END (bb),
! 					      block_label (bb), 0);
! 		  gcc_assert (redirected);
! 		  
  		  note = find_reg_note (BB_END (bb), REG_BR_PROB, NULL_RTX);
  		  if (note)
  		    {
*************** fixup_reorder_chain (void)
*** 703,746 ****
  		  if (note
  		      && INTVAL (XEXP (note, 0)) < REG_BR_PROB_BASE / 2
  		      && invert_jump (bb_end_insn,
! 				      label_for_bb (e_fall->dest), 0))
  		    {
  		      e_fall->flags &= ~EDGE_FALLTHRU;
  		      e_taken->flags |= EDGE_FALLTHRU;
  		      update_br_prob_note (bb);
  		      e = e_fall, e_fall = e_taken, e_taken = e;
  		    }
  		}
  
  	      /* Otherwise we can try to invert the jump.  This will
  		 basically never fail, however, keep up the pretense.  */
  	      else if (invert_jump (bb_end_insn,
! 				    label_for_bb (e_fall->dest), 0))
  		{
  		  e_fall->flags &= ~EDGE_FALLTHRU;
  		  e_taken->flags |= EDGE_FALLTHRU;
  		  update_br_prob_note (bb);
  		  continue;
  		}
  	    }
- 	  else if (returnjump_p (bb_end_insn))
- 	    continue;
  	  else
  	    {
! 	      /* Otherwise we have some switch or computed jump.  In the
! 		 99% case, there should not have been a fallthru edge.  */
! 	      if (! e_fall)
! 		continue;
! 
! #ifdef CASE_DROPS_THROUGH
! 	      /* Except for VAX.  Since we didn't have predication for the
! 		 tablejump, the fallthru block should not have moved.  */
! 	      if (bb->rbi->next == e_fall->dest)
! 		continue;
! 	      bb_end_insn = skip_insns_after_block (bb);
! #else
! 	      abort ();
! #endif
  	    }
  	}
        else
--- 705,755 ----
  		  if (note
  		      && INTVAL (XEXP (note, 0)) < REG_BR_PROB_BASE / 2
  		      && invert_jump (bb_end_insn,
! 				      (e_fall->dest == EXIT_BLOCK_PTR
! 				       ? NULL_RTX
! 				       : label_for_bb (e_fall->dest)), 0))
  		    {
  		      e_fall->flags &= ~EDGE_FALLTHRU;
+ #ifdef ENABLE_CHECKING
+ 		      gcc_assert (could_fall_through
+ 				  (e_taken->src, e_taken->dest));
+ #endif
  		      e_taken->flags |= EDGE_FALLTHRU;
  		      update_br_prob_note (bb);
  		      e = e_fall, e_fall = e_taken, e_taken = e;
  		    }
  		}
  
+ 	      /* If the "jumping" edge is a crossing edge, and the fall
+ 		 through edge is non-crossing, leave things as they are.  */
+ 	      else if ((e_taken->flags & EDGE_CROSSING)
+ 		       && !(e_fall->flags & EDGE_CROSSING))
+ 		continue;
+ 
  	      /* Otherwise we can try to invert the jump.  This will
  		 basically never fail, however, keep up the pretense.  */
  	      else if (invert_jump (bb_end_insn,
! 				    (e_fall->dest == EXIT_BLOCK_PTR
! 				     ? NULL_RTX
! 				     : label_for_bb (e_fall->dest)), 0))
  		{
  		  e_fall->flags &= ~EDGE_FALLTHRU;
+ #ifdef ENABLE_CHECKING
+ 		  gcc_assert (could_fall_through
+ 			      (e_taken->src, e_taken->dest));
+ #endif
  		  e_taken->flags |= EDGE_FALLTHRU;
  		  update_br_prob_note (bb);
  		  continue;
  		}
  	    }
  	  else
  	    {
! 	      /* Otherwise we have some return, switch or computed
! 		 jump.  In the 99% case, there should not have been a
! 		 fallthru edge.  */
! 	      gcc_assert (returnjump_p (bb_end_insn) || !e_fall);
! 	      continue;
  	    }
  	}
        else
*************** fixup_reorder_chain (void)
*** 756,762 ****
  	    continue;
  
  	  /* A fallthru to exit block.  */
! 	  if (!bb->rbi->next && e_fall->dest == EXIT_BLOCK_PTR)
  	    continue;
  	}
  
--- 765,771 ----
  	    continue;
  
  	  /* A fallthru to exit block.  */
! 	  if (e_fall->dest == EXIT_BLOCK_PTR)
  	    continue;
  	}
  
*************** fixup_reorder_chain (void)
*** 764,794 ****
        nb = force_nonfallthru (e_fall);
        if (nb)
  	{
! 	  cfg_layout_initialize_rbi (nb);
  	  nb->rbi->visited = 1;
  	  nb->rbi->next = bb->rbi->next;
  	  bb->rbi->next = nb;
  	  /* Don't process this new block.  */
  	  bb = nb;
  	}
      }
  
    /* Put basic_block_info in the new order.  */
  
!   if (rtl_dump_file)
      {
!       fprintf (rtl_dump_file, "Reordered sequence:\n");
!       for (bb = ENTRY_BLOCK_PTR->next_bb, index = 0; bb; bb = bb->rbi->next, index ++)
  	{
! 	  fprintf (rtl_dump_file, " %i ", index);
  	  if (bb->rbi->original)
! 	    fprintf (rtl_dump_file, "duplicate of %i ",
  		     bb->rbi->original->index);
! 	  else if (forwarder_block_p (bb) && GET_CODE (BB_HEAD (bb)) != CODE_LABEL)
! 	    fprintf (rtl_dump_file, "compensation ");
  	  else
! 	    fprintf (rtl_dump_file, "bb %i ", bb->index);
! 	  fprintf (rtl_dump_file, " [%i]\n", bb->frequency);
  	}
      }
  
--- 773,835 ----
        nb = force_nonfallthru (e_fall);
        if (nb)
  	{
! 	  initialize_bb_rbi (nb);
  	  nb->rbi->visited = 1;
  	  nb->rbi->next = bb->rbi->next;
  	  bb->rbi->next = nb;
  	  /* Don't process this new block.  */
+ 	  old_bb = bb;
  	  bb = nb;
+ 	  
+ 	  /* Make sure new bb is tagged for correct section (same as
+ 	     fall-thru source, since you cannot fall-throu across
+ 	     section boundaries).  */
+ 	  BB_COPY_PARTITION (e_fall->src, EDGE_PRED (bb, 0)->src);
+ 	  if (flag_reorder_blocks_and_partition
+ 	      && targetm.have_named_sections)
+ 	    {
+ 	      if (BB_PARTITION (EDGE_PRED (bb, 0)->src) == BB_COLD_PARTITION)
+ 		{
+ 		  rtx new_note;
+ 		  rtx note = BB_HEAD (e_fall->src);
+ 		  
+ 		  while (!INSN_P (note)
+ 			 && note != BB_END (e_fall->src))
+ 		    note = NEXT_INSN (note);
+ 		  
+ 		  new_note = emit_note_before 
+                                           (NOTE_INSN_UNLIKELY_EXECUTED_CODE, 
+ 					   note);
+ 		  NOTE_BASIC_BLOCK (new_note) = bb;
+ 		}
+ 	      if (JUMP_P (BB_END (bb))
+ 		  && !any_condjump_p (BB_END (bb))
+   		  && (EDGE_SUCC (bb, 0)->flags & EDGE_CROSSING))
+ 		REG_NOTES (BB_END (bb)) = gen_rtx_EXPR_LIST 
+ 		  (REG_CROSSING_JUMP, NULL_RTX, REG_NOTES (BB_END (bb)));
+ 	    }
  	}
      }
  
    /* Put basic_block_info in the new order.  */
  
!   if (dump_file)
      {
!       fprintf (dump_file, "Reordered sequence:\n");
!       for (bb = ENTRY_BLOCK_PTR->next_bb, index = 0;
! 	   bb;
! 	   bb = bb->rbi->next, index++)
  	{
! 	  fprintf (dump_file, " %i ", index);
  	  if (bb->rbi->original)
! 	    fprintf (dump_file, "duplicate of %i ",
  		     bb->rbi->original->index);
! 	  else if (forwarder_block_p (bb)
! 		   && !LABEL_P (BB_HEAD (bb)))
! 	    fprintf (dump_file, "compensation ");
  	  else
! 	    fprintf (dump_file, "bb %i ", bb->index);
! 	  fprintf (dump_file, " [%i]\n", bb->frequency);
  	}
      }
  
*************** fixup_reorder_chain (void)
*** 801,806 ****
--- 842,849 ----
        bb->index = index;
        BASIC_BLOCK (index) = bb;
  
+       update_unlikely_executed_notes (bb);
+ 
        bb->prev_bb = prev_bb;
        prev_bb->next_bb = bb;
      }
*************** fixup_reorder_chain (void)
*** 811,823 ****
    FOR_EACH_BB (bb)
      {
        edge e;
!       for (e = bb->succ; e && !(e->flags & EDGE_FALLTHRU); e = e->succ_next)
! 	continue;
        if (e && !can_fallthru (e->src, e->dest))
  	force_nonfallthru (e);
      }
  }
  
  /* Perform sanity checks on the insn chain.
     1. Check that next/prev pointers are consistent in both the forward and
        reverse direction.
--- 854,885 ----
    FOR_EACH_BB (bb)
      {
        edge e;
!       edge_iterator ei;
! 
!       FOR_EACH_EDGE (e, ei, bb->succs)
! 	if (e->flags & EDGE_FALLTHRU)
! 	  break;
! 
        if (e && !can_fallthru (e->src, e->dest))
  	force_nonfallthru (e);
      }
  }
  
+ /* Update the basic block number information in any 
+    NOTE_INSN_UNLIKELY_EXECUTED_CODE notes within the basic block.  */
+ 
+ static void
+ update_unlikely_executed_notes (basic_block bb)
+ {
+   rtx cur_insn;
+ 
+   for (cur_insn = BB_HEAD (bb); cur_insn != BB_END (bb); 
+        cur_insn = NEXT_INSN (cur_insn)) 
+     if (NOTE_P (cur_insn)
+ 	&& NOTE_LINE_NUMBER (cur_insn) == NOTE_INSN_UNLIKELY_EXECUTED_CODE)
+       NOTE_BASIC_BLOCK (cur_insn) = bb;
+ }
+ 
  /* Perform sanity checks on the insn chain.
     1. Check that next/prev pointers are consistent in both the forward and
        reverse direction.
*************** verify_insn_chain (void)
*** 833,863 ****
    for (prevx = NULL, insn_cnt1 = 1, x = get_insns ();
         x != 0;
         prevx = x, insn_cnt1++, x = NEXT_INSN (x))
!     if (PREV_INSN (x) != prevx)
!       abort ();
  
!   if (prevx != get_last_insn ())
!     abort ();
  
    for (nextx = NULL, insn_cnt2 = 1, x = get_last_insn ();
         x != 0;
         nextx = x, insn_cnt2++, x = PREV_INSN (x))
!     if (NEXT_INSN (x) != nextx)
!       abort ();
  
!   if (insn_cnt1 != insn_cnt2)
!     abort ();
  }
  
! /* The block falling through to exit must be the last one in the
!    reordered chain.  Ensure that this condition is met.  */
  static void
  fixup_fallthru_exit_predecessor (void)
  {
    edge e;
    basic_block bb = NULL;
  
!   for (e = EXIT_BLOCK_PTR->pred; e; e = e->pred_next)
      if (e->flags & EDGE_FALLTHRU)
        bb = e->src;
  
--- 895,928 ----
    for (prevx = NULL, insn_cnt1 = 1, x = get_insns ();
         x != 0;
         prevx = x, insn_cnt1++, x = NEXT_INSN (x))
!     gcc_assert (PREV_INSN (x) == prevx);
  
!   gcc_assert (prevx == get_last_insn ());
  
    for (nextx = NULL, insn_cnt2 = 1, x = get_last_insn ();
         x != 0;
         nextx = x, insn_cnt2++, x = PREV_INSN (x))
!     gcc_assert (NEXT_INSN (x) == nextx);
  
!   gcc_assert (insn_cnt1 == insn_cnt2);
  }
  
! /* If we have assembler epilogues, the block falling through to exit must
!    be the last one in the reordered chain when we reach final.  Ensure
!    that this condition is met.  */
  static void
  fixup_fallthru_exit_predecessor (void)
  {
    edge e;
+   edge_iterator ei;
    basic_block bb = NULL;
  
!   /* This transformation is not valid before reload, because we might
!      separate a call from the instruction that copies the return
!      value.  */
!   gcc_assert (reload_completed);
! 
!   FOR_EACH_EDGE (e, ei, EXIT_BLOCK_PTR->preds)
      if (e->flags & EDGE_FALLTHRU)
        bb = e->src;
  
*************** fixup_fallthru_exit_predecessor (void)
*** 870,876 ****
        if (c == bb)
  	{
  	  bb = split_block (bb, NULL)->dest;
! 	  cfg_layout_initialize_rbi (bb);
  	  bb->rbi->next = c->rbi->next;
  	  c->rbi->next = bb;
  	  bb->rbi->footer = c->rbi->footer;
--- 935,941 ----
        if (c == bb)
  	{
  	  bb = split_block (bb, NULL)->dest;
! 	  initialize_bb_rbi (bb);
  	  bb->rbi->next = c->rbi->next;
  	  c->rbi->next = bb;
  	  bb->rbi->footer = c->rbi->footer;
*************** fixup_fallthru_exit_predecessor (void)
*** 891,910 ****
  
  /* Return true in case it is possible to duplicate the basic block BB.  */
  
  bool
  cfg_layout_can_duplicate_bb_p (basic_block bb)
  {
-   edge s;
- 
-   if (bb == EXIT_BLOCK_PTR || bb == ENTRY_BLOCK_PTR)
-     return false;
- 
-   /* Duplicating fallthru block to exit would require adding a jump
-      and splitting the real last BB.  */
-   for (s = bb->succ; s; s = s->succ_next)
-     if (s->dest == EXIT_BLOCK_PTR && s->flags & EDGE_FALLTHRU)
-        return false;
- 
    /* Do not attempt to duplicate tablejumps, as we need to unshare
       the dispatch table.  This is difficult to do, as the instructions
       computing jump destination may be hoisted outside the basic block.  */
--- 956,970 ----
  
  /* Return true in case it is possible to duplicate the basic block BB.  */
  
+ /* We do not want to declare the function in a header file, since it should
+    only be used through the cfghooks interface, and we do not want to move
+    it to cfgrtl.c since it would require also moving quite a lot of related
+    code.  */
+ extern bool cfg_layout_can_duplicate_bb_p (basic_block);
+ 
  bool
  cfg_layout_can_duplicate_bb_p (basic_block bb)
  {
    /* Do not attempt to duplicate tablejumps, as we need to unshare
       the dispatch table.  This is difficult to do, as the instructions
       computing jump destination may be hoisted outside the basic block.  */
*************** cfg_layout_can_duplicate_bb_p (basic_blo
*** 917,923 ****
        rtx insn = BB_HEAD (bb);
        while (1)
  	{
! 	  if (INSN_P (insn) && (*targetm.cannot_copy_insn_p) (insn))
  	    return false;
  	  if (insn == BB_END (bb))
  	    break;
--- 977,983 ----
        rtx insn = BB_HEAD (bb);
        while (1)
  	{
! 	  if (INSN_P (insn) && targetm.cannot_copy_insn_p (insn))
  	    return false;
  	  if (insn == BB_END (bb))
  	    break;
*************** cfg_layout_can_duplicate_bb_p (basic_blo
*** 928,934 ****
    return true;
  }
  
! static rtx
  duplicate_insn_chain (rtx from, rtx to)
  {
    rtx insn, last;
--- 988,994 ----
    return true;
  }
  
! rtx
  duplicate_insn_chain (rtx from, rtx to)
  {
    rtx insn, last;
*************** duplicate_insn_chain (rtx from, rtx to)
*** 969,976 ****
  	         in first BB, we may want to copy the block.  */
  	    case NOTE_INSN_PROLOGUE_END:
  
- 	    case NOTE_INSN_LOOP_VTOP:
- 	    case NOTE_INSN_LOOP_CONT:
  	    case NOTE_INSN_LOOP_BEG:
  	    case NOTE_INSN_LOOP_END:
  	      /* Strip down the loop notes - we don't really want to keep
--- 1029,1034 ----
*************** duplicate_insn_chain (rtx from, rtx to)
*** 989,1050 ****
  	    case NOTE_INSN_BASIC_BLOCK:
  	      break;
  
- 	      /* There is no purpose to duplicate prologue.  */
- 	    case NOTE_INSN_BLOCK_BEG:
- 	    case NOTE_INSN_BLOCK_END:
- 	      /* The BLOCK_BEG/BLOCK_END notes should be eliminated when BB
- 	         reordering is in the progress.  */
- 	    case NOTE_INSN_EH_REGION_BEG:
- 	    case NOTE_INSN_EH_REGION_END:
- 	      /* Should never exist at BB duplication time.  */
- 	      abort ();
- 	      break;
  	    case NOTE_INSN_REPEATED_LINE_NUMBER:
  	      emit_note_copy (insn);
  	      break;
  
  	    default:
! 	      if (NOTE_LINE_NUMBER (insn) < 0)
! 		abort ();
  	      /* It is possible that no_line_number is set and the note
  	         won't be emitted.  */
  	      emit_note_copy (insn);
  	    }
  	  break;
  	default:
! 	  abort ();
  	}
      }
    insn = NEXT_INSN (last);
    delete_insn (last);
    return insn;
  }
! /* Create a duplicate of the basic block BB and redirect edge E into it.
!    If E is not specified, BB is just copied, but updating the frequencies
!    etc. is left to the caller.  */
  
  basic_block
! cfg_layout_duplicate_bb (basic_block bb, edge e)
  {
    rtx insn;
-   edge s, n;
    basic_block new_bb;
-   gcov_type new_count = e ? e->count : 0;
- 
-   if (bb->count < new_count)
-     new_count = bb->count;
-   if (!bb->pred)
-     abort ();
- #ifdef ENABLE_CHECKING
-   if (!cfg_layout_can_duplicate_bb_p (bb))
-     abort ();
- #endif
  
    insn = duplicate_insn_chain (BB_HEAD (bb), BB_END (bb));
    new_bb = create_basic_block (insn,
  			       insn ? get_last_insn () : NULL,
  			       EXIT_BLOCK_PTR->prev_bb);
  
    if (bb->rbi->header)
      {
        insn = bb->rbi->header;
--- 1047,1095 ----
  	    case NOTE_INSN_BASIC_BLOCK:
  	      break;
  
  	    case NOTE_INSN_REPEATED_LINE_NUMBER:
+ 	    case NOTE_INSN_UNLIKELY_EXECUTED_CODE:
  	      emit_note_copy (insn);
  	      break;
  
  	    default:
! 	      /* All other notes should have already been eliminated.
! 	       */
! 	      gcc_assert (NOTE_LINE_NUMBER (insn) >= 0);
! 	      
  	      /* It is possible that no_line_number is set and the note
  	         won't be emitted.  */
  	      emit_note_copy (insn);
  	    }
  	  break;
  	default:
! 	  gcc_unreachable ();
  	}
      }
    insn = NEXT_INSN (last);
    delete_insn (last);
    return insn;
  }
! /* Create a duplicate of the basic block BB.  */
! 
! /* We do not want to declare the function in a header file, since it should
!    only be used through the cfghooks interface, and we do not want to move
!    it to cfgrtl.c since it would require also moving quite a lot of related
!    code.  */
! extern basic_block cfg_layout_duplicate_bb (basic_block);
  
  basic_block
! cfg_layout_duplicate_bb (basic_block bb)
  {
    rtx insn;
    basic_block new_bb;
  
    insn = duplicate_insn_chain (BB_HEAD (bb), BB_END (bb));
    new_bb = create_basic_block (insn,
  			       insn ? get_last_insn () : NULL,
  			       EXIT_BLOCK_PTR->prev_bb);
  
+   BB_COPY_PARTITION (new_bb, bb);
    if (bb->rbi->header)
      {
        insn = bb->rbi->header;
*************** cfg_layout_duplicate_bb (basic_block bb,
*** 1067,1134 ****
  
    if (bb->global_live_at_start)
      {
!       new_bb->global_live_at_start = OBSTACK_ALLOC_REG_SET (&flow_obstack);
!       new_bb->global_live_at_end = OBSTACK_ALLOC_REG_SET (&flow_obstack);
        COPY_REG_SET (new_bb->global_live_at_start, bb->global_live_at_start);
        COPY_REG_SET (new_bb->global_live_at_end, bb->global_live_at_end);
      }
  
-   new_bb->loop_depth = bb->loop_depth;
-   new_bb->flags = bb->flags;
-   for (s = bb->succ; s; s = s->succ_next)
-     {
-       /* Since we are creating edges from a new block to successors
- 	 of another block (which therefore are known to be disjoint), there
- 	 is no need to actually check for duplicated edges.  */
-       n = unchecked_make_edge (new_bb, s->dest, s->flags);
-       n->probability = s->probability;
-       if (e && bb->count)
- 	{
- 	  /* Take care for overflows!  */
- 	  n->count = s->count * (new_count * 10000 / bb->count) / 10000;
- 	  s->count -= n->count;
- 	}
-       else
- 	n->count = s->count;
-       n->aux = s->aux;
-     }
- 
-   if (e)
-     {
-       new_bb->count = new_count;
-       bb->count -= new_count;
- 
-       new_bb->frequency = EDGE_FREQUENCY (e);
-       bb->frequency -= EDGE_FREQUENCY (e);
- 
-       redirect_edge_and_branch_force (e, new_bb);
- 
-       if (bb->count < 0)
- 	bb->count = 0;
-       if (bb->frequency < 0)
- 	bb->frequency = 0;
-     }
-   else
-     {
-       new_bb->count = bb->count;
-       new_bb->frequency = bb->frequency;
-     }
- 
-   new_bb->rbi->original = bb;
-   bb->rbi->copy = new_bb;
- 
    return new_bb;
  }
  
- void
- cfg_layout_initialize_rbi (basic_block bb)
- {
-   if (bb->rbi)
-     abort ();
-   bb->rbi = pool_alloc (cfg_layout_pool);
-   memset (bb->rbi, 0, sizeof (struct reorder_block_def));
- }
- 
  /* Main entry point to this module - initialize the datastructures for
     CFG layout changes.  It keeps LOOPS up-to-date if not null.
  
--- 1112,1126 ----
  
    if (bb->global_live_at_start)
      {
!       new_bb->global_live_at_start = ALLOC_REG_SET (&reg_obstack);
!       new_bb->global_live_at_end = ALLOC_REG_SET (&reg_obstack);
        COPY_REG_SET (new_bb->global_live_at_start, bb->global_live_at_start);
        COPY_REG_SET (new_bb->global_live_at_end, bb->global_live_at_end);
      }
  
    return new_bb;
  }
  
  /* Main entry point to this module - initialize the datastructures for
     CFG layout changes.  It keeps LOOPS up-to-date if not null.
  
*************** cfg_layout_initialize (unsigned int flag
*** 1141,1153 ****
  {
    basic_block bb;
  
!   /* Our algorithm depends on fact that there are now dead jumptables
       around the code.  */
!   cfg_layout_pool =
!     create_alloc_pool ("cfg layout pool", sizeof (struct reorder_block_def),
! 		       n_basic_blocks + 2);
    FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb)
!     cfg_layout_initialize_rbi (bb);
  
    cfg_layout_rtl_register_cfg_hooks ();
  
--- 1133,1144 ----
  {
    basic_block bb;
  
!   /* Our algorithm depends on fact that there are no dead jumptables
       around the code.  */
!   alloc_rbi_pool ();
! 
    FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb)
!     initialize_bb_rbi (bb);
  
    cfg_layout_rtl_register_cfg_hooks ();
  
*************** cfg_layout_initialize (unsigned int flag
*** 1157,1179 ****
  }
  
  /* Splits superblocks.  */
! static void
  break_superblocks (void)
  {
    sbitmap superblocks;
!   int i, need;
  
!   superblocks = sbitmap_alloc (n_basic_blocks);
    sbitmap_zero (superblocks);
  
!   need = 0;
! 
!   for (i = 0; i < n_basic_blocks; i++)
!     if (BASIC_BLOCK(i)->flags & BB_SUPERBLOCK)
        {
! 	BASIC_BLOCK(i)->flags &= ~BB_SUPERBLOCK;
! 	SET_BIT (superblocks, i);
! 	need = 1;
        }
  
    if (need)
--- 1148,1169 ----
  }
  
  /* Splits superblocks.  */
! void
  break_superblocks (void)
  {
    sbitmap superblocks;
!   bool need = false;
!   basic_block bb;
  
!   superblocks = sbitmap_alloc (last_basic_block);
    sbitmap_zero (superblocks);
  
!   FOR_EACH_BB (bb)
!     if (bb->flags & BB_SUPERBLOCK)
        {
! 	bb->flags &= ~BB_SUPERBLOCK;
! 	SET_BIT (superblocks, bb->index);
! 	need = true;
        }
  
    if (need)
*************** cfg_layout_finalize (void)
*** 1197,1210 ****
    verify_flow_info ();
  #endif
    rtl_register_cfg_hooks ();
!   fixup_fallthru_exit_predecessor ();
    fixup_reorder_chain ();
  
  #ifdef ENABLE_CHECKING
    verify_insn_chain ();
  #endif
! 
!   free_alloc_pool (cfg_layout_pool);
    FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb)
      bb->rbi = NULL;
  
--- 1187,1205 ----
    verify_flow_info ();
  #endif
    rtl_register_cfg_hooks ();
!   if (reload_completed
! #ifdef HAVE_epilogue
!       && !HAVE_epilogue
! #endif
!       )
!     fixup_fallthru_exit_predecessor ();
    fixup_reorder_chain ();
  
  #ifdef ENABLE_CHECKING
    verify_insn_chain ();
  #endif
!   
!   free_rbi_pool ();
    FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb)
      bb->rbi = NULL;
  
*************** can_copy_bbs_p (basic_block *bbs, unsign
*** 1229,1235 ****
    for (i = 0; i < n; i++)
      {
        /* In case we should redirect abnormal edge during duplication, fail.  */
!       for (e = bbs[i]->succ; e; e = e->succ_next)
  	if ((e->flags & EDGE_ABNORMAL)
  	    && e->dest->rbi->duplicated)
  	  {
--- 1224,1231 ----
    for (i = 0; i < n; i++)
      {
        /* In case we should redirect abnormal edge during duplication, fail.  */
!       edge_iterator ei;
!       FOR_EACH_EDGE (e, ei, bbs[i]->succs)
  	if ((e->flags & EDGE_ABNORMAL)
  	    && e->dest->rbi->duplicated)
  	  {
*************** can_copy_bbs_p (basic_block *bbs, unsign
*** 1237,1243 ****
  	    goto end;
  	  }
  
!       if (!cfg_layout_can_duplicate_bb_p (bbs[i]))
  	{
  	  ret = false;
  	  break;
--- 1233,1239 ----
  	    goto end;
  	  }
  
!       if (!can_duplicate_block_p (bbs[i]))
  	{
  	  ret = false;
  	  break;
*************** copy_bbs (basic_block *bbs, unsigned n, 
*** 1280,1290 ****
      {
        /* Duplicate.  */
        bb = bbs[i];
!       new_bb = new_bbs[i] = cfg_layout_duplicate_bb (bb, NULL);
        bb->rbi->duplicated = 1;
        /* Add to loop.  */
        add_bb_to_loop (new_bb, bb->loop_father->copy);
-       add_to_dominance_info (CDI_DOMINATORS, new_bb);
        /* Possibly set header.  */
        if (bb->loop_father->header == bb && bb->loop_father != base)
  	new_bb->loop_father->header = new_bb;
--- 1276,1285 ----
      {
        /* Duplicate.  */
        bb = bbs[i];
!       new_bb = new_bbs[i] = duplicate_block (bb, NULL);
        bb->rbi->duplicated = 1;
        /* Add to loop.  */
        add_bb_to_loop (new_bb, bb->loop_father->copy);
        /* Possibly set header.  */
        if (bb->loop_father->header == bb && bb->loop_father != base)
  	new_bb->loop_father->header = new_bb;
*************** copy_bbs (basic_block *bbs, unsigned n, 
*** 1312,1321 ****
      new_edges[j] = NULL;
    for (i = 0; i < n; i++)
      {
        new_bb = new_bbs[i];
        bb = bbs[i];
  
!       for (e = new_bb->succ; e; e = e->succ_next)
  	{
  	  for (j = 0; j < n_edges; j++)
  	    if (edges[j] && edges[j]->src == bb && edges[j]->dest == e->dest)
--- 1307,1317 ----
      new_edges[j] = NULL;
    for (i = 0; i < n; i++)
      {
+       edge_iterator ei;
        new_bb = new_bbs[i];
        bb = bbs[i];
  
!       FOR_EACH_EDGE (e, ei, new_bb->succs)
  	{
  	  for (j = 0; j < n_edges; j++)
  	    if (edges[j] && edges[j]->src == bb && edges[j]->dest == e->dest)
diff -Nrcpad gcc-3.4.3/gcc/cfglayout.h gcc-4.0.0/gcc/cfglayout.h
*** gcc-3.4.3/gcc/cfglayout.h	Mon Jul 26 14:42:10 2004
--- gcc-4.0.0/gcc/cfglayout.h	Fri Oct 15 14:47:06 2004
***************
*** 1,5 ****
  /* Basic block reordering routines for the GNU compiler.
!    Copyright (C) 2000, 2003 Free Software Foundation, Inc.
  
     This file is part of GCC.
  
--- 1,5 ----
  /* Basic block reordering routines for the GNU compiler.
!    Copyright (C) 2000, 2003, 2004 Free Software Foundation, Inc.
  
     This file is part of GCC.
  
***************
*** 18,47 ****
     Software Foundation, 59 Temple Place - Suite 330, Boston, MA
     02111-1307, USA.  */
  
! /* Structure to hold information about the blocks during reordering.  */
! typedef struct reorder_block_def
! {
!   rtx header;
!   rtx footer;
!   basic_block next;
!   basic_block original;
!   /* Used by loop copying.  */
!   basic_block copy;
!   int duplicated;
  
!   /* These fields are used by bb-reorder pass.  */
!   int visited;
! } *reorder_block_def;
  
  extern rtx cfg_layout_function_footer;
  
  extern void cfg_layout_initialize (unsigned int);
  extern void cfg_layout_finalize (void);
- extern bool cfg_layout_can_duplicate_bb_p (basic_block);
- extern basic_block cfg_layout_duplicate_bb (basic_block, edge);
  extern void insn_locators_initialize (void);
  extern void reemit_insn_block_notes (void);
  extern bool can_copy_bbs_p (basic_block *, unsigned);
  extern void copy_bbs (basic_block *, unsigned, basic_block *,
  		      edge *, unsigned, edge *, struct loop *);
! extern void cfg_layout_initialize_rbi (basic_block);
--- 18,38 ----
     Software Foundation, 59 Temple Place - Suite 330, Boston, MA
     02111-1307, USA.  */
  
! #ifndef GCC_CFGLAYOUT_H
! #define GCC_CFGLAYOUT_H
  
! #include "basic-block.h"
  
  extern rtx cfg_layout_function_footer;
  
  extern void cfg_layout_initialize (unsigned int);
  extern void cfg_layout_finalize (void);
  extern void insn_locators_initialize (void);
  extern void reemit_insn_block_notes (void);
  extern bool can_copy_bbs_p (basic_block *, unsigned);
  extern void copy_bbs (basic_block *, unsigned, basic_block *,
  		      edge *, unsigned, edge *, struct loop *);
! extern bool scan_ahead_for_unlikely_executed_note (rtx);
! extern rtx duplicate_insn_chain (rtx, rtx);
! 
! #endif /* GCC_CFGLAYOUT_H */
diff -Nrcpad gcc-3.4.3/gcc/cfgloop.c gcc-4.0.0/gcc/cfgloop.c
*** gcc-3.4.3/gcc/cfgloop.c	Fri Jan  2 22:44:27 2004
--- gcc-4.0.0/gcc/cfgloop.c	Sun Feb 20 11:09:14 2005
***************
*** 1,5 ****
  /* Natural loop discovery code for GNU compiler.
!    Copyright (C) 2000, 2001, 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
--- 1,5 ----
  /* Natural loop discovery code for GNU compiler.
!    Copyright (C) 2000, 2001, 2003, 2004, 2005 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
*************** Software Foundation, 59 Temple Place - S
*** 24,38 ****
--- 24,45 ----
  #include "tm.h"
  #include "rtl.h"
  #include "hard-reg-set.h"
+ #include "obstack.h"
+ #include "function.h"
  #include "basic-block.h"
  #include "toplev.h"
  #include "cfgloop.h"
  #include "flags.h"
+ #include "tree.h"
+ #include "tree-flow.h"
  
  /* Ratio of frequencies of edges so that one of more latch edges is
     considered to belong to inner loop with same header.  */
  #define HEAVY_EDGE_RATIO 8
  
+ #define HEADER_BLOCK(B) (* (int *) (B)->aux)
+ #define LATCH_EDGE(E) (*(int *) (E)->aux)
+ 
  static void flow_loops_cfg_dump (const struct loops *, FILE *);
  static void flow_loop_entry_edges_find (struct loop *);
  static void flow_loop_exit_edges_find (struct loop *);
*************** static int flow_loop_nodes_find (basic_b
*** 40,51 ****
  static void flow_loop_pre_header_scan (struct loop *);
  static basic_block flow_loop_pre_header_find (basic_block);
  static int flow_loop_level_compute (struct loop *);
! static int flow_loops_level_compute (struct loops *);
  static void establish_preds (struct loop *);
- static basic_block make_forwarder_block (basic_block, int, int, edge, int);
  static void canonicalize_loop_headers (void);
  static bool glb_enum_p (basic_block, void *);
- static void redirect_edge_with_latch_update (edge, basic_block);
  
  /* Dump loop related CFG information.  */
  
--- 47,56 ----
  static void flow_loop_pre_header_scan (struct loop *);
  static basic_block flow_loop_pre_header_find (basic_block);
  static int flow_loop_level_compute (struct loop *);
! static void flow_loops_level_compute (struct loops *);
  static void establish_preds (struct loop *);
  static void canonicalize_loop_headers (void);
  static bool glb_enum_p (basic_block, void *);
  
  /* Dump loop related CFG information.  */
  
*************** flow_loops_cfg_dump (const struct loops 
*** 61,69 ****
    FOR_EACH_BB (bb)
      {
        edge succ;
  
        fprintf (file, ";; %d succs { ", bb->index);
!       for (succ = bb->succ; succ; succ = succ->succ_next)
  	fprintf (file, "%d ", succ->dest->index);
        fprintf (file, "}\n");
      }
--- 66,75 ----
    FOR_EACH_BB (bb)
      {
        edge succ;
+       edge_iterator ei;
  
        fprintf (file, ";; %d succs { ", bb->index);
!       FOR_EACH_EDGE (succ, ei, bb->succs)
  	fprintf (file, "%d ", succ->dest->index);
        fprintf (file, "}\n");
      }
*************** flow_loops_cfg_dump (const struct loops 
*** 94,101 ****
  bool
  flow_loop_nested_p (const struct loop *outer, const struct loop *loop)
  {
!   return loop->depth > outer->depth
! 	 && loop->pred[outer->depth] == outer;
  }
  
  /* Dump the loop information specified by LOOP to the stream FILE
--- 100,121 ----
  bool
  flow_loop_nested_p (const struct loop *outer, const struct loop *loop)
  {
!   return (loop->depth > outer->depth
! 	 && loop->pred[outer->depth] == outer);
! }
! 
! /* Returns the loop such that LOOP is nested DEPTH (indexed from zero)
!    loops within LOOP.  */
! 
! struct loop *
! superloop_at_depth (struct loop *loop, unsigned depth)
! {
!   gcc_assert (depth <= (unsigned) loop->depth);
! 
!   if (depth == (unsigned) loop->depth)
!     return loop;
! 
!   return loop->pred[depth];
  }
  
  /* Dump the loop information specified by LOOP to the stream FILE
*************** flow_loops_dump (const struct loops *loo
*** 154,161 ****
    if (! num_loops || ! file)
      return;
  
!   fprintf (file, ";; %d loops found, %d levels\n",
! 	   num_loops, loops->levels);
  
    for (i = 0; i < num_loops; i++)
      {
--- 174,180 ----
    if (! num_loops || ! file)
      return;
  
!   fprintf (file, ";; %d loops found\n", num_loops);
  
    for (i = 0; i < num_loops; i++)
      {
*************** flow_loops_free (struct loops *loops)
*** 195,202 ****
      {
        unsigned i;
  
!       if (! loops->num)
! 	abort ();
  
        /* Free the loop descriptors.  */
        for (i = 0; i < loops->num; i++)
--- 214,220 ----
      {
        unsigned i;
  
!       gcc_assert (loops->num);
  
        /* Free the loop descriptors.  */
        for (i = 0; i < loops->num; i++)
*************** static void
*** 226,247 ****
  flow_loop_entry_edges_find (struct loop *loop)
  {
    edge e;
    int num_entries;
  
    num_entries = 0;
!   for (e = loop->header->pred; e; e = e->pred_next)
      {
        if (flow_loop_outside_edge_p (loop, e))
  	num_entries++;
      }
  
!   if (! num_entries)
!     abort ();
  
    loop->entry_edges = xmalloc (num_entries * sizeof (edge *));
  
    num_entries = 0;
!   for (e = loop->header->pred; e; e = e->pred_next)
      {
        if (flow_loop_outside_edge_p (loop, e))
  	loop->entry_edges[num_entries++] = e;
--- 244,265 ----
  flow_loop_entry_edges_find (struct loop *loop)
  {
    edge e;
+   edge_iterator ei;
    int num_entries;
  
    num_entries = 0;
!   FOR_EACH_EDGE (e, ei, loop->header->preds)
      {
        if (flow_loop_outside_edge_p (loop, e))
  	num_entries++;
      }
  
!   gcc_assert (num_entries);
  
    loop->entry_edges = xmalloc (num_entries * sizeof (edge *));
  
    num_entries = 0;
!   FOR_EACH_EDGE (e, ei, loop->header->preds)
      {
        if (flow_loop_outside_edge_p (loop, e))
  	loop->entry_edges[num_entries++] = e;
*************** flow_loop_exit_edges_find (struct loop *
*** 269,276 ****
    bbs = get_loop_body (loop);
    for (i = 0; i < loop->num_nodes; i++)
      {
        node = bbs[i];
!       for (e = node->succ; e; e = e->succ_next)
  	{
  	  basic_block dest = e->dest;
  
--- 287,295 ----
    bbs = get_loop_body (loop);
    for (i = 0; i < loop->num_nodes; i++)
      {
+       edge_iterator ei;
        node = bbs[i];
!       FOR_EACH_EDGE (e, ei, node->succs)
  	{
  	  basic_block dest = e->dest;
  
*************** flow_loop_exit_edges_find (struct loop *
*** 291,303 ****
    num_exits = 0;
    for (i = 0; i < loop->num_nodes; i++)
      {
        node = bbs[i];
!       for (e = node->succ; e; e = e->succ_next)
  	{
  	  basic_block dest = e->dest;
  
  	  if (!flow_bb_inside_loop_p (loop, dest))
! 	    loop->exit_edges[num_exits++] = e;
        }
      }
    free (bbs);
--- 310,326 ----
    num_exits = 0;
    for (i = 0; i < loop->num_nodes; i++)
      {
+       edge_iterator ei;
        node = bbs[i];
!       FOR_EACH_EDGE (e, ei, node->succs)
  	{
  	  basic_block dest = e->dest;
  
  	  if (!flow_bb_inside_loop_p (loop, dest))
! 	    {
! 	      e->flags |= EDGE_LOOP_EXIT;
! 	      loop->exit_edges[num_exits++] = e;
! 	    }
        }
      }
    free (bbs);
*************** flow_loop_nodes_find (basic_block header
*** 330,339 ****
  	{
  	  basic_block node;
  	  edge e;
  
  	  node = stack[--sp];
  
! 	  for (e = node->pred; e; e = e->pred_next)
  	    {
  	      basic_block ancestor = e->src;
  
--- 353,363 ----
  	{
  	  basic_block node;
  	  edge e;
+ 	  edge_iterator ei;
  
  	  node = stack[--sp];
  
! 	  FOR_EACH_EDGE (e, ei, node->preds)
  	    {
  	      basic_block ancestor = e->src;
  
*************** flow_loop_nodes_find (basic_block header
*** 352,357 ****
--- 376,439 ----
    return num_nodes;
  }
  
+ /* For each loop in the lOOPS tree that has just a single exit
+    record the exit edge.  */
+ 
+ void
+ mark_single_exit_loops (struct loops *loops)
+ {
+   basic_block bb;
+   edge e;
+   struct loop *loop;
+   unsigned i;
+ 
+   for (i = 1; i < loops->num; i++)
+     {
+       loop = loops->parray[i];
+       if (loop)
+ 	loop->single_exit = NULL;
+     }
+ 
+   FOR_EACH_BB (bb)
+     {
+       edge_iterator ei;
+       if (bb->loop_father == loops->tree_root)
+ 	continue;
+       FOR_EACH_EDGE (e, ei, bb->succs)
+ 	{
+ 	  if (e->dest == EXIT_BLOCK_PTR)
+ 	    continue;
+ 
+ 	  if (flow_bb_inside_loop_p (bb->loop_father, e->dest))
+ 	    continue;
+ 
+ 	  for (loop = bb->loop_father;
+ 	       loop != e->dest->loop_father;
+ 	       loop = loop->outer)
+ 	    {
+ 	      /* If we have already seen an exit, mark this by the edge that
+ 		 surely does not occur as any exit.  */
+ 	      if (loop->single_exit)
+ 		loop->single_exit = EDGE_SUCC (ENTRY_BLOCK_PTR, 0);
+ 	      else
+ 		loop->single_exit = e;
+ 	    }
+ 	}
+     }
+ 
+   for (i = 1; i < loops->num; i++)
+     {
+       loop = loops->parray[i];
+       if (!loop)
+ 	continue;
+ 
+       if (loop->single_exit == EDGE_SUCC (ENTRY_BLOCK_PTR, 0))
+ 	loop->single_exit = NULL;
+     }
+ 
+   loops->state |= LOOPS_HAVE_MARKED_SINGLE_EXITS;
+ }
+ 
  /* Find the root node of the loop pre-header extended basic block and
     the edges along the trace from the root node to the loop header.  */
  
*************** flow_loop_pre_header_scan (struct loop *
*** 373,381 ****
    /* Count number of edges along trace from loop header to
       root of pre-header extended basic block.  Usually this is
       only one or two edges.  */
!   for (num = 1; ebb->pred->src != ENTRY_BLOCK_PTR && ! ebb->pred->pred_next;
         num++)
!     ebb = ebb->pred->src;
  
    loop->pre_header_edges = xmalloc (num * sizeof (edge));
    loop->num_pre_header_edges = num;
--- 455,464 ----
    /* Count number of edges along trace from loop header to
       root of pre-header extended basic block.  Usually this is
       only one or two edges.  */
!   for (num = 1;
!        EDGE_PRED (ebb, 0)->src != ENTRY_BLOCK_PTR && EDGE_COUNT (ebb->preds) == 1;
         num++)
!     ebb = EDGE_PRED (ebb, 0)->src;
  
    loop->pre_header_edges = xmalloc (num * sizeof (edge));
    loop->num_pre_header_edges = num;
*************** flow_loop_pre_header_scan (struct loop *
*** 383,389 ****
    /* Store edges in order that they are followed.  The source of the first edge
       is the root node of the pre-header extended basic block and the
       destination of the last last edge is the loop header.  */
!   for (e = loop->entry_edges[0]; num; e = e->src->pred)
      loop->pre_header_edges[--num] = e;
  }
  
--- 466,472 ----
    /* Store edges in order that they are followed.  The source of the first edge
       is the root node of the pre-header extended basic block and the
       destination of the last last edge is the loop header.  */
!   for (e = loop->entry_edges[0]; num; e = EDGE_PRED (e->src, 0))
      loop->pre_header_edges[--num] = e;
  }
  
*************** flow_loop_pre_header_find (basic_block h
*** 395,405 ****
  {
    basic_block pre_header;
    edge e;
  
    /* If block p is a predecessor of the header and is the only block
       that the header does not dominate, then it is the pre-header.  */
    pre_header = NULL;
!   for (e = header->pred; e; e = e->pred_next)
      {
        basic_block node = e->src;
  
--- 478,489 ----
  {
    basic_block pre_header;
    edge e;
+   edge_iterator ei;
  
    /* If block p is a predecessor of the header and is the only block
       that the header does not dominate, then it is the pre-header.  */
    pre_header = NULL;
!   FOR_EACH_EDGE (e, ei, header->preds)
      {
        basic_block node = e->src;
  
*************** establish_preds (struct loop *loop)
*** 427,432 ****
--- 511,520 ----
    struct loop *ploop, *father = loop->outer;
  
    loop->depth = father->depth + 1;
+ 
+   /* Remember the current loop depth if it is the largest seen so far.  */
+   cfun->max_loop_depth = MAX (cfun->max_loop_depth, loop->depth);
+ 
    if (loop->pred)
      free (loop->pred);
    loop->pred = xmalloc (sizeof (struct loop *) * loop->depth);
*************** flow_loop_level_compute (struct loop *lo
*** 508,517 ****
     hierarchy tree specified by LOOPS.  Return the maximum enclosed loop
     level.  */
  
! static int
  flow_loops_level_compute (struct loops *loops)
  {
!   return flow_loop_level_compute (loops->tree_root);
  }
  
  /* Scan a single natural loop specified by LOOP collecting information
--- 596,605 ----
     hierarchy tree specified by LOOPS.  Return the maximum enclosed loop
     level.  */
  
! static void
  flow_loops_level_compute (struct loops *loops)
  {
!   flow_loop_level_compute (loops->tree_root);
  }
  
  /* Scan a single natural loop specified by LOOP collecting information
*************** flow_loop_scan (struct loop *loop, int f
*** 547,643 ****
    return 1;
  }
  
! #define HEADER_BLOCK(B) (* (int *) (B)->aux)
! #define LATCH_EDGE(E) (*(int *) (E)->aux)
  
- /* Redirect edge and update latch and header info.  */
  static void
! redirect_edge_with_latch_update (edge e, basic_block to)
  {
!   basic_block jump;
! 
!   jump = redirect_edge_and_branch_force (e, to);
!   if (jump)
!     {
!       alloc_aux_for_block (jump, sizeof (int));
!       HEADER_BLOCK (jump) = 0;
!       alloc_aux_for_edge (jump->pred, sizeof (int));
!       LATCH_EDGE (jump->succ) = LATCH_EDGE (e);
!       LATCH_EDGE (jump->pred) = 0;
!     }
  }
  
! /* Split BB into entry part and rest; if REDIRECT_LATCH, redirect edges
!    marked as latch into entry part, analogically for REDIRECT_NONLATCH.
!    In both of these cases, ignore edge EXCEPT.  If CONN_LATCH, set edge
!    between created entry part and BB as latch one.  Return created entry
!    part.  */
  
! static basic_block
! make_forwarder_block (basic_block bb, int redirect_latch, int redirect_nonlatch, edge except, int conn_latch)
  {
!   edge e, next_e, fallthru;
!   basic_block dummy;
!   rtx insn;
! 
!   insn = PREV_INSN (first_insn_after_basic_block_note (bb));
! 
!   /* For empty block split_block will return NULL.  */
!   if (BB_END (bb) == insn)
!     emit_note_after (NOTE_INSN_DELETED, insn);
! 
!   fallthru = split_block (bb, insn);
!   dummy = fallthru->src;
!   bb = fallthru->dest;
! 
!   bb->aux = xmalloc (sizeof (int));
!   HEADER_BLOCK (dummy) = 0;
!   HEADER_BLOCK (bb) = 1;
! 
!   /* Redirect back edges we want to keep.  */
!   for (e = dummy->pred; e; e = next_e)
!     {
!       next_e = e->pred_next;
!       if (e == except
! 	  || !((redirect_latch && LATCH_EDGE (e))
! 	       || (redirect_nonlatch && !LATCH_EDGE (e))))
! 	{
! 	  dummy->frequency -= EDGE_FREQUENCY (e);
! 	  dummy->count -= e->count;
! 	  if (dummy->frequency < 0)
! 	    dummy->frequency = 0;
! 	  if (dummy->count < 0)
! 	    dummy->count = 0;
! 	  redirect_edge_with_latch_update (e, bb);
! 	}
!     }
  
!   alloc_aux_for_edge (fallthru, sizeof (int));
!   LATCH_EDGE (fallthru) = conn_latch;
  
!   return dummy;
  }
  
  /* Takes care of merging natural loops with shared headers.  */
  static void
  canonicalize_loop_headers (void)
  {
    basic_block header;
    edge e;
  
-   /* Compute the dominators.  */
-   calculate_dominance_info (CDI_DOMINATORS);
- 
    alloc_aux_for_blocks (sizeof (int));
    alloc_aux_for_edges (sizeof (int));
  
    /* Split blocks so that each loop has only single latch.  */
    FOR_EACH_BB (header)
      {
        int num_latches = 0;
        int have_abnormal_edge = 0;
  
!       for (e = header->pred; e; e = e->pred_next)
  	{
  	  basic_block latch = e->src;
  
--- 635,693 ----
    return 1;
  }
  
! /* A callback to update latch and header info for basic block JUMP created
!    by redirecting an edge.  */
  
  static void
! update_latch_info (basic_block jump)
  {
!   alloc_aux_for_block (jump, sizeof (int));
!   HEADER_BLOCK (jump) = 0;
!   alloc_aux_for_edge (EDGE_PRED (jump, 0), sizeof (int));
!   LATCH_EDGE (EDGE_PRED (jump, 0)) = 0;
!   set_immediate_dominator (CDI_DOMINATORS, jump, EDGE_PRED (jump, 0)->src);
  }
  
! /* A callback for make_forwarder block, to redirect all edges except for
!    MFB_KJ_EDGE to the entry part.  E is the edge for that we should decide
!    whether to redirect it.  */
  
! static edge mfb_kj_edge;
! static bool
! mfb_keep_just (edge e)
  {
!   return e != mfb_kj_edge;
! }
  
! /* A callback for make_forwarder block, to redirect the latch edges into an
!    entry part.  E is the edge for that we should decide whether to redirect
!    it.  */
  
! static bool
! mfb_keep_nonlatch (edge e)
! {
!   return LATCH_EDGE (e);
  }
  
  /* Takes care of merging natural loops with shared headers.  */
+ 
  static void
  canonicalize_loop_headers (void)
  {
    basic_block header;
    edge e;
  
    alloc_aux_for_blocks (sizeof (int));
    alloc_aux_for_edges (sizeof (int));
  
    /* Split blocks so that each loop has only single latch.  */
    FOR_EACH_BB (header)
      {
+       edge_iterator ei;
        int num_latches = 0;
        int have_abnormal_edge = 0;
  
!       FOR_EACH_EDGE (e, ei, header->preds)
  	{
  	  basic_block latch = e->src;
  
*************** canonicalize_loop_headers (void)
*** 657,704 ****
  	HEADER_BLOCK (header) = num_latches;
      }
  
!   free_dominance_info (CDI_DOMINATORS);
! 
!   if (HEADER_BLOCK (ENTRY_BLOCK_PTR->succ->dest))
      {
        basic_block bb;
  
        /* We could not redirect edges freely here. On the other hand,
  	 we can simply split the edge from entry block.  */
!       bb = split_edge (ENTRY_BLOCK_PTR->succ);
  
!       alloc_aux_for_edge (bb->succ, sizeof (int));
!       LATCH_EDGE (bb->succ) = 0;
        alloc_aux_for_block (bb, sizeof (int));
        HEADER_BLOCK (bb) = 0;
      }
  
    FOR_EACH_BB (header)
      {
-       int num_latch;
-       int want_join_latch;
        int max_freq, is_heavy;
!       edge heavy;
! 
!       if (!HEADER_BLOCK (header))
! 	continue;
! 
!       num_latch = HEADER_BLOCK (header);
! 
!       want_join_latch = (num_latch > 1);
  
!       if (!want_join_latch)
  	continue;
  
        /* Find a heavy edge.  */
        is_heavy = 1;
        heavy = NULL;
        max_freq = 0;
!       for (e = header->pred; e; e = e->pred_next)
  	if (LATCH_EDGE (e) &&
  	    EDGE_FREQUENCY (e) > max_freq)
  	  max_freq = EDGE_FREQUENCY (e);
!       for (e = header->pred; e; e = e->pred_next)
  	if (LATCH_EDGE (e) &&
  	    EDGE_FREQUENCY (e) >= max_freq / HEAVY_EDGE_RATIO)
  	  {
--- 707,744 ----
  	HEADER_BLOCK (header) = num_latches;
      }
  
!   if (HEADER_BLOCK (EDGE_SUCC (ENTRY_BLOCK_PTR, 0)->dest))
      {
        basic_block bb;
  
        /* We could not redirect edges freely here. On the other hand,
  	 we can simply split the edge from entry block.  */
!       bb = split_edge (EDGE_SUCC (ENTRY_BLOCK_PTR, 0));
  
!       alloc_aux_for_edge (EDGE_SUCC (bb, 0), sizeof (int));
!       LATCH_EDGE (EDGE_SUCC (bb, 0)) = 0;
        alloc_aux_for_block (bb, sizeof (int));
        HEADER_BLOCK (bb) = 0;
      }
  
    FOR_EACH_BB (header)
      {
        int max_freq, is_heavy;
!       edge heavy, tmp_edge;
!       edge_iterator ei;
  
!       if (HEADER_BLOCK (header) <= 1)
  	continue;
  
        /* Find a heavy edge.  */
        is_heavy = 1;
        heavy = NULL;
        max_freq = 0;
!       FOR_EACH_EDGE (e, ei, header->preds)
  	if (LATCH_EDGE (e) &&
  	    EDGE_FREQUENCY (e) > max_freq)
  	  max_freq = EDGE_FREQUENCY (e);
!       FOR_EACH_EDGE (e, ei, header->preds)
  	if (LATCH_EDGE (e) &&
  	    EDGE_FREQUENCY (e) >= max_freq / HEAVY_EDGE_RATIO)
  	  {
*************** canonicalize_loop_headers (void)
*** 713,729 ****
  
        if (is_heavy)
  	{
! 	  basic_block new_header =
! 	    make_forwarder_block (header, true, true, heavy, 0);
! 	  if (num_latch > 2)
! 	    make_forwarder_block (new_header, true, false, NULL, 1);
  	}
-       else
- 	make_forwarder_block (header, true, false, NULL, 1);
      }
  
    free_aux_for_blocks ();
    free_aux_for_edges ();
  }
  
  /* Find all the natural loops in the function and save in LOOPS structure and
--- 753,802 ----
  
        if (is_heavy)
  	{
! 	  /* Split out the heavy edge, and create inner loop for it.  */
! 	  mfb_kj_edge = heavy;
! 	  tmp_edge = make_forwarder_block (header, mfb_keep_just,
! 					   update_latch_info);
! 	  alloc_aux_for_block (tmp_edge->dest, sizeof (int));
! 	  HEADER_BLOCK (tmp_edge->dest) = 1;
! 	  alloc_aux_for_edge (tmp_edge, sizeof (int));
! 	  LATCH_EDGE (tmp_edge) = 0;
! 	  HEADER_BLOCK (header)--;
! 	}
! 
!       if (HEADER_BLOCK (header) > 1)
! 	{
! 	  /* Create a new latch block.  */
! 	  tmp_edge = make_forwarder_block (header, mfb_keep_nonlatch,
! 					   update_latch_info);
! 	  alloc_aux_for_block (tmp_edge->dest, sizeof (int));
! 	  HEADER_BLOCK (tmp_edge->src) = 0;
! 	  HEADER_BLOCK (tmp_edge->dest) = 1;
! 	  alloc_aux_for_edge (tmp_edge, sizeof (int));
! 	  LATCH_EDGE (tmp_edge) = 1;
  	}
      }
  
    free_aux_for_blocks ();
    free_aux_for_edges ();
+ 
+ #ifdef ENABLE_CHECKING
+   verify_dominators (CDI_DOMINATORS);
+ #endif
+ }
+ 
+ /* Initialize all the parallel_p fields of the loops structure to true.  */
+ 
+ static void
+ initialize_loops_parallel_p (struct loops *loops)
+ {
+   unsigned int i;
+ 
+   for (i = 0; i < loops->num; i++)
+     {
+       struct loop *loop = loops->parray[i];
+       loop->parallel_p = true;
+     }
  }
  
  /* Find all the natural loops in the function and save in LOOPS structure and
*************** flow_loops_find (struct loops *loops, in
*** 747,757 ****
    /* This function cannot be repeatedly called with different
       flags to build up the loop information.  The loop tree
       must always be built if this function is called.  */
!   if (! (flags & LOOP_TREE))
!     abort ();
  
    memset (loops, 0, sizeof *loops);
  
    /* Taking care of this degenerate case makes the rest of
       this code simpler.  */
    if (n_basic_blocks == 0)
--- 820,833 ----
    /* This function cannot be repeatedly called with different
       flags to build up the loop information.  The loop tree
       must always be built if this function is called.  */
!   gcc_assert (flags & LOOP_TREE);
  
    memset (loops, 0, sizeof *loops);
  
+   /* We are going to recount the maximum loop depth,
+      so throw away the last count.  */
+   cfun->max_loop_depth = 0;
+ 
    /* Taking care of this degenerate case makes the rest of
       this code simpler.  */
    if (n_basic_blocks == 0)
*************** flow_loops_find (struct loops *loops, in
*** 760,771 ****
    dfs_order = NULL;
    rc_order = NULL;
  
    /* Join loops with shared headers.  */
    canonicalize_loop_headers ();
  
-   /* Compute the dominators.  */
-   calculate_dominance_info (CDI_DOMINATORS);
- 
    /* Count the number of loop headers.  This should be the
       same as the number of natural loops.  */
    headers = sbitmap_alloc (last_basic_block);
--- 836,847 ----
    dfs_order = NULL;
    rc_order = NULL;
  
+   /* Ensure that the dominators are computed.  */
+   calculate_dominance_info (CDI_DOMINATORS);
+ 
    /* Join loops with shared headers.  */
    canonicalize_loop_headers ();
  
    /* Count the number of loop headers.  This should be the
       same as the number of natural loops.  */
    headers = sbitmap_alloc (last_basic_block);
*************** flow_loops_find (struct loops *loops, in
*** 774,797 ****
    num_loops = 0;
    FOR_EACH_BB (header)
      {
        int more_latches = 0;
  
        header->loop_depth = 0;
  
        /* If we have an abnormal predecessor, do not consider the
  	 loop (not worth the problems).  */
!       for (e = header->pred; e; e = e->pred_next)
  	if (e->flags & EDGE_ABNORMAL)
  	  break;
        if (e)
  	continue;
  
!       for (e = header->pred; e; e = e->pred_next)
  	{
  	  basic_block latch = e->src;
  
! 	  if (e->flags & EDGE_ABNORMAL)
! 	    abort ();
  
  	  /* Look for back edges where a predecessor is dominated
  	     by this block.  A natural loop has a single entry
--- 850,873 ----
    num_loops = 0;
    FOR_EACH_BB (header)
      {
+       edge_iterator ei;
        int more_latches = 0;
  
        header->loop_depth = 0;
  
        /* If we have an abnormal predecessor, do not consider the
  	 loop (not worth the problems).  */
!       FOR_EACH_EDGE (e, ei, header->preds)
  	if (e->flags & EDGE_ABNORMAL)
  	  break;
        if (e)
  	continue;
  
!       FOR_EACH_EDGE (e, ei, header->preds)
  	{
  	  basic_block latch = e->src;
  
! 	  gcc_assert (!(e->flags & EDGE_ABNORMAL));
  
  	  /* Look for back edges where a predecessor is dominated
  	     by this block.  A natural loop has a single entry
*************** flow_loops_find (struct loops *loops, in
*** 802,809 ****
  	      && dominated_by_p (CDI_DOMINATORS, latch, header))
  	    {
  	      /* Shared headers should be eliminated by now.  */
! 	      if (more_latches)
! 		abort ();
  	      more_latches = 1;
  	      SET_BIT (headers, header->index);
  	      num_loops++;
--- 878,884 ----
  	      && dominated_by_p (CDI_DOMINATORS, latch, header))
  	    {
  	      /* Shared headers should be eliminated by now.  */
! 	      gcc_assert (!more_latches);
  	      more_latches = 1;
  	      SET_BIT (headers, header->index);
  	      num_loops++;
*************** flow_loops_find (struct loops *loops, in
*** 852,857 ****
--- 927,933 ----
        for (b = 0; b < n_basic_blocks; b++)
  	{
  	  struct loop *loop;
+ 	  edge_iterator ei;
  
  	  /* Search the nodes of the CFG in reverse completion order
  	     so that we can find outer loops first.  */
*************** flow_loops_find (struct loops *loops, in
*** 867,873 ****
  	  num_loops++;
  
  	  /* Look for the latch for this header block.  */
! 	  for (e = header->pred; e; e = e->pred_next)
  	    {
  	      basic_block latch = e->src;
  
--- 943,949 ----
  	  num_loops++;
  
  	  /* Look for the latch for this header block.  */
! 	  FOR_EACH_EDGE (e, ei, header->preds)
  	    {
  	      basic_block latch = e->src;
  
*************** flow_loops_find (struct loops *loops, in
*** 885,901 ****
  
        /* Assign the loop nesting depth and enclosed loop level for each
  	 loop.  */
!       loops->levels = flow_loops_level_compute (loops);
  
        /* Scan the loops.  */
        for (i = 1; i < num_loops; i++)
  	flow_loop_scan (loops->parray[i], flags);
  
        loops->num = num_loops;
!     }
!   else
!     {
!       free_dominance_info (CDI_DOMINATORS);
      }
  
    sbitmap_free (headers);
--- 961,974 ----
  
        /* Assign the loop nesting depth and enclosed loop level for each
  	 loop.  */
!       flow_loops_level_compute (loops);
  
        /* Scan the loops.  */
        for (i = 1; i < num_loops; i++)
  	flow_loop_scan (loops->parray[i], flags);
  
        loops->num = num_loops;
!       initialize_loops_parallel_p (loops);
      }
  
    sbitmap_free (headers);
*************** flow_loops_find (struct loops *loops, in
*** 909,928 ****
    return loops->num;
  }
  
- /* Update the information regarding the loops in the CFG
-    specified by LOOPS.  */
- 
- int
- flow_loops_update (struct loops *loops, int flags)
- {
-   /* One day we may want to update the current loop data.  For now
-      throw away the old stuff and rebuild what we need.  */
-   if (loops->parray)
-     flow_loops_free (loops);
- 
-   return flow_loops_find (loops, flags);
- }
- 
  /* Return nonzero if basic block BB belongs to LOOP.  */
  bool
  flow_bb_inside_loop_p (const struct loop *loop, const basic_block bb)
--- 982,987 ----
*************** flow_bb_inside_loop_p (const struct loop
*** 941,948 ****
  bool
  flow_loop_outside_edge_p (const struct loop *loop, edge e)
  {
!   if (e->dest != loop->header)
!     abort ();
    return !flow_bb_inside_loop_p (loop, e->src);
  }
  
--- 1000,1006 ----
  bool
  flow_loop_outside_edge_p (const struct loop *loop, edge e)
  {
!   gcc_assert (e->dest == loop->header);
    return !flow_bb_inside_loop_p (loop, e->src);
  }
  
*************** get_loop_body (const struct loop *loop)
*** 962,969 ****
    basic_block *tovisit, bb;
    unsigned tv = 0;
  
!   if (!loop->num_nodes)
!     abort ();
  
    tovisit = xcalloc (loop->num_nodes, sizeof (basic_block));
    tovisit[tv++] = loop->header;
--- 1020,1026 ----
    basic_block *tovisit, bb;
    unsigned tv = 0;
  
!   gcc_assert (loop->num_nodes);
  
    tovisit = xcalloc (loop->num_nodes, sizeof (basic_block));
    tovisit[tv++] = loop->header;
*************** get_loop_body (const struct loop *loop)
*** 971,978 ****
    if (loop->latch == EXIT_BLOCK_PTR)
      {
        /* There may be blocks unreachable from EXIT_BLOCK.  */
!       if (loop->num_nodes != (unsigned) n_basic_blocks + 2)
! 	abort ();
        FOR_EACH_BB (bb)
  	tovisit[tv++] = bb;
        tovisit[tv++] = EXIT_BLOCK_PTR;
--- 1028,1034 ----
    if (loop->latch == EXIT_BLOCK_PTR)
      {
        /* There may be blocks unreachable from EXIT_BLOCK.  */
!       gcc_assert (loop->num_nodes == (unsigned) n_basic_blocks + 2);
        FOR_EACH_BB (bb)
  	tovisit[tv++] = bb;
        tovisit[tv++] = EXIT_BLOCK_PTR;
*************** get_loop_body (const struct loop *loop)
*** 984,994 ****
  			       loop->header) + 1;
      }
  
!   if (tv != loop->num_nodes)
!     abort ();
    return tovisit;
  }
  
  /* Gets exit edges of a LOOP, returning their number in N_EDGES.  */
  edge *
  get_loop_exit_edges (const struct loop *loop, unsigned int *n_edges)
--- 1040,1153 ----
  			       loop->header) + 1;
      }
  
!   gcc_assert (tv == loop->num_nodes);
    return tovisit;
  }
  
+ /* Fills dominance descendants inside LOOP of the basic block BB into
+    array TOVISIT from index *TV.  */
+ 
+ static void
+ fill_sons_in_loop (const struct loop *loop, basic_block bb,
+ 		   basic_block *tovisit, int *tv)
+ {
+   basic_block son, postpone = NULL;
+ 
+   tovisit[(*tv)++] = bb;
+   for (son = first_dom_son (CDI_DOMINATORS, bb);
+        son;
+        son = next_dom_son (CDI_DOMINATORS, son))
+     {
+       if (!flow_bb_inside_loop_p (loop, son))
+ 	continue;
+ 
+       if (dominated_by_p (CDI_DOMINATORS, loop->latch, son))
+ 	{
+ 	  postpone = son;
+ 	  continue;
+ 	}
+       fill_sons_in_loop (loop, son, tovisit, tv);
+     }
+ 
+   if (postpone)
+     fill_sons_in_loop (loop, postpone, tovisit, tv);
+ }
+ 
+ /* Gets body of a LOOP (that must be different from the outermost loop)
+    sorted by dominance relation.  Additionally, if a basic block s dominates
+    the latch, then only blocks dominated by s are be after it.  */
+ 
+ basic_block *
+ get_loop_body_in_dom_order (const struct loop *loop)
+ {
+   basic_block *tovisit;
+   int tv;
+ 
+   gcc_assert (loop->num_nodes);
+ 
+   tovisit = xcalloc (loop->num_nodes, sizeof (basic_block));
+ 
+   gcc_assert (loop->latch != EXIT_BLOCK_PTR);
+ 
+   tv = 0;
+   fill_sons_in_loop (loop, loop->header, tovisit, &tv);
+ 
+   gcc_assert (tv == (int) loop->num_nodes);
+ 
+   return tovisit;
+ }
+ 
+ /* Get body of a LOOP in breadth first sort order.  */
+ 
+ basic_block *
+ get_loop_body_in_bfs_order (const struct loop *loop)
+ {
+   basic_block *blocks;
+   basic_block bb;
+   bitmap visited;
+   unsigned int i = 0;
+   unsigned int vc = 1;
+ 
+   gcc_assert (loop->num_nodes);
+   gcc_assert (loop->latch != EXIT_BLOCK_PTR);
+ 
+   blocks = xcalloc (loop->num_nodes, sizeof (basic_block));
+   visited = BITMAP_ALLOC (NULL);
+ 
+   bb = loop->header;
+   while (i < loop->num_nodes)
+     {
+       edge e;
+       edge_iterator ei;
+       
+       if (!bitmap_bit_p (visited, bb->index))
+         { 
+           /* This basic block is now visited */
+           bitmap_set_bit (visited, bb->index);
+           blocks[i++] = bb;
+         }
+       
+       FOR_EACH_EDGE (e, ei, bb->succs)
+         { 
+           if (flow_bb_inside_loop_p (loop, e->dest))
+             { 
+               if (!bitmap_bit_p (visited, e->dest->index))
+                 { 
+                   bitmap_set_bit (visited, e->dest->index);
+                   blocks[i++] = e->dest;
+                 }
+             }
+         }
+       
+       gcc_assert (i >= vc);
+       
+       bb = blocks[vc++];
+     }
+   
+   BITMAP_FREE (visited);
+   return blocks;
+ }
+ 
  /* Gets exit edges of a LOOP, returning their number in N_EDGES.  */
  edge *
  get_loop_exit_edges (const struct loop *loop, unsigned int *n_edges)
*************** get_loop_exit_edges (const struct loop *
*** 996,1016 ****
    edge *edges, e;
    unsigned i, n;
    basic_block * body;
  
!   if (loop->latch == EXIT_BLOCK_PTR)
!     abort ();
  
    body = get_loop_body (loop);
    n = 0;
    for (i = 0; i < loop->num_nodes; i++)
!     for (e = body[i]->succ; e; e = e->succ_next)
        if (!flow_bb_inside_loop_p (loop, e->dest))
  	n++;
    edges = xmalloc (n * sizeof (edge));
    *n_edges = n;
    n = 0;
    for (i = 0; i < loop->num_nodes; i++)
!     for (e = body[i]->succ; e; e = e->succ_next)
        if (!flow_bb_inside_loop_p (loop, e->dest))
  	edges[n++] = e;
    free (body);
--- 1155,1175 ----
    edge *edges, e;
    unsigned i, n;
    basic_block * body;
+   edge_iterator ei;
  
!   gcc_assert (loop->latch != EXIT_BLOCK_PTR);
  
    body = get_loop_body (loop);
    n = 0;
    for (i = 0; i < loop->num_nodes; i++)
!     FOR_EACH_EDGE (e, ei, body[i]->succs)
        if (!flow_bb_inside_loop_p (loop, e->dest))
  	n++;
    edges = xmalloc (n * sizeof (edge));
    *n_edges = n;
    n = 0;
    for (i = 0; i < loop->num_nodes; i++)
!     FOR_EACH_EDGE (e, ei, body[i]->succs)
        if (!flow_bb_inside_loop_p (loop, e->dest))
  	edges[n++] = e;
    free (body);
*************** get_loop_exit_edges (const struct loop *
*** 1018,1023 ****
--- 1177,1202 ----
    return edges;
  }
  
+ /* Counts the number of conditional branches inside LOOP.  */
+ 
+ unsigned
+ num_loop_branches (const struct loop *loop)
+ {
+   unsigned i, n;
+   basic_block * body;
+ 
+   gcc_assert (loop->latch != EXIT_BLOCK_PTR);
+ 
+   body = get_loop_body (loop);
+   n = 0;
+   for (i = 0; i < loop->num_nodes; i++)
+     if (EDGE_COUNT (body[i]->succs) >= 2)
+       n++;
+   free (body);
+ 
+   return n;
+ }
+ 
  /* Adds basic block BB to LOOP.  */
  void
  add_bb_to_loop (basic_block bb, struct loop *loop)
*************** remove_bb_from_loops (basic_block bb)
*** 1043,1049 ****
       loop->pred[i]->num_nodes--;
     bb->loop_father = NULL;
     bb->loop_depth = 0;
!  }
  
  /* Finds nearest common ancestor in loop tree for given loops.  */
  struct loop *
--- 1222,1228 ----
       loop->pred[i]->num_nodes--;
     bb->loop_father = NULL;
     bb->loop_depth = 0;
! }
  
  /* Finds nearest common ancestor in loop tree for given loops.  */
  struct loop *
*************** cancel_loop (struct loops *loops, struct
*** 1072,1079 ****
    basic_block *bbs;
    unsigned i;
  
!   if (loop->inner)
!     abort ();
  
    /* Move blocks up one level (they should be removed as soon as possible).  */
    bbs = get_loop_body (loop);
--- 1251,1257 ----
    basic_block *bbs;
    unsigned i;
  
!   gcc_assert (!loop->inner);
  
    /* Move blocks up one level (they should be removed as soon as possible).  */
    bbs = get_loop_body (loop);
*************** verify_loop_structure (struct loops *loo
*** 1137,1144 ****
  	}
      }
  
-   free (sizes);
- 
    /* Check get_loop_body.  */
    for (i = 1; i < loops->num; i++)
      {
--- 1315,1320 ----
*************** verify_loop_structure (struct loops *loo
*** 1165,1185 ****
  	continue;
  
        if ((loops->state & LOOPS_HAVE_PREHEADERS)
! 	  && (!loop->header->pred->pred_next
! 	      || loop->header->pred->pred_next->pred_next))
  	{
  	  error ("Loop %d's header does not have exactly 2 entries.", i);
  	  err = 1;
  	}
        if (loops->state & LOOPS_HAVE_SIMPLE_LATCHES)
  	{
! 	  if (!loop->latch->succ
! 	      || loop->latch->succ->succ_next)
  	    {
  	      error ("Loop %d's latch does not have exactly 1 successor.", i);
  	      err = 1;
  	    }
! 	  if (loop->latch->succ->dest != loop->header)
  	    {
  	      error ("Loop %d's latch does not have header as successor.", i);
  	      err = 1;
--- 1341,1359 ----
  	continue;
  
        if ((loops->state & LOOPS_HAVE_PREHEADERS)
! 	  && EDGE_COUNT (loop->header->preds) != 2)
  	{
  	  error ("Loop %d's header does not have exactly 2 entries.", i);
  	  err = 1;
  	}
        if (loops->state & LOOPS_HAVE_SIMPLE_LATCHES)
  	{
! 	  if (EDGE_COUNT (loop->latch->succs) != 1)
  	    {
  	      error ("Loop %d's latch does not have exactly 1 successor.", i);
  	      err = 1;
  	    }
! 	  if (EDGE_SUCC (loop->latch, 0)->dest != loop->header)
  	    {
  	      error ("Loop %d's latch does not have header as successor.", i);
  	      err = 1;
*************** verify_loop_structure (struct loops *loo
*** 1210,1220 ****
        irreds = sbitmap_alloc (last_basic_block);
        FOR_EACH_BB (bb)
  	{
  	  if (bb->flags & BB_IRREDUCIBLE_LOOP)
  	    SET_BIT (irreds, bb->index);
  	  else
  	    RESET_BIT (irreds, bb->index);
! 	  for (e = bb->succ; e; e = e->succ_next)
  	    if (e->flags & EDGE_IRREDUCIBLE_LOOP)
  	      e->flags |= EDGE_ALL_FLAGS + 1;
  	}
--- 1384,1395 ----
        irreds = sbitmap_alloc (last_basic_block);
        FOR_EACH_BB (bb)
  	{
+ 	  edge_iterator ei;
  	  if (bb->flags & BB_IRREDUCIBLE_LOOP)
  	    SET_BIT (irreds, bb->index);
  	  else
  	    RESET_BIT (irreds, bb->index);
! 	  FOR_EACH_EDGE (e, ei, bb->succs)
  	    if (e->flags & EDGE_IRREDUCIBLE_LOOP)
  	      e->flags |= EDGE_ALL_FLAGS + 1;
  	}
*************** verify_loop_structure (struct loops *loo
*** 1225,1230 ****
--- 1400,1407 ----
        /* Compare.  */
        FOR_EACH_BB (bb)
  	{
+ 	  edge_iterator ei;
+ 
  	  if ((bb->flags & BB_IRREDUCIBLE_LOOP)
  	      && !TEST_BIT (irreds, bb->index))
  	    {
*************** verify_loop_structure (struct loops *loo
*** 1237,1243 ****
  	      error ("Basic block %d should not be marked irreducible.", bb->index);
  	      err = 1;
  	    }
! 	  for (e = bb->succ; e; e = e->succ_next)
  	    {
  	      if ((e->flags & EDGE_IRREDUCIBLE_LOOP)
  		  && !(e->flags & (EDGE_ALL_FLAGS + 1)))
--- 1414,1420 ----
  	      error ("Basic block %d should not be marked irreducible.", bb->index);
  	      err = 1;
  	    }
! 	  FOR_EACH_EDGE (e, ei, bb->succs)
  	    {
  	      if ((e->flags & EDGE_IRREDUCIBLE_LOOP)
  		  && !(e->flags & (EDGE_ALL_FLAGS + 1)))
*************** verify_loop_structure (struct loops *loo
*** 1259,1278 ****
        free (irreds);
      }
  
!   if (err)
!     abort ();
  }
  
  /* Returns latch edge of LOOP.  */
  edge
  loop_latch_edge (const struct loop *loop)
  {
!   edge e;
! 
!   for (e = loop->header->pred; e->src != loop->latch; e = e->pred_next)
!     continue;
! 
!   return e;
  }
  
  /* Returns preheader edge of LOOP.  */
--- 1436,1513 ----
        free (irreds);
      }
  
!   /* Check the single_exit.  */
!   if (loops->state & LOOPS_HAVE_MARKED_SINGLE_EXITS)
!     {
!       memset (sizes, 0, sizeof (unsigned) * loops->num);
!       FOR_EACH_BB (bb)
! 	{
! 	  edge_iterator ei;
! 	  if (bb->loop_father == loops->tree_root)
! 	    continue;
! 	  FOR_EACH_EDGE (e, ei, bb->succs)
! 	    {
! 	      if (e->dest == EXIT_BLOCK_PTR)
! 		continue;
! 
! 	      if (flow_bb_inside_loop_p (bb->loop_father, e->dest))
! 		continue;
! 
! 	      for (loop = bb->loop_father;
! 		   loop != e->dest->loop_father;
! 		   loop = loop->outer)
! 		{
! 		  sizes[loop->num]++;
! 		  if (loop->single_exit
! 		      && loop->single_exit != e)
! 		    {
! 		      error ("Wrong single exit %d->%d recorded for loop %d.",
! 			     loop->single_exit->src->index,
! 			     loop->single_exit->dest->index,
! 			     loop->num);
! 		      error ("Right exit is %d->%d.",
! 			     e->src->index, e->dest->index);
! 		      err = 1;
! 		    }
! 		}
! 	    }
! 	}
! 
!       for (i = 1; i < loops->num; i++)
! 	{
! 	  loop = loops->parray[i];
! 	  if (!loop)
! 	    continue;
! 
! 	  if (sizes[i] == 1
! 	      && !loop->single_exit)
! 	    {
! 	      error ("Single exit not recorded for loop %d.", loop->num);
! 	      err = 1;
! 	    }
! 
! 	  if (sizes[i] != 1
! 	      && loop->single_exit)
! 	    {
! 	      error ("Loop %d should not have single exit (%d -> %d).",
! 		     loop->num,
! 		     loop->single_exit->src->index,
! 		     loop->single_exit->dest->index);
! 	      err = 1;
! 	    }
! 	}
!     }
! 
!   gcc_assert (!err);
! 
!   free (sizes);
  }
  
  /* Returns latch edge of LOOP.  */
  edge
  loop_latch_edge (const struct loop *loop)
  {
!   return find_edge (loop->latch, loop->header);
  }
  
  /* Returns preheader edge of LOOP.  */
*************** edge
*** 1280,1288 ****
  loop_preheader_edge (const struct loop *loop)
  {
    edge e;
  
!   for (e = loop->header->pred; e->src == loop->latch; e = e->pred_next)
!     continue;
  
    return e;
  }
--- 1515,1525 ----
  loop_preheader_edge (const struct loop *loop)
  {
    edge e;
+   edge_iterator ei;
  
!   FOR_EACH_EDGE (e, ei, loop->header->preds)
!     if (e->src != loop->latch)
!       break;
  
    return e;
  }
diff -Nrcpad gcc-3.4.3/gcc/cfgloop.h gcc-4.0.0/gcc/cfgloop.h
*** gcc-3.4.3/gcc/cfgloop.h	Tue Mar  2 01:12:03 2004
--- gcc-4.0.0/gcc/cfgloop.h	Wed Dec 15 21:18:42 2004
*************** along with GCC; see the file COPYING.  I
*** 19,24 ****
--- 19,31 ----
  Software Foundation, 59 Temple Place - Suite 330, Boston, MA
  02111-1307, USA.  */
  
+ #ifndef GCC_CFGLOOP_H
+ #define GCC_CFGLOOP_H
+ 
+ #include "basic-block.h"
+ /* For rtx_code.  */
+ #include "rtl.h"
+ 
  /* Structure to hold decision about unrolling/peeling.  */
  enum lpt_dec
  {
*************** struct lpt_decision
*** 36,62 ****
    unsigned times;
  };
  
! /* Description of loop for simple loop unrolling.  */
! struct loop_desc
  {
!   int postincr;		/* 1 if increment/decrement is done after loop exit condition.  */
!   rtx stride;		/* Value added to VAR in each iteration.  */
!   rtx var;		/* Loop control variable.  */
!   enum machine_mode inner_mode;
! 			/* The mode from that it is extended.  */
!   enum rtx_code extend;	/* With this extend.  */
!   rtx var_alts;		/* List of definitions of its initial value.  */
!   rtx lim;		/* Expression var is compared with.  */
!   rtx lim_alts;		/* List of definitions of its initial value.  */
!   bool const_iter;      /* True if it iterates constant number of times.  */
!   unsigned HOST_WIDE_INT niter;
! 			/* Number of iterations if it is constant.  */
!   bool may_be_zero;     /* If we cannot determine that the first iteration will pass.  */
!   enum rtx_code cond;	/* Exit condition.  */
!   int neg;		/* Set to 1 if loop ends when condition is satisfied.  */
!   edge out_edge;	/* The exit edge.  */
!   edge in_edge;		/* And the other one.  */
!   int n_branches;	/* Number of branches inside the loop.  */
  };
  
  /* Structure to hold information for each natural loop.  */
--- 43,60 ----
    unsigned times;
  };
  
! /* The structure describing a bound on number of iterations of a loop.  */
! 
! struct nb_iter_bound
  {
!   tree bound;		/* The expression whose value is an upper bound on the
! 			   number of executions of anything after ...  */
!   tree at_stmt;		/* ... this statement during one execution of loop.  */
!   tree additional;	/* A conjunction of conditions the operands of BOUND
! 			   satisfy.  The additional information about the value
! 			   of the bound may be derived from it.  */
!   struct nb_iter_bound *next;
! 			/* The next bound in a list.  */
  };
  
  /* Structure to hold information for each natural loop.  */
*************** struct loop
*** 77,87 ****
    /* For loop unrolling/peeling decision.  */
    struct lpt_decision lpt_decision;
  
-   /* Simple loop description.  */
-   int simple;
-   struct loop_desc desc;
-   int has_desc;
- 
    /* Number of loop insns.  */
    unsigned ninsns;
  
--- 75,80 ----
*************** struct loop
*** 104,112 ****
       the loop latch.  */
    basic_block last;
  
-   /* Bitmap of blocks contained within the loop.  */
-   sbitmap nodes;
- 
    /* Number of blocks contained within the loop.  */
    unsigned num_nodes;
  
--- 97,102 ----
*************** struct loop
*** 154,170 ****
    void *aux;
  
    /* The following are currently used by loop.c but they are likely to
!      disappear as loop.c is converted to use the CFG.  */
! 
!   /* Nonzero if the loop has a NOTE_INSN_LOOP_VTOP.  */
!   rtx vtop;
! 
!   /* Nonzero if the loop has a NOTE_INSN_LOOP_CONT.
!      A continue statement will generate a branch to NEXT_INSN (cont).  */
!   rtx cont;
! 
!   /* The dominator of cont.  */
!   rtx cont_dominator;
  
    /* The NOTE_INSN_LOOP_BEG.  */
    rtx start;
--- 144,150 ----
    void *aux;
  
    /* The following are currently used by loop.c but they are likely to
!      disappear when loop.c is replaced and removed.  */
  
    /* The NOTE_INSN_LOOP_BEG.  */
    rtx start;
*************** struct loop
*** 196,201 ****
--- 176,205 ----
    /* The number of LABEL_REFs on exit_labels for this loop and all
       loops nested inside it.  */
    int exit_count;
+ 
+   /* The probable number of times the loop is executed at runtime.
+      This is an INTEGER_CST or an expression containing symbolic
+      names.  Don't access this field directly:
+      number_of_iterations_in_loop computes and caches the computed
+      information in this field.  */
+   tree nb_iterations;
+ 
+   /* An INTEGER_CST estimation of the number of iterations.  NULL_TREE
+      if there is no estimation.  */
+   tree estimated_nb_iterations;
+ 
+   /* Upper bound on number of iterations of a loop.  */
+   struct nb_iter_bound *bounds;
+ 
+   /* If not NULL, loop has just single exit edge stored here (edges to the
+      EXIT_BLOCK_PTR do not count.  */
+   edge single_exit;
+ 
+   /* True when the loop does not carry data dependences, and
+      consequently the iterations can be executed in any order.  False
+      when the loop carries data dependences, or when the property is
+      not decidable.  */
+   bool parallel_p;
  };
  
  /* Flags for state of loop structure.  */
*************** enum
*** 203,209 ****
  {
    LOOPS_HAVE_PREHEADERS = 1,
    LOOPS_HAVE_SIMPLE_LATCHES = 2,
!   LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS = 4
  };
  
  /* Structure to hold CFG information about natural loops within a function.  */
--- 207,214 ----
  {
    LOOPS_HAVE_PREHEADERS = 1,
    LOOPS_HAVE_SIMPLE_LATCHES = 2,
!   LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS = 4,
!   LOOPS_HAVE_MARKED_SINGLE_EXITS = 8
  };
  
  /* Structure to hold CFG information about natural loops within a function.  */
*************** struct loops
*** 212,227 ****
    /* Number of natural loops in the function.  */
    unsigned num;
  
-   /* Maximum nested loop level in the function.  */
-   unsigned levels;
- 
    /* Array of natural loop descriptors (scanning this array in reverse order
       will find the inner loops before their enclosing outer loops).  */
    struct loop *array;
  
    /* The above array is unused in new loop infrastructure and is kept only for
       purposes of the old loop optimizer.  Instead we store just pointers to
!      loops here.  */
    struct loop **parray;
  
    /* Pointer to root of loop hierarchy tree.  */
--- 217,232 ----
    /* Number of natural loops in the function.  */
    unsigned num;
  
    /* Array of natural loop descriptors (scanning this array in reverse order
       will find the inner loops before their enclosing outer loops).  */
    struct loop *array;
  
    /* The above array is unused in new loop infrastructure and is kept only for
       purposes of the old loop optimizer.  Instead we store just pointers to
!      loops here.  
!      Note that a loop in this array may actually be NULL, if the loop
!      has been removed and the entire loops structure has not been
!      recomputed since that time.  */
    struct loop **parray;
  
    /* Pointer to root of loop hierarchy tree.  */
*************** struct loops
*** 245,250 ****
--- 250,259 ----
    int state;
  };
  
+ /* The loop tree currently optimized.  */
+ 
+ extern struct loops *current_loops;
+ 
  /* Flags for loop discovery.  */
  
  #define LOOP_TREE		1	/* Build loop hierarchy tree.  */
*************** struct loops
*** 256,262 ****
  
  /* Loop recognition.  */
  extern int flow_loops_find (struct loops *, int flags);
- extern int flow_loops_update (struct loops *, int flags);
  extern void flow_loops_free (struct loops *);
  extern void flow_loops_dump (const struct loops *, FILE *,
  			     void (*)(const struct loop *, FILE *, int), int);
--- 265,270 ----
*************** extern void flow_loop_dump (const struct
*** 265,270 ****
--- 273,280 ----
  extern int flow_loop_scan (struct loop *, int);
  extern void flow_loop_free (struct loop *);
  void mark_irreducible_loops (struct loops *);
+ void mark_single_exit_loops (struct loops *);
+ extern void create_loop_notes (void);
  
  /* Loop data structure manipulation/querying.  */
  extern void flow_loop_tree_node_add (struct loop *, struct loop *);
*************** extern bool flow_loop_outside_edge_p (co
*** 273,284 ****
--- 283,300 ----
  extern bool flow_loop_nested_p	(const struct loop *, const struct loop *);
  extern bool flow_bb_inside_loop_p (const struct loop *, const basic_block);
  extern struct loop * find_common_loop (struct loop *, struct loop *);
+ struct loop *superloop_at_depth (struct loop *, unsigned);
+ extern unsigned tree_num_loop_insns (struct loop *);
  extern int num_loop_insns (struct loop *);
  extern int average_num_loop_insns (struct loop *);
+ extern unsigned get_loop_level (const struct loop *);
  
  /* Loops & cfg manipulation.  */
  extern basic_block *get_loop_body (const struct loop *);
+ extern basic_block *get_loop_body_in_dom_order (const struct loop *);
+ extern basic_block *get_loop_body_in_bfs_order (const struct loop *);
  extern edge *get_loop_exit_edges (const struct loop *, unsigned *);
+ extern unsigned num_loop_branches (const struct loop *);
  
  extern edge loop_preheader_edge (const struct loop *);
  extern edge loop_latch_edge (const struct loop *);
*************** extern void force_single_succ_latches (s
*** 303,310 ****
  extern void verify_loop_structure (struct loops *);
  
  /* Loop analysis.  */
- extern bool simple_loop_p (struct loop *, struct loop_desc *);
- extern rtx count_loop_iterations (struct loop_desc *, rtx, rtx);
  extern bool just_once_each_iteration_p (struct loop *, basic_block);
  extern unsigned expected_loop_iterations (const struct loop *);
  
--- 319,324 ----
*************** extern bool can_duplicate_loop_p (struct
*** 314,326 ****
  #define DLTHE_FLAG_UPDATE_FREQ	1	/* Update frequencies in
  					   duplicate_loop_to_header_edge.  */
  
  extern int duplicate_loop_to_header_edge (struct loop *, edge, struct loops *,
  					  unsigned, sbitmap, edge, edge *,
  					  unsigned *, int);
! extern struct loop *loopify (struct loops *, edge, edge, basic_block);
! extern void unloop (struct loops *, struct loop *);
  extern bool remove_path (struct loops *, edge);
! extern edge split_loop_bb (basic_block, rtx);
  
  /* Loop optimizer initialization.  */
  extern struct loops *loop_optimizer_init (FILE *);
--- 328,465 ----
  #define DLTHE_FLAG_UPDATE_FREQ	1	/* Update frequencies in
  					   duplicate_loop_to_header_edge.  */
  
+ extern struct loop * duplicate_loop (struct loops *, struct loop *,
+ 				     struct loop *);
  extern int duplicate_loop_to_header_edge (struct loop *, edge, struct loops *,
  					  unsigned, sbitmap, edge, edge *,
  					  unsigned *, int);
! extern struct loop *loopify (struct loops *, edge, edge,
! 			     basic_block, edge, edge, bool);
  extern bool remove_path (struct loops *, edge);
! extern edge split_loop_bb (basic_block, void *);
! 
! /* Induction variable analysis.  */
! 
! /* The description of induction variable.  The things are a bit complicated
!    due to need to handle subregs and extends.  The value of the object described
!    by it can be obtained as follows (all computations are done in extend_mode):
! 
!    Value in i-th iteration is
!      delta + mult * extend_{extend_mode} (subreg_{mode} (base + i * step)).
! 
!    If first_special is true, the value in the first iteration is
!      delta + mult * base
!      
!    If extend = UNKNOWN, first_special must be false, delta 0, mult 1 and value is
!      subreg_{mode} (base + i * step)
! 
!    The get_iv_value function can be used to obtain these expressions.
! 
!    ??? Add a third mode field that would specify the mode in that inner
!    computation is done, which would enable it to be different from the
!    outer one?  */
! 
! struct rtx_iv
! {
!   /* Its base and step (mode of base and step is supposed to be extend_mode,
!      see the description above).  */
!   rtx base, step;
! 
!   /* The type of extend applied to it (SIGN_EXTEND, ZERO_EXTEND or UNKNOWN).  */
!   enum rtx_code extend;
! 
!   /* Operations applied in the extended mode.  */
!   rtx delta, mult;
! 
!   /* The mode it is extended to.  */
!   enum machine_mode extend_mode;
! 
!   /* The mode the variable iterates in.  */
!   enum machine_mode mode;
! 
!   /* Whether we have already filled the remaining fields.  */
!   unsigned analysed : 1;
! 
!   /* Whether the first iteration needs to be handled specially.  */
!   unsigned first_special : 1;
! };
! 
! /* The description of an exit from the loop and of the number of iterations
!    till we take the exit.  */
! 
! struct niter_desc
! {
!   /* The edge out of the loop.  */
!   edge out_edge;
! 
!   /* The other edge leading from the condition.  */
!   edge in_edge;
! 
!   /* True if we are able to say anything about number of iterations of the
!      loop.  */
!   bool simple_p;
! 
!   /* True if the loop iterates the constant number of times.  */
!   bool const_iter;
! 
!   /* Number of iterations if constant.  */
!   unsigned HOST_WIDEST_INT niter;
! 
!   /* Upper bound on the number of iterations.  */
!   unsigned HOST_WIDEST_INT niter_max;
! 
!   /* Assumptions under that the rest of the information is valid.  */
!   rtx assumptions;
! 
!   /* Assumptions under that the loop ends before reaching the latch,
!      even if value of niter_expr says otherwise.  */
!   rtx noloop_assumptions;
! 
!   /* Condition under that the loop is infinite.  */
!   rtx infinite;
! 
!   /* Whether the comparison is signed.  */
!   bool signed_p;
! 
!   /* The mode in that niter_expr should be computed.  */
!   enum machine_mode mode;
! 
!   /* The number of iterations of the loop.  */
!   rtx niter_expr;
! };
! 
! extern void iv_analysis_loop_init (struct loop *);
! extern rtx iv_get_reaching_def (rtx, rtx);
! extern bool iv_analyze (rtx, rtx, struct rtx_iv *);
! extern rtx get_iv_value (struct rtx_iv *, rtx);
! extern bool biv_p (rtx, rtx);
! extern void find_simple_exit (struct loop *, struct niter_desc *);
! extern void iv_analysis_done (void);
! 
! extern struct niter_desc *get_simple_loop_desc (struct loop *loop);
! extern void free_simple_loop_desc (struct loop *loop);
! 
! static inline struct niter_desc *
! simple_loop_desc (struct loop *loop)
! {
!   return loop->aux;
! }
! 
! /* The properties of the target.  */
! 
! extern unsigned target_avail_regs;	/* Number of available registers.  */
! extern unsigned target_res_regs;	/* Number of reserved registers.  */
! extern unsigned target_small_cost;	/* The cost for register when there
! 					   is a free one.  */
! extern unsigned target_pres_cost;	/* The cost for register when there are
! 					   not too many free ones.  */
! extern unsigned target_spill_cost;	/* The cost for register when we need
! 					   to spill.  */
! 
! /* Register pressure estimation for induction variable optimizations & loop
!    invariant motion.  */
! extern unsigned global_cost_for_size (unsigned, unsigned, unsigned);
! extern void init_set_costs (void);
  
  /* Loop optimizer initialization.  */
  extern struct loops *loop_optimizer_init (FILE *);
*************** enum
*** 337,341 ****
  };
  
  extern void unroll_and_peel_loops (struct loops *, int);
! extern bool is_bct_cond (rtx);
! extern rtx get_var_set_from_bct (rtx); 
--- 476,490 ----
  };
  
  extern void unroll_and_peel_loops (struct loops *, int);
! extern void doloop_optimize_loops (struct loops *);
! extern void move_loop_invariants (struct loops *);
! extern void record_estimate (struct loop *, tree, tree, tree);
! 
! /* Old loop optimizer interface.  */
! 
! /* Flags passed to loop_optimize.  */
! #define LOOP_PREFETCH 1
! 
! extern void loop_optimize (rtx, FILE *, int);
! 
! #endif /* GCC_CFGLOOP_H */
diff -Nrcpad gcc-3.4.3/gcc/cfgloopanal.c gcc-4.0.0/gcc/cfgloopanal.c
*** gcc-3.4.3/gcc/cfgloopanal.c	Wed Jun  9 02:05:26 2004
--- gcc-4.0.0/gcc/cfgloopanal.c	Mon Nov 22 12:23:44 2004
*************** Software Foundation, 59 Temple Place - S
*** 24,78 ****
  #include "tm.h"
  #include "rtl.h"
  #include "hard-reg-set.h"
  #include "basic-block.h"
  #include "cfgloop.h"
  #include "expr.h"
  #include "output.h"
- /* Needed for doloop_condition_get().  */
- #include "loop.h"
- 
- struct unmark_altered_insn_data;
- static void unmark_altered (rtx, rtx, regset);
- static void blocks_invariant_registers (basic_block *, int, regset);
- static void unmark_altered_insn (rtx, rtx, struct unmark_altered_insn_data *);
- static void blocks_single_set_registers (basic_block *, int, rtx *);
- static int invariant_rtx_wrto_regs_p_helper (rtx *, regset);
- static bool invariant_rtx_wrto_regs_p (rtx, regset);
- static rtx test_for_iteration (struct loop_desc *desc, unsigned HOST_WIDE_INT);
- static bool constant_iterations (struct loop_desc *, unsigned HOST_WIDE_INT *,
- 				 bool *);
- static bool simple_loop_exit_p (struct loop *, edge, regset,
- 				rtx *, struct loop_desc *);
- static rtx variable_initial_value (rtx, regset, rtx, rtx *, enum machine_mode);
- static rtx variable_initial_values (edge, rtx, enum machine_mode);
- static bool simple_condition_p (struct loop *, rtx, regset,
- 				struct loop_desc *);
- static basic_block simple_increment (struct loop *, rtx *, struct loop_desc *);
- static rtx count_strange_loop_iterations (rtx, rtx, enum rtx_code,
- 					  int, rtx, enum machine_mode,
- 					  enum machine_mode);
- static unsigned HOST_WIDEST_INT inverse (unsigned HOST_WIDEST_INT, int);
- static bool fits_in_mode_p (enum machine_mode mode, rtx expr);
- 
- /* Computes inverse to X modulo (1 << MOD).  */
- static unsigned HOST_WIDEST_INT
- inverse (unsigned HOST_WIDEST_INT x, int mod)
- {
-   unsigned HOST_WIDEST_INT mask =
- 	  ((unsigned HOST_WIDEST_INT) 1 << (mod - 1) << 1) - 1;
-   unsigned HOST_WIDEST_INT rslt = 1;
-   int i;
- 
-   for (i = 0; i < mod - 1; i++)
-     {
-       rslt = (rslt * x) & mask;
-       x = (x * x) & mask;
-     }
- 
-   return rslt;
- }
  
  /* Checks whether BB is executed exactly once in each LOOP iteration.  */
  bool
  just_once_each_iteration_p (struct loop *loop, basic_block bb)
  {
--- 24,37 ----
  #include "tm.h"
  #include "rtl.h"
  #include "hard-reg-set.h"
+ #include "obstack.h"
  #include "basic-block.h"
  #include "cfgloop.h"
  #include "expr.h"
  #include "output.h"
  
  /* Checks whether BB is executed exactly once in each LOOP iteration.  */
+ 
  bool
  just_once_each_iteration_p (struct loop *loop, basic_block bb)
  {
*************** just_once_each_iteration_p (struct loop 
*** 91,1128 ****
    return true;
  }
  
  
! /* Unmarks modified registers; helper to blocks_invariant_registers.  */
! static void
! unmark_altered (rtx what, rtx by ATTRIBUTE_UNUSED, regset regs)
! {
!   if (GET_CODE (what) == SUBREG)
!     what = SUBREG_REG (what);
!   if (!REG_P (what))
!     return;
!   CLEAR_REGNO_REG_SET (regs, REGNO (what));
! }
! 
! /* Marks registers that are invariant inside blocks BBS.  */
! static void
! blocks_invariant_registers (basic_block *bbs, int nbbs, regset regs)
  {
!   rtx insn;
!   int i;
  
!   for (i = 0; i < max_reg_num (); i++)
!     SET_REGNO_REG_SET (regs, i);
!   for (i = 0; i < nbbs; i++)
!     for (insn = BB_HEAD (bbs[i]);
! 	 insn != NEXT_INSN (BB_END (bbs[i]));
! 	 insn = NEXT_INSN (insn))
!       if (INSN_P (insn))
! 	note_stores (PATTERN (insn),
! 		     (void (*) (rtx, rtx, void *)) unmark_altered,
! 		     regs);
! }
  
! /* Unmarks modified registers; helper to blocks_single_set_registers.  */
! struct unmark_altered_insn_data
  {
!   rtx *regs;
!   rtx insn;
  };
  
! static void
! unmark_altered_insn (rtx what, rtx by ATTRIBUTE_UNUSED,
! 		     struct unmark_altered_insn_data *data)
  {
!   int rn;
  
!   if (GET_CODE (what) == SUBREG)
!     what = SUBREG_REG (what);
!   if (!REG_P (what))
!     return;
!   rn = REGNO (what);
!   if (data->regs[rn] == data->insn)
!     return;
!   data->regs[rn] = NULL;
! }
  
! /* Marks registers that have just single simple set in BBS; the relevant
!    insn is returned in REGS.  */
! static void
! blocks_single_set_registers (basic_block *bbs, int nbbs, rtx *regs)
  {
-   rtx insn;
    int i;
!   struct unmark_altered_insn_data data;
! 
!   for (i = 0; i < max_reg_num (); i++)
!     regs[i] = NULL;
! 
!   for (i = 0; i < nbbs; i++)
!     for (insn = BB_HEAD (bbs[i]);
! 	 insn != NEXT_INSN (BB_END (bbs[i]));
! 	 insn = NEXT_INSN (insn))
!       {
! 	rtx set = single_set (insn);
! 
! 	if (!set && is_bct_cond (insn))
! 	  set = get_var_set_from_bct(insn);
! 
! 	if (!set)
! 	  continue;
! 	if (!REG_P (SET_DEST (set)))
! 	  continue;
! 	regs[REGNO (SET_DEST (set))] = insn;
!       }
! 
!   data.regs = regs;
!   for (i = 0; i < nbbs; i++)
!     for (insn = BB_HEAD (bbs[i]);
! 	 insn != NEXT_INSN (BB_END (bbs[i]));
! 	 insn = NEXT_INSN (insn))
!       {
!         if (!INSN_P (insn))
! 	  continue;
! 	data.insn = insn;
! 	note_stores (PATTERN (insn),
! 	    (void (*) (rtx, rtx, void *)) unmark_altered_insn,
! 	    &data);
!       }
! }
  
! /* Helper for invariant_rtx_wrto_regs_p.  */
! static int
! invariant_rtx_wrto_regs_p_helper (rtx *expr, regset invariant_regs)
! {
!   switch (GET_CODE (*expr))
      {
!     case CC0:
!     case PC:
!     case UNSPEC_VOLATILE:
!       return 1;
! 
!     case CONST_INT:
!     case CONST_DOUBLE:
!     case CONST:
!     case SYMBOL_REF:
!     case LABEL_REF:
!       return 0;
! 
!     case ASM_OPERANDS:
!       return MEM_VOLATILE_P (*expr);
! 
!     case MEM:
!       /* If the memory is not constant, assume it is modified.  If it is
! 	 constant, we still have to check the address.  */
!       return !RTX_UNCHANGING_P (*expr);
  
!     case REG:
!       return !REGNO_REG_SET_P (invariant_regs, REGNO (*expr));
  
!     default:
!       return 0;
      }
  }
  
! /* Checks that EXPR is invariant provided that INVARIANT_REGS are invariant.  */
! static bool
! invariant_rtx_wrto_regs_p (rtx expr, regset invariant_regs)
! {
!   return !for_each_rtx (&expr, (rtx_function) invariant_rtx_wrto_regs_p_helper,
! 			invariant_regs);
! }
  
! /* Checks whether CONDITION is a simple comparison in that one of operands
!    is register and the other one is invariant in the LOOP. Fills var, lim
!    and cond fields in DESC.  */
! static bool
! simple_condition_p (struct loop *loop ATTRIBUTE_UNUSED, rtx condition,
! 		    regset invariant_regs, struct loop_desc *desc)
  {
!   rtx op0, op1;
! 
!   /* Check condition.  */
!   switch (GET_CODE (condition))
!     {
!       case EQ:
!       case NE:
!       case LE:
!       case LT:
!       case GE:
!       case GT:
!       case GEU:
!       case GTU:
!       case LEU:
!       case LTU:
! 	break;
!       default:
! 	return false;
!     }
! 
!   /* Of integers or pointers.  */
!   if (GET_MODE_CLASS (GET_MODE (XEXP (condition, 0))) != MODE_INT
!       && GET_MODE_CLASS (GET_MODE (XEXP (condition, 0))) != MODE_PARTIAL_INT)
!     return false;
! 
!   /* One of operands must be a simple register.  */
!   op0 = XEXP (condition, 0);
!   op1 = XEXP (condition, 1);
! 
!   /* One of operands must be invariant.  */
!   if (invariant_rtx_wrto_regs_p (op0, invariant_regs))
!     {
!       /* And the other one must be a register.  */
!       if (!REG_P (op1))
! 	return false;
!       desc->var = op1;
!       desc->lim = op0;
! 
!       desc->cond = swap_condition (GET_CODE (condition));
!       if (desc->cond == UNKNOWN)
! 	return false;
!       return true;
!     }
! 
!   /* Check the other operand.  */
!   if (!invariant_rtx_wrto_regs_p (op1, invariant_regs))
!     return false;
!   if (!REG_P (op0))
!     return false;
! 
!   desc->var = op0;
!   desc->lim = op1;
  
!   desc->cond = GET_CODE (condition);
  
!   return true;
  }
  
! /* Checks whether DESC->var is incremented/decremented exactly once each
!    iteration.  Fills in DESC->stride and returns block in that DESC->var is
!    modified.  */
! static basic_block
! simple_increment (struct loop *loop, rtx *simple_increment_regs,
! 		  struct loop_desc *desc)
! {
!   rtx mod_insn, mod_insn1, set, set_src, set_add;
!   basic_block mod_bb, mod_bb1;
! 
!   /* Find insn that modifies var.  */
!   mod_insn = simple_increment_regs[REGNO (desc->var)];
!   if (!mod_insn)
!     return NULL;
!   mod_bb = BLOCK_FOR_INSN (mod_insn);
! 
!   /* Check that it is executed exactly once each iteration.  */
!   if (!just_once_each_iteration_p (loop, mod_bb))
!     return NULL;
! 
!   /* mod_insn must be a simple increment/decrement.  */
!   set = single_set (mod_insn);
! 
!   if (!set && is_bct_cond (mod_insn))
!     set = get_var_set_from_bct(mod_insn);
! 
!   if (!set)
!     abort ();
!   if (!rtx_equal_p (SET_DEST (set), desc->var))
!     abort ();
! 
!   set_src = find_reg_equal_equiv_note (mod_insn);
!   if (!set_src)
!     set_src = SET_SRC (set);
! 
!   /* Check for variables that iterate in narrower mode.  */
!   if (GET_CODE (set_src) == SIGN_EXTEND
!       || GET_CODE (set_src) == ZERO_EXTEND)
!     {
!       /* If we are sign extending variable that is then compared unsigned
! 	 or vice versa, there is something weird happening.  */
!       if (desc->cond != EQ
! 	  && desc->cond != NE
! 	  && ((desc->cond == LEU
! 	       || desc->cond == LTU
! 	       || desc->cond == GEU
! 	       || desc->cond == GTU)
! 	      ^ (GET_CODE (set_src) == ZERO_EXTEND)))
! 	return NULL;
! 
!       if (GET_CODE (XEXP (set_src, 0)) != SUBREG
! 	  || SUBREG_BYTE (XEXP (set_src, 0)) != 0
! 	  || GET_MODE (SUBREG_REG (XEXP (set_src, 0))) != GET_MODE (desc->var))
! 	return NULL;
! 
!       desc->inner_mode = GET_MODE (XEXP (set_src, 0));
!       desc->extend = GET_CODE (set_src);
!       set_src = SUBREG_REG (XEXP (set_src, 0));
! 
!       if (GET_CODE (set_src) != REG)
! 	return NULL;
! 
!       /* Find where the reg is set.  */
!       mod_insn1 = simple_increment_regs[REGNO (set_src)];
!       if (!mod_insn1)
! 	return NULL;
! 
!       mod_bb1 = BLOCK_FOR_INSN (mod_insn1);
!       if (!dominated_by_p (CDI_DOMINATORS, mod_bb, mod_bb1))
! 	return NULL;
!       if (mod_bb1 == mod_bb)
! 	{
! 	  for (;
! 	       mod_insn != PREV_INSN (BB_HEAD (mod_bb));
! 	       mod_insn = PREV_INSN (mod_insn))
! 	    if (mod_insn == mod_insn1)
! 	      break;
! 
! 	  if (mod_insn == PREV_INSN (BB_HEAD (mod_bb)))
! 	    return NULL;
! 	}
! 
!       /* Replace the source with the possible place of increment.  */
!       set = single_set (mod_insn1);
!       if (!set)
! 	abort ();
!       if (!rtx_equal_p (SET_DEST (set), set_src))
! 	abort ();
! 
!       set_src = find_reg_equal_equiv_note (mod_insn1);
!       if (!set_src)
! 	set_src = SET_SRC (set);
!     }
!   else
!     {
!       desc->inner_mode = GET_MODE (desc->var);
!       desc->extend = NIL;
!     }
! 
!   if (GET_CODE (set_src) != PLUS)
!     return NULL;
!   if (!rtx_equal_p (XEXP (set_src, 0), desc->var))
!     return NULL;
! 
!   /* Set desc->stride.  */
!   set_add = XEXP (set_src, 1);
!   if (CONSTANT_P (set_add))
!     desc->stride = set_add;
!   else
!     return NULL;
! 
!   return mod_bb;
! }
  
! /* Tries to find initial value of VAR in INSN.  This value must be invariant
!    wrto INVARIANT_REGS.  If SET_INSN is not NULL, insn in that var is set is
!    placed here.  INNER_MODE is mode in that induction variable VAR iterates.  */
! static rtx
! variable_initial_value (rtx insn, regset invariant_regs,
! 			rtx var, rtx *set_insn, enum machine_mode inner_mode)
  {
!   basic_block bb;
!   rtx set;
!   rtx ret = NULL;
! 
!   /* Go back through cfg.  */
!   bb = BLOCK_FOR_INSN (insn);
!   while (1)
!     {
!       for (; insn != BB_HEAD (bb); insn = PREV_INSN (insn))
! 	{
! 	  if (INSN_P (insn))
! 	    note_stores (PATTERN (insn),
! 		(void (*) (rtx, rtx, void *)) unmark_altered,
! 		invariant_regs);
! 	  if (modified_between_p (var, PREV_INSN (insn), NEXT_INSN (insn)))
! 	    break;
! 	}
! 
!       if (insn != BB_HEAD (bb))
! 	{
! 	  /* We found place where var is set.  */
! 	  rtx set_dest;
! 	  rtx val;
! 	  rtx note;
! 
! 	  set = single_set (insn);
! 	  if (!set)
! 	    return NULL;
! 	  set_dest = SET_DEST (set);
! 	  if (!rtx_equal_p (set_dest, var))
! 	    return NULL;
! 
! 	  note = find_reg_equal_equiv_note (insn);
! 	  if (note && GET_CODE (XEXP (note, 0)) != EXPR_LIST)
! 	    val = XEXP (note, 0);
! 	  else
! 	    val = SET_SRC (set);
! 
! 	  /* If we know that the initial value is indeed in range of
! 	     the inner mode, record the fact even in case the value itself
! 	     is useless.  */
! 	  if ((GET_CODE (val) == SIGN_EXTEND
! 	       || GET_CODE (val) == ZERO_EXTEND)
! 	      && GET_MODE (XEXP (val, 0)) == inner_mode)
! 	    ret = gen_rtx_fmt_e (GET_CODE (val),
! 				 GET_MODE (var),
! 				 gen_rtx_fmt_ei (SUBREG,
! 						 inner_mode,
! 						 var, 0));
! 
! 	  if (!invariant_rtx_wrto_regs_p (val, invariant_regs))
! 	    return ret;
! 
! 	  if (set_insn)
! 	    *set_insn = insn;
! 	  return val;
! 	}
! 
  
!       if (bb->pred->pred_next || bb->pred->src == ENTRY_BLOCK_PTR)
! 	return NULL;
  
!       bb = bb->pred->src;
!       insn = BB_END (bb);
!     }
  
!   return NULL;
  }
  
! /* Returns list of definitions of initial value of VAR at edge E.  INNER_MODE
!    is mode in that induction variable VAR really iterates.  */
! static rtx
! variable_initial_values (edge e, rtx var, enum machine_mode inner_mode)
! {
!   rtx set_insn, list;
!   regset invariant_regs;
!   regset_head invariant_regs_head;
!   int i;
! 
!   invariant_regs = INITIALIZE_REG_SET (invariant_regs_head);
!   for (i = 0; i < max_reg_num (); i++)
!     SET_REGNO_REG_SET (invariant_regs, i);
! 
!   list = alloc_EXPR_LIST (0, copy_rtx (var), NULL);
! 
!   if (e->src == ENTRY_BLOCK_PTR)
!     return list;
! 
!   set_insn = BB_END (e->src);
!   while (REG_P (var)
! 	 && (var = variable_initial_value (set_insn, invariant_regs, var,
! 					   &set_insn, inner_mode)))
!     list = alloc_EXPR_LIST (0, copy_rtx (var), list);
! 
!   FREE_REG_SET (invariant_regs);
!   return list;
! 
[file cut: first 33554432 bytes kept]
[document cut: first 31636746 of 33551853 characters kept]
